diff --git a/Firmware/.vs/RTLGDB/v14/.suo b/Firmware/.vs/RTLGDB/v14/.suo deleted file mode 100644 index 949c262..0000000 Binary files a/Firmware/.vs/RTLGDB/v14/.suo and /dev/null differ diff --git a/Firmware/.vs/_Firmware/v14/.suo b/Firmware/.vs/_Firmware/v14/.suo new file mode 100644 index 0000000..3b8ee76 Binary files /dev/null and b/Firmware/.vs/_Firmware/v14/.suo differ diff --git a/Firmware/.vs/config/applicationhost.config b/Firmware/.vs/config/applicationhost.config deleted file mode 100644 index b42cd34..0000000 --- a/Firmware/.vs/config/applicationhost.config +++ /dev/null @@ -1,1030 +0,0 @@ - - - - - - - - -
-
-
-
-
-
-
-
- - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
- -
-
-
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
- -
-
- -
-
-
- - -
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Firmware/RTLGDB/Assets/LinuxDebugger.xaml b/Firmware/Assets/LinuxDebugger.xaml similarity index 100% rename from Firmware/RTLGDB/Assets/LinuxDebugger.xaml rename to Firmware/Assets/LinuxDebugger.xaml diff --git a/Firmware/RTLGDB/Assets/LocalDebugger.xaml b/Firmware/Assets/LocalDebugger.xaml similarity index 100% rename from Firmware/RTLGDB/Assets/LocalDebugger.xaml rename to Firmware/Assets/LocalDebugger.xaml diff --git a/Firmware/RTLGDB/Assets/OCDDebugger.xaml b/Firmware/Assets/OCDDebugger.xaml similarity index 100% rename from Firmware/RTLGDB/Assets/OCDDebugger.xaml rename to Firmware/Assets/OCDDebugger.xaml diff --git a/Firmware/RTLGDB/Assets/linux_nmake.xaml b/Firmware/Assets/linux_nmake.xaml similarity index 100% rename from Firmware/RTLGDB/Assets/linux_nmake.xaml rename to Firmware/Assets/linux_nmake.xaml diff --git a/Firmware/RTLGDB/Debug/RTLGDB.log b/Firmware/Debug/Firmware.log similarity index 76% rename from Firmware/RTLGDB/Debug/RTLGDB.log rename to Firmware/Debug/Firmware.log index 40f3e99..3efe979 100644 --- a/Firmware/RTLGDB/Debug/RTLGDB.log +++ b/Firmware/Debug/Firmware.log @@ -1,6 +1,5 @@  =========================================================== Compile (Debug) - USDK/component/common/api/wifi_api_scan.c =========================================================== Link (Debug) =========================================================== @@ -8,15 +7,15 @@ Debug/obj/Debug.nmap =========================================================== Create image1r (Debug/bin/ram_1.r.bin) - b:268438472 s:268438472 e:268446992 - size 8520 + b:268438472 s:268438472 e:268446980 + size 8508 append fw head b000 - copy size 8520 + copy size 8508 =========================================================== Create image2ns (Debug/bin/ram_2.ns.bin) - b:268460032 s:268460032 e:268723820 - size 263788 - copy size 263788 + b:268460032 s:268460032 e:268723940 + size 263908 + copy size 263908 =========================================================== Create image3 (SDRAM, Debug/bin/sdram.p.bin) 30000000 30000000 @@ -25,21 +24,21 @@ copy size 0 =========================================================== Make OTA image (Debug/bin/ota.bin) - size = 263820 + size = 263940 - checksum 1a2dc8a + checksum 1a33b63 =========================================================== Create image2p (Debug/bin/ram_2.p.bin) - b:268460032 s:268460032 e:268723820 - size 263788 - copy size 263788 + b:268460032 s:268460032 e:268723940 + size 263908 + copy size 263908 =========================================================== Make Flash image (Debug/bin/ram_all.bin) total 44 k, padding data 0, name Debug/bin/ram_all.bin Original size zd Padding size zd ----------------------------------------------------------- - Image (Debug/bin/ota.bin) size 263824 bytes - Image (Debug/bin/ram_all.bin) size 308876 bytes + Image (Debug/bin/ota.bin) size 263944 bytes + Image (Debug/bin/ram_all.bin) size 308996 bytes =========================================================== diff --git a/Firmware/RTLGDB/Debug/bin/ota.bin b/Firmware/Debug/bin/ota.bin similarity index 65% rename from Firmware/RTLGDB/Debug/bin/ota.bin rename to Firmware/Debug/bin/ota.bin index 7ef5eaf..88d9ddc 100644 Binary files a/Firmware/RTLGDB/Debug/bin/ota.bin and b/Firmware/Debug/bin/ota.bin differ diff --git a/Firmware/RTLGDB/Debug/bin/ram_1.p.bin b/Firmware/Debug/bin/ram_1.p.bin similarity index 76% rename from Firmware/RTLGDB/Debug/bin/ram_1.p.bin rename to Firmware/Debug/bin/ram_1.p.bin index 49416ed..aa70b60 100644 Binary files a/Firmware/RTLGDB/Debug/bin/ram_1.p.bin and b/Firmware/Debug/bin/ram_1.p.bin differ diff --git a/Firmware/RTLGDB/Debug/bin/ram_1.r.bin b/Firmware/Debug/bin/ram_1.r.bin similarity index 75% rename from Firmware/RTLGDB/Debug/bin/ram_1.r.bin rename to Firmware/Debug/bin/ram_1.r.bin index 17d86c8..61261f1 100644 Binary files a/Firmware/RTLGDB/Debug/bin/ram_1.r.bin and b/Firmware/Debug/bin/ram_1.r.bin differ diff --git a/Firmware/RTLGDB/Debug/bin/ram_2.bin b/Firmware/Debug/bin/ram_2.bin similarity index 65% rename from Firmware/RTLGDB/Debug/bin/ram_2.bin rename to Firmware/Debug/bin/ram_2.bin index 84f4d3c..ea785d6 100644 Binary files a/Firmware/RTLGDB/Debug/bin/ram_2.bin and b/Firmware/Debug/bin/ram_2.bin differ diff --git a/Firmware/RTLGDB/Debug/bin/ram_2.ns.bin b/Firmware/Debug/bin/ram_2.ns.bin similarity index 65% rename from Firmware/RTLGDB/Debug/bin/ram_2.ns.bin rename to Firmware/Debug/bin/ram_2.ns.bin index 2809054..ea6cc76 100644 Binary files a/Firmware/RTLGDB/Debug/bin/ram_2.ns.bin and b/Firmware/Debug/bin/ram_2.ns.bin differ diff --git a/Firmware/RTLGDB/Debug/bin/ram_2.p.bin b/Firmware/Debug/bin/ram_2.p.bin similarity index 65% rename from Firmware/RTLGDB/Debug/bin/ram_2.p.bin rename to Firmware/Debug/bin/ram_2.p.bin index c5e3793..931c12f 100644 Binary files a/Firmware/RTLGDB/Debug/bin/ram_2.p.bin and b/Firmware/Debug/bin/ram_2.p.bin differ diff --git a/Firmware/RTLGDB/Debug/bin/ram_all.bin b/Firmware/Debug/bin/ram_all.bin similarity index 70% rename from Firmware/RTLGDB/Debug/bin/ram_all.bin rename to Firmware/Debug/bin/ram_all.bin index 6bafc90..325914b 100644 Binary files a/Firmware/RTLGDB/Debug/bin/ram_all.bin and b/Firmware/Debug/bin/ram_all.bin differ diff --git a/Firmware/RTLGDB/Debug/bin/sdram.bin b/Firmware/Debug/bin/sdram.bin similarity index 100% rename from Firmware/RTLGDB/Debug/bin/sdram.bin rename to Firmware/Debug/bin/sdram.bin diff --git a/Firmware/RTLGDB/Debug/bin/sdram.p.bin b/Firmware/Debug/bin/sdram.p.bin similarity index 100% rename from Firmware/RTLGDB/Debug/bin/sdram.p.bin rename to Firmware/Debug/bin/sdram.p.bin diff --git a/Firmware/Debug/obj/Debug.asm b/Firmware/Debug/obj/Debug.asm new file mode 100644 index 0000000..25d31ee --- /dev/null +++ b/Firmware/Debug/obj/Debug.asm @@ -0,0 +1,91733 @@ + +Debug/obj/Debug.axf: file format elf32-littlearm + + +Disassembly of section .ram_image1.text: + +10000bc8 <__ram_image1_text_start__>: +10000bc8: 10002c99 .word 0x10002c99 +10000bcc: 10002c93 .word 0x10002c93 +10000bd0: 10002c8d .word 0x10002c8d +10000bd4: 10002c87 .word 0x10002c87 +10000bd8: 10002c81 .word 0x10002c81 + +10000bdc : +10000bdc: 88167923 ffffffff #y...... + +10000be4 : +10000be4: 075bcd15 ..[. + +10000be8 : + ... + +10001be8 : +10001be8: 10001c4c 10001c30 10001bfc 00002710 L...0........'.. +10001bf8: 00000000 .... + +10001bfc : +10001bfc: 0000ea60 007733a0 00000002 00003a98 `....3w......:.. +10001c0c: 00003a98 0000a410 00000002 00004e20 .:.......... N.. +10001c1c: 00000000 00000002 00000000 00000001 ................ +10001c2c: 0000ea60 `... + +10001c30 : + ... +10001c38: 00000003 00000000 00000000 00000000 ................ +10001c48: 00000000 .... + +10001c4c : +10001c4c: 00000008 00000000 00000000 00000000 ................ +10001c5c: 00000000 .... + +10001c60 <_rtl_impure_ptr>: +10001c60: 10001c68 00000000 h....... + +10001c68 : +10001c68: 00000000 10001f54 10001fbc 10002024 ....T.......$ .. + ... +10001c9c: 000437dc 00000000 00000000 00000000 .7.............. + ... +10001d10: 00000001 00000000 abcd330e e66d1234 .........3..4.m. +10001d20: 0005deec 0000000b 00000000 00000000 ................ + ... + +10002090 <_rom_unc_data>: + ... + +100020b4 <_sdr_rnd2_y>: +100020b4: 000587c4 .... + +100020b8 <_sdr_rnd2_z>: +100020b8: 1f123bb5 .;.. + +100020bc <_sdr_rnd2_c>: +100020bc: 0074cbb1 ..t. + +100020c0 : + ... + +100021ec : + ... +1000227c: 3d3d3d0d 45203d3d 7265746e 414c4620 .===== Enter FLA +1000228c: 422d4853 20746f6f 3d3d3d3d 3d0d000a SH-Boot ====...= +1000229c: 3d3d3d3d 746e4520 53207265 2d4d4152 ==== Enter SRAM- +100022ac: 746f6f42 20642520 3d3d3d3d 5043000a Boot %d ====..CP +100022bc: 4c432055 25203a4b 7a482064 4f53202c U CLK: %d Hz, SO +100022cc: 55462043 4520434e 25203a4e 47000a70 C FUNC EN: %p..G +100022dc: 43207465 20706968 46204449 656c6961 et Chip ID Faile +100022ec: 53000d64 20636970 6e696572 25207469 d..Spic reinit % +100022fc: 64253a64 7053000a 49206369 2074696e d:%d..Spic Init +1000230c: 6c696166 53000a21 63205244 62696c61 fail!..SDR calib +1000231c: 69746172 203a6e6f 78323025 3230252d ration: %02x-%02 +1000232c: 57000a78 69746961 6620676e 5320726f x..Waiting for S +1000233c: 4d415244 206f7420 64616f6c 0a2e2e2e DRAM to load.... +1000234c: 52445300 6c204d41 2064616f 000a6b6f .SDRAM load ok.. +1000235c: 656c6553 64657463 616d4920 25206567 Selected Image % +1000236c: 000a2e64 64616f4c 616c4620 73206873 d...Load Flash s +1000237c: 64256765 7830203a 78383025 203e2d20 eg%d: 0x%08x -> +1000238c: 203a7325 30257830 202c7838 657a6973 %s: 0x%08x, size +1000239c: 6425203a 6f4e000a 616d4920 64256567 : %d..No Image%d +100023ac: 72542021 676e6979 616d4920 2e306567 ! Trying Image0. +100023bc: 000a2e2e 49206f4e 6567616d 000a2130 ....No Image0!.. +100023cc: 574b5452 49006e69 6c61766e 49206469 RTKWin.Invalid I +100023dc: 6567616d 67695320 7574616e 0a216572 mage Signature!. +100023ec: 676d4900 67695320 25203a6e 47202c73 .Img Sign: %s, G +100023fc: 2040206f 30257830 0a0d7838 4b4e5500 o @ 0x%08x...UNK +1000240c: 41525300 4354004d 4453004d 004d4152 .SRAM.TCM.SDRAM. +1000241c: 00434f53 53414c46 50430048 4f520055 SOC.FLASH.CPU.RO +1000242c: 0000004d M... + +10002430 : +10002430: 10000000 10070000 1fff0000 20000000 ............... +10002440: 30000000 30200000 40000000 40800000 ...0.. 0...@...@ +10002450: 98000000 a0000000 e0000000 e0010000 ................ +10002460: 00000000 00050000 ........ + +10002468 : +10002468: 10002409 1000240d 10002412 10002416 .$...$...$...$.. +10002478: 1000241c 10002420 10002426 1000242a .$.. $..&$..*$.. + +10002488 : +10002488: 4603 mov r3, r0 +1000248a: f1b0 4f18 cmp.w r0, #2550136832 ; 0x98000000 +1000248e: bf38 it cc +10002490: f100 4318 addcc.w r3, r0, #2550136832 ; 0x98000000 +10002494: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +10002496: f023 0003 bic.w r0, r3, #3 +1000249a: f013 0303 ands.w r3, r3, #3 +1000249e: d02f beq.n 10002500 +100024a0: 1d05 adds r5, r0, #4 +100024a2: 6800 ldr r0, [r0, #0] +100024a4: ac02 add r4, sp, #8 +100024a6: f844 0d04 str.w r0, [r4, #-4]! +100024aa: 1e5e subs r6, r3, #1 +100024ac: 4426 add r6, r4 +100024ae: 4614 mov r4, r2 +100024b0: 1a5b subs r3, r3, r1 +100024b2: b13c cbz r4, 100024c4 +100024b4: f816 0f01 ldrb.w r0, [r6, #1]! +100024b8: 3c01 subs r4, #1 +100024ba: f801 0b01 strb.w r0, [r1], #1 +100024be: 18c8 adds r0, r1, r3 +100024c0: 0747 lsls r7, r0, #29 +100024c2: d5f6 bpl.n 100024b2 +100024c4: 460b mov r3, r1 +100024c6: 08a0 lsrs r0, r4, #2 +100024c8: 0087 lsls r7, r0, #2 +100024ca: eb05 0e07 add.w lr, r5, r7 +100024ce: 4575 cmp r5, lr +100024d0: f103 0304 add.w r3, r3, #4 +100024d4: d117 bne.n 10002506 +100024d6: 07a6 lsls r6, r4, #30 +100024d8: eb01 0307 add.w r3, r1, r7 +100024dc: d00d beq.n 100024fa +100024de: 682d ldr r5, [r5, #0] +100024e0: f801 5020 strb.w r5, [r1, r0, lsl #2] +100024e4: 07a0 lsls r0, r4, #30 +100024e6: 9501 str r5, [sp, #4] +100024e8: d507 bpl.n 100024fa +100024ea: f89d 1005 ldrb.w r1, [sp, #5] +100024ee: 7059 strb r1, [r3, #1] +100024f0: 07e1 lsls r1, r4, #31 +100024f2: bf44 itt mi +100024f4: f89d 1006 ldrbmi.w r1, [sp, #6] +100024f8: 7099 strbmi r1, [r3, #2] +100024fa: 4610 mov r0, r2 +100024fc: b003 add sp, #12 +100024fe: bdf0 pop {r4, r5, r6, r7, pc} +10002500: 4614 mov r4, r2 +10002502: 4605 mov r5, r0 +10002504: e7de b.n 100024c4 +10002506: f855 6b04 ldr.w r6, [r5], #4 +1000250a: f3c6 2c07 ubfx ip, r6, #8, #8 +1000250e: f803 6c04 strb.w r6, [r3, #-4] +10002512: f803 cc03 strb.w ip, [r3, #-3] +10002516: f3c6 4c07 ubfx ip, r6, #16, #8 +1000251a: 0e36 lsrs r6, r6, #24 +1000251c: f803 cc02 strb.w ip, [r3, #-2] +10002520: f803 6c01 strb.w r6, [r3, #-1] +10002524: e7d3 b.n 100024ce + ... + +10002528 : +10002528: 2900 cmp r1, #0 +1000252a: b570 push {r4, r5, r6, lr} +1000252c: dd12 ble.n 10002554 +1000252e: 2300 movs r3, #0 +10002530: 4a0a ldr r2, [pc, #40] ; (1000255c ) +10002532: 1846 adds r6, r0, r1 +10002534: f852 5c08 ldr.w r5, [r2, #-8] +10002538: 3301 adds r3, #1 +1000253a: 4285 cmp r5, r0 +1000253c: d806 bhi.n 1000254c +1000253e: f852 4c04 ldr.w r4, [r2, #-4] +10002542: 42a6 cmp r6, r4 +10002544: d802 bhi.n 1000254c +10002546: 1b64 subs r4, r4, r5 +10002548: 42a1 cmp r1, r4 +1000254a: d904 bls.n 10002556 +1000254c: 2b08 cmp r3, #8 +1000254e: f102 0208 add.w r2, r2, #8 +10002552: d1ef bne.n 10002534 +10002554: 2300 movs r3, #0 +10002556: 4618 mov r0, r3 +10002558: bd70 pop {r4, r5, r6, pc} +1000255a: bf00 nop +1000255c: 10002438 .word 0x10002438 + +10002560 : +10002560: 4b06 ldr r3, [pc, #24] ; (1000257c ) +10002562: 213f movs r1, #63 ; 0x3f +10002564: 6818 ldr r0, [r3, #0] +10002566: 2305 movs r3, #5 +10002568: 7083 strb r3, [r0, #2] +1000256a: 2301 movs r3, #1 +1000256c: 7183 strb r3, [r0, #6] +1000256e: 6882 ldr r2, [r0, #8] +10002570: 7051 strb r1, [r2, #1] +10002572: 6882 ldr r2, [r0, #8] +10002574: 7013 strb r3, [r2, #0] +10002576: 7103 strb r3, [r0, #4] +10002578: 4b01 ldr r3, [pc, #4] ; (10002580 ) +1000257a: 4718 bx r3 +1000257c: 10000384 .word 0x10000384 +10002580: 0000ed49 .word 0x0000ed49 + +10002584 : +10002584: 2100 movs r1, #0 +10002586: 4602 mov r2, r0 +10002588: 4b0c ldr r3, [pc, #48] ; (100025bc ) +1000258a: b530 push {r4, r5, lr} +1000258c: 33d8 adds r3, #216 ; 0xd8 +1000258e: f843 1cd8 str.w r1, [r3, #-216] +10002592: f100 010f add.w r1, r0, #15 +10002596: f812 4b01 ldrb.w r4, [r2], #1 +1000259a: 1d1d adds r5, r3, #4 +1000259c: 428a cmp r2, r1 +1000259e: 601c str r4, [r3, #0] +100025a0: d309 bcc.n 100025b6 +100025a2: 6902 ldr r2, [r0, #16] +100025a4: 605a str r2, [r3, #4] +100025a6: 8a82 ldrh r2, [r0, #20] +100025a8: 609a str r2, [r3, #8] +100025aa: 7bc2 ldrb r2, [r0, #15] +100025ac: 60da str r2, [r3, #12] +100025ae: 2201 movs r2, #1 +100025b0: 4b03 ldr r3, [pc, #12] ; (100025c0 ) +100025b2: 601a str r2, [r3, #0] +100025b4: bd30 pop {r4, r5, pc} +100025b6: 462b mov r3, r5 +100025b8: e7ed b.n 10002596 +100025ba: bf00 nop +100025bc: 40006008 .word 0x40006008 +100025c0: 40006010 .word 0x40006010 + +100025c4 : +100025c4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100025c8: 4604 mov r4, r0 +100025ca: b09b sub sp, #108 ; 0x6c +100025cc: f8df 834c ldr.w r8, [pc, #844] ; 1000291c +100025d0: b120 cbz r0, 100025dc +100025d2: 48a9 ldr r0, [pc, #676] ; (10002878 ) +100025d4: 4aa9 ldr r2, [pc, #676] ; (1000287c ) +100025d6: 2100 movs r1, #0 +100025d8: 1a12 subs r2, r2, r0 +100025da: 47c0 blx r8 +100025dc: b671 cpsid f +100025de: 4ba8 ldr r3, [pc, #672] ; (10002880 ) +100025e0: 2100 movs r1, #0 +100025e2: 681a ldr r2, [r3, #0] +100025e4: 20d8 movs r0, #216 ; 0xd8 +100025e6: f042 0240 orr.w r2, r2, #64 ; 0x40 +100025ea: 601a str r2, [r3, #0] +100025ec: 681a ldr r2, [r3, #0] +100025ee: 4fa5 ldr r7, [pc, #660] ; (10002884 ) +100025f0: f042 0280 orr.w r2, r2, #128 ; 0x80 +100025f4: 601a str r2, [r3, #0] +100025f6: 2201 movs r2, #1 +100025f8: 47b8 blx r7 +100025fa: f04f 33ff mov.w r3, #4294967295 +100025fe: 4aa2 ldr r2, [pc, #648] ; (10002888 ) +10002600: 4ea2 ldr r6, [pc, #648] ; (1000288c ) +10002602: 6013 str r3, [r2, #0] +10002604: 4aa2 ldr r2, [pc, #648] ; (10002890 ) +10002606: 6033 str r3, [r6, #0] +10002608: 6013 str r3, [r2, #0] +1000260a: 4aa2 ldr r2, [pc, #648] ; (10002894 ) +1000260c: 4da2 ldr r5, [pc, #648] ; (10002898 ) +1000260e: 6013 str r3, [r2, #0] +10002610: 4aa2 ldr r2, [pc, #648] ; (1000289c ) +10002612: 2100 movs r1, #0 +10002614: 6813 ldr r3, [r2, #0] +10002616: 4628 mov r0, r5 +10002618: f423 0370 bic.w r3, r3, #15728640 ; 0xf00000 +1000261c: f443 03c0 orr.w r3, r3, #6291456 ; 0x600000 +10002620: 6013 str r3, [r2, #0] +10002622: 6c53 ldr r3, [r2, #68] ; 0x44 +10002624: f023 0318 bic.w r3, r3, #24 +10002628: f043 0308 orr.w r3, r3, #8 +1000262c: 6453 str r3, [r2, #68] ; 0x44 +1000262e: f8d2 3220 ldr.w r3, [r2, #544] ; 0x220 +10002632: f023 0301 bic.w r3, r3, #1 +10002636: f8c2 3220 str.w r3, [r2, #544] ; 0x220 +1000263a: f8d2 31f4 ldr.w r3, [r2, #500] ; 0x1f4 +1000263e: f023 0303 bic.w r3, r3, #3 +10002642: f8c2 31f4 str.w r3, [r2, #500] ; 0x1f4 +10002646: f8d2 3280 ldr.w r3, [r2, #640] ; 0x280 +1000264a: f023 0301 bic.w r3, r3, #1 +1000264e: f8c2 3280 str.w r3, [r2, #640] ; 0x280 +10002652: f44f 7296 mov.w r2, #300 ; 0x12c +10002656: 47c0 blx r8 +10002658: 4b91 ldr r3, [pc, #580] ; (100028a0 ) +1000265a: 601d str r5, [r3, #0] +1000265c: 4b91 ldr r3, [pc, #580] ; (100028a4 ) +1000265e: 681b ldr r3, [r3, #0] +10002660: 04d8 lsls r0, r3, #19 +10002662: d507 bpl.n 10002674 +10002664: f244 0301 movw r3, #16385 ; 0x4001 +10002668: 4a8f ldr r2, [pc, #572] ; (100028a8 ) +1000266a: 7811 ldrb r1, [r2, #0] +1000266c: 0649 lsls r1, r1, #25 +1000266e: d401 bmi.n 10002674 +10002670: 3b01 subs r3, #1 +10002672: d1fa bne.n 1000266a +10002674: 4a8d ldr r2, [pc, #564] ; (100028ac ) +10002676: 2001 movs r0, #1 +10002678: 6813 ldr r3, [r2, #0] +1000267a: f423 3300 bic.w r3, r3, #131072 ; 0x20000 +1000267e: 6013 str r3, [r2, #0] +10002680: 4b8b ldr r3, [pc, #556] ; (100028b0 ) +10002682: 4798 blx r3 +10002684: 488b ldr r0, [pc, #556] ; (100028b4 ) +10002686: 4b8c ldr r3, [pc, #560] ; (100028b8 ) +10002688: 4798 blx r3 +1000268a: 4b8c ldr r3, [pc, #560] ; (100028bc ) +1000268c: 4798 blx r3 +1000268e: 4b8c ldr r3, [pc, #560] ; (100028c0 ) +10002690: 4798 blx r3 +10002692: b661 cpsie f +10002694: 6833 ldr r3, [r6, #0] +10002696: 2c00 cmp r4, #0 +10002698: f040 819b bne.w 100029d2 +1000269c: 005d lsls r5, r3, #1 +1000269e: d502 bpl.n 100026a6 +100026a0: 4888 ldr r0, [pc, #544] ; (100028c4 ) +100026a2: 4b89 ldr r3, [pc, #548] ; (100028c8 ) +100026a4: 4798 blx r3 +100026a6: 6833 ldr r3, [r6, #0] +100026a8: 0059 lsls r1, r3, #1 +100026aa: d507 bpl.n 100026bc +100026ac: 4b87 ldr r3, [pc, #540] ; (100028cc ) +100026ae: 4798 blx r3 +100026b0: 4b7c ldr r3, [pc, #496] ; (100028a4 ) +100026b2: 4601 mov r1, r0 +100026b4: 681a ldr r2, [r3, #0] +100026b6: 4886 ldr r0, [pc, #536] ; (100028d0 ) +100026b8: 4b83 ldr r3, [pc, #524] ; (100028c8 ) +100026ba: 4798 blx r3 +100026bc: 23fc movs r3, #252 ; 0xfc +100026be: f10d 0b68 add.w fp, sp, #104 ; 0x68 +100026c2: f80b 3d48 strb.w r3, [fp, #-72]! +100026c6: 4b83 ldr r3, [pc, #524] ; (100028d4 ) +100026c8: 465a mov r2, fp +100026ca: 6818 ldr r0, [r3, #0] +100026cc: 21f8 movs r1, #248 ; 0xf8 +100026ce: 2307 movs r3, #7 +100026d0: 4d81 ldr r5, [pc, #516] ; (100028d8 ) +100026d2: 47a8 blx r5 +100026d4: 2801 cmp r0, #1 +100026d6: d005 beq.n 100026e4 +100026d8: 6833 ldr r3, [r6, #0] +100026da: 005a lsls r2, r3, #1 +100026dc: d502 bpl.n 100026e4 +100026de: 487f ldr r0, [pc, #508] ; (100028dc ) +100026e0: 4b79 ldr r3, [pc, #484] ; (100028c8 ) +100026e2: 4798 blx r3 +100026e4: f89d 3020 ldrb.w r3, [sp, #32] +100026e8: 2bfd cmp r3, #253 ; 0xfd +100026ea: 4b7d ldr r3, [pc, #500] ; (100028e0 ) +100026ec: f200 8179 bhi.w 100029e2 +100026f0: 497c ldr r1, [pc, #496] ; (100028e4 ) +100026f2: 680a ldr r2, [r1, #0] +100026f4: f022 0210 bic.w r2, r2, #16 +100026f8: 600a str r2, [r1, #0] +100026fa: 681a ldr r2, [r3, #0] +100026fc: f022 0202 bic.w r2, r2, #2 +10002700: 601a str r2, [r3, #0] +10002702: 4a68 ldr r2, [pc, #416] ; (100028a4 ) +10002704: 6813 ldr r3, [r2, #0] +10002706: f443 1300 orr.w r3, r3, #2097152 ; 0x200000 +1000270a: 4d77 ldr r5, [pc, #476] ; (100028e8 ) +1000270c: 6013 str r3, [r2, #0] +1000270e: 2100 movs r1, #0 +10002710: 2290 movs r2, #144 ; 0x90 +10002712: 4628 mov r0, r5 +10002714: 47c0 blx r8 +10002716: 4b75 ldr r3, [pc, #468] ; (100028ec ) +10002718: f8df 8204 ldr.w r8, [pc, #516] ; 10002920 +1000271c: 681a ldr r2, [r3, #0] +1000271e: 2100 movs r1, #0 +10002720: 602a str r2, [r5, #0] +10002722: 699a ldr r2, [r3, #24] +10002724: 20c4 movs r0, #196 ; 0xc4 +10002726: 632a str r2, [r5, #48] ; 0x30 +10002728: 662a str r2, [r5, #96] ; 0x60 +1000272a: 685a ldr r2, [r3, #4] +1000272c: 60aa str r2, [r5, #8] +1000272e: 69da ldr r2, [r3, #28] +10002730: 63aa str r2, [r5, #56] ; 0x38 +10002732: 66aa str r2, [r5, #104] ; 0x68 +10002734: 689a ldr r2, [r3, #8] +10002736: 6a1b ldr r3, [r3, #32] +10002738: 612a str r2, [r5, #16] +1000273a: 642b str r3, [r5, #64] ; 0x40 +1000273c: 672b str r3, [r5, #112] ; 0x70 +1000273e: 4b50 ldr r3, [pc, #320] ; (10002880 ) +10002740: 681a ldr r2, [r3, #0] +10002742: f442 7280 orr.w r2, r2, #256 ; 0x100 +10002746: 601a str r2, [r3, #0] +10002748: 681a ldr r2, [r3, #0] +1000274a: f442 7200 orr.w r2, r2, #512 ; 0x200 +1000274e: 601a str r2, [r3, #0] +10002750: 2201 movs r2, #1 +10002752: 47b8 blx r7 +10002754: 4640 mov r0, r8 +10002756: f7ff ff15 bl 10002584 +1000275a: 4b65 ldr r3, [pc, #404] ; (100028f0 ) +1000275c: 681f ldr r7, [r3, #0] +1000275e: f3c7 1702 ubfx r7, r7, #4, #3 +10002762: 3706 adds r7, #6 +10002764: eb05 02c7 add.w r2, r5, r7, lsl #3 +10002768: 78d3 ldrb r3, [r2, #3] +1000276a: 07db lsls r3, r3, #31 +1000276c: d521 bpl.n 100027b2 +1000276e: 2300 movs r3, #0 +10002770: 4960 ldr r1, [pc, #384] ; (100028f4 ) +10002772: f892 e001 ldrb.w lr, [r2, #1] +10002776: 600b str r3, [r1, #0] +10002778: 78d3 ldrb r3, [r2, #3] +1000277a: 7892 ldrb r2, [r2, #2] +1000277c: f3c3 1301 ubfx r3, r3, #4, #2 +10002780: eb08 0843 add.w r8, r8, r3, lsl #1 +10002784: f8b8 0014 ldrh.w r0, [r8, #20] +10002788: 4b5b ldr r3, [pc, #364] ; (100028f8 ) +1000278a: 6018 str r0, [r3, #0] +1000278c: 485b ldr r0, [pc, #364] ; (100028fc ) +1000278e: 6803 ldr r3, [r0, #0] +10002790: 0c1b lsrs r3, r3, #16 +10002792: 041b lsls r3, r3, #16 +10002794: ea43 030e orr.w r3, r3, lr +10002798: 6003 str r3, [r0, #0] +1000279a: f815 0037 ldrb.w r0, [r5, r7, lsl #3] +1000279e: 4b58 ldr r3, [pc, #352] ; (10002900 ) +100027a0: 6018 str r0, [r3, #0] +100027a2: 4858 ldr r0, [pc, #352] ; (10002904 ) +100027a4: 6803 ldr r3, [r0, #0] +100027a6: f023 03ff bic.w r3, r3, #255 ; 0xff +100027aa: 4313 orrs r3, r2 +100027ac: 6003 str r3, [r0, #0] +100027ae: 2301 movs r3, #1 +100027b0: 600b str r3, [r1, #0] +100027b2: 4a4c ldr r2, [pc, #304] ; (100028e4 ) +100027b4: 6813 ldr r3, [r2, #0] +100027b6: f043 0301 orr.w r3, r3, #1 +100027ba: 6013 str r3, [r2, #0] +100027bc: 4b52 ldr r3, [pc, #328] ; (10002908 ) +100027be: 4798 blx r3 +100027c0: 2800 cmp r0, #0 +100027c2: d13d bne.n 10002840 +100027c4: f04f 0901 mov.w r9, #1 +100027c8: 4a4e ldr r2, [pc, #312] ; (10002904 ) +100027ca: 494d ldr r1, [pc, #308] ; (10002900 ) +100027cc: 6813 ldr r3, [r2, #0] +100027ce: f023 03ff bic.w r3, r3, #255 ; 0xff +100027d2: f043 0331 orr.w r3, r3, #49 ; 0x31 +100027d6: 6013 str r3, [r2, #0] +100027d8: f502 42bc add.w r2, r2, #24064 ; 0x5e00 +100027dc: 4b45 ldr r3, [pc, #276] ; (100028f4 ) +100027de: 321c adds r2, #28 +100027e0: f04f 0800 mov.w r8, #0 +100027e4: fa5f fa89 uxtb.w sl, r9 +100027e8: fa5f f088 uxtb.w r0, r8 +100027ec: 9002 str r0, [sp, #8] +100027ee: 2000 movs r0, #0 +100027f0: 6018 str r0, [r3, #0] +100027f2: 6810 ldr r0, [r2, #0] +100027f4: 0c00 lsrs r0, r0, #16 +100027f6: 0400 lsls r0, r0, #16 +100027f8: ea40 0008 orr.w r0, r0, r8 +100027fc: 6010 str r0, [r2, #0] +100027fe: 2001 movs r0, #1 +10002800: 9205 str r2, [sp, #20] +10002802: f8c1 9000 str.w r9, [r1] +10002806: 9104 str r1, [sp, #16] +10002808: 6018 str r0, [r3, #0] +1000280a: 483f ldr r0, [pc, #252] ; (10002908 ) +1000280c: 9303 str r3, [sp, #12] +1000280e: 4780 blx r0 +10002810: 9b03 ldr r3, [sp, #12] +10002812: 9904 ldr r1, [sp, #16] +10002814: 9a05 ldr r2, [sp, #20] +10002816: 2800 cmp r0, #0 +10002818: f000 810f beq.w 10002a3a +1000281c: 4b2a ldr r3, [pc, #168] ; (100028c8 ) +1000281e: 9a02 ldr r2, [sp, #8] +10002820: 4651 mov r1, sl +10002822: 483a ldr r0, [pc, #232] ; (1000290c ) +10002824: 4798 blx r3 +10002826: f89d 3008 ldrb.w r3, [sp, #8] +1000282a: f805 a037 strb.w sl, [r5, r7, lsl #3] +1000282e: eb05 05c7 add.w r5, r5, r7, lsl #3 +10002832: 706b strb r3, [r5, #1] +10002834: 2331 movs r3, #49 ; 0x31 +10002836: 70ab strb r3, [r5, #2] +10002838: 78eb ldrb r3, [r5, #3] +1000283a: f043 0301 orr.w r3, r3, #1 +1000283e: 70eb strb r3, [r5, #3] +10002840: 4b18 ldr r3, [pc, #96] ; (100028a4 ) +10002842: 6819 ldr r1, [r3, #0] +10002844: f411 1100 ands.w r1, r1, #2097152 ; 0x200000 +10002848: f040 80ac bne.w 100029a4 +1000284c: f44f 63e0 mov.w r3, #1792 ; 0x700 +10002850: 2001 movs r0, #1 +10002852: 2508 movs r5, #8 +10002854: 4f2e ldr r7, [pc, #184] ; (10002910 ) +10002856: 603b str r3, [r7, #0] +10002858: 4b2e ldr r3, [pc, #184] ; (10002914 ) +1000285a: 6018 str r0, [r3, #0] +1000285c: f5a3 7308 sub.w r3, r3, #544 ; 0x220 +10002860: 601d str r5, [r3, #0] +10002862: 2506 movs r5, #6 +10002864: 6059 str r1, [r3, #4] +10002866: 6259 str r1, [r3, #36] ; 0x24 +10002868: 621d str r5, [r3, #32] +1000286a: 2522 movs r5, #34 ; 0x22 +1000286c: 61dd str r5, [r3, #28] +1000286e: 4d2a ldr r5, [pc, #168] ; (10002918 ) +10002870: 60dd str r5, [r3, #12] +10002872: f242 6552 movw r5, #9810 ; 0x2652 +10002876: e055 b.n 10002924 +10002878: 10000300 .word 0x10000300 +1000287c: 10000bc8 .word 0x10000bc8 +10002880: 40000230 .word 0x40000230 +10002884: 00002b39 .word 0x00002b39 +10002888: 10000300 .word 0x10000300 +1000288c: 10000314 .word 0x10000314 +10002890: 10000308 .word 0x10000308 +10002894: 1000030c .word 0x1000030c +10002898: 100020c0 .word 0x100020c0 +1000289c: 40000020 .word 0x40000020 +100028a0: 10000354 .word 0x10000354 +100028a4: 40000210 .word 0x40000210 +100028a8: 40003014 .word 0x40003014 +100028ac: 40000074 .word 0x40000074 +100028b0: 00000341 .word 0x00000341 +100028b4: 1ffffffc .word 0x1ffffffc +100028b8: 00003de5 .word 0x00003de5 +100028bc: 0004467d .word 0x0004467d +100028c0: 00044755 .word 0x00044755 +100028c4: 1000227c .word 0x1000227c +100028c8: 0000f39d .word 0x0000f39d +100028cc: 00000355 .word 0x00000355 +100028d0: 100022ba .word 0x100022ba +100028d4: 400000e8 .word 0x400000e8 +100028d8: 000065f9 .word 0x000065f9 +100028dc: 100022db .word 0x100022db +100028e0: 40000040 .word 0x40000040 +100028e4: 400002c0 .word 0x400002c0 +100028e8: 100021ec .word 0x100021ec +100028ec: 10002ca0 .word 0x10002ca0 +100028f0: 40000014 .word 0x40000014 +100028f4: 40006008 .word 0x40006008 +100028f8: 40006120 .word 0x40006120 +100028fc: 4000611c .word 0x4000611c +10002900: 40006014 .word 0x40006014 +10002904: 40000300 .word 0x40000300 +10002908: 00003049 .word 0x00003049 +1000290c: 100022ef .word 0x100022ef +10002910: 4000500c .word 0x4000500c +10002914: 40005224 .word 0x40005224 +10002918: 09030e07 .word 0x09030e07 +1000291c: 0000f511 .word 0x0000f511 +10002920: 10002ce8 .word 0x10002ce8 +10002924: 611d str r5, [r3, #16] +10002926: 4d92 ldr r5, [pc, #584] ; (10002b70 ) +10002928: 615d str r5, [r3, #20] +1000292a: 2542 movs r5, #66 ; 0x42 +1000292c: 619d str r5, [r3, #24] +1000292e: 4d91 ldr r5, [pc, #580] ; (10002b74 ) +10002930: 6028 str r0, [r5, #0] +10002932: 6830 ldr r0, [r6, #0] +10002934: 0040 lsls r0, r0, #1 +10002936: d503 bpl.n 10002940 +10002938: 2211 movs r2, #17 +1000293a: 488f ldr r0, [pc, #572] ; (10002b78 ) +1000293c: 4b8f ldr r3, [pc, #572] ; (10002b7c ) +1000293e: 4798 blx r3 +10002940: 682b ldr r3, [r5, #0] +10002942: 07d9 lsls r1, r3, #31 +10002944: d5fc bpl.n 10002940 +10002946: f44f 63c0 mov.w r3, #1536 ; 0x600 +1000294a: 4a8d ldr r2, [pc, #564] ; (10002b80 ) +1000294c: 603b str r3, [r7, #0] +1000294e: 6813 ldr r3, [r2, #0] +10002950: f423 037f bic.w r3, r3, #16711680 ; 0xff0000 +10002954: f443 1388 orr.w r3, r3, #1114112 ; 0x110000 +10002958: 6013 str r3, [r2, #0] +1000295a: b1f4 cbz r4, 1000299a +1000295c: 4a89 ldr r2, [pc, #548] ; (10002b84 ) +1000295e: 4b8a ldr r3, [pc, #552] ; (10002b88 ) +10002960: 6811 ldr r1, [r2, #0] +10002962: 4299 cmp r1, r3 +10002964: d119 bne.n 1000299a +10002966: 4d89 ldr r5, [pc, #548] ; (10002b8c ) +10002968: 6015 str r5, [r2, #0] +1000296a: 6832 ldr r2, [r6, #0] +1000296c: 0052 lsls r2, r2, #1 +1000296e: d502 bpl.n 10002976 +10002970: 4887 ldr r0, [pc, #540] ; (10002b90 ) +10002972: 4b82 ldr r3, [pc, #520] ; (10002b7c ) +10002974: 4798 blx r3 +10002976: 4a83 ldr r2, [pc, #524] ; (10002b84 ) +10002978: f04f 6380 mov.w r3, #67108864 ; 0x4000000 +1000297c: 4611 mov r1, r2 +1000297e: 6810 ldr r0, [r2, #0] +10002980: 42a8 cmp r0, r5 +10002982: d101 bne.n 10002988 +10002984: 3b01 subs r3, #1 +10002986: d1fa bne.n 1000297e +10002988: 680b ldr r3, [r1, #0] +1000298a: 2b01 cmp r3, #1 +1000298c: d105 bne.n 1000299a +1000298e: 6833 ldr r3, [r6, #0] +10002990: 005b lsls r3, r3, #1 +10002992: d502 bpl.n 1000299a +10002994: 487f ldr r0, [pc, #508] ; (10002b94 ) +10002996: 4b79 ldr r3, [pc, #484] ; (10002b7c ) +10002998: 4798 blx r3 +1000299a: 4a7f ldr r2, [pc, #508] ; (10002b98 ) +1000299c: 6813 ldr r3, [r2, #0] +1000299e: f443 1300 orr.w r3, r3, #2097152 ; 0x200000 +100029a2: 6013 str r3, [r2, #0] +100029a4: 2c00 cmp r4, #0 +100029a6: f040 8139 bne.w 10002c1c +100029aa: 2204 movs r2, #4 +100029ac: a907 add r1, sp, #28 +100029ae: f249 0008 movw r0, #36872 ; 0x9008 +100029b2: f7ff fd69 bl 10002488 +100029b6: f89d 501d ldrb.w r5, [sp, #29] +100029ba: 2dff cmp r5, #255 ; 0xff +100029bc: d060 beq.n 10002a80 +100029be: f005 007f and.w r0, r5, #127 ; 0x7f +100029c2: 4b76 ldr r3, [pc, #472] ; (10002b9c ) +100029c4: 4798 blx r3 +100029c6: 062f lsls r7, r5, #24 +100029c8: 9009 str r0, [sp, #36] ; 0x24 +100029ca: d54b bpl.n 10002a64 +100029cc: 2401 movs r4, #1 +100029ce: 9408 str r4, [sp, #32] +100029d0: e04a b.n 10002a68 +100029d2: 0058 lsls r0, r3, #1 +100029d4: f57f ae67 bpl.w 100026a6 +100029d8: 4621 mov r1, r4 +100029da: 4b68 ldr r3, [pc, #416] ; (10002b7c ) +100029dc: 4870 ldr r0, [pc, #448] ; (10002ba0 ) +100029de: 4798 blx r3 +100029e0: e661 b.n 100026a6 +100029e2: 681a ldr r2, [r3, #0] +100029e4: 2100 movs r1, #0 +100029e6: f3c2 0213 ubfx r2, r2, #0, #20 +100029ea: f442 1240 orr.w r2, r2, #3145728 ; 0x300000 +100029ee: 601a str r2, [r3, #0] +100029f0: 681a ldr r2, [r3, #0] +100029f2: 20c8 movs r0, #200 ; 0xc8 +100029f4: f042 0202 orr.w r2, r2, #2 +100029f8: 601a str r2, [r3, #0] +100029fa: 4a6a ldr r2, [pc, #424] ; (10002ba4 ) +100029fc: 6813 ldr r3, [r2, #0] +100029fe: f023 0307 bic.w r3, r3, #7 +10002a02: f043 0302 orr.w r3, r3, #2 +10002a06: 6013 str r3, [r2, #0] +10002a08: f852 3cb4 ldr.w r3, [r2, #-180] +10002a0c: f423 6340 bic.w r3, r3, #3072 ; 0xc00 +10002a10: f842 3cb4 str.w r3, [r2, #-180] +10002a14: 2201 movs r2, #1 +10002a16: 47b8 blx r7 +10002a18: 4b63 ldr r3, [pc, #396] ; (10002ba8 ) +10002a1a: 681a ldr r2, [r3, #0] +10002a1c: f442 6280 orr.w r2, r2, #1024 ; 0x400 +10002a20: 601a str r2, [r3, #0] +10002a22: 681a ldr r2, [r3, #0] +10002a24: f442 6200 orr.w r2, r2, #2048 ; 0x800 +10002a28: 601a str r2, [r3, #0] +10002a2a: 2200 movs r2, #0 +10002a2c: f8c3 2110 str.w r2, [r3, #272] ; 0x110 +10002a30: 4a59 ldr r2, [pc, #356] ; (10002b98 ) +10002a32: 6813 ldr r3, [r2, #0] +10002a34: f043 0340 orr.w r3, r3, #64 ; 0x40 +10002a38: e667 b.n 1000270a +10002a3a: f108 0801 add.w r8, r8, #1 +10002a3e: f1b8 0f3f cmp.w r8, #63 ; 0x3f +10002a42: f47f aed1 bne.w 100027e8 +10002a46: f109 0901 add.w r9, r9, #1 +10002a4a: f1b9 0f04 cmp.w r9, #4 +10002a4e: f47f aec7 bne.w 100027e0 +10002a52: 6833 ldr r3, [r6, #0] +10002a54: 005b lsls r3, r3, #1 +10002a56: d502 bpl.n 10002a5e +10002a58: 4854 ldr r0, [pc, #336] ; (10002bac ) +10002a5a: 4b48 ldr r3, [pc, #288] ; (10002b7c ) +10002a5c: 4798 blx r3 +10002a5e: f7ff fd7f bl 10002560 +10002a62: e6ed b.n 10002840 +10002a64: 2302 movs r3, #2 +10002a66: 9308 str r3, [sp, #32] +10002a68: 4b51 ldr r3, [pc, #324] ; (10002bb0 ) +10002a6a: 4658 mov r0, fp +10002a6c: 4798 blx r3 +10002a6e: 4b51 ldr r3, [pc, #324] ; (10002bb4 ) +10002a70: 4658 mov r0, fp +10002a72: 4798 blx r3 +10002a74: 1a25 subs r5, r4, r0 +10002a76: 426c negs r4, r5 +10002a78: 4658 mov r0, fp +10002a7a: 4b4f ldr r3, [pc, #316] ; (10002bb8 ) +10002a7c: 416c adcs r4, r5 +10002a7e: 4798 blx r3 +10002a80: 1c63 adds r3, r4, #1 +10002a82: 9302 str r3, [sp, #8] +10002a84: f44f 4330 mov.w r3, #45056 ; 0xb000 +10002a88: 9307 str r3, [sp, #28] +10002a8a: 6833 ldr r3, [r6, #0] +10002a8c: 005c lsls r4, r3, #1 +10002a8e: d503 bpl.n 10002a98 +10002a90: 9902 ldr r1, [sp, #8] +10002a92: 484a ldr r0, [pc, #296] ; (10002bbc ) +10002a94: 4b39 ldr r3, [pc, #228] ; (10002b7c ) +10002a96: 4798 blx r3 +10002a98: 2701 movs r7, #1 +10002a9a: f8df 9134 ldr.w r9, [pc, #308] ; 10002bd0 +10002a9e: f8df a134 ldr.w sl, [pc, #308] ; 10002bd4 +10002aa2: 9807 ldr r0, [sp, #28] +10002aa4: 2248 movs r2, #72 ; 0x48 +10002aa6: f600 70ff addw r0, r0, #4095 ; 0xfff +10002aaa: f420 607f bic.w r0, r0, #4080 ; 0xff0 +10002aae: f020 000f bic.w r0, r0, #15 +10002ab2: 4659 mov r1, fp +10002ab4: 9007 str r0, [sp, #28] +10002ab6: f7ff fce7 bl 10002488 +10002aba: 9908 ldr r1, [sp, #32] +10002abc: 9809 ldr r0, [sp, #36] ; 0x24 +10002abe: f7ff fd33 bl 10002528 +10002ac2: 9b0b ldr r3, [sp, #44] ; 0x2c +10002ac4: 4a3e ldr r2, [pc, #248] ; (10002bc0 ) +10002ac6: 4293 cmp r3, r2 +10002ac8: d104 bne.n 10002ad4 +10002aca: 9b0a ldr r3, [sp, #40] ; 0x28 +10002acc: 454b cmp r3, r9 +10002ace: d143 bne.n 10002b58 +10002ad0: f440 7000 orr.w r0, r0, #512 ; 0x200 +10002ad4: 9a0d ldr r2, [sp, #52] ; 0x34 +10002ad6: 4b3b ldr r3, [pc, #236] ; (10002bc4 ) +10002ad8: 429a cmp r2, r3 +10002ada: bf08 it eq +10002adc: f440 6080 orreq.w r0, r0, #1024 ; 0x400 +10002ae0: f5b0 6fa0 cmp.w r0, #1280 ; 0x500 +10002ae4: d378 bcc.n 10002bd8 +10002ae6: f010 0fff tst.w r0, #255 ; 0xff +10002aea: d075 beq.n 10002bd8 +10002aec: f04f 0800 mov.w r8, #0 +10002af0: 9d07 ldr r5, [sp, #28] +10002af2: 3510 adds r5, #16 +10002af4: 9b08 ldr r3, [sp, #32] +10002af6: 9a09 ldr r2, [sp, #36] ; 0x24 +10002af8: 4619 mov r1, r3 +10002afa: 4610 mov r0, r2 +10002afc: 9304 str r3, [sp, #16] +10002afe: 9203 str r2, [sp, #12] +10002b00: f7ff fd12 bl 10002528 +10002b04: 9b02 ldr r3, [sp, #8] +10002b06: 42bb cmp r3, r7 +10002b08: 9b04 ldr r3, [sp, #16] +10002b0a: d12a bne.n 10002b62 +10002b0c: 1e41 subs r1, r0, #1 +10002b0e: 2902 cmp r1, #2 +10002b10: f200 80a0 bhi.w 10002c54 +10002b14: 6831 ldr r1, [r6, #0] +10002b16: 9a03 ldr r2, [sp, #12] +10002b18: f011 4f80 tst.w r1, #1073741824 ; 0x40000000 +10002b1c: d00a beq.n 10002b34 +10002b1e: e88d 000c stmia.w sp, {r2, r3} +10002b22: 4b29 ldr r3, [pc, #164] ; (10002bc8 ) +10002b24: 462a mov r2, r5 +10002b26: f853 3020 ldr.w r3, [r3, r0, lsl #2] +10002b2a: fa5f f188 uxtb.w r1, r8 +10002b2e: 4827 ldr r0, [pc, #156] ; (10002bcc ) +10002b30: 4c12 ldr r4, [pc, #72] ; (10002b7c ) +10002b32: 47a0 blx r4 +10002b34: 4628 mov r0, r5 +10002b36: 9a08 ldr r2, [sp, #32] +10002b38: 9909 ldr r1, [sp, #36] ; 0x24 +10002b3a: f7ff fca5 bl 10002488 +10002b3e: 4405 add r5, r0 +10002b40: 4628 mov r0, r5 +10002b42: 2210 movs r2, #16 +10002b44: 4659 mov r1, fp +10002b46: f7ff fc9f bl 10002488 +10002b4a: f108 0801 add.w r8, r8, #1 +10002b4e: 4405 add r5, r0 +10002b50: e7d0 b.n 10002af4 +10002b52: 2700 movs r7, #0 +10002b54: 9702 str r7, [sp, #8] +10002b56: e7a4 b.n 10002aa2 +10002b58: 4553 cmp r3, sl +10002b5a: bf08 it eq +10002b5c: f440 7080 orreq.w r0, r0, #256 ; 0x100 +10002b60: e7b8 b.n 10002ad4 +10002b62: b108 cbz r0, 10002b68 +10002b64: 441d add r5, r3 +10002b66: e7eb b.n 10002b40 +10002b68: 3d08 subs r5, #8 +10002b6a: 9507 str r5, [sp, #28] +10002b6c: 3701 adds r7, #1 +10002b6e: e798 b.n 10002aa2 +10002b70: 00068873 .word 0x00068873 +10002b74: 40005000 .word 0x40005000 +10002b78: 10002313 .word 0x10002313 +10002b7c: 0000f39d .word 0x0000f39d +10002b80: 40000300 .word 0x40000300 +10002b84: 1fff0000 .word 0x1fff0000 +10002b88: 12345678 .word 0x12345678 +10002b8c: 87654321 .word 0x87654321 +10002b90: 1000232f .word 0x1000232f +10002b94: 1000234d .word 0x1000234d +10002b98: 40000210 .word 0x40000210 +10002b9c: 0000e1c1 .word 0x0000e1c1 +10002ba0: 1000229a .word 0x1000229a +10002ba4: 40000304 .word 0x40000304 +10002ba8: 40000230 .word 0x40000230 +10002bac: 10002302 .word 0x10002302 +10002bb0: 0000d805 .word 0x0000d805 +10002bb4: 0000dbd1 .word 0x0000dbd1 +10002bb8: 0000dac1 .word 0x0000dac1 +10002bbc: 1000235c .word 0x1000235c +10002bc0: 31313738 .word 0x31313738 +10002bc4: 574b5452 .word 0x574b5452 +10002bc8: 10002468 .word 0x10002468 +10002bcc: 10002370 .word 0x10002370 +10002bd0: 35393138 .word 0x35393138 +10002bd4: 35393130 .word 0x35393130 +10002bd8: b307 cbz r7, 10002c1c +10002bda: 6833 ldr r3, [r6, #0] +10002bdc: 0058 lsls r0, r3, #1 +10002bde: d503 bpl.n 10002be8 +10002be0: 9902 ldr r1, [sp, #8] +10002be2: 481e ldr r0, [pc, #120] ; (10002c5c ) +10002be4: 4b1e ldr r3, [pc, #120] ; (10002c60 ) +10002be6: 4798 blx r3 +10002be8: 2204 movs r2, #4 +10002bea: a907 add r1, sp, #28 +10002bec: f44f 4010 mov.w r0, #36864 ; 0x9000 +10002bf0: f7ff fc4a bl 10002488 +10002bf4: 9b07 ldr r3, [sp, #28] +10002bf6: f44f 7180 mov.w r1, #256 ; 0x100 +10002bfa: f1b3 6f00 cmp.w r3, #134217728 ; 0x8000000 +10002bfe: bf3c itt cc +10002c00: f103 4318 addcc.w r3, r3, #2550136832 ; 0x98000000 +10002c04: 9307 strcc r3, [sp, #28] +10002c06: 9807 ldr r0, [sp, #28] +10002c08: f7ff fc8e bl 10002528 +10002c0c: 2805 cmp r0, #5 +10002c0e: d0a0 beq.n 10002b52 +10002c10: 6833 ldr r3, [r6, #0] +10002c12: 0059 lsls r1, r3, #1 +10002c14: d502 bpl.n 10002c1c +10002c16: 4813 ldr r0, [pc, #76] ; (10002c64 ) +10002c18: 4b11 ldr r3, [pc, #68] ; (10002c60 ) +10002c1a: 4798 blx r3 +10002c1c: 4912 ldr r1, [pc, #72] ; (10002c68 ) +10002c1e: 4813 ldr r0, [pc, #76] ; (10002c6c ) +10002c20: 4b13 ldr r3, [pc, #76] ; (10002c70 ) +10002c22: 4798 blx r3 +10002c24: b138 cbz r0, 10002c36 +10002c26: 6833 ldr r3, [r6, #0] +10002c28: 005a lsls r2, r3, #1 +10002c2a: d502 bpl.n 10002c32 +10002c2c: 4811 ldr r0, [pc, #68] ; (10002c74 ) +10002c2e: 4b0c ldr r3, [pc, #48] ; (10002c60 ) +10002c30: 4798 blx r3 +10002c32: f7ff fc95 bl 10002560 +10002c36: 6833 ldr r3, [r6, #0] +10002c38: 4c0f ldr r4, [pc, #60] ; (10002c78 ) +10002c3a: f013 4f80 tst.w r3, #1073741824 ; 0x40000000 +10002c3e: d004 beq.n 10002c4a +10002c40: 6822 ldr r2, [r4, #0] +10002c42: 490a ldr r1, [pc, #40] ; (10002c6c ) +10002c44: 480d ldr r0, [pc, #52] ; (10002c7c ) +10002c46: 4b06 ldr r3, [pc, #24] ; (10002c60 ) +10002c48: 4798 blx r3 +10002c4a: 6823 ldr r3, [r4, #0] +10002c4c: 4798 blx r3 +10002c4e: b01b add sp, #108 ; 0x6c +10002c50: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10002c54: 2800 cmp r0, #0 +10002c56: d185 bne.n 10002b64 +10002c58: e7e0 b.n 10002c1c +10002c5a: bf00 nop +10002c5c: 100023a2 .word 0x100023a2 +10002c60: 0000f39d .word 0x0000f39d +10002c64: 100023c0 .word 0x100023c0 +10002c68: 100023cc .word 0x100023cc +10002c6c: 10006004 .word 0x10006004 +10002c70: 0000f6b1 .word 0x0000f6b1 +10002c74: 100023d3 .word 0x100023d3 +10002c78: 10006000 .word 0x10006000 +10002c7c: 100023ed .word 0x100023ed + +10002c80 : +10002c80: 2004 movs r0, #4 +10002c82: f7ff bc9f b.w 100025c4 + +10002c86 : +10002c86: 2003 movs r0, #3 +10002c88: f7ff bc9c b.w 100025c4 + +10002c8c : +10002c8c: 2002 movs r0, #2 +10002c8e: f7ff bc99 b.w 100025c4 + +10002c92 : +10002c92: 2001 movs r0, #1 +10002c94: f7ff bc96 b.w 100025c4 + +10002c98 : +10002c98: 2000 movs r0, #0 +10002c9a: f7ff bc93 b.w 100025c4 + ... + +10002ca0 : +10002ca0: 0102 0131 0101 0331 0001 0531 0001 0731 ..1...1...1...1. +10002cb0: 0001 0931 0001 0b31 1301 1131 1201 1331 ..1...1...1...1. +10002cc0: 1101 1531 1101 1731 1101 1931 1101 1b31 ..1...1...1...1. + ... + +10002ce8 : +10002ce8: 3b0b 6b3b 02eb a2a2 3832 0506 0151 0f03 .;;k....28..Q... +10002cf8: 0000 2003 0200 0202 0202 20c2 ... ....... + +Disassembly of section .ram_image2.text: + +10006040 : +10006040: 4a07 ldr r2, [pc, #28] ; (10006060 ) +10006042: 6813 ldr r3, [r2, #0] +10006044: f023 0301 bic.w r3, r3, #1 +10006048: 6013 str r3, [r2, #0] +1000604a: f852 3c2c ldr.w r3, [r2, #-44] +1000604e: f023 0303 bic.w r3, r3, #3 +10006052: f842 3c2c str.w r3, [r2, #-44] +10006056: 6e13 ldr r3, [r2, #96] ; 0x60 +10006058: f023 0301 bic.w r3, r3, #1 +1000605c: 6613 str r3, [r2, #96] ; 0x60 +1000605e: 4770 bx lr +10006060: 40000240 .word 0x40000240 + +10006064 : +10006064: 4a06 ldr r2, [pc, #24] ; (10006080 ) +10006066: 6813 ldr r3, [r2, #0] +10006068: f423 0370 bic.w r3, r3, #15728640 ; 0xf00000 +1000606c: f443 03c0 orr.w r3, r3, #6291456 ; 0x600000 +10006070: 6013 str r3, [r2, #0] +10006072: 6c53 ldr r3, [r2, #68] ; 0x44 +10006074: f023 0318 bic.w r3, r3, #24 +10006078: f043 0308 orr.w r3, r3, #8 +1000607c: 6453 str r3, [r2, #68] ; 0x44 +1000607e: 4770 bx lr +10006080: 40000020 .word 0x40000020 + +10006084 : +10006084: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10006088: 4d8c ldr r5, [pc, #560] ; (100062bc ) +1000608a: 682b ldr r3, [r5, #0] +1000608c: 005e lsls r6, r3, #1 +1000608e: d503 bpl.n 10006098 +10006090: 498b ldr r1, [pc, #556] ; (100062c0 ) +10006092: 488c ldr r0, [pc, #560] ; (100062c4 ) +10006094: 4b8c ldr r3, [pc, #560] ; (100062c8 ) +10006096: 4798 blx r3 +10006098: 488c ldr r0, [pc, #560] ; (100062cc ) +1000609a: 4a8d ldr r2, [pc, #564] ; (100062d0 ) +1000609c: 4c8d ldr r4, [pc, #564] ; (100062d4 ) +1000609e: 1a12 subs r2, r2, r0 +100060a0: 2100 movs r1, #0 +100060a2: f014 fd99 bl 1001abd8 +100060a6: f014 fd07 bl 1001aab8 +100060aa: f44f 7296 mov.w r2, #300 ; 0x12c +100060ae: 2100 movs r1, #0 +100060b0: 4620 mov r0, r4 +100060b2: f014 fd91 bl 1001abd8 +100060b6: 4b88 ldr r3, [pc, #544] ; (100062d8 ) +100060b8: 4888 ldr r0, [pc, #544] ; (100062dc ) +100060ba: 601c str r4, [r3, #0] +100060bc: 4b88 ldr r3, [pc, #544] ; (100062e0 ) +100060be: 4798 blx r3 +100060c0: f244 0301 movw r3, #16385 ; 0x4001 +100060c4: 4a87 ldr r2, [pc, #540] ; (100062e4 ) +100060c6: 7811 ldrb r1, [r2, #0] +100060c8: 064c lsls r4, r1, #25 +100060ca: d401 bmi.n 100060d0 +100060cc: 3b01 subs r3, #1 +100060ce: d1fa bne.n 100060c6 +100060d0: f014 fcdc bl 1001aa8c +100060d4: 4b84 ldr r3, [pc, #528] ; (100062e8 ) +100060d6: 4604 mov r4, r0 +100060d8: 4798 blx r3 +100060da: 4b84 ldr r3, [pc, #528] ; (100062ec ) +100060dc: 4298 cmp r0, r3 +100060de: d007 beq.n 100060f0 +100060e0: 4a83 ldr r2, [pc, #524] ; (100062f0 ) +100060e2: 2000 movs r0, #0 +100060e4: 6813 ldr r3, [r2, #0] +100060e6: f423 3300 bic.w r3, r3, #131072 ; 0x20000 +100060ea: 6013 str r3, [r2, #0] +100060ec: 4b81 ldr r3, [pc, #516] ; (100062f4 ) +100060ee: 4798 blx r3 +100060f0: f014 f892 bl 1001a218 +100060f4: f014 fc92 bl 1001aa1c +100060f8: f006 fd8c bl 1000cc14 +100060fc: f012 fb9a bl 10018834 +10006100: 4b7d ldr r3, [pc, #500] ; (100062f8 ) +10006102: 4a7e ldr r2, [pc, #504] ; (100062fc ) +10006104: 2cfd cmp r4, #253 ; 0xfd +10006106: 601a str r2, [r3, #0] +10006108: f102 2210 add.w r2, r2, #268439552 ; 0x10001000 +1000610c: f102 02ff add.w r2, r2, #255 ; 0xff +10006110: 631a str r2, [r3, #48] ; 0x30 +10006112: 4b7b ldr r3, [pc, #492] ; (10006300 ) +10006114: 681a ldr r2, [r3, #0] +10006116: f042 0201 orr.w r2, r2, #1 +1000611a: 601a str r2, [r3, #0] +1000611c: f240 80c4 bls.w 100062a8 +10006120: 4c78 ldr r4, [pc, #480] ; (10006304 ) +10006122: 6821 ldr r1, [r4, #0] +10006124: f411 1100 ands.w r1, r1, #2097152 ; 0x200000 +10006128: f040 808e bne.w 10006248 +1000612c: 4a76 ldr r2, [pc, #472] ; (10006308 ) +1000612e: 20c8 movs r0, #200 ; 0xc8 +10006130: 6813 ldr r3, [r2, #0] +10006132: 4e76 ldr r6, [pc, #472] ; (1000630c ) +10006134: f3c3 0313 ubfx r3, r3, #0, #20 +10006138: f443 1340 orr.w r3, r3, #3145728 ; 0x300000 +1000613c: 6013 str r3, [r2, #0] +1000613e: 6813 ldr r3, [r2, #0] +10006140: f043 0302 orr.w r3, r3, #2 +10006144: 6013 str r3, [r2, #0] +10006146: f8d2 32c4 ldr.w r3, [r2, #708] ; 0x2c4 +1000614a: f023 0307 bic.w r3, r3, #7 +1000614e: f043 0302 orr.w r3, r3, #2 +10006152: f8c2 32c4 str.w r3, [r2, #708] ; 0x2c4 +10006156: f8d2 3210 ldr.w r3, [r2, #528] ; 0x210 +1000615a: f423 6340 bic.w r3, r3, #3072 ; 0xc00 +1000615e: f8c2 3210 str.w r3, [r2, #528] ; 0x210 +10006162: 4b6b ldr r3, [pc, #428] ; (10006310 ) +10006164: 6019 str r1, [r3, #0] +10006166: f5a3 7388 sub.w r3, r3, #272 ; 0x110 +1000616a: 681a ldr r2, [r3, #0] +1000616c: f442 6280 orr.w r2, r2, #1024 ; 0x400 +10006170: 601a str r2, [r3, #0] +10006172: 681a ldr r2, [r3, #0] +10006174: f442 6200 orr.w r2, r2, #2048 ; 0x800 +10006178: 601a str r2, [r3, #0] +1000617a: 2201 movs r2, #1 +1000617c: 4b65 ldr r3, [pc, #404] ; (10006314 ) +1000617e: 4798 blx r3 +10006180: 6823 ldr r3, [r4, #0] +10006182: f043 0340 orr.w r3, r3, #64 ; 0x40 +10006186: 6023 str r3, [r4, #0] +10006188: f64f 6301 movw r3, #65025 ; 0xfe01 +1000618c: e9d6 0100 ldrd r0, r1, [r6] +10006190: b282 uxth r2, r0 +10006192: 429a cmp r2, r3 +10006194: 460c mov r4, r1 +10006196: d175 bne.n 10006284 +10006198: b2ca uxtb r2, r1 +1000619a: f3c1 2307 ubfx r3, r1, #8, #8 +1000619e: 4053 eors r3, r2 +100061a0: 2bff cmp r3, #255 ; 0xff +100061a2: d16f bne.n 10006284 +100061a4: f3c1 4307 ubfx r3, r1, #16, #8 +100061a8: ea83 6111 eor.w r1, r3, r1, lsr #24 +100061ac: 29ff cmp r1, #255 ; 0xff +100061ae: d169 bne.n 10006284 +100061b0: 6829 ldr r1, [r5, #0] +100061b2: 0048 lsls r0, r1, #1 +100061b4: d503 bpl.n 100061be +100061b6: 4631 mov r1, r6 +100061b8: 4857 ldr r0, [pc, #348] ; (10006318 ) +100061ba: 4e43 ldr r6, [pc, #268] ; (100062c8 ) +100061bc: 47b0 blx r6 +100061be: f44f 62e0 mov.w r2, #1792 ; 0x700 +100061c2: 2101 movs r1, #1 +100061c4: 2008 movs r0, #8 +100061c6: 4e55 ldr r6, [pc, #340] ; (1000631c ) +100061c8: 4f55 ldr r7, [pc, #340] ; (10006320 ) +100061ca: 6032 str r2, [r6, #0] +100061cc: 4a55 ldr r2, [pc, #340] ; (10006324 ) +100061ce: f8df 8188 ldr.w r8, [pc, #392] ; 10006358 +100061d2: 6011 str r1, [r2, #0] +100061d4: f5a2 7208 sub.w r2, r2, #544 ; 0x220 +100061d8: 6010 str r0, [r2, #0] +100061da: b2e2 uxtb r2, r4 +100061dc: 4082 lsls r2, r0 +100061de: f100 4080 add.w r0, r0, #1073741824 ; 0x40000000 +100061e2: f500 40a0 add.w r0, r0, #20480 ; 0x5000 +100061e6: 6002 str r2, [r0, #0] +100061e8: 2000 movs r0, #0 +100061ea: 4a4f ldr r2, [pc, #316] ; (10006328 ) +100061ec: f8df 90d8 ldr.w r9, [pc, #216] ; 100062c8 +100061f0: 6010 str r0, [r2, #0] +100061f2: 2006 movs r0, #6 +100061f4: f842 0c04 str.w r0, [r2, #-4] +100061f8: 2022 movs r0, #34 ; 0x22 +100061fa: f842 0c08 str.w r0, [r2, #-8] +100061fe: 484b ldr r0, [pc, #300] ; (1000632c ) +10006200: f842 0c18 str.w r0, [r2, #-24] +10006204: f242 6052 movw r0, #9810 ; 0x2652 +10006208: f842 0c14 str.w r0, [r2, #-20] +1000620c: 4848 ldr r0, [pc, #288] ; (10006330 ) +1000620e: f842 0c10 str.w r0, [r2, #-16] +10006212: 2042 movs r0, #66 ; 0x42 +10006214: f842 0c0c str.w r0, [r2, #-12] +10006218: 6039 str r1, [r7, #0] +1000621a: 682b ldr r3, [r5, #0] +1000621c: f003 4380 and.w r3, r3, #1073741824 ; 0x40000000 +10006220: 683a ldr r2, [r7, #0] +10006222: 07d2 lsls r2, r2, #31 +10006224: d53b bpl.n 1000629e +10006226: f44f 63c0 mov.w r3, #1536 ; 0x600 +1000622a: 4a42 ldr r2, [pc, #264] ; (10006334 ) +1000622c: 6033 str r3, [r6, #0] +1000622e: 6813 ldr r3, [r2, #0] +10006230: f404 047f and.w r4, r4, #16711680 ; 0xff0000 +10006234: f423 037f bic.w r3, r3, #16711680 ; 0xff0000 +10006238: 431c orrs r4, r3 +1000623a: 6014 str r4, [r2, #0] +1000623c: 682b ldr r3, [r5, #0] +1000623e: 005b lsls r3, r3, #1 +10006240: d502 bpl.n 10006248 +10006242: 483d ldr r0, [pc, #244] ; (10006338 ) +10006244: 4b20 ldr r3, [pc, #128] ; (100062c8 ) +10006246: 4798 blx r3 +10006248: 4a3c ldr r2, [pc, #240] ; (1000633c ) +1000624a: 483d ldr r0, [pc, #244] ; (10006340 ) +1000624c: 4282 cmp r2, r0 +1000624e: d003 beq.n 10006258 +10006250: 1a12 subs r2, r2, r0 +10006252: 2100 movs r1, #0 +10006254: f014 fcc0 bl 1001abd8 +10006258: 4a2a ldr r2, [pc, #168] ; (10006304 ) +1000625a: 6813 ldr r3, [r2, #0] +1000625c: f443 1300 orr.w r3, r3, #2097152 ; 0x200000 +10006260: 6013 str r3, [r2, #0] +10006262: f014 fa35 bl 1001a6d0 +10006266: 4a37 ldr r2, [pc, #220] ; (10006344 ) +10006268: 4937 ldr r1, [pc, #220] ; (10006348 ) +1000626a: 4838 ldr r0, [pc, #224] ; (1000634c ) +1000626c: 4b38 ldr r3, [pc, #224] ; (10006350 ) +1000626e: 4798 blx r3 +10006270: 4668 mov r0, sp +10006272: f020 0007 bic.w r0, r0, #7 +10006276: 4685 mov sp, r0 +10006278: f014 fc1c bl 1001aab4 <__low_level_init> +1000627c: f001 fb3e bl 100078fc
+10006280: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +10006284: 2211 movs r2, #17 +10006286: 682b ldr r3, [r5, #0] +10006288: f36f 0407 bfc r4, #0, #8 +1000628c: 0059 lsls r1, r3, #1 +1000628e: f362 4417 bfi r4, r2, #16, #8 +10006292: d594 bpl.n 100061be +10006294: 2100 movs r1, #0 +10006296: 4b0c ldr r3, [pc, #48] ; (100062c8 ) +10006298: 482e ldr r0, [pc, #184] ; (10006354 ) +1000629a: 4798 blx r3 +1000629c: e78f b.n 100061be +1000629e: 2b00 cmp r3, #0 +100062a0: d0be beq.n 10006220 +100062a2: 4640 mov r0, r8 +100062a4: 47c8 blx r9 +100062a6: e7b8 b.n 1000621a +100062a8: 681a ldr r2, [r3, #0] +100062aa: f022 0210 bic.w r2, r2, #16 +100062ae: 601a str r2, [r3, #0] +100062b0: 4a15 ldr r2, [pc, #84] ; (10006308 ) +100062b2: 6813 ldr r3, [r2, #0] +100062b4: f023 0302 bic.w r3, r3, #2 +100062b8: 6013 str r3, [r2, #0] +100062ba: e7cd b.n 10006258 +100062bc: 10000314 .word 0x10000314 +100062c0: 10006018 .word 0x10006018 +100062c4: 10040e8c .word 0x10040e8c +100062c8: 0000f39d .word 0x0000f39d +100062cc: 10046700 .word 0x10046700 +100062d0: 1004e5b0 .word 0x1004e5b0 +100062d4: 100020c0 .word 0x100020c0 +100062d8: 10000354 .word 0x10000354 +100062dc: 1ffffffc .word 0x1ffffffc +100062e0: 00003de5 .word 0x00003de5 +100062e4: 40003014 .word 0x40003014 +100062e8: 00000355 .word 0x00000355 +100062ec: 09ef21aa .word 0x09ef21aa +100062f0: 40000074 .word 0x40000074 +100062f4: 00000341 .word 0x00000341 +100062f8: 100021ec .word 0x100021ec +100062fc: 01310202 .word 0x01310202 +10006300: 400002c0 .word 0x400002c0 +10006304: 40000210 .word 0x40000210 +10006308: 40000040 .word 0x40000040 +1000630c: 98009180 .word 0x98009180 +10006310: 40000340 .word 0x40000340 +10006314: 00002b39 .word 0x00002b39 +10006318: 10040ea8 .word 0x10040ea8 +1000631c: 4000500c .word 0x4000500c +10006320: 40005000 .word 0x40005000 +10006324: 40005224 .word 0x40005224 +10006328: 40005028 .word 0x40005028 +1000632c: 09030e07 .word 0x09030e07 +10006330: 00068873 .word 0x00068873 +10006334: 40000300 .word 0x40000300 +10006338: 10040ef7 .word 0x10040ef7 +1000633c: 30000000 .word 0x30000000 +10006340: 30000000 .word 0x30000000 +10006344: 10015485 .word 0x10015485 +10006348: 10015441 .word 0x10015441 +1000634c: 100153e1 .word 0x100153e1 +10006350: 00004019 .word 0x00004019 +10006354: 10040ed1 .word 0x10040ed1 +10006358: 10040ef5 .word 0x10040ef5 + +1000635c : +1000635c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10006360: 4b28 ldr r3, [pc, #160] ; (10006404 ) +10006362: 4798 blx r3 +10006364: 4d28 ldr r5, [pc, #160] ; (10006408 ) +10006366: 4607 mov r7, r0 +10006368: 2000 movs r0, #0 +1000636a: 47a8 blx r5 +1000636c: 2000 movs r0, #0 +1000636e: 4b27 ldr r3, [pc, #156] ; (1000640c ) +10006370: 4798 blx r3 +10006372: b1a0 cbz r0, 1000639e +10006374: 4e26 ldr r6, [pc, #152] ; (10006410 ) +10006376: 281b cmp r0, #27 +10006378: 6834 ldr r4, [r6, #0] +1000637a: d115 bne.n 100063a8 +1000637c: 7963 ldrb r3, [r4, #5] +1000637e: 2b01 cmp r3, #1 +10006380: d003 beq.n 1000638a +10006382: 2301 movs r3, #1 +10006384: 7163 strb r3, [r4, #5] +10006386: 2300 movs r3, #0 +10006388: e008 b.n 1000639c +1000638a: 79a3 ldrb r3, [r4, #6] +1000638c: 2b01 cmp r3, #1 +1000638e: d002 beq.n 10006396 +10006390: 6a23 ldr r3, [r4, #32] +10006392: 2b01 cmp r3, #1 +10006394: d1f7 bne.n 10006386 +10006396: 78e3 ldrb r3, [r4, #3] +10006398: b90b cbnz r3, 1000639e +1000639a: 2301 movs r3, #1 +1000639c: 70e3 strb r3, [r4, #3] +1000639e: 4638 mov r0, r7 +100063a0: 462b mov r3, r5 +100063a2: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +100063a6: 4718 bx r3 +100063a8: 78e2 ldrb r2, [r4, #3] +100063aa: 2a01 cmp r2, #1 +100063ac: d103 bne.n 100063b6 +100063ae: 285b cmp r0, #91 ; 0x5b +100063b0: d1e9 bne.n 10006386 +100063b2: 2302 movs r3, #2 +100063b4: e7f2 b.n 1000639c +100063b6: 2a02 cmp r2, #2 +100063b8: d10b bne.n 100063d2 +100063ba: 2200 movs r2, #0 +100063bc: f1a0 0341 sub.w r3, r0, #65 ; 0x41 +100063c0: b2db uxtb r3, r3 +100063c2: 2b01 cmp r3, #1 +100063c4: 70e2 strb r2, [r4, #3] +100063c6: d8ea bhi.n 1000639e +100063c8: 2201 movs r2, #1 +100063ca: 4621 mov r1, r4 +100063cc: 4b11 ldr r3, [pc, #68] ; (10006414 ) +100063ce: 4798 blx r3 +100063d0: e7e5 b.n 1000639e +100063d2: 2201 movs r2, #1 +100063d4: 4621 mov r1, r4 +100063d6: 4b10 ldr r3, [pc, #64] ; (10006418 ) +100063d8: 4798 blx r3 +100063da: 2802 cmp r0, #2 +100063dc: d1df bne.n 1000639e +100063de: 68a2 ldr r2, [r4, #8] +100063e0: b14a cbz r2, 100063f6 +100063e2: 2301 movs r3, #1 +100063e4: 7123 strb r3, [r4, #4] +100063e6: 6a23 ldr r3, [r4, #32] +100063e8: 2b00 cmp r3, #0 +100063ea: d0d8 beq.n 1000639e +100063ec: 6830 ldr r0, [r6, #0] +100063ee: 3024 adds r0, #36 ; 0x24 +100063f0: f011 f86a bl 100174c8 +100063f4: e7d3 b.n 1000639e +100063f6: 6833 ldr r3, [r6, #0] +100063f8: 217f movs r1, #127 ; 0x7f +100063fa: 6898 ldr r0, [r3, #8] +100063fc: 4b07 ldr r3, [pc, #28] ; (1000641c ) +100063fe: 3001 adds r0, #1 +10006400: 4798 blx r3 +10006402: e7cc b.n 1000639e +10006404: 00000329 .word 0x00000329 +10006408: 00000335 .word 0x00000335 +1000640c: 00000309 .word 0x00000309 +10006410: 10000384 .word 0x10000384 +10006414: 0000ea71 .word 0x0000ea71 +10006418: 0000eadd .word 0x0000eadd +1000641c: 0000e8b1 .word 0x0000e8b1 + +10006420 : +10006420: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10006424: 4b28 ldr r3, [pc, #160] ; (100064c8 ) +10006426: 4e29 ldr r6, [pc, #164] ; (100064cc ) +10006428: 681d ldr r5, [r3, #0] +1000642a: 2701 movs r7, #1 +1000642c: f105 0424 add.w r4, r5, #36 ; 0x24 +10006430: 622f str r7, [r5, #32] +10006432: 4620 mov r0, r4 +10006434: f011 f858 bl 100174e8 +10006438: 792b ldrb r3, [r5, #4] +1000643a: 2b00 cmp r3, #0 +1000643c: d0f8 beq.n 10006430 +1000643e: 68a8 ldr r0, [r5, #8] +10006440: 4922 ldr r1, [pc, #136] ; (100064cc ) +10006442: 3001 adds r0, #1 +10006444: f006 fc1c bl 1000cc80 +10006448: 4680 mov r8, r0 +1000644a: 2800 cmp r0, #0 +1000644c: d037 beq.n 100064be +1000644e: 2701 movs r7, #1 +10006450: 6830 ldr r0, [r6, #0] +10006452: 4b1f ldr r3, [pc, #124] ; (100064d0 ) +10006454: 4798 blx r3 +10006456: 692c ldr r4, [r5, #16] +10006458: f8df a088 ldr.w sl, [pc, #136] ; 100064e4 +1000645c: f8df b078 ldr.w fp, [pc, #120] ; 100064d8 +10006460: 3410 adds r4, #16 +10006462: f854 1c10 ldr.w r1, [r4, #-16] +10006466: b991 cbnz r1, 1000648e +10006468: b11f cbz r7, 10006472 +1000646a: 6831 ldr r1, [r6, #0] +1000646c: 4819 ldr r0, [pc, #100] ; (100064d4 ) +1000646e: 4b1a ldr r3, [pc, #104] ; (100064d8 ) +10006470: 4798 blx r3 +10006472: 2004 movs r0, #4 +10006474: f012 fdd8 bl 10019028 +10006478: 2400 movs r4, #0 +1000647a: 68ab ldr r3, [r5, #8] +1000647c: 4f17 ldr r7, [pc, #92] ; (100064dc ) +1000647e: 701c strb r4, [r3, #0] +10006480: 705c strb r4, [r3, #1] +10006482: 200d movs r0, #13 +10006484: 47b8 blx r7 +10006486: 203e movs r0, #62 ; 0x3e +10006488: 47b8 blx r7 +1000648a: 712c strb r4, [r5, #4] +1000648c: e7cd b.n 1000642a +1000648e: 6830 ldr r0, [r6, #0] +10006490: 4b13 ldr r3, [pc, #76] ; (100064e0 ) +10006492: 4798 blx r3 +10006494: 4681 mov r9, r0 +10006496: b948 cbnz r0, 100064ac +10006498: f834 2c0c ldrh.w r2, [r4, #-12] +1000649c: 4590 cmp r8, r2 +1000649e: dd07 ble.n 100064b0 +100064a0: f854 2c08 ldr.w r2, [r4, #-8] +100064a4: 4631 mov r1, r6 +100064a6: 4640 mov r0, r8 +100064a8: 4790 blx r2 +100064aa: 464f mov r7, r9 +100064ac: 3410 adds r4, #16 +100064ae: e7d8 b.n 10006462 +100064b0: f854 2c04 ldr.w r2, [r4, #-4] +100064b4: f854 1c10 ldr.w r1, [r4, #-16] +100064b8: 4650 mov r0, sl +100064ba: 47d8 blx fp +100064bc: e7f5 b.n 100064aa +100064be: 2004 movs r0, #4 +100064c0: f012 fd92 bl 10018fe8 +100064c4: e7d8 b.n 10006478 +100064c6: bf00 nop +100064c8: 10000384 .word 0x10000384 +100064cc: 100006ac .word 0x100006ac +100064d0: 0000f749 .word 0x0000f749 +100064d4: 1003fae0 .word 0x1003fae0 +100064d8: 0000f39d .word 0x0000f39d +100064dc: 000002d9 .word 0x000002d9 +100064e0: 0000f719 .word 0x0000f719 +100064e4: 1003fada .word 0x1003fada + +100064e8 : +100064e8: 2358 movs r3, #88 ; 0x58 +100064ea: b570 push {r4, r5, r6, lr} +100064ec: 2400 movs r4, #0 +100064ee: b088 sub sp, #32 +100064f0: 9305 str r3, [sp, #20] +100064f2: 4b22 ldr r3, [pc, #136] ; (1000657c ) +100064f4: 4d22 ldr r5, [pc, #136] ; (10006580 ) +100064f6: 9304 str r3, [sp, #16] +100064f8: a804 add r0, sp, #16 +100064fa: 4b22 ldr r3, [pc, #136] ; (10006584 ) +100064fc: 9406 str r4, [sp, #24] +100064fe: 9407 str r4, [sp, #28] +10006500: 4798 blx r3 +10006502: 4628 mov r0, r5 +10006504: 4622 mov r2, r4 +10006506: f800 4b01 strb.w r4, [r0], #1 +1000650a: 217f movs r1, #127 ; 0x7f +1000650c: 4b1e ldr r3, [pc, #120] ; (10006588 ) +1000650e: 4798 blx r3 +10006510: 2210 movs r2, #16 +10006512: 481e ldr r0, [pc, #120] ; (1000658c ) +10006514: 4b1e ldr r3, [pc, #120] ; (10006590 ) +10006516: 7004 strb r4, [r0, #0] +10006518: 7044 strb r4, [r0, #1] +1000651a: 70c4 strb r4, [r0, #3] +1000651c: 7184 strb r4, [r0, #6] +1000651e: 6085 str r5, [r0, #8] +10006520: 6184 str r4, [r0, #24] +10006522: 4d1c ldr r5, [pc, #112] ; (10006594 ) +10006524: 61c3 str r3, [r0, #28] +10006526: 4b1c ldr r3, [pc, #112] ; (10006598 ) +10006528: 60c5 str r5, [r0, #12] +1000652a: 6103 str r3, [r0, #16] +1000652c: 4b1b ldr r3, [pc, #108] ; (1000659c ) +1000652e: 4e1c ldr r6, [pc, #112] ; (100065a0 ) +10006530: 681b ldr r3, [r3, #0] +10006532: 2101 movs r1, #1 +10006534: fb93 f3f2 sdiv r3, r3, r2 +10006538: 6143 str r3, [r0, #20] +1000653a: 2305 movs r3, #5 +1000653c: 6204 str r4, [r0, #32] +1000653e: 6030 str r0, [r6, #0] +10006540: 7083 strb r3, [r0, #2] +10006542: 3024 adds r0, #36 ; 0x24 +10006544: f010 ffa8 bl 10017498 +10006548: 2201 movs r2, #1 +1000654a: 6833 ldr r3, [r6, #0] +1000654c: a804 add r0, sp, #16 +1000654e: 711c strb r4, [r3, #4] +10006550: 715a strb r2, [r3, #5] +10006552: 4b14 ldr r3, [pc, #80] ; (100065a4 ) +10006554: 4798 blx r3 +10006556: 2304 movs r3, #4 +10006558: 9403 str r4, [sp, #12] +1000655a: 9300 str r3, [sp, #0] +1000655c: 9402 str r4, [sp, #8] +1000655e: 9401 str r4, [sp, #4] +10006560: 4623 mov r3, r4 +10006562: f44f 6280 mov.w r2, #1024 ; 0x400 +10006566: 4910 ldr r1, [pc, #64] ; (100065a8 ) +10006568: 4810 ldr r0, [pc, #64] ; (100065ac ) +1000656a: f00f fc73 bl 10015e54 +1000656e: 2801 cmp r0, #1 +10006570: d001 beq.n 10006576 +10006572: 480f ldr r0, [pc, #60] ; (100065b0 ) +10006574: 47a8 blx r5 +10006576: b008 add sp, #32 +10006578: bd70 pop {r4, r5, r6, pc} +1000657a: bf00 nop +1000657c: 1000635d .word 0x1000635d +10006580: 10000388 .word 0x10000388 +10006584: 00004091 .word 0x00004091 +10006588: 0000e8b1 .word 0x0000e8b1 +1000658c: 10000408 .word 0x10000408 +10006590: 10000430 .word 0x10000430 +10006594: 0000f39d .word 0x0000f39d +10006598: 10044c10 .word 0x10044c10 +1000659c: 00000020 .word 0x00000020 +100065a0: 10000384 .word 0x10000384 +100065a4: 00004029 .word 0x00004029 +100065a8: 1003faf4 .word 0x1003faf4 +100065ac: 10006421 .word 0x10006421 +100065b0: 1003fafc .word 0x1003fafc + +100065b4 : +100065b4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100065b8: b087 sub sp, #28 +100065ba: ab02 add r3, sp, #8 +100065bc: e883 0006 stmia.w r3, {r1, r2} +100065c0: 4b31 ldr r3, [pc, #196] ; (10006688 ) +100065c2: 4680 mov r8, r0 +100065c4: 6818 ldr r0, [r3, #0] +100065c6: 4c31 ldr r4, [pc, #196] ; (1000668c ) +100065c8: f3c0 1002 ubfx r0, r0, #4, #3 +100065cc: eb04 04c0 add.w r4, r4, r0, lsl #3 +100065d0: 78e3 ldrb r3, [r4, #3] +100065d2: b923 cbnz r3, 100065de +100065d4: 2101 movs r1, #1 +100065d6: aa04 add r2, sp, #16 +100065d8: 4b2d ldr r3, [pc, #180] ; (10006690 ) +100065da: 4798 blx r3 +100065dc: ac04 add r4, sp, #16 +100065de: 4b2d ldr r3, [pc, #180] ; (10006694 ) +100065e0: 681b ldr r3, [r3, #0] +100065e2: 04db lsls r3, r3, #19 +100065e4: d505 bpl.n 100065f2 +100065e6: 482c ldr r0, [pc, #176] ; (10006698 ) +100065e8: 492c ldr r1, [pc, #176] ; (1000669c ) +100065ea: 4642 mov r2, r8 +100065ec: 4623 mov r3, r4 +100065ee: 4d2c ldr r5, [pc, #176] ; (100066a0 ) +100065f0: 47a8 blx r5 +100065f2: 4f2c ldr r7, [pc, #176] ; (100066a4 ) +100065f4: 7862 ldrb r2, [r4, #1] +100065f6: f8d7 b000 ldr.w fp, [r7] +100065fa: 4e2b ldr r6, [pc, #172] ; (100066a8 ) +100065fc: ea4f 431b mov.w r3, fp, lsr #16 +10006600: 041b lsls r3, r3, #16 +10006602: 4313 orrs r3, r2 +10006604: 603b str r3, [r7, #0] +10006606: f8d6 a000 ldr.w sl, [r6] +1000660a: 7823 ldrb r3, [r4, #0] +1000660c: ea4f 411a mov.w r1, sl, lsr #16 +10006610: 0409 lsls r1, r1, #16 +10006612: 4d26 ldr r5, [pc, #152] ; (100066ac ) +10006614: 4319 orrs r1, r3 +10006616: 6031 str r1, [r6, #0] +10006618: f8d5 9000 ldr.w r9, [r5] +1000661c: 78a2 ldrb r2, [r4, #2] +1000661e: f029 03ff bic.w r3, r9, #255 ; 0xff +10006622: 4c23 ldr r4, [pc, #140] ; (100066b0 ) +10006624: 4313 orrs r3, r2 +10006626: 602b str r3, [r5, #0] +10006628: 4a22 ldr r2, [pc, #136] ; (100066b4 ) +1000662a: 2300 movs r3, #0 +1000662c: 6023 str r3, [r4, #0] +1000662e: 6811 ldr r1, [r2, #0] +10006630: fa1f fb8b uxth.w fp, fp +10006634: f421 2170 bic.w r1, r1, #983040 ; 0xf0000 +10006638: f421 7140 bic.w r1, r1, #768 ; 0x300 +1000663c: f441 7140 orr.w r1, r1, #768 ; 0x300 +10006640: 6011 str r1, [r2, #0] +10006642: f882 8060 strb.w r8, [r2, #96] ; 0x60 +10006646: 2201 movs r2, #1 +10006648: 6022 str r2, [r4, #0] +1000664a: 9301 str r3, [sp, #4] +1000664c: 4a1a ldr r2, [pc, #104] ; (100066b8 ) +1000664e: 4790 blx r2 +10006650: 9b01 ldr r3, [sp, #4] +10006652: fa1f fa8a uxth.w sl, sl +10006656: 6023 str r3, [r4, #0] +10006658: 683a ldr r2, [r7, #0] +1000665a: fa5f f989 uxtb.w r9, r9 +1000665e: 0c12 lsrs r2, r2, #16 +10006660: 0412 lsls r2, r2, #16 +10006662: ea42 020b orr.w r2, r2, fp +10006666: 603a str r2, [r7, #0] +10006668: 6833 ldr r3, [r6, #0] +1000666a: 0c1b lsrs r3, r3, #16 +1000666c: 041b lsls r3, r3, #16 +1000666e: ea43 030a orr.w r3, r3, sl +10006672: 6033 str r3, [r6, #0] +10006674: 682b ldr r3, [r5, #0] +10006676: f023 03ff bic.w r3, r3, #255 ; 0xff +1000667a: ea43 0309 orr.w r3, r3, r9 +1000667e: 602b str r3, [r5, #0] +10006680: b007 add sp, #28 +10006682: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10006686: bf00 nop +10006688: 40000014 .word 0x40000014 +1000668c: 100021ec .word 0x100021ec +10006690: 00003081 .word 0x00003081 +10006694: 10000310 .word 0x10000310 +10006698: 1004462f .word 0x1004462f +1000669c: 100449f2 .word 0x100449f2 +100066a0: 0000f39d .word 0x0000f39d +100066a4: 4000611c .word 0x4000611c +100066a8: 40006014 .word 0x40006014 +100066ac: 40000300 .word 0x40000300 +100066b0: 40006008 .word 0x40006008 +100066b4: 40006000 .word 0x40006000 +100066b8: 00002ea5 .word 0x00002ea5 + +100066bc : +100066bc: 4b24 ldr r3, [pc, #144] ; (10006750 ) +100066be: b537 push {r0, r1, r2, r4, r5, lr} +100066c0: 4605 mov r5, r0 +100066c2: 6818 ldr r0, [r3, #0] +100066c4: 2306 movs r3, #6 +100066c6: f3c0 1002 ubfx r0, r0, #4, #3 +100066ca: fb03 0301 mla r3, r3, r1, r0 +100066ce: 4a21 ldr r2, [pc, #132] ; (10006754 ) +100066d0: 460c mov r4, r1 +100066d2: eb02 03c3 add.w r3, r2, r3, lsl #3 +100066d6: 78da ldrb r2, [r3, #3] +100066d8: b922 cbnz r2, 100066e4 +100066da: 4b1f ldr r3, [pc, #124] ; (10006758 ) +100066dc: 2101 movs r1, #1 +100066de: 466a mov r2, sp +100066e0: 4798 blx r3 +100066e2: 466b mov r3, sp +100066e4: 4a1d ldr r2, [pc, #116] ; (1000675c ) +100066e6: 2100 movs r1, #0 +100066e8: 6011 str r1, [r2, #0] +100066ea: 2101 movs r1, #1 +100066ec: 60d5 str r5, [r2, #12] +100066ee: 6091 str r1, [r2, #8] +100066f0: 491b ldr r1, [pc, #108] ; (10006760 ) +100066f2: 7858 ldrb r0, [r3, #1] +100066f4: 680a ldr r2, [r1, #0] +100066f6: 2c01 cmp r4, #1 +100066f8: ea4f 4212 mov.w r2, r2, lsr #16 +100066fc: ea4f 4202 mov.w r2, r2, lsl #16 +10006700: ea40 0202 orr.w r2, r0, r2 +10006704: 600a str r2, [r1, #0] +10006706: 4a17 ldr r2, [pc, #92] ; (10006764 ) +10006708: 7899 ldrb r1, [r3, #2] +1000670a: 6810 ldr r0, [r2, #0] +1000670c: f020 03ff bic.w r3, r0, #255 ; 0xff +10006710: ea41 0303 orr.w r3, r1, r3 +10006714: 6013 str r3, [r2, #0] +10006716: 4b14 ldr r3, [pc, #80] ; (10006768 ) +10006718: f04f 0204 mov.w r2, #4 +1000671c: 601a str r2, [r3, #0] +1000671e: d00e beq.n 1000673e +10006720: d308 bcc.n 10006734 +10006722: 2c02 cmp r4, #2 +10006724: d112 bne.n 1000674c +10006726: 4b11 ldr r3, [pc, #68] ; (1000676c ) +10006728: 681a ldr r2, [r3, #0] +1000672a: f422 127c bic.w r2, r2, #4128768 ; 0x3f0000 +1000672e: f442 2220 orr.w r2, r2, #655360 ; 0xa0000 +10006732: e00a b.n 1000674a +10006734: 4b0d ldr r3, [pc, #52] ; (1000676c ) +10006736: 681a ldr r2, [r3, #0] +10006738: f422 127c bic.w r2, r2, #4128768 ; 0x3f0000 +1000673c: e005 b.n 1000674a +1000673e: 4b0b ldr r3, [pc, #44] ; (1000676c ) +10006740: 681a ldr r2, [r3, #0] +10006742: f422 127c bic.w r2, r2, #4128768 ; 0x3f0000 +10006746: f442 22a0 orr.w r2, r2, #327680 ; 0x50000 +1000674a: 601a str r2, [r3, #0] +1000674c: b003 add sp, #12 +1000674e: bd30 pop {r4, r5, pc} +10006750: 40000014 .word 0x40000014 +10006754: 100021ec .word 0x100021ec +10006758: 00003081 .word 0x00003081 +1000675c: 40006008 .word 0x40006008 +10006760: 4000611c .word 0x4000611c +10006764: 40000300 .word 0x40000300 +10006768: 40006004 .word 0x40006004 +1000676c: 40006000 .word 0x40006000 + +10006770 : +10006770: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +10006774: 4b14 ldr r3, [pc, #80] ; (100067c8 ) +10006776: 4680 mov r8, r0 +10006778: 681b ldr r3, [r3, #0] +1000677a: 460f mov r7, r1 +1000677c: f413 5f80 tst.w r3, #4096 ; 0x1000 +10006780: 466c mov r4, sp +10006782: d005 beq.n 10006790 +10006784: 4811 ldr r0, [pc, #68] ; (100067cc ) +10006786: 4912 ldr r1, [pc, #72] ; (100067d0 ) +10006788: e89d 000c ldmia.w sp, {r2, r3} +1000678c: 4d11 ldr r5, [pc, #68] ; (100067d4 ) +1000678e: 47a8 blx r5 +10006790: 4b11 ldr r3, [pc, #68] ; (100067d8 ) +10006792: 4d12 ldr r5, [pc, #72] ; (100067dc ) +10006794: 2600 movs r6, #0 +10006796: 220c movs r2, #12 +10006798: 602e str r6, [r5, #0] +1000679a: 601a str r2, [r3, #0] +1000679c: e894 0006 ldmia.w r4, {r1, r2} +100067a0: 204b movs r0, #75 ; 0x4b +100067a2: f7ff ff07 bl 100065b4 +100067a6: 4a0e ldr r2, [pc, #56] ; (100067e0 ) +100067a8: 6813 ldr r3, [r2, #0] +100067aa: 4633 mov r3, r6 +100067ac: b2d9 uxtb r1, r3 +100067ae: 42b9 cmp r1, r7 +100067b0: d204 bcs.n 100067bc +100067b2: 7811 ldrb r1, [r2, #0] +100067b4: f808 1003 strb.w r1, [r8, r3] +100067b8: 3301 adds r3, #1 +100067ba: e7f7 b.n 100067ac +100067bc: 2300 movs r3, #0 +100067be: 602b str r3, [r5, #0] +100067c0: b002 add sp, #8 +100067c2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100067c6: bf00 nop +100067c8: 10000310 .word 0x10000310 +100067cc: 1004464a .word 0x1004464a +100067d0: 10044616 .word 0x10044616 +100067d4: 0000f39d .word 0x0000f39d +100067d8: 40006004 .word 0x40006004 +100067dc: 40006008 .word 0x40006008 +100067e0: 40006060 .word 0x40006060 + +100067e4 : +100067e4: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} +100067e8: 4b38 ldr r3, [pc, #224] ; (100068cc ) +100067ea: 466f mov r7, sp +100067ec: 681b ldr r3, [r3, #0] +100067ee: f413 5f80 tst.w r3, #4096 ; 0x1000 +100067f2: d010 beq.n 10006816 +100067f4: 2400 movs r4, #0 +100067f6: f88d 4004 strb.w r4, [sp, #4] +100067fa: f88d 4005 strb.w r4, [sp, #5] +100067fe: f88d 4006 strb.w r4, [sp, #6] +10006802: f88d 4007 strb.w r4, [sp, #7] +10006806: 4832 ldr r0, [pc, #200] ; (100068d0 ) +10006808: 4932 ldr r1, [pc, #200] ; (100068d4 ) +1000680a: e89d 000c ldmia.w sp, {r2, r3} +1000680e: 4d32 ldr r5, [pc, #200] ; (100068d8 ) +10006810: 46a0 mov r8, r4 +10006812: 4626 mov r6, r4 +10006814: 47a8 blx r5 +10006816: 4b31 ldr r3, [pc, #196] ; (100068dc ) +10006818: 4931 ldr r1, [pc, #196] ; (100068e0 ) +1000681a: 2200 movs r2, #0 +1000681c: 2003 movs r0, #3 +1000681e: 601a str r2, [r3, #0] +10006820: 4691 mov r9, r2 +10006822: 6008 str r0, [r1, #0] +10006824: 469a mov sl, r3 +10006826: 2500 movs r5, #0 +10006828: f88d 4004 strb.w r4, [sp, #4] +1000682c: f88d 8005 strb.w r8, [sp, #5] +10006830: f88d 6006 strb.w r6, [sp, #6] +10006834: f88d 5007 strb.w r5, [sp, #7] +10006838: 209f movs r0, #159 ; 0x9f +1000683a: e897 0006 ldmia.w r7, {r1, r2} +1000683e: f7ff feb9 bl 100065b4 +10006842: 4b28 ldr r3, [pc, #160] ; (100068e4 ) +10006844: 681e ldr r6, [r3, #0] +10006846: b2f4 uxtb r4, r6 +10006848: 1e63 subs r3, r4, #1 +1000684a: b2db uxtb r3, r3 +1000684c: 2bfd cmp r3, #253 ; 0xfd +1000684e: f3c6 2807 ubfx r8, r6, #8, #8 +10006852: f3c6 4607 ubfx r6, r6, #16, #8 +10006856: d80f bhi.n 10006878 +10006858: 2c20 cmp r4, #32 +1000685a: d01d beq.n 10006898 +1000685c: 2cc2 cmp r4, #194 ; 0xc2 +1000685e: d104 bne.n 1000686a +10006860: 2e18 cmp r6, #24 +10006862: bf14 ite ne +10006864: 2501 movne r5, #1 +10006866: 2502 moveq r5, #2 +10006868: e019 b.n 1000689e +1000686a: 2cef cmp r4, #239 ; 0xef +1000686c: d016 beq.n 1000689c +1000686e: 2c1c cmp r4, #28 +10006870: bf14 ite ne +10006872: 2500 movne r5, #0 +10006874: 2505 moveq r5, #5 +10006876: e012 b.n 1000689e +10006878: f1b9 0f02 cmp.w r9, #2 +1000687c: d106 bne.n 1000688c +1000687e: 4b1a ldr r3, [pc, #104] ; (100068e8 ) +10006880: 681b ldr r3, [r3, #0] +10006882: 005b lsls r3, r3, #1 +10006884: d502 bpl.n 1000688c +10006886: 4819 ldr r0, [pc, #100] ; (100068ec ) +10006888: 4b13 ldr r3, [pc, #76] ; (100068d8 ) +1000688a: 4798 blx r3 +1000688c: f109 0901 add.w r9, r9, #1 +10006890: f1b9 0f03 cmp.w r9, #3 +10006894: d1c7 bne.n 10006826 +10006896: e002 b.n 1000689e +10006898: 2504 movs r5, #4 +1000689a: e000 b.n 1000689e +1000689c: 2503 movs r5, #3 +1000689e: 4b14 ldr r3, [pc, #80] ; (100068f0 ) +100068a0: f103 0190 add.w r1, r3, #144 ; 0x90 +100068a4: f103 0230 add.w r2, r3, #48 ; 0x30 +100068a8: f803 4c01 strb.w r4, [r3, #-1] +100068ac: f883 8000 strb.w r8, [r3] +100068b0: 705e strb r6, [r3, #1] +100068b2: 709d strb r5, [r3, #2] +100068b4: 3308 adds r3, #8 +100068b6: 4293 cmp r3, r2 +100068b8: d1f6 bne.n 100068a8 +100068ba: 428b cmp r3, r1 +100068bc: d1f2 bne.n 100068a4 +100068be: 2300 movs r3, #0 +100068c0: f8ca 3000 str.w r3, [sl] +100068c4: b002 add sp, #8 +100068c6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +100068ca: bf00 nop +100068cc: 10000310 .word 0x10000310 +100068d0: 1004464a .word 0x1004464a +100068d4: 100449df .word 0x100449df +100068d8: 0000f39d .word 0x0000f39d +100068dc: 40006008 .word 0x40006008 +100068e0: 40006004 .word 0x40006004 +100068e4: 40006060 .word 0x40006060 +100068e8: 10000314 .word 0x10000314 +100068ec: 1004465f .word 0x1004465f +100068f0: 100021f1 .word 0x100021f1 + +100068f4 : +100068f4: 4b17 ldr r3, [pc, #92] ; (10006954 ) +100068f6: 2200 movs r2, #0 +100068f8: 601a str r2, [r3, #0] +100068fa: f503 738c add.w r3, r3, #280 ; 0x118 +100068fe: 681a ldr r2, [r3, #0] +10006900: 2801 cmp r0, #1 +10006902: f422 72ff bic.w r2, r2, #510 ; 0x1fe +10006906: 601a str r2, [r3, #0] +10006908: d10b bne.n 10006922 +1000690a: 4a13 ldr r2, [pc, #76] ; (10006958 ) +1000690c: 21a2 movs r1, #162 ; 0xa2 +1000690e: 6011 str r1, [r2, #0] +10006910: 213b movs r1, #59 ; 0x3b +10006912: f842 1c14 str.w r1, [r2, #-20] +10006916: 681a ldr r2, [r3, #0] +10006918: f442 7200 orr.w r2, r2, #512 ; 0x200 +1000691c: f042 0202 orr.w r2, r2, #2 +10006920: e016 b.n 10006950 +10006922: 2802 cmp r0, #2 +10006924: d115 bne.n 10006952 +10006926: 4a0d ldr r2, [pc, #52] ; (1000695c ) +10006928: 2138 movs r1, #56 ; 0x38 +1000692a: 6011 str r1, [r2, #0] +1000692c: 21eb movs r1, #235 ; 0xeb +1000692e: f842 1c14 str.w r1, [r2, #-20] +10006932: 2132 movs r1, #50 ; 0x32 +10006934: f842 1c04 str.w r1, [r2, #-4] +10006938: 216b movs r1, #107 ; 0x6b +1000693a: f842 1c18 str.w r1, [r2, #-24] +1000693e: 4a08 ldr r2, [pc, #32] ; (10006960 ) +10006940: 79d2 ldrb r2, [r2, #7] +10006942: 2a02 cmp r2, #2 +10006944: 681a ldr r2, [r3, #0] +10006946: bf0c ite eq +10006948: f442 7202 orreq.w r2, r2, #520 ; 0x208 +1000694c: f442 7204 orrne.w r2, r2, #528 ; 0x210 +10006950: 601a str r2, [r3, #0] +10006952: 4770 bx lr +10006954: 40006008 .word 0x40006008 +10006958: 400060fc .word 0x400060fc +1000695c: 40006104 .word 0x40006104 +10006960: 100021ec .word 0x100021ec + +10006964 : +10006964: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10006968: 4604 mov r4, r0 +1000696a: 4854 ldr r0, [pc, #336] ; (10006abc ) +1000696c: 4690 mov r8, r2 +1000696e: 2200 movs r2, #0 +10006970: 6002 str r2, [r0, #0] +10006972: 4a53 ldr r2, [pc, #332] ; (10006ac0 ) +10006974: f011 0703 ands.w r7, r1, #3 +10006978: 460d mov r5, r1 +1000697a: bf18 it ne +1000697c: ebc7 0501 rsbne r5, r7, r1 +10006980: 6811 ldr r1, [r2, #0] +10006982: 2b01 cmp r3, #1 +10006984: f421 2170 bic.w r1, r1, #983040 ; 0xf0000 +10006988: f421 7140 bic.w r1, r1, #768 ; 0x300 +1000698c: f441 7140 orr.w r1, r1, #768 ; 0x300 +10006990: 6011 str r1, [r2, #0] +10006992: b085 sub sp, #20 +10006994: 4682 mov sl, r0 +10006996: 6813 ldr r3, [r2, #0] +10006998: d105 bne.n 100069a6 +1000699a: f443 2380 orr.w r3, r3, #262144 ; 0x40000 +1000699e: 6013 str r3, [r2, #0] +100069a0: f04f 0b3b mov.w fp, #59 ; 0x3b +100069a4: e002 b.n 100069ac +100069a6: 6013 str r3, [r2, #0] +100069a8: f04f 0b03 mov.w fp, #3 +100069ac: f3c5 2307 ubfx r3, r5, #8, #8 +100069b0: f3c5 4107 ubfx r1, r5, #16, #8 +100069b4: 041b lsls r3, r3, #16 +100069b6: ea43 2101 orr.w r1, r3, r1, lsl #8 +100069ba: ea41 6105 orr.w r1, r1, r5, lsl #24 +100069be: ea41 010b orr.w r1, r1, fp +100069c2: f8df 9110 ldr.w r9, [pc, #272] ; 10006ad4 +100069c6: b127 cbz r7, 100069d2 +100069c8: 2c20 cmp r4, #32 +100069ca: d904 bls.n 100069d6 +100069cc: f107 031c add.w r3, r7, #28 +100069d0: e005 b.n 100069de +100069d2: 2c20 cmp r4, #32 +100069d4: d802 bhi.n 100069dc +100069d6: f8c9 4000 str.w r4, [r9] +100069da: e002 b.n 100069e2 +100069dc: 2320 movs r3, #32 +100069de: f8c9 3000 str.w r3, [r9] +100069e2: 4b38 ldr r3, [pc, #224] ; (10006ac4 ) +100069e4: 2203 movs r2, #3 +100069e6: 601a str r2, [r3, #0] +100069e8: 4a37 ldr r2, [pc, #220] ; (10006ac8 ) +100069ea: 2301 movs r3, #1 +100069ec: 6013 str r3, [r2, #0] +100069ee: 4e37 ldr r6, [pc, #220] ; (10006acc ) +100069f0: 6511 str r1, [r2, #80] ; 0x50 +100069f2: 3250 adds r2, #80 ; 0x50 +100069f4: f8ca 3000 str.w r3, [sl] +100069f8: 9200 str r2, [sp, #0] +100069fa: 47b0 blx r6 +100069fc: 9a00 ldr r2, [sp, #0] +100069fe: 4631 mov r1, r6 +10006a00: b1af cbz r7, 10006a2e +10006a02: 6813 ldr r3, [r2, #0] +10006a04: 4646 mov r6, r8 +10006a06: 9303 str r3, [sp, #12] +10006a08: ebc8 0306 rsb r3, r8, r6 +10006a0c: b2db uxtb r3, r3 +10006a0e: f1c7 0004 rsb r0, r7, #4 +10006a12: 4283 cmp r3, r0 +10006a14: d207 bcs.n 10006a26 +10006a16: a804 add r0, sp, #16 +10006a18: 4438 add r0, r7 +10006a1a: 4403 add r3, r0 +10006a1c: f813 3c04 ldrb.w r3, [r3, #-4] +10006a20: f806 3b01 strb.w r3, [r6], #1 +10006a24: e7f0 b.n 10006a08 +10006a26: 3c04 subs r4, #4 +10006a28: 443c add r4, r7 +10006a2a: b2ff uxtb r7, r7 +10006a2c: e007 b.n 10006a3e +10006a2e: 4646 mov r6, r8 +10006a30: e005 b.n 10006a3e +10006a32: f846 3b04 str.w r3, [r6], #4 +10006a36: 3704 adds r7, #4 +10006a38: 3c04 subs r4, #4 +10006a3a: b2ff uxtb r7, r7 +10006a3c: 46b0 mov r8, r6 +10006a3e: 2c00 cmp r4, #0 +10006a40: d033 beq.n 10006aaa +10006a42: 2f1c cmp r7, #28 +10006a44: dd1f ble.n 10006a86 +10006a46: 443d add r5, r7 +10006a48: f3c5 4007 ubfx r0, r5, #16, #8 +10006a4c: ea4b 6305 orr.w r3, fp, r5, lsl #24 +10006a50: ea43 2300 orr.w r3, r3, r0, lsl #8 +10006a54: f3c5 2007 ubfx r0, r5, #8, #8 +10006a58: 2c1f cmp r4, #31 +10006a5a: ea43 4300 orr.w r3, r3, r0, lsl #16 +10006a5e: f04f 0000 mov.w r0, #0 +10006a62: f8ca 0000 str.w r0, [sl] +10006a66: bf8a itet hi +10006a68: 2020 movhi r0, #32 +10006a6a: f8c9 4000 strls.w r4, [r9] +10006a6e: f8c9 0000 strhi.w r0, [r9] +10006a72: 6013 str r3, [r2, #0] +10006a74: 2301 movs r3, #1 +10006a76: f8ca 3000 str.w r3, [sl] +10006a7a: 9101 str r1, [sp, #4] +10006a7c: 9200 str r2, [sp, #0] +10006a7e: 4788 blx r1 +10006a80: 9a00 ldr r2, [sp, #0] +10006a82: 9901 ldr r1, [sp, #4] +10006a84: 2700 movs r7, #0 +10006a86: 6813 ldr r3, [r2, #0] +10006a88: 2c03 cmp r4, #3 +10006a8a: 9303 str r3, [sp, #12] +10006a8c: d8d1 bhi.n 10006a32 +10006a8e: 4646 mov r6, r8 +10006a90: ebc8 0306 rsb r3, r8, r6 +10006a94: b2db uxtb r3, r3 +10006a96: 42a3 cmp r3, r4 +10006a98: d206 bcs.n 10006aa8 +10006a9a: aa04 add r2, sp, #16 +10006a9c: 4413 add r3, r2 +10006a9e: f813 3c04 ldrb.w r3, [r3, #-4] +10006aa2: f806 3b01 strb.w r3, [r6], #1 +10006aa6: e7f3 b.n 10006a90 +10006aa8: 2400 movs r4, #0 +10006aaa: 4b09 ldr r3, [pc, #36] ; (10006ad0 ) +10006aac: 2201 movs r2, #1 +10006aae: f8ca 4000 str.w r4, [sl] +10006ab2: 601a str r2, [r3, #0] +10006ab4: b005 add sp, #20 +10006ab6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10006aba: bf00 nop +10006abc: 40006008 .word 0x40006008 +10006ac0: 40006000 .word 0x40006000 +10006ac4: 40006118 .word 0x40006118 +10006ac8: 40006010 .word 0x40006010 +10006acc: 00002ea5 .word 0x00002ea5 +10006ad0: 40006128 .word 0x40006128 +10006ad4: 40006004 .word 0x40006004 + +10006ad8 : +10006ad8: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10006adc: 4606 mov r6, r0 +10006ade: 460d mov r5, r1 +10006ae0: f3c1 4007 ubfx r0, r1, #16, #8 +10006ae4: f3c1 2707 ubfx r7, r1, #8, #8 +10006ae8: 4939 ldr r1, [pc, #228] ; (10006bd0 ) +10006aea: 4c3a ldr r4, [pc, #232] ; (10006bd4 ) +10006aec: 4691 mov r9, r2 +10006aee: 2200 movs r2, #0 +10006af0: 600a str r2, [r1, #0] +10006af2: 6822 ldr r2, [r4, #0] +10006af4: 2b01 cmp r3, #1 +10006af6: f422 2270 bic.w r2, r2, #983040 ; 0xf0000 +10006afa: f422 7240 bic.w r2, r2, #768 ; 0x300 +10006afe: f442 7240 orr.w r2, r2, #768 ; 0x300 +10006b02: 6022 str r2, [r4, #0] +10006b04: 4688 mov r8, r1 +10006b06: d105 bne.n 10006b14 +10006b08: 6823 ldr r3, [r4, #0] +10006b0a: f443 2380 orr.w r3, r3, #262144 ; 0x40000 +10006b0e: 6023 str r3, [r4, #0] +10006b10: 243b movs r4, #59 ; 0x3b +10006b12: e012 b.n 10006b3a +10006b14: b91b cbnz r3, 10006b1e +10006b16: 6823 ldr r3, [r4, #0] +10006b18: 6023 str r3, [r4, #0] +10006b1a: 2403 movs r4, #3 +10006b1c: e00d b.n 10006b3a +10006b1e: 4b2e ldr r3, [pc, #184] ; (10006bd8 ) +10006b20: 79db ldrb r3, [r3, #7] +10006b22: 2b02 cmp r3, #2 +10006b24: 6823 ldr r3, [r4, #0] +10006b26: d104 bne.n 10006b32 +10006b28: f443 2300 orr.w r3, r3, #524288 ; 0x80000 +10006b2c: 6023 str r3, [r4, #0] +10006b2e: 246b movs r4, #107 ; 0x6b +10006b30: e003 b.n 10006b3a +10006b32: f443 2320 orr.w r3, r3, #655360 ; 0xa0000 +10006b36: 6023 str r3, [r4, #0] +10006b38: 24eb movs r4, #235 ; 0xeb +10006b3a: 2e1f cmp r6, #31 +10006b3c: ea4f 4207 mov.w r2, r7, lsl #16 +10006b40: 4f26 ldr r7, [pc, #152] ; (10006bdc ) +10006b42: bf84 itt hi +10006b44: 2320 movhi r3, #32 +10006b46: 603b strhi r3, [r7, #0] +10006b48: 4b25 ldr r3, [pc, #148] ; (10006be0 ) +10006b4a: ea42 2200 orr.w r2, r2, r0, lsl #8 +10006b4e: f04f 0103 mov.w r1, #3 +10006b52: bf98 it ls +10006b54: 603e strls r6, [r7, #0] +10006b56: ea42 6205 orr.w r2, r2, r5, lsl #24 +10006b5a: 6019 str r1, [r3, #0] +10006b5c: f8df a08c ldr.w sl, [pc, #140] ; 10006bec +10006b60: 4920 ldr r1, [pc, #128] ; (10006be4 ) +10006b62: 2301 movs r3, #1 +10006b64: 4322 orrs r2, r4 +10006b66: 600b str r3, [r1, #0] +10006b68: f8df b084 ldr.w fp, [pc, #132] ; 10006bf0 +10006b6c: f8ca 2000 str.w r2, [sl] +10006b70: f8c8 3000 str.w r3, [r8] +10006b74: 47d8 blx fp +10006b76: 2300 movs r3, #0 +10006b78: b326 cbz r6, 10006bc4 +10006b7a: 2b20 cmp r3, #32 +10006b7c: d11b bne.n 10006bb6 +10006b7e: 3520 adds r5, #32 +10006b80: f3c5 4107 ubfx r1, r5, #16, #8 +10006b84: ea44 6205 orr.w r2, r4, r5, lsl #24 +10006b88: ea42 2201 orr.w r2, r2, r1, lsl #8 +10006b8c: f3c5 2107 ubfx r1, r5, #8, #8 +10006b90: ea42 4201 orr.w r2, r2, r1, lsl #16 +10006b94: 2e1f cmp r6, #31 +10006b96: f04f 0100 mov.w r1, #0 +10006b9a: f8c8 1000 str.w r1, [r8] +10006b9e: bf88 it hi +10006ba0: 603b strhi r3, [r7, #0] +10006ba2: f04f 0301 mov.w r3, #1 +10006ba6: bf98 it ls +10006ba8: 603e strls r6, [r7, #0] +10006baa: f8ca 2000 str.w r2, [sl] +10006bae: f8c8 3000 str.w r3, [r8] +10006bb2: 47d8 blx fp +10006bb4: 2300 movs r3, #0 +10006bb6: f8da 2000 ldr.w r2, [sl] +10006bba: 3304 adds r3, #4 +10006bbc: f849 2b04 str.w r2, [r9], #4 +10006bc0: 3e04 subs r6, #4 +10006bc2: e7d9 b.n 10006b78 +10006bc4: 4b08 ldr r3, [pc, #32] ; (10006be8 ) +10006bc6: 2201 movs r2, #1 +10006bc8: 601a str r2, [r3, #0] +10006bca: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +10006bce: bf00 nop +10006bd0: 40006008 .word 0x40006008 +10006bd4: 40006000 .word 0x40006000 +10006bd8: 100021ec .word 0x100021ec +10006bdc: 40006004 .word 0x40006004 +10006be0: 40006118 .word 0x40006118 +10006be4: 40006010 .word 0x40006010 +10006be8: 40006128 .word 0x40006128 +10006bec: 40006060 .word 0x40006060 +10006bf0: 00002ea5 .word 0x00002ea5 + +10006bf4 : +10006bf4: b573 push {r0, r1, r4, r5, r6, lr} +10006bf6: 4b0e ldr r3, [pc, #56] ; (10006c30 ) +10006bf8: 466c mov r4, sp +10006bfa: 681b ldr r3, [r3, #0] +10006bfc: e88d 0003 stmia.w sp, {r0, r1} +10006c00: 04db lsls r3, r3, #19 +10006c02: d505 bpl.n 10006c10 +10006c04: 480b ldr r0, [pc, #44] ; (10006c34 ) +10006c06: 490c ldr r1, [pc, #48] ; (10006c38 ) +10006c08: e89d 000c ldmia.w sp, {r2, r3} +10006c0c: 4d0b ldr r5, [pc, #44] ; (10006c3c ) +10006c0e: 47a8 blx r5 +10006c10: 4d0b ldr r5, [pc, #44] ; (10006c40 ) +10006c12: 4b0c ldr r3, [pc, #48] ; (10006c44 ) +10006c14: 2600 movs r6, #0 +10006c16: 2201 movs r2, #1 +10006c18: 602e str r6, [r5, #0] +10006c1a: 601a str r2, [r3, #0] +10006c1c: 20c8 movs r0, #200 ; 0xc8 +10006c1e: e894 0006 ldmia.w r4, {r1, r2} +10006c22: f7ff fcc7 bl 100065b4 +10006c26: 4b08 ldr r3, [pc, #32] ; (10006c48 ) +10006c28: 7818 ldrb r0, [r3, #0] +10006c2a: 602e str r6, [r5, #0] +10006c2c: b002 add sp, #8 +10006c2e: bd70 pop {r4, r5, r6, pc} +10006c30: 10000310 .word 0x10000310 +10006c34: 1004464a .word 0x1004464a +10006c38: 10044a0b .word 0x10044a0b +10006c3c: 0000f39d .word 0x0000f39d +10006c40: 40006008 .word 0x40006008 +10006c44: 40006004 .word 0x40006004 +10006c48: 40006060 .word 0x40006060 + +10006c4c : +10006c4c: b573 push {r0, r1, r4, r5, r6, lr} +10006c4e: 4b0e ldr r3, [pc, #56] ; (10006c88 ) +10006c50: 466c mov r4, sp +10006c52: 681b ldr r3, [r3, #0] +10006c54: e88d 0003 stmia.w sp, {r0, r1} +10006c58: 04db lsls r3, r3, #19 +10006c5a: d505 bpl.n 10006c68 +10006c5c: 480b ldr r0, [pc, #44] ; (10006c8c ) +10006c5e: 490c ldr r1, [pc, #48] ; (10006c90 ) +10006c60: e89d 000c ldmia.w sp, {r2, r3} +10006c64: 4d0b ldr r5, [pc, #44] ; (10006c94 ) +10006c66: 47a8 blx r5 +10006c68: 4d0b ldr r5, [pc, #44] ; (10006c98 ) +10006c6a: 4b0c ldr r3, [pc, #48] ; (10006c9c ) +10006c6c: 2600 movs r6, #0 +10006c6e: 2201 movs r2, #1 +10006c70: 602e str r6, [r5, #0] +10006c72: 601a str r2, [r3, #0] +10006c74: 2015 movs r0, #21 +10006c76: e894 0006 ldmia.w r4, {r1, r2} +10006c7a: f7ff fc9b bl 100065b4 +10006c7e: 4b08 ldr r3, [pc, #32] ; (10006ca0 ) +10006c80: 7818 ldrb r0, [r3, #0] +10006c82: 602e str r6, [r5, #0] +10006c84: b002 add sp, #8 +10006c86: bd70 pop {r4, r5, r6, pc} +10006c88: 10000310 .word 0x10000310 +10006c8c: 1004464a .word 0x1004464a +10006c90: 10044a44 .word 0x10044a44 +10006c94: 0000f39d .word 0x0000f39d +10006c98: 40006008 .word 0x40006008 +10006c9c: 40006004 .word 0x40006004 +10006ca0: 40006060 .word 0x40006060 + +10006ca4 : +10006ca4: b573 push {r0, r1, r4, r5, r6, lr} +10006ca6: 4b0e ldr r3, [pc, #56] ; (10006ce0 ) +10006ca8: 466c mov r4, sp +10006caa: 681b ldr r3, [r3, #0] +10006cac: e88d 0003 stmia.w sp, {r0, r1} +10006cb0: 04db lsls r3, r3, #19 +10006cb2: d505 bpl.n 10006cc0 +10006cb4: 480b ldr r0, [pc, #44] ; (10006ce4 ) +10006cb6: 490c ldr r1, [pc, #48] ; (10006ce8 ) +10006cb8: e89d 000c ldmia.w sp, {r2, r3} +10006cbc: 4d0b ldr r5, [pc, #44] ; (10006cec ) +10006cbe: 47a8 blx r5 +10006cc0: 4d0b ldr r5, [pc, #44] ; (10006cf0 ) +10006cc2: 4b0c ldr r3, [pc, #48] ; (10006cf4 ) +10006cc4: 2600 movs r6, #0 +10006cc6: 2201 movs r2, #1 +10006cc8: 602e str r6, [r5, #0] +10006cca: 601a str r2, [r3, #0] +10006ccc: 2005 movs r0, #5 +10006cce: e894 0006 ldmia.w r4, {r1, r2} +10006cd2: f7ff fc6f bl 100065b4 +10006cd6: 4b08 ldr r3, [pc, #32] ; (10006cf8 ) +10006cd8: 7818 ldrb r0, [r3, #0] +10006cda: 602e str r6, [r5, #0] +10006cdc: b002 add sp, #8 +10006cde: bd70 pop {r4, r5, r6, pc} +10006ce0: 10000310 .word 0x10000310 +10006ce4: 1004464a .word 0x1004464a +10006ce8: 100445f4 .word 0x100445f4 +10006cec: 0000f39d .word 0x0000f39d +10006cf0: 40006008 .word 0x40006008 +10006cf4: 40006004 .word 0x40006004 +10006cf8: 40006060 .word 0x40006060 + +10006cfc : +10006cfc: b537 push {r0, r1, r2, r4, r5, lr} +10006cfe: 4b0a ldr r3, [pc, #40] ; (10006d28 ) +10006d00: 466c mov r4, sp +10006d02: 681b ldr r3, [r3, #0] +10006d04: e88d 0003 stmia.w sp, {r0, r1} +10006d08: 04da lsls r2, r3, #19 +10006d0a: d505 bpl.n 10006d18 +10006d0c: 4807 ldr r0, [pc, #28] ; (10006d2c ) +10006d0e: 4908 ldr r1, [pc, #32] ; (10006d30 ) +10006d10: e89d 000c ldmia.w sp, {r2, r3} +10006d14: 4d07 ldr r5, [pc, #28] ; (10006d34 ) +10006d16: 47a8 blx r5 +10006d18: e894 0003 ldmia.w r4, {r0, r1} +10006d1c: f7ff ffc2 bl 10006ca4 +10006d20: 07c3 lsls r3, r0, #31 +10006d22: d4f9 bmi.n 10006d18 +10006d24: b003 add sp, #12 +10006d26: bd30 pop {r4, r5, pc} +10006d28: 10000310 .word 0x10000310 +10006d2c: 1004464a .word 0x1004464a +10006d30: 10044a25 .word 0x10044a25 +10006d34: 0000f39d .word 0x0000f39d + +10006d38 : +10006d38: b082 sub sp, #8 +10006d3a: b5f0 push {r4, r5, r6, r7, lr} +10006d3c: b085 sub sp, #20 +10006d3e: 930b str r3, [sp, #44] ; 0x2c +10006d40: 4b27 ldr r3, [pc, #156] ; (10006de0 ) +10006d42: 4615 mov r5, r2 +10006d44: 681b ldr r3, [r3, #0] +10006d46: 4606 mov r6, r0 +10006d48: 04da lsls r2, r3, #19 +10006d4a: 460c mov r4, r1 +10006d4c: d50d bpl.n 10006d6a +10006d4e: 466b mov r3, sp +10006d50: f843 5b04 str.w r5, [r3], #4 +10006d54: aa0b add r2, sp, #44 ; 0x2c +10006d56: e892 0003 ldmia.w r2, {r0, r1} +10006d5a: 4f22 ldr r7, [pc, #136] ; (10006de4 ) +10006d5c: e883 0003 stmia.w r3, {r0, r1} +10006d60: 4632 mov r2, r6 +10006d62: 4821 ldr r0, [pc, #132] ; (10006de8 ) +10006d64: 4921 ldr r1, [pc, #132] ; (10006dec ) +10006d66: 4623 mov r3, r4 +10006d68: 47b8 blx r7 +10006d6a: 4b21 ldr r3, [pc, #132] ; (10006df0 ) +10006d6c: 2200 movs r2, #0 +10006d6e: 2c0f cmp r4, #15 +10006d70: 601a str r2, [r3, #0] +10006d72: 461f mov r7, r3 +10006d74: d908 bls.n 10006d88 +10006d76: 4b1f ldr r3, [pc, #124] ; (10006df4 ) +10006d78: 681b ldr r3, [r3, #0] +10006d7a: 04db lsls r3, r3, #19 +10006d7c: d503 bpl.n 10006d86 +10006d7e: 481e ldr r0, [pc, #120] ; (10006df8 ) +10006d80: 4621 mov r1, r4 +10006d82: 4b18 ldr r3, [pc, #96] ; (10006de4 ) +10006d84: 4798 blx r3 +10006d86: 240f movs r4, #15 +10006d88: 4b1c ldr r3, [pc, #112] ; (10006dfc ) +10006d8a: 4a1d ldr r2, [pc, #116] ; (10006e00 ) +10006d8c: 601c str r4, [r3, #0] +10006d8e: 6813 ldr r3, [r2, #0] +10006d90: 3260 adds r2, #96 ; 0x60 +10006d92: f423 2370 bic.w r3, r3, #983040 ; 0xf0000 +10006d96: f423 7340 bic.w r3, r3, #768 ; 0x300 +10006d9a: f842 3c60 str.w r3, [r2, #-96] +10006d9e: 7016 strb r6, [r2, #0] +10006da0: 2300 movs r3, #0 +10006da2: b2d9 uxtb r1, r3 +10006da4: 42a1 cmp r1, r4 +10006da6: d203 bcs.n 10006db0 +10006da8: 5ce9 ldrb r1, [r5, r3] +10006daa: 3301 adds r3, #1 +10006dac: 7011 strb r1, [r2, #0] +10006dae: e7f8 b.n 10006da2 +10006db0: 2301 movs r3, #1 +10006db2: 603b str r3, [r7, #0] +10006db4: 4b13 ldr r3, [pc, #76] ; (10006e04 ) +10006db6: 4798 blx r3 +10006db8: 4b13 ldr r3, [pc, #76] ; (10006e08 ) +10006dba: 79db ldrb r3, [r3, #7] +10006dbc: 2b04 cmp r3, #4 +10006dbe: ab0b add r3, sp, #44 ; 0x2c +10006dc0: e893 0003 ldmia.w r3, {r0, r1} +10006dc4: d105 bne.n 10006dd2 +10006dc6: b005 add sp, #20 +10006dc8: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} +10006dcc: b002 add sp, #8 +10006dce: f000 b863 b.w 10006e98 +10006dd2: b005 add sp, #20 +10006dd4: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} +10006dd8: b002 add sp, #8 +10006dda: f7ff bf8f b.w 10006cfc +10006dde: bf00 nop +10006de0: 10000310 .word 0x10000310 +10006de4: 0000f39d .word 0x0000f39d +10006de8: 1004466c .word 0x1004466c +10006dec: 100445a3 .word 0x100445a3 +10006df0: 40006008 .word 0x40006008 +10006df4: 1000030c .word 0x1000030c +10006df8: 10044693 .word 0x10044693 +10006dfc: 40006118 .word 0x40006118 +10006e00: 40006000 .word 0x40006000 +10006e04: 00002ea5 .word 0x00002ea5 +10006e08: 100021ec .word 0x100021ec + +10006e0c : +10006e0c: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +10006e0e: 4b19 ldr r3, [pc, #100] ; (10006e74 ) +10006e10: ac02 add r4, sp, #8 +10006e12: 681b ldr r3, [r3, #0] +10006e14: e884 0003 stmia.w r4, {r0, r1} +10006e18: 04d8 lsls r0, r3, #19 +10006e1a: d505 bpl.n 10006e28 +10006e1c: 4816 ldr r0, [pc, #88] ; (10006e78 ) +10006e1e: 4917 ldr r1, [pc, #92] ; (10006e7c ) +10006e20: e894 000c ldmia.w r4, {r2, r3} +10006e24: 4d16 ldr r5, [pc, #88] ; (10006e80 ) +10006e26: 47a8 blx r5 +10006e28: 4b16 ldr r3, [pc, #88] ; (10006e84 ) +10006e2a: 4d17 ldr r5, [pc, #92] ; (10006e88 ) +10006e2c: 2600 movs r6, #0 +10006e2e: 2201 movs r2, #1 +10006e30: 602e str r6, [r5, #0] +10006e32: 601a str r2, [r3, #0] +10006e34: e894 0006 ldmia.w r4, {r1, r2} +10006e38: 2070 movs r0, #112 ; 0x70 +10006e3a: f7ff fbbb bl 100065b4 +10006e3e: 4b13 ldr r3, [pc, #76] ; (10006e8c ) +10006e40: 781c ldrb r4, [r3, #0] +10006e42: 602e str r6, [r5, #0] +10006e44: b2e4 uxtb r4, r4 +10006e46: 07a1 lsls r1, r4, #30 +10006e48: d510 bpl.n 10006e6c +10006e4a: 0622 lsls r2, r4, #24 +10006e4c: d506 bpl.n 10006e5c +10006e4e: 4b10 ldr r3, [pc, #64] ; (10006e90 ) +10006e50: 681b ldr r3, [r3, #0] +10006e52: 04db lsls r3, r3, #19 +10006e54: d502 bpl.n 10006e5c +10006e56: 480f ldr r0, [pc, #60] ; (10006e94 ) +10006e58: 4b09 ldr r3, [pc, #36] ; (10006e80 ) +10006e5a: 4798 blx r3 +10006e5c: 9b03 ldr r3, [sp, #12] +10006e5e: 2100 movs r1, #0 +10006e60: 9300 str r3, [sp, #0] +10006e62: 2050 movs r0, #80 ; 0x50 +10006e64: 9b02 ldr r3, [sp, #8] +10006e66: 460a mov r2, r1 +10006e68: f7ff ff66 bl 10006d38 +10006e6c: 4620 mov r0, r4 +10006e6e: b004 add sp, #16 +10006e70: bd70 pop {r4, r5, r6, pc} +10006e72: bf00 nop +10006e74: 10000310 .word 0x10000310 +10006e78: 1004464a .word 0x1004464a +10006e7c: 100445bd .word 0x100445bd +10006e80: 0000f39d .word 0x0000f39d +10006e84: 40006004 .word 0x40006004 +10006e88: 40006008 .word 0x40006008 +10006e8c: 40006060 .word 0x40006060 +10006e90: 1000030c .word 0x1000030c +10006e94: 100446cf .word 0x100446cf + +10006e98 : +10006e98: b537 push {r0, r1, r2, r4, r5, lr} +10006e9a: 4b0a ldr r3, [pc, #40] ; (10006ec4 ) +10006e9c: 466c mov r4, sp +10006e9e: 681b ldr r3, [r3, #0] +10006ea0: e88d 0003 stmia.w sp, {r0, r1} +10006ea4: 04da lsls r2, r3, #19 +10006ea6: d505 bpl.n 10006eb4 +10006ea8: 4807 ldr r0, [pc, #28] ; (10006ec8 ) +10006eaa: 4908 ldr r1, [pc, #32] ; (10006ecc ) +10006eac: e89d 000c ldmia.w sp, {r2, r3} +10006eb0: 4d07 ldr r5, [pc, #28] ; (10006ed0 ) +10006eb2: 47a8 blx r5 +10006eb4: e894 0003 ldmia.w r4, {r0, r1} +10006eb8: f7ff ffa8 bl 10006e0c +10006ebc: 0603 lsls r3, r0, #24 +10006ebe: d5f9 bpl.n 10006eb4 +10006ec0: b003 add sp, #12 +10006ec2: bd30 pop {r4, r5, pc} +10006ec4: 10000310 .word 0x10000310 +10006ec8: 1004464a .word 0x1004464a +10006ecc: 100445d6 .word 0x100445d6 +10006ed0: 0000f39d .word 0x0000f39d + +10006ed4 : +10006ed4: 4b18 ldr r3, [pc, #96] ; (10006f38 ) +10006ed6: b507 push {r0, r1, r2, lr} +10006ed8: 681b ldr r3, [r3, #0] +10006eda: 019a lsls r2, r3, #6 +10006edc: d528 bpl.n 10006f30 +10006ede: 4b17 ldr r3, [pc, #92] ; (10006f3c ) +10006ee0: 681b ldr r3, [r3, #0] +10006ee2: f3c3 1303 ubfx r3, r3, #4, #4 +10006ee6: 2b01 cmp r3, #1 +10006ee8: d922 bls.n 10006f30 +10006eea: 4b15 ldr r3, [pc, #84] ; (10006f40 ) +10006eec: 681a ldr r2, [r3, #0] +10006eee: f042 0201 orr.w r2, r2, #1 +10006ef2: 601a str r2, [r3, #0] +10006ef4: ab02 add r3, sp, #8 +10006ef6: e913 0003 ldmdb r3, {r0, r1} +10006efa: f7ff feff bl 10006cfc +10006efe: 4b11 ldr r3, [pc, #68] ; (10006f44 ) +10006f00: 681b ldr r3, [r3, #0] +10006f02: 005b lsls r3, r3, #1 +10006f04: d502 bpl.n 10006f0c +10006f06: 4810 ldr r0, [pc, #64] ; (10006f48 ) +10006f08: 4b10 ldr r3, [pc, #64] ; (10006f4c ) +10006f0a: 4798 blx r3 +10006f0c: 4a10 ldr r2, [pc, #64] ; (10006f50 ) +10006f0e: 4911 ldr r1, [pc, #68] ; (10006f54 ) +10006f10: 2300 movs r3, #0 +10006f12: 6013 str r3, [r2, #0] +10006f14: 680b ldr r3, [r1, #0] +10006f16: 2014 movs r0, #20 +10006f18: f423 2370 bic.w r3, r3, #983040 ; 0xf0000 +10006f1c: f423 7340 bic.w r3, r3, #768 ; 0x300 +10006f20: 600b str r3, [r1, #0] +10006f22: 4b0d ldr r3, [pc, #52] ; (10006f58 ) +10006f24: 21b9 movs r1, #185 ; 0xb9 +10006f26: 7019 strb r1, [r3, #0] +10006f28: 2301 movs r3, #1 +10006f2a: 6013 str r3, [r2, #0] +10006f2c: 4b0b ldr r3, [pc, #44] ; (10006f5c ) +10006f2e: 4798 blx r3 +10006f30: b003 add sp, #12 +10006f32: f85d fb04 ldr.w pc, [sp], #4 +10006f36: bf00 nop +10006f38: 40000038 .word 0x40000038 +10006f3c: 400001f0 .word 0x400001f0 +10006f40: 400002c0 .word 0x400002c0 +10006f44: 10000314 .word 0x10000314 +10006f48: 10044707 .word 0x10044707 +10006f4c: 0000f39d .word 0x0000f39d +10006f50: 40006008 .word 0x40006008 +10006f54: 40006000 .word 0x40006000 +10006f58: 40006060 .word 0x40006060 +10006f5c: 00000899 .word 0x00000899 + +10006f60 : +10006f60: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10006f64: b087 sub sp, #28 +10006f66: ae02 add r6, sp, #8 +10006f68: e886 0006 stmia.w r6, {r1, r2} +10006f6c: 4605 mov r5, r0 +10006f6e: 2200 movs r2, #0 +10006f70: 9810 ldr r0, [sp, #64] ; 0x40 +10006f72: 9204 str r2, [sp, #16] +10006f74: 9205 str r2, [sp, #20] +10006f76: f013 02ff ands.w r2, r3, #255 ; 0xff +10006f7a: 6801 ldr r1, [r0, #0] +10006f7c: d007 beq.n 10006f8e +10006f7e: 29ff cmp r1, #255 ; 0xff +10006f80: d802 bhi.n 10006f88 +10006f82: 188c adds r4, r1, r2 +10006f84: 2cff cmp r4, #255 ; 0xff +10006f86: d909 bls.n 10006f9c +10006f88: f5c2 7280 rsb r2, r2, #256 ; 0x100 +10006f8c: e007 b.n 10006f9e +10006f8e: f5b1 7f80 cmp.w r1, #256 ; 0x100 +10006f92: bf34 ite cc +10006f94: 460a movcc r2, r1 +10006f96: f44f 7280 movcs.w r2, #256 ; 0x100 +10006f9a: e000 b.n 10006f9e +10006f9c: 460a mov r2, r1 +10006f9e: 1a89 subs r1, r1, r2 +10006fa0: f013 0a03 ands.w sl, r3, #3 +10006fa4: 6001 str r1, [r0, #0] +10006fa6: d01c beq.n 10006fe2 +10006fa8: fa5f f08a uxtb.w r0, sl +10006fac: 1a1b subs r3, r3, r0 +10006fae: f103 4118 add.w r1, r3, #2550136832 ; 0x98000000 +10006fb2: 6809 ldr r1, [r1, #0] +10006fb4: ac06 add r4, sp, #24 +10006fb6: f844 1d08 str.w r1, [r4, #-8]! +10006fba: f1c0 0a04 rsb sl, r0, #4 +10006fbe: 4420 add r0, r4 +10006fc0: fa5f fa8a uxtb.w sl, sl +10006fc4: 4629 mov r1, r5 +10006fc6: 3801 subs r0, #1 +10006fc8: 4614 mov r4, r2 +10006fca: f811 7b01 ldrb.w r7, [r1], #1 +10006fce: 3c01 subs r4, #1 +10006fd0: f800 7f01 strb.w r7, [r0, #1]! +10006fd4: 468b mov fp, r1 +10006fd6: d013 beq.n 10007000 +10006fd8: 1b17 subs r7, r2, r4 +10006fda: b2ff uxtb r7, r7 +10006fdc: 4557 cmp r7, sl +10006fde: d3f4 bcc.n 10006fca +10006fe0: e00e b.n 10007000 +10006fe2: 2a03 cmp r2, #3 +10006fe4: d90a bls.n 10006ffc +10006fe6: 78a9 ldrb r1, [r5, #2] +10006fe8: 7868 ldrb r0, [r5, #1] +10006fea: 0409 lsls r1, r1, #16 +10006fec: ea41 2100 orr.w r1, r1, r0, lsl #8 +10006ff0: 7828 ldrb r0, [r5, #0] +10006ff2: 4301 orrs r1, r0 +10006ff4: 78e8 ldrb r0, [r5, #3] +10006ff6: ea41 6100 orr.w r1, r1, r0, lsl #24 +10006ffa: 9104 str r1, [sp, #16] +10006ffc: 46ab mov fp, r5 +10006ffe: 4614 mov r4, r2 +10007000: f014 0103 ands.w r1, r4, #3 +10007004: d01f beq.n 10007046 +10007006: 191a adds r2, r3, r4 +10007008: b2c9 uxtb r1, r1 +1000700a: f102 4218 add.w r2, r2, #2550136832 ; 0x98000000 +1000700e: f1ba 0f00 cmp.w sl, #0 +10007012: d000 beq.n 10007016 +10007014: 3204 adds r2, #4 +10007016: 1a52 subs r2, r2, r1 +10007018: 6812 ldr r2, [r2, #0] +1000701a: 2000 movs r0, #0 +1000701c: 9205 str r2, [sp, #20] +1000701e: 1a62 subs r2, r4, r1 +10007020: 4493 add fp, r2 +10007022: b2c2 uxtb r2, r0 +10007024: 428a cmp r2, r1 +10007026: d205 bcs.n 10007034 +10007028: f81b 7000 ldrb.w r7, [fp, r0] +1000702c: aa05 add r2, sp, #20 +1000702e: 5487 strb r7, [r0, r2] +10007030: 3001 adds r0, #1 +10007032: e7f6 b.n 10007022 +10007034: 448b add fp, r1 +10007036: f1ba 0f00 cmp.w sl, #0 +1000703a: d104 bne.n 10007046 +1000703c: 2c03 cmp r4, #3 +1000703e: d802 bhi.n 10007046 +10007040: 9a05 ldr r2, [sp, #20] +10007042: 4654 mov r4, sl +10007044: 9204 str r2, [sp, #16] +10007046: ea4f 6803 mov.w r8, r3, lsl #24 +1000704a: f3c3 4207 ubfx r2, r3, #16, #8 +1000704e: f048 0802 orr.w r8, r8, #2 +10007052: ea48 2802 orr.w r8, r8, r2, lsl #8 +10007056: f3c3 2307 ubfx r3, r3, #8, #8 +1000705a: 4f48 ldr r7, [pc, #288] ; (1000717c ) +1000705c: ea48 4803 orr.w r8, r8, r3, lsl #16 +10007060: 9b03 ldr r3, [sp, #12] +10007062: 2100 movs r1, #0 +10007064: f8d7 9000 ldr.w r9, [r7] +10007068: 460a mov r2, r1 +1000706a: 9300 str r3, [sp, #0] +1000706c: 2006 movs r0, #6 +1000706e: 9b02 ldr r3, [sp, #8] +10007070: f7ff fe62 bl 10006d38 +10007074: 4a42 ldr r2, [pc, #264] ; (10007180 ) +10007076: 2300 movs r3, #0 +10007078: 6013 str r3, [r2, #0] +1000707a: 4b42 ldr r3, [pc, #264] ; (10007184 ) +1000707c: 6819 ldr r1, [r3, #0] +1000707e: f421 7140 bic.w r1, r1, #768 ; 0x300 +10007082: 6019 str r1, [r3, #0] +10007084: 2303 movs r3, #3 +10007086: 603b str r3, [r7, #0] +10007088: 4b3f ldr r3, [pc, #252] ; (10007188 ) +1000708a: f8c3 8000 str.w r8, [r3] +1000708e: 9904 ldr r1, [sp, #16] +10007090: 46b8 mov r8, r7 +10007092: 6019 str r1, [r3, #0] +10007094: 4617 mov r7, r2 +10007096: 469e mov lr, r3 +10007098: f1ba 0f00 cmp.w sl, #0 +1000709c: d105 bne.n 100070aa +1000709e: 2c03 cmp r4, #3 +100070a0: d905 bls.n 100070ae +100070a2: f105 0b04 add.w fp, r5, #4 +100070a6: 3c04 subs r4, #4 +100070a8: e001 b.n 100070ae +100070aa: eb05 0b0a add.w fp, r5, sl +100070ae: 465a mov r2, fp +100070b0: f10b 0104 add.w r1, fp, #4 +100070b4: f10b 0518 add.w r5, fp, #24 +100070b8: 2c04 cmp r4, #4 +100070ba: 4613 mov r3, r2 +100070bc: d921 bls.n 10007102 +100070be: f012 0f03 tst.w r2, #3 +100070c2: f1a4 0404 sub.w r4, r4, #4 +100070c6: d010 beq.n 100070ea +100070c8: 7893 ldrb r3, [r2, #2] +100070ca: 7850 ldrb r0, [r2, #1] +100070cc: 041b lsls r3, r3, #16 +100070ce: ea43 2300 orr.w r3, r3, r0, lsl #8 +100070d2: f811 0c04 ldrb.w r0, [r1, #-4] +100070d6: 4303 orrs r3, r0 +100070d8: 78d0 ldrb r0, [r2, #3] +100070da: ea43 6300 orr.w r3, r3, r0, lsl #24 +100070de: 9304 str r3, [sp, #16] +100070e0: 4620 mov r0, r4 +100070e2: f8ce 3000 str.w r3, [lr] +100070e6: 460b mov r3, r1 +100070e8: e005 b.n 100070f6 +100070ea: f851 0c04 ldr.w r0, [r1, #-4] +100070ee: 460b mov r3, r1 +100070f0: f8ce 0000 str.w r0, [lr] +100070f4: 4620 mov r0, r4 +100070f6: 3204 adds r2, #4 +100070f8: 42aa cmp r2, r5 +100070fa: f101 0104 add.w r1, r1, #4 +100070fe: d1db bne.n 100070b8 +10007100: e000 b.n 10007104 +10007102: 4620 mov r0, r4 +10007104: 2201 movs r2, #1 +10007106: f013 0f03 tst.w r3, #3 +1000710a: 603a str r2, [r7, #0] +1000710c: eb03 0200 add.w r2, r3, r0 +10007110: d012 beq.n 10007138 +10007112: 1ad1 subs r1, r2, r3 +10007114: 2903 cmp r1, #3 +10007116: d917 bls.n 10007148 +10007118: 7899 ldrb r1, [r3, #2] +1000711a: 785c ldrb r4, [r3, #1] +1000711c: 0409 lsls r1, r1, #16 +1000711e: ea41 2104 orr.w r1, r1, r4, lsl #8 +10007122: 781c ldrb r4, [r3, #0] +10007124: 3304 adds r3, #4 +10007126: 4321 orrs r1, r4 +10007128: f813 4c01 ldrb.w r4, [r3, #-1] +1000712c: ea41 6104 orr.w r1, r1, r4, lsl #24 +10007130: 9104 str r1, [sp, #16] +10007132: f8ce 1000 str.w r1, [lr] +10007136: e7ec b.n 10007112 +10007138: 1ad1 subs r1, r2, r3 +1000713a: 2903 cmp r1, #3 +1000713c: d904 bls.n 10007148 +1000713e: f853 1b04 ldr.w r1, [r3], #4 +10007142: f8ce 1000 str.w r1, [lr] +10007146: e7f7 b.n 10007138 +10007148: f000 0003 and.w r0, r0, #3 +1000714c: b110 cbz r0, 10007154 +1000714e: 9b05 ldr r3, [sp, #20] +10007150: f8ce 3000 str.w r3, [lr] +10007154: 4b0d ldr r3, [pc, #52] ; (1000718c ) +10007156: 4798 blx r3 +10007158: e896 0003 ldmia.w r6, {r0, r1} +1000715c: f89d 300f ldrb.w r3, [sp, #15] +10007160: 2b04 cmp r3, #4 +10007162: d102 bne.n 1000716a +10007164: f7ff fe98 bl 10006e98 +10007168: e001 b.n 1000716e +1000716a: f7ff fdc7 bl 10006cfc +1000716e: 2300 movs r3, #0 +10007170: 603b str r3, [r7, #0] +10007172: f8c8 9000 str.w r9, [r8] +10007176: b007 add sp, #28 +10007178: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1000717c: 40006118 .word 0x40006118 +10007180: 40006008 .word 0x40006008 +10007184: 40006000 .word 0x40006000 +10007188: 40006060 .word 0x40006060 +1000718c: 00002ea5 .word 0x00002ea5 + +10007190 : +10007190: b507 push {r0, r1, r2, lr} +10007192: ab02 add r3, sp, #8 +10007194: e913 0003 ldmdb r3, {r0, r1} +10007198: f7ff fdb0 bl 10006cfc +1000719c: 2001 movs r0, #1 +1000719e: b003 add sp, #12 +100071a0: f85d fb04 ldr.w pc, [sp], #4 + +100071a4 : +100071a4: e92d 41d0 stmdb sp!, {r4, r6, r7, r8, lr} +100071a8: b085 sub sp, #20 +100071aa: ac02 add r4, sp, #8 +100071ac: 4680 mov r8, r0 +100071ae: 460f mov r7, r1 +100071b0: e894 0003 ldmia.w r4, {r0, r1} +100071b4: 4616 mov r6, r2 +100071b6: f7ff fda1 bl 10006cfc +100071ba: 4b1b ldr r3, [pc, #108] ; (10007228 ) +100071bc: 681b ldr r3, [r3, #0] +100071be: 005a lsls r2, r3, #1 +100071c0: d502 bpl.n 100071c8 +100071c2: 481a ldr r0, [pc, #104] ; (1000722c ) +100071c4: 4b1a ldr r3, [pc, #104] ; (10007230 ) +100071c6: 4798 blx r3 +100071c8: e894 0003 ldmia.w r4, {r0, r1} +100071cc: f7ff fd6a bl 10006ca4 +100071d0: 9b03 ldr r3, [sp, #12] +100071d2: f000 0002 and.w r0, r0, #2 +100071d6: 9300 str r3, [sp, #0] +100071d8: f000 01ff and.w r1, r0, #255 ; 0xff +100071dc: 9b02 ldr r3, [sp, #8] +100071de: b920 cbnz r0, 100071ea +100071e0: 2006 movs r0, #6 +100071e2: 460a mov r2, r1 +100071e4: f7ff fda8 bl 10006d38 +100071e8: e7ee b.n 100071c8 +100071ea: 4640 mov r0, r8 +100071ec: 4639 mov r1, r7 +100071ee: 4632 mov r2, r6 +100071f0: f7ff fda2 bl 10006d38 +100071f4: 4b0f ldr r3, [pc, #60] ; (10007234 ) +100071f6: 79db ldrb r3, [r3, #7] +100071f8: 2b04 cmp r3, #4 +100071fa: d104 bne.n 10007206 +100071fc: e894 0003 ldmia.w r4, {r0, r1} +10007200: f7ff fe4a bl 10006e98 +10007204: e00c b.n 10007220 +10007206: 2b05 cmp r3, #5 +10007208: d104 bne.n 10007214 +1000720a: e894 0003 ldmia.w r4, {r0, r1} +1000720e: f7ff fd75 bl 10006cfc +10007212: e005 b.n 10007220 +10007214: e894 0003 ldmia.w r4, {r0, r1} +10007218: f7ff fd44 bl 10006ca4 +1000721c: 0783 lsls r3, r0, #30 +1000721e: d4f9 bmi.n 10007214 +10007220: b005 add sp, #20 +10007222: e8bd 81d0 ldmia.w sp!, {r4, r6, r7, r8, pc} +10007226: bf00 nop +10007228: 10000314 .word 0x10000314 +1000722c: 100429b2 .word 0x100429b2 +10007230: 0000f39d .word 0x0000f39d +10007234: 100021ec .word 0x100021ec + +10007238 : +10007238: 2100 movs r1, #0 +1000723a: 20c7 movs r0, #199 ; 0xc7 +1000723c: 460a mov r2, r1 +1000723e: f7ff bfb1 b.w 100071a4 + +10007242 : +10007242: b507 push {r0, r1, r2, lr} +10007244: 0c03 lsrs r3, r0, #16 +10007246: f88d 3004 strb.w r3, [sp, #4] +1000724a: f88d 0006 strb.w r0, [sp, #6] +1000724e: 0a03 lsrs r3, r0, #8 +10007250: 2103 movs r1, #3 +10007252: 20c4 movs r0, #196 ; 0xc4 +10007254: aa01 add r2, sp, #4 +10007256: f88d 3005 strb.w r3, [sp, #5] +1000725a: f7ff ffa3 bl 100071a4 +1000725e: b003 add sp, #12 +10007260: f85d fb04 ldr.w pc, [sp], #4 + +10007264 : +10007264: b507 push {r0, r1, r2, lr} +10007266: 0c03 lsrs r3, r0, #16 +10007268: f88d 3004 strb.w r3, [sp, #4] +1000726c: f88d 0006 strb.w r0, [sp, #6] +10007270: 0a03 lsrs r3, r0, #8 +10007272: 2103 movs r1, #3 +10007274: 20d8 movs r0, #216 ; 0xd8 +10007276: aa01 add r2, sp, #4 +10007278: f88d 3005 strb.w r3, [sp, #5] +1000727c: f7ff ff92 bl 100071a4 +10007280: b003 add sp, #12 +10007282: f85d fb04 ldr.w pc, [sp], #4 + +10007286 : +10007286: b507 push {r0, r1, r2, lr} +10007288: 0c03 lsrs r3, r0, #16 +1000728a: f88d 3004 strb.w r3, [sp, #4] +1000728e: f88d 0006 strb.w r0, [sp, #6] +10007292: 0a03 lsrs r3, r0, #8 +10007294: 2103 movs r1, #3 +10007296: 2020 movs r0, #32 +10007298: aa01 add r2, sp, #4 +1000729a: f88d 3005 strb.w r3, [sp, #5] +1000729e: f7ff ff81 bl 100071a4 +100072a2: b003 add sp, #12 +100072a4: f85d fb04 ldr.w pc, [sp], #4 + +100072a8 : +100072a8: b51f push {r0, r1, r2, r3, r4, lr} +100072aa: ab01 add r3, sp, #4 +100072ac: e883 0006 stmia.w r3, {r1, r2} +100072b0: 9003 str r0, [sp, #12] +100072b2: 2101 movs r1, #1 +100072b4: 20c5 movs r0, #197 ; 0xc5 +100072b6: aa03 add r2, sp, #12 +100072b8: f7ff ff74 bl 100071a4 +100072bc: b005 add sp, #20 +100072be: f85d fb04 ldr.w pc, [sp], #4 + +100072c2 : +100072c2: b51f push {r0, r1, r2, r3, r4, lr} +100072c4: 4b0a ldr r3, [pc, #40] ; (100072f0 ) +100072c6: f88d 000c strb.w r0, [sp, #12] +100072ca: 79db ldrb r3, [r3, #7] +100072cc: 0a00 lsrs r0, r0, #8 +100072ce: 3b02 subs r3, #2 +100072d0: 2b01 cmp r3, #1 +100072d2: f88d 000d strb.w r0, [sp, #13] +100072d6: f04f 0001 mov.w r0, #1 +100072da: e88d 0006 stmia.w sp, {r1, r2} +100072de: bf94 ite ls +100072e0: 2102 movls r1, #2 +100072e2: 4601 movhi r1, r0 +100072e4: aa03 add r2, sp, #12 +100072e6: f7ff ff5d bl 100071a4 +100072ea: b005 add sp, #20 +100072ec: f85d fb04 ldr.w pc, [sp], #4 +100072f0: 100021ec .word 0x100021ec + +100072f4 : +100072f4: b537 push {r0, r1, r2, r4, r5, lr} +100072f6: 4605 mov r5, r0 +100072f8: e89d 0003 ldmia.w sp, {r0, r1} +100072fc: 466c mov r4, sp +100072fe: f7ff fcd1 bl 10006ca4 +10007302: b11d cbz r5, 1000730c +10007304: f040 001c orr.w r0, r0, #28 +10007308: b2c0 uxtb r0, r0 +1000730a: e001 b.n 10007310 +1000730c: f000 00e3 and.w r0, r0, #227 ; 0xe3 +10007310: e894 0006 ldmia.w r4, {r1, r2} +10007314: f7ff ffd5 bl 100072c2 +10007318: b003 add sp, #12 +1000731a: bd30 pop {r4, r5, pc} + +1000731c : +1000731c: 4b02 ldr r3, [pc, #8] ; (10007328 ) +1000731e: 681a ldr r2, [r3, #0] +10007320: f022 0201 bic.w r2, r2, #1 +10007324: 601a str r2, [r3, #0] +10007326: 4770 bx lr +10007328: 400002c0 .word 0x400002c0 + +1000732c : +1000732c: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} +10007330: 4e36 ldr r6, [pc, #216] ; (1000740c ) +10007332: 4b37 ldr r3, [pc, #220] ; (10007410 ) +10007334: 2406 movs r4, #6 +10007336: 4a37 ldr r2, [pc, #220] ; (10007414 ) +10007338: fb04 1400 mla r4, r4, r0, r1 +1000733c: f8d6 9000 ldr.w r9, [r6] +10007340: 4688 mov r8, r1 +10007342: 681b ldr r3, [r3, #0] +10007344: 6811 ldr r1, [r2, #0] +10007346: 4607 mov r7, r0 +10007348: 2902 cmp r1, #2 +1000734a: f3c3 1302 ubfx r3, r3, #4, #3 +1000734e: ea4f 0ac4 mov.w sl, r4, lsl #3 +10007352: d101 bne.n 10007358 +10007354: 2b00 cmp r3, #0 +10007356: d048 beq.n 100073ea +10007358: 6812 ldr r2, [r2, #0] +1000735a: 2a01 cmp r2, #1 +1000735c: d101 bne.n 10007362 +1000735e: 2b01 cmp r3, #1 +10007360: d043 beq.n 100073ea +10007362: 2500 movs r5, #0 +10007364: 4b2c ldr r3, [pc, #176] ; (10007418 ) +10007366: f853 2034 ldr.w r2, [r3, r4, lsl #3] +1000736a: 1c51 adds r1, r2, #1 +1000736c: 9203 str r2, [sp, #12] +1000736e: d033 beq.n 100073d8 +10007370: 3304 adds r3, #4 +10007372: f853 3034 ldr.w r3, [r3, r4, lsl #3] +10007376: ea83 0102 eor.w r1, r3, r2 +1000737a: 3101 adds r1, #1 +1000737c: d122 bne.n 100073c4 +1000737e: 2206 movs r2, #6 +10007380: fb02 8207 mla r2, r2, r7, r8 +10007384: 4b25 ldr r3, [pc, #148] ; (1000741c ) +10007386: f89d 100c ldrb.w r1, [sp, #12] +1000738a: eb03 04c2 add.w r4, r3, r2, lsl #3 +1000738e: f803 1032 strb.w r1, [r3, r2, lsl #3] +10007392: f89d 100d ldrb.w r1, [sp, #13] +10007396: 7061 strb r1, [r4, #1] +10007398: f89d 100e ldrb.w r1, [sp, #14] +1000739c: 70a1 strb r1, [r4, #2] +1000739e: f89d 100f ldrb.w r1, [sp, #15] +100073a2: 70e1 strb r1, [r4, #3] +100073a4: 491e ldr r1, [pc, #120] ; (10007420 ) +100073a6: 6809 ldr r1, [r1, #0] +100073a8: 04c8 lsls r0, r1, #19 +100073aa: d515 bpl.n 100073d8 +100073ac: f813 3032 ldrb.w r3, [r3, r2, lsl #3] +100073b0: 7862 ldrb r2, [r4, #1] +100073b2: 4639 mov r1, r7 +100073b4: 9200 str r2, [sp, #0] +100073b6: 78a2 ldrb r2, [r4, #2] +100073b8: 481a ldr r0, [pc, #104] ; (10007424 ) +100073ba: 9201 str r2, [sp, #4] +100073bc: 4c1a ldr r4, [pc, #104] ; (10007428 ) +100073be: 4642 mov r2, r8 +100073c0: 47a0 blx r4 +100073c2: e009 b.n 100073d8 +100073c4: 4919 ldr r1, [pc, #100] ; (1000742c ) +100073c6: 6809 ldr r1, [r1, #0] +100073c8: 04c9 lsls r1, r1, #19 +100073ca: d505 bpl.n 100073d8 +100073cc: f50a 4110 add.w r1, sl, #36864 ; 0x9000 +100073d0: 4817 ldr r0, [pc, #92] ; (10007430 ) +100073d2: 3180 adds r1, #128 ; 0x80 +100073d4: 4c14 ldr r4, [pc, #80] ; (10007428 ) +100073d6: 47a0 blx r4 +100073d8: b1ad cbz r5, 10007406 +100073da: 4b16 ldr r3, [pc, #88] ; (10007434 ) +100073dc: 2200 movs r2, #0 +100073de: 601a str r2, [r3, #0] +100073e0: 2201 movs r2, #1 +100073e2: f8c6 9000 str.w r9, [r6] +100073e6: 601a str r2, [r3, #0] +100073e8: e00d b.n 10007406 +100073ea: 4a12 ldr r2, [pc, #72] ; (10007434 ) +100073ec: 2300 movs r3, #0 +100073ee: 6013 str r3, [r2, #0] +100073f0: 6833 ldr r3, [r6, #0] +100073f2: 2501 movs r5, #1 +100073f4: f443 7300 orr.w r3, r3, #512 ; 0x200 +100073f8: f043 0302 orr.w r3, r3, #2 +100073fc: 6033 str r3, [r6, #0] +100073fe: 6015 str r5, [r2, #0] +10007400: 4b0d ldr r3, [pc, #52] ; (10007438 ) +10007402: 4798 blx r3 +10007404: e7ae b.n 10007364 +10007406: b004 add sp, #16 +10007408: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1000740c: 40006120 .word 0x40006120 +10007410: 40000014 .word 0x40000014 +10007414: 40006014 .word 0x40006014 +10007418: 98009080 .word 0x98009080 +1000741c: 100021ec .word 0x100021ec +10007420: 10000310 .word 0x10000310 +10007424: 10044719 .word 0x10044719 +10007428: 0000f39d .word 0x0000f39d +1000742c: 1000030c .word 0x1000030c +10007430: 1004478f .word 0x1004478f +10007434: 40006008 .word 0x40006008 +10007438: 00002ea5 .word 0x00002ea5 + +1000743c : +1000743c: b538 push {r3, r4, r5, lr} +1000743e: 2500 movs r5, #0 +10007440: 2400 movs r4, #0 +10007442: b2e1 uxtb r1, r4 +10007444: 4628 mov r0, r5 +10007446: 3401 adds r4, #1 +10007448: f7ff ff70 bl 1000732c +1000744c: 2c06 cmp r4, #6 +1000744e: d1f8 bne.n 10007442 +10007450: 3501 adds r5, #1 +10007452: b2ed uxtb r5, r5 +10007454: 2d03 cmp r5, #3 +10007456: d1f3 bne.n 10007440 +10007458: bd38 pop {r3, r4, r5, pc} + +1000745a : +1000745a: 2306 movs r3, #6 +1000745c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10007460: fb03 1300 mla r3, r3, r0, r1 +10007464: 4f49 ldr r7, [pc, #292] ; (1000758c ) +10007466: b087 sub sp, #28 +10007468: eb07 03c3 add.w r3, r7, r3, lsl #3 +1000746c: 791b ldrb r3, [r3, #4] +1000746e: 4606 mov r6, r0 +10007470: 460d mov r5, r1 +10007472: b90b cbnz r3, 10007478 +10007474: f7ff f9b6 bl 100067e4 +10007478: 4b45 ldr r3, [pc, #276] ; (10007590 ) +1000747a: 681a ldr r2, [r3, #0] +1000747c: 04d0 lsls r0, r2, #19 +1000747e: d504 bpl.n 1000748a +10007480: 4844 ldr r0, [pc, #272] ; (10007594 ) +10007482: 4631 mov r1, r6 +10007484: 462a mov r2, r5 +10007486: 4b44 ldr r3, [pc, #272] ; (10007598 ) +10007488: 4798 blx r3 +1000748a: 2406 movs r4, #6 +1000748c: fb04 5406 mla r4, r4, r6, r5 +10007490: f8df 9118 ldr.w r9, [pc, #280] ; 100075ac +10007494: ea4f 08c4 mov.w r8, r4, lsl #3 +10007498: f859 2034 ldr.w r2, [r9, r4, lsl #3] +1000749c: 1c51 adds r1, r2, #1 +1000749e: 9203 str r2, [sp, #12] +100074a0: d167 bne.n 10007572 +100074a2: f817 3034 ldrb.w r3, [r7, r4, lsl #3] +100074a6: f10d 0b10 add.w fp, sp, #16 +100074aa: f88d 300c strb.w r3, [sp, #12] +100074ae: eb07 0308 add.w r3, r7, r8 +100074b2: 785a ldrb r2, [r3, #1] +100074b4: e89b 0003 ldmia.w fp, {r0, r1} +100074b8: f88d 200d strb.w r2, [sp, #13] +100074bc: 789a ldrb r2, [r3, #2] +100074be: f88d 200e strb.w r2, [sp, #14] +100074c2: 78da ldrb r2, [r3, #3] +100074c4: f88d 200f strb.w r2, [sp, #15] +100074c8: 9a03 ldr r2, [sp, #12] +100074ca: f849 2034 str.w r2, [r9, r4, lsl #3] +100074ce: 79db ldrb r3, [r3, #7] +100074d0: 2b04 cmp r3, #4 +100074d2: d102 bne.n 100074da +100074d4: f7ff fce0 bl 10006e98 +100074d8: e001 b.n 100074de +100074da: f7ff fc0f bl 10006cfc +100074de: e89b 0003 ldmia.w fp, {r0, r1} +100074e2: 9a03 ldr r2, [sp, #12] +100074e4: f8df a0c8 ldr.w sl, [pc, #200] ; 100075b0 +100074e8: 43d2 mvns r2, r2 +100074ea: f84a 2034 str.w r2, [sl, r4, lsl #3] +100074ee: 2206 movs r2, #6 +100074f0: fb02 5206 mla r2, r2, r6, r5 +100074f4: eb07 02c2 add.w r2, r7, r2, lsl #3 +100074f8: 79d2 ldrb r2, [r2, #7] +100074fa: 2a04 cmp r2, #4 +100074fc: d102 bne.n 10007504 +100074fe: f7ff fccb bl 10006e98 +10007502: e001 b.n 10007508 +10007504: f7ff fbfa bl 10006cfc +10007508: 4a21 ldr r2, [pc, #132] ; (10007590 ) +1000750a: 6813 ldr r3, [r2, #0] +1000750c: 04db lsls r3, r3, #19 +1000750e: d50f bpl.n 10007530 +10007510: 2206 movs r2, #6 +10007512: fb02 5206 mla r2, r2, r6, r5 +10007516: f817 3032 ldrb.w r3, [r7, r2, lsl #3] +1000751a: eb07 07c2 add.w r7, r7, r2, lsl #3 +1000751e: 787a ldrb r2, [r7, #1] +10007520: 481e ldr r0, [pc, #120] ; (1000759c ) +10007522: 9200 str r2, [sp, #0] +10007524: 78ba ldrb r2, [r7, #2] +10007526: 4631 mov r1, r6 +10007528: 9201 str r2, [sp, #4] +1000752a: 462a mov r2, r5 +1000752c: 4d1a ldr r5, [pc, #104] ; (10007598 ) +1000752e: 47a8 blx r5 +10007530: f859 3034 ldr.w r3, [r9, r4, lsl #3] +10007534: 9a03 ldr r2, [sp, #12] +10007536: 4293 cmp r3, r2 +10007538: d009 beq.n 1000754e +1000753a: 4b19 ldr r3, [pc, #100] ; (100075a0 ) +1000753c: 681b ldr r3, [r3, #0] +1000753e: 04d8 lsls r0, r3, #19 +10007540: d505 bpl.n 1000754e +10007542: f859 3034 ldr.w r3, [r9, r4, lsl #3] +10007546: 4817 ldr r0, [pc, #92] ; (100075a4 ) +10007548: 4641 mov r1, r8 +1000754a: 4d13 ldr r5, [pc, #76] ; (10007598 ) +1000754c: 47a8 blx r5 +1000754e: 9a03 ldr r2, [sp, #12] +10007550: f85a 3034 ldr.w r3, [sl, r4, lsl #3] +10007554: 43d2 mvns r2, r2 +10007556: 4293 cmp r3, r2 +10007558: d015 beq.n 10007586 +1000755a: 4b11 ldr r3, [pc, #68] ; (100075a0 ) +1000755c: 681b ldr r3, [r3, #0] +1000755e: 04d9 lsls r1, r3, #19 +10007560: d511 bpl.n 10007586 +10007562: f85a 3034 ldr.w r3, [sl, r4, lsl #3] +10007566: f108 0104 add.w r1, r8, #4 +1000756a: 4c0b ldr r4, [pc, #44] ; (10007598 ) +1000756c: 480d ldr r0, [pc, #52] ; (100075a4 ) +1000756e: 47a0 blx r4 +10007570: e009 b.n 10007586 +10007572: 4b0b ldr r3, [pc, #44] ; (100075a0 ) +10007574: 681b ldr r3, [r3, #0] +10007576: 04db lsls r3, r3, #19 +10007578: d505 bpl.n 10007586 +1000757a: f508 4110 add.w r1, r8, #36864 ; 0x9000 +1000757e: 480a ldr r0, [pc, #40] ; (100075a8 ) +10007580: 3180 adds r1, #128 ; 0x80 +10007582: 4b05 ldr r3, [pc, #20] ; (10007598 ) +10007584: 4798 blx r3 +10007586: b007 add sp, #28 +10007588: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1000758c: 100021ec .word 0x100021ec +10007590: 10000310 .word 0x10000310 +10007594: 100447d9 .word 0x100447d9 +10007598: 0000f39d .word 0x0000f39d +1000759c: 1004480e .word 0x1004480e +100075a0: 10000314 .word 0x10000314 +100075a4: 10044885 .word 0x10044885 +100075a8: 100448c5 .word 0x100448c5 +100075ac: 98009080 .word 0x98009080 +100075b0: 98009084 .word 0x98009084 + +100075b4 : +100075b4: 4b88 ldr r3, [pc, #544] ; (100077d8 ) +100075b6: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100075ba: 681b ldr r3, [r3, #0] +100075bc: b08d sub sp, #52 ; 0x34 +100075be: f3c3 1b02 ubfx fp, r3, #4, #3 +100075c2: f1bb 0f00 cmp.w fp, #0 +100075c6: bf0c ite eq +100075c8: 2202 moveq r2, #2 +100075ca: 2201 movne r2, #1 +100075cc: 9207 str r2, [sp, #28] +100075ce: 2206 movs r2, #6 +100075d0: fb02 b200 mla r2, r2, r0, fp +100075d4: 4b81 ldr r3, [pc, #516] ; (100077dc ) +100075d6: 9006 str r0, [sp, #24] +100075d8: eb03 02c2 add.w r2, r3, r2, lsl #3 +100075dc: 78d2 ldrb r2, [r2, #3] +100075de: 460d mov r5, r1 +100075e0: b912 cbnz r2, 100075e8 +100075e2: 4659 mov r1, fp +100075e4: f7ff fea2 bl 1000732c +100075e8: 9b06 ldr r3, [sp, #24] +100075ea: 2206 movs r2, #6 +100075ec: fb02 b203 mla r2, r2, r3, fp +100075f0: 487a ldr r0, [pc, #488] ; (100077dc ) +100075f2: eb00 03c2 add.w r3, r0, r2, lsl #3 +100075f6: 78d9 ldrb r1, [r3, #3] +100075f8: b939 cbnz r1, 1000760a +100075fa: 4b79 ldr r3, [pc, #484] ; (100077e0 ) +100075fc: 681b ldr r3, [r3, #0] +100075fe: 005a lsls r2, r3, #1 +10007600: d525 bpl.n 1000764e +10007602: 4b78 ldr r3, [pc, #480] ; (100077e4 ) +10007604: 4878 ldr r0, [pc, #480] ; (100077e8 ) +10007606: 4798 blx r3 +10007608: e021 b.n 1000764e +1000760a: 4978 ldr r1, [pc, #480] ; (100077ec ) +1000760c: 2000 movs r0, #0 +1000760e: 6008 str r0, [r1, #0] +10007610: 4872 ldr r0, [pc, #456] ; (100077dc ) +10007612: f810 0032 ldrb.w r0, [r0, r2, lsl #3] +10007616: 4a76 ldr r2, [pc, #472] ; (100077f0 ) +10007618: 6010 str r0, [r2, #0] +1000761a: 4876 ldr r0, [pc, #472] ; (100077f4 ) +1000761c: 785c ldrb r4, [r3, #1] +1000761e: 6802 ldr r2, [r0, #0] +10007620: 0c12 lsrs r2, r2, #16 +10007622: 0412 lsls r2, r2, #16 +10007624: 4322 orrs r2, r4 +10007626: 6002 str r2, [r0, #0] +10007628: 4a73 ldr r2, [pc, #460] ; (100077f8 ) +1000762a: 7898 ldrb r0, [r3, #2] +1000762c: 6814 ldr r4, [r2, #0] +1000762e: f024 03ff bic.w r3, r4, #255 ; 0xff +10007632: 4303 orrs r3, r0 +10007634: 2401 movs r4, #1 +10007636: 6013 str r3, [r2, #0] +10007638: 600c str r4, [r1, #0] +1000763a: aa0c add r2, sp, #48 ; 0x30 +1000763c: e912 0003 ldmdb r2, {r0, r1} +10007640: f7ff fb5c bl 10006cfc +10007644: 4b6d ldr r3, [pc, #436] ; (100077fc ) +10007646: 4798 blx r3 +10007648: 2800 cmp r0, #0 +1000764a: d0d6 beq.n 100075fa +1000764c: e0c0 b.n 100077d0 +1000764e: 9b07 ldr r3, [sp, #28] +10007650: 006d lsls r5, r5, #1 +10007652: fb03 fc05 mul.w ip, r3, r5 +10007656: 2400 movs r4, #0 +10007658: 9508 str r5, [sp, #32] +1000765a: 461f mov r7, r3 +1000765c: 9405 str r4, [sp, #20] +1000765e: 46a2 mov sl, r4 +10007660: 46a0 mov r8, r4 +10007662: 9a07 ldr r2, [sp, #28] +10007664: 4297 cmp r7, r2 +10007666: d102 bne.n 1000766e +10007668: 9b06 ldr r3, [sp, #24] +1000766a: 2b00 cmp r3, #0 +1000766c: d06a beq.n 10007744 +1000766e: 495f ldr r1, [pc, #380] ; (100077ec ) +10007670: 4b5f ldr r3, [pc, #380] ; (100077f0 ) +10007672: 2001 movs r0, #1 +10007674: 2200 movs r2, #0 +10007676: 600a str r2, [r1, #0] +10007678: 601f str r7, [r3, #0] +1000767a: 6008 str r0, [r1, #0] +1000767c: f10c 0014 add.w r0, ip, #20 +10007680: 9009 str r0, [sp, #36] ; 0x24 +10007682: 46e1 mov r9, ip +10007684: 9b09 ldr r3, [sp, #36] ; 0x24 +10007686: 4599 cmp r9, r3 +10007688: d251 bcs.n 1000772e +1000768a: 4958 ldr r1, [pc, #352] ; (100077ec ) +1000768c: 2500 movs r5, #0 +1000768e: 600d str r5, [r1, #0] +10007690: f8d1 3114 ldr.w r3, [r1, #276] ; 0x114 +10007694: fa1f f089 uxth.w r0, r9 +10007698: 0c1b lsrs r3, r3, #16 +1000769a: 041b lsls r3, r3, #16 +1000769c: 4303 orrs r3, r0 +1000769e: 4853 ldr r0, [pc, #332] ; (100077ec ) +100076a0: f8c1 3114 str.w r3, [r1, #276] ; 0x114 +100076a4: 2301 movs r3, #1 +100076a6: 6003 str r3, [r0, #0] +100076a8: 462e mov r6, r5 +100076aa: 2363 movs r3, #99 ; 0x63 +100076ac: 4952 ldr r1, [pc, #328] ; (100077f8 ) +100076ae: 6808 ldr r0, [r1, #0] +100076b0: f020 00ff bic.w r0, r0, #255 ; 0xff +100076b4: 4328 orrs r0, r5 +100076b6: 6008 str r0, [r1, #0] +100076b8: 9204 str r2, [sp, #16] +100076ba: 9303 str r3, [sp, #12] +100076bc: f8cd c008 str.w ip, [sp, #8] +100076c0: 494e ldr r1, [pc, #312] ; (100077fc ) +100076c2: 4788 blx r1 +100076c4: 9a04 ldr r2, [sp, #16] +100076c6: 9b03 ldr r3, [sp, #12] +100076c8: f8dd c008 ldr.w ip, [sp, #8] +100076cc: b1b0 cbz r0, 100076fc +100076ce: b90e cbnz r6, 100076d4 +100076d0: 3201 adds r2, #1 +100076d2: 462b mov r3, r5 +100076d4: 2d63 cmp r5, #99 ; 0x63 +100076d6: d121 bne.n 1000771c +100076d8: 2a01 cmp r2, #1 +100076da: d102 bne.n 100076e2 +100076dc: b2b9 uxth r1, r7 +100076de: 9105 str r1, [sp, #20] +100076e0: e007 b.n 100076f2 +100076e2: f1c3 0063 rsb r0, r3, #99 ; 0x63 +100076e6: ebc4 0108 rsb r1, r4, r8 +100076ea: 4288 cmp r0, r1 +100076ec: d916 bls.n 1000771c +100076ee: b2b8 uxth r0, r7 +100076f0: 9005 str r0, [sp, #20] +100076f2: fa1f fa89 uxth.w sl, r9 +100076f6: 46a8 mov r8, r5 +100076f8: 461c mov r4, r3 +100076fa: e00f b.n 1000771c +100076fc: 2e01 cmp r6, #1 +100076fe: d10f bne.n 10007720 +10007700: 2a01 cmp r2, #1 +10007702: d004 beq.n 1000770e +10007704: 1aee subs r6, r5, r3 +10007706: ebc4 0108 rsb r1, r4, r8 +1000770a: 428e cmp r6, r1 +1000770c: d908 bls.n 10007720 +1000770e: b2b9 uxth r1, r7 +10007710: 9105 str r1, [sp, #20] +10007712: fa1f fa89 uxth.w sl, r9 +10007716: 46a8 mov r8, r5 +10007718: 461c mov r4, r3 +1000771a: e001 b.n 10007720 +1000771c: 2601 movs r6, #1 +1000771e: e000 b.n 10007722 +10007720: 4606 mov r6, r0 +10007722: 3501 adds r5, #1 +10007724: 2d64 cmp r5, #100 ; 0x64 +10007726: d1c1 bne.n 100076ac +10007728: f109 0901 add.w r9, r9, #1 +1000772c: e7aa b.n 10007684 +1000772e: b14a cbz r2, 10007744 +10007730: 4b2b ldr r3, [pc, #172] ; (100077e0 ) +10007732: 681a ldr r2, [r3, #0] +10007734: 461d mov r5, r3 +10007736: f012 4f80 tst.w r2, #1073741824 ; 0x40000000 +1000773a: d00c beq.n 10007756 +1000773c: 4b29 ldr r3, [pc, #164] ; (100077e4 ) +1000773e: 4830 ldr r0, [pc, #192] ; (10007800 ) +10007740: 4798 blx r3 +10007742: e008 b.n 10007756 +10007744: 3701 adds r7, #1 +10007746: 9b08 ldr r3, [sp, #32] +10007748: 2f04 cmp r7, #4 +1000774a: 4463 add r3, ip +1000774c: d801 bhi.n 10007752 +1000774e: 469c mov ip, r3 +10007750: e787 b.n 10007662 +10007752: 2000 movs r0, #0 +10007754: e03d b.n 100077d2 +10007756: 682b ldr r3, [r5, #0] +10007758: 005b lsls r3, r3, #1 +1000775a: d507 bpl.n 1000776c +1000775c: f8cd 8000 str.w r8, [sp] +10007760: 4828 ldr r0, [pc, #160] ; (10007804 ) +10007762: 9905 ldr r1, [sp, #20] +10007764: 4652 mov r2, sl +10007766: 4623 mov r3, r4 +10007768: 4d1e ldr r5, [pc, #120] ; (100077e4 ) +1000776a: 47a8 blx r5 +1000776c: 9905 ldr r1, [sp, #20] +1000776e: 481f ldr r0, [pc, #124] ; (100077ec ) +10007770: 2300 movs r3, #0 +10007772: 4a1f ldr r2, [pc, #124] ; (100077f0 ) +10007774: 6003 str r3, [r0, #0] +10007776: 9806 ldr r0, [sp, #24] +10007778: f3c1 030b ubfx r3, r1, #0, #12 +1000777c: 6013 str r3, [r2, #0] +1000777e: 2306 movs r3, #6 +10007780: fb03 b300 mla r3, r3, r0, fp +10007784: 4a15 ldr r2, [pc, #84] ; (100077dc ) +10007786: 4815 ldr r0, [pc, #84] ; (100077dc ) +10007788: f802 1033 strb.w r1, [r2, r3, lsl #3] +1000778c: 4919 ldr r1, [pc, #100] ; (100077f4 ) +1000778e: eb00 03c3 add.w r3, r0, r3, lsl #3 +10007792: 680a ldr r2, [r1, #0] +10007794: 4444 add r4, r8 +10007796: 0c12 lsrs r2, r2, #16 +10007798: 0412 lsls r2, r2, #16 +1000779a: ea4a 0202 orr.w r2, sl, r2 +1000779e: 600a str r2, [r1, #0] +100077a0: 4a15 ldr r2, [pc, #84] ; (100077f8 ) +100077a2: f883 a001 strb.w sl, [r3, #1] +100077a6: 6811 ldr r1, [r2, #0] +100077a8: 0864 lsrs r4, r4, #1 +100077aa: b2e0 uxtb r0, r4 +100077ac: f021 01ff bic.w r1, r1, #255 ; 0xff +100077b0: 4301 orrs r1, r0 +100077b2: 6011 str r1, [r2, #0] +100077b4: 490d ldr r1, [pc, #52] ; (100077ec ) +100077b6: 709c strb r4, [r3, #2] +100077b8: 2401 movs r4, #1 +100077ba: 70dc strb r4, [r3, #3] +100077bc: aa0c add r2, sp, #48 ; 0x30 +100077be: 600c str r4, [r1, #0] +100077c0: e912 0003 ldmdb r2, {r0, r1} +100077c4: f7ff fa9a bl 10006cfc +100077c8: 9806 ldr r0, [sp, #24] +100077ca: 4659 mov r1, fp +100077cc: f7ff fe45 bl 1000745a +100077d0: 4620 mov r0, r4 +100077d2: b00d add sp, #52 ; 0x34 +100077d4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +100077d8: 40000014 .word 0x40000014 +100077dc: 100021ec .word 0x100021ec +100077e0: 10000314 .word 0x10000314 +100077e4: 0000f39d .word 0x0000f39d +100077e8: 1004492c .word 0x1004492c +100077ec: 40006008 .word 0x40006008 +100077f0: 40006014 .word 0x40006014 +100077f4: 4000611c .word 0x4000611c +100077f8: 40000300 .word 0x40000300 +100077fc: 00003049 .word 0x00003049 +10007800: 1004493e .word 0x1004493e +10007804: 10044959 .word 0x10044959 + +10007808 : +10007808: b573 push {r0, r1, r4, r5, r6, lr} +1000780a: 4b24 ldr r3, [pc, #144] ; (1000789c ) +1000780c: 4604 mov r4, r0 +1000780e: 791a ldrb r2, [r3, #4] +10007810: 461e mov r6, r3 +10007812: b90a cbnz r2, 10007818 +10007814: f7fe ffe6 bl 100067e4 +10007818: e89d 0003 ldmia.w sp, {r0, r1} +1000781c: f7ff fa6e bl 10006cfc +10007820: 2c01 cmp r4, #1 +10007822: d00f beq.n 10007844 +10007824: d30a bcc.n 1000783c +10007826: 2c02 cmp r4, #2 +10007828: d111 bne.n 1000784e +1000782a: 4620 mov r0, r4 +1000782c: f7ff f862 bl 100068f4 +10007830: 79f3 ldrb r3, [r6, #7] +10007832: 2b05 cmp r3, #5 +10007834: bf0c ite eq +10007836: 2106 moveq r1, #6 +10007838: 2108 movne r1, #8 +1000783a: e011 b.n 10007860 +1000783c: 2000 movs r0, #0 +1000783e: f7ff f859 bl 100068f4 +10007842: e00c b.n 1000785e +10007844: 4620 mov r0, r4 +10007846: f7ff f855 bl 100068f4 +1000784a: 2108 movs r1, #8 +1000784c: e008 b.n 10007860 +1000784e: 4b14 ldr r3, [pc, #80] ; (100078a0 ) +10007850: 6819 ldr r1, [r3, #0] +10007852: f011 4180 ands.w r1, r1, #1073741824 ; 0x40000000 +10007856: d003 beq.n 10007860 +10007858: 4812 ldr r0, [pc, #72] ; (100078a4 ) +1000785a: 4b13 ldr r3, [pc, #76] ; (100078a8 ) +1000785c: 4798 blx r3 +1000785e: 2100 movs r1, #0 +10007860: 4620 mov r0, r4 +10007862: f7ff fea7 bl 100075b4 +10007866: b9a8 cbnz r0, 10007894 +10007868: 4b0d ldr r3, [pc, #52] ; (100078a0 ) +1000786a: 681b ldr r3, [r3, #0] +1000786c: 005b lsls r3, r3, #1 +1000786e: d502 bpl.n 10007876 +10007870: 480e ldr r0, [pc, #56] ; (100078ac ) +10007872: 4b0d ldr r3, [pc, #52] ; (100078a8 ) +10007874: 4798 blx r3 +10007876: 2000 movs r0, #0 +10007878: 4601 mov r1, r0 +1000787a: 466a mov r2, sp +1000787c: 4b0c ldr r3, [pc, #48] ; (100078b0 ) +1000787e: 4798 blx r3 +10007880: f89d 0000 ldrb.w r0, [sp] +10007884: 2100 movs r1, #0 +10007886: f7fe ff19 bl 100066bc +1000788a: 2000 movs r0, #0 +1000788c: f7ff f832 bl 100068f4 +10007890: 2000 movs r0, #0 +10007892: e000 b.n 10007896 +10007894: 2001 movs r0, #1 +10007896: b002 add sp, #8 +10007898: bd70 pop {r4, r5, r6, pc} +1000789a: bf00 nop +1000789c: 100021ec .word 0x100021ec +100078a0: 10000314 .word 0x10000314 +100078a4: 10044991 .word 0x10044991 +100078a8: 0000f39d .word 0x0000f39d +100078ac: 100449af .word 0x100449af +100078b0: 00003081 .word 0x00003081 + +100078b4 : +100078b4: b508 push {r3, lr} +100078b6: 2000 movs r0, #0 +100078b8: f7ff f81c bl 100068f4 +100078bc: 2000 movs r0, #0 +100078be: 4601 mov r1, r0 +100078c0: f7ff fe78 bl 100075b4 +100078c4: 3000 adds r0, #0 +100078c6: bf18 it ne +100078c8: 2001 movne r0, #1 +100078ca: bd08 pop {r3, pc} + +100078cc : +100078cc: b570 push {r4, r5, r6, lr} +100078ce: 4b08 ldr r3, [pc, #32] ; (100078f0 ) +100078d0: 4798 blx r3 +100078d2: 4604 mov r4, r0 +100078d4: f00d fcf2 bl 100152bc +100078d8: 4605 mov r5, r0 +100078da: f010 f873 bl 100179c4 +100078de: 4621 mov r1, r4 +100078e0: 4c04 ldr r4, [pc, #16] ; (100078f4 ) +100078e2: 4603 mov r3, r0 +100078e4: 462a mov r2, r5 +100078e6: 46a4 mov ip, r4 +100078e8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +100078ec: 4802 ldr r0, [pc, #8] ; (100078f8 ) +100078ee: 4760 bx ip +100078f0: 00000355 .word 0x00000355 +100078f4: 0000f39d .word 0x0000f39d +100078f8: 1003e9c0 .word 0x1003e9c0 + +100078fc
: +100078fc: b51f push {r0, r1, r2, r3, r4, lr} +100078fe: 4a1d ldr r2, [pc, #116] ; (10007974 ) +10007900: f44f 607a mov.w r0, #4000 ; 0xfa0 +10007904: 6813 ldr r3, [r2, #0] +10007906: f3c3 0314 ubfx r3, r3, #0, #21 +1000790a: 6013 str r3, [r2, #0] +1000790c: f010 ffd8 bl 100188c0 +10007910: f011 f81e bl 10018950 +10007914: f036 f95a bl 1003dbcc +10007918: b130 cbz r0, 10007928 +1000791a: 4b17 ldr r3, [pc, #92] ; (10007978 ) +1000791c: 681b ldr r3, [r3, #0] +1000791e: 005b lsls r3, r3, #1 +10007920: d502 bpl.n 10007928 +10007922: 4816 ldr r0, [pc, #88] ; (1000797c ) +10007924: 4b16 ldr r3, [pc, #88] ; (10007980 ) +10007926: 4798 blx r3 +10007928: 2004 movs r0, #4 +1000792a: f00d fc13 bl 10015154 +1000792e: 2400 movs r4, #0 +10007930: f00d fcac bl 1001528c +10007934: f7ff ffca bl 100078cc +10007938: 2306 movs r3, #6 +1000793a: 9403 str r4, [sp, #12] +1000793c: 9300 str r3, [sp, #0] +1000793e: 9402 str r4, [sp, #8] +10007940: 4623 mov r3, r4 +10007942: 9401 str r4, [sp, #4] +10007944: f44f 7200 mov.w r2, #512 ; 0x200 +10007948: 490e ldr r1, [pc, #56] ; (10007984 ) +1000794a: 480f ldr r0, [pc, #60] ; (10007988 ) +1000794c: f00e fa82 bl 10015e54 +10007950: 2305 movs r3, #5 +10007952: f44f 7200 mov.w r2, #512 ; 0x200 +10007956: 9300 str r3, [sp, #0] +10007958: 490c ldr r1, [pc, #48] ; (1000798c ) +1000795a: 4623 mov r3, r4 +1000795c: 9403 str r4, [sp, #12] +1000795e: 9402 str r4, [sp, #8] +10007960: 9401 str r4, [sp, #4] +10007962: 480b ldr r0, [pc, #44] ; (10007990 ) +10007964: f00e fa76 bl 10015e54 +10007968: f00e fc26 bl 100161b8 +1000796c: 4620 mov r0, r4 +1000796e: b004 add sp, #16 +10007970: bd10 pop {r4, pc} +10007972: bf00 nop +10007974: 40000210 .word 0x40000210 +10007978: 10000314 .word 0x10000314 +1000797c: 1003e9f5 .word 0x1003e9f5 +10007980: 0000f39d .word 0x0000f39d +10007984: 1003ea11 .word 0x1003ea11 +10007988: 100079cd .word 0x100079cd +1000798c: 1003ea1b .word 0x1003ea1b +10007990: 100079a5 .word 0x100079a5 + +10007994 : +10007994: 220a movs r2, #10 +10007996: f245 3159 movw r1, #21337 ; 0x5359 +1000799a: 4801 ldr r0, [pc, #4] ; (100079a0 ) +1000799c: f010 bdee b.w 1001857c +100079a0: 10044c34 .word 0x10044c34 + +100079a4 : +100079a4: b508 push {r3, lr} +100079a6: f000 fbdd bl 10008164 +100079aa: 4c07 ldr r4, [pc, #28] ; (100079c8 ) +100079ac: 2300 movs r3, #0 +100079ae: f242 7210 movw r2, #10000 ; 0x2710 +100079b2: 4619 mov r1, r3 +100079b4: 6820 ldr r0, [r4, #0] +100079b6: f00e f90f bl 10015bd8 +100079ba: b108 cbz r0, 100079c0 +100079bc: f000 fc06 bl 100081cc +100079c0: f010 ffd2 bl 10018968 +100079c4: e7f2 b.n 100079ac +100079c6: bf00 nop +100079c8: 10049b0c .word 0x10049b0c + +100079cc : +100079cc: b538 push {r3, r4, r5, lr} +100079ce: 2001 movs r0, #1 +100079d0: f00e f88e bl 10015af0 +100079d4: 2300 movs r3, #0 +100079d6: 4d16 ldr r5, [pc, #88] ; (10007a30 ) +100079d8: f44f 727a mov.w r2, #1000 ; 0x3e8 +100079dc: 4619 mov r1, r3 +100079de: 6028 str r0, [r5, #0] +100079e0: f00e f8fa bl 10015bd8 +100079e4: b1e8 cbz r0, 10007a22 +100079e6: 2200 movs r2, #0 +100079e8: 4c12 ldr r4, [pc, #72] ; (10007a34 ) +100079ea: 4b13 ldr r3, [pc, #76] ; (10007a38 ) +100079ec: 715a strb r2, [r3, #5] +100079ee: 7823 ldrb r3, [r4, #0] +100079f0: 075a lsls r2, r3, #29 +100079f2: bf5e ittt pl +100079f4: 2201 movpl r2, #1 +100079f6: 4b11 ldrpl r3, [pc, #68] ; (10007a3c ) +100079f8: 701a strbpl r2, [r3, #0] +100079fa: f001 f8ef bl 10008bdc +100079fe: f006 fcd3 bl 1000e3a8 +10007a02: 88a0 ldrh r0, [r4, #4] +10007a04: f002 fd20 bl 1000a448 +10007a08: 7823 ldrb r3, [r4, #0] +10007a0a: 07db lsls r3, r3, #31 +10007a0c: d503 bpl.n 10007a16 +10007a0e: f06f 0002 mvn.w r0, #2 +10007a12: f011 fb09 bl 10019028 +10007a16: 2300 movs r3, #0 +10007a18: 6828 ldr r0, [r5, #0] +10007a1a: 461a mov r2, r3 +10007a1c: 4619 mov r1, r3 +10007a1e: f00d ffed bl 100159fc +10007a22: f7ff ff53 bl 100078cc +10007a26: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10007a2a: 2000 movs r0, #0 +10007a2c: f00e baf4 b.w 10016018 +10007a30: 10049b0c .word 0x10049b0c +10007a34: 10044c34 .word 0x10044c34 +10007a38: 10044e40 .word 0x10044e40 +10007a3c: 1004bb86 .word 0x1004bb86 + +10007a40 : +10007a40: b5f0 push {r4, r5, r6, r7, lr} +10007a42: 248e movs r4, #142 ; 0x8e +10007a44: 25e8 movs r5, #232 ; 0xe8 +10007a46: 26ee movs r6, #238 ; 0xee +10007a48: 2788 movs r7, #136 ; 0x88 +10007a4a: 4603 mov r3, r0 +10007a4c: 3004 adds r0, #4 +10007a4e: f001 02c0 and.w r2, r1, #192 ; 0xc0 +10007a52: 2a40 cmp r2, #64 ; 0x40 +10007a54: d00f beq.n 10007a76 +10007a56: d806 bhi.n 10007a66 +10007a58: b15a cbz r2, 10007a72 +10007a5a: 3301 adds r3, #1 +10007a5c: 0089 lsls r1, r1, #2 +10007a5e: 4298 cmp r0, r3 +10007a60: b2c9 uxtb r1, r1 +10007a62: d1f4 bne.n 10007a4e +10007a64: bdf0 pop {r4, r5, r6, r7, pc} +10007a66: 2a80 cmp r2, #128 ; 0x80 +10007a68: d007 beq.n 10007a7a +10007a6a: 2ac0 cmp r2, #192 ; 0xc0 +10007a6c: d1f5 bne.n 10007a5a +10007a6e: 701e strb r6, [r3, #0] +10007a70: e7f3 b.n 10007a5a +10007a72: 701f strb r7, [r3, #0] +10007a74: e7f1 b.n 10007a5a +10007a76: 701c strb r4, [r3, #0] +10007a78: e7ef b.n 10007a5a +10007a7a: 701d strb r5, [r3, #0] +10007a7c: e7ed b.n 10007a5a + ... + +10007a80 : +10007a80: 2300 movs r3, #0 +10007a82: b507 push {r0, r1, r2, lr} +10007a84: 9301 str r3, [sp, #4] +10007a86: b199 cbz r1, 10007ab0 +10007a88: 2901 cmp r1, #1 +10007a8a: d114 bne.n 10007ab6 +10007a8c: aa01 add r2, sp, #4 +10007a8e: 2102 movs r1, #2 +10007a90: f8d0 0700 ldr.w r0, [r0, #1792] ; 0x700 +10007a94: f00d fe90 bl 100157b8 +10007a98: 2801 cmp r0, #1 +10007a9a: d109 bne.n 10007ab0 +10007a9c: 9b01 ldr r3, [sp, #4] +10007a9e: b13b cbz r3, 10007ab0 +10007aa0: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +10007aa4: 4b08 ldr r3, [pc, #32] ; (10007ac8 ) +10007aa6: 601a str r2, [r3, #0] +10007aa8: f3bf 8f4f dsb sy +10007aac: f3bf 8f6f isb sy +10007ab0: b003 add sp, #12 +10007ab2: f85d fb04 ldr.w pc, [sp], #4 +10007ab6: 4b05 ldr r3, [pc, #20] ; (10007acc ) +10007ab8: 681b ldr r3, [r3, #0] +10007aba: 005b lsls r3, r3, #1 +10007abc: d5f8 bpl.n 10007ab0 +10007abe: 4b04 ldr r3, [pc, #16] ; (10007ad0 ) +10007ac0: 4804 ldr r0, [pc, #16] ; (10007ad4 ) +10007ac2: 4798 blx r3 +10007ac4: e7f4 b.n 10007ab0 +10007ac6: bf00 nop +10007ac8: e000ed04 .word 0xe000ed04 +10007acc: 10000314 .word 0x10000314 +10007ad0: 0000f39d .word 0x0000f39d +10007ad4: 1003eac0 .word 0x1003eac0 + +10007ad8 : +10007ad8: b573 push {r0, r1, r4, r5, r6, lr} +10007ada: 4604 mov r4, r0 +10007adc: 460d mov r5, r1 +10007ade: f8d4 3620 ldr.w r3, [r4, #1568] ; 0x620 +10007ae2: 075b lsls r3, r3, #29 +10007ae4: d41d bmi.n 10007b22 +10007ae6: b115 cbz r5, 10007aee +10007ae8: 4628 mov r0, r5 +10007aea: f00e fcb1 bl 10016450 +10007aee: 2300 movs r3, #0 +10007af0: f44f 727a mov.w r2, #1000 ; 0x3e8 +10007af4: 4619 mov r1, r3 +10007af6: f8d4 0704 ldr.w r0, [r4, #1796] ; 0x704 +10007afa: f00e f86d bl 10015bd8 +10007afe: 2801 cmp r0, #1 +10007b00: 4605 mov r5, r0 +10007b02: d012 beq.n 10007b2a +10007b04: 4920 ldr r1, [pc, #128] ; (10007b88 ) +10007b06: 4821 ldr r0, [pc, #132] ; (10007b8c ) +10007b08: f013 f83a bl 1001ab80 +10007b0c: 2300 movs r3, #0 +10007b0e: f8d4 0704 ldr.w r0, [r4, #1796] ; 0x704 +10007b12: 461a mov r2, r3 +10007b14: 4619 mov r1, r3 +10007b16: f00d ff71 bl 100159fc +10007b1a: f04f 30ff mov.w r0, #4294967295 +10007b1e: b002 add sp, #8 +10007b20: bd70 pop {r4, r5, r6, pc} +10007b22: 2000 movs r0, #0 +10007b24: f00e fc94 bl 10016450 +10007b28: e7d9 b.n 10007ade +10007b2a: f8d4 3708 ldr.w r3, [r4, #1800] ; 0x708 +10007b2e: b113 cbz r3, 10007b36 +10007b30: f8d4 370c ldr.w r3, [r4, #1804] ; 0x70c +10007b34: b913 cbnz r3, 10007b3c +10007b36: 4914 ldr r1, [pc, #80] ; (10007b88 ) +10007b38: 4815 ldr r0, [pc, #84] ; (10007b90 ) +10007b3a: e7e5 b.n 10007b08 +10007b3c: 2102 movs r1, #2 +10007b3e: f8d4 0700 ldr.w r0, [r4, #1792] ; 0x700 +10007b42: f00d fdeb bl 1001571c +10007b46: f8d4 270c ldr.w r2, [r4, #1804] ; 0x70c +10007b4a: f8d4 1708 ldr.w r1, [r4, #1800] ; 0x708 +10007b4e: 4620 mov r0, r4 +10007b50: f010 fb94 bl 1001827c +10007b54: f44f 737a mov.w r3, #1000 ; 0x3e8 +10007b58: 462a mov r2, r5 +10007b5a: 9300 str r3, [sp, #0] +10007b5c: 2102 movs r1, #2 +10007b5e: 2300 movs r3, #0 +10007b60: f8d4 0700 ldr.w r0, [r4, #1792] ; 0x700 +10007b64: f00d fd82 bl 1001566c +10007b68: f010 0602 ands.w r6, r0, #2 +10007b6c: d102 bne.n 10007b74 +10007b6e: 4906 ldr r1, [pc, #24] ; (10007b88 ) +10007b70: 4808 ldr r0, [pc, #32] ; (10007b94 ) +10007b72: e7c9 b.n 10007b08 +10007b74: 2300 movs r3, #0 +10007b76: f8d4 0704 ldr.w r0, [r4, #1796] ; 0x704 +10007b7a: 461a mov r2, r3 +10007b7c: 4619 mov r1, r3 +10007b7e: f00d ff3d bl 100159fc +10007b82: 4628 mov r0, r5 +10007b84: e7cb b.n 10007b1e +10007b86: bf00 nop +10007b88: 1003ea8e .word 0x1003ea8e +10007b8c: 1003ea23 .word 0x1003ea23 +10007b90: 1003ea53 .word 0x1003ea53 +10007b94: 1003ea74 .word 0x1003ea74 + +10007b98 : +10007b98: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10007b9c: 4605 mov r5, r0 +10007b9e: 460c mov r4, r1 +10007ba0: 4616 mov r6, r2 +10007ba2: 4699 mov r9, r3 +10007ba4: f8d5 3620 ldr.w r3, [r5, #1568] ; 0x620 +10007ba8: f013 0304 ands.w r3, r3, #4 +10007bac: d138 bne.n 10007c20 +10007bae: f44f 727a mov.w r2, #1000 ; 0x3e8 +10007bb2: 4619 mov r1, r3 +10007bb4: f8d5 0704 ldr.w r0, [r5, #1796] ; 0x704 +10007bb8: f00e f80e bl 10015bd8 +10007bbc: 2801 cmp r0, #1 +10007bbe: d175 bne.n 10007cac +10007bc0: f8b5 3710 ldrh.w r3, [r5, #1808] ; 0x710 +10007bc4: f04f 0bc0 mov.w fp, #192 ; 0xc0 +10007bc8: 429e cmp r6, r3 +10007bca: bf28 it cs +10007bcc: 461e movcs r6, r3 +10007bce: f8d5 7708 ldr.w r7, [r5, #1800] ; 0x708 +10007bd2: eb06 0846 add.w r8, r6, r6, lsl #1 +10007bd6: fa1f fa86 uxth.w sl, r6 +10007bda: 44a0 add r8, r4 +10007bdc: 4544 cmp r4, r8 +10007bde: d123 bne.n 10007c28 +10007be0: f8b5 2710 ldrh.w r2, [r5, #1808] ; 0x710 +10007be4: 4592 cmp sl, r2 +10007be6: d208 bcs.n 10007bfa +10007be8: 1b92 subs r2, r2, r6 +10007bea: 4638 mov r0, r7 +10007bec: 2188 movs r1, #136 ; 0x88 +10007bee: f012 fff3 bl 1001abd8 +10007bf2: f8b5 3710 ldrh.w r3, [r5, #1808] ; 0x710 +10007bf6: 1b9e subs r6, r3, r6 +10007bf8: 4437 add r7, r6 +10007bfa: 2219 movs r2, #25 +10007bfc: 2100 movs r1, #0 +10007bfe: 4638 mov r0, r7 +10007c00: f012 ffea bl 1001abd8 +10007c04: 2300 movs r3, #0 +10007c06: f8d5 0704 ldr.w r0, [r5, #1796] ; 0x704 +10007c0a: 4619 mov r1, r3 +10007c0c: 461a mov r2, r3 +10007c0e: f00d fef5 bl 100159fc +10007c12: 4649 mov r1, r9 +10007c14: 4628 mov r0, r5 +10007c16: b003 add sp, #12 +10007c18: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10007c1c: f7ff bf5c b.w 10007ad8 +10007c20: 2000 movs r0, #0 +10007c22: f00e fc15 bl 10016450 +10007c26: e7bd b.n 10007ba4 +10007c28: 7821 ldrb r1, [r4, #0] +10007c2a: f894 e001 ldrb.w lr, [r4, #1] +10007c2e: fb0b f101 mul.w r1, fp, r1 +10007c32: f3c1 2107 ubfx r1, r1, #8, #8 +10007c36: f001 033f and.w r3, r1, #63 ; 0x3f +10007c3a: fb0e f303 mul.w r3, lr, r3 +10007c3e: 78a2 ldrb r2, [r4, #2] +10007c40: 119b asrs r3, r3, #6 +10007c42: fb02 f003 mul.w r0, r2, r3 +10007c46: ebae 0303 sub.w r3, lr, r3 +10007c4a: ea6f 0e0e mvn.w lr, lr +10007c4e: b2db uxtb r3, r3 +10007c50: fa5f fe8e uxtb.w lr, lr +10007c54: 4353 muls r3, r2 +10007c56: fb02 f20e mul.w r2, r2, lr +10007c5a: 0989 lsrs r1, r1, #6 +10007c5c: f3c2 2207 ubfx r2, r2, #8, #8 +10007c60: f3c0 2007 ubfx r0, r0, #8, #8 +10007c64: 2901 cmp r1, #1 +10007c66: eb02 2e13 add.w lr, r2, r3, lsr #8 +10007c6a: 4410 add r0, r2 +10007c6c: d015 beq.n 10007c9a +10007c6e: 2902 cmp r1, #2 +10007c70: d017 beq.n 10007ca2 +10007c72: 4613 mov r3, r2 +10007c74: b2c1 uxtb r1, r0 +10007c76: fa5f f28e uxtb.w r2, lr +10007c7a: 4638 mov r0, r7 +10007c7c: e88d 000c stmia.w sp, {r2, r3} +10007c80: f7ff fede bl 10007a40 +10007c84: 9a00 ldr r2, [sp, #0] +10007c86: 3403 adds r4, #3 +10007c88: 4611 mov r1, r2 +10007c8a: f7ff fed9 bl 10007a40 +10007c8e: 9b01 ldr r3, [sp, #4] +10007c90: 4619 mov r1, r3 +10007c92: f7ff fed5 bl 10007a40 +10007c96: 4607 mov r7, r0 +10007c98: e7a0 b.n 10007bdc +10007c9a: fa5f f18e uxtb.w r1, lr +10007c9e: b2c3 uxtb r3, r0 +10007ca0: e7eb b.n 10007c7a +10007ca2: 4611 mov r1, r2 +10007ca4: fa5f f38e uxtb.w r3, lr +10007ca8: b2c2 uxtb r2, r0 +10007caa: e7e6 b.n 10007c7a +10007cac: 4904 ldr r1, [pc, #16] ; (10007cc0 ) +10007cae: 4805 ldr r0, [pc, #20] ; (10007cc4 ) +10007cb0: f012 ff66 bl 1001ab80 +10007cb4: f04f 30ff mov.w r0, #4294967295 +10007cb8: b003 add sp, #12 +10007cba: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10007cbe: bf00 nop +10007cc0: 1003ea98 .word 0x1003ea98 +10007cc4: 1003ea23 .word 0x1003ea23 + +10007cc8 : +10007cc8: b5f8 push {r3, r4, r5, r6, r7, lr} +10007cca: 460f mov r7, r1 +10007ccc: 4605 mov r5, r0 +10007cce: b930 cbnz r0, 10007cde +10007cd0: 491b ldr r1, [pc, #108] ; (10007d40 ) +10007cd2: 481c ldr r0, [pc, #112] ; (10007d44 ) +10007cd4: f012 ff54 bl 1001ab80 +10007cd8: f04f 30ff mov.w r0, #4294967295 +10007cdc: bdf8 pop {r3, r4, r5, r6, r7, pc} +10007cde: 2300 movs r3, #0 +10007ce0: f44f 727a mov.w r2, #1000 ; 0x3e8 +10007ce4: 4619 mov r1, r3 +10007ce6: f8d0 0704 ldr.w r0, [r0, #1796] ; 0x704 +10007cea: f00d ff75 bl 10015bd8 +10007cee: 2801 cmp r0, #1 +10007cf0: 4604 mov r4, r0 +10007cf2: d002 beq.n 10007cfa +10007cf4: 4912 ldr r1, [pc, #72] ; (10007d40 ) +10007cf6: 4814 ldr r0, [pc, #80] ; (10007d48 ) +10007cf8: e7ec b.n 10007cd4 +10007cfa: 2fe4 cmp r7, #228 ; 0xe4 +10007cfc: d81d bhi.n 10007d3a +10007cfe: 260c movs r6, #12 +10007d00: 437e muls r6, r7 +10007d02: 4812 ldr r0, [pc, #72] ; (10007d4c ) +10007d04: 4632 mov r2, r6 +10007d06: f8c5 0708 str.w r0, [r5, #1800] ; 0x708 +10007d0a: 2188 movs r1, #136 ; 0x88 +10007d0c: f012 ff64 bl 1001abd8 +10007d10: f8d5 0708 ldr.w r0, [r5, #1800] ; 0x708 +10007d14: 2219 movs r2, #25 +10007d16: 2100 movs r1, #0 +10007d18: 4430 add r0, r6 +10007d1a: f012 ff5d bl 1001abd8 +10007d1e: 2300 movs r3, #0 +10007d20: 3619 adds r6, #25 +10007d22: f8a5 7710 strh.w r7, [r5, #1808] ; 0x710 +10007d26: f8c5 670c str.w r6, [r5, #1804] ; 0x70c +10007d2a: 461a mov r2, r3 +10007d2c: 4619 mov r1, r3 +10007d2e: f8d5 0704 ldr.w r0, [r5, #1796] ; 0x704 +10007d32: f00d fe63 bl 100159fc +10007d36: 4620 mov r0, r4 +10007d38: bdf8 pop {r3, r4, r5, r6, r7, pc} +10007d3a: 4901 ldr r1, [pc, #4] ; (10007d40 ) +10007d3c: 4804 ldr r0, [pc, #16] ; (10007d50 ) +10007d3e: e7c9 b.n 10007cd4 +10007d40: 1003eab2 .word 0x1003eab2 +10007d44: 1003eb78 .word 0x1003eb78 +10007d48: 1003ea23 .word 0x1003ea23 +10007d4c: 10049b10 .word 0x10049b10 +10007d50: 1003eb96 .word 0x1003eb96 + +10007d54 : +10007d54: b537 push {r0, r1, r2, r4, r5, lr} +10007d56: 4605 mov r5, r0 +10007d58: f240 7014 movw r0, #1812 ; 0x714 +10007d5c: f00d f9fa bl 10015154 +10007d60: 4604 mov r4, r0 +10007d62: b930 cbnz r0, 10007d72 +10007d64: 4928 ldr r1, [pc, #160] ; (10007e08 ) +10007d66: 4829 ldr r0, [pc, #164] ; (10007e0c ) +10007d68: f012 ff0a bl 1001ab80 +10007d6c: 4620 mov r0, r4 +10007d6e: b003 add sp, #12 +10007d70: bd30 pop {r4, r5, pc} +10007d72: f240 7214 movw r2, #1812 ; 0x714 +10007d76: 2100 movs r1, #0 +10007d78: f012 ff2e bl 1001abd8 +10007d7c: 2001 movs r0, #1 +10007d7e: f00d feb7 bl 10015af0 +10007d82: f8c4 0704 str.w r0, [r4, #1796] ; 0x704 +10007d86: b910 cbnz r0, 10007d8e +10007d88: 491f ldr r1, [pc, #124] ; (10007e08 ) +10007d8a: 4821 ldr r0, [pc, #132] ; (10007e10 ) +10007d8c: e7ec b.n 10007d68 +10007d8e: f00d fc5f bl 10015650 +10007d92: f8c4 0700 str.w r0, [r4, #1792] ; 0x700 +10007d96: b910 cbnz r0, 10007d9e +10007d98: 491b ldr r1, [pc, #108] ; (10007e08 ) +10007d9a: 481e ldr r0, [pc, #120] ; (10007e14 ) +10007d9c: e7e4 b.n 10007d68 +10007d9e: 2320 movs r3, #32 +10007da0: 2223 movs r2, #35 ; 0x23 +10007da2: 9300 str r3, [sp, #0] +10007da4: 2122 movs r1, #34 ; 0x22 +10007da6: 2321 movs r3, #33 ; 0x21 +10007da8: 4620 mov r0, r4 +10007daa: f010 f967 bl 1001807c +10007dae: 2300 movs r3, #0 +10007db0: 2203 movs r2, #3 +10007db2: 2108 movs r1, #8 +10007db4: 4620 mov r0, r4 +10007db6: f010 fa07 bl 100181c8 +10007dba: 4917 ldr r1, [pc, #92] ; (10007e18 ) +10007dbc: 4620 mov r0, r4 +10007dbe: f010 fa55 bl 1001826c +10007dc2: 4916 ldr r1, [pc, #88] ; (10007e1c ) +10007dc4: 4620 mov r0, r4 +10007dc6: 4622 mov r2, r4 +10007dc8: f010 fa52 bl 10018270 +10007dcc: 4629 mov r1, r5 +10007dce: 4620 mov r0, r4 +10007dd0: f7ff ff7a bl 10007cc8 +10007dd4: 2800 cmp r0, #0 +10007dd6: d1c9 bne.n 10007d6c +10007dd8: 490b ldr r1, [pc, #44] ; (10007e08 ) +10007dda: 4811 ldr r0, [pc, #68] ; (10007e20 ) +10007ddc: f012 fed0 bl 1001ab80 +10007de0: f8d4 0704 ldr.w r0, [r4, #1796] ; 0x704 +10007de4: b108 cbz r0, 10007dea +10007de6: f00d ff9a bl 10015d1e +10007dea: f8d4 0700 ldr.w r0, [r4, #1792] ; 0x700 +10007dee: b108 cbz r0, 10007df4 +10007df0: f00d fccf bl 10015792 +10007df4: f8d4 0708 ldr.w r0, [r4, #1800] ; 0x708 +10007df8: b108 cbz r0, 10007dfe +10007dfa: f00d fa47 bl 1001528c +10007dfe: 4620 mov r0, r4 +10007e00: f00d fa44 bl 1001528c +10007e04: 2400 movs r4, #0 +10007e06: e7b1 b.n 10007d6c +10007e08: 1003eaa6 .word 0x1003eaa6 +10007e0c: 1003eae0 .word 0x1003eae0 +10007e10: 1003eb04 .word 0x1003eb04 +10007e14: 1003eb28 .word 0x1003eb28 +10007e18: 0033e140 .word 0x0033e140 +10007e1c: 10007a81 .word 0x10007a81 +10007e20: 1003eb52 .word 0x1003eb52 + +10007e24 : +10007e24: b570 push {r4, r5, r6, lr} +10007e26: 6803 ldr r3, [r0, #0] +10007e28: 4d24 ldr r5, [pc, #144] ; (10007ebc ) +10007e2a: 4604 mov r4, r0 +10007e2c: 42ab cmp r3, r5 +10007e2e: 460e mov r6, r1 +10007e30: d010 beq.n 10007e54 +10007e32: 2218 movs r2, #24 +10007e34: 21ff movs r1, #255 ; 0xff +10007e36: f012 fecf bl 1001abd8 +10007e3a: 23e4 movs r3, #228 ; 0xe4 +10007e3c: 60a3 str r3, [r4, #8] +10007e3e: 230a movs r3, #10 +10007e40: 6123 str r3, [r4, #16] +10007e42: 23ff movs r3, #255 ; 0xff +10007e44: 2200 movs r2, #0 +10007e46: 60e3 str r3, [r4, #12] +10007e48: 2301 movs r3, #1 +10007e4a: 7562 strb r2, [r4, #21] +10007e4c: 4a1c ldr r2, [pc, #112] ; (10007ec0 ) +10007e4e: 6025 str r5, [r4, #0] +10007e50: 7523 strb r3, [r4, #20] +10007e52: 6013 str r3, [r2, #0] +10007e54: 68a3 ldr r3, [r4, #8] +10007e56: 2be4 cmp r3, #228 ; 0xe4 +10007e58: d904 bls.n 10007e64 +10007e5a: 23e4 movs r3, #228 ; 0xe4 +10007e5c: 2201 movs r2, #1 +10007e5e: 60a3 str r3, [r4, #8] +10007e60: 4b17 ldr r3, [pc, #92] ; (10007ec0 ) +10007e62: 601a str r2, [r3, #0] +10007e64: 6923 ldr r3, [r4, #16] +10007e66: f5b3 7ffa cmp.w r3, #500 ; 0x1f4 +10007e6a: d905 bls.n 10007e78 +10007e6c: f44f 73fa mov.w r3, #500 ; 0x1f4 +10007e70: 2201 movs r2, #1 +10007e72: 6123 str r3, [r4, #16] +10007e74: 4b12 ldr r3, [pc, #72] ; (10007ec0 ) +10007e76: 601a str r2, [r3, #0] +10007e78: 68e3 ldr r3, [r4, #12] +10007e7a: 2bff cmp r3, #255 ; 0xff +10007e7c: d904 bls.n 10007e88 +10007e7e: 23ff movs r3, #255 ; 0xff +10007e80: 2201 movs r2, #1 +10007e82: 60e3 str r3, [r4, #12] +10007e84: 4b0e ldr r3, [pc, #56] ; (10007ec0 ) +10007e86: 601a str r2, [r3, #0] +10007e88: 68a0 ldr r0, [r4, #8] +10007e8a: eb00 0040 add.w r0, r0, r0, lsl #1 +10007e8e: f00d f961 bl 10015154 +10007e92: 6060 str r0, [r4, #4] +10007e94: b930 cbnz r0, 10007ea4 +10007e96: 490b ldr r1, [pc, #44] ; (10007ec4 ) +10007e98: 480b ldr r0, [pc, #44] ; (10007ec8 ) +10007e9a: f012 fe71 bl 1001ab80 +10007e9e: f04f 30ff mov.w r0, #4294967295 +10007ea2: bd70 pop {r4, r5, r6, pc} +10007ea4: 68a2 ldr r2, [r4, #8] +10007ea6: 2100 movs r1, #0 +10007ea8: eb02 0242 add.w r2, r2, r2, lsl #1 +10007eac: f012 fe94 bl 1001abd8 +10007eb0: 8921 ldrh r1, [r4, #8] +10007eb2: 4630 mov r0, r6 +10007eb4: f7ff ff08 bl 10007cc8 +10007eb8: 2001 movs r0, #1 +10007eba: bd70 pop {r4, r5, r6, pc} +10007ebc: 4c414d50 .word 0x4c414d50 +10007ec0: 1004a5e0 .word 0x1004a5e0 +10007ec4: 1003ebc2 .word 0x1003ebc2 +10007ec8: 1003ebd1 .word 0x1003ebd1 + +10007ecc : +10007ecc: 2300 movs r3, #0 +10007ece: b530 push {r4, r5, lr} +10007ed0: 6884 ldr r4, [r0, #8] +10007ed2: 42a3 cmp r3, r4 +10007ed4: d100 bne.n 10007ed8 +10007ed6: bd30 pop {r4, r5, pc} +10007ed8: 6842 ldr r2, [r0, #4] +10007eda: eb03 0543 add.w r5, r3, r3, lsl #1 +10007ede: 442a add r2, r5 +10007ee0: 7091 strb r1, [r2, #2] +10007ee2: 3301 adds r3, #1 +10007ee4: e7f5 b.n 10007ed2 + ... + +10007ee8 : +10007ee8: 4b07 ldr r3, [pc, #28] ; (10007f08 ) +10007eea: 6842 ldr r2, [r0, #4] +10007eec: 429a cmp r2, r3 +10007eee: d007 beq.n 10007f00 +10007ef0: 6043 str r3, [r0, #4] +10007ef2: 2372 movs r3, #114 ; 0x72 +10007ef4: 6083 str r3, [r0, #8] +10007ef6: 2301 movs r3, #1 +10007ef8: 4a04 ldr r2, [pc, #16] ; (10007f0c ) +10007efa: 7003 strb r3, [r0, #0] +10007efc: 7303 strb r3, [r0, #12] +10007efe: 6013 str r3, [r2, #0] +10007f00: 2300 movs r3, #0 +10007f02: 7343 strb r3, [r0, #13] +10007f04: 4770 bx lr +10007f06: bf00 nop +10007f08: 4c414d50 .word 0x4c414d50 +10007f0c: 1004a5e0 .word 0x1004a5e0 + +10007f10 : +10007f10: 7803 ldrb r3, [r0, #0] +10007f12: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +10007f16: b173 cbz r3, 10007f36 +10007f18: 7d0b ldrb r3, [r1, #20] +10007f1a: b163 cbz r3, 10007f36 +10007f1c: 7b44 ldrb r4, [r0, #13] +10007f1e: 6885 ldr r5, [r0, #8] +10007f20: 4622 mov r2, r4 +10007f22: 462e mov r6, r5 +10007f24: 2300 movs r3, #0 +10007f26: 27ff movs r7, #255 ; 0xff +10007f28: f8d1 8008 ldr.w r8, [r1, #8] +10007f2c: 4543 cmp r3, r8 +10007f2e: d104 bne.n 10007f3a +10007f30: 7b03 ldrb r3, [r0, #12] +10007f32: 441c add r4, r3 +10007f34: 7344 strb r4, [r0, #13] +10007f36: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +10007f3a: 42b3 cmp r3, r6 +10007f3c: bf08 it eq +10007f3e: 4622 moveq r2, r4 +10007f40: f8d1 c004 ldr.w ip, [r1, #4] +10007f44: eb03 0e43 add.w lr, r3, r3, lsl #1 +10007f48: f80c 200e strb.w r2, [ip, lr] +10007f4c: eb0c 090e add.w r9, ip, lr +10007f50: fbb7 fef5 udiv lr, r7, r5 +10007f54: 4472 add r2, lr +10007f56: bf08 it eq +10007f58: 195e addeq r6, r3, r5 +10007f5a: f889 7001 strb.w r7, [r9, #1] +10007f5e: b2d2 uxtb r2, r2 +10007f60: 3301 adds r3, #1 +10007f62: e7e3 b.n 10007f2c + +10007f64 : +10007f64: 4b0a ldr r3, [pc, #40] ; (10007f90 ) +10007f66: 6842 ldr r2, [r0, #4] +10007f68: 429a cmp r2, r3 +10007f6a: d00a beq.n 10007f82 +10007f6c: 22ff movs r2, #255 ; 0xff +10007f6e: 6102 str r2, [r0, #16] +10007f70: 22fa movs r2, #250 ; 0xfa +10007f72: 6043 str r3, [r0, #4] +10007f74: 2300 movs r3, #0 +10007f76: 6082 str r2, [r0, #8] +10007f78: 2201 movs r2, #1 +10007f7a: 7003 strb r3, [r0, #0] +10007f7c: 60c3 str r3, [r0, #12] +10007f7e: 4b05 ldr r3, [pc, #20] ; (10007f94 ) +10007f80: 601a str r2, [r3, #0] +10007f82: 6883 ldr r3, [r0, #8] +10007f84: b903 cbnz r3, 10007f88 +10007f86: 7003 strb r3, [r0, #0] +10007f88: 2300 movs r3, #0 +10007f8a: 6143 str r3, [r0, #20] +10007f8c: 6183 str r3, [r0, #24] +10007f8e: 4770 bx lr +10007f90: 4c414d50 .word 0x4c414d50 +10007f94: 1004a5e0 .word 0x1004a5e0 + +10007f98 : +10007f98: 7803 ldrb r3, [r0, #0] +10007f9a: b5f0 push {r4, r5, r6, r7, lr} +10007f9c: 2b00 cmp r3, #0 +10007f9e: d044 beq.n 1000802a +10007fa0: 7d0b ldrb r3, [r1, #20] +10007fa2: 2b00 cmp r3, #0 +10007fa4: d041 beq.n 1000802a +10007fa6: 6943 ldr r3, [r0, #20] +10007fa8: 688e ldr r6, [r1, #8] +10007faa: b1ab cbz r3, 10007fd8 +10007fac: 2300 movs r3, #0 +10007fae: f04f 0eff mov.w lr, #255 ; 0xff +10007fb2: 42b3 cmp r3, r6 +10007fb4: d014 beq.n 10007fe0 +10007fb6: 684c ldr r4, [r1, #4] +10007fb8: eb03 0243 add.w r2, r3, r3, lsl #1 +10007fbc: 4422 add r2, r4 +10007fbe: 7894 ldrb r4, [r2, #2] +10007fc0: 6907 ldr r7, [r0, #16] +10007fc2: 6885 ldr r5, [r0, #8] +10007fc4: 42bc cmp r4, r7 +10007fc6: d805 bhi.n 10007fd4 +10007fc8: fbbe fcf5 udiv ip, lr, r5 +10007fcc: 4464 add r4, ip +10007fce: 42a7 cmp r7, r4 +10007fd0: d223 bcs.n 1000801a +10007fd2: 7097 strb r7, [r2, #2] +10007fd4: 6185 str r5, [r0, #24] +10007fd6: e021 b.n 1000801c +10007fd8: 27ff movs r7, #255 ; 0xff +10007fda: 469e mov lr, r3 +10007fdc: 42b3 cmp r3, r6 +10007fde: d106 bne.n 10007fee +10007fe0: 6983 ldr r3, [r0, #24] +10007fe2: 6882 ldr r2, [r0, #8] +10007fe4: 3301 adds r3, #1 +10007fe6: 4293 cmp r3, r2 +10007fe8: 6183 str r3, [r0, #24] +10007fea: d219 bcs.n 10008020 +10007fec: bdf0 pop {r4, r5, r6, r7, pc} +10007fee: 684c ldr r4, [r1, #4] +10007ff0: eb03 0243 add.w r2, r3, r3, lsl #1 +10007ff4: 4422 add r2, r4 +10007ff6: 68c5 ldr r5, [r0, #12] +10007ff8: 7894 ldrb r4, [r2, #2] +10007ffa: 42ac cmp r4, r5 +10007ffc: 6885 ldr r5, [r0, #8] +10007ffe: d90a bls.n 10008016 +10008000: fbb7 fcf5 udiv ip, r7, r5 +10008004: 4564 cmp r4, ip +10008006: d904 bls.n 10008012 +10008008: eba4 040c sub.w r4, r4, ip +1000800c: 7094 strb r4, [r2, #2] +1000800e: 3301 adds r3, #1 +10008010: e7e4 b.n 10007fdc +10008012: f882 e002 strb.w lr, [r2, #2] +10008016: 6185 str r5, [r0, #24] +10008018: e7f9 b.n 1000800e +1000801a: 7094 strb r4, [r2, #2] +1000801c: 3301 adds r3, #1 +1000801e: e7c8 b.n 10007fb2 +10008020: 6942 ldr r2, [r0, #20] +10008022: 2300 movs r3, #0 +10008024: b112 cbz r2, 1000802c +10008026: 6143 str r3, [r0, #20] +10008028: 6183 str r3, [r0, #24] +1000802a: bdf0 pop {r4, r5, r6, r7, pc} +1000802c: 2201 movs r2, #1 +1000802e: 6142 str r2, [r0, #20] +10008030: e7fa b.n 10008028 + ... + +10008034 : +10008034: 4b07 ldr r3, [pc, #28] ; (10008054 ) +10008036: 6842 ldr r2, [r0, #4] +10008038: 429a cmp r2, r3 +1000803a: d009 beq.n 10008050 +1000803c: 6043 str r3, [r0, #4] +1000803e: 2300 movs r3, #0 +10008040: 2214 movs r2, #20 +10008042: 7003 strb r3, [r0, #0] +10008044: 7283 strb r3, [r0, #10] +10008046: 2301 movs r3, #1 +10008048: 7202 strb r2, [r0, #8] +1000804a: 4a03 ldr r2, [pc, #12] ; (10008058 ) +1000804c: 7243 strb r3, [r0, #9] +1000804e: 6013 str r3, [r2, #0] +10008050: 4770 bx lr +10008052: bf00 nop +10008054: 4c414d50 .word 0x4c414d50 +10008058: 1004a5e0 .word 0x1004a5e0 + +1000805c : +1000805c: 7803 ldrb r3, [r0, #0] +1000805e: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10008062: b18b cbz r3, 10008088 +10008064: 7d0b ldrb r3, [r1, #20] +10008066: b17b cbz r3, 10008088 +10008068: 7a82 ldrb r2, [r0, #10] +1000806a: 7a05 ldrb r5, [r0, #8] +1000806c: 4614 mov r4, r2 +1000806e: 462f mov r7, r5 +10008070: 2300 movs r3, #0 +10008072: f04f 08ff mov.w r8, #255 ; 0xff +10008076: f8d1 e008 ldr.w lr, [r1, #8] +1000807a: f8df c038 ldr.w ip, [pc, #56] ; 100080b4 +1000807e: 4573 cmp r3, lr +10008080: d104 bne.n 1000808c +10008082: 7a43 ldrb r3, [r0, #9] +10008084: 441a add r2, r3 +10008086: 7282 strb r2, [r0, #10] +10008088: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1000808c: 42bb cmp r3, r7 +1000808e: bf08 it eq +10008090: 4614 moveq r4, r2 +10008092: 684e ldr r6, [r1, #4] +10008094: f81c 9004 ldrb.w r9, [ip, r4] +10008098: eb03 0a43 add.w sl, r3, r3, lsl #1 +1000809c: 4456 add r6, sl +1000809e: f886 9002 strb.w r9, [r6, #2] +100080a2: fb98 f6f5 sdiv r6, r8, r5 +100080a6: 4434 add r4, r6 +100080a8: bf08 it eq +100080aa: 195f addeq r7, r3, r5 +100080ac: b2e4 uxtb r4, r4 +100080ae: 3301 adds r3, #1 +100080b0: e7e5 b.n 1000807e +100080b2: bf00 nop +100080b4: 10044c3e .word 0x10044c3e + +100080b8 : +100080b8: 4b08 ldr r3, [pc, #32] ; (100080dc ) +100080ba: 6882 ldr r2, [r0, #8] +100080bc: 429a cmp r2, r3 +100080be: d00b beq.n 100080d8 +100080c0: 6083 str r3, [r0, #8] +100080c2: 2380 movs r3, #128 ; 0x80 +100080c4: 7043 strb r3, [r0, #1] +100080c6: 23ff movs r3, #255 ; 0xff +100080c8: 7083 strb r3, [r0, #2] +100080ca: 70c3 strb r3, [r0, #3] +100080cc: 2300 movs r3, #0 +100080ce: 2201 movs r2, #1 +100080d0: 7003 strb r3, [r0, #0] +100080d2: 7103 strb r3, [r0, #4] +100080d4: 4b02 ldr r3, [pc, #8] ; (100080e0 ) +100080d6: 601a str r2, [r3, #0] +100080d8: 4770 bx lr +100080da: bf00 nop +100080dc: 4c414d50 .word 0x4c414d50 +100080e0: 1004a5e0 .word 0x1004a5e0 + +100080e4 : +100080e4: 7d4b ldrb r3, [r1, #21] +100080e6: b5f0 push {r4, r5, r6, r7, lr} +100080e8: b1a3 cbz r3, 10008114 +100080ea: 2300 movs r3, #0 +100080ec: 2501 movs r5, #1 +100080ee: 461e mov r6, r3 +100080f0: 688c ldr r4, [r1, #8] +100080f2: 42a3 cmp r3, r4 +100080f4: d100 bne.n 100080f8 +100080f6: bdf0 pop {r4, r5, r6, r7, pc} +100080f8: 6848 ldr r0, [r1, #4] +100080fa: eb03 0243 add.w r2, r3, r3, lsl #1 +100080fe: 4402 add r2, r0 +10008100: 7890 ldrb r0, [r2, #2] +10008102: 68cf ldr r7, [r1, #12] +10008104: 3301 adds r3, #1 +10008106: 42b8 cmp r0, r7 +10008108: bf39 ittee cc +1000810a: 3001 addcc r0, #1 +1000810c: 7090 strbcc r0, [r2, #2] +1000810e: 750d strbcs r5, [r1, #20] +10008110: 754e strbcs r6, [r1, #21] +10008112: e7ee b.n 100080f2 +10008114: 7d0a ldrb r2, [r1, #20] +10008116: b972 cbnz r2, 10008136 +10008118: 4613 mov r3, r2 +1000811a: 688c ldr r4, [r1, #8] +1000811c: 42a3 cmp r3, r4 +1000811e: d100 bne.n 10008122 +10008120: bdf0 pop {r4, r5, r6, r7, pc} +10008122: 6848 ldr r0, [r1, #4] +10008124: eb03 0243 add.w r2, r3, r3, lsl #1 +10008128: 4402 add r2, r0 +1000812a: 7890 ldrb r0, [r2, #2] +1000812c: b108 cbz r0, 10008132 +1000812e: 3801 subs r0, #1 +10008130: 7090 strb r0, [r2, #2] +10008132: 3301 adds r3, #1 +10008134: e7f2 b.n 1000811c +10008136: 7802 ldrb r2, [r0, #0] +10008138: b132 cbz r2, 10008148 +1000813a: 7902 ldrb r2, [r0, #4] +1000813c: b122 cbz r2, 10008148 +1000813e: 688e ldr r6, [r1, #8] +10008140: 42b3 cmp r3, r6 +10008142: d102 bne.n 1000814a +10008144: 2300 movs r3, #0 +10008146: 7103 strb r3, [r0, #4] +10008148: bdf0 pop {r4, r5, r6, r7, pc} +1000814a: 684d ldr r5, [r1, #4] +1000814c: 7847 ldrb r7, [r0, #1] +1000814e: eb03 0443 add.w r4, r3, r3, lsl #1 +10008152: 552f strb r7, [r5, r4] +10008154: 192a adds r2, r5, r4 +10008156: 7884 ldrb r4, [r0, #2] +10008158: 3301 adds r3, #1 +1000815a: 7054 strb r4, [r2, #1] +1000815c: 78c4 ldrb r4, [r0, #3] +1000815e: 7094 strb r4, [r2, #2] +10008160: e7ee b.n 10008140 + ... + +10008164 : +10008164: b508 push {r3, lr} +10008166: 20e4 movs r0, #228 ; 0xe4 +10008168: f7ff fdf4 bl 10007d54 +1000816c: 4b0f ldr r3, [pc, #60] ; (100081ac ) +1000816e: 4601 mov r1, r0 +10008170: 6018 str r0, [r3, #0] +10008172: b928 cbnz r0, 10008180 +10008174: e8bd 4008 ldmia.w sp!, {r3, lr} +10008178: 490d ldr r1, [pc, #52] ; (100081b0 ) +1000817a: 480e ldr r0, [pc, #56] ; (100081b4 ) +1000817c: f012 bd00 b.w 1001ab80 +10008180: 480d ldr r0, [pc, #52] ; (100081b8 ) +10008182: f7ff fe4f bl 10007e24 +10008186: 480d ldr r0, [pc, #52] ; (100081bc ) +10008188: f7ff feae bl 10007ee8 +1000818c: 480c ldr r0, [pc, #48] ; (100081c0 ) +1000818e: f7ff fee9 bl 10007f64 +10008192: 480c ldr r0, [pc, #48] ; (100081c4 ) +10008194: f7ff ff90 bl 100080b8 +10008198: 480b ldr r0, [pc, #44] ; (100081c8 ) +1000819a: f7ff ff4b bl 10008034 +1000819e: e8bd 4008 ldmia.w sp!, {r3, lr} +100081a2: 21ff movs r1, #255 ; 0xff +100081a4: 4804 ldr r0, [pc, #16] ; (100081b8 ) +100081a6: f7ff be91 b.w 10007ecc +100081aa: bf00 nop +100081ac: 1004a640 .word 0x1004a640 +100081b0: 1003ebe7 .word 0x1003ebe7 +100081b4: 1003ebfd .word 0x1003ebfd +100081b8: 1004a628 .word 0x1004a628 +100081bc: 1004a60c .word 0x1004a60c +100081c0: 1004a5f0 .word 0x1004a5f0 +100081c4: 1004a5e4 .word 0x1004a5e4 +100081c8: 1004a61c .word 0x1004a61c + +100081cc : +100081cc: b580 push {r7, lr} +100081ce: 2001 movs r0, #1 +100081d0: f00d fc8e bl 10015af0 +100081d4: 4c16 ldr r4, [pc, #88] ; (10008230 ) +100081d6: 4d17 ldr r5, [pc, #92] ; (10008234 ) +100081d8: 4e17 ldr r6, [pc, #92] ; (10008238 ) +100081da: 4f18 ldr r7, [pc, #96] ; (1000823c ) +100081dc: 6020 str r0, [r4, #0] +100081de: 2300 movs r3, #0 +100081e0: f241 3288 movw r2, #5000 ; 0x1388 +100081e4: 4619 mov r1, r3 +100081e6: 6820 ldr r0, [r4, #0] +100081e8: f00d fcf6 bl 10015bd8 +100081ec: b1e0 cbz r0, 10008228 +100081ee: 4911 ldr r1, [pc, #68] ; (10008234 ) +100081f0: 4630 mov r0, r6 +100081f2: f7ff fe8d bl 10007f10 +100081f6: 490f ldr r1, [pc, #60] ; (10008234 ) +100081f8: 4638 mov r0, r7 +100081fa: f7ff ff73 bl 100080e4 +100081fe: 490d ldr r1, [pc, #52] ; (10008234 ) +10008200: 480f ldr r0, [pc, #60] ; (10008240 ) +10008202: f7ff ff2b bl 1000805c +10008206: 490b ldr r1, [pc, #44] ; (10008234 ) +10008208: 480e ldr r0, [pc, #56] ; (10008244 ) +1000820a: f7ff fec5 bl 10007f98 +1000820e: 480e ldr r0, [pc, #56] ; (10008248 ) +10008210: 8a2b ldrh r3, [r5, #16] +10008212: 68aa ldr r2, [r5, #8] +10008214: 6869 ldr r1, [r5, #4] +10008216: 6800 ldr r0, [r0, #0] +10008218: f7ff fcbe bl 10007b98 +1000821c: 2300 movs r3, #0 +1000821e: 6820 ldr r0, [r4, #0] +10008220: 461a mov r2, r3 +10008222: 4619 mov r1, r3 +10008224: f00d fbea bl 100159fc +10008228: f010 fb9e bl 10018968 +1000822c: e7d7 b.n 100081de +1000822e: bf00 nop +10008230: 1004a5dc .word 0x1004a5dc +10008234: 1004a628 .word 0x1004a628 +10008238: 1004a60c .word 0x1004a60c +1000823c: 1004a5e4 .word 0x1004a5e4 +10008240: 1004a61c .word 0x1004a61c +10008244: 1004a5f0 .word 0x1004a5f0 +10008248: 1004a640 .word 0x1004a640 + +1000824c : +1000824c: b538 push {r3, r4, r5, lr} +1000824e: 6843 ldr r3, [r0, #4] +10008250: 4605 mov r5, r0 +10008252: 2b04 cmp r3, #4 +10008254: d105 bne.n 10008262 +10008256: 68ab ldr r3, [r5, #8] +10008258: 68dc ldr r4, [r3, #12] +1000825a: f103 020c add.w r2, r3, #12 +1000825e: b974 cbnz r4, 1000827e +10008260: bd38 pop {r3, r4, r5, pc} +10008262: 2304 movs r3, #4 +10008264: 6043 str r3, [r0, #4] +10008266: 6883 ldr r3, [r0, #8] +10008268: 695b ldr r3, [r3, #20] +1000826a: b103 cbz r3, 1000826e +1000826c: 4798 blx r3 +1000826e: 4b15 ldr r3, [pc, #84] ; (100082c4 ) +10008270: 681b ldr r3, [r3, #0] +10008272: 2b00 cmp r3, #0 +10008274: d0f4 beq.n 10008260 +10008276: 68ab ldr r3, [r5, #8] +10008278: 2b00 cmp r3, #0 +1000827a: d1ec bne.n 10008256 +1000827c: bd38 pop {r3, r4, r5, pc} +1000827e: 42ac cmp r4, r5 +10008280: 6961 ldr r1, [r4, #20] +10008282: d11b bne.n 100082bc +10008284: 2500 movs r5, #0 +10008286: 6011 str r1, [r2, #0] +10008288: 6165 str r5, [r4, #20] +1000828a: 79da ldrb r2, [r3, #7] +1000828c: 3a01 subs r2, #1 +1000828e: 71da strb r2, [r3, #7] +10008290: 6b60 ldr r0, [r4, #52] ; 0x34 +10008292: b110 cbz r0, 1000829a +10008294: f00c fffa bl 1001528c +10008298: 6365 str r5, [r4, #52] ; 0x34 +1000829a: 69e0 ldr r0, [r4, #28] +1000829c: b118 cbz r0, 100082a6 +1000829e: f00c fff5 bl 1001528c +100082a2: 2300 movs r3, #0 +100082a4: 61e3 str r3, [r4, #28] +100082a6: 6a60 ldr r0, [r4, #36] ; 0x24 +100082a8: b118 cbz r0, 100082b2 +100082aa: f00c ffef bl 1001528c +100082ae: 2300 movs r3, #0 +100082b0: 6263 str r3, [r4, #36] ; 0x24 +100082b2: 4620 mov r0, r4 +100082b4: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +100082b8: f00c bfe8 b.w 1001528c +100082bc: f104 0214 add.w r2, r4, #20 +100082c0: 460c mov r4, r1 +100082c2: e7cc b.n 1000825e +100082c4: 1004a644 .word 0x1004a644 + +100082c8 : +100082c8: b5f8 push {r3, r4, r5, r6, r7, lr} +100082ca: 8803 ldrh r3, [r0, #0] +100082cc: 4604 mov r4, r0 +100082ce: f443 7380 orr.w r3, r3, #256 ; 0x100 +100082d2: 8003 strh r3, [r0, #0] +100082d4: 460e mov r6, r1 +100082d6: 2900 cmp r1, #0 +100082d8: d048 beq.n 1000836c +100082da: 6a40 ldr r0, [r0, #36] ; 0x24 +100082dc: 2800 cmp r0, #0 +100082de: d033 beq.n 10008348 +100082e0: 8823 ldrh r3, [r4, #0] +100082e2: 071a lsls r2, r3, #28 +100082e4: d51f bpl.n 10008326 +100082e6: 8de1 ldrh r1, [r4, #46] ; 0x2e +100082e8: 8d65 ldrh r5, [r4, #42] ; 0x2a +100082ea: 42a9 cmp r1, r5 +100082ec: d21b bcs.n 10008326 +100082ee: 428e cmp r6, r1 +100082f0: eba5 0501 sub.w r5, r5, r1 +100082f4: d81b bhi.n 1000832e +100082f6: 462a mov r2, r5 +100082f8: 4401 add r1, r0 +100082fa: f012 fc69 bl 1001abd0 +100082fe: 8de3 ldrh r3, [r4, #46] ; 0x2e +10008300: 8565 strh r5, [r4, #42] ; 0x2a +10008302: 429e cmp r6, r3 +10008304: d006 beq.n 10008314 +10008306: 4435 add r5, r6 +10008308: 1c69 adds r1, r5, #1 +1000830a: 6a60 ldr r0, [r4, #36] ; 0x24 +1000830c: f00c ffe2 bl 100152d4 +10008310: 6260 str r0, [r4, #36] ; 0x24 +10008312: b1b0 cbz r0, 10008342 +10008314: 2000 movs r0, #0 +10008316: 6a63 ldr r3, [r4, #36] ; 0x24 +10008318: 5558 strb r0, [r3, r5] +1000831a: 8823 ldrh r3, [r4, #0] +1000831c: 85e0 strh r0, [r4, #46] ; 0x2e +1000831e: f360 2308 bfi r3, r0, #8, #1 +10008322: 8023 strh r3, [r4, #0] +10008324: bdf8 pop {r3, r4, r5, r6, r7, pc} +10008326: 2500 movs r5, #0 +10008328: f00c ffb0 bl 1001528c +1000832c: 6265 str r5, [r4, #36] ; 0x24 +1000832e: 442e add r6, r5 +10008330: 1c70 adds r0, r6, #1 +10008332: f00c ff0f bl 10015154 +10008336: 4607 mov r7, r0 +10008338: b940 cbnz r0, 1000834c +1000833a: 8823 ldrh r3, [r4, #0] +1000833c: f360 2308 bfi r3, r0, #8, #1 +10008340: 8023 strh r3, [r4, #0] +10008342: f04f 30ff mov.w r0, #4294967295 +10008346: bdf8 pop {r3, r4, r5, r6, r7, pc} +10008348: 4605 mov r5, r0 +1000834a: e7f0 b.n 1000832e +1000834c: 2300 movs r3, #0 +1000834e: 5583 strb r3, [r0, r6] +10008350: b145 cbz r5, 10008364 +10008352: 8de3 ldrh r3, [r4, #46] ; 0x2e +10008354: 6a61 ldr r1, [r4, #36] ; 0x24 +10008356: 462a mov r2, r5 +10008358: 4419 add r1, r3 +1000835a: f012 fc39 bl 1001abd0 +1000835e: 6a60 ldr r0, [r4, #36] ; 0x24 +10008360: f00c ff94 bl 1001528c +10008364: 6267 str r7, [r4, #36] ; 0x24 +10008366: 8565 strh r5, [r4, #42] ; 0x2a +10008368: 2000 movs r0, #0 +1000836a: e7d6 b.n 1000831a +1000836c: 8803 ldrh r3, [r0, #0] +1000836e: 071b lsls r3, r3, #28 +10008370: d503 bpl.n 1000837a +10008372: 8dc1 ldrh r1, [r0, #46] ; 0x2e +10008374: 8d45 ldrh r5, [r0, #42] ; 0x2a +10008376: 42a9 cmp r1, r5 +10008378: d308 bcc.n 1000838c +1000837a: 2500 movs r5, #0 +1000837c: 6a60 ldr r0, [r4, #36] ; 0x24 +1000837e: 8565 strh r5, [r4, #42] ; 0x2a +10008380: 2800 cmp r0, #0 +10008382: d0f1 beq.n 10008368 +10008384: f00c ff82 bl 1001528c +10008388: 6265 str r5, [r4, #36] ; 0x24 +1000838a: e7ed b.n 10008368 +1000838c: 2900 cmp r1, #0 +1000838e: d0eb beq.n 10008368 +10008390: 6a40 ldr r0, [r0, #36] ; 0x24 +10008392: 1a6d subs r5, r5, r1 +10008394: 462a mov r2, r5 +10008396: 4401 add r1, r0 +10008398: f012 fc1a bl 1001abd0 +1000839c: 8565 strh r5, [r4, #42] ; 0x2a +1000839e: 1c69 adds r1, r5, #1 +100083a0: 6a60 ldr r0, [r4, #36] ; 0x24 +100083a2: f00c ff97 bl 100152d4 +100083a6: 6260 str r0, [r4, #36] ; 0x24 +100083a8: b918 cbnz r0, 100083b2 +100083aa: 8823 ldrh r3, [r4, #0] +100083ac: f360 2308 bfi r3, r0, #8, #1 +100083b0: e7c6 b.n 10008340 +100083b2: 5546 strb r6, [r0, r5] +100083b4: e7d8 b.n 10008368 + +100083b6 : +100083b6: b178 cbz r0, 100083d8 +100083b8: b171 cbz r1, 100083d8 +100083ba: 2303 movs r3, #3 +100083bc: 6043 str r3, [r0, #4] +100083be: 2300 movs r3, #0 +100083c0: 8801 ldrh r1, [r0, #0] +100083c2: 8183 strh r3, [r0, #12] +100083c4: f363 1186 bfi r1, r3, #6, #1 +100083c8: 8001 strh r1, [r0, #0] +100083ca: 8801 ldrh r1, [r0, #0] +100083cc: 0689 lsls r1, r1, #26 +100083ce: d406 bmi.n 100083de +100083d0: 6883 ldr r3, [r0, #8] +100083d2: 69db ldr r3, [r3, #28] +100083d4: b11b cbz r3, 100083de +100083d6: 4718 bx r3 +100083d8: f06f 000d mvn.w r0, #13 +100083dc: 4770 bx lr +100083de: 4618 mov r0, r3 +100083e0: 4770 bx lr + ... + +100083e4 : +100083e4: f100 030f add.w r3, r0, #15 +100083e8: b2db uxtb r3, r3 +100083ea: 2b0f cmp r3, #15 +100083ec: d801 bhi.n 100083f2 +100083ee: f006 b9bd b.w 1000e76c +100083f2: 4801 ldr r0, [pc, #4] ; (100083f8 ) +100083f4: 4770 bx lr +100083f6: bf00 nop +100083f8: 1003ec18 .word 0x1003ec18 + +100083fc : +100083fc: b51f push {r0, r1, r2, r3, r4, lr} +100083fe: 6983 ldr r3, [r0, #24] +10008400: 6884 ldr r4, [r0, #8] +10008402: b17b cbz r3, 10008424 +10008404: 8bd9 ldrh r1, [r3, #30] +10008406: 79e4 ldrb r4, [r4, #7] +10008408: 7c43 ldrb r3, [r0, #17] +1000840a: 7c02 ldrb r2, [r0, #16] +1000840c: 9403 str r4, [sp, #12] +1000840e: 89c4 ldrh r4, [r0, #14] +10008410: 9402 str r4, [sp, #8] +10008412: 7cc4 ldrb r4, [r0, #19] +10008414: 9401 str r4, [sp, #4] +10008416: 7c80 ldrb r0, [r0, #18] +10008418: 9000 str r0, [sp, #0] +1000841a: 4803 ldr r0, [pc, #12] ; (10008428 ) +1000841c: f012 fbb0 bl 1001ab80 +10008420: b004 add sp, #16 +10008422: bd10 pop {r4, pc} +10008424: 8861 ldrh r1, [r4, #2] +10008426: e7ee b.n 10008406 +10008428: 1003ec8a .word 0x1003ec8a + +1000842c : +1000842c: 2200 movs r2, #0 +1000842e: b508 push {r3, lr} +10008430: 6182 str r2, [r0, #24] +10008432: f7ff ffe3 bl 100083fc +10008436: e8bd 4008 ldmia.w sp!, {r3, lr} +1000843a: 4801 ldr r0, [pc, #4] ; (10008440 ) +1000843c: f012 bba0 b.w 1001ab80 +10008440: 1003fbf6 .word 0x1003fbf6 + +10008444 : +10008444: b508 push {r3, lr} +10008446: f7ff ffd9 bl 100083fc +1000844a: 4802 ldr r0, [pc, #8] ; (10008454 ) +1000844c: f012 fb98 bl 1001ab80 +10008450: 2000 movs r0, #0 +10008452: bd08 pop {r3, pc} +10008454: 1003ec82 .word 0x1003ec82 + +10008458 : +10008458: b508 push {r3, lr} +1000845a: f7ff ffcf bl 100083fc +1000845e: 4802 ldr r0, [pc, #8] ; (10008468 ) +10008460: f012 fb8e bl 1001ab80 +10008464: 2000 movs r0, #0 +10008466: bd08 pop {r3, pc} +10008468: 1003ecc2 .word 0x1003ecc2 + +1000846c : +1000846c: b510 push {r4, lr} +1000846e: 4604 mov r4, r0 +10008470: f7ff ffc4 bl 100083fc +10008474: 8d61 ldrh r1, [r4, #42] ; 0x2a +10008476: 4802 ldr r0, [pc, #8] ; (10008480 ) +10008478: f012 fb82 bl 1001ab80 +1000847c: 2000 movs r0, #0 +1000847e: bd10 pop {r4, pc} +10008480: 1003eca7 .word 0x1003eca7 + +10008484 : +10008484: b570 push {r4, r5, r6, lr} +10008486: 6985 ldr r5, [r0, #24] +10008488: 4604 mov r4, r0 +1000848a: 2d00 cmp r5, #0 +1000848c: d073 beq.n 10008576 +1000848e: 6843 ldr r3, [r0, #4] +10008490: 2b01 cmp r3, #1 +10008492: d03a beq.n 1000850a +10008494: 2b04 cmp r3, #4 +10008496: d038 beq.n 1000850a +10008498: 2301 movs r3, #1 +1000849a: 2600 movs r6, #0 +1000849c: 6043 str r3, [r0, #4] +1000849e: 8803 ldrh r3, [r0, #0] +100084a0: 8186 strh r6, [r0, #12] +100084a2: f366 1386 bfi r3, r6, #6, #1 +100084a6: 8003 strh r3, [r0, #0] +100084a8: 8803 ldrh r3, [r0, #0] +100084aa: 4631 mov r1, r6 +100084ac: f043 0310 orr.w r3, r3, #16 +100084b0: 8003 strh r3, [r0, #0] +100084b2: 8803 ldrh r3, [r0, #0] +100084b4: f043 0320 orr.w r3, r3, #32 +100084b8: 8003 strh r3, [r0, #0] +100084ba: 4628 mov r0, r5 +100084bc: f009 f8d4 bl 10011668 +100084c0: 4631 mov r1, r6 +100084c2: 4628 mov r0, r5 +100084c4: f009 f8d3 bl 1001166e +100084c8: 4632 mov r2, r6 +100084ca: 4631 mov r1, r6 +100084cc: 4628 mov r0, r5 +100084ce: f009 f8d6 bl 1001167e +100084d2: 4631 mov r1, r6 +100084d4: 4628 mov r0, r5 +100084d6: f009 f8cd bl 10011674 +100084da: 8e23 ldrh r3, [r4, #48] ; 0x30 +100084dc: b12b cbz r3, 100084ea +100084de: f241 61d0 movw r1, #5840 ; 0x16d0 +100084e2: 4628 mov r0, r5 +100084e4: f009 f876 bl 100115d4 +100084e8: 8626 strh r6, [r4, #48] ; 0x30 +100084ea: 69e0 ldr r0, [r4, #28] +100084ec: b118 cbz r0, 100084f6 +100084ee: f00c fecd bl 1001528c +100084f2: 2300 movs r3, #0 +100084f4: 61e3 str r3, [r4, #28] +100084f6: 2600 movs r6, #0 +100084f8: 6a60 ldr r0, [r4, #36] ; 0x24 +100084fa: 8526 strh r6, [r4, #40] ; 0x28 +100084fc: 85a6 strh r6, [r4, #44] ; 0x2c +100084fe: b110 cbz r0, 10008506 +10008500: f00c fec4 bl 1001528c +10008504: 6266 str r6, [r4, #36] ; 0x24 +10008506: 8566 strh r6, [r4, #42] ; 0x2a +10008508: 85e6 strh r6, [r4, #46] ; 0x2e +1000850a: 6863 ldr r3, [r4, #4] +1000850c: 2b01 cmp r3, #1 +1000850e: d001 beq.n 10008514 +10008510: 2b04 cmp r3, #4 +10008512: d130 bne.n 10008576 +10008514: 69ab ldr r3, [r5, #24] +10008516: b10b cbz r3, 1000851c +10008518: 2b0a cmp r3, #10 +1000851a: d106 bne.n 1000852a +1000851c: 2300 movs r3, #0 +1000851e: 4620 mov r0, r4 +10008520: 61a3 str r3, [r4, #24] +10008522: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10008526: f7ff be91 b.w 1000824c +1000852a: 89a3 ldrh r3, [r4, #12] +1000852c: 2b03 cmp r3, #3 +1000852e: d90f bls.n 10008550 +10008530: 4620 mov r0, r4 +10008532: f7ff ff63 bl 100083fc +10008536: 4810 ldr r0, [pc, #64] ; (10008578 ) +10008538: f012 fb22 bl 1001ab80 +1000853c: 2200 movs r2, #0 +1000853e: 4628 mov r0, r5 +10008540: 4611 mov r1, r2 +10008542: f009 f89c bl 1001167e +10008546: 2100 movs r1, #0 +10008548: 4628 mov r0, r5 +1000854a: f009 fba5 bl 10011c98 +1000854e: e7e5 b.n 1000851c +10008550: 4628 mov r0, r5 +10008552: f009 fb01 bl 10011b58 +10008556: 2800 cmp r0, #0 +10008558: d0e0 beq.n 1000851c +1000855a: 4620 mov r0, r4 +1000855c: f7ff ff4e bl 100083fc +10008560: 8be9 ldrh r1, [r5, #30] +10008562: 4806 ldr r0, [pc, #24] ; (1000857c ) +10008564: f012 fb0c bl 1001ab80 +10008568: 4628 mov r0, r5 +1000856a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1000856e: 220a movs r2, #10 +10008570: 4903 ldr r1, [pc, #12] ; (10008580 ) +10008572: f009 b884 b.w 1001167e +10008576: bd70 pop {r4, r5, r6, pc} +10008578: 1003ed2a .word 0x1003ed2a +1000857c: 1003ed38 .word 0x1003ed38 +10008580: 10008585 .word 0x10008585 + +10008584 : +10008584: b538 push {r3, r4, r5, lr} +10008586: 460d mov r5, r1 +10008588: 4604 mov r4, r0 +1000858a: b978 cbnz r0, 100085ac +1000858c: 4602 mov r2, r0 +1000858e: 4601 mov r1, r0 +10008590: 4628 mov r0, r5 +10008592: f009 f874 bl 1001167e +10008596: 4621 mov r1, r4 +10008598: 4628 mov r0, r5 +1000859a: f009 f86b bl 10011674 +1000859e: 4628 mov r0, r5 +100085a0: 4621 mov r1, r4 +100085a2: f009 fb79 bl 10011c98 +100085a6: f06f 0009 mvn.w r0, #9 +100085aa: bd38 pop {r3, r4, r5, pc} +100085ac: 6983 ldr r3, [r0, #24] +100085ae: b183 cbz r3, 100085d2 +100085b0: 6842 ldr r2, [r0, #4] +100085b2: 2a01 cmp r2, #1 +100085b4: d00d beq.n 100085d2 +100085b6: 8983 ldrh r3, [r0, #12] +100085b8: 6989 ldr r1, [r1, #24] +100085ba: 3301 adds r3, #1 +100085bc: b29b uxth r3, r3 +100085be: 2904 cmp r1, #4 +100085c0: 8183 strh r3, [r0, #12] +100085c2: d106 bne.n 100085d2 +100085c4: 2a02 cmp r2, #2 +100085c6: d10b bne.n 100085e0 +100085c8: 6882 ldr r2, [r0, #8] +100085ca: 7a12 ldrb r2, [r2, #8] +100085cc: b122 cbz r2, 100085d8 +100085ce: 4293 cmp r3, r2 +100085d0: d902 bls.n 100085d8 +100085d2: 4620 mov r0, r4 +100085d4: f7ff ff56 bl 10008484 +100085d8: f010 f9c6 bl 10018968 +100085dc: 2000 movs r0, #0 +100085de: bd38 pop {r3, r4, r5, pc} +100085e0: 2a03 cmp r2, #3 +100085e2: d1f9 bne.n 100085d8 +100085e4: 6882 ldr r2, [r0, #8] +100085e6: 7a52 ldrb r2, [r2, #9] +100085e8: e7f0 b.n 100085cc + +100085ea : +100085ea: b5f8 push {r3, r4, r5, r6, r7, lr} +100085ec: 460f mov r7, r1 +100085ee: 4616 mov r6, r2 +100085f0: 461d mov r5, r3 +100085f2: 4604 mov r4, r0 +100085f4: 2800 cmp r0, #0 +100085f6: d051 beq.n 1000869c +100085f8: 2900 cmp r1, #0 +100085fa: d04f beq.n 1000869c +100085fc: b102 cbz r2, 10008600 +100085fe: b123 cbz r3, 1000860a +10008600: 4620 mov r0, r4 +10008602: f7ff ff3f bl 10008484 +10008606: 4628 mov r0, r5 +10008608: bdf8 pop {r3, r4, r5, r6, r7, pc} +1000860a: 8803 ldrh r3, [r0, #0] +1000860c: f3c3 1300 ubfx r3, r3, #4, #1 +10008610: b92b cbnz r3, 1000861e +10008612: 6882 ldr r2, [r0, #8] +10008614: 6a12 ldr r2, [r2, #32] +10008616: b112 cbz r2, 1000861e +10008618: 6842 ldr r2, [r0, #4] +1000861a: 2a01 cmp r2, #1 +1000861c: d10c bne.n 10008638 +1000861e: 8e23 ldrh r3, [r4, #48] ; 0x30 +10008620: 8931 ldrh r1, [r6, #8] +10008622: 4638 mov r0, r7 +10008624: 4419 add r1, r3 +10008626: b289 uxth r1, r1 +10008628: f008 ffd4 bl 100115d4 +1000862c: 2300 movs r3, #0 +1000862e: 4630 mov r0, r6 +10008630: 8623 strh r3, [r4, #48] ; 0x30 +10008632: f008 fd08 bl 10011046 +10008636: e7e6 b.n 10008606 +10008638: 2203 movs r2, #3 +1000863a: 8931 ldrh r1, [r6, #8] +1000863c: 6042 str r2, [r0, #4] +1000863e: 8183 strh r3, [r0, #12] +10008640: 2900 cmp r1, #0 +10008642: d0e0 beq.n 10008606 +10008644: f7ff fe40 bl 100082c8 +10008648: 4605 mov r5, r0 +1000864a: 2800 cmp r0, #0 +1000864c: d1db bne.n 10008606 +1000864e: 6a60 ldr r0, [r4, #36] ; 0x24 +10008650: 8d61 ldrh r1, [r4, #42] ; 0x2a +10008652: 462b mov r3, r5 +10008654: 4401 add r1, r0 +10008656: 8932 ldrh r2, [r6, #8] +10008658: 4630 mov r0, r6 +1000865a: f008 fe39 bl 100112d0 +1000865e: 8d63 ldrh r3, [r4, #42] ; 0x2a +10008660: 4605 mov r5, r0 +10008662: 4403 add r3, r0 +10008664: 8563 strh r3, [r4, #42] ; 0x2a +10008666: 4630 mov r0, r6 +10008668: f008 fced bl 10011046 +1000866c: 8823 ldrh r3, [r4, #0] +1000866e: 071b lsls r3, r3, #28 +10008670: d410 bmi.n 10008694 +10008672: 4629 mov r1, r5 +10008674: 4638 mov r0, r7 +10008676: f008 ffad bl 100115d4 +1000867a: 68a3 ldr r3, [r4, #8] +1000867c: 4620 mov r0, r4 +1000867e: 6a1b ldr r3, [r3, #32] +10008680: 4798 blx r3 +10008682: 2100 movs r1, #0 +10008684: 4605 mov r5, r0 +10008686: 4620 mov r0, r4 +10008688: f7ff fe1e bl 100082c8 +1000868c: 2800 cmp r0, #0 +1000868e: bf18 it ne +10008690: 4605 movne r5, r0 +10008692: e7b8 b.n 10008606 +10008694: 8e21 ldrh r1, [r4, #48] ; 0x30 +10008696: 440d add r5, r1 +10008698: 8625 strh r5, [r4, #48] ; 0x30 +1000869a: e7ee b.n 1000867a +1000869c: f06f 050d mvn.w r5, #13 +100086a0: e7b1 b.n 10008606 + ... + +100086a4 : +100086a4: b538 push {r3, r4, r5, lr} +100086a6: 460d mov r5, r1 +100086a8: 4604 mov r4, r0 +100086aa: b1c0 cbz r0, 100086de +100086ac: f7ff fea6 bl 100083fc +100086b0: 4628 mov r0, r5 +100086b2: f7ff fe97 bl 100083e4 +100086b6: 4629 mov r1, r5 +100086b8: 4602 mov r2, r0 +100086ba: 4809 ldr r0, [pc, #36] ; (100086e0 ) +100086bc: f012 fa60 bl 1001ab80 +100086c0: 6863 ldr r3, [r4, #4] +100086c2: 2b01 cmp r3, #1 +100086c4: d00b beq.n 100086de +100086c6: 69a3 ldr r3, [r4, #24] +100086c8: b14b cbz r3, 100086de +100086ca: 68a3 ldr r3, [r4, #8] +100086cc: 4805 ldr r0, [pc, #20] ; (100086e4 ) +100086ce: 8859 ldrh r1, [r3, #2] +100086d0: f012 fa56 bl 1001ab80 +100086d4: 4620 mov r0, r4 +100086d6: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +100086da: f7ff bdb7 b.w 1000824c +100086de: bd38 pop {r3, r4, r5, pc} +100086e0: 1003ec1a .word 0x1003ec1a +100086e4: 1003ec29 .word 0x1003ec29 + +100086e8 : +100086e8: 6983 ldr r3, [r0, #24] +100086ea: b510 push {r4, lr} +100086ec: b193 cbz r3, 10008714 +100086ee: 89c2 ldrh r2, [r0, #14] +100086f0: 8c1c ldrh r4, [r3, #32] +100086f2: 6881 ldr r1, [r0, #8] +100086f4: 4294 cmp r4, r2 +100086f6: 8849 ldrh r1, [r1, #2] +100086f8: 6900 ldr r0, [r0, #16] +100086fa: d105 bne.n 10008708 +100086fc: 8bdc ldrh r4, [r3, #30] +100086fe: 428c cmp r4, r1 +10008700: d102 bne.n 10008708 +10008702: 685c ldr r4, [r3, #4] +10008704: 42a0 cmp r0, r4 +10008706: d005 beq.n 10008714 +10008708: 4b0e ldr r3, [pc, #56] ; (10008744 ) +1000870a: 681b ldr r3, [r3, #0] +1000870c: b923 cbnz r3, 10008718 +1000870e: 4b0e ldr r3, [pc, #56] ; (10008748 ) +10008710: 681b ldr r3, [r3, #0] +10008712: b963 cbnz r3, 1000872e +10008714: 4618 mov r0, r3 +10008716: bd10 pop {r4, pc} +10008718: 8c1c ldrh r4, [r3, #32] +1000871a: 4294 cmp r4, r2 +1000871c: d105 bne.n 1000872a +1000871e: 8bdc ldrh r4, [r3, #30] +10008720: 428c cmp r4, r1 +10008722: d102 bne.n 1000872a +10008724: 685c ldr r4, [r3, #4] +10008726: 42a0 cmp r0, r4 +10008728: d0f4 beq.n 10008714 +1000872a: 68db ldr r3, [r3, #12] +1000872c: e7ee b.n 1000870c +1000872e: 8c1c ldrh r4, [r3, #32] +10008730: 4294 cmp r4, r2 +10008732: d105 bne.n 10008740 +10008734: 8bdc ldrh r4, [r3, #30] +10008736: 428c cmp r4, r1 +10008738: d102 bne.n 10008740 +1000873a: 685c ldr r4, [r3, #4] +1000873c: 42a0 cmp r0, r4 +1000873e: d0e9 beq.n 10008714 +10008740: 68db ldr r3, [r3, #12] +10008742: e7e6 b.n 10008712 +10008744: 1004b1a4 .word 0x1004b1a4 +10008748: 1004b1c0 .word 0x1004b1c0 + +1000874c : +1000874c: b538 push {r3, r4, r5, lr} +1000874e: 4605 mov r5, r0 +10008750: f7ff ffca bl 100086e8 +10008754: 4604 mov r4, r0 +10008756: b1e8 cbz r0, 10008794 +10008758: 2100 movs r1, #0 +1000875a: f008 ff83 bl 10011664 +1000875e: 2100 movs r1, #0 +10008760: 4620 mov r0, r4 +10008762: f008 ff81 bl 10011668 +10008766: 2100 movs r1, #0 +10008768: 4620 mov r0, r4 +1000876a: f008 ff83 bl 10011674 +1000876e: 2200 movs r2, #0 +10008770: 4620 mov r0, r4 +10008772: 4611 mov r1, r2 +10008774: f008 ff83 bl 1001167e +10008778: 2100 movs r1, #0 +1000877a: 4620 mov r0, r4 +1000877c: f008 ff77 bl 1001166e +10008780: f241 61d0 movw r1, #5840 ; 0x16d0 +10008784: 4620 mov r0, r4 +10008786: f008 ff25 bl 100115d4 +1000878a: 4620 mov r0, r4 +1000878c: f009 f9e4 bl 10011b58 +10008790: 2300 movs r3, #0 +10008792: 61ab str r3, [r5, #24] +10008794: 4628 mov r0, r5 +10008796: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1000879a: f7ff bd57 b.w 1000824c + +1000879e : +1000879e: b510 push {r4, lr} +100087a0: 4604 mov r4, r0 +100087a2: b158 cbz r0, 100087bc +100087a4: 6843 ldr r3, [r0, #4] +100087a6: 2b01 cmp r3, #1 +100087a8: d008 beq.n 100087bc +100087aa: f7ff ff9d bl 100086e8 +100087ae: 61a0 str r0, [r4, #24] +100087b0: b120 cbz r0, 100087bc +100087b2: 4620 mov r0, r4 +100087b4: e8bd 4010 ldmia.w sp!, {r4, lr} +100087b8: f7ff be64 b.w 10008484 +100087bc: bd10 pop {r4, pc} + ... + +100087c0 : +100087c0: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +100087c4: 4688 mov r8, r1 +100087c6: 4617 mov r7, r2 +100087c8: 4604 mov r4, r0 +100087ca: b1a0 cbz r0, 100087f6 +100087cc: f7ff ff8c bl 100086e8 +100087d0: 4605 mov r5, r0 +100087d2: 61a0 str r0, [r4, #24] +100087d4: 2800 cmp r0, #0 +100087d6: d053 beq.n 10008880 +100087d8: 6863 ldr r3, [r4, #4] +100087da: 2b01 cmp r3, #1 +100087dc: d050 beq.n 10008880 +100087de: 8823 ldrh r3, [r4, #0] +100087e0: f043 0380 orr.w r3, r3, #128 ; 0x80 +100087e4: 8023 strh r3, [r4, #0] +100087e6: f8b0 206a ldrh.w r2, [r0, #106] ; 0x6a +100087ea: 42ba cmp r2, r7 +100087ec: d206 bcs.n 100087fc +100087ee: 4639 mov r1, r7 +100087f0: 4825 ldr r0, [pc, #148] ; (10008888 ) +100087f2: f012 f9c5 bl 1001ab80 +100087f6: f06f 060d mvn.w r6, #13 +100087fa: e036 b.n 1000886a +100087fc: 2f00 cmp r7, #0 +100087fe: d038 beq.n 10008872 +10008800: 8823 ldrh r3, [r4, #0] +10008802: 463a mov r2, r7 +10008804: 075b lsls r3, r3, #29 +10008806: bf48 it mi +10008808: f890 3022 ldrbmi.w r3, [r0, #34] ; 0x22 +1000880c: 4641 mov r1, r8 +1000880e: bf44 itt mi +10008810: f043 0340 orrmi.w r3, r3, #64 ; 0x40 +10008814: f880 3022 strbmi.w r3, [r0, #34] ; 0x22 +10008818: 2301 movs r3, #1 +1000881a: f00a fc8e bl 1001313a +1000881e: 4606 mov r6, r0 +10008820: b970 cbnz r0, 10008840 +10008822: 4628 mov r0, r5 +10008824: eb08 0307 add.w r3, r8, r7 +10008828: 6223 str r3, [r4, #32] +1000882a: 8da3 ldrh r3, [r4, #44] ; 0x2c +1000882c: 1bdf subs r7, r3, r7 +1000882e: 8823 ldrh r3, [r4, #0] +10008830: 85a7 strh r7, [r4, #44] ; 0x2c +10008832: f043 0340 orr.w r3, r3, #64 ; 0x40 +10008836: 8023 strh r3, [r4, #0] +10008838: f00a fec6 bl 100135c8 +1000883c: 4606 mov r6, r0 +1000883e: e010 b.n 10008862 +10008840: f8b5 306a ldrh.w r3, [r5, #106] ; 0x6a +10008844: 4642 mov r2, r8 +10008846: 9301 str r3, [sp, #4] +10008848: 9000 str r0, [sp, #0] +1000884a: 463b mov r3, r7 +1000884c: 4629 mov r1, r5 +1000884e: 480f ldr r0, [pc, #60] ; (1000888c ) +10008850: f012 f996 bl 1001ab80 +10008854: 8823 ldrh r3, [r4, #0] +10008856: 4620 mov r0, r4 +10008858: f36f 1386 bfc r3, #6, #1 +1000885c: 8023 strh r3, [r4, #0] +1000885e: f7ff fe11 bl 10008484 +10008862: 8823 ldrh r3, [r4, #0] +10008864: f36f 13c7 bfc r3, #7, #1 +10008868: 8023 strh r3, [r4, #0] +1000886a: 4630 mov r0, r6 +1000886c: b002 add sp, #8 +1000886e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10008872: f890 3022 ldrb.w r3, [r0, #34] ; 0x22 +10008876: f023 0340 bic.w r3, r3, #64 ; 0x40 +1000887a: f880 3022 strb.w r3, [r0, #34] ; 0x22 +1000887e: e7db b.n 10008838 +10008880: f06f 060c mvn.w r6, #12 +10008884: e7f1 b.n 1000886a +10008886: bf00 nop +10008888: 1003ec35 .word 0x1003ec35 +1000888c: 1003ec5b .word 0x1003ec5b + +10008890 : +10008890: 8e01 ldrh r1, [r0, #48] ; 0x30 +10008892: b510 push {r4, lr} +10008894: 4604 mov r4, r0 +10008896: b119 cbz r1, 100088a0 +10008898: 6980 ldr r0, [r0, #24] +1000889a: b108 cbz r0, 100088a0 +1000889c: f008 fe9a bl 100115d4 +100088a0: 2300 movs r3, #0 +100088a2: 8623 strh r3, [r4, #48] ; 0x30 +100088a4: bd10 pop {r4, pc} + ... + +100088a8 : +100088a8: 4b04 ldr r3, [pc, #16] ; (100088bc ) +100088aa: 681b ldr r3, [r3, #0] +100088ac: b90b cbnz r3, 100088b2 +100088ae: 4618 mov r0, r3 +100088b0: 4770 bx lr +100088b2: 885a ldrh r2, [r3, #2] +100088b4: 4282 cmp r2, r0 +100088b6: d0fa beq.n 100088ae +100088b8: 6a5b ldr r3, [r3, #36] ; 0x24 +100088ba: e7f7 b.n 100088ac +100088bc: 1004a644 .word 0x1004a644 + +100088c0 : +100088c0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +100088c4: 8bc8 ldrh r0, [r1, #30] +100088c6: 460e mov r6, r1 +100088c8: f7ff ffee bl 100088a8 +100088cc: 4604 mov r4, r0 +100088ce: 2800 cmp r0, #0 +100088d0: d079 beq.n 100089c6 +100088d2: f00c fcf3 bl 100152bc +100088d6: 88a3 ldrh r3, [r4, #4] +100088d8: 4298 cmp r0, r3 +100088da: d207 bcs.n 100088ec +100088dc: 8861 ldrh r1, [r4, #2] +100088de: 483c ldr r0, [pc, #240] ; (100089d0 ) +100088e0: f012 f94e bl 1001ab80 +100088e4: f04f 30ff mov.w r0, #4294967295 +100088e8: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +100088ec: 79e2 ldrb r2, [r4, #7] +100088ee: 79a3 ldrb r3, [r4, #6] +100088f0: 429a cmp r2, r3 +100088f2: d30b bcc.n 1000890c +100088f4: 7823 ldrb r3, [r4, #0] +100088f6: 8861 ldrh r1, [r4, #2] +100088f8: f013 0f01 tst.w r3, #1 +100088fc: d00d beq.n 1000891a +100088fe: 4835 ldr r0, [pc, #212] ; (100089d4 ) +10008900: f012 f93e bl 1001ab80 +10008904: 68e0 ldr r0, [r4, #12] +10008906: b108 cbz r0, 1000890c +10008908: f7ff ff20 bl 1000874c +1000890c: 2038 movs r0, #56 ; 0x38 +1000890e: f00c fd2d bl 1001536c +10008912: 4605 mov r5, r0 +10008914: b940 cbnz r0, 10008928 +10008916: 6883 ldr r3, [r0, #8] +10008918: deff udf #255 ; 0xff +1000891a: 482f ldr r0, [pc, #188] ; (100089d8 ) +1000891c: f012 f930 bl 1001ab80 +10008920: f06f 000c mvn.w r0, #12 +10008924: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10008928: 2702 movs r7, #2 +1000892a: 8823 ldrh r3, [r4, #0] +1000892c: 6084 str r4, [r0, #8] +1000892e: 8003 strh r3, [r0, #0] +10008930: 8c33 ldrh r3, [r6, #32] +10008932: 6186 str r6, [r0, #24] +10008934: 81c3 strh r3, [r0, #14] +10008936: 6873 ldr r3, [r6, #4] +10008938: 4601 mov r1, r0 +1000893a: 6103 str r3, [r0, #16] +1000893c: 68e3 ldr r3, [r4, #12] +1000893e: 6143 str r3, [r0, #20] +10008940: 79e3 ldrb r3, [r4, #7] +10008942: 60e0 str r0, [r4, #12] +10008944: 3301 adds r3, #1 +10008946: 71e3 strb r3, [r4, #7] +10008948: 6047 str r7, [r0, #4] +1000894a: 4630 mov r0, r6 +1000894c: f008 fe8a bl 10011664 +10008950: 4922 ldr r1, [pc, #136] ; (100089dc ) +10008952: 4630 mov r0, r6 +10008954: f008 fe8e bl 10011674 +10008958: 4921 ldr r1, [pc, #132] ; (100089e0 ) +1000895a: 4630 mov r0, r6 +1000895c: f008 fe87 bl 1001166e +10008960: 4920 ldr r1, [pc, #128] ; (100089e4 ) +10008962: 4630 mov r0, r6 +10008964: f008 fe80 bl 10011668 +10008968: 463a mov r2, r7 +1000896a: 491f ldr r1, [pc, #124] ; (100089e8 ) +1000896c: 4630 mov r0, r6 +1000896e: f008 fe86 bl 1001167e +10008972: 882b ldrh r3, [r5, #0] +10008974: 079b lsls r3, r3, #30 +10008976: d404 bmi.n 10008982 +10008978: 69a3 ldr r3, [r4, #24] +1000897a: bb03 cbnz r3, 100089be +1000897c: 4618 mov r0, r3 +1000897e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10008982: 2600 movs r6, #0 +10008984: 4f19 ldr r7, [pc, #100] ; (100089ec ) +10008986: 683a ldr r2, [r7, #0] +10008988: b99a cbnz r2, 100089b2 +1000898a: f8df 9060 ldr.w r9, [pc, #96] ; 100089ec +1000898e: 2e0a cmp r6, #10 +10008990: ddf2 ble.n 10008978 +10008992: f04f 0800 mov.w r8, #0 +10008996: 683b ldr r3, [r7, #0] +10008998: b973 cbnz r3, 100089b8 +1000899a: f1b8 0f00 cmp.w r8, #0 +1000899e: d006 beq.n 100089ae +100089a0: 4648 mov r0, r9 +100089a2: 4641 mov r1, r8 +100089a4: f008 fffe bl 100119a4 +100089a8: 4640 mov r0, r8 +100089aa: f00c fc6f bl 1001528c +100089ae: 3e01 subs r6, #1 +100089b0: e7ed b.n 1000898e +100089b2: 3601 adds r6, #1 +100089b4: 68d2 ldr r2, [r2, #12] +100089b6: e7e7 b.n 10008988 +100089b8: 4698 mov r8, r3 +100089ba: 68db ldr r3, [r3, #12] +100089bc: e7ec b.n 10008998 +100089be: 4628 mov r0, r5 +100089c0: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +100089c4: 4718 bx r3 +100089c6: f06f 000d mvn.w r0, #13 +100089ca: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +100089ce: bf00 nop +100089d0: 1003eccb .word 0x1003eccb +100089d4: 1003ecf0 .word 0x1003ecf0 +100089d8: 1003ed04 .word 0x1003ed04 +100089dc: 100086a5 .word 0x100086a5 +100089e0: 100083b7 .word 0x100083b7 +100089e4: 100085eb .word 0x100085eb +100089e8: 10008585 .word 0x10008585 +100089ec: 1004b1c0 .word 0x1004b1c0 + +100089f0 : +100089f0: b570 push {r4, r5, r6, lr} +100089f2: 4606 mov r6, r0 +100089f4: b348 cbz r0, 10008a4a +100089f6: 4b16 ldr r3, [pc, #88] ; (10008a50 ) +100089f8: 681d ldr r5, [r3, #0] +100089fa: b945 cbnz r5, 10008a0e +100089fc: 2028 movs r0, #40 ; 0x28 +100089fe: f00c fcb5 bl 1001536c +10008a02: 4604 mov r4, r0 +10008a04: b970 cbnz r0, 10008a24 +10008a06: 4813 ldr r0, [pc, #76] ; (10008a54 ) +10008a08: f012 f8ba bl 1001ab80 +10008a0c: e006 b.n 10008a1c +10008a0e: 886b ldrh r3, [r5, #2] +10008a10: 42b3 cmp r3, r6 +10008a12: d105 bne.n 10008a20 +10008a14: 4810 ldr r0, [pc, #64] ; (10008a58 ) +10008a16: f012 f8b3 bl 1001ab80 +10008a1a: 2400 movs r4, #0 +10008a1c: 4620 mov r0, r4 +10008a1e: bd70 pop {r4, r5, r6, pc} +10008a20: 6a6d ldr r5, [r5, #36] ; 0x24 +10008a22: e7ea b.n 100089fa +10008a24: f44f 4300 mov.w r3, #32768 ; 0x8000 +10008a28: 8083 strh r3, [r0, #4] +10008a2a: 2305 movs r3, #5 +10008a2c: 7203 strb r3, [r0, #8] +10008a2e: 7243 strb r3, [r0, #9] +10008a30: 230a movs r3, #10 +10008a32: 7183 strb r3, [r0, #6] +10008a34: 4b09 ldr r3, [pc, #36] ; (10008a5c ) +10008a36: 8046 strh r6, [r0, #2] +10008a38: 6183 str r3, [r0, #24] +10008a3a: 4b09 ldr r3, [pc, #36] ; (10008a60 ) +10008a3c: 71c5 strb r5, [r0, #7] +10008a3e: 6143 str r3, [r0, #20] +10008a40: 4b08 ldr r3, [pc, #32] ; (10008a64 ) +10008a42: 61c3 str r3, [r0, #28] +10008a44: 4b08 ldr r3, [pc, #32] ; (10008a68 ) +10008a46: 6203 str r3, [r0, #32] +10008a48: e7e8 b.n 10008a1c +10008a4a: 4604 mov r4, r0 +10008a4c: e7e6 b.n 10008a1c +10008a4e: bf00 nop +10008a50: 1004a644 .word 0x1004a644 +10008a54: 1003ed8f .word 0x1003ed8f +10008a58: 1003ed71 .word 0x1003ed71 +10008a5c: 10008445 .word 0x10008445 +10008a60: 1000842d .word 0x1000842d +10008a64: 10008459 .word 0x10008459 +10008a68: 1000846d .word 0x1000846d + +10008a6c : +10008a6c: b538 push {r3, r4, r5, lr} +10008a6e: 4604 mov r4, r0 +10008a70: b930 cbnz r0, 10008a80 +10008a72: 481e ldr r0, [pc, #120] ; (10008aec ) +10008a74: f012 f884 bl 1001ab80 +10008a78: f06f 050d mvn.w r5, #13 +10008a7c: 4628 mov r0, r5 +10008a7e: bd38 pop {r3, r4, r5, pc} +10008a80: 6903 ldr r3, [r0, #16] +10008a82: b12b cbz r3, 10008a90 +10008a84: 481a ldr r0, [pc, #104] ; (10008af0 ) +10008a86: f012 f87b bl 1001ab80 +10008a8a: f06f 0507 mvn.w r5, #7 +10008a8e: e7f5 b.n 10008a7c +10008a90: f009 f9f2 bl 10011e78 +10008a94: 6120 str r0, [r4, #16] +10008a96: b328 cbz r0, 10008ae4 +10008a98: 2163 movs r1, #99 ; 0x63 +10008a9a: f008 fdcd bl 10011638 +10008a9e: 8862 ldrh r2, [r4, #2] +10008aa0: 4914 ldr r1, [pc, #80] ; (10008af4 ) +10008aa2: 6920 ldr r0, [r4, #16] +10008aa4: f008 fcd4 bl 10011450 +10008aa8: 4605 mov r5, r0 +10008aaa: b988 cbnz r0, 10008ad0 +10008aac: 21ff movs r1, #255 ; 0xff +10008aae: 6920 ldr r0, [r4, #16] +10008ab0: f008 fd16 bl 100114e0 +10008ab4: 4601 mov r1, r0 +10008ab6: 6120 str r0, [r4, #16] +10008ab8: b150 cbz r0, 10008ad0 +10008aba: f008 fdd3 bl 10011664 +10008abe: 4b0e ldr r3, [pc, #56] ; (10008af8 ) +10008ac0: 490e ldr r1, [pc, #56] ; (10008afc ) +10008ac2: 681a ldr r2, [r3, #0] +10008ac4: 6920 ldr r0, [r4, #16] +10008ac6: 6262 str r2, [r4, #36] ; 0x24 +10008ac8: 601c str r4, [r3, #0] +10008aca: f008 fdd6 bl 1001167a +10008ace: e7d5 b.n 10008a7c +10008ad0: 2100 movs r1, #0 +10008ad2: 6920 ldr r0, [r4, #16] +10008ad4: f009 f8e0 bl 10011c98 +10008ad8: 2300 movs r3, #0 +10008ada: 6123 str r3, [r4, #16] +10008adc: 4808 ldr r0, [pc, #32] ; (10008b00 ) +10008ade: f012 f84f bl 1001ab80 +10008ae2: e7cb b.n 10008a7c +10008ae4: f04f 35ff mov.w r5, #4294967295 +10008ae8: e7f8 b.n 10008adc +10008aea: bf00 nop +10008aec: 1003ed5a .word 0x1003ed5a +10008af0: 1003ed71 .word 0x1003ed71 +10008af4: 10040090 .word 0x10040090 +10008af8: 1004a644 .word 0x1004a644 +10008afc: 100088c1 .word 0x100088c1 +10008b00: 1003ed44 .word 0x1003ed44 + +10008b04 : +10008b04: b510 push {r4, lr} +10008b06: b928 cbnz r0, 10008b14 +10008b08: 4810 ldr r0, [pc, #64] ; (10008b4c ) +10008b0a: f012 f839 bl 1001ab80 +10008b0e: f06f 000d mvn.w r0, #13 +10008b12: bd10 pop {r4, pc} +10008b14: 4b0e ldr r3, [pc, #56] ; (10008b50 ) +10008b16: 681c ldr r4, [r3, #0] +10008b18: b914 cbnz r4, 10008b20 +10008b1a: f06f 000c mvn.w r0, #12 +10008b1e: bd10 pop {r4, pc} +10008b20: 4284 cmp r4, r0 +10008b22: 6a62 ldr r2, [r4, #36] ; 0x24 +10008b24: d10e bne.n 10008b44 +10008b26: 601a str r2, [r3, #0] +10008b28: 68e0 ldr r0, [r4, #12] +10008b2a: b940 cbnz r0, 10008b3e +10008b2c: 6920 ldr r0, [r4, #16] +10008b2e: b108 cbz r0, 10008b34 +10008b30: f009 f812 bl 10011b58 +10008b34: 4620 mov r0, r4 +10008b36: f00c fba9 bl 1001528c +10008b3a: 2000 movs r0, #0 +10008b3c: bd10 pop {r4, pc} +10008b3e: f7ff fe05 bl 1000874c +10008b42: e7f1 b.n 10008b28 +10008b44: f104 0324 add.w r3, r4, #36 ; 0x24 +10008b48: 4614 mov r4, r2 +10008b4a: e7e5 b.n 10008b18 +10008b4c: 1003ed5a .word 0x1003ed5a +10008b50: 1004a644 .word 0x1004a644 + +10008b54 : +10008b54: 1e43 subs r3, r0, #1 +10008b56: 2b1e cmp r3, #30 +10008b58: d805 bhi.n 10008b66 +10008b5a: 230c movs r3, #12 +10008b5c: f04f 32ff mov.w r2, #4294967295 +10008b60: 4358 muls r0, r3 +10008b62: 4b01 ldr r3, [pc, #4] ; (10008b68 ) +10008b64: 501a str r2, [r3, r0] +10008b66: 4770 bx lr +10008b68: 1004a648 .word 0x1004a648 + +10008b6c : +10008b6c: 281f cmp r0, #31 +10008b6e: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10008b72: 4607 mov r7, r0 +10008b74: 4688 mov r8, r1 +10008b76: 4614 mov r4, r2 +10008b78: d828 bhi.n 10008bcc +10008b7a: 260c movs r6, #12 +10008b7c: 4d14 ldr r5, [pc, #80] ; (10008bd0 ) +10008b7e: fb06 5300 mla r3, r6, r0, r5 +10008b82: 4346 muls r6, r0 +10008b84: 685b ldr r3, [r3, #4] +10008b86: 429a cmp r2, r3 +10008b88: bf88 it hi +10008b8a: b29c uxthhi r4, r3 +10008b8c: 59ab ldr r3, [r5, r6] +10008b8e: 3301 adds r3, #1 +10008b90: d01c beq.n 10008bcc +10008b92: b1c4 cbz r4, 10008bc6 +10008b94: b171 cbz r1, 10008bb4 +10008b96: 2001 movs r0, #1 +10008b98: f00e f874 bl 10016c84 +10008b9c: 4b0d ldr r3, [pc, #52] ; (10008bd4 ) +10008b9e: 59a8 ldr r0, [r5, r6] +10008ba0: 6819 ldr r1, [r3, #0] +10008ba2: 4622 mov r2, r4 +10008ba4: 4401 add r1, r0 +10008ba6: 4643 mov r3, r8 +10008ba8: 480b ldr r0, [pc, #44] ; (10008bd8 ) +10008baa: f00f f827 bl 10017bfc +10008bae: 2001 movs r0, #1 +10008bb0: f00e f882 bl 10016cb8 +10008bb4: 200c movs r0, #12 +10008bb6: 4378 muls r0, r7 +10008bb8: 582b ldr r3, [r5, r0] +10008bba: 182a adds r2, r5, r0 +10008bbc: 4423 add r3, r4 +10008bbe: 502b str r3, [r5, r0] +10008bc0: 6853 ldr r3, [r2, #4] +10008bc2: 1b1b subs r3, r3, r4 +10008bc4: 6053 str r3, [r2, #4] +10008bc6: 4620 mov r0, r4 +10008bc8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10008bcc: 2400 movs r4, #0 +10008bce: e7fa b.n 10008bc6 +10008bd0: 1004a648 .word 0x1004a648 +10008bd4: 1004a7c8 .word 0x1004a7c8 +10008bd8: 1004b58c .word 0x1004b58c + +10008bdc : +10008bdc: f44f 2350 mov.w r3, #851968 ; 0xd0000 +10008be0: b530 push {r4, r5, lr} +10008be2: 4d19 ldr r5, [pc, #100] ; (10008c48 ) +10008be4: 4c19 ldr r4, [pc, #100] ; (10008c4c ) +10008be6: b085 sub sp, #20 +10008be8: f44f 72c0 mov.w r2, #384 ; 0x180 +10008bec: 21ff movs r1, #255 ; 0xff +10008bee: 4628 mov r0, r5 +10008bf0: 6023 str r3, [r4, #0] +10008bf2: f011 fff1 bl 1001abd8 +10008bf6: 220c movs r2, #12 +10008bf8: 2000 movs r0, #0 +10008bfa: a901 add r1, sp, #4 +10008bfc: e885 0005 stmia.w r5, {r0, r2} +10008c00: f7ff ffb4 bl 10008b6c +10008c04: 4b12 ldr r3, [pc, #72] ; (10008c50 ) +10008c06: 9a01 ldr r2, [sp, #4] +10008c08: 429a cmp r2, r3 +10008c0a: 4623 mov r3, r4 +10008c0c: 4c11 ldr r4, [pc, #68] ; (10008c54 ) +10008c0e: d116 bne.n 10008c3e +10008c10: f8bd 2008 ldrh.w r2, [sp, #8] +10008c14: 2a01 cmp r2, #1 +10008c16: d112 bne.n 10008c3e +10008c18: f8bd 200a ldrh.w r2, [sp, #10] +10008c1c: f64f 71ff movw r1, #65535 ; 0xffff +10008c20: 8022 strh r2, [r4, #0] +10008c22: 4a0d ldr r2, [pc, #52] ; (10008c58 ) +10008c24: 480d ldr r0, [pc, #52] ; (10008c5c ) +10008c26: 6011 str r1, [r2, #0] +10008c28: 681a ldr r2, [r3, #0] +10008c2a: 8821 ldrh r1, [r4, #0] +10008c2c: f011 ffa8 bl 1001ab80 +10008c30: 8822 ldrh r2, [r4, #0] +10008c32: 4b0b ldr r3, [pc, #44] ; (10008c60 ) +10008c34: b92a cbnz r2, 10008c42 +10008c36: 2201 movs r2, #1 +10008c38: 701a strb r2, [r3, #0] +10008c3a: b005 add sp, #20 +10008c3c: bd30 pop {r4, r5, pc} +10008c3e: 2200 movs r2, #0 +10008c40: e7ec b.n 10008c1c +10008c42: 2200 movs r2, #0 +10008c44: e7f8 b.n 10008c38 +10008c46: bf00 nop +10008c48: 1004a648 .word 0x1004a648 +10008c4c: 1004a7c8 .word 0x1004a7c8 +10008c50: 42455746 .word 0x42455746 +10008c54: 1004a7e2 .word 0x1004a7e2 +10008c58: 1004a7dc .word 0x1004a7dc +10008c5c: 1003eda4 .word 0x1003eda4 +10008c60: 1004a7e0 .word 0x1004a7e0 + +10008c64 : +10008c64: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +10008c66: 4e17 ldr r6, [pc, #92] ; (10008cc4 ) +10008c68: 4605 mov r5, r0 +10008c6a: 6833 ldr r3, [r6, #0] +10008c6c: 4298 cmp r0, r3 +10008c6e: d027 beq.n 10008cc0 +10008c70: 4b15 ldr r3, [pc, #84] ; (10008cc8 ) +10008c72: 881b ldrh r3, [r3, #0] +10008c74: 4298 cmp r0, r3 +10008c76: d223 bcs.n 10008cc0 +10008c78: 220c movs r2, #12 +10008c7a: 4f14 ldr r7, [pc, #80] ; (10008ccc ) +10008c7c: 3306 adds r3, #6 +10008c7e: 607a str r2, [r7, #4] +10008c80: 2204 movs r2, #4 +10008c82: 4c13 ldr r4, [pc, #76] ; (10008cd0 ) +10008c84: eb03 0340 add.w r3, r3, r0, lsl #1 +10008c88: 005b lsls r3, r3, #1 +10008c8a: 18a1 adds r1, r4, r2 +10008c8c: 603b str r3, [r7, #0] +10008c8e: 2000 movs r0, #0 +10008c90: f7ff ff6c bl 10008b6c +10008c94: 6863 ldr r3, [r4, #4] +10008c96: 2208 movs r2, #8 +10008c98: 603b str r3, [r7, #0] +10008c9a: 4669 mov r1, sp +10008c9c: 2000 movs r0, #0 +10008c9e: f7ff ff65 bl 10008b6c +10008ca2: f8bd 3004 ldrh.w r3, [sp, #4] +10008ca6: 9a00 ldr r2, [sp, #0] +10008ca8: 6035 str r5, [r6, #0] +10008caa: 1ad2 subs r2, r2, r3 +10008cac: 60a2 str r2, [r4, #8] +10008cae: 6862 ldr r2, [r4, #4] +10008cb0: f102 0108 add.w r1, r2, #8 +10008cb4: 6021 str r1, [r4, #0] +10008cb6: f8bd 1006 ldrh.w r1, [sp, #6] +10008cba: 4413 add r3, r2 +10008cbc: 81a1 strh r1, [r4, #12] +10008cbe: 6063 str r3, [r4, #4] +10008cc0: b003 add sp, #12 +10008cc2: bdf0 pop {r4, r5, r6, r7, pc} +10008cc4: 1004a7dc .word 0x1004a7dc +10008cc8: 1004a7e2 .word 0x1004a7e2 +10008ccc: 1004a648 .word 0x1004a648 +10008cd0: 1004a7cc .word 0x1004a7cc + +10008cd4 : +10008cd4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10008cd8: 7803 ldrb r3, [r0, #0] +10008cda: b099 sub sp, #100 ; 0x64 +10008cdc: 4607 mov r7, r0 +10008cde: b923 cbnz r3, 10008cea +10008ce0: 26ff movs r6, #255 ; 0xff +10008ce2: 4630 mov r0, r6 +10008ce4: b019 add sp, #100 ; 0x64 +10008ce6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10008cea: 4b31 ldr r3, [pc, #196] ; (10008db0 ) +10008cec: 781b ldrb r3, [r3, #0] +10008cee: 2b01 cmp r3, #1 +10008cf0: d0f6 beq.n 10008ce0 +10008cf2: 4602 mov r2, r0 +10008cf4: f04f 0900 mov.w r9, #0 +10008cf8: eba2 0a07 sub.w sl, r2, r7 +10008cfc: f812 3b01 ldrb.w r3, [r2], #1 +10008d00: 2b00 cmp r3, #0 +10008d02: d148 bne.n 10008d96 +10008d04: 492b ldr r1, [pc, #172] ; (10008db4 ) +10008d06: 200c movs r0, #12 +10008d08: 460d mov r5, r1 +10008d0a: 1c5a adds r2, r3, #1 +10008d0c: fb00 1303 mla r3, r0, r3, r1 +10008d10: 68db ldr r3, [r3, #12] +10008d12: b2d6 uxtb r6, r2 +10008d14: 3301 adds r3, #1 +10008d16: d046 beq.n 10008da6 +10008d18: 2a1f cmp r2, #31 +10008d1a: 4613 mov r3, r2 +10008d1c: d1f5 bne.n 10008d0a +10008d1e: 2620 movs r6, #32 +10008d20: 2400 movs r4, #0 +10008d22: f8df b098 ldr.w fp, [pc, #152] ; 10008dbc +10008d26: 4b24 ldr r3, [pc, #144] ; (10008db8 ) +10008d28: 881a ldrh r2, [r3, #0] +10008d2a: 4294 cmp r4, r2 +10008d2c: dad8 bge.n 10008ce0 +10008d2e: f014 080f ands.w r8, r4, #15 +10008d32: d109 bne.n 10008d48 +10008d34: 2320 movs r3, #32 +10008d36: 1da2 adds r2, r4, #6 +10008d38: 0052 lsls r2, r2, #1 +10008d3a: 602a str r2, [r5, #0] +10008d3c: 606b str r3, [r5, #4] +10008d3e: 461a mov r2, r3 +10008d40: 4669 mov r1, sp +10008d42: 4640 mov r0, r8 +10008d44: f7ff ff12 bl 10008b6c +10008d48: ab18 add r3, sp, #96 ; 0x60 +10008d4a: eb03 0848 add.w r8, r3, r8, lsl #1 +10008d4e: f838 2c60 ldrh.w r2, [r8, #-96] +10008d52: 454a cmp r2, r9 +10008d54: d12a bne.n 10008dac +10008d56: fa1f f884 uxth.w r8, r4 +10008d5a: 4640 mov r0, r8 +10008d5c: f7ff ff82 bl 10008c64 +10008d60: f8db 2000 ldr.w r2, [fp] +10008d64: a908 add r1, sp, #32 +10008d66: 602a str r2, [r5, #0] +10008d68: 2240 movs r2, #64 ; 0x40 +10008d6a: 2000 movs r0, #0 +10008d6c: 606a str r2, [r5, #4] +10008d6e: f7ff fefd bl 10008b6c +10008d72: 4652 mov r2, sl +10008d74: a908 add r1, sp, #32 +10008d76: 4638 mov r0, r7 +10008d78: f011 ff42 bl 1001ac00 +10008d7c: b9b0 cbnz r0, 10008dac +10008d7e: 220c movs r2, #12 +10008d80: 4372 muls r2, r6 +10008d82: f8db 0004 ldr.w r0, [fp, #4] +10008d86: f8db 3008 ldr.w r3, [fp, #8] +10008d8a: 18a9 adds r1, r5, r2 +10008d8c: 50a8 str r0, [r5, r2] +10008d8e: 604b str r3, [r1, #4] +10008d90: f8a1 8008 strh.w r8, [r1, #8] +10008d94: e7a5 b.n 10008ce2 +10008d96: 4499 add r9, r3 +10008d98: fa1f f989 uxth.w r9, r9 +10008d9c: ea4f 0949 mov.w r9, r9, lsl #1 +10008da0: fa1f f989 uxth.w r9, r9 +10008da4: e7a8 b.n 10008cf8 +10008da6: 2e1f cmp r6, #31 +10008da8: d09a beq.n 10008ce0 +10008daa: e7b9 b.n 10008d20 +10008dac: 3401 adds r4, #1 +10008dae: e7ba b.n 10008d26 +10008db0: 1004a7e0 .word 0x1004a7e0 +10008db4: 1004a648 .word 0x1004a648 +10008db8: 1004a7e2 .word 0x1004a7e2 +10008dbc: 1004a7cc .word 0x1004a7cc + +10008dc0 : +10008dc0: 281f cmp r0, #31 +10008dc2: d808 bhi.n 10008dd6 +10008dc4: 230c movs r3, #12 +10008dc6: 4358 muls r0, r3 +10008dc8: 4a04 ldr r2, [pc, #16] ; (10008ddc ) +10008dca: 1813 adds r3, r2, r0 +10008dcc: 5812 ldr r2, [r2, r0] +10008dce: 3201 adds r2, #1 +10008dd0: d001 beq.n 10008dd6 +10008dd2: 6858 ldr r0, [r3, #4] +10008dd4: 4770 bx lr +10008dd6: 2000 movs r0, #0 +10008dd8: 4770 bx lr +10008dda: bf00 nop +10008ddc: 1004a648 .word 0x1004a648 + +10008de0 : +10008de0: 281f cmp r0, #31 +10008de2: b570 push {r4, r5, r6, lr} +10008de4: 460d mov r5, r1 +10008de6: 4616 mov r6, r2 +10008de8: d815 bhi.n 10008e16 +10008dea: 230c movs r3, #12 +10008dec: 4358 muls r0, r3 +10008dee: 4c0b ldr r4, [pc, #44] ; (10008e1c ) +10008df0: 5822 ldr r2, [r4, r0] +10008df2: 1823 adds r3, r4, r0 +10008df4: 3201 adds r2, #1 +10008df6: d00e beq.n 10008e16 +10008df8: 8918 ldrh r0, [r3, #8] +10008dfa: f7ff ff33 bl 10008c64 +10008dfe: 4b08 ldr r3, [pc, #32] ; (10008e20 ) +10008e00: 4632 mov r2, r6 +10008e02: 681b ldr r3, [r3, #0] +10008e04: 4629 mov r1, r5 +10008e06: 6023 str r3, [r4, #0] +10008e08: 23ff movs r3, #255 ; 0xff +10008e0a: 2000 movs r0, #0 +10008e0c: 6063 str r3, [r4, #4] +10008e0e: f7ff fead bl 10008b6c +10008e12: 2001 movs r0, #1 +10008e14: bd70 pop {r4, r5, r6, pc} +10008e16: 2000 movs r0, #0 +10008e18: bd70 pop {r4, r5, r6, pc} +10008e1a: bf00 nop +10008e1c: 1004a648 .word 0x1004a648 +10008e20: 1004a7cc .word 0x1004a7cc + +10008e24 : +10008e24: b508 push {r3, lr} +10008e26: 4803 ldr r0, [pc, #12] ; (10008e34 ) +10008e28: f00e fffa bl 10017e20 +10008e2c: f5a0 2050 sub.w r0, r0, #851968 ; 0xd0000 +10008e30: bd08 pop {r3, pc} +10008e32: bf00 nop +10008e34: 1004b58c .word 0x1004b58c + +10008e38 : +10008e38: 2300 movs r3, #0 +10008e3a: b507 push {r0, r1, r2, lr} +10008e3c: 2001 movs r0, #1 +10008e3e: 9301 str r3, [sp, #4] +10008e40: f00d ff20 bl 10016c84 +10008e44: 4b08 ldr r3, [pc, #32] ; (10008e68 ) +10008e46: 881b ldrh r3, [r3, #0] +10008e48: b133 cbz r3, 10008e58 +10008e4a: 4b08 ldr r3, [pc, #32] ; (10008e6c ) +10008e4c: aa01 add r2, sp, #4 +10008e4e: 6819 ldr r1, [r3, #0] +10008e50: 4807 ldr r0, [pc, #28] ; (10008e70 ) +10008e52: 3108 adds r1, #8 +10008e54: f00e feb6 bl 10017bc4 +10008e58: 2001 movs r0, #1 +10008e5a: f00d ff2d bl 10016cb8 +10008e5e: 9801 ldr r0, [sp, #4] +10008e60: b003 add sp, #12 +10008e62: f85d fb04 ldr.w pc, [sp], #4 +10008e66: bf00 nop +10008e68: 1004a7e2 .word 0x1004a7e2 +10008e6c: 1004a7c8 .word 0x1004a7c8 +10008e70: 1004b58c .word 0x1004b58c + +10008e74 : +10008e74: f44f 2050 mov.w r0, #851968 ; 0xd0000 +10008e78: 4770 bx lr + ... + +10008e7c : +10008e7c: b538 push {r3, r4, r5, lr} +10008e7e: 460d mov r5, r1 +10008e80: 79c1 ldrb r1, [r0, #7] +10008e82: 4604 mov r4, r0 +10008e84: 29ff cmp r1, #255 ; 0xff +10008e86: d00d beq.n 10008ea4 +10008e88: 480c ldr r0, [pc, #48] ; (10008ebc ) +10008e8a: f011 fe79 bl 1001ab80 +10008e8e: 79e0 ldrb r0, [r4, #7] +10008e90: 28fb cmp r0, #251 ; 0xfb +10008e92: d807 bhi.n 10008ea4 +10008e94: f7ff ff94 bl 10008dc0 +10008e98: 69e3 ldr r3, [r4, #28] +10008e9a: 1a18 subs r0, r3, r0 +10008e9c: 61e0 str r0, [r4, #28] +10008e9e: 79e0 ldrb r0, [r4, #7] +10008ea0: f7ff fe58 bl 10008b54 +10008ea4: 79a3 ldrb r3, [r4, #6] +10008ea6: 71e3 strb r3, [r4, #7] +10008ea8: 7963 ldrb r3, [r4, #5] +10008eaa: 71a3 strb r3, [r4, #6] +10008eac: 7923 ldrb r3, [r4, #4] +10008eae: 7125 strb r5, [r4, #4] +10008eb0: 7163 strb r3, [r4, #5] +10008eb2: 6823 ldr r3, [r4, #0] +10008eb4: f043 0308 orr.w r3, r3, #8 +10008eb8: 6023 str r3, [r4, #0] +10008eba: bd38 pop {r3, r4, r5, pc} +10008ebc: 1003f4bf .word 0x1003f4bf + +10008ec0 : +10008ec0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10008ec4: f04f 08ff mov.w r8, #255 ; 0xff +10008ec8: 6b45 ldr r5, [r0, #52] ; 0x34 +10008eca: 4f0d ldr r7, [pc, #52] ; (10008f00 ) +10008ecc: 1d2c adds r4, r5, #4 +10008ece: f105 0608 add.w r6, r5, #8 +10008ed2: 7821 ldrb r1, [r4, #0] +10008ed4: 29ff cmp r1, #255 ; 0xff +10008ed6: d009 beq.n 10008eec +10008ed8: 4638 mov r0, r7 +10008eda: f011 fe51 bl 1001ab80 +10008ede: 7820 ldrb r0, [r4, #0] +10008ee0: 28fb cmp r0, #251 ; 0xfb +10008ee2: d801 bhi.n 10008ee8 +10008ee4: f7ff fe36 bl 10008b54 +10008ee8: f884 8000 strb.w r8, [r4] +10008eec: 3401 adds r4, #1 +10008eee: 42b4 cmp r4, r6 +10008ef0: d1ef bne.n 10008ed2 +10008ef2: 682b ldr r3, [r5, #0] +10008ef4: f023 0338 bic.w r3, r3, #56 ; 0x38 +10008ef8: 602b str r3, [r5, #0] +10008efa: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10008efe: bf00 nop +10008f00: 1003f4bf .word 0x1003f4bf + +10008f04 : +10008f04: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} +10008f08: 2500 movs r5, #0 +10008f0a: 462c mov r4, r5 +10008f0c: f8df 804c ldr.w r8, [pc, #76] ; 10008f5c +10008f10: 2300 movs r3, #0 +10008f12: 2205 movs r2, #5 +10008f14: a901 add r1, sp, #4 +10008f16: f8d8 0000 ldr.w r0, [r8] +10008f1a: f00c fe5d bl 10015bd8 +10008f1e: 2801 cmp r0, #1 +10008f20: d110 bne.n 10008f44 +10008f22: 9b01 ldr r3, [sp, #4] +10008f24: 2b00 cmp r3, #0 +10008f26: d0f3 beq.n 10008f10 +10008f28: f8bd 200c ldrh.w r2, [sp, #12] +10008f2c: b13a cbz r2, 10008f3e +10008f2e: f00d f981 bl 10016234 +10008f32: 9c01 ldr r4, [sp, #4] +10008f34: 4607 mov r7, r0 +10008f36: 9e02 ldr r6, [sp, #8] +10008f38: f8bd 500c ldrh.w r5, [sp, #12] +10008f3c: e7e8 b.n 10008f10 +10008f3e: 9802 ldr r0, [sp, #8] +10008f40: 4798 blx r3 +10008f42: e7e5 b.n 10008f10 +10008f44: 2c00 cmp r4, #0 +10008f46: d0e3 beq.n 10008f10 +10008f48: f00d f974 bl 10016234 +10008f4c: 1bc0 subs r0, r0, r7 +10008f4e: 42a8 cmp r0, r5 +10008f50: d9de bls.n 10008f10 +10008f52: 4630 mov r0, r6 +10008f54: 47a0 blx r4 +10008f56: 2400 movs r4, #0 +10008f58: e7da b.n 10008f10 +10008f5a: bf00 nop +10008f5c: 1004a7e4 .word 0x1004a7e4 + +10008f60 : +10008f60: b5f8 push {r3, r4, r5, r6, r7, lr} +10008f62: 4606 mov r6, r0 +10008f64: 8840 ldrh r0, [r0, #2] +10008f66: 3a06 subs r2, #6 +10008f68: 1a12 subs r2, r2, r0 +10008f6a: 2a00 cmp r2, #0 +10008f6c: dc01 bgt.n 10008f72 +10008f6e: 2000 movs r0, #0 +10008f70: bdf8 pop {r3, r4, r5, r6, r7, pc} +10008f72: 460b mov r3, r1 +10008f74: 461d mov r5, r3 +10008f76: 782c ldrb r4, [r5, #0] +10008f78: 3301 adds r3, #1 +10008f7a: 2c2d cmp r4, #45 ; 0x2d +10008f7c: d123 bne.n 10008fc6 +10008f7e: 781c ldrb r4, [r3, #0] +10008f80: 2c2d cmp r4, #45 ; 0x2d +10008f82: d120 bne.n 10008fc6 +10008f84: f8c6 50d0 str.w r5, [r6, #208] ; 0xd0 +10008f88: 3502 adds r5, #2 +10008f8a: 4602 mov r2, r0 +10008f8c: 1d31 adds r1, r6, #4 +10008f8e: 4628 mov r0, r5 +10008f90: f011 fe1a bl 1001abc8 +10008f94: 2800 cmp r0, #0 +10008f96: d1ea bne.n 10008f6e +10008f98: 8877 ldrh r7, [r6, #2] +10008f9a: 490e ldr r1, [pc, #56] ; (10008fd4 ) +10008f9c: 19ec adds r4, r5, r7 +10008f9e: 4620 mov r0, r4 +10008fa0: f001 fac3 bl 1000a52a +10008fa4: b120 cbz r0, 10008fb0 +10008fa6: 3404 adds r4, #4 +10008fa8: f8c6 40d4 str.w r4, [r6, #212] ; 0xd4 +10008fac: 20c8 movs r0, #200 ; 0xc8 +10008fae: bdf8 pop {r3, r4, r5, r6, r7, pc} +10008fb0: 5deb ldrb r3, [r5, r7] +10008fb2: 2b0d cmp r3, #13 +10008fb4: d10b bne.n 10008fce +10008fb6: 7863 ldrb r3, [r4, #1] +10008fb8: 2b0a cmp r3, #10 +10008fba: d108 bne.n 10008fce +10008fbc: 3402 adds r4, #2 +10008fbe: f8c6 40d4 str.w r4, [r6, #212] ; 0xd4 +10008fc2: 2001 movs r0, #1 +10008fc4: bdf8 pop {r3, r4, r5, r6, r7, pc} +10008fc6: 1a5c subs r4, r3, r1 +10008fc8: 4294 cmp r4, r2 +10008fca: ddd3 ble.n 10008f74 +10008fcc: e7cf b.n 10008f6e +10008fce: f44f 70c8 mov.w r0, #400 ; 0x190 +10008fd2: bdf8 pop {r3, r4, r5, r6, r7, pc} +10008fd4: 1003f253 .word 0x1003f253 + +10008fd8 : +10008fd8: b538 push {r3, r4, r5, lr} +10008fda: 4604 mov r4, r0 +10008fdc: 480c ldr r0, [pc, #48] ; (10009010 ) +10008fde: f011 fdcf bl 1001ab80 +10008fe2: 8823 ldrh r3, [r4, #0] +10008fe4: 4620 mov r0, r4 +10008fe6: f043 0320 orr.w r3, r3, #32 +10008fea: 8023 strh r3, [r4, #0] +10008fec: 8823 ldrh r3, [r4, #0] +10008fee: 6b65 ldr r5, [r4, #52] ; 0x34 +10008ff0: f043 0310 orr.w r3, r3, #16 +10008ff4: 8023 strh r3, [r4, #0] +10008ff6: f7ff fc4b bl 10008890 +10008ffa: 8823 ldrh r3, [r4, #0] +10008ffc: 079b lsls r3, r3, #30 +10008ffe: d502 bpl.n 10009006 +10009000: 4620 mov r0, r4 +10009002: f7ff fbcc bl 1000879e +10009006: 682b ldr r3, [r5, #0] +10009008: f043 0301 orr.w r3, r3, #1 +1000900c: 602b str r3, [r5, #0] +1000900e: bd38 pop {r3, r4, r5, pc} +10009010: 1003f4c5 .word 0x1003f4c5 + +10009014 : +10009014: b538 push {r3, r4, r5, lr} +10009016: 4605 mov r5, r0 +10009018: f7ff fa08 bl 1000842c +1000901c: 6b6c ldr r4, [r5, #52] ; 0x34 +1000901e: b164 cbz r4, 1000903a +10009020: 4628 mov r0, r5 +10009022: f7ff ff4d bl 10008ec0 +10009026: 6823 ldr r3, [r4, #0] +10009028: 035a lsls r2, r3, #13 +1000902a: d506 bpl.n 1000903a +1000902c: f423 2380 bic.w r3, r3, #262144 ; 0x40000 +10009030: 6023 str r3, [r4, #0] +10009032: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10009036: f7fe bcad b.w 10007994 +1000903a: bd38 pop {r3, r4, r5, pc} + +1000903c : +1000903c: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10009040: 4681 mov r9, r0 +10009042: 4616 mov r6, r2 +10009044: f89d a030 ldrb.w sl, [sp, #48] ; 0x30 +10009048: 4688 mov r8, r1 +1000904a: b151 cbz r1, 10009062 +1000904c: b14e cbz r6, 10009062 +1000904e: b15b cbz r3, 10009068 +10009050: b2b2 uxth r2, r6 +10009052: 9200 str r2, [sp, #0] +10009054: 2200 movs r2, #0 +10009056: 4610 mov r0, r2 +10009058: f001 fb1a bl 1000a690 +1000905c: 4604 mov r4, r0 +1000905e: b2b6 uxth r6, r6 +10009060: b924 cbnz r4, 1000906c +10009062: b003 add sp, #12 +10009064: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10009068: 1e4c subs r4, r1, #1 +1000906a: e7f8 b.n 1000905e +1000906c: eba4 0708 sub.w r7, r4, r8 +10009070: 1bf7 subs r7, r6, r7 +10009072: b2bf uxth r7, r7 +10009074: 9700 str r7, [sp, #0] +10009076: 233d movs r3, #61 ; 0x3d +10009078: 2200 movs r2, #0 +1000907a: 1c61 adds r1, r4, #1 +1000907c: 4620 mov r0, r4 +1000907e: f001 fb07 bl 1000a690 +10009082: 4605 mov r5, r0 +10009084: 2800 cmp r0, #0 +10009086: d0ec beq.n 10009062 +10009088: 463b mov r3, r7 +1000908a: 463a mov r2, r7 +1000908c: eba5 0708 sub.w r7, r5, r8 +10009090: 1bf7 subs r7, r6, r7 +10009092: 4621 mov r1, r4 +10009094: 4620 mov r0, r4 +10009096: b2bf uxth r7, r7 +10009098: f001 fb97 bl 1000a7ca +1000909c: 4653 mov r3, sl +1000909e: 9700 str r7, [sp, #0] +100090a0: 2200 movs r2, #0 +100090a2: 1c69 adds r1, r5, #1 +100090a4: 4628 mov r0, r5 +100090a6: f001 faf3 bl 1000a690 +100090aa: 7823 ldrb r3, [r4, #0] +100090ac: 4683 mov fp, r0 +100090ae: b153 cbz r3, 100090c6 +100090b0: 463a mov r2, r7 +100090b2: 4629 mov r1, r5 +100090b4: 463b mov r3, r7 +100090b6: 4628 mov r0, r5 +100090b8: f001 fb87 bl 1000a7ca +100090bc: 462a mov r2, r5 +100090be: 4621 mov r1, r4 +100090c0: 4648 mov r0, r9 +100090c2: f003 f835 bl 1000c130 +100090c6: 465c mov r4, fp +100090c8: e7ca b.n 10009060 + ... + +100090cc : +100090cc: b570 push {r4, r5, r6, lr} +100090ce: 4614 mov r4, r2 +100090d0: 461e mov r6, r3 +100090d2: 8882 ldrh r2, [r0, #4] +100090d4: 18e3 adds r3, r4, r3 +100090d6: 3301 adds r3, #1 +100090d8: 4293 cmp r3, r2 +100090da: 4605 mov r5, r0 +100090dc: db02 blt.n 100090e4 +100090de: 2400 movs r4, #0 +100090e0: 4620 mov r0, r4 +100090e2: bd70 pop {r4, r5, r6, pc} +100090e4: 6cc0 ldr r0, [r0, #76] ; 0x4c +100090e6: f001 fc47 bl 1000a978 +100090ea: 2800 cmp r0, #0 +100090ec: d0f7 beq.n 100090de +100090ee: 88ab ldrh r3, [r5, #4] +100090f0: 6cea ldr r2, [r5, #76] ; 0x4c +100090f2: 4404 add r4, r0 +100090f4: 441a add r2, r3 +100090f6: 1b12 subs r2, r2, r4 +100090f8: 4909 ldr r1, [pc, #36] ; (10009120 ) +100090fa: 4620 mov r0, r4 +100090fc: f001 fc3c bl 1000a978 +10009100: b930 cbnz r0, 10009110 +10009102: f44f 73c8 mov.w r3, #400 ; 0x190 +10009106: 802b strh r3, [r5, #0] +10009108: e7e9 b.n 100090de +1000910a: 4284 cmp r4, r0 +1000910c: d203 bcs.n 10009116 +1000910e: 3401 adds r4, #1 +10009110: 7823 ldrb r3, [r4, #0] +10009112: 2b20 cmp r3, #32 +10009114: d0f9 beq.n 1000910a +10009116: 1b00 subs r0, r0, r4 +10009118: 4286 cmp r6, r0 +1000911a: dde1 ble.n 100090e0 +1000911c: e7f1 b.n 10009102 +1000911e: bf00 nop +10009120: 1003f72e .word 0x1003f72e + +10009124 : +10009124: b570 push {r4, r5, r6, lr} +10009126: 6b44 ldr r4, [r0, #52] ; 0x34 +10009128: 460e mov r6, r1 +1000912a: 6823 ldr r3, [r4, #0] +1000912c: f003 0318 and.w r3, r3, #24 +10009130: 2b08 cmp r3, #8 +10009132: d101 bne.n 10009138 +10009134: 2000 movs r0, #0 +10009136: bd70 pop {r4, r5, r6, pc} +10009138: 4608 mov r0, r1 +1000913a: f7ff fdcb bl 10008cd4 +1000913e: 4605 mov r5, r0 +10009140: 4601 mov r1, r0 +10009142: 4632 mov r2, r6 +10009144: 4814 ldr r0, [pc, #80] ; (10009198 ) +10009146: f011 fd1b bl 1001ab80 +1000914a: 2dff cmp r5, #255 ; 0xff +1000914c: d0f2 beq.n 10009134 +1000914e: 4e13 ldr r6, [pc, #76] ; (1000919c ) +10009150: 89b2 ldrh r2, [r6, #12] +10009152: 0790 lsls r0, r2, #30 +10009154: bf48 it mi +10009156: 6823 ldrmi r3, [r4, #0] +10009158: 4628 mov r0, r5 +1000915a: bf44 itt mi +1000915c: f043 0310 orrmi.w r3, r3, #16 +10009160: 6023 strmi r3, [r4, #0] +10009162: f7ff fe2d bl 10008dc0 +10009166: 69e3 ldr r3, [r4, #28] +10009168: 4418 add r0, r3 +1000916a: 89b3 ldrh r3, [r6, #12] +1000916c: 61e0 str r0, [r4, #28] +1000916e: 07d9 lsls r1, r3, #31 +10009170: d50c bpl.n 1000918c +10009172: 6823 ldr r3, [r4, #0] +10009174: 071a lsls r2, r3, #28 +10009176: d506 bpl.n 10009186 +10009178: 4628 mov r0, r5 +1000917a: f7ff fceb bl 10008b54 +1000917e: 4808 ldr r0, [pc, #32] ; (100091a0 ) +10009180: f011 fcfe bl 1001ab80 +10009184: e7d6 b.n 10009134 +10009186: f043 0320 orr.w r3, r3, #32 +1000918a: 6023 str r3, [r4, #0] +1000918c: 4620 mov r0, r4 +1000918e: 4629 mov r1, r5 +10009190: f7ff fe74 bl 10008e7c +10009194: 2001 movs r0, #1 +10009196: bd70 pop {r4, r5, r6, pc} +10009198: 1003f4a6 .word 0x1003f4a6 +1000919c: 1004a7cc .word 0x1004a7cc +100091a0: 1003f4b0 .word 0x1003f4b0 + +100091a4 : +100091a4: b570 push {r4, r5, r6, lr} +100091a6: 7a03 ldrb r3, [r0, #8] +100091a8: b090 sub sp, #64 ; 0x40 +100091aa: 2b2f cmp r3, #47 ; 0x2f +100091ac: 4605 mov r5, r0 +100091ae: 460c mov r4, r1 +100091b0: d003 beq.n 100091ba +100091b2: 2400 movs r4, #0 +100091b4: 4620 mov r0, r4 +100091b6: b010 add sp, #64 ; 0x40 +100091b8: bd70 pop {r4, r5, r6, pc} +100091ba: 7a43 ldrb r3, [r0, #9] +100091bc: 6b4e ldr r6, [r1, #52] ; 0x34 +100091be: bb4b cbnz r3, 10009214 +100091c0: 4b3d ldr r3, [pc, #244] ; (100092b8 ) +100091c2: 781b ldrb r3, [r3, #0] +100091c4: b17b cbz r3, 100091e6 +100091c6: 21fc movs r1, #252 ; 0xfc +100091c8: 4630 mov r0, r6 +100091ca: f7ff fe57 bl 10008e7c +100091ce: 233e movs r3, #62 ; 0x3e +100091d0: 2401 movs r4, #1 +100091d2: 61f3 str r3, [r6, #28] +100091d4: f885 405d strb.w r4, [r5, #93] ; 0x5d +100091d8: f105 0208 add.w r2, r5, #8 +100091dc: 7931 ldrb r1, [r6, #4] +100091de: 4837 ldr r0, [pc, #220] ; (100092bc ) +100091e0: f011 fcce bl 1001ab80 +100091e4: e7e6 b.n 100091b4 +100091e6: 4936 ldr r1, [pc, #216] ; (100092c0 ) +100091e8: 4668 mov r0, sp +100091ea: f001 f993 bl 1000a514 +100091ee: 4b32 ldr r3, [pc, #200] ; (100092b8 ) +100091f0: 781b ldrb r3, [r3, #0] +100091f2: 2b00 cmp r3, #0 +100091f4: d1dd bne.n 100091b2 +100091f6: 4669 mov r1, sp +100091f8: 4620 mov r0, r4 +100091fa: f7ff ff93 bl 10009124 +100091fe: b350 cbz r0, 10009256 +10009200: 466b mov r3, sp +10009202: 2400 movs r4, #0 +10009204: f813 2b01 ldrb.w r2, [r3], #1 +10009208: 2a1f cmp r2, #31 +1000920a: d83c bhi.n 10009286 +1000920c: 2c00 cmp r4, #0 +1000920e: d13e bne.n 1000928e +10009210: 2401 movs r4, #1 +10009212: e7cf b.n 100091b4 +10009214: f100 0109 add.w r1, r0, #9 +10009218: 223f movs r2, #63 ; 0x3f +1000921a: 4668 mov r0, sp +1000921c: f011 fcd8 bl 1001abd0 +10009220: 4928 ldr r1, [pc, #160] ; (100092c4 ) +10009222: 4668 mov r0, sp +10009224: f001 f981 bl 1000a52a +10009228: b128 cbz r0, 10009236 +1000922a: 21fd movs r1, #253 ; 0xfd +1000922c: 4630 mov r0, r6 +1000922e: f7ff fe25 bl 10008e7c +10009232: 2349 movs r3, #73 ; 0x49 +10009234: e7cc b.n 100091d0 +10009236: 4924 ldr r1, [pc, #144] ; (100092c8 ) +10009238: 4668 mov r0, sp +1000923a: f001 f976 bl 1000a52a +1000923e: 2800 cmp r0, #0 +10009240: d0d5 beq.n 100091ee +10009242: 6833 ldr r3, [r6, #0] +10009244: 21fe movs r1, #254 ; 0xfe +10009246: f443 6380 orr.w r3, r3, #1024 ; 0x400 +1000924a: 6033 str r3, [r6, #0] +1000924c: 4630 mov r0, r6 +1000924e: f7ff fe15 bl 10008e7c +10009252: 23dc movs r3, #220 ; 0xdc +10009254: e7bc b.n 100091d0 +10009256: 4668 mov r0, sp +10009258: f011 fcce bl 1001abf8 +1000925c: f100 030b add.w r3, r0, #11 +10009260: 2b3e cmp r3, #62 ; 0x3e +10009262: d8cd bhi.n 10009200 +10009264: 222f movs r2, #47 ; 0x2f +10009266: ab10 add r3, sp, #64 ; 0x40 +10009268: 4403 add r3, r0 +1000926a: 3001 adds r0, #1 +1000926c: 4914 ldr r1, [pc, #80] ; (100092c0 ) +1000926e: 4468 add r0, sp +10009270: f803 2c40 strb.w r2, [r3, #-64] +10009274: f001 f94e bl 1000a514 +10009278: 4669 mov r1, sp +1000927a: 4620 mov r0, r4 +1000927c: f7ff ff52 bl 10009124 +10009280: 2800 cmp r0, #0 +10009282: d1bd bne.n 10009200 +10009284: e795 b.n 100091b2 +10009286: 2a2e cmp r2, #46 ; 0x2e +10009288: bf08 it eq +1000928a: 461c moveq r4, r3 +1000928c: e7ba b.n 10009204 +1000928e: 2300 movs r3, #0 +10009290: 4e0e ldr r6, [pc, #56] ; (100092cc ) +10009292: f885 305d strb.w r3, [r5, #93] ; 0x5d +10009296: f895 305d ldrb.w r3, [r5, #93] ; 0x5d +1000929a: 2b0f cmp r3, #15 +1000929c: d8b8 bhi.n 10009210 +1000929e: f856 1023 ldr.w r1, [r6, r3, lsl #2] +100092a2: 4620 mov r0, r4 +100092a4: f001 f941 bl 1000a52a +100092a8: 2800 cmp r0, #0 +100092aa: d1b1 bne.n 10009210 +100092ac: f895 305d ldrb.w r3, [r5, #93] ; 0x5d +100092b0: 3301 adds r3, #1 +100092b2: f885 305d strb.w r3, [r5, #93] ; 0x5d +100092b6: e7ee b.n 10009296 +100092b8: 1004a7e0 .word 0x1004a7e0 +100092bc: 1003f4a6 .word 0x1003f4a6 +100092c0: 1003f328 .word 0x1003f328 +100092c4: 1003f49e .word 0x1003f49e +100092c8: 1003f294 .word 0x1003f294 +100092cc: 1003f2e4 .word 0x1003f2e4 + +100092d0 : +100092d0: b510 push {r4, lr} +100092d2: 7901 ldrb r1, [r0, #4] +100092d4: 4604 mov r4, r0 +100092d6: 29ff cmp r1, #255 ; 0xff +100092d8: d105 bne.n 100092e6 +100092da: 6823 ldr r3, [r4, #0] +100092dc: 2001 movs r0, #1 +100092de: f023 0338 bic.w r3, r3, #56 ; 0x38 +100092e2: 6023 str r3, [r4, #0] +100092e4: bd10 pop {r4, pc} +100092e6: 480c ldr r0, [pc, #48] ; (10009318 ) +100092e8: f011 fc4a bl 1001ab80 +100092ec: 7920 ldrb r0, [r4, #4] +100092ee: 28fb cmp r0, #251 ; 0xfb +100092f0: d805 bhi.n 100092fe +100092f2: f7ff fc2f bl 10008b54 +100092f6: 6823 ldr r3, [r4, #0] +100092f8: f023 0320 bic.w r3, r3, #32 +100092fc: 6023 str r3, [r4, #0] +100092fe: 79a2 ldrb r2, [r4, #6] +10009300: 7963 ldrb r3, [r4, #5] +10009302: 7162 strb r2, [r4, #5] +10009304: 79e2 ldrb r2, [r4, #7] +10009306: 7123 strb r3, [r4, #4] +10009308: 71a2 strb r2, [r4, #6] +1000930a: 22ff movs r2, #255 ; 0xff +1000930c: 4293 cmp r3, r2 +1000930e: 71e2 strb r2, [r4, #7] +10009310: d0e3 beq.n 100092da +10009312: 2000 movs r0, #0 +10009314: bd10 pop {r4, pc} +10009316: bf00 nop +10009318: 1003f4bf .word 0x1003f4bf + +1000931c : +1000931c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10009320: 6b44 ldr r4, [r0, #52] ; 0x34 +10009322: b087 sub sp, #28 +10009324: 7923 ldrb r3, [r4, #4] +10009326: 4605 mov r5, r0 +10009328: 2bff cmp r3, #255 ; 0xff +1000932a: d104 bne.n 10009336 +1000932c: 6823 ldr r3, [r4, #0] +1000932e: f043 0306 orr.w r3, r3, #6 +10009332: 6023 str r3, [r4, #0] +10009334: e01e b.n 10009374 +10009336: 48a1 ldr r0, [pc, #644] ; (100095bc ) +10009338: f011 fc22 bl 1001ab80 +1000933c: 69ab ldr r3, [r5, #24] +1000933e: f8b3 106a ldrh.w r1, [r3, #106] ; 0x6a +10009342: f5b1 7f8c cmp.w r1, #280 ; 0x118 +10009346: 82e1 strh r1, [r4, #22] +10009348: d217 bcs.n 1000937a +1000934a: 489d ldr r0, [pc, #628] ; (100095c0 ) +1000934c: f011 fc18 bl 1001ab80 +10009350: 882b ldrh r3, [r5, #0] +10009352: 0658 lsls r0, r3, #25 +10009354: d502 bpl.n 1000935c +10009356: 489b ldr r0, [pc, #620] ; (100095c4 ) +10009358: f011 fc12 bl 1001ab80 +1000935c: 69aa ldr r2, [r5, #24] +1000935e: 4629 mov r1, r5 +10009360: f892 3022 ldrb.w r3, [r2, #34] ; 0x22 +10009364: 4628 mov r0, r5 +10009366: f023 0340 bic.w r3, r3, #64 ; 0x40 +1000936a: f882 3022 strb.w r3, [r2, #34] ; 0x22 +1000936e: 2200 movs r2, #0 +10009370: f7ff fa26 bl 100087c0 +10009374: b007 add sp, #28 +10009376: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1000937a: 7923 ldrb r3, [r4, #4] +1000937c: 2bfb cmp r3, #251 ; 0xfb +1000937e: d91c bls.n 100093ba +10009380: 6826 ldr r6, [r4, #0] +10009382: f016 0680 ands.w r6, r6, #128 ; 0x80 +10009386: d118 bne.n 100093ba +10009388: 6b6c ldr r4, [r5, #52] ; 0x34 +1000938a: 7923 ldrb r3, [r4, #4] +1000938c: 2bfd cmp r3, #253 ; 0xfd +1000938e: d006 beq.n 1000939e +10009390: 2bfe cmp r3, #254 ; 0xfe +10009392: d00f beq.n 100093b4 +10009394: 2bfc cmp r3, #252 ; 0xfc +10009396: d108 bne.n 100093aa +10009398: 498b ldr r1, [pc, #556] ; (100095c8 ) +1000939a: 263e movs r6, #62 ; 0x3e +1000939c: e001 b.n 100093a2 +1000939e: 2649 movs r6, #73 ; 0x49 +100093a0: 498a ldr r1, [pc, #552] ; (100095cc ) +100093a2: 4632 mov r2, r6 +100093a4: 4628 mov r0, r5 +100093a6: f7ff fa0b bl 100087c0 +100093aa: 4631 mov r1, r6 +100093ac: 4888 ldr r0, [pc, #544] ; (100095d0 ) +100093ae: f011 fbe7 bl 1001ab80 +100093b2: e7bb b.n 1000932c +100093b4: 4987 ldr r1, [pc, #540] ; (100095d4 ) +100093b6: 26dc movs r6, #220 ; 0xdc +100093b8: e7f3 b.n 100093a2 +100093ba: f641 409c movw r0, #7324 ; 0x1c9c +100093be: 4288 cmp r0, r1 +100093c0: bf28 it cs +100093c2: 4608 movcs r0, r1 +100093c4: 82e0 strh r0, [r4, #22] +100093c6: f00b fec5 bl 10015154 +100093ca: 4607 mov r7, r0 +100093cc: b918 cbnz r0, 100093d6 +100093ce: 4882 ldr r0, [pc, #520] ; (100095d8 ) +100093d0: f011 fbd6 bl 1001ab80 +100093d4: e7aa b.n 1000932c +100093d6: 2300 movs r3, #0 +100093d8: 6822 ldr r2, [r4, #0] +100093da: 6120 str r0, [r4, #16] +100093dc: 0651 lsls r1, r2, #25 +100093de: 82a3 strh r3, [r4, #20] +100093e0: d505 bpl.n 100093ee +100093e2: f100 0310 add.w r3, r0, #16 +100093e6: 6123 str r3, [r4, #16] +100093e8: 8ae3 ldrh r3, [r4, #22] +100093ea: 3b18 subs r3, #24 +100093ec: 82e3 strh r3, [r4, #22] +100093ee: 06d3 lsls r3, r2, #27 +100093f0: d446 bmi.n 10009480 +100093f2: 8ae2 ldrh r2, [r4, #22] +100093f4: 6921 ldr r1, [r4, #16] +100093f6: 7920 ldrb r0, [r4, #4] +100093f8: f7ff fbb8 bl 10008b6c +100093fc: 8ae3 ldrh r3, [r4, #22] +100093fe: 82a0 strh r0, [r4, #20] +10009400: 4283 cmp r3, r0 +10009402: d903 bls.n 1000940c +10009404: 6823 ldr r3, [r4, #0] +10009406: f043 0306 orr.w r3, r3, #6 +1000940a: 6023 str r3, [r4, #0] +1000940c: 8aa1 ldrh r1, [r4, #20] +1000940e: 4870 ldr r0, [pc, #448] ; (100095d0 ) +10009410: f011 fbb6 bl 1001ab80 +10009414: 8aa2 ldrh r2, [r4, #20] +10009416: 2a00 cmp r2, #0 +10009418: d02c beq.n 10009474 +1000941a: 69e3 ldr r3, [r4, #28] +1000941c: 1a9b subs r3, r3, r2 +1000941e: 61e3 str r3, [r4, #28] +10009420: 6823 ldr r3, [r4, #0] +10009422: 0659 lsls r1, r3, #25 +10009424: d51a bpl.n 1000945c +10009426: 496d ldr r1, [pc, #436] ; (100095dc ) +10009428: a802 add r0, sp, #8 +1000942a: f011 fb83 bl 1001ab34 +1000942e: 4606 mov r6, r0 +10009430: 6920 ldr r0, [r4, #16] +10009432: 4632 mov r2, r6 +10009434: 1b80 subs r0, r0, r6 +10009436: 6120 str r0, [r4, #16] +10009438: a902 add r1, sp, #8 +1000943a: f011 fbc9 bl 1001abd0 +1000943e: 8aa0 ldrh r0, [r4, #20] +10009440: 6823 ldr r3, [r4, #0] +10009442: 4406 add r6, r0 +10009444: b2b6 uxth r6, r6 +10009446: 075b lsls r3, r3, #29 +10009448: 82a6 strh r6, [r4, #20] +1000944a: d507 bpl.n 1000945c +1000944c: 6920 ldr r0, [r4, #16] +1000944e: 4964 ldr r1, [pc, #400] ; (100095e0 ) +10009450: 4430 add r0, r6 +10009452: f001 f85f bl 1000a514 +10009456: 8aa3 ldrh r3, [r4, #20] +10009458: 4418 add r0, r3 +1000945a: 82a0 strh r0, [r4, #20] +1000945c: 69aa ldr r2, [r5, #24] +1000945e: 4628 mov r0, r5 +10009460: f892 3022 ldrb.w r3, [r2, #34] ; 0x22 +10009464: f043 0340 orr.w r3, r3, #64 ; 0x40 +10009468: f882 3022 strb.w r3, [r2, #34] ; 0x22 +1000946c: 8aa2 ldrh r2, [r4, #20] +1000946e: 6921 ldr r1, [r4, #16] +10009470: f7ff f9a6 bl 100087c0 +10009474: 4638 mov r0, r7 +10009476: f00b ff09 bl 1001528c +1000947a: 2300 movs r3, #0 +1000947c: 6123 str r3, [r4, #16] +1000947e: e779 b.n 10009374 +10009480: f8df 8164 ldr.w r8, [pc, #356] ; 100095e8 +10009484: f8df a164 ldr.w sl, [pc, #356] ; 100095ec +10009488: 6826 ldr r6, [r4, #0] +1000948a: f016 0680 ands.w r6, r6, #128 ; 0x80 +1000948e: d010 beq.n 100094b2 +10009490: 69a3 ldr r3, [r4, #24] +10009492: b10b cbz r3, 10009498 +10009494: 4628 mov r0, r5 +10009496: 4798 blx r3 +10009498: 6823 ldr r3, [r4, #0] +1000949a: 061e lsls r6, r3, #24 +1000949c: d4b6 bmi.n 1000940c +1000949e: 8ae3 ldrh r3, [r4, #22] +100094a0: 8aa2 ldrh r2, [r4, #20] +100094a2: 1a9b subs r3, r3, r2 +100094a4: 2b7f cmp r3, #127 ; 0x7f +100094a6: ddb1 ble.n 1000940c +100094a8: 6823 ldr r3, [r4, #0] +100094aa: f013 0f86 tst.w r3, #134 ; 0x86 +100094ae: d0eb beq.n 10009488 +100094b0: e7ac b.n 1000940c +100094b2: 8aa3 ldrh r3, [r4, #20] +100094b4: 6922 ldr r2, [r4, #16] +100094b6: 7920 ldrb r0, [r4, #4] +100094b8: eb02 0b03 add.w fp, r2, r3 +100094bc: 8ae2 ldrh r2, [r4, #22] +100094be: 4659 mov r1, fp +100094c0: eba2 0903 sub.w r9, r2, r3 +100094c4: f1b9 0f80 cmp.w r9, #128 ; 0x80 +100094c8: bfa8 it ge +100094ca: f04f 0980 movge.w r9, #128 ; 0x80 +100094ce: fa1f f289 uxth.w r2, r9 +100094d2: f7ff fb4b bl 10008b6c +100094d6: 4602 mov r2, r0 +100094d8: 2800 cmp r0, #0 +100094da: d063 beq.n 100095a4 +100094dc: 4658 mov r0, fp +100094de: 4601 mov r1, r0 +100094e0: f891 e000 ldrb.w lr, [r1] +100094e4: 3001 adds r0, #1 +100094e6: f1be 0f7e cmp.w lr, #126 ; 0x7e +100094ea: d11e bne.n 1000952a +100094ec: f04f 0e0c mov.w lr, #12 +100094f0: 7923 ldrb r3, [r4, #4] +100094f2: fb0e fe03 mul.w lr, lr, r3 +100094f6: f858 300e ldr.w r3, [r8, lr] +100094fa: eb08 0c0e add.w ip, r8, lr +100094fe: f8dc 0004 ldr.w r0, [ip, #4] +10009502: 3301 adds r3, #1 +10009504: 1a9b subs r3, r3, r2 +10009506: 4433 add r3, r6 +10009508: 3801 subs r0, #1 +1000950a: f848 300e str.w r3, [r8, lr] +1000950e: 4410 add r0, r2 +10009510: 6823 ldr r3, [r4, #0] +10009512: 1b80 subs r0, r0, r6 +10009514: f8cc 0004 str.w r0, [ip, #4] +10009518: 0518 lsls r0, r3, #20 +1000951a: d41d bmi.n 10009558 +1000951c: f443 6300 orr.w r3, r3, #2048 ; 0x800 +10009520: 6023 str r3, [r4, #0] +10009522: 8aa3 ldrh r3, [r4, #20] +10009524: 441e add r6, r3 +10009526: 82a6 strh r6, [r4, #20] +10009528: e7b9 b.n 1000949e +1000952a: 3601 adds r6, #1 +1000952c: 42b2 cmp r2, r6 +1000952e: d8d6 bhi.n 100094de +10009530: 6821 ldr r1, [r4, #0] +10009532: 4591 cmp r9, r2 +10009534: f421 6100 bic.w r1, r1, #2048 ; 0x800 +10009538: 6021 str r1, [r4, #0] +1000953a: d909 bls.n 10009550 +1000953c: 4620 mov r0, r4 +1000953e: 9201 str r2, [sp, #4] +10009540: f7ff fec6 bl 100092d0 +10009544: 9a01 ldr r2, [sp, #4] +10009546: b118 cbz r0, 10009550 +10009548: 6823 ldr r3, [r4, #0] +1000954a: f043 0306 orr.w r3, r3, #6 +1000954e: 6023 str r3, [r4, #0] +10009550: 8aa0 ldrh r0, [r4, #20] +10009552: 4402 add r2, r0 +10009554: 82a2 strh r2, [r4, #20] +10009556: e7a2 b.n 1000949e +10009558: f423 6300 bic.w r3, r3, #2048 ; 0x800 +1000955c: 6023 str r3, [r4, #0] +1000955e: b1ee cbz r6, 1000959c +10009560: 2300 movs r3, #0 +10009562: 2204 movs r2, #4 +10009564: 700b strb r3, [r1, #0] +10009566: 4658 mov r0, fp +10009568: 491e ldr r1, [pc, #120] ; (100095e4 ) +1000956a: f011 fb2d bl 1001abc8 +1000956e: b980 cbnz r0, 10009592 +10009570: f10b 0104 add.w r1, fp, #4 +10009574: 4628 mov r0, r5 +10009576: f7ff fdd5 bl 10009124 +1000957a: 2800 cmp r0, #0 +1000957c: d18f bne.n 1000949e +1000957e: 8aa3 ldrh r3, [r4, #20] +10009580: 6920 ldr r0, [r4, #16] +10009582: 4651 mov r1, sl +10009584: 4418 add r0, r3 +10009586: f000 ffc5 bl 1000a514 +1000958a: 8aa3 ldrh r3, [r4, #20] +1000958c: 4418 add r0, r3 +1000958e: 82a0 strh r0, [r4, #20] +10009590: e785 b.n 1000949e +10009592: 4659 mov r1, fp +10009594: 4628 mov r0, r5 +10009596: f001 fc27 bl 1000ade8 +1000959a: e780 b.n 1000949e +1000959c: 8aa3 ldrh r3, [r4, #20] +1000959e: 3301 adds r3, #1 +100095a0: 82a3 strh r3, [r4, #20] +100095a2: e77c b.n 1000949e +100095a4: 4620 mov r0, r4 +100095a6: f7ff fe93 bl 100092d0 +100095aa: 2800 cmp r0, #0 +100095ac: f43f af77 beq.w 1000949e +100095b0: 6823 ldr r3, [r4, #0] +100095b2: f043 0306 orr.w r3, r3, #6 +100095b6: 6023 str r3, [r4, #0] +100095b8: e771 b.n 1000949e +100095ba: bf00 nop +100095bc: 1003f6d8 .word 0x1003f6d8 +100095c0: 1003f6df .word 0x1003f6df +100095c4: 1003f6eb .word 0x1003f6eb +100095c8: 1003eee6 .word 0x1003eee6 +100095cc: 1003ee9c .word 0x1003ee9c +100095d0: 1003f589 .word 0x1003f589 +100095d4: 1003ef25 .word 0x1003ef25 +100095d8: 1003f6f7 .word 0x1003f6f7 +100095dc: 1003f24c .word 0x1003f24c +100095e0: 1003f729 .word 0x1003f729 +100095e4: 1003f714 .word 0x1003f714 +100095e8: 1004a648 .word 0x1004a648 +100095ec: 1003f719 .word 0x1003f719 + +100095f0 : +100095f0: b538 push {r3, r4, r5, lr} +100095f2: 4605 mov r5, r0 +100095f4: f7fe ff02 bl 100083fc +100095f8: 6b6c ldr r4, [r5, #52] ; 0x34 +100095fa: b374 cbz r4, 1000965a +100095fc: 6821 ldr r1, [r4, #0] +100095fe: 07c8 lsls r0, r1, #31 +10009600: d41f bmi.n 10009642 +10009602: 078a lsls r2, r1, #30 +10009604: d406 bmi.n 10009614 +10009606: f001 010c and.w r1, r1, #12 +1000960a: 2908 cmp r1, #8 +1000960c: d102 bne.n 10009614 +1000960e: 4628 mov r0, r5 +10009610: f7ff fe84 bl 1000931c +10009614: 6823 ldr r3, [r4, #0] +10009616: 075b lsls r3, r3, #29 +10009618: d506 bpl.n 10009628 +1000961a: 4628 mov r0, r5 +1000961c: f7ff fc50 bl 10008ec0 +10009620: 6823 ldr r3, [r4, #0] +10009622: f043 0302 orr.w r3, r3, #2 +10009626: 6023 str r3, [r4, #0] +10009628: 6824 ldr r4, [r4, #0] +1000962a: f014 0402 ands.w r4, r4, #2 +1000962e: d004 beq.n 1000963a +10009630: 4628 mov r0, r5 +10009632: f7ff fcd1 bl 10008fd8 +10009636: 2000 movs r0, #0 +10009638: bd38 pop {r3, r4, r5, pc} +1000963a: 4809 ldr r0, [pc, #36] ; (10009660 ) +1000963c: f011 faa0 bl 1001ab80 +10009640: e7f9 b.n 10009636 +10009642: 4808 ldr r0, [pc, #32] ; (10009664 ) +10009644: f011 fa9c bl 1001ab80 +10009648: 882b ldrh r3, [r5, #0] +1000964a: f043 0320 orr.w r3, r3, #32 +1000964e: 802b strh r3, [r5, #0] +10009650: 882b ldrh r3, [r5, #0] +10009652: f043 0310 orr.w r3, r3, #16 +10009656: 802b strh r3, [r5, #0] +10009658: e7ed b.n 10009636 +1000965a: f06f 000d mvn.w r0, #13 +1000965e: bd38 pop {r3, r4, r5, pc} +10009660: 100413d4 .word 0x100413d4 +10009664: 1003f731 .word 0x1003f731 + +10009668 : +10009668: b538 push {r3, r4, r5, lr} +1000966a: 4604 mov r4, r0 +1000966c: 4615 mov r5, r2 +1000966e: b189 cbz r1, 10009694 +10009670: b182 cbz r2, 10009694 +10009672: 8d43 ldrh r3, [r0, #42] ; 0x2a +10009674: 429a cmp r2, r3 +10009676: d20d bcs.n 10009694 +10009678: 6a40 ldr r0, [r0, #36] ; 0x24 +1000967a: f011 faa9 bl 1001abd0 +1000967e: 1c69 adds r1, r5, #1 +10009680: 6a60 ldr r0, [r4, #36] ; 0x24 +10009682: f00b fe27 bl 100152d4 +10009686: 6260 str r0, [r4, #36] ; 0x24 +10009688: b118 cbz r0, 10009692 +1000968a: 2300 movs r3, #0 +1000968c: 8565 strh r5, [r4, #42] ; 0x2a +1000968e: 85e3 strh r3, [r4, #46] ; 0x2e +10009690: 2001 movs r0, #1 +10009692: bd38 pop {r3, r4, r5, pc} +10009694: 6a60 ldr r0, [r4, #36] ; 0x24 +10009696: 2800 cmp r0, #0 +10009698: d0fa beq.n 10009690 +1000969a: f00b fdf7 bl 1001528c +1000969e: 2300 movs r3, #0 +100096a0: 6263 str r3, [r4, #36] ; 0x24 +100096a2: 8563 strh r3, [r4, #42] ; 0x2a +100096a4: e7f3 b.n 1000968e + +100096a6 : +100096a6: b538 push {r3, r4, r5, lr} +100096a8: 4604 mov r4, r0 +100096aa: 6a40 ldr r0, [r0, #36] ; 0x24 +100096ac: 2500 movs r5, #0 +100096ae: b128 cbz r0, 100096bc +100096b0: f00b fdec bl 1001528c +100096b4: 2001 movs r0, #1 +100096b6: 6265 str r5, [r4, #36] ; 0x24 +100096b8: 8565 strh r5, [r4, #42] ; 0x2a +100096ba: 85e5 strh r5, [r4, #46] ; 0x2e +100096bc: bd38 pop {r3, r4, r5, pc} + ... + +100096c0 : +100096c0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100096c4: 4604 mov r4, r0 +100096c6: b0b3 sub sp, #204 ; 0xcc +100096c8: f7fe fe98 bl 100083fc +100096cc: 8d61 ldrh r1, [r4, #42] ; 0x2a +100096ce: 488d ldr r0, [pc, #564] ; (10009904 ) +100096d0: f011 fa56 bl 1001ab80 +100096d4: 6b66 ldr r6, [r4, #52] ; 0x34 +100096d6: b976 cbnz r6, 100096f6 +100096d8: 2024 movs r0, #36 ; 0x24 +100096da: f00b fe47 bl 1001536c +100096de: 4606 mov r6, r0 +100096e0: 2800 cmp r0, #0 +100096e2: f000 867b beq.w 1000a3dc +100096e6: 23ff movs r3, #255 ; 0xff +100096e8: 7103 strb r3, [r0, #4] +100096ea: 7143 strb r3, [r0, #5] +100096ec: 7183 strb r3, [r0, #6] +100096ee: 71c3 strb r3, [r0, #7] +100096f0: 2300 movs r3, #0 +100096f2: 6003 str r3, [r0, #0] +100096f4: 6360 str r0, [r4, #52] ; 0x34 +100096f6: 6833 ldr r3, [r6, #0] +100096f8: 075a lsls r2, r3, #29 +100096fa: f040 8189 bne.w 10009a10 +100096fe: f413 3380 ands.w r3, r3, #65536 ; 0x10000 +10009702: bf04 itt eq +10009704: 60b3 streq r3, [r6, #8] +10009706: 60f3 streq r3, [r6, #12] +10009708: 2100 movs r1, #0 +1000970a: 2260 movs r2, #96 ; 0x60 +1000970c: a81a add r0, sp, #104 ; 0x68 +1000970e: f011 fa63 bl 1001abd8 +10009712: 2310 movs r3, #16 +10009714: f04f 0bc8 mov.w fp, #200 ; 0xc8 +10009718: f88d 30c5 strb.w r3, [sp, #197] ; 0xc5 +1000971c: 6833 ldr r3, [r6, #0] +1000971e: f8ad b068 strh.w fp, [sp, #104] ; 0x68 +10009722: 0499 lsls r1, r3, #18 +10009724: f100 8215 bmi.w 10009b52 +10009728: 8823 ldrh r3, [r4, #0] +1000972a: 4620 mov r0, r4 +1000972c: f043 0308 orr.w r3, r3, #8 +10009730: 8023 strh r3, [r4, #0] +10009732: f7ff f8ad bl 10008890 +10009736: f240 13f5 movw r3, #501 ; 0x1f5 +1000973a: 6a67 ldr r7, [r4, #36] ; 0x24 +1000973c: 8d62 ldrh r2, [r4, #42] ; 0x2a +1000973e: 6b65 ldr r5, [r4, #52] ; 0x34 +10009740: eb07 0902 add.w r9, r7, r2 +10009744: f8ad 3068 strh.w r3, [sp, #104] ; 0x68 +10009748: f8cd 90bc str.w r9, [sp, #188] ; 0xbc +1000974c: b927 cbnz r7, 10009758 +1000974e: f44f 73fa mov.w r3, #500 ; 0x1f4 +10009752: f8ad 3068 strh.w r3, [sp, #104] ; 0x68 +10009756: e1c2 b.n 10009ade +10009758: 2a06 cmp r2, #6 +1000975a: f240 81c0 bls.w 10009ade +1000975e: 496a ldr r1, [pc, #424] ; (10009908 ) +10009760: 4638 mov r0, r7 +10009762: f001 f909 bl 1000a978 +10009766: 4682 mov sl, r0 +10009768: b910 cbnz r0, 10009770 +1000976a: f44f 73c8 mov.w r3, #400 ; 0x190 +1000976e: e7f0 b.n 10009752 +10009770: f100 0802 add.w r8, r0, #2 +10009774: eba8 0307 sub.w r3, r8, r7 +10009778: 2b06 cmp r3, #6 +1000977a: f340 81b0 ble.w 10009ade +1000977e: 2204 movs r2, #4 +10009780: 4962 ldr r1, [pc, #392] ; (1000990c ) +10009782: 4638 mov r0, r7 +10009784: f011 fa3c bl 1001ac00 +10009788: 2800 cmp r0, #0 +1000978a: d15b bne.n 10009844 +1000978c: 682b ldr r3, [r5, #0] +1000978e: 1d38 adds r0, r7, #4 +10009790: f443 7300 orr.w r3, r3, #512 ; 0x200 +10009794: 602b str r3, [r5, #0] +10009796: f8ad b068 strh.w fp, [sp, #104] ; 0x68 +1000979a: eba8 0200 sub.w r2, r8, r0 +1000979e: b293 uxth r3, r2 +100097a0: 2b0a cmp r3, #10 +100097a2: 902c str r0, [sp, #176] ; 0xb0 +100097a4: f8ad 306a strh.w r3, [sp, #106] ; 0x6a +100097a8: d915 bls.n 100097d6 +100097aa: 461a mov r2, r3 +100097ac: 4958 ldr r1, [pc, #352] ; (10009910 ) +100097ae: f001 f8e3 bl 1000a978 +100097b2: b180 cbz r0, 100097d6 +100097b4: 79c3 ldrb r3, [r0, #7] +100097b6: 2b2e cmp r3, #46 ; 0x2e +100097b8: d10d bne.n 100097d6 +100097ba: 7983 ldrb r3, [r0, #6] +100097bc: 3b30 subs r3, #48 ; 0x30 +100097be: b2da uxtb r2, r3 +100097c0: 2a09 cmp r2, #9 +100097c2: d808 bhi.n 100097d6 +100097c4: 7a03 ldrb r3, [r0, #8] +100097c6: 3b30 subs r3, #48 ; 0x30 +100097c8: b2db uxtb r3, r3 +100097ca: 2b09 cmp r3, #9 +100097cc: bf9c itt ls +100097ce: eb03 1302 addls.w r3, r3, r2, lsl #4 +100097d2: f88d 30c4 strbls.w r3, [sp, #196] ; 0xc4 +100097d6: f89d 30c4 ldrb.w r3, [sp, #196] ; 0xc4 +100097da: 2b0f cmp r3, #15 +100097dc: d802 bhi.n 100097e4 +100097de: 682b ldr r3, [r5, #0] +100097e0: 05da lsls r2, r3, #23 +100097e2: d4c2 bmi.n 1000976a +100097e4: eba9 0208 sub.w r2, r9, r8 +100097e8: 3202 adds r2, #2 +100097ea: 494a ldr r1, [pc, #296] ; (10009914 ) +100097ec: 4650 mov r0, sl +100097ee: f001 f8c3 bl 1000a978 +100097f2: 2800 cmp r0, #0 +100097f4: f000 8103 beq.w 100099fe +100097f8: 1c83 adds r3, r0, #2 +100097fa: 4598 cmp r8, r3 +100097fc: 682a ldr r2, [r5, #0] +100097fe: d00d beq.n 1000981c +10009800: f8cd 80b4 str.w r8, [sp, #180] ; 0xb4 +10009804: eba3 0808 sub.w r8, r3, r8 +10009808: 05d3 lsls r3, r2, #23 +1000980a: bf42 ittt mi +1000980c: 3004 addmi r0, #4 +1000980e: 902f strmi r0, [sp, #188] ; 0xbc +10009810: eba9 0000 submi.w r0, r9, r0 +10009814: f8ad 806c strh.w r8, [sp, #108] ; 0x6c +10009818: bf48 it mi +1000981a: 9030 strmi r0, [sp, #192] ; 0xc0 +1000981c: 0717 lsls r7, r2, #28 +1000981e: d453 bmi.n 100098c8 +10009820: 992c ldr r1, [sp, #176] ; 0xb0 +10009822: b131 cbz r1, 10009832 +10009824: f8bd 306a ldrh.w r3, [sp, #106] ; 0x6a +10009828: 2b01 cmp r3, #1 +1000982a: d81b bhi.n 10009864 +1000982c: 780b ldrb r3, [r1, #0] +1000982e: f88d 3070 strb.w r3, [sp, #112] ; 0x70 +10009832: 4621 mov r1, r4 +10009834: a81a add r0, sp, #104 ; 0x68 +10009836: f7ff fcb5 bl 100091a4 +1000983a: 2800 cmp r0, #0 +1000983c: d144 bne.n 100098c8 +1000983e: f44f 73ca mov.w r3, #404 ; 0x194 +10009842: e786 b.n 10009752 +10009844: 2205 movs r2, #5 +10009846: 4934 ldr r1, [pc, #208] ; (10009918 ) +10009848: 4638 mov r0, r7 +1000984a: f011 f9d9 bl 1001ac00 +1000984e: 2800 cmp r0, #0 +10009850: f040 8145 bne.w 10009ade +10009854: 682b ldr r3, [r5, #0] +10009856: 1d78 adds r0, r7, #5 +10009858: f443 7380 orr.w r3, r3, #256 ; 0x100 +1000985c: 602b str r3, [r5, #0] +1000985e: f8ad b068 strh.w fp, [sp, #104] ; 0x68 +10009862: e79a b.n 1000979a +10009864: 224f movs r2, #79 ; 0x4f +10009866: a806 add r0, sp, #24 +10009868: f000 ffaf bl 1000a7ca +1000986c: 492b ldr r1, [pc, #172] ; (1000991c ) +1000986e: a806 add r0, sp, #24 +10009870: f000 fe5b bl 1000a52a +10009874: b300 cbz r0, 100098b8 +10009876: f10d 071f add.w r7, sp, #31 +1000987a: 212f movs r1, #47 ; 0x2f +1000987c: 4638 mov r0, r7 +1000987e: f011 f9af bl 1001abe0 +10009882: 2800 cmp r0, #0 +10009884: bf14 ite ne +10009886: 4601 movne r1, r0 +10009888: 4639 moveq r1, r7 +1000988a: 2340 movs r3, #64 ; 0x40 +1000988c: 2200 movs r2, #0 +1000988e: 9300 str r3, [sp, #0] +10009890: a81c add r0, sp, #112 ; 0x70 +10009892: 233f movs r3, #63 ; 0x3f +10009894: f000 fefc bl 1000a690 +10009898: a81c add r0, sp, #112 ; 0x70 +1000989a: f011 f9ad bl 1001abf8 +1000989e: 4920 ldr r1, [pc, #128] ; (10009920 ) +100098a0: 4602 mov r2, r0 +100098a2: a81c add r0, sp, #112 ; 0x70 +100098a4: f001 f868 bl 1000a978 +100098a8: 2800 cmp r0, #0 +100098aa: d0c2 beq.n 10009832 +100098ac: 6b62 ldr r2, [r4, #52] ; 0x34 +100098ae: 6813 ldr r3, [r2, #0] +100098b0: f443 6380 orr.w r3, r3, #1024 ; 0x400 +100098b4: 6013 str r3, [r2, #0] +100098b6: e7bc b.n 10009832 +100098b8: 491a ldr r1, [pc, #104] ; (10009924 ) +100098ba: a806 add r0, sp, #24 +100098bc: f000 fe35 bl 1000a52a +100098c0: 2800 cmp r0, #0 +100098c2: d1d8 bne.n 10009876 +100098c4: a906 add r1, sp, #24 +100098c6: e7e0 b.n 1000988a +100098c8: 9a2d ldr r2, [sp, #180] ; 0xb4 +100098ca: 682b ldr r3, [r5, #0] +100098cc: b112 cbz r2, 100098d4 +100098ce: f8bd 206c ldrh.w r2, [sp, #108] ; 0x6c +100098d2: b92a cbnz r2, 100098e0 +100098d4: 0558 lsls r0, r3, #21 +100098d6: f140 8102 bpl.w 10009ade +100098da: f240 1391 movw r3, #401 ; 0x191 +100098de: e738 b.n 10009752 +100098e0: 05d9 lsls r1, r3, #23 +100098e2: f140 809a bpl.w 10009a1a +100098e6: 4910 ldr r1, [pc, #64] ; (10009928 ) +100098e8: 2301 movs r3, #1 +100098ea: 220f movs r2, #15 +100098ec: 6809 ldr r1, [r1, #0] +100098ee: a81a add r0, sp, #104 ; 0x68 +100098f0: f7ff fbec bl 100090cc +100098f4: b118 cbz r0, 100098fe +100098f6: f8bd 3068 ldrh.w r3, [sp, #104] ; 0x68 +100098fa: 2bc8 cmp r3, #200 ; 0xc8 +100098fc: d016 beq.n 1000992c +100098fe: f240 139b movw r3, #411 ; 0x19b +10009902: e726 b.n 10009752 +10009904: 1003f4ee .word 0x1003f4ee +10009908: 1003f72e .word 0x1003f72e +1000990c: 1003f4f8 .word 0x1003f4f8 +10009910: 1003f503 .word 0x1003f503 +10009914: 1003f72c .word 0x1003f72c +10009918: 1003f4fd .word 0x1003f4fd +1000991c: 1003f50a .word 0x1003f50a +10009920: 1003f51a .word 0x1003f51a +10009924: 1003f512 .word 0x1003f512 +10009928: 10044d44 .word 0x10044d44 +1000992c: f000 fe09 bl 1000a542 +10009930: 4607 mov r7, r0 +10009932: 4601 mov r1, r0 +10009934: 9a30 ldr r2, [sp, #192] ; 0xc0 +10009936: 48a5 ldr r0, [pc, #660] ; (10009bcc ) +10009938: f011 f922 bl 1001ab80 +1000993c: 2f00 cmp r7, #0 +1000993e: d06b beq.n 10009a18 +10009940: 682b ldr r3, [r5, #0] +10009942: 61ef str r7, [r5, #28] +10009944: 045a lsls r2, r3, #17 +10009946: d468 bmi.n 10009a1a +10009948: f8bd 306c ldrh.w r3, [sp, #108] ; 0x6c +1000994c: 2b2d cmp r3, #45 ; 0x2d +1000994e: d94e bls.n 100099ee +10009950: 499f ldr r1, [pc, #636] ; (10009bd0 ) +10009952: 231e movs r3, #30 +10009954: 220d movs r2, #13 +10009956: 6809 ldr r1, [r1, #0] +10009958: a81a add r0, sp, #104 ; 0x68 +1000995a: f7ff fbb7 bl 100090cc +1000995e: f8bd 3068 ldrh.w r3, [sp, #104] ; 0x68 +10009962: 4681 mov r9, r0 +10009964: 2bc8 cmp r3, #200 ; 0xc8 +10009966: f040 80ba bne.w 10009ade +1000996a: 2800 cmp r0, #0 +1000996c: d03c beq.n 100099e8 +1000996e: f8bd 306c ldrh.w r3, [sp, #108] ; 0x6c +10009972: 9a2d ldr r2, [sp, #180] ; 0xb4 +10009974: 4997 ldr r1, [pc, #604] ; (10009bd4 ) +10009976: 441a add r2, r3 +10009978: 1a12 subs r2, r2, r0 +1000997a: f000 fffd bl 1000a978 +1000997e: 4b96 ldr r3, [pc, #600] ; (10009bd8 ) +10009980: 4680 mov r8, r0 +10009982: eba0 0209 sub.w r2, r0, r9 +10009986: 6819 ldr r1, [r3, #0] +10009988: 4648 mov r0, r9 +1000998a: f000 fff5 bl 1000a978 +1000998e: b358 cbz r0, 100099e8 +10009990: 4b92 ldr r3, [pc, #584] ; (10009bdc ) +10009992: 3013 adds r0, #19 +10009994: eba8 0200 sub.w r2, r8, r0 +10009998: 6819 ldr r1, [r3, #0] +1000999a: f000 ffed bl 1000a978 +1000999e: b318 cbz r0, 100099e8 +100099a0: f100 0a09 add.w sl, r0, #9 +100099a4: 20d8 movs r0, #216 ; 0xd8 +100099a6: f00b fce1 bl 1001536c +100099aa: 4681 mov r9, r0 +100099ac: 2800 cmp r0, #0 +100099ae: f43f aece beq.w 1000974e +100099b2: 2200 movs r2, #0 +100099b4: f898 3000 ldrb.w r3, [r8] +100099b8: f100 0b04 add.w fp, r0, #4 +100099bc: f888 2000 strb.w r2, [r8] +100099c0: 4651 mov r1, sl +100099c2: 2240 movs r2, #64 ; 0x40 +100099c4: 4658 mov r0, fp +100099c6: 9302 str r3, [sp, #8] +100099c8: f011 f902 bl 1001abd0 +100099cc: 9b02 ldr r3, [sp, #8] +100099ce: 4658 mov r0, fp +100099d0: f888 3000 strb.w r3, [r8] +100099d4: f011 f910 bl 1001abf8 +100099d8: 682b ldr r3, [r5, #0] +100099da: f8a9 0002 strh.w r0, [r9, #2] +100099de: f443 43a0 orr.w r3, r3, #20480 ; 0x5000 +100099e2: f8c4 901c str.w r9, [r4, #28] +100099e6: 602b str r3, [r5, #0] +100099e8: 682b ldr r3, [r5, #0] +100099ea: 045b lsls r3, r3, #17 +100099ec: d415 bmi.n 10009a1a +100099ee: 9b30 ldr r3, [sp, #192] ; 0xc0 +100099f0: 429f cmp r7, r3 +100099f2: d912 bls.n 10009a1a +100099f4: f240 139d movw r3, #413 ; 0x19d +100099f8: 9730 str r7, [sp, #192] ; 0xc0 +100099fa: f8ad 3068 strh.w r3, [sp, #104] ; 0x68 +100099fe: f241 63cf movw r3, #5839 ; 0x16cf +10009a02: 8d62 ldrh r2, [r4, #42] ; 0x2a +10009a04: 429a cmp r2, r3 +10009a06: f200 80d5 bhi.w 10009bb4 +10009a0a: 4875 ldr r0, [pc, #468] ; (10009be0 ) +10009a0c: f011 f8b8 bl 1001ab80 +10009a10: 2000 movs r0, #0 +10009a12: b033 add sp, #204 ; 0xcc +10009a14: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10009a18: 9730 str r7, [sp, #192] ; 0xc0 +10009a1a: 682b ldr r3, [r5, #0] +10009a1c: 0558 lsls r0, r3, #21 +10009a1e: d544 bpl.n 10009aaa +10009a20: 4970 ldr r1, [pc, #448] ; (10009be4 ) +10009a22: 2308 movs r3, #8 +10009a24: 220e movs r2, #14 +10009a26: 6809 ldr r1, [r1, #0] +10009a28: a81a add r0, sp, #104 ; 0x68 +10009a2a: f7ff fb4f bl 100090cc +10009a2e: 4607 mov r7, r0 +10009a30: 2800 cmp r0, #0 +10009a32: f43f af52 beq.w 100098da +10009a36: f8bd 3068 ldrh.w r3, [sp, #104] ; 0x68 +10009a3a: 2bc8 cmp r3, #200 ; 0xc8 +10009a3c: f47f af4d bne.w 100098da +10009a40: 2205 movs r2, #5 +10009a42: 4969 ldr r1, [pc, #420] ; (10009be8 ) +10009a44: f011 f8dc bl 1001ac00 +10009a48: 2800 cmp r0, #0 +10009a4a: f47f af46 bne.w 100098da +10009a4e: 1d78 adds r0, r7, #5 +10009a50: 7803 ldrb r3, [r0, #0] +10009a52: 1c42 adds r2, r0, #1 +10009a54: 2b20 cmp r3, #32 +10009a56: f000 80ab beq.w 10009bb0 +10009a5a: 4603 mov r3, r0 +10009a5c: 1a19 subs r1, r3, r0 +10009a5e: f813 2b01 ldrb.w r2, [r3], #1 +10009a62: 2a2a cmp r2, #42 ; 0x2a +10009a64: d8fa bhi.n 10009a5c +10009a66: 234c movs r3, #76 ; 0x4c +10009a68: 9305 str r3, [sp, #20] +10009a6a: 1f0b subs r3, r1, #4 +10009a6c: 2b7c cmp r3, #124 ; 0x7c +10009a6e: f63f af34 bhi.w 100098da +10009a72: ab05 add r3, sp, #20 +10009a74: aa06 add r2, sp, #24 +10009a76: f000 ff9f bl 1000a9b8 +10009a7a: 2800 cmp r0, #0 +10009a7c: f43f af2d beq.w 100098da +10009a80: 9b05 ldr r3, [sp, #20] +10009a82: aa32 add r2, sp, #200 ; 0xc8 +10009a84: 4413 add r3, r2 +10009a86: 2200 movs r2, #0 +10009a88: a906 add r1, sp, #24 +10009a8a: 4858 ldr r0, [pc, #352] ; (10009bec ) +10009a8c: f803 2cb0 strb.w r2, [r3, #-176] +10009a90: f011 f876 bl 1001ab80 +10009a94: 9905 ldr r1, [sp, #20] +10009a96: a806 add r0, sp, #24 +10009a98: f003 f890 bl 1000cbbc +10009a9c: 2800 cmp r0, #0 +10009a9e: f43f af1c beq.w 100098da +10009aa2: 682b ldr r3, [r5, #0] +10009aa4: f423 6380 bic.w r3, r3, #1024 ; 0x400 +10009aa8: 602b str r3, [r5, #0] +10009aaa: f8bd 306c ldrh.w r3, [sp, #108] ; 0x6c +10009aae: 2b0b cmp r3, #11 +10009ab0: d915 bls.n 10009ade +10009ab2: 494f ldr r1, [pc, #316] ; (10009bf0 ) +10009ab4: 2302 movs r3, #2 +10009ab6: 2207 movs r2, #7 +10009ab8: 6809 ldr r1, [r1, #0] +10009aba: a81a add r0, sp, #104 ; 0x68 +10009abc: f7ff fb06 bl 100090cc +10009ac0: 4605 mov r5, r0 +10009ac2: b160 cbz r0, 10009ade +10009ac4: f8bd 306c ldrh.w r3, [sp, #108] ; 0x6c +10009ac8: 9a2d ldr r2, [sp, #180] ; 0xb4 +10009aca: 4942 ldr r1, [pc, #264] ; (10009bd4 ) +10009acc: 441a add r2, r3 +10009ace: 1a12 subs r2, r2, r0 +10009ad0: f000 ff52 bl 1000a978 +10009ad4: b118 cbz r0, 10009ade +10009ad6: 1b40 subs r0, r0, r5 +10009ad8: 952e str r5, [sp, #184] ; 0xb8 +10009ada: f8ad 006e strh.w r0, [sp, #110] ; 0x6e +10009ade: 6833 ldr r3, [r6, #0] +10009ae0: 4944 ldr r1, [pc, #272] ; (10009bf4 ) +10009ae2: f413 7f80 tst.w r3, #256 ; 0x100 +10009ae6: 4b44 ldr r3, [pc, #272] ; (10009bf8 ) +10009ae8: aa1c add r2, sp, #112 ; 0x70 +10009aea: bf18 it ne +10009aec: 4619 movne r1, r3 +10009aee: 4843 ldr r0, [pc, #268] ; (10009bfc ) +10009af0: f011 f846 bl 1001ab80 +10009af4: f8bd 3068 ldrh.w r3, [sp, #104] ; 0x68 +10009af8: 2bc8 cmp r3, #200 ; 0xc8 +10009afa: d126 bne.n 10009b4a +10009afc: f8bd 206e ldrh.w r2, [sp, #110] ; 0x6e +10009b00: b132 cbz r2, 10009b10 +10009b02: 233b movs r3, #59 ; 0x3b +10009b04: 992e ldr r1, [sp, #184] ; 0xb8 +10009b06: 9300 str r3, [sp, #0] +10009b08: 4620 mov r0, r4 +10009b0a: 2300 movs r3, #0 +10009b0c: f7ff fa96 bl 1000903c +10009b10: 2526 movs r5, #38 ; 0x26 +10009b12: 992c ldr r1, [sp, #176] ; 0xb0 +10009b14: f8bd 206a ldrh.w r2, [sp, #106] ; 0x6a +10009b18: 9500 str r5, [sp, #0] +10009b1a: 233f movs r3, #63 ; 0x3f +10009b1c: 4620 mov r0, r4 +10009b1e: f7ff fa8d bl 1000903c +10009b22: 992f ldr r1, [sp, #188] ; 0xbc +10009b24: b189 cbz r1, 10009b4a +10009b26: 6833 ldr r3, [r6, #0] +10009b28: f413 5380 ands.w r3, r3, #4096 ; 0x1000 +10009b2c: d045 beq.n 10009bba +10009b2e: 69f3 ldr r3, [r6, #28] +10009b30: b15b cbz r3, 10009b4a +10009b32: 9a30 ldr r2, [sp, #192] ; 0xc0 +10009b34: 4620 mov r0, r4 +10009b36: f7ff fd97 bl 10009668 +10009b3a: b930 cbnz r0, 10009b4a +10009b3c: 4830 ldr r0, [pc, #192] ; (10009c00 ) +10009b3e: f011 f81f bl 1001ab80 +10009b42: f44f 73fa mov.w r3, #500 ; 0x1f4 +10009b46: f8ad 3068 strh.w r3, [sp, #104] ; 0x68 +10009b4a: 6833 ldr r3, [r6, #0] +10009b4c: f443 5300 orr.w r3, r3, #8192 ; 0x2000 +10009b50: 6033 str r3, [r6, #0] +10009b52: f8bd 3068 ldrh.w r3, [sp, #104] ; 0x68 +10009b56: 2bc8 cmp r3, #200 ; 0xc8 +10009b58: d16f bne.n 10009c3a +10009b5a: 6833 ldr r3, [r6, #0] +10009b5c: 04d9 lsls r1, r3, #19 +10009b5e: d56c bpl.n 10009c3a +10009b60: 69f3 ldr r3, [r6, #28] +10009b62: 2b00 cmp r3, #0 +10009b64: d069 beq.n 10009c3a +10009b66: 8823 ldrh r3, [r4, #0] +10009b68: f8d4 b034 ldr.w fp, [r4, #52] ; 0x34 +10009b6c: f043 0308 orr.w r3, r3, #8 +10009b70: 8023 strh r3, [r4, #0] +10009b72: 8d63 ldrh r3, [r4, #42] ; 0x2a +10009b74: 2b00 cmp r3, #0 +10009b76: f43f af48 beq.w 10009a0a +10009b7a: 4620 mov r0, r4 +10009b7c: f7fe fe88 bl 10008890 +10009b80: 69e5 ldr r5, [r4, #28] +10009b82: 2d00 cmp r5, #0 +10009b84: d03e beq.n 10009c04 +10009b86: f8d4 8034 ldr.w r8, [r4, #52] ; 0x34 +10009b8a: f8d8 301c ldr.w r3, [r8, #28] +10009b8e: b12b cbz r3, 10009b9c +10009b90: f8d4 a024 ldr.w sl, [r4, #36] ; 0x24 +10009b94: f1ba 0f00 cmp.w sl, #0 +10009b98: f040 8092 bne.w 10009cc0 +10009b9c: 8d63 ldrh r3, [r4, #42] ; 0x2a +10009b9e: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 +10009ba2: f240 82a8 bls.w 1000a0f6 +10009ba6: f44f 73d1 mov.w r3, #418 ; 0x1a2 +10009baa: f8ad 3068 strh.w r3, [sp, #104] ; 0x68 +10009bae: e03e b.n 10009c2e +10009bb0: 4610 mov r0, r2 +10009bb2: e74d b.n 10009a50 +10009bb4: f240 139d movw r3, #413 ; 0x19d +10009bb8: e5cb b.n 10009752 +10009bba: 9a30 ldr r2, [sp, #192] ; 0xc0 +10009bbc: 2a00 cmp r2, #0 +10009bbe: d0c4 beq.n 10009b4a +10009bc0: 9500 str r5, [sp, #0] +10009bc2: 4620 mov r0, r4 +10009bc4: f7ff fa3a bl 1000903c +10009bc8: e7bf b.n 10009b4a +10009bca: bf00 nop +10009bcc: 1003f522 .word 0x1003f522 +10009bd0: 10044d48 .word 0x10044d48 +10009bd4: 1003f72e .word 0x1003f72e +10009bd8: 10044d54 .word 0x10044d54 +10009bdc: 10044d50 .word 0x10044d50 +10009be0: 100413d4 .word 0x100413d4 +10009be4: 10044d40 .word 0x10044d40 +10009be8: 1003f53a .word 0x1003f53a +10009bec: 1003f56a .word 0x1003f56a +10009bf0: 10044d4c .word 0x10044d4c +10009bf4: 1003f4ea .word 0x1003f4ea +10009bf8: 1003f4e5 .word 0x1003f4e5 +10009bfc: 1003f540 .word 0x1003f540 +10009c00: 1003f54a .word 0x1003f54a +10009c04: f44f 77fa mov.w r7, #500 ; 0x1f4 +10009c08: 2300 movs r3, #0 +10009c0a: 2fc8 cmp r7, #200 ; 0xc8 +10009c0c: f8ad 7068 strh.w r7, [sp, #104] ; 0x68 +10009c10: f8cb 301c str.w r3, [fp, #28] +10009c14: d10b bne.n 10009c2e +10009c16: f8db 3000 ldr.w r3, [fp] +10009c1a: 041a lsls r2, r3, #16 +10009c1c: f140 8250 bpl.w 1000a0c0 +10009c20: 69e1 ldr r1, [r4, #28] +10009c22: b121 cbz r1, 10009c2e +10009c24: 2240 movs r2, #64 ; 0x40 +10009c26: 3185 adds r1, #133 ; 0x85 +10009c28: a81c add r0, sp, #112 ; 0x70 +10009c2a: f010 ffd1 bl 1001abd0 +10009c2e: f8db 3000 ldr.w r3, [fp] +10009c32: f043 0302 orr.w r3, r3, #2 +10009c36: f8cb 3000 str.w r3, [fp] +10009c3a: 8823 ldrh r3, [r4, #0] +10009c3c: 4620 mov r0, r4 +10009c3e: f043 0310 orr.w r3, r3, #16 +10009c42: 8023 strh r3, [r4, #0] +10009c44: 8823 ldrh r3, [r4, #0] +10009c46: f36f 03c3 bfc r3, #3, #1 +10009c4a: 8023 strh r3, [r4, #0] +10009c4c: f7ff fd2b bl 100096a6 +10009c50: b110 cbz r0, 10009c58 +10009c52: 4620 mov r0, r4 +10009c54: f7fe fe1c bl 10008890 +10009c58: 69a3 ldr r3, [r4, #24] +10009c5a: f8b3 106a ldrh.w r1, [r3, #106] ; 0x6a +10009c5e: f5b1 7fc0 cmp.w r1, #384 ; 0x180 +10009c62: f0c0 83b3 bcc.w 1000a3cc +10009c66: f44f 70c0 mov.w r0, #384 ; 0x180 +10009c6a: 6b65 ldr r5, [r4, #52] ; 0x34 +10009c6c: f00b fa72 bl 10015154 +10009c70: 6128 str r0, [r5, #16] +10009c72: 2800 cmp r0, #0 +10009c74: f040 8253 bne.w 1000a11e +10009c78: 48af ldr r0, [pc, #700] ; (10009f38 ) +10009c7a: f010 ff81 bl 1001ab80 +10009c7e: 682b ldr r3, [r5, #0] +10009c80: f043 0306 orr.w r3, r3, #6 +10009c84: 602b str r3, [r5, #0] +10009c86: 6833 ldr r3, [r6, #0] +10009c88: f003 030f and.w r3, r3, #15 +10009c8c: 2b08 cmp r3, #8 +10009c8e: d102 bne.n 10009c96 +10009c90: 4620 mov r0, r4 +10009c92: f7ff fb43 bl 1000931c +10009c96: 6833 ldr r3, [r6, #0] +10009c98: 0758 lsls r0, r3, #29 +10009c9a: d509 bpl.n 10009cb0 +10009c9c: 69a0 ldr r0, [r4, #24] +10009c9e: f009 fc93 bl 100135c8 +10009ca2: 4620 mov r0, r4 +10009ca4: f7ff f90c bl 10008ec0 +10009ca8: 6833 ldr r3, [r6, #0] +10009caa: f043 0302 orr.w r3, r3, #2 +10009cae: 6033 str r3, [r6, #0] +10009cb0: 6833 ldr r3, [r6, #0] +10009cb2: 0799 lsls r1, r3, #30 +10009cb4: f57f aea9 bpl.w 10009a0a +10009cb8: 4620 mov r0, r4 +10009cba: f7ff f98d bl 10008fd8 +10009cbe: e6a7 b.n 10009a10 +10009cc0: f8b5 9002 ldrh.w r9, [r5, #2] +10009cc4: 8d67 ldrh r7, [r4, #42] ; 0x2a +10009cc6: f109 0208 add.w r2, r9, #8 +10009cca: 4297 cmp r7, r2 +10009ccc: f4ff af66 bcc.w 10009b9c +10009cd0: 882a ldrh r2, [r5, #0] +10009cd2: 2a03 cmp r2, #3 +10009cd4: f63f af5b bhi.w 10009b8e +10009cd8: e8df f012 tbh [pc, r2, lsl #1] +10009cdc: 00820004 .word 0x00820004 +10009ce0: 014a014a .word 0x014a014a +10009ce4: 463a mov r2, r7 +10009ce6: 4995 ldr r1, [pc, #596] ; (10009f3c ) +10009ce8: 4650 mov r0, sl +10009cea: f000 fe45 bl 1000a978 +10009cee: 4681 mov r9, r0 +10009cf0: 2800 cmp r0, #0 +10009cf2: f43f af53 beq.w 10009b9c +10009cf6: eba0 030a sub.w r3, r0, sl +10009cfa: 461a mov r2, r3 +10009cfc: 4651 mov r1, sl +10009cfe: 4628 mov r0, r5 +10009d00: 9302 str r3, [sp, #8] +10009d02: f7ff f92d bl 10008f60 +10009d06: 2801 cmp r0, #1 +10009d08: 4607 mov r7, r0 +10009d0a: f040 81d5 bne.w 1000a0b8 +10009d0e: 2300 movs r3, #0 +10009d10: f8d5 00d4 ldr.w r0, [r5, #212] ; 0xd4 +10009d14: f885 3045 strb.w r3, [r5, #69] ; 0x45 +10009d18: f885 3085 strb.w r3, [r5, #133] ; 0x85 +10009d1c: eba9 0200 sub.w r2, r9, r0 +10009d20: 4987 ldr r1, [pc, #540] ; (10009f40 ) +10009d22: f000 fe29 bl 1000a978 +10009d26: b910 cbnz r0, 10009d2e +10009d28: f44f 77c8 mov.w r7, #400 ; 0x190 +10009d2c: e76c b.n 10009c08 +10009d2e: 1d47 adds r7, r0, #5 +10009d30: 45b9 cmp r9, r7 +10009d32: d9f9 bls.n 10009d28 +10009d34: 2340 movs r3, #64 ; 0x40 +10009d36: 9300 str r3, [sp, #0] +10009d38: 2322 movs r3, #34 ; 0x22 +10009d3a: f105 0a45 add.w sl, r5, #69 ; 0x45 +10009d3e: 461a mov r2, r3 +10009d40: 4639 mov r1, r7 +10009d42: 4650 mov r0, sl +10009d44: f000 fca4 bl 1000a690 +10009d48: b948 cbnz r0, 10009d5e +10009d4a: 2340 movs r3, #64 ; 0x40 +10009d4c: 9300 str r3, [sp, #0] +10009d4e: 2322 movs r3, #34 ; 0x22 +10009d50: 4639 mov r1, r7 +10009d52: 461a mov r2, r3 +10009d54: 4650 mov r0, sl +10009d56: f000 fc9b bl 1000a690 +10009d5a: 2800 cmp r0, #0 +10009d5c: d0e4 beq.n 10009d28 +10009d5e: 4581 cmp r9, r0 +10009d60: d9e2 bls.n 10009d28 +10009d62: eba9 0200 sub.w r2, r9, r0 +10009d66: 4977 ldr r1, [pc, #476] ; (10009f44 ) +10009d68: f000 fe06 bl 1000a978 +10009d6c: b300 cbz r0, 10009db0 +10009d6e: f100 0709 add.w r7, r0, #9 +10009d72: 45b9 cmp r9, r7 +10009d74: d914 bls.n 10009da0 +10009d76: f04f 0a40 mov.w sl, #64 ; 0x40 +10009d7a: 2322 movs r3, #34 ; 0x22 +10009d7c: f105 0985 add.w r9, r5, #133 ; 0x85 +10009d80: f8cd a000 str.w sl, [sp] +10009d84: 461a mov r2, r3 +10009d86: 4639 mov r1, r7 +10009d88: 4648 mov r0, r9 +10009d8a: f000 fc81 bl 1000a690 +10009d8e: b938 cbnz r0, 10009da0 +10009d90: 2322 movs r3, #34 ; 0x22 +10009d92: f8cd a000 str.w sl, [sp] +10009d96: 461a mov r2, r3 +10009d98: 4639 mov r1, r7 +10009d9a: 4648 mov r0, r9 +10009d9c: f000 fc78 bl 1000a690 +10009da0: f895 3085 ldrb.w r3, [r5, #133] ; 0x85 +10009da4: b123 cbz r3, 10009db0 +10009da6: f105 0185 add.w r1, r5, #133 ; 0x85 +10009daa: 4867 ldr r0, [pc, #412] ; (10009f48 ) +10009dac: f010 fee8 bl 1001ab80 +10009db0: 882b ldrh r3, [r5, #0] +10009db2: 9f02 ldr r7, [sp, #8] +10009db4: 3301 adds r3, #1 +10009db6: 802b strh r3, [r5, #0] +10009db8: 8de3 ldrh r3, [r4, #46] ; 0x2e +10009dba: 3704 adds r7, #4 +10009dbc: 8d62 ldrh r2, [r4, #42] ; 0x2a +10009dbe: 6a61 ldr r1, [r4, #36] ; 0x24 +10009dc0: 443b add r3, r7 +10009dc2: 85e3 strh r3, [r4, #46] ; 0x2e +10009dc4: 1bd2 subs r2, r2, r7 +10009dc6: 4439 add r1, r7 +10009dc8: 4620 mov r0, r4 +10009dca: f7ff fc4d bl 10009668 +10009dce: 2800 cmp r0, #0 +10009dd0: f43f af18 beq.w 10009c04 +10009dd4: f8d8 301c ldr.w r3, [r8, #28] +10009dd8: 1bdf subs r7, r3, r7 +10009dda: f8c8 701c str.w r7, [r8, #28] +10009dde: e6d4 b.n 10009b8a +10009de0: f895 3085 ldrb.w r3, [r5, #133] ; 0x85 +10009de4: 2b00 cmp r3, #0 +10009de6: d07a beq.n 10009ede +10009de8: f105 0945 add.w r9, r5, #69 ; 0x45 +10009dec: 4957 ldr r1, [pc, #348] ; (10009f4c ) +10009dee: 4648 mov r0, r9 +10009df0: f000 fb9b bl 1000a52a +10009df4: 2800 cmp r0, #0 +10009df6: d044 beq.n 10009e82 +10009df8: 2f0b cmp r7, #11 +10009dfa: f67f aecf bls.w 10009b9c +10009dfe: f8da 3000 ldr.w r3, [sl] +10009e02: 4a53 ldr r2, [pc, #332] ; (10009f50 ) +10009e04: 4293 cmp r3, r2 +10009e06: d10c bne.n 10009e22 +10009e08: f8ba 7004 ldrh.w r7, [sl, #4] +10009e0c: 2f01 cmp r7, #1 +10009e0e: d108 bne.n 10009e22 +10009e10: f8d8 301c ldr.w r3, [r8, #28] +10009e14: 886a ldrh r2, [r5, #2] +10009e16: f8da 9008 ldr.w r9, [sl, #8] +10009e1a: 3b08 subs r3, #8 +10009e1c: 1a9b subs r3, r3, r2 +10009e1e: 454b cmp r3, r9 +10009e20: d20c bcs.n 10009e3c +10009e22: 4b4c ldr r3, [pc, #304] ; (10009f54 ) +10009e24: 781b ldrb r3, [r3, #0] +10009e26: 2b00 cmp r3, #0 +10009e28: f47f af7e bne.w 10009d28 +10009e2c: f8d8 3000 ldr.w r3, [r8] +10009e30: 4949 ldr r1, [pc, #292] ; (10009f58 ) +10009e32: f443 4300 orr.w r3, r3, #32768 ; 0x8000 +10009e36: f8c8 3000 str.w r3, [r8] +10009e3a: e00f b.n 10009e5c +10009e3c: f7fe fff2 bl 10008e24 +10009e40: 4581 cmp r9, r0 +10009e42: d911 bls.n 10009e68 +10009e44: 4b43 ldr r3, [pc, #268] ; (10009f54 ) +10009e46: 781b ldrb r3, [r3, #0] +10009e48: 2b00 cmp r3, #0 +10009e4a: f47f af6d bne.w 10009d28 +10009e4e: f8d8 3000 ldr.w r3, [r8] +10009e52: 4942 ldr r1, [pc, #264] ; (10009f5c ) +10009e54: f443 4300 orr.w r3, r3, #32768 ; 0x8000 +10009e58: f8c8 3000 str.w r3, [r8] +10009e5c: f105 0085 add.w r0, r5, #133 ; 0x85 +10009e60: f000 fb58 bl 1000a514 +10009e64: 27c8 movs r7, #200 ; 0xc8 +10009e66: e6cf b.n 10009c08 +10009e68: f8da 3008 ldr.w r3, [sl, #8] +10009e6c: f8c5 30c8 str.w r3, [r5, #200] ; 0xc8 +10009e70: f7ff f800 bl 10008e74 +10009e74: 2303 movs r3, #3 +10009e76: 802b strh r3, [r5, #0] +10009e78: 4b36 ldr r3, [pc, #216] ; (10009f54 ) +10009e7a: f8c5 00cc str.w r0, [r5, #204] ; 0xcc +10009e7e: 701f strb r7, [r3, #0] +10009e80: e683 b.n 10009b8a +10009e82: 4937 ldr r1, [pc, #220] ; (10009f60 ) +10009e84: 4648 mov r0, r9 +10009e86: f000 fb50 bl 1000a52a +10009e8a: b150 cbz r0, 10009ea2 +10009e8c: f44f 5380 mov.w r3, #4096 ; 0x1000 +10009e90: f8c5 30c8 str.w r3, [r5, #200] ; 0xc8 +10009e94: f44f 4300 mov.w r3, #32768 ; 0x8000 +10009e98: f8c5 30cc str.w r3, [r5, #204] ; 0xcc +10009e9c: 2302 movs r3, #2 +10009e9e: 802b strh r3, [r5, #0] +10009ea0: e673 b.n 10009b8a +10009ea2: 4930 ldr r1, [pc, #192] ; (10009f64 ) +10009ea4: 4648 mov r0, r9 +10009ea6: f000 fb40 bl 1000a52a +10009eaa: b158 cbz r0, 10009ec4 +10009eac: f44f 5380 mov.w r3, #4096 ; 0x1000 +10009eb0: f105 004a add.w r0, r5, #74 ; 0x4a +10009eb4: f8c5 30c8 str.w r3, [r5, #200] ; 0xc8 +10009eb8: f000 fbdd bl 1000a676 +10009ebc: 0300 lsls r0, r0, #12 +10009ebe: f8c5 00cc str.w r0, [r5, #204] ; 0xcc +10009ec2: e7eb b.n 10009e9c +10009ec4: 4b23 ldr r3, [pc, #140] ; (10009f54 ) +10009ec6: 781b ldrb r3, [r3, #0] +10009ec8: 2b00 cmp r3, #0 +10009eca: f47f af2d bne.w 10009d28 +10009ece: f8d8 3000 ldr.w r3, [r8] +10009ed2: 4925 ldr r1, [pc, #148] ; (10009f68 ) +10009ed4: f443 4300 orr.w r3, r3, #32768 ; 0x8000 +10009ed8: f8c8 3000 str.w r3, [r8] +10009edc: e7be b.n 10009e5c +10009ede: 463a mov r2, r7 +10009ee0: 4922 ldr r1, [pc, #136] ; (10009f6c ) +10009ee2: 4650 mov r0, sl +10009ee4: f000 fd48 bl 1000a978 +10009ee8: 4681 mov r9, r0 +10009eea: 2800 cmp r0, #0 +10009eec: f43f ae56 beq.w 10009b9c +10009ef0: 463a mov r2, r7 +10009ef2: 4651 mov r1, sl +10009ef4: 4628 mov r0, r5 +10009ef6: f7ff f833 bl 10008f60 +10009efa: 2801 cmp r0, #1 +10009efc: 4607 mov r7, r0 +10009efe: d002 beq.n 10009f06 +10009f00: 28c8 cmp r0, #200 ; 0xc8 +10009f02: f040 80d9 bne.w 1000a0b8 +10009f06: 2300 movs r3, #0 +10009f08: 4652 mov r2, sl +10009f0a: f889 3000 strb.w r3, [r9] +10009f0e: f105 0145 add.w r1, r5, #69 ; 0x45 +10009f12: 4620 mov r0, r4 +10009f14: 9302 str r3, [sp, #8] +10009f16: f002 f90b bl 1000c130 +10009f1a: 2fc8 cmp r7, #200 ; 0xc8 +10009f1c: f43f ae74 beq.w 10009c08 +10009f20: 9b02 ldr r3, [sp, #8] +10009f22: f8d5 10d0 ldr.w r1, [r5, #208] ; 0xd0 +10009f26: 6a67 ldr r7, [r4, #36] ; 0x24 +10009f28: 802b strh r3, [r5, #0] +10009f2a: 8de3 ldrh r3, [r4, #46] ; 0x2e +10009f2c: 1bcf subs r7, r1, r7 +10009f2e: 8d62 ldrh r2, [r4, #42] ; 0x2a +10009f30: 443b add r3, r7 +10009f32: 85e3 strh r3, [r4, #46] ; 0x2e +10009f34: 1bd2 subs r2, r2, r7 +10009f36: e747 b.n 10009dc8 +10009f38: 1003f570 .word 0x1003f570 +10009f3c: 1003f72c .word 0x1003f72c +10009f40: 1003f55b .word 0x1003f55b +10009f44: 1003f557 .word 0x1003f557 +10009f48: 1003f561 .word 0x1003f561 +10009f4c: 1003f28f .word 0x1003f28f +10009f50: 42455746 .word 0x42455746 +10009f54: 1004a7e0 .word 0x1004a7e0 +10009f58: 1003f258 .word 0x1003f258 +10009f5c: 1003f266 .word 0x1003f266 +10009f60: 1003f495 .word 0x1003f495 +10009f64: 1003f333 .word 0x1003f333 +10009f68: 1003f274 .word 0x1003f274 +10009f6c: 1003f72e .word 0x1003f72e +10009f70: f609 0908 addw r9, r9, #2056 ; 0x808 +10009f74: 454b cmp r3, r9 +10009f76: bf28 it cs +10009f78: 464b movcs r3, r9 +10009f7a: 429f cmp r7, r3 +10009f7c: f4ff ae0e bcc.w 10009b9c +10009f80: 461a mov r2, r3 +10009f82: 4651 mov r1, sl +10009f84: 4628 mov r0, r5 +10009f86: 9302 str r3, [sp, #8] +10009f88: f7fe ffea bl 10008f60 +10009f8c: 2801 cmp r0, #1 +10009f8e: 4607 mov r7, r0 +10009f90: 9b02 ldr r3, [sp, #8] +10009f92: d001 beq.n 10009f98 +10009f94: 28c8 cmp r0, #200 ; 0xc8 +10009f96: d176 bne.n 1000a086 +10009f98: f8d5 20d0 ldr.w r2, [r5, #208] ; 0xd0 +10009f9c: f1a2 0902 sub.w r9, r2, #2 +10009fa0: 6a62 ldr r2, [r4, #36] ; 0x24 +10009fa2: eba9 0902 sub.w r9, r9, r2 +10009fa6: 4599 cmp r9, r3 +10009fa8: bf28 it cs +10009faa: 4699 movcs r9, r3 +10009fac: f8d5 30c8 ldr.w r3, [r5, #200] ; 0xc8 +10009fb0: 454b cmp r3, r9 +10009fb2: bf28 it cs +10009fb4: 464b movcs r3, r9 +10009fb6: 9302 str r3, [sp, #8] +10009fb8: b36b cbz r3, 1000a016 +10009fba: 2001 movs r0, #1 +10009fbc: f00c fe62 bl 10016c84 +10009fc0: f8d5 30cc ldr.w r3, [r5, #204] ; 0xcc +10009fc4: 48ab ldr r0, [pc, #684] ; (1000a274 ) +10009fc6: 9303 str r3, [sp, #12] +10009fc8: f00d ff2a bl 10017e20 +10009fcc: 9b03 ldr r3, [sp, #12] +10009fce: f8d5 10cc ldr.w r1, [r5, #204] ; 0xcc +10009fd2: 4283 cmp r3, r0 +10009fd4: d364 bcc.n 1000a0a0 +10009fd6: 882b ldrh r3, [r5, #0] +10009fd8: 2b03 cmp r3, #3 +10009fda: d161 bne.n 1000a0a0 +10009fdc: b28b uxth r3, r1 +10009fde: b913 cbnz r3, 10009fe6 +10009fe0: 48a4 ldr r0, [pc, #656] ; (1000a274 ) +10009fe2: f00d fdd9 bl 10017b98 +10009fe6: 9b02 ldr r3, [sp, #8] +10009fe8: f8d5 10cc ldr.w r1, [r5, #204] ; 0xcc +10009fec: 1cda adds r2, r3, #3 +10009fee: f022 0203 bic.w r2, r2, #3 +10009ff2: 4653 mov r3, sl +10009ff4: 489f ldr r0, [pc, #636] ; (1000a274 ) +10009ff6: f00d fe6b bl 10017cd0 +10009ffa: 2001 movs r0, #1 +10009ffc: f00c fe5c bl 10016cb8 +1000a000: f8d5 30c8 ldr.w r3, [r5, #200] ; 0xc8 +1000a004: 9a02 ldr r2, [sp, #8] +1000a006: 1a9b subs r3, r3, r2 +1000a008: f8c5 30c8 str.w r3, [r5, #200] ; 0xc8 +1000a00c: f8d5 30cc ldr.w r3, [r5, #204] ; 0xcc +1000a010: 4413 add r3, r2 +1000a012: f8c5 30cc str.w r3, [r5, #204] ; 0xcc +1000a016: f1b9 0f00 cmp.w r9, #0 +1000a01a: d013 beq.n 1000a044 +1000a01c: 8de3 ldrh r3, [r4, #46] ; 0x2e +1000a01e: 8d62 ldrh r2, [r4, #42] ; 0x2a +1000a020: 6a61 ldr r1, [r4, #36] ; 0x24 +1000a022: 444b add r3, r9 +1000a024: 85e3 strh r3, [r4, #46] ; 0x2e +1000a026: eba2 0209 sub.w r2, r2, r9 +1000a02a: 4449 add r1, r9 +1000a02c: 4620 mov r0, r4 +1000a02e: f7ff fb1b bl 10009668 +1000a032: 2800 cmp r0, #0 +1000a034: f43f ade6 beq.w 10009c04 +1000a038: f8d8 301c ldr.w r3, [r8, #28] +1000a03c: eba3 0309 sub.w r3, r3, r9 +1000a040: f8c8 301c str.w r3, [r8, #28] +1000a044: 2f01 cmp r7, #1 +1000a046: d002 beq.n 1000a04e +1000a048: 2fc8 cmp r7, #200 ; 0xc8 +1000a04a: f47f ad9e bne.w 10009b8a +1000a04e: 882b ldrh r3, [r5, #0] +1000a050: 2b03 cmp r3, #3 +1000a052: d101 bne.n 1000a058 +1000a054: f7fe fdc2 bl 10008bdc +1000a058: f8d5 30c8 ldr.w r3, [r5, #200] ; 0xc8 +1000a05c: 2b00 cmp r3, #0 +1000a05e: f47f aee0 bne.w 10009e22 +1000a062: 4b85 ldr r3, [pc, #532] ; (1000a278 ) +1000a064: 781b ldrb r3, [r3, #0] +1000a066: b953 cbnz r3, 1000a07e +1000a068: f8d8 3000 ldr.w r3, [r8] +1000a06c: 4983 ldr r1, [pc, #524] ; (1000a27c ) +1000a06e: f443 4300 orr.w r3, r3, #32768 ; 0x8000 +1000a072: f8c8 3000 str.w r3, [r8] +1000a076: f105 0085 add.w r0, r5, #133 ; 0x85 +1000a07a: f000 fa4b bl 1000a514 +1000a07e: 2f01 cmp r7, #1 +1000a080: d116 bne.n 1000a0b0 +1000a082: 2300 movs r3, #0 +1000a084: e70b b.n 10009e9e +1000a086: f8d8 301c ldr.w r3, [r8, #28] +1000a08a: f8b5 9002 ldrh.w r9, [r5, #2] +1000a08e: 3b08 subs r3, #8 +1000a090: eba3 0909 sub.w r9, r3, r9 +1000a094: f5b9 6f00 cmp.w r9, #2048 ; 0x800 +1000a098: bf28 it cs +1000a09a: f44f 6900 movcs.w r9, #2048 ; 0x800 +1000a09e: e785 b.n 10009fac +1000a0a0: f3c1 030b ubfx r3, r1, #0, #12 +1000a0a4: 2b00 cmp r3, #0 +1000a0a6: d19e bne.n 10009fe6 +1000a0a8: 4872 ldr r0, [pc, #456] ; (1000a274 ) +1000a0aa: f00d fd5f bl 10017b6c +1000a0ae: e79a b.n 10009fe6 +1000a0b0: 2fc8 cmp r7, #200 ; 0xc8 +1000a0b2: f47f ad6a bne.w 10009b8a +1000a0b6: e5a7 b.n 10009c08 +1000a0b8: 2f01 cmp r7, #1 +1000a0ba: f73f ada5 bgt.w 10009c08 +1000a0be: e56d b.n 10009b9c +1000a0c0: 4a6d ldr r2, [pc, #436] ; (1000a278 ) +1000a0c2: 7812 ldrb r2, [r2, #0] +1000a0c4: 2a00 cmp r2, #0 +1000a0c6: f47f adb2 bne.w 10009c2e +1000a0ca: 071b lsls r3, r3, #28 +1000a0cc: f57f adaf bpl.w 10009c2e +1000a0d0: f89b 0004 ldrb.w r0, [fp, #4] +1000a0d4: 28fb cmp r0, #251 ; 0xfb +1000a0d6: f63f adaa bhi.w 10009c2e +1000a0da: 2240 movs r2, #64 ; 0x40 +1000a0dc: a91c add r1, sp, #112 ; 0x70 +1000a0de: f7fe fe7f bl 10008de0 +1000a0e2: 2800 cmp r0, #0 +1000a0e4: f43f ada3 beq.w 10009c2e +1000a0e8: f8db 3000 ldr.w r3, [fp] +1000a0ec: f443 4300 orr.w r3, r3, #32768 ; 0x8000 +1000a0f0: f8cb 3000 str.w r3, [fp] +1000a0f4: e59b b.n 10009c2e +1000a0f6: 8de3 ldrh r3, [r4, #46] ; 0x2e +1000a0f8: f8db 201c ldr.w r2, [fp, #28] +1000a0fc: 429a cmp r2, r3 +1000a0fe: f63f ac84 bhi.w 10009a0a +1000a102: f44f 73c8 mov.w r3, #400 ; 0x190 +1000a106: f8ad 3068 strh.w r3, [sp, #104] ; 0x68 +1000a10a: f8db 3000 ldr.w r3, [fp] +1000a10e: f043 0302 orr.w r3, r3, #2 +1000a112: f8cb 3000 str.w r3, [fp] +1000a116: 2300 movs r3, #0 +1000a118: f8cb 301c str.w r3, [fp, #28] +1000a11c: e58d b.n 10009c3a +1000a11e: f44f 73c0 mov.w r3, #384 ; 0x180 +1000a122: 82eb strh r3, [r5, #22] +1000a124: 2300 movs r3, #0 +1000a126: 82ab strh r3, [r5, #20] +1000a128: 682b ldr r3, [r5, #0] +1000a12a: 041f lsls r7, r3, #16 +1000a12c: bf44 itt mi +1000a12e: f44f 7397 movmi.w r3, #302 ; 0x12e +1000a132: f8ad 3068 strhmi.w r3, [sp, #104] ; 0x68 +1000a136: f8bd 2068 ldrh.w r2, [sp, #104] ; 0x68 +1000a13a: 4f51 ldr r7, [pc, #324] ; (1000a280 ) +1000a13c: 687b ldr r3, [r7, #4] +1000a13e: 0419 lsls r1, r3, #16 +1000a140: d54e bpl.n 1000a1e0 +1000a142: 683a ldr r2, [r7, #0] +1000a144: 494f ldr r1, [pc, #316] ; (1000a284 ) +1000a146: f010 fcf5 bl 1001ab34 +1000a14a: 8aab ldrh r3, [r5, #20] +1000a14c: 683a ldr r2, [r7, #0] +1000a14e: 4418 add r0, r3 +1000a150: f240 1391 movw r3, #401 ; 0x191 +1000a154: 429a cmp r2, r3 +1000a156: 692b ldr r3, [r5, #16] +1000a158: b280 uxth r0, r0 +1000a15a: 82a8 strh r0, [r5, #20] +1000a15c: 68b9 ldr r1, [r7, #8] +1000a15e: 4418 add r0, r3 +1000a160: d143 bne.n 1000a1ea +1000a162: f010 fce7 bl 1001ab34 +1000a166: 8aab ldrh r3, [r5, #20] +1000a168: 4947 ldr r1, [pc, #284] ; (1000a288 ) +1000a16a: 4418 add r0, r3 +1000a16c: 82a8 strh r0, [r5, #20] +1000a16e: 8aab ldrh r3, [r5, #20] +1000a170: 6928 ldr r0, [r5, #16] +1000a172: 4418 add r0, r3 +1000a174: f000 f9ce bl 1000a514 +1000a178: 8aab ldrh r3, [r5, #20] +1000a17a: 4418 add r0, r3 +1000a17c: 682b ldr r3, [r5, #0] +1000a17e: b280 uxth r0, r0 +1000a180: 041b lsls r3, r3, #16 +1000a182: 82a8 strh r0, [r5, #20] +1000a184: d534 bpl.n 1000a1f0 +1000a186: 692b ldr r3, [r5, #16] +1000a188: aa1c add r2, sp, #112 ; 0x70 +1000a18a: 4418 add r0, r3 +1000a18c: 493f ldr r1, [pc, #252] ; (1000a28c ) +1000a18e: f010 fcd1 bl 1001ab34 +1000a192: 8aab ldrh r3, [r5, #20] +1000a194: 4418 add r0, r3 +1000a196: 82a8 strh r0, [r5, #20] +1000a198: 8823 ldrh r3, [r4, #0] +1000a19a: f043 0302 orr.w r3, r3, #2 +1000a19e: 8023 strh r3, [r4, #0] +1000a1a0: 682b ldr r3, [r5, #0] +1000a1a2: f043 0302 orr.w r3, r3, #2 +1000a1a6: 602b str r3, [r5, #0] +1000a1a8: f8bd 2068 ldrh.w r2, [sp, #104] ; 0x68 +1000a1ac: 8aa9 ldrh r1, [r5, #20] +1000a1ae: 4838 ldr r0, [pc, #224] ; (1000a290 ) +1000a1b0: f010 fce6 bl 1001ab80 +1000a1b4: 8aaa ldrh r2, [r5, #20] +1000a1b6: b16a cbz r2, 1000a1d4 +1000a1b8: 682b ldr r3, [r5, #0] +1000a1ba: 6929 ldr r1, [r5, #16] +1000a1bc: 079f lsls r7, r3, #30 +1000a1be: bf44 itt mi +1000a1c0: f043 0301 orrmi.w r3, r3, #1 +1000a1c4: 602b strmi r3, [r5, #0] +1000a1c6: 4620 mov r0, r4 +1000a1c8: f7fe fafa bl 100087c0 +1000a1cc: 8823 ldrh r3, [r4, #0] +1000a1ce: f043 0304 orr.w r3, r3, #4 +1000a1d2: 8023 strh r3, [r4, #0] +1000a1d4: 6928 ldr r0, [r5, #16] +1000a1d6: f00b f859 bl 1001528c +1000a1da: 2300 movs r3, #0 +1000a1dc: 612b str r3, [r5, #16] +1000a1de: e552 b.n 10009c86 +1000a1e0: 683b ldr r3, [r7, #0] +1000a1e2: 4293 cmp r3, r2 +1000a1e4: d0ad beq.n 1000a142 +1000a1e6: 3710 adds r7, #16 +1000a1e8: e7a8 b.n 1000a13c +1000a1ea: f000 f993 bl 1000a514 +1000a1ee: e7ba b.n 1000a166 +1000a1f0: 683b ldr r3, [r7, #0] +1000a1f2: 2bc8 cmp r3, #200 ; 0xc8 +1000a1f4: d014 beq.n 1000a220 +1000a1f6: 4628 mov r0, r5 +1000a1f8: f7ff f86a bl 100092d0 +1000a1fc: 682b ldr r3, [r5, #0] +1000a1fe: f423 5383 bic.w r3, r3, #4192 ; 0x1060 +1000a202: f023 0314 bic.w r3, r3, #20 +1000a206: 602b str r3, [r5, #0] +1000a208: 687b ldr r3, [r7, #4] +1000a20a: 07d8 lsls r0, r3, #31 +1000a20c: d508 bpl.n 1000a220 +1000a20e: 4921 ldr r1, [pc, #132] ; (1000a294 ) +1000a210: 683a ldr r2, [r7, #0] +1000a212: a81c add r0, sp, #112 ; 0x70 +1000a214: f010 fc8e bl 1001ab34 +1000a218: 4621 mov r1, r4 +1000a21a: a81a add r0, sp, #104 ; 0x68 +1000a21c: f7fe ffc2 bl 100091a4 +1000a220: 682a ldr r2, [r5, #0] +1000a222: f8b5 8014 ldrh.w r8, [r5, #20] +1000a226: f012 0f08 tst.w r2, #8 +1000a22a: d13d bne.n 1000a2a8 +1000a22c: 68f8 ldr r0, [r7, #12] +1000a22e: 2800 cmp r0, #0 +1000a230: f000 80c8 beq.w 1000a3c4 +1000a234: 692a ldr r2, [r5, #16] +1000a236: 4b18 ldr r3, [pc, #96] ; (1000a298 ) +1000a238: 4490 add r8, r2 +1000a23a: f8d3 9000 ldr.w r9, [r3] +1000a23e: f010 fcdb bl 1001abf8 +1000a242: 4b16 ldr r3, [pc, #88] ; (1000a29c ) +1000a244: 464a mov r2, r9 +1000a246: 9301 str r3, [sp, #4] +1000a248: 4b15 ldr r3, [pc, #84] ; (1000a2a0 ) +1000a24a: 4916 ldr r1, [pc, #88] ; (1000a2a4 ) +1000a24c: 681b ldr r3, [r3, #0] +1000a24e: 9300 str r3, [sp, #0] +1000a250: 4603 mov r3, r0 +1000a252: 4640 mov r0, r8 +1000a254: f010 fc6e bl 1001ab34 +1000a258: 8aab ldrh r3, [r5, #20] +1000a25a: 68f9 ldr r1, [r7, #12] +1000a25c: 4418 add r0, r3 +1000a25e: 692b ldr r3, [r5, #16] +1000a260: b280 uxth r0, r0 +1000a262: 82a8 strh r0, [r5, #20] +1000a264: 4418 add r0, r3 +1000a266: f000 f955 bl 1000a514 +1000a26a: 8aab ldrh r3, [r5, #20] +1000a26c: 4418 add r0, r3 +1000a26e: 82a8 strh r0, [r5, #20] +1000a270: e796 b.n 1000a1a0 +1000a272: bf00 nop +1000a274: 1004b58c .word 0x1004b58c +1000a278: 1004a7e0 .word 0x1004a7e0 +1000a27c: 1003f282 .word 0x1003f282 +1000a280: 1003edcc .word 0x1003edcc +1000a284: 1003f580 .word 0x1003f580 +1000a288: 1003f58d .word 0x1003f58d +1000a28c: 1003f5b4 .word 0x1003f5b4 +1000a290: 1003f6c1 .word 0x1003f6c1 +1000a294: 1003f5c5 .word 0x1003f5c5 +1000a298: 10044d44 .word 0x10044d44 +1000a29c: 1003f5de .word 0x1003f5de +1000a2a0: 10044d48 .word 0x10044d48 +1000a2a4: 1003f5cd .word 0x1003f5cd +1000a2a8: 69ea ldr r2, [r5, #28] +1000a2aa: 6928 ldr r0, [r5, #16] +1000a2ac: 2a00 cmp r2, #0 +1000a2ae: d07c beq.n 1000a3aa +1000a2b0: 494e ldr r1, [pc, #312] ; (1000a3ec ) +1000a2b2: 4440 add r0, r8 +1000a2b4: f000 f92e bl 1000a514 +1000a2b8: 8aab ldrh r3, [r5, #20] +1000a2ba: 4418 add r0, r3 +1000a2bc: b280 uxth r0, r0 +1000a2be: 82a8 strh r0, [r5, #20] +1000a2c0: f89d 30c5 ldrb.w r3, [sp, #197] ; 0xc5 +1000a2c4: 2b10 cmp r3, #16 +1000a2c6: d016 beq.n 1000a2f6 +1000a2c8: 792b ldrb r3, [r5, #4] +1000a2ca: 2bfd cmp r3, #253 ; 0xfd +1000a2cc: d106 bne.n 1000a2dc +1000a2ce: 682b ldr r3, [r5, #0] +1000a2d0: 06d9 lsls r1, r3, #27 +1000a2d2: bf44 itt mi +1000a2d4: f895 3020 ldrbmi.w r3, [r5, #32] +1000a2d8: f88d 30c5 strbmi.w r3, [sp, #197] ; 0xc5 +1000a2dc: f89d 10c5 ldrb.w r1, [sp, #197] ; 0xc5 +1000a2e0: 692b ldr r3, [r5, #16] +1000a2e2: 4a43 ldr r2, [pc, #268] ; (1000a3f0 ) +1000a2e4: 4418 add r0, r3 +1000a2e6: f852 2021 ldr.w r2, [r2, r1, lsl #2] +1000a2ea: 4942 ldr r1, [pc, #264] ; (1000a3f4 ) +1000a2ec: f010 fc22 bl 1001ab34 +1000a2f0: 8aab ldrh r3, [r5, #20] +1000a2f2: 4418 add r0, r3 +1000a2f4: 82a8 strh r0, [r5, #20] +1000a2f6: 682b ldr r3, [r5, #0] +1000a2f8: f8d5 e010 ldr.w lr, [r5, #16] +1000a2fc: f013 0f10 tst.w r3, #16 +1000a300: 8aa8 ldrh r0, [r5, #20] +1000a302: d029 beq.n 1000a358 +1000a304: 493c ldr r1, [pc, #240] ; (1000a3f8 ) +1000a306: 4470 add r0, lr +1000a308: f000 f904 bl 1000a514 +1000a30c: 8aab ldrh r3, [r5, #20] +1000a30e: 4418 add r0, r3 +1000a310: 82a8 strh r0, [r5, #20] +1000a312: f89d 30c4 ldrb.w r3, [sp, #196] ; 0xc4 +1000a316: 2b10 cmp r3, #16 +1000a318: d903 bls.n 1000a322 +1000a31a: 682b ldr r3, [r5, #0] +1000a31c: f043 0340 orr.w r3, r3, #64 ; 0x40 +1000a320: 602b str r3, [r5, #0] +1000a322: 682a ldr r2, [r5, #0] +1000a324: 8aab ldrh r3, [r5, #20] +1000a326: f012 0f20 tst.w r2, #32 +1000a32a: d039 beq.n 1000a3a0 +1000a32c: 6928 ldr r0, [r5, #16] +1000a32e: 4933 ldr r1, [pc, #204] ; (1000a3fc ) +1000a330: 4418 add r0, r3 +1000a332: f000 f8ef bl 1000a514 +1000a336: 8aab ldrh r3, [r5, #20] +1000a338: 4418 add r0, r3 +1000a33a: 82a8 strh r0, [r5, #20] +1000a33c: 682b ldr r3, [r5, #0] +1000a33e: 065b lsls r3, r3, #25 +1000a340: f53f af32 bmi.w 1000a1a8 +1000a344: 8aab ldrh r3, [r5, #20] +1000a346: 6928 ldr r0, [r5, #16] +1000a348: 492d ldr r1, [pc, #180] ; (1000a400 ) +1000a34a: 4418 add r0, r3 +1000a34c: f000 f8e2 bl 1000a514 +1000a350: 8aab ldrh r3, [r5, #20] +1000a352: 4418 add r0, r3 +1000a354: 82a8 strh r0, [r5, #20] +1000a356: e727 b.n 1000a1a8 +1000a358: 4a2a ldr r2, [pc, #168] ; (1000a404 ) +1000a35a: 69eb ldr r3, [r5, #28] +1000a35c: 6812 ldr r2, [r2, #0] +1000a35e: 492a ldr r1, [pc, #168] ; (1000a408 ) +1000a360: 4470 add r0, lr +1000a362: f010 fbe7 bl 1001ab34 +1000a366: 8aab ldrh r3, [r5, #20] +1000a368: 4418 add r0, r3 +1000a36a: 683b ldr r3, [r7, #0] +1000a36c: b280 uxth r0, r0 +1000a36e: 2bc8 cmp r3, #200 ; 0xc8 +1000a370: 82a8 strh r0, [r5, #20] +1000a372: 692b ldr r3, [r5, #16] +1000a374: d10f bne.n 1000a396 +1000a376: 4a25 ldr r2, [pc, #148] ; (1000a40c ) +1000a378: 7812 ldrb r2, [r2, #0] +1000a37a: b962 cbnz r2, 1000a396 +1000a37c: 792a ldrb r2, [r5, #4] +1000a37e: 2afd cmp r2, #253 ; 0xfd +1000a380: d009 beq.n 1000a396 +1000a382: f44f 6261 mov.w r2, #3600 ; 0xe10 +1000a386: 4922 ldr r1, [pc, #136] ; (1000a410 ) +1000a388: 4418 add r0, r3 +1000a38a: f010 fbd3 bl 1001ab34 +1000a38e: 8aab ldrh r3, [r5, #20] +1000a390: 4418 add r0, r3 +1000a392: 82a8 strh r0, [r5, #20] +1000a394: e7c5 b.n 1000a322 +1000a396: 4918 ldr r1, [pc, #96] ; (1000a3f8 ) +1000a398: 4418 add r0, r3 +1000a39a: f000 f8bb bl 1000a514 +1000a39e: e7f6 b.n 1000a38e +1000a3a0: 0652 lsls r2, r2, #25 +1000a3a2: d5cb bpl.n 1000a33c +1000a3a4: 6928 ldr r0, [r5, #16] +1000a3a6: 491b ldr r1, [pc, #108] ; (1000a414 ) +1000a3a8: e7c2 b.n 1000a330 +1000a3aa: 4a16 ldr r2, [pc, #88] ; (1000a404 ) +1000a3ac: 491a ldr r1, [pc, #104] ; (1000a418 ) +1000a3ae: 6812 ldr r2, [r2, #0] +1000a3b0: 4440 add r0, r8 +1000a3b2: f010 fbbf bl 1001ab34 +1000a3b6: 8aab ldrh r3, [r5, #20] +1000a3b8: 4418 add r0, r3 +1000a3ba: 682b ldr r3, [r5, #0] +1000a3bc: 82a8 strh r0, [r5, #20] +1000a3be: f043 0306 orr.w r3, r3, #6 +1000a3c2: e6f0 b.n 1000a1a6 +1000a3c4: f042 0202 orr.w r2, r2, #2 +1000a3c8: 602a str r2, [r5, #0] +1000a3ca: e6ed b.n 1000a1a8 +1000a3cc: 4813 ldr r0, [pc, #76] ; (1000a41c ) +1000a3ce: f010 fbd7 bl 1001ab80 +1000a3d2: 6833 ldr r3, [r6, #0] +1000a3d4: f043 0306 orr.w r3, r3, #6 +1000a3d8: 6033 str r3, [r6, #0] +1000a3da: e45c b.n 10009c96 +1000a3dc: 4810 ldr r0, [pc, #64] ; (1000a420 ) +1000a3de: f010 fbcf bl 1001ab80 +1000a3e2: f04f 30ff mov.w r0, #4294967295 +1000a3e6: f7ff bb14 b.w 10009a12 +1000a3ea: bf00 nop +1000a3ec: 1003f5e9 .word 0x1003f5e9 +1000a3f0: 1003f2a0 .word 0x1003f2a0 +1000a3f4: 1003f60a .word 0x1003f60a +1000a3f8: 1003f61d .word 0x1003f61d +1000a3fc: 1003f682 .word 0x1003f682 +1000a400: 1003f72e .word 0x1003f72e +1000a404: 10044d44 .word 0x10044d44 +1000a408: 1003f65d .word 0x1003f65d +1000a40c: 1004a7e0 .word 0x1004a7e0 +1000a410: 1003f665 .word 0x1003f665 +1000a414: 1003f69b .word 0x1003f69b +1000a418: 1003f6b8 .word 0x1003f6b8 +1000a41c: 1003f6df .word 0x1003f6df +1000a420: 1003f6ce .word 0x1003f6ce + +1000a424 : +1000a424: b51f push {r0, r1, r2, r3, r4, lr} +1000a426: 2300 movs r3, #0 +1000a428: 9001 str r0, [sp, #4] +1000a42a: 4806 ldr r0, [pc, #24] ; (1000a444 ) +1000a42c: 9102 str r1, [sp, #8] +1000a42e: f8ad 200c strh.w r2, [sp, #12] +1000a432: a901 add r1, sp, #4 +1000a434: 461a mov r2, r3 +1000a436: 6800 ldr r0, [r0, #0] +1000a438: f00b fae0 bl 100159fc +1000a43c: b005 add sp, #20 +1000a43e: f85d fb04 ldr.w pc, [sp], #4 +1000a442: bf00 nop +1000a444: 1004a7e4 .word 0x1004a7e4 + +1000a448 : +1000a448: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +1000a44a: 4606 mov r6, r0 +1000a44c: 2200 movs r2, #0 +1000a44e: 210c movs r1, #12 +1000a450: 2005 movs r0, #5 +1000a452: f00b faaf bl 100159b4 +1000a456: 4b1e ldr r3, [pc, #120] ; (1000a4d0 ) +1000a458: 6018 str r0, [r3, #0] +1000a45a: b920 cbnz r0, 1000a466 +1000a45c: f04f 35ff mov.w r5, #4294967295 +1000a460: 4628 mov r0, r5 +1000a462: b004 add sp, #16 +1000a464: bd70 pop {r4, r5, r6, pc} +1000a466: 2300 movs r3, #0 +1000a468: 2205 movs r2, #5 +1000a46a: 9303 str r3, [sp, #12] +1000a46c: 9200 str r2, [sp, #0] +1000a46e: 9302 str r3, [sp, #8] +1000a470: 9301 str r3, [sp, #4] +1000a472: f44f 6280 mov.w r2, #1024 ; 0x400 +1000a476: 4917 ldr r1, [pc, #92] ; (1000a4d4 ) +1000a478: 4817 ldr r0, [pc, #92] ; (1000a4d8 ) +1000a47a: f00b fceb bl 10015e54 +1000a47e: 2801 cmp r0, #1 +1000a480: d1ec bne.n 1000a45c +1000a482: 4630 mov r0, r6 +1000a484: f7fe fab4 bl 100089f0 +1000a488: 4604 mov r4, r0 +1000a48a: 2800 cmp r0, #0 +1000a48c: d0e6 beq.n 1000a45c +1000a48e: 4b13 ldr r3, [pc, #76] ; (1000a4dc ) +1000a490: 781a ldrb r2, [r3, #0] +1000a492: 0712 lsls r2, r2, #28 +1000a494: bf42 ittt mi +1000a496: 7802 ldrbmi r2, [r0, #0] +1000a498: f042 0202 orrmi.w r2, r2, #2 +1000a49c: 7002 strbmi r2, [r0, #0] +1000a49e: 2263 movs r2, #99 ; 0x63 +1000a4a0: 7182 strb r2, [r0, #6] +1000a4a2: 88da ldrh r2, [r3, #6] +1000a4a4: 7202 strb r2, [r0, #8] +1000a4a6: 891b ldrh r3, [r3, #8] +1000a4a8: 7243 strb r3, [r0, #9] +1000a4aa: 4b0d ldr r3, [pc, #52] ; (1000a4e0 ) +1000a4ac: 6143 str r3, [r0, #20] +1000a4ae: 4b0d ldr r3, [pc, #52] ; (1000a4e4 ) +1000a4b0: 61c3 str r3, [r0, #28] +1000a4b2: 4b0d ldr r3, [pc, #52] ; (1000a4e8 ) +1000a4b4: 6203 str r3, [r0, #32] +1000a4b6: f7fe fad9 bl 10008a6c +1000a4ba: 4605 mov r5, r0 +1000a4bc: b118 cbz r0, 1000a4c6 +1000a4be: 4620 mov r0, r4 +1000a4c0: f7fe fb20 bl 10008b04 +1000a4c4: e7cc b.n 1000a460 +1000a4c6: 4631 mov r1, r6 +1000a4c8: 4808 ldr r0, [pc, #32] ; (1000a4ec ) +1000a4ca: f010 fb59 bl 1001ab80 +1000a4ce: e7c7 b.n 1000a460 +1000a4d0: 1004a7e4 .word 0x1004a7e4 +1000a4d4: 1003f4ca .word 0x1003f4ca +1000a4d8: 10008f05 .word 0x10008f05 +1000a4dc: 10044c34 .word 0x10044c34 +1000a4e0: 10009015 .word 0x10009015 +1000a4e4: 100095f1 .word 0x100095f1 +1000a4e8: 100096c1 .word 0x100096c1 +1000a4ec: 1003f4d2 .word 0x1003f4d2 + +1000a4f0 : +1000a4f0: b508 push {r3, lr} +1000a4f2: b158 cbz r0, 1000a50c +1000a4f4: f7fe f9d8 bl 100088a8 +1000a4f8: f7fe fb04 bl 10008b04 +1000a4fc: 4b04 ldr r3, [pc, #16] ; (1000a510 ) +1000a4fe: 889b ldrh r3, [r3, #4] +1000a500: b12b cbz r3, 1000a50e +1000a502: 4618 mov r0, r3 +1000a504: e8bd 4008 ldmia.w sp!, {r3, lr} +1000a508: f7ff bf9e b.w 1000a448 +1000a50c: e7f6 b.n 1000a4fc +1000a50e: bd08 pop {r3, pc} +1000a510: 10044c34 .word 0x10044c34 + +1000a514 : +1000a514: 460b mov r3, r1 +1000a516: b510 push {r4, lr} +1000a518: 1e44 subs r4, r0, #1 +1000a51a: 1a58 subs r0, r3, r1 +1000a51c: f913 2b01 ldrsb.w r2, [r3], #1 +1000a520: f804 2f01 strb.w r2, [r4, #1]! +1000a524: 2a00 cmp r2, #0 +1000a526: d1f8 bne.n 1000a51a +1000a528: bd10 pop {r4, pc} + +1000a52a : +1000a52a: 3901 subs r1, #1 +1000a52c: f911 3f01 ldrsb.w r3, [r1, #1]! +1000a530: b90b cbnz r3, 1000a536 +1000a532: 2001 movs r0, #1 +1000a534: 4770 bx lr +1000a536: f910 2b01 ldrsb.w r2, [r0], #1 +1000a53a: 429a cmp r2, r3 +1000a53c: d0f6 beq.n 1000a52c +1000a53e: 2000 movs r0, #0 +1000a540: 4770 bx lr + +1000a542 : +1000a542: b530 push {r4, r5, lr} +1000a544: f990 2000 ldrsb.w r2, [r0] +1000a548: 4603 mov r3, r0 +1000a54a: 2a20 cmp r2, #32 +1000a54c: f100 0001 add.w r0, r0, #1 +1000a550: d0f8 beq.n 1000a544 +1000a552: 2a2b cmp r2, #43 ; 0x2b +1000a554: d00f beq.n 1000a576 +1000a556: 2a2d cmp r2, #45 ; 0x2d +1000a558: d10f bne.n 1000a57a +1000a55a: 2101 movs r1, #1 +1000a55c: 3301 adds r3, #1 +1000a55e: 2000 movs r0, #0 +1000a560: 250a movs r5, #10 +1000a562: 3b01 subs r3, #1 +1000a564: f913 2f01 ldrsb.w r2, [r3, #1]! +1000a568: 3a30 subs r2, #48 ; 0x30 +1000a56a: b2d4 uxtb r4, r2 +1000a56c: 2c09 cmp r4, #9 +1000a56e: d906 bls.n 1000a57e +1000a570: b901 cbnz r1, 1000a574 +1000a572: 4240 negs r0, r0 +1000a574: bd30 pop {r4, r5, pc} +1000a576: 2100 movs r1, #0 +1000a578: e7f0 b.n 1000a55c +1000a57a: 2100 movs r1, #0 +1000a57c: e7ef b.n 1000a55e +1000a57e: 4368 muls r0, r5 +1000a580: 1a80 subs r0, r0, r2 +1000a582: e7ef b.n 1000a564 + +1000a584 : +1000a584: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1000a586: f021 0503 bic.w r5, r1, #3 +1000a58a: f011 0103 ands.w r1, r1, #3 +1000a58e: d016 beq.n 1000a5be +1000a590: 4b29 ldr r3, [pc, #164] ; (1000a638 ) +1000a592: f105 4470 add.w r4, r5, #4026531840 ; 0xf0000000 +1000a596: 429c cmp r4, r3 +1000a598: bf8c ite hi +1000a59a: 2400 movhi r4, #0 +1000a59c: 682c ldrls r4, [r5, #0] +1000a59e: 1d2b adds r3, r5, #4 +1000a5a0: 461d mov r5, r3 +1000a5a2: ab02 add r3, sp, #8 +1000a5a4: 9401 str r4, [sp, #4] +1000a5a6: 185c adds r4, r3, r1 +1000a5a8: 3c05 subs r4, #5 +1000a5aa: 1a09 subs r1, r1, r0 +1000a5ac: b13a cbz r2, 1000a5be +1000a5ae: f814 3f01 ldrb.w r3, [r4, #1]! +1000a5b2: 3a01 subs r2, #1 +1000a5b4: f800 3b01 strb.w r3, [r0], #1 +1000a5b8: 1843 adds r3, r0, r1 +1000a5ba: 2b04 cmp r3, #4 +1000a5bc: d1f6 bne.n 1000a5ac +1000a5be: f04f 0e00 mov.w lr, #0 +1000a5c2: f022 0303 bic.w r3, r2, #3 +1000a5c6: 4f1c ldr r7, [pc, #112] ; (1000a638 ) +1000a5c8: 1d29 adds r1, r5, #4 +1000a5ca: 18c6 adds r6, r0, r3 +1000a5cc: 42b0 cmp r0, r6 +1000a5ce: d113 bne.n 1000a5f8 +1000a5d0: f012 0203 ands.w r2, r2, #3 +1000a5d4: 442b add r3, r5 +1000a5d6: d00d beq.n 1000a5f4 +1000a5d8: 4917 ldr r1, [pc, #92] ; (1000a638 ) +1000a5da: f103 4070 add.w r0, r3, #4026531840 ; 0xf0000000 +1000a5de: 4288 cmp r0, r1 +1000a5e0: d827 bhi.n 1000a632 +1000a5e2: 681b ldr r3, [r3, #0] +1000a5e4: 9301 str r3, [sp, #4] +1000a5e6: 2300 movs r3, #0 +1000a5e8: a801 add r0, sp, #4 +1000a5ea: 5c19 ldrb r1, [r3, r0] +1000a5ec: 54f1 strb r1, [r6, r3] +1000a5ee: 3301 adds r3, #1 +1000a5f0: 4293 cmp r3, r2 +1000a5f2: d1fa bne.n 1000a5ea +1000a5f4: b003 add sp, #12 +1000a5f6: bdf0 pop {r4, r5, r6, r7, pc} +1000a5f8: f101 4470 add.w r4, r1, #4026531840 ; 0xf0000000 +1000a5fc: 3c04 subs r4, #4 +1000a5fe: 42bc cmp r4, r7 +1000a600: bf96 itet ls +1000a602: f851 4c04 ldrls.w r4, [r1, #-4] +1000a606: f8cd e004 strhi.w lr, [sp, #4] +1000a60a: 9401 strls r4, [sp, #4] +1000a60c: f89d 4004 ldrb.w r4, [sp, #4] +1000a610: 3004 adds r0, #4 +1000a612: f800 4c04 strb.w r4, [r0, #-4] +1000a616: f89d 4005 ldrb.w r4, [sp, #5] +1000a61a: 3104 adds r1, #4 +1000a61c: f800 4c03 strb.w r4, [r0, #-3] +1000a620: f89d 4006 ldrb.w r4, [sp, #6] +1000a624: f800 4c02 strb.w r4, [r0, #-2] +1000a628: f89d 4007 ldrb.w r4, [sp, #7] +1000a62c: f800 4c01 strb.w r4, [r0, #-1] +1000a630: e7cc b.n 1000a5cc +1000a632: 2300 movs r3, #0 +1000a634: e7d6 b.n 1000a5e4 +1000a636: bf00 nop +1000a638: 8a001fff .word 0x8a001fff + +1000a63c : +1000a63c: 1e42 subs r2, r0, #1 +1000a63e: 2000 movs r0, #0 +1000a640: b510 push {r4, lr} +1000a642: f812 3f01 ldrb.w r3, [r2, #1]! +1000a646: b903 cbnz r3, 1000a64a +1000a648: bd10 pop {r4, pc} +1000a64a: f1a3 0130 sub.w r1, r3, #48 ; 0x30 +1000a64e: b2cc uxtb r4, r1 +1000a650: 2c09 cmp r4, #9 +1000a652: d802 bhi.n 1000a65a +1000a654: ea41 1000 orr.w r0, r1, r0, lsl #4 +1000a658: e7f3 b.n 1000a642 +1000a65a: f1a3 0141 sub.w r1, r3, #65 ; 0x41 +1000a65e: 2905 cmp r1, #5 +1000a660: d803 bhi.n 1000a66a +1000a662: 3b37 subs r3, #55 ; 0x37 +1000a664: ea43 1000 orr.w r0, r3, r0, lsl #4 +1000a668: e7eb b.n 1000a642 +1000a66a: f1a3 0161 sub.w r1, r3, #97 ; 0x61 +1000a66e: 2905 cmp r1, #5 +1000a670: d8ea bhi.n 1000a648 +1000a672: 3b57 subs r3, #87 ; 0x57 +1000a674: e7f6 b.n 1000a664 + +1000a676 : +1000a676: 7803 ldrb r3, [r0, #0] +1000a678: 2b30 cmp r3, #48 ; 0x30 +1000a67a: d107 bne.n 1000a68c +1000a67c: 7843 ldrb r3, [r0, #1] +1000a67e: f043 0320 orr.w r3, r3, #32 +1000a682: 2b78 cmp r3, #120 ; 0x78 +1000a684: d102 bne.n 1000a68c +1000a686: 3002 adds r0, #2 +1000a688: f7ff bfd8 b.w 1000a63c +1000a68c: f7ff bf59 b.w 1000a542 + +1000a690 : +1000a690: b570 push {r4, r5, r6, lr} +1000a692: f8bd 4010 ldrh.w r4, [sp, #16] +1000a696: b34c cbz r4, 1000a6ec +1000a698: bb59 cbnz r1, 1000a6f2 +1000a69a: b1c0 cbz r0, 1000a6ce +1000a69c: 7001 strb r1, [r0, #0] +1000a69e: e01e b.n 1000a6de +1000a6a0: b90a cbnz r2, 1000a6a6 +1000a6a2: 2d20 cmp r5, #32 +1000a6a4: d102 bne.n 1000a6ac +1000a6a6: 4295 cmp r5, r2 +1000a6a8: 4631 mov r1, r6 +1000a6aa: d123 bne.n 1000a6f4 +1000a6ac: b138 cbz r0, 1000a6be +1000a6ae: 460a mov r2, r1 +1000a6b0: 4404 add r4, r0 +1000a6b2: 42a0 cmp r0, r4 +1000a6b4: 4611 mov r1, r2 +1000a6b6: d10c bne.n 1000a6d2 +1000a6b8: 2200 movs r2, #0 +1000a6ba: f800 2c01 strb.w r2, [r0, #-1] +1000a6be: 460a mov r2, r1 +1000a6c0: 4611 mov r1, r2 +1000a6c2: f812 0b01 ldrb.w r0, [r2], #1 +1000a6c6: 4283 cmp r3, r0 +1000a6c8: d009 beq.n 1000a6de +1000a6ca: 281f cmp r0, #31 +1000a6cc: d8f8 bhi.n 1000a6c0 +1000a6ce: 2100 movs r1, #0 +1000a6d0: e005 b.n 1000a6de +1000a6d2: 7815 ldrb r5, [r2, #0] +1000a6d4: 1c4a adds r2, r1, #1 +1000a6d6: 429d cmp r5, r3 +1000a6d8: d103 bne.n 1000a6e2 +1000a6da: 2300 movs r3, #0 +1000a6dc: 7003 strb r3, [r0, #0] +1000a6de: 4608 mov r0, r1 +1000a6e0: bd70 pop {r4, r5, r6, pc} +1000a6e2: 2d1f cmp r5, #31 +1000a6e4: d90e bls.n 1000a704 +1000a6e6: f800 5b01 strb.w r5, [r0], #1 +1000a6ea: e7e2 b.n 1000a6b2 +1000a6ec: 2900 cmp r1, #0 +1000a6ee: d0ee beq.n 1000a6ce +1000a6f0: 4620 mov r0, r4 +1000a6f2: 460e mov r6, r1 +1000a6f4: 7835 ldrb r5, [r6, #0] +1000a6f6: 4631 mov r1, r6 +1000a6f8: 2d1f cmp r5, #31 +1000a6fa: f106 0601 add.w r6, r6, #1 +1000a6fe: d8cf bhi.n 1000a6a0 +1000a700: 2800 cmp r0, #0 +1000a702: d0e4 beq.n 1000a6ce +1000a704: 2100 movs r1, #0 +1000a706: e7c9 b.n 1000a69c + +1000a708 : +1000a708: b5f8 push {r3, r4, r5, r6, r7, lr} +1000a70a: 4604 mov r4, r0 +1000a70c: 2000 movs r0, #0 +1000a70e: 460e mov r6, r1 +1000a710: 4617 mov r7, r2 +1000a712: 4605 mov r5, r0 +1000a714: 42bd cmp r5, r7 +1000a716: d301 bcc.n 1000a71c +1000a718: 4628 mov r0, r5 +1000a71a: bdf8 pop {r3, r4, r5, r6, r7, pc} +1000a71c: b940 cbnz r0, 1000a730 +1000a71e: 7823 ldrb r3, [r4, #0] +1000a720: 2b2d cmp r3, #45 ; 0x2d +1000a722: d117 bne.n 1000a754 +1000a724: 7861 ldrb r1, [r4, #1] +1000a726: 3930 subs r1, #48 ; 0x30 +1000a728: 2909 cmp r1, #9 +1000a72a: d813 bhi.n 1000a754 +1000a72c: 4620 mov r0, r4 +1000a72e: 3401 adds r4, #1 +1000a730: 7823 ldrb r3, [r4, #0] +1000a732: 2b2c cmp r3, #44 ; 0x2c +1000a734: d013 beq.n 1000a75e +1000a736: 2b29 cmp r3, #41 ; 0x29 +1000a738: d80a bhi.n 1000a750 +1000a73a: b110 cbz r0, 1000a742 +1000a73c: f7ff ff9b bl 1000a676 +1000a740: 6030 str r0, [r6, #0] +1000a742: 7823 ldrb r3, [r4, #0] +1000a744: 3604 adds r6, #4 +1000a746: 2b28 cmp r3, #40 ; 0x28 +1000a748: f105 0501 add.w r5, r5, #1 +1000a74c: d9e4 bls.n 1000a718 +1000a74e: 2000 movs r0, #0 +1000a750: 3401 adds r4, #1 +1000a752: e7df b.n 1000a714 +1000a754: 3b30 subs r3, #48 ; 0x30 +1000a756: 2b09 cmp r3, #9 +1000a758: bf98 it ls +1000a75a: 4620 movls r0, r4 +1000a75c: e7e8 b.n 1000a730 +1000a75e: 2800 cmp r0, #0 +1000a760: d1ec bne.n 1000a73c +1000a762: 3604 adds r6, #4 +1000a764: 3501 adds r5, #1 +1000a766: e7f3 b.n 1000a750 + +1000a768 : +1000a768: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} +1000a76c: 2403 movs r4, #3 +1000a76e: 460d mov r5, r1 +1000a770: 233a movs r3, #58 ; 0x3a +1000a772: 4601 mov r1, r0 +1000a774: 2200 movs r2, #0 +1000a776: 9400 str r4, [sp, #0] +1000a778: a803 add r0, sp, #12 +1000a77a: f7ff ff89 bl 1000a690 +1000a77e: 4606 mov r6, r0 +1000a780: a803 add r0, sp, #12 +1000a782: f7ff ff5b bl 1000a63c +1000a786: 462f mov r7, r5 +1000a788: f105 0801 add.w r8, r5, #1 +1000a78c: f807 0b05 strb.w r0, [r7], #5 +1000a790: 45b8 cmp r8, r7 +1000a792: 9400 str r4, [sp, #0] +1000a794: d10c bne.n 1000a7b0 +1000a796: 2320 movs r3, #32 +1000a798: 223a movs r2, #58 ; 0x3a +1000a79a: 4631 mov r1, r6 +1000a79c: a803 add r0, sp, #12 +1000a79e: f7ff ff77 bl 1000a690 +1000a7a2: a803 add r0, sp, #12 +1000a7a4: f7ff ff4a bl 1000a63c +1000a7a8: 7168 strb r0, [r5, #5] +1000a7aa: b004 add sp, #16 +1000a7ac: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000a7b0: 233a movs r3, #58 ; 0x3a +1000a7b2: 4631 mov r1, r6 +1000a7b4: 461a mov r2, r3 +1000a7b6: a803 add r0, sp, #12 +1000a7b8: f7ff ff6a bl 1000a690 +1000a7bc: 4606 mov r6, r0 +1000a7be: a803 add r0, sp, #12 +1000a7c0: f7ff ff3c bl 1000a63c +1000a7c4: f808 0b01 strb.w r0, [r8], #1 +1000a7c8: e7e2 b.n 1000a790 + +1000a7ca : +1000a7ca: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +1000a7ce: 4606 mov r6, r0 +1000a7d0: 2900 cmp r1, #0 +1000a7d2: d04e beq.n 1000a872 +1000a7d4: 4607 mov r7, r0 +1000a7d6: f04f 0820 mov.w r8, #32 +1000a7da: 2000 movs r0, #0 +1000a7dc: 1e5d subs r5, r3, #1 +1000a7de: 463e mov r6, r7 +1000a7e0: b2ad uxth r5, r5 +1000a7e2: b123 cbz r3, 1000a7ee +1000a7e4: 4290 cmp r0, r2 +1000a7e6: d002 beq.n 1000a7ee +1000a7e8: 780c ldrb r4, [r1, #0] +1000a7ea: 2c20 cmp r4, #32 +1000a7ec: d803 bhi.n 1000a7f6 +1000a7ee: 2300 movs r3, #0 +1000a7f0: 7033 strb r3, [r6, #0] +1000a7f2: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +1000a7f6: 2c25 cmp r4, #37 ; 0x25 +1000a7f8: d134 bne.n 1000a864 +1000a7fa: 2d01 cmp r5, #1 +1000a7fc: d937 bls.n 1000a86e +1000a7fe: f04f 0c01 mov.w ip, #1 +1000a802: 2600 movs r6, #0 +1000a804: f101 0901 add.w r9, r1, #1 +1000a808: eba3 050c sub.w r5, r3, ip +1000a80c: f1bc 0f03 cmp.w ip, #3 +1000a810: b2ad uxth r5, r5 +1000a812: 4649 mov r1, r9 +1000a814: d01c beq.n 1000a850 +1000a816: f819 4b01 ldrb.w r4, [r9], #1 +1000a81a: f1a4 0e30 sub.w lr, r4, #48 ; 0x30 +1000a81e: fa5f fe8e uxtb.w lr, lr +1000a822: f1be 0f09 cmp.w lr, #9 +1000a826: d805 bhi.n 1000a834 +1000a828: ea4e 1406 orr.w r4, lr, r6, lsl #4 +1000a82c: b2e6 uxtb r6, r4 +1000a82e: f10c 0c01 add.w ip, ip, #1 +1000a832: e7e9 b.n 1000a808 +1000a834: f1a4 0e41 sub.w lr, r4, #65 ; 0x41 +1000a838: f1be 0f05 cmp.w lr, #5 +1000a83c: d803 bhi.n 1000a846 +1000a83e: 3c37 subs r4, #55 ; 0x37 +1000a840: ea44 1406 orr.w r4, r4, r6, lsl #4 +1000a844: e7f2 b.n 1000a82c +1000a846: f1a4 0e61 sub.w lr, r4, #97 ; 0x61 +1000a84a: f1be 0f05 cmp.w lr, #5 +1000a84e: d907 bls.n 1000a860 +1000a850: 3901 subs r1, #1 +1000a852: 703e strb r6, [r7, #0] +1000a854: 3001 adds r0, #1 +1000a856: b280 uxth r0, r0 +1000a858: 3101 adds r1, #1 +1000a85a: 3701 adds r7, #1 +1000a85c: 462b mov r3, r5 +1000a85e: e7bd b.n 1000a7dc +1000a860: 3c57 subs r4, #87 ; 0x57 +1000a862: e7ed b.n 1000a840 +1000a864: 2c2b cmp r4, #43 ; 0x2b +1000a866: d102 bne.n 1000a86e +1000a868: f887 8000 strb.w r8, [r7] +1000a86c: e7f2 b.n 1000a854 +1000a86e: 703c strb r4, [r7, #0] +1000a870: e7f0 b.n 1000a854 +1000a872: 4608 mov r0, r1 +1000a874: e7bb b.n 1000a7ee + +1000a876 : +1000a876: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +1000a87a: 4604 mov r4, r0 +1000a87c: 2900 cmp r1, #0 +1000a87e: d079 beq.n 1000a974 +1000a880: 2000 movs r0, #0 +1000a882: 2726 movs r7, #38 ; 0x26 +1000a884: f04f 0e74 mov.w lr, #116 ; 0x74 +1000a888: 263b movs r6, #59 ; 0x3b +1000a88a: f04f 096c mov.w r9, #108 ; 0x6c +1000a88e: f04f 0c61 mov.w ip, #97 ; 0x61 +1000a892: f04f 0a6d mov.w sl, #109 ; 0x6d +1000a896: f04f 0870 mov.w r8, #112 ; 0x70 +1000a89a: f04f 0b71 mov.w fp, #113 ; 0x71 +1000a89e: 18cb adds r3, r1, r3 +1000a8a0: 9301 str r3, [sp, #4] +1000a8a2: 9b01 ldr r3, [sp, #4] +1000a8a4: 4299 cmp r1, r3 +1000a8a6: d005 beq.n 1000a8b4 +1000a8a8: 1e53 subs r3, r2, #1 +1000a8aa: b29b uxth r3, r3 +1000a8ac: b112 cbz r2, 1000a8b4 +1000a8ae: f811 5b01 ldrb.w r5, [r1], #1 +1000a8b2: b925 cbnz r5, 1000a8be +1000a8b4: 2300 movs r3, #0 +1000a8b6: 7023 strb r3, [r4, #0] +1000a8b8: b003 add sp, #12 +1000a8ba: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1000a8be: 2d27 cmp r5, #39 ; 0x27 +1000a8c0: d112 bne.n 1000a8e8 +1000a8c2: 2b05 cmp r3, #5 +1000a8c4: d9f6 bls.n 1000a8b4 +1000a8c6: 1fd3 subs r3, r2, #7 +1000a8c8: 226f movs r2, #111 ; 0x6f +1000a8ca: 70e2 strb r2, [r4, #3] +1000a8cc: 2273 movs r2, #115 ; 0x73 +1000a8ce: 3006 adds r0, #6 +1000a8d0: b280 uxth r0, r0 +1000a8d2: b29b uxth r3, r3 +1000a8d4: 7027 strb r7, [r4, #0] +1000a8d6: f884 c001 strb.w ip, [r4, #1] +1000a8da: f884 8002 strb.w r8, [r4, #2] +1000a8de: 7122 strb r2, [r4, #4] +1000a8e0: 7166 strb r6, [r4, #5] +1000a8e2: 3406 adds r4, #6 +1000a8e4: 461a mov r2, r3 +1000a8e6: e7dc b.n 1000a8a2 +1000a8e8: 2d22 cmp r5, #34 ; 0x22 +1000a8ea: d10f bne.n 1000a90c +1000a8ec: 2b05 cmp r3, #5 +1000a8ee: d9e1 bls.n 1000a8b4 +1000a8f0: 1fd3 subs r3, r2, #7 +1000a8f2: 2275 movs r2, #117 ; 0x75 +1000a8f4: 70a2 strb r2, [r4, #2] +1000a8f6: 226f movs r2, #111 ; 0x6f +1000a8f8: 3006 adds r0, #6 +1000a8fa: b280 uxth r0, r0 +1000a8fc: b29b uxth r3, r3 +1000a8fe: 7027 strb r7, [r4, #0] +1000a900: f884 b001 strb.w fp, [r4, #1] +1000a904: 70e2 strb r2, [r4, #3] +1000a906: f884 e004 strb.w lr, [r4, #4] +1000a90a: e7e9 b.n 1000a8e0 +1000a90c: 2d26 cmp r5, #38 ; 0x26 +1000a90e: d10f bne.n 1000a930 +1000a910: 2b04 cmp r3, #4 +1000a912: d9cf bls.n 1000a8b4 +1000a914: 3005 adds r0, #5 +1000a916: 1f93 subs r3, r2, #6 +1000a918: 7025 strb r5, [r4, #0] +1000a91a: f884 c001 strb.w ip, [r4, #1] +1000a91e: f884 a002 strb.w sl, [r4, #2] +1000a922: f884 8003 strb.w r8, [r4, #3] +1000a926: 7126 strb r6, [r4, #4] +1000a928: b280 uxth r0, r0 +1000a92a: b29b uxth r3, r3 +1000a92c: 3405 adds r4, #5 +1000a92e: e7d9 b.n 1000a8e4 +1000a930: 2d3c cmp r5, #60 ; 0x3c +1000a932: d10d bne.n 1000a950 +1000a934: 2b03 cmp r3, #3 +1000a936: d9bd bls.n 1000a8b4 +1000a938: 3004 adds r0, #4 +1000a93a: 1f53 subs r3, r2, #5 +1000a93c: b280 uxth r0, r0 +1000a93e: b29b uxth r3, r3 +1000a940: 7027 strb r7, [r4, #0] +1000a942: f884 9001 strb.w r9, [r4, #1] +1000a946: f884 e002 strb.w lr, [r4, #2] +1000a94a: 70e6 strb r6, [r4, #3] +1000a94c: 3404 adds r4, #4 +1000a94e: e7c9 b.n 1000a8e4 +1000a950: 2d3e cmp r5, #62 ; 0x3e +1000a952: d10a bne.n 1000a96a +1000a954: 2b03 cmp r3, #3 +1000a956: d9ad bls.n 1000a8b4 +1000a958: 1f53 subs r3, r2, #5 +1000a95a: f04f 0267 mov.w r2, #103 ; 0x67 +1000a95e: 3004 adds r0, #4 +1000a960: b280 uxth r0, r0 +1000a962: b29b uxth r3, r3 +1000a964: 7027 strb r7, [r4, #0] +1000a966: 7062 strb r2, [r4, #1] +1000a968: e7ed b.n 1000a946 +1000a96a: 3001 adds r0, #1 +1000a96c: 7025 strb r5, [r4, #0] +1000a96e: b280 uxth r0, r0 +1000a970: 3401 adds r4, #1 +1000a972: e7b7 b.n 1000a8e4 +1000a974: 4608 mov r0, r1 +1000a976: e79d b.n 1000a8b4 + +1000a978 : +1000a978: b5f8 push {r3, r4, r5, r6, r7, lr} +1000a97a: 4604 mov r4, r0 +1000a97c: 4608 mov r0, r1 +1000a97e: 460f mov r7, r1 +1000a980: 4615 mov r5, r2 +1000a982: f010 f939 bl 1001abf8 +1000a986: 4606 mov r6, r0 +1000a988: b198 cbz r0, 1000a9b2 +1000a98a: 4425 add r5, r4 +1000a98c: 7820 ldrb r0, [r4, #0] +1000a98e: b188 cbz r0, 1000a9b4 +1000a990: 19a3 adds r3, r4, r6 +1000a992: 42ab cmp r3, r5 +1000a994: d901 bls.n 1000a99a +1000a996: 2000 movs r0, #0 +1000a998: bdf8 pop {r3, r4, r5, r6, r7, pc} +1000a99a: 783b ldrb r3, [r7, #0] +1000a99c: 4283 cmp r3, r0 +1000a99e: d001 beq.n 1000a9a4 +1000a9a0: 3401 adds r4, #1 +1000a9a2: e7f3 b.n 1000a98c +1000a9a4: 4632 mov r2, r6 +1000a9a6: 4639 mov r1, r7 +1000a9a8: 4620 mov r0, r4 +1000a9aa: f010 f929 bl 1001ac00 +1000a9ae: 2800 cmp r0, #0 +1000a9b0: d1f6 bne.n 1000a9a0 +1000a9b2: 4620 mov r0, r4 +1000a9b4: bdf8 pop {r3, r4, r5, r6, r7, pc} + ... + +1000a9b8 : +1000a9b8: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1000a9bc: 2400 movs r4, #0 +1000a9be: 468a mov sl, r1 +1000a9c0: 4684 mov ip, r0 +1000a9c2: 4625 mov r5, r4 +1000a9c4: 4626 mov r6, r4 +1000a9c6: 2703 movs r7, #3 +1000a9c8: f8df 8080 ldr.w r8, [pc, #128] ; 1000aa4c +1000a9cc: ebac 0e00 sub.w lr, ip, r0 +1000a9d0: 45f2 cmp sl, lr +1000a9d2: dc04 bgt.n 1000a9de +1000a9d4: b98d cbnz r5, 1000a9fa +1000a9d6: 601c str r4, [r3, #0] +1000a9d8: 2001 movs r0, #1 +1000a9da: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1000a9de: f81c eb01 ldrb.w lr, [ip], #1 +1000a9e2: f00e 0e7f and.w lr, lr, #127 ; 0x7f +1000a9e6: f818 e00e ldrb.w lr, [r8, lr] +1000a9ea: f1be 0fff cmp.w lr, #255 ; 0xff +1000a9ee: d0ed beq.n 1000a9cc +1000a9f0: f1be 0ffe cmp.w lr, #254 ; 0xfe +1000a9f4: d104 bne.n 1000aa00 +1000a9f6: 3f01 subs r7, #1 +1000a9f8: d51f bpl.n 1000aa3a +1000a9fa: 2000 movs r0, #0 +1000a9fc: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1000aa00: 2f03 cmp r7, #3 +1000aa02: d1fa bne.n 1000a9fa +1000aa04: 3501 adds r5, #1 +1000aa06: 2d04 cmp r5, #4 +1000aa08: ea4e 1686 orr.w r6, lr, r6, lsl #6 +1000aa0c: d111 bne.n 1000aa32 +1000aa0e: 1435 asrs r5, r6, #16 +1000aa10: 2f01 cmp r7, #1 +1000aa12: f104 0e01 add.w lr, r4, #1 +1000aa16: 5515 strb r5, [r2, r4] +1000aa18: dd12 ble.n 1000aa40 +1000aa1a: ea4f 2926 mov.w r9, r6, asr #8 +1000aa1e: 2f03 cmp r7, #3 +1000aa20: f104 0502 add.w r5, r4, #2 +1000aa24: f802 900e strb.w r9, [r2, lr] +1000aa28: d10e bne.n 1000aa48 +1000aa2a: 5556 strb r6, [r2, r5] +1000aa2c: 2600 movs r6, #0 +1000aa2e: 4635 mov r5, r6 +1000aa30: 3403 adds r4, #3 +1000aa32: 6819 ldr r1, [r3, #0] +1000aa34: 428c cmp r4, r1 +1000aa36: ddc9 ble.n 1000a9cc +1000aa38: e7df b.n 1000a9fa +1000aa3a: f04f 0e00 mov.w lr, #0 +1000aa3e: e7e1 b.n 1000aa04 +1000aa40: 4674 mov r4, lr +1000aa42: 2500 movs r5, #0 +1000aa44: 462e mov r6, r5 +1000aa46: e7f4 b.n 1000aa32 +1000aa48: 462c mov r4, r5 +1000aa4a: e7fa b.n 1000aa42 +1000aa4c: 1003f73a .word 0x1003f73a + +1000aa50 : +1000aa50: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} +1000aa54: 4607 mov r7, r0 +1000aa56: 6b44 ldr r4, [r0, #52] ; 0x34 +1000aa58: f8df 8138 ldr.w r8, [pc, #312] ; 1000ab94 +1000aa5c: 68a5 ldr r5, [r4, #8] +1000aa5e: 68e3 ldr r3, [r4, #12] +1000aa60: f025 050f bic.w r5, r5, #15 +1000aa64: f023 030f bic.w r3, r3, #15 +1000aa68: 60a5 str r5, [r4, #8] +1000aa6a: 60e3 str r3, [r4, #12] +1000aa6c: 8aa3 ldrh r3, [r4, #20] +1000aa6e: 8ae2 ldrh r2, [r4, #22] +1000aa70: 334b adds r3, #75 ; 0x4b +1000aa72: 4293 cmp r3, r2 +1000aa74: db06 blt.n 1000aa84 +1000aa76: 6823 ldr r3, [r4, #0] +1000aa78: f043 0380 orr.w r3, r3, #128 ; 0x80 +1000aa7c: 6023 str r3, [r4, #0] +1000aa7e: 4b43 ldr r3, [pc, #268] ; (1000ab8c ) +1000aa80: 61a3 str r3, [r4, #24] +1000aa82: e06c b.n 1000ab5e +1000aa84: f105 49d0 add.w r9, r5, #1744830464 ; 0x68000000 +1000aa88: f1b9 7f00 cmp.w r9, #33554432 ; 0x2000000 +1000aa8c: d204 bcs.n 1000aa98 +1000aa8e: 2001 movs r0, #1 +1000aa90: f00c f8f8 bl 10016c84 +1000aa94: f00d f85e bl 10017b54 +1000aa98: 6923 ldr r3, [r4, #16] +1000aa9a: 8aa0 ldrh r0, [r4, #20] +1000aa9c: 462a mov r2, r5 +1000aa9e: 4418 add r0, r3 +1000aaa0: 4641 mov r1, r8 +1000aaa2: f010 f847 bl 1001ab34 +1000aaa6: 8aa3 ldrh r3, [r4, #20] +1000aaa8: 4418 add r0, r3 +1000aaaa: 2300 movs r3, #0 +1000aaac: 82a0 strh r0, [r4, #20] +1000aaae: f855 2023 ldr.w r2, [r5, r3, lsl #2] +1000aab2: f84d 2023 str.w r2, [sp, r3, lsl #2] +1000aab6: 3301 adds r3, #1 +1000aab8: 2b04 cmp r3, #4 +1000aaba: d1f8 bne.n 1000aaae +1000aabc: 883e ldrh r6, [r7, #0] +1000aabe: 3510 adds r5, #16 +1000aac0: f3c6 3640 ubfx r6, r6, #13, #1 +1000aac4: 60a5 str r5, [r4, #8] +1000aac6: 2e00 cmp r6, #0 +1000aac8: d04c beq.n 1000ab64 +1000aaca: 2600 movs r6, #0 +1000aacc: f8df a0c8 ldr.w sl, [pc, #200] ; 1000ab98 +1000aad0: 6923 ldr r3, [r4, #16] +1000aad2: 8aa0 ldrh r0, [r4, #20] +1000aad4: f85d 2026 ldr.w r2, [sp, r6, lsl #2] +1000aad8: 4418 add r0, r3 +1000aada: 4651 mov r1, sl +1000aadc: f010 f82a bl 1001ab34 +1000aae0: 8aa3 ldrh r3, [r4, #20] +1000aae2: 3601 adds r6, #1 +1000aae4: 4418 add r0, r3 +1000aae6: 2e04 cmp r6, #4 +1000aae8: 82a0 strh r0, [r4, #20] +1000aaea: d1f1 bne.n 1000aad0 +1000aaec: f109 0910 add.w r9, r9, #16 +1000aaf0: f1b9 7f00 cmp.w r9, #33554432 ; 0x2000000 +1000aaf4: d204 bcs.n 1000ab00 +1000aaf6: f7fc fc11 bl 1000731c +1000aafa: 2001 movs r0, #1 +1000aafc: f00c f8dc bl 10016cb8 +1000ab00: 8aa3 ldrh r3, [r4, #20] +1000ab02: 6921 ldr r1, [r4, #16] +1000ab04: 1c5a adds r2, r3, #1 +1000ab06: 82a2 strh r2, [r4, #20] +1000ab08: 2220 movs r2, #32 +1000ab0a: 54ca strb r2, [r1, r3] +1000ab0c: 8aa3 ldrh r3, [r4, #20] +1000ab0e: 6921 ldr r1, [r4, #16] +1000ab10: 1c58 adds r0, r3, #1 +1000ab12: 82a0 strh r0, [r4, #20] +1000ab14: 54ca strb r2, [r1, r3] +1000ab16: 2200 movs r2, #0 +1000ab18: 8aa1 ldrh r1, [r4, #20] +1000ab1a: 6920 ldr r0, [r4, #16] +1000ab1c: 1c4b adds r3, r1, #1 +1000ab1e: 82a3 strh r3, [r4, #20] +1000ab20: f81d 3002 ldrb.w r3, [sp, r2] +1000ab24: 2b1f cmp r3, #31 +1000ab26: d92e bls.n 1000ab86 +1000ab28: 2b7f cmp r3, #127 ; 0x7f +1000ab2a: bf08 it eq +1000ab2c: 232e moveq r3, #46 ; 0x2e +1000ab2e: 3201 adds r2, #1 +1000ab30: 2a10 cmp r2, #16 +1000ab32: 5443 strb r3, [r0, r1] +1000ab34: d1f0 bne.n 1000ab18 +1000ab36: 8aa3 ldrh r3, [r4, #20] +1000ab38: 6920 ldr r0, [r4, #16] +1000ab3a: 4915 ldr r1, [pc, #84] ; (1000ab90 ) +1000ab3c: 4418 add r0, r3 +1000ab3e: f00f fff9 bl 1001ab34 +1000ab42: 8aa3 ldrh r3, [r4, #20] +1000ab44: 4418 add r0, r3 +1000ab46: 68e3 ldr r3, [r4, #12] +1000ab48: 82a0 strh r0, [r4, #20] +1000ab4a: 429d cmp r5, r3 +1000ab4c: d38e bcc.n 1000aa6c +1000ab4e: 6822 ldr r2, [r4, #0] +1000ab50: f022 0380 bic.w r3, r2, #128 ; 0x80 +1000ab54: 03d2 lsls r2, r2, #15 +1000ab56: bf58 it pl +1000ab58: f043 0306 orrpl.w r3, r3, #6 +1000ab5c: 6023 str r3, [r4, #0] +1000ab5e: b004 add sp, #16 +1000ab60: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1000ab64: f8df a034 ldr.w sl, [pc, #52] ; 1000ab9c +1000ab68: 6923 ldr r3, [r4, #16] +1000ab6a: 8aa0 ldrh r0, [r4, #20] +1000ab6c: f81d 2006 ldrb.w r2, [sp, r6] +1000ab70: 4418 add r0, r3 +1000ab72: 4651 mov r1, sl +1000ab74: f00f ffde bl 1001ab34 +1000ab78: 8aa3 ldrh r3, [r4, #20] +1000ab7a: 3601 adds r6, #1 +1000ab7c: 4418 add r0, r3 +1000ab7e: 2e10 cmp r6, #16 +1000ab80: 82a0 strh r0, [r4, #20] +1000ab82: d1f1 bne.n 1000ab68 +1000ab84: e7b2 b.n 1000aaec +1000ab86: 232e movs r3, #46 ; 0x2e +1000ab88: e7d1 b.n 1000ab2e +1000ab8a: bf00 nop +1000ab8c: 1000aa51 .word 0x1000aa51 +1000ab90: 1003f72e .word 0x1003f72e +1000ab94: 1003f7bb .word 0x1003f7bb +1000ab98: 1003f7ba .word 0x1003f7ba +1000ab9c: 1003f7c0 .word 0x1003f7c0 + +1000aba0 : +1000aba0: b538 push {r3, r4, r5, lr} +1000aba2: 6b44 ldr r4, [r0, #52] ; 0x34 +1000aba4: 6823 ldr r3, [r4, #0] +1000aba6: 68e5 ldr r5, [r4, #12] +1000aba8: f013 0f80 tst.w r3, #128 ; 0x80 +1000abac: 68a3 ldr r3, [r4, #8] +1000abae: d101 bne.n 1000abb4 +1000abb0: 42ab cmp r3, r5 +1000abb2: d022 beq.n 1000abfa +1000abb4: 1aed subs r5, r5, r3 +1000abb6: 8aa2 ldrh r2, [r4, #20] +1000abb8: 8ae3 ldrh r3, [r4, #22] +1000abba: 2001 movs r0, #1 +1000abbc: 1a9b subs r3, r3, r2 +1000abbe: 429d cmp r5, r3 +1000abc0: bf28 it cs +1000abc2: 461d movcs r5, r3 +1000abc4: f00c f85e bl 10016c84 +1000abc8: 6923 ldr r3, [r4, #16] +1000abca: 462a mov r2, r5 +1000abcc: 68a1 ldr r1, [r4, #8] +1000abce: 480f ldr r0, [pc, #60] ; (1000ac0c ) +1000abd0: f00d f814 bl 10017bfc +1000abd4: b190 cbz r0, 1000abfc +1000abd6: 8aa2 ldrh r2, [r4, #20] +1000abd8: 68a3 ldr r3, [r4, #8] +1000abda: 442b add r3, r5 +1000abdc: 4415 add r5, r2 +1000abde: 68e2 ldr r2, [r4, #12] +1000abe0: 60a3 str r3, [r4, #8] +1000abe2: 4293 cmp r3, r2 +1000abe4: 82a5 strh r5, [r4, #20] +1000abe6: d209 bcs.n 1000abfc +1000abe8: 4b09 ldr r3, [pc, #36] ; (1000ac10 ) +1000abea: 2001 movs r0, #1 +1000abec: 61a3 str r3, [r4, #24] +1000abee: f00c f863 bl 10016cb8 +1000abf2: 6823 ldr r3, [r4, #0] +1000abf4: f043 0380 orr.w r3, r3, #128 ; 0x80 +1000abf8: 6023 str r3, [r4, #0] +1000abfa: bd38 pop {r3, r4, r5, pc} +1000abfc: 2001 movs r0, #1 +1000abfe: f00c f85b bl 10016cb8 +1000ac02: 6823 ldr r3, [r4, #0] +1000ac04: f023 0380 bic.w r3, r3, #128 ; 0x80 +1000ac08: e7f6 b.n 1000abf8 +1000ac0a: bf00 nop +1000ac0c: 1004b58c .word 0x1004b58c +1000ac10: 1000aba1 .word 0x1000aba1 + +1000ac14 : +1000ac14: b538 push {r3, r4, r5, lr} +1000ac16: 6b44 ldr r4, [r0, #52] ; 0x34 +1000ac18: 6823 ldr r3, [r4, #0] +1000ac1a: 68e2 ldr r2, [r4, #12] +1000ac1c: f013 0f80 tst.w r3, #128 ; 0x80 +1000ac20: 68a3 ldr r3, [r4, #8] +1000ac22: d101 bne.n 1000ac28 +1000ac24: 4293 cmp r3, r2 +1000ac26: d033 beq.n 1000ac90 +1000ac28: 8ae5 ldrh r5, [r4, #22] +1000ac2a: 8aa1 ldrh r1, [r4, #20] +1000ac2c: 1ad2 subs r2, r2, r3 +1000ac2e: 1a6d subs r5, r5, r1 +1000ac30: 4295 cmp r5, r2 +1000ac32: f103 43d0 add.w r3, r3, #1744830464 ; 0x68000000 +1000ac36: bf28 it cs +1000ac38: 4615 movcs r5, r2 +1000ac3a: f1b3 7f00 cmp.w r3, #33554432 ; 0x2000000 +1000ac3e: d204 bcs.n 1000ac4a +1000ac40: 2001 movs r0, #1 +1000ac42: f00c f81f bl 10016c84 +1000ac46: f00c ff85 bl 10017b54 +1000ac4a: 462a mov r2, r5 +1000ac4c: 68a1 ldr r1, [r4, #8] +1000ac4e: 6920 ldr r0, [r4, #16] +1000ac50: f7ff fc98 bl 1000a584 +1000ac54: 68a3 ldr r3, [r4, #8] +1000ac56: f103 43d0 add.w r3, r3, #1744830464 ; 0x68000000 +1000ac5a: f1b3 7f00 cmp.w r3, #33554432 ; 0x2000000 +1000ac5e: d204 bcs.n 1000ac6a +1000ac60: f7fc fb5c bl 1000731c +1000ac64: 2001 movs r0, #1 +1000ac66: f00c f827 bl 10016cb8 +1000ac6a: 8aa3 ldrh r3, [r4, #20] +1000ac6c: 442b add r3, r5 +1000ac6e: 82a3 strh r3, [r4, #20] +1000ac70: 68a3 ldr r3, [r4, #8] +1000ac72: 441d add r5, r3 +1000ac74: 68e3 ldr r3, [r4, #12] +1000ac76: 60a5 str r5, [r4, #8] +1000ac78: 429d cmp r5, r3 +1000ac7a: 6823 ldr r3, [r4, #0] +1000ac7c: d005 beq.n 1000ac8a +1000ac7e: f043 0380 orr.w r3, r3, #128 ; 0x80 +1000ac82: 6023 str r3, [r4, #0] +1000ac84: 4b03 ldr r3, [pc, #12] ; (1000ac94 ) +1000ac86: 61a3 str r3, [r4, #24] +1000ac88: bd38 pop {r3, r4, r5, pc} +1000ac8a: f023 0380 bic.w r3, r3, #128 ; 0x80 +1000ac8e: 6023 str r3, [r4, #0] +1000ac90: bd38 pop {r3, r4, r5, pc} +1000ac92: bf00 nop +1000ac94: 1000ac15 .word 0x1000ac15 + +1000ac98 : +1000ac98: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1000ac9c: 6b44 ldr r4, [r0, #52] ; 0x34 +1000ac9e: b0c1 sub sp, #260 ; 0x104 +1000aca0: 6825 ldr r5, [r4, #0] +1000aca2: f015 0580 ands.w r5, r5, #128 ; 0x80 +1000aca6: d011 beq.n 1000accc +1000aca8: f04f 083e mov.w r8, #62 ; 0x3e +1000acac: 4f4a ldr r7, [pc, #296] ; (1000add8 ) +1000acae: f8df 9134 ldr.w r9, [pc, #308] ; 1000ade4 +1000acb2: 8aa6 ldrh r6, [r4, #20] +1000acb4: 8ae3 ldrh r3, [r4, #22] +1000acb6: f106 0289 add.w r2, r6, #137 ; 0x89 +1000acba: 429a cmp r2, r3 +1000acbc: db29 blt.n 1000ad12 +1000acbe: 6823 ldr r3, [r4, #0] +1000acc0: f043 0380 orr.w r3, r3, #128 ; 0x80 +1000acc4: 6023 str r3, [r4, #0] +1000acc6: 4b45 ldr r3, [pc, #276] ; (1000addc ) +1000acc8: 61a3 str r3, [r4, #24] +1000acca: e015 b.n 1000acf8 +1000accc: 4b42 ldr r3, [pc, #264] ; (1000add8 ) +1000acce: 60a5 str r5, [r4, #8] +1000acd0: 7ada ldrb r2, [r3, #11] +1000acd2: 2a02 cmp r2, #2 +1000acd4: d113 bne.n 1000acfe +1000acd6: f641 3058 movw r0, #7000 ; 0x1b58 +1000acda: 7a1d ldrb r5, [r3, #8] +1000acdc: f003 fc7c bl 1000e5d8 +1000ace0: 8aa3 ldrh r3, [r4, #20] +1000ace2: 6920 ldr r0, [r4, #16] +1000ace4: 462a mov r2, r5 +1000ace6: 4418 add r0, r3 +1000ace8: 493d ldr r1, [pc, #244] ; (1000ade0 ) +1000acea: f00f ff23 bl 1001ab34 +1000acee: 8aa3 ldrh r3, [r4, #20] +1000acf0: 4418 add r0, r3 +1000acf2: 82a0 strh r0, [r4, #20] +1000acf4: 2d00 cmp r5, #0 +1000acf6: d1d7 bne.n 1000aca8 +1000acf8: b041 add sp, #260 ; 0x104 +1000acfa: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1000acfe: 7adb ldrb r3, [r3, #11] +1000ad00: f003 06ff and.w r6, r3, #255 ; 0xff +1000ad04: 2b00 cmp r3, #0 +1000ad06: d1eb bne.n 1000ace0 +1000ad08: 4630 mov r0, r6 +1000ad0a: f003 fc81 bl 1000e610 +1000ad0e: 4635 mov r5, r6 +1000ad10: e7e6 b.n 1000ace0 +1000ad12: 7afb ldrb r3, [r7, #11] +1000ad14: 2b00 cmp r3, #0 +1000ad16: d058 beq.n 1000adca +1000ad18: 68a3 ldr r3, [r4, #8] +1000ad1a: 7a3a ldrb r2, [r7, #8] +1000ad1c: 4293 cmp r3, r2 +1000ad1e: d254 bcs.n 1000adca +1000ad20: fb08 f303 mul.w r3, r8, r3 +1000ad24: 687a ldr r2, [r7, #4] +1000ad26: f10d 0a3c add.w sl, sp, #60 ; 0x3c +1000ad2a: 18d5 adds r5, r2, r3 +1000ad2c: 5cd3 ldrb r3, [r2, r3] +1000ad2e: 2200 movs r2, #0 +1000ad30: 2b20 cmp r3, #32 +1000ad32: bfd4 ite le +1000ad34: 18eb addle r3, r5, r3 +1000ad36: f105 0320 addgt.w r3, r5, #32 +1000ad3a: 1c69 adds r1, r5, #1 +1000ad3c: 705a strb r2, [r3, #1] +1000ad3e: 4650 mov r0, sl +1000ad40: 2320 movs r3, #32 +1000ad42: 22c0 movs r2, #192 ; 0xc0 +1000ad44: f7ff fd97 bl 1000a876 +1000ad48: 366a adds r6, #106 ; 0x6a +1000ad4a: 8ae3 ldrh r3, [r4, #22] +1000ad4c: 4406 add r6, r0 +1000ad4e: 429e cmp r6, r3 +1000ad50: dcb5 bgt.n 1000acbe +1000ad52: 8aa3 ldrh r3, [r4, #20] +1000ad54: 6926 ldr r6, [r4, #16] +1000ad56: f8d4 b008 ldr.w fp, [r4, #8] +1000ad5a: 441e add r6, r3 +1000ad5c: f8d5 3036 ldr.w r3, [r5, #54] ; 0x36 +1000ad60: 930d str r3, [sp, #52] ; 0x34 +1000ad62: f8d5 002e ldr.w r0, [r5, #46] ; 0x2e +1000ad66: f003 f883 bl 1000de70 +1000ad6a: f8d5 2032 ldr.w r2, [r5, #50] ; 0x32 +1000ad6e: 9b0d ldr r3, [sp, #52] ; 0x34 +1000ad70: 920a str r2, [sp, #40] ; 0x28 +1000ad72: f8d5 102a ldr.w r1, [r5, #42] ; 0x2a +1000ad76: f001 0103 and.w r1, r1, #3 +1000ad7a: 9109 str r1, [sp, #36] ; 0x24 +1000ad7c: f9b5 2028 ldrsh.w r2, [r5, #40] ; 0x28 +1000ad80: f8cd a01c str.w sl, [sp, #28] +1000ad84: 9208 str r2, [sp, #32] +1000ad86: f895 2027 ldrb.w r2, [r5, #39] ; 0x27 +1000ad8a: 4649 mov r1, r9 +1000ad8c: 9206 str r2, [sp, #24] +1000ad8e: f895 2026 ldrb.w r2, [r5, #38] ; 0x26 +1000ad92: 9205 str r2, [sp, #20] +1000ad94: f895 2025 ldrb.w r2, [r5, #37] ; 0x25 +1000ad98: 9204 str r2, [sp, #16] +1000ad9a: f895 2024 ldrb.w r2, [r5, #36] ; 0x24 +1000ad9e: 9203 str r2, [sp, #12] +1000ada0: f895 2023 ldrb.w r2, [r5, #35] ; 0x23 +1000ada4: 9202 str r2, [sp, #8] +1000ada6: f895 2022 ldrb.w r2, [r5, #34] ; 0x22 +1000adaa: e88d 0005 stmia.w sp, {r0, r2} +1000adae: 465a mov r2, fp +1000adb0: 4630 mov r0, r6 +1000adb2: f00f febf bl 1001ab34 +1000adb6: 8aa3 ldrh r3, [r4, #20] +1000adb8: 4418 add r0, r3 +1000adba: 68a3 ldr r3, [r4, #8] +1000adbc: 82a0 strh r0, [r4, #20] +1000adbe: 3301 adds r3, #1 +1000adc0: 60a3 str r3, [r4, #8] +1000adc2: 7a3a ldrb r2, [r7, #8] +1000adc4: 4293 cmp r3, r2 +1000adc6: f4ff af74 bcc.w 1000acb2 +1000adca: f003 fb85 bl 1000e4d8 +1000adce: 6823 ldr r3, [r4, #0] +1000add0: f023 0380 bic.w r3, r3, #128 ; 0x80 +1000add4: 6023 str r3, [r4, #0] +1000add6: e78f b.n 1000acf8 +1000add8: 1004aa88 .word 0x1004aa88 +1000addc: 1000ac99 .word 0x1000ac99 +1000ade0: 1003fa14 .word 0x1003fa14 +1000ade4: 1003fa26 .word 0x1003fa26 + +1000ade8 : +1000ade8: b5f0 push {r4, r5, r6, r7, lr} +1000adea: 460d mov r5, r1 +1000adec: b087 sub sp, #28 +1000adee: 4606 mov r6, r0 +1000adf0: 6b44 ldr r4, [r0, #52] ; 0x34 +1000adf2: 213d movs r1, #61 ; 0x3d +1000adf4: 4628 mov r0, r5 +1000adf6: f00f fef3 bl 1001abe0 +1000adfa: b148 cbz r0, 1000ae10 +1000adfc: 4602 mov r2, r0 +1000adfe: 2300 movs r3, #0 +1000ae00: 4629 mov r1, r5 +1000ae02: f802 3b01 strb.w r3, [r2], #1 +1000ae06: 4630 mov r0, r6 +1000ae08: f001 f992 bl 1000c130 +1000ae0c: b007 add sp, #28 +1000ae0e: bdf0 pop {r4, r5, r6, r7, pc} +1000ae10: 4998 ldr r1, [pc, #608] ; (1000b074 ) +1000ae12: 4628 mov r0, r5 +1000ae14: f7ff fb89 bl 1000a52a +1000ae18: b150 cbz r0, 1000ae30 +1000ae1a: 8aa3 ldrh r3, [r4, #20] +1000ae1c: 6920 ldr r0, [r4, #16] +1000ae1e: 68a2 ldr r2, [r4, #8] +1000ae20: 4418 add r0, r3 +1000ae22: 4995 ldr r1, [pc, #596] ; (1000b078 ) +1000ae24: f00f fe86 bl 1001ab34 +1000ae28: 8aa3 ldrh r3, [r4, #20] +1000ae2a: 4418 add r0, r3 +1000ae2c: 82a0 strh r0, [r4, #20] +1000ae2e: e7ed b.n 1000ae0c +1000ae30: 4992 ldr r1, [pc, #584] ; (1000b07c ) +1000ae32: 4628 mov r0, r5 +1000ae34: f7ff fb79 bl 1000a52a +1000ae38: b150 cbz r0, 1000ae50 +1000ae3a: 8aa3 ldrh r3, [r4, #20] +1000ae3c: 6920 ldr r0, [r4, #16] +1000ae3e: 68e2 ldr r2, [r4, #12] +1000ae40: 4418 add r0, r3 +1000ae42: 498d ldr r1, [pc, #564] ; (1000b078 ) +1000ae44: f00f fe76 bl 1001ab34 +1000ae48: 8aa3 ldrh r3, [r4, #20] +1000ae4a: 4418 add r0, r3 +1000ae4c: 82a0 strh r0, [r4, #20] +1000ae4e: e7dd b.n 1000ae0c +1000ae50: 498b ldr r1, [pc, #556] ; (1000b080 ) +1000ae52: 4628 mov r0, r5 +1000ae54: f7ff fb69 bl 1000a52a +1000ae58: 2800 cmp r0, #0 +1000ae5a: f000 8170 beq.w 1000b13e +1000ae5e: 1cee adds r6, r5, #3 +1000ae60: 4988 ldr r1, [pc, #544] ; (1000b084 ) +1000ae62: 4630 mov r0, r6 +1000ae64: f7ff fb61 bl 1000a52a +1000ae68: 2800 cmp r0, #0 +1000ae6a: f000 8144 beq.w 1000b0f6 +1000ae6e: f105 0608 add.w r6, r5, #8 +1000ae72: 4985 ldr r1, [pc, #532] ; (1000b088 ) +1000ae74: 4630 mov r0, r6 +1000ae76: f7ff fb58 bl 1000a52a +1000ae7a: 2800 cmp r0, #0 +1000ae7c: d034 beq.n 1000aee8 +1000ae7e: 350c adds r5, #12 +1000ae80: 4982 ldr r1, [pc, #520] ; (1000b08c ) +1000ae82: 4628 mov r0, r5 +1000ae84: f7ff fb51 bl 1000a52a +1000ae88: b158 cbz r0, 1000aea2 +1000ae8a: 8aa3 ldrh r3, [r4, #20] +1000ae8c: 6920 ldr r0, [r4, #16] +1000ae8e: 4a80 ldr r2, [pc, #512] ; (1000b090 ) +1000ae90: 4418 add r0, r3 +1000ae92: 7812 ldrb r2, [r2, #0] +1000ae94: 497f ldr r1, [pc, #508] ; (1000b094 ) +1000ae96: f00f fe4d bl 1001ab34 +1000ae9a: 8aa3 ldrh r3, [r4, #20] +1000ae9c: 4418 add r0, r3 +1000ae9e: 82a0 strh r0, [r4, #20] +1000aea0: e7b4 b.n 1000ae0c +1000aea2: 497d ldr r1, [pc, #500] ; (1000b098 ) +1000aea4: 4628 mov r0, r5 +1000aea6: f7ff fb40 bl 1000a52a +1000aeaa: b158 cbz r0, 1000aec4 +1000aeac: 8aa3 ldrh r3, [r4, #20] +1000aeae: 6920 ldr r0, [r4, #16] +1000aeb0: 4a77 ldr r2, [pc, #476] ; (1000b090 ) +1000aeb2: 4418 add r0, r3 +1000aeb4: 6892 ldr r2, [r2, #8] +1000aeb6: 4977 ldr r1, [pc, #476] ; (1000b094 ) +1000aeb8: f00f fe3c bl 1001ab34 +1000aebc: 8aa3 ldrh r3, [r4, #20] +1000aebe: 4418 add r0, r3 +1000aec0: 82a0 strh r0, [r4, #20] +1000aec2: e7a3 b.n 1000ae0c +1000aec4: 4975 ldr r1, [pc, #468] ; (1000b09c ) +1000aec6: 4628 mov r0, r5 +1000aec8: f7ff fb2f bl 1000a52a +1000aecc: 2800 cmp r0, #0 +1000aece: d09d beq.n 1000ae0c +1000aed0: 8aa3 ldrh r3, [r4, #20] +1000aed2: 6920 ldr r0, [r4, #16] +1000aed4: 4a6e ldr r2, [pc, #440] ; (1000b090 ) +1000aed6: 4418 add r0, r3 +1000aed8: 7b12 ldrb r2, [r2, #12] +1000aeda: 496e ldr r1, [pc, #440] ; (1000b094 ) +1000aedc: f00f fe2a bl 1001ab34 +1000aee0: 8aa3 ldrh r3, [r4, #20] +1000aee2: 4418 add r0, r3 +1000aee4: 82a0 strh r0, [r4, #20] +1000aee6: e791 b.n 1000ae0c +1000aee8: 496d ldr r1, [pc, #436] ; (1000b0a0 ) +1000aeea: 4630 mov r0, r6 +1000aeec: f7ff fb1d bl 1000a52a +1000aef0: 2800 cmp r0, #0 +1000aef2: d046 beq.n 1000af82 +1000aef4: 350b adds r5, #11 +1000aef6: 4965 ldr r1, [pc, #404] ; (1000b08c ) +1000aef8: 4628 mov r0, r5 +1000aefa: f7ff fb16 bl 1000a52a +1000aefe: b158 cbz r0, 1000af18 +1000af00: 8aa3 ldrh r3, [r4, #20] +1000af02: 6920 ldr r0, [r4, #16] +1000af04: 4a67 ldr r2, [pc, #412] ; (1000b0a4 ) +1000af06: 4418 add r0, r3 +1000af08: 7812 ldrb r2, [r2, #0] +1000af0a: 4962 ldr r1, [pc, #392] ; (1000b094 ) +1000af0c: f00f fe12 bl 1001ab34 +1000af10: 8aa3 ldrh r3, [r4, #20] +1000af12: 4418 add r0, r3 +1000af14: 82a0 strh r0, [r4, #20] +1000af16: e779 b.n 1000ae0c +1000af18: 4963 ldr r1, [pc, #396] ; (1000b0a8 ) +1000af1a: 4628 mov r0, r5 +1000af1c: f7ff fb05 bl 1000a52a +1000af20: b158 cbz r0, 1000af3a +1000af22: 8aa3 ldrh r3, [r4, #20] +1000af24: 6920 ldr r0, [r4, #16] +1000af26: 4a5f ldr r2, [pc, #380] ; (1000b0a4 ) +1000af28: 4418 add r0, r3 +1000af2a: 68d2 ldr r2, [r2, #12] +1000af2c: 4959 ldr r1, [pc, #356] ; (1000b094 ) +1000af2e: f00f fe01 bl 1001ab34 +1000af32: 8aa3 ldrh r3, [r4, #20] +1000af34: 4418 add r0, r3 +1000af36: 82a0 strh r0, [r4, #20] +1000af38: e768 b.n 1000ae0c +1000af3a: 495c ldr r1, [pc, #368] ; (1000b0ac ) +1000af3c: 4628 mov r0, r5 +1000af3e: f7ff faf4 bl 1000a52a +1000af42: b158 cbz r0, 1000af5c +1000af44: 8aa3 ldrh r3, [r4, #20] +1000af46: 6920 ldr r0, [r4, #16] +1000af48: 4a56 ldr r2, [pc, #344] ; (1000b0a4 ) +1000af4a: 4418 add r0, r3 +1000af4c: 6912 ldr r2, [r2, #16] +1000af4e: 4951 ldr r1, [pc, #324] ; (1000b094 ) +1000af50: f00f fdf0 bl 1001ab34 +1000af54: 8aa3 ldrh r3, [r4, #20] +1000af56: 4418 add r0, r3 +1000af58: 82a0 strh r0, [r4, #20] +1000af5a: e757 b.n 1000ae0c +1000af5c: 494f ldr r1, [pc, #316] ; (1000b09c ) +1000af5e: 4628 mov r0, r5 +1000af60: f7ff fae3 bl 1000a52a +1000af64: 2800 cmp r0, #0 +1000af66: f43f af51 beq.w 1000ae0c +1000af6a: 8aa3 ldrh r3, [r4, #20] +1000af6c: 6920 ldr r0, [r4, #16] +1000af6e: 4a4d ldr r2, [pc, #308] ; (1000b0a4 ) +1000af70: 4418 add r0, r3 +1000af72: 6892 ldr r2, [r2, #8] +1000af74: 4947 ldr r1, [pc, #284] ; (1000b094 ) +1000af76: f00f fddd bl 1001ab34 +1000af7a: 8aa3 ldrh r3, [r4, #20] +1000af7c: 4418 add r0, r3 +1000af7e: 82a0 strh r0, [r4, #20] +1000af80: e744 b.n 1000ae0c +1000af82: 494b ldr r1, [pc, #300] ; (1000b0b0 ) +1000af84: 4630 mov r0, r6 +1000af86: f7ff fad0 bl 1000a52a +1000af8a: 2800 cmp r0, #0 +1000af8c: d035 beq.n 1000affa +1000af8e: 350d adds r5, #13 +1000af90: 493e ldr r1, [pc, #248] ; (1000b08c ) +1000af92: 4628 mov r0, r5 +1000af94: f7ff fac9 bl 1000a52a +1000af98: b158 cbz r0, 1000afb2 +1000af9a: 8aa3 ldrh r3, [r4, #20] +1000af9c: 6920 ldr r0, [r4, #16] +1000af9e: 4a45 ldr r2, [pc, #276] ; (1000b0b4 ) +1000afa0: 4418 add r0, r3 +1000afa2: 7812 ldrb r2, [r2, #0] +1000afa4: 493b ldr r1, [pc, #236] ; (1000b094 ) +1000afa6: f00f fdc5 bl 1001ab34 +1000afaa: 8aa3 ldrh r3, [r4, #20] +1000afac: 4418 add r0, r3 +1000afae: 82a0 strh r0, [r4, #20] +1000afb0: e72c b.n 1000ae0c +1000afb2: 4941 ldr r1, [pc, #260] ; (1000b0b8 ) +1000afb4: 4628 mov r0, r5 +1000afb6: f7ff fab8 bl 1000a52a +1000afba: b158 cbz r0, 1000afd4 +1000afbc: 8aa3 ldrh r3, [r4, #20] +1000afbe: 6920 ldr r0, [r4, #16] +1000afc0: 4a3c ldr r2, [pc, #240] ; (1000b0b4 ) +1000afc2: 4418 add r0, r3 +1000afc4: 7a52 ldrb r2, [r2, #9] +1000afc6: 4933 ldr r1, [pc, #204] ; (1000b094 ) +1000afc8: f00f fdb4 bl 1001ab34 +1000afcc: 8aa3 ldrh r3, [r4, #20] +1000afce: 4418 add r0, r3 +1000afd0: 82a0 strh r0, [r4, #20] +1000afd2: e71b b.n 1000ae0c +1000afd4: 4939 ldr r1, [pc, #228] ; (1000b0bc ) +1000afd6: 4628 mov r0, r5 +1000afd8: f7ff faa7 bl 1000a52a +1000afdc: 2800 cmp r0, #0 +1000afde: f43f af15 beq.w 1000ae0c +1000afe2: 8aa3 ldrh r3, [r4, #20] +1000afe4: 6920 ldr r0, [r4, #16] +1000afe6: 4a33 ldr r2, [pc, #204] ; (1000b0b4 ) +1000afe8: 4418 add r0, r3 +1000afea: 7a12 ldrb r2, [r2, #8] +1000afec: 4929 ldr r1, [pc, #164] ; (1000b094 ) +1000afee: f00f fda1 bl 1001ab34 +1000aff2: 8aa3 ldrh r3, [r4, #20] +1000aff4: 4418 add r0, r3 +1000aff6: 82a0 strh r0, [r4, #20] +1000aff8: e708 b.n 1000ae0c +1000affa: 4931 ldr r1, [pc, #196] ; (1000b0c0 ) +1000affc: 4630 mov r0, r6 +1000affe: f7ff fa94 bl 1000a52a +1000b002: 2800 cmp r0, #0 +1000b004: f43f af02 beq.w 1000ae0c +1000b008: 350e adds r5, #14 +1000b00a: 4920 ldr r1, [pc, #128] ; (1000b08c ) +1000b00c: 4628 mov r0, r5 +1000b00e: f7ff fa8c bl 1000a52a +1000b012: b158 cbz r0, 1000b02c +1000b014: 8aa3 ldrh r3, [r4, #20] +1000b016: 6920 ldr r0, [r4, #16] +1000b018: 4a2a ldr r2, [pc, #168] ; (1000b0c4 ) +1000b01a: 4418 add r0, r3 +1000b01c: 7812 ldrb r2, [r2, #0] +1000b01e: 491d ldr r1, [pc, #116] ; (1000b094 ) +1000b020: f00f fd88 bl 1001ab34 +1000b024: 8aa3 ldrh r3, [r4, #20] +1000b026: 4418 add r0, r3 +1000b028: 82a0 strh r0, [r4, #20] +1000b02a: e6ef b.n 1000ae0c +1000b02c: 4926 ldr r1, [pc, #152] ; (1000b0c8 ) +1000b02e: 4628 mov r0, r5 +1000b030: f7ff fa7b bl 1000a52a +1000b034: b158 cbz r0, 1000b04e +1000b036: 8aa3 ldrh r3, [r4, #20] +1000b038: 6920 ldr r0, [r4, #16] +1000b03a: 4a22 ldr r2, [pc, #136] ; (1000b0c4 ) +1000b03c: 4418 add r0, r3 +1000b03e: 7852 ldrb r2, [r2, #1] +1000b040: 4914 ldr r1, [pc, #80] ; (1000b094 ) +1000b042: f00f fd77 bl 1001ab34 +1000b046: 8aa3 ldrh r3, [r4, #20] +1000b048: 4418 add r0, r3 +1000b04a: 82a0 strh r0, [r4, #20] +1000b04c: e6de b.n 1000ae0c +1000b04e: 491f ldr r1, [pc, #124] ; (1000b0cc ) +1000b050: 4628 mov r0, r5 +1000b052: f7ff fa6a bl 1000a52a +1000b056: 2800 cmp r0, #0 +1000b058: d03a beq.n 1000b0d0 +1000b05a: 8aa3 ldrh r3, [r4, #20] +1000b05c: 6920 ldr r0, [r4, #16] +1000b05e: 4a19 ldr r2, [pc, #100] ; (1000b0c4 ) +1000b060: 4418 add r0, r3 +1000b062: 7892 ldrb r2, [r2, #2] +1000b064: 490b ldr r1, [pc, #44] ; (1000b094 ) +1000b066: f00f fd65 bl 1001ab34 +1000b06a: 8aa3 ldrh r3, [r4, #20] +1000b06c: 4418 add r0, r3 +1000b06e: 82a0 strh r0, [r4, #20] +1000b070: e6cc b.n 1000ae0c +1000b072: bf00 nop +1000b074: 1003f8b4 .word 0x1003f8b4 +1000b078: 1003f7c6 .word 0x1003f7c6 +1000b07c: 1003f7cd .word 0x1003f7cd +1000b080: 1003f7d2 .word 0x1003f7d2 +1000b084: 1003f7d6 .word 0x1003f7d6 +1000b088: 1003f7dc .word 0x1003f7dc +1000b08c: 1003f7e1 .word 0x1003f7e1 +1000b090: 1004a60c .word 0x1004a60c +1000b094: 10040576 .word 0x10040576 +1000b098: 1003f7e6 .word 0x1003f7e6 +1000b09c: 1003f7ef .word 0x1003f7ef +1000b0a0: 1003f7fa .word 0x1003f7fa +1000b0a4: 1004a5f0 .word 0x1004a5f0 +1000b0a8: 1003f7fe .word 0x1003f7fe +1000b0ac: 1003f802 .word 0x1003f802 +1000b0b0: 1003f806 .word 0x1003f806 +1000b0b4: 1004a61c .word 0x1004a61c +1000b0b8: 1003f80c .word 0x1003f80c +1000b0bc: 1003f811 .word 0x1003f811 +1000b0c0: 1003f81b .word 0x1003f81b +1000b0c4: 1004a5e4 .word 0x1004a5e4 +1000b0c8: 1003f822 .word 0x1003f822 +1000b0cc: 1003f826 .word 0x1003f826 +1000b0d0: 499a ldr r1, [pc, #616] ; (1000b33c ) +1000b0d2: 4628 mov r0, r5 +1000b0d4: f7ff fa29 bl 1000a52a +1000b0d8: 2800 cmp r0, #0 +1000b0da: f43f ae97 beq.w 1000ae0c +1000b0de: 8aa3 ldrh r3, [r4, #20] +1000b0e0: 6920 ldr r0, [r4, #16] +1000b0e2: 4a97 ldr r2, [pc, #604] ; (1000b340 ) +1000b0e4: 4418 add r0, r3 +1000b0e6: 78d2 ldrb r2, [r2, #3] +1000b0e8: 4996 ldr r1, [pc, #600] ; (1000b344 ) +1000b0ea: f00f fd23 bl 1001ab34 +1000b0ee: 8aa3 ldrh r3, [r4, #20] +1000b0f0: 4418 add r0, r3 +1000b0f2: 82a0 strh r0, [r4, #20] +1000b0f4: e68a b.n 1000ae0c +1000b0f6: 4994 ldr r1, [pc, #592] ; (1000b348 ) +1000b0f8: 4630 mov r0, r6 +1000b0fa: f7ff fa16 bl 1000a52a +1000b0fe: b158 cbz r0, 1000b118 +1000b100: 8aa3 ldrh r3, [r4, #20] +1000b102: 6920 ldr r0, [r4, #16] +1000b104: 4a91 ldr r2, [pc, #580] ; (1000b34c ) +1000b106: 4418 add r0, r3 +1000b108: 7d12 ldrb r2, [r2, #20] +1000b10a: 498e ldr r1, [pc, #568] ; (1000b344 ) +1000b10c: f00f fd12 bl 1001ab34 +1000b110: 8aa3 ldrh r3, [r4, #20] +1000b112: 4418 add r0, r3 +1000b114: 82a0 strh r0, [r4, #20] +1000b116: e679 b.n 1000ae0c +1000b118: 498d ldr r1, [pc, #564] ; (1000b350 ) +1000b11a: 4630 mov r0, r6 +1000b11c: f7ff fa05 bl 1000a52a +1000b120: 2800 cmp r0, #0 +1000b122: f43f ae73 beq.w 1000ae0c +1000b126: 8aa3 ldrh r3, [r4, #20] +1000b128: 6920 ldr r0, [r4, #16] +1000b12a: 4a88 ldr r2, [pc, #544] ; (1000b34c ) +1000b12c: 4418 add r0, r3 +1000b12e: 6892 ldr r2, [r2, #8] +1000b130: 4984 ldr r1, [pc, #528] ; (1000b344 ) +1000b132: f00f fcff bl 1001ab34 +1000b136: 8aa3 ldrh r3, [r4, #20] +1000b138: 4418 add r0, r3 +1000b13a: 82a0 strh r0, [r4, #20] +1000b13c: e666 b.n 1000ae0c +1000b13e: 4985 ldr r1, [pc, #532] ; (1000b354 ) +1000b140: 4628 mov r0, r5 +1000b142: f7ff f9f2 bl 1000a52a +1000b146: b330 cbz r0, 1000b196 +1000b148: 3504 adds r5, #4 +1000b14a: 4983 ldr r1, [pc, #524] ; (1000b358 ) +1000b14c: 4628 mov r0, r5 +1000b14e: f7ff f9ec bl 1000a52a +1000b152: b118 cbz r0, 1000b15c +1000b154: 4630 mov r0, r6 +1000b156: f7ff fd9f bl 1000ac98 +1000b15a: e657 b.n 1000ae0c +1000b15c: 68a3 ldr r3, [r4, #8] +1000b15e: 4628 mov r0, r5 +1000b160: f023 0303 bic.w r3, r3, #3 +1000b164: 60a3 str r3, [r4, #8] +1000b166: 497d ldr r1, [pc, #500] ; (1000b35c ) +1000b168: f7ff f9df bl 1000a52a +1000b16c: 8aa3 ldrh r3, [r4, #20] +1000b16e: 6925 ldr r5, [r4, #16] +1000b170: b160 cbz r0, 1000b18c +1000b172: 68a2 ldr r2, [r4, #8] +1000b174: 18e8 adds r0, r5, r3 +1000b176: 6812 ldr r2, [r2, #0] +1000b178: 4979 ldr r1, [pc, #484] ; (1000b360 ) +1000b17a: f00f fcdb bl 1001ab34 +1000b17e: 8aa3 ldrh r3, [r4, #20] +1000b180: 4418 add r0, r3 +1000b182: 82a0 strh r0, [r4, #20] +1000b184: 68a3 ldr r3, [r4, #8] +1000b186: 3304 adds r3, #4 +1000b188: 60a3 str r3, [r4, #8] +1000b18a: e63f b.n 1000ae0c +1000b18c: 1c5a adds r2, r3, #1 +1000b18e: 82a2 strh r2, [r4, #20] +1000b190: 223f movs r2, #63 ; 0x3f +1000b192: 54ea strb r2, [r5, r3] +1000b194: e7f6 b.n 1000b184 +1000b196: 4973 ldr r1, [pc, #460] ; (1000b364 ) +1000b198: 4628 mov r0, r5 +1000b19a: f7ff f9c6 bl 1000a52a +1000b19e: 2800 cmp r0, #0 +1000b1a0: f000 819a beq.w 1000b4d8 +1000b1a4: 1d2e adds r6, r5, #4 +1000b1a6: 4970 ldr r1, [pc, #448] ; (1000b368 ) +1000b1a8: 4630 mov r0, r6 +1000b1aa: f7ff f9be bl 1000a52a +1000b1ae: b160 cbz r0, 1000b1ca +1000b1b0: 6923 ldr r3, [r4, #16] +1000b1b2: 8aa5 ldrh r5, [r4, #20] +1000b1b4: 441d add r5, r3 +1000b1b6: f002 fe17 bl 1000dde8 +1000b1ba: 4601 mov r1, r0 +1000b1bc: 4628 mov r0, r5 +1000b1be: f7ff f9a9 bl 1000a514 +1000b1c2: 8aa3 ldrh r3, [r4, #20] +1000b1c4: 4418 add r0, r3 +1000b1c6: 82a0 strh r0, [r4, #20] +1000b1c8: e620 b.n 1000ae0c +1000b1ca: 4968 ldr r1, [pc, #416] ; (1000b36c ) +1000b1cc: 4630 mov r0, r6 +1000b1ce: f7ff f9ac bl 1000a52a +1000b1d2: b168 cbz r0, 1000b1f0 +1000b1d4: 6923 ldr r3, [r4, #16] +1000b1d6: 8aa5 ldrh r5, [r4, #20] +1000b1d8: 441d add r5, r3 +1000b1da: f00f fc57 bl 1001aa8c +1000b1de: 4964 ldr r1, [pc, #400] ; (1000b370 ) +1000b1e0: 4602 mov r2, r0 +1000b1e2: 4628 mov r0, r5 +1000b1e4: f00f fca6 bl 1001ab34 +1000b1e8: 8aa3 ldrh r3, [r4, #20] +1000b1ea: 4418 add r0, r3 +1000b1ec: 82a0 strh r0, [r4, #20] +1000b1ee: e60d b.n 1000ae0c +1000b1f0: 4960 ldr r1, [pc, #384] ; (1000b374 ) +1000b1f2: 4630 mov r0, r6 +1000b1f4: f7ff f999 bl 1000a52a +1000b1f8: b188 cbz r0, 1000b21e +1000b1fa: 495f ldr r1, [pc, #380] ; (1000b378 ) +1000b1fc: 8aa0 ldrh r0, [r4, #20] +1000b1fe: 794b ldrb r3, [r1, #5] +1000b200: 790a ldrb r2, [r1, #4] +1000b202: 021b lsls r3, r3, #8 +1000b204: ea43 4302 orr.w r3, r3, r2, lsl #16 +1000b208: 6925 ldr r5, [r4, #16] +1000b20a: 798a ldrb r2, [r1, #6] +1000b20c: 4428 add r0, r5 +1000b20e: 431a orrs r2, r3 +1000b210: 4957 ldr r1, [pc, #348] ; (1000b370 ) +1000b212: f00f fc8f bl 1001ab34 +1000b216: 8aa3 ldrh r3, [r4, #20] +1000b218: 4418 add r0, r3 +1000b21a: 82a0 strh r0, [r4, #20] +1000b21c: e5f6 b.n 1000ae0c +1000b21e: 4957 ldr r1, [pc, #348] ; (1000b37c ) +1000b220: 4630 mov r0, r6 +1000b222: f7ff f982 bl 1000a52a +1000b226: b170 cbz r0, 1000b246 +1000b228: 6923 ldr r3, [r4, #16] +1000b22a: 8aa5 ldrh r5, [r4, #20] +1000b22c: 4852 ldr r0, [pc, #328] ; (1000b378 ) +1000b22e: 441d add r5, r3 +1000b230: f00c fdf6 bl 10017e20 +1000b234: 4952 ldr r1, [pc, #328] ; (1000b380 ) +1000b236: 4602 mov r2, r0 +1000b238: 4628 mov r0, r5 +1000b23a: f00f fc7b bl 1001ab34 +1000b23e: 8aa3 ldrh r3, [r4, #20] +1000b240: 4418 add r0, r3 +1000b242: 82a0 strh r0, [r4, #20] +1000b244: e5e2 b.n 1000ae0c +1000b246: 494f ldr r1, [pc, #316] ; (1000b384 ) +1000b248: 4630 mov r0, r6 +1000b24a: f7ff f96e bl 1000a52a +1000b24e: b148 cbz r0, 1000b264 +1000b250: 8aa3 ldrh r3, [r4, #20] +1000b252: 6920 ldr r0, [r4, #16] +1000b254: 494c ldr r1, [pc, #304] ; (1000b388 ) +1000b256: 4418 add r0, r3 +1000b258: f7ff f95c bl 1000a514 +1000b25c: 8aa3 ldrh r3, [r4, #20] +1000b25e: 4418 add r0, r3 +1000b260: 82a0 strh r0, [r4, #20] +1000b262: e5d3 b.n 1000ae0c +1000b264: 4949 ldr r1, [pc, #292] ; (1000b38c ) +1000b266: 4630 mov r0, r6 +1000b268: f7ff f95f bl 1000a52a +1000b26c: b148 cbz r0, 1000b282 +1000b26e: 8aa3 ldrh r3, [r4, #20] +1000b270: 6920 ldr r0, [r4, #16] +1000b272: 4947 ldr r1, [pc, #284] ; (1000b390 ) +1000b274: 4418 add r0, r3 +1000b276: f7ff f94d bl 1000a514 +1000b27a: 8aa3 ldrh r3, [r4, #20] +1000b27c: 4418 add r0, r3 +1000b27e: 82a0 strh r0, [r4, #20] +1000b280: e5c4 b.n 1000ae0c +1000b282: 4944 ldr r1, [pc, #272] ; (1000b394 ) +1000b284: 4630 mov r0, r6 +1000b286: f7ff f950 bl 1000a52a +1000b28a: b148 cbz r0, 1000b2a0 +1000b28c: 8aa3 ldrh r3, [r4, #20] +1000b28e: 6920 ldr r0, [r4, #16] +1000b290: 4941 ldr r1, [pc, #260] ; (1000b398 ) +1000b292: 4418 add r0, r3 +1000b294: f7ff f93e bl 1000a514 +1000b298: 8aa3 ldrh r3, [r4, #20] +1000b29a: 4418 add r0, r3 +1000b29c: 82a0 strh r0, [r4, #20] +1000b29e: e5b5 b.n 1000ae0c +1000b2a0: 493e ldr r1, [pc, #248] ; (1000b39c ) +1000b2a2: 4630 mov r0, r6 +1000b2a4: f7ff f941 bl 1000a52a +1000b2a8: b168 cbz r0, 1000b2c6 +1000b2aa: 6923 ldr r3, [r4, #16] +1000b2ac: 8aa5 ldrh r5, [r4, #20] +1000b2ae: 441d add r5, r3 +1000b2b0: f00a f804 bl 100152bc +1000b2b4: 4932 ldr r1, [pc, #200] ; (1000b380 ) +1000b2b6: 4602 mov r2, r0 +1000b2b8: 4628 mov r0, r5 +1000b2ba: f00f fc3b bl 1001ab34 +1000b2be: 8aa3 ldrh r3, [r4, #20] +1000b2c0: 4418 add r0, r3 +1000b2c2: 82a0 strh r0, [r4, #20] +1000b2c4: e5a2 b.n 1000ae0c +1000b2c6: 4936 ldr r1, [pc, #216] ; (1000b3a0 ) +1000b2c8: 4630 mov r0, r6 +1000b2ca: f7ff f92e bl 1000a52a +1000b2ce: b168 cbz r0, 1000b2ec +1000b2d0: 6923 ldr r3, [r4, #16] +1000b2d2: 8aa5 ldrh r5, [r4, #20] +1000b2d4: 441d add r5, r3 +1000b2d6: f009 fff7 bl 100152c8 +1000b2da: 4929 ldr r1, [pc, #164] ; (1000b380 ) +1000b2dc: 4602 mov r2, r0 +1000b2de: 4628 mov r0, r5 +1000b2e0: f00f fc28 bl 1001ab34 +1000b2e4: 8aa3 ldrh r3, [r4, #20] +1000b2e6: 4418 add r0, r3 +1000b2e8: 82a0 strh r0, [r4, #20] +1000b2ea: e58f b.n 1000ae0c +1000b2ec: 492d ldr r1, [pc, #180] ; (1000b3a4 ) +1000b2ee: 4630 mov r0, r6 +1000b2f0: f7ff f91b bl 1000a52a +1000b2f4: b168 cbz r0, 1000b312 +1000b2f6: 6923 ldr r3, [r4, #16] +1000b2f8: 8aa5 ldrh r5, [r4, #20] +1000b2fa: 441d add r5, r3 +1000b2fc: f00c fb62 bl 100179c4 +1000b300: 491f ldr r1, [pc, #124] ; (1000b380 ) +1000b302: 4602 mov r2, r0 +1000b304: 4628 mov r0, r5 +1000b306: f00f fc15 bl 1001ab34 +1000b30a: 8aa3 ldrh r3, [r4, #20] +1000b30c: 4418 add r0, r3 +1000b30e: 82a0 strh r0, [r4, #20] +1000b310: e57c b.n 1000ae0c +1000b312: 4925 ldr r1, [pc, #148] ; (1000b3a8 ) +1000b314: 4630 mov r0, r6 +1000b316: f7ff f908 bl 1000a52a +1000b31a: 2800 cmp r0, #0 +1000b31c: d046 beq.n 1000b3ac +1000b31e: 6923 ldr r3, [r4, #16] +1000b320: 8aa5 ldrh r5, [r4, #20] +1000b322: 441d add r5, r3 +1000b324: f00a ff86 bl 10016234 +1000b328: 4915 ldr r1, [pc, #84] ; (1000b380 ) +1000b32a: 4602 mov r2, r0 +1000b32c: 4628 mov r0, r5 +1000b32e: f00f fc01 bl 1001ab34 +1000b332: 8aa3 ldrh r3, [r4, #20] +1000b334: 4418 add r0, r3 +1000b336: 82a0 strh r0, [r4, #20] +1000b338: e568 b.n 1000ae0c +1000b33a: bf00 nop +1000b33c: 1003ffde .word 0x1003ffde +1000b340: 1004a5e4 .word 0x1004a5e4 +1000b344: 10040576 .word 0x10040576 +1000b348: 1003f82a .word 0x1003f82a +1000b34c: 1004a628 .word 0x1004a628 +1000b350: 1003f833 .word 0x1003f833 +1000b354: 1003f83c .word 0x1003f83c +1000b358: 1003ff07 .word 0x1003ff07 +1000b35c: 1003fac0 .word 0x1003fac0 +1000b360: 1003f7c6 .word 0x1003f7c6 +1000b364: 1003f841 .word 0x1003f841 +1000b368: 1003f846 .word 0x1003f846 +1000b36c: 1003f84a .word 0x1003f84a +1000b370: 1003f7bb .word 0x1003f7bb +1000b374: 1003f84e .word 0x1003f84e +1000b378: 1004b58c .word 0x1004b58c +1000b37c: 1003f852 .word 0x1003f852 +1000b380: 1003f858 .word 0x1003f858 +1000b384: 1003f85b .word 0x1003f85b +1000b388: 1003f862 .word 0x1003f862 +1000b38c: 1003f868 .word 0x1003f868 +1000b390: 1003f86f .word 0x1003f86f +1000b394: 1003f875 .word 0x1003f875 +1000b398: 1003f87c .word 0x1003f87c +1000b39c: 1003f882 .word 0x1003f882 +1000b3a0: 1003f887 .word 0x1003f887 +1000b3a4: 1003f88d .word 0x1003f88d +1000b3a8: 1003f895 .word 0x1003f895 +1000b3ac: 499c ldr r1, [pc, #624] ; (1000b620 ) +1000b3ae: 4630 mov r0, r6 +1000b3b0: f7ff f8bb bl 1000a52a +1000b3b4: b188 cbz r0, 1000b3da +1000b3b6: 4b9b ldr r3, [pc, #620] ; (1000b624 ) +1000b3b8: 781b ldrb r3, [r3, #0] +1000b3ba: 2b00 cmp r3, #0 +1000b3bc: f43f ad26 beq.w 1000ae0c +1000b3c0: 4a99 ldr r2, [pc, #612] ; (1000b628 ) +1000b3c2: 8aa0 ldrh r0, [r4, #20] +1000b3c4: 6925 ldr r5, [r4, #16] +1000b3c6: 6813 ldr r3, [r2, #0] +1000b3c8: 4998 ldr r1, [pc, #608] ; (1000b62c ) +1000b3ca: 6852 ldr r2, [r2, #4] +1000b3cc: 4428 add r0, r5 +1000b3ce: f00f fbb1 bl 1001ab34 +1000b3d2: 8aa3 ldrh r3, [r4, #20] +1000b3d4: 4418 add r0, r3 +1000b3d6: 82a0 strh r0, [r4, #20] +1000b3d8: e518 b.n 1000ae0c +1000b3da: 4995 ldr r1, [pc, #596] ; (1000b630 ) +1000b3dc: 4630 mov r0, r6 +1000b3de: f7ff f8a4 bl 1000a52a +1000b3e2: b168 cbz r0, 1000b400 +1000b3e4: 6923 ldr r3, [r4, #16] +1000b3e6: 8aa5 ldrh r5, [r4, #20] +1000b3e8: 441d add r5, r3 +1000b3ea: 4b92 ldr r3, [pc, #584] ; (1000b634 ) +1000b3ec: 4798 blx r3 +1000b3ee: 4992 ldr r1, [pc, #584] ; (1000b638 ) +1000b3f0: 4602 mov r2, r0 +1000b3f2: 4628 mov r0, r5 +1000b3f4: f00f fb9e bl 1001ab34 +1000b3f8: 8aa3 ldrh r3, [r4, #20] +1000b3fa: 4418 add r0, r3 +1000b3fc: 82a0 strh r0, [r4, #20] +1000b3fe: e505 b.n 1000ae0c +1000b400: 498e ldr r1, [pc, #568] ; (1000b63c ) +1000b402: 4630 mov r0, r6 +1000b404: f7ff f891 bl 1000a52a +1000b408: b158 cbz r0, 1000b422 +1000b40a: 8aa2 ldrh r2, [r4, #20] +1000b40c: 6921 ldr r1, [r4, #16] +1000b40e: 1c53 adds r3, r2, #1 +1000b410: 82a3 strh r3, [r4, #20] +1000b412: 4b8b ldr r3, [pc, #556] ; (1000b640 ) +1000b414: 781b ldrb r3, [r3, #0] +1000b416: f003 0301 and.w r3, r3, #1 +1000b41a: f1c3 0331 rsb r3, r3, #49 ; 0x31 +1000b41e: 548b strb r3, [r1, r2] +1000b420: e4f4 b.n 1000ae0c +1000b422: 4988 ldr r1, [pc, #544] ; (1000b644 ) +1000b424: 4630 mov r0, r6 +1000b426: f7ff f880 bl 1000a52a +1000b42a: b128 cbz r0, 1000b438 +1000b42c: 22c8 movs r2, #200 ; 0xc8 +1000b42e: 2100 movs r1, #0 +1000b430: 4885 ldr r0, [pc, #532] ; (1000b648 ) +1000b432: f7fe fff7 bl 1000a424 +1000b436: e4e9 b.n 1000ae0c +1000b438: 4984 ldr r1, [pc, #528] ; (1000b64c ) +1000b43a: 4630 mov r0, r6 +1000b43c: f7ff f875 bl 1000a52a +1000b440: b180 cbz r0, 1000b464 +1000b442: 6923 ldr r3, [r4, #16] +1000b444: 8aa6 ldrh r6, [r4, #20] +1000b446: 1de8 adds r0, r5, #7 +1000b448: 441e add r6, r3 +1000b44a: f7ff f914 bl 1000a676 +1000b44e: f020 0003 bic.w r0, r0, #3 +1000b452: 6802 ldr r2, [r0, #0] +1000b454: 497e ldr r1, [pc, #504] ; (1000b650 ) +1000b456: 4630 mov r0, r6 +1000b458: f00f fb6c bl 1001ab34 +1000b45c: 8aa3 ldrh r3, [r4, #20] +1000b45e: 4418 add r0, r3 +1000b460: 82a0 strh r0, [r4, #20] +1000b462: e4d3 b.n 1000ae0c +1000b464: 497b ldr r1, [pc, #492] ; (1000b654 ) +1000b466: 4630 mov r0, r6 +1000b468: f7ff f85f bl 1000a52a +1000b46c: b188 cbz r0, 1000b492 +1000b46e: 6923 ldr r3, [r4, #16] +1000b470: 8aa6 ldrh r6, [r4, #20] +1000b472: f105 0008 add.w r0, r5, #8 +1000b476: 441e add r6, r3 +1000b478: f7ff f8fd bl 1000a676 +1000b47c: f020 0003 bic.w r0, r0, #3 +1000b480: 6802 ldr r2, [r0, #0] +1000b482: 4975 ldr r1, [pc, #468] ; (1000b658 ) +1000b484: 4630 mov r0, r6 +1000b486: f00f fb55 bl 1001ab34 +1000b48a: 8aa3 ldrh r3, [r4, #20] +1000b48c: 4418 add r0, r3 +1000b48e: 82a0 strh r0, [r4, #20] +1000b490: e4bc b.n 1000ae0c +1000b492: 4630 mov r0, r6 +1000b494: 4971 ldr r1, [pc, #452] ; (1000b65c ) +1000b496: f7ff f848 bl 1000a52a +1000b49a: 8aa5 ldrh r5, [r4, #20] +1000b49c: 6926 ldr r6, [r4, #16] +1000b49e: b1b0 cbz r0, 1000b4ce +1000b4a0: 4b6f ldr r3, [pc, #444] ; (1000b660 ) +1000b4a2: 681b ldr r3, [r3, #0] +1000b4a4: b10b cbz r3, 1000b4aa +1000b4a6: 685b ldr r3, [r3, #4] +1000b4a8: 9305 str r3, [sp, #20] +1000b4aa: f89d 1017 ldrb.w r1, [sp, #23] +1000b4ae: f89d 3015 ldrb.w r3, [sp, #21] +1000b4b2: 9101 str r1, [sp, #4] +1000b4b4: f89d 1016 ldrb.w r1, [sp, #22] +1000b4b8: f89d 2014 ldrb.w r2, [sp, #20] +1000b4bc: 9100 str r1, [sp, #0] +1000b4be: 1970 adds r0, r6, r5 +1000b4c0: 4968 ldr r1, [pc, #416] ; (1000b664 ) +1000b4c2: f00f fb37 bl 1001ab34 +1000b4c6: 8aa3 ldrh r3, [r4, #20] +1000b4c8: 4418 add r0, r3 +1000b4ca: 82a0 strh r0, [r4, #20] +1000b4cc: e49e b.n 1000ae0c +1000b4ce: 1c6b adds r3, r5, #1 +1000b4d0: 82a3 strh r3, [r4, #20] +1000b4d2: 233f movs r3, #63 ; 0x3f +1000b4d4: 5573 strb r3, [r6, r5] +1000b4d6: e499 b.n 1000ae0c +1000b4d8: 4963 ldr r1, [pc, #396] ; (1000b668 ) +1000b4da: 4628 mov r0, r5 +1000b4dc: f7ff f825 bl 1000a52a +1000b4e0: 2800 cmp r0, #0 +1000b4e2: f000 8089 beq.w 1000b5f8 +1000b4e6: 1d2e adds r6, r5, #4 +1000b4e8: 4960 ldr r1, [pc, #384] ; (1000b66c ) +1000b4ea: 4630 mov r0, r6 +1000b4ec: f7ff f81d bl 1000a52a +1000b4f0: 2800 cmp r0, #0 +1000b4f2: d048 beq.n 1000b586 +1000b4f4: 3508 adds r5, #8 +1000b4f6: 495e ldr r1, [pc, #376] ; (1000b670 ) +1000b4f8: 4628 mov r0, r5 +1000b4fa: f7ff f816 bl 1000a52a +1000b4fe: b158 cbz r0, 1000b518 +1000b500: 8aa3 ldrh r3, [r4, #20] +1000b502: 6920 ldr r0, [r4, #16] +1000b504: 4a5b ldr r2, [pc, #364] ; (1000b674 ) +1000b506: 4418 add r0, r3 +1000b508: 8892 ldrh r2, [r2, #4] +1000b50a: 494b ldr r1, [pc, #300] ; (1000b638 ) +1000b50c: f00f fb12 bl 1001ab34 +1000b510: 8aa3 ldrh r3, [r4, #20] +1000b512: 4418 add r0, r3 +1000b514: 82a0 strh r0, [r4, #20] +1000b516: e479 b.n 1000ae0c +1000b518: 4957 ldr r1, [pc, #348] ; (1000b678 ) +1000b51a: 4628 mov r0, r5 +1000b51c: f7ff f805 bl 1000a52a +1000b520: b158 cbz r0, 1000b53a +1000b522: 8aa3 ldrh r3, [r4, #20] +1000b524: 6920 ldr r0, [r4, #16] +1000b526: 4a53 ldr r2, [pc, #332] ; (1000b674 ) +1000b528: 4418 add r0, r3 +1000b52a: 88d2 ldrh r2, [r2, #6] +1000b52c: 4942 ldr r1, [pc, #264] ; (1000b638 ) +1000b52e: f00f fb01 bl 1001ab34 +1000b532: 8aa3 ldrh r3, [r4, #20] +1000b534: 4418 add r0, r3 +1000b536: 82a0 strh r0, [r4, #20] +1000b538: e468 b.n 1000ae0c +1000b53a: 4950 ldr r1, [pc, #320] ; (1000b67c ) +1000b53c: 4628 mov r0, r5 +1000b53e: f7fe fff4 bl 1000a52a +1000b542: b158 cbz r0, 1000b55c +1000b544: 8aa3 ldrh r3, [r4, #20] +1000b546: 6920 ldr r0, [r4, #16] +1000b548: 4a4a ldr r2, [pc, #296] ; (1000b674 ) +1000b54a: 4418 add r0, r3 +1000b54c: 8912 ldrh r2, [r2, #8] +1000b54e: 493a ldr r1, [pc, #232] ; (1000b638 ) +1000b550: f00f faf0 bl 1001ab34 +1000b554: 8aa3 ldrh r3, [r4, #20] +1000b556: 4418 add r0, r3 +1000b558: 82a0 strh r0, [r4, #20] +1000b55a: e457 b.n 1000ae0c +1000b55c: 4948 ldr r1, [pc, #288] ; (1000b680 ) +1000b55e: 4628 mov r0, r5 +1000b560: f7fe ffe3 bl 1000a52a +1000b564: 8aa3 ldrh r3, [r4, #20] +1000b566: 6922 ldr r2, [r4, #16] +1000b568: 1c59 adds r1, r3, #1 +1000b56a: 82a1 strh r1, [r4, #20] +1000b56c: b140 cbz r0, 1000b580 +1000b56e: 4941 ldr r1, [pc, #260] ; (1000b674 ) +1000b570: 7809 ldrb r1, [r1, #0] +1000b572: f011 0f08 tst.w r1, #8 +1000b576: bf14 ite ne +1000b578: 2131 movne r1, #49 ; 0x31 +1000b57a: 2130 moveq r1, #48 ; 0x30 +1000b57c: 54d1 strb r1, [r2, r3] +1000b57e: e445 b.n 1000ae0c +1000b580: 213f movs r1, #63 ; 0x3f +1000b582: 54d1 strb r1, [r2, r3] +1000b584: e442 b.n 1000ae0c +1000b586: 493f ldr r1, [pc, #252] ; (1000b684 ) +1000b588: 4630 mov r0, r6 +1000b58a: f7fe ffce bl 1000a52a +1000b58e: b160 cbz r0, 1000b5aa +1000b590: 8aa3 ldrh r3, [r4, #20] +1000b592: 6922 ldr r2, [r4, #16] +1000b594: 1c59 adds r1, r3, #1 +1000b596: 82a1 strh r1, [r4, #20] +1000b598: 4936 ldr r1, [pc, #216] ; (1000b674 ) +1000b59a: 7809 ldrb r1, [r1, #0] +1000b59c: f011 0f01 tst.w r1, #1 +1000b5a0: bf14 ite ne +1000b5a2: 2131 movne r1, #49 ; 0x31 +1000b5a4: 2130 moveq r1, #48 ; 0x30 +1000b5a6: 54d1 strb r1, [r2, r3] +1000b5a8: e430 b.n 1000ae0c +1000b5aa: 4937 ldr r1, [pc, #220] ; (1000b688 ) +1000b5ac: 4630 mov r0, r6 +1000b5ae: f7fe ffbc bl 1000a52a +1000b5b2: b160 cbz r0, 1000b5ce +1000b5b4: 8aa3 ldrh r3, [r4, #20] +1000b5b6: 6922 ldr r2, [r4, #16] +1000b5b8: 1c59 adds r1, r3, #1 +1000b5ba: 82a1 strh r1, [r4, #20] +1000b5bc: 492d ldr r1, [pc, #180] ; (1000b674 ) +1000b5be: 7809 ldrb r1, [r1, #0] +1000b5c0: f011 0f02 tst.w r1, #2 +1000b5c4: bf14 ite ne +1000b5c6: 2131 movne r1, #49 ; 0x31 +1000b5c8: 2130 moveq r1, #48 ; 0x30 +1000b5ca: 54d1 strb r1, [r2, r3] +1000b5cc: e41e b.n 1000ae0c +1000b5ce: 491b ldr r1, [pc, #108] ; (1000b63c ) +1000b5d0: 4630 mov r0, r6 +1000b5d2: f7fe ffaa bl 1000a52a +1000b5d6: 8aa3 ldrh r3, [r4, #20] +1000b5d8: 6922 ldr r2, [r4, #16] +1000b5da: 1c59 adds r1, r3, #1 +1000b5dc: 82a1 strh r1, [r4, #20] +1000b5de: b140 cbz r0, 1000b5f2 +1000b5e0: 4924 ldr r1, [pc, #144] ; (1000b674 ) +1000b5e2: 7809 ldrb r1, [r1, #0] +1000b5e4: f011 0f04 tst.w r1, #4 +1000b5e8: bf14 ite ne +1000b5ea: 2131 movne r1, #49 ; 0x31 +1000b5ec: 2130 moveq r1, #48 ; 0x30 +1000b5ee: 54d1 strb r1, [r2, r3] +1000b5f0: e40c b.n 1000ae0c +1000b5f2: 213f movs r1, #63 ; 0x3f +1000b5f4: 54d1 strb r1, [r2, r3] +1000b5f6: e409 b.n 1000ae0c +1000b5f8: 4924 ldr r1, [pc, #144] ; (1000b68c ) +1000b5fa: 4628 mov r0, r5 +1000b5fc: f7fe ff95 bl 1000a52a +1000b600: 2800 cmp r0, #0 +1000b602: f000 83e1 beq.w 1000bdc8 +1000b606: 1d6e adds r6, r5, #5 +1000b608: 4921 ldr r1, [pc, #132] ; (1000b690 ) +1000b60a: 4630 mov r0, r6 +1000b60c: f7fe ff8d bl 1000a52a +1000b610: 2800 cmp r0, #0 +1000b612: d03f beq.n 1000b694 +1000b614: f04f 30ff mov.w r0, #4294967295 +1000b618: f002 fba2 bl 1000dd60 +1000b61c: f7ff bbf6 b.w 1000ae0c +1000b620: 1003f892 .word 0x1003f892 +1000b624: 1004a804 .word 0x1004a804 +1000b628: 40080560 .word 0x40080560 +1000b62c: 1003f89a .word 0x1003f89a +1000b630: 1003f8a5 .word 0x1003f8a5 +1000b634: 00000355 .word 0x00000355 +1000b638: 1003f858 .word 0x1003f858 +1000b63c: 1003f8ac .word 0x1003f8ac +1000b640: 1004bb86 .word 0x1004bb86 +1000b644: 1003f8b2 .word 0x1003f8b2 +1000b648: 100182f5 .word 0x100182f5 +1000b64c: 1003fac0 .word 0x1003fac0 +1000b650: 1003f7c6 .word 0x1003f7c6 +1000b654: 1003f8ba .word 0x1003f8ba +1000b658: 10040576 .word 0x10040576 +1000b65c: 1003f984 .word 0x1003f984 +1000b660: 1004b194 .word 0x1004b194 +1000b664: 1003f8bf .word 0x1003f8bf +1000b668: 1003f8cb .word 0x1003f8cb +1000b66c: 1003f8d0 .word 0x1003f8d0 +1000b670: 1003f8d5 .word 0x1003f8d5 +1000b674: 10044c34 .word 0x10044c34 +1000b678: 1003f8da .word 0x1003f8da +1000b67c: 1003f8e0 .word 0x1003f8e0 +1000b680: 1003f8e6 .word 0x1003f8e6 +1000b684: 1003fab1 .word 0x1003fab1 +1000b688: 1003f8ea .word 0x1003f8ea +1000b68c: 1003f8f1 .word 0x1003f8f1 +1000b690: 1003f8f7 .word 0x1003f8f7 +1000b694: 4995 ldr r1, [pc, #596] ; (1000b8ec ) +1000b696: 4630 mov r0, r6 +1000b698: f7fe ff47 bl 1000a52a +1000b69c: b138 cbz r0, 1000b6ae +1000b69e: 4b94 ldr r3, [pc, #592] ; (1000b8f0 ) +1000b6a0: 22c8 movs r2, #200 ; 0xc8 +1000b6a2: 7819 ldrb r1, [r3, #0] +1000b6a4: 4893 ldr r0, [pc, #588] ; (1000b8f4 ) +1000b6a6: f7fe febd bl 1000a424 +1000b6aa: f7ff bbaf b.w 1000ae0c +1000b6ae: 4992 ldr r1, [pc, #584] ; (1000b8f8 ) +1000b6b0: 4630 mov r0, r6 +1000b6b2: f7fe ff3a bl 1000a52a +1000b6b6: b160 cbz r0, 1000b6d2 +1000b6b8: 8aa3 ldrh r3, [r4, #20] +1000b6ba: 6920 ldr r0, [r4, #16] +1000b6bc: 4a8f ldr r2, [pc, #572] ; (1000b8fc ) +1000b6be: 4418 add r0, r3 +1000b6c0: 7812 ldrb r2, [r2, #0] +1000b6c2: 498f ldr r1, [pc, #572] ; (1000b900 ) +1000b6c4: f00f fa36 bl 1001ab34 +1000b6c8: 8aa3 ldrh r3, [r4, #20] +1000b6ca: 4418 add r0, r3 +1000b6cc: 82a0 strh r0, [r4, #20] +1000b6ce: f7ff bb9d b.w 1000ae0c +1000b6d2: 498c ldr r1, [pc, #560] ; (1000b904 ) +1000b6d4: 4630 mov r0, r6 +1000b6d6: f7fe ff28 bl 1000a52a +1000b6da: b160 cbz r0, 1000b6f6 +1000b6dc: 8aa3 ldrh r3, [r4, #20] +1000b6de: 6920 ldr r0, [r4, #16] +1000b6e0: 4a83 ldr r2, [pc, #524] ; (1000b8f0 ) +1000b6e2: 4418 add r0, r3 +1000b6e4: 7812 ldrb r2, [r2, #0] +1000b6e6: 4986 ldr r1, [pc, #536] ; (1000b900 ) +1000b6e8: f00f fa24 bl 1001ab34 +1000b6ec: 8aa3 ldrh r3, [r4, #20] +1000b6ee: 4418 add r0, r3 +1000b6f0: 82a0 strh r0, [r4, #20] +1000b6f2: f7ff bb8b b.w 1000ae0c +1000b6f6: 4984 ldr r1, [pc, #528] ; (1000b908 ) +1000b6f8: 4630 mov r0, r6 +1000b6fa: f7fe ff16 bl 1000a52a +1000b6fe: b160 cbz r0, 1000b71a +1000b700: 8aa3 ldrh r3, [r4, #20] +1000b702: 6920 ldr r0, [r4, #16] +1000b704: 4a7a ldr r2, [pc, #488] ; (1000b8f0 ) +1000b706: 4418 add r0, r3 +1000b708: 7912 ldrb r2, [r2, #4] +1000b70a: 497d ldr r1, [pc, #500] ; (1000b900 ) +1000b70c: f00f fa12 bl 1001ab34 +1000b710: 8aa3 ldrh r3, [r4, #20] +1000b712: 4418 add r0, r3 +1000b714: 82a0 strh r0, [r4, #20] +1000b716: f7ff bb79 b.w 1000ae0c +1000b71a: 497c ldr r1, [pc, #496] ; (1000b90c ) +1000b71c: 4630 mov r0, r6 +1000b71e: f7fe ff04 bl 1000a52a +1000b722: b160 cbz r0, 1000b73e +1000b724: 8aa3 ldrh r3, [r4, #20] +1000b726: 6920 ldr r0, [r4, #16] +1000b728: 4a71 ldr r2, [pc, #452] ; (1000b8f0 ) +1000b72a: 4418 add r0, r3 +1000b72c: 78d2 ldrb r2, [r2, #3] +1000b72e: 4978 ldr r1, [pc, #480] ; (1000b910 ) +1000b730: f00f fa00 bl 1001ab34 +1000b734: 8aa3 ldrh r3, [r4, #20] +1000b736: 4418 add r0, r3 +1000b738: 82a0 strh r0, [r4, #20] +1000b73a: f7ff bb67 b.w 1000ae0c +1000b73e: 4975 ldr r1, [pc, #468] ; (1000b914 ) +1000b740: 4630 mov r0, r6 +1000b742: f7fe fef2 bl 1000a52a +1000b746: b160 cbz r0, 1000b762 +1000b748: 8aa3 ldrh r3, [r4, #20] +1000b74a: 6920 ldr r0, [r4, #16] +1000b74c: 4a68 ldr r2, [pc, #416] ; (1000b8f0 ) +1000b74e: 4418 add r0, r3 +1000b750: 7952 ldrb r2, [r2, #5] +1000b752: 496f ldr r1, [pc, #444] ; (1000b910 ) +1000b754: f00f f9ee bl 1001ab34 +1000b758: 8aa3 ldrh r3, [r4, #20] +1000b75a: 4418 add r0, r3 +1000b75c: 82a0 strh r0, [r4, #20] +1000b75e: f7ff bb55 b.w 1000ae0c +1000b762: 496d ldr r1, [pc, #436] ; (1000b918 ) +1000b764: 4630 mov r0, r6 +1000b766: f7fe fee0 bl 1000a52a +1000b76a: b160 cbz r0, 1000b786 +1000b76c: 8aa3 ldrh r3, [r4, #20] +1000b76e: 6920 ldr r0, [r4, #16] +1000b770: 4a5f ldr r2, [pc, #380] ; (1000b8f0 ) +1000b772: 4418 add r0, r3 +1000b774: 7992 ldrb r2, [r2, #6] +1000b776: 4966 ldr r1, [pc, #408] ; (1000b910 ) +1000b778: f00f f9dc bl 1001ab34 +1000b77c: 8aa3 ldrh r3, [r4, #20] +1000b77e: 4418 add r0, r3 +1000b780: 82a0 strh r0, [r4, #20] +1000b782: f7ff bb43 b.w 1000ae0c +1000b786: 4965 ldr r1, [pc, #404] ; (1000b91c ) +1000b788: 4630 mov r0, r6 +1000b78a: f7fe fece bl 1000a52a +1000b78e: b160 cbz r0, 1000b7aa +1000b790: 8aa3 ldrh r3, [r4, #20] +1000b792: 6920 ldr r0, [r4, #16] +1000b794: 4a56 ldr r2, [pc, #344] ; (1000b8f0 ) +1000b796: 4418 add r0, r3 +1000b798: 7852 ldrb r2, [r2, #1] +1000b79a: 495d ldr r1, [pc, #372] ; (1000b910 ) +1000b79c: f00f f9ca bl 1001ab34 +1000b7a0: 8aa3 ldrh r3, [r4, #20] +1000b7a2: 4418 add r0, r3 +1000b7a4: 82a0 strh r0, [r4, #20] +1000b7a6: f7ff bb31 b.w 1000ae0c +1000b7aa: 495d ldr r1, [pc, #372] ; (1000b920 ) +1000b7ac: 4630 mov r0, r6 +1000b7ae: f7fe febc bl 1000a52a +1000b7b2: b160 cbz r0, 1000b7ce +1000b7b4: 8aa3 ldrh r3, [r4, #20] +1000b7b6: 6920 ldr r0, [r4, #16] +1000b7b8: 4a4d ldr r2, [pc, #308] ; (1000b8f0 ) +1000b7ba: 4418 add r0, r3 +1000b7bc: 7892 ldrb r2, [r2, #2] +1000b7be: 4954 ldr r1, [pc, #336] ; (1000b910 ) +1000b7c0: f00f f9b8 bl 1001ab34 +1000b7c4: 8aa3 ldrh r3, [r4, #20] +1000b7c6: 4418 add r0, r3 +1000b7c8: 82a0 strh r0, [r4, #20] +1000b7ca: f7ff bb1f b.w 1000ae0c +1000b7ce: 4955 ldr r1, [pc, #340] ; (1000b924 ) +1000b7d0: 4630 mov r0, r6 +1000b7d2: f7fe feaa bl 1000a52a +1000b7d6: 2800 cmp r0, #0 +1000b7d8: f000 8162 beq.w 1000baa0 +1000b7dc: 3508 adds r5, #8 +1000b7de: 4952 ldr r1, [pc, #328] ; (1000b928 ) +1000b7e0: 4628 mov r0, r5 +1000b7e2: f7fe fea2 bl 1000a52a +1000b7e6: b168 cbz r0, 1000b804 +1000b7e8: 2300 movs r3, #0 +1000b7ea: 4950 ldr r1, [pc, #320] ; (1000b92c ) +1000b7ec: f881 3020 strb.w r3, [r1, #32] +1000b7f0: 8aa3 ldrh r3, [r4, #20] +1000b7f2: 6920 ldr r0, [r4, #16] +1000b7f4: 4418 add r0, r3 +1000b7f6: f7fe fe8d bl 1000a514 +1000b7fa: 8aa3 ldrh r3, [r4, #20] +1000b7fc: 4418 add r0, r3 +1000b7fe: 82a0 strh r0, [r4, #20] +1000b800: f7ff bb04 b.w 1000ae0c +1000b804: 494a ldr r1, [pc, #296] ; (1000b930 ) +1000b806: 4628 mov r0, r5 +1000b808: f7fe fe8f bl 1000a52a +1000b80c: b170 cbz r0, 1000b82c +1000b80e: 2300 movs r3, #0 +1000b810: 4946 ldr r1, [pc, #280] ; (1000b92c ) +1000b812: f881 3061 strb.w r3, [r1, #97] ; 0x61 +1000b816: 8aa3 ldrh r3, [r4, #20] +1000b818: 6920 ldr r0, [r4, #16] +1000b81a: 3121 adds r1, #33 ; 0x21 +1000b81c: 4418 add r0, r3 +1000b81e: f7fe fe79 bl 1000a514 +1000b822: 8aa3 ldrh r3, [r4, #20] +1000b824: 4418 add r0, r3 +1000b826: 82a0 strh r0, [r4, #20] +1000b828: f7ff baf0 b.w 1000ae0c +1000b82c: 4941 ldr r1, [pc, #260] ; (1000b934 ) +1000b82e: 4628 mov r0, r5 +1000b830: f7fe fe7b bl 1000a52a +1000b834: b168 cbz r0, 1000b852 +1000b836: 8aa3 ldrh r3, [r4, #20] +1000b838: 6920 ldr r0, [r4, #16] +1000b83a: 4a3c ldr r2, [pc, #240] ; (1000b92c ) +1000b83c: 4418 add r0, r3 +1000b83e: f892 2066 ldrb.w r2, [r2, #102] ; 0x66 +1000b842: 4933 ldr r1, [pc, #204] ; (1000b910 ) +1000b844: f00f f976 bl 1001ab34 +1000b848: 8aa3 ldrh r3, [r4, #20] +1000b84a: 4418 add r0, r3 +1000b84c: 82a0 strh r0, [r4, #20] +1000b84e: f7ff badd b.w 1000ae0c +1000b852: 4939 ldr r1, [pc, #228] ; (1000b938 ) +1000b854: 4628 mov r0, r5 +1000b856: f7fe fe68 bl 1000a52a +1000b85a: b168 cbz r0, 1000b878 +1000b85c: 8aa3 ldrh r3, [r4, #20] +1000b85e: 6920 ldr r0, [r4, #16] +1000b860: 4a32 ldr r2, [pc, #200] ; (1000b92c ) +1000b862: 4418 add r0, r3 +1000b864: f892 2067 ldrb.w r2, [r2, #103] ; 0x67 +1000b868: 4929 ldr r1, [pc, #164] ; (1000b910 ) +1000b86a: f00f f963 bl 1001ab34 +1000b86e: 8aa3 ldrh r3, [r4, #20] +1000b870: 4418 add r0, r3 +1000b872: 82a0 strh r0, [r4, #20] +1000b874: f7ff baca b.w 1000ae0c +1000b878: 4930 ldr r1, [pc, #192] ; (1000b93c ) +1000b87a: 4628 mov r0, r5 +1000b87c: f7fe fe55 bl 1000a52a +1000b880: b168 cbz r0, 1000b89e +1000b882: 8aa3 ldrh r3, [r4, #20] +1000b884: 6922 ldr r2, [r4, #16] +1000b886: 1c59 adds r1, r3, #1 +1000b888: 82a1 strh r1, [r4, #20] +1000b88a: 4928 ldr r1, [pc, #160] ; (1000b92c ) +1000b88c: f891 1065 ldrb.w r1, [r1, #101] ; 0x65 +1000b890: 2900 cmp r1, #0 +1000b892: bf14 ite ne +1000b894: 2131 movne r1, #49 ; 0x31 +1000b896: 2130 moveq r1, #48 ; 0x30 +1000b898: 54d1 strb r1, [r2, r3] +1000b89a: f7ff bab7 b.w 1000ae0c +1000b89e: 4928 ldr r1, [pc, #160] ; (1000b940 ) +1000b8a0: 4628 mov r0, r5 +1000b8a2: f7fe fe42 bl 1000a52a +1000b8a6: b160 cbz r0, 1000b8c2 +1000b8a8: 8aa2 ldrh r2, [r4, #20] +1000b8aa: 6921 ldr r1, [r4, #16] +1000b8ac: 1c53 adds r3, r2, #1 +1000b8ae: 82a3 strh r3, [r4, #20] +1000b8b0: 4b1e ldr r3, [pc, #120] ; (1000b92c ) +1000b8b2: f893 3064 ldrb.w r3, [r3, #100] ; 0x64 +1000b8b6: f003 0301 and.w r3, r3, #1 +1000b8ba: 3330 adds r3, #48 ; 0x30 +1000b8bc: 548b strb r3, [r1, r2] +1000b8be: f7ff baa5 b.w 1000ae0c +1000b8c2: 4920 ldr r1, [pc, #128] ; (1000b944 ) +1000b8c4: 4628 mov r0, r5 +1000b8c6: f7fe fe30 bl 1000a52a +1000b8ca: 2800 cmp r0, #0 +1000b8cc: d03c beq.n 1000b948 +1000b8ce: 8aa3 ldrh r3, [r4, #20] +1000b8d0: 6920 ldr r0, [r4, #16] +1000b8d2: 4a16 ldr r2, [pc, #88] ; (1000b92c ) +1000b8d4: 4418 add r0, r3 +1000b8d6: f8b2 2062 ldrh.w r2, [r2, #98] ; 0x62 +1000b8da: 490d ldr r1, [pc, #52] ; (1000b910 ) +1000b8dc: f00f f92a bl 1001ab34 +1000b8e0: 8aa3 ldrh r3, [r4, #20] +1000b8e2: 4418 add r0, r3 +1000b8e4: 82a0 strh r0, [r4, #20] +1000b8e6: f7ff ba91 b.w 1000ae0c +1000b8ea: bf00 nop +1000b8ec: 1003f8fd .word 0x1003f8fd +1000b8f0: 10044e40 .word 0x10044e40 +1000b8f4: 1000e165 .word 0x1000e165 +1000b8f8: 1003f904 .word 0x1003f904 +1000b8fc: 1004a804 .word 0x1004a804 +1000b900: 10040576 .word 0x10040576 +1000b904: 1003f905 .word 0x1003f905 +1000b908: 1003f90a .word 0x1003f90a +1000b90c: 1003f90e .word 0x1003f90e +1000b910: 1003f858 .word 0x1003f858 +1000b914: 1003f914 .word 0x1003f914 +1000b918: 1003f919 .word 0x1003f919 +1000b91c: 1003f91e .word 0x1003f91e +1000b920: 1003f923 .word 0x1003f923 +1000b924: 1003f92b .word 0x1003f92b +1000b928: 1003f99e .word 0x1003f99e +1000b92c: 10044dc8 .word 0x10044dc8 +1000b930: 1003f92f .word 0x1003f92f +1000b934: 1003f933 .word 0x1003f933 +1000b938: 1003f937 .word 0x1003f937 +1000b93c: 1003f93c .word 0x1003f93c +1000b940: 1003f941 .word 0x1003f941 +1000b944: 1003f947 .word 0x1003f947 +1000b948: 499b ldr r1, [pc, #620] ; (1000bbb8 ) +1000b94a: 4628 mov r0, r5 +1000b94c: f7fe fded bl 1000a52a +1000b950: b300 cbz r0, 1000b994 +1000b952: 223c movs r2, #60 ; 0x3c +1000b954: 4b99 ldr r3, [pc, #612] ; (1000bbbc ) +1000b956: 8aa0 ldrh r0, [r4, #20] +1000b958: 7819 ldrb r1, [r3, #0] +1000b95a: 4b99 ldr r3, [pc, #612] ; (1000bbc0 ) +1000b95c: 6925 ldr r5, [r4, #16] +1000b95e: fb02 3101 mla r1, r2, r1, r3 +1000b962: f891 6030 ldrb.w r6, [r1, #48] ; 0x30 +1000b966: f891 302c ldrb.w r3, [r1, #44] ; 0x2c +1000b96a: f891 202b ldrb.w r2, [r1, #43] ; 0x2b +1000b96e: 9603 str r6, [sp, #12] +1000b970: f891 602f ldrb.w r6, [r1, #47] ; 0x2f +1000b974: 4428 add r0, r5 +1000b976: 9602 str r6, [sp, #8] +1000b978: f891 602e ldrb.w r6, [r1, #46] ; 0x2e +1000b97c: 9601 str r6, [sp, #4] +1000b97e: f891 102d ldrb.w r1, [r1, #45] ; 0x2d +1000b982: 9100 str r1, [sp, #0] +1000b984: 498f ldr r1, [pc, #572] ; (1000bbc4 ) +1000b986: f00f f8d5 bl 1001ab34 +1000b98a: 8aa3 ldrh r3, [r4, #20] +1000b98c: 4418 add r0, r3 +1000b98e: 82a0 strh r0, [r4, #20] +1000b990: f7ff ba3c b.w 1000ae0c +1000b994: 498c ldr r1, [pc, #560] ; (1000bbc8 ) +1000b996: 4628 mov r0, r5 +1000b998: f7fe fdc7 bl 1000a52a +1000b99c: b150 cbz r0, 1000b9b4 +1000b99e: 8aa3 ldrh r3, [r4, #20] +1000b9a0: 6920 ldr r0, [r4, #16] +1000b9a2: 498a ldr r1, [pc, #552] ; (1000bbcc ) +1000b9a4: 4418 add r0, r3 +1000b9a6: f7fe fdb5 bl 1000a514 +1000b9aa: 8aa3 ldrh r3, [r4, #20] +1000b9ac: 4418 add r0, r3 +1000b9ae: 82a0 strh r0, [r4, #20] +1000b9b0: f7ff ba2c b.w 1000ae0c +1000b9b4: 4986 ldr r1, [pc, #536] ; (1000bbd0 ) +1000b9b6: 4628 mov r0, r5 +1000b9b8: f7fe fdb7 bl 1000a52a +1000b9bc: b160 cbz r0, 1000b9d8 +1000b9be: 8aa3 ldrh r3, [r4, #20] +1000b9c0: 6920 ldr r0, [r4, #16] +1000b9c2: 4a84 ldr r2, [pc, #528] ; (1000bbd4 ) +1000b9c4: 4418 add r0, r3 +1000b9c6: 7b12 ldrb r2, [r2, #12] +1000b9c8: 4983 ldr r1, [pc, #524] ; (1000bbd8 ) +1000b9ca: f00f f8b3 bl 1001ab34 +1000b9ce: 8aa3 ldrh r3, [r4, #20] +1000b9d0: 4418 add r0, r3 +1000b9d2: 82a0 strh r0, [r4, #20] +1000b9d4: f7ff ba1a b.w 1000ae0c +1000b9d8: 4980 ldr r1, [pc, #512] ; (1000bbdc ) +1000b9da: 4628 mov r0, r5 +1000b9dc: f7fe fda5 bl 1000a52a +1000b9e0: b188 cbz r0, 1000ba06 +1000b9e2: 497c ldr r1, [pc, #496] ; (1000bbd4 ) +1000b9e4: 8aa0 ldrh r0, [r4, #20] +1000b9e6: 78ce ldrb r6, [r1, #3] +1000b9e8: 784b ldrb r3, [r1, #1] +1000b9ea: 780a ldrb r2, [r1, #0] +1000b9ec: 6925 ldr r5, [r4, #16] +1000b9ee: 9601 str r6, [sp, #4] +1000b9f0: 7889 ldrb r1, [r1, #2] +1000b9f2: 4428 add r0, r5 +1000b9f4: 9100 str r1, [sp, #0] +1000b9f6: 497a ldr r1, [pc, #488] ; (1000bbe0 ) +1000b9f8: f00f f89c bl 1001ab34 +1000b9fc: 8aa3 ldrh r3, [r4, #20] +1000b9fe: 4418 add r0, r3 +1000ba00: 82a0 strh r0, [r4, #20] +1000ba02: f7ff ba03 b.w 1000ae0c +1000ba06: 4977 ldr r1, [pc, #476] ; (1000bbe4 ) +1000ba08: 4628 mov r0, r5 +1000ba0a: f7fe fd8e bl 1000a52a +1000ba0e: b188 cbz r0, 1000ba34 +1000ba10: 4970 ldr r1, [pc, #448] ; (1000bbd4 ) +1000ba12: 8aa0 ldrh r0, [r4, #20] +1000ba14: 7ace ldrb r6, [r1, #11] +1000ba16: 7a4b ldrb r3, [r1, #9] +1000ba18: 7a0a ldrb r2, [r1, #8] +1000ba1a: 6925 ldr r5, [r4, #16] +1000ba1c: 9601 str r6, [sp, #4] +1000ba1e: 7a89 ldrb r1, [r1, #10] +1000ba20: 4428 add r0, r5 +1000ba22: 9100 str r1, [sp, #0] +1000ba24: 496e ldr r1, [pc, #440] ; (1000bbe0 ) +1000ba26: f00f f885 bl 1001ab34 +1000ba2a: 8aa3 ldrh r3, [r4, #20] +1000ba2c: 4418 add r0, r3 +1000ba2e: 82a0 strh r0, [r4, #20] +1000ba30: f7ff b9ec b.w 1000ae0c +1000ba34: 496c ldr r1, [pc, #432] ; (1000bbe8 ) +1000ba36: 4628 mov r0, r5 +1000ba38: f7fe fd77 bl 1000a52a +1000ba3c: b188 cbz r0, 1000ba62 +1000ba3e: 4965 ldr r1, [pc, #404] ; (1000bbd4 ) +1000ba40: 8aa0 ldrh r0, [r4, #20] +1000ba42: 79ce ldrb r6, [r1, #7] +1000ba44: 794b ldrb r3, [r1, #5] +1000ba46: 790a ldrb r2, [r1, #4] +1000ba48: 6925 ldr r5, [r4, #16] +1000ba4a: 9601 str r6, [sp, #4] +1000ba4c: 7989 ldrb r1, [r1, #6] +1000ba4e: 4428 add r0, r5 +1000ba50: 9100 str r1, [sp, #0] +1000ba52: 4963 ldr r1, [pc, #396] ; (1000bbe0 ) +1000ba54: f00f f86e bl 1001ab34 +1000ba58: 8aa3 ldrh r3, [r4, #20] +1000ba5a: 4418 add r0, r3 +1000ba5c: 82a0 strh r0, [r4, #20] +1000ba5e: f7ff b9d5 b.w 1000ae0c +1000ba62: 4962 ldr r1, [pc, #392] ; (1000bbec ) +1000ba64: 4628 mov r0, r5 +1000ba66: f7fe fd60 bl 1000a52a +1000ba6a: 2800 cmp r0, #0 +1000ba6c: f43f a9ce beq.w 1000ae0c +1000ba70: 223c movs r2, #60 ; 0x3c +1000ba72: 4b5f ldr r3, [pc, #380] ; (1000bbf0 ) +1000ba74: 4852 ldr r0, [pc, #328] ; (1000bbc0 ) +1000ba76: 781b ldrb r3, [r3, #0] +1000ba78: 6925 ldr r5, [r4, #16] +1000ba7a: 435a muls r2, r3 +1000ba7c: 3204 adds r2, #4 +1000ba7e: 1811 adds r1, r2, r0 +1000ba80: 78ce ldrb r6, [r1, #3] +1000ba82: 784b ldrb r3, [r1, #1] +1000ba84: 5c12 ldrb r2, [r2, r0] +1000ba86: 8aa0 ldrh r0, [r4, #20] +1000ba88: 9601 str r6, [sp, #4] +1000ba8a: 7889 ldrb r1, [r1, #2] +1000ba8c: 4428 add r0, r5 +1000ba8e: 9100 str r1, [sp, #0] +1000ba90: 4953 ldr r1, [pc, #332] ; (1000bbe0 ) +1000ba92: f00f f84f bl 1001ab34 +1000ba96: 8aa3 ldrh r3, [r4, #20] +1000ba98: 4418 add r0, r3 +1000ba9a: 82a0 strh r0, [r4, #20] +1000ba9c: f7ff b9b6 b.w 1000ae0c +1000baa0: 4954 ldr r1, [pc, #336] ; (1000bbf4 ) +1000baa2: 4630 mov r0, r6 +1000baa4: f7fe fd41 bl 1000a52a +1000baa8: 2800 cmp r0, #0 +1000baaa: f43f a9af beq.w 1000ae0c +1000baae: 3508 adds r5, #8 +1000bab0: 4951 ldr r1, [pc, #324] ; (1000bbf8 ) +1000bab2: 4628 mov r0, r5 +1000bab4: f7fe fd39 bl 1000a52a +1000bab8: b308 cbz r0, 1000bafe +1000baba: a805 add r0, sp, #20 +1000babc: f001 fc92 bl 1000d3e4 +1000bac0: 8aa3 ldrh r3, [r4, #20] +1000bac2: 6920 ldr r0, [r4, #16] +1000bac4: 9a05 ldr r2, [sp, #20] +1000bac6: 494d ldr r1, [pc, #308] ; (1000bbfc ) +1000bac8: 4418 add r0, r3 +1000baca: f00f f833 bl 1001ab34 +1000bace: 8aa3 ldrh r3, [r4, #20] +1000bad0: 4418 add r0, r3 +1000bad2: 82a0 strh r0, [r4, #20] +1000bad4: 494a ldr r1, [pc, #296] ; (1000bc00 ) +1000bad6: 4628 mov r0, r5 +1000bad8: f7fe fd27 bl 1000a52a +1000badc: 4606 mov r6, r0 +1000bade: 2800 cmp r0, #0 +1000bae0: d02f beq.n 1000bb42 +1000bae2: 2300 movs r3, #0 +1000bae4: 4947 ldr r1, [pc, #284] ; (1000bc04 ) +1000bae6: f881 3020 strb.w r3, [r1, #32] +1000baea: 8aa3 ldrh r3, [r4, #20] +1000baec: 6920 ldr r0, [r4, #16] +1000baee: 4418 add r0, r3 +1000baf0: f7fe fd10 bl 1000a514 +1000baf4: 8aa3 ldrh r3, [r4, #20] +1000baf6: 4418 add r0, r3 +1000baf8: 82a0 strh r0, [r4, #20] +1000bafa: f7ff b987 b.w 1000ae0c +1000bafe: 4942 ldr r1, [pc, #264] ; (1000bc08 ) +1000bb00: 4628 mov r0, r5 +1000bb02: f7fe fd12 bl 1000a52a +1000bb06: b128 cbz r0, 1000bb14 +1000bb08: 4a40 ldr r2, [pc, #256] ; (1000bc0c ) +1000bb0a: 8aa3 ldrh r3, [r4, #20] +1000bb0c: 6920 ldr r0, [r4, #16] +1000bb0e: 7812 ldrb r2, [r2, #0] +1000bb10: 4931 ldr r1, [pc, #196] ; (1000bbd8 ) +1000bb12: e7d9 b.n 1000bac8 +1000bb14: 493e ldr r1, [pc, #248] ; (1000bc10 ) +1000bb16: 4628 mov r0, r5 +1000bb18: f7fe fd07 bl 1000a52a +1000bb1c: b128 cbz r0, 1000bb2a +1000bb1e: 4a39 ldr r2, [pc, #228] ; (1000bc04 ) +1000bb20: 8aa3 ldrh r3, [r4, #20] +1000bb22: 6920 ldr r0, [r4, #16] +1000bb24: f892 206a ldrb.w r2, [r2, #106] ; 0x6a +1000bb28: e7f2 b.n 1000bb10 +1000bb2a: 493a ldr r1, [pc, #232] ; (1000bc14 ) +1000bb2c: 4628 mov r0, r5 +1000bb2e: f7fe fcfc bl 1000a52a +1000bb32: 2800 cmp r0, #0 +1000bb34: d0ce beq.n 1000bad4 +1000bb36: 4a33 ldr r2, [pc, #204] ; (1000bc04 ) +1000bb38: 8aa3 ldrh r3, [r4, #20] +1000bb3a: 6920 ldr r0, [r4, #16] +1000bb3c: f892 206b ldrb.w r2, [r2, #107] ; 0x6b +1000bb40: e7e6 b.n 1000bb10 +1000bb42: 4935 ldr r1, [pc, #212] ; (1000bc18 ) +1000bb44: 4628 mov r0, r5 +1000bb46: f7fe fcf0 bl 1000a52a +1000bb4a: b168 cbz r0, 1000bb68 +1000bb4c: 492d ldr r1, [pc, #180] ; (1000bc04 ) +1000bb4e: f881 6061 strb.w r6, [r1, #97] ; 0x61 +1000bb52: 8aa3 ldrh r3, [r4, #20] +1000bb54: 6920 ldr r0, [r4, #16] +1000bb56: 3121 adds r1, #33 ; 0x21 +1000bb58: 4418 add r0, r3 +1000bb5a: f7fe fcdb bl 1000a514 +1000bb5e: 8aa3 ldrh r3, [r4, #20] +1000bb60: 4418 add r0, r3 +1000bb62: 82a0 strh r0, [r4, #20] +1000bb64: f7ff b952 b.w 1000ae0c +1000bb68: 4913 ldr r1, [pc, #76] ; (1000bbb8 ) +1000bb6a: 4628 mov r0, r5 +1000bb6c: f7fe fcdd bl 1000a52a +1000bb70: 2800 cmp r0, #0 +1000bb72: d053 beq.n 1000bc1c +1000bb74: 223c movs r2, #60 ; 0x3c +1000bb76: 4b1e ldr r3, [pc, #120] ; (1000bbf0 ) +1000bb78: 8aa0 ldrh r0, [r4, #20] +1000bb7a: 7819 ldrb r1, [r3, #0] +1000bb7c: 4b10 ldr r3, [pc, #64] ; (1000bbc0 ) +1000bb7e: 6925 ldr r5, [r4, #16] +1000bb80: fb02 3101 mla r1, r2, r1, r3 +1000bb84: f891 6030 ldrb.w r6, [r1, #48] ; 0x30 +1000bb88: f891 302c ldrb.w r3, [r1, #44] ; 0x2c +1000bb8c: f891 202b ldrb.w r2, [r1, #43] ; 0x2b +1000bb90: 9603 str r6, [sp, #12] +1000bb92: f891 602f ldrb.w r6, [r1, #47] ; 0x2f +1000bb96: 4428 add r0, r5 +1000bb98: 9602 str r6, [sp, #8] +1000bb9a: f891 602e ldrb.w r6, [r1, #46] ; 0x2e +1000bb9e: 9601 str r6, [sp, #4] +1000bba0: f891 102d ldrb.w r1, [r1, #45] ; 0x2d +1000bba4: 9100 str r1, [sp, #0] +1000bba6: 4907 ldr r1, [pc, #28] ; (1000bbc4 ) +1000bba8: f00e ffc4 bl 1001ab34 +1000bbac: 8aa3 ldrh r3, [r4, #20] +1000bbae: 4418 add r0, r3 +1000bbb0: 82a0 strh r0, [r4, #20] +1000bbb2: f7ff b92b b.w 1000ae0c +1000bbb6: bf00 nop +1000bbb8: 1003f94c .word 0x1003f94c +1000bbbc: 10044ece .word 0x10044ece +1000bbc0: 1004aa04 .word 0x1004aa04 +1000bbc4: 1003f950 .word 0x1003f950 +1000bbc8: 1003f96e .word 0x1003f96e +1000bbcc: 10044ef0 .word 0x10044ef0 +1000bbd0: 1003f977 .word 0x1003f977 +1000bbd4: 10044e30 .word 0x10044e30 +1000bbd8: 1003f858 .word 0x1003f858 +1000bbdc: 1003f984 .word 0x1003f984 +1000bbe0: 1003f8bf .word 0x1003f8bf +1000bbe4: 1003f97c .word 0x1003f97c +1000bbe8: 1003f97f .word 0x1003f97f +1000bbec: 1003f983 .word 0x1003f983 +1000bbf0: 1004aa86 .word 0x1004aa86 +1000bbf4: 1003f81e .word 0x1003f81e +1000bbf8: 1003f987 .word 0x1003f987 +1000bbfc: 10040576 .word 0x10040576 +1000bc00: 1003f99e .word 0x1003f99e +1000bc04: 10044e47 .word 0x10044e47 +1000bc08: 1003f98c .word 0x1003f98c +1000bc0c: 1004aa85 .word 0x1004aa85 +1000bc10: 1003f993 .word 0x1003f993 +1000bc14: 1003f998 .word 0x1003f998 +1000bc18: 1003f92f .word 0x1003f92f +1000bc1c: 49a7 ldr r1, [pc, #668] ; (1000bebc ) +1000bc1e: 4628 mov r0, r5 +1000bc20: f7fe fc83 bl 1000a52a +1000bc24: b1d8 cbz r0, 1000bc5e +1000bc26: 49a6 ldr r1, [pc, #664] ; (1000bec0 ) +1000bc28: 8aa0 ldrh r0, [r4, #20] +1000bc2a: f891 6067 ldrb.w r6, [r1, #103] ; 0x67 +1000bc2e: f891 3063 ldrb.w r3, [r1, #99] ; 0x63 +1000bc32: f891 2062 ldrb.w r2, [r1, #98] ; 0x62 +1000bc36: 6925 ldr r5, [r4, #16] +1000bc38: 9603 str r6, [sp, #12] +1000bc3a: f891 6066 ldrb.w r6, [r1, #102] ; 0x66 +1000bc3e: 4428 add r0, r5 +1000bc40: 9602 str r6, [sp, #8] +1000bc42: f891 6065 ldrb.w r6, [r1, #101] ; 0x65 +1000bc46: 9601 str r6, [sp, #4] +1000bc48: f891 1064 ldrb.w r1, [r1, #100] ; 0x64 +1000bc4c: 9100 str r1, [sp, #0] +1000bc4e: 499d ldr r1, [pc, #628] ; (1000bec4 ) +1000bc50: f00e ff70 bl 1001ab34 +1000bc54: 8aa3 ldrh r3, [r4, #20] +1000bc56: 4418 add r0, r3 +1000bc58: 82a0 strh r0, [r4, #20] +1000bc5a: f7ff b8d7 b.w 1000ae0c +1000bc5e: 499a ldr r1, [pc, #616] ; (1000bec8 ) +1000bc60: 4628 mov r0, r5 +1000bc62: f7fe fc62 bl 1000a52a +1000bc66: b168 cbz r0, 1000bc84 +1000bc68: 8aa3 ldrh r3, [r4, #20] +1000bc6a: 6920 ldr r0, [r4, #16] +1000bc6c: 4a94 ldr r2, [pc, #592] ; (1000bec0 ) +1000bc6e: 4418 add r0, r3 +1000bc70: f892 2068 ldrb.w r2, [r2, #104] ; 0x68 +1000bc74: 4995 ldr r1, [pc, #596] ; (1000becc ) +1000bc76: f00e ff5d bl 1001ab34 +1000bc7a: 8aa3 ldrh r3, [r4, #20] +1000bc7c: 4418 add r0, r3 +1000bc7e: 82a0 strh r0, [r4, #20] +1000bc80: f7ff b8c4 b.w 1000ae0c +1000bc84: 4992 ldr r1, [pc, #584] ; (1000bed0 ) +1000bc86: 4628 mov r0, r5 +1000bc88: f7fe fc4f bl 1000a52a +1000bc8c: b168 cbz r0, 1000bcaa +1000bc8e: 8aa3 ldrh r3, [r4, #20] +1000bc90: 6920 ldr r0, [r4, #16] +1000bc92: 4a8b ldr r2, [pc, #556] ; (1000bec0 ) +1000bc94: 4418 add r0, r3 +1000bc96: f892 206c ldrb.w r2, [r2, #108] ; 0x6c +1000bc9a: 498e ldr r1, [pc, #568] ; (1000bed4 ) +1000bc9c: f00e ff4a bl 1001ab34 +1000bca0: 8aa3 ldrh r3, [r4, #20] +1000bca2: 4418 add r0, r3 +1000bca4: 82a0 strh r0, [r4, #20] +1000bca6: f7ff b8b1 b.w 1000ae0c +1000bcaa: 498b ldr r1, [pc, #556] ; (1000bed8 ) +1000bcac: 4628 mov r0, r5 +1000bcae: f7fe fc3c bl 1000a52a +1000bcb2: b168 cbz r0, 1000bcd0 +1000bcb4: 8aa3 ldrh r3, [r4, #20] +1000bcb6: 6920 ldr r0, [r4, #16] +1000bcb8: 4a81 ldr r2, [pc, #516] ; (1000bec0 ) +1000bcba: 4418 add r0, r3 +1000bcbc: f892 206d ldrb.w r2, [r2, #109] ; 0x6d +1000bcc0: 4982 ldr r1, [pc, #520] ; (1000becc ) +1000bcc2: f00e ff37 bl 1001ab34 +1000bcc6: 8aa3 ldrh r3, [r4, #20] +1000bcc8: 4418 add r0, r3 +1000bcca: 82a0 strh r0, [r4, #20] +1000bccc: f7ff b89e b.w 1000ae0c +1000bcd0: 4982 ldr r1, [pc, #520] ; (1000bedc ) +1000bcd2: 4628 mov r0, r5 +1000bcd4: f7fe fc29 bl 1000a52a +1000bcd8: b150 cbz r0, 1000bcf0 +1000bcda: 8aa3 ldrh r3, [r4, #20] +1000bcdc: 6920 ldr r0, [r4, #16] +1000bcde: 4980 ldr r1, [pc, #512] ; (1000bee0 ) +1000bce0: 4418 add r0, r3 +1000bce2: f7fe fc17 bl 1000a514 +1000bce6: 8aa3 ldrh r3, [r4, #20] +1000bce8: 4418 add r0, r3 +1000bcea: 82a0 strh r0, [r4, #20] +1000bcec: f7ff b88e b.w 1000ae0c +1000bcf0: 497c ldr r1, [pc, #496] ; (1000bee4 ) +1000bcf2: 4628 mov r0, r5 +1000bcf4: f7fe fc19 bl 1000a52a +1000bcf8: b168 cbz r0, 1000bd16 +1000bcfa: 8aa3 ldrh r3, [r4, #20] +1000bcfc: 6920 ldr r0, [r4, #16] +1000bcfe: 4a70 ldr r2, [pc, #448] ; (1000bec0 ) +1000bd00: 4418 add r0, r3 +1000bd02: f892 2069 ldrb.w r2, [r2, #105] ; 0x69 +1000bd06: 4971 ldr r1, [pc, #452] ; (1000becc ) +1000bd08: f00e ff14 bl 1001ab34 +1000bd0c: 8aa3 ldrh r3, [r4, #20] +1000bd0e: 4418 add r0, r3 +1000bd10: 82a0 strh r0, [r4, #20] +1000bd12: f7ff b87b b.w 1000ae0c +1000bd16: 4974 ldr r1, [pc, #464] ; (1000bee8 ) +1000bd18: 4628 mov r0, r5 +1000bd1a: f7fe fc06 bl 1000a52a +1000bd1e: b160 cbz r0, 1000bd3a +1000bd20: 8aa3 ldrh r3, [r4, #20] +1000bd22: 6920 ldr r0, [r4, #16] +1000bd24: 4a71 ldr r2, [pc, #452] ; (1000beec ) +1000bd26: 4418 add r0, r3 +1000bd28: 7b12 ldrb r2, [r2, #12] +1000bd2a: 4968 ldr r1, [pc, #416] ; (1000becc ) +1000bd2c: f00e ff02 bl 1001ab34 +1000bd30: 8aa3 ldrh r3, [r4, #20] +1000bd32: 4418 add r0, r3 +1000bd34: 82a0 strh r0, [r4, #20] +1000bd36: f7ff b869 b.w 1000ae0c +1000bd3a: 496d ldr r1, [pc, #436] ; (1000bef0 ) +1000bd3c: 4628 mov r0, r5 +1000bd3e: f7fe fbf4 bl 1000a52a +1000bd42: b188 cbz r0, 1000bd68 +1000bd44: 4969 ldr r1, [pc, #420] ; (1000beec ) +1000bd46: 8aa0 ldrh r0, [r4, #20] +1000bd48: 78ce ldrb r6, [r1, #3] +1000bd4a: 784b ldrb r3, [r1, #1] +1000bd4c: 780a ldrb r2, [r1, #0] +1000bd4e: 6925 ldr r5, [r4, #16] +1000bd50: 9601 str r6, [sp, #4] +1000bd52: 7889 ldrb r1, [r1, #2] +1000bd54: 4428 add r0, r5 +1000bd56: 9100 str r1, [sp, #0] +1000bd58: 4966 ldr r1, [pc, #408] ; (1000bef4 ) +1000bd5a: f00e feeb bl 1001ab34 +1000bd5e: 8aa3 ldrh r3, [r4, #20] +1000bd60: 4418 add r0, r3 +1000bd62: 82a0 strh r0, [r4, #20] +1000bd64: f7ff b852 b.w 1000ae0c +1000bd68: 4963 ldr r1, [pc, #396] ; (1000bef8 ) +1000bd6a: 4628 mov r0, r5 +1000bd6c: f7fe fbdd bl 1000a52a +1000bd70: b188 cbz r0, 1000bd96 +1000bd72: 495e ldr r1, [pc, #376] ; (1000beec ) +1000bd74: 8aa0 ldrh r0, [r4, #20] +1000bd76: 7ace ldrb r6, [r1, #11] +1000bd78: 7a4b ldrb r3, [r1, #9] +1000bd7a: 7a0a ldrb r2, [r1, #8] +1000bd7c: 6925 ldr r5, [r4, #16] +1000bd7e: 9601 str r6, [sp, #4] +1000bd80: 7a89 ldrb r1, [r1, #10] +1000bd82: 4428 add r0, r5 +1000bd84: 9100 str r1, [sp, #0] +1000bd86: 495b ldr r1, [pc, #364] ; (1000bef4 ) +1000bd88: f00e fed4 bl 1001ab34 +1000bd8c: 8aa3 ldrh r3, [r4, #20] +1000bd8e: 4418 add r0, r3 +1000bd90: 82a0 strh r0, [r4, #20] +1000bd92: f7ff b83b b.w 1000ae0c +1000bd96: 4959 ldr r1, [pc, #356] ; (1000befc ) +1000bd98: 4628 mov r0, r5 +1000bd9a: f7fe fbc6 bl 1000a52a +1000bd9e: 2800 cmp r0, #0 +1000bda0: f43f a834 beq.w 1000ae0c +1000bda4: 4951 ldr r1, [pc, #324] ; (1000beec ) +1000bda6: 8aa0 ldrh r0, [r4, #20] +1000bda8: 79ce ldrb r6, [r1, #7] +1000bdaa: 794b ldrb r3, [r1, #5] +1000bdac: 790a ldrb r2, [r1, #4] +1000bdae: 6925 ldr r5, [r4, #16] +1000bdb0: 9601 str r6, [sp, #4] +1000bdb2: 7989 ldrb r1, [r1, #6] +1000bdb4: 4428 add r0, r5 +1000bdb6: 9100 str r1, [sp, #0] +1000bdb8: 494e ldr r1, [pc, #312] ; (1000bef4 ) +1000bdba: f00e febb bl 1001ab34 +1000bdbe: 8aa3 ldrh r3, [r4, #20] +1000bdc0: 4418 add r0, r3 +1000bdc2: 82a0 strh r0, [r4, #20] +1000bdc4: f7ff b822 b.w 1000ae0c +1000bdc8: 494d ldr r1, [pc, #308] ; (1000bf00 ) +1000bdca: 4628 mov r0, r5 +1000bdcc: f7fe fbad bl 1000a52a +1000bdd0: 2800 cmp r0, #0 +1000bdd2: d05f beq.n 1000be94 +1000bdd4: 1d2f adds r7, r5, #4 +1000bdd6: 494b ldr r1, [pc, #300] ; (1000bf04 ) +1000bdd8: 4638 mov r0, r7 +1000bdda: f7fe fba6 bl 1000a52a +1000bdde: 2800 cmp r0, #0 +1000bde0: d046 beq.n 1000be70 +1000bde2: 7a6b ldrb r3, [r5, #9] +1000bde4: 2b5f cmp r3, #95 ; 0x5f +1000bde6: d13e bne.n 1000be66 +1000bde8: f105 070a add.w r7, r5, #10 +1000bdec: 4946 ldr r1, [pc, #280] ; (1000bf08 ) +1000bdee: 4638 mov r0, r7 +1000bdf0: f7fe fb9b bl 1000a52a +1000bdf4: b150 cbz r0, 1000be0c +1000bdf6: 2300 movs r3, #0 +1000bdf8: 4844 ldr r0, [pc, #272] ; (1000bf0c ) +1000bdfa: 60a3 str r3, [r4, #8] +1000bdfc: f00c f810 bl 10017e20 +1000be00: 60e0 str r0, [r4, #12] +1000be02: 4630 mov r0, r6 +1000be04: f7fe fecc bl 1000aba0 +1000be08: f7ff b800 b.w 1000ae0c +1000be0c: 4940 ldr r1, [pc, #256] ; (1000bf10 ) +1000be0e: 4638 mov r0, r7 +1000be10: f7fe fb8b bl 1000a52a +1000be14: b168 cbz r0, 1000be32 +1000be16: f105 000e add.w r0, r5, #14 +1000be1a: f7fe fc2c bl 1000a676 +1000be1e: 0300 lsls r0, r0, #12 +1000be20: 60a0 str r0, [r4, #8] +1000be22: f500 5080 add.w r0, r0, #4096 ; 0x1000 +1000be26: 60e0 str r0, [r4, #12] +1000be28: 4630 mov r0, r6 +1000be2a: f7fe feb9 bl 1000aba0 +1000be2e: f7fe bfed b.w 1000ae0c +1000be32: 4938 ldr r1, [pc, #224] ; (1000bf14 ) +1000be34: 4638 mov r0, r7 +1000be36: f7fe fb78 bl 1000a52a +1000be3a: b160 cbz r0, 1000be56 +1000be3c: f7fd f81a bl 10008e74 +1000be40: 60a0 str r0, [r4, #8] +1000be42: 4605 mov r5, r0 +1000be44: f7fc fff8 bl 10008e38 +1000be48: 4428 add r0, r5 +1000be4a: 60e0 str r0, [r4, #12] +1000be4c: 4630 mov r0, r6 +1000be4e: f7fe fea7 bl 1000aba0 +1000be52: f7fe bfdb b.w 1000ae0c +1000be56: 8aa3 ldrh r3, [r4, #20] +1000be58: 6922 ldr r2, [r4, #16] +1000be5a: 1c59 adds r1, r3, #1 +1000be5c: 82a1 strh r1, [r4, #20] +1000be5e: 213f movs r1, #63 ; 0x3f +1000be60: 54d1 strb r1, [r2, r3] +1000be62: f7fe bfd3 b.w 1000ae0c +1000be66: 4630 mov r0, r6 +1000be68: f7fe fe9a bl 1000aba0 +1000be6c: f7fe bfce b.w 1000ae0c +1000be70: 4929 ldr r1, [pc, #164] ; (1000bf18 ) +1000be72: 4638 mov r0, r7 +1000be74: f7fe fb59 bl 1000a52a +1000be78: b120 cbz r0, 1000be84 +1000be7a: 4630 mov r0, r6 +1000be7c: f7fe feca bl 1000ac14 +1000be80: f7fe bfc4 b.w 1000ae0c +1000be84: 8aa3 ldrh r3, [r4, #20] +1000be86: 6922 ldr r2, [r4, #16] +1000be88: 1c59 adds r1, r3, #1 +1000be8a: 82a1 strh r1, [r4, #20] +1000be8c: 213f movs r1, #63 ; 0x3f +1000be8e: 54d1 strb r1, [r2, r3] +1000be90: f7fe bfbc b.w 1000ae0c +1000be94: 4921 ldr r1, [pc, #132] ; (1000bf1c ) +1000be96: 4628 mov r0, r5 +1000be98: f7fe fb47 bl 1000a52a +1000be9c: 2800 cmp r0, #0 +1000be9e: d03f beq.n 1000bf20 +1000bea0: 79ab ldrb r3, [r5, #6] +1000bea2: 4630 mov r0, r6 +1000bea4: 2b64 cmp r3, #100 ; 0x64 +1000bea6: 8833 ldrh r3, [r6, #0] +1000bea8: bf0c ite eq +1000beaa: f443 5300 orreq.w r3, r3, #8192 ; 0x2000 +1000beae: f36f 334d bfcne r3, #13, #1 +1000beb2: 8033 strh r3, [r6, #0] +1000beb4: f7fe fdcc bl 1000aa50 +1000beb8: f7fe bfa8 b.w 1000ae0c +1000bebc: 1003f99d .word 0x1003f99d +1000bec0: 10044e47 .word 0x10044e47 +1000bec4: 1003f950 .word 0x1003f950 +1000bec8: 1003f9a3 .word 0x1003f9a3 +1000becc: 1003f858 .word 0x1003f858 +1000bed0: 1003fab1 .word 0x1003fab1 +1000bed4: 10040576 .word 0x10040576 +1000bed8: 1003f9a8 .word 0x1003f9a8 +1000bedc: 1003f96e .word 0x1003f96e +1000bee0: 10044ee0 .word 0x10044ee0 +1000bee4: 1003f93c .word 0x1003f93c +1000bee8: 1003f977 .word 0x1003f977 +1000beec: 10044eb8 .word 0x10044eb8 +1000bef0: 1003f984 .word 0x1003f984 +1000bef4: 1003f8bf .word 0x1003f8bf +1000bef8: 1003f97c .word 0x1003f97c +1000befc: 1003f97f .word 0x1003f97f +1000bf00: 1003f9ad .word 0x1003f9ad +1000bf04: 1003f42a .word 0x1003f42a +1000bf08: 1003f9b2 .word 0x1003f9b2 +1000bf0c: 1004b58c .word 0x1004b58c +1000bf10: 1003f9b6 .word 0x1003f9b6 +1000bf14: 1003f9bb .word 0x1003f9bb +1000bf18: 1003fac0 .word 0x1003fac0 +1000bf1c: 1003f9c0 .word 0x1003f9c0 +1000bf20: 4972 ldr r1, [pc, #456] ; (1000c0ec ) +1000bf22: 4628 mov r0, r5 +1000bf24: f7fe fb01 bl 1000a52a +1000bf28: 2800 cmp r0, #0 +1000bf2a: d06d beq.n 1000c008 +1000bf2c: 3504 adds r5, #4 +1000bf2e: 4970 ldr r1, [pc, #448] ; (1000c0f0 ) +1000bf30: 4628 mov r0, r5 +1000bf32: f7fe fafa bl 1000a52a +1000bf36: b160 cbz r0, 1000bf52 +1000bf38: 8aa3 ldrh r3, [r4, #20] +1000bf3a: 68b2 ldr r2, [r6, #8] +1000bf3c: 6920 ldr r0, [r4, #16] +1000bf3e: 8852 ldrh r2, [r2, #2] +1000bf40: 4418 add r0, r3 +1000bf42: 496c ldr r1, [pc, #432] ; (1000c0f4 ) +1000bf44: f00e fdf6 bl 1001ab34 +1000bf48: 8aa3 ldrh r3, [r4, #20] +1000bf4a: 4418 add r0, r3 +1000bf4c: 82a0 strh r0, [r4, #20] +1000bf4e: f7fe bf5d b.w 1000ae0c +1000bf52: 4969 ldr r1, [pc, #420] ; (1000c0f8 ) +1000bf54: 4628 mov r0, r5 +1000bf56: f7fe fae8 bl 1000a52a +1000bf5a: b198 cbz r0, 1000bf84 +1000bf5c: 69b1 ldr r1, [r6, #24] +1000bf5e: 8aa0 ldrh r0, [r4, #20] +1000bf60: 8bce ldrh r6, [r1, #30] +1000bf62: 784b ldrb r3, [r1, #1] +1000bf64: 780a ldrb r2, [r1, #0] +1000bf66: 6925 ldr r5, [r4, #16] +1000bf68: 9602 str r6, [sp, #8] +1000bf6a: 78ce ldrb r6, [r1, #3] +1000bf6c: 4428 add r0, r5 +1000bf6e: 9601 str r6, [sp, #4] +1000bf70: 7889 ldrb r1, [r1, #2] +1000bf72: 9100 str r1, [sp, #0] +1000bf74: 4961 ldr r1, [pc, #388] ; (1000c0fc ) +1000bf76: f00e fddd bl 1001ab34 +1000bf7a: 8aa3 ldrh r3, [r4, #20] +1000bf7c: 4418 add r0, r3 +1000bf7e: 82a0 strh r0, [r4, #20] +1000bf80: f7fe bf44 b.w 1000ae0c +1000bf84: 495e ldr r1, [pc, #376] ; (1000c100 ) +1000bf86: 4628 mov r0, r5 +1000bf88: f7fe facf bl 1000a52a +1000bf8c: b190 cbz r0, 1000bfb4 +1000bf8e: 89f1 ldrh r1, [r6, #14] +1000bf90: 7c73 ldrb r3, [r6, #17] +1000bf92: 8aa0 ldrh r0, [r4, #20] +1000bf94: 6925 ldr r5, [r4, #16] +1000bf96: 7c32 ldrb r2, [r6, #16] +1000bf98: 9102 str r1, [sp, #8] +1000bf9a: 7cf1 ldrb r1, [r6, #19] +1000bf9c: 4428 add r0, r5 +1000bf9e: 9101 str r1, [sp, #4] +1000bfa0: 7cb1 ldrb r1, [r6, #18] +1000bfa2: 9100 str r1, [sp, #0] +1000bfa4: 4955 ldr r1, [pc, #340] ; (1000c0fc ) +1000bfa6: f00e fdc5 bl 1001ab34 +1000bfaa: 8aa3 ldrh r3, [r4, #20] +1000bfac: 4418 add r0, r3 +1000bfae: 82a0 strh r0, [r4, #20] +1000bfb0: f7fe bf2c b.w 1000ae0c +1000bfb4: 4953 ldr r1, [pc, #332] ; (1000c104 ) +1000bfb6: 4628 mov r0, r5 +1000bfb8: f7fe fab7 bl 1000a52a +1000bfbc: b160 cbz r0, 1000bfd8 +1000bfbe: 8aa3 ldrh r3, [r4, #20] +1000bfc0: 68b2 ldr r2, [r6, #8] +1000bfc2: 6920 ldr r0, [r4, #16] +1000bfc4: 7a12 ldrb r2, [r2, #8] +1000bfc6: 4418 add r0, r3 +1000bfc8: 494a ldr r1, [pc, #296] ; (1000c0f4 ) +1000bfca: f00e fdb3 bl 1001ab34 +1000bfce: 8aa3 ldrh r3, [r4, #20] +1000bfd0: 4418 add r0, r3 +1000bfd2: 82a0 strh r0, [r4, #20] +1000bfd4: f7fe bf1a b.w 1000ae0c +1000bfd8: 4628 mov r0, r5 +1000bfda: 494b ldr r1, [pc, #300] ; (1000c108 ) +1000bfdc: f7fe faa5 bl 1000a52a +1000bfe0: 8aa3 ldrh r3, [r4, #20] +1000bfe2: 6925 ldr r5, [r4, #16] +1000bfe4: b150 cbz r0, 1000bffc +1000bfe6: 68b2 ldr r2, [r6, #8] +1000bfe8: 18e8 adds r0, r5, r3 +1000bfea: 7a52 ldrb r2, [r2, #9] +1000bfec: 4941 ldr r1, [pc, #260] ; (1000c0f4 ) +1000bfee: f00e fda1 bl 1001ab34 +1000bff2: 8aa3 ldrh r3, [r4, #20] +1000bff4: 4418 add r0, r3 +1000bff6: 82a0 strh r0, [r4, #20] +1000bff8: f7fe bf08 b.w 1000ae0c +1000bffc: 1c5a adds r2, r3, #1 +1000bffe: 82a2 strh r2, [r4, #20] +1000c000: 223f movs r2, #63 ; 0x3f +1000c002: 54ea strb r2, [r5, r3] +1000c004: f7fe bf02 b.w 1000ae0c +1000c008: 4940 ldr r1, [pc, #256] ; (1000c10c ) +1000c00a: 4628 mov r0, r5 +1000c00c: f7fe fa8d bl 1000a52a +1000c010: 2800 cmp r0, #0 +1000c012: d054 beq.n 1000c0be +1000c014: 3504 adds r5, #4 +1000c016: 493e ldr r1, [pc, #248] ; (1000c110 ) +1000c018: 4628 mov r0, r5 +1000c01a: f7fe fa86 bl 1000a52a +1000c01e: b160 cbz r0, 1000c03a +1000c020: 8aa3 ldrh r3, [r4, #20] +1000c022: 6920 ldr r0, [r4, #16] +1000c024: 4a3b ldr r2, [pc, #236] ; (1000c114 ) +1000c026: 4418 add r0, r3 +1000c028: 8812 ldrh r2, [r2, #0] +1000c02a: 4932 ldr r1, [pc, #200] ; (1000c0f4 ) +1000c02c: f00e fd82 bl 1001ab34 +1000c030: 8aa3 ldrh r3, [r4, #20] +1000c032: 4418 add r0, r3 +1000c034: 82a0 strh r0, [r4, #20] +1000c036: f7fe bee9 b.w 1000ae0c +1000c03a: 4937 ldr r1, [pc, #220] ; (1000c118 ) +1000c03c: 4628 mov r0, r5 +1000c03e: f7fe fa74 bl 1000a52a +1000c042: b170 cbz r0, 1000c062 +1000c044: 6923 ldr r3, [r4, #16] +1000c046: 8aa5 ldrh r5, [r4, #20] +1000c048: 441d add r5, r3 +1000c04a: f7fc ff13 bl 10008e74 +1000c04e: 4933 ldr r1, [pc, #204] ; (1000c11c ) +1000c050: 4602 mov r2, r0 +1000c052: 4628 mov r0, r5 +1000c054: f00e fd6e bl 1001ab34 +1000c058: 8aa3 ldrh r3, [r4, #20] +1000c05a: 4418 add r0, r3 +1000c05c: 82a0 strh r0, [r4, #20] +1000c05e: f7fe bed5 b.w 1000ae0c +1000c062: 492f ldr r1, [pc, #188] ; (1000c120 ) +1000c064: 4628 mov r0, r5 +1000c066: f7fe fa60 bl 1000a52a +1000c06a: b170 cbz r0, 1000c08a +1000c06c: 6923 ldr r3, [r4, #16] +1000c06e: 8aa5 ldrh r5, [r4, #20] +1000c070: 441d add r5, r3 +1000c072: f7fc fee1 bl 10008e38 +1000c076: 491f ldr r1, [pc, #124] ; (1000c0f4 ) +1000c078: 4602 mov r2, r0 +1000c07a: 4628 mov r0, r5 +1000c07c: f00e fd5a bl 1001ab34 +1000c080: 8aa3 ldrh r3, [r4, #20] +1000c082: 4418 add r0, r3 +1000c084: 82a0 strh r0, [r4, #20] +1000c086: f7fe bec1 b.w 1000ae0c +1000c08a: 4628 mov r0, r5 +1000c08c: 4925 ldr r1, [pc, #148] ; (1000c124 ) +1000c08e: f7fe fa4c bl 1000a52a +1000c092: 8aa5 ldrh r5, [r4, #20] +1000c094: 6923 ldr r3, [r4, #16] +1000c096: b160 cbz r0, 1000c0b2 +1000c098: 441d add r5, r3 +1000c09a: f7fc fec3 bl 10008e24 +1000c09e: 4915 ldr r1, [pc, #84] ; (1000c0f4 ) +1000c0a0: 4602 mov r2, r0 +1000c0a2: 4628 mov r0, r5 +1000c0a4: f00e fd46 bl 1001ab34 +1000c0a8: 8aa3 ldrh r3, [r4, #20] +1000c0aa: 4418 add r0, r3 +1000c0ac: 82a0 strh r0, [r4, #20] +1000c0ae: f7fe bead b.w 1000ae0c +1000c0b2: 1c6a adds r2, r5, #1 +1000c0b4: 82a2 strh r2, [r4, #20] +1000c0b6: 223f movs r2, #63 ; 0x3f +1000c0b8: 555a strb r2, [r3, r5] +1000c0ba: f7fe bea7 b.w 1000ae0c +1000c0be: 491a ldr r1, [pc, #104] ; (1000c128 ) +1000c0c0: 4628 mov r0, r5 +1000c0c2: f7fe fa32 bl 1000a52a +1000c0c6: 8aa3 ldrh r3, [r4, #20] +1000c0c8: 6922 ldr r2, [r4, #16] +1000c0ca: b140 cbz r0, 1000c0de +1000c0cc: 18d0 adds r0, r2, r3 +1000c0ce: 4917 ldr r1, [pc, #92] ; (1000c12c ) +1000c0d0: f00e fd30 bl 1001ab34 +1000c0d4: 8aa3 ldrh r3, [r4, #20] +1000c0d6: 4418 add r0, r3 +1000c0d8: 82a0 strh r0, [r4, #20] +1000c0da: f7fe be97 b.w 1000ae0c +1000c0de: 1c59 adds r1, r3, #1 +1000c0e0: 82a1 strh r1, [r4, #20] +1000c0e2: 213f movs r1, #63 ; 0x3f +1000c0e4: 54d1 strb r1, [r2, r3] +1000c0e6: f7fe be91 b.w 1000ae0c +1000c0ea: bf00 nop +1000c0ec: 1003f8d0 .word 0x1003f8d0 +1000c0f0: 1003f8d5 .word 0x1003f8d5 +1000c0f4: 1003f858 .word 0x1003f858 +1000c0f8: 1003f9c7 .word 0x1003f9c7 +1000c0fc: 1003f9cc .word 0x1003f9cc +1000c100: 1003f9db .word 0x1003f9db +1000c104: 1003f8da .word 0x1003f8da +1000c108: 1003f8e0 .word 0x1003f8e0 +1000c10c: 1003f9e2 .word 0x1003f9e2 +1000c110: 1003f9e7 .word 0x1003f9e7 +1000c114: 1004a7e2 .word 0x1004a7e2 +1000c118: 1003f9ed .word 0x1003f9ed +1000c11c: 1003f7c6 .word 0x1003f7c6 +1000c120: 1003f9f6 .word 0x1003f9f6 +1000c124: 1003f9f2 .word 0x1003f9f2 +1000c128: 1003f9fb .word 0x1003f9fb +1000c12c: 1003fa04 .word 0x1003fa04 + +1000c130 : +1000c130: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +1000c134: f8d0 8034 ldr.w r8, [r0, #52] ; 0x34 +1000c138: b085 sub sp, #20 +1000c13a: 4606 mov r6, r0 +1000c13c: 4610 mov r0, r2 +1000c13e: 460d mov r5, r1 +1000c140: 4617 mov r7, r2 +1000c142: f7fe fa98 bl 1000a676 +1000c146: 4629 mov r1, r5 +1000c148: 4604 mov r4, r0 +1000c14a: 463a mov r2, r7 +1000c14c: 48a3 ldr r0, [pc, #652] ; (1000c3dc ) +1000c14e: f00e fd17 bl 1001ab80 +1000c152: 49a3 ldr r1, [pc, #652] ; (1000c3e0 ) +1000c154: 4628 mov r0, r5 +1000c156: f7fe f9e8 bl 1000a52a +1000c15a: b120 cbz r0, 1000c166 +1000c15c: f8c8 4008 str.w r4, [r8, #8] +1000c160: b005 add sp, #20 +1000c162: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +1000c166: 499f ldr r1, [pc, #636] ; (1000c3e4 ) +1000c168: 4628 mov r0, r5 +1000c16a: f7fe f9de bl 1000a52a +1000c16e: b110 cbz r0, 1000c176 +1000c170: f8c8 400c str.w r4, [r8, #12] +1000c174: e7f4 b.n 1000c160 +1000c176: 499c ldr r1, [pc, #624] ; (1000c3e8 ) +1000c178: 4628 mov r0, r5 +1000c17a: f7fe f9d6 bl 1000a52a +1000c17e: 4681 mov r9, r0 +1000c180: 2800 cmp r0, #0 +1000c182: f000 80b3 beq.w 1000c2ec +1000c186: 1cee adds r6, r5, #3 +1000c188: 4998 ldr r1, [pc, #608] ; (1000c3ec ) +1000c18a: 4630 mov r0, r6 +1000c18c: f7fe f9cd bl 1000a52a +1000c190: 2800 cmp r0, #0 +1000c192: f000 809e beq.w 1000c2d2 +1000c196: f105 0608 add.w r6, r5, #8 +1000c19a: 4995 ldr r1, [pc, #596] ; (1000c3f0 ) +1000c19c: 4630 mov r0, r6 +1000c19e: f7fe f9c4 bl 1000a52a +1000c1a2: b1d0 cbz r0, 1000c1da +1000c1a4: 350c adds r5, #12 +1000c1a6: 4993 ldr r1, [pc, #588] ; (1000c3f4 ) +1000c1a8: 4628 mov r0, r5 +1000c1aa: f7fe f9be bl 1000a52a +1000c1ae: b110 cbz r0, 1000c1b6 +1000c1b0: 4b91 ldr r3, [pc, #580] ; (1000c3f8 ) +1000c1b2: 701c strb r4, [r3, #0] +1000c1b4: e7d4 b.n 1000c160 +1000c1b6: 4991 ldr r1, [pc, #580] ; (1000c3fc ) +1000c1b8: 4628 mov r0, r5 +1000c1ba: f7fe f9b6 bl 1000a52a +1000c1be: b118 cbz r0, 1000c1c8 +1000c1c0: 4b8d ldr r3, [pc, #564] ; (1000c3f8 ) +1000c1c2: b2e4 uxtb r4, r4 +1000c1c4: 609c str r4, [r3, #8] +1000c1c6: e7cb b.n 1000c160 +1000c1c8: 498d ldr r1, [pc, #564] ; (1000c400 ) +1000c1ca: 4628 mov r0, r5 +1000c1cc: f7fe f9ad bl 1000a52a +1000c1d0: 2800 cmp r0, #0 +1000c1d2: d0c5 beq.n 1000c160 +1000c1d4: 4b88 ldr r3, [pc, #544] ; (1000c3f8 ) +1000c1d6: 731c strb r4, [r3, #12] +1000c1d8: e7c2 b.n 1000c160 +1000c1da: 498a ldr r1, [pc, #552] ; (1000c404 ) +1000c1dc: 4630 mov r0, r6 +1000c1de: f7fe f9a4 bl 1000a52a +1000c1e2: b320 cbz r0, 1000c22e +1000c1e4: 350b adds r5, #11 +1000c1e6: 4983 ldr r1, [pc, #524] ; (1000c3f4 ) +1000c1e8: 4628 mov r0, r5 +1000c1ea: f7fe f99e bl 1000a52a +1000c1ee: b110 cbz r0, 1000c1f6 +1000c1f0: 4b85 ldr r3, [pc, #532] ; (1000c408 ) +1000c1f2: 701c strb r4, [r3, #0] +1000c1f4: e7b4 b.n 1000c160 +1000c1f6: 4985 ldr r1, [pc, #532] ; (1000c40c ) +1000c1f8: 4628 mov r0, r5 +1000c1fa: f7fe f996 bl 1000a52a +1000c1fe: b118 cbz r0, 1000c208 +1000c200: 4b81 ldr r3, [pc, #516] ; (1000c408 ) +1000c202: b2e4 uxtb r4, r4 +1000c204: 60dc str r4, [r3, #12] +1000c206: e7ab b.n 1000c160 +1000c208: 4981 ldr r1, [pc, #516] ; (1000c410 ) +1000c20a: 4628 mov r0, r5 +1000c20c: f7fe f98d bl 1000a52a +1000c210: b118 cbz r0, 1000c21a +1000c212: 4b7d ldr r3, [pc, #500] ; (1000c408 ) +1000c214: b2e4 uxtb r4, r4 +1000c216: 611c str r4, [r3, #16] +1000c218: e7a2 b.n 1000c160 +1000c21a: 4979 ldr r1, [pc, #484] ; (1000c400 ) +1000c21c: 4628 mov r0, r5 +1000c21e: f7fe f984 bl 1000a52a +1000c222: 2800 cmp r0, #0 +1000c224: d09c beq.n 1000c160 +1000c226: 4b78 ldr r3, [pc, #480] ; (1000c408 ) +1000c228: b2e4 uxtb r4, r4 +1000c22a: 609c str r4, [r3, #8] +1000c22c: e798 b.n 1000c160 +1000c22e: 4979 ldr r1, [pc, #484] ; (1000c414 ) +1000c230: 4630 mov r0, r6 +1000c232: f7fe f97a bl 1000a52a +1000c236: b1d0 cbz r0, 1000c26e +1000c238: 350d adds r5, #13 +1000c23a: 496e ldr r1, [pc, #440] ; (1000c3f4 ) +1000c23c: 4628 mov r0, r5 +1000c23e: f7fe f974 bl 1000a52a +1000c242: b110 cbz r0, 1000c24a +1000c244: 4b74 ldr r3, [pc, #464] ; (1000c418 ) +1000c246: 701c strb r4, [r3, #0] +1000c248: e78a b.n 1000c160 +1000c24a: 4974 ldr r1, [pc, #464] ; (1000c41c ) +1000c24c: 4628 mov r0, r5 +1000c24e: f7fe f96c bl 1000a52a +1000c252: b110 cbz r0, 1000c25a +1000c254: 4b70 ldr r3, [pc, #448] ; (1000c418 ) +1000c256: 725c strb r4, [r3, #9] +1000c258: e782 b.n 1000c160 +1000c25a: 4971 ldr r1, [pc, #452] ; (1000c420 ) +1000c25c: 4628 mov r0, r5 +1000c25e: f7fe f964 bl 1000a52a +1000c262: 2800 cmp r0, #0 +1000c264: f43f af7c beq.w 1000c160 +1000c268: 4b6b ldr r3, [pc, #428] ; (1000c418 ) +1000c26a: 721c strb r4, [r3, #8] +1000c26c: e778 b.n 1000c160 +1000c26e: 496d ldr r1, [pc, #436] ; (1000c424 ) +1000c270: 4630 mov r0, r6 +1000c272: f7fe f95a bl 1000a52a +1000c276: 2800 cmp r0, #0 +1000c278: f43f af72 beq.w 1000c160 +1000c27c: 350e adds r5, #14 +1000c27e: 495d ldr r1, [pc, #372] ; (1000c3f4 ) +1000c280: 4628 mov r0, r5 +1000c282: f7fe f952 bl 1000a52a +1000c286: b110 cbz r0, 1000c28e +1000c288: 4b67 ldr r3, [pc, #412] ; (1000c428 ) +1000c28a: 701c strb r4, [r3, #0] +1000c28c: e768 b.n 1000c160 +1000c28e: 4967 ldr r1, [pc, #412] ; (1000c42c ) +1000c290: 4628 mov r0, r5 +1000c292: f7fe f94a bl 1000a52a +1000c296: b110 cbz r0, 1000c29e +1000c298: 4b63 ldr r3, [pc, #396] ; (1000c428 ) +1000c29a: 705c strb r4, [r3, #1] +1000c29c: e760 b.n 1000c160 +1000c29e: 4964 ldr r1, [pc, #400] ; (1000c430 ) +1000c2a0: 4628 mov r0, r5 +1000c2a2: f7fe f942 bl 1000a52a +1000c2a6: b110 cbz r0, 1000c2ae +1000c2a8: 4b5f ldr r3, [pc, #380] ; (1000c428 ) +1000c2aa: 709c strb r4, [r3, #2] +1000c2ac: e758 b.n 1000c160 +1000c2ae: 4961 ldr r1, [pc, #388] ; (1000c434 ) +1000c2b0: 4628 mov r0, r5 +1000c2b2: f7fe f93a bl 1000a52a +1000c2b6: b110 cbz r0, 1000c2be +1000c2b8: 4b5b ldr r3, [pc, #364] ; (1000c428 ) +1000c2ba: 70dc strb r4, [r3, #3] +1000c2bc: e750 b.n 1000c160 +1000c2be: 495e ldr r1, [pc, #376] ; (1000c438 ) +1000c2c0: 4628 mov r0, r5 +1000c2c2: f7fe f932 bl 1000a52a +1000c2c6: 2800 cmp r0, #0 +1000c2c8: f43f af4a beq.w 1000c160 +1000c2cc: 4b56 ldr r3, [pc, #344] ; (1000c428 ) +1000c2ce: 711c strb r4, [r3, #4] +1000c2d0: e746 b.n 1000c160 +1000c2d2: 495a ldr r1, [pc, #360] ; (1000c43c ) +1000c2d4: 4630 mov r0, r6 +1000c2d6: f7fe f928 bl 1000a52a +1000c2da: 2800 cmp r0, #0 +1000c2dc: f43f af40 beq.w 1000c160 +1000c2e0: 4b57 ldr r3, [pc, #348] ; (1000c440 ) +1000c2e2: b10c cbz r4, 1000c2e8 +1000c2e4: 755c strb r4, [r3, #21] +1000c2e6: e73b b.n 1000c160 +1000c2e8: 751c strb r4, [r3, #20] +1000c2ea: e739 b.n 1000c160 +1000c2ec: 4955 ldr r1, [pc, #340] ; (1000c444 ) +1000c2ee: 4628 mov r0, r5 +1000c2f0: f7fe f91b bl 1000a52a +1000c2f4: b3b0 cbz r0, 1000c364 +1000c2f6: 1d2e adds r6, r5, #4 +1000c2f8: 4953 ldr r1, [pc, #332] ; (1000c448 ) +1000c2fa: 4630 mov r0, r6 +1000c2fc: f7fe f915 bl 1000a52a +1000c300: b150 cbz r0, 1000c318 +1000c302: f243 0339 movw r3, #12345 ; 0x3039 +1000c306: 429c cmp r4, r3 +1000c308: f47f af2a bne.w 1000c160 +1000c30c: 22c8 movs r2, #200 ; 0xc8 +1000c30e: 4649 mov r1, r9 +1000c310: 484e ldr r0, [pc, #312] ; (1000c44c ) +1000c312: f7fe f887 bl 1000a424 +1000c316: e723 b.n 1000c160 +1000c318: 494d ldr r1, [pc, #308] ; (1000c450 ) +1000c31a: 4630 mov r0, r6 +1000c31c: f7fe f905 bl 1000a52a +1000c320: b148 cbz r0, 1000c336 +1000c322: 1de8 adds r0, r5, #7 +1000c324: f7fe f9a7 bl 1000a676 +1000c328: 2220 movs r2, #32 +1000c32a: f020 0103 bic.w r1, r0, #3 +1000c32e: 4638 mov r0, r7 +1000c330: f7fe f9ea bl 1000a708 +1000c334: e714 b.n 1000c160 +1000c336: 4947 ldr r1, [pc, #284] ; (1000c454 ) +1000c338: 4630 mov r0, r6 +1000c33a: f7fe f8f6 bl 1000a52a +1000c33e: b128 cbz r0, 1000c34c +1000c340: fab4 f484 clz r4, r4 +1000c344: 4b44 ldr r3, [pc, #272] ; (1000c458 ) +1000c346: 0964 lsrs r4, r4, #5 +1000c348: 701c strb r4, [r3, #0] +1000c34a: e709 b.n 1000c160 +1000c34c: 4943 ldr r1, [pc, #268] ; (1000c45c ) +1000c34e: 4630 mov r0, r6 +1000c350: f7fe f8eb bl 1000a52a +1000c354: 2800 cmp r0, #0 +1000c356: f43f af03 beq.w 1000c160 +1000c35a: 4621 mov r1, r4 +1000c35c: 2001 movs r0, #1 +1000c35e: f00b fe57 bl 10018010 +1000c362: e6fd b.n 1000c160 +1000c364: 493e ldr r1, [pc, #248] ; (1000c460 ) +1000c366: 4628 mov r0, r5 +1000c368: f7fe f8df bl 1000a52a +1000c36c: 4681 mov r9, r0 +1000c36e: 2800 cmp r0, #0 +1000c370: f000 80e3 beq.w 1000c53a +1000c374: 1d2f adds r7, r5, #4 +1000c376: 493b ldr r1, [pc, #236] ; (1000c464 ) +1000c378: 4638 mov r0, r7 +1000c37a: f7fe f8d6 bl 1000a52a +1000c37e: 2800 cmp r0, #0 +1000c380: f000 8090 beq.w 1000c4a4 +1000c384: 3508 adds r5, #8 +1000c386: 4938 ldr r1, [pc, #224] ; (1000c468 ) +1000c388: 4628 mov r0, r5 +1000c38a: f7fe f8ce bl 1000a52a +1000c38e: b150 cbz r0, 1000c3a6 +1000c390: 4d36 ldr r5, [pc, #216] ; (1000c46c ) +1000c392: 88a9 ldrh r1, [r5, #4] +1000c394: 428c cmp r4, r1 +1000c396: f43f aee3 beq.w 1000c160 +1000c39a: 22c8 movs r2, #200 ; 0xc8 +1000c39c: 4834 ldr r0, [pc, #208] ; (1000c470 ) +1000c39e: f7fe f841 bl 1000a424 +1000c3a2: 80ac strh r4, [r5, #4] +1000c3a4: e6dc b.n 1000c160 +1000c3a6: 4933 ldr r1, [pc, #204] ; (1000c474 ) +1000c3a8: 4628 mov r0, r5 +1000c3aa: f7fe f8be bl 1000a52a +1000c3ae: 2800 cmp r0, #0 +1000c3b0: d062 beq.n 1000c478 +1000c3b2: 4a2e ldr r2, [pc, #184] ; (1000c46c ) +1000c3b4: 68b3 ldr r3, [r6, #8] +1000c3b6: 7811 ldrb r1, [r2, #0] +1000c3b8: b13c cbz r4, 1000c3ca +1000c3ba: f041 0108 orr.w r1, r1, #8 +1000c3be: 7011 strb r1, [r2, #0] +1000c3c0: 781a ldrb r2, [r3, #0] +1000c3c2: f042 0202 orr.w r2, r2, #2 +1000c3c6: 701a strb r2, [r3, #0] +1000c3c8: e6ca b.n 1000c160 +1000c3ca: f364 01c3 bfi r1, r4, #3, #1 +1000c3ce: 7011 strb r1, [r2, #0] +1000c3d0: 781a ldrb r2, [r3, #0] +1000c3d2: f364 0241 bfi r2, r4, #1, #1 +1000c3d6: 701a strb r2, [r3, #0] +1000c3d8: e6c2 b.n 1000c160 +1000c3da: bf00 nop +1000c3dc: 1003faa0 .word 0x1003faa0 +1000c3e0: 1003f8b4 .word 0x1003f8b4 +1000c3e4: 1003f7cd .word 0x1003f7cd +1000c3e8: 1003f7d2 .word 0x1003f7d2 +1000c3ec: 1003f7d6 .word 0x1003f7d6 +1000c3f0: 1003f7dc .word 0x1003f7dc +1000c3f4: 1003f7e1 .word 0x1003f7e1 +1000c3f8: 1004a60c .word 0x1004a60c +1000c3fc: 1003f7e6 .word 0x1003f7e6 +1000c400: 1003f7ef .word 0x1003f7ef +1000c404: 1003f7fa .word 0x1003f7fa +1000c408: 1004a5f0 .word 0x1004a5f0 +1000c40c: 1003f7fe .word 0x1003f7fe +1000c410: 1003f802 .word 0x1003f802 +1000c414: 1003f806 .word 0x1003f806 +1000c418: 1004a61c .word 0x1004a61c +1000c41c: 1003f80c .word 0x1003f80c +1000c420: 1003f811 .word 0x1003f811 +1000c424: 1003f81b .word 0x1003f81b +1000c428: 1004a5e4 .word 0x1004a5e4 +1000c42c: 1003f822 .word 0x1003f822 +1000c430: 1003f826 .word 0x1003f826 +1000c434: 1003ffde .word 0x1003ffde +1000c438: 1003faa9 .word 0x1003faa9 +1000c43c: 1003f82a .word 0x1003f82a +1000c440: 1004a628 .word 0x1004a628 +1000c444: 1003f841 .word 0x1003f841 +1000c448: 1003f8b2 .word 0x1003f8b2 +1000c44c: 100182f5 .word 0x100182f5 +1000c450: 1003fac0 .word 0x1003fac0 +1000c454: 1003f8ac .word 0x1003f8ac +1000c458: 1004bb86 .word 0x1004bb86 +1000c45c: 1003fab0 .word 0x1003fab0 +1000c460: 1003f8cb .word 0x1003f8cb +1000c464: 1003f8d0 .word 0x1003f8d0 +1000c468: 1003f8d5 .word 0x1003f8d5 +1000c46c: 10044c34 .word 0x10044c34 +1000c470: 1000a4f1 .word 0x1000a4f1 +1000c474: 1003f8e6 .word 0x1003f8e6 +1000c478: 4998 ldr r1, [pc, #608] ; (1000c6dc ) +1000c47a: 4628 mov r0, r5 +1000c47c: f7fe f855 bl 1000a52a +1000c480: b120 cbz r0, 1000c48c +1000c482: 4b97 ldr r3, [pc, #604] ; (1000c6e0 ) +1000c484: 80dc strh r4, [r3, #6] +1000c486: 68b3 ldr r3, [r6, #8] +1000c488: 721c strb r4, [r3, #8] +1000c48a: e669 b.n 1000c160 +1000c48c: 4995 ldr r1, [pc, #596] ; (1000c6e4 ) +1000c48e: 4628 mov r0, r5 +1000c490: f7fe f84b bl 1000a52a +1000c494: 2800 cmp r0, #0 +1000c496: f43f ae63 beq.w 1000c160 +1000c49a: 4b91 ldr r3, [pc, #580] ; (1000c6e0 ) +1000c49c: 811c strh r4, [r3, #8] +1000c49e: 68b3 ldr r3, [r6, #8] +1000c4a0: 725c strb r4, [r3, #9] +1000c4a2: e65d b.n 1000c160 +1000c4a4: 4990 ldr r1, [pc, #576] ; (1000c6e8 ) +1000c4a6: 4638 mov r0, r7 +1000c4a8: f7fe f83f bl 1000a52a +1000c4ac: b140 cbz r0, 1000c4c0 +1000c4ae: 3400 adds r4, #0 +1000c4b0: bf18 it ne +1000c4b2: 2401 movne r4, #1 +1000c4b4: 4b8a ldr r3, [pc, #552] ; (1000c6e0 ) +1000c4b6: 781a ldrb r2, [r3, #0] +1000c4b8: f364 0241 bfi r2, r4, #1, #1 +1000c4bc: 701a strb r2, [r3, #0] +1000c4be: e64f b.n 1000c160 +1000c4c0: 498a ldr r1, [pc, #552] ; (1000c6ec ) +1000c4c2: 4638 mov r0, r7 +1000c4c4: f7fe f831 bl 1000a52a +1000c4c8: b188 cbz r0, 1000c4ee +1000c4ca: 2c00 cmp r4, #0 +1000c4cc: bf14 ite ne +1000c4ce: 2101 movne r1, #1 +1000c4d0: 2100 moveq r1, #0 +1000c4d2: 4b83 ldr r3, [pc, #524] ; (1000c6e0 ) +1000c4d4: f06f 0002 mvn.w r0, #2 +1000c4d8: 781a ldrb r2, [r3, #0] +1000c4da: f361 0200 bfi r2, r1, #0, #1 +1000c4de: 701a strb r2, [r3, #0] +1000c4e0: d002 beq.n 1000c4e8 +1000c4e2: f00c fda1 bl 10019028 +1000c4e6: e63b b.n 1000c160 +1000c4e8: f00c fd7e bl 10018fe8 +1000c4ec: e638 b.n 1000c160 +1000c4ee: 4980 ldr r1, [pc, #512] ; (1000c6f0 ) +1000c4f0: 4638 mov r0, r7 +1000c4f2: f7fe f81a bl 1000a52a +1000c4f6: b150 cbz r0, 1000c50e +1000c4f8: 4b79 ldr r3, [pc, #484] ; (1000c6e0 ) +1000c4fa: 781a ldrb r2, [r3, #0] +1000c4fc: f364 0282 bfi r2, r4, #2, #1 +1000c500: fab4 f484 clz r4, r4 +1000c504: 701a strb r2, [r3, #0] +1000c506: 4b7b ldr r3, [pc, #492] ; (1000c6f4 ) +1000c508: 0964 lsrs r4, r4, #5 +1000c50a: 701c strb r4, [r3, #0] +1000c50c: e628 b.n 1000c160 +1000c50e: 497a ldr r1, [pc, #488] ; (1000c6f8 ) +1000c510: 4638 mov r0, r7 +1000c512: f7fe f80a bl 1000a52a +1000c516: 2800 cmp r0, #0 +1000c518: f43f ae22 beq.w 1000c160 +1000c51c: 2c02 cmp r4, #2 +1000c51e: d106 bne.n 1000c52e +1000c520: f8d8 3000 ldr.w r3, [r8] +1000c524: f443 2380 orr.w r3, r3, #262144 ; 0x40000 +1000c528: f8c8 3000 str.w r3, [r8] +1000c52c: e618 b.n 1000c160 +1000c52e: 2c01 cmp r4, #1 +1000c530: f47f ae16 bne.w 1000c160 +1000c534: f7fb fa2e bl 10007994 +1000c538: e612 b.n 1000c160 +1000c53a: 4970 ldr r1, [pc, #448] ; (1000c6fc ) +1000c53c: 4628 mov r0, r5 +1000c53e: f7fd fff4 bl 1000a52a +1000c542: 2800 cmp r0, #0 +1000c544: f000 8231 beq.w 1000c9aa +1000c548: 1d6e adds r6, r5, #5 +1000c54a: 496d ldr r1, [pc, #436] ; (1000c700 ) +1000c54c: 4630 mov r0, r6 +1000c54e: f7fd ffec bl 1000a52a +1000c552: b118 cbz r0, 1000c55c +1000c554: 4648 mov r0, r9 +1000c556: f002 f85b bl 1000e610 +1000c55a: e601 b.n 1000c160 +1000c55c: 4969 ldr r1, [pc, #420] ; (1000c704 ) +1000c55e: 4630 mov r0, r6 +1000c560: f7fd ffe3 bl 1000a52a +1000c564: b128 cbz r0, 1000c572 +1000c566: 4620 mov r0, r4 +1000c568: f001 fbfa bl 1000dd60 +1000c56c: f8c8 000c str.w r0, [r8, #12] +1000c570: e5f6 b.n 1000c160 +1000c572: 4965 ldr r1, [pc, #404] ; (1000c708 ) +1000c574: 4630 mov r0, r6 +1000c576: f7fd ffd8 bl 1000a52a +1000c57a: b130 cbz r0, 1000c58a +1000c57c: 4b63 ldr r3, [pc, #396] ; (1000c70c ) +1000c57e: 22c8 movs r2, #200 ; 0xc8 +1000c580: 7819 ldrb r1, [r3, #0] +1000c582: 4863 ldr r0, [pc, #396] ; (1000c710 ) +1000c584: f7fd ff4e bl 1000a424 +1000c588: e5ea b.n 1000c160 +1000c58a: 4962 ldr r1, [pc, #392] ; (1000c714 ) +1000c58c: 4630 mov r0, r6 +1000c58e: f7fd ffcc bl 1000a52a +1000c592: b110 cbz r0, 1000c59a +1000c594: 4b5d ldr r3, [pc, #372] ; (1000c70c ) +1000c596: 701c strb r4, [r3, #0] +1000c598: e5e2 b.n 1000c160 +1000c59a: 495f ldr r1, [pc, #380] ; (1000c718 ) +1000c59c: 4630 mov r0, r6 +1000c59e: f7fd ffc4 bl 1000a52a +1000c5a2: b110 cbz r0, 1000c5aa +1000c5a4: 4b59 ldr r3, [pc, #356] ; (1000c70c ) +1000c5a6: 711c strb r4, [r3, #4] +1000c5a8: e5da b.n 1000c160 +1000c5aa: 495c ldr r1, [pc, #368] ; (1000c71c ) +1000c5ac: 4630 mov r0, r6 +1000c5ae: f7fd ffbc bl 1000a52a +1000c5b2: b110 cbz r0, 1000c5ba +1000c5b4: 4b55 ldr r3, [pc, #340] ; (1000c70c ) +1000c5b6: 715c strb r4, [r3, #5] +1000c5b8: e5d2 b.n 1000c160 +1000c5ba: 4959 ldr r1, [pc, #356] ; (1000c720 ) +1000c5bc: 4630 mov r0, r6 +1000c5be: f7fd ffb4 bl 1000a52a +1000c5c2: b110 cbz r0, 1000c5ca +1000c5c4: 4b51 ldr r3, [pc, #324] ; (1000c70c ) +1000c5c6: 719c strb r4, [r3, #6] +1000c5c8: e5ca b.n 1000c160 +1000c5ca: 4956 ldr r1, [pc, #344] ; (1000c724 ) +1000c5cc: 4630 mov r0, r6 +1000c5ce: f7fd ffac bl 1000a52a +1000c5d2: b110 cbz r0, 1000c5da +1000c5d4: 4b4d ldr r3, [pc, #308] ; (1000c70c ) +1000c5d6: 70dc strb r4, [r3, #3] +1000c5d8: e5c2 b.n 1000c160 +1000c5da: 4953 ldr r1, [pc, #332] ; (1000c728 ) +1000c5dc: 4630 mov r0, r6 +1000c5de: f7fd ffa4 bl 1000a52a +1000c5e2: b110 cbz r0, 1000c5ea +1000c5e4: 4b49 ldr r3, [pc, #292] ; (1000c70c ) +1000c5e6: 705c strb r4, [r3, #1] +1000c5e8: e5ba b.n 1000c160 +1000c5ea: 4950 ldr r1, [pc, #320] ; (1000c72c ) +1000c5ec: 4630 mov r0, r6 +1000c5ee: f7fd ff9c bl 1000a52a +1000c5f2: b110 cbz r0, 1000c5fa +1000c5f4: 4b45 ldr r3, [pc, #276] ; (1000c70c ) +1000c5f6: 709c strb r4, [r3, #2] +1000c5f8: e5b2 b.n 1000c160 +1000c5fa: 493f ldr r1, [pc, #252] ; (1000c6f8 ) +1000c5fc: 4630 mov r0, r6 +1000c5fe: f7fd ff94 bl 1000a52a +1000c602: b118 cbz r0, 1000c60c +1000c604: 4620 mov r0, r4 +1000c606: f001 fbcf bl 1000dda8 +1000c60a: e5a9 b.n 1000c160 +1000c60c: 4948 ldr r1, [pc, #288] ; (1000c730 ) +1000c60e: 4630 mov r0, r6 +1000c610: f7fd ff8b bl 1000a52a +1000c614: 2800 cmp r0, #0 +1000c616: f000 80f3 beq.w 1000c800 +1000c61a: 3508 adds r5, #8 +1000c61c: 4945 ldr r1, [pc, #276] ; (1000c734 ) +1000c61e: 4628 mov r0, r5 +1000c620: f7fd ff83 bl 1000a52a +1000c624: b1a8 cbz r0, 1000c652 +1000c626: 783b ldrb r3, [r7, #0] +1000c628: 2b00 cmp r3, #0 +1000c62a: f43f ad99 beq.w 1000c160 +1000c62e: 4638 mov r0, r7 +1000c630: f00e fae2 bl 1001abf8 +1000c634: 4604 mov r4, r0 +1000c636: 2221 movs r2, #33 ; 0x21 +1000c638: 2100 movs r1, #0 +1000c63a: 483f ldr r0, [pc, #252] ; (1000c738 ) +1000c63c: f00e facc bl 1001abd8 +1000c640: 2c20 cmp r4, #32 +1000c642: 4622 mov r2, r4 +1000c644: 4639 mov r1, r7 +1000c646: bfa8 it ge +1000c648: 2220 movge r2, #32 +1000c64a: 483b ldr r0, [pc, #236] ; (1000c738 ) +1000c64c: f00e fac0 bl 1001abd0 +1000c650: e586 b.n 1000c160 +1000c652: 493a ldr r1, [pc, #232] ; (1000c73c ) +1000c654: 4628 mov r0, r5 +1000c656: f7fd ff68 bl 1000a52a +1000c65a: b188 cbz r0, 1000c680 +1000c65c: 4638 mov r0, r7 +1000c65e: f00e facb bl 1001abf8 +1000c662: 4604 mov r4, r0 +1000c664: 2241 movs r2, #65 ; 0x41 +1000c666: 2100 movs r1, #0 +1000c668: 4835 ldr r0, [pc, #212] ; (1000c740 ) +1000c66a: f00e fab5 bl 1001abd8 +1000c66e: 2c40 cmp r4, #64 ; 0x40 +1000c670: 4622 mov r2, r4 +1000c672: 4639 mov r1, r7 +1000c674: bfa8 it ge +1000c676: 2240 movge r2, #64 ; 0x40 +1000c678: 4831 ldr r0, [pc, #196] ; (1000c740 ) +1000c67a: f00e faa9 bl 1001abd0 +1000c67e: e56f b.n 1000c160 +1000c680: 4930 ldr r1, [pc, #192] ; (1000c744 ) +1000c682: 4628 mov r0, r5 +1000c684: f7fd ff51 bl 1000a52a +1000c688: b118 cbz r0, 1000c692 +1000c68a: 4b2b ldr r3, [pc, #172] ; (1000c738 ) +1000c68c: f883 4066 strb.w r4, [r3, #102] ; 0x66 +1000c690: e566 b.n 1000c160 +1000c692: 492d ldr r1, [pc, #180] ; (1000c748 ) +1000c694: 4628 mov r0, r5 +1000c696: f7fd ff48 bl 1000a52a +1000c69a: b118 cbz r0, 1000c6a4 +1000c69c: 4b26 ldr r3, [pc, #152] ; (1000c738 ) +1000c69e: f883 4067 strb.w r4, [r3, #103] ; 0x67 +1000c6a2: e55d b.n 1000c160 +1000c6a4: 4929 ldr r1, [pc, #164] ; (1000c74c ) +1000c6a6: 4628 mov r0, r5 +1000c6a8: f7fd ff3f bl 1000a52a +1000c6ac: b118 cbz r0, 1000c6b6 +1000c6ae: 4b22 ldr r3, [pc, #136] ; (1000c738 ) +1000c6b0: f883 4065 strb.w r4, [r3, #101] ; 0x65 +1000c6b4: e554 b.n 1000c160 +1000c6b6: 4926 ldr r1, [pc, #152] ; (1000c750 ) +1000c6b8: 4628 mov r0, r5 +1000c6ba: f7fd ff36 bl 1000a52a +1000c6be: b118 cbz r0, 1000c6c8 +1000c6c0: 4b1d ldr r3, [pc, #116] ; (1000c738 ) +1000c6c2: f883 4064 strb.w r4, [r3, #100] ; 0x64 +1000c6c6: e54b b.n 1000c160 +1000c6c8: 4922 ldr r1, [pc, #136] ; (1000c754 ) +1000c6ca: 4628 mov r0, r5 +1000c6cc: f7fd ff2d bl 1000a52a +1000c6d0: 2800 cmp r0, #0 +1000c6d2: d041 beq.n 1000c758 +1000c6d4: 4b18 ldr r3, [pc, #96] ; (1000c738 ) +1000c6d6: f8a3 4062 strh.w r4, [r3, #98] ; 0x62 +1000c6da: e541 b.n 1000c160 +1000c6dc: 1003f8da .word 0x1003f8da +1000c6e0: 10044c34 .word 0x10044c34 +1000c6e4: 1003f8e0 .word 0x1003f8e0 +1000c6e8: 1003f8ea .word 0x1003f8ea +1000c6ec: 1003fab1 .word 0x1003fab1 +1000c6f0: 1003f8ac .word 0x1003f8ac +1000c6f4: 1004bb86 .word 0x1004bb86 +1000c6f8: 1003fab7 .word 0x1003fab7 +1000c6fc: 1003f8f1 .word 0x1003f8f1 +1000c700: 1003ff07 .word 0x1003ff07 +1000c704: 1003f8f7 .word 0x1003f8f7 +1000c708: 1003f8fd .word 0x1003f8fd +1000c70c: 10044e40 .word 0x10044e40 +1000c710: 1000e165 .word 0x1000e165 +1000c714: 1003f905 .word 0x1003f905 +1000c718: 1003f90a .word 0x1003f90a +1000c71c: 1003f914 .word 0x1003f914 +1000c720: 1003f919 .word 0x1003f919 +1000c724: 1003f90e .word 0x1003f90e +1000c728: 1003f91e .word 0x1003f91e +1000c72c: 1003f923 .word 0x1003f923 +1000c730: 1003f92b .word 0x1003f92b +1000c734: 1003f99e .word 0x1003f99e +1000c738: 10044dc8 .word 0x10044dc8 +1000c73c: 1003f92f .word 0x1003f92f +1000c740: 10044de9 .word 0x10044de9 +1000c744: 1003f933 .word 0x1003f933 +1000c748: 1003f937 .word 0x1003f937 +1000c74c: 1003f93c .word 0x1003f93c +1000c750: 1003f941 .word 0x1003f941 +1000c754: 1003f947 .word 0x1003f947 +1000c758: 49ad ldr r1, [pc, #692] ; (1000ca10 ) +1000c75a: 4628 mov r0, r5 +1000c75c: f7fd fee5 bl 1000a52a +1000c760: b318 cbz r0, 1000c7aa +1000c762: 4638 mov r0, r7 +1000c764: f00e fa48 bl 1001abf8 +1000c768: 280f cmp r0, #15 +1000c76a: 4604 mov r4, r0 +1000c76c: dc1b bgt.n 1000c7a6 +1000c76e: b148 cbz r0, 1000c784 +1000c770: 2210 movs r2, #16 +1000c772: 2100 movs r1, #0 +1000c774: 48a7 ldr r0, [pc, #668] ; (1000ca14 ) +1000c776: f00e fa2f bl 1001abd8 +1000c77a: 4622 mov r2, r4 +1000c77c: 4639 mov r1, r7 +1000c77e: 48a5 ldr r0, [pc, #660] ; (1000ca14 ) +1000c780: f00e fa26 bl 1001abd0 +1000c784: 4ba4 ldr r3, [pc, #656] ; (1000ca18 ) +1000c786: 799b ldrb r3, [r3, #6] +1000c788: 0699 lsls r1, r3, #26 +1000c78a: f57f ace9 bpl.w 1000c160 +1000c78e: 4ba3 ldr r3, [pc, #652] ; (1000ca1c ) +1000c790: 48a3 ldr r0, [pc, #652] ; (1000ca20 ) +1000c792: 9301 str r3, [sp, #4] +1000c794: 2320 movs r3, #32 +1000c796: 9302 str r3, [sp, #8] +1000c798: 2300 movs r3, #0 +1000c79a: a901 add r1, sp, #4 +1000c79c: 461a mov r2, r3 +1000c79e: 6800 ldr r0, [r0, #0] +1000c7a0: f009 f92c bl 100159fc +1000c7a4: e4dc b.n 1000c160 +1000c7a6: 240f movs r4, #15 +1000c7a8: e7e2 b.n 1000c770 +1000c7aa: 499e ldr r1, [pc, #632] ; (1000ca24 ) +1000c7ac: 4628 mov r0, r5 +1000c7ae: f7fd febc bl 1000a52a +1000c7b2: b110 cbz r0, 1000c7ba +1000c7b4: 4b9c ldr r3, [pc, #624] ; (1000ca28 ) +1000c7b6: 731c strb r4, [r3, #12] +1000c7b8: e4d2 b.n 1000c160 +1000c7ba: 499c ldr r1, [pc, #624] ; (1000ca2c ) +1000c7bc: 4628 mov r0, r5 +1000c7be: f7fd feb4 bl 1000a52a +1000c7c2: b128 cbz r0, 1000c7d0 +1000c7c4: 4638 mov r0, r7 +1000c7c6: f002 fe20 bl 1000f40a +1000c7ca: 4b97 ldr r3, [pc, #604] ; (1000ca28 ) +1000c7cc: 6018 str r0, [r3, #0] +1000c7ce: e4c7 b.n 1000c160 +1000c7d0: 4997 ldr r1, [pc, #604] ; (1000ca30 ) +1000c7d2: 4628 mov r0, r5 +1000c7d4: f7fd fea9 bl 1000a52a +1000c7d8: b128 cbz r0, 1000c7e6 +1000c7da: 4638 mov r0, r7 +1000c7dc: f002 fe15 bl 1000f40a +1000c7e0: 4b91 ldr r3, [pc, #580] ; (1000ca28 ) +1000c7e2: 6098 str r0, [r3, #8] +1000c7e4: e4bc b.n 1000c160 +1000c7e6: 4993 ldr r1, [pc, #588] ; (1000ca34 ) +1000c7e8: 4628 mov r0, r5 +1000c7ea: f7fd fe9e bl 1000a52a +1000c7ee: 2800 cmp r0, #0 +1000c7f0: f43f acb6 beq.w 1000c160 +1000c7f4: 4638 mov r0, r7 +1000c7f6: f002 fe08 bl 1000f40a +1000c7fa: 4b8b ldr r3, [pc, #556] ; (1000ca28 ) +1000c7fc: 6058 str r0, [r3, #4] +1000c7fe: e4af b.n 1000c160 +1000c800: 498d ldr r1, [pc, #564] ; (1000ca38 ) +1000c802: 4630 mov r0, r6 +1000c804: f7fd fe91 bl 1000a52a +1000c808: 2800 cmp r0, #0 +1000c80a: f43f aca9 beq.w 1000c160 +1000c80e: 3508 adds r5, #8 +1000c810: 498a ldr r1, [pc, #552] ; (1000ca3c ) +1000c812: 4628 mov r0, r5 +1000c814: f7fd fe89 bl 1000a52a +1000c818: b118 cbz r0, 1000c822 +1000c81a: 4b89 ldr r3, [pc, #548] ; (1000ca40 ) +1000c81c: f883 406a strb.w r4, [r3, #106] ; 0x6a +1000c820: e49e b.n 1000c160 +1000c822: 4988 ldr r1, [pc, #544] ; (1000ca44 ) +1000c824: 4628 mov r0, r5 +1000c826: f7fd fe80 bl 1000a52a +1000c82a: 4680 mov r8, r0 +1000c82c: b118 cbz r0, 1000c836 +1000c82e: 4b84 ldr r3, [pc, #528] ; (1000ca40 ) +1000c830: f883 406b strb.w r4, [r3, #107] ; 0x6b +1000c834: e494 b.n 1000c160 +1000c836: 4984 ldr r1, [pc, #528] ; (1000ca48 ) +1000c838: 4628 mov r0, r5 +1000c83a: f7fd fe76 bl 1000a52a +1000c83e: 4606 mov r6, r0 +1000c840: b1a8 cbz r0, 1000c86e +1000c842: 783b ldrb r3, [r7, #0] +1000c844: 2b00 cmp r3, #0 +1000c846: f43f ac8b beq.w 1000c160 +1000c84a: 4638 mov r0, r7 +1000c84c: f00e f9d4 bl 1001abf8 +1000c850: 4604 mov r4, r0 +1000c852: 4641 mov r1, r8 +1000c854: 2221 movs r2, #33 ; 0x21 +1000c856: 487a ldr r0, [pc, #488] ; (1000ca40 ) +1000c858: f00e f9be bl 1001abd8 +1000c85c: 2c20 cmp r4, #32 +1000c85e: 4622 mov r2, r4 +1000c860: 4639 mov r1, r7 +1000c862: bfa8 it ge +1000c864: 2220 movge r2, #32 +1000c866: 4876 ldr r0, [pc, #472] ; (1000ca40 ) +1000c868: f00e f9b2 bl 1001abd0 +1000c86c: e478 b.n 1000c160 +1000c86e: 4977 ldr r1, [pc, #476] ; (1000ca4c ) +1000c870: 4628 mov r0, r5 +1000c872: f7fd fe5a bl 1000a52a +1000c876: b188 cbz r0, 1000c89c +1000c878: 4638 mov r0, r7 +1000c87a: f00e f9bd bl 1001abf8 +1000c87e: 4604 mov r4, r0 +1000c880: 4631 mov r1, r6 +1000c882: 2241 movs r2, #65 ; 0x41 +1000c884: 4872 ldr r0, [pc, #456] ; (1000ca50 ) +1000c886: f00e f9a7 bl 1001abd8 +1000c88a: 2c40 cmp r4, #64 ; 0x40 +1000c88c: 4622 mov r2, r4 +1000c88e: 4639 mov r1, r7 +1000c890: bfa8 it ge +1000c892: 2240 movge r2, #64 ; 0x40 +1000c894: 486e ldr r0, [pc, #440] ; (1000ca50 ) +1000c896: f00e f99b bl 1001abd0 +1000c89a: e461 b.n 1000c160 +1000c89c: 496d ldr r1, [pc, #436] ; (1000ca54 ) +1000c89e: 4628 mov r0, r5 +1000c8a0: f7fd fe43 bl 1000a52a +1000c8a4: b118 cbz r0, 1000c8ae +1000c8a6: 4b66 ldr r3, [pc, #408] ; (1000ca40 ) +1000c8a8: f883 4069 strb.w r4, [r3, #105] ; 0x69 +1000c8ac: e458 b.n 1000c160 +1000c8ae: 496a ldr r1, [pc, #424] ; (1000ca58 ) +1000c8b0: 4628 mov r0, r5 +1000c8b2: f7fd fe3a bl 1000a52a +1000c8b6: b120 cbz r0, 1000c8c2 +1000c8b8: 4968 ldr r1, [pc, #416] ; (1000ca5c ) +1000c8ba: 4638 mov r0, r7 +1000c8bc: f7fd ff54 bl 1000a768 +1000c8c0: e44e b.n 1000c160 +1000c8c2: 4967 ldr r1, [pc, #412] ; (1000ca60 ) +1000c8c4: 4628 mov r0, r5 +1000c8c6: f7fd fe30 bl 1000a52a +1000c8ca: b118 cbz r0, 1000c8d4 +1000c8cc: 4b5c ldr r3, [pc, #368] ; (1000ca40 ) +1000c8ce: f883 4068 strb.w r4, [r3, #104] ; 0x68 +1000c8d2: e445 b.n 1000c160 +1000c8d4: 4963 ldr r1, [pc, #396] ; (1000ca64 ) +1000c8d6: 4628 mov r0, r5 +1000c8d8: f7fd fe27 bl 1000a52a +1000c8dc: b118 cbz r0, 1000c8e6 +1000c8de: 4b58 ldr r3, [pc, #352] ; (1000ca40 ) +1000c8e0: f883 406c strb.w r4, [r3, #108] ; 0x6c +1000c8e4: e43c b.n 1000c160 +1000c8e6: 4960 ldr r1, [pc, #384] ; (1000ca68 ) +1000c8e8: 4628 mov r0, r5 +1000c8ea: f7fd fe1e bl 1000a52a +1000c8ee: b118 cbz r0, 1000c8f8 +1000c8f0: 4b53 ldr r3, [pc, #332] ; (1000ca40 ) +1000c8f2: f883 406d strb.w r4, [r3, #109] ; 0x6d +1000c8f6: e433 b.n 1000c160 +1000c8f8: 4945 ldr r1, [pc, #276] ; (1000ca10 ) +1000c8fa: 4628 mov r0, r5 +1000c8fc: f7fd fe15 bl 1000a52a +1000c900: b328 cbz r0, 1000c94e +1000c902: 4638 mov r0, r7 +1000c904: f00e f978 bl 1001abf8 +1000c908: 280f cmp r0, #15 +1000c90a: 4604 mov r4, r0 +1000c90c: dc1d bgt.n 1000c94a +1000c90e: b148 cbz r0, 1000c924 +1000c910: 2210 movs r2, #16 +1000c912: 2100 movs r1, #0 +1000c914: 4855 ldr r0, [pc, #340] ; (1000ca6c ) +1000c916: f00e f95f bl 1001abd8 +1000c91a: 4622 mov r2, r4 +1000c91c: 4639 mov r1, r7 +1000c91e: 4853 ldr r0, [pc, #332] ; (1000ca6c ) +1000c920: f00e f956 bl 1001abd0 +1000c924: 4b3c ldr r3, [pc, #240] ; (1000ca18 ) +1000c926: 799b ldrb r3, [r3, #6] +1000c928: 065a lsls r2, r3, #25 +1000c92a: f57f ac19 bpl.w 1000c160 +1000c92e: 4b3b ldr r3, [pc, #236] ; (1000ca1c ) +1000c930: 483b ldr r0, [pc, #236] ; (1000ca20 ) +1000c932: 9301 str r3, [sp, #4] +1000c934: 2340 movs r3, #64 ; 0x40 +1000c936: 9302 str r3, [sp, #8] +1000c938: 2300 movs r3, #0 +1000c93a: a901 add r1, sp, #4 +1000c93c: 461a mov r2, r3 +1000c93e: 6800 ldr r0, [r0, #0] +1000c940: f8ad 300c strh.w r3, [sp, #12] +1000c944: f009 f85a bl 100159fc +1000c948: e40a b.n 1000c160 +1000c94a: 240f movs r4, #15 +1000c94c: e7e0 b.n 1000c910 +1000c94e: 4935 ldr r1, [pc, #212] ; (1000ca24 ) +1000c950: 4628 mov r0, r5 +1000c952: f7fd fdea bl 1000a52a +1000c956: b110 cbz r0, 1000c95e +1000c958: 4b45 ldr r3, [pc, #276] ; (1000ca70 ) +1000c95a: 731c strb r4, [r3, #12] +1000c95c: e400 b.n 1000c160 +1000c95e: 4933 ldr r1, [pc, #204] ; (1000ca2c ) +1000c960: 4628 mov r0, r5 +1000c962: f7fd fde2 bl 1000a52a +1000c966: b130 cbz r0, 1000c976 +1000c968: 4638 mov r0, r7 +1000c96a: f002 fd4e bl 1000f40a +1000c96e: 4b40 ldr r3, [pc, #256] ; (1000ca70 ) +1000c970: 6018 str r0, [r3, #0] +1000c972: f7ff bbf5 b.w 1000c160 +1000c976: 492e ldr r1, [pc, #184] ; (1000ca30 ) +1000c978: 4628 mov r0, r5 +1000c97a: f7fd fdd6 bl 1000a52a +1000c97e: b130 cbz r0, 1000c98e +1000c980: 4638 mov r0, r7 +1000c982: f002 fd42 bl 1000f40a +1000c986: 4b3a ldr r3, [pc, #232] ; (1000ca70 ) +1000c988: 6098 str r0, [r3, #8] +1000c98a: f7ff bbe9 b.w 1000c160 +1000c98e: 4929 ldr r1, [pc, #164] ; (1000ca34 ) +1000c990: 4628 mov r0, r5 +1000c992: f7fd fdca bl 1000a52a +1000c996: 2800 cmp r0, #0 +1000c998: f43f abe2 beq.w 1000c160 +1000c99c: 4638 mov r0, r7 +1000c99e: f002 fd34 bl 1000f40a +1000c9a2: 4b33 ldr r3, [pc, #204] ; (1000ca70 ) +1000c9a4: 6058 str r0, [r3, #4] +1000c9a6: f7ff bbdb b.w 1000c160 +1000c9aa: f898 3004 ldrb.w r3, [r8, #4] +1000c9ae: 2bfd cmp r3, #253 ; 0xfd +1000c9b0: f47f abd6 bne.w 1000c160 +1000c9b4: f8d8 3000 ldr.w r3, [r8] +1000c9b8: 059b lsls r3, r3, #22 +1000c9ba: f57f abd1 bpl.w 1000c160 +1000c9be: 492d ldr r1, [pc, #180] ; (1000ca74 ) +1000c9c0: 4628 mov r0, r5 +1000c9c2: f7fd fdb2 bl 1000a52a +1000c9c6: 2800 cmp r0, #0 +1000c9c8: d058 beq.n 1000ca7c +1000c9ca: 2c00 cmp r4, #0 +1000c9cc: f43f abc8 beq.w 1000c160 +1000c9d0: f995 3006 ldrsb.w r3, [r5, #6] +1000c9d4: 1de8 adds r0, r5, #7 +1000c9d6: 2b64 cmp r3, #100 ; 0x64 +1000c9d8: 8833 ldrh r3, [r6, #0] +1000c9da: bf0c ite eq +1000c9dc: f443 5300 orreq.w r3, r3, #8192 ; 0x2000 +1000c9e0: f36f 334d bfcne r3, #13, #1 +1000c9e4: 8033 strh r3, [r6, #0] +1000c9e6: f7fd fe46 bl 1000a676 +1000c9ea: 2300 movs r3, #0 +1000c9ec: f888 3020 strb.w r3, [r8, #32] +1000c9f0: f8d8 3000 ldr.w r3, [r8] +1000c9f4: f8c8 0008 str.w r0, [r8, #8] +1000c9f8: f043 0390 orr.w r3, r3, #144 ; 0x90 +1000c9fc: f8c8 3000 str.w r3, [r8] +1000ca00: 4b1d ldr r3, [pc, #116] ; (1000ca78 ) +1000ca02: 4420 add r0, r4 +1000ca04: f8c8 000c str.w r0, [r8, #12] +1000ca08: f8c8 3018 str.w r3, [r8, #24] +1000ca0c: f7ff bba8 b.w 1000c160 +1000ca10: 1003f96e .word 0x1003f96e +1000ca14: 10044ef0 .word 0x10044ef0 +1000ca18: 10044e40 .word 0x10044e40 +1000ca1c: 1000dda9 .word 0x1000dda9 +1000ca20: 1004a7e4 .word 0x1004a7e4 +1000ca24: 1003f977 .word 0x1003f977 +1000ca28: 10044e30 .word 0x10044e30 +1000ca2c: 1003f984 .word 0x1003f984 +1000ca30: 1003f97c .word 0x1003f97c +1000ca34: 1003f97f .word 0x1003f97f +1000ca38: 1003f81e .word 0x1003f81e +1000ca3c: 1003f993 .word 0x1003f993 +1000ca40: 10044e47 .word 0x10044e47 +1000ca44: 1003f998 .word 0x1003f998 +1000ca48: 1003f99e .word 0x1003f99e +1000ca4c: 1003f92f .word 0x1003f92f +1000ca50: 10044e68 .word 0x10044e68 +1000ca54: 1003f93c .word 0x1003f93c +1000ca58: 1003f99d .word 0x1003f99d +1000ca5c: 10044ea9 .word 0x10044ea9 +1000ca60: 1003f9a3 .word 0x1003f9a3 +1000ca64: 1003fab1 .word 0x1003fab1 +1000ca68: 1003f9a8 .word 0x1003f9a8 +1000ca6c: 10044ee0 .word 0x10044ee0 +1000ca70: 10044eb8 .word 0x10044eb8 +1000ca74: 1003f9c0 .word 0x1003f9c0 +1000ca78: 1000aa51 .word 0x1000aa51 +1000ca7c: 4947 ldr r1, [pc, #284] ; (1000cb9c ) +1000ca7e: 4628 mov r0, r5 +1000ca80: f7fd fd53 bl 1000a52a +1000ca84: 2800 cmp r0, #0 +1000ca86: d073 beq.n 1000cb70 +1000ca88: f995 3005 ldrsb.w r3, [r5, #5] +1000ca8c: 2b5f cmp r3, #95 ; 0x5f +1000ca8e: d161 bne.n 1000cb54 +1000ca90: 1dae adds r6, r5, #6 +1000ca92: 4943 ldr r1, [pc, #268] ; (1000cba0 ) +1000ca94: 4630 mov r0, r6 +1000ca96: f7fd fd48 bl 1000a52a +1000ca9a: b1a8 cbz r0, 1000cac8 +1000ca9c: 2300 movs r3, #0 +1000ca9e: 4841 ldr r0, [pc, #260] ; (1000cba4 ) +1000caa0: f8c8 3008 str.w r3, [r8, #8] +1000caa4: f00b f9bc bl 10017e20 +1000caa8: 230f movs r3, #15 +1000caaa: f888 3020 strb.w r3, [r8, #32] +1000caae: f8d8 3000 ldr.w r3, [r8] +1000cab2: f8c8 000c str.w r0, [r8, #12] +1000cab6: f043 0390 orr.w r3, r3, #144 ; 0x90 +1000caba: f8c8 3000 str.w r3, [r8] +1000cabe: 4b3a ldr r3, [pc, #232] ; (1000cba8 ) +1000cac0: f8c8 3018 str.w r3, [r8, #24] +1000cac4: f7ff bb4c b.w 1000c160 +1000cac8: 4938 ldr r1, [pc, #224] ; (1000cbac ) +1000caca: 4630 mov r0, r6 +1000cacc: f7fd fd2d bl 1000a52a +1000cad0: b1c0 cbz r0, 1000cb04 +1000cad2: f105 000a add.w r0, r5, #10 +1000cad6: f7fd fdce bl 1000a676 +1000cada: 230f movs r3, #15 +1000cadc: f888 3020 strb.w r3, [r8, #32] +1000cae0: f8d8 3000 ldr.w r3, [r8] +1000cae4: 0300 lsls r0, r0, #12 +1000cae6: f043 0390 orr.w r3, r3, #144 ; 0x90 +1000caea: f8c8 3000 str.w r3, [r8] +1000caee: 4b2e ldr r3, [pc, #184] ; (1000cba8 ) +1000caf0: f8c8 0008 str.w r0, [r8, #8] +1000caf4: eb00 3004 add.w r0, r0, r4, lsl #12 +1000caf8: f8c8 000c str.w r0, [r8, #12] +1000cafc: f8c8 3018 str.w r3, [r8, #24] +1000cb00: f7ff bb2e b.w 1000c160 +1000cb04: 492a ldr r1, [pc, #168] ; (1000cbb0 ) +1000cb06: 4630 mov r0, r6 +1000cb08: f7fd fd0f bl 1000a52a +1000cb0c: b1b8 cbz r0, 1000cb3e +1000cb0e: f7fc f9b1 bl 10008e74 +1000cb12: f8c8 0008 str.w r0, [r8, #8] +1000cb16: 4604 mov r4, r0 +1000cb18: f7fc f98e bl 10008e38 +1000cb1c: 230f movs r3, #15 +1000cb1e: f888 3020 strb.w r3, [r8, #32] +1000cb22: f8d8 3000 ldr.w r3, [r8] +1000cb26: 4420 add r0, r4 +1000cb28: f043 0390 orr.w r3, r3, #144 ; 0x90 +1000cb2c: f8c8 3000 str.w r3, [r8] +1000cb30: 4b1d ldr r3, [pc, #116] ; (1000cba8 ) +1000cb32: f8c8 000c str.w r0, [r8, #12] +1000cb36: f8c8 3018 str.w r3, [r8, #24] +1000cb3a: f7ff bb11 b.w 1000c160 +1000cb3e: f8b8 3014 ldrh.w r3, [r8, #20] +1000cb42: f8d8 2010 ldr.w r2, [r8, #16] +1000cb46: 1c59 adds r1, r3, #1 +1000cb48: f8a8 1014 strh.w r1, [r8, #20] +1000cb4c: 213f movs r1, #63 ; 0x3f +1000cb4e: 54d1 strb r1, [r2, r3] +1000cb50: f7ff bb06 b.w 1000c160 +1000cb54: 230f movs r3, #15 +1000cb56: f888 3020 strb.w r3, [r8, #32] +1000cb5a: f8d8 3000 ldr.w r3, [r8] +1000cb5e: f043 0390 orr.w r3, r3, #144 ; 0x90 +1000cb62: f8c8 3000 str.w r3, [r8] +1000cb66: 4b10 ldr r3, [pc, #64] ; (1000cba8 ) +1000cb68: f8c8 3018 str.w r3, [r8, #24] +1000cb6c: f7ff baf8 b.w 1000c160 +1000cb70: 4910 ldr r1, [pc, #64] ; (1000cbb4 ) +1000cb72: 4628 mov r0, r5 +1000cb74: f7fd fcd9 bl 1000a52a +1000cb78: 2800 cmp r0, #0 +1000cb7a: f43f aaf1 beq.w 1000c160 +1000cb7e: 230f movs r3, #15 +1000cb80: f888 3020 strb.w r3, [r8, #32] +1000cb84: f8d8 3000 ldr.w r3, [r8] +1000cb88: f043 0390 orr.w r3, r3, #144 ; 0x90 +1000cb8c: f8c8 3000 str.w r3, [r8] +1000cb90: 4b09 ldr r3, [pc, #36] ; (1000cbb8 ) +1000cb92: f8c8 3018 str.w r3, [r8, #24] +1000cb96: f7ff bae3 b.w 1000c160 +1000cb9a: bf00 nop +1000cb9c: 1003f42a .word 0x1003f42a +1000cba0: 1003f9b2 .word 0x1003f9b2 +1000cba4: 1004b58c .word 0x1004b58c +1000cba8: 1000aba1 .word 0x1000aba1 +1000cbac: 1003f9b6 .word 0x1003f9b6 +1000cbb0: 1003f9bb .word 0x1003f9bb +1000cbb4: 1003fabc .word 0x1003fabc +1000cbb8: 1000ac15 .word 0x1000ac15 + +1000cbbc : +1000cbbc: b538 push {r3, r4, r5, lr} +1000cbbe: 213a movs r1, #58 ; 0x3a +1000cbc0: 4605 mov r5, r0 +1000cbc2: f00e f80d bl 1001abe0 +1000cbc6: b188 cbz r0, 1000cbec +1000cbc8: 2300 movs r3, #0 +1000cbca: 1c44 adds r4, r0, #1 +1000cbcc: 7003 strb r3, [r0, #0] +1000cbce: 4629 mov r1, r5 +1000cbd0: 480c ldr r0, [pc, #48] ; (1000cc04 ) +1000cbd2: f7fd fcaa bl 1000a52a +1000cbd6: b958 cbnz r0, 1000cbf0 +1000cbd8: 4629 mov r1, r5 +1000cbda: 480b ldr r0, [pc, #44] ; (1000cc08 ) +1000cbdc: f7fd fca5 bl 1000a52a +1000cbe0: b120 cbz r0, 1000cbec +1000cbe2: 4621 mov r1, r4 +1000cbe4: 4809 ldr r0, [pc, #36] ; (1000cc0c ) +1000cbe6: f7fd fca0 bl 1000a52a +1000cbea: b948 cbnz r0, 1000cc00 +1000cbec: 2000 movs r0, #0 +1000cbee: bd38 pop {r3, r4, r5, pc} +1000cbf0: 4621 mov r1, r4 +1000cbf2: 4807 ldr r0, [pc, #28] ; (1000cc10 ) +1000cbf4: f7fd fc99 bl 1000a52a +1000cbf8: 2800 cmp r0, #0 +1000cbfa: d0ed beq.n 1000cbd8 +1000cbfc: 2001 movs r0, #1 +1000cbfe: bd38 pop {r3, r4, r5, pc} +1000cc00: 2002 movs r0, #2 +1000cc02: bd38 pop {r3, r4, r5, pc} +1000cc04: 10044dc8 .word 0x10044dc8 +1000cc08: 10044e47 .word 0x10044e47 +1000cc0c: 10044e68 .word 0x10044e68 +1000cc10: 10044de9 .word 0x10044de9 + +1000cc14 : +1000cc14: b508 push {r3, lr} +1000cc16: 4b02 ldr r3, [pc, #8] ; (1000cc20 ) +1000cc18: 4798 blx r3 +1000cc1a: 4b02 ldr r3, [pc, #8] ; (1000cc24 ) +1000cc1c: 6018 str r0, [r3, #0] +1000cc1e: bd08 pop {r3, pc} +1000cc20: 00000355 .word 0x00000355 +1000cc24: 10044d58 .word 0x10044d58 + +1000cc28 : +1000cc28: 684b ldr r3, [r1, #4] +1000cc2a: 4a04 ldr r2, [pc, #16] ; (1000cc3c ) +1000cc2c: f993 3000 ldrsb.w r3, [r3] +1000cc30: 3b31 subs r3, #49 ; 0x31 +1000cc32: bf18 it ne +1000cc34: 2301 movne r3, #1 +1000cc36: 7013 strb r3, [r2, #0] +1000cc38: 4770 bx lr +1000cc3a: bf00 nop +1000cc3c: 1004bb86 .word 0x1004bb86 + +1000cc40 : +1000cc40: b570 push {r4, r5, r6, lr} +1000cc42: 480a ldr r0, [pc, #40] ; (1000cc6c ) +1000cc44: 4c0a ldr r4, [pc, #40] ; (1000cc70 ) +1000cc46: 47a0 blx r4 +1000cc48: 480a ldr r0, [pc, #40] ; (1000cc74 ) +1000cc4a: 47a0 blx r4 +1000cc4c: 4d0a ldr r5, [pc, #40] ; (1000cc78 ) +1000cc4e: 4e0b ldr r6, [pc, #44] ; (1000cc7c ) +1000cc50: 3510 adds r5, #16 +1000cc52: f855 1c20 ldr.w r1, [r5, #-32] +1000cc56: b921 cbnz r1, 1000cc62 +1000cc58: 4623 mov r3, r4 +1000cc5a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1000cc5e: 4805 ldr r0, [pc, #20] ; (1000cc74 ) +1000cc60: 4718 bx r3 +1000cc62: f855 2c14 ldr.w r2, [r5, #-20] +1000cc66: 4630 mov r0, r6 +1000cc68: 47a0 blx r4 +1000cc6a: e7f1 b.n 1000cc50 +1000cc6c: 1003fac4 .word 0x1003fac4 +1000cc70: 0000f39d .word 0x0000f39d +1000cc74: 0003ed1e .word 0x0003ed1e +1000cc78: 10044c20 .word 0x10044c20 +1000cc7c: 1003fada .word 0x1003fada + +1000cc80 : +1000cc80: 2200 movs r2, #0 +1000cc82: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1000cc86: 4603 mov r3, r0 +1000cc88: f100 0e7e add.w lr, r0, #126 ; 0x7e +1000cc8c: 2720 movs r7, #32 +1000cc8e: 4616 mov r6, r2 +1000cc90: 4610 mov r0, r2 +1000cc92: f242 4c01 movw ip, #9217 ; 0x2401 +1000cc96: 4615 mov r5, r2 +1000cc98: 781c ldrb r4, [r3, #0] +1000cc9a: 2c0d cmp r4, #13 +1000cc9c: d804 bhi.n 1000cca8 +1000cc9e: fa2c f804 lsr.w r8, ip, r4 +1000cca2: f018 0f01 tst.w r8, #1 +1000cca6: d103 bne.n 1000ccb0 +1000cca8: 2809 cmp r0, #9 +1000ccaa: dc01 bgt.n 1000ccb0 +1000ccac: 4573 cmp r3, lr +1000ccae: d101 bne.n 1000ccb4 +1000ccb0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000ccb4: 2a05 cmp r2, #5 +1000ccb6: d80a bhi.n 1000ccce +1000ccb8: e8df f002 tbb [pc, r2] +1000ccbc: 25160b03 .word 0x25160b03 +1000ccc0: 2d2a .short 0x2d2a +1000ccc2: 2c20 cmp r4, #32 +1000ccc4: d003 beq.n 1000ccce +1000ccc6: 2201 movs r2, #1 +1000ccc8: 600b str r3, [r1, #0] +1000ccca: 3001 adds r0, #1 +1000cccc: 3104 adds r1, #4 +1000ccce: 3301 adds r3, #1 +1000ccd0: e7e2 b.n 1000cc98 +1000ccd2: 2c20 cmp r4, #32 +1000ccd4: d102 bne.n 1000ccdc +1000ccd6: 701d strb r5, [r3, #0] +1000ccd8: 2202 movs r2, #2 +1000ccda: e7f8 b.n 1000ccce +1000ccdc: 2c3d cmp r4, #61 ; 0x3d +1000ccde: d1f6 bne.n 1000ccce +1000cce0: 701d strb r5, [r3, #0] +1000cce2: 2202 movs r2, #2 +1000cce4: 272c movs r7, #44 ; 0x2c +1000cce6: e7f2 b.n 1000ccce +1000cce8: 2c20 cmp r4, #32 +1000ccea: d101 bne.n 1000ccf0 +1000ccec: 701d strb r5, [r3, #0] +1000ccee: e7ee b.n 1000ccce +1000ccf0: 2c22 cmp r4, #34 ; 0x22 +1000ccf2: d001 beq.n 1000ccf8 +1000ccf4: 2c27 cmp r4, #39 ; 0x27 +1000ccf6: d103 bne.n 1000cd00 +1000ccf8: 701d strb r5, [r3, #0] +1000ccfa: 4626 mov r6, r4 +1000ccfc: 2204 movs r2, #4 +1000ccfe: e7e6 b.n 1000ccce +1000cd00: 600b str r3, [r1, #0] +1000cd02: 3001 adds r0, #1 +1000cd04: 3104 adds r1, #4 +1000cd06: 781a ldrb r2, [r3, #0] +1000cd08: 42ba cmp r2, r7 +1000cd0a: d0e4 beq.n 1000ccd6 +1000cd0c: 2203 movs r2, #3 +1000cd0e: e7de b.n 1000ccce +1000cd10: 600b str r3, [r1, #0] +1000cd12: 3001 adds r0, #1 +1000cd14: 3104 adds r1, #4 +1000cd16: 781a ldrb r2, [r3, #0] +1000cd18: 42b2 cmp r2, r6 +1000cd1a: d101 bne.n 1000cd20 +1000cd1c: 701d strb r5, [r3, #0] +1000cd1e: e7f5 b.n 1000cd0c +1000cd20: 2205 movs r2, #5 +1000cd22: e7d4 b.n 1000ccce + +1000cd24 : +1000cd24: 2000 movs r0, #0 +1000cd26: 4770 bx lr + +1000cd28 : +1000cd28: 2000 movs r0, #0 +1000cd2a: 4770 bx lr + +1000cd2c : +1000cd2c: 4770 bx lr + ... + +1000cd30 : +1000cd30: 4b03 ldr r3, [pc, #12] ; (1000cd40 ) +1000cd32: 681b ldr r3, [r3, #0] +1000cd34: b113 cbz r3, 1000cd3c +1000cd36: 2220 movs r2, #32 +1000cd38: 4b02 ldr r3, [pc, #8] ; (1000cd44 ) +1000cd3a: 601a str r2, [r3, #0] +1000cd3c: 4770 bx lr +1000cd3e: bf00 nop +1000cd40: 1004a7e8 .word 0x1004a7e8 +1000cd44: 1004a7ec .word 0x1004a7ec + +1000cd48 : +1000cd48: 229f movs r2, #159 ; 0x9f +1000cd4a: 4b04 ldr r3, [pc, #16] ; (1000cd5c ) +1000cd4c: 601a str r2, [r3, #0] +1000cd4e: 4b04 ldr r3, [pc, #16] ; (1000cd60 ) +1000cd50: 6818 ldr r0, [r3, #0] +1000cd52: b110 cbz r0, 1000cd5a +1000cd54: 3038 adds r0, #56 ; 0x38 +1000cd56: f00a bbaf b.w 100174b8 +1000cd5a: 4770 bx lr +1000cd5c: 1004a7ec .word 0x1004a7ec +1000cd60: 1004a7e8 .word 0x1004a7e8 + +1000cd64 : +1000cd64: 4b16 ldr r3, [pc, #88] ; (1000cdc0 ) +1000cd66: 6818 ldr r0, [r3, #0] +1000cd68: b310 cbz r0, 1000cdb0 +1000cd6a: 6a83 ldr r3, [r0, #40] ; 0x28 +1000cd6c: b94b cbnz r3, 1000cd82 +1000cd6e: 4b15 ldr r3, [pc, #84] ; (1000cdc4 ) +1000cd70: 681b ldr r3, [r3, #0] +1000cd72: 2b20 cmp r3, #32 +1000cd74: d102 bne.n 1000cd7c +1000cd76: 2201 movs r2, #1 +1000cd78: 4b13 ldr r3, [pc, #76] ; (1000cdc8 ) +1000cd7a: 701a strb r2, [r3, #0] +1000cd7c: 3038 adds r0, #56 ; 0x38 +1000cd7e: f00a bb9b b.w 100174b8 +1000cd82: 2b01 cmp r3, #1 +1000cd84: d107 bne.n 1000cd96 +1000cd86: 4b0f ldr r3, [pc, #60] ; (1000cdc4 ) +1000cd88: 681b ldr r3, [r3, #0] +1000cd8a: 2b20 cmp r3, #32 +1000cd8c: d0f3 beq.n 1000cd76 +1000cd8e: 2b00 cmp r3, #0 +1000cd90: d1f4 bne.n 1000cd7c +1000cd92: 2202 movs r2, #2 +1000cd94: e7f0 b.n 1000cd78 +1000cd96: 4a0d ldr r2, [pc, #52] ; (1000cdcc ) +1000cd98: 4293 cmp r3, r2 +1000cd9a: d1ef bne.n 1000cd7c +1000cd9c: 4b09 ldr r3, [pc, #36] ; (1000cdc4 ) +1000cd9e: 681b ldr r3, [r3, #0] +1000cda0: 2b20 cmp r3, #32 +1000cda2: d0e8 beq.n 1000cd76 +1000cda4: 2b00 cmp r3, #0 +1000cda6: d0f4 beq.n 1000cd92 +1000cda8: 2b1f cmp r3, #31 +1000cdaa: d1e7 bne.n 1000cd7c +1000cdac: 2203 movs r2, #3 +1000cdae: e7e3 b.n 1000cd78 +1000cdb0: 4b05 ldr r3, [pc, #20] ; (1000cdc8 ) +1000cdb2: f993 2000 ldrsb.w r2, [r3] +1000cdb6: b912 cbnz r2, 1000cdbe +1000cdb8: 2205 movs r2, #5 +1000cdba: 701a strb r2, [r3, #0] +1000cdbc: 4770 bx lr +1000cdbe: 4770 bx lr +1000cdc0: 1004a7e8 .word 0x1004a7e8 +1000cdc4: 1004a7ec .word 0x1004a7ec +1000cdc8: 10044d5c .word 0x10044d5c +1000cdcc: 00400004 .word 0x00400004 + +1000cdd0 : +1000cdd0: 4b09 ldr r3, [pc, #36] ; (1000cdf8 ) +1000cdd2: 6818 ldr r0, [r3, #0] +1000cdd4: b170 cbz r0, 1000cdf4 +1000cdd6: 6a83 ldr r3, [r0, #40] ; 0x28 +1000cdd8: 2b01 cmp r3, #1 +1000cdda: d805 bhi.n 1000cde8 +1000cddc: 221f movs r2, #31 +1000cdde: 4b07 ldr r3, [pc, #28] ; (1000cdfc ) +1000cde0: 3038 adds r0, #56 ; 0x38 +1000cde2: 601a str r2, [r3, #0] +1000cde4: f00a bb68 b.w 100174b8 +1000cde8: 4a05 ldr r2, [pc, #20] ; (1000ce00 ) +1000cdea: 4293 cmp r3, r2 +1000cdec: bf02 ittt eq +1000cdee: 221f moveq r2, #31 +1000cdf0: 4b02 ldreq r3, [pc, #8] ; (1000cdfc ) +1000cdf2: 601a streq r2, [r3, #0] +1000cdf4: 4770 bx lr +1000cdf6: bf00 nop +1000cdf8: 1004a7e8 .word 0x1004a7e8 +1000cdfc: 1004a7ec .word 0x1004a7ec +1000ce00: 00400004 .word 0x00400004 + +1000ce04 : +1000ce04: b5f8 push {r3, r4, r5, r6, r7, lr} +1000ce06: 2300 movs r3, #0 +1000ce08: 4c55 ldr r4, [pc, #340] ; (1000cf60 ) +1000ce0a: 4605 mov r5, r0 +1000ce0c: 6826 ldr r6, [r4, #0] +1000ce0e: 7c20 ldrb r0, [r4, #16] +1000ce10: 4283 cmp r3, r0 +1000ce12: db2c blt.n 1000ce6e +1000ce14: 3001 adds r0, #1 +1000ce16: 7c63 ldrb r3, [r4, #17] +1000ce18: b2c0 uxtb r0, r0 +1000ce1a: 4298 cmp r0, r3 +1000ce1c: 7420 strb r0, [r4, #16] +1000ce1e: d975 bls.n 1000cf0c +1000ce20: f06f 4740 mvn.w r7, #3221225472 ; 0xc0000000 +1000ce24: 7423 strb r3, [r4, #16] +1000ce26: 443b add r3, r7 +1000ce28: 6829 ldr r1, [r5, #0] +1000ce2a: f856 0023 ldr.w r0, [r6, r3, lsl #2] +1000ce2e: f9b1 2028 ldrsh.w r2, [r1, #40] ; 0x28 +1000ce32: f9b0 3028 ldrsh.w r3, [r0, #40] ; 0x28 +1000ce36: 429a cmp r2, r3 +1000ce38: f340 8090 ble.w 1000cf5c +1000ce3c: 223e movs r2, #62 ; 0x3e +1000ce3e: f00a faf7 bl 10017430 +1000ce42: 7c63 ldrb r3, [r4, #17] +1000ce44: 6822 ldr r2, [r4, #0] +1000ce46: 443b add r3, r7 +1000ce48: f852 2023 ldr.w r2, [r2, r3, lsl #2] +1000ce4c: 2000 movs r0, #0 +1000ce4e: 7c23 ldrb r3, [r4, #16] +1000ce50: 6826 ldr r6, [r4, #0] +1000ce52: 3b01 subs r3, #1 +1000ce54: 4298 cmp r0, r3 +1000ce56: db63 blt.n 1000cf20 +1000ce58: 2a00 cmp r2, #0 +1000ce5a: d176 bne.n 1000cf4a +1000ce5c: 233e movs r3, #62 ; 0x3e +1000ce5e: 7c22 ldrb r2, [r4, #16] +1000ce60: 4353 muls r3, r2 +1000ce62: 6862 ldr r2, [r4, #4] +1000ce64: 3b3e subs r3, #62 ; 0x3e +1000ce66: 4413 add r3, r2 +1000ce68: f846 3020 str.w r3, [r6, r0, lsl #2] +1000ce6c: e06f b.n 1000cf4e +1000ce6e: f856 1023 ldr.w r1, [r6, r3, lsl #2] +1000ce72: 682a ldr r2, [r5, #0] +1000ce74: f891 e022 ldrb.w lr, [r1, #34] ; 0x22 +1000ce78: f892 7022 ldrb.w r7, [r2, #34] ; 0x22 +1000ce7c: 45be cmp lr, r7 +1000ce7e: d143 bne.n 1000cf08 +1000ce80: f891 e023 ldrb.w lr, [r1, #35] ; 0x23 +1000ce84: f892 7023 ldrb.w r7, [r2, #35] ; 0x23 +1000ce88: 45be cmp lr, r7 +1000ce8a: d13d bne.n 1000cf08 +1000ce8c: f891 e024 ldrb.w lr, [r1, #36] ; 0x24 +1000ce90: f892 7024 ldrb.w r7, [r2, #36] ; 0x24 +1000ce94: 45be cmp lr, r7 +1000ce96: d137 bne.n 1000cf08 +1000ce98: f891 e025 ldrb.w lr, [r1, #37] ; 0x25 +1000ce9c: f892 7025 ldrb.w r7, [r2, #37] ; 0x25 +1000cea0: 45be cmp lr, r7 +1000cea2: d131 bne.n 1000cf08 +1000cea4: f891 e026 ldrb.w lr, [r1, #38] ; 0x26 +1000cea8: f892 7026 ldrb.w r7, [r2, #38] ; 0x26 +1000ceac: 45be cmp lr, r7 +1000ceae: d12b bne.n 1000cf08 +1000ceb0: f891 e027 ldrb.w lr, [r1, #39] ; 0x27 +1000ceb4: f892 7027 ldrb.w r7, [r2, #39] ; 0x27 +1000ceb8: 45be cmp lr, r7 +1000ceba: d125 bne.n 1000cf08 +1000cebc: f9b2 0028 ldrsh.w r0, [r2, #40] ; 0x28 +1000cec0: f9b1 2028 ldrsh.w r2, [r1, #40] ; 0x28 +1000cec4: 4290 cmp r0, r2 +1000cec6: dd0b ble.n 1000cee0 +1000cec8: 1e5a subs r2, r3, #1 +1000ceca: eb06 0383 add.w r3, r6, r3, lsl #2 +1000cece: 1c50 adds r0, r2, #1 +1000ced0: d10d bne.n 1000ceee +1000ced2: 3201 adds r2, #1 +1000ced4: f846 1022 str.w r1, [r6, r2, lsl #2] +1000ced8: 682b ldr r3, [r5, #0] +1000ceda: f9b3 3028 ldrsh.w r3, [r3, #40] ; 0x28 +1000cede: 850b strh r3, [r1, #40] ; 0x28 +1000cee0: 6828 ldr r0, [r5, #0] +1000cee2: 223e movs r2, #62 ; 0x3e +1000cee4: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +1000cee8: 2100 movs r1, #0 +1000ceea: f00d be75 b.w 1001abd8 +1000ceee: f853 0c04 ldr.w r0, [r3, #-4] +1000cef2: 682c ldr r4, [r5, #0] +1000cef4: f9b0 7028 ldrsh.w r7, [r0, #40] ; 0x28 +1000cef8: f9b4 4028 ldrsh.w r4, [r4, #40] ; 0x28 +1000cefc: 42a7 cmp r7, r4 +1000cefe: dae8 bge.n 1000ced2 +1000cf00: f843 0904 str.w r0, [r3], #-4 +1000cf04: 3a01 subs r2, #1 +1000cf06: e7e2 b.n 1000cece +1000cf08: 3301 adds r3, #1 +1000cf0a: e781 b.n 1000ce10 +1000cf0c: 223e movs r2, #62 ; 0x3e +1000cf0e: 4350 muls r0, r2 +1000cf10: 6863 ldr r3, [r4, #4] +1000cf12: 383e subs r0, #62 ; 0x3e +1000cf14: 6829 ldr r1, [r5, #0] +1000cf16: 4418 add r0, r3 +1000cf18: f00a fa8a bl 10017430 +1000cf1c: 2200 movs r2, #0 +1000cf1e: e795 b.n 1000ce4c +1000cf20: 682f ldr r7, [r5, #0] +1000cf22: f856 1020 ldr.w r1, [r6, r0, lsl #2] +1000cf26: f9b7 7028 ldrsh.w r7, [r7, #40] ; 0x28 +1000cf2a: f9b1 1028 ldrsh.w r1, [r1, #40] ; 0x28 +1000cf2e: 428f cmp r7, r1 +1000cf30: dd09 ble.n 1000cf46 +1000cf32: eb06 0183 add.w r1, r6, r3, lsl #2 +1000cf36: f851 7c04 ldr.w r7, [r1, #-4] +1000cf3a: 3b01 subs r3, #1 +1000cf3c: 4298 cmp r0, r3 +1000cf3e: f841 7904 str.w r7, [r1], #-4 +1000cf42: dbf8 blt.n 1000cf36 +1000cf44: e788 b.n 1000ce58 +1000cf46: 3001 adds r0, #1 +1000cf48: e784 b.n 1000ce54 +1000cf4a: f846 2020 str.w r2, [r6, r0, lsl #2] +1000cf4e: 6828 ldr r0, [r5, #0] +1000cf50: 223e movs r2, #62 ; 0x3e +1000cf52: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +1000cf56: 2100 movs r1, #0 +1000cf58: f00a ba7a b.w 10017450 +1000cf5c: bdf8 pop {r3, r4, r5, r6, r7, pc} +1000cf5e: bf00 nop +1000cf60: 1004a7f0 .word 0x1004a7f0 + +1000cf64 : +1000cf64: 4770 bx lr + ... + +1000cf68 : +1000cf68: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1000cf6c: b0a3 sub sp, #140 ; 0x8c +1000cf6e: f10d 0a44 add.w sl, sp, #68 ; 0x44 +1000cf72: 4dac ldr r5, [pc, #688] ; (1000d224 ) +1000cf74: 900d str r0, [sp, #52] ; 0x34 +1000cf76: 910f str r1, [sp, #60] ; 0x3c +1000cf78: 4691 mov r9, r2 +1000cf7a: 2100 movs r1, #0 +1000cf7c: 220e movs r2, #14 +1000cf7e: 4650 mov r0, sl +1000cf80: 461f mov r7, r3 +1000cf82: f8dd 80b0 ldr.w r8, [sp, #176] ; 0xb0 +1000cf86: 9e2e ldr r6, [sp, #184] ; 0xb8 +1000cf88: f030 fe4c bl 1003dc24 +1000cf8c: 682b ldr r3, [r5, #0] +1000cf8e: f413 7f40 tst.w r3, #768 ; 0x300 +1000cf92: f040 81f4 bne.w 1000d37e +1000cf96: f1b9 0f00 cmp.w r9, #0 +1000cf9a: d04e beq.n 1000d03a +1000cf9c: 4648 mov r0, r9 +1000cf9e: f00d fe2b bl 1001abf8 +1000cfa2: 2820 cmp r0, #32 +1000cfa4: bfa8 it ge +1000cfa6: 2020 movge r0, #32 +1000cfa8: 4683 mov fp, r0 +1000cfaa: f1b8 0f00 cmp.w r8, #0 +1000cfae: d046 beq.n 1000d03e +1000cfb0: 4640 mov r0, r8 +1000cfb2: f00d fe21 bl 1001abf8 +1000cfb6: 2840 cmp r0, #64 ; 0x40 +1000cfb8: bfa8 it ge +1000cfba: 2040 movge r0, #64 ; 0x40 +1000cfbc: 4604 mov r4, r0 +1000cfbe: 2300 movs r3, #0 +1000cfc0: 2105 movs r1, #5 +1000cfc2: 602b str r3, [r5, #0] +1000cfc4: 4b98 ldr r3, [pc, #608] ; (1000d228 ) +1000cfc6: 203c movs r0, #60 ; 0x3c +1000cfc8: 7019 strb r1, [r3, #0] +1000cfca: 930e str r3, [sp, #56] ; 0x38 +1000cfcc: f00a fc00 bl 100177d0 +1000cfd0: 4605 mov r5, r0 +1000cfd2: 2800 cmp r0, #0 +1000cfd4: f000 81d6 beq.w 1000d384 +1000cfd8: f1bb 0f00 cmp.w fp, #0 +1000cfdc: d008 beq.n 1000cff0 +1000cfde: f1b9 0f00 cmp.w r9, #0 +1000cfe2: d005 beq.n 1000cff0 +1000cfe4: f800 bb01 strb.w fp, [r0], #1 +1000cfe8: 465a mov r2, fp +1000cfea: 4649 mov r1, r9 +1000cfec: f00a fa20 bl 10017430 +1000cff0: 9b0d ldr r3, [sp, #52] ; 0x34 +1000cff2: b12b cbz r3, 1000d000 +1000cff4: 2206 movs r2, #6 +1000cff6: 4619 mov r1, r3 +1000cff8: f105 0022 add.w r0, r5, #34 ; 0x22 +1000cffc: f00a fa18 bl 10017430 +1000d000: 2305 movs r3, #5 +1000d002: 9a0e ldr r2, [sp, #56] ; 0x38 +1000d004: 7013 strb r3, [r2, #0] +1000d006: f1a4 0308 sub.w r3, r4, #8 +1000d00a: 2b38 cmp r3, #56 ; 0x38 +1000d00c: d919 bls.n 1000d042 +1000d00e: 4b87 ldr r3, [pc, #540] ; (1000d22c ) +1000d010: 429f cmp r7, r3 +1000d012: d00b beq.n 1000d02c +1000d014: 3302 adds r3, #2 +1000d016: 429f cmp r7, r3 +1000d018: d008 beq.n 1000d02c +1000d01a: f503 1300 add.w r3, r3, #2097152 ; 0x200000 +1000d01e: 429f cmp r7, r3 +1000d020: d004 beq.n 1000d02c +1000d022: f027 0204 bic.w r2, r7, #4 +1000d026: 3b02 subs r3, #2 +1000d028: 429a cmp r2, r3 +1000d02a: d10a bne.n 1000d042 +1000d02c: 2303 movs r3, #3 +1000d02e: 2004 movs r0, #4 +1000d030: 9a0e ldr r2, [sp, #56] ; 0x38 +1000d032: 7013 strb r3, [r2, #0] +1000d034: b023 add sp, #140 ; 0x8c +1000d036: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1000d03a: 46cb mov fp, r9 +1000d03c: e7b5 b.n 1000cfaa +1000d03e: 4644 mov r4, r8 +1000d040: e7bd b.n 1000cfbe +1000d042: f427 4300 bic.w r3, r7, #32768 ; 0x8000 +1000d046: 2b01 cmp r3, #1 +1000d048: f040 80bc bne.w 1000d1c4 +1000d04c: f024 0308 bic.w r3, r4, #8 +1000d050: 2b05 cmp r3, #5 +1000d052: f000 80b7 beq.w 1000d1c4 +1000d056: 2c0a cmp r4, #10 +1000d058: d030 beq.n 1000d0bc +1000d05a: 2c1a cmp r4, #26 +1000d05c: d1e6 bne.n 1000d02c +1000d05e: f10d 0954 add.w r9, sp, #84 ; 0x54 +1000d062: 2234 movs r2, #52 ; 0x34 +1000d064: 2100 movs r1, #0 +1000d066: 4648 mov r0, r9 +1000d068: f030 fddc bl 1003dc24 +1000d06c: ab21 add r3, sp, #132 ; 0x84 +1000d06e: 930a str r3, [sp, #40] ; 0x28 +1000d070: ab20 add r3, sp, #128 ; 0x80 +1000d072: 9309 str r3, [sp, #36] ; 0x24 +1000d074: ab1f add r3, sp, #124 ; 0x7c +1000d076: 9308 str r3, [sp, #32] +1000d078: ab1e add r3, sp, #120 ; 0x78 +1000d07a: 9307 str r3, [sp, #28] +1000d07c: ab1d add r3, sp, #116 ; 0x74 +1000d07e: 9306 str r3, [sp, #24] +1000d080: ab1c add r3, sp, #112 ; 0x70 +1000d082: 9305 str r3, [sp, #20] +1000d084: ab1b add r3, sp, #108 ; 0x6c +1000d086: 9304 str r3, [sp, #16] +1000d088: ab1a add r3, sp, #104 ; 0x68 +1000d08a: 9303 str r3, [sp, #12] +1000d08c: ab19 add r3, sp, #100 ; 0x64 +1000d08e: 9302 str r3, [sp, #8] +1000d090: ab18 add r3, sp, #96 ; 0x60 +1000d092: 9301 str r3, [sp, #4] +1000d094: ab17 add r3, sp, #92 ; 0x5c +1000d096: 9300 str r3, [sp, #0] +1000d098: 464a mov r2, r9 +1000d09a: ab16 add r3, sp, #88 ; 0x58 +1000d09c: 4964 ldr r1, [pc, #400] ; (1000d230 ) +1000d09e: 4640 mov r0, r8 +1000d0a0: f030 fe82 bl 1003dda8 +1000d0a4: 2400 movs r4, #0 +1000d0a6: f859 3024 ldr.w r3, [r9, r4, lsl #2] +1000d0aa: f80a 3004 strb.w r3, [sl, r4] +1000d0ae: 3401 adds r4, #1 +1000d0b0: 2c0d cmp r4, #13 +1000d0b2: d1f8 bne.n 1000d0a6 +1000d0b4: 2300 movs r3, #0 +1000d0b6: f88d 3051 strb.w r3, [sp, #81] ; 0x51 +1000d0ba: e01d b.n 1000d0f8 +1000d0bc: f10d 0954 add.w r9, sp, #84 ; 0x54 +1000d0c0: 2214 movs r2, #20 +1000d0c2: 2100 movs r1, #0 +1000d0c4: 4648 mov r0, r9 +1000d0c6: f030 fdad bl 1003dc24 +1000d0ca: ab19 add r3, sp, #100 ; 0x64 +1000d0cc: 9302 str r3, [sp, #8] +1000d0ce: ab18 add r3, sp, #96 ; 0x60 +1000d0d0: 9301 str r3, [sp, #4] +1000d0d2: ab17 add r3, sp, #92 ; 0x5c +1000d0d4: 9300 str r3, [sp, #0] +1000d0d6: 464a mov r2, r9 +1000d0d8: ab16 add r3, sp, #88 ; 0x58 +1000d0da: 4956 ldr r1, [pc, #344] ; (1000d234 ) +1000d0dc: 4640 mov r0, r8 +1000d0de: f030 fe63 bl 1003dda8 +1000d0e2: 2400 movs r4, #0 +1000d0e4: f859 3024 ldr.w r3, [r9, r4, lsl #2] +1000d0e8: f80a 3004 strb.w r3, [sl, r4] +1000d0ec: 3401 adds r4, #1 +1000d0ee: 2c05 cmp r4, #5 +1000d0f0: d1f8 bne.n 1000d0e4 +1000d0f2: 2300 movs r3, #0 +1000d0f4: f88d 3049 strb.w r3, [sp, #73] ; 0x49 +1000d0f8: f04f 0901 mov.w r9, #1 +1000d0fc: 632c str r4, [r5, #48] ; 0x30 +1000d0fe: b16c cbz r4, 1000d11c +1000d100: 1c60 adds r0, r4, #1 +1000d102: f00a fb65 bl 100177d0 +1000d106: 62e8 str r0, [r5, #44] ; 0x2c +1000d108: 2800 cmp r0, #0 +1000d10a: f000 811a beq.w 1000d342 +1000d10e: 4622 mov r2, r4 +1000d110: f1b9 0f00 cmp.w r9, #0 +1000d114: d159 bne.n 1000d1ca +1000d116: 4641 mov r1, r8 +1000d118: f00a f98a bl 10017430 +1000d11c: 9b2d ldr r3, [sp, #180] ; 0xb4 +1000d11e: 62af str r7, [r5, #40] ; 0x28 +1000d120: 636b str r3, [r5, #52] ; 0x34 +1000d122: 2e00 cmp r6, #0 +1000d124: d153 bne.n 1000d1ce +1000d126: 4631 mov r1, r6 +1000d128: f105 0038 add.w r0, r5, #56 ; 0x38 +1000d12c: f00a f9b4 bl 10017498 +1000d130: 6bab ldr r3, [r5, #56] ; 0x38 +1000d132: 2b00 cmp r3, #0 +1000d134: f000 811e beq.w 1000d374 +1000d138: 9310 str r3, [sp, #64] ; 0x40 +1000d13a: 2200 movs r2, #0 +1000d13c: 493e ldr r1, [pc, #248] ; (1000d238 ) +1000d13e: 200e movs r0, #14 +1000d140: f000 fa34 bl 1000d5ac +1000d144: 2200 movs r2, #0 +1000d146: 493d ldr r1, [pc, #244] ; (1000d23c ) +1000d148: 4610 mov r0, r2 +1000d14a: f000 fa2f bl 1000d5ac +1000d14e: 2200 movs r2, #0 +1000d150: 493b ldr r1, [pc, #236] ; (1000d240 ) +1000d152: 2001 movs r0, #1 +1000d154: f000 fa2a bl 1000d5ac +1000d158: 2200 movs r2, #0 +1000d15a: 493a ldr r1, [pc, #232] ; (1000d244 ) +1000d15c: 2002 movs r0, #2 +1000d15e: f000 fa25 bl 1000d5ac +1000d162: f000 fa7b bl 1000d65c +1000d166: b120 cbz r0, 1000d172 +1000d168: 2200 movs r2, #0 +1000d16a: 4611 mov r1, r2 +1000d16c: 4610 mov r0, r2 +1000d16e: f000 fa73 bl 1000d658 +1000d172: 6aab ldr r3, [r5, #40] ; 0x28 +1000d174: 4a34 ldr r2, [pc, #208] ; (1000d248 ) +1000d176: 4293 cmp r3, r2 +1000d178: d07a beq.n 1000d270 +1000d17a: dc4c bgt.n 1000d216 +1000d17c: 2b01 cmp r3, #1 +1000d17e: f000 80b6 beq.w 1000d2ee +1000d182: dc26 bgt.n 1000d1d2 +1000d184: 2b00 cmp r3, #0 +1000d186: f000 8083 beq.w 1000d290 +1000d18a: 4a30 ldr r2, [pc, #192] ; (1000d24c ) +1000d18c: 4619 mov r1, r3 +1000d18e: 4830 ldr r0, [pc, #192] ; (1000d250 ) +1000d190: f00d fcf6 bl 1001ab80 +1000d194: 4b2f ldr r3, [pc, #188] ; (1000d254 ) +1000d196: 601d str r5, [r3, #0] +1000d198: 2e00 cmp r6, #0 +1000d19a: f040 80ee bne.w 1000d37a +1000d19e: f643 2198 movw r1, #15000 ; 0x3a98 +1000d1a2: f105 0038 add.w r0, r5, #56 ; 0x38 +1000d1a6: f00a f997 bl 100174d8 +1000d1aa: 2800 cmp r0, #0 +1000d1ac: f040 80b9 bne.w 1000d322 +1000d1b0: 4829 ldr r0, [pc, #164] ; (1000d258 ) +1000d1b2: f00d fce5 bl 1001ab80 +1000d1b6: b11c cbz r4, 1000d1c0 +1000d1b8: 4631 mov r1, r6 +1000d1ba: 6ae8 ldr r0, [r5, #44] ; 0x2c +1000d1bc: f00a f935 bl 1001742a +1000d1c0: 2402 movs r4, #2 +1000d1c2: e0ba b.n 1000d33a +1000d1c4: f04f 0900 mov.w r9, #0 +1000d1c8: e798 b.n 1000d0fc +1000d1ca: 4651 mov r1, sl +1000d1cc: e7a4 b.n 1000d118 +1000d1ce: 63ae str r6, [r5, #56] ; 0x38 +1000d1d0: e7b3 b.n 1000d13a +1000d1d2: f248 0201 movw r2, #32769 ; 0x8001 +1000d1d6: 4293 cmp r3, r2 +1000d1d8: f000 8089 beq.w 1000d2ee +1000d1dc: 4a13 ldr r2, [pc, #76] ; (1000d22c ) +1000d1de: 4293 cmp r3, r2 +1000d1e0: d1d3 bne.n 1000d18a +1000d1e2: 2201 movs r2, #1 +1000d1e4: 2106 movs r1, #6 +1000d1e6: 481d ldr r0, [pc, #116] ; (1000d25c ) +1000d1e8: f000 fa97 bl 1000d71a +1000d1ec: 4603 mov r3, r0 +1000d1ee: 2800 cmp r0, #0 +1000d1f0: d1d0 bne.n 1000d194 +1000d1f2: 4602 mov r2, r0 +1000d1f4: 2102 movs r1, #2 +1000d1f6: 9004 str r0, [sp, #16] +1000d1f8: 9003 str r0, [sp, #12] +1000d1fa: 9002 str r0, [sp, #8] +1000d1fc: 9001 str r0, [sp, #4] +1000d1fe: 9000 str r0, [sp, #0] +1000d200: 4816 ldr r0, [pc, #88] ; (1000d25c ) +1000d202: f000 faa1 bl 1000d748 +1000d206: 2800 cmp r0, #0 +1000d208: d1c4 bne.n 1000d194 +1000d20a: 8e2a ldrh r2, [r5, #48] ; 0x30 +1000d20c: 6ae9 ldr r1, [r5, #44] ; 0x2c +1000d20e: 4813 ldr r0, [pc, #76] ; (1000d25c ) +1000d210: f000 fb19 bl 1000d846 +1000d214: e046 b.n 1000d2a4 +1000d216: 4a12 ldr r2, [pc, #72] ; (1000d260 ) +1000d218: 4293 cmp r3, r2 +1000d21a: d029 beq.n 1000d270 +1000d21c: dc22 bgt.n 1000d264 +1000d21e: 3a02 subs r2, #2 +1000d220: e7dd b.n 1000d1de +1000d222: bf00 nop +1000d224: 1004a7ec .word 0x1004a7ec +1000d228: 10044d5c .word 0x10044d5c +1000d22c: 00200002 .word 0x00200002 +1000d230: 1003fb52 .word 0x1003fb52 +1000d234: 1003fb72 .word 0x1003fb72 +1000d238: 1000cd31 .word 0x1000cd31 +1000d23c: 1000cdd1 .word 0x1000cdd1 +1000d240: 1000cd65 .word 0x1000cd65 +1000d244: 1000cd49 .word 0x1000cd49 +1000d248: 00200004 .word 0x00200004 +1000d24c: 1003fb3f .word 0x1003fb3f +1000d250: 1003fb8d .word 0x1003fb8d +1000d254: 1004a7e8 .word 0x1004a7e8 +1000d258: 1003fbb8 .word 0x1003fbb8 +1000d25c: 1003fb87 .word 0x1003fb87 +1000d260: 00400004 .word 0x00400004 +1000d264: 4a49 ldr r2, [pc, #292] ; (1000d38c ) +1000d266: 4293 cmp r3, r2 +1000d268: d002 beq.n 1000d270 +1000d26a: f5b3 0fc0 cmp.w r3, #6291456 ; 0x600000 +1000d26e: d18c bne.n 1000d18a +1000d270: 2201 movs r2, #1 +1000d272: 2106 movs r1, #6 +1000d274: 4846 ldr r0, [pc, #280] ; (1000d390 ) +1000d276: f000 fa50 bl 1000d71a +1000d27a: 4603 mov r3, r0 +1000d27c: 2800 cmp r0, #0 +1000d27e: d189 bne.n 1000d194 +1000d280: 9004 str r0, [sp, #16] +1000d282: 9003 str r0, [sp, #12] +1000d284: 9002 str r0, [sp, #8] +1000d286: 9001 str r0, [sp, #4] +1000d288: 9000 str r0, [sp, #0] +1000d28a: 4602 mov r2, r0 +1000d28c: 2103 movs r1, #3 +1000d28e: e7b7 b.n 1000d200 +1000d290: 461a mov r2, r3 +1000d292: 4619 mov r1, r3 +1000d294: 9304 str r3, [sp, #16] +1000d296: 9303 str r3, [sp, #12] +1000d298: 9302 str r3, [sp, #8] +1000d29a: 9301 str r3, [sp, #4] +1000d29c: 9300 str r3, [sp, #0] +1000d29e: 483c ldr r0, [pc, #240] ; (1000d390 ) +1000d2a0: f000 fa52 bl 1000d748 +1000d2a4: 4607 mov r7, r0 +1000d2a6: 2800 cmp r0, #0 +1000d2a8: f47f af74 bne.w 1000d194 +1000d2ac: 9b0f ldr r3, [sp, #60] ; 0x3c +1000d2ae: b38b cbz r3, 1000d314 +1000d2b0: f10d 0854 add.w r8, sp, #84 ; 0x54 +1000d2b4: 9015 str r0, [sp, #84] ; 0x54 +1000d2b6: f8c8 0004 str.w r0, [r8, #4] +1000d2ba: f8c8 0008 str.w r0, [r8, #8] +1000d2be: 2206 movs r2, #6 +1000d2c0: f105 0122 add.w r1, r5, #34 ; 0x22 +1000d2c4: 4640 mov r0, r8 +1000d2c6: f00d fc83 bl 1001abd0 +1000d2ca: 463b mov r3, r7 +1000d2cc: f818 2007 ldrb.w r2, [r8, r7] +1000d2d0: 3701 adds r7, #1 +1000d2d2: 4413 add r3, r2 +1000d2d4: 2f06 cmp r7, #6 +1000d2d6: b29b uxth r3, r3 +1000d2d8: d1f8 bne.n 1000d2cc +1000d2da: f240 52fa movw r2, #1530 ; 0x5fa +1000d2de: 4293 cmp r3, r2 +1000d2e0: d018 beq.n 1000d314 +1000d2e2: b1bb cbz r3, 1000d314 +1000d2e4: 4641 mov r1, r8 +1000d2e6: 482a ldr r0, [pc, #168] ; (1000d390 ) +1000d2e8: f000 f9e2 bl 1000d6b0 +1000d2ec: e752 b.n 1000d194 +1000d2ee: 2202 movs r2, #2 +1000d2f0: 2106 movs r1, #6 +1000d2f2: 4827 ldr r0, [pc, #156] ; (1000d390 ) +1000d2f4: f000 fa11 bl 1000d71a +1000d2f8: 4602 mov r2, r0 +1000d2fa: 2800 cmp r0, #0 +1000d2fc: f47f af4a bne.w 1000d194 +1000d300: 2101 movs r1, #1 +1000d302: 8e2b ldrh r3, [r5, #48] ; 0x30 +1000d304: 9304 str r3, [sp, #16] +1000d306: 6aeb ldr r3, [r5, #44] ; 0x2c +1000d308: 9002 str r0, [sp, #8] +1000d30a: 9303 str r3, [sp, #12] +1000d30c: 9001 str r0, [sp, #4] +1000d30e: 9100 str r1, [sp, #0] +1000d310: 6b6b ldr r3, [r5, #52] ; 0x34 +1000d312: e7c4 b.n 1000d29e +1000d314: 4629 mov r1, r5 +1000d316: 481e ldr r0, [pc, #120] ; (1000d390 ) +1000d318: f811 2b01 ldrb.w r2, [r1], #1 +1000d31c: f000 f9ae bl 1000d67c +1000d320: e738 b.n 1000d194 +1000d322: 6b2b ldr r3, [r5, #48] ; 0x30 +1000d324: b11b cbz r3, 1000d32e +1000d326: 4631 mov r1, r6 +1000d328: 6ae8 ldr r0, [r5, #44] ; 0x2c +1000d32a: f00a f87e bl 1001742a +1000d32e: f029 ffdd bl 100372ec +1000d332: 3000 adds r0, #0 +1000d334: bf18 it ne +1000d336: 2001 movne r0, #1 +1000d338: 4244 negs r4, r0 +1000d33a: a810 add r0, sp, #64 ; 0x40 +1000d33c: f00a f8b4 bl 100174a8 +1000d340: e003 b.n 1000d34a +1000d342: f06f 041a mvn.w r4, #26 +1000d346: 2e00 cmp r6, #0 +1000d348: d0f7 beq.n 1000d33a +1000d34a: 2600 movs r6, #0 +1000d34c: 4b11 ldr r3, [pc, #68] ; (1000d394 ) +1000d34e: 4631 mov r1, r6 +1000d350: 4628 mov r0, r5 +1000d352: 601e str r6, [r3, #0] +1000d354: f00a f869 bl 1001742a +1000d358: 490f ldr r1, [pc, #60] ; (1000d398 ) +1000d35a: 4630 mov r0, r6 +1000d35c: f000 f94e bl 1000d5fc +1000d360: 490e ldr r1, [pc, #56] ; (1000d39c ) +1000d362: 200e movs r0, #14 +1000d364: f000 f94a bl 1000d5fc +1000d368: 2002 movs r0, #2 +1000d36a: 490d ldr r1, [pc, #52] ; (1000d3a0 ) +1000d36c: f000 f946 bl 1000d5fc +1000d370: 4620 mov r0, r4 +1000d372: e65f b.n 1000d034 +1000d374: f06f 0415 mvn.w r4, #21 +1000d378: e7df b.n 1000d33a +1000d37a: 2400 movs r4, #0 +1000d37c: e7e5 b.n 1000d34a +1000d37e: f04f 30ff mov.w r0, #4294967295 +1000d382: e657 b.n 1000d034 +1000d384: f06f 001a mvn.w r0, #26 +1000d388: e654 b.n 1000d034 +1000d38a: bf00 nop +1000d38c: 00400006 .word 0x00400006 +1000d390: 1003fb87 .word 0x1003fb87 +1000d394: 1004a7e8 .word 0x1004a7e8 +1000d398: 1000cdd1 .word 0x1000cdd1 +1000d39c: 1000cd31 .word 0x1000cd31 +1000d3a0: 1000cd49 .word 0x1000cd49 + +1000d3a4 : +1000d3a4: b513 push {r0, r1, r4, lr} +1000d3a6: 2301 movs r3, #1 +1000d3a8: 2400 movs r4, #0 +1000d3aa: 4669 mov r1, sp +1000d3ac: 4808 ldr r0, [pc, #32] ; (1000d3d0 ) +1000d3ae: 9401 str r4, [sp, #4] +1000d3b0: 9400 str r4, [sp, #0] +1000d3b2: f88d 3005 strb.w r3, [sp, #5] +1000d3b6: f000 f97b bl 1000d6b0 +1000d3ba: 42a0 cmp r0, r4 +1000d3bc: da06 bge.n 1000d3cc +1000d3be: 4805 ldr r0, [pc, #20] ; (1000d3d4 ) +1000d3c0: f00d fbde bl 1001ab80 +1000d3c4: f04f 30ff mov.w r0, #4294967295 +1000d3c8: b002 add sp, #8 +1000d3ca: bd10 pop {r4, pc} +1000d3cc: 4620 mov r0, r4 +1000d3ce: e7fb b.n 1000d3c8 +1000d3d0: 1003fb87 .word 0x1003fb87 +1000d3d4: 1003fbd3 .word 0x1003fbd3 + +1000d3d8 : +1000d3d8: 4601 mov r1, r0 +1000d3da: 4801 ldr r0, [pc, #4] ; (1000d3e0 ) +1000d3dc: f000 ba79 b.w 1000d8d2 +1000d3e0: 1003fb87 .word 0x1003fb87 + +1000d3e4 : +1000d3e4: 4601 mov r1, r0 +1000d3e6: 4801 ldr r0, [pc, #4] ; (1000d3ec ) +1000d3e8: f000 ba85 b.w 1000d8f6 +1000d3ec: 1003fb87 .word 0x1003fb87 + +1000d3f0 : +1000d3f0: b510 push {r4, lr} +1000d3f2: f008 ff1f bl 10016234 +1000d3f6: 4604 mov r4, r0 +1000d3f8: 2000 movs r0, #0 +1000d3fa: f029 ff0b bl 10037214 +1000d3fe: b930 cbnz r0, 1000d40e +1000d400: 2001 movs r0, #1 +1000d402: f029 ff07 bl 10037214 +1000d406: b910 cbnz r0, 1000d40e +1000d408: 4b15 ldr r3, [pc, #84] ; (1000d460 ) +1000d40a: 7018 strb r0, [r3, #0] +1000d40c: bd10 pop {r4, pc} +1000d40e: f007 fd95 bl 10014f3c +1000d412: 2104 movs r1, #4 +1000d414: 2000 movs r0, #0 +1000d416: f000 fb95 bl 1000db44 +1000d41a: 2104 movs r1, #4 +1000d41c: 2001 movs r0, #1 +1000d41e: f000 fb91 bl 1000db44 +1000d422: f029 fd5f bl 10036ee4 +1000d426: 2000 movs r0, #0 +1000d428: f029 fef4 bl 10037214 +1000d42c: b148 cbz r0, 1000d442 +1000d42e: f008 ff01 bl 10016234 +1000d432: 1b00 subs r0, r0, r4 +1000d434: f5b0 6ffa cmp.w r0, #2000 ; 0x7d0 +1000d438: d90d bls.n 1000d456 +1000d43a: 480a ldr r0, [pc, #40] ; (1000d464 ) +1000d43c: f00d fba0 bl 1001ab80 +1000d440: e004 b.n 1000d44c +1000d442: 2001 movs r0, #1 +1000d444: f029 fee6 bl 10037214 +1000d448: 2800 cmp r0, #0 +1000d44a: d1f0 bne.n 1000d42e +1000d44c: 2200 movs r2, #0 +1000d44e: 4b04 ldr r3, [pc, #16] ; (1000d460 ) +1000d450: 2001 movs r0, #1 +1000d452: 701a strb r2, [r3, #0] +1000d454: bd10 pop {r4, pc} +1000d456: 200a movs r0, #10 +1000d458: f008 fffa bl 10016450 +1000d45c: e7e3 b.n 1000d426 +1000d45e: bf00 nop +1000d460: 1004a804 .word 0x1004a804 +1000d464: 1003fc1b .word 0x1003fc1b + +1000d468 : +1000d468: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1000d46c: b087 sub sp, #28 +1000d46e: 468b mov fp, r1 +1000d470: 4615 mov r5, r2 +1000d472: 461e mov r6, r3 +1000d474: f99d a040 ldrsb.w sl, [sp, #64] ; 0x40 +1000d478: 4680 mov r8, r0 +1000d47a: 2800 cmp r0, #0 +1000d47c: d03b beq.n 1000d4f6 +1000d47e: f00d fbbb bl 1001abf8 +1000d482: 2820 cmp r0, #32 +1000d484: bfa8 it ge +1000d486: 2020 movge r0, #32 +1000d488: 4607 mov r7, r0 +1000d48a: 2d00 cmp r5, #0 +1000d48c: d035 beq.n 1000d4fa +1000d48e: 4628 mov r0, r5 +1000d490: f00d fbb2 bl 1001abf8 +1000d494: 2840 cmp r0, #64 ; 0x40 +1000d496: bfa8 it ge +1000d498: 2040 movge r0, #64 ; 0x40 +1000d49a: 4681 mov r9, r0 +1000d49c: 4b2a ldr r3, [pc, #168] ; (1000d548 ) +1000d49e: 4c2b ldr r4, [pc, #172] ; (1000d54c ) +1000d4a0: 781a ldrb r2, [r3, #0] +1000d4a2: 4b2b ldr r3, [pc, #172] ; (1000d550 ) +1000d4a4: 2a03 cmp r2, #3 +1000d4a6: bf08 it eq +1000d4a8: 461c moveq r4, r3 +1000d4aa: f000 f8d7 bl 1000d65c +1000d4ae: b120 cbz r0, 1000d4ba +1000d4b0: 2200 movs r2, #0 +1000d4b2: 4611 mov r1, r2 +1000d4b4: 4610 mov r0, r2 +1000d4b6: f000 f8cf bl 1000d658 +1000d4ba: 2103 movs r1, #3 +1000d4bc: 4620 mov r0, r4 +1000d4be: f000 f9dc bl 1000d87a +1000d4c2: 2800 cmp r0, #0 +1000d4c4: db35 blt.n 1000d532 +1000d4c6: 1e73 subs r3, r6, #1 +1000d4c8: 2b0e cmp r3, #14 +1000d4ca: bf28 it cs +1000d4cc: 2601 movcs r6, #1 +1000d4ce: 4620 mov r0, r4 +1000d4d0: b2f1 uxtb r1, r6 +1000d4d2: f000 fa26 bl 1000d922 +1000d4d6: 2800 cmp r0, #0 +1000d4d8: db2b blt.n 1000d532 +1000d4da: f1bb 0f00 cmp.w fp, #0 +1000d4de: d10e bne.n 1000d4fe +1000d4e0: f1ba 0f00 cmp.w sl, #0 +1000d4e4: d128 bne.n 1000d538 +1000d4e6: 4641 mov r1, r8 +1000d4e8: 4620 mov r0, r4 +1000d4ea: b2ba uxth r2, r7 +1000d4ec: b007 add sp, #28 +1000d4ee: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1000d4f2: f000 b9d4 b.w 1000d89e +1000d4f6: 4607 mov r7, r0 +1000d4f8: e7c7 b.n 1000d48a +1000d4fa: 46a9 mov r9, r5 +1000d4fc: e7ce b.n 1000d49c +1000d4fe: 2201 movs r2, #1 +1000d500: 2106 movs r1, #6 +1000d502: 4620 mov r0, r4 +1000d504: f000 f909 bl 1000d71a +1000d508: b988 cbnz r0, 1000d52e +1000d50a: 9004 str r0, [sp, #16] +1000d50c: 9003 str r0, [sp, #12] +1000d50e: 9002 str r0, [sp, #8] +1000d510: 9001 str r0, [sp, #4] +1000d512: 9000 str r0, [sp, #0] +1000d514: 4603 mov r3, r0 +1000d516: 4602 mov r2, r0 +1000d518: 2103 movs r1, #3 +1000d51a: 4620 mov r0, r4 +1000d51c: f000 f914 bl 1000d748 +1000d520: b928 cbnz r0, 1000d52e +1000d522: fa1f f289 uxth.w r2, r9 +1000d526: 4629 mov r1, r5 +1000d528: 4620 mov r0, r4 +1000d52a: f000 f98c bl 1000d846 +1000d52e: 2800 cmp r0, #0 +1000d530: dad6 bge.n 1000d4e0 +1000d532: b007 add sp, #28 +1000d534: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1000d538: 2101 movs r1, #1 +1000d53a: 4620 mov r0, r4 +1000d53c: f00e ff80 bl 1001c440 +1000d540: 2800 cmp r0, #0 +1000d542: dad0 bge.n 1000d4e6 +1000d544: e7f5 b.n 1000d532 +1000d546: bf00 nop +1000d548: 1004a804 .word 0x1004a804 +1000d54c: 1003fb87 .word 0x1003fb87 +1000d550: 1003fc02 .word 0x1003fc02 + +1000d554 : +1000d554: f020 0302 bic.w r3, r0, #2 +1000d558: 2b01 cmp r3, #1 +1000d55a: d001 beq.n 1000d560 +1000d55c: 280b cmp r0, #11 +1000d55e: d102 bne.n 1000d566 +1000d560: b2c0 uxtb r0, r0 +1000d562: f029 be7d b.w 10037260 +1000d566: f04f 30ff mov.w r0, #4294967295 +1000d56a: 4770 bx lr + +1000d56c : +1000d56c: 280f cmp r0, #15 +1000d56e: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +1000d572: 460d mov r5, r1 +1000d574: 4616 mov r6, r2 +1000d576: 461f mov r7, r3 +1000d578: dc13 bgt.n 1000d5a2 +1000d57a: 2318 movs r3, #24 +1000d57c: 4358 muls r0, r3 +1000d57e: 4b0a ldr r3, [pc, #40] ; (1000d5a8 ) +1000d580: 181c adds r4, r3, r0 +1000d582: 3018 adds r0, #24 +1000d584: eb03 0800 add.w r8, r3, r0 +1000d588: f8d4 9000 ldr.w r9, [r4] +1000d58c: f1b9 0f00 cmp.w r9, #0 +1000d590: d004 beq.n 1000d59c +1000d592: 6863 ldr r3, [r4, #4] +1000d594: 463a mov r2, r7 +1000d596: 4631 mov r1, r6 +1000d598: 4628 mov r0, r5 +1000d59a: 47c8 blx r9 +1000d59c: 3408 adds r4, #8 +1000d59e: 4544 cmp r4, r8 +1000d5a0: d1f2 bne.n 1000d588 +1000d5a2: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1000d5a6: bf00 nop +1000d5a8: 1004a808 .word 0x1004a808 + +1000d5ac : +1000d5ac: 280f cmp r0, #15 +1000d5ae: b570 push {r4, r5, r6, lr} +1000d5b0: d81d bhi.n 1000d5ee +1000d5b2: 2418 movs r4, #24 +1000d5b4: 4344 muls r4, r0 +1000d5b6: 4b10 ldr r3, [pc, #64] ; (1000d5f8 ) +1000d5b8: 191d adds r5, r3, r4 +1000d5ba: 591c ldr r4, [r3, r4] +1000d5bc: b1c4 cbz r4, 1000d5f0 +1000d5be: 68ae ldr r6, [r5, #8] +1000d5c0: b1c6 cbz r6, 1000d5f4 +1000d5c2: 692d ldr r5, [r5, #16] +1000d5c4: b99d cbnz r5, 1000d5ee +1000d5c6: 2502 movs r5, #2 +1000d5c8: 42a1 cmp r1, r4 +1000d5ca: d010 beq.n 1000d5ee +1000d5cc: 2418 movs r4, #24 +1000d5ce: fb04 3400 mla r4, r4, r0, r3 +1000d5d2: 68a6 ldr r6, [r4, #8] +1000d5d4: 42b1 cmp r1, r6 +1000d5d6: d00a beq.n 1000d5ee +1000d5d8: 6924 ldr r4, [r4, #16] +1000d5da: 428c cmp r4, r1 +1000d5dc: d007 beq.n 1000d5ee +1000d5de: eb00 0040 add.w r0, r0, r0, lsl #1 +1000d5e2: 4428 add r0, r5 +1000d5e4: f843 1030 str.w r1, [r3, r0, lsl #3] +1000d5e8: eb03 00c0 add.w r0, r3, r0, lsl #3 +1000d5ec: 6042 str r2, [r0, #4] +1000d5ee: bd70 pop {r4, r5, r6, pc} +1000d5f0: 4625 mov r5, r4 +1000d5f2: e7e9 b.n 1000d5c8 +1000d5f4: 2501 movs r5, #1 +1000d5f6: e7e7 b.n 1000d5c8 +1000d5f8: 1004a808 .word 0x1004a808 + +1000d5fc : +1000d5fc: 280f cmp r0, #15 +1000d5fe: b510 push {r4, lr} +1000d600: d816 bhi.n 1000d630 +1000d602: 2218 movs r2, #24 +1000d604: 4342 muls r2, r0 +1000d606: 4b0d ldr r3, [pc, #52] ; (1000d63c ) +1000d608: 189c adds r4, r3, r2 +1000d60a: 589a ldr r2, [r3, r2] +1000d60c: 4291 cmp r1, r2 +1000d60e: d010 beq.n 1000d632 +1000d610: 68a2 ldr r2, [r4, #8] +1000d612: 4291 cmp r1, r2 +1000d614: d00f beq.n 1000d636 +1000d616: 6922 ldr r2, [r4, #16] +1000d618: 428a cmp r2, r1 +1000d61a: d109 bne.n 1000d630 +1000d61c: 2202 movs r2, #2 +1000d61e: eb00 0040 add.w r0, r0, r0, lsl #1 +1000d622: 4410 add r0, r2 +1000d624: 2200 movs r2, #0 +1000d626: f843 2030 str.w r2, [r3, r0, lsl #3] +1000d62a: eb03 03c0 add.w r3, r3, r0, lsl #3 +1000d62e: 605a str r2, [r3, #4] +1000d630: bd10 pop {r4, pc} +1000d632: 2200 movs r2, #0 +1000d634: e7f3 b.n 1000d61e +1000d636: 2201 movs r2, #1 +1000d638: e7f1 b.n 1000d61e +1000d63a: bf00 nop +1000d63c: 1004a808 .word 0x1004a808 + +1000d640 : +1000d640: f44f 72c0 mov.w r2, #384 ; 0x180 +1000d644: 2100 movs r1, #0 +1000d646: 4801 ldr r0, [pc, #4] ; (1000d64c ) +1000d648: f00d bac6 b.w 1001abd8 +1000d64c: 1004a808 .word 0x1004a808 + +1000d650 : +1000d650: f016 bab6 b.w 10023bc0 <_promisc_deinit> + +1000d654 : +1000d654: f016 badc b.w 10023c10 <_promisc_recv_func> + +1000d658 : +1000d658: f016 bd9e b.w 10024198 <_promisc_set> + +1000d65c : +1000d65c: f016 bde4 b.w 10024228 <_is_promisc_enabled> + +1000d660 : +1000d660: b538 push {r3, r4, r5, lr} +1000d662: 4614 mov r4, r2 +1000d664: 460d mov r5, r1 +1000d666: 2205 movs r2, #5 +1000d668: 4601 mov r1, r0 +1000d66a: 4620 mov r0, r4 +1000d66c: f00d fab0 bl 1001abd0 +1000d670: 4621 mov r1, r4 +1000d672: 4628 mov r0, r5 +1000d674: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1000d678: f029 bd82 b.w 10037180 + +1000d67c : +1000d67c: b570 push {r4, r5, r6, lr} +1000d67e: 4614 mov r4, r2 +1000d680: b088 sub sp, #32 +1000d682: 4605 mov r5, r0 +1000d684: 460e mov r6, r1 +1000d686: 2220 movs r2, #32 +1000d688: 2100 movs r1, #0 +1000d68a: 4668 mov r0, sp +1000d68c: f00d faa4 bl 1001abd8 +1000d690: f8ad 4014 strh.w r4, [sp, #20] +1000d694: 3400 adds r4, #0 +1000d696: bf18 it ne +1000d698: 2401 movne r4, #1 +1000d69a: 466a mov r2, sp +1000d69c: f648 311a movw r1, #35610 ; 0x8b1a +1000d6a0: 4628 mov r0, r5 +1000d6a2: 9604 str r6, [sp, #16] +1000d6a4: f8ad 4016 strh.w r4, [sp, #22] +1000d6a8: f7ff ffda bl 1000d660 +1000d6ac: b008 add sp, #32 +1000d6ae: bd70 pop {r4, r5, r6, pc} + +1000d6b0 : +1000d6b0: b530 push {r4, r5, lr} +1000d6b2: b089 sub sp, #36 ; 0x24 +1000d6b4: 460c mov r4, r1 +1000d6b6: 2220 movs r2, #32 +1000d6b8: 2100 movs r1, #0 +1000d6ba: 4605 mov r5, r0 +1000d6bc: 4668 mov r0, sp +1000d6be: f00d fa8b bl 1001abd8 +1000d6c2: 2301 movs r3, #1 +1000d6c4: 2206 movs r2, #6 +1000d6c6: 4621 mov r1, r4 +1000d6c8: f10d 0012 add.w r0, sp, #18 +1000d6cc: f88d 3011 strb.w r3, [sp, #17] +1000d6d0: f00d fa7e bl 1001abd0 +1000d6d4: 79a3 ldrb r3, [r4, #6] +1000d6d6: 2b23 cmp r3, #35 ; 0x23 +1000d6d8: d107 bne.n 1000d6ea +1000d6da: 79e3 ldrb r3, [r4, #7] +1000d6dc: 2b40 cmp r3, #64 ; 0x40 +1000d6de: d104 bne.n 1000d6ea +1000d6e0: 2206 movs r2, #6 +1000d6e2: a806 add r0, sp, #24 +1000d6e4: 18a1 adds r1, r4, r2 +1000d6e6: f00d fa73 bl 1001abd0 +1000d6ea: 466a mov r2, sp +1000d6ec: f648 3114 movw r1, #35604 ; 0x8b14 +1000d6f0: 4628 mov r0, r5 +1000d6f2: f7ff ffb5 bl 1000d660 +1000d6f6: b009 add sp, #36 ; 0x24 +1000d6f8: bd30 pop {r4, r5, pc} + +1000d6fa : +1000d6fa: 7842 ldrb r2, [r0, #1] +1000d6fc: 7803 ldrb r3, [r0, #0] +1000d6fe: 4013 ands r3, r2 +1000d700: 7882 ldrb r2, [r0, #2] +1000d702: 4013 ands r3, r2 +1000d704: 78c2 ldrb r2, [r0, #3] +1000d706: 4013 ands r3, r2 +1000d708: 7902 ldrb r2, [r0, #4] +1000d70a: 7940 ldrb r0, [r0, #5] +1000d70c: 4013 ands r3, r2 +1000d70e: 4018 ands r0, r3 +1000d710: f1a0 03ff sub.w r3, r0, #255 ; 0xff +1000d714: 4258 negs r0, r3 +1000d716: 4158 adcs r0, r3 +1000d718: 4770 bx lr + +1000d71a : +1000d71a: b570 push {r4, r5, r6, lr} +1000d71c: 4605 mov r5, r0 +1000d71e: 460c mov r4, r1 +1000d720: 4616 mov r6, r2 +1000d722: b088 sub sp, #32 +1000d724: 2220 movs r2, #32 +1000d726: 2100 movs r1, #0 +1000d728: 4668 mov r0, sp +1000d72a: f00d fa55 bl 1001abd8 +1000d72e: f3c4 040b ubfx r4, r4, #0, #12 +1000d732: 466a mov r2, sp +1000d734: f648 3132 movw r1, #35634 ; 0x8b32 +1000d738: 4628 mov r0, r5 +1000d73a: f8ad 4016 strh.w r4, [sp, #22] +1000d73e: 9604 str r6, [sp, #16] +1000d740: f7ff ff8e bl 1000d660 +1000d744: b008 add sp, #32 +1000d746: bd70 pop {r4, r5, r6, pc} + +1000d748 : +1000d748: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1000d74c: b089 sub sp, #36 ; 0x24 +1000d74e: f8bd 7058 ldrh.w r7, [sp, #88] ; 0x58 +1000d752: 4683 mov fp, r0 +1000d754: f107 0a28 add.w sl, r7, #40 ; 0x28 +1000d758: 4650 mov r0, sl +1000d75a: 4688 mov r8, r1 +1000d75c: 4616 mov r6, r2 +1000d75e: 461d mov r5, r3 +1000d760: f8bd 9050 ldrh.w r9, [sp, #80] ; 0x50 +1000d764: f007 fcf6 bl 10015154 +1000d768: 4604 mov r4, r0 +1000d76a: 2800 cmp r0, #0 +1000d76c: d062 beq.n 1000d834 +1000d76e: 4652 mov r2, sl +1000d770: 2100 movs r1, #0 +1000d772: f00d fa31 bl 1001abd8 +1000d776: 3501 adds r5, #1 +1000d778: 2220 movs r2, #32 +1000d77a: 2100 movs r1, #0 +1000d77c: 4668 mov r0, sp +1000d77e: f00d fa2b bl 1001abd8 +1000d782: b2ad uxth r5, r5 +1000d784: f5b8 4f00 cmp.w r8, #32768 ; 0x8000 +1000d788: f445 6280 orr.w r2, r5, #1024 ; 0x400 +1000d78c: bf08 it eq +1000d78e: f445 4504 orreq.w r5, r5, #33792 ; 0x8400 +1000d792: f8ad 2016 strh.w r2, [sp, #22] +1000d796: 9404 str r4, [sp, #16] +1000d798: bf08 it eq +1000d79a: f8ad 5016 strheq.w r5, [sp, #22] +1000d79e: f8ad a014 strh.w sl, [sp, #20] +1000d7a2: f104 0516 add.w r5, r4, #22 +1000d7a6: b126 cbz r6, 1000d7b2 +1000d7a8: 4630 mov r0, r6 +1000d7aa: f7ff ffa6 bl 1000d6fa +1000d7ae: 2800 cmp r0, #0 +1000d7b0: d043 beq.n 1000d83a +1000d7b2: 6823 ldr r3, [r4, #0] +1000d7b4: f043 0304 orr.w r3, r3, #4 +1000d7b8: 6023 str r3, [r4, #0] +1000d7ba: 9b12 ldr r3, [sp, #72] ; 0x48 +1000d7bc: b11b cbz r3, 1000d7c6 +1000d7be: 6823 ldr r3, [r4, #0] +1000d7c0: f043 0308 orr.w r3, r3, #8 +1000d7c4: 6023 str r3, [r4, #0] +1000d7c6: 2301 movs r3, #1 +1000d7c8: 7563 strb r3, [r4, #21] +1000d7ca: b36e cbz r6, 1000d828 +1000d7cc: 2206 movs r2, #6 +1000d7ce: 4631 mov r1, r6 +1000d7d0: 4628 mov r0, r5 +1000d7d2: f00d f9fd bl 1001abd0 +1000d7d6: 9b15 ldr r3, [sp, #84] ; 0x54 +1000d7d8: b13b cbz r3, 1000d7ea +1000d7da: b137 cbz r7, 1000d7ea +1000d7dc: 463a mov r2, r7 +1000d7de: 4619 mov r1, r3 +1000d7e0: f104 0028 add.w r0, r4, #40 ; 0x28 +1000d7e4: f00d f9f4 bl 1001abd0 +1000d7e8: 84e7 strh r7, [r4, #38] ; 0x26 +1000d7ea: 9b13 ldr r3, [sp, #76] ; 0x4c +1000d7ec: f8a4 8024 strh.w r8, [r4, #36] ; 0x24 +1000d7f0: b163 cbz r3, 1000d80c +1000d7f2: f1b9 0f00 cmp.w r9, #0 +1000d7f6: d009 beq.n 1000d80c +1000d7f8: 4620 mov r0, r4 +1000d7fa: 6823 ldr r3, [r4, #0] +1000d7fc: 464a mov r2, r9 +1000d7fe: f043 0302 orr.w r3, r3, #2 +1000d802: f840 3b0c str.w r3, [r0], #12 +1000d806: 9913 ldr r1, [sp, #76] ; 0x4c +1000d808: f00d f9e2 bl 1001abd0 +1000d80c: 466a mov r2, sp +1000d80e: f648 3134 movw r1, #35636 ; 0x8b34 +1000d812: 4658 mov r0, fp +1000d814: f7ff ff24 bl 1000d660 +1000d818: 4605 mov r5, r0 +1000d81a: 4620 mov r0, r4 +1000d81c: f007 fd36 bl 1001528c +1000d820: 4628 mov r0, r5 +1000d822: b009 add sp, #36 ; 0x24 +1000d824: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1000d828: 2206 movs r2, #6 +1000d82a: 21ff movs r1, #255 ; 0xff +1000d82c: 4628 mov r0, r5 +1000d82e: f00d f9d3 bl 1001abd8 +1000d832: e7d0 b.n 1000d7d6 +1000d834: f04f 35ff mov.w r5, #4294967295 +1000d838: e7f2 b.n 1000d820 +1000d83a: 9b12 ldr r3, [sp, #72] ; 0x48 +1000d83c: 2b00 cmp r3, #0 +1000d83e: d1be bne.n 1000d7be +1000d840: 2301 movs r3, #1 +1000d842: 7563 strb r3, [r4, #21] +1000d844: e7c2 b.n 1000d7cc + +1000d846 : +1000d846: b570 push {r4, r5, r6, lr} +1000d848: 4614 mov r4, r2 +1000d84a: b088 sub sp, #32 +1000d84c: 4605 mov r5, r0 +1000d84e: 460e mov r6, r1 +1000d850: 2220 movs r2, #32 +1000d852: 2100 movs r1, #0 +1000d854: 4668 mov r0, sp +1000d856: f00d f9bf bl 1001abd8 +1000d85a: f8ad 4014 strh.w r4, [sp, #20] +1000d85e: 3400 adds r4, #0 +1000d860: bf18 it ne +1000d862: 2401 movne r4, #1 +1000d864: 466a mov r2, sp +1000d866: f648 31ff movw r1, #35839 ; 0x8bff +1000d86a: 4628 mov r0, r5 +1000d86c: 9604 str r6, [sp, #16] +1000d86e: f8ad 4016 strh.w r4, [sp, #22] +1000d872: f7ff fef5 bl 1000d660 +1000d876: b008 add sp, #32 +1000d878: bd70 pop {r4, r5, r6, pc} + +1000d87a : +1000d87a: b530 push {r4, r5, lr} +1000d87c: 4604 mov r4, r0 +1000d87e: 460d mov r5, r1 +1000d880: b089 sub sp, #36 ; 0x24 +1000d882: 2220 movs r2, #32 +1000d884: 2100 movs r1, #0 +1000d886: 4668 mov r0, sp +1000d888: f00d f9a6 bl 1001abd8 +1000d88c: 466a mov r2, sp +1000d88e: f648 3106 movw r1, #35590 ; 0x8b06 +1000d892: 4620 mov r0, r4 +1000d894: 9504 str r5, [sp, #16] +1000d896: f7ff fee3 bl 1000d660 +1000d89a: b009 add sp, #36 ; 0x24 +1000d89c: bd30 pop {r4, r5, pc} + +1000d89e : +1000d89e: b570 push {r4, r5, r6, lr} +1000d8a0: 4614 mov r4, r2 +1000d8a2: b088 sub sp, #32 +1000d8a4: 4605 mov r5, r0 +1000d8a6: 460e mov r6, r1 +1000d8a8: 2220 movs r2, #32 +1000d8aa: 2100 movs r1, #0 +1000d8ac: 4668 mov r0, sp +1000d8ae: f00d f993 bl 1001abd8 +1000d8b2: f8ad 4014 strh.w r4, [sp, #20] +1000d8b6: 3400 adds r4, #0 +1000d8b8: bf18 it ne +1000d8ba: 2401 movne r4, #1 +1000d8bc: 466a mov r2, sp +1000d8be: f648 31fe movw r1, #35838 ; 0x8bfe +1000d8c2: 4628 mov r0, r5 +1000d8c4: 9604 str r6, [sp, #16] +1000d8c6: f8ad 4016 strh.w r4, [sp, #22] +1000d8ca: f7ff fec9 bl 1000d660 +1000d8ce: b008 add sp, #32 +1000d8d0: bd70 pop {r4, r5, r6, pc} + +1000d8d2 : +1000d8d2: b530 push {r4, r5, lr} +1000d8d4: 4604 mov r4, r0 +1000d8d6: 460d mov r5, r1 +1000d8d8: b089 sub sp, #36 ; 0x24 +1000d8da: 2220 movs r2, #32 +1000d8dc: 2100 movs r1, #0 +1000d8de: 4668 mov r0, sp +1000d8e0: f00d f97a bl 1001abd8 +1000d8e4: 466a mov r2, sp +1000d8e6: f648 31fd movw r1, #35837 ; 0x8bfd +1000d8ea: 4620 mov r0, r4 +1000d8ec: 9504 str r5, [sp, #16] +1000d8ee: f7ff feb7 bl 1000d660 +1000d8f2: b009 add sp, #36 ; 0x24 +1000d8f4: bd30 pop {r4, r5, pc} + +1000d8f6 : +1000d8f6: b530 push {r4, r5, lr} +1000d8f8: 4605 mov r5, r0 +1000d8fa: b089 sub sp, #36 ; 0x24 +1000d8fc: 460c mov r4, r1 +1000d8fe: 2220 movs r2, #32 +1000d900: 2100 movs r1, #0 +1000d902: 4668 mov r0, sp +1000d904: f00d f968 bl 1001abd8 +1000d908: 466a mov r2, sp +1000d90a: f648 3109 movw r1, #35593 ; 0x8b09 +1000d90e: 4628 mov r0, r5 +1000d910: f7ff fea6 bl 1000d660 +1000d914: 2800 cmp r0, #0 +1000d916: bfa2 ittt ge +1000d918: 9b04 ldrge r3, [sp, #16] +1000d91a: 425b negge r3, r3 +1000d91c: 6023 strge r3, [r4, #0] +1000d91e: b009 add sp, #36 ; 0x24 +1000d920: bd30 pop {r4, r5, pc} + +1000d922 : +1000d922: b530 push {r4, r5, lr} +1000d924: b089 sub sp, #36 ; 0x24 +1000d926: 4604 mov r4, r0 +1000d928: 460d mov r5, r1 +1000d92a: 2220 movs r2, #32 +1000d92c: 2100 movs r1, #0 +1000d92e: 4668 mov r0, sp +1000d930: f00d f952 bl 1001abd8 +1000d934: 2300 movs r3, #0 +1000d936: 466a mov r2, sp +1000d938: f648 3104 movw r1, #35588 ; 0x8b04 +1000d93c: 4620 mov r0, r4 +1000d93e: 9304 str r3, [sp, #16] +1000d940: f8ad 3014 strh.w r3, [sp, #20] +1000d944: f88d 5016 strb.w r5, [sp, #22] +1000d948: f7ff fe8a bl 1000d660 +1000d94c: b009 add sp, #36 ; 0x24 +1000d94e: bd30 pop {r4, r5, pc} + +1000d950 : +1000d950: b5f0 push {r4, r5, r6, r7, lr} +1000d952: 4604 mov r4, r0 +1000d954: 461e mov r6, r3 +1000d956: 460f mov r7, r1 +1000d958: 4615 mov r5, r2 +1000d95a: b089 sub sp, #36 ; 0x24 +1000d95c: 2220 movs r2, #32 +1000d95e: 2100 movs r1, #0 +1000d960: 4668 mov r0, sp +1000d962: f00d f939 bl 1001abd8 +1000d966: 466a mov r2, sp +1000d968: f648 3118 movw r1, #35608 ; 0x8b18 +1000d96c: 4620 mov r0, r4 +1000d96e: 9704 str r7, [sp, #16] +1000d970: f8ad 6016 strh.w r6, [sp, #22] +1000d974: f8ad 5014 strh.w r5, [sp, #20] +1000d978: f7ff fe72 bl 1000d660 +1000d97c: b009 add sp, #36 ; 0x24 +1000d97e: bdf0 pop {r4, r5, r6, r7, pc} + +1000d980 : +1000d980: f648 3319 movw r3, #35609 ; 0x8b19 +1000d984: b573 push {r0, r1, r4, r5, r6, lr} +1000d986: 2600 movs r6, #0 +1000d988: 4298 cmp r0, r3 +1000d98a: 460c mov r4, r1 +1000d98c: 4615 mov r5, r2 +1000d98e: 9600 str r6, [sp, #0] +1000d990: f8ad 6004 strh.w r6, [sp, #4] +1000d994: f000 8082 beq.w 1000da9c +1000d998: f648 4302 movw r3, #35842 ; 0x8c02 +1000d99c: 4298 cmp r0, r3 +1000d99e: d01a beq.n 1000d9d6 +1000d9a0: f648 3315 movw r3, #35605 ; 0x8b15 +1000d9a4: 4298 cmp r0, r3 +1000d9a6: d10f bne.n 1000d9c8 +1000d9a8: 784d ldrb r5, [r1, #1] +1000d9aa: 2d01 cmp r5, #1 +1000d9ac: d10c bne.n 1000d9c8 +1000d9ae: 3402 adds r4, #2 +1000d9b0: 2206 movs r2, #6 +1000d9b2: 4669 mov r1, sp +1000d9b4: 4620 mov r0, r4 +1000d9b6: f00d f907 bl 1001abc8 +1000d9ba: 4603 mov r3, r0 +1000d9bc: b930 cbnz r0, 1000d9cc +1000d9be: 4602 mov r2, r0 +1000d9c0: 4601 mov r1, r0 +1000d9c2: 4628 mov r0, r5 +1000d9c4: f7ff fdd2 bl 1000d56c +1000d9c8: b002 add sp, #8 +1000d9ca: bd70 pop {r4, r5, r6, pc} +1000d9cc: 4633 mov r3, r6 +1000d9ce: 2206 movs r2, #6 +1000d9d0: 4621 mov r1, r4 +1000d9d2: 4630 mov r0, r6 +1000d9d4: e7f6 b.n 1000d9c4 +1000d9d6: 2a00 cmp r2, #0 +1000d9d8: d0f6 beq.n 1000d9c8 +1000d9da: 4835 ldr r0, [pc, #212] ; (1000dab0 ) +1000d9dc: f00d f90c bl 1001abf8 +1000d9e0: 4629 mov r1, r5 +1000d9e2: 4602 mov r2, r0 +1000d9e4: 4832 ldr r0, [pc, #200] ; (1000dab0 ) +1000d9e6: f00d f8ef bl 1001abc8 +1000d9ea: 4606 mov r6, r0 +1000d9ec: b938 cbnz r0, 1000d9fe +1000d9ee: 4830 ldr r0, [pc, #192] ; (1000dab0 ) +1000d9f0: f00d f902 bl 1001abf8 +1000d9f4: 4633 mov r3, r6 +1000d9f6: 4602 mov r2, r0 +1000d9f8: 4629 mov r1, r5 +1000d9fa: 2002 movs r0, #2 +1000d9fc: e7e2 b.n 1000d9c4 +1000d9fe: 482d ldr r0, [pc, #180] ; (1000dab4 ) +1000da00: f00d f8fa bl 1001abf8 +1000da04: 4629 mov r1, r5 +1000da06: 4602 mov r2, r0 +1000da08: 482a ldr r0, [pc, #168] ; (1000dab4 ) +1000da0a: f00d f8dd bl 1001abc8 +1000da0e: 4606 mov r6, r0 +1000da10: b938 cbnz r0, 1000da22 +1000da12: 4828 ldr r0, [pc, #160] ; (1000dab4 ) +1000da14: f00d f8f0 bl 1001abf8 +1000da18: 4633 mov r3, r6 +1000da1a: 4602 mov r2, r0 +1000da1c: 4629 mov r1, r5 +1000da1e: 2005 movs r0, #5 +1000da20: e7d0 b.n 1000d9c4 +1000da22: 4825 ldr r0, [pc, #148] ; (1000dab8 ) +1000da24: f00d f8e8 bl 1001abf8 +1000da28: 4629 mov r1, r5 +1000da2a: 4602 mov r2, r0 +1000da2c: 4822 ldr r0, [pc, #136] ; (1000dab8 ) +1000da2e: f00d f8cb bl 1001abc8 +1000da32: 4606 mov r6, r0 +1000da34: b938 cbnz r0, 1000da46 +1000da36: 4820 ldr r0, [pc, #128] ; (1000dab8 ) +1000da38: f00d f8de bl 1001abf8 +1000da3c: 4633 mov r3, r6 +1000da3e: 4602 mov r2, r0 +1000da40: 4629 mov r1, r5 +1000da42: 200e movs r0, #14 +1000da44: e7be b.n 1000d9c4 +1000da46: 481d ldr r0, [pc, #116] ; (1000dabc ) +1000da48: f00d f8d6 bl 1001abf8 +1000da4c: 4629 mov r1, r5 +1000da4e: 4602 mov r2, r0 +1000da50: 481a ldr r0, [pc, #104] ; (1000dabc ) +1000da52: f00d f8b9 bl 1001abc8 +1000da56: 4603 mov r3, r0 +1000da58: b918 cbnz r0, 1000da62 +1000da5a: 88a2 ldrh r2, [r4, #4] +1000da5c: 6821 ldr r1, [r4, #0] +1000da5e: 2008 movs r0, #8 +1000da60: e7b0 b.n 1000d9c4 +1000da62: 4817 ldr r0, [pc, #92] ; (1000dac0 ) +1000da64: f00d f8c8 bl 1001abf8 +1000da68: 4629 mov r1, r5 +1000da6a: 4602 mov r2, r0 +1000da6c: 4814 ldr r0, [pc, #80] ; (1000dac0 ) +1000da6e: f00d f8ab bl 1001abc8 +1000da72: 4603 mov r3, r0 +1000da74: b918 cbnz r0, 1000da7e +1000da76: 2206 movs r2, #6 +1000da78: 1ca1 adds r1, r4, #2 +1000da7a: 2009 movs r0, #9 +1000da7c: e7a2 b.n 1000d9c4 +1000da7e: 4811 ldr r0, [pc, #68] ; (1000dac4 ) +1000da80: f00d f8ba bl 1001abf8 +1000da84: 4629 mov r1, r5 +1000da86: 4602 mov r2, r0 +1000da88: 480e ldr r0, [pc, #56] ; (1000dac4 ) +1000da8a: f00d f89d bl 1001abc8 +1000da8e: 4602 mov r2, r0 +1000da90: 2800 cmp r0, #0 +1000da92: d199 bne.n 1000d9c8 +1000da94: 4601 mov r1, r0 +1000da96: 88e3 ldrh r3, [r4, #6] +1000da98: 2006 movs r0, #6 +1000da9a: e793 b.n 1000d9c4 +1000da9c: 6809 ldr r1, [r1, #0] +1000da9e: b919 cbnz r1, 1000daa8 +1000daa0: 460b mov r3, r1 +1000daa2: 460a mov r2, r1 +1000daa4: 2004 movs r0, #4 +1000daa6: e78d b.n 1000d9c4 +1000daa8: 4633 mov r3, r6 +1000daaa: 88a2 ldrh r2, [r4, #4] +1000daac: 2003 movs r0, #3 +1000daae: e789 b.n 1000d9c4 +1000dab0: 1003fc45 .word 0x1003fc45 +1000dab4: 1003fc5d .word 0x1003fc5d +1000dab8: 1003fc72 .word 0x1003fc72 +1000dabc: 1003fc93 .word 0x1003fc93 +1000dac0: 1003fc9d .word 0x1003fc9d +1000dac4: 1003fcaa .word 0x1003fcaa + +1000dac8 : +1000dac8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1000dacc: b08e sub sp, #56 ; 0x38 +1000dace: 4605 mov r5, r0 +1000dad0: 4688 mov r8, r1 +1000dad2: 4617 mov r7, r2 +1000dad4: ac01 add r4, sp, #4 +1000dad6: 2220 movs r2, #32 +1000dad8: 2100 movs r1, #0 +1000dada: a806 add r0, sp, #24 +1000dadc: 461e mov r6, r3 +1000dade: f00d f87b bl 1001abd8 +1000dae2: 4a0c ldr r2, [pc, #48] ; (1000db14 ) +1000dae4: 210d movs r1, #13 +1000dae6: 4620 mov r0, r4 +1000dae8: f00c fff4 bl 1001aad4 +1000daec: 2311 movs r3, #17 +1000daee: aa06 add r2, sp, #24 +1000daf0: f648 11f0 movw r1, #35312 ; 0x89f0 +1000daf4: 4628 mov r0, r5 +1000daf6: f88d 8011 strb.w r8, [sp, #17] +1000dafa: f88d 7012 strb.w r7, [sp, #18] +1000dafe: f88d 6013 strb.w r6, [sp, #19] +1000db02: 940a str r4, [sp, #40] ; 0x28 +1000db04: f8ad 302c strh.w r3, [sp, #44] ; 0x2c +1000db08: f7ff fdaa bl 1000d660 +1000db0c: b00e add sp, #56 ; 0x38 +1000db0e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000db12: bf00 nop +1000db14: 1003fc38 .word 0x1003fc38 + +1000db18 : +1000db18: 2801 cmp r0, #1 +1000db1a: 4b07 ldr r3, [pc, #28] ; (1000db38 ) +1000db1c: d003 beq.n 1000db26 +1000db1e: 2802 cmp r0, #2 +1000db20: d007 beq.n 1000db32 +1000db22: 2200 movs r2, #0 +1000db24: e002 b.n 1000db2c +1000db26: 2200 movs r2, #0 +1000db28: 7018 strb r0, [r3, #0] +1000db2a: 4b04 ldr r3, [pc, #16] ; (1000db3c ) +1000db2c: 701a strb r2, [r3, #0] +1000db2e: 2000 movs r0, #0 +1000db30: 4770 bx lr +1000db32: 2201 movs r2, #1 +1000db34: 701a strb r2, [r3, #0] +1000db36: e7f8 b.n 1000db2a +1000db38: 1004de10 .word 0x1004de10 +1000db3c: 10044fbc .word 0x10044fbc + +1000db40 : +1000db40: f029 bb02 b.w 10037148 + +1000db44 : +1000db44: 2801 cmp r0, #1 +1000db46: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1000db4a: bf28 it cs +1000db4c: 2001 movcs r0, #1 +1000db4e: 253c movs r5, #60 ; 0x3c +1000db50: 4b52 ldr r3, [pc, #328] ; (1000dc9c ) +1000db52: b086 sub sp, #24 +1000db54: 4607 mov r7, r0 +1000db56: fb05 3500 mla r5, r5, r0, r3 +1000db5a: 460c mov r4, r1 +1000db5c: b911 cbnz r1, 1000db64 +1000db5e: 6069 str r1, [r5, #4] +1000db60: 60a9 str r1, [r5, #8] +1000db62: 60e9 str r1, [r5, #12] +1000db64: f04f 083c mov.w r8, #60 ; 0x3c +1000db68: 2600 movs r6, #0 +1000db6a: fb08 3807 mla r8, r8, r7, r3 +1000db6e: 2c04 cmp r4, #4 +1000db70: d8fd bhi.n 1000db6e +1000db72: a301 add r3, pc, #4 ; (adr r3, 1000db78 ) +1000db74: f853 f024 ldr.w pc, [r3, r4, lsl #2] +1000db78: 1000db8d .word 0x1000db8d +1000db7c: 1000db9f .word 0x1000db9f +1000db80: 1000db6f .word 0x1000db6f +1000db84: 1000dc6f .word 0x1000dc6f +1000db88: 1000dc85 .word 0x1000dc85 +1000db8c: 200f movs r0, #15 +1000db8e: 4944 ldr r1, [pc, #272] ; (1000dca0 ) +1000db90: f7ff fd34 bl 1000d5fc +1000db94: 4628 mov r0, r5 +1000db96: f002 fe3f bl 10010818 +1000db9a: 2401 movs r4, #1 +1000db9c: e7e7 b.n 1000db6e +1000db9e: f8d8 3020 ldr.w r3, [r8, #32] +1000dba2: 7b1a ldrb r2, [r3, #12] +1000dba4: b9aa cbnz r2, 1000dbd2 +1000dba6: 4b3f ldr r3, [pc, #252] ; (1000dca4 ) +1000dba8: 4a3f ldr r2, [pc, #252] ; (1000dca8 ) +1000dbaa: 9303 str r3, [sp, #12] +1000dbac: f06f 437f mvn.w r3, #4278190080 ; 0xff000000 +1000dbb0: 9304 str r3, [sp, #16] +1000dbb2: ab06 add r3, sp, #24 +1000dbb4: f843 2d04 str.w r2, [r3, #-4]! +1000dbb8: a903 add r1, sp, #12 +1000dbba: aa04 add r2, sp, #16 +1000dbbc: 4628 mov r0, r5 +1000dbbe: f003 f941 bl 10010e44 +1000dbc2: 483a ldr r0, [pc, #232] ; (1000dcac ) +1000dbc4: f00c ffdc bl 1001ab80 +1000dbc8: 2404 movs r4, #4 +1000dbca: 4620 mov r0, r4 +1000dbcc: b006 add sp, #24 +1000dbce: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000dbd2: f8d8 4004 ldr.w r4, [r8, #4] +1000dbd6: b1ac cbz r4, 1000dc04 +1000dbd8: 2200 movs r2, #0 +1000dbda: 4931 ldr r1, [pc, #196] ; (1000dca0 ) +1000dbdc: 200f movs r0, #15 +1000dbde: f7ff fce5 bl 1000d5ac +1000dbe2: 0e23 lsrs r3, r4, #24 +1000dbe4: 9301 str r3, [sp, #4] +1000dbe6: f3c4 4307 ubfx r3, r4, #16, #8 +1000dbea: b2e2 uxtb r2, r4 +1000dbec: 9300 str r3, [sp, #0] +1000dbee: 4639 mov r1, r7 +1000dbf0: f3c4 2307 ubfx r3, r4, #8, #8 +1000dbf4: 482e ldr r0, [pc, #184] ; (1000dcb0 ) +1000dbf6: f00c ffc3 bl 1001ab80 +1000dbfa: 2200 movs r2, #0 +1000dbfc: 4b2d ldr r3, [pc, #180] ; (1000dcb4 ) +1000dbfe: 2402 movs r4, #2 +1000dc00: 601a str r2, [r3, #0] +1000dc02: e7e2 b.n 1000dbca +1000dc04: 7b5b ldrb r3, [r3, #13] +1000dc06: 2b05 cmp r3, #5 +1000dc08: d921 bls.n 1000dc4e +1000dc0a: 4628 mov r0, r5 +1000dc0c: f002 fdec bl 100107e8 +1000dc10: 4b24 ldr r3, [pc, #144] ; (1000dca4 ) +1000dc12: 4a25 ldr r2, [pc, #148] ; (1000dca8 ) +1000dc14: 9303 str r3, [sp, #12] +1000dc16: f06f 437f mvn.w r3, #4278190080 ; 0xff000000 +1000dc1a: 9304 str r3, [sp, #16] +1000dc1c: ab06 add r3, sp, #24 +1000dc1e: f843 2d04 str.w r2, [r3, #-4]! +1000dc22: a903 add r1, sp, #12 +1000dc24: aa04 add r2, sp, #16 +1000dc26: 4628 mov r0, r5 +1000dc28: f003 f90c bl 10010e44 +1000dc2c: 4639 mov r1, r7 +1000dc2e: 4822 ldr r0, [pc, #136] ; (1000dcb8 ) +1000dc30: f00c ffa6 bl 1001ab80 +1000dc34: 2350 movs r3, #80 ; 0x50 +1000dc36: 22a8 movs r2, #168 ; 0xa8 +1000dc38: 9300 str r3, [sp, #0] +1000dc3a: 21c0 movs r1, #192 ; 0xc0 +1000dc3c: 2303 movs r3, #3 +1000dc3e: 481f ldr r0, [pc, #124] ; (1000dcbc ) +1000dc40: f00c ff9e bl 1001ab80 +1000dc44: 2204 movs r2, #4 +1000dc46: 4b1b ldr r3, [pc, #108] ; (1000dcb4 ) +1000dc48: 2405 movs r4, #5 +1000dc4a: 601a str r2, [r3, #0] +1000dc4c: e7bd b.n 1000dbca +1000dc4e: f44f 70fa mov.w r0, #500 ; 0x1f4 +1000dc52: f008 fbfd bl 10016450 +1000dc56: f002 fd19 bl 1001068c +1000dc5a: f64e 235f movw r3, #59999 ; 0xea5f +1000dc5e: f506 76fa add.w r6, r6, #500 ; 0x1f4 +1000dc62: 429e cmp r6, r3 +1000dc64: dd99 ble.n 1000db9a +1000dc66: f002 fcc1 bl 100105ec +1000dc6a: 4626 mov r6, r4 +1000dc6c: e795 b.n 1000db9a +1000dc6e: 490c ldr r1, [pc, #48] ; (1000dca0 ) +1000dc70: 200f movs r0, #15 +1000dc72: f7ff fcc3 bl 1000d5fc +1000dc76: 4812 ldr r0, [pc, #72] ; (1000dcc0 ) +1000dc78: f00c ff82 bl 1001ab80 +1000dc7c: 4628 mov r0, r5 +1000dc7e: f002 fd51 bl 10010724 +1000dc82: e7a2 b.n 1000dbca +1000dc84: 4906 ldr r1, [pc, #24] ; (1000dca0 ) +1000dc86: 200f movs r0, #15 +1000dc88: f7ff fcb8 bl 1000d5fc +1000dc8c: 4807 ldr r0, [pc, #28] ; (1000dcac ) +1000dc8e: f00c ff77 bl 1001ab80 +1000dc92: 4628 mov r0, r5 +1000dc94: f002 fda8 bl 100107e8 +1000dc98: e797 b.n 1000dbca +1000dc9a: bf00 nop +1000dc9c: 1004aa04 .word 0x1004aa04 +1000dca0: 1000cf65 .word 0x1000cf65 +1000dca4: 5003a8c0 .word 0x5003a8c0 +1000dca8: 0103a8c0 .word 0x0103a8c0 +1000dcac: 1003fcbb .word 0x1003fcbb +1000dcb0: 1003fcd2 .word 0x1003fcd2 +1000dcb4: 10044d5c .word 0x10044d5c +1000dcb8: 1003fcf9 .word 0x1003fcf9 +1000dcbc: 1003fd14 .word 0x1003fd14 +1000dcc0: 1003fd35 .word 0x1003fd35 + +1000dcc4 : +1000dcc4: b510 push {r4, lr} +1000dcc6: 4b0d ldr r3, [pc, #52] ; (1000dcfc ) +1000dcc8: 480d ldr r0, [pc, #52] ; (1000dd00 ) +1000dcca: 781b ldrb r3, [r3, #0] +1000dccc: 490d ldr r1, [pc, #52] ; (1000dd04 ) +1000dcce: 2b02 cmp r3, #2 +1000dcd0: 4a0d ldr r2, [pc, #52] ; (1000dd08 ) +1000dcd2: 4b0e ldr r3, [pc, #56] ; (1000dd0c ) +1000dcd4: d109 bne.n 1000dcea +1000dcd6: 2431 movs r4, #49 ; 0x31 +1000dcd8: 7104 strb r4, [r0, #4] +1000dcda: 2030 movs r0, #48 ; 0x30 +1000dcdc: 7108 strb r0, [r1, #4] +1000dcde: 2101 movs r1, #1 +1000dce0: 7011 strb r1, [r2, #0] +1000dce2: 2200 movs r2, #0 +1000dce4: 701a strb r2, [r3, #0] +1000dce6: 7818 ldrb r0, [r3, #0] +1000dce8: bd10 pop {r4, pc} +1000dcea: 2430 movs r4, #48 ; 0x30 +1000dcec: 7104 strb r4, [r0, #4] +1000dcee: 2031 movs r0, #49 ; 0x31 +1000dcf0: 7108 strb r0, [r1, #4] +1000dcf2: 2100 movs r1, #0 +1000dcf4: 7011 strb r1, [r2, #0] +1000dcf6: 2201 movs r2, #1 +1000dcf8: e7f4 b.n 1000dce4 +1000dcfa: bf00 nop +1000dcfc: 1004a804 .word 0x1004a804 +1000dd00: 10044ecf .word 0x10044ecf +1000dd04: 10044ec8 .word 0x10044ec8 +1000dd08: 1004aa86 .word 0x1004aa86 +1000dd0c: 10044ece .word 0x10044ece + +1000dd10 : +1000dd10: b51f push {r0, r1, r2, r3, r4, lr} +1000dd12: 9a07 ldr r2, [sp, #28] +1000dd14: 4b0e ldr r3, [pc, #56] ; (1000dd50 ) +1000dd16: 490f ldr r1, [pc, #60] ; (1000dd54 ) +1000dd18: 6018 str r0, [r3, #0] +1000dd1a: 605a str r2, [r3, #4] +1000dd1c: 4b0e ldr r3, [pc, #56] ; (1000dd58 ) +1000dd1e: 480f ldr r0, [pc, #60] ; (1000dd5c ) +1000dd20: 681b ldr r3, [r3, #0] +1000dd22: 691b ldr r3, [r3, #16] +1000dd24: 681a ldr r2, [r3, #0] +1000dd26: f892 37e2 ldrb.w r3, [r2, #2018] ; 0x7e2 +1000dd2a: 2bff cmp r3, #255 ; 0xff +1000dd2c: f04f 0300 mov.w r3, #0 +1000dd30: bf08 it eq +1000dd32: f882 37e2 strbeq.w r3, [r2, #2018] ; 0x7e2 +1000dd36: 9303 str r3, [sp, #12] +1000dd38: 9302 str r3, [sp, #8] +1000dd3a: 9301 str r3, [sp, #4] +1000dd3c: 2301 movs r3, #1 +1000dd3e: f44f 72c8 mov.w r2, #400 ; 0x190 +1000dd42: 9300 str r3, [sp, #0] +1000dd44: 4b02 ldr r3, [pc, #8] ; (1000dd50 ) +1000dd46: f008 f885 bl 10015e54 +1000dd4a: b005 add sp, #20 +1000dd4c: f85d fb04 ldr.w pc, [sp], #4 +1000dd50: 1004aa7c .word 0x1004aa7c +1000dd54: 1003fd89 .word 0x1003fd89 +1000dd58: 1004e03c .word 0x1004e03c +1000dd5c: 1000e479 .word 0x1000e479 + +1000dd60 : +1000dd60: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1000dd64: 4680 mov r8, r0 +1000dd66: 2501 movs r5, #1 +1000dd68: 2600 movs r6, #0 +1000dd6a: 4c0e ldr r4, [pc, #56] ; (1000dda4 ) +1000dd6c: f504 7780 add.w r7, r4, #256 ; 0x100 +1000dd70: f834 1c08 ldrh.w r1, [r4, #-8] +1000dd74: b191 cbz r1, 1000dd9c +1000dd76: ea15 0f08 tst.w r5, r8 +1000dd7a: d00a beq.n 1000dd92 +1000dd7c: f834 2c06 ldrh.w r2, [r4, #-6] +1000dd80: f854 0c04 ldr.w r0, [r4, #-4] +1000dd84: f00a fd0c bl 100187a0 +1000dd88: f834 3c06 ldrh.w r3, [r4, #-6] +1000dd8c: 4298 cmp r0, r3 +1000dd8e: bfb8 it lt +1000dd90: 432e orrlt r6, r5 +1000dd92: 3408 adds r4, #8 +1000dd94: 42bc cmp r4, r7 +1000dd96: ea4f 0545 mov.w r5, r5, lsl #1 +1000dd9a: d1e9 bne.n 1000dd70 +1000dd9c: 4630 mov r0, r6 +1000dd9e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000dda2: bf00 nop +1000dda4: 10044d68 .word 0x10044d68 + +1000dda8 : +1000dda8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1000ddac: 4680 mov r8, r0 +1000ddae: 2501 movs r5, #1 +1000ddb0: 2600 movs r6, #0 +1000ddb2: 4c0c ldr r4, [pc, #48] ; (1000dde4 ) +1000ddb4: f504 7780 add.w r7, r4, #256 ; 0x100 +1000ddb8: f834 1c08 ldrh.w r1, [r4, #-8] +1000ddbc: b179 cbz r1, 1000ddde +1000ddbe: ea15 0f08 tst.w r5, r8 +1000ddc2: d007 beq.n 1000ddd4 +1000ddc4: f834 2c06 ldrh.w r2, [r4, #-6] +1000ddc8: f854 0c04 ldr.w r0, [r4, #-4] +1000ddcc: f00a fbd6 bl 1001857c +1000ddd0: b900 cbnz r0, 1000ddd4 +1000ddd2: 432e orrs r6, r5 +1000ddd4: 3408 adds r4, #8 +1000ddd6: 42bc cmp r4, r7 +1000ddd8: ea4f 0545 mov.w r5, r5, lsl #1 +1000dddc: d1ec bne.n 1000ddb8 +1000ddde: 4630 mov r0, r6 +1000dde0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000dde4: 10044d68 .word 0x10044d68 + +1000dde8 : +1000dde8: 4b08 ldr r3, [pc, #32] ; (1000de0c ) +1000ddea: 4a09 ldr r2, [pc, #36] ; (1000de10 ) +1000ddec: 781b ldrb r3, [r3, #0] +1000ddee: 7812 ldrb r2, [r2, #0] +1000ddf0: 429a cmp r2, r3 +1000ddf2: d103 bne.n 1000ddfc +1000ddf4: 4b07 ldr r3, [pc, #28] ; (1000de14 ) +1000ddf6: 681b ldr r3, [r3, #0] +1000ddf8: 6a58 ldr r0, [r3, #36] ; 0x24 +1000ddfa: 4770 bx lr +1000ddfc: 4806 ldr r0, [pc, #24] ; (1000de18 ) +1000ddfe: f1a0 0210 sub.w r2, r0, #16 +1000de02: 2b02 cmp r3, #2 +1000de04: bf18 it ne +1000de06: 4610 movne r0, r2 +1000de08: 4770 bx lr +1000de0a: bf00 nop +1000de0c: 10044e40 .word 0x10044e40 +1000de10: 1004aa84 .word 0x1004aa84 +1000de14: 1004aab8 .word 0x1004aab8 +1000de18: 10044ef0 .word 0x10044ef0 + +1000de1c <_wext_set_lps_dtim>: +1000de1c: 2318 movs r3, #24 +1000de1e: 4358 muls r0, r3 +1000de20: 4b04 ldr r3, [pc, #16] ; (1000de34 <_wext_set_lps_dtim+0x18>) +1000de22: 581b ldr r3, [r3, r0] +1000de24: 691b ldr r3, [r3, #16] +1000de26: 6818 ldr r0, [r3, #0] +1000de28: b108 cbz r0, 1000de2e <_wext_set_lps_dtim+0x12> +1000de2a: f018 bc5d b.w 100266e8 +1000de2e: f04f 30ff mov.w r0, #4294967295 +1000de32: 4770 bx lr +1000de34: 1004e03c .word 0x1004e03c + +1000de38 <_wext_enable_powersave>: +1000de38: b538 push {r3, r4, r5, lr} +1000de3a: 2318 movs r3, #24 +1000de3c: 4358 muls r0, r3 +1000de3e: 4b0b ldr r3, [pc, #44] ; (1000de6c <_wext_enable_powersave+0x34>) +1000de40: 4615 mov r5, r2 +1000de42: 581b ldr r3, [r3, r0] +1000de44: 691b ldr r3, [r3, #16] +1000de46: 681c ldr r4, [r3, #0] +1000de48: b164 cbz r4, 1000de64 <_wext_enable_powersave+0x2c> +1000de4a: 4620 mov r0, r4 +1000de4c: f018 fc1c bl 10026688 +1000de50: b950 cbnz r0, 1000de68 <_wext_enable_powersave+0x30> +1000de52: 4620 mov r0, r4 +1000de54: f018 fb0f bl 10026476 +1000de58: 4629 mov r1, r5 +1000de5a: 4620 mov r0, r4 +1000de5c: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1000de60: f018 bbef b.w 10026642 +1000de64: f04f 30ff mov.w r0, #4294967295 +1000de68: bd38 pop {r3, r4, r5, pc} +1000de6a: bf00 nop +1000de6c: 1004e03c .word 0x1004e03c + +1000de70 : +1000de70: 2300 movs r3, #0 +1000de72: b510 push {r4, lr} +1000de74: 4c05 ldr r4, [pc, #20] ; (1000de8c ) +1000de76: b2da uxtb r2, r3 +1000de78: f854 1022 ldr.w r1, [r4, r2, lsl #2] +1000de7c: 4281 cmp r1, r0 +1000de7e: d003 beq.n 1000de88 +1000de80: 3101 adds r1, #1 +1000de82: f103 0301 add.w r3, r3, #1 +1000de86: d1f6 bne.n 1000de76 +1000de88: 4610 mov r0, r2 +1000de8a: bd10 pop {r4, pc} +1000de8c: 10044da0 .word 0x10044da0 + +1000de90 : +1000de90: b513 push {r0, r1, r4, lr} +1000de92: 213c movs r1, #60 ; 0x3c +1000de94: 4b07 ldr r3, [pc, #28] ; (1000deb4 ) +1000de96: 4c08 ldr r4, [pc, #32] ; (1000deb8 ) +1000de98: 781b ldrb r3, [r3, #0] +1000de9a: 4359 muls r1, r3 +1000de9c: 3104 adds r1, #4 +1000de9e: 1908 adds r0, r1, r4 +1000dea0: 7883 ldrb r3, [r0, #2] +1000dea2: 7842 ldrb r2, [r0, #1] +1000dea4: 78c0 ldrb r0, [r0, #3] +1000dea6: 5d09 ldrb r1, [r1, r4] +1000dea8: 9000 str r0, [sp, #0] +1000deaa: 4804 ldr r0, [pc, #16] ; (1000debc ) +1000deac: f00c fe68 bl 1001ab80 +1000deb0: b002 add sp, #8 +1000deb2: bd10 pop {r4, pc} +1000deb4: 10044ece .word 0x10044ece +1000deb8: 1004aa04 .word 0x1004aa04 +1000debc: 1003fd58 .word 0x1003fd58 + +1000dec0 : +1000dec0: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +1000dec4: 4b35 ldr r3, [pc, #212] ; (1000df9c ) +1000dec6: 781b ldrb r3, [r3, #0] +1000dec8: 3b02 subs r3, #2 +1000deca: 2b01 cmp r3, #1 +1000decc: d863 bhi.n 1000df96 +1000dece: 4c34 ldr r4, [pc, #208] ; (1000dfa0 ) +1000ded0: f894 0067 ldrb.w r0, [r4, #103] ; 0x67 +1000ded4: f7ff fe34 bl 1000db40 +1000ded8: b120 cbz r0, 1000dee4 +1000deda: f894 1067 ldrb.w r1, [r4, #103] ; 0x67 +1000dede: 4831 ldr r0, [pc, #196] ; (1000dfa4 ) +1000dee0: f00c fe4e bl 1001ab80 +1000dee4: f894 3066 ldrb.w r3, [r4, #102] ; 0x66 +1000dee8: f994 2064 ldrsb.w r2, [r4, #100] ; 0x64 +1000deec: 3b01 subs r3, #1 +1000deee: 2b0d cmp r3, #13 +1000def0: bf84 itt hi +1000def2: 2301 movhi r3, #1 +1000def4: f884 3066 strbhi.w r3, [r4, #102] ; 0x66 +1000def8: f894 3066 ldrb.w r3, [r4, #102] ; 0x66 +1000defc: f894 1065 ldrb.w r1, [r4, #101] ; 0x65 +1000df00: 9200 str r2, [sp, #0] +1000df02: 4a29 ldr r2, [pc, #164] ; (1000dfa8 ) +1000df04: f1a2 0021 sub.w r0, r2, #33 ; 0x21 +1000df08: f7ff faae bl 1000d468 +1000df0c: 4604 mov r4, r0 +1000df0e: 2800 cmp r0, #0 +1000df10: d13c bne.n 1000df8c +1000df12: 4e26 ldr r6, [pc, #152] ; (1000dfac ) +1000df14: 2565 movs r5, #101 ; 0x65 +1000df16: 46b0 mov r8, r6 +1000df18: 4f25 ldr r7, [pc, #148] ; (1000dfb0 ) +1000df1a: 2318 movs r3, #24 +1000df1c: 7832 ldrb r2, [r6, #0] +1000df1e: 4353 muls r3, r2 +1000df20: 58fb ldr r3, [r7, r3] +1000df22: 691b ldr r3, [r3, #16] +1000df24: 6819 ldr r1, [r3, #0] +1000df26: b331 cbz r1, 1000df76 +1000df28: 690b ldr r3, [r1, #16] +1000df2a: f013 0f41 tst.w r3, #65 ; 0x41 +1000df2e: d022 beq.n 1000df76 +1000df30: f8d1 20a4 ldr.w r2, [r1, #164] ; 0xa4 +1000df34: 481a ldr r0, [pc, #104] ; (1000dfa0 ) +1000df36: 2a1f cmp r2, #31 +1000df38: bfd4 ite le +1000df3a: 3201 addle r2, #1 +1000df3c: 2220 movgt r2, #32 +1000df3e: 31a8 adds r1, #168 ; 0xa8 +1000df40: f00c fe42 bl 1001abc8 +1000df44: b9b8 cbnz r0, 1000df76 +1000df46: 4b1b ldr r3, [pc, #108] ; (1000dfb4 ) +1000df48: 7b1b ldrb r3, [r3, #12] +1000df4a: b13b cbz r3, 1000df5c +1000df4c: 203c movs r0, #60 ; 0x3c +1000df4e: f898 2000 ldrb.w r2, [r8] +1000df52: 4b19 ldr r3, [pc, #100] ; (1000dfb8 ) +1000df54: fb00 3002 mla r0, r0, r2, r3 +1000df58: f007 f804 bl 10014f64 +1000df5c: f7ff ff98 bl 1000de90 +1000df60: 4b16 ldr r3, [pc, #88] ; (1000dfbc ) +1000df62: 7998 ldrb r0, [r3, #6] +1000df64: f010 0005 ands.w r0, r0, #5 +1000df68: d001 beq.n 1000df6e +1000df6a: f7ff ff1d bl 1000dda8 +1000df6e: 4620 mov r0, r4 +1000df70: b002 add sp, #8 +1000df72: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000df76: 3d01 subs r5, #1 +1000df78: d104 bne.n 1000df84 +1000df7a: 4811 ldr r0, [pc, #68] ; (1000dfc0 ) +1000df7c: f00c fe00 bl 1001ab80 +1000df80: 2402 movs r4, #2 +1000df82: e7f4 b.n 1000df6e +1000df84: 2014 movs r0, #20 +1000df86: f008 fa63 bl 10016450 +1000df8a: e7c6 b.n 1000df1a +1000df8c: 4601 mov r1, r0 +1000df8e: 480d ldr r0, [pc, #52] ; (1000dfc4 ) +1000df90: f00c fdf6 bl 1001ab80 +1000df94: e7eb b.n 1000df6e +1000df96: f06f 0405 mvn.w r4, #5 +1000df9a: e7e8 b.n 1000df6e +1000df9c: 1004a804 .word 0x1004a804 +1000dfa0: 10044dc8 .word 0x10044dc8 +1000dfa4: 1003fe6f .word 0x1003fe6f +1000dfa8: 10044de9 .word 0x10044de9 +1000dfac: 10044ece .word 0x10044ece +1000dfb0: 1004e03c .word 0x1004e03c +1000dfb4: 10044e30 .word 0x10044e30 +1000dfb8: 1004aa04 .word 0x1004aa04 +1000dfbc: 10044e40 .word 0x10044e40 +1000dfc0: 1003fe8f .word 0x1003fe8f +1000dfc4: 1003fea2 .word 0x1003fea2 + +1000dfc8 : +1000dfc8: b513 push {r0, r1, r4, lr} +1000dfca: 213c movs r1, #60 ; 0x3c +1000dfcc: 4b07 ldr r3, [pc, #28] ; (1000dfec ) +1000dfce: 4c08 ldr r4, [pc, #32] ; (1000dff0 ) +1000dfd0: 781b ldrb r3, [r3, #0] +1000dfd2: 4359 muls r1, r3 +1000dfd4: 3104 adds r1, #4 +1000dfd6: 1908 adds r0, r1, r4 +1000dfd8: 7883 ldrb r3, [r0, #2] +1000dfda: 7842 ldrb r2, [r0, #1] +1000dfdc: 78c0 ldrb r0, [r0, #3] +1000dfde: 5d09 ldrb r1, [r1, r4] +1000dfe0: 9000 str r0, [sp, #0] +1000dfe2: 4804 ldr r0, [pc, #16] ; (1000dff4 ) +1000dfe4: f00c fdcc bl 1001ab80 +1000dfe8: b002 add sp, #8 +1000dfea: bd10 pop {r4, pc} +1000dfec: 1004aa86 .word 0x1004aa86 +1000dff0: 1004aa04 .word 0x1004aa04 +1000dff4: 1003fd70 .word 0x1003fd70 + +1000dff8 : +1000dff8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1000dffc: 4922 ldr r1, [pc, #136] ; (1000e088 ) +1000dffe: 4e23 ldr r6, [pc, #140] ; (1000e08c ) +1000e000: 7b0f ldrb r7, [r1, #12] +1000e002: 7834 ldrb r4, [r6, #0] +1000e004: 2f02 cmp r7, #2 +1000e006: 460d mov r5, r1 +1000e008: d114 bne.n 1000e034 +1000e00a: 680b ldr r3, [r1, #0] +1000e00c: 3b01 subs r3, #1 +1000e00e: 3303 adds r3, #3 +1000e010: d812 bhi.n 1000e038 +1000e012: 253c movs r5, #60 ; 0x3c +1000e014: 481e ldr r0, [pc, #120] ; (1000e090 ) +1000e016: f101 0308 add.w r3, r1, #8 +1000e01a: 1d0a adds r2, r1, #4 +1000e01c: fb05 0004 mla r0, r5, r4, r0 +1000e020: f002 ff10 bl 10010e44 +1000e024: f7ff ffd0 bl 1000dfc8 +1000e028: 2203 movs r2, #3 +1000e02a: 4b1a ldr r3, [pc, #104] ; (1000e094 ) +1000e02c: 2000 movs r0, #0 +1000e02e: 701a strb r2, [r3, #0] +1000e030: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000e034: 2f00 cmp r7, #0 +1000e036: d0f5 beq.n 1000e024 +1000e038: 2000 movs r0, #0 +1000e03a: f008 f84b bl 100160d4 +1000e03e: 2103 movs r1, #3 +1000e040: 4680 mov r8, r0 +1000e042: 2000 movs r0, #0 +1000e044: f008 f854 bl 100160f0 +1000e048: 2100 movs r1, #0 +1000e04a: 7830 ldrb r0, [r6, #0] +1000e04c: f7ff fd7a bl 1000db44 +1000e050: 4606 mov r6, r0 +1000e052: 4641 mov r1, r8 +1000e054: 2000 movs r0, #0 +1000e056: f008 f84b bl 100160f0 +1000e05a: 2e02 cmp r6, #2 +1000e05c: d110 bne.n 1000e080 +1000e05e: 233c movs r3, #60 ; 0x3c +1000e060: 480b ldr r0, [pc, #44] ; (1000e090 ) +1000e062: 2f02 cmp r7, #2 +1000e064: fb03 0004 mla r0, r3, r4, r0 +1000e068: 6843 ldr r3, [r0, #4] +1000e06a: 602b str r3, [r5, #0] +1000e06c: 68c3 ldr r3, [r0, #12] +1000e06e: 60ab str r3, [r5, #8] +1000e070: 6883 ldr r3, [r0, #8] +1000e072: 606b str r3, [r5, #4] +1000e074: d9d6 bls.n 1000e024 +1000e076: 2008 movs r0, #8 +1000e078: 732e strb r6, [r5, #12] +1000e07a: f7ff fe95 bl 1000dda8 +1000e07e: e7d1 b.n 1000e024 +1000e080: f04f 30ff mov.w r0, #4294967295 +1000e084: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000e088: 10044eb8 .word 0x10044eb8 +1000e08c: 1004aa86 .word 0x1004aa86 +1000e090: 1004aa04 .word 0x1004aa04 +1000e094: 1004aa85 .word 0x1004aa85 + +1000e098 : +1000e098: b51f push {r0, r1, r2, r3, r4, lr} +1000e09a: 4c26 ldr r4, [pc, #152] ; (1000e134 ) +1000e09c: f894 206a ldrb.w r2, [r4, #106] ; 0x6a +1000e0a0: b1d2 cbz r2, 1000e0d8 +1000e0a2: 4825 ldr r0, [pc, #148] ; (1000e138 ) +1000e0a4: 4925 ldr r1, [pc, #148] ; (1000e13c ) +1000e0a6: f894 306b ldrb.w r3, [r4, #107] ; 0x6b +1000e0aa: 6008 str r0, [r1, #0] +1000e0ac: 4924 ldr r1, [pc, #144] ; (1000e140 ) +1000e0ae: 6809 ldr r1, [r1, #0] +1000e0b0: 6909 ldr r1, [r1, #16] +1000e0b2: 6808 ldr r0, [r1, #0] +1000e0b4: 2100 movs r1, #0 +1000e0b6: f880 17e2 strb.w r1, [r0, #2018] ; 0x7e2 +1000e0ba: 2101 movs r1, #1 +1000e0bc: f880 27e1 strb.w r2, [r0, #2017] ; 0x7e1 +1000e0c0: f880 186d strb.w r1, [r0, #2157] ; 0x86d +1000e0c4: f8a0 37e4 strh.w r3, [r0, #2020] ; 0x7e4 +1000e0c8: 481e ldr r0, [pc, #120] ; (1000e144 ) +1000e0ca: f7ff fcfd bl 1000dac8 +1000e0ce: 4601 mov r1, r0 +1000e0d0: b110 cbz r0, 1000e0d8 +1000e0d2: 481d ldr r0, [pc, #116] ; (1000e148 ) +1000e0d4: f00c fd54 bl 1001ab80 +1000e0d8: 2200 movs r2, #0 +1000e0da: f894 3069 ldrb.w r3, [r4, #105] ; 0x69 +1000e0de: f994 1068 ldrsb.w r1, [r4, #104] ; 0x68 +1000e0e2: 9202 str r2, [sp, #8] +1000e0e4: f04f 32ff mov.w r2, #4294967295 +1000e0e8: 2b09 cmp r3, #9 +1000e0ea: bf28 it cs +1000e0ec: 2306 movcs r3, #6 +1000e0ee: 4817 ldr r0, [pc, #92] ; (1000e14c ) +1000e0f0: 9201 str r2, [sp, #4] +1000e0f2: 4a17 ldr r2, [pc, #92] ; (1000e150 ) +1000e0f4: 9000 str r0, [sp, #0] +1000e0f6: f852 3023 ldr.w r3, [r2, r3, lsl #2] +1000e0fa: f1a0 0221 sub.w r2, r0, #33 ; 0x21 +1000e0fe: 3041 adds r0, #65 ; 0x41 +1000e100: f7fe ff32 bl 1000cf68 +1000e104: 2201 movs r2, #1 +1000e106: 4b13 ldr r3, [pc, #76] ; (1000e154 ) +1000e108: 4604 mov r4, r0 +1000e10a: 701a strb r2, [r3, #0] +1000e10c: b138 cbz r0, 1000e11e +1000e10e: 4602 mov r2, r0 +1000e110: 4911 ldr r1, [pc, #68] ; (1000e158 ) +1000e112: 4812 ldr r0, [pc, #72] ; (1000e15c ) +1000e114: f00c fd34 bl 1001ab80 +1000e118: 4620 mov r0, r4 +1000e11a: b004 add sp, #16 +1000e11c: bd10 pop {r4, pc} +1000e11e: 4b10 ldr r3, [pc, #64] ; (1000e160 ) +1000e120: 799b ldrb r3, [r3, #6] +1000e122: 079b lsls r3, r3, #30 +1000e124: d502 bpl.n 1000e12c +1000e126: 2002 movs r0, #2 +1000e128: f7ff fe3e bl 1000dda8 +1000e12c: f7ff ff64 bl 1000dff8 +1000e130: e7f2 b.n 1000e118 +1000e132: bf00 nop +1000e134: 10044e47 .word 0x10044e47 +1000e138: 1000dd11 .word 0x1000dd11 +1000e13c: 1004bb94 .word 0x1004bb94 +1000e140: 1004e03c .word 0x1004e03c +1000e144: 1003fb87 .word 0x1003fb87 +1000e148: 1003fec0 .word 0x1003fec0 +1000e14c: 10044e68 .word 0x10044e68 +1000e150: 10044da0 .word 0x10044da0 +1000e154: 1004aa85 .word 0x1004aa85 +1000e158: 1003fd4c .word 0x1003fd4c +1000e15c: 1003fee3 .word 0x1003fee3 +1000e160: 10044e40 .word 0x10044e40 + +1000e164 : +1000e164: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1000e168: 4e7b ldr r6, [pc, #492] ; (1000e358 ) +1000e16a: 4604 mov r4, r0 +1000e16c: 7833 ldrb r3, [r6, #0] +1000e16e: b13b cbz r3, 1000e180 +1000e170: f7ff f93e bl 1000d3f0 +1000e174: 2200 movs r2, #0 +1000e176: 4b79 ldr r3, [pc, #484] ; (1000e35c ) +1000e178: 201e movs r0, #30 +1000e17a: 701a strb r2, [r3, #0] +1000e17c: f008 f968 bl 10016450 +1000e180: 2c00 cmp r4, #0 +1000e182: f000 80db beq.w 1000e33c +1000e186: 4d76 ldr r5, [pc, #472] ; (1000e360 ) +1000e188: b2e7 uxtb r7, r4 +1000e18a: 7037 strb r7, [r6, #0] +1000e18c: f7ff fd9a bl 1000dcc4 +1000e190: 7868 ldrb r0, [r5, #1] +1000e192: f000 0003 and.w r0, r0, #3 +1000e196: f7ff fcbf bl 1000db18 +1000e19a: 4621 mov r1, r4 +1000e19c: 2000 movs r0, #0 +1000e19e: f028 fe5d bl 10036e5c +1000e1a2: 4680 mov r8, r0 +1000e1a4: 486f ldr r0, [pc, #444] ; (1000e364 ) +1000e1a6: f002 fe99 bl 10010edc +1000e1aa: f1b8 0f00 cmp.w r8, #0 +1000e1ae: f8df 81b4 ldr.w r8, [pc, #436] ; 1000e364 +1000e1b2: f2c0 80c0 blt.w 1000e336 +1000e1b6: 2c03 cmp r4, #3 +1000e1b8: d124 bne.n 1000e204 +1000e1ba: 4621 mov r1, r4 +1000e1bc: 2001 movs r0, #1 +1000e1be: f028 fe4d bl 10036e5c +1000e1c2: 2800 cmp r0, #0 +1000e1c4: f2c0 80b7 blt.w 1000e336 +1000e1c8: f108 003c add.w r0, r8, #60 ; 0x3c +1000e1cc: f002 fe86 bl 10010edc +1000e1d0: f008 f830 bl 10016234 +1000e1d4: 4681 mov r9, r0 +1000e1d6: 2000 movs r0, #0 +1000e1d8: f028 fee8 bl 10036fac +1000e1dc: 2c03 cmp r4, #3 +1000e1de: d102 bne.n 1000e1e6 +1000e1e0: 2001 movs r0, #1 +1000e1e2: f028 fee3 bl 10036fac +1000e1e6: 2000 movs r0, #0 +1000e1e8: f029 f814 bl 10037214 +1000e1ec: b978 cbnz r0, 1000e20e +1000e1ee: f008 f821 bl 10016234 +1000e1f2: eba0 0009 sub.w r0, r0, r9 +1000e1f6: f5b0 6ffa cmp.w r0, #2000 ; 0x7d0 +1000e1fa: d972 bls.n 1000e2e2 +1000e1fc: 485a ldr r0, [pc, #360] ; (1000e368 ) +1000e1fe: f00c fcbf bl 1001ab80 +1000e202: e00b b.n 1000e21c +1000e204: f108 003c add.w r0, r8, #60 ; 0x3c +1000e208: f002 fe83 bl 10010f12 +1000e20c: e7e0 b.n 1000e1d0 +1000e20e: 1ee2 subs r2, r4, #3 +1000e210: 4250 negs r0, r2 +1000e212: 4150 adcs r0, r2 +1000e214: f028 fffe bl 10037214 +1000e218: 2800 cmp r0, #0 +1000e21a: d0e8 beq.n 1000e1ee +1000e21c: 78a8 ldrb r0, [r5, #2] +1000e21e: f7ff f8db bl 1000d3d8 +1000e222: b118 cbz r0, 1000e22c +1000e224: 78a9 ldrb r1, [r5, #2] +1000e226: 4851 ldr r0, [pc, #324] ; (1000e36c ) +1000e228: f00c fcaa bl 1001ab80 +1000e22c: 4b50 ldr r3, [pc, #320] ; (1000e370 ) +1000e22e: 78e8 ldrb r0, [r5, #3] +1000e230: 781b ldrb r3, [r3, #0] +1000e232: 4283 cmp r3, r0 +1000e234: d006 beq.n 1000e244 +1000e236: f028 ff89 bl 1003714c +1000e23a: b118 cbz r0, 1000e244 +1000e23c: 78e9 ldrb r1, [r5, #3] +1000e23e: 484d ldr r0, [pc, #308] ; (1000e374 ) +1000e240: f00c fc9e bl 1001ab80 +1000e244: 7928 ldrb r0, [r5, #4] +1000e246: f7ff f985 bl 1000d554 +1000e24a: b118 cbz r0, 1000e254 +1000e24c: 7929 ldrb r1, [r5, #4] +1000e24e: 484a ldr r0, [pc, #296] ; (1000e378 ) +1000e250: f00c fc96 bl 1001ab80 +1000e254: 2c03 cmp r4, #3 +1000e256: d81c bhi.n 1000e292 +1000e258: f04f 0a3c mov.w sl, #60 ; 0x3c +1000e25c: 4b47 ldr r3, [pc, #284] ; (1000e37c ) +1000e25e: f8df 9144 ldr.w r9, [pc, #324] ; 1000e3a4 +1000e262: 7818 ldrb r0, [r3, #0] +1000e264: 4b46 ldr r3, [pc, #280] ; (1000e380 ) +1000e266: fb0a 8000 mla r0, sl, r0, r8 +1000e26a: 1f1a subs r2, r3, #4 +1000e26c: f1a3 0108 sub.w r1, r3, #8 +1000e270: f8c0 9024 str.w r9, [r0, #36] ; 0x24 +1000e274: f002 fde6 bl 10010e44 +1000e278: 4b42 ldr r3, [pc, #264] ; (1000e384 ) +1000e27a: 7818 ldrb r0, [r3, #0] +1000e27c: f109 0310 add.w r3, r9, #16 +1000e280: fb0a 8000 mla r0, sl, r0, r8 +1000e284: 6243 str r3, [r0, #36] ; 0x24 +1000e286: 4b40 ldr r3, [pc, #256] ; (1000e388 ) +1000e288: 1f1a subs r2, r3, #4 +1000e28a: f1a3 0108 sub.w r1, r3, #8 +1000e28e: f002 fdd9 bl 10010e44 +1000e292: 2c02 cmp r4, #2 +1000e294: d045 beq.n 1000e322 +1000e296: 2c03 cmp r4, #3 +1000e298: d027 beq.n 1000e2ea +1000e29a: 2c01 cmp r4, #1 +1000e29c: d145 bne.n 1000e32a +1000e29e: 7833 ldrb r3, [r6, #0] +1000e2a0: f003 03fd and.w r3, r3, #253 ; 0xfd +1000e2a4: 2b01 cmp r3, #1 +1000e2a6: d13a bne.n 1000e31e +1000e2a8: f7ff fef6 bl 1000e098 +1000e2ac: 4604 mov r4, r0 +1000e2ae: 4e37 ldr r6, [pc, #220] ; (1000e38c ) +1000e2b0: 2000 movs r0, #0 +1000e2b2: f896 106d ldrb.w r1, [r6, #109] ; 0x6d +1000e2b6: f7ff fdb1 bl 1000de1c <_wext_set_lps_dtim> +1000e2ba: b120 cbz r0, 1000e2c6 +1000e2bc: f896 106d ldrb.w r1, [r6, #109] ; 0x6d +1000e2c0: 4833 ldr r0, [pc, #204] ; (1000e390 ) +1000e2c2: f00c fc5d bl 1001ab80 +1000e2c6: f896 106c ldrb.w r1, [r6, #108] ; 0x6c +1000e2ca: 2000 movs r0, #0 +1000e2cc: f3c1 0240 ubfx r2, r1, #1, #1 +1000e2d0: f001 0101 and.w r1, r1, #1 +1000e2d4: f7ff fdb0 bl 1000de38 <_wext_enable_powersave> +1000e2d8: b190 cbz r0, 1000e300 +1000e2da: 482e ldr r0, [pc, #184] ; (1000e394 ) +1000e2dc: f00c fc50 bl 1001ab80 +1000e2e0: e00e b.n 1000e300 +1000e2e2: 2014 movs r0, #20 +1000e2e4: f008 f8b4 bl 10016450 +1000e2e8: e77d b.n 1000e1e6 +1000e2ea: f7ff fde9 bl 1000dec0 +1000e2ee: 7833 ldrb r3, [r6, #0] +1000e2f0: 4604 mov r4, r0 +1000e2f2: f003 03fd and.w r3, r3, #253 ; 0xfd +1000e2f6: 2b01 cmp r3, #1 +1000e2f8: d10f bne.n 1000e31a +1000e2fa: f7ff fecd bl 1000e098 +1000e2fe: 4304 orrs r4, r0 +1000e300: 4b25 ldr r3, [pc, #148] ; (1000e398 ) +1000e302: 701f strb r7, [r3, #0] +1000e304: b934 cbnz r4, 1000e314 +1000e306: 79ab ldrb r3, [r5, #6] +1000e308: 06db lsls r3, r3, #27 +1000e30a: d503 bpl.n 1000e314 +1000e30c: 2010 movs r0, #16 +1000e30e: 702f strb r7, [r5, #0] +1000e310: f7ff fd4a bl 1000dda8 +1000e314: 4620 mov r0, r4 +1000e316: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1000e31a: 2000 movs r0, #0 +1000e31c: e7ef b.n 1000e2fe +1000e31e: 2400 movs r4, #0 +1000e320: e7c5 b.n 1000e2ae +1000e322: f7ff fdcd bl 1000dec0 +1000e326: 4604 mov r4, r0 +1000e328: e7ea b.n 1000e300 +1000e32a: 7831 ldrb r1, [r6, #0] +1000e32c: 481b ldr r0, [pc, #108] ; (1000e39c ) +1000e32e: f00c fc27 bl 1001ab80 +1000e332: 2401 movs r4, #1 +1000e334: e7e4 b.n 1000e300 +1000e336: 481a ldr r0, [pc, #104] ; (1000e3a0 ) +1000e338: f00c fc22 bl 1001ab80 +1000e33c: 4d16 ldr r5, [pc, #88] ; (1000e398 ) +1000e33e: 782a ldrb r2, [r5, #0] +1000e340: b10a cbz r2, 1000e346 +1000e342: f7ff f82f bl 1000d3a4 +1000e346: 2400 movs r4, #0 +1000e348: f7ff f852 bl 1000d3f0 +1000e34c: 4b03 ldr r3, [pc, #12] ; (1000e35c ) +1000e34e: 702c strb r4, [r5, #0] +1000e350: 701c strb r4, [r3, #0] +1000e352: f7ff fcb7 bl 1000dcc4 +1000e356: e7dd b.n 1000e314 +1000e358: 1004a804 .word 0x1004a804 +1000e35c: 1004aa85 .word 0x1004aa85 +1000e360: 10044e40 .word 0x10044e40 +1000e364: 1004aa04 .word 0x1004aa04 +1000e368: 1003fd92 .word 0x1003fd92 +1000e36c: 1003fda6 .word 0x1003fda6 +1000e370: 1004de08 .word 0x1004de08 +1000e374: 1003fdcc .word 0x1003fdcc +1000e378: 1003fdeb .word 0x1003fdeb +1000e37c: 1004aa86 .word 0x1004aa86 +1000e380: 10044ec0 .word 0x10044ec0 +1000e384: 10044ece .word 0x10044ece +1000e388: 10044e38 .word 0x10044e38 +1000e38c: 10044e47 .word 0x10044e47 +1000e390: 1003fe0e .word 0x1003fe0e +1000e394: 1003fe28 .word 0x1003fe28 +1000e398: 1004aa84 .word 0x1004aa84 +1000e39c: 1003fe48 .word 0x1003fe48 +1000e3a0: 1003fe5e .word 0x1003fe5e +1000e3a4: 10044ee0 .word 0x10044ee0 + +1000e3a8 : +1000e3a8: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} +1000e3ac: 4c28 ldr r4, [pc, #160] ; (1000e450 ) +1000e3ae: f8df 90c0 ldr.w r9, [pc, #192] ; 1000e470 +1000e3b2: 7960 ldrb r0, [r4, #5] +1000e3b4: f7ff fcd4 bl 1000dd60 +1000e3b8: 2200 movs r2, #0 +1000e3ba: 4b26 ldr r3, [pc, #152] ; (1000e454 ) +1000e3bc: f8d9 5000 ldr.w r5, [r9] +1000e3c0: 601a str r2, [r3, #0] +1000e3c2: 46a2 mov sl, r4 +1000e3c4: 2d00 cmp r5, #0 +1000e3c6: d13b bne.n 1000e440 +1000e3c8: 4629 mov r1, r5 +1000e3ca: 4628 mov r0, r5 +1000e3cc: f000 fa8c bl 1000e8e8 +1000e3d0: 2372 movs r3, #114 ; 0x72 +1000e3d2: 4c21 ldr r4, [pc, #132] ; (1000e458 ) +1000e3d4: 263c movs r6, #60 ; 0x3c +1000e3d6: f884 3032 strb.w r3, [r4, #50] ; 0x32 +1000e3da: f884 306e strb.w r3, [r4, #110] ; 0x6e +1000e3de: 2331 movs r3, #49 ; 0x31 +1000e3e0: 2230 movs r2, #48 ; 0x30 +1000e3e2: f884 306f strb.w r3, [r4, #111] ; 0x6f +1000e3e6: 4b1d ldr r3, [pc, #116] ; (1000e45c ) +1000e3e8: f8df 8088 ldr.w r8, [pc, #136] ; 1000e474 +1000e3ec: 7818 ldrb r0, [r3, #0] +1000e3ee: 4f1c ldr r7, [pc, #112] ; (1000e460 ) +1000e3f0: 4b1c ldr r3, [pc, #112] ; (1000e464 ) +1000e3f2: f884 2033 strb.w r2, [r4, #51] ; 0x33 +1000e3f6: f1a3 0108 sub.w r1, r3, #8 +1000e3fa: 1f1a subs r2, r3, #4 +1000e3fc: f8cd 8008 str.w r8, [sp, #8] +1000e400: e88d 00a0 stmia.w sp, {r5, r7} +1000e404: fb06 4000 mla r0, r6, r0, r4 +1000e408: f002 fd2a bl 10010e60 +1000e40c: 4b16 ldr r3, [pc, #88] ; (1000e468 ) +1000e40e: 7818 ldrb r0, [r3, #0] +1000e410: 4b16 ldr r3, [pc, #88] ; (1000e46c ) +1000e412: e88d 01a0 stmia.w sp, {r5, r7, r8} +1000e416: 1f1a subs r2, r3, #4 +1000e418: f1a3 0108 sub.w r1, r3, #8 +1000e41c: fb06 4000 mla r0, r6, r0, r4 +1000e420: f002 fd1e bl 10010e60 +1000e424: 4620 mov r0, r4 +1000e426: f002 fd53 bl 10010ed0 +1000e42a: 4620 mov r0, r4 +1000e42c: f002 fd56 bl 10010edc +1000e430: 19a0 adds r0, r4, r6 +1000e432: f002 fd53 bl 10010edc +1000e436: 2301 movs r3, #1 +1000e438: f8c9 3000 str.w r3, [r9] +1000e43c: f7ff f900 bl 1000d640 +1000e440: f89a 0000 ldrb.w r0, [sl] +1000e444: b004 add sp, #16 +1000e446: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1000e44a: f7ff be8b b.w 1000e164 +1000e44e: bf00 nop +1000e450: 10044e40 .word 0x10044e40 +1000e454: 1004bb94 .word 0x1004bb94 +1000e458: 1004aa04 .word 0x1004aa04 +1000e45c: 1004aa86 .word 0x1004aa86 +1000e460: 10014685 .word 0x10014685 +1000e464: 10044ec0 .word 0x10044ec0 +1000e468: 10044ece .word 0x10044ece +1000e46c: 10044e38 .word 0x10044e38 +1000e470: 1004aa00 .word 0x1004aa00 +1000e474: 1000e809 .word 0x1000e809 + +1000e478 : +1000e478: b530 push {r4, r5, lr} +1000e47a: 2402 movs r4, #2 +1000e47c: b085 sub sp, #20 +1000e47e: 4605 mov r5, r0 +1000e480: 4811 ldr r0, [pc, #68] ; (1000e4c8 ) +1000e482: f00c fb7d bl 1001ab80 +1000e486: 4b11 ldr r3, [pc, #68] ; (1000e4cc ) +1000e488: 4a11 ldr r2, [pc, #68] ; (1000e4d0 ) +1000e48a: 701c strb r4, [r3, #0] +1000e48c: 2300 movs r3, #0 +1000e48e: f992 1068 ldrsb.w r1, [r2, #104] ; 0x68 +1000e492: 9302 str r3, [sp, #8] +1000e494: 686b ldr r3, [r5, #4] +1000e496: f102 0062 add.w r0, r2, #98 ; 0x62 +1000e49a: 9301 str r3, [sp, #4] +1000e49c: f102 0321 add.w r3, r2, #33 ; 0x21 +1000e4a0: 9300 str r3, [sp, #0] +1000e4a2: 682b ldr r3, [r5, #0] +1000e4a4: f7fe fd60 bl 1000cf68 +1000e4a8: b940 cbnz r0, 1000e4bc +1000e4aa: 4b0a ldr r3, [pc, #40] ; (1000e4d4 ) +1000e4ac: 799b ldrb r3, [r3, #6] +1000e4ae: 079b lsls r3, r3, #30 +1000e4b0: d502 bpl.n 1000e4b8 +1000e4b2: 4620 mov r0, r4 +1000e4b4: f7ff fc78 bl 1000dda8 +1000e4b8: f7ff fd9e bl 1000dff8 +1000e4bc: 2000 movs r0, #0 +1000e4be: b005 add sp, #20 +1000e4c0: e8bd 4030 ldmia.w sp!, {r4, r5, lr} +1000e4c4: f007 bda8 b.w 10016018 +1000e4c8: 100413c5 .word 0x100413c5 +1000e4cc: 1004aa85 .word 0x1004aa85 +1000e4d0: 10044e47 .word 0x10044e47 +1000e4d4: 10044e40 .word 0x10044e40 + +1000e4d8 : +1000e4d8: b513 push {r0, r1, r4, lr} +1000e4da: 4c1a ldr r4, [pc, #104] ; (1000e544 ) +1000e4dc: 481a ldr r0, [pc, #104] ; (1000e548 ) +1000e4de: f00c fb4f bl 1001ab80 +1000e4e2: 7ce3 ldrb r3, [r4, #19] +1000e4e4: b18b cbz r3, 1000e50a +1000e4e6: 4919 ldr r1, [pc, #100] ; (1000e54c ) +1000e4e8: 2003 movs r0, #3 +1000e4ea: f7ff f887 bl 1000d5fc +1000e4ee: 2004 movs r0, #4 +1000e4f0: 4917 ldr r1, [pc, #92] ; (1000e550 ) +1000e4f2: f7ff f883 bl 1000d5fc +1000e4f6: 6860 ldr r0, [r4, #4] +1000e4f8: b110 cbz r0, 1000e500 +1000e4fa: 2100 movs r1, #0 +1000e4fc: f008 ff95 bl 1001742a +1000e500: 2214 movs r2, #20 +1000e502: 2100 movs r1, #0 +1000e504: 480f ldr r0, [pc, #60] ; (1000e544 ) +1000e506: f008 ffa3 bl 10017450 +1000e50a: 4c12 ldr r4, [pc, #72] ; (1000e554 ) +1000e50c: 7ae3 ldrb r3, [r4, #11] +1000e50e: b1b3 cbz r3, 1000e53e +1000e510: 6820 ldr r0, [r4, #0] +1000e512: b138 cbz r0, 1000e524 +1000e514: f04f 33ff mov.w r3, #4294967295 +1000e518: 9300 str r3, [sp, #0] +1000e51a: 2300 movs r3, #0 +1000e51c: 2105 movs r1, #5 +1000e51e: 461a mov r2, r3 +1000e520: f008 fa46 bl 100169b0 +1000e524: 6860 ldr r0, [r4, #4] +1000e526: b110 cbz r0, 1000e52e +1000e528: 2100 movs r1, #0 +1000e52a: f008 ff7e bl 1001742a +1000e52e: 220c movs r2, #12 +1000e530: 2100 movs r1, #0 +1000e532: 4808 ldr r0, [pc, #32] ; (1000e554 ) +1000e534: b002 add sp, #8 +1000e536: e8bd 4010 ldmia.w sp!, {r4, lr} +1000e53a: f008 bf89 b.w 10017450 +1000e53e: b002 add sp, #8 +1000e540: bd10 pop {r4, pc} +1000e542: bf00 nop +1000e544: 1004a7f0 .word 0x1004a7f0 +1000e548: 1003ff18 .word 0x1003ff18 +1000e54c: 1000ce05 .word 0x1000ce05 +1000e550: 1000e559 .word 0x1000e559 +1000e554: 1004aa88 .word 0x1004aa88 + +1000e558 <_wifi_scan_done_hdl>: +1000e558: b573 push {r0, r1, r4, r5, r6, lr} +1000e55a: 481b ldr r0, [pc, #108] ; (1000e5c8 <_wifi_scan_done_hdl+0x70>) +1000e55c: 6885 ldr r5, [r0, #8] +1000e55e: 4606 mov r6, r0 +1000e560: b12d cbz r5, 1000e56e <_wifi_scan_done_hdl+0x16> +1000e562: 47a8 blx r5 +1000e564: b002 add sp, #8 +1000e566: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1000e56a: f7ff bfb5 b.w 1000e4d8 +1000e56e: 4c17 ldr r4, [pc, #92] ; (1000e5cc <_wifi_scan_done_hdl+0x74>) +1000e570: 7ae3 ldrb r3, [r4, #11] +1000e572: 2b00 cmp r3, #0 +1000e574: d0f6 beq.n 1000e564 <_wifi_scan_done_hdl+0xc> +1000e576: 7c03 ldrb r3, [r0, #16] +1000e578: 2b00 cmp r3, #0 +1000e57a: d0f3 beq.n 1000e564 <_wifi_scan_done_hdl+0xc> +1000e57c: f04f 33ff mov.w r3, #4294967295 +1000e580: f241 3288 movw r2, #5000 ; 0x1388 +1000e584: 9300 str r3, [sp, #0] +1000e586: 2104 movs r1, #4 +1000e588: 462b mov r3, r5 +1000e58a: 6820 ldr r0, [r4, #0] +1000e58c: f008 fa10 bl 100169b0 +1000e590: 2801 cmp r0, #1 +1000e592: d117 bne.n 1000e5c4 <_wifi_scan_done_hdl+0x6c> +1000e594: 6860 ldr r0, [r4, #4] +1000e596: b110 cbz r0, 1000e59e <_wifi_scan_done_hdl+0x46> +1000e598: 4629 mov r1, r5 +1000e59a: f008 ff46 bl 1001742a +1000e59e: 6873 ldr r3, [r6, #4] +1000e5a0: 490b ldr r1, [pc, #44] ; (1000e5d0 <_wifi_scan_done_hdl+0x78>) +1000e5a2: 6063 str r3, [r4, #4] +1000e5a4: 7c33 ldrb r3, [r6, #16] +1000e5a6: 2003 movs r0, #3 +1000e5a8: 7223 strb r3, [r4, #8] +1000e5aa: f7ff f827 bl 1000d5fc +1000e5ae: 4909 ldr r1, [pc, #36] ; (1000e5d4 <_wifi_scan_done_hdl+0x7c>) +1000e5b0: 2004 movs r0, #4 +1000e5b2: f7ff f823 bl 1000d5fc +1000e5b6: 2214 movs r2, #20 +1000e5b8: 2100 movs r1, #0 +1000e5ba: 4803 ldr r0, [pc, #12] ; (1000e5c8 <_wifi_scan_done_hdl+0x70>) +1000e5bc: f008 ff48 bl 10017450 +1000e5c0: 2302 movs r3, #2 +1000e5c2: 72e3 strb r3, [r4, #11] +1000e5c4: b002 add sp, #8 +1000e5c6: bd70 pop {r4, r5, r6, pc} +1000e5c8: 1004a7f0 .word 0x1004a7f0 +1000e5cc: 1004aa88 .word 0x1004aa88 +1000e5d0: 1000ce05 .word 0x1000ce05 +1000e5d4: 1000e559 .word 0x1000e559 + +1000e5d8 : +1000e5d8: b513 push {r0, r1, r4, lr} +1000e5da: 4c0b ldr r4, [pc, #44] ; (1000e608 ) +1000e5dc: 4602 mov r2, r0 +1000e5de: 7ae3 ldrb r3, [r4, #11] +1000e5e0: b17b cbz r3, 1000e602 +1000e5e2: f04f 33ff mov.w r3, #4294967295 +1000e5e6: 2104 movs r1, #4 +1000e5e8: 9300 str r3, [sp, #0] +1000e5ea: 6820 ldr r0, [r4, #0] +1000e5ec: 2300 movs r3, #0 +1000e5ee: f008 f9df bl 100169b0 +1000e5f2: 2801 cmp r0, #1 +1000e5f4: d005 beq.n 1000e602 +1000e5f6: 4805 ldr r0, [pc, #20] ; (1000e60c ) +1000e5f8: b002 add sp, #8 +1000e5fa: e8bd 4010 ldmia.w sp!, {r4, lr} +1000e5fe: f00c babf b.w 1001ab80 +1000e602: b002 add sp, #8 +1000e604: bd10 pop {r4, pc} +1000e606: bf00 nop +1000e608: 1004aa88 .word 0x1004aa88 +1000e60c: 1003ff28 .word 0x1003ff28 + +1000e610 : +1000e610: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +1000e614: 4c4d ldr r4, [pc, #308] ; (1000e74c ) +1000e616: b08b sub sp, #44 ; 0x2c +1000e618: 7ce3 ldrb r3, [r4, #19] +1000e61a: 4606 mov r6, r0 +1000e61c: 2b00 cmp r3, #0 +1000e61e: f040 8092 bne.w 1000e746 +1000e622: 4d4b ldr r5, [pc, #300] ; (1000e750 ) +1000e624: 7aeb ldrb r3, [r5, #11] +1000e626: f003 07ff and.w r7, r3, #255 ; 0xff +1000e62a: 2b00 cmp r3, #0 +1000e62c: f040 808b bne.w 1000e746 +1000e630: f04f 0901 mov.w r9, #1 +1000e634: 220c movs r2, #12 +1000e636: 4639 mov r1, r7 +1000e638: 4628 mov r0, r5 +1000e63a: f884 9013 strb.w r9, [r4, #19] +1000e63e: f008 ff07 bl 10017450 +1000e642: 4b44 ldr r3, [pc, #272] ; (1000e754 ) +1000e644: f885 900b strb.w r9, [r5, #11] +1000e648: 463a mov r2, r7 +1000e64a: 9300 str r3, [sp, #0] +1000e64c: f640 11c4 movw r1, #2500 ; 0x9c4 +1000e650: 463b mov r3, r7 +1000e652: 4841 ldr r0, [pc, #260] ; (1000e758 ) +1000e654: f008 f992 bl 1001697c +1000e658: 4680 mov r8, r0 +1000e65a: 6028 str r0, [r5, #0] +1000e65c: 2800 cmp r0, #0 +1000e65e: d044 beq.n 1000e6ea +1000e660: f007 fde8 bl 10016234 +1000e664: f04f 33ff mov.w r3, #4294967295 +1000e668: 4602 mov r2, r0 +1000e66a: 9300 str r3, [sp, #0] +1000e66c: 4649 mov r1, r9 +1000e66e: 463b mov r3, r7 +1000e670: 4640 mov r0, r8 +1000e672: f008 f99d bl 100169b0 +1000e676: 4548 cmp r0, r9 +1000e678: 4605 mov r5, r0 +1000e67a: d136 bne.n 1000e6ea +1000e67c: 4639 mov r1, r7 +1000e67e: 2220 movs r2, #32 +1000e680: a802 add r0, sp, #8 +1000e682: f008 fee5 bl 10017450 +1000e686: 2029 movs r0, #41 ; 0x29 +1000e688: f8ad 001c strh.w r0, [sp, #28] +1000e68c: f009 f890 bl 100177b0 +1000e690: 4607 mov r7, r0 +1000e692: 9006 str r0, [sp, #24] +1000e694: b348 cbz r0, 1000e6ea +1000e696: 220c movs r2, #12 +1000e698: 4930 ldr r1, [pc, #192] ; (1000e75c ) +1000e69a: f008 fec9 bl 10017430 +1000e69e: 220e movs r2, #14 +1000e6a0: 463b mov r3, r7 +1000e6a2: 4628 mov r0, r5 +1000e6a4: f803 2f0c strb.w r2, [r3, #12]! +1000e6a8: 462a mov r2, r5 +1000e6aa: 7058 strb r0, [r3, #1] +1000e6ac: 3001 adds r0, #1 +1000e6ae: 280f cmp r0, #15 +1000e6b0: f8a3 200f strh.w r2, [r3, #15] +1000e6b4: f103 0301 add.w r3, r3, #1 +1000e6b8: d1f7 bne.n 1000e6aa +1000e6ba: aa02 add r2, sp, #8 +1000e6bc: f648 11f0 movw r1, #35312 ; 0x89f0 +1000e6c0: 4827 ldr r0, [pc, #156] ; (1000e760 ) +1000e6c2: f7fe ffcd bl 1000d660 +1000e6c6: 4605 mov r5, r0 +1000e6c8: 2100 movs r1, #0 +1000e6ca: 4638 mov r0, r7 +1000e6cc: f008 fead bl 1001742a +1000e6d0: 2d00 cmp r5, #0 +1000e6d2: db0a blt.n 1000e6ea +1000e6d4: 2320 movs r3, #32 +1000e6d6: f44f 6004 mov.w r0, #2112 ; 0x840 +1000e6da: 60a6 str r6, [r4, #8] +1000e6dc: 7463 strb r3, [r4, #17] +1000e6de: f009 f877 bl 100177d0 +1000e6e2: 6060 str r0, [r4, #4] +1000e6e4: b930 cbnz r0, 1000e6f4 +1000e6e6: f7ff fef7 bl 1000e4d8 +1000e6ea: f7ff fef5 bl 1000e4d8 +1000e6ee: f04f 30ff mov.w r0, #4294967295 +1000e6f2: e025 b.n 1000e740 +1000e6f4: 2500 movs r5, #0 +1000e6f6: f500 60f8 add.w r0, r0, #1984 ; 0x7c0 +1000e6fa: 6020 str r0, [r4, #0] +1000e6fc: 462a mov r2, r5 +1000e6fe: 4919 ldr r1, [pc, #100] ; (1000e764 ) +1000e700: 2003 movs r0, #3 +1000e702: 7425 strb r5, [r4, #16] +1000e704: 74a5 strb r5, [r4, #18] +1000e706: 60e5 str r5, [r4, #12] +1000e708: f7fe ff50 bl 1000d5ac +1000e70c: 462a mov r2, r5 +1000e70e: 4916 ldr r1, [pc, #88] ; (1000e768 ) +1000e710: 2004 movs r0, #4 +1000e712: f7fe ff4b bl 1000d5ac +1000e716: f44f 7304 mov.w r3, #528 ; 0x210 +1000e71a: 462a mov r2, r5 +1000e71c: 4629 mov r1, r5 +1000e71e: 4810 ldr r0, [pc, #64] ; (1000e760 ) +1000e720: f7ff f916 bl 1000d950 +1000e724: 2800 cmp r0, #0 +1000e726: d1de bne.n 1000e6e6 +1000e728: b14e cbz r6, 1000e73e +1000e72a: f240 152d movw r5, #301 ; 0x12d +1000e72e: e004 b.n 1000e73a +1000e730: 7ce3 ldrb r3, [r4, #19] +1000e732: b123 cbz r3, 1000e73e +1000e734: 200a movs r0, #10 +1000e736: f007 fe8b bl 10016450 +1000e73a: 3d01 subs r5, #1 +1000e73c: d1f8 bne.n 1000e730 +1000e73e: 2000 movs r0, #0 +1000e740: b00b add sp, #44 ; 0x2c +1000e742: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +1000e746: 2002 movs r0, #2 +1000e748: e7fa b.n 1000e740 +1000e74a: bf00 nop +1000e74c: 1004a7f0 .word 0x1004a7f0 +1000e750: 1004aa88 .word 0x1004aa88 +1000e754: 1000e4d9 .word 0x1000e4d9 +1000e758: 1003ff04 .word 0x1003ff04 +1000e75c: 1003ff0c .word 0x1003ff0c +1000e760: 1003fb87 .word 0x1003fb87 +1000e764: 1000ce05 .word 0x1000ce05 +1000e768: 1000e559 .word 0x1000e559 + +1000e76c : +1000e76c: 4b02 ldr r3, [pc, #8] ; (1000e778 ) +1000e76e: 4240 negs r0, r0 +1000e770: f853 0020 ldr.w r0, [r3, r0, lsl #2] +1000e774: 4770 bx lr +1000e776: bf00 nop +1000e778: 1003ff44 .word 0x1003ff44 + +1000e77c : +1000e77c: 4770 bx lr + ... + +1000e780 : +1000e780: 4b1e ldr r3, [pc, #120] ; (1000e7fc ) +1000e782: b507 push {r0, r1, r2, lr} +1000e784: 681b ldr r3, [r3, #0] +1000e786: b113 cbz r3, 1000e78e +1000e788: 4a1d ldr r2, [pc, #116] ; (1000e800 ) +1000e78a: 6810 ldr r0, [r2, #0] +1000e78c: 4798 blx r3 +1000e78e: 4c1d ldr r4, [pc, #116] ; (1000e804 ) +1000e790: a901 add r1, sp, #4 +1000e792: 4620 mov r0, r4 +1000e794: f002 fafc bl 10010d90 +1000e798: 9b01 ldr r3, [sp, #4] +1000e79a: 681a ldr r2, [r3, #0] +1000e79c: 2a05 cmp r2, #5 +1000e79e: d8f7 bhi.n 1000e790 +1000e7a0: e8df f002 tbb [pc, r2] +1000e7a4: 1e180803 .word 0x1e180803 +1000e7a8: 2723 .short 0x2723 +1000e7aa: 6898 ldr r0, [r3, #8] +1000e7ac: 6803 ldr r3, [r0, #0] +1000e7ae: 3004 adds r0, #4 +1000e7b0: 4798 blx r3 +1000e7b2: e7ed b.n 1000e790 +1000e7b4: 68d9 ldr r1, [r3, #12] +1000e7b6: 6898 ldr r0, [r3, #8] +1000e7b8: f891 2031 ldrb.w r2, [r1, #49] ; 0x31 +1000e7bc: f012 0f60 tst.w r2, #96 ; 0x60 +1000e7c0: d005 beq.n 1000e7ce +1000e7c2: f005 fdd1 bl 10014368 +1000e7c6: 9801 ldr r0, [sp, #4] +1000e7c8: f006 fd60 bl 1001528c +1000e7cc: e7e0 b.n 1000e790 +1000e7ce: f000 fbc7 bl 1000ef60 +1000e7d2: e7f8 b.n 1000e7c6 +1000e7d4: f103 0008 add.w r0, r3, #8 +1000e7d8: c807 ldmia r0, {r0, r1, r2} +1000e7da: f002 f9cb bl 10010b74 +1000e7de: e7f2 b.n 1000e7c6 +1000e7e0: 6919 ldr r1, [r3, #16] +1000e7e2: 68d8 ldr r0, [r3, #12] +1000e7e4: f002 fab0 bl 10010d48 +1000e7e8: e7ed b.n 1000e7c6 +1000e7ea: 689a ldr r2, [r3, #8] +1000e7ec: 68d8 ldr r0, [r3, #12] +1000e7ee: 4790 blx r2 +1000e7f0: e7e9 b.n 1000e7c6 +1000e7f2: 689a ldr r2, [r3, #8] +1000e7f4: 68d8 ldr r0, [r3, #12] +1000e7f6: 4790 blx r2 +1000e7f8: e7ca b.n 1000e790 +1000e7fa: bf00 nop +1000e7fc: 1004aa98 .word 0x1004aa98 +1000e800: 1004aa9c .word 0x1004aa9c +1000e804: 1004aa94 .word 0x1004aa94 + +1000e808 : +1000e808: b570 push {r4, r5, r6, lr} +1000e80a: 4606 mov r6, r0 +1000e80c: 480e ldr r0, [pc, #56] ; (1000e848 ) +1000e80e: 460d mov r5, r1 +1000e810: f006 f882 bl 10014918 +1000e814: b1a0 cbz r0, 1000e840 +1000e816: 4b0d ldr r3, [pc, #52] ; (1000e84c ) +1000e818: 8a98 ldrh r0, [r3, #20] +1000e81a: f006 fc9b bl 10015154 +1000e81e: 4604 mov r4, r0 +1000e820: b158 cbz r0, 1000e83a +1000e822: 2301 movs r3, #1 +1000e824: 6086 str r6, [r0, #8] +1000e826: 6003 str r3, [r0, #0] +1000e828: 60c5 str r5, [r0, #12] +1000e82a: 4601 mov r1, r0 +1000e82c: 4806 ldr r0, [pc, #24] ; (1000e848 ) +1000e82e: f006 f83c bl 100148aa +1000e832: b120 cbz r0, 1000e83e +1000e834: 4620 mov r0, r4 +1000e836: f006 fd29 bl 1001528c +1000e83a: f04f 30ff mov.w r0, #4294967295 +1000e83e: bd70 pop {r4, r5, r6, pc} +1000e840: f06f 0005 mvn.w r0, #5 +1000e844: bd70 pop {r4, r5, r6, pc} +1000e846: bf00 nop +1000e848: 1004aa94 .word 0x1004aa94 +1000e84c: 100400a8 .word 0x100400a8 + +1000e850 : +1000e850: b5f8 push {r3, r4, r5, r6, r7, lr} +1000e852: 4607 mov r7, r0 +1000e854: 4811 ldr r0, [pc, #68] ; (1000e89c ) +1000e856: 460e mov r6, r1 +1000e858: 4615 mov r5, r2 +1000e85a: f006 f85d bl 10014918 +1000e85e: b1c8 cbz r0, 1000e894 +1000e860: 4b0f ldr r3, [pc, #60] ; (1000e8a0 ) +1000e862: 8a58 ldrh r0, [r3, #18] +1000e864: f006 fc76 bl 10015154 +1000e868: 4604 mov r4, r0 +1000e86a: b180 cbz r0, 1000e88e +1000e86c: 2304 movs r3, #4 +1000e86e: 6087 str r7, [r0, #8] +1000e870: 6003 str r3, [r0, #0] +1000e872: 60c6 str r6, [r0, #12] +1000e874: 4601 mov r1, r0 +1000e876: 4809 ldr r0, [pc, #36] ; (1000e89c ) +1000e878: b11d cbz r5, 1000e882 +1000e87a: f006 f806 bl 1001488a +1000e87e: 2000 movs r0, #0 +1000e880: bdf8 pop {r3, r4, r5, r6, r7, pc} +1000e882: f006 f812 bl 100148aa +1000e886: b120 cbz r0, 1000e892 +1000e888: 4620 mov r0, r4 +1000e88a: f006 fcff bl 1001528c +1000e88e: f04f 30ff mov.w r0, #4294967295 +1000e892: bdf8 pop {r3, r4, r5, r6, r7, pc} +1000e894: f06f 0005 mvn.w r0, #5 +1000e898: bdf8 pop {r3, r4, r5, r6, r7, pc} +1000e89a: bf00 nop +1000e89c: 1004aa94 .word 0x1004aa94 +1000e8a0: 100400a8 .word 0x100400a8 + +1000e8a4 : +1000e8a4: b570 push {r4, r5, r6, lr} +1000e8a6: 4606 mov r6, r0 +1000e8a8: 480d ldr r0, [pc, #52] ; (1000e8e0 ) +1000e8aa: 460d mov r5, r1 +1000e8ac: 4614 mov r4, r2 +1000e8ae: f006 f833 bl 10014918 +1000e8b2: b178 cbz r0, 1000e8d4 +1000e8b4: 4b0b ldr r3, [pc, #44] ; (1000e8e4 ) +1000e8b6: 8a58 ldrh r0, [r3, #18] +1000e8b8: f006 fc4c bl 10015154 +1000e8bc: 4601 mov r1, r0 +1000e8be: b160 cbz r0, 1000e8da +1000e8c0: 2302 movs r3, #2 +1000e8c2: 6086 str r6, [r0, #8] +1000e8c4: 6003 str r3, [r0, #0] +1000e8c6: 60c5 str r5, [r0, #12] +1000e8c8: 6104 str r4, [r0, #16] +1000e8ca: 4805 ldr r0, [pc, #20] ; (1000e8e0 ) +1000e8cc: f005 ffdd bl 1001488a +1000e8d0: 2000 movs r0, #0 +1000e8d2: bd70 pop {r4, r5, r6, pc} +1000e8d4: f06f 0005 mvn.w r0, #5 +1000e8d8: bd70 pop {r4, r5, r6, pc} +1000e8da: f04f 30ff mov.w r0, #4294967295 +1000e8de: bd70 pop {r4, r5, r6, pc} +1000e8e0: 1004aa94 .word 0x1004aa94 +1000e8e4: 100400a8 .word 0x100400a8 + +1000e8e8 : +1000e8e8: b537 push {r0, r1, r2, r4, r5, lr} +1000e8ea: 4605 mov r5, r0 +1000e8ec: 460c mov r4, r1 +1000e8ee: f002 f92e bl 10010b4e +1000e8f2: 4b09 ldr r3, [pc, #36] ; (1000e918 ) +1000e8f4: 2106 movs r1, #6 +1000e8f6: 601d str r5, [r3, #0] +1000e8f8: 4b08 ldr r3, [pc, #32] ; (1000e91c ) +1000e8fa: 4809 ldr r0, [pc, #36] ; (1000e920 ) +1000e8fc: 601c str r4, [r3, #0] +1000e8fe: f005 ffb7 bl 10014870 +1000e902: 2309 movs r3, #9 +1000e904: 2200 movs r2, #0 +1000e906: 9300 str r3, [sp, #0] +1000e908: 4906 ldr r1, [pc, #24] ; (1000e924 ) +1000e90a: f44f 737a mov.w r3, #1000 ; 0x3e8 +1000e90e: 4806 ldr r0, [pc, #24] ; (1000e928 ) +1000e910: f006 f818 bl 10014944 +1000e914: b003 add sp, #12 +1000e916: bd30 pop {r4, r5, pc} +1000e918: 1004aa98 .word 0x1004aa98 +1000e91c: 1004aa9c .word 0x1004aa9c +1000e920: 1004aa94 .word 0x1004aa94 +1000e924: 1000e781 .word 0x1000e781 +1000e928: 10040086 .word 0x10040086 + +1000e92c : +1000e92c: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} +1000e930: 4604 mov r4, r0 +1000e932: 4688 mov r8, r1 +1000e934: 4615 mov r5, r2 +1000e936: 2124 movs r1, #36 ; 0x24 +1000e938: 2200 movs r2, #0 +1000e93a: 2001 movs r0, #1 +1000e93c: f002 fba6 bl 1001108c +1000e940: 4606 mov r6, r0 +1000e942: b328 cbz r0, 1000e990 +1000e944: 6827 ldr r7, [r4, #0] +1000e946: 6844 ldr r4, [r0, #4] +1000e948: 221c movs r2, #28 +1000e94a: 7065 strb r5, [r4, #1] +1000e94c: 2500 movs r5, #0 +1000e94e: 4639 mov r1, r7 +1000e950: f884 8000 strb.w r8, [r4] +1000e954: 7125 strb r5, [r4, #4] +1000e956: 7165 strb r5, [r4, #5] +1000e958: 71a5 strb r5, [r4, #6] +1000e95a: 71e5 strb r5, [r4, #7] +1000e95c: f104 0008 add.w r0, r4, #8 +1000e960: f00c f936 bl 1001abd0 +1000e964: 8971 ldrh r1, [r6, #10] +1000e966: 70a5 strb r5, [r4, #2] +1000e968: 70e5 strb r5, [r4, #3] +1000e96a: 4620 mov r0, r4 +1000e96c: f000 fa9b bl 1000eea6 +1000e970: 8060 strh r0, [r4, #2] +1000e972: 68fb ldr r3, [r7, #12] +1000e974: aa04 add r2, sp, #16 +1000e976: f842 3d04 str.w r3, [r2, #-4]! +1000e97a: 2301 movs r3, #1 +1000e97c: 9500 str r5, [sp, #0] +1000e97e: 9301 str r3, [sp, #4] +1000e980: 4629 mov r1, r5 +1000e982: 23ff movs r3, #255 ; 0xff +1000e984: 4630 mov r0, r6 +1000e986: f000 fc82 bl 1000f28e +1000e98a: 4630 mov r0, r6 +1000e98c: f002 fb5b bl 10011046 +1000e990: b004 add sp, #16 +1000e992: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + ... + +1000e998 : +1000e998: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} +1000e99c: 6846 ldr r6, [r0, #4] +1000e99e: 460f mov r7, r1 +1000e9a0: 7835 ldrb r5, [r6, #0] +1000e9a2: 4604 mov r4, r0 +1000e9a4: f005 050f and.w r5, r5, #15 +1000e9a8: 00ad lsls r5, r5, #2 +1000e9aa: f1c5 0a00 rsb sl, r5, #0 +1000e9ae: fa0f fa8a sxth.w sl, sl +1000e9b2: 4651 mov r1, sl +1000e9b4: f002 fb1c bl 10010ff0 +1000e9b8: b998 cbnz r0, 1000e9e2 +1000e9ba: 8923 ldrh r3, [r4, #8] +1000e9bc: 2b03 cmp r3, #3 +1000e9be: d910 bls.n 1000e9e2 +1000e9c0: 6863 ldr r3, [r4, #4] +1000e9c2: 781b ldrb r3, [r3, #0] +1000e9c4: 2b08 cmp r3, #8 +1000e9c6: d10c bne.n 1000e9e2 +1000e9c8: f8df 90f0 ldr.w r9, [pc, #240] ; 1000eabc +1000e9cc: 4639 mov r1, r7 +1000e9ce: f8d9 0000 ldr.w r0, [r9] +1000e9d2: f000 08f0 and.w r8, r0, #240 ; 0xf0 +1000e9d6: f000 fc76 bl 1000f2c6 +1000e9da: b910 cbnz r0, 1000e9e2 +1000e9dc: f1b8 0fe0 cmp.w r8, #224 ; 0xe0 +1000e9e0: d105 bne.n 1000e9ee +1000e9e2: 4620 mov r0, r4 +1000e9e4: b004 add sp, #16 +1000e9e6: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1000e9ea: f002 bb2c b.w 10011046 +1000e9ee: 8923 ldrh r3, [r4, #8] +1000e9f0: 2b07 cmp r3, #7 +1000e9f2: d9f6 bls.n 1000e9e2 +1000e9f4: 4620 mov r0, r4 +1000e9f6: f000 fa5c bl 1000eeb2 +1000e9fa: 2800 cmp r0, #0 +1000e9fc: d1f1 bne.n 1000e9e2 +1000e9fe: 2122 movs r1, #34 ; 0x22 +1000ea00: 4620 mov r0, r4 +1000ea02: b22d sxth r5, r5 +1000ea04: f002 faf4 bl 10010ff0 +1000ea08: 2800 cmp r0, #0 +1000ea0a: d04c beq.n 1000eaa6 +1000ea0c: 4629 mov r1, r5 +1000ea0e: 4620 mov r0, r4 +1000ea10: f002 faee bl 10010ff0 +1000ea14: 4602 mov r2, r0 +1000ea16: 2800 cmp r0, #0 +1000ea18: d1e3 bne.n 1000e9e2 +1000ea1a: 8921 ldrh r1, [r4, #8] +1000ea1c: 2002 movs r0, #2 +1000ea1e: f002 fb35 bl 1001108c +1000ea22: 4680 mov r8, r0 +1000ea24: 2800 cmp r0, #0 +1000ea26: d0dc beq.n 1000e9e2 +1000ea28: 4621 mov r1, r4 +1000ea2a: f002 fc03 bl 10011234 +1000ea2e: 2800 cmp r0, #0 +1000ea30: d1d7 bne.n 1000e9e2 +1000ea32: 4651 mov r1, sl +1000ea34: 4640 mov r0, r8 +1000ea36: f8d8 6004 ldr.w r6, [r8, #4] +1000ea3a: f002 fad9 bl 10010ff0 +1000ea3e: 2800 cmp r0, #0 +1000ea40: d1cf bne.n 1000e9e2 +1000ea42: 4620 mov r0, r4 +1000ea44: f002 faff bl 10011046 +1000ea48: 4644 mov r4, r8 +1000ea4a: f8d9 3000 ldr.w r3, [r9] +1000ea4e: 6862 ldr r2, [r4, #4] +1000ea50: 60f3 str r3, [r6, #12] +1000ea52: 4b19 ldr r3, [pc, #100] ; (1000eab8 ) +1000ea54: f64f 71f6 movw r1, #65526 ; 0xfff6 +1000ea58: 681b ldr r3, [r3, #0] +1000ea5a: f04f 08ff mov.w r8, #255 ; 0xff +1000ea5e: 6133 str r3, [r6, #16] +1000ea60: 2300 movs r3, #0 +1000ea62: 7013 strb r3, [r2, #0] +1000ea64: 8853 ldrh r3, [r2, #2] +1000ea66: 4630 mov r0, r6 +1000ea68: 428b cmp r3, r1 +1000ea6a: bf8c ite hi +1000ea6c: 3309 addhi r3, #9 +1000ea6e: 3308 addls r3, #8 +1000ea70: 8053 strh r3, [r2, #2] +1000ea72: 2300 movs r3, #0 +1000ea74: 2114 movs r1, #20 +1000ea76: 72b3 strb r3, [r6, #10] +1000ea78: 72f3 strb r3, [r6, #11] +1000ea7a: f886 8008 strb.w r8, [r6, #8] +1000ea7e: f000 fa12 bl 1000eea6 +1000ea82: 4629 mov r1, r5 +1000ea84: 8170 strh r0, [r6, #10] +1000ea86: 4620 mov r0, r4 +1000ea88: f002 fab2 bl 10010ff0 +1000ea8c: 4602 mov r2, r0 +1000ea8e: 2800 cmp r0, #0 +1000ea90: d1a7 bne.n 1000e9e2 +1000ea92: 2301 movs r3, #1 +1000ea94: 9702 str r7, [sp, #8] +1000ea96: e88d 000c stmia.w sp, {r2, r3} +1000ea9a: 4908 ldr r1, [pc, #32] ; (1000eabc ) +1000ea9c: 4643 mov r3, r8 +1000ea9e: 4620 mov r0, r4 +1000eaa0: f000 fbe4 bl 1000f26c +1000eaa4: e79d b.n 1000e9e2 +1000eaa6: f06f 0121 mvn.w r1, #33 ; 0x21 +1000eaaa: 4620 mov r0, r4 +1000eaac: f002 faa0 bl 10010ff0 +1000eab0: 2800 cmp r0, #0 +1000eab2: d196 bne.n 1000e9e2 +1000eab4: e7c9 b.n 1000ea4a +1000eab6: bf00 nop +1000eab8: 1004aab4 .word 0x1004aab4 +1000eabc: 1004aab0 .word 0x1004aab0 + +1000eac0 : +1000eac0: b2ca uxtb r2, r1 +1000eac2: 3004 adds r0, #4 +1000eac4: 2103 movs r1, #3 +1000eac6: f7ff bf31 b.w 1000e92c + +1000eaca : +1000eaca: b2ca uxtb r2, r1 +1000eacc: 3004 adds r0, #4 +1000eace: 210b movs r1, #11 +1000ead0: f7ff bf2c b.w 1000e92c + +1000ead4 : +1000ead4: 2200 movs r2, #0 +1000ead6: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1000eada: 4b25 ldr r3, [pc, #148] ; (1000eb70 ) +1000eadc: b088 sub sp, #32 +1000eade: 681b ldr r3, [r3, #0] +1000eae0: 4605 mov r5, r0 +1000eae2: 460e mov r6, r1 +1000eae4: 4610 mov r0, r2 +1000eae6: 2108 movs r1, #8 +1000eae8: 9306 str r3, [sp, #24] +1000eaea: f002 facf bl 1001108c +1000eaee: 4607 mov r7, r0 +1000eaf0: b388 cbz r0, 1000eb56 +1000eaf2: 686b ldr r3, [r5, #4] +1000eaf4: 2e16 cmp r6, #22 +1000eaf6: 685b ldr r3, [r3, #4] +1000eaf8: 6844 ldr r4, [r0, #4] +1000eafa: 9306 str r3, [sp, #24] +1000eafc: d12e bne.n 1000eb5c +1000eafe: 68ab ldr r3, [r5, #8] +1000eb00: f105 0808 add.w r8, r5, #8 +1000eb04: 6063 str r3, [r4, #4] +1000eb06: 2301 movs r3, #1 +1000eb08: 732b strb r3, [r5, #12] +1000eb0a: f1a6 0316 sub.w r3, r6, #22 +1000eb0e: 2b01 cmp r3, #1 +1000eb10: d81e bhi.n 1000eb50 +1000eb12: 7026 strb r6, [r4, #0] +1000eb14: 2600 movs r6, #0 +1000eb16: 2108 movs r1, #8 +1000eb18: 7066 strb r6, [r4, #1] +1000eb1a: 70a6 strb r6, [r4, #2] +1000eb1c: 70e6 strb r6, [r4, #3] +1000eb1e: 4620 mov r0, r4 +1000eb20: f000 f9c1 bl 1000eea6 +1000eb24: f240 4294 movw r2, #1172 ; 0x494 +1000eb28: 686b ldr r3, [r5, #4] +1000eb2a: 8060 strh r0, [r4, #2] +1000eb2c: f8ad 201c strh.w r2, [sp, #28] +1000eb30: 2204 movs r2, #4 +1000eb32: 9302 str r3, [sp, #8] +1000eb34: 2302 movs r3, #2 +1000eb36: 9204 str r2, [sp, #16] +1000eb38: aa07 add r2, sp, #28 +1000eb3a: 9203 str r2, [sp, #12] +1000eb3c: 9301 str r3, [sp, #4] +1000eb3e: 9600 str r6, [sp, #0] +1000eb40: 2301 movs r3, #1 +1000eb42: 4642 mov r2, r8 +1000eb44: a906 add r1, sp, #24 +1000eb46: 4638 mov r0, r7 +1000eb48: f8ad 601e strh.w r6, [sp, #30] +1000eb4c: f000 fae8 bl 1000f120 +1000eb50: 4638 mov r0, r7 +1000eb52: f002 fa78 bl 10011046 +1000eb56: b008 add sp, #32 +1000eb58: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000eb5c: 2e17 cmp r6, #23 +1000eb5e: bf03 ittte eq +1000eb60: 68ab ldreq r3, [r5, #8] +1000eb62: f8df 8010 ldreq.w r8, [pc, #16] ; 1000eb74 +1000eb66: 6063 streq r3, [r4, #4] +1000eb68: f04f 0800 movne.w r8, #0 +1000eb6c: e7cd b.n 1000eb0a +1000eb6e: bf00 nop +1000eb70: 10040090 .word 0x10040090 +1000eb74: 1004aaa0 .word 0x1004aaa0 + +1000eb78 : +1000eb78: b538 push {r3, r4, r5, lr} +1000eb7a: 7b43 ldrb r3, [r0, #13] +1000eb7c: 4605 mov r5, r0 +1000eb7e: 2b02 cmp r3, #2 +1000eb80: 460c mov r4, r1 +1000eb82: d005 beq.n 1000eb90 +1000eb84: 2b01 cmp r3, #1 +1000eb86: d111 bne.n 1000ebac +1000eb88: 89c3 ldrh r3, [r0, #14] +1000eb8a: b10b cbz r3, 1000eb90 +1000eb8c: 428b cmp r3, r1 +1000eb8e: d90d bls.n 1000ebac +1000eb90: 2c00 cmp r4, #0 +1000eb92: bf08 it eq +1000eb94: 2401 moveq r4, #1 +1000eb96: 4b06 ldr r3, [pc, #24] ; (1000ebb0 ) +1000eb98: 4798 blx r3 +1000eb9a: 3c01 subs r4, #1 +1000eb9c: fbb0 f1f4 udiv r1, r0, r4 +1000eba0: 2301 movs r3, #1 +1000eba2: fb01 0414 mls r4, r1, r4, r0 +1000eba6: 3401 adds r4, #1 +1000eba8: 81ec strh r4, [r5, #14] +1000ebaa: 736b strb r3, [r5, #13] +1000ebac: bd38 pop {r3, r4, r5, pc} +1000ebae: bf00 nop +1000ebb0: 0000f585 .word 0x0000f585 + +1000ebb4 : +1000ebb4: b538 push {r3, r4, r5, lr} +1000ebb6: 4b0b ldr r3, [pc, #44] ; (1000ebe4 ) +1000ebb8: 4605 mov r5, r0 +1000ebba: 8ad8 ldrh r0, [r3, #22] +1000ebbc: 460c mov r4, r1 +1000ebbe: f006 fac9 bl 10015154 +1000ebc2: b160 cbz r0, 1000ebde +1000ebc4: 6045 str r5, [r0, #4] +1000ebc6: 2300 movs r3, #0 +1000ebc8: b154 cbz r4, 1000ebe0 +1000ebca: 6822 ldr r2, [r4, #0] +1000ebcc: 81c3 strh r3, [r0, #14] +1000ebce: 7343 strb r3, [r0, #13] +1000ebd0: 7303 strb r3, [r0, #12] +1000ebd2: 7403 strb r3, [r0, #16] +1000ebd4: 4b04 ldr r3, [pc, #16] ; (1000ebe8 ) +1000ebd6: 6082 str r2, [r0, #8] +1000ebd8: 681a ldr r2, [r3, #0] +1000ebda: 6018 str r0, [r3, #0] +1000ebdc: 6002 str r2, [r0, #0] +1000ebde: bd38 pop {r3, r4, r5, pc} +1000ebe0: 461a mov r2, r3 +1000ebe2: e7f3 b.n 1000ebcc +1000ebe4: 100400a8 .word 0x100400a8 +1000ebe8: 1004aaa8 .word 0x1004aaa8 + +1000ebec : +1000ebec: 4a03 ldr r2, [pc, #12] ; (1000ebfc ) +1000ebee: 4b04 ldr r3, [pc, #16] ; (1000ec00 ) +1000ebf0: 601a str r2, [r3, #0] +1000ebf2: 4b04 ldr r3, [pc, #16] ; (1000ec04 ) +1000ebf4: f102 7280 add.w r2, r2, #16777216 ; 0x1000000 +1000ebf8: 601a str r2, [r3, #0] +1000ebfa: 4770 bx lr +1000ebfc: 010000e0 .word 0x010000e0 +1000ec00: 1004aaa4 .word 0x1004aaa4 +1000ec04: 1004aaa0 .word 0x1004aaa0 + +1000ec08 : +1000ec08: b570 push {r4, r5, r6, lr} +1000ec0a: 4605 mov r5, r0 +1000ec0c: 4b08 ldr r3, [pc, #32] ; (1000ec30 ) +1000ec0e: 4e09 ldr r6, [pc, #36] ; (1000ec34 ) +1000ec10: 681c ldr r4, [r3, #0] +1000ec12: b904 cbnz r4, 1000ec16 +1000ec14: bd70 pop {r4, r5, r6, pc} +1000ec16: 6863 ldr r3, [r4, #4] +1000ec18: 42ab cmp r3, r5 +1000ec1a: d107 bne.n 1000ec2c +1000ec1c: 68a2 ldr r2, [r4, #8] +1000ec1e: 6833 ldr r3, [r6, #0] +1000ec20: 429a cmp r2, r3 +1000ec22: d003 beq.n 1000ec2c +1000ec24: 2105 movs r1, #5 +1000ec26: 4620 mov r0, r4 +1000ec28: f7ff ffa6 bl 1000eb78 +1000ec2c: 6824 ldr r4, [r4, #0] +1000ec2e: e7f0 b.n 1000ec12 +1000ec30: 1004aaa8 .word 0x1004aaa8 +1000ec34: 1004aaa4 .word 0x1004aaa4 + +1000ec38 : +1000ec38: b570 push {r4, r5, r6, lr} +1000ec3a: 4605 mov r5, r0 +1000ec3c: 4b09 ldr r3, [pc, #36] ; (1000ec64 ) +1000ec3e: 4e0a ldr r6, [pc, #40] ; (1000ec68 ) +1000ec40: 681c ldr r4, [r3, #0] +1000ec42: b904 cbnz r4, 1000ec46 +1000ec44: bd70 pop {r4, r5, r6, pc} +1000ec46: 6863 ldr r3, [r4, #4] +1000ec48: 42ab cmp r3, r5 +1000ec4a: d109 bne.n 1000ec60 +1000ec4c: 68a2 ldr r2, [r4, #8] +1000ec4e: 6833 ldr r3, [r6, #0] +1000ec50: 429a cmp r2, r3 +1000ec52: d005 beq.n 1000ec60 +1000ec54: 7b23 ldrb r3, [r4, #12] +1000ec56: b11b cbz r3, 1000ec60 +1000ec58: 2117 movs r1, #23 +1000ec5a: 4620 mov r0, r4 +1000ec5c: f7ff ff3a bl 1000ead4 +1000ec60: 6824 ldr r4, [r4, #0] +1000ec62: e7ee b.n 1000ec42 +1000ec64: 1004aaa8 .word 0x1004aaa8 +1000ec68: 1004aaa4 .word 0x1004aaa4 + +1000ec6c : +1000ec6c: b510 push {r4, lr} +1000ec6e: 4b06 ldr r3, [pc, #24] ; (1000ec88 ) +1000ec70: 681b ldr r3, [r3, #0] +1000ec72: b133 cbz r3, 1000ec82 +1000ec74: 685a ldr r2, [r3, #4] +1000ec76: 4282 cmp r2, r0 +1000ec78: d1fa bne.n 1000ec70 +1000ec7a: 689c ldr r4, [r3, #8] +1000ec7c: 680a ldr r2, [r1, #0] +1000ec7e: 4294 cmp r4, r2 +1000ec80: d1f6 bne.n 1000ec70 +1000ec82: 4618 mov r0, r3 +1000ec84: bd10 pop {r4, pc} +1000ec86: bf00 nop +1000ec88: 1004aaa8 .word 0x1004aaa8 + +1000ec8c : +1000ec8c: b510 push {r4, lr} +1000ec8e: 490d ldr r1, [pc, #52] ; (1000ecc4 ) +1000ec90: 4604 mov r4, r0 +1000ec92: f7ff ffeb bl 1000ec6c +1000ec96: b920 cbnz r0, 1000eca2 +1000ec98: 490a ldr r1, [pc, #40] ; (1000ecc4 ) +1000ec9a: 4620 mov r0, r4 +1000ec9c: f7ff ff8a bl 1000ebb4 +1000eca0: b160 cbz r0, 1000ecbc +1000eca2: 2302 movs r3, #2 +1000eca4: 7343 strb r3, [r0, #13] +1000eca6: 7c03 ldrb r3, [r0, #16] +1000eca8: 3301 adds r3, #1 +1000ecaa: 7403 strb r3, [r0, #16] +1000ecac: 6ba3 ldr r3, [r4, #56] ; 0x38 +1000ecae: b11b cbz r3, 1000ecb8 +1000ecb0: 2201 movs r2, #1 +1000ecb2: 4904 ldr r1, [pc, #16] ; (1000ecc4 ) +1000ecb4: 4620 mov r0, r4 +1000ecb6: 4798 blx r3 +1000ecb8: 2000 movs r0, #0 +1000ecba: bd10 pop {r4, pc} +1000ecbc: f04f 30ff mov.w r0, #4294967295 +1000ecc0: bd10 pop {r4, pc} +1000ecc2: bf00 nop +1000ecc4: 1004aaa4 .word 0x1004aaa4 + +1000ecc8 : +1000ecc8: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +1000eccc: 6843 ldr r3, [r0, #4] +1000ecce: 460f mov r7, r1 +1000ecd0: 7819 ldrb r1, [r3, #0] +1000ecd2: 4606 mov r6, r0 +1000ecd4: f001 010f and.w r1, r1, #15 +1000ecd8: 0089 lsls r1, r1, #2 +1000ecda: 4249 negs r1, r1 +1000ecdc: 4615 mov r5, r2 +1000ecde: f002 f987 bl 10010ff0 +1000ece2: b910 cbnz r0, 1000ecea +1000ece4: 8971 ldrh r1, [r6, #10] +1000ece6: 2907 cmp r1, #7 +1000ece8: d805 bhi.n 1000ecf6 +1000ecea: 4630 mov r0, r6 +1000ecec: f002 f9ab bl 10011046 +1000ecf0: b002 add sp, #8 +1000ecf2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000ecf6: 6874 ldr r4, [r6, #4] +1000ecf8: 4620 mov r0, r4 +1000ecfa: f000 f8d4 bl 1000eea6 +1000ecfe: 4680 mov r8, r0 +1000ed00: 2800 cmp r0, #0 +1000ed02: d1f2 bne.n 1000ecea +1000ed04: 4629 mov r1, r5 +1000ed06: 4638 mov r0, r7 +1000ed08: f7ff ffb0 bl 1000ec6c +1000ed0c: 2800 cmp r0, #0 +1000ed0e: d0ec beq.n 1000ecea +1000ed10: 7823 ldrb r3, [r4, #0] +1000ed12: 2b11 cmp r3, #17 +1000ed14: d00b beq.n 1000ed2e +1000ed16: 2b16 cmp r3, #22 +1000ed18: d1e7 bne.n 1000ecea +1000ed1a: 7b43 ldrb r3, [r0, #13] +1000ed1c: 2b01 cmp r3, #1 +1000ed1e: bf01 itttt eq +1000ed20: 2302 moveq r3, #2 +1000ed22: f8a0 800e strheq.w r8, [r0, #14] +1000ed26: 7343 strbeq r3, [r0, #13] +1000ed28: f880 800c strbeq.w r8, [r0, #12] +1000ed2c: e7dd b.n 1000ecea +1000ed2e: 4b17 ldr r3, [pc, #92] ; (1000ed8c ) +1000ed30: 6829 ldr r1, [r5, #0] +1000ed32: 681a ldr r2, [r3, #0] +1000ed34: 4698 mov r8, r3 +1000ed36: 4291 cmp r1, r2 +1000ed38: 6863 ldr r3, [r4, #4] +1000ed3a: d116 bne.n 1000ed6a +1000ed3c: b9ab cbnz r3, 1000ed6a +1000ed3e: 7863 ldrb r3, [r4, #1] +1000ed40: b90b cbnz r3, 1000ed46 +1000ed42: 230a movs r3, #10 +1000ed44: 7063 strb r3, [r4, #1] +1000ed46: 4b12 ldr r3, [pc, #72] ; (1000ed90 ) +1000ed48: 681d ldr r5, [r3, #0] +1000ed4a: 2d00 cmp r5, #0 +1000ed4c: d0cd beq.n 1000ecea +1000ed4e: 686b ldr r3, [r5, #4] +1000ed50: 429f cmp r7, r3 +1000ed52: d108 bne.n 1000ed66 +1000ed54: 68aa ldr r2, [r5, #8] +1000ed56: f8d8 3000 ldr.w r3, [r8] +1000ed5a: 429a cmp r2, r3 +1000ed5c: d003 beq.n 1000ed66 +1000ed5e: 7861 ldrb r1, [r4, #1] +1000ed60: 4628 mov r0, r5 +1000ed62: f7ff ff09 bl 1000eb78 +1000ed66: 682d ldr r5, [r5, #0] +1000ed68: e7ef b.n 1000ed4a +1000ed6a: 2b00 cmp r3, #0 +1000ed6c: d0bd beq.n 1000ecea +1000ed6e: 4291 cmp r1, r2 +1000ed70: d107 bne.n 1000ed82 +1000ed72: a902 add r1, sp, #8 +1000ed74: f841 3d04 str.w r3, [r1, #-4]! +1000ed78: 4638 mov r0, r7 +1000ed7a: f7ff ff77 bl 1000ec6c +1000ed7e: 2800 cmp r0, #0 +1000ed80: d0b3 beq.n 1000ecea +1000ed82: 7861 ldrb r1, [r4, #1] +1000ed84: f7ff fef8 bl 1000eb78 +1000ed88: e7af b.n 1000ecea +1000ed8a: bf00 nop +1000ed8c: 1004aaa4 .word 0x1004aaa4 +1000ed90: 1004aaa8 .word 0x1004aaa8 + +1000ed94 : +1000ed94: 4b09 ldr r3, [pc, #36] ; (1000edbc ) +1000ed96: b510 push {r4, lr} +1000ed98: 681c ldr r4, [r3, #0] +1000ed9a: b904 cbnz r4, 1000ed9e +1000ed9c: bd10 pop {r4, pc} +1000ed9e: 89e3 ldrh r3, [r4, #14] +1000eda0: b153 cbz r3, 1000edb8 +1000eda2: 3b01 subs r3, #1 +1000eda4: b29b uxth r3, r3 +1000eda6: 81e3 strh r3, [r4, #14] +1000eda8: b933 cbnz r3, 1000edb8 +1000edaa: 7b63 ldrb r3, [r4, #13] +1000edac: 2b01 cmp r3, #1 +1000edae: d103 bne.n 1000edb8 +1000edb0: 2116 movs r1, #22 +1000edb2: 4620 mov r0, r4 +1000edb4: f7ff fe8e bl 1000ead4 +1000edb8: 6824 ldr r4, [r4, #0] +1000edba: e7ee b.n 1000ed9a +1000edbc: 1004aaa8 .word 0x1004aaa8 + +1000edc0 : +1000edc0: 2300 movs r3, #0 +1000edc2: b513 push {r0, r1, r4, lr} +1000edc4: f010 0201 ands.w r2, r0, #1 +1000edc8: f8ad 3006 strh.w r3, [sp, #6] +1000edcc: d01f beq.n 1000ee0e +1000edce: 4299 cmp r1, r3 +1000edd0: dd24 ble.n 1000ee1c +1000edd2: 1c43 adds r3, r0, #1 +1000edd4: 7800 ldrb r0, [r0, #0] +1000edd6: 3901 subs r1, #1 +1000edd8: f88d 0007 strb.w r0, [sp, #7] +1000eddc: 2000 movs r0, #0 +1000edde: 2901 cmp r1, #1 +1000ede0: dc17 bgt.n 1000ee12 +1000ede2: d102 bne.n 1000edea +1000ede4: 781b ldrb r3, [r3, #0] +1000ede6: f88d 3006 strb.w r3, [sp, #6] +1000edea: f8bd 3006 ldrh.w r3, [sp, #6] +1000edee: 4403 add r3, r0 +1000edf0: b298 uxth r0, r3 +1000edf2: eb00 4313 add.w r3, r0, r3, lsr #16 +1000edf6: b298 uxth r0, r3 +1000edf8: eb00 4013 add.w r0, r0, r3, lsr #16 +1000edfc: b122 cbz r2, 1000ee08 +1000edfe: 0203 lsls r3, r0, #8 +1000ee00: b29b uxth r3, r3 +1000ee02: f3c0 2007 ubfx r0, r0, #8, #8 +1000ee06: 4318 orrs r0, r3 +1000ee08: b280 uxth r0, r0 +1000ee0a: b002 add sp, #8 +1000ee0c: bd10 pop {r4, pc} +1000ee0e: 4603 mov r3, r0 +1000ee10: e7e4 b.n 1000eddc +1000ee12: f833 4b02 ldrh.w r4, [r3], #2 +1000ee16: 3902 subs r1, #2 +1000ee18: 4420 add r0, r4 +1000ee1a: e7e0 b.n 1000edde +1000ee1c: 4618 mov r0, r3 +1000ee1e: e7e4 b.n 1000edea + +1000ee20 : +1000ee20: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +1000ee24: 2500 movs r5, #0 +1000ee26: 4606 mov r6, r0 +1000ee28: 4688 mov r8, r1 +1000ee2a: 4691 mov r9, r2 +1000ee2c: 461f mov r7, r3 +1000ee2e: 462c mov r4, r5 +1000ee30: bb26 cbnz r6, 1000ee7c +1000ee32: b125 cbz r5, 1000ee3e +1000ee34: 0221 lsls r1, r4, #8 +1000ee36: b289 uxth r1, r1 +1000ee38: f3c4 2407 ubfx r4, r4, #8, #8 +1000ee3c: 430c orrs r4, r1 +1000ee3e: f8d9 2000 ldr.w r2, [r9] +1000ee42: f8d8 3000 ldr.w r3, [r8] +1000ee46: b290 uxth r0, r2 +1000ee48: eb00 4012 add.w r0, r0, r2, lsr #16 +1000ee4c: b29a uxth r2, r3 +1000ee4e: 4410 add r0, r2 +1000ee50: eb00 4013 add.w r0, r0, r3, lsr #16 +1000ee54: 4404 add r4, r0 +1000ee56: 4638 mov r0, r7 +1000ee58: f000 fd86 bl 1000f968 +1000ee5c: 4404 add r4, r0 +1000ee5e: f8bd 0020 ldrh.w r0, [sp, #32] +1000ee62: f000 fd81 bl 1000f968 +1000ee66: 4420 add r0, r4 +1000ee68: b284 uxth r4, r0 +1000ee6a: eb04 4410 add.w r4, r4, r0, lsr #16 +1000ee6e: b2a0 uxth r0, r4 +1000ee70: eb00 4014 add.w r0, r0, r4, lsr #16 +1000ee74: 43c0 mvns r0, r0 +1000ee76: b280 uxth r0, r0 +1000ee78: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1000ee7c: 8971 ldrh r1, [r6, #10] +1000ee7e: 6870 ldr r0, [r6, #4] +1000ee80: f7ff ff9e bl 1000edc0 +1000ee84: 8973 ldrh r3, [r6, #10] +1000ee86: 4404 add r4, r0 +1000ee88: b2a0 uxth r0, r4 +1000ee8a: 07db lsls r3, r3, #31 +1000ee8c: eb00 4414 add.w r4, r0, r4, lsr #16 +1000ee90: d507 bpl.n 1000eea2 +1000ee92: 0223 lsls r3, r4, #8 +1000ee94: f1c5 0501 rsb r5, r5, #1 +1000ee98: b29b uxth r3, r3 +1000ee9a: f3c4 2407 ubfx r4, r4, #8, #8 +1000ee9e: b2ed uxtb r5, r5 +1000eea0: 431c orrs r4, r3 +1000eea2: 6836 ldr r6, [r6, #0] +1000eea4: e7c4 b.n 1000ee30 + +1000eea6 : +1000eea6: b508 push {r3, lr} +1000eea8: f7ff ff8a bl 1000edc0 +1000eeac: 43c0 mvns r0, r0 +1000eeae: b280 uxth r0, r0 +1000eeb0: bd08 pop {r3, pc} + +1000eeb2 : +1000eeb2: b570 push {r4, r5, r6, lr} +1000eeb4: 2500 movs r5, #0 +1000eeb6: 4606 mov r6, r0 +1000eeb8: 462c mov r4, r5 +1000eeba: b946 cbnz r6, 1000eece +1000eebc: b125 cbz r5, 1000eec8 +1000eebe: 0223 lsls r3, r4, #8 +1000eec0: b29b uxth r3, r3 +1000eec2: f3c4 2407 ubfx r4, r4, #8, #8 +1000eec6: 431c orrs r4, r3 +1000eec8: 43e0 mvns r0, r4 +1000eeca: b280 uxth r0, r0 +1000eecc: bd70 pop {r4, r5, r6, pc} +1000eece: 8971 ldrh r1, [r6, #10] +1000eed0: 6870 ldr r0, [r6, #4] +1000eed2: f7ff ff75 bl 1000edc0 +1000eed6: 8973 ldrh r3, [r6, #10] +1000eed8: 4420 add r0, r4 +1000eeda: b284 uxth r4, r0 +1000eedc: 07db lsls r3, r3, #31 +1000eede: eb04 4410 add.w r4, r4, r0, lsr #16 +1000eee2: d507 bpl.n 1000eef4 +1000eee4: 0223 lsls r3, r4, #8 +1000eee6: f1c5 0501 rsb r5, r5, #1 +1000eeea: b29b uxth r3, r3 +1000eeec: f3c4 2407 ubfx r4, r4, #8, #8 +1000eef0: b2ed uxtb r5, r5 +1000eef2: 431c orrs r4, r3 +1000eef4: 6836 ldr r6, [r6, #0] +1000eef6: e7e0 b.n 1000eeba + +1000eef8 : +1000eef8: 4b16 ldr r3, [pc, #88] ; (1000ef54 ) +1000eefa: b570 push {r4, r5, r6, lr} +1000eefc: 681c ldr r4, [r3, #0] +1000eefe: 4605 mov r5, r0 +1000ef00: 4620 mov r0, r4 +1000ef02: b958 cbnz r0, 1000ef1c +1000ef04: 4e14 ldr r6, [pc, #80] ; (1000ef58 ) +1000ef06: b9ac cbnz r4, 1000ef34 +1000ef08: 4b14 ldr r3, [pc, #80] ; (1000ef5c ) +1000ef0a: 6818 ldr r0, [r3, #0] +1000ef0c: b308 cbz r0, 1000ef52 +1000ef0e: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 +1000ef12: f013 0f01 tst.w r3, #1 +1000ef16: bf08 it eq +1000ef18: 2000 moveq r0, #0 +1000ef1a: bd70 pop {r4, r5, r6, pc} +1000ef1c: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 +1000ef20: 07da lsls r2, r3, #31 +1000ef22: d505 bpl.n 1000ef30 +1000ef24: 6842 ldr r2, [r0, #4] +1000ef26: 682b ldr r3, [r5, #0] +1000ef28: 4053 eors r3, r2 +1000ef2a: 6882 ldr r2, [r0, #8] +1000ef2c: 4213 tst r3, r2 +1000ef2e: d010 beq.n 1000ef52 +1000ef30: 6800 ldr r0, [r0, #0] +1000ef32: e7e6 b.n 1000ef02 +1000ef34: f894 3031 ldrb.w r3, [r4, #49] ; 0x31 +1000ef38: 07db lsls r3, r3, #31 +1000ef3a: d401 bmi.n 1000ef40 +1000ef3c: 6824 ldr r4, [r4, #0] +1000ef3e: e7e2 b.n 1000ef06 +1000ef40: 4621 mov r1, r4 +1000ef42: 6828 ldr r0, [r5, #0] +1000ef44: f000 f9bf bl 1000f2c6 +1000ef48: 2800 cmp r0, #0 +1000ef4a: d1f7 bne.n 1000ef3c +1000ef4c: 42b4 cmp r4, r6 +1000ef4e: d1f5 bne.n 1000ef3c +1000ef50: 4620 mov r0, r4 +1000ef52: bd70 pop {r4, r5, r6, pc} +1000ef54: 1004b198 .word 0x1004b198 +1000ef58: 1004aa04 .word 0x1004aa04 +1000ef5c: 1004b194 .word 0x1004b194 + +1000ef60 : +1000ef60: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +1000ef64: 6847 ldr r7, [r0, #4] +1000ef66: 4604 mov r4, r0 +1000ef68: f897 8000 ldrb.w r8, [r7] +1000ef6c: 460e mov r6, r1 +1000ef6e: ea4f 1318 mov.w r3, r8, lsr #4 +1000ef72: 2b04 cmp r3, #4 +1000ef74: d006 beq.n 1000ef84 +1000ef76: 4620 mov r0, r4 +1000ef78: f002 f865 bl 10011046 +1000ef7c: 2000 movs r0, #0 +1000ef7e: b003 add sp, #12 +1000ef80: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1000ef84: 8878 ldrh r0, [r7, #2] +1000ef86: f000 fcf2 bl 1000f96e +1000ef8a: f008 080f and.w r8, r8, #15 +1000ef8e: 8963 ldrh r3, [r4, #10] +1000ef90: ea4f 0888 mov.w r8, r8, lsl #2 +1000ef94: 4543 cmp r3, r8 +1000ef96: 4605 mov r5, r0 +1000ef98: d3ed bcc.n 1000ef76 +1000ef9a: 8923 ldrh r3, [r4, #8] +1000ef9c: 4283 cmp r3, r0 +1000ef9e: d3ea bcc.n 1000ef76 +1000efa0: 4641 mov r1, r8 +1000efa2: 4638 mov r0, r7 +1000efa4: f7ff ff7f bl 1000eea6 +1000efa8: 2800 cmp r0, #0 +1000efaa: d1e4 bne.n 1000ef76 +1000efac: 4629 mov r1, r5 +1000efae: 4620 mov r0, r4 +1000efb0: f002 f8fc bl 100111ac +1000efb4: 693b ldr r3, [r7, #16] +1000efb6: 4955 ldr r1, [pc, #340] ; (1000f10c ) +1000efb8: 4a55 ldr r2, [pc, #340] ; (1000f110 ) +1000efba: 600b str r3, [r1, #0] +1000efbc: 68f8 ldr r0, [r7, #12] +1000efbe: f003 03f0 and.w r3, r3, #240 ; 0xf0 +1000efc2: 2be0 cmp r3, #224 ; 0xe0 +1000efc4: 6010 str r0, [r2, #0] +1000efc6: 4689 mov r9, r1 +1000efc8: 4692 mov sl, r2 +1000efca: d114 bne.n 1000eff6 +1000efcc: f996 3031 ldrsb.w r3, [r6, #49] ; 0x31 +1000efd0: 2b00 cmp r3, #0 +1000efd2: da05 bge.n 1000efe0 +1000efd4: 4630 mov r0, r6 +1000efd6: f7ff fe49 bl 1000ec6c +1000efda: 2800 cmp r0, #0 +1000efdc: f040 8093 bne.w 1000f106 +1000efe0: 7a7b ldrb r3, [r7, #9] +1000efe2: 2b11 cmp r3, #17 +1000efe4: d105 bne.n 1000eff2 +1000efe6: 44b8 add r8, r7 +1000efe8: f8b8 3002 ldrh.w r3, [r8, #2] +1000efec: f5b3 4f88 cmp.w r3, #17408 ; 0x4400 +1000eff0: d066 beq.n 1000f0c0 +1000eff2: 2500 movs r5, #0 +1000eff4: e01a b.n 1000f02c +1000eff6: 4635 mov r5, r6 +1000eff8: f04f 0b01 mov.w fp, #1 +1000effc: 4b45 ldr r3, [pc, #276] ; (1000f114 ) +1000effe: f895 2031 ldrb.w r2, [r5, #49] ; 0x31 +1000f002: 07d2 lsls r2, r2, #31 +1000f004: d404 bmi.n 1000f010 +1000f006: f1bb 0f00 cmp.w fp, #0 +1000f00a: d150 bne.n 1000f0ae +1000f00c: 682d ldr r5, [r5, #0] +1000f00e: e04f b.n 1000f0b0 +1000f010: 686a ldr r2, [r5, #4] +1000f012: 2a00 cmp r2, #0 +1000f014: d0f7 beq.n 1000f006 +1000f016: f8d9 0000 ldr.w r0, [r9] +1000f01a: 9301 str r3, [sp, #4] +1000f01c: 4282 cmp r2, r0 +1000f01e: d005 beq.n 1000f02c +1000f020: 4629 mov r1, r5 +1000f022: f000 f950 bl 1000f2c6 +1000f026: 9b01 ldr r3, [sp, #4] +1000f028: 2800 cmp r0, #0 +1000f02a: d0ec beq.n 1000f006 +1000f02c: f8da 0000 ldr.w r0, [sl] +1000f030: b150 cbz r0, 1000f048 +1000f032: 4631 mov r1, r6 +1000f034: f000 f947 bl 1000f2c6 +1000f038: 2800 cmp r0, #0 +1000f03a: d19c bne.n 1000ef76 +1000f03c: f8da 3000 ldr.w r3, [sl] +1000f040: f003 03f0 and.w r3, r3, #240 ; 0xf0 +1000f044: 2be0 cmp r3, #224 ; 0xe0 +1000f046: d096 beq.n 1000ef76 +1000f048: 2d00 cmp r5, #0 +1000f04a: d094 beq.n 1000ef76 +1000f04c: 88fb ldrh r3, [r7, #6] +1000f04e: f023 03c0 bic.w r3, r3, #192 ; 0xc0 +1000f052: b133 cbz r3, 1000f062 +1000f054: 4620 mov r0, r4 +1000f056: f000 fa7f bl 1000f558 +1000f05a: 4604 mov r4, r0 +1000f05c: 2800 cmp r0, #0 +1000f05e: d08d beq.n 1000ef7c +1000f060: 6847 ldr r7, [r0, #4] +1000f062: f8df 80b8 ldr.w r8, [pc, #184] ; 1000f11c +1000f066: 4d2c ldr r5, [pc, #176] ; (1000f118 ) +1000f068: 4631 mov r1, r6 +1000f06a: 4620 mov r0, r4 +1000f06c: f8c8 6000 str.w r6, [r8] +1000f070: 602f str r7, [r5, #0] +1000f072: f002 f973 bl 1001135c +1000f076: bb68 cbnz r0, 1000f0d4 +1000f078: 7a7b ldrb r3, [r7, #9] +1000f07a: 2b02 cmp r3, #2 +1000f07c: d03d beq.n 1000f0fa +1000f07e: d821 bhi.n 1000f0c4 +1000f080: 2b01 cmp r3, #1 +1000f082: d035 beq.n 1000f0f0 +1000f084: 4631 mov r1, r6 +1000f086: f8d9 0000 ldr.w r0, [r9] +1000f08a: f000 f91c bl 1000f2c6 +1000f08e: b950 cbnz r0, 1000f0a6 +1000f090: f8d9 3000 ldr.w r3, [r9] +1000f094: f003 03f0 and.w r3, r3, #240 ; 0xf0 +1000f098: 2be0 cmp r3, #224 ; 0xe0 +1000f09a: d004 beq.n 1000f0a6 +1000f09c: 6067 str r7, [r4, #4] +1000f09e: 2102 movs r1, #2 +1000f0a0: 4620 mov r0, r4 +1000f0a2: f7ff fd0d bl 1000eac0 +1000f0a6: 4620 mov r0, r4 +1000f0a8: f001 ffcd bl 10011046 +1000f0ac: e012 b.n 1000f0d4 +1000f0ae: 681d ldr r5, [r3, #0] +1000f0b0: 42b5 cmp r5, r6 +1000f0b2: bf08 it eq +1000f0b4: 682d ldreq r5, [r5, #0] +1000f0b6: f04f 0b00 mov.w fp, #0 +1000f0ba: 2d00 cmp r5, #0 +1000f0bc: d19f bne.n 1000effe +1000f0be: e78f b.n 1000efe0 +1000f0c0: 4635 mov r5, r6 +1000f0c2: e7c1 b.n 1000f048 +1000f0c4: 2b06 cmp r3, #6 +1000f0c6: d00e beq.n 1000f0e6 +1000f0c8: 2b11 cmp r3, #17 +1000f0ca: d1db bne.n 1000f084 +1000f0cc: 4631 mov r1, r6 +1000f0ce: 4620 mov r0, r4 +1000f0d0: f004 fcfc bl 10013acc +1000f0d4: 2300 movs r3, #0 +1000f0d6: f8c8 3000 str.w r3, [r8] +1000f0da: 602b str r3, [r5, #0] +1000f0dc: f8ca 3000 str.w r3, [sl] +1000f0e0: f8c9 3000 str.w r3, [r9] +1000f0e4: e74a b.n 1000ef7c +1000f0e6: 4631 mov r1, r6 +1000f0e8: 4620 mov r0, r4 +1000f0ea: f003 fb45 bl 10012778 +1000f0ee: e7f1 b.n 1000f0d4 +1000f0f0: 4631 mov r1, r6 +1000f0f2: 4620 mov r0, r4 +1000f0f4: f7ff fc50 bl 1000e998 +1000f0f8: e7ec b.n 1000f0d4 +1000f0fa: 4a04 ldr r2, [pc, #16] ; (1000f10c ) +1000f0fc: 4631 mov r1, r6 +1000f0fe: 4620 mov r0, r4 +1000f100: f7ff fde2 bl 1000ecc8 +1000f104: e7e6 b.n 1000f0d4 +1000f106: 4635 mov r5, r6 +1000f108: e790 b.n 1000f02c +1000f10a: bf00 nop +1000f10c: 1004aab0 .word 0x1004aab0 +1000f110: 1004aab4 .word 0x1004aab4 +1000f114: 1004b198 .word 0x1004b198 +1000f118: 1004aaac .word 0x1004aaac +1000f11c: 1004aab8 .word 0x1004aab8 + +1000f120 : +1000f120: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1000f124: b087 sub sp, #28 +1000f126: 4606 mov r6, r0 +1000f128: 9101 str r1, [sp, #4] +1000f12a: 4699 mov r9, r3 +1000f12c: f89d b044 ldrb.w fp, [sp, #68] ; 0x44 +1000f130: f8dd 8048 ldr.w r8, [sp, #72] ; 0x48 +1000f134: f8bd 4050 ldrh.w r4, [sp, #80] ; 0x50 +1000f138: 4617 mov r7, r2 +1000f13a: 2a00 cmp r2, #0 +1000f13c: f000 8087 beq.w 1000f24e +1000f140: 2c00 cmp r4, #0 +1000f142: f000 8081 beq.w 1000f248 +1000f146: 1ce5 adds r5, r4, #3 +1000f148: f025 0503 bic.w r5, r5, #3 +1000f14c: b2ad uxth r5, r5 +1000f14e: f105 0314 add.w r3, r5, #20 +1000f152: b229 sxth r1, r5 +1000f154: fa1f fa83 uxth.w sl, r3 +1000f158: f001 ff4a bl 10010ff0 +1000f15c: b120 cbz r0, 1000f168 +1000f15e: f06f 0001 mvn.w r0, #1 +1000f162: b007 add sp, #28 +1000f164: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1000f168: 9002 str r0, [sp, #8] +1000f16a: 4622 mov r2, r4 +1000f16c: 9913 ldr r1, [sp, #76] ; 0x4c +1000f16e: 6870 ldr r0, [r6, #4] +1000f170: f00b fd2e bl 1001abd0 +1000f174: 42ac cmp r4, r5 +1000f176: 9b02 ldr r3, [sp, #8] +1000f178: d205 bcs.n 1000f186 +1000f17a: 6870 ldr r0, [r6, #4] +1000f17c: 1b2a subs r2, r5, r4 +1000f17e: 4619 mov r1, r3 +1000f180: 4420 add r0, r4 +1000f182: f00b fd29 bl 1001abd8 +1000f186: 2300 movs r3, #0 +1000f188: 461c mov r4, r3 +1000f18a: 086d lsrs r5, r5, #1 +1000f18c: 42ab cmp r3, r5 +1000f18e: db55 blt.n 1000f23c +1000f190: 2114 movs r1, #20 +1000f192: 4630 mov r0, r6 +1000f194: f001 ff2c bl 10010ff0 +1000f198: 9002 str r0, [sp, #8] +1000f19a: 2800 cmp r0, #0 +1000f19c: d1df bne.n 1000f15e +1000f19e: 6875 ldr r5, [r6, #4] +1000f1a0: f885 9008 strb.w r9, [r5, #8] +1000f1a4: f885 b009 strb.w fp, [r5, #9] +1000f1a8: 6839 ldr r1, [r7, #0] +1000f1aa: ea49 290b orr.w r9, r9, fp, lsl #8 +1000f1ae: b28a uxth r2, r1 +1000f1b0: ea4f 0b9a mov.w fp, sl, lsr #2 +1000f1b4: 6129 str r1, [r5, #16] +1000f1b6: eb02 4211 add.w r2, r2, r1, lsr #16 +1000f1ba: f04b 0b40 orr.w fp, fp, #64 ; 0x40 +1000f1be: f89d 1040 ldrb.w r1, [sp, #64] ; 0x40 +1000f1c2: fa5f fb8b uxtb.w fp, fp +1000f1c6: 7069 strb r1, [r5, #1] +1000f1c8: f885 b000 strb.w fp, [r5] +1000f1cc: 444a add r2, r9 +1000f1ce: 8930 ldrh r0, [r6, #8] +1000f1d0: 9203 str r2, [sp, #12] +1000f1d2: f000 fbc9 bl 1000f968 +1000f1d6: 9b02 ldr r3, [sp, #8] +1000f1d8: 8068 strh r0, [r5, #2] +1000f1da: 71ab strb r3, [r5, #6] +1000f1dc: 71eb strb r3, [r5, #7] +1000f1de: 4b22 ldr r3, [pc, #136] ; (1000f268 ) +1000f1e0: 4681 mov r9, r0 +1000f1e2: 8818 ldrh r0, [r3, #0] +1000f1e4: 9302 str r3, [sp, #8] +1000f1e6: f000 fbbf bl 1000f968 +1000f1ea: 9b02 ldr r3, [sp, #8] +1000f1ec: 80a8 strh r0, [r5, #4] +1000f1ee: 8819 ldrh r1, [r3, #0] +1000f1f0: 9a03 ldr r2, [sp, #12] +1000f1f2: 3101 adds r1, #1 +1000f1f4: 8019 strh r1, [r3, #0] +1000f1f6: 9b01 ldr r3, [sp, #4] +1000f1f8: b10b cbz r3, 1000f1fe +1000f1fa: 681b ldr r3, [r3, #0] +1000f1fc: b90b cbnz r3, 1000f202 +1000f1fe: f8d8 3004 ldr.w r3, [r8, #4] +1000f202: 60eb str r3, [r5, #12] +1000f204: 68e9 ldr r1, [r5, #12] +1000f206: b28b uxth r3, r1 +1000f208: 441a add r2, r3 +1000f20a: eb02 4211 add.w r2, r2, r1, lsr #16 +1000f20e: 4414 add r4, r2 +1000f210: 445c add r4, fp +1000f212: 444c add r4, r9 +1000f214: 4420 add r0, r4 +1000f216: b283 uxth r3, r0 +1000f218: eb03 4010 add.w r0, r3, r0, lsr #16 +1000f21c: eb00 4010 add.w r0, r0, r0, lsr #16 +1000f220: 43c0 mvns r0, r0 +1000f222: 8168 strh r0, [r5, #10] +1000f224: f8b8 3028 ldrh.w r3, [r8, #40] ; 0x28 +1000f228: b1bb cbz r3, 1000f25a +1000f22a: 8932 ldrh r2, [r6, #8] +1000f22c: 429a cmp r2, r3 +1000f22e: d914 bls.n 1000f25a +1000f230: 463a mov r2, r7 +1000f232: 4641 mov r1, r8 +1000f234: 4630 mov r0, r6 +1000f236: f000 fae5 bl 1000f804 +1000f23a: e792 b.n 1000f162 +1000f23c: 6872 ldr r2, [r6, #4] +1000f23e: f832 2013 ldrh.w r2, [r2, r3, lsl #1] +1000f242: 3301 adds r3, #1 +1000f244: 4414 add r4, r2 +1000f246: e7a1 b.n 1000f18c +1000f248: f04f 0a14 mov.w sl, #20 +1000f24c: e7a0 b.n 1000f190 +1000f24e: 6843 ldr r3, [r0, #4] +1000f250: af06 add r7, sp, #24 +1000f252: 691b ldr r3, [r3, #16] +1000f254: f847 3d04 str.w r3, [r7, #-4]! +1000f258: e7e4 b.n 1000f224 +1000f25a: f8d8 3014 ldr.w r3, [r8, #20] +1000f25e: 463a mov r2, r7 +1000f260: 4631 mov r1, r6 +1000f262: 4640 mov r0, r8 +1000f264: 4798 blx r3 +1000f266: e77c b.n 1000f162 +1000f268: 1004aabc .word 0x1004aabc + +1000f26c : +1000f26c: b510 push {r4, lr} +1000f26e: 2400 movs r4, #0 +1000f270: b086 sub sp, #24 +1000f272: 9404 str r4, [sp, #16] +1000f274: 9403 str r4, [sp, #12] +1000f276: 9c0a ldr r4, [sp, #40] ; 0x28 +1000f278: 9402 str r4, [sp, #8] +1000f27a: f89d 4024 ldrb.w r4, [sp, #36] ; 0x24 +1000f27e: 9401 str r4, [sp, #4] +1000f280: f89d 4020 ldrb.w r4, [sp, #32] +1000f284: 9400 str r4, [sp, #0] +1000f286: f7ff ff4b bl 1000f120 +1000f28a: b006 add sp, #24 +1000f28c: bd10 pop {r4, pc} + +1000f28e : +1000f28e: b5f0 push {r4, r5, r6, r7, lr} +1000f290: 4605 mov r5, r0 +1000f292: b085 sub sp, #20 +1000f294: 4610 mov r0, r2 +1000f296: 460e mov r6, r1 +1000f298: 4614 mov r4, r2 +1000f29a: 461f mov r7, r3 +1000f29c: f7ff fe2c bl 1000eef8 +1000f2a0: b170 cbz r0, 1000f2c0 +1000f2a2: f89d 302c ldrb.w r3, [sp, #44] ; 0x2c +1000f2a6: 9002 str r0, [sp, #8] +1000f2a8: 9301 str r3, [sp, #4] +1000f2aa: f89d 3028 ldrb.w r3, [sp, #40] ; 0x28 +1000f2ae: 4622 mov r2, r4 +1000f2b0: 9300 str r3, [sp, #0] +1000f2b2: 4631 mov r1, r6 +1000f2b4: 463b mov r3, r7 +1000f2b6: 4628 mov r0, r5 +1000f2b8: f7ff ffd8 bl 1000f26c +1000f2bc: b005 add sp, #20 +1000f2be: bdf0 pop {r4, r5, r6, r7, pc} +1000f2c0: f06f 0003 mvn.w r0, #3 +1000f2c4: e7fa b.n 1000f2bc + +1000f2c6 : +1000f2c6: 1e43 subs r3, r0, #1 +1000f2c8: 3303 adds r3, #3 +1000f2ca: d811 bhi.n 1000f2f0 +1000f2cc: f891 3031 ldrb.w r3, [r1, #49] ; 0x31 +1000f2d0: f013 0302 ands.w r3, r3, #2 +1000f2d4: d00e beq.n 1000f2f4 +1000f2d6: 684a ldr r2, [r1, #4] +1000f2d8: 4290 cmp r0, r2 +1000f2da: d00b beq.n 1000f2f4 +1000f2dc: 688b ldr r3, [r1, #8] +1000f2de: 4042 eors r2, r0 +1000f2e0: 421a tst r2, r3 +1000f2e2: d107 bne.n 1000f2f4 +1000f2e4: 43db mvns r3, r3 +1000f2e6: 4383 bics r3, r0 +1000f2e8: bf0c ite eq +1000f2ea: 2001 moveq r0, #1 +1000f2ec: 2000 movne r0, #0 +1000f2ee: 4770 bx lr +1000f2f0: 2001 movs r0, #1 +1000f2f2: 4770 bx lr +1000f2f4: 2000 movs r0, #0 +1000f2f6: 4770 bx lr + +1000f2f8 : +1000f2f8: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +1000f2fc: b085 sub sp, #20 +1000f2fe: 460c mov r4, r1 +1000f300: 466b mov r3, sp +1000f302: 46ee mov lr, sp +1000f304: f990 2000 ldrsb.w r2, [r0] +1000f308: f10d 0c0c add.w ip, sp, #12 +1000f30c: f1a2 0130 sub.w r1, r2, #48 ; 0x30 +1000f310: b2c9 uxtb r1, r1 +1000f312: 2909 cmp r1, #9 +1000f314: d874 bhi.n 1000f400 +1000f316: 2a30 cmp r2, #48 ; 0x30 +1000f318: d11c bne.n 1000f354 +1000f31a: f990 2001 ldrsb.w r2, [r0, #1] +1000f31e: f022 0120 bic.w r1, r2, #32 +1000f322: 2958 cmp r1, #88 ; 0x58 +1000f324: bf13 iteet ne +1000f326: 2608 movne r6, #8 +1000f328: 2610 moveq r6, #16 +1000f32a: f990 2002 ldrsbeq.w r2, [r0, #2] +1000f32e: 3001 addne r0, #1 +1000f330: bf08 it eq +1000f332: 3002 addeq r0, #2 +1000f334: 1c45 adds r5, r0, #1 +1000f336: 2000 movs r0, #0 +1000f338: b2d1 uxtb r1, r2 +1000f33a: f1a1 0730 sub.w r7, r1, #48 ; 0x30 +1000f33e: 2f09 cmp r7, #9 +1000f340: f105 39ff add.w r9, r5, #4294967295 +1000f344: d808 bhi.n 1000f358 +1000f346: fb00 2006 mla r0, r0, r6, r2 +1000f34a: 3830 subs r0, #48 ; 0x30 +1000f34c: f995 2000 ldrsb.w r2, [r5] +1000f350: 3501 adds r5, #1 +1000f352: e7f1 b.n 1000f338 +1000f354: 260a movs r6, #10 +1000f356: e7ed b.n 1000f334 +1000f358: 2e10 cmp r6, #16 +1000f35a: d112 bne.n 1000f382 +1000f35c: f021 0820 bic.w r8, r1, #32 +1000f360: f1a8 0841 sub.w r8, r8, #65 ; 0x41 +1000f364: f1a1 0761 sub.w r7, r1, #97 ; 0x61 +1000f368: f1b8 0f05 cmp.w r8, #5 +1000f36c: b2ff uxtb r7, r7 +1000f36e: d808 bhi.n 1000f382 +1000f370: 2f19 cmp r7, #25 +1000f372: bf8c ite hi +1000f374: 2141 movhi r1, #65 ; 0x41 +1000f376: 2161 movls r1, #97 ; 0x61 +1000f378: 320a adds r2, #10 +1000f37a: 1a52 subs r2, r2, r1 +1000f37c: ea42 1000 orr.w r0, r2, r0, lsl #4 +1000f380: e7e4 b.n 1000f34c +1000f382: 2a2e cmp r2, #46 ; 0x2e +1000f384: d108 bne.n 1000f398 +1000f386: 4563 cmp r3, ip +1000f388: d03a beq.n 1000f400 +1000f38a: f843 0b04 str.w r0, [r3], #4 +1000f38e: f999 2001 ldrsb.w r2, [r9, #1] +1000f392: f109 0001 add.w r0, r9, #1 +1000f396: e7b9 b.n 1000f30c +1000f398: f032 0520 bics.w r5, r2, #32 +1000f39c: d004 beq.n 1000f3a8 +1000f39e: 3909 subs r1, #9 +1000f3a0: 2904 cmp r1, #4 +1000f3a2: d901 bls.n 1000f3a8 +1000f3a4: 2a2c cmp r2, #44 ; 0x2c +1000f3a6: d12b bne.n 1000f400 +1000f3a8: eba3 030e sub.w r3, r3, lr +1000f3ac: 109b asrs r3, r3, #2 +1000f3ae: 3301 adds r3, #1 +1000f3b0: 2b04 cmp r3, #4 +1000f3b2: d80a bhi.n 1000f3ca +1000f3b4: e8df f003 tbb [pc, r3] +1000f3b8: 0f030925 .word 0x0f030925 +1000f3bc: 19 .byte 0x19 +1000f3bd: 00 .byte 0x00 +1000f3be: f1b0 7f80 cmp.w r0, #16777216 ; 0x1000000 +1000f3c2: d21d bcs.n 1000f400 +1000f3c4: 9b00 ldr r3, [sp, #0] +1000f3c6: ea40 6003 orr.w r0, r0, r3, lsl #24 +1000f3ca: b114 cbz r4, 1000f3d2 +1000f3cc: f000 fad2 bl 1000f974 +1000f3d0: 6020 str r0, [r4, #0] +1000f3d2: 2301 movs r3, #1 +1000f3d4: e015 b.n 1000f402 +1000f3d6: f5b0 3f80 cmp.w r0, #65536 ; 0x10000 +1000f3da: d211 bcs.n 1000f400 +1000f3dc: 9b01 ldr r3, [sp, #4] +1000f3de: 9a00 ldr r2, [sp, #0] +1000f3e0: 041b lsls r3, r3, #16 +1000f3e2: ea43 6302 orr.w r3, r3, r2, lsl #24 +1000f3e6: 4318 orrs r0, r3 +1000f3e8: e7ef b.n 1000f3ca +1000f3ea: 28ff cmp r0, #255 ; 0xff +1000f3ec: d808 bhi.n 1000f400 +1000f3ee: 9b01 ldr r3, [sp, #4] +1000f3f0: 9a00 ldr r2, [sp, #0] +1000f3f2: 041b lsls r3, r3, #16 +1000f3f4: ea43 6302 orr.w r3, r3, r2, lsl #24 +1000f3f8: 9a02 ldr r2, [sp, #8] +1000f3fa: ea43 2302 orr.w r3, r3, r2, lsl #8 +1000f3fe: e7f2 b.n 1000f3e6 +1000f400: 2300 movs r3, #0 +1000f402: 4618 mov r0, r3 +1000f404: b005 add sp, #20 +1000f406: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + +1000f40a : +1000f40a: b507 push {r0, r1, r2, lr} +1000f40c: a901 add r1, sp, #4 +1000f40e: f7ff ff73 bl 1000f2f8 +1000f412: b118 cbz r0, 1000f41c +1000f414: 9801 ldr r0, [sp, #4] +1000f416: b003 add sp, #12 +1000f418: f85d fb04 ldr.w pc, [sp], #4 +1000f41c: f04f 30ff mov.w r0, #4294967295 +1000f420: e7f9 b.n 1000f416 + +1000f422 : +1000f422: b510 push {r4, lr} +1000f424: 4604 mov r4, r0 +1000f426: 6940 ldr r0, [r0, #20] +1000f428: b108 cbz r0, 1000f42e +1000f42a: f001 fe0c bl 10011046 +1000f42e: 4620 mov r0, r4 +1000f430: e8bd 4010 ldmia.w sp!, {r4, lr} +1000f434: f005 bf2a b.w 1001528c + +1000f438 : +1000f438: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1000f43c: 6846 ldr r6, [r0, #4] +1000f43e: 4605 mov r5, r0 +1000f440: 6870 ldr r0, [r6, #4] +1000f442: 460f mov r7, r1 +1000f444: 8883 ldrh r3, [r0, #4] +1000f446: bb23 cbnz r3, 1000f492 +1000f448: 6803 ldr r3, [r0, #0] +1000f44a: 2214 movs r2, #20 +1000f44c: 606b str r3, [r5, #4] +1000f44e: f105 0108 add.w r1, r5, #8 +1000f452: f00b fbbd bl 1001abd0 +1000f456: 2101 movs r1, #1 +1000f458: 4630 mov r0, r6 +1000f45a: f7ff fb36 bl 1000eaca +1000f45e: 4630 mov r0, r6 +1000f460: f001 febd bl 100111de +1000f464: b284 uxth r4, r0 +1000f466: 4630 mov r0, r6 +1000f468: f001 fded bl 10011046 +1000f46c: 686e ldr r6, [r5, #4] +1000f46e: b996 cbnz r6, 1000f496 +1000f470: 4a0f ldr r2, [pc, #60] ; (1000f4b0 ) +1000f472: 4628 mov r0, r5 +1000f474: 6813 ldr r3, [r2, #0] +1000f476: 429d cmp r5, r3 +1000f478: 682b ldr r3, [r5, #0] +1000f47a: bf14 ite ne +1000f47c: 603b strne r3, [r7, #0] +1000f47e: 6013 streq r3, [r2, #0] +1000f480: f005 ff04 bl 1001528c +1000f484: 4a0b ldr r2, [pc, #44] ; (1000f4b4 ) +1000f486: 4620 mov r0, r4 +1000f488: 8813 ldrh r3, [r2, #0] +1000f48a: 1b1b subs r3, r3, r4 +1000f48c: 8013 strh r3, [r2, #0] +1000f48e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000f492: 2400 movs r4, #0 +1000f494: e7ea b.n 1000f46c +1000f496: 6873 ldr r3, [r6, #4] +1000f498: 4630 mov r0, r6 +1000f49a: f8d3 8000 ldr.w r8, [r3] +1000f49e: f001 fe9e bl 100111de +1000f4a2: 4404 add r4, r0 +1000f4a4: 4630 mov r0, r6 +1000f4a6: b2a4 uxth r4, r4 +1000f4a8: f001 fdcd bl 10011046 +1000f4ac: 4646 mov r6, r8 +1000f4ae: e7de b.n 1000f46e +1000f4b0: 1004aac0 .word 0x1004aac0 +1000f4b4: 1004aabe .word 0x1004aabe + +1000f4b8 : +1000f4b8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1000f4bc: 4606 mov r6, r0 +1000f4be: 460f mov r7, r1 +1000f4c0: 2500 movs r5, #0 +1000f4c2: f8df 8068 ldr.w r8, [pc, #104] ; 1000f52c +1000f4c6: 2400 movs r4, #0 +1000f4c8: 4621 mov r1, r4 +1000f4ca: 46a6 mov lr, r4 +1000f4cc: 4620 mov r0, r4 +1000f4ce: f8d8 3000 ldr.w r3, [r8] +1000f4d2: b953 cbnz r3, 1000f4ea +1000f4d4: b110 cbz r0, 1000f4dc +1000f4d6: f7ff ffaf bl 1000f438 +1000f4da: 4405 add r5, r0 +1000f4dc: 42bd cmp r5, r7 +1000f4de: da01 bge.n 1000f4e4 +1000f4e0: 2c01 cmp r4, #1 +1000f4e2: dcf0 bgt.n 1000f4c6 +1000f4e4: 4628 mov r0, r5 +1000f4e6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000f4ea: f8d6 c00c ldr.w ip, [r6, #12] +1000f4ee: 695a ldr r2, [r3, #20] +1000f4f0: 4562 cmp r2, ip +1000f4f2: d109 bne.n 1000f508 +1000f4f4: f8d6 c010 ldr.w ip, [r6, #16] +1000f4f8: 699a ldr r2, [r3, #24] +1000f4fa: 4562 cmp r2, ip +1000f4fc: d104 bne.n 1000f508 +1000f4fe: f8b3 c00c ldrh.w ip, [r3, #12] +1000f502: 88b2 ldrh r2, [r6, #4] +1000f504: 4594 cmp ip, r2 +1000f506: d008 beq.n 1000f51a +1000f508: 3401 adds r4, #1 +1000f50a: b160 cbz r0, 1000f526 +1000f50c: 7fc2 ldrb r2, [r0, #31] +1000f50e: f893 c01f ldrb.w ip, [r3, #31] +1000f512: 4594 cmp ip, r2 +1000f514: bf9c itt ls +1000f516: 4671 movls r1, lr +1000f518: 4618 movls r0, r3 +1000f51a: 681a ldr r2, [r3, #0] +1000f51c: 2a00 cmp r2, #0 +1000f51e: bf18 it ne +1000f520: 469e movne lr, r3 +1000f522: 4613 mov r3, r2 +1000f524: e7d5 b.n 1000f4d2 +1000f526: 4671 mov r1, lr +1000f528: 4618 mov r0, r3 +1000f52a: e7f6 b.n 1000f51a +1000f52c: 1004aac0 .word 0x1004aac0 + +1000f530 : +1000f530: b538 push {r3, r4, r5, lr} +1000f532: 2400 movs r4, #0 +1000f534: 4b07 ldr r3, [pc, #28] ; (1000f554 ) +1000f536: 6818 ldr r0, [r3, #0] +1000f538: b900 cbnz r0, 1000f53c +1000f53a: bd38 pop {r3, r4, r5, pc} +1000f53c: 7fc3 ldrb r3, [r0, #31] +1000f53e: 6805 ldr r5, [r0, #0] +1000f540: b123 cbz r3, 1000f54c +1000f542: 4604 mov r4, r0 +1000f544: 3b01 subs r3, #1 +1000f546: 77c3 strb r3, [r0, #31] +1000f548: 4628 mov r0, r5 +1000f54a: e7f5 b.n 1000f538 +1000f54c: 4621 mov r1, r4 +1000f54e: f7ff ff73 bl 1000f438 +1000f552: e7f9 b.n 1000f548 +1000f554: 1004aac0 .word 0x1004aac0 + +1000f558 : +1000f558: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1000f55c: 6844 ldr r4, [r0, #4] +1000f55e: b085 sub sp, #20 +1000f560: 7823 ldrb r3, [r4, #0] +1000f562: 4605 mov r5, r0 +1000f564: f003 030f and.w r3, r3, #15 +1000f568: 2b05 cmp r3, #5 +1000f56a: d14a bne.n 1000f602 +1000f56c: 88e0 ldrh r0, [r4, #6] +1000f56e: f000 f9fe bl 1000f96e +1000f572: 9002 str r0, [sp, #8] +1000f574: 8860 ldrh r0, [r4, #2] +1000f576: f000 f9fa bl 1000f96e +1000f57a: 7823 ldrb r3, [r4, #0] +1000f57c: 4683 mov fp, r0 +1000f57e: 4628 mov r0, r5 +1000f580: 9303 str r3, [sp, #12] +1000f582: f001 fe2c bl 100111de +1000f586: 4e9c ldr r6, [pc, #624] ; (1000f7f8 ) +1000f588: 4680 mov r8, r0 +1000f58a: 8833 ldrh r3, [r6, #0] +1000f58c: 4403 add r3, r0 +1000f58e: 2b1e cmp r3, #30 +1000f590: dc2e bgt.n 1000f5f0 +1000f592: 2300 movs r3, #0 +1000f594: 4f99 ldr r7, [pc, #612] ; (1000f7fc ) +1000f596: 9301 str r3, [sp, #4] +1000f598: f8d7 9000 ldr.w r9, [r7] +1000f59c: f1b9 0f00 cmp.w r9, #0 +1000f5a0: d134 bne.n 1000f60c +1000f5a2: 4b97 ldr r3, [pc, #604] ; (1000f800 ) +1000f5a4: f8b3 a00a ldrh.w sl, [r3, #10] +1000f5a8: 4650 mov r0, sl +1000f5aa: f005 fdd3 bl 10015154 +1000f5ae: 4681 mov r9, r0 +1000f5b0: b950 cbnz r0, 1000f5c8 +1000f5b2: 4641 mov r1, r8 +1000f5b4: 4620 mov r0, r4 +1000f5b6: f7ff ff7f bl 1000f4b8 +1000f5ba: 4580 cmp r8, r0 +1000f5bc: dc21 bgt.n 1000f602 +1000f5be: 4650 mov r0, sl +1000f5c0: f005 fdc8 bl 10015154 +1000f5c4: 4681 mov r9, r0 +1000f5c6: b1e0 cbz r0, 1000f602 +1000f5c8: 2220 movs r2, #32 +1000f5ca: 2100 movs r1, #0 +1000f5cc: 4648 mov r0, r9 +1000f5ce: f00b fb03 bl 1001abd8 +1000f5d2: 2203 movs r2, #3 +1000f5d4: f889 201f strb.w r2, [r9, #31] +1000f5d8: 683a ldr r2, [r7, #0] +1000f5da: f8c7 9000 str.w r9, [r7] +1000f5de: f8c9 2000 str.w r2, [r9] +1000f5e2: 2214 movs r2, #20 +1000f5e4: 4621 mov r1, r4 +1000f5e6: f109 0008 add.w r0, r9, #8 +1000f5ea: f00b faf1 bl 1001abd0 +1000f5ee: e0c1 b.n 1000f774 +1000f5f0: 4601 mov r1, r0 +1000f5f2: 4620 mov r0, r4 +1000f5f4: f7ff ff60 bl 1000f4b8 +1000f5f8: b118 cbz r0, 1000f602 +1000f5fa: 8833 ldrh r3, [r6, #0] +1000f5fc: 4443 add r3, r8 +1000f5fe: 2b1e cmp r3, #30 +1000f600: ddc7 ble.n 1000f592 +1000f602: 4628 mov r0, r5 +1000f604: f001 fd1f bl 10011046 +1000f608: 2500 movs r5, #0 +1000f60a: e06c b.n 1000f6e6 +1000f60c: 68e2 ldr r2, [r4, #12] +1000f60e: f8d9 1014 ldr.w r1, [r9, #20] +1000f612: 4291 cmp r1, r2 +1000f614: d10a bne.n 1000f62c +1000f616: 6922 ldr r2, [r4, #16] +1000f618: f8d9 1018 ldr.w r1, [r9, #24] +1000f61c: 4291 cmp r1, r2 +1000f61e: d105 bne.n 1000f62c +1000f620: f8b9 100c ldrh.w r1, [r9, #12] +1000f624: 88a2 ldrh r2, [r4, #4] +1000f626: 4291 cmp r1, r2 +1000f628: f000 8095 beq.w 1000f756 +1000f62c: f8cd 9004 str.w r9, [sp, #4] +1000f630: f8d9 9000 ldr.w r9, [r9] +1000f634: e7b2 b.n 1000f59c +1000f636: f8dc 8004 ldr.w r8, [ip, #4] +1000f63a: f8b8 a004 ldrh.w sl, [r8, #4] +1000f63e: 4550 cmp r0, sl +1000f640: d255 bcs.n 1000f6ee +1000f642: f8c1 c000 str.w ip, [r1] +1000f646: 2a00 cmp r2, #0 +1000f648: f000 80d2 beq.w 1000f7f0 +1000f64c: f8b2 c006 ldrh.w ip, [r2, #6] +1000f650: 4584 cmp ip, r0 +1000f652: d86b bhi.n 1000f72c +1000f654: 4554 cmp r4, sl +1000f656: d869 bhi.n 1000f72c +1000f658: 6015 str r5, [r2, #0] +1000f65a: f899 201e ldrb.w r2, [r9, #30] +1000f65e: f012 0501 ands.w r5, r2, #1 +1000f662: d040 beq.n 1000f6e6 +1000f664: 2b00 cmp r3, #0 +1000f666: d0cf beq.n 1000f608 +1000f668: f8d9 2004 ldr.w r2, [r9, #4] +1000f66c: 6855 ldr r5, [r2, #4] +1000f66e: 88aa ldrh r2, [r5, #4] +1000f670: 2a00 cmp r2, #0 +1000f672: d1c9 bne.n 1000f608 +1000f674: f8d1 8000 ldr.w r8, [r1] +1000f678: f1b8 0f00 cmp.w r8, #0 +1000f67c: d14b bne.n 1000f716 +1000f67e: f8b9 201c ldrh.w r2, [r9, #28] +1000f682: f109 0108 add.w r1, r9, #8 +1000f686: 3214 adds r2, #20 +1000f688: f8a9 201c strh.w r2, [r9, #28] +1000f68c: 4628 mov r0, r5 +1000f68e: 2214 movs r2, #20 +1000f690: 682c ldr r4, [r5, #0] +1000f692: f00b fa9d bl 1001abd0 +1000f696: f8b9 001c ldrh.w r0, [r9, #28] +1000f69a: f000 f965 bl 1000f968 +1000f69e: f885 8006 strb.w r8, [r5, #6] +1000f6a2: 8068 strh r0, [r5, #2] +1000f6a4: f885 8007 strb.w r8, [r5, #7] +1000f6a8: f885 800a strb.w r8, [r5, #10] +1000f6ac: f885 800b strb.w r8, [r5, #11] +1000f6b0: 4628 mov r0, r5 +1000f6b2: 2114 movs r1, #20 +1000f6b4: f7ff fbf7 bl 1000eea6 +1000f6b8: 8168 strh r0, [r5, #10] +1000f6ba: f8d9 5004 ldr.w r5, [r9, #4] +1000f6be: 2c00 cmp r4, #0 +1000f6c0: d13b bne.n 1000f73a +1000f6c2: 683a ldr r2, [r7, #0] +1000f6c4: 4648 mov r0, r9 +1000f6c6: 4591 cmp r9, r2 +1000f6c8: bf18 it ne +1000f6ca: 9b01 ldrne r3, [sp, #4] +1000f6cc: f8d9 2000 ldr.w r2, [r9] +1000f6d0: bf14 ite ne +1000f6d2: 601a strne r2, [r3, #0] +1000f6d4: 603a streq r2, [r7, #0] +1000f6d6: f005 fdd9 bl 1001528c +1000f6da: 4628 mov r0, r5 +1000f6dc: f001 fd7f bl 100111de +1000f6e0: 8833 ldrh r3, [r6, #0] +1000f6e2: 1a18 subs r0, r3, r0 +1000f6e4: 8030 strh r0, [r6, #0] +1000f6e6: 4628 mov r0, r5 +1000f6e8: b005 add sp, #20 +1000f6ea: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1000f6ee: d01d beq.n 1000f72c +1000f6f0: f8b8 c006 ldrh.w ip, [r8, #6] +1000f6f4: 4584 cmp ip, r0 +1000f6f6: d819 bhi.n 1000f72c +1000f6f8: b11a cbz r2, 1000f702 +1000f6fa: 88d2 ldrh r2, [r2, #6] +1000f6fc: 4552 cmp r2, sl +1000f6fe: bf18 it ne +1000f700: 2300 movne r3, #0 +1000f702: f8d8 c000 ldr.w ip, [r8] +1000f706: 4642 mov r2, r8 +1000f708: e06c b.n 1000f7e4 +1000f70a: 88d4 ldrh r4, [r2, #6] +1000f70c: 6015 str r5, [r2, #0] +1000f70e: 42a0 cmp r0, r4 +1000f710: bf18 it ne +1000f712: 2300 movne r3, #0 +1000f714: e7a1 b.n 1000f65a +1000f716: f8d8 2004 ldr.w r2, [r8, #4] +1000f71a: 88c8 ldrh r0, [r1, #6] +1000f71c: 8891 ldrh r1, [r2, #4] +1000f71e: 4288 cmp r0, r1 +1000f720: f47f af72 bne.w 1000f608 +1000f724: f8d2 8000 ldr.w r8, [r2] +1000f728: 4611 mov r1, r2 +1000f72a: e7a5 b.n 1000f678 +1000f72c: 4628 mov r0, r5 +1000f72e: f001 fd56 bl 100111de +1000f732: 8833 ldrh r3, [r6, #0] +1000f734: 1a18 subs r0, r3, r0 +1000f736: 8030 strh r0, [r6, #0] +1000f738: e763 b.n 1000f602 +1000f73a: f8d4 8004 ldr.w r8, [r4, #4] +1000f73e: f06f 0113 mvn.w r1, #19 +1000f742: 4620 mov r0, r4 +1000f744: f001 fc54 bl 10010ff0 +1000f748: 4621 mov r1, r4 +1000f74a: 4628 mov r0, r5 +1000f74c: f001 fd5c bl 10011208 +1000f750: f8d8 4000 ldr.w r4, [r8] +1000f754: e7b3 b.n 1000f6be +1000f756: 88e0 ldrh r0, [r4, #6] +1000f758: f000 f909 bl 1000f96e +1000f75c: f3c0 000c ubfx r0, r0, #0, #13 +1000f760: b940 cbnz r0, 1000f774 +1000f762: f8b9 000e ldrh.w r0, [r9, #14] +1000f766: f000 f902 bl 1000f96e +1000f76a: f3c0 000c ubfx r0, r0, #0, #13 +1000f76e: 2800 cmp r0, #0 +1000f770: f47f af37 bne.w 1000f5e2 +1000f774: 8832 ldrh r2, [r6, #0] +1000f776: 4490 add r8, r2 +1000f778: f8a6 8000 strh.w r8, [r6] +1000f77c: 88e2 ldrh r2, [r4, #6] +1000f77e: 0693 lsls r3, r2, #26 +1000f780: d40f bmi.n 1000f7a2 +1000f782: f899 201e ldrb.w r2, [r9, #30] +1000f786: 9b03 ldr r3, [sp, #12] +1000f788: f042 0201 orr.w r2, r2, #1 +1000f78c: f889 201e strb.w r2, [r9, #30] +1000f790: f003 020f and.w r2, r3, #15 +1000f794: 9b02 ldr r3, [sp, #8] +1000f796: ebab 0b82 sub.w fp, fp, r2, lsl #2 +1000f79a: eb0b 0bc3 add.w fp, fp, r3, lsl #3 +1000f79e: f8a9 b01c strh.w fp, [r9, #28] +1000f7a2: f8d5 8004 ldr.w r8, [r5, #4] +1000f7a6: f8b8 0002 ldrh.w r0, [r8, #2] +1000f7aa: f000 f8e0 bl 1000f96e +1000f7ae: f898 4000 ldrb.w r4, [r8] +1000f7b2: f004 040f and.w r4, r4, #15 +1000f7b6: eba0 0484 sub.w r4, r0, r4, lsl #2 +1000f7ba: f8b8 0006 ldrh.w r0, [r8, #6] +1000f7be: f000 f8d6 bl 1000f96e +1000f7c2: 2200 movs r2, #0 +1000f7c4: 2301 movs r3, #1 +1000f7c6: f3c0 000c ubfx r0, r0, #0, #13 +1000f7ca: 00c0 lsls r0, r0, #3 +1000f7cc: b2a4 uxth r4, r4 +1000f7ce: 6869 ldr r1, [r5, #4] +1000f7d0: 4404 add r4, r0 +1000f7d2: b2a4 uxth r4, r4 +1000f7d4: f8d9 c004 ldr.w ip, [r9, #4] +1000f7d8: 700a strb r2, [r1, #0] +1000f7da: 704a strb r2, [r1, #1] +1000f7dc: 708a strb r2, [r1, #2] +1000f7de: 70ca strb r2, [r1, #3] +1000f7e0: 8088 strh r0, [r1, #4] +1000f7e2: 80cc strh r4, [r1, #6] +1000f7e4: f1bc 0f00 cmp.w ip, #0 +1000f7e8: f47f af25 bne.w 1000f636 +1000f7ec: 2a00 cmp r2, #0 +1000f7ee: d18c bne.n 1000f70a +1000f7f0: f8c9 5004 str.w r5, [r9, #4] +1000f7f4: e731 b.n 1000f65a +1000f7f6: bf00 nop +1000f7f8: 1004aabe .word 0x1004aabe +1000f7fc: 1004aac0 .word 0x1004aac0 +1000f800: 100400a8 .word 0x100400a8 + +1000f804 : +1000f804: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1000f808: 8d0b ldrh r3, [r1, #40] ; 0x28 +1000f80a: b08d sub sp, #52 ; 0x34 +1000f80c: 9305 str r3, [sp, #20] +1000f80e: 6843 ldr r3, [r0, #4] +1000f810: 920a str r2, [sp, #40] ; 0x28 +1000f812: 9306 str r3, [sp, #24] +1000f814: 9104 str r1, [sp, #16] +1000f816: 4605 mov r5, r0 +1000f818: 88d8 ldrh r0, [r3, #6] +1000f81a: f000 f8a8 bl 1000f96e +1000f81e: 2208 movs r2, #8 +1000f820: f3c0 030c ubfx r3, r0, #0, #13 +1000f824: 9302 str r3, [sp, #8] +1000f826: f400 5300 and.w r3, r0, #8192 ; 0x2000 +1000f82a: 9308 str r3, [sp, #32] +1000f82c: 9b05 ldr r3, [sp, #20] +1000f82e: 2600 movs r6, #0 +1000f830: 3b14 subs r3, #20 +1000f832: fb93 f3f2 sdiv r3, r3, r2 +1000f836: 2714 movs r7, #20 +1000f838: b29b uxth r3, r3 +1000f83a: 892c ldrh r4, [r5, #8] +1000f83c: 9307 str r3, [sp, #28] +1000f83e: 00db lsls r3, r3, #3 +1000f840: 3c14 subs r4, #20 +1000f842: b29b uxth r3, r3 +1000f844: b2a4 uxth r4, r4 +1000f846: 9309 str r3, [sp, #36] ; 0x24 +1000f848: b91c cbnz r4, 1000f852 +1000f84a: 4620 mov r0, r4 +1000f84c: b00d add sp, #52 ; 0x34 +1000f84e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1000f852: 9b02 ldr r3, [sp, #8] +1000f854: 2200 movs r2, #0 +1000f856: f3c3 0a0c ubfx sl, r3, #0, #13 +1000f85a: 9b08 ldr r3, [sp, #32] +1000f85c: 2114 movs r1, #20 +1000f85e: ea43 030a orr.w r3, r3, sl +1000f862: 9303 str r3, [sp, #12] +1000f864: 9b05 ldr r3, [sp, #20] +1000f866: 2002 movs r0, #2 +1000f868: 3b13 subs r3, #19 +1000f86a: 42a3 cmp r3, r4 +1000f86c: bfdf itttt le +1000f86e: 9b03 ldrle r3, [sp, #12] +1000f870: f8dd a024 ldrle.w sl, [sp, #36] ; 0x24 +1000f874: f443 5300 orrle.w r3, r3, #8192 ; 0x2000 +1000f878: 9303 strle r3, [sp, #12] +1000f87a: bfc8 it gt +1000f87c: 46a2 movgt sl, r4 +1000f87e: f001 fc05 bl 1001108c +1000f882: 4680 mov r8, r0 +1000f884: b300 cbz r0, 1000f8c8 +1000f886: 2214 movs r2, #20 +1000f888: 9906 ldr r1, [sp, #24] +1000f88a: 6840 ldr r0, [r0, #4] +1000f88c: f00b f9a0 bl 1001abd0 +1000f890: 686b ldr r3, [r5, #4] +1000f892: f8d8 9004 ldr.w r9, [r8, #4] +1000f896: 443b add r3, r7 +1000f898: 606b str r3, [r5, #4] +1000f89a: 896b ldrh r3, [r5, #10] +1000f89c: 1bdf subs r7, r3, r7 +1000f89e: 816f strh r7, [r5, #10] +1000f8a0: 4657 mov r7, sl +1000f8a2: 2f00 cmp r7, #0 +1000f8a4: d032 beq.n 1000f90c +1000f8a6: 896e ldrh r6, [r5, #10] +1000f8a8: 42be cmp r6, r7 +1000f8aa: bf28 it cs +1000f8ac: 463e movcs r6, r7 +1000f8ae: b2b6 uxth r6, r6 +1000f8b0: b90e cbnz r6, 1000f8b6 +1000f8b2: 682d ldr r5, [r5, #0] +1000f8b4: e7f5 b.n 1000f8a2 +1000f8b6: 4b2a ldr r3, [pc, #168] ; (1000f960 ) +1000f8b8: 8998 ldrh r0, [r3, #12] +1000f8ba: f005 fc4b bl 10015154 +1000f8be: 4683 mov fp, r0 +1000f8c0: b928 cbnz r0, 1000f8ce +1000f8c2: 4640 mov r0, r8 +1000f8c4: f001 fbbf bl 10011046 +1000f8c8: f04f 30ff mov.w r0, #4294967295 +1000f8cc: e7be b.n 1000f84c +1000f8ce: 9601 str r6, [sp, #4] +1000f8d0: 686b ldr r3, [r5, #4] +1000f8d2: 2202 movs r2, #2 +1000f8d4: 9300 str r3, [sp, #0] +1000f8d6: 4631 mov r1, r6 +1000f8d8: 4603 mov r3, r0 +1000f8da: 2003 movs r0, #3 +1000f8dc: f001 fb5e bl 10010f9c +1000f8e0: b918 cbnz r0, 1000f8ea +1000f8e2: 4658 mov r0, fp +1000f8e4: f005 fcd2 bl 1001528c +1000f8e8: e7eb b.n 1000f8c2 +1000f8ea: 900b str r0, [sp, #44] ; 0x2c +1000f8ec: 4628 mov r0, r5 +1000f8ee: f001 fc7e bl 100111ee +1000f8f2: 4b1c ldr r3, [pc, #112] ; (1000f964 ) +1000f8f4: 1bbf subs r7, r7, r6 +1000f8f6: f8cb 5014 str.w r5, [fp, #20] +1000f8fa: f8cb 3010 str.w r3, [fp, #16] +1000f8fe: 990b ldr r1, [sp, #44] ; 0x2c +1000f900: 4640 mov r0, r8 +1000f902: b2bf uxth r7, r7 +1000f904: f001 fc80 bl 10011208 +1000f908: 2f00 cmp r7, #0 +1000f90a: d1d2 bne.n 1000f8b2 +1000f90c: 9803 ldr r0, [sp, #12] +1000f90e: f000 f82b bl 1000f968 +1000f912: f8a9 0006 strh.w r0, [r9, #6] +1000f916: f10a 0014 add.w r0, sl, #20 +1000f91a: b280 uxth r0, r0 +1000f91c: f000 f824 bl 1000f968 +1000f920: f889 700a strb.w r7, [r9, #10] +1000f924: f8a9 0002 strh.w r0, [r9, #2] +1000f928: f889 700b strb.w r7, [r9, #11] +1000f92c: 2114 movs r1, #20 +1000f92e: 4648 mov r0, r9 +1000f930: f7ff fab9 bl 1000eea6 +1000f934: 9b04 ldr r3, [sp, #16] +1000f936: 9a0a ldr r2, [sp, #40] ; 0x28 +1000f938: 695b ldr r3, [r3, #20] +1000f93a: f8a9 000a strh.w r0, [r9, #10] +1000f93e: 4641 mov r1, r8 +1000f940: 9804 ldr r0, [sp, #16] +1000f942: 4798 blx r3 +1000f944: 4640 mov r0, r8 +1000f946: f001 fb7e bl 10011046 +1000f94a: 9b02 ldr r3, [sp, #8] +1000f94c: 9a07 ldr r2, [sp, #28] +1000f94e: eba4 040a sub.w r4, r4, sl +1000f952: 4413 add r3, r2 +1000f954: b29b uxth r3, r3 +1000f956: b2a4 uxth r4, r4 +1000f958: 9302 str r3, [sp, #8] +1000f95a: 4637 mov r7, r6 +1000f95c: e774 b.n 1000f848 +1000f95e: bf00 nop +1000f960: 100400a8 .word 0x100400a8 +1000f964: 1000f423 .word 0x1000f423 + +1000f968 : +1000f968: ba40 rev16 r0, r0 +1000f96a: b280 uxth r0, r0 +1000f96c: 4770 bx lr + +1000f96e : +1000f96e: ba40 rev16 r0, r0 +1000f970: b280 uxth r0, r0 +1000f972: 4770 bx lr + +1000f974 : +1000f974: ba00 rev r0, r0 +1000f976: 4770 bx lr + +1000f978 : +1000f978: f7ff bffc b.w 1000f974 + +1000f97c : +1000f97c: 7b03 ldrb r3, [r0, #12] +1000f97e: 428b cmp r3, r1 +1000f980: bf1f itttt ne +1000f982: 2300 movne r3, #0 +1000f984: 7301 strbne r1, [r0, #12] +1000f986: 7343 strbne r3, [r0, #13] +1000f988: 8343 strhne r3, [r0, #26] +1000f98a: 4770 bx lr + +1000f98c : +1000f98c: 8b03 ldrh r3, [r0, #24] +1000f98e: b530 push {r4, r5, lr} +1000f990: 6944 ldr r4, [r0, #20] +1000f992: 18e5 adds r5, r4, r3 +1000f994: f885 10f0 strb.w r1, [r5, #240] ; 0xf0 +1000f998: 1c99 adds r1, r3, #2 +1000f99a: 3301 adds r3, #1 +1000f99c: b29b uxth r3, r3 +1000f99e: 4423 add r3, r4 +1000f9a0: 8301 strh r1, [r0, #24] +1000f9a2: f883 20f0 strb.w r2, [r3, #240] ; 0xf0 +1000f9a6: bd30 pop {r4, r5, pc} + +1000f9a8 : +1000f9a8: b510 push {r4, lr} +1000f9aa: 8b02 ldrh r2, [r0, #24] +1000f9ac: 6943 ldr r3, [r0, #20] +1000f9ae: 1c54 adds r4, r2, #1 +1000f9b0: 4413 add r3, r2 +1000f9b2: 8304 strh r4, [r0, #24] +1000f9b4: f883 10f0 strb.w r1, [r3, #240] ; 0xf0 +1000f9b8: bd10 pop {r4, pc} + +1000f9ba : +1000f9ba: 8b03 ldrh r3, [r0, #24] +1000f9bc: 6942 ldr r2, [r0, #20] +1000f9be: b530 push {r4, r5, lr} +1000f9c0: 18d4 adds r4, r2, r3 +1000f9c2: 0a0d lsrs r5, r1, #8 +1000f9c4: f884 50f0 strb.w r5, [r4, #240] ; 0xf0 +1000f9c8: 1c9c adds r4, r3, #2 +1000f9ca: 3301 adds r3, #1 +1000f9cc: b29b uxth r3, r3 +1000f9ce: 4413 add r3, r2 +1000f9d0: 8304 strh r4, [r0, #24] +1000f9d2: f883 10f0 strb.w r1, [r3, #240] ; 0xf0 +1000f9d6: bd30 pop {r4, r5, pc} + +1000f9d8 : +1000f9d8: 8b03 ldrh r3, [r0, #24] +1000f9da: 6942 ldr r2, [r0, #20] +1000f9dc: b530 push {r4, r5, lr} +1000f9de: 18d4 adds r4, r2, r3 +1000f9e0: 0e0d lsrs r5, r1, #24 +1000f9e2: f884 50f0 strb.w r5, [r4, #240] ; 0xf0 +1000f9e6: 1c5c adds r4, r3, #1 +1000f9e8: b2a4 uxth r4, r4 +1000f9ea: 4414 add r4, r2 +1000f9ec: 0c0d lsrs r5, r1, #16 +1000f9ee: f884 50f0 strb.w r5, [r4, #240] ; 0xf0 +1000f9f2: 1c9c adds r4, r3, #2 +1000f9f4: b2a4 uxth r4, r4 +1000f9f6: 4414 add r4, r2 +1000f9f8: 0a0d lsrs r5, r1, #8 +1000f9fa: f884 50f0 strb.w r5, [r4, #240] ; 0xf0 +1000f9fe: 1d1c adds r4, r3, #4 +1000fa00: 3303 adds r3, #3 +1000fa02: b29b uxth r3, r3 +1000fa04: 4413 add r3, r2 +1000fa06: 8304 strh r4, [r0, #24] +1000fa08: f883 10f0 strb.w r1, [r3, #240] ; 0xf0 +1000fa0c: bd30 pop {r4, r5, pc} + +1000fa0e : +1000fa0e: b510 push {r4, lr} +1000fa10: b158 cbz r0, 1000fa2a +1000fa12: 8b03 ldrh r3, [r0, #24] +1000fa14: 6942 ldr r2, [r0, #20] +1000fa16: 1c59 adds r1, r3, #1 +1000fa18: 8301 strh r1, [r0, #24] +1000fa1a: 21ff movs r1, #255 ; 0xff +1000fa1c: 4413 add r3, r2 +1000fa1e: f883 10f0 strb.w r1, [r3, #240] ; 0xf0 +1000fa22: 2100 movs r1, #0 +1000fa24: 8b03 ldrh r3, [r0, #24] +1000fa26: 2b43 cmp r3, #67 ; 0x43 +1000fa28: d900 bls.n 1000fa2c +1000fa2a: bd10 pop {r4, pc} +1000fa2c: 1c5c adds r4, r3, #1 +1000fa2e: 4413 add r3, r2 +1000fa30: 8304 strh r4, [r0, #24] +1000fa32: f883 10f0 strb.w r1, [r3, #240] ; 0xf0 +1000fa36: e7f5 b.n 1000fa24 + +1000fa38 : +1000fa38: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1000fa3c: 460c mov r4, r1 +1000fa3e: 4615 mov r5, r2 +1000fa40: 4607 mov r7, r0 +1000fa42: 2800 cmp r0, #0 +1000fa44: f000 809d beq.w 1000fb82 +1000fa48: 2900 cmp r1, #0 +1000fa4a: f000 809e beq.w 1000fb8a +1000fa4e: 2200 movs r2, #0 +1000fa50: f44f 719a mov.w r1, #308 ; 0x134 +1000fa54: 4610 mov r0, r2 +1000fa56: f001 fb19 bl 1001108c +1000fa5a: 6120 str r0, [r4, #16] +1000fa5c: 2800 cmp r0, #0 +1000fa5e: f000 8098 beq.w 1000fb92 +1000fa62: 2d03 cmp r5, #3 +1000fa64: d007 beq.n 1000fa76 +1000fa66: 7b63 ldrb r3, [r4, #13] +1000fa68: 4e4c ldr r6, [pc, #304] ; (1000fb9c ) +1000fa6a: b913 cbnz r3, 1000fa72 +1000fa6c: 4b4c ldr r3, [pc, #304] ; (1000fba0 ) +1000fa6e: 4798 blx r3 +1000fa70: 6030 str r0, [r6, #0] +1000fa72: 6833 ldr r3, [r6, #0] +1000fa74: 6023 str r3, [r4, #0] +1000fa76: 6923 ldr r3, [r4, #16] +1000fa78: f04f 0800 mov.w r8, #0 +1000fa7c: 685e ldr r6, [r3, #4] +1000fa7e: 2301 movs r3, #1 +1000fa80: 6166 str r6, [r4, #20] +1000fa82: 7033 strb r3, [r6, #0] +1000fa84: 7073 strb r3, [r6, #1] +1000fa86: f897 302a ldrb.w r3, [r7, #42] ; 0x2a +1000fa8a: f886 8003 strb.w r8, [r6, #3] +1000fa8e: 70b3 strb r3, [r6, #2] +1000fa90: 6820 ldr r0, [r4, #0] +1000fa92: f7ff ff6f bl 1000f974 +1000fa96: f005 03fd and.w r3, r5, #253 ; 0xfd +1000fa9a: 2b01 cmp r3, #1 +1000fa9c: 6070 str r0, [r6, #4] +1000fa9e: 6966 ldr r6, [r4, #20] +1000faa0: d16a bne.n 1000fb78 +1000faa2: f004 ff88 bl 100149b6 +1000faa6: 6ca3 ldr r3, [r4, #72] ; 0x48 +1000faa8: 1ac0 subs r0, r0, r3 +1000faaa: f44f 737a mov.w r3, #1000 ; 0x3e8 +1000faae: fbb0 f0f3 udiv r0, r0, r3 +1000fab2: 8130 strh r0, [r6, #8] +1000fab4: 2200 movs r2, #0 +1000fab6: 6963 ldr r3, [r4, #20] +1000fab8: 2d04 cmp r5, #4 +1000faba: 729a strb r2, [r3, #10] +1000fabc: 72da strb r2, [r3, #11] +1000fabe: 731a strb r2, [r3, #12] +1000fac0: 735a strb r2, [r3, #13] +1000fac2: 739a strb r2, [r3, #14] +1000fac4: 73da strb r2, [r3, #15] +1000fac6: d008 beq.n 1000fada +1000fac8: 1fea subs r2, r5, #7 +1000faca: 2a01 cmp r2, #1 +1000facc: d905 bls.n 1000fada +1000face: 2d03 cmp r5, #3 +1000fad0: d105 bne.n 1000fade +1000fad2: 7b22 ldrb r2, [r4, #12] +1000fad4: 3a04 subs r2, #4 +1000fad6: 2a01 cmp r2, #1 +1000fad8: d801 bhi.n 1000fade +1000fada: 687a ldr r2, [r7, #4] +1000fadc: 60da str r2, [r3, #12] +1000fade: 2200 movs r2, #0 +1000fae0: 741a strb r2, [r3, #16] +1000fae2: 745a strb r2, [r3, #17] +1000fae4: 749a strb r2, [r3, #18] +1000fae6: 74da strb r2, [r3, #19] +1000fae8: 751a strb r2, [r3, #20] +1000faea: 755a strb r2, [r3, #21] +1000faec: 759a strb r2, [r3, #22] +1000faee: 75da strb r2, [r3, #23] +1000faf0: 761a strb r2, [r3, #24] +1000faf2: 765a strb r2, [r3, #25] +1000faf4: 769a strb r2, [r3, #26] +1000faf6: 76da strb r2, [r3, #27] +1000faf8: f897 602a ldrb.w r6, [r7, #42] ; 0x2a +1000fafc: f103 011c add.w r1, r3, #28 +1000fb00: b290 uxth r0, r2 +1000fb02: 4286 cmp r6, r0 +1000fb04: bf92 itee ls +1000fb06: 2000 movls r0, #0 +1000fb08: 18b8 addhi r0, r7, r2 +1000fb0a: f890 002b ldrbhi.w r0, [r0, #43] ; 0x2b +1000fb0e: 3201 adds r2, #1 +1000fb10: 2a10 cmp r2, #16 +1000fb12: f801 0b01 strb.w r0, [r1], #1 +1000fb16: d1f3 bne.n 1000fb00 +1000fb18: 2000 movs r0, #0 +1000fb1a: f103 022c add.w r2, r3, #44 ; 0x2c +1000fb1e: f103 016c add.w r1, r3, #108 ; 0x6c +1000fb22: f802 0b01 strb.w r0, [r2], #1 +1000fb26: 428a cmp r2, r1 +1000fb28: d1fb bne.n 1000fb22 +1000fb2a: 2100 movs r1, #0 +1000fb2c: f103 00ec add.w r0, r3, #236 ; 0xec +1000fb30: f802 1b01 strb.w r1, [r2], #1 +1000fb34: 4282 cmp r2, r0 +1000fb36: d1fb bne.n 1000fb30 +1000fb38: f06f 007d mvn.w r0, #125 ; 0x7d +1000fb3c: 2263 movs r2, #99 ; 0x63 +1000fb3e: f883 00ed strb.w r0, [r3, #237] ; 0xed +1000fb42: 2053 movs r0, #83 ; 0x53 +1000fb44: f883 20ec strb.w r2, [r3, #236] ; 0xec +1000fb48: f883 20ef strb.w r2, [r3, #239] ; 0xef +1000fb4c: 2200 movs r2, #0 +1000fb4e: f883 00ee strb.w r0, [r3, #238] ; 0xee +1000fb52: 8321 strh r1, [r4, #24] +1000fb54: 33f0 adds r3, #240 ; 0xf0 +1000fb56: f803 2b01 strb.w r2, [r3], #1 +1000fb5a: 3201 adds r2, #1 +1000fb5c: 2a44 cmp r2, #68 ; 0x44 +1000fb5e: d1fa bne.n 1000fb56 +1000fb60: 2201 movs r2, #1 +1000fb62: 4620 mov r0, r4 +1000fb64: 2135 movs r1, #53 ; 0x35 +1000fb66: f7ff ff11 bl 1000f98c +1000fb6a: 4620 mov r0, r4 +1000fb6c: 4629 mov r1, r5 +1000fb6e: f7ff ff1b bl 1000f9a8 +1000fb72: 2000 movs r0, #0 +1000fb74: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000fb78: f886 8008 strb.w r8, [r6, #8] +1000fb7c: f886 8009 strb.w r8, [r6, #9] +1000fb80: e798 b.n 1000fab4 +1000fb82: f06f 000d mvn.w r0, #13 +1000fb86: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000fb8a: f06f 0005 mvn.w r0, #5 +1000fb8e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000fb92: f04f 30ff mov.w r0, #4294967295 +1000fb96: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1000fb9a: bf00 nop +1000fb9c: 1004aaf8 .word 0x1004aaf8 +1000fba0: 0000f585 .word 0x0000f585 + +1000fba4 : +1000fba4: b510 push {r4, lr} +1000fba6: 4604 mov r4, r0 +1000fba8: b130 cbz r0, 1000fbb8 +1000fbaa: 6900 ldr r0, [r0, #16] +1000fbac: b108 cbz r0, 1000fbb2 +1000fbae: f001 fa4a bl 10011046 +1000fbb2: 2300 movs r3, #0 +1000fbb4: 6123 str r3, [r4, #16] +1000fbb6: 6163 str r3, [r4, #20] +1000fbb8: bd10 pop {r4, pc} + ... + +1000fbbc : +1000fbbc: 2300 movs r3, #0 +1000fbbe: b573 push {r0, r1, r4, r5, r6, lr} +1000fbc0: 4606 mov r6, r0 +1000fbc2: 6a04 ldr r4, [r0, #32] +1000fbc4: 2106 movs r1, #6 +1000fbc6: 62e3 str r3, [r4, #44] ; 0x2c +1000fbc8: 4620 mov r0, r4 +1000fbca: f7ff fed7 bl 1000f97c +1000fbce: 2201 movs r2, #1 +1000fbd0: 4621 mov r1, r4 +1000fbd2: 4630 mov r0, r6 +1000fbd4: f7ff ff30 bl 1000fa38 +1000fbd8: 4605 mov r5, r0 +1000fbda: bb80 cbnz r0, 1000fc3e +1000fbdc: 2202 movs r2, #2 +1000fbde: 2139 movs r1, #57 ; 0x39 +1000fbe0: 4620 mov r0, r4 +1000fbe2: f7ff fed3 bl 1000f98c +1000fbe6: 8d31 ldrh r1, [r6, #40] ; 0x28 +1000fbe8: 4620 mov r0, r4 +1000fbea: f7ff fee6 bl 1000f9ba +1000fbee: 2204 movs r2, #4 +1000fbf0: 2137 movs r1, #55 ; 0x37 +1000fbf2: 4620 mov r0, r4 +1000fbf4: f7ff feca bl 1000f98c +1000fbf8: 2101 movs r1, #1 +1000fbfa: 4620 mov r0, r4 +1000fbfc: f7ff fed4 bl 1000f9a8 +1000fc00: 2103 movs r1, #3 +1000fc02: 4620 mov r0, r4 +1000fc04: f7ff fed0 bl 1000f9a8 +1000fc08: 211c movs r1, #28 +1000fc0a: 4620 mov r0, r4 +1000fc0c: f7ff fecc bl 1000f9a8 +1000fc10: 2106 movs r1, #6 +1000fc12: 4620 mov r0, r4 +1000fc14: f7ff fec8 bl 1000f9a8 +1000fc18: 4620 mov r0, r4 +1000fc1a: f7ff fef8 bl 1000fa0e +1000fc1e: 8b21 ldrh r1, [r4, #24] +1000fc20: 6920 ldr r0, [r4, #16] +1000fc22: 31f0 adds r1, #240 ; 0xf0 +1000fc24: b289 uxth r1, r1 +1000fc26: f001 fac1 bl 100111ac +1000fc2a: 9600 str r6, [sp, #0] +1000fc2c: 2343 movs r3, #67 ; 0x43 +1000fc2e: 4a0e ldr r2, [pc, #56] ; (1000fc68 ) +1000fc30: 6921 ldr r1, [r4, #16] +1000fc32: 6860 ldr r0, [r4, #4] +1000fc34: f004 f864 bl 10013d00 +1000fc38: 4620 mov r0, r4 +1000fc3a: f7ff ffb3 bl 1000fba4 +1000fc3e: 7b63 ldrb r3, [r4, #13] +1000fc40: 4628 mov r0, r5 +1000fc42: 3301 adds r3, #1 +1000fc44: b2da uxtb r2, r3 +1000fc46: 2a05 cmp r2, #5 +1000fc48: bf96 itet ls +1000fc4a: f44f 737a movls.w r3, #1000 ; 0x3e8 +1000fc4e: f64e 2360 movwhi r3, #60000 ; 0xea60 +1000fc52: 4093 lslls r3, r2 +1000fc54: 7362 strb r2, [r4, #13] +1000fc56: f44f 72fa mov.w r2, #500 ; 0x1f4 +1000fc5a: f203 13f3 addw r3, r3, #499 ; 0x1f3 +1000fc5e: fb93 f3f2 sdiv r3, r3, r2 +1000fc62: 8363 strh r3, [r4, #26] +1000fc64: b002 add sp, #8 +1000fc66: bd70 pop {r4, r5, r6, pc} +1000fc68: 10040094 .word 0x10040094 + +1000fc6c : +1000fc6c: b573 push {r0, r1, r4, r5, r6, lr} +1000fc6e: 4606 mov r6, r0 +1000fc70: 6a04 ldr r4, [r0, #32] +1000fc72: 2103 movs r1, #3 +1000fc74: 4620 mov r0, r4 +1000fc76: f7ff fe81 bl 1000f97c +1000fc7a: 2203 movs r2, #3 +1000fc7c: 4621 mov r1, r4 +1000fc7e: 4630 mov r0, r6 +1000fc80: f7ff feda bl 1000fa38 +1000fc84: 4605 mov r5, r0 +1000fc86: bb40 cbnz r0, 1000fcda +1000fc88: 2202 movs r2, #2 +1000fc8a: 2139 movs r1, #57 ; 0x39 +1000fc8c: 4620 mov r0, r4 +1000fc8e: f7ff fe7d bl 1000f98c +1000fc92: f44f 7110 mov.w r1, #576 ; 0x240 +1000fc96: 4620 mov r0, r4 +1000fc98: f7ff fe8f bl 1000f9ba +1000fc9c: 2204 movs r2, #4 +1000fc9e: 2132 movs r1, #50 ; 0x32 +1000fca0: 4620 mov r0, r4 +1000fca2: f7ff fe73 bl 1000f98c +1000fca6: 6ae0 ldr r0, [r4, #44] ; 0x2c +1000fca8: f7ff fe66 bl 1000f978 +1000fcac: 4601 mov r1, r0 +1000fcae: 4620 mov r0, r4 +1000fcb0: f7ff fe92 bl 1000f9d8 +1000fcb4: 4620 mov r0, r4 +1000fcb6: f7ff feaa bl 1000fa0e +1000fcba: 8b21 ldrh r1, [r4, #24] +1000fcbc: 6920 ldr r0, [r4, #16] +1000fcbe: 31f0 adds r1, #240 ; 0xf0 +1000fcc0: b289 uxth r1, r1 +1000fcc2: f001 fa73 bl 100111ac +1000fcc6: 9600 str r6, [sp, #0] +1000fcc8: 2343 movs r3, #67 ; 0x43 +1000fcca: 4a10 ldr r2, [pc, #64] ; (1000fd0c ) +1000fccc: 6921 ldr r1, [r4, #16] +1000fcce: 6860 ldr r0, [r4, #4] +1000fcd0: f004 f816 bl 10013d00 +1000fcd4: 4620 mov r0, r4 +1000fcd6: f7ff ff65 bl 1000fba4 +1000fcda: 7b63 ldrb r3, [r4, #13] +1000fcdc: 4628 mov r0, r5 +1000fcde: 3301 adds r3, #1 +1000fce0: b2db uxtb r3, r3 +1000fce2: 2b09 cmp r3, #9 +1000fce4: 7363 strb r3, [r4, #13] +1000fce6: bf96 itet ls +1000fce8: ebc3 1243 rsbls r2, r3, r3, lsl #5 +1000fcec: f242 7310 movwhi r3, #10000 ; 0x2710 +1000fcf0: eb03 0382 addls.w r3, r3, r2, lsl #2 +1000fcf4: f44f 72fa mov.w r2, #500 ; 0x1f4 +1000fcf8: bf9c itt ls +1000fcfa: 00db lslls r3, r3, #3 +1000fcfc: b29b uxthls r3, r3 +1000fcfe: f203 13f3 addw r3, r3, #499 ; 0x1f3 +1000fd02: fb93 f3f2 sdiv r3, r3, r2 +1000fd06: 8363 strh r3, [r4, #26] +1000fd08: b002 add sp, #8 +1000fd0a: bd70 pop {r4, r5, r6, pc} +1000fd0c: 10040094 .word 0x10040094 + +1000fd10 : +1000fd10: b538 push {r3, r4, r5, lr} +1000fd12: 4605 mov r5, r0 +1000fd14: 6a04 ldr r4, [r0, #32] +1000fd16: 2108 movs r1, #8 +1000fd18: 4620 mov r0, r4 +1000fd1a: f7ff fe2f bl 1000f97c +1000fd1e: 2200 movs r2, #0 +1000fd20: f104 012c add.w r1, r4, #44 ; 0x2c +1000fd24: 4628 mov r0, r5 +1000fd26: f004 fa29 bl 1001417c +1000fd2a: 7b63 ldrb r3, [r4, #13] +1000fd2c: 3301 adds r3, #1 +1000fd2e: 7363 strb r3, [r4, #13] +1000fd30: 2301 movs r3, #1 +1000fd32: 8363 strh r3, [r4, #26] +1000fd34: bd38 pop {r3, r4, r5, pc} + +1000fd36 : +1000fd36: b537 push {r0, r1, r2, r4, r5, lr} +1000fd38: 4605 mov r5, r0 +1000fd3a: 2800 cmp r0, #0 +1000fd3c: d055 beq.n 1000fdea +1000fd3e: 6a04 ldr r4, [r0, #32] +1000fd40: 2c00 cmp r4, #0 +1000fd42: d052 beq.n 1000fdea +1000fd44: 2300 movs r3, #0 +1000fd46: 84a3 strh r3, [r4, #36] ; 0x24 +1000fd48: 6be3 ldr r3, [r4, #60] ; 0x3c +1000fd4a: 1c5a adds r2, r3, #1 +1000fd4c: d00b beq.n 1000fd66 +1000fd4e: 223c movs r2, #60 ; 0x3c +1000fd50: 331e adds r3, #30 +1000fd52: fbb3 f3f2 udiv r3, r3, r2 +1000fd56: f64f 72ff movw r2, #65535 ; 0xffff +1000fd5a: 4293 cmp r3, r2 +1000fd5c: bf28 it cs +1000fd5e: 4613 movcs r3, r2 +1000fd60: 2b00 cmp r3, #0 +1000fd62: d044 beq.n 1000fdee +1000fd64: 84e3 strh r3, [r4, #38] ; 0x26 +1000fd66: 6c23 ldr r3, [r4, #64] ; 0x40 +1000fd68: 1c58 adds r0, r3, #1 +1000fd6a: d00d beq.n 1000fd88 +1000fd6c: 223c movs r2, #60 ; 0x3c +1000fd6e: 331e adds r3, #30 +1000fd70: fbb3 f3f2 udiv r3, r3, r2 +1000fd74: f64f 72ff movw r2, #65535 ; 0xffff +1000fd78: 4293 cmp r3, r2 +1000fd7a: bf28 it cs +1000fd7c: 4613 movcs r3, r2 +1000fd7e: 2b00 cmp r3, #0 +1000fd80: d037 beq.n 1000fdf2 +1000fd82: 83a3 strh r3, [r4, #28] +1000fd84: 8ba3 ldrh r3, [r4, #28] +1000fd86: 8423 strh r3, [r4, #32] +1000fd88: 6c63 ldr r3, [r4, #68] ; 0x44 +1000fd8a: 1c59 adds r1, r3, #1 +1000fd8c: d00c beq.n 1000fda8 +1000fd8e: 223c movs r2, #60 ; 0x3c +1000fd90: 331e adds r3, #30 +1000fd92: fbb3 f3f2 udiv r3, r3, r2 +1000fd96: f64f 72ff movw r2, #65535 ; 0xffff +1000fd9a: 4293 cmp r3, r2 +1000fd9c: bf28 it cs +1000fd9e: 4613 movcs r3, r2 +1000fda0: b34b cbz r3, 1000fdf6 +1000fda2: 83e3 strh r3, [r4, #30] +1000fda4: 8be3 ldrh r3, [r4, #30] +1000fda6: 8463 strh r3, [r4, #34] ; 0x22 +1000fda8: 7ba3 ldrb r3, [r4, #14] +1000fdaa: b333 cbz r3, 1000fdfa +1000fdac: 6b23 ldr r3, [r4, #48] ; 0x30 +1000fdae: 9300 str r3, [sp, #0] +1000fdb0: 6b63 ldr r3, [r4, #52] ; 0x34 +1000fdb2: 9301 str r3, [sp, #4] +1000fdb4: b92b cbnz r3, 1000fdc2 +1000fdb6: 6ae3 ldr r3, [r4, #44] ; 0x2c +1000fdb8: 9a00 ldr r2, [sp, #0] +1000fdba: 4013 ands r3, r2 +1000fdbc: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000 +1000fdc0: 9301 str r3, [sp, #4] +1000fdc2: f104 012c add.w r1, r4, #44 ; 0x2c +1000fdc6: 4628 mov r0, r5 +1000fdc8: f001 f814 bl 10010df4 +1000fdcc: 4669 mov r1, sp +1000fdce: 4628 mov r0, r5 +1000fdd0: f001 f87a bl 10010ec8 +1000fdd4: a901 add r1, sp, #4 +1000fdd6: 4628 mov r0, r5 +1000fdd8: f001 f872 bl 10010ec0 +1000fddc: 4628 mov r0, r5 +1000fdde: f001 f87d bl 10010edc +1000fde2: 210a movs r1, #10 +1000fde4: 4620 mov r0, r4 +1000fde6: f7ff fdc9 bl 1000f97c +1000fdea: b003 add sp, #12 +1000fdec: bd30 pop {r4, r5, pc} +1000fdee: 2301 movs r3, #1 +1000fdf0: e7b8 b.n 1000fd64 +1000fdf2: 2301 movs r3, #1 +1000fdf4: e7c5 b.n 1000fd82 +1000fdf6: 2301 movs r3, #1 +1000fdf8: e7d3 b.n 1000fda2 +1000fdfa: f894 302c ldrb.w r3, [r4, #44] ; 0x2c +1000fdfe: 061a lsls r2, r3, #24 +1000fe00: d401 bmi.n 1000fe06 +1000fe02: 23ff movs r3, #255 ; 0xff +1000fe04: e7d3 b.n 1000fdae +1000fe06: 2bbf cmp r3, #191 ; 0xbf +1000fe08: bf8c ite hi +1000fe0a: f06f 437f mvnhi.w r3, #4278190080 ; 0xff000000 +1000fe0e: f64f 73ff movwls r3, #65535 ; 0xffff +1000fe12: e7cc b.n 1000fdae + +1000fe14 : +1000fe14: b570 push {r4, r5, r6, lr} +1000fe16: 4606 mov r6, r0 +1000fe18: 6808 ldr r0, [r1, #0] +1000fe1a: 460c mov r4, r1 +1000fe1c: b190 cbz r0, 1000fe44 +1000fe1e: f00a feeb bl 1001abf8 +1000fe22: b178 cbz r0, 1000fe44 +1000fe24: 8b33 ldrh r3, [r6, #24] +1000fe26: 6825 ldr r5, [r4, #0] +1000fe28: f1c3 0441 rsb r4, r3, #65 ; 0x41 +1000fe2c: 42a0 cmp r0, r4 +1000fe2e: bf28 it cs +1000fe30: 4620 movcs r0, r4 +1000fe32: b2c4 uxtb r4, r0 +1000fe34: 4622 mov r2, r4 +1000fe36: 210c movs r1, #12 +1000fe38: 4630 mov r0, r6 +1000fe3a: f7ff fda7 bl 1000f98c +1000fe3e: 442c add r4, r5 +1000fe40: 42a5 cmp r5, r4 +1000fe42: d100 bne.n 1000fe46 +1000fe44: bd70 pop {r4, r5, r6, pc} +1000fe46: f815 1b01 ldrb.w r1, [r5], #1 +1000fe4a: 4630 mov r0, r6 +1000fe4c: f7ff fdac bl 1000f9a8 +1000fe50: e7f6 b.n 1000fe40 + ... + +1000fe54 : +1000fe54: b573 push {r0, r1, r4, r5, r6, lr} +1000fe56: 4606 mov r6, r0 +1000fe58: 6a04 ldr r4, [r0, #32] +1000fe5a: 2104 movs r1, #4 +1000fe5c: 4620 mov r0, r4 +1000fe5e: f7ff fd8d bl 1000f97c +1000fe62: 2203 movs r2, #3 +1000fe64: 4621 mov r1, r4 +1000fe66: 4630 mov r0, r6 +1000fe68: f7ff fde6 bl 1000fa38 +1000fe6c: 4605 mov r5, r0 +1000fe6e: bb00 cbnz r0, 1000feb2 +1000fe70: 2202 movs r2, #2 +1000fe72: 2139 movs r1, #57 ; 0x39 +1000fe74: 4620 mov r0, r4 +1000fe76: f7ff fd89 bl 1000f98c +1000fe7a: 8d31 ldrh r1, [r6, #40] ; 0x28 +1000fe7c: 4620 mov r0, r4 +1000fe7e: f7ff fd9c bl 1000f9ba +1000fe82: f106 0124 add.w r1, r6, #36 ; 0x24 +1000fe86: 4620 mov r0, r4 +1000fe88: f7ff ffc4 bl 1000fe14 +1000fe8c: 4620 mov r0, r4 +1000fe8e: f7ff fdbe bl 1000fa0e +1000fe92: 8b21 ldrh r1, [r4, #24] +1000fe94: 6920 ldr r0, [r4, #16] +1000fe96: 31f0 adds r1, #240 ; 0xf0 +1000fe98: b289 uxth r1, r1 +1000fe9a: f001 f987 bl 100111ac +1000fe9e: 9600 str r6, [sp, #0] +1000fea0: 2343 movs r3, #67 ; 0x43 +1000fea2: 4a10 ldr r2, [pc, #64] ; (1000fee4 ) +1000fea4: 6921 ldr r1, [r4, #16] +1000fea6: 6860 ldr r0, [r4, #4] +1000fea8: f003 ff2a bl 10013d00 +1000feac: 4620 mov r0, r4 +1000feae: f7ff fe79 bl 1000fba4 +1000feb2: 7b63 ldrb r3, [r4, #13] +1000feb4: 4628 mov r0, r5 +1000feb6: 3301 adds r3, #1 +1000feb8: b2db uxtb r3, r3 +1000feba: 2b09 cmp r3, #9 +1000febc: 7363 strb r3, [r4, #13] +1000febe: bf96 itet ls +1000fec0: ebc3 1243 rsbls r2, r3, r3, lsl #5 +1000fec4: f242 7310 movwhi r3, #10000 ; 0x2710 +1000fec8: eb03 0382 addls.w r3, r3, r2, lsl #2 +1000fecc: f44f 72fa mov.w r2, #500 ; 0x1f4 +1000fed0: bf9c itt ls +1000fed2: 00db lslls r3, r3, #3 +1000fed4: b29b uxthls r3, r3 +1000fed6: f203 13f3 addw r3, r3, #499 ; 0x1f3 +1000feda: fb93 f3f2 sdiv r3, r3, r2 +1000fede: 8363 strh r3, [r4, #26] +1000fee0: b002 add sp, #8 +1000fee2: bd70 pop {r4, r5, r6, pc} +1000fee4: 10040094 .word 0x10040094 + +1000fee8 : +1000fee8: b573 push {r0, r1, r4, r5, r6, lr} +1000feea: 4606 mov r6, r0 +1000feec: 6a04 ldr r4, [r0, #32] +1000feee: 2101 movs r1, #1 +1000fef0: 4620 mov r0, r4 +1000fef2: f7ff fd43 bl 1000f97c +1000fef6: 2203 movs r2, #3 +1000fef8: 4621 mov r1, r4 +1000fefa: 4630 mov r0, r6 +1000fefc: f7ff fd9c bl 1000fa38 +1000ff00: 4605 mov r5, r0 +1000ff02: 2800 cmp r0, #0 +1000ff04: d14d bne.n 1000ffa2 +1000ff06: 2202 movs r2, #2 +1000ff08: 2139 movs r1, #57 ; 0x39 +1000ff0a: 4620 mov r0, r4 +1000ff0c: f7ff fd3e bl 1000f98c +1000ff10: 8d31 ldrh r1, [r6, #40] ; 0x28 +1000ff12: 4620 mov r0, r4 +1000ff14: f7ff fd51 bl 1000f9ba +1000ff18: 2204 movs r2, #4 +1000ff1a: 2132 movs r1, #50 ; 0x32 +1000ff1c: 4620 mov r0, r4 +1000ff1e: f7ff fd35 bl 1000f98c +1000ff22: 6ae0 ldr r0, [r4, #44] ; 0x2c +1000ff24: f7ff fd28 bl 1000f978 +1000ff28: 4601 mov r1, r0 +1000ff2a: 4620 mov r0, r4 +1000ff2c: f7ff fd54 bl 1000f9d8 +1000ff30: 2204 movs r2, #4 +1000ff32: 2136 movs r1, #54 ; 0x36 +1000ff34: 4620 mov r0, r4 +1000ff36: f7ff fd29 bl 1000f98c +1000ff3a: 6aa0 ldr r0, [r4, #40] ; 0x28 +1000ff3c: f7ff fd1c bl 1000f978 +1000ff40: 4601 mov r1, r0 +1000ff42: 4620 mov r0, r4 +1000ff44: f7ff fd48 bl 1000f9d8 +1000ff48: 2204 movs r2, #4 +1000ff4a: 2137 movs r1, #55 ; 0x37 +1000ff4c: 4620 mov r0, r4 +1000ff4e: f7ff fd1d bl 1000f98c +1000ff52: 2101 movs r1, #1 +1000ff54: 4620 mov r0, r4 +1000ff56: f7ff fd27 bl 1000f9a8 +1000ff5a: 2103 movs r1, #3 +1000ff5c: 4620 mov r0, r4 +1000ff5e: f7ff fd23 bl 1000f9a8 +1000ff62: 211c movs r1, #28 +1000ff64: 4620 mov r0, r4 +1000ff66: f7ff fd1f bl 1000f9a8 +1000ff6a: 2106 movs r1, #6 +1000ff6c: 4620 mov r0, r4 +1000ff6e: f7ff fd1b bl 1000f9a8 +1000ff72: f106 0124 add.w r1, r6, #36 ; 0x24 +1000ff76: 4620 mov r0, r4 +1000ff78: f7ff ff4c bl 1000fe14 +1000ff7c: 4620 mov r0, r4 +1000ff7e: f7ff fd46 bl 1000fa0e +1000ff82: 8b21 ldrh r1, [r4, #24] +1000ff84: 6920 ldr r0, [r4, #16] +1000ff86: 31f0 adds r1, #240 ; 0xf0 +1000ff88: b289 uxth r1, r1 +1000ff8a: f001 f90f bl 100111ac +1000ff8e: 9600 str r6, [sp, #0] +1000ff90: 2343 movs r3, #67 ; 0x43 +1000ff92: 4a0e ldr r2, [pc, #56] ; (1000ffcc ) +1000ff94: 6921 ldr r1, [r4, #16] +1000ff96: 6860 ldr r0, [r4, #4] +1000ff98: f003 feb2 bl 10013d00 +1000ff9c: 4620 mov r0, r4 +1000ff9e: f7ff fe01 bl 1000fba4 +1000ffa2: 7b63 ldrb r3, [r4, #13] +1000ffa4: 4628 mov r0, r5 +1000ffa6: 3301 adds r3, #1 +1000ffa8: b2da uxtb r2, r3 +1000ffaa: 2a05 cmp r2, #5 +1000ffac: bf96 itet ls +1000ffae: f44f 737a movls.w r3, #1000 ; 0x3e8 +1000ffb2: f64e 2360 movwhi r3, #60000 ; 0xea60 +1000ffb6: 4093 lslls r3, r2 +1000ffb8: 7362 strb r2, [r4, #13] +1000ffba: f44f 72fa mov.w r2, #500 ; 0x1f4 +1000ffbe: f203 13f3 addw r3, r3, #499 ; 0x1f3 +1000ffc2: fb93 f3f2 sdiv r3, r3, r2 +1000ffc6: 8363 strh r3, [r4, #26] +1000ffc8: b002 add sp, #8 +1000ffca: bd70 pop {r4, r5, r6, pc} +1000ffcc: 10040094 .word 0x10040094 + +1000ffd0 : +1000ffd0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1000ffd4: 8953 ldrh r3, [r2, #10] +1000ffd6: b089 sub sp, #36 ; 0x24 +1000ffd8: 2b2b cmp r3, #43 ; 0x2b +1000ffda: 4606 mov r6, r0 +1000ffdc: 4693 mov fp, r2 +1000ffde: f8d0 a020 ldr.w sl, [r0, #32] +1000ffe2: d95c bls.n 1001009e +1000ffe4: 6852 ldr r2, [r2, #4] +1000ffe6: 7813 ldrb r3, [r2, #0] +1000ffe8: 2b02 cmp r3, #2 +1000ffea: d158 bne.n 1001009e +1000ffec: f896 302a ldrb.w r3, [r6, #42] ; 0x2a +1000fff0: f100 012b add.w r1, r0, #43 ; 0x2b +1000fff4: 332b adds r3, #43 ; 0x2b +1000fff6: f102 001c add.w r0, r2, #28 +1000fffa: 4433 add r3, r6 +1000fffc: 4299 cmp r1, r3 +1000fffe: d148 bne.n 10010092 +10010000: 6850 ldr r0, [r2, #4] +10010002: f7ff fcb9 bl 1000f978 +10010006: f8da 3000 ldr.w r3, [sl] +1001000a: 4298 cmp r0, r3 +1001000c: d147 bne.n 1001009e +1001000e: 220a movs r2, #10 +10010010: 2100 movs r1, #0 +10010012: 48ad ldr r0, [pc, #692] ; (100102c8 ) +10010014: f00a fde0 bl 1001abd8 +10010018: f8bb 300a ldrh.w r3, [fp, #10] +1001001c: 2b2b cmp r3, #43 ; 0x2b +1001001e: d93e bls.n 1001009e +10010020: f8db 3004 ldr.w r3, [fp, #4] +10010024: 24f0 movs r4, #240 ; 0xf0 +10010026: f8ca 3008 str.w r3, [sl, #8] +1001002a: 2300 movs r3, #0 +1001002c: f8bb 9008 ldrh.w r9, [fp, #8] +10010030: 9301 str r3, [sp, #4] +10010032: 465f mov r7, fp +10010034: 897b ldrh r3, [r7, #10] +10010036: 42a3 cmp r3, r4 +10010038: d93a bls.n 100100b0 +1001003a: 687b ldr r3, [r7, #4] +1001003c: 9302 str r3, [sp, #8] +1001003e: 9b02 ldr r3, [sp, #8] +10010040: 5d1a ldrb r2, [r3, r4] +10010042: 2aff cmp r2, #255 ; 0xff +10010044: f000 80c1 beq.w 100101ca +10010048: 454c cmp r4, r9 +1001004a: f080 80be bcs.w 100101ca +1001004e: 1ca3 adds r3, r4, #2 +10010050: b29b uxth r3, r3 +10010052: 8979 ldrh r1, [r7, #10] +10010054: 9305 str r3, [sp, #20] +10010056: 1c63 adds r3, r4, #1 +10010058: 428b cmp r3, r1 +1001005a: da33 bge.n 100100c4 +1001005c: 9b02 ldr r3, [sp, #8] +1001005e: 4423 add r3, r4 +10010060: 785b ldrb r3, [r3, #1] +10010062: 2a33 cmp r2, #51 ; 0x33 +10010064: f000 8084 beq.w 10010170 +10010068: f200 8172 bhi.w 10010350 +1001006c: 2a01 cmp r2, #1 +1001006e: d073 beq.n 10010158 +10010070: d32f bcc.n 100100d2 +10010072: 2a03 cmp r2, #3 +10010074: d076 beq.n 10010164 +10010076: 2a06 cmp r2, #6 +10010078: f040 8192 bne.w 100103a0 +1001007c: 079a lsls r2, r3, #30 +1001007e: d10e bne.n 1001009e +10010080: 2b08 cmp r3, #8 +10010082: 461d mov r5, r3 +10010084: bf28 it cs +10010086: 2508 movcs r5, #8 +10010088: 429d cmp r5, r3 +1001008a: d808 bhi.n 1001009e +1001008c: f04f 0808 mov.w r8, #8 +10010090: e025 b.n 100100de +10010092: f811 5b01 ldrb.w r5, [r1], #1 +10010096: f810 4b01 ldrb.w r4, [r0], #1 +1001009a: 42a5 cmp r5, r4 +1001009c: d0ae beq.n 1000fffc +1001009e: 2300 movs r3, #0 +100100a0: 4658 mov r0, fp +100100a2: f8ca 3008 str.w r3, [sl, #8] +100100a6: f000 ffce bl 10011046 +100100aa: b009 add sp, #36 ; 0x24 +100100ac: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +100100b0: 683f ldr r7, [r7, #0] +100100b2: 1ae4 subs r4, r4, r3 +100100b4: eba9 0903 sub.w r9, r9, r3 +100100b8: b2a4 uxth r4, r4 +100100ba: fa1f f989 uxth.w r9, r9 +100100be: 2f00 cmp r7, #0 +100100c0: d1b8 bne.n 10010034 +100100c2: e7ec b.n 1001009e +100100c4: 683b ldr r3, [r7, #0] +100100c6: 2b00 cmp r3, #0 +100100c8: f000 815d beq.w 10010386 +100100cc: 685b ldr r3, [r3, #4] +100100ce: 781b ldrb r3, [r3, #0] +100100d0: e7c7 b.n 10010062 +100100d2: 2500 movs r5, #0 +100100d4: f04f 38ff mov.w r8, #4294967295 +100100d8: 462b mov r3, r5 +100100da: 3c01 subs r4, #1 +100100dc: b2a4 uxth r4, r4 +100100de: 3402 adds r4, #2 +100100e0: 441c add r4, r3 +100100e2: b2a4 uxth r4, r4 +100100e4: 2d00 cmp r5, #0 +100100e6: d064 beq.n 100101b2 +100100e8: ab08 add r3, sp, #32 +100100ea: 9304 str r3, [sp, #16] +100100ec: 2300 movs r3, #0 +100100ee: 9a04 ldr r2, [sp, #16] +100100f0: f8cd 8000 str.w r8, [sp] +100100f4: f842 3d04 str.w r3, [r2, #-4]! +100100f8: 9204 str r2, [sp, #16] +100100fa: 4a73 ldr r2, [pc, #460] ; (100102c8 ) +100100fc: f108 33ff add.w r3, r8, #4294967295 +10010100: 18d3 adds r3, r2, r3 +10010102: 9303 str r3, [sp, #12] +10010104: 9b00 ldr r3, [sp, #0] +10010106: 9a05 ldr r2, [sp, #20] +10010108: eba3 0308 sub.w r3, r3, r8 +1001010c: eb02 0383 add.w r3, r2, r3, lsl #2 +10010110: 9a03 ldr r2, [sp, #12] +10010112: b29b uxth r3, r3 +10010114: 7852 ldrb r2, [r2, #1] +10010116: 2a00 cmp r2, #0 +10010118: d14b bne.n 100101b2 +1001011a: 2d03 cmp r5, #3 +1001011c: bf94 ite ls +1001011e: 462a movls r2, r5 +10010120: 2204 movhi r2, #4 +10010122: 9904 ldr r1, [sp, #16] +10010124: 4638 mov r0, r7 +10010126: f001 f8d3 bl 100112d0 +1001012a: 2d04 cmp r5, #4 +1001012c: d934 bls.n 10010198 +1001012e: 07ab lsls r3, r5, #30 +10010130: d1b5 bne.n 1001009e +10010132: f04f 0201 mov.w r2, #1 +10010136: 9b03 ldr r3, [sp, #12] +10010138: 9807 ldr r0, [sp, #28] +1001013a: f803 2f01 strb.w r2, [r3, #1]! +1001013e: 9303 str r3, [sp, #12] +10010140: f7ff fc18 bl 1000f974 +10010144: 9a00 ldr r2, [sp, #0] +10010146: 4b61 ldr r3, [pc, #388] ; (100102cc ) +10010148: 3d04 subs r5, #4 +1001014a: f843 0022 str.w r0, [r3, r2, lsl #2] +1001014e: 4613 mov r3, r2 +10010150: 3301 adds r3, #1 +10010152: b2ed uxtb r5, r5 +10010154: 9300 str r3, [sp, #0] +10010156: e7d5 b.n 10010104 +10010158: 2b04 cmp r3, #4 +1001015a: d1a0 bne.n 1001009e +1001015c: 461d mov r5, r3 +1001015e: f04f 0806 mov.w r8, #6 +10010162: e7bc b.n 100100de +10010164: 2b03 cmp r3, #3 +10010166: d99a bls.n 1001009e +10010168: f04f 0807 mov.w r8, #7 +1001016c: 2504 movs r5, #4 +1001016e: e7b6 b.n 100100de +10010170: 2b04 cmp r3, #4 +10010172: d194 bne.n 1001009e +10010174: 461d mov r5, r3 +10010176: f04f 0803 mov.w r8, #3 +1001017a: e7b0 b.n 100100de +1001017c: 2b01 cmp r3, #1 +1001017e: d18e bne.n 1001009e +10010180: 461d mov r5, r3 +10010182: f04f 0800 mov.w r8, #0 +10010186: e7aa b.n 100100de +10010188: 2b04 cmp r3, #4 +1001018a: d188 bne.n 1001009e +1001018c: 461d mov r5, r3 +1001018e: f04f 0802 mov.w r8, #2 +10010192: e7a4 b.n 100100de +10010194: 2b04 cmp r3, #4 +10010196: e0e5 b.n 10010364 +10010198: d15b bne.n 10010252 +1001019a: 9807 ldr r0, [sp, #28] +1001019c: f7ff fbec bl 1000f978 +100101a0: 9007 str r0, [sp, #28] +100101a2: 2301 movs r3, #1 +100101a4: 4a48 ldr r2, [pc, #288] ; (100102c8 ) +100101a6: 9900 ldr r1, [sp, #0] +100101a8: 5453 strb r3, [r2, r1] +100101aa: 9b07 ldr r3, [sp, #28] +100101ac: 4a47 ldr r2, [pc, #284] ; (100102cc ) +100101ae: f842 3021 str.w r3, [r2, r1, lsl #2] +100101b2: 897b ldrh r3, [r7, #10] +100101b4: 42a3 cmp r3, r4 +100101b6: f63f af42 bhi.w 1001003e +100101ba: 1ae4 subs r4, r4, r3 +100101bc: eba9 0903 sub.w r9, r9, r3 +100101c0: b2a4 uxth r4, r4 +100101c2: fa1f f989 uxth.w r9, r9 +100101c6: 454c cmp r4, r9 +100101c8: d34a bcc.n 10010260 +100101ca: 4a3f ldr r2, [pc, #252] ; (100102c8 ) +100101cc: 7813 ldrb r3, [r2, #0] +100101ce: 4615 mov r5, r2 +100101d0: 2b00 cmp r3, #0 +100101d2: d147 bne.n 10010264 +100101d4: 9b01 ldr r3, [sp, #4] +100101d6: 2b00 cmp r3, #0 +100101d8: d14c bne.n 10010274 +100101da: 786b ldrb r3, [r5, #1] +100101dc: 2b00 cmp r3, #0 +100101de: f43f af5e beq.w 1001009e +100101e2: 4b3a ldr r3, [pc, #232] ; (100102cc ) +100101e4: 791a ldrb r2, [r3, #4] +100101e6: 461f mov r7, r3 +100101e8: 2a05 cmp r2, #5 +100101ea: d173 bne.n 100102d4 +100101ec: f89a 300c ldrb.w r3, [sl, #12] +100101f0: 2b01 cmp r3, #1 +100101f2: d161 bne.n 100102b8 +100101f4: 9b01 ldr r3, [sp, #4] +100101f6: 6a34 ldr r4, [r6, #32] +100101f8: 6323 str r3, [r4, #48] ; 0x30 +100101fa: 6363 str r3, [r4, #52] ; 0x34 +100101fc: 78eb ldrb r3, [r5, #3] +100101fe: b10b cbz r3, 10010204 +10010200: 68fb ldr r3, [r7, #12] +10010202: 63e3 str r3, [r4, #60] ; 0x3c +10010204: 792b ldrb r3, [r5, #4] +10010206: 2b00 cmp r3, #0 +10010208: d042 beq.n 10010290 +1001020a: 693b ldr r3, [r7, #16] +1001020c: 6423 str r3, [r4, #64] ; 0x40 +1001020e: 796b ldrb r3, [r5, #5] +10010210: 2b00 cmp r3, #0 +10010212: d040 beq.n 10010296 +10010214: 697b ldr r3, [r7, #20] +10010216: 6463 str r3, [r4, #68] ; 0x44 +10010218: 68a3 ldr r3, [r4, #8] +1001021a: 691b ldr r3, [r3, #16] +1001021c: 62e3 str r3, [r4, #44] ; 0x2c +1001021e: 79ab ldrb r3, [r5, #6] +10010220: b123 cbz r3, 1001022c +10010222: 69b8 ldr r0, [r7, #24] +10010224: f7ff fba6 bl 1000f974 +10010228: 2301 movs r3, #1 +1001022a: 6320 str r0, [r4, #48] ; 0x30 +1001022c: 73a3 strb r3, [r4, #14] +1001022e: 79eb ldrb r3, [r5, #7] +10010230: b11b cbz r3, 1001023a +10010232: 69f8 ldr r0, [r7, #28] +10010234: f7ff fb9e bl 1000f974 +10010238: 6360 str r0, [r4, #52] ; 0x34 +1001023a: 2400 movs r4, #0 +1001023c: 4f24 ldr r7, [pc, #144] ; (100102d0 ) +1001023e: fa5f f884 uxtb.w r8, r4 +10010242: 3401 adds r4, #1 +10010244: 192b adds r3, r5, r4 +10010246: 79db ldrb r3, [r3, #7] +10010248: bb63 cbnz r3, 100102a4 +1001024a: 4630 mov r0, r6 +1001024c: f7ff fd60 bl 1000fd10 +10010250: e725 b.n 1001009e +10010252: 2d01 cmp r5, #1 +10010254: f47f af23 bne.w 1001009e +10010258: f89d 301c ldrb.w r3, [sp, #28] +1001025c: 9307 str r3, [sp, #28] +1001025e: e7a0 b.n 100101a2 +10010260: 683f ldr r7, [r7, #0] +10010262: e6ea b.n 1001003a +10010264: 2100 movs r1, #0 +10010266: 4b19 ldr r3, [pc, #100] ; (100102cc ) +10010268: 7011 strb r1, [r2, #0] +1001026a: 681b ldr r3, [r3, #0] +1001026c: 2b01 cmp r3, #1 +1001026e: d00b beq.n 10010288 +10010270: 2b02 cmp r3, #2 +10010272: d105 bne.n 10010280 +10010274: 2300 movs r3, #0 +10010276: f04f 096c mov.w r9, #108 ; 0x6c +1001027a: 9301 str r3, [sp, #4] +1001027c: 242c movs r4, #44 ; 0x2c +1001027e: e6d8 b.n 10010032 +10010280: 2b03 cmp r3, #3 +10010282: d1a7 bne.n 100101d4 +10010284: 2301 movs r3, #1 +10010286: 9301 str r3, [sp, #4] +10010288: f04f 09ec mov.w r9, #236 ; 0xec +1001028c: 246c movs r4, #108 ; 0x6c +1001028e: e6d0 b.n 10010032 +10010290: 6be3 ldr r3, [r4, #60] ; 0x3c +10010292: 085b lsrs r3, r3, #1 +10010294: e7ba b.n 1001020c +10010296: 6be2 ldr r2, [r4, #60] ; 0x3c +10010298: 0893 lsrs r3, r2, #2 +1001029a: eb03 0352 add.w r3, r3, r2, lsr #1 +1001029e: eb03 03d2 add.w r3, r3, r2, lsr #3 +100102a2: e7b8 b.n 10010216 +100102a4: f857 0f04 ldr.w r0, [r7, #4]! +100102a8: f7ff fb64 bl 1000f974 +100102ac: a907 add r1, sp, #28 +100102ae: 9007 str r0, [sp, #28] +100102b0: 4640 mov r0, r8 +100102b2: f000 fc2d bl 10010b10 +100102b6: e7c2 b.n 1001023e +100102b8: 3b03 subs r3, #3 +100102ba: 2b02 cmp r3, #2 +100102bc: f63f aeef bhi.w 1001009e +100102c0: 4630 mov r0, r6 +100102c2: f7ff fd38 bl 1000fd36 +100102c6: e6ea b.n 1001009e +100102c8: 1004aac4 .word 0x1004aac4 +100102cc: 1004aad0 .word 0x1004aad0 +100102d0: 1004aaec .word 0x1004aaec +100102d4: 2a06 cmp r2, #6 +100102d6: d11f bne.n 10010318 +100102d8: f89a 300c ldrb.w r3, [sl, #12] +100102dc: 1eda subs r2, r3, #3 +100102de: 2a02 cmp r2, #2 +100102e0: d902 bls.n 100102e8 +100102e2: 2b01 cmp r3, #1 +100102e4: f47f aedb bne.w 1001009e +100102e8: 4630 mov r0, r6 +100102ea: 6a34 ldr r4, [r6, #32] +100102ec: f000 fe11 bl 10010f12 +100102f0: 4630 mov r0, r6 +100102f2: 4932 ldr r1, [pc, #200] ; (100103bc ) +100102f4: f000 fd7e bl 10010df4 +100102f8: 4630 mov r0, r6 +100102fa: 4930 ldr r1, [pc, #192] ; (100103bc ) +100102fc: f000 fde0 bl 10010ec0 +10010300: 4630 mov r0, r6 +10010302: 492e ldr r1, [pc, #184] ; (100103bc ) +10010304: f000 fde0 bl 10010ec8 +10010308: 4620 mov r0, r4 +1001030a: 210c movs r1, #12 +1001030c: f7ff fb36 bl 1000f97c +10010310: 4630 mov r0, r6 +10010312: f7ff fc53 bl 1000fbbc +10010316: e6c2 b.n 1001009e +10010318: 2a02 cmp r2, #2 +1001031a: f47f aec0 bne.w 1001009e +1001031e: f89a 200c ldrb.w r2, [sl, #12] +10010322: 2a06 cmp r2, #6 +10010324: f47f aebb bne.w 1001009e +10010328: f8bd 2004 ldrh.w r2, [sp, #4] +1001032c: f8aa 201a strh.w r2, [sl, #26] +10010330: 78aa ldrb r2, [r5, #2] +10010332: 2a00 cmp r2, #0 +10010334: f43f aeb3 beq.w 1001009e +10010338: 6898 ldr r0, [r3, #8] +1001033a: 6a34 ldr r4, [r6, #32] +1001033c: f7ff fb1a bl 1000f974 +10010340: 68a3 ldr r3, [r4, #8] +10010342: 62a0 str r0, [r4, #40] ; 0x28 +10010344: 691b ldr r3, [r3, #16] +10010346: 4630 mov r0, r6 +10010348: 62e3 str r3, [r4, #44] ; 0x2c +1001034a: f7ff fdcd bl 1000fee8 +1001034e: e6a6 b.n 1001009e +10010350: 2a36 cmp r2, #54 ; 0x36 +10010352: f43f af19 beq.w 10010188 +10010356: d80a bhi.n 1001036e +10010358: 2a34 cmp r2, #52 ; 0x34 +1001035a: f43f af0f beq.w 1001017c +1001035e: 2a35 cmp r2, #53 ; 0x35 +10010360: d11e bne.n 100103a0 +10010362: 2b01 cmp r3, #1 +10010364: f47f ae9b bne.w 1001009e +10010368: 461d mov r5, r3 +1001036a: 4698 mov r8, r3 +1001036c: e6b7 b.n 100100de +1001036e: 2a3a cmp r2, #58 ; 0x3a +10010370: f43f af10 beq.w 10010194 +10010374: 2a3b cmp r2, #59 ; 0x3b +10010376: d113 bne.n 100103a0 +10010378: 2b04 cmp r3, #4 +1001037a: f47f ae90 bne.w 1001009e +1001037e: 461d mov r5, r3 +10010380: f04f 0805 mov.w r8, #5 +10010384: e6ab b.n 100100de +10010386: 2a06 cmp r2, #6 +10010388: f43f ae78 beq.w 1001007c +1001038c: d80c bhi.n 100103a8 +1001038e: 2a01 cmp r2, #1 +10010390: f43f ae85 beq.w 1001009e +10010394: f4ff ae9d bcc.w 100100d2 +10010398: 2a03 cmp r2, #3 +1001039a: f43f ae80 beq.w 1001009e +1001039e: 2300 movs r3, #0 +100103a0: 9a05 ldr r2, [sp, #20] +100103a2: 441a add r2, r3 +100103a4: b294 uxth r4, r2 +100103a6: e704 b.n 100101b2 +100103a8: 2a33 cmp r2, #51 ; 0x33 +100103aa: d3f8 bcc.n 1001039e +100103ac: 2a36 cmp r2, #54 ; 0x36 +100103ae: f67f ae76 bls.w 1001009e +100103b2: 3a3a subs r2, #58 ; 0x3a +100103b4: 2a01 cmp r2, #1 +100103b6: f67f ae72 bls.w 1001009e +100103ba: e7f0 b.n 1001039e +100103bc: 10040090 .word 0x10040090 + +100103c0 : +100103c0: b537 push {r0, r1, r2, r4, r5, lr} +100103c2: 4605 mov r5, r0 +100103c4: 2800 cmp r0, #0 +100103c6: d043 beq.n 10010450 +100103c8: 6a04 ldr r4, [r0, #32] +100103ca: 2c00 cmp r4, #0 +100103cc: d040 beq.n 10010450 +100103ce: 7b23 ldrb r3, [r4, #12] +100103d0: 2b08 cmp r3, #8 +100103d2: d13d bne.n 10010450 +100103d4: 680a ldr r2, [r1, #0] +100103d6: 6ae3 ldr r3, [r4, #44] ; 0x2c +100103d8: 429a cmp r2, r3 +100103da: d139 bne.n 10010450 +100103dc: 210c movs r1, #12 +100103de: 4620 mov r0, r4 +100103e0: f7ff facc bl 1000f97c +100103e4: 2204 movs r2, #4 +100103e6: 4621 mov r1, r4 +100103e8: 4628 mov r0, r5 +100103ea: f7ff fb25 bl 1000fa38 +100103ee: bb50 cbnz r0, 10010446 +100103f0: 2204 movs r2, #4 +100103f2: 2132 movs r1, #50 ; 0x32 +100103f4: 4620 mov r0, r4 +100103f6: f7ff fac9 bl 1000f98c +100103fa: 6ae0 ldr r0, [r4, #44] ; 0x2c +100103fc: f7ff fabc bl 1000f978 +10010400: 4601 mov r1, r0 +10010402: 4620 mov r0, r4 +10010404: f7ff fae8 bl 1000f9d8 +10010408: 2204 movs r2, #4 +1001040a: 2136 movs r1, #54 ; 0x36 +1001040c: 4620 mov r0, r4 +1001040e: f7ff fabd bl 1000f98c +10010412: 6aa0 ldr r0, [r4, #40] ; 0x28 +10010414: f7ff fab0 bl 1000f978 +10010418: 4601 mov r1, r0 +1001041a: 4620 mov r0, r4 +1001041c: f7ff fadc bl 1000f9d8 +10010420: 4620 mov r0, r4 +10010422: f7ff faf4 bl 1000fa0e +10010426: 8b21 ldrh r1, [r4, #24] +10010428: 6920 ldr r0, [r4, #16] +1001042a: 31f0 adds r1, #240 ; 0xf0 +1001042c: b289 uxth r1, r1 +1001042e: f000 febd bl 100111ac +10010432: 9500 str r5, [sp, #0] +10010434: 2343 movs r3, #67 ; 0x43 +10010436: 4a07 ldr r2, [pc, #28] ; (10010454 ) +10010438: 6921 ldr r1, [r4, #16] +1001043a: 6860 ldr r0, [r4, #4] +1001043c: f003 fc60 bl 10013d00 +10010440: 4620 mov r0, r4 +10010442: f7ff fbaf bl 1000fba4 +10010446: 7b63 ldrb r3, [r4, #13] +10010448: 3301 adds r3, #1 +1001044a: 7363 strb r3, [r4, #13] +1001044c: 2314 movs r3, #20 +1001044e: 8363 strh r3, [r4, #26] +10010450: b003 add sp, #12 +10010452: bd30 pop {r4, r5, pc} +10010454: 10040094 .word 0x10040094 + +10010458 : +10010458: b573 push {r0, r1, r4, r5, r6, lr} +1001045a: 4606 mov r6, r0 +1001045c: 6a04 ldr r4, [r0, #32] +1001045e: 2105 movs r1, #5 +10010460: 4620 mov r0, r4 +10010462: f7ff fa8b bl 1000f97c +10010466: 2203 movs r2, #3 +10010468: 4621 mov r1, r4 +1001046a: 4630 mov r0, r6 +1001046c: f7ff fae4 bl 1000fa38 +10010470: 4605 mov r5, r0 +10010472: bb08 cbnz r0, 100104b8 +10010474: 2202 movs r2, #2 +10010476: 2139 movs r1, #57 ; 0x39 +10010478: 4620 mov r0, r4 +1001047a: f7ff fa87 bl 1000f98c +1001047e: 8d31 ldrh r1, [r6, #40] ; 0x28 +10010480: 4620 mov r0, r4 +10010482: f7ff fa9a bl 1000f9ba +10010486: f106 0124 add.w r1, r6, #36 ; 0x24 +1001048a: 4620 mov r0, r4 +1001048c: f7ff fcc2 bl 1000fe14 +10010490: 4620 mov r0, r4 +10010492: f7ff fabc bl 1000fa0e +10010496: 8b21 ldrh r1, [r4, #24] +10010498: 6920 ldr r0, [r4, #16] +1001049a: 31f0 adds r1, #240 ; 0xf0 +1001049c: b289 uxth r1, r1 +1001049e: f000 fe85 bl 100111ac +100104a2: 9600 str r6, [sp, #0] +100104a4: 2343 movs r3, #67 ; 0x43 +100104a6: f104 0228 add.w r2, r4, #40 ; 0x28 +100104aa: 6921 ldr r1, [r4, #16] +100104ac: 6860 ldr r0, [r4, #4] +100104ae: f003 fc27 bl 10013d00 +100104b2: 4620 mov r0, r4 +100104b4: f7ff fb76 bl 1000fba4 +100104b8: 7b63 ldrb r3, [r4, #13] +100104ba: 4628 mov r0, r5 +100104bc: 3301 adds r3, #1 +100104be: b2db uxtb r3, r3 +100104c0: 2b09 cmp r3, #9 +100104c2: 7363 strb r3, [r4, #13] +100104c4: bf96 itet ls +100104c6: ebc3 1243 rsbls r2, r3, r3, lsl #5 +100104ca: f644 6320 movwhi r3, #20000 ; 0x4e20 +100104ce: eb03 0382 addls.w r3, r3, r2, lsl #2 +100104d2: f44f 72fa mov.w r2, #500 ; 0x1f4 +100104d6: bf9c itt ls +100104d8: 011b lslls r3, r3, #4 +100104da: b29b uxthls r3, r3 +100104dc: f203 13f3 addw r3, r3, #499 ; 0x1f3 +100104e0: fb93 f3f2 sdiv r3, r3, r2 +100104e4: 8363 strh r3, [r4, #26] +100104e6: b002 add sp, #8 +100104e8: bd70 pop {r4, r5, r6, pc} + +100104ea : +100104ea: b148 cbz r0, 10010500 +100104ec: 6a00 ldr r0, [r0, #32] +100104ee: b138 cbz r0, 10010500 +100104f0: 7b00 ldrb r0, [r0, #12] +100104f2: 280a cmp r0, #10 +100104f4: d003 beq.n 100104fe +100104f6: 1f43 subs r3, r0, #5 +100104f8: 4258 negs r0, r3 +100104fa: 4158 adcs r0, r3 +100104fc: 4770 bx lr +100104fe: 2001 movs r0, #1 +10010500: 4770 bx lr + ... + +10010504 : +10010504: b5f0 push {r4, r5, r6, r7, lr} +10010506: 6a04 ldr r4, [r0, #32] +10010508: b085 sub sp, #20 +1001050a: 4606 mov r6, r0 +1001050c: 2c00 cmp r4, #0 +1001050e: d067 beq.n 100105e0 +10010510: 6aa3 ldr r3, [r4, #40] ; 0x28 +10010512: 9303 str r3, [sp, #12] +10010514: f7ff ffe9 bl 100104ea +10010518: 2100 movs r1, #0 +1001051a: 4605 mov r5, r0 +1001051c: 4620 mov r0, r4 +1001051e: f7ff fa2d bl 1000f97c +10010522: 2300 movs r3, #0 +10010524: 62a3 str r3, [r4, #40] ; 0x28 +10010526: 62e3 str r3, [r4, #44] ; 0x2c +10010528: 6323 str r3, [r4, #48] ; 0x30 +1001052a: 6363 str r3, [r4, #52] ; 0x34 +1001052c: 6463 str r3, [r4, #68] ; 0x44 +1001052e: 6423 str r3, [r4, #64] ; 0x40 +10010530: 63e3 str r3, [r4, #60] ; 0x3c +10010532: 84e3 strh r3, [r4, #38] ; 0x26 +10010534: 84a3 strh r3, [r4, #36] ; 0x24 +10010536: 8463 strh r3, [r4, #34] ; 0x22 +10010538: 8423 strh r3, [r4, #32] +1001053a: 2d00 cmp r5, #0 +1001053c: d04d beq.n 100105da +1001053e: 2207 movs r2, #7 +10010540: 4621 mov r1, r4 +10010542: 4630 mov r0, r6 +10010544: f7ff fa78 bl 1000fa38 +10010548: 4605 mov r5, r0 +1001054a: bb00 cbnz r0, 1001058e +1001054c: 2204 movs r2, #4 +1001054e: 2136 movs r1, #54 ; 0x36 +10010550: 4620 mov r0, r4 +10010552: af04 add r7, sp, #16 +10010554: f7ff fa1a bl 1000f98c +10010558: f857 0d04 ldr.w r0, [r7, #-4]! +1001055c: f7ff fa0c bl 1000f978 +10010560: 4601 mov r1, r0 +10010562: 4620 mov r0, r4 +10010564: f7ff fa38 bl 1000f9d8 +10010568: 4620 mov r0, r4 +1001056a: f7ff fa50 bl 1000fa0e +1001056e: 8b21 ldrh r1, [r4, #24] +10010570: 6920 ldr r0, [r4, #16] +10010572: 31f0 adds r1, #240 ; 0xf0 +10010574: b289 uxth r1, r1 +10010576: f000 fe19 bl 100111ac +1001057a: 9600 str r6, [sp, #0] +1001057c: 2343 movs r3, #67 ; 0x43 +1001057e: 463a mov r2, r7 +10010580: 6921 ldr r1, [r4, #16] +10010582: 6860 ldr r0, [r4, #4] +10010584: f003 fbbc bl 10013d00 +10010588: 4620 mov r0, r4 +1001058a: f7ff fb0b bl 1000fba4 +1001058e: 7b63 ldrb r3, [r4, #13] +10010590: 4630 mov r0, r6 +10010592: 3301 adds r3, #1 +10010594: b2db uxtb r3, r3 +10010596: 2b09 cmp r3, #9 +10010598: bf98 it ls +1001059a: ebc3 1243 rsbls r2, r3, r3, lsl #5 +1001059e: 7363 strb r3, [r4, #13] +100105a0: bf8c ite hi +100105a2: f242 7310 movwhi r3, #10000 ; 0x2710 +100105a6: eb03 0382 addls.w r3, r3, r2, lsl #2 +100105aa: f44f 72fa mov.w r2, #500 ; 0x1f4 +100105ae: bf9c itt ls +100105b0: 00db lslls r3, r3, #3 +100105b2: b29b uxthls r3, r3 +100105b4: f203 13f3 addw r3, r3, #499 ; 0x1f3 +100105b8: fb93 f3f2 sdiv r3, r3, r2 +100105bc: 8363 strh r3, [r4, #26] +100105be: f000 fca8 bl 10010f12 +100105c2: 4909 ldr r1, [pc, #36] ; (100105e8 ) +100105c4: 4630 mov r0, r6 +100105c6: f000 fc15 bl 10010df4 +100105ca: 4907 ldr r1, [pc, #28] ; (100105e8 ) +100105cc: 4630 mov r0, r6 +100105ce: f000 fc77 bl 10010ec0 +100105d2: 4905 ldr r1, [pc, #20] ; (100105e8 ) +100105d4: 4630 mov r0, r6 +100105d6: f000 fc77 bl 10010ec8 +100105da: 4628 mov r0, r5 +100105dc: b005 add sp, #20 +100105de: bdf0 pop {r4, r5, r6, r7, pc} +100105e0: f06f 050d mvn.w r5, #13 +100105e4: e7f9 b.n 100105da +100105e6: bf00 nop +100105e8: 10040090 .word 0x10040090 + +100105ec : +100105ec: b570 push {r4, r5, r6, lr} +100105ee: f240 2619 movw r6, #537 ; 0x219 +100105f2: 4b25 ldr r3, [pc, #148] ; (10010688 ) +100105f4: 681c ldr r4, [r3, #0] +100105f6: b904 cbnz r4, 100105fa +100105f8: bd70 pop {r4, r5, r6, pc} +100105fa: 6a25 ldr r5, [r4, #32] +100105fc: b10d cbz r5, 10010602 +100105fe: 7b2b ldrb r3, [r5, #12] +10010600: b90b cbnz r3, 10010606 +10010602: 6824 ldr r4, [r4, #0] +10010604: e7f7 b.n 100105f6 +10010606: 8caa ldrh r2, [r5, #36] ; 0x24 +10010608: 8ce9 ldrh r1, [r5, #38] ; 0x26 +1001060a: 3201 adds r2, #1 +1001060c: b292 uxth r2, r2 +1001060e: 4291 cmp r1, r2 +10010610: 84aa strh r2, [r5, #36] ; 0x24 +10010612: d10d bne.n 10010630 +10010614: 4620 mov r0, r4 +10010616: f7fe fb0f bl 1000ec38 +1001061a: 4620 mov r0, r4 +1001061c: f7ff ff72 bl 10010504 +10010620: 6a25 ldr r5, [r4, #32] +10010622: f004 f9c8 bl 100149b6 +10010626: 64a8 str r0, [r5, #72] ; 0x48 +10010628: 4620 mov r0, r4 +1001062a: f7ff fac7 bl 1000fbbc +1001062e: e7e8 b.n 10010602 +10010630: 8c6a ldrh r2, [r5, #34] ; 0x22 +10010632: 1e51 subs r1, r2, #1 +10010634: 2a01 cmp r2, #1 +10010636: 8469 strh r1, [r5, #34] ; 0x22 +10010638: d113 bne.n 10010662 +1001063a: 3b01 subs r3, #1 +1001063c: b2db uxtb r3, r3 +1001063e: 2b09 cmp r3, #9 +10010640: d8df bhi.n 10010602 +10010642: fa26 f303 lsr.w r3, r6, r3 +10010646: 07db lsls r3, r3, #31 +10010648: d5db bpl.n 10010602 +1001064a: 4620 mov r0, r4 +1001064c: f7ff fc02 bl 1000fe54 +10010650: 6a22 ldr r2, [r4, #32] +10010652: 8ca9 ldrh r1, [r5, #36] ; 0x24 +10010654: 8cd3 ldrh r3, [r2, #38] ; 0x26 +10010656: 1a5b subs r3, r3, r1 +10010658: 2b01 cmp r3, #1 +1001065a: ddd2 ble.n 10010602 +1001065c: 105b asrs r3, r3, #1 +1001065e: 8453 strh r3, [r2, #34] ; 0x22 +10010660: e7cf b.n 10010602 +10010662: 8c2a ldrh r2, [r5, #32] +10010664: 1e51 subs r1, r2, #1 +10010666: 2a01 cmp r2, #1 +10010668: 8429 strh r1, [r5, #32] +1001066a: d1ca bne.n 10010602 +1001066c: f003 02fb and.w r2, r3, #251 ; 0xfb +10010670: 2a01 cmp r2, #1 +10010672: d001 beq.n 10010678 +10010674: 2b0a cmp r3, #10 +10010676: d1c4 bne.n 10010602 +10010678: f004 f99d bl 100149b6 +1001067c: 64a8 str r0, [r5, #72] ; 0x48 +1001067e: 4620 mov r0, r4 +10010680: f7ff feea bl 10010458 +10010684: e7bd b.n 10010602 +10010686: bf00 nop +10010688: 1004b198 .word 0x1004b198 + +1001068c : +1001068c: b538 push {r3, r4, r5, lr} +1001068e: 2500 movs r5, #0 +10010690: 4b23 ldr r3, [pc, #140] ; (10010720 ) +10010692: 681c ldr r4, [r3, #0] +10010694: b904 cbnz r4, 10010698 +10010696: bd38 pop {r3, r4, r5, pc} +10010698: 6a23 ldr r3, [r4, #32] +1001069a: b123 cbz r3, 100106a6 +1001069c: 8b5a ldrh r2, [r3, #26] +1001069e: 2a01 cmp r2, #1 +100106a0: d903 bls.n 100106aa +100106a2: 3a01 subs r2, #1 +100106a4: 835a strh r2, [r3, #26] +100106a6: 6824 ldr r4, [r4, #0] +100106a8: e7f4 b.n 10010694 +100106aa: d1fc bne.n 100106a6 +100106ac: 7b1a ldrb r2, [r3, #12] +100106ae: 835d strh r5, [r3, #26] +100106b0: 2a0c cmp r2, #12 +100106b2: d001 beq.n 100106b8 +100106b4: 2a06 cmp r2, #6 +100106b6: d103 bne.n 100106c0 +100106b8: 4620 mov r0, r4 +100106ba: f7ff fa7f bl 1000fbbc +100106be: e7f2 b.n 100106a6 +100106c0: 2a01 cmp r2, #1 +100106c2: d106 bne.n 100106d2 +100106c4: 7b5b ldrb r3, [r3, #13] +100106c6: 4620 mov r0, r4 +100106c8: 2b05 cmp r3, #5 +100106ca: d81d bhi.n 10010708 +100106cc: f7ff fc0c bl 1000fee8 +100106d0: e7e9 b.n 100106a6 +100106d2: 2a08 cmp r2, #8 +100106d4: d109 bne.n 100106ea +100106d6: 7b5b ldrb r3, [r3, #13] +100106d8: 4620 mov r0, r4 +100106da: 2b01 cmp r3, #1 +100106dc: d802 bhi.n 100106e4 +100106de: f7ff fb17 bl 1000fd10 +100106e2: e7e0 b.n 100106a6 +100106e4: f7ff fb27 bl 1000fd36 +100106e8: e7dd b.n 100106a6 +100106ea: 2a05 cmp r2, #5 +100106ec: d103 bne.n 100106f6 +100106ee: 4620 mov r0, r4 +100106f0: f7ff feb2 bl 10010458 +100106f4: e7d7 b.n 100106a6 +100106f6: 2a04 cmp r2, #4 +100106f8: d109 bne.n 1001070e +100106fa: 7b5b ldrb r3, [r3, #13] +100106fc: 4620 mov r0, r4 +100106fe: 2b08 cmp r3, #8 +10010700: d802 bhi.n 10010708 +10010702: f7ff fba7 bl 1000fe54 +10010706: e7ce b.n 100106a6 +10010708: f7ff fefc bl 10010504 +1001070c: e7d4 b.n 100106b8 +1001070e: 2a03 cmp r2, #3 +10010710: d1c9 bne.n 100106a6 +10010712: 7b5b ldrb r3, [r3, #13] +10010714: 4620 mov r0, r4 +10010716: 2b01 cmp r3, #1 +10010718: d8cf bhi.n 100106ba +1001071a: f7ff faa7 bl 1000fc6c +1001071e: e7c2 b.n 100106a6 +10010720: 1004b198 .word 0x1004b198 + +10010724 : +10010724: b573 push {r0, r1, r4, r5, r6, lr} +10010726: 4605 mov r5, r0 +10010728: 6a04 ldr r4, [r0, #32] +1001072a: 210b movs r1, #11 +1001072c: 4620 mov r0, r4 +1001072e: f7ff f925 bl 1000f97c +10010732: 2203 movs r2, #3 +10010734: 6a29 ldr r1, [r5, #32] +10010736: 4628 mov r0, r5 +10010738: f7ff f97e bl 1000fa38 +1001073c: 4606 mov r6, r0 +1001073e: bb40 cbnz r0, 10010792 +10010740: 2201 movs r2, #1 +10010742: 2135 movs r1, #53 ; 0x35 +10010744: 4620 mov r0, r4 +10010746: f7ff f921 bl 1000f98c +1001074a: 2107 movs r1, #7 +1001074c: 4620 mov r0, r4 +1001074e: f7ff f92b bl 1000f9a8 +10010752: 2204 movs r2, #4 +10010754: 2136 movs r1, #54 ; 0x36 +10010756: 4620 mov r0, r4 +10010758: f7ff f918 bl 1000f98c +1001075c: 6aa0 ldr r0, [r4, #40] ; 0x28 +1001075e: f7ff f90b bl 1000f978 +10010762: 4601 mov r1, r0 +10010764: 4620 mov r0, r4 +10010766: f7ff f937 bl 1000f9d8 +1001076a: 4620 mov r0, r4 +1001076c: f7ff f94f bl 1000fa0e +10010770: 8b21 ldrh r1, [r4, #24] +10010772: 6920 ldr r0, [r4, #16] +10010774: 31f0 adds r1, #240 ; 0xf0 +10010776: b289 uxth r1, r1 +10010778: f000 fd18 bl 100111ac +1001077c: 9500 str r5, [sp, #0] +1001077e: 2343 movs r3, #67 ; 0x43 +10010780: f104 0228 add.w r2, r4, #40 ; 0x28 +10010784: 6921 ldr r1, [r4, #16] +10010786: 6860 ldr r0, [r4, #4] +10010788: f003 faba bl 10013d00 +1001078c: 6a28 ldr r0, [r5, #32] +1001078e: f7ff fa09 bl 1000fba4 +10010792: 7b63 ldrb r3, [r4, #13] +10010794: 4628 mov r0, r5 +10010796: 3301 adds r3, #1 +10010798: b2db uxtb r3, r3 +1001079a: 2b09 cmp r3, #9 +1001079c: bf98 it ls +1001079e: ebc3 1243 rsbls r2, r3, r3, lsl #5 +100107a2: 7363 strb r3, [r4, #13] +100107a4: bf8c ite hi +100107a6: f242 7310 movwhi r3, #10000 ; 0x2710 +100107aa: eb03 0382 addls.w r3, r3, r2, lsl #2 +100107ae: f44f 72fa mov.w r2, #500 ; 0x1f4 +100107b2: bf9c itt ls +100107b4: 00db lslls r3, r3, #3 +100107b6: b29b uxthls r3, r3 +100107b8: f203 13f3 addw r3, r3, #499 ; 0x1f3 +100107bc: fb93 f3f2 sdiv r3, r3, r2 +100107c0: 8363 strh r3, [r4, #26] +100107c2: f000 fba6 bl 10010f12 +100107c6: 4628 mov r0, r5 +100107c8: 4906 ldr r1, [pc, #24] ; (100107e4 ) +100107ca: f000 fb13 bl 10010df4 +100107ce: 4628 mov r0, r5 +100107d0: 4904 ldr r1, [pc, #16] ; (100107e4 ) +100107d2: f000 fb75 bl 10010ec0 +100107d6: 4628 mov r0, r5 +100107d8: 4902 ldr r1, [pc, #8] ; (100107e4 ) +100107da: f000 fb75 bl 10010ec8 +100107de: 4630 mov r0, r6 +100107e0: b002 add sp, #8 +100107e2: bd70 pop {r4, r5, r6, pc} +100107e4: 10040090 .word 0x10040090 + +100107e8 : +100107e8: b510 push {r4, lr} +100107ea: b198 cbz r0, 10010814 +100107ec: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 +100107f0: 6a04 ldr r4, [r0, #32] +100107f2: f023 0308 bic.w r3, r3, #8 +100107f6: f880 3031 strb.w r3, [r0, #49] ; 0x31 +100107fa: b15c cbz r4, 10010814 +100107fc: 6860 ldr r0, [r4, #4] +100107fe: b118 cbz r0, 10010808 +10010800: f003 fb4a bl 10013e98 +10010804: 2300 movs r3, #0 +10010806: 6063 str r3, [r4, #4] +10010808: 4620 mov r0, r4 +1001080a: e8bd 4010 ldmia.w sp!, {r4, lr} +1001080e: 2100 movs r1, #0 +10010810: f7ff b8b4 b.w 1000f97c +10010814: bd10 pop {r4, pc} + ... + +10010818 : +10010818: b538 push {r3, r4, r5, lr} +1001081a: 4604 mov r4, r0 +1001081c: b910 cbnz r0, 10010824 +1001081e: f06f 000d mvn.w r0, #13 +10010822: bd38 pop {r3, r4, r5, pc} +10010824: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 +10010828: 6a05 ldr r5, [r0, #32] +1001082a: f023 0208 bic.w r2, r3, #8 +1001082e: 069b lsls r3, r3, #26 +10010830: f880 2031 strb.w r2, [r0, #49] ; 0x31 +10010834: d5f3 bpl.n 1001081e +10010836: 8d03 ldrh r3, [r0, #40] ; 0x28 +10010838: f5b3 7f10 cmp.w r3, #576 ; 0x240 +1001083c: d202 bcs.n 10010844 +1001083e: f04f 30ff mov.w r0, #4294967295 +10010842: bd38 pop {r3, r4, r5, pc} +10010844: bb6d cbnz r5, 100108a2 +10010846: 204c movs r0, #76 ; 0x4c +10010848: f004 fc84 bl 10015154 +1001084c: 4605 mov r5, r0 +1001084e: 2800 cmp r0, #0 +10010850: d0f5 beq.n 1001083e +10010852: 6220 str r0, [r4, #32] +10010854: 224c movs r2, #76 ; 0x4c +10010856: 2100 movs r1, #0 +10010858: 4628 mov r0, r5 +1001085a: f00a f9bd bl 1001abd8 +1001085e: f003 fb2f bl 10013ec0 +10010862: 6068 str r0, [r5, #4] +10010864: 2800 cmp r0, #0 +10010866: d0ea beq.n 1001083e +10010868: 7a02 ldrb r2, [r0, #8] +1001086a: 4914 ldr r1, [pc, #80] ; (100108bc ) +1001086c: f042 0224 orr.w r2, r2, #36 ; 0x24 +10010870: 7202 strb r2, [r0, #8] +10010872: 2244 movs r2, #68 ; 0x44 +10010874: f003 f9f2 bl 10013c5c +10010878: 2243 movs r2, #67 ; 0x43 +1001087a: 4910 ldr r1, [pc, #64] ; (100108bc ) +1001087c: 6868 ldr r0, [r5, #4] +1001087e: f003 fadb bl 10013e38 +10010882: 4622 mov r2, r4 +10010884: 490e ldr r1, [pc, #56] ; (100108c0 ) +10010886: 6868 ldr r0, [r5, #4] +10010888: f003 fb02 bl 10013e90 +1001088c: f004 f893 bl 100149b6 +10010890: 64a8 str r0, [r5, #72] ; 0x48 +10010892: 4620 mov r0, r4 +10010894: f7ff f992 bl 1000fbbc +10010898: b148 cbz r0, 100108ae +1001089a: 4620 mov r0, r4 +1001089c: f7ff ffa4 bl 100107e8 +100108a0: e7cd b.n 1001083e +100108a2: 6868 ldr r0, [r5, #4] +100108a4: 2800 cmp r0, #0 +100108a6: d0d5 beq.n 10010854 +100108a8: f003 faf6 bl 10013e98 +100108ac: e7d2 b.n 10010854 +100108ae: f894 3031 ldrb.w r3, [r4, #49] ; 0x31 +100108b2: f043 0308 orr.w r3, r3, #8 +100108b6: f884 3031 strb.w r3, [r4, #49] ; 0x31 +100108ba: bd38 pop {r3, r4, r5, pc} +100108bc: 10040090 .word 0x10040090 +100108c0: 1000ffd1 .word 0x1000ffd1 + +100108c4 : +100108c4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +100108c8: f44f 7688 mov.w r6, #272 ; 0x110 +100108cc: 4604 mov r4, r0 +100108ce: 4688 mov r8, r1 +100108d0: 2500 movs r5, #0 +100108d2: 4346 muls r6, r0 +100108d4: 3610 adds r6, #16 +100108d6: 4f1f ldr r7, [pc, #124] ; (10010954 ) +100108d8: 59eb ldr r3, [r5, r7] +100108da: b153 cbz r3, 100108f2 +100108dc: 197a adds r2, r7, r5 +100108de: 7a11 ldrb r1, [r2, #8] +100108e0: 42a1 cmp r1, r4 +100108e2: d106 bne.n 100108f2 +100108e4: 481c ldr r0, [pc, #112] ; (10010958 ) +100108e6: 6852 ldr r2, [r2, #4] +100108e8: 4641 mov r1, r8 +100108ea: 4430 add r0, r6 +100108ec: 4798 blx r3 +100108ee: 2300 movs r3, #0 +100108f0: 51eb str r3, [r5, r7] +100108f2: 350c adds r5, #12 +100108f4: 2d30 cmp r5, #48 ; 0x30 +100108f6: d1ee bne.n 100108d6 +100108f8: f44f 7188 mov.w r1, #272 ; 0x110 +100108fc: 4b16 ldr r3, [pc, #88] ; (10010958 ) +100108fe: 2200 movs r2, #0 +10010900: 4618 mov r0, r3 +10010902: fb01 3104 mla r1, r1, r4, r3 +10010906: b2d5 uxtb r5, r2 +10010908: 42ac cmp r4, r5 +1001090a: d01c beq.n 10010946 +1001090c: 7a9d ldrb r5, [r3, #10] +1001090e: 2d02 cmp r5, #2 +10010910: d119 bne.n 10010946 +10010912: 7bdf ldrb r7, [r3, #15] +10010914: 7bce ldrb r6, [r1, #15] +10010916: 42b7 cmp r7, r6 +10010918: d115 bne.n 10010946 +1001091a: 2304 movs r3, #4 +1001091c: 73cb strb r3, [r1, #15] +1001091e: f44f 7388 mov.w r3, #272 ; 0x110 +10010922: fb03 0404 mla r4, r3, r4, r0 +10010926: 7be3 ldrb r3, [r4, #15] +10010928: 2b03 cmp r3, #3 +1001092a: d80a bhi.n 10010942 +1001092c: 4d0b ldr r5, [pc, #44] ; (1001095c ) +1001092e: f855 0023 ldr.w r0, [r5, r3, lsl #2] +10010932: f003 fab1 bl 10013e98 +10010936: 2200 movs r2, #0 +10010938: 7be3 ldrb r3, [r4, #15] +1001093a: f845 2023 str.w r2, [r5, r3, lsl #2] +1001093e: 2304 movs r3, #4 +10010940: 73e3 strb r3, [r4, #15] +10010942: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10010946: 3201 adds r2, #1 +10010948: 2a04 cmp r2, #4 +1001094a: f503 7388 add.w r3, r3, #272 ; 0x110 +1001094e: d1da bne.n 10010906 +10010950: e7e5 b.n 1001091e +10010952: bf00 nop +10010954: 1004ad14 .word 0x1004ad14 +10010958: 1004ad4c .word 0x1004ad4c +1001095c: 1004ad04 .word 0x1004ad04 + +10010960 : +10010960: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +10010962: 2200 movs r2, #0 +10010964: 4606 mov r6, r0 +10010966: f240 1111 movw r1, #273 ; 0x111 +1001096a: 4610 mov r0, r2 +1001096c: f000 fb8e bl 1001108c +10010970: 4605 mov r5, r0 +10010972: 2800 cmp r0, #0 +10010974: d051 beq.n 10010a1a +10010976: 6844 ldr r4, [r0, #4] +10010978: 220c movs r2, #12 +1001097a: 2100 movs r1, #0 +1001097c: 4620 mov r0, r4 +1001097e: f00a f92b bl 1001abd8 +10010982: 8930 ldrh r0, [r6, #8] +10010984: f7fe fff0 bl 1000f968 +10010988: 2301 movs r3, #1 +1001098a: 2200 movs r2, #0 +1001098c: 70a3 strb r3, [r4, #2] +1001098e: 7122 strb r2, [r4, #4] +10010990: 7163 strb r3, [r4, #5] +10010992: 8020 strh r0, [r4, #0] +10010994: f104 030c add.w r3, r4, #12 +10010998: f106 020f add.w r2, r6, #15 +1001099c: f103 0e01 add.w lr, r3, #1 +100109a0: 4674 mov r4, lr +100109a2: 1c57 adds r7, r2, #1 +100109a4: 463a mov r2, r7 +100109a6: f917 0b01 ldrsb.w r0, [r7], #1 +100109aa: eba4 010e sub.w r1, r4, lr +100109ae: 282e cmp r0, #46 ; 0x2e +100109b0: b2c9 uxtb r1, r1 +100109b2: d12d bne.n 10010a10 +100109b4: 7019 strb r1, [r3, #0] +100109b6: f992 3000 ldrsb.w r3, [r2] +100109ba: bb3b cbnz r3, 10010a0c +100109bc: 4620 mov r0, r4 +100109be: 2204 movs r2, #4 +100109c0: f800 3b01 strb.w r3, [r0], #1 +100109c4: f44f 7380 mov.w r3, #256 ; 0x100 +100109c8: eb0d 0102 add.w r1, sp, r2 +100109cc: f8ad 3004 strh.w r3, [sp, #4] +100109d0: f8ad 3006 strh.w r3, [sp, #6] +100109d4: f00a f8fc bl 1001abd0 +100109d8: 6869 ldr r1, [r5, #4] +100109da: 3405 adds r4, #5 +100109dc: 1a61 subs r1, r4, r1 +100109de: b289 uxth r1, r1 +100109e0: 4628 mov r0, r5 +100109e2: f000 fbe3 bl 100111ac +100109e6: 7af1 ldrb r1, [r6, #11] +100109e8: 7bf4 ldrb r4, [r6, #15] +100109ea: 4a0d ldr r2, [pc, #52] ; (10010a20 ) +100109ec: 480d ldr r0, [pc, #52] ; (10010a24 ) +100109ee: eb02 0281 add.w r2, r2, r1, lsl #2 +100109f2: f850 0024 ldr.w r0, [r0, r4, lsl #2] +100109f6: 2335 movs r3, #53 ; 0x35 +100109f8: 4629 mov r1, r5 +100109fa: f003 fa02 bl 10013e02 +100109fe: 4604 mov r4, r0 +10010a00: 4628 mov r0, r5 +10010a02: f000 fb20 bl 10011046 +10010a06: 4620 mov r0, r4 +10010a08: b003 add sp, #12 +10010a0a: bdf0 pop {r4, r5, r6, r7, pc} +10010a0c: 4623 mov r3, r4 +10010a0e: e7c5 b.n 1001099c +10010a10: 2800 cmp r0, #0 +10010a12: d0cf beq.n 100109b4 +10010a14: f804 0b01 strb.w r0, [r4], #1 +10010a18: e7c4 b.n 100109a4 +10010a1a: f04f 34ff mov.w r4, #4294967295 +10010a1e: e7f2 b.n 10010a06 +10010a20: 1004ad44 .word 0x1004ad44 +10010a24: 1004ad04 .word 0x1004ad04 + +10010a28 : +10010a28: f44f 7288 mov.w r2, #272 ; 0x110 +10010a2c: 4342 muls r2, r0 +10010a2e: b5f8 push {r3, r4, r5, r6, r7, lr} +10010a30: 4d2a ldr r5, [pc, #168] ; (10010adc ) +10010a32: 4606 mov r6, r0 +10010a34: 18ac adds r4, r5, r2 +10010a36: 7aa3 ldrb r3, [r4, #10] +10010a38: 2b02 cmp r3, #2 +10010a3a: d024 beq.n 10010a86 +10010a3c: 2b03 cmp r3, #3 +10010a3e: d044 beq.n 10010aca +10010a40: 2b01 cmp r3, #1 +10010a42: d149 bne.n 10010ad8 +10010a44: 4f26 ldr r7, [pc, #152] ; (10010ae0 ) +10010a46: 47b8 blx r7 +10010a48: 2300 movs r3, #0 +10010a4a: b280 uxth r0, r0 +10010a4c: 18ea adds r2, r5, r3 +10010a4e: 7a91 ldrb r1, [r2, #10] +10010a50: 2902 cmp r1, #2 +10010a52: d102 bne.n 10010a5a +10010a54: 8912 ldrh r2, [r2, #8] +10010a56: 4282 cmp r2, r0 +10010a58: d0f5 beq.n 10010a46 +10010a5a: f503 7388 add.w r3, r3, #272 ; 0x110 +10010a5e: f5b3 6f88 cmp.w r3, #1088 ; 0x440 +10010a62: d1f3 bne.n 10010a4c +10010a64: f44f 7388 mov.w r3, #272 ; 0x110 +10010a68: fb03 5506 mla r5, r3, r6, r5 +10010a6c: 2302 movs r3, #2 +10010a6e: 2201 movs r2, #1 +10010a70: 72ab strb r3, [r5, #10] +10010a72: 2300 movs r3, #0 +10010a74: 8128 strh r0, [r5, #8] +10010a76: 72eb strb r3, [r5, #11] +10010a78: 732a strb r2, [r5, #12] +10010a7a: 736b strb r3, [r5, #13] +10010a7c: 4620 mov r0, r4 +10010a7e: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +10010a82: f7ff bf6d b.w 10010960 +10010a86: 7b23 ldrb r3, [r4, #12] +10010a88: 3b01 subs r3, #1 +10010a8a: b2db uxtb r3, r3 +10010a8c: 7323 strb r3, [r4, #12] +10010a8e: bb1b cbnz r3, 10010ad8 +10010a90: 7b63 ldrb r3, [r4, #13] +10010a92: 3301 adds r3, #1 +10010a94: b2db uxtb r3, r3 +10010a96: 2b04 cmp r3, #4 +10010a98: 7363 strb r3, [r4, #13] +10010a9a: d114 bne.n 10010ac6 +10010a9c: 7ae3 ldrb r3, [r4, #11] +10010a9e: b93b cbnz r3, 10010ab0 +10010aa0: 4a10 ldr r2, [pc, #64] ; (10010ae4 ) +10010aa2: 6852 ldr r2, [r2, #4] +10010aa4: b122 cbz r2, 10010ab0 +10010aa6: 2201 movs r2, #1 +10010aa8: 7363 strb r3, [r4, #13] +10010aaa: 72e2 strb r2, [r4, #11] +10010aac: 7322 strb r2, [r4, #12] +10010aae: bdf8 pop {r3, r4, r5, r6, r7, pc} +10010ab0: 2100 movs r1, #0 +10010ab2: 4630 mov r0, r6 +10010ab4: f7ff ff06 bl 100108c4 +10010ab8: f44f 7388 mov.w r3, #272 ; 0x110 +10010abc: fb03 5506 mla r5, r3, r6, r5 +10010ac0: 2300 movs r3, #0 +10010ac2: 72ab strb r3, [r5, #10] +10010ac4: bdf8 pop {r3, r4, r5, r6, r7, pc} +10010ac6: 7323 strb r3, [r4, #12] +10010ac8: e7d8 b.n 10010a7c +10010aca: 58ab ldr r3, [r5, r2] +10010acc: 2b00 cmp r3, #0 +10010ace: d0f3 beq.n 10010ab8 +10010ad0: 3b01 subs r3, #1 +10010ad2: 50ab str r3, [r5, r2] +10010ad4: 2b00 cmp r3, #0 +10010ad6: d0ef beq.n 10010ab8 +10010ad8: bdf8 pop {r3, r4, r5, r6, r7, pc} +10010ada: bf00 nop +10010adc: 1004ad4c .word 0x1004ad4c +10010ae0: 0000f585 .word 0x0000f585 +10010ae4: 1004ad44 .word 0x1004ad44 + +10010ae8 : +10010ae8: b508 push {r3, lr} +10010aea: 4b05 ldr r3, [pc, #20] ; (10010b00 ) +10010aec: 4a05 ldr r2, [pc, #20] ; (10010b04 ) +10010aee: f023 0303 bic.w r3, r3, #3 +10010af2: 4805 ldr r0, [pc, #20] ; (10010b08 ) +10010af4: 6013 str r3, [r2, #0] +10010af6: f7fe fc88 bl 1000f40a +10010afa: 4b04 ldr r3, [pc, #16] ; (10010b0c ) +10010afc: 6018 str r0, [r3, #0] +10010afe: bd08 pop {r3, pc} +10010b00: 1004ab03 .word 0x1004ab03 +10010b04: 1004aafc .word 0x1004aafc +10010b08: 10040098 .word 0x10040098 +10010b0c: 1004ad44 .word 0x1004ad44 + +10010b10 : +10010b10: 2801 cmp r0, #1 +10010b12: d804 bhi.n 10010b1e +10010b14: 4b04 ldr r3, [pc, #16] ; (10010b28 ) +10010b16: b119 cbz r1, 10010b20 +10010b18: 680a ldr r2, [r1, #0] +10010b1a: f843 2020 str.w r2, [r3, r0, lsl #2] +10010b1e: 4770 bx lr +10010b20: 4a02 ldr r2, [pc, #8] ; (10010b2c ) +10010b22: 6812 ldr r2, [r2, #0] +10010b24: e7f9 b.n 10010b1a +10010b26: bf00 nop +10010b28: 1004ad44 .word 0x1004ad44 +10010b2c: 10040090 .word 0x10040090 + +10010b30 : +10010b30: b508 push {r3, lr} +10010b32: 2000 movs r0, #0 +10010b34: f7ff ff78 bl 10010a28 +10010b38: 2001 movs r0, #1 +10010b3a: f7ff ff75 bl 10010a28 +10010b3e: 2002 movs r0, #2 +10010b40: f7ff ff72 bl 10010a28 +10010b44: e8bd 4008 ldmia.w sp!, {r3, lr} +10010b48: 2003 movs r0, #3 +10010b4a: f7ff bf6d b.w 10010a28 + +10010b4e : +10010b4e: b508 push {r3, lr} +10010b50: f003 fee8 bl 10014924 +10010b54: f000 f94c bl 10010df0 +10010b58: f7fd fe10 bl 1000e77c +10010b5c: f002 ffa8 bl 10013ab0 +10010b60: f000 fc68 bl 10011434 +10010b64: f7fe f842 bl 1000ebec +10010b68: f7ff ffbe bl 10010ae8 +10010b6c: e8bd 4008 ldmia.w sp!, {r3, lr} +10010b70: f000 b866 b.w 10010c40 + +10010b74 : +10010b74: 4b15 ldr r3, [pc, #84] ; (10010bcc ) +10010b76: b570 push {r4, r5, r6, lr} +10010b78: 4604 mov r4, r0 +10010b7a: 8b18 ldrh r0, [r3, #24] +10010b7c: 460e mov r6, r1 +10010b7e: 4615 mov r5, r2 +10010b80: f004 fae8 bl 10015154 +10010b84: b308 cbz r0, 10010bca +10010b86: 2300 movs r3, #0 +10010b88: 4911 ldr r1, [pc, #68] ; (10010bd0 ) +10010b8a: 6003 str r3, [r0, #0] +10010b8c: 680b ldr r3, [r1, #0] +10010b8e: 6086 str r6, [r0, #8] +10010b90: 60c5 str r5, [r0, #12] +10010b92: 6044 str r4, [r0, #4] +10010b94: b90b cbnz r3, 10010b9a +10010b96: 6008 str r0, [r1, #0] +10010b98: bd70 pop {r4, r5, r6, pc} +10010b9a: 685a ldr r2, [r3, #4] +10010b9c: 4294 cmp r4, r2 +10010b9e: d207 bcs.n 10010bb0 +10010ba0: 1b12 subs r2, r2, r4 +10010ba2: 605a str r2, [r3, #4] +10010ba4: 6003 str r3, [r0, #0] +10010ba6: e7f6 b.n 10010b96 +10010ba8: 6854 ldr r4, [r2, #4] +10010baa: 42a1 cmp r1, r4 +10010bac: d30a bcc.n 10010bc4 +10010bae: 4613 mov r3, r2 +10010bb0: 685a ldr r2, [r3, #4] +10010bb2: 6841 ldr r1, [r0, #4] +10010bb4: 1a89 subs r1, r1, r2 +10010bb6: 681a ldr r2, [r3, #0] +10010bb8: 6041 str r1, [r0, #4] +10010bba: 2a00 cmp r2, #0 +10010bbc: d1f4 bne.n 10010ba8 +10010bbe: 6002 str r2, [r0, #0] +10010bc0: 6018 str r0, [r3, #0] +10010bc2: bd70 pop {r4, r5, r6, pc} +10010bc4: 1a61 subs r1, r4, r1 +10010bc6: 6051 str r1, [r2, #4] +10010bc8: e7f9 b.n 10010bbe +10010bca: bd70 pop {r4, r5, r6, pc} +10010bcc: 100400a8 .word 0x100400a8 +10010bd0: 1004b18c .word 0x1004b18c + +10010bd4 : +10010bd4: 4b08 ldr r3, [pc, #32] ; (10010bf8 ) +10010bd6: 681a ldr r2, [r3, #0] +10010bd8: b962 cbnz r2, 10010bf4 +10010bda: 4a08 ldr r2, [pc, #32] ; (10010bfc ) +10010bdc: 6812 ldr r2, [r2, #0] +10010bde: b912 cbnz r2, 10010be6 +10010be0: 4a07 ldr r2, [pc, #28] ; (10010c00 ) +10010be2: 6812 ldr r2, [r2, #0] +10010be4: b132 cbz r2, 10010bf4 +10010be6: 2201 movs r2, #1 +10010be8: 4906 ldr r1, [pc, #24] ; (10010c04 ) +10010bea: 601a str r2, [r3, #0] +10010bec: 20fa movs r0, #250 ; 0xfa +10010bee: 2200 movs r2, #0 +10010bf0: f7ff bfc0 b.w 10010b74 +10010bf4: 4770 bx lr +10010bf6: bf00 nop +10010bf8: 1004b190 .word 0x1004b190 +10010bfc: 1004b1a4 .word 0x1004b1a4 +10010c00: 1004b1c0 .word 0x1004b1c0 +10010c04: 10010c09 .word 0x10010c09 + +10010c08 : +10010c08: b508 push {r3, lr} +10010c0a: f001 f833 bl 10011c74 +10010c0e: 4b08 ldr r3, [pc, #32] ; (10010c30 ) +10010c10: 681b ldr r3, [r3, #0] +10010c12: b913 cbnz r3, 10010c1a +10010c14: 4b07 ldr r3, [pc, #28] ; (10010c34 ) +10010c16: 681b ldr r3, [r3, #0] +10010c18: b133 cbz r3, 10010c28 +10010c1a: e8bd 4008 ldmia.w sp!, {r3, lr} +10010c1e: 2200 movs r2, #0 +10010c20: 4905 ldr r1, [pc, #20] ; (10010c38 ) +10010c22: 20fa movs r0, #250 ; 0xfa +10010c24: f7ff bfa6 b.w 10010b74 +10010c28: 4a04 ldr r2, [pc, #16] ; (10010c3c ) +10010c2a: 6013 str r3, [r2, #0] +10010c2c: bd08 pop {r3, pc} +10010c2e: bf00 nop +10010c30: 1004b1a4 .word 0x1004b1a4 +10010c34: 1004b1c0 .word 0x1004b1c0 +10010c38: 10010c09 .word 0x10010c09 +10010c3c: 1004b190 .word 0x1004b190 + +10010c40 : +10010c40: b508 push {r3, lr} +10010c42: 2200 movs r2, #0 +10010c44: 4911 ldr r1, [pc, #68] ; (10010c8c ) +10010c46: f44f 707a mov.w r0, #1000 ; 0x3e8 +10010c4a: f7ff ff93 bl 10010b74 +10010c4e: 2200 movs r2, #0 +10010c50: 490f ldr r1, [pc, #60] ; (10010c90 ) +10010c52: f241 3088 movw r0, #5000 ; 0x1388 +10010c56: f7ff ff8d bl 10010b74 +10010c5a: 2200 movs r2, #0 +10010c5c: 490d ldr r1, [pc, #52] ; (10010c94 ) +10010c5e: f64e 2060 movw r0, #60000 ; 0xea60 +10010c62: f7ff ff87 bl 10010b74 +10010c66: 2200 movs r2, #0 +10010c68: 490b ldr r1, [pc, #44] ; (10010c98 ) +10010c6a: f44f 70fa mov.w r0, #500 ; 0x1f4 +10010c6e: f7ff ff81 bl 10010b74 +10010c72: 2200 movs r2, #0 +10010c74: 4909 ldr r1, [pc, #36] ; (10010c9c ) +10010c76: 2064 movs r0, #100 ; 0x64 +10010c78: f7ff ff7c bl 10010b74 +10010c7c: e8bd 4008 ldmia.w sp!, {r3, lr} +10010c80: 2200 movs r2, #0 +10010c82: 4907 ldr r1, [pc, #28] ; (10010ca0 ) +10010c84: f44f 707a mov.w r0, #1000 ; 0x3e8 +10010c88: f7ff bf74 b.w 10010b74 +10010c8c: 10010d2d .word 0x10010d2d +10010c90: 10010d11 .word 0x10010d11 +10010c94: 10010cf5 .word 0x10010cf5 +10010c98: 10010cd9 .word 0x10010cd9 +10010c9c: 10010cc1 .word 0x10010cc1 +10010ca0: 10010ca5 .word 0x10010ca5 + +10010ca4 : +10010ca4: b508 push {r3, lr} +10010ca6: f7ff ff43 bl 10010b30 +10010caa: e8bd 4008 ldmia.w sp!, {r3, lr} +10010cae: 2200 movs r2, #0 +10010cb0: 4902 ldr r1, [pc, #8] ; (10010cbc ) +10010cb2: f44f 707a mov.w r0, #1000 ; 0x3e8 +10010cb6: f7ff bf5d b.w 10010b74 +10010cba: bf00 nop +10010cbc: 10010ca5 .word 0x10010ca5 + +10010cc0 : +10010cc0: b508 push {r3, lr} +10010cc2: f7fe f867 bl 1000ed94 +10010cc6: e8bd 4008 ldmia.w sp!, {r3, lr} +10010cca: 2200 movs r2, #0 +10010ccc: 4901 ldr r1, [pc, #4] ; (10010cd4 ) +10010cce: 2064 movs r0, #100 ; 0x64 +10010cd0: f7ff bf50 b.w 10010b74 +10010cd4: 10010cc1 .word 0x10010cc1 + +10010cd8 : +10010cd8: b508 push {r3, lr} +10010cda: f7ff fcd7 bl 1001068c +10010cde: e8bd 4008 ldmia.w sp!, {r3, lr} +10010ce2: 2200 movs r2, #0 +10010ce4: 4902 ldr r1, [pc, #8] ; (10010cf0 ) +10010ce6: f44f 70fa mov.w r0, #500 ; 0x1f4 +10010cea: f7ff bf43 b.w 10010b74 +10010cee: bf00 nop +10010cf0: 10010cd9 .word 0x10010cd9 + +10010cf4 : +10010cf4: b508 push {r3, lr} +10010cf6: f7ff fc79 bl 100105ec +10010cfa: e8bd 4008 ldmia.w sp!, {r3, lr} +10010cfe: 2200 movs r2, #0 +10010d00: 4902 ldr r1, [pc, #8] ; (10010d0c ) +10010d02: f64e 2060 movw r0, #60000 ; 0xea60 +10010d06: f7ff bf35 b.w 10010b74 +10010d0a: bf00 nop +10010d0c: 10010cf5 .word 0x10010cf5 + +10010d10 : +10010d10: b508 push {r3, lr} +10010d12: f003 f981 bl 10014018 +10010d16: e8bd 4008 ldmia.w sp!, {r3, lr} +10010d1a: 2200 movs r2, #0 +10010d1c: 4902 ldr r1, [pc, #8] ; (10010d28 ) +10010d1e: f241 3088 movw r0, #5000 ; 0x1388 +10010d22: f7ff bf27 b.w 10010b74 +10010d26: bf00 nop +10010d28: 10010d11 .word 0x10010d11 + +10010d2c : +10010d2c: b508 push {r3, lr} +10010d2e: f7fe fbff bl 1000f530 +10010d32: e8bd 4008 ldmia.w sp!, {r3, lr} +10010d36: 2200 movs r2, #0 +10010d38: 4902 ldr r1, [pc, #8] ; (10010d44 ) +10010d3a: f44f 707a mov.w r0, #1000 ; 0x3e8 +10010d3e: f7ff bf19 b.w 10010b74 +10010d42: bf00 nop +10010d44: 10010d2d .word 0x10010d2d + +10010d48 : +10010d48: b470 push {r4, r5, r6} +10010d4a: 4c10 ldr r4, [pc, #64] ; (10010d8c ) +10010d4c: 6823 ldr r3, [r4, #0] +10010d4e: b1d3 cbz r3, 10010d86 +10010d50: 2500 movs r5, #0 +10010d52: 689a ldr r2, [r3, #8] +10010d54: 4282 cmp r2, r0 +10010d56: 681a ldr r2, [r3, #0] +10010d58: d112 bne.n 10010d80 +10010d5a: 68de ldr r6, [r3, #12] +10010d5c: 428e cmp r6, r1 +10010d5e: d10f bne.n 10010d80 +10010d60: b965 cbnz r5, 10010d7c +10010d62: 6022 str r2, [r4, #0] +10010d64: 681a ldr r2, [r3, #0] +10010d66: b11a cbz r2, 10010d70 +10010d68: 6851 ldr r1, [r2, #4] +10010d6a: 6858 ldr r0, [r3, #4] +10010d6c: 4401 add r1, r0 +10010d6e: 6051 str r1, [r2, #4] +10010d70: 4618 mov r0, r3 +10010d72: bc70 pop {r4, r5, r6} +10010d74: f004 ba8a b.w 1001528c +10010d78: 4613 mov r3, r2 +10010d7a: e7ea b.n 10010d52 +10010d7c: 602a str r2, [r5, #0] +10010d7e: e7f1 b.n 10010d64 +10010d80: 461d mov r5, r3 +10010d82: 2a00 cmp r2, #0 +10010d84: d1f8 bne.n 10010d78 +10010d86: bc70 pop {r4, r5, r6} +10010d88: 4770 bx lr +10010d8a: bf00 nop +10010d8c: 1004b18c .word 0x1004b18c + +10010d90 : +10010d90: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10010d94: 4c15 ldr r4, [pc, #84] ; (10010dec ) +10010d96: 4606 mov r6, r0 +10010d98: 460f mov r7, r1 +10010d9a: 46a0 mov r8, r4 +10010d9c: 6822 ldr r2, [r4, #0] +10010d9e: b92a cbnz r2, 10010dac +10010da0: 4639 mov r1, r7 +10010da2: 4630 mov r0, r6 +10010da4: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10010da8: f003 bd90 b.w 100148cc +10010dac: 6852 ldr r2, [r2, #4] +10010dae: b972 cbnz r2, 10010dce +10010db0: f8d8 0000 ldr.w r0, [r8] +10010db4: 6803 ldr r3, [r0, #0] +10010db6: 6885 ldr r5, [r0, #8] +10010db8: f8c8 3000 str.w r3, [r8] +10010dbc: f8d0 900c ldr.w r9, [r0, #12] +10010dc0: f004 fa64 bl 1001528c +10010dc4: 2d00 cmp r5, #0 +10010dc6: d0e9 beq.n 10010d9c +10010dc8: 4648 mov r0, r9 +10010dca: 47a8 blx r5 +10010dcc: e7e6 b.n 10010d9c +10010dce: 4639 mov r1, r7 +10010dd0: 4630 mov r0, r6 +10010dd2: f003 fd7b bl 100148cc +10010dd6: 1c43 adds r3, r0, #1 +10010dd8: d0ea beq.n 10010db0 +10010dda: 6822 ldr r2, [r4, #0] +10010ddc: 6853 ldr r3, [r2, #4] +10010dde: 4298 cmp r0, r3 +10010de0: bf2c ite cs +10010de2: 2300 movcs r3, #0 +10010de4: 1a1b subcc r3, r3, r0 +10010de6: 6053 str r3, [r2, #4] +10010de8: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +10010dec: 1004b18c .word 0x1004b18c + +10010df0 : +10010df0: 4770 bx lr + ... + +10010df4 : +10010df4: b570 push {r4, r5, r6, lr} +10010df6: 4605 mov r5, r0 +10010df8: 460c mov r4, r1 +10010dfa: b151 cbz r1, 10010e12 +10010dfc: 680a ldr r2, [r1, #0] +10010dfe: 6843 ldr r3, [r0, #4] +10010e00: 429a cmp r2, r3 +10010e02: d005 beq.n 10010e10 +10010e04: 4b0d ldr r3, [pc, #52] ; (10010e3c ) +10010e06: 6818 ldr r0, [r3, #0] +10010e08: b928 cbnz r0, 10010e16 +10010e0a: 4b0d ldr r3, [pc, #52] ; (10010e40 ) +10010e0c: 681b ldr r3, [r3, #0] +10010e0e: b95b cbnz r3, 10010e28 +10010e10: 6824 ldr r4, [r4, #0] +10010e12: 606c str r4, [r5, #4] +10010e14: bd70 pop {r4, r5, r6, pc} +10010e16: 6802 ldr r2, [r0, #0] +10010e18: 686b ldr r3, [r5, #4] +10010e1a: 68c6 ldr r6, [r0, #12] +10010e1c: 429a cmp r2, r3 +10010e1e: d101 bne.n 10010e24 +10010e20: f000 ff86 bl 10011d30 +10010e24: 4630 mov r0, r6 +10010e26: e7ef b.n 10010e08 +10010e28: 681a ldr r2, [r3, #0] +10010e2a: b122 cbz r2, 10010e36 +10010e2c: 6869 ldr r1, [r5, #4] +10010e2e: 428a cmp r2, r1 +10010e30: bf04 itt eq +10010e32: 6822 ldreq r2, [r4, #0] +10010e34: 601a streq r2, [r3, #0] +10010e36: 68db ldr r3, [r3, #12] +10010e38: e7e9 b.n 10010e0e +10010e3a: bf00 nop +10010e3c: 1004b1a4 .word 0x1004b1a4 +10010e40: 1004b1b0 .word 0x1004b1b0 + +10010e44 : +10010e44: b570 push {r4, r5, r6, lr} +10010e46: 4615 mov r5, r2 +10010e48: 4606 mov r6, r0 +10010e4a: 461c mov r4, r3 +10010e4c: f7ff ffd2 bl 10010df4 +10010e50: b105 cbz r5, 10010e54 +10010e52: 682d ldr r5, [r5, #0] +10010e54: 60b5 str r5, [r6, #8] +10010e56: b104 cbz r4, 10010e5a +10010e58: 6824 ldr r4, [r4, #0] +10010e5a: 60f4 str r4, [r6, #12] +10010e5c: bd70 pop {r4, r5, r6, pc} + ... + +10010e60 : +10010e60: b5f8 push {r3, r4, r5, r6, r7, lr} +10010e62: 2500 movs r5, #0 +10010e64: 4604 mov r4, r0 +10010e66: 9e06 ldr r6, [sp, #24] +10010e68: 4f13 ldr r7, [pc, #76] ; (10010eb8 ) +10010e6a: 61c6 str r6, [r0, #28] +10010e6c: 783e ldrb r6, [r7, #0] +10010e6e: 6045 str r5, [r0, #4] +10010e70: f106 0e01 add.w lr, r6, #1 +10010e74: f880 6034 strb.w r6, [r0, #52] ; 0x34 +10010e78: 9e08 ldr r6, [sp, #32] +10010e7a: 6085 str r5, [r0, #8] +10010e7c: 60c5 str r5, [r0, #12] +10010e7e: f880 5031 strb.w r5, [r0, #49] ; 0x31 +10010e82: 6205 str r5, [r0, #32] +10010e84: 6385 str r5, [r0, #56] ; 0x38 +10010e86: 6106 str r6, [r0, #16] +10010e88: f887 e000 strb.w lr, [r7] +10010e8c: f7ff ffda bl 10010e44 +10010e90: 4620 mov r0, r4 +10010e92: 9b07 ldr r3, [sp, #28] +10010e94: 4798 blx r3 +10010e96: b960 cbnz r0, 10010eb2 +10010e98: 4b08 ldr r3, [pc, #32] ; (10010ebc ) +10010e9a: 681a ldr r2, [r3, #0] +10010e9c: 6022 str r2, [r4, #0] +10010e9e: 601c str r4, [r3, #0] +10010ea0: f994 3031 ldrsb.w r3, [r4, #49] ; 0x31 +10010ea4: 42ab cmp r3, r5 +10010ea6: da02 bge.n 10010eae +10010ea8: 4620 mov r0, r4 +10010eaa: f7fd feef bl 1000ec8c +10010eae: 4620 mov r0, r4 +10010eb0: bdf8 pop {r3, r4, r5, r6, r7, pc} +10010eb2: 462c mov r4, r5 +10010eb4: e7fb b.n 10010eae +10010eb6: bf00 nop +10010eb8: 1004b19c .word 0x1004b19c +10010ebc: 1004b198 .word 0x1004b198 + +10010ec0 : +10010ec0: b101 cbz r1, 10010ec4 +10010ec2: 6809 ldr r1, [r1, #0] +10010ec4: 60c1 str r1, [r0, #12] +10010ec6: 4770 bx lr + +10010ec8 : +10010ec8: b101 cbz r1, 10010ecc +10010eca: 6809 ldr r1, [r1, #0] +10010ecc: 6081 str r1, [r0, #8] +10010ece: 4770 bx lr + +10010ed0 : +10010ed0: 4b01 ldr r3, [pc, #4] ; (10010ed8 ) +10010ed2: 6018 str r0, [r3, #0] +10010ed4: 4770 bx lr +10010ed6: bf00 nop +10010ed8: 1004b194 .word 0x1004b194 + +10010edc : +10010edc: b510 push {r4, lr} +10010ede: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 +10010ee2: 4604 mov r4, r0 +10010ee4: 07d9 lsls r1, r3, #31 +10010ee6: d413 bmi.n 10010f10 +10010ee8: f043 0201 orr.w r2, r3, #1 +10010eec: f880 2031 strb.w r2, [r0, #49] ; 0x31 +10010ef0: 06da lsls r2, r3, #27 +10010ef2: d50d bpl.n 10010f10 +10010ef4: 069b lsls r3, r3, #26 +10010ef6: d502 bpl.n 10010efe +10010ef8: 1d01 adds r1, r0, #4 +10010efa: f003 f8c1 bl 10014080 +10010efe: f994 3031 ldrsb.w r3, [r4, #49] ; 0x31 +10010f02: 2b00 cmp r3, #0 +10010f04: da04 bge.n 10010f10 +10010f06: 4620 mov r0, r4 +10010f08: e8bd 4010 ldmia.w sp!, {r4, lr} +10010f0c: f7fd be7c b.w 1000ec08 +10010f10: bd10 pop {r4, pc} + +10010f12 : +10010f12: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 +10010f16: 07d9 lsls r1, r3, #31 +10010f18: d507 bpl.n 10010f2a +10010f1a: f023 0101 bic.w r1, r3, #1 +10010f1e: 069b lsls r3, r3, #26 +10010f20: f880 1031 strb.w r1, [r0, #49] ; 0x31 +10010f24: d501 bpl.n 10010f2a +10010f26: f003 b897 b.w 10014058 +10010f2a: 4770 bx lr + +10010f2c : +10010f2c: b510 push {r4, lr} +10010f2e: f003 fd3b bl 100149a8 +10010f32: 2200 movs r2, #0 +10010f34: 4b08 ldr r3, [pc, #32] ; (10010f58 ) +10010f36: 701a strb r2, [r3, #0] +10010f38: f003 fd3b bl 100149b2 +10010f3c: 4b07 ldr r3, [pc, #28] ; (10010f5c ) +10010f3e: 681c ldr r4, [r3, #0] +10010f40: b904 cbnz r4, 10010f44 +10010f42: bd10 pop {r4, pc} +10010f44: 6fa0 ldr r0, [r4, #120] ; 0x78 +10010f46: b120 cbz r0, 10010f52 +10010f48: f000 fb6e bl 10011628 +10010f4c: 2300 movs r3, #0 +10010f4e: 67a3 str r3, [r4, #120] ; 0x78 +10010f50: bd10 pop {r4, pc} +10010f52: 68e4 ldr r4, [r4, #12] +10010f54: e7f4 b.n 10010f40 +10010f56: bf00 nop +10010f58: 1004b19d .word 0x1004b19d +10010f5c: 1004b1a4 .word 0x1004b1a4 + +10010f60 : +10010f60: b538 push {r3, r4, r5, lr} +10010f62: f003 fd21 bl 100149a8 +10010f66: 2301 movs r3, #1 +10010f68: 4d0a ldr r5, [pc, #40] ; (10010f94 ) +10010f6a: 782c ldrb r4, [r5, #0] +10010f6c: 702b strb r3, [r5, #0] +10010f6e: b2e4 uxtb r4, r4 +10010f70: f003 fd1f bl 100149b2 +10010f74: b964 cbnz r4, 10010f90 +10010f76: 4622 mov r2, r4 +10010f78: 4621 mov r1, r4 +10010f7a: 4807 ldr r0, [pc, #28] ; (10010f98 ) +10010f7c: f7fd fc68 bl 1000e850 +10010f80: b130 cbz r0, 10010f90 +10010f82: f003 fd11 bl 100149a8 +10010f86: 702c strb r4, [r5, #0] +10010f88: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10010f8c: f003 bd11 b.w 100149b2 +10010f90: bd38 pop {r3, r4, r5, pc} +10010f92: bf00 nop +10010f94: 1004b19d .word 0x1004b19d +10010f98: 10010f2d .word 0x10010f2d + +10010f9c : +10010f9c: b570 push {r4, r5, r6, lr} +10010f9e: 9d04 ldr r5, [sp, #16] +10010fa0: 2803 cmp r0, #3 +10010fa2: d823 bhi.n 10010fec +10010fa4: e8df f000 tbb [pc, r0] +10010fa8: 1c1a021e .word 0x1c1a021e +10010fac: 2022 movs r0, #34 ; 0x22 +10010fae: 3003 adds r0, #3 +10010fb0: f020 0403 bic.w r4, r0, #3 +10010fb4: f8bd 0014 ldrh.w r0, [sp, #20] +10010fb8: 1866 adds r6, r4, r1 +10010fba: 4286 cmp r6, r0 +10010fbc: f04f 0000 mov.w r0, #0 +10010fc0: dc15 bgt.n 10010fee +10010fc2: 6018 str r0, [r3, #0] +10010fc4: b185 cbz r5, 10010fe8 +10010fc6: 442c add r4, r5 +10010fc8: 605c str r4, [r3, #4] +10010fca: 2002 movs r0, #2 +10010fcc: 731a strb r2, [r3, #12] +10010fce: 2201 movs r2, #1 +10010fd0: 7358 strb r0, [r3, #13] +10010fd2: 8119 strh r1, [r3, #8] +10010fd4: 8159 strh r1, [r3, #10] +10010fd6: 81da strh r2, [r3, #14] +10010fd8: 4618 mov r0, r3 +10010fda: bd70 pop {r4, r5, r6, pc} +10010fdc: 200e movs r0, #14 +10010fde: e7e6 b.n 10010fae +10010fe0: 2000 movs r0, #0 +10010fe2: e7e4 b.n 10010fae +10010fe4: 2036 movs r0, #54 ; 0x36 +10010fe6: e7e2 b.n 10010fae +10010fe8: 605d str r5, [r3, #4] +10010fea: e7ee b.n 10010fca +10010fec: 2000 movs r0, #0 +10010fee: bd70 pop {r4, r5, r6, pc} + +10010ff0 : +10010ff0: b510 push {r4, lr} +10010ff2: b1e1 cbz r1, 1001102e +10010ff4: b138 cbz r0, 10011006 +10010ff6: 2900 cmp r1, #0 +10010ff8: da06 bge.n 10011008 +10010ffa: 424a negs r2, r1 +10010ffc: 8943 ldrh r3, [r0, #10] +10010ffe: b292 uxth r2, r2 +10011000: 4293 cmp r3, r2 +10011002: d202 bcs.n 1001100a +10011004: 2001 movs r0, #1 +10011006: bd10 pop {r4, pc} +10011008: b28a uxth r2, r1 +1001100a: 7b04 ldrb r4, [r0, #12] +1001100c: 6843 ldr r3, [r0, #4] +1001100e: b10c cbz r4, 10011014 +10011010: 2c03 cmp r4, #3 +10011012: d10e bne.n 10011032 +10011014: 1a5b subs r3, r3, r1 +10011016: f100 0210 add.w r2, r0, #16 +1001101a: 4293 cmp r3, r2 +1001101c: d3f2 bcc.n 10011004 +1001101e: 6043 str r3, [r0, #4] +10011020: 8943 ldrh r3, [r0, #10] +10011022: b289 uxth r1, r1 +10011024: 440b add r3, r1 +10011026: 8143 strh r3, [r0, #10] +10011028: 8903 ldrh r3, [r0, #8] +1001102a: 4419 add r1, r3 +1001102c: 8101 strh r1, [r0, #8] +1001102e: 2000 movs r0, #0 +10011030: bd10 pop {r4, pc} +10011032: 3c01 subs r4, #1 +10011034: 2c01 cmp r4, #1 +10011036: d8e5 bhi.n 10011004 +10011038: 2900 cmp r1, #0 +1001103a: dae3 bge.n 10011004 +1001103c: 8944 ldrh r4, [r0, #10] +1001103e: 4294 cmp r4, r2 +10011040: d3e0 bcc.n 10011004 +10011042: 1a5b subs r3, r3, r1 +10011044: e7eb b.n 1001101e + +10011046 : +10011046: b5f8 push {r3, r4, r5, r6, r7, lr} +10011048: 4604 mov r4, r0 +1001104a: b1e0 cbz r0, 10011086 +1001104c: 2600 movs r6, #0 +1001104e: b2f7 uxtb r7, r6 +10011050: b90c cbnz r4, 10011056 +10011052: 4638 mov r0, r7 +10011054: bdf8 pop {r3, r4, r5, r6, r7, pc} +10011056: f003 fca7 bl 100149a8 +1001105a: 89e5 ldrh r5, [r4, #14] +1001105c: 3d01 subs r5, #1 +1001105e: b2ad uxth r5, r5 +10011060: 81e5 strh r5, [r4, #14] +10011062: f003 fca6 bl 100149b2 +10011066: 2d00 cmp r5, #0 +10011068: d1f3 bne.n 10011052 +1001106a: 7b63 ldrb r3, [r4, #13] +1001106c: 6825 ldr r5, [r4, #0] +1001106e: 079b lsls r3, r3, #30 +10011070: d505 bpl.n 1001107e +10011072: 6923 ldr r3, [r4, #16] +10011074: 4620 mov r0, r4 +10011076: 4798 blx r3 +10011078: 3601 adds r6, #1 +1001107a: 462c mov r4, r5 +1001107c: e7e7 b.n 1001104e +1001107e: 4620 mov r0, r4 +10011080: f004 f904 bl 1001528c +10011084: e7f8 b.n 10011078 +10011086: 4607 mov r7, r0 +10011088: e7e3 b.n 10011052 + ... + +1001108c : +1001108c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10011090: 460e mov r6, r1 +10011092: 4617 mov r7, r2 +10011094: 2803 cmp r0, #3 +10011096: d846 bhi.n 10011126 +10011098: e8df f000 tbb [pc, r0] +1001109c: 0b09020d .word 0x0b09020d +100110a0: 2522 movs r5, #34 ; 0x22 +100110a2: 2f03 cmp r7, #3 +100110a4: d83f bhi.n 10011126 +100110a6: e8df f007 tbb [pc, r7] +100110aa: 7058 .short 0x7058 +100110ac: 0870 .short 0x0870 +100110ae: 250e movs r5, #14 +100110b0: e7f7 b.n 100110a2 +100110b2: 2500 movs r5, #0 +100110b4: e7f5 b.n 100110a2 +100110b6: 2536 movs r5, #54 ; 0x36 +100110b8: e7f3 b.n 100110a2 +100110ba: 4b3b ldr r3, [pc, #236] ; (100111a8 ) +100110bc: 8bdf ldrh r7, [r3, #30] +100110be: 4638 mov r0, r7 +100110c0: f004 f848 bl 10015154 +100110c4: 4604 mov r4, r0 +100110c6: b920 cbnz r0, 100110d2 +100110c8: f7ff ff4a bl 10010f60 +100110cc: 4620 mov r0, r4 +100110ce: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +100110d2: 2103 movs r1, #3 +100110d4: 1942 adds r2, r0, r5 +100110d6: 3213 adds r2, #19 +100110d8: f022 0203 bic.w r2, r2, #3 +100110dc: 2300 movs r3, #0 +100110de: 6042 str r2, [r0, #4] +100110e0: 2201 movs r2, #1 +100110e2: 440d add r5, r1 +100110e4: f025 0503 bic.w r5, r5, #3 +100110e8: f5c5 75fa rsb r5, r5, #500 ; 0x1f4 +100110ec: 42b5 cmp r5, r6 +100110ee: bfa8 it ge +100110f0: 4635 movge r5, r6 +100110f2: 4681 mov r9, r0 +100110f4: 469a mov sl, r3 +100110f6: 468b mov fp, r1 +100110f8: 4690 mov r8, r2 +100110fa: 8145 strh r5, [r0, #10] +100110fc: 7301 strb r1, [r0, #12] +100110fe: 6003 str r3, [r0, #0] +10011100: 8106 strh r6, [r0, #8] +10011102: 81c2 strh r2, [r0, #14] +10011104: 1b75 subs r5, r6, r5 +10011106: 2d00 cmp r5, #0 +10011108: dc04 bgt.n 10011114 +1001110a: 2301 movs r3, #1 +1001110c: 81e3 strh r3, [r4, #14] +1001110e: 2300 movs r3, #0 +10011110: 7363 strb r3, [r4, #13] +10011112: e7db b.n 100110cc +10011114: 4638 mov r0, r7 +10011116: f004 f81d bl 10015154 +1001111a: b930 cbnz r0, 1001112a +1001111c: f7ff ff20 bl 10010f60 +10011120: 4620 mov r0, r4 +10011122: f7ff ff90 bl 10011046 +10011126: 2400 movs r4, #0 +10011128: e7d0 b.n 100110cc +1001112a: b2aa uxth r2, r5 +1001112c: f5b2 7ffa cmp.w r2, #500 ; 0x1f4 +10011130: f880 b00c strb.w fp, [r0, #12] +10011134: f880 a00d strb.w sl, [r0, #13] +10011138: f8c0 a000 str.w sl, [r0] +1001113c: f8c9 0000 str.w r0, [r9] +10011140: 8102 strh r2, [r0, #8] +10011142: bf28 it cs +10011144: f44f 72fa movcs.w r2, #500 ; 0x1f4 +10011148: f100 0310 add.w r3, r0, #16 +1001114c: 8142 strh r2, [r0, #10] +1001114e: 6043 str r3, [r0, #4] +10011150: f8a0 800e strh.w r8, [r0, #14] +10011154: 1aad subs r5, r5, r2 +10011156: 4681 mov r9, r0 +10011158: e7d5 b.n 10011106 +1001115a: f105 0013 add.w r0, r5, #19 +1001115e: 1cf3 adds r3, r6, #3 +10011160: f023 0303 bic.w r3, r3, #3 +10011164: f020 0003 bic.w r0, r0, #3 +10011168: 4418 add r0, r3 +1001116a: f003 fff3 bl 10015154 +1001116e: 4604 mov r4, r0 +10011170: 2800 cmp r0, #0 +10011172: d0d8 beq.n 10011126 +10011174: 2300 movs r3, #0 +10011176: 4405 add r5, r0 +10011178: 3513 adds r5, #19 +1001117a: f025 0503 bic.w r5, r5, #3 +1001117e: 6045 str r5, [r0, #4] +10011180: 8106 strh r6, [r0, #8] +10011182: 8146 strh r6, [r0, #10] +10011184: 6003 str r3, [r0, #0] +10011186: 7303 strb r3, [r0, #12] +10011188: e7bf b.n 1001110a +1001118a: 4b07 ldr r3, [pc, #28] ; (100111a8 ) +1001118c: 8b98 ldrh r0, [r3, #28] +1001118e: f003 ffe1 bl 10015154 +10011192: 4604 mov r4, r0 +10011194: 2800 cmp r0, #0 +10011196: d0c6 beq.n 10011126 +10011198: 2300 movs r3, #0 +1001119a: 8106 strh r6, [r0, #8] +1001119c: 6043 str r3, [r0, #4] +1001119e: 8146 strh r6, [r0, #10] +100111a0: 6003 str r3, [r0, #0] +100111a2: 7307 strb r7, [r0, #12] +100111a4: e7b1 b.n 1001110a +100111a6: bf00 nop +100111a8: 100400a8 .word 0x100400a8 + +100111ac : +100111ac: 8903 ldrh r3, [r0, #8] +100111ae: b510 push {r4, lr} +100111b0: 428b cmp r3, r1 +100111b2: 4604 mov r4, r0 +100111b4: d90b bls.n 100111ce +100111b6: 1acb subs r3, r1, r3 +100111b8: 8962 ldrh r2, [r4, #10] +100111ba: 6820 ldr r0, [r4, #0] +100111bc: 4291 cmp r1, r2 +100111be: d807 bhi.n 100111d0 +100111c0: 8161 strh r1, [r4, #10] +100111c2: 8121 strh r1, [r4, #8] +100111c4: b108 cbz r0, 100111ca +100111c6: f7ff ff3e bl 10011046 +100111ca: 2300 movs r3, #0 +100111cc: 6023 str r3, [r4, #0] +100111ce: bd10 pop {r4, pc} +100111d0: 1a89 subs r1, r1, r2 +100111d2: 8922 ldrh r2, [r4, #8] +100111d4: b289 uxth r1, r1 +100111d6: 441a add r2, r3 +100111d8: 8122 strh r2, [r4, #8] +100111da: 4604 mov r4, r0 +100111dc: e7ec b.n 100111b8 + +100111de : +100111de: 4603 mov r3, r0 +100111e0: 2200 movs r2, #0 +100111e2: b2d0 uxtb r0, r2 +100111e4: 3201 adds r2, #1 +100111e6: b903 cbnz r3, 100111ea +100111e8: 4770 bx lr +100111ea: 681b ldr r3, [r3, #0] +100111ec: e7f9 b.n 100111e2 + +100111ee : +100111ee: b510 push {r4, lr} +100111f0: 4604 mov r4, r0 +100111f2: b140 cbz r0, 10011206 +100111f4: f003 fbd8 bl 100149a8 +100111f8: 89e3 ldrh r3, [r4, #14] +100111fa: 3301 adds r3, #1 +100111fc: 81e3 strh r3, [r4, #14] +100111fe: e8bd 4010 ldmia.w sp!, {r4, lr} +10011202: f003 bbd6 b.w 100149b2 +10011206: bd10 pop {r4, pc} + +10011208 : +10011208: b510 push {r4, lr} +1001120a: b150 cbz r0, 10011222 +1001120c: b909 cbnz r1, 10011212 +1001120e: bd10 pop {r4, pc} +10011210: 4620 mov r0, r4 +10011212: 8903 ldrh r3, [r0, #8] +10011214: 890a ldrh r2, [r1, #8] +10011216: 6804 ldr r4, [r0, #0] +10011218: 4413 add r3, r2 +1001121a: 8103 strh r3, [r0, #8] +1001121c: 2c00 cmp r4, #0 +1001121e: d1f7 bne.n 10011210 +10011220: 6001 str r1, [r0, #0] +10011222: bd10 pop {r4, pc} + +10011224 : +10011224: b510 push {r4, lr} +10011226: f7ff ffef bl 10011208 +1001122a: e8bd 4010 ldmia.w sp!, {r4, lr} +1001122e: 4608 mov r0, r1 +10011230: f7ff bfdd b.w 100111ee + +10011234 : +10011234: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10011238: 460c mov r4, r1 +1001123a: 4605 mov r5, r0 +1001123c: b918 cbnz r0, 10011246 +1001123e: f06f 000d mvn.w r0, #13 +10011242: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10011246: 2900 cmp r1, #0 +10011248: d0f9 beq.n 1001123e +1001124a: 8902 ldrh r2, [r0, #8] +1001124c: 890b ldrh r3, [r1, #8] +1001124e: 429a cmp r2, r3 +10011250: d3f5 bcc.n 1001123e +10011252: f04f 0800 mov.w r8, #0 +10011256: 4647 mov r7, r8 +10011258: 8963 ldrh r3, [r4, #10] +1001125a: 896e ldrh r6, [r5, #10] +1001125c: eba3 0308 sub.w r3, r3, r8 +10011260: 1bf6 subs r6, r6, r7 +10011262: 429e cmp r6, r3 +10011264: 6861 ldr r1, [r4, #4] +10011266: 6868 ldr r0, [r5, #4] +10011268: bfac ite ge +1001126a: b29e uxthge r6, r3 +1001126c: b2b6 uxthlt r6, r6 +1001126e: 4632 mov r2, r6 +10011270: 4441 add r1, r8 +10011272: 4438 add r0, r7 +10011274: f009 fcac bl 1001abd0 +10011278: 4437 add r7, r6 +1001127a: 8962 ldrh r2, [r4, #10] +1001127c: 4446 add r6, r8 +1001127e: fa1f f886 uxth.w r8, r6 +10011282: 896b ldrh r3, [r5, #10] +10011284: 4542 cmp r2, r8 +10011286: b2bf uxth r7, r7 +10011288: bf9c itt ls +1001128a: 6824 ldrls r4, [r4, #0] +1001128c: f04f 0800 movls.w r8, #0 +10011290: 429f cmp r7, r3 +10011292: d10b bne.n 100112ac +10011294: 682d ldr r5, [r5, #0] +10011296: b945 cbnz r5, 100112aa +10011298: 2c00 cmp r4, #0 +1001129a: d1d0 bne.n 1001123e +1001129c: 4620 mov r0, r4 +1001129e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100112a2: f06f 0005 mvn.w r0, #5 +100112a6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100112aa: 2700 movs r7, #0 +100112ac: b134 cbz r4, 100112bc +100112ae: 8962 ldrh r2, [r4, #10] +100112b0: 8923 ldrh r3, [r4, #8] +100112b2: 429a cmp r2, r3 +100112b4: d102 bne.n 100112bc +100112b6: 6823 ldr r3, [r4, #0] +100112b8: 2b00 cmp r3, #0 +100112ba: d1f2 bne.n 100112a2 +100112bc: 896a ldrh r2, [r5, #10] +100112be: 892b ldrh r3, [r5, #8] +100112c0: 429a cmp r2, r3 +100112c2: d102 bne.n 100112ca +100112c4: 682b ldr r3, [r5, #0] +100112c6: 2b00 cmp r3, #0 +100112c8: d1eb bne.n 100112a2 +100112ca: 2c00 cmp r4, #0 +100112cc: d1c4 bne.n 10011258 +100112ce: e7e5 b.n 1001129c + +100112d0 : +100112d0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +100112d4: 460f mov r7, r1 +100112d6: 4690 mov r8, r2 +100112d8: 4606 mov r6, r0 +100112da: b320 cbz r0, 10011326 +100112dc: b329 cbz r1, 1001132a +100112de: 2500 movs r5, #0 +100112e0: f1b8 0f00 cmp.w r8, #0 +100112e4: d000 beq.n 100112e8 +100112e6: b916 cbnz r6, 100112ee +100112e8: 4628 mov r0, r5 +100112ea: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100112ee: b133 cbz r3, 100112fe +100112f0: 8971 ldrh r1, [r6, #10] +100112f2: 428b cmp r3, r1 +100112f4: d303 bcc.n 100112fe +100112f6: 1a5b subs r3, r3, r1 +100112f8: b29b uxth r3, r3 +100112fa: 6836 ldr r6, [r6, #0] +100112fc: e7f0 b.n 100112e0 +100112fe: 8974 ldrh r4, [r6, #10] +10011300: 6871 ldr r1, [r6, #4] +10011302: 1ae4 subs r4, r4, r3 +10011304: b2a4 uxth r4, r4 +10011306: 4544 cmp r4, r8 +10011308: bf28 it cs +1001130a: 4644 movcs r4, r8 +1001130c: 4419 add r1, r3 +1001130e: 4622 mov r2, r4 +10011310: 1978 adds r0, r7, r5 +10011312: 4425 add r5, r4 +10011314: eba8 0404 sub.w r4, r8, r4 +10011318: f009 fc5a bl 1001abd0 +1001131c: b2ad uxth r5, r5 +1001131e: fa1f f884 uxth.w r8, r4 +10011322: 2300 movs r3, #0 +10011324: e7e9 b.n 100112fa +10011326: 4605 mov r5, r0 +10011328: e7de b.n 100112e8 +1001132a: 460d mov r5, r1 +1001132c: e7dc b.n 100112e8 + +1001132e : +1001132e: b538 push {r3, r4, r5, lr} +10011330: 4604 mov r4, r0 +10011332: 6823 ldr r3, [r4, #0] +10011334: 4608 mov r0, r1 +10011336: b913 cbnz r3, 1001133e +10011338: 4625 mov r5, r4 +1001133a: 4628 mov r0, r5 +1001133c: bd38 pop {r3, r4, r5, pc} +1001133e: 2200 movs r2, #0 +10011340: 8921 ldrh r1, [r4, #8] +10011342: f7ff fea3 bl 1001108c +10011346: 4605 mov r5, r0 +10011348: 2800 cmp r0, #0 +1001134a: d0f5 beq.n 10011338 +1001134c: 4621 mov r1, r4 +1001134e: f7ff ff71 bl 10011234 +10011352: 4620 mov r0, r4 +10011354: f7ff fe77 bl 10011046 +10011358: e7ef b.n 1001133a + ... + +1001135c : +1001135c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10011360: 4607 mov r7, r0 +10011362: 2600 movs r6, #0 +10011364: 6843 ldr r3, [r0, #4] +10011366: 4d19 ldr r5, [pc, #100] ; (100113cc ) +10011368: f893 8009 ldrb.w r8, [r3, #9] +1001136c: 682c ldr r4, [r5, #0] +1001136e: f8df 9060 ldr.w r9, [pc, #96] ; 100113d0 +10011372: f8df a060 ldr.w sl, [pc, #96] ; 100113d4 +10011376: b914 cbnz r4, 1001137e +10011378: 4620 mov r0, r4 +1001137a: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +1001137e: 7c23 ldrb r3, [r4, #16] +10011380: 4543 cmp r3, r8 +10011382: d11e bne.n 100113c2 +10011384: 6823 ldr r3, [r4, #0] +10011386: b11b cbz r3, 10011390 +10011388: f8da 2000 ldr.w r2, [sl] +1001138c: 4293 cmp r3, r2 +1001138e: d118 bne.n 100113c2 +10011390: f8d4 b014 ldr.w fp, [r4, #20] +10011394: f1bb 0f00 cmp.w fp, #0 +10011398: d013 beq.n 100113c2 +1001139a: 464b mov r3, r9 +1001139c: 463a mov r2, r7 +1001139e: 4621 mov r1, r4 +100113a0: 69a0 ldr r0, [r4, #24] +100113a2: 47d8 blx fp +100113a4: b138 cbz r0, 100113b6 +100113a6: b176 cbz r6, 100113c6 +100113a8: 2001 movs r0, #1 +100113aa: 2700 movs r7, #0 +100113ac: 68e3 ldr r3, [r4, #12] +100113ae: 60f3 str r3, [r6, #12] +100113b0: 682b ldr r3, [r5, #0] +100113b2: 602c str r4, [r5, #0] +100113b4: 60e3 str r3, [r4, #12] +100113b6: 68e3 ldr r3, [r4, #12] +100113b8: 4626 mov r6, r4 +100113ba: 2800 cmp r0, #0 +100113bc: d1dd bne.n 1001137a +100113be: 461c mov r4, r3 +100113c0: e7d9 b.n 10011376 +100113c2: 2000 movs r0, #0 +100113c4: e7f7 b.n 100113b6 +100113c6: 2001 movs r0, #1 +100113c8: 4637 mov r7, r6 +100113ca: e7f4 b.n 100113b6 +100113cc: 1004b1a0 .word 0x1004b1a0 +100113d0: 1004aab4 .word 0x1004aab4 +100113d4: 1004aab0 .word 0x1004aab0 + +100113d8 : +100113d8: f06f 0009 mvn.w r0, #9 +100113dc: 4770 bx lr + ... + +100113e0 : +100113e0: b5f0 push {r4, r5, r6, r7, lr} +100113e2: f44f 4380 mov.w r3, #16384 ; 0x4000 +100113e6: f64f 75ff movw r5, #65535 ; 0xffff +100113ea: 4a10 ldr r2, [pc, #64] ; (1001142c ) +100113ec: 4e10 ldr r6, [pc, #64] ; (10011430 ) +100113ee: 8810 ldrh r0, [r2, #0] +100113f0: 42a8 cmp r0, r5 +100113f2: bf08 it eq +100113f4: f44f 4040 moveq.w r0, #49152 ; 0xc000 +100113f8: f04f 0100 mov.w r1, #0 +100113fc: bf1c itt ne +100113fe: 3001 addne r0, #1 +10011400: b280 uxthne r0, r0 +10011402: f856 4021 ldr.w r4, [r6, r1, lsl #2] +10011406: 6824 ldr r4, [r4, #0] +10011408: b924 cbnz r4, 10011414 +1001140a: 3101 adds r1, #1 +1001140c: 2904 cmp r1, #4 +1001140e: d1f8 bne.n 10011402 +10011410: 8010 strh r0, [r2, #0] +10011412: bdf0 pop {r4, r5, r6, r7, pc} +10011414: 8be7 ldrh r7, [r4, #30] +10011416: 4287 cmp r7, r0 +10011418: d106 bne.n 10011428 +1001141a: 3b01 subs r3, #1 +1001141c: b29b uxth r3, r3 +1001141e: 2b00 cmp r3, #0 +10011420: d1e6 bne.n 100113f0 +10011422: 8010 strh r0, [r2, #0] +10011424: 4618 mov r0, r3 +10011426: bdf0 pop {r4, r5, r6, r7, pc} +10011428: 68e4 ldr r4, [r4, #12] +1001142a: e7ed b.n 10011408 +1001142c: 10044edc .word 0x10044edc +10011430: 100400d8 .word 0x100400d8 + +10011434 : +10011434: b508 push {r3, lr} +10011436: 4b04 ldr r3, [pc, #16] ; (10011448 ) +10011438: 4798 blx r3 +1001143a: ea6f 4080 mvn.w r0, r0, lsl #18 +1001143e: ea6f 4090 mvn.w r0, r0, lsr #18 +10011442: 4b02 ldr r3, [pc, #8] ; (1001144c ) +10011444: 8018 strh r0, [r3, #0] +10011446: bd08 pop {r3, pc} +10011448: 0000f585 .word 0x0000f585 +1001144c: 10044edc .word 0x10044edc + +10011450 : +10011450: b5f8 push {r3, r4, r5, r6, r7, lr} +10011452: 6983 ldr r3, [r0, #24] +10011454: 4604 mov r4, r0 +10011456: 460d mov r5, r1 +10011458: 2b00 cmp r3, #0 +1001145a: d133 bne.n 100114c4 +1001145c: 7a03 ldrb r3, [r0, #8] +1001145e: f013 0f04 tst.w r3, #4 +10011462: bf0c ite eq +10011464: 2704 moveq r7, #4 +10011466: 2703 movne r7, #3 +10011468: b91a cbnz r2, 10011472 +1001146a: f7ff ffb9 bl 100113e0 +1001146e: 4602 mov r2, r0 +10011470: b358 cbz r0, 100114ca +10011472: 2100 movs r1, #0 +10011474: f8df e064 ldr.w lr, [pc, #100] ; 100114dc +10011478: f85e 3021 ldr.w r3, [lr, r1, lsl #2] +1001147c: 681b ldr r3, [r3, #0] +1001147e: b97b cbnz r3, 100114a0 +10011480: 3101 adds r1, #1 +10011482: 428f cmp r7, r1 +10011484: d1f8 bne.n 10011478 +10011486: b115 cbz r5, 1001148e +10011488: 682b ldr r3, [r5, #0] +1001148a: b103 cbz r3, 1001148e +1001148c: 6023 str r3, [r4, #0] +1001148e: 4b12 ldr r3, [pc, #72] ; (100114d8 ) +10011490: 83e2 strh r2, [r4, #30] +10011492: 681a ldr r2, [r3, #0] +10011494: 601c str r4, [r3, #0] +10011496: 60e2 str r2, [r4, #12] +10011498: f7ff fb9c bl 10010bd4 +1001149c: 2000 movs r0, #0 +1001149e: bdf8 pop {r3, r4, r5, r6, r7, pc} +100114a0: 8bd8 ldrh r0, [r3, #30] +100114a2: 4290 cmp r0, r2 +100114a4: d10c bne.n 100114c0 +100114a6: 7a20 ldrb r0, [r4, #8] +100114a8: 0746 lsls r6, r0, #29 +100114aa: d502 bpl.n 100114b2 +100114ac: 7a18 ldrb r0, [r3, #8] +100114ae: 0740 lsls r0, r0, #29 +100114b0: d406 bmi.n 100114c0 +100114b2: 681e ldr r6, [r3, #0] +100114b4: b166 cbz r6, 100114d0 +100114b6: b15d cbz r5, 100114d0 +100114b8: 6828 ldr r0, [r5, #0] +100114ba: b148 cbz r0, 100114d0 +100114bc: 4286 cmp r6, r0 +100114be: d007 beq.n 100114d0 +100114c0: 68db ldr r3, [r3, #12] +100114c2: e7dc b.n 1001147e +100114c4: f06f 0005 mvn.w r0, #5 +100114c8: bdf8 pop {r3, r4, r5, r6, r7, pc} +100114ca: f06f 0001 mvn.w r0, #1 +100114ce: bdf8 pop {r3, r4, r5, r6, r7, pc} +100114d0: f06f 0007 mvn.w r0, #7 +100114d4: bdf8 pop {r3, r4, r5, r6, r7, pc} +100114d6: bf00 nop +100114d8: 1004b1ac .word 0x1004b1ac +100114dc: 100400d8 .word 0x100400d8 + +100114e0 : +100114e0: b538 push {r3, r4, r5, lr} +100114e2: 6983 ldr r3, [r0, #24] +100114e4: 4604 mov r4, r0 +100114e6: b10b cbz r3, 100114ec +100114e8: 2000 movs r0, #0 +100114ea: bd38 pop {r3, r4, r5, pc} +100114ec: 7a03 ldrb r3, [r0, #8] +100114ee: 075b lsls r3, r3, #29 +100114f0: d502 bpl.n 100114f8 +100114f2: 4b26 ldr r3, [pc, #152] ; (1001158c ) +100114f4: 681b ldr r3, [r3, #0] +100114f6: bb03 cbnz r3, 1001153a +100114f8: 4b25 ldr r3, [pc, #148] ; (10011590 ) +100114fa: 88d8 ldrh r0, [r3, #6] +100114fc: f003 fe2a bl 10015154 +10011500: 4605 mov r5, r0 +10011502: 2800 cmp r0, #0 +10011504: d0f0 beq.n 100114e8 +10011506: 6923 ldr r3, [r4, #16] +10011508: 8be2 ldrh r2, [r4, #30] +1001150a: 6103 str r3, [r0, #16] +1001150c: 2301 movs r3, #1 +1001150e: 83c2 strh r2, [r0, #30] +10011510: 6183 str r3, [r0, #24] +10011512: 7f23 ldrb r3, [r4, #28] +10011514: 7703 strb r3, [r0, #28] +10011516: 7a23 ldrb r3, [r4, #8] +10011518: f043 0302 orr.w r3, r3, #2 +1001151c: 7203 strb r3, [r0, #8] +1001151e: 7aa3 ldrb r3, [r4, #10] +10011520: 7283 strb r3, [r0, #10] +10011522: 7a63 ldrb r3, [r4, #9] +10011524: 7243 strb r3, [r0, #9] +10011526: 6823 ldr r3, [r4, #0] +10011528: 6003 str r3, [r0, #0] +1001152a: b1fa cbz r2, 1001156c +1001152c: 4a19 ldr r2, [pc, #100] ; (10011594 ) +1001152e: 6813 ldr r3, [r2, #0] +10011530: 429c cmp r4, r3 +10011532: d10c bne.n 1001154e +10011534: 68e3 ldr r3, [r4, #12] +10011536: 6013 str r3, [r2, #0] +10011538: e016 b.n 10011568 +1001153a: 8bd9 ldrh r1, [r3, #30] +1001153c: 8be2 ldrh r2, [r4, #30] +1001153e: 4291 cmp r1, r2 +10011540: d103 bne.n 1001154a +10011542: 6819 ldr r1, [r3, #0] +10011544: 6822 ldr r2, [r4, #0] +10011546: 4291 cmp r1, r2 +10011548: d0ce beq.n 100114e8 +1001154a: 68db ldr r3, [r3, #12] +1001154c: e7d3 b.n 100114f6 +1001154e: 2100 movs r1, #0 +10011550: 4a11 ldr r2, [pc, #68] ; (10011598 ) +10011552: 6013 str r3, [r2, #0] +10011554: b90b cbnz r3, 1001155a +10011556: b139 cbz r1, 10011568 +10011558: e7ed b.n 10011536 +1001155a: 68d8 ldr r0, [r3, #12] +1001155c: 4284 cmp r4, r0 +1001155e: d112 bne.n 10011586 +10011560: b101 cbz r1, 10011564 +10011562: 6013 str r3, [r2, #0] +10011564: 68e2 ldr r2, [r4, #12] +10011566: 60da str r2, [r3, #12] +10011568: 2300 movs r3, #0 +1001156a: 60e3 str r3, [r4, #12] +1001156c: 4620 mov r0, r4 +1001156e: f003 fe8d bl 1001528c +10011572: 4b0a ldr r3, [pc, #40] ; (1001159c ) +10011574: 616b str r3, [r5, #20] +10011576: 4b05 ldr r3, [pc, #20] ; (1001158c ) +10011578: 681a ldr r2, [r3, #0] +1001157a: 601d str r5, [r3, #0] +1001157c: 60ea str r2, [r5, #12] +1001157e: f7ff fb29 bl 10010bd4 +10011582: 4628 mov r0, r5 +10011584: bd38 pop {r3, r4, r5, pc} +10011586: 2101 movs r1, #1 +10011588: 4603 mov r3, r0 +1001158a: e7e3 b.n 10011554 +1001158c: 1004b1b0 .word 0x1004b1b0 +10011590: 100400a8 .word 0x100400a8 +10011594: 1004b1ac .word 0x1004b1ac +10011598: 1004b1bc .word 0x1004b1bc +1001159c: 100113d9 .word 0x100113d9 + +100115a0 : +100115a0: 4602 mov r2, r0 +100115a2: b570 push {r4, r5, r6, lr} +100115a4: f640 3668 movw r6, #2920 ; 0xb68 +100115a8: 8e05 ldrh r5, [r0, #48] ; 0x30 +100115aa: 6b41 ldr r1, [r0, #52] ; 0x34 +100115ac: 6ac4 ldr r4, [r0, #44] ; 0x2c +100115ae: 1a6b subs r3, r5, r1 +100115b0: 1918 adds r0, r3, r4 +100115b2: 8f53 ldrh r3, [r2, #58] ; 0x3a +100115b4: 42b3 cmp r3, r6 +100115b6: bf94 ite ls +100115b8: 1ac3 subls r3, r0, r3 +100115ba: 1b83 subhi r3, r0, r6 +100115bc: 2b00 cmp r3, #0 +100115be: db01 blt.n 100115c4 +100115c0: 8655 strh r5, [r2, #50] ; 0x32 +100115c2: bd70 pop {r4, r5, r6, pc} +100115c4: 2000 movs r0, #0 +100115c6: 1a63 subs r3, r4, r1 +100115c8: 2b00 cmp r3, #0 +100115ca: bfd6 itet le +100115cc: 1b09 suble r1, r1, r4 +100115ce: 8650 strhgt r0, [r2, #50] ; 0x32 +100115d0: 8651 strhle r1, [r2, #50] ; 0x32 +100115d2: bd70 pop {r4, r5, r6, pc} + +100115d4 : +100115d4: 8e03 ldrh r3, [r0, #48] ; 0x30 +100115d6: b510 push {r4, lr} +100115d8: 4419 add r1, r3 +100115da: f241 63d0 movw r3, #5840 ; 0x16d0 +100115de: b289 uxth r1, r1 +100115e0: 4299 cmp r1, r3 +100115e2: bf8c ite hi +100115e4: 8603 strhhi r3, [r0, #48] ; 0x30 +100115e6: 8601 strhls r1, [r0, #48] ; 0x30 +100115e8: 4604 mov r4, r0 +100115ea: f7ff ffd9 bl 100115a0 +100115ee: f240 53b3 movw r3, #1459 ; 0x5b3 +100115f2: 4298 cmp r0, r3 +100115f4: dd0a ble.n 1001160c +100115f6: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +100115fa: 4620 mov r0, r4 +100115fc: f043 0302 orr.w r3, r3, #2 +10011600: f884 3022 strb.w r3, [r4, #34] ; 0x22 +10011604: e8bd 4010 ldmia.w sp!, {r4, lr} +10011608: f001 bfde b.w 100135c8 +1001160c: bd10 pop {r4, pc} + +1001160e : +1001160e: b510 push {r4, lr} +10011610: 4604 mov r4, r0 +10011612: b140 cbz r0, 10011626 +10011614: 6840 ldr r0, [r0, #4] +10011616: b108 cbz r0, 1001161c +10011618: f7ff fd15 bl 10011046 +1001161c: 4620 mov r0, r4 +1001161e: e8bd 4010 ldmia.w sp!, {r4, lr} +10011622: f003 be33 b.w 1001528c +10011626: bd10 pop {r4, pc} + +10011628 : +10011628: b510 push {r4, lr} +1001162a: b900 cbnz r0, 1001162e +1001162c: bd10 pop {r4, pc} +1001162e: 6804 ldr r4, [r0, #0] +10011630: f7ff ffed bl 1001160e +10011634: 4620 mov r0, r4 +10011636: e7f8 b.n 1001162a + +10011638 : +10011638: 7701 strb r1, [r0, #28] +1001163a: 4770 bx lr + +1001163c : +1001163c: b538 push {r3, r4, r5, lr} +1001163e: 4b08 ldr r3, [pc, #32] ; (10011660 ) +10011640: 4605 mov r5, r0 +10011642: 8918 ldrh r0, [r3, #8] +10011644: f003 fd86 bl 10015154 +10011648: 4604 mov r4, r0 +1001164a: b130 cbz r0, 1001165a +1001164c: 2214 movs r2, #20 +1001164e: 4629 mov r1, r5 +10011650: f009 fabe bl 1001abd0 +10011654: 6860 ldr r0, [r4, #4] +10011656: f7ff fdca bl 100111ee +1001165a: 4620 mov r0, r4 +1001165c: bd38 pop {r3, r4, r5, pc} +1001165e: bf00 nop +10011660: 100400a8 .word 0x100400a8 + +10011664 : +10011664: 6101 str r1, [r0, #16] +10011666: 4770 bx lr + +10011668 : +10011668: f8c0 1084 str.w r1, [r0, #132] ; 0x84 +1001166c: 4770 bx lr + +1001166e : +1001166e: f8c0 1080 str.w r1, [r0, #128] ; 0x80 +10011672: 4770 bx lr + +10011674 : +10011674: f8c0 1090 str.w r1, [r0, #144] ; 0x90 +10011678: 4770 bx lr + +1001167a : +1001167a: 6141 str r1, [r0, #20] +1001167c: 4770 bx lr + +1001167e : +1001167e: f8c0 108c str.w r1, [r0, #140] ; 0x8c +10011682: f880 2024 strb.w r2, [r0, #36] ; 0x24 +10011686: 4770 bx lr + +10011688 : +10011688: b538 push {r3, r4, r5, lr} +1001168a: 6983 ldr r3, [r0, #24] +1001168c: 4604 mov r4, r0 +1001168e: 2b01 cmp r3, #1 +10011690: d919 bls.n 100116c6 +10011692: 2b0a cmp r3, #10 +10011694: d017 beq.n 100116c6 +10011696: 6fc0 ldr r0, [r0, #124] ; 0x7c +10011698: b118 cbz r0, 100116a2 +1001169a: f7ff fcd4 bl 10011046 +1001169e: 2300 movs r3, #0 +100116a0: 67e3 str r3, [r4, #124] ; 0x7c +100116a2: 6fa0 ldr r0, [r4, #120] ; 0x78 +100116a4: f7ff ffc0 bl 10011628 +100116a8: 2500 movs r5, #0 +100116aa: f64f 73ff movw r3, #65535 ; 0xffff +100116ae: 6f20 ldr r0, [r4, #112] ; 0x70 +100116b0: 8723 strh r3, [r4, #56] ; 0x38 +100116b2: 67a5 str r5, [r4, #120] ; 0x78 +100116b4: f7ff ffb8 bl 10011628 +100116b8: 6f60 ldr r0, [r4, #116] ; 0x74 +100116ba: f7ff ffb5 bl 10011628 +100116be: 6725 str r5, [r4, #112] ; 0x70 +100116c0: 6765 str r5, [r4, #116] ; 0x74 +100116c2: f8a4 506e strh.w r5, [r4, #110] ; 0x6e +100116c6: bd38 pop {r3, r4, r5, pc} + +100116c8 : +100116c8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100116cc: 4dae ldr r5, [pc, #696] ; (10011988 ) +100116ce: 4faf ldr r7, [pc, #700] ; (1001198c ) +100116d0: 682b ldr r3, [r5, #0] +100116d2: b085 sub sp, #20 +100116d4: 3301 adds r3, #1 +100116d6: 602b str r3, [r5, #0] +100116d8: 783b ldrb r3, [r7, #0] +100116da: f8df 92c0 ldr.w r9, [pc, #704] ; 1001199c +100116de: 3301 adds r3, #1 +100116e0: 703b strb r3, [r7, #0] +100116e2: 9702 str r7, [sp, #8] +100116e4: 4baa ldr r3, [pc, #680] ; (10011990 ) +100116e6: 2600 movs r6, #0 +100116e8: 4698 mov r8, r3 +100116ea: 681c ldr r4, [r3, #0] +100116ec: f8df b2b0 ldr.w fp, [pc, #688] ; 100119a0 +100116f0: b93c cbnz r4, 10011702 +100116f2: 4fa8 ldr r7, [pc, #672] ; (10011994 ) +100116f4: 683e ldr r6, [r7, #0] +100116f6: 2e00 cmp r6, #0 +100116f8: f040 812e bne.w 10011958 +100116fc: b005 add sp, #20 +100116fe: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10011702: 9b02 ldr r3, [sp, #8] +10011704: f894 2025 ldrb.w r2, [r4, #37] ; 0x25 +10011708: 781b ldrb r3, [r3, #0] +1001170a: 429a cmp r2, r3 +1001170c: d105 bne.n 1001171a +1001170e: f8d4 a00c ldr.w sl, [r4, #12] +10011712: 4634 mov r4, r6 +10011714: 4626 mov r6, r4 +10011716: 4654 mov r4, sl +10011718: e7ea b.n 100116f0 +1001171a: 69a0 ldr r0, [r4, #24] +1001171c: f884 3025 strb.w r3, [r4, #37] ; 0x25 +10011720: 2802 cmp r0, #2 +10011722: f894 104a ldrb.w r1, [r4, #74] ; 0x4a +10011726: d102 bne.n 1001172e +10011728: 2906 cmp r1, #6 +1001172a: f000 80d0 beq.w 100118ce +1001172e: 290c cmp r1, #12 +10011730: f000 80cd beq.w 100118ce +10011734: f894 70a1 ldrb.w r7, [r4, #161] ; 0xa1 +10011738: 2f00 cmp r7, #0 +1001173a: f000 8092 beq.w 10011862 +1001173e: 4996 ldr r1, [pc, #600] ; (10011998 ) +10011740: f894 20a0 ldrb.w r2, [r4, #160] ; 0xa0 +10011744: 4439 add r1, r7 +10011746: 3201 adds r2, #1 +10011748: f811 1c01 ldrb.w r1, [r1, #-1] +1001174c: b2d2 uxtb r2, r2 +1001174e: 4291 cmp r1, r2 +10011750: f884 20a0 strb.w r2, [r4, #160] ; 0xa0 +10011754: d978 bls.n 10011848 +10011756: 2700 movs r7, #0 +10011758: 69a2 ldr r2, [r4, #24] +1001175a: 2a06 cmp r2, #6 +1001175c: d10a bne.n 10011774 +1001175e: f894 1022 ldrb.w r1, [r4, #34] ; 0x22 +10011762: 06cb lsls r3, r1, #27 +10011764: d506 bpl.n 10011774 +10011766: 6829 ldr r1, [r5, #0] +10011768: 6aa0 ldr r0, [r4, #40] ; 0x28 +1001176a: 1a09 subs r1, r1, r0 +1001176c: 2928 cmp r1, #40 ; 0x28 +1001176e: bf84 itt hi +10011770: 1c7b addhi r3, r7, #1 +10011772: b2df uxtbhi r7, r3 +10011774: f894 a008 ldrb.w sl, [r4, #8] +10011778: f01a 0a08 ands.w sl, sl, #8 +1001177c: d01b beq.n 100117b6 +1001177e: 1f11 subs r1, r2, #4 +10011780: 2901 cmp r1, #1 +10011782: d902 bls.n 1001178a +10011784: 2a07 cmp r2, #7 +10011786: f040 80b4 bne.w 100118f2 +1001178a: f44f 7efa mov.w lr, #500 ; 0x1f4 +1001178e: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 +10011792: f8d4 a098 ldr.w sl, [r4, #152] ; 0x98 +10011796: f8d4 109c ldr.w r1, [r4, #156] ; 0x9c +1001179a: 6828 ldr r0, [r5, #0] +1001179c: fb01 310a mla r1, r1, sl, r3 +100117a0: fbb1 f1fe udiv r1, r1, lr +100117a4: 6aa2 ldr r2, [r4, #40] ; 0x28 +100117a6: 1a80 subs r0, r0, r2 +100117a8: 4288 cmp r0, r1 +100117aa: f240 8092 bls.w 100118d2 +100117ae: f04f 0a01 mov.w sl, #1 +100117b2: 1c7b adds r3, r7, #1 +100117b4: b2df uxtb r7, r3 +100117b6: 6fa0 ldr r0, [r4, #120] ; 0x78 +100117b8: b168 cbz r0, 100117d6 +100117ba: 682a ldr r2, [r5, #0] +100117bc: 6aa1 ldr r1, [r4, #40] ; 0x28 +100117be: f9b4 e048 ldrsh.w lr, [r4, #72] ; 0x48 +100117c2: 1a51 subs r1, r2, r1 +100117c4: 2206 movs r2, #6 +100117c6: fb02 f20e mul.w r2, r2, lr +100117ca: 4291 cmp r1, r2 +100117cc: d303 bcc.n 100117d6 +100117ce: f7ff ff2b bl 10011628 +100117d2: 2200 movs r2, #0 +100117d4: 67a2 str r2, [r4, #120] ; 0x78 +100117d6: 69a2 ldr r2, [r4, #24] +100117d8: 2a03 cmp r2, #3 +100117da: f040 808d bne.w 100118f8 +100117de: 682a ldr r2, [r5, #0] +100117e0: 6aa1 ldr r1, [r4, #40] ; 0x28 +100117e2: 1a52 subs r2, r2, r1 +100117e4: 2a28 cmp r2, #40 ; 0x28 +100117e6: d802 bhi.n 100117ee +100117e8: 2f00 cmp r7, #0 +100117ea: f000 8090 beq.w 1001190e +100117ee: 4620 mov r0, r4 +100117f0: f7ff ff4a bl 10011688 +100117f4: 68e3 ldr r3, [r4, #12] +100117f6: 2e00 cmp r6, #0 +100117f8: f000 8086 beq.w 10011908 +100117fc: 60f3 str r3, [r6, #12] +100117fe: f1ba 0f00 cmp.w sl, #0 +10011802: d009 beq.n 10011818 +10011804: 8c23 ldrh r3, [r4, #32] +10011806: 4622 mov r2, r4 +10011808: 9301 str r3, [sp, #4] +1001180a: 8be3 ldrh r3, [r4, #30] +1001180c: 9300 str r3, [sp, #0] +1001180e: 6ae1 ldr r1, [r4, #44] ; 0x2c +10011810: 1d23 adds r3, r4, #4 +10011812: 6d60 ldr r0, [r4, #84] ; 0x54 +10011814: f002 f81a bl 1001384c +10011818: 6922 ldr r2, [r4, #16] +1001181a: 4620 mov r0, r4 +1001181c: f8d4 7090 ldr.w r7, [r4, #144] ; 0x90 +10011820: 9203 str r2, [sp, #12] +10011822: f8d4 a00c ldr.w sl, [r4, #12] +10011826: f003 fd31 bl 1001528c +1001182a: 2100 movs r1, #0 +1001182c: f889 1000 strb.w r1, [r9] +10011830: b127 cbz r7, 1001183c +10011832: 9a03 ldr r2, [sp, #12] +10011834: f06f 0109 mvn.w r1, #9 +10011838: 4610 mov r0, r2 +1001183a: 47b8 blx r7 +1001183c: f899 3000 ldrb.w r3, [r9] +10011840: 2b00 cmp r3, #0 +10011842: f43f af66 beq.w 10011712 +10011846: e74d b.n 100116e4 +10011848: 2200 movs r2, #0 +1001184a: 2f06 cmp r7, #6 +1001184c: bf98 it ls +1001184e: 1c7b addls r3, r7, #1 +10011850: f884 20a0 strb.w r2, [r4, #160] ; 0xa0 +10011854: bf98 it ls +10011856: f884 30a1 strbls.w r3, [r4, #161] ; 0xa1 +1001185a: 4620 mov r0, r4 +1001185c: f002 f8d4 bl 10013a08 +10011860: e779 b.n 10011756 +10011862: f9b4 2038 ldrsh.w r2, [r4, #56] ; 0x38 +10011866: 2a00 cmp r2, #0 +10011868: bfa4 itt ge +1001186a: 3201 addge r2, #1 +1001186c: 8722 strhge r2, [r4, #56] ; 0x38 +1001186e: 6f62 ldr r2, [r4, #116] ; 0x74 +10011870: 2a00 cmp r2, #0 +10011872: f43f af70 beq.w 10011756 +10011876: f9b4 e038 ldrsh.w lr, [r4, #56] ; 0x38 +1001187a: f9b4 2048 ldrsh.w r2, [r4, #72] ; 0x48 +1001187e: 4596 cmp lr, r2 +10011880: f6ff af69 blt.w 10011756 +10011884: 2802 cmp r0, #2 +10011886: d00a beq.n 1001189e +10011888: f9b4 0044 ldrsh.w r0, [r4, #68] ; 0x44 +1001188c: f9b4 2046 ldrsh.w r2, [r4, #70] ; 0x46 +10011890: f81b 1001 ldrb.w r1, [fp, r1] +10011894: eb02 02e0 add.w r2, r2, r0, asr #3 +10011898: 408a lsls r2, r1 +1001189a: f8a4 2048 strh.w r2, [r4, #72] ; 0x48 +1001189e: 2200 movs r2, #0 +100118a0: f8b4 1050 ldrh.w r1, [r4, #80] ; 0x50 +100118a4: 8722 strh r2, [r4, #56] ; 0x38 +100118a6: f8b4 2064 ldrh.w r2, [r4, #100] ; 0x64 +100118aa: 428a cmp r2, r1 +100118ac: bf28 it cs +100118ae: 460a movcs r2, r1 +100118b0: 8f61 ldrh r1, [r4, #58] ; 0x3a +100118b2: 0852 lsrs r2, r2, #1 +100118b4: 0048 lsls r0, r1, #1 +100118b6: 4282 cmp r2, r0 +100118b8: f8a4 2052 strh.w r2, [r4, #82] ; 0x52 +100118bc: f8a4 1050 strh.w r1, [r4, #80] ; 0x50 +100118c0: bfb8 it lt +100118c2: f8a4 0052 strhlt.w r0, [r4, #82] ; 0x52 +100118c6: 4620 mov r0, r4 +100118c8: f002 f80c bl 100138e4 +100118cc: e744 b.n 10011758 +100118ce: 2701 movs r7, #1 +100118d0: e742 b.n 10011758 +100118d2: f894 20a2 ldrb.w r2, [r4, #162] ; 0xa2 +100118d6: fb0a 3202 mla r2, sl, r2, r3 +100118da: fbb2 f2fe udiv r2, r2, lr +100118de: 4290 cmp r0, r2 +100118e0: d907 bls.n 100118f2 +100118e2: 4620 mov r0, r4 +100118e4: f002 f867 bl 100139b6 +100118e8: f894 20a2 ldrb.w r2, [r4, #162] ; 0xa2 +100118ec: 3201 adds r2, #1 +100118ee: f884 20a2 strb.w r2, [r4, #162] ; 0xa2 +100118f2: f04f 0a00 mov.w sl, #0 +100118f6: e75e b.n 100117b6 +100118f8: 2a09 cmp r2, #9 +100118fa: f47f af75 bne.w 100117e8 +100118fe: 682a ldr r2, [r5, #0] +10011900: 6aa1 ldr r1, [r4, #40] ; 0x28 +10011902: 1a52 subs r2, r2, r1 +10011904: 2af0 cmp r2, #240 ; 0xf0 +10011906: e76e b.n 100117e6 +10011908: f8c8 3000 str.w r3, [r8] +1001190c: e777 b.n 100117fe +1001190e: f894 2023 ldrb.w r2, [r4, #35] ; 0x23 +10011912: f894 1024 ldrb.w r1, [r4, #36] ; 0x24 +10011916: 3201 adds r2, #1 +10011918: b2d2 uxtb r2, r2 +1001191a: 4291 cmp r1, r2 +1001191c: f8d4 a00c ldr.w sl, [r4, #12] +10011920: f884 2023 strb.w r2, [r4, #35] ; 0x23 +10011924: f63f aef6 bhi.w 10011714 +10011928: f8d4 208c ldr.w r2, [r4, #140] ; 0x8c +1001192c: f884 7023 strb.w r7, [r4, #35] ; 0x23 +10011930: f889 7000 strb.w r7, [r9] +10011934: b172 cbz r2, 10011954 +10011936: 4621 mov r1, r4 +10011938: 6920 ldr r0, [r4, #16] +1001193a: 4790 blx r2 +1001193c: f899 3000 ldrb.w r3, [r9] +10011940: 2b00 cmp r3, #0 +10011942: f47f aecf bne.w 100116e4 +10011946: 2800 cmp r0, #0 +10011948: f47f aee4 bne.w 10011714 +1001194c: 4620 mov r0, r4 +1001194e: f001 fe3b bl 100135c8 +10011952: e6df b.n 10011714 +10011954: 4638 mov r0, r7 +10011956: e7f1 b.n 1001193c +10011958: 682b ldr r3, [r5, #0] +1001195a: 6ab2 ldr r2, [r6, #40] ; 0x28 +1001195c: 1a9b subs r3, r3, r2 +1001195e: 2bf0 cmp r3, #240 ; 0xf0 +10011960: d80a bhi.n 10011978 +10011962: 4634 mov r4, r6 +10011964: 68f6 ldr r6, [r6, #12] +10011966: e6c6 b.n 100116f6 +10011968: 60e3 str r3, [r4, #12] +1001196a: f8d6 800c ldr.w r8, [r6, #12] +1001196e: 4630 mov r0, r6 +10011970: f003 fc8c bl 1001528c +10011974: 4646 mov r6, r8 +10011976: e6be b.n 100116f6 +10011978: 4630 mov r0, r6 +1001197a: f7ff fe85 bl 10011688 +1001197e: 68f3 ldr r3, [r6, #12] +10011980: 2c00 cmp r4, #0 +10011982: d1f1 bne.n 10011968 +10011984: 603b str r3, [r7, #0] +10011986: e7f0 b.n 1001196a +10011988: 1004b1b4 .word 0x1004b1b4 +1001198c: 1004b1b9 .word 0x1004b1b9 +10011990: 1004b1a4 .word 0x1004b1a4 +10011994: 1004b1c0 .word 0x1004b1c0 +10011998: 100400e8 .word 0x100400e8 +1001199c: 1004b1a8 .word 0x1004b1a8 +100119a0: 100400c8 .word 0x100400c8 + +100119a4 : +100119a4: 6803 ldr r3, [r0, #0] +100119a6: b510 push {r4, lr} +100119a8: 428b cmp r3, r1 +100119aa: 460c mov r4, r1 +100119ac: d119 bne.n 100119e2 +100119ae: 68cb ldr r3, [r1, #12] +100119b0: 6003 str r3, [r0, #0] +100119b2: 2300 movs r3, #0 +100119b4: 4620 mov r0, r4 +100119b6: 60e3 str r3, [r4, #12] +100119b8: f7ff fe66 bl 10011688 +100119bc: 69a3 ldr r3, [r4, #24] +100119be: 2b0a cmp r3, #10 +100119c0: d00c beq.n 100119dc +100119c2: 2b01 cmp r3, #1 +100119c4: d00a beq.n 100119dc +100119c6: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +100119ca: 07da lsls r2, r3, #31 +100119cc: d506 bpl.n 100119dc +100119ce: f043 0302 orr.w r3, r3, #2 +100119d2: f884 3022 strb.w r3, [r4, #34] ; 0x22 +100119d6: 4620 mov r0, r4 +100119d8: f001 fdf6 bl 100135c8 +100119dc: 2300 movs r3, #0 +100119de: 61a3 str r3, [r4, #24] +100119e0: bd10 pop {r4, pc} +100119e2: 2100 movs r1, #0 +100119e4: 4a08 ldr r2, [pc, #32] ; (10011a08 ) +100119e6: 6013 str r3, [r2, #0] +100119e8: b91b cbnz r3, 100119f2 +100119ea: 2900 cmp r1, #0 +100119ec: d0e1 beq.n 100119b2 +100119ee: 6013 str r3, [r2, #0] +100119f0: e7df b.n 100119b2 +100119f2: 68d8 ldr r0, [r3, #12] +100119f4: 4284 cmp r4, r0 +100119f6: d104 bne.n 10011a02 +100119f8: b101 cbz r1, 100119fc +100119fa: 6013 str r3, [r2, #0] +100119fc: 68e2 ldr r2, [r4, #12] +100119fe: 60da str r2, [r3, #12] +10011a00: e7d7 b.n 100119b2 +10011a02: 2101 movs r1, #1 +10011a04: 4603 mov r3, r0 +10011a06: e7ef b.n 100119e8 +10011a08: 1004b1bc .word 0x1004b1bc + +10011a0c : +10011a0c: b537 push {r0, r1, r2, r4, r5, lr} +10011a0e: 6983 ldr r3, [r0, #24] +10011a10: 4604 mov r4, r0 +10011a12: 2900 cmp r1, #0 +10011a14: d041 beq.n 10011a9a +10011a16: 2b04 cmp r3, #4 +10011a18: d001 beq.n 10011a1e +10011a1a: 2b07 cmp r3, #7 +10011a1c: d13d bne.n 10011a9a +10011a1e: 6fe2 ldr r2, [r4, #124] ; 0x7c +10011a20: b922 cbnz r2, 10011a2c +10011a22: f241 62d0 movw r2, #5840 ; 0x16d0 +10011a26: 8e21 ldrh r1, [r4, #48] ; 0x30 +10011a28: 4291 cmp r1, r2 +10011a2a: d036 beq.n 10011a9a +10011a2c: 8c23 ldrh r3, [r4, #32] +10011a2e: 4622 mov r2, r4 +10011a30: 9301 str r3, [sp, #4] +10011a32: 8be3 ldrh r3, [r4, #30] +10011a34: 6ae1 ldr r1, [r4, #44] ; 0x2c +10011a36: 9300 str r3, [sp, #0] +10011a38: 6d60 ldr r0, [r4, #84] ; 0x54 +10011a3a: 1d23 adds r3, r4, #4 +10011a3c: f001 ff06 bl 1001384c +10011a40: 4620 mov r0, r4 +10011a42: f7ff fe21 bl 10011688 +10011a46: 4a3e ldr r2, [pc, #248] ; (10011b40 ) +10011a48: 6813 ldr r3, [r2, #0] +10011a4a: 429c cmp r4, r3 +10011a4c: d102 bne.n 10011a54 +10011a4e: 68e3 ldr r3, [r4, #12] +10011a50: 6013 str r3, [r2, #0] +10011a52: e00c b.n 10011a6e +10011a54: 2100 movs r1, #0 +10011a56: 4a3b ldr r2, [pc, #236] ; (10011b44 ) +10011a58: 6013 str r3, [r2, #0] +10011a5a: b90b cbnz r3, 10011a60 +10011a5c: b139 cbz r1, 10011a6e +10011a5e: e7f7 b.n 10011a50 +10011a60: 68d8 ldr r0, [r3, #12] +10011a62: 4284 cmp r4, r0 +10011a64: d116 bne.n 10011a94 +10011a66: b101 cbz r1, 10011a6a +10011a68: 6013 str r3, [r2, #0] +10011a6a: 68e2 ldr r2, [r4, #12] +10011a6c: 60da str r2, [r3, #12] +10011a6e: 2201 movs r2, #1 +10011a70: 2500 movs r5, #0 +10011a72: 4b35 ldr r3, [pc, #212] ; (10011b48 ) +10011a74: 60e5 str r5, [r4, #12] +10011a76: 701a strb r2, [r3, #0] +10011a78: 69a3 ldr r3, [r4, #24] +10011a7a: 2b04 cmp r3, #4 +10011a7c: d13a bne.n 10011af4 +10011a7e: 230a movs r3, #10 +10011a80: 61a3 str r3, [r4, #24] +10011a82: 4b32 ldr r3, [pc, #200] ; (10011b4c ) +10011a84: 681a ldr r2, [r3, #0] +10011a86: 601c str r4, [r3, #0] +10011a88: 60e2 str r2, [r4, #12] +10011a8a: f7ff f8a3 bl 10010bd4 +10011a8e: 2000 movs r0, #0 +10011a90: b003 add sp, #12 +10011a92: bd30 pop {r4, r5, pc} +10011a94: 2101 movs r1, #1 +10011a96: 4603 mov r3, r0 +10011a98: e7df b.n 10011a5a +10011a9a: 2b07 cmp r3, #7 +10011a9c: d8f7 bhi.n 10011a8e +10011a9e: a201 add r2, pc, #4 ; (adr r2, 10011aa4 ) +10011aa0: f852 f023 ldr.w pc, [r2, r3, lsl #2] +10011aa4: 10011ac5 .word 0x10011ac5 +10011aa8: 10011b03 .word 0x10011b03 +10011aac: 10011b0d .word 0x10011b0d +10011ab0: 10011b1d .word 0x10011b1d +10011ab4: 10011b1d .word 0x10011b1d +10011ab8: 10011a8f .word 0x10011a8f +10011abc: 10011a8f .word 0x10011a8f +10011ac0: 10011b33 .word 0x10011b33 +10011ac4: 8be3 ldrh r3, [r4, #30] +10011ac6: b1ab cbz r3, 10011af4 +10011ac8: 4a21 ldr r2, [pc, #132] ; (10011b50 ) +10011aca: 6813 ldr r3, [r2, #0] +10011acc: 429c cmp r4, r3 +10011ace: d102 bne.n 10011ad6 +10011ad0: 68e3 ldr r3, [r4, #12] +10011ad2: 6013 str r3, [r2, #0] +10011ad4: e00c b.n 10011af0 +10011ad6: 2100 movs r1, #0 +10011ad8: 4a1a ldr r2, [pc, #104] ; (10011b44 ) +10011ada: 6013 str r3, [r2, #0] +10011adc: b90b cbnz r3, 10011ae2 +10011ade: b139 cbz r1, 10011af0 +10011ae0: e7f7 b.n 10011ad2 +10011ae2: 68d8 ldr r0, [r3, #12] +10011ae4: 4284 cmp r4, r0 +10011ae6: d109 bne.n 10011afc +10011ae8: b101 cbz r1, 10011aec +10011aea: 6013 str r3, [r2, #0] +10011aec: 68e2 ldr r2, [r4, #12] +10011aee: 60da str r2, [r3, #12] +10011af0: 2300 movs r3, #0 +10011af2: 60e3 str r3, [r4, #12] +10011af4: 4620 mov r0, r4 +10011af6: f003 fbc9 bl 1001528c +10011afa: e7c8 b.n 10011a8e +10011afc: 2101 movs r1, #1 +10011afe: 4603 mov r3, r0 +10011b00: e7ec b.n 10011adc +10011b02: 4621 mov r1, r4 +10011b04: 4813 ldr r0, [pc, #76] ; (10011b54 ) +10011b06: f7ff ff4d bl 100119a4 +10011b0a: e7f3 b.n 10011af4 +10011b0c: 4621 mov r1, r4 +10011b0e: 480c ldr r0, [pc, #48] ; (10011b40 ) +10011b10: f7ff ff48 bl 100119a4 +10011b14: 2201 movs r2, #1 +10011b16: 4b0c ldr r3, [pc, #48] ; (10011b48 ) +10011b18: 701a strb r2, [r3, #0] +10011b1a: e7eb b.n 10011af4 +10011b1c: 4620 mov r0, r4 +10011b1e: f001 fd00 bl 10013522 +10011b22: 2800 cmp r0, #0 +10011b24: d1b4 bne.n 10011a90 +10011b26: 2305 movs r3, #5 +10011b28: 61a3 str r3, [r4, #24] +10011b2a: 4620 mov r0, r4 +10011b2c: f001 fd4c bl 100135c8 +10011b30: e7ad b.n 10011a8e +10011b32: 4620 mov r0, r4 +10011b34: f001 fcf5 bl 10013522 +10011b38: 2800 cmp r0, #0 +10011b3a: d1a9 bne.n 10011a90 +10011b3c: 2309 movs r3, #9 +10011b3e: e7f3 b.n 10011b28 +10011b40: 1004b1a4 .word 0x1004b1a4 +10011b44: 1004b1bc .word 0x1004b1bc +10011b48: 1004b1a8 .word 0x1004b1a8 +10011b4c: 1004b1c0 .word 0x1004b1c0 +10011b50: 1004b1ac .word 0x1004b1ac +10011b54: 1004b1b0 .word 0x1004b1b0 + +10011b58 : +10011b58: 6983 ldr r3, [r0, #24] +10011b5a: 2101 movs r1, #1 +10011b5c: 2b01 cmp r3, #1 +10011b5e: bf1e ittt ne +10011b60: f890 3022 ldrbne.w r3, [r0, #34] ; 0x22 +10011b64: f043 0310 orrne.w r3, r3, #16 +10011b68: f880 3022 strbne.w r3, [r0, #34] ; 0x22 +10011b6c: f7ff bf4e b.w 10011a0c + +10011b70 : +10011b70: b510 push {r4, lr} +10011b72: 4608 mov r0, r1 +10011b74: 4614 mov r4, r2 +10011b76: b13a cbz r2, 10011b88 +10011b78: 8911 ldrh r1, [r2, #8] +10011b7a: f7ff fd2b bl 100115d4 +10011b7e: 4620 mov r0, r4 +10011b80: f7ff fa61 bl 10011046 +10011b84: 2000 movs r0, #0 +10011b86: bd10 pop {r4, pc} +10011b88: 2b00 cmp r3, #0 +10011b8a: d1fb bne.n 10011b84 +10011b8c: e8bd 4010 ldmia.w sp!, {r4, lr} +10011b90: f7ff bfe2 b.w 10011b58 + +10011b94 : +10011b94: b5f8 push {r3, r4, r5, r6, r7, lr} +10011b96: 2300 movs r3, #0 +10011b98: 6fc6 ldr r6, [r0, #124] ; 0x7c +10011b9a: f8d0 5084 ldr.w r5, [r0, #132] ; 0x84 +10011b9e: 7b77 ldrb r7, [r6, #13] +10011ba0: 4604 mov r4, r0 +10011ba2: 67c3 str r3, [r0, #124] ; 0x7c +10011ba4: b1e5 cbz r5, 10011be0 +10011ba6: 4601 mov r1, r0 +10011ba8: 4632 mov r2, r6 +10011baa: 6900 ldr r0, [r0, #16] +10011bac: 47a8 blx r5 +10011bae: 4605 mov r5, r0 +10011bb0: b9e8 cbnz r0, 10011bee +10011bb2: 06bb lsls r3, r7, #26 +10011bb4: d512 bpl.n 10011bdc +10011bb6: f241 62d0 movw r2, #5840 ; 0x16d0 +10011bba: 8e23 ldrh r3, [r4, #48] ; 0x30 +10011bbc: f8d4 6084 ldr.w r6, [r4, #132] ; 0x84 +10011bc0: 4293 cmp r3, r2 +10011bc2: bf1c itt ne +10011bc4: 3301 addne r3, #1 +10011bc6: 8623 strhne r3, [r4, #48] ; 0x30 +10011bc8: b146 cbz r6, 10011bdc +10011bca: 2300 movs r3, #0 +10011bcc: 4621 mov r1, r4 +10011bce: 461a mov r2, r3 +10011bd0: 6920 ldr r0, [r4, #16] +10011bd2: 47b0 blx r6 +10011bd4: 300a adds r0, #10 +10011bd6: d101 bne.n 10011bdc +10011bd8: f06f 0509 mvn.w r5, #9 +10011bdc: 4628 mov r0, r5 +10011bde: bdf8 pop {r3, r4, r5, r6, r7, pc} +10011be0: 4601 mov r1, r0 +10011be2: 462b mov r3, r5 +10011be4: 4632 mov r2, r6 +10011be6: 4628 mov r0, r5 +10011be8: f7ff ffc2 bl 10011b70 +10011bec: e7df b.n 10011bae +10011bee: f110 050a adds.w r5, r0, #10 +10011bf2: d0f1 beq.n 10011bd8 +10011bf4: 67e6 str r6, [r4, #124] ; 0x7c +10011bf6: 2500 movs r5, #0 +10011bf8: e7f0 b.n 10011bdc + ... + +10011bfc : +10011bfc: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10011c00: 4d19 ldr r5, [pc, #100] ; (10011c68 ) +10011c02: 4f1a ldr r7, [pc, #104] ; (10011c6c ) +10011c04: 782b ldrb r3, [r5, #0] +10011c06: 4e1a ldr r6, [pc, #104] ; (10011c70 ) +10011c08: 3301 adds r3, #1 +10011c0a: 702b strb r3, [r5, #0] +10011c0c: f04f 0800 mov.w r8, #0 +10011c10: 683c ldr r4, [r7, #0] +10011c12: 782b ldrb r3, [r5, #0] +10011c14: b90c cbnz r4, 10011c1a +10011c16: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +10011c1a: f894 2025 ldrb.w r2, [r4, #37] ; 0x25 +10011c1e: 429a cmp r2, r3 +10011c20: d0f8 beq.n 10011c14 +10011c22: f884 3025 strb.w r3, [r4, #37] ; 0x25 +10011c26: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10011c2a: 07da lsls r2, r3, #31 +10011c2c: d50c bpl.n 10011c48 +10011c2e: f043 0302 orr.w r3, r3, #2 +10011c32: f884 3022 strb.w r3, [r4, #34] ; 0x22 +10011c36: 4620 mov r0, r4 +10011c38: f001 fcc6 bl 100135c8 +10011c3c: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10011c40: f023 0303 bic.w r3, r3, #3 +10011c44: f884 3022 strb.w r3, [r4, #34] ; 0x22 +10011c48: 6fe3 ldr r3, [r4, #124] ; 0x7c +10011c4a: f8d4 900c ldr.w r9, [r4, #12] +10011c4e: b90b cbnz r3, 10011c54 +10011c50: 464c mov r4, r9 +10011c52: e7de b.n 10011c12 +10011c54: 4620 mov r0, r4 +10011c56: f886 8000 strb.w r8, [r6] +10011c5a: f7ff ff9b bl 10011b94 +10011c5e: 7833 ldrb r3, [r6, #0] +10011c60: 2b00 cmp r3, #0 +10011c62: d0f5 beq.n 10011c50 +10011c64: e7d2 b.n 10011c0c +10011c66: bf00 nop +10011c68: 1004b1b9 .word 0x1004b1b9 +10011c6c: 1004b1a4 .word 0x1004b1a4 +10011c70: 1004b1a8 .word 0x1004b1a8 + +10011c74 : +10011c74: b508 push {r3, lr} +10011c76: f7ff ffc1 bl 10011bfc +10011c7a: 4a06 ldr r2, [pc, #24] ; (10011c94 ) +10011c7c: 7813 ldrb r3, [r2, #0] +10011c7e: 3301 adds r3, #1 +10011c80: b2db uxtb r3, r3 +10011c82: 7013 strb r3, [r2, #0] +10011c84: 07db lsls r3, r3, #31 +10011c86: d503 bpl.n 10011c90 +10011c88: e8bd 4008 ldmia.w sp!, {r3, lr} +10011c8c: f7ff bd1c b.w 100116c8 +10011c90: bd08 pop {r3, pc} +10011c92: bf00 nop +10011c94: 1004b1b8 .word 0x1004b1b8 + +10011c98 : +10011c98: 6983 ldr r3, [r0, #24] +10011c9a: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +10011c9e: 2b0a cmp r3, #10 +10011ca0: 4604 mov r4, r0 +10011ca2: 4689 mov r9, r1 +10011ca4: d109 bne.n 10011cba +10011ca6: 4601 mov r1, r0 +10011ca8: 481e ldr r0, [pc, #120] ; (10011d24 ) +10011caa: f7ff fe7b bl 100119a4 +10011cae: 4620 mov r0, r4 +10011cb0: b003 add sp, #12 +10011cb2: e8bd 43f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, lr} +10011cb6: f003 bae9 b.w 1001528c +10011cba: 6d47 ldr r7, [r0, #84] ; 0x54 +10011cbc: f8d0 802c ldr.w r8, [r0, #44] ; 0x2c +10011cc0: f8d0 5090 ldr.w r5, [r0, #144] ; 0x90 +10011cc4: 6906 ldr r6, [r0, #16] +10011cc6: 4601 mov r1, r0 +10011cc8: 4817 ldr r0, [pc, #92] ; (10011d28 ) +10011cca: f7ff fe6b bl 100119a4 +10011cce: 2201 movs r2, #1 +10011cd0: 4b16 ldr r3, [pc, #88] ; (10011d2c ) +10011cd2: 6f60 ldr r0, [r4, #116] ; 0x74 +10011cd4: 701a strb r2, [r3, #0] +10011cd6: b108 cbz r0, 10011cdc +10011cd8: f7ff fca6 bl 10011628 +10011cdc: 6f20 ldr r0, [r4, #112] ; 0x70 +10011cde: b108 cbz r0, 10011ce4 +10011ce0: f7ff fca2 bl 10011628 +10011ce4: 6fa0 ldr r0, [r4, #120] ; 0x78 +10011ce6: b108 cbz r0, 10011cec +10011ce8: f7ff fc9e bl 10011628 +10011cec: f1b9 0f00 cmp.w r9, #0 +10011cf0: d009 beq.n 10011d06 +10011cf2: 8c23 ldrh r3, [r4, #32] +10011cf4: 4622 mov r2, r4 +10011cf6: 9301 str r3, [sp, #4] +10011cf8: 8be3 ldrh r3, [r4, #30] +10011cfa: 4641 mov r1, r8 +10011cfc: 9300 str r3, [sp, #0] +10011cfe: 4638 mov r0, r7 +10011d00: 1d23 adds r3, r4, #4 +10011d02: f001 fda3 bl 1001384c +10011d06: 4620 mov r0, r4 +10011d08: f003 fac0 bl 1001528c +10011d0c: b13d cbz r5, 10011d1e +10011d0e: f06f 0109 mvn.w r1, #9 +10011d12: 4630 mov r0, r6 +10011d14: 462b mov r3, r5 +10011d16: b003 add sp, #12 +10011d18: e8bd 43f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, lr} +10011d1c: 4718 bx r3 +10011d1e: b003 add sp, #12 +10011d20: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +10011d24: 1004b1c0 .word 0x1004b1c0 +10011d28: 1004b1a4 .word 0x1004b1a4 +10011d2c: 1004b1a8 .word 0x1004b1a8 + +10011d30 : +10011d30: 2101 movs r1, #1 +10011d32: f7ff bfb1 b.w 10011c98 + ... + +10011d38 : +10011d38: 4b03 ldr r3, [pc, #12] ; (10011d48 ) +10011d3a: 4a04 ldr r2, [pc, #16] ; (10011d4c ) +10011d3c: 6818 ldr r0, [r3, #0] +10011d3e: 6812 ldr r2, [r2, #0] +10011d40: 4410 add r0, r2 +10011d42: 6018 str r0, [r3, #0] +10011d44: 4770 bx lr +10011d46: bf00 nop +10011d48: 10044ed8 .word 0x10044ed8 +10011d4c: 1004b1b4 .word 0x1004b1b4 + +10011d50 : +10011d50: b5f8 push {r3, r4, r5, r6, r7, lr} +10011d52: 4b41 ldr r3, [pc, #260] ; (10011e58 ) +10011d54: 4607 mov r7, r0 +10011d56: 889e ldrh r6, [r3, #4] +10011d58: 4d40 ldr r5, [pc, #256] ; (10011e5c ) +10011d5a: 4630 mov r0, r6 +10011d5c: f003 f9fa bl 10015154 +10011d60: 4604 mov r4, r0 +10011d62: bb00 cbnz r0, 10011da6 +10011d64: 4621 mov r1, r4 +10011d66: 4b3e ldr r3, [pc, #248] ; (10011e60 ) +10011d68: 6828 ldr r0, [r5, #0] +10011d6a: 681b ldr r3, [r3, #0] +10011d6c: 2b00 cmp r3, #0 +10011d6e: d15c bne.n 10011e2a +10011d70: b114 cbz r4, 10011d78 +10011d72: 4620 mov r0, r4 +10011d74: f7ff ffdc bl 10011d30 +10011d78: 4630 mov r0, r6 +10011d7a: f003 f9eb bl 10015154 +10011d7e: 4604 mov r4, r0 +10011d80: b988 cbnz r0, 10011da6 +10011d82: 207f movs r0, #127 ; 0x7f +10011d84: 46a6 mov lr, r4 +10011d86: 4b37 ldr r3, [pc, #220] ; (10011e64 ) +10011d88: f8d5 c000 ldr.w ip, [r5] +10011d8c: 681b ldr r3, [r3, #0] +10011d8e: 2b00 cmp r3, #0 +10011d90: d153 bne.n 10011e3a +10011d92: b114 cbz r4, 10011d9a +10011d94: 4620 mov r0, r4 +10011d96: f7ff ffcb bl 10011d30 +10011d9a: 4630 mov r0, r6 +10011d9c: f003 f9da bl 10015154 +10011da0: 4604 mov r4, r0 +10011da2: 2800 cmp r0, #0 +10011da4: d03f beq.n 10011e26 +10011da6: 22a4 movs r2, #164 ; 0xa4 +10011da8: 2100 movs r1, #0 +10011daa: 4620 mov r0, r4 +10011dac: f008 ff14 bl 1001abd8 +10011db0: f641 4384 movw r3, #7300 ; 0x1c84 +10011db4: f8a4 306a strh.w r3, [r4, #106] ; 0x6a +10011db8: f241 63d0 movw r3, #5840 ; 0x16d0 +10011dbc: 8623 strh r3, [r4, #48] ; 0x30 +10011dbe: 8663 strh r3, [r4, #50] ; 0x32 +10011dc0: 23ff movs r3, #255 ; 0xff +10011dc2: 72a3 strb r3, [r4, #10] +10011dc4: f44f 7306 mov.w r3, #536 ; 0x218 +10011dc8: 8763 strh r3, [r4, #58] ; 0x3a +10011dca: 2306 movs r3, #6 +10011dcc: f8a4 3048 strh.w r3, [r4, #72] ; 0x48 +10011dd0: f8a4 3046 strh.w r3, [r4, #70] ; 0x46 +10011dd4: f64f 73ff movw r3, #65535 ; 0xffff +10011dd8: 2100 movs r1, #0 +10011dda: 8723 strh r3, [r4, #56] ; 0x38 +10011ddc: 2301 movs r3, #1 +10011dde: 7727 strb r7, [r4, #28] +10011de0: f8a4 3050 strh.w r3, [r4, #80] ; 0x50 +10011de4: f8a4 106c strh.w r1, [r4, #108] ; 0x6c +10011de8: 7261 strb r1, [r4, #9] +10011dea: f8a4 1044 strh.w r1, [r4, #68] ; 0x44 +10011dee: f7ff ffa3 bl 10011d38 +10011df2: 682b ldr r3, [r5, #0] +10011df4: 65e0 str r0, [r4, #92] ; 0x5c +10011df6: 62a3 str r3, [r4, #40] ; 0x28 +10011df8: 4b1b ldr r3, [pc, #108] ; (10011e68 ) +10011dfa: 6560 str r0, [r4, #84] ; 0x54 +10011dfc: 781b ldrb r3, [r3, #0] +10011dfe: 64e0 str r0, [r4, #76] ; 0x4c +10011e00: f884 3025 strb.w r3, [r4, #37] ; 0x25 +10011e04: 4b19 ldr r3, [pc, #100] ; (10011e6c ) +10011e06: 6620 str r0, [r4, #96] ; 0x60 +10011e08: f8c4 3084 str.w r3, [r4, #132] ; 0x84 +10011e0c: 4b18 ldr r3, [pc, #96] ; (10011e70 ) +10011e0e: f884 1023 strb.w r1, [r4, #35] ; 0x23 +10011e12: f8c4 3094 str.w r3, [r4, #148] ; 0x94 +10011e16: 4b17 ldr r3, [pc, #92] ; (10011e74 ) +10011e18: f884 10a2 strb.w r1, [r4, #162] ; 0xa2 +10011e1c: f8c4 3098 str.w r3, [r4, #152] ; 0x98 +10011e20: 2309 movs r3, #9 +10011e22: f8c4 309c str.w r3, [r4, #156] ; 0x9c +10011e26: 4620 mov r0, r4 +10011e28: bdf8 pop {r3, r4, r5, r6, r7, pc} +10011e2a: 6a9a ldr r2, [r3, #40] ; 0x28 +10011e2c: 1a82 subs r2, r0, r2 +10011e2e: 428a cmp r2, r1 +10011e30: bf24 itt cs +10011e32: 461c movcs r4, r3 +10011e34: 4611 movcs r1, r2 +10011e36: 68db ldr r3, [r3, #12] +10011e38: e798 b.n 10011d6c +10011e3a: 7f19 ldrb r1, [r3, #28] +10011e3c: 428f cmp r7, r1 +10011e3e: d309 bcc.n 10011e54 +10011e40: 4281 cmp r1, r0 +10011e42: d807 bhi.n 10011e54 +10011e44: 6a9a ldr r2, [r3, #40] ; 0x28 +10011e46: ebac 0202 sub.w r2, ip, r2 +10011e4a: 4572 cmp r2, lr +10011e4c: bf22 ittt cs +10011e4e: 4608 movcs r0, r1 +10011e50: 4696 movcs lr, r2 +10011e52: 461c movcs r4, r3 +10011e54: 68db ldr r3, [r3, #12] +10011e56: e79a b.n 10011d8e +10011e58: 100400a8 .word 0x100400a8 +10011e5c: 1004b1b4 .word 0x1004b1b4 +10011e60: 1004b1c0 .word 0x1004b1c0 +10011e64: 1004b1a4 .word 0x1004b1a4 +10011e68: 1004b1b9 .word 0x1004b1b9 +10011e6c: 10011b71 .word 0x10011b71 +10011e70: 006ddd00 .word 0x006ddd00 +10011e74: 000124f8 .word 0x000124f8 + +10011e78 : +10011e78: 2040 movs r0, #64 ; 0x40 +10011e7a: f7ff bf69 b.w 10011d50 + +10011e7e : +10011e7e: b510 push {r4, lr} +10011e80: 4604 mov r4, r0 +10011e82: 4608 mov r0, r1 +10011e84: f7fd f838 bl 1000eef8 +10011e88: b130 cbz r0, 10011e98 +10011e8a: 8d03 ldrh r3, [r0, #40] ; 0x28 +10011e8c: b123 cbz r3, 10011e98 +10011e8e: 3b28 subs r3, #40 ; 0x28 +10011e90: b29b uxth r3, r3 +10011e92: 429c cmp r4, r3 +10011e94: bf28 it cs +10011e96: 461c movcs r4, r3 +10011e98: 4620 mov r0, r4 +10011e9a: bd10 pop {r4, pc} + +10011e9c : +10011e9c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10011ea0: 6903 ldr r3, [r0, #16] +10011ea2: 4605 mov r5, r0 +10011ea4: 8998 ldrh r0, [r3, #12] +10011ea6: 460c mov r4, r1 +10011ea8: f7fd fd61 bl 1000f96e +10011eac: 07c2 lsls r2, r0, #31 +10011eae: d415 bmi.n 10011edc +10011eb0: 4e18 ldr r6, [pc, #96] ; (10011f14 ) +10011eb2: b1bc cbz r4, 10011ee4 +10011eb4: 6927 ldr r7, [r4, #16] +10011eb6: 6830 ldr r0, [r6, #0] +10011eb8: 892b ldrh r3, [r5, #8] +10011eba: 6879 ldr r1, [r7, #4] +10011ebc: 8922 ldrh r2, [r4, #8] +10011ebe: 4403 add r3, r0 +10011ec0: 440a add r2, r1 +10011ec2: 1a9a subs r2, r3, r2 +10011ec4: 2a00 cmp r2, #0 +10011ec6: da10 bge.n 10011eea +10011ec8: 1a5b subs r3, r3, r1 +10011eca: 2b00 cmp r3, #0 +10011ecc: dd0a ble.n 10011ee4 +10011ece: 1a09 subs r1, r1, r0 +10011ed0: b289 uxth r1, r1 +10011ed2: 8129 strh r1, [r5, #8] +10011ed4: 6868 ldr r0, [r5, #4] +10011ed6: f7ff f969 bl 100111ac +10011eda: e003 b.n 10011ee4 +10011edc: 4620 mov r0, r4 +10011ede: f7ff fba3 bl 10011628 +10011ee2: 2400 movs r4, #0 +10011ee4: 602c str r4, [r5, #0] +10011ee6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10011eea: 89b8 ldrh r0, [r7, #12] +10011eec: f7fd fd3f bl 1000f96e +10011ef0: 07c3 lsls r3, r0, #31 +10011ef2: d509 bpl.n 10011f08 +10011ef4: f8d5 8010 ldr.w r8, [r5, #16] +10011ef8: 2001 movs r0, #1 +10011efa: f8b8 700c ldrh.w r7, [r8, #12] +10011efe: f7fd fd33 bl 1000f968 +10011f02: 4338 orrs r0, r7 +10011f04: f8a8 000c strh.w r0, [r8, #12] +10011f08: 6827 ldr r7, [r4, #0] +10011f0a: 4620 mov r0, r4 +10011f0c: f7ff fb7f bl 1001160e +10011f10: 463c mov r4, r7 +10011f12: e7ce b.n 10011eb2 +10011f14: 1004b1e8 .word 0x1004b1e8 + +10011f18 : +10011f18: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10011f1c: 4ba7 ldr r3, [pc, #668] ; (100121bc ) +10011f1e: 4604 mov r4, r0 +10011f20: 781b ldrb r3, [r3, #0] +10011f22: 4ea7 ldr r6, [pc, #668] ; (100121c0 ) +10011f24: f013 0f10 tst.w r3, #16 +10011f28: d070 beq.n 1001200c +10011f2a: 6da3 ldr r3, [r4, #88] ; 0x58 +10011f2c: 6832 ldr r2, [r6, #0] +10011f2e: 6980 ldr r0, [r0, #24] +10011f30: 1a9d subs r5, r3, r2 +10011f32: 2d00 cmp r5, #0 +10011f34: f8b4 1064 ldrh.w r1, [r4, #100] ; 0x64 +10011f38: 6de7 ldr r7, [r4, #92] ; 0x5c +10011f3a: 4da2 ldr r5, [pc, #648] ; (100121c4 ) +10011f3c: db0d blt.n 10011f5a +10011f3e: 4293 cmp r3, r2 +10011f40: d103 bne.n 10011f4a +10011f42: 682b ldr r3, [r5, #0] +10011f44: 1afb subs r3, r7, r3 +10011f46: 2b00 cmp r3, #0 +10011f48: db07 blt.n 10011f5a +10011f4a: 682b ldr r3, [r5, #0] +10011f4c: 429f cmp r7, r3 +10011f4e: d11f bne.n 10011f90 +10011f50: 4b9d ldr r3, [pc, #628] ; (100121c8 ) +10011f52: 681b ldr r3, [r3, #0] +10011f54: 89db ldrh r3, [r3, #14] +10011f56: 428b cmp r3, r1 +10011f58: d91a bls.n 10011f90 +10011f5a: 4b9b ldr r3, [pc, #620] ; (100121c8 ) +10011f5c: f8b4 c066 ldrh.w ip, [r4, #102] ; 0x66 +10011f60: 681b ldr r3, [r3, #0] +10011f62: f8b3 e00e ldrh.w lr, [r3, #14] +10011f66: 65a2 str r2, [r4, #88] ; 0x58 +10011f68: 4673 mov r3, lr +10011f6a: 682a ldr r2, [r5, #0] +10011f6c: 45f4 cmp ip, lr +10011f6e: 65e2 str r2, [r4, #92] ; 0x5c +10011f70: f8a4 e064 strh.w lr, [r4, #100] ; 0x64 +10011f74: bf38 it cc +10011f76: f8a4 e066 strhcc.w lr, [r4, #102] ; 0x66 +10011f7a: f894 20a1 ldrb.w r2, [r4, #161] ; 0xa1 +10011f7e: 2b00 cmp r3, #0 +10011f80: f040 8111 bne.w 100121a6 +10011f84: b922 cbnz r2, 10011f90 +10011f86: 2301 movs r3, #1 +10011f88: f884 e0a0 strb.w lr, [r4, #160] ; 0xa0 +10011f8c: f884 30a1 strb.w r3, [r4, #161] ; 0xa1 +10011f90: 682a ldr r2, [r5, #0] +10011f92: f8d4 e04c ldr.w lr, [r4, #76] ; 0x4c +10011f96: eba2 030e sub.w r3, r2, lr +10011f9a: 2b00 cmp r3, #0 +10011f9c: f300 811a bgt.w 100121d4 +10011fa0: 2300 movs r3, #0 +10011fa2: f8a4 3068 strh.w r3, [r4, #104] ; 0x68 +10011fa6: 4b89 ldr r3, [pc, #548] ; (100121cc ) +10011fa8: 881b ldrh r3, [r3, #0] +10011faa: 2b00 cmp r3, #0 +10011fac: f040 839a bne.w 100126e4 +10011fb0: f8b4 3064 ldrh.w r3, [r4, #100] ; 0x64 +10011fb4: 6de0 ldr r0, [r4, #92] ; 0x5c +10011fb6: 4439 add r1, r7 +10011fb8: 4403 add r3, r0 +10011fba: 4299 cmp r1, r3 +10011fbc: f040 8392 bne.w 100126e4 +10011fc0: f9b4 3038 ldrsh.w r3, [r4, #56] ; 0x38 +10011fc4: 2b00 cmp r3, #0 +10011fc6: f2c0 838d blt.w 100126e4 +10011fca: 4572 cmp r2, lr +10011fcc: f040 838a bne.w 100126e4 +10011fd0: f894 204b ldrb.w r2, [r4, #75] ; 0x4b +10011fd4: 1c53 adds r3, r2, #1 +10011fd6: b2db uxtb r3, r3 +10011fd8: 429a cmp r2, r3 +10011fda: bf38 it cc +10011fdc: f884 304b strbcc.w r3, [r4, #75] ; 0x4b +10011fe0: f894 304b ldrb.w r3, [r4, #75] ; 0x4b +10011fe4: 2b03 cmp r3, #3 +10011fe6: f240 80e3 bls.w 100121b0 +10011fea: f8b4 2050 ldrh.w r2, [r4, #80] ; 0x50 +10011fee: 8f63 ldrh r3, [r4, #58] ; 0x3a +10011ff0: 4413 add r3, r2 +10011ff2: b29b uxth r3, r3 +10011ff4: 429a cmp r2, r3 +10011ff6: d201 bcs.n 10011ffc +10011ff8: f8a4 3050 strh.w r3, [r4, #80] ; 0x50 +10011ffc: 6f23 ldr r3, [r4, #112] ; 0x70 +10011ffe: 2b00 cmp r3, #0 +10012000: f040 816b bne.w 100122da +10012004: 6be2 ldr r2, [r4, #60] ; 0x3c +10012006: 2a00 cmp r2, #0 +10012008: f040 81a9 bne.w 1001235e +1001200c: 4f6f ldr r7, [pc, #444] ; (100121cc ) +1001200e: 6ae2 ldr r2, [r4, #44] ; 0x2c +10012010: 8838 ldrh r0, [r7, #0] +10012012: 2800 cmp r0, #0 +10012014: f000 8359 beq.w 100126ca +10012018: 69a3 ldr r3, [r4, #24] +1001201a: 2b06 cmp r3, #6 +1001201c: f200 8355 bhi.w 100126ca +10012020: 6833 ldr r3, [r6, #0] +10012022: eba2 0e03 sub.w lr, r2, r3 +10012026: f1be 0f01 cmp.w lr, #1 +1001202a: f100 81c7 bmi.w 100123bc +1001202e: f1c3 0101 rsb r1, r3, #1 +10012032: 1a09 subs r1, r1, r0 +10012034: 4411 add r1, r2 +10012036: 2900 cmp r1, #0 +10012038: f300 81c0 bgt.w 100123bc +1001203c: 4d64 ldr r5, [pc, #400] ; (100121d0 ) +1001203e: 4671 mov r1, lr +10012040: 6868 ldr r0, [r5, #4] +10012042: 8943 ldrh r3, [r0, #10] +10012044: 459e cmp lr, r3 +10012046: f340 81b6 ble.w 100123b6 +1001204a: f04f 0e00 mov.w lr, #0 +1001204e: 8903 ldrh r3, [r0, #8] +10012050: 1a5b subs r3, r3, r1 +10012052: b29b uxth r3, r3 +10012054: 8942 ldrh r2, [r0, #10] +10012056: 4291 cmp r1, r2 +10012058: f300 81a7 bgt.w 100123aa +1001205c: 4249 negs r1, r1 +1001205e: b209 sxth r1, r1 +10012060: f7fe ffc6 bl 10010ff0 +10012064: 8929 ldrh r1, [r5, #8] +10012066: 6833 ldr r3, [r6, #0] +10012068: 6ae2 ldr r2, [r4, #44] ; 0x2c +1001206a: 440b add r3, r1 +1001206c: 1a9b subs r3, r3, r2 +1001206e: 812b strh r3, [r5, #8] +10012070: 692b ldr r3, [r5, #16] +10012072: 6032 str r2, [r6, #0] +10012074: 605a str r2, [r3, #4] +10012076: 6831 ldr r1, [r6, #0] +10012078: 6ae2 ldr r2, [r4, #44] ; 0x2c +1001207a: 1a8b subs r3, r1, r2 +1001207c: 2b00 cmp r3, #0 +1001207e: f2c0 831f blt.w 100126c0 +10012082: 1c4b adds r3, r1, #1 +10012084: 8e20 ldrh r0, [r4, #48] ; 0x30 +10012086: 1a9b subs r3, r3, r2 +10012088: 1a1b subs r3, r3, r0 +1001208a: 2b00 cmp r3, #0 +1001208c: f300 8318 bgt.w 100126c0 +10012090: 4291 cmp r1, r2 +10012092: f040 824d bne.w 10012530 +10012096: 4d4e ldr r5, [pc, #312] ; (100121d0 ) +10012098: 692b ldr r3, [r5, #16] +1001209a: f8b5 8008 ldrh.w r8, [r5, #8] +1001209e: 8998 ldrh r0, [r3, #12] +100120a0: f7fd fc65 bl 1000f96e +100120a4: f010 0003 ands.w r0, r0, #3 +100120a8: bf18 it ne +100120aa: 2001 movne r0, #1 +100120ac: 8e23 ldrh r3, [r4, #48] ; 0x30 +100120ae: 4440 add r0, r8 +100120b0: b280 uxth r0, r0 +100120b2: 4283 cmp r3, r0 +100120b4: 8038 strh r0, [r7, #0] +100120b6: d234 bcs.n 10012122 +100120b8: 692b ldr r3, [r5, #16] +100120ba: 8998 ldrh r0, [r3, #12] +100120bc: f7fd fc57 bl 1000f96e +100120c0: 07c2 lsls r2, r0, #31 +100120c2: d510 bpl.n 100120e6 +100120c4: f8d5 9010 ldr.w r9, [r5, #16] +100120c8: f8b9 800c ldrh.w r8, [r9, #12] +100120cc: 4640 mov r0, r8 +100120ce: f7fd fc4e bl 1000f96e +100120d2: f000 003e and.w r0, r0, #62 ; 0x3e +100120d6: f7fd fc47 bl 1000f968 +100120da: f428 587c bic.w r8, r8, #16128 ; 0x3f00 +100120de: ea48 0800 orr.w r8, r8, r0 +100120e2: f8a9 800c strh.w r8, [r9, #12] +100120e6: 8e23 ldrh r3, [r4, #48] ; 0x30 +100120e8: 812b strh r3, [r5, #8] +100120ea: 692b ldr r3, [r5, #16] +100120ec: 8998 ldrh r0, [r3, #12] +100120ee: f7fd fc3e bl 1000f96e +100120f2: 0783 lsls r3, r0, #30 +100120f4: bf48 it mi +100120f6: 892b ldrhmi r3, [r5, #8] +100120f8: 6868 ldr r0, [r5, #4] +100120fa: bf44 itt mi +100120fc: f103 33ff addmi.w r3, r3, #4294967295 +10012100: 812b strhmi r3, [r5, #8] +10012102: 8929 ldrh r1, [r5, #8] +10012104: f7ff f852 bl 100111ac +10012108: 692b ldr r3, [r5, #16] +1001210a: f8b5 8008 ldrh.w r8, [r5, #8] +1001210e: 8998 ldrh r0, [r3, #12] +10012110: f7fd fc2d bl 1000f96e +10012114: f010 0003 ands.w r0, r0, #3 +10012118: bf18 it ne +1001211a: 2001 movne r0, #1 +1001211c: 4480 add r8, r0 +1001211e: f8a7 8000 strh.w r8, [r7] +10012122: 6fa3 ldr r3, [r4, #120] ; 0x78 +10012124: 2b00 cmp r3, #0 +10012126: f000 815a beq.w 100123de +1001212a: 692b ldr r3, [r5, #16] +1001212c: 8998 ldrh r0, [r3, #12] +1001212e: f7fd fc1e bl 1000f96e +10012132: 07c0 lsls r0, r0, #31 +10012134: f100 8150 bmi.w 100123d8 +10012138: f8d4 8078 ldr.w r8, [r4, #120] ; 0x78 +1001213c: f1b8 0f00 cmp.w r8, #0 +10012140: d02e beq.n 100121a0 +10012142: f8d8 e010 ldr.w lr, [r8, #16] +10012146: 6830 ldr r0, [r6, #0] +10012148: 883b ldrh r3, [r7, #0] +1001214a: f8de 2004 ldr.w r2, [lr, #4] +1001214e: f8b8 1008 ldrh.w r1, [r8, #8] +10012152: 4403 add r3, r0 +10012154: 4411 add r1, r2 +10012156: 1a59 subs r1, r3, r1 +10012158: 2900 cmp r1, #0 +1001215a: f280 8173 bge.w 10012444 +1001215e: 1a9b subs r3, r3, r2 +10012160: 2b00 cmp r3, #0 +10012162: dd1d ble.n 100121a0 +10012164: 692b ldr r3, [r5, #16] +10012166: 1a12 subs r2, r2, r0 +10012168: 812a strh r2, [r5, #8] +1001216a: 8998 ldrh r0, [r3, #12] +1001216c: f7fd fbff bl 1000f96e +10012170: 0783 lsls r3, r0, #30 +10012172: bf48 it mi +10012174: 892b ldrhmi r3, [r5, #8] +10012176: 6868 ldr r0, [r5, #4] +10012178: bf44 itt mi +1001217a: f103 33ff addmi.w r3, r3, #4294967295 +1001217e: 812b strhmi r3, [r5, #8] +10012180: 8929 ldrh r1, [r5, #8] +10012182: f7ff f813 bl 100111ac +10012186: 692b ldr r3, [r5, #16] +10012188: f8b5 9008 ldrh.w r9, [r5, #8] +1001218c: 8998 ldrh r0, [r3, #12] +1001218e: f7fd fbee bl 1000f96e +10012192: f010 0003 ands.w r0, r0, #3 +10012196: bf18 it ne +10012198: 2001 movne r0, #1 +1001219a: 4481 add r9, r0 +1001219c: f8a7 9000 strh.w r9, [r7] +100121a0: f8c4 8078 str.w r8, [r4, #120] ; 0x78 +100121a4: e11b b.n 100123de +100121a6: 2a00 cmp r2, #0 +100121a8: f43f aef2 beq.w 10011f90 +100121ac: 2300 movs r3, #0 +100121ae: e6ed b.n 10011f8c +100121b0: f47f af24 bne.w 10011ffc +100121b4: 4620 mov r0, r4 +100121b6: f001 fbd3 bl 10013960 +100121ba: e71f b.n 10011ffc +100121bc: 1004b1c8 .word 0x1004b1c8 +100121c0: 1004b1e8 .word 0x1004b1e8 +100121c4: 1004b1c4 .word 0x1004b1c4 +100121c8: 1004b1f0 .word 0x1004b1f0 +100121cc: 1004b1f4 .word 0x1004b1f4 +100121d0: 1004b1cc .word 0x1004b1cc +100121d4: 6d61 ldr r1, [r4, #84] ; 0x54 +100121d6: 1a51 subs r1, r2, r1 +100121d8: 2900 cmp r1, #0 +100121da: dc7a bgt.n 100122d2 +100121dc: f894 1022 ldrb.w r1, [r4, #34] ; 0x22 +100121e0: f9b4 e044 ldrsh.w lr, [r4, #68] ; 0x44 +100121e4: 074f lsls r7, r1, #29 +100121e6: f04f 0700 mov.w r7, #0 +100121ea: bf42 ittt mi +100121ec: f021 0104 bicmi.w r1, r1, #4 +100121f0: f884 1022 strbmi.w r1, [r4, #34] ; 0x22 +100121f4: f8b4 1052 ldrhmi.w r1, [r4, #82] ; 0x52 +100121f8: b29b uxth r3, r3 +100121fa: bf48 it mi +100121fc: f8a4 1050 strhmi.w r1, [r4, #80] ; 0x50 +10012200: f8b4 1046 ldrh.w r1, [r4, #70] ; 0x46 +10012204: f8a4 3068 strh.w r3, [r4, #104] ; 0x68 +10012208: eb01 01ee add.w r1, r1, lr, asr #3 +1001220c: f8a4 1048 strh.w r1, [r4, #72] ; 0x48 +10012210: f8b4 106a ldrh.w r1, [r4, #106] ; 0x6a +10012214: 2803 cmp r0, #3 +10012216: 440b add r3, r1 +10012218: f884 704a strb.w r7, [r4, #74] ; 0x4a +1001221c: f8a4 306a strh.w r3, [r4, #106] ; 0x6a +10012220: f884 704b strb.w r7, [r4, #75] ; 0x4b +10012224: 64e2 str r2, [r4, #76] ; 0x4c +10012226: d90f bls.n 10012248 +10012228: f8b4 2050 ldrh.w r2, [r4, #80] ; 0x50 +1001222c: f8b4 3052 ldrh.w r3, [r4, #82] ; 0x52 +10012230: 4293 cmp r3, r2 +10012232: 8f63 ldrh r3, [r4, #58] ; 0x3a +10012234: bf9c itt ls +10012236: 435b mulls r3, r3 +10012238: fb93 f3f2 sdivls r3, r3, r2 +1001223c: 4413 add r3, r2 +1001223e: b29b uxth r3, r3 +10012240: 429a cmp r2, r3 +10012242: d201 bcs.n 10012248 +10012244: f8a4 3050 strh.w r3, [r4, #80] ; 0x50 +10012248: 6f63 ldr r3, [r4, #116] ; 0x74 +1001224a: b94b cbnz r3, 10012260 +1001224c: 6f62 ldr r2, [r4, #116] ; 0x74 +1001224e: 2300 movs r3, #0 +10012250: 2a00 cmp r2, #0 +10012252: d13c bne.n 100122ce +10012254: f64f 72ff movw r2, #65535 ; 0xffff +10012258: 8722 strh r2, [r4, #56] ; 0x38 +1001225a: f884 3023 strb.w r3, [r4, #35] ; 0x23 +1001225e: e6cd b.n 10011ffc +10012260: 691b ldr r3, [r3, #16] +10012262: 6858 ldr r0, [r3, #4] +10012264: f7fd fb88 bl 1000f978 +10012268: 6f63 ldr r3, [r4, #116] ; 0x74 +1001226a: 4607 mov r7, r0 +1001226c: f8b3 8008 ldrh.w r8, [r3, #8] +10012270: 691b ldr r3, [r3, #16] +10012272: 8998 ldrh r0, [r3, #12] +10012274: f7fd fb7b bl 1000f96e +10012278: f010 0003 ands.w r0, r0, #3 +1001227c: bf18 it ne +1001227e: 2001 movne r0, #1 +10012280: 682b ldr r3, [r5, #0] +10012282: 4440 add r0, r8 +10012284: 1aff subs r7, r7, r3 +10012286: 4438 add r0, r7 +10012288: 2800 cmp r0, #0 +1001228a: dcdf bgt.n 1001224c +1001228c: 6f67 ldr r7, [r4, #116] ; 0x74 +1001228e: 683b ldr r3, [r7, #0] +10012290: 6878 ldr r0, [r7, #4] +10012292: 6763 str r3, [r4, #116] ; 0x74 +10012294: f7fe ffa3 bl 100111de +10012298: f8b4 3068 ldrh.w r3, [r4, #104] ; 0x68 +1001229c: b15b cbz r3, 100122b6 +1001229e: 693b ldr r3, [r7, #16] +100122a0: 8998 ldrh r0, [r3, #12] +100122a2: f7fd fb64 bl 1000f96e +100122a6: 07c0 lsls r0, r0, #31 +100122a8: bf42 ittt mi +100122aa: f8b4 3068 ldrhmi.w r3, [r4, #104] ; 0x68 +100122ae: f103 33ff addmi.w r3, r3, #4294967295 +100122b2: f8a4 3068 strhmi.w r3, [r4, #104] ; 0x68 +100122b6: 6878 ldr r0, [r7, #4] +100122b8: f7fe ff91 bl 100111de +100122bc: f8b4 306c ldrh.w r3, [r4, #108] ; 0x6c +100122c0: 1a18 subs r0, r3, r0 +100122c2: f8a4 006c strh.w r0, [r4, #108] ; 0x6c +100122c6: 4638 mov r0, r7 +100122c8: f7ff f9a1 bl 1001160e +100122cc: e7bc b.n 10012248 +100122ce: 8723 strh r3, [r4, #56] ; 0x38 +100122d0: e7c3 b.n 1001225a +100122d2: 2300 movs r3, #0 +100122d4: f8a4 3068 strh.w r3, [r4, #104] ; 0x68 +100122d8: e690 b.n 10011ffc +100122da: 691b ldr r3, [r3, #16] +100122dc: 682f ldr r7, [r5, #0] +100122de: 6858 ldr r0, [r3, #4] +100122e0: f7fd fb4a bl 1000f978 +100122e4: 6f23 ldr r3, [r4, #112] ; 0x70 +100122e6: 4681 mov r9, r0 +100122e8: f8b3 8008 ldrh.w r8, [r3, #8] +100122ec: 691b ldr r3, [r3, #16] +100122ee: eba7 0709 sub.w r7, r7, r9 +100122f2: 8998 ldrh r0, [r3, #12] +100122f4: f7fd fb3b bl 1000f96e +100122f8: f010 0003 ands.w r0, r0, #3 +100122fc: bf18 it ne +100122fe: 2001 movne r0, #1 +10012300: 4440 add r0, r8 +10012302: 1a3f subs r7, r7, r0 +10012304: 2f00 cmp r7, #0 +10012306: f6ff ae7d blt.w 10012004 +1001230a: 682b ldr r3, [r5, #0] +1001230c: 6d62 ldr r2, [r4, #84] ; 0x54 +1001230e: 1a9b subs r3, r3, r2 +10012310: 2b00 cmp r3, #0 +10012312: f73f ae77 bgt.w 10012004 +10012316: 6f27 ldr r7, [r4, #112] ; 0x70 +10012318: 683b ldr r3, [r7, #0] +1001231a: 6723 str r3, [r4, #112] ; 0x70 +1001231c: b90b cbnz r3, 10012322 +1001231e: f8a4 306e strh.w r3, [r4, #110] ; 0x6e +10012322: 6878 ldr r0, [r7, #4] +10012324: f7fe ff5b bl 100111de +10012328: f8b4 3068 ldrh.w r3, [r4, #104] ; 0x68 +1001232c: b15b cbz r3, 10012346 +1001232e: 693b ldr r3, [r7, #16] +10012330: 8998 ldrh r0, [r3, #12] +10012332: f7fd fb1c bl 1000f96e +10012336: 07c1 lsls r1, r0, #31 +10012338: bf42 ittt mi +1001233a: f8b4 3068 ldrhmi.w r3, [r4, #104] ; 0x68 +1001233e: f103 33ff addmi.w r3, r3, #4294967295 +10012342: f8a4 3068 strhmi.w r3, [r4, #104] ; 0x68 +10012346: 6878 ldr r0, [r7, #4] +10012348: f7fe ff49 bl 100111de +1001234c: f8b4 306c ldrh.w r3, [r4, #108] ; 0x6c +10012350: 1a18 subs r0, r3, r0 +10012352: f8a4 006c strh.w r0, [r4, #108] ; 0x6c +10012356: 4638 mov r0, r7 +10012358: f7ff f959 bl 1001160e +1001235c: e64e b.n 10011ffc +1001235e: 6c23 ldr r3, [r4, #64] ; 0x40 +10012360: 6829 ldr r1, [r5, #0] +10012362: 1a5b subs r3, r3, r1 +10012364: 2b00 cmp r3, #0 +10012366: f6bf ae51 bge.w 1001200c +1001236a: 4ba4 ldr r3, [pc, #656] ; (100125fc ) +1001236c: f9b4 0044 ldrsh.w r0, [r4, #68] ; 0x44 +10012370: 6819 ldr r1, [r3, #0] +10012372: 1a89 subs r1, r1, r2 +10012374: eba1 01e0 sub.w r1, r1, r0, asr #3 +10012378: b289 uxth r1, r1 +1001237a: b20b sxth r3, r1 +1001237c: 2b00 cmp r3, #0 +1001237e: f9b4 2046 ldrsh.w r2, [r4, #70] ; 0x46 +10012382: 4408 add r0, r1 +10012384: bfbc itt lt +10012386: 4249 neglt r1, r1 +10012388: b20b sxthlt r3, r1 +1001238a: eba2 02a2 sub.w r2, r2, r2, asr #2 +1001238e: 4413 add r3, r2 +10012390: b200 sxth r0, r0 +10012392: b29b uxth r3, r3 +10012394: f8a4 3046 strh.w r3, [r4, #70] ; 0x46 +10012398: eb03 03e0 add.w r3, r3, r0, asr #3 +1001239c: f8a4 3048 strh.w r3, [r4, #72] ; 0x48 +100123a0: 2300 movs r3, #0 +100123a2: f8a4 0044 strh.w r0, [r4, #68] ; 0x44 +100123a6: 63e3 str r3, [r4, #60] ; 0x3c +100123a8: e630 b.n 1001200c +100123aa: 8103 strh r3, [r0, #8] +100123ac: f8a0 e00a strh.w lr, [r0, #10] +100123b0: 1a89 subs r1, r1, r2 +100123b2: 6800 ldr r0, [r0, #0] +100123b4: e64e b.n 10012054 +100123b6: f1ce 0100 rsb r1, lr, #0 +100123ba: e650 b.n 1001205e +100123bc: 1a9b subs r3, r3, r2 +100123be: 2b00 cmp r3, #0 +100123c0: bfbe ittt lt +100123c2: f894 3022 ldrblt.w r3, [r4, #34] ; 0x22 +100123c6: f043 0302 orrlt.w r3, r3, #2 +100123ca: f884 3022 strblt.w r3, [r4, #34] ; 0x22 +100123ce: e652 b.n 10012076 +100123d0: 6803 ldr r3, [r0, #0] +100123d2: 67a3 str r3, [r4, #120] ; 0x78 +100123d4: f7ff f91b bl 1001160e +100123d8: 6fa0 ldr r0, [r4, #120] ; 0x78 +100123da: 2800 cmp r0, #0 +100123dc: d1f8 bne.n 100123d0 +100123de: 8839 ldrh r1, [r7, #0] +100123e0: 8e23 ldrh r3, [r4, #48] ; 0x30 +100123e2: 6832 ldr r2, [r6, #0] +100123e4: 1a5b subs r3, r3, r1 +100123e6: 440a add r2, r1 +100123e8: 62e2 str r2, [r4, #44] ; 0x2c +100123ea: 8623 strh r3, [r4, #48] ; 0x30 +100123ec: 4620 mov r0, r4 +100123ee: f7ff f8d7 bl 100115a0 +100123f2: 686b ldr r3, [r5, #4] +100123f4: 891a ldrh r2, [r3, #8] +100123f6: b11a cbz r2, 10012400 +100123f8: 4a81 ldr r2, [pc, #516] ; (10012600 ) +100123fa: 6013 str r3, [r2, #0] +100123fc: 2300 movs r3, #0 +100123fe: 606b str r3, [r5, #4] +10012400: 692b ldr r3, [r5, #16] +10012402: f04f 0900 mov.w r9, #0 +10012406: 8998 ldrh r0, [r3, #12] +10012408: f7fd fab1 bl 1000f96e +1001240c: 07c5 lsls r5, r0, #31 +1001240e: bf48 it mi +10012410: 4a7c ldrmi r2, [pc, #496] ; (10012604 ) +10012412: 4f7b ldr r7, [pc, #492] ; (10012600 ) +10012414: bf48 it mi +10012416: 7813 ldrbmi r3, [r2, #0] +10012418: f8df 81e8 ldr.w r8, [pc, #488] ; 10012604 +1001241c: bf44 itt mi +1001241e: f043 0320 orrmi.w r3, r3, #32 +10012422: 7013 strbmi r3, [r2, #0] +10012424: 6fa5 ldr r5, [r4, #120] ; 0x78 +10012426: b125 cbz r5, 10012432 +10012428: 6929 ldr r1, [r5, #16] +1001242a: 6ae2 ldr r2, [r4, #44] ; 0x2c +1001242c: 684b ldr r3, [r1, #4] +1001242e: 4293 cmp r3, r2 +10012430: d033 beq.n 1001249a +10012432: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10012436: 07d9 lsls r1, r3, #31 +10012438: d574 bpl.n 10012524 +1001243a: f023 0301 bic.w r3, r3, #1 +1001243e: f043 0302 orr.w r3, r3, #2 +10012442: e071 b.n 10012528 +10012444: f8be 000c ldrh.w r0, [lr, #12] +10012448: f7fd fa91 bl 1000f96e +1001244c: 07c1 lsls r1, r0, #31 +1001244e: d51d bpl.n 1001248c +10012450: 692b ldr r3, [r5, #16] +10012452: 8998 ldrh r0, [r3, #12] +10012454: f7fd fa8b bl 1000f96e +10012458: 0782 lsls r2, r0, #30 +1001245a: d417 bmi.n 1001248c +1001245c: f8d5 a010 ldr.w sl, [r5, #16] +10012460: 2001 movs r0, #1 +10012462: f8ba 900c ldrh.w r9, [sl, #12] +10012466: f7fd fa7f bl 1000f968 +1001246a: 692b ldr r3, [r5, #16] +1001246c: ea49 0000 orr.w r0, r9, r0 +10012470: f8aa 000c strh.w r0, [sl, #12] +10012474: 8998 ldrh r0, [r3, #12] +10012476: f8b5 9008 ldrh.w r9, [r5, #8] +1001247a: f7fd fa78 bl 1000f96e +1001247e: f010 0003 ands.w r0, r0, #3 +10012482: bf18 it ne +10012484: 2001 movne r0, #1 +10012486: 4481 add r9, r0 +10012488: f8a7 9000 strh.w r9, [r7] +1001248c: f8d8 9000 ldr.w r9, [r8] +10012490: 4640 mov r0, r8 +10012492: f7ff f8bc bl 1001160e +10012496: 46c8 mov r8, r9 +10012498: e650 b.n 1001213c +1001249a: 6033 str r3, [r6, #0] +1001249c: 8988 ldrh r0, [r1, #12] +1001249e: f8b5 a008 ldrh.w sl, [r5, #8] +100124a2: f7fd fa64 bl 1000f96e +100124a6: f010 0003 ands.w r0, r0, #3 +100124aa: bf18 it ne +100124ac: 2001 movne r0, #1 +100124ae: 6ae3 ldr r3, [r4, #44] ; 0x2c +100124b0: 4450 add r0, sl +100124b2: 4418 add r0, r3 +100124b4: 692b ldr r3, [r5, #16] +100124b6: 62e0 str r0, [r4, #44] ; 0x2c +100124b8: 8998 ldrh r0, [r3, #12] +100124ba: f7fd fa58 bl 1000f96e +100124be: 692b ldr r3, [r5, #16] +100124c0: f8b5 a008 ldrh.w sl, [r5, #8] +100124c4: 8998 ldrh r0, [r3, #12] +100124c6: f7fd fa52 bl 1000f96e +100124ca: f010 0003 ands.w r0, r0, #3 +100124ce: bf18 it ne +100124d0: 2001 movne r0, #1 +100124d2: 8e23 ldrh r3, [r4, #48] ; 0x30 +100124d4: 4450 add r0, sl +100124d6: 1a18 subs r0, r3, r0 +100124d8: 8620 strh r0, [r4, #48] ; 0x30 +100124da: 4620 mov r0, r4 +100124dc: f7ff f860 bl 100115a0 +100124e0: 6869 ldr r1, [r5, #4] +100124e2: 890b ldrh r3, [r1, #8] +100124e4: b12b cbz r3, 100124f2 +100124e6: 6838 ldr r0, [r7, #0] +100124e8: b1d0 cbz r0, 10012520 +100124ea: f7fe fe8d bl 10011208 +100124ee: f8c5 9004 str.w r9, [r5, #4] +100124f2: 692b ldr r3, [r5, #16] +100124f4: 8998 ldrh r0, [r3, #12] +100124f6: f7fd fa3a bl 1000f96e +100124fa: 07c0 lsls r0, r0, #31 +100124fc: d50a bpl.n 10012514 +100124fe: f898 3000 ldrb.w r3, [r8] +10012502: f043 0320 orr.w r3, r3, #32 +10012506: f888 3000 strb.w r3, [r8] +1001250a: 69a3 ldr r3, [r4, #24] +1001250c: 2b04 cmp r3, #4 +1001250e: bf04 itt eq +10012510: 2307 moveq r3, #7 +10012512: 61a3 streq r3, [r4, #24] +10012514: 682b ldr r3, [r5, #0] +10012516: 4628 mov r0, r5 +10012518: 67a3 str r3, [r4, #120] ; 0x78 +1001251a: f7ff f878 bl 1001160e +1001251e: e781 b.n 10012424 +10012520: 6039 str r1, [r7, #0] +10012522: e7e4 b.n 100124ee +10012524: f043 0301 orr.w r3, r3, #1 +10012528: f884 3022 strb.w r3, [r4, #34] ; 0x22 +1001252c: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10012530: 4620 mov r0, r4 +10012532: f001 f81a bl 1001356a +10012536: 6fa5 ldr r5, [r4, #120] ; 0x78 +10012538: b92d cbnz r5, 10012546 +1001253a: 4833 ldr r0, [pc, #204] ; (10012608 ) +1001253c: f7ff f87e bl 1001163c +10012540: 67a0 str r0, [r4, #120] ; 0x78 +10012542: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10012546: f04f 0800 mov.w r8, #0 +1001254a: 6833 ldr r3, [r6, #0] +1001254c: f103 3eff add.w lr, r3, #4294967295 +10012550: f103 0c01 add.w ip, r3, #1 +10012554: 6928 ldr r0, [r5, #16] +10012556: 6842 ldr r2, [r0, #4] +10012558: 429a cmp r2, r3 +1001255a: d118 bne.n 1001258e +1001255c: 482a ldr r0, [pc, #168] ; (10012608 ) +1001255e: 892b ldrh r3, [r5, #8] +10012560: 8902 ldrh r2, [r0, #8] +10012562: 429a cmp r2, r3 +10012564: f240 80c2 bls.w 100126ec +10012568: f7ff f868 bl 1001163c +1001256c: 2800 cmp r0, #0 +1001256e: f000 80bd beq.w 100126ec +10012572: f1b8 0f00 cmp.w r8, #0 +10012576: d008 beq.n 1001258a +10012578: f8c8 0000 str.w r0, [r8] +1001257c: 4629 mov r1, r5 +1001257e: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10012582: f7ff bc8b b.w 10011e9c +10012586: 460d mov r5, r1 +10012588: e7e4 b.n 10012554 +1001258a: 67a0 str r0, [r4, #120] ; 0x78 +1001258c: e7f6 b.n 1001257c +1001258e: f1b8 0f00 cmp.w r8, #0 +10012592: d10a bne.n 100125aa +10012594: 1a99 subs r1, r3, r2 +10012596: 2900 cmp r1, #0 +10012598: da38 bge.n 1001260c +1001259a: 481b ldr r0, [pc, #108] ; (10012608 ) +1001259c: f7ff f84e bl 1001163c +100125a0: 2800 cmp r0, #0 +100125a2: f000 80a3 beq.w 100126ec +100125a6: 67a0 str r0, [r4, #120] ; 0x78 +100125a8: e7e8 b.n 1001257c +100125aa: f8d8 1010 ldr.w r1, [r8, #16] +100125ae: 6849 ldr r1, [r1, #4] +100125b0: ebae 0101 sub.w r1, lr, r1 +100125b4: 2900 cmp r1, #0 +100125b6: db29 blt.n 1001260c +100125b8: ebac 0102 sub.w r1, ip, r2 +100125bc: 2900 cmp r1, #0 +100125be: dc25 bgt.n 1001260c +100125c0: 4811 ldr r0, [pc, #68] ; (10012608 ) +100125c2: f7ff f83b bl 1001163c +100125c6: 4604 mov r4, r0 +100125c8: 2800 cmp r0, #0 +100125ca: f000 808f beq.w 100126ec +100125ce: f8d8 3010 ldr.w r3, [r8, #16] +100125d2: 6831 ldr r1, [r6, #0] +100125d4: 685a ldr r2, [r3, #4] +100125d6: f8b8 3008 ldrh.w r3, [r8, #8] +100125da: 4413 add r3, r2 +100125dc: 1a5b subs r3, r3, r1 +100125de: 2b00 cmp r3, #0 +100125e0: dd07 ble.n 100125f2 +100125e2: 1a89 subs r1, r1, r2 +100125e4: b289 uxth r1, r1 +100125e6: f8a8 1008 strh.w r1, [r8, #8] +100125ea: f8d8 0004 ldr.w r0, [r8, #4] +100125ee: f7fe fddd bl 100111ac +100125f2: f8c8 4000 str.w r4, [r8] +100125f6: 4629 mov r1, r5 +100125f8: 4620 mov r0, r4 +100125fa: e7c0 b.n 1001257e +100125fc: 1004b1b4 .word 0x1004b1b4 +10012600: 1004b1e0 .word 0x1004b1e0 +10012604: 1004b1e4 .word 0x1004b1e4 +10012608: 1004b1cc .word 0x1004b1cc +1001260c: 6829 ldr r1, [r5, #0] +1001260e: 46a8 mov r8, r5 +10012610: 2900 cmp r1, #0 +10012612: d1b8 bne.n 10012586 +10012614: 1a9b subs r3, r3, r2 +10012616: 2b00 cmp r3, #0 +10012618: dd68 ble.n 100126ec +1001261a: 8980 ldrh r0, [r0, #12] +1001261c: f7fd f9a7 bl 1000f96e +10012620: 07c2 lsls r2, r0, #31 +10012622: d463 bmi.n 100126ec +10012624: 4832 ldr r0, [pc, #200] ; (100126f0 ) +10012626: f7ff f809 bl 1001163c +1001262a: 6028 str r0, [r5, #0] +1001262c: 2800 cmp r0, #0 +1001262e: d05d beq.n 100126ec +10012630: 692b ldr r3, [r5, #16] +10012632: 6831 ldr r1, [r6, #0] +10012634: 685a ldr r2, [r3, #4] +10012636: 892b ldrh r3, [r5, #8] +10012638: 4413 add r3, r2 +1001263a: 1a5b subs r3, r3, r1 +1001263c: 2b00 cmp r3, #0 +1001263e: dd05 ble.n 1001264c +10012640: 1a89 subs r1, r1, r2 +10012642: b289 uxth r1, r1 +10012644: 8129 strh r1, [r5, #8] +10012646: 6868 ldr r0, [r5, #4] +10012648: f7fe fdb0 bl 100111ac +1001264c: 6833 ldr r3, [r6, #0] +1001264e: 883a ldrh r2, [r7, #0] +10012650: 6ae1 ldr r1, [r4, #44] ; 0x2c +10012652: 441a add r2, r3 +10012654: 8e23 ldrh r3, [r4, #48] ; 0x30 +10012656: 440b add r3, r1 +10012658: 429a cmp r2, r3 +1001265a: d947 bls.n 100126ec +1001265c: 682b ldr r3, [r5, #0] +1001265e: 691b ldr r3, [r3, #16] +10012660: 8998 ldrh r0, [r3, #12] +10012662: f7fd f984 bl 1000f96e +10012666: 07c3 lsls r3, r0, #31 +10012668: d511 bpl.n 1001268e +1001266a: 682b ldr r3, [r5, #0] +1001266c: f8d3 9010 ldr.w r9, [r3, #16] +10012670: f8b9 800c ldrh.w r8, [r9, #12] +10012674: 4640 mov r0, r8 +10012676: f7fd f97a bl 1000f96e +1001267a: f000 003e and.w r0, r0, #62 ; 0x3e +1001267e: f7fd f973 bl 1000f968 +10012682: f428 587c bic.w r8, r8, #16128 ; 0x3f00 +10012686: ea48 0800 orr.w r8, r8, r0 +1001268a: f8a9 800c strh.w r8, [r9, #12] +1001268e: 8e21 ldrh r1, [r4, #48] ; 0x30 +10012690: 6832 ldr r2, [r6, #0] +10012692: 682b ldr r3, [r5, #0] +10012694: 1a89 subs r1, r1, r2 +10012696: 6ae2 ldr r2, [r4, #44] ; 0x2c +10012698: 6858 ldr r0, [r3, #4] +1001269a: 4411 add r1, r2 +1001269c: b289 uxth r1, r1 +1001269e: 8119 strh r1, [r3, #8] +100126a0: f7fe fd84 bl 100111ac +100126a4: 682b ldr r3, [r5, #0] +100126a6: 891c ldrh r4, [r3, #8] +100126a8: 691b ldr r3, [r3, #16] +100126aa: 8998 ldrh r0, [r3, #12] +100126ac: f7fd f95f bl 1000f96e +100126b0: f010 0003 ands.w r0, r0, #3 +100126b4: bf18 it ne +100126b6: 2001 movne r0, #1 +100126b8: 4404 add r4, r0 +100126ba: 803c strh r4, [r7, #0] +100126bc: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +100126c0: 4620 mov r0, r4 +100126c2: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +100126c6: f000 bf50 b.w 1001356a +100126ca: 6833 ldr r3, [r6, #0] +100126cc: 1a99 subs r1, r3, r2 +100126ce: 2900 cmp r1, #0 +100126d0: db05 blt.n 100126de +100126d2: 3301 adds r3, #1 +100126d4: 1a9b subs r3, r3, r2 +100126d6: 8e22 ldrh r2, [r4, #48] ; 0x30 +100126d8: 1a9b subs r3, r3, r2 +100126da: 2b00 cmp r3, #0 +100126dc: dd06 ble.n 100126ec +100126de: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +100126e2: e6ac b.n 1001243e +100126e4: 2300 movs r3, #0 +100126e6: f884 304b strb.w r3, [r4, #75] ; 0x4b +100126ea: e487 b.n 10011ffc +100126ec: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +100126f0: 1004b1cc .word 0x1004b1cc + +100126f4 : +100126f4: b5f8 push {r3, r4, r5, r6, r7, lr} +100126f6: 4e1f ldr r6, [pc, #124] ; (10012774 ) +100126f8: 4604 mov r4, r0 +100126fa: 6835 ldr r5, [r6, #0] +100126fc: 89a8 ldrh r0, [r5, #12] +100126fe: f7fd f936 bl 1000f96e +10012702: f3c0 300f ubfx r0, r0, #12, #16 +10012706: 2805 cmp r0, #5 +10012708: d90f bls.n 1001272a +1001270a: 6833 ldr r3, [r6, #0] +1001270c: f240 57b4 movw r7, #1460 ; 0x5b4 +10012710: 8998 ldrh r0, [r3, #12] +10012712: f7fd f92c bl 1000f96e +10012716: f240 56b3 movw r6, #1459 ; 0x5b3 +1001271a: 2300 movs r3, #0 +1001271c: 0b00 lsrs r0, r0, #12 +1001271e: 3805 subs r0, #5 +10012720: 0080 lsls r0, r0, #2 +10012722: 3514 adds r5, #20 +10012724: b280 uxth r0, r0 +10012726: 4298 cmp r0, r3 +10012728: d800 bhi.n 1001272c +1001272a: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001272c: 5cea ldrb r2, [r5, r3] +1001272e: 2a01 cmp r2, #1 +10012730: d009 beq.n 10012746 +10012732: d3fa bcc.n 1001272a +10012734: 2a02 cmp r2, #2 +10012736: eb05 0103 add.w r1, r5, r3 +1001273a: d007 beq.n 1001274c +1001273c: 784a ldrb r2, [r1, #1] +1001273e: 2a00 cmp r2, #0 +10012740: d0f3 beq.n 1001272a +10012742: 4413 add r3, r2 +10012744: e000 b.n 10012748 +10012746: 3301 adds r3, #1 +10012748: b29b uxth r3, r3 +1001274a: e7ec b.n 10012726 +1001274c: 784a ldrb r2, [r1, #1] +1001274e: 2a04 cmp r2, #4 +10012750: d1eb bne.n 1001272a +10012752: 1cda adds r2, r3, #3 +10012754: 4282 cmp r2, r0 +10012756: dae8 bge.n 1001272a +10012758: f891 e002 ldrb.w lr, [r1, #2] +1001275c: 78ca ldrb r2, [r1, #3] +1001275e: 3304 adds r3, #4 +10012760: ea42 220e orr.w r2, r2, lr, lsl #8 +10012764: 1e51 subs r1, r2, #1 +10012766: b289 uxth r1, r1 +10012768: 42b1 cmp r1, r6 +1001276a: bf88 it hi +1001276c: 463a movhi r2, r7 +1001276e: 8022 strh r2, [r4, #0] +10012770: e7ea b.n 10012748 +10012772: bf00 nop +10012774: 1004b1f0 .word 0x1004b1f0 + +10012778 : +10012778: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001277c: 6843 ldr r3, [r0, #4] +1001277e: 460f mov r7, r1 +10012780: 7819 ldrb r1, [r3, #0] +10012782: 4db0 ldr r5, [pc, #704] ; (10012a44 ) +10012784: f001 010f and.w r1, r1, #15 +10012788: 0089 lsls r1, r1, #2 +1001278a: 440b add r3, r1 +1001278c: b089 sub sp, #36 ; 0x24 +1001278e: 4249 negs r1, r1 +10012790: 4606 mov r6, r0 +10012792: 602b str r3, [r5, #0] +10012794: f7fe fc2c bl 10010ff0 +10012798: 2800 cmp r0, #0 +1001279a: f040 8102 bne.w 100129a2 +1001279e: 8933 ldrh r3, [r6, #8] +100127a0: 2b13 cmp r3, #19 +100127a2: f240 80fe bls.w 100129a2 +100127a6: 4ca8 ldr r4, [pc, #672] ; (10012a48 ) +100127a8: 4639 mov r1, r7 +100127aa: 6820 ldr r0, [r4, #0] +100127ac: f7fc fd8b bl 1000f2c6 +100127b0: 46a0 mov r8, r4 +100127b2: 2800 cmp r0, #0 +100127b4: f040 80f5 bne.w 100129a2 +100127b8: 6823 ldr r3, [r4, #0] +100127ba: f003 03f0 and.w r3, r3, #240 ; 0xf0 +100127be: 2be0 cmp r3, #224 ; 0xe0 +100127c0: f000 80ef beq.w 100129a2 +100127c4: 8933 ldrh r3, [r6, #8] +100127c6: 4ca1 ldr r4, [pc, #644] ; (10012a4c ) +100127c8: 9300 str r3, [sp, #0] +100127ca: 4642 mov r2, r8 +100127cc: 2306 movs r3, #6 +100127ce: 4621 mov r1, r4 +100127d0: 4630 mov r0, r6 +100127d2: f7fc fb25 bl 1000ee20 +100127d6: 9406 str r4, [sp, #24] +100127d8: 2800 cmp r0, #0 +100127da: f040 80e2 bne.w 100129a2 +100127de: 682b ldr r3, [r5, #0] +100127e0: 8998 ldrh r0, [r3, #12] +100127e2: f7fd f8c4 bl 1000f96e +100127e6: 0b00 lsrs r0, r0, #12 +100127e8: ebc0 3080 rsb r0, r0, r0, lsl #14 +100127ec: 0081 lsls r1, r0, #2 +100127ee: b209 sxth r1, r1 +100127f0: 4630 mov r0, r6 +100127f2: f7fe fbfd bl 10010ff0 +100127f6: 4607 mov r7, r0 +100127f8: 2800 cmp r0, #0 +100127fa: f040 80d2 bne.w 100129a2 +100127fe: 682c ldr r4, [r5, #0] +10012800: f8df 926c ldr.w r9, [pc, #620] ; 10012a70 +10012804: 8820 ldrh r0, [r4, #0] +10012806: f7fd f8b2 bl 1000f96e +1001280a: 8020 strh r0, [r4, #0] +1001280c: 682c ldr r4, [r5, #0] +1001280e: f8df a264 ldr.w sl, [pc, #612] ; 10012a74 +10012812: 8860 ldrh r0, [r4, #2] +10012814: f7fd f8ab bl 1000f96e +10012818: 8060 strh r0, [r4, #2] +1001281a: 682c ldr r4, [r5, #0] +1001281c: 6860 ldr r0, [r4, #4] +1001281e: f7fd f8ab bl 1000f978 +10012822: 6060 str r0, [r4, #4] +10012824: 682c ldr r4, [r5, #0] +10012826: f8c9 0000 str.w r0, [r9] +1001282a: 68a0 ldr r0, [r4, #8] +1001282c: f7fd f8a4 bl 1000f978 +10012830: 4b87 ldr r3, [pc, #540] ; (10012a50 ) +10012832: 60a0 str r0, [r4, #8] +10012834: 682c ldr r4, [r5, #0] +10012836: 6018 str r0, [r3, #0] +10012838: 89e0 ldrh r0, [r4, #14] +1001283a: f7fd f898 bl 1000f96e +1001283e: 682b ldr r3, [r5, #0] +10012840: 81e0 strh r0, [r4, #14] +10012842: 8998 ldrh r0, [r3, #12] +10012844: f7fd f893 bl 1000f96e +10012848: b2c3 uxtb r3, r0 +1001284a: f013 0b03 ands.w fp, r3, #3 +1001284e: bf18 it ne +10012850: f04f 0b01 movne.w fp, #1 +10012854: 9702 str r7, [sp, #8] +10012856: 464f mov r7, r9 +10012858: 4a7e ldr r2, [pc, #504] ; (10012a54 ) +1001285a: f003 013f and.w r1, r3, #63 ; 0x3f +1001285e: 7011 strb r1, [r2, #0] +10012860: 497d ldr r1, [pc, #500] ; (10012a58 ) +10012862: 9806 ldr r0, [sp, #24] +10012864: 680a ldr r2, [r1, #0] +10012866: f8b6 e008 ldrh.w lr, [r6, #8] +1001286a: 9205 str r2, [sp, #20] +1001286c: 44f3 add fp, lr +1001286e: f8d0 c000 ldr.w ip, [r0] +10012872: f8d8 0000 ldr.w r0, [r8] +10012876: fa1f fb8b uxth.w fp, fp +1001287a: 682a ldr r2, [r5, #0] +1001287c: 9c05 ldr r4, [sp, #20] +1001287e: f8aa b000 strh.w fp, [sl] +10012882: 9003 str r0, [sp, #12] +10012884: f8cd a010 str.w sl, [sp, #16] +10012888: 9107 str r1, [sp, #28] +1001288a: b914 cbnz r4, 10012892 +1001288c: 4973 ldr r1, [pc, #460] ; (10012a5c ) +1001288e: 6808 ldr r0, [r1, #0] +10012890: e08e b.n 100129b0 +10012892: f8b4 9020 ldrh.w r9, [r4, #32] +10012896: 8811 ldrh r1, [r2, #0] +10012898: 4589 cmp r9, r1 +1001289a: d147 bne.n 1001292c +1001289c: f8b4 901e ldrh.w r9, [r4, #30] +100128a0: 8851 ldrh r1, [r2, #2] +100128a2: 4589 cmp r9, r1 +100128a4: d142 bne.n 1001292c +100128a6: 6861 ldr r1, [r4, #4] +100128a8: 4561 cmp r1, ip +100128aa: d13f bne.n 1001292c +100128ac: 6821 ldr r1, [r4, #0] +100128ae: 4608 mov r0, r1 +100128b0: 9903 ldr r1, [sp, #12] +100128b2: 4288 cmp r0, r1 +100128b4: d13a bne.n 1001292c +100128b6: 9802 ldr r0, [sp, #8] +100128b8: 68e1 ldr r1, [r4, #12] +100128ba: b120 cbz r0, 100128c6 +100128bc: 60c1 str r1, [r0, #12] +100128be: 9905 ldr r1, [sp, #20] +100128c0: 60e1 str r1, [r4, #12] +100128c2: 4965 ldr r1, [pc, #404] ; (10012a58 ) +100128c4: 600c str r4, [r1, #0] +100128c6: 2000 movs r0, #0 +100128c8: 4965 ldr r1, [pc, #404] ; (10012a60 ) +100128ca: f8df 81ac ldr.w r8, [pc, #428] ; 10012a78 +100128ce: 610a str r2, [r1, #16] +100128d0: 4a64 ldr r2, [pc, #400] ; (10012a64 ) +100128d2: f013 0f08 tst.w r3, #8 +100128d6: 6008 str r0, [r1, #0] +100128d8: f8a1 e008 strh.w lr, [r1, #8] +100128dc: 604e str r6, [r1, #4] +100128de: 6010 str r0, [r2, #0] +100128e0: f888 0000 strb.w r0, [r8] +100128e4: 4692 mov sl, r2 +100128e6: 4689 mov r9, r1 +100128e8: d003 beq.n 100128f2 +100128ea: 7b73 ldrb r3, [r6, #13] +100128ec: f043 0301 orr.w r3, r3, #1 +100128f0: 7373 strb r3, [r6, #13] +100128f2: 6fe3 ldr r3, [r4, #124] ; 0x7c +100128f4: f8df b184 ldr.w fp, [pc, #388] ; 10012a7c +100128f8: 2b00 cmp r3, #0 +100128fa: f040 8115 bne.w 10012b28 +100128fe: 4e55 ldr r6, [pc, #340] ; (10012a54 ) +10012900: f8cb 4000 str.w r4, [fp] +10012904: 7833 ldrb r3, [r6, #0] +10012906: 0759 lsls r1, r3, #29 +10012908: f100 812b bmi.w 10012b62 +1001290c: f013 0f02 tst.w r3, #2 +10012910: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10012914: f000 8155 beq.w 10012bc2 +10012918: 69a2 ldr r2, [r4, #24] +1001291a: 3a02 subs r2, #2 +1001291c: 2a01 cmp r2, #1 +1001291e: f240 8150 bls.w 10012bc2 +10012922: f043 0302 orr.w r3, r3, #2 +10012926: f884 3022 strb.w r3, [r4, #34] ; 0x22 +1001292a: e136 b.n 10012b9a +1001292c: 9402 str r4, [sp, #8] +1001292e: 68e4 ldr r4, [r4, #12] +10012930: e7ab b.n 1001288a +10012932: 8c01 ldrh r1, [r0, #32] +10012934: f8b2 e000 ldrh.w lr, [r2] +10012938: 458e cmp lr, r1 +1001293a: d138 bne.n 100129ae +1001293c: 8bc1 ldrh r1, [r0, #30] +1001293e: f8b2 9002 ldrh.w r9, [r2, #2] +10012942: 4589 cmp r9, r1 +10012944: d133 bne.n 100129ae +10012946: 6841 ldr r1, [r0, #4] +10012948: 458c cmp ip, r1 +1001294a: d130 bne.n 100129ae +1001294c: 6801 ldr r1, [r0, #0] +1001294e: 460c mov r4, r1 +10012950: 9903 ldr r1, [sp, #12] +10012952: 42a1 cmp r1, r4 +10012954: d12b bne.n 100129ae +10012956: 0759 lsls r1, r3, #29 +10012958: d423 bmi.n 100129a2 +1001295a: 079a lsls r2, r3, #30 +1001295c: d511 bpl.n 10012982 +1001295e: 6839 ldr r1, [r7, #0] +10012960: 6ac3 ldr r3, [r0, #44] ; 0x2c +10012962: 1acb subs r3, r1, r3 +10012964: d412 bmi.n 1001298c +10012966: 8e02 ldrh r2, [r0, #48] ; 0x30 +10012968: 1a9b subs r3, r3, r2 +1001296a: 2b00 cmp r3, #0 +1001296c: dc0e bgt.n 1001298c +1001296e: e88d 4200 stmia.w sp, {r9, lr} +10012972: 4b36 ldr r3, [pc, #216] ; (10012a4c ) +10012974: 4a34 ldr r2, [pc, #208] ; (10012a48 ) +10012976: 4459 add r1, fp +10012978: 4835 ldr r0, [pc, #212] ; (10012a50 ) +1001297a: 6800 ldr r0, [r0, #0] +1001297c: f000 ff66 bl 1001384c +10012980: e00f b.n 100129a2 +10012982: 07dd lsls r5, r3, #31 +10012984: bf42 ittt mi +10012986: 4b38 ldrmi r3, [pc, #224] ; (10012a68 ) +10012988: 681b ldrmi r3, [r3, #0] +1001298a: 6283 strmi r3, [r0, #40] ; 0x28 +1001298c: f1bb 0f00 cmp.w fp, #0 +10012990: d007 beq.n 100129a2 +10012992: f890 3022 ldrb.w r3, [r0, #34] ; 0x22 +10012996: f043 0302 orr.w r3, r3, #2 +1001299a: f880 3022 strb.w r3, [r0, #34] ; 0x22 +1001299e: f000 fe13 bl 100135c8 +100129a2: 4630 mov r0, r6 +100129a4: b009 add sp, #36 ; 0x24 +100129a6: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100129aa: f7fe bb4c b.w 10011046 +100129ae: 68c0 ldr r0, [r0, #12] +100129b0: 2800 cmp r0, #0 +100129b2: d1be bne.n 10012932 +100129b4: 492d ldr r1, [pc, #180] ; (10012a6c ) +100129b6: 4681 mov r9, r0 +100129b8: f8d1 e000 ldr.w lr, [r1] +100129bc: 9002 str r0, [sp, #8] +100129be: 4671 mov r1, lr +100129c0: b999 cbnz r1, 100129ea +100129c2: f1b9 0f00 cmp.w r9, #0 +100129c6: d127 bne.n 10012a18 +100129c8: 8990 ldrh r0, [r2, #12] +100129ca: f7fc ffd0 bl 1000f96e +100129ce: 0743 lsls r3, r0, #29 +100129d0: d4e7 bmi.n 100129a2 +100129d2: 682b ldr r3, [r5, #0] +100129d4: 9a04 ldr r2, [sp, #16] +100129d6: 6839 ldr r1, [r7, #0] +100129d8: 8810 ldrh r0, [r2, #0] +100129da: 881a ldrh r2, [r3, #0] +100129dc: 4401 add r1, r0 +100129de: 9201 str r2, [sp, #4] +100129e0: 885b ldrh r3, [r3, #2] +100129e2: 4a19 ldr r2, [pc, #100] ; (10012a48 ) +100129e4: 9300 str r3, [sp, #0] +100129e6: 4b19 ldr r3, [pc, #100] ; (10012a4c ) +100129e8: e7c6 b.n 10012978 +100129ea: f8b1 a01e ldrh.w sl, [r1, #30] +100129ee: f8b2 c002 ldrh.w ip, [r2, #2] +100129f2: 45e2 cmp sl, ip +100129f4: d10b bne.n 10012a0e +100129f6: f8d1 c000 ldr.w ip, [r1] +100129fa: 9c03 ldr r4, [sp, #12] +100129fc: 4564 cmp r4, ip +100129fe: d009 beq.n 10012a14 +10012a00: f1bc 0f00 cmp.w ip, #0 +10012a04: 9c02 ldr r4, [sp, #8] +10012a06: bf04 itt eq +10012a08: 4604 moveq r4, r0 +10012a0a: 4689 moveq r9, r1 +10012a0c: 9402 str r4, [sp, #8] +10012a0e: 4608 mov r0, r1 +10012a10: 68c9 ldr r1, [r1, #12] +10012a12: e7d5 b.n 100129c0 +10012a14: 4689 mov r9, r1 +10012a16: 9002 str r0, [sp, #8] +10012a18: 9902 ldr r1, [sp, #8] +10012a1a: b141 cbz r1, 10012a2e +10012a1c: f8d9 100c ldr.w r1, [r9, #12] +10012a20: 9802 ldr r0, [sp, #8] +10012a22: 60c1 str r1, [r0, #12] +10012a24: 4911 ldr r1, [pc, #68] ; (10012a6c ) +10012a26: f8c9 e00c str.w lr, [r9, #12] +10012a2a: f8c1 9000 str.w r9, [r1] +10012a2e: 075c lsls r4, r3, #29 +10012a30: d4b7 bmi.n 100129a2 +10012a32: f013 0410 ands.w r4, r3, #16 +10012a36: d023 beq.n 10012a80 +10012a38: 8813 ldrh r3, [r2, #0] +10012a3a: 6839 ldr r1, [r7, #0] +10012a3c: 9301 str r3, [sp, #4] +10012a3e: 8853 ldrh r3, [r2, #2] +10012a40: 9300 str r3, [sp, #0] +10012a42: e796 b.n 10012972 +10012a44: 1004b1f0 .word 0x1004b1f0 +10012a48: 1004aab0 .word 0x1004aab0 +10012a4c: 1004aab4 .word 0x1004aab4 +10012a50: 1004b1c4 .word 0x1004b1c4 +10012a54: 1004b1c8 .word 0x1004b1c8 +10012a58: 1004b1a4 .word 0x1004b1a4 +10012a5c: 1004b1c0 .word 0x1004b1c0 +10012a60: 1004b1cc .word 0x1004b1cc +10012a64: 1004b1e0 .word 0x1004b1e0 +10012a68: 1004b1b4 .word 0x1004b1b4 +10012a6c: 1004b1b0 .word 0x1004b1b0 +10012a70: 1004b1e8 .word 0x1004b1e8 +10012a74: 1004b1f4 .word 0x1004b1f4 +10012a78: 1004b1e4 .word 0x1004b1e4 +10012a7c: 1004b1ec .word 0x1004b1ec +10012a80: 0798 lsls r0, r3, #30 +10012a82: d58e bpl.n 100129a2 +10012a84: f899 001c ldrb.w r0, [r9, #28] +10012a88: f7ff f962 bl 10011d50 +10012a8c: 4682 mov sl, r0 +10012a8e: 2800 cmp r0, #0 +10012a90: d087 beq.n 100129a2 +10012a92: f8d8 3000 ldr.w r3, [r8] +10012a96: 682a ldr r2, [r5, #0] +10012a98: 6003 str r3, [r0, #0] +10012a9a: f8b9 301e ldrh.w r3, [r9, #30] +10012a9e: 7851 ldrb r1, [r2, #1] +10012aa0: 83c3 strh r3, [r0, #30] +10012aa2: 9b06 ldr r3, [sp, #24] +10012aa4: 681b ldr r3, [r3, #0] +10012aa6: 6043 str r3, [r0, #4] +10012aa8: 7813 ldrb r3, [r2, #0] +10012aaa: ea43 2301 orr.w r3, r3, r1, lsl #8 +10012aae: 8403 strh r3, [r0, #32] +10012ab0: 2303 movs r3, #3 +10012ab2: 6183 str r3, [r0, #24] +10012ab4: 683b ldr r3, [r7, #0] +10012ab6: 1c59 adds r1, r3, #1 +10012ab8: 62c1 str r1, [r0, #44] ; 0x2c +10012aba: 6341 str r1, [r0, #52] ; 0x34 +10012abc: 3b01 subs r3, #1 +10012abe: 89d2 ldrh r2, [r2, #14] +10012ac0: 6583 str r3, [r0, #88] ; 0x58 +10012ac2: f8d9 3010 ldr.w r3, [r9, #16] +10012ac6: f8a0 2064 strh.w r2, [r0, #100] ; 0x64 +10012aca: 6103 str r3, [r0, #16] +10012acc: f8d9 3014 ldr.w r3, [r9, #20] +10012ad0: f8a0 2066 strh.w r2, [r0, #102] ; 0x66 +10012ad4: f8a0 2052 strh.w r2, [r0, #82] ; 0x52 +10012ad8: 6143 str r3, [r0, #20] +10012ada: f899 3008 ldrb.w r3, [r9, #8] +10012ade: f023 0373 bic.w r3, r3, #115 ; 0x73 +10012ae2: 7203 strb r3, [r0, #8] +10012ae4: 9b07 ldr r3, [sp, #28] +10012ae6: 681b ldr r3, [r3, #0] +10012ae8: 60c3 str r3, [r0, #12] +10012aea: 9b07 ldr r3, [sp, #28] +10012aec: 6018 str r0, [r3, #0] +10012aee: f7fe f871 bl 10010bd4 +10012af2: 2201 movs r2, #1 +10012af4: 4ba3 ldr r3, [pc, #652] ; (10012d84 ) +10012af6: f10a 003a add.w r0, sl, #58 ; 0x3a +10012afa: 701a strb r2, [r3, #0] +10012afc: f7ff fdfa bl 100126f4 +10012b00: f10a 0104 add.w r1, sl, #4 +10012b04: f8ba 003a ldrh.w r0, [sl, #58] ; 0x3a +10012b08: f7ff f9b9 bl 10011e7e +10012b0c: 2112 movs r1, #18 +10012b0e: f8aa 003a strh.w r0, [sl, #58] ; 0x3a +10012b12: 4650 mov r0, sl +10012b14: f000 fcb0 bl 10013478 +10012b18: b120 cbz r0, 10012b24 +10012b1a: 4621 mov r1, r4 +10012b1c: 4650 mov r0, sl +10012b1e: f7ff f8bb bl 10011c98 +10012b22: e73e b.n 100129a2 +10012b24: 4650 mov r0, sl +10012b26: e73a b.n 1001299e +10012b28: 4620 mov r0, r4 +10012b2a: f7ff f833 bl 10011b94 +10012b2e: 300a adds r0, #10 +10012b30: d008 beq.n 10012b44 +10012b32: 6fe3 ldr r3, [r4, #124] ; 0x7c +10012b34: 2b00 cmp r3, #0 +10012b36: f43f aee2 beq.w 100128fe +10012b3a: 4b93 ldr r3, [pc, #588] ; (10012d88 ) +10012b3c: 881b ldrh r3, [r3, #0] +10012b3e: 2b00 cmp r3, #0 +10012b40: f43f aedd beq.w 100128fe +10012b44: 2400 movs r4, #0 +10012b46: f8d9 0004 ldr.w r0, [r9, #4] +10012b4a: f8cb 4000 str.w r4, [fp] +10012b4e: f8ca 4000 str.w r4, [sl] +10012b52: b118 cbz r0, 10012b5c +10012b54: f7fe fa77 bl 10011046 +10012b58: f8c9 4004 str.w r4, [r9, #4] +10012b5c: b009 add sp, #36 ; 0x24 +10012b5e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10012b62: 69a3 ldr r3, [r4, #24] +10012b64: 2b02 cmp r3, #2 +10012b66: d10f bne.n 10012b88 +10012b68: 4b88 ldr r3, [pc, #544] ; (10012d8c ) +10012b6a: 6d62 ldr r2, [r4, #84] ; 0x54 +10012b6c: 681b ldr r3, [r3, #0] +10012b6e: 429a cmp r2, r3 +10012b70: d113 bne.n 10012b9a +10012b72: f898 3000 ldrb.w r3, [r8] +10012b76: f043 0308 orr.w r3, r3, #8 +10012b7a: f888 3000 strb.w r3, [r8] +10012b7e: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10012b82: f023 0301 bic.w r3, r3, #1 +10012b86: e6ce b.n 10012926 +10012b88: 4b81 ldr r3, [pc, #516] ; (10012d90 ) +10012b8a: 6ae2 ldr r2, [r4, #44] ; 0x2c +10012b8c: 681b ldr r3, [r3, #0] +10012b8e: 1a9b subs r3, r3, r2 +10012b90: d403 bmi.n 10012b9a +10012b92: 8e22 ldrh r2, [r4, #48] ; 0x30 +10012b94: 1a9b subs r3, r3, r2 +10012b96: 2b00 cmp r3, #0 +10012b98: ddeb ble.n 10012b72 +10012b9a: f898 3000 ldrb.w r3, [r8] +10012b9e: 071d lsls r5, r3, #28 +10012ba0: f140 819e bpl.w 10012ee0 +10012ba4: f8d4 3090 ldr.w r3, [r4, #144] ; 0x90 +10012ba8: b11b cbz r3, 10012bb2 +10012baa: f06f 010a mvn.w r1, #10 +10012bae: 6920 ldr r0, [r4, #16] +10012bb0: 4798 blx r3 +10012bb2: 4621 mov r1, r4 +10012bb4: 4877 ldr r0, [pc, #476] ; (10012d94 ) +10012bb6: f7fe fef5 bl 100119a4 +10012bba: 4620 mov r0, r4 +10012bbc: f002 fb66 bl 1001528c +10012bc0: e7c0 b.n 10012b44 +10012bc2: 06da lsls r2, r3, #27 +10012bc4: bf58 it pl +10012bc6: 4b74 ldrpl r3, [pc, #464] ; (10012d98 ) +10012bc8: f104 003a add.w r0, r4, #58 ; 0x3a +10012bcc: bf5c itt pl +10012bce: 681b ldrpl r3, [r3, #0] +10012bd0: 62a3 strpl r3, [r4, #40] ; 0x28 +10012bd2: 2300 movs r3, #0 +10012bd4: f884 30a2 strb.w r3, [r4, #162] ; 0xa2 +10012bd8: f7ff fd8c bl 100126f4 +10012bdc: 69a3 ldr r3, [r4, #24] +10012bde: 3b02 subs r3, #2 +10012be0: 2b07 cmp r3, #7 +10012be2: d8da bhi.n 10012b9a +10012be4: e8df f013 tbh [pc, r3, lsl #1] +10012be8: 00720008 .word 0x00720008 +10012bec: 00de00c9 .word 0x00de00c9 +10012bf0: 00c9012a .word 0x00c9012a +10012bf4: 0169014a .word 0x0169014a +10012bf8: 7833 ldrb r3, [r6, #0] +10012bfa: f003 0312 and.w r3, r3, #18 +10012bfe: 2b12 cmp r3, #18 +10012c00: d150 bne.n 10012ca4 +10012c02: 6f63 ldr r3, [r4, #116] ; 0x74 +10012c04: 691b ldr r3, [r3, #16] +10012c06: 6858 ldr r0, [r3, #4] +10012c08: f7fc feb6 bl 1000f978 +10012c0c: 4b5f ldr r3, [pc, #380] ; (10012d8c ) +10012c0e: 3001 adds r0, #1 +10012c10: 681b ldr r3, [r3, #0] +10012c12: 4298 cmp r0, r3 +10012c14: d146 bne.n 10012ca4 +10012c16: f8b4 306a ldrh.w r3, [r4, #106] ; 0x6a +10012c1a: 64e0 str r0, [r4, #76] ; 0x4c +10012c1c: 3301 adds r3, #1 +10012c1e: f8a4 306a strh.w r3, [r4, #106] ; 0x6a +10012c22: 683b ldr r3, [r7, #0] +10012c24: 8f60 ldrh r0, [r4, #58] ; 0x3a +10012c26: 1c5a adds r2, r3, #1 +10012c28: 62e2 str r2, [r4, #44] ; 0x2c +10012c2a: 6362 str r2, [r4, #52] ; 0x34 +10012c2c: 682a ldr r2, [r5, #0] +10012c2e: 3b01 subs r3, #1 +10012c30: 89d2 ldrh r2, [r2, #14] +10012c32: 65a3 str r3, [r4, #88] ; 0x58 +10012c34: 2304 movs r3, #4 +10012c36: f8a4 2064 strh.w r2, [r4, #100] ; 0x64 +10012c3a: 18e1 adds r1, r4, r3 +10012c3c: f8a4 2066 strh.w r2, [r4, #102] ; 0x66 +10012c40: 61a3 str r3, [r4, #24] +10012c42: f7ff f91c bl 10011e7e +10012c46: eb00 0380 add.w r3, r0, r0, lsl #2 +10012c4a: 005b lsls r3, r3, #1 +10012c4c: f8a4 3052 strh.w r3, [r4, #82] ; 0x52 +10012c50: f8b4 3050 ldrh.w r3, [r4, #80] ; 0x50 +10012c54: 8760 strh r0, [r4, #58] ; 0x3a +10012c56: 2b01 cmp r3, #1 +10012c58: bf04 itt eq +10012c5a: 0040 lsleq r0, r0, #1 +10012c5c: b280 uxtheq r0, r0 +10012c5e: f8b4 306c ldrh.w r3, [r4, #108] ; 0x6c +10012c62: f8a4 0050 strh.w r0, [r4, #80] ; 0x50 +10012c66: 6f60 ldr r0, [r4, #116] ; 0x74 +10012c68: 3b01 subs r3, #1 +10012c6a: f8a4 306c strh.w r3, [r4, #108] ; 0x6c +10012c6e: 6803 ldr r3, [r0, #0] +10012c70: 6763 str r3, [r4, #116] ; 0x74 +10012c72: f7fe fccc bl 1001160e +10012c76: 6f63 ldr r3, [r4, #116] ; 0x74 +10012c78: b943 cbnz r3, 10012c8c +10012c7a: f64f 73ff movw r3, #65535 ; 0xffff +10012c7e: 8723 strh r3, [r4, #56] ; 0x38 +10012c80: f8d4 3088 ldr.w r3, [r4, #136] ; 0x88 +10012c84: b93b cbnz r3, 10012c96 +10012c86: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10012c8a: e64a b.n 10012922 +10012c8c: 2300 movs r3, #0 +10012c8e: 8723 strh r3, [r4, #56] ; 0x38 +10012c90: f884 304a strb.w r3, [r4, #74] ; 0x4a +10012c94: e7f4 b.n 10012c80 +10012c96: 2200 movs r2, #0 +10012c98: 4621 mov r1, r4 +10012c9a: 6920 ldr r0, [r4, #16] +10012c9c: 4798 blx r3 +10012c9e: 300a adds r0, #10 +10012ca0: d1f1 bne.n 10012c86 +10012ca2: e74f b.n 10012b44 +10012ca4: 7833 ldrb r3, [r6, #0] +10012ca6: 06db lsls r3, r3, #27 +10012ca8: f57f af77 bpl.w 10012b9a +10012cac: 682b ldr r3, [r5, #0] +10012cae: 9a04 ldr r2, [sp, #16] +10012cb0: 6839 ldr r1, [r7, #0] +10012cb2: 8810 ldrh r0, [r2, #0] +10012cb4: 881a ldrh r2, [r3, #0] +10012cb6: 4401 add r1, r0 +10012cb8: 9201 str r2, [sp, #4] +10012cba: 885b ldrh r3, [r3, #2] +10012cbc: 4833 ldr r0, [pc, #204] ; (10012d8c ) +10012cbe: 9300 str r3, [sp, #0] +10012cc0: 4a36 ldr r2, [pc, #216] ; (10012d9c ) +10012cc2: 4b37 ldr r3, [pc, #220] ; (10012da0 ) +10012cc4: 6800 ldr r0, [r0, #0] +10012cc6: f000 fdc1 bl 1001384c +10012cca: e766 b.n 10012b9a +10012ccc: 7833 ldrb r3, [r6, #0] +10012cce: 06de lsls r6, r3, #27 +10012cd0: d545 bpl.n 10012d5e +10012cd2: 4b2e ldr r3, [pc, #184] ; (10012d8c ) +10012cd4: 6818 ldr r0, [r3, #0] +10012cd6: 6ce3 ldr r3, [r4, #76] ; 0x4c +10012cd8: 43db mvns r3, r3 +10012cda: 42c3 cmn r3, r0 +10012cdc: d433 bmi.n 10012d46 +10012cde: 6d63 ldr r3, [r4, #84] ; 0x54 +10012ce0: 1ac3 subs r3, r0, r3 +10012ce2: 2b00 cmp r3, #0 +10012ce4: dc2f bgt.n 10012d46 +10012ce6: 2304 movs r3, #4 +10012ce8: 61a3 str r3, [r4, #24] +10012cea: 6963 ldr r3, [r4, #20] +10012cec: b91b cbnz r3, 10012cf6 +10012cee: 4620 mov r0, r4 +10012cf0: f7ff f81e bl 10011d30 +10012cf4: e726 b.n 10012b44 +10012cf6: 2200 movs r2, #0 +10012cf8: 4621 mov r1, r4 +10012cfa: 6920 ldr r0, [r4, #16] +10012cfc: 4798 blx r3 +10012cfe: b110 cbz r0, 10012d06 +10012d00: 300a adds r0, #10 +10012d02: d1f4 bne.n 10012cee +10012d04: e71e b.n 10012b44 +10012d06: 4620 mov r0, r4 +10012d08: f8b4 5050 ldrh.w r5, [r4, #80] ; 0x50 +10012d0c: f7ff f904 bl 10011f18 +10012d10: f8b4 3068 ldrh.w r3, [r4, #104] ; 0x68 +10012d14: b113 cbz r3, 10012d1c +10012d16: 3b01 subs r3, #1 +10012d18: f8a4 3068 strh.w r3, [r4, #104] ; 0x68 +10012d1c: 8f63 ldrh r3, [r4, #58] ; 0x3a +10012d1e: 2d01 cmp r5, #1 +10012d20: bf04 itt eq +10012d22: 005b lsleq r3, r3, #1 +10012d24: b29b uxtheq r3, r3 +10012d26: f8a4 3050 strh.w r3, [r4, #80] ; 0x50 +10012d2a: f898 3000 ldrb.w r3, [r8] +10012d2e: 0699 lsls r1, r3, #26 +10012d30: f57f af33 bpl.w 10012b9a +10012d34: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10012d38: f043 0302 orr.w r3, r3, #2 +10012d3c: f884 3022 strb.w r3, [r4, #34] ; 0x22 +10012d40: 2307 movs r3, #7 +10012d42: 61a3 str r3, [r4, #24] +10012d44: e729 b.n 10012b9a +10012d46: 682b ldr r3, [r5, #0] +10012d48: 9a04 ldr r2, [sp, #16] +10012d4a: 6839 ldr r1, [r7, #0] +10012d4c: 8815 ldrh r5, [r2, #0] +10012d4e: 881a ldrh r2, [r3, #0] +10012d50: 4429 add r1, r5 +10012d52: 9201 str r2, [sp, #4] +10012d54: 885b ldrh r3, [r3, #2] +10012d56: 4a11 ldr r2, [pc, #68] ; (10012d9c ) +10012d58: 9300 str r3, [sp, #0] +10012d5a: 4b11 ldr r3, [pc, #68] ; (10012da0 ) +10012d5c: e7b3 b.n 10012cc6 +10012d5e: 0798 lsls r0, r3, #30 +10012d60: f57f af1b bpl.w 10012b9a +10012d64: 4a0a ldr r2, [pc, #40] ; (10012d90 ) +10012d66: 6ae3 ldr r3, [r4, #44] ; 0x2c +10012d68: 6812 ldr r2, [r2, #0] +10012d6a: 3b01 subs r3, #1 +10012d6c: 4293 cmp r3, r2 +10012d6e: f47f af14 bne.w 10012b9a +10012d72: 4620 mov r0, r4 +10012d74: f000 fdcd bl 10013912 +10012d78: e70f b.n 10012b9a +10012d7a: 4620 mov r0, r4 +10012d7c: f7ff f8cc bl 10011f18 +10012d80: e7d3 b.n 10012d2a +10012d82: bf00 nop +10012d84: 1004b1a8 .word 0x1004b1a8 +10012d88: 1004b1f4 .word 0x1004b1f4 +10012d8c: 1004b1c4 .word 0x1004b1c4 +10012d90: 1004b1e8 .word 0x1004b1e8 +10012d94: 1004b1a4 .word 0x1004b1a4 +10012d98: 1004b1b4 .word 0x1004b1b4 +10012d9c: 1004aab0 .word 0x1004aab0 +10012da0: 1004aab4 .word 0x1004aab4 +10012da4: 4620 mov r0, r4 +10012da6: f7ff f8b7 bl 10011f18 +10012daa: f898 3000 ldrb.w r3, [r8] +10012dae: f013 0f20 tst.w r3, #32 +10012db2: 7833 ldrb r3, [r6, #0] +10012db4: d037 beq.n 10012e26 +10012db6: f013 0f10 tst.w r3, #16 +10012dba: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10012dbe: f043 0302 orr.w r3, r3, #2 +10012dc2: d02c beq.n 10012e1e +10012dc4: 4a77 ldr r2, [pc, #476] ; (10012fa4 ) +10012dc6: 6d61 ldr r1, [r4, #84] ; 0x54 +10012dc8: 6812 ldr r2, [r2, #0] +10012dca: 4291 cmp r1, r2 +10012dcc: d127 bne.n 10012e1e +10012dce: f884 3022 strb.w r3, [r4, #34] ; 0x22 +10012dd2: 4620 mov r0, r4 +10012dd4: f7fe fc58 bl 10011688 +10012dd8: 4a73 ldr r2, [pc, #460] ; (10012fa8 ) +10012dda: 6813 ldr r3, [r2, #0] +10012ddc: 429c cmp r4, r3 +10012dde: d102 bne.n 10012de6 +10012de0: 68e3 ldr r3, [r4, #12] +10012de2: 6013 str r3, [r2, #0] +10012de4: e00c b.n 10012e00 +10012de6: 2100 movs r1, #0 +10012de8: 4a70 ldr r2, [pc, #448] ; (10012fac ) +10012dea: 6013 str r3, [r2, #0] +10012dec: b90b cbnz r3, 10012df2 +10012dee: b139 cbz r1, 10012e00 +10012df0: e7f7 b.n 10012de2 +10012df2: 68d8 ldr r0, [r3, #12] +10012df4: 4284 cmp r4, r0 +10012df6: d10f bne.n 10012e18 +10012df8: b101 cbz r1, 10012dfc +10012dfa: 6013 str r3, [r2, #0] +10012dfc: 68e2 ldr r2, [r4, #12] +10012dfe: 60da str r2, [r3, #12] +10012e00: 2201 movs r2, #1 +10012e02: 4b6b ldr r3, [pc, #428] ; (10012fb0 ) +10012e04: 701a strb r2, [r3, #0] +10012e06: 230a movs r3, #10 +10012e08: 61a3 str r3, [r4, #24] +10012e0a: 4b6a ldr r3, [pc, #424] ; (10012fb4 ) +10012e0c: 681a ldr r2, [r3, #0] +10012e0e: 601c str r4, [r3, #0] +10012e10: 60e2 str r2, [r4, #12] +10012e12: f7fd fedf bl 10010bd4 +10012e16: e6c0 b.n 10012b9a +10012e18: 2101 movs r1, #1 +10012e1a: 4603 mov r3, r0 +10012e1c: e7e6 b.n 10012dec +10012e1e: f884 3022 strb.w r3, [r4, #34] ; 0x22 +10012e22: 2308 movs r3, #8 +10012e24: e78d b.n 10012d42 +10012e26: 06da lsls r2, r3, #27 +10012e28: f57f aeb7 bpl.w 10012b9a +10012e2c: 4b5d ldr r3, [pc, #372] ; (10012fa4 ) +10012e2e: 6d62 ldr r2, [r4, #84] ; 0x54 +10012e30: 681b ldr r3, [r3, #0] +10012e32: 429a cmp r2, r3 +10012e34: f47f aeb1 bne.w 10012b9a +10012e38: 2306 movs r3, #6 +10012e3a: e782 b.n 10012d42 +10012e3c: 4620 mov r0, r4 +10012e3e: f7ff f86b bl 10011f18 +10012e42: f898 3000 ldrb.w r3, [r8] +10012e46: 069b lsls r3, r3, #26 +10012e48: f57f aea7 bpl.w 10012b9a +10012e4c: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10012e50: 4620 mov r0, r4 +10012e52: f043 0302 orr.w r3, r3, #2 +10012e56: f884 3022 strb.w r3, [r4, #34] ; 0x22 +10012e5a: f7fe fc15 bl 10011688 +10012e5e: 4a52 ldr r2, [pc, #328] ; (10012fa8 ) +10012e60: 6813 ldr r3, [r2, #0] +10012e62: 429c cmp r4, r3 +10012e64: d0bc beq.n 10012de0 +10012e66: 2100 movs r1, #0 +10012e68: 4a50 ldr r2, [pc, #320] ; (10012fac ) +10012e6a: 6013 str r3, [r2, #0] +10012e6c: 2b00 cmp r3, #0 +10012e6e: d0be beq.n 10012dee +10012e70: 68d8 ldr r0, [r3, #12] +10012e72: 4284 cmp r4, r0 +10012e74: d0c0 beq.n 10012df8 +10012e76: 2101 movs r1, #1 +10012e78: 4603 mov r3, r0 +10012e7a: e7f7 b.n 10012e6c +10012e7c: 4620 mov r0, r4 +10012e7e: f7ff f84b bl 10011f18 +10012e82: 7833 ldrb r3, [r6, #0] +10012e84: 06df lsls r7, r3, #27 +10012e86: f57f ae88 bpl.w 10012b9a +10012e8a: 4b46 ldr r3, [pc, #280] ; (10012fa4 ) +10012e8c: 6d62 ldr r2, [r4, #84] ; 0x54 +10012e8e: 681b ldr r3, [r3, #0] +10012e90: 429a cmp r2, r3 +10012e92: f47f ae82 bne.w 10012b9a +10012e96: 4620 mov r0, r4 +10012e98: f7fe fbf6 bl 10011688 +10012e9c: 4a42 ldr r2, [pc, #264] ; (10012fa8 ) +10012e9e: 6813 ldr r3, [r2, #0] +10012ea0: 429c cmp r4, r3 +10012ea2: d09d beq.n 10012de0 +10012ea4: 2100 movs r1, #0 +10012ea6: 4a41 ldr r2, [pc, #260] ; (10012fac ) +10012ea8: 6013 str r3, [r2, #0] +10012eaa: 2b00 cmp r3, #0 +10012eac: d09f beq.n 10012dee +10012eae: 68d8 ldr r0, [r3, #12] +10012eb0: 4284 cmp r4, r0 +10012eb2: d0a1 beq.n 10012df8 +10012eb4: 2101 movs r1, #1 +10012eb6: 4603 mov r3, r0 +10012eb8: e7f7 b.n 10012eaa +10012eba: 4620 mov r0, r4 +10012ebc: f7ff f82c bl 10011f18 +10012ec0: 7833 ldrb r3, [r6, #0] +10012ec2: 06de lsls r6, r3, #27 +10012ec4: f57f ae69 bpl.w 10012b9a +10012ec8: 4b36 ldr r3, [pc, #216] ; (10012fa4 ) +10012eca: 6d62 ldr r2, [r4, #84] ; 0x54 +10012ecc: 681b ldr r3, [r3, #0] +10012ece: 429a cmp r2, r3 +10012ed0: bf02 ittt eq +10012ed2: f898 3000 ldrbeq.w r3, [r8] +10012ed6: f043 0310 orreq.w r3, r3, #16 +10012eda: f888 3000 strbeq.w r3, [r8] +10012ede: e65c b.n 10012b9a +10012ee0: 06d8 lsls r0, r3, #27 +10012ee2: d50c bpl.n 10012efe +10012ee4: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10012ee8: 06d9 lsls r1, r3, #27 +10012eea: f53f ae62 bmi.w 10012bb2 +10012eee: f8d4 3090 ldr.w r3, [r4, #144] ; 0x90 +10012ef2: 2b00 cmp r3, #0 +10012ef4: f43f ae5d beq.w 10012bb2 +10012ef8: f06f 010b mvn.w r1, #11 +10012efc: e657 b.n 10012bae +10012efe: f8b4 2068 ldrh.w r2, [r4, #104] ; 0x68 +10012f02: b99a cbnz r2, 10012f2c +10012f04: f8da 2000 ldr.w r2, [sl] +10012f08: b9d2 cbnz r2, 10012f40 +10012f0a: f898 3000 ldrb.w r3, [r8] +10012f0e: 069a lsls r2, r3, #26 +10012f10: d505 bpl.n 10012f1e +10012f12: 6fe3 ldr r3, [r4, #124] ; 0x7c +10012f14: b39b cbz r3, 10012f7e +10012f16: 7b5a ldrb r2, [r3, #13] +10012f18: f042 0220 orr.w r2, r2, #32 +10012f1c: 735a strb r2, [r3, #13] +10012f1e: 2300 movs r3, #0 +10012f20: 4620 mov r0, r4 +10012f22: f8cb 3000 str.w r3, [fp] +10012f26: f000 fb4f bl 100135c8 +10012f2a: e60b b.n 10012b44 +10012f2c: f8d4 3080 ldr.w r3, [r4, #128] ; 0x80 +10012f30: 2b00 cmp r3, #0 +10012f32: d0e7 beq.n 10012f04 +10012f34: 4621 mov r1, r4 +10012f36: 6920 ldr r0, [r4, #16] +10012f38: 4798 blx r3 +10012f3a: 300a adds r0, #10 +10012f3c: d1e2 bne.n 10012f04 +10012f3e: e601 b.n 10012b44 +10012f40: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10012f44: f013 0310 ands.w r3, r3, #16 +10012f48: d003 beq.n 10012f52 +10012f4a: 4610 mov r0, r2 +10012f4c: f7fe f87b bl 10011046 +10012f50: e6cd b.n 10012cee +10012f52: f8d4 5084 ldr.w r5, [r4, #132] ; 0x84 +10012f56: b165 cbz r5, 10012f72 +10012f58: 4621 mov r1, r4 +10012f5a: 6920 ldr r0, [r4, #16] +10012f5c: 47a8 blx r5 +10012f5e: f110 0f0a cmn.w r0, #10 +10012f62: f43f adef beq.w 10012b44 +10012f66: 2800 cmp r0, #0 +10012f68: d0cf beq.n 10012f0a +10012f6a: f8da 3000 ldr.w r3, [sl] +10012f6e: 67e3 str r3, [r4, #124] ; 0x7c +10012f70: e7cb b.n 10012f0a +10012f72: 462b mov r3, r5 +10012f74: 4621 mov r1, r4 +10012f76: 4628 mov r0, r5 +10012f78: f7fe fdfa bl 10011b70 +10012f7c: e7ef b.n 10012f5e +10012f7e: f241 62d0 movw r2, #5840 ; 0x16d0 +10012f82: 8e23 ldrh r3, [r4, #48] ; 0x30 +10012f84: f8d4 5084 ldr.w r5, [r4, #132] ; 0x84 +10012f88: 4293 cmp r3, r2 +10012f8a: bf1c itt ne +10012f8c: 3301 addne r3, #1 +10012f8e: 8623 strhne r3, [r4, #48] ; 0x30 +10012f90: 2d00 cmp r5, #0 +10012f92: d0c4 beq.n 10012f1e +10012f94: 2300 movs r3, #0 +10012f96: 4621 mov r1, r4 +10012f98: 461a mov r2, r3 +10012f9a: 6920 ldr r0, [r4, #16] +10012f9c: 47a8 blx r5 +10012f9e: 300a adds r0, #10 +10012fa0: d1bd bne.n 10012f1e +10012fa2: e5cf b.n 10012b44 +10012fa4: 1004b1c4 .word 0x1004b1c4 +10012fa8: 1004b1a4 .word 0x1004b1a4 +10012fac: 1004b1bc .word 0x1004b1bc +10012fb0: 1004b1a8 .word 0x1004b1a8 +10012fb4: 1004b1c0 .word 0x1004b1c0 + +10012fb8 : +10012fb8: b570 push {r4, r5, r6, lr} +10012fba: 460d mov r5, r1 +10012fbc: 4295 cmp r5, r2 +10012fbe: 461e mov r6, r3 +10012fc0: f89d 1018 ldrb.w r1, [sp, #24] +10012fc4: 9b04 ldr r3, [sp, #16] +10012fc6: d21e bcs.n 10013006 +10012fc8: f89d 4014 ldrb.w r4, [sp, #20] +10012fcc: 07a4 lsls r4, r4, #30 +10012fce: d408 bmi.n 10012fe2 +10012fd0: f893 4022 ldrb.w r4, [r3, #34] ; 0x22 +10012fd4: 0664 lsls r4, r4, #25 +10012fd6: d416 bmi.n 10013006 +10012fd8: b119 cbz r1, 10012fe2 +10012fda: 6f19 ldr r1, [r3, #112] ; 0x70 +10012fdc: b909 cbnz r1, 10012fe2 +10012fde: 6f5b ldr r3, [r3, #116] ; 0x74 +10012fe0: b18b cbz r3, 10013006 +10012fe2: f205 54b7 addw r4, r5, #1463 ; 0x5b7 +10012fe6: f024 0103 bic.w r1, r4, #3 +10012fea: 428a cmp r2, r1 +10012fec: bfa8 it ge +10012fee: 460a movge r2, r1 +10012ff0: b291 uxth r1, r2 +10012ff2: 2200 movs r2, #0 +10012ff4: f7fe f84a bl 1001108c +10012ff8: b120 cbz r0, 10013004 +10012ffa: 8942 ldrh r2, [r0, #10] +10012ffc: 1b52 subs r2, r2, r5 +10012ffe: 8032 strh r2, [r6, #0] +10013000: 8105 strh r5, [r0, #8] +10013002: 8145 strh r5, [r0, #10] +10013004: bd70 pop {r4, r5, r6, pc} +10013006: 4629 mov r1, r5 +10013008: e7f3 b.n 10012ff2 + ... + +1001300c : +1001300c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10013010: f89d 8020 ldrb.w r8, [sp, #32] +10013014: 469a mov sl, r3 +10013016: f018 0f01 tst.w r8, #1 +1001301a: bf14 ite ne +1001301c: 2504 movne r5, #4 +1001301e: 2500 moveq r5, #0 +10013020: f018 0f02 tst.w r8, #2 +10013024: bf14 ite ne +10013026: 230c movne r3, #12 +10013028: 2300 moveq r3, #0 +1001302a: 441d add r5, r3 +1001302c: 4b27 ldr r3, [pc, #156] ; (100130cc ) +1001302e: 4681 mov r9, r0 +10013030: 8918 ldrh r0, [r3, #8] +10013032: 460f mov r7, r1 +10013034: 4616 mov r6, r2 +10013036: f002 f88d bl 10015154 +1001303a: 4604 mov r4, r0 +1001303c: b928 cbnz r0, 1001304a +1001303e: 4638 mov r0, r7 +10013040: f7fe f801 bl 10011046 +10013044: 4620 mov r0, r4 +10013046: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1001304a: f880 800c strb.w r8, [r0, #12] +1001304e: f04f 0800 mov.w r8, #0 +10013052: 893b ldrh r3, [r7, #8] +10013054: 6047 str r7, [r0, #4] +10013056: 1b5b subs r3, r3, r5 +10013058: f8c0 8000 str.w r8, [r0] +1001305c: 8103 strh r3, [r0, #8] +1001305e: f8a0 800a strh.w r8, [r0, #10] +10013062: 2114 movs r1, #20 +10013064: 4638 mov r0, r7 +10013066: f7fd ffc3 bl 10010ff0 +1001306a: 4607 mov r7, r0 +1001306c: b120 cbz r0, 10013078 +1001306e: 4620 mov r0, r4 +10013070: f7fe facd bl 1001160e +10013074: 4644 mov r4, r8 +10013076: e7e5 b.n 10013044 +10013078: 6863 ldr r3, [r4, #4] +1001307a: f8b9 001e ldrh.w r0, [r9, #30] +1001307e: f8d3 8004 ldr.w r8, [r3, #4] +10013082: f3c5 0587 ubfx r5, r5, #2, #8 +10013086: f8c4 8010 str.w r8, [r4, #16] +1001308a: f7fc fc6d bl 1000f968 +1001308e: f8a8 0000 strh.w r0, [r8] +10013092: f8b9 0020 ldrh.w r0, [r9, #32] +10013096: f8d4 8010 ldr.w r8, [r4, #16] +1001309a: f7fc fc65 bl 1000f968 +1001309e: f8a8 0002 strh.w r0, [r8, #2] +100130a2: 4650 mov r0, sl +100130a4: f8d4 8010 ldr.w r8, [r4, #16] +100130a8: f7fc fc64 bl 1000f974 +100130ac: 3505 adds r5, #5 +100130ae: ea46 3505 orr.w r5, r6, r5, lsl #12 +100130b2: f8c8 0004 str.w r0, [r8, #4] +100130b6: b2a8 uxth r0, r5 +100130b8: f8d4 8010 ldr.w r8, [r4, #16] +100130bc: f7fc fc54 bl 1000f968 +100130c0: 6923 ldr r3, [r4, #16] +100130c2: f8a8 000c strh.w r0, [r8, #12] +100130c6: 749f strb r7, [r3, #18] +100130c8: 74df strb r7, [r3, #19] +100130ca: e7bb b.n 10013044 +100130cc: 100400a8 .word 0x100400a8 + +100130d0 : +100130d0: 3114 adds r1, #20 +100130d2: b5f8 push {r3, r4, r5, r6, r7, lr} +100130d4: b28c uxth r4, r1 +100130d6: 4605 mov r5, r0 +100130d8: 4617 mov r7, r2 +100130da: 4621 mov r1, r4 +100130dc: 2200 movs r2, #0 +100130de: 2001 movs r0, #1 +100130e0: f7fd ffd4 bl 1001108c +100130e4: 4606 mov r6, r0 +100130e6: b930 cbnz r0, 100130f6 +100130e8: 2203 movs r2, #3 +100130ea: 4621 mov r1, r4 +100130ec: 2001 movs r0, #1 +100130ee: f7fd ffcd bl 1001108c +100130f2: 4606 mov r6, r0 +100130f4: b1f8 cbz r0, 10013136 +100130f6: 8be8 ldrh r0, [r5, #30] +100130f8: 6874 ldr r4, [r6, #4] +100130fa: f7fc fc35 bl 1000f968 +100130fe: 8020 strh r0, [r4, #0] +10013100: 8c28 ldrh r0, [r5, #32] +10013102: f7fc fc31 bl 1000f968 +10013106: 6067 str r7, [r4, #4] +10013108: 8060 strh r0, [r4, #2] +1001310a: 6ae8 ldr r0, [r5, #44] ; 0x2c +1001310c: f7fc fc32 bl 1000f974 +10013110: 60a0 str r0, [r4, #8] +10013112: f245 0010 movw r0, #20496 ; 0x5010 +10013116: f7fc fc27 bl 1000f968 +1001311a: 81a0 strh r0, [r4, #12] +1001311c: 8e68 ldrh r0, [r5, #50] ; 0x32 +1001311e: f7fc fc23 bl 1000f968 +10013122: 2300 movs r3, #0 +10013124: 8e6a ldrh r2, [r5, #50] ; 0x32 +10013126: 7423 strb r3, [r4, #16] +10013128: 7463 strb r3, [r4, #17] +1001312a: 74a3 strb r3, [r4, #18] +1001312c: 74e3 strb r3, [r4, #19] +1001312e: 6aeb ldr r3, [r5, #44] ; 0x2c +10013130: 81e0 strh r0, [r4, #14] +10013132: 4413 add r3, r2 +10013134: 636b str r3, [r5, #52] ; 0x34 +10013136: 4630 mov r0, r6 +10013138: bdf8 pop {r3, r4, r5, r6, r7, pc} + +1001313a : +1001313a: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001313e: b08f sub sp, #60 ; 0x3c +10013140: 9306 str r3, [sp, #24] +10013142: 2300 movs r3, #0 +10013144: f8ad 3036 strh.w r3, [sp, #54] ; 0x36 +10013148: f8b0 3066 ldrh.w r3, [r0, #102] ; 0x66 +1001314c: 4692 mov sl, r2 +1001314e: 8f42 ldrh r2, [r0, #58] ; 0x3a +10013150: 085b lsrs r3, r3, #1 +10013152: 4293 cmp r3, r2 +10013154: bf28 it cs +10013156: 4613 movcs r3, r2 +10013158: 4604 mov r4, r0 +1001315a: 9309 str r3, [sp, #36] ; 0x24 +1001315c: 9105 str r1, [sp, #20] +1001315e: 2900 cmp r1, #0 +10013160: f000 8177 beq.w 10013452 +10013164: 6983 ldr r3, [r0, #24] +10013166: 2b07 cmp r3, #7 +10013168: d003 beq.n 10013172 +1001316a: 3b02 subs r3, #2 +1001316c: 2b02 cmp r3, #2 +1001316e: f200 8173 bhi.w 10013458 +10013172: f1ba 0f00 cmp.w sl, #0 +10013176: d012 beq.n 1001319e +10013178: f8b4 306a ldrh.w r3, [r4, #106] ; 0x6a +1001317c: 4553 cmp r3, sl +1001317e: d20a bcs.n 10013196 +10013180: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10013184: f063 037f orn r3, r3, #127 ; 0x7f +10013188: f884 3022 strb.w r3, [r4, #34] ; 0x22 +1001318c: f04f 30ff mov.w r0, #4294967295 +10013190: b00f add sp, #60 ; 0x3c +10013192: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10013196: f8b4 306c ldrh.w r3, [r4, #108] ; 0x6c +1001319a: 2b13 cmp r3, #19 +1001319c: d8f0 bhi.n 10013180 +1001319e: f8b4 306c ldrh.w r3, [r4, #108] ; 0x6c +100131a2: f8d4 b070 ldr.w fp, [r4, #112] ; 0x70 +100131a6: 9304 str r3, [sp, #16] +100131a8: 465d mov r5, fp +100131aa: f1bb 0f00 cmp.w fp, #0 +100131ae: d104 bne.n 100131ba +100131b0: 465f mov r7, fp +100131b2: 46d8 mov r8, fp +100131b4: 465e mov r6, fp +100131b6: e05b b.n 10013270 +100131b8: 464d mov r5, r9 +100131ba: f8d5 9000 ldr.w r9, [r5] +100131be: f1b9 0f00 cmp.w r9, #0 +100131c2: d1f9 bne.n 100131b8 +100131c4: 7b29 ldrb r1, [r5, #12] +100131c6: 892e ldrh r6, [r5, #8] +100131c8: f011 0f01 tst.w r1, #1 +100131cc: bf14 ite ne +100131ce: 2004 movne r0, #4 +100131d0: 2000 moveq r0, #0 +100131d2: f011 0f02 tst.w r1, #2 +100131d6: bf14 ite ne +100131d8: 230c movne r3, #12 +100131da: 2300 moveq r3, #0 +100131dc: 9a09 ldr r2, [sp, #36] ; 0x24 +100131de: 1b92 subs r2, r2, r6 +100131e0: 1a12 subs r2, r2, r0 +100131e2: 1ad3 subs r3, r2, r3 +100131e4: b29a uxth r2, r3 +100131e6: f8b4 306e ldrh.w r3, [r4, #110] ; 0x6e +100131ea: 2b00 cmp r3, #0 +100131ec: f000 813e beq.w 1001346c +100131f0: 459a cmp sl, r3 +100131f2: 4657 mov r7, sl +100131f4: bf28 it cs +100131f6: 461f movcs r7, r3 +100131f8: 1bdb subs r3, r3, r7 +100131fa: 1bd2 subs r2, r2, r7 +100131fc: 45ba cmp sl, r7 +100131fe: f8ad 3036 strh.w r3, [sp, #54] ; 0x36 +10013202: b292 uxth r2, r2 +10013204: 46ab mov fp, r5 +10013206: f240 812a bls.w 1001345e +1001320a: 2a00 cmp r2, #0 +1001320c: d069 beq.n 100132e2 +1001320e: 2e00 cmp r6, #0 +10013210: d06a beq.n 100132e8 +10013212: ebaa 0b07 sub.w fp, sl, r7 +10013216: 4593 cmp fp, r2 +10013218: bfa8 it ge +1001321a: 4693 movge fp, r2 +1001321c: 9b06 ldr r3, [sp, #24] +1001321e: fa1f f88b uxth.w r8, fp +10013222: 07db lsls r3, r3, #31 +10013224: d550 bpl.n 100132c8 +10013226: 2301 movs r3, #1 +10013228: 9302 str r3, [sp, #8] +1001322a: 9b06 ldr r3, [sp, #24] +1001322c: 9400 str r4, [sp, #0] +1001322e: 9301 str r3, [sp, #4] +10013230: 4641 mov r1, r8 +10013232: f10d 0336 add.w r3, sp, #54 ; 0x36 +10013236: 2003 movs r0, #3 +10013238: f7ff febe bl 10012fb8 +1001323c: 4606 mov r6, r0 +1001323e: 2800 cmp r0, #0 +10013240: f000 8105 beq.w 1001344e +10013244: 896b ldrh r3, [r5, #10] +10013246: f8bd 2036 ldrh.w r2, [sp, #54] ; 0x36 +1001324a: 6840 ldr r0, [r0, #4] +1001324c: 4413 add r3, r2 +1001324e: 816b strh r3, [r5, #10] +10013250: 9b05 ldr r3, [sp, #20] +10013252: 4642 mov r2, r8 +10013254: 19d9 adds r1, r3, r7 +10013256: f007 fcbb bl 1001abd0 +1001325a: 4630 mov r0, r6 +1001325c: f7fd ffbf bl 100111de +10013260: 46ab mov fp, r5 +10013262: 9b04 ldr r3, [sp, #16] +10013264: 44b8 add r8, r7 +10013266: 4403 add r3, r0 +10013268: b29b uxth r3, r3 +1001326a: fa1f f888 uxth.w r8, r8 +1001326e: 9304 str r3, [sp, #16] +10013270: f04f 0900 mov.w r9, #0 +10013274: 9b06 ldr r3, [sp, #24] +10013276: f8cd 9028 str.w r9, [sp, #40] ; 0x28 +1001327a: f003 0301 and.w r3, r3, #1 +1001327e: 9307 str r3, [sp, #28] +10013280: 45d0 cmp r8, sl +10013282: d333 bcc.n 100132ec +10013284: b15f cbz r7, 1001329e +10013286: f8d5 8004 ldr.w r8, [r5, #4] +1001328a: f1b8 0f00 cmp.w r8, #0 +1001328e: f040 80a1 bne.w 100133d4 +10013292: 892b ldrh r3, [r5, #8] +10013294: 443b add r3, r7 +10013296: 812b strh r3, [r5, #8] +10013298: 896b ldrh r3, [r5, #10] +1001329a: 1bdf subs r7, r3, r7 +1001329c: 816f strh r7, [r5, #10] +1001329e: f8bd 3036 ldrh.w r3, [sp, #54] ; 0x36 +100132a2: f8a4 306e strh.w r3, [r4, #110] ; 0x6e +100132a6: 2e00 cmp r6, #0 +100132a8: f000 80ad beq.w 10013406 +100132ac: 4631 mov r1, r6 +100132ae: 6868 ldr r0, [r5, #4] +100132b0: f7fd ffaa bl 10011208 +100132b4: 892b ldrh r3, [r5, #8] +100132b6: 8932 ldrh r2, [r6, #8] +100132b8: 4413 add r3, r2 +100132ba: 812b strh r3, [r5, #8] +100132bc: f8c5 9000 str.w r9, [r5] +100132c0: e0a6 b.n 10013410 +100132c2: 464f mov r7, r9 +100132c4: 46cb mov fp, r9 +100132c6: e7a0 b.n 1001320a +100132c8: 2201 movs r2, #1 +100132ca: 4641 mov r1, r8 +100132cc: 2003 movs r0, #3 +100132ce: f7fd fedd bl 1001108c +100132d2: 4606 mov r6, r0 +100132d4: 2800 cmp r0, #0 +100132d6: f000 80ba beq.w 1001344e +100132da: 9b05 ldr r3, [sp, #20] +100132dc: 443b add r3, r7 +100132de: 6043 str r3, [r0, #4] +100132e0: e7bb b.n 1001325a +100132e2: 46b8 mov r8, r7 +100132e4: 4616 mov r6, r2 +100132e6: e7c3 b.n 10013270 +100132e8: 46b8 mov r8, r7 +100132ea: e7c1 b.n 10013270 +100132ec: 9a09 ldr r2, [sp, #36] ; 0x24 +100132ee: ebaa 0308 sub.w r3, sl, r8 +100132f2: b29b uxth r3, r3 +100132f4: 4293 cmp r3, r2 +100132f6: bf28 it cs +100132f8: 4613 movcs r3, r2 +100132fa: 9308 str r3, [sp, #32] +100132fc: 9b07 ldr r3, [sp, #28] +100132fe: b303 cbz r3, 10013342 +10013300: fab9 f389 clz r3, r9 +10013304: 095b lsrs r3, r3, #5 +10013306: 9302 str r3, [sp, #8] +10013308: 9b06 ldr r3, [sp, #24] +1001330a: 9400 str r4, [sp, #0] +1001330c: 9301 str r3, [sp, #4] +1001330e: 9908 ldr r1, [sp, #32] +10013310: f10d 0336 add.w r3, sp, #54 ; 0x36 +10013314: 2000 movs r0, #0 +10013316: f7ff fe4f bl 10012fb8 +1001331a: 4683 mov fp, r0 +1001331c: b330 cbz r0, 1001336c +1001331e: 9b05 ldr r3, [sp, #20] +10013320: 9a08 ldr r2, [sp, #32] +10013322: eb03 0108 add.w r1, r3, r8 +10013326: 6840 ldr r0, [r0, #4] +10013328: f007 fc52 bl 1001abd0 +1001332c: 4658 mov r0, fp +1001332e: f7fd ff56 bl 100111de +10013332: 9b04 ldr r3, [sp, #16] +10013334: 4403 add r3, r0 +10013336: b29b uxth r3, r3 +10013338: 2b14 cmp r3, #20 +1001333a: 9304 str r3, [sp, #16] +1001333c: d92c bls.n 10013398 +1001333e: 4658 mov r0, fp +10013340: e012 b.n 10013368 +10013342: 2201 movs r2, #1 +10013344: 9908 ldr r1, [sp, #32] +10013346: 9807 ldr r0, [sp, #28] +10013348: f7fd fea0 bl 1001108c +1001334c: b170 cbz r0, 1001336c +1001334e: 9a05 ldr r2, [sp, #20] +10013350: 900b str r0, [sp, #44] ; 0x2c +10013352: 4442 add r2, r8 +10013354: 6042 str r2, [r0, #4] +10013356: 9a07 ldr r2, [sp, #28] +10013358: 4611 mov r1, r2 +1001335a: 4610 mov r0, r2 +1001335c: f7fd fe96 bl 1001108c +10013360: 9b0b ldr r3, [sp, #44] ; 0x2c +10013362: 4683 mov fp, r0 +10013364: b9a0 cbnz r0, 10013390 +10013366: 4618 mov r0, r3 +10013368: f7fd fe6d bl 10011046 +1001336c: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10013370: f063 037f orn r3, r3, #127 ; 0x7f +10013374: f884 3022 strb.w r3, [r4, #34] ; 0x22 +10013378: b116 cbz r6, 10013380 +1001337a: 4630 mov r0, r6 +1001337c: f7fd fe63 bl 10011046 +10013380: f1b9 0f00 cmp.w r9, #0 +10013384: f43f af02 beq.w 1001318c +10013388: 4648 mov r0, r9 +1001338a: f7fe f94d bl 10011628 +1001338e: e6fd b.n 1001318c +10013390: 4619 mov r1, r3 +10013392: f7fd ff39 bl 10011208 +10013396: e7c9 b.n 1001332c +10013398: 2200 movs r2, #0 +1001339a: 6e23 ldr r3, [r4, #96] ; 0x60 +1001339c: 4659 mov r1, fp +1001339e: 9200 str r2, [sp, #0] +100133a0: 4443 add r3, r8 +100133a2: 4620 mov r0, r4 +100133a4: f7ff fe32 bl 1001300c +100133a8: 4683 mov fp, r0 +100133aa: 2800 cmp r0, #0 +100133ac: d0de beq.n 1001336c +100133ae: f8bd 3036 ldrh.w r3, [sp, #54] ; 0x36 +100133b2: 8143 strh r3, [r0, #10] +100133b4: f1b9 0f00 cmp.w r9, #0 +100133b8: d008 beq.n 100133cc +100133ba: 9b0a ldr r3, [sp, #40] ; 0x28 +100133bc: 6018 str r0, [r3, #0] +100133be: 9b08 ldr r3, [sp, #32] +100133c0: f8cd b028 str.w fp, [sp, #40] ; 0x28 +100133c4: 4498 add r8, r3 +100133c6: fa1f f888 uxth.w r8, r8 +100133ca: e759 b.n 10013280 +100133cc: 4681 mov r9, r0 +100133ce: e7f6 b.n 100133be +100133d0: 464e mov r6, r9 +100133d2: e758 b.n 10013286 +100133d4: f8b8 3008 ldrh.w r3, [r8, #8] +100133d8: 443b add r3, r7 +100133da: f8a8 3008 strh.w r3, [r8, #8] +100133de: f8d8 3000 ldr.w r3, [r8] +100133e2: b96b cbnz r3, 10013400 +100133e4: f8d8 3004 ldr.w r3, [r8, #4] +100133e8: f8b8 000a ldrh.w r0, [r8, #10] +100133ec: 463a mov r2, r7 +100133ee: 4418 add r0, r3 +100133f0: 9905 ldr r1, [sp, #20] +100133f2: f007 fbed bl 1001abd0 +100133f6: f8b8 300a ldrh.w r3, [r8, #10] +100133fa: 443b add r3, r7 +100133fc: f8a8 300a strh.w r3, [r8, #10] +10013400: f8d8 8000 ldr.w r8, [r8] +10013404: e741 b.n 1001328a +10013406: 2d00 cmp r5, #0 +10013408: f47f af58 bne.w 100132bc +1001340c: f8c4 9070 str.w r9, [r4, #112] ; 0x70 +10013410: 6e23 ldr r3, [r4, #96] ; 0x60 +10013412: 4453 add r3, sl +10013414: 6623 str r3, [r4, #96] ; 0x60 +10013416: f8b4 306a ldrh.w r3, [r4, #106] ; 0x6a +1001341a: eba3 0a0a sub.w sl, r3, sl +1001341e: f8bd 3010 ldrh.w r3, [sp, #16] +10013422: f8a4 a06a strh.w sl, [r4, #106] ; 0x6a +10013426: f8a4 306c strh.w r3, [r4, #108] ; 0x6c +1001342a: f1bb 0f00 cmp.w fp, #0 +1001342e: d00c beq.n 1001344a +10013430: f8db 4010 ldr.w r4, [fp, #16] +10013434: b14c cbz r4, 1001344a +10013436: 9b06 ldr r3, [sp, #24] +10013438: f013 0b02 ands.w fp, r3, #2 +1001343c: d105 bne.n 1001344a +1001343e: 2008 movs r0, #8 +10013440: 89a5 ldrh r5, [r4, #12] +10013442: f7fc fa91 bl 1000f968 +10013446: 4328 orrs r0, r5 +10013448: 81a0 strh r0, [r4, #12] +1001344a: 2000 movs r0, #0 +1001344c: e6a0 b.n 10013190 +1001344e: 2600 movs r6, #0 +10013450: e78c b.n 1001336c +10013452: f06f 000d mvn.w r0, #13 +10013456: e69b b.n 10013190 +10013458: f06f 000c mvn.w r0, #12 +1001345c: e698 b.n 10013190 +1001345e: 2f00 cmp r7, #0 +10013460: d1b6 bne.n 100133d0 +10013462: f8bd 3036 ldrh.w r3, [sp, #54] ; 0x36 +10013466: f8a4 306e strh.w r3, [r4, #110] ; 0x6e +1001346a: e727 b.n 100132bc +1001346c: f1ba 0f00 cmp.w sl, #0 +10013470: f47f af27 bne.w 100132c2 +10013474: 46d3 mov fp, sl +10013476: e7f4 b.n 10013462 + +10013478 : +10013478: f8b0 306c ldrh.w r3, [r0, #108] ; 0x6c +1001347c: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1001347e: 2b13 cmp r3, #19 +10013480: 4604 mov r4, r0 +10013482: 460d mov r5, r1 +10013484: f001 0603 and.w r6, r1, #3 +10013488: d908 bls.n 1001349c +1001348a: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +1001348e: f063 037f orn r3, r3, #127 ; 0x7f +10013492: f884 3022 strb.w r3, [r4, #34] ; 0x22 +10013496: f04f 30ff mov.w r0, #4294967295 +1001349a: e03a b.n 10013512 +1001349c: f001 0302 and.w r3, r1, #2 +100134a0: 2b00 cmp r3, #0 +100134a2: f8b0 306a ldrh.w r3, [r0, #106] ; 0x6a +100134a6: bf15 itete ne +100134a8: 2701 movne r7, #1 +100134aa: 2700 moveq r7, #0 +100134ac: 2104 movne r1, #4 +100134ae: 2100 moveq r1, #0 +100134b0: 2b00 cmp r3, #0 +100134b2: d0f0 beq.n 10013496 +100134b4: 2200 movs r2, #0 +100134b6: 4610 mov r0, r2 +100134b8: f7fd fde8 bl 1001108c +100134bc: 4601 mov r1, r0 +100134be: 2800 cmp r0, #0 +100134c0: d0e3 beq.n 1001348a +100134c2: 9700 str r7, [sp, #0] +100134c4: 6e23 ldr r3, [r4, #96] ; 0x60 +100134c6: 462a mov r2, r5 +100134c8: 4620 mov r0, r4 +100134ca: f7ff fd9f bl 1001300c +100134ce: 2800 cmp r0, #0 +100134d0: d0db beq.n 1001348a +100134d2: 6f23 ldr r3, [r4, #112] ; 0x70 +100134d4: bb03 cbnz r3, 10013518 +100134d6: 6720 str r0, [r4, #112] ; 0x70 +100134d8: 2300 movs r3, #0 +100134da: f8a4 306e strh.w r3, [r4, #110] ; 0x6e +100134de: b13e cbz r6, 100134f0 +100134e0: 6e23 ldr r3, [r4, #96] ; 0x60 +100134e2: 3301 adds r3, #1 +100134e4: 6623 str r3, [r4, #96] ; 0x60 +100134e6: f8b4 306a ldrh.w r3, [r4, #106] ; 0x6a +100134ea: 3b01 subs r3, #1 +100134ec: f8a4 306a strh.w r3, [r4, #106] ; 0x6a +100134f0: 07eb lsls r3, r5, #31 +100134f2: bf42 ittt mi +100134f4: f894 3022 ldrbmi.w r3, [r4, #34] ; 0x22 +100134f8: f043 0320 orrmi.w r3, r3, #32 +100134fc: f884 3022 strbmi.w r3, [r4, #34] ; 0x22 +10013500: 6840 ldr r0, [r0, #4] +10013502: f7fd fe6c bl 100111de +10013506: f8b4 306c ldrh.w r3, [r4, #108] ; 0x6c +1001350a: 4418 add r0, r3 +1001350c: f8a4 006c strh.w r0, [r4, #108] ; 0x6c +10013510: 2000 movs r0, #0 +10013512: b003 add sp, #12 +10013514: bdf0 pop {r4, r5, r6, r7, pc} +10013516: 4613 mov r3, r2 +10013518: 681a ldr r2, [r3, #0] +1001351a: 2a00 cmp r2, #0 +1001351c: d1fb bne.n 10013516 +1001351e: 6018 str r0, [r3, #0] +10013520: e7da b.n 100134d8 + +10013522 : +10013522: b5f8 push {r3, r4, r5, r6, r7, lr} +10013524: 6f04 ldr r4, [r0, #112] ; 0x70 +10013526: 4605 mov r5, r0 +10013528: b934 cbnz r4, 10013538 +1001352a: 4628 mov r0, r5 +1001352c: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +10013530: 2101 movs r1, #1 +10013532: f7ff bfa1 b.w 10013478 +10013536: 461c mov r4, r3 +10013538: 6823 ldr r3, [r4, #0] +1001353a: 2b00 cmp r3, #0 +1001353c: d1fb bne.n 10013536 +1001353e: 6923 ldr r3, [r4, #16] +10013540: 8998 ldrh r0, [r3, #12] +10013542: f7fc fa14 bl 1000f96e +10013546: f010 0707 ands.w r7, r0, #7 +1001354a: d1ee bne.n 1001352a +1001354c: 6926 ldr r6, [r4, #16] +1001354e: 2001 movs r0, #1 +10013550: 89b4 ldrh r4, [r6, #12] +10013552: f7fc fa09 bl 1000f968 +10013556: 4320 orrs r0, r4 +10013558: 81b0 strh r0, [r6, #12] +1001355a: f895 3022 ldrb.w r3, [r5, #34] ; 0x22 +1001355e: 4638 mov r0, r7 +10013560: f043 0320 orr.w r3, r3, #32 +10013564: f885 3022 strb.w r3, [r5, #34] ; 0x22 +10013568: bdf8 pop {r3, r4, r5, r6, r7, pc} + +1001356a : +1001356a: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1001356c: 4604 mov r4, r0 +1001356e: 6d40 ldr r0, [r0, #84] ; 0x54 +10013570: f7fc fa00 bl 1000f974 +10013574: 2100 movs r1, #0 +10013576: 4602 mov r2, r0 +10013578: 4620 mov r0, r4 +1001357a: f7ff fda9 bl 100130d0 +1001357e: 4605 mov r5, r0 +10013580: b1f8 cbz r0, 100135c2 +10013582: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10013586: 6847 ldr r7, [r0, #4] +10013588: f023 0303 bic.w r3, r3, #3 +1001358c: f884 3022 strb.w r3, [r4, #34] ; 0x22 +10013590: 8903 ldrh r3, [r0, #8] +10013592: 1d26 adds r6, r4, #4 +10013594: 9300 str r3, [sp, #0] +10013596: 4632 mov r2, r6 +10013598: 2306 movs r3, #6 +1001359a: 4621 mov r1, r4 +1001359c: f7fb fc40 bl 1000ee20 +100135a0: 2206 movs r2, #6 +100135a2: 8238 strh r0, [r7, #16] +100135a4: 9201 str r2, [sp, #4] +100135a6: 7a62 ldrb r2, [r4, #9] +100135a8: 7aa3 ldrb r3, [r4, #10] +100135aa: 9200 str r2, [sp, #0] +100135ac: 4621 mov r1, r4 +100135ae: 4632 mov r2, r6 +100135b0: 4628 mov r0, r5 +100135b2: f7fb fe6c bl 1000f28e +100135b6: 4628 mov r0, r5 +100135b8: f7fd fd45 bl 10011046 +100135bc: 2000 movs r0, #0 +100135be: b003 add sp, #12 +100135c0: bdf0 pop {r4, r5, r6, r7, pc} +100135c2: f06f 0001 mvn.w r0, #1 +100135c6: e7fa b.n 100135be + +100135c8 : +100135c8: 4b9e ldr r3, [pc, #632] ; (10013844 ) +100135ca: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +100135ce: 681b ldr r3, [r3, #0] +100135d0: 4604 mov r4, r0 +100135d2: 4298 cmp r0, r3 +100135d4: d02e beq.n 10013634 +100135d6: f8b0 3050 ldrh.w r3, [r0, #80] ; 0x50 +100135da: f8b0 7064 ldrh.w r7, [r0, #100] ; 0x64 +100135de: 6f05 ldr r5, [r0, #112] ; 0x70 +100135e0: 429f cmp r7, r3 +100135e2: bf28 it cs +100135e4: 461f movcs r7, r3 +100135e6: f890 3022 ldrb.w r3, [r0, #34] ; 0x22 +100135ea: 079a lsls r2, r3, #30 +100135ec: d510 bpl.n 10013610 +100135ee: b92d cbnz r5, 100135fc +100135f0: 4620 mov r0, r4 +100135f2: b003 add sp, #12 +100135f4: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100135f8: f7ff bfb7 b.w 1001356a +100135fc: 692b ldr r3, [r5, #16] +100135fe: 6858 ldr r0, [r3, #4] +10013600: f7fc f9ba bl 1000f978 +10013604: 892b ldrh r3, [r5, #8] +10013606: 6ce2 ldr r2, [r4, #76] ; 0x4c +10013608: 1a9b subs r3, r3, r2 +1001360a: 4418 add r0, r3 +1001360c: 4287 cmp r7, r0 +1001360e: d3ef bcc.n 100135f0 +10013610: 6f66 ldr r6, [r4, #116] ; 0x74 +10013612: b9a6 cbnz r6, 1001363e +10013614: f8df 9230 ldr.w r9, [pc, #560] ; 10013848 +10013618: f104 0804 add.w r8, r4, #4 +1001361c: 2d00 cmp r5, #0 +1001361e: d141 bne.n 100136a4 +10013620: 6f23 ldr r3, [r4, #112] ; 0x70 +10013622: b90b cbnz r3, 10013628 +10013624: f8a4 306e strh.w r3, [r4, #110] ; 0x6e +10013628: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +1001362c: f003 037f and.w r3, r3, #127 ; 0x7f +10013630: f884 3022 strb.w r3, [r4, #34] ; 0x22 +10013634: 2000 movs r0, #0 +10013636: b003 add sp, #12 +10013638: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1001363c: 461e mov r6, r3 +1001363e: 6833 ldr r3, [r6, #0] +10013640: 2b00 cmp r3, #0 +10013642: d1fb bne.n 1001363c +10013644: e7e6 b.n 10013614 +10013646: 692b ldr r3, [r5, #16] +10013648: 6858 ldr r0, [r3, #4] +1001364a: f7fc f995 bl 1000f978 +1001364e: 6933 ldr r3, [r6, #16] +10013650: 4682 mov sl, r0 +10013652: 6858 ldr r0, [r3, #4] +10013654: f7fc f990 bl 1000f978 +10013658: ebaa 0000 sub.w r0, sl, r0 +1001365c: 2800 cmp r0, #0 +1001365e: da1b bge.n 10013698 +10013660: f104 0a74 add.w sl, r4, #116 ; 0x74 +10013664: f8da 3000 ldr.w r3, [sl] +10013668: b933 cbnz r3, 10013678 +1001366a: f8da 3000 ldr.w r3, [sl] +1001366e: 602b str r3, [r5, #0] +10013670: f8ca 5000 str.w r5, [sl] +10013674: 6f25 ldr r5, [r4, #112] ; 0x70 +10013676: e7d1 b.n 1001361c +10013678: 691b ldr r3, [r3, #16] +1001367a: 6858 ldr r0, [r3, #4] +1001367c: f7fc f97c bl 1000f978 +10013680: 692b ldr r3, [r5, #16] +10013682: 4683 mov fp, r0 +10013684: 6858 ldr r0, [r3, #4] +10013686: f7fc f977 bl 1000f978 +1001368a: ebab 0000 sub.w r0, fp, r0 +1001368e: 2800 cmp r0, #0 +10013690: daeb bge.n 1001366a +10013692: f8da a000 ldr.w sl, [sl] +10013696: e7e5 b.n 10013664 +10013698: 6035 str r5, [r6, #0] +1001369a: e0cb b.n 10013834 +1001369c: 4628 mov r0, r5 +1001369e: f7fd ffb6 bl 1001160e +100136a2: e7e7 b.n 10013674 +100136a4: 692b ldr r3, [r5, #16] +100136a6: 6858 ldr r0, [r3, #4] +100136a8: f7fc f966 bl 1000f978 +100136ac: 892b ldrh r3, [r5, #8] +100136ae: 6ce2 ldr r2, [r4, #76] ; 0x4c +100136b0: 1a9b subs r3, r3, r2 +100136b2: 4418 add r0, r3 +100136b4: 4287 cmp r7, r0 +100136b6: d3b3 bcc.n 10013620 +100136b8: 692b ldr r3, [r5, #16] +100136ba: 8998 ldrh r0, [r3, #12] +100136bc: f7fc f957 bl 1000f96e +100136c0: 6f63 ldr r3, [r4, #116] ; 0x74 +100136c2: b1a3 cbz r3, 100136ee +100136c4: f894 2022 ldrb.w r2, [r4, #34] ; 0x22 +100136c8: f012 0f44 tst.w r2, #68 ; 0x44 +100136cc: d10f bne.n 100136ee +100136ce: 6f23 ldr r3, [r4, #112] ; 0x70 +100136d0: b12b cbz r3, 100136de +100136d2: 6819 ldr r1, [r3, #0] +100136d4: b959 cbnz r1, 100136ee +100136d6: 8919 ldrh r1, [r3, #8] +100136d8: 8f63 ldrh r3, [r4, #58] ; 0x3a +100136da: 4299 cmp r1, r3 +100136dc: d207 bcs.n 100136ee +100136de: f8b4 306a ldrh.w r3, [r4, #106] ; 0x6a +100136e2: b123 cbz r3, 100136ee +100136e4: f8b4 306c ldrh.w r3, [r4, #108] ; 0x6c +100136e8: 2b13 cmp r3, #19 +100136ea: f240 80a5 bls.w 10013838 +100136ee: 682b ldr r3, [r5, #0] +100136f0: 6723 str r3, [r4, #112] ; 0x70 +100136f2: 69a3 ldr r3, [r4, #24] +100136f4: 2b02 cmp r3, #2 +100136f6: d010 beq.n 1001371a +100136f8: f8d5 b010 ldr.w fp, [r5, #16] +100136fc: 2010 movs r0, #16 +100136fe: f8bb a00c ldrh.w sl, [fp, #12] +10013702: f7fc f931 bl 1000f968 +10013706: ea4a 0000 orr.w r0, sl, r0 +1001370a: f8ab 000c strh.w r0, [fp, #12] +1001370e: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10013712: f023 0303 bic.w r3, r3, #3 +10013716: f884 3022 strb.w r3, [r4, #34] ; 0x22 +1001371a: 6ae0 ldr r0, [r4, #44] ; 0x2c +1001371c: f8d5 a010 ldr.w sl, [r5, #16] +10013720: f7fc f928 bl 1000f974 +10013724: f8ca 0008 str.w r0, [sl, #8] +10013728: 8e60 ldrh r0, [r4, #50] ; 0x32 +1001372a: f8d5 a010 ldr.w sl, [r5, #16] +1001372e: f7fc f91b bl 1000f968 +10013732: 8e62 ldrh r2, [r4, #50] ; 0x32 +10013734: 6ae3 ldr r3, [r4, #44] ; 0x2c +10013736: f8aa 000e strh.w r0, [sl, #14] +1001373a: 4413 add r3, r2 +1001373c: 6363 str r3, [r4, #52] ; 0x34 +1001373e: 7b2b ldrb r3, [r5, #12] +10013740: 07db lsls r3, r3, #31 +10013742: d50c bpl.n 1001375e +10013744: 4641 mov r1, r8 +10013746: f240 50b4 movw r0, #1460 ; 0x5b4 +1001374a: f8d5 a010 ldr.w sl, [r5, #16] +1001374e: f7fe fb96 bl 10011e7e +10013752: f040 7001 orr.w r0, r0, #33816576 ; 0x2040000 +10013756: f7fc f90d bl 1000f974 +1001375a: f8ca 0014 str.w r0, [sl, #20] +1001375e: f9b4 3038 ldrsh.w r3, [r4, #56] ; 0x38 +10013762: 3301 adds r3, #1 +10013764: bf04 itt eq +10013766: 2300 moveq r3, #0 +10013768: 8723 strheq r3, [r4, #56] ; 0x38 +1001376a: 6823 ldr r3, [r4, #0] +1001376c: b933 cbnz r3, 1001377c +1001376e: 4640 mov r0, r8 +10013770: f7fb fbc2 bl 1000eef8 +10013774: 2800 cmp r0, #0 +10013776: d032 beq.n 100137de +10013778: 6843 ldr r3, [r0, #4] +1001377a: 6023 str r3, [r4, #0] +1001377c: 6be3 ldr r3, [r4, #60] ; 0x3c +1001377e: b93b cbnz r3, 10013790 +10013780: f8d9 3000 ldr.w r3, [r9] +10013784: 63e3 str r3, [r4, #60] ; 0x3c +10013786: 692b ldr r3, [r5, #16] +10013788: 6858 ldr r0, [r3, #4] +1001378a: f7fc f8f5 bl 1000f978 +1001378e: 6420 str r0, [r4, #64] ; 0x40 +10013790: 6868 ldr r0, [r5, #4] +10013792: f8d5 a010 ldr.w sl, [r5, #16] +10013796: 6843 ldr r3, [r0, #4] +10013798: 4621 mov r1, r4 +1001379a: ebaa 0303 sub.w r3, sl, r3 +1001379e: b29a uxth r2, r3 +100137a0: 8943 ldrh r3, [r0, #10] +100137a2: f8c0 a004 str.w sl, [r0, #4] +100137a6: 1a9b subs r3, r3, r2 +100137a8: 8143 strh r3, [r0, #10] +100137aa: 8903 ldrh r3, [r0, #8] +100137ac: 1a9b subs r3, r3, r2 +100137ae: 2200 movs r2, #0 +100137b0: b29b uxth r3, r3 +100137b2: 8103 strh r3, [r0, #8] +100137b4: f88a 2010 strb.w r2, [sl, #16] +100137b8: f88a 2011 strb.w r2, [sl, #17] +100137bc: 9300 str r3, [sp, #0] +100137be: 4642 mov r2, r8 +100137c0: 2306 movs r3, #6 +100137c2: f7fb fb2d bl 1000ee20 +100137c6: 2206 movs r2, #6 +100137c8: f8aa 0010 strh.w r0, [sl, #16] +100137cc: 9201 str r2, [sp, #4] +100137ce: 7a62 ldrb r2, [r4, #9] +100137d0: 7aa3 ldrb r3, [r4, #10] +100137d2: 9200 str r2, [sp, #0] +100137d4: 4621 mov r1, r4 +100137d6: 4642 mov r2, r8 +100137d8: 6868 ldr r0, [r5, #4] +100137da: f7fb fd58 bl 1000f28e +100137de: 692b ldr r3, [r5, #16] +100137e0: 6858 ldr r0, [r3, #4] +100137e2: f7fc f8c9 bl 1000f978 +100137e6: 692b ldr r3, [r5, #16] +100137e8: 4682 mov sl, r0 +100137ea: 8998 ldrh r0, [r3, #12] +100137ec: f8b5 b008 ldrh.w fp, [r5, #8] +100137f0: f7fc f8bd bl 1000f96e +100137f4: f010 0003 ands.w r0, r0, #3 +100137f8: bf18 it ne +100137fa: 2001 movne r0, #1 +100137fc: 6d63 ldr r3, [r4, #84] ; 0x54 +100137fe: 4458 add r0, fp +10013800: 4450 add r0, sl +10013802: 1a1b subs r3, r3, r0 +10013804: 2b00 cmp r3, #0 +10013806: 692b ldr r3, [r5, #16] +10013808: bfb8 it lt +1001380a: 6560 strlt r0, [r4, #84] ; 0x54 +1001380c: 8998 ldrh r0, [r3, #12] +1001380e: f8b5 a008 ldrh.w sl, [r5, #8] +10013812: f7fc f8ac bl 1000f96e +10013816: f010 0003 ands.w r0, r0, #3 +1001381a: bf18 it ne +1001381c: 2001 movne r0, #1 +1001381e: eb10 0f0a cmn.w r0, sl +10013822: f43f af3b beq.w 1001369c +10013826: 2300 movs r3, #0 +10013828: 602b str r3, [r5, #0] +1001382a: 6f63 ldr r3, [r4, #116] ; 0x74 +1001382c: 2b00 cmp r3, #0 +1001382e: f47f af0a bne.w 10013646 +10013832: 6765 str r5, [r4, #116] ; 0x74 +10013834: 462e mov r6, r5 +10013836: e71d b.n 10013674 +10013838: f012 0fa0 tst.w r2, #160 ; 0xa0 +1001383c: f47f af57 bne.w 100136ee +10013840: e6ee b.n 10013620 +10013842: bf00 nop +10013844: 1004b1ec .word 0x1004b1ec +10013848: 1004b1b4 .word 0x1004b1b4 + +1001384c : +1001384c: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10013850: 4681 mov r9, r0 +10013852: 460e mov r6, r1 +10013854: 4617 mov r7, r2 +10013856: 2114 movs r1, #20 +10013858: 2200 movs r2, #0 +1001385a: 2001 movs r0, #1 +1001385c: 4698 mov r8, r3 +1001385e: f8bd b030 ldrh.w fp, [sp, #48] ; 0x30 +10013862: f8bd a034 ldrh.w sl, [sp, #52] ; 0x34 +10013866: f7fd fc11 bl 1001108c +1001386a: 4605 mov r5, r0 +1001386c: b3b8 cbz r0, 100138de +1001386e: 6844 ldr r4, [r0, #4] +10013870: 4658 mov r0, fp +10013872: f7fc f879 bl 1000f968 +10013876: 8020 strh r0, [r4, #0] +10013878: 4650 mov r0, sl +1001387a: f7fc f875 bl 1000f968 +1001387e: 8060 strh r0, [r4, #2] +10013880: 4648 mov r0, r9 +10013882: f7fc f877 bl 1000f974 +10013886: 6060 str r0, [r4, #4] +10013888: 4630 mov r0, r6 +1001388a: f7fc f873 bl 1000f974 +1001388e: 60a0 str r0, [r4, #8] +10013890: f245 0014 movw r0, #20500 ; 0x5014 +10013894: f7fc f868 bl 1000f968 +10013898: 2316 movs r3, #22 +1001389a: 73a3 strb r3, [r4, #14] +1001389c: f06f 032f mvn.w r3, #47 ; 0x2f +100138a0: 2600 movs r6, #0 +100138a2: 73e3 strb r3, [r4, #15] +100138a4: 892b ldrh r3, [r5, #8] +100138a6: 81a0 strh r0, [r4, #12] +100138a8: 7426 strb r6, [r4, #16] +100138aa: 7466 strb r6, [r4, #17] +100138ac: 74a6 strb r6, [r4, #18] +100138ae: 74e6 strb r6, [r4, #19] +100138b0: 4642 mov r2, r8 +100138b2: 9300 str r3, [sp, #0] +100138b4: 4639 mov r1, r7 +100138b6: 2306 movs r3, #6 +100138b8: 4628 mov r0, r5 +100138ba: f7fb fab1 bl 1000ee20 +100138be: 2306 movs r3, #6 +100138c0: 8220 strh r0, [r4, #16] +100138c2: 4642 mov r2, r8 +100138c4: 9301 str r3, [sp, #4] +100138c6: 9600 str r6, [sp, #0] +100138c8: 23ff movs r3, #255 ; 0xff +100138ca: 4639 mov r1, r7 +100138cc: 4628 mov r0, r5 +100138ce: f7fb fcde bl 1000f28e +100138d2: 4628 mov r0, r5 +100138d4: b003 add sp, #12 +100138d6: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100138da: f7fd bbb4 b.w 10011046 +100138de: b003 add sp, #12 +100138e0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +100138e4 : +100138e4: 6f42 ldr r2, [r0, #116] ; 0x74 +100138e6: b410 push {r4} +100138e8: b18a cbz r2, 1001390e +100138ea: 4611 mov r1, r2 +100138ec: 680b ldr r3, [r1, #0] +100138ee: b963 cbnz r3, 1001390a +100138f0: 6f04 ldr r4, [r0, #112] ; 0x70 +100138f2: 600c str r4, [r1, #0] +100138f4: 6702 str r2, [r0, #112] ; 0x70 +100138f6: f890 204a ldrb.w r2, [r0, #74] ; 0x4a +100138fa: 6743 str r3, [r0, #116] ; 0x74 +100138fc: 3201 adds r2, #1 +100138fe: f880 204a strb.w r2, [r0, #74] ; 0x4a +10013902: 63c3 str r3, [r0, #60] ; 0x3c +10013904: bc10 pop {r4} +10013906: f7ff be5f b.w 100135c8 +1001390a: 4619 mov r1, r3 +1001390c: e7ee b.n 100138ec +1001390e: bc10 pop {r4} +10013910: 4770 bx lr + +10013912 : +10013912: b5f8 push {r3, r4, r5, r6, r7, lr} +10013914: 6f45 ldr r5, [r0, #116] ; 0x74 +10013916: 4604 mov r4, r0 +10013918: b19d cbz r5, 10013942 +1001391a: 682b ldr r3, [r5, #0] +1001391c: f100 0670 add.w r6, r0, #112 ; 0x70 +10013920: 6743 str r3, [r0, #116] ; 0x74 +10013922: 6833 ldr r3, [r6, #0] +10013924: b973 cbnz r3, 10013944 +10013926: 6833 ldr r3, [r6, #0] +10013928: 602b str r3, [r5, #0] +1001392a: 6035 str r5, [r6, #0] +1001392c: 682b ldr r3, [r5, #0] +1001392e: b90b cbnz r3, 10013934 +10013930: f8a4 306e strh.w r3, [r4, #110] ; 0x6e +10013934: f894 304a ldrb.w r3, [r4, #74] ; 0x4a +10013938: 3301 adds r3, #1 +1001393a: f884 304a strb.w r3, [r4, #74] ; 0x4a +1001393e: 2300 movs r3, #0 +10013940: 63e3 str r3, [r4, #60] ; 0x3c +10013942: bdf8 pop {r3, r4, r5, r6, r7, pc} +10013944: 691b ldr r3, [r3, #16] +10013946: 6858 ldr r0, [r3, #4] +10013948: f7fc f816 bl 1000f978 +1001394c: 692b ldr r3, [r5, #16] +1001394e: 4607 mov r7, r0 +10013950: 6858 ldr r0, [r3, #4] +10013952: f7fc f811 bl 1000f978 +10013956: 1a38 subs r0, r7, r0 +10013958: 2800 cmp r0, #0 +1001395a: dae4 bge.n 10013926 +1001395c: 6836 ldr r6, [r6, #0] +1001395e: e7e0 b.n 10013922 + +10013960 : +10013960: 6f43 ldr r3, [r0, #116] ; 0x74 +10013962: b510 push {r4, lr} +10013964: 4604 mov r4, r0 +10013966: b32b cbz r3, 100139b4 +10013968: f890 3022 ldrb.w r3, [r0, #34] ; 0x22 +1001396c: 075b lsls r3, r3, #29 +1001396e: d421 bmi.n 100139b4 +10013970: f7ff ffcf bl 10013912 +10013974: f8b4 3050 ldrh.w r3, [r4, #80] ; 0x50 +10013978: f8b4 2064 ldrh.w r2, [r4, #100] ; 0x64 +1001397c: 4293 cmp r3, r2 +1001397e: bf8b itete hi +10013980: 0852 lsrhi r2, r2, #1 +10013982: 085b lsrls r3, r3, #1 +10013984: f8a4 2052 strhhi.w r2, [r4, #82] ; 0x52 +10013988: f8a4 3052 strhls.w r3, [r4, #82] ; 0x52 +1001398c: 8f63 ldrh r3, [r4, #58] ; 0x3a +1001398e: f8b4 1052 ldrh.w r1, [r4, #82] ; 0x52 +10013992: 005a lsls r2, r3, #1 +10013994: 4291 cmp r1, r2 +10013996: bfb8 it lt +10013998: f8a4 2052 strhlt.w r2, [r4, #82] ; 0x52 +1001399c: 4413 add r3, r2 +1001399e: f8b4 2052 ldrh.w r2, [r4, #82] ; 0x52 +100139a2: 4413 add r3, r2 +100139a4: f8a4 3050 strh.w r3, [r4, #80] ; 0x50 +100139a8: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +100139ac: f043 0304 orr.w r3, r3, #4 +100139b0: f884 3022 strb.w r3, [r4, #34] ; 0x22 +100139b4: bd10 pop {r4, pc} + +100139b6 : +100139b6: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +100139b8: 4604 mov r4, r0 +100139ba: 6d40 ldr r0, [r0, #84] ; 0x54 +100139bc: 3801 subs r0, #1 +100139be: f7fb ffd9 bl 1000f974 +100139c2: 2100 movs r1, #0 +100139c4: 4602 mov r2, r0 +100139c6: 4620 mov r0, r4 +100139c8: f7ff fb82 bl 100130d0 +100139cc: 4605 mov r5, r0 +100139ce: b1c8 cbz r0, 10013a04 +100139d0: 8903 ldrh r3, [r0, #8] +100139d2: 1d26 adds r6, r4, #4 +100139d4: 6847 ldr r7, [r0, #4] +100139d6: 4632 mov r2, r6 +100139d8: 9300 str r3, [sp, #0] +100139da: 4621 mov r1, r4 +100139dc: 2306 movs r3, #6 +100139de: f7fb fa1f bl 1000ee20 +100139e2: 2100 movs r1, #0 +100139e4: 2206 movs r2, #6 +100139e6: 8238 strh r0, [r7, #16] +100139e8: 7aa3 ldrb r3, [r4, #10] +100139ea: e88d 0006 stmia.w sp, {r1, r2} +100139ee: 4628 mov r0, r5 +100139f0: 4632 mov r2, r6 +100139f2: 4621 mov r1, r4 +100139f4: f7fb fc4b bl 1000f28e +100139f8: 4628 mov r0, r5 +100139fa: b003 add sp, #12 +100139fc: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} +10013a00: f7fd bb21 b.w 10011046 +10013a04: b003 add sp, #12 +10013a06: bdf0 pop {r4, r5, r6, r7, pc} + +10013a08 : +10013a08: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +10013a0c: 6f45 ldr r5, [r0, #116] ; 0x74 +10013a0e: 4606 mov r6, r0 +10013a10: b915 cbnz r5, 10013a18 +10013a12: 6f05 ldr r5, [r0, #112] ; 0x70 +10013a14: 2d00 cmp r5, #0 +10013a16: d047 beq.n 10013aa8 +10013a18: 692b ldr r3, [r5, #16] +10013a1a: 8998 ldrh r0, [r3, #12] +10013a1c: f7fb ffa7 bl 1000f96e +10013a20: f010 0401 ands.w r4, r0, #1 +10013a24: bf18 it ne +10013a26: 892c ldrhne r4, [r5, #8] +10013a28: 692b ldr r3, [r5, #16] +10013a2a: bf1c itt ne +10013a2c: fab4 f484 clzne r4, r4 +10013a30: 0964 lsrne r4, r4, #5 +10013a32: 685a ldr r2, [r3, #4] +10013a34: f084 0101 eor.w r1, r4, #1 +10013a38: 4630 mov r0, r6 +10013a3a: f7ff fb49 bl 100130d0 +10013a3e: 4607 mov r7, r0 +10013a40: b390 cbz r0, 10013aa8 +10013a42: f8d0 8004 ldr.w r8, [r0, #4] +10013a46: b324 cbz r4, 10013a92 +10013a48: 2011 movs r0, #17 +10013a4a: f9b8 400c ldrsh.w r4, [r8, #12] +10013a4e: f7fb ff8b bl 1000f968 +10013a52: f424 547c bic.w r4, r4, #16128 ; 0x3f00 +10013a56: 4320 orrs r0, r4 +10013a58: f8a8 000c strh.w r0, [r8, #12] +10013a5c: 893b ldrh r3, [r7, #8] +10013a5e: 1d34 adds r4, r6, #4 +10013a60: 9300 str r3, [sp, #0] +10013a62: 4622 mov r2, r4 +10013a64: 4631 mov r1, r6 +10013a66: 2306 movs r3, #6 +10013a68: 4638 mov r0, r7 +10013a6a: f7fb f9d9 bl 1000ee20 +10013a6e: 2100 movs r1, #0 +10013a70: 2206 movs r2, #6 +10013a72: f8a8 0010 strh.w r0, [r8, #16] +10013a76: 7ab3 ldrb r3, [r6, #10] +10013a78: e88d 0006 stmia.w sp, {r1, r2} +10013a7c: 4638 mov r0, r7 +10013a7e: 4622 mov r2, r4 +10013a80: 4631 mov r1, r6 +10013a82: f7fb fc04 bl 1000f28e +10013a86: 4638 mov r0, r7 +10013a88: b002 add sp, #8 +10013a8a: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +10013a8e: f7fd bada b.w 10011046 +10013a92: 6868 ldr r0, [r5, #4] +10013a94: 892a ldrh r2, [r5, #8] +10013a96: 8903 ldrh r3, [r0, #8] +10013a98: f108 0114 add.w r1, r8, #20 +10013a9c: 1a9b subs r3, r3, r2 +10013a9e: b29b uxth r3, r3 +10013aa0: 2201 movs r2, #1 +10013aa2: f7fd fc15 bl 100112d0 +10013aa6: e7d9 b.n 10013a5c +10013aa8: b002 add sp, #8 +10013aaa: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + ... + +10013ab0 : +10013ab0: b508 push {r3, lr} +10013ab2: 4b04 ldr r3, [pc, #16] ; (10013ac4 ) +10013ab4: 4798 blx r3 +10013ab6: ea6f 4080 mvn.w r0, r0, lsl #18 +10013aba: ea6f 4090 mvn.w r0, r0, lsr #18 +10013abe: 4b02 ldr r3, [pc, #8] ; (10013ac8 ) +10013ac0: 8018 strh r0, [r3, #0] +10013ac2: bd08 pop {r3, pc} +10013ac4: 0000f585 .word 0x0000f585 +10013ac8: 10044ede .word 0x10044ede + +10013acc : +10013acc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10013ad0: f8d0 a004 ldr.w sl, [r0, #4] +10013ad4: 468b mov fp, r1 +10013ad6: f89a 1000 ldrb.w r1, [sl] +10013ada: 8903 ldrh r3, [r0, #8] +10013adc: f001 010f and.w r1, r1, #15 +10013ae0: 1c8a adds r2, r1, #2 +10013ae2: ebb3 0f82 cmp.w r3, r2, lsl #2 +10013ae6: b085 sub sp, #20 +10013ae8: 4605 mov r5, r0 +10013aea: db05 blt.n 10013af8 +10013aec: 0089 lsls r1, r1, #2 +10013aee: 4249 negs r1, r1 +10013af0: f7fd fa7e bl 10010ff0 +10013af4: 4606 mov r6, r0 +10013af6: b128 cbz r0, 10013b04 +10013af8: 4628 mov r0, r5 +10013afa: b005 add sp, #20 +10013afc: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10013b00: f7fd baa1 b.w 10011046 +10013b04: 4c52 ldr r4, [pc, #328] ; (10013c50 ) +10013b06: 4659 mov r1, fp +10013b08: 6820 ldr r0, [r4, #0] +10013b0a: 686f ldr r7, [r5, #4] +10013b0c: f7fb fbdb bl 1000f2c6 +10013b10: 4680 mov r8, r0 +10013b12: 8838 ldrh r0, [r7, #0] +10013b14: f7fb ff2b bl 1000f96e +10013b18: 4681 mov r9, r0 +10013b1a: 8878 ldrh r0, [r7, #2] +10013b1c: f7fb ff27 bl 1000f96e +10013b20: 2844 cmp r0, #68 ; 0x44 +10013b22: d131 bne.n 10013b88 +10013b24: f1b9 0f43 cmp.w r9, #67 ; 0x43 +10013b28: d13d bne.n 10013ba6 +10013b2a: f8db 3020 ldr.w r3, [fp, #32] +10013b2e: 2b00 cmp r3, #0 +10013b30: d039 beq.n 10013ba6 +10013b32: 685c ldr r4, [r3, #4] +10013b34: 2c00 cmp r4, #0 +10013b36: d036 beq.n 10013ba6 +10013b38: 6863 ldr r3, [r4, #4] +10013b3a: b11b cbz r3, 10013b44 +10013b3c: 4a45 ldr r2, [pc, #276] ; (10013c54 ) +10013b3e: 6812 ldr r2, [r2, #0] +10013b40: 4293 cmp r3, r2 +10013b42: d130 bne.n 10013ba6 +10013b44: 88fb ldrh r3, [r7, #6] +10013b46: b14b cbz r3, 10013b5c +10013b48: 892b ldrh r3, [r5, #8] +10013b4a: 4a41 ldr r2, [pc, #260] ; (10013c50 ) +10013b4c: 9300 str r3, [sp, #0] +10013b4e: 4941 ldr r1, [pc, #260] ; (10013c54 ) +10013b50: 2311 movs r3, #17 +10013b52: 4628 mov r0, r5 +10013b54: f7fb f964 bl 1000ee20 +10013b58: 2800 cmp r0, #0 +10013b5a: d1cd bne.n 10013af8 +10013b5c: f06f 0107 mvn.w r1, #7 +10013b60: 4628 mov r0, r5 +10013b62: f7fd fa45 bl 10010ff0 +10013b66: 2800 cmp r0, #0 +10013b68: d1c6 bne.n 10013af8 +10013b6a: 2c00 cmp r4, #0 +10013b6c: d056 beq.n 10013c1c +10013b6e: 69e6 ldr r6, [r4, #28] +10013b70: 2e00 cmp r6, #0 +10013b72: d0c1 beq.n 10013af8 +10013b74: f8cd 9000 str.w r9, [sp] +10013b78: 4b36 ldr r3, [pc, #216] ; (10013c54 ) +10013b7a: 462a mov r2, r5 +10013b7c: 4621 mov r1, r4 +10013b7e: 6a20 ldr r0, [r4, #32] +10013b80: 47b0 blx r6 +10013b82: b005 add sp, #20 +10013b84: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10013b88: 4b33 ldr r3, [pc, #204] ; (10013c58 ) +10013b8a: f8d4 e000 ldr.w lr, [r4] +10013b8e: 681b ldr r3, [r3, #0] +10013b90: f00e 0cf0 and.w ip, lr, #240 ; 0xf0 +10013b94: 9302 str r3, [sp, #8] +10013b96: 4b2f ldr r3, [pc, #188] ; (10013c54 ) +10013b98: 9c02 ldr r4, [sp, #8] +10013b9a: 681b ldr r3, [r3, #0] +10013b9c: 9303 str r3, [sp, #12] +10013b9e: 4633 mov r3, r6 +10013ba0: b94c cbnz r4, 10013bb6 +10013ba2: 2b00 cmp r3, #0 +10013ba4: d138 bne.n 10013c18 +10013ba6: 4b2a ldr r3, [pc, #168] ; (10013c50 ) +10013ba8: f8db 2004 ldr.w r2, [fp, #4] +10013bac: 681b ldr r3, [r3, #0] +10013bae: 429a cmp r2, r3 +10013bb0: d1a2 bne.n 10013af8 +10013bb2: 2400 movs r4, #0 +10013bb4: e7c6 b.n 10013b44 +10013bb6: 8a62 ldrh r2, [r4, #18] +10013bb8: 4282 cmp r2, r0 +10013bba: d12a bne.n 10013c12 +10013bbc: 6822 ldr r2, [r4, #0] +10013bbe: f1b8 0f00 cmp.w r8, #0 +10013bc2: d100 bne.n 10013bc6 +10013bc4: b172 cbz r2, 10013be4 +10013bc6: 4572 cmp r2, lr +10013bc8: d00c beq.n 10013be4 +10013bca: f1bc 0fe0 cmp.w ip, #224 ; 0xe0 +10013bce: d009 beq.n 10013be4 +10013bd0: f1b8 0f00 cmp.w r8, #0 +10013bd4: d01d beq.n 10013c12 +10013bd6: b12a cbz r2, 10013be4 +10013bd8: f8db 1008 ldr.w r1, [fp, #8] +10013bdc: ea82 020e eor.w r2, r2, lr +10013be0: 420a tst r2, r1 +10013be2: d116 bne.n 10013c12 +10013be4: b923 cbnz r3, 10013bf0 +10013be6: 7c22 ldrb r2, [r4, #16] +10013be8: f012 0f04 tst.w r2, #4 +10013bec: bf08 it eq +10013bee: 4623 moveq r3, r4 +10013bf0: 8aa2 ldrh r2, [r4, #20] +10013bf2: 454a cmp r2, r9 +10013bf4: d10d bne.n 10013c12 +10013bf6: 6862 ldr r2, [r4, #4] +10013bf8: b942 cbnz r2, 10013c0c +10013bfa: 2e00 cmp r6, #0 +10013bfc: d0a2 beq.n 10013b44 +10013bfe: 68e3 ldr r3, [r4, #12] +10013c00: 60f3 str r3, [r6, #12] +10013c02: 9b02 ldr r3, [sp, #8] +10013c04: 60e3 str r3, [r4, #12] +10013c06: 4b14 ldr r3, [pc, #80] ; (10013c58 ) +10013c08: 601c str r4, [r3, #0] +10013c0a: e79b b.n 10013b44 +10013c0c: 9903 ldr r1, [sp, #12] +10013c0e: 428a cmp r2, r1 +10013c10: d0f3 beq.n 10013bfa +10013c12: 4626 mov r6, r4 +10013c14: 68e4 ldr r4, [r4, #12] +10013c16: e7c3 b.n 10013ba0 +10013c18: 461c mov r4, r3 +10013c1a: e793 b.n 10013b44 +10013c1c: f1b8 0f00 cmp.w r8, #0 +10013c20: f47f af6a bne.w 10013af8 +10013c24: 4b0a ldr r3, [pc, #40] ; (10013c50 ) +10013c26: 681b ldr r3, [r3, #0] +10013c28: f003 03f0 and.w r3, r3, #240 ; 0xf0 +10013c2c: 2be0 cmp r3, #224 ; 0xe0 +10013c2e: f43f af63 beq.w 10013af8 +10013c32: f89a 1000 ldrb.w r1, [sl] +10013c36: 4628 mov r0, r5 +10013c38: f001 010f and.w r1, r1, #15 +10013c3c: 3102 adds r1, #2 +10013c3e: 0089 lsls r1, r1, #2 +10013c40: f7fd f9d6 bl 10010ff0 +10013c44: 2103 movs r1, #3 +10013c46: 4628 mov r0, r5 +10013c48: f7fa ff3a bl 1000eac0 +10013c4c: e754 b.n 10013af8 +10013c4e: bf00 nop +10013c50: 1004aab0 .word 0x1004aab0 +10013c54: 1004aab4 .word 0x1004aab4 +10013c58: 1004b1f8 .word 0x1004b1f8 + +10013c5c : +10013c5c: b5f0 push {r4, r5, r6, r7, lr} +10013c5e: 4e26 ldr r6, [pc, #152] ; (10013cf8 ) +10013c60: 2400 movs r4, #0 +10013c62: 6837 ldr r7, [r6, #0] +10013c64: 463b mov r3, r7 +10013c66: b9db cbnz r3, 10013ca0 +10013c68: b101 cbz r1, 10013c6c +10013c6a: 6809 ldr r1, [r1, #0] +10013c6c: 6001 str r1, [r0, #0] +10013c6e: b98a cbnz r2, 10013c94 +10013c70: f44f 4580 mov.w r5, #16384 ; 0x4000 +10013c74: f64f 7cff movw ip, #65535 ; 0xffff +10013c78: 4920 ldr r1, [pc, #128] ; (10013cfc ) +10013c7a: 880b ldrh r3, [r1, #0] +10013c7c: 4563 cmp r3, ip +10013c7e: bf08 it eq +10013c80: f44f 4240 moveq.w r2, #49152 ; 0xc000 +10013c84: 46be mov lr, r7 +10013c86: bf1c itt ne +10013c88: 1c5a addne r2, r3, #1 +10013c8a: b292 uxthne r2, r2 +10013c8c: f1be 0f00 cmp.w lr, #0 +10013c90: d125 bne.n 10013cde +10013c92: 800a strh r2, [r1, #0] +10013c94: 8242 strh r2, [r0, #18] +10013c96: b90c cbnz r4, 10013c9c +10013c98: 60c7 str r7, [r0, #12] +10013c9a: 6030 str r0, [r6, #0] +10013c9c: 2000 movs r0, #0 +10013c9e: bdf0 pop {r4, r5, r6, r7, pc} +10013ca0: 4283 cmp r3, r0 +10013ca2: d01a beq.n 10013cda +10013ca4: 7a05 ldrb r5, [r0, #8] +10013ca6: 076d lsls r5, r5, #29 +10013ca8: d415 bmi.n 10013cd6 +10013caa: 7a1d ldrb r5, [r3, #8] +10013cac: 076d lsls r5, r5, #29 +10013cae: d412 bmi.n 10013cd6 +10013cb0: 8a5d ldrh r5, [r3, #18] +10013cb2: 4295 cmp r5, r2 +10013cb4: d10f bne.n 10013cd6 +10013cb6: b913 cbnz r3, 10013cbe +10013cb8: f06f 0007 mvn.w r0, #7 +10013cbc: bdf0 pop {r4, r5, r6, r7, pc} +10013cbe: f8d3 e000 ldr.w lr, [r3] +10013cc2: f1be 0f00 cmp.w lr, #0 +10013cc6: d0f7 beq.n 10013cb8 +10013cc8: 2900 cmp r1, #0 +10013cca: d0f5 beq.n 10013cb8 +10013ccc: 680d ldr r5, [r1, #0] +10013cce: 2d00 cmp r5, #0 +10013cd0: d0f2 beq.n 10013cb8 +10013cd2: 45ae cmp lr, r5 +10013cd4: d0f0 beq.n 10013cb8 +10013cd6: 68db ldr r3, [r3, #12] +10013cd8: e7c5 b.n 10013c66 +10013cda: 2401 movs r4, #1 +10013cdc: e7fb b.n 10013cd6 +10013cde: f8be 3012 ldrh.w r3, [lr, #18] +10013ce2: 4293 cmp r3, r2 +10013ce4: d105 bne.n 10013cf2 +10013ce6: 3d01 subs r5, #1 +10013ce8: b2ad uxth r5, r5 +10013cea: 2d00 cmp r5, #0 +10013cec: d1c6 bne.n 10013c7c +10013cee: 800a strh r2, [r1, #0] +10013cf0: e7e2 b.n 10013cb8 +10013cf2: f8de e00c ldr.w lr, [lr, #12] +10013cf6: e7c9 b.n 10013c8c +10013cf8: 1004b1f8 .word 0x1004b1f8 +10013cfc: 10044ede .word 0x10044ede + +10013d00 : +10013d00: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} +10013d04: 4691 mov r9, r2 +10013d06: 8a42 ldrh r2, [r0, #18] +10013d08: 4605 mov r5, r0 +10013d0a: 460f mov r7, r1 +10013d0c: 4698 mov r8, r3 +10013d0e: f8dd a030 ldr.w sl, [sp, #48] ; 0x30 +10013d12: 2a00 cmp r2, #0 +10013d14: d04c beq.n 10013db0 +10013d16: 2108 movs r1, #8 +10013d18: 4638 mov r0, r7 +10013d1a: f7fd f969 bl 10010ff0 +10013d1e: 2800 cmp r0, #0 +10013d20: d150 bne.n 10013dc4 +10013d22: 463c mov r4, r7 +10013d24: 8a68 ldrh r0, [r5, #18] +10013d26: 6866 ldr r6, [r4, #4] +10013d28: f7fb fe1e bl 1000f968 +10013d2c: 8030 strh r0, [r6, #0] +10013d2e: 4640 mov r0, r8 +10013d30: f7fb fe1a bl 1000f968 +10013d34: 2300 movs r3, #0 +10013d36: 71b3 strb r3, [r6, #6] +10013d38: 71f3 strb r3, [r6, #7] +10013d3a: f8d9 3000 ldr.w r3, [r9] +10013d3e: 8070 strh r0, [r6, #2] +10013d40: f003 03f0 and.w r3, r3, #240 ; 0xf0 +10013d44: 2be0 cmp r3, #224 ; 0xe0 +10013d46: d106 bne.n 10013d56 +10013d48: 7c2b ldrb r3, [r5, #16] +10013d4a: 071a lsls r2, r3, #28 +10013d4c: bf42 ittt mi +10013d4e: 7b63 ldrbmi r3, [r4, #13] +10013d50: f043 0304 orrmi.w r3, r3, #4 +10013d54: 7363 strbmi r3, [r4, #13] +10013d56: 682b ldr r3, [r5, #0] +10013d58: 2b00 cmp r3, #0 +10013d5a: d141 bne.n 10013de0 +10013d5c: f10a 0804 add.w r8, sl, #4 +10013d60: 8920 ldrh r0, [r4, #8] +10013d62: f7fb fe01 bl 1000f968 +10013d66: 80b0 strh r0, [r6, #4] +10013d68: 7c2b ldrb r3, [r5, #16] +10013d6a: 07db lsls r3, r3, #31 +10013d6c: d40d bmi.n 10013d8a +10013d6e: 8923 ldrh r3, [r4, #8] +10013d70: 464a mov r2, r9 +10013d72: 9300 str r3, [sp, #0] +10013d74: 4641 mov r1, r8 +10013d76: 2311 movs r3, #17 +10013d78: 4620 mov r0, r4 +10013d7a: f7fb f851 bl 1000ee20 +10013d7e: f64f 73ff movw r3, #65535 ; 0xffff +10013d82: 2800 cmp r0, #0 +10013d84: bf08 it eq +10013d86: 4618 moveq r0, r3 +10013d88: 80f0 strh r0, [r6, #6] +10013d8a: 2211 movs r2, #17 +10013d8c: 9201 str r2, [sp, #4] +10013d8e: 7a6a ldrb r2, [r5, #9] +10013d90: 7aab ldrb r3, [r5, #10] +10013d92: 9200 str r2, [sp, #0] +10013d94: f8cd a008 str.w sl, [sp, #8] +10013d98: 464a mov r2, r9 +10013d9a: 4641 mov r1, r8 +10013d9c: 4620 mov r0, r4 +10013d9e: f7fb fa65 bl 1000f26c +10013da2: 42bc cmp r4, r7 +10013da4: 4606 mov r6, r0 +10013da6: d009 beq.n 10013dbc +10013da8: 4620 mov r0, r4 +10013daa: f7fd f94c bl 10011046 +10013dae: e005 b.n 10013dbc +10013db0: 4601 mov r1, r0 +10013db2: f7ff ff53 bl 10013c5c +10013db6: 4606 mov r6, r0 +10013db8: 2800 cmp r0, #0 +10013dba: d0ac beq.n 10013d16 +10013dbc: 4630 mov r0, r6 +10013dbe: b004 add sp, #16 +10013dc0: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10013dc4: 2200 movs r2, #0 +10013dc6: 2108 movs r1, #8 +10013dc8: 2001 movs r0, #1 +10013dca: f7fd f95f bl 1001108c +10013dce: 4604 mov r4, r0 +10013dd0: b1a0 cbz r0, 10013dfc +10013dd2: 893b ldrh r3, [r7, #8] +10013dd4: 2b00 cmp r3, #0 +10013dd6: d0a5 beq.n 10013d24 +10013dd8: 4639 mov r1, r7 +10013dda: f7fd fa23 bl 10011224 +10013dde: e7a1 b.n 10013d24 +10013de0: f8da 2004 ldr.w r2, [sl, #4] +10013de4: 4293 cmp r3, r2 +10013de6: d007 beq.n 10013df8 +10013de8: 42bc cmp r4, r7 +10013dea: d002 beq.n 10013df2 +10013dec: 4620 mov r0, r4 +10013dee: f7fd f92a bl 10011046 +10013df2: f06f 0605 mvn.w r6, #5 +10013df6: e7e1 b.n 10013dbc +10013df8: 46a8 mov r8, r5 +10013dfa: e7b1 b.n 10013d60 +10013dfc: f04f 36ff mov.w r6, #4294967295 +10013e00: e7dc b.n 10013dbc + +10013e02 : +10013e02: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +10013e04: 4614 mov r4, r2 +10013e06: 6812 ldr r2, [r2, #0] +10013e08: 4605 mov r5, r0 +10013e0a: f002 02f0 and.w r2, r2, #240 ; 0xf0 +10013e0e: 2ae0 cmp r2, #224 ; 0xe0 +10013e10: bf0c ite eq +10013e12: 3018 addeq r0, #24 +10013e14: 4620 movne r0, r4 +10013e16: 460e mov r6, r1 +10013e18: 461f mov r7, r3 +10013e1a: f7fb f86d bl 1000eef8 +10013e1e: b140 cbz r0, 10013e32 +10013e20: 9000 str r0, [sp, #0] +10013e22: 463b mov r3, r7 +10013e24: 4622 mov r2, r4 +10013e26: 4631 mov r1, r6 +10013e28: 4628 mov r0, r5 +10013e2a: f7ff ff69 bl 10013d00 +10013e2e: b003 add sp, #12 +10013e30: bdf0 pop {r4, r5, r6, r7, pc} +10013e32: f06f 0003 mvn.w r0, #3 +10013e36: e7fa b.n 10013e2e + +10013e38 : +10013e38: b570 push {r4, r5, r6, lr} +10013e3a: 4616 mov r6, r2 +10013e3c: 8a42 ldrh r2, [r0, #18] +10013e3e: 4604 mov r4, r0 +10013e40: 460d mov r5, r1 +10013e42: b16a cbz r2, 10013e60 +10013e44: b995 cbnz r5, 10013e6c +10013e46: 7c23 ldrb r3, [r4, #16] +10013e48: 6065 str r5, [r4, #4] +10013e4a: f043 0304 orr.w r3, r3, #4 +10013e4e: 7423 strb r3, [r4, #16] +10013e50: 4b0a ldr r3, [pc, #40] ; (10013e7c ) +10013e52: 82a6 strh r6, [r4, #20] +10013e54: 681a ldr r2, [r3, #0] +10013e56: 4610 mov r0, r2 +10013e58: b950 cbnz r0, 10013e70 +10013e5a: 60e2 str r2, [r4, #12] +10013e5c: 601c str r4, [r3, #0] +10013e5e: bd70 pop {r4, r5, r6, pc} +10013e60: 4601 mov r1, r0 +10013e62: f7ff fefb bl 10013c5c +10013e66: 2800 cmp r0, #0 +10013e68: d0ec beq.n 10013e44 +10013e6a: bd70 pop {r4, r5, r6, pc} +10013e6c: 682d ldr r5, [r5, #0] +10013e6e: e7ea b.n 10013e46 +10013e70: 42a0 cmp r0, r4 +10013e72: d001 beq.n 10013e78 +10013e74: 68c0 ldr r0, [r0, #12] +10013e76: e7ef b.n 10013e58 +10013e78: 2000 movs r0, #0 +10013e7a: bd70 pop {r4, r5, r6, pc} +10013e7c: 1004b1f8 .word 0x1004b1f8 + +10013e80 : +10013e80: 2300 movs r3, #0 +10013e82: 6043 str r3, [r0, #4] +10013e84: 8283 strh r3, [r0, #20] +10013e86: 7c03 ldrb r3, [r0, #16] +10013e88: f023 0304 bic.w r3, r3, #4 +10013e8c: 7403 strb r3, [r0, #16] +10013e8e: 4770 bx lr + +10013e90 : +10013e90: 61c1 str r1, [r0, #28] +10013e92: 6202 str r2, [r0, #32] +10013e94: 4770 bx lr + ... + +10013e98 : +10013e98: 4a08 ldr r2, [pc, #32] ; (10013ebc ) +10013e9a: 6813 ldr r3, [r2, #0] +10013e9c: 4283 cmp r3, r0 +10013e9e: d10a bne.n 10013eb6 +10013ea0: 68c3 ldr r3, [r0, #12] +10013ea2: 6013 str r3, [r2, #0] +10013ea4: f001 b9f2 b.w 1001528c +10013ea8: 68da ldr r2, [r3, #12] +10013eaa: b11a cbz r2, 10013eb4 +10013eac: 4290 cmp r0, r2 +10013eae: bf04 itt eq +10013eb0: 68c2 ldreq r2, [r0, #12] +10013eb2: 60da streq r2, [r3, #12] +10013eb4: 68db ldr r3, [r3, #12] +10013eb6: 2b00 cmp r3, #0 +10013eb8: d1f6 bne.n 10013ea8 +10013eba: e7f3 b.n 10013ea4 +10013ebc: 1004b1f8 .word 0x1004b1f8 + +10013ec0 : +10013ec0: 4b07 ldr r3, [pc, #28] ; (10013ee0 ) +10013ec2: b510 push {r4, lr} +10013ec4: 8858 ldrh r0, [r3, #2] +10013ec6: f001 f945 bl 10015154 +10013eca: 4604 mov r4, r0 +10013ecc: b128 cbz r0, 10013eda +10013ece: 2224 movs r2, #36 ; 0x24 +10013ed0: 2100 movs r1, #0 +10013ed2: f006 fe81 bl 1001abd8 +10013ed6: 23ff movs r3, #255 ; 0xff +10013ed8: 72a3 strb r3, [r4, #10] +10013eda: 4620 mov r0, r4 +10013edc: bd10 pop {r4, pc} +10013ede: bf00 nop +10013ee0: 100400a8 .word 0x100400a8 + +10013ee4 : +10013ee4: b570 push {r4, r5, r6, lr} +10013ee6: 2614 movs r6, #20 +10013ee8: 4346 muls r6, r0 +10013eea: 4d09 ldr r5, [pc, #36] ; (10013f10 ) +10013eec: 4604 mov r4, r0 +10013eee: 59a8 ldr r0, [r5, r6] +10013ef0: b118 cbz r0, 10013efa +10013ef2: f7fd f8a8 bl 10011046 +10013ef6: 2300 movs r3, #0 +10013ef8: 51ab str r3, [r5, r6] +10013efa: 2014 movs r0, #20 +10013efc: 2300 movs r3, #0 +10013efe: fb00 5004 mla r0, r0, r4, r5 +10013f02: 7483 strb r3, [r0, #18] +10013f04: 74c3 strb r3, [r0, #19] +10013f06: 6083 str r3, [r0, #8] +10013f08: 6043 str r3, [r0, #4] +10013f0a: 60c3 str r3, [r0, #12] +10013f0c: 8203 strh r3, [r0, #16] +10013f0e: bd70 pop {r4, r5, r6, pc} +10013f10: 1004b1fc .word 0x1004b1fc + +10013f14 : +10013f14: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10013f18: 220a movs r2, #10 +10013f1a: 4605 mov r5, r0 +10013f1c: 2000 movs r0, #0 +10013f1e: 4b30 ldr r3, [pc, #192] ; (10013fe0 ) +10013f20: 4681 mov r9, r0 +10013f22: 4684 mov ip, r0 +10013f24: 4683 mov fp, r0 +10013f26: 4614 mov r4, r2 +10013f28: 4696 mov lr, r2 +10013f2a: 4616 mov r6, r2 +10013f2c: 4698 mov r8, r3 +10013f2e: 9101 str r1, [sp, #4] +10013f30: 2c0a cmp r4, #10 +10013f32: 7c9f ldrb r7, [r3, #18] +10013f34: d110 bne.n 10013f58 +10013f36: b98f cbnz r7, 10013f5c +10013f38: b244 sxtb r4, r0 +10013f3a: 3001 adds r0, #1 +10013f3c: 280a cmp r0, #10 +10013f3e: f103 0314 add.w r3, r3, #20 +10013f42: d1f5 bne.n 10013f30 +10013f44: 9b01 ldr r3, [sp, #4] +10013f46: 0799 lsls r1, r3, #30 +10013f48: d403 bmi.n 10013f52 +10013f4a: 2c0a cmp r4, #10 +10013f4c: d11b bne.n 10013f86 +10013f4e: 07db lsls r3, r3, #31 +10013f50: d428 bmi.n 10013fa4 +10013f52: f04f 30ff mov.w r0, #4294967295 +10013f56: e008 b.n 10013f6a +10013f58: 2f00 cmp r7, #0 +10013f5a: d0ee beq.n 10013f3a +10013f5c: b39d cbz r5, 10013fc6 +10013f5e: 6829 ldr r1, [r5, #0] +10013f60: 468a mov sl, r1 +10013f62: 6859 ldr r1, [r3, #4] +10013f64: 458a cmp sl, r1 +10013f66: d12e bne.n 10013fc6 +10013f68: b240 sxtb r0, r0 +10013f6a: b003 add sp, #12 +10013f6c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10013f70: 45da cmp sl, fp +10013f72: d3e2 bcc.n 10013f3a +10013f74: b246 sxtb r6, r0 +10013f76: 46d3 mov fp, sl +10013f78: e7df b.n 10013f3a +10013f7a: 45e2 cmp sl, ip +10013f7c: bf24 itt cs +10013f7e: fa4f fe80 sxtbcs.w lr, r0 +10013f82: 46d4 movcs ip, sl +10013f84: e7d9 b.n 10013f3a +10013f86: b2e4 uxtb r4, r4 +10013f88: b125 cbz r5, 10013f94 +10013f8a: 2314 movs r3, #20 +10013f8c: fb03 8304 mla r3, r3, r4, r8 +10013f90: 682a ldr r2, [r5, #0] +10013f92: 605a str r2, [r3, #4] +10013f94: 2314 movs r3, #20 +10013f96: fb03 8804 mla r8, r3, r4, r8 +10013f9a: 2300 movs r3, #0 +10013f9c: b260 sxtb r0, r4 +10013f9e: f888 3013 strb.w r3, [r8, #19] +10013fa2: e7e2 b.n 10013f6a +10013fa4: f1be 0f0a cmp.w lr, #10 +10013fa8: d005 beq.n 10013fb6 +10013faa: fa5f f48e uxtb.w r4, lr +10013fae: 4620 mov r0, r4 +10013fb0: f7ff ff98 bl 10013ee4 +10013fb4: e7e8 b.n 10013f88 +10013fb6: 2e0a cmp r6, #10 +10013fb8: d001 beq.n 10013fbe +10013fba: b2f4 uxtb r4, r6 +10013fbc: e7f7 b.n 10013fae +10013fbe: 2a0a cmp r2, #10 +10013fc0: d0c7 beq.n 10013f52 +10013fc2: b2d4 uxtb r4, r2 +10013fc4: e7f3 b.n 10013fae +10013fc6: 2f01 cmp r7, #1 +10013fc8: f893 a013 ldrb.w sl, [r3, #19] +10013fcc: d1d5 bne.n 10013f7a +10013fce: 681f ldr r7, [r3, #0] +10013fd0: 2f00 cmp r7, #0 +10013fd2: d0cd beq.n 10013f70 +10013fd4: 45ca cmp sl, r9 +10013fd6: d3b0 bcc.n 10013f3a +10013fd8: b242 sxtb r2, r0 +10013fda: 46d1 mov r9, sl +10013fdc: e7ad b.n 10013f3a +10013fde: bf00 nop +10013fe0: 1004b1fc .word 0x1004b1fc + +10013fe4 : +10013fe4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10013fe8: 684c ldr r4, [r1, #4] +10013fea: 4605 mov r5, r0 +10013fec: 460e mov r6, r1 +10013fee: 4617 mov r7, r2 +10013ff0: 4619 mov r1, r3 +10013ff2: 2206 movs r2, #6 +10013ff4: 4620 mov r0, r4 +10013ff6: f006 fdeb bl 1001abd0 +10013ffa: 2206 movs r2, #6 +10013ffc: 4639 mov r1, r7 +10013ffe: 18a0 adds r0, r4, r2 +10014000: f006 fde6 bl 1001abd0 +10014004: 2308 movs r3, #8 +10014006: 7323 strb r3, [r4, #12] +10014008: 2300 movs r3, #0 +1001400a: 4631 mov r1, r6 +1001400c: 7363 strb r3, [r4, #13] +1001400e: 4628 mov r0, r5 +10014010: 69ab ldr r3, [r5, #24] +10014012: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +10014016: 4718 bx r3 + +10014018 : +10014018: b570 push {r4, r5, r6, lr} +1001401a: 2500 movs r5, #0 +1001401c: 2602 movs r6, #2 +1001401e: 4c0d ldr r4, [pc, #52] ; (10014054 ) +10014020: 7ca2 ldrb r2, [r4, #18] +10014022: b162 cbz r2, 1001403e +10014024: 7ce3 ldrb r3, [r4, #19] +10014026: 3301 adds r3, #1 +10014028: b2db uxtb r3, r3 +1001402a: 2bef cmp r3, #239 ; 0xef +1001402c: 74e3 strb r3, [r4, #19] +1001402e: d803 bhi.n 10014038 +10014030: 2a01 cmp r2, #1 +10014032: d10a bne.n 1001404a +10014034: 2b01 cmp r3, #1 +10014036: d902 bls.n 1001403e +10014038: 4628 mov r0, r5 +1001403a: f7ff ff53 bl 10013ee4 +1001403e: 3501 adds r5, #1 +10014040: 2d0a cmp r5, #10 +10014042: f104 0414 add.w r4, r4, #20 +10014046: d1eb bne.n 10014020 +10014048: bd70 pop {r4, r5, r6, pc} +1001404a: 2a03 cmp r2, #3 +1001404c: bf08 it eq +1001404e: 74a6 strbeq r6, [r4, #18] +10014050: e7f5 b.n 1001403e +10014052: bf00 nop +10014054: 1004b1fc .word 0x1004b1fc + +10014058 : +10014058: b570 push {r4, r5, r6, lr} +1001405a: 4606 mov r6, r0 +1001405c: 2400 movs r4, #0 +1001405e: 4d07 ldr r5, [pc, #28] ; (1001407c ) +10014060: 7cab ldrb r3, [r5, #18] +10014062: b12b cbz r3, 10014070 +10014064: 68ab ldr r3, [r5, #8] +10014066: 42b3 cmp r3, r6 +10014068: d102 bne.n 10014070 +1001406a: 4620 mov r0, r4 +1001406c: f7ff ff3a bl 10013ee4 +10014070: 3401 adds r4, #1 +10014072: 2c0a cmp r4, #10 +10014074: f105 0514 add.w r5, r5, #20 +10014078: d1f2 bne.n 10014060 +1001407a: bd70 pop {r4, r5, r6, pc} +1001407c: 1004b1fc .word 0x1004b1fc + +10014080 : +10014080: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10014084: 2200 movs r2, #0 +10014086: 4606 mov r6, r0 +10014088: 4688 mov r8, r1 +1001408a: f100 072b add.w r7, r0, #43 ; 0x2b +1001408e: f100 0904 add.w r9, r0, #4 +10014092: 212a movs r1, #42 ; 0x2a +10014094: 2003 movs r0, #3 +10014096: f7fc fff9 bl 1001108c +1001409a: 4605 mov r5, r0 +1001409c: 2800 cmp r0, #0 +1001409e: d03e beq.n 1001411e +100140a0: 6844 ldr r4, [r0, #4] +100140a2: 2001 movs r0, #1 +100140a4: f7fb fc60 bl 1000f968 +100140a8: 2206 movs r2, #6 +100140aa: 82a0 strh r0, [r4, #20] +100140ac: 4639 mov r1, r7 +100140ae: f104 0016 add.w r0, r4, #22 +100140b2: f006 fd8d bl 1001abd0 +100140b6: 2206 movs r2, #6 +100140b8: 491a ldr r1, [pc, #104] ; (10014124 ) +100140ba: f104 0020 add.w r0, r4, #32 +100140be: f006 fd87 bl 1001abd0 +100140c2: 2206 movs r2, #6 +100140c4: 4918 ldr r1, [pc, #96] ; (10014128 ) +100140c6: 4620 mov r0, r4 +100140c8: f006 fd82 bl 1001abd0 +100140cc: 2206 movs r2, #6 +100140ce: 4639 mov r1, r7 +100140d0: 18a0 adds r0, r4, r2 +100140d2: f006 fd7d bl 1001abd0 +100140d6: 2204 movs r2, #4 +100140d8: 4649 mov r1, r9 +100140da: f104 001c add.w r0, r4, #28 +100140de: f006 fd77 bl 1001abd0 +100140e2: 2204 movs r2, #4 +100140e4: 4641 mov r1, r8 +100140e6: f104 0026 add.w r0, r4, #38 ; 0x26 +100140ea: f006 fd71 bl 1001abd0 +100140ee: 2300 movs r3, #0 +100140f0: 2201 movs r2, #1 +100140f2: 73a3 strb r3, [r4, #14] +100140f4: 7463 strb r3, [r4, #17] +100140f6: 2104 movs r1, #4 +100140f8: 2306 movs r3, #6 +100140fa: 73e2 strb r2, [r4, #15] +100140fc: 2208 movs r2, #8 +100140fe: 74e1 strb r1, [r4, #19] +10014100: 74a3 strb r3, [r4, #18] +10014102: 7363 strb r3, [r4, #13] +10014104: 7422 strb r2, [r4, #16] +10014106: 7322 strb r2, [r4, #12] +10014108: 69b3 ldr r3, [r6, #24] +1001410a: 4629 mov r1, r5 +1001410c: 4630 mov r0, r6 +1001410e: 4798 blx r3 +10014110: 4604 mov r4, r0 +10014112: 4628 mov r0, r5 +10014114: f7fc ff97 bl 10011046 +10014118: 4620 mov r0, r4 +1001411a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1001411e: f04f 34ff mov.w r4, #4294967295 +10014122: e7f9 b.n 10014118 +10014124: 100400f5 .word 0x100400f5 +10014128: 100400ef .word 0x100400ef + +1001412c : +1001412c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10014130: 460f mov r7, r1 +10014132: 2114 movs r1, #20 +10014134: 4351 muls r1, r2 +10014136: 4c10 ldr r4, [pc, #64] ; (10014178 ) +10014138: 4606 mov r6, r0 +1001413a: eb04 0801 add.w r8, r4, r1 +1001413e: f898 3012 ldrb.w r3, [r8, #18] +10014142: 4615 mov r5, r2 +10014144: 2b02 cmp r3, #2 +10014146: d10b bne.n 10014160 +10014148: f898 3013 ldrb.w r3, [r8, #19] +1001414c: 2be3 cmp r3, #227 ; 0xe3 +1001414e: d907 bls.n 10014160 +10014150: 3104 adds r1, #4 +10014152: 4421 add r1, r4 +10014154: f7ff ff94 bl 10014080 +10014158: b910 cbnz r0, 10014160 +1001415a: 2303 movs r3, #3 +1001415c: f888 3012 strb.w r3, [r8, #18] +10014160: 2314 movs r3, #20 +10014162: fb03 4305 mla r3, r3, r5, r4 +10014166: f106 022b add.w r2, r6, #43 ; 0x2b +1001416a: 4639 mov r1, r7 +1001416c: 4630 mov r0, r6 +1001416e: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +10014172: 330c adds r3, #12 +10014174: f7ff bf36 b.w 10013fe4 +10014178: 1004b1fc .word 0x1004b1fc + +1001417c : +1001417c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10014180: 4688 mov r8, r1 +10014182: 4607 mov r7, r0 +10014184: 4601 mov r1, r0 +10014186: f8d8 0000 ldr.w r0, [r8] +1001418a: 4614 mov r4, r2 +1001418c: f7fb f89b bl 1000f2c6 +10014190: 2800 cmp r0, #0 +10014192: d150 bne.n 10014236 +10014194: f8d8 3000 ldr.w r3, [r8] +10014198: f003 02f0 and.w r2, r3, #240 ; 0xf0 +1001419c: 2ae0 cmp r2, #224 ; 0xe0 +1001419e: d04a beq.n 10014236 +100141a0: 2b00 cmp r3, #0 +100141a2: d048 beq.n 10014236 +100141a4: 2101 movs r1, #1 +100141a6: 4640 mov r0, r8 +100141a8: f7ff feb4 bl 10013f14 +100141ac: 1e06 subs r6, r0, #0 +100141ae: db46 blt.n 1001423e +100141b0: 2314 movs r3, #20 +100141b2: 4d2f ldr r5, [pc, #188] ; (10014270 ) +100141b4: fb03 5206 mla r2, r3, r6, r5 +100141b8: 7c91 ldrb r1, [r2, #18] +100141ba: b909 cbnz r1, 100141c0 +100141bc: 2101 movs r1, #1 +100141be: 7491 strb r1, [r2, #18] +100141c0: fb03 5306 mla r3, r3, r6, r5 +100141c4: 7c9b ldrb r3, [r3, #18] +100141c6: 2b01 cmp r3, #1 +100141c8: d000 beq.n 100141cc +100141ca: b934 cbnz r4, 100141da +100141cc: 4641 mov r1, r8 +100141ce: 4638 mov r0, r7 +100141d0: f7ff ff56 bl 10014080 +100141d4: b91c cbnz r4, 100141de +100141d6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100141da: f04f 30ff mov.w r0, #4294967295 +100141de: 2314 movs r3, #20 +100141e0: 4373 muls r3, r6 +100141e2: 18ea adds r2, r5, r3 +100141e4: 7c92 ldrb r2, [r2, #18] +100141e6: 2a01 cmp r2, #1 +100141e8: d90b bls.n 10014202 +100141ea: 4a22 ldr r2, [pc, #136] ; (10014274 ) +100141ec: 330c adds r3, #12 +100141ee: 7016 strb r6, [r2, #0] +100141f0: 442b add r3, r5 +100141f2: f107 022b add.w r2, r7, #43 ; 0x2b +100141f6: 4621 mov r1, r4 +100141f8: 4638 mov r0, r7 +100141fa: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +100141fe: f7ff bef1 b.w 10013fe4 +10014202: d132 bne.n 1001426a +10014204: 4623 mov r3, r4 +10014206: b98b cbnz r3, 1001422c +10014208: 4620 mov r0, r4 +1001420a: f7fc fff0 bl 100111ee +1001420e: b344 cbz r4, 10014262 +10014210: 4627 mov r7, r4 +10014212: 2314 movs r3, #20 +10014214: fb03 f206 mul.w r2, r3, r6 +10014218: 58a8 ldr r0, [r5, r2] +1001421a: 461c mov r4, r3 +1001421c: b108 cbz r0, 10014222 +1001421e: f7fc ff12 bl 10011046 +10014222: 4366 muls r6, r4 +10014224: 2000 movs r0, #0 +10014226: 51af str r7, [r5, r6] +10014228: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1001422c: 7b1a ldrb r2, [r3, #12] +1001422e: 2a01 cmp r2, #1 +10014230: d108 bne.n 10014244 +10014232: 681b ldr r3, [r3, #0] +10014234: e7e7 b.n 10014206 +10014236: f06f 000d mvn.w r0, #13 +1001423a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1001423e: 4630 mov r0, r6 +10014240: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10014244: 2200 movs r2, #0 +10014246: 8919 ldrh r1, [r3, #8] +10014248: 2003 movs r0, #3 +1001424a: f7fc ff1f bl 1001108c +1001424e: 4607 mov r7, r0 +10014250: b138 cbz r0, 10014262 +10014252: 4621 mov r1, r4 +10014254: f7fc ffee bl 10011234 +10014258: 2800 cmp r0, #0 +1001425a: d0da beq.n 10014212 +1001425c: 4638 mov r0, r7 +1001425e: f7fc fef2 bl 10011046 +10014262: f04f 30ff mov.w r0, #4294967295 +10014266: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1001426a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1001426e: bf00 nop +10014270: 1004b1fc .word 0x1004b1fc +10014274: 1004b2c4 .word 0x1004b2c4 + +10014278 : +10014278: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1001427a: 460e mov r6, r1 +1001427c: 4604 mov r4, r0 +1001427e: 210e movs r1, #14 +10014280: 4630 mov r0, r6 +10014282: 4615 mov r5, r2 +10014284: f7fc feb4 bl 10010ff0 +10014288: 2800 cmp r0, #0 +1001428a: d160 bne.n 1001434e +1001428c: 4621 mov r1, r4 +1001428e: 6828 ldr r0, [r5, #0] +10014290: f7fb f819 bl 1000f2c6 +10014294: 2800 cmp r0, #0 +10014296: d158 bne.n 1001434a +10014298: 682b ldr r3, [r5, #0] +1001429a: f003 02f0 and.w r2, r3, #240 ; 0xf0 +1001429e: 2ae0 cmp r2, #224 ; 0xe0 +100142a0: d11a bne.n 100142d8 +100142a2: 2301 movs r3, #1 +100142a4: f88d 3000 strb.w r3, [sp] +100142a8: 235e movs r3, #94 ; 0x5e +100142aa: f88d 3002 strb.w r3, [sp, #2] +100142ae: 786b ldrb r3, [r5, #1] +100142b0: f88d 0001 strb.w r0, [sp, #1] +100142b4: f003 037f and.w r3, r3, #127 ; 0x7f +100142b8: f88d 3003 strb.w r3, [sp, #3] +100142bc: 78ab ldrb r3, [r5, #2] +100142be: f88d 3004 strb.w r3, [sp, #4] +100142c2: 78eb ldrb r3, [r5, #3] +100142c4: f88d 3005 strb.w r3, [sp, #5] +100142c8: 466b mov r3, sp +100142ca: f104 022b add.w r2, r4, #43 ; 0x2b +100142ce: 4631 mov r1, r6 +100142d0: 4620 mov r0, r4 +100142d2: f7ff fe87 bl 10013fe4 +100142d6: e01f b.n 10014318 +100142d8: 6862 ldr r2, [r4, #4] +100142da: 68a1 ldr r1, [r4, #8] +100142dc: 405a eors r2, r3 +100142de: 420a tst r2, r1 +100142e0: d008 beq.n 100142f4 +100142e2: f64f 62a9 movw r2, #65193 ; 0xfea9 +100142e6: b29b uxth r3, r3 +100142e8: 4293 cmp r3, r2 +100142ea: d003 beq.n 100142f4 +100142ec: 68e3 ldr r3, [r4, #12] +100142ee: f104 050c add.w r5, r4, #12 +100142f2: b37b cbz r3, 10014354 +100142f4: 2014 movs r0, #20 +100142f6: 4b19 ldr r3, [pc, #100] ; (1001435c ) +100142f8: 4919 ldr r1, [pc, #100] ; (10014360 ) +100142fa: 781a ldrb r2, [r3, #0] +100142fc: fb00 1002 mla r0, r0, r2, r1 +10014300: 7c81 ldrb r1, [r0, #18] +10014302: 2901 cmp r1, #1 +10014304: 4619 mov r1, r3 +10014306: d909 bls.n 1001431c +10014308: 682f ldr r7, [r5, #0] +1001430a: 6843 ldr r3, [r0, #4] +1001430c: 429f cmp r7, r3 +1001430e: d105 bne.n 1001431c +10014310: 4631 mov r1, r6 +10014312: 4620 mov r0, r4 +10014314: f7ff ff0a bl 1001412c +10014318: b003 add sp, #12 +1001431a: bdf0 pop {r4, r5, r6, r7, pc} +1001431c: 2200 movs r2, #0 +1001431e: 4b10 ldr r3, [pc, #64] ; (10014360 ) +10014320: 7c98 ldrb r0, [r3, #18] +10014322: 2801 cmp r0, #1 +10014324: d906 bls.n 10014334 +10014326: 682f ldr r7, [r5, #0] +10014328: 6858 ldr r0, [r3, #4] +1001432a: 4287 cmp r7, r0 +1001432c: d102 bne.n 10014334 +1001432e: b2d2 uxtb r2, r2 +10014330: 700a strb r2, [r1, #0] +10014332: e7ed b.n 10014310 +10014334: 3201 adds r2, #1 +10014336: 2a0a cmp r2, #10 +10014338: f103 0314 add.w r3, r3, #20 +1001433c: d1f0 bne.n 10014320 +1001433e: 4632 mov r2, r6 +10014340: 4629 mov r1, r5 +10014342: 4620 mov r0, r4 +10014344: f7ff ff1a bl 1001417c +10014348: e7e6 b.n 10014318 +1001434a: 4b06 ldr r3, [pc, #24] ; (10014364 ) +1001434c: e7bd b.n 100142ca +1001434e: f06f 0001 mvn.w r0, #1 +10014352: e7e1 b.n 10014318 +10014354: f06f 0003 mvn.w r0, #3 +10014358: e7de b.n 10014318 +1001435a: bf00 nop +1001435c: 1004b2c4 .word 0x1004b2c4 +10014360: 1004b1fc .word 0x1004b1fc +10014364: 100400ef .word 0x100400ef + +10014368 : +10014368: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001436c: 8943 ldrh r3, [r0, #10] +1001436e: b087 sub sp, #28 +10014370: 2b0e cmp r3, #14 +10014372: 4604 mov r4, r0 +10014374: 460d mov r5, r1 +10014376: d93b bls.n 100143f0 +10014378: 6840 ldr r0, [r0, #4] +1001437a: 7803 ldrb r3, [r0, #0] +1001437c: 8986 ldrh r6, [r0, #12] +1001437e: 07df lsls r7, r3, #31 +10014380: d50a bpl.n 10014398 +10014382: 2b01 cmp r3, #1 +10014384: d123 bne.n 100143ce +10014386: 7843 ldrb r3, [r0, #1] +10014388: b933 cbnz r3, 10014398 +1001438a: 7883 ldrb r3, [r0, #2] +1001438c: 2b5e cmp r3, #94 ; 0x5e +1001438e: d103 bne.n 10014398 +10014390: 7b63 ldrb r3, [r4, #13] +10014392: f043 0310 orr.w r3, r3, #16 +10014396: 7363 strb r3, [r4, #13] +10014398: f5b6 6fc1 cmp.w r6, #1544 ; 0x608 +1001439c: d021 beq.n 100143e2 +1001439e: f5b6 5f56 cmp.w r6, #13696 ; 0x3580 +100143a2: f000 80c5 beq.w 10014530 +100143a6: 2e08 cmp r6, #8 +100143a8: d122 bne.n 100143f0 +100143aa: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 +100143ae: 0698 lsls r0, r3, #26 +100143b0: d51e bpl.n 100143f0 +100143b2: f06f 010d mvn.w r1, #13 +100143b6: 4620 mov r0, r4 +100143b8: f7fc fe1a bl 10010ff0 +100143bc: b9c0 cbnz r0, 100143f0 +100143be: 4629 mov r1, r5 +100143c0: 4620 mov r0, r4 +100143c2: f7fa fdcd bl 1000ef60 +100143c6: 2000 movs r0, #0 +100143c8: b007 add sp, #28 +100143ca: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +100143ce: 2206 movs r2, #6 +100143d0: 496c ldr r1, [pc, #432] ; (10014584 ) +100143d2: f006 fbf9 bl 1001abc8 +100143d6: 2800 cmp r0, #0 +100143d8: d1de bne.n 10014398 +100143da: 7b63 ldrb r3, [r4, #13] +100143dc: f043 0308 orr.w r3, r3, #8 +100143e0: e7d9 b.n 10014396 +100143e2: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 +100143e6: 0699 lsls r1, r3, #26 +100143e8: d502 bpl.n 100143f0 +100143ea: 8963 ldrh r3, [r4, #10] +100143ec: 2b29 cmp r3, #41 ; 0x29 +100143ee: d803 bhi.n 100143f8 +100143f0: 4620 mov r0, r4 +100143f2: f7fc fe28 bl 10011046 +100143f6: e7e6 b.n 100143c6 +100143f8: 6866 ldr r6, [r4, #4] +100143fa: 89f3 ldrh r3, [r6, #14] +100143fc: f5b3 7f80 cmp.w r3, #256 ; 0x100 +10014400: d1f6 bne.n 100143f0 +10014402: 7cb3 ldrb r3, [r6, #18] +10014404: 2b06 cmp r3, #6 +10014406: d1f3 bne.n 100143f0 +10014408: 7cf7 ldrb r7, [r6, #19] +1001440a: 2f04 cmp r7, #4 +1001440c: d1f0 bne.n 100143f0 +1001440e: 8a33 ldrh r3, [r6, #16] +10014410: 2b08 cmp r3, #8 +10014412: d1ed bne.n 100143f0 +10014414: f106 031c add.w r3, r6, #28 +10014418: 4619 mov r1, r3 +1001441a: 463a mov r2, r7 +1001441c: a804 add r0, sp, #16 +1001441e: 9300 str r3, [sp, #0] +10014420: f006 fbd6 bl 1001abd0 +10014424: f106 0326 add.w r3, r6, #38 ; 0x26 +10014428: 4619 mov r1, r3 +1001442a: 463a mov r2, r7 +1001442c: a805 add r0, sp, #20 +1001442e: 9302 str r3, [sp, #8] +10014430: f006 fbce bl 1001abd0 +10014434: 686b ldr r3, [r5, #4] +10014436: b11b cbz r3, 10014440 +10014438: 9a05 ldr r2, [sp, #20] +1001443a: 1ad2 subs r2, r2, r3 +1001443c: 4253 negs r3, r2 +1001443e: 4153 adcs r3, r2 +10014440: 9301 str r3, [sp, #4] +10014442: 9b01 ldr r3, [sp, #4] +10014444: 9804 ldr r0, [sp, #16] +10014446: 2b00 cmp r3, #0 +10014448: f106 0816 add.w r8, r6, #22 +1001444c: bf14 ite ne +1001444e: 2701 movne r7, #1 +10014450: 2702 moveq r7, #2 +10014452: f105 0a2b add.w sl, r5, #43 ; 0x2b +10014456: b3a0 cbz r0, 100144c2 +10014458: 4629 mov r1, r5 +1001445a: f7fa ff34 bl 1000f2c6 +1001445e: 9003 str r0, [sp, #12] +10014460: bb78 cbnz r0, 100144c2 +10014462: 9a04 ldr r2, [sp, #16] +10014464: f002 02f0 and.w r2, r2, #240 ; 0xf0 +10014468: 2ae0 cmp r2, #224 ; 0xe0 +1001446a: d02a beq.n 100144c2 +1001446c: 4639 mov r1, r7 +1001446e: a804 add r0, sp, #16 +10014470: f7ff fd50 bl 10013f14 +10014474: 2800 cmp r0, #0 +10014476: db24 blt.n 100144c2 +10014478: 2714 movs r7, #20 +1001447a: 2202 movs r2, #2 +1001447c: 4347 muls r7, r0 +1001447e: f8df 910c ldr.w r9, [pc, #268] ; 1001458c +10014482: f107 000c add.w r0, r7, #12 +10014486: eb09 0b07 add.w fp, r9, r7 +1001448a: f88b 2012 strb.w r2, [fp, #18] +1001448e: f8cb 5008 str.w r5, [fp, #8] +10014492: 2206 movs r2, #6 +10014494: 4641 mov r1, r8 +10014496: 4448 add r0, r9 +10014498: f006 fb9a bl 1001abd0 +1001449c: 9b03 ldr r3, [sp, #12] +1001449e: f88b 3013 strb.w r3, [fp, #19] +100144a2: f859 b007 ldr.w fp, [r9, r7] +100144a6: f1bb 0f00 cmp.w fp, #0 +100144aa: d00a beq.n 100144c2 +100144ac: f849 3007 str.w r3, [r9, r7] +100144b0: 4652 mov r2, sl +100144b2: 4643 mov r3, r8 +100144b4: 4659 mov r1, fp +100144b6: 4628 mov r0, r5 +100144b8: f7ff fd94 bl 10013fe4 +100144bc: 4658 mov r0, fp +100144be: f7fc fdc2 bl 10011046 +100144c2: 8ab3 ldrh r3, [r6, #20] +100144c4: f5b3 7f80 cmp.w r3, #256 ; 0x100 +100144c8: d007 beq.n 100144da +100144ca: f5b3 7f00 cmp.w r3, #512 ; 0x200 +100144ce: d18f bne.n 100143f0 +100144d0: a904 add r1, sp, #16 +100144d2: 4628 mov r0, r5 +100144d4: f7fb ff74 bl 100103c0 +100144d8: e78a b.n 100143f0 +100144da: 9b01 ldr r3, [sp, #4] +100144dc: 2b00 cmp r3, #0 +100144de: d087 beq.n 100143f0 +100144e0: 2002 movs r0, #2 +100144e2: f7fb fa41 bl 1000f968 +100144e6: 9900 ldr r1, [sp, #0] +100144e8: 82b0 strh r0, [r6, #20] +100144ea: 2204 movs r2, #4 +100144ec: 9802 ldr r0, [sp, #8] +100144ee: f006 fb6f bl 1001abd0 +100144f2: 2204 movs r2, #4 +100144f4: 9800 ldr r0, [sp, #0] +100144f6: 18a9 adds r1, r5, r2 +100144f8: f006 fb6a bl 1001abd0 +100144fc: 4641 mov r1, r8 +100144fe: 2206 movs r2, #6 +10014500: f106 0020 add.w r0, r6, #32 +10014504: f006 fb64 bl 1001abd0 +10014508: 4641 mov r1, r8 +1001450a: 2206 movs r2, #6 +1001450c: 4630 mov r0, r6 +1001450e: f006 fb5f bl 1001abd0 +10014512: 4651 mov r1, sl +10014514: 2206 movs r2, #6 +10014516: 4640 mov r0, r8 +10014518: f006 fb5a bl 1001abd0 +1001451c: 2206 movs r2, #6 +1001451e: 4651 mov r1, sl +10014520: 18b0 adds r0, r6, r2 +10014522: f006 fb55 bl 1001abd0 +10014526: 69ab ldr r3, [r5, #24] +10014528: 4621 mov r1, r4 +1001452a: 4628 mov r0, r5 +1001452c: 4798 blx r3 +1001452e: e75f b.n 100143f0 +10014530: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 +10014534: 069b lsls r3, r3, #26 +10014536: f57f af5b bpl.w 100143f0 +1001453a: 8963 ldrh r3, [r4, #10] +1001453c: 2b29 cmp r3, #41 ; 0x29 +1001453e: f67f af57 bls.w 100143f0 +10014542: 6860 ldr r0, [r4, #4] +10014544: 89c3 ldrh r3, [r0, #14] +10014546: f5b3 7f80 cmp.w r3, #256 ; 0x100 +1001454a: f47f af51 bne.w 100143f0 +1001454e: 7c83 ldrb r3, [r0, #18] +10014550: 2b06 cmp r3, #6 +10014552: f47f af4d bne.w 100143f0 +10014556: 7cc3 ldrb r3, [r0, #19] +10014558: 2b04 cmp r3, #4 +1001455a: f47f af49 bne.w 100143f0 +1001455e: 8a03 ldrh r3, [r0, #16] +10014560: 2b08 cmp r3, #8 +10014562: f47f af45 bne.w 100143f0 +10014566: 8a83 ldrh r3, [r0, #20] +10014568: f5b3 6f80 cmp.w r3, #1024 ; 0x400 +1001456c: f47f af40 bne.w 100143f0 +10014570: 4b05 ldr r3, [pc, #20] ; (10014588 ) +10014572: 681b ldr r3, [r3, #0] +10014574: 2b00 cmp r3, #0 +10014576: f43f af3b beq.w 100143f0 +1001457a: f100 0120 add.w r1, r0, #32 +1001457e: 3026 adds r0, #38 ; 0x26 +10014580: 4798 blx r3 +10014582: e735 b.n 100143f0 +10014584: 100400ef .word 0x100400ef +10014588: 1004b2c8 .word 0x1004b2c8 +1001458c: 1004b1fc .word 0x1004b1fc + +10014590 : +10014590: b570 push {r4, r5, r6, lr} +10014592: b0c0 sub sp, #256 ; 0x100 +10014594: 4606 mov r6, r0 +10014596: 460d mov r5, r1 +10014598: f000 f952 bl 10014840 +1001459c: b2c0 uxtb r0, r0 +1001459e: f022 fe39 bl 10037214 +100145a2: b300 cbz r0, 100145e6 +100145a4: 462b mov r3, r5 +100145a6: 2400 movs r4, #0 +100145a8: b1c3 cbz r3, 100145dc +100145aa: 2c20 cmp r4, #32 +100145ac: d10b bne.n 100145c6 +100145ae: 4630 mov r0, r6 +100145b0: f000 f946 bl 10014840 +100145b4: 892b ldrh r3, [r5, #8] +100145b6: 4622 mov r2, r4 +100145b8: 4669 mov r1, sp +100145ba: f000 f8a5 bl 10014708 +100145be: b178 cbz r0, 100145e0 +100145c0: f06f 0001 mvn.w r0, #1 +100145c4: e00d b.n 100145e2 +100145c6: 685a ldr r2, [r3, #4] +100145c8: 8959 ldrh r1, [r3, #10] +100145ca: f84d 2034 str.w r2, [sp, r4, lsl #3] +100145ce: 3401 adds r4, #1 +100145d0: eb0d 02c4 add.w r2, sp, r4, lsl #3 +100145d4: f842 1c04 str.w r1, [r2, #-4] +100145d8: 681b ldr r3, [r3, #0] +100145da: e7e5 b.n 100145a8 +100145dc: 2c00 cmp r4, #0 +100145de: d1e6 bne.n 100145ae +100145e0: 2000 movs r0, #0 +100145e2: b040 add sp, #256 ; 0x100 +100145e4: bd70 pop {r4, r5, r6, pc} +100145e6: f06f 000e mvn.w r0, #14 +100145ea: e7fa b.n 100145e2 + +100145ec : +100145ec: b508 push {r3, lr} +100145ee: f7ff fd13 bl 10014018 +100145f2: e8bd 4008 ldmia.w sp!, {r3, lr} +100145f6: 2200 movs r2, #0 +100145f8: 4902 ldr r1, [pc, #8] ; (10014604 ) +100145fa: f241 3088 movw r0, #5000 ; 0x1388 +100145fe: f7fc bab9 b.w 10010b74 +10014602: bf00 nop +10014604: 100145ed .word 0x100145ed + +10014608 : +10014608: b570 push {r4, r5, r6, lr} +1001460a: b0c0 sub sp, #256 ; 0x100 +1001460c: 4606 mov r6, r0 +1001460e: 460c mov r4, r1 +10014610: f000 f916 bl 10014840 +10014614: b2c0 uxtb r0, r0 +10014616: f022 fdfd bl 10037214 +1001461a: b170 cbz r0, 1001463a +1001461c: f240 6304 movw r3, #1540 ; 0x604 +10014620: 429c cmp r4, r3 +10014622: bf28 it cs +10014624: 461c movcs r4, r3 +10014626: 2203 movs r2, #3 +10014628: b2a1 uxth r1, r4 +1001462a: 4610 mov r0, r2 +1001462c: f7fc fd2e bl 1001108c +10014630: 4605 mov r5, r0 +10014632: b920 cbnz r0, 1001463e +10014634: 4812 ldr r0, [pc, #72] ; (10014680 ) +10014636: f006 faa3 bl 1001ab80 +1001463a: b040 add sp, #256 ; 0x100 +1001463c: bd70 pop {r4, r5, r6, pc} +1001463e: 4603 mov r3, r0 +10014640: 2400 movs r4, #0 +10014642: 685a ldr r2, [r3, #4] +10014644: 8959 ldrh r1, [r3, #10] +10014646: f84d 2034 str.w r2, [sp, r4, lsl #3] +1001464a: 681b ldr r3, [r3, #0] +1001464c: 3401 adds r4, #1 +1001464e: eb0d 02c4 add.w r2, sp, r4, lsl #3 +10014652: f842 1c04 str.w r1, [r2, #-4] +10014656: b10b cbz r3, 1001465c +10014658: 2c20 cmp r4, #32 +1001465a: d1f2 bne.n 10014642 +1001465c: 4630 mov r0, r6 +1001465e: f000 f8ef bl 10014840 +10014662: 4669 mov r1, sp +10014664: 4622 mov r2, r4 +10014666: f000 f899 bl 1001479c +1001466a: 6933 ldr r3, [r6, #16] +1001466c: 4631 mov r1, r6 +1001466e: 4628 mov r0, r5 +10014670: 4798 blx r3 +10014672: 2800 cmp r0, #0 +10014674: d0e1 beq.n 1001463a +10014676: 4628 mov r0, r5 +10014678: f7fc fce5 bl 10011046 +1001467c: e7dd b.n 1001463a +1001467e: bf00 nop +10014680: 100400fb .word 0x100400fb + +10014684 : +10014684: f990 3033 ldrsb.w r3, [r0, #51] ; 0x33 +10014688: 2b30 cmp r3, #48 ; 0x30 +1001468a: d110 bne.n 100146ae +1001468c: 4b0a ldr r3, [pc, #40] ; (100146b8 ) +1001468e: 6243 str r3, [r0, #36] ; 0x24 +10014690: 4b0a ldr r3, [pc, #40] ; (100146bc ) +10014692: 6143 str r3, [r0, #20] +10014694: 4b0a ldr r3, [pc, #40] ; (100146c0 ) +10014696: 6183 str r3, [r0, #24] +10014698: 2306 movs r3, #6 +1001469a: f880 302a strb.w r3, [r0, #42] ; 0x2a +1001469e: f240 53dc movw r3, #1500 ; 0x5dc +100146a2: 8503 strh r3, [r0, #40] ; 0x28 +100146a4: 2322 movs r3, #34 ; 0x22 +100146a6: f880 3031 strb.w r3, [r0, #49] ; 0x31 +100146aa: 2000 movs r0, #0 +100146ac: 4770 bx lr +100146ae: 2b31 cmp r3, #49 ; 0x31 +100146b0: d1ee bne.n 10014690 +100146b2: 4b04 ldr r3, [pc, #16] ; (100146c4 ) +100146b4: e7eb b.n 1001468e +100146b6: bf00 nop +100146b8: 10044ee0 .word 0x10044ee0 +100146bc: 10014279 .word 0x10014279 +100146c0: 10014591 .word 0x10014591 +100146c4: 10044ef0 .word 0x10044ef0 + +100146c8 : +100146c8: 4b04 ldr r3, [pc, #16] ; (100146dc ) +100146ca: 681b ldr r3, [r3, #0] +100146cc: b12b cbz r3, 100146da +100146ce: 2200 movs r2, #0 +100146d0: 4903 ldr r1, [pc, #12] ; (100146e0 ) +100146d2: f241 3088 movw r0, #5000 ; 0x1388 +100146d6: f7fa b8e5 b.w 1000e8a4 +100146da: 4770 bx lr +100146dc: 1004b2cc .word 0x1004b2cc +100146e0: 100145ed .word 0x100145ed + +100146e4 : +100146e4: b570 push {r4, r5, r6, lr} +100146e6: 243c movs r4, #60 ; 0x3c +100146e8: 460e mov r6, r1 +100146ea: fb04 f500 mul.w r5, r4, r0 +100146ee: 4c05 ldr r4, [pc, #20] ; (10014704 ) +100146f0: f105 002b add.w r0, r5, #43 ; 0x2b +100146f4: 4611 mov r1, r2 +100146f6: 4420 add r0, r4 +100146f8: 2206 movs r2, #6 +100146fa: 442c add r4, r5 +100146fc: f002 fe98 bl 10017430 +10014700: 61e6 str r6, [r4, #28] +10014702: bd70 pop {r4, r5, r6, pc} +10014704: 1004aa04 .word 0x1004aa04 + +10014708 : +10014708: b5f8 push {r3, r4, r5, r6, r7, lr} +1001470a: 461e mov r6, r3 +1001470c: 1c43 adds r3, r0, #1 +1001470e: 4605 mov r5, r0 +10014710: 460c mov r4, r1 +10014712: 4617 mov r7, r2 +10014714: d107 bne.n 10014726 +10014716: 491f ldr r1, [pc, #124] ; (10014794 ) +10014718: 481f ldr r0, [pc, #124] ; (10014798 ) +1001471a: f006 fa31 bl 1001ab80 +1001471e: f04f 34ff mov.w r4, #4294967295 +10014722: 4620 mov r0, r4 +10014724: bdf8 pop {r3, r4, r5, r6, r7, pc} +10014726: f002 fe30 bl 1001738a +1001472a: 4628 mov r0, r5 +1001472c: f022 fc58 bl 10036fe0 +10014730: b160 cbz r0, 1001474c +10014732: 4628 mov r0, r5 +10014734: f022 fc5c bl 10036ff0 +10014738: f002 fe29 bl 1001738e +1001473c: 4630 mov r0, r6 +1001473e: f022 fc73 bl 10037028 +10014742: 4606 mov r6, r0 +10014744: b948 cbnz r0, 1001475a +10014746: f04f 34ff mov.w r4, #4294967295 +1001474a: e00f b.n 1001476c +1001474c: 4911 ldr r1, [pc, #68] ; (10014794 ) +1001474e: 4812 ldr r0, [pc, #72] ; (10014798 ) +10014750: f006 fa16 bl 1001ab80 +10014754: f002 fe1b bl 1001738e +10014758: e7e1 b.n 1001471e +1001475a: eb04 07c7 add.w r7, r4, r7, lsl #3 +1001475e: 42bc cmp r4, r7 +10014760: d30c bcc.n 1001477c +10014762: 4631 mov r1, r6 +10014764: 4628 mov r0, r5 +10014766: f022 fc7f bl 10037068 +1001476a: 2400 movs r4, #0 +1001476c: f002 fe0d bl 1001738a +10014770: 4628 mov r0, r5 +10014772: f022 fc47 bl 10037004 +10014776: f002 fe0a bl 1001738e +1001477a: e7d2 b.n 10014722 +1001477c: e894 0006 ldmia.w r4, {r1, r2} +10014780: 6970 ldr r0, [r6, #20] +10014782: f002 fe55 bl 10017430 +10014786: 6861 ldr r1, [r4, #4] +10014788: 4630 mov r0, r6 +1001478a: f022 f83d bl 10036808 +1001478e: 3408 adds r4, #8 +10014790: e7e5 b.n 1001475e +10014792: bf00 nop +10014794: 10040124 .word 0x10040124 +10014798: 10040203 .word 0x10040203 + +1001479c : +1001479c: 1c43 adds r3, r0, #1 +1001479e: b570 push {r4, r5, r6, lr} +100147a0: 4606 mov r6, r0 +100147a2: 460c mov r4, r1 +100147a4: 4615 mov r5, r2 +100147a6: d105 bne.n 100147b4 +100147a8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +100147ac: 4911 ldr r1, [pc, #68] ; (100147f4 ) +100147ae: 4812 ldr r0, [pc, #72] ; (100147f8 ) +100147b0: f006 b9e6 b.w 1001ab80 +100147b4: f022 fc14 bl 10036fe0 +100147b8: b170 cbz r0, 100147d8 +100147ba: 4630 mov r0, r6 +100147bc: f022 fc2c bl 10037018 +100147c0: 4606 mov r6, r0 +100147c2: b928 cbnz r0, 100147d0 +100147c4: 4b0d ldr r3, [pc, #52] ; (100147fc ) +100147c6: 2291 movs r2, #145 ; 0x91 +100147c8: 490d ldr r1, [pc, #52] ; (10014800 ) +100147ca: 480e ldr r0, [pc, #56] ; (10014804 ) +100147cc: f006 f9d8 bl 1001ab80 +100147d0: eb04 05c5 add.w r5, r4, r5, lsl #3 +100147d4: 42ac cmp r4, r5 +100147d6: d300 bcc.n 100147da +100147d8: bd70 pop {r4, r5, r6, pc} +100147da: 6820 ldr r0, [r4, #0] +100147dc: b138 cbz r0, 100147ee +100147de: 6931 ldr r1, [r6, #16] +100147e0: 6862 ldr r2, [r4, #4] +100147e2: f002 fe25 bl 10017430 +100147e6: 6861 ldr r1, [r4, #4] +100147e8: 4630 mov r0, r6 +100147ea: f022 f842 bl 10036872 +100147ee: 3408 adds r4, #8 +100147f0: e7f0 b.n 100147d4 +100147f2: bf00 nop +100147f4: 10040133 .word 0x10040133 +100147f8: 10040142 .word 0x10040142 +100147fc: 10040155 .word 0x10040155 +10014800: 100401c2 .word 0x100401c2 +10014804: 100401d4 .word 0x100401d4 + +10014808 : +10014808: b538 push {r3, r4, r5, lr} +1001480a: 243c movs r4, #60 ; 0x3c +1001480c: 4b0b ldr r3, [pc, #44] ; (1001483c ) +1001480e: fb04 3400 mla r4, r4, r0, r3 +10014812: 6863 ldr r3, [r4, #4] +10014814: b90b cbnz r3, 1001481a +10014816: 2001 movs r0, #1 +10014818: bd38 pop {r3, r4, r5, pc} +1001481a: 680d ldr r5, [r1, #0] +1001481c: f005 03f0 and.w r3, r5, #240 ; 0xf0 +10014820: 2be0 cmp r3, #224 ; 0xe0 +10014822: d0f8 beq.n 10014816 +10014824: 4621 mov r1, r4 +10014826: 4628 mov r0, r5 +10014828: f7fa fd4d bl 1000f2c6 +1001482c: 2800 cmp r0, #0 +1001482e: d1f2 bne.n 10014816 +10014830: 6860 ldr r0, [r4, #4] +10014832: 1b43 subs r3, r0, r5 +10014834: 4258 negs r0, r3 +10014836: 4158 adcs r0, r3 +10014838: bd38 pop {r3, r4, r5, pc} +1001483a: bf00 nop +1001483c: 1004aa04 .word 0x1004aa04 + +10014840 : +10014840: 4b04 ldr r3, [pc, #16] ; (10014854 ) +10014842: 1ac0 subs r0, r0, r3 +10014844: 4b04 ldr r3, [pc, #16] ; (10014858 ) +10014846: 1080 asrs r0, r0, #2 +10014848: 4358 muls r0, r3 +1001484a: 2802 cmp r0, #2 +1001484c: bf28 it cs +1001484e: f04f 30ff movcs.w r0, #4294967295 +10014852: 4770 bx lr +10014854: 1004aa04 .word 0x1004aa04 +10014858: eeeeeeef .word 0xeeeeeeef + +1001485c : +1001485c: 223c movs r2, #60 ; 0x3c +1001485e: 4b02 ldr r3, [pc, #8] ; (10014868 ) +10014860: fb02 3000 mla r0, r2, r0, r3 +10014864: f7ff bed0 b.w 10014608 +10014868: 1004aa04 .word 0x1004aa04 + +1001486c : +1001486c: f7ff bf2c b.w 100146c8 + +10014870 : +10014870: b510 push {r4, lr} +10014872: 2200 movs r2, #0 +10014874: 4604 mov r4, r0 +10014876: 4608 mov r0, r1 +10014878: 2104 movs r1, #4 +1001487a: f001 f89b bl 100159b4 +1001487e: 6020 str r0, [r4, #0] +10014880: fab0 f080 clz r0, r0 +10014884: 0940 lsrs r0, r0, #5 +10014886: 4240 negs r0, r0 +10014888: bd10 pop {r4, pc} + +1001488a : +1001488a: b537 push {r0, r1, r2, r4, r5, lr} +1001488c: 4605 mov r5, r0 +1001488e: ac02 add r4, sp, #8 +10014890: f844 1d04 str.w r1, [r4, #-4]! +10014894: 2300 movs r3, #0 +10014896: f04f 32ff mov.w r2, #4294967295 +1001489a: 4621 mov r1, r4 +1001489c: 6828 ldr r0, [r5, #0] +1001489e: f001 f8ad bl 100159fc +100148a2: 2801 cmp r0, #1 +100148a4: d1f6 bne.n 10014894 +100148a6: b003 add sp, #12 +100148a8: bd30 pop {r4, r5, pc} + +100148aa : +100148aa: 2300 movs r3, #0 +100148ac: b513 push {r0, r1, r4, lr} +100148ae: ac02 add r4, sp, #8 +100148b0: f844 1d04 str.w r1, [r4, #-4]! +100148b4: 461a mov r2, r3 +100148b6: 4621 mov r1, r4 +100148b8: 6800 ldr r0, [r0, #0] +100148ba: f001 f89f bl 100159fc +100148be: f110 30ff adds.w r0, r0, #4294967295 +100148c2: bf18 it ne +100148c4: f04f 30ff movne.w r0, #4294967295 +100148c8: b002 add sp, #8 +100148ca: bd10 pop {r4, pc} + +100148cc : +100148cc: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +100148ce: 4606 mov r6, r0 +100148d0: 460d mov r5, r1 +100148d2: 4617 mov r7, r2 +100148d4: f001 fcae bl 10016234 +100148d8: 4604 mov r4, r0 +100148da: b905 cbnz r5, 100148de +100148dc: ad01 add r5, sp, #4 +100148de: b18f cbz r7, 10014904 +100148e0: 2300 movs r3, #0 +100148e2: 463a mov r2, r7 +100148e4: 4629 mov r1, r5 +100148e6: 6830 ldr r0, [r6, #0] +100148e8: f001 f976 bl 10015bd8 +100148ec: 2801 cmp r0, #1 +100148ee: d103 bne.n 100148f8 +100148f0: f001 fca0 bl 10016234 +100148f4: 1b00 subs r0, r0, r4 +100148f6: e003 b.n 10014900 +100148f8: 2300 movs r3, #0 +100148fa: f04f 30ff mov.w r0, #4294967295 +100148fe: 602b str r3, [r5, #0] +10014900: b003 add sp, #12 +10014902: bdf0 pop {r4, r5, r6, r7, pc} +10014904: 2300 movs r3, #0 +10014906: f04f 32ff mov.w r2, #4294967295 +1001490a: 4629 mov r1, r5 +1001490c: 6830 ldr r0, [r6, #0] +1001490e: f001 f963 bl 10015bd8 +10014912: 2801 cmp r0, #1 +10014914: d1f6 bne.n 10014904 +10014916: e7eb b.n 100148f0 + +10014918 : +10014918: 6800 ldr r0, [r0, #0] +1001491a: 3000 adds r0, #0 +1001491c: bf18 it ne +1001491e: 2001 movne r0, #1 +10014920: 4770 bx lr + ... + +10014924 : +10014924: 2300 movs r3, #0 +10014926: 461a mov r2, r3 +10014928: 4904 ldr r1, [pc, #16] ; (1001493c ) +1001492a: 18c8 adds r0, r1, r3 +1001492c: 6042 str r2, [r0, #4] +1001492e: 505a str r2, [r3, r1] +10014930: 3308 adds r3, #8 +10014932: 2b30 cmp r3, #48 ; 0x30 +10014934: d1f9 bne.n 1001492a +10014936: 4b02 ldr r3, [pc, #8] ; (10014940 ) +10014938: 801a strh r2, [r3, #0] +1001493a: 4770 bx lr +1001493c: 1004b2d4 .word 0x1004b2d4 +10014940: 1004b2d0 .word 0x1004b2d0 + +10014944 : +10014944: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10014948: 4c15 ldr r4, [pc, #84] ; (100149a0 ) +1001494a: 461f mov r7, r3 +1001494c: 8823 ldrh r3, [r4, #0] +1001494e: b086 sub sp, #24 +10014950: 2b05 cmp r3, #5 +10014952: 4606 mov r6, r0 +10014954: 460d mov r5, r1 +10014956: 4690 mov r8, r2 +10014958: d903 bls.n 10014962 +1001495a: 2000 movs r0, #0 +1001495c: b006 add sp, #24 +1001495e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10014962: f000 fd4f bl 10015404 +10014966: 2300 movs r3, #0 +10014968: 9303 str r3, [sp, #12] +1001496a: 9302 str r3, [sp, #8] +1001496c: ab05 add r3, sp, #20 +1001496e: 9301 str r3, [sp, #4] +10014970: 9b0c ldr r3, [sp, #48] ; 0x30 +10014972: b2ba uxth r2, r7 +10014974: 9300 str r3, [sp, #0] +10014976: 4631 mov r1, r6 +10014978: 4643 mov r3, r8 +1001497a: 4628 mov r0, r5 +1001497c: f001 fa6a bl 10015e54 +10014980: 4605 mov r5, r0 +10014982: 8822 ldrh r2, [r4, #0] +10014984: 1c53 adds r3, r2, #1 +10014986: 8023 strh r3, [r4, #0] +10014988: 4b06 ldr r3, [pc, #24] ; (100149a4 ) +1001498a: eb03 03c2 add.w r3, r3, r2, lsl #3 +1001498e: 9a05 ldr r2, [sp, #20] +10014990: 605a str r2, [r3, #4] +10014992: f000 fd47 bl 10015424 +10014996: 2d01 cmp r5, #1 +10014998: d1df bne.n 1001495a +1001499a: 9805 ldr r0, [sp, #20] +1001499c: e7de b.n 1001495c +1001499e: bf00 nop +100149a0: 1004b2d0 .word 0x1004b2d0 +100149a4: 1004b2d4 .word 0x1004b2d4 + +100149a8 : +100149a8: b508 push {r3, lr} +100149aa: f000 fd2b bl 10015404 +100149ae: 2001 movs r0, #1 +100149b0: bd08 pop {r3, pc} + +100149b2 : +100149b2: f000 bd37 b.w 10015424 + +100149b6 : +100149b6: f001 bc3d b.w 10016234 + ... + +100149bc : +100149bc: 2300 movs r3, #0 +100149be: b570 push {r4, r5, r6, lr} +100149c0: 4d0d ldr r5, [pc, #52] ; (100149f8 ) +100149c2: 4604 mov r4, r0 +100149c4: 4619 mov r1, r3 +100149c6: f04f 32ff mov.w r2, #4294967295 +100149ca: 6828 ldr r0, [r5, #0] +100149cc: f001 f904 bl 10015bd8 +100149d0: 2001 movs r0, #1 +100149d2: 4b0a ldr r3, [pc, #40] ; (100149fc ) +100149d4: 0962 lsrs r2, r4, #5 +100149d6: f853 1022 ldr.w r1, [r3, r2, lsl #2] +100149da: f004 041f and.w r4, r4, #31 +100149de: 40a0 lsls r0, r4 +100149e0: 4308 orrs r0, r1 +100149e2: f843 0022 str.w r0, [r3, r2, lsl #2] +100149e6: 2300 movs r3, #0 +100149e8: 6828 ldr r0, [r5, #0] +100149ea: 461a mov r2, r3 +100149ec: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +100149f0: 4619 mov r1, r3 +100149f2: f001 b803 b.w 100159fc +100149f6: bf00 nop +100149f8: 1004b338 .word 0x1004b338 +100149fc: 1004b35c .word 0x1004b35c + +10014a00 : +10014a00: 2302 movs r3, #2 +10014a02: b573 push {r0, r1, r4, r5, r6, lr} +10014a04: 7003 strb r3, [r0, #0] +10014a06: 2301 movs r3, #1 +10014a08: 2500 movs r5, #0 +10014a0a: 2204 movs r2, #4 +10014a0c: 7043 strb r3, [r0, #1] +10014a0e: 2306 movs r3, #6 +10014a10: 4604 mov r4, r0 +10014a12: ae02 add r6, sp, #8 +10014a14: 7083 strb r3, [r0, #2] +10014a16: f846 1d04 str.w r1, [r6, #-4]! +10014a1a: 70c5 strb r5, [r0, #3] +10014a1c: 1881 adds r1, r0, r2 +10014a1e: 4820 ldr r0, [pc, #128] ; (10014aa0 ) +10014a20: f006 f8d6 bl 1001abd0 +10014a24: 8125 strh r5, [r4, #8] +10014a26: f44f 4000 mov.w r0, #32768 ; 0x8000 +10014a2a: f7fa ff9d bl 1000f968 +10014a2e: 4631 mov r1, r6 +10014a30: 8160 strh r0, [r4, #10] +10014a32: 2204 movs r2, #4 +10014a34: f104 0010 add.w r0, r4, #16 +10014a38: f006 f8ca bl 1001abd0 +10014a3c: 4629 mov r1, r5 +10014a3e: 2204 movs r2, #4 +10014a40: f104 000c add.w r0, r4, #12 +10014a44: f006 f8c8 bl 1001abd8 +10014a48: 4629 mov r1, r5 +10014a4a: 2204 movs r2, #4 +10014a4c: f104 0014 add.w r0, r4, #20 +10014a50: f006 f8c2 bl 1001abd8 +10014a54: 4629 mov r1, r5 +10014a56: 2204 movs r2, #4 +10014a58: f104 0018 add.w r0, r4, #24 +10014a5c: f006 f8bc bl 1001abd8 +10014a60: 2210 movs r2, #16 +10014a62: 4910 ldr r1, [pc, #64] ; (10014aa4 ) +10014a64: f104 001c add.w r0, r4, #28 +10014a68: f006 f8b2 bl 1001abd0 +10014a6c: 4629 mov r1, r5 +10014a6e: 2240 movs r2, #64 ; 0x40 +10014a70: f104 002c add.w r0, r4, #44 ; 0x2c +10014a74: f006 f8b0 bl 1001abd8 +10014a78: 4629 mov r1, r5 +10014a7a: 2280 movs r2, #128 ; 0x80 +10014a7c: f104 006c add.w r0, r4, #108 ; 0x6c +10014a80: f006 f8aa bl 1001abd8 +10014a84: 4b08 ldr r3, [pc, #32] ; (10014aa8 ) +10014a86: 34ec adds r4, #236 ; 0xec +10014a88: 681a ldr r2, [r3, #0] +10014a8a: 4629 mov r1, r5 +10014a8c: 4620 mov r0, r4 +10014a8e: f006 f8a3 bl 1001abd8 +10014a92: 2204 movs r2, #4 +10014a94: 4905 ldr r1, [pc, #20] ; (10014aac ) +10014a96: 4620 mov r0, r4 +10014a98: f006 f89a bl 1001abd0 +10014a9c: b002 add sp, #8 +10014a9e: bd70 pop {r4, r5, r6, pc} +10014aa0: 10044f00 .word 0x10044f00 +10014aa4: 1004b318 .word 0x1004b318 +10014aa8: 1004b32c .word 0x1004b32c +10014aac: 10040218 .word 0x10040218 + +10014ab0 : +10014ab0: b570 push {r4, r5, r6, lr} +10014ab2: 2504 movs r5, #4 +10014ab4: 2601 movs r6, #1 +10014ab6: 4604 mov r4, r0 +10014ab8: 7006 strb r6, [r0, #0] +10014aba: 7045 strb r5, [r0, #1] +10014abc: 462a mov r2, r5 +10014abe: 4932 ldr r1, [pc, #200] ; (10014b88 ) +10014ac0: 3002 adds r0, #2 +10014ac2: f006 f885 bl 1001abd0 +10014ac6: 2303 movs r3, #3 +10014ac8: 462a mov r2, r5 +10014aca: 71a3 strb r3, [r4, #6] +10014acc: 71e5 strb r5, [r4, #7] +10014ace: 492f ldr r1, [pc, #188] ; (10014b8c ) +10014ad0: f104 0008 add.w r0, r4, #8 +10014ad4: f006 f87c bl 1001abd0 +10014ad8: 2306 movs r3, #6 +10014ada: 462a mov r2, r5 +10014adc: 7323 strb r3, [r4, #12] +10014ade: 7365 strb r5, [r4, #13] +10014ae0: 492a ldr r1, [pc, #168] ; (10014b8c ) +10014ae2: f104 000e add.w r0, r4, #14 +10014ae6: f006 f873 bl 1001abd0 +10014aea: 2333 movs r3, #51 ; 0x33 +10014aec: 462a mov r2, r5 +10014aee: 74a3 strb r3, [r4, #18] +10014af0: 74e5 strb r5, [r4, #19] +10014af2: 4927 ldr r1, [pc, #156] ; (10014b90 ) +10014af4: f104 0014 add.w r0, r4, #20 +10014af8: f006 f86a bl 1001abd0 +10014afc: 2336 movs r3, #54 ; 0x36 +10014afe: 462a mov r2, r5 +10014b00: 7623 strb r3, [r4, #24] +10014b02: 7665 strb r5, [r4, #25] +10014b04: 4921 ldr r1, [pc, #132] ; (10014b8c ) +10014b06: f104 001a add.w r0, r4, #26 +10014b0a: f006 f861 bl 1001abd0 +10014b0e: 231c movs r3, #28 +10014b10: 462a mov r2, r5 +10014b12: 77a3 strb r3, [r4, #30] +10014b14: 77e5 strb r5, [r4, #31] +10014b16: 491f ldr r1, [pc, #124] ; (10014b94 ) +10014b18: f104 0020 add.w r0, r4, #32 +10014b1c: f006 f858 bl 1001abd0 +10014b20: 231a movs r3, #26 +10014b22: 2202 movs r2, #2 +10014b24: f884 3024 strb.w r3, [r4, #36] ; 0x24 +10014b28: f884 2025 strb.w r2, [r4, #37] ; 0x25 +10014b2c: 491a ldr r1, [pc, #104] ; (10014b98 ) +10014b2e: f104 0026 add.w r0, r4, #38 ; 0x26 +10014b32: f006 f84d bl 1001abd0 +10014b36: 231f movs r3, #31 +10014b38: f884 6029 strb.w r6, [r4, #41] ; 0x29 +10014b3c: f884 3028 strb.w r3, [r4, #40] ; 0x28 +10014b40: 4632 mov r2, r6 +10014b42: 2100 movs r1, #0 +10014b44: f104 002a add.w r0, r4, #42 ; 0x2a +10014b48: f006 f842 bl 1001abd0 +10014b4c: 4b13 ldr r3, [pc, #76] ; (10014b9c ) +10014b4e: f104 062b add.w r6, r4, #43 ; 0x2b +10014b52: 681b ldr r3, [r3, #0] +10014b54: 6a5d ldr r5, [r3, #36] ; 0x24 +10014b56: b17d cbz r5, 10014b78 +10014b58: 4628 mov r0, r5 +10014b5a: f006 f84d bl 1001abf8 +10014b5e: b2c0 uxtb r0, r0 +10014b60: b150 cbz r0, 10014b78 +10014b62: 230c movs r3, #12 +10014b64: f104 062d add.w r6, r4, #45 ; 0x2d +10014b68: f884 302b strb.w r3, [r4, #43] ; 0x2b +10014b6c: f804 0f2c strb.w r0, [r4, #44]! +10014b70: 182b adds r3, r5, r0 +10014b72: 429d cmp r5, r3 +10014b74: d103 bne.n 10014b7e +10014b76: 4406 add r6, r0 +10014b78: 23ff movs r3, #255 ; 0xff +10014b7a: 7033 strb r3, [r6, #0] +10014b7c: bd70 pop {r4, r5, r6, pc} +10014b7e: f815 2b01 ldrb.w r2, [r5], #1 +10014b82: f804 2f01 strb.w r2, [r4, #1]! +10014b86: e7f4 b.n 10014b72 +10014b88: 1004b344 .word 0x1004b344 +10014b8c: 1004b33c .word 0x1004b33c +10014b90: 1004021e .word 0x1004021e +10014b94: 1004b358 .word 0x1004b358 +10014b98: 1004021c .word 0x1004021c +10014b9c: 1004b348 .word 0x1004b348 + +10014ba0 : +10014ba0: 3801 subs r0, #1 +10014ba2: b538 push {r3, r4, r5, lr} +10014ba4: 4c2b ldr r4, [pc, #172] ; (10014c54 ) +10014ba6: 2806 cmp r0, #6 +10014ba8: d80a bhi.n 10014bc0 +10014baa: e8df f000 tbb [pc, r0] +10014bae: 0904 .short 0x0904 +10014bb0: 0909500b .word 0x0909500b +10014bb4: 50 .byte 0x50 +10014bb5: 00 .byte 0x00 +10014bb6: 7823 ldrb r3, [r4, #0] +10014bb8: 2b05 cmp r3, #5 +10014bba: d101 bne.n 10014bc0 +10014bbc: 2301 movs r3, #1 +10014bbe: 7023 strb r3, [r4, #0] +10014bc0: 7820 ldrb r0, [r4, #0] +10014bc2: bd38 pop {r3, r4, r5, pc} +10014bc4: 7823 ldrb r3, [r4, #0] +10014bc6: 2b01 cmp r3, #1 +10014bc8: d10b bne.n 10014be2 +10014bca: 4823 ldr r0, [pc, #140] ; (10014c58 ) +10014bcc: 78c3 ldrb r3, [r0, #3] +10014bce: b133 cbz r3, 10014bde +10014bd0: 2204 movs r2, #4 +10014bd2: 4922 ldr r1, [pc, #136] ; (10014c5c ) +10014bd4: f005 fff8 bl 1001abc8 +10014bd8: b908 cbnz r0, 10014bde +10014bda: 2303 movs r3, #3 +10014bdc: e7ef b.n 10014bbe +10014bde: 2304 movs r3, #4 +10014be0: e7ed b.n 10014bbe +10014be2: 2b05 cmp r3, #5 +10014be4: d1fb bne.n 10014bde +10014be6: 4d1c ldr r5, [pc, #112] ; (10014c58 ) +10014be8: 78eb ldrb r3, [r5, #3] +10014bea: b163 cbz r3, 10014c06 +10014bec: 2204 movs r2, #4 +10014bee: 491b ldr r1, [pc, #108] ; (10014c5c ) +10014bf0: 4628 mov r0, r5 +10014bf2: f005 ffe9 bl 1001abc8 +10014bf6: b930 cbnz r0, 10014c06 +10014bf8: 2210 movs r2, #16 +10014bfa: 4919 ldr r1, [pc, #100] ; (10014c60 ) +10014bfc: 4819 ldr r0, [pc, #100] ; (10014c64 ) +10014bfe: f005 ffe3 bl 1001abc8 +10014c02: 2800 cmp r0, #0 +10014c04: d0e9 beq.n 10014bda +10014c06: 4b15 ldr r3, [pc, #84] ; (10014c5c ) +10014c08: 4a17 ldr r2, [pc, #92] ; (10014c68 ) +10014c0a: 7818 ldrb r0, [r3, #0] +10014c0c: 7811 ldrb r1, [r2, #0] +10014c0e: 4288 cmp r0, r1 +10014c10: d1e5 bne.n 10014bde +10014c12: 7858 ldrb r0, [r3, #1] +10014c14: 7851 ldrb r1, [r2, #1] +10014c16: 4288 cmp r0, r1 +10014c18: d1e1 bne.n 10014bde +10014c1a: 7899 ldrb r1, [r3, #2] +10014c1c: 7892 ldrb r2, [r2, #2] +10014c1e: 4291 cmp r1, r2 +10014c20: d1dd bne.n 10014bde +10014c22: 78da ldrb r2, [r3, #3] +10014c24: 2a00 cmp r2, #0 +10014c26: d0da beq.n 10014bde +10014c28: 2101 movs r1, #1 +10014c2a: 0950 lsrs r0, r2, #5 +10014c2c: f002 021f and.w r2, r2, #31 +10014c30: fa01 f202 lsl.w r2, r1, r2 +10014c34: 490d ldr r1, [pc, #52] ; (10014c6c ) +10014c36: f851 1020 ldr.w r1, [r1, r0, lsl #2] +10014c3a: 420a tst r2, r1 +10014c3c: d1cf bne.n 10014bde +10014c3e: 681b ldr r3, [r3, #0] +10014c40: 2210 movs r2, #16 +10014c42: 4907 ldr r1, [pc, #28] ; (10014c60 ) +10014c44: 4807 ldr r0, [pc, #28] ; (10014c64 ) +10014c46: 602b str r3, [r5, #0] +10014c48: f005 ffc2 bl 1001abd0 +10014c4c: e7c5 b.n 10014bda +10014c4e: 2305 movs r3, #5 +10014c50: e7b5 b.n 10014bbe +10014c52: bf00 nop +10014c54: 10044f04 .word 0x10044f04 +10014c58: 1004b330 .word 0x1004b330 +10014c5c: 1004b314 .word 0x1004b314 +10014c60: 1004b318 .word 0x1004b318 +10014c64: 1004b304 .word 0x1004b304 +10014c68: 1004b34c .word 0x1004b34c +10014c6c: 1004b35c .word 0x1004b35c + +10014c70 : +10014c70: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10014c74: f8bd 3030 ldrh.w r3, [sp, #48] ; 0x30 +10014c78: 4615 mov r5, r2 +10014c7a: 4e9f ldr r6, [pc, #636] ; (10014ef8 ) +10014c7c: 6852 ldr r2, [r2, #4] +10014c7e: 2b44 cmp r3, #68 ; 0x44 +10014c80: 4688 mov r8, r1 +10014c82: 6032 str r2, [r6, #0] +10014c84: f040 8136 bne.w 10014ef4 +10014c88: 682f ldr r7, [r5, #0] +10014c8a: f9b5 4008 ldrsh.w r4, [r5, #8] +10014c8e: b16f cbz r7, 10014cac +10014c90: 2100 movs r1, #0 +10014c92: 4628 mov r0, r5 +10014c94: f7fc fb4b bl 1001132e +10014c98: 8903 ldrh r3, [r0, #8] +10014c9a: 4607 mov r7, r0 +10014c9c: 42a3 cmp r3, r4 +10014c9e: d005 beq.n 10014cac +10014ca0: 4628 mov r0, r5 +10014ca2: b003 add sp, #12 +10014ca4: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10014ca8: f7fc b9cd b.w 10011046 +10014cac: 6869 ldr r1, [r5, #4] +10014cae: 2210 movs r2, #16 +10014cb0: 6031 str r1, [r6, #0] +10014cb2: 4892 ldr r0, [pc, #584] ; (10014efc ) +10014cb4: 311c adds r1, #28 +10014cb6: f005 ff8b bl 1001abd0 +10014cba: 6830 ldr r0, [r6, #0] +10014cbc: 686a ldr r2, [r5, #4] +10014cbe: 30ec adds r0, #236 ; 0xec +10014cc0: 896b ldrh r3, [r5, #10] +10014cc2: 1a82 subs r2, r0, r2 +10014cc4: f8df 926c ldr.w r9, [pc, #620] ; 10014f34 +10014cc8: 1a9b subs r3, r3, r2 +10014cca: 498d ldr r1, [pc, #564] ; (10014f00 ) +10014ccc: 2204 movs r2, #4 +10014cce: f8c9 3000 str.w r3, [r9] +10014cd2: f005 ff79 bl 1001abc8 +10014cd6: 2800 cmp r0, #0 +10014cd8: f040 80a5 bne.w 10014e26 +10014cdc: 4682 mov sl, r0 +10014cde: f8d9 3000 ldr.w r3, [r9] +10014ce2: 6834 ldr r4, [r6, #0] +10014ce4: f1a3 0904 sub.w r9, r3, #4 +10014ce8: 34f0 adds r4, #240 ; 0xf0 +10014cea: fa0f f989 sxth.w r9, r9 +10014cee: f8df b214 ldr.w fp, [pc, #532] ; 10014f04 +10014cf2: 44a1 add r9, r4 +10014cf4: 45a1 cmp r9, r4 +10014cf6: d83e bhi.n 10014d76 +10014cf8: 4650 mov r0, sl +10014cfa: f7ff ff51 bl 10014ba0 +10014cfe: 2803 cmp r0, #3 +10014d00: f000 80b2 beq.w 10014e68 +10014d04: 2804 cmp r0, #4 +10014d06: f000 80d5 beq.w 10014eb4 +10014d0a: 2801 cmp r0, #1 +10014d0c: f040 808b bne.w 10014e26 +10014d10: 686b ldr r3, [r5, #4] +10014d12: 4c7c ldr r4, [pc, #496] ; (10014f04 ) +10014d14: 6033 str r3, [r6, #0] +10014d16: 4b7c ldr r3, [pc, #496] ; (10014f08 ) +10014d18: 78da ldrb r2, [r3, #3] +10014d1a: 4699 mov r9, r3 +10014d1c: 2a00 cmp r2, #0 +10014d1e: d03b beq.n 10014d98 +10014d20: 2204 movs r2, #4 +10014d22: 4621 mov r1, r4 +10014d24: 4618 mov r0, r3 +10014d26: f005 ff4f bl 1001abc8 +10014d2a: 2800 cmp r0, #0 +10014d2c: d134 bne.n 10014d98 +10014d2e: 2210 movs r2, #16 +10014d30: 4972 ldr r1, [pc, #456] ; (10014efc ) +10014d32: 4876 ldr r0, [pc, #472] ; (10014f0c ) +10014d34: f005 ff48 bl 1001abc8 +10014d38: bb70 cbnz r0, 10014d98 +10014d3a: 78e4 ldrb r4, [r4, #3] +10014d3c: 2c00 cmp r4, #0 +10014d3e: d145 bne.n 10014dcc +10014d40: 2300 movs r3, #0 +10014d42: f8df a1f4 ldr.w sl, [pc, #500] ; 10014f38 +10014d46: 4619 mov r1, r3 +10014d48: f04f 32ff mov.w r2, #4294967295 +10014d4c: f8da 0000 ldr.w r0, [sl] +10014d50: f000 ff42 bl 10015bd8 +10014d54: f04f 0e01 mov.w lr, #1 +10014d58: 4b6d ldr r3, [pc, #436] ; (10014f10 ) +10014d5a: 486e ldr r0, [pc, #440] ; (10014f14 ) +10014d5c: 781c ldrb r4, [r3, #0] +10014d5e: 4b6e ldr r3, [pc, #440] ; (10014f18 ) +10014d60: 7819 ldrb r1, [r3, #0] +10014d62: 428c cmp r4, r1 +10014d64: d967 bls.n 10014e36 +10014d66: 2300 movs r3, #0 +10014d68: f8da 0000 ldr.w r0, [sl] +10014d6c: 461a mov r2, r3 +10014d6e: 4619 mov r1, r3 +10014d70: f000 fe44 bl 100159fc +10014d74: e070 b.n 10014e58 +10014d76: 7823 ldrb r3, [r4, #0] +10014d78: 2b32 cmp r3, #50 ; 0x32 +10014d7a: d007 beq.n 10014d8c +10014d7c: 2b35 cmp r3, #53 ; 0x35 +10014d7e: d101 bne.n 10014d84 +10014d80: f894 a002 ldrb.w sl, [r4, #2] +10014d84: 7863 ldrb r3, [r4, #1] +10014d86: 3302 adds r3, #2 +10014d88: 441c add r4, r3 +10014d8a: e7b3 b.n 10014cf4 +10014d8c: 2204 movs r2, #4 +10014d8e: 1ca1 adds r1, r4, #2 +10014d90: 4658 mov r0, fp +10014d92: f005 ff1d bl 1001abd0 +10014d96: e7f5 b.n 10014d84 +10014d98: 4b60 ldr r3, [pc, #384] ; (10014f1c ) +10014d9a: 7821 ldrb r1, [r4, #0] +10014d9c: 781a ldrb r2, [r3, #0] +10014d9e: 4291 cmp r1, r2 +10014da0: d1ce bne.n 10014d40 +10014da2: 7861 ldrb r1, [r4, #1] +10014da4: 785a ldrb r2, [r3, #1] +10014da6: 4291 cmp r1, r2 +10014da8: d1ca bne.n 10014d40 +10014daa: 78a2 ldrb r2, [r4, #2] +10014dac: 789b ldrb r3, [r3, #2] +10014dae: 429a cmp r2, r3 +10014db0: d1c6 bne.n 10014d40 +10014db2: 78e4 ldrb r4, [r4, #3] +10014db4: 2c00 cmp r4, #0 +10014db6: d0c3 beq.n 10014d40 +10014db8: 2301 movs r3, #1 +10014dba: f004 021f and.w r2, r4, #31 +10014dbe: 4093 lsls r3, r2 +10014dc0: 4a54 ldr r2, [pc, #336] ; (10014f14 ) +10014dc2: 0961 lsrs r1, r4, #5 +10014dc4: f852 2021 ldr.w r2, [r2, r1, lsl #2] +10014dc8: 4213 tst r3, r2 +10014dca: d1b9 bne.n 10014d40 +10014dcc: 4a53 ldr r2, [pc, #332] ; (10014f1c ) +10014dce: 484f ldr r0, [pc, #316] ; (10014f0c ) +10014dd0: 7853 ldrb r3, [r2, #1] +10014dd2: 7891 ldrb r1, [r2, #2] +10014dd4: 021b lsls r3, r3, #8 +10014dd6: 7812 ldrb r2, [r2, #0] +10014dd8: ea43 4301 orr.w r3, r3, r1, lsl #16 +10014ddc: 4313 orrs r3, r2 +10014dde: ea43 6404 orr.w r4, r3, r4, lsl #24 +10014de2: 2210 movs r2, #16 +10014de4: 4945 ldr r1, [pc, #276] ; (10014efc ) +10014de6: f8c9 4000 str.w r4, [r9] +10014dea: f005 fef1 bl 1001abd0 +10014dee: f8d9 1000 ldr.w r1, [r9] +10014df2: 6830 ldr r0, [r6, #0] +10014df4: f7ff fe04 bl 10014a00 +10014df8: 2335 movs r3, #53 ; 0x35 +10014dfa: 6830 ldr r0, [r6, #0] +10014dfc: f880 30f0 strb.w r3, [r0, #240] ; 0xf0 +10014e00: 2301 movs r3, #1 +10014e02: f880 30f1 strb.w r3, [r0, #241] ; 0xf1 +10014e06: 2302 movs r3, #2 +10014e08: 30f3 adds r0, #243 ; 0xf3 +10014e0a: f800 3c01 strb.w r3, [r0, #-1] +10014e0e: f7ff fe4f bl 10014ab0 +10014e12: 4b43 ldr r3, [pc, #268] ; (10014f20 ) +10014e14: 4843 ldr r0, [pc, #268] ; (10014f24 ) +10014e16: 681b ldr r3, [r3, #0] +10014e18: 4a43 ldr r2, [pc, #268] ; (10014f28 ) +10014e1a: 9300 str r3, [sp, #0] +10014e1c: 4629 mov r1, r5 +10014e1e: 2344 movs r3, #68 ; 0x44 +10014e20: 6800 ldr r0, [r0, #0] +10014e22: f7fe ff6d bl 10013d00 +10014e26: 4640 mov r0, r8 +10014e28: f7ff f82a bl 10013e80 +10014e2c: 2f00 cmp r7, #0 +10014e2e: f43f af37 beq.w 10014ca0 +10014e32: 4638 mov r0, r7 +10014e34: e735 b.n 10014ca2 +10014e36: 0962 lsrs r2, r4, #5 +10014e38: f004 031f and.w r3, r4, #31 +10014e3c: f850 2022 ldr.w r2, [r0, r2, lsl #2] +10014e40: fa0e f303 lsl.w r3, lr, r3 +10014e44: 4013 ands r3, r2 +10014e46: d10c bne.n 10014e62 +10014e48: 461a mov r2, r3 +10014e4a: 4619 mov r1, r3 +10014e4c: f8da 0000 ldr.w r0, [sl] +10014e50: f000 fdd4 bl 100159fc +10014e54: 2c00 cmp r4, #0 +10014e56: d1b9 bne.n 10014dcc +10014e58: 4834 ldr r0, [pc, #208] ; (10014f2c ) +10014e5a: f005 fe91 bl 1001ab80 +10014e5e: 2400 movs r4, #0 +10014e60: e7b4 b.n 10014dcc +10014e62: 3401 adds r4, #1 +10014e64: b2e4 uxtb r4, r4 +10014e66: e77c b.n 10014d62 +10014e68: f8df 909c ldr.w r9, [pc, #156] ; 10014f08 +10014e6c: 6868 ldr r0, [r5, #4] +10014e6e: f8d9 1000 ldr.w r1, [r9] +10014e72: 6030 str r0, [r6, #0] +10014e74: f7ff fdc4 bl 10014a00 +10014e78: 2335 movs r3, #53 ; 0x35 +10014e7a: 6830 ldr r0, [r6, #0] +10014e7c: 2405 movs r4, #5 +10014e7e: f880 30f0 strb.w r3, [r0, #240] ; 0xf0 +10014e82: 2301 movs r3, #1 +10014e84: f880 40f2 strb.w r4, [r0, #242] ; 0xf2 +10014e88: f880 30f1 strb.w r3, [r0, #241] ; 0xf1 +10014e8c: 30f3 adds r0, #243 ; 0xf3 +10014e8e: f7ff fe0f bl 10014ab0 +10014e92: 4b23 ldr r3, [pc, #140] ; (10014f20 ) +10014e94: 4823 ldr r0, [pc, #140] ; (10014f24 ) +10014e96: 681b ldr r3, [r3, #0] +10014e98: 4a23 ldr r2, [pc, #140] ; (10014f28 ) +10014e9a: 9300 str r3, [sp, #0] +10014e9c: 4629 mov r1, r5 +10014e9e: 2344 movs r3, #68 ; 0x44 +10014ea0: 6800 ldr r0, [r0, #0] +10014ea2: f7fe ff2d bl 10013d00 +10014ea6: f899 0003 ldrb.w r0, [r9, #3] +10014eaa: f7ff fd87 bl 100149bc +10014eae: 4b20 ldr r3, [pc, #128] ; (10014f30 ) +10014eb0: 701c strb r4, [r3, #0] +10014eb2: e7b8 b.n 10014e26 +10014eb4: 6868 ldr r0, [r5, #4] +10014eb6: 2100 movs r1, #0 +10014eb8: 6030 str r0, [r6, #0] +10014eba: f7ff fda1 bl 10014a00 +10014ebe: 2235 movs r2, #53 ; 0x35 +10014ec0: 6833 ldr r3, [r6, #0] +10014ec2: 4818 ldr r0, [pc, #96] ; (10014f24 ) +10014ec4: f883 20f0 strb.w r2, [r3, #240] ; 0xf0 +10014ec8: 2201 movs r2, #1 +10014eca: f883 20f1 strb.w r2, [r3, #241] ; 0xf1 +10014ece: 2206 movs r2, #6 +10014ed0: f883 20f2 strb.w r2, [r3, #242] ; 0xf2 +10014ed4: 22ff movs r2, #255 ; 0xff +10014ed6: f883 20f3 strb.w r2, [r3, #243] ; 0xf3 +10014eda: 4b11 ldr r3, [pc, #68] ; (10014f20 ) +10014edc: 4a12 ldr r2, [pc, #72] ; (10014f28 ) +10014ede: 681b ldr r3, [r3, #0] +10014ee0: 4629 mov r1, r5 +10014ee2: 9300 str r3, [sp, #0] +10014ee4: 6800 ldr r0, [r0, #0] +10014ee6: 2344 movs r3, #68 ; 0x44 +10014ee8: f7fe ff0a bl 10013d00 +10014eec: 2205 movs r2, #5 +10014eee: 4b10 ldr r3, [pc, #64] ; (10014f30 ) +10014ef0: 701a strb r2, [r3, #0] +10014ef2: e798 b.n 10014e26 +10014ef4: 2700 movs r7, #0 +10014ef6: e796 b.n 10014e26 +10014ef8: 1004b328 .word 0x1004b328 +10014efc: 1004b318 .word 0x1004b318 +10014f00: 10040218 .word 0x10040218 +10014f04: 1004b314 .word 0x1004b314 +10014f08: 1004b330 .word 0x1004b330 +10014f0c: 1004b304 .word 0x1004b304 +10014f10: 1004b335 .word 0x1004b335 +10014f14: 1004b35c .word 0x1004b35c +10014f18: 1004b334 .word 0x1004b334 +10014f1c: 1004b34c .word 0x1004b34c +10014f20: 1004b348 .word 0x1004b348 +10014f24: 1004b350 .word 0x1004b350 +10014f28: 1004b354 .word 0x1004b354 +10014f2c: 10040238 .word 0x10040238 +10014f30: 10044f04 .word 0x10044f04 +10014f34: 1004b32c .word 0x1004b32c +10014f38: 1004b338 .word 0x1004b338 + +10014f3c : +10014f3c: b510 push {r4, lr} +10014f3e: 4c07 ldr r4, [pc, #28] ; (10014f5c ) +10014f40: 6820 ldr r0, [r4, #0] +10014f42: b118 cbz r0, 10014f4c +10014f44: f7fe ffa8 bl 10013e98 +10014f48: 2300 movs r3, #0 +10014f4a: 6023 str r3, [r4, #0] +10014f4c: 4c04 ldr r4, [pc, #16] ; (10014f60 ) +10014f4e: 6820 ldr r0, [r4, #0] +10014f50: b118 cbz r0, 10014f5a +10014f52: f000 fee4 bl 10015d1e +10014f56: 2300 movs r3, #0 +10014f58: 6023 str r3, [r4, #0] +10014f5a: bd10 pop {r4, pc} +10014f5c: 1004b350 .word 0x1004b350 +10014f60: 1004b338 .word 0x1004b338 + +10014f64 : +10014f64: b5f8 push {r3, r4, r5, r6, r7, lr} +10014f66: 4b30 ldr r3, [pc, #192] ; (10015028 ) +10014f68: 4604 mov r4, r0 +10014f6a: 6018 str r0, [r3, #0] +10014f6c: f7ff ffe6 bl 10014f3c +10014f70: f7fe ffa6 bl 10013ec0 +10014f74: 4d2d ldr r5, [pc, #180] ; (1001502c ) +10014f76: 6028 str r0, [r5, #0] +10014f78: b920 cbnz r0, 10014f84 +10014f7a: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +10014f7e: 482c ldr r0, [pc, #176] ; (10015030 ) +10014f80: f005 bdfe b.w 1001ab80 +10014f84: f04f 36ff mov.w r6, #4294967295 +10014f88: 4b2a ldr r3, [pc, #168] ; (10015034 ) +10014f8a: 2220 movs r2, #32 +10014f8c: 2100 movs r1, #0 +10014f8e: 482a ldr r0, [pc, #168] ; (10015038 ) +10014f90: 601e str r6, [r3, #0] +10014f92: f005 fe21 bl 1001abd8 +10014f96: 4b29 ldr r3, [pc, #164] ; (1001503c ) +10014f98: 4a29 ldr r2, [pc, #164] ; (10015040 ) +10014f9a: 7818 ldrb r0, [r3, #0] +10014f9c: 7811 ldrb r1, [r2, #0] +10014f9e: 4f29 ldr r7, [pc, #164] ; (10015044 ) +10014fa0: 4301 orrs r1, r0 +10014fa2: bf04 itt eq +10014fa4: 2102 moveq r1, #2 +10014fa6: 7011 strbeq r1, [r2, #0] +10014fa8: f04f 0204 mov.w r2, #4 +10014fac: bf08 it eq +10014fae: 701e strbeq r6, [r3, #0] +10014fb0: 18a1 adds r1, r4, r2 +10014fb2: 4e25 ldr r6, [pc, #148] ; (10015048 ) +10014fb4: 4638 mov r0, r7 +10014fb6: f005 fe0b bl 1001abd0 +10014fba: f104 0108 add.w r1, r4, #8 +10014fbe: 2204 movs r2, #4 +10014fc0: 4822 ldr r0, [pc, #136] ; (1001504c ) +10014fc2: f005 fe05 bl 1001abd0 +10014fc6: f104 010c add.w r1, r4, #12 +10014fca: 2204 movs r2, #4 +10014fcc: 4630 mov r0, r6 +10014fce: f005 fdff bl 1001abd0 +10014fd2: 68a2 ldr r2, [r4, #8] +10014fd4: 6863 ldr r3, [r4, #4] +10014fd6: 491e ldr r1, [pc, #120] ; (10015050 ) +10014fd8: ea03 0002 and.w r0, r3, r2 +10014fdc: ea63 0302 orn r3, r3, r2 +10014fe0: 4a1c ldr r2, [pc, #112] ; (10015054 ) +10014fe2: 6008 str r0, [r1, #0] +10014fe4: 2001 movs r0, #1 +10014fe6: 6013 str r3, [r2, #0] +10014fe8: f000 fd82 bl 10015af0 +10014fec: 4b1a ldr r3, [pc, #104] ; (10015058 ) +10014fee: 2204 movs r2, #4 +10014ff0: 6018 str r0, [r3, #0] +10014ff2: 2100 movs r1, #0 +10014ff4: 4819 ldr r0, [pc, #100] ; (1001505c ) +10014ff6: f005 fdef bl 1001abd8 +10014ffa: 2210 movs r2, #16 +10014ffc: 2100 movs r1, #0 +10014ffe: 4818 ldr r0, [pc, #96] ; (10015060 ) +10015000: f005 fdea bl 1001abd8 +10015004: 78f8 ldrb r0, [r7, #3] +10015006: f7ff fcd9 bl 100149bc +1001500a: 78f0 ldrb r0, [r6, #3] +1001500c: f7ff fcd6 bl 100149bc +10015010: 2243 movs r2, #67 ; 0x43 +10015012: 4914 ldr r1, [pc, #80] ; (10015064 ) +10015014: 6828 ldr r0, [r5, #0] +10015016: f7fe fe21 bl 10013c5c +1001501a: 6828 ldr r0, [r5, #0] +1001501c: 2200 movs r2, #0 +1001501e: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +10015022: 4911 ldr r1, [pc, #68] ; (10015068 ) +10015024: f7fe bf34 b.w 10013e90 +10015028: 1004b348 .word 0x1004b348 +1001502c: 1004b350 .word 0x1004b350 +10015030: 10040222 .word 0x10040222 +10015034: 1004b354 .word 0x1004b354 +10015038: 1004b35c .word 0x1004b35c +1001503c: 1004b334 .word 0x1004b334 +10015040: 1004b335 .word 0x1004b335 +10015044: 1004b33c .word 0x1004b33c +10015048: 1004b340 .word 0x1004b340 +1001504c: 1004b344 .word 0x1004b344 +10015050: 1004b34c .word 0x1004b34c +10015054: 1004b358 .word 0x1004b358 +10015058: 1004b338 .word 0x1004b338 +1001505c: 1004b330 .word 0x1004b330 +10015060: 1004b304 .word 0x1004b304 +10015064: 10040090 .word 0x10040090 +10015068: 10014c71 .word 0x10014c71 + +1001506c : +1001506c: b510 push {r4, lr} +1001506e: 4b0f ldr r3, [pc, #60] ; (100150ac ) +10015070: 681a ldr r2, [r3, #0] +10015072: 4282 cmp r2, r0 +10015074: d318 bcc.n 100150a8 +10015076: 685c ldr r4, [r3, #4] +10015078: 1919 adds r1, r3, r4 +1001507a: 4288 cmp r0, r1 +1001507c: bf01 itttt eq +1001507e: 6841 ldreq r1, [r0, #4] +10015080: 4618 moveq r0, r3 +10015082: 1909 addeq r1, r1, r4 +10015084: 6059 streq r1, [r3, #4] +10015086: 6844 ldr r4, [r0, #4] +10015088: 1901 adds r1, r0, r4 +1001508a: 428a cmp r2, r1 +1001508c: d107 bne.n 1001509e +1001508e: 4908 ldr r1, [pc, #32] ; (100150b0 ) +10015090: 6809 ldr r1, [r1, #0] +10015092: 428a cmp r2, r1 +10015094: bf1f itttt ne +10015096: 6851 ldrne r1, [r2, #4] +10015098: 6812 ldrne r2, [r2, #0] +1001509a: 1909 addne r1, r1, r4 +1001509c: 6041 strne r1, [r0, #4] +1001509e: 4298 cmp r0, r3 +100150a0: 6002 str r2, [r0, #0] +100150a2: bf18 it ne +100150a4: 6018 strne r0, [r3, #0] +100150a6: bd10 pop {r4, pc} +100150a8: 4613 mov r3, r2 +100150aa: e7e1 b.n 10015070 +100150ac: 1004b394 .word 0x1004b394 +100150b0: 1004b388 .word 0x1004b388 + +100150b4 : +100150b4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +100150b8: f005 fce8 bl 1001aa8c +100150bc: 2200 movs r2, #0 +100150be: 4611 mov r1, r2 +100150c0: 4614 mov r4, r2 +100150c2: 4696 mov lr, r2 +100150c4: 4d1e ldr r5, [pc, #120] ; (10015140 ) +100150c6: 3005 adds r0, #5 +100150c8: 682e ldr r6, [r5, #0] +100150ca: 4f1e ldr r7, [pc, #120] ; (10015144 ) +100150cc: f8df c080 ldr.w ip, [pc, #128] ; 10015150 +100150d0: b2c0 uxtb r0, r0 +100150d2: eb07 03c1 add.w r3, r7, r1, lsl #3 +100150d6: 685b ldr r3, [r3, #4] +100150d8: b93b cbnz r3, 100150ea +100150da: b102 cbz r2, 100150de +100150dc: 602e str r6, [r5, #0] +100150de: 4b1a ldr r3, [pc, #104] ; (10015148 ) +100150e0: 601c str r4, [r3, #0] +100150e2: 4b1a ldr r3, [pc, #104] ; (1001514c ) +100150e4: 601c str r4, [r3, #0] +100150e6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100150ea: f857 8031 ldr.w r8, [r7, r1, lsl #3] +100150ee: f1b8 5f00 cmp.w r8, #536870912 ; 0x20000000 +100150f2: d901 bls.n 100150f8 +100150f4: 2802 cmp r0, #2 +100150f6: d921 bls.n 1001513c +100150f8: f018 0f07 tst.w r8, #7 +100150fc: 4642 mov r2, r8 +100150fe: d007 beq.n 10015110 +10015100: f108 0807 add.w r8, r8, #7 +10015104: f028 0807 bic.w r8, r8, #7 +10015108: 4413 add r3, r2 +1001510a: 4642 mov r2, r8 +1001510c: eba3 0308 sub.w r3, r3, r8 +10015110: b919 cbnz r1, 1001511a +10015112: f8cc 2000 str.w r2, [ip] +10015116: f8cc 1004 str.w r1, [ip, #4] +1001511a: 4413 add r3, r2 +1001511c: 3b08 subs r3, #8 +1001511e: f023 0307 bic.w r3, r3, #7 +10015122: eba3 0802 sub.w r8, r3, r2 +10015126: f8c3 e004 str.w lr, [r3, #4] +1001512a: f8c3 e000 str.w lr, [r3] +1001512e: e882 0108 stmia.w r2, {r3, r8} +10015132: b106 cbz r6, 10015136 +10015134: 6032 str r2, [r6, #0] +10015136: 461e mov r6, r3 +10015138: 2201 movs r2, #1 +1001513a: 4444 add r4, r8 +1001513c: 3101 adds r1, #1 +1001513e: e7c8 b.n 100150d2 +10015140: 1004b388 .word 0x1004b388 +10015144: 10044bf0 .word 0x10044bf0 +10015148: 1004b390 .word 0x1004b390 +1001514c: 1004b38c .word 0x1004b38c +10015150: 1004b394 .word 0x1004b394 + +10015154 : +10015154: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10015158: 4e2b ldr r6, [pc, #172] ; (10015208 ) +1001515a: 4604 mov r4, r0 +1001515c: 6833 ldr r3, [r6, #0] +1001515e: b90b cbnz r3, 10015164 +10015160: f7ff ffa8 bl 100150b4 +10015164: f001 f85e bl 10016224 +10015168: 2c00 cmp r4, #0 +1001516a: db13 blt.n 10015194 +1001516c: d049 beq.n 10015202 +1001516e: 3408 adds r4, #8 +10015170: 0762 lsls r2, r4, #29 +10015172: d002 beq.n 1001517a +10015174: f024 0407 bic.w r4, r4, #7 +10015178: 3408 adds r4, #8 +1001517a: 4b24 ldr r3, [pc, #144] ; (1001520c ) +1001517c: 681f ldr r7, [r3, #0] +1001517e: 4698 mov r8, r3 +10015180: 42a7 cmp r7, r4 +10015182: d307 bcc.n 10015194 +10015184: 4b22 ldr r3, [pc, #136] ; (10015210 ) +10015186: 681d ldr r5, [r3, #0] +10015188: 686a ldr r2, [r5, #4] +1001518a: 42a2 cmp r2, r4 +1001518c: d304 bcc.n 10015198 +1001518e: 6831 ldr r1, [r6, #0] +10015190: 428d cmp r5, r1 +10015192: d107 bne.n 100151a4 +10015194: 2600 movs r6, #0 +10015196: e020 b.n 100151da +10015198: 6829 ldr r1, [r5, #0] +1001519a: 2900 cmp r1, #0 +1001519c: d0f7 beq.n 1001518e +1001519e: 462b mov r3, r5 +100151a0: 460d mov r5, r1 +100151a2: e7f1 b.n 10015188 +100151a4: 681e ldr r6, [r3, #0] +100151a6: 6829 ldr r1, [r5, #0] +100151a8: 1b12 subs r2, r2, r4 +100151aa: 2a10 cmp r2, #16 +100151ac: f106 0608 add.w r6, r6, #8 +100151b0: 6019 str r1, [r3, #0] +100151b2: d904 bls.n 100151be +100151b4: 1928 adds r0, r5, r4 +100151b6: 6042 str r2, [r0, #4] +100151b8: 606c str r4, [r5, #4] +100151ba: f7ff ff57 bl 1001506c +100151be: 686b ldr r3, [r5, #4] +100151c0: 4914 ldr r1, [pc, #80] ; (10015214 ) +100151c2: 1aff subs r7, r7, r3 +100151c4: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000 +100151c8: 606b str r3, [r5, #4] +100151ca: 2300 movs r3, #0 +100151cc: 6808 ldr r0, [r1, #0] +100151ce: f8c8 7000 str.w r7, [r8] +100151d2: 4287 cmp r7, r0 +100151d4: bf38 it cc +100151d6: 600f strcc r7, [r1, #0] +100151d8: 602b str r3, [r5, #0] +100151da: f001 f8cd bl 10016378 +100151de: b96e cbnz r6, 100151fc +100151e0: 4b0d ldr r3, [pc, #52] ; (10015218 ) +100151e2: 681b ldr r3, [r3, #0] +100151e4: 029b lsls r3, r3, #10 +100151e6: d509 bpl.n 100151fc +100151e8: 4d0c ldr r5, [pc, #48] ; (1001521c ) +100151ea: 480d ldr r0, [pc, #52] ; (10015220 ) +100151ec: 47a8 blx r5 +100151ee: 4b07 ldr r3, [pc, #28] ; (1001520c ) +100151f0: 4621 mov r1, r4 +100151f2: 681a ldr r2, [r3, #0] +100151f4: 480b ldr r0, [pc, #44] ; (10015224 ) +100151f6: 47a8 blx r5 +100151f8: 480b ldr r0, [pc, #44] ; (10015228 ) +100151fa: 47a8 blx r5 +100151fc: 4630 mov r0, r6 +100151fe: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10015202: 4626 mov r6, r4 +10015204: e7e9 b.n 100151da +10015206: bf00 nop +10015208: 1004b388 .word 0x1004b388 +1001520c: 1004b38c .word 0x1004b38c +10015210: 1004b394 .word 0x1004b394 +10015214: 1004b390 .word 0x1004b390 +10015218: 1000030c .word 0x1000030c +1001521c: 0000f39d .word 0x0000f39d +10015220: 10040247 .word 0x10040247 +10015224: 10040257 .word 0x10040257 +10015228: 10040823 .word 0x10040823 + +1001522c <__vPortFree>: +1001522c: b510 push {r4, lr} +1001522e: 4604 mov r4, r0 +10015230: b1d0 cbz r0, 10015268 <__vPortFree+0x3c> +10015232: f850 3c04 ldr.w r3, [r0, #-4] +10015236: 2b00 cmp r3, #0 +10015238: da16 bge.n 10015268 <__vPortFree+0x3c> +1001523a: f850 2c08 ldr.w r2, [r0, #-8] +1001523e: b99a cbnz r2, 10015268 <__vPortFree+0x3c> +10015240: f023 4300 bic.w r3, r3, #2147483648 ; 0x80000000 +10015244: f840 3c04 str.w r3, [r0, #-4] +10015248: f000 ffec bl 10016224 +1001524c: 4a07 ldr r2, [pc, #28] ; (1001526c <__vPortFree+0x40>) +1001524e: f854 3c04 ldr.w r3, [r4, #-4] +10015252: 6811 ldr r1, [r2, #0] +10015254: f1a4 0008 sub.w r0, r4, #8 +10015258: 440b add r3, r1 +1001525a: 6013 str r3, [r2, #0] +1001525c: f7ff ff06 bl 1001506c +10015260: e8bd 4010 ldmia.w sp!, {r4, lr} +10015264: f001 b888 b.w 10016378 +10015268: bd10 pop {r4, pc} +1001526a: bf00 nop +1001526c: 1004b38c .word 0x1004b38c + +10015270 : +10015270: 4b03 ldr r3, [pc, #12] ; (10015280 ) +10015272: 6018 str r0, [r3, #0] +10015274: 4b03 ldr r3, [pc, #12] ; (10015284 ) +10015276: 6019 str r1, [r3, #0] +10015278: 4b03 ldr r3, [pc, #12] ; (10015288 ) +1001527a: 601a str r2, [r3, #0] +1001527c: 4770 bx lr +1001527e: bf00 nop +10015280: 1004b37c .word 0x1004b37c +10015284: 1004b384 .word 0x1004b384 +10015288: 1004b380 .word 0x1004b380 + +1001528c : +1001528c: 4a08 ldr r2, [pc, #32] ; (100152b0 ) +1001528e: 4603 mov r3, r0 +10015290: 6812 ldr r2, [r2, #0] +10015292: 4290 cmp r0, r2 +10015294: d307 bcc.n 100152a6 +10015296: 4a07 ldr r2, [pc, #28] ; (100152b4 ) +10015298: 6812 ldr r2, [r2, #0] +1001529a: 4290 cmp r0, r2 +1001529c: d203 bcs.n 100152a6 +1001529e: 4b06 ldr r3, [pc, #24] ; (100152b8 ) +100152a0: 681b ldr r3, [r3, #0] +100152a2: b11b cbz r3, 100152ac +100152a4: 4718 bx r3 +100152a6: 4618 mov r0, r3 +100152a8: f7ff bfc0 b.w 1001522c <__vPortFree> +100152ac: 4770 bx lr +100152ae: bf00 nop +100152b0: 1004b380 .word 0x1004b380 +100152b4: 1004b384 .word 0x1004b384 +100152b8: 1004b37c .word 0x1004b37c + +100152bc : +100152bc: 4b01 ldr r3, [pc, #4] ; (100152c4 ) +100152be: 6818 ldr r0, [r3, #0] +100152c0: 4770 bx lr +100152c2: bf00 nop +100152c4: 1004b38c .word 0x1004b38c + +100152c8 : +100152c8: 4b01 ldr r3, [pc, #4] ; (100152d0 ) +100152ca: 6818 ldr r0, [r3, #0] +100152cc: 4770 bx lr +100152ce: bf00 nop +100152d0: 1004b390 .word 0x1004b390 + +100152d4 : +100152d4: 4b20 ldr r3, [pc, #128] ; (10015358 ) +100152d6: b570 push {r4, r5, r6, lr} +100152d8: 681b ldr r3, [r3, #0] +100152da: 4604 mov r4, r0 +100152dc: 4298 cmp r0, r3 +100152de: 460d mov r5, r1 +100152e0: d30d bcc.n 100152fe +100152e2: 4b1e ldr r3, [pc, #120] ; (1001535c ) +100152e4: 681b ldr r3, [r3, #0] +100152e6: 4298 cmp r0, r3 +100152e8: d209 bcs.n 100152fe +100152ea: 4b1d ldr r3, [pc, #116] ; (10015360 ) +100152ec: 681b ldr r3, [r3, #0] +100152ee: b103 cbz r3, 100152f2 +100152f0: 4798 blx r3 +100152f2: b155 cbz r5, 1001530a +100152f4: 4628 mov r0, r5 +100152f6: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +100152fa: f7ff bf2b b.w 10015154 +100152fe: 2c00 cmp r4, #0 +10015300: d0f7 beq.n 100152f2 +10015302: b925 cbnz r5, 1001530e +10015304: 4620 mov r0, r4 +10015306: f7ff ffc1 bl 1001528c +1001530a: 462e mov r6, r5 +1001530c: e021 b.n 10015352 +1001530e: 4628 mov r0, r5 +10015310: f7ff ff20 bl 10015154 +10015314: 4606 mov r6, r0 +10015316: b1e0 cbz r0, 10015352 +10015318: f854 2c04 ldr.w r2, [r4, #-4] +1001531c: 4621 mov r1, r4 +1001531e: f022 4200 bic.w r2, r2, #2147483648 ; 0x80000000 +10015322: 3a08 subs r2, #8 +10015324: 42aa cmp r2, r5 +10015326: bf28 it cs +10015328: 462a movcs r2, r5 +1001532a: 4b0e ldr r3, [pc, #56] ; (10015364 ) +1001532c: 4798 blx r3 +1001532e: f000 ff79 bl 10016224 +10015332: 490d ldr r1, [pc, #52] ; (10015368 ) +10015334: f854 3c04 ldr.w r3, [r4, #-4] +10015338: 680a ldr r2, [r1, #0] +1001533a: f023 4300 bic.w r3, r3, #2147483648 ; 0x80000000 +1001533e: f844 3c04 str.w r3, [r4, #-4] +10015342: f1a4 0008 sub.w r0, r4, #8 +10015346: 4413 add r3, r2 +10015348: 600b str r3, [r1, #0] +1001534a: f7ff fe8f bl 1001506c +1001534e: f001 f813 bl 10016378 +10015352: 4630 mov r0, r6 +10015354: bd70 pop {r4, r5, r6, pc} +10015356: bf00 nop +10015358: 1004b380 .word 0x1004b380 +1001535c: 1004b384 .word 0x1004b384 +10015360: 1004b37c .word 0x1004b37c +10015364: 00028b49 .word 0x00028b49 +10015368: 1004b38c .word 0x1004b38c + +1001536c : +1001536c: b538 push {r3, r4, r5, lr} +1001536e: 4605 mov r5, r0 +10015370: f7ff fef0 bl 10015154 +10015374: 4604 mov r4, r0 +10015376: b118 cbz r0, 10015380 +10015378: 462a mov r2, r5 +1001537a: 2100 movs r1, #0 +1001537c: 4b01 ldr r3, [pc, #4] ; (10015384 ) +1001537e: 4798 blx r3 +10015380: 4620 mov r0, r4 +10015382: bd38 pop {r3, r4, r5, pc} +10015384: 0000f511 .word 0x0000f511 + +10015388 : +10015388: f04f 0350 mov.w r3, #80 ; 0x50 +1001538c: f383 8811 msr BASEPRI, r3 +10015390: f3bf 8f6f isb sy +10015394: f3bf 8f4f dsb sy +10015398: e7fe b.n 10015398 + ... + +1001539c : +1001539c: 4806 ldr r0, [pc, #24] ; (100153b8 ) +1001539e: 6800 ldr r0, [r0, #0] +100153a0: 6800 ldr r0, [r0, #0] +100153a2: f380 8808 msr MSP, r0 +100153a6: b662 cpsie i +100153a8: b661 cpsie f +100153aa: f3bf 8f4f dsb sy +100153ae: f3bf 8f6f isb sy +100153b2: df00 svc 0 +100153b4: bf00 nop +100153b6: 0000 .short 0x0000 +100153b8: e000ed08 .word 0xe000ed08 + +100153bc : +100153bc: f04f 7380 mov.w r3, #16777216 ; 0x1000000 +100153c0: f840 3c04 str.w r3, [r0, #-4] +100153c4: 4b05 ldr r3, [pc, #20] ; (100153dc ) +100153c6: f021 0101 bic.w r1, r1, #1 +100153ca: f840 1c08 str.w r1, [r0, #-8] +100153ce: f840 3c0c str.w r3, [r0, #-12] +100153d2: f840 2c20 str.w r2, [r0, #-32] +100153d6: 3840 subs r0, #64 ; 0x40 +100153d8: 4770 bx lr +100153da: bf00 nop +100153dc: 10015389 .word 0x10015389 + +100153e0 : +100153e0: 4b07 ldr r3, [pc, #28] ; (10015400 ) +100153e2: 6819 ldr r1, [r3, #0] +100153e4: 6808 ldr r0, [r1, #0] +100153e6: e8b0 0ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp} +100153ea: f380 8809 msr PSP, r0 +100153ee: f3bf 8f6f isb sy +100153f2: f04f 0000 mov.w r0, #0 +100153f6: f380 8811 msr BASEPRI, r0 +100153fa: f04e 0e0d orr.w lr, lr, #13 +100153fe: 4770 bx lr + +10015400 : +10015400: 1004b3a8 .word 0x1004b3a8 + +10015404 : +10015404: f04f 0350 mov.w r3, #80 ; 0x50 +10015408: f383 8811 msr BASEPRI, r3 +1001540c: f3bf 8f6f isb sy +10015410: f3bf 8f4f dsb sy +10015414: 4a02 ldr r2, [pc, #8] ; (10015420 ) +10015416: 6813 ldr r3, [r2, #0] +10015418: 3301 adds r3, #1 +1001541a: 6013 str r3, [r2, #0] +1001541c: 4770 bx lr +1001541e: bf00 nop +10015420: 10044f08 .word 0x10044f08 + +10015424 : +10015424: 4a03 ldr r2, [pc, #12] ; (10015434 ) +10015426: 6813 ldr r3, [r2, #0] +10015428: 3b01 subs r3, #1 +1001542a: 6013 str r3, [r2, #0] +1001542c: b90b cbnz r3, 10015432 +1001542e: f383 8811 msr BASEPRI, r3 +10015432: 4770 bx lr +10015434: 10044f08 .word 0x10044f08 + ... + +10015440 : +10015440: f3ef 8009 mrs r0, PSP +10015444: f3bf 8f6f isb sy +10015448: 4b0d ldr r3, [pc, #52] ; (10015480 ) +1001544a: 681a ldr r2, [r3, #0] +1001544c: e920 0ff0 stmdb r0!, {r4, r5, r6, r7, r8, r9, sl, fp} +10015450: 6010 str r0, [r2, #0] +10015452: e92d 4008 stmdb sp!, {r3, lr} +10015456: f04f 0050 mov.w r0, #80 ; 0x50 +1001545a: f380 8811 msr BASEPRI, r0 +1001545e: f001 f84f bl 10016500 +10015462: f04f 0000 mov.w r0, #0 +10015466: f380 8811 msr BASEPRI, r0 +1001546a: e8bd 4008 ldmia.w sp!, {r3, lr} +1001546e: 6819 ldr r1, [r3, #0] +10015470: 6808 ldr r0, [r1, #0] +10015472: e8b0 0ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp} +10015476: f380 8809 msr PSP, r0 +1001547a: f3bf 8f6f isb sy +1001547e: 4770 bx lr + +10015480 : +10015480: 1004b3a8 .word 0x1004b3a8 + +10015484 : +10015484: b508 push {r3, lr} +10015486: f04f 0350 mov.w r3, #80 ; 0x50 +1001548a: f383 8811 msr BASEPRI, r3 +1001548e: f3bf 8f6f isb sy +10015492: f3bf 8f4f dsb sy +10015496: f000 fee9 bl 1001626c +1001549a: b118 cbz r0, 100154a4 +1001549c: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +100154a0: 4b02 ldr r3, [pc, #8] ; (100154ac ) +100154a2: 601a str r2, [r3, #0] +100154a4: 2300 movs r3, #0 +100154a6: f383 8811 msr BASEPRI, r3 +100154aa: bd08 pop {r3, pc} +100154ac: e000ed04 .word 0xe000ed04 + +100154b0 : +100154b0: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +100154b2: 4b3f ldr r3, [pc, #252] ; (100155b0 ) +100154b4: 4a3f ldr r2, [pc, #252] ; (100155b4 ) +100154b6: 681b ldr r3, [r3, #0] +100154b8: 9001 str r0, [sp, #4] +100154ba: 4298 cmp r0, r3 +100154bc: bf88 it hi +100154be: 9301 strhi r3, [sp, #4] +100154c0: 6813 ldr r3, [r2, #0] +100154c2: 4d3d ldr r5, [pc, #244] ; (100155b8 ) +100154c4: f023 0301 bic.w r3, r3, #1 +100154c8: 6013 str r3, [r2, #0] +100154ca: 4b3c ldr r3, [pc, #240] ; (100155bc ) +100154cc: 682a ldr r2, [r5, #0] +100154ce: 681c ldr r4, [r3, #0] +100154d0: 9b01 ldr r3, [sp, #4] +100154d2: 4e3b ldr r6, [pc, #236] ; (100155c0 ) +100154d4: 3b01 subs r3, #1 +100154d6: fb02 4403 mla r4, r2, r3, r4 +100154da: 6833 ldr r3, [r6, #0] +100154dc: 429c cmp r4, r3 +100154de: bf88 it hi +100154e0: 1ae4 subhi r4, r4, r3 +100154e2: b672 cpsid i +100154e4: f3bf 8f4f dsb sy +100154e8: f3bf 8f6f isb sy +100154ec: f001 f922 bl 10016734 +100154f0: 4b30 ldr r3, [pc, #192] ; (100155b4 ) +100154f2: 4932 ldr r1, [pc, #200] ; (100155bc ) +100154f4: 4a33 ldr r2, [pc, #204] ; (100155c4 ) +100154f6: b958 cbnz r0, 10015510 +100154f8: 6809 ldr r1, [r1, #0] +100154fa: 6011 str r1, [r2, #0] +100154fc: 6819 ldr r1, [r3, #0] +100154fe: f041 0101 orr.w r1, r1, #1 +10015502: 6019 str r1, [r3, #0] +10015504: 682b ldr r3, [r5, #0] +10015506: 3b01 subs r3, #1 +10015508: 6013 str r3, [r2, #0] +1001550a: b662 cpsie i +1001550c: b004 add sp, #16 +1001550e: bd70 pop {r4, r5, r6, pc} +10015510: 6014 str r4, [r2, #0] +10015512: 2200 movs r2, #0 +10015514: 600a str r2, [r1, #0] +10015516: 681a ldr r2, [r3, #0] +10015518: a804 add r0, sp, #16 +1001551a: f042 0201 orr.w r2, r2, #1 +1001551e: 601a str r2, [r3, #0] +10015520: 9b01 ldr r3, [sp, #4] +10015522: f840 3d04 str.w r3, [r0, #-4]! +10015526: f003 fcd7 bl 10018ed8 +1001552a: 9b03 ldr r3, [sp, #12] +1001552c: b123 cbz r3, 10015538 +1001552e: f3bf 8f4f dsb sy +10015532: bf30 wfi +10015534: f3bf 8f6f isb sy +10015538: a801 add r0, sp, #4 +1001553a: f003 fd3b bl 10018fb4 +1001553e: 4a1d ldr r2, [pc, #116] ; (100155b4 ) +10015540: 6813 ldr r3, [r2, #0] +10015542: f023 0101 bic.w r1, r3, #1 +10015546: 6011 str r1, [r2, #0] +10015548: b662 cpsie i +1001554a: f413 3f80 tst.w r3, #65536 ; 0x10000 +1001554e: 491b ldr r1, [pc, #108] ; (100155bc ) +10015550: d021 beq.n 10015596 +10015552: 680b ldr r3, [r1, #0] +10015554: 682a ldr r2, [r5, #0] +10015556: 6831 ldr r1, [r6, #0] +10015558: 4413 add r3, r2 +1001555a: 3b01 subs r3, #1 +1001555c: 1b1b subs r3, r3, r4 +1001555e: 428b cmp r3, r1 +10015560: d301 bcc.n 10015566 +10015562: 429a cmp r2, r3 +10015564: d200 bcs.n 10015568 +10015566: 1e53 subs r3, r2, #1 +10015568: 4a16 ldr r2, [pc, #88] ; (100155c4 ) +1001556a: 6013 str r3, [r2, #0] +1001556c: 9801 ldr r0, [sp, #4] +1001556e: 3801 subs r0, #1 +10015570: 2200 movs r2, #0 +10015572: 4b12 ldr r3, [pc, #72] ; (100155bc ) +10015574: 601a str r2, [r3, #0] +10015576: f7ff ff45 bl 10015404 +1001557a: 4a0e ldr r2, [pc, #56] ; (100155b4 ) +1001557c: 6813 ldr r3, [r2, #0] +1001557e: f043 0301 orr.w r3, r3, #1 +10015582: 6013 str r3, [r2, #0] +10015584: f000 fe6a bl 1001625c +10015588: 682b ldr r3, [r5, #0] +1001558a: 4a0e ldr r2, [pc, #56] ; (100155c4 ) +1001558c: 3b01 subs r3, #1 +1001558e: 6013 str r3, [r2, #0] +10015590: f7ff ff48 bl 10015424 +10015594: e7ba b.n 1001550c +10015596: 682b ldr r3, [r5, #0] +10015598: 9a01 ldr r2, [sp, #4] +1001559a: 6809 ldr r1, [r1, #0] +1001559c: 435a muls r2, r3 +1001559e: 1a52 subs r2, r2, r1 +100155a0: fbb2 f0f3 udiv r0, r2, r3 +100155a4: fb00 3303 mla r3, r0, r3, r3 +100155a8: 1a9b subs r3, r3, r2 +100155aa: 4a06 ldr r2, [pc, #24] ; (100155c4 ) +100155ac: 6013 str r3, [r2, #0] +100155ae: e7df b.n 10015570 +100155b0: 1004b3a4 .word 0x1004b3a4 +100155b4: e000e010 .word 0xe000e010 +100155b8: 1004b3a0 .word 0x1004b3a0 +100155bc: e000e018 .word 0xe000e018 +100155c0: 1004b39c .word 0x1004b39c +100155c4: e000e014 .word 0xe000e014 + +100155c8 : +100155c8: 4b0d ldr r3, [pc, #52] ; (10015600 ) +100155ca: 490e ldr r1, [pc, #56] ; (10015604 ) +100155cc: 681a ldr r2, [r3, #0] +100155ce: f44f 737a mov.w r3, #1000 ; 0x3e8 +100155d2: fbb2 f3f3 udiv r3, r2, r3 +100155d6: 600b str r3, [r1, #0] +100155d8: f06f 417f mvn.w r1, #4278190080 ; 0xff000000 +100155dc: fbb1 f1f3 udiv r1, r1, r3 +100155e0: 4809 ldr r0, [pc, #36] ; (10015608 ) +100155e2: fbb2 f2f2 udiv r2, r2, r2 +100155e6: 6001 str r1, [r0, #0] +100155e8: 212d movs r1, #45 ; 0x2d +100155ea: fbb1 f2f2 udiv r2, r1, r2 +100155ee: 4907 ldr r1, [pc, #28] ; (1001560c ) +100155f0: 3b01 subs r3, #1 +100155f2: 600a str r2, [r1, #0] +100155f4: 4a06 ldr r2, [pc, #24] ; (10015610 ) +100155f6: 6013 str r3, [r2, #0] +100155f8: 2207 movs r2, #7 +100155fa: 4b06 ldr r3, [pc, #24] ; (10015614 ) +100155fc: 601a str r2, [r3, #0] +100155fe: 4770 bx lr +10015600: 10044d58 .word 0x10044d58 +10015604: 1004b3a0 .word 0x1004b3a0 +10015608: 1004b3a4 .word 0x1004b3a4 +1001560c: 1004b39c .word 0x1004b39c +10015610: e000e014 .word 0xe000e014 +10015614: e000e010 .word 0xe000e010 + +10015618 : +10015618: b508 push {r3, lr} +1001561a: 4b09 ldr r3, [pc, #36] ; (10015640 ) +1001561c: 681a ldr r2, [r3, #0] +1001561e: f442 0270 orr.w r2, r2, #15728640 ; 0xf00000 +10015622: 601a str r2, [r3, #0] +10015624: 681a ldr r2, [r3, #0] +10015626: f042 4270 orr.w r2, r2, #4026531840 ; 0xf0000000 +1001562a: 601a str r2, [r3, #0] +1001562c: f7ff ffcc bl 100155c8 +10015630: 2200 movs r2, #0 +10015632: 4b04 ldr r3, [pc, #16] ; (10015644 ) +10015634: 601a str r2, [r3, #0] +10015636: f7ff feb1 bl 1001539c +1001563a: f7ff fea5 bl 10015388 +1001563e: bf00 nop +10015640: e000ed20 .word 0xe000ed20 +10015644: 10044f08 .word 0x10044f08 + +10015648 : +10015648: f003 b98e b.w 10018968 + +1001564c : +1001564c: f000 bdf2 b.w 10016234 + +10015650 : +10015650: b510 push {r4, lr} +10015652: 201c movs r0, #28 +10015654: f7ff fd7e bl 10015154 +10015658: 4604 mov r4, r0 +1001565a: b120 cbz r0, 10015666 +1001565c: 2300 movs r3, #0 +1001565e: f840 3b04 str.w r3, [r0], #4 +10015662: f000 f8b1 bl 100157c8 +10015666: 4620 mov r0, r4 +10015668: bd10 pop {r4, pc} + ... + +1001566c : +1001566c: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10015670: 4606 mov r6, r0 +10015672: 460d mov r5, r1 +10015674: 4699 mov r9, r3 +10015676: 4690 mov r8, r2 +10015678: 9f08 ldr r7, [sp, #32] +1001567a: f000 fdd3 bl 10016224 +1001567e: 6834 ldr r4, [r6, #0] +10015680: ea04 0305 and.w r3, r4, r5 +10015684: f1b9 0f00 cmp.w r9, #0 +10015688: d113 bne.n 100156b2 +1001568a: b9a3 cbnz r3, 100156b6 +1001568c: b1d7 cbz r7, 100156c4 +1001568e: f1b8 0f00 cmp.w r8, #0 +10015692: bf0c ite eq +10015694: 2100 moveq r1, #0 +10015696: f04f 7180 movne.w r1, #16777216 ; 0x1000000 +1001569a: f1b9 0f00 cmp.w r9, #0 +1001569e: d001 beq.n 100156a4 +100156a0: f041 6180 orr.w r1, r1, #67108864 ; 0x4000000 +100156a4: 463a mov r2, r7 +100156a6: 4329 orrs r1, r5 +100156a8: 1d30 adds r0, r6, #4 +100156aa: f000 ff79 bl 100165a0 +100156ae: 2400 movs r4, #0 +100156b0: e008 b.n 100156c4 +100156b2: 429d cmp r5, r3 +100156b4: d1ea bne.n 1001568c +100156b6: f1b8 0f00 cmp.w r8, #0 +100156ba: d002 beq.n 100156c2 +100156bc: ea24 0305 bic.w r3, r4, r5 +100156c0: 6033 str r3, [r6, #0] +100156c2: 2700 movs r7, #0 +100156c4: f000 fe58 bl 10016378 +100156c8: b1d7 cbz r7, 10015700 +100156ca: b938 cbnz r0, 100156dc +100156cc: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +100156d0: 4b11 ldr r3, [pc, #68] ; (10015718 ) +100156d2: 601a str r2, [r3, #0] +100156d4: f3bf 8f4f dsb sy +100156d8: f3bf 8f6f isb sy +100156dc: f001 f8d4 bl 10016888 +100156e0: 0183 lsls r3, r0, #6 +100156e2: 4604 mov r4, r0 +100156e4: d40a bmi.n 100156fc +100156e6: f7ff fe8d bl 10015404 +100156ea: 6834 ldr r4, [r6, #0] +100156ec: ea05 0304 and.w r3, r5, r4 +100156f0: f1b9 0f00 cmp.w r9, #0 +100156f4: d107 bne.n 10015706 +100156f6: b943 cbnz r3, 1001570a +100156f8: f7ff fe94 bl 10015424 +100156fc: f024 447f bic.w r4, r4, #4278190080 ; 0xff000000 +10015700: 4620 mov r0, r4 +10015702: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +10015706: 429d cmp r5, r3 +10015708: d1f6 bne.n 100156f8 +1001570a: f1b8 0f00 cmp.w r8, #0 +1001570e: d0f3 beq.n 100156f8 +10015710: ea24 0505 bic.w r5, r4, r5 +10015714: 6035 str r5, [r6, #0] +10015716: e7ef b.n 100156f8 +10015718: e000ed04 .word 0xe000ed04 + +1001571c : +1001571c: b570 push {r4, r5, r6, lr} +1001571e: 4606 mov r6, r0 +10015720: 460c mov r4, r1 +10015722: f7ff fe6f bl 10015404 +10015726: 6835 ldr r5, [r6, #0] +10015728: ea25 0404 bic.w r4, r5, r4 +1001572c: 6034 str r4, [r6, #0] +1001572e: f7ff fe79 bl 10015424 +10015732: 4628 mov r0, r5 +10015734: bd70 pop {r4, r5, r6, pc} + +10015736 : +10015736: b5f8 push {r3, r4, r5, r6, r7, lr} +10015738: 4604 mov r4, r0 +1001573a: 460d mov r5, r1 +1001573c: f100 060c add.w r6, r0, #12 +10015740: f000 fd70 bl 10016224 +10015744: 6823 ldr r3, [r4, #0] +10015746: 6920 ldr r0, [r4, #16] +10015748: 432b orrs r3, r5 +1001574a: 2500 movs r5, #0 +1001574c: 6023 str r3, [r4, #0] +1001574e: 42b0 cmp r0, r6 +10015750: 6821 ldr r1, [r4, #0] +10015752: d106 bne.n 10015762 +10015754: ea21 0105 bic.w r1, r1, r5 +10015758: 6021 str r1, [r4, #0] +1001575a: f000 fe0d bl 10016378 +1001575e: 6820 ldr r0, [r4, #0] +10015760: bdf8 pop {r3, r4, r5, r6, r7, pc} +10015762: e890 0088 ldmia.w r0, {r3, r7} +10015766: f013 6f80 tst.w r3, #67108864 ; 0x4000000 +1001576a: f023 427f bic.w r2, r3, #4278190080 ; 0xff000000 +1001576e: d103 bne.n 10015778 +10015770: 420a tst r2, r1 +10015772: d104 bne.n 1001577e +10015774: 4638 mov r0, r7 +10015776: e7ea b.n 1001574e +10015778: ea32 0e01 bics.w lr, r2, r1 +1001577c: d1fa bne.n 10015774 +1001577e: 01db lsls r3, r3, #7 +10015780: d500 bpl.n 10015784 +10015782: 4315 orrs r5, r2 +10015784: f041 7100 orr.w r1, r1, #33554432 ; 0x2000000 +10015788: f000 ff6e bl 10016668 +1001578c: e7f2 b.n 10015774 + +1001578e : +1001578e: f7ff bfd2 b.w 10015736 + +10015792 : +10015792: b510 push {r4, lr} +10015794: 4604 mov r4, r0 +10015796: f000 fd45 bl 10016224 +1001579a: 6863 ldr r3, [r4, #4] +1001579c: b933 cbnz r3, 100157ac +1001579e: 4620 mov r0, r4 +100157a0: f7ff fd74 bl 1001528c +100157a4: e8bd 4010 ldmia.w sp!, {r4, lr} +100157a8: f000 bde6 b.w 10016378 +100157ac: f04f 7100 mov.w r1, #33554432 ; 0x2000000 +100157b0: 6920 ldr r0, [r4, #16] +100157b2: f000 ff59 bl 10016668 +100157b6: e7f0 b.n 1001579a + +100157b8 : +100157b8: 4613 mov r3, r2 +100157ba: 460a mov r2, r1 +100157bc: 4601 mov r1, r0 +100157be: 4801 ldr r0, [pc, #4] ; (100157c4 ) +100157c0: f001 ba2a b.w 10016c18 +100157c4: 1001578f .word 0x1001578f + +100157c8 : +100157c8: f100 0308 add.w r3, r0, #8 +100157cc: 6043 str r3, [r0, #4] +100157ce: f04f 32ff mov.w r2, #4294967295 +100157d2: 60c3 str r3, [r0, #12] +100157d4: 6103 str r3, [r0, #16] +100157d6: 2300 movs r3, #0 +100157d8: 6082 str r2, [r0, #8] +100157da: 6003 str r3, [r0, #0] +100157dc: 4770 bx lr + +100157de : +100157de: 2300 movs r3, #0 +100157e0: 6103 str r3, [r0, #16] +100157e2: 4770 bx lr + +100157e4 : +100157e4: 6843 ldr r3, [r0, #4] +100157e6: 689a ldr r2, [r3, #8] +100157e8: 604b str r3, [r1, #4] +100157ea: 608a str r2, [r1, #8] +100157ec: 689a ldr r2, [r3, #8] +100157ee: 6051 str r1, [r2, #4] +100157f0: 6099 str r1, [r3, #8] +100157f2: 6803 ldr r3, [r0, #0] +100157f4: 6108 str r0, [r1, #16] +100157f6: 3301 adds r3, #1 +100157f8: 6003 str r3, [r0, #0] +100157fa: 4770 bx lr + +100157fc : +100157fc: 680a ldr r2, [r1, #0] +100157fe: b530 push {r4, r5, lr} +10015800: 1c53 adds r3, r2, #1 +10015802: d10a bne.n 1001581a +10015804: 6903 ldr r3, [r0, #16] +10015806: 685a ldr r2, [r3, #4] +10015808: 604a str r2, [r1, #4] +1001580a: 6091 str r1, [r2, #8] +1001580c: 608b str r3, [r1, #8] +1001580e: 6059 str r1, [r3, #4] +10015810: 6803 ldr r3, [r0, #0] +10015812: 6108 str r0, [r1, #16] +10015814: 3301 adds r3, #1 +10015816: 6003 str r3, [r0, #0] +10015818: bd30 pop {r4, r5, pc} +1001581a: f100 0308 add.w r3, r0, #8 +1001581e: 685c ldr r4, [r3, #4] +10015820: 6825 ldr r5, [r4, #0] +10015822: 42aa cmp r2, r5 +10015824: d3ef bcc.n 10015806 +10015826: 4623 mov r3, r4 +10015828: e7f9 b.n 1001581e + +1001582a : +1001582a: 6841 ldr r1, [r0, #4] +1001582c: 6882 ldr r2, [r0, #8] +1001582e: 6903 ldr r3, [r0, #16] +10015830: 608a str r2, [r1, #8] +10015832: 6882 ldr r2, [r0, #8] +10015834: 6051 str r1, [r2, #4] +10015836: 6859 ldr r1, [r3, #4] +10015838: 4288 cmp r0, r1 +1001583a: bf08 it eq +1001583c: 605a streq r2, [r3, #4] +1001583e: 2200 movs r2, #0 +10015840: 6102 str r2, [r0, #16] +10015842: 6818 ldr r0, [r3, #0] +10015844: 3801 subs r0, #1 +10015846: 6018 str r0, [r3, #0] +10015848: 4770 bx lr + +1001584a : +1001584a: b570 push {r4, r5, r6, lr} +1001584c: 4615 mov r5, r2 +1001584e: 6c02 ldr r2, [r0, #64] ; 0x40 +10015850: 4604 mov r4, r0 +10015852: 6b86 ldr r6, [r0, #56] ; 0x38 +10015854: b942 cbnz r2, 10015868 +10015856: 6805 ldr r5, [r0, #0] +10015858: b99d cbnz r5, 10015882 +1001585a: 6840 ldr r0, [r0, #4] +1001585c: f000 ffdc bl 10016818 +10015860: 6065 str r5, [r4, #4] +10015862: 3601 adds r6, #1 +10015864: 63a6 str r6, [r4, #56] ; 0x38 +10015866: bd70 pop {r4, r5, r6, pc} +10015868: b96d cbnz r5, 10015886 +1001586a: 6880 ldr r0, [r0, #8] +1001586c: f005 f9b0 bl 1001abd0 +10015870: 68a3 ldr r3, [r4, #8] +10015872: 6c22 ldr r2, [r4, #64] ; 0x40 +10015874: 4413 add r3, r2 +10015876: 6862 ldr r2, [r4, #4] +10015878: 60a3 str r3, [r4, #8] +1001587a: 4293 cmp r3, r2 +1001587c: d301 bcc.n 10015882 +1001587e: 6823 ldr r3, [r4, #0] +10015880: 60a3 str r3, [r4, #8] +10015882: 2000 movs r0, #0 +10015884: e7ed b.n 10015862 +10015886: 68c0 ldr r0, [r0, #12] +10015888: f005 f9a2 bl 1001abd0 +1001588c: 6c23 ldr r3, [r4, #64] ; 0x40 +1001588e: 68e2 ldr r2, [r4, #12] +10015890: 425b negs r3, r3 +10015892: 6821 ldr r1, [r4, #0] +10015894: 441a add r2, r3 +10015896: 428a cmp r2, r1 +10015898: 60e2 str r2, [r4, #12] +1001589a: bf3e ittt cc +1001589c: 6862 ldrcc r2, [r4, #4] +1001589e: 189b addcc r3, r3, r2 +100158a0: 60e3 strcc r3, [r4, #12] +100158a2: 2d02 cmp r5, #2 +100158a4: d1ed bne.n 10015882 +100158a6: b10e cbz r6, 100158ac +100158a8: 3e01 subs r6, #1 +100158aa: e7ea b.n 10015882 +100158ac: 4630 mov r0, r6 +100158ae: e7d8 b.n 10015862 + +100158b0 : +100158b0: 4603 mov r3, r0 +100158b2: 6c1a ldr r2, [r3, #64] ; 0x40 +100158b4: b410 push {r4} +100158b6: 4608 mov r0, r1 +100158b8: b162 cbz r2, 100158d4 +100158ba: 68d9 ldr r1, [r3, #12] +100158bc: 685c ldr r4, [r3, #4] +100158be: 4411 add r1, r2 +100158c0: 42a1 cmp r1, r4 +100158c2: 60d9 str r1, [r3, #12] +100158c4: bf28 it cs +100158c6: 6819 ldrcs r1, [r3, #0] +100158c8: bc10 pop {r4} +100158ca: bf28 it cs +100158cc: 60d9 strcs r1, [r3, #12] +100158ce: 68d9 ldr r1, [r3, #12] +100158d0: f005 b97e b.w 1001abd0 +100158d4: bc10 pop {r4} +100158d6: 4770 bx lr + +100158d8 : +100158d8: b570 push {r4, r5, r6, lr} +100158da: 4604 mov r4, r0 +100158dc: f7ff fd92 bl 10015404 +100158e0: f894 5045 ldrb.w r5, [r4, #69] ; 0x45 +100158e4: f104 0624 add.w r6, r4, #36 ; 0x24 +100158e8: b26d sxtb r5, r5 +100158ea: 2d00 cmp r5, #0 +100158ec: dc14 bgt.n 10015918 +100158ee: 23ff movs r3, #255 ; 0xff +100158f0: f884 3045 strb.w r3, [r4, #69] ; 0x45 +100158f4: f7ff fd96 bl 10015424 +100158f8: f7ff fd84 bl 10015404 +100158fc: f894 5044 ldrb.w r5, [r4, #68] ; 0x44 +10015900: f104 0610 add.w r6, r4, #16 +10015904: b26d sxtb r5, r5 +10015906: 2d00 cmp r5, #0 +10015908: dc12 bgt.n 10015930 +1001590a: 23ff movs r3, #255 ; 0xff +1001590c: f884 3044 strb.w r3, [r4, #68] ; 0x44 +10015910: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10015914: f7ff bd86 b.w 10015424 +10015918: 6a63 ldr r3, [r4, #36] ; 0x24 +1001591a: 2b00 cmp r3, #0 +1001591c: d0e7 beq.n 100158ee +1001591e: 4630 mov r0, r6 +10015920: f000 fe68 bl 100165f4 +10015924: b108 cbz r0, 1001592a +10015926: f000 feff bl 10016728 +1001592a: 3d01 subs r5, #1 +1001592c: b26d sxtb r5, r5 +1001592e: e7dc b.n 100158ea +10015930: 6923 ldr r3, [r4, #16] +10015932: 2b00 cmp r3, #0 +10015934: d0e9 beq.n 1001590a +10015936: 4630 mov r0, r6 +10015938: f000 fe5c bl 100165f4 +1001593c: b108 cbz r0, 10015942 +1001593e: f000 fef3 bl 10016728 +10015942: 3d01 subs r5, #1 +10015944: b26d sxtb r5, r5 +10015946: e7de b.n 10015906 + +10015948 : +10015948: b538 push {r3, r4, r5, lr} +1001594a: 4604 mov r4, r0 +1001594c: 460d mov r5, r1 +1001594e: f7ff fd59 bl 10015404 +10015952: 6c20 ldr r0, [r4, #64] ; 0x40 +10015954: 6be3 ldr r3, [r4, #60] ; 0x3c +10015956: 6822 ldr r2, [r4, #0] +10015958: 4343 muls r3, r0 +1001595a: 18d1 adds r1, r2, r3 +1001595c: 1a1b subs r3, r3, r0 +1001595e: 4413 add r3, r2 +10015960: 6061 str r1, [r4, #4] +10015962: 60e3 str r3, [r4, #12] +10015964: 2100 movs r1, #0 +10015966: 23ff movs r3, #255 ; 0xff +10015968: 63a1 str r1, [r4, #56] ; 0x38 +1001596a: 60a2 str r2, [r4, #8] +1001596c: f884 3044 strb.w r3, [r4, #68] ; 0x44 +10015970: f884 3045 strb.w r3, [r4, #69] ; 0x45 +10015974: b995 cbnz r5, 1001599c +10015976: 6923 ldr r3, [r4, #16] +10015978: b163 cbz r3, 10015994 +1001597a: f104 0010 add.w r0, r4, #16 +1001597e: f000 fe39 bl 100165f4 +10015982: b138 cbz r0, 10015994 +10015984: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +10015988: 4b09 ldr r3, [pc, #36] ; (100159b0 ) +1001598a: 601a str r2, [r3, #0] +1001598c: f3bf 8f4f dsb sy +10015990: f3bf 8f6f isb sy +10015994: f7ff fd46 bl 10015424 +10015998: 2001 movs r0, #1 +1001599a: bd38 pop {r3, r4, r5, pc} +1001599c: f104 0010 add.w r0, r4, #16 +100159a0: f7ff ff12 bl 100157c8 +100159a4: f104 0024 add.w r0, r4, #36 ; 0x24 +100159a8: f7ff ff0e bl 100157c8 +100159ac: e7f2 b.n 10015994 +100159ae: bf00 nop +100159b0: e000ed04 .word 0xe000ed04 + +100159b4 : +100159b4: b5f8 push {r3, r4, r5, r6, r7, lr} +100159b6: 4606 mov r6, r0 +100159b8: 4348 muls r0, r1 +100159ba: 3050 adds r0, #80 ; 0x50 +100159bc: 460d mov r5, r1 +100159be: 4617 mov r7, r2 +100159c0: f7ff fbc8 bl 10015154 +100159c4: 4604 mov r4, r0 +100159c6: b148 cbz r0, 100159dc +100159c8: b955 cbnz r5, 100159e0 +100159ca: 6020 str r0, [r4, #0] +100159cc: 63e6 str r6, [r4, #60] ; 0x3c +100159ce: 6425 str r5, [r4, #64] ; 0x40 +100159d0: 2101 movs r1, #1 +100159d2: 4620 mov r0, r4 +100159d4: f7ff ffb8 bl 10015948 +100159d8: f884 704c strb.w r7, [r4, #76] ; 0x4c +100159dc: 4620 mov r0, r4 +100159de: bdf8 pop {r3, r4, r5, r6, r7, pc} +100159e0: f100 0350 add.w r3, r0, #80 ; 0x50 +100159e4: 6003 str r3, [r0, #0] +100159e6: e7f1 b.n 100159cc + +100159e8 : +100159e8: b510 push {r4, lr} +100159ea: 2202 movs r2, #2 +100159ec: 460c mov r4, r1 +100159ee: 2100 movs r1, #0 +100159f0: f7ff ffe0 bl 100159b4 +100159f4: b100 cbz r0, 100159f8 +100159f6: 6384 str r4, [r0, #56] ; 0x38 +100159f8: bd10 pop {r4, pc} + ... + +100159fc : +100159fc: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} +10015a00: 2600 movs r6, #0 +10015a02: 4604 mov r4, r0 +10015a04: 4689 mov r9, r1 +10015a06: 461f mov r7, r3 +10015a08: 46b0 mov r8, r6 +10015a0a: f8df a0e0 ldr.w sl, [pc, #224] ; 10015aec +10015a0e: 9201 str r2, [sp, #4] +10015a10: f7ff fcf8 bl 10015404 +10015a14: 6ba2 ldr r2, [r4, #56] ; 0x38 +10015a16: 6be3 ldr r3, [r4, #60] ; 0x3c +10015a18: 429a cmp r2, r3 +10015a1a: d301 bcc.n 10015a20 +10015a1c: 2f02 cmp r7, #2 +10015a1e: d119 bne.n 10015a54 +10015a20: 463a mov r2, r7 +10015a22: 4649 mov r1, r9 +10015a24: 4620 mov r0, r4 +10015a26: f7ff ff10 bl 1001584a +10015a2a: 6a63 ldr r3, [r4, #36] ; 0x24 +10015a2c: b11b cbz r3, 10015a36 +10015a2e: f104 0024 add.w r0, r4, #36 ; 0x24 +10015a32: f000 fddf bl 100165f4 +10015a36: b138 cbz r0, 10015a48 +10015a38: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +10015a3c: 4b2b ldr r3, [pc, #172] ; (10015aec ) +10015a3e: 601a str r2, [r3, #0] +10015a40: f3bf 8f4f dsb sy +10015a44: f3bf 8f6f isb sy +10015a48: f7ff fcec bl 10015424 +10015a4c: 2001 movs r0, #1 +10015a4e: b004 add sp, #16 +10015a50: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10015a54: 9d01 ldr r5, [sp, #4] +10015a56: b91d cbnz r5, 10015a60 +10015a58: f7ff fce4 bl 10015424 +10015a5c: 2000 movs r0, #0 +10015a5e: e7f6 b.n 10015a4e +10015a60: b916 cbnz r6, 10015a68 +10015a62: a802 add r0, sp, #8 +10015a64: f000 fe2e bl 100166c4 +10015a68: f7ff fcdc bl 10015424 +10015a6c: f000 fbda bl 10016224 +10015a70: f7ff fcc8 bl 10015404 +10015a74: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 +10015a78: 2bff cmp r3, #255 ; 0xff +10015a7a: bf08 it eq +10015a7c: f884 8044 strbeq.w r8, [r4, #68] ; 0x44 +10015a80: f894 3045 ldrb.w r3, [r4, #69] ; 0x45 +10015a84: 2bff cmp r3, #255 ; 0xff +10015a86: bf08 it eq +10015a88: f884 8045 strbeq.w r8, [r4, #69] ; 0x45 +10015a8c: f7ff fcca bl 10015424 +10015a90: a901 add r1, sp, #4 +10015a92: a802 add r0, sp, #8 +10015a94: f000 fe22 bl 100166dc +10015a98: bb10 cbnz r0, 10015ae0 +10015a9a: f7ff fcb3 bl 10015404 +10015a9e: 6ba6 ldr r6, [r4, #56] ; 0x38 +10015aa0: 6be5 ldr r5, [r4, #60] ; 0x3c +10015aa2: f7ff fcbf bl 10015424 +10015aa6: 42ae cmp r6, r5 +10015aa8: d114 bne.n 10015ad4 +10015aaa: 9901 ldr r1, [sp, #4] +10015aac: f104 0010 add.w r0, r4, #16 +10015ab0: f000 fd66 bl 10016580 +10015ab4: 4620 mov r0, r4 +10015ab6: f7ff ff0f bl 100158d8 +10015aba: f000 fc5d bl 10016378 +10015abe: b938 cbnz r0, 10015ad0 +10015ac0: f04f 5380 mov.w r3, #268435456 ; 0x10000000 +10015ac4: f8ca 3000 str.w r3, [sl] +10015ac8: f3bf 8f4f dsb sy +10015acc: f3bf 8f6f isb sy +10015ad0: 2601 movs r6, #1 +10015ad2: e79d b.n 10015a10 +10015ad4: 4620 mov r0, r4 +10015ad6: f7ff feff bl 100158d8 +10015ada: f000 fc4d bl 10016378 +10015ade: e7f7 b.n 10015ad0 +10015ae0: 4620 mov r0, r4 +10015ae2: f7ff fef9 bl 100158d8 +10015ae6: f000 fc47 bl 10016378 +10015aea: e7b7 b.n 10015a5c +10015aec: e000ed04 .word 0xe000ed04 + +10015af0 : +10015af0: b510 push {r4, lr} +10015af2: 4602 mov r2, r0 +10015af4: 2100 movs r1, #0 +10015af6: 2001 movs r0, #1 +10015af8: f7ff ff5c bl 100159b4 +10015afc: 4604 mov r4, r0 +10015afe: b138 cbz r0, 10015b10 +10015b00: 2300 movs r3, #0 +10015b02: 6043 str r3, [r0, #4] +10015b04: 6003 str r3, [r0, #0] +10015b06: 60c3 str r3, [r0, #12] +10015b08: 461a mov r2, r3 +10015b0a: 4619 mov r1, r3 +10015b0c: f7ff ff76 bl 100159fc +10015b10: 4620 mov r0, r4 +10015b12: bd10 pop {r4, pc} + +10015b14 : +10015b14: b5f8 push {r3, r4, r5, r6, r7, lr} +10015b16: 4605 mov r5, r0 +10015b18: 4617 mov r7, r2 +10015b1a: f3ef 8611 mrs r6, BASEPRI +10015b1e: f04f 0250 mov.w r2, #80 ; 0x50 +10015b22: f382 8811 msr BASEPRI, r2 +10015b26: f3bf 8f6f isb sy +10015b2a: f3bf 8f4f dsb sy +10015b2e: 6b80 ldr r0, [r0, #56] ; 0x38 +10015b30: 6bea ldr r2, [r5, #60] ; 0x3c +10015b32: 4290 cmp r0, r2 +10015b34: d301 bcc.n 10015b3a +10015b36: 2b02 cmp r3, #2 +10015b38: d11e bne.n 10015b78 +10015b3a: f895 4045 ldrb.w r4, [r5, #69] ; 0x45 +10015b3e: 461a mov r2, r3 +10015b40: b264 sxtb r4, r4 +10015b42: 4628 mov r0, r5 +10015b44: f7ff fe81 bl 1001584a +10015b48: 1c63 adds r3, r4, #1 +10015b4a: d110 bne.n 10015b6e +10015b4c: 6a6b ldr r3, [r5, #36] ; 0x24 +10015b4e: b90b cbnz r3, 10015b54 +10015b50: 2001 movs r0, #1 +10015b52: e009 b.n 10015b68 +10015b54: f105 0024 add.w r0, r5, #36 ; 0x24 +10015b58: f000 fd4c bl 100165f4 +10015b5c: 2800 cmp r0, #0 +10015b5e: d0f7 beq.n 10015b50 +10015b60: 2f00 cmp r7, #0 +10015b62: d0f5 beq.n 10015b50 +10015b64: 2001 movs r0, #1 +10015b66: 6038 str r0, [r7, #0] +10015b68: f386 8811 msr BASEPRI, r6 +10015b6c: bdf8 pop {r3, r4, r5, r6, r7, pc} +10015b6e: 3401 adds r4, #1 +10015b70: b264 sxtb r4, r4 +10015b72: f885 4045 strb.w r4, [r5, #69] ; 0x45 +10015b76: e7eb b.n 10015b50 +10015b78: 2000 movs r0, #0 +10015b7a: e7f5 b.n 10015b68 + +10015b7c : +10015b7c: b538 push {r3, r4, r5, lr} +10015b7e: 460c mov r4, r1 +10015b80: f3ef 8511 mrs r5, BASEPRI +10015b84: f04f 0350 mov.w r3, #80 ; 0x50 +10015b88: f383 8811 msr BASEPRI, r3 +10015b8c: f3bf 8f6f isb sy +10015b90: f3bf 8f4f dsb sy +10015b94: 6b82 ldr r2, [r0, #56] ; 0x38 +10015b96: 6bc3 ldr r3, [r0, #60] ; 0x3c +10015b98: 429a cmp r2, r3 +10015b9a: d21b bcs.n 10015bd4 +10015b9c: f890 3045 ldrb.w r3, [r0, #69] ; 0x45 +10015ba0: 3201 adds r2, #1 +10015ba2: b25b sxtb r3, r3 +10015ba4: 6382 str r2, [r0, #56] ; 0x38 +10015ba6: 1c5a adds r2, r3, #1 +10015ba8: d10f bne.n 10015bca +10015baa: 6a43 ldr r3, [r0, #36] ; 0x24 +10015bac: b90b cbnz r3, 10015bb2 +10015bae: 2001 movs r0, #1 +10015bb0: e008 b.n 10015bc4 +10015bb2: 3024 adds r0, #36 ; 0x24 +10015bb4: f000 fd1e bl 100165f4 +10015bb8: 2800 cmp r0, #0 +10015bba: d0f8 beq.n 10015bae +10015bbc: 2c00 cmp r4, #0 +10015bbe: d0f6 beq.n 10015bae +10015bc0: 2001 movs r0, #1 +10015bc2: 6020 str r0, [r4, #0] +10015bc4: f385 8811 msr BASEPRI, r5 +10015bc8: bd38 pop {r3, r4, r5, pc} +10015bca: 3301 adds r3, #1 +10015bcc: b25b sxtb r3, r3 +10015bce: f880 3045 strb.w r3, [r0, #69] ; 0x45 +10015bd2: e7ec b.n 10015bae +10015bd4: 2000 movs r0, #0 +10015bd6: e7f5 b.n 10015bc4 + +10015bd8 : +10015bd8: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} +10015bdc: f04f 0a00 mov.w sl, #0 +10015be0: 4604 mov r4, r0 +10015be2: 460f mov r7, r1 +10015be4: 4698 mov r8, r3 +10015be6: 4656 mov r6, sl +10015be8: f8df 911c ldr.w r9, [pc, #284] ; 10015d08 +10015bec: 9201 str r2, [sp, #4] +10015bee: f7ff fc09 bl 10015404 +10015bf2: 6ba5 ldr r5, [r4, #56] ; 0x38 +10015bf4: b355 cbz r5, 10015c4c +10015bf6: 4639 mov r1, r7 +10015bf8: 4620 mov r0, r4 +10015bfa: 68e6 ldr r6, [r4, #12] +10015bfc: f7ff fe58 bl 100158b0 +10015c00: f1b8 0f00 cmp.w r8, #0 +10015c04: d11b bne.n 10015c3e +10015c06: 6823 ldr r3, [r4, #0] +10015c08: 3d01 subs r5, #1 +10015c0a: 63a5 str r5, [r4, #56] ; 0x38 +10015c0c: b913 cbnz r3, 10015c14 +10015c0e: f000 fe47 bl 100168a0 +10015c12: 6060 str r0, [r4, #4] +10015c14: 6923 ldr r3, [r4, #16] +10015c16: b163 cbz r3, 10015c32 +10015c18: f104 0010 add.w r0, r4, #16 +10015c1c: f000 fcea bl 100165f4 +10015c20: b138 cbz r0, 10015c32 +10015c22: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +10015c26: 4b38 ldr r3, [pc, #224] ; (10015d08 ) +10015c28: 601a str r2, [r3, #0] +10015c2a: f3bf 8f4f dsb sy +10015c2e: f3bf 8f6f isb sy +10015c32: f7ff fbf7 bl 10015424 +10015c36: 2001 movs r0, #1 +10015c38: b004 add sp, #16 +10015c3a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10015c3e: 6a63 ldr r3, [r4, #36] ; 0x24 +10015c40: 60e6 str r6, [r4, #12] +10015c42: 2b00 cmp r3, #0 +10015c44: d0f5 beq.n 10015c32 +10015c46: f104 0024 add.w r0, r4, #36 ; 0x24 +10015c4a: e7e7 b.n 10015c1c +10015c4c: 9d01 ldr r5, [sp, #4] +10015c4e: b91d cbnz r5, 10015c58 +10015c50: f7ff fbe8 bl 10015424 +10015c54: 4628 mov r0, r5 +10015c56: e7ef b.n 10015c38 +10015c58: f1ba 0f00 cmp.w sl, #0 +10015c5c: d102 bne.n 10015c64 +10015c5e: a802 add r0, sp, #8 +10015c60: f000 fd30 bl 100166c4 +10015c64: f7ff fbde bl 10015424 +10015c68: f000 fadc bl 10016224 +10015c6c: f7ff fbca bl 10015404 +10015c70: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 +10015c74: 2bff cmp r3, #255 ; 0xff +10015c76: bf08 it eq +10015c78: f884 6044 strbeq.w r6, [r4, #68] ; 0x44 +10015c7c: f894 3045 ldrb.w r3, [r4, #69] ; 0x45 +10015c80: 2bff cmp r3, #255 ; 0xff +10015c82: bf08 it eq +10015c84: f884 6045 strbeq.w r6, [r4, #69] ; 0x45 +10015c88: f7ff fbcc bl 10015424 +10015c8c: a901 add r1, sp, #4 +10015c8e: a802 add r0, sp, #8 +10015c90: f000 fd24 bl 100166dc +10015c94: bb50 cbnz r0, 10015cec +10015c96: f7ff fbb5 bl 10015404 +10015c9a: 6ba5 ldr r5, [r4, #56] ; 0x38 +10015c9c: f7ff fbc2 bl 10015424 +10015ca0: b9f5 cbnz r5, 10015ce0 +10015ca2: 6823 ldr r3, [r4, #0] +10015ca4: b933 cbnz r3, 10015cb4 +10015ca6: f7ff fbad bl 10015404 +10015caa: 6860 ldr r0, [r4, #4] +10015cac: f000 fd6c bl 10016788 +10015cb0: f7ff fbb8 bl 10015424 +10015cb4: 9901 ldr r1, [sp, #4] +10015cb6: f104 0024 add.w r0, r4, #36 ; 0x24 +10015cba: f000 fc61 bl 10016580 +10015cbe: 4620 mov r0, r4 +10015cc0: f7ff fe0a bl 100158d8 +10015cc4: f000 fb58 bl 10016378 +10015cc8: b938 cbnz r0, 10015cda +10015cca: f04f 5380 mov.w r3, #268435456 ; 0x10000000 +10015cce: f8c9 3000 str.w r3, [r9] +10015cd2: f3bf 8f4f dsb sy +10015cd6: f3bf 8f6f isb sy +10015cda: f04f 0a01 mov.w sl, #1 +10015cde: e786 b.n 10015bee +10015ce0: 4620 mov r0, r4 +10015ce2: f7ff fdf9 bl 100158d8 +10015ce6: f000 fb47 bl 10016378 +10015cea: e7f6 b.n 10015cda +10015cec: 4620 mov r0, r4 +10015cee: f7ff fdf3 bl 100158d8 +10015cf2: f000 fb41 bl 10016378 +10015cf6: f7ff fb85 bl 10015404 +10015cfa: 6ba5 ldr r5, [r4, #56] ; 0x38 +10015cfc: f7ff fb92 bl 10015424 +10015d00: 2d00 cmp r5, #0 +10015d02: d1ea bne.n 10015cda +10015d04: e7a6 b.n 10015c54 +10015d06: bf00 nop +10015d08: e000ed04 .word 0xe000ed04 + +10015d0c : +10015d0c: b510 push {r4, lr} +10015d0e: 4604 mov r4, r0 +10015d10: f7ff fb78 bl 10015404 +10015d14: 6ba4 ldr r4, [r4, #56] ; 0x38 +10015d16: f7ff fb85 bl 10015424 +10015d1a: 4620 mov r0, r4 +10015d1c: bd10 pop {r4, pc} + +10015d1e : +10015d1e: f7ff bab5 b.w 1001528c + +10015d22 : +10015d22: b570 push {r4, r5, r6, lr} +10015d24: 4604 mov r4, r0 +10015d26: 460d mov r5, r1 +10015d28: 4616 mov r6, r2 +10015d2a: f7ff fb6b bl 10015404 +10015d2e: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 +10015d32: 2bff cmp r3, #255 ; 0xff +10015d34: bf04 itt eq +10015d36: 2300 moveq r3, #0 +10015d38: f884 3044 strbeq.w r3, [r4, #68] ; 0x44 +10015d3c: f894 3045 ldrb.w r3, [r4, #69] ; 0x45 +10015d40: 2bff cmp r3, #255 ; 0xff +10015d42: bf04 itt eq +10015d44: 2300 moveq r3, #0 +10015d46: f884 3045 strbeq.w r3, [r4, #69] ; 0x45 +10015d4a: f7ff fb6b bl 10015424 +10015d4e: 6ba3 ldr r3, [r4, #56] ; 0x38 +10015d50: b92b cbnz r3, 10015d5e +10015d52: 4632 mov r2, r6 +10015d54: 4629 mov r1, r5 +10015d56: f104 0024 add.w r0, r4, #36 ; 0x24 +10015d5a: f000 fc35 bl 100165c8 +10015d5e: 4620 mov r0, r4 +10015d60: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10015d64: f7ff bdb8 b.w 100158d8 + +10015d68 : +10015d68: 4b09 ldr r3, [pc, #36] ; (10015d90 ) +10015d6a: 4a0a ldr r2, [pc, #40] ; (10015d94 ) +10015d6c: 681b ldr r3, [r3, #0] +10015d6e: 6812 ldr r2, [r2, #0] +10015d70: 6ad0 ldr r0, [r2, #44] ; 0x2c +10015d72: b958 cbnz r0, 10015d8c +10015d74: 4a08 ldr r2, [pc, #32] ; (10015d98 ) +10015d76: 6812 ldr r2, [r2, #0] +10015d78: 2a01 cmp r2, #1 +10015d7a: d808 bhi.n 10015d8e +10015d7c: 2b01 cmp r3, #1 +10015d7e: d806 bhi.n 10015d8e +10015d80: 4b06 ldr r3, [pc, #24] ; (10015d9c ) +10015d82: 6818 ldr r0, [r3, #0] +10015d84: 4b06 ldr r3, [pc, #24] ; (10015da0 ) +10015d86: 681b ldr r3, [r3, #0] +10015d88: 1ac0 subs r0, r0, r3 +10015d8a: 4770 bx lr +10015d8c: 2000 movs r0, #0 +10015d8e: 4770 bx lr +10015d90: 1004b4a8 .word 0x1004b4a8 +10015d94: 1004b3a8 .word 0x1004b3a8 +10015d98: 1004b3b4 .word 0x1004b3b4 +10015d9c: 1004b4d8 .word 0x1004b4d8 +10015da0: 1004b520 .word 0x1004b520 + +10015da4 : +10015da4: 4a06 ldr r2, [pc, #24] ; (10015dc0 ) +10015da6: 6813 ldr r3, [r2, #0] +10015da8: 6819 ldr r1, [r3, #0] +10015daa: 4b06 ldr r3, [pc, #24] ; (10015dc4 ) +10015dac: b919 cbnz r1, 10015db6 +10015dae: f04f 32ff mov.w r2, #4294967295 +10015db2: 601a str r2, [r3, #0] +10015db4: 4770 bx lr +10015db6: 6812 ldr r2, [r2, #0] +10015db8: 68d2 ldr r2, [r2, #12] +10015dba: 68d2 ldr r2, [r2, #12] +10015dbc: 6852 ldr r2, [r2, #4] +10015dbe: e7f8 b.n 10015db2 +10015dc0: 1004b3ac .word 0x1004b3ac +10015dc4: 1004b4d8 .word 0x1004b4d8 + +10015dc8 : +10015dc8: b5f8 push {r3, r4, r5, r6, r7, lr} +10015dca: 4b1b ldr r3, [pc, #108] ; (10015e38 ) +10015dcc: 4e1b ldr r6, [pc, #108] ; (10015e3c ) +10015dce: 681d ldr r5, [r3, #0] +10015dd0: 4604 mov r4, r0 +10015dd2: 6830 ldr r0, [r6, #0] +10015dd4: 460f mov r7, r1 +10015dd6: 3004 adds r0, #4 +10015dd8: f7ff fd27 bl 1001582a +10015ddc: 4633 mov r3, r6 +10015dde: b940 cbnz r0, 10015df2 +10015de0: 2001 movs r0, #1 +10015de2: 6831 ldr r1, [r6, #0] +10015de4: 4e16 ldr r6, [pc, #88] ; (10015e40 ) +10015de6: 6ac9 ldr r1, [r1, #44] ; 0x2c +10015de8: 6832 ldr r2, [r6, #0] +10015dea: 4088 lsls r0, r1 +10015dec: ea22 0200 bic.w r2, r2, r0 +10015df0: 6032 str r2, [r6, #0] +10015df2: 1c62 adds r2, r4, #1 +10015df4: d107 bne.n 10015e06 +10015df6: b137 cbz r7, 10015e06 +10015df8: 6819 ldr r1, [r3, #0] +10015dfa: 4812 ldr r0, [pc, #72] ; (10015e44 ) +10015dfc: 3104 adds r1, #4 +10015dfe: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +10015e02: f7ff bcef b.w 100157e4 +10015e06: 442c add r4, r5 +10015e08: 681a ldr r2, [r3, #0] +10015e0a: 42a5 cmp r5, r4 +10015e0c: 6054 str r4, [r2, #4] +10015e0e: d907 bls.n 10015e20 +10015e10: 4a0d ldr r2, [pc, #52] ; (10015e48 ) +10015e12: 6810 ldr r0, [r2, #0] +10015e14: 6819 ldr r1, [r3, #0] +10015e16: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +10015e1a: 3104 adds r1, #4 +10015e1c: f7ff bcee b.w 100157fc +10015e20: 4a0a ldr r2, [pc, #40] ; (10015e4c ) +10015e22: 6810 ldr r0, [r2, #0] +10015e24: 6819 ldr r1, [r3, #0] +10015e26: 3104 adds r1, #4 +10015e28: f7ff fce8 bl 100157fc +10015e2c: 4b08 ldr r3, [pc, #32] ; (10015e50 ) +10015e2e: 681a ldr r2, [r3, #0] +10015e30: 4294 cmp r4, r2 +10015e32: bf38 it cc +10015e34: 601c strcc r4, [r3, #0] +10015e36: bdf8 pop {r3, r4, r5, r6, r7, pc} +10015e38: 1004b520 .word 0x1004b520 +10015e3c: 1004b3a8 .word 0x1004b3a8 +10015e40: 1004b4a8 .word 0x1004b4a8 +10015e44: 1004b4f8 .word 0x1004b4f8 +10015e48: 1004b3b0 .word 0x1004b3b0 +10015e4c: 1004b3ac .word 0x1004b3ac +10015e50: 1004b4d8 .word 0x1004b4d8 + +10015e54 : +10015e54: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10015e58: 9d0c ldr r5, [sp, #48] ; 0x30 +10015e5a: 4680 mov r8, r0 +10015e5c: 460f mov r7, r1 +10015e5e: 4692 mov sl, r2 +10015e60: 4699 mov r9, r3 +10015e62: 9e0b ldr r6, [sp, #44] ; 0x2c +10015e64: b965 cbnz r5, 10015e80 +10015e66: 0094 lsls r4, r2, #2 +10015e68: 4620 mov r0, r4 +10015e6a: f001 fdcb bl 10017a04 +10015e6e: 4605 mov r5, r0 +10015e70: b930 cbnz r0, 10015e80 +10015e72: 4620 mov r0, r4 +10015e74: f7ff f96e bl 10015154 +10015e78: 4605 mov r5, r0 +10015e7a: 2800 cmp r0, #0 +10015e7c: f000 80a2 beq.w 10015fc4 +10015e80: 205c movs r0, #92 ; 0x5c +10015e82: f7ff f967 bl 10015154 +10015e86: 4604 mov r4, r0 +10015e88: 2800 cmp r0, #0 +10015e8a: f000 8098 beq.w 10015fbe +10015e8e: ea4f 0a8a mov.w sl, sl, lsl #2 +10015e92: 4652 mov r2, sl +10015e94: 6305 str r5, [r0, #48] ; 0x30 +10015e96: 21a5 movs r1, #165 ; 0xa5 +10015e98: 4628 mov r0, r5 +10015e9a: f004 fe9d bl 1001abd8 +10015e9e: 6b23 ldr r3, [r4, #48] ; 0x30 +10015ea0: f1aa 0a04 sub.w sl, sl, #4 +10015ea4: 449a add sl, r3 +10015ea6: f02a 0a07 bic.w sl, sl, #7 +10015eaa: 1e7b subs r3, r7, #1 +10015eac: f104 0234 add.w r2, r4, #52 ; 0x34 +10015eb0: 3709 adds r7, #9 +10015eb2: f993 1001 ldrsb.w r1, [r3, #1] +10015eb6: f802 1b01 strb.w r1, [r2], #1 +10015eba: f913 1f01 ldrsb.w r1, [r3, #1]! +10015ebe: b109 cbz r1, 10015ec4 +10015ec0: 429f cmp r7, r3 +10015ec2: d1f6 bne.n 10015eb2 +10015ec4: 9d0a ldr r5, [sp, #40] ; 0x28 +10015ec6: f04f 0b00 mov.w fp, #0 +10015eca: 2d0a cmp r5, #10 +10015ecc: bf28 it cs +10015ece: 250a movcs r5, #10 +10015ed0: 1d27 adds r7, r4, #4 +10015ed2: 62e5 str r5, [r4, #44] ; 0x2c +10015ed4: 64a5 str r5, [r4, #72] ; 0x48 +10015ed6: 4638 mov r0, r7 +10015ed8: f884 b03d strb.w fp, [r4, #61] ; 0x3d +10015edc: f8c4 b04c str.w fp, [r4, #76] ; 0x4c +10015ee0: f7ff fc7d bl 100157de +10015ee4: f1c5 050b rsb r5, r5, #11 +10015ee8: f104 0018 add.w r0, r4, #24 +10015eec: f7ff fc77 bl 100157de +10015ef0: f8c4 b054 str.w fp, [r4, #84] ; 0x54 +10015ef4: 6124 str r4, [r4, #16] +10015ef6: 61a5 str r5, [r4, #24] +10015ef8: 6264 str r4, [r4, #36] ; 0x24 +10015efa: f8c4 b050 str.w fp, [r4, #80] ; 0x50 +10015efe: f884 b058 strb.w fp, [r4, #88] ; 0x58 +10015f02: 464a mov r2, r9 +10015f04: 4641 mov r1, r8 +10015f06: 4650 mov r0, sl +10015f08: f7ff fa58 bl 100153bc +10015f0c: 6020 str r0, [r4, #0] +10015f0e: b106 cbz r6, 10015f12 +10015f10: 6034 str r4, [r6, #0] +10015f12: f7ff fa77 bl 10015404 +10015f16: 4b32 ldr r3, [pc, #200] ; (10015fe0 ) +10015f18: 4e32 ldr r6, [pc, #200] ; (10015fe4 ) +10015f1a: 681a ldr r2, [r3, #0] +10015f1c: f8df 80f0 ldr.w r8, [pc, #240] ; 10016010 +10015f20: 3201 adds r2, #1 +10015f22: 601a str r2, [r3, #0] +10015f24: 6835 ldr r5, [r6, #0] +10015f26: 2d00 cmp r5, #0 +10015f28: d14f bne.n 10015fca +10015f2a: 6034 str r4, [r6, #0] +10015f2c: 681b ldr r3, [r3, #0] +10015f2e: 2b01 cmp r3, #1 +10015f30: d11d bne.n 10015f6e +10015f32: eb08 0005 add.w r0, r8, r5 +10015f36: 3514 adds r5, #20 +10015f38: f7ff fc46 bl 100157c8 +10015f3c: 2ddc cmp r5, #220 ; 0xdc +10015f3e: d1f8 bne.n 10015f32 +10015f40: f8df 90d0 ldr.w r9, [pc, #208] ; 10016014 +10015f44: 4d28 ldr r5, [pc, #160] ; (10015fe8 ) +10015f46: 4648 mov r0, r9 +10015f48: f7ff fc3e bl 100157c8 +10015f4c: 4628 mov r0, r5 +10015f4e: f7ff fc3b bl 100157c8 +10015f52: 4826 ldr r0, [pc, #152] ; (10015fec ) +10015f54: f7ff fc38 bl 100157c8 +10015f58: 4825 ldr r0, [pc, #148] ; (10015ff0 ) +10015f5a: f7ff fc35 bl 100157c8 +10015f5e: 4825 ldr r0, [pc, #148] ; (10015ff4 ) +10015f60: f7ff fc32 bl 100157c8 +10015f64: 4b24 ldr r3, [pc, #144] ; (10015ff8 ) +10015f66: f8c3 9000 str.w r9, [r3] +10015f6a: 4b24 ldr r3, [pc, #144] ; (10015ffc ) +10015f6c: 601d str r5, [r3, #0] +10015f6e: 2501 movs r5, #1 +10015f70: 4a23 ldr r2, [pc, #140] ; (10016000 ) +10015f72: 4924 ldr r1, [pc, #144] ; (10016004 ) +10015f74: 6813 ldr r3, [r2, #0] +10015f76: 6808 ldr r0, [r1, #0] +10015f78: 3301 adds r3, #1 +10015f7a: 6013 str r3, [r2, #0] +10015f7c: 6ae2 ldr r2, [r4, #44] ; 0x2c +10015f7e: 6423 str r3, [r4, #64] ; 0x40 +10015f80: fa05 f302 lsl.w r3, r5, r2 +10015f84: 4303 orrs r3, r0 +10015f86: 2014 movs r0, #20 +10015f88: 600b str r3, [r1, #0] +10015f8a: fb00 8002 mla r0, r0, r2, r8 +10015f8e: 4639 mov r1, r7 +10015f90: f7ff fc28 bl 100157e4 +10015f94: f7ff fa46 bl 10015424 +10015f98: 4b1b ldr r3, [pc, #108] ; (10016008 ) +10015f9a: 681b ldr r3, [r3, #0] +10015f9c: b163 cbz r3, 10015fb8 +10015f9e: 6833 ldr r3, [r6, #0] +10015fa0: 6ada ldr r2, [r3, #44] ; 0x2c +10015fa2: 6ae3 ldr r3, [r4, #44] ; 0x2c +10015fa4: 429a cmp r2, r3 +10015fa6: d207 bcs.n 10015fb8 +10015fa8: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +10015fac: 4b17 ldr r3, [pc, #92] ; (1001600c ) +10015fae: 601a str r2, [r3, #0] +10015fb0: f3bf 8f4f dsb sy +10015fb4: f3bf 8f6f isb sy +10015fb8: 4628 mov r0, r5 +10015fba: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +10015fbe: 4628 mov r0, r5 +10015fc0: f7ff f964 bl 1001528c +10015fc4: f04f 35ff mov.w r5, #4294967295 +10015fc8: e7f6 b.n 10015fb8 +10015fca: 4b0f ldr r3, [pc, #60] ; (10016008 ) +10015fcc: 681b ldr r3, [r3, #0] +10015fce: 2b00 cmp r3, #0 +10015fd0: d1cd bne.n 10015f6e +10015fd2: 6833 ldr r3, [r6, #0] +10015fd4: 6ada ldr r2, [r3, #44] ; 0x2c +10015fd6: 6ae3 ldr r3, [r4, #44] ; 0x2c +10015fd8: 429a cmp r2, r3 +10015fda: bf98 it ls +10015fdc: 6034 strls r4, [r6, #0] +10015fde: e7c6 b.n 10015f6e +10015fe0: 1004b494 .word 0x1004b494 +10015fe4: 1004b3a8 .word 0x1004b3a8 +10015fe8: 1004b4c0 .word 0x1004b4c0 +10015fec: 1004b4e0 .word 0x1004b4e0 +10015ff0: 1004b50c .word 0x1004b50c +10015ff4: 1004b4f8 .word 0x1004b4f8 +10015ff8: 1004b3ac .word 0x1004b3ac +10015ffc: 1004b3b0 .word 0x1004b3b0 +10016000: 1004b4a4 .word 0x1004b4a4 +10016004: 1004b4a8 .word 0x1004b4a8 +10016008: 1004b4f4 .word 0x1004b4f4 +1001600c: e000ed04 .word 0xe000ed04 +10016010: 1004b3b4 .word 0x1004b3b4 +10016014: 1004b4ac .word 0x1004b4ac + +10016018 : +10016018: b570 push {r4, r5, r6, lr} +1001601a: 4604 mov r4, r0 +1001601c: 4d24 ldr r5, [pc, #144] ; (100160b0 ) +1001601e: f7ff f9f1 bl 10015404 +10016022: b904 cbnz r4, 10016026 +10016024: 682c ldr r4, [r5, #0] +10016026: 1d26 adds r6, r4, #4 +10016028: 4630 mov r0, r6 +1001602a: f7ff fbfe bl 1001582a +1001602e: b960 cbnz r0, 1001604a +10016030: 2114 movs r1, #20 +10016032: 6ae0 ldr r0, [r4, #44] ; 0x2c +10016034: 4b1f ldr r3, [pc, #124] ; (100160b4 ) +10016036: 4341 muls r1, r0 +10016038: 585b ldr r3, [r3, r1] +1001603a: b933 cbnz r3, 1001604a +1001603c: 2201 movs r2, #1 +1001603e: 491e ldr r1, [pc, #120] ; (100160b8 ) +10016040: 4082 lsls r2, r0 +10016042: 680b ldr r3, [r1, #0] +10016044: ea23 0302 bic.w r3, r3, r2 +10016048: 600b str r3, [r1, #0] +1001604a: 6aa3 ldr r3, [r4, #40] ; 0x28 +1001604c: b11b cbz r3, 10016056 +1001604e: f104 0018 add.w r0, r4, #24 +10016052: f7ff fbea bl 1001582a +10016056: 4a19 ldr r2, [pc, #100] ; (100160bc ) +10016058: 6813 ldr r3, [r2, #0] +1001605a: 3301 adds r3, #1 +1001605c: 6013 str r3, [r2, #0] +1001605e: 682b ldr r3, [r5, #0] +10016060: 429c cmp r4, r3 +10016062: d118 bne.n 10016096 +10016064: 4631 mov r1, r6 +10016066: 4816 ldr r0, [pc, #88] ; (100160c0 ) +10016068: f7ff fbbc bl 100157e4 +1001606c: 4a15 ldr r2, [pc, #84] ; (100160c4 ) +1001606e: 6813 ldr r3, [r2, #0] +10016070: 3301 adds r3, #1 +10016072: 6013 str r3, [r2, #0] +10016074: f7ff f9d6 bl 10015424 +10016078: 4b13 ldr r3, [pc, #76] ; (100160c8 ) +1001607a: 681b ldr r3, [r3, #0] +1001607c: b153 cbz r3, 10016094 +1001607e: 682b ldr r3, [r5, #0] +10016080: 429c cmp r4, r3 +10016082: d107 bne.n 10016094 +10016084: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +10016088: 4b10 ldr r3, [pc, #64] ; (100160cc ) +1001608a: 601a str r2, [r3, #0] +1001608c: f3bf 8f4f dsb sy +10016090: f3bf 8f6f isb sy +10016094: bd70 pop {r4, r5, r6, pc} +10016096: 4a0e ldr r2, [pc, #56] ; (100160d0 ) +10016098: 6b20 ldr r0, [r4, #48] ; 0x30 +1001609a: 6813 ldr r3, [r2, #0] +1001609c: 3b01 subs r3, #1 +1001609e: 6013 str r3, [r2, #0] +100160a0: f7ff f8f4 bl 1001528c +100160a4: 4620 mov r0, r4 +100160a6: f7ff f8f1 bl 1001528c +100160aa: f7ff fe7b bl 10015da4 +100160ae: e7e1 b.n 10016074 +100160b0: 1004b3a8 .word 0x1004b3a8 +100160b4: 1004b3b4 .word 0x1004b3b4 +100160b8: 1004b4a8 .word 0x1004b4a8 +100160bc: 1004b4a4 .word 0x1004b4a4 +100160c0: 1004b50c .word 0x1004b50c +100160c4: 1004b498 .word 0x1004b498 +100160c8: 1004b4f4 .word 0x1004b4f4 +100160cc: e000ed04 .word 0xe000ed04 +100160d0: 1004b494 .word 0x1004b494 + +100160d4 : +100160d4: b510 push {r4, lr} +100160d6: 4604 mov r4, r0 +100160d8: f7ff f994 bl 10015404 +100160dc: b90c cbnz r4, 100160e2 +100160de: 4b03 ldr r3, [pc, #12] ; (100160ec ) +100160e0: 681c ldr r4, [r3, #0] +100160e2: 6ae4 ldr r4, [r4, #44] ; 0x2c +100160e4: f7ff f99e bl 10015424 +100160e8: 4620 mov r0, r4 +100160ea: bd10 pop {r4, pc} +100160ec: 1004b3a8 .word 0x1004b3a8 + +100160f0 : +100160f0: 290a cmp r1, #10 +100160f2: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +100160f6: bf28 it cs +100160f8: 210a movcs r1, #10 +100160fa: 4604 mov r4, r0 +100160fc: 460e mov r6, r1 +100160fe: f7ff f981 bl 10015404 +10016102: b90c cbnz r4, 10016108 +10016104: 4b28 ldr r3, [pc, #160] ; (100161a8 ) +10016106: 681c ldr r4, [r3, #0] +10016108: 6ca2 ldr r2, [r4, #72] ; 0x48 +1001610a: 42b2 cmp r2, r6 +1001610c: d041 beq.n 10016192 +1001610e: 4b26 ldr r3, [pc, #152] ; (100161a8 ) +10016110: d243 bcs.n 1001619a +10016112: 6819 ldr r1, [r3, #0] +10016114: 428c cmp r4, r1 +10016116: d045 beq.n 100161a4 +10016118: 681b ldr r3, [r3, #0] +1001611a: 6add ldr r5, [r3, #44] ; 0x2c +1001611c: 42b5 cmp r5, r6 +1001611e: bf8c ite hi +10016120: 2500 movhi r5, #0 +10016122: 2501 movls r5, #1 +10016124: 6ae7 ldr r7, [r4, #44] ; 0x2c +10016126: 69a3 ldr r3, [r4, #24] +10016128: 42ba cmp r2, r7 +1001612a: bf08 it eq +1001612c: 62e6 streq r6, [r4, #44] ; 0x2c +1001612e: 2b00 cmp r3, #0 +10016130: f04f 0314 mov.w r3, #20 +10016134: 64a6 str r6, [r4, #72] ; 0x48 +10016136: bfa4 itt ge +10016138: f1c6 060b rsbge r6, r6, #11 +1001613c: 61a6 strge r6, [r4, #24] +1001613e: 4e1b ldr r6, [pc, #108] ; (100161ac ) +10016140: 6962 ldr r2, [r4, #20] +10016142: fb03 6307 mla r3, r3, r7, r6 +10016146: 429a cmp r2, r3 +10016148: d11a bne.n 10016180 +1001614a: f104 0804 add.w r8, r4, #4 +1001614e: 4640 mov r0, r8 +10016150: f7ff fb6b bl 1001582a +10016154: b938 cbnz r0, 10016166 +10016156: 2201 movs r2, #1 +10016158: 4915 ldr r1, [pc, #84] ; (100161b0 ) +1001615a: fa02 f707 lsl.w r7, r2, r7 +1001615e: 680b ldr r3, [r1, #0] +10016160: ea23 0707 bic.w r7, r3, r7 +10016164: 600f str r7, [r1, #0] +10016166: 2301 movs r3, #1 +10016168: 4911 ldr r1, [pc, #68] ; (100161b0 ) +1001616a: 6ae2 ldr r2, [r4, #44] ; 0x2c +1001616c: 6808 ldr r0, [r1, #0] +1001616e: 4093 lsls r3, r2 +10016170: 4303 orrs r3, r0 +10016172: 2014 movs r0, #20 +10016174: 600b str r3, [r1, #0] +10016176: fb00 6002 mla r0, r0, r2, r6 +1001617a: 4641 mov r1, r8 +1001617c: f7ff fb32 bl 100157e4 +10016180: b13d cbz r5, 10016192 +10016182: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +10016186: 4b0b ldr r3, [pc, #44] ; (100161b4 ) +10016188: 601a str r2, [r3, #0] +1001618a: f3bf 8f4f dsb sy +1001618e: f3bf 8f6f isb sy +10016192: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +10016196: f7ff b945 b.w 10015424 +1001619a: 681d ldr r5, [r3, #0] +1001619c: 1b63 subs r3, r4, r5 +1001619e: 425d negs r5, r3 +100161a0: 415d adcs r5, r3 +100161a2: e7bf b.n 10016124 +100161a4: 2500 movs r5, #0 +100161a6: e7bd b.n 10016124 +100161a8: 1004b3a8 .word 0x1004b3a8 +100161ac: 1004b3b4 .word 0x1004b3b4 +100161b0: 1004b4a8 .word 0x1004b4a8 +100161b4: e000ed04 .word 0xe000ed04 + +100161b8 : +100161b8: b51f push {r0, r1, r2, r3, r4, lr} +100161ba: 2400 movs r4, #0 +100161bc: 4b13 ldr r3, [pc, #76] ; (1001620c ) +100161be: 9403 str r4, [sp, #12] +100161c0: 9301 str r3, [sp, #4] +100161c2: 9402 str r4, [sp, #8] +100161c4: 9400 str r4, [sp, #0] +100161c6: 4623 mov r3, r4 +100161c8: 2246 movs r2, #70 ; 0x46 +100161ca: 4911 ldr r1, [pc, #68] ; (10016210 ) +100161cc: 4811 ldr r0, [pc, #68] ; (10016214 ) +100161ce: f7ff fe41 bl 10015e54 +100161d2: 2801 cmp r0, #1 +100161d4: d118 bne.n 10016208 +100161d6: f000 fbb3 bl 10016940 +100161da: 2801 cmp r0, #1 +100161dc: d114 bne.n 10016208 +100161de: f04f 0350 mov.w r3, #80 ; 0x50 +100161e2: f383 8811 msr BASEPRI, r3 +100161e6: f3bf 8f6f isb sy +100161ea: f3bf 8f4f dsb sy +100161ee: f04f 32ff mov.w r2, #4294967295 +100161f2: 4b09 ldr r3, [pc, #36] ; (10016218 ) +100161f4: 601a str r2, [r3, #0] +100161f6: 4b09 ldr r3, [pc, #36] ; (1001621c ) +100161f8: 6018 str r0, [r3, #0] +100161fa: 4b09 ldr r3, [pc, #36] ; (10016220 ) +100161fc: 601c str r4, [r3, #0] +100161fe: b004 add sp, #16 +10016200: e8bd 4010 ldmia.w sp!, {r4, lr} +10016204: f7ff ba08 b.w 10015618 +10016208: b004 add sp, #16 +1001620a: bd10 pop {r4, pc} +1001620c: 1004b4d4 .word 0x1004b4d4 +10016210: 10040276 .word 0x10040276 +10016214: 10016481 .word 0x10016481 +10016218: 1004b4d8 .word 0x1004b4d8 +1001621c: 1004b4f4 .word 0x1004b4f4 +10016220: 1004b520 .word 0x1004b520 + +10016224 : +10016224: 4a02 ldr r2, [pc, #8] ; (10016230 ) +10016226: 6813 ldr r3, [r2, #0] +10016228: 3301 adds r3, #1 +1001622a: 6013 str r3, [r2, #0] +1001622c: 4770 bx lr +1001622e: bf00 nop +10016230: 1004b4a0 .word 0x1004b4a0 + +10016234 : +10016234: 4b01 ldr r3, [pc, #4] ; (1001623c ) +10016236: 6818 ldr r0, [r3, #0] +10016238: 4770 bx lr +1001623a: bf00 nop +1001623c: 1004b520 .word 0x1004b520 + +10016240 : +10016240: 4b01 ldr r3, [pc, #4] ; (10016248 ) +10016242: 6818 ldr r0, [r3, #0] +10016244: 4770 bx lr +10016246: bf00 nop +10016248: 1004b520 .word 0x1004b520 + +1001624c : +1001624c: b908 cbnz r0, 10016252 +1001624e: 4b02 ldr r3, [pc, #8] ; (10016258 ) +10016250: 6818 ldr r0, [r3, #0] +10016252: 3034 adds r0, #52 ; 0x34 +10016254: 4770 bx lr +10016256: bf00 nop +10016258: 1004b3a8 .word 0x1004b3a8 + +1001625c : +1001625c: 4a02 ldr r2, [pc, #8] ; (10016268 ) +1001625e: 6813 ldr r3, [r2, #0] +10016260: 4418 add r0, r3 +10016262: 6010 str r0, [r2, #0] +10016264: 4770 bx lr +10016266: bf00 nop +10016268: 1004b520 .word 0x1004b520 + +1001626c : +1001626c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10016270: 4b36 ldr r3, [pc, #216] ; (1001634c ) +10016272: 681b ldr r3, [r3, #0] +10016274: 2b00 cmp r3, #0 +10016276: d147 bne.n 10016308 +10016278: 4b35 ldr r3, [pc, #212] ; (10016350 ) +1001627a: 681c ldr r4, [r3, #0] +1001627c: 3401 adds r4, #1 +1001627e: 601c str r4, [r3, #0] +10016280: b95c cbnz r4, 1001629a +10016282: 4a34 ldr r2, [pc, #208] ; (10016354 ) +10016284: 4b34 ldr r3, [pc, #208] ; (10016358 ) +10016286: 6811 ldr r1, [r2, #0] +10016288: 6818 ldr r0, [r3, #0] +1001628a: 6010 str r0, [r2, #0] +1001628c: 4a33 ldr r2, [pc, #204] ; (1001635c ) +1001628e: 6019 str r1, [r3, #0] +10016290: 6813 ldr r3, [r2, #0] +10016292: 3301 adds r3, #1 +10016294: 6013 str r3, [r2, #0] +10016296: f7ff fd85 bl 10015da4 +1001629a: 4d31 ldr r5, [pc, #196] ; (10016360 ) +1001629c: f04f 0b00 mov.w fp, #0 +100162a0: 682b ldr r3, [r5, #0] +100162a2: 4f30 ldr r7, [pc, #192] ; (10016364 ) +100162a4: 429c cmp r4, r3 +100162a6: d33e bcc.n 10016326 +100162a8: f8df 80a8 ldr.w r8, [pc, #168] ; 10016354 +100162ac: f8df 90c4 ldr.w r9, [pc, #196] ; 10016374 +100162b0: f8d8 2000 ldr.w r2, [r8] +100162b4: 6812 ldr r2, [r2, #0] +100162b6: bb72 cbnz r2, 10016316 +100162b8: f04f 32ff mov.w r2, #4294967295 +100162bc: 602a str r2, [r5, #0] +100162be: e032 b.n 10016326 +100162c0: f106 0a04 add.w sl, r6, #4 +100162c4: 4650 mov r0, sl +100162c6: f7ff fab0 bl 1001582a +100162ca: 6ab1 ldr r1, [r6, #40] ; 0x28 +100162cc: b119 cbz r1, 100162d6 +100162ce: f106 0018 add.w r0, r6, #24 +100162d2: f7ff faaa bl 1001582a +100162d6: 2201 movs r2, #1 +100162d8: f04f 0e14 mov.w lr, #20 +100162dc: 6af0 ldr r0, [r6, #44] ; 0x2c +100162de: f8d9 3000 ldr.w r3, [r9] +100162e2: fa02 f100 lsl.w r1, r2, r0 +100162e6: 4319 orrs r1, r3 +100162e8: 4b1f ldr r3, [pc, #124] ; (10016368 ) +100162ea: f8c9 1000 str.w r1, [r9] +100162ee: fb0e 3000 mla r0, lr, r0, r3 +100162f2: 4651 mov r1, sl +100162f4: f7ff fa76 bl 100157e4 +100162f8: 6838 ldr r0, [r7, #0] +100162fa: 6af1 ldr r1, [r6, #44] ; 0x2c +100162fc: 6ac2 ldr r2, [r0, #44] ; 0x2c +100162fe: 4291 cmp r1, r2 +10016300: bf28 it cs +10016302: f04f 0b01 movcs.w fp, #1 +10016306: e7d3 b.n 100162b0 +10016308: 4a18 ldr r2, [pc, #96] ; (1001636c ) +1001630a: f04f 0b00 mov.w fp, #0 +1001630e: 6813 ldr r3, [r2, #0] +10016310: 3301 adds r3, #1 +10016312: 6013 str r3, [r2, #0] +10016314: e011 b.n 1001633a +10016316: f8d8 2000 ldr.w r2, [r8] +1001631a: 68d2 ldr r2, [r2, #12] +1001631c: 68d6 ldr r6, [r2, #12] +1001631e: 6871 ldr r1, [r6, #4] +10016320: 428c cmp r4, r1 +10016322: d2cd bcs.n 100162c0 +10016324: 6029 str r1, [r5, #0] +10016326: 683a ldr r2, [r7, #0] +10016328: 4b0f ldr r3, [pc, #60] ; (10016368 ) +1001632a: 6ad1 ldr r1, [r2, #44] ; 0x2c +1001632c: 2214 movs r2, #20 +1001632e: 434a muls r2, r1 +10016330: 589a ldr r2, [r3, r2] +10016332: 2a02 cmp r2, #2 +10016334: bf28 it cs +10016336: f04f 0b01 movcs.w fp, #1 +1001633a: 4a0d ldr r2, [pc, #52] ; (10016370 ) +1001633c: 6812 ldr r2, [r2, #0] +1001633e: 2a00 cmp r2, #0 +10016340: bf18 it ne +10016342: f04f 0b01 movne.w fp, #1 +10016346: 4658 mov r0, fp +10016348: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +1001634c: 1004b4a0 .word 0x1004b4a0 +10016350: 1004b520 .word 0x1004b520 +10016354: 1004b3ac .word 0x1004b3ac +10016358: 1004b3b0 .word 0x1004b3b0 +1001635c: 1004b4dc .word 0x1004b4dc +10016360: 1004b4d8 .word 0x1004b4d8 +10016364: 1004b3a8 .word 0x1004b3a8 +10016368: 1004b3b4 .word 0x1004b3b4 +1001636c: 1004b49c .word 0x1004b49c +10016370: 1004b524 .word 0x1004b524 +10016374: 1004b4a8 .word 0x1004b4a8 + +10016378 : +10016378: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +1001637c: f7ff f842 bl 10015404 +10016380: 4b2a ldr r3, [pc, #168] ; (1001642c ) +10016382: 681a ldr r2, [r3, #0] +10016384: 3a01 subs r2, #1 +10016386: 601a str r2, [r3, #0] +10016388: 681c ldr r4, [r3, #0] +1001638a: b12c cbz r4, 10016398 +1001638c: 2400 movs r4, #0 +1001638e: f7ff f849 bl 10015424 +10016392: 4620 mov r0, r4 +10016394: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +10016398: 4b25 ldr r3, [pc, #148] ; (10016430 ) +1001639a: 681b ldr r3, [r3, #0] +1001639c: 2b00 cmp r3, #0 +1001639e: d0f5 beq.n 1001638c +100163a0: f8df 90a4 ldr.w r9, [pc, #164] ; 10016448 +100163a4: 4f23 ldr r7, [pc, #140] ; (10016434 ) +100163a6: f8df 80a4 ldr.w r8, [pc, #164] ; 1001644c +100163aa: f8d9 3000 ldr.w r3, [r9] +100163ae: b9e3 cbnz r3, 100163ea +100163b0: b10c cbz r4, 100163b6 +100163b2: f7ff fcf7 bl 10015da4 +100163b6: 4d20 ldr r5, [pc, #128] ; (10016438 ) +100163b8: 682c ldr r4, [r5, #0] +100163ba: b144 cbz r4, 100163ce +100163bc: 2701 movs r7, #1 +100163be: 4e1f ldr r6, [pc, #124] ; (1001643c ) +100163c0: f7ff ff54 bl 1001626c +100163c4: b100 cbz r0, 100163c8 +100163c6: 6037 str r7, [r6, #0] +100163c8: 3c01 subs r4, #1 +100163ca: d1f9 bne.n 100163c0 +100163cc: 602c str r4, [r5, #0] +100163ce: 4b1b ldr r3, [pc, #108] ; (1001643c ) +100163d0: 681b ldr r3, [r3, #0] +100163d2: 2b00 cmp r3, #0 +100163d4: d0da beq.n 1001638c +100163d6: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +100163da: 4b19 ldr r3, [pc, #100] ; (10016440 ) +100163dc: 601a str r2, [r3, #0] +100163de: f3bf 8f4f dsb sy +100163e2: f3bf 8f6f isb sy +100163e6: 2401 movs r4, #1 +100163e8: e7d1 b.n 1001638e +100163ea: f8d9 300c ldr.w r3, [r9, #12] +100163ee: 2501 movs r5, #1 +100163f0: 68dc ldr r4, [r3, #12] +100163f2: 1d26 adds r6, r4, #4 +100163f4: f104 0018 add.w r0, r4, #24 +100163f8: f7ff fa17 bl 1001582a +100163fc: 4630 mov r0, r6 +100163fe: f7ff fa14 bl 1001582a +10016402: 2014 movs r0, #20 +10016404: 6ae2 ldr r2, [r4, #44] ; 0x2c +10016406: 6839 ldr r1, [r7, #0] +10016408: fa05 f302 lsl.w r3, r5, r2 +1001640c: 430b orrs r3, r1 +1001640e: fb00 8002 mla r0, r0, r2, r8 +10016412: 4631 mov r1, r6 +10016414: 603b str r3, [r7, #0] +10016416: f7ff f9e5 bl 100157e4 +1001641a: 4b0a ldr r3, [pc, #40] ; (10016444 ) +1001641c: 6ae2 ldr r2, [r4, #44] ; 0x2c +1001641e: 681b ldr r3, [r3, #0] +10016420: 6adb ldr r3, [r3, #44] ; 0x2c +10016422: 429a cmp r2, r3 +10016424: bf24 itt cs +10016426: 4b05 ldrcs r3, [pc, #20] ; (1001643c ) +10016428: 601d strcs r5, [r3, #0] +1001642a: e7be b.n 100163aa +1001642c: 1004b4a0 .word 0x1004b4a0 +10016430: 1004b494 .word 0x1004b494 +10016434: 1004b4a8 .word 0x1004b4a8 +10016438: 1004b49c .word 0x1004b49c +1001643c: 1004b524 .word 0x1004b524 +10016440: e000ed04 .word 0xe000ed04 +10016444: 1004b3a8 .word 0x1004b3a8 +10016448: 1004b4e0 .word 0x1004b4e0 +1001644c: 1004b3b4 .word 0x1004b3b4 + +10016450 : +10016450: b508 push {r3, lr} +10016452: b940 cbnz r0, 10016466 +10016454: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +10016458: 4b08 ldr r3, [pc, #32] ; (1001647c ) +1001645a: 601a str r2, [r3, #0] +1001645c: f3bf 8f4f dsb sy +10016460: f3bf 8f6f isb sy +10016464: bd08 pop {r3, pc} +10016466: f7ff fedd bl 10016224 +1001646a: 2100 movs r1, #0 +1001646c: f7ff fcac bl 10015dc8 +10016470: f7ff ff82 bl 10016378 +10016474: 2800 cmp r0, #0 +10016476: d0ed beq.n 10016454 +10016478: bd08 pop {r3, pc} +1001647a: bf00 nop +1001647c: e000ed04 .word 0xe000ed04 + +10016480 : +10016480: b570 push {r4, r5, r6, lr} +10016482: 4e1c ldr r6, [pc, #112] ; (100164f4 ) +10016484: 4c1c ldr r4, [pc, #112] ; (100164f8 ) +10016486: 6823 ldr r3, [r4, #0] +10016488: b9ab cbnz r3, 100164b6 +1001648a: f7ff f8dd bl 10015648 +1001648e: f7ff fc6b bl 10015d68 +10016492: 2801 cmp r0, #1 +10016494: d9f6 bls.n 10016484 +10016496: f7ff fec5 bl 10016224 +1001649a: f7ff fc65 bl 10015d68 +1001649e: 2801 cmp r0, #1 +100164a0: 4604 mov r4, r0 +100164a2: d905 bls.n 100164b0 +100164a4: f002 fd98 bl 10018fd8 +100164a8: b110 cbz r0, 100164b0 +100164aa: 4620 mov r0, r4 +100164ac: f7ff f800 bl 100154b0 +100164b0: f7ff ff62 bl 10016378 +100164b4: e7e6 b.n 10016484 +100164b6: f7ff feb5 bl 10016224 +100164ba: 6835 ldr r5, [r6, #0] +100164bc: f7ff ff5c bl 10016378 +100164c0: 2d00 cmp r5, #0 +100164c2: d0e0 beq.n 10016486 +100164c4: f7fe ff9e bl 10015404 +100164c8: 68f3 ldr r3, [r6, #12] +100164ca: 68dd ldr r5, [r3, #12] +100164cc: 1d28 adds r0, r5, #4 +100164ce: f7ff f9ac bl 1001582a +100164d2: 4a0a ldr r2, [pc, #40] ; (100164fc ) +100164d4: 6813 ldr r3, [r2, #0] +100164d6: 3b01 subs r3, #1 +100164d8: 6013 str r3, [r2, #0] +100164da: 6823 ldr r3, [r4, #0] +100164dc: 3b01 subs r3, #1 +100164de: 6023 str r3, [r4, #0] +100164e0: f7fe ffa0 bl 10015424 +100164e4: 6b28 ldr r0, [r5, #48] ; 0x30 +100164e6: f7fe fed1 bl 1001528c +100164ea: 4628 mov r0, r5 +100164ec: f7fe fece bl 1001528c +100164f0: e7c9 b.n 10016486 +100164f2: bf00 nop +100164f4: 1004b50c .word 0x1004b50c +100164f8: 1004b498 .word 0x1004b498 +100164fc: 1004b494 .word 0x1004b494 + +10016500 : +10016500: 4b18 ldr r3, [pc, #96] ; (10016564 ) +10016502: b570 push {r4, r5, r6, lr} +10016504: 681a ldr r2, [r3, #0] +10016506: 4b18 ldr r3, [pc, #96] ; (10016568 ) +10016508: b112 cbz r2, 10016510 +1001650a: 2201 movs r2, #1 +1001650c: 601a str r2, [r3, #0] +1001650e: bd70 pop {r4, r5, r6, pc} +10016510: 601a str r2, [r3, #0] +10016512: 4b16 ldr r3, [pc, #88] ; (1001656c ) +10016514: 4a16 ldr r2, [pc, #88] ; (10016570 ) +10016516: 6819 ldr r1, [r3, #0] +10016518: 6815 ldr r5, [r2, #0] +1001651a: 4816 ldr r0, [pc, #88] ; (10016574 ) +1001651c: 42a9 cmp r1, r5 +1001651e: d904 bls.n 1001652a +10016520: 6804 ldr r4, [r0, #0] +10016522: 6d23 ldr r3, [r4, #80] ; 0x50 +10016524: 1b5b subs r3, r3, r5 +10016526: 440b add r3, r1 +10016528: 6523 str r3, [r4, #80] ; 0x50 +1001652a: 4b13 ldr r3, [pc, #76] ; (10016578 ) +1001652c: 6011 str r1, [r2, #0] +1001652e: 681b ldr r3, [r3, #0] +10016530: fab3 f383 clz r3, r3 +10016534: 2414 movs r4, #20 +10016536: b2db uxtb r3, r3 +10016538: f1c3 031f rsb r3, r3, #31 +1001653c: fb04 f203 mul.w r2, r4, r3 +10016540: 490e ldr r1, [pc, #56] ; (1001657c ) +10016542: 188d adds r5, r1, r2 +10016544: 686e ldr r6, [r5, #4] +10016546: 3208 adds r2, #8 +10016548: 6876 ldr r6, [r6, #4] +1001654a: 440a add r2, r1 +1001654c: 4296 cmp r6, r2 +1001654e: fb04 1303 mla r3, r4, r3, r1 +10016552: bf08 it eq +10016554: 6872 ldreq r2, [r6, #4] +10016556: 606e str r6, [r5, #4] +10016558: bf08 it eq +1001655a: 606a streq r2, [r5, #4] +1001655c: 685b ldr r3, [r3, #4] +1001655e: 68db ldr r3, [r3, #12] +10016560: 6003 str r3, [r0, #0] +10016562: bd70 pop {r4, r5, r6, pc} +10016564: 1004b4a0 .word 0x1004b4a0 +10016568: 1004b524 .word 0x1004b524 +1001656c: 1004b520 .word 0x1004b520 +10016570: 1004b490 .word 0x1004b490 +10016574: 1004b3a8 .word 0x1004b3a8 +10016578: 1004b4a8 .word 0x1004b4a8 +1001657c: 1004b3b4 .word 0x1004b3b4 + +10016580 : +10016580: b510 push {r4, lr} +10016582: 460c mov r4, r1 +10016584: 4b05 ldr r3, [pc, #20] ; (1001659c ) +10016586: 6819 ldr r1, [r3, #0] +10016588: 3118 adds r1, #24 +1001658a: f7ff f937 bl 100157fc +1001658e: 4620 mov r0, r4 +10016590: e8bd 4010 ldmia.w sp!, {r4, lr} +10016594: 2101 movs r1, #1 +10016596: f7ff bc17 b.w 10015dc8 +1001659a: bf00 nop +1001659c: 1004b3a8 .word 0x1004b3a8 + +100165a0 : +100165a0: b510 push {r4, lr} +100165a2: 4614 mov r4, r2 +100165a4: 4b07 ldr r3, [pc, #28] ; (100165c4 ) +100165a6: f041 4100 orr.w r1, r1, #2147483648 ; 0x80000000 +100165aa: 681a ldr r2, [r3, #0] +100165ac: 6191 str r1, [r2, #24] +100165ae: 6819 ldr r1, [r3, #0] +100165b0: 3118 adds r1, #24 +100165b2: f7ff f917 bl 100157e4 +100165b6: 4620 mov r0, r4 +100165b8: e8bd 4010 ldmia.w sp!, {r4, lr} +100165bc: 2101 movs r1, #1 +100165be: f7ff bc03 b.w 10015dc8 +100165c2: bf00 nop +100165c4: 1004b3a8 .word 0x1004b3a8 + +100165c8 : +100165c8: b538 push {r3, r4, r5, lr} +100165ca: 4614 mov r4, r2 +100165cc: 460d mov r5, r1 +100165ce: 4b08 ldr r3, [pc, #32] ; (100165f0 ) +100165d0: 6819 ldr r1, [r3, #0] +100165d2: 3118 adds r1, #24 +100165d4: f7ff f906 bl 100157e4 +100165d8: 2c00 cmp r4, #0 +100165da: 4621 mov r1, r4 +100165dc: bf08 it eq +100165de: 4628 moveq r0, r5 +100165e0: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +100165e4: bf18 it ne +100165e6: f04f 30ff movne.w r0, #4294967295 +100165ea: f7ff bbed b.w 10015dc8 +100165ee: bf00 nop +100165f0: 1004b3a8 .word 0x1004b3a8 + +100165f4 : +100165f4: b538 push {r3, r4, r5, lr} +100165f6: 68c3 ldr r3, [r0, #12] +100165f8: 68dc ldr r4, [r3, #12] +100165fa: f104 0518 add.w r5, r4, #24 +100165fe: 4628 mov r0, r5 +10016600: f7ff f913 bl 1001582a +10016604: 4b12 ldr r3, [pc, #72] ; (10016650 ) +10016606: 681b ldr r3, [r3, #0] +10016608: b9f3 cbnz r3, 10016648 +1001660a: 1d25 adds r5, r4, #4 +1001660c: 4628 mov r0, r5 +1001660e: f7ff f90c bl 1001582a +10016612: 2301 movs r3, #1 +10016614: 490f ldr r1, [pc, #60] ; (10016654 ) +10016616: 6ae2 ldr r2, [r4, #44] ; 0x2c +10016618: 6808 ldr r0, [r1, #0] +1001661a: 4093 lsls r3, r2 +1001661c: 4303 orrs r3, r0 +1001661e: 2014 movs r0, #20 +10016620: 600b str r3, [r1, #0] +10016622: 4629 mov r1, r5 +10016624: 4b0c ldr r3, [pc, #48] ; (10016658 ) +10016626: fb00 3002 mla r0, r0, r2, r3 +1001662a: f7ff f8db bl 100157e4 +1001662e: 4b0b ldr r3, [pc, #44] ; (1001665c ) +10016630: 6ae2 ldr r2, [r4, #44] ; 0x2c +10016632: 681b ldr r3, [r3, #0] +10016634: 6adb ldr r3, [r3, #44] ; 0x2c +10016636: 429a cmp r2, r3 +10016638: bf85 ittet hi +1001663a: 2001 movhi r0, #1 +1001663c: 4b08 ldrhi r3, [pc, #32] ; (10016660 ) +1001663e: 2000 movls r0, #0 +10016640: 6018 strhi r0, [r3, #0] +10016642: f7ff fbaf bl 10015da4 +10016646: bd38 pop {r3, r4, r5, pc} +10016648: 4629 mov r1, r5 +1001664a: 4806 ldr r0, [pc, #24] ; (10016664 ) +1001664c: e7ed b.n 1001662a +1001664e: bf00 nop +10016650: 1004b4a0 .word 0x1004b4a0 +10016654: 1004b4a8 .word 0x1004b4a8 +10016658: 1004b3b4 .word 0x1004b3b4 +1001665c: 1004b3a8 .word 0x1004b3a8 +10016660: 1004b524 .word 0x1004b524 +10016664: 1004b4e0 .word 0x1004b4e0 + +10016668 : +10016668: b570 push {r4, r5, r6, lr} +1001666a: 2401 movs r4, #1 +1001666c: 68c5 ldr r5, [r0, #12] +1001666e: f041 4100 orr.w r1, r1, #2147483648 ; 0x80000000 +10016672: 6001 str r1, [r0, #0] +10016674: 1d2e adds r6, r5, #4 +10016676: f7ff f8d8 bl 1001582a +1001667a: 4630 mov r0, r6 +1001667c: f7ff f8d5 bl 1001582a +10016680: 490c ldr r1, [pc, #48] ; (100166b4 ) +10016682: 6aea ldr r2, [r5, #44] ; 0x2c +10016684: 6808 ldr r0, [r1, #0] +10016686: fa04 f302 lsl.w r3, r4, r2 +1001668a: 4303 orrs r3, r0 +1001668c: 2014 movs r0, #20 +1001668e: 600b str r3, [r1, #0] +10016690: 4b09 ldr r3, [pc, #36] ; (100166b8 ) +10016692: 4631 mov r1, r6 +10016694: fb00 3002 mla r0, r0, r2, r3 +10016698: f7ff f8a4 bl 100157e4 +1001669c: 4b07 ldr r3, [pc, #28] ; (100166bc ) +1001669e: 6aea ldr r2, [r5, #44] ; 0x2c +100166a0: 681b ldr r3, [r3, #0] +100166a2: 6adb ldr r3, [r3, #44] ; 0x2c +100166a4: 429a cmp r2, r3 +100166a6: bf83 ittte hi +100166a8: 4b05 ldrhi r3, [pc, #20] ; (100166c0 ) +100166aa: 4620 movhi r0, r4 +100166ac: 601c strhi r4, [r3, #0] +100166ae: 2000 movls r0, #0 +100166b0: bd70 pop {r4, r5, r6, pc} +100166b2: bf00 nop +100166b4: 1004b4a8 .word 0x1004b4a8 +100166b8: 1004b3b4 .word 0x1004b3b4 +100166bc: 1004b3a8 .word 0x1004b3a8 +100166c0: 1004b524 .word 0x1004b524 + +100166c4 : +100166c4: 4b03 ldr r3, [pc, #12] ; (100166d4 ) +100166c6: 681b ldr r3, [r3, #0] +100166c8: 6003 str r3, [r0, #0] +100166ca: 4b03 ldr r3, [pc, #12] ; (100166d8 ) +100166cc: 681b ldr r3, [r3, #0] +100166ce: 6043 str r3, [r0, #4] +100166d0: 4770 bx lr +100166d2: bf00 nop +100166d4: 1004b4dc .word 0x1004b4dc +100166d8: 1004b520 .word 0x1004b520 + +100166dc : +100166dc: b538 push {r3, r4, r5, lr} +100166de: 460d mov r5, r1 +100166e0: 4604 mov r4, r0 +100166e2: f7fe fe8f bl 10015404 +100166e6: 4b0e ldr r3, [pc, #56] ; (10016720 ) +100166e8: 682a ldr r2, [r5, #0] +100166ea: 6818 ldr r0, [r3, #0] +100166ec: 1c53 adds r3, r2, #1 +100166ee: d010 beq.n 10016712 +100166f0: 4b0c ldr r3, [pc, #48] ; (10016724 ) +100166f2: 6821 ldr r1, [r4, #0] +100166f4: 681b ldr r3, [r3, #0] +100166f6: 4299 cmp r1, r3 +100166f8: 6863 ldr r3, [r4, #4] +100166fa: d001 beq.n 10016700 +100166fc: 4298 cmp r0, r3 +100166fe: d20d bcs.n 1001671c +10016700: 1ac1 subs r1, r0, r3 +10016702: 428a cmp r2, r1 +10016704: d90a bls.n 1001671c +10016706: 1a1b subs r3, r3, r0 +10016708: 4413 add r3, r2 +1001670a: 602b str r3, [r5, #0] +1001670c: 4620 mov r0, r4 +1001670e: f7ff ffd9 bl 100166c4 +10016712: 2400 movs r4, #0 +10016714: f7fe fe86 bl 10015424 +10016718: 4620 mov r0, r4 +1001671a: bd38 pop {r3, r4, r5, pc} +1001671c: 2401 movs r4, #1 +1001671e: e7f9 b.n 10016714 +10016720: 1004b520 .word 0x1004b520 +10016724: 1004b4dc .word 0x1004b4dc + +10016728 : +10016728: 2201 movs r2, #1 +1001672a: 4b01 ldr r3, [pc, #4] ; (10016730 ) +1001672c: 601a str r2, [r3, #0] +1001672e: 4770 bx lr +10016730: 1004b524 .word 0x1004b524 + +10016734 : +10016734: 4b08 ldr r3, [pc, #32] ; (10016758 ) +10016736: 6818 ldr r0, [r3, #0] +10016738: b960 cbnz r0, 10016754 +1001673a: 4b08 ldr r3, [pc, #32] ; (1001675c ) +1001673c: 681b ldr r3, [r3, #0] +1001673e: b953 cbnz r3, 10016756 +10016740: 4b07 ldr r3, [pc, #28] ; (10016760 ) +10016742: 4a08 ldr r2, [pc, #32] ; (10016764 ) +10016744: 681b ldr r3, [r3, #0] +10016746: 6810 ldr r0, [r2, #0] +10016748: 3b01 subs r3, #1 +1001674a: 4298 cmp r0, r3 +1001674c: bf14 ite ne +1001674e: 2001 movne r0, #1 +10016750: 2002 moveq r0, #2 +10016752: 4770 bx lr +10016754: 2000 movs r0, #0 +10016756: 4770 bx lr +10016758: 1004b4e0 .word 0x1004b4e0 +1001675c: 1004b524 .word 0x1004b524 +10016760: 1004b494 .word 0x1004b494 +10016764: 1004b4f8 .word 0x1004b4f8 + +10016768 : +10016768: 4b05 ldr r3, [pc, #20] ; (10016780 ) +1001676a: 681b ldr r3, [r3, #0] +1001676c: b133 cbz r3, 1001677c +1001676e: 4b05 ldr r3, [pc, #20] ; (10016784 ) +10016770: 681b ldr r3, [r3, #0] +10016772: 2b00 cmp r3, #0 +10016774: bf0c ite eq +10016776: 2002 moveq r0, #2 +10016778: 2000 movne r0, #0 +1001677a: 4770 bx lr +1001677c: 2001 movs r0, #1 +1001677e: 4770 bx lr +10016780: 1004b4f4 .word 0x1004b4f4 +10016784: 1004b4a0 .word 0x1004b4a0 + +10016788 : +10016788: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1001678c: 4604 mov r4, r0 +1001678e: 2800 cmp r0, #0 +10016790: d039 beq.n 10016806 +10016792: 4d1e ldr r5, [pc, #120] ; (1001680c ) +10016794: 6ac3 ldr r3, [r0, #44] ; 0x2c +10016796: 682a ldr r2, [r5, #0] +10016798: 6ad2 ldr r2, [r2, #44] ; 0x2c +1001679a: 4293 cmp r3, r2 +1001679c: d233 bcs.n 10016806 +1001679e: 2714 movs r7, #20 +100167a0: 6982 ldr r2, [r0, #24] +100167a2: 4e1b ldr r6, [pc, #108] ; (10016810 ) +100167a4: 2a00 cmp r2, #0 +100167a6: bfa8 it ge +100167a8: 682a ldrge r2, [r5, #0] +100167aa: fb07 6303 mla r3, r7, r3, r6 +100167ae: bfa2 ittt ge +100167b0: 6ad2 ldrge r2, [r2, #44] ; 0x2c +100167b2: f1c2 020b rsbge r2, r2, #11 +100167b6: 6182 strge r2, [r0, #24] +100167b8: 6942 ldr r2, [r0, #20] +100167ba: 429a cmp r2, r3 +100167bc: d120 bne.n 10016800 +100167be: f100 0804 add.w r8, r0, #4 +100167c2: 4640 mov r0, r8 +100167c4: f7ff f831 bl 1001582a +100167c8: 4a12 ldr r2, [pc, #72] ; (10016814 ) +100167ca: b948 cbnz r0, 100167e0 +100167cc: 6ae0 ldr r0, [r4, #44] ; 0x2c +100167ce: 4347 muls r7, r0 +100167d0: 59f3 ldr r3, [r6, r7] +100167d2: b92b cbnz r3, 100167e0 +100167d4: 2101 movs r1, #1 +100167d6: 6813 ldr r3, [r2, #0] +100167d8: 4081 lsls r1, r0 +100167da: ea23 0301 bic.w r3, r3, r1 +100167de: 6013 str r3, [r2, #0] +100167e0: 682b ldr r3, [r5, #0] +100167e2: 6811 ldr r1, [r2, #0] +100167e4: 6ad8 ldr r0, [r3, #44] ; 0x2c +100167e6: 2301 movs r3, #1 +100167e8: 4083 lsls r3, r0 +100167ea: 430b orrs r3, r1 +100167ec: 6013 str r3, [r2, #0] +100167ee: 2314 movs r3, #20 +100167f0: 62e0 str r0, [r4, #44] ; 0x2c +100167f2: 4641 mov r1, r8 +100167f4: fb03 6000 mla r0, r3, r0, r6 +100167f8: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +100167fc: f7fe bff2 b.w 100157e4 +10016800: 682b ldr r3, [r5, #0] +10016802: 6adb ldr r3, [r3, #44] ; 0x2c +10016804: 62c3 str r3, [r0, #44] ; 0x2c +10016806: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1001680a: bf00 nop +1001680c: 1004b3a8 .word 0x1004b3a8 +10016810: 1004b3b4 .word 0x1004b3b4 +10016814: 1004b4a8 .word 0x1004b4a8 + +10016818 : +10016818: b5f8 push {r3, r4, r5, r6, r7, lr} +1001681a: 4604 mov r4, r0 +1001681c: b908 cbnz r0, 10016822 +1001681e: 2000 movs r0, #0 +10016820: bdf8 pop {r3, r4, r5, r6, r7, pc} +10016822: 6cc3 ldr r3, [r0, #76] ; 0x4c +10016824: 6ac1 ldr r1, [r0, #44] ; 0x2c +10016826: 6c82 ldr r2, [r0, #72] ; 0x48 +10016828: 3b01 subs r3, #1 +1001682a: 4291 cmp r1, r2 +1001682c: 64c3 str r3, [r0, #76] ; 0x4c +1001682e: d0f6 beq.n 1001681e +10016830: 2b00 cmp r3, #0 +10016832: d1f4 bne.n 1001681e +10016834: 1d05 adds r5, r0, #4 +10016836: 4628 mov r0, r5 +10016838: f7fe fff7 bl 1001582a +1001683c: 4e10 ldr r6, [pc, #64] ; (10016880 ) +1001683e: 4a11 ldr r2, [pc, #68] ; (10016884 ) +10016840: b950 cbnz r0, 10016858 +10016842: 2114 movs r1, #20 +10016844: 6ae7 ldr r7, [r4, #44] ; 0x2c +10016846: 4379 muls r1, r7 +10016848: 5873 ldr r3, [r6, r1] +1001684a: b92b cbnz r3, 10016858 +1001684c: 2001 movs r0, #1 +1001684e: 6813 ldr r3, [r2, #0] +10016850: 40b8 lsls r0, r7 +10016852: ea23 0300 bic.w r3, r3, r0 +10016856: 6013 str r3, [r2, #0] +10016858: 6ca3 ldr r3, [r4, #72] ; 0x48 +1001685a: f1c3 010b rsb r1, r3, #11 +1001685e: 62e3 str r3, [r4, #44] ; 0x2c +10016860: 61a1 str r1, [r4, #24] +10016862: 2401 movs r4, #1 +10016864: 6811 ldr r1, [r2, #0] +10016866: fa04 f003 lsl.w r0, r4, r3 +1001686a: 4308 orrs r0, r1 +1001686c: 6010 str r0, [r2, #0] +1001686e: 2014 movs r0, #20 +10016870: 4629 mov r1, r5 +10016872: fb00 6003 mla r0, r0, r3, r6 +10016876: f7fe ffb5 bl 100157e4 +1001687a: 4620 mov r0, r4 +1001687c: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001687e: bf00 nop +10016880: 1004b3b4 .word 0x1004b3b4 +10016884: 1004b4a8 .word 0x1004b4a8 + +10016888 : +10016888: 4b04 ldr r3, [pc, #16] ; (1001689c ) +1001688a: 681a ldr r2, [r3, #0] +1001688c: 6990 ldr r0, [r2, #24] +1001688e: 681a ldr r2, [r3, #0] +10016890: 681b ldr r3, [r3, #0] +10016892: 6adb ldr r3, [r3, #44] ; 0x2c +10016894: f1c3 030b rsb r3, r3, #11 +10016898: 6193 str r3, [r2, #24] +1001689a: 4770 bx lr +1001689c: 1004b3a8 .word 0x1004b3a8 + +100168a0 : +100168a0: 4b04 ldr r3, [pc, #16] ; (100168b4 ) +100168a2: 681a ldr r2, [r3, #0] +100168a4: b11a cbz r2, 100168ae +100168a6: 6819 ldr r1, [r3, #0] +100168a8: 6cca ldr r2, [r1, #76] ; 0x4c +100168aa: 3201 adds r2, #1 +100168ac: 64ca str r2, [r1, #76] ; 0x4c +100168ae: 6818 ldr r0, [r3, #0] +100168b0: 4770 bx lr +100168b2: bf00 nop +100168b4: 1004b3a8 .word 0x1004b3a8 + +100168b8 : +100168b8: b5f8 push {r3, r4, r5, r6, r7, lr} +100168ba: 4c0d ldr r4, [pc, #52] ; (100168f0 ) +100168bc: f7fe fda2 bl 10015404 +100168c0: 6825 ldr r5, [r4, #0] +100168c2: b98d cbnz r5, 100168e8 +100168c4: 4f0b ldr r7, [pc, #44] ; (100168f4 ) +100168c6: 4e0c ldr r6, [pc, #48] ; (100168f8 ) +100168c8: 4638 mov r0, r7 +100168ca: f7fe ff7d bl 100157c8 +100168ce: 4630 mov r0, r6 +100168d0: f7fe ff7a bl 100157c8 +100168d4: 4b09 ldr r3, [pc, #36] ; (100168fc ) +100168d6: 462a mov r2, r5 +100168d8: 601f str r7, [r3, #0] +100168da: 4b09 ldr r3, [pc, #36] ; (10016900 ) +100168dc: 2110 movs r1, #16 +100168de: 200a movs r0, #10 +100168e0: 601e str r6, [r3, #0] +100168e2: f7ff f867 bl 100159b4 +100168e6: 6020 str r0, [r4, #0] +100168e8: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +100168ec: f7fe bd9a b.w 10015424 +100168f0: 1004b55c .word 0x1004b55c +100168f4: 1004b530 .word 0x1004b530 +100168f8: 1004b544 .word 0x1004b544 +100168fc: 1004b528 .word 0x1004b528 +10016900: 1004b52c .word 0x1004b52c + +10016904 : +10016904: 4291 cmp r1, r2 +10016906: b508 push {r3, lr} +10016908: 6041 str r1, [r0, #4] +1001690a: 6100 str r0, [r0, #16] +1001690c: d80a bhi.n 10016924 +1001690e: 1ad2 subs r2, r2, r3 +10016910: 6983 ldr r3, [r0, #24] +10016912: 429a cmp r2, r3 +10016914: d20d bcs.n 10016932 +10016916: 4b08 ldr r3, [pc, #32] ; (10016938 ) +10016918: 1d01 adds r1, r0, #4 +1001691a: 6818 ldr r0, [r3, #0] +1001691c: f7fe ff6e bl 100157fc +10016920: 2000 movs r0, #0 +10016922: bd08 pop {r3, pc} +10016924: 429a cmp r2, r3 +10016926: d201 bcs.n 1001692c +10016928: 4299 cmp r1, r3 +1001692a: d202 bcs.n 10016932 +1001692c: 1d01 adds r1, r0, #4 +1001692e: 4b03 ldr r3, [pc, #12] ; (1001693c ) +10016930: e7f3 b.n 1001691a +10016932: 2001 movs r0, #1 +10016934: bd08 pop {r3, pc} +10016936: bf00 nop +10016938: 1004b52c .word 0x1004b52c +1001693c: 1004b528 .word 0x1004b528 + +10016940 : +10016940: b51f push {r0, r1, r2, r3, r4, lr} +10016942: f7ff ffb9 bl 100168b8 +10016946: 4b09 ldr r3, [pc, #36] ; (1001696c ) +10016948: 6818 ldr r0, [r3, #0] +1001694a: 2300 movs r3, #0 +1001694c: b158 cbz r0, 10016966 +1001694e: 4a08 ldr r2, [pc, #32] ; (10016970 ) +10016950: 9303 str r3, [sp, #12] +10016952: 9201 str r2, [sp, #4] +10016954: 2201 movs r2, #1 +10016956: 9302 str r3, [sp, #8] +10016958: 9200 str r2, [sp, #0] +1001695a: 4906 ldr r1, [pc, #24] ; (10016974 ) +1001695c: f44f 7200 mov.w r2, #512 ; 0x200 +10016960: 4805 ldr r0, [pc, #20] ; (10016978 ) +10016962: f7ff fa77 bl 10015e54 +10016966: b005 add sp, #20 +10016968: f85d fb04 ldr.w pc, [sp], #4 +1001696c: 1004b55c .word 0x1004b55c +10016970: 1004b560 .word 0x1004b560 +10016974: 1004027b .word 0x1004027b +10016978: 10016a59 .word 0x10016a59 + +1001697c : +1001697c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10016980: 4680 mov r8, r0 +10016982: 202c movs r0, #44 ; 0x2c +10016984: 460f mov r7, r1 +10016986: 4616 mov r6, r2 +10016988: 461d mov r5, r3 +1001698a: f7fe fbe3 bl 10015154 +1001698e: 4604 mov r4, r0 +10016990: b158 cbz r0, 100169aa +10016992: f7ff ff91 bl 100168b8 +10016996: 9b06 ldr r3, [sp, #24] +10016998: f8c4 8000 str.w r8, [r4] +1001699c: 61a7 str r7, [r4, #24] +1001699e: 61e6 str r6, [r4, #28] +100169a0: 6225 str r5, [r4, #32] +100169a2: 6263 str r3, [r4, #36] ; 0x24 +100169a4: 1d20 adds r0, r4, #4 +100169a6: f7fe ff1a bl 100157de +100169aa: 4620 mov r0, r4 +100169ac: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +100169b0 : +100169b0: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +100169b2: 4c0e ldr r4, [pc, #56] ; (100169ec ) +100169b4: 4605 mov r5, r0 +100169b6: 6820 ldr r0, [r4, #0] +100169b8: 4616 mov r6, r2 +100169ba: 461a mov r2, r3 +100169bc: b178 cbz r0, 100169de +100169be: 2905 cmp r1, #5 +100169c0: e88d 0042 stmia.w sp, {r1, r6} +100169c4: 9502 str r5, [sp, #8] +100169c6: dc0c bgt.n 100169e2 +100169c8: f7ff fece bl 10016768 +100169cc: 2300 movs r3, #0 +100169ce: 2802 cmp r0, #2 +100169d0: bf0c ite eq +100169d2: 9a08 ldreq r2, [sp, #32] +100169d4: 461a movne r2, r3 +100169d6: 4669 mov r1, sp +100169d8: 6820 ldr r0, [r4, #0] +100169da: f7ff f80f bl 100159fc +100169de: b004 add sp, #16 +100169e0: bd70 pop {r4, r5, r6, pc} +100169e2: 2300 movs r3, #0 +100169e4: 4669 mov r1, sp +100169e6: f7ff f895 bl 10015b14 +100169ea: e7f8 b.n 100169de +100169ec: 1004b55c .word 0x1004b55c + +100169f0 : +100169f0: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +100169f4: f04f 0800 mov.w r8, #0 +100169f8: 4d15 ldr r5, [pc, #84] ; (10016a50 ) +100169fa: 682b ldr r3, [r5, #0] +100169fc: 681a ldr r2, [r3, #0] +100169fe: b932 cbnz r2, 10016a0e +10016a00: 4a14 ldr r2, [pc, #80] ; (10016a54 ) +10016a02: 6811 ldr r1, [r2, #0] +10016a04: 6013 str r3, [r2, #0] +10016a06: 6029 str r1, [r5, #0] +10016a08: b002 add sp, #8 +10016a0a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10016a0e: 68db ldr r3, [r3, #12] +10016a10: 68dc ldr r4, [r3, #12] +10016a12: 681e ldr r6, [r3, #0] +10016a14: 1d27 adds r7, r4, #4 +10016a16: 4638 mov r0, r7 +10016a18: f7fe ff07 bl 1001582a +10016a1c: 6a63 ldr r3, [r4, #36] ; 0x24 +10016a1e: 4620 mov r0, r4 +10016a20: 4798 blx r3 +10016a22: 69e3 ldr r3, [r4, #28] +10016a24: 2b01 cmp r3, #1 +10016a26: d1e8 bne.n 100169fa +10016a28: 69a3 ldr r3, [r4, #24] +10016a2a: 4433 add r3, r6 +10016a2c: 429e cmp r6, r3 +10016a2e: d206 bcs.n 10016a3e +10016a30: 6063 str r3, [r4, #4] +10016a32: 6124 str r4, [r4, #16] +10016a34: 4639 mov r1, r7 +10016a36: 6828 ldr r0, [r5, #0] +10016a38: f7fe fee0 bl 100157fc +10016a3c: e7dd b.n 100169fa +10016a3e: 2300 movs r3, #0 +10016a40: f8cd 8000 str.w r8, [sp] +10016a44: 4632 mov r2, r6 +10016a46: 4619 mov r1, r3 +10016a48: 4620 mov r0, r4 +10016a4a: f7ff ffb1 bl 100169b0 +10016a4e: e7d4 b.n 100169fa +10016a50: 1004b528 .word 0x1004b528 +10016a54: 1004b52c .word 0x1004b52c + +10016a58 : +10016a58: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10016a5c: f8df 8184 ldr.w r8, [pc, #388] ; 10016be4 +10016a60: b087 sub sp, #28 +10016a62: f8df b184 ldr.w fp, [pc, #388] ; 10016be8 +10016a66: f8db 2000 ldr.w r2, [fp] +10016a6a: 6817 ldr r7, [r2, #0] +10016a6c: 2f00 cmp r7, #0 +10016a6e: d06f beq.n 10016b50 +10016a70: 68d2 ldr r2, [r2, #12] +10016a72: f8d2 9000 ldr.w r9, [r2] +10016a76: f7ff fbd5 bl 10016224 +10016a7a: f7ff fbdb bl 10016234 +10016a7e: 4d56 ldr r5, [pc, #344] ; (10016bd8 ) +10016a80: 4682 mov sl, r0 +10016a82: 682a ldr r2, [r5, #0] +10016a84: 462e mov r6, r5 +10016a86: 4290 cmp r0, r2 +10016a88: d264 bcs.n 10016b54 +10016a8a: f7ff ffb1 bl 100169f0 +10016a8e: 2401 movs r4, #1 +10016a90: f8c5 a000 str.w sl, [r5] +10016a94: 4d51 ldr r5, [pc, #324] ; (10016bdc ) +10016a96: 2c00 cmp r4, #0 +10016a98: d178 bne.n 10016b8c +10016a9a: 2f00 cmp r7, #0 +10016a9c: d05c beq.n 10016b58 +10016a9e: 45d1 cmp r9, sl +10016aa0: d872 bhi.n 10016b88 +10016aa2: f7ff fc69 bl 10016378 +10016aa6: f8db 3000 ldr.w r3, [fp] +10016aaa: 68db ldr r3, [r3, #12] +10016aac: f8d3 b00c ldr.w fp, [r3, #12] +10016ab0: f10b 0004 add.w r0, fp, #4 +10016ab4: f7fe feb9 bl 1001582a +10016ab8: f8db 301c ldr.w r3, [fp, #28] +10016abc: 2b01 cmp r3, #1 +10016abe: d10f bne.n 10016ae0 +10016ac0: f8db 1018 ldr.w r1, [fp, #24] +10016ac4: 464b mov r3, r9 +10016ac6: 4652 mov r2, sl +10016ac8: 4449 add r1, r9 +10016aca: 4658 mov r0, fp +10016acc: f7ff ff1a bl 10016904 +10016ad0: b130 cbz r0, 10016ae0 +10016ad2: 9400 str r4, [sp, #0] +10016ad4: 4623 mov r3, r4 +10016ad6: 464a mov r2, r9 +10016ad8: 4621 mov r1, r4 +10016ada: 4658 mov r0, fp +10016adc: f7ff ff68 bl 100169b0 +10016ae0: f8db 3024 ldr.w r3, [fp, #36] ; 0x24 +10016ae4: 4658 mov r0, fp +10016ae6: 4798 blx r3 +10016ae8: 2300 movs r3, #0 +10016aea: a902 add r1, sp, #8 +10016aec: 461a mov r2, r3 +10016aee: 6828 ldr r0, [r5, #0] +10016af0: f7ff f872 bl 10015bd8 +10016af4: 2800 cmp r0, #0 +10016af6: d0b4 beq.n 10016a62 +10016af8: 9b02 ldr r3, [sp, #8] +10016afa: 2b00 cmp r3, #0 +10016afc: da03 bge.n 10016b06 +10016afe: 9905 ldr r1, [sp, #20] +10016b00: 9804 ldr r0, [sp, #16] +10016b02: 9b03 ldr r3, [sp, #12] +10016b04: 4798 blx r3 +10016b06: 9b02 ldr r3, [sp, #8] +10016b08: 2b00 cmp r3, #0 +10016b0a: dbed blt.n 10016ae8 +10016b0c: 9c04 ldr r4, [sp, #16] +10016b0e: 6963 ldr r3, [r4, #20] +10016b10: b113 cbz r3, 10016b18 +10016b12: 1d20 adds r0, r4, #4 +10016b14: f7fe fe89 bl 1001582a +10016b18: f7ff fb8c bl 10016234 +10016b1c: 6833 ldr r3, [r6, #0] +10016b1e: 4681 mov r9, r0 +10016b20: 4298 cmp r0, r3 +10016b22: d201 bcs.n 10016b28 +10016b24: f7ff ff64 bl 100169f0 +10016b28: 9b02 ldr r3, [sp, #8] +10016b2a: f8c6 9000 str.w r9, [r6] +10016b2e: 2b09 cmp r3, #9 +10016b30: d8da bhi.n 10016ae8 +10016b32: 2201 movs r2, #1 +10016b34: fa02 f303 lsl.w r3, r2, r3 +10016b38: f413 7a04 ands.w sl, r3, #528 ; 0x210 +10016b3c: d143 bne.n 10016bc6 +10016b3e: f013 0fc7 tst.w r3, #199 ; 0xc7 +10016b42: d126 bne.n 10016b92 +10016b44: 069b lsls r3, r3, #26 +10016b46: d5cf bpl.n 10016ae8 +10016b48: 4620 mov r0, r4 +10016b4a: f7fe fb9f bl 1001528c +10016b4e: e7cb b.n 10016ae8 +10016b50: 46b9 mov r9, r7 +10016b52: e790 b.n 10016a76 +10016b54: 2400 movs r4, #0 +10016b56: e79b b.n 10016a90 +10016b58: 4b21 ldr r3, [pc, #132] ; (10016be0 ) +10016b5a: 681b ldr r3, [r3, #0] +10016b5c: 681a ldr r2, [r3, #0] +10016b5e: fab2 f282 clz r2, r2 +10016b62: 0952 lsrs r2, r2, #5 +10016b64: eba9 010a sub.w r1, r9, sl +10016b68: 6828 ldr r0, [r5, #0] +10016b6a: f7ff f8da bl 10015d22 +10016b6e: f7ff fc03 bl 10016378 +10016b72: 2800 cmp r0, #0 +10016b74: d1b8 bne.n 10016ae8 +10016b76: f04f 5380 mov.w r3, #268435456 ; 0x10000000 +10016b7a: f8c8 3000 str.w r3, [r8] +10016b7e: f3bf 8f4f dsb sy +10016b82: f3bf 8f6f isb sy +10016b86: e7af b.n 10016ae8 +10016b88: 4622 mov r2, r4 +10016b8a: e7eb b.n 10016b64 +10016b8c: f7ff fbf4 bl 10016378 +10016b90: e7aa b.n 10016ae8 +10016b92: 69a1 ldr r1, [r4, #24] +10016b94: 9b03 ldr r3, [sp, #12] +10016b96: 464a mov r2, r9 +10016b98: 4419 add r1, r3 +10016b9a: 4620 mov r0, r4 +10016b9c: f7ff feb2 bl 10016904 +10016ba0: 2800 cmp r0, #0 +10016ba2: d0a1 beq.n 10016ae8 +10016ba4: 6a63 ldr r3, [r4, #36] ; 0x24 +10016ba6: 4620 mov r0, r4 +10016ba8: 4798 blx r3 +10016baa: 69e3 ldr r3, [r4, #28] +10016bac: 2b01 cmp r3, #1 +10016bae: d19b bne.n 10016ae8 +10016bb0: 69a2 ldr r2, [r4, #24] +10016bb2: 9903 ldr r1, [sp, #12] +10016bb4: f8cd a000 str.w sl, [sp] +10016bb8: 440a add r2, r1 +10016bba: 4653 mov r3, sl +10016bbc: 4651 mov r1, sl +10016bbe: 4620 mov r0, r4 +10016bc0: f7ff fef6 bl 100169b0 +10016bc4: e790 b.n 10016ae8 +10016bc6: 9903 ldr r1, [sp, #12] +10016bc8: 464b mov r3, r9 +10016bca: 61a1 str r1, [r4, #24] +10016bcc: 464a mov r2, r9 +10016bce: 4449 add r1, r9 +10016bd0: 4620 mov r0, r4 +10016bd2: f7ff fe97 bl 10016904 +10016bd6: e787 b.n 10016ae8 +10016bd8: 1004b558 .word 0x1004b558 +10016bdc: 1004b55c .word 0x1004b55c +10016be0: 1004b52c .word 0x1004b52c +10016be4: e000ed04 .word 0xe000ed04 +10016be8: 1004b528 .word 0x1004b528 + +10016bec : +10016bec: b510 push {r4, lr} +10016bee: 4604 mov r4, r0 +10016bf0: f7fe fc08 bl 10015404 +10016bf4: 6964 ldr r4, [r4, #20] +10016bf6: 3400 adds r4, #0 +10016bf8: bf18 it ne +10016bfa: 2401 movne r4, #1 +10016bfc: f7fe fc12 bl 10015424 +10016c00: 4620 mov r0, r4 +10016c02: bd10 pop {r4, pc} + +10016c04 : +10016c04: b510 push {r4, lr} +10016c06: 4604 mov r4, r0 +10016c08: f7fe fbfc bl 10015404 +10016c0c: 6a24 ldr r4, [r4, #32] +10016c0e: f7fe fc09 bl 10015424 +10016c12: 4620 mov r0, r4 +10016c14: bd10 pop {r4, pc} + ... + +10016c18 : +10016c18: b51f push {r0, r1, r2, r3, r4, lr} +10016c1a: 461c mov r4, r3 +10016c1c: f06f 0301 mvn.w r3, #1 +10016c20: 9001 str r0, [sp, #4] +10016c22: 4806 ldr r0, [pc, #24] ; (10016c3c ) +10016c24: 9300 str r3, [sp, #0] +10016c26: 9102 str r1, [sp, #8] +10016c28: 9203 str r2, [sp, #12] +10016c2a: 2300 movs r3, #0 +10016c2c: 4622 mov r2, r4 +10016c2e: 4669 mov r1, sp +10016c30: 6800 ldr r0, [r0, #0] +10016c32: f7fe ff6f bl 10015b14 +10016c36: b004 add sp, #16 +10016c38: bd10 pop {r4, pc} +10016c3a: bf00 nop +10016c3c: 1004b55c .word 0x1004b55c + +10016c40 : +10016c40: b573 push {r0, r1, r4, r5, r6, lr} +10016c42: 2401 movs r4, #1 +10016c44: 4d0d ldr r5, [pc, #52] ; (10016c7c ) +10016c46: 4084 lsls r4, r0 +10016c48: 682b ldr r3, [r5, #0] +10016c4a: 4606 mov r6, r0 +10016c4c: 421c tst r4, r3 +10016c4e: d112 bne.n 10016c76 +10016c50: a901 add r1, sp, #4 +10016c52: 4668 mov r0, sp +10016c54: f000 fc84 bl 10017560 +10016c58: 682b ldr r3, [r5, #0] +10016c5a: 421c tst r4, r3 +10016c5c: d107 bne.n 10016c6e +10016c5e: 4808 ldr r0, [pc, #32] ; (10016c80 ) +10016c60: eb00 0086 add.w r0, r0, r6, lsl #2 +10016c64: f000 fc4a bl 100174fc +10016c68: 682b ldr r3, [r5, #0] +10016c6a: 431c orrs r4, r3 +10016c6c: 602c str r4, [r5, #0] +10016c6e: a901 add r1, sp, #4 +10016c70: 4668 mov r0, sp +10016c72: f000 fc7f bl 10017574 +10016c76: b002 add sp, #8 +10016c78: bd70 pop {r4, r5, r6, pc} +10016c7a: bf00 nop +10016c7c: 1004b574 .word 0x1004b574 +10016c80: 1004b564 .word 0x1004b564 + +10016c84 : +10016c84: b570 push {r4, r5, r6, lr} +10016c86: 4605 mov r5, r0 +10016c88: f7ff ffda bl 10016c40 +10016c8c: 4c08 ldr r4, [pc, #32] ; (10016cb0 ) +10016c8e: 4e09 ldr r6, [pc, #36] ; (10016cb4 ) +10016c90: eb04 0485 add.w r4, r4, r5, lsl #2 +10016c94: f242 7110 movw r1, #10000 ; 0x2710 +10016c98: 4620 mov r0, r4 +10016c9a: f000 fc4f bl 1001753c +10016c9e: 2800 cmp r0, #0 +10016ca0: db00 blt.n 10016ca4 +10016ca2: bd70 pop {r4, r5, r6, pc} +10016ca4: 4629 mov r1, r5 +10016ca6: 4630 mov r0, r6 +10016ca8: f003 ff6a bl 1001ab80 +10016cac: e7f2 b.n 10016c94 +10016cae: bf00 nop +10016cb0: 1004b564 .word 0x1004b564 +10016cb4: 10040283 .word 0x10040283 + +10016cb8 : +10016cb8: b510 push {r4, lr} +10016cba: 4604 mov r4, r0 +10016cbc: f7ff ffc0 bl 10016c40 +10016cc0: 4803 ldr r0, [pc, #12] ; (10016cd0 ) +10016cc2: eb00 0084 add.w r0, r0, r4, lsl #2 +10016cc6: e8bd 4010 ldmia.w sp!, {r4, lr} +10016cca: f000 bc27 b.w 1001751c +10016cce: bf00 nop +10016cd0: 1004b564 .word 0x1004b564 + +10016cd4 <_freertos_enter_critical_from_isr>: +10016cd4: f3ef 8211 mrs r2, BASEPRI +10016cd8: f04f 0350 mov.w r3, #80 ; 0x50 +10016cdc: f383 8811 msr BASEPRI, r3 +10016ce0: f3bf 8f6f isb sy +10016ce4: f3bf 8f4f dsb sy +10016ce8: 4b01 ldr r3, [pc, #4] ; (10016cf0 <_freertos_enter_critical_from_isr+0x1c>) +10016cea: 601a str r2, [r3, #0] +10016cec: 4770 bx lr +10016cee: bf00 nop +10016cf0: 1004b578 .word 0x1004b578 + +10016cf4 <_freertos_exit_critical_from_isr>: +10016cf4: 4b02 ldr r3, [pc, #8] ; (10016d00 <_freertos_exit_critical_from_isr+0xc>) +10016cf6: 681b ldr r3, [r3, #0] +10016cf8: f383 8811 msr BASEPRI, r3 +10016cfc: 4770 bx lr +10016cfe: bf00 nop +10016d00: 1004b578 .word 0x1004b578 + +10016d04 <_freertos_systime_to_sec>: +10016d04: f44f 737a mov.w r3, #1000 ; 0x3e8 +10016d08: fbb0 f0f3 udiv r0, r0, r3 +10016d0c: 4770 bx lr + +10016d0e <_freertos_ms_to_systime>: +10016d0e: 4770 bx lr + +10016d10 <_freertos_sec_to_systime>: +10016d10: f44f 737a mov.w r3, #1000 ; 0x3e8 +10016d14: 4358 muls r0, r3 +10016d16: 4770 bx lr + +10016d18 <_freertos_yield_os>: +10016d18: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +10016d1c: 4b03 ldr r3, [pc, #12] ; (10016d2c <_freertos_yield_os+0x14>) +10016d1e: 601a str r2, [r3, #0] +10016d20: f3bf 8f4f dsb sy +10016d24: f3bf 8f6f isb sy +10016d28: 4770 bx lr +10016d2a: bf00 nop +10016d2c: e000ed04 .word 0xe000ed04 + +10016d30 <_freertos_ATOMIC_SET>: +10016d30: 6001 str r1, [r0, #0] +10016d32: 4770 bx lr + +10016d34 <_freertos_ATOMIC_READ>: +10016d34: 6800 ldr r0, [r0, #0] +10016d36: 4770 bx lr + +10016d38 <_freertos_modular64>: +10016d38: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +10016d3c: 460e mov r6, r1 +10016d3e: 2700 movs r7, #0 +10016d40: ea56 0407 orrs.w r4, r6, r7 +10016d44: d106 bne.n 10016d54 <_freertos_modular64+0x1c> +10016d46: fbb0 f3f2 udiv r3, r0, r2 +10016d4a: fb03 0012 mls r0, r3, r2, r0 +10016d4e: 2100 movs r1, #0 +10016d50: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +10016d54: 428a cmp r2, r1 +10016d56: 4614 mov r4, r2 +10016d58: f04f 0500 mov.w r5, #0 +10016d5c: d806 bhi.n 10016d6c <_freertos_modular64+0x34> +10016d5e: fbb1 f3f2 udiv r3, r1, r2 +10016d62: fb03 f902 mul.w r9, r3, r2 +10016d66: 1bc0 subs r0, r0, r7 +10016d68: eb61 0109 sbc.w r1, r1, r9 +10016d6c: 2201 movs r2, #1 +10016d6e: 2300 movs r3, #0 +10016d70: ea54 0605 orrs.w r6, r4, r5 +10016d74: d003 beq.n 10016d7e <_freertos_modular64+0x46> +10016d76: 428d cmp r5, r1 +10016d78: bf08 it eq +10016d7a: 4284 cmpeq r4, r0 +10016d7c: d310 bcc.n 10016da0 <_freertos_modular64+0x68> +10016d7e: 42a9 cmp r1, r5 +10016d80: bf08 it eq +10016d82: 42a0 cmpeq r0, r4 +10016d84: d302 bcc.n 10016d8c <_freertos_modular64+0x54> +10016d86: 1b00 subs r0, r0, r4 +10016d88: eb61 0105 sbc.w r1, r1, r5 +10016d8c: 085b lsrs r3, r3, #1 +10016d8e: ea4f 0232 mov.w r2, r2, rrx +10016d92: 086d lsrs r5, r5, #1 +10016d94: ea4f 0434 mov.w r4, r4, rrx +10016d98: ea52 0603 orrs.w r6, r2, r3 +10016d9c: d1ef bne.n 10016d7e <_freertos_modular64+0x46> +10016d9e: e7d6 b.n 10016d4e <_freertos_modular64+0x16> +10016da0: 1924 adds r4, r4, r4 +10016da2: 416d adcs r5, r5 +10016da4: 1892 adds r2, r2, r2 +10016da6: 415b adcs r3, r3 +10016da8: e7e2 b.n 10016d70 <_freertos_modular64+0x38> + +10016daa <_freertos_thread_enter>: +10016daa: 4770 bx lr + +10016dac <_freertos_wakelock_timeout>: +10016dac: 4770 bx lr + +10016dae <_freertos_enter_critical>: +10016dae: f7fe bb29 b.w 10015404 + +10016db2 <_freertos_exit_critical>: +10016db2: f7fe bb37 b.w 10015424 + +10016db6 <_freertos_ATOMIC_SUB_RETURN>: +10016db6: b570 push {r4, r5, r6, lr} +10016db8: 4605 mov r5, r0 +10016dba: 460e mov r6, r1 +10016dbc: f7fe fb22 bl 10015404 +10016dc0: 682c ldr r4, [r5, #0] +10016dc2: 1ba4 subs r4, r4, r6 +10016dc4: 602c str r4, [r5, #0] +10016dc6: f7fe fb2d bl 10015424 +10016dca: 4620 mov r0, r4 +10016dcc: bd70 pop {r4, r5, r6, pc} + +10016dce <_freertos_ATOMIC_DEC_RETURN>: +10016dce: b538 push {r3, r4, r5, lr} +10016dd0: 4605 mov r5, r0 +10016dd2: f7fe fb17 bl 10015404 +10016dd6: 682c ldr r4, [r5, #0] +10016dd8: 3c01 subs r4, #1 +10016dda: 602c str r4, [r5, #0] +10016ddc: f7fe fb22 bl 10015424 +10016de0: 4620 mov r0, r4 +10016de2: bd38 pop {r3, r4, r5, pc} + +10016de4 <_freertos_ATOMIC_ADD_RETURN>: +10016de4: b570 push {r4, r5, r6, lr} +10016de6: 4605 mov r5, r0 +10016de8: 460e mov r6, r1 +10016dea: f7fe fb0b bl 10015404 +10016dee: 682c ldr r4, [r5, #0] +10016df0: 4434 add r4, r6 +10016df2: 602c str r4, [r5, #0] +10016df4: f7fe fb16 bl 10015424 +10016df8: 4620 mov r0, r4 +10016dfa: bd70 pop {r4, r5, r6, pc} + +10016dfc <_freertos_ATOMIC_INC_RETURN>: +10016dfc: b538 push {r3, r4, r5, lr} +10016dfe: 4605 mov r5, r0 +10016e00: f7fe fb00 bl 10015404 +10016e04: 682c ldr r4, [r5, #0] +10016e06: 3401 adds r4, #1 +10016e08: 602c str r4, [r5, #0] +10016e0a: f7fe fb0b bl 10015424 +10016e0e: 4620 mov r0, r4 +10016e10: bd38 pop {r3, r4, r5, pc} + +10016e12 <_freertos_ATOMIC_SUB>: +10016e12: b538 push {r3, r4, r5, lr} +10016e14: 4604 mov r4, r0 +10016e16: 460d mov r5, r1 +10016e18: f7fe faf4 bl 10015404 +10016e1c: 6823 ldr r3, [r4, #0] +10016e1e: 1b5b subs r3, r3, r5 +10016e20: 6023 str r3, [r4, #0] +10016e22: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10016e26: f7fe bafd b.w 10015424 + +10016e2a <_freertos_ATOMIC_DEC>: +10016e2a: 2101 movs r1, #1 +10016e2c: f7ff bff1 b.w 10016e12 <_freertos_ATOMIC_SUB> + +10016e30 <_freertos_ATOMIC_ADD>: +10016e30: b538 push {r3, r4, r5, lr} +10016e32: 4604 mov r4, r0 +10016e34: 460d mov r5, r1 +10016e36: f7fe fae5 bl 10015404 +10016e3a: 6823 ldr r3, [r4, #0] +10016e3c: 442b add r3, r5 +10016e3e: 6023 str r3, [r4, #0] +10016e40: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10016e44: f7fe baee b.w 10015424 + +10016e48 <_freertos_ATOMIC_INC>: +10016e48: 2101 movs r1, #1 +10016e4a: f7ff bff1 b.w 10016e30 <_freertos_ATOMIC_ADD> + +10016e4e <_freertos_malloc>: +10016e4e: f7fe b981 b.w 10015154 + +10016e52 <_freertos_zmalloc>: +10016e52: b538 push {r3, r4, r5, lr} +10016e54: 4605 mov r5, r0 +10016e56: f7fe f97d bl 10015154 +10016e5a: 4604 mov r4, r0 +10016e5c: b118 cbz r0, 10016e66 <_freertos_zmalloc+0x14> +10016e5e: 462a mov r2, r5 +10016e60: 2100 movs r1, #0 +10016e62: f003 feb9 bl 1001abd8 +10016e66: 4620 mov r0, r4 +10016e68: bd38 pop {r3, r4, r5, pc} + +10016e6a <_freertos_memset>: +10016e6a: f003 beb5 b.w 1001abd8 + +10016e6e <_freertos_mfree>: +10016e6e: f7fe ba0d b.w 1001528c + +10016e72 <_freertos_spinunlock_irqsave>: +10016e72: b508 push {r3, lr} +10016e74: 2300 movs r3, #0 +10016e76: 6800 ldr r0, [r0, #0] +10016e78: 461a mov r2, r3 +10016e7a: 4619 mov r1, r3 +10016e7c: f7fe fdbe bl 100159fc +10016e80: e8bd 4008 ldmia.w sp!, {r3, lr} +10016e84: f7fe bace b.w 10015424 + +10016e88 <_freertos_spinunlock>: +10016e88: 2300 movs r3, #0 +10016e8a: 6800 ldr r0, [r0, #0] +10016e8c: 461a mov r2, r3 +10016e8e: 4619 mov r1, r3 +10016e90: f7fe bdb4 b.w 100159fc + +10016e94 <_freertos_mutex_put>: +10016e94: f7ff bff8 b.w 10016e88 <_freertos_spinunlock> + +10016e98 <_freertos_wakeup_task>: +10016e98: 3008 adds r0, #8 +10016e9a: f7ff bff5 b.w 10016e88 <_freertos_spinunlock> + +10016e9e <_freertos_up_sema>: +10016e9e: f7ff bff3 b.w 10016e88 <_freertos_spinunlock> + +10016ea2 <_freertos_exit_critical_mutex>: +10016ea2: 2300 movs r3, #0 +10016ea4: 6800 ldr r0, [r0, #0] +10016ea6: 461a mov r2, r3 +10016ea8: 4619 mov r1, r3 +10016eaa: f7fe bda7 b.w 100159fc + +10016eae <_freertos_timerCreate>: +10016eae: f7ff bd65 b.w 1001697c + +10016eb2 <_freertos_timerDelete>: +10016eb2: 2300 movs r3, #0 +10016eb4: b507 push {r0, r1, r2, lr} +10016eb6: 461a mov r2, r3 +10016eb8: 9100 str r1, [sp, #0] +10016eba: 2105 movs r1, #5 +10016ebc: f7ff fd78 bl 100169b0 +10016ec0: b003 add sp, #12 +10016ec2: f85d fb04 ldr.w pc, [sp], #4 + +10016ec6 <_freertos_timerStop>: +10016ec6: 2300 movs r3, #0 +10016ec8: b507 push {r0, r1, r2, lr} +10016eca: 461a mov r2, r3 +10016ecc: 9100 str r1, [sp, #0] +10016ece: 2103 movs r1, #3 +10016ed0: f7ff fd6e bl 100169b0 +10016ed4: b003 add sp, #12 +10016ed6: f85d fb04 ldr.w pc, [sp], #4 + +10016eda <_freertos_timerChangePeriod>: +10016eda: 2300 movs r3, #0 +10016edc: b507 push {r0, r1, r2, lr} +10016ede: 9200 str r2, [sp, #0] +10016ee0: 4299 cmp r1, r3 +10016ee2: bf14 ite ne +10016ee4: 460a movne r2, r1 +10016ee6: 2201 moveq r2, #1 +10016ee8: 2104 movs r1, #4 +10016eea: f7ff fd61 bl 100169b0 +10016eee: b003 add sp, #12 +10016ef0: f85d fb04 ldr.w pc, [sp], #4 + +10016ef4 <_freertos_timerStopFromISR>: +10016ef4: b507 push {r0, r1, r2, lr} +10016ef6: 2200 movs r2, #0 +10016ef8: 460b mov r3, r1 +10016efa: 9200 str r2, [sp, #0] +10016efc: 2108 movs r1, #8 +10016efe: f7ff fd57 bl 100169b0 +10016f02: b003 add sp, #12 +10016f04: f85d fb04 ldr.w pc, [sp], #4 + +10016f08 <_freertos_timerChangePeriodFromISR>: +10016f08: 2300 movs r3, #0 +10016f0a: b507 push {r0, r1, r2, lr} +10016f0c: 9300 str r3, [sp, #0] +10016f0e: 4613 mov r3, r2 +10016f10: 2900 cmp r1, #0 +10016f12: bf14 ite ne +10016f14: 460a movne r2, r1 +10016f16: 2201 moveq r2, #1 +10016f18: 2109 movs r1, #9 +10016f1a: f7ff fd49 bl 100169b0 +10016f1e: b003 add sp, #12 +10016f20: f85d fb04 ldr.w pc, [sp], #4 + +10016f24 <_freertos_timerIsTimerActive>: +10016f24: f7ff be62 b.w 10016bec + +10016f28 <_freertos_timerGetID>: +10016f28: f7ff be6c b.w 10016c04 + +10016f2c <_freertos_timerStart>: +10016f2c: b537 push {r0, r1, r2, r4, r5, lr} +10016f2e: 460d mov r5, r1 +10016f30: 4604 mov r4, r0 +10016f32: f7ff f97f bl 10016234 +10016f36: 9500 str r5, [sp, #0] +10016f38: 4602 mov r2, r0 +10016f3a: 2300 movs r3, #0 +10016f3c: 2101 movs r1, #1 +10016f3e: 4620 mov r0, r4 +10016f40: f7ff fd36 bl 100169b0 +10016f44: b003 add sp, #12 +10016f46: bd30 pop {r4, r5, pc} + +10016f48 <_freertos_timerReset>: +10016f48: b537 push {r0, r1, r2, r4, r5, lr} +10016f4a: 460d mov r5, r1 +10016f4c: 4604 mov r4, r0 +10016f4e: f7ff f971 bl 10016234 +10016f52: 9500 str r5, [sp, #0] +10016f54: 4602 mov r2, r0 +10016f56: 2300 movs r3, #0 +10016f58: 2102 movs r1, #2 +10016f5a: 4620 mov r0, r4 +10016f5c: f7ff fd28 bl 100169b0 +10016f60: b003 add sp, #12 +10016f62: bd30 pop {r4, r5, pc} + +10016f64 <_freertos_arc4random>: +10016f64: b510 push {r4, lr} +10016f66: f7ff f965 bl 10016234 +10016f6a: 4907 ldr r1, [pc, #28] ; (10016f88 <_freertos_arc4random+0x24>) +10016f6c: 4b07 ldr r3, [pc, #28] ; (10016f8c <_freertos_arc4random+0x28>) +10016f6e: 680c ldr r4, [r1, #0] +10016f70: 4a07 ldr r2, [pc, #28] ; (10016f90 <_freertos_arc4random+0x2c>) +10016f72: ea03 13c4 and.w r3, r3, r4, lsl #7 +10016f76: ea02 2214 and.w r2, r2, r4, lsr #8 +10016f7a: 4053 eors r3, r2 +10016f7c: ea83 3340 eor.w r3, r3, r0, lsl #13 +10016f80: ea83 2050 eor.w r0, r3, r0, lsr #9 +10016f84: 6008 str r0, [r1, #0] +10016f86: bd10 pop {r4, pc} +10016f88: 10044f0c .word 0x10044f0c +10016f8c: 3f807f80 .word 0x3f807f80 +10016f90: 000f80ff .word 0x000f80ff + +10016f94 <_freertos_get_current_time>: +10016f94: f7ff b94e b.w 10016234 + +10016f98 <_freertos_timerStartFromISR>: +10016f98: b537 push {r0, r1, r2, r4, r5, lr} +10016f9a: 460d mov r5, r1 +10016f9c: 4604 mov r4, r0 +10016f9e: f7ff f94f bl 10016240 +10016fa2: 2300 movs r3, #0 +10016fa4: 4602 mov r2, r0 +10016fa6: 9300 str r3, [sp, #0] +10016fa8: 2106 movs r1, #6 +10016faa: 462b mov r3, r5 +10016fac: 4620 mov r0, r4 +10016fae: f7ff fcff bl 100169b0 +10016fb2: b003 add sp, #12 +10016fb4: bd30 pop {r4, r5, pc} + +10016fb6 <_freertos_timerResetFromISR>: +10016fb6: b537 push {r0, r1, r2, r4, r5, lr} +10016fb8: 460d mov r5, r1 +10016fba: 4604 mov r4, r0 +10016fbc: f7ff f940 bl 10016240 +10016fc0: 2300 movs r3, #0 +10016fc2: 4602 mov r2, r0 +10016fc4: 9300 str r3, [sp, #0] +10016fc6: 2107 movs r1, #7 +10016fc8: 462b mov r3, r5 +10016fca: 4620 mov r0, r4 +10016fcc: f7ff fcf0 bl 100169b0 +10016fd0: b003 add sp, #12 +10016fd2: bd30 pop {r4, r5, pc} + +10016fd4 <_freertos_acquire_wakelock>: +10016fd4: 2002 movs r0, #2 +10016fd6: f002 b807 b.w 10018fe8 + +10016fda <_freertos_release_wakelock>: +10016fda: 2002 movs r0, #2 +10016fdc: f002 b824 b.w 10019028 + +10016fe0 <_freertos_get_scheduler_state>: +10016fe0: b508 push {r3, lr} +10016fe2: f7ff fbc1 bl 10016768 +10016fe6: b2c0 uxtb r0, r0 +10016fe8: 2801 cmp r0, #1 +10016fea: d005 beq.n 10016ff8 <_freertos_get_scheduler_state+0x18> +10016fec: 2802 cmp r0, #2 +10016fee: d005 beq.n 10016ffc <_freertos_get_scheduler_state+0x1c> +10016ff0: 2800 cmp r0, #0 +10016ff2: bf08 it eq +10016ff4: 2002 moveq r0, #2 +10016ff6: bd08 pop {r3, pc} +10016ff8: 2000 movs r0, #0 +10016ffa: bd08 pop {r3, pc} +10016ffc: 2001 movs r0, #1 +10016ffe: bd08 pop {r3, pc} + +10017000 <_freertos_thread_exit>: +10017000: 2000 movs r0, #0 +10017002: f7ff b809 b.w 10016018 + +10017006 <_freertos_GetFreeHeapSize>: +10017006: f7fe b959 b.w 100152bc + +1001700a <_freertos_udelay_os>: +1001700a: f001 b9a3 b.w 10018354 + +1001700e <_freertos_mdelay_os>: +1001700e: f7ff ba1f b.w 10016450 + +10017012 <_freertos_deinit_xqueue>: +10017012: b538 push {r3, r4, r5, lr} +10017014: 4605 mov r5, r0 +10017016: f7fe fe79 bl 10015d0c +1001701a: 4604 mov r4, r0 +1001701c: 6828 ldr r0, [r5, #0] +1001701e: f7fe fe7e bl 10015d1e +10017022: 1c20 adds r0, r4, #0 +10017024: bf18 it ne +10017026: 2001 movne r0, #1 +10017028: 4240 negs r0, r0 +1001702a: bd38 pop {r3, r4, r5, pc} + +1001702c <_freertos_spinlock_free>: +1001702c: b510 push {r4, lr} +1001702e: 4604 mov r4, r0 +10017030: 6800 ldr r0, [r0, #0] +10017032: b108 cbz r0, 10017038 <_freertos_spinlock_free+0xc> +10017034: f7fe fe73 bl 10015d1e +10017038: 2300 movs r3, #0 +1001703a: 6023 str r3, [r4, #0] +1001703c: bd10 pop {r4, pc} + +1001703e <_freertos_mutex_free>: +1001703e: f7ff bff5 b.w 1001702c <_freertos_spinlock_free> + +10017042 <_freertos_free_sema>: +10017042: f7ff bff3 b.w 1001702c <_freertos_spinlock_free> + +10017046 <_freertos_push_to_xqueue>: +10017046: b538 push {r3, r4, r5, lr} +10017048: 1c53 adds r3, r2, #1 +1001704a: 4604 mov r4, r0 +1001704c: 460d mov r5, r1 +1001704e: d003 beq.n 10017058 <_freertos_push_to_xqueue+0x12> +10017050: 4610 mov r0, r2 +10017052: f000 faf1 bl 10017638 +10017056: 4602 mov r2, r0 +10017058: 2300 movs r3, #0 +1001705a: 4629 mov r1, r5 +1001705c: 6820 ldr r0, [r4, #0] +1001705e: f7fe fccd bl 100159fc +10017062: f110 30ff adds.w r0, r0, #4294967295 +10017066: bf18 it ne +10017068: f04f 30ff movne.w r0, #4294967295 +1001706c: bd38 pop {r3, r4, r5, pc} + +1001706e <_freertos_pop_from_xqueue>: +1001706e: b538 push {r3, r4, r5, lr} +10017070: 1c53 adds r3, r2, #1 +10017072: 4604 mov r4, r0 +10017074: 460d mov r5, r1 +10017076: d003 beq.n 10017080 <_freertos_pop_from_xqueue+0x12> +10017078: 4610 mov r0, r2 +1001707a: f000 fadd bl 10017638 +1001707e: 4602 mov r2, r0 +10017080: 2300 movs r3, #0 +10017082: 4629 mov r1, r5 +10017084: 6820 ldr r0, [r4, #0] +10017086: f7fe fda7 bl 10015bd8 +1001708a: f110 30ff adds.w r0, r0, #4294967295 +1001708e: bf18 it ne +10017090: f04f 30ff movne.w r0, #4294967295 +10017094: bd38 pop {r3, r4, r5, pc} + +10017096 <_freertos_down_sema>: +10017096: 1c4a adds r2, r1, #1 +10017098: b510 push {r4, lr} +1001709a: 4604 mov r4, r0 +1001709c: 4608 mov r0, r1 +1001709e: d001 beq.n 100170a4 <_freertos_down_sema+0xe> +100170a0: f000 faca bl 10017638 +100170a4: 2300 movs r3, #0 +100170a6: 4602 mov r2, r0 +100170a8: 4619 mov r1, r3 +100170aa: 6820 ldr r0, [r4, #0] +100170ac: f7fe fd94 bl 10015bd8 +100170b0: 1e43 subs r3, r0, #1 +100170b2: 4258 negs r0, r3 +100170b4: 4158 adcs r0, r3 +100170b6: bd10 pop {r4, pc} + +100170b8 <_freertos_init_xqueue>: +100170b8: b510 push {r4, lr} +100170ba: 4611 mov r1, r2 +100170bc: 4604 mov r4, r0 +100170be: 2200 movs r2, #0 +100170c0: 4618 mov r0, r3 +100170c2: f7fe fc77 bl 100159b4 +100170c6: 6020 str r0, [r4, #0] +100170c8: fab0 f080 clz r0, r0 +100170cc: 0940 lsrs r0, r0, #5 +100170ce: 4240 negs r0, r0 +100170d0: bd10 pop {r4, pc} + ... + +100170d4 <_freertos_spinlock_irqsave>: +100170d4: b573 push {r0, r1, r4, r5, r6, lr} +100170d6: 4604 mov r4, r0 +100170d8: f7fe f994 bl 10015404 +100170dc: 4d0b ldr r5, [pc, #44] ; (1001710c <_freertos_spinlock_irqsave+0x38>) +100170de: 4e0c ldr r6, [pc, #48] ; (10017110 <_freertos_spinlock_irqsave+0x3c>) +100170e0: 2300 movs r3, #0 +100170e2: f64e 2260 movw r2, #60000 ; 0xea60 +100170e6: 4619 mov r1, r3 +100170e8: 6820 ldr r0, [r4, #0] +100170ea: f7fe fd75 bl 10015bd8 +100170ee: 2801 cmp r0, #1 +100170f0: d101 bne.n 100170f6 <_freertos_spinlock_irqsave+0x22> +100170f2: b002 add sp, #8 +100170f4: bd70 pop {r4, r5, r6, pc} +100170f6: 2000 movs r0, #0 +100170f8: f7ff f8a8 bl 1001624c +100170fc: 9400 str r4, [sp, #0] +100170fe: 4602 mov r2, r0 +10017100: 462b mov r3, r5 +10017102: 4902 ldr r1, [pc, #8] ; (1001710c <_freertos_spinlock_irqsave+0x38>) +10017104: 4630 mov r0, r6 +10017106: f003 fd3b bl 1001ab80 +1001710a: e7e9 b.n 100170e0 <_freertos_spinlock_irqsave+0xc> +1001710c: 100402fe .word 0x100402fe +10017110: 100403ba .word 0x100403ba + +10017114 <_freertos_spinlock>: +10017114: b573 push {r0, r1, r4, r5, r6, lr} +10017116: 4604 mov r4, r0 +10017118: 4d0b ldr r5, [pc, #44] ; (10017148 <_freertos_spinlock+0x34>) +1001711a: 4e0c ldr r6, [pc, #48] ; (1001714c <_freertos_spinlock+0x38>) +1001711c: 2300 movs r3, #0 +1001711e: f64e 2260 movw r2, #60000 ; 0xea60 +10017122: 4619 mov r1, r3 +10017124: 6820 ldr r0, [r4, #0] +10017126: f7fe fd57 bl 10015bd8 +1001712a: 2801 cmp r0, #1 +1001712c: d101 bne.n 10017132 <_freertos_spinlock+0x1e> +1001712e: b002 add sp, #8 +10017130: bd70 pop {r4, r5, r6, pc} +10017132: 2000 movs r0, #0 +10017134: f7ff f88a bl 1001624c +10017138: 9400 str r4, [sp, #0] +1001713a: 4602 mov r2, r0 +1001713c: 462b mov r3, r5 +1001713e: 4902 ldr r1, [pc, #8] ; (10017148 <_freertos_spinlock+0x34>) +10017140: 4630 mov r0, r6 +10017142: f003 fd1d bl 1001ab80 +10017146: e7e9 b.n 1001711c <_freertos_spinlock+0x8> +10017148: 100402eb .word 0x100402eb +1001714c: 100403ba .word 0x100403ba + +10017150 <_freertos_enter_critical_mutex>: +10017150: b570 push {r4, r5, r6, lr} +10017152: 4604 mov r4, r0 +10017154: 4d0b ldr r5, [pc, #44] ; (10017184 <_freertos_enter_critical_mutex+0x34>) +10017156: 4e0c ldr r6, [pc, #48] ; (10017188 <_freertos_enter_critical_mutex+0x38>) +10017158: 2300 movs r3, #0 +1001715a: f64e 2260 movw r2, #60000 ; 0xea60 +1001715e: 4619 mov r1, r3 +10017160: 6820 ldr r0, [r4, #0] +10017162: f7fe fd39 bl 10015bd8 +10017166: 2801 cmp r0, #1 +10017168: f04f 0000 mov.w r0, #0 +1001716c: d100 bne.n 10017170 <_freertos_enter_critical_mutex+0x20> +1001716e: bd70 pop {r4, r5, r6, pc} +10017170: f7ff f86c bl 1001624c +10017174: 4623 mov r3, r4 +10017176: 4601 mov r1, r0 +10017178: 462a mov r2, r5 +1001717a: 4630 mov r0, r6 +1001717c: f003 fd00 bl 1001ab80 +10017180: e7ea b.n 10017158 <_freertos_enter_critical_mutex+0x8> +10017182: bf00 nop +10017184: 100402cc .word 0x100402cc +10017188: 1004039d .word 0x1004039d + +1001718c <_freertos_mutex_get>: +1001718c: b573 push {r0, r1, r4, r5, r6, lr} +1001718e: 4604 mov r4, r0 +10017190: 4d0b ldr r5, [pc, #44] ; (100171c0 <_freertos_mutex_get+0x34>) +10017192: 4e0c ldr r6, [pc, #48] ; (100171c4 <_freertos_mutex_get+0x38>) +10017194: 2300 movs r3, #0 +10017196: f64e 2260 movw r2, #60000 ; 0xea60 +1001719a: 4619 mov r1, r3 +1001719c: 6820 ldr r0, [r4, #0] +1001719e: f7fe fd1b bl 10015bd8 +100171a2: 2801 cmp r0, #1 +100171a4: d101 bne.n 100171aa <_freertos_mutex_get+0x1e> +100171a6: b002 add sp, #8 +100171a8: bd70 pop {r4, r5, r6, pc} +100171aa: 2000 movs r0, #0 +100171ac: f7ff f84e bl 1001624c +100171b0: 9400 str r4, [sp, #0] +100171b2: 4602 mov r2, r0 +100171b4: 462b mov r3, r5 +100171b6: 4902 ldr r1, [pc, #8] ; (100171c0 <_freertos_mutex_get+0x34>) +100171b8: 4630 mov r0, r6 +100171ba: f003 fce1 bl 1001ab80 +100171be: e7e9 b.n 10017194 <_freertos_mutex_get+0x8> +100171c0: 1004029c .word 0x1004029c +100171c4: 100403ba .word 0x100403ba + +100171c8 <_freertos_spinlock_init>: +100171c8: b510 push {r4, lr} +100171ca: 4604 mov r4, r0 +100171cc: 2001 movs r0, #1 +100171ce: f7fe fc8f bl 10015af0 +100171d2: 6020 str r0, [r4, #0] +100171d4: bd10 pop {r4, pc} + +100171d6 <_freertos_mutex_init>: +100171d6: f7ff bff7 b.w 100171c8 <_freertos_spinlock_init> + +100171da <_freertos_init_sema>: +100171da: b510 push {r4, lr} +100171dc: 4604 mov r4, r0 +100171de: f04f 30ff mov.w r0, #4294967295 +100171e2: f7fe fc01 bl 100159e8 +100171e6: 6020 str r0, [r4, #0] +100171e8: bd10 pop {r4, pc} + ... + +100171ec <_freertos_create_task>: +100171ec: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100171f0: 2500 movs r5, #0 +100171f2: 4604 mov r4, r0 +100171f4: 460e mov r6, r1 +100171f6: b087 sub sp, #28 +100171f8: 6021 str r1, [r4, #0] +100171fa: f8dd 9040 ldr.w r9, [sp, #64] ; 0x40 +100171fe: 6105 str r5, [r0, #16] +10017200: 6145 str r5, [r0, #20] +10017202: 4629 mov r1, r5 +10017204: 3008 adds r0, #8 +10017206: 9205 str r2, [sp, #20] +10017208: 4698 mov r8, r3 +1001720a: 9f11 ldr r7, [sp, #68] ; 0x44 +1001720c: f7ff ffe5 bl 100171da <_freertos_init_sema> +10017210: 4629 mov r1, r5 +10017212: f104 000c add.w r0, r4, #12 +10017216: f7ff ffe0 bl 100171da <_freertos_init_sema> +1001721a: 45a9 cmp r9, r5 +1001721c: 4630 mov r0, r6 +1001721e: bf08 it eq +10017220: 462f moveq r7, r5 +10017222: f01f fbf5 bl 10036a10 +10017226: 9a05 ldr r2, [sp, #20] +10017228: f108 0804 add.w r8, r8, #4 +1001722c: fa1f fa82 uxth.w sl, r2 +10017230: f104 0b04 add.w fp, r4, #4 +10017234: 9005 str r0, [sp, #20] +10017236: b9d0 cbnz r0, 1001726e <_freertos_create_task+0x82> +10017238: 0090 lsls r0, r2, #2 +1001723a: f000 fbe3 bl 10017a04 +1001723e: 9b05 ldr r3, [sp, #20] +10017240: 9002 str r0, [sp, #8] +10017242: 9303 str r3, [sp, #12] +10017244: e88d 0900 stmia.w sp, {r8, fp} +10017248: 463b mov r3, r7 +1001724a: 4652 mov r2, sl +1001724c: 4631 mov r1, r6 +1001724e: 4648 mov r0, r9 +10017250: f7fe fe00 bl 10015e54 +10017254: 2801 cmp r0, #1 +10017256: 4605 mov r5, r0 +10017258: d005 beq.n 10017266 <_freertos_create_task+0x7a> +1001725a: 4603 mov r3, r0 +1001725c: 6822 ldr r2, [r4, #0] +1001725e: 4905 ldr r1, [pc, #20] ; (10017274 <_freertos_create_task+0x88>) +10017260: 4805 ldr r0, [pc, #20] ; (10017278 <_freertos_create_task+0x8c>) +10017262: f003 fc8d bl 1001ab80 +10017266: 4628 mov r0, r5 +10017268: b007 add sp, #28 +1001726a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1001726e: 9503 str r5, [sp, #12] +10017270: 9502 str r5, [sp, #8] +10017272: e7e7 b.n 10017244 <_freertos_create_task+0x58> +10017274: 10040319 .word 0x10040319 +10017278: 10040345 .word 0x10040345 + +1001727c <_freertos_memcmp>: +1001727c: b508 push {r3, lr} +1001727e: f003 fca3 bl 1001abc8 +10017282: fab0 f080 clz r0, r0 +10017286: 0940 lsrs r0, r0, #5 +10017288: bd08 pop {r3, pc} + +1001728a <_freertos_memcpy>: +1001728a: f003 bca1 b.w 1001abd0 + +1001728e <_freertos_get_random_bytes>: +1001728e: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +10017290: 4607 mov r7, r0 +10017292: 460c mov r4, r1 +10017294: 2600 movs r6, #0 +10017296: 088d lsrs r5, r1, #2 +10017298: 42ae cmp r6, r5 +1001729a: db0f blt.n 100172bc <_freertos_get_random_bytes+0x2e> +1001729c: ebb4 0485 subs.w r4, r4, r5, lsl #2 +100172a0: d009 beq.n 100172b6 <_freertos_get_random_bytes+0x28> +100172a2: f7ff fe5f bl 10016f64 <_freertos_arc4random> +100172a6: a902 add r1, sp, #8 +100172a8: f841 0d04 str.w r0, [r1, #-4]! +100172ac: 4622 mov r2, r4 +100172ae: eb07 0085 add.w r0, r7, r5, lsl #2 +100172b2: f003 fc8d bl 1001abd0 +100172b6: 2000 movs r0, #0 +100172b8: b003 add sp, #12 +100172ba: bdf0 pop {r4, r5, r6, r7, pc} +100172bc: f7ff fe52 bl 10016f64 <_freertos_arc4random> +100172c0: f847 0026 str.w r0, [r7, r6, lsl #2] +100172c4: 3601 adds r6, #1 +100172c6: e7e7 b.n 10017298 <_freertos_get_random_bytes+0xa> + +100172c8 <_freertos_delete_task>: +100172c8: 6843 ldr r3, [r0, #4] +100172ca: b570 push {r4, r5, r6, lr} +100172cc: 4604 mov r4, r0 +100172ce: b92b cbnz r3, 100172dc <_freertos_delete_task+0x14> +100172d0: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +100172d4: 490d ldr r1, [pc, #52] ; (1001730c <_freertos_delete_task+0x44>) +100172d6: 480e ldr r0, [pc, #56] ; (10017310 <_freertos_delete_task+0x48>) +100172d8: f003 bc52 b.w 1001ab80 +100172dc: 2301 movs r3, #1 +100172de: f100 0608 add.w r6, r0, #8 +100172e2: 6103 str r3, [r0, #16] +100172e4: f104 050c add.w r5, r4, #12 +100172e8: 4630 mov r0, r6 +100172ea: f7ff fdcd bl 10016e88 <_freertos_spinunlock> +100172ee: f04f 31ff mov.w r1, #4294967295 +100172f2: 4628 mov r0, r5 +100172f4: f7ff fecf bl 10017096 <_freertos_down_sema> +100172f8: 4630 mov r0, r6 +100172fa: f7ff fe97 bl 1001702c <_freertos_spinlock_free> +100172fe: 4628 mov r0, r5 +10017300: f7ff fe94 bl 1001702c <_freertos_spinlock_free> +10017304: 2300 movs r3, #0 +10017306: 6063 str r3, [r4, #4] +10017308: bd70 pop {r4, r5, r6, pc} +1001730a: bf00 nop +1001730c: 1004032f .word 0x1004032f +10017310: 1004036d .word 0x1004036d + +10017314 <_freertos_mutex_get_timeout>: +10017314: 2300 movs r3, #0 +10017316: b513 push {r0, r1, r4, lr} +10017318: 460a mov r2, r1 +1001731a: 4604 mov r4, r0 +1001731c: 4619 mov r1, r3 +1001731e: 6800 ldr r0, [r0, #0] +10017320: f7fe fc5a bl 10015bd8 +10017324: 2801 cmp r0, #1 +10017326: f04f 0000 mov.w r0, #0 +1001732a: d00a beq.n 10017342 <_freertos_mutex_get_timeout+0x2e> +1001732c: f7fe ff8e bl 1001624c +10017330: 4b05 ldr r3, [pc, #20] ; (10017348 <_freertos_mutex_get_timeout+0x34>) +10017332: 4602 mov r2, r0 +10017334: 9400 str r4, [sp, #0] +10017336: 4619 mov r1, r3 +10017338: 4804 ldr r0, [pc, #16] ; (1001734c <_freertos_mutex_get_timeout+0x38>) +1001733a: f003 fc21 bl 1001ab80 +1001733e: f04f 30ff mov.w r0, #4294967295 +10017342: b002 add sp, #8 +10017344: bd10 pop {r4, pc} +10017346: bf00 nop +10017348: 100402b0 .word 0x100402b0 +1001734c: 100403ba .word 0x100403ba + +10017350 <_freertos_up_sema_from_isr>: +10017350: 2300 movs r3, #0 +10017352: b507 push {r0, r1, r2, lr} +10017354: a902 add r1, sp, #8 +10017356: f841 3d04 str.w r3, [r1, #-4]! +1001735a: 6800 ldr r0, [r0, #0] +1001735c: f7fe fc0e bl 10015b7c +10017360: 9b01 ldr r3, [sp, #4] +10017362: b13b cbz r3, 10017374 <_freertos_up_sema_from_isr+0x24> +10017364: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +10017368: 4b04 ldr r3, [pc, #16] ; (1001737c <_freertos_up_sema_from_isr+0x2c>) +1001736a: 601a str r2, [r3, #0] +1001736c: f3bf 8f4f dsb sy +10017370: f3bf 8f6f isb sy +10017374: b003 add sp, #12 +10017376: f85d fb04 ldr.w pc, [sp], #4 +1001737a: bf00 nop +1001737c: e000ed04 .word 0xe000ed04 + +10017380 <_freertos_systime_to_ms>: +10017380: 4770 bx lr + +10017382 <_freertos_msleep_os>: +10017382: f7ff b865 b.w 10016450 + +10017386 <_freertos_usleep_os>: +10017386: f000 bfe5 b.w 10018354 + +1001738a : +1001738a: f7fe b83b b.w 10015404 + +1001738e : +1001738e: f7fe b849 b.w 10015424 + +10017392 : +10017392: f04f 0350 mov.w r3, #80 ; 0x50 +10017396: f383 8811 msr BASEPRI, r3 +1001739a: f3bf 8f6f isb sy +1001739e: f3bf 8f4f dsb sy +100173a2: 4770 bx lr + +100173a4 <_htons>: +100173a4: ba40 rev16 r0, r0 +100173a6: b280 uxth r0, r0 +100173a8: 4770 bx lr + +100173aa <_ntohs>: +100173aa: ba40 rev16 r0, r0 +100173ac: b280 uxth r0, r0 +100173ae: 4770 bx lr + +100173b0 <_rtw_zvmalloc>: +100173b0: b510 push {r4, lr} +100173b2: 4604 mov r4, r0 +100173b4: f000 fb76 bl 10017aa4 +100173b8: b930 cbnz r0, 100173c8 <_rtw_zvmalloc+0x18> +100173ba: 4b04 ldr r3, [pc, #16] ; (100173cc <_rtw_zvmalloc+0x1c>) +100173bc: 685b ldr r3, [r3, #4] +100173be: b11b cbz r3, 100173c8 <_rtw_zvmalloc+0x18> +100173c0: 4620 mov r0, r4 +100173c2: e8bd 4010 ldmia.w sp!, {r4, lr} +100173c6: 4718 bx r3 +100173c8: bd10 pop {r4, pc} +100173ca: bf00 nop +100173cc: 100403dc .word 0x100403dc + +100173d0 <_rtw_vmfree>: +100173d0: f64f 72fe movw r2, #65534 ; 0xfffe +100173d4: 4b05 ldr r3, [pc, #20] ; (100173ec <_rtw_vmfree+0x1c>) +100173d6: 4403 add r3, r0 +100173d8: 4293 cmp r3, r2 +100173da: d801 bhi.n 100173e0 <_rtw_vmfree+0x10> +100173dc: f000 ba8a b.w 100178f4 +100173e0: 4b03 ldr r3, [pc, #12] ; (100173f0 <_rtw_vmfree+0x20>) +100173e2: 689b ldr r3, [r3, #8] +100173e4: b103 cbz r3, 100173e8 <_rtw_vmfree+0x18> +100173e6: 4718 bx r3 +100173e8: 4770 bx lr +100173ea: bf00 nop +100173ec: e000ffff .word 0xe000ffff +100173f0: 100403dc .word 0x100403dc + +100173f4 <_rtw_malloc>: +100173f4: 4b02 ldr r3, [pc, #8] ; (10017400 <_rtw_malloc+0xc>) +100173f6: 68db ldr r3, [r3, #12] +100173f8: b103 cbz r3, 100173fc <_rtw_malloc+0x8> +100173fa: 4718 bx r3 +100173fc: 4618 mov r0, r3 +100173fe: 4770 bx lr +10017400: 100403dc .word 0x100403dc + +10017404 <_rtw_zmalloc>: +10017404: 4b02 ldr r3, [pc, #8] ; (10017410 <_rtw_zmalloc+0xc>) +10017406: 691b ldr r3, [r3, #16] +10017408: b103 cbz r3, 1001740c <_rtw_zmalloc+0x8> +1001740a: 4718 bx r3 +1001740c: 4618 mov r0, r3 +1001740e: 4770 bx lr +10017410: 100403dc .word 0x100403dc + +10017414 <_rtw_mfree>: +10017414: 4b02 ldr r3, [pc, #8] ; (10017420 <_rtw_mfree+0xc>) +10017416: 695b ldr r3, [r3, #20] +10017418: b103 cbz r3, 1001741c <_rtw_mfree+0x8> +1001741a: 4718 bx r3 +1001741c: 4770 bx lr +1001741e: bf00 nop +10017420: 100403dc .word 0x100403dc + +10017424 : +10017424: 4770 bx lr + +10017426 : +10017426: f7ff bfd3 b.w 100173d0 <_rtw_vmfree> + +1001742a : +1001742a: f7ff bff3 b.w 10017414 <_rtw_mfree> + ... + +10017430 : +10017430: 4b02 ldr r3, [pc, #8] ; (1001743c ) +10017432: 699b ldr r3, [r3, #24] +10017434: b103 cbz r3, 10017438 +10017436: 4718 bx r3 +10017438: 4770 bx lr +1001743a: bf00 nop +1001743c: 100403dc .word 0x100403dc + +10017440 : +10017440: 4b02 ldr r3, [pc, #8] ; (1001744c ) +10017442: 69db ldr r3, [r3, #28] +10017444: b103 cbz r3, 10017448 +10017446: 4718 bx r3 +10017448: 4618 mov r0, r3 +1001744a: 4770 bx lr +1001744c: 100403dc .word 0x100403dc + +10017450 : +10017450: 4b02 ldr r3, [pc, #8] ; (1001745c ) +10017452: 6a1b ldr r3, [r3, #32] +10017454: b103 cbz r3, 10017458 +10017456: 4718 bx r3 +10017458: 4770 bx lr +1001745a: bf00 nop +1001745c: 100403dc .word 0x100403dc + +10017460 : +10017460: 6000 str r0, [r0, #0] +10017462: 6040 str r0, [r0, #4] +10017464: 4770 bx lr + +10017466 : +10017466: 6803 ldr r3, [r0, #0] +10017468: 1a1b subs r3, r3, r0 +1001746a: 4258 negs r0, r3 +1001746c: 4158 adcs r0, r3 +1001746e: 4770 bx lr + +10017470 : +10017470: 680b ldr r3, [r1, #0] +10017472: 6058 str r0, [r3, #4] +10017474: 6003 str r3, [r0, #0] +10017476: 6041 str r1, [r0, #4] +10017478: 6008 str r0, [r1, #0] +1001747a: 4770 bx lr + +1001747c : +1001747c: 684b ldr r3, [r1, #4] +1001747e: 6048 str r0, [r1, #4] +10017480: e880 000a stmia.w r0, {r1, r3} +10017484: 6018 str r0, [r3, #0] +10017486: 4770 bx lr + +10017488 : +10017488: e890 000c ldmia.w r0, {r2, r3} +1001748c: 6053 str r3, [r2, #4] +1001748e: 601a str r2, [r3, #0] +10017490: 6000 str r0, [r0, #0] +10017492: 6040 str r0, [r0, #4] +10017494: 4770 bx lr + ... + +10017498 : +10017498: 4b02 ldr r3, [pc, #8] ; (100174a4 ) +1001749a: 6a5b ldr r3, [r3, #36] ; 0x24 +1001749c: b103 cbz r3, 100174a0 +1001749e: 4718 bx r3 +100174a0: 4770 bx lr +100174a2: bf00 nop +100174a4: 100403dc .word 0x100403dc + +100174a8 : +100174a8: 4b02 ldr r3, [pc, #8] ; (100174b4 ) +100174aa: 6a9b ldr r3, [r3, #40] ; 0x28 +100174ac: b103 cbz r3, 100174b0 +100174ae: 4718 bx r3 +100174b0: 4770 bx lr +100174b2: bf00 nop +100174b4: 100403dc .word 0x100403dc + +100174b8 : +100174b8: 4b02 ldr r3, [pc, #8] ; (100174c4 ) +100174ba: 6adb ldr r3, [r3, #44] ; 0x2c +100174bc: b103 cbz r3, 100174c0 +100174be: 4718 bx r3 +100174c0: 4770 bx lr +100174c2: bf00 nop +100174c4: 100403dc .word 0x100403dc + +100174c8 : +100174c8: 4b02 ldr r3, [pc, #8] ; (100174d4 ) +100174ca: 6b1b ldr r3, [r3, #48] ; 0x30 +100174cc: b103 cbz r3, 100174d0 +100174ce: 4718 bx r3 +100174d0: 4770 bx lr +100174d2: bf00 nop +100174d4: 100403dc .word 0x100403dc + +100174d8 : +100174d8: 4b02 ldr r3, [pc, #8] ; (100174e4 ) +100174da: 6b5b ldr r3, [r3, #52] ; 0x34 +100174dc: b103 cbz r3, 100174e0 +100174de: 4718 bx r3 +100174e0: 4618 mov r0, r3 +100174e2: 4770 bx lr +100174e4: 100403dc .word 0x100403dc + +100174e8 : +100174e8: b510 push {r4, lr} +100174ea: 4604 mov r4, r0 +100174ec: f04f 31ff mov.w r1, #4294967295 +100174f0: 4620 mov r0, r4 +100174f2: f7ff fff1 bl 100174d8 +100174f6: 2801 cmp r0, #1 +100174f8: d1f8 bne.n 100174ec +100174fa: bd10 pop {r4, pc} + +100174fc : +100174fc: 4b02 ldr r3, [pc, #8] ; (10017508 ) +100174fe: 6b9b ldr r3, [r3, #56] ; 0x38 +10017500: b103 cbz r3, 10017504 +10017502: 4718 bx r3 +10017504: 4770 bx lr +10017506: bf00 nop +10017508: 100403dc .word 0x100403dc + +1001750c : +1001750c: 4b02 ldr r3, [pc, #8] ; (10017518 ) +1001750e: 6bdb ldr r3, [r3, #60] ; 0x3c +10017510: b103 cbz r3, 10017514 +10017512: 4718 bx r3 +10017514: 4770 bx lr +10017516: bf00 nop +10017518: 100403dc .word 0x100403dc + +1001751c : +1001751c: 4b02 ldr r3, [pc, #8] ; (10017528 ) +1001751e: 6c9b ldr r3, [r3, #72] ; 0x48 +10017520: b103 cbz r3, 10017524 +10017522: 4718 bx r3 +10017524: 4770 bx lr +10017526: bf00 nop +10017528: 100403dc .word 0x100403dc + +1001752c : +1001752c: 4b02 ldr r3, [pc, #8] ; (10017538 ) +1001752e: 6c1b ldr r3, [r3, #64] ; 0x40 +10017530: b103 cbz r3, 10017534 +10017532: 4718 bx r3 +10017534: 4770 bx lr +10017536: bf00 nop +10017538: 100403dc .word 0x100403dc + +1001753c : +1001753c: 4b03 ldr r3, [pc, #12] ; (1001754c ) +1001753e: 6c5b ldr r3, [r3, #68] ; 0x44 +10017540: b103 cbz r3, 10017544 +10017542: 4718 bx r3 +10017544: f04f 30ff mov.w r0, #4294967295 +10017548: 4770 bx lr +1001754a: bf00 nop +1001754c: 100403dc .word 0x100403dc + +10017550 : +10017550: 4b02 ldr r3, [pc, #8] ; (1001755c ) +10017552: 6cdb ldr r3, [r3, #76] ; 0x4c +10017554: b103 cbz r3, 10017558 +10017556: 4718 bx r3 +10017558: 4770 bx lr +1001755a: bf00 nop +1001755c: 100403dc .word 0x100403dc + +10017560 : +10017560: f7ff bff6 b.w 10017550 + +10017564 : +10017564: 4b02 ldr r3, [pc, #8] ; (10017570 ) +10017566: 6d1b ldr r3, [r3, #80] ; 0x50 +10017568: b103 cbz r3, 1001756c +1001756a: 4718 bx r3 +1001756c: 4770 bx lr +1001756e: bf00 nop +10017570: 100403dc .word 0x100403dc + +10017574 : +10017574: f7ff bff6 b.w 10017564 + +10017578 : +10017578: 4b02 ldr r3, [pc, #8] ; (10017584 ) +1001757a: 6e5b ldr r3, [r3, #100] ; 0x64 +1001757c: b103 cbz r3, 10017580 +1001757e: 4718 bx r3 +10017580: 4618 mov r0, r3 +10017582: 4770 bx lr +10017584: 100403dc .word 0x100403dc + +10017588 : +10017588: 4b02 ldr r3, [pc, #8] ; (10017594 ) +1001758a: 6e9b ldr r3, [r3, #104] ; 0x68 +1001758c: b103 cbz r3, 10017590 +1001758e: 4718 bx r3 +10017590: 4770 bx lr +10017592: bf00 nop +10017594: 100403dc .word 0x100403dc + +10017598 : +10017598: 6803 ldr r3, [r0, #0] +1001759a: 1a1b subs r3, r3, r0 +1001759c: 4258 negs r0, r3 +1001759e: 4158 adcs r0, r3 +100175a0: 4770 bx lr + +100175a2 : +100175a2: 1a0b subs r3, r1, r0 +100175a4: 4258 negs r0, r3 +100175a6: 4158 adcs r0, r3 +100175a8: 4770 bx lr + ... + +100175ac : +100175ac: 4b02 ldr r3, [pc, #8] ; (100175b8 ) +100175ae: 6edb ldr r3, [r3, #108] ; 0x6c +100175b0: b103 cbz r3, 100175b4 +100175b2: 4718 bx r3 +100175b4: 4770 bx lr +100175b6: bf00 nop +100175b8: 100403dc .word 0x100403dc + +100175bc : +100175bc: 6000 str r0, [r0, #0] +100175be: 6040 str r0, [r0, #4] +100175c0: 3008 adds r0, #8 +100175c2: f7ff bff3 b.w 100175ac + ... + +100175c8 : +100175c8: 4b02 ldr r3, [pc, #8] ; (100175d4 ) +100175ca: 6f1b ldr r3, [r3, #112] ; 0x70 +100175cc: b103 cbz r3, 100175d0 +100175ce: 4718 bx r3 +100175d0: 4770 bx lr +100175d2: bf00 nop +100175d4: 100403dc .word 0x100403dc + +100175d8 : +100175d8: 4b02 ldr r3, [pc, #8] ; (100175e4 ) +100175da: 6f5b ldr r3, [r3, #116] ; 0x74 +100175dc: b103 cbz r3, 100175e0 +100175de: 4718 bx r3 +100175e0: 4770 bx lr +100175e2: bf00 nop +100175e4: 100403dc .word 0x100403dc + +100175e8 : +100175e8: f7ff bff6 b.w 100175d8 + +100175ec : +100175ec: 4b02 ldr r3, [pc, #8] ; (100175f8 ) +100175ee: 6f9b ldr r3, [r3, #120] ; 0x78 +100175f0: b103 cbz r3, 100175f4 +100175f2: 4718 bx r3 +100175f4: 4770 bx lr +100175f6: bf00 nop +100175f8: 100403dc .word 0x100403dc + +100175fc : +100175fc: f7ff bff6 b.w 100175ec + +10017600 : +10017600: 4b02 ldr r3, [pc, #8] ; (1001760c ) +10017602: f8d3 0094 ldr.w r0, [r3, #148] ; 0x94 +10017606: b100 cbz r0, 1001760a +10017608: 4700 bx r0 +1001760a: 4770 bx lr +1001760c: 100403dc .word 0x100403dc + +10017610 : +10017610: 4b03 ldr r3, [pc, #12] ; (10017620 ) +10017612: f8d3 3098 ldr.w r3, [r3, #152] ; 0x98 +10017616: b103 cbz r3, 1001761a +10017618: 4718 bx r3 +1001761a: 4618 mov r0, r3 +1001761c: 4770 bx lr +1001761e: bf00 nop +10017620: 100403dc .word 0x100403dc + +10017624 : +10017624: 4b03 ldr r3, [pc, #12] ; (10017634 ) +10017626: f8d3 309c ldr.w r3, [r3, #156] ; 0x9c +1001762a: b103 cbz r3, 1001762e +1001762c: 4718 bx r3 +1001762e: 4618 mov r0, r3 +10017630: 4770 bx lr +10017632: bf00 nop +10017634: 100403dc .word 0x100403dc + +10017638 : +10017638: 4b03 ldr r3, [pc, #12] ; (10017648 ) +1001763a: f8d3 30a0 ldr.w r3, [r3, #160] ; 0xa0 +1001763e: b103 cbz r3, 10017642 +10017640: 4718 bx r3 +10017642: 4618 mov r0, r3 +10017644: 4770 bx lr +10017646: bf00 nop +10017648: 100403dc .word 0x100403dc + +1001764c : +1001764c: 4b03 ldr r3, [pc, #12] ; (1001765c ) +1001764e: f8d3 30a4 ldr.w r3, [r3, #164] ; 0xa4 +10017652: b103 cbz r3, 10017656 +10017654: 4718 bx r3 +10017656: 4618 mov r0, r3 +10017658: 4770 bx lr +1001765a: bf00 nop +1001765c: 100403dc .word 0x100403dc + +10017660 : +10017660: b510 push {r4, lr} +10017662: 4604 mov r4, r0 +10017664: f7ff ffcc bl 10017600 +10017668: 1b00 subs r0, r0, r4 +1001766a: e8bd 4010 ldmia.w sp!, {r4, lr} +1001766e: f7ff bfcf b.w 10017610 + ... + +10017674 : +10017674: 4b02 ldr r3, [pc, #8] ; (10017680 ) +10017676: f8d3 30a8 ldr.w r3, [r3, #168] ; 0xa8 +1001767a: b103 cbz r3, 1001767e +1001767c: 4718 bx r3 +1001767e: 4770 bx lr +10017680: 100403dc .word 0x100403dc + +10017684 : +10017684: 4b02 ldr r3, [pc, #8] ; (10017690 ) +10017686: f8d3 30ac ldr.w r3, [r3, #172] ; 0xac +1001768a: b103 cbz r3, 1001768e +1001768c: 4718 bx r3 +1001768e: 4770 bx lr +10017690: 100403dc .word 0x100403dc + +10017694 : +10017694: 4b02 ldr r3, [pc, #8] ; (100176a0 ) +10017696: f8d3 30b0 ldr.w r3, [r3, #176] ; 0xb0 +1001769a: b103 cbz r3, 1001769e +1001769c: 4718 bx r3 +1001769e: 4770 bx lr +100176a0: 100403dc .word 0x100403dc + +100176a4 : +100176a4: 4b02 ldr r3, [pc, #8] ; (100176b0 ) +100176a6: f8d3 30b4 ldr.w r3, [r3, #180] ; 0xb4 +100176aa: b103 cbz r3, 100176ae +100176ac: 4718 bx r3 +100176ae: 4770 bx lr +100176b0: 100403dc .word 0x100403dc + +100176b4 : +100176b4: 4b02 ldr r3, [pc, #8] ; (100176c0 ) +100176b6: f8d3 30bc ldr.w r3, [r3, #188] ; 0xbc +100176ba: b103 cbz r3, 100176be +100176bc: 4718 bx r3 +100176be: 4770 bx lr +100176c0: 100403dc .word 0x100403dc + +100176c4 : +100176c4: 4b02 ldr r3, [pc, #8] ; (100176d0 ) +100176c6: f8d3 30cc ldr.w r3, [r3, #204] ; 0xcc +100176ca: b103 cbz r3, 100176ce +100176cc: 4718 bx r3 +100176ce: 4770 bx lr +100176d0: 100403dc .word 0x100403dc + +100176d4 : +100176d4: 4b03 ldr r3, [pc, #12] ; (100176e4 ) +100176d6: f8d3 30dc ldr.w r3, [r3, #220] ; 0xdc +100176da: b103 cbz r3, 100176de +100176dc: 4718 bx r3 +100176de: 4618 mov r0, r3 +100176e0: 4770 bx lr +100176e2: bf00 nop +100176e4: 100403dc .word 0x100403dc + +100176e8 : +100176e8: 4b03 ldr r3, [pc, #12] ; (100176f8 ) +100176ea: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0 +100176ee: b103 cbz r3, 100176f2 +100176f0: 4718 bx r3 +100176f2: 4618 mov r0, r3 +100176f4: 4770 bx lr +100176f6: bf00 nop +100176f8: 100403dc .word 0x100403dc + +100176fc : +100176fc: b508 push {r3, lr} +100176fe: f7ff fff3 bl 100176e8 +10017702: fab0 f080 clz r0, r0 +10017706: 0940 lsrs r0, r0, #5 +10017708: bd08 pop {r3, pc} + ... + +1001770c : +1001770c: b410 push {r4} +1001770e: 4c05 ldr r4, [pc, #20] ; (10017724 ) +10017710: f8d4 40e4 ldr.w r4, [r4, #228] ; 0xe4 +10017714: b114 cbz r4, 1001771c +10017716: 46a4 mov ip, r4 +10017718: bc10 pop {r4} +1001771a: 4760 bx ip +1001771c: 2000 movs r0, #0 +1001771e: 2100 movs r1, #0 +10017720: bc10 pop {r4} +10017722: 4770 bx lr +10017724: 100403dc .word 0x100403dc + +10017728 : +10017728: 4b03 ldr r3, [pc, #12] ; (10017738 ) +1001772a: f8d3 30e8 ldr.w r3, [r3, #232] ; 0xe8 +1001772e: b103 cbz r3, 10017732 +10017730: 4718 bx r3 +10017732: 4618 mov r0, r3 +10017734: 4770 bx lr +10017736: bf00 nop +10017738: 100403dc .word 0x100403dc + +1001773c : +1001773c: 4b02 ldr r3, [pc, #8] ; (10017748 ) +1001773e: f8d3 00ec ldr.w r0, [r3, #236] ; 0xec +10017742: b100 cbz r0, 10017746 +10017744: 4700 bx r0 +10017746: 4770 bx lr +10017748: 100403dc .word 0x100403dc + +1001774c : +1001774c: b508 push {r3, lr} +1001774e: f7ff fff5 bl 1001773c +10017752: 4b01 ldr r3, [pc, #4] ; (10017758 ) +10017754: 6018 str r0, [r3, #0] +10017756: bd08 pop {r3, pc} +10017758: 1004b57c .word 0x1004b57c + +1001775c : +1001775c: b570 push {r4, r5, r6, lr} +1001775e: 460d mov r5, r1 +10017760: 4614 mov r4, r2 +10017762: f7ff ffeb bl 1001773c +10017766: 4603 mov r3, r0 +10017768: b935 cbnz r5, 10017778 +1001776a: 4622 mov r2, r4 +1001776c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10017770: 4904 ldr r1, [pc, #16] ; (10017784 ) +10017772: 4805 ldr r0, [pc, #20] ; (10017788 ) +10017774: f003 ba04 b.w 1001ab80 +10017778: 4a04 ldr r2, [pc, #16] ; (1001778c ) +1001777a: 6811 ldr r1, [r2, #0] +1001777c: 4288 cmp r0, r1 +1001777e: bfb8 it lt +10017780: 6010 strlt r0, [r2, #0] +10017782: bd70 pop {r4, r5, r6, pc} +10017784: 10040520 .word 0x10040520 +10017788: 1004052e .word 0x1004052e +1001778c: 1004b57c .word 0x1004b57c + +10017790 : +10017790: b537 push {r0, r1, r2, r4, r5, lr} +10017792: 4605 mov r5, r0 +10017794: f7ff fe0c bl 100173b0 <_rtw_zvmalloc> +10017798: 2301 movs r3, #1 +1001779a: 9300 str r3, [sp, #0] +1001779c: 2300 movs r3, #0 +1001779e: 4604 mov r4, r0 +100177a0: 4601 mov r1, r0 +100177a2: 462a mov r2, r5 +100177a4: 4618 mov r0, r3 +100177a6: f7ff ffd9 bl 1001775c +100177aa: 4620 mov r0, r4 +100177ac: b003 add sp, #12 +100177ae: bd30 pop {r4, r5, pc} + +100177b0 : +100177b0: b537 push {r0, r1, r2, r4, r5, lr} +100177b2: 4605 mov r5, r0 +100177b4: f7ff fe1e bl 100173f4 <_rtw_malloc> +100177b8: 2301 movs r3, #1 +100177ba: 9300 str r3, [sp, #0] +100177bc: 2300 movs r3, #0 +100177be: 4604 mov r4, r0 +100177c0: 4601 mov r1, r0 +100177c2: 462a mov r2, r5 +100177c4: 4618 mov r0, r3 +100177c6: f7ff ffc9 bl 1001775c +100177ca: 4620 mov r0, r4 +100177cc: b003 add sp, #12 +100177ce: bd30 pop {r4, r5, pc} + +100177d0 : +100177d0: b537 push {r0, r1, r2, r4, r5, lr} +100177d2: 4605 mov r5, r0 +100177d4: f7ff fe16 bl 10017404 <_rtw_zmalloc> +100177d8: 2301 movs r3, #1 +100177da: 9300 str r3, [sp, #0] +100177dc: 2300 movs r3, #0 +100177de: 4604 mov r4, r0 +100177e0: 4601 mov r1, r0 +100177e2: 462a mov r2, r5 +100177e4: 4618 mov r0, r3 +100177e6: f7ff ffb9 bl 1001775c +100177ea: 4620 mov r0, r4 +100177ec: b003 add sp, #12 +100177ee: bd30 pop {r4, r5, pc} + +100177f0 : +100177f0: 2000 movs r0, #0 +100177f2: 4770 bx lr + +100177f4 : +100177f4: 4770 bx lr + +100177f6 : +100177f6: 4770 bx lr + +100177f8 : +100177f8: 4770 bx lr + +100177fa : +100177fa: 4770 bx lr + +100177fc : +100177fc: 4b02 ldr r3, [pc, #8] ; (10017808 ) +100177fe: f8d3 3134 ldr.w r3, [r3, #308] ; 0x134 +10017802: b103 cbz r3, 10017806 +10017804: 4718 bx r3 +10017806: 4770 bx lr +10017808: 100403dc .word 0x100403dc + +1001780c : +1001780c: 4b02 ldr r3, [pc, #8] ; (10017818 ) +1001780e: f8d3 3138 ldr.w r3, [r3, #312] ; 0x138 +10017812: b103 cbz r3, 10017816 +10017814: 4718 bx r3 +10017816: 4770 bx lr +10017818: 100403dc .word 0x100403dc + +1001781c : +1001781c: 4b02 ldr r3, [pc, #8] ; (10017828 ) +1001781e: f8d3 313c ldr.w r3, [r3, #316] ; 0x13c +10017822: b103 cbz r3, 10017826 +10017824: 4718 bx r3 +10017826: 4770 bx lr +10017828: 100403dc .word 0x100403dc + +1001782c : +1001782c: b470 push {r4, r5, r6} +1001782e: 4c05 ldr r4, [pc, #20] ; (10017844 ) +10017830: f8d4 40f0 ldr.w r4, [r4, #240] ; 0xf0 +10017834: b114 cbz r4, 1001783c +10017836: 46a4 mov ip, r4 +10017838: bc70 pop {r4, r5, r6} +1001783a: 4760 bx ip +1001783c: 2001 movs r0, #1 +1001783e: bc70 pop {r4, r5, r6} +10017840: 4770 bx lr +10017842: bf00 nop +10017844: 100403dc .word 0x100403dc + +10017848 : +10017848: 4b02 ldr r3, [pc, #8] ; (10017854 ) +1001784a: f8d3 30f4 ldr.w r3, [r3, #244] ; 0xf4 +1001784e: b103 cbz r3, 10017852 +10017850: 4718 bx r3 +10017852: 4770 bx lr +10017854: 100403dc .word 0x100403dc + +10017858 : +10017858: 4b02 ldr r3, [pc, #8] ; (10017864 ) +1001785a: f8d3 30f8 ldr.w r3, [r3, #248] ; 0xf8 +1001785e: b103 cbz r3, 10017862 +10017860: 4718 bx r3 +10017862: 4770 bx lr +10017864: 100403dc .word 0x100403dc + +10017868 : +10017868: b430 push {r4, r5} +1001786a: 4c05 ldr r4, [pc, #20] ; (10017880 ) +1001786c: f8d4 4104 ldr.w r4, [r4, #260] ; 0x104 +10017870: b114 cbz r4, 10017878 +10017872: 46a4 mov ip, r4 +10017874: bc30 pop {r4, r5} +10017876: 4760 bx ip +10017878: 4620 mov r0, r4 +1001787a: bc30 pop {r4, r5} +1001787c: 4770 bx lr +1001787e: bf00 nop +10017880: 100403dc .word 0x100403dc + +10017884 : +10017884: 4b03 ldr r3, [pc, #12] ; (10017894 ) +10017886: f8d3 3108 ldr.w r3, [r3, #264] ; 0x108 +1001788a: b103 cbz r3, 1001788e +1001788c: 4718 bx r3 +1001788e: 4618 mov r0, r3 +10017890: 4770 bx lr +10017892: bf00 nop +10017894: 100403dc .word 0x100403dc + +10017898 : +10017898: 4b03 ldr r3, [pc, #12] ; (100178a8 ) +1001789a: f8d3 310c ldr.w r3, [r3, #268] ; 0x10c +1001789e: b103 cbz r3, 100178a2 +100178a0: 4718 bx r3 +100178a2: 4618 mov r0, r3 +100178a4: 4770 bx lr +100178a6: bf00 nop +100178a8: 100403dc .word 0x100403dc + +100178ac : +100178ac: 4b03 ldr r3, [pc, #12] ; (100178bc ) +100178ae: f8d3 3110 ldr.w r3, [r3, #272] ; 0x110 +100178b2: b103 cbz r3, 100178b6 +100178b4: 4718 bx r3 +100178b6: 4618 mov r0, r3 +100178b8: 4770 bx lr +100178ba: bf00 nop +100178bc: 100403dc .word 0x100403dc + +100178c0 : +100178c0: 4b03 ldr r3, [pc, #12] ; (100178d0 ) +100178c2: f8d3 3114 ldr.w r3, [r3, #276] ; 0x114 +100178c6: b103 cbz r3, 100178ca +100178c8: 4718 bx r3 +100178ca: 4618 mov r0, r3 +100178cc: 4770 bx lr +100178ce: bf00 nop +100178d0: 100403dc .word 0x100403dc + +100178d4 : +100178d4: 4b02 ldr r3, [pc, #8] ; (100178e0 ) +100178d6: f8d3 30fc ldr.w r3, [r3, #252] ; 0xfc +100178da: b103 cbz r3, 100178de +100178dc: 4718 bx r3 +100178de: 4770 bx lr +100178e0: 100403dc .word 0x100403dc + +100178e4 : +100178e4: 4b02 ldr r3, [pc, #8] ; (100178f0 ) +100178e6: f8d3 3100 ldr.w r3, [r3, #256] ; 0x100 +100178ea: b103 cbz r3, 100178ee +100178ec: 4718 bx r3 +100178ee: 4770 bx lr +100178f0: 100403dc .word 0x100403dc + +100178f4 : +100178f4: b573 push {r0, r1, r4, r5, r6, lr} +100178f6: 4606 mov r6, r0 +100178f8: 2800 cmp r0, #0 +100178fa: d030 beq.n 1001795e +100178fc: f850 4c04 ldr.w r4, [r0, #-4] +10017900: 1f05 subs r5, r0, #4 +10017902: a901 add r1, sp, #4 +10017904: 4819 ldr r0, [pc, #100] ; (1001796c ) +10017906: f7ff fe2b bl 10017560 +1001790a: 4919 ldr r1, [pc, #100] ; (10017970 ) +1001790c: 1de2 adds r2, r4, #7 +1001790e: 680b ldr r3, [r1, #0] +10017910: f032 0207 bics.w r2, r2, #7 +10017914: bf08 it eq +10017916: 2208 moveq r2, #8 +10017918: 429d cmp r5, r3 +1001791a: d300 bcc.n 1001791e +1001791c: b933 cbnz r3, 1001792c +1001791e: f846 3c04 str.w r3, [r6, #-4] +10017922: 6032 str r2, [r6, #0] +10017924: 600d str r5, [r1, #0] +10017926: 462b mov r3, r5 +10017928: e00b b.n 10017942 +1001792a: 460b mov r3, r1 +1001792c: 6819 ldr r1, [r3, #0] +1001792e: 428d cmp r5, r1 +10017930: d901 bls.n 10017936 +10017932: 2900 cmp r1, #0 +10017934: d1f9 bne.n 1001792a +10017936: 6858 ldr r0, [r3, #4] +10017938: 181c adds r4, r3, r0 +1001793a: 42a5 cmp r5, r4 +1001793c: d111 bne.n 10017962 +1001793e: 4402 add r2, r0 +10017940: 605a str r2, [r3, #4] +10017942: 685a ldr r2, [r3, #4] +10017944: 6818 ldr r0, [r3, #0] +10017946: 1899 adds r1, r3, r2 +10017948: 4281 cmp r1, r0 +1001794a: d104 bne.n 10017956 +1001794c: 6849 ldr r1, [r1, #4] +1001794e: 4411 add r1, r2 +10017950: 589a ldr r2, [r3, r2] +10017952: 6059 str r1, [r3, #4] +10017954: 601a str r2, [r3, #0] +10017956: a901 add r1, sp, #4 +10017958: 4804 ldr r0, [pc, #16] ; (1001796c ) +1001795a: f7ff fe0b bl 10017574 +1001795e: b002 add sp, #8 +10017960: bd70 pop {r4, r5, r6, pc} +10017962: f846 1c04 str.w r1, [r6, #-4] +10017966: 6032 str r2, [r6, #0] +10017968: 601d str r5, [r3, #0] +1001796a: e7dc b.n 10017926 +1001796c: 1004b588 .word 0x1004b588 +10017970: 1004b584 .word 0x1004b584 + +10017974 : +10017974: b508 push {r3, lr} +10017976: 4a0c ldr r2, [pc, #48] ; (100179a8 ) +10017978: 4b0c ldr r3, [pc, #48] ; (100179ac ) +1001797a: 480d ldr r0, [pc, #52] ; (100179b0 ) +1001797c: 6013 str r3, [r2, #0] +1001797e: 2200 movs r2, #0 +10017980: 601a str r2, [r3, #0] +10017982: 4a0c ldr r2, [pc, #48] ; (100179b4 ) +10017984: 1ad2 subs r2, r2, r3 +10017986: f022 0207 bic.w r2, r2, #7 +1001798a: 605a str r2, [r3, #4] +1001798c: 2201 movs r2, #1 +1001798e: 4b0a ldr r3, [pc, #40] ; (100179b8 ) +10017990: 601a str r2, [r3, #0] +10017992: f7ff fe0b bl 100175ac +10017996: e8bd 4008 ldmia.w sp!, {r3, lr} +1001799a: 4a08 ldr r2, [pc, #32] ; (100179bc ) +1001799c: f04f 5100 mov.w r1, #536870912 ; 0x20000000 +100179a0: 4807 ldr r0, [pc, #28] ; (100179c0 ) +100179a2: f7fd bc65 b.w 10015270 +100179a6: bf00 nop +100179a8: 1004b584 .word 0x1004b584 +100179ac: 1fff0000 .word 0x1fff0000 +100179b0: 1004b588 .word 0x1004b588 +100179b4: 1ffffd07 .word 0x1ffffd07 +100179b8: 1004b580 .word 0x1004b580 +100179bc: 1fff0000 .word 0x1fff0000 +100179c0: 100178f5 .word 0x100178f5 + +100179c4 : +100179c4: b513 push {r0, r1, r4, lr} +100179c6: 480c ldr r0, [pc, #48] ; (100179f8 ) +100179c8: a901 add r1, sp, #4 +100179ca: f7ff fdc9 bl 10017560 +100179ce: 4b0b ldr r3, [pc, #44] ; (100179fc ) +100179d0: 681b ldr r3, [r3, #0] +100179d2: b90b cbnz r3, 100179d8 +100179d4: f7ff ffce bl 10017974 +100179d8: 2400 movs r4, #0 +100179da: 4b09 ldr r3, [pc, #36] ; (10017a00 ) +100179dc: 681b ldr r3, [r3, #0] +100179de: b933 cbnz r3, 100179ee +100179e0: a901 add r1, sp, #4 +100179e2: 4805 ldr r0, [pc, #20] ; (100179f8 ) +100179e4: f7ff fdc6 bl 10017574 +100179e8: 4620 mov r0, r4 +100179ea: b002 add sp, #8 +100179ec: bd10 pop {r4, pc} +100179ee: 685a ldr r2, [r3, #4] +100179f0: 681b ldr r3, [r3, #0] +100179f2: 4414 add r4, r2 +100179f4: e7f3 b.n 100179de +100179f6: bf00 nop +100179f8: 1004b588 .word 0x1004b588 +100179fc: 1004b580 .word 0x1004b580 +10017a00: 1004b584 .word 0x1004b584 + +10017a04 : +10017a04: b573 push {r0, r1, r4, r5, r6, lr} +10017a06: 4605 mov r5, r0 +10017a08: 1d06 adds r6, r0, #4 +10017a0a: a901 add r1, sp, #4 +10017a0c: 481d ldr r0, [pc, #116] ; (10017a84 ) +10017a0e: f7ff fda7 bl 10017560 +10017a12: 4b1d ldr r3, [pc, #116] ; (10017a88 ) +10017a14: 681b ldr r3, [r3, #0] +10017a16: b90b cbnz r3, 10017a1c +10017a18: f7ff ffac bl 10017974 +10017a1c: 350b adds r5, #11 +10017a1e: f035 0507 bics.w r5, r5, #7 +10017a22: bf08 it eq +10017a24: 2508 moveq r5, #8 +10017a26: 4b19 ldr r3, [pc, #100] ; (10017a8c ) +10017a28: 681c ldr r4, [r3, #0] +10017a2a: b99c cbnz r4, 10017a54 +10017a2c: a901 add r1, sp, #4 +10017a2e: 4815 ldr r0, [pc, #84] ; (10017a84 ) +10017a30: f7ff fda0 bl 10017574 +10017a34: 4b16 ldr r3, [pc, #88] ; (10017a90 ) +10017a36: 681b ldr r3, [r3, #0] +10017a38: 02db lsls r3, r3, #11 +10017a3a: d51a bpl.n 10017a72 +10017a3c: 4c15 ldr r4, [pc, #84] ; (10017a94 ) +10017a3e: 4816 ldr r0, [pc, #88] ; (10017a98 ) +10017a40: 47a0 blx r4 +10017a42: f7ff ffbf bl 100179c4 +10017a46: 4629 mov r1, r5 +10017a48: 4602 mov r2, r0 +10017a4a: 4814 ldr r0, [pc, #80] ; (10017a9c ) +10017a4c: 47a0 blx r4 +10017a4e: 4814 ldr r0, [pc, #80] ; (10017aa0 ) +10017a50: 47a0 blx r4 +10017a52: e00e b.n 10017a72 +10017a54: 6862 ldr r2, [r4, #4] +10017a56: 42aa cmp r2, r5 +10017a58: db0d blt.n 10017a76 +10017a5a: bf0d iteet eq +10017a5c: 6822 ldreq r2, [r4, #0] +10017a5e: 1b55 subne r5, r2, r5 +10017a60: 6065 strne r5, [r4, #4] +10017a62: 601a streq r2, [r3, #0] +10017a64: bf18 it ne +10017a66: 1964 addne r4, r4, r5 +10017a68: a901 add r1, sp, #4 +10017a6a: 4806 ldr r0, [pc, #24] ; (10017a84 ) +10017a6c: f7ff fd82 bl 10017574 +10017a70: b924 cbnz r4, 10017a7c +10017a72: 2000 movs r0, #0 +10017a74: e004 b.n 10017a80 +10017a76: 4623 mov r3, r4 +10017a78: 6824 ldr r4, [r4, #0] +10017a7a: e7d6 b.n 10017a2a +10017a7c: 1d20 adds r0, r4, #4 +10017a7e: 6026 str r6, [r4, #0] +10017a80: b002 add sp, #8 +10017a82: bd70 pop {r4, r5, r6, pc} +10017a84: 1004b588 .word 0x1004b588 +10017a88: 1004b580 .word 0x1004b580 +10017a8c: 1004b584 .word 0x1004b584 +10017a90: 1000030c .word 0x1000030c +10017a94: 0000f39d .word 0x0000f39d +10017a98: 10040247 .word 0x10040247 +10017a9c: 10040579 .word 0x10040579 +10017aa0: 10040823 .word 0x10040823 + +10017aa4 : +10017aa4: b538 push {r3, r4, r5, lr} +10017aa6: 4605 mov r5, r0 +10017aa8: f7ff ffac bl 10017a04 +10017aac: 4604 mov r4, r0 +10017aae: b118 cbz r0, 10017ab8 +10017ab0: 462a mov r2, r5 +10017ab2: 2100 movs r1, #0 +10017ab4: f003 f890 bl 1001abd8 +10017ab8: 4620 mov r0, r4 +10017aba: bd38 pop {r3, r4, r5, pc} + +10017abc : +10017abc: 4a1c ldr r2, [pc, #112] ; (10017b30 ) +10017abe: b538 push {r3, r4, r5, lr} +10017ac0: 6813 ldr r3, [r2, #0] +10017ac2: 2001 movs r0, #1 +10017ac4: f043 0301 orr.w r3, r3, #1 +10017ac8: 6013 str r3, [r2, #0] +10017aca: f7ef fe9d bl 10007808 +10017ace: 4604 mov r4, r0 +10017ad0: b1c8 cbz r0, 10017b06 +10017ad2: 2301 movs r3, #1 +10017ad4: 4a17 ldr r2, [pc, #92] ; (10017b34 ) +10017ad6: 7013 strb r3, [r2, #0] +10017ad8: 2106 movs r1, #6 +10017ada: 4d17 ldr r5, [pc, #92] ; (10017b38 ) +10017adc: 4a17 ldr r2, [pc, #92] ; (10017b3c ) +10017ade: 6814 ldr r4, [r2, #0] +10017ae0: 462a mov r2, r5 +10017ae2: 0924 lsrs r4, r4, #4 +10017ae4: f004 0007 and.w r0, r4, #7 +10017ae8: fb01 0003 mla r0, r1, r3, r0 +10017aec: 4914 ldr r1, [pc, #80] ; (10017b40 ) +10017aee: eb01 01c0 add.w r1, r1, r0, lsl #3 +10017af2: 6808 ldr r0, [r1, #0] +10017af4: 6849 ldr r1, [r1, #4] +10017af6: c203 stmia r2!, {r0, r1} +10017af8: 78ea ldrb r2, [r5, #3] +10017afa: f364 0243 bfi r2, r4, #1, #3 +10017afe: f363 1205 bfi r2, r3, #4, #2 +10017b02: 70ea strb r2, [r5, #3] +10017b04: bd38 pop {r3, r4, r5, pc} +10017b06: f7ef fe7f bl 10007808 +10017b0a: b120 cbz r0, 10017b16 +10017b0c: 2201 movs r2, #1 +10017b0e: 4b09 ldr r3, [pc, #36] ; (10017b34 ) +10017b10: 701a strb r2, [r3, #0] +10017b12: 4623 mov r3, r4 +10017b14: e7e0 b.n 10017ad8 +10017b16: 4b0b ldr r3, [pc, #44] ; (10017b44 ) +10017b18: 681b ldr r3, [r3, #0] +10017b1a: 005b lsls r3, r3, #1 +10017b1c: d502 bpl.n 10017b24 +10017b1e: 480a ldr r0, [pc, #40] ; (10017b48 ) +10017b20: 4b0a ldr r3, [pc, #40] ; (10017b4c ) +10017b22: 4798 blx r3 +10017b24: 4a0a ldr r2, [pc, #40] ; (10017b50 ) +10017b26: 6813 ldr r3, [r2, #0] +10017b28: f043 030f orr.w r3, r3, #15 +10017b2c: 6013 str r3, [r2, #0] +10017b2e: bd38 pop {r3, r4, r5, pc} +10017b30: 400002c0 .word 0x400002c0 +10017b34: 1004b598 .word 0x1004b598 +10017b38: 1004b58c .word 0x1004b58c +10017b3c: 40000014 .word 0x40000014 +10017b40: 100021ec .word 0x100021ec +10017b44: 10000314 .word 0x10000314 +10017b48: 10040599 .word 0x10040599 +10017b4c: 0000f39d .word 0x0000f39d +10017b50: 400000fc .word 0x400000fc + +10017b54 : +10017b54: 4a03 ldr r2, [pc, #12] ; (10017b64 ) +10017b56: 6813 ldr r3, [r2, #0] +10017b58: f043 0301 orr.w r3, r3, #1 +10017b5c: 6013 str r3, [r2, #0] +10017b5e: 4b02 ldr r3, [pc, #8] ; (10017b68 ) +10017b60: 4718 bx r3 +10017b62: bf00 nop +10017b64: 400002c0 .word 0x400002c0 +10017b68: 00002ea5 .word 0x00002ea5 + +10017b6c : +10017b6c: b510 push {r4, lr} +10017b6e: 460c mov r4, r1 +10017b70: f7ff fff0 bl 10017b54 +10017b74: 4b06 ldr r3, [pc, #24] ; (10017b90 ) +10017b76: 781b ldrb r3, [r3, #0] +10017b78: b913 cbnz r3, 10017b80 +10017b7a: 4806 ldr r0, [pc, #24] ; (10017b94 ) +10017b7c: f7ff ff9e bl 10017abc +10017b80: f104 4018 add.w r0, r4, #2550136832 ; 0x98000000 +10017b84: f7ef fb7f bl 10007286 +10017b88: e8bd 4010 ldmia.w sp!, {r4, lr} +10017b8c: f7ef bbc6 b.w 1000731c +10017b90: 1004b598 .word 0x1004b598 +10017b94: 1004b58c .word 0x1004b58c + +10017b98 : +10017b98: b510 push {r4, lr} +10017b9a: 460c mov r4, r1 +10017b9c: f7ff ffda bl 10017b54 +10017ba0: 4b06 ldr r3, [pc, #24] ; (10017bbc ) +10017ba2: 781b ldrb r3, [r3, #0] +10017ba4: b913 cbnz r3, 10017bac +10017ba6: 4806 ldr r0, [pc, #24] ; (10017bc0 ) +10017ba8: f7ff ff88 bl 10017abc +10017bac: f104 4018 add.w r0, r4, #2550136832 ; 0x98000000 +10017bb0: f7ef fb58 bl 10007264 +10017bb4: e8bd 4010 ldmia.w sp!, {r4, lr} +10017bb8: f7ef bbb0 b.w 1000731c +10017bbc: 1004b598 .word 0x1004b598 +10017bc0: 1004b58c .word 0x1004b58c + +10017bc4 : +10017bc4: b538 push {r3, r4, r5, lr} +10017bc6: 460c mov r4, r1 +10017bc8: 4615 mov r5, r2 +10017bca: f7ff ffc3 bl 10017b54 +10017bce: 4b09 ldr r3, [pc, #36] ; (10017bf4 ) +10017bd0: 781b ldrb r3, [r3, #0] +10017bd2: b913 cbnz r3, 10017bda +10017bd4: 4808 ldr r0, [pc, #32] ; (10017bf8 ) +10017bd6: f7ff ff71 bl 10017abc +10017bda: 4b07 ldr r3, [pc, #28] ; (10017bf8 ) +10017bdc: f104 4418 add.w r4, r4, #2550136832 ; 0x98000000 +10017be0: e893 0003 ldmia.w r3, {r0, r1} +10017be4: f7ef f88a bl 10006cfc +10017be8: 6823 ldr r3, [r4, #0] +10017bea: 602b str r3, [r5, #0] +10017bec: f7ef fb96 bl 1000731c +10017bf0: 2001 movs r0, #1 +10017bf2: bd38 pop {r3, r4, r5, pc} +10017bf4: 1004b598 .word 0x1004b598 +10017bf8: 1004b58c .word 0x1004b58c + +10017bfc : +10017bfc: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +10017bfe: 461d mov r5, r3 +10017c00: 460c mov r4, r1 +10017c02: 4616 mov r6, r2 +10017c04: f7ff ffa6 bl 10017b54 +10017c08: 4b2f ldr r3, [pc, #188] ; (10017cc8 ) +10017c0a: 781b ldrb r3, [r3, #0] +10017c0c: b913 cbnz r3, 10017c14 +10017c0e: 482f ldr r0, [pc, #188] ; (10017ccc ) +10017c10: f7ff ff54 bl 10017abc +10017c14: 4b2d ldr r3, [pc, #180] ; (10017ccc ) +10017c16: e893 0003 ldmia.w r3, {r0, r1} +10017c1a: f7ef f86f bl 10006cfc +10017c1e: f014 0303 ands.w r3, r4, #3 +10017c22: d013 beq.n 10017c4c +10017c24: f104 4218 add.w r2, r4, #2550136832 ; 0x98000000 +10017c28: 1ad2 subs r2, r2, r3 +10017c2a: 6811 ldr r1, [r2, #0] +10017c2c: aa02 add r2, sp, #8 +10017c2e: f842 1d04 str.w r1, [r2, #-4]! +10017c32: 1e59 subs r1, r3, #1 +10017c34: f1c3 0304 rsb r3, r3, #4 +10017c38: 440a add r2, r1 +10017c3a: 442b add r3, r5 +10017c3c: f812 1f01 ldrb.w r1, [r2, #1]! +10017c40: 3e01 subs r6, #1 +10017c42: f805 1b01 strb.w r1, [r5], #1 +10017c46: d001 beq.n 10017c4c +10017c48: 429d cmp r5, r3 +10017c4a: d1f7 bne.n 10017c3c +10017c4c: 3c01 subs r4, #1 +10017c4e: f024 0403 bic.w r4, r4, #3 +10017c52: 3404 adds r4, #4 +10017c54: f104 4118 add.w r1, r4, #2550136832 ; 0x98000000 +10017c58: 07aa lsls r2, r5, #30 +10017c5a: 462b mov r3, r5 +10017c5c: eba1 0105 sub.w r1, r1, r5 +10017c60: d107 bne.n 10017c72 +10017c62: 1af2 subs r2, r6, r3 +10017c64: 442a add r2, r5 +10017c66: 2a03 cmp r2, #3 +10017c68: d908 bls.n 10017c7c +10017c6a: 585a ldr r2, [r3, r1] +10017c6c: f843 2b04 str.w r2, [r3], #4 +10017c70: e7f7 b.n 10017c62 +10017c72: af01 add r7, sp, #4 +10017c74: 1af2 subs r2, r6, r3 +10017c76: 442a add r2, r5 +10017c78: 2a03 cmp r2, #3 +10017c7a: d818 bhi.n 10017cae +10017c7c: f026 0303 bic.w r3, r6, #3 +10017c80: f006 0603 and.w r6, r6, #3 +10017c84: 441c add r4, r3 +10017c86: 442b add r3, r5 +10017c88: b166 cbz r6, 10017ca4 +10017c8a: f104 4418 add.w r4, r4, #2550136832 ; 0x98000000 +10017c8e: 6821 ldr r1, [r4, #0] +10017c90: a802 add r0, sp, #8 +10017c92: f840 1d04 str.w r1, [r0, #-4]! +10017c96: 2100 movs r1, #0 +10017c98: 5c0c ldrb r4, [r1, r0] +10017c9a: 3101 adds r1, #1 +10017c9c: 428e cmp r6, r1 +10017c9e: f803 4b01 strb.w r4, [r3], #1 +10017ca2: d1f9 bne.n 10017c98 +10017ca4: f7ef fb3a bl 1000731c +10017ca8: 2001 movs r0, #1 +10017caa: b003 add sp, #12 +10017cac: bdf0 pop {r4, r5, r6, r7, pc} +10017cae: 585a ldr r2, [r3, r1] +10017cb0: 4618 mov r0, r3 +10017cb2: 9201 str r2, [sp, #4] +10017cb4: 2200 movs r2, #0 +10017cb6: f812 e007 ldrb.w lr, [r2, r7] +10017cba: 3201 adds r2, #1 +10017cbc: 2a04 cmp r2, #4 +10017cbe: f800 eb01 strb.w lr, [r0], #1 +10017cc2: d1f8 bne.n 10017cb6 +10017cc4: 3304 adds r3, #4 +10017cc6: e7d5 b.n 10017c74 +10017cc8: 1004b598 .word 0x1004b598 +10017ccc: 1004b58c .word 0x1004b58c + +10017cd0 : +10017cd0: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10017cd4: 461f mov r7, r3 +10017cd6: 460d mov r5, r1 +10017cd8: 4690 mov r8, r2 +10017cda: f7ff ff3b bl 10017b54 +10017cde: 4b4d ldr r3, [pc, #308] ; (10017e14 ) +10017ce0: 781b ldrb r3, [r3, #0] +10017ce2: b913 cbnz r3, 10017cea +10017ce4: 484c ldr r0, [pc, #304] ; (10017e18 ) +10017ce6: f7ff fee9 bl 10017abc +10017cea: 4c4b ldr r4, [pc, #300] ; (10017e18 ) +10017cec: f015 0303 ands.w r3, r5, #3 +10017cf0: 79e6 ldrb r6, [r4, #7] +10017cf2: d020 beq.n 10017d36 +10017cf4: f105 4018 add.w r0, r5, #2550136832 ; 0x98000000 +10017cf8: 1ac0 subs r0, r0, r3 +10017cfa: 6801 ldr r1, [r0, #0] +10017cfc: aa02 add r2, sp, #8 +10017cfe: f842 1d04 str.w r1, [r2, #-4]! +10017d02: 4639 mov r1, r7 +10017d04: 1e5f subs r7, r3, #1 +10017d06: f1c3 0304 rsb r3, r3, #4 +10017d0a: 443a add r2, r7 +10017d0c: 440b add r3, r1 +10017d0e: f811 7b01 ldrb.w r7, [r1], #1 +10017d12: f1b8 0801 subs.w r8, r8, #1 +10017d16: f802 7f01 strb.w r7, [r2, #1]! +10017d1a: 460f mov r7, r1 +10017d1c: d001 beq.n 10017d22 +10017d1e: 428b cmp r3, r1 +10017d20: d1f5 bne.n 10017d0e +10017d22: 9b01 ldr r3, [sp, #4] +10017d24: 6003 str r3, [r0, #0] +10017d26: 4b3d ldr r3, [pc, #244] ; (10017e1c ) +10017d28: 4798 blx r3 +10017d2a: e894 0003 ldmia.w r4, {r0, r1} +10017d2e: 2e04 cmp r6, #4 +10017d30: d137 bne.n 10017da2 +10017d32: f7ef f8b1 bl 10006e98 +10017d36: 3d01 subs r5, #1 +10017d38: f025 0503 bic.w r5, r5, #3 +10017d3c: 07bb lsls r3, r7, #30 +10017d3e: f105 0504 add.w r5, r5, #4 +10017d42: d031 beq.n 10017da8 +10017d44: 46b9 mov r9, r7 +10017d46: f105 4a18 add.w sl, r5, #2550136832 ; 0x98000000 +10017d4a: f8df b0d0 ldr.w fp, [pc, #208] ; 10017e1c +10017d4e: ebaa 0a07 sub.w sl, sl, r7 +10017d52: eba8 0309 sub.w r3, r8, r9 +10017d56: 443b add r3, r7 +10017d58: 2b03 cmp r3, #3 +10017d5a: d842 bhi.n 10017de2 +10017d5c: f028 0303 bic.w r3, r8, #3 +10017d60: f008 0203 and.w r2, r8, #3 +10017d64: 441d add r5, r3 +10017d66: 443b add r3, r7 +10017d68: b1aa cbz r2, 10017d96 +10017d6a: f105 4518 add.w r5, r5, #2550136832 ; 0x98000000 +10017d6e: 6829 ldr r1, [r5, #0] +10017d70: a802 add r0, sp, #8 +10017d72: f840 1d04 str.w r1, [r0, #-4]! +10017d76: 2100 movs r1, #0 +10017d78: 5c5f ldrb r7, [r3, r1] +10017d7a: 540f strb r7, [r1, r0] +10017d7c: 3101 adds r1, #1 +10017d7e: 428a cmp r2, r1 +10017d80: d1fa bne.n 10017d78 +10017d82: 9b01 ldr r3, [sp, #4] +10017d84: 602b str r3, [r5, #0] +10017d86: 4b25 ldr r3, [pc, #148] ; (10017e1c ) +10017d88: 4798 blx r3 +10017d8a: e894 0003 ldmia.w r4, {r0, r1} +10017d8e: 2e04 cmp r6, #4 +10017d90: d13c bne.n 10017e0c +10017d92: f7ef f881 bl 10006e98 +10017d96: f7ef fac1 bl 1000731c +10017d9a: 2001 movs r0, #1 +10017d9c: b003 add sp, #12 +10017d9e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10017da2: f7ee ffab bl 10006cfc +10017da6: e7c6 b.n 10017d36 +10017da8: f105 4918 add.w r9, r5, #2550136832 ; 0x98000000 +10017dac: f109 0904 add.w r9, r9, #4 +10017db0: f1a7 0a04 sub.w sl, r7, #4 +10017db4: eba9 0907 sub.w r9, r9, r7 +10017db8: f1a8 0304 sub.w r3, r8, #4 +10017dbc: eba3 030a sub.w r3, r3, sl +10017dc0: 443b add r3, r7 +10017dc2: 2b03 cmp r3, #3 +10017dc4: d9ca bls.n 10017d5c +10017dc6: eb09 030a add.w r3, r9, sl +10017dca: f85a 2f04 ldr.w r2, [sl, #4]! +10017dce: 601a str r2, [r3, #0] +10017dd0: 4b12 ldr r3, [pc, #72] ; (10017e1c ) +10017dd2: 4798 blx r3 +10017dd4: e894 0003 ldmia.w r4, {r0, r1} +10017dd8: 2e04 cmp r6, #4 +10017dda: d114 bne.n 10017e06 +10017ddc: f7ef f85c bl 10006e98 +10017de0: e7ea b.n 10017db8 +10017de2: f8d9 3000 ldr.w r3, [r9] +10017de6: f849 300a str.w r3, [r9, sl] +10017dea: 9301 str r3, [sp, #4] +10017dec: 47d8 blx fp +10017dee: e894 0003 ldmia.w r4, {r0, r1} +10017df2: 2e04 cmp r6, #4 +10017df4: d104 bne.n 10017e00 +10017df6: f7ef f84f bl 10006e98 +10017dfa: f109 0904 add.w r9, r9, #4 +10017dfe: e7a8 b.n 10017d52 +10017e00: f7ee ff7c bl 10006cfc +10017e04: e7f9 b.n 10017dfa +10017e06: f7ee ff79 bl 10006cfc +10017e0a: e7d5 b.n 10017db8 +10017e0c: f7ee ff76 bl 10006cfc +10017e10: e7c1 b.n 10017d96 +10017e12: bf00 nop +10017e14: 1004b598 .word 0x1004b598 +10017e18: 1004b58c .word 0x1004b58c +10017e1c: 00002ea5 .word 0x00002ea5 + +10017e20 : +10017e20: b510 push {r4, lr} +10017e22: 4c0d ldr r4, [pc, #52] ; (10017e58 ) +10017e24: 7823 ldrb r3, [r4, #0] +10017e26: b143 cbz r3, 10017e3a +10017e28: 4b0c ldr r3, [pc, #48] ; (10017e5c ) +10017e2a: 799b ldrb r3, [r3, #6] +10017e2c: f1a3 0212 sub.w r2, r3, #18 +10017e30: 2a0d cmp r2, #13 +10017e32: d90d bls.n 10017e50 +10017e34: f44f 1080 mov.w r0, #1048576 ; 0x100000 +10017e38: bd10 pop {r4, pc} +10017e3a: f7ff fe8b bl 10017b54 +10017e3e: 4807 ldr r0, [pc, #28] ; (10017e5c ) +10017e40: f7ff fe3c bl 10017abc +10017e44: f7ef fa6a bl 1000731c +10017e48: 7820 ldrb r0, [r4, #0] +10017e4a: 2800 cmp r0, #0 +10017e4c: d1ec bne.n 10017e28 +10017e4e: bd10 pop {r4, pc} +10017e50: 2001 movs r0, #1 +10017e52: 4098 lsls r0, r3 +10017e54: bd10 pop {r4, pc} +10017e56: bf00 nop +10017e58: 1004b598 .word 0x1004b598 +10017e5c: 1004b58c .word 0x1004b58c + +10017e60 : +10017e60: 6882 ldr r2, [r0, #8] +10017e62: 6843 ldr r3, [r0, #4] +10017e64: 2a01 cmp r2, #1 +10017e66: d105 bne.n 10017e74 +10017e68: 2b03 cmp r3, #3 +10017e6a: bf0c ite eq +10017e6c: 2304 moveq r3, #4 +10017e6e: 2303 movne r3, #3 +10017e70: 60c3 str r3, [r0, #12] +10017e72: 4770 bx lr +10017e74: 2b03 cmp r3, #3 +10017e76: bf96 itet ls +10017e78: 4a01 ldrls r2, [pc, #4] ; (10017e80 ) +10017e7a: 2300 movhi r3, #0 +10017e7c: 5cd3 ldrbls r3, [r2, r3] +10017e7e: e7f7 b.n 10017e70 +10017e80: 100405a9 .word 0x100405a9 + +10017e84 : +10017e84: b538 push {r3, r4, r5, lr} +10017e86: 1c43 adds r3, r0, #1 +10017e88: 4604 mov r4, r0 +10017e8a: d105 bne.n 10017e98 +10017e8c: 236f movs r3, #111 ; 0x6f +10017e8e: 4a07 ldr r2, [pc, #28] ; (10017eac ) +10017e90: 4907 ldr r1, [pc, #28] ; (10017eb0 ) +10017e92: 4808 ldr r0, [pc, #32] ; (10017eb4 ) +10017e94: 4d08 ldr r5, [pc, #32] ; (10017eb8 ) +10017e96: 47a8 blx r5 +10017e98: 4620 mov r0, r4 +10017e9a: 2100 movs r1, #0 +10017e9c: f000 f864 bl 10017f68 +10017ea0: 4620 mov r0, r4 +10017ea2: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10017ea6: f000 be1f b.w 10018ae8 +10017eaa: bf00 nop +10017eac: 100405b0 .word 0x100405b0 +10017eb0: 100405b9 .word 0x100405b9 +10017eb4: 10040620 .word 0x10040620 +10017eb8: 0000f39d .word 0x0000f39d + +10017ebc : +10017ebc: 1c4b adds r3, r1, #1 +10017ebe: b510 push {r4, lr} +10017ec0: 4604 mov r4, r0 +10017ec2: d015 beq.n 10017ef0 +10017ec4: 6001 str r1, [r0, #0] +10017ec6: 4608 mov r0, r1 +10017ec8: f7ff ffdc bl 10017e84 +10017ecc: 2300 movs r3, #0 +10017ece: 6120 str r0, [r4, #16] +10017ed0: 60e3 str r3, [r4, #12] +10017ed2: f3c0 1341 ubfx r3, r0, #5, #2 +10017ed6: f000 001f and.w r0, r0, #31 +10017eda: 7560 strb r0, [r4, #21] +10017edc: 7523 strb r3, [r4, #20] +10017ede: 4620 mov r0, r4 +10017ee0: f7ff ffbe bl 10017e60 +10017ee4: f104 000c add.w r0, r4, #12 +10017ee8: e8bd 4010 ldmia.w sp!, {r4, lr} +10017eec: f000 be0c b.w 10018b08 +10017ef0: bd10 pop {r4, pc} + +10017ef2 : +10017ef2: b510 push {r4, lr} +10017ef4: 6041 str r1, [r0, #4] +10017ef6: f7ff ffb3 bl 10017e60 +10017efa: e8bd 4010 ldmia.w sp!, {r4, lr} +10017efe: 300c adds r0, #12 +10017f00: f000 be02 b.w 10018b08 + +10017f04 : +10017f04: b510 push {r4, lr} +10017f06: 6081 str r1, [r0, #8] +10017f08: f7ff ffaa bl 10017e60 +10017f0c: e8bd 4010 ldmia.w sp!, {r4, lr} +10017f10: 300c adds r0, #12 +10017f12: f000 bdf9 b.w 10018b08 + ... + +10017f18 : +10017f18: 68c2 ldr r2, [r0, #12] +10017f1a: b513 push {r0, r1, r4, lr} +10017f1c: 2a04 cmp r2, #4 +10017f1e: 460b mov r3, r1 +10017f20: d019 beq.n 10017f56 +10017f22: 7d44 ldrb r4, [r0, #21] +10017f24: 7d02 ldrb r2, [r0, #20] +10017f26: 2001 movs r0, #1 +10017f28: 490d ldr r1, [pc, #52] ; (10017f60 ) +10017f2a: 40a0 lsls r0, r4 +10017f2c: 5c8a ldrb r2, [r1, r2] +10017f2e: f003 0301 and.w r3, r3, #1 +10017f32: f102 4280 add.w r2, r2, #1073741824 ; 0x40000000 +10017f36: f502 5280 add.w r2, r2, #4096 ; 0x1000 +10017f3a: 6811 ldr r1, [r2, #0] +10017f3c: 40a3 lsls r3, r4 +10017f3e: 9101 str r1, [sp, #4] +10017f40: 9901 ldr r1, [sp, #4] +10017f42: ea21 0100 bic.w r1, r1, r0 +10017f46: 9101 str r1, [sp, #4] +10017f48: 9901 ldr r1, [sp, #4] +10017f4a: 430b orrs r3, r1 +10017f4c: 9301 str r3, [sp, #4] +10017f4e: 9b01 ldr r3, [sp, #4] +10017f50: 6013 str r3, [r2, #0] +10017f52: b002 add sp, #8 +10017f54: bd10 pop {r4, pc} +10017f56: 4b03 ldr r3, [pc, #12] ; (10017f64 ) +10017f58: 300c adds r0, #12 +10017f5a: 4798 blx r3 +10017f5c: e7f9 b.n 10017f52 +10017f5e: bf00 nop +10017f60: 100405ad .word 0x100405ad +10017f64: 0000dc91 .word 0x0000dc91 + +10017f68 : +10017f68: 4770 bx lr + ... + +10017f6c : +10017f6c: 4288 cmp r0, r1 +10017f6e: b508 push {r3, lr} +10017f70: d00f beq.n 10017f92 +10017f72: 1c42 adds r2, r0, #1 +10017f74: d00d beq.n 10017f92 +10017f76: 3101 adds r1, #1 +10017f78: d00a beq.n 10017f90 +10017f7a: 4b07 ldr r3, [pc, #28] ; (10017f98 ) +10017f7c: 681b ldr r3, [r3, #0] +10017f7e: 075b lsls r3, r3, #29 +10017f80: d503 bpl.n 10017f8a +10017f82: 4906 ldr r1, [pc, #24] ; (10017f9c ) +10017f84: 4806 ldr r0, [pc, #24] ; (10017fa0 ) +10017f86: 4b07 ldr r3, [pc, #28] ; (10017fa4 ) +10017f88: 4798 blx r3 +10017f8a: f04f 31ff mov.w r1, #4294967295 +10017f8e: e000 b.n 10017f92 +10017f90: 4601 mov r1, r0 +10017f92: 4608 mov r0, r1 +10017f94: bd08 pop {r3, pc} +10017f96: bf00 nop +10017f98: 10000314 .word 0x10000314 +10017f9c: 10040636 .word 0x10040636 +10017fa0: 10040655 .word 0x10040655 +10017fa4: 0000f39d .word 0x0000f39d + +10017fa8 : +10017fa8: 680b ldr r3, [r1, #0] +10017faa: 1c5a adds r2, r3, #1 +10017fac: d101 bne.n 10017fb2 +10017fae: 4618 mov r0, r3 +10017fb0: 4770 bx lr +10017fb2: 4283 cmp r3, r0 +10017fb4: d101 bne.n 10017fba +10017fb6: 6848 ldr r0, [r1, #4] +10017fb8: 4770 bx lr +10017fba: 310c adds r1, #12 +10017fbc: e7f4 b.n 10017fa8 + ... + +10017fc0 : +10017fc0: b510 push {r4, lr} +10017fc2: 1c44 adds r4, r0, #1 +10017fc4: d103 bne.n 10017fce +10017fc6: f04f 34ff mov.w r4, #4294967295 +10017fca: 4620 mov r0, r4 +10017fcc: bd10 pop {r4, pc} +10017fce: f7ff ffeb bl 10017fa8 +10017fd2: 1c42 adds r2, r0, #1 +10017fd4: 4604 mov r4, r0 +10017fd6: d1f8 bne.n 10017fca +10017fd8: 4b04 ldr r3, [pc, #16] ; (10017fec ) +10017fda: 681b ldr r3, [r3, #0] +10017fdc: 075b lsls r3, r3, #29 +10017fde: d5f2 bpl.n 10017fc6 +10017fe0: 4903 ldr r1, [pc, #12] ; (10017ff0 ) +10017fe2: 4b04 ldr r3, [pc, #16] ; (10017ff4 ) +10017fe4: 4804 ldr r0, [pc, #16] ; (10017ff8 ) +10017fe6: 4798 blx r3 +10017fe8: e7ef b.n 10017fca +10017fea: bf00 nop +10017fec: 10000314 .word 0x10000314 +10017ff0: 10040643 .word 0x10040643 +10017ff4: 0000f39d .word 0x0000f39d +10017ff8: 10040675 .word 0x10040675 + +10017ffc : +10017ffc: b2c0 uxtb r0, r0 +10017ffe: b909 cbnz r1, 10018004 +10018000: f000 00fe and.w r0, r0, #254 ; 0xfe +10018004: b118 cbz r0, 1001800e +10018006: b2db uxtb r3, r3 +10018008: b2d2 uxtb r2, r2 +1001800a: f002 bbc9 b.w 1001a7a0 +1001800e: 4770 bx lr + +10018010 : +10018010: f010 0301 ands.w r3, r0, #1 +10018014: d002 beq.n 1001801c +10018016: 1c0b adds r3, r1, #0 +10018018: bf18 it ne +1001801a: 2301 movne r3, #1 +1001801c: 0782 lsls r2, r0, #30 +1001801e: d503 bpl.n 10018028 +10018020: f043 0002 orr.w r0, r3, #2 +10018024: f002 bc36 b.w 1001a894 +10018028: b10b cbz r3, 1001802e +1001802a: 2001 movs r0, #1 +1001802c: e7fa b.n 10018024 +1001802e: 4770 bx lr + +10018030 : +10018030: f8d0 36f8 ldr.w r3, [r0, #1784] ; 0x6f8 +10018034: b11b cbz r3, 1001803e +10018036: 2100 movs r1, #0 +10018038: f8d0 06fc ldr.w r0, [r0, #1788] ; 0x6fc +1001803c: 4718 bx r3 +1001803e: 4770 bx lr + +10018040 : +10018040: f8d0 3620 ldr.w r3, [r0, #1568] ; 0x620 +10018044: 075a lsls r2, r3, #29 +10018046: d50a bpl.n 1001805e +10018048: f023 0304 bic.w r3, r3, #4 +1001804c: f8c0 3620 str.w r3, [r0, #1568] ; 0x620 +10018050: f8d0 3614 ldr.w r3, [r0, #1556] ; 0x614 +10018054: b11b cbz r3, 1001805e +10018056: 2101 movs r1, #1 +10018058: f8d0 0618 ldr.w r0, [r0, #1560] ; 0x618 +1001805c: 4718 bx r3 +1001805e: 4770 bx lr + +10018060 : +10018060: f8d0 3620 ldr.w r3, [r0, #1568] ; 0x620 +10018064: f023 0302 bic.w r3, r3, #2 +10018068: f8c0 3620 str.w r3, [r0, #1568] ; 0x620 +1001806c: f8d0 3614 ldr.w r3, [r0, #1556] ; 0x614 +10018070: b11b cbz r3, 1001807a +10018072: 2100 movs r1, #0 +10018074: f8d0 0618 ldr.w r0, [r0, #1560] ; 0x618 +10018078: 4718 bx r3 +1001807a: 4770 bx lr + +1001807c : +1001807c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10018080: 460e mov r6, r1 +10018082: 4617 mov r7, r2 +10018084: 2100 movs r1, #0 +10018086: f44f 62e0 mov.w r2, #1792 ; 0x700 +1001808a: 461d mov r5, r3 +1001808c: 4b3f ldr r3, [pc, #252] ; (1001818c ) +1001808e: 4604 mov r4, r0 +10018090: 4798 blx r3 +10018092: 2300 movs r3, #0 +10018094: 493e ldr r1, [pc, #248] ; (10018190 ) +10018096: f8c4 3620 str.w r3, [r4, #1568] ; 0x620 +1001809a: 4630 mov r0, r6 +1001809c: f7ff ff90 bl 10017fc0 +100180a0: 493c ldr r1, [pc, #240] ; (10018194 ) +100180a2: 4606 mov r6, r0 +100180a4: 4638 mov r0, r7 +100180a6: f7ff ff8b bl 10017fc0 +100180aa: 4601 mov r1, r0 +100180ac: 4630 mov r0, r6 +100180ae: f7ff ff5d bl 10017f6c +100180b2: 1c46 adds r6, r0, #1 +100180b4: d108 bne.n 100180c8 +100180b6: 4b38 ldr r3, [pc, #224] ; (10018198 ) +100180b8: 681b ldr r3, [r3, #0] +100180ba: 0519 lsls r1, r3, #20 +100180bc: d564 bpl.n 10018188 +100180be: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +100180c2: 4836 ldr r0, [pc, #216] ; (1001819c ) +100180c4: 4b36 ldr r3, [pc, #216] ; (100181a0 ) +100180c6: 4718 bx r3 +100180c8: 2301 movs r3, #1 +100180ca: f3c0 1603 ubfx r6, r0, #4, #4 +100180ce: f884 5624 strb.w r5, [r4, #1572] ; 0x624 +100180d2: f000 050f and.w r5, r0, #15 +100180d6: f884 308a strb.w r3, [r4, #138] ; 0x8a +100180da: f504 60b4 add.w r0, r4, #1440 ; 0x5a0 +100180de: f884 6084 strb.w r6, [r4, #132] ; 0x84 +100180e2: f884 5089 strb.w r5, [r4, #137] ; 0x89 +100180e6: f000 fd2f bl 10018b48 +100180ea: f8d4 35c8 ldr.w r3, [r4, #1480] ; 0x5c8 +100180ee: f894 108a ldrb.w r1, [r4, #138] ; 0x8a +100180f2: 4620 mov r0, r4 +100180f4: 4798 blx r3 +100180f6: b936 cbnz r6, 10018106 +100180f8: 2d01 cmp r5, #1 +100180fa: d13b bne.n 10018174 +100180fc: 4a29 ldr r2, [pc, #164] ; (100181a4 ) +100180fe: 6813 ldr r3, [r2, #0] +10018100: f023 0310 bic.w r3, r3, #16 +10018104: 6013 str r3, [r2, #0] +10018106: 4d28 ldr r5, [pc, #160] ; (100181a8 ) +10018108: f8d4 35c0 ldr.w r3, [r4, #1472] ; 0x5c0 +1001810c: 4629 mov r1, r5 +1001810e: 4620 mov r0, r4 +10018110: 4798 blx r3 +10018112: 6aeb ldr r3, [r5, #44] ; 0x2c +10018114: 4620 mov r0, r4 +10018116: f884 3093 strb.w r3, [r4, #147] ; 0x93 +1001811a: f000 fe7f bl 10018e1c +1001811e: 4605 mov r5, r0 +10018120: b150 cbz r0, 10018138 +10018122: 4b1d ldr r3, [pc, #116] ; (10018198 ) +10018124: 681b ldr r3, [r3, #0] +10018126: 051b lsls r3, r3, #20 +10018128: d52e bpl.n 10018188 +1001812a: f894 1084 ldrb.w r1, [r4, #132] ; 0x84 +1001812e: 481f ldr r0, [pc, #124] ; (100181ac ) +10018130: 4b1b ldr r3, [pc, #108] ; (100181a0 ) +10018132: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +10018136: 4718 bx r3 +10018138: 4b1d ldr r3, [pc, #116] ; (100181b0 ) +1001813a: 4e1e ldr r6, [pc, #120] ; (100181b4 ) +1001813c: 64e3 str r3, [r4, #76] ; 0x4c +1001813e: 4b1e ldr r3, [pc, #120] ; (100181b8 ) +10018140: 6524 str r4, [r4, #80] ; 0x50 +10018142: 6423 str r3, [r4, #64] ; 0x40 +10018144: 4b1d ldr r3, [pc, #116] ; (100181bc ) +10018146: 6464 str r4, [r4, #68] ; 0x44 +10018148: f8c4 3598 str.w r3, [r4, #1432] ; 0x598 +1001814c: f8c4 459c str.w r4, [r4, #1436] ; 0x59c +10018150: 4630 mov r0, r6 +10018152: f000 fc17 bl 10018984 +10018156: f504 63d2 add.w r3, r4, #1680 ; 0x690 +1001815a: 60a3 str r3, [r4, #8] +1001815c: f884 5091 strb.w r5, [r4, #145] ; 0x91 +10018160: f504 63c5 add.w r3, r4, #1576 ; 0x628 +10018164: f884 5092 strb.w r5, [r4, #146] ; 0x92 +10018168: 6026 str r6, [r4, #0] +1001816a: 6063 str r3, [r4, #4] +1001816c: f8c4 561c str.w r5, [r4, #1564] ; 0x61c +10018170: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10018174: 2d00 cmp r5, #0 +10018176: d1c6 bne.n 10018106 +10018178: 4b11 ldr r3, [pc, #68] ; (100181c0 ) +1001817a: 681b ldr r3, [r3, #0] +1001817c: 051a lsls r2, r3, #20 +1001817e: d5c2 bpl.n 10018106 +10018180: 4b07 ldr r3, [pc, #28] ; (100181a0 ) +10018182: 4810 ldr r0, [pc, #64] ; (100181c4 ) +10018184: 4798 blx r3 +10018186: e7be b.n 10018106 +10018188: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1001818c: 0000f511 .word 0x0000f511 +10018190: 10040710 .word 0x10040710 +10018194: 100406a4 .word 0x100406a4 +10018198: 10000314 .word 0x10000314 +1001819c: 100407bd .word 0x100407bd +100181a0: 0000f39d .word 0x0000f39d +100181a4: 400000a4 .word 0x400000a4 +100181a8: 100409a0 .word 0x100409a0 +100181ac: 10040828 .word 0x10040828 +100181b0: 10018041 .word 0x10018041 +100181b4: 1004b59c .word 0x1004b59c +100181b8: 10018061 .word 0x10018061 +100181bc: 10018031 .word 0x10018031 +100181c0: 1000030c .word 0x1000030c +100181c4: 100407f3 .word 0x100407f3 + +100181c8 : +100181c8: 3901 subs r1, #1 +100181ca: b510 push {r4, lr} +100181cc: 4604 mov r4, r0 +100181ce: f880 1082 strb.w r1, [r0, #130] ; 0x82 +100181d2: 2a03 cmp r2, #3 +100181d4: d833 bhi.n 1001823e +100181d6: e8df f002 tbb [pc, r2] +100181da: 0602 .short 0x0602 +100181dc: 322d .short 0x322d +100181de: 2200 movs r2, #0 +100181e0: f884 208c strb.w r2, [r4, #140] ; 0x8c +100181e4: e003 b.n 100181ee +100181e6: 2200 movs r2, #0 +100181e8: f880 208c strb.w r2, [r0, #140] ; 0x8c +100181ec: 2201 movs r2, #1 +100181ee: 2b01 cmp r3, #1 +100181f0: f884 208b strb.w r2, [r4, #139] ; 0x8b +100181f4: d12c bne.n 10018250 +100181f6: f894 1084 ldrb.w r1, [r4, #132] ; 0x84 +100181fa: bb11 cbnz r1, 10018242 +100181fc: 4a17 ldr r2, [pc, #92] ; (1001825c ) +100181fe: f884 108a strb.w r1, [r4, #138] ; 0x8a +10018202: f884 108d strb.w r1, [r4, #141] ; 0x8d +10018206: 7013 strb r3, [r2, #0] +10018208: f8d4 35c8 ldr.w r3, [r4, #1480] ; 0x5c8 +1001820c: f894 108a ldrb.w r1, [r4, #138] ; 0x8a +10018210: 4620 mov r0, r4 +10018212: 4798 blx r3 +10018214: f894 308a ldrb.w r3, [r4, #138] ; 0x8a +10018218: b93b cbnz r3, 1001822a +1001821a: f894 308c ldrb.w r3, [r4, #140] ; 0x8c +1001821e: f894 0624 ldrb.w r0, [r4, #1572] ; 0x624 +10018222: b9cb cbnz r3, 10018258 +10018224: 2102 movs r1, #2 +10018226: f000 fc63 bl 10018af0 +1001822a: 4620 mov r0, r4 +1001822c: e8bd 4010 ldmia.w sp!, {r4, lr} +10018230: f000 be32 b.w 10018e98 +10018234: 2201 movs r2, #1 +10018236: f880 208c strb.w r2, [r0, #140] ; 0x8c +1001823a: 2200 movs r2, #0 +1001823c: e7d7 b.n 100181ee +1001823e: 2201 movs r2, #1 +10018240: e7ce b.n 100181e0 +10018242: 4b07 ldr r3, [pc, #28] ; (10018260 ) +10018244: 681b ldr r3, [r3, #0] +10018246: 051b lsls r3, r3, #20 +10018248: d502 bpl.n 10018250 +1001824a: 4806 ldr r0, [pc, #24] ; (10018264 ) +1001824c: 4b06 ldr r3, [pc, #24] ; (10018268 ) +1001824e: 4798 blx r3 +10018250: 2301 movs r3, #1 +10018252: f884 308a strb.w r3, [r4, #138] ; 0x8a +10018256: e7d7 b.n 10018208 +10018258: 2101 movs r1, #1 +1001825a: e7e4 b.n 10018226 +1001825c: 1004b599 .word 0x1004b599 +10018260: 10000314 .word 0x10000314 +10018264: 1004077c .word 0x1004077c +10018268: 0000f39d .word 0x0000f39d + +1001826c : +1001826c: f001 ba18 b.w 100196a0 + +10018270 : +10018270: f8c0 1614 str.w r1, [r0, #1556] ; 0x614 +10018274: f8c0 2618 str.w r2, [r0, #1560] ; 0x618 +10018278: 4770 bx lr + ... + +1001827c : +1001827c: b570 push {r4, r5, r6, lr} +1001827e: 460d mov r5, r1 +10018280: f8d0 1620 ldr.w r1, [r0, #1568] ; 0x620 +10018284: 4604 mov r4, r0 +10018286: 0748 lsls r0, r1, #29 +10018288: 4616 mov r6, r2 +1001828a: d509 bpl.n 100182a0 +1001828c: 4b16 ldr r3, [pc, #88] ; (100182e8 ) +1001828e: 681b ldr r3, [r3, #0] +10018290: 051a lsls r2, r3, #20 +10018292: d401 bmi.n 10018298 +10018294: 2001 movs r0, #1 +10018296: bd70 pop {r4, r5, r6, pc} +10018298: 4b14 ldr r3, [pc, #80] ; (100182ec ) +1001829a: 4815 ldr r0, [pc, #84] ; (100182f0 ) +1001829c: 4798 blx r3 +1001829e: e7f9 b.n 10018294 +100182a0: f8d4 361c ldr.w r3, [r4, #1564] ; 0x61c +100182a4: 079b lsls r3, r3, #30 +100182a6: d40c bmi.n 100182c2 +100182a8: 4621 mov r1, r4 +100182aa: f504 60b4 add.w r0, r4, #1440 ; 0x5a0 +100182ae: f000 fd09 bl 10018cc4 +100182b2: 2800 cmp r0, #0 +100182b4: d1ee bne.n 10018294 +100182b6: f8d4 361c ldr.w r3, [r4, #1564] ; 0x61c +100182ba: f043 0302 orr.w r3, r3, #2 +100182be: f8c4 361c str.w r3, [r4, #1564] ; 0x61c +100182c2: f8d4 3620 ldr.w r3, [r4, #1568] ; 0x620 +100182c6: 4632 mov r2, r6 +100182c8: f043 0304 orr.w r3, r3, #4 +100182cc: f8c4 3620 str.w r3, [r4, #1568] ; 0x620 +100182d0: 4629 mov r1, r5 +100182d2: 4620 mov r0, r4 +100182d4: f000 fd5e bl 10018d94 +100182d8: b128 cbz r0, 100182e6 +100182da: f8d4 3620 ldr.w r3, [r4, #1568] ; 0x620 +100182de: f023 0304 bic.w r3, r3, #4 +100182e2: f8c4 3620 str.w r3, [r4, #1568] ; 0x620 +100182e6: bd70 pop {r4, r5, r6, pc} +100182e8: 1000030c .word 0x1000030c +100182ec: 0000f39d .word 0x0000f39d +100182f0: 1004085b .word 0x1004085b + +100182f4 : +100182f4: 2221 movs r2, #33 ; 0x21 +100182f6: b508 push {r3, lr} +100182f8: 4b06 ldr r3, [pc, #24] ; (10018314 ) +100182fa: 4807 ldr r0, [pc, #28] ; (10018318 ) +100182fc: 601a str r2, [r3, #0] +100182fe: 4b07 ldr r3, [pc, #28] ; (1001831c ) +10018300: 4798 blx r3 +10018302: 4907 ldr r1, [pc, #28] ; (10018320 ) +10018304: 4b07 ldr r3, [pc, #28] ; (10018324 ) +10018306: 680a ldr r2, [r1, #0] +10018308: f402 62e0 and.w r2, r2, #1792 ; 0x700 +1001830c: 4313 orrs r3, r2 +1001830e: 600b str r3, [r1, #0] +10018310: bd08 pop {r3, pc} +10018312: bf00 nop +10018314: 40000014 .word 0x40000014 +10018318: 000186a0 .word 0x000186a0 +1001831c: 00000899 .word 0x00000899 +10018320: e000ed0c .word 0xe000ed0c +10018324: 05fa0004 .word 0x05fa0004 + +10018328 : +10018328: b508 push {r3, lr} +1001832a: 4b07 ldr r3, [pc, #28] ; (10018348 ) +1001832c: 2001 movs r0, #1 +1001832e: 689b ldr r3, [r3, #8] +10018330: 4798 blx r3 +10018332: 43c3 mvns r3, r0 +10018334: 4805 ldr r0, [pc, #20] ; (1001834c ) +10018336: f3c3 020b ubfx r2, r3, #0, #12 +1001833a: 4350 muls r0, r2 +1001833c: 4a04 ldr r2, [pc, #16] ; (10018350 ) +1001833e: 0b1b lsrs r3, r3, #12 +10018340: 4353 muls r3, r2 +10018342: eb03 30d0 add.w r0, r3, r0, lsr #15 +10018346: bd08 pop {r3, pc} +10018348: 10000318 .word 0x10000318 +1001834c: 000f4240 .word 0x000f4240 +10018350: 0001e848 .word 0x0001e848 + +10018354 : +10018354: b538 push {r3, r4, r5, lr} +10018356: 1e04 subs r4, r0, #0 +10018358: dd23 ble.n 100183a2 +1001835a: f5b4 7fa3 cmp.w r4, #326 ; 0x146 +1001835e: dc18 bgt.n 10018392 +10018360: 4b10 ldr r3, [pc, #64] ; (100183a4 ) +10018362: 681a ldr r2, [r3, #0] +10018364: f012 0201 ands.w r2, r2, #1 +10018368: d109 bne.n 1001837e +1001836a: 480f ldr r0, [pc, #60] ; (100183a8 ) +1001836c: 68c1 ldr r1, [r0, #12] +1001836e: f041 7180 orr.w r1, r1, #16777216 ; 0x1000000 +10018372: 60c1 str r1, [r0, #12] +10018374: 605a str r2, [r3, #4] +10018376: 681a ldr r2, [r3, #0] +10018378: f042 0201 orr.w r2, r2, #1 +1001837c: 601a str r2, [r3, #0] +1001837e: 22a6 movs r2, #166 ; 0xa6 +10018380: 4b08 ldr r3, [pc, #32] ; (100183a4 ) +10018382: 6859 ldr r1, [r3, #4] +10018384: fb02 1404 mla r4, r2, r4, r1 +10018388: 685a ldr r2, [r3, #4] +1001838a: 1aa2 subs r2, r4, r2 +1001838c: 2a00 cmp r2, #0 +1001838e: dcfb bgt.n 10018388 +10018390: bd38 pop {r3, r4, r5, pc} +10018392: f7ff ffc9 bl 10018328 +10018396: 4605 mov r5, r0 +10018398: f7ff ffc6 bl 10018328 +1001839c: 1b40 subs r0, r0, r5 +1001839e: 42a0 cmp r0, r4 +100183a0: d3fa bcc.n 10018398 +100183a2: bd38 pop {r3, r4, r5, pc} +100183a4: e0001000 .word 0xe0001000 +100183a8: e000edf0 .word 0xe000edf0 + +100183ac : +100183ac: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +100183ae: 1d03 adds r3, r0, #4 +100183b0: f600 75fc addw r5, r0, #4092 ; 0xffc +100183b4: 2000 movs r0, #0 +100183b6: f103 4418 add.w r4, r3, #2550136832 ; 0x98000000 +100183ba: 6824 ldr r4, [r4, #0] +100183bc: 9401 str r4, [sp, #4] +100183be: 3401 adds r4, #1 +100183c0: d012 beq.n 100183e8 +100183c2: f8bd 4004 ldrh.w r4, [sp, #4] +100183c6: f5b4 7f00 cmp.w r4, #512 ; 0x200 +100183ca: d80f bhi.n 100183ec +100183cc: f8bd 7006 ldrh.w r7, [sp, #6] +100183d0: 884e ldrh r6, [r1, #2] +100183d2: 42b7 cmp r7, r6 +100183d4: d102 bne.n 100183dc +100183d6: b962 cbnz r2, 100183f2 +100183d8: 4618 mov r0, r3 +100183da: 800c strh r4, [r1, #0] +100183dc: 3407 adds r4, #7 +100183de: f024 0403 bic.w r4, r4, #3 +100183e2: 4423 add r3, r4 +100183e4: 42ab cmp r3, r5 +100183e6: d3e6 bcc.n 100183b6 +100183e8: b003 add sp, #12 +100183ea: bdf0 pop {r4, r5, r6, r7, pc} +100183ec: f503 7301 add.w r3, r3, #516 ; 0x204 +100183f0: e7f8 b.n 100183e4 +100183f2: 4618 mov r0, r3 +100183f4: e7f8 b.n 100183e8 + +100183f6 : +100183f6: b084 sub sp, #16 +100183f8: 9101 str r1, [sp, #4] +100183fa: b289 uxth r1, r1 +100183fc: 3107 adds r1, #7 +100183fe: 1d03 adds r3, r0, #4 +10018400: f021 0103 bic.w r1, r1, #3 +10018404: f500 5080 add.w r0, r0, #4096 ; 0x1000 +10018408: 1a40 subs r0, r0, r1 +1001840a: f103 4218 add.w r2, r3, #2550136832 ; 0x98000000 +1001840e: 6812 ldr r2, [r2, #0] +10018410: 9203 str r2, [sp, #12] +10018412: 3201 adds r2, #1 +10018414: d105 bne.n 10018422 +10018416: 4283 cmp r3, r0 +10018418: bf28 it cs +1001841a: 2300 movcs r3, #0 +1001841c: 4618 mov r0, r3 +1001841e: b004 add sp, #16 +10018420: 4770 bx lr +10018422: f8bd 200c ldrh.w r2, [sp, #12] +10018426: f5b2 7f00 cmp.w r2, #512 ; 0x200 +1001842a: bf9d ittte ls +1001842c: 3207 addls r2, #7 +1001842e: f022 0203 bicls.w r2, r2, #3 +10018432: 189b addls r3, r3, r2 +10018434: f503 7301 addhi.w r3, r3, #516 ; 0x204 +10018438: 4283 cmp r3, r0 +1001843a: d3e6 bcc.n 1001840a +1001843c: 2300 movs r3, #0 +1001843e: e7ed b.n 1001841c + +10018440 <_fwrite_word>: +10018440: f100 4018 add.w r0, r0, #2550136832 ; 0x98000000 +10018444: b508 push {r3, lr} +10018446: 6001 str r1, [r0, #0] +10018448: f026 fa0e bl 1003e868 <__SpicWaitBusyDoneRtl8195A_veneer> +1001844c: 4b06 ldr r3, [pc, #24] ; (10018468 <_fwrite_word+0x28>) +1001844e: 79da ldrb r2, [r3, #7] +10018450: e893 0003 ldmia.w r3, {r0, r1} +10018454: 2a04 cmp r2, #4 +10018456: d103 bne.n 10018460 <_fwrite_word+0x20> +10018458: e8bd 4008 ldmia.w sp!, {r3, lr} +1001845c: f7ee bd1c b.w 10006e98 +10018460: e8bd 4008 ldmia.w sp!, {r3, lr} +10018464: f7ee bc4a b.w 10006cfc +10018468: 1004b58c .word 0x1004b58c + +1001846c : +1001846c: b508 push {r3, lr} +1001846e: 4b16 ldr r3, [pc, #88] ; (100184c8 ) +10018470: 2800 cmp r0, #0 +10018472: bf0c ite eq +10018474: f04f 32ff moveq.w r2, #4294967295 +10018478: 2200 movne r2, #0 +1001847a: 681b ldr r3, [r3, #0] +1001847c: d10e bne.n 1001849c +1001847e: 4293 cmp r3, r2 +10018480: bf28 it cs +10018482: 4613 movcs r3, r2 +10018484: 4a11 ldr r2, [pc, #68] ; (100184cc ) +10018486: 6812 ldr r2, [r2, #0] +10018488: b170 cbz r0, 100184a8 +1001848a: 429a cmp r2, r3 +1001848c: d819 bhi.n 100184c2 +1001848e: 3201 adds r2, #1 +10018490: bf14 ite ne +10018492: f44f 207e movne.w r0, #1040384 ; 0xfe000 +10018496: f44f 207f moveq.w r0, #1044480 ; 0xff000 +1001849a: bd08 pop {r3, pc} +1001849c: 429a cmp r2, r3 +1001849e: d3f1 bcc.n 10018484 +100184a0: 1c59 adds r1, r3, #1 +100184a2: bf18 it ne +100184a4: 4613 movne r3, r2 +100184a6: e7ed b.n 10018484 +100184a8: 429a cmp r2, r3 +100184aa: d30a bcc.n 100184c2 +100184ac: 3301 adds r3, #1 +100184ae: d105 bne.n 100184bc +100184b0: f06f 0101 mvn.w r1, #1 +100184b4: f44f 207e mov.w r0, #1040384 ; 0xfe000 +100184b8: f7ff ffc2 bl 10018440 <_fwrite_word> +100184bc: f44f 207e mov.w r0, #1040384 ; 0xfe000 +100184c0: bd08 pop {r3, pc} +100184c2: f44f 207f mov.w r0, #1044480 ; 0xff000 +100184c6: bd08 pop {r3, pc} +100184c8: 980fe000 .word 0x980fe000 +100184cc: 980ff000 .word 0x980ff000 + +100184d0 : +100184d0: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +100184d2: f021 0303 bic.w r3, r1, #3 +100184d6: f011 0103 ands.w r1, r1, #3 +100184da: d020 beq.n 1001851e +100184dc: 681d ldr r5, [r3, #0] +100184de: 1d1c adds r4, r3, #4 +100184e0: ab02 add r3, sp, #8 +100184e2: f843 5d04 str.w r5, [r3, #-4]! +100184e6: 1e4d subs r5, r1, #1 +100184e8: 442b add r3, r5 +100184ea: 1a09 subs r1, r1, r0 +100184ec: b172 cbz r2, 1001850c +100184ee: 3001 adds r0, #1 +100184f0: f810 7c01 ldrb.w r7, [r0, #-1] +100184f4: f813 6f01 ldrb.w r6, [r3, #1]! +100184f8: 3a01 subs r2, #1 +100184fa: 42b7 cmp r7, r6 +100184fc: eb00 0501 add.w r5, r0, r1 +10018500: d002 beq.n 10018508 +10018502: 2001 movs r0, #1 +10018504: b003 add sp, #12 +10018506: bdf0 pop {r4, r5, r6, r7, pc} +10018508: 076e lsls r6, r5, #29 +1001850a: d5ef bpl.n 100184ec +1001850c: f022 0303 bic.w r3, r2, #3 +10018510: 4403 add r3, r0 +10018512: 4298 cmp r0, r3 +10018514: d105 bne.n 10018522 +10018516: 0795 lsls r5, r2, #30 +10018518: d119 bne.n 1001854e +1001851a: 2000 movs r0, #0 +1001851c: e7f2 b.n 10018504 +1001851e: 461c mov r4, r3 +10018520: e7f4 b.n 1001850c +10018522: 7801 ldrb r1, [r0, #0] +10018524: 3004 adds r0, #4 +10018526: f88d 1004 strb.w r1, [sp, #4] +1001852a: f810 1c03 ldrb.w r1, [r0, #-3] +1001852e: f854 5b04 ldr.w r5, [r4], #4 +10018532: f88d 1005 strb.w r1, [sp, #5] +10018536: f810 1c02 ldrb.w r1, [r0, #-2] +1001853a: f88d 1006 strb.w r1, [sp, #6] +1001853e: f810 1c01 ldrb.w r1, [r0, #-1] +10018542: f88d 1007 strb.w r1, [sp, #7] +10018546: 9901 ldr r1, [sp, #4] +10018548: 428d cmp r5, r1 +1001854a: d0e2 beq.n 10018512 +1001854c: e7d9 b.n 10018502 +1001854e: 6823 ldr r3, [r4, #0] +10018550: 7801 ldrb r1, [r0, #0] +10018552: 9301 str r3, [sp, #4] +10018554: b2db uxtb r3, r3 +10018556: 4299 cmp r1, r3 +10018558: d1d3 bne.n 10018502 +1001855a: 0791 lsls r1, r2, #30 +1001855c: d5dd bpl.n 1001851a +1001855e: 7841 ldrb r1, [r0, #1] +10018560: f89d 3005 ldrb.w r3, [sp, #5] +10018564: 4299 cmp r1, r3 +10018566: d1cc bne.n 10018502 +10018568: 07d3 lsls r3, r2, #31 +1001856a: d5d6 bpl.n 1001851a +1001856c: 7880 ldrb r0, [r0, #2] +1001856e: f89d 3006 ldrb.w r3, [sp, #6] +10018572: 1ac0 subs r0, r0, r3 +10018574: bf18 it ne +10018576: 2001 movne r0, #1 +10018578: e7c4 b.n 10018504 + ... + +1001857c : +1001857c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10018580: f5b2 7f00 cmp.w r2, #512 ; 0x200 +10018584: b089 sub sp, #36 ; 0x24 +10018586: 4683 mov fp, r0 +10018588: 460c mov r4, r1 +1001858a: 4615 mov r5, r2 +1001858c: f200 80fa bhi.w 10018784 +10018590: 2001 movs r0, #1 +10018592: f7fe fb77 bl 10016c84 +10018596: f7ff fadd bl 10017b54 +1001859a: 4b7b ldr r3, [pc, #492] ; (10018788 ) +1001859c: 781b ldrb r3, [r3, #0] +1001859e: b913 cbnz r3, 100185a6 +100185a0: 487a ldr r0, [pc, #488] ; (1001878c ) +100185a2: f7ff fa8b bl 10017abc +100185a6: 2000 movs r0, #0 +100185a8: f8ad 4016 strh.w r4, [sp, #22] +100185ac: f8ad 5014 strh.w r5, [sp, #20] +100185b0: f7ff ff5c bl 1001846c +100185b4: 2804 cmp r0, #4 +100185b6: 4604 mov r4, r0 +100185b8: d91e bls.n 100185f8 +100185ba: 2200 movs r2, #0 +100185bc: a905 add r1, sp, #20 +100185be: f7ff fef5 bl 100183ac +100185c2: 2805 cmp r0, #5 +100185c4: d918 bls.n 100185f8 +100185c6: f8bd 3014 ldrh.w r3, [sp, #20] +100185ca: 42ab cmp r3, r5 +100185cc: d114 bne.n 100185f8 +100185ce: b13d cbz r5, 100185e0 +100185d0: f100 4118 add.w r1, r0, #2550136832 ; 0x98000000 +100185d4: 462a mov r2, r5 +100185d6: 3104 adds r1, #4 +100185d8: 4658 mov r0, fp +100185da: f7ff ff79 bl 100184d0 +100185de: b958 cbnz r0, 100185f8 +100185e0: 43ed mvns r5, r5 +100185e2: f3c5 35c0 ubfx r5, r5, #15, #1 +100185e6: f7ee fe99 bl 1000731c +100185ea: 2001 movs r0, #1 +100185ec: f7fe fb64 bl 10016cb8 +100185f0: 4628 mov r0, r5 +100185f2: b009 add sp, #36 ; 0x24 +100185f4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +100185f8: f8ad 5014 strh.w r5, [sp, #20] +100185fc: 4620 mov r0, r4 +100185fe: 9905 ldr r1, [sp, #20] +10018600: f7ff fef9 bl 100183f6 +10018604: 4604 mov r4, r0 +10018606: 2800 cmp r0, #0 +10018608: f040 8092 bne.w 10018730 +1001860c: 9b05 ldr r3, [sp, #20] +1001860e: 2001 movs r0, #1 +10018610: 9306 str r3, [sp, #24] +10018612: f8bd 3016 ldrh.w r3, [sp, #22] +10018616: 9301 str r3, [sp, #4] +10018618: f7ff ff28 bl 1001846c +1001861c: 2804 cmp r0, #4 +1001861e: 4604 mov r4, r0 +10018620: d930 bls.n 10018684 +10018622: 2000 movs r0, #0 +10018624: f7ff ff22 bl 1001846c +10018628: 2804 cmp r0, #4 +1001862a: 4607 mov r7, r0 +1001862c: f240 8082 bls.w 10018734 +10018630: 2081 movs r0, #129 ; 0x81 +10018632: f7fc fd8f bl 10015154 +10018636: 4681 mov r9, r0 +10018638: b940 cbnz r0, 1001864c +1001863a: 4b55 ldr r3, [pc, #340] ; (10018790 ) +1001863c: 681b ldr r3, [r3, #0] +1001863e: 025a lsls r2, r3, #9 +10018640: d502 bpl.n 10018648 +10018642: 4854 ldr r0, [pc, #336] ; (10018794 ) +10018644: 4b54 ldr r3, [pc, #336] ; (10018798 ) +10018646: 4798 blx r3 +10018648: 2405 movs r4, #5 +1001864a: e073 b.n 10018734 +1001864c: 4620 mov r0, r4 +1001864e: f7ee fe1a bl 10007286 +10018652: 1d23 adds r3, r4, #4 +10018654: f107 0a04 add.w sl, r7, #4 +10018658: 9300 str r3, [sp, #0] +1001865a: f10a 4318 add.w r3, sl, #2550136832 ; 0x98000000 +1001865e: 681b ldr r3, [r3, #0] +10018660: 9307 str r3, [sp, #28] +10018662: 3301 adds r3, #1 +10018664: d112 bne.n 1001868c +10018666: 4648 mov r0, r9 +10018668: f107 4718 add.w r7, r7, #2550136832 ; 0x98000000 +1001866c: f7fc fe0e bl 1001528c +10018670: 6839 ldr r1, [r7, #0] +10018672: 4620 mov r0, r4 +10018674: 3901 subs r1, #1 +10018676: f7ff fee3 bl 10018440 <_fwrite_word> +1001867a: 4620 mov r0, r4 +1001867c: 9906 ldr r1, [sp, #24] +1001867e: f7ff feba bl 100183f6 +10018682: 4604 mov r4, r0 +10018684: 2c00 cmp r4, #0 +10018686: d155 bne.n 10018734 +10018688: 2500 movs r5, #0 +1001868a: e7ac b.n 100185e6 +1001868c: f8bd 301c ldrh.w r3, [sp, #28] +10018690: f8bd 201e ldrh.w r2, [sp, #30] +10018694: f5b3 7f00 cmp.w r3, #512 ; 0x200 +10018698: bf98 it ls +1001869a: 1dde addls r6, r3, #7 +1001869c: 9901 ldr r1, [sp, #4] +1001869e: bf9a itte ls +100186a0: f026 0603 bicls.w r6, r6, #3 +100186a4: b2b6 uxthls r6, r6 +100186a6: f44f 7601 movhi.w r6, #516 ; 0x204 +100186aa: 428a cmp r2, r1 +100186ac: d105 bne.n 100186ba +100186ae: 44b2 add sl, r6 +100186b0: f607 73f8 addw r3, r7, #4088 ; 0xff8 +100186b4: 459a cmp sl, r3 +100186b6: d3d0 bcc.n 1001865a +100186b8: e7d5 b.n 10018666 +100186ba: f5b3 7f00 cmp.w r3, #512 ; 0x200 +100186be: d8f6 bhi.n 100186ae +100186c0: 2201 movs r2, #1 +100186c2: a907 add r1, sp, #28 +100186c4: 4620 mov r0, r4 +100186c6: f7ff fe71 bl 100183ac +100186ca: 4602 mov r2, r0 +100186cc: 2800 cmp r0, #0 +100186ce: d1ee bne.n 100186ae +100186d0: a907 add r1, sp, #28 +100186d2: 4638 mov r0, r7 +100186d4: f7ff fe6a bl 100183ac +100186d8: 2804 cmp r0, #4 +100186da: 4601 mov r1, r0 +100186dc: d926 bls.n 1001872c +100186de: 9b00 ldr r3, [sp, #0] +100186e0: f504 5280 add.w r2, r4, #4096 ; 0x1000 +100186e4: 4433 add r3, r6 +100186e6: 4293 cmp r3, r2 +100186e8: d308 bcc.n 100186fc +100186ea: 4b29 ldr r3, [pc, #164] ; (10018790 ) +100186ec: 681b ldr r3, [r3, #0] +100186ee: 025b lsls r3, r3, #9 +100186f0: d502 bpl.n 100186f8 +100186f2: 482a ldr r0, [pc, #168] ; (1001879c ) +100186f4: 4b28 ldr r3, [pc, #160] ; (10018798 ) +100186f6: 4798 blx r3 +100186f8: 2404 movs r4, #4 +100186fa: e01b b.n 10018734 +100186fc: 4b23 ldr r3, [pc, #140] ; (1001878c ) +100186fe: 464a mov r2, r9 +10018700: 78db ldrb r3, [r3, #3] +10018702: 4630 mov r0, r6 +10018704: f3c3 1301 ubfx r3, r3, #4, #2 +10018708: f7ee f9e6 bl 10006ad8 +1001870c: 08b3 lsrs r3, r6, #2 +1001870e: f1a9 0204 sub.w r2, r9, #4 +10018712: 2b00 cmp r3, #0 +10018714: d0cb beq.n 100186ae +10018716: f852 1f04 ldr.w r1, [r2, #4]! +1001871a: 9800 ldr r0, [sp, #0] +1001871c: 9303 str r3, [sp, #12] +1001871e: 9202 str r2, [sp, #8] +10018720: f7ff fe8e bl 10018440 <_fwrite_word> +10018724: 9b03 ldr r3, [sp, #12] +10018726: 9a02 ldr r2, [sp, #8] +10018728: 3b01 subs r3, #1 +1001872a: e7f2 b.n 10018712 +1001872c: 4604 mov r4, r0 +1001872e: e7a9 b.n 10018684 +10018730: 2804 cmp r0, #4 +10018732: d9a9 bls.n 10018688 +10018734: 4620 mov r0, r4 +10018736: 9905 ldr r1, [sp, #20] +10018738: f7ff fe82 bl 10018440 <_fwrite_word> +1001873c: 2700 movs r7, #0 +1001873e: 3503 adds r5, #3 +10018740: 10ad asrs r5, r5, #2 +10018742: f10b 0604 add.w r6, fp, #4 +10018746: eba4 040b sub.w r4, r4, fp +1001874a: 42bd cmp r5, r7 +1001874c: eb04 0006 add.w r0, r4, r6 +10018750: f106 0604 add.w r6, r6, #4 +10018754: d101 bne.n 1001875a +10018756: 2501 movs r5, #1 +10018758: e745 b.n 100185e6 +1001875a: f816 3c08 ldrb.w r3, [r6, #-8] +1001875e: 3701 adds r7, #1 +10018760: f363 0807 bfi r8, r3, #0, #8 +10018764: f816 3c07 ldrb.w r3, [r6, #-7] +10018768: f363 280f bfi r8, r3, #8, #8 +1001876c: f816 3c06 ldrb.w r3, [r6, #-6] +10018770: f363 4817 bfi r8, r3, #16, #8 +10018774: f816 3c05 ldrb.w r3, [r6, #-5] +10018778: f363 681f bfi r8, r3, #24, #8 +1001877c: 4641 mov r1, r8 +1001877e: f7ff fe5f bl 10018440 <_fwrite_word> +10018782: e7e2 b.n 1001874a +10018784: 2500 movs r5, #0 +10018786: e733 b.n 100185f0 +10018788: 1004b598 .word 0x1004b598 +1001878c: 1004b58c .word 0x1004b58c +10018790: 10000314 .word 0x10000314 +10018794: 1004089d .word 0x1004089d +10018798: 0000f39d .word 0x0000f39d +1001879c: 100408bb .word 0x100408bb + +100187a0 : +100187a0: f5b2 7f00 cmp.w r2, #512 ; 0x200 +100187a4: b573 push {r0, r1, r4, r5, r6, lr} +100187a6: 4606 mov r6, r0 +100187a8: 460c mov r4, r1 +100187aa: 4615 mov r5, r2 +100187ac: d83b bhi.n 10018826 +100187ae: 2001 movs r0, #1 +100187b0: f7fe fa68 bl 10016c84 +100187b4: 2300 movs r3, #0 +100187b6: f8ad 4006 strh.w r4, [sp, #6] +100187ba: f8ad 3004 strh.w r3, [sp, #4] +100187be: f7ff f9c9 bl 10017b54 +100187c2: 4b1a ldr r3, [pc, #104] ; (1001882c ) +100187c4: 781b ldrb r3, [r3, #0] +100187c6: b913 cbnz r3, 100187ce +100187c8: 4819 ldr r0, [pc, #100] ; (10018830 ) +100187ca: f7ff f977 bl 10017abc +100187ce: 2000 movs r0, #0 +100187d0: f7ff fe4c bl 1001846c +100187d4: 2804 cmp r0, #4 +100187d6: d923 bls.n 10018820 +100187d8: 2200 movs r2, #0 +100187da: a901 add r1, sp, #4 +100187dc: f7ff fde6 bl 100183ac +100187e0: 2804 cmp r0, #4 +100187e2: d91a bls.n 1001881a +100187e4: b17d cbz r5, 10018806 +100187e6: b176 cbz r6, 10018806 +100187e8: 4b11 ldr r3, [pc, #68] ; (10018830 ) +100187ea: f8bd 4004 ldrh.w r4, [sp, #4] +100187ee: 78db ldrb r3, [r3, #3] +100187f0: 42ac cmp r4, r5 +100187f2: f100 0104 add.w r1, r0, #4 +100187f6: f3c3 1301 ubfx r3, r3, #4, #2 +100187fa: 4620 mov r0, r4 +100187fc: 4632 mov r2, r6 +100187fe: bf28 it cs +10018800: 4628 movcs r0, r5 +10018802: f7ee f8af bl 10006964 +10018806: f9bd 4004 ldrsh.w r4, [sp, #4] +1001880a: f7ee fd87 bl 1000731c +1001880e: 2001 movs r0, #1 +10018810: f7fe fa52 bl 10016cb8 +10018814: 4620 mov r0, r4 +10018816: b002 add sp, #8 +10018818: bd70 pop {r4, r5, r6, pc} +1001881a: 43c0 mvns r0, r0 +1001881c: b204 sxth r4, r0 +1001881e: e7f4 b.n 1001880a +10018820: 43c4 mvns r4, r0 +10018822: b224 sxth r4, r4 +10018824: e7f1 b.n 1001880a +10018826: f06f 0402 mvn.w r4, #2 +1001882a: e7f3 b.n 10018814 +1001882c: 1004b598 .word 0x1004b598 +10018830: 1004b58c .word 0x1004b58c + +10018834 : +10018834: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10018838: 2600 movs r6, #0 +1001883a: f44f 1888 mov.w r8, #1114112 ; 0x110000 +1001883e: 4c16 ldr r4, [pc, #88] ; (10018898 ) +10018840: 4b16 ldr r3, [pc, #88] ; (1001889c ) +10018842: 4d17 ldr r5, [pc, #92] ; (100188a0 ) +10018844: 6026 str r6, [r4, #0] +10018846: 2028 movs r0, #40 ; 0x28 +10018848: 6023 str r3, [r4, #0] +1001884a: 47a8 blx r5 +1001884c: 4b15 ldr r3, [pc, #84] ; (100188a4 ) +1001884e: 6026 str r6, [r4, #0] +10018850: 2028 movs r0, #40 ; 0x28 +10018852: 6023 str r3, [r4, #0] +10018854: 47a8 blx r5 +10018856: 4b14 ldr r3, [pc, #80] ; (100188a8 ) +10018858: 6026 str r6, [r4, #0] +1001885a: 2028 movs r0, #40 ; 0x28 +1001885c: 6023 str r3, [r4, #0] +1001885e: 47a8 blx r5 +10018860: 4b12 ldr r3, [pc, #72] ; (100188ac ) +10018862: 6026 str r6, [r4, #0] +10018864: 2028 movs r0, #40 ; 0x28 +10018866: 6023 str r3, [r4, #0] +10018868: 47a8 blx r5 +1001886a: 4f11 ldr r7, [pc, #68] ; (100188b0 ) +1001886c: 6026 str r6, [r4, #0] +1001886e: 4e11 ldr r6, [pc, #68] ; (100188b4 ) +10018870: f8c4 8000 str.w r8, [r4] +10018874: 2028 movs r0, #40 ; 0x28 +10018876: 47a8 blx r5 +10018878: 683b ldr r3, [r7, #0] +1001887a: f413 5f40 tst.w r3, #12288 ; 0x3000 +1001887e: d109 bne.n 10018894 +10018880: 201e movs r0, #30 +10018882: 47a8 blx r5 +10018884: 3e01 subs r6, #1 +10018886: d1f3 bne.n 10018870 +10018888: 490a ldr r1, [pc, #40] ; (100188b4 ) +1001888a: 480b ldr r0, [pc, #44] ; (100188b8 ) +1001888c: 4b0b ldr r3, [pc, #44] ; (100188bc ) +1001888e: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +10018892: 4718 bx r3 +10018894: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10018898: 40000274 .word 0x40000274 +1001889c: 00811500 .word 0x00811500 +100188a0: 00000899 .word 0x00000899 +100188a4: 008201c0 .word 0x008201c0 +100188a8: 00840100 .word 0x00840100 +100188ac: 0080f980 .word 0x0080f980 +100188b0: 40000278 .word 0x40000278 +100188b4: 000186a1 .word 0x000186a1 +100188b8: 100408dd .word 0x100408dd +100188bc: 0000f39d .word 0x0000f39d + +100188c0 : +100188c0: b5f8 push {r3, r4, r5, r6, r7, lr} +100188c2: 2464 movs r4, #100 ; 0x64 +100188c4: 4b1d ldr r3, [pc, #116] ; (1001893c ) +100188c6: 4601 mov r1, r0 +100188c8: 681b ldr r3, [r3, #0] +100188ca: 4344 muls r4, r0 +100188cc: 005b lsls r3, r3, #1 +100188ce: d502 bpl.n 100188d6 +100188d0: 481b ldr r0, [pc, #108] ; (10018940 ) +100188d2: 4b1c ldr r3, [pc, #112] ; (10018944 ) +100188d4: 4798 blx r3 +100188d6: 2200 movs r2, #0 +100188d8: f04f 37ff mov.w r7, #4294967295 +100188dc: 4615 mov r5, r2 +100188de: 4610 mov r0, r2 +100188e0: f04f 0e01 mov.w lr, #1 +100188e4: 1c56 adds r6, r2, #1 +100188e6: fa0e f306 lsl.w r3, lr, r6 +100188ea: 3b01 subs r3, #1 +100188ec: eb03 0343 add.w r3, r3, r3, lsl #1 +100188f0: fbb4 f1f3 udiv r1, r4, r3 +100188f4: fa1f fc81 uxth.w ip, r1 +100188f8: f1bc 0f00 cmp.w ip, #0 +100188fc: d008 beq.n 10018910 +100188fe: fb0c 3303 mla r3, ip, r3, r3 +10018902: 429c cmp r4, r3 +10018904: d204 bcs.n 10018910 +10018906: 42bb cmp r3, r7 +10018908: bf3e ittt cc +1001890a: 4610 movcc r0, r2 +1001890c: 461f movcc r7, r3 +1001890e: 4665 movcc r5, ip +10018910: 2e0c cmp r6, #12 +10018912: 4632 mov r2, r6 +10018914: d1e6 bne.n 100188e4 +10018916: 2100 movs r1, #0 +10018918: 4a0b ldr r2, [pc, #44] ; (10018948 ) +1001891a: 78d3 ldrb r3, [r2, #3] +1001891c: 8015 strh r5, [r2, #0] +1001891e: f043 0301 orr.w r3, r3, #1 +10018922: f360 0344 bfi r3, r0, #1, #4 +10018926: b2db uxtb r3, r3 +10018928: f043 0340 orr.w r3, r3, #64 ; 0x40 +1001892c: f361 13c7 bfi r3, r1, #7, #1 +10018930: 70d3 strb r3, [r2, #3] +10018932: 7091 strb r1, [r2, #2] +10018934: 6812 ldr r2, [r2, #0] +10018936: 4b05 ldr r3, [pc, #20] ; (1001894c ) +10018938: 601a str r2, [r3, #0] +1001893a: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001893c: 10000314 .word 0x10000314 +10018940: 100408f4 .word 0x100408f4 +10018944: 0000f39d .word 0x0000f39d +10018948: 1004b5c4 .word 0x1004b5c4 +1001894c: 40002800 .word 0x40002800 + +10018950 : +10018950: 22a5 movs r2, #165 ; 0xa5 +10018952: 4b03 ldr r3, [pc, #12] ; (10018960 ) +10018954: 709a strb r2, [r3, #2] +10018956: 681a ldr r2, [r3, #0] +10018958: 4b02 ldr r3, [pc, #8] ; (10018964 ) +1001895a: 601a str r2, [r3, #0] +1001895c: 4770 bx lr +1001895e: bf00 nop +10018960: 1004b5c4 .word 0x1004b5c4 +10018964: 40002800 .word 0x40002800 + +10018968 : +10018968: 4b04 ldr r3, [pc, #16] ; (1001897c ) +1001896a: 78da ldrb r2, [r3, #3] +1001896c: f042 0201 orr.w r2, r2, #1 +10018970: 70da strb r2, [r3, #3] +10018972: 681a ldr r2, [r3, #0] +10018974: 4b02 ldr r3, [pc, #8] ; (10018980 ) +10018976: 601a str r2, [r3, #0] +10018978: 4770 bx lr +1001897a: bf00 nop +1001897c: 1004b5c4 .word 0x1004b5c4 +10018980: 40002800 .word 0x40002800 + +10018984 : +10018984: 4b0a ldr r3, [pc, #40] ; (100189b0 ) +10018986: 6003 str r3, [r0, #0] +10018988: 4b0a ldr r3, [pc, #40] ; (100189b4 ) +1001898a: 6043 str r3, [r0, #4] +1001898c: 4b0a ldr r3, [pc, #40] ; (100189b8 ) +1001898e: 6103 str r3, [r0, #16] +10018990: 4b0a ldr r3, [pc, #40] ; (100189bc ) +10018992: 6143 str r3, [r0, #20] +10018994: 4b0a ldr r3, [pc, #40] ; (100189c0 ) +10018996: 6083 str r3, [r0, #8] +10018998: 4b0a ldr r3, [pc, #40] ; (100189c4 ) +1001899a: 60c3 str r3, [r0, #12] +1001899c: 4b0a ldr r3, [pc, #40] ; (100189c8 ) +1001899e: 6183 str r3, [r0, #24] +100189a0: 4b0a ldr r3, [pc, #40] ; (100189cc ) +100189a2: 61c3 str r3, [r0, #28] +100189a4: 4b0a ldr r3, [pc, #40] ; (100189d0 ) +100189a6: 6203 str r3, [r0, #32] +100189a8: 4b0a ldr r3, [pc, #40] ; (100189d4 ) +100189aa: 6243 str r3, [r0, #36] ; 0x24 +100189ac: 4770 bx lr +100189ae: bf00 nop +100189b0: 00005df1 .word 0x00005df1 +100189b4: 00005e91 .word 0x00005e91 +100189b8: 00005e6d .word 0x00005e6d +100189bc: 00005e51 .word 0x00005e51 +100189c0: 00005ebd .word 0x00005ebd +100189c4: 10019085 .word 0x10019085 +100189c8: 00005e0d .word 0x00005e0d +100189cc: 00006419 .word 0x00006419 +100189d0: 000064a1 .word 0x000064a1 +100189d4: 00006501 .word 0x00006501 + +100189d8 : +100189d8: 2801 cmp r0, #1 +100189da: b570 push {r4, r5, r6, lr} +100189dc: d81f bhi.n 10018a1e +100189de: 2906 cmp r1, #6 +100189e0: d81d bhi.n 10018a1e +100189e2: 2301 movs r3, #1 +100189e4: 4c10 ldr r4, [pc, #64] ; (10018a28 ) +100189e6: fa03 f101 lsl.w r1, r3, r1 +100189ea: 5c22 ldrb r2, [r4, r0] +100189ec: 4211 tst r1, r2 +100189ee: d118 bne.n 10018a22 +100189f0: b952 cbnz r2, 10018a08 +100189f2: 4d0e ldr r5, [pc, #56] ; (10018a2c ) +100189f4: 4b0e ldr r3, [pc, #56] ; (10018a30 ) +100189f6: 682e ldr r6, [r5, #0] +100189f8: b950 cbnz r0, 10018a10 +100189fa: f446 3680 orr.w r6, r6, #65536 ; 0x10000 +100189fe: 602e str r6, [r5, #0] +10018a00: 681d ldr r5, [r3, #0] +10018a02: f445 5500 orr.w r5, r5, #8192 ; 0x2000 +10018a06: 601d str r5, [r3, #0] +10018a08: 430a orrs r2, r1 +10018a0a: 5422 strb r2, [r4, r0] +10018a0c: 2000 movs r0, #0 +10018a0e: bd70 pop {r4, r5, r6, pc} +10018a10: f446 2680 orr.w r6, r6, #262144 ; 0x40000 +10018a14: 602e str r6, [r5, #0] +10018a16: 681d ldr r5, [r3, #0] +10018a18: f445 4580 orr.w r5, r5, #16384 ; 0x4000 +10018a1c: e7f3 b.n 10018a06 +10018a1e: 2003 movs r0, #3 +10018a20: bd70 pop {r4, r5, r6, pc} +10018a22: 4618 mov r0, r3 +10018a24: bd70 pop {r4, r5, r6, pc} +10018a26: bf00 nop +10018a28: 1004b600 .word 0x1004b600 +10018a2c: 40000230 .word 0x40000230 +10018a30: 40000210 .word 0x40000210 + +10018a34 : +10018a34: 2801 cmp r0, #1 +10018a36: d816 bhi.n 10018a66 +10018a38: 2906 cmp r1, #6 +10018a3a: d814 bhi.n 10018a66 +10018a3c: 2301 movs r3, #1 +10018a3e: 4a0f ldr r2, [pc, #60] ; (10018a7c ) +10018a40: 408b lsls r3, r1 +10018a42: 5c11 ldrb r1, [r2, r0] +10018a44: ea21 0103 bic.w r1, r1, r3 +10018a48: 5411 strb r1, [r2, r0] +10018a4a: b961 cbnz r1, 10018a66 +10018a4c: 4a0c ldr r2, [pc, #48] ; (10018a80 ) +10018a4e: 4b0d ldr r3, [pc, #52] ; (10018a84 ) +10018a50: 6811 ldr r1, [r2, #0] +10018a52: b948 cbnz r0, 10018a68 +10018a54: f421 3180 bic.w r1, r1, #65536 ; 0x10000 +10018a58: 6011 str r1, [r2, #0] +10018a5a: 4a0b ldr r2, [pc, #44] ; (10018a88 ) +10018a5c: 6812 ldr r2, [r2, #0] +10018a5e: 681a ldr r2, [r3, #0] +10018a60: f422 5200 bic.w r2, r2, #8192 ; 0x2000 +10018a64: 601a str r2, [r3, #0] +10018a66: 4770 bx lr +10018a68: f421 2180 bic.w r1, r1, #262144 ; 0x40000 +10018a6c: 6011 str r1, [r2, #0] +10018a6e: 4a07 ldr r2, [pc, #28] ; (10018a8c ) +10018a70: 6812 ldr r2, [r2, #0] +10018a72: 681a ldr r2, [r3, #0] +10018a74: f422 4280 bic.w r2, r2, #16384 ; 0x4000 +10018a78: e7f4 b.n 10018a64 +10018a7a: bf00 nop +10018a7c: 1004b600 .word 0x1004b600 +10018a80: 40000230 .word 0x40000230 +10018a84: 40000210 .word 0x40000210 +10018a88: 40060000 .word 0x40060000 +10018a8c: 40061000 .word 0x40061000 + +10018a90 : +10018a90: b510 push {r4, lr} +10018a92: 4c0a ldr r4, [pc, #40] ; (10018abc ) +10018a94: 2800 cmp r0, #0 +10018a96: bf18 it ne +10018a98: 4604 movne r4, r0 +10018a9a: 7820 ldrb r0, [r4, #0] +10018a9c: 2801 cmp r0, #1 +10018a9e: d905 bls.n 10018aac +10018aa0: 7823 ldrb r3, [r4, #0] +10018aa2: 2b02 cmp r3, #2 +10018aa4: bf28 it cs +10018aa6: 2400 movcs r4, #0 +10018aa8: 4620 mov r0, r4 +10018aaa: bd10 pop {r4, pc} +10018aac: 7861 ldrb r1, [r4, #1] +10018aae: f7ff ff93 bl 100189d8 +10018ab2: 2800 cmp r0, #0 +10018ab4: d0f4 beq.n 10018aa0 +10018ab6: 3404 adds r4, #4 +10018ab8: e7ef b.n 10018a9a +10018aba: bf00 nop +10018abc: 10040907 .word 0x10040907 + +10018ac0 : +10018ac0: b51f push {r0, r1, r2, r3, r4, lr} +10018ac2: 4604 mov r4, r0 +10018ac4: 7883 ldrb r3, [r0, #2] +10018ac6: 4668 mov r0, sp +10018ac8: 9301 str r3, [sp, #4] +10018aca: 4b05 ldr r3, [pc, #20] ; (10018ae0 ) +10018acc: 4798 blx r3 +10018ace: 4b05 ldr r3, [pc, #20] ; (10018ae4 ) +10018ad0: 4668 mov r0, sp +10018ad2: 4798 blx r3 +10018ad4: 7861 ldrb r1, [r4, #1] +10018ad6: 7820 ldrb r0, [r4, #0] +10018ad8: f7ff ffac bl 10018a34 +10018adc: b004 add sp, #16 +10018ade: bd10 pop {r4, pc} +10018ae0: 0000418d .word 0x0000418d +10018ae4: 00004091 .word 0x00004091 + +10018ae8 : +10018ae8: 4b00 ldr r3, [pc, #0] ; (10018aec ) +10018aea: 4718 bx r3 +10018aec: 0000e1c1 .word 0x0000e1c1 + +10018af0 : +10018af0: 2901 cmp r1, #1 +10018af2: d004 beq.n 10018afe +10018af4: 1e8b subs r3, r1, #2 +10018af6: 4259 negs r1, r3 +10018af8: 4159 adcs r1, r3 +10018afa: 4b02 ldr r3, [pc, #8] ; (10018b04 ) +10018afc: 4718 bx r3 +10018afe: 2102 movs r1, #2 +10018b00: e7fb b.n 10018afa +10018b02: bf00 nop +10018b04: 0000d39d .word 0x0000d39d + +10018b08 : +10018b08: 4b0a ldr r3, [pc, #40] ; (10018b34 ) +10018b0a: b510 push {r4, lr} +10018b0c: 681a ldr r2, [r3, #0] +10018b0e: 4604 mov r4, r0 +10018b10: b90a cbnz r2, 10018b16 +10018b12: 4a09 ldr r2, [pc, #36] ; (10018b38 ) +10018b14: 601a str r2, [r3, #0] +10018b16: 6860 ldr r0, [r4, #4] +10018b18: 4b08 ldr r3, [pc, #32] ; (10018b3c ) +10018b1a: f000 011f and.w r1, r0, #31 +10018b1e: f3c0 1041 ubfx r0, r0, #5, #2 +10018b22: 4798 blx r3 +10018b24: 4b06 ldr r3, [pc, #24] ; (10018b40 ) +10018b26: 2100 movs r1, #0 +10018b28: 4798 blx r3 +10018b2a: 4620 mov r0, r4 +10018b2c: e8bd 4010 ldmia.w sp!, {r4, lr} +10018b30: 4b04 ldr r3, [pc, #16] ; (10018b44 ) +10018b32: 4718 bx r3 +10018b34: 10000354 .word 0x10000354 +10018b38: 1004b604 .word 0x1004b604 +10018b3c: 0000d331 .word 0x0000d331 +10018b40: 0000d39d .word 0x0000d39d +10018b44: 0000d805 .word 0x0000d805 + +10018b48 : +10018b48: 4b1d ldr r3, [pc, #116] ; (10018bc0 ) +10018b4a: 6003 str r3, [r0, #0] +10018b4c: 4b1d ldr r3, [pc, #116] ; (10018bc4 ) +10018b4e: 6043 str r3, [r0, #4] +10018b50: 4b1d ldr r3, [pc, #116] ; (10018bc8 ) +10018b52: 6083 str r3, [r0, #8] +10018b54: 4b1d ldr r3, [pc, #116] ; (10018bcc ) +10018b56: 60c3 str r3, [r0, #12] +10018b58: 4b1d ldr r3, [pc, #116] ; (10018bd0 ) +10018b5a: 6103 str r3, [r0, #16] +10018b5c: 4b1d ldr r3, [pc, #116] ; (10018bd4 ) +10018b5e: 6143 str r3, [r0, #20] +10018b60: 4b1d ldr r3, [pc, #116] ; (10018bd8 ) +10018b62: 6183 str r3, [r0, #24] +10018b64: 4b1d ldr r3, [pc, #116] ; (10018bdc ) +10018b66: 61c3 str r3, [r0, #28] +10018b68: 4b1d ldr r3, [pc, #116] ; (10018be0 ) +10018b6a: 6683 str r3, [r0, #104] ; 0x68 +10018b6c: 4b1d ldr r3, [pc, #116] ; (10018be4 ) +10018b6e: 6583 str r3, [r0, #88] ; 0x58 +10018b70: 4b1d ldr r3, [pc, #116] ; (10018be8 ) +10018b72: 65c3 str r3, [r0, #92] ; 0x5c +10018b74: 4b1d ldr r3, [pc, #116] ; (10018bec ) +10018b76: 6603 str r3, [r0, #96] ; 0x60 +10018b78: 4b1d ldr r3, [pc, #116] ; (10018bf0 ) +10018b7a: 6643 str r3, [r0, #100] ; 0x64 +10018b7c: 4b1d ldr r3, [pc, #116] ; (10018bf4 ) +10018b7e: 6203 str r3, [r0, #32] +10018b80: 4b1d ldr r3, [pc, #116] ; (10018bf8 ) +10018b82: 6243 str r3, [r0, #36] ; 0x24 +10018b84: 4b1d ldr r3, [pc, #116] ; (10018bfc ) +10018b86: 6543 str r3, [r0, #84] ; 0x54 +10018b88: 4b1d ldr r3, [pc, #116] ; (10018c00 ) +10018b8a: 6283 str r3, [r0, #40] ; 0x28 +10018b8c: 4b1d ldr r3, [pc, #116] ; (10018c04 ) +10018b8e: 6503 str r3, [r0, #80] ; 0x50 +10018b90: 4b1d ldr r3, [pc, #116] ; (10018c08 ) +10018b92: 64c3 str r3, [r0, #76] ; 0x4c +10018b94: 4b1d ldr r3, [pc, #116] ; (10018c0c ) +10018b96: 6483 str r3, [r0, #72] ; 0x48 +10018b98: 4b1d ldr r3, [pc, #116] ; (10018c10 ) +10018b9a: 62c3 str r3, [r0, #44] ; 0x2c +10018b9c: 4b1d ldr r3, [pc, #116] ; (10018c14 ) +10018b9e: 6303 str r3, [r0, #48] ; 0x30 +10018ba0: 4b1d ldr r3, [pc, #116] ; (10018c18 ) +10018ba2: 6343 str r3, [r0, #52] ; 0x34 +10018ba4: 4b1d ldr r3, [pc, #116] ; (10018c1c ) +10018ba6: 6383 str r3, [r0, #56] ; 0x38 +10018ba8: 4b1d ldr r3, [pc, #116] ; (10018c20 ) +10018baa: 63c3 str r3, [r0, #60] ; 0x3c +10018bac: 4b1d ldr r3, [pc, #116] ; (10018c24 ) +10018bae: 6403 str r3, [r0, #64] ; 0x40 +10018bb0: 4b1d ldr r3, [pc, #116] ; (10018c28 ) +10018bb2: 66c3 str r3, [r0, #108] ; 0x6c +10018bb4: 4b1d ldr r3, [pc, #116] ; (10018c2c ) +10018bb6: 6703 str r3, [r0, #112] ; 0x70 +10018bb8: 4b1d ldr r3, [pc, #116] ; (10018c30 ) +10018bba: 6443 str r3, [r0, #68] ; 0x44 +10018bbc: 4770 bx lr +10018bbe: bf00 nop +10018bc0: 10019309 .word 0x10019309 +10018bc4: 10019541 .word 0x10019541 +10018bc8: 00007e45 .word 0x00007e45 +10018bcc: 00007ef9 .word 0x00007ef9 +10018bd0: 100193c1 .word 0x100193c1 +10018bd4: 0000863d .word 0x0000863d +10018bd8: 00008715 .word 0x00008715 +10018bdc: 000087e9 .word 0x000087e9 +10018be0: 000089b9 .word 0x000089b9 +10018be4: 00008a2d .word 0x00008a2d +10018be8: 00008aa5 .word 0x00008aa5 +10018bec: 00008b1d .word 0x00008b1d +10018bf0: 000090d9 .word 0x000090d9 +10018bf4: 00007fad .word 0x00007fad +10018bf8: 00008521 .word 0x00008521 +10018bfc: 000085c9 .word 0x000085c9 +10018c00: 00008861 .word 0x00008861 +10018c04: 00008b91 .word 0x00008b91 +10018c08: 00008c09 .word 0x00008c09 +10018c0c: 00008c81 .word 0x00008c81 +10018c10: 0000914d .word 0x0000914d +10018c14: 00009299 .word 0x00009299 +10018c18: 10019765 .word 0x10019765 +10018c1c: 000088c9 .word 0x000088c9 +10018c20: 00008941 .word 0x00008941 +10018c24: 10019a91 .word 0x10019a91 +10018c28: 000093e9 .word 0x000093e9 +10018c2c: 0000945d .word 0x0000945d +10018c30: 00009009 .word 0x00009009 + +10018c34 : +10018c34: b570 push {r4, r5, r6, lr} +10018c36: f890 6091 ldrb.w r6, [r0, #145] ; 0x91 +10018c3a: 4604 mov r4, r0 +10018c3c: 2e00 cmp r6, #0 +10018c3e: d133 bne.n 10018ca8 +10018c40: 6845 ldr r5, [r0, #4] +10018c42: f895 1061 ldrb.w r1, [r5, #97] ; 0x61 +10018c46: f895 0062 ldrb.w r0, [r5, #98] ; 0x62 +10018c4a: f7ff fec5 bl 100189d8 +10018c4e: b1e8 cbz r0, 10018c8c +10018c50: f894 3084 ldrb.w r3, [r4, #132] ; 0x84 +10018c54: 2b02 cmp r3, #2 +10018c56: bf0c ite eq +10018c58: 4814 ldreq r0, [pc, #80] ; (10018cac ) +10018c5a: 4630 movne r0, r6 +10018c5c: f7ff ff18 bl 10018a90 +10018c60: b940 cbnz r0, 10018c74 +10018c62: 4b13 ldr r3, [pc, #76] ; (10018cb0 ) +10018c64: 681b ldr r3, [r3, #0] +10018c66: 051b lsls r3, r3, #20 +10018c68: d502 bpl.n 10018c70 +10018c6a: 4812 ldr r0, [pc, #72] ; (10018cb4 ) +10018c6c: 4b12 ldr r3, [pc, #72] ; (10018cb8 ) +10018c6e: 4798 blx r3 +10018c70: 2001 movs r0, #1 +10018c72: bd70 pop {r4, r5, r6, pc} +10018c74: 7803 ldrb r3, [r0, #0] +10018c76: f885 3062 strb.w r3, [r5, #98] ; 0x62 +10018c7a: f240 1301 movw r3, #257 ; 0x101 +10018c7e: 7842 ldrb r2, [r0, #1] +10018c80: 4093 lsls r3, r2 +10018c82: f885 2061 strb.w r2, [r5, #97] ; 0x61 +10018c86: 60ab str r3, [r5, #8] +10018c88: 7883 ldrb r3, [r0, #2] +10018c8a: 6263 str r3, [r4, #36] ; 0x24 +10018c8c: 2301 movs r3, #1 +10018c8e: f104 0520 add.w r5, r4, #32 +10018c92: f884 3091 strb.w r3, [r4, #145] ; 0x91 +10018c96: 4628 mov r0, r5 +10018c98: 4b08 ldr r3, [pc, #32] ; (10018cbc ) +10018c9a: 4798 blx r3 +10018c9c: 4628 mov r0, r5 +10018c9e: 4b08 ldr r3, [pc, #32] ; (10018cc0 ) +10018ca0: 4798 blx r3 +10018ca2: 4620 mov r0, r4 +10018ca4: f000 ffa8 bl 10019bf8 +10018ca8: 2000 movs r0, #0 +10018caa: bd70 pop {r4, r5, r6, pc} +10018cac: 100409f0 .word 0x100409f0 +10018cb0: 10000314 .word 0x10000314 +10018cb4: 1004097c .word 0x1004097c +10018cb8: 0000f39d .word 0x0000f39d +10018cbc: 00004029 .word 0x00004029 +10018cc0: 000040f1 .word 0x000040f1 + +10018cc4 : +10018cc4: b508 push {r3, lr} +10018cc6: b128 cbz r0, 10018cd4 +10018cc8: b121 cbz r1, 10018cd4 +10018cca: 4608 mov r0, r1 +10018ccc: f000 ff0a bl 10019ae4 +10018cd0: 2000 movs r0, #0 +10018cd2: bd08 pop {r3, pc} +10018cd4: 2003 movs r0, #3 +10018cd6: bd08 pop {r3, pc} + +10018cd8 : +10018cd8: b513 push {r0, r1, r4, lr} +10018cda: 4604 mov r4, r0 +10018cdc: b188 cbz r0, 10018d02 +10018cde: 6843 ldr r3, [r0, #4] +10018ce0: f893 2062 ldrb.w r2, [r3, #98] ; 0x62 +10018ce4: f893 3061 ldrb.w r3, [r3, #97] ; 0x61 +10018ce8: f88d 2004 strb.w r2, [sp, #4] +10018cec: f88d 3005 strb.w r3, [sp, #5] +10018cf0: 6a43 ldr r3, [r0, #36] ; 0x24 +10018cf2: a801 add r0, sp, #4 +10018cf4: f88d 3006 strb.w r3, [sp, #6] +10018cf8: f7ff fee2 bl 10018ac0 +10018cfc: 2300 movs r3, #0 +10018cfe: f884 3091 strb.w r3, [r4, #145] ; 0x91 +10018d02: b002 add sp, #8 +10018d04: bd10 pop {r4, pc} + ... + +10018d08 : +10018d08: b570 push {r4, r5, r6, lr} +10018d0a: f890 3091 ldrb.w r3, [r0, #145] ; 0x91 +10018d0e: 4605 mov r5, r0 +10018d10: 2b01 cmp r3, #1 +10018d12: 6846 ldr r6, [r0, #4] +10018d14: d106 bne.n 10018d24 +10018d16: f896 3061 ldrb.w r3, [r6, #97] ; 0x61 +10018d1a: 3b04 subs r3, #4 +10018d1c: 2b01 cmp r3, #1 +10018d1e: d901 bls.n 10018d24 +10018d20: f7ff ffda bl 10018cd8 +10018d24: f895 4091 ldrb.w r4, [r5, #145] ; 0x91 +10018d28: bb34 cbnz r4, 10018d78 +10018d2a: 4814 ldr r0, [pc, #80] ; (10018d7c ) +10018d2c: f7ff feb0 bl 10018a90 +10018d30: b940 cbnz r0, 10018d44 +10018d32: 4b13 ldr r3, [pc, #76] ; (10018d80 ) +10018d34: 681b ldr r3, [r3, #0] +10018d36: 051b lsls r3, r3, #20 +10018d38: d502 bpl.n 10018d40 +10018d3a: 4812 ldr r0, [pc, #72] ; (10018d84 ) +10018d3c: 4b12 ldr r3, [pc, #72] ; (10018d88 ) +10018d3e: 4798 blx r3 +10018d40: 2001 movs r0, #1 +10018d42: bd70 pop {r4, r5, r6, pc} +10018d44: 7803 ldrb r3, [r0, #0] +10018d46: f886 3062 strb.w r3, [r6, #98] ; 0x62 +10018d4a: f240 1301 movw r3, #257 ; 0x101 +10018d4e: 7842 ldrb r2, [r0, #1] +10018d50: 4093 lsls r3, r2 +10018d52: f886 2061 strb.w r2, [r6, #97] ; 0x61 +10018d56: 60b3 str r3, [r6, #8] +10018d58: 7883 ldrb r3, [r0, #2] +10018d5a: f105 0620 add.w r6, r5, #32 +10018d5e: 626b str r3, [r5, #36] ; 0x24 +10018d60: 2301 movs r3, #1 +10018d62: 4630 mov r0, r6 +10018d64: f885 3091 strb.w r3, [r5, #145] ; 0x91 +10018d68: 4b08 ldr r3, [pc, #32] ; (10018d8c ) +10018d6a: 4798 blx r3 +10018d6c: 4630 mov r0, r6 +10018d6e: 4b08 ldr r3, [pc, #32] ; (10018d90 ) +10018d70: 4798 blx r3 +10018d72: 4628 mov r0, r5 +10018d74: f000 ff40 bl 10019bf8 +10018d78: 2000 movs r0, #0 +10018d7a: bd70 pop {r4, r5, r6, pc} +10018d7c: 10040a0c .word 0x10040a0c +10018d80: 10000314 .word 0x10000314 +10018d84: 1004097c .word 0x1004097c +10018d88: 0000f39d .word 0x0000f39d +10018d8c: 00004029 .word 0x00004029 +10018d90: 000040f1 .word 0x000040f1 + +10018d94 : +10018d94: b570 push {r4, r5, r6, lr} +10018d96: 6844 ldr r4, [r0, #4] +10018d98: 4605 mov r5, r0 +10018d9a: 460e mov r6, r1 +10018d9c: f000 ffc0 bl 10019d20 +10018da0: f640 73fc movw r3, #4092 ; 0xffc +10018da4: 8d62 ldrh r2, [r4, #42] ; 0x2a +10018da6: 429a cmp r2, r3 +10018da8: d91a bls.n 10018de0 +10018daa: 4631 mov r1, r6 +10018dac: 4628 mov r0, r5 +10018dae: f001 f801 bl 10019db4 +10018db2: 4628 mov r0, r5 +10018db4: f7ff ffa8 bl 10018d08 +10018db8: 682d ldr r5, [r5, #0] +10018dba: 4620 mov r0, r4 +10018dbc: 682b ldr r3, [r5, #0] +10018dbe: 4798 blx r3 +10018dc0: 69ab ldr r3, [r5, #24] +10018dc2: 4620 mov r0, r4 +10018dc4: 4798 blx r3 +10018dc6: f894 3063 ldrb.w r3, [r4, #99] ; 0x63 +10018dca: 4620 mov r0, r4 +10018dcc: 075b lsls r3, r3, #29 +10018dce: bf4c ite mi +10018dd0: 68eb ldrmi r3, [r5, #12] +10018dd2: 68ab ldrpl r3, [r5, #8] +10018dd4: 4798 blx r3 +10018dd6: 4620 mov r0, r4 +10018dd8: 696b ldr r3, [r5, #20] +10018dda: 4798 blx r3 +10018ddc: 2000 movs r0, #0 +10018dde: bd70 pop {r4, r5, r6, pc} +10018de0: 6026 str r6, [r4, #0] +10018de2: 4628 mov r0, r5 +10018de4: f7ff ff26 bl 10018c34 +10018de8: f894 3063 ldrb.w r3, [r4, #99] ; 0x63 +10018dec: f003 030f and.w r3, r3, #15 +10018df0: f36f 0382 bfc r3, #2, #1 +10018df4: f884 3063 strb.w r3, [r4, #99] ; 0x63 +10018df8: f894 3028 ldrb.w r3, [r4, #40] ; 0x28 +10018dfc: f003 03ef and.w r3, r3, #239 ; 0xef +10018e00: f36f 03c3 bfc r3, #3, #1 +10018e04: f884 3028 strb.w r3, [r4, #40] ; 0x28 +10018e08: f894 303d ldrb.w r3, [r4, #61] ; 0x3d +10018e0c: f003 03fd and.w r3, r3, #253 ; 0xfd +10018e10: f36f 0300 bfc r3, #0, #1 +10018e14: f884 303d strb.w r3, [r4, #61] ; 0x3d +10018e18: e7ce b.n 10018db8 + ... + +10018e1c : +10018e1c: b537 push {r0, r1, r2, r4, r5, lr} +10018e1e: f890 3084 ldrb.w r3, [r0, #132] ; 0x84 +10018e22: 4605 mov r5, r0 +10018e24: 2b01 cmp r3, #1 +10018e26: f890 4089 ldrb.w r4, [r0, #137] ; 0x89 +10018e2a: d00b beq.n 10018e44 +10018e2c: d308 bcc.n 10018e40 +10018e2e: 2b02 cmp r3, #2 +10018e30: d016 beq.n 10018e60 +10018e32: 4b15 ldr r3, [pc, #84] ; (10018e88 ) +10018e34: 681b ldr r3, [r3, #0] +10018e36: 051a lsls r2, r3, #20 +10018e38: d502 bpl.n 10018e40 +10018e3a: 4814 ldr r0, [pc, #80] ; (10018e8c ) +10018e3c: 4b14 ldr r3, [pc, #80] ; (10018e90 ) +10018e3e: 4798 blx r3 +10018e40: 2008 movs r0, #8 +10018e42: e000 b.n 10018e46 +10018e44: 2009 movs r0, #9 +10018e46: 4621 mov r1, r4 +10018e48: f001 fde6 bl 1001aa18 +10018e4c: b950 cbnz r0, 10018e64 +10018e4e: 4b0e ldr r3, [pc, #56] ; (10018e88 ) +10018e50: 681b ldr r3, [r3, #0] +10018e52: 051b lsls r3, r3, #20 +10018e54: d502 bpl.n 10018e5c +10018e56: 480f ldr r0, [pc, #60] ; (10018e94 ) +10018e58: 4b0d ldr r3, [pc, #52] ; (10018e90 ) +10018e5a: 4798 blx r3 +10018e5c: 2403 movs r4, #3 +10018e5e: e010 b.n 10018e82 +10018e60: 200a movs r0, #10 +10018e62: e7f0 b.n 10018e46 +10018e64: 4628 mov r0, r5 +10018e66: f000 faab bl 100193c0 +10018e6a: 4604 mov r4, r0 +10018e6c: b948 cbnz r0, 10018e82 +10018e6e: f895 3084 ldrb.w r3, [r5, #132] ; 0x84 +10018e72: f88d 0005 strb.w r0, [sp, #5] +10018e76: 3308 adds r3, #8 +10018e78: f88d 3004 strb.w r3, [sp, #4] +10018e7c: 9801 ldr r0, [sp, #4] +10018e7e: f001 fc41 bl 1001a704 +10018e82: 4620 mov r0, r4 +10018e84: b003 add sp, #12 +10018e86: bd30 pop {r4, r5, pc} +10018e88: 10000314 .word 0x10000314 +10018e8c: 1004093b .word 0x1004093b +10018e90: 0000f39d .word 0x0000f39d +10018e94: 10040959 .word 0x10040959 + +10018e98 : +10018e98: f000 bbba b.w 10019610 + +10018e9c : +10018e9c: 4b07 ldr r3, [pc, #28] ; (10018ebc ) +10018e9e: 6003 str r3, [r0, #0] +10018ea0: 4b07 ldr r3, [pc, #28] ; (10018ec0 ) +10018ea2: 6043 str r3, [r0, #4] +10018ea4: 4b07 ldr r3, [pc, #28] ; (10018ec4 ) +10018ea6: 6083 str r3, [r0, #8] +10018ea8: 4b07 ldr r3, [pc, #28] ; (10018ec8 ) +10018eaa: 60c3 str r3, [r0, #12] +10018eac: 4b07 ldr r3, [pc, #28] ; (10018ecc ) +10018eae: 6103 str r3, [r0, #16] +10018eb0: 4b07 ldr r3, [pc, #28] ; (10018ed0 ) +10018eb2: 6143 str r3, [r0, #20] +10018eb4: 4b07 ldr r3, [pc, #28] ; (10018ed4 ) +10018eb6: 6183 str r3, [r0, #24] +10018eb8: 4770 bx lr +10018eba: bf00 nop +10018ebc: 0000ef09 .word 0x0000ef09 +10018ec0: 1001a04d .word 0x1001a04d +10018ec4: 1001a001 .word 0x1001a001 +10018ec8: 0000f0bd .word 0x0000f0bd +10018ecc: 1001a141 .word 0x1001a141 +10018ed0: 1001a12d .word 0x1001a12d +10018ed4: 0000f0d1 .word 0x0000f0d1 + +10018ed8 : +10018ed8: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10018edc: 4d2e ldr r5, [pc, #184] ; (10018f98 ) +10018ede: f8df 90cc ldr.w r9, [pc, #204] ; 10018fac +10018ee2: 2400 movs r4, #0 +10018ee4: 46a8 mov r8, r5 +10018ee6: 464f mov r7, r9 +10018ee8: 6806 ldr r6, [r0, #0] +10018eea: 6004 str r4, [r0, #0] +10018eec: f8d9 3000 ldr.w r3, [r9] +10018ef0: 429c cmp r4, r3 +10018ef2: d33e bcc.n 10018f72 +10018ef4: f7ff fa18 bl 10018328 +10018ef8: f8df 80b4 ldr.w r8, [pc, #180] ; 10018fb0 +10018efc: 4604 mov r4, r0 +10018efe: 4a27 ldr r2, [pc, #156] ; (10018f9c ) +10018f00: 4827 ldr r0, [pc, #156] ; (10018fa0 ) +10018f02: f8d8 9000 ldr.w r9, [r8] +10018f06: 2300 movs r3, #0 +10018f08: 7812 ldrb r2, [r2, #0] +10018f0a: 4631 mov r1, r6 +10018f0c: 6800 ldr r0, [r0, #0] +10018f0e: f7ff f875 bl 10017ffc +10018f12: f8c8 9000 str.w r9, [r8] +10018f16: f7ff fa07 bl 10018328 +10018f1a: 4284 cmp r4, r0 +10018f1c: bf34 ite cc +10018f1e: 1b04 subcc r4, r0, r4 +10018f20: f100 33ff addcs.w r3, r0, #4294967295 +10018f24: f44f 707a mov.w r0, #1000 ; 0x3e8 +10018f28: 491e ldr r1, [pc, #120] ; (10018fa4 ) +10018f2a: fb00 f206 mul.w r2, r0, r6 +10018f2e: bf28 it cs +10018f30: 1b1c subcs r4, r3, r4 +10018f32: 680b ldr r3, [r1, #0] +10018f34: 4423 add r3, r4 +10018f36: 4293 cmp r3, r2 +10018f38: bf9c itt ls +10018f3a: fbb3 f2f0 udivls r2, r3, r0 +10018f3e: fb00 3212 mlsls r2, r0, r2, r3 +10018f42: f44f 747a mov.w r4, #1000 ; 0x3e8 +10018f46: bf9c itt ls +10018f48: 600a strls r2, [r1, #0] +10018f4a: 461a movls r2, r3 +10018f4c: fbb2 f4f4 udiv r4, r2, r4 +10018f50: bf88 it hi +10018f52: 1a9b subhi r3, r3, r2 +10018f54: 4620 mov r0, r4 +10018f56: bf88 it hi +10018f58: 600b strhi r3, [r1, #0] +10018f5a: f7fd f97f bl 1001625c +10018f5e: 4b12 ldr r3, [pc, #72] ; (10018fa8 ) +10018f60: 681a ldr r2, [r3, #0] +10018f62: 4422 add r2, r4 +10018f64: 2400 movs r4, #0 +10018f66: 601a str r2, [r3, #0] +10018f68: 683b ldr r3, [r7, #0] +10018f6a: 429c cmp r4, r3 +10018f6c: d30c bcc.n 10018f88 +10018f6e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +10018f72: f8d8 3004 ldr.w r3, [r8, #4] +10018f76: b11b cbz r3, 10018f80 +10018f78: f8d8 1008 ldr.w r1, [r8, #8] +10018f7c: 4630 mov r0, r6 +10018f7e: 4798 blx r3 +10018f80: 3401 adds r4, #1 +10018f82: f108 0814 add.w r8, r8, #20 +10018f86: e7b1 b.n 10018eec +10018f88: 68eb ldr r3, [r5, #12] +10018f8a: b113 cbz r3, 10018f92 +10018f8c: 6929 ldr r1, [r5, #16] +10018f8e: 4630 mov r0, r6 +10018f90: 4798 blx r3 +10018f92: 3401 adds r4, #1 +10018f94: 3514 adds r5, #20 +10018f96: e7e7 b.n 10018f68 +10018f98: 1004b838 .word 0x1004b838 +10018f9c: 1004b8d8 .word 0x1004b8d8 +10018fa0: 10044f34 .word 0x10044f34 +10018fa4: 1004b830 .word 0x1004b830 +10018fa8: 1004b8dc .word 0x1004b8dc +10018fac: 1004b834 .word 0x1004b834 +10018fb0: e000e018 .word 0xe000e018 + +10018fb4 : +10018fb4: f44f 717a mov.w r1, #1000 ; 0x3e8 +10018fb8: 4a05 ldr r2, [pc, #20] ; (10018fd0 ) +10018fba: 4b06 ldr r3, [pc, #24] ; (10018fd4 ) +10018fbc: 6812 ldr r2, [r2, #0] +10018fbe: 681b ldr r3, [r3, #0] +10018fc0: fbb2 f2f1 udiv r2, r2, r1 +10018fc4: fbb3 f3f2 udiv r3, r3, r2 +10018fc8: 3301 adds r3, #1 +10018fca: 6003 str r3, [r0, #0] +10018fcc: 4770 bx lr +10018fce: bf00 nop +10018fd0: 10044d58 .word 0x10044d58 +10018fd4: e000e018 .word 0xe000e018 + +10018fd8 : +10018fd8: 4b02 ldr r3, [pc, #8] ; (10018fe4 ) +10018fda: 6818 ldr r0, [r3, #0] +10018fdc: fab0 f080 clz r0, r0 +10018fe0: 0940 lsrs r0, r0, #5 +10018fe2: 4770 bx lr +10018fe4: 10044f30 .word 0x10044f30 + +10018fe8 : +10018fe8: 4a0c ldr r2, [pc, #48] ; (1001901c ) +10018fea: b570 push {r4, r5, r6, lr} +10018fec: 6813 ldr r3, [r2, #0] +10018fee: 4604 mov r4, r0 +10018ff0: 4303 orrs r3, r0 +10018ff2: 6013 str r3, [r2, #0] +10018ff4: f7fc fb2a bl 1001564c +10018ff8: 2300 movs r3, #0 +10018ffa: 2201 movs r2, #1 +10018ffc: 4908 ldr r1, [pc, #32] ; (10019020 ) +10018ffe: 4d09 ldr r5, [pc, #36] ; (10019024 ) +10019000: fa02 f603 lsl.w r6, r2, r3 +10019004: 4226 tst r6, r4 +10019006: d004 beq.n 10019012 +10019008: 5c5e ldrb r6, [r3, r1] +1001900a: b916 cbnz r6, 10019012 +1001900c: f845 0023 str.w r0, [r5, r3, lsl #2] +10019010: 545a strb r2, [r3, r1] +10019012: 3301 adds r3, #1 +10019014: 2b20 cmp r3, #32 +10019016: d1f3 bne.n 10019000 +10019018: bd70 pop {r4, r5, r6, pc} +1001901a: bf00 nop +1001901c: 10044f30 .word 0x10044f30 +10019020: 10044f10 .word 0x10044f10 +10019024: 1004b7b0 .word 0x1004b7b0 + +10019028 : +10019028: 4a12 ldr r2, [pc, #72] ; (10019074 ) +1001902a: b5f8 push {r3, r4, r5, r6, r7, lr} +1001902c: 6813 ldr r3, [r2, #0] +1001902e: 4604 mov r4, r0 +10019030: ea23 0300 bic.w r3, r3, r0 +10019034: 6013 str r3, [r2, #0] +10019036: f7fc fb09 bl 1001564c +1001903a: 2300 movs r3, #0 +1001903c: f04f 0e01 mov.w lr, #1 +10019040: 469c mov ip, r3 +10019042: 490d ldr r1, [pc, #52] ; (10019078 ) +10019044: 4d0d ldr r5, [pc, #52] ; (1001907c ) +10019046: 4f0e ldr r7, [pc, #56] ; (10019080 ) +10019048: fa0e f203 lsl.w r2, lr, r3 +1001904c: 4222 tst r2, r4 +1001904e: d00c beq.n 1001906a +10019050: 5c5a ldrb r2, [r3, r1] +10019052: 2a01 cmp r2, #1 +10019054: d109 bne.n 1001906a +10019056: f855 2023 ldr.w r2, [r5, r3, lsl #2] +1001905a: f857 6023 ldr.w r6, [r7, r3, lsl #2] +1001905e: 4402 add r2, r0 +10019060: 1b92 subs r2, r2, r6 +10019062: f845 2023 str.w r2, [r5, r3, lsl #2] +10019066: f803 c001 strb.w ip, [r3, r1] +1001906a: 3301 adds r3, #1 +1001906c: 2b20 cmp r3, #32 +1001906e: d1eb bne.n 10019048 +10019070: bdf8 pop {r3, r4, r5, r6, r7, pc} +10019072: bf00 nop +10019074: 10044f30 .word 0x10044f30 +10019078: 10044f10 .word 0x10044f10 +1001907c: 1004b730 .word 0x1004b730 +10019080: 1004b7b0 .word 0x1004b7b0 + +10019084 : +10019084: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10019088: f890 b062 ldrb.w fp, [r0, #98] ; 0x62 +1001908c: 6d03 ldr r3, [r0, #80] ; 0x50 +1001908e: f50b 2b80 add.w fp, fp, #262144 ; 0x40000 +10019092: f8d3 9000 ldr.w r9, [r3] +10019096: f8d3 8004 ldr.w r8, [r3, #4] +1001909a: f10b 0b60 add.w fp, fp, #96 ; 0x60 +1001909e: 6d43 ldr r3, [r0, #84] ; 0x54 +100190a0: b085 sub sp, #20 +100190a2: ea4f 350b mov.w r5, fp, lsl #12 +100190a6: 6886 ldr r6, [r0, #8] +100190a8: 9301 str r3, [sp, #4] +100190aa: f8d5 33a0 ldr.w r3, [r5, #928] ; 0x3a0 +100190ae: 4604 mov r4, r0 +100190b0: 421e tst r6, r3 +100190b2: f8d0 a04c ldr.w sl, [r0, #76] ; 0x4c +100190b6: f890 7061 ldrb.w r7, [r0, #97] ; 0x61 +100190ba: d009 beq.n 100190d0 +100190bc: 4b8b ldr r3, [pc, #556] ; (100192ec ) +100190be: 681b ldr r3, [r3, #0] +100190c0: 079b lsls r3, r3, #30 +100190c2: d502 bpl.n 100190ca +100190c4: 488a ldr r0, [pc, #552] ; (100192f0 ) +100190c6: 4b8b ldr r3, [pc, #556] ; (100192f4 ) +100190c8: 4798 blx r3 +100190ca: 4620 mov r0, r4 +100190cc: f025 fc58 bl 1003e980 <__HalGdmaChDisRtl8195a_veneer> +100190d0: ea4f 2b4b mov.w fp, fp, lsl #9 +100190d4: f10b 0358 add.w r3, fp, #88 ; 0x58 +100190d8: f10b 0b5d add.w fp, fp, #93 ; 0x5d +100190dc: 00db lsls r3, r3, #3 +100190de: ea4f 0bcb mov.w fp, fp, lsl #3 +100190e2: b2f6 uxtb r6, r6 +100190e4: 681a ldr r2, [r3, #0] +100190e6: 6a99 ldr r1, [r3, #40] ; 0x28 +100190e8: 3308 adds r3, #8 +100190ea: 430a orrs r2, r1 +100190ec: 4232 tst r2, r6 +100190ee: ea06 0001 and.w r0, r6, r1 +100190f2: bf18 it ne +100190f4: 6718 strne r0, [r3, #112] ; 0x70 +100190f6: 459b cmp fp, r3 +100190f8: d1f4 bne.n 100190e4 +100190fa: 2258 movs r2, #88 ; 0x58 +100190fc: 437a muls r2, r7 +100190fe: 6823 ldr r3, [r4, #0] +10019100: f102 0108 add.w r1, r2, #8 +10019104: 50ab str r3, [r5, r2] +10019106: 6863 ldr r3, [r4, #4] +10019108: 6960 ldr r0, [r4, #20] +1001910a: 514b str r3, [r1, r5] +1001910c: 6923 ldr r3, [r4, #16] +1001910e: f894 c028 ldrb.w ip, [r4, #40] ; 0x28 +10019112: 005b lsls r3, r3, #1 +10019114: 0100 lsls r0, r0, #4 +10019116: f003 030e and.w r3, r3, #14 +1001911a: f000 0070 and.w r0, r0, #112 ; 0x70 +1001911e: 4318 orrs r0, r3 +10019120: f00c 0301 and.w r3, ip, #1 +10019124: 4303 orrs r3, r0 +10019126: 69a0 ldr r0, [r4, #24] +10019128: f102 0e18 add.w lr, r2, #24 +1001912c: 01c0 lsls r0, r0, #7 +1001912e: f400 70c0 and.w r0, r0, #384 ; 0x180 +10019132: 4318 orrs r0, r3 +10019134: 69e3 ldr r3, [r4, #28] +10019136: f85e 6005 ldr.w r6, [lr, r5] +1001913a: 025b lsls r3, r3, #9 +1001913c: f403 63c0 and.w r3, r3, #1536 ; 0x600 +10019140: 4318 orrs r0, r3 +10019142: 6a23 ldr r3, [r4, #32] +10019144: f102 071c add.w r7, r2, #28 +10019148: 02db lsls r3, r3, #11 +1001914a: f403 5360 and.w r3, r3, #14336 ; 0x3800 +1001914e: 4318 orrs r0, r3 +10019150: 6a63 ldr r3, [r4, #36] ; 0x24 +10019152: 5979 ldr r1, [r7, r5] +10019154: 039b lsls r3, r3, #14 +10019156: f403 33e0 and.w r3, r3, #114688 ; 0x1c000 +1001915a: 4318 orrs r0, r3 +1001915c: 68e3 ldr r3, [r4, #12] +1001915e: f026 56c3 bic.w r6, r6, #408944640 ; 0x18600000 +10019162: 051b lsls r3, r3, #20 +10019164: f403 03e0 and.w r3, r3, #7340032 ; 0x700000 +10019168: 4318 orrs r0, r3 +1001916a: f3cc 03c0 ubfx r3, ip, #3, #1 +1001916e: ea40 60c3 orr.w r0, r0, r3, lsl #27 +10019172: f3cc 1300 ubfx r3, ip, #4, #1 +10019176: ea40 7003 orr.w r0, r0, r3, lsl #28 +1001917a: 9b01 ldr r3, [sp, #4] +1001917c: f426 1680 bic.w r6, r6, #1048576 ; 0x100000 +10019180: 681b ldr r3, [r3, #0] +10019182: 0c76 lsrs r6, r6, #17 +10019184: f3c3 030b ubfx r3, r3, #0, #12 +10019188: f421 51ff bic.w r1, r1, #8160 ; 0x1fe0 +1001918c: f3cc 1c40 ubfx ip, ip, #5, #1 +10019190: ea43 3c0c orr.w ip, r3, ip, lsl #12 +10019194: 0476 lsls r6, r6, #17 +10019196: f021 011f bic.w r1, r1, #31 +1001919a: 4306 orrs r6, r0 +1001919c: ea4c 0101 orr.w r1, ip, r1 +100191a0: f84e 6005 str.w r6, [lr, r5] +100191a4: 6ae0 ldr r0, [r4, #44] ; 0x2c +100191a6: 5179 str r1, [r7, r5] +100191a8: 6b67 ldr r7, [r4, #52] ; 0x34 +100191aa: 0140 lsls r0, r0, #5 +100191ac: 033f lsls r7, r7, #12 +100191ae: f407 5740 and.w r7, r7, #12288 ; 0x3000 +100191b2: b2c0 uxtb r0, r0 +100191b4: 4338 orrs r0, r7 +100191b6: 6b27 ldr r7, [r4, #48] ; 0x30 +100191b8: f894 c03d ldrb.w ip, [r4, #61] ; 0x3d +100191bc: 03bf lsls r7, r7, #14 +100191be: f894 b03c ldrb.w fp, [r4, #60] ; 0x3c +100191c2: b2bf uxth r7, r7 +100191c4: 4338 orrs r0, r7 +100191c6: f3cc 0740 ubfx r7, ip, #1, #1 +100191ca: ea40 70c7 orr.w r0, r0, r7, lsl #31 +100191ce: f00b 0701 and.w r7, fp, #1 +100191d2: ea40 2007 orr.w r0, r0, r7, lsl #8 +100191d6: f3cb 0780 ubfx r7, fp, #2, #1 +100191da: ea40 2087 orr.w r0, r0, r7, lsl #10 +100191de: f3cb 07c0 ubfx r7, fp, #3, #1 +100191e2: f102 0340 add.w r3, r2, #64 ; 0x40 +100191e6: ea40 20c7 orr.w r0, r0, r7, lsl #11 +100191ea: f3cb 1700 ubfx r7, fp, #4, #1 +100191ee: 9302 str r3, [sp, #8] +100191f0: ea40 4007 orr.w r0, r0, r7, lsl #16 +100191f4: 595b ldr r3, [r3, r5] +100191f6: f8df e10c ldr.w lr, [pc, #268] ; 10019304 +100191fa: f3cb 1b40 ubfx fp, fp, #5, #1 +100191fe: f00c 0701 and.w r7, ip, #1 +10019202: ea40 404b orr.w r0, r0, fp, lsl #17 +10019206: ea03 0e0e and.w lr, r3, lr +1001920a: ea40 7087 orr.w r0, r0, r7, lsl #30 +1001920e: f3cc 07c0 ubfx r7, ip, #3, #1 +10019212: ea40 000e orr.w r0, r0, lr +10019216: 017f lsls r7, r7, #5 +10019218: f3cc 0e80 ubfx lr, ip, #2, #1 +1001921c: ea47 074e orr.w r7, r7, lr, lsl #1 +10019220: f894 e03a ldrb.w lr, [r4, #58] ; 0x3a +10019224: f3cc 1c00 ubfx ip, ip, #4, #1 +10019228: ea4f 1ece mov.w lr, lr, lsl #7 +1001922c: f40e 6ef0 and.w lr, lr, #1920 ; 0x780 +10019230: ea47 178c orr.w r7, r7, ip, lsl #6 +10019234: f102 0344 add.w r3, r2, #68 ; 0x44 +10019238: ea47 070e orr.w r7, r7, lr +1001923c: f894 e03b ldrb.w lr, [r4, #59] ; 0x3b +10019240: 9303 str r3, [sp, #12] +10019242: 595b ldr r3, [r3, r5] +10019244: ea4f 2ece mov.w lr, lr, lsl #11 +10019248: f423 43ff bic.w r3, r3, #32640 ; 0x7f80 +1001924c: f40e 4ef0 and.w lr, lr, #30720 ; 0x7800 +10019250: ea47 070e orr.w r7, r7, lr +10019254: f023 0362 bic.w r3, r3, #98 ; 0x62 +10019258: 433b orrs r3, r7 +1001925a: 9f02 ldr r7, [sp, #8] +1001925c: f019 0f03 tst.w r9, #3 +10019260: 5178 str r0, [r7, r5] +10019262: 9803 ldr r0, [sp, #12] +10019264: 5143 str r3, [r0, r5] +10019266: d00c beq.n 10019282 +10019268: 4b20 ldr r3, [pc, #128] ; (100192ec ) +1001926a: 681b ldr r3, [r3, #0] +1001926c: 0798 lsls r0, r3, #30 +1001926e: d403 bmi.n 10019278 +10019270: 2000 movs r0, #0 +10019272: b005 add sp, #20 +10019274: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10019278: 6da1 ldr r1, [r4, #88] ; 0x58 +1001927a: 4b1e ldr r3, [pc, #120] ; (100192f4 ) +1001927c: 481e ldr r0, [pc, #120] ; (100192f8 ) +1001927e: 4798 blx r3 +10019280: e7f6 b.n 10019270 +10019282: f8d8 3000 ldr.w r3, [r8] +10019286: 3210 adds r2, #16 +10019288: f842 9005 str.w r9, [r2, r5] +1001928c: f8c9 3008 str.w r3, [r9, #8] +10019290: 9b01 ldr r3, [sp, #4] +10019292: f8c9 600c str.w r6, [r9, #12] +10019296: 685b ldr r3, [r3, #4] +10019298: f8c9 1010 str.w r1, [r9, #16] +1001929c: f1ba 0f01 cmp.w sl, #1 +100192a0: d801 bhi.n 100192a6 +100192a2: 2001 movs r0, #1 +100192a4: e7e5 b.n 10019272 +100192a6: f8d8 5000 ldr.w r5, [r8] +100192aa: f10a 3aff add.w sl, sl, #4294967295 +100192ae: b93d cbnz r5, 100192c0 +100192b0: 4b12 ldr r3, [pc, #72] ; (100192fc ) +100192b2: 681b ldr r3, [r3, #0] +100192b4: 0799 lsls r1, r3, #30 +100192b6: d5db bpl.n 10019270 +100192b8: 4b0e ldr r3, [pc, #56] ; (100192f4 ) +100192ba: 4811 ldr r0, [pc, #68] ; (10019300 ) +100192bc: 4798 blx r3 +100192be: e7d7 b.n 10019270 +100192c0: f1ba 0f01 cmp.w sl, #1 +100192c4: d105 bne.n 100192d2 +100192c6: f894 2063 ldrb.w r2, [r4, #99] ; 0x63 +100192ca: 06d2 lsls r2, r2, #27 +100192cc: bf48 it mi +100192ce: f026 56c0 bicmi.w r6, r6, #402653184 ; 0x18000000 +100192d2: 681a ldr r2, [r3, #0] +100192d4: f8d8 8004 ldr.w r8, [r8, #4] +100192d8: f362 010b bfi r1, r2, #0, #12 +100192dc: f8d8 2000 ldr.w r2, [r8] +100192e0: 685b ldr r3, [r3, #4] +100192e2: 60ee str r6, [r5, #12] +100192e4: 6129 str r1, [r5, #16] +100192e6: 60aa str r2, [r5, #8] +100192e8: e7d8 b.n 1001929c +100192ea: bf00 nop +100192ec: 1000030c .word 0x1000030c +100192f0: 10040a20 .word 0x10040a20 +100192f4: 0000f39d .word 0x0000f39d +100192f8: 10040a4e .word 0x10040a4e +100192fc: 10000314 .word 0x10000314 +10019300: 10040a7f .word 0x10040a7f +10019304: 3ffc021f .word 0x3ffc021f + +10019308 : +10019308: b507 push {r0, r1, r2, lr} +1001930a: f890 2084 ldrb.w r2, [r0, #132] ; 0x84 +1001930e: f890 1089 ldrb.w r1, [r0, #137] ; 0x89 +10019312: 2a01 cmp r2, #1 +10019314: d024 beq.n 10019360 +10019316: d30b bcc.n 10019330 +10019318: 2a02 cmp r2, #2 +1001931a: d032 beq.n 10019382 +1001931c: 4b22 ldr r3, [pc, #136] ; (100193a8 ) +1001931e: 681b ldr r3, [r3, #0] +10019320: 051b lsls r3, r3, #20 +10019322: d503 bpl.n 1001932c +10019324: 4611 mov r1, r2 +10019326: 4821 ldr r0, [pc, #132] ; (100193ac ) +10019328: 4b21 ldr r3, [pc, #132] ; (100193b0 ) +1001932a: 4798 blx r3 +1001932c: 2303 movs r3, #3 +1001932e: e012 b.n 10019356 +10019330: 4b20 ldr r3, [pc, #128] ; (100193b4 ) +10019332: 2008 movs r0, #8 +10019334: 681a ldr r2, [r3, #0] +10019336: f442 3280 orr.w r2, r2, #65536 ; 0x10000 +1001933a: 601a str r2, [r3, #0] +1001933c: 681a ldr r2, [r3, #0] +1001933e: f442 3200 orr.w r2, r2, #131072 ; 0x20000 +10019342: 601a str r2, [r3, #0] +10019344: 2201 movs r2, #1 +10019346: 4b1c ldr r3, [pc, #112] ; (100193b8 ) +10019348: 4798 blx r3 +1001934a: 4a1c ldr r2, [pc, #112] ; (100193bc ) +1001934c: 6813 ldr r3, [r2, #0] +1001934e: f443 7380 orr.w r3, r3, #256 ; 0x100 +10019352: 6013 str r3, [r2, #0] +10019354: 2300 movs r3, #0 +10019356: 9301 str r3, [sp, #4] +10019358: 9801 ldr r0, [sp, #4] +1001935a: b003 add sp, #12 +1001935c: f85d fb04 ldr.w pc, [sp], #4 +10019360: 4b14 ldr r3, [pc, #80] ; (100193b4 ) +10019362: 6818 ldr r0, [r3, #0] +10019364: f440 2080 orr.w r0, r0, #262144 ; 0x40000 +10019368: 6018 str r0, [r3, #0] +1001936a: 6818 ldr r0, [r3, #0] +1001936c: f440 2000 orr.w r0, r0, #524288 ; 0x80000 +10019370: 6018 str r0, [r3, #0] +10019372: 4b11 ldr r3, [pc, #68] ; (100193b8 ) +10019374: 2009 movs r0, #9 +10019376: 4798 blx r3 +10019378: 4a10 ldr r2, [pc, #64] ; (100193bc ) +1001937a: 6813 ldr r3, [r2, #0] +1001937c: f443 7300 orr.w r3, r3, #512 ; 0x200 +10019380: e7e7 b.n 10019352 +10019382: 4b0c ldr r3, [pc, #48] ; (100193b4 ) +10019384: 200a movs r0, #10 +10019386: 681a ldr r2, [r3, #0] +10019388: f442 1280 orr.w r2, r2, #1048576 ; 0x100000 +1001938c: 601a str r2, [r3, #0] +1001938e: 681a ldr r2, [r3, #0] +10019390: f442 1200 orr.w r2, r2, #2097152 ; 0x200000 +10019394: 601a str r2, [r3, #0] +10019396: 2201 movs r2, #1 +10019398: 4b07 ldr r3, [pc, #28] ; (100193b8 ) +1001939a: 4798 blx r3 +1001939c: 4a07 ldr r2, [pc, #28] ; (100193bc ) +1001939e: 6813 ldr r3, [r2, #0] +100193a0: f443 6380 orr.w r3, r3, #1024 ; 0x400 +100193a4: e7d5 b.n 10019352 +100193a6: bf00 nop +100193a8: 10000314 .word 0x10000314 +100193ac: 10040bde .word 0x10040bde +100193b0: 0000f39d .word 0x0000f39d +100193b4: 40000234 .word 0x40000234 +100193b8: 00002b39 .word 0x00002b39 +100193bc: 40000218 .word 0x40000218 + +100193c0 : +100193c0: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} +100193c4: f890 6084 ldrb.w r6, [r0, #132] ; 0x84 +100193c8: 4604 mov r4, r0 +100193ca: 2e02 cmp r6, #2 +100193cc: d909 bls.n 100193e2 +100193ce: 4b52 ldr r3, [pc, #328] ; (10019518 ) +100193d0: 681b ldr r3, [r3, #0] +100193d2: 051b lsls r3, r3, #20 +100193d4: d503 bpl.n 100193de +100193d6: 4631 mov r1, r6 +100193d8: 4850 ldr r0, [pc, #320] ; (1001951c ) +100193da: 4b51 ldr r3, [pc, #324] ; (10019520 ) +100193dc: 4798 blx r3 +100193de: 2003 movs r0, #3 +100193e0: e08f b.n 10019502 +100193e2: f890 9088 ldrb.w r9, [r0, #136] ; 0x88 +100193e6: f890 a081 ldrb.w sl, [r0, #129] ; 0x81 +100193ea: f890 708e ldrb.w r7, [r0, #142] ; 0x8e +100193ee: f890 808a ldrb.w r8, [r0, #138] ; 0x8a +100193f2: f7ff ff89 bl 10019308 +100193f6: 4b4b ldr r3, [pc, #300] ; (10019524 ) +100193f8: 4620 mov r0, r4 +100193fa: 4798 blx r3 +100193fc: f894 2081 ldrb.w r2, [r4, #129] ; 0x81 +10019400: f894 308b ldrb.w r3, [r4, #139] ; 0x8b +10019404: 0112 lsls r2, r2, #4 +10019406: 019b lsls r3, r3, #6 +10019408: f003 0340 and.w r3, r3, #64 ; 0x40 +1001940c: f002 0230 and.w r2, r2, #48 ; 0x30 +10019410: 431a orrs r2, r3 +10019412: f894 3082 ldrb.w r3, [r4, #130] ; 0x82 +10019416: f003 030f and.w r3, r3, #15 +1001941a: 431a orrs r2, r3 +1001941c: f894 308c ldrb.w r3, [r4, #140] ; 0x8c +10019420: 01db lsls r3, r3, #7 +10019422: b2db uxtb r3, r3 +10019424: 431a orrs r2, r3 +10019426: f894 308e ldrb.w r3, [r4, #142] ; 0x8e +1001942a: 021b lsls r3, r3, #8 +1001942c: f403 7340 and.w r3, r3, #768 ; 0x300 +10019430: 431a orrs r2, r3 +10019432: f894 3080 ldrb.w r3, [r4, #128] ; 0x80 +10019436: 031b lsls r3, r3, #12 +10019438: b29b uxth r3, r3 +1001943a: 4313 orrs r3, r2 +1001943c: f1b8 0f00 cmp.w r8, #0 +10019440: d105 bne.n 1001944e +10019442: f894 208d ldrb.w r2, [r4, #141] ; 0x8d +10019446: 0292 lsls r2, r2, #10 +10019448: f402 6280 and.w r2, r2, #1024 ; 0x400 +1001944c: 4313 orrs r3, r2 +1001944e: f506 1580 add.w r5, r6, #1048576 ; 0x100000 +10019452: f505 7584 add.w r5, r5, #264 ; 0x108 +10019456: 02ad lsls r5, r5, #10 +10019458: 602b str r3, [r5, #0] +1001945a: 6f63 ldr r3, [r4, #116] ; 0x74 +1001945c: f018 0f01 tst.w r8, #1 +10019460: f003 033f and.w r3, r3, #63 ; 0x3f +10019464: 61ab str r3, [r5, #24] +10019466: 6ee3 ldr r3, [r4, #108] ; 0x6c +10019468: f003 033f and.w r3, r3, #63 ; 0x3f +1001946c: 61eb str r3, [r5, #28] +1001946e: d012 beq.n 10019496 +10019470: 3f02 subs r7, #2 +10019472: 2f01 cmp r7, #1 +10019474: d905 bls.n 10019482 +10019476: f1ba 0f02 cmp.w sl, #2 +1001947a: d105 bne.n 10019488 +1001947c: f1b9 0f01 cmp.w r9, #1 +10019480: d102 bne.n 10019488 +10019482: f8b4 307e ldrh.w r3, [r4, #126] ; 0x7e +10019486: 606b str r3, [r5, #4] +10019488: 4b27 ldr r3, [pc, #156] ; (10019528 ) +1001948a: 6fa1 ldr r1, [r4, #120] ; 0x78 +1001948c: 4620 mov r0, r4 +1001948e: 4798 blx r3 +10019490: f8b4 307c ldrh.w r3, [r4, #124] ; 0x7c +10019494: 616b str r3, [r5, #20] +10019496: f894 3086 ldrb.w r3, [r4, #134] ; 0x86 +1001949a: f894 2087 ldrb.w r2, [r4, #135] ; 0x87 +1001949e: 005b lsls r3, r3, #1 +100194a0: 0092 lsls r2, r2, #2 +100194a2: f002 0204 and.w r2, r2, #4 +100194a6: f003 0302 and.w r3, r3, #2 +100194aa: 4313 orrs r3, r2 +100194ac: f894 2088 ldrb.w r2, [r4, #136] ; 0x88 +100194b0: f002 0201 and.w r2, r2, #1 +100194b4: 4313 orrs r3, r2 +100194b6: 60eb str r3, [r5, #12] +100194b8: f894 308f ldrb.w r3, [r4, #143] ; 0x8f +100194bc: 2b01 cmp r3, #1 +100194be: d11c bne.n 100194fa +100194c0: 2e01 cmp r6, #1 +100194c2: d021 beq.n 10019508 +100194c4: 2e02 cmp r6, #2 +100194c6: d021 beq.n 1001950c +100194c8: 2306 movs r3, #6 +100194ca: 9301 str r3, [sp, #4] +100194cc: f240 33e7 movw r3, #999 ; 0x3e7 +100194d0: 9a01 ldr r2, [sp, #4] +100194d2: 429a cmp r2, r3 +100194d4: d01c beq.n 10019510 +100194d6: 4b15 ldr r3, [pc, #84] ; (1001952c ) +100194d8: 4620 mov r0, r4 +100194da: 4798 blx r3 +100194dc: 4b14 ldr r3, [pc, #80] ; (10019530 ) +100194de: f104 0530 add.w r5, r4, #48 ; 0x30 +100194e2: 6323 str r3, [r4, #48] ; 0x30 +100194e4: 9b01 ldr r3, [sp, #4] +100194e6: 63a4 str r4, [r4, #56] ; 0x38 +100194e8: 6363 str r3, [r4, #52] ; 0x34 +100194ea: 6e23 ldr r3, [r4, #96] ; 0x60 +100194ec: 4628 mov r0, r5 +100194ee: 63e3 str r3, [r4, #60] ; 0x3c +100194f0: 4b10 ldr r3, [pc, #64] ; (10019534 ) +100194f2: 4798 blx r3 +100194f4: 4628 mov r0, r5 +100194f6: 4b10 ldr r3, [pc, #64] ; (10019538 ) +100194f8: 4798 blx r3 +100194fa: 4620 mov r0, r4 +100194fc: 4b0f ldr r3, [pc, #60] ; (1001953c ) +100194fe: 4798 blx r3 +10019500: 2000 movs r0, #0 +10019502: b002 add sp, #8 +10019504: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10019508: 2348 movs r3, #72 ; 0x48 +1001950a: e7de b.n 100194ca +1001950c: 2349 movs r3, #73 ; 0x49 +1001950e: e7dc b.n 100194ca +10019510: 2300 movs r3, #0 +10019512: f884 308f strb.w r3, [r4, #143] ; 0x8f +10019516: e7f0 b.n 100194fa +10019518: 10000314 .word 0x10000314 +1001951c: 10040b6b .word 0x10040b6b +10019520: 0000f39d .word 0x0000f39d +10019524: 00007ef9 .word 0x00007ef9 +10019528: 00009009 .word 0x00009009 +1001952c: 00008521 .word 0x00008521 +10019530: 100199a1 .word 0x100199a1 +10019534: 00004029 .word 0x00004029 +10019538: 000040f1 .word 0x000040f1 +1001953c: 00007e45 .word 0x00007e45 + +10019540 : +10019540: b507 push {r0, r1, r2, lr} +10019542: f890 3084 ldrb.w r3, [r0, #132] ; 0x84 +10019546: f890 1089 ldrb.w r1, [r0, #137] ; 0x89 +1001954a: 2b01 cmp r3, #1 +1001954c: d026 beq.n 1001959c +1001954e: d30b bcc.n 10019568 +10019550: 2b02 cmp r3, #2 +10019552: d037 beq.n 100195c4 +10019554: 4a25 ldr r2, [pc, #148] ; (100195ec ) +10019556: 6812 ldr r2, [r2, #0] +10019558: 0512 lsls r2, r2, #20 +1001955a: d503 bpl.n 10019564 +1001955c: 4619 mov r1, r3 +1001955e: 4824 ldr r0, [pc, #144] ; (100195f0 ) +10019560: 4b24 ldr r3, [pc, #144] ; (100195f4 ) +10019562: 4798 blx r3 +10019564: 2303 movs r3, #3 +10019566: e014 b.n 10019592 +10019568: 4b23 ldr r3, [pc, #140] ; (100195f8 ) +1001956a: 2008 movs r0, #8 +1001956c: 681a ldr r2, [r3, #0] +1001956e: f422 3280 bic.w r2, r2, #65536 ; 0x10000 +10019572: 601a str r2, [r3, #0] +10019574: 681a ldr r2, [r3, #0] +10019576: f422 3200 bic.w r2, r2, #131072 ; 0x20000 +1001957a: 601a str r2, [r3, #0] +1001957c: 2200 movs r2, #0 +1001957e: 4b1f ldr r3, [pc, #124] ; (100195fc ) +10019580: 4798 blx r3 +10019582: 4b1f ldr r3, [pc, #124] ; (10019600 ) +10019584: 4a1f ldr r2, [pc, #124] ; (10019604 ) +10019586: 681b ldr r3, [r3, #0] +10019588: 6813 ldr r3, [r2, #0] +1001958a: f423 7380 bic.w r3, r3, #256 ; 0x100 +1001958e: 6013 str r3, [r2, #0] +10019590: 2300 movs r3, #0 +10019592: 9301 str r3, [sp, #4] +10019594: 9801 ldr r0, [sp, #4] +10019596: b003 add sp, #12 +10019598: f85d fb04 ldr.w pc, [sp], #4 +1001959c: 4b16 ldr r3, [pc, #88] ; (100195f8 ) +1001959e: 2009 movs r0, #9 +100195a0: 681a ldr r2, [r3, #0] +100195a2: f422 2280 bic.w r2, r2, #262144 ; 0x40000 +100195a6: 601a str r2, [r3, #0] +100195a8: 681a ldr r2, [r3, #0] +100195aa: f422 2200 bic.w r2, r2, #524288 ; 0x80000 +100195ae: 601a str r2, [r3, #0] +100195b0: 2200 movs r2, #0 +100195b2: 4b12 ldr r3, [pc, #72] ; (100195fc ) +100195b4: 4798 blx r3 +100195b6: 4b14 ldr r3, [pc, #80] ; (10019608 ) +100195b8: 4a12 ldr r2, [pc, #72] ; (10019604 ) +100195ba: 681b ldr r3, [r3, #0] +100195bc: 6813 ldr r3, [r2, #0] +100195be: f423 7300 bic.w r3, r3, #512 ; 0x200 +100195c2: e7e4 b.n 1001958e +100195c4: 4b0c ldr r3, [pc, #48] ; (100195f8 ) +100195c6: 200a movs r0, #10 +100195c8: 681a ldr r2, [r3, #0] +100195ca: f422 1280 bic.w r2, r2, #1048576 ; 0x100000 +100195ce: 601a str r2, [r3, #0] +100195d0: 681a ldr r2, [r3, #0] +100195d2: f422 1200 bic.w r2, r2, #2097152 ; 0x200000 +100195d6: 601a str r2, [r3, #0] +100195d8: 2200 movs r2, #0 +100195da: 4b08 ldr r3, [pc, #32] ; (100195fc ) +100195dc: 4798 blx r3 +100195de: 4b0b ldr r3, [pc, #44] ; (1001960c ) +100195e0: 4a08 ldr r2, [pc, #32] ; (10019604 ) +100195e2: 681b ldr r3, [r3, #0] +100195e4: 6813 ldr r3, [r2, #0] +100195e6: f423 6380 bic.w r3, r3, #1024 ; 0x400 +100195ea: e7d0 b.n 1001958e +100195ec: 10000314 .word 0x10000314 +100195f0: 10040bde .word 0x10040bde +100195f4: 0000f39d .word 0x0000f39d +100195f8: 40000234 .word 0x40000234 +100195fc: 00002b39 .word 0x00002b39 +10019600: 40042000 .word 0x40042000 +10019604: 40000218 .word 0x40000218 +10019608: 40042400 .word 0x40042400 +1001960c: 40042800 .word 0x40042800 + +10019610 : +10019610: b570 push {r4, r5, r6, lr} +10019612: f890 4084 ldrb.w r4, [r0, #132] ; 0x84 +10019616: 4605 mov r5, r0 +10019618: 2c02 cmp r4, #2 +1001961a: d909 bls.n 10019630 +1001961c: 4b1b ldr r3, [pc, #108] ; (1001968c ) +1001961e: 681b ldr r3, [r3, #0] +10019620: 051b lsls r3, r3, #20 +10019622: d503 bpl.n 1001962c +10019624: 4621 mov r1, r4 +10019626: 481a ldr r0, [pc, #104] ; (10019690 ) +10019628: 4b1a ldr r3, [pc, #104] ; (10019694 ) +1001962a: 4798 blx r3 +1001962c: 2003 movs r0, #3 +1001962e: bd70 pop {r4, r5, r6, pc} +10019630: 4b19 ldr r3, [pc, #100] ; (10019698 ) +10019632: f890 608a ldrb.w r6, [r0, #138] ; 0x8a +10019636: 4798 blx r3 +10019638: f895 308b ldrb.w r3, [r5, #139] ; 0x8b +1001963c: f895 208c ldrb.w r2, [r5, #140] ; 0x8c +10019640: 019b lsls r3, r3, #6 +10019642: 01d2 lsls r2, r2, #7 +10019644: b2d2 uxtb r2, r2 +10019646: f003 0340 and.w r3, r3, #64 ; 0x40 +1001964a: 4313 orrs r3, r2 +1001964c: f895 2082 ldrb.w r2, [r5, #130] ; 0x82 +10019650: f002 020f and.w r2, r2, #15 +10019654: 4313 orrs r3, r2 +10019656: b92e cbnz r6, 10019664 +10019658: f895 208d ldrb.w r2, [r5, #141] ; 0x8d +1001965c: 0292 lsls r2, r2, #10 +1001965e: f402 6280 and.w r2, r2, #1024 ; 0x400 +10019662: 4313 orrs r3, r2 +10019664: f504 1480 add.w r4, r4, #1048576 ; 0x100000 +10019668: f504 7484 add.w r4, r4, #264 ; 0x108 +1001966c: 02a4 lsls r4, r4, #10 +1001966e: 6023 str r3, [r4, #0] +10019670: 6f6b ldr r3, [r5, #116] ; 0x74 +10019672: 4628 mov r0, r5 +10019674: f003 033f and.w r3, r3, #63 ; 0x3f +10019678: 61a3 str r3, [r4, #24] +1001967a: 6eeb ldr r3, [r5, #108] ; 0x6c +1001967c: f003 033f and.w r3, r3, #63 ; 0x3f +10019680: 61e3 str r3, [r4, #28] +10019682: 4b06 ldr r3, [pc, #24] ; (1001969c ) +10019684: 4798 blx r3 +10019686: 2000 movs r0, #0 +10019688: bd70 pop {r4, r5, r6, pc} +1001968a: bf00 nop +1001968c: 10000314 .word 0x10000314 +10019690: 10040bff .word 0x10040bff +10019694: 0000f39d .word 0x0000f39d +10019698: 00007ef9 .word 0x00007ef9 +1001969c: 00007e45 .word 0x00007e45 + +100196a0 : +100196a0: b570 push {r4, r5, r6, lr} +100196a2: 4b2a ldr r3, [pc, #168] ; (1001974c ) +100196a4: f890 4084 ldrb.w r4, [r0, #132] ; 0x84 +100196a8: 4606 mov r6, r0 +100196aa: 460d mov r5, r1 +100196ac: 4798 blx r3 +100196ae: 2c01 cmp r4, #1 +100196b0: ea4f 0290 mov.w r2, r0, lsr #2 +100196b4: d11b bne.n 100196ee +100196b6: 4926 ldr r1, [pc, #152] ; (10019750 ) +100196b8: 42aa cmp r2, r5 +100196ba: 680b ldr r3, [r1, #0] +100196bc: bf39 ittee cc +100196be: 4825 ldrcc r0, [pc, #148] ; (10019754 ) +100196c0: f443 2380 orrcc.w r3, r3, #262144 ; 0x40000 +100196c4: f423 2380 biccs.w r3, r3, #262144 ; 0x40000 +100196c8: 0840 lsrcs r0, r0, #1 +100196ca: 600b str r3, [r1, #0] +100196cc: f896 308a ldrb.w r3, [r6, #138] ; 0x8a +100196d0: 2b01 cmp r3, #1 +100196d2: d12b bne.n 1001972c +100196d4: 0842 lsrs r2, r0, #1 +100196d6: 4295 cmp r5, r2 +100196d8: d90b bls.n 100196f2 +100196da: 4b1f ldr r3, [pc, #124] ; (10019758 ) +100196dc: 681b ldr r3, [r3, #0] +100196de: 0519 lsls r1, r3, #20 +100196e0: d503 bpl.n 100196ea +100196e2: 4629 mov r1, r5 +100196e4: 481d ldr r0, [pc, #116] ; (1001975c ) +100196e6: 4b1e ldr r3, [pc, #120] ; (10019760 ) +100196e8: 4798 blx r3 +100196ea: 2202 movs r2, #2 +100196ec: e010 b.n 10019710 +100196ee: 4610 mov r0, r2 +100196f0: e7ec b.n 100196cc +100196f2: fbb0 f2f5 udiv r2, r0, r5 +100196f6: fb05 0012 mls r0, r5, r2, r0 +100196fa: ebb0 0f55 cmp.w r0, r5, lsr #1 +100196fe: bf94 ite ls +10019700: 1c53 addls r3, r2, #1 +10019702: 1c93 addhi r3, r2, #2 +10019704: f64f 72fe movw r2, #65534 ; 0xfffe +10019708: 4293 cmp r3, r2 +1001970a: bf94 ite ls +1001970c: 401a andls r2, r3 +1001970e: 4012 andhi r2, r2 +10019710: f504 1380 add.w r3, r4, #1048576 ; 0x100000 +10019714: f503 7384 add.w r3, r3, #264 ; 0x108 +10019718: 029b lsls r3, r3, #10 +1001971a: 6899 ldr r1, [r3, #8] +1001971c: f8a6 207c strh.w r2, [r6, #124] ; 0x7c +10019720: f021 0001 bic.w r0, r1, #1 +10019724: 6098 str r0, [r3, #8] +10019726: 615a str r2, [r3, #20] +10019728: 6099 str r1, [r3, #8] +1001972a: bd70 pop {r4, r5, r6, pc} +1001972c: 220a movs r2, #10 +1001972e: fbb0 f2f2 udiv r2, r0, r2 +10019732: 4295 cmp r5, r2 +10019734: d909 bls.n 1001974a +10019736: 4b08 ldr r3, [pc, #32] ; (10019758 ) +10019738: 681b ldr r3, [r3, #0] +1001973a: 051b lsls r3, r3, #20 +1001973c: d505 bpl.n 1001974a +1001973e: 4629 mov r1, r5 +10019740: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10019744: 4805 ldr r0, [pc, #20] ; (1001975c ) +10019746: 4b06 ldr r3, [pc, #24] ; (10019760 ) +10019748: 4718 bx r3 +1001974a: bd70 pop {r4, r5, r6, pc} +1001974c: 00000355 .word 0x00000355 +10019750: 40000250 .word 0x40000250 +10019754: 04f790d5 .word 0x04f790d5 +10019758: 10000314 .word 0x10000314 +1001975c: 10040c37 .word 0x10040c37 +10019760: 0000f39d .word 0x0000f39d + +10019764 : +10019764: b570 push {r4, r5, r6, lr} +10019766: 4604 mov r4, r0 +10019768: 460e mov r6, r1 +1001976a: 4615 mov r5, r2 +1001976c: b1e2 cbz r2, 100197a8 +1001976e: f890 3093 ldrb.w r3, [r0, #147] ; 0x93 +10019772: 429a cmp r2, r3 +10019774: bf98 it ls +10019776: 2300 movls r3, #0 +10019778: 6ec2 ldr r2, [r0, #108] ; 0x6c +1001977a: 4293 cmp r3, r2 +1001977c: d002 beq.n 10019784 +1001977e: 66c3 str r3, [r0, #108] ; 0x6c +10019780: 4b0a ldr r3, [pc, #40] ; (100197ac ) +10019782: 4798 blx r3 +10019784: f894 3082 ldrb.w r3, [r4, #130] ; 0x82 +10019788: 64a6 str r6, [r4, #72] ; 0x48 +1001978a: 2b07 cmp r3, #7 +1001978c: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 +10019790: bfc8 it gt +10019792: 086d lsrgt r5, r5, #1 +10019794: f043 031c orr.w r3, r3, #28 +10019798: f884 3085 strb.w r3, [r4, #133] ; 0x85 +1001979c: 6665 str r5, [r4, #100] ; 0x64 +1001979e: 4620 mov r0, r4 +100197a0: 4b03 ldr r3, [pc, #12] ; (100197b0 ) +100197a2: 4798 blx r3 +100197a4: 2000 movs r0, #0 +100197a6: bd70 pop {r4, r5, r6, pc} +100197a8: 2003 movs r0, #3 +100197aa: bd70 pop {r4, r5, r6, pc} +100197ac: 000088c9 .word 0x000088c9 +100197b0: 00008521 .word 0x00008521 + +100197b4 : +100197b4: f890 3084 ldrb.w r3, [r0, #132] ; 0x84 +100197b8: f001 013f and.w r1, r1, #63 ; 0x3f +100197bc: f503 1380 add.w r3, r3, #1048576 ; 0x100000 +100197c0: f503 7384 add.w r3, r3, #264 ; 0x108 +100197c4: 029b lsls r3, r3, #10 +100197c6: 6199 str r1, [r3, #24] +100197c8: 4770 bx lr + ... + +100197cc <_SsiWriteInterruptRtl8195a>: +100197cc: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +100197ce: 4604 mov r4, r0 +100197d0: 4b40 ldr r3, [pc, #256] ; (100198d4 <_SsiWriteInterruptRtl8195a+0x108>) +100197d2: 4798 blx r3 +100197d4: 6f23 ldr r3, [r4, #112] ; 0x70 +100197d6: f894 5084 ldrb.w r5, [r4, #132] ; 0x84 +100197da: b9f3 cbnz r3, 1001981a <_SsiWriteInterruptRtl8195a+0x4e> +100197dc: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 +100197e0: 4620 mov r0, r4 +100197e2: f023 0301 bic.w r3, r3, #1 +100197e6: f884 3085 strb.w r3, [r4, #133] ; 0x85 +100197ea: 4b3b ldr r3, [pc, #236] ; (100198d8 <_SsiWriteInterruptRtl8195a+0x10c>) +100197ec: 4798 blx r3 +100197ee: 4a3b ldr r2, [pc, #236] ; (100198dc <_SsiWriteInterruptRtl8195a+0x110>) +100197f0: 02ad lsls r5, r5, #10 +100197f2: 4b3b ldr r3, [pc, #236] ; (100198e0 <_SsiWriteInterruptRtl8195a+0x114>) +100197f4: 442a add r2, r5 +100197f6: 6811 ldr r1, [r2, #0] +100197f8: f001 0101 and.w r1, r1, #1 +100197fc: 9101 str r1, [sp, #4] +100197fe: 9901 ldr r1, [sp, #4] +10019800: b109 cbz r1, 10019806 <_SsiWriteInterruptRtl8195a+0x3a> +10019802: 3b01 subs r3, #1 +10019804: d1f7 bne.n 100197f6 <_SsiWriteInterruptRtl8195a+0x2a> +10019806: 6d63 ldr r3, [r4, #84] ; 0x54 +10019808: b12b cbz r3, 10019816 <_SsiWriteInterruptRtl8195a+0x4a> +1001980a: f8d4 3598 ldr.w r3, [r4, #1432] ; 0x598 +1001980e: b113 cbz r3, 10019816 <_SsiWriteInterruptRtl8195a+0x4a> +10019810: f8d4 059c ldr.w r0, [r4, #1436] ; 0x59c +10019814: 4798 blx r3 +10019816: b003 add sp, #12 +10019818: bdf0 pop {r4, r5, r6, r7, pc} +1001981a: 2800 cmp r0, #0 +1001981c: d036 beq.n 1001988c <_SsiWriteInterruptRtl8195a+0xc0> +1001981e: 4b31 ldr r3, [pc, #196] ; (100198e4 <_SsiWriteInterruptRtl8195a+0x118>) +10019820: 4620 mov r0, r4 +10019822: 4798 blx r3 +10019824: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 +10019828: f1c0 0740 rsb r7, r0, #64 ; 0x40 +1001982c: f023 0301 bic.w r3, r3, #1 +10019830: f884 3085 strb.w r3, [r4, #133] ; 0x85 +10019834: 4620 mov r0, r4 +10019836: 4e28 ldr r6, [pc, #160] ; (100198d8 <_SsiWriteInterruptRtl8195a+0x10c>) +10019838: 47b0 blx r6 +1001983a: 6e63 ldr r3, [r4, #100] ; 0x64 +1001983c: b123 cbz r3, 10019848 <_SsiWriteInterruptRtl8195a+0x7c> +1001983e: 6d63 ldr r3, [r4, #84] ; 0x54 +10019840: b113 cbz r3, 10019848 <_SsiWriteInterruptRtl8195a+0x7c> +10019842: 4620 mov r0, r4 +10019844: f000 f852 bl 100198ec <_SsiReadInterruptRtl8195a> +10019848: 4a27 ldr r2, [pc, #156] ; (100198e8 <_SsiWriteInterruptRtl8195a+0x11c>) +1001984a: 02ad lsls r5, r5, #10 +1001984c: 442a add r2, r5 +1001984e: b1af cbz r7, 1001987c <_SsiWriteInterruptRtl8195a+0xb0> +10019850: f894 3082 ldrb.w r3, [r4, #130] ; 0x82 +10019854: 2b07 cmp r3, #7 +10019856: 6d63 ldr r3, [r4, #84] ; 0x54 +10019858: dd2f ble.n 100198ba <_SsiWriteInterruptRtl8195a+0xee> +1001985a: b123 cbz r3, 10019866 <_SsiWriteInterruptRtl8195a+0x9a> +1001985c: f833 1b02 ldrh.w r1, [r3], #2 +10019860: 8011 strh r1, [r2, #0] +10019862: 6563 str r3, [r4, #84] ; 0x54 +10019864: e004 b.n 10019870 <_SsiWriteInterruptRtl8195a+0xa4> +10019866: f894 108a ldrb.w r1, [r4, #138] ; 0x8a +1001986a: 2901 cmp r1, #1 +1001986c: d100 bne.n 10019870 <_SsiWriteInterruptRtl8195a+0xa4> +1001986e: 8013 strh r3, [r2, #0] +10019870: 6f23 ldr r3, [r4, #112] ; 0x70 +10019872: 3f01 subs r7, #1 +10019874: 3b01 subs r3, #1 +10019876: 6723 str r3, [r4, #112] ; 0x70 +10019878: 2b00 cmp r3, #0 +1001987a: d1e8 bne.n 1001984e <_SsiWriteInterruptRtl8195a+0x82> +1001987c: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 +10019880: 4620 mov r0, r4 +10019882: f043 0301 orr.w r3, r3, #1 +10019886: f884 3085 strb.w r3, [r4, #133] ; 0x85 +1001988a: 47b0 blx r6 +1001988c: 6f21 ldr r1, [r4, #112] ; 0x70 +1001988e: 2900 cmp r1, #0 +10019890: d1c1 bne.n 10019816 <_SsiWriteInterruptRtl8195a+0x4a> +10019892: 4620 mov r0, r4 +10019894: f7ff ff8e bl 100197b4 +10019898: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 +1001989c: 4620 mov r0, r4 +1001989e: f023 0302 bic.w r3, r3, #2 +100198a2: f884 3085 strb.w r3, [r4, #133] ; 0x85 +100198a6: 4b0c ldr r3, [pc, #48] ; (100198d8 <_SsiWriteInterruptRtl8195a+0x10c>) +100198a8: 4798 blx r3 +100198aa: 6d63 ldr r3, [r4, #84] ; 0x54 +100198ac: 2b00 cmp r3, #0 +100198ae: d0b2 beq.n 10019816 <_SsiWriteInterruptRtl8195a+0x4a> +100198b0: 6ce3 ldr r3, [r4, #76] ; 0x4c +100198b2: 2b00 cmp r3, #0 +100198b4: d0af beq.n 10019816 <_SsiWriteInterruptRtl8195a+0x4a> +100198b6: 6d20 ldr r0, [r4, #80] ; 0x50 +100198b8: e7ac b.n 10019814 <_SsiWriteInterruptRtl8195a+0x48> +100198ba: b123 cbz r3, 100198c6 <_SsiWriteInterruptRtl8195a+0xfa> +100198bc: 781b ldrb r3, [r3, #0] +100198be: 7013 strb r3, [r2, #0] +100198c0: 6d63 ldr r3, [r4, #84] ; 0x54 +100198c2: 3301 adds r3, #1 +100198c4: e7cd b.n 10019862 <_SsiWriteInterruptRtl8195a+0x96> +100198c6: f894 108a ldrb.w r1, [r4, #138] ; 0x8a +100198ca: 2901 cmp r1, #1 +100198cc: bf08 it eq +100198ce: 7013 strbeq r3, [r2, #0] +100198d0: e7ce b.n 10019870 <_SsiWriteInterruptRtl8195a+0xa4> +100198d2: bf00 nop +100198d4: 00008b91 .word 0x00008b91 +100198d8: 00008521 .word 0x00008521 +100198dc: 40042028 .word 0x40042028 +100198e0: 000f4240 .word 0x000f4240 +100198e4: 00008aa5 .word 0x00008aa5 +100198e8: 40042060 .word 0x40042060 + +100198ec <_SsiReadInterruptRtl8195a>: +100198ec: b537 push {r0, r1, r2, r4, r5, lr} +100198ee: 4b27 ldr r3, [pc, #156] ; (1001998c <_SsiReadInterruptRtl8195a+0xa0>) +100198f0: 4604 mov r4, r0 +100198f2: 4798 blx r3 +100198f4: 9001 str r0, [sp, #4] +100198f6: 9b01 ldr r3, [sp, #4] +100198f8: b313 cbz r3, 10019940 <_SsiReadInterruptRtl8195a+0x54> +100198fa: f894 5084 ldrb.w r5, [r4, #132] ; 0x84 +100198fe: 4620 mov r0, r4 +10019900: 4b23 ldr r3, [pc, #140] ; (10019990 <_SsiReadInterruptRtl8195a+0xa4>) +10019902: 4798 blx r3 +10019904: 4a23 ldr r2, [pc, #140] ; (10019994 <_SsiReadInterruptRtl8195a+0xa8>) +10019906: 02ad lsls r5, r5, #10 +10019908: 442a add r2, r5 +1001990a: b1a8 cbz r0, 10019938 <_SsiReadInterruptRtl8195a+0x4c> +1001990c: 6ca3 ldr r3, [r4, #72] ; 0x48 +1001990e: 2b00 cmp r3, #0 +10019910: d032 beq.n 10019978 <_SsiReadInterruptRtl8195a+0x8c> +10019912: f894 1082 ldrb.w r1, [r4, #130] ; 0x82 +10019916: 2907 cmp r1, #7 +10019918: 6811 ldr r1, [r2, #0] +1001991a: bfdb ittet le +1001991c: 7019 strble r1, [r3, #0] +1001991e: 6ca3 ldrle r3, [r4, #72] ; 0x48 +10019920: f823 1b02 strhgt.w r1, [r3], #2 +10019924: 3301 addle r3, #1 +10019926: 64a3 str r3, [r4, #72] ; 0x48 +10019928: 6e63 ldr r3, [r4, #100] ; 0x64 +1001992a: b10b cbz r3, 10019930 <_SsiReadInterruptRtl8195a+0x44> +1001992c: 3b01 subs r3, #1 +1001992e: 6663 str r3, [r4, #100] ; 0x64 +10019930: 6e63 ldr r3, [r4, #100] ; 0x64 +10019932: 3801 subs r0, #1 +10019934: 2b00 cmp r3, #0 +10019936: d1e8 bne.n 1001990a <_SsiReadInterruptRtl8195a+0x1e> +10019938: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 +1001993c: 07db lsls r3, r3, #31 +1001993e: d41d bmi.n 1001997c <_SsiReadInterruptRtl8195a+0x90> +10019940: 6e62 ldr r2, [r4, #100] ; 0x64 +10019942: b142 cbz r2, 10019956 <_SsiReadInterruptRtl8195a+0x6a> +10019944: 6ee3 ldr r3, [r4, #108] ; 0x6c +10019946: 3301 adds r3, #1 +10019948: 429a cmp r2, r3 +1001994a: d204 bcs.n 10019956 <_SsiReadInterruptRtl8195a+0x6a> +1001994c: 2300 movs r3, #0 +1001994e: 4620 mov r0, r4 +10019950: 66e3 str r3, [r4, #108] ; 0x6c +10019952: 4b11 ldr r3, [pc, #68] ; (10019998 <_SsiReadInterruptRtl8195a+0xac>) +10019954: 4798 blx r3 +10019956: 6e63 ldr r3, [r4, #100] ; 0x64 +10019958: b963 cbnz r3, 10019974 <_SsiReadInterruptRtl8195a+0x88> +1001995a: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 +1001995e: 4620 mov r0, r4 +10019960: f023 031c bic.w r3, r3, #28 +10019964: f884 3085 strb.w r3, [r4, #133] ; 0x85 +10019968: 4b0c ldr r3, [pc, #48] ; (1001999c <_SsiReadInterruptRtl8195a+0xb0>) +1001996a: 4798 blx r3 +1001996c: 6c23 ldr r3, [r4, #64] ; 0x40 +1001996e: b10b cbz r3, 10019974 <_SsiReadInterruptRtl8195a+0x88> +10019970: 6c60 ldr r0, [r4, #68] ; 0x44 +10019972: 4798 blx r3 +10019974: b003 add sp, #12 +10019976: bd30 pop {r4, r5, pc} +10019978: 6813 ldr r3, [r2, #0] +1001997a: e7d5 b.n 10019928 <_SsiReadInterruptRtl8195a+0x3c> +1001997c: 6f23 ldr r3, [r4, #112] ; 0x70 +1001997e: 2b00 cmp r3, #0 +10019980: d0de beq.n 10019940 <_SsiReadInterruptRtl8195a+0x54> +10019982: 4620 mov r0, r4 +10019984: f7ff ff22 bl 100197cc <_SsiWriteInterruptRtl8195a> +10019988: e7da b.n 10019940 <_SsiReadInterruptRtl8195a+0x54> +1001998a: bf00 nop +1001998c: 00008c09 .word 0x00008c09 +10019990: 00008a2d .word 0x00008a2d +10019994: 40042060 .word 0x40042060 +10019998: 000088c9 .word 0x000088c9 +1001999c: 00008521 .word 0x00008521 + +100199a0 <_SsiIrqHandleRtl8195a>: +100199a0: b570 push {r4, r5, r6, lr} +100199a2: 4b24 ldr r3, [pc, #144] ; (10019a34 <_SsiIrqHandleRtl8195a+0x94>) +100199a4: 4606 mov r6, r0 +100199a6: 4798 blx r3 +100199a8: 0783 lsls r3, r0, #30 +100199aa: 4605 mov r5, r0 +100199ac: f896 4084 ldrb.w r4, [r6, #132] ; 0x84 +100199b0: d50d bpl.n 100199ce <_SsiIrqHandleRtl8195a+0x2e> +100199b2: 4b21 ldr r3, [pc, #132] ; (10019a38 <_SsiIrqHandleRtl8195a+0x98>) +100199b4: 681b ldr r3, [r3, #0] +100199b6: 0518 lsls r0, r3, #20 +100199b8: d503 bpl.n 100199c2 <_SsiIrqHandleRtl8195a+0x22> +100199ba: 4621 mov r1, r4 +100199bc: 481f ldr r0, [pc, #124] ; (10019a3c <_SsiIrqHandleRtl8195a+0x9c>) +100199be: 4b20 ldr r3, [pc, #128] ; (10019a40 <_SsiIrqHandleRtl8195a+0xa0>) +100199c0: 4798 blx r3 +100199c2: f504 1380 add.w r3, r4, #1048576 ; 0x100000 +100199c6: f503 7384 add.w r3, r3, #264 ; 0x108 +100199ca: 029b lsls r3, r3, #10 +100199cc: 6b9b ldr r3, [r3, #56] ; 0x38 +100199ce: 0769 lsls r1, r5, #29 +100199d0: bf41 itttt mi +100199d2: f504 1380 addmi.w r3, r4, #1048576 ; 0x100000 +100199d6: f503 7384 addmi.w r3, r3, #264 ; 0x108 +100199da: 029b lslmi r3, r3, #10 +100199dc: 6c1b ldrmi r3, [r3, #64] ; 0x40 +100199de: 072a lsls r2, r5, #28 +100199e0: d50d bpl.n 100199fe <_SsiIrqHandleRtl8195a+0x5e> +100199e2: 4b15 ldr r3, [pc, #84] ; (10019a38 <_SsiIrqHandleRtl8195a+0x98>) +100199e4: 681b ldr r3, [r3, #0] +100199e6: 051b lsls r3, r3, #20 +100199e8: d503 bpl.n 100199f2 <_SsiIrqHandleRtl8195a+0x52> +100199ea: 4621 mov r1, r4 +100199ec: 4815 ldr r0, [pc, #84] ; (10019a44 <_SsiIrqHandleRtl8195a+0xa4>) +100199ee: 4b14 ldr r3, [pc, #80] ; (10019a40 <_SsiIrqHandleRtl8195a+0xa0>) +100199f0: 4798 blx r3 +100199f2: f504 1380 add.w r3, r4, #1048576 ; 0x100000 +100199f6: f503 7384 add.w r3, r3, #264 ; 0x108 +100199fa: 029b lsls r3, r3, #10 +100199fc: 6bdb ldr r3, [r3, #60] ; 0x3c +100199fe: 06a8 lsls r0, r5, #26 +10019a00: bf41 itttt mi +10019a02: f504 1480 addmi.w r4, r4, #1048576 ; 0x100000 +10019a06: f504 7484 addmi.w r4, r4, #264 ; 0x108 +10019a0a: 02a4 lslmi r4, r4, #10 +10019a0c: 6c63 ldrmi r3, [r4, #68] ; 0x44 +10019a0e: 06e9 lsls r1, r5, #27 +10019a10: d502 bpl.n 10019a18 <_SsiIrqHandleRtl8195a+0x78> +10019a12: 4630 mov r0, r6 +10019a14: f7ff ff6a bl 100198ec <_SsiReadInterruptRtl8195a> +10019a18: 07ea lsls r2, r5, #31 +10019a1a: d405 bmi.n 10019a28 <_SsiIrqHandleRtl8195a+0x88> +10019a1c: f896 3085 ldrb.w r3, [r6, #133] ; 0x85 +10019a20: 07db lsls r3, r3, #31 +10019a22: d504 bpl.n 10019a2e <_SsiIrqHandleRtl8195a+0x8e> +10019a24: 6f33 ldr r3, [r6, #112] ; 0x70 +10019a26: b113 cbz r3, 10019a2e <_SsiIrqHandleRtl8195a+0x8e> +10019a28: 4630 mov r0, r6 +10019a2a: f7ff fecf bl 100197cc <_SsiWriteInterruptRtl8195a> +10019a2e: 2000 movs r0, #0 +10019a30: bd70 pop {r4, r5, r6, pc} +10019a32: bf00 nop +10019a34: 000090d9 .word 0x000090d9 +10019a38: 10000314 .word 0x10000314 +10019a3c: 10040cc1 .word 0x10040cc1 +10019a40: 0000f39d .word 0x0000f39d +10019a44: 10040cfa .word 0x10040cfa + +10019a48 : +10019a48: b570 push {r4, r5, r6, lr} +10019a4a: 6806 ldr r6, [r0, #0] +10019a4c: 6845 ldr r5, [r0, #4] +10019a4e: 4604 mov r4, r0 +10019a50: 69f3 ldr r3, [r6, #28] +10019a52: 4628 mov r0, r5 +10019a54: 4798 blx r3 +10019a56: 6a73 ldr r3, [r6, #36] ; 0x24 +10019a58: 4628 mov r0, r5 +10019a5a: 4798 blx r3 +10019a5c: 6933 ldr r3, [r6, #16] +10019a5e: 4628 mov r0, r5 +10019a60: 4798 blx r3 +10019a62: 2100 movs r1, #0 +10019a64: 4620 mov r0, r4 +10019a66: 6721 str r1, [r4, #112] ; 0x70 +10019a68: f7ff fea4 bl 100197b4 +10019a6c: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 +10019a70: 4620 mov r0, r4 +10019a72: f043 0301 orr.w r3, r3, #1 +10019a76: f884 3085 strb.w r3, [r4, #133] ; 0x85 +10019a7a: 4b04 ldr r3, [pc, #16] ; (10019a8c ) +10019a7c: 4798 blx r3 +10019a7e: 6ce3 ldr r3, [r4, #76] ; 0x4c +10019a80: b11b cbz r3, 10019a8a +10019a82: 6d20 ldr r0, [r4, #80] ; 0x50 +10019a84: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10019a88: 4718 bx r3 +10019a8a: bd70 pop {r4, r5, r6, pc} +10019a8c: 00008521 .word 0x00008521 + +10019a90 : +10019a90: b538 push {r3, r4, r5, lr} +10019a92: 460d mov r5, r1 +10019a94: 4613 mov r3, r2 +10019a96: b942 cbnz r2, 10019aaa +10019a98: 4b0e ldr r3, [pc, #56] ; (10019ad4 ) +10019a9a: 681b ldr r3, [r3, #0] +10019a9c: 051b lsls r3, r3, #20 +10019a9e: d502 bpl.n 10019aa6 +10019aa0: 480d ldr r0, [pc, #52] ; (10019ad8 ) +10019aa2: 4b0e ldr r3, [pc, #56] ; (10019adc ) +10019aa4: 4798 blx r3 +10019aa6: 2003 movs r0, #3 +10019aa8: bd38 pop {r3, r4, r5, pc} +10019aaa: f890 2082 ldrb.w r2, [r0, #130] ; 0x82 +10019aae: 6f41 ldr r1, [r0, #116] ; 0x74 +10019ab0: 2a07 cmp r2, #7 +10019ab2: bfc8 it gt +10019ab4: 085b lsrgt r3, r3, #1 +10019ab6: 6703 str r3, [r0, #112] ; 0x70 +10019ab8: f7ff fe7c bl 100197b4 +10019abc: f890 3085 ldrb.w r3, [r0, #133] ; 0x85 +10019ac0: 6545 str r5, [r0, #84] ; 0x54 +10019ac2: f043 0303 orr.w r3, r3, #3 +10019ac6: f880 3085 strb.w r3, [r0, #133] ; 0x85 +10019aca: 4b05 ldr r3, [pc, #20] ; (10019ae0 ) +10019acc: 4798 blx r3 +10019ace: 2000 movs r0, #0 +10019ad0: bd38 pop {r3, r4, r5, pc} +10019ad2: bf00 nop +10019ad4: 10000314 .word 0x10000314 +10019ad8: 10040b9e .word 0x10040b9e +10019adc: 0000f39d .word 0x0000f39d +10019ae0: 00008521 .word 0x00008521 + +10019ae4 : +10019ae4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10019ae8: 4605 mov r5, r0 +10019aea: 2800 cmp r0, #0 +10019aec: d05d beq.n 10019baa +10019aee: 6844 ldr r4, [r0, #4] +10019af0: b944 cbnz r4, 10019b04 +10019af2: 4b39 ldr r3, [pc, #228] ; (10019bd8 ) +10019af4: 681b ldr r3, [r3, #0] +10019af6: 051b lsls r3, r3, #20 +10019af8: d557 bpl.n 10019baa +10019afa: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +10019afe: 4837 ldr r0, [pc, #220] ; (10019bdc ) +10019b00: 4b37 ldr r3, [pc, #220] ; (10019be0 ) +10019b02: 4718 bx r3 +10019b04: f890 6084 ldrb.w r6, [r0, #132] ; 0x84 +10019b08: 4b36 ldr r3, [pc, #216] ; (10019be4 ) +10019b0a: 2268 movs r2, #104 ; 0x68 +10019b0c: 2100 movs r1, #0 +10019b0e: 4620 mov r0, r4 +10019b10: 4798 blx r3 +10019b12: f895 3083 ldrb.w r3, [r5, #131] ; 0x83 +10019b16: f043 0302 orr.w r3, r3, #2 +10019b1a: f885 3083 strb.w r3, [r5, #131] ; 0x83 +10019b1e: f895 3082 ldrb.w r3, [r5, #130] ; 0x82 +10019b22: 2b07 cmp r3, #7 +10019b24: bfcc ite gt +10019b26: 2330 movgt r3, #48 ; 0x30 +10019b28: 2338 movle r3, #56 ; 0x38 +10019b2a: 2e01 cmp r6, #1 +10019b2c: 65eb str r3, [r5, #92] ; 0x5c +10019b2e: d004 beq.n 10019b3a +10019b30: d348 bcc.n 10019bc4 +10019b32: 2e02 cmp r6, #2 +10019b34: d03b beq.n 10019bae +10019b36: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10019b3a: 46b6 mov lr, r6 +10019b3c: 221b movs r2, #27 +10019b3e: f240 2702 movw r7, #514 ; 0x202 +10019b42: f04f 0806 mov.w r8, #6 +10019b46: f8df c0a4 ldr.w ip, [pc, #164] ; 10019bec +10019b4a: 2101 movs r1, #1 +10019b4c: f894 303d ldrb.w r3, [r4, #61] ; 0x3d +10019b50: f884 6062 strb.w r6, [r4, #98] ; 0x62 +10019b54: f043 0302 orr.w r3, r3, #2 +10019b58: 2611 movs r6, #17 +10019b5a: f884 303d strb.w r3, [r4, #61] ; 0x3d +10019b5e: 2300 movs r3, #0 +10019b60: 60e1 str r1, [r4, #12] +10019b62: 64e1 str r1, [r4, #76] ; 0x4c +10019b64: 6221 str r1, [r4, #32] +10019b66: 2102 movs r1, #2 +10019b68: f894 0028 ldrb.w r0, [r4, #40] ; 0x28 +10019b6c: f884 6064 strb.w r6, [r4, #100] ; 0x64 +10019b70: f894 6063 ldrb.w r6, [r4, #99] ; 0x63 +10019b74: 64a3 str r3, [r4, #72] ; 0x48 +10019b76: 6263 str r3, [r4, #36] ; 0x24 +10019b78: 6123 str r3, [r4, #16] +10019b7a: 61e3 str r3, [r4, #28] +10019b7c: 4b1a ldr r3, [pc, #104] ; (10019be8 ) +10019b7e: f046 0603 orr.w r6, r6, #3 +10019b82: f040 0021 orr.w r0, r0, #33 ; 0x21 +10019b86: f884 803b strb.w r8, [r4, #59] ; 0x3b +10019b8a: f8c4 c004 str.w ip, [r4, #4] +10019b8e: f884 e061 strb.w lr, [r4, #97] ; 0x61 +10019b92: 60a7 str r7, [r4, #8] +10019b94: f884 6063 strb.w r6, [r4, #99] ; 0x63 +10019b98: f884 0028 strb.w r0, [r4, #40] ; 0x28 +10019b9c: 6161 str r1, [r4, #20] +10019b9e: 61a1 str r1, [r4, #24] +10019ba0: 622b str r3, [r5, #32] +10019ba2: 230a movs r3, #10 +10019ba4: 62ad str r5, [r5, #40] ; 0x28 +10019ba6: 626a str r2, [r5, #36] ; 0x24 +10019ba8: 62eb str r3, [r5, #44] ; 0x2c +10019baa: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10019bae: 2217 movs r2, #23 +10019bb0: f640 0708 movw r7, #2056 ; 0x808 +10019bb4: f04f 080f mov.w r8, #15 +10019bb8: f04f 0e03 mov.w lr, #3 +10019bbc: 2600 movs r6, #0 +10019bbe: f8df c030 ldr.w ip, [pc, #48] ; 10019bf0 +10019bc2: e7c2 b.n 10019b4a +10019bc4: 2215 movs r2, #21 +10019bc6: f240 2702 movw r7, #514 ; 0x202 +10019bca: f04f 0804 mov.w r8, #4 +10019bce: f04f 0e01 mov.w lr, #1 +10019bd2: f8df c020 ldr.w ip, [pc, #32] ; 10019bf4 +10019bd6: e7b8 b.n 10019b4a +10019bd8: 10000314 .word 0x10000314 +10019bdc: 10040c81 .word 0x10040c81 +10019be0: 0000f39d .word 0x0000f39d +10019be4: 0000f511 .word 0x0000f511 +10019be8: 10019a49 .word 0x10019a49 +10019bec: 40042460 .word 0x40042460 +10019bf0: 40042860 .word 0x40042860 +10019bf4: 40042060 .word 0x40042060 + +10019bf8 : +10019bf8: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10019bfc: f890 5084 ldrb.w r5, [r0, #132] ; 0x84 +10019c00: 4604 mov r4, r0 +10019c02: 2d02 cmp r5, #2 +10019c04: bf08 it eq +10019c06: 2600 moveq r6, #0 +10019c08: f8d0 9004 ldr.w r9, [r0, #4] +10019c0c: f8d0 8008 ldr.w r8, [r0, #8] +10019c10: bf1c itt ne +10019c12: f899 703b ldrbne.w r7, [r9, #59] ; 0x3b +10019c16: f898 603a ldrbne.w r6, [r8, #58] ; 0x3a +10019c1a: 4b3c ldr r3, [pc, #240] ; (10019d0c ) +10019c1c: bf1a itte ne +10019c1e: 3710 addne r7, #16 +10019c20: 3610 addne r6, #16 +10019c22: 4637 moveq r7, r6 +10019c24: 4798 blx r3 +10019c26: f894 2083 ldrb.w r2, [r4, #131] ; 0x83 +10019c2a: 4b39 ldr r3, [pc, #228] ; (10019d10 ) +10019c2c: 0791 lsls r1, r2, #30 +10019c2e: 681b ldr r3, [r3, #0] +10019c30: d527 bpl.n 10019c82 +10019c32: f899 0062 ldrb.w r0, [r9, #98] ; 0x62 +10019c36: 4937 ldr r1, [pc, #220] ; (10019d14 ) +10019c38: 4a37 ldr r2, [pc, #220] ; (10019d18 ) +10019c3a: 2800 cmp r0, #0 +10019c3c: d148 bne.n 10019cd0 +10019c3e: 6808 ldr r0, [r1, #0] +10019c40: f440 3080 orr.w r0, r0, #65536 ; 0x10000 +10019c44: 6008 str r0, [r1, #0] +10019c46: 6811 ldr r1, [r2, #0] +10019c48: f441 5100 orr.w r1, r1, #8192 ; 0x2000 +10019c4c: 6011 str r1, [r2, #0] +10019c4e: b127 cbz r7, 10019c5a +10019c50: 2201 movs r2, #1 +10019c52: fa02 f707 lsl.w r7, r2, r7 +10019c56: ea23 0307 bic.w r3, r3, r7 +10019c5a: 6de2 ldr r2, [r4, #92] ; 0x5c +10019c5c: f002 013f and.w r1, r2, #63 ; 0x3f +10019c60: f505 1280 add.w r2, r5, #1048576 ; 0x100000 +10019c64: f502 7284 add.w r2, r2, #264 ; 0x108 +10019c68: 0292 lsls r2, r2, #10 +10019c6a: 6511 str r1, [r2, #80] ; 0x50 +10019c6c: f894 2084 ldrb.w r2, [r4, #132] ; 0x84 +10019c70: f502 1280 add.w r2, r2, #1048576 ; 0x100000 +10019c74: f502 7284 add.w r2, r2, #264 ; 0x108 +10019c78: 0292 lsls r2, r2, #10 +10019c7a: 6cd1 ldr r1, [r2, #76] ; 0x4c +10019c7c: f041 0102 orr.w r1, r1, #2 +10019c80: 64d1 str r1, [r2, #76] ; 0x4c +10019c82: f894 2083 ldrb.w r2, [r4, #131] ; 0x83 +10019c86: 07d2 lsls r2, r2, #31 +10019c88: d51b bpl.n 10019cc2 +10019c8a: f898 0062 ldrb.w r0, [r8, #98] ; 0x62 +10019c8e: 4921 ldr r1, [pc, #132] ; (10019d14 ) +10019c90: 4a21 ldr r2, [pc, #132] ; (10019d18 ) +10019c92: bb60 cbnz r0, 10019cee +10019c94: 6808 ldr r0, [r1, #0] +10019c96: f440 3080 orr.w r0, r0, #65536 ; 0x10000 +10019c9a: 6008 str r0, [r1, #0] +10019c9c: 6811 ldr r1, [r2, #0] +10019c9e: f441 5100 orr.w r1, r1, #8192 ; 0x2000 +10019ca2: 6011 str r1, [r2, #0] +10019ca4: b126 cbz r6, 10019cb0 +10019ca6: 2201 movs r2, #1 +10019ca8: fa02 f606 lsl.w r6, r2, r6 +10019cac: ea23 0306 bic.w r3, r3, r6 +10019cb0: 6da2 ldr r2, [r4, #88] ; 0x58 +10019cb2: f505 1580 add.w r5, r5, #1048576 ; 0x100000 +10019cb6: f505 7584 add.w r5, r5, #264 ; 0x108 +10019cba: f002 023f and.w r2, r2, #63 ; 0x3f +10019cbe: 02ad lsls r5, r5, #10 +10019cc0: 656a str r2, [r5, #84] ; 0x54 +10019cc2: 4a13 ldr r2, [pc, #76] ; (10019d10 ) +10019cc4: 4620 mov r0, r4 +10019cc6: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10019cca: 6013 str r3, [r2, #0] +10019ccc: 4b13 ldr r3, [pc, #76] ; (10019d1c ) +10019cce: 4718 bx r3 +10019cd0: 6808 ldr r0, [r1, #0] +10019cd2: f440 2080 orr.w r0, r0, #262144 ; 0x40000 +10019cd6: 6008 str r0, [r1, #0] +10019cd8: 6811 ldr r1, [r2, #0] +10019cda: f441 4180 orr.w r1, r1, #16384 ; 0x4000 +10019cde: 6011 str r1, [r2, #0] +10019ce0: 2f00 cmp r7, #0 +10019ce2: d0ba beq.n 10019c5a +10019ce4: 2201 movs r2, #1 +10019ce6: fa02 f707 lsl.w r7, r2, r7 +10019cea: 433b orrs r3, r7 +10019cec: e7b5 b.n 10019c5a +10019cee: 6808 ldr r0, [r1, #0] +10019cf0: f440 2080 orr.w r0, r0, #262144 ; 0x40000 +10019cf4: 6008 str r0, [r1, #0] +10019cf6: 6811 ldr r1, [r2, #0] +10019cf8: f441 4180 orr.w r1, r1, #16384 ; 0x4000 +10019cfc: 6011 str r1, [r2, #0] +10019cfe: 2e00 cmp r6, #0 +10019d00: d0d6 beq.n 10019cb0 +10019d02: 2201 movs r2, #1 +10019d04: fa02 f606 lsl.w r6, r2, r6 +10019d08: 4333 orrs r3, r6 +10019d0a: e7d1 b.n 10019cb0 +10019d0c: 00007ef9 .word 0x00007ef9 +10019d10: 40000304 .word 0x40000304 +10019d14: 40000230 .word 0x40000230 +10019d18: 40000210 .word 0x40000210 +10019d1c: 00007e45 .word 0x00007e45 + +10019d20 : +10019d20: b538 push {r3, r4, r5, lr} +10019d22: 4614 mov r4, r2 +10019d24: 460d mov r5, r1 +10019d26: b101 cbz r1, 10019d2a +10019d28: b95a cbnz r2, 10019d42 +10019d2a: 4b1e ldr r3, [pc, #120] ; (10019da4 ) +10019d2c: 681b ldr r3, [r3, #0] +10019d2e: 051a lsls r2, r3, #20 +10019d30: d401 bmi.n 10019d36 +10019d32: 2003 movs r0, #3 +10019d34: bd38 pop {r3, r4, r5, pc} +10019d36: 4622 mov r2, r4 +10019d38: 4629 mov r1, r5 +10019d3a: 481b ldr r0, [pc, #108] ; (10019da8 ) +10019d3c: 4b1b ldr r3, [pc, #108] ; (10019dac ) +10019d3e: 4798 blx r3 +10019d40: e7f7 b.n 10019d32 +10019d42: 6843 ldr r3, [r0, #4] +10019d44: 6702 str r2, [r0, #112] ; 0x70 +10019d46: 6541 str r1, [r0, #84] ; 0x54 +10019d48: f890 0082 ldrb.w r0, [r0, #130] ; 0x82 +10019d4c: 4315 orrs r5, r2 +10019d4e: 2807 cmp r0, #7 +10019d50: dd13 ble.n 10019d7a +10019d52: f015 0003 ands.w r0, r5, #3 +10019d56: d107 bne.n 10019d68 +10019d58: 2201 movs r2, #1 +10019d5a: 40d4 lsrs r4, r2 +10019d5c: 625a str r2, [r3, #36] ; 0x24 +10019d5e: 615a str r2, [r3, #20] +10019d60: 621a str r2, [r3, #32] +10019d62: 611a str r2, [r3, #16] +10019d64: 855c strh r4, [r3, #42] ; 0x2a +10019d66: bd38 pop {r3, r4, r5, pc} +10019d68: f015 0001 ands.w r0, r5, #1 +10019d6c: d0f4 beq.n 10019d58 +10019d6e: 4b0d ldr r3, [pc, #52] ; (10019da4 ) +10019d70: 681b ldr r3, [r3, #0] +10019d72: 051b lsls r3, r3, #20 +10019d74: d5dd bpl.n 10019d32 +10019d76: 480e ldr r0, [pc, #56] ; (10019db0 ) +10019d78: e7e0 b.n 10019d3c +10019d7a: f015 0503 ands.w r5, r5, #3 +10019d7e: bf17 itett ne +10019d80: 2201 movne r2, #1 +10019d82: 2202 moveq r2, #2 +10019d84: 625a strne r2, [r3, #36] ; 0x24 +10019d86: 2200 movne r2, #0 +10019d88: bf06 itte eq +10019d8a: 40d4 lsreq r4, r2 +10019d8c: 615a streq r2, [r3, #20] +10019d8e: 615a strne r2, [r3, #20] +10019d90: f04f 0000 mov.w r0, #0 +10019d94: f04f 0201 mov.w r2, #1 +10019d98: bf08 it eq +10019d9a: 625d streq r5, [r3, #36] ; 0x24 +10019d9c: 855c strh r4, [r3, #42] ; 0x2a +10019d9e: 621a str r2, [r3, #32] +10019da0: 6118 str r0, [r3, #16] +10019da2: bd38 pop {r3, r4, r5, pc} +10019da4: 10000314 .word 0x10000314 +10019da8: 10040ae2 .word 0x10040ae2 +10019dac: 0000f39d .word 0x0000f39d +10019db0: 10040b22 .word 0x10040b22 + +10019db4 : +10019db4: f640 73fc movw r3, #4092 ; 0xffc +10019db8: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10019dbc: fbb2 f6f3 udiv r6, r2, r3 +10019dc0: fb03 2316 mls r3, r3, r6, r2 +10019dc4: b103 cbz r3, 10019dc8 +10019dc6: 3601 adds r6, #1 +10019dc8: 2e10 cmp r6, #16 +10019dca: d908 bls.n 10019dde +10019dcc: 4b2b ldr r3, [pc, #172] ; (10019e7c ) +10019dce: 681b ldr r3, [r3, #0] +10019dd0: 051b lsls r3, r3, #20 +10019dd2: d502 bpl.n 10019dda +10019dd4: 482a ldr r0, [pc, #168] ; (10019e80 ) +10019dd6: 4b2b ldr r3, [pc, #172] ; (10019e84 ) +10019dd8: 4798 blx r3 +10019dda: 2003 movs r0, #3 +10019ddc: e028 b.n 10019e30 +10019dde: f640 77fc movw r7, #4092 ; 0xffc +10019de2: 6844 ldr r4, [r0, #4] +10019de4: f04f 0a18 mov.w sl, #24 +10019de8: 6965 ldr r5, [r4, #20] +10019dea: f894 3063 ldrb.w r3, [r4, #99] ; 0x63 +10019dee: fa07 fe05 lsl.w lr, r7, r5 +10019df2: 2500 movs r5, #0 +10019df4: 46a8 mov r8, r5 +10019df6: f003 030b and.w r3, r3, #11 +10019dfa: f043 0314 orr.w r3, r3, #20 +10019dfe: f884 3063 strb.w r3, [r4, #99] ; 0x63 +10019e02: f894 3028 ldrb.w r3, [r4, #40] ; 0x28 +10019e06: 64e6 str r6, [r4, #76] ; 0x4c +10019e08: f043 0310 orr.w r3, r3, #16 +10019e0c: f884 3028 strb.w r3, [r4, #40] ; 0x28 +10019e10: f100 0c94 add.w ip, r0, #148 ; 0x94 +10019e14: f500 7307 add.w r3, r0, #540 ; 0x21c +10019e18: f106 3bff add.w fp, r6, #4294967295 +10019e1c: 9701 str r7, [sp, #4] +10019e1e: 42ae cmp r6, r5 +10019e20: d109 bne.n 10019e36 +10019e22: f500 7325 add.w r3, r0, #660 ; 0x294 +10019e26: f500 7005 add.w r0, r0, #532 ; 0x214 +10019e2a: 6520 str r0, [r4, #80] ; 0x50 +10019e2c: 2000 movs r0, #0 +10019e2e: 6563 str r3, [r4, #84] ; 0x54 +10019e30: b003 add sp, #12 +10019e32: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10019e36: fb0a 0905 mla r9, sl, r5, r0 +10019e3a: 6867 ldr r7, [r4, #4] +10019e3c: 455d cmp r5, fp +10019e3e: f8c9 1094 str.w r1, [r9, #148] ; 0x94 +10019e42: f8c9 7098 str.w r7, [r9, #152] ; 0x98 +10019e46: f843 cc08 str.w ip, [r3, #-8] +10019e4a: d10e bne.n 10019e6a +10019e4c: 9f01 ldr r7, [sp, #4] +10019e4e: f843 8c04 str.w r8, [r3, #-4] +10019e52: fb07 2915 mls r9, r7, r5, r2 +10019e56: f8c3 807c str.w r8, [r3, #124] ; 0x7c +10019e5a: f8c3 9078 str.w r9, [r3, #120] ; 0x78 +10019e5e: 3501 adds r5, #1 +10019e60: 3308 adds r3, #8 +10019e62: 4471 add r1, lr +10019e64: f10c 0c18 add.w ip, ip, #24 +10019e68: e7d9 b.n 10019e1e +10019e6a: 9f01 ldr r7, [sp, #4] +10019e6c: f103 0980 add.w r9, r3, #128 ; 0x80 +10019e70: f843 3c04 str.w r3, [r3, #-4] +10019e74: 679f str r7, [r3, #120] ; 0x78 +10019e76: f8c3 907c str.w r9, [r3, #124] ; 0x7c +10019e7a: e7f0 b.n 10019e5e +10019e7c: 10000314 .word 0x10000314 +10019e80: 10040a9e .word 0x10040a9e +10019e84: 0000f39d .word 0x0000f39d + +10019e88 : +10019e88: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10019e8c: 2400 movs r4, #0 +10019e8e: 2701 movs r7, #1 +10019e90: 4b0e ldr r3, [pc, #56] ; (10019ecc ) +10019e92: 4d0f ldr r5, [pc, #60] ; (10019ed0 ) +10019e94: 681e ldr r6, [r3, #0] +10019e96: f8df 803c ldr.w r8, [pc, #60] ; 10019ed4 +10019e9a: f8df 903c ldr.w r9, [pc, #60] ; 10019ed8 +10019e9e: 1ca3 adds r3, r4, #2 +10019ea0: fa07 f303 lsl.w r3, r7, r3 +10019ea4: 4233 tst r3, r6 +10019ea6: d009 beq.n 10019ebc +10019ea8: 682b ldr r3, [r5, #0] +10019eaa: 07db lsls r3, r3, #31 +10019eac: d506 bpl.n 10019ebc +10019eae: f858 3024 ldr.w r3, [r8, r4, lsl #2] +10019eb2: b113 cbz r3, 10019eba +10019eb4: f859 0024 ldr.w r0, [r9, r4, lsl #2] +10019eb8: 4798 blx r3 +10019eba: 686b ldr r3, [r5, #4] +10019ebc: 3401 adds r4, #1 +10019ebe: 2c06 cmp r4, #6 +10019ec0: f105 0514 add.w r5, r5, #20 +10019ec4: d1eb bne.n 10019e9e +10019ec6: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +10019eca: bf00 nop +10019ecc: 400020a0 .word 0x400020a0 +10019ed0: 40002030 .word 0x40002030 +10019ed4: 10000358 .word 0x10000358 +10019ed8: 1004b8e0 .word 0x1004b8e0 + +10019edc : +10019edc: b51f push {r0, r1, r2, r3, r4, lr} +10019ede: 7f02 ldrb r2, [r0, #28] +10019ee0: 2a07 cmp r2, #7 +10019ee2: d909 bls.n 10019ef8 +10019ee4: 4b13 ldr r3, [pc, #76] ; (10019f34 ) +10019ee6: 681b ldr r3, [r3, #0] +10019ee8: 071b lsls r3, r3, #28 +10019eea: d503 bpl.n 10019ef4 +10019eec: 4912 ldr r1, [pc, #72] ; (10019f38 ) +10019eee: 4813 ldr r0, [pc, #76] ; (10019f3c ) +10019ef0: 4b13 ldr r3, [pc, #76] ; (10019f40 ) +10019ef2: 4798 blx r3 +10019ef4: 2003 movs r0, #3 +10019ef6: e013 b.n 10019f20 +10019ef8: 2a01 cmp r2, #1 +10019efa: 68c3 ldr r3, [r0, #12] +10019efc: d913 bls.n 10019f26 +10019efe: 2105 movs r1, #5 +10019f00: 9101 str r1, [sp, #4] +10019f02: 4910 ldr r1, [pc, #64] ; (10019f44 ) +10019f04: 3a02 subs r2, #2 +10019f06: 9100 str r1, [sp, #0] +10019f08: 490f ldr r1, [pc, #60] ; (10019f48 ) +10019f0a: f841 3022 str.w r3, [r1, r2, lsl #2] +10019f0e: 6941 ldr r1, [r0, #20] +10019f10: 4b0e ldr r3, [pc, #56] ; (10019f4c ) +10019f12: f843 1022 str.w r1, [r3, r2, lsl #2] +10019f16: 9002 str r0, [sp, #8] +10019f18: 4b0d ldr r3, [pc, #52] ; (10019f50 ) +10019f1a: 4668 mov r0, sp +10019f1c: 4798 blx r3 +10019f1e: 2000 movs r0, #0 +10019f20: b005 add sp, #20 +10019f22: f85d fb04 ldr.w pc, [sp], #4 +10019f26: 2a00 cmp r2, #0 +10019f28: bf14 ite ne +10019f2a: 2203 movne r2, #3 +10019f2c: 2202 moveq r2, #2 +10019f2e: 9300 str r3, [sp, #0] +10019f30: 9201 str r2, [sp, #4] +10019f32: e7f0 b.n 10019f16 +10019f34: 10000314 .word 0x10000314 +10019f38: 10040e09 .word 0x10040e09 +10019f3c: 10040db7 .word 0x10040db7 +10019f40: 0000f39d .word 0x0000f39d +10019f44: 10019e89 .word 0x10019e89 +10019f48: 10000358 .word 0x10000358 +10019f4c: 1004b8e0 .word 0x1004b8e0 +10019f50: 00004029 .word 0x00004029 + +10019f54 : +10019f54: b538 push {r3, r4, r5, lr} +10019f56: 7f03 ldrb r3, [r0, #28] +10019f58: 2b07 cmp r3, #7 +10019f5a: d909 bls.n 10019f70 +10019f5c: 4b14 ldr r3, [pc, #80] ; (10019fb0 ) +10019f5e: 681b ldr r3, [r3, #0] +10019f60: 071b lsls r3, r3, #28 +10019f62: d503 bpl.n 10019f6c +10019f64: 4913 ldr r1, [pc, #76] ; (10019fb4 ) +10019f66: 4814 ldr r0, [pc, #80] ; (10019fb8 ) +10019f68: 4b14 ldr r3, [pc, #80] ; (10019fbc ) +10019f6a: 4798 blx r3 +10019f6c: 2003 movs r0, #3 +10019f6e: bd38 pop {r3, r4, r5, pc} +10019f70: 2b01 cmp r3, #1 +10019f72: f100 050c add.w r5, r0, #12 +10019f76: d910 bls.n 10019f9a +10019f78: 2205 movs r2, #5 +10019f7a: 6102 str r2, [r0, #16] +10019f7c: 1e9a subs r2, r3, #2 +10019f7e: 2300 movs r3, #0 +10019f80: 490f ldr r1, [pc, #60] ; (10019fc0 ) +10019f82: f841 3022 str.w r3, [r1, r2, lsl #2] +10019f86: f851 4023 ldr.w r4, [r1, r3, lsl #2] +10019f8a: b974 cbnz r4, 10019faa +10019f8c: 3301 adds r3, #1 +10019f8e: 2b06 cmp r3, #6 +10019f90: d1f9 bne.n 10019f86 +10019f92: 4628 mov r0, r5 +10019f94: 4b0b ldr r3, [pc, #44] ; (10019fc4 ) +10019f96: 4798 blx r3 +10019f98: e004 b.n 10019fa4 +10019f9a: 2b00 cmp r3, #0 +10019f9c: bf14 ite ne +10019f9e: 2303 movne r3, #3 +10019fa0: 2302 moveq r3, #2 +10019fa2: 6103 str r3, [r0, #16] +10019fa4: 4628 mov r0, r5 +10019fa6: 4b08 ldr r3, [pc, #32] ; (10019fc8 ) +10019fa8: 4798 blx r3 +10019faa: 2000 movs r0, #0 +10019fac: bd38 pop {r3, r4, r5, pc} +10019fae: bf00 nop +10019fb0: 10000314 .word 0x10000314 +10019fb4: 10040e46 .word 0x10040e46 +10019fb8: 10040ddf .word 0x10040ddf +10019fbc: 0000f39d .word 0x0000f39d +10019fc0: 10000358 .word 0x10000358 +10019fc4: 0000418d .word 0x0000418d +10019fc8: 00004091 .word 0x00004091 + +10019fcc : +10019fcc: b510 push {r4, lr} +10019fce: 4604 mov r4, r0 +10019fd0: 4b09 ldr r3, [pc, #36] ; (10019ff8 ) +10019fd2: 7f00 ldrb r0, [r0, #28] +10019fd4: 4798 blx r3 +10019fd6: 7f63 ldrb r3, [r4, #29] +10019fd8: b923 cbnz r3, 10019fe4 +10019fda: 68e3 ldr r3, [r4, #12] +10019fdc: b113 cbz r3, 10019fe4 +10019fde: 4620 mov r0, r4 +10019fe0: f7ff ffb8 bl 10019f54 +10019fe4: 2301 movs r3, #1 +10019fe6: 4905 ldr r1, [pc, #20] ; (10019ffc ) +10019fe8: 7f22 ldrb r2, [r4, #28] +10019fea: fa03 f202 lsl.w r2, r3, r2 +10019fee: 680b ldr r3, [r1, #0] +10019ff0: ea23 0302 bic.w r3, r3, r2 +10019ff4: 600b str r3, [r1, #0] +10019ff6: bd10 pop {r4, pc} +10019ff8: 0000f069 .word 0x0000f069 +10019ffc: 1000034c .word 0x1000034c + +1001a000 : +1001a000: 2314 movs r3, #20 +1001a002: 4343 muls r3, r0 +1001a004: 4a03 ldr r2, [pc, #12] ; (1001a014 ) +1001a006: 5899 ldr r1, [r3, r2] +1001a008: 5898 ldr r0, [r3, r2] +1001a00a: 4281 cmp r1, r0 +1001a00c: bf18 it ne +1001a00e: 5898 ldrne r0, [r3, r2] +1001a010: 4770 bx lr +1001a012: bf00 nop +1001a014: 40002004 .word 0x40002004 + +1001a018 : +1001a018: 4b0a ldr r3, [pc, #40] ; (1001a044 ) +1001a01a: b510 push {r4, lr} +1001a01c: fbb1 f4f3 udiv r4, r1, r3 +1001a020: fb03 1314 mls r3, r3, r4, r1 +1001a024: 4908 ldr r1, [pc, #32] ; (1001a048 ) +1001a026: 03db lsls r3, r3, #15 +1001a028: fbb3 f3f1 udiv r3, r3, r1 +1001a02c: 2214 movs r2, #20 +1001a02e: eb13 3304 adds.w r3, r3, r4, lsl #12 +1001a032: bf08 it eq +1001a034: 2301 moveq r3, #1 +1001a036: 4350 muls r0, r2 +1001a038: f100 4080 add.w r0, r0, #1073741824 ; 0x40000000 +1001a03c: f500 5000 add.w r0, r0, #8192 ; 0x2000 +1001a040: 6003 str r3, [r0, #0] +1001a042: bd10 pop {r4, pc} +1001a044: 0001e848 .word 0x0001e848 +1001a048: 000f4240 .word 0x000f4240 + +1001a04c : +1001a04c: b570 push {r4, r5, r6, lr} +1001a04e: 2501 movs r5, #1 +1001a050: 4e28 ldr r6, [pc, #160] ; (1001a0f4 ) +1001a052: 7f02 ldrb r2, [r0, #28] +1001a054: 6833 ldr r3, [r6, #0] +1001a056: fa05 f102 lsl.w r1, r5, r2 +1001a05a: 4219 tst r1, r3 +1001a05c: 4604 mov r4, r0 +1001a05e: d009 beq.n 1001a074 +1001a060: 4b25 ldr r3, [pc, #148] ; (1001a0f8 ) +1001a062: 681b ldr r3, [r3, #0] +1001a064: 0719 lsls r1, r3, #28 +1001a066: d503 bpl.n 1001a070 +1001a068: 4924 ldr r1, [pc, #144] ; (1001a0fc ) +1001a06a: 4825 ldr r0, [pc, #148] ; (1001a100 ) +1001a06c: 4b25 ldr r3, [pc, #148] ; (1001a104 ) +1001a06e: 4798 blx r3 +1001a070: 4628 mov r0, r5 +1001a072: bd70 pop {r4, r5, r6, pc} +1001a074: 6885 ldr r5, [r0, #8] +1001a076: 7f43 ldrb r3, [r0, #29] +1001a078: 0069 lsls r1, r5, #1 +1001a07a: ea41 0183 orr.w r1, r1, r3, lsl #2 +1001a07e: 2314 movs r3, #20 +1001a080: 435a muls r2, r3 +1001a082: 4821 ldr r0, [pc, #132] ; (1001a108 ) +1001a084: 5011 str r1, [r2, r0] +1001a086: 7f20 ldrb r0, [r4, #28] +1001a088: b19d cbz r5, 1001a0b2 +1001a08a: 6821 ldr r1, [r4, #0] +1001a08c: f7ff ffc4 bl 1001a018 +1001a090: 7f63 ldrb r3, [r4, #29] +1001a092: b9db cbnz r3, 1001a0cc +1001a094: 68e3 ldr r3, [r4, #12] +1001a096: b30b cbz r3, 1001a0dc +1001a098: 4620 mov r0, r4 +1001a09a: f7ff ff1f bl 10019edc +1001a09e: 4605 mov r5, r0 +1001a0a0: b180 cbz r0, 1001a0c4 +1001a0a2: 4b15 ldr r3, [pc, #84] ; (1001a0f8 ) +1001a0a4: 681b ldr r3, [r3, #0] +1001a0a6: 071a lsls r2, r3, #28 +1001a0a8: d5e2 bpl.n 1001a070 +1001a0aa: 7f22 ldrb r2, [r4, #28] +1001a0ac: 4913 ldr r1, [pc, #76] ; (1001a0fc ) +1001a0ae: 4817 ldr r0, [pc, #92] ; (1001a10c ) +1001a0b0: e7dc b.n 1001a06c +1001a0b2: 4358 muls r0, r3 +1001a0b4: f04f 33ff mov.w r3, #4294967295 +1001a0b8: f100 4080 add.w r0, r0, #1073741824 ; 0x40000000 +1001a0bc: f500 5000 add.w r0, r0, #8192 ; 0x2000 +1001a0c0: 6003 str r3, [r0, #0] +1001a0c2: e7e5 b.n 1001a090 +1001a0c4: f104 000c add.w r0, r4, #12 +1001a0c8: 4b11 ldr r3, [pc, #68] ; (1001a110 ) +1001a0ca: 4798 blx r3 +1001a0cc: 2301 movs r3, #1 +1001a0ce: 7f22 ldrb r2, [r4, #28] +1001a0d0: 2500 movs r5, #0 +1001a0d2: 4093 lsls r3, r2 +1001a0d4: 6832 ldr r2, [r6, #0] +1001a0d6: 4313 orrs r3, r2 +1001a0d8: 6033 str r3, [r6, #0] +1001a0da: e7c9 b.n 1001a070 +1001a0dc: 4b06 ldr r3, [pc, #24] ; (1001a0f8 ) +1001a0de: 681b ldr r3, [r3, #0] +1001a0e0: 071b lsls r3, r3, #28 +1001a0e2: d504 bpl.n 1001a0ee +1001a0e4: 7f22 ldrb r2, [r4, #28] +1001a0e6: 4905 ldr r1, [pc, #20] ; (1001a0fc ) +1001a0e8: 480a ldr r0, [pc, #40] ; (1001a114 ) +1001a0ea: 4b06 ldr r3, [pc, #24] ; (1001a104 ) +1001a0ec: 4798 blx r3 +1001a0ee: 2503 movs r5, #3 +1001a0f0: e7be b.n 1001a070 +1001a0f2: bf00 nop +1001a0f4: 1000034c .word 0x1000034c +1001a0f8: 10000314 .word 0x10000314 +1001a0fc: 10040e2b .word 0x10040e2b +1001a100: 10040d32 .word 0x10040d32 +1001a104: 0000f39d .word 0x0000f39d +1001a108: 40002008 .word 0x40002008 +1001a10c: 10040d5e .word 0x10040d5e +1001a110: 000040f1 .word 0x000040f1 +1001a114: 10040d89 .word 0x10040d89 + +1001a118 : +1001a118: 2314 movs r3, #20 +1001a11a: 4358 muls r0, r3 +1001a11c: 4a02 ldr r2, [pc, #8] ; (1001a128 ) +1001a11e: 5883 ldr r3, [r0, r2] +1001a120: f023 0304 bic.w r3, r3, #4 +1001a124: 5083 str r3, [r0, r2] +1001a126: 4770 bx lr +1001a128: 40002008 .word 0x40002008 + +1001a12c : +1001a12c: 2314 movs r3, #20 +1001a12e: 4358 muls r0, r3 +1001a130: 4a02 ldr r2, [pc, #8] ; (1001a13c ) +1001a132: 5883 ldr r3, [r0, r2] +1001a134: f043 0301 orr.w r3, r3, #1 +1001a138: 5083 str r3, [r0, r2] +1001a13a: 4770 bx lr +1001a13c: 40002008 .word 0x40002008 + +1001a140 : +1001a140: 2314 movs r3, #20 +1001a142: 4358 muls r0, r3 +1001a144: 4a02 ldr r2, [pc, #8] ; (1001a150 ) +1001a146: 5883 ldr r3, [r0, r2] +1001a148: f023 0301 bic.w r3, r3, #1 +1001a14c: 5083 str r3, [r0, r2] +1001a14e: 4770 bx lr +1001a150: 40002008 .word 0x40002008 + +1001a154 : +1001a154: 4b06 ldr r3, [pc, #24] ; (1001a170 ) +1001a156: f8d3 3280 ldr.w r3, [r3, #640] ; 0x280 + +1001a15a : +1001a15a: 4618 mov r0, r3 +1001a15c: c8f0 ldmia r0!, {r4, r5, r6, r7} +1001a15e: e8b0 0f00 ldmia.w r0!, {r8, r9, sl, fp} +1001a162: f380 8809 msr PSP, r0 +1001a166: f04e 0e0d orr.w lr, lr, #13 +1001a16a: 4770 bx lr +1001a16c: 4770 bx lr +1001a16e: bf00 nop +1001a170: 1004b8f8 .word 0x1004b8f8 + +1001a174 : +1001a174: b530 push {r4, r5, lr} +1001a176: b085 sub sp, #20 +1001a178: ac04 add r4, sp, #16 +1001a17a: e904 000f stmdb r4, {r0, r1, r2, r3} +1001a17e: 2300 movs r3, #0 +1001a180: 4c1d ldr r4, [pc, #116] ; (1001a1f8 ) +1001a182: 9d02 ldr r5, [sp, #8] +1001a184: 6023 str r3, [r4, #0] +1001a186: 4b1d ldr r3, [pc, #116] ; (1001a1fc ) +1001a188: 4798 blx r3 +1001a18a: 9b00 ldr r3, [sp, #0] +1001a18c: 4a1c ldr r2, [pc, #112] ; (1001a200 ) +1001a18e: 015b lsls r3, r3, #5 +1001a190: fbb0 f0f3 udiv r0, r0, r3 +1001a194: f000 0301 and.w r3, r0, #1 +1001a198: eb03 0050 add.w r0, r3, r0, lsr #1 +1001a19c: 2380 movs r3, #128 ; 0x80 +1001a19e: 6013 str r3, [r2, #0] +1001a1a0: 4b18 ldr r3, [pc, #96] ; (1001a204 ) +1001a1a2: b2c1 uxtb r1, r0 +1001a1a4: f3c0 2007 ubfx r0, r0, #8, #8 +1001a1a8: 6019 str r1, [r3, #0] +1001a1aa: 6020 str r0, [r4, #0] +1001a1ac: f89d 100d ldrb.w r1, [sp, #13] +1001a1b0: f89d 300c ldrb.w r3, [sp, #12] +1001a1b4: 430b orrs r3, r1 +1001a1b6: f89d 100e ldrb.w r1, [sp, #14] +1001a1ba: 430b orrs r3, r1 +1001a1bc: 6013 str r3, [r2, #0] +1001a1be: 9a01 ldr r2, [sp, #4] +1001a1c0: 4b11 ldr r3, [pc, #68] ; (1001a208 ) +1001a1c2: 601a str r2, [r3, #0] +1001a1c4: 6025 str r5, [r4, #0] +1001a1c6: b1a5 cbz r5, 1001a1f2 +1001a1c8: f04f 7280 mov.w r2, #16777216 ; 0x1000000 +1001a1cc: f2a3 73fc subw r3, r3, #2044 ; 0x7fc +1001a1d0: 490e ldr r1, [pc, #56] ; (1001a20c ) +1001a1d2: 601a str r2, [r3, #0] +1001a1d4: 68ca ldr r2, [r1, #12] +1001a1d6: 4b0e ldr r3, [pc, #56] ; (1001a210 ) +1001a1d8: f422 62e0 bic.w r2, r2, #1792 ; 0x700 +1001a1dc: 0412 lsls r2, r2, #16 +1001a1de: 0c12 lsrs r2, r2, #16 +1001a1e0: 4313 orrs r3, r2 +1001a1e2: 22e0 movs r2, #224 ; 0xe0 +1001a1e4: 60cb str r3, [r1, #12] +1001a1e6: 4b0b ldr r3, [pc, #44] ; (1001a214 ) +1001a1e8: f883 2313 strb.w r2, [r3, #787] ; 0x313 +1001a1ec: f44f 2200 mov.w r2, #524288 ; 0x80000 +1001a1f0: 601a str r2, [r3, #0] +1001a1f2: 2000 movs r0, #0 +1001a1f4: b005 add sp, #20 +1001a1f6: bd30 pop {r4, r5, pc} +1001a1f8: 40003004 .word 0x40003004 +1001a1fc: 00000355 .word 0x00000355 +1001a200: 4000300c .word 0x4000300c +1001a204: 40003000 .word 0x40003000 +1001a208: 40003008 .word 0x40003008 +1001a20c: e000ed00 .word 0xe000ed00 +1001a210: 05fa0300 .word 0x05fa0300 +1001a214: e000e100 .word 0xe000e100 + +1001a218 : +1001a218: 4b26 ldr r3, [pc, #152] ; (1001a2b4 ) +1001a21a: b500 push {lr} +1001a21c: 681b ldr r3, [r3, #0] +1001a21e: 4b26 ldr r3, [pc, #152] ; (1001a2b8 ) +1001a220: b089 sub sp, #36 ; 0x24 +1001a222: 681a ldr r2, [r3, #0] +1001a224: 2100 movs r1, #0 +1001a226: f422 5280 bic.w r2, r2, #4096 ; 0x1000 +1001a22a: 601a str r2, [r3, #0] +1001a22c: 681a ldr r2, [r3, #0] +1001a22e: 20dc movs r0, #220 ; 0xdc +1001a230: f442 5280 orr.w r2, r2, #4096 ; 0x1000 +1001a234: 601a str r2, [r3, #0] +1001a236: 4a21 ldr r2, [pc, #132] ; (1001a2bc ) +1001a238: 6813 ldr r3, [r2, #0] +1001a23a: f443 5380 orr.w r3, r3, #4096 ; 0x1000 +1001a23e: 6013 str r3, [r2, #0] +1001a240: 2201 movs r2, #1 +1001a242: 4b1f ldr r3, [pc, #124] ; (1001a2c0 ) +1001a244: 4798 blx r3 +1001a246: 2258 movs r2, #88 ; 0x58 +1001a248: 9201 str r2, [sp, #4] +1001a24a: 4a1e ldr r2, [pc, #120] ; (1001a2c4 ) +1001a24c: 2300 movs r3, #0 +1001a24e: 9200 str r2, [sp, #0] +1001a250: f44f 4216 mov.w r2, #38400 ; 0x9600 +1001a254: 9204 str r2, [sp, #16] +1001a256: 2203 movs r2, #3 +1001a258: f88d 201e strb.w r2, [sp, #30] +1001a25c: 22c1 movs r2, #193 ; 0xc1 +1001a25e: f88d 301c strb.w r3, [sp, #28] +1001a262: f88d 301d strb.w r3, [sp, #29] +1001a266: 9306 str r3, [sp, #24] +1001a268: 9302 str r3, [sp, #8] +1001a26a: 9303 str r3, [sp, #12] +1001a26c: 9205 str r2, [sp, #20] +1001a26e: ab08 add r3, sp, #32 +1001a270: e913 000f ldmdb r3, {r0, r1, r2, r3} +1001a274: f7ff ff7e bl 1001a174 +1001a278: 4668 mov r0, sp +1001a27a: 4b13 ldr r3, [pc, #76] ; (1001a2c8 ) +1001a27c: 4798 blx r3 +1001a27e: 2205 movs r2, #5 +1001a280: 4b12 ldr r3, [pc, #72] ; (1001a2cc ) +1001a282: 4913 ldr r1, [pc, #76] ; (1001a2d0 ) +1001a284: 601a str r2, [r3, #0] +1001a286: f04f 7280 mov.w r2, #16777216 ; 0x1000000 +1001a28a: f5a3 63ff sub.w r3, r3, #2040 ; 0x7f8 +1001a28e: 601a str r2, [r3, #0] +1001a290: 68ca ldr r2, [r1, #12] +1001a292: 4b10 ldr r3, [pc, #64] ; (1001a2d4 ) +1001a294: f422 62e0 bic.w r2, r2, #1792 ; 0x700 +1001a298: 0412 lsls r2, r2, #16 +1001a29a: 0c12 lsrs r2, r2, #16 +1001a29c: 4313 orrs r3, r2 +1001a29e: 22e0 movs r2, #224 ; 0xe0 +1001a2a0: 60cb str r3, [r1, #12] +1001a2a2: 4b0d ldr r3, [pc, #52] ; (1001a2d8 ) +1001a2a4: f883 2313 strb.w r2, [r3, #787] ; 0x313 +1001a2a8: f44f 2200 mov.w r2, #524288 ; 0x80000 +1001a2ac: 601a str r2, [r3, #0] +1001a2ae: b009 add sp, #36 ; 0x24 +1001a2b0: f85d fb04 ldr.w pc, [sp], #4 +1001a2b4: 40003000 .word 0x40003000 +1001a2b8: 40000210 .word 0x40000210 +1001a2bc: 40000230 .word 0x40000230 +1001a2c0: 00002b39 .word 0x00002b39 +1001a2c4: 1000635d .word 0x1000635d +1001a2c8: 00004029 .word 0x00004029 +1001a2cc: 40003004 .word 0x40003004 +1001a2d0: e000ed00 .word 0xe000ed00 +1001a2d4: 05fa0300 .word 0x05fa0300 +1001a2d8: e000e100 .word 0xe000e100 + +1001a2dc : +1001a2dc: 4a0b ldr r2, [pc, #44] ; (1001a30c ) +1001a2de: b508 push {r3, lr} +1001a2e0: 6813 ldr r3, [r2, #0] +1001a2e2: 200a movs r0, #10 +1001a2e4: f443 6380 orr.w r3, r3, #1024 ; 0x400 +1001a2e8: 6013 str r3, [r2, #0] +1001a2ea: f8d2 3090 ldr.w r3, [r2, #144] ; 0x90 +1001a2ee: f043 0310 orr.w r3, r3, #16 +1001a2f2: f8c2 3090 str.w r3, [r2, #144] ; 0x90 +1001a2f6: 4b06 ldr r3, [pc, #24] ; (1001a310 ) +1001a2f8: 4798 blx r3 +1001a2fa: 2203 movs r2, #3 +1001a2fc: 4b05 ldr r3, [pc, #20] ; (1001a314 ) +1001a2fe: 601a str r2, [r3, #0] +1001a300: 4a05 ldr r2, [pc, #20] ; (1001a318 ) +1001a302: 6813 ldr r3, [r2, #0] +1001a304: f023 5380 bic.w r3, r3, #268435456 ; 0x10000000 +1001a308: 6013 str r3, [r2, #0] +1001a30a: bd08 pop {r3, pc} +1001a30c: 40000230 .word 0x40000230 +1001a310: 00000899 .word 0x00000899 +1001a314: 40005034 .word 0x40005034 +1001a318: 40005010 .word 0x40005010 + +1001a31c : +1001a31c: b530 push {r4, r5, lr} +1001a31e: 2400 movs r4, #0 +1001a320: 4a43 ldr r2, [pc, #268] ; (1001a430 ) +1001a322: b087 sub sp, #28 +1001a324: 6813 ldr r3, [r2, #0] +1001a326: 2501 movs r5, #1 +1001a328: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 +1001a32c: 6013 str r3, [r2, #0] +1001a32e: 4a41 ldr r2, [pc, #260] ; (1001a434 ) +1001a330: 4668 mov r0, sp +1001a332: 6813 ldr r3, [r2, #0] +1001a334: 2161 movs r1, #97 ; 0x61 +1001a336: f423 6380 bic.w r3, r3, #1024 ; 0x400 +1001a33a: 6013 str r3, [r2, #0] +1001a33c: 4b3e ldr r3, [pc, #248] ; (1001a438 ) +1001a33e: 819c strh r4, [r3, #12] +1001a340: 825c strh r4, [r3, #18] +1001a342: f7fd fdbb bl 10017ebc +1001a346: 4668 mov r0, sp +1001a348: 2101 movs r1, #1 +1001a34a: f7fd fdd2 bl 10017ef2 +1001a34e: 4668 mov r0, sp +1001a350: 2101 movs r1, #1 +1001a352: f7fd fdd7 bl 10017f04 +1001a356: 4668 mov r0, sp +1001a358: 2101 movs r1, #1 +1001a35a: f7fd fddd bl 10017f18 +1001a35e: 4668 mov r0, sp +1001a360: 2162 movs r1, #98 ; 0x62 +1001a362: f7fd fdab bl 10017ebc +1001a366: 4668 mov r0, sp +1001a368: 2102 movs r1, #2 +1001a36a: f7fd fdc2 bl 10017ef2 +1001a36e: 4668 mov r0, sp +1001a370: 2101 movs r1, #1 +1001a372: f7fd fdc7 bl 10017f04 +1001a376: 4621 mov r1, r4 +1001a378: 4668 mov r0, sp +1001a37a: f7fd fdcd bl 10017f18 +1001a37e: 4668 mov r0, sp +1001a380: 2163 movs r1, #99 ; 0x63 +1001a382: f7fd fd9b bl 10017ebc +1001a386: 4668 mov r0, sp +1001a388: 2102 movs r1, #2 +1001a38a: f7fd fdb2 bl 10017ef2 +1001a38e: 4668 mov r0, sp +1001a390: 2101 movs r1, #1 +1001a392: f7fd fdb7 bl 10017f04 +1001a396: 4621 mov r1, r4 +1001a398: 4668 mov r0, sp +1001a39a: f7fd fdbd bl 10017f18 +1001a39e: 4668 mov r0, sp +1001a3a0: 2164 movs r1, #100 ; 0x64 +1001a3a2: f7fd fd8b bl 10017ebc +1001a3a6: 4668 mov r0, sp +1001a3a8: 2102 movs r1, #2 +1001a3aa: f7fd fda2 bl 10017ef2 +1001a3ae: 4668 mov r0, sp +1001a3b0: 2101 movs r1, #1 +1001a3b2: f7fd fda7 bl 10017f04 +1001a3b6: 4621 mov r1, r4 +1001a3b8: 4668 mov r0, sp +1001a3ba: f7fd fdad bl 10017f18 +1001a3be: 4668 mov r0, sp +1001a3c0: 2191 movs r1, #145 ; 0x91 +1001a3c2: f7fd fd7b bl 10017ebc +1001a3c6: 4668 mov r0, sp +1001a3c8: 2102 movs r1, #2 +1001a3ca: f7fd fd92 bl 10017ef2 +1001a3ce: 4668 mov r0, sp +1001a3d0: 2101 movs r1, #1 +1001a3d2: f7fd fd97 bl 10017f04 +1001a3d6: 4621 mov r1, r4 +1001a3d8: 4668 mov r0, sp +1001a3da: f7fd fd9d bl 10017f18 +1001a3de: 4668 mov r0, sp +1001a3e0: 2192 movs r1, #146 ; 0x92 +1001a3e2: f7fd fd6b bl 10017ebc +1001a3e6: 4668 mov r0, sp +1001a3e8: 2102 movs r1, #2 +1001a3ea: f7fd fd82 bl 10017ef2 +1001a3ee: 4668 mov r0, sp +1001a3f0: 2101 movs r1, #1 +1001a3f2: f7fd fd87 bl 10017f04 +1001a3f6: 4621 mov r1, r4 +1001a3f8: 4668 mov r0, sp +1001a3fa: f7fd fd8d bl 10017f18 +1001a3fe: 4a0f ldr r2, [pc, #60] ; (1001a43c ) +1001a400: 4668 mov r0, sp +1001a402: 6813 ldr r3, [r2, #0] +1001a404: 2191 movs r1, #145 ; 0x91 +1001a406: f023 0310 bic.w r3, r3, #16 +1001a40a: 6013 str r3, [r2, #0] +1001a40c: 4b0c ldr r3, [pc, #48] ; (1001a440 ) +1001a40e: 601d str r5, [r3, #0] +1001a410: f7fd fd54 bl 10017ebc +1001a414: 4629 mov r1, r5 +1001a416: 4668 mov r0, sp +1001a418: f7fd fd6b bl 10017ef2 +1001a41c: 4629 mov r1, r5 +1001a41e: 4668 mov r0, sp +1001a420: f7fd fd70 bl 10017f04 +1001a424: 4621 mov r1, r4 +1001a426: 4668 mov r0, sp +1001a428: f7fd fd76 bl 10017f18 +1001a42c: b007 add sp, #28 +1001a42e: bd30 pop {r4, r5, pc} +1001a430: 40005010 .word 0x40005010 +1001a434: 40000230 .word 0x40000230 +1001a438: 10000334 .word 0x10000334 +1001a43c: 400002c0 .word 0x400002c0 +1001a440: 40005034 .word 0x40005034 + +1001a444 : +1001a444: b51f push {r0, r1, r2, r3, r4, lr} +1001a446: 2400 movs r4, #0 +1001a448: 4b08 ldr r3, [pc, #32] ; (1001a46c ) +1001a44a: 4668 mov r0, sp +1001a44c: 9302 str r3, [sp, #8] +1001a44e: 4b08 ldr r3, [pc, #32] ; (1001a470 ) +1001a450: 9401 str r4, [sp, #4] +1001a452: 9300 str r3, [sp, #0] +1001a454: 4b07 ldr r3, [pc, #28] ; (1001a474 ) +1001a456: 9403 str r4, [sp, #12] +1001a458: 4798 blx r3 +1001a45a: 4668 mov r0, sp +1001a45c: 4b06 ldr r3, [pc, #24] ; (1001a478 ) +1001a45e: 4798 blx r3 +1001a460: 4b06 ldr r3, [pc, #24] ; (1001a47c ) +1001a462: f8c3 4284 str.w r4, [r3, #644] ; 0x284 +1001a466: b004 add sp, #16 +1001a468: bd10 pop {r4, pc} +1001a46a: bf00 nop +1001a46c: 1004bb84 .word 0x1004bb84 +1001a470: 1001a54d .word 0x1001a54d +1001a474: 00004029 .word 0x00004029 +1001a478: 000040f1 .word 0x000040f1 +1001a47c: 1004b8f8 .word 0x1004b8f8 + +1001a480 : +1001a480: f242 03a3 movw r3, #8355 ; 0x20a3 +1001a484: 4298 cmp r0, r3 +1001a486: bf28 it cs +1001a488: 4618 movcs r0, r3 +1001a48a: 237d movs r3, #125 ; 0x7d +1001a48c: 4358 muls r0, r3 +1001a48e: 2318 movs r3, #24 +1001a490: b510 push {r4, lr} +1001a492: 0900 lsrs r0, r0, #4 +1001a494: f020 04ff bic.w r4, r0, #255 ; 0xff +1001a498: b144 cbz r4, 1001a4ac +1001a49a: 680c ldr r4, [r1, #0] +1001a49c: 3b01 subs r3, #1 +1001a49e: 3401 adds r4, #1 +1001a4a0: f013 03ff ands.w r3, r3, #255 ; 0xff +1001a4a4: 600c str r4, [r1, #0] +1001a4a6: ea4f 0050 mov.w r0, r0, lsr #1 +1001a4aa: d1f3 bne.n 1001a494 +1001a4ac: 680b ldr r3, [r1, #0] +1001a4ae: 021b lsls r3, r3, #8 +1001a4b0: 600b str r3, [r1, #0] +1001a4b2: 6010 str r0, [r2, #0] +1001a4b4: bd10 pop {r4, pc} + ... + +1001a4b8 : +1001a4b8: 2800 cmp r0, #0 +1001a4ba: bf14 ite ne +1001a4bc: f44f 0101 movne.w r1, #8454144 ; 0x810000 +1001a4c0: f44f 0100 moveq.w r1, #8388608 ; 0x800000 +1001a4c4: 4b0e ldr r3, [pc, #56] ; (1001a500 ) +1001a4c6: b510 push {r4, lr} +1001a4c8: 681a ldr r2, [r3, #0] +1001a4ca: f503 5322 add.w r3, r3, #10368 ; 0x2880 +1001a4ce: 330c adds r3, #12 +1001a4d0: f3c2 1202 ubfx r2, r2, #4, #3 +1001a4d4: 6019 str r1, [r3, #0] +1001a4d6: 6819 ldr r1, [r3, #0] +1001a4d8: 0209 lsls r1, r1, #8 +1001a4da: d4fc bmi.n 1001a4d6 +1001a4dc: 681c ldr r4, [r3, #0] +1001a4de: f3c4 040d ubfx r4, r4, #0, #14 +1001a4e2: 3401 adds r4, #1 +1001a4e4: b920 cbnz r0, 1001a4f0 +1001a4e6: f640 0355 movw r3, #2133 ; 0x855 +1001a4ea: fbb3 f4f4 udiv r4, r3, r4 +1001a4ee: 3c01 subs r4, #1 +1001a4f0: 2a05 cmp r2, #5 +1001a4f2: d102 bne.n 1001a4fa +1001a4f4: 4803 ldr r0, [pc, #12] ; (1001a504 ) +1001a4f6: 4b04 ldr r3, [pc, #16] ; (1001a508 ) +1001a4f8: 4798 blx r3 +1001a4fa: 4620 mov r0, r4 +1001a4fc: bd10 pop {r4, pc} +1001a4fe: bf00 nop +1001a500: 40000014 .word 0x40000014 +1001a504: 10040e6a .word 0x10040e6a +1001a508: 0000f39d .word 0x0000f39d + +1001a50c : +1001a50c: 4905 ldr r1, [pc, #20] ; (1001a524 ) +1001a50e: 4b06 ldr r3, [pc, #24] ; (1001a528 ) +1001a510: 680a ldr r2, [r1, #0] +1001a512: 681b ldr r3, [r3, #0] +1001a514: f022 020f bic.w r2, r2, #15 +1001a518: f3c3 1302 ubfx r3, r3, #4, #3 +1001a51c: 4313 orrs r3, r2 +1001a51e: 600b str r3, [r1, #0] +1001a520: 4770 bx lr +1001a522: bf00 nop +1001a524: 400000f0 .word 0x400000f0 +1001a528: 40000014 .word 0x40000014 + +1001a52c : +1001a52c: 4905 ldr r1, [pc, #20] ; (1001a544 ) +1001a52e: 4b06 ldr r3, [pc, #24] ; (1001a548 ) +1001a530: 680a ldr r2, [r1, #0] +1001a532: 681b ldr r3, [r3, #0] +1001a534: f022 0270 bic.w r2, r2, #112 ; 0x70 +1001a538: 011b lsls r3, r3, #4 +1001a53a: f003 0370 and.w r3, r3, #112 ; 0x70 +1001a53e: 4313 orrs r3, r2 +1001a540: 600b str r3, [r1, #0] +1001a542: 4770 bx lr +1001a544: 40000014 .word 0x40000014 +1001a548: 400000f0 .word 0x400000f0 + +1001a54c : +1001a54c: b510 push {r4, lr} +1001a54e: f7ff ffed bl 1001a52c +1001a552: 4b0c ldr r3, [pc, #48] ; (1001a584 ) +1001a554: 2064 movs r0, #100 ; 0x64 +1001a556: 4798 blx r3 +1001a558: 4a0b ldr r2, [pc, #44] ; (1001a588 ) +1001a55a: 4c0c ldr r4, [pc, #48] ; (1001a58c ) +1001a55c: 6813 ldr r3, [r2, #0] +1001a55e: f043 4380 orr.w r3, r3, #1073741824 ; 0x40000000 +1001a562: 6013 str r3, [r2, #0] +1001a564: 7da2 ldrb r2, [r4, #22] +1001a566: b10a cbz r2, 1001a56c +1001a568: f7ff feb8 bl 1001a2dc +1001a56c: 2300 movs r3, #0 +1001a56e: 4a08 ldr r2, [pc, #32] ; (1001a590 ) +1001a570: 6013 str r3, [r2, #0] +1001a572: 6713 str r3, [r2, #112] ; 0x70 +1001a574: 4b07 ldr r3, [pc, #28] ; (1001a594 ) +1001a576: 681a ldr r2, [r3, #0] +1001a578: 601a str r2, [r3, #0] +1001a57a: 2301 movs r3, #1 +1001a57c: f8c4 3284 str.w r3, [r4, #644] ; 0x284 +1001a580: bd10 pop {r4, pc} +1001a582: bf00 nop +1001a584: 00000899 .word 0x00000899 +1001a588: 40000008 .word 0x40000008 +1001a58c: 1004b8f8 .word 0x1004b8f8 +1001a590: 40000090 .word 0x40000090 +1001a594: 40000108 .word 0x40000108 + +1001a598 : +1001a598: f240 72ff movw r2, #2047 ; 0x7ff +1001a59c: b508 push {r3, lr} +1001a59e: 4b41 ldr r3, [pc, #260] ; (1001a6a4 ) +1001a5a0: 601a str r2, [r3, #0] +1001a5a2: 4a41 ldr r2, [pc, #260] ; (1001a6a8 ) +1001a5a4: 619a str r2, [r3, #24] +1001a5a6: f7ff ffc1 bl 1001a52c +1001a5aa: 4840 ldr r0, [pc, #256] ; (1001a6ac ) +1001a5ac: 4b40 ldr r3, [pc, #256] ; (1001a6b0 ) +1001a5ae: 4798 blx r3 +1001a5b0: 4a40 ldr r2, [pc, #256] ; (1001a6b4 ) +1001a5b2: 4b41 ldr r3, [pc, #260] ; (1001a6b8 ) +1001a5b4: 601a str r2, [r3, #0] +1001a5b6: f7ff fe2f bl 1001a218 +1001a5ba: 4a40 ldr r2, [pc, #256] ; (1001a6bc ) +1001a5bc: 4940 ldr r1, [pc, #256] ; (1001a6c0 ) +1001a5be: 4841 ldr r0, [pc, #260] ; (1001a6c4 ) +1001a5c0: 4b41 ldr r3, [pc, #260] ; (1001a6c8 ) +1001a5c2: 4798 blx r3 +1001a5c4: 4b41 ldr r3, [pc, #260] ; (1001a6cc ) +1001a5c6: f8d3 225c ldr.w r2, [r3, #604] ; 0x25c +1001a5ca: f8d3 1250 ldr.w r1, [r3, #592] ; 0x250 +1001a5ce: f042 7280 orr.w r2, r2, #16777216 ; 0x1000000 +1001a5d2: f8c3 225c str.w r2, [r3, #604] ; 0x25c +1001a5d6: f841 2c04 str.w r2, [r1, #-4] +1001a5da: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a5de: f8d3 1258 ldr.w r1, [r3, #600] ; 0x258 +1001a5e2: f842 1c08 str.w r1, [r2, #-8] +1001a5e6: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a5ea: f8d3 1254 ldr.w r1, [r3, #596] ; 0x254 +1001a5ee: f842 1c0c str.w r1, [r2, #-12] +1001a5f2: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a5f6: f8d3 124c ldr.w r1, [r3, #588] ; 0x24c +1001a5fa: f842 1c10 str.w r1, [r2, #-16] +1001a5fe: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a602: f8d3 1228 ldr.w r1, [r3, #552] ; 0x228 +1001a606: f842 1c14 str.w r1, [r2, #-20] +1001a60a: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a60e: f8d3 1224 ldr.w r1, [r3, #548] ; 0x224 +1001a612: f842 1c18 str.w r1, [r2, #-24] +1001a616: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a61a: f8d3 1220 ldr.w r1, [r3, #544] ; 0x220 +1001a61e: f842 1c1c str.w r1, [r2, #-28] +1001a622: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a626: f8d3 121c ldr.w r1, [r3, #540] ; 0x21c +1001a62a: f842 1c20 str.w r1, [r2, #-32] +1001a62e: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a632: f8d3 1248 ldr.w r1, [r3, #584] ; 0x248 +1001a636: f842 1c24 str.w r1, [r2, #-36] +1001a63a: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a63e: f8d3 1244 ldr.w r1, [r3, #580] ; 0x244 +1001a642: f842 1c28 str.w r1, [r2, #-40] +1001a646: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a64a: f8d3 1240 ldr.w r1, [r3, #576] ; 0x240 +1001a64e: f842 1c2c str.w r1, [r2, #-44] +1001a652: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a656: f8d3 123c ldr.w r1, [r3, #572] ; 0x23c +1001a65a: f842 1c30 str.w r1, [r2, #-48] +1001a65e: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a662: f8d3 1238 ldr.w r1, [r3, #568] ; 0x238 +1001a666: f842 1c34 str.w r1, [r2, #-52] +1001a66a: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a66e: f8d3 1234 ldr.w r1, [r3, #564] ; 0x234 +1001a672: f842 1c38 str.w r1, [r2, #-56] +1001a676: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a67a: f8d3 1230 ldr.w r1, [r3, #560] ; 0x230 +1001a67e: f842 1c3c str.w r1, [r2, #-60] +1001a682: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a686: f8d3 122c ldr.w r1, [r3, #556] ; 0x22c +1001a68a: f842 1c40 str.w r1, [r2, #-64] +1001a68e: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 +1001a692: 3a40 subs r2, #64 ; 0x40 +1001a694: f8c3 2250 str.w r2, [r3, #592] ; 0x250 +1001a698: f8c3 2280 str.w r2, [r3, #640] ; 0x280 +1001a69c: b662 cpsie i +1001a69e: df00 svc 0 +1001a6a0: bf00 nop +1001a6a2: bd08 pop {r3, pc} +1001a6a4: 40000320 .word 0x40000320 +1001a6a8: 05555556 .word 0x05555556 +1001a6ac: 1ffffffc .word 0x1ffffffc +1001a6b0: 00003de5 .word 0x00003de5 +1001a6b4: f0f00000 .word 0xf0f00000 +1001a6b8: e000ed20 .word 0xe000ed20 +1001a6bc: 10015485 .word 0x10015485 +1001a6c0: 10015441 .word 0x10015441 +1001a6c4: 1001a155 .word 0x1001a155 +1001a6c8: 00004019 .word 0x00004019 +1001a6cc: 1004b8f8 .word 0x1004b8f8 + +1001a6d0 : +1001a6d0: b508 push {r3, lr} +1001a6d2: 2300 movs r3, #0 +1001a6d4: 20ff movs r0, #255 ; 0xff +1001a6d6: 4a08 ldr r2, [pc, #32] ; (1001a6f8 ) +1001a6d8: 7013 strb r3, [r2, #0] +1001a6da: 7553 strb r3, [r2, #21] +1001a6dc: 18d1 adds r1, r2, r3 +1001a6de: 3302 adds r3, #2 +1001a6e0: 2b12 cmp r3, #18 +1001a6e2: 7048 strb r0, [r1, #1] +1001a6e4: 7088 strb r0, [r1, #2] +1001a6e6: d1f9 bne.n 1001a6dc +1001a6e8: 2300 movs r3, #0 +1001a6ea: 7593 strb r3, [r2, #22] +1001a6ec: f7ff feaa bl 1001a444 +1001a6f0: 4a02 ldr r2, [pc, #8] ; (1001a6fc ) +1001a6f2: 4b03 ldr r3, [pc, #12] ; (1001a700 ) +1001a6f4: 605a str r2, [r3, #4] +1001a6f6: bd08 pop {r3, pc} +1001a6f8: 1004b8f8 .word 0x1004b8f8 +1001a6fc: 1001a599 .word 0x1001a599 +1001a700: 10000bc8 .word 0x10000bc8 + +1001a704 : +1001a704: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1001a706: 2400 movs r4, #0 +1001a708: 4b16 ldr r3, [pc, #88] ; (1001a764 ) +1001a70a: b2c6 uxtb r6, r0 +1001a70c: 781a ldrb r2, [r3, #0] +1001a70e: f3c0 2007 ubfx r0, r0, #8, #8 +1001a712: b2e1 uxtb r1, r4 +1001a714: 4291 cmp r1, r2 +1001a716: d307 bcc.n 1001a728 +1001a718: 2808 cmp r0, #8 +1001a71a: d012 beq.n 1001a742 +1001a71c: eb03 0142 add.w r1, r3, r2, lsl #1 +1001a720: 704e strb r6, [r1, #1] +1001a722: 7088 strb r0, [r1, #2] +1001a724: 3201 adds r2, #1 +1001a726: e01b b.n 1001a760 +1001a728: 4625 mov r5, r4 +1001a72a: 3401 adds r4, #1 +1001a72c: eb03 0744 add.w r7, r3, r4, lsl #1 +1001a730: f817 7c01 ldrb.w r7, [r7, #-1] +1001a734: 42b7 cmp r7, r6 +1001a736: d1ec bne.n 1001a712 +1001a738: 2808 cmp r0, #8 +1001a73a: d004 beq.n 1001a746 +1001a73c: eb03 0345 add.w r3, r3, r5, lsl #1 +1001a740: 7098 strb r0, [r3, #2] +1001a742: b003 add sp, #12 +1001a744: bdf0 pop {r4, r5, r6, r7, pc} +1001a746: 1c48 adds r0, r1, #1 +1001a748: eb03 0440 add.w r4, r3, r0, lsl #1 +1001a74c: 7865 ldrb r5, [r4, #1] +1001a74e: 78a4 ldrb r4, [r4, #2] +1001a750: eb03 0141 add.w r1, r3, r1, lsl #1 +1001a754: 704d strb r5, [r1, #1] +1001a756: 708c strb r4, [r1, #2] +1001a758: b2c1 uxtb r1, r0 +1001a75a: 428a cmp r2, r1 +1001a75c: d8f3 bhi.n 1001a746 +1001a75e: 3a01 subs r2, #1 +1001a760: 701a strb r2, [r3, #0] +1001a762: e7ee b.n 1001a742 +1001a764: 1004b8f8 .word 0x1004b8f8 + +1001a768 : +1001a768: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1001a76a: 4607 mov r7, r0 +1001a76c: 2000 movs r0, #0 +1001a76e: 4d0b ldr r5, [pc, #44] ; (1001a79c ) +1001a770: ac02 add r4, sp, #8 +1001a772: f844 0d04 str.w r0, [r4, #-4]! +1001a776: 9000 str r0, [sp, #0] +1001a778: 6028 str r0, [r5, #0] +1001a77a: f7ff fe9d bl 1001a4b8 +1001a77e: 4622 mov r2, r4 +1001a780: 4606 mov r6, r0 +1001a782: 4669 mov r1, sp +1001a784: 4638 mov r0, r7 +1001a786: f7ff fe7b bl 1001a480 +1001a78a: e89d 0009 ldmia.w sp, {r0, r3} +1001a78e: 4318 orrs r0, r3 +1001a790: ea40 4006 orr.w r0, r0, r6, lsl #16 +1001a794: 6028 str r0, [r5, #0] +1001a796: b003 add sp, #12 +1001a798: bdf0 pop {r4, r5, r6, r7, pc} +1001a79a: bf00 nop +1001a79c: 40000090 .word 0x40000090 + +1001a7a0 : +1001a7a0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +1001a7a4: 4691 mov r9, r2 +1001a7a6: f04f 32ff mov.w r2, #4294967295 +1001a7aa: 461f mov r7, r3 +1001a7ac: 4b2e ldr r3, [pc, #184] ; (1001a868 ) +1001a7ae: 4605 mov r5, r0 +1001a7b0: 681c ldr r4, [r3, #0] +1001a7b2: 4b2e ldr r3, [pc, #184] ; (1001a86c ) +1001a7b4: 4608 mov r0, r1 +1001a7b6: f8d3 8000 ldr.w r8, [r3] +1001a7ba: f8c3 2080 str.w r2, [r3, #128] ; 0x80 +1001a7be: f7ff fea5 bl 1001a50c +1001a7c2: 2300 movs r3, #0 +1001a7c4: 4e2a ldr r6, [pc, #168] ; (1001a870 ) +1001a7c6: 492b ldr r1, [pc, #172] ; (1001a874 ) +1001a7c8: f8c6 3284 str.w r3, [r6, #644] ; 0x284 +1001a7cc: 4b2a ldr r3, [pc, #168] ; (1001a878 ) +1001a7ce: 681a ldr r2, [r3, #0] +1001a7d0: 601a str r2, [r3, #0] +1001a7d2: 4b2a ldr r3, [pc, #168] ; (1001a87c ) +1001a7d4: 4a2a ldr r2, [pc, #168] ; (1001a880 ) +1001a7d6: f1b9 0f00 cmp.w r9, #0 +1001a7da: bf18 it ne +1001a7dc: 4619 movne r1, r3 +1001a7de: 4b29 ldr r3, [pc, #164] ; (1001a884 ) +1001a7e0: 6019 str r1, [r3, #0] +1001a7e2: 6813 ldr r3, [r2, #0] +1001a7e4: 07e9 lsls r1, r5, #31 +1001a7e6: f023 03ff bic.w r3, r3, #255 ; 0xff +1001a7ea: f043 0302 orr.w r3, r3, #2 +1001a7ee: 6013 str r3, [r2, #0] +1001a7f0: d508 bpl.n 1001a804 +1001a7f2: f7ff ffb9 bl 1001a768 +1001a7f6: 4a24 ldr r2, [pc, #144] ; (1001a888 ) +1001a7f8: f044 0401 orr.w r4, r4, #1 +1001a7fc: 6813 ldr r3, [r2, #0] +1001a7fe: f443 4300 orr.w r3, r3, #32768 ; 0x8000 +1001a802: 6013 str r3, [r2, #0] +1001a804: 07aa lsls r2, r5, #30 +1001a806: bf48 it mi +1001a808: f044 0402 orrmi.w r4, r4, #2 +1001a80c: 076b lsls r3, r5, #29 +1001a80e: bf48 it mi +1001a810: f044 0410 orrmi.w r4, r4, #16 +1001a814: 0728 lsls r0, r5, #28 +1001a816: bf48 it mi +1001a818: f444 7480 orrmi.w r4, r4, #256 ; 0x100 +1001a81c: 06e9 lsls r1, r5, #27 +1001a81e: bf48 it mi +1001a820: f044 5480 orrmi.w r4, r4, #268435456 ; 0x10000000 +1001a824: 06aa lsls r2, r5, #26 +1001a826: bf48 it mi +1001a828: f444 4480 orrmi.w r4, r4, #16384 ; 0x4000 +1001a82c: 062b lsls r3, r5, #24 +1001a82e: bf48 it mi +1001a830: f044 5480 orrmi.w r4, r4, #268435456 ; 0x10000000 +1001a834: f000 f8e4 bl 1001aa00 +1001a838: 4b0b ldr r3, [pc, #44] ; (1001a868 ) +1001a83a: 601c str r4, [r3, #0] +1001a83c: f896 3284 ldrb.w r3, [r6, #644] ; 0x284 +1001a840: 2b01 cmp r3, #1 +1001a842: d00e beq.n 1001a862 +1001a844: 75b7 strb r7, [r6, #22] +1001a846: b10f cbz r7, 1001a84c +1001a848: f7ff fd68 bl 1001a31c +1001a84c: 2204 movs r2, #4 +1001a84e: 4b0f ldr r3, [pc, #60] ; (1001a88c ) +1001a850: f44f 7096 mov.w r0, #300 ; 0x12c +1001a854: 601a str r2, [r3, #0] +1001a856: 681b ldr r3, [r3, #0] +1001a858: 4b0d ldr r3, [pc, #52] ; (1001a890 ) +1001a85a: 4798 blx r3 +1001a85c: 4b03 ldr r3, [pc, #12] ; (1001a86c ) +1001a85e: f8c3 8000 str.w r8, [r3] +1001a862: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1001a866: bf00 nop +1001a868: 40000100 .word 0x40000100 +1001a86c: e000e100 .word 0xe000e100 +1001a870: 1004b8f8 .word 0x1004b8f8 +1001a874: 74000900 .word 0x74000900 +1001a878: 40000108 .word 0x40000108 +1001a87c: 74003b00 .word 0x74003b00 +1001a880: 40000124 .word 0x40000124 +1001a884: 40000120 .word 0x40000120 +1001a888: 40000090 .word 0x40000090 +1001a88c: 40000118 .word 0x40000118 +1001a890: 00000899 .word 0x00000899 + +1001a894 : +1001a894: b538 push {r3, r4, r5, lr} +1001a896: 4604 mov r4, r0 +1001a898: 460d mov r5, r1 +1001a89a: 4b46 ldr r3, [pc, #280] ; (1001a9b4 ) +1001a89c: 681a ldr r2, [r3, #0] +1001a89e: f042 4200 orr.w r2, r2, #2147483648 ; 0x80000000 +1001a8a2: 601a str r2, [r3, #0] +1001a8a4: 681a ldr r2, [r3, #0] +1001a8a6: 0c12 lsrs r2, r2, #16 +1001a8a8: 0412 lsls r2, r2, #16 +1001a8aa: f442 4253 orr.w r2, r2, #54016 ; 0xd300 +1001a8ae: 601a str r2, [r3, #0] +1001a8b0: 681a ldr r2, [r3, #0] +1001a8b2: 0412 lsls r2, r2, #16 +1001a8b4: d4fc bmi.n 1001a8b0 +1001a8b6: 4b40 ldr r3, [pc, #256] ; (1001a9b8 ) +1001a8b8: 07e0 lsls r0, r4, #31 +1001a8ba: 681a ldr r2, [r3, #0] +1001a8bc: 601a str r2, [r3, #0] +1001a8be: d421 bmi.n 1001a904 +1001a8c0: 07a1 lsls r1, r4, #30 +1001a8c2: d469 bmi.n 1001a998 +1001a8c4: 2400 movs r4, #0 +1001a8c6: 4b3d ldr r3, [pc, #244] ; (1001a9bc ) +1001a8c8: 4a3d ldr r2, [pc, #244] ; (1001a9c0 ) +1001a8ca: f8c3 4284 str.w r4, [r3, #644] ; 0x284 +1001a8ce: 6813 ldr r3, [r2, #0] +1001a8d0: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 +1001a8d4: 6013 str r3, [r2, #0] +1001a8d6: f7ec fafd bl 10006ed4 +1001a8da: 4b3a ldr r3, [pc, #232] ; (1001a9c4 ) +1001a8dc: 681a ldr r2, [r3, #0] +1001a8de: f022 0202 bic.w r2, r2, #2 +1001a8e2: 601a str r2, [r3, #0] +1001a8e4: 681a ldr r2, [r3, #0] +1001a8e6: f022 0202 bic.w r2, r2, #2 +1001a8ea: 601a str r2, [r3, #0] +1001a8ec: 4a36 ldr r2, [pc, #216] ; (1001a9c8 ) +1001a8ee: f8c3 42e0 str.w r4, [r3, #736] ; 0x2e0 +1001a8f2: 6813 ldr r3, [r2, #0] +1001a8f4: f023 4380 bic.w r3, r3, #1073741824 ; 0x40000000 +1001a8f8: 6013 str r3, [r2, #0] +1001a8fa: 2201 movs r2, #1 +1001a8fc: 4b33 ldr r3, [pc, #204] ; (1001a9cc ) +1001a8fe: 601a str r2, [r3, #0] +1001a900: bf30 wfi +1001a902: bd38 pop {r3, r4, r5, pc} +1001a904: 2001 movs r0, #1 +1001a906: f7ff fdd7 bl 1001a4b8 +1001a90a: 4b31 ldr r3, [pc, #196] ; (1001a9d0 ) +1001a90c: 2219 movs r2, #25 +1001a90e: fbb3 f3f0 udiv r3, r3, r0 +1001a912: 4353 muls r3, r2 +1001a914: 42ab cmp r3, r5 +1001a916: bf81 itttt hi +1001a918: 2103 movhi r1, #3 +1001a91a: fbb5 f5f1 udivhi r5, r5, r1 +1001a91e: f44f 71fa movhi.w r1, #500 ; 0x1f4 +1001a922: 4369 mulhi r1, r5 +1001a924: bf84 itt hi +1001a926: fbb1 f0f0 udivhi r0, r1, r0 +1001a92a: 4350 mulhi r0, r2 +1001a92c: 4a21 ldr r2, [pc, #132] ; (1001a9b4 ) +1001a92e: bf98 it ls +1001a930: 4828 ldrls r0, [pc, #160] ; (1001a9d4 ) +1001a932: 6813 ldr r3, [r2, #0] +1001a934: b2c1 uxtb r1, r0 +1001a936: 0c1b lsrs r3, r3, #16 +1001a938: 041b lsls r3, r3, #16 +1001a93a: f443 4310 orr.w r3, r3, #36864 ; 0x9000 +1001a93e: 430b orrs r3, r1 +1001a940: 6013 str r3, [r2, #0] +1001a942: 4613 mov r3, r2 +1001a944: 681a ldr r2, [r3, #0] +1001a946: 0412 lsls r2, r2, #16 +1001a948: d4fc bmi.n 1001a944 +1001a94a: 681a ldr r2, [r3, #0] +1001a94c: f3c0 2507 ubfx r5, r0, #8, #8 +1001a950: 0c12 lsrs r2, r2, #16 +1001a952: 0412 lsls r2, r2, #16 +1001a954: f442 4211 orr.w r2, r2, #37120 ; 0x9100 +1001a958: 432a orrs r2, r5 +1001a95a: 4916 ldr r1, [pc, #88] ; (1001a9b4 ) +1001a95c: 601a str r2, [r3, #0] +1001a95e: 680b ldr r3, [r1, #0] +1001a960: 041b lsls r3, r3, #16 +1001a962: d4fc bmi.n 1001a95e +1001a964: 680a ldr r2, [r1, #0] +1001a966: 4b1c ldr r3, [pc, #112] ; (1001a9d8 ) +1001a968: f3c0 4007 ubfx r0, r0, #16, #8 +1001a96c: 401a ands r2, r3 +1001a96e: f442 4212 orr.w r2, r2, #37376 ; 0x9200 +1001a972: 4310 orrs r0, r2 +1001a974: 4a0f ldr r2, [pc, #60] ; (1001a9b4 ) +1001a976: 6008 str r0, [r1, #0] +1001a978: 4619 mov r1, r3 +1001a97a: 4610 mov r0, r2 +1001a97c: 6813 ldr r3, [r2, #0] +1001a97e: 041d lsls r5, r3, #16 +1001a980: d4fc bmi.n 1001a97c +1001a982: 6813 ldr r3, [r2, #0] +1001a984: 400b ands r3, r1 +1001a986: f443 4353 orr.w r3, r3, #54016 ; 0xd300 +1001a98a: f043 0380 orr.w r3, r3, #128 ; 0x80 +1001a98e: 6013 str r3, [r2, #0] +1001a990: 6803 ldr r3, [r0, #0] +1001a992: 041a lsls r2, r3, #16 +1001a994: d4fc bmi.n 1001a990 +1001a996: e793 b.n 1001a8c0 +1001a998: 4a06 ldr r2, [pc, #24] ; (1001a9b4 ) +1001a99a: 6813 ldr r3, [r2, #0] +1001a99c: 0c1b lsrs r3, r3, #16 +1001a99e: 041b lsls r3, r3, #16 +1001a9a0: f443 4314 orr.w r3, r3, #37888 ; 0x9400 +1001a9a4: f043 0310 orr.w r3, r3, #16 +1001a9a8: 6013 str r3, [r2, #0] +1001a9aa: 6813 ldr r3, [r2, #0] +1001a9ac: 041b lsls r3, r3, #16 +1001a9ae: d4fc bmi.n 1001a9aa +1001a9b0: e788 b.n 1001a8c4 +1001a9b2: bf00 nop +1001a9b4: 40000094 .word 0x40000094 +1001a9b8: 40000130 .word 0x40000130 +1001a9bc: 1004b8f8 .word 0x1004b8f8 +1001a9c0: 40000100 .word 0x40000100 +1001a9c4: 40000040 .word 0x40000040 +1001a9c8: 40000008 .word 0x40000008 +1001a9cc: 40000118 .word 0x40000118 +1001a9d0: 53555408 .word 0x53555408 +1001a9d4: 007fffff .word 0x007fffff +1001a9d8: ffff0000 .word 0xffff0000 + +1001a9dc : +1001a9dc: b430 push {r4, r5} +1001a9de: f1a1 05a0 sub.w r5, r1, #160 ; 0xa0 +1001a9e2: 2d33 cmp r5, #51 ; 0x33 +1001a9e4: d903 bls.n 1001a9ee +1001a9e6: 4c04 ldr r4, [pc, #16] ; (1001a9f8 ) +1001a9e8: 46a4 mov ip, r4 +1001a9ea: bc30 pop {r4, r5} +1001a9ec: 4760 bx ip +1001a9ee: 23ff movs r3, #255 ; 0xff +1001a9f0: bc30 pop {r4, r5} +1001a9f2: 2001 movs r0, #1 +1001a9f4: 7013 strb r3, [r2, #0] +1001a9f6: 4770 bx lr +1001a9f8: 000065f9 .word 0x000065f9 + +1001a9fc : +1001a9fc: 2001 movs r0, #1 +1001a9fe: 4770 bx lr + +1001aa00 : +1001aa00: f244 0301 movw r3, #16385 ; 0x4001 +1001aa04: 4a03 ldr r2, [pc, #12] ; (1001aa14 ) +1001aa06: 7811 ldrb r1, [r2, #0] +1001aa08: 0649 lsls r1, r1, #25 +1001aa0a: d401 bmi.n 1001aa10 +1001aa0c: 3b01 subs r3, #1 +1001aa0e: d1fa bne.n 1001aa06 +1001aa10: 4770 bx lr +1001aa12: bf00 nop +1001aa14: 40003014 .word 0x40003014 + +1001aa18 : +1001aa18: 2001 movs r0, #1 +1001aa1a: 4770 bx lr + +1001aa1c : +1001aa1c: 4a17 ldr r2, [pc, #92] ; (1001aa7c ) +1001aa1e: b530 push {r4, r5, lr} +1001aa20: 6813 ldr r3, [r2, #0] +1001aa22: 2401 movs r4, #1 +1001aa24: f043 0301 orr.w r3, r3, #1 +1001aa28: 6013 str r3, [r2, #0] +1001aa2a: f852 3c60 ldr.w r3, [r2, #-96] +1001aa2e: 4d14 ldr r5, [pc, #80] ; (1001aa80 ) +1001aa30: f443 3380 orr.w r3, r3, #65536 ; 0x10000 +1001aa34: f842 3c60 str.w r3, [r2, #-96] +1001aa38: 4b12 ldr r3, [pc, #72] ; (1001aa84 ) +1001aa3a: b089 sub sp, #36 ; 0x24 +1001aa3c: 681a ldr r2, [r3, #0] +1001aa3e: 4628 mov r0, r5 +1001aa40: f442 4280 orr.w r2, r2, #16384 ; 0x4000 +1001aa44: 601a str r2, [r3, #0] +1001aa46: 681a ldr r2, [r3, #0] +1001aa48: f442 4200 orr.w r2, r2, #32768 ; 0x8000 +1001aa4c: 601a str r2, [r3, #0] +1001aa4e: 4a0e ldr r2, [pc, #56] ; (1001aa88 ) +1001aa50: 6813 ldr r3, [r2, #0] +1001aa52: f023 0310 bic.w r3, r3, #16 +1001aa56: 6013 str r3, [r2, #0] +1001aa58: 2300 movs r3, #0 +1001aa5a: f88d 401d strb.w r4, [sp, #29] +1001aa5e: 9301 str r3, [sp, #4] +1001aa60: 9300 str r3, [sp, #0] +1001aa62: 9302 str r3, [sp, #8] +1001aa64: f88d 401c strb.w r4, [sp, #28] +1001aa68: f7fe fa18 bl 10018e9c +1001aa6c: 686b ldr r3, [r5, #4] +1001aa6e: 4668 mov r0, sp +1001aa70: 4798 blx r3 +1001aa72: 696b ldr r3, [r5, #20] +1001aa74: 4620 mov r0, r4 +1001aa76: 4798 blx r3 +1001aa78: b009 add sp, #36 ; 0x24 +1001aa7a: bd30 pop {r4, r5, pc} +1001aa7c: 40000270 .word 0x40000270 +1001aa80: 10000318 .word 0x10000318 +1001aa84: 40000230 .word 0x40000230 +1001aa88: 40000204 .word 0x40000204 + +1001aa8c : +1001aa8c: 23fe movs r3, #254 ; 0xfe +1001aa8e: b513 push {r0, r1, r4, lr} +1001aa90: aa02 add r2, sp, #8 +1001aa92: f802 3d01 strb.w r3, [r2, #-1]! +1001aa96: 4b05 ldr r3, [pc, #20] ; (1001aaac ) +1001aa98: 21f8 movs r1, #248 ; 0xf8 +1001aa9a: 6818 ldr r0, [r3, #0] +1001aa9c: 4c04 ldr r4, [pc, #16] ; (1001aab0 ) +1001aa9e: 2307 movs r3, #7 +1001aaa0: 47a0 blx r4 +1001aaa2: f89d 0007 ldrb.w r0, [sp, #7] +1001aaa6: b002 add sp, #8 +1001aaa8: bd10 pop {r4, pc} +1001aaaa: bf00 nop +1001aaac: 400000e8 .word 0x400000e8 +1001aab0: 000065f9 .word 0x000065f9 + +1001aab4 <__low_level_init>: +1001aab4: 4770 bx lr + ... + +1001aab8 : +1001aab8: b508 push {r3, lr} +1001aaba: 4b04 ldr r3, [pc, #16] ; (1001aacc ) +1001aabc: 4798 blx r3 +1001aabe: f000 f915 bl 1001acec +1001aac2: 2201 movs r2, #1 +1001aac4: 4b02 ldr r3, [pc, #8] ; (1001aad0 ) +1001aac6: 701a strb r2, [r3, #0] +1001aac8: bd08 pop {r3, pc} +1001aaca: bf00 nop +1001aacc: 0002d7d1 .word 0x0002d7d1 +1001aad0: 1004bb85 .word 0x1004bb85 + +1001aad4 : +1001aad4: b40c push {r2, r3} +1001aad6: b570 push {r4, r5, r6, lr} +1001aad8: b09c sub sp, #112 ; 0x70 +1001aada: ab20 add r3, sp, #128 ; 0x80 +1001aadc: f853 2b04 ldr.w r2, [r3], #4 +1001aae0: 460c mov r4, r1 +1001aae2: 9301 str r3, [sp, #4] +1001aae4: f44f 7302 mov.w r3, #520 ; 0x208 +1001aae8: f8ad 3014 strh.w r3, [sp, #20] +1001aaec: b1e1 cbz r1, 1001ab28 +1001aaee: 1e4b subs r3, r1, #1 +1001aaf0: 9304 str r3, [sp, #16] +1001aaf2: 9307 str r3, [sp, #28] +1001aaf4: f64f 73ff movw r3, #65535 ; 0xffff +1001aaf8: 4d0c ldr r5, [pc, #48] ; (1001ab2c ) +1001aafa: f8ad 3016 strh.w r3, [sp, #22] +1001aafe: 9002 str r0, [sp, #8] +1001ab00: 9006 str r0, [sp, #24] +1001ab02: 9b01 ldr r3, [sp, #4] +1001ab04: a902 add r1, sp, #8 +1001ab06: 6828 ldr r0, [r5, #0] +1001ab08: 4e09 ldr r6, [pc, #36] ; (1001ab30 ) +1001ab0a: 47b0 blx r6 +1001ab0c: 1c43 adds r3, r0, #1 +1001ab0e: bfbe ittt lt +1001ab10: 228b movlt r2, #139 ; 0x8b +1001ab12: 682b ldrlt r3, [r5, #0] +1001ab14: 601a strlt r2, [r3, #0] +1001ab16: b114 cbz r4, 1001ab1e +1001ab18: 2200 movs r2, #0 +1001ab1a: 9b02 ldr r3, [sp, #8] +1001ab1c: 701a strb r2, [r3, #0] +1001ab1e: b01c add sp, #112 ; 0x70 +1001ab20: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1001ab24: b002 add sp, #8 +1001ab26: 4770 bx lr +1001ab28: 460b mov r3, r1 +1001ab2a: e7e1 b.n 1001aaf0 +1001ab2c: 10001c60 .word 0x10001c60 +1001ab30: 0002f661 .word 0x0002f661 + +1001ab34 : +1001ab34: b40e push {r1, r2, r3} +1001ab36: f44f 7102 mov.w r1, #520 ; 0x208 +1001ab3a: b510 push {r4, lr} +1001ab3c: b09d sub sp, #116 ; 0x74 +1001ab3e: f8ad 1014 strh.w r1, [sp, #20] +1001ab42: f06f 4100 mvn.w r1, #2147483648 ; 0x80000000 +1001ab46: 9104 str r1, [sp, #16] +1001ab48: 9107 str r1, [sp, #28] +1001ab4a: f64f 71ff movw r1, #65535 ; 0xffff +1001ab4e: ab1f add r3, sp, #124 ; 0x7c +1001ab50: 9002 str r0, [sp, #8] +1001ab52: 9006 str r0, [sp, #24] +1001ab54: 4808 ldr r0, [pc, #32] ; (1001ab78 ) +1001ab56: f853 2b04 ldr.w r2, [r3], #4 +1001ab5a: f8ad 1016 strh.w r1, [sp, #22] +1001ab5e: 4c07 ldr r4, [pc, #28] ; (1001ab7c ) +1001ab60: a902 add r1, sp, #8 +1001ab62: 6800 ldr r0, [r0, #0] +1001ab64: 9301 str r3, [sp, #4] +1001ab66: 47a0 blx r4 +1001ab68: 2200 movs r2, #0 +1001ab6a: 9b02 ldr r3, [sp, #8] +1001ab6c: 701a strb r2, [r3, #0] +1001ab6e: b01d add sp, #116 ; 0x74 +1001ab70: e8bd 4010 ldmia.w sp!, {r4, lr} +1001ab74: b003 add sp, #12 +1001ab76: 4770 bx lr +1001ab78: 10001c60 .word 0x10001c60 +1001ab7c: 0002f661 .word 0x0002f661 + +1001ab80 : +1001ab80: b40f push {r0, r1, r2, r3} +1001ab82: b537 push {r0, r1, r2, r4, r5, lr} +1001ab84: 4b0c ldr r3, [pc, #48] ; (1001abb8 ) +1001ab86: f993 3000 ldrsb.w r3, [r3] +1001ab8a: b993 cbnz r3, 1001abb2 +1001ab8c: 4d0b ldr r5, [pc, #44] ; (1001abbc ) +1001ab8e: ab07 add r3, sp, #28 +1001ab90: 6828 ldr r0, [r5, #0] +1001ab92: 9301 str r3, [sp, #4] +1001ab94: 6881 ldr r1, [r0, #8] +1001ab96: 4c0a ldr r4, [pc, #40] ; (1001abc0 ) +1001ab98: 9a06 ldr r2, [sp, #24] +1001ab9a: 47a0 blx r4 +1001ab9c: 4604 mov r4, r0 +1001ab9e: 6828 ldr r0, [r5, #0] +1001aba0: 4b08 ldr r3, [pc, #32] ; (1001abc4 ) +1001aba2: 6881 ldr r1, [r0, #8] +1001aba4: 4798 blx r3 +1001aba6: 4620 mov r0, r4 +1001aba8: b003 add sp, #12 +1001abaa: e8bd 4030 ldmia.w sp!, {r4, r5, lr} +1001abae: b004 add sp, #16 +1001abb0: 4770 bx lr +1001abb2: 2400 movs r4, #0 +1001abb4: e7f7 b.n 1001aba6 +1001abb6: bf00 nop +1001abb8: 1004bb86 .word 0x1004bb86 +1001abbc: 10001c60 .word 0x10001c60 +1001abc0: 0002f661 .word 0x0002f661 +1001abc4: 0002ef8d .word 0x0002ef8d + +1001abc8 : +1001abc8: 4b00 ldr r3, [pc, #0] ; (1001abcc ) +1001abca: 4718 bx r3 +1001abcc: 00028ae1 .word 0x00028ae1 + +1001abd0 : +1001abd0: 4b00 ldr r3, [pc, #0] ; (1001abd4 ) +1001abd2: 4718 bx r3 +1001abd4: 00028b49 .word 0x00028b49 + +1001abd8 : +1001abd8: 4b00 ldr r3, [pc, #0] ; (1001abdc ) +1001abda: 4718 bx r3 +1001abdc: 00028cb5 .word 0x00028cb5 + +1001abe0 : +1001abe0: 4b00 ldr r3, [pc, #0] ; (1001abe4 ) +1001abe2: 4718 bx r3 +1001abe4: 00028d91 .word 0x00028d91 + +1001abe8 : +1001abe8: 4b00 ldr r3, [pc, #0] ; (1001abec ) +1001abea: 4718 bx r3 +1001abec: 00028e55 .word 0x00028e55 + +1001abf0 : +1001abf0: 4b00 ldr r3, [pc, #0] ; (1001abf4 ) +1001abf2: 4718 bx r3 +1001abf4: 00028ec9 .word 0x00028ec9 + +1001abf8 : +1001abf8: 4b00 ldr r3, [pc, #0] ; (1001abfc ) +1001abfa: 4718 bx r3 +1001abfc: 00028f15 .word 0x00028f15 + +1001ac00 : +1001ac00: 4b00 ldr r3, [pc, #0] ; (1001ac04 ) +1001ac02: 4718 bx r3 +1001ac04: 00028fc5 .word 0x00028fc5 + +1001ac08 : +1001ac08: 4b00 ldr r3, [pc, #0] ; (1001ac0c ) +1001ac0a: 4718 bx r3 +1001ac0c: 0002907d .word 0x0002907d + +1001ac10 : +1001ac10: 4b00 ldr r3, [pc, #0] ; (1001ac14 ) +1001ac12: 4718 bx r3 +1001ac14: 0002960d .word 0x0002960d + +1001ac18 : +1001ac18: 2258 movs r2, #88 ; 0x58 +1001ac1a: 4b02 ldr r3, [pc, #8] ; (1001ac24 ) +1001ac1c: f04f 30ff mov.w r0, #4294967295 +1001ac20: 601a str r2, [r3, #0] +1001ac22: 4770 bx lr +1001ac24: 10000bc4 .word 0x10000bc4 + +1001ac28 : +1001ac28: 2802 cmp r0, #2 +1001ac2a: bf89 itett hi +1001ac2c: 2209 movhi r2, #9 +1001ac2e: f44f 5300 movls.w r3, #8192 ; 0x2000 +1001ac32: 4b04 ldrhi r3, [pc, #16] ; (1001ac44 ) +1001ac34: f04f 30ff movhi.w r0, #4294967295 +1001ac38: bf8e itee hi +1001ac3a: 601a strhi r2, [r3, #0] +1001ac3c: 604b strls r3, [r1, #4] +1001ac3e: 2000 movls r0, #0 +1001ac40: 4770 bx lr +1001ac42: bf00 nop +1001ac44: 10000bc4 .word 0x10000bc4 + +1001ac48 : +1001ac48: 2802 cmp r0, #2 +1001ac4a: bfd4 ite le +1001ac4c: 2001 movle r0, #1 +1001ac4e: f04f 30ff movgt.w r0, #4294967295 +1001ac52: 4770 bx lr + +1001ac54 : +1001ac54: 2258 movs r2, #88 ; 0x58 +1001ac56: 4b02 ldr r3, [pc, #8] ; (1001ac60 ) +1001ac58: f04f 30ff mov.w r0, #4294967295 +1001ac5c: 601a str r2, [r3, #0] +1001ac5e: 4770 bx lr +1001ac60: 10000bc4 .word 0x10000bc4 + +1001ac64 : +1001ac64: 2258 movs r2, #88 ; 0x58 +1001ac66: 4b02 ldr r3, [pc, #8] ; (1001ac70 ) +1001ac68: f04f 30ff mov.w r0, #4294967295 +1001ac6c: 601a str r2, [r3, #0] +1001ac6e: 4770 bx lr +1001ac70: 10000bc4 .word 0x10000bc4 + +1001ac74 : +1001ac74: 4b04 ldr r3, [pc, #16] ; (1001ac88 ) +1001ac76: 4602 mov r2, r0 +1001ac78: 6819 ldr r1, [r3, #0] +1001ac7a: b909 cbnz r1, 1001ac80 +1001ac7c: 4903 ldr r1, [pc, #12] ; (1001ac8c ) +1001ac7e: 6019 str r1, [r3, #0] +1001ac80: 6818 ldr r0, [r3, #0] +1001ac82: 4402 add r2, r0 +1001ac84: 601a str r2, [r3, #0] +1001ac86: 4770 bx lr +1001ac88: 1004bb88 .word 0x1004bb88 +1001ac8c: 10002400 .word 0x10002400 + +1001ac90 : +1001ac90: b5f8 push {r3, r4, r5, r6, r7, lr} +1001ac92: 460e mov r6, r1 +1001ac94: 4615 mov r5, r2 +1001ac96: 460c mov r4, r1 +1001ac98: 4f04 ldr r7, [pc, #16] ; (1001acac ) +1001ac9a: 1ba3 subs r3, r4, r6 +1001ac9c: 429d cmp r5, r3 +1001ac9e: dc01 bgt.n 1001aca4 +1001aca0: 4628 mov r0, r5 +1001aca2: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001aca4: f814 0b01 ldrb.w r0, [r4], #1 +1001aca8: 47b8 blx r7 +1001acaa: e7f6 b.n 1001ac9a +1001acac: 000002d9 .word 0x000002d9 + +1001acb0 : +1001acb0: b510 push {r4, lr} +1001acb2: 490b ldr r1, [pc, #44] ; (1001ace0 ) +1001acb4: 4604 mov r4, r0 +1001acb6: f7ff ff97 bl 1001abe8 +1001acba: b178 cbz r0, 1001acdc +1001acbc: 4909 ldr r1, [pc, #36] ; (1001ace4 ) +1001acbe: 4620 mov r0, r4 +1001acc0: f7ff ff92 bl 1001abe8 +1001acc4: b148 cbz r0, 1001acda +1001acc6: 4908 ldr r1, [pc, #32] ; (1001ace8 ) +1001acc8: 4620 mov r0, r4 +1001acca: f7ff ff8d bl 1001abe8 +1001acce: 2800 cmp r0, #0 +1001acd0: bf14 ite ne +1001acd2: f04f 30ff movne.w r0, #4294967295 +1001acd6: 2002 moveq r0, #2 +1001acd8: bd10 pop {r4, pc} +1001acda: 2001 movs r0, #1 +1001acdc: bd10 pop {r4, pc} +1001acde: bf00 nop +1001ace0: 10040efc .word 0x10040efc +1001ace4: 10040f03 .word 0x10040f03 +1001ace8: 10040f0b .word 0x10040f0b + +1001acec : +1001acec: 4b08 ldr r3, [pc, #32] ; (1001ad10 ) +1001acee: 4a09 ldr r2, [pc, #36] ; (1001ad14 ) +1001acf0: 601a str r2, [r3, #0] +1001acf2: 4a09 ldr r2, [pc, #36] ; (1001ad18 ) +1001acf4: 605a str r2, [r3, #4] +1001acf6: 4a09 ldr r2, [pc, #36] ; (1001ad1c ) +1001acf8: 609a str r2, [r3, #8] +1001acfa: 4a09 ldr r2, [pc, #36] ; (1001ad20 ) +1001acfc: 60da str r2, [r3, #12] +1001acfe: 4a09 ldr r2, [pc, #36] ; (1001ad24 ) +1001ad00: 611a str r2, [r3, #16] +1001ad02: 4a09 ldr r2, [pc, #36] ; (1001ad28 ) +1001ad04: 615a str r2, [r3, #20] +1001ad06: 4a09 ldr r2, [pc, #36] ; (1001ad2c ) +1001ad08: 619a str r2, [r3, #24] +1001ad0a: 4a09 ldr r2, [pc, #36] ; (1001ad30 ) +1001ad0c: 61da str r2, [r3, #28] +1001ad0e: 4770 bx lr +1001ad10: 10000760 .word 0x10000760 +1001ad14: 1001ac19 .word 0x1001ac19 +1001ad18: 1001ac29 .word 0x1001ac29 +1001ad1c: 1001ac49 .word 0x1001ac49 +1001ad20: 1001ac55 .word 0x1001ac55 +1001ad24: 1001acb1 .word 0x1001acb1 +1001ad28: 1001ac65 .word 0x1001ac65 +1001ad2c: 1001ac91 .word 0x1001ac91 +1001ad30: 1001ac75 .word 0x1001ac75 + +1001ad34 : +1001ad34: f8d0 3454 ldr.w r3, [r0, #1108] ; 0x454 +1001ad38: b510 push {r4, lr} +1001ad3a: 2b01 cmp r3, #1 +1001ad3c: d04f beq.n 1001adde +1001ad3e: f8b0 24c0 ldrh.w r2, [r0, #1216] ; 0x4c0 +1001ad42: f8b0 34ba ldrh.w r3, [r0, #1210] ; 0x4ba +1001ad46: f012 0f04 tst.w r2, #4 +1001ad4a: d103 bne.n 1001ad54 +1001ad4c: b153 cbz r3, 1001ad64 +1001ad4e: f042 0204 orr.w r2, r2, #4 +1001ad52: e002 b.n 1001ad5a +1001ad54: b92b cbnz r3, 1001ad62 +1001ad56: f022 0204 bic.w r2, r2, #4 +1001ad5a: f8a0 24c0 strh.w r2, [r0, #1216] ; 0x4c0 +1001ad5e: 2301 movs r3, #1 +1001ad60: e000 b.n 1001ad64 +1001ad62: 2300 movs r3, #0 +1001ad64: f8b0 14c0 ldrh.w r1, [r0, #1216] ; 0x4c0 +1001ad68: f8b0 2450 ldrh.w r2, [r0, #1104] ; 0x450 +1001ad6c: f011 0f10 tst.w r1, #16 +1001ad70: d109 bne.n 1001ad86 +1001ad72: b912 cbnz r2, 1001ad7a +1001ad74: f890 44be ldrb.w r4, [r0, #1214] ; 0x4be +1001ad78: b184 cbz r4, 1001ad9c +1001ad7a: f041 0110 orr.w r1, r1, #16 +1001ad7e: f8a0 14c0 strh.w r1, [r0, #1216] ; 0x4c0 +1001ad82: 3301 adds r3, #1 +1001ad84: e009 b.n 1001ad9a +1001ad86: b942 cbnz r2, 1001ad9a +1001ad88: f890 24be ldrb.w r2, [r0, #1214] ; 0x4be +1001ad8c: b932 cbnz r2, 1001ad9c +1001ad8e: f021 0110 bic.w r1, r1, #16 +1001ad92: f8a0 14c0 strh.w r1, [r0, #1216] ; 0x4c0 +1001ad96: 3301 adds r3, #1 +1001ad98: e000 b.n 1001ad9c +1001ad9a: b982 cbnz r2, 1001adbe +1001ad9c: f8b0 24c0 ldrh.w r2, [r0, #1216] ; 0x4c0 +1001ada0: 0751 lsls r1, r2, #29 +1001ada2: d40c bmi.n 1001adbe +1001ada4: f8b0 2462 ldrh.w r2, [r0, #1122] ; 0x462 +1001ada8: 0792 lsls r2, r2, #30 +1001adaa: d502 bpl.n 1001adb2 +1001adac: f8b0 24bc ldrh.w r2, [r0, #1212] ; 0x4bc +1001adb0: b93a cbnz r2, 1001adc2 +1001adb2: f890 24be ldrb.w r2, [r0, #1214] ; 0x4be +1001adb6: 3200 adds r2, #0 +1001adb8: bf18 it ne +1001adba: 2201 movne r2, #1 +1001adbc: e002 b.n 1001adc4 +1001adbe: 2203 movs r2, #3 +1001adc0: e000 b.n 1001adc4 +1001adc2: 2202 movs r2, #2 +1001adc4: f8b0 14c0 ldrh.w r1, [r0, #1216] ; 0x4c0 +1001adc8: f001 0403 and.w r4, r1, #3 +1001adcc: 4294 cmp r4, r2 +1001adce: d008 beq.n 1001ade2 +1001add0: f021 0103 bic.w r1, r1, #3 +1001add4: 430a orrs r2, r1 +1001add6: f8a0 24c0 strh.w r2, [r0, #1216] ; 0x4c0 +1001adda: 1c58 adds r0, r3, #1 +1001addc: bd10 pop {r4, pc} +1001adde: 2000 movs r0, #0 +1001ade0: bd10 pop {r4, pc} +1001ade2: 4618 mov r0, r3 +1001ade4: bd10 pop {r4, pc} + +1001ade6 : +1001ade6: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1001ade8: f600 46d4 addw r6, r0, #3284 ; 0xcd4 +1001adec: 4604 mov r4, r0 +1001adee: a901 add r1, sp, #4 +1001adf0: 4630 mov r0, r6 +1001adf2: f7fc fbf9 bl 100175e8 +1001adf6: f8d4 5cc4 ldr.w r5, [r4, #3268] ; 0xcc4 +1001adfa: f604 47c4 addw r7, r4, #3268 ; 0xcc4 +1001adfe: 4638 mov r0, r7 +1001ae00: 4629 mov r1, r5 +1001ae02: f7fc fbce bl 100175a2 +1001ae06: b930 cbnz r0, 1001ae16 +1001ae08: f5a5 7107 sub.w r1, r5, #540 ; 0x21c +1001ae0c: 4620 mov r0, r4 +1001ae0e: 682d ldr r5, [r5, #0] +1001ae10: f00d fe8a bl 10028b28 +1001ae14: e7f3 b.n 1001adfe +1001ae16: 4630 mov r0, r6 +1001ae18: a901 add r1, sp, #4 +1001ae1a: f7fc fbef bl 100175fc +1001ae1e: b003 add sp, #12 +1001ae20: bdf0 pop {r4, r5, r6, r7, pc} + +1001ae22 : +1001ae22: b570 push {r4, r5, r6, lr} +1001ae24: f500 73c8 add.w r3, r0, #400 ; 0x190 +1001ae28: 4606 mov r6, r0 +1001ae2a: e9f6 456a ldrd r4, r5, [r6, #424]! ; 0x1a8 +1001ae2e: e9d3 2300 ldrd r2, r3, [r3] +1001ae32: f500 71cc add.w r1, r0, #408 ; 0x198 +1001ae36: 429d cmp r5, r3 +1001ae38: bf08 it eq +1001ae3a: 4294 cmpeq r4, r2 +1001ae3c: f500 74c0 add.w r4, r0, #384 ; 0x180 +1001ae40: cc30 ldmia r4, {r4, r5} +1001ae42: e9c1 4500 strd r4, r5, [r1] +1001ae46: f500 74d0 add.w r4, r0, #416 ; 0x1a0 +1001ae4a: f500 70c4 add.w r0, r0, #392 ; 0x188 +1001ae4e: c803 ldmia r0, {r0, r1} +1001ae50: e9c4 0100 strd r0, r1, [r4] +1001ae54: e9c6 2300 strd r2, r3, [r6] +1001ae58: bf0c ite eq +1001ae5a: 2000 moveq r0, #0 +1001ae5c: 2001 movne r0, #1 +1001ae5e: bd70 pop {r4, r5, r6, pc} + +1001ae60 : +1001ae60: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} +1001ae64: 4606 mov r6, r0 +1001ae66: 4690 mov r8, r2 +1001ae68: 460c mov r4, r1 +1001ae6a: 2900 cmp r1, #0 +1001ae6c: d07b beq.n 1001af66 +1001ae6e: f8d1 30f8 ldr.w r3, [r1, #248] ; 0xf8 +1001ae72: 07d9 lsls r1, r3, #31 +1001ae74: d577 bpl.n 1001af66 +1001ae76: 2500 movs r5, #0 +1001ae78: 462f mov r7, r5 +1001ae7a: 19e3 adds r3, r4, r7 +1001ae7c: f893 0158 ldrb.w r0, [r3, #344] ; 0x158 +1001ae80: b120 cbz r0, 1001ae8c +1001ae82: f000 007f and.w r0, r0, #127 ; 0x7f +1001ae86: f023 fd57 bl 1003e938 <__rtw_get_bit_value_from_ieee_value_veneer> +1001ae8a: 4305 orrs r5, r0 +1001ae8c: 3701 adds r7, #1 +1001ae8e: 2f10 cmp r7, #16 +1001ae90: d1f3 bne.n 1001ae7a +1001ae92: f8d4 71f4 ldr.w r7, [r4, #500] ; 0x1f4 +1001ae96: b317 cbz r7, 1001aede +1001ae98: 2117 movs r1, #23 +1001ae9a: 4630 mov r0, r6 +1001ae9c: f10d 0207 add.w r2, sp, #7 +1001aea0: f017 fb2e bl 10032500 +1001aea4: f89d 3007 ldrb.w r3, [sp, #7] +1001aea8: 2100 movs r1, #0 +1001aeaa: 2b02 cmp r3, #2 +1001aeac: bf14 ite ne +1001aeae: 2308 movne r3, #8 +1001aeb0: 2310 moveq r3, #16 +1001aeb2: 4299 cmp r1, r3 +1001aeb4: da11 bge.n 1001aeda +1001aeb6: eb04 02e1 add.w r2, r4, r1, asr #3 +1001aeba: f892 0205 ldrb.w r0, [r2, #517] ; 0x205 +1001aebe: f001 0207 and.w r2, r1, #7 +1001aec2: fa20 f202 lsr.w r2, r0, r2 +1001aec6: 07d2 lsls r2, r2, #31 +1001aec8: d505 bpl.n 1001aed6 +1001aeca: f101 020c add.w r2, r1, #12 +1001aece: 2001 movs r0, #1 +1001aed0: fa00 f202 lsl.w r2, r0, r2 +1001aed4: 4315 orrs r5, r2 +1001aed6: 3101 adds r1, #1 +1001aed8: e7eb b.n 1001aeb2 +1001aeda: f894 71fe ldrb.w r7, [r4, #510] ; 0x1fe +1001aede: f8d6 30e4 ldr.w r3, [r6, #228] ; 0xe4 +1001aee2: 4922 ldr r1, [pc, #136] ; (1001af6c ) +1001aee4: 2b0e cmp r3, #14 +1001aee6: ea05 0101 and.w r1, r5, r1 +1001aeea: d904 bls.n 1001aef6 +1001aeec: 2900 cmp r1, #0 +1001aeee: bf0c ite eq +1001aef0: 2104 moveq r1, #4 +1001aef2: 2114 movne r1, #20 +1001aef4: e00c b.n 1001af10 +1001aef6: b929 cbnz r1, 1001af04 +1001aef8: f415 6f7f tst.w r5, #4080 ; 0xff0 +1001aefc: bf0c ite eq +1001aefe: 2101 moveq r1, #1 +1001af00: 2103 movne r1, #3 +1001af02: e000 b.n 1001af06 +1001af04: 210b movs r1, #11 +1001af06: 6873 ldr r3, [r6, #4] +1001af08: 2b05 cmp r3, #5 +1001af0a: bf08 it eq +1001af0c: f001 01fe andeq.w r1, r1, #254 ; 0xfe +1001af10: f884 117c strb.w r1, [r4, #380] ; 0x17c +1001af14: 4630 mov r0, r6 +1001af16: f00d fa91 bl 1002843c +1001af1a: 4681 mov r9, r0 +1001af1c: f025 4070 bic.w r0, r5, #4026531840 ; 0xf0000000 +1001af20: f00e f819 bl 10028f56 +1001af24: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc +1001af28: 2b04 cmp r3, #4 +1001af2a: d81c bhi.n 1001af66 +1001af2c: f8d4 3100 ldr.w r3, [r4, #256] ; 0x100 +1001af30: 2f01 cmp r7, #1 +1001af32: f003 031f and.w r3, r3, #31 +1001af36: bf14 ite ne +1001af38: f063 037f ornne r3, r3, #127 ; 0x7f +1001af3c: f063 035f orneq r3, r3, #95 ; 0x5f +1001af40: f000 0a3f and.w sl, r0, #63 ; 0x3f +1001af44: f88d 3004 strb.w r3, [sp, #4] +1001af48: 4630 mov r0, r6 +1001af4a: ea45 7109 orr.w r1, r5, r9, lsl #28 +1001af4e: aa01 add r2, sp, #4 +1001af50: 4643 mov r3, r8 +1001af52: f017 fb70 bl 10032636 +1001af56: 2f01 cmp r7, #1 +1001af58: bf08 it eq +1001af5a: f04a 0a40 orreq.w sl, sl, #64 ; 0x40 +1001af5e: f884 9176 strb.w r9, [r4, #374] ; 0x176 +1001af62: f884 a177 strb.w sl, [r4, #375] ; 0x177 +1001af66: b002 add sp, #8 +1001af68: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1001af6c: 0ffff000 .word 0x0ffff000 + +1001af70 : +1001af70: f8d1 30fc ldr.w r3, [r1, #252] ; 0xfc +1001af74: b537 push {r0, r1, r2, r4, r5, lr} +1001af76: 3301 adds r3, #1 +1001af78: 460c mov r4, r1 +1001af7a: 4605 mov r5, r0 +1001af7c: f8c1 3100 str.w r3, [r1, #256] ; 0x100 +1001af80: 4622 mov r2, r4 +1001af82: 2100 movs r1, #0 +1001af84: 2301 movs r3, #1 +1001af86: f017 fad4 bl 10032532 +1001af8a: f8d5 3d08 ldr.w r3, [r5, #3336] ; 0xd08 +1001af8e: 4628 mov r0, r5 +1001af90: 2b02 cmp r3, #2 +1001af92: bf0c ite eq +1001af94: 2301 moveq r3, #1 +1001af96: 2300 movne r3, #0 +1001af98: f8c4 3110 str.w r3, [r4, #272] ; 0x110 +1001af9c: 4621 mov r1, r4 +1001af9e: f00d fdc3 bl 10028b28 +1001afa2: f8d4 31f4 ldr.w r3, [r4, #500] ; 0x1f4 +1001afa6: b1e3 cbz r3, 1001afe2 +1001afa8: f8d5 3458 ldr.w r3, [r5, #1112] ; 0x458 +1001afac: f8b5 2462 ldrh.w r2, [r5, #1122] ; 0x462 +1001afb0: f8c4 31f8 str.w r3, [r4, #504] ; 0x1f8 +1001afb4: f8b4 3202 ldrh.w r3, [r4, #514] ; 0x202 +1001afb8: 4013 ands r3, r2 +1001afba: f013 0f60 tst.w r3, #96 ; 0x60 +1001afbe: bf1c itt ne +1001afc0: 2201 movne r2, #1 +1001afc2: f884 21fe strbne.w r2, [r4, #510] ; 0x1fe +1001afc6: 079b lsls r3, r3, #30 +1001afc8: d507 bpl.n 1001afda +1001afca: f895 351f ldrb.w r3, [r5, #1311] ; 0x51f +1001afce: f884 31fc strb.w r3, [r4, #508] ; 0x1fc +1001afd2: f895 3520 ldrb.w r3, [r5, #1312] ; 0x520 +1001afd6: f884 31fd strb.w r3, [r4, #509] ; 0x1fd +1001afda: 2301 movs r3, #1 +1001afdc: f8c4 3104 str.w r3, [r4, #260] ; 0x104 +1001afe0: e007 b.n 1001aff2 +1001afe2: f8c4 31f8 str.w r3, [r4, #504] ; 0x1f8 +1001afe6: f884 31fe strb.w r3, [r4, #510] ; 0x1fe +1001afea: f884 31fc strb.w r3, [r4, #508] ; 0x1fc +1001afee: f884 31fd strb.w r3, [r4, #509] ; 0x1fd +1001aff2: 2100 movs r1, #0 +1001aff4: 2248 movs r2, #72 ; 0x48 +1001aff6: f884 11ff strb.w r1, [r4, #511] ; 0x1ff +1001affa: f884 1200 strb.w r1, [r4, #512] ; 0x200 +1001affe: f504 70c0 add.w r0, r4, #384 ; 0x180 +1001b002: f7fc fa25 bl 10017450 +1001b006: 4620 mov r0, r4 +1001b008: a901 add r1, sp, #4 +1001b00a: f7fc faed bl 100175e8 +1001b00e: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 +1001b012: 4620 mov r0, r4 +1001b014: f043 0301 orr.w r3, r3, #1 +1001b018: f8c4 30f8 str.w r3, [r4, #248] ; 0xf8 +1001b01c: a901 add r1, sp, #4 +1001b01e: f7fc faed bl 100175fc +1001b022: b003 add sp, #12 +1001b024: bd30 pop {r4, r5, pc} + ... + +1001b028 : +1001b028: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001b02c: 460d mov r5, r1 +1001b02e: b087 sub sp, #28 +1001b030: 4616 mov r6, r2 +1001b032: 4604 mov r4, r0 +1001b034: 2800 cmp r0, #0 +1001b036: f000 814c beq.w 1001b2d2 +1001b03a: f890 3858 ldrb.w r3, [r0, #2136] ; 0x858 +1001b03e: 2b00 cmp r3, #0 +1001b040: f000 8147 beq.w 1001b2d2 +1001b044: f200 5804 addw r8, r0, #1284 ; 0x504 +1001b048: 4640 mov r0, r8 +1001b04a: a903 add r1, sp, #12 +1001b04c: f7fc facc bl 100175e8 +1001b050: 2d2a cmp r5, #42 ; 0x2a +1001b052: f000 808a beq.w 1001b16a +1001b056: 2ddd cmp r5, #221 ; 0xdd +1001b058: f000 80b7 beq.w 1001b1ca +1001b05c: 2d05 cmp r5, #5 +1001b05e: f040 8131 bne.w 1001b2c4 +1001b062: f8b4 3cfe ldrh.w r3, [r4, #3326] ; 0xcfe +1001b066: f504 7790 add.w r7, r4, #288 ; 0x120 +1001b06a: f8ad 300a strh.w r3, [sp, #10] +1001b06e: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001b072: 4629 mov r1, r5 +1001b074: 3b0c subs r3, #12 +1001b076: 4638 mov r0, r7 +1001b078: aa05 add r2, sp, #20 +1001b07a: f023 fbf1 bl 1003e860 <__rtw_get_ie_veneer> +1001b07e: f504 7a8a add.w sl, r4, #276 ; 0x114 +1001b082: 4605 mov r5, r0 +1001b084: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001b088: b148 cbz r0, 1001b09e +1001b08a: 9a05 ldr r2, [sp, #20] +1001b08c: b13a cbz r2, 1001b09e +1001b08e: ebca 0600 rsb r6, sl, r0 +1001b092: 3202 adds r2, #2 +1001b094: 1b9e subs r6, r3, r6 +1001b096: 9205 str r2, [sp, #20] +1001b098: 1887 adds r7, r0, r2 +1001b09a: 1ab6 subs r6, r6, r2 +1001b09c: e017 b.n 1001b0ce +1001b09e: 2200 movs r2, #0 +1001b0a0: 9205 str r2, [sp, #20] +1001b0a2: f8d4 50a4 ldr.w r5, [r4, #164] ; 0xa4 +1001b0a6: 4638 mov r0, r7 +1001b0a8: 2101 movs r1, #1 +1001b0aa: aa04 add r2, sp, #16 +1001b0ac: 3b0c subs r3, #12 +1001b0ae: 350e adds r5, #14 +1001b0b0: f023 fbd6 bl 1003e860 <__rtw_get_ie_veneer> +1001b0b4: b110 cbz r0, 1001b0bc +1001b0b6: 9b04 ldr r3, [sp, #16] +1001b0b8: 3302 adds r3, #2 +1001b0ba: 441d add r5, r3 +1001b0bc: f8d4 6110 ldr.w r6, [r4, #272] ; 0x110 +1001b0c0: 3503 adds r5, #3 +1001b0c2: 9b05 ldr r3, [sp, #20] +1001b0c4: eb0a 0705 add.w r7, sl, r5 +1001b0c8: 1b75 subs r5, r6, r5 +1001b0ca: 1aee subs r6, r5, r3 +1001b0cc: 463d mov r5, r7 +1001b0ce: b916 cbnz r6, 1001b0d6 +1001b0d0: f04f 0b00 mov.w fp, #0 +1001b0d4: e00a b.n 1001b0ec +1001b0d6: 4630 mov r0, r6 +1001b0d8: f7fc fb6a bl 100177b0 +1001b0dc: 4683 mov fp, r0 +1001b0de: 2800 cmp r0, #0 +1001b0e0: d0f6 beq.n 1001b0d0 +1001b0e2: b11f cbz r7, 1001b0ec +1001b0e4: 4639 mov r1, r7 +1001b0e6: 4632 mov r2, r6 +1001b0e8: f7fc f9a2 bl 10017430 +1001b0ec: 2305 movs r3, #5 +1001b0ee: 702b strb r3, [r5, #0] +1001b0f0: f8b4 2cfe ldrh.w r2, [r4, #3326] ; 0xcfe +1001b0f4: f412 4f7f tst.w r2, #65280 ; 0xff00 +1001b0f8: d002 beq.n 1001b100 +1001b0fa: f012 0ffc tst.w r2, #252 ; 0xfc +1001b0fe: d100 bne.n 1001b102 +1001b100: 2304 movs r3, #4 +1001b102: 9305 str r3, [sp, #20] +1001b104: 9b05 ldr r3, [sp, #20] +1001b106: 1d6f adds r7, r5, #5 +1001b108: 706b strb r3, [r5, #1] +1001b10a: 2300 movs r3, #0 +1001b10c: 70ab strb r3, [r5, #2] +1001b10e: 2301 movs r3, #1 +1001b110: 70eb strb r3, [r5, #3] +1001b112: f8b4 2cfe ldrh.w r2, [r4, #3326] ; 0xcfe +1001b116: 46b9 mov r9, r7 +1001b118: 401a ands r2, r3 +1001b11a: bf14 ite ne +1001b11c: 712b strbne r3, [r5, #4] +1001b11e: 712a strbeq r2, [r5, #4] +1001b120: 9b05 ldr r3, [sp, #20] +1001b122: 2b04 cmp r3, #4 +1001b124: d105 bne.n 1001b132 +1001b126: f89d 300a ldrb.w r3, [sp, #10] +1001b12a: f107 0901 add.w r9, r7, #1 +1001b12e: 703b strb r3, [r7, #0] +1001b130: e009 b.n 1001b146 +1001b132: 2b05 cmp r3, #5 +1001b134: d107 bne.n 1001b146 +1001b136: 4638 mov r0, r7 +1001b138: f10d 010a add.w r1, sp, #10 +1001b13c: 2202 movs r2, #2 +1001b13e: f7fc f977 bl 10017430 +1001b142: f107 0902 add.w r9, r7, #2 +1001b146: f1bb 0f00 cmp.w fp, #0 +1001b14a: d008 beq.n 1001b15e +1001b14c: 4648 mov r0, r9 +1001b14e: 4659 mov r1, fp +1001b150: 4632 mov r2, r6 +1001b152: f7fc f96d bl 10017430 +1001b156: 4658 mov r0, fp +1001b158: 4631 mov r1, r6 +1001b15a: f7fc f966 bl 1001742a +1001b15e: ebca 0909 rsb r9, sl, r9 +1001b162: 444e add r6, r9 +1001b164: f8c4 6110 str.w r6, [r4, #272] ; 0x110 +1001b168: e0ac b.n 1001b2c4 +1001b16a: 2300 movs r3, #0 +1001b16c: 9305 str r3, [sp, #20] +1001b16e: f894 3732 ldrb.w r3, [r4, #1842] ; 0x732 +1001b172: 2b00 cmp r3, #0 +1001b174: f000 80a6 beq.w 1001b2c4 +1001b178: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001b17c: 4629 mov r1, r5 +1001b17e: f504 7090 add.w r0, r4, #288 ; 0x120 +1001b182: aa05 add r2, sp, #20 +1001b184: 3b0c subs r3, #12 +1001b186: f023 fb6b bl 1003e860 <__rtw_get_ie_veneer> +1001b18a: 4601 mov r1, r0 +1001b18c: 2800 cmp r0, #0 +1001b18e: f000 8099 beq.w 1001b2c4 +1001b192: 9b05 ldr r3, [sp, #20] +1001b194: 2b00 cmp r3, #0 +1001b196: f000 8095 beq.w 1001b2c4 +1001b19a: f8b4 34b4 ldrh.w r3, [r4, #1204] ; 0x4b4 +1001b19e: 2b01 cmp r3, #1 +1001b1a0: 7883 ldrb r3, [r0, #2] +1001b1a2: bf0c ite eq +1001b1a4: f043 0303 orreq.w r3, r3, #3 +1001b1a8: f023 0303 bicne.w r3, r3, #3 +1001b1ac: 7083 strb r3, [r0, #2] +1001b1ae: f8b4 24b8 ldrh.w r2, [r4, #1208] ; 0x4b8 +1001b1b2: 7883 ldrb r3, [r0, #2] +1001b1b4: b112 cbz r2, 1001b1bc +1001b1b6: f043 0304 orr.w r3, r3, #4 +1001b1ba: e001 b.n 1001b1c0 +1001b1bc: f023 0304 bic.w r3, r3, #4 +1001b1c0: 708b strb r3, [r1, #2] +1001b1c2: 4620 mov r0, r4 +1001b1c4: f00d fca2 bl 10028b0c +1001b1c8: e07c b.n 1001b2c4 +1001b1ca: 4843 ldr r0, [pc, #268] ; (1001b2d8 ) +1001b1cc: 4631 mov r1, r6 +1001b1ce: 2204 movs r2, #4 +1001b1d0: f7fc f936 bl 10017440 +1001b1d4: 2800 cmp r0, #0 +1001b1d6: d175 bne.n 1001b2c4 +1001b1d8: 4840 ldr r0, [pc, #256] ; (1001b2dc ) +1001b1da: 4631 mov r1, r6 +1001b1dc: 2204 movs r2, #4 +1001b1de: f7fc f92f bl 10017440 +1001b1e2: 4607 mov r7, r0 +1001b1e4: 2800 cmp r0, #0 +1001b1e6: d16d bne.n 1001b2c4 +1001b1e8: 483d ldr r0, [pc, #244] ; (1001b2e0 ) +1001b1ea: 4631 mov r1, r6 +1001b1ec: 2204 movs r2, #4 +1001b1ee: f7fc f927 bl 10017440 +1001b1f2: 2800 cmp r0, #0 +1001b1f4: d061 beq.n 1001b2ba +1001b1f6: ab06 add r3, sp, #24 +1001b1f8: f843 7d04 str.w r7, [r3, #-4]! +1001b1fc: f8d4 5110 ldr.w r5, [r4, #272] ; 0x110 +1001b200: f504 7090 add.w r0, r4, #288 ; 0x120 +1001b204: f1a5 010c sub.w r1, r5, #12 +1001b208: 463a mov r2, r7 +1001b20a: f023 fb59 bl 1003e8c0 <__rtw_get_wps_ie_veneer> +1001b20e: 4681 mov r9, r0 +1001b210: 2800 cmp r0, #0 +1001b212: d057 beq.n 1001b2c4 +1001b214: 9e05 ldr r6, [sp, #20] +1001b216: 2e00 cmp r6, #0 +1001b218: d054 beq.n 1001b2c4 +1001b21a: f504 7a8a add.w sl, r4, #276 ; 0x114 +1001b21e: ebca 0a00 rsb sl, sl, r0 +1001b222: ebca 0505 rsb r5, sl, r5 +1001b226: 1bad subs r5, r5, r6 +1001b228: d00a beq.n 1001b240 +1001b22a: 4628 mov r0, r5 +1001b22c: f7fc fac0 bl 100177b0 +1001b230: 4607 mov r7, r0 +1001b232: b130 cbz r0, 1001b242 +1001b234: eb09 0106 add.w r1, r9, r6 +1001b238: 462a mov r2, r5 +1001b23a: f7fc f8f9 bl 10017430 +1001b23e: e000 b.n 1001b242 +1001b240: 2700 movs r7, #0 +1001b242: f8d4 64c4 ldr.w r6, [r4, #1220] ; 0x4c4 +1001b246: 2e00 cmp r6, #0 +1001b248: d03c beq.n 1001b2c4 +1001b24a: 7872 ldrb r2, [r6, #1] +1001b24c: 9205 str r2, [sp, #20] +1001b24e: 3202 adds r2, #2 +1001b250: eb0a 0302 add.w r3, sl, r2 +1001b254: 442b add r3, r5 +1001b256: f5b3 7f40 cmp.w r3, #768 ; 0x300 +1001b25a: d812 bhi.n 1001b282 +1001b25c: 4648 mov r0, r9 +1001b25e: 4631 mov r1, r6 +1001b260: f7fc f8e6 bl 10017430 +1001b264: 9b05 ldr r3, [sp, #20] +1001b266: 3302 adds r3, #2 +1001b268: eb09 0003 add.w r0, r9, r3 +1001b26c: b11f cbz r7, 1001b276 +1001b26e: 4639 mov r1, r7 +1001b270: 462a mov r2, r5 +1001b272: f7fc f8dd bl 10017430 +1001b276: 9b05 ldr r3, [sp, #20] +1001b278: 3302 adds r3, #2 +1001b27a: 449a add sl, r3 +1001b27c: 44aa add sl, r5 +1001b27e: f8c4 a110 str.w sl, [r4, #272] ; 0x110 +1001b282: b11f cbz r7, 1001b28c +1001b284: 4638 mov r0, r7 +1001b286: 4629 mov r1, r5 +1001b288: f7fc f8cf bl 1001742a +1001b28c: 2200 movs r2, #0 +1001b28e: ab06 add r3, sp, #24 +1001b290: f803 2d08 strb.w r2, [r3, #-8]! +1001b294: 7871 ldrb r1, [r6, #1] +1001b296: 4630 mov r0, r6 +1001b298: 9200 str r2, [sp, #0] +1001b29a: 3102 adds r1, #2 +1001b29c: f241 0241 movw r2, #4161 ; 0x1041 +1001b2a0: f023 fb3e bl 1003e920 <__rtw_get_wps_attr_content_veneer> +1001b2a4: f89d 2010 ldrb.w r2, [sp, #16] +1001b2a8: 6923 ldr r3, [r4, #16] +1001b2aa: b112 cbz r2, 1001b2b2 +1001b2ac: f443 7380 orr.w r3, r3, #256 ; 0x100 +1001b2b0: e001 b.n 1001b2b6 +1001b2b2: f423 7380 bic.w r3, r3, #256 ; 0x100 +1001b2b6: 6123 str r3, [r4, #16] +1001b2b8: e004 b.n 1001b2c4 +1001b2ba: 480a ldr r0, [pc, #40] ; (1001b2e4 ) +1001b2bc: 4631 mov r1, r6 +1001b2be: 2204 movs r2, #4 +1001b2c0: f7fc f8be bl 10017440 +1001b2c4: 2301 movs r3, #1 +1001b2c6: f884 3508 strb.w r3, [r4, #1288] ; 0x508 +1001b2ca: 4640 mov r0, r8 +1001b2cc: a903 add r1, sp, #12 +1001b2ce: f7fc f995 bl 100175fc +1001b2d2: b007 add sp, #28 +1001b2d4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1001b2d8: 10041554 .word 0x10041554 +1001b2dc: 10041579 .word 0x10041579 +1001b2e0: 100414b9 .word 0x100414b9 +1001b2e4: 100414d7 .word 0x100414d7 + +1001b2e8 : +1001b2e8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001b2ec: 4b66 ldr r3, [pc, #408] ; (1001b488 ) +1001b2ee: 4604 mov r4, r0 +1001b2f0: 6818 ldr r0, [r3, #0] +1001b2f2: 6923 ldr r3, [r4, #16] +1001b2f4: b091 sub sp, #68 ; 0x44 +1001b2f6: 2600 movs r6, #0 +1001b2f8: 9008 str r0, [sp, #32] +1001b2fa: 06d8 lsls r0, r3, #27 +1001b2fc: 460f mov r7, r1 +1001b2fe: 9605 str r6, [sp, #20] +1001b300: d401 bmi.n 1001b306 +1001b302: 2000 movs r0, #0 +1001b304: e36c b.n 1001b9e0 +1001b306: f5b2 7f40 cmp.w r2, #768 ; 0x300 +1001b30a: dcfa bgt.n 1001b302 +1001b30c: f504 758a add.w r5, r4, #276 ; 0x114 +1001b310: f8c4 2110 str.w r2, [r4, #272] ; 0x110 +1001b314: 4628 mov r0, r5 +1001b316: 4631 mov r1, r6 +1001b318: f44f 7240 mov.w r2, #768 ; 0x300 +1001b31c: f7fc f898 bl 10017450 +1001b320: 4628 mov r0, r5 +1001b322: 4639 mov r1, r7 +1001b324: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 +1001b328: f7fc f882 bl 10017430 +1001b32c: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 +1001b330: 2b04 cmp r3, #4 +1001b332: d1e6 bne.n 1001b302 +1001b334: f104 099c add.w r9, r4, #156 ; 0x9c +1001b338: f504 51a4 add.w r1, r4, #5248 ; 0x1480 +1001b33c: 3119 adds r1, #25 +1001b33e: 2206 movs r2, #6 +1001b340: 4648 mov r0, r9 +1001b342: f884 60d0 strb.w r6, [r4, #208] ; 0xd0 +1001b346: f884 60d1 strb.w r6, [r4, #209] ; 0xd1 +1001b34a: f884 60d2 strb.w r6, [r4, #210] ; 0xd2 +1001b34e: f884 60d3 strb.w r6, [r4, #211] ; 0xd3 +1001b352: f7fc f86d bl 10017430 +1001b356: 4628 mov r0, r5 +1001b358: f002 f949 bl 1001d5ee +1001b35c: 7842 ldrb r2, [r0, #1] +1001b35e: 7803 ldrb r3, [r0, #0] +1001b360: 4628 mov r0, r5 +1001b362: ea43 2302 orr.w r3, r3, r2, lsl #8 +1001b366: f8c4 30dc str.w r3, [r4, #220] ; 0xdc +1001b36a: f002 f931 bl 1001d5d0 +1001b36e: 7803 ldrb r3, [r0, #0] +1001b370: 7847 ldrb r7, [r0, #1] +1001b372: f504 7590 add.w r5, r4, #288 ; 0x120 +1001b376: ea43 2707 orr.w r7, r3, r7, lsl #8 +1001b37a: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001b37e: 4628 mov r0, r5 +1001b380: 4631 mov r1, r6 +1001b382: aa05 add r2, sp, #20 +1001b384: 3b0c subs r3, #12 +1001b386: f023 fa6b bl 1003e860 <__rtw_get_ie_veneer> +1001b38a: 4680 mov r8, r0 +1001b38c: b188 cbz r0, 1001b3b2 +1001b38e: 9b05 ldr r3, [sp, #20] +1001b390: b17b cbz r3, 1001b3b2 +1001b392: f104 00a4 add.w r0, r4, #164 ; 0xa4 +1001b396: 4631 mov r1, r6 +1001b398: 2228 movs r2, #40 ; 0x28 +1001b39a: f7fc f859 bl 10017450 +1001b39e: f104 00a8 add.w r0, r4, #168 ; 0xa8 +1001b3a2: f108 0102 add.w r1, r8, #2 +1001b3a6: 9a05 ldr r2, [sp, #20] +1001b3a8: f7fc f842 bl 10017430 +1001b3ac: 9b05 ldr r3, [sp, #20] +1001b3ae: f8c4 30a4 str.w r3, [r4, #164] ; 0xa4 +1001b3b2: 2300 movs r3, #0 +1001b3b4: f884 30d8 strb.w r3, [r4, #216] ; 0xd8 +1001b3b8: f884 30d9 strb.w r3, [r4, #217] ; 0xd9 +1001b3bc: f884 30da strb.w r3, [r4, #218] ; 0xda +1001b3c0: f884 30db strb.w r3, [r4, #219] ; 0xdb +1001b3c4: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001b3c8: 4628 mov r0, r5 +1001b3ca: 2103 movs r1, #3 +1001b3cc: aa05 add r2, sp, #20 +1001b3ce: 3b0c subs r3, #12 +1001b3d0: f023 fa46 bl 1003e860 <__rtw_get_ie_veneer> +1001b3d4: b120 cbz r0, 1001b3e0 +1001b3d6: 9b05 ldr r3, [sp, #20] +1001b3d8: b123 cbz r3, 1001b3e4 +1001b3da: f890 8002 ldrb.w r8, [r0, #2] +1001b3de: e002 b.n 1001b3e6 +1001b3e0: 4680 mov r8, r0 +1001b3e2: e000 b.n 1001b3e6 +1001b3e4: 4698 mov r8, r3 +1001b3e6: a80c add r0, sp, #48 ; 0x30 +1001b3e8: 2100 movs r1, #0 +1001b3ea: 2210 movs r2, #16 +1001b3ec: f8c4 80e4 str.w r8, [r4, #228] ; 0xe4 +1001b3f0: f7fc f82e bl 10017450 +1001b3f4: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001b3f8: 2101 movs r1, #1 +1001b3fa: 4628 mov r0, r5 +1001b3fc: aa05 add r2, sp, #20 +1001b3fe: 3b0c subs r3, #12 +1001b400: f023 fa2e bl 1003e860 <__rtw_get_ie_veneer> +1001b404: 4601 mov r1, r0 +1001b406: b130 cbz r0, 1001b416 +1001b408: a80c add r0, sp, #48 ; 0x30 +1001b40a: 3102 adds r1, #2 +1001b40c: 9a05 ldr r2, [sp, #20] +1001b40e: f7fc f80f bl 10017430 +1001b412: 9e05 ldr r6, [sp, #20] +1001b414: e000 b.n 1001b418 +1001b416: 4606 mov r6, r0 +1001b418: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001b41c: 2132 movs r1, #50 ; 0x32 +1001b41e: 4628 mov r0, r5 +1001b420: aa05 add r2, sp, #20 +1001b422: 3b0c subs r3, #12 +1001b424: f023 fa1c bl 1003e860 <__rtw_get_ie_veneer> +1001b428: 4601 mov r1, r0 +1001b42a: b138 cbz r0, 1001b43c +1001b42c: a80c add r0, sp, #48 ; 0x30 +1001b42e: 4430 add r0, r6 +1001b430: 3102 adds r1, #2 +1001b432: 9a05 ldr r2, [sp, #20] +1001b434: f7fb fffc bl 10017430 +1001b438: 9b05 ldr r3, [sp, #20] +1001b43a: 441e add r6, r3 +1001b43c: 4642 mov r2, r8 +1001b43e: 4631 mov r1, r6 +1001b440: a80c add r0, sp, #48 ; 0x30 +1001b442: f023 fa91 bl 1003e968 <__rtw_check_network_type_veneer> +1001b446: f104 08fc add.w r8, r4, #252 ; 0xfc +1001b44a: fa5f fa80 uxtb.w sl, r0 +1001b44e: 4651 mov r1, sl +1001b450: 4640 mov r0, r8 +1001b452: f023 fa2d bl 1003e8b0 <__rtw_set_supported_rate_veneer> +1001b456: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001b45a: 212a movs r1, #42 ; 0x2a +1001b45c: 4628 mov r0, r5 +1001b45e: aa05 add r2, sp, #20 +1001b460: 3b0c subs r3, #12 +1001b462: f023 f9fd bl 1003e860 <__rtw_get_ie_veneer> +1001b466: 4601 mov r1, r0 +1001b468: b120 cbz r0, 1001b474 +1001b46a: 9b05 ldr r3, [sp, #20] +1001b46c: b113 cbz r3, 1001b474 +1001b46e: 4620 mov r0, r4 +1001b470: f00d fb4c bl 10028b0c +1001b474: f007 0310 and.w r3, r7, #16 +1001b478: b29b uxth r3, r3 +1001b47a: b13b cbz r3, 1001b48c +1001b47c: 2201 movs r2, #1 +1001b47e: 2300 movs r3, #0 +1001b480: f884 20cc strb.w r2, [r4, #204] ; 0xcc +1001b484: e004 b.n 1001b490 +1001b486: bf00 nop +1001b488: 10040f13 .word 0x10040f13 +1001b48c: f884 30cc strb.w r3, [r4, #204] ; 0xcc +1001b490: f884 30cd strb.w r3, [r4, #205] ; 0xcd +1001b494: f884 30ce strb.w r3, [r4, #206] ; 0xce +1001b498: f884 30cf strb.w r3, [r4, #207] ; 0xcf +1001b49c: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001b4a0: 2600 movs r6, #0 +1001b4a2: f8c4 6e44 str.w r6, [r4, #3652] ; 0xe44 +1001b4a6: f8c4 6e4c str.w r6, [r4, #3660] ; 0xe4c +1001b4aa: f8c4 6e54 str.w r6, [r4, #3668] ; 0xe54 +1001b4ae: 4628 mov r0, r5 +1001b4b0: 2130 movs r1, #48 ; 0x30 +1001b4b2: aa05 add r2, sp, #20 +1001b4b4: 3b0c subs r3, #12 +1001b4b6: 9606 str r6, [sp, #24] +1001b4b8: 9607 str r6, [sp, #28] +1001b4ba: f023 f9d1 bl 1003e860 <__rtw_get_ie_veneer> +1001b4be: b1d0 cbz r0, 1001b4f6 +1001b4c0: 9905 ldr r1, [sp, #20] +1001b4c2: b1c1 cbz r1, 1001b4f6 +1001b4c4: 9600 str r6, [sp, #0] +1001b4c6: 3102 adds r1, #2 +1001b4c8: aa06 add r2, sp, #24 +1001b4ca: ab07 add r3, sp, #28 +1001b4cc: f023 fa04 bl 1003e8d8 <__rtw_parse_wpa2_ie_veneer> +1001b4d0: 2801 cmp r0, #1 +1001b4d2: d110 bne.n 1001b4f6 +1001b4d4: 2302 movs r3, #2 +1001b4d6: f8c4 3d08 str.w r3, [r4, #3336] ; 0xd08 +1001b4da: f8d4 3e44 ldr.w r3, [r4, #3652] ; 0xe44 +1001b4de: f8c4 0e40 str.w r0, [r4, #3648] ; 0xe40 +1001b4e2: f043 0302 orr.w r3, r3, #2 +1001b4e6: f8c4 3e44 str.w r3, [r4, #3652] ; 0xe44 +1001b4ea: 9b06 ldr r3, [sp, #24] +1001b4ec: f8c4 3e4c str.w r3, [r4, #3660] ; 0xe4c +1001b4f0: 9b07 ldr r3, [sp, #28] +1001b4f2: f8c4 3e54 str.w r3, [r4, #3668] ; 0xe54 +1001b4f6: 2300 movs r3, #0 +1001b4f8: 9305 str r3, [sp, #20] +1001b4fa: 9306 str r3, [sp, #24] +1001b4fc: 9307 str r3, [sp, #28] +1001b4fe: f8c4 3e48 str.w r3, [r4, #3656] ; 0xe48 +1001b502: f8c4 3e50 str.w r3, [r4, #3664] ; 0xe50 +1001b506: 4628 mov r0, r5 +1001b508: f8d4 6110 ldr.w r6, [r4, #272] ; 0x110 +1001b50c: 9b05 ldr r3, [sp, #20] +1001b50e: 3e0e subs r6, #14 +1001b510: 1af3 subs r3, r6, r3 +1001b512: 21dd movs r1, #221 ; 0xdd +1001b514: aa05 add r2, sp, #20 +1001b516: f023 f9a3 bl 1003e860 <__rtw_get_ie_veneer> +1001b51a: 4606 mov r6, r0 +1001b51c: b318 cbz r0, 1001b566 +1001b51e: a908 add r1, sp, #32 +1001b520: 3002 adds r0, #2 +1001b522: 2204 movs r2, #4 +1001b524: f7fb ff8c bl 10017440 +1001b528: 9905 ldr r1, [sp, #20] +1001b52a: 2800 cmp r0, #0 +1001b52c: f000 824b beq.w 1001b9c6 +1001b530: 2300 movs r3, #0 +1001b532: 9300 str r3, [sp, #0] +1001b534: 4630 mov r0, r6 +1001b536: 3102 adds r1, #2 +1001b538: aa06 add r2, sp, #24 +1001b53a: ab07 add r3, sp, #28 +1001b53c: f023 f9ec bl 1003e918 <__rtw_parse_wpa_ie_veneer> +1001b540: 2801 cmp r0, #1 +1001b542: d110 bne.n 1001b566 +1001b544: 2302 movs r3, #2 +1001b546: f8c4 3d08 str.w r3, [r4, #3336] ; 0xd08 +1001b54a: f8d4 3e44 ldr.w r3, [r4, #3652] ; 0xe44 +1001b54e: f8c4 0e40 str.w r0, [r4, #3648] ; 0xe40 +1001b552: f043 0301 orr.w r3, r3, #1 +1001b556: f8c4 3e44 str.w r3, [r4, #3652] ; 0xe44 +1001b55a: 9b06 ldr r3, [sp, #24] +1001b55c: f8c4 3e48 str.w r3, [r4, #3656] ; 0xe48 +1001b560: 9b07 ldr r3, [sp, #28] +1001b562: f8c4 3e50 str.w r3, [r4, #3664] ; 0xe50 +1001b566: 2300 movs r3, #0 +1001b568: f504 5b9c add.w fp, r4, #4992 ; 0x1380 +1001b56c: f8c4 344c str.w r3, [r4, #1100] ; 0x44c +1001b570: f10b 0b08 add.w fp, fp, #8 +1001b574: 9305 str r3, [sp, #20] +1001b576: f89b 303d ldrb.w r3, [fp, #61] ; 0x3d +1001b57a: b1d3 cbz r3, 1001b5b2 +1001b57c: 4628 mov r0, r5 +1001b57e: f8d4 6110 ldr.w r6, [r4, #272] ; 0x110 +1001b582: 9b05 ldr r3, [sp, #20] +1001b584: 3e0e subs r6, #14 +1001b586: 1af3 subs r3, r6, r3 +1001b588: 21dd movs r1, #221 ; 0xdd +1001b58a: aa05 add r2, sp, #20 +1001b58c: f023 f968 bl 1003e860 <__rtw_get_ie_veneer> +1001b590: 4606 mov r6, r0 +1001b592: b170 cbz r0, 1001b5b2 +1001b594: 3002 adds r0, #2 +1001b596: 49a1 ldr r1, [pc, #644] ; (1001b81c ) +1001b598: 2206 movs r2, #6 +1001b59a: f7fb ff51 bl 10017440 +1001b59e: 2800 cmp r0, #0 +1001b5a0: f000 8217 beq.w 1001b9d2 +1001b5a4: 2301 movs r3, #1 +1001b5a6: f8c4 344c str.w r3, [r4, #1100] ; 0x44c +1001b5aa: 7a33 ldrb r3, [r6, #8] +1001b5ac: f063 037f orn r3, r3, #127 ; 0x7f +1001b5b0: 7233 strb r3, [r6, #8] +1001b5b2: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001b5b6: 4628 mov r0, r5 +1001b5b8: 212d movs r1, #45 ; 0x2d +1001b5ba: aa05 add r2, sp, #20 +1001b5bc: 3b0c subs r3, #12 +1001b5be: f023 f94f bl 1003e860 <__rtw_get_ie_veneer> +1001b5c2: 4606 mov r6, r0 +1001b5c4: b320 cbz r0, 1001b610 +1001b5c6: 9f05 ldr r7, [sp, #20] +1001b5c8: b327 cbz r7, 1001b614 +1001b5ca: 2117 movs r1, #23 +1001b5cc: 4620 mov r0, r4 +1001b5ce: aa0b add r2, sp, #44 ; 0x2c +1001b5d0: f016 ff96 bl 10032500 +1001b5d4: f8d4 3e50 ldr.w r3, [r4, #3664] ; 0xe50 +1001b5d8: f04a 0a08 orr.w sl, sl, #8 +1001b5dc: 06d9 lsls r1, r3, #27 +1001b5de: d403 bmi.n 1001b5e8 +1001b5e0: f8d4 3e54 ldr.w r3, [r4, #3668] ; 0xe54 +1001b5e4: 06da lsls r2, r3, #27 +1001b5e6: d503 bpl.n 1001b5f0 +1001b5e8: 7933 ldrb r3, [r6, #4] +1001b5ea: f043 031c orr.w r3, r3, #28 +1001b5ee: 7133 strb r3, [r6, #4] +1001b5f0: f89d 302c ldrb.w r3, [sp, #44] ; 0x2c +1001b5f4: 2b03 cmp r3, #3 +1001b5f6: d103 bne.n 1001b600 +1001b5f8: 23ff movs r3, #255 ; 0xff +1001b5fa: 7173 strb r3, [r6, #5] +1001b5fc: 2300 movs r3, #0 +1001b5fe: 71b3 strb r3, [r6, #6] +1001b600: f204 4062 addw r0, r4, #1122 ; 0x462 +1001b604: 1cb1 adds r1, r6, #2 +1001b606: 9a05 ldr r2, [sp, #20] +1001b608: f7fb ff12 bl 10017430 +1001b60c: 2701 movs r7, #1 +1001b60e: e002 b.n 1001b616 +1001b610: 4607 mov r7, r0 +1001b612: e000 b.n 1001b616 +1001b614: 463e mov r6, r7 +1001b616: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001b61a: aa05 add r2, sp, #20 +1001b61c: 4628 mov r0, r5 +1001b61e: 213d movs r1, #61 ; 0x3d +1001b620: 3b0c subs r3, #12 +1001b622: f023 f91d bl 1003e860 <__rtw_get_ie_veneer> +1001b626: 4602 mov r2, r0 +1001b628: b118 cbz r0, 1001b632 +1001b62a: 9b05 ldr r3, [sp, #20] +1001b62c: 2b00 cmp r3, #0 +1001b62e: bf08 it eq +1001b630: 2200 moveq r2, #0 +1001b632: f10a 31ff add.w r1, sl, #4294967295 +1001b636: b2c9 uxtb r1, r1 +1001b638: 290a cmp r1, #10 +1001b63a: d817 bhi.n 1001b66c +1001b63c: f04f 0e01 mov.w lr, #1 +1001b640: fa0e f101 lsl.w r1, lr, r1 +1001b644: f240 6306 movw r3, #1542 ; 0x606 +1001b648: 400b ands r3, r1 +1001b64a: b97b cbnz r3, 1001b66c +1001b64c: f011 0008 ands.w r0, r1, #8 +1001b650: d10a bne.n 1001b668 +1001b652: 07cb lsls r3, r1, #31 +1001b654: d50a bpl.n 1001b66c +1001b656: f884 e0d4 strb.w lr, [r4, #212] ; 0xd4 +1001b65a: f884 00d5 strb.w r0, [r4, #213] ; 0xd5 +1001b65e: f884 00d6 strb.w r0, [r4, #214] ; 0xd6 +1001b662: f884 00d7 strb.w r0, [r4, #215] ; 0xd7 +1001b666: e00b b.n 1001b680 +1001b668: 2102 movs r1, #2 +1001b66a: e001 b.n 1001b670 +1001b66c: 2300 movs r3, #0 +1001b66e: 2103 movs r1, #3 +1001b670: f884 10d4 strb.w r1, [r4, #212] ; 0xd4 +1001b674: f884 30d5 strb.w r3, [r4, #213] ; 0xd5 +1001b678: f884 30d6 strb.w r3, [r4, #214] ; 0xd6 +1001b67c: f884 30d7 strb.w r3, [r4, #215] ; 0xd7 +1001b680: 2300 movs r3, #0 +1001b682: f8c4 a084 str.w sl, [r4, #132] ; 0x84 +1001b686: f8c4 3454 str.w r3, [r4, #1108] ; 0x454 +1001b68a: f89b 3044 ldrb.w r3, [fp, #68] ; 0x44 +1001b68e: b1ab cbz r3, 1001b6bc +1001b690: 2f01 cmp r7, #1 +1001b692: d113 bne.n 1001b6bc +1001b694: f8c4 7454 str.w r7, [r4, #1108] ; 0x454 +1001b698: f8c4 744c str.w r7, [r4, #1100] ; 0x44c +1001b69c: f89b 3045 ldrb.w r3, [fp, #69] ; 0x45 +1001b6a0: 4620 mov r0, r4 +1001b6a2: 2b01 cmp r3, #1 +1001b6a4: 4631 mov r1, r6 +1001b6a6: bf08 it eq +1001b6a8: f8c4 7458 streq.w r7, [r4, #1112] ; 0x458 +1001b6ac: 9203 str r2, [sp, #12] +1001b6ae: f00d f9af bl 10028a10 +1001b6b2: 9a03 ldr r2, [sp, #12] +1001b6b4: 4620 mov r0, r4 +1001b6b6: 4611 mov r1, r2 +1001b6b8: f00d f9fa bl 10028ab0 +1001b6bc: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001b6c0: 46a2 mov sl, r4 +1001b6c2: 337c adds r3, #124 ; 0x7c +1001b6c4: f84a 3f98 str.w r3, [sl, #152]! +1001b6c8: f8d4 30dc ldr.w r3, [r4, #220] ; 0xdc +1001b6cc: f8d4 60e4 ldr.w r6, [r4, #228] ; 0xe4 +1001b6d0: f8ad 3012 strh.w r3, [sp, #18] +1001b6d4: f894 3858 ldrb.w r3, [r4, #2136] ; 0x858 +1001b6d8: b2f6 uxtb r6, r6 +1001b6da: 2b01 cmp r3, #1 +1001b6dc: f8d4 344c ldr.w r3, [r4, #1100] ; 0x44c +1001b6e0: bf1a itte ne +1001b6e2: f04f 0b01 movne.w fp, #1 +1001b6e6: f884 b858 strbne.w fp, [r4, #2136] ; 0x858 +1001b6ea: f04f 0b00 moveq.w fp, #0 +1001b6ee: b113 cbz r3, 1001b6f6 +1001b6f0: 2301 movs r3, #1 +1001b6f2: f884 3731 strb.w r3, [r4, #1841] ; 0x731 +1001b6f6: f8d4 3454 ldr.w r3, [r4, #1108] ; 0x454 +1001b6fa: b1ab cbz r3, 1001b728 +1001b6fc: 2301 movs r3, #1 +1001b6fe: f884 3731 strb.w r3, [r4, #1841] ; 0x731 +1001b702: f884 3734 strb.w r3, [r4, #1844] ; 0x734 +1001b706: f894 375c ldrb.w r3, [r4, #1884] ; 0x75c +1001b70a: aa10 add r2, sp, #64 ; 0x40 +1001b70c: f3c3 0382 ubfx r3, r3, #2, #3 +1001b710: f802 3d14 strb.w r3, [r2, #-20]! +1001b714: 4620 mov r0, r4 +1001b716: 2125 movs r1, #37 ; 0x25 +1001b718: f016 feeb bl 100324f2 +1001b71c: f8b4 375a ldrh.w r3, [r4, #1882] ; 0x75a +1001b720: f3c3 0381 ubfx r3, r3, #2, #2 +1001b724: f884 373a strb.w r3, [r4, #1850] ; 0x73a +1001b728: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 +1001b72c: 2b01 cmp r3, #1 +1001b72e: d002 beq.n 1001b736 +1001b730: 4620 mov r0, r4 +1001b732: f00d f8c5 bl 100288c0 +1001b736: 4620 mov r0, r4 +1001b738: 2103 movs r1, #3 +1001b73a: f00c ff83 bl 10028644 +1001b73e: 4620 mov r0, r4 +1001b740: 2104 movs r1, #4 +1001b742: 464a mov r2, r9 +1001b744: f016 fed5 bl 100324f2 +1001b748: 4b35 ldr r3, [pc, #212] ; (1001b820 ) +1001b74a: af10 add r7, sp, #64 ; 0x40 +1001b74c: f847 3d1c str.w r3, [r7, #-28]! +1001b750: 4620 mov r0, r4 +1001b752: 2120 movs r1, #32 +1001b754: 463a mov r2, r7 +1001b756: 9303 str r3, [sp, #12] +1001b758: f016 fecb bl 100324f2 +1001b75c: 4a31 ldr r2, [pc, #196] ; (1001b824 ) +1001b75e: 4620 mov r0, r4 +1001b760: 9209 str r2, [sp, #36] ; 0x24 +1001b762: 2121 movs r1, #33 ; 0x21 +1001b764: 463a mov r2, r7 +1001b766: f016 fec4 bl 100324f2 +1001b76a: 9b03 ldr r3, [sp, #12] +1001b76c: 4620 mov r0, r4 +1001b76e: 2122 movs r1, #34 ; 0x22 +1001b770: 463a mov r2, r7 +1001b772: 9309 str r3, [sp, #36] ; 0x24 +1001b774: f016 febd bl 100324f2 +1001b778: f24a 4344 movw r3, #42052 ; 0xa444 +1001b77c: 4620 mov r0, r4 +1001b77e: 2123 movs r1, #35 ; 0x23 +1001b780: 463a mov r2, r7 +1001b782: 9309 str r3, [sp, #36] ; 0x24 +1001b784: f016 feb5 bl 100324f2 +1001b788: f8d4 3d08 ldr.w r3, [r4, #3336] ; 0xd08 +1001b78c: 4620 mov r0, r4 +1001b78e: 2b02 cmp r3, #2 +1001b790: bf14 ite ne +1001b792: 23cf movne r3, #207 ; 0xcf +1001b794: 23cc moveq r3, #204 ; 0xcc +1001b796: f88d 3011 strb.w r3, [sp, #17] +1001b79a: 6863 ldr r3, [r4, #4] +1001b79c: 2114 movs r1, #20 +1001b79e: 2b03 cmp r3, #3 +1001b7a0: bf08 it eq +1001b7a2: 232c moveq r3, #44 ; 0x2c +1001b7a4: f10d 0211 add.w r2, sp, #17 +1001b7a8: bf08 it eq +1001b7aa: f88d 3011 strbeq.w r3, [sp, #17] +1001b7ae: f016 fea0 bl 100324f2 +1001b7b2: f10d 0212 add.w r2, sp, #18 +1001b7b6: 4620 mov r0, r4 +1001b7b8: 2110 movs r1, #16 +1001b7ba: f016 fe9a bl 100324f2 +1001b7be: 4620 mov r0, r4 +1001b7c0: 4641 mov r1, r8 +1001b7c2: f00c fee8 bl 10028596 +1001b7c6: 4620 mov r0, r4 +1001b7c8: 2106 movs r1, #6 +1001b7ca: 4642 mov r2, r8 +1001b7cc: f016 fe91 bl 100324f2 +1001b7d0: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 +1001b7d4: 2b01 cmp r3, #1 +1001b7d6: d005 beq.n 1001b7e4 +1001b7d8: 4620 mov r0, r4 +1001b7da: f06f 4170 mvn.w r1, #4026531840 ; 0xf0000000 +1001b7de: 2201 movs r2, #1 +1001b7e0: f00c ff22 bl 10028628 +1001b7e4: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001b7e8: 4628 mov r0, r5 +1001b7ea: 213d movs r1, #61 ; 0x3d +1001b7ec: aa0a add r2, sp, #40 ; 0x28 +1001b7ee: 3b0c subs r3, #12 +1001b7f0: f023 f836 bl 1003e860 <__rtw_get_ie_veneer> +1001b7f4: b118 cbz r0, 1001b7fe +1001b7f6: 9f0a ldr r7, [sp, #40] ; 0x28 +1001b7f8: b117 cbz r7, 1001b800 +1001b7fa: 1c87 adds r7, r0, #2 +1001b7fc: e000 b.n 1001b800 +1001b7fe: 4607 mov r7, r0 +1001b800: 4620 mov r0, r4 +1001b802: f640 0181 movw r1, #2177 ; 0x881 +1001b806: f002 fec1 bl 1001e58c +1001b80a: 4602 mov r2, r0 +1001b80c: 4620 mov r0, r4 +1001b80e: b95a cbnz r2, 1001b828 +1001b810: 4631 mov r1, r6 +1001b812: 4613 mov r3, r2 +1001b814: f00c ff82 bl 1002871c +1001b818: e020 b.n 1001b85c +1001b81a: bf00 nop +1001b81c: 10041558 .word 0x10041558 +1001b820: 005ea42b .word 0x005ea42b +1001b824: 005e4317 .word 0x005e4317 +1001b828: 2101 movs r1, #1 +1001b82a: f002 feaf bl 1001e58c +1001b82e: 2801 cmp r0, #1 +1001b830: d114 bne.n 1001b85c +1001b832: f641 035c movw r3, #6236 ; 0x185c +1001b836: 58e3 ldr r3, [r4, r3] +1001b838: 4628 mov r0, r5 +1001b83a: f893 651e ldrb.w r6, [r3, #1310] ; 0x51e +1001b83e: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001b842: f8c4 60e4 str.w r6, [r4, #228] ; 0xe4 +1001b846: 2103 movs r1, #3 +1001b848: aa0a add r2, sp, #40 ; 0x28 +1001b84a: 3b0c subs r3, #12 +1001b84c: f023 f808 bl 1003e860 <__rtw_get_ie_veneer> +1001b850: b110 cbz r0, 1001b858 +1001b852: 9b0a ldr r3, [sp, #40] ; 0x28 +1001b854: b103 cbz r3, 1001b858 +1001b856: 7086 strb r6, [r0, #2] +1001b858: b107 cbz r7, 1001b85c +1001b85a: 703e strb r6, [r7, #0] +1001b85c: f8d4 3084 ldr.w r3, [r4, #132] ; 0x84 +1001b860: 2500 movs r5, #0 +1001b862: f884 3521 strb.w r3, [r4, #1313] ; 0x521 +1001b866: 4620 mov r0, r4 +1001b868: f884 651e strb.w r6, [r4, #1310] ; 0x51e +1001b86c: f884 551f strb.w r5, [r4, #1311] ; 0x51f +1001b870: f884 5520 strb.w r5, [r4, #1312] ; 0x520 +1001b874: f00d fc98 bl 100291a8 +1001b878: 4650 mov r0, sl +1001b87a: f001 feab bl 1001d5d4 +1001b87e: 4601 mov r1, r0 +1001b880: 4620 mov r0, r4 +1001b882: f00d fc52 bl 1002912a +1001b886: f1bb 0f00 cmp.w fp, #0 +1001b88a: d005 beq.n 1001b898 +1001b88c: 4620 mov r0, r4 +1001b88e: 2105 movs r1, #5 +1001b890: 462a mov r2, r5 +1001b892: 462b mov r3, r5 +1001b894: f7ff fbc8 bl 1001b028 +1001b898: 4620 mov r0, r4 +1001b89a: f00c fd61 bl 10028360 +1001b89e: 4605 mov r5, r0 +1001b8a0: 2800 cmp r0, #0 +1001b8a2: d069 beq.n 1001b978 +1001b8a4: 2600 movs r6, #0 +1001b8a6: f04f 0a01 mov.w sl, #1 +1001b8aa: f8c0 60fc str.w r6, [r0, #252] ; 0xfc +1001b8ae: f8c0 a100 str.w sl, [r0, #256] ; 0x100 +1001b8b2: f8c0 6104 str.w r6, [r0, #260] ; 0x104 +1001b8b6: f8c0 61f4 str.w r6, [r0, #500] ; 0x1f4 +1001b8ba: f8c0 6110 str.w r6, [r0, #272] ; 0x110 +1001b8be: 4631 mov r1, r6 +1001b8c0: 2248 movs r2, #72 ; 0x48 +1001b8c2: f500 70c0 add.w r0, r0, #384 ; 0x180 +1001b8c6: f7fb fdc3 bl 10017450 +1001b8ca: 4640 mov r0, r8 +1001b8cc: f023 f818 bl 1003e900 <__rtw_get_rateset_len_veneer> +1001b8d0: 4607 mov r7, r0 +1001b8d2: 4639 mov r1, r7 +1001b8d4: 4652 mov r2, sl +1001b8d6: 4640 mov r0, r8 +1001b8d8: f023 f846 bl 1003e968 <__rtw_check_network_type_veneer> +1001b8dc: f505 70ac add.w r0, r5, #344 ; 0x158 +1001b8e0: 4641 mov r1, r8 +1001b8e2: 463a mov r2, r7 +1001b8e4: f7fb fda4 bl 10017430 +1001b8e8: f8c5 7168 str.w r7, [r5, #360] ; 0x168 +1001b8ec: 42be cmp r6, r7 +1001b8ee: da09 bge.n 1001b904 +1001b8f0: 19ab adds r3, r5, r6 +1001b8f2: f893 0158 ldrb.w r0, [r3, #344] ; 0x158 +1001b8f6: b118 cbz r0, 1001b900 +1001b8f8: f000 007f and.w r0, r0, #127 ; 0x7f +1001b8fc: f023 f81c bl 1003e938 <__rtw_get_bit_value_from_ieee_value_veneer> +1001b900: 3601 adds r6, #1 +1001b902: e7f3 b.n 1001b8ec +1001b904: f8d4 30e4 ldr.w r3, [r4, #228] ; 0xe4 +1001b908: 4620 mov r0, r4 +1001b90a: 2b0f cmp r3, #15 +1001b90c: bf34 ite cc +1001b90e: 2101 movcc r1, #1 +1001b910: 2104 movcs r1, #4 +1001b912: bf34 ite cc +1001b914: f04f 080f movcc.w r8, #15 +1001b918: f44f 78a8 movcs.w r8, #336 ; 0x150 +1001b91c: f00c fd8e bl 1002843c +1001b920: 4607 mov r7, r0 +1001b922: 4640 mov r0, r8 +1001b924: f00d fb17 bl 10028f56 +1001b928: 2100 movs r1, #0 +1001b92a: 4682 mov sl, r0 +1001b92c: 462a mov r2, r5 +1001b92e: 4620 mov r0, r4 +1001b930: 2301 movs r3, #1 +1001b932: f016 fdfe bl 10032532 +1001b936: f8d5 3100 ldr.w r3, [r5, #256] ; 0x100 +1001b93a: ae10 add r6, sp, #64 ; 0x40 +1001b93c: f003 031f and.w r3, r3, #31 +1001b940: f063 037f orn r3, r3, #127 ; 0x7f +1001b944: f806 3d14 strb.w r3, [r6, #-20]! +1001b948: 4620 mov r0, r4 +1001b94a: 2300 movs r3, #0 +1001b94c: ea48 7107 orr.w r1, r8, r7, lsl #28 +1001b950: 4632 mov r2, r6 +1001b952: f00a 0a3f and.w sl, sl, #63 ; 0x3f +1001b956: f016 fe6e bl 10032636 +1001b95a: 4628 mov r0, r5 +1001b95c: 4631 mov r1, r6 +1001b95e: f885 7176 strb.w r7, [r5, #374] ; 0x176 +1001b962: f885 a177 strb.w sl, [r5, #375] ; 0x177 +1001b966: f7fb fe3f bl 100175e8 +1001b96a: 2301 movs r3, #1 +1001b96c: f8c5 30f8 str.w r3, [r5, #248] ; 0xf8 +1001b970: 4628 mov r0, r5 +1001b972: 4631 mov r1, r6 +1001b974: f7fb fe42 bl 100175fc +1001b978: 6863 ldr r3, [r4, #4] +1001b97a: 2b03 cmp r3, #3 +1001b97c: d108 bne.n 1001b990 +1001b97e: 4620 mov r0, r4 +1001b980: f006 fbc8 bl 10022114 +1001b984: b120 cbz r0, 1001b990 +1001b986: 4620 mov r0, r4 +1001b988: 2148 movs r1, #72 ; 0x48 +1001b98a: 2200 movs r2, #0 +1001b98c: f016 fdb1 bl 100324f2 +1001b990: f504 6546 add.w r5, r4, #3168 ; 0xc60 +1001b994: 4628 mov r0, r5 +1001b996: 4649 mov r1, r9 +1001b998: f00c fc8c bl 100282b4 +1001b99c: b930 cbnz r0, 1001b9ac +1001b99e: 4628 mov r0, r5 +1001b9a0: 4649 mov r1, r9 +1001b9a2: f00c fb3f bl 10028024 +1001b9a6: 2800 cmp r0, #0 +1001b9a8: f43f acab beq.w 1001b302 +1001b9ac: f8d0 30f8 ldr.w r3, [r0, #248] ; 0xf8 +1001b9b0: f043 0310 orr.w r3, r3, #16 +1001b9b4: f8c0 30f8 str.w r3, [r0, #248] ; 0xf8 +1001b9b8: 4620 mov r0, r4 +1001b9ba: f002 f842 bl 1001da42 +1001b9be: 2001 movs r0, #1 +1001b9c0: f8c4 0094 str.w r0, [r4, #148] ; 0x94 +1001b9c4: e00c b.n 1001b9e0 +1001b9c6: 2900 cmp r1, #0 +1001b9c8: f43f adcd beq.w 1001b566 +1001b9cc: 3102 adds r1, #2 +1001b9ce: 1870 adds r0, r6, r1 +1001b9d0: e59a b.n 1001b508 +1001b9d2: 9805 ldr r0, [sp, #20] +1001b9d4: 2800 cmp r0, #0 +1001b9d6: f43f adec beq.w 1001b5b2 +1001b9da: 3002 adds r0, #2 +1001b9dc: 4430 add r0, r6 +1001b9de: e5ce b.n 1001b57e +1001b9e0: b011 add sp, #68 ; 0x44 +1001b9e2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1001b9e6: bf00 nop + +1001b9e8 : +1001b9e8: 2901 cmp r1, #1 +1001b9ea: d101 bne.n 1001b9f0 +1001b9ec: f7ff b9fb b.w 1001ade6 +1001b9f0: 4770 bx lr + +1001b9f2 : +1001b9f2: b570 push {r4, r5, r6, lr} +1001b9f4: f8d1 32c8 ldr.w r3, [r1, #712] ; 0x2c8 +1001b9f8: 4604 mov r4, r0 +1001b9fa: f013 0f80 tst.w r3, #128 ; 0x80 +1001b9fe: 460d mov r5, r1 +1001ba00: f891 3307 ldrb.w r3, [r1, #775] ; 0x307 +1001ba04: d119 bne.n 1001ba3a +1001ba06: b10b cbz r3, 1001ba0c +1001ba08: 2600 movs r6, #0 +1001ba0a: e028 b.n 1001ba5e +1001ba0c: 2301 movs r3, #1 +1001ba0e: f881 3307 strb.w r3, [r1, #775] ; 0x307 +1001ba12: f8b0 34b8 ldrh.w r3, [r0, #1208] ; 0x4b8 +1001ba16: f890 2521 ldrb.w r2, [r0, #1313] ; 0x521 +1001ba1a: 3301 adds r3, #1 +1001ba1c: b29b uxth r3, r3 +1001ba1e: 2a01 cmp r2, #1 +1001ba20: f8a0 34b8 strh.w r3, [r0, #1208] ; 0x4b8 +1001ba24: d9f0 bls.n 1001ba08 +1001ba26: 2b01 cmp r3, #1 +1001ba28: d1ee bne.n 1001ba08 +1001ba2a: 4620 mov r0, r4 +1001ba2c: 21ff movs r1, #255 ; 0xff +1001ba2e: 2200 movs r2, #0 +1001ba30: 2301 movs r3, #1 +1001ba32: f7ff faf9 bl 1001b028 +1001ba36: 2601 movs r6, #1 +1001ba38: e011 b.n 1001ba5e +1001ba3a: 2b00 cmp r3, #0 +1001ba3c: d0e4 beq.n 1001ba08 +1001ba3e: 2300 movs r3, #0 +1001ba40: f881 3307 strb.w r3, [r1, #775] ; 0x307 +1001ba44: f8b0 34b8 ldrh.w r3, [r0, #1208] ; 0x4b8 +1001ba48: f890 2521 ldrb.w r2, [r0, #1313] ; 0x521 +1001ba4c: 3b01 subs r3, #1 +1001ba4e: b29b uxth r3, r3 +1001ba50: 2a01 cmp r2, #1 +1001ba52: f8a0 34b8 strh.w r3, [r0, #1208] ; 0x4b8 +1001ba56: d9d7 bls.n 1001ba08 +1001ba58: 2b00 cmp r3, #0 +1001ba5a: d1d5 bne.n 1001ba08 +1001ba5c: e7e5 b.n 1001ba2a +1001ba5e: f8d5 32c8 ldr.w r3, [r5, #712] ; 0x2c8 +1001ba62: 2b00 cmp r3, #0 +1001ba64: f895 3305 ldrb.w r3, [r5, #773] ; 0x305 +1001ba68: da13 bge.n 1001ba92 +1001ba6a: b9f3 cbnz r3, 1001baaa +1001ba6c: 2301 movs r3, #1 +1001ba6e: f885 3305 strb.w r3, [r5, #773] ; 0x305 +1001ba72: f8b4 34b4 ldrh.w r3, [r4, #1204] ; 0x4b4 +1001ba76: 3301 adds r3, #1 +1001ba78: b29b uxth r3, r3 +1001ba7a: 2b01 cmp r3, #1 +1001ba7c: f8a4 34b4 strh.w r3, [r4, #1204] ; 0x4b4 +1001ba80: d113 bne.n 1001baaa +1001ba82: 4620 mov r0, r4 +1001ba84: 212a movs r1, #42 ; 0x2a +1001ba86: 2200 movs r2, #0 +1001ba88: 2301 movs r3, #1 +1001ba8a: f7ff facd bl 1001b028 +1001ba8e: 2601 movs r6, #1 +1001ba90: e00b b.n 1001baaa +1001ba92: b153 cbz r3, 1001baaa +1001ba94: 2300 movs r3, #0 +1001ba96: f885 3305 strb.w r3, [r5, #773] ; 0x305 +1001ba9a: f8b4 34b4 ldrh.w r3, [r4, #1204] ; 0x4b4 +1001ba9e: 3b01 subs r3, #1 +1001baa0: b29b uxth r3, r3 +1001baa2: f8a4 34b4 strh.w r3, [r4, #1204] ; 0x4b4 +1001baa6: 2b00 cmp r3, #0 +1001baa8: d0eb beq.n 1001ba82 +1001baaa: f8b5 32c4 ldrh.w r3, [r5, #708] ; 0x2c4 +1001baae: f413 6f80 tst.w r3, #1024 ; 0x400 +1001bab2: f895 3306 ldrb.w r3, [r5, #774] ; 0x306 +1001bab6: d117 bne.n 1001bae8 +1001bab8: bb33 cbnz r3, 1001bb08 +1001baba: 2301 movs r3, #1 +1001babc: f885 3306 strb.w r3, [r5, #774] ; 0x306 +1001bac0: f8b4 34b6 ldrh.w r3, [r4, #1206] ; 0x4b6 +1001bac4: f894 2521 ldrb.w r2, [r4, #1313] ; 0x521 +1001bac8: 3301 adds r3, #1 +1001baca: b29b uxth r3, r3 +1001bacc: 2a01 cmp r2, #1 +1001bace: f8a4 34b6 strh.w r3, [r4, #1206] ; 0x4b6 +1001bad2: d919 bls.n 1001bb08 +1001bad4: 2b01 cmp r3, #1 +1001bad6: d117 bne.n 1001bb08 +1001bad8: 4620 mov r0, r4 +1001bada: 21ff movs r1, #255 ; 0xff +1001badc: 2200 movs r2, #0 +1001bade: 2301 movs r3, #1 +1001bae0: f7ff faa2 bl 1001b028 +1001bae4: 2601 movs r6, #1 +1001bae6: e00f b.n 1001bb08 +1001bae8: b173 cbz r3, 1001bb08 +1001baea: 2300 movs r3, #0 +1001baec: f885 3306 strb.w r3, [r5, #774] ; 0x306 +1001baf0: f8b4 34b6 ldrh.w r3, [r4, #1206] ; 0x4b6 +1001baf4: f894 2521 ldrb.w r2, [r4, #1313] ; 0x521 +1001baf8: 3b01 subs r3, #1 +1001bafa: b29b uxth r3, r3 +1001bafc: 2a01 cmp r2, #1 +1001bafe: f8a4 34b6 strh.w r3, [r4, #1206] ; 0x4b6 +1001bb02: d901 bls.n 1001bb08 +1001bb04: 2b00 cmp r3, #0 +1001bb06: d0e7 beq.n 1001bad8 +1001bb08: f8d5 32c8 ldr.w r3, [r5, #712] ; 0x2c8 +1001bb0c: f413 6f00 tst.w r3, #2048 ; 0x800 +1001bb10: f895 3309 ldrb.w r3, [r5, #777] ; 0x309 +1001bb14: d025 beq.n 1001bb62 +1001bb16: f8b5 2202 ldrh.w r2, [r5, #514] ; 0x202 +1001bb1a: b13b cbz r3, 1001bb2c +1001bb1c: 2300 movs r3, #0 +1001bb1e: f885 3309 strb.w r3, [r5, #777] ; 0x309 +1001bb22: f8b4 3450 ldrh.w r3, [r4, #1104] ; 0x450 +1001bb26: 3b01 subs r3, #1 +1001bb28: f8a4 3450 strh.w r3, [r4, #1104] ; 0x450 +1001bb2c: 06d1 lsls r1, r2, #27 +1001bb2e: d40a bmi.n 1001bb46 +1001bb30: f895 3308 ldrb.w r3, [r5, #776] ; 0x308 +1001bb34: b93b cbnz r3, 1001bb46 +1001bb36: 2301 movs r3, #1 +1001bb38: f885 3308 strb.w r3, [r5, #776] ; 0x308 +1001bb3c: f8b4 34ba ldrh.w r3, [r4, #1210] ; 0x4ba +1001bb40: 3301 adds r3, #1 +1001bb42: f8a4 34ba strh.w r3, [r4, #1210] ; 0x4ba +1001bb46: 0793 lsls r3, r2, #30 +1001bb48: d414 bmi.n 1001bb74 +1001bb4a: f895 330a ldrb.w r3, [r5, #778] ; 0x30a +1001bb4e: b98b cbnz r3, 1001bb74 +1001bb50: 2301 movs r3, #1 +1001bb52: f885 330a strb.w r3, [r5, #778] ; 0x30a +1001bb56: f8b4 34bc ldrh.w r3, [r4, #1212] ; 0x4bc +1001bb5a: 3301 adds r3, #1 +1001bb5c: f8a4 34bc strh.w r3, [r4, #1212] ; 0x4bc +1001bb60: e008 b.n 1001bb74 +1001bb62: b93b cbnz r3, 1001bb74 +1001bb64: 2301 movs r3, #1 +1001bb66: f885 3309 strb.w r3, [r5, #777] ; 0x309 +1001bb6a: f8b4 3450 ldrh.w r3, [r4, #1104] ; 0x450 +1001bb6e: 3301 adds r3, #1 +1001bb70: f8a4 3450 strh.w r3, [r4, #1104] ; 0x450 +1001bb74: 4620 mov r0, r4 +1001bb76: f7ff f8dd bl 1001ad34 +1001bb7a: 2800 cmp r0, #0 +1001bb7c: dd0b ble.n 1001bb96 +1001bb7e: 2200 movs r2, #0 +1001bb80: 4613 mov r3, r2 +1001bb82: 4620 mov r0, r4 +1001bb84: 212d movs r1, #45 ; 0x2d +1001bb86: f7ff fa4f bl 1001b028 +1001bb8a: 4620 mov r0, r4 +1001bb8c: 213d movs r1, #61 ; 0x3d +1001bb8e: 2200 movs r2, #0 +1001bb90: 2301 movs r3, #1 +1001bb92: f7ff fa49 bl 1001b028 +1001bb96: 4620 mov r0, r4 +1001bb98: 4631 mov r1, r6 +1001bb9a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1001bb9e: f7ff bf23 b.w 1001b9e8 + +1001bba2 : +1001bba2: b570 push {r4, r5, r6, lr} +1001bba4: 4604 mov r4, r0 +1001bba6: 460d mov r5, r1 +1001bba8: 2900 cmp r1, #0 +1001bbaa: d075 beq.n 1001bc98 +1001bbac: f891 3307 ldrb.w r3, [r1, #775] ; 0x307 +1001bbb0: b90b cbnz r3, 1001bbb6 +1001bbb2: 2600 movs r6, #0 +1001bbb4: e013 b.n 1001bbde +1001bbb6: 2300 movs r3, #0 +1001bbb8: f881 3307 strb.w r3, [r1, #775] ; 0x307 +1001bbbc: f8b0 24b8 ldrh.w r2, [r0, #1208] ; 0x4b8 +1001bbc0: f890 3521 ldrb.w r3, [r0, #1313] ; 0x521 +1001bbc4: 3a01 subs r2, #1 +1001bbc6: b292 uxth r2, r2 +1001bbc8: 2b01 cmp r3, #1 +1001bbca: f8a0 24b8 strh.w r2, [r0, #1208] ; 0x4b8 +1001bbce: d9f0 bls.n 1001bbb2 +1001bbd0: 2a00 cmp r2, #0 +1001bbd2: d1ee bne.n 1001bbb2 +1001bbd4: 21ff movs r1, #255 ; 0xff +1001bbd6: 2301 movs r3, #1 +1001bbd8: f7ff fa26 bl 1001b028 +1001bbdc: 2601 movs r6, #1 +1001bbde: f895 3305 ldrb.w r3, [r5, #773] ; 0x305 +1001bbe2: b17b cbz r3, 1001bc04 +1001bbe4: 2300 movs r3, #0 +1001bbe6: f885 3305 strb.w r3, [r5, #773] ; 0x305 +1001bbea: f8b4 24b4 ldrh.w r2, [r4, #1204] ; 0x4b4 +1001bbee: 3a01 subs r2, #1 +1001bbf0: b292 uxth r2, r2 +1001bbf2: f8a4 24b4 strh.w r2, [r4, #1204] ; 0x4b4 +1001bbf6: b92a cbnz r2, 1001bc04 +1001bbf8: 4620 mov r0, r4 +1001bbfa: 212a movs r1, #42 ; 0x2a +1001bbfc: 2301 movs r3, #1 +1001bbfe: f7ff fa13 bl 1001b028 +1001bc02: 2601 movs r6, #1 +1001bc04: f895 3306 ldrb.w r3, [r5, #774] ; 0x306 +1001bc08: b19b cbz r3, 1001bc32 +1001bc0a: 2300 movs r3, #0 +1001bc0c: f885 3306 strb.w r3, [r5, #774] ; 0x306 +1001bc10: f8b4 24b6 ldrh.w r2, [r4, #1206] ; 0x4b6 +1001bc14: f894 3521 ldrb.w r3, [r4, #1313] ; 0x521 +1001bc18: 3a01 subs r2, #1 +1001bc1a: b292 uxth r2, r2 +1001bc1c: 2b01 cmp r3, #1 +1001bc1e: f8a4 24b6 strh.w r2, [r4, #1206] ; 0x4b6 +1001bc22: d906 bls.n 1001bc32 +1001bc24: b92a cbnz r2, 1001bc32 +1001bc26: 4620 mov r0, r4 +1001bc28: 21ff movs r1, #255 ; 0xff +1001bc2a: 2301 movs r3, #1 +1001bc2c: f7ff f9fc bl 1001b028 +1001bc30: 2601 movs r6, #1 +1001bc32: f895 3308 ldrb.w r3, [r5, #776] ; 0x308 +1001bc36: b13b cbz r3, 1001bc48 +1001bc38: 2300 movs r3, #0 +1001bc3a: f885 3308 strb.w r3, [r5, #776] ; 0x308 +1001bc3e: f8b4 34ba ldrh.w r3, [r4, #1210] ; 0x4ba +1001bc42: 3b01 subs r3, #1 +1001bc44: f8a4 34ba strh.w r3, [r4, #1210] ; 0x4ba +1001bc48: f895 3309 ldrb.w r3, [r5, #777] ; 0x309 +1001bc4c: b13b cbz r3, 1001bc5e +1001bc4e: 2300 movs r3, #0 +1001bc50: f885 3309 strb.w r3, [r5, #777] ; 0x309 +1001bc54: f8b4 3450 ldrh.w r3, [r4, #1104] ; 0x450 +1001bc58: 3b01 subs r3, #1 +1001bc5a: f8a4 3450 strh.w r3, [r4, #1104] ; 0x450 +1001bc5e: f895 330a ldrb.w r3, [r5, #778] ; 0x30a +1001bc62: b13b cbz r3, 1001bc74 +1001bc64: 2300 movs r3, #0 +1001bc66: f885 330a strb.w r3, [r5, #778] ; 0x30a +1001bc6a: f8b4 34bc ldrh.w r3, [r4, #1212] ; 0x4bc +1001bc6e: 3b01 subs r3, #1 +1001bc70: f8a4 34bc strh.w r3, [r4, #1212] ; 0x4bc +1001bc74: 4620 mov r0, r4 +1001bc76: f7ff f85d bl 1001ad34 +1001bc7a: 2800 cmp r0, #0 +1001bc7c: dd0d ble.n 1001bc9a +1001bc7e: 2200 movs r2, #0 +1001bc80: 4620 mov r0, r4 +1001bc82: 4613 mov r3, r2 +1001bc84: 212d movs r1, #45 ; 0x2d +1001bc86: f7ff f9cf bl 1001b028 +1001bc8a: 4620 mov r0, r4 +1001bc8c: 213d movs r1, #61 ; 0x3d +1001bc8e: 2200 movs r2, #0 +1001bc90: 2301 movs r3, #1 +1001bc92: f7ff f9c9 bl 1001b028 +1001bc96: e000 b.n 1001bc9a +1001bc98: 460e mov r6, r1 +1001bc9a: 4630 mov r0, r6 +1001bc9c: bd70 pop {r4, r5, r6, pc} + +1001bc9e : +1001bc9e: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1001bca0: 2300 movs r3, #0 +1001bca2: 4605 mov r5, r0 +1001bca4: 4617 mov r7, r2 +1001bca6: 460c mov r4, r1 +1001bca8: 2900 cmp r1, #0 +1001bcaa: d046 beq.n 1001bd3a +1001bcac: f881 31ff strb.w r3, [r1, #511] ; 0x1ff +1001bcb0: f881 3200 strb.w r3, [r1, #512] ; 0x200 +1001bcb4: 6903 ldr r3, [r0, #16] +1001bcb6: f501 7684 add.w r6, r1, #264 ; 0x108 +1001bcba: f413 7f80 tst.w r3, #256 ; 0x100 +1001bcbe: d107 bne.n 1001bcd0 +1001bcc0: f890 3901 ldrb.w r3, [r0, #2305] ; 0x901 +1001bcc4: 2b00 cmp r3, #0 +1001bcc6: d03a beq.n 1001bd3e +1001bcc8: f895 3902 ldrb.w r3, [r5, #2306] ; 0x902 +1001bccc: 2b00 cmp r3, #0 +1001bcce: d036 beq.n 1001bd3e +1001bcd0: f8d4 2100 ldr.w r2, [r4, #256] ; 0x100 +1001bcd4: 2301 movs r3, #1 +1001bcd6: 3203 adds r2, #3 +1001bcd8: b2d2 uxtb r2, r2 +1001bcda: 4621 mov r1, r4 +1001bcdc: 4628 mov r0, r5 +1001bcde: f000 ff91 bl 1001cc04 +1001bce2: 4620 mov r0, r4 +1001bce4: a901 add r1, sp, #4 +1001bce6: f7fb fc7f bl 100175e8 +1001bcea: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 +1001bcee: 4620 mov r0, r4 +1001bcf0: f023 0301 bic.w r3, r3, #1 +1001bcf4: f8c4 30f8 str.w r3, [r4, #248] ; 0xf8 +1001bcf8: a901 add r1, sp, #4 +1001bcfa: f7fb fc7f bl 100175fc +1001bcfe: 4631 mov r1, r6 +1001bd00: 4628 mov r0, r5 +1001bd02: f017 ffa9 bl 10033c58 +1001bd06: 463a mov r2, r7 +1001bd08: 4631 mov r1, r6 +1001bd0a: 4628 mov r0, r5 +1001bd0c: f005 fc0a bl 10021524 +1001bd10: 4621 mov r1, r4 +1001bd12: 4628 mov r0, r5 +1001bd14: f7ff ff45 bl 1001bba2 +1001bd18: f605 4678 addw r6, r5, #3192 ; 0xc78 +1001bd1c: 4607 mov r7, r0 +1001bd1e: a901 add r1, sp, #4 +1001bd20: 4630 mov r0, r6 +1001bd22: f7fb fc61 bl 100175e8 +1001bd26: 4621 mov r1, r4 +1001bd28: 4628 mov r0, r5 +1001bd2a: f00c f9e0 bl 100280ee +1001bd2e: 4630 mov r0, r6 +1001bd30: a901 add r1, sp, #4 +1001bd32: f7fb fc63 bl 100175fc +1001bd36: 4638 mov r0, r7 +1001bd38: e007 b.n 1001bd4a +1001bd3a: 4608 mov r0, r1 +1001bd3c: e005 b.n 1001bd4a +1001bd3e: 4628 mov r0, r5 +1001bd40: 4631 mov r1, r6 +1001bd42: 463a mov r2, r7 +1001bd44: f004 fafe bl 10020344 +1001bd48: e7c2 b.n 1001bcd0 +1001bd4a: b003 add sp, #12 +1001bd4c: bdf0 pop {r4, r5, r6, r7, pc} + ... + +1001bd50 : +1001bd50: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1001bd54: f600 46d8 addw r6, r0, #3288 ; 0xcd8 +1001bd58: b086 sub sp, #24 +1001bd5a: 4604 mov r4, r0 +1001bd5c: 2300 movs r3, #0 +1001bd5e: 4630 mov r0, r6 +1001bd60: a905 add r1, sp, #20 +1001bd62: f88d 3013 strb.w r3, [sp, #19] +1001bd66: f7fb fc3f bl 100175e8 +1001bd6a: f8d4 5ccc ldr.w r5, [r4, #3276] ; 0xccc +1001bd6e: f604 48cc addw r8, r4, #3276 ; 0xccc +1001bd72: 4640 mov r0, r8 +1001bd74: 4629 mov r1, r5 +1001bd76: f7fb fc14 bl 100175a2 +1001bd7a: bb18 cbnz r0, 1001bdc4 +1001bd7c: 68ab ldr r3, [r5, #8] +1001bd7e: f8d5 9000 ldr.w r9, [r5] +1001bd82: f5a5 7709 sub.w r7, r5, #548 ; 0x224 +1001bd86: b1db cbz r3, 1001bdc0 +1001bd88: 3b01 subs r3, #1 +1001bd8a: 60ab str r3, [r5, #8] +1001bd8c: b9c3 cbnz r3, 1001bdc0 +1001bd8e: 4628 mov r0, r5 +1001bd90: f7fb fb7a bl 10017488 +1001bd94: f604 4578 addw r5, r4, #3192 ; 0xc78 +1001bd98: 4630 mov r0, r6 +1001bd9a: a905 add r1, sp, #20 +1001bd9c: f7fb fc2e bl 100175fc +1001bda0: 4628 mov r0, r5 +1001bda2: a905 add r1, sp, #20 +1001bda4: f7fb fc20 bl 100175e8 +1001bda8: 4639 mov r1, r7 +1001bdaa: 4620 mov r0, r4 +1001bdac: f00c f99f bl 100280ee +1001bdb0: 4628 mov r0, r5 +1001bdb2: a905 add r1, sp, #20 +1001bdb4: f7fb fc22 bl 100175fc +1001bdb8: 4630 mov r0, r6 +1001bdba: a905 add r1, sp, #20 +1001bdbc: f7fb fc14 bl 100175e8 +1001bdc0: 464d mov r5, r9 +1001bdc2: e7d6 b.n 1001bd72 +1001bdc4: 4630 mov r0, r6 +1001bdc6: a905 add r1, sp, #20 +1001bdc8: f604 48d4 addw r8, r4, #3284 ; 0xcd4 +1001bdcc: f7fb fc16 bl 100175fc +1001bdd0: 4640 mov r0, r8 +1001bdd2: a905 add r1, sp, #20 +1001bdd4: f7fb fc08 bl 100175e8 +1001bdd8: f8d4 6cc4 ldr.w r6, [r4, #3268] ; 0xcc4 +1001bddc: f604 49c4 addw r9, r4, #3268 ; 0xcc4 +1001bde0: 2700 movs r7, #0 +1001bde2: 4648 mov r0, r9 +1001bde4: 4631 mov r1, r6 +1001bde6: f7fb fbdc bl 100175a2 +1001bdea: 2800 cmp r0, #0 +1001bdec: d144 bne.n 1001be78 +1001bdee: f5a6 7507 sub.w r5, r6, #540 ; 0x21c +1001bdf2: 4628 mov r0, r5 +1001bdf4: f8d6 a000 ldr.w sl, [r6] +1001bdf8: f7ff f813 bl 1001ae22 +1001bdfc: b118 cbz r0, 1001be06 +1001bdfe: f8d4 3ce4 ldr.w r3, [r4, #3300] ; 0xce4 +1001be02: f8c5 322c str.w r3, [r5, #556] ; 0x22c +1001be06: f8d5 322c ldr.w r3, [r5, #556] ; 0x22c +1001be0a: 2b00 cmp r3, #0 +1001be0c: d032 beq.n 1001be74 +1001be0e: 3b01 subs r3, #1 +1001be10: f8c5 322c str.w r3, [r5, #556] ; 0x22c +1001be14: bb1b cbnz r3, 1001be5e +1001be16: 4630 mov r0, r6 +1001be18: f7fb fb36 bl 10017488 +1001be1c: 4b31 ldr r3, [pc, #196] ; (1001bee4 ) +1001be1e: 681b ldr r3, [r3, #0] +1001be20: b1b3 cbz r3, 1001be50 +1001be22: 4831 ldr r0, [pc, #196] ; (1001bee8 ) +1001be24: f7fe feac bl 1001ab80 +1001be28: f895 010b ldrb.w r0, [r5, #267] ; 0x10b +1001be2c: f895 1108 ldrb.w r1, [r5, #264] ; 0x108 +1001be30: f895 2109 ldrb.w r2, [r5, #265] ; 0x109 +1001be34: f895 310a ldrb.w r3, [r5, #266] ; 0x10a +1001be38: 9000 str r0, [sp, #0] +1001be3a: f895 010c ldrb.w r0, [r5, #268] ; 0x10c +1001be3e: 9001 str r0, [sp, #4] +1001be40: f895 010d ldrb.w r0, [r5, #269] ; 0x10d +1001be44: 9002 str r0, [sp, #8] +1001be46: 4829 ldr r0, [pc, #164] ; (1001beec ) +1001be48: f8d0 0118 ldr.w r0, [r0, #280] ; 0x118 +1001be4c: f7fe fe98 bl 1001ab80 +1001be50: 4620 mov r0, r4 +1001be52: 4629 mov r1, r5 +1001be54: 2203 movs r2, #3 +1001be56: f7ff ff22 bl 1001bc9e +1001be5a: 4607 mov r7, r0 +1001be5c: e00a b.n 1001be74 +1001be5e: 4b24 ldr r3, [pc, #144] ; (1001bef0 ) +1001be60: 681a ldr r2, [r3, #0] +1001be62: f8d5 30f4 ldr.w r3, [r5, #244] ; 0xf4 +1001be66: ebb3 0f52 cmp.w r3, r2, lsr #1 +1001be6a: d903 bls.n 1001be74 +1001be6c: 4620 mov r0, r4 +1001be6e: 4629 mov r1, r5 +1001be70: f00e f94f bl 1002a112 +1001be74: 4656 mov r6, sl +1001be76: e7b4 b.n 1001bde2 +1001be78: 4640 mov r0, r8 +1001be7a: a905 add r1, sp, #20 +1001be7c: f7fb fbbe bl 100175fc +1001be80: 4b1c ldr r3, [pc, #112] ; (1001bef4 ) +1001be82: 681b ldr r3, [r3, #0] +1001be84: b10b cbz r3, 1001be8a +1001be86: 4620 mov r0, r4 +1001be88: 4798 blx r3 +1001be8a: 4639 mov r1, r7 +1001be8c: 4620 mov r0, r4 +1001be8e: f7ff fdab bl 1001b9e8 +1001be92: 4620 mov r0, r4 +1001be94: f00c fa64 bl 10028360 +1001be98: 2146 movs r1, #70 ; 0x46 +1001be9a: 4605 mov r5, r0 +1001be9c: f10d 0213 add.w r2, sp, #19 +1001bea0: 4620 mov r0, r4 +1001bea2: f016 fb2d bl 10032500 +1001bea6: f89d 3013 ldrb.w r3, [sp, #19] +1001beaa: 2b01 cmp r3, #1 +1001beac: d116 bne.n 1001bedc +1001beae: b1ad cbz r5, 1001bedc +1001beb0: f8d5 20f4 ldr.w r2, [r5, #244] ; 0xf4 +1001beb4: b992 cbnz r2, 1001bedc +1001beb6: f8b4 3cfe ldrh.w r3, [r4, #3326] ; 0xcfe +1001beba: 07d9 lsls r1, r3, #31 +1001bebc: d50e bpl.n 1001bedc +1001bebe: f023 0301 bic.w r3, r3, #1 +1001bec2: f8a4 3cfe strh.w r3, [r4, #3326] ; 0xcfe +1001bec6: f8b4 3cfc ldrh.w r3, [r4, #3324] ; 0xcfc +1001beca: 4620 mov r0, r4 +1001becc: f023 0301 bic.w r3, r3, #1 +1001bed0: f8a4 3cfc strh.w r3, [r4, #3324] ; 0xcfc +1001bed4: 2105 movs r1, #5 +1001bed6: 4613 mov r3, r2 +1001bed8: f7ff f8a6 bl 1001b028 +1001bedc: b006 add sp, #24 +1001bede: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1001bee2: bf00 nop +1001bee4: 10044f38 .word 0x10044f38 +1001bee8: 100429b1 .word 0x100429b1 +1001beec: 10043ac4 .word 0x10043ac4 +1001bef0: 10044fb8 .word 0x10044fb8 +1001bef4: 1004bb8c .word 0x1004bb8c + +1001bef8 : +1001bef8: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +1001befc: 4b1e ldr r3, [pc, #120] ; (1001bf78 ) +1001befe: 4604 mov r4, r0 +1001bf00: 6818 ldr r0, [r3, #0] +1001bf02: 889b ldrh r3, [r3, #4] +1001bf04: b085 sub sp, #20 +1001bf06: f8ad 300c strh.w r3, [sp, #12] +1001bf0a: 6923 ldr r3, [r4, #16] +1001bf0c: 9002 str r0, [sp, #8] +1001bf0e: 06db lsls r3, r3, #27 +1001bf10: d52e bpl.n 1001bf70 +1001bf12: f604 46d4 addw r6, r4, #3284 ; 0xcd4 +1001bf16: 4630 mov r0, r6 +1001bf18: a901 add r1, sp, #4 +1001bf1a: f7fb fb65 bl 100175e8 +1001bf1e: f8d4 5cc4 ldr.w r5, [r4, #3268] ; 0xcc4 +1001bf22: f604 47c4 addw r7, r4, #3268 ; 0xcc4 +1001bf26: 4638 mov r0, r7 +1001bf28: 4629 mov r1, r5 +1001bf2a: f7fb fb3a bl 100175a2 +1001bf2e: b968 cbnz r0, 1001bf4c +1001bf30: 4628 mov r0, r5 +1001bf32: f8d5 8000 ldr.w r8, [r5] +1001bf36: f5a5 7907 sub.w r9, r5, #540 ; 0x21c +1001bf3a: f7fb faa5 bl 10017488 +1001bf3e: 4620 mov r0, r4 +1001bf40: 4649 mov r1, r9 +1001bf42: 2203 movs r2, #3 +1001bf44: f7ff feab bl 1001bc9e +1001bf48: 4645 mov r5, r8 +1001bf4a: e7ec b.n 1001bf26 +1001bf4c: 4630 mov r0, r6 +1001bf4e: a901 add r1, sp, #4 +1001bf50: f7fb fb54 bl 100175fc +1001bf54: f894 3901 ldrb.w r3, [r4, #2305] ; 0x901 +1001bf58: b113 cbz r3, 1001bf60 +1001bf5a: f894 3902 ldrb.w r3, [r4, #2306] ; 0x902 +1001bf5e: b923 cbnz r3, 1001bf6a +1001bf60: 4620 mov r0, r4 +1001bf62: a902 add r1, sp, #8 +1001bf64: 2203 movs r2, #3 +1001bf66: f004 f9ed bl 10020344 +1001bf6a: 4620 mov r0, r4 +1001bf6c: f7fe ff3b bl 1001ade6 +1001bf70: 2000 movs r0, #0 +1001bf72: b005 add sp, #20 +1001bf74: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +1001bf78: 10040f17 .word 0x10040f17 + +1001bf7c : +1001bf7c: b573 push {r0, r1, r4, r5, r6, lr} +1001bf7e: 2500 movs r5, #0 +1001bf80: 4604 mov r4, r0 +1001bf82: f880 5508 strb.w r5, [r0, #1288] ; 0x508 +1001bf86: f880 5858 strb.w r5, [r0, #2136] ; 0x858 +1001bf8a: f7ff ffb5 bl 1001bef8 +1001bf8e: f8c4 5680 str.w r5, [r4, #1664] ; 0x680 +1001bf92: 4620 mov r0, r4 +1001bf94: f00c f9f6 bl 10028384 +1001bf98: 4620 mov r0, r4 +1001bf9a: f00c f9e1 bl 10028360 +1001bf9e: f604 4578 addw r5, r4, #3192 ; 0xc78 +1001bfa2: 4606 mov r6, r0 +1001bfa4: a901 add r1, sp, #4 +1001bfa6: 4628 mov r0, r5 +1001bfa8: f7fb fb1e bl 100175e8 +1001bfac: 4631 mov r1, r6 +1001bfae: 4620 mov r0, r4 +1001bfb0: f00c f89d bl 100280ee +1001bfb4: 4628 mov r0, r5 +1001bfb6: a901 add r1, sp, #4 +1001bfb8: f7fb fb20 bl 100175fc +1001bfbc: f204 5004 addw r0, r4, #1284 ; 0x504 +1001bfc0: f7fb fb02 bl 100175c8 +1001bfc4: b002 add sp, #8 +1001bfc6: bd70 pop {r4, r5, r6, pc} + +1001bfc8 : +1001bfc8: f8d1 32c8 ldr.w r3, [r1, #712] ; 0x2c8 +1001bfcc: f413 7200 ands.w r2, r3, #512 ; 0x200 +1001bfd0: bf18 it ne +1001bfd2: 2201 movne r2, #1 +1001bfd4: f8c1 2104 str.w r2, [r1, #260] ; 0x104 +1001bfd8: f8d0 244c ldr.w r2, [r0, #1100] ; 0x44c +1001bfdc: b90a cbnz r2, 1001bfe2 +1001bfde: f8c1 2104 str.w r2, [r1, #260] ; 0x104 +1001bfe2: f413 6300 ands.w r3, r3, #2048 ; 0x800 +1001bfe6: bf1d ittte ne +1001bfe8: 2301 movne r3, #1 +1001bfea: f8c1 31f4 strne.w r3, [r1, #500] ; 0x1f4 +1001bfee: f8c1 3104 strne.w r3, [r1, #260] ; 0x104 +1001bff2: f8c1 31f4 streq.w r3, [r1, #500] ; 0x1f4 +1001bff6: f8d0 3454 ldr.w r3, [r0, #1108] ; 0x454 +1001bffa: b90b cbnz r3, 1001c000 +1001bffc: f8c1 31f4 str.w r3, [r1, #500] ; 0x1f4 +1001c000: f7fe bfb6 b.w 1001af70 + +1001c004 : +1001c004: b538 push {r3, r4, r5, lr} +1001c006: f8d1 30f8 ldr.w r3, [r1, #248] ; 0xf8 +1001c00a: 4605 mov r5, r0 +1001c00c: 07db lsls r3, r3, #31 +1001c00e: 460c mov r4, r1 +1001c010: d50f bpl.n 1001c032 +1001c012: f8d1 3100 ldr.w r3, [r1, #256] ; 0x100 +1001c016: 2200 movs r2, #0 +1001c018: eb00 1343 add.w r3, r0, r3, lsl #5 +1001c01c: f8c3 1790 str.w r1, [r3, #1936] ; 0x790 +1001c020: f7fe ff1e bl 1001ae60 +1001c024: 4628 mov r0, r5 +1001c026: f8d4 1100 ldr.w r1, [r4, #256] ; 0x100 +1001c02a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1001c02e: f016 bb9c b.w 1003276a +1001c032: bd38 pop {r3, r4, r5, pc} + +1001c034 : +1001c034: 2300 movs r3, #0 +1001c036: f880 3508 strb.w r3, [r0, #1288] ; 0x508 +1001c03a: f880 3858 strb.w r3, [r0, #2136] ; 0x858 +1001c03e: f8a0 34b4 strh.w r3, [r0, #1204] ; 0x4b4 +1001c042: f8a0 34b6 strh.w r3, [r0, #1206] ; 0x4b6 +1001c046: f8a0 34b8 strh.w r3, [r0, #1208] ; 0x4b8 +1001c04a: f8a0 34ba strh.w r3, [r0, #1210] ; 0x4ba +1001c04e: f8a0 3450 strh.w r3, [r0, #1104] ; 0x450 +1001c052: f8a0 34bc strh.w r3, [r0, #1212] ; 0x4bc +1001c056: f880 34be strb.w r3, [r0, #1214] ; 0x4be +1001c05a: f8a0 34c0 strh.w r3, [r0, #1216] ; 0x4c0 +1001c05e: f8c0 3ce8 str.w r3, [r0, #3304] ; 0xce8 +1001c062: f8c0 3cec str.w r3, [r0, #3308] ; 0xcec +1001c066: f8c0 3cf0 str.w r3, [r0, #3312] ; 0xcf0 +1001c06a: f8c0 3cf4 str.w r3, [r0, #3316] ; 0xcf4 +1001c06e: f8c0 3cf8 str.w r3, [r0, #3320] ; 0xcf8 +1001c072: 4770 bx lr + +1001c074 : +1001c074: b510 push {r4, lr} +1001c076: 4604 mov r4, r0 +1001c078: f200 5004 addw r0, r0, #1284 ; 0x504 +1001c07c: f7fb fa96 bl 100175ac +1001c080: 4620 mov r0, r4 +1001c082: e8bd 4010 ldmia.w sp!, {r4, lr} +1001c086: f7ff bfd5 b.w 1001c034 + +1001c08a : +1001c08a: 2300 movs r3, #0 +1001c08c: b573 push {r0, r1, r4, r5, r6, lr} +1001c08e: f880 3508 strb.w r3, [r0, #1288] ; 0x508 +1001c092: f880 3858 strb.w r3, [r0, #2136] ; 0x858 +1001c096: 4604 mov r4, r0 +1001c098: f7ff ff2e bl 1001bef8 +1001c09c: 4620 mov r0, r4 +1001c09e: f00c f971 bl 10028384 +1001c0a2: 4620 mov r0, r4 +1001c0a4: f00c f95c bl 10028360 +1001c0a8: f604 4578 addw r5, r4, #3192 ; 0xc78 +1001c0ac: 4606 mov r6, r0 +1001c0ae: a901 add r1, sp, #4 +1001c0b0: 4628 mov r0, r5 +1001c0b2: f7fb fa99 bl 100175e8 +1001c0b6: 4631 mov r1, r6 +1001c0b8: 4620 mov r0, r4 +1001c0ba: f00c f818 bl 100280ee +1001c0be: a901 add r1, sp, #4 +1001c0c0: 4628 mov r0, r5 +1001c0c2: f7fb fa9b bl 100175fc +1001c0c6: 4620 mov r0, r4 +1001c0c8: f00c f932 bl 10028330 +1001c0cc: f104 000c add.w r0, r4, #12 +1001c0d0: f001 f973 bl 1001d3ba +1001c0d4: b002 add sp, #8 +1001c0d6: bd70 pop {r4, r5, r6, pc} + +1001c0d8 : +1001c0d8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001c0dc: 4605 mov r5, r0 +1001c0de: f505 599c add.w r9, r5, #4992 ; 0x1380 +1001c0e2: f109 0908 add.w r9, r9, #8 +1001c0e6: f8d9 4040 ldr.w r4, [r9, #64] ; 0x40 +1001c0ea: b091 sub sp, #68 ; 0x44 +1001c0ec: 811c strh r4, [r3, #8] +1001c0ee: f8d5 4d0c ldr.w r4, [r5, #3340] ; 0xd0c +1001c0f2: 4618 mov r0, r3 +1001c0f4: 2c00 cmp r4, #0 +1001c0f6: bf0c ite eq +1001c0f8: 2321 moveq r3, #33 ; 0x21 +1001c0fa: 2331 movne r3, #49 ; 0x31 +1001c0fc: 8143 strh r3, [r0, #10] +1001c0fe: af10 add r7, sp, #64 ; 0x40 +1001c100: 230c movs r3, #12 +1001c102: 460e mov r6, r1 +1001c104: f847 3d38 str.w r3, [r7, #-56]! +1001c108: 4418 add r0, r3 +1001c10a: 2100 movs r1, #0 +1001c10c: 4633 mov r3, r6 +1001c10e: 9700 str r7, [sp, #0] +1001c110: f022 fbfe bl 1003e910 <__rtw_set_ie_veneer> +1001c114: f899 102d ldrb.w r1, [r9, #45] ; 0x2d +1001c118: 4606 mov r6, r0 +1001c11a: 291f cmp r1, #31 +1001c11c: d105 bne.n 1001c12a +1001c11e: f895 351e ldrb.w r3, [r5, #1310] ; 0x51e +1001c122: 2b0f cmp r3, #15 +1001c124: bf34 ite cc +1001c126: 210b movcc r1, #11 +1001c128: 2114 movcs r1, #20 +1001c12a: 686b ldr r3, [r5, #4] +1001c12c: ac05 add r4, sp, #20 +1001c12e: 2b05 cmp r3, #5 +1001c130: bf08 it eq +1001c132: 2102 moveq r1, #2 +1001c134: 4620 mov r0, r4 +1001c136: f022 fbbb bl 1003e8b0 <__rtw_set_supported_rate_veneer> +1001c13a: 4620 mov r0, r4 +1001c13c: f022 fbe0 bl 1003e900 <__rtw_get_rateset_len_veneer> +1001c140: 686b ldr r3, [r5, #4] +1001c142: 4680 mov r8, r0 +1001c144: 2b05 cmp r3, #5 +1001c146: d007 beq.n 1001c158 +1001c148: f1b8 0f08 cmp.w r8, #8 +1001c14c: d915 bls.n 1001c17a +1001c14e: 9700 str r7, [sp, #0] +1001c150: 4630 mov r0, r6 +1001c152: 2101 movs r1, #1 +1001c154: 2208 movs r2, #8 +1001c156: e014 b.n 1001c182 +1001c158: 2300 movs r3, #0 +1001c15a: 4543 cmp r3, r8 +1001c15c: d0f4 beq.n 1001c148 +1001c15e: 5ce1 ldrb r1, [r4, r3] +1001c160: f001 027f and.w r2, r1, #127 ; 0x7f +1001c164: 2a18 cmp r2, #24 +1001c166: d003 beq.n 1001c170 +1001c168: 2a30 cmp r2, #48 ; 0x30 +1001c16a: d001 beq.n 1001c170 +1001c16c: 2a0c cmp r2, #12 +1001c16e: d102 bne.n 1001c176 +1001c170: f061 017f orn r1, r1, #127 ; 0x7f +1001c174: 54e1 strb r1, [r4, r3] +1001c176: 3301 adds r3, #1 +1001c178: e7ef b.n 1001c15a +1001c17a: 9700 str r7, [sp, #0] +1001c17c: 4630 mov r0, r6 +1001c17e: 2101 movs r1, #1 +1001c180: 4642 mov r2, r8 +1001c182: 4623 mov r3, r4 +1001c184: f022 fbc4 bl 1003e910 <__rtw_set_ie_veneer> +1001c188: 2103 movs r1, #3 +1001c18a: 2201 movs r2, #1 +1001c18c: f205 531e addw r3, r5, #1310 ; 0x51e +1001c190: 9700 str r7, [sp, #0] +1001c192: f022 fbbd bl 1003e910 <__rtw_set_ie_veneer> +1001c196: ae10 add r6, sp, #64 ; 0x40 +1001c198: 2300 movs r3, #0 +1001c19a: f806 3d1c strb.w r3, [r6, #-28]! +1001c19e: 4633 mov r3, r6 +1001c1a0: 9700 str r7, [sp, #0] +1001c1a2: 212a movs r1, #42 ; 0x2a +1001c1a4: 2201 movs r2, #1 +1001c1a6: f022 fbb3 bl 1003e910 <__rtw_set_ie_veneer> +1001c1aa: f241 036c movw r3, #4204 ; 0x106c +1001c1ae: 58eb ldr r3, [r5, r3] +1001c1b0: 4604 mov r4, r0 +1001c1b2: 2b07 cmp r3, #7 +1001c1b4: d132 bne.n 1001c21c +1001c1b6: 2330 movs r3, #48 ; 0x30 +1001c1b8: 7003 strb r3, [r0, #0] +1001c1ba: 2314 movs r3, #20 +1001c1bc: 7043 strb r3, [r0, #1] +1001c1be: 2301 movs r3, #1 +1001c1c0: 7083 strb r3, [r0, #2] +1001c1c2: f8d5 2d64 ldr.w r2, [r5, #3428] ; 0xd64 +1001c1c6: 3004 adds r0, #4 +1001c1c8: 2a04 cmp r2, #4 +1001c1ca: d101 bne.n 1001c1d0 +1001c1cc: 4994 ldr r1, [pc, #592] ; (1001c420 ) +1001c1ce: e003 b.n 1001c1d8 +1001c1d0: 2a02 cmp r2, #2 +1001c1d2: d103 bne.n 1001c1dc +1001c1d4: 4993 ldr r1, [pc, #588] ; (1001c424 ) +1001c1d6: 2204 movs r2, #4 +1001c1d8: f7fb f92a bl 10017430 +1001c1dc: 2301 movs r3, #1 +1001c1de: 7223 strb r3, [r4, #8] +1001c1e0: f8d5 2d0c ldr.w r2, [r5, #3340] ; 0xd0c +1001c1e4: f104 000a add.w r0, r4, #10 +1001c1e8: 2a04 cmp r2, #4 +1001c1ea: d101 bne.n 1001c1f0 +1001c1ec: 498c ldr r1, [pc, #560] ; (1001c420 ) +1001c1ee: e005 b.n 1001c1fc +1001c1f0: f8d5 3d64 ldr.w r3, [r5, #3428] ; 0xd64 +1001c1f4: 2b02 cmp r3, #2 +1001c1f6: d103 bne.n 1001c200 +1001c1f8: 498a ldr r1, [pc, #552] ; (1001c424 ) +1001c1fa: 2204 movs r2, #4 +1001c1fc: f7fb f918 bl 10017430 +1001c200: 2301 movs r3, #1 +1001c202: 73a3 strb r3, [r4, #14] +1001c204: f104 0010 add.w r0, r4, #16 +1001c208: 4987 ldr r1, [pc, #540] ; (1001c428 ) +1001c20a: 2204 movs r2, #4 +1001c20c: f7fb f910 bl 10017430 +1001c210: 2300 movs r3, #0 +1001c212: 7523 strb r3, [r4, #20] +1001c214: 9b02 ldr r3, [sp, #8] +1001c216: 3416 adds r4, #22 +1001c218: 3316 adds r3, #22 +1001c21a: 9302 str r3, [sp, #8] +1001c21c: f1b8 0f08 cmp.w r8, #8 +1001c220: d908 bls.n 1001c234 +1001c222: 4620 mov r0, r4 +1001c224: 9700 str r7, [sp, #0] +1001c226: 2132 movs r1, #50 ; 0x32 +1001c228: f1a8 0208 sub.w r2, r8, #8 +1001c22c: ab07 add r3, sp, #28 +1001c22e: f022 fb6f bl 1003e910 <__rtw_set_ie_veneer> +1001c232: 4604 mov r4, r0 +1001c234: f899 3044 ldrb.w r3, [r9, #68] ; 0x44 +1001c238: 2b00 cmp r3, #0 +1001c23a: d032 beq.n 1001c2a2 +1001c23c: 4630 mov r0, r6 +1001c23e: 2100 movs r1, #0 +1001c240: 221a movs r2, #26 +1001c242: f7fb f905 bl 10017450 +1001c246: 2320 movs r3, #32 +1001c248: 210d movs r1, #13 +1001c24a: aa03 add r2, sp, #12 +1001c24c: 4628 mov r0, r5 +1001c24e: f8ad 3024 strh.w r3, [sp, #36] ; 0x24 +1001c252: f016 f965 bl 10032520 +1001c256: f8d5 2d0c ldr.w r2, [r5, #3340] ; 0xd0c +1001c25a: 9b03 ldr r3, [sp, #12] +1001c25c: 2a04 cmp r2, #4 +1001c25e: f003 0303 and.w r3, r3, #3 +1001c262: f88d 3026 strb.w r3, [sp, #38] ; 0x26 +1001c266: bf04 itt eq +1001c268: f043 031c orreq.w r3, r3, #28 +1001c26c: f88d 3026 strbeq.w r3, [sp, #38] ; 0x26 +1001c270: 4620 mov r0, r4 +1001c272: 4633 mov r3, r6 +1001c274: 212d movs r1, #45 ; 0x2d +1001c276: 221a movs r2, #26 +1001c278: 9700 str r7, [sp, #0] +1001c27a: f022 fb49 bl 1003e910 <__rtw_set_ie_veneer> +1001c27e: 2100 movs r1, #0 +1001c280: 4604 mov r4, r0 +1001c282: 2216 movs r2, #22 +1001c284: 4630 mov r0, r6 +1001c286: f7fb f8e3 bl 10017450 +1001c28a: f895 351e ldrb.w r3, [r5, #1310] ; 0x51e +1001c28e: 4620 mov r0, r4 +1001c290: f88d 3024 strb.w r3, [sp, #36] ; 0x24 +1001c294: 9700 str r7, [sp, #0] +1001c296: 213d movs r1, #61 ; 0x3d +1001c298: 2216 movs r2, #22 +1001c29a: 4633 mov r3, r6 +1001c29c: f022 fb38 bl 1003e910 <__rtw_set_ie_veneer> +1001c2a0: 4604 mov r4, r0 +1001c2a2: f241 036c movw r3, #4204 ; 0x106c +1001c2a6: f855 a003 ldr.w sl, [r5, r3] +1001c2aa: 1ca0 adds r0, r4, #2 +1001c2ac: f1ba 0f04 cmp.w sl, #4 +1001c2b0: d132 bne.n 1001c318 +1001c2b2: 23dd movs r3, #221 ; 0xdd +1001c2b4: 7023 strb r3, [r4, #0] +1001c2b6: 2316 movs r3, #22 +1001c2b8: 7063 strb r3, [r4, #1] +1001c2ba: 495c ldr r1, [pc, #368] ; (1001c42c ) +1001c2bc: 4652 mov r2, sl +1001c2be: f04f 0b01 mov.w fp, #1 +1001c2c2: f7fb f8b5 bl 10017430 +1001c2c6: f884 b006 strb.w fp, [r4, #6] +1001c2ca: f8d5 3d64 ldr.w r3, [r5, #3428] ; 0xd64 +1001c2ce: f104 0808 add.w r8, r4, #8 +1001c2d2: 2b02 cmp r3, #2 +1001c2d4: d108 bne.n 1001c2e8 +1001c2d6: 4640 mov r0, r8 +1001c2d8: 4955 ldr r1, [pc, #340] ; (1001c430 ) +1001c2da: 4652 mov r2, sl +1001c2dc: f7fb f8a8 bl 10017430 +1001c2e0: f104 080e add.w r8, r4, #14 +1001c2e4: f884 b00c strb.w fp, [r4, #12] +1001c2e8: f8d5 3d0c ldr.w r3, [r5, #3340] ; 0xd0c +1001c2ec: 2b02 cmp r3, #2 +1001c2ee: d109 bne.n 1001c304 +1001c2f0: 4640 mov r0, r8 +1001c2f2: 494f ldr r1, [pc, #316] ; (1001c430 ) +1001c2f4: 2204 movs r2, #4 +1001c2f6: f7fb f89b bl 10017430 +1001c2fa: 2301 movs r3, #1 +1001c2fc: f888 3004 strb.w r3, [r8, #4] +1001c300: f108 0806 add.w r8, r8, #6 +1001c304: 4640 mov r0, r8 +1001c306: 494a ldr r1, [pc, #296] ; (1001c430 ) +1001c308: 2204 movs r2, #4 +1001c30a: f7fb f891 bl 10017430 +1001c30e: 9b02 ldr r3, [sp, #8] +1001c310: f108 0404 add.w r4, r8, #4 +1001c314: 3318 adds r3, #24 +1001c316: e00f b.n 1001c338 +1001c318: f241 0370 movw r3, #4208 ; 0x1070 +1001c31c: 58eb ldr r3, [r5, r3] +1001c31e: b963 cbnz r3, 1001c33a +1001c320: 23dd movs r3, #221 ; 0xdd +1001c322: 2505 movs r5, #5 +1001c324: 7023 strb r3, [r4, #0] +1001c326: 7065 strb r5, [r4, #1] +1001c328: 4940 ldr r1, [pc, #256] ; (1001c42c ) +1001c32a: 2204 movs r2, #4 +1001c32c: f7fb f880 bl 10017430 +1001c330: 9b02 ldr r3, [sp, #8] +1001c332: 7165 strb r5, [r4, #5] +1001c334: 3307 adds r3, #7 +1001c336: 3407 adds r4, #7 +1001c338: 9302 str r3, [sp, #8] +1001c33a: f899 303d ldrb.w r3, [r9, #61] ; 0x3d +1001c33e: b3c3 cbz r3, 1001c3b2 +1001c340: 23dd movs r3, #221 ; 0xdd +1001c342: 7023 strb r3, [r4, #0] +1001c344: 2318 movs r3, #24 +1001c346: 7063 strb r3, [r4, #1] +1001c348: 1ca0 adds r0, r4, #2 +1001c34a: 493a ldr r1, [pc, #232] ; (1001c434 ) +1001c34c: 2206 movs r2, #6 +1001c34e: f7fb f86f bl 10017430 +1001c352: 2300 movs r3, #0 +1001c354: f88d 3025 strb.w r3, [sp, #37] ; 0x25 +1001c358: f8ad 3028 strh.w r3, [sp, #40] ; 0x28 +1001c35c: f8ad 302c strh.w r3, [sp, #44] ; 0x2c +1001c360: 2342 movs r3, #66 ; 0x42 +1001c362: f88d 302e strb.w r3, [sp, #46] ; 0x2e +1001c366: 2343 movs r3, #67 ; 0x43 +1001c368: f88d 302f strb.w r3, [sp, #47] ; 0x2f +1001c36c: 235e movs r3, #94 ; 0x5e +1001c36e: 2203 movs r2, #3 +1001c370: f8ad 3030 strh.w r3, [sp, #48] ; 0x30 +1001c374: 2362 movs r3, #98 ; 0x62 +1001c376: f88d 2024 strb.w r2, [sp, #36] ; 0x24 +1001c37a: f88d 2026 strb.w r2, [sp, #38] ; 0x26 +1001c37e: 2127 movs r1, #39 ; 0x27 +1001c380: 22a4 movs r2, #164 ; 0xa4 +1001c382: f88d 3032 strb.w r3, [sp, #50] ; 0x32 +1001c386: 2332 movs r3, #50 ; 0x32 +1001c388: f88d 2027 strb.w r2, [sp, #39] ; 0x27 +1001c38c: f88d 102a strb.w r1, [sp, #42] ; 0x2a +1001c390: f88d 202b strb.w r2, [sp, #43] ; 0x2b +1001c394: f88d 3033 strb.w r3, [sp, #51] ; 0x33 +1001c398: f104 0008 add.w r0, r4, #8 +1001c39c: 232f movs r3, #47 ; 0x2f +1001c39e: 4631 mov r1, r6 +1001c3a0: 2212 movs r2, #18 +1001c3a2: f8ad 3034 strh.w r3, [sp, #52] ; 0x34 +1001c3a6: f7fb f843 bl 10017430 +1001c3aa: 9b02 ldr r3, [sp, #8] +1001c3ac: 341a adds r4, #26 +1001c3ae: 331a adds r3, #26 +1001c3b0: 9302 str r3, [sp, #8] +1001c3b2: 4d21 ldr r5, [pc, #132] ; (1001c438 ) +1001c3b4: f04f 08dd mov.w r8, #221 ; 0xdd +1001c3b8: 792b ldrb r3, [r5, #4] +1001c3ba: 6828 ldr r0, [r5, #0] +1001c3bc: f88d 3010 strb.w r3, [sp, #16] +1001c3c0: 462b mov r3, r5 +1001c3c2: 9003 str r0, [sp, #12] +1001c3c4: f853 0f05 ldr.w r0, [r3, #5]! +1001c3c8: 491c ldr r1, [pc, #112] ; (1001c43c ) +1001c3ca: 791b ldrb r3, [r3, #4] +1001c3cc: 9009 str r0, [sp, #36] ; 0x24 +1001c3ce: 7133 strb r3, [r6, #4] +1001c3d0: 230e movs r3, #14 +1001c3d2: 7063 strb r3, [r4, #1] +1001c3d4: 1ca0 adds r0, r4, #2 +1001c3d6: f884 8000 strb.w r8, [r4] +1001c3da: 2204 movs r2, #4 +1001c3dc: f7fb f828 bl 10017430 +1001c3e0: 1da0 adds r0, r4, #6 +1001c3e2: a903 add r1, sp, #12 +1001c3e4: 2205 movs r2, #5 +1001c3e6: f7fb f823 bl 10017430 +1001c3ea: f104 000b add.w r0, r4, #11 +1001c3ee: 4631 mov r1, r6 +1001c3f0: 2205 movs r2, #5 +1001c3f2: f7fb f81d bl 10017430 +1001c3f6: 9b02 ldr r3, [sp, #8] +1001c3f8: f855 0f0a ldr.w r0, [r5, #10]! +1001c3fc: 3310 adds r3, #16 +1001c3fe: 9302 str r3, [sp, #8] +1001c400: 88ab ldrh r3, [r5, #4] +1001c402: 9009 str r0, [sp, #36] ; 0x24 +1001c404: 80b3 strh r3, [r6, #4] +1001c406: f104 0010 add.w r0, r4, #16 +1001c40a: 9700 str r7, [sp, #0] +1001c40c: 4641 mov r1, r8 +1001c40e: 2206 movs r2, #6 +1001c410: 4633 mov r3, r6 +1001c412: f022 fa7d bl 1003e910 <__rtw_set_ie_veneer> +1001c416: 9802 ldr r0, [sp, #8] +1001c418: b011 add sp, #68 ; 0x44 +1001c41a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1001c41e: bf00 nop +1001c420: 00035430 .word 0x00035430 +1001c424: 0003542c .word 0x0003542c +1001c428: 00035444 .word 0x00035444 +1001c42c: 0003540c .word 0x0003540c +1001c430: 00035418 .word 0x00035418 +1001c434: 10041558 .word 0x10041558 +1001c438: 10040f1d .word 0x10040f1d +1001c43c: 100414b9 .word 0x100414b9 + +1001c440 : +1001c440: b510 push {r4, lr} +1001c442: 2205 movs r2, #5 +1001c444: 460c mov r4, r1 +1001c446: 4910 ldr r1, [pc, #64] ; (1001c488 ) +1001c448: f7fe fbbe bl 1001abc8 +1001c44c: 4b0f ldr r3, [pc, #60] ; (1001c48c ) +1001c44e: 2800 cmp r0, #0 +1001c450: bf14 ite ne +1001c452: 2018 movne r0, #24 +1001c454: 2000 moveq r0, #0 +1001c456: 581b ldr r3, [r3, r0] +1001c458: b923 cbnz r3, 1001c464 +1001c45a: 490d ldr r1, [pc, #52] ; (1001c490 ) +1001c45c: 480d ldr r0, [pc, #52] ; (1001c494 ) +1001c45e: f7fe fb8f bl 1001ab80 +1001c462: e004 b.n 1001c46e +1001c464: 691b ldr r3, [r3, #16] +1001c466: 681b ldr r3, [r3, #0] +1001c468: 691a ldr r2, [r3, #16] +1001c46a: 06d2 lsls r2, r2, #27 +1001c46c: d402 bmi.n 1001c474 +1001c46e: f04f 30ff mov.w r0, #4294967295 +1001c472: bd10 pop {r4, pc} +1001c474: 1e62 subs r2, r4, #1 +1001c476: b2d2 uxtb r2, r2 +1001c478: 2a02 cmp r2, #2 +1001c47a: bf28 it cs +1001c47c: 2400 movcs r4, #0 +1001c47e: f883 4740 strb.w r4, [r3, #1856] ; 0x740 +1001c482: 2000 movs r0, #0 +1001c484: bd10 pop {r4, pc} +1001c486: bf00 nop +1001c488: 1003fb87 .word 0x1003fb87 +1001c48c: 1004e03c .word 0x1004e03c +1001c490: 10040f6e .word 0x10040f6e +1001c494: 10040203 .word 0x10040203 + +1001c498 : +1001c498: b510 push {r4, lr} +1001c49a: 460c mov r4, r1 +1001c49c: b169 cbz r1, 1001c4ba +1001c49e: 680b ldr r3, [r1, #0] +1001c4a0: 3b02 subs r3, #2 +1001c4a2: 2b01 cmp r3, #1 +1001c4a4: d801 bhi.n 1001c4aa +1001c4a6: f007 f995 bl 100237d4 +1001c4aa: 68a0 ldr r0, [r4, #8] +1001c4ac: b140 cbz r0, 1001c4c0 +1001c4ae: 6861 ldr r1, [r4, #4] +1001c4b0: 2900 cmp r1, #0 +1001c4b2: dd04 ble.n 1001c4be +1001c4b4: f7fa ffb9 bl 1001742a +1001c4b8: e001 b.n 1001c4be +1001c4ba: 2004 movs r0, #4 +1001c4bc: bd10 pop {r4, pc} +1001c4be: 2000 movs r0, #0 +1001c4c0: bd10 pop {r4, pc} + +1001c4c2 <_rtw_init_evt_priv>: +1001c4c2: b510 push {r4, lr} +1001c4c4: 2100 movs r1, #0 +1001c4c6: 4604 mov r4, r0 +1001c4c8: f7fb f8f4 bl 100176b4 +1001c4cc: 2300 movs r3, #0 +1001c4ce: 60e3 str r3, [r4, #12] +1001c4d0: 2001 movs r0, #1 +1001c4d2: bd10 pop {r4, pc} + +1001c4d4 <_rtw_free_cmd_priv>: +1001c4d4: b110 cbz r0, 1001c4dc <_rtw_free_cmd_priv+0x8> +1001c4d6: 3008 adds r0, #8 +1001c4d8: f7fb b876 b.w 100175c8 +1001c4dc: 4770 bx lr + +1001c4de <_rtw_enqueue_cmd>: +1001c4de: b573 push {r0, r1, r4, r5, r6, lr} +1001c4e0: 4605 mov r5, r0 +1001c4e2: 460e mov r6, r1 +1001c4e4: b171 cbz r1, 1001c504 <_rtw_enqueue_cmd+0x26> +1001c4e6: f100 0408 add.w r4, r0, #8 +1001c4ea: 4620 mov r0, r4 +1001c4ec: a901 add r1, sp, #4 +1001c4ee: f7fb f837 bl 10017560 +1001c4f2: f106 0018 add.w r0, r6, #24 +1001c4f6: 4629 mov r1, r5 +1001c4f8: f7fa ffc0 bl 1001747c +1001c4fc: 4620 mov r0, r4 +1001c4fe: a901 add r1, sp, #4 +1001c500: f7fb f838 bl 10017574 +1001c504: 2001 movs r0, #1 +1001c506: b002 add sp, #8 +1001c508: bd70 pop {r4, r5, r6, pc} + +1001c50a <_rtw_dequeue_cmd>: +1001c50a: b537 push {r0, r1, r2, r4, r5, lr} +1001c50c: f100 0508 add.w r5, r0, #8 +1001c510: 4604 mov r4, r0 +1001c512: a901 add r1, sp, #4 +1001c514: 4628 mov r0, r5 +1001c516: f7fb f823 bl 10017560 +1001c51a: 4620 mov r0, r4 +1001c51c: f7fa ffa3 bl 10017466 +1001c520: b928 cbnz r0, 1001c52e <_rtw_dequeue_cmd+0x24> +1001c522: 6820 ldr r0, [r4, #0] +1001c524: f1a0 0418 sub.w r4, r0, #24 +1001c528: f7fa ffae bl 10017488 +1001c52c: e000 b.n 1001c530 <_rtw_dequeue_cmd+0x26> +1001c52e: 2400 movs r4, #0 +1001c530: 4628 mov r0, r5 +1001c532: a901 add r1, sp, #4 +1001c534: f7fb f81e bl 10017574 +1001c538: 4620 mov r0, r4 +1001c53a: b003 add sp, #12 +1001c53c: bd30 pop {r4, r5, pc} + +1001c53e <_rtw_observequeue_cmd>: +1001c53e: b510 push {r4, lr} +1001c540: 4604 mov r4, r0 +1001c542: f7fa ff90 bl 10017466 +1001c546: b910 cbnz r0, 1001c54e <_rtw_observequeue_cmd+0x10> +1001c548: 6820 ldr r0, [r4, #0] +1001c54a: 3818 subs r0, #24 +1001c54c: bd10 pop {r4, pc} +1001c54e: 2000 movs r0, #0 +1001c550: bd10 pop {r4, pc} + +1001c552 : +1001c552: b508 push {r3, lr} +1001c554: f7fb f832 bl 100175bc +1001c558: 2001 movs r0, #1 +1001c55a: bd08 pop {r3, pc} + +1001c55c : +1001c55c: f7ff bfb1 b.w 1001c4c2 <_rtw_init_evt_priv> + +1001c560 : +1001c560: 4770 bx lr + +1001c562 : +1001c562: f7ff bfb7 b.w 1001c4d4 <_rtw_free_cmd_priv> + +1001c566 : +1001c566: 6903 ldr r3, [r0, #16] +1001c568: 888a ldrh r2, [r1, #4] +1001c56a: f241 71c5 movw r1, #6085 ; 0x17c5 +1001c56e: 5c5b ldrb r3, [r3, r1] +1001c570: b90b cbnz r3, 1001c576 +1001c572: 2a3b cmp r2, #59 ; 0x3b +1001c574: d104 bne.n 1001c580 +1001c576: 7b00 ldrb r0, [r0, #12] +1001c578: 3000 adds r0, #0 +1001c57a: bf18 it ne +1001c57c: 2001 movne r0, #1 +1001c57e: 4770 bx lr +1001c580: 4618 mov r0, r3 +1001c582: 4770 bx lr + +1001c584 : +1001c584: 8883 ldrh r3, [r0, #4] +1001c586: b510 push {r4, lr} +1001c588: 2b10 cmp r3, #16 +1001c58a: 4604 mov r4, r0 +1001c58c: d003 beq.n 1001c596 +1001c58e: 6880 ldr r0, [r0, #8] +1001c590: 68e1 ldr r1, [r4, #12] +1001c592: f7fa ff4a bl 1001742a +1001c596: 6920 ldr r0, [r4, #16] +1001c598: b118 cbz r0, 1001c5a2 +1001c59a: 6961 ldr r1, [r4, #20] +1001c59c: b109 cbz r1, 1001c5a2 +1001c59e: f7fa ff44 bl 1001742a +1001c5a2: 4620 mov r0, r4 +1001c5a4: 2120 movs r1, #32 +1001c5a6: e8bd 4010 ldmia.w sp!, {r4, lr} +1001c5aa: f7fa bf3e b.w 1001742a + +1001c5ae : +1001c5ae: b5f8 push {r3, r4, r5, r6, r7, lr} +1001c5b0: 4607 mov r7, r0 +1001c5b2: 6905 ldr r5, [r0, #16] +1001c5b4: 460c mov r4, r1 +1001c5b6: b311 cbz r1, 1001c5fe +1001c5b8: 600d str r5, [r1, #0] +1001c5ba: f641 0369 movw r3, #6249 ; 0x1869 +1001c5be: 5ceb ldrb r3, [r5, r3] +1001c5c0: b133 cbz r3, 1001c5d0 +1001c5c2: f641 035c movw r3, #6236 ; 0x185c +1001c5c6: 58eb ldr r3, [r5, r3] +1001c5c8: b113 cbz r3, 1001c5d0 +1001c5ca: f603 1708 addw r7, r3, #2312 ; 0x908 +1001c5ce: 461d mov r5, r3 +1001c5d0: 4638 mov r0, r7 +1001c5d2: 4621 mov r1, r4 +1001c5d4: f7ff ffc7 bl 1001c566 +1001c5d8: 4606 mov r6, r0 +1001c5da: b918 cbnz r0, 1001c5e4 +1001c5dc: 4620 mov r0, r4 +1001c5de: f7ff ffd1 bl 1001c584 +1001c5e2: e00d b.n 1001c600 +1001c5e4: 4638 mov r0, r7 +1001c5e6: 4621 mov r1, r4 +1001c5e8: f7ff ff79 bl 1001c4de <_rtw_enqueue_cmd> +1001c5ec: 2801 cmp r0, #1 +1001c5ee: 4606 mov r6, r0 +1001c5f0: d106 bne.n 1001c600 +1001c5f2: f505 50bf add.w r0, r5, #6112 ; 0x17e0 +1001c5f6: 3004 adds r0, #4 +1001c5f8: f7fb f92e bl 10017858 +1001c5fc: e000 b.n 1001c600 +1001c5fe: 460e mov r6, r1 +1001c600: 4630 mov r0, r6 +1001c602: bdf8 pop {r3, r4, r5, r6, r7, pc} + +1001c604 : +1001c604: b510 push {r4, lr} +1001c606: 798b ldrb r3, [r1, #6] +1001c608: 460c mov r4, r1 +1001c60a: b913 cbnz r3, 1001c612 +1001c60c: 6889 ldr r1, [r1, #8] +1001c60e: f006 ff49 bl 100234a4 +1001c612: 4620 mov r0, r4 +1001c614: e8bd 4010 ldmia.w sp!, {r4, lr} +1001c618: f7ff bfb4 b.w 1001c584 + +1001c61c : +1001c61c: b510 push {r4, lr} +1001c61e: 798b ldrb r3, [r1, #6] +1001c620: 460c mov r4, r1 +1001c622: b123 cbz r3, 1001c62e +1001c624: f200 403c addw r0, r0, #1084 ; 0x43c +1001c628: 2101 movs r1, #1 +1001c62a: f01a fc05 bl 10036e38 +1001c62e: 4620 mov r0, r4 +1001c630: e8bd 4010 ldmia.w sp!, {r4, lr} +1001c634: f7ff bfa6 b.w 1001c584 + +1001c638 : +1001c638: b537 push {r0, r1, r2, r4, r5, lr} +1001c63a: 798b ldrb r3, [r1, #6] +1001c63c: 4604 mov r4, r0 +1001c63e: b173 cbz r3, 1001c65e +1001c640: f100 050c add.w r5, r0, #12 +1001c644: 4628 mov r0, r5 +1001c646: a901 add r1, sp, #4 +1001c648: f7fa ffce bl 100175e8 +1001c64c: 6923 ldr r3, [r4, #16] +1001c64e: 4628 mov r0, r5 +1001c650: f043 0301 orr.w r3, r3, #1 +1001c654: 6123 str r3, [r4, #16] +1001c656: a901 add r1, sp, #4 +1001c658: f7fa ffd0 bl 100175fc +1001c65c: e002 b.n 1001c664 +1001c65e: 4608 mov r0, r1 +1001c660: f7ff ff90 bl 1001c584 +1001c664: b003 add sp, #12 +1001c666: bd30 pop {r4, r5, pc} + +1001c668 : +1001c668: b510 push {r4, lr} +1001c66a: 798b ldrb r3, [r1, #6] +1001c66c: 460c mov r4, r1 +1001c66e: b123 cbz r3, 1001c67a +1001c670: f200 402c addw r0, r0, #1068 ; 0x42c +1001c674: 2101 movs r1, #1 +1001c676: f01a fbdf bl 10036e38 +1001c67a: 4620 mov r0, r4 +1001c67c: e8bd 4010 ldmia.w sp!, {r4, lr} +1001c680: f7ff bf80 b.w 1001c584 + +1001c684 : +1001c684: b510 push {r4, lr} +1001c686: f500 6046 add.w r0, r0, #3168 ; 0xc60 +1001c68a: 460c mov r4, r1 +1001c68c: 6909 ldr r1, [r1, #16] +1001c68e: f00b fe11 bl 100282b4 +1001c692: 4620 mov r0, r4 +1001c694: e8bd 4010 ldmia.w sp!, {r4, lr} +1001c698: f7ff bf74 b.w 1001c584 + +1001c69c : +1001c69c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001c6a0: 4605 mov r5, r0 +1001c6a2: f505 56bf add.w r6, r5, #6112 ; 0x17e0 +1001c6a6: f600 1708 addw r7, r0, #2312 ; 0x908 +1001c6aa: 3604 adds r6, #4 +1001c6ac: 484f ldr r0, [pc, #316] ; (1001c7ec ) +1001c6ae: f7fb f911 bl 100178d4 +1001c6b2: f106 0a0c add.w sl, r6, #12 +1001c6b6: 2301 movs r3, #1 +1001c6b8: f885 3914 strb.w r3, [r5, #2324] ; 0x914 +1001c6bc: 4650 mov r0, sl +1001c6be: f7fa fefb bl 100174b8 +1001c6c2: f505 53c2 add.w r3, r5, #6208 ; 0x1840 +1001c6c6: 331c adds r3, #28 +1001c6c8: 681b ldr r3, [r3, #0] +1001c6ca: b11b cbz r3, 1001c6d4 +1001c6cc: f503 53bf add.w r3, r3, #6112 ; 0x17e0 +1001c6d0: 2200 movs r2, #0 +1001c6d2: 619a str r2, [r3, #24] +1001c6d4: 2300 movs r3, #0 +1001c6d6: 6173 str r3, [r6, #20] +1001c6d8: f106 0008 add.w r0, r6, #8 +1001c6dc: f7fa ff04 bl 100174e8 +1001c6e0: 2800 cmp r0, #0 +1001c6e2: d068 beq.n 1001c7b6 +1001c6e4: 6933 ldr r3, [r6, #16] +1001c6e6: 2b00 cmp r3, #0 +1001c6e8: d165 bne.n 1001c7b6 +1001c6ea: f505 58bd add.w r8, r5, #6048 ; 0x17a0 +1001c6ee: f108 080c add.w r8, r8, #12 +1001c6f2: f8d8 3000 ldr.w r3, [r8] +1001c6f6: 2b01 cmp r3, #1 +1001c6f8: d05d beq.n 1001c7b6 +1001c6fa: f505 59bd add.w r9, r5, #6048 ; 0x17a0 +1001c6fe: f109 0910 add.w r9, r9, #16 +1001c702: f8d9 3000 ldr.w r3, [r9] +1001c706: 2b01 cmp r3, #1 +1001c708: d055 beq.n 1001c7b6 +1001c70a: 6933 ldr r3, [r6, #16] +1001c70c: 2b00 cmp r3, #0 +1001c70e: d152 bne.n 1001c7b6 +1001c710: f8d8 3000 ldr.w r3, [r8] +1001c714: 2b01 cmp r3, #1 +1001c716: d04e beq.n 1001c7b6 +1001c718: f8d9 3000 ldr.w r3, [r9] +1001c71c: 2b01 cmp r3, #1 +1001c71e: d04a beq.n 1001c7b6 +1001c720: 4638 mov r0, r7 +1001c722: f7ff ff0c bl 1001c53e <_rtw_observequeue_cmd> +1001c726: b120 cbz r0, 1001c732 +1001c728: 6803 ldr r3, [r0, #0] +1001c72a: 2201 movs r2, #1 +1001c72c: f503 53bf add.w r3, r3, #6112 ; 0x17e0 +1001c730: 619a str r2, [r3, #24] +1001c732: 4638 mov r0, r7 +1001c734: f7ff fee9 bl 1001c50a <_rtw_dequeue_cmd> +1001c738: 4604 mov r4, r0 +1001c73a: 2800 cmp r0, #0 +1001c73c: d0c1 beq.n 1001c6c2 +1001c73e: f8d0 b000 ldr.w fp, [r0] +1001c742: f8d5 3918 ldr.w r3, [r5, #2328] ; 0x918 +1001c746: 459b cmp fp, r3 +1001c748: d004 beq.n 1001c754 +1001c74a: f503 53c2 add.w r3, r3, #6208 ; 0x1840 +1001c74e: 331c adds r3, #28 +1001c750: 681b ldr r3, [r3, #0] +1001c752: b35b cbz r3, 1001c7ac +1001c754: 4638 mov r0, r7 +1001c756: 4621 mov r1, r4 +1001c758: f7ff ff05 bl 1001c566 +1001c75c: b908 cbnz r0, 1001c762 +1001c75e: 2303 movs r3, #3 +1001c760: e016 b.n 1001c790 +1001c762: 68e2 ldr r2, [r4, #12] +1001c764: f012 0303 ands.w r3, r2, #3 +1001c768: bf18 it ne +1001c76a: 2301 movne r3, #1 +1001c76c: eb03 0392 add.w r3, r3, r2, lsr #2 +1001c770: 009b lsls r3, r3, #2 +1001c772: 60e3 str r3, [r4, #12] +1001c774: 88a3 ldrh r3, [r4, #4] +1001c776: 2b40 cmp r3, #64 ; 0x40 +1001c778: d809 bhi.n 1001c78e +1001c77a: 4a1d ldr r2, [pc, #116] ; (1001c7f0 ) +1001c77c: eb02 03c3 add.w r3, r2, r3, lsl #3 +1001c780: 685b ldr r3, [r3, #4] +1001c782: b133 cbz r3, 1001c792 +1001c784: 4658 mov r0, fp +1001c786: 68a1 ldr r1, [r4, #8] +1001c788: 4798 blx r3 +1001c78a: 71a0 strb r0, [r4, #6] +1001c78c: e001 b.n 1001c792 +1001c78e: 2304 movs r3, #4 +1001c790: 71a3 strb r3, [r4, #6] +1001c792: 88a3 ldrh r3, [r4, #4] +1001c794: 2b40 cmp r3, #64 ; 0x40 +1001c796: d808 bhi.n 1001c7aa +1001c798: 4a16 ldr r2, [pc, #88] ; (1001c7f4 ) +1001c79a: eb02 03c3 add.w r3, r2, r3, lsl #3 +1001c79e: 685b ldr r3, [r3, #4] +1001c7a0: b11b cbz r3, 1001c7aa +1001c7a2: 6820 ldr r0, [r4, #0] +1001c7a4: 4621 mov r1, r4 +1001c7a6: 4798 blx r3 +1001c7a8: e002 b.n 1001c7b0 +1001c7aa: 4620 mov r0, r4 +1001c7ac: f7ff feea bl 1001c584 +1001c7b0: f7fb f823 bl 100177fa +1001c7b4: e7a9 b.n 1001c70a +1001c7b6: 2300 movs r3, #0 +1001c7b8: f885 3914 strb.w r3, [r5, #2324] ; 0x914 +1001c7bc: 4638 mov r0, r7 +1001c7be: f7ff fea4 bl 1001c50a <_rtw_dequeue_cmd> +1001c7c2: b110 cbz r0, 1001c7ca +1001c7c4: f7ff fede bl 1001c584 +1001c7c8: e7f8 b.n 1001c7bc +1001c7ca: f641 035c movw r3, #6236 ; 0x185c +1001c7ce: 58eb ldr r3, [r5, r3] +1001c7d0: b113 cbz r3, 1001c7d8 +1001c7d2: f241 71f8 movw r1, #6136 ; 0x17f8 +1001c7d6: 5058 str r0, [r3, r1] +1001c7d8: 2300 movs r3, #0 +1001c7da: 6173 str r3, [r6, #20] +1001c7dc: 4650 mov r0, sl +1001c7de: f7fa fe6b bl 100174b8 +1001c7e2: e8bd 4ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001c7e6: f7fb b87d b.w 100178e4 +1001c7ea: bf00 nop +1001c7ec: 10040f7e .word 0x10040f7e +1001c7f0: 10040f90 .word 0x10040f90 +1001c7f4: 10041190 .word 0x10041190 + +1001c7f8 : +1001c7f8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001c7fc: f241 036c movw r3, #4204 ; 0x106c +1001c800: 58c3 ldr r3, [r0, r3] +1001c802: b085 sub sp, #20 +1001c804: 2b04 cmp r3, #4 +1001c806: 4604 mov r4, r0 +1001c808: 460d mov r5, r1 +1001c80a: f8d1 807c ldr.w r8, [r1, #124] ; 0x7c +1001c80e: d001 beq.n 1001c814 +1001c810: 2b07 cmp r3, #7 +1001c812: d15d bne.n 1001c8d0 +1001c814: 2300 movs r3, #0 +1001c816: f10d 0910 add.w r9, sp, #16 +1001c81a: f504 5684 add.w r6, r4, #4224 ; 0x1080 +1001c81e: f829 3d02 strh.w r3, [r9, #-2]! +1001c822: 3610 adds r6, #16 +1001c824: f105 0a98 add.w sl, r5, #152 ; 0x98 +1001c828: af03 add r7, sp, #12 +1001c82a: f8ad 300c strh.w r3, [sp, #12] +1001c82e: 9300 str r3, [sp, #0] +1001c830: 9701 str r7, [sp, #4] +1001c832: 4650 mov r0, sl +1001c834: f8d5 1094 ldr.w r1, [r5, #148] ; 0x94 +1001c838: 4632 mov r2, r6 +1001c83a: 464b mov r3, r9 +1001c83c: f022 f890 bl 1003e960 <__rtw_get_sec_ie_veneer> +1001c840: 2800 cmp r0, #0 +1001c842: d045 beq.n 1001c8d0 +1001c844: f8bd 200e ldrh.w r2, [sp, #14] +1001c848: b1ea cbz r2, 1001c886 +1001c84a: 4611 mov r1, r2 +1001c84c: 4630 mov r0, r6 +1001c84e: f009 fab3 bl 10025db8 +1001c852: f241 0398 movw r3, #4248 ; 0x1098 +1001c856: 5ce1 ldrb r1, [r4, r3] +1001c858: 4602 mov r2, r0 +1001c85a: f8ad 000e strh.w r0, [sp, #14] +1001c85e: 1cc8 adds r0, r1, #3 +1001c860: eb06 0181 add.w r1, r6, r1, lsl #2 +1001c864: 7a8b ldrb r3, [r1, #10] +1001c866: 4403 add r3, r0 +1001c868: f816 1023 ldrb.w r1, [r6, r3, lsl #2] +1001c86c: 4620 mov r0, r4 +1001c86e: f001 013f and.w r1, r1, #63 ; 0x3f +1001c872: f806 1023 strb.w r1, [r6, r3, lsl #2] +1001c876: 4631 mov r1, r6 +1001c878: f017 fa4b bl 10033d12 +1001c87c: 4620 mov r0, r4 +1001c87e: 4631 mov r1, r6 +1001c880: f8bd 200e ldrh.w r2, [sp, #14] +1001c884: e01a b.n 1001c8bc +1001c886: f8bd 300c ldrh.w r3, [sp, #12] +1001c88a: b1cb cbz r3, 1001c8c0 +1001c88c: 464b mov r3, r9 +1001c88e: f8d5 1094 ldr.w r1, [r5, #148] ; 0x94 +1001c892: e88d 00c0 stmia.w sp, {r6, r7} +1001c896: 4650 mov r0, sl +1001c898: f022 f862 bl 1003e960 <__rtw_get_sec_ie_veneer> +1001c89c: f8bd 100c ldrh.w r1, [sp, #12] +1001c8a0: 4630 mov r0, r6 +1001c8a2: f009 fac9 bl 10025e38 +1001c8a6: 4631 mov r1, r6 +1001c8a8: 4602 mov r2, r0 +1001c8aa: f8ad 000c strh.w r0, [sp, #12] +1001c8ae: 4620 mov r0, r4 +1001c8b0: f017 fa2f bl 10033d12 +1001c8b4: f8bd 200c ldrh.w r2, [sp, #12] +1001c8b8: 4620 mov r0, r4 +1001c8ba: 4631 mov r1, r6 +1001c8bc: f009 fa04 bl 10025cc8 +1001c8c0: f504 519a add.w r1, r4, #4928 ; 0x1340 +1001c8c4: 4620 mov r0, r4 +1001c8c6: 3104 adds r1, #4 +1001c8c8: f105 022c add.w r2, r5, #44 ; 0x2c +1001c8cc: f009 f9a2 bl 10025c14 +1001c8d0: f7f0 fa28 bl 1000cd24 +1001c8d4: 2800 cmp r0, #0 +1001c8d6: d052 beq.n 1001c97e +1001c8d8: 2300 movs r3, #0 +1001c8da: f10d 0910 add.w r9, sp, #16 +1001c8de: f504 5684 add.w r6, r4, #4224 ; 0x1080 +1001c8e2: f829 3d02 strh.w r3, [r9, #-2]! +1001c8e6: 3610 adds r6, #16 +1001c8e8: f105 0a98 add.w sl, r5, #152 ; 0x98 +1001c8ec: af03 add r7, sp, #12 +1001c8ee: f8ad 300c strh.w r3, [sp, #12] +1001c8f2: 9300 str r3, [sp, #0] +1001c8f4: 9701 str r7, [sp, #4] +1001c8f6: 4650 mov r0, sl +1001c8f8: f8d5 1094 ldr.w r1, [r5, #148] ; 0x94 +1001c8fc: 4632 mov r2, r6 +1001c8fe: 464b mov r3, r9 +1001c900: f022 f82e bl 1003e960 <__rtw_get_sec_ie_veneer> +1001c904: 2800 cmp r0, #0 +1001c906: d03a beq.n 1001c97e +1001c908: f8bd 200e ldrh.w r2, [sp, #14] +1001c90c: b17a cbz r2, 1001c92e +1001c90e: 4611 mov r1, r2 +1001c910: 4630 mov r0, r6 +1001c912: f009 fa51 bl 10025db8 +1001c916: 4631 mov r1, r6 +1001c918: 4602 mov r2, r0 +1001c91a: f8ad 000e strh.w r0, [sp, #14] +1001c91e: 4620 mov r0, r4 +1001c920: f017 f9f7 bl 10033d12 +1001c924: 4620 mov r0, r4 +1001c926: 4631 mov r1, r6 +1001c928: f8bd 200e ldrh.w r2, [sp, #14] +1001c92c: e01a b.n 1001c964 +1001c92e: f8bd 300c ldrh.w r3, [sp, #12] +1001c932: b1cb cbz r3, 1001c968 +1001c934: 464b mov r3, r9 +1001c936: f8d5 1094 ldr.w r1, [r5, #148] ; 0x94 +1001c93a: e88d 00c0 stmia.w sp, {r6, r7} +1001c93e: 4650 mov r0, sl +1001c940: f022 f80e bl 1003e960 <__rtw_get_sec_ie_veneer> +1001c944: f8bd 100c ldrh.w r1, [sp, #12] +1001c948: 4630 mov r0, r6 +1001c94a: f009 fa75 bl 10025e38 +1001c94e: 4631 mov r1, r6 +1001c950: 4602 mov r2, r0 +1001c952: f8ad 000c strh.w r0, [sp, #12] +1001c956: 4620 mov r0, r4 +1001c958: f017 f9db bl 10033d12 +1001c95c: f8bd 200c ldrh.w r2, [sp, #12] +1001c960: 4620 mov r0, r4 +1001c962: 4631 mov r1, r6 +1001c964: f009 f9b0 bl 10025cc8 +1001c968: f241 036c movw r3, #4204 ; 0x106c +1001c96c: 58e2 ldr r2, [r4, r3] +1001c96e: 2a04 cmp r2, #4 +1001c970: d101 bne.n 1001c976 +1001c972: 2203 movs r2, #3 +1001c974: e002 b.n 1001c97c +1001c976: 2a07 cmp r2, #7 +1001c978: d101 bne.n 1001c97e +1001c97a: 2206 movs r2, #6 +1001c97c: 50e2 str r2, [r4, r3] +1001c97e: 2020 movs r0, #32 +1001c980: f7fa ff26 bl 100177d0 +1001c984: 4607 mov r7, r0 +1001c986: 2800 cmp r0, #0 +1001c988: f000 8091 beq.w 1001caae +1001c98c: 6923 ldr r3, [r4, #16] +1001c98e: f013 0f28 tst.w r3, #40 ; 0x28 +1001c992: d106 bne.n 1001c9a2 +1001c994: f1b8 0f00 cmp.w r8, #0 +1001c998: f040 808a bne.w 1001cab0 +1001c99c: f043 0320 orr.w r3, r3, #32 +1001c9a0: 6123 str r3, [r4, #16] +1001c9a2: f44f 705f mov.w r0, #892 ; 0x37c +1001c9a6: f7fa ff13 bl 100177d0 +1001c9aa: 4606 mov r6, r0 +1001c9ac: b928 cbnz r0, 1001c9ba +1001c9ae: 4638 mov r0, r7 +1001c9b0: 2120 movs r1, #32 +1001c9b2: f7fa fd3a bl 1001742a +1001c9b6: 4630 mov r0, r6 +1001c9b8: e081 b.n 1001cabe +1001c9ba: 2100 movs r1, #0 +1001c9bc: f44f 725f mov.w r2, #892 ; 0x37c +1001c9c0: f7fa fd46 bl 10017450 +1001c9c4: f8d5 2094 ldr.w r2, [r5, #148] ; 0x94 +1001c9c8: 4630 mov r0, r6 +1001c9ca: f105 011c add.w r1, r5, #28 +1001c9ce: 327c adds r2, #124 ; 0x7c +1001c9d0: f7fa fd2e bl 10017430 +1001c9d4: 2300 movs r3, #0 +1001c9d6: f886 3078 strb.w r3, [r6, #120] ; 0x78 +1001c9da: f886 3079 strb.w r3, [r6, #121] ; 0x79 +1001c9de: f886 307a strb.w r3, [r6, #122] ; 0x7a +1001c9e2: f886 307b strb.w r3, [r6, #123] ; 0x7b +1001c9e6: f894 3438 ldrb.w r3, [r4, #1080] ; 0x438 +1001c9ea: b933 cbnz r3, 1001c9fa +1001c9ec: f104 0074 add.w r0, r4, #116 ; 0x74 +1001c9f0: f105 0120 add.w r1, r5, #32 +1001c9f4: 2206 movs r2, #6 +1001c9f6: f7fa fd1b bl 10017430 +1001c9fa: f105 0898 add.w r8, r5, #152 ; 0x98 +1001c9fe: f106 0a7c add.w sl, r6, #124 ; 0x7c +1001ca02: f8d5 3094 ldr.w r3, [r5, #148] ; 0x94 +1001ca06: 4620 mov r0, r4 +1001ca08: 4641 mov r1, r8 +1001ca0a: 4652 mov r2, sl +1001ca0c: f001 fb86 bl 1001e11c +1001ca10: f504 599c add.w r9, r4, #4992 ; 0x1380 +1001ca14: f04f 0b00 mov.w fp, #0 +1001ca18: 67b0 str r0, [r6, #120] ; 0x78 +1001ca1a: f109 0908 add.w r9, r9, #8 +1001ca1e: f8c4 b44c str.w fp, [r4, #1100] ; 0x44c +1001ca22: f899 303d ldrb.w r3, [r9, #61] ; 0x3d +1001ca26: b183 cbz r3, 1001ca4a +1001ca28: 9000 str r0, [sp, #0] +1001ca2a: f8d5 3094 ldr.w r3, [r5, #148] ; 0x94 +1001ca2e: 4620 mov r0, r4 +1001ca30: 4641 mov r1, r8 +1001ca32: 4652 mov r2, sl +1001ca34: f001 fb3f bl 1001e0b6 +1001ca38: 6fb3 ldr r3, [r6, #120] ; 0x78 +1001ca3a: 4283 cmp r3, r0 +1001ca3c: bf1b ittet ne +1001ca3e: 2301 movne r3, #1 +1001ca40: 67b0 strne r0, [r6, #120] ; 0x78 +1001ca42: f8c4 b44c streq.w fp, [r4, #1100] ; 0x44c +1001ca46: f8c4 344c strne.w r3, [r4, #1100] ; 0x44c +1001ca4a: 2300 movs r3, #0 +1001ca4c: f8c4 3454 str.w r3, [r4, #1108] ; 0x454 +1001ca50: f899 3044 ldrb.w r3, [r9, #68] ; 0x44 +1001ca54: b183 cbz r3, 1001ca78 +1001ca56: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c +1001ca5a: 1e5a subs r2, r3, #1 +1001ca5c: 2a01 cmp r2, #1 +1001ca5e: d90b bls.n 1001ca78 +1001ca60: 2b05 cmp r3, #5 +1001ca62: d009 beq.n 1001ca78 +1001ca64: f106 0378 add.w r3, r6, #120 ; 0x78 +1001ca68: 9300 str r3, [sp, #0] +1001ca6a: 4620 mov r0, r4 +1001ca6c: 4641 mov r1, r8 +1001ca6e: 4652 mov r2, sl +1001ca70: f8d5 3094 ldr.w r3, [r5, #148] ; 0x94 +1001ca74: f001 fb92 bl 1001e19c +1001ca78: f8d5 1094 ldr.w r1, [r5, #148] ; 0x94 +1001ca7c: 4640 mov r0, r8 +1001ca7e: f00c faab bl 10028fd8 +1001ca82: f884 072e strb.w r0, [r4, #1838] ; 0x72e +1001ca86: 6fb3 ldr r3, [r6, #120] ; 0x78 +1001ca88: f107 0018 add.w r0, r7, #24 +1001ca8c: 337c adds r3, #124 ; 0x7c +1001ca8e: 60fb str r3, [r7, #12] +1001ca90: f7fa fce6 bl 10017460 +1001ca94: 230e movs r3, #14 +1001ca96: 80bb strh r3, [r7, #4] +1001ca98: 2300 movs r3, #0 +1001ca9a: 60be str r6, [r7, #8] +1001ca9c: 613b str r3, [r7, #16] +1001ca9e: 617b str r3, [r7, #20] +1001caa0: f604 1008 addw r0, r4, #2312 ; 0x908 +1001caa4: 4639 mov r1, r7 +1001caa6: f7ff fd82 bl 1001c5ae +1001caaa: b2c0 uxtb r0, r0 +1001caac: e007 b.n 1001cabe +1001caae: e006 b.n 1001cabe +1001cab0: f1b8 0f01 cmp.w r8, #1 +1001cab4: f47f af75 bne.w 1001c9a2 +1001cab8: f043 0308 orr.w r3, r3, #8 +1001cabc: e770 b.n 1001c9a0 +1001cabe: b005 add sp, #20 +1001cac0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +1001cac4 : +1001cac4: b570 push {r4, r5, r6, lr} +1001cac6: 4606 mov r6, r0 +1001cac8: 2020 movs r0, #32 +1001caca: f7fa fe81 bl 100177d0 +1001cace: 4604 mov r4, r0 +1001cad0: b1e8 cbz r0, 1001cb0e +1001cad2: 2004 movs r0, #4 +1001cad4: f7fa fe7c bl 100177d0 +1001cad8: 4605 mov r5, r0 +1001cada: b928 cbnz r0, 1001cae8 +1001cadc: 4620 mov r0, r4 +1001cade: 2120 movs r1, #32 +1001cae0: f7fa fca3 bl 1001742a +1001cae4: 4628 mov r0, r5 +1001cae6: bd70 pop {r4, r5, r6, pc} +1001cae8: f104 0018 add.w r0, r4, #24 +1001caec: f7fa fcb8 bl 10017460 +1001caf0: 230f movs r3, #15 +1001caf2: 80a3 strh r3, [r4, #4] +1001caf4: 2304 movs r3, #4 +1001caf6: 60e3 str r3, [r4, #12] +1001caf8: 2300 movs r3, #0 +1001cafa: 60a5 str r5, [r4, #8] +1001cafc: 6123 str r3, [r4, #16] +1001cafe: 6163 str r3, [r4, #20] +1001cb00: f606 1008 addw r0, r6, #2312 ; 0x908 +1001cb04: 4621 mov r1, r4 +1001cb06: f7ff fd52 bl 1001c5ae +1001cb0a: b2c0 uxtb r0, r0 +1001cb0c: bd70 pop {r4, r5, r6, pc} +1001cb0e: bd70 pop {r4, r5, r6, pc} + +1001cb10 : +1001cb10: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +1001cb14: 4606 mov r6, r0 +1001cb16: 2020 movs r0, #32 +1001cb18: 4688 mov r8, r1 +1001cb1a: 4691 mov r9, r2 +1001cb1c: f7fa fe58 bl 100177d0 +1001cb20: 4604 mov r4, r0 +1001cb22: 2800 cmp r0, #0 +1001cb24: d056 beq.n 1001cbd4 +1001cb26: 2018 movs r0, #24 +1001cb28: f7fa fe52 bl 100177d0 +1001cb2c: 4605 mov r5, r0 +1001cb2e: b930 cbnz r0, 1001cb3e +1001cb30: 4620 mov r0, r4 +1001cb32: 2120 movs r1, #32 +1001cb34: f7fa fc79 bl 1001742a +1001cb38: 4628 mov r0, r5 +1001cb3a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1001cb3e: 2008 movs r0, #8 +1001cb40: f7fa fe46 bl 100177d0 +1001cb44: 4607 mov r7, r0 +1001cb46: b950 cbnz r0, 1001cb5e +1001cb48: 4620 mov r0, r4 +1001cb4a: 2120 movs r1, #32 +1001cb4c: f7fa fc6d bl 1001742a +1001cb50: 4628 mov r0, r5 +1001cb52: 2118 movs r1, #24 +1001cb54: f7fa fc69 bl 1001742a +1001cb58: 4638 mov r0, r7 +1001cb5a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1001cb5e: f104 0018 add.w r0, r4, #24 +1001cb62: f7fa fc7d bl 10017460 +1001cb66: 2315 movs r3, #21 +1001cb68: 80a3 strh r3, [r4, #4] +1001cb6a: 2318 movs r3, #24 +1001cb6c: 60e3 str r3, [r4, #12] +1001cb6e: 2308 movs r3, #8 +1001cb70: 6163 str r3, [r4, #20] +1001cb72: f508 7384 add.w r3, r8, #264 ; 0x108 +1001cb76: 4619 mov r1, r3 +1001cb78: 4638 mov r0, r7 +1001cb7a: 6127 str r7, [r4, #16] +1001cb7c: 2206 movs r2, #6 +1001cb7e: 461f mov r7, r3 +1001cb80: 60a5 str r5, [r4, #8] +1001cb82: f7fa fc55 bl 10017430 +1001cb86: 4628 mov r0, r5 +1001cb88: 4639 mov r1, r7 +1001cb8a: 2206 movs r2, #6 +1001cb8c: f7fa fc50 bl 10017430 +1001cb90: 6933 ldr r3, [r6, #16] +1001cb92: 071b lsls r3, r3, #28 +1001cb94: d520 bpl.n 1001cbd8 +1001cb96: f8d6 3d0c ldr.w r3, [r6, #3340] ; 0xd0c +1001cb9a: 71ab strb r3, [r5, #6] +1001cb9c: f1b9 0f01 cmp.w r9, #1 +1001cba0: bf17 itett ne +1001cba2: f8d6 1d68 ldrne.w r1, [r6, #3432] ; 0xd68 +1001cba6: f508 719c addeq.w r1, r8, #312 ; 0x138 +1001cbaa: eb06 1101 addne.w r1, r6, r1, lsl #4 +1001cbae: f601 516c addwne r1, r1, #3436 ; 0xd6c +1001cbb2: f105 0008 add.w r0, r5, #8 +1001cbb6: 2210 movs r2, #16 +1001cbb8: f7fa fc3a bl 10017430 +1001cbbc: 2201 movs r2, #1 +1001cbbe: f241 035d movw r3, #4189 ; 0x105d +1001cbc2: 54f2 strb r2, [r6, r3] +1001cbc4: f606 1008 addw r0, r6, #2312 ; 0x908 +1001cbc8: 4621 mov r1, r4 +1001cbca: f7ff fcf0 bl 1001c5ae +1001cbce: b2c0 uxtb r0, r0 +1001cbd0: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1001cbd4: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1001cbd8: f8d6 3d08 ldr.w r3, [r6, #3336] ; 0xd08 +1001cbdc: 2b04 cmp r3, #4 +1001cbde: d8dd bhi.n 1001cb9c +1001cbe0: a201 add r2, pc, #4 ; (adr r2, 1001cbe8 ) +1001cbe2: f852 f023 ldr.w pc, [r2, r3, lsl #2] +1001cbe6: bf00 nop +1001cbe8: 1001cb97 .word 0x1001cb97 +1001cbec: 1001cb97 .word 0x1001cb97 +1001cbf0: 1001cbfd .word 0x1001cbfd +1001cbf4: 1001cb97 .word 0x1001cb97 +1001cbf8: 1001cb97 .word 0x1001cb97 +1001cbfc: f8d8 3114 ldr.w r3, [r8, #276] ; 0x114 +1001cc00: e7cb b.n 1001cb9a +1001cc02: bf00 nop + +1001cc04 : +1001cc04: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +1001cc08: 4681 mov r9, r0 +1001cc0a: 4688 mov r8, r1 +1001cc0c: 4617 mov r7, r2 +1001cc0e: b92b cbnz r3, 1001cc1c +1001cc10: 4611 mov r1, r2 +1001cc12: f00b fe3e bl 10028892 +1001cc16: 2001 movs r0, #1 +1001cc18: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1001cc1c: 2020 movs r0, #32 +1001cc1e: f7fa fdd7 bl 100177d0 +1001cc22: 4604 mov r4, r0 +1001cc24: 2800 cmp r0, #0 +1001cc26: d03b beq.n 1001cca0 +1001cc28: 2018 movs r0, #24 +1001cc2a: f7fa fdd1 bl 100177d0 +1001cc2e: 4605 mov r5, r0 +1001cc30: b930 cbnz r0, 1001cc40 +1001cc32: 4620 mov r0, r4 +1001cc34: 2120 movs r1, #32 +1001cc36: f7fa fbf8 bl 1001742a +1001cc3a: 4628 mov r0, r5 +1001cc3c: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1001cc40: 2008 movs r0, #8 +1001cc42: f7fa fdc5 bl 100177d0 +1001cc46: 4606 mov r6, r0 +1001cc48: b950 cbnz r0, 1001cc60 +1001cc4a: 4620 mov r0, r4 +1001cc4c: 2120 movs r1, #32 +1001cc4e: f7fa fbec bl 1001742a +1001cc52: 4628 mov r0, r5 +1001cc54: 2118 movs r1, #24 +1001cc56: f7fa fbe8 bl 1001742a +1001cc5a: 4630 mov r0, r6 +1001cc5c: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1001cc60: f104 0018 add.w r0, r4, #24 +1001cc64: f7fa fbfc bl 10017460 +1001cc68: 2315 movs r3, #21 +1001cc6a: 80a3 strh r3, [r4, #4] +1001cc6c: 2318 movs r3, #24 +1001cc6e: 60e3 str r3, [r4, #12] +1001cc70: 2308 movs r3, #8 +1001cc72: 60a5 str r5, [r4, #8] +1001cc74: 6126 str r6, [r4, #16] +1001cc76: 6163 str r3, [r4, #20] +1001cc78: f1b8 0f00 cmp.w r8, #0 +1001cc7c: d005 beq.n 1001cc8a +1001cc7e: 4628 mov r0, r5 +1001cc80: f508 7184 add.w r1, r8, #264 ; 0x108 +1001cc84: 2206 movs r2, #6 +1001cc86: f7fa fbd3 bl 10017430 +1001cc8a: 2300 movs r3, #0 +1001cc8c: 71ab strb r3, [r5, #6] +1001cc8e: 71ef strb r7, [r5, #7] +1001cc90: f609 1008 addw r0, r9, #2312 ; 0x908 +1001cc94: 4621 mov r1, r4 +1001cc96: f7ff fc8a bl 1001c5ae +1001cc9a: b2c0 uxtb r0, r0 +1001cc9c: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1001cca0: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + +1001cca4 : +1001cca4: b5f8 push {r3, r4, r5, r6, r7, lr} +1001cca6: 4607 mov r7, r0 +1001cca8: 2020 movs r0, #32 +1001ccaa: f7fa fd91 bl 100177d0 +1001ccae: 4604 mov r4, r0 +1001ccb0: b308 cbz r0, 1001ccf6 +1001ccb2: 2010 movs r0, #16 +1001ccb4: f7fa fd8c bl 100177d0 +1001ccb8: 2600 movs r6, #0 +1001ccba: 4605 mov r5, r0 +1001ccbc: b928 cbnz r0, 1001ccca +1001ccbe: 4620 mov r0, r4 +1001ccc0: 2120 movs r1, #32 +1001ccc2: f7fa fbb2 bl 1001742a +1001ccc6: 4628 mov r0, r5 +1001ccc8: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001ccca: 2301 movs r3, #1 +1001cccc: 6003 str r3, [r0, #0] +1001ccce: 6086 str r6, [r0, #8] +1001ccd0: 60c7 str r7, [r0, #12] +1001ccd2: f104 0018 add.w r0, r4, #24 +1001ccd6: f7fa fbc3 bl 10017460 +1001ccda: 2339 movs r3, #57 ; 0x39 +1001ccdc: 80a3 strh r3, [r4, #4] +1001ccde: 2310 movs r3, #16 +1001cce0: 60a5 str r5, [r4, #8] +1001cce2: 60e3 str r3, [r4, #12] +1001cce4: 6126 str r6, [r4, #16] +1001cce6: 6166 str r6, [r4, #20] +1001cce8: f607 1008 addw r0, r7, #2312 ; 0x908 +1001ccec: 4621 mov r1, r4 +1001ccee: f7ff fc5e bl 1001c5ae +1001ccf2: b2c0 uxtb r0, r0 +1001ccf4: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001ccf6: bdf8 pop {r3, r4, r5, r6, r7, pc} + +1001ccf8 : +1001ccf8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1001ccfc: 4607 mov r7, r0 +1001ccfe: 2020 movs r0, #32 +1001cd00: 4688 mov r8, r1 +1001cd02: f7fa fd65 bl 100177d0 +1001cd06: 4604 mov r4, r0 +1001cd08: b318 cbz r0, 1001cd52 +1001cd0a: 200c movs r0, #12 +1001cd0c: f7fa fd60 bl 100177d0 +1001cd10: 2600 movs r6, #0 +1001cd12: 4605 mov r5, r0 +1001cd14: b930 cbnz r0, 1001cd24 +1001cd16: 4620 mov r0, r4 +1001cd18: 2120 movs r1, #32 +1001cd1a: f7fa fb86 bl 1001742a +1001cd1e: 4628 mov r0, r5 +1001cd20: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1001cd24: f8c0 8000 str.w r8, [r0] +1001cd28: 6046 str r6, [r0, #4] +1001cd2a: 6087 str r7, [r0, #8] +1001cd2c: f104 0018 add.w r0, r4, #24 +1001cd30: f7fa fb96 bl 10017460 +1001cd34: 233f movs r3, #63 ; 0x3f +1001cd36: 80a3 strh r3, [r4, #4] +1001cd38: 230c movs r3, #12 +1001cd3a: 60a5 str r5, [r4, #8] +1001cd3c: 60e3 str r3, [r4, #12] +1001cd3e: 6126 str r6, [r4, #16] +1001cd40: 6166 str r6, [r4, #20] +1001cd42: f607 1008 addw r0, r7, #2312 ; 0x908 +1001cd46: 4621 mov r1, r4 +1001cd48: f7ff fc31 bl 1001c5ae +1001cd4c: b2c0 uxtb r0, r0 +1001cd4e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1001cd52: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1001cd56 : +1001cd56: 2958 cmp r1, #88 ; 0x58 +1001cd58: b5f8 push {r3, r4, r5, r6, r7, lr} +1001cd5a: 4607 mov r7, r0 +1001cd5c: 460e mov r6, r1 +1001cd5e: 4614 mov r4, r2 +1001cd60: d903 bls.n 1001cd6a +1001cd62: 297f cmp r1, #127 ; 0x7f +1001cd64: d001 beq.n 1001cd6a +1001cd66: 2400 movs r4, #0 +1001cd68: e033 b.n 1001cdd2 +1001cd6a: 2001 movs r0, #1 +1001cd6c: f7fa fd30 bl 100177d0 +1001cd70: 4605 mov r5, r0 +1001cd72: 2800 cmp r0, #0 +1001cd74: d0f7 beq.n 1001cd66 +1001cd76: 7006 strb r6, [r0, #0] +1001cd78: b1dc cbz r4, 1001cdb2 +1001cd7a: 2020 movs r0, #32 +1001cd7c: f7fa fd28 bl 100177d0 +1001cd80: 4604 mov r4, r0 +1001cd82: b920 cbnz r0, 1001cd8e +1001cd84: 4628 mov r0, r5 +1001cd86: 2101 movs r1, #1 +1001cd88: f7fa fb4f bl 1001742a +1001cd8c: e021 b.n 1001cdd2 +1001cd8e: 3018 adds r0, #24 +1001cd90: f7fa fb66 bl 10017460 +1001cd94: 233b movs r3, #59 ; 0x3b +1001cd96: 80a3 strh r3, [r4, #4] +1001cd98: 2301 movs r3, #1 +1001cd9a: 60e3 str r3, [r4, #12] +1001cd9c: 2300 movs r3, #0 +1001cd9e: 60a5 str r5, [r4, #8] +1001cda0: 6123 str r3, [r4, #16] +1001cda2: 6163 str r3, [r4, #20] +1001cda4: 4621 mov r1, r4 +1001cda6: f607 1008 addw r0, r7, #2312 ; 0x908 +1001cdaa: f7ff fc00 bl 1001c5ae +1001cdae: b2c4 uxtb r4, r0 +1001cdb0: e00b b.n 1001cdca +1001cdb2: 4629 mov r1, r5 +1001cdb4: 4638 mov r0, r7 +1001cdb6: f006 fb75 bl 100234a4 +1001cdba: 2101 movs r1, #1 +1001cdbc: f1d0 0401 rsbs r4, r0, #1 +1001cdc0: 4628 mov r0, r5 +1001cdc2: bf38 it cc +1001cdc4: 2400 movcc r4, #0 +1001cdc6: f7fa fb30 bl 1001742a +1001cdca: 2c01 cmp r4, #1 +1001cdcc: bf08 it eq +1001cdce: f887 649e strbeq.w r6, [r7, #1182] ; 0x49e +1001cdd2: 4620 mov r0, r4 +1001cdd4: bdf8 pop {r3, r4, r5, r6, r7, pc} + +1001cdd6 : +1001cdd6: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1001cdda: 4608 mov r0, r1 +1001cddc: 460c mov r4, r1 +1001cdde: f005 fa5b bl 10022298 <_linked_info_dump> +1001cde2: 4620 mov r0, r4 +1001cde4: f005 faa6 bl 10022334 +1001cde8: 6925 ldr r5, [r4, #16] +1001cdea: f015 0501 ands.w r5, r5, #1 +1001cdee: d11f bne.n 1001ce30 +1001cdf0: 4620 mov r0, r4 +1001cdf2: f009 fb23 bl 1002643c +1001cdf6: 462e mov r6, r5 +1001cdf8: 46a8 mov r8, r5 +1001cdfa: 462f mov r7, r5 +1001cdfc: 46aa mov sl, r5 +1001cdfe: 46a9 mov r9, r5 +1001ce00: 2300 movs r3, #0 +1001ce02: f8c4 3480 str.w r3, [r4, #1152] ; 0x480 +1001ce06: f8c4 347c str.w r3, [r4, #1148] ; 0x47c +1001ce0a: f8c4 3484 str.w r3, [r4, #1156] ; 0x484 +1001ce0e: f884 9488 strb.w r9, [r4, #1160] ; 0x488 +1001ce12: f884 a489 strb.w sl, [r4, #1161] ; 0x489 +1001ce16: f884 748a strb.w r7, [r4, #1162] ; 0x48a +1001ce1a: f884 848b strb.w r8, [r4, #1163] ; 0x48b +1001ce1e: f884 648c strb.w r6, [r4, #1164] ; 0x48c +1001ce22: f884 548d strb.w r5, [r4, #1165] ; 0x48d +1001ce26: 4620 mov r0, r4 +1001ce28: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1001ce2c: f015 bc82 b.w 10032734 +1001ce30: f8d4 2480 ldr.w r2, [r4, #1152] ; 0x480 +1001ce34: f8d4 347c ldr.w r3, [r4, #1148] ; 0x47c +1001ce38: 2a64 cmp r2, #100 ; 0x64 +1001ce3a: d801 bhi.n 1001ce40 +1001ce3c: 2b64 cmp r3, #100 ; 0x64 +1001ce3e: d90e bls.n 1001ce5e +1001ce40: 429a cmp r2, r3 +1001ce42: bf94 ite ls +1001ce44: 2700 movls r7, #0 +1001ce46: 2701 movhi r7, #1 +1001ce48: bf94 ite ls +1001ce4a: f04f 0a01 movls.w sl, #1 +1001ce4e: f04f 0a00 movhi.w sl, #0 +1001ce52: f5b2 6f7a cmp.w r2, #4000 ; 0xfa0 +1001ce56: f04f 0901 mov.w r9, #1 +1001ce5a: d806 bhi.n 1001ce6a +1001ce5c: e002 b.n 1001ce64 +1001ce5e: 2700 movs r7, #0 +1001ce60: 46ba mov sl, r7 +1001ce62: 46b9 mov r9, r7 +1001ce64: f5b3 6f7a cmp.w r3, #4000 ; 0xfa0 +1001ce68: d905 bls.n 1001ce76 +1001ce6a: 429a cmp r2, r3 +1001ce6c: d905 bls.n 1001ce7a +1001ce6e: 2601 movs r6, #1 +1001ce70: 2500 movs r5, #0 +1001ce72: 46b0 mov r8, r6 +1001ce74: e004 b.n 1001ce80 +1001ce76: 2500 movs r5, #0 +1001ce78: e000 b.n 1001ce7c +1001ce7a: 2501 movs r5, #1 +1001ce7c: 2600 movs r6, #0 +1001ce7e: 46a8 mov r8, r5 +1001ce80: f8d4 2484 ldr.w r2, [r4, #1156] ; 0x484 +1001ce84: 4413 add r3, r2 +1001ce86: 2b08 cmp r3, #8 +1001ce88: d805 bhi.n 1001ce96 +1001ce8a: 2a02 cmp r2, #2 +1001ce8c: d803 bhi.n 1001ce96 +1001ce8e: 4620 mov r0, r4 +1001ce90: f009 fa9e bl 100263d0 +1001ce94: e7b4 b.n 1001ce00 +1001ce96: 4620 mov r0, r4 +1001ce98: f009 fad0 bl 1002643c +1001ce9c: e7b0 b.n 1001ce00 + +1001ce9e : +1001ce9e: b537 push {r0, r1, r2, r4, r5, lr} +1001cea0: 6903 ldr r3, [r0, #16] +1001cea2: 4604 mov r4, r0 +1001cea4: f013 0f60 tst.w r3, #96 ; 0x60 +1001cea8: d12e bne.n 1001cf08 +1001ceaa: 2906 cmp r1, #6 +1001ceac: d82c bhi.n 1001cf08 +1001ceae: e8df f001 tbb [pc, r1] +1001ceb2: 2804 .short 0x2804 +1001ceb4: 281f1207 .word 0x281f1207 +1001ceb8: 1f .byte 0x1f +1001ceb9: 00 .byte 0x00 +1001ceba: 07db lsls r3, r3, #31 +1001cebc: d421 bmi.n 1001cf02 +1001cebe: e023 b.n 1001cf08 +1001cec0: 2301 movs r3, #1 +1001cec2: aa02 add r2, sp, #8 +1001cec4: 2100 movs r1, #0 +1001cec6: f802 3d01 strb.w r3, [r2, #-1]! +1001ceca: f241 4342 movw r3, #5186 ; 0x1442 +1001cece: 54e1 strb r1, [r4, r3] +1001ced0: 4620 mov r0, r4 +1001ced2: 212d movs r1, #45 ; 0x2d +1001ced4: e009 b.n 1001ceea +1001ced6: ad02 add r5, sp, #8 +1001ced8: 2300 movs r3, #0 +1001ceda: f805 3d01 strb.w r3, [r5, #-1]! +1001cede: 4620 mov r0, r4 +1001cee0: f009 faac bl 1002643c +1001cee4: 4620 mov r0, r4 +1001cee6: 212d movs r1, #45 ; 0x2d +1001cee8: 462a mov r2, r5 +1001ceea: f015 fb02 bl 100324f2 +1001ceee: e00b b.n 1001cf08 +1001cef0: f44f 707a mov.w r0, #1000 ; 0x3e8 +1001cef4: f7fa fc92 bl 1001781c +1001cef8: f7fa fb82 bl 10017600 +1001cefc: f504 53a0 add.w r3, r4, #5120 ; 0x1400 +1001cf00: 6498 str r0, [r3, #72] ; 0x48 +1001cf02: 4620 mov r0, r4 +1001cf04: f009 fa9a bl 1002643c +1001cf08: b003 add sp, #12 +1001cf0a: bd30 pop {r4, r5, pc} + +1001cf0c : +1001cf0c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1001cf10: 4607 mov r7, r0 +1001cf12: 4688 mov r8, r1 +1001cf14: b342 cbz r2, 1001cf68 +1001cf16: 2020 movs r0, #32 +1001cf18: f7fa fc5a bl 100177d0 +1001cf1c: 4604 mov r4, r0 +1001cf1e: b340 cbz r0, 1001cf72 +1001cf20: 2010 movs r0, #16 +1001cf22: f7fa fc55 bl 100177d0 +1001cf26: 2600 movs r6, #0 +1001cf28: 4605 mov r5, r0 +1001cf2a: b930 cbnz r0, 1001cf3a +1001cf2c: 4620 mov r0, r4 +1001cf2e: 2120 movs r1, #32 +1001cf30: f7fa fa7b bl 1001742a +1001cf34: 4628 mov r0, r5 +1001cf36: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1001cf3a: 2305 movs r3, #5 +1001cf3c: e880 0108 stmia.w r0, {r3, r8} +1001cf40: 60c6 str r6, [r0, #12] +1001cf42: f104 0018 add.w r0, r4, #24 +1001cf46: f7fa fa8b bl 10017460 +1001cf4a: 2339 movs r3, #57 ; 0x39 +1001cf4c: 80a3 strh r3, [r4, #4] +1001cf4e: 2310 movs r3, #16 +1001cf50: 60a5 str r5, [r4, #8] +1001cf52: 60e3 str r3, [r4, #12] +1001cf54: 6126 str r6, [r4, #16] +1001cf56: 6166 str r6, [r4, #20] +1001cf58: f607 1008 addw r0, r7, #2312 ; 0x908 +1001cf5c: 4621 mov r1, r4 +1001cf5e: f7ff fb26 bl 1001c5ae +1001cf62: b2c0 uxtb r0, r0 +1001cf64: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1001cf68: f7ff ff99 bl 1001ce9e +1001cf6c: 2001 movs r0, #1 +1001cf6e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1001cf72: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1001cf76 : +1001cf76: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1001cf7a: 460f mov r7, r1 +1001cf7c: 4690 mov r8, r2 +1001cf7e: 2100 movs r1, #0 +1001cf80: 2201 movs r2, #1 +1001cf82: 4604 mov r4, r0 +1001cf84: f7ff ffc2 bl 1001cf0c +1001cf88: 2020 movs r0, #32 +1001cf8a: f7fa fc21 bl 100177d0 +1001cf8e: 4605 mov r5, r0 +1001cf90: 2800 cmp r0, #0 +1001cf92: d051 beq.n 1001d038 +1001cf94: 2030 movs r0, #48 ; 0x30 +1001cf96: f7fa fc1b bl 100177d0 +1001cf9a: 4606 mov r6, r0 +1001cf9c: b930 cbnz r0, 1001cfac +1001cf9e: 4628 mov r0, r5 +1001cfa0: 2120 movs r1, #32 +1001cfa2: f7fa fa42 bl 1001742a +1001cfa6: 4630 mov r0, r6 +1001cfa8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1001cfac: 2100 movs r1, #0 +1001cfae: 4620 mov r0, r4 +1001cfb0: f000 fb2d bl 1001d60e +1001cfb4: f105 0018 add.w r0, r5, #24 +1001cfb8: f7fa fa52 bl 10017460 +1001cfbc: 2312 movs r3, #18 +1001cfbe: 80ab strh r3, [r5, #4] +1001cfc0: 2100 movs r1, #0 +1001cfc2: 2330 movs r3, #48 ; 0x30 +1001cfc4: 60eb str r3, [r5, #12] +1001cfc6: 60ae str r6, [r5, #8] +1001cfc8: 6129 str r1, [r5, #16] +1001cfca: 6169 str r1, [r5, #20] +1001cfcc: 6073 str r3, [r6, #4] +1001cfce: f8d4 34a0 ldr.w r3, [r4, #1184] ; 0x4a0 +1001cfd2: 2228 movs r2, #40 ; 0x28 +1001cfd4: f846 3b08 str.w r3, [r6], #8 +1001cfd8: 4630 mov r0, r6 +1001cfda: f7fa fa39 bl 10017450 +1001cfde: b14f cbz r7, 1001cff4 +1001cfe0: f1b8 0f00 cmp.w r8, #0 +1001cfe4: dd06 ble.n 1001cff4 +1001cfe6: 683b ldr r3, [r7, #0] +1001cfe8: b123 cbz r3, 1001cff4 +1001cfea: 4630 mov r0, r6 +1001cfec: 4639 mov r1, r7 +1001cfee: 2228 movs r2, #40 ; 0x28 +1001cff0: f7fa fa1e bl 10017430 +1001cff4: 6923 ldr r3, [r4, #16] +1001cff6: 4629 mov r1, r5 +1001cff8: f443 6300 orr.w r3, r3, #2048 ; 0x800 +1001cffc: 6123 str r3, [r4, #16] +1001cffe: 2301 movs r3, #1 +1001d000: 7523 strb r3, [r4, #20] +1001d002: f604 1008 addw r0, r4, #2312 ; 0x908 +1001d006: f7ff fad2 bl 1001c5ae +1001d00a: b2c5 uxtb r5, r0 +1001d00c: 2d01 cmp r5, #1 +1001d00e: d10d bne.n 1001d02c +1001d010: f7fa faf6 bl 10017600 +1001d014: f44f 51fa mov.w r1, #8000 ; 0x1f40 +1001d018: f8c4 0448 str.w r0, [r4, #1096] ; 0x448 +1001d01c: f204 403c addw r0, r4, #1084 ; 0x43c +1001d020: f019 ff0a bl 10036e38 +1001d024: 231e movs r3, #30 +1001d026: f8c4 3428 str.w r3, [r4, #1064] ; 0x428 +1001d02a: e005 b.n 1001d038 +1001d02c: 6923 ldr r3, [r4, #16] +1001d02e: f423 6300 bic.w r3, r3, #2048 ; 0x800 +1001d032: 6123 str r3, [r4, #16] +1001d034: 2300 movs r3, #0 +1001d036: 7523 strb r3, [r4, #20] +1001d038: 4628 mov r0, r5 +1001d03a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1001d03e : +1001d03e: b507 push {r0, r1, r2, lr} +1001d040: aa02 add r2, sp, #8 +1001d042: f822 1d02 strh.w r1, [r2, #-2]! +1001d046: 2143 movs r1, #67 ; 0x43 +1001d048: f015 fa53 bl 100324f2 +1001d04c: b003 add sp, #12 +1001d04e: f85d fb04 ldr.w pc, [sp], #4 + +1001d052 : +1001d052: b5f8 push {r3, r4, r5, r6, r7, lr} +1001d054: f641 0369 movw r3, #6249 ; 0x1869 +1001d058: 5cc6 ldrb r6, [r0, r3] +1001d05a: 4607 mov r7, r0 +1001d05c: bb26 cbnz r6, 1001d0a8 +1001d05e: 2020 movs r0, #32 +1001d060: f7fa fbb6 bl 100177d0 +1001d064: 4604 mov r4, r0 +1001d066: b308 cbz r0, 1001d0ac +1001d068: 2010 movs r0, #16 +1001d06a: f7fa fbb1 bl 100177d0 +1001d06e: 4605 mov r5, r0 +1001d070: b928 cbnz r0, 1001d07e +1001d072: 4620 mov r0, r4 +1001d074: 2120 movs r1, #32 +1001d076: f7fa f9d8 bl 1001742a +1001d07a: 4628 mov r0, r5 +1001d07c: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001d07e: 2304 movs r3, #4 +1001d080: 6003 str r3, [r0, #0] +1001d082: 60c6 str r6, [r0, #12] +1001d084: f104 0018 add.w r0, r4, #24 +1001d088: f7fa f9ea bl 10017460 +1001d08c: 2339 movs r3, #57 ; 0x39 +1001d08e: 80a3 strh r3, [r4, #4] +1001d090: 2310 movs r3, #16 +1001d092: 60a5 str r5, [r4, #8] +1001d094: 60e3 str r3, [r4, #12] +1001d096: 6126 str r6, [r4, #16] +1001d098: 6166 str r6, [r4, #20] +1001d09a: f607 1008 addw r0, r7, #2312 ; 0x908 +1001d09e: 4621 mov r1, r4 +1001d0a0: f7ff fa85 bl 1001c5ae +1001d0a4: b2c0 uxtb r0, r0 +1001d0a6: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001d0a8: 2001 movs r0, #1 +1001d0aa: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001d0ac: bdf8 pop {r3, r4, r5, r6, r7, pc} + +1001d0ae : +1001d0ae: b5f8 push {r3, r4, r5, r6, r7, lr} +1001d0b0: 4607 mov r7, r0 +1001d0b2: 2020 movs r0, #32 +1001d0b4: f7fa fb8c bl 100177d0 +1001d0b8: 4604 mov r4, r0 +1001d0ba: b308 cbz r0, 1001d100 +1001d0bc: 2010 movs r0, #16 +1001d0be: f7fa fb87 bl 100177d0 +1001d0c2: 2600 movs r6, #0 +1001d0c4: 4605 mov r5, r0 +1001d0c6: b928 cbnz r0, 1001d0d4 +1001d0c8: 4620 mov r0, r4 +1001d0ca: 2120 movs r1, #32 +1001d0cc: f7fa f9ad bl 1001742a +1001d0d0: 4628 mov r0, r5 +1001d0d2: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001d0d4: 2308 movs r3, #8 +1001d0d6: e880 0048 stmia.w r0, {r3, r6} +1001d0da: 60c6 str r6, [r0, #12] +1001d0dc: f104 0018 add.w r0, r4, #24 +1001d0e0: f7fa f9be bl 10017460 +1001d0e4: 2339 movs r3, #57 ; 0x39 +1001d0e6: 80a3 strh r3, [r4, #4] +1001d0e8: 2310 movs r3, #16 +1001d0ea: 60a5 str r5, [r4, #8] +1001d0ec: 60e3 str r3, [r4, #12] +1001d0ee: 6126 str r6, [r4, #16] +1001d0f0: 6166 str r6, [r4, #20] +1001d0f2: f607 1008 addw r0, r7, #2312 ; 0x908 +1001d0f6: 4621 mov r1, r4 +1001d0f8: f7ff fa59 bl 1001c5ae +1001d0fc: b2c0 uxtb r0, r0 +1001d0fe: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001d100: bdf8 pop {r3, r4, r5, r6, r7, pc} + +1001d102 : +1001d102: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +1001d106: 4604 mov r4, r0 +1001d108: 460d mov r5, r1 +1001d10a: 2900 cmp r1, #0 +1001d10c: d047 beq.n 1001d19e +1001d10e: 680b ldr r3, [r1, #0] +1001d110: 3b01 subs r3, #1 +1001d112: 2b0a cmp r3, #10 +1001d114: d83b bhi.n 1001d18e +1001d116: e8df f003 tbb [pc, r3] +1001d11a: 3a06 .short 0x3a06 +1001d11c: 3a0e0b3a .word 0x3a0e0b3a +1001d120: 363a163a .word 0x363a163a +1001d124: 12 .byte 0x12 +1001d125: 00 .byte 0x00 +1001d126: 68c9 ldr r1, [r1, #12] +1001d128: 68aa ldr r2, [r5, #8] +1001d12a: f7ff fe54 bl 1001cdd6 +1001d12e: e02e b.n 1001d18e +1001d130: f009 f88c bl 1002624c +1001d134: e02b b.n 1001d18e +1001d136: 7909 ldrb r1, [r1, #4] +1001d138: f7ff feb1 bl 1001ce9e +1001d13c: e027 b.n 1001d18e +1001d13e: 8889 ldrh r1, [r1, #4] +1001d140: f7ff ff7d bl 1001d03e +1001d144: e023 b.n 1001d18e +1001d146: f00b f90b bl 10028360 +1001d14a: 4607 mov r7, r0 +1001d14c: b1f8 cbz r0, 1001d18e +1001d14e: f8d0 30f4 ldr.w r3, [r0, #244] ; 0xf4 +1001d152: b9e3 cbnz r3, 1001d18e +1001d154: ae02 add r6, sp, #8 +1001d156: f806 3d01 strb.w r3, [r6, #-1]! +1001d15a: 4620 mov r0, r4 +1001d15c: 2146 movs r1, #70 ; 0x46 +1001d15e: 4632 mov r2, r6 +1001d160: f015 f9ce bl 10032500 +1001d164: f04f 080b mov.w r8, #11 +1001d168: f89d 3007 ldrb.w r3, [sp, #7] +1001d16c: b9db cbnz r3, 1001d1a6 +1001d16e: 2064 movs r0, #100 ; 0x64 +1001d170: f7fa fa80 bl 10017674 +1001d174: f1b8 0801 subs.w r8, r8, #1 +1001d178: 4620 mov r0, r4 +1001d17a: d02a beq.n 1001d1d2 +1001d17c: 2146 movs r1, #70 ; 0x46 +1001d17e: 4632 mov r2, r6 +1001d180: f015 f9be bl 10032500 +1001d184: e7f0 b.n 1001d168 +1001d186: 2142 movs r1, #66 ; 0x42 +1001d188: 2200 movs r2, #0 +1001d18a: f015 f9b2 bl 100324f2 +1001d18e: 68e8 ldr r0, [r5, #12] +1001d190: b310 cbz r0, 1001d1d8 +1001d192: 68a9 ldr r1, [r5, #8] +1001d194: 2900 cmp r1, #0 +1001d196: dd04 ble.n 1001d1a2 +1001d198: f7fa f947 bl 1001742a +1001d19c: e001 b.n 1001d1a2 +1001d19e: 2004 movs r0, #4 +1001d1a0: e01a b.n 1001d1d8 +1001d1a2: 2000 movs r0, #0 +1001d1a4: e018 b.n 1001d1d8 +1001d1a6: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 +1001d1aa: b95b cbnz r3, 1001d1c4 +1001d1ac: f8b4 3cfe ldrh.w r3, [r4, #3326] ; 0xcfe +1001d1b0: f023 0301 bic.w r3, r3, #1 +1001d1b4: f8a4 3cfe strh.w r3, [r4, #3326] ; 0xcfe +1001d1b8: f8b4 3cfc ldrh.w r3, [r4, #3324] ; 0xcfc +1001d1bc: f023 0301 bic.w r3, r3, #1 +1001d1c0: f8a4 3cfc strh.w r3, [r4, #3324] ; 0xcfc +1001d1c4: 2200 movs r2, #0 +1001d1c6: 4620 mov r0, r4 +1001d1c8: 2105 movs r1, #5 +1001d1ca: 4613 mov r3, r2 +1001d1cc: f7fd ff2c bl 1001b028 +1001d1d0: e7dd b.n 1001d18e +1001d1d2: f7ff ff6c bl 1001d0ae +1001d1d6: e7da b.n 1001d18e +1001d1d8: b002 add sp, #8 +1001d1da: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1001d1de : +1001d1de: b538 push {r3, r4, r5, lr} +1001d1e0: 4604 mov r4, r0 +1001d1e2: 6800 ldr r0, [r0, #0] +1001d1e4: 460d mov r5, r1 +1001d1e6: b128 cbz r0, 1001d1f4 +1001d1e8: 6809 ldr r1, [r1, #0] +1001d1ea: f7fa f91e bl 1001742a +1001d1ee: 2300 movs r3, #0 +1001d1f0: 602b str r3, [r5, #0] +1001d1f2: 6023 str r3, [r4, #0] +1001d1f4: bd38 pop {r3, r4, r5, pc} + ... + +1001d1f8 : +1001d1f8: b537 push {r0, r1, r2, r4, r5, lr} +1001d1fa: 4b10 ldr r3, [pc, #64] ; (1001d23c ) +1001d1fc: 4604 mov r4, r0 +1001d1fe: f641 0534 movw r5, #6196 ; 0x1834 +1001d202: 9300 str r3, [sp, #0] +1001d204: 5961 ldr r1, [r4, r5] +1001d206: 4623 mov r3, r4 +1001d208: f200 402c addw r0, r0, #1068 ; 0x42c +1001d20c: 4a0c ldr r2, [pc, #48] ; (1001d240 ) +1001d20e: f019 fe0f bl 10036e30 +1001d212: 4b0c ldr r3, [pc, #48] ; (1001d244 ) +1001d214: f204 403c addw r0, r4, #1084 ; 0x43c +1001d218: 9300 str r3, [sp, #0] +1001d21a: 5961 ldr r1, [r4, r5] +1001d21c: 4623 mov r3, r4 +1001d21e: 4a0a ldr r2, [pc, #40] ; (1001d248 ) +1001d220: f019 fe06 bl 10036e30 +1001d224: 4b09 ldr r3, [pc, #36] ; (1001d24c ) +1001d226: f504 6092 add.w r0, r4, #1168 ; 0x490 +1001d22a: 9300 str r3, [sp, #0] +1001d22c: 5961 ldr r1, [r4, r5] +1001d22e: 4a08 ldr r2, [pc, #32] ; (1001d250 ) +1001d230: 4623 mov r3, r4 +1001d232: f019 fdfd bl 10036e30 +1001d236: b003 add sp, #12 +1001d238: bd30 pop {r4, r5, pc} +1001d23a: bf00 nop +1001d23c: 10041397 .word 0x10041397 +1001d240: 1001dc75 .word 0x1001dc75 +1001d244: 100413a3 .word 0x100413a3 +1001d248: 1001dcfd .word 0x1001dcfd +1001d24c: 100413b1 .word 0x100413b1 +1001d250: 1001dd59 .word 0x1001dd59 + +1001d254 : +1001d254: b510 push {r4, lr} +1001d256: 4604 mov r4, r0 +1001d258: f500 6084 add.w r0, r0, #1056 ; 0x420 +1001d25c: f019 fdf3 bl 10036e46 +1001d260: f504 6086 add.w r0, r4, #1072 ; 0x430 +1001d264: f019 fdef bl 10036e46 +1001d268: f204 4084 addw r0, r4, #1156 ; 0x484 +1001d26c: e8bd 4010 ldmia.w sp!, {r4, lr} +1001d270: f019 bde9 b.w 10036e46 + +1001d274 : +1001d274: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} +1001d278: 6903 ldr r3, [r0, #16] +1001d27a: 4604 mov r4, r0 +1001d27c: f013 0601 ands.w r6, r3, #1 +1001d280: f890 8872 ldrb.w r8, [r0, #2162] ; 0x872 +1001d284: 4f21 ldr r7, [pc, #132] ; (1001d30c ) +1001d286: d104 bne.n 1001d292 +1001d288: e006 b.n 1001d298 +1001d28a: 4b21 ldr r3, [pc, #132] ; (1001d310 ) +1001d28c: 681a ldr r2, [r3, #0] +1001d28e: 469a mov sl, r3 +1001d290: b97a cbnz r2, 1001d2b2 +1001d292: 2300 movs r3, #0 +1001d294: 703b strb r3, [r7, #0] +1001d296: e035 b.n 1001d304 +1001d298: f890 58f8 ldrb.w r5, [r0, #2296] ; 0x8f8 +1001d29c: 2d00 cmp r5, #0 +1001d29e: d0f4 beq.n 1001d28a +1001d2a0: 481c ldr r0, [pc, #112] ; (1001d314 ) +1001d2a2: f7fd fc6d bl 1001ab80 +1001d2a6: f894 08f8 ldrb.w r0, [r4, #2296] ; 0x8f8 +1001d2aa: f7ef fd3f bl 1000cd2c +1001d2ae: 703e strb r6, [r7, #0] +1001d2b0: e028 b.n 1001d304 +1001d2b2: f1b8 0f01 cmp.w r8, #1 +1001d2b6: d106 bne.n 1001d2c6 +1001d2b8: f604 0694 addw r6, r4, #2196 ; 0x894 +1001d2bc: f8b4 98b4 ldrh.w r9, [r4, #2228] ; 0x8b4 +1001d2c0: f894 58b6 ldrb.w r5, [r4, #2230] ; 0x8b6 +1001d2c4: e00e b.n 1001d2e4 +1001d2c6: f1b8 0f03 cmp.w r8, #3 +1001d2ca: d108 bne.n 1001d2de +1001d2cc: f604 06b7 addw r6, r4, #2231 ; 0x8b7 +1001d2d0: 4630 mov r0, r6 +1001d2d2: f7fd fc91 bl 1001abf8 +1001d2d6: f8df 8040 ldr.w r8, [pc, #64] ; 1001d318 +1001d2da: 4681 mov r9, r0 +1001d2dc: e002 b.n 1001d2e4 +1001d2de: 46a9 mov r9, r5 +1001d2e0: 462e mov r6, r5 +1001d2e2: 46a8 mov r8, r5 +1001d2e4: f604 0473 addw r4, r4, #2163 ; 0x873 +1001d2e8: 4620 mov r0, r4 +1001d2ea: f8da a000 ldr.w sl, [sl] +1001d2ee: f7fd fc83 bl 1001abf8 +1001d2f2: f8cd 9000 str.w r9, [sp] +1001d2f6: 4602 mov r2, r0 +1001d2f8: 9501 str r5, [sp, #4] +1001d2fa: 4640 mov r0, r8 +1001d2fc: 4621 mov r1, r4 +1001d2fe: 4633 mov r3, r6 +1001d300: 47d0 blx sl +1001d302: e7c6 b.n 1001d292 +1001d304: b002 add sp, #8 +1001d306: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1001d30a: bf00 nop +1001d30c: 1004bb90 .word 0x1004bb90 +1001d310: 1004bb94 .word 0x1004bb94 +1001d314: 100413c3 .word 0x100413c3 +1001d318: 00400004 .word 0x00400004 + +1001d31c <_rtw_init_mlme_priv>: +1001d31c: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1001d31e: 2302 movs r3, #2 +1001d320: 4604 mov r4, r0 +1001d322: 61a0 str r0, [r4, #24] +1001d324: 2500 movs r5, #0 +1001d326: f8c0 30f8 str.w r3, [r0, #248] ; 0xf8 +1001d32a: f100 060c add.w r6, r0, #12 +1001d32e: 2301 movs r3, #1 +1001d330: f8c0 34a0 str.w r3, [r0, #1184] ; 0x4a0 +1001d334: 61c5 str r5, [r0, #28] +1001d336: 6105 str r5, [r0, #16] +1001d338: f104 0720 add.w r7, r4, #32 +1001d33c: 4630 mov r0, r6 +1001d33e: f7fa f935 bl 100175ac +1001d342: 4638 mov r0, r7 +1001d344: f7fa f93a bl 100175bc +1001d348: f104 002c add.w r0, r4, #44 ; 0x2c +1001d34c: f7fa f936 bl 100175bc +1001d350: 4630 mov r0, r6 +1001d352: a901 add r1, sp, #4 +1001d354: f7fa f948 bl 100175e8 +1001d358: 4630 mov r0, r6 +1001d35a: a901 add r1, sp, #4 +1001d35c: 87a5 strh r5, [r4, #60] ; 0x3c +1001d35e: f7fa f94d bl 100175fc +1001d362: f104 004c add.w r0, r4, #76 ; 0x4c +1001d366: 4629 mov r1, r5 +1001d368: 2228 movs r2, #40 ; 0x28 +1001d36a: f7fa f871 bl 10017450 +1001d36e: f641 0369 movw r3, #6249 ; 0x1869 +1001d372: 5ce3 ldrb r3, [r4, r3] +1001d374: b963 cbnz r3, 1001d390 <_rtw_init_mlme_priv+0x74> +1001d376: f44f 706b mov.w r0, #940 ; 0x3ac +1001d37a: f7fa fa09 bl 10017790 +1001d37e: 4605 mov r5, r0 +1001d380: b158 cbz r0, 1001d39a <_rtw_init_mlme_priv+0x7e> +1001d382: 63a0 str r0, [r4, #56] ; 0x38 +1001d384: f7fa f86c bl 10017460 +1001d388: 4628 mov r0, r5 +1001d38a: 4639 mov r1, r7 +1001d38c: f7fa f876 bl 1001747c +1001d390: 4620 mov r0, r4 +1001d392: f7ff ff31 bl 1001d1f8 +1001d396: 2001 movs r0, #1 +1001d398: e7ff b.n 1001d39a <_rtw_init_mlme_priv+0x7e> +1001d39a: b003 add sp, #12 +1001d39c: bdf0 pop {r4, r5, r6, r7, pc} + +1001d39e : +1001d39e: b510 push {r4, lr} +1001d3a0: 4604 mov r4, r0 +1001d3a2: f7fa f911 bl 100175c8 +1001d3a6: f104 001c add.w r0, r4, #28 +1001d3aa: f7fa f90d bl 100175c8 +1001d3ae: f104 0028 add.w r0, r4, #40 ; 0x28 +1001d3b2: e8bd 4010 ldmia.w sp!, {r4, lr} +1001d3b6: f7fa b907 b.w 100175c8 + +1001d3ba : +1001d3ba: b510 push {r4, lr} +1001d3bc: 4604 mov r4, r0 +1001d3be: f204 41c4 addw r1, r4, #1220 ; 0x4c4 +1001d3c2: f500 6097 add.w r0, r0, #1208 ; 0x4b8 +1001d3c6: f7ff ff0a bl 1001d1de +1001d3ca: f504 6093 add.w r0, r4, #1176 ; 0x498 +1001d3ce: f204 419c addw r1, r4, #1180 ; 0x49c +1001d3d2: f7ff ff04 bl 1001d1de +1001d3d6: f204 40bc addw r0, r4, #1212 ; 0x4bc +1001d3da: f504 6199 add.w r1, r4, #1224 ; 0x4c8 +1001d3de: f7ff fefe bl 1001d1de +1001d3e2: f504 6098 add.w r0, r4, #1216 ; 0x4c0 +1001d3e6: f204 41cc addw r1, r4, #1228 ; 0x4cc +1001d3ea: f7ff fef8 bl 1001d1de +1001d3ee: f504 609a add.w r0, r4, #1232 ; 0x4d0 +1001d3f2: f204 41e4 addw r1, r4, #1252 ; 0x4e4 +1001d3f6: f7ff fef2 bl 1001d1de +1001d3fa: f204 40d4 addw r0, r4, #1236 ; 0x4d4 +1001d3fe: f504 619d add.w r1, r4, #1256 ; 0x4e8 +1001d402: f7ff feec bl 1001d1de +1001d406: f504 609b add.w r0, r4, #1240 ; 0x4d8 +1001d40a: f204 41ec addw r1, r4, #1260 ; 0x4ec +1001d40e: f7ff fee6 bl 1001d1de +1001d412: f204 40dc addw r0, r4, #1244 ; 0x4dc +1001d416: f504 619e add.w r1, r4, #1264 ; 0x4f0 +1001d41a: f7ff fee0 bl 1001d1de +1001d41e: f504 609c add.w r0, r4, #1248 ; 0x4e0 +1001d422: f204 41f4 addw r1, r4, #1268 ; 0x4f4 +1001d426: e8bd 4010 ldmia.w sp!, {r4, lr} +1001d42a: f7ff bed8 b.w 1001d1de + +1001d42e <_rtw_free_mlme_priv>: +1001d42e: b510 push {r4, lr} +1001d430: 4604 mov r4, r0 +1001d432: f7ff ffc2 bl 1001d3ba +1001d436: b16c cbz r4, 1001d454 <_rtw_free_mlme_priv+0x26> +1001d438: 4620 mov r0, r4 +1001d43a: f7ff ffb0 bl 1001d39e +1001d43e: 6ae0 ldr r0, [r4, #44] ; 0x2c +1001d440: b118 cbz r0, 1001d44a <_rtw_free_mlme_priv+0x1c> +1001d442: f44f 716b mov.w r1, #940 ; 0x3ac +1001d446: f7f9 ffee bl 10017426 +1001d44a: 4620 mov r0, r4 +1001d44c: e8bd 4010 ldmia.w sp!, {r4, lr} +1001d450: f7ff bf00 b.w 1001d254 +1001d454: bd10 pop {r4, pc} + +1001d456 <_rtw_alloc_network>: +1001d456: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1001d458: f100 071c add.w r7, r0, #28 +1001d45c: f100 0414 add.w r4, r0, #20 +1001d460: a901 add r1, sp, #4 +1001d462: 4605 mov r5, r0 +1001d464: 4638 mov r0, r7 +1001d466: f7fa f8bf bl 100175e8 +1001d46a: 4620 mov r0, r4 +1001d46c: f7fa f894 bl 10017598 +1001d470: 2801 cmp r0, #1 +1001d472: f04f 0600 mov.w r6, #0 +1001d476: d00e beq.n 1001d496 <_rtw_alloc_network+0x40> +1001d478: 696c ldr r4, [r5, #20] +1001d47a: 4620 mov r0, r4 +1001d47c: f7fa f804 bl 10017488 +1001d480: 60a6 str r6, [r4, #8] +1001d482: 60e6 str r6, [r4, #12] +1001d484: f7fa f8bc bl 10017600 +1001d488: 8e2b ldrh r3, [r5, #48] ; 0x30 +1001d48a: 6120 str r0, [r4, #16] +1001d48c: 3301 adds r3, #1 +1001d48e: 6166 str r6, [r4, #20] +1001d490: 61a6 str r6, [r4, #24] +1001d492: 862b strh r3, [r5, #48] ; 0x30 +1001d494: e000 b.n 1001d498 <_rtw_alloc_network+0x42> +1001d496: 4634 mov r4, r6 +1001d498: 4638 mov r0, r7 +1001d49a: a901 add r1, sp, #4 +1001d49c: f7fa f8ae bl 100175fc +1001d4a0: 4620 mov r0, r4 +1001d4a2: b003 add sp, #12 +1001d4a4: bdf0 pop {r4, r5, r6, r7, pc} + +1001d4a6 <_rtw_free_network>: +1001d4a6: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1001d4a8: 4605 mov r5, r0 +1001d4aa: 4616 mov r6, r2 +1001d4ac: 460c mov r4, r1 +1001d4ae: b341 cbz r1, 1001d502 <_rtw_free_network+0x5c> +1001d4b0: 68cb ldr r3, [r1, #12] +1001d4b2: 2b01 cmp r3, #1 +1001d4b4: d025 beq.n 1001d502 <_rtw_free_network+0x5c> +1001d4b6: f7fa f8a3 bl 10017600 +1001d4ba: 686b ldr r3, [r5, #4] +1001d4bc: f013 0f60 tst.w r3, #96 ; 0x60 +1001d4c0: bf0c ite eq +1001d4c2: 2714 moveq r7, #20 +1001d4c4: 2701 movne r7, #1 +1001d4c6: b1b6 cbz r6, 1001d4f6 <_rtw_free_network+0x50> +1001d4c8: f105 061c add.w r6, r5, #28 +1001d4cc: a901 add r1, sp, #4 +1001d4ce: 4630 mov r0, r6 +1001d4d0: f7fa f88a bl 100175e8 +1001d4d4: f105 0714 add.w r7, r5, #20 +1001d4d8: 4620 mov r0, r4 +1001d4da: f7f9 ffd5 bl 10017488 +1001d4de: 4620 mov r0, r4 +1001d4e0: 4639 mov r1, r7 +1001d4e2: f7f9 ffcb bl 1001747c +1001d4e6: 8e2b ldrh r3, [r5, #48] ; 0x30 +1001d4e8: 4630 mov r0, r6 +1001d4ea: 3b01 subs r3, #1 +1001d4ec: 862b strh r3, [r5, #48] ; 0x30 +1001d4ee: a901 add r1, sp, #4 +1001d4f0: f7fa f884 bl 100175fc +1001d4f4: e005 b.n 1001d502 <_rtw_free_network+0x5c> +1001d4f6: 6923 ldr r3, [r4, #16] +1001d4f8: 1ac0 subs r0, r0, r3 +1001d4fa: f7fa f893 bl 10017624 +1001d4fe: 42b8 cmp r0, r7 +1001d500: d2e2 bcs.n 1001d4c8 <_rtw_free_network+0x22> +1001d502: b003 add sp, #12 +1001d504: bdf0 pop {r4, r5, r6, r7, pc} + +1001d506 <_rtw_free_network_nolock>: +1001d506: b538 push {r3, r4, r5, lr} +1001d508: 4605 mov r5, r0 +1001d50a: 460c mov r4, r1 +1001d50c: b169 cbz r1, 1001d52a <_rtw_free_network_nolock+0x24> +1001d50e: 68cb ldr r3, [r1, #12] +1001d510: 2b01 cmp r3, #1 +1001d512: d00a beq.n 1001d52a <_rtw_free_network_nolock+0x24> +1001d514: 4608 mov r0, r1 +1001d516: f7f9 ffb7 bl 10017488 +1001d51a: 4620 mov r0, r4 +1001d51c: f105 0114 add.w r1, r5, #20 +1001d520: f7f9 ffac bl 1001747c +1001d524: 8e2b ldrh r3, [r5, #48] ; 0x30 +1001d526: 3b01 subs r3, #1 +1001d528: 862b strh r3, [r5, #48] ; 0x30 +1001d52a: bd38 pop {r3, r4, r5, pc} + +1001d52c <_rtw_find_network>: +1001d52c: b573 push {r0, r1, r4, r5, r6, lr} +1001d52e: 2300 movs r3, #0 +1001d530: 4605 mov r5, r0 +1001d532: 2206 movs r2, #6 +1001d534: 4668 mov r0, sp +1001d536: 460e mov r6, r1 +1001d538: 9300 str r3, [sp, #0] +1001d53a: f8ad 3004 strh.w r3, [sp, #4] +1001d53e: f7f9 ff7f bl 10017440 +1001d542: b108 cbz r0, 1001d548 <_rtw_find_network+0x1c> +1001d544: 2400 movs r4, #0 +1001d546: e00c b.n 1001d562 <_rtw_find_network+0x36> +1001d548: 682c ldr r4, [r5, #0] +1001d54a: 42ac cmp r4, r5 +1001d54c: d0fa beq.n 1001d544 <_rtw_find_network+0x18> +1001d54e: 4630 mov r0, r6 +1001d550: f104 0120 add.w r1, r4, #32 +1001d554: 2206 movs r2, #6 +1001d556: f7f9 ff73 bl 10017440 +1001d55a: 2801 cmp r0, #1 +1001d55c: d001 beq.n 1001d562 <_rtw_find_network+0x36> +1001d55e: 6824 ldr r4, [r4, #0] +1001d560: e7f3 b.n 1001d54a <_rtw_find_network+0x1e> +1001d562: 4620 mov r0, r4 +1001d564: b002 add sp, #8 +1001d566: bd70 pop {r4, r5, r6, pc} + +1001d568 <_rtw_free_network_queue>: +1001d568: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +1001d56c: f100 0534 add.w r5, r0, #52 ; 0x34 +1001d570: 4604 mov r4, r0 +1001d572: 4688 mov r8, r1 +1001d574: f100 070c add.w r7, r0, #12 +1001d578: f100 062c add.w r6, r0, #44 ; 0x2c +1001d57c: a901 add r1, sp, #4 +1001d57e: 4628 mov r0, r5 +1001d580: f7fa f832 bl 100175e8 +1001d584: 6ae4 ldr r4, [r4, #44] ; 0x2c +1001d586: 4630 mov r0, r6 +1001d588: 4621 mov r1, r4 +1001d58a: f7fa f80a bl 100175a2 +1001d58e: b940 cbnz r0, 1001d5a2 <_rtw_free_network_queue+0x3a> +1001d590: f8d4 9000 ldr.w r9, [r4] +1001d594: 4621 mov r1, r4 +1001d596: 4638 mov r0, r7 +1001d598: 4642 mov r2, r8 +1001d59a: f7ff ff84 bl 1001d4a6 <_rtw_free_network> +1001d59e: 464c mov r4, r9 +1001d5a0: e7f1 b.n 1001d586 <_rtw_free_network_queue+0x1e> +1001d5a2: 4628 mov r0, r5 +1001d5a4: a901 add r1, sp, #4 +1001d5a6: f7fa f829 bl 100175fc +1001d5aa: b003 add sp, #12 +1001d5ac: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + +1001d5b0 : +1001d5b0: f241 73ac movw r3, #6060 ; 0x17ac +1001d5b4: 58c3 ldr r3, [r0, r3] +1001d5b6: b93b cbnz r3, 1001d5c8 +1001d5b8: f241 72b0 movw r2, #6064 ; 0x17b0 +1001d5bc: 5882 ldr r2, [r0, r2] +1001d5be: b92a cbnz r2, 1001d5cc +1001d5c0: 6900 ldr r0, [r0, #16] +1001d5c2: f000 0001 and.w r0, r0, #1 +1001d5c6: 4770 bx lr +1001d5c8: 2000 movs r0, #0 +1001d5ca: 4770 bx lr +1001d5cc: 4618 mov r0, r3 +1001d5ce: 4770 bx lr + +1001d5d0 : +1001d5d0: 300a adds r0, #10 +1001d5d2: 4770 bx lr + +1001d5d4 : +1001d5d4: b507 push {r0, r1, r2, lr} +1001d5d6: f100 0186 add.w r1, r0, #134 ; 0x86 +1001d5da: 2202 movs r2, #2 +1001d5dc: f10d 0006 add.w r0, sp, #6 +1001d5e0: f7f9 ff26 bl 10017430 +1001d5e4: f8bd 0006 ldrh.w r0, [sp, #6] +1001d5e8: b003 add sp, #12 +1001d5ea: f85d fb04 ldr.w pc, [sp], #4 + +1001d5ee : +1001d5ee: 3008 adds r0, #8 +1001d5f0: 4770 bx lr + +1001d5f2 : +1001d5f2: b538 push {r3, r4, r5, lr} +1001d5f4: 4605 mov r5, r0 +1001d5f6: f7ff fe91 bl 1001d31c <_rtw_init_mlme_priv> +1001d5fa: 4604 mov r4, r0 +1001d5fc: b918 cbnz r0, 1001d606 +1001d5fe: f105 000c add.w r0, r5, #12 +1001d602: f7ff ff14 bl 1001d42e <_rtw_free_mlme_priv> +1001d606: 4620 mov r0, r4 +1001d608: bd38 pop {r3, r4, r5, pc} + +1001d60a : +1001d60a: f7ff bf10 b.w 1001d42e <_rtw_free_mlme_priv> + +1001d60e : +1001d60e: f7ff bfab b.w 1001d568 <_rtw_free_network_queue> + +1001d612 : +1001d612: f8d0 3d0c ldr.w r3, [r0, #3340] ; 0xd0c +1001d616: 6d08 ldr r0, [r1, #80] ; 0x50 +1001d618: b10b cbz r3, 1001d61e +1001d61a: 3000 adds r0, #0 +1001d61c: e001 b.n 1001d622 +1001d61e: f110 30ff adds.w r0, r0, #4294967295 +1001d622: bf18 it ne +1001d624: 2001 movne r0, #1 +1001d626: 4770 bx lr + +1001d628 : +1001d628: b537 push {r0, r1, r2, r4, r5, lr} +1001d62a: 4604 mov r4, r0 +1001d62c: 460d mov r5, r1 +1001d62e: a801 add r0, sp, #4 +1001d630: f104 0186 add.w r1, r4, #134 ; 0x86 +1001d634: 2202 movs r2, #2 +1001d636: f7f9 fefb bl 10017430 +1001d63a: 2202 movs r2, #2 +1001d63c: f10d 0006 add.w r0, sp, #6 +1001d640: f105 0186 add.w r1, r5, #134 ; 0x86 +1001d644: f7f9 fef4 bl 10017430 +1001d648: 68e2 ldr r2, [r4, #12] +1001d64a: 68eb ldr r3, [r5, #12] +1001d64c: 429a cmp r2, r3 +1001d64e: d001 beq.n 1001d654 +1001d650: 2000 movs r0, #0 +1001d652: e019 b.n 1001d688 +1001d654: 1d20 adds r0, r4, #4 +1001d656: 1d29 adds r1, r5, #4 +1001d658: 2206 movs r2, #6 +1001d65a: f7f9 fef1 bl 10017440 +1001d65e: 2801 cmp r0, #1 +1001d660: d1f6 bne.n 1001d650 +1001d662: f104 0010 add.w r0, r4, #16 +1001d666: f105 0110 add.w r1, r5, #16 +1001d66a: 68e2 ldr r2, [r4, #12] +1001d66c: f7f9 fee8 bl 10017440 +1001d670: 2801 cmp r0, #1 +1001d672: d1ed bne.n 1001d650 +1001d674: f8bd 2006 ldrh.w r2, [sp, #6] +1001d678: f8bd 3004 ldrh.w r3, [sp, #4] +1001d67c: 4053 eors r3, r2 +1001d67e: f013 0f03 tst.w r3, #3 +1001d682: bf14 ite ne +1001d684: 2000 movne r0, #0 +1001d686: 2001 moveq r0, #1 +1001d688: b003 add sp, #12 +1001d68a: bd30 pop {r4, r5, pc} + +1001d68c : +1001d68c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1001d690: 469a mov sl, r3 +1001d692: 6913 ldr r3, [r2, #16] +1001d694: 4604 mov r4, r0 +1001d696: 07db lsls r3, r3, #31 +1001d698: 460d mov r5, r1 +1001d69a: 4616 mov r6, r2 +1001d69c: 6b87 ldr r7, [r0, #56] ; 0x38 +1001d69e: f891 9075 ldrb.w r9, [r1, #117] ; 0x75 +1001d6a2: d504 bpl.n 1001d6ae +1001d6a4: f102 0098 add.w r0, r2, #152 ; 0x98 +1001d6a8: f7ff ffbe bl 1001d628 +1001d6ac: bb60 cbnz r0, 1001d708 +1001d6ae: f1b9 0f65 cmp.w r9, #101 ; 0x65 +1001d6b2: 6ba7 ldr r7, [r4, #56] ; 0x38 +1001d6b4: f894 8074 ldrb.w r8, [r4, #116] ; 0x74 +1001d6b8: f894 6075 ldrb.w r6, [r4, #117] ; 0x75 +1001d6bc: d014 beq.n 1001d6e8 +1001d6be: f895 3074 ldrb.w r3, [r5, #116] ; 0x74 +1001d6c2: 2205 movs r2, #5 +1001d6c4: eb03 0888 add.w r8, r3, r8, lsl #2 +1001d6c8: f895 3075 ldrb.w r3, [r5, #117] ; 0x75 +1001d6cc: fbb8 f8f2 udiv r8, r8, r2 +1001d6d0: eb03 0686 add.w r6, r3, r6, lsl #2 +1001d6d4: 6bab ldr r3, [r5, #56] ; 0x38 +1001d6d6: fbb6 f6f2 udiv r6, r6, r2 +1001d6da: eb03 0787 add.w r7, r3, r7, lsl #2 +1001d6de: fa5f f888 uxtb.w r8, r8 +1001d6e2: b2f6 uxtb r6, r6 +1001d6e4: fb97 f7f2 sdiv r7, r7, r2 +1001d6e8: f1ba 0f00 cmp.w sl, #0 +1001d6ec: d005 beq.n 1001d6fa +1001d6ee: 6faa ldr r2, [r5, #120] ; 0x78 +1001d6f0: 4620 mov r0, r4 +1001d6f2: 4629 mov r1, r5 +1001d6f4: 327c adds r2, #124 ; 0x7c +1001d6f6: f7f9 fe9b bl 10017430 +1001d6fa: f884 8074 strb.w r8, [r4, #116] ; 0x74 +1001d6fe: f884 6075 strb.w r6, [r4, #117] ; 0x75 +1001d702: 63a7 str r7, [r4, #56] ; 0x38 +1001d704: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1001d708: f1b9 0f65 cmp.w r9, #101 ; 0x65 +1001d70c: f896 8c06 ldrb.w r8, [r6, #3078] ; 0xc06 +1001d710: f896 6c07 ldrb.w r6, [r6, #3079] ; 0xc07 +1001d714: d0e8 beq.n 1001d6e8 +1001d716: 6bab ldr r3, [r5, #56] ; 0x38 +1001d718: 6ba7 ldr r7, [r4, #56] ; 0x38 +1001d71a: eb03 0787 add.w r7, r3, r7, lsl #2 +1001d71e: 2305 movs r3, #5 +1001d720: fb97 f7f3 sdiv r7, r7, r3 +1001d724: e7e0 b.n 1001d6e8 + +1001d726 : +1001d726: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} +1001d72a: f100 0934 add.w r9, r0, #52 ; 0x34 +1001d72e: 2400 movs r4, #0 +1001d730: 4607 mov r7, r0 +1001d732: 460d mov r5, r1 +1001d734: f100 0a2c add.w sl, r0, #44 ; 0x2c +1001d738: a903 add r1, sp, #12 +1001d73a: 4648 mov r0, r9 +1001d73c: f8ad 4008 strh.w r4, [sp, #8] +1001d740: f8ad 400a strh.w r4, [sp, #10] +1001d744: f7f9 ff50 bl 100175e8 +1001d748: 6afe ldr r6, [r7, #44] ; 0x2c +1001d74a: 46a0 mov r8, r4 +1001d74c: 4650 mov r0, sl +1001d74e: 4631 mov r1, r6 +1001d750: f7f9 ff27 bl 100175a2 +1001d754: 2801 cmp r0, #1 +1001d756: d013 beq.n 1001d780 +1001d758: f106 001c add.w r0, r6, #28 +1001d75c: 4629 mov r1, r5 +1001d75e: f7ff ff63 bl 1001d628 +1001d762: b960 cbnz r0, 1001d77e +1001d764: b13c cbz r4, 1001d776 +1001d766: 6923 ldr r3, [r4, #16] +1001d768: 6932 ldr r2, [r6, #16] +1001d76a: 1ad3 subs r3, r2, r3 +1001d76c: ea34 0423 bics.w r4, r4, r3, asr #32 +1001d770: bf28 it cs +1001d772: 4634 movcs r4, r6 +1001d774: e000 b.n 1001d778 +1001d776: 4634 mov r4, r6 +1001d778: 46b0 mov r8, r6 +1001d77a: 6836 ldr r6, [r6, #0] +1001d77c: e7e6 b.n 1001d74c +1001d77e: 46b0 mov r8, r6 +1001d780: 4650 mov r0, sl +1001d782: 4631 mov r1, r6 +1001d784: f7f9 ff0d bl 100175a2 +1001d788: 2801 cmp r0, #1 +1001d78a: d14c bne.n 1001d826 +1001d78c: f107 0020 add.w r0, r7, #32 +1001d790: f7f9 ff02 bl 10017598 +1001d794: 2801 cmp r0, #1 +1001d796: f107 060c add.w r6, r7, #12 +1001d79a: d129 bne.n 1001d7f0 +1001d79c: f8d7 3d0c ldr.w r3, [r7, #3340] ; 0xd0c +1001d7a0: 2b02 cmp r3, #2 +1001d7a2: d001 beq.n 1001d7a8 +1001d7a4: 2b04 cmp r3, #4 +1001d7a6: d11e bne.n 1001d7e6 +1001d7a8: 2600 movs r6, #0 +1001d7aa: 6fa9 ldr r1, [r5, #120] ; 0x78 +1001d7ac: 4632 mov r2, r6 +1001d7ae: ab02 add r3, sp, #8 +1001d7b0: 9600 str r6, [sp, #0] +1001d7b2: 9601 str r6, [sp, #4] +1001d7b4: f105 007c add.w r0, r5, #124 ; 0x7c +1001d7b8: f021 f8d2 bl 1003e960 <__rtw_get_sec_ie_veneer> +1001d7bc: 9600 str r6, [sp, #0] +1001d7be: 9601 str r6, [sp, #4] +1001d7c0: 4632 mov r2, r6 +1001d7c2: f10d 030a add.w r3, sp, #10 +1001d7c6: f104 0098 add.w r0, r4, #152 ; 0x98 +1001d7ca: f8d4 1094 ldr.w r1, [r4, #148] ; 0x94 +1001d7ce: f021 f8c7 bl 1003e960 <__rtw_get_sec_ie_veneer> +1001d7d2: f8bd 2008 ldrh.w r2, [sp, #8] +1001d7d6: f8bd 300a ldrh.w r3, [sp, #10] +1001d7da: b112 cbz r2, 1001d7e2 +1001d7dc: 2b00 cmp r3, #0 +1001d7de: d03f beq.n 1001d860 +1001d7e0: e001 b.n 1001d7e6 +1001d7e2: 2b00 cmp r3, #0 +1001d7e4: d135 bne.n 1001d852 +1001d7e6: 6baa ldr r2, [r5, #56] ; 0x38 +1001d7e8: 6d63 ldr r3, [r4, #84] ; 0x54 +1001d7ea: 4293 cmp r3, r2 +1001d7ec: db38 blt.n 1001d860 +1001d7ee: e030 b.n 1001d852 +1001d7f0: 4630 mov r0, r6 +1001d7f2: f7ff fe30 bl 1001d456 <_rtw_alloc_network> +1001d7f6: 4604 mov r4, r0 +1001d7f8: b358 cbz r0, 1001d852 +1001d7fa: 6faa ldr r2, [r5, #120] ; 0x78 +1001d7fc: 4629 mov r1, r5 +1001d7fe: 327c adds r2, #124 ; 0x7c +1001d800: 602a str r2, [r5, #0] +1001d802: 301c adds r0, #28 +1001d804: f7f9 fe14 bl 10017430 +1001d808: f7f9 fefa bl 10017600 +1001d80c: f894 3091 ldrb.w r3, [r4, #145] ; 0x91 +1001d810: 6120 str r0, [r4, #16] +1001d812: 2b65 cmp r3, #101 ; 0x65 +1001d814: bf04 itt eq +1001d816: 2300 moveq r3, #0 +1001d818: f884 3091 strbeq.w r3, [r4, #145] ; 0x91 +1001d81c: 4620 mov r0, r4 +1001d81e: 4651 mov r1, sl +1001d820: f7f9 fe2c bl 1001747c +1001d824: e015 b.n 1001d852 +1001d826: f7f9 feeb bl 10017600 +1001d82a: f8c8 0010 str.w r0, [r8, #16] +1001d82e: 6faa ldr r2, [r5, #120] ; 0x78 +1001d830: f8d8 3094 ldr.w r3, [r8, #148] ; 0x94 +1001d834: 4293 cmp r3, r2 +1001d836: d905 bls.n 1001d844 +1001d838: 7aab ldrb r3, [r5, #10] +1001d83a: f113 33ff adds.w r3, r3, #4294967295 +1001d83e: bf18 it ne +1001d840: 2301 movne r3, #1 +1001d842: e000 b.n 1001d846 +1001d844: 2301 movs r3, #1 +1001d846: f108 001c add.w r0, r8, #28 +1001d84a: 4629 mov r1, r5 +1001d84c: 463a mov r2, r7 +1001d84e: f7ff ff1d bl 1001d68c +1001d852: 4648 mov r0, r9 +1001d854: a903 add r1, sp, #12 +1001d856: f7f9 fed1 bl 100175fc +1001d85a: b004 add sp, #16 +1001d85c: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1001d860: 6faa ldr r2, [r5, #120] ; 0x78 +1001d862: 4629 mov r1, r5 +1001d864: f104 001c add.w r0, r4, #28 +1001d868: 2500 movs r5, #0 +1001d86a: 327c adds r2, #124 ; 0x7c +1001d86c: f7f9 fde0 bl 10017430 +1001d870: 60e5 str r5, [r4, #12] +1001d872: f7f9 fec5 bl 10017600 +1001d876: f894 3091 ldrb.w r3, [r4, #145] ; 0x91 +1001d87a: 6120 str r0, [r4, #16] +1001d87c: 2b65 cmp r3, #101 ; 0x65 +1001d87e: 60a5 str r5, [r4, #8] +1001d880: 6165 str r5, [r4, #20] +1001d882: 61a5 str r5, [r4, #24] +1001d884: d1e5 bne.n 1001d852 +1001d886: f884 5091 strb.w r5, [r4, #145] ; 0x91 +1001d88a: e7e2 b.n 1001d852 + +1001d88c : +1001d88c: b570 push {r4, r5, r6, lr} +1001d88e: 6903 ldr r3, [r0, #16] +1001d890: 4604 mov r4, r0 +1001d892: 07db lsls r3, r3, #31 +1001d894: 460d mov r5, r1 +1001d896: d512 bpl.n 1001d8be +1001d898: f100 0698 add.w r6, r0, #152 ; 0x98 +1001d89c: 4630 mov r0, r6 +1001d89e: f7ff fec3 bl 1001d628 +1001d8a2: b160 cbz r0, 1001d8be +1001d8a4: 4630 mov r0, r6 +1001d8a6: 4629 mov r1, r5 +1001d8a8: 4622 mov r2, r4 +1001d8aa: 2301 movs r3, #1 +1001d8ac: f7ff feee bl 1001d68c +1001d8b0: 4620 mov r0, r4 +1001d8b2: f504 7190 add.w r1, r4, #288 ; 0x120 +1001d8b6: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 +1001d8ba: f00b ffe1 bl 10029880 +1001d8be: 4620 mov r0, r4 +1001d8c0: 4629 mov r1, r5 +1001d8c2: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1001d8c6: f7ff bf2e b.w 1001d726 + +1001d8ca : +1001d8ca: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +1001d8ce: 6f8b ldr r3, [r1, #120] ; 0x78 +1001d8d0: 4605 mov r5, r0 +1001d8d2: 337c adds r3, #124 ; 0x7c +1001d8d4: f5b3 7f5f cmp.w r3, #892 ; 0x37c +1001d8d8: 460c mov r4, r1 +1001d8da: d849 bhi.n 1001d970 +1001d8dc: f100 070c add.w r7, r0, #12 +1001d8e0: 4638 mov r0, r7 +1001d8e2: 4669 mov r1, sp +1001d8e4: f7f9 fe80 bl 100175e8 +1001d8e8: 692b ldr r3, [r5, #16] +1001d8ea: 065a lsls r2, r3, #25 +1001d8ec: d408 bmi.n 1001d900 +1001d8ee: e003 b.n 1001d8f8 +1001d8f0: 4630 mov r0, r6 +1001d8f2: a901 add r1, sp, #4 +1001d8f4: f7f9 fe82 bl 100175fc +1001d8f8: 692b ldr r3, [r5, #16] +1001d8fa: 061b lsls r3, r3, #24 +1001d8fc: d428 bmi.n 1001d950 +1001d8fe: e02c b.n 1001d95a +1001d900: f104 0804 add.w r8, r4, #4 +1001d904: f105 009c add.w r0, r5, #156 ; 0x9c +1001d908: 4641 mov r1, r8 +1001d90a: 2206 movs r2, #6 +1001d90c: f7f9 fd98 bl 10017440 +1001d910: 2800 cmp r0, #0 +1001d912: d0f1 beq.n 1001d8f8 +1001d914: f104 097c add.w r9, r4, #124 ; 0x7c +1001d918: f505 708a add.w r0, r5, #276 ; 0x114 +1001d91c: 4649 mov r1, r9 +1001d91e: 2208 movs r2, #8 +1001d920: f105 0634 add.w r6, r5, #52 ; 0x34 +1001d924: f7f9 fd84 bl 10017430 +1001d928: 4630 mov r0, r6 +1001d92a: a901 add r1, sp, #4 +1001d92c: f7f9 fe5c bl 100175e8 +1001d930: f105 002c add.w r0, r5, #44 ; 0x2c +1001d934: 4641 mov r1, r8 +1001d936: f7ff fdf9 bl 1001d52c <_rtw_find_network> +1001d93a: 2800 cmp r0, #0 +1001d93c: d0d8 beq.n 1001d8f0 +1001d93e: 3098 adds r0, #152 ; 0x98 +1001d940: 4649 mov r1, r9 +1001d942: 2208 movs r2, #8 +1001d944: f7f9 fd74 bl 10017430 +1001d948: 4630 mov r0, r6 +1001d94a: a901 add r1, sp, #4 +1001d94c: f7f9 fe56 bl 100175fc +1001d950: 4638 mov r0, r7 +1001d952: 4669 mov r1, sp +1001d954: f7f9 fe52 bl 100175fc +1001d958: e00a b.n 1001d970 +1001d95a: 7c23 ldrb r3, [r4, #16] +1001d95c: b91b cbnz r3, 1001d966 +1001d95e: 7323 strb r3, [r4, #12] +1001d960: 7363 strb r3, [r4, #13] +1001d962: 73a3 strb r3, [r4, #14] +1001d964: 73e3 strb r3, [r4, #15] +1001d966: 4628 mov r0, r5 +1001d968: 4621 mov r1, r4 +1001d96a: f7ff ff8f bl 1001d88c +1001d96e: e7ef b.n 1001d950 +1001d970: b003 add sp, #12 +1001d972: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + +1001d976 : +1001d976: 4770 bx lr + +1001d978 : +1001d978: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +1001d97c: 6903 ldr r3, [r0, #16] +1001d97e: 4604 mov r4, r0 +1001d980: f013 0f18 tst.w r3, #24 +1001d984: 460d mov r5, r1 +1001d986: f100 069c add.w r6, r0, #156 ; 0x9c +1001d98a: d127 bne.n 1001d9dc +1001d98c: 6923 ldr r3, [r4, #16] +1001d98e: f013 0f70 tst.w r3, #112 ; 0x70 +1001d992: d138 bne.n 1001da06 +1001d994: b125 cbz r5, 1001d9a0 +1001d996: f104 0034 add.w r0, r4, #52 ; 0x34 +1001d99a: a901 add r1, sp, #4 +1001d99c: f7f9 fe24 bl 100175e8 +1001d9a0: 4631 mov r1, r6 +1001d9a2: f104 002c add.w r0, r4, #44 ; 0x2c +1001d9a6: f7ff fdc1 bl 1001d52c <_rtw_find_network> +1001d9aa: 4601 mov r1, r0 +1001d9ac: b108 cbz r0, 1001d9b2 +1001d9ae: 2200 movs r2, #0 +1001d9b0: 60c2 str r2, [r0, #12] +1001d9b2: 6922 ldr r2, [r4, #16] +1001d9b4: 0650 lsls r0, r2, #25 +1001d9b6: d43f bmi.n 1001da38 +1001d9b8: 0713 lsls r3, r2, #28 +1001d9ba: d503 bpl.n 1001d9c4 +1001d9bc: f104 000c add.w r0, r4, #12 +1001d9c0: f7ff fda1 bl 1001d506 <_rtw_free_network_nolock> +1001d9c4: b125 cbz r5, 1001d9d0 +1001d9c6: f104 0034 add.w r0, r4, #52 ; 0x34 +1001d9ca: a901 add r1, sp, #4 +1001d9cc: f7f9 fe16 bl 100175fc +1001d9d0: 2300 movs r3, #0 +1001d9d2: f884 349c strb.w r3, [r4, #1180] ; 0x49c +1001d9d6: b002 add sp, #8 +1001d9d8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1001d9dc: 4631 mov r1, r6 +1001d9de: f500 6046 add.w r0, r0, #3168 ; 0xc60 +1001d9e2: f00a fc67 bl 100282b4 +1001d9e6: f604 4778 addw r7, r4, #3192 ; 0xc78 +1001d9ea: 4680 mov r8, r0 +1001d9ec: a901 add r1, sp, #4 +1001d9ee: 4638 mov r0, r7 +1001d9f0: f7f9 fdfa bl 100175e8 +1001d9f4: 4641 mov r1, r8 +1001d9f6: 4620 mov r0, r4 +1001d9f8: f00a fb79 bl 100280ee +1001d9fc: 4638 mov r0, r7 +1001d9fe: a901 add r1, sp, #4 +1001da00: f7f9 fdfc bl 100175fc +1001da04: e7c2 b.n 1001d98c +1001da06: 4620 mov r0, r4 +1001da08: f00a fcbc bl 10028384 +1001da0c: 4620 mov r0, r4 +1001da0e: f00a fca7 bl 10028360 +1001da12: f604 4778 addw r7, r4, #3192 ; 0xc78 +1001da16: 4680 mov r8, r0 +1001da18: a901 add r1, sp, #4 +1001da1a: 4638 mov r0, r7 +1001da1c: f7f9 fde4 bl 100175e8 +1001da20: 4641 mov r1, r8 +1001da22: 4620 mov r0, r4 +1001da24: f00a fb63 bl 100280ee +1001da28: 4638 mov r0, r7 +1001da2a: a901 add r1, sp, #4 +1001da2c: f7f9 fde6 bl 100175fc +1001da30: 4620 mov r0, r4 +1001da32: f00a fc7d bl 10028330 +1001da36: e7ad b.n 1001d994 +1001da38: f8d4 3ca4 ldr.w r3, [r4, #3236] ; 0xca4 +1001da3c: 2b01 cmp r3, #1 +1001da3e: d1bb bne.n 1001d9b8 +1001da40: e7bc b.n 1001d9bc + +1001da42 : +1001da42: 2200 movs r2, #0 +1001da44: 7542 strb r2, [r0, #21] +1001da46: 6902 ldr r2, [r0, #16] +1001da48: f042 0201 orr.w r2, r2, #1 +1001da4c: 6102 str r2, [r0, #16] +1001da4e: f014 bf54 b.w 100328fa + +1001da52 : +1001da52: b510 push {r4, lr} +1001da54: 6903 ldr r3, [r0, #16] +1001da56: 4604 mov r4, r0 +1001da58: f423 73c0 bic.w r3, r3, #384 ; 0x180 +1001da5c: f023 0301 bic.w r3, r3, #1 +1001da60: 6103 str r3, [r0, #16] +1001da62: f014 ffd0 bl 10032a06 +1001da66: 4620 mov r0, r4 +1001da68: 2103 movs r1, #3 +1001da6a: 2201 movs r2, #1 +1001da6c: e8bd 4010 ldmia.w sp!, {r4, lr} +1001da70: f7ff ba4c b.w 1001cf0c + +1001da74 : +1001da74: f014 bf43 b.w 100328fe + +1001da78 : +1001da78: b510 push {r4, lr} +1001da7a: 6809 ldr r1, [r1, #0] +1001da7c: 4604 mov r4, r0 +1001da7e: f005 fc65 bl 1002334c +1001da82: 4620 mov r0, r4 +1001da84: f018 ff4f bl 10036926 +1001da88: f641 035c movw r3, #6236 ; 0x185c +1001da8c: 58e0 ldr r0, [r4, r3] +1001da8e: e8bd 4010 ldmia.w sp!, {r4, lr} +1001da92: f018 bf48 b.w 10036926 + +1001da96 : +1001da96: 6903 ldr r3, [r0, #16] +1001da98: 06db lsls r3, r3, #27 +1001da9a: d412 bmi.n 1001dac2 +1001da9c: f8d0 3814 ldr.w r3, [r0, #2068] ; 0x814 +1001daa0: 2b01 cmp r3, #1 +1001daa2: d00a beq.n 1001daba +1001daa4: f8d0 37f4 ldr.w r3, [r0, #2036] ; 0x7f4 +1001daa8: 2b01 cmp r3, #1 +1001daaa: d008 beq.n 1001dabe +1001daac: f8d0 37d4 ldr.w r3, [r0, #2004] ; 0x7d4 +1001dab0: 2b01 cmp r3, #1 +1001dab2: bf14 ite ne +1001dab4: 2001 movne r0, #1 +1001dab6: 2002 moveq r0, #2 +1001dab8: 4770 bx lr +1001daba: 2004 movs r0, #4 +1001dabc: 4770 bx lr +1001dabe: 2003 movs r0, #3 +1001dac0: 4770 bx lr +1001dac2: f890 3d00 ldrb.w r3, [r0, #3328] ; 0xd00 +1001dac6: b13b cbz r3, 1001dad8 +1001dac8: eb00 0283 add.w r2, r0, r3, lsl #2 +1001dacc: f8d2 2ce4 ldr.w r2, [r2, #3300] ; 0xce4 +1001dad0: b912 cbnz r2, 1001dad8 +1001dad2: 3b01 subs r3, #1 +1001dad4: b2db uxtb r3, r3 +1001dad6: e7f6 b.n 1001dac6 +1001dad8: 3301 adds r3, #1 +1001dada: b2d8 uxtb r0, r3 +1001dadc: 4770 bx lr + +1001dade : +1001dade: b573 push {r0, r1, r4, r5, r6, lr} +1001dae0: 4605 mov r5, r0 +1001dae2: 460e mov r6, r1 +1001dae4: b1a9 cbz r1, 1001db12 +1001dae6: f7ff ffd6 bl 1001da96 +1001daea: ac02 add r4, sp, #8 +1001daec: f804 0d02 strb.w r0, [r4, #-2]! +1001daf0: 2144 movs r1, #68 ; 0x44 +1001daf2: 4628 mov r0, r5 +1001daf4: 4622 mov r2, r4 +1001daf6: f014 fcfc bl 100324f2 +1001dafa: f8d6 3100 ldr.w r3, [r6, #256] ; 0x100 +1001dafe: 4628 mov r0, r5 +1001db00: 021b lsls r3, r3, #8 +1001db02: f043 0301 orr.w r3, r3, #1 +1001db06: 2145 movs r1, #69 ; 0x45 +1001db08: 4622 mov r2, r4 +1001db0a: f8ad 3006 strh.w r3, [sp, #6] +1001db0e: f014 fcf0 bl 100324f2 +1001db12: b002 add sp, #8 +1001db14: bd70 pop {r4, r5, r6, pc} + +1001db16 : +1001db16: b538 push {r3, r4, r5, lr} +1001db18: 6903 ldr r3, [r0, #16] +1001db1a: 4604 mov r4, r0 +1001db1c: 06db lsls r3, r3, #27 +1001db1e: d400 bmi.n 1001db22 +1001db20: bd38 pop {r3, r4, r5, pc} +1001db22: f500 6046 add.w r0, r0, #3168 ; 0xc60 +1001db26: f00a fbc5 bl 100282b4 +1001db2a: 4605 mov r5, r0 +1001db2c: b148 cbz r0, 1001db42 +1001db2e: 4620 mov r0, r4 +1001db30: 4629 mov r1, r5 +1001db32: f7fe fa67 bl 1001c004 +1001db36: 4620 mov r0, r4 +1001db38: 4629 mov r1, r5 +1001db3a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1001db3e: f7ff bfce b.w 1001dade +1001db42: bd38 pop {r3, r4, r5, pc} + +1001db44 : +1001db44: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +1001db48: 4604 mov r4, r0 +1001db4a: f500 6046 add.w r0, r0, #3168 ; 0xc60 +1001db4e: 460d mov r5, r1 +1001db50: f00a fbb0 bl 100282b4 +1001db54: b110 cbz r0, 1001db5c +1001db56: f8d0 3100 ldr.w r3, [r0, #256] ; 0x100 +1001db5a: e000 b.n 1001db5e +1001db5c: 68ab ldr r3, [r5, #8] +1001db5e: 021b lsls r3, r3, #8 +1001db60: ad02 add r5, sp, #8 +1001db62: f825 3d04 strh.w r3, [r5, #-4]! +1001db66: 4620 mov r0, r4 +1001db68: 2145 movs r1, #69 ; 0x45 +1001db6a: 462a mov r2, r5 +1001db6c: f014 fcc1 bl 100324f2 +1001db70: 6923 ldr r3, [r4, #16] +1001db72: f013 0810 ands.w r8, r3, #16 +1001db76: d135 bne.n 1001dbe4 +1001db78: 4620 mov r0, r4 +1001db7a: f104 060c add.w r6, r4, #12 +1001db7e: f004 fb4b bl 10022218 +1001db82: 4630 mov r0, r6 +1001db84: 4629 mov r1, r5 +1001db86: f7f9 fd2f bl 100175e8 +1001db8a: 6923 ldr r3, [r4, #16] +1001db8c: 071b lsls r3, r3, #28 +1001db8e: d404 bmi.n 1001db9a +1001db90: 4630 mov r0, r6 +1001db92: 4629 mov r1, r5 +1001db94: f7f9 fd32 bl 100175fc +1001db98: e024 b.n 1001dbe4 +1001db9a: 4620 mov r0, r4 +1001db9c: f008 ff63 bl 10026a66 +1001dba0: 4620 mov r0, r4 +1001dba2: f008 ff8c bl 10026abe +1001dba6: 2101 movs r1, #1 +1001dba8: 4620 mov r0, r4 +1001dbaa: f7ff fee5 bl 1001d978 +1001dbae: f104 0734 add.w r7, r4, #52 ; 0x34 +1001dbb2: 4620 mov r0, r4 +1001dbb4: f7ff ff4d bl 1001da52 +1001dbb8: 4638 mov r0, r7 +1001dbba: 4669 mov r1, sp +1001dbbc: f7f9 fd14 bl 100175e8 +1001dbc0: f104 019c add.w r1, r4, #156 ; 0x9c +1001dbc4: f104 002c add.w r0, r4, #44 ; 0x2c +1001dbc8: f7ff fcb0 bl 1001d52c <_rtw_find_network> +1001dbcc: 4601 mov r1, r0 +1001dbce: b120 cbz r0, 1001dbda +1001dbd0: f8c1 800c str.w r8, [r1, #12] +1001dbd4: 4630 mov r0, r6 +1001dbd6: f7ff fc96 bl 1001d506 <_rtw_free_network_nolock> +1001dbda: 4638 mov r0, r7 +1001dbdc: 4669 mov r1, sp +1001dbde: f7f9 fd0d bl 100175fc +1001dbe2: e7d5 b.n 1001db90 +1001dbe4: b002 add sp, #8 +1001dbe6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1001dbea <_rtw_join_timeout_handler>: +1001dbea: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} +1001dbee: f241 73ac movw r3, #6060 ; 0x17ac +1001dbf2: 58c3 ldr r3, [r0, r3] +1001dbf4: 4604 mov r4, r0 +1001dbf6: 2b00 cmp r3, #0 +1001dbf8: d139 bne.n 1001dc6e <_rtw_join_timeout_handler+0x84> +1001dbfa: f241 73b0 movw r3, #6064 ; 0x17b0 +1001dbfe: 58c3 ldr r3, [r0, r3] +1001dc00: 2b00 cmp r3, #0 +1001dc02: d134 bne.n 1001dc6e <_rtw_join_timeout_handler+0x84> +1001dc04: f100 060c add.w r6, r0, #12 +1001dc08: a901 add r1, sp, #4 +1001dc0a: 4630 mov r0, r6 +1001dc0c: f7f9 fcec bl 100175e8 +1001dc10: f104 0734 add.w r7, r4, #52 ; 0x34 +1001dc14: 4620 mov r0, r4 +1001dc16: f7ff ff1c bl 1001da52 +1001dc1a: f104 0828 add.w r8, r4, #40 ; 0x28 +1001dc1e: 4638 mov r0, r7 +1001dc20: a903 add r1, sp, #12 +1001dc22: f7f9 fce1 bl 100175e8 +1001dc26: 4640 mov r0, r8 +1001dc28: a902 add r1, sp, #8 +1001dc2a: f7f9 fcdd bl 100175e8 +1001dc2e: 6ae5 ldr r5, [r4, #44] ; 0x2c +1001dc30: f104 092c add.w r9, r4, #44 ; 0x2c +1001dc34: 454d cmp r5, r9 +1001dc36: d00e beq.n 1001dc56 <_rtw_join_timeout_handler+0x6c> +1001dc38: 4628 mov r0, r5 +1001dc3a: f8d5 a000 ldr.w sl, [r5] +1001dc3e: f7f9 fc23 bl 10017488 +1001dc42: 4628 mov r0, r5 +1001dc44: f104 0120 add.w r1, r4, #32 +1001dc48: f7f9 fc18 bl 1001747c +1001dc4c: 8fa3 ldrh r3, [r4, #60] ; 0x3c +1001dc4e: 4655 mov r5, sl +1001dc50: 3b01 subs r3, #1 +1001dc52: 87a3 strh r3, [r4, #60] ; 0x3c +1001dc54: e7ee b.n 1001dc34 <_rtw_join_timeout_handler+0x4a> +1001dc56: 4640 mov r0, r8 +1001dc58: a902 add r1, sp, #8 +1001dc5a: f7f9 fccf bl 100175fc +1001dc5e: 4638 mov r0, r7 +1001dc60: a903 add r1, sp, #12 +1001dc62: f7f9 fccb bl 100175fc +1001dc66: 4630 mov r0, r6 +1001dc68: a901 add r1, sp, #4 +1001dc6a: f7f9 fcc7 bl 100175fc +1001dc6e: b004 add sp, #16 +1001dc70: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + +1001dc74 : +1001dc74: b510 push {r4, lr} +1001dc76: 4604 mov r4, r0 +1001dc78: f7ff ffb7 bl 1001dbea <_rtw_join_timeout_handler> +1001dc7c: f894 38f9 ldrb.w r3, [r4, #2297] ; 0x8f9 +1001dc80: b1fb cbz r3, 1001dcc2 +1001dc82: f894 286e ldrb.w r2, [r4, #2158] ; 0x86e +1001dc86: f894 386d ldrb.w r3, [r4, #2157] ; 0x86d +1001dc8a: 429a cmp r2, r3 +1001dc8c: d213 bcs.n 1001dcb6 +1001dc8e: 4b0d ldr r3, [pc, #52] ; (1001dcc4 ) +1001dc90: 781a ldrb r2, [r3, #0] +1001dc92: b9b2 cbnz r2, 1001dcc2 +1001dc94: 2201 movs r2, #1 +1001dc96: 701a strb r2, [r3, #0] +1001dc98: f8b4 3870 ldrh.w r3, [r4, #2160] ; 0x870 +1001dc9c: f44f 717a mov.w r1, #1000 ; 0x3e8 +1001dca0: 4359 muls r1, r3 +1001dca2: f504 6006 add.w r0, r4, #2144 ; 0x860 +1001dca6: f019 f8c7 bl 10036e38 +1001dcaa: f894 386e ldrb.w r3, [r4, #2158] ; 0x86e +1001dcae: 3301 adds r3, #1 +1001dcb0: f884 386e strb.w r3, [r4, #2158] ; 0x86e +1001dcb4: bd10 pop {r4, pc} +1001dcb6: 4620 mov r0, r4 +1001dcb8: 4903 ldr r1, [pc, #12] ; (1001dcc8 ) +1001dcba: e8bd 4010 ldmia.w sp!, {r4, lr} +1001dcbe: f015 bf4c b.w 10033b5a +1001dcc2: bd10 pop {r4, pc} +1001dcc4: 1004bb90 .word 0x1004bb90 +1001dcc8: 1003fc5d .word 0x1003fc5d + +1001dccc : +1001dccc: b537 push {r0, r1, r2, r4, r5, lr} +1001dcce: f100 050c add.w r5, r0, #12 +1001dcd2: 4604 mov r4, r0 +1001dcd4: a901 add r1, sp, #4 +1001dcd6: 4628 mov r0, r5 +1001dcd8: f7f9 fc86 bl 100175e8 +1001dcdc: 6923 ldr r3, [r4, #16] +1001dcde: 4628 mov r0, r5 +1001dce0: f423 6300 bic.w r3, r3, #2048 ; 0x800 +1001dce4: 6123 str r3, [r4, #16] +1001dce6: 2300 movs r3, #0 +1001dce8: 7523 strb r3, [r4, #20] +1001dcea: a901 add r1, sp, #4 +1001dcec: f7f9 fc86 bl 100175fc +1001dcf0: 4620 mov r0, r4 +1001dcf2: 2101 movs r1, #1 +1001dcf4: f014 fe03 bl 100328fe +1001dcf8: b003 add sp, #12 +1001dcfa: bd30 pop {r4, r5, pc} + +1001dcfc <_rtw_scan_timeout_handler>: +1001dcfc: f7ff bfe6 b.w 1001dccc + +1001dd00 : +1001dd00: b510 push {r4, lr} +1001dd02: f641 035c movw r3, #6236 ; 0x185c +1001dd06: 58c2 ldr r2, [r0, r3] +1001dd08: f241 73c5 movw r3, #6085 ; 0x17c5 +1001dd0c: 5cc3 ldrb r3, [r0, r3] +1001dd0e: 4604 mov r4, r0 +1001dd10: b30b cbz r3, 1001dd56 +1001dd12: f241 73ac movw r3, #6060 ; 0x17ac +1001dd16: 58c3 ldr r3, [r0, r3] +1001dd18: 2b01 cmp r3, #1 +1001dd1a: d01c beq.n 1001dd56 +1001dd1c: f241 73b0 movw r3, #6064 ; 0x17b0 +1001dd20: 58c3 ldr r3, [r0, r3] +1001dd22: 2b01 cmp r3, #1 +1001dd24: d017 beq.n 1001dd56 +1001dd26: f641 0358 movw r3, #6232 ; 0x1858 +1001dd2a: b132 cbz r2, 1001dd3a +1001dd2c: 5cc1 ldrb r1, [r0, r3] +1001dd2e: 2901 cmp r1, #1 +1001dd30: d106 bne.n 1001dd40 +1001dd32: 5cd3 ldrb r3, [r2, r3] +1001dd34: 2b01 cmp r3, #1 +1001dd36: d103 bne.n 1001dd40 +1001dd38: bd10 pop {r4, pc} +1001dd3a: 5cc3 ldrb r3, [r0, r3] +1001dd3c: 2b01 cmp r3, #1 +1001dd3e: d00a beq.n 1001dd56 +1001dd40: 4620 mov r0, r4 +1001dd42: f7fe ffaf bl 1001cca4 +1001dd46: 6923 ldr r3, [r4, #16] +1001dd48: 06db lsls r3, r3, #27 +1001dd4a: d504 bpl.n 1001dd56 +1001dd4c: 4620 mov r0, r4 +1001dd4e: e8bd 4010 ldmia.w sp!, {r4, lr} +1001dd52: f7fd bffd b.w 1001bd50 +1001dd56: bd10 pop {r4, pc} + +1001dd58 <_dynamic_check_timer_handlder>: +1001dd58: b538 push {r3, r4, r5, lr} +1001dd5a: 4604 mov r4, r0 +1001dd5c: f018 fc1a bl 10036594 +1001dd60: 4605 mov r5, r0 +1001dd62: b148 cbz r0, 1001dd78 <_dynamic_check_timer_handlder+0x20> +1001dd64: 4b0d ldr r3, [pc, #52] ; (1001dd9c <_dynamic_check_timer_handlder+0x44>) +1001dd66: 681b ldr r3, [r3, #0] +1001dd68: b133 cbz r3, 1001dd78 <_dynamic_check_timer_handlder+0x20> +1001dd6a: 480d ldr r0, [pc, #52] ; (1001dda0 <_dynamic_check_timer_handlder+0x48>) +1001dd6c: f7fc ff08 bl 1001ab80 +1001dd70: 480c ldr r0, [pc, #48] ; (1001dda4 <_dynamic_check_timer_handlder+0x4c>) +1001dd72: 4629 mov r1, r5 +1001dd74: f7fc ff04 bl 1001ab80 +1001dd78: f641 035c movw r3, #6236 ; 0x185c +1001dd7c: 58e0 ldr r0, [r4, r3] +1001dd7e: b108 cbz r0, 1001dd84 <_dynamic_check_timer_handlder+0x2c> +1001dd80: f7ff ffbe bl 1001dd00 +1001dd84: 4620 mov r0, r4 +1001dd86: f7ff ffbb bl 1001dd00 +1001dd8a: f504 6092 add.w r0, r4, #1168 ; 0x490 +1001dd8e: f44f 61fa mov.w r1, #2000 ; 0x7d0 +1001dd92: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1001dd96: f019 b84f b.w 10036e38 +1001dd9a: bf00 nop +1001dd9c: 10044f38 .word 0x10044f38 +1001dda0: 100429b1 .word 0x100429b1 +1001dda4: 100413d9 .word 0x100413d9 + +1001dda8 : +1001dda8: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +1001ddac: f100 0828 add.w r8, r0, #40 ; 0x28 +1001ddb0: 4604 mov r4, r0 +1001ddb2: a901 add r1, sp, #4 +1001ddb4: 4640 mov r0, r8 +1001ddb6: f7f9 fc17 bl 100175e8 +1001ddba: 6a23 ldr r3, [r4, #32] +1001ddbc: 68e7 ldr r7, [r4, #12] +1001ddbe: f104 0920 add.w r9, r4, #32 +1001ddc2: 6123 str r3, [r4, #16] +1001ddc4: 2600 movs r6, #0 +1001ddc6: 4648 mov r0, r9 +1001ddc8: 6921 ldr r1, [r4, #16] +1001ddca: f7f9 fbea bl 100175a2 +1001ddce: 4602 mov r2, r0 +1001ddd0: 2800 cmp r0, #0 +1001ddd2: d130 bne.n 1001de36 +1001ddd4: 6925 ldr r5, [r4, #16] +1001ddd6: 2d00 cmp r5, #0 +1001ddd8: d048 beq.n 1001de6c +1001ddda: 682b ldr r3, [r5, #0] +1001dddc: f504 60a3 add.w r0, r4, #1304 ; 0x518 +1001dde0: 6123 str r3, [r4, #16] +1001dde2: 6ea9 ldr r1, [r5, #104] ; 0x68 +1001dde4: f000 fc24 bl 1001e630 +1001dde8: 2800 cmp r0, #0 +1001ddea: d0ec beq.n 1001ddc6 +1001ddec: f894 342c ldrb.w r3, [r4, #1068] ; 0x42c +1001ddf0: 2b01 cmp r3, #1 +1001ddf2: d002 beq.n 1001ddfa +1001ddf4: 6c23 ldr r3, [r4, #64] ; 0x40 +1001ddf6: b953 cbnz r3, 1001de0e +1001ddf8: e014 b.n 1001de24 +1001ddfa: f105 0020 add.w r0, r5, #32 +1001ddfe: f104 0168 add.w r1, r4, #104 ; 0x68 +1001de02: 2206 movs r2, #6 +1001de04: f7f9 fb1c bl 10017440 +1001de08: 2800 cmp r0, #0 +1001de0a: d1f3 bne.n 1001ddf4 +1001de0c: e7db b.n 1001ddc6 +1001de0e: 6aaa ldr r2, [r5, #40] ; 0x28 +1001de10: 429a cmp r2, r3 +1001de12: d1d8 bne.n 1001ddc6 +1001de14: f105 002c add.w r0, r5, #44 ; 0x2c +1001de18: f104 0144 add.w r1, r4, #68 ; 0x44 +1001de1c: f7f9 fb10 bl 10017440 +1001de20: 2800 cmp r0, #0 +1001de22: d0d0 beq.n 1001ddc6 +1001de24: b12e cbz r6, 1001de32 +1001de26: 6d72 ldr r2, [r6, #84] ; 0x54 +1001de28: 6d6b ldr r3, [r5, #84] ; 0x54 +1001de2a: 429a cmp r2, r3 +1001de2c: bfb8 it lt +1001de2e: 462e movlt r6, r5 +1001de30: e7c9 b.n 1001ddc6 +1001de32: 462e mov r6, r5 +1001de34: e7c7 b.n 1001ddc6 +1001de36: b146 cbz r6, 1001de4a +1001de38: 6863 ldr r3, [r4, #4] +1001de3a: 07db lsls r3, r3, #31 +1001de3c: d407 bmi.n 1001de4e +1001de3e: 4638 mov r0, r7 +1001de40: 4631 mov r1, r6 +1001de42: f7fe fcd9 bl 1001c7f8 +1001de46: 4605 mov r5, r0 +1001de48: e010 b.n 1001de6c +1001de4a: 4635 mov r5, r6 +1001de4c: e00e b.n 1001de6c +1001de4e: 4638 mov r0, r7 +1001de50: f7fe fe38 bl 1001cac4 +1001de54: 4638 mov r0, r7 +1001de56: f7ff fdfc bl 1001da52 +1001de5a: 4638 mov r0, r7 +1001de5c: 2100 movs r1, #0 +1001de5e: f7ff fd8b bl 1001d978 +1001de62: 6863 ldr r3, [r4, #4] +1001de64: f043 0380 orr.w r3, r3, #128 ; 0x80 +1001de68: 6063 str r3, [r4, #4] +1001de6a: e7e8 b.n 1001de3e +1001de6c: 4640 mov r0, r8 +1001de6e: a901 add r1, sp, #4 +1001de70: f7f9 fbc4 bl 100175fc +1001de74: 4628 mov r0, r5 +1001de76: b003 add sp, #12 +1001de78: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + +1001de7c : +1001de7c: b573 push {r0, r1, r4, r5, r6, lr} +1001de7e: f100 050c add.w r5, r0, #12 +1001de82: 4604 mov r4, r0 +1001de84: a901 add r1, sp, #4 +1001de86: 4628 mov r0, r5 +1001de88: f7f9 fbae bl 100175e8 +1001de8c: f8d4 04a4 ldr.w r0, [r4, #1188] ; 0x4a4 +1001de90: b140 cbz r0, 1001dea4 +1001de92: 2600 movs r6, #0 +1001de94: f8d4 14a8 ldr.w r1, [r4, #1192] ; 0x4a8 +1001de98: f8c4 64a8 str.w r6, [r4, #1192] ; 0x4a8 +1001de9c: f7f9 fac5 bl 1001742a +1001dea0: f8c4 64a4 str.w r6, [r4, #1188] ; 0x4a4 +1001dea4: 6923 ldr r3, [r4, #16] +1001dea6: 051b lsls r3, r3, #20 +1001dea8: d434 bmi.n 1001df14 +1001deaa: f604 401c addw r0, r4, #3100 ; 0xc1c +1001deae: f8d4 1c28 ldr.w r1, [r4, #3112] ; 0xc28 +1001deb2: f018 ffc1 bl 10036e38 +1001deb6: 7d66 ldrb r6, [r4, #21] +1001deb8: 2e01 cmp r6, #1 +1001deba: d112 bne.n 1001dee2 +1001debc: 6923 ldr r3, [r4, #16] +1001debe: f013 0220 ands.w r2, r3, #32 +1001dec2: d10e bne.n 1001dee2 +1001dec4: f043 0380 orr.w r3, r3, #128 ; 0x80 +1001dec8: 6123 str r3, [r4, #16] +1001deca: 7562 strb r2, [r4, #21] +1001decc: 4628 mov r0, r5 +1001dece: f7ff ff6b bl 1001dda8 +1001ded2: 2801 cmp r0, #1 +1001ded4: d129 bne.n 1001df2a +1001ded6: f204 402c addw r0, r4, #1068 ; 0x42c +1001deda: f641 1164 movw r1, #6500 ; 0x1964 +1001dede: f018 ffab bl 10036e38 +1001dee2: 6863 ldr r3, [r4, #4] +1001dee4: 2b05 cmp r3, #5 +1001dee6: d103 bne.n 1001def0 +1001dee8: f8b4 361a ldrh.w r3, [r4, #1562] ; 0x61a +1001deec: 2b02 cmp r3, #2 +1001deee: d003 beq.n 1001def8 +1001def0: 4620 mov r0, r4 +1001def2: 2100 movs r1, #0 +1001def4: f014 fd03 bl 100328fe +1001def8: a901 add r1, sp, #4 +1001defa: 4628 mov r0, r5 +1001defc: f7f9 fb7e bl 100175fc +1001df00: 4620 mov r0, r4 +1001df02: f018 fd10 bl 10036926 +1001df06: f641 035c movw r3, #6236 ; 0x185c +1001df0a: 58e0 ldr r0, [r4, r3] +1001df0c: f018 fd0b bl 10036926 +1001df10: b002 add sp, #8 +1001df12: bd70 pop {r4, r5, r6, pc} +1001df14: f204 403c addw r0, r4, #1084 ; 0x43c +1001df18: f018 ff90 bl 10036e3c +1001df1c: 6923 ldr r3, [r4, #16] +1001df1e: f423 6300 bic.w r3, r3, #2048 ; 0x800 +1001df22: 6123 str r3, [r4, #16] +1001df24: 2300 movs r3, #0 +1001df26: 7523 strb r3, [r4, #20] +1001df28: e7bf b.n 1001deaa +1001df2a: 2802 cmp r0, #2 +1001df2c: d107 bne.n 1001df3e +1001df2e: 6923 ldr r3, [r4, #16] +1001df30: 4620 mov r0, r4 +1001df32: f023 0380 bic.w r3, r3, #128 ; 0x80 +1001df36: 6123 str r3, [r4, #16] +1001df38: f7ff fd83 bl 1001da42 +1001df3c: e7d1 b.n 1001dee2 +1001df3e: 4620 mov r0, r4 +1001df40: 4915 ldr r1, [pc, #84] ; (1001df98 ) +1001df42: f015 fe0a bl 10033b5a +1001df46: 4620 mov r0, r4 +1001df48: f014 fd5d bl 10032a06 +1001df4c: f894 38f9 ldrb.w r3, [r4, #2297] ; 0x8f9 +1001df50: b1e3 cbz r3, 1001df8c +1001df52: f894 286e ldrb.w r2, [r4, #2158] ; 0x86e +1001df56: f894 386d ldrb.w r3, [r4, #2157] ; 0x86d +1001df5a: 429a cmp r2, r3 +1001df5c: d212 bcs.n 1001df84 +1001df5e: 4b0f ldr r3, [pc, #60] ; (1001df9c ) +1001df60: 781a ldrb r2, [r3, #0] +1001df62: b99a cbnz r2, 1001df8c +1001df64: 701e strb r6, [r3, #0] +1001df66: f8b4 3870 ldrh.w r3, [r4, #2160] ; 0x870 +1001df6a: f44f 717a mov.w r1, #1000 ; 0x3e8 +1001df6e: 4359 muls r1, r3 +1001df70: f504 6006 add.w r0, r4, #2144 ; 0x860 +1001df74: f018 ff60 bl 10036e38 +1001df78: f894 386e ldrb.w r3, [r4, #2158] ; 0x86e +1001df7c: 3301 adds r3, #1 +1001df7e: f884 386e strb.w r3, [r4, #2158] ; 0x86e +1001df82: e003 b.n 1001df8c +1001df84: 4620 mov r0, r4 +1001df86: 4906 ldr r1, [pc, #24] ; (1001dfa0 ) +1001df88: f015 fde7 bl 10033b5a +1001df8c: 6923 ldr r3, [r4, #16] +1001df8e: f023 0380 bic.w r3, r3, #128 ; 0x80 +1001df92: 6123 str r3, [r4, #16] +1001df94: e7a5 b.n 1001dee2 +1001df96: bf00 nop +1001df98: 1003fc72 .word 0x1003fc72 +1001df9c: 1004bb90 .word 0x1004bb90 +1001dfa0: 1003fc5d .word 0x1003fc5d + +1001dfa4 : +1001dfa4: b570 push {r4, r5, r6, lr} +1001dfa6: 4605 mov r5, r0 +1001dfa8: 2020 movs r0, #32 +1001dfaa: 460e mov r6, r1 +1001dfac: f7f9 fc10 bl 100177d0 +1001dfb0: 4604 mov r4, r0 +1001dfb2: b1e8 cbz r0, 1001dff0 +1001dfb4: 2004 movs r0, #4 +1001dfb6: f7f9 fc0b bl 100177d0 +1001dfba: b920 cbnz r0, 1001dfc6 +1001dfbc: 4620 mov r0, r4 +1001dfbe: 2120 movs r1, #32 +1001dfc0: f7f9 fa33 bl 1001742a +1001dfc4: e014 b.n 1001dff0 +1001dfc6: 6832 ldr r2, [r6, #0] +1001dfc8: 2304 movs r3, #4 +1001dfca: 7002 strb r2, [r0, #0] +1001dfcc: 60e3 str r3, [r4, #12] +1001dfce: 2213 movs r2, #19 +1001dfd0: 2300 movs r3, #0 +1001dfd2: 60a0 str r0, [r4, #8] +1001dfd4: 80a2 strh r2, [r4, #4] +1001dfd6: f104 0018 add.w r0, r4, #24 +1001dfda: 6123 str r3, [r4, #16] +1001dfdc: 6163 str r3, [r4, #20] +1001dfde: f7f9 fa3f bl 10017460 +1001dfe2: f605 1008 addw r0, r5, #2312 ; 0x908 +1001dfe6: 4621 mov r1, r4 +1001dfe8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1001dfec: f7fe badf b.w 1001c5ae +1001dff0: 2000 movs r0, #0 +1001dff2: bd70 pop {r4, r5, r6, pc} + +1001dff4 : +1001dff4: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +1001dff8: 4680 mov r8, r0 +1001dffa: 2020 movs r0, #32 +1001dffc: 460e mov r6, r1 +1001dffe: 4617 mov r7, r2 +1001e000: 4699 mov r9, r3 +1001e002: f7f9 fbe5 bl 100177d0 +1001e006: 4605 mov r5, r0 +1001e008: 2800 cmp r0, #0 +1001e00a: d051 beq.n 1001e0b0 +1001e00c: 2014 movs r0, #20 +1001e00e: f7f9 fbdf bl 100177d0 +1001e012: 4604 mov r4, r0 +1001e014: b920 cbnz r0, 1001e020 +1001e016: 4628 mov r0, r5 +1001e018: 2120 movs r1, #32 +1001e01a: f7f9 fa06 bl 1001742a +1001e01e: e047 b.n 1001e0b0 +1001e020: 2214 movs r2, #20 +1001e022: 2100 movs r1, #0 +1001e024: f7f9 fa14 bl 10017450 +1001e028: 6833 ldr r3, [r6, #0] +1001e02a: 2201 movs r2, #1 +1001e02c: 2b02 cmp r3, #2 +1001e02e: bf0c ite eq +1001e030: 6df3 ldreq r3, [r6, #92] ; 0x5c +1001e032: 6873 ldrne r3, [r6, #4] +1001e034: 7067 strb r7, [r4, #1] +1001e036: 7023 strb r3, [r4, #0] +1001e038: b2fb uxtb r3, r7 +1001e03a: fa02 f303 lsl.w r3, r2, r3 +1001e03e: f884 9003 strb.w r9, [r4, #3] +1001e042: f898 249c ldrb.w r2, [r8, #1180] ; 0x49c +1001e046: 4313 orrs r3, r2 +1001e048: f888 349c strb.w r3, [r8, #1180] ; 0x49c +1001e04c: 7823 ldrb r3, [r4, #0] +1001e04e: 3b01 subs r3, #1 +1001e050: 2b04 cmp r3, #4 +1001e052: d82d bhi.n 1001e0b0 +1001e054: e8df f003 tbb [pc, r3] +1001e058: 112c1103 .word 0x112c1103 +1001e05c: 09 .byte 0x09 +1001e05d: 00 .byte 0x00 +1001e05e: eb06 1107 add.w r1, r6, r7, lsl #4 +1001e062: 1d20 adds r0, r4, #4 +1001e064: 310c adds r1, #12 +1001e066: 2205 movs r2, #5 +1001e068: e004 b.n 1001e074 +1001e06a: eb06 1107 add.w r1, r6, r7, lsl #4 +1001e06e: 1d20 adds r0, r4, #4 +1001e070: 310c adds r1, #12 +1001e072: 220d movs r2, #13 +1001e074: f7f9 f9dc bl 10017430 +1001e078: e008 b.n 1001e08c +1001e07a: eb06 1107 add.w r1, r6, r7, lsl #4 +1001e07e: 1d20 adds r0, r4, #4 +1001e080: 3164 adds r1, #100 ; 0x64 +1001e082: 2210 movs r2, #16 +1001e084: f7f9 f9d4 bl 10017430 +1001e088: 2301 movs r3, #1 +1001e08a: 70a3 strb r3, [r4, #2] +1001e08c: 2314 movs r3, #20 +1001e08e: 80ab strh r3, [r5, #4] +1001e090: 60eb str r3, [r5, #12] +1001e092: 2300 movs r3, #0 +1001e094: f105 0018 add.w r0, r5, #24 +1001e098: 60ac str r4, [r5, #8] +1001e09a: 612b str r3, [r5, #16] +1001e09c: 616b str r3, [r5, #20] +1001e09e: f7f9 f9df bl 10017460 +1001e0a2: f608 1008 addw r0, r8, #2312 ; 0x908 +1001e0a6: 4629 mov r1, r5 +1001e0a8: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +1001e0ac: f7fe ba7f b.w 1001c5ae +1001e0b0: 2000 movs r0, #0 +1001e0b2: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + +1001e0b6 : +1001e0b6: b5f0 push {r4, r5, r6, r7, lr} +1001e0b8: 9d05 ldr r5, [sp, #20] +1001e0ba: 240c movs r4, #12 +1001e0bc: 2000 movs r0, #0 +1001e0be: 429c cmp r4, r3 +1001e0c0: d22b bcs.n 1001e11a +1001e0c2: 5d08 ldrb r0, [r1, r4] +1001e0c4: 28dd cmp r0, #221 ; 0xdd +1001e0c6: eb01 0004 add.w r0, r1, r4 +1001e0ca: d121 bne.n 1001e110 +1001e0cc: 7886 ldrb r6, [r0, #2] +1001e0ce: b9fe cbnz r6, 1001e110 +1001e0d0: 78c6 ldrb r6, [r0, #3] +1001e0d2: 2e50 cmp r6, #80 ; 0x50 +1001e0d4: d11c bne.n 1001e110 +1001e0d6: 7906 ldrb r6, [r0, #4] +1001e0d8: 2ef2 cmp r6, #242 ; 0xf2 +1001e0da: d119 bne.n 1001e110 +1001e0dc: 1d66 adds r6, r4, #5 +1001e0de: 5d8f ldrb r7, [r1, r6] +1001e0e0: 2f02 cmp r7, #2 +1001e0e2: d115 bne.n 1001e110 +1001e0e4: 429e cmp r6, r3 +1001e0e6: d213 bcs.n 1001e110 +1001e0e8: 4623 mov r3, r4 +1001e0ea: f103 0709 add.w r7, r3, #9 +1001e0ee: 1aee subs r6, r5, r3 +1001e0f0: 42bc cmp r4, r7 +1001e0f2: eb06 0004 add.w r0, r6, r4 +1001e0f6: d204 bcs.n 1001e102 +1001e0f8: 5d08 ldrb r0, [r1, r4] +1001e0fa: 4416 add r6, r2 +1001e0fc: 5530 strb r0, [r6, r4] +1001e0fe: 3401 adds r4, #1 +1001e100: e7f3 b.n 1001e0ea +1001e102: 4415 add r5, r2 +1001e104: 2307 movs r3, #7 +1001e106: 706b strb r3, [r5, #1] +1001e108: 2300 movs r3, #0 +1001e10a: 71ab strb r3, [r5, #6] +1001e10c: 722b strb r3, [r5, #8] +1001e10e: bdf0 pop {r4, r5, r6, r7, pc} +1001e110: 7840 ldrb r0, [r0, #1] +1001e112: 3002 adds r0, #2 +1001e114: 4404 add r4, r0 +1001e116: 4628 mov r0, r5 +1001e118: e7d1 b.n 1001e0be +1001e11a: bdf0 pop {r4, r5, r6, r7, pc} + +1001e11c : +1001e11c: b5f8 push {r3, r4, r5, r6, r7, lr} +1001e11e: f241 036c movw r3, #4204 ; 0x106c +1001e122: 58c7 ldr r7, [r0, r3] +1001e124: 4604 mov r4, r0 +1001e126: 4616 mov r6, r2 +1001e128: 4610 mov r0, r2 +1001e12a: 220c movs r2, #12 +1001e12c: f7f9 f980 bl 10017430 +1001e130: 1efb subs r3, r7, #3 +1001e132: 2b02 cmp r3, #2 +1001e134: f1a7 0706 sub.w r7, r7, #6 +1001e138: 6923 ldr r3, [r4, #16] +1001e13a: bf34 ite cc +1001e13c: 25dd movcc r5, #221 ; 0xdd +1001e13e: 2500 movcs r5, #0 +1001e140: 2f01 cmp r7, #1 +1001e142: bf98 it ls +1001e144: 2530 movls r5, #48 ; 0x30 +1001e146: 05db lsls r3, r3, #23 +1001e148: d50b bpl.n 1001e162 +1001e14a: f241 0558 movw r5, #4184 ; 0x1058 +1001e14e: f106 000c add.w r0, r6, #12 +1001e152: f604 6158 addw r1, r4, #3672 ; 0xe58 +1001e156: 5962 ldr r2, [r4, r5] +1001e158: f7f9 f96a bl 10017430 +1001e15c: 5960 ldr r0, [r4, r5] +1001e15e: 300c adds r0, #12 +1001e160: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001e162: 2ddd cmp r5, #221 ; 0xdd +1001e164: d001 beq.n 1001e16a +1001e166: 2d30 cmp r5, #48 ; 0x30 +1001e168: d10e bne.n 1001e188 +1001e16a: f241 0791 movw r7, #4241 ; 0x1091 +1001e16e: 5de2 ldrb r2, [r4, r7] +1001e170: f504 5184 add.w r1, r4, #4224 ; 0x1080 +1001e174: f106 000c add.w r0, r6, #12 +1001e178: 3110 adds r1, #16 +1001e17a: 3202 adds r2, #2 +1001e17c: f7f9 f958 bl 10017430 +1001e180: 7335 strb r5, [r6, #12] +1001e182: 5de0 ldrb r0, [r4, r7] +1001e184: 300e adds r0, #14 +1001e186: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001e188: 200c movs r0, #12 +1001e18a: bdf8 pop {r3, r4, r5, r6, r7, pc} + +1001e18c : +1001e18c: 2300 movs r3, #0 +1001e18e: f8a0 3452 strh.w r3, [r0, #1106] ; 0x452 +1001e192: f8a0 3450 strh.w r3, [r0, #1104] ; 0x450 +1001e196: f8c0 3458 str.w r3, [r0, #1112] ; 0x458 +1001e19a: 4770 bx lr + +1001e19c : +1001e19c: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +1001e1a0: 4616 mov r6, r2 +1001e1a2: 4a35 ldr r2, [pc, #212] ; (1001e278 ) +1001e1a4: 4604 mov r4, r0 +1001e1a6: 6810 ldr r0, [r2, #0] +1001e1a8: b08f sub sp, #60 ; 0x3c +1001e1aa: 9005 str r0, [sp, #20] +1001e1ac: 8890 ldrh r0, [r2, #4] +1001e1ae: 7992 ldrb r2, [r2, #6] +1001e1b0: f101 080c add.w r8, r1, #12 +1001e1b4: f88d 201a strb.w r2, [sp, #26] +1001e1b8: f1a3 070c sub.w r7, r3, #12 +1001e1bc: 2200 movs r2, #0 +1001e1be: f8ad 0018 strh.w r0, [sp, #24] +1001e1c2: f8c4 2454 str.w r2, [r4, #1108] ; 0x454 +1001e1c6: 4640 mov r0, r8 +1001e1c8: 212d movs r1, #45 ; 0x2d +1001e1ca: aa03 add r2, sp, #12 +1001e1cc: 463b mov r3, r7 +1001e1ce: 9d16 ldr r5, [sp, #88] ; 0x58 +1001e1d0: f020 fb46 bl 1003e860 <__rtw_get_ie_veneer> +1001e1d4: 2800 cmp r0, #0 +1001e1d6: d04a beq.n 1001e26e +1001e1d8: 9b03 ldr r3, [sp, #12] +1001e1da: 2b00 cmp r3, #0 +1001e1dc: d047 beq.n 1001e26e +1001e1de: f8d4 344c ldr.w r3, [r4, #1100] ; 0x44c +1001e1e2: b953 cbnz r3, 1001e1fa +1001e1e4: 6828 ldr r0, [r5, #0] +1001e1e6: ab05 add r3, sp, #20 +1001e1e8: 9500 str r5, [sp, #0] +1001e1ea: 4430 add r0, r6 +1001e1ec: 21dd movs r1, #221 ; 0xdd +1001e1ee: 2207 movs r2, #7 +1001e1f0: f020 fb8e bl 1003e910 <__rtw_set_ie_veneer> +1001e1f4: 2301 movs r3, #1 +1001e1f6: f8c4 344c str.w r3, [r4, #1100] ; 0x44c +1001e1fa: a807 add r0, sp, #28 +1001e1fc: 2100 movs r1, #0 +1001e1fe: 221a movs r2, #26 +1001e200: f8d5 9000 ldr.w r9, [r5] +1001e204: f7f9 f924 bl 10017450 +1001e208: f241 0362 movw r3, #4194 ; 0x1062 +1001e20c: 210d movs r1, #13 +1001e20e: aa04 add r2, sp, #16 +1001e210: 4620 mov r0, r4 +1001e212: f8ad 301c strh.w r3, [sp, #28] +1001e216: f014 f983 bl 10032520 +1001e21a: f8d4 2d0c ldr.w r2, [r4, #3340] ; 0xd0c +1001e21e: 9b04 ldr r3, [sp, #16] +1001e220: 2a04 cmp r2, #4 +1001e222: f003 0303 and.w r3, r3, #3 +1001e226: f88d 301e strb.w r3, [sp, #30] +1001e22a: bf04 itt eq +1001e22c: f043 031c orreq.w r3, r3, #28 +1001e230: f88d 301e strbeq.w r3, [sp, #30] +1001e234: 212d movs r1, #45 ; 0x2d +1001e236: 221a movs r2, #26 +1001e238: ab07 add r3, sp, #28 +1001e23a: 9500 str r5, [sp, #0] +1001e23c: eb06 0009 add.w r0, r6, r9 +1001e240: f020 fb66 bl 1003e910 <__rtw_set_ie_veneer> +1001e244: 2301 movs r3, #1 +1001e246: f8c4 3454 str.w r3, [r4, #1108] ; 0x454 +1001e24a: 4640 mov r0, r8 +1001e24c: 463b mov r3, r7 +1001e24e: 213d movs r1, #61 ; 0x3d +1001e250: aa03 add r2, sp, #12 +1001e252: f020 fb05 bl 1003e860 <__rtw_get_ie_veneer> +1001e256: 4603 mov r3, r0 +1001e258: b148 cbz r0, 1001e26e +1001e25a: 9a03 ldr r2, [sp, #12] +1001e25c: 2a16 cmp r2, #22 +1001e25e: d106 bne.n 1001e26e +1001e260: 6828 ldr r0, [r5, #0] +1001e262: 213d movs r1, #61 ; 0x3d +1001e264: 9500 str r5, [sp, #0] +1001e266: 4430 add r0, r6 +1001e268: 3302 adds r3, #2 +1001e26a: f020 fb51 bl 1003e910 <__rtw_set_ie_veneer> +1001e26e: f8d4 0454 ldr.w r0, [r4, #1108] ; 0x454 +1001e272: b00f add sp, #60 ; 0x3c +1001e274: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +1001e278: 10041390 .word 0x10041390 + +1001e27c : +1001e27c: f8d0 3454 ldr.w r3, [r0, #1108] ; 0x454 +1001e280: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +1001e284: 4604 mov r4, r0 +1001e286: 2b00 cmp r3, #0 +1001e288: d03a beq.n 1001e300 +1001e28a: f890 3736 ldrb.w r3, [r0, #1846] ; 0x736 +1001e28e: b3bb cbz r3, 1001e300 +1001e290: f890 3735 ldrb.w r3, [r0, #1845] ; 0x735 +1001e294: b3a3 cbz r3, 1001e300 +1001e296: f8d0 3458 ldr.w r3, [r0, #1112] ; 0x458 +1001e29a: f500 559c add.w r5, r0, #4992 ; 0x1380 +1001e29e: 3508 adds r5, #8 +1001e2a0: b93b cbnz r3, 1001e2b2 +1001e2a2: f895 3045 ldrb.w r3, [r5, #69] ; 0x45 +1001e2a6: 2b01 cmp r3, #1 +1001e2a8: d103 bne.n 1001e2b2 +1001e2aa: 2301 movs r3, #1 +1001e2ac: f8c4 3458 str.w r3, [r4, #1112] ; 0x458 +1001e2b0: e003 b.n 1001e2ba +1001e2b2: f895 3045 ldrb.w r3, [r5, #69] ; 0x45 +1001e2b6: 2b02 cmp r3, #2 +1001e2b8: d0f7 beq.n 1001e2aa +1001e2ba: ad02 add r5, sp, #8 +1001e2bc: f04f 0800 mov.w r8, #0 +1001e2c0: f845 8d04 str.w r8, [r5, #-4]! +1001e2c4: f101 070c add.w r7, r1, #12 +1001e2c8: f1a2 060c sub.w r6, r2, #12 +1001e2cc: 212d movs r1, #45 ; 0x2d +1001e2ce: 462a mov r2, r5 +1001e2d0: 4633 mov r3, r6 +1001e2d2: 4638 mov r0, r7 +1001e2d4: f020 fac4 bl 1003e860 <__rtw_get_ie_veneer> +1001e2d8: 4633 mov r3, r6 +1001e2da: 4638 mov r0, r7 +1001e2dc: 213d movs r1, #61 ; 0x3d +1001e2de: 462a mov r2, r5 +1001e2e0: f8cd 8004 str.w r8, [sp, #4] +1001e2e4: f020 fabc bl 1003e860 <__rtw_get_ie_veneer> +1001e2e8: f8b4 375a ldrh.w r3, [r4, #1882] ; 0x75a +1001e2ec: f3c3 0381 ubfx r3, r3, #2, #2 +1001e2f0: f884 373a strb.w r3, [r4, #1850] ; 0x73a +1001e2f4: f894 377c ldrb.w r3, [r4, #1916] ; 0x77c +1001e2f8: f003 0303 and.w r3, r3, #3 +1001e2fc: f884 3737 strb.w r3, [r4, #1847] ; 0x737 +1001e300: b002 add sp, #8 +1001e302: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1001e306 : +1001e306: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001e30a: f8d1 3094 ldr.w r3, [r1, #148] ; 0x94 +1001e30e: 4604 mov r4, r0 +1001e310: 337c adds r3, #124 ; 0x7c +1001e312: f5b3 7f5f cmp.w r3, #892 ; 0x37c +1001e316: 460e mov r6, r1 +1001e318: 61cb str r3, [r1, #28] +1001e31a: f100 090c add.w r9, r0, #12 +1001e31e: d827 bhi.n 1001e370 +1001e320: 4648 mov r0, r9 +1001e322: a901 add r1, sp, #4 +1001e324: f7f9 f960 bl 100175e8 +1001e328: 69b3 ldr r3, [r6, #24] +1001e32a: 2b00 cmp r3, #0 +1001e32c: dd09 ble.n 1001e342 +1001e32e: f104 0734 add.w r7, r4, #52 ; 0x34 +1001e332: 4638 mov r0, r7 +1001e334: a901 add r1, sp, #4 +1001e336: f7f9 f957 bl 100175e8 +1001e33a: 6923 ldr r3, [r4, #16] +1001e33c: 061d lsls r5, r3, #24 +1001e33e: d41e bmi.n 1001e37e +1001e340: e0f1 b.n 1001e526 +1001e342: 3304 adds r3, #4 +1001e344: f204 452c addw r5, r4, #1068 ; 0x42c +1001e348: d10a bne.n 1001e360 +1001e34a: 4620 mov r0, r4 +1001e34c: f014 fad9 bl 10032902 +1001e350: 4628 mov r0, r5 +1001e352: 2101 movs r1, #1 +1001e354: f018 fd70 bl 10036e38 +1001e358: 6923 ldr r3, [r4, #16] +1001e35a: 061a lsls r2, r3, #24 +1001e35c: d405 bmi.n 1001e36a +1001e35e: e007 b.n 1001e370 +1001e360: 4628 mov r0, r5 +1001e362: 2101 movs r1, #1 +1001e364: f018 fd68 bl 10036e38 +1001e368: 6923 ldr r3, [r4, #16] +1001e36a: f023 0380 bic.w r3, r3, #128 ; 0x80 +1001e36e: 6123 str r3, [r4, #16] +1001e370: 4648 mov r0, r9 +1001e372: a901 add r1, sp, #4 +1001e374: f7f9 f942 bl 100175fc +1001e378: b003 add sp, #12 +1001e37a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1001e37e: f106 0820 add.w r8, r6, #32 +1001e382: f104 002c add.w r0, r4, #44 ; 0x2c +1001e386: 4641 mov r1, r8 +1001e388: f7ff f8d0 bl 1001d52c <_rtw_find_network> +1001e38c: 6923 ldr r3, [r4, #16] +1001e38e: 4605 mov r5, r0 +1001e390: 071b lsls r3, r3, #28 +1001e392: f100 80c4 bmi.w 1001e51e +1001e396: 2d00 cmp r5, #0 +1001e398: f000 80c5 beq.w 1001e526 +1001e39c: f104 0098 add.w r0, r4, #152 ; 0x98 +1001e3a0: f105 011c add.w r1, r5, #28 +1001e3a4: 69ea ldr r2, [r5, #28] +1001e3a6: f7f9 f843 bl 10017430 +1001e3aa: f8d5 3094 ldr.w r3, [r5, #148] ; 0x94 +1001e3ae: f504 7a8a add.w sl, r4, #276 ; 0x114 +1001e3b2: f44f 7240 mov.w r2, #768 ; 0x300 +1001e3b6: f8c4 3110 str.w r3, [r4, #272] ; 0x110 +1001e3ba: 4650 mov r0, sl +1001e3bc: f105 0198 add.w r1, r5, #152 ; 0x98 +1001e3c0: f7f9 f836 bl 10017430 +1001e3c4: 69b3 ldr r3, [r6, #24] +1001e3c6: f604 4b1c addw fp, r4, #3100 ; 0xc1c +1001e3ca: f8c4 3090 str.w r3, [r4, #144] ; 0x90 +1001e3ce: 4658 mov r0, fp +1001e3d0: f8d4 1c28 ldr.w r1, [r4, #3112] ; 0xc28 +1001e3d4: f018 fd30 bl 10036e38 +1001e3d8: f895 3090 ldrb.w r3, [r5, #144] ; 0x90 +1001e3dc: 4658 mov r0, fp +1001e3de: f884 3c06 strb.w r3, [r4, #3078] ; 0xc06 +1001e3e2: f895 3091 ldrb.w r3, [r5, #145] ; 0x91 +1001e3e6: f8d4 1c28 ldr.w r1, [r4, #3112] ; 0xc28 +1001e3ea: f884 3c07 strb.w r3, [r4, #3079] ; 0xc07 +1001e3ee: f895 3090 ldrb.w r3, [r5, #144] ; 0x90 +1001e3f2: 3b64 subs r3, #100 ; 0x64 +1001e3f4: f884 3c04 strb.w r3, [r4, #3076] ; 0xc04 +1001e3f8: f018 fd1e bl 10036e38 +1001e3fc: 6ff3 ldr r3, [r6, #124] ; 0x7c +1001e3fe: b11b cbz r3, 1001e408 +1001e400: 2b01 cmp r3, #1 +1001e402: d103 bne.n 1001e40c +1001e404: 2308 movs r3, #8 +1001e406: e002 b.n 1001e40e +1001e408: 2320 movs r3, #32 +1001e40a: e000 b.n 1001e40e +1001e40c: 2300 movs r3, #0 +1001e40e: 6123 str r3, [r4, #16] +1001e410: 4620 mov r0, r4 +1001e412: f504 7190 add.w r1, r4, #288 ; 0x120 +1001e416: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 +1001e41a: f00b fa31 bl 10029880 +1001e41e: 4620 mov r0, r4 +1001e420: 4651 mov r1, sl +1001e422: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 +1001e426: f7ff ff29 bl 1001e27c +1001e42a: 4620 mov r0, r4 +1001e42c: f104 01fc add.w r1, r4, #252 ; 0xfc +1001e430: f00a f8b1 bl 10028596 +1001e434: 6923 ldr r3, [r4, #16] +1001e436: 0718 lsls r0, r3, #28 +1001e438: d561 bpl.n 1001e4fe +1001e43a: f504 6a46 add.w sl, r4, #3168 ; 0xc60 +1001e43e: 4650 mov r0, sl +1001e440: 4641 mov r1, r8 +1001e442: f009 ff37 bl 100282b4 +1001e446: 4605 mov r5, r0 +1001e448: b930 cbnz r0, 1001e458 +1001e44a: 4650 mov r0, sl +1001e44c: 4641 mov r1, r8 +1001e44e: f009 fde9 bl 10028024 +1001e452: 4605 mov r5, r0 +1001e454: 2800 cmp r0, #0 +1001e456: d066 beq.n 1001e526 +1001e458: 69b3 ldr r3, [r6, #24] +1001e45a: f8c5 30fc str.w r3, [r5, #252] ; 0xfc +1001e45e: f641 0369 movw r3, #6249 ; 0x1869 +1001e462: 5ce3 ldrb r3, [r4, r3] +1001e464: b103 cbz r3, 1001e468 +1001e466: 2302 movs r3, #2 +1001e468: f8c5 3100 str.w r3, [r5, #256] ; 0x100 +1001e46c: 4620 mov r0, r4 +1001e46e: 2301 movs r3, #1 +1001e470: 2100 movs r1, #0 +1001e472: 462a mov r2, r5 +1001e474: f014 f85d bl 10032532 +1001e478: f8d4 3d08 ldr.w r3, [r4, #3336] ; 0xd08 +1001e47c: 2b02 cmp r3, #2 +1001e47e: d131 bne.n 1001e4e4 +1001e480: 2600 movs r6, #0 +1001e482: f241 035c movw r3, #4188 ; 0x105c +1001e486: 54e6 strb r6, [r4, r3] +1001e488: f241 035d movw r3, #4189 ; 0x105d +1001e48c: 54e6 strb r6, [r4, r3] +1001e48e: f241 035f movw r3, #4191 ; 0x105f +1001e492: 54e6 strb r6, [r4, r3] +1001e494: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c +1001e498: f04f 0801 mov.w r8, #1 +1001e49c: f8c5 3114 str.w r3, [r5, #276] ; 0x114 +1001e4a0: f505 709c add.w r0, r5, #312 ; 0x138 +1001e4a4: 4631 mov r1, r6 +1001e4a6: 2210 movs r2, #16 +1001e4a8: f8c5 8110 str.w r8, [r5, #272] ; 0x110 +1001e4ac: f7f8 ffd0 bl 10017450 +1001e4b0: f505 7094 add.w r0, r5, #296 ; 0x128 +1001e4b4: 4631 mov r1, r6 +1001e4b6: 2210 movs r2, #16 +1001e4b8: f7f8 ffca bl 10017450 +1001e4bc: f505 708c add.w r0, r5, #280 ; 0x118 +1001e4c0: 4631 mov r1, r6 +1001e4c2: 2210 movs r2, #16 +1001e4c4: f7f8 ffc4 bl 10017450 +1001e4c8: f505 70a4 add.w r0, r5, #328 ; 0x148 +1001e4cc: 4631 mov r1, r6 +1001e4ce: 2208 movs r2, #8 +1001e4d0: f7f8 ffbe bl 10017450 +1001e4d4: f505 70a8 add.w r0, r5, #336 ; 0x150 +1001e4d8: 4631 mov r1, r6 +1001e4da: 2208 movs r2, #8 +1001e4dc: f7f8 ffb8 bl 10017450 +1001e4e0: f885 8148 strb.w r8, [r5, #328] ; 0x148 +1001e4e4: f241 0358 movw r3, #4184 ; 0x1058 +1001e4e8: 58e2 ldr r2, [r4, r3] +1001e4ea: b122 cbz r2, 1001e4f6 +1001e4ec: 2201 movs r2, #1 +1001e4ee: f8c5 2110 str.w r2, [r5, #272] ; 0x110 +1001e4f2: 2200 movs r2, #0 +1001e4f4: 50e2 str r2, [r4, r3] +1001e4f6: 4620 mov r0, r4 +1001e4f8: 4629 mov r1, r5 +1001e4fa: f003 fe4d bl 10022198 +1001e4fe: 6923 ldr r3, [r4, #16] +1001e500: 0719 lsls r1, r3, #28 +1001e502: d415 bmi.n 1001e530 +1001e504: f204 402c addw r0, r4, #1068 ; 0x42c +1001e508: f018 fc98 bl 10036e3c +1001e50c: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c +1001e510: b94b cbnz r3, 1001e526 +1001e512: f894 28f9 ldrb.w r2, [r4, #2297] ; 0x8f9 +1001e516: b132 cbz r2, 1001e526 +1001e518: f884 386e strb.w r3, [r4, #2158] ; 0x86e +1001e51c: e003 b.n 1001e526 +1001e51e: b110 cbz r0, 1001e526 +1001e520: 2301 movs r3, #1 +1001e522: 60eb str r3, [r5, #12] +1001e524: e73a b.n 1001e39c +1001e526: 4638 mov r0, r7 +1001e528: a901 add r1, sp, #4 +1001e52a: f7f9 f867 bl 100175fc +1001e52e: e71f b.n 1001e370 +1001e530: 4620 mov r0, r4 +1001e532: f7ff fa86 bl 1001da42 +1001e536: e7e5 b.n 1001e504 + +1001e538 : +1001e538: 6903 ldr r3, [r0, #16] +1001e53a: f013 0f70 tst.w r3, #112 ; 0x70 +1001e53e: d006 beq.n 1001e54e +1001e540: f8d0 0ca4 ldr.w r0, [r0, #3236] ; 0xca4 +1001e544: 2802 cmp r0, #2 +1001e546: bfd4 ite le +1001e548: 2000 movle r0, #0 +1001e54a: 2001 movgt r0, #1 +1001e54c: 4770 bx lr +1001e54e: f003 0001 and.w r0, r3, #1 +1001e552: 4770 bx lr + +1001e554 : +1001e554: b1c8 cbz r0, 1001e58a +1001e556: f641 035c movw r3, #6236 ; 0x185c +1001e55a: 58c3 ldr r3, [r0, r3] +1001e55c: b193 cbz r3, 1001e584 +1001e55e: f241 72ac movw r2, #6060 ; 0x17ac +1001e562: 5898 ldr r0, [r3, r2] +1001e564: b980 cbnz r0, 1001e588 +1001e566: f241 72b0 movw r2, #6064 ; 0x17b0 +1001e56a: 589a ldr r2, [r3, r2] +1001e56c: b96a cbnz r2, 1001e58a +1001e56e: f641 0238 movw r2, #6200 ; 0x1838 +1001e572: 5898 ldr r0, [r3, r2] +1001e574: b148 cbz r0, 1001e58a +1001e576: f241 72c5 movw r2, #6085 ; 0x17c5 +1001e57a: 5c98 ldrb r0, [r3, r2] +1001e57c: 3000 adds r0, #0 +1001e57e: bf18 it ne +1001e580: 2001 movne r0, #1 +1001e582: 4770 bx lr +1001e584: 4618 mov r0, r3 +1001e586: 4770 bx lr +1001e588: 2000 movs r0, #0 +1001e58a: 4770 bx lr + +1001e58c : +1001e58c: b160 cbz r0, 1001e5a8 +1001e58e: f641 035c movw r3, #6236 ; 0x185c +1001e592: 58c0 ldr r0, [r0, r3] +1001e594: b140 cbz r0, 1001e5a8 +1001e596: 6903 ldr r3, [r0, #16] +1001e598: b901 cbnz r1, 1001e59c +1001e59a: b123 cbz r3, 1001e5a6 +1001e59c: 4219 tst r1, r3 +1001e59e: bf0c ite eq +1001e5a0: 2000 moveq r0, #0 +1001e5a2: 2001 movne r0, #1 +1001e5a4: 4770 bx lr +1001e5a6: 2001 movs r0, #1 +1001e5a8: 4770 bx lr + +1001e5aa : +1001e5aa: 8803 ldrh r3, [r0, #0] +1001e5ac: f413 7f80 tst.w r3, #256 ; 0x100 +1001e5b0: bf0c ite eq +1001e5b2: 2200 moveq r2, #0 +1001e5b4: 2202 movne r2, #2 +1001e5b6: f3c3 2340 ubfx r3, r3, #9, #1 +1001e5ba: 4313 orrs r3, r2 +1001e5bc: 2b01 cmp r3, #1 +1001e5be: d002 beq.n 1001e5c6 +1001e5c0: d301 bcc.n 1001e5c6 +1001e5c2: 3010 adds r0, #16 +1001e5c4: 4770 bx lr +1001e5c6: 3004 adds r0, #4 +1001e5c8: 4770 bx lr + +1001e5ca : +1001e5ca: 8802 ldrh r2, [r0, #0] +1001e5cc: f412 7f80 tst.w r2, #256 ; 0x100 +1001e5d0: bf0c ite eq +1001e5d2: 2300 moveq r3, #0 +1001e5d4: 2302 movne r3, #2 +1001e5d6: f3c2 2240 ubfx r2, r2, #9, #1 +1001e5da: 4313 orrs r3, r2 +1001e5dc: 2b01 cmp r3, #1 +1001e5de: d003 beq.n 1001e5e8 +1001e5e0: d304 bcc.n 1001e5ec +1001e5e2: 2b02 cmp r3, #2 +1001e5e4: d002 beq.n 1001e5ec +1001e5e6: e003 b.n 1001e5f0 +1001e5e8: 3010 adds r0, #16 +1001e5ea: 4770 bx lr +1001e5ec: 300a adds r0, #10 +1001e5ee: 4770 bx lr +1001e5f0: 3018 adds r0, #24 +1001e5f2: 4770 bx lr + +1001e5f4 : +1001e5f4: 2001 movs r0, #1 +1001e5f6: 4770 bx lr + +1001e5f8 : +1001e5f8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1001e5fc: 6f8b ldr r3, [r1, #120] ; 0x78 +1001e5fe: 4c0a ldr r4, [pc, #40] ; (1001e628 ) +1001e600: 7e1f ldrb r7, [r3, #24] +1001e602: 4680 mov r8, r0 +1001e604: 460d mov r5, r1 +1001e606: f104 0618 add.w r6, r4, #24 +1001e60a: 42b4 cmp r4, r6 +1001e60c: d008 beq.n 1001e620 +1001e60e: 6823 ldr r3, [r4, #0] +1001e610: 429f cmp r7, r3 +1001e612: d103 bne.n 1001e61c +1001e614: 6863 ldr r3, [r4, #4] +1001e616: 4640 mov r0, r8 +1001e618: 4629 mov r1, r5 +1001e61a: 4798 blx r3 +1001e61c: 3408 adds r4, #8 +1001e61e: e7f4 b.n 1001e60a +1001e620: 2001 movs r0, #1 +1001e622: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1001e626: bf00 nop +1001e628: 1004153c .word 0x1004153c + +1001e62c : +1001e62c: 2001 movs r0, #1 +1001e62e: 4770 bx lr + +1001e630 : +1001e630: b510 push {r4, lr} +1001e632: 2300 movs r3, #0 +1001e634: 240c movs r4, #12 +1001e636: 435c muls r4, r3 +1001e638: 5d04 ldrb r4, [r0, r4] +1001e63a: b134 cbz r4, 1001e64a +1001e63c: 42a1 cmp r1, r4 +1001e63e: d102 bne.n 1001e646 +1001e640: b12a cbz r2, 1001e64e +1001e642: 6013 str r3, [r2, #0] +1001e644: e003 b.n 1001e64e +1001e646: 3301 adds r3, #1 +1001e648: e7f4 b.n 1001e634 +1001e64a: 4620 mov r0, r4 +1001e64c: bd10 pop {r4, pc} +1001e64e: 2001 movs r0, #1 +1001e650: bd10 pop {r4, pc} + +1001e652 : +1001e652: b508 push {r3, lr} +1001e654: f890 151e ldrb.w r1, [r0, #1310] ; 0x51e +1001e658: f890 2520 ldrb.w r2, [r0, #1312] ; 0x520 +1001e65c: f890 351f ldrb.w r3, [r0, #1311] ; 0x51f +1001e660: f00a f85c bl 1002871c +1001e664: 2001 movs r0, #1 +1001e666: bd08 pop {r3, pc} + +1001e668 : +1001e668: b5f8 push {r3, r4, r5, r6, r7, lr} +1001e66a: f241 63c8 movw r3, #5832 ; 0x16c8 +1001e66e: 460c mov r4, r1 +1001e670: 58c6 ldr r6, [r0, r3] +1001e672: 4607 mov r7, r0 +1001e674: 4615 mov r5, r2 +1001e676: 4610 mov r0, r2 +1001e678: 2100 movs r1, #0 +1001e67a: 22a8 movs r2, #168 ; 0xa8 +1001e67c: f7f8 fee8 bl 10017450 +1001e680: 2c58 cmp r4, #88 ; 0x58 +1001e682: d903 bls.n 1001e68c +1001e684: 2c7f cmp r4, #127 ; 0x7f +1001e686: d001 beq.n 1001e68c +1001e688: 2000 movs r0, #0 +1001e68a: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001e68c: f241 33b5 movw r3, #5045 ; 0x13b5 +1001e690: 5cf8 ldrb r0, [r7, r3] +1001e692: 2303 movs r3, #3 +1001e694: f886 3045 strb.w r3, [r6, #69] ; 0x45 +1001e698: f000 000b and.w r0, r0, #11 +1001e69c: 2300 movs r3, #0 +1001e69e: 4917 ldr r1, [pc, #92] ; (1001e6fc ) +1001e6a0: eb03 0243 add.w r2, r3, r3, lsl #1 +1001e6a4: 5c57 ldrb r7, [r2, r1] +1001e6a6: 42a7 cmp r7, r4 +1001e6a8: d105 bne.n 1001e6b6 +1001e6aa: 440a add r2, r1 +1001e6ac: 7853 ldrb r3, [r2, #1] +1001e6ae: 7892 ldrb r2, [r2, #2] +1001e6b0: f886 2045 strb.w r2, [r6, #69] ; 0x45 +1001e6b4: e003 b.n 1001e6be +1001e6b6: 3301 adds r3, #1 +1001e6b8: 2b09 cmp r3, #9 +1001e6ba: d1f0 bne.n 1001e69e +1001e6bc: 2308 movs r3, #8 +1001e6be: 2800 cmp r0, #0 +1001e6c0: d0e2 beq.n 1001e688 +1001e6c2: 4e0f ldr r6, [pc, #60] ; (1001e700 ) +1001e6c4: ebc3 1203 rsb r2, r3, r3, lsl #4 +1001e6c8: 4416 add r6, r2 +1001e6ca: 2100 movs r1, #0 +1001e6cc: 7bb0 ldrb r0, [r6, #14] +1001e6ce: 460c mov r4, r1 +1001e6d0: b2e2 uxtb r2, r4 +1001e6d2: 4282 cmp r2, r0 +1001e6d4: d211 bcs.n 1001e6fa +1001e6d6: 5d37 ldrb r7, [r6, r4] +1001e6d8: 186a adds r2, r5, r1 +1001e6da: 546f strb r7, [r5, r1] +1001e6dc: b123 cbz r3, 1001e6e8 +1001e6de: f1a3 0c07 sub.w ip, r3, #7 +1001e6e2: f1bc 0f01 cmp.w ip, #1 +1001e6e6: d803 bhi.n 1001e6f0 +1001e6e8: 2f0b cmp r7, #11 +1001e6ea: d901 bls.n 1001e6f0 +1001e6ec: 2700 movs r7, #0 +1001e6ee: e000 b.n 1001e6f2 +1001e6f0: 2701 movs r7, #1 +1001e6f2: 6057 str r7, [r2, #4] +1001e6f4: 3401 adds r4, #1 +1001e6f6: 310c adds r1, #12 +1001e6f8: e7ea b.n 1001e6d0 +1001e6fa: bdf8 pop {r3, r4, r5, r6, r7, pc} +1001e6fc: 1004155e .word 0x1004155e +1001e700: 10041424 .word 0x10041424 + +1001e704 : +1001e704: b538 push {r3, r4, r5, lr} +1001e706: 6804 ldr r4, [r0, #0] +1001e708: 4605 mov r5, r0 +1001e70a: b18c cbz r4, 1001e730 +1001e70c: f241 73ac movw r3, #6060 ; 0x17ac +1001e710: 58e3 ldr r3, [r4, r3] +1001e712: 2b01 cmp r3, #1 +1001e714: d10c bne.n 1001e730 +1001e716: f500 7048 add.w r0, r0, #800 ; 0x320 +1001e71a: f018 fb94 bl 10036e46 +1001e71e: f505 704b add.w r0, r5, #812 ; 0x32c +1001e722: f018 fb90 bl 10036e46 +1001e726: 4620 mov r0, r4 +1001e728: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1001e72c: f005 b90e b.w 1002394c +1001e730: bd38 pop {r3, r4, r5, pc} + +1001e732 : +1001e732: b510 push {r4, lr} +1001e734: 8d04 ldrh r4, [r0, #40] ; 0x28 +1001e736: f890 202a ldrb.w r2, [r0, #42] ; 0x2a +1001e73a: 6903 ldr r3, [r0, #16] +1001e73c: 6f80 ldr r0, [r0, #120] ; 0x78 +1001e73e: f002 020f and.w r2, r2, #15 +1001e742: 8800 ldrh r0, [r0, #0] +1001e744: ea42 1204 orr.w r2, r2, r4, lsl #4 +1001e748: 0500 lsls r0, r0, #20 +1001e74a: b292 uxth r2, r2 +1001e74c: d50b bpl.n 1001e766 +1001e74e: 2900 cmp r1, #0 +1001e750: f8b3 085a ldrh.w r0, [r3, #2138] ; 0x85a +1001e754: db05 blt.n 1001e762 +1001e756: 4290 cmp r0, r2 +1001e758: d105 bne.n 1001e766 +1001e75a: f893 085c ldrb.w r0, [r3, #2140] ; 0x85c +1001e75e: 4281 cmp r1, r0 +1001e760: e000 b.n 1001e764 +1001e762: 4290 cmp r0, r2 +1001e764: d006 beq.n 1001e774 +1001e766: 2900 cmp r1, #0 +1001e768: f8a3 285a strh.w r2, [r3, #2138] ; 0x85a +1001e76c: db04 blt.n 1001e778 +1001e76e: f883 185c strb.w r1, [r3, #2140] ; 0x85c +1001e772: e001 b.n 1001e778 +1001e774: 2000 movs r0, #0 +1001e776: bd10 pop {r4, pc} +1001e778: 2001 movs r0, #1 +1001e77a: bd10 pop {r4, pc} + +1001e77c : +1001e77c: b570 push {r4, r5, r6, lr} +1001e77e: 6f84 ldr r4, [r0, #120] ; 0x78 +1001e780: 6905 ldr r5, [r0, #16] +1001e782: 7fe1 ldrb r1, [r4, #31] +1001e784: 6f06 ldr r6, [r0, #112] ; 0x70 +1001e786: f7ff ffd4 bl 1001e732 +1001e78a: b158 cbz r0, 1001e7a4 +1001e78c: f241 63a8 movw r3, #5800 ; 0x16a8 +1001e790: 58eb ldr r3, [r5, r3] +1001e792: b133 cbz r3, 1001e7a2 +1001e794: 4628 mov r0, r5 +1001e796: 4621 mov r1, r4 +1001e798: b2b2 uxth r2, r6 +1001e79a: f895 351e ldrb.w r3, [r5, #1310] ; 0x51e +1001e79e: f004 ffdc bl 1002375a +1001e7a2: 2001 movs r0, #1 +1001e7a4: bd70 pop {r4, r5, r6, pc} + ... + +1001e7a8 : +1001e7a8: b538 push {r3, r4, r5, lr} +1001e7aa: 6f8c ldr r4, [r1, #120] ; 0x78 +1001e7ac: f500 50a4 add.w r0, r0, #5248 ; 0x1480 +1001e7b0: 460d mov r5, r1 +1001e7b2: 3019 adds r0, #25 +1001e7b4: 1d21 adds r1, r4, #4 +1001e7b6: 2206 movs r2, #6 +1001e7b8: f7f8 fe42 bl 10017440 +1001e7bc: b188 cbz r0, 1001e7e2 +1001e7be: 7e22 ldrb r2, [r4, #24] +1001e7c0: 2a04 cmp r2, #4 +1001e7c2: d10e bne.n 1001e7e2 +1001e7c4: 7e63 ldrb r3, [r4, #25] +1001e7c6: 2b09 cmp r3, #9 +1001e7c8: d10b bne.n 1001e7e2 +1001e7ca: f104 001a add.w r0, r4, #26 +1001e7ce: 4906 ldr r1, [pc, #24] ; (1001e7e8 ) +1001e7d0: f7f8 fe36 bl 10017440 +1001e7d4: 2801 cmp r0, #1 +1001e7d6: d104 bne.n 1001e7e2 +1001e7d8: 4628 mov r0, r5 +1001e7da: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1001e7de: f7ff bfcd b.w 1001e77c +1001e7e2: 2000 movs r0, #0 +1001e7e4: bd38 pop {r3, r4, r5, pc} +1001e7e6: bf00 nop +1001e7e8: 100414d7 .word 0x100414d7 + +1001e7ec : +1001e7ec: b570 push {r4, r5, r6, lr} +1001e7ee: 4606 mov r6, r0 +1001e7f0: f00b f8b2 bl 10029958 +1001e7f4: 4604 mov r4, r0 +1001e7f6: b198 cbz r0, 1001e820 +1001e7f8: 4630 mov r0, r6 +1001e7fa: 2100 movs r1, #0 +1001e7fc: f00c f872 bl 1002a8e4 +1001e800: 4605 mov r5, r0 +1001e802: b928 cbnz r0, 1001e810 +1001e804: 4630 mov r0, r6 +1001e806: 4621 mov r1, r4 +1001e808: f00b f8d2 bl 100299b0 +1001e80c: 4628 mov r0, r5 +1001e80e: bd70 pop {r4, r5, r6, pc} +1001e810: 2303 movs r3, #3 +1001e812: 67a3 str r3, [r4, #120] ; 0x78 +1001e814: 6903 ldr r3, [r0, #16] +1001e816: f8c4 0084 str.w r0, [r4, #132] ; 0x84 +1001e81a: f8c4 3080 str.w r3, [r4, #128] ; 0x80 +1001e81e: 6144 str r4, [r0, #20] +1001e820: 4620 mov r0, r4 +1001e822: bd70 pop {r4, r5, r6, pc} + +1001e824 : +1001e824: f880 184b strb.w r1, [r0, #2123] ; 0x84b +1001e828: 4770 bx lr + +1001e82a : +1001e82a: b538 push {r3, r4, r5, lr} +1001e82c: 226c movs r2, #108 ; 0x6c +1001e82e: 460c mov r4, r1 +1001e830: 4605 mov r5, r0 +1001e832: 4608 mov r0, r1 +1001e834: 2100 movs r1, #0 +1001e836: f7f8 fe0b bl 10017450 +1001e83a: 2318 movs r3, #24 +1001e83c: 2207 movs r2, #7 +1001e83e: 8163 strh r3, [r4, #10] +1001e840: 2112 movs r1, #18 +1001e842: 2300 movs r3, #0 +1001e844: f884 2039 strb.w r2, [r4, #57] ; 0x39 +1001e848: f884 303b strb.w r3, [r4, #59] ; 0x3b +1001e84c: f884 1060 strb.w r1, [r4, #96] ; 0x60 +1001e850: 60e3 str r3, [r4, #12] +1001e852: f895 1521 ldrb.w r1, [r5, #1313] ; 0x521 +1001e856: 7523 strb r3, [r4, #20] +1001e858: 07c9 lsls r1, r1, #31 +1001e85a: bf48 it mi +1001e85c: 2208 movmi r2, #8 +1001e85e: f884 2058 strb.w r2, [r4, #88] ; 0x58 +1001e862: 70a3 strb r3, [r4, #2] +1001e864: f884 3056 strb.w r3, [r4, #86] ; 0x56 +1001e868: f884 3057 strb.w r3, [r4, #87] ; 0x57 +1001e86c: f884 3059 strb.w r3, [r4, #89] ; 0x59 +1001e870: f884 305a strb.w r3, [r4, #90] ; 0x5a +1001e874: f884 305b strb.w r3, [r4, #91] ; 0x5b +1001e878: f8b5 351c ldrh.w r3, [r5, #1308] ; 0x51c +1001e87c: 80e3 strh r3, [r4, #6] +1001e87e: 2301 movs r3, #1 +1001e880: f884 3064 strb.w r3, [r4, #100] ; 0x64 +1001e884: bd38 pop {r3, r4, r5, pc} + +1001e886 : +1001e886: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1001e88a: 4605 mov r5, r0 +1001e88c: f600 1058 addw r0, r0, #2392 ; 0x958 +1001e890: 4688 mov r8, r1 +1001e892: 4616 mov r6, r2 +1001e894: f7ff ffaa bl 1001e7ec +1001e898: 4604 mov r4, r0 +1001e89a: b318 cbz r0, 1001e8e4 +1001e89c: 4628 mov r0, r5 +1001e89e: f104 0108 add.w r1, r4, #8 +1001e8a2: f7ff ffc2 bl 1001e82a +1001e8a6: 2100 movs r1, #0 +1001e8a8: f884 106c strb.w r1, [r4, #108] ; 0x6c +1001e8ac: f8d4 0080 ldr.w r0, [r4, #128] ; 0x80 +1001e8b0: 2268 movs r2, #104 ; 0x68 +1001e8b2: f7f8 fdcd bl 10017450 +1001e8b6: f8d4 7080 ldr.w r7, [r4, #128] ; 0x80 +1001e8ba: 4632 mov r2, r6 +1001e8bc: f107 0028 add.w r0, r7, #40 ; 0x28 +1001e8c0: 4641 mov r1, r8 +1001e8c2: f7f8 fdb5 bl 10017430 +1001e8c6: 8ffb ldrh r3, [r7, #62] ; 0x3e +1001e8c8: f8b5 251c ldrh.w r2, [r5, #1308] ; 0x51c +1001e8cc: f003 030f and.w r3, r3, #15 +1001e8d0: ea43 1302 orr.w r3, r3, r2, lsl #4 +1001e8d4: 6166 str r6, [r4, #20] +1001e8d6: 87fb strh r3, [r7, #62] ; 0x3e +1001e8d8: f8b5 351c ldrh.w r3, [r5, #1308] ; 0x51c +1001e8dc: 3301 adds r3, #1 +1001e8de: f8a5 351c strh.w r3, [r5, #1308] ; 0x51c +1001e8e2: 61a6 str r6, [r4, #24] +1001e8e4: 4620 mov r0, r4 +1001e8e6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1001e8ea : +1001e8ea: f241 72b0 movw r2, #6064 ; 0x17b0 +1001e8ee: 5882 ldr r2, [r0, r2] +1001e8f0: 2a01 cmp r2, #1 +1001e8f2: d006 beq.n 1001e902 +1001e8f4: f241 72ac movw r2, #6060 ; 0x17ac +1001e8f8: 5883 ldr r3, [r0, r2] +1001e8fa: 2b01 cmp r3, #1 +1001e8fc: d001 beq.n 1001e902 +1001e8fe: f00b bdd3 b.w 1002a4a8 +1001e902: 4770 bx lr + +1001e904 : +1001e904: b570 push {r4, r5, r6, lr} +1001e906: 4606 mov r6, r0 +1001e908: 461c mov r4, r3 +1001e90a: f7ff ffbc bl 1001e886 +1001e90e: 4605 mov r5, r0 +1001e910: b370 cbz r0, 1001e970 +1001e912: f014 0401 ands.w r4, r4, #1 +1001e916: d025 beq.n 1001e964 +1001e918: f506 54b5 add.w r4, r6, #5792 ; 0x16a0 +1001e91c: 3408 adds r4, #8 +1001e91e: 6921 ldr r1, [r4, #16] +1001e920: b161 cbz r1, 1001e93c +1001e922: f606 1658 addw r6, r6, #2392 ; 0x958 +1001e926: 4630 mov r0, r6 +1001e928: f00b f842 bl 100299b0 +1001e92c: 6923 ldr r3, [r4, #16] +1001e92e: 4630 mov r0, r6 +1001e930: f8d3 1084 ldr.w r1, [r3, #132] ; 0x84 +1001e934: 2300 movs r3, #0 +1001e936: 614b str r3, [r1, #20] +1001e938: f00b ff9b bl 1002a872 +1001e93c: f8d5 1080 ldr.w r1, [r5, #128] ; 0x80 +1001e940: f104 0009 add.w r0, r4, #9 +1001e944: 2206 movs r2, #6 +1001e946: 312c adds r1, #44 ; 0x2c +1001e948: f7f8 fd72 bl 10017430 +1001e94c: 2101 movs r1, #1 +1001e94e: 4b0a ldr r3, [pc, #40] ; (1001e978 ) +1001e950: 6125 str r5, [r4, #16] +1001e952: f104 0014 add.w r0, r4, #20 +1001e956: 2500 movs r5, #0 +1001e958: 7221 strb r1, [r4, #8] +1001e95a: 601d str r5, [r3, #0] +1001e95c: f018 fa6c bl 10036e38 +1001e960: 4628 mov r0, r5 +1001e962: bd70 pop {r4, r5, r6, pc} +1001e964: 4630 mov r0, r6 +1001e966: 4629 mov r1, r5 +1001e968: f7ff ffbf bl 1001e8ea +1001e96c: 4620 mov r0, r4 +1001e96e: bd70 pop {r4, r5, r6, pc} +1001e970: f04f 30ff mov.w r0, #4294967295 +1001e974: bd70 pop {r4, r5, r6, pc} +1001e976: bf00 nop +1001e978: 1004bba8 .word 0x1004bba8 + +1001e97c : +1001e97c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001e980: b0ab sub sp, #172 ; 0xac +1001e982: 4604 mov r4, r0 +1001e984: 2100 movs r1, #0 +1001e986: a808 add r0, sp, #32 +1001e988: 2210 movs r2, #16 +1001e98a: f01f f94b bl 1003dc24 +1001e98e: f8b4 3452 ldrh.w r3, [r4, #1106] ; 0x452 +1001e992: 2b00 cmp r3, #0 +1001e994: f000 80f3 beq.w 1001eb7e +1001e998: f8b4 3450 ldrh.w r3, [r4, #1104] ; 0x450 +1001e99c: 2b00 cmp r3, #0 +1001e99e: f000 80ee beq.w 1001eb7e +1001e9a2: f894 373f ldrb.w r3, [r4, #1855] ; 0x73f +1001e9a6: 2b01 cmp r3, #1 +1001e9a8: f000 80e9 beq.w 1001eb7e +1001e9ac: f04f 0a04 mov.w sl, #4 +1001e9b0: 2700 movs r7, #0 +1001e9b2: f604 1058 addw r0, r4, #2392 ; 0x958 +1001e9b6: f88d a016 strb.w sl, [sp, #22] +1001e9ba: f88d 7017 strb.w r7, [sp, #23] +1001e9be: f7ff ff15 bl 1001e7ec +1001e9c2: 4606 mov r6, r0 +1001e9c4: 2800 cmp r0, #0 +1001e9c6: f000 80da beq.w 1001eb7e +1001e9ca: 4620 mov r0, r4 +1001e9cc: f106 0108 add.w r1, r6, #8 +1001e9d0: f7ff ff2b bl 1001e82a +1001e9d4: 4639 mov r1, r7 +1001e9d6: 2268 movs r2, #104 ; 0x68 +1001e9d8: f8d6 0080 ldr.w r0, [r6, #128] ; 0x80 +1001e9dc: f7f8 fd38 bl 10017450 +1001e9e0: f8d6 5080 ldr.w r5, [r6, #128] ; 0x80 +1001e9e4: f104 0898 add.w r8, r4, #152 ; 0x98 +1001e9e8: f885 7028 strb.w r7, [r5, #40] ; 0x28 +1001e9ec: f885 7029 strb.w r7, [r5, #41] ; 0x29 +1001e9f0: 4640 mov r0, r8 +1001e9f2: f009 fec5 bl 10028780 +1001e9f6: 2206 movs r2, #6 +1001e9f8: 4601 mov r1, r0 +1001e9fa: f105 002c add.w r0, r5, #44 ; 0x2c +1001e9fe: f7f8 fd17 bl 10017430 +1001ea02: f504 51a4 add.w r1, r4, #5248 ; 0x1480 +1001ea06: 3119 adds r1, #25 +1001ea08: 2206 movs r2, #6 +1001ea0a: f105 0032 add.w r0, r5, #50 ; 0x32 +1001ea0e: f7f8 fd0f bl 10017430 +1001ea12: 4640 mov r0, r8 +1001ea14: f009 feb4 bl 10028780 +1001ea18: 2206 movs r2, #6 +1001ea1a: 4601 mov r1, r0 +1001ea1c: f105 0038 add.w r0, r5, #56 ; 0x38 +1001ea20: f7f8 fd06 bl 10017430 +1001ea24: 8feb ldrh r3, [r5, #62] ; 0x3e +1001ea26: f8b4 251c ldrh.w r2, [r4, #1308] ; 0x51c +1001ea2a: f003 030f and.w r3, r3, #15 +1001ea2e: ea43 1302 orr.w r3, r3, r2, lsl #4 +1001ea32: 87eb strh r3, [r5, #62] ; 0x3e +1001ea34: f8b4 351c ldrh.w r3, [r4, #1308] ; 0x51c +1001ea38: 4637 mov r7, r6 +1001ea3a: 3301 adds r3, #1 +1001ea3c: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c +1001ea40: 8d2b ldrh r3, [r5, #40] ; 0x28 +1001ea42: 2101 movs r1, #1 +1001ea44: f023 03fc bic.w r3, r3, #252 ; 0xfc +1001ea48: f043 03d0 orr.w r3, r3, #208 ; 0xd0 +1001ea4c: 852b strh r3, [r5, #40] ; 0x28 +1001ea4e: 2318 movs r3, #24 +1001ea50: f847 3f14 str.w r3, [r7, #20]! +1001ea54: f10d 0216 add.w r2, sp, #22 +1001ea58: 463b mov r3, r7 +1001ea5a: f105 0040 add.w r0, r5, #64 ; 0x40 +1001ea5e: f01f ff8b bl 1003e978 <__rtw_set_fixed_ie_veneer> +1001ea62: 463b mov r3, r7 +1001ea64: 2101 movs r1, #1 +1001ea66: f10d 0217 add.w r2, sp, #23 +1001ea6a: f01f ff85 bl 1003e978 <__rtw_set_fixed_ie_veneer> +1001ea6e: f8b4 3452 ldrh.w r3, [r4, #1106] ; 0x452 +1001ea72: 4681 mov r9, r0 +1001ea74: f10d 0830 add.w r8, sp, #48 ; 0x30 +1001ea78: b143 cbz r3, 1001ea8c +1001ea7a: 9700 str r7, [sp, #0] +1001ea7c: 2148 movs r1, #72 ; 0x48 +1001ea7e: 2201 movs r2, #1 +1001ea80: 4643 mov r3, r8 +1001ea82: f88d a030 strb.w sl, [sp, #48] ; 0x30 +1001ea86: f01f ff43 bl 1003e910 <__rtw_set_ie_veneer> +1001ea8a: 4681 mov r9, r0 +1001ea8c: 4640 mov r0, r8 +1001ea8e: 2100 movs r1, #0 +1001ea90: 2278 movs r2, #120 ; 0x78 +1001ea92: f7f8 fcdd bl 10017450 +1001ea96: f8b4 3450 ldrh.w r3, [r4, #1104] ; 0x450 +1001ea9a: b93b cbnz r3, 1001eaac +1001ea9c: 6973 ldr r3, [r6, #20] +1001ea9e: f240 6252 movw r2, #1618 ; 0x652 +1001eaa2: 61b3 str r3, [r6, #24] +1001eaa4: 3328 adds r3, #40 ; 0x28 +1001eaa6: 4293 cmp r3, r2 +1001eaa8: d85a bhi.n 1001eb60 +1001eaaa: e064 b.n 1001eb76 +1001eaac: f104 0534 add.w r5, r4, #52 ; 0x34 +1001eab0: 4628 mov r0, r5 +1001eab2: a906 add r1, sp, #24 +1001eab4: f7f8 fd98 bl 100175e8 +1001eab8: f8d4 b02c ldr.w fp, [r4, #44] ; 0x2c +1001eabc: f104 0a2c add.w sl, r4, #44 ; 0x2c +1001eac0: 4650 mov r0, sl +1001eac2: 4659 mov r1, fp +1001eac4: f7f8 fd6d bl 100175a2 +1001eac8: 2801 cmp r0, #1 +1001eaca: d021 beq.n 1001eb10 +1001eacc: 4658 mov r0, fp +1001eace: f850 3ba4 ldr.w r3, [r0], #164 +1001ead2: 212d movs r1, #45 ; 0x2d +1001ead4: 9303 str r3, [sp, #12] +1001ead6: f8db 3094 ldr.w r3, [fp, #148] ; 0x94 +1001eada: aa07 add r2, sp, #28 +1001eadc: 3b0c subs r3, #12 +1001eade: f01f febf bl 1003e860 <__rtw_get_ie_veneer> +1001eae2: b120 cbz r0, 1001eaee +1001eae4: 9b07 ldr r3, [sp, #28] +1001eae6: b113 cbz r3, 1001eaee +1001eae8: f8dd b00c ldr.w fp, [sp, #12] +1001eaec: e7e8 b.n 1001eac0 +1001eaee: f8db 3068 ldr.w r3, [fp, #104] ; 0x68 +1001eaf2: 1e5a subs r2, r3, #1 +1001eaf4: 2a0d cmp r2, #13 +1001eaf6: d8f7 bhi.n 1001eae8 +1001eaf8: aa2a add r2, sp, #168 ; 0xa8 +1001eafa: 441a add r2, r3 +1001eafc: 2301 movs r3, #1 +1001eafe: f802 3c78 strb.w r3, [r2, #-120] +1001eb02: f89d 2030 ldrb.w r2, [sp, #48] ; 0x30 +1001eb06: 2a00 cmp r2, #0 +1001eb08: d1ee bne.n 1001eae8 +1001eb0a: f88d 3030 strb.w r3, [sp, #48] ; 0x30 +1001eb0e: e7eb b.n 1001eae8 +1001eb10: 4628 mov r0, r5 +1001eb12: a906 add r1, sp, #24 +1001eb14: f7f8 fd72 bl 100175fc +1001eb18: 2500 movs r5, #0 +1001eb1a: ebc5 1305 rsb r3, r5, r5, lsl #4 +1001eb1e: f818 2003 ldrb.w r2, [r8, r3] +1001eb22: 2a01 cmp r2, #1 +1001eb24: d118 bne.n 1001eb58 +1001eb26: eb08 0103 add.w r1, r8, r3 +1001eb2a: f88d 5020 strb.w r5, [sp, #32] +1001eb2e: 4613 mov r3, r2 +1001eb30: 5cc8 ldrb r0, [r1, r3] +1001eb32: 2801 cmp r0, #1 +1001eb34: d106 bne.n 1001eb44 +1001eb36: 2a0f cmp r2, #15 +1001eb38: dc04 bgt.n 1001eb44 +1001eb3a: a82a add r0, sp, #168 ; 0xa8 +1001eb3c: 4410 add r0, r2 +1001eb3e: f800 3c88 strb.w r3, [r0, #-136] +1001eb42: 3201 adds r2, #1 +1001eb44: 3301 adds r3, #1 +1001eb46: 2b0f cmp r3, #15 +1001eb48: d1f2 bne.n 1001eb30 +1001eb4a: 4648 mov r0, r9 +1001eb4c: 9700 str r7, [sp, #0] +1001eb4e: 2149 movs r1, #73 ; 0x49 +1001eb50: ab08 add r3, sp, #32 +1001eb52: f01f fedd bl 1003e910 <__rtw_set_ie_veneer> +1001eb56: 4681 mov r9, r0 +1001eb58: 3501 adds r5, #1 +1001eb5a: 2d08 cmp r5, #8 +1001eb5c: d1dd bne.n 1001eb1a +1001eb5e: e79d b.n 1001ea9c +1001eb60: 4b08 ldr r3, [pc, #32] ; (1001eb84 ) +1001eb62: 681b ldr r3, [r3, #0] +1001eb64: b13b cbz r3, 1001eb76 +1001eb66: 4808 ldr r0, [pc, #32] ; (1001eb88 ) +1001eb68: f7fc f80a bl 1001ab80 +1001eb6c: 4b07 ldr r3, [pc, #28] ; (1001eb8c ) +1001eb6e: f8d3 0178 ldr.w r0, [r3, #376] ; 0x178 +1001eb72: f7fc f805 bl 1001ab80 +1001eb76: 4620 mov r0, r4 +1001eb78: 4631 mov r1, r6 +1001eb7a: f7ff feb6 bl 1001e8ea +1001eb7e: b02b add sp, #172 ; 0xac +1001eb80: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1001eb84: 10044f38 .word 0x10044f38 +1001eb88: 100429b1 .word 0x100429b1 +1001eb8c: 10043ac4 .word 0x10043ac4 + +1001eb90 : +1001eb90: b51f push {r0, r1, r2, r3, r4, lr} +1001eb92: f8ad 3006 strh.w r3, [sp, #6] +1001eb96: f641 0334 movw r3, #6196 ; 0x1834 +1001eb9a: 9100 str r1, [sp, #0] +1001eb9c: f8ad 2004 strh.w r2, [sp, #4] +1001eba0: 58c0 ldr r0, [r0, r3] +1001eba2: f648 4110 movw r1, #35856 ; 0x8c10 +1001eba6: 466a mov r2, sp +1001eba8: 2300 movs r3, #0 +1001ebaa: f014 ffd1 bl 10033b50 +1001ebae: b005 add sp, #20 +1001ebb0: f85d fb04 ldr.w pc, [sp], #4 + +1001ebb4 <_mgt_dispatcher.isra.4>: +1001ebb4: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1001ebb6: 4b17 ldr r3, [pc, #92] ; (1001ec14 <_mgt_dispatcher.isra.4+0x60>) +1001ebb8: 4604 mov r4, r0 +1001ebba: 6818 ldr r0, [r3, #0] +1001ebbc: 889b ldrh r3, [r3, #4] +1001ebbe: 460e mov r6, r1 +1001ebc0: f8ad 3004 strh.w r3, [sp, #4] +1001ebc4: 680b ldr r3, [r1, #0] +1001ebc6: 4615 mov r5, r2 +1001ebc8: 9000 str r0, [sp, #0] +1001ebca: b303 cbz r3, 1001ec0e <_mgt_dispatcher.isra.4+0x5a> +1001ebcc: 4b12 ldr r3, [pc, #72] ; (1001ec18 <_mgt_dispatcher.isra.4+0x64>) +1001ebce: 6f97 ldr r7, [r2, #120] ; 0x78 +1001ebd0: 681b ldr r3, [r3, #0] +1001ebd2: 6f12 ldr r2, [r2, #112] ; 0x70 +1001ebd4: b133 cbz r3, 1001ebe4 <_mgt_dispatcher.isra.4+0x30> +1001ebd6: 4620 mov r0, r4 +1001ebd8: 4639 mov r1, r7 +1001ebda: b292 uxth r2, r2 +1001ebdc: f894 351e ldrb.w r3, [r4, #1310] ; 0x51e +1001ebe0: f7ff ffd6 bl 1001eb90 +1001ebe4: 3704 adds r7, #4 +1001ebe6: f504 51a4 add.w r1, r4, #5248 ; 0x1480 +1001ebea: 4638 mov r0, r7 +1001ebec: 3119 adds r1, #25 +1001ebee: 2206 movs r2, #6 +1001ebf0: f7f8 fc26 bl 10017440 +1001ebf4: b120 cbz r0, 1001ec00 <_mgt_dispatcher.isra.4+0x4c> +1001ebf6: 6833 ldr r3, [r6, #0] +1001ebf8: 4620 mov r0, r4 +1001ebfa: 4629 mov r1, r5 +1001ebfc: 4798 blx r3 +1001ebfe: e006 b.n 1001ec0e <_mgt_dispatcher.isra.4+0x5a> +1001ec00: 4638 mov r0, r7 +1001ec02: 4669 mov r1, sp +1001ec04: 2206 movs r2, #6 +1001ec06: f7f8 fc1b bl 10017440 +1001ec0a: 2800 cmp r0, #0 +1001ec0c: d1f3 bne.n 1001ebf6 <_mgt_dispatcher.isra.4+0x42> +1001ec0e: b003 add sp, #12 +1001ec10: bdf0 pop {r4, r5, r6, r7, pc} +1001ec12: bf00 nop +1001ec14: 10041411 .word 0x10041411 +1001ec18: 1004bba0 .word 0x1004bba0 + +1001ec1c : +1001ec1c: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1001ec1e: 4b1d ldr r3, [pc, #116] ; (1001ec94 ) +1001ec20: 4604 mov r4, r0 +1001ec22: 6818 ldr r0, [r3, #0] +1001ec24: 889b ldrh r3, [r3, #4] +1001ec26: 6f8e ldr r6, [r1, #120] ; 0x78 +1001ec28: 9000 str r0, [sp, #0] +1001ec2a: f8ad 3004 strh.w r3, [sp, #4] +1001ec2e: 8833 ldrh r3, [r6, #0] +1001ec30: 460d mov r5, r1 +1001ec32: f003 030c and.w r3, r3, #12 +1001ec36: bb5b cbnz r3, 1001ec90 +1001ec38: 1d37 adds r7, r6, #4 +1001ec3a: f504 51a4 add.w r1, r4, #5248 ; 0x1480 +1001ec3e: 4638 mov r0, r7 +1001ec40: 3119 adds r1, #25 +1001ec42: 2206 movs r2, #6 +1001ec44: f7f8 fbfc bl 10017440 +1001ec48: b130 cbz r0, 1001ec58 +1001ec4a: 8833 ldrh r3, [r6, #0] +1001ec4c: f003 03fc and.w r3, r3, #252 ; 0xfc +1001ec50: 091a lsrs r2, r3, #4 +1001ec52: 2a0d cmp r2, #13 +1001ec54: dc1c bgt.n 1001ec90 +1001ec56: e006 b.n 1001ec66 +1001ec58: 4638 mov r0, r7 +1001ec5a: 4669 mov r1, sp +1001ec5c: 2206 movs r2, #6 +1001ec5e: f7f8 fbef bl 10017440 +1001ec62: b1a8 cbz r0, 1001ec90 +1001ec64: e7f1 b.n 1001ec4a +1001ec66: 490c ldr r1, [pc, #48] ; (1001ec98 ) +1001ec68: 2b40 cmp r3, #64 ; 0x40 +1001ec6a: eb01 02c2 add.w r2, r1, r2, lsl #3 +1001ec6e: f102 0104 add.w r1, r2, #4 +1001ec72: d009 beq.n 1001ec88 +1001ec74: d908 bls.n 1001ec88 +1001ec76: 2bb0 cmp r3, #176 ; 0xb0 +1001ec78: d106 bne.n 1001ec88 +1001ec7a: 6923 ldr r3, [r4, #16] +1001ec7c: 06db lsls r3, r3, #27 +1001ec7e: d501 bpl.n 1001ec84 +1001ec80: 4b06 ldr r3, [pc, #24] ; (1001ec9c ) +1001ec82: e000 b.n 1001ec86 +1001ec84: 4b06 ldr r3, [pc, #24] ; (1001eca0 ) +1001ec86: 6053 str r3, [r2, #4] +1001ec88: 4620 mov r0, r4 +1001ec8a: 462a mov r2, r5 +1001ec8c: f7ff ff92 bl 1001ebb4 <_mgt_dispatcher.isra.4> +1001ec90: b003 add sp, #12 +1001ec92: bdf0 pop {r4, r5, r6, r7, pc} +1001ec94: 10041411 .word 0x10041411 +1001ec98: 10044f3c .word 0x10044f3c +1001ec9c: 1001f835 .word 0x1001f835 +1001eca0: 10020aa9 .word 0x10020aa9 + +1001eca4 : +1001eca4: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +1001eca8: 460e mov r6, r1 +1001ecaa: 4617 mov r7, r2 +1001ecac: 2100 movs r1, #0 +1001ecae: aa01 add r2, sp, #4 +1001ecb0: 4633 mov r3, r6 +1001ecb2: 4680 mov r8, r0 +1001ecb4: f01f fdd4 bl 1003e860 <__rtw_get_ie_veneer> +1001ecb8: b1d8 cbz r0, 1001ecf2 +1001ecba: 9a01 ldr r2, [sp, #4] +1001ecbc: b1b2 cbz r2, 1001ecec +1001ecbe: 2f01 cmp r7, #1 +1001ecc0: f04f 0400 mov.w r4, #0 +1001ecc4: d006 beq.n 1001ecd4 +1001ecc6: 2f02 cmp r7, #2 +1001ecc8: d112 bne.n 1001ecf0 +1001ecca: 3002 adds r0, #2 +1001eccc: 4621 mov r1, r4 +1001ecce: f7f8 fbbf bl 10017450 +1001ecd2: e00d b.n 1001ecf0 +1001ecd4: 1c95 adds r5, r2, #2 +1001ecd6: 1941 adds r1, r0, r5 +1001ecd8: ebc1 0208 rsb r2, r1, r8 +1001ecdc: 7044 strb r4, [r0, #1] +1001ecde: 4432 add r2, r6 +1001ece0: 3002 adds r0, #2 +1001ece2: f7f8 fba5 bl 10017430 +1001ece6: 9801 ldr r0, [sp, #4] +1001ece8: 4240 negs r0, r0 +1001ecea: e002 b.n 1001ecf2 +1001ecec: 4610 mov r0, r2 +1001ecee: e000 b.n 1001ecf2 +1001ecf0: 4620 mov r0, r4 +1001ecf2: b002 add sp, #8 +1001ecf4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1001ecf8 : +1001ecf8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001ecfc: 4b8d ldr r3, [pc, #564] ; (1001ef34 ) +1001ecfe: 4604 mov r4, r0 +1001ed00: 6818 ldr r0, [r3, #0] +1001ed02: b089 sub sp, #36 ; 0x24 +1001ed04: 889b ldrh r3, [r3, #4] +1001ed06: 9006 str r0, [sp, #24] +1001ed08: f604 1058 addw r0, r4, #2392 ; 0x958 +1001ed0c: f8ad 301c strh.w r3, [sp, #28] +1001ed10: f7ff fd6c bl 1001e7ec +1001ed14: 4605 mov r5, r0 +1001ed16: 2800 cmp r0, #0 +1001ed18: f000 8109 beq.w 1001ef2e +1001ed1c: f204 5804 addw r8, r4, #1284 ; 0x504 +1001ed20: 4640 mov r0, r8 +1001ed22: a904 add r1, sp, #16 +1001ed24: f7f8 fc60 bl 100175e8 +1001ed28: 4620 mov r0, r4 +1001ed2a: f105 0108 add.w r1, r5, #8 +1001ed2e: f7ff fd7c bl 1001e82a +1001ed32: 2310 movs r3, #16 +1001ed34: f885 3068 strb.w r3, [r5, #104] ; 0x68 +1001ed38: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 +1001ed3c: 2100 movs r1, #0 +1001ed3e: 2268 movs r2, #104 ; 0x68 +1001ed40: f7f8 fb86 bl 10017450 +1001ed44: f8d5 6080 ldr.w r6, [r5, #128] ; 0x80 +1001ed48: 2700 movs r7, #0 +1001ed4a: f106 002c add.w r0, r6, #44 ; 0x2c +1001ed4e: a906 add r1, sp, #24 +1001ed50: 2206 movs r2, #6 +1001ed52: f886 7028 strb.w r7, [r6, #40] ; 0x28 +1001ed56: f886 7029 strb.w r7, [r6, #41] ; 0x29 +1001ed5a: f7f8 fb69 bl 10017430 +1001ed5e: f504 51a4 add.w r1, r4, #5248 ; 0x1480 +1001ed62: 3119 adds r1, #25 +1001ed64: 2206 movs r2, #6 +1001ed66: f106 0032 add.w r0, r6, #50 ; 0x32 +1001ed6a: f7f8 fb61 bl 10017430 +1001ed6e: f104 0098 add.w r0, r4, #152 ; 0x98 +1001ed72: f009 fd05 bl 10028780 +1001ed76: 2206 movs r2, #6 +1001ed78: 4601 mov r1, r0 +1001ed7a: f106 0038 add.w r0, r6, #56 ; 0x38 +1001ed7e: f7f8 fb57 bl 10017430 +1001ed82: 8ff3 ldrh r3, [r6, #62] ; 0x3e +1001ed84: f504 798a add.w r9, r4, #276 ; 0x114 +1001ed88: f003 030f and.w r3, r3, #15 +1001ed8c: 87f3 strh r3, [r6, #62] ; 0x3e +1001ed8e: 8d33 ldrh r3, [r6, #40] ; 0x28 +1001ed90: f106 0a4c add.w sl, r6, #76 ; 0x4c +1001ed94: f023 03fc bic.w r3, r3, #252 ; 0xfc +1001ed98: f043 0380 orr.w r3, r3, #128 ; 0x80 +1001ed9c: 8533 strh r3, [r6, #40] ; 0x28 +1001ed9e: 2318 movs r3, #24 +1001eda0: 616b str r3, [r5, #20] +1001eda2: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +1001eda6: f003 0303 and.w r3, r3, #3 +1001edaa: 2b03 cmp r3, #3 +1001edac: d149 bne.n 1001ee42 +1001edae: 3640 adds r6, #64 ; 0x40 +1001edb0: 4630 mov r0, r6 +1001edb2: 4649 mov r1, r9 +1001edb4: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 +1001edb8: f7f8 fb3a bl 10017430 +1001edbc: f8d4 1110 ldr.w r1, [r4, #272] ; 0x110 +1001edc0: 4650 mov r0, sl +1001edc2: 390c subs r1, #12 +1001edc4: f894 2740 ldrb.w r2, [r4, #1856] ; 0x740 +1001edc8: f7ff ff6c bl 1001eca4 +1001edcc: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001edd0: 4418 add r0, r3 +1001edd2: 696b ldr r3, [r5, #20] +1001edd4: 4406 add r6, r0 +1001edd6: 4418 add r0, r3 +1001edd8: 6863 ldr r3, [r4, #4] +1001edda: 6168 str r0, [r5, #20] +1001eddc: 2b05 cmp r3, #5 +1001edde: d112 bne.n 1001ee06 +1001ede0: f241 63a8 movw r3, #5800 ; 0x16a8 +1001ede4: 58e3 ldr r3, [r4, r3] +1001ede6: 2b03 cmp r3, #3 +1001ede8: d10d bne.n 1001ee06 +1001edea: f8d4 14dc ldr.w r1, [r4, #1244] ; 0x4dc +1001edee: f8d4 74f0 ldr.w r7, [r4, #1264] ; 0x4f0 +1001edf2: b121 cbz r1, 1001edfe +1001edf4: b11f cbz r7, 1001edfe +1001edf6: 4630 mov r0, r6 +1001edf8: 463a mov r2, r7 +1001edfa: f7f8 fb19 bl 10017430 +1001edfe: 696b ldr r3, [r5, #20] +1001ee00: 443e add r6, r7 +1001ee02: 441f add r7, r3 +1001ee04: 616f str r7, [r5, #20] +1001ee06: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 +1001ee0a: 2b00 cmp r3, #0 +1001ee0c: d073 beq.n 1001eef6 +1001ee0e: 2700 movs r7, #0 +1001ee10: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 +1001ee14: 429f cmp r7, r3 +1001ee16: dc6e bgt.n 1001eef6 +1001ee18: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc +1001ee1c: eb03 02c7 add.w r2, r3, r7, lsl #3 +1001ee20: 7912 ldrb r2, [r2, #4] +1001ee22: 0752 lsls r2, r2, #29 +1001ee24: d50b bpl.n 1001ee3e +1001ee26: f853 3037 ldr.w r3, [r3, r7, lsl #3] +1001ee2a: f105 0014 add.w r0, r5, #20 +1001ee2e: 7819 ldrb r1, [r3, #0] +1001ee30: 785a ldrb r2, [r3, #1] +1001ee32: 9000 str r0, [sp, #0] +1001ee34: 3302 adds r3, #2 +1001ee36: 4630 mov r0, r6 +1001ee38: f01f fd6a bl 1003e910 <__rtw_set_ie_veneer> +1001ee3c: 4606 mov r6, r0 +1001ee3e: 3701 adds r7, #1 +1001ee40: e7e6 b.n 1001ee10 +1001ee42: 2320 movs r3, #32 +1001ee44: 616b str r3, [r5, #20] +1001ee46: 4648 mov r0, r9 +1001ee48: f7fe fbd1 bl 1001d5ee +1001ee4c: 2202 movs r2, #2 +1001ee4e: 4601 mov r1, r0 +1001ee50: f106 0048 add.w r0, r6, #72 ; 0x48 +1001ee54: f7f8 faec bl 10017430 +1001ee58: 696b ldr r3, [r5, #20] +1001ee5a: 4648 mov r0, r9 +1001ee5c: 3302 adds r3, #2 +1001ee5e: 616b str r3, [r5, #20] +1001ee60: f7fe fbb6 bl 1001d5d0 +1001ee64: 2202 movs r2, #2 +1001ee66: 4601 mov r1, r0 +1001ee68: f106 004a add.w r0, r6, #74 ; 0x4a +1001ee6c: f7f8 fae0 bl 10017430 +1001ee70: 696b ldr r3, [r5, #20] +1001ee72: 462e mov r6, r5 +1001ee74: 3302 adds r3, #2 +1001ee76: f846 3f14 str.w r3, [r6, #20]! +1001ee7a: f8d4 20a4 ldr.w r2, [r4, #164] ; 0xa4 +1001ee7e: 4639 mov r1, r7 +1001ee80: f104 03a8 add.w r3, r4, #168 ; 0xa8 +1001ee84: 4650 mov r0, sl +1001ee86: 9600 str r6, [sp, #0] +1001ee88: f01f fd42 bl 1003e910 <__rtw_set_ie_veneer> +1001ee8c: f104 0afc add.w sl, r4, #252 ; 0xfc +1001ee90: 4683 mov fp, r0 +1001ee92: 4650 mov r0, sl +1001ee94: f01f fd34 bl 1003e900 <__rtw_get_rateset_len_veneer> +1001ee98: 4681 mov r9, r0 +1001ee9a: f1b9 0f08 cmp.w r9, #8 +1001ee9e: bf34 ite cc +1001eea0: 464a movcc r2, r9 +1001eea2: 2208 movcs r2, #8 +1001eea4: 2101 movs r1, #1 +1001eea6: 4653 mov r3, sl +1001eea8: 9600 str r6, [sp, #0] +1001eeaa: 4658 mov r0, fp +1001eeac: f01f fd30 bl 1003e910 <__rtw_set_ie_veneer> +1001eeb0: 2103 movs r1, #3 +1001eeb2: 2201 movs r2, #1 +1001eeb4: f104 03e4 add.w r3, r4, #228 ; 0xe4 +1001eeb8: 9600 str r6, [sp, #0] +1001eeba: f01f fd29 bl 1003e910 <__rtw_set_ie_veneer> +1001eebe: ab08 add r3, sp, #32 +1001eec0: f843 7d0c str.w r7, [r3, #-12]! +1001eec4: 2106 movs r1, #6 +1001eec6: 2202 movs r2, #2 +1001eec8: 9600 str r6, [sp, #0] +1001eeca: f88d 700f strb.w r7, [sp, #15] +1001eece: f01f fd1f bl 1003e910 <__rtw_set_ie_veneer> +1001eed2: 9600 str r6, [sp, #0] +1001eed4: 212a movs r1, #42 ; 0x2a +1001eed6: 2201 movs r2, #1 +1001eed8: f10d 030f add.w r3, sp, #15 +1001eedc: f01f fd18 bl 1003e910 <__rtw_set_ie_veneer> +1001eee0: f1b9 0f08 cmp.w r9, #8 +1001eee4: d907 bls.n 1001eef6 +1001eee6: 9600 str r6, [sp, #0] +1001eee8: 2132 movs r1, #50 ; 0x32 +1001eeea: f1a9 0208 sub.w r2, r9, #8 +1001eeee: f504 7382 add.w r3, r4, #260 ; 0x104 +1001eef2: f01f fd0d bl 1003e910 <__rtw_set_ie_veneer> +1001eef6: a904 add r1, sp, #16 +1001eef8: 4640 mov r0, r8 +1001eefa: f7f8 fb7f bl 100175fc +1001eefe: 696b ldr r3, [r5, #20] +1001ef00: f240 6252 movw r2, #1618 ; 0x652 +1001ef04: f103 0128 add.w r1, r3, #40 ; 0x28 +1001ef08: 4291 cmp r1, r2 +1001ef0a: d90b bls.n 1001ef24 +1001ef0c: 4b0a ldr r3, [pc, #40] ; (1001ef38 ) +1001ef0e: 681b ldr r3, [r3, #0] +1001ef10: b16b cbz r3, 1001ef2e +1001ef12: 480a ldr r0, [pc, #40] ; (1001ef3c ) +1001ef14: f7fb fe34 bl 1001ab80 +1001ef18: 4b09 ldr r3, [pc, #36] ; (1001ef40 ) +1001ef1a: f8d3 0150 ldr.w r0, [r3, #336] ; 0x150 +1001ef1e: f7fb fe2f bl 1001ab80 +1001ef22: e004 b.n 1001ef2e +1001ef24: 61ab str r3, [r5, #24] +1001ef26: 4620 mov r0, r4 +1001ef28: 4629 mov r1, r5 +1001ef2a: f7ff fcde bl 1001e8ea +1001ef2e: b009 add sp, #36 ; 0x24 +1001ef30: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1001ef34: 10041411 .word 0x10041411 +1001ef38: 10044f38 .word 0x10044f38 +1001ef3c: 100429b1 .word 0x100429b1 +1001ef40: 10043ac4 .word 0x10043ac4 + +1001ef44 : +1001ef44: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001ef48: 4604 mov r4, r0 +1001ef4a: b089 sub sp, #36 ; 0x24 +1001ef4c: f600 1058 addw r0, r0, #2392 ; 0x958 +1001ef50: 460f mov r7, r1 +1001ef52: 9205 str r2, [sp, #20] +1001ef54: f7ff fc4a bl 1001e7ec +1001ef58: 4605 mov r5, r0 +1001ef5a: 2800 cmp r0, #0 +1001ef5c: f000 81a4 beq.w 1001f2a8 +1001ef60: 4620 mov r0, r4 +1001ef62: f105 0108 add.w r1, r5, #8 +1001ef66: f7ff fc60 bl 1001e82a +1001ef6a: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 +1001ef6e: 2100 movs r1, #0 +1001ef70: 2268 movs r2, #104 ; 0x68 +1001ef72: f7f8 fa6d bl 10017450 +1001ef76: f8d5 6080 ldr.w r6, [r5, #128] ; 0x80 +1001ef7a: f04f 0800 mov.w r8, #0 +1001ef7e: f106 002c add.w r0, r6, #44 ; 0x2c +1001ef82: 4639 mov r1, r7 +1001ef84: 2206 movs r2, #6 +1001ef86: f886 8028 strb.w r8, [r6, #40] ; 0x28 +1001ef8a: f886 8029 strb.w r8, [r6, #41] ; 0x29 +1001ef8e: f7f8 fa4f bl 10017430 +1001ef92: f504 51a4 add.w r1, r4, #5248 ; 0x1480 +1001ef96: f106 0032 add.w r0, r6, #50 ; 0x32 +1001ef9a: 3119 adds r1, #25 +1001ef9c: 2206 movs r2, #6 +1001ef9e: f7f8 fa47 bl 10017430 +1001efa2: f104 019c add.w r1, r4, #156 ; 0x9c +1001efa6: 2206 movs r2, #6 +1001efa8: f106 0038 add.w r0, r6, #56 ; 0x38 +1001efac: f7f8 fa40 bl 10017430 +1001efb0: 8ff3 ldrh r3, [r6, #62] ; 0x3e +1001efb2: f8b4 251c ldrh.w r2, [r4, #1308] ; 0x51c +1001efb6: f003 030f and.w r3, r3, #15 +1001efba: ea43 1302 orr.w r3, r3, r2, lsl #4 +1001efbe: 87f3 strh r3, [r6, #62] ; 0x3e +1001efc0: f8b4 351c ldrh.w r3, [r4, #1308] ; 0x51c +1001efc4: 3301 adds r3, #1 +1001efc6: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c +1001efca: 8d33 ldrh r3, [r6, #40] ; 0x28 +1001efcc: f023 03fc bic.w r3, r3, #252 ; 0xfc +1001efd0: f043 0350 orr.w r3, r3, #80 ; 0x50 +1001efd4: 8533 strh r3, [r6, #40] ; 0x28 +1001efd6: 2318 movs r3, #24 +1001efd8: 826b strh r3, [r5, #18] +1001efda: 616b str r3, [r5, #20] +1001efdc: f8d4 1110 ldr.w r1, [r4, #272] ; 0x110 +1001efe0: f5b1 7f40 cmp.w r1, #768 ; 0x300 +1001efe4: f200 8160 bhi.w 1001f2a8 +1001efe8: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +1001efec: f504 778a add.w r7, r4, #276 ; 0x114 +1001eff0: f003 0303 and.w r3, r3, #3 +1001eff4: 2b03 cmp r3, #3 +1001eff6: f040 80c5 bne.w 1001f184 +1001effa: f504 7c90 add.w ip, r4, #288 ; 0x120 +1001effe: 4660 mov r0, ip +1001f000: 4642 mov r2, r8 +1001f002: ab06 add r3, sp, #24 +1001f004: 390c subs r1, #12 +1001f006: f8cd c00c str.w ip, [sp, #12] +1001f00a: f01f fc59 bl 1003e8c0 <__rtw_get_wps_ie_veneer> +1001f00e: f8d4 24c8 ldr.w r2, [r4, #1224] ; 0x4c8 +1001f012: 3640 adds r6, #64 ; 0x40 +1001f014: 4682 mov sl, r0 +1001f016: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001f01a: f8dd c00c ldr.w ip, [sp, #12] +1001f01e: 2a00 cmp r2, #0 +1001f020: d062 beq.n 1001f0e8 +1001f022: 2800 cmp r0, #0 +1001f024: d060 beq.n 1001f0e8 +1001f026: f8dd b018 ldr.w fp, [sp, #24] +1001f02a: f1bb 0f00 cmp.w fp, #0 +1001f02e: d05b beq.n 1001f0e8 +1001f030: ebc7 0800 rsb r8, r7, r0 +1001f034: ebc8 0903 rsb r9, r8, r3 +1001f038: 4660 mov r0, ip +1001f03a: 3b0c subs r3, #12 +1001f03c: 2105 movs r1, #5 +1001f03e: aa07 add r2, sp, #28 +1001f040: f01f fc0e bl 1003e860 <__rtw_get_ie_veneer> +1001f044: ebcb 0909 rsb r9, fp, r9 +1001f048: 4603 mov r3, r0 +1001f04a: b1f8 cbz r0, 1001f08c +1001f04c: 9a07 ldr r2, [sp, #28] +1001f04e: b1ea cbz r2, 1001f08c +1001f050: ebc7 0c00 rsb ip, r7, r0 +1001f054: 3202 adds r2, #2 +1001f056: 4630 mov r0, r6 +1001f058: 9207 str r2, [sp, #28] +1001f05a: 4639 mov r1, r7 +1001f05c: 4662 mov r2, ip +1001f05e: 9304 str r3, [sp, #16] +1001f060: f8cd c00c str.w ip, [sp, #12] +1001f064: f7f8 f9e4 bl 10017430 +1001f068: 9b04 ldr r3, [sp, #16] +1001f06a: 9907 ldr r1, [sp, #28] +1001f06c: f8dd c00c ldr.w ip, [sp, #12] +1001f070: 4419 add r1, r3 +1001f072: eb06 000c add.w r0, r6, ip +1001f076: ebc1 020a rsb r2, r1, sl +1001f07a: f7f8 f9d9 bl 10017430 +1001f07e: 9b07 ldr r3, [sp, #28] +1001f080: 696a ldr r2, [r5, #20] +1001f082: ebc3 0308 rsb r3, r3, r8 +1001f086: 441e add r6, r3 +1001f088: 4413 add r3, r2 +1001f08a: e007 b.n 1001f09c +1001f08c: 4630 mov r0, r6 +1001f08e: 4639 mov r1, r7 +1001f090: 4642 mov r2, r8 +1001f092: f7f8 f9cd bl 10017430 +1001f096: 696b ldr r3, [r5, #20] +1001f098: 4446 add r6, r8 +1001f09a: 4443 add r3, r8 +1001f09c: f8d4 14c8 ldr.w r1, [r4, #1224] ; 0x4c8 +1001f0a0: 616b str r3, [r5, #20] +1001f0a2: 784a ldrb r2, [r1, #1] +1001f0a4: 9206 str r2, [sp, #24] +1001f0a6: 3202 adds r2, #2 +1001f0a8: eb08 0302 add.w r3, r8, r2 +1001f0ac: f5b3 7f40 cmp.w r3, #768 ; 0x300 +1001f0b0: d809 bhi.n 1001f0c6 +1001f0b2: 4630 mov r0, r6 +1001f0b4: f7f8 f9bc bl 10017430 +1001f0b8: 9b06 ldr r3, [sp, #24] +1001f0ba: 1c9a adds r2, r3, #2 +1001f0bc: 4416 add r6, r2 +1001f0be: 696a ldr r2, [r5, #20] +1001f0c0: 4413 add r3, r2 +1001f0c2: 3302 adds r3, #2 +1001f0c4: 616b str r3, [r5, #20] +1001f0c6: 9b06 ldr r3, [sp, #24] +1001f0c8: 3302 adds r3, #2 +1001f0ca: 4498 add r8, r3 +1001f0cc: 44c8 add r8, r9 +1001f0ce: f5b8 7f40 cmp.w r8, #768 ; 0x300 +1001f0d2: d839 bhi.n 1001f148 +1001f0d4: 4630 mov r0, r6 +1001f0d6: eb0a 010b add.w r1, sl, fp +1001f0da: 464a mov r2, r9 +1001f0dc: f7f8 f9a8 bl 10017430 +1001f0e0: 696b ldr r3, [r5, #20] +1001f0e2: 444e add r6, r9 +1001f0e4: 444b add r3, r9 +1001f0e6: e02e b.n 1001f146 +1001f0e8: 4660 mov r0, ip +1001f0ea: 2105 movs r1, #5 +1001f0ec: aa07 add r2, sp, #28 +1001f0ee: 3b0c subs r3, #12 +1001f0f0: f01f fbb6 bl 1003e860 <__rtw_get_ie_veneer> +1001f0f4: 4680 mov r8, r0 +1001f0f6: b1d8 cbz r0, 1001f130 +1001f0f8: 9b07 ldr r3, [sp, #28] +1001f0fa: b1cb cbz r3, 1001f130 +1001f0fc: ebc7 0900 rsb r9, r7, r0 +1001f100: 3302 adds r3, #2 +1001f102: 4639 mov r1, r7 +1001f104: 4630 mov r0, r6 +1001f106: 464a mov r2, r9 +1001f108: 9307 str r3, [sp, #28] +1001f10a: f7f8 f991 bl 10017430 +1001f10e: 9907 ldr r1, [sp, #28] +1001f110: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 +1001f114: ebc8 0707 rsb r7, r8, r7 +1001f118: 1a52 subs r2, r2, r1 +1001f11a: 443a add r2, r7 +1001f11c: eb06 0009 add.w r0, r6, r9 +1001f120: 4441 add r1, r8 +1001f122: f7f8 f985 bl 10017430 +1001f126: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 +1001f12a: 9b07 ldr r3, [sp, #28] +1001f12c: 1ad3 subs r3, r2, r3 +1001f12e: e007 b.n 1001f140 +1001f130: 4630 mov r0, r6 +1001f132: 4639 mov r1, r7 +1001f134: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 +1001f138: f7f8 f97a bl 10017430 +1001f13c: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001f140: 696a ldr r2, [r5, #20] +1001f142: 441e add r6, r3 +1001f144: 4413 add r3, r2 +1001f146: 616b str r3, [r5, #20] +1001f148: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 +1001f14c: 2b00 cmp r3, #0 +1001f14e: d07e beq.n 1001f24e +1001f150: 2700 movs r7, #0 +1001f152: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 +1001f156: 429f cmp r7, r3 +1001f158: dc79 bgt.n 1001f24e +1001f15a: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc +1001f15e: eb03 02c7 add.w r2, r3, r7, lsl #3 +1001f162: 7912 ldrb r2, [r2, #4] +1001f164: 0792 lsls r2, r2, #30 +1001f166: d50b bpl.n 1001f180 +1001f168: f853 3037 ldr.w r3, [r3, r7, lsl #3] +1001f16c: f105 0014 add.w r0, r5, #20 +1001f170: 7819 ldrb r1, [r3, #0] +1001f172: 785a ldrb r2, [r3, #1] +1001f174: 9000 str r0, [sp, #0] +1001f176: 3302 adds r3, #2 +1001f178: 4630 mov r0, r6 +1001f17a: f01f fbc9 bl 1003e910 <__rtw_set_ie_veneer> +1001f17e: 4606 mov r6, r0 +1001f180: 3701 adds r7, #1 +1001f182: e7e6 b.n 1001f152 +1001f184: 2320 movs r3, #32 +1001f186: 616b str r3, [r5, #20] +1001f188: 4638 mov r0, r7 +1001f18a: f7fe fa30 bl 1001d5ee +1001f18e: 2202 movs r2, #2 +1001f190: 4601 mov r1, r0 +1001f192: f106 0048 add.w r0, r6, #72 ; 0x48 +1001f196: f7f8 f94b bl 10017430 +1001f19a: 696b ldr r3, [r5, #20] +1001f19c: 4638 mov r0, r7 +1001f19e: 3302 adds r3, #2 +1001f1a0: 616b str r3, [r5, #20] +1001f1a2: f7fe fa15 bl 1001d5d0 +1001f1a6: 2202 movs r2, #2 +1001f1a8: 4601 mov r1, r0 +1001f1aa: f106 004a add.w r0, r6, #74 ; 0x4a +1001f1ae: f7f8 f93f bl 10017430 +1001f1b2: 696b ldr r3, [r5, #20] +1001f1b4: 462f mov r7, r5 +1001f1b6: 3302 adds r3, #2 +1001f1b8: f847 3f14 str.w r3, [r7, #20]! +1001f1bc: f8d4 20a4 ldr.w r2, [r4, #164] ; 0xa4 +1001f1c0: 4641 mov r1, r8 +1001f1c2: f104 03a8 add.w r3, r4, #168 ; 0xa8 +1001f1c6: f106 004c add.w r0, r6, #76 ; 0x4c +1001f1ca: 9700 str r7, [sp, #0] +1001f1cc: f01f fba0 bl 1003e910 <__rtw_set_ie_veneer> +1001f1d0: f104 06fc add.w r6, r4, #252 ; 0xfc +1001f1d4: 4682 mov sl, r0 +1001f1d6: 4630 mov r0, r6 +1001f1d8: f01f fb92 bl 1003e900 <__rtw_get_rateset_len_veneer> +1001f1dc: 4681 mov r9, r0 +1001f1de: f1b9 0f08 cmp.w r9, #8 +1001f1e2: bf34 ite cc +1001f1e4: 464a movcc r2, r9 +1001f1e6: 2208 movcs r2, #8 +1001f1e8: 4633 mov r3, r6 +1001f1ea: 4650 mov r0, sl +1001f1ec: 2101 movs r1, #1 +1001f1ee: 9700 str r7, [sp, #0] +1001f1f0: f01f fb8e bl 1003e910 <__rtw_set_ie_veneer> +1001f1f4: f104 03e4 add.w r3, r4, #228 ; 0xe4 +1001f1f8: 9700 str r7, [sp, #0] +1001f1fa: 2103 movs r1, #3 +1001f1fc: 2201 movs r2, #1 +1001f1fe: f01f fb87 bl 1003e910 <__rtw_set_ie_veneer> +1001f202: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +1001f206: 4606 mov r6, r0 +1001f208: f003 0a03 and.w sl, r3, #3 +1001f20c: f1ba 0f01 cmp.w sl, #1 +1001f210: d110 bne.n 1001f234 +1001f212: ab08 add r3, sp, #32 +1001f214: f843 8d04 str.w r8, [r3, #-4]! +1001f218: 2106 movs r1, #6 +1001f21a: 2202 movs r2, #2 +1001f21c: 9700 str r7, [sp, #0] +1001f21e: f88d 8018 strb.w r8, [sp, #24] +1001f222: f01f fb75 bl 1003e910 <__rtw_set_ie_veneer> +1001f226: 9700 str r7, [sp, #0] +1001f228: 212a movs r1, #42 ; 0x2a +1001f22a: 4652 mov r2, sl +1001f22c: ab06 add r3, sp, #24 +1001f22e: f01f fb6f bl 1003e910 <__rtw_set_ie_veneer> +1001f232: 4606 mov r6, r0 +1001f234: f1b9 0f08 cmp.w r9, #8 +1001f238: d909 bls.n 1001f24e +1001f23a: 4630 mov r0, r6 +1001f23c: 9700 str r7, [sp, #0] +1001f23e: 2132 movs r1, #50 ; 0x32 +1001f240: f1a9 0208 sub.w r2, r9, #8 +1001f244: f504 7382 add.w r3, r4, #260 ; 0x104 +1001f248: f01f fb62 bl 1003e910 <__rtw_set_ie_veneer> +1001f24c: 4606 mov r6, r0 +1001f24e: 6863 ldr r3, [r4, #4] +1001f250: 2b05 cmp r3, #5 +1001f252: d113 bne.n 1001f27c +1001f254: f241 63a8 movw r3, #5800 ; 0x16a8 +1001f258: 58e3 ldr r3, [r4, r3] +1001f25a: 2b03 cmp r3, #3 +1001f25c: d10e bne.n 1001f27c +1001f25e: 9b05 ldr r3, [sp, #20] +1001f260: b163 cbz r3, 1001f27c +1001f262: f8d4 14e4 ldr.w r1, [r4, #1252] ; 0x4e4 +1001f266: f8d4 74f8 ldr.w r7, [r4, #1272] ; 0x4f8 +1001f26a: b121 cbz r1, 1001f276 +1001f26c: b11f cbz r7, 1001f276 +1001f26e: 4630 mov r0, r6 +1001f270: 463a mov r2, r7 +1001f272: f7f8 f8dd bl 10017430 +1001f276: 696b ldr r3, [r5, #20] +1001f278: 441f add r7, r3 +1001f27a: 616f str r7, [r5, #20] +1001f27c: 696b ldr r3, [r5, #20] +1001f27e: f240 6252 movw r2, #1618 ; 0x652 +1001f282: 61ab str r3, [r5, #24] +1001f284: 3328 adds r3, #40 ; 0x28 +1001f286: 4293 cmp r3, r2 +1001f288: d90a bls.n 1001f2a0 +1001f28a: 4b09 ldr r3, [pc, #36] ; (1001f2b0 ) +1001f28c: 681b ldr r3, [r3, #0] +1001f28e: b13b cbz r3, 1001f2a0 +1001f290: 4808 ldr r0, [pc, #32] ; (1001f2b4 ) +1001f292: f7fb fc75 bl 1001ab80 +1001f296: 4b08 ldr r3, [pc, #32] ; (1001f2b8 ) +1001f298: f8d3 0154 ldr.w r0, [r3, #340] ; 0x154 +1001f29c: f7fb fc70 bl 1001ab80 +1001f2a0: 4620 mov r0, r4 +1001f2a2: 4629 mov r1, r5 +1001f2a4: f7ff fb21 bl 1001e8ea +1001f2a8: b009 add sp, #36 ; 0x24 +1001f2aa: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1001f2ae: bf00 nop +1001f2b0: 10044f38 .word 0x10044f38 +1001f2b4: 100429b1 .word 0x100429b1 +1001f2b8: 10043ac4 .word 0x10043ac4 + +1001f2bc : +1001f2bc: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +1001f2c0: 4b42 ldr r3, [pc, #264] ; (1001f3cc ) +1001f2c2: 4604 mov r4, r0 +1001f2c4: 681b ldr r3, [r3, #0] +1001f2c6: 4688 mov r8, r1 +1001f2c8: 6f8d ldr r5, [r1, #120] ; 0x78 +1001f2ca: 6f0f ldr r7, [r1, #112] ; 0x70 +1001f2cc: b133 cbz r3, 1001f2dc +1001f2ce: f1a7 0118 sub.w r1, r7, #24 +1001f2d2: f105 0018 add.w r0, r5, #24 +1001f2d6: b289 uxth r1, r1 +1001f2d8: 2240 movs r2, #64 ; 0x40 +1001f2da: 4798 blx r3 +1001f2dc: 6863 ldr r3, [r4, #4] +1001f2de: 2b05 cmp r3, #5 +1001f2e0: d11f bne.n 1001f322 +1001f2e2: f241 63ac movw r3, #5804 ; 0x16ac +1001f2e6: 58e3 ldr r3, [r4, r3] +1001f2e8: 2b02 cmp r3, #2 +1001f2ea: d001 beq.n 1001f2f0 +1001f2ec: 2b04 cmp r3, #4 +1001f2ee: d107 bne.n 1001f300 +1001f2f0: 4620 mov r0, r4 +1001f2f2: 4629 mov r1, r5 +1001f2f4: b2ba uxth r2, r7 +1001f2f6: f894 351e ldrb.w r3, [r4, #1310] ; 0x51e +1001f2fa: f004 fa2e bl 1002375a +1001f2fe: e060 b.n 1001f3c2 +1001f300: f241 63a8 movw r3, #5800 ; 0x16a8 +1001f304: 58e3 ldr r3, [r4, r3] +1001f306: 2b03 cmp r3, #3 +1001f308: d10b bne.n 1001f322 +1001f30a: f105 0018 add.w r0, r5, #24 +1001f30e: f1a7 0118 sub.w r1, r7, #24 +1001f312: 2200 movs r2, #0 +1001f314: ab01 add r3, sp, #4 +1001f316: f018 f9fb bl 10037710 +1001f31a: 1c06 adds r6, r0, #0 +1001f31c: bf18 it ne +1001f31e: 2601 movne r6, #1 +1001f320: e000 b.n 1001f324 +1001f322: 2600 movs r6, #0 +1001f324: 6923 ldr r3, [r4, #16] +1001f326: 071a lsls r2, r3, #28 +1001f328: d44b bmi.n 1001f3c2 +1001f32a: f013 0f51 tst.w r3, #81 ; 0x51 +1001f32e: d048 beq.n 1001f3c2 +1001f330: 4b27 ldr r3, [pc, #156] ; (1001f3d0 ) +1001f332: f8d3 9000 ldr.w r9, [r3] +1001f336: f1b9 0f00 cmp.w r9, #0 +1001f33a: d005 beq.n 1001f348 +1001f33c: 4628 mov r0, r5 +1001f33e: f7ff f944 bl 1001e5ca +1001f342: f998 106c ldrsb.w r1, [r8, #108] ; 0x6c +1001f346: 47c8 blx r9 +1001f348: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +1001f34c: f003 0303 and.w r3, r3, #3 +1001f350: 2b03 cmp r3, #3 +1001f352: d009 beq.n 1001f368 +1001f354: f105 0018 add.w r0, r5, #24 +1001f358: 2100 movs r1, #0 +1001f35a: aa01 add r2, sp, #4 +1001f35c: f1a7 0318 sub.w r3, r7, #24 +1001f360: f01f fa7e bl 1003e860 <__rtw_get_ie_veneer> +1001f364: b940 cbnz r0, 1001f378 +1001f366: e02c b.n 1001f3c2 +1001f368: 4620 mov r0, r4 +1001f36a: f44f 6108 mov.w r1, #2176 ; 0x880 +1001f36e: f7ff f90d bl 1001e58c +1001f372: 2800 cmp r0, #0 +1001f374: d0ee beq.n 1001f354 +1001f376: e024 b.n 1001f3c2 +1001f378: b11e cbz r6, 1001f382 +1001f37a: 6923 ldr r3, [r4, #16] +1001f37c: 07db lsls r3, r3, #31 +1001f37e: d414 bmi.n 1001f3aa +1001f380: e01f b.n 1001f3c2 +1001f382: 9b01 ldr r3, [sp, #4] +1001f384: b913 cbnz r3, 1001f38c +1001f386: 9b01 ldr r3, [sp, #4] +1001f388: b153 cbz r3, 1001f3a0 +1001f38a: e7f6 b.n 1001f37a +1001f38c: 3002 adds r0, #2 +1001f38e: f104 01a8 add.w r1, r4, #168 ; 0xa8 +1001f392: f8d4 20a4 ldr.w r2, [r4, #164] ; 0xa4 +1001f396: f7f8 f853 bl 10017440 +1001f39a: 2800 cmp r0, #0 +1001f39c: d1f3 bne.n 1001f386 +1001f39e: e010 b.n 1001f3c2 +1001f3a0: f894 3740 ldrb.w r3, [r4, #1856] ; 0x740 +1001f3a4: 2b00 cmp r3, #0 +1001f3a6: d0e8 beq.n 1001f37a +1001f3a8: e00b b.n 1001f3c2 +1001f3aa: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 +1001f3ae: 2b01 cmp r3, #1 +1001f3b0: d107 bne.n 1001f3c2 +1001f3b2: 4628 mov r0, r5 +1001f3b4: f7ff f909 bl 1001e5ca +1001f3b8: 4632 mov r2, r6 +1001f3ba: 4601 mov r1, r0 +1001f3bc: 4620 mov r0, r4 +1001f3be: f7ff fdc1 bl 1001ef44 +1001f3c2: 2001 movs r0, #1 +1001f3c4: b003 add sp, #12 +1001f3c6: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +1001f3ca: bf00 nop +1001f3cc: 1004de14 .word 0x1004de14 +1001f3d0: 1004bb98 .word 0x1004bb98 + +1001f3d4 : +1001f3d4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001f3d8: 4b76 ldr r3, [pc, #472] ; (1001f5b4 ) +1001f3da: 4604 mov r4, r0 +1001f3dc: 6818 ldr r0, [r3, #0] +1001f3de: b08d sub sp, #52 ; 0x34 +1001f3e0: 889b ldrh r3, [r3, #4] +1001f3e2: 9006 str r0, [sp, #24] +1001f3e4: 2700 movs r7, #0 +1001f3e6: f604 1058 addw r0, r4, #2392 ; 0x958 +1001f3ea: 4688 mov r8, r1 +1001f3ec: 4693 mov fp, r2 +1001f3ee: 9705 str r7, [sp, #20] +1001f3f0: f8ad 301c strh.w r3, [sp, #28] +1001f3f4: f7ff f9fa bl 1001e7ec +1001f3f8: 4605 mov r5, r0 +1001f3fa: 2800 cmp r0, #0 +1001f3fc: f000 80d7 beq.w 1001f5ae +1001f400: 4620 mov r0, r4 +1001f402: f105 0108 add.w r1, r5, #8 +1001f406: f7ff fa10 bl 1001e82a +1001f40a: 4639 mov r1, r7 +1001f40c: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 +1001f410: 2268 movs r2, #104 ; 0x68 +1001f412: f7f8 f81d bl 10017450 +1001f416: f8d5 6080 ldr.w r6, [r5, #128] ; 0x80 +1001f41a: f504 59a4 add.w r9, r4, #5248 ; 0x1480 +1001f41e: f886 7028 strb.w r7, [r6, #40] ; 0x28 +1001f422: f886 7029 strb.w r7, [r6, #41] ; 0x29 +1001f426: f106 0a28 add.w sl, r6, #40 ; 0x28 +1001f42a: f109 0919 add.w r9, r9, #25 +1001f42e: f106 032c add.w r3, r6, #44 ; 0x2c +1001f432: f106 0738 add.w r7, r6, #56 ; 0x38 +1001f436: f1bb 0f00 cmp.w fp, #0 +1001f43a: d111 bne.n 1001f460 +1001f43c: f104 0b98 add.w fp, r4, #152 ; 0x98 +1001f440: 4658 mov r0, fp +1001f442: 9303 str r3, [sp, #12] +1001f444: f009 f99c bl 10028780 +1001f448: 9b03 ldr r3, [sp, #12] +1001f44a: 4601 mov r1, r0 +1001f44c: 2206 movs r2, #6 +1001f44e: 4618 mov r0, r3 +1001f450: f7f7 ffee bl 10017430 +1001f454: 4658 mov r0, fp +1001f456: f009 f993 bl 10028780 +1001f45a: 4601 mov r1, r0 +1001f45c: 4638 mov r0, r7 +1001f45e: e006 b.n 1001f46e +1001f460: 4618 mov r0, r3 +1001f462: a906 add r1, sp, #24 +1001f464: 2206 movs r2, #6 +1001f466: f7f7 ffe3 bl 10017430 +1001f46a: 4638 mov r0, r7 +1001f46c: a906 add r1, sp, #24 +1001f46e: 2206 movs r2, #6 +1001f470: f7f7 ffde bl 10017430 +1001f474: f106 0032 add.w r0, r6, #50 ; 0x32 +1001f478: 2206 movs r2, #6 +1001f47a: 4649 mov r1, r9 +1001f47c: f7f7 ffd8 bl 10017430 +1001f480: f8ba 3016 ldrh.w r3, [sl, #22] +1001f484: f8b4 251c ldrh.w r2, [r4, #1308] ; 0x51c +1001f488: f003 030f and.w r3, r3, #15 +1001f48c: ea43 1302 orr.w r3, r3, r2, lsl #4 +1001f490: f8aa 3016 strh.w r3, [sl, #22] +1001f494: f8b4 351c ldrh.w r3, [r4, #1308] ; 0x51c +1001f498: 462f mov r7, r5 +1001f49a: 3301 adds r3, #1 +1001f49c: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c +1001f4a0: 8d33 ldrh r3, [r6, #40] ; 0x28 +1001f4a2: f106 0040 add.w r0, r6, #64 ; 0x40 +1001f4a6: f023 03fc bic.w r3, r3, #252 ; 0xfc +1001f4aa: f043 0340 orr.w r3, r3, #64 ; 0x40 +1001f4ae: 8533 strh r3, [r6, #40] ; 0x28 +1001f4b0: 2318 movs r3, #24 +1001f4b2: f847 3f14 str.w r3, [r7, #20]! +1001f4b6: 9700 str r7, [sp, #0] +1001f4b8: f1b8 0f00 cmp.w r8, #0 +1001f4bc: d005 beq.n 1001f4ca +1001f4be: 2100 movs r1, #0 +1001f4c0: f8d8 2000 ldr.w r2, [r8] +1001f4c4: f108 0304 add.w r3, r8, #4 +1001f4c8: e002 b.n 1001f4d0 +1001f4ca: 4641 mov r1, r8 +1001f4cc: 4642 mov r2, r8 +1001f4ce: 4643 mov r3, r8 +1001f4d0: f01f fa1e bl 1003e910 <__rtw_set_ie_veneer> +1001f4d4: a908 add r1, sp, #32 +1001f4d6: 4606 mov r6, r0 +1001f4d8: aa05 add r2, sp, #20 +1001f4da: 4620 mov r0, r4 +1001f4dc: f009 f846 bl 1002856c +1001f4e0: 9a05 ldr r2, [sp, #20] +1001f4e2: 9700 str r7, [sp, #0] +1001f4e4: 2a08 cmp r2, #8 +1001f4e6: 4630 mov r0, r6 +1001f4e8: f04f 0101 mov.w r1, #1 +1001f4ec: dd09 ble.n 1001f502 +1001f4ee: 2208 movs r2, #8 +1001f4f0: ab08 add r3, sp, #32 +1001f4f2: f01f fa0d bl 1003e910 <__rtw_set_ie_veneer> +1001f4f6: 9a05 ldr r2, [sp, #20] +1001f4f8: 9700 str r7, [sp, #0] +1001f4fa: 2132 movs r1, #50 ; 0x32 +1001f4fc: 3a08 subs r2, #8 +1001f4fe: ab0a add r3, sp, #40 ; 0x28 +1001f500: e000 b.n 1001f504 +1001f502: ab08 add r3, sp, #32 +1001f504: f01f fa04 bl 1003e910 <__rtw_set_ie_veneer> +1001f508: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 +1001f50c: 4606 mov r6, r0 +1001f50e: b1cb cbz r3, 1001f544 +1001f510: f04f 0800 mov.w r8, #0 +1001f514: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 +1001f518: 4598 cmp r8, r3 +1001f51a: dc13 bgt.n 1001f544 +1001f51c: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc +1001f520: eb03 02c8 add.w r2, r3, r8, lsl #3 +1001f524: 7912 ldrb r2, [r2, #4] +1001f526: 07d2 lsls r2, r2, #31 +1001f528: d509 bpl.n 1001f53e +1001f52a: f853 3038 ldr.w r3, [r3, r8, lsl #3] +1001f52e: 4630 mov r0, r6 +1001f530: 7819 ldrb r1, [r3, #0] +1001f532: 785a ldrb r2, [r3, #1] +1001f534: 9700 str r7, [sp, #0] +1001f536: 3302 adds r3, #2 +1001f538: f01f f9ea bl 1003e910 <__rtw_set_ie_veneer> +1001f53c: 4606 mov r6, r0 +1001f53e: f108 0801 add.w r8, r8, #1 +1001f542: e7e7 b.n 1001f514 +1001f544: f8d4 24a8 ldr.w r2, [r4, #1192] ; 0x4a8 +1001f548: b15a cbz r2, 1001f562 +1001f54a: f8d4 14a4 ldr.w r1, [r4, #1188] ; 0x4a4 +1001f54e: b141 cbz r1, 1001f562 +1001f550: 4630 mov r0, r6 +1001f552: f7f7 ff6d bl 10017430 +1001f556: f8d4 34a8 ldr.w r3, [r4, #1192] ; 0x4a8 +1001f55a: 696a ldr r2, [r5, #20] +1001f55c: 441e add r6, r3 +1001f55e: 4413 add r3, r2 +1001f560: 616b str r3, [r5, #20] +1001f562: 6863 ldr r3, [r4, #4] +1001f564: 2b05 cmp r3, #5 +1001f566: d10c bne.n 1001f582 +1001f568: f8d4 14e0 ldr.w r1, [r4, #1248] ; 0x4e0 +1001f56c: b149 cbz r1, 1001f582 +1001f56e: f8d4 24f4 ldr.w r2, [r4, #1268] ; 0x4f4 +1001f572: 4630 mov r0, r6 +1001f574: f7f7 ff5c bl 10017430 +1001f578: 696a ldr r2, [r5, #20] +1001f57a: f8d4 34f4 ldr.w r3, [r4, #1268] ; 0x4f4 +1001f57e: 4413 add r3, r2 +1001f580: 616b str r3, [r5, #20] +1001f582: 696b ldr r3, [r5, #20] +1001f584: f240 6252 movw r2, #1618 ; 0x652 +1001f588: 61ab str r3, [r5, #24] +1001f58a: 3328 adds r3, #40 ; 0x28 +1001f58c: 4293 cmp r3, r2 +1001f58e: d90a bls.n 1001f5a6 +1001f590: 4b09 ldr r3, [pc, #36] ; (1001f5b8 ) +1001f592: 681b ldr r3, [r3, #0] +1001f594: b13b cbz r3, 1001f5a6 +1001f596: 4809 ldr r0, [pc, #36] ; (1001f5bc ) +1001f598: f7fb faf2 bl 1001ab80 +1001f59c: 4b08 ldr r3, [pc, #32] ; (1001f5c0 ) +1001f59e: f8d3 0158 ldr.w r0, [r3, #344] ; 0x158 +1001f5a2: f7fb faed bl 1001ab80 +1001f5a6: 4620 mov r0, r4 +1001f5a8: 4629 mov r1, r5 +1001f5aa: f7ff f99e bl 1001e8ea +1001f5ae: b00d add sp, #52 ; 0x34 +1001f5b0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1001f5b4: 10041411 .word 0x10041411 +1001f5b8: 10044f38 .word 0x10044f38 +1001f5bc: 100429b1 .word 0x100429b1 +1001f5c0: 10043ac4 .word 0x10043ac4 + +1001f5c4 : +1001f5c4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001f5c8: 4604 mov r4, r0 +1001f5ca: b089 sub sp, #36 ; 0x24 +1001f5cc: f600 1058 addw r0, r0, #2392 ; 0x958 +1001f5d0: 4688 mov r8, r1 +1001f5d2: 4691 mov r9, r2 +1001f5d4: f7ff f90a bl 1001e7ec +1001f5d8: 4605 mov r5, r0 +1001f5da: 2800 cmp r0, #0 +1001f5dc: f000 8121 beq.w 1001f822 +1001f5e0: 4620 mov r0, r4 +1001f5e2: f105 0108 add.w r1, r5, #8 +1001f5e6: f7ff f920 bl 1001e82a +1001f5ea: 2268 movs r2, #104 ; 0x68 +1001f5ec: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 +1001f5f0: 2100 movs r1, #0 +1001f5f2: f7f7 ff2d bl 10017450 +1001f5f6: f8d5 6080 ldr.w r6, [r5, #128] ; 0x80 +1001f5fa: 2300 movs r3, #0 +1001f5fc: f886 3028 strb.w r3, [r6, #40] ; 0x28 +1001f600: f886 3029 strb.w r3, [r6, #41] ; 0x29 +1001f604: 8ff3 ldrh r3, [r6, #62] ; 0x3e +1001f606: f8b4 251c ldrh.w r2, [r4, #1308] ; 0x51c +1001f60a: f003 030f and.w r3, r3, #15 +1001f60e: ea43 1302 orr.w r3, r3, r2, lsl #4 +1001f612: 87f3 strh r3, [r6, #62] ; 0x3e +1001f614: f8b4 351c ldrh.w r3, [r4, #1308] ; 0x51c +1001f618: 2218 movs r2, #24 +1001f61a: 3301 adds r3, #1 +1001f61c: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c +1001f620: 8d33 ldrh r3, [r6, #40] ; 0x28 +1001f622: 462f mov r7, r5 +1001f624: f023 03fc bic.w r3, r3, #252 ; 0xfc +1001f628: f043 03b0 orr.w r3, r3, #176 ; 0xb0 +1001f62c: 8533 strh r3, [r6, #40] ; 0x28 +1001f62e: f106 0332 add.w r3, r6, #50 ; 0x32 +1001f632: f504 5aa4 add.w sl, r4, #5248 ; 0x1480 +1001f636: 9304 str r3, [sp, #16] +1001f638: f106 0338 add.w r3, r6, #56 ; 0x38 +1001f63c: f847 2f14 str.w r2, [r7, #20]! +1001f640: f106 0b40 add.w fp, r6, #64 ; 0x40 +1001f644: f106 022c add.w r2, r6, #44 ; 0x2c +1001f648: f10a 0a18 add.w sl, sl, #24 +1001f64c: 9305 str r3, [sp, #20] +1001f64e: f1b8 0f00 cmp.w r8, #0 +1001f652: d048 beq.n 1001f6e6 +1001f654: f10a 0601 add.w r6, sl, #1 +1001f658: 4610 mov r0, r2 +1001f65a: f508 7184 add.w r1, r8, #264 ; 0x108 +1001f65e: 2206 movs r2, #6 +1001f660: f7f7 fee6 bl 10017430 +1001f664: 4631 mov r1, r6 +1001f666: 9804 ldr r0, [sp, #16] +1001f668: 2206 movs r2, #6 +1001f66a: f7f7 fee1 bl 10017430 +1001f66e: 4631 mov r1, r6 +1001f670: 9805 ldr r0, [sp, #20] +1001f672: 2206 movs r2, #6 +1001f674: f7f7 fedc bl 10017430 +1001f678: f8d8 2240 ldr.w r2, [r8, #576] ; 0x240 +1001f67c: f1b9 0f00 cmp.w r9, #0 +1001f680: bf18 it ne +1001f682: 2200 movne r2, #0 +1001f684: ae08 add r6, sp, #32 +1001f686: f826 2d06 strh.w r2, [r6, #-6]! +1001f68a: 2102 movs r1, #2 +1001f68c: 463b mov r3, r7 +1001f68e: fa1f fa82 uxth.w sl, r2 +1001f692: 4658 mov r0, fp +1001f694: 4632 mov r2, r6 +1001f696: f01f f96f bl 1003e978 <__rtw_set_fixed_ie_veneer> +1001f69a: f8d8 323c ldr.w r3, [r8, #572] ; 0x23c +1001f69e: 2102 movs r1, #2 +1001f6a0: f8ad 301a strh.w r3, [sp, #26] +1001f6a4: 4632 mov r2, r6 +1001f6a6: 463b mov r3, r7 +1001f6a8: f01f f966 bl 1003e978 <__rtw_set_fixed_ie_veneer> +1001f6ac: 463b mov r3, r7 +1001f6ae: 2102 movs r1, #2 +1001f6b0: 4632 mov r2, r6 +1001f6b2: f8ad 901a strh.w r9, [sp, #26] +1001f6b6: f01f f95f bl 1003e978 <__rtw_set_fixed_ie_veneer> +1001f6ba: f8d8 323c ldr.w r3, [r8, #572] ; 0x23c +1001f6be: 2b02 cmp r3, #2 +1001f6c0: f040 808b bne.w 1001f7da +1001f6c4: f8d8 30f8 ldr.w r3, [r8, #248] ; 0xf8 +1001f6c8: 059e lsls r6, r3, #22 +1001f6ca: f140 8086 bpl.w 1001f7da +1001f6ce: f1ba 0f00 cmp.w sl, #0 +1001f6d2: f000 8082 beq.w 1001f7da +1001f6d6: 9700 str r7, [sp, #0] +1001f6d8: 2110 movs r1, #16 +1001f6da: 2280 movs r2, #128 ; 0x80 +1001f6dc: f508 7311 add.w r3, r8, #580 ; 0x244 +1001f6e0: f01f f916 bl 1003e910 <__rtw_set_ie_veneer> +1001f6e4: e079 b.n 1001f7da +1001f6e6: f104 0898 add.w r8, r4, #152 ; 0x98 +1001f6ea: 4640 mov r0, r8 +1001f6ec: 9203 str r2, [sp, #12] +1001f6ee: f009 f847 bl 10028780 +1001f6f2: 9a03 ldr r2, [sp, #12] +1001f6f4: 4601 mov r1, r0 +1001f6f6: 4610 mov r0, r2 +1001f6f8: 2206 movs r2, #6 +1001f6fa: f7f7 fe99 bl 10017430 +1001f6fe: f10a 0101 add.w r1, sl, #1 +1001f702: 2206 movs r2, #6 +1001f704: 9804 ldr r0, [sp, #16] +1001f706: f7f7 fe93 bl 10017430 +1001f70a: 4640 mov r0, r8 +1001f70c: f009 f838 bl 10028780 +1001f710: 2206 movs r2, #6 +1001f712: 4601 mov r1, r0 +1001f714: 9805 ldr r0, [sp, #20] +1001f716: f7f7 fe8b bl 10017430 +1001f71a: f8d4 2694 ldr.w r2, [r4, #1684] ; 0x694 +1001f71e: 1e51 subs r1, r2, #1 +1001f720: f8d4 2690 ldr.w r2, [r4, #1680] ; 0x690 +1001f724: f1d1 0800 rsbs r8, r1, #0 +1001f728: eb58 0801 adcs.w r8, r8, r1 +1001f72c: 2a03 cmp r2, #3 +1001f72e: f8ad 801a strh.w r8, [sp, #26] +1001f732: d11a bne.n 1001f76a +1001f734: f8d4 2680 ldr.w r2, [r4, #1664] ; 0x680 +1001f738: 0592 lsls r2, r2, #22 +1001f73a: d516 bpl.n 1001f76a +1001f73c: f1b8 0f00 cmp.w r8, #0 +1001f740: d013 beq.n 1001f76a +1001f742: f8d4 26a4 ldr.w r2, [r4, #1700] ; 0x6a4 +1001f746: 4658 mov r0, fp +1001f748: 1c51 adds r1, r2, #1 +1001f74a: f8c4 16a4 str.w r1, [r4, #1700] ; 0x6a4 +1001f74e: f8d4 16a0 ldr.w r1, [r4, #1696] ; 0x6a0 +1001f752: 463b mov r3, r7 +1001f754: ea42 7181 orr.w r1, r2, r1, lsl #30 +1001f758: aa08 add r2, sp, #32 +1001f75a: f842 1d04 str.w r1, [r2, #-4]! +1001f75e: 2104 movs r1, #4 +1001f760: f01f f90a bl 1003e978 <__rtw_set_fixed_ie_veneer> +1001f764: 2204 movs r2, #4 +1001f766: 4683 mov fp, r0 +1001f768: 776a strb r2, [r5, #29] +1001f76a: 2102 movs r1, #2 +1001f76c: f10d 021a add.w r2, sp, #26 +1001f770: 463b mov r3, r7 +1001f772: 4658 mov r0, fp +1001f774: f01f f900 bl 1003e978 <__rtw_set_fixed_ie_veneer> +1001f778: f8d4 3690 ldr.w r3, [r4, #1680] ; 0x690 +1001f77c: 2102 movs r1, #2 +1001f77e: f8ad 301a strh.w r3, [sp, #26] +1001f782: f10d 021a add.w r2, sp, #26 +1001f786: 463b mov r3, r7 +1001f788: f01f f8f6 bl 1003e978 <__rtw_set_fixed_ie_veneer> +1001f78c: 463b mov r3, r7 +1001f78e: 2102 movs r1, #2 +1001f790: f10d 021a add.w r2, sp, #26 +1001f794: f8ad 901a strh.w r9, [sp, #26] +1001f798: f01f f8ee bl 1003e978 <__rtw_set_fixed_ie_veneer> +1001f79c: f8d4 3690 ldr.w r3, [r4, #1680] ; 0x690 +1001f7a0: 2b03 cmp r3, #3 +1001f7a2: d11a bne.n 1001f7da +1001f7a4: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +1001f7a8: 059b lsls r3, r3, #22 +1001f7aa: d516 bpl.n 1001f7da +1001f7ac: f1b8 0f00 cmp.w r8, #0 +1001f7b0: d013 beq.n 1001f7da +1001f7b2: f504 63d5 add.w r3, r4, #1704 ; 0x6a8 +1001f7b6: 9700 str r7, [sp, #0] +1001f7b8: 2110 movs r1, #16 +1001f7ba: 2280 movs r2, #128 ; 0x80 +1001f7bc: f01f f8a8 bl 1003e910 <__rtw_set_ie_veneer> +1001f7c0: 8d33 ldrh r3, [r6, #40] ; 0x28 +1001f7c2: f443 4380 orr.w r3, r3, #16384 ; 0x4000 +1001f7c6: 8533 strh r3, [r6, #40] ; 0x28 +1001f7c8: 2318 movs r3, #24 +1001f7ca: 826b strh r3, [r5, #18] +1001f7cc: 2304 movs r3, #4 +1001f7ce: 77ab strb r3, [r5, #30] +1001f7d0: 696b ldr r3, [r5, #20] +1001f7d2: f885 801c strb.w r8, [r5, #28] +1001f7d6: 3304 adds r3, #4 +1001f7d8: 616b str r3, [r5, #20] +1001f7da: 696b ldr r3, [r5, #20] +1001f7dc: f240 6252 movw r2, #1618 ; 0x652 +1001f7e0: 61ab str r3, [r5, #24] +1001f7e2: 3328 adds r3, #40 ; 0x28 +1001f7e4: 4293 cmp r3, r2 +1001f7e6: d90a bls.n 1001f7fe +1001f7e8: 4b0f ldr r3, [pc, #60] ; (1001f828 ) +1001f7ea: 681b ldr r3, [r3, #0] +1001f7ec: b13b cbz r3, 1001f7fe +1001f7ee: 480f ldr r0, [pc, #60] ; (1001f82c ) +1001f7f0: f7fb f9c6 bl 1001ab80 +1001f7f4: 4b0e ldr r3, [pc, #56] ; (1001f830 ) +1001f7f6: f8d3 015c ldr.w r0, [r3, #348] ; 0x15c +1001f7fa: f7fb f9c1 bl 1001ab80 +1001f7fe: 4620 mov r0, r4 +1001f800: 4629 mov r1, r5 +1001f802: f008 f971 bl 10027ae8 +1001f806: f8d4 30d0 ldr.w r3, [r4, #208] ; 0xd0 +1001f80a: aa08 add r2, sp, #32 +1001f80c: 336e adds r3, #110 ; 0x6e +1001f80e: 4620 mov r0, r4 +1001f810: 2134 movs r1, #52 ; 0x34 +1001f812: f802 3d07 strb.w r3, [r2, #-7]! +1001f816: f012 fe6c bl 100324f2 +1001f81a: 4620 mov r0, r4 +1001f81c: 4629 mov r1, r5 +1001f81e: f7ff f864 bl 1001e8ea +1001f822: b009 add sp, #36 ; 0x24 +1001f824: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1001f828: 10044f38 .word 0x10044f38 +1001f82c: 100429b1 .word 0x100429b1 +1001f830: 10043ac4 .word 0x10043ac4 + +1001f834 : +1001f834: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001f838: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 +1001f83c: f8d1 b078 ldr.w fp, [r1, #120] ; 0x78 +1001f840: f003 0303 and.w r3, r3, #3 +1001f844: 6f09 ldr r1, [r1, #112] ; 0x70 +1001f846: b089 sub sp, #36 ; 0x24 +1001f848: 2b03 cmp r3, #3 +1001f84a: 4604 mov r4, r0 +1001f84c: 9105 str r1, [sp, #20] +1001f84e: d007 beq.n 1001f860 +1001f850: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +1001f854: f003 0303 and.w r3, r3, #3 +1001f858: 2b03 cmp r3, #3 +1001f85a: f040 8133 bne.w 1001fac4 +1001f85e: e006 b.n 1001f86e +1001f860: f44f 6108 mov.w r1, #2176 ; 0x880 +1001f864: f7fe fe92 bl 1001e58c +1001f868: 2800 cmp r0, #0 +1001f86a: d0f1 beq.n 1001f850 +1001f86c: e10b b.n 1001fa86 +1001f86e: 4a9a ldr r2, [pc, #616] ; (1001fad8 ) +1001f870: f10b 050a add.w r5, fp, #10 +1001f874: 6813 ldr r3, [r2, #0] +1001f876: 4617 mov r7, r2 +1001f878: b9ab cbnz r3, 1001f8a6 +1001f87a: 4b98 ldr r3, [pc, #608] ; (1001fadc ) +1001f87c: 681a ldr r2, [r3, #0] +1001f87e: b30a cbz r2, 1001f8c4 +1001f880: 4897 ldr r0, [pc, #604] ; (1001fae0 ) +1001f882: f7fb f97d bl 1001ab80 +1001f886: 78e8 ldrb r0, [r5, #3] +1001f888: f89b 100a ldrb.w r1, [fp, #10] +1001f88c: 786a ldrb r2, [r5, #1] +1001f88e: 78ab ldrb r3, [r5, #2] +1001f890: 9000 str r0, [sp, #0] +1001f892: 7928 ldrb r0, [r5, #4] +1001f894: 9001 str r0, [sp, #4] +1001f896: 7968 ldrb r0, [r5, #5] +1001f898: 9002 str r0, [sp, #8] +1001f89a: 4892 ldr r0, [pc, #584] ; (1001fae4 ) +1001f89c: f8d0 012c ldr.w r0, [r0, #300] ; 0x12c +1001f8a0: f7fb f96e bl 1001ab80 +1001f8a4: e00e b.n 1001f8c4 +1001f8a6: 681e ldr r6, [r3, #0] +1001f8a8: 683b ldr r3, [r7, #0] +1001f8aa: 429e cmp r6, r3 +1001f8ac: d0e5 beq.n 1001f87a +1001f8ae: f106 0008 add.w r0, r6, #8 +1001f8b2: 4629 mov r1, r5 +1001f8b4: 2206 movs r2, #6 +1001f8b6: f7fb f987 bl 1001abc8 +1001f8ba: 2800 cmp r0, #0 +1001f8bc: f000 8104 beq.w 1001fac8 +1001f8c0: 6836 ldr r6, [r6, #0] +1001f8c2: e7f1 b.n 1001f8a8 +1001f8c4: f8d4 6d08 ldr.w r6, [r4, #3336] ; 0xd08 +1001f8c8: f8bb a01a ldrh.w sl, [fp, #26] +1001f8cc: 2e02 cmp r6, #2 +1001f8ce: f8bb 8018 ldrh.w r8, [fp, #24] +1001f8d2: d10a bne.n 1001f8ea +1001f8d4: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c +1001f8d8: f023 0304 bic.w r3, r3, #4 +1001f8dc: 2b01 cmp r3, #1 +1001f8de: bf18 it ne +1001f8e0: 2600 movne r6, #0 +1001f8e2: f1b8 0f00 cmp.w r8, #0 +1001f8e6: d103 bne.n 1001f8f0 +1001f8e8: e009 b.n 1001f8fe +1001f8ea: f1b8 0f00 cmp.w r8, #0 +1001f8ee: d003 beq.n 1001f8f8 +1001f8f0: 2e00 cmp r6, #0 +1001f8f2: f000 80eb beq.w 1001facc +1001f8f6: e002 b.n 1001f8fe +1001f8f8: 2e01 cmp r6, #1 +1001f8fa: f000 80e7 beq.w 1001facc +1001f8fe: 4a7a ldr r2, [pc, #488] ; (1001fae8 ) +1001f900: f504 6946 add.w r9, r4, #3168 ; 0xc60 +1001f904: 7811 ldrb r1, [r2, #0] +1001f906: f8d4 2ca4 ldr.w r2, [r4, #3236] ; 0xca4 +1001f90a: 428a cmp r2, r1 +1001f90c: da06 bge.n 1001f91c +1001f90e: 4648 mov r0, r9 +1001f910: 4629 mov r1, r5 +1001f912: f008 fccf bl 100282b4 +1001f916: 4607 mov r7, r0 +1001f918: bb20 cbnz r0, 1001f964 +1001f91a: e006 b.n 1001f92a +1001f91c: 4648 mov r0, r9 +1001f91e: 4629 mov r1, r5 +1001f920: f008 fcc8 bl 100282b4 +1001f924: 2800 cmp r0, #0 +1001f926: d1f2 bne.n 1001f90e +1001f928: e0ce b.n 1001fac8 +1001f92a: 4648 mov r0, r9 +1001f92c: 4629 mov r1, r5 +1001f92e: f008 fb79 bl 10028024 +1001f932: 4607 mov r7, r0 +1001f934: b970 cbnz r0, 1001f954 +1001f936: 4a69 ldr r2, [pc, #420] ; (1001fadc ) +1001f938: 6813 ldr r3, [r2, #0] +1001f93a: 2b00 cmp r3, #0 +1001f93c: f000 80c4 beq.w 1001fac8 +1001f940: 4867 ldr r0, [pc, #412] ; (1001fae0 ) +1001f942: f7fb f91d bl 1001ab80 +1001f946: 4b67 ldr r3, [pc, #412] ; (1001fae4 ) +1001f948: 2103 movs r1, #3 +1001f94a: f8d3 0130 ldr.w r0, [r3, #304] ; 0x130 +1001f94e: f7fb f917 bl 1001ab80 +1001f952: e0b9 b.n 1001fac8 +1001f954: f44f 7380 mov.w r3, #256 ; 0x100 +1001f958: f8c0 30f8 str.w r3, [r0, #248] ; 0xf8 +1001f95c: 2300 movs r3, #0 +1001f95e: f8c0 323c str.w r3, [r0, #572] ; 0x23c +1001f962: e014 b.n 1001f98e +1001f964: f604 49d4 addw r9, r4, #3284 ; 0xcd4 +1001f968: 4648 mov r0, r9 +1001f96a: a906 add r1, sp, #24 +1001f96c: f7f7 fe3c bl 100175e8 +1001f970: f507 7307 add.w r3, r7, #540 ; 0x21c +1001f974: 4618 mov r0, r3 +1001f976: 9304 str r3, [sp, #16] +1001f978: f7f7 fd75 bl 10017466 +1001f97c: 9b04 ldr r3, [sp, #16] +1001f97e: b910 cbnz r0, 1001f986 +1001f980: 4618 mov r0, r3 +1001f982: f7f7 fd81 bl 10017488 +1001f986: 4648 mov r0, r9 +1001f988: a906 add r1, sp, #24 +1001f98a: f7f7 fe37 bl 100175fc +1001f98e: f604 49d8 addw r9, r4, #3288 ; 0xcd8 +1001f992: 4648 mov r0, r9 +1001f994: a906 add r1, sp, #24 +1001f996: f7f7 fe27 bl 100175e8 +1001f99a: f507 7309 add.w r3, r7, #548 ; 0x224 +1001f99e: 4618 mov r0, r3 +1001f9a0: 9304 str r3, [sp, #16] +1001f9a2: f7f7 fd60 bl 10017466 +1001f9a6: 9b04 ldr r3, [sp, #16] +1001f9a8: b120 cbz r0, 1001f9b4 +1001f9aa: 4618 mov r0, r3 +1001f9ac: f604 41cc addw r1, r4, #3276 ; 0xccc +1001f9b0: f7f7 fd64 bl 1001747c +1001f9b4: 4648 mov r0, r9 +1001f9b6: a906 add r1, sp, #24 +1001f9b8: f7f7 fe20 bl 100175fc +1001f9bc: f8d7 923c ldr.w r9, [r7, #572] ; 0x23c +1001f9c0: f1b9 0f00 cmp.w r9, #0 +1001f9c4: d103 bne.n 1001f9ce +1001f9c6: f8d4 3cdc ldr.w r3, [r4, #3292] ; 0xcdc +1001f9ca: f8c7 322c str.w r3, [r7, #556] ; 0x22c +1001f9ce: f109 0301 add.w r3, r9, #1 +1001f9d2: 4553 cmp r3, sl +1001f9d4: d159 bne.n 1001fa8a +1001f9d6: f1b8 0f00 cmp.w r8, #0 +1001f9da: d112 bne.n 1001fa02 +1001f9dc: f036 0202 bics.w r2, r6, #2 +1001f9e0: d10f bne.n 1001fa02 +1001f9e2: f1ba 0f01 cmp.w sl, #1 +1001f9e6: d150 bne.n 1001fa8a +1001f9e8: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 +1001f9ec: f423 7380 bic.w r3, r3, #256 ; 0x100 +1001f9f0: f443 6380 orr.w r3, r3, #1024 ; 0x400 +1001f9f4: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 +1001f9f8: f8d4 3ce0 ldr.w r3, [r4, #3296] ; 0xce0 +1001f9fc: f8c7 322c str.w r3, [r7, #556] ; 0x22c +1001fa00: e009 b.n 1001fa16 +1001fa02: 2b01 cmp r3, #1 +1001fa04: d10a bne.n 1001fa1c +1001fa06: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 +1001fa0a: f423 7380 bic.w r3, r3, #256 ; 0x100 +1001fa0e: f443 7300 orr.w r3, r3, #512 ; 0x200 +1001fa12: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 +1001fa16: f8c7 8240 str.w r8, [r7, #576] ; 0x240 +1001fa1a: e024 b.n 1001fa66 +1001fa1c: 2b03 cmp r3, #3 +1001fa1e: d134 bne.n 1001fa8a +1001fa20: 9e05 ldr r6, [sp, #20] +1001fa22: f10b 0022 add.w r0, fp, #34 ; 0x22 +1001fa26: 2110 movs r1, #16 +1001fa28: aa07 add r2, sp, #28 +1001fa2a: f1a6 0322 sub.w r3, r6, #34 ; 0x22 +1001fa2e: f01e ff17 bl 1003e860 <__rtw_get_ie_veneer> +1001fa32: b908 cbnz r0, 1001fa38 +1001fa34: 260f movs r6, #15 +1001fa36: e029 b.n 1001fa8c +1001fa38: 9b07 ldr r3, [sp, #28] +1001fa3a: 2b00 cmp r3, #0 +1001fa3c: d0fa beq.n 1001fa34 +1001fa3e: 3002 adds r0, #2 +1001fa40: f507 7111 add.w r1, r7, #580 ; 0x244 +1001fa44: 2280 movs r2, #128 ; 0x80 +1001fa46: f7f7 fcfb bl 10017440 +1001fa4a: 2800 cmp r0, #0 +1001fa4c: d0f2 beq.n 1001fa34 +1001fa4e: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 +1001fa52: f423 7300 bic.w r3, r3, #512 ; 0x200 +1001fa56: f443 6380 orr.w r3, r3, #1024 ; 0x400 +1001fa5a: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 +1001fa5e: f8d4 3ce0 ldr.w r3, [r4, #3296] ; 0xce0 +1001fa62: f8c7 322c str.w r3, [r7, #556] ; 0x22c +1001fa66: f109 0302 add.w r3, r9, #2 +1001fa6a: f8c7 323c str.w r3, [r7, #572] ; 0x23c +1001fa6e: 4620 mov r0, r4 +1001fa70: 4639 mov r1, r7 +1001fa72: 2200 movs r2, #0 +1001fa74: f7ff fda6 bl 1001f5c4 +1001fa78: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 +1001fa7c: 055b lsls r3, r3, #21 +1001fa7e: bf44 itt mi +1001fa80: 2300 movmi r3, #0 +1001fa82: f8c7 323c strmi.w r3, [r7, #572] ; 0x23c +1001fa86: 2001 movs r0, #1 +1001fa88: e022 b.n 1001fad0 +1001fa8a: 260e movs r6, #14 +1001fa8c: 4620 mov r0, r4 +1001fa8e: 4639 mov r1, r7 +1001fa90: f008 fb2d bl 100280ee +1001fa94: f44f 7054 mov.w r0, #848 ; 0x350 +1001fa98: f7f7 fe9a bl 100177d0 +1001fa9c: 4607 mov r7, r0 +1001fa9e: b188 cbz r0, 1001fac4 +1001faa0: 2302 movs r3, #2 +1001faa2: f8c0 323c str.w r3, [r0, #572] ; 0x23c +1001faa6: 4629 mov r1, r5 +1001faa8: f500 7084 add.w r0, r0, #264 ; 0x108 +1001faac: 2206 movs r2, #6 +1001faae: f7f7 fcbf bl 10017430 +1001fab2: 4620 mov r0, r4 +1001fab4: 4639 mov r1, r7 +1001fab6: 4632 mov r2, r6 +1001fab8: f7ff fd84 bl 1001f5c4 +1001fabc: 4638 mov r0, r7 +1001fabe: 2100 movs r1, #0 +1001fac0: f7f7 fcb3 bl 1001742a +1001fac4: 2000 movs r0, #0 +1001fac6: e003 b.n 1001fad0 +1001fac8: 2611 movs r6, #17 +1001faca: e7e3 b.n 1001fa94 +1001facc: 260d movs r6, #13 +1001face: e7e1 b.n 1001fa94 +1001fad0: b009 add sp, #36 ; 0x24 +1001fad2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1001fad6: bf00 nop +1001fad8: 1004bb9c .word 0x1004bb9c +1001fadc: 10044f38 .word 0x10044f38 +1001fae0: 100429b1 .word 0x100429b1 +1001fae4: 10043ac4 .word 0x10043ac4 +1001fae8: 10044fbd .word 0x10044fbd + +1001faec : +1001faec: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1001faf0: 4604 mov r4, r0 +1001faf2: b086 sub sp, #24 +1001faf4: f600 1058 addw r0, r0, #2392 ; 0x958 +1001faf8: 4690 mov r8, r2 +1001fafa: 461f mov r7, r3 +1001fafc: f8ad 100e strh.w r1, [sp, #14] +1001fb00: f7fe fe74 bl 1001e7ec +1001fb04: 4605 mov r5, r0 +1001fb06: 2800 cmp r0, #0 +1001fb08: f000 8138 beq.w 1001fd7c +1001fb0c: 4620 mov r0, r4 +1001fb0e: f105 0108 add.w r1, r5, #8 +1001fb12: f7fe fe8a bl 1001e82a +1001fb16: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 +1001fb1a: 2100 movs r1, #0 +1001fb1c: 2268 movs r2, #104 ; 0x68 +1001fb1e: f7f7 fc97 bl 10017450 +1001fb22: f8d5 6080 ldr.w r6, [r5, #128] ; 0x80 +1001fb26: 2300 movs r3, #0 +1001fb28: f886 3028 strb.w r3, [r6, #40] ; 0x28 +1001fb2c: f886 3029 strb.w r3, [r6, #41] ; 0x29 +1001fb30: f106 002c add.w r0, r6, #44 ; 0x2c +1001fb34: f508 7184 add.w r1, r8, #264 ; 0x108 +1001fb38: 2206 movs r2, #6 +1001fb3a: f7f7 fc79 bl 10017430 +1001fb3e: f504 51a4 add.w r1, r4, #5248 ; 0x1480 +1001fb42: 3119 adds r1, #25 +1001fb44: 2206 movs r2, #6 +1001fb46: f106 0032 add.w r0, r6, #50 ; 0x32 +1001fb4a: f7f7 fc71 bl 10017430 +1001fb4e: f104 0098 add.w r0, r4, #152 ; 0x98 +1001fb52: f008 fe15 bl 10028780 +1001fb56: 2206 movs r2, #6 +1001fb58: 4601 mov r1, r0 +1001fb5a: f106 0038 add.w r0, r6, #56 ; 0x38 +1001fb5e: f7f7 fc67 bl 10017430 +1001fb62: 8ff3 ldrh r3, [r6, #62] ; 0x3e +1001fb64: f8b4 251c ldrh.w r2, [r4, #1308] ; 0x51c +1001fb68: f003 030f and.w r3, r3, #15 +1001fb6c: ea43 1302 orr.w r3, r3, r2, lsl #4 +1001fb70: 87f3 strh r3, [r6, #62] ; 0x3e +1001fb72: f8b4 351c ldrh.w r3, [r4, #1308] ; 0x51c +1001fb76: 3301 adds r3, #1 +1001fb78: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c +1001fb7c: f027 0320 bic.w r3, r7, #32 +1001fb80: 2b10 cmp r3, #16 +1001fb82: f040 80fb bne.w 1001fd7c +1001fb86: 8d33 ldrh r3, [r6, #40] ; 0x28 +1001fb88: f504 708a add.w r0, r4, #276 ; 0x114 +1001fb8c: f023 03fc bic.w r3, r3, #252 ; 0xfc +1001fb90: 431f orrs r7, r3 +1001fb92: 2318 movs r3, #24 +1001fb94: 8537 strh r7, [r6, #40] ; 0x28 +1001fb96: 826b strh r3, [r5, #18] +1001fb98: 696b ldr r3, [r5, #20] +1001fb9a: 462f mov r7, r5 +1001fb9c: 3318 adds r3, #24 +1001fb9e: f847 3f14 str.w r3, [r7, #20]! +1001fba2: f7fd fd15 bl 1001d5d0 +1001fba6: 8803 ldrh r3, [r0, #0] +1001fba8: f106 0940 add.w r9, r6, #64 ; 0x40 +1001fbac: ae06 add r6, sp, #24 +1001fbae: f826 3d06 strh.w r3, [r6, #-6]! +1001fbb2: 2102 movs r1, #2 +1001fbb4: 4632 mov r2, r6 +1001fbb6: 463b mov r3, r7 +1001fbb8: 4648 mov r0, r9 +1001fbba: f01e fedd bl 1003e978 <__rtw_set_fixed_ie_veneer> +1001fbbe: 2102 movs r1, #2 +1001fbc0: f10d 020e add.w r2, sp, #14 +1001fbc4: 463b mov r3, r7 +1001fbc6: f01e fed7 bl 1003e978 <__rtw_set_fixed_ie_veneer> +1001fbca: f8d8 30fc ldr.w r3, [r8, #252] ; 0xfc +1001fbce: 2102 movs r1, #2 +1001fbd0: ea6f 4383 mvn.w r3, r3, lsl #18 +1001fbd4: ea6f 4393 mvn.w r3, r3, lsr #18 +1001fbd8: f8ad 3012 strh.w r3, [sp, #18] +1001fbdc: 4632 mov r2, r6 +1001fbde: 463b mov r3, r7 +1001fbe0: f01e feca bl 1003e978 <__rtw_set_fixed_ie_veneer> +1001fbe4: f8d8 2168 ldr.w r2, [r8, #360] ; 0x168 +1001fbe8: 2101 movs r1, #1 +1001fbea: 2a08 cmp r2, #8 +1001fbec: 9700 str r7, [sp, #0] +1001fbee: f508 73ac add.w r3, r8, #344 ; 0x158 +1001fbf2: d909 bls.n 1001fc08 +1001fbf4: 2208 movs r2, #8 +1001fbf6: f01e fe8b bl 1003e910 <__rtw_set_ie_veneer> +1001fbfa: f8d8 2168 ldr.w r2, [r8, #360] ; 0x168 +1001fbfe: 2132 movs r1, #50 ; 0x32 +1001fc00: 9700 str r7, [sp, #0] +1001fc02: 3a08 subs r2, #8 +1001fc04: f508 73b0 add.w r3, r8, #352 ; 0x160 +1001fc08: f01e fe82 bl 1003e910 <__rtw_set_ie_veneer> +1001fc0c: f8d8 32c8 ldr.w r3, [r8, #712] ; 0x2c8 +1001fc10: 4606 mov r6, r0 +1001fc12: 051a lsls r2, r3, #20 +1001fc14: d538 bpl.n 1001fc88 +1001fc16: f8d4 3454 ldr.w r3, [r4, #1108] ; 0x454 +1001fc1a: 2b00 cmp r3, #0 +1001fc1c: d034 beq.n 1001fc88 +1001fc1e: f10d 0918 add.w r9, sp, #24 +1001fc22: 2300 movs r3, #0 +1001fc24: f849 3d04 str.w r3, [r9, #-4]! +1001fc28: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001fc2c: f504 7a90 add.w sl, r4, #288 ; 0x120 +1001fc30: 212d movs r1, #45 ; 0x2d +1001fc32: 4650 mov r0, sl +1001fc34: 464a mov r2, r9 +1001fc36: 3b0c subs r3, #12 +1001fc38: f01e fe12 bl 1003e860 <__rtw_get_ie_veneer> +1001fc3c: 4601 mov r1, r0 +1001fc3e: b160 cbz r0, 1001fc5a +1001fc40: 9a05 ldr r2, [sp, #20] +1001fc42: b152 cbz r2, 1001fc5a +1001fc44: 4630 mov r0, r6 +1001fc46: 3202 adds r2, #2 +1001fc48: f7f7 fbf2 bl 10017430 +1001fc4c: 9b05 ldr r3, [sp, #20] +1001fc4e: 1c9a adds r2, r3, #2 +1001fc50: 4416 add r6, r2 +1001fc52: 696a ldr r2, [r5, #20] +1001fc54: 4413 add r3, r2 +1001fc56: 3302 adds r3, #2 +1001fc58: 616b str r3, [r5, #20] +1001fc5a: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001fc5e: 213d movs r1, #61 ; 0x3d +1001fc60: 4650 mov r0, sl +1001fc62: 464a mov r2, r9 +1001fc64: 3b0c subs r3, #12 +1001fc66: f01e fdfb bl 1003e860 <__rtw_get_ie_veneer> +1001fc6a: 4601 mov r1, r0 +1001fc6c: b160 cbz r0, 1001fc88 +1001fc6e: 9a05 ldr r2, [sp, #20] +1001fc70: b152 cbz r2, 1001fc88 +1001fc72: 4630 mov r0, r6 +1001fc74: 3202 adds r2, #2 +1001fc76: f7f7 fbdb bl 10017430 +1001fc7a: 9b05 ldr r3, [sp, #20] +1001fc7c: 1c9a adds r2, r3, #2 +1001fc7e: 4416 add r6, r2 +1001fc80: 696a ldr r2, [r5, #20] +1001fc82: 4413 add r3, r2 +1001fc84: 3302 adds r3, #2 +1001fc86: 616b str r3, [r5, #20] +1001fc88: f8d8 32c8 ldr.w r3, [r8, #712] ; 0x2c8 +1001fc8c: 059b lsls r3, r3, #22 +1001fc8e: d527 bpl.n 1001fce0 +1001fc90: f8d4 344c ldr.w r3, [r4, #1100] ; 0x44c +1001fc94: b323 cbz r3, 1001fce0 +1001fc96: 2300 movs r3, #0 +1001fc98: 9305 str r3, [sp, #20] +1001fc9a: f504 7090 add.w r0, r4, #288 ; 0x120 +1001fc9e: f8d4 e110 ldr.w lr, [r4, #272] ; 0x110 +1001fca2: 9b05 ldr r3, [sp, #20] +1001fca4: f1ae 0e0e sub.w lr, lr, #14 +1001fca8: 21dd movs r1, #221 ; 0xdd +1001fcaa: aa05 add r2, sp, #20 +1001fcac: ebc3 030e rsb r3, r3, lr +1001fcb0: f01e fdd6 bl 1003e860 <__rtw_get_ie_veneer> +1001fcb4: 4680 mov r8, r0 +1001fcb6: b198 cbz r0, 1001fce0 +1001fcb8: 2206 movs r2, #6 +1001fcba: 3002 adds r0, #2 +1001fcbc: 4931 ldr r1, [pc, #196] ; (1001fd84 ) +1001fcbe: f7f7 fbbf bl 10017440 +1001fcc2: 9a05 ldr r2, [sp, #20] +1001fcc4: 2800 cmp r0, #0 +1001fcc6: d053 beq.n 1001fd70 +1001fcc8: 4630 mov r0, r6 +1001fcca: 3202 adds r2, #2 +1001fccc: 4641 mov r1, r8 +1001fcce: f7f7 fbaf bl 10017430 +1001fcd2: 9b05 ldr r3, [sp, #20] +1001fcd4: 1c9a adds r2, r3, #2 +1001fcd6: 4416 add r6, r2 +1001fcd8: 696a ldr r2, [r5, #20] +1001fcda: 4413 add r3, r2 +1001fcdc: 3302 adds r3, #2 +1001fcde: 616b str r3, [r5, #20] +1001fce0: f894 372e ldrb.w r3, [r4, #1838] ; 0x72e +1001fce4: 2b01 cmp r3, #1 +1001fce6: d107 bne.n 1001fcf8 +1001fce8: 4630 mov r0, r6 +1001fcea: 9700 str r7, [sp, #0] +1001fcec: 21dd movs r1, #221 ; 0xdd +1001fcee: 2206 movs r2, #6 +1001fcf0: 4b25 ldr r3, [pc, #148] ; (1001fd88 ) +1001fcf2: f01e fe0d bl 1003e910 <__rtw_set_ie_veneer> +1001fcf6: 4606 mov r6, r0 +1001fcf8: f8d4 14cc ldr.w r1, [r4, #1228] ; 0x4cc +1001fcfc: b159 cbz r1, 1001fd16 +1001fcfe: f8d4 24d8 ldr.w r2, [r4, #1240] ; 0x4d8 +1001fd02: b142 cbz r2, 1001fd16 +1001fd04: 4630 mov r0, r6 +1001fd06: f7f7 fb93 bl 10017430 +1001fd0a: f8d4 34d8 ldr.w r3, [r4, #1240] ; 0x4d8 +1001fd0e: 696a ldr r2, [r5, #20] +1001fd10: 441e add r6, r3 +1001fd12: 4413 add r3, r2 +1001fd14: 616b str r3, [r5, #20] +1001fd16: 6863 ldr r3, [r4, #4] +1001fd18: 2b05 cmp r3, #5 +1001fd1a: d112 bne.n 1001fd42 +1001fd1c: f241 63a8 movw r3, #5800 ; 0x16a8 +1001fd20: 58e3 ldr r3, [r4, r3] +1001fd22: 2b03 cmp r3, #3 +1001fd24: d10d bne.n 1001fd42 +1001fd26: f8d4 14ec ldr.w r1, [r4, #1260] ; 0x4ec +1001fd2a: b151 cbz r1, 1001fd42 +1001fd2c: f8d4 2500 ldr.w r2, [r4, #1280] ; 0x500 +1001fd30: b13a cbz r2, 1001fd42 +1001fd32: 4630 mov r0, r6 +1001fd34: f7f7 fb7c bl 10017430 +1001fd38: 696a ldr r2, [r5, #20] +1001fd3a: f8d4 3500 ldr.w r3, [r4, #1280] ; 0x500 +1001fd3e: 4413 add r3, r2 +1001fd40: 616b str r3, [r5, #20] +1001fd42: 696b ldr r3, [r5, #20] +1001fd44: f240 6252 movw r2, #1618 ; 0x652 +1001fd48: 61ab str r3, [r5, #24] +1001fd4a: 3328 adds r3, #40 ; 0x28 +1001fd4c: 4293 cmp r3, r2 +1001fd4e: d90a bls.n 1001fd66 +1001fd50: 4b0e ldr r3, [pc, #56] ; (1001fd8c ) +1001fd52: 681b ldr r3, [r3, #0] +1001fd54: b13b cbz r3, 1001fd66 +1001fd56: 480e ldr r0, [pc, #56] ; (1001fd90 ) +1001fd58: f7fa ff12 bl 1001ab80 +1001fd5c: 4b0d ldr r3, [pc, #52] ; (1001fd94 ) +1001fd5e: f8d3 0160 ldr.w r0, [r3, #352] ; 0x160 +1001fd62: f7fa ff0d bl 1001ab80 +1001fd66: 4620 mov r0, r4 +1001fd68: 4629 mov r1, r5 +1001fd6a: f7fe fdbe bl 1001e8ea +1001fd6e: e005 b.n 1001fd7c +1001fd70: 2a00 cmp r2, #0 +1001fd72: d0b5 beq.n 1001fce0 +1001fd74: 3202 adds r2, #2 +1001fd76: eb08 0002 add.w r0, r8, r2 +1001fd7a: e790 b.n 1001fc9e +1001fd7c: b006 add sp, #24 +1001fd7e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1001fd82: bf00 nop +1001fd84: 10041558 .word 0x10041558 +1001fd88: 10041742 .word 0x10041742 +1001fd8c: 10044f38 .word 0x10044f38 +1001fd90: 100429b1 .word 0x100429b1 +1001fd94: 10043ac4 .word 0x10043ac4 + +1001fd98 : +1001fd98: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1001fd9c: f600 1a58 addw sl, r0, #2392 ; 0x958 +1001fda0: b08f sub sp, #60 ; 0x3c +1001fda2: 4604 mov r4, r0 +1001fda4: f100 0998 add.w r9, r0, #152 ; 0x98 +1001fda8: f04f 0800 mov.w r8, #0 +1001fdac: 4650 mov r0, sl +1001fdae: f8cd 8014 str.w r8, [sp, #20] +1001fdb2: f7fe fd1b bl 1001e7ec +1001fdb6: 4605 mov r5, r0 +1001fdb8: 2800 cmp r0, #0 +1001fdba: f000 818f beq.w 100200dc +1001fdbe: 4620 mov r0, r4 +1001fdc0: f105 0108 add.w r1, r5, #8 +1001fdc4: f7fe fd31 bl 1001e82a +1001fdc8: 4641 mov r1, r8 +1001fdca: 2268 movs r2, #104 ; 0x68 +1001fdcc: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 +1001fdd0: f7f7 fb3e bl 10017450 +1001fdd4: f8d5 6080 ldr.w r6, [r5, #128] ; 0x80 +1001fdd8: 4648 mov r0, r9 +1001fdda: f886 8028 strb.w r8, [r6, #40] ; 0x28 +1001fdde: f886 8029 strb.w r8, [r6, #41] ; 0x29 +1001fde2: f008 fccd bl 10028780 +1001fde6: 2206 movs r2, #6 +1001fde8: 4601 mov r1, r0 +1001fdea: f106 002c add.w r0, r6, #44 ; 0x2c +1001fdee: f7f7 fb1f bl 10017430 +1001fdf2: f504 51a4 add.w r1, r4, #5248 ; 0x1480 +1001fdf6: f106 0032 add.w r0, r6, #50 ; 0x32 +1001fdfa: 3119 adds r1, #25 +1001fdfc: 2206 movs r2, #6 +1001fdfe: f7f7 fb17 bl 10017430 +1001fe02: 4648 mov r0, r9 +1001fe04: f008 fcbc bl 10028780 +1001fe08: 2206 movs r2, #6 +1001fe0a: 4601 mov r1, r0 +1001fe0c: f106 0038 add.w r0, r6, #56 ; 0x38 +1001fe10: f7f7 fb0e bl 10017430 +1001fe14: 8ff3 ldrh r3, [r6, #62] ; 0x3e +1001fe16: f8b4 251c ldrh.w r2, [r4, #1308] ; 0x51c +1001fe1a: f003 030f and.w r3, r3, #15 +1001fe1e: ea43 1302 orr.w r3, r3, r2, lsl #4 +1001fe22: 87f3 strh r3, [r6, #62] ; 0x3e +1001fe24: f8b4 351c ldrh.w r3, [r4, #1308] ; 0x51c +1001fe28: f504 708a add.w r0, r4, #276 ; 0x114 +1001fe2c: 3301 adds r3, #1 +1001fe2e: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c +1001fe32: 8d33 ldrh r3, [r6, #40] ; 0x28 +1001fe34: 462f mov r7, r5 +1001fe36: f023 03fc bic.w r3, r3, #252 ; 0xfc +1001fe3a: 8533 strh r3, [r6, #40] ; 0x28 +1001fe3c: 2318 movs r3, #24 +1001fe3e: 616b str r3, [r5, #20] +1001fe40: f7fd fbc6 bl 1001d5d0 +1001fe44: 2202 movs r2, #2 +1001fe46: 4601 mov r1, r0 +1001fe48: f106 0040 add.w r0, r6, #64 ; 0x40 +1001fe4c: f7f7 faf0 bl 10017430 +1001fe50: 696b ldr r3, [r5, #20] +1001fe52: a90e add r1, sp, #56 ; 0x38 +1001fe54: 3302 adds r3, #2 +1001fe56: 616b str r3, [r5, #20] +1001fe58: 2303 movs r3, #3 +1001fe5a: f821 3d2a strh.w r3, [r1, #-42]! +1001fe5e: f106 0042 add.w r0, r6, #66 ; 0x42 +1001fe62: 2202 movs r2, #2 +1001fe64: f7f7 fae4 bl 10017430 +1001fe68: 696b ldr r3, [r5, #20] +1001fe6a: 4641 mov r1, r8 +1001fe6c: 3302 adds r3, #2 +1001fe6e: f847 3f14 str.w r3, [r7, #20]! +1001fe72: f8d4 20a4 ldr.w r2, [r4, #164] ; 0xa4 +1001fe76: f104 03a8 add.w r3, r4, #168 ; 0xa8 +1001fe7a: f106 0044 add.w r0, r6, #68 ; 0x44 +1001fe7e: 9700 str r7, [sp, #0] +1001fe80: f01e fd46 bl 1003e910 <__rtw_set_ie_veneer> +1001fe84: f10d 0b28 add.w fp, sp, #40 ; 0x28 +1001fe88: 4680 mov r8, r0 +1001fe8a: 4659 mov r1, fp +1001fe8c: 4620 mov r0, r4 +1001fe8e: aa05 add r2, sp, #20 +1001fe90: f008 fb6c bl 1002856c +1001fe94: f894 351e ldrb.w r3, [r4, #1310] ; 0x51e +1001fe98: 2600 movs r6, #0 +1001fe9a: 2b0e cmp r3, #14 +1001fe9c: bf04 itt eq +1001fe9e: 2304 moveq r3, #4 +1001fea0: 9305 streq r3, [sp, #20] +1001fea2: 9805 ldr r0, [sp, #20] +1001fea4: 4633 mov r3, r6 +1001fea6: eb09 0203 add.w r2, r9, r3 +1001feaa: f892 1064 ldrb.w r1, [r2, #100] ; 0x64 +1001feae: b1a1 cbz r1, 1001feda +1001feb0: 2200 movs r2, #0 +1001feb2: 4282 cmp r2, r0 +1001feb4: d00e beq.n 1001fed4 +1001feb6: f81b e002 ldrb.w lr, [fp, r2] +1001feba: f041 0c80 orr.w ip, r1, #128 ; 0x80 +1001febe: f04e 0e80 orr.w lr, lr, #128 ; 0x80 +1001fec2: 45f4 cmp ip, lr +1001fec4: d001 beq.n 1001feca +1001fec6: 3201 adds r2, #1 +1001fec8: e7f3 b.n 1001feb2 +1001feca: aa0e add r2, sp, #56 ; 0x38 +1001fecc: 4432 add r2, r6 +1001fece: f802 1c20 strb.w r1, [r2, #-32] +1001fed2: 3601 adds r6, #1 +1001fed4: 3301 adds r3, #1 +1001fed6: 2b10 cmp r3, #16 +1001fed8: d1e5 bne.n 1001fea6 +1001feda: b94e cbnz r6, 1001fef0 +1001fedc: f8d5 1084 ldr.w r1, [r5, #132] ; 0x84 +1001fee0: 4650 mov r0, sl +1001fee2: f00a fcc6 bl 1002a872 +1001fee6: 4650 mov r0, sl +1001fee8: 4629 mov r1, r5 +1001feea: f009 fd61 bl 100299b0 +1001feee: e0f5 b.n 100200dc +1001fef0: 2e08 cmp r6, #8 +1001fef2: 9700 str r7, [sp, #0] +1001fef4: 4640 mov r0, r8 +1001fef6: f04f 0101 mov.w r1, #1 +1001fefa: dd09 ble.n 1001ff10 +1001fefc: 2208 movs r2, #8 +1001fefe: ab06 add r3, sp, #24 +1001ff00: f01e fd06 bl 1003e910 <__rtw_set_ie_veneer> +1001ff04: 9700 str r7, [sp, #0] +1001ff06: 2132 movs r1, #50 ; 0x32 +1001ff08: f1a6 0208 sub.w r2, r6, #8 +1001ff0c: ab08 add r3, sp, #32 +1001ff0e: e001 b.n 1001ff14 +1001ff10: 4632 mov r2, r6 +1001ff12: ab06 add r3, sp, #24 +1001ff14: f01e fcfc bl 1003e910 <__rtw_set_ie_veneer> +1001ff18: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001ff1c: f504 7890 add.w r8, r4, #288 ; 0x120 +1001ff20: 3b0c subs r3, #12 +1001ff22: 4606 mov r6, r0 +1001ff24: 2130 movs r1, #48 ; 0x30 +1001ff26: 4640 mov r0, r8 +1001ff28: aa04 add r2, sp, #16 +1001ff2a: f01e fc99 bl 1003e860 <__rtw_get_ie_veneer> +1001ff2e: 4603 mov r3, r0 +1001ff30: b138 cbz r0, 1001ff42 +1001ff32: 4630 mov r0, r6 +1001ff34: 9700 str r7, [sp, #0] +1001ff36: 2130 movs r1, #48 ; 0x30 +1001ff38: 9a04 ldr r2, [sp, #16] +1001ff3a: 3302 adds r3, #2 +1001ff3c: f01e fce8 bl 1003e910 <__rtw_set_ie_veneer> +1001ff40: 4606 mov r6, r0 +1001ff42: f8d4 3454 ldr.w r3, [r4, #1108] ; 0x454 +1001ff46: 2b01 cmp r3, #1 +1001ff48: d140 bne.n 1001ffcc +1001ff4a: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001ff4e: 4640 mov r0, r8 +1001ff50: 212d movs r1, #45 ; 0x2d +1001ff52: aa04 add r2, sp, #16 +1001ff54: 3b0c subs r3, #12 +1001ff56: f01e fc83 bl 1003e860 <__rtw_get_ie_veneer> +1001ff5a: 4682 mov sl, r0 +1001ff5c: b3b0 cbz r0, 1001ffcc +1001ff5e: 4620 mov r0, r4 +1001ff60: f008 ff3e bl 10028de0 +1001ff64: bb90 cbnz r0, 1001ffcc +1001ff66: f204 785a addw r8, r4, #1882 ; 0x75a +1001ff6a: 4640 mov r0, r8 +1001ff6c: f10a 0102 add.w r1, sl, #2 +1001ff70: 2220 movs r2, #32 +1001ff72: f7f7 fa5d bl 10017430 +1001ff76: f8b4 375a ldrh.w r3, [r4, #1882] ; 0x75a +1001ff7a: 4620 mov r0, r4 +1001ff7c: f023 0342 bic.w r3, r3, #66 ; 0x42 +1001ff80: f043 030c orr.w r3, r3, #12 +1001ff84: f8a4 375a strh.w r3, [r4, #1882] ; 0x75a +1001ff88: 2117 movs r1, #23 +1001ff8a: f10d 020d add.w r2, sp, #13 +1001ff8e: f012 fab7 bl 10032500 +1001ff92: f89d 300d ldrb.w r3, [sp, #13] +1001ff96: 2b03 cmp r3, #3 +1001ff98: d110 bne.n 1001ffbc +1001ff9a: f504 529c add.w r2, r4, #4992 ; 0x1380 +1001ff9e: f892 304e ldrb.w r3, [r2, #78] ; 0x4e +1001ffa2: b12b cbz r3, 1001ffb0 +1001ffa4: f8b4 375a ldrh.w r3, [r4, #1882] ; 0x75a +1001ffa8: f443 7380 orr.w r3, r3, #256 ; 0x100 +1001ffac: f8a4 375a strh.w r3, [r4, #1882] ; 0x75a +1001ffb0: f204 705d addw r0, r4, #1885 ; 0x75d +1001ffb4: 494b ldr r1, [pc, #300] ; (100200e4 ) +1001ffb6: 2210 movs r2, #16 +1001ffb8: f7f7 fa3a bl 10017430 +1001ffbc: 4630 mov r0, r6 +1001ffbe: 9700 str r7, [sp, #0] +1001ffc0: 212d movs r1, #45 ; 0x2d +1001ffc2: 9a04 ldr r2, [sp, #16] +1001ffc4: 4643 mov r3, r8 +1001ffc6: f01e fca3 bl 1003e910 <__rtw_set_ie_veneer> +1001ffca: 4606 mov r6, r0 +1001ffcc: f04f 0a0c mov.w sl, #12 +1001ffd0: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +1001ffd4: 459a cmp sl, r3 +1001ffd6: d23b bcs.n 10020050 +1001ffd8: f10a 0378 add.w r3, sl, #120 ; 0x78 +1001ffdc: 444b add r3, r9 +1001ffde: 791a ldrb r2, [r3, #4] +1001ffe0: f103 0b04 add.w fp, r3, #4 +1001ffe4: 2add cmp r2, #221 ; 0xdd +1001ffe6: d12e bne.n 10020046 +1001ffe8: f103 0806 add.w r8, r3, #6 +1001ffec: 4640 mov r0, r8 +1001ffee: 493e ldr r1, [pc, #248] ; (100200e8 ) +1001fff0: 2204 movs r2, #4 +1001fff2: f7f7 fa25 bl 10017440 +1001fff6: b148 cbz r0, 1002000c +1001fff8: 4640 mov r0, r8 +1001fffa: 493c ldr r1, [pc, #240] ; (100200ec ) +1001fffc: 2204 movs r2, #4 +1001fffe: f7f7 fa1f bl 10017440 +10020002: b1b8 cbz r0, 10020034 +10020004: 230e movs r3, #14 +10020006: f88b 3001 strb.w r3, [fp, #1] +1002000a: e013 b.n 10020034 +1002000c: 4640 mov r0, r8 +1002000e: 4938 ldr r1, [pc, #224] ; (100200f0 ) +10020010: 2204 movs r2, #4 +10020012: f7f7 fa15 bl 10017440 +10020016: 2800 cmp r0, #0 +10020018: d1ee bne.n 1001fff8 +1002001a: 4640 mov r0, r8 +1002001c: 4933 ldr r1, [pc, #204] ; (100200ec ) +1002001e: 2204 movs r2, #4 +10020020: f7f7 fa0e bl 10017440 +10020024: b178 cbz r0, 10020046 +10020026: f504 539c add.w r3, r4, #4992 ; 0x1380 +1002002a: 3305 adds r3, #5 +1002002c: 781b ldrb r3, [r3, #0] +1002002e: 2b00 cmp r3, #0 +10020030: d1e2 bne.n 1001fff8 +10020032: e008 b.n 10020046 +10020034: f89b 2001 ldrb.w r2, [fp, #1] +10020038: 4630 mov r0, r6 +1002003a: 9700 str r7, [sp, #0] +1002003c: 21dd movs r1, #221 ; 0xdd +1002003e: 4643 mov r3, r8 +10020040: f01e fc66 bl 1003e910 <__rtw_set_ie_veneer> +10020044: 4606 mov r6, r0 +10020046: f89b 3001 ldrb.w r3, [fp, #1] +1002004a: 3302 adds r3, #2 +1002004c: 449a add sl, r3 +1002004e: e7bf b.n 1001ffd0 +10020050: f894 372e ldrb.w r3, [r4, #1838] ; 0x72e +10020054: 2b01 cmp r3, #1 +10020056: d107 bne.n 10020068 +10020058: 4630 mov r0, r6 +1002005a: 9700 str r7, [sp, #0] +1002005c: 21dd movs r1, #221 ; 0xdd +1002005e: 2206 movs r2, #6 +10020060: 4b24 ldr r3, [pc, #144] ; (100200f4 ) +10020062: f01e fc55 bl 1003e910 <__rtw_set_ie_veneer> +10020066: 4606 mov r6, r0 +10020068: f241 3385 movw r3, #4997 ; 0x1385 +1002006c: 5ce3 ldrb r3, [r4, r3] +1002006e: b173 cbz r3, 1002008e +10020070: f8d4 14ac ldr.w r1, [r4, #1196] ; 0x4ac +10020074: b159 cbz r1, 1002008e +10020076: f8d4 24b0 ldr.w r2, [r4, #1200] ; 0x4b0 +1002007a: b142 cbz r2, 1002008e +1002007c: 4630 mov r0, r6 +1002007e: f7f7 f9d7 bl 10017430 +10020082: f8d4 34b0 ldr.w r3, [r4, #1200] ; 0x4b0 +10020086: 696a ldr r2, [r5, #20] +10020088: 441e add r6, r3 +1002008a: 4413 add r3, r2 +1002008c: 616b str r3, [r5, #20] +1002008e: 6863 ldr r3, [r4, #4] +10020090: 2b05 cmp r3, #5 +10020092: d10d bne.n 100200b0 +10020094: f8d4 14e8 ldr.w r1, [r4, #1256] ; 0x4e8 +10020098: b151 cbz r1, 100200b0 +1002009a: f8d4 24fc ldr.w r2, [r4, #1276] ; 0x4fc +1002009e: b13a cbz r2, 100200b0 +100200a0: 4630 mov r0, r6 +100200a2: f7f7 f9c5 bl 10017430 +100200a6: 696a ldr r2, [r5, #20] +100200a8: f8d4 34fc ldr.w r3, [r4, #1276] ; 0x4fc +100200ac: 4413 add r3, r2 +100200ae: 616b str r3, [r5, #20] +100200b0: 696b ldr r3, [r5, #20] +100200b2: f240 6252 movw r2, #1618 ; 0x652 +100200b6: 61ab str r3, [r5, #24] +100200b8: 3328 adds r3, #40 ; 0x28 +100200ba: 4293 cmp r3, r2 +100200bc: d90a bls.n 100200d4 +100200be: 4b0e ldr r3, [pc, #56] ; (100200f8 ) +100200c0: 681b ldr r3, [r3, #0] +100200c2: b13b cbz r3, 100200d4 +100200c4: 480d ldr r0, [pc, #52] ; (100200fc ) +100200c6: f7fa fd5b bl 1001ab80 +100200ca: 4b0d ldr r3, [pc, #52] ; (10020100 ) +100200cc: f8d3 0164 ldr.w r0, [r3, #356] ; 0x164 +100200d0: f7fa fd56 bl 1001ab80 +100200d4: 4620 mov r0, r4 +100200d6: 4629 mov r1, r5 +100200d8: f7fe fc07 bl 1001e8ea +100200dc: b00f add sp, #60 ; 0x3c +100200de: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +100200e2: bf00 nop +100200e4: 100414c7 .word 0x100414c7 +100200e8: 10041554 .word 0x10041554 +100200ec: 100414b9 .word 0x100414b9 +100200f0: 10041579 .word 0x10041579 +100200f4: 10041742 .word 0x10041742 +100200f8: 10044f38 .word 0x10044f38 +100200fc: 100429b1 .word 0x100429b1 +10020100: 10043ac4 .word 0x10043ac4 + +10020104 : +10020104: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10020108: 468a mov sl, r1 +1002010a: 4605 mov r5, r0 +1002010c: 2800 cmp r0, #0 +1002010e: d06c beq.n 100201ea +10020110: f100 0898 add.w r8, r0, #152 ; 0x98 +10020114: f600 1058 addw r0, r0, #2392 ; 0x958 +10020118: f7fe fb68 bl 1001e7ec +1002011c: 4606 mov r6, r0 +1002011e: 2800 cmp r0, #0 +10020120: d063 beq.n 100201ea +10020122: 2700 movs r7, #0 +10020124: 4628 mov r0, r5 +10020126: f106 0108 add.w r1, r6, #8 +1002012a: f7fe fb7e bl 1001e82a +1002012e: f886 706c strb.w r7, [r6, #108] ; 0x6c +10020132: f8d6 0080 ldr.w r0, [r6, #128] ; 0x80 +10020136: 4639 mov r1, r7 +10020138: 2268 movs r2, #104 ; 0x68 +1002013a: f7f7 f989 bl 10017450 +1002013e: f8d5 3680 ldr.w r3, [r5, #1664] ; 0x680 +10020142: f8d6 4080 ldr.w r4, [r6, #128] ; 0x80 +10020146: f003 0303 and.w r3, r3, #3 +1002014a: 2b03 cmp r3, #3 +1002014c: f104 0928 add.w r9, r4, #40 ; 0x28 +10020150: f884 7028 strb.w r7, [r4, #40] ; 0x28 +10020154: f884 7029 strb.w r7, [r4, #41] ; 0x29 +10020158: d101 bne.n 1002015e +1002015a: 2302 movs r3, #2 +1002015c: e004 b.n 10020168 +1002015e: 2b02 cmp r3, #2 +10020160: d104 bne.n 1002016c +10020162: f884 7028 strb.w r7, [r4, #40] ; 0x28 +10020166: 2301 movs r3, #1 +10020168: f884 3029 strb.w r3, [r4, #41] ; 0x29 +1002016c: f1ba 0f00 cmp.w sl, #0 +10020170: d003 beq.n 1002017a +10020172: 8d23 ldrh r3, [r4, #40] ; 0x28 +10020174: f443 5380 orr.w r3, r3, #4096 ; 0x1000 +10020178: 8523 strh r3, [r4, #40] ; 0x28 +1002017a: 4640 mov r0, r8 +1002017c: f008 fb00 bl 10028780 +10020180: 2206 movs r2, #6 +10020182: 4601 mov r1, r0 +10020184: f104 002c add.w r0, r4, #44 ; 0x2c +10020188: f7f7 f952 bl 10017430 +1002018c: f505 51a4 add.w r1, r5, #5248 ; 0x1480 +10020190: f104 0032 add.w r0, r4, #50 ; 0x32 +10020194: 3119 adds r1, #25 +10020196: 2206 movs r2, #6 +10020198: f7f7 f94a bl 10017430 +1002019c: 4640 mov r0, r8 +1002019e: f008 faef bl 10028780 +100201a2: 2206 movs r2, #6 +100201a4: 4601 mov r1, r0 +100201a6: f104 0038 add.w r0, r4, #56 ; 0x38 +100201aa: f7f7 f941 bl 10017430 +100201ae: f8b9 3016 ldrh.w r3, [r9, #22] +100201b2: f8b5 251c ldrh.w r2, [r5, #1308] ; 0x51c +100201b6: f003 030f and.w r3, r3, #15 +100201ba: ea43 1302 orr.w r3, r3, r2, lsl #4 +100201be: f8a9 3016 strh.w r3, [r9, #22] +100201c2: f8b5 351c ldrh.w r3, [r5, #1308] ; 0x51c +100201c6: 4628 mov r0, r5 +100201c8: 3301 adds r3, #1 +100201ca: f8a5 351c strh.w r3, [r5, #1308] ; 0x51c +100201ce: 8d23 ldrh r3, [r4, #40] ; 0x28 +100201d0: 4631 mov r1, r6 +100201d2: f023 03fc bic.w r3, r3, #252 ; 0xfc +100201d6: f043 0348 orr.w r3, r3, #72 ; 0x48 +100201da: 8523 strh r3, [r4, #40] ; 0x28 +100201dc: 2318 movs r3, #24 +100201de: 6173 str r3, [r6, #20] +100201e0: 61b3 str r3, [r6, #24] +100201e2: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +100201e6: f7fe bb80 b.w 1001e8ea +100201ea: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + +100201ee : +100201ee: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +100201f2: 4606 mov r6, r0 +100201f4: f500 6546 add.w r5, r0, #3168 ; 0xc60 +100201f8: f100 0a98 add.w sl, r0, #152 ; 0x98 +100201fc: f600 1058 addw r0, r0, #2392 ; 0x958 +10020200: 4689 mov r9, r1 +10020202: 4693 mov fp, r2 +10020204: f7fe faf2 bl 1001e7ec +10020208: 4604 mov r4, r0 +1002020a: 2800 cmp r0, #0 +1002020c: f000 8097 beq.w 1002033e +10020210: 4628 mov r0, r5 +10020212: 4649 mov r1, r9 +10020214: f008 f84e bl 100282b4 +10020218: f104 0108 add.w r1, r4, #8 +1002021c: 4605 mov r5, r0 +1002021e: 4630 mov r0, r6 +10020220: f7fe fb03 bl 1001e82a +10020224: 8a63 ldrh r3, [r4, #18] +10020226: 2700 movs r7, #0 +10020228: 3302 adds r3, #2 +1002022a: 8263 strh r3, [r4, #18] +1002022c: 2301 movs r3, #1 +1002022e: f884 305e strb.w r3, [r4, #94] ; 0x5e +10020232: f884 3069 strb.w r3, [r4, #105] ; 0x69 +10020236: f884 7042 strb.w r7, [r4, #66] ; 0x42 +1002023a: f884 7065 strb.w r7, [r4, #101] ; 0x65 +1002023e: f8d5 2100 ldr.w r2, [r5, #256] ; 0x100 +10020242: f104 0057 add.w r0, r4, #87 ; 0x57 +10020246: f884 2043 strb.w r2, [r4, #67] ; 0x43 +1002024a: 6725 str r5, [r4, #112] ; 0x70 +1002024c: 4649 mov r1, r9 +1002024e: 2206 movs r2, #6 +10020250: 9301 str r3, [sp, #4] +10020252: f7f7 f8ed bl 10017430 +10020256: 2268 movs r2, #104 ; 0x68 +10020258: f8d4 0080 ldr.w r0, [r4, #128] ; 0x80 +1002025c: 4639 mov r1, r7 +1002025e: f7f7 f8f7 bl 10017450 +10020262: f8d6 2680 ldr.w r2, [r6, #1664] ; 0x680 +10020266: f8d4 5080 ldr.w r5, [r4, #128] ; 0x80 +1002026a: f002 0203 and.w r2, r2, #3 +1002026e: 2a03 cmp r2, #3 +10020270: f105 0828 add.w r8, r5, #40 ; 0x28 +10020274: f885 7028 strb.w r7, [r5, #40] ; 0x28 +10020278: f885 7029 strb.w r7, [r5, #41] ; 0x29 +1002027c: 9b01 ldr r3, [sp, #4] +1002027e: d101 bne.n 10020284 +10020280: 2302 movs r3, #2 +10020282: e003 b.n 1002028c +10020284: 2a02 cmp r2, #2 +10020286: d103 bne.n 10020290 +10020288: f885 7028 strb.w r7, [r5, #40] ; 0x28 +1002028c: f885 3029 strb.w r3, [r5, #41] ; 0x29 +10020290: f894 3065 ldrb.w r3, [r4, #101] ; 0x65 +10020294: b11b cbz r3, 1002029e +10020296: 8d2b ldrh r3, [r5, #40] ; 0x28 +10020298: f443 5300 orr.w r3, r3, #8192 ; 0x2000 +1002029c: 852b strh r3, [r5, #40] ; 0x28 +1002029e: 8a63 ldrh r3, [r4, #18] +100202a0: f00b 0b0f and.w fp, fp, #15 +100202a4: 3b02 subs r3, #2 +100202a6: f838 2003 ldrh.w r2, [r8, r3] +100202aa: f105 002c add.w r0, r5, #44 ; 0x2c +100202ae: ea4b 0b02 orr.w fp, fp, r2 +100202b2: f828 b003 strh.w fp, [r8, r3] +100202b6: f894 2069 ldrb.w r2, [r4, #105] ; 0x69 +100202ba: 4649 mov r1, r9 +100202bc: f002 0201 and.w r2, r2, #1 +100202c0: ea4b 1b02 orr.w fp, fp, r2, lsl #4 +100202c4: f828 b003 strh.w fp, [r8, r3] +100202c8: f894 2042 ldrb.w r2, [r4, #66] ; 0x42 +100202cc: f002 0203 and.w r2, r2, #3 +100202d0: ea4b 1b42 orr.w fp, fp, r2, lsl #5 +100202d4: f828 b003 strh.w fp, [r8, r3] +100202d8: 2206 movs r2, #6 +100202da: f7f7 f8a9 bl 10017430 +100202de: f506 51a4 add.w r1, r6, #5248 ; 0x1480 +100202e2: f105 0032 add.w r0, r5, #50 ; 0x32 +100202e6: 3119 adds r1, #25 +100202e8: 2206 movs r2, #6 +100202ea: f7f7 f8a1 bl 10017430 +100202ee: 4650 mov r0, sl +100202f0: f008 fa46 bl 10028780 +100202f4: 2206 movs r2, #6 +100202f6: 4601 mov r1, r0 +100202f8: f105 0038 add.w r0, r5, #56 ; 0x38 +100202fc: f7f7 f898 bl 10017430 +10020300: f8b8 3016 ldrh.w r3, [r8, #22] +10020304: f8b6 251c ldrh.w r2, [r6, #1308] ; 0x51c +10020308: f003 030f and.w r3, r3, #15 +1002030c: ea43 1302 orr.w r3, r3, r2, lsl #4 +10020310: f8a8 3016 strh.w r3, [r8, #22] +10020314: f8b6 351c ldrh.w r3, [r6, #1308] ; 0x51c +10020318: 4630 mov r0, r6 +1002031a: 3301 adds r3, #1 +1002031c: f8a6 351c strh.w r3, [r6, #1308] ; 0x51c +10020320: 8d2b ldrh r3, [r5, #40] ; 0x28 +10020322: 4621 mov r1, r4 +10020324: f023 03fc bic.w r3, r3, #252 ; 0xfc +10020328: f043 03c8 orr.w r3, r3, #200 ; 0xc8 +1002032c: 852b strh r3, [r5, #40] ; 0x28 +1002032e: 231a movs r3, #26 +10020330: 6163 str r3, [r4, #20] +10020332: 61a3 str r3, [r4, #24] +10020334: b003 add sp, #12 +10020336: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002033a: f00a b8b7 b.w 1002a4ac +1002033e: b003 add sp, #12 +10020340: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +10020344 : +10020344: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +10020348: 4606 mov r6, r0 +1002034a: f100 0898 add.w r8, r0, #152 ; 0x98 +1002034e: f600 1058 addw r0, r0, #2392 ; 0x958 +10020352: 4689 mov r9, r1 +10020354: 9201 str r2, [sp, #4] +10020356: f7fe fa49 bl 1001e7ec +1002035a: 4605 mov r5, r0 +1002035c: 2800 cmp r0, #0 +1002035e: d061 beq.n 10020424 +10020360: 2700 movs r7, #0 +10020362: 4630 mov r0, r6 +10020364: f105 0108 add.w r1, r5, #8 +10020368: f7fe fa5f bl 1001e82a +1002036c: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 +10020370: 4639 mov r1, r7 +10020372: 2268 movs r2, #104 ; 0x68 +10020374: f885 706c strb.w r7, [r5, #108] ; 0x6c +10020378: f7f7 f86a bl 10017450 +1002037c: f8d5 4080 ldr.w r4, [r5, #128] ; 0x80 +10020380: 4649 mov r1, r9 +10020382: f104 002c add.w r0, r4, #44 ; 0x2c +10020386: 2206 movs r2, #6 +10020388: f884 7028 strb.w r7, [r4, #40] ; 0x28 +1002038c: f884 7029 strb.w r7, [r4, #41] ; 0x29 +10020390: f7f7 f84e bl 10017430 +10020394: f506 51a4 add.w r1, r6, #5248 ; 0x1480 +10020398: 3119 adds r1, #25 +1002039a: 2206 movs r2, #6 +1002039c: f104 0032 add.w r0, r4, #50 ; 0x32 +100203a0: f7f7 f846 bl 10017430 +100203a4: 4640 mov r0, r8 +100203a6: f008 f9eb bl 10028780 +100203aa: 2206 movs r2, #6 +100203ac: 4601 mov r1, r0 +100203ae: f104 0038 add.w r0, r4, #56 ; 0x38 +100203b2: f7f7 f83d bl 10017430 +100203b6: 8fe3 ldrh r3, [r4, #62] ; 0x3e +100203b8: f8b6 251c ldrh.w r2, [r6, #1308] ; 0x51c +100203bc: f003 030f and.w r3, r3, #15 +100203c0: ea43 1302 orr.w r3, r3, r2, lsl #4 +100203c4: 87e3 strh r3, [r4, #62] ; 0x3e +100203c6: f8b6 351c ldrh.w r3, [r6, #1308] ; 0x51c +100203ca: f8bd 1004 ldrh.w r1, [sp, #4] +100203ce: 3301 adds r3, #1 +100203d0: f8a6 351c strh.w r3, [r6, #1308] ; 0x51c +100203d4: 8d23 ldrh r3, [r4, #40] ; 0x28 +100203d6: 2218 movs r2, #24 +100203d8: f023 03fc bic.w r3, r3, #252 ; 0xfc +100203dc: f043 03c0 orr.w r3, r3, #192 ; 0xc0 +100203e0: 8523 strh r3, [r4, #40] ; 0x28 +100203e2: 462b mov r3, r5 +100203e4: f843 2f14 str.w r2, [r3, #20]! +100203e8: aa02 add r2, sp, #8 +100203ea: f842 1d04 str.w r1, [r2, #-4]! +100203ee: f104 0040 add.w r0, r4, #64 ; 0x40 +100203f2: 2102 movs r1, #2 +100203f4: f01e fac0 bl 1003e978 <__rtw_set_fixed_ie_veneer> +100203f8: 696b ldr r3, [r5, #20] +100203fa: f240 6252 movw r2, #1618 ; 0x652 +100203fe: 61ab str r3, [r5, #24] +10020400: 3328 adds r3, #40 ; 0x28 +10020402: 4293 cmp r3, r2 +10020404: d90a bls.n 1002041c +10020406: 4b09 ldr r3, [pc, #36] ; (1002042c ) +10020408: 681b ldr r3, [r3, #0] +1002040a: b13b cbz r3, 1002041c +1002040c: 4808 ldr r0, [pc, #32] ; (10020430 ) +1002040e: f7fa fbb7 bl 1001ab80 +10020412: 4b08 ldr r3, [pc, #32] ; (10020434 ) +10020414: f8d3 0170 ldr.w r0, [r3, #368] ; 0x170 +10020418: f7fa fbb2 bl 1001ab80 +1002041c: 4630 mov r0, r6 +1002041e: 4629 mov r1, r5 +10020420: f7fe fa63 bl 1001e8ea +10020424: b003 add sp, #12 +10020426: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +1002042a: bf00 nop +1002042c: 10044f38 .word 0x10044f38 +10020430: 100429b1 .word 0x100429b1 +10020434: 10043ac4 .word 0x10043ac4 + +10020438 : +10020438: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +1002043c: b087 sub sp, #28 +1002043e: f8ad 3004 strh.w r3, [sp, #4] +10020442: 4604 mov r4, r0 +10020444: 2303 movs r3, #3 +10020446: f600 1058 addw r0, r0, #2392 ; 0x958 +1002044a: 4689 mov r9, r1 +1002044c: f88d 2007 strb.w r2, [sp, #7] +10020450: f88d 3009 strb.w r3, [sp, #9] +10020454: f7fe f9ca bl 1001e7ec +10020458: 4607 mov r7, r0 +1002045a: 2800 cmp r0, #0 +1002045c: f000 8126 beq.w 100206ac +10020460: 4620 mov r0, r4 +10020462: f107 0108 add.w r1, r7, #8 +10020466: f7fe f9e0 bl 1001e82a +1002046a: f8d7 0080 ldr.w r0, [r7, #128] ; 0x80 +1002046e: 2100 movs r1, #0 +10020470: 2268 movs r2, #104 ; 0x68 +10020472: f7f6 ffed bl 10017450 +10020476: f8d7 6080 ldr.w r6, [r7, #128] ; 0x80 +1002047a: 2300 movs r3, #0 +1002047c: f886 3028 strb.w r3, [r6, #40] ; 0x28 +10020480: f886 3029 strb.w r3, [r6, #41] ; 0x29 +10020484: f106 002c add.w r0, r6, #44 ; 0x2c +10020488: 4649 mov r1, r9 +1002048a: 2206 movs r2, #6 +1002048c: f7f6 ffd0 bl 10017430 +10020490: f504 51a4 add.w r1, r4, #5248 ; 0x1480 +10020494: 3119 adds r1, #25 +10020496: 2206 movs r2, #6 +10020498: f106 0032 add.w r0, r6, #50 ; 0x32 +1002049c: f7f6 ffc8 bl 10017430 +100204a0: f104 0098 add.w r0, r4, #152 ; 0x98 +100204a4: f008 f96c bl 10028780 +100204a8: 2206 movs r2, #6 +100204aa: 4601 mov r1, r0 +100204ac: f106 0038 add.w r0, r6, #56 ; 0x38 +100204b0: f7f6 ffbe bl 10017430 +100204b4: 8ff3 ldrh r3, [r6, #62] ; 0x3e +100204b6: f8b4 251c ldrh.w r2, [r4, #1308] ; 0x51c +100204ba: f003 030f and.w r3, r3, #15 +100204be: ea43 1302 orr.w r3, r3, r2, lsl #4 +100204c2: 87f3 strh r3, [r6, #62] ; 0x3e +100204c4: f8b4 351c ldrh.w r3, [r4, #1308] ; 0x51c +100204c8: 463d mov r5, r7 +100204ca: 3301 adds r3, #1 +100204cc: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c +100204d0: 8d33 ldrh r3, [r6, #40] ; 0x28 +100204d2: 2101 movs r1, #1 +100204d4: f023 03fc bic.w r3, r3, #252 ; 0xfc +100204d8: f043 03d0 orr.w r3, r3, #208 ; 0xd0 +100204dc: 8533 strh r3, [r6, #40] ; 0x28 +100204de: 2318 movs r3, #24 +100204e0: f845 3f14 str.w r3, [r5, #20]! +100204e4: f10d 0209 add.w r2, sp, #9 +100204e8: 462b mov r3, r5 +100204ea: f106 0040 add.w r0, r6, #64 ; 0x40 +100204ee: f01e fa43 bl 1003e978 <__rtw_set_fixed_ie_veneer> +100204f2: 2101 movs r1, #1 +100204f4: f10d 0207 add.w r2, sp, #7 +100204f8: 462b mov r3, r5 +100204fa: f01e fa3d bl 1003e978 <__rtw_set_fixed_ie_veneer> +100204fe: f89d 1009 ldrb.w r1, [sp, #9] +10020502: 4602 mov r2, r0 +10020504: 2903 cmp r1, #3 +10020506: f8bd 3004 ldrh.w r3, [sp, #4] +1002050a: f040 80b1 bne.w 10020670 +1002050e: f89d 8007 ldrb.w r8, [sp, #7] +10020512: f1b8 0f01 cmp.w r8, #1 +10020516: d057 beq.n 100205c8 +10020518: d312 bcc.n 10020540 +1002051a: f1b8 0f02 cmp.w r8, #2 +1002051e: f040 80a7 bne.w 10020670 +10020522: 00db lsls r3, r3, #3 +10020524: aa06 add r2, sp, #24 +10020526: b2db uxtb r3, r3 +10020528: f822 3d0e strh.w r3, [r2, #-14]! +1002052c: 4641 mov r1, r8 +1002052e: 462b mov r3, r5 +10020530: f01e fa22 bl 1003e978 <__rtw_set_fixed_ie_veneer> +10020534: aa06 add r2, sp, #24 +10020536: 2325 movs r3, #37 ; 0x25 +10020538: f822 3d0c strh.w r3, [r2, #-12]! +1002053c: 4641 mov r1, r8 +1002053e: e094 b.n 1002066a +10020540: f894 373e ldrb.w r3, [r4, #1854] ; 0x73e +10020544: 3301 adds r3, #1 +10020546: f013 03ff ands.w r3, r3, #255 ; 0xff +1002054a: d0fb beq.n 10020544 +1002054c: f884 373e strb.w r3, [r4, #1854] ; 0x73e +10020550: 4610 mov r0, r2 +10020552: 2101 movs r1, #1 +10020554: f204 723e addw r2, r4, #1854 ; 0x73e +10020558: 462b mov r3, r5 +1002055a: f01e fa0d bl 1003e978 <__rtw_set_fixed_ie_veneer> +1002055e: f8bd 3004 ldrh.w r3, [sp, #4] +10020562: aa06 add r2, sp, #24 +10020564: f003 030f and.w r3, r3, #15 +10020568: 009b lsls r3, r3, #2 +1002056a: f443 5380 orr.w r3, r3, #4096 ; 0x1000 +1002056e: f043 0302 orr.w r3, r3, #2 +10020572: f822 3d0e strh.w r3, [r2, #-14]! +10020576: 2102 movs r1, #2 +10020578: 462b mov r3, r5 +1002057a: f01e f9fd bl 1003e978 <__rtw_set_fixed_ie_veneer> +1002057e: aa06 add r2, sp, #24 +10020580: f241 3388 movw r3, #5000 ; 0x1388 +10020584: f822 3d0a strh.w r3, [r2, #-10]! +10020588: 2102 movs r1, #2 +1002058a: 462b mov r3, r5 +1002058c: f01e f9f4 bl 1003e978 <__rtw_set_fixed_ie_veneer> +10020590: 4649 mov r1, r9 +10020592: 4680 mov r8, r0 +10020594: f504 6046 add.w r0, r4, #3168 ; 0xc60 +10020598: f007 fe8c bl 100282b4 +1002059c: b178 cbz r0, 100205be +1002059e: f8bd 2004 ldrh.w r2, [sp, #4] +100205a2: f002 0207 and.w r2, r2, #7 +100205a6: eb00 0242 add.w r2, r0, r2, lsl #1 +100205aa: f8b2 3094 ldrh.w r3, [r2, #148] ; 0x94 +100205ae: f3c3 030b ubfx r3, r3, #0, #12 +100205b2: 3301 adds r3, #1 +100205b4: f8a2 31d4 strh.w r3, [r2, #468] ; 0x1d4 +100205b8: 011b lsls r3, r3, #4 +100205ba: f8ad 3012 strh.w r3, [sp, #18] +100205be: 4640 mov r0, r8 +100205c0: 2102 movs r1, #2 +100205c2: f10d 0212 add.w r2, sp, #18 +100205c6: e050 b.n 1002066a +100205c8: 4641 mov r1, r8 +100205ca: f204 7241 addw r2, r4, #1857 ; 0x741 +100205ce: 462b mov r3, r5 +100205d0: f01e f9d2 bl 1003e978 <__rtw_set_fixed_ie_veneer> +100205d4: 462b mov r3, r5 +100205d6: 2102 movs r1, #2 +100205d8: aa01 add r2, sp, #4 +100205da: f01e f9cd bl 1003e978 <__rtw_set_fixed_ie_veneer> +100205de: aa05 add r2, sp, #20 +100205e0: 4680 mov r8, r0 +100205e2: 210d movs r1, #13 +100205e4: 4620 mov r0, r4 +100205e6: f011 ff9b bl 10032520 +100205ea: 9a05 ldr r2, [sp, #20] +100205ec: f8b4 3742 ldrh.w r3, [r4, #1858] ; 0x742 +100205f0: 2a03 cmp r2, #3 +100205f2: d104 bne.n 100205fe +100205f4: f003 033f and.w r3, r3, #63 ; 0x3f +100205f8: f443 5380 orr.w r3, r3, #4096 ; 0x1000 +100205fc: e013 b.n 10020626 +100205fe: 2a02 cmp r2, #2 +10020600: d104 bne.n 1002060c +10020602: f003 033f and.w r3, r3, #63 ; 0x3f +10020606: f443 6300 orr.w r3, r3, #2048 ; 0x800 +1002060a: e00c b.n 10020626 +1002060c: 2a01 cmp r2, #1 +1002060e: d104 bne.n 1002061a +10020610: f003 033f and.w r3, r3, #63 ; 0x3f +10020614: f443 6380 orr.w r3, r3, #1024 ; 0x400 +10020618: e005 b.n 10020626 +1002061a: 2a00 cmp r2, #0 +1002061c: d1ea bne.n 100205f4 +1002061e: f003 033f and.w r3, r3, #63 ; 0x3f +10020622: f443 7300 orr.w r3, r3, #512 ; 0x200 +10020626: f8ad 300a strh.w r3, [sp, #10] +1002062a: f504 539c add.w r3, r4, #4992 ; 0x1380 +1002062e: 3308 adds r3, #8 +10020630: f893 3047 ldrb.w r3, [r3, #71] ; 0x47 +10020634: b923 cbnz r3, 10020640 +10020636: f8bd 300a ldrh.w r3, [sp, #10] +1002063a: f023 0301 bic.w r3, r3, #1 +1002063e: e005 b.n 1002064c +10020640: 2b01 cmp r3, #1 +10020642: d105 bne.n 10020650 +10020644: f8bd 300a ldrh.w r3, [sp, #10] +10020648: f043 0301 orr.w r3, r3, #1 +1002064c: f8ad 300a strh.w r3, [sp, #10] +10020650: 2102 movs r1, #2 +10020652: f10d 020a add.w r2, sp, #10 +10020656: 462b mov r3, r5 +10020658: 4640 mov r0, r8 +1002065a: f01e f98d bl 1003e978 <__rtw_set_fixed_ie_veneer> +1002065e: f8b4 3744 ldrh.w r3, [r4, #1860] ; 0x744 +10020662: aa06 add r2, sp, #24 +10020664: f822 3d08 strh.w r3, [r2, #-8]! +10020668: 2102 movs r1, #2 +1002066a: 462b mov r3, r5 +1002066c: f01e f984 bl 1003e978 <__rtw_set_fixed_ie_veneer> +10020670: 697b ldr r3, [r7, #20] +10020672: f240 6252 movw r2, #1618 ; 0x652 +10020676: 61bb str r3, [r7, #24] +10020678: 3328 adds r3, #40 ; 0x28 +1002067a: 4293 cmp r3, r2 +1002067c: d90a bls.n 10020694 +1002067e: 4b0d ldr r3, [pc, #52] ; (100206b4 ) +10020680: 681b ldr r3, [r3, #0] +10020682: b13b cbz r3, 10020694 +10020684: 480c ldr r0, [pc, #48] ; (100206b8 ) +10020686: f7fa fa7b bl 1001ab80 +1002068a: 4b0c ldr r3, [pc, #48] ; (100206bc ) +1002068c: f8d3 0174 ldr.w r0, [r3, #372] ; 0x174 +10020690: f7fa fa76 bl 1001ab80 +10020694: f241 4318 movw r3, #5144 ; 0x1418 +10020698: 5ce3 ldrb r3, [r4, r3] +1002069a: b11b cbz r3, 100206a4 +1002069c: 8d33 ldrh r3, [r6, #40] ; 0x28 +1002069e: f443 5380 orr.w r3, r3, #4096 ; 0x1000 +100206a2: 8533 strh r3, [r6, #40] ; 0x28 +100206a4: 4620 mov r0, r4 +100206a6: 4639 mov r1, r7 +100206a8: f7fe f91f bl 1001e8ea +100206ac: b007 add sp, #28 +100206ae: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +100206b2: bf00 nop +100206b4: 10044f38 .word 0x10044f38 +100206b8: 100429b1 .word 0x100429b1 +100206bc: 10043ac4 .word 0x10043ac4 + +100206c0 : +100206c0: b570 push {r4, r5, r6, lr} +100206c2: 6f8c ldr r4, [r1, #120] ; 0x78 +100206c4: 4605 mov r5, r0 +100206c6: f500 50a4 add.w r0, r0, #5248 ; 0x1480 +100206ca: 3019 adds r0, #25 +100206cc: 1d21 adds r1, r4, #4 +100206ce: 2206 movs r2, #6 +100206d0: f7f6 feb6 bl 10017440 +100206d4: 2800 cmp r0, #0 +100206d6: d058 beq.n 1002078a +100206d8: f8d5 3680 ldr.w r3, [r5, #1664] ; 0x680 +100206dc: f003 0203 and.w r2, r3, #3 +100206e0: 2a03 cmp r2, #3 +100206e2: d001 beq.n 100206e8 +100206e4: 0458 lsls r0, r3, #17 +100206e6: d550 bpl.n 1002078a +100206e8: f104 060a add.w r6, r4, #10 +100206ec: f505 6046 add.w r0, r5, #3168 ; 0xc60 +100206f0: 4631 mov r1, r6 +100206f2: f007 fddf bl 100282b4 +100206f6: 4603 mov r3, r0 +100206f8: 2800 cmp r0, #0 +100206fa: d046 beq.n 1002078a +100206fc: 7e22 ldrb r2, [r4, #24] +100206fe: 2a03 cmp r2, #3 +10020700: d143 bne.n 1002078a +10020702: f895 2734 ldrb.w r2, [r5, #1844] ; 0x734 +10020706: 2a00 cmp r2, #0 +10020708: d03f beq.n 1002078a +1002070a: 7e60 ldrb r0, [r4, #25] +1002070c: 2801 cmp r0, #1 +1002070e: d011 beq.n 10020734 +10020710: d302 bcc.n 10020718 +10020712: 2802 cmp r0, #2 +10020714: d023 beq.n 1002075e +10020716: e038 b.n 1002078a +10020718: f205 7041 addw r0, r5, #1857 ; 0x741 +1002071c: f104 011a add.w r1, r4, #26 +10020720: 2207 movs r2, #7 +10020722: f7f6 fe85 bl 10017430 +10020726: 4628 mov r0, r5 +10020728: 4631 mov r1, r6 +1002072a: 2201 movs r2, #1 +1002072c: 2325 movs r3, #37 ; 0x25 +1002072e: f7ff fe83 bl 10020438 +10020732: e02a b.n 1002078a +10020734: 7ee1 ldrb r1, [r4, #27] +10020736: 7f62 ldrb r2, [r4, #29] +10020738: 7f25 ldrb r5, [r4, #28] +1002073a: f3c2 0282 ubfx r2, r2, #2, #3 +1002073e: ea51 2105 orrs.w r1, r1, r5, lsl #8 +10020742: fa00 f202 lsl.w r2, r0, r2 +10020746: f893 11ff ldrb.w r1, [r3, #511] ; 0x1ff +1002074a: d103 bne.n 10020754 +1002074c: 4311 orrs r1, r2 +1002074e: f883 11ff strb.w r1, [r3, #511] ; 0x1ff +10020752: e014 b.n 1002077e +10020754: ea21 0202 bic.w r2, r1, r2 +10020758: f883 21ff strb.w r2, [r3, #511] ; 0x1ff +1002075c: e015 b.n 1002078a +1002075e: 7ee2 ldrb r2, [r4, #27] +10020760: 0711 lsls r1, r2, #28 +10020762: d412 bmi.n 1002078a +10020764: 0911 lsrs r1, r2, #4 +10020766: 2201 movs r2, #1 +10020768: fa02 f101 lsl.w r1, r2, r1 +1002076c: f893 01ff ldrb.w r0, [r3, #511] ; 0x1ff +10020770: ea20 0101 bic.w r1, r0, r1 +10020774: f883 11ff strb.w r1, [r3, #511] ; 0x1ff +10020778: 7ee1 ldrb r1, [r4, #27] +1002077a: 0909 lsrs r1, r1, #4 +1002077c: 408a lsls r2, r1 +1002077e: f893 1200 ldrb.w r1, [r3, #512] ; 0x200 +10020782: ea21 0202 bic.w r2, r1, r2 +10020786: f883 2200 strb.w r2, [r3, #512] ; 0x200 +1002078a: 2001 movs r0, #1 +1002078c: bd70 pop {r4, r5, r6, pc} + +1002078e : +1002078e: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10020792: 6f0b ldr r3, [r1, #112] ; 0x70 +10020794: 4680 mov r8, r0 +10020796: 3b18 subs r3, #24 +10020798: f5b3 7f40 cmp.w r3, #768 ; 0x300 +1002079c: 460d mov r5, r1 +1002079e: 4614 mov r4, r2 +100207a0: f8d1 9078 ldr.w r9, [r1, #120] ; 0x78 +100207a4: 9301 str r3, [sp, #4] +100207a6: d901 bls.n 100207ac +100207a8: 2000 movs r0, #0 +100207aa: e111 b.n 100209d0 +100207ac: 4610 mov r0, r2 +100207ae: 2100 movs r1, #0 +100207b0: f44f 725f mov.w r2, #892 ; 0x37c +100207b4: f7f6 fe4c bl 10017450 +100207b8: f8b9 3000 ldrh.w r3, [r9] +100207bc: ae02 add r6, sp, #8 +100207be: f003 03fc and.w r3, r3, #252 ; 0xfc +100207c2: 2b80 cmp r3, #128 ; 0x80 +100207c4: f856 2d04 ldr.w r2, [r6, #-4]! +100207c8: bf0c ite eq +100207ca: 2301 moveq r3, #1 +100207cc: 2300 movne r3, #0 +100207ce: 72a3 strb r3, [r4, #10] +100207d0: f104 0a7c add.w sl, r4, #124 ; 0x7c +100207d4: f102 037c add.w r3, r2, #124 ; 0x7c +100207d8: 6023 str r3, [r4, #0] +100207da: 67a2 str r2, [r4, #120] ; 0x78 +100207dc: 4650 mov r0, sl +100207de: f109 0118 add.w r1, r9, #24 +100207e2: f7f6 fe25 bl 10017430 +100207e6: f995 306c ldrsb.w r3, [r5, #108] ; 0x6c +100207ea: f104 0788 add.w r7, r4, #136 ; 0x88 +100207ee: 63a3 str r3, [r4, #56] ; 0x38 +100207f0: f895 306a ldrb.w r3, [r5, #106] ; 0x6a +100207f4: 4638 mov r0, r7 +100207f6: f884 3075 strb.w r3, [r4, #117] ; 0x75 +100207fa: f895 306d ldrb.w r3, [r5, #109] ; 0x6d +100207fe: 2100 movs r1, #0 +10020800: f884 3074 strb.w r3, [r4, #116] ; 0x74 +10020804: 6fa3 ldr r3, [r4, #120] ; 0x78 +10020806: 4632 mov r2, r6 +10020808: 3b0c subs r3, #12 +1002080a: f01e f829 bl 1003e860 <__rtw_get_ie_veneer> +1002080e: 4605 mov r5, r0 +10020810: 2800 cmp r0, #0 +10020812: d0c9 beq.n 100207a8 +10020814: 7842 ldrb r2, [r0, #1] +10020816: b152 cbz r2, 1002082e +10020818: 9b01 ldr r3, [sp, #4] +1002081a: 2b20 cmp r3, #32 +1002081c: d8c4 bhi.n 100207a8 +1002081e: f104 0010 add.w r0, r4, #16 +10020822: 1ca9 adds r1, r5, #2 +10020824: f7f6 fe04 bl 10017430 +10020828: 786b ldrb r3, [r5, #1] +1002082a: 60e3 str r3, [r4, #12] +1002082c: e003 b.n 10020836 +1002082e: 7322 strb r2, [r4, #12] +10020830: 7362 strb r2, [r4, #13] +10020832: 73a2 strb r2, [r4, #14] +10020834: 73e2 strb r2, [r4, #15] +10020836: f104 0b64 add.w fp, r4, #100 ; 0x64 +1002083a: 4658 mov r0, fp +1002083c: 2100 movs r1, #0 +1002083e: 2210 movs r2, #16 +10020840: f7f6 fe06 bl 10017450 +10020844: 6fa3 ldr r3, [r4, #120] ; 0x78 +10020846: 2101 movs r1, #1 +10020848: 4638 mov r0, r7 +1002084a: 4632 mov r2, r6 +1002084c: 3b0c subs r3, #12 +1002084e: f01e f807 bl 1003e860 <__rtw_get_ie_veneer> +10020852: 4601 mov r1, r0 +10020854: b140 cbz r0, 10020868 +10020856: 9a01 ldr r2, [sp, #4] +10020858: 2a08 cmp r2, #8 +1002085a: d8a5 bhi.n 100207a8 +1002085c: 4658 mov r0, fp +1002085e: 3102 adds r1, #2 +10020860: f7f6 fde6 bl 10017430 +10020864: 9d01 ldr r5, [sp, #4] +10020866: e000 b.n 1002086a +10020868: 4605 mov r5, r0 +1002086a: 6fa3 ldr r3, [r4, #120] ; 0x78 +1002086c: 2132 movs r1, #50 ; 0x32 +1002086e: 4638 mov r0, r7 +10020870: 4632 mov r2, r6 +10020872: 3b0c subs r3, #12 +10020874: f01d fff4 bl 1003e860 <__rtw_get_ie_veneer> +10020878: 4601 mov r1, r0 +1002087a: b148 cbz r0, 10020890 +1002087c: 9a01 ldr r2, [sp, #4] +1002087e: f1c5 0310 rsb r3, r5, #16 +10020882: 429a cmp r2, r3 +10020884: d890 bhi.n 100207a8 +10020886: 1960 adds r0, r4, r5 +10020888: 3064 adds r0, #100 ; 0x64 +1002088a: 3102 adds r1, #2 +1002088c: f7f6 fdd0 bl 10017430 +10020890: 6fa3 ldr r3, [r4, #120] ; 0x78 +10020892: 2500 movs r5, #0 +10020894: 2103 movs r1, #3 +10020896: f884 103c strb.w r1, [r4, #60] ; 0x3c +1002089a: f884 503d strb.w r5, [r4, #61] ; 0x3d +1002089e: f884 503e strb.w r5, [r4, #62] ; 0x3e +100208a2: f884 503f strb.w r5, [r4, #63] ; 0x3f +100208a6: 4638 mov r0, r7 +100208a8: 4632 mov r2, r6 +100208aa: 3b0c subs r3, #12 +100208ac: f01d ffd8 bl 1003e860 <__rtw_get_ie_veneer> +100208b0: f884 504c strb.w r5, [r4, #76] ; 0x4c +100208b4: f884 504d strb.w r5, [r4, #77] ; 0x4d +100208b8: f884 504e strb.w r5, [r4, #78] ; 0x4e +100208bc: f884 504f strb.w r5, [r4, #79] ; 0x4f +100208c0: f884 5040 strb.w r5, [r4, #64] ; 0x40 +100208c4: f884 5041 strb.w r5, [r4, #65] ; 0x41 +100208c8: f884 5042 strb.w r5, [r4, #66] ; 0x42 +100208cc: f884 5043 strb.w r5, [r4, #67] ; 0x43 +100208d0: b938 cbnz r0, 100208e2 +100208d2: 6fa3 ldr r3, [r4, #120] ; 0x78 +100208d4: 4638 mov r0, r7 +100208d6: 213d movs r1, #61 ; 0x3d +100208d8: 4632 mov r2, r6 +100208da: 3b0c subs r3, #12 +100208dc: f01d ffc0 bl 1003e860 <__rtw_get_ie_veneer> +100208e0: b108 cbz r0, 100208e6 +100208e2: 7883 ldrb r3, [r0, #2] +100208e4: e00d b.n 10020902 +100208e6: f8d8 3648 ldr.w r3, [r8, #1608] ; 0x648 +100208ea: 2b03 cmp r3, #3 +100208ec: d107 bne.n 100208fe +100208ee: f8d8 3650 ldr.w r3, [r8, #1616] ; 0x650 +100208f2: 220c movs r2, #12 +100208f4: fb02 8303 mla r3, r2, r3, r8 +100208f8: f893 3524 ldrb.w r3, [r3, #1316] ; 0x524 +100208fc: e001 b.n 10020902 +100208fe: f898 351e ldrb.w r3, [r8, #1310] ; 0x51e +10020902: 64e3 str r3, [r4, #76] ; 0x4c +10020904: 4650 mov r0, sl +10020906: f7fc fe72 bl 1001d5ee +1002090a: 2202 movs r2, #2 +1002090c: 4601 mov r1, r0 +1002090e: f104 0044 add.w r0, r4, #68 ; 0x44 +10020912: f7f6 fd8d bl 10017430 +10020916: 4620 mov r0, r4 +10020918: f7fc fe5c bl 1001d5d4 +1002091c: f010 0301 ands.w r3, r0, #1 +10020920: 4605 mov r5, r0 +10020922: f104 0004 add.w r0, r4, #4 +10020926: d00c beq.n 10020942 +10020928: 2300 movs r3, #0 +1002092a: 2201 movs r2, #1 +1002092c: f884 2060 strb.w r2, [r4, #96] ; 0x60 +10020930: f884 3061 strb.w r3, [r4, #97] ; 0x61 +10020934: f884 3062 strb.w r3, [r4, #98] ; 0x62 +10020938: f884 3063 strb.w r3, [r4, #99] ; 0x63 +1002093c: f109 010a add.w r1, r9, #10 +10020940: e009 b.n 10020956 +10020942: f884 3060 strb.w r3, [r4, #96] ; 0x60 +10020946: f884 3061 strb.w r3, [r4, #97] ; 0x61 +1002094a: f884 3062 strb.w r3, [r4, #98] ; 0x62 +1002094e: f884 3063 strb.w r3, [r4, #99] ; 0x63 +10020952: f109 0110 add.w r1, r9, #16 +10020956: 2206 movs r2, #6 +10020958: f7f6 fd6a bl 10017430 +1002095c: f005 0010 and.w r0, r5, #16 +10020960: b280 uxth r0, r0 +10020962: b150 cbz r0, 1002097a +10020964: 2300 movs r3, #0 +10020966: 2201 movs r2, #1 +10020968: f884 2034 strb.w r2, [r4, #52] ; 0x34 +1002096c: f884 3035 strb.w r3, [r4, #53] ; 0x35 +10020970: f884 3036 strb.w r3, [r4, #54] ; 0x36 +10020974: f884 3037 strb.w r3, [r4, #55] ; 0x37 +10020978: e007 b.n 1002098a +1002097a: f884 0034 strb.w r0, [r4, #52] ; 0x34 +1002097e: f884 0035 strb.w r0, [r4, #53] ; 0x35 +10020982: f884 0036 strb.w r0, [r4, #54] ; 0x36 +10020986: f884 0037 strb.w r0, [r4, #55] ; 0x37 +1002098a: 2300 movs r3, #0 +1002098c: f884 3048 strb.w r3, [r4, #72] ; 0x48 +10020990: f884 3049 strb.w r3, [r4, #73] ; 0x49 +10020994: f884 304a strb.w r3, [r4, #74] ; 0x4a +10020998: f884 304b strb.w r3, [r4, #75] ; 0x4b +1002099c: f8d8 3650 ldr.w r3, [r8, #1616] ; 0x650 +100209a0: 210c movs r1, #12 +100209a2: fb01 8303 mla r3, r1, r3, r8 +100209a6: 6ce2 ldr r2, [r4, #76] ; 0x4c +100209a8: f893 3524 ldrb.w r3, [r3, #1316] ; 0x524 +100209ac: 6fa1 ldr r1, [r4, #120] ; 0x78 +100209ae: 429a cmp r2, r3 +100209b0: bf18 it ne +100209b2: 2365 movne r3, #101 ; 0x65 +100209b4: f04f 0200 mov.w r2, #0 +100209b8: bf18 it ne +100209ba: f884 3075 strbne.w r3, [r4, #117] ; 0x75 +100209be: 4638 mov r0, r7 +100209c0: 4613 mov r3, r2 +100209c2: 390c subs r1, #12 +100209c4: f016 fea4 bl 10037710 +100209c8: 2301 movs r3, #1 +100209ca: b100 cbz r0, 100209ce +100209cc: 72e3 strb r3, [r4, #11] +100209ce: 4618 mov r0, r3 +100209d0: b003 add sp, #12 +100209d2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + ... + +100209d8 : +100209d8: b530 push {r4, r5, lr} +100209da: f600 053c addw r5, r0, #2108 ; 0x83c +100209de: 4604 mov r4, r0 +100209e0: b085 sub sp, #20 +100209e2: 4628 mov r0, r5 +100209e4: f016 fa2a bl 10036e3c +100209e8: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +100209ec: 4620 mov r0, r4 +100209ee: f423 7380 bic.w r3, r3, #256 ; 0x100 +100209f2: f443 7300 orr.w r3, r3, #512 ; 0x200 +100209f6: f8c4 3680 str.w r3, [r4, #1664] ; 0x680 +100209fa: 2301 movs r3, #1 +100209fc: f8c4 3690 str.w r3, [r4, #1680] ; 0x690 +10020a00: 2300 movs r3, #0 +10020a02: f8c4 3684 str.w r3, [r4, #1668] ; 0x684 +10020a06: f8c4 3688 str.w r3, [r4, #1672] ; 0x688 +10020a0a: f8c4 368c str.w r3, [r4, #1676] ; 0x68c +10020a0e: f104 019c add.w r1, r4, #156 ; 0x9c +10020a12: 2203 movs r2, #3 +10020a14: f7ff fc96 bl 10020344 +10020a18: 4b13 ldr r3, [pc, #76] ; (10020a68 ) +10020a1a: 681b ldr r3, [r3, #0] +10020a1c: b1b3 cbz r3, 10020a4c +10020a1e: 4813 ldr r0, [pc, #76] ; (10020a6c ) +10020a20: f7fa f8ae bl 1001ab80 +10020a24: f894 009f ldrb.w r0, [r4, #159] ; 0x9f +10020a28: f894 109c ldrb.w r1, [r4, #156] ; 0x9c +10020a2c: 9000 str r0, [sp, #0] +10020a2e: f894 00a0 ldrb.w r0, [r4, #160] ; 0xa0 +10020a32: f894 209d ldrb.w r2, [r4, #157] ; 0x9d +10020a36: 9001 str r0, [sp, #4] +10020a38: f894 00a1 ldrb.w r0, [r4, #161] ; 0xa1 +10020a3c: f894 309e ldrb.w r3, [r4, #158] ; 0x9e +10020a40: 9002 str r0, [sp, #8] +10020a42: 480b ldr r0, [pc, #44] ; (10020a70 ) +10020a44: f8d0 017c ldr.w r0, [r0, #380] ; 0x17c +10020a48: f7fa f89a bl 1001ab80 +10020a4c: 2100 movs r1, #0 +10020a4e: 4620 mov r0, r4 +10020a50: 460a mov r2, r1 +10020a52: f7fe fdb7 bl 1001f5c4 +10020a56: 4628 mov r0, r5 +10020a58: f44f 7196 mov.w r1, #300 ; 0x12c +10020a5c: b005 add sp, #20 +10020a5e: e8bd 4030 ldmia.w sp!, {r4, r5, lr} +10020a62: f016 b9e9 b.w 10036e38 +10020a66: bf00 nop +10020a68: 10044f38 .word 0x10044f38 +10020a6c: 100429b1 .word 0x100429b1 +10020a70: 10043ac4 .word 0x10043ac4 + +10020a74 : +10020a74: b538 push {r3, r4, r5, lr} +10020a76: f600 053c addw r5, r0, #2108 ; 0x83c +10020a7a: 4604 mov r4, r0 +10020a7c: 4628 mov r0, r5 +10020a7e: f016 f9dd bl 10036e3c +10020a82: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +10020a86: 4620 mov r0, r4 +10020a88: f423 7340 bic.w r3, r3, #768 ; 0x300 +10020a8c: f443 5310 orr.w r3, r3, #9216 ; 0x2400 +10020a90: f8c4 3680 str.w r3, [r4, #1664] ; 0x680 +10020a94: f7ff f980 bl 1001fd98 +10020a98: 4628 mov r0, r5 +10020a9a: f44f 7196 mov.w r1, #300 ; 0x12c +10020a9e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10020aa2: f016 b9c9 b.w 10036e38 + ... + +10020aa8 : +10020aa8: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +10020aac: 6f8d ldr r5, [r1, #120] ; 0x78 +10020aae: 4604 mov r4, r0 +10020ab0: 4628 mov r0, r5 +10020ab2: f8d1 8070 ldr.w r8, [r1, #112] ; 0x70 +10020ab6: f7fd fd78 bl 1001e5aa +10020aba: 4601 mov r1, r0 +10020abc: f504 50a4 add.w r0, r4, #5248 ; 0x1480 +10020ac0: 3019 adds r0, #25 +10020ac2: 2206 movs r2, #6 +10020ac4: f7f6 fcbc bl 10017440 +10020ac8: 2800 cmp r0, #0 +10020aca: d058 beq.n 10020b7e +10020acc: f8d4 2680 ldr.w r2, [r4, #1664] ; 0x680 +10020ad0: 0593 lsls r3, r2, #22 +10020ad2: d554 bpl.n 10020b7e +10020ad4: 882b ldrh r3, [r5, #0] +10020ad6: f413 4f80 tst.w r3, #16384 ; 0x4000 +10020ada: bf0c ite eq +10020adc: 2100 moveq r1, #0 +10020ade: 2104 movne r1, #4 +10020ae0: 4429 add r1, r5 +10020ae2: 8b8e ldrh r6, [r1, #28] +10020ae4: 8b4a ldrh r2, [r1, #26] +10020ae6: b17e cbz r6, 10020b08 +10020ae8: 2e0d cmp r6, #13 +10020aea: d107 bne.n 10020afc +10020aec: f8d4 3694 ldr.w r3, [r4, #1684] ; 0x694 +10020af0: 2b01 cmp r3, #1 +10020af2: bf0c ite eq +10020af4: 2300 moveq r3, #0 +10020af6: 2301 movne r3, #1 +10020af8: f8c4 3694 str.w r3, [r4, #1684] ; 0x694 +10020afc: f604 003c addw r0, r4, #2108 ; 0x83c +10020b00: 2101 movs r1, #1 +10020b02: f016 f999 bl 10036e38 +10020b06: e00f b.n 10020b28 +10020b08: 2a02 cmp r2, #2 +10020b0a: d124 bne.n 10020b56 +10020b0c: f8d4 7694 ldr.w r7, [r4, #1684] ; 0x694 +10020b10: 2f01 cmp r7, #1 +10020b12: d126 bne.n 10020b62 +10020b14: 2110 movs r1, #16 +10020b16: f105 001e add.w r0, r5, #30 +10020b1a: aa01 add r2, sp, #4 +10020b1c: f1a8 031e sub.w r3, r8, #30 +10020b20: f01d fe9e bl 1003e860 <__rtw_get_ie_veneer> +10020b24: 4601 mov r1, r0 +10020b26: b908 cbnz r0, 10020b2c +10020b28: 2000 movs r0, #0 +10020b2a: e029 b.n 10020b80 +10020b2c: f504 60d5 add.w r0, r4, #1704 ; 0x6a8 +10020b30: 9a01 ldr r2, [sp, #4] +10020b32: 3102 adds r1, #2 +10020b34: f7f6 fc7c bl 10017430 +10020b38: 2303 movs r3, #3 +10020b3a: 4620 mov r0, r4 +10020b3c: 4631 mov r1, r6 +10020b3e: f8c4 3690 str.w r3, [r4, #1680] ; 0x690 +10020b42: 4632 mov r2, r6 +10020b44: f7fe fd3e bl 1001f5c4 +10020b48: f604 003c addw r0, r4, #2108 ; 0x83c +10020b4c: f44f 7196 mov.w r1, #300 ; 0x12c +10020b50: f016 f972 bl 10036e38 +10020b54: e013 b.n 10020b7e +10020b56: 2a04 cmp r2, #4 +10020b58: d1e6 bne.n 10020b28 +10020b5a: f8d4 3694 ldr.w r3, [r4, #1684] ; 0x694 +10020b5e: 2b01 cmp r3, #1 +10020b60: d1e2 bne.n 10020b28 +10020b62: 4b09 ldr r3, [pc, #36] ; (10020b88 ) +10020b64: 681b ldr r3, [r3, #0] +10020b66: b13b cbz r3, 10020b78 +10020b68: 4808 ldr r0, [pc, #32] ; (10020b8c ) +10020b6a: f7fa f809 bl 1001ab80 +10020b6e: 4b08 ldr r3, [pc, #32] ; (10020b90 ) +10020b70: f8d3 0134 ldr.w r0, [r3, #308] ; 0x134 +10020b74: f7fa f804 bl 1001ab80 +10020b78: 4620 mov r0, r4 +10020b7a: f7ff ff7b bl 10020a74 +10020b7e: 2001 movs r0, #1 +10020b80: b002 add sp, #8 +10020b82: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10020b86: bf00 nop +10020b88: 10044f38 .word 0x10044f38 +10020b8c: 100429b1 .word 0x100429b1 +10020b90: 10043ac4 .word 0x10043ac4 + +10020b94 : +10020b94: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10020b98: f5ad 7d19 sub.w sp, sp, #612 ; 0x264 +10020b9c: 2600 movs r6, #0 +10020b9e: ac08 add r4, sp, #32 +10020ba0: f10d 0810 add.w r8, sp, #16 +10020ba4: ab05 add r3, sp, #20 +10020ba6: 9405 str r4, [sp, #20] +10020ba8: f8a8 6000 strh.w r6, [r8] +10020bac: f8ad 6012 strh.w r6, [sp, #18] +10020bb0: f8d1 a034 ldr.w sl, [r1, #52] ; 0x34 +10020bb4: 6403 str r3, [r0, #64] ; 0x40 +10020bb6: 233e movs r3, #62 ; 0x3e +10020bb8: 6443 str r3, [r0, #68] ; 0x44 +10020bba: f8b0 3048 ldrh.w r3, [r0, #72] ; 0x48 +10020bbe: 4607 mov r7, r0 +10020bc0: 3301 adds r3, #1 +10020bc2: f8a0 3048 strh.w r3, [r0, #72] ; 0x48 +10020bc6: 460d mov r5, r1 +10020bc8: f200 5024 addw r0, r0, #1316 ; 0x524 +10020bcc: 6cc9 ldr r1, [r1, #76] ; 0x4c +10020bce: 4632 mov r2, r6 +10020bd0: fa5f fa8a uxtb.w sl, sl +10020bd4: f7fd fd2c bl 1001e630 +10020bd8: 2800 cmp r0, #0 +10020bda: f000 80c1 beq.w 10020d60 +10020bde: f10d 0042 add.w r0, sp, #66 ; 0x42 +10020be2: 1d29 adds r1, r5, #4 +10020be4: 2206 movs r2, #6 +10020be6: f7f6 fc23 bl 10017430 +10020bea: 6bab ldr r3, [r5, #56] ; 0x38 +10020bec: f105 0988 add.w r9, r5, #136 ; 0x88 +10020bf0: 8523 strh r3, [r4, #40] ; 0x28 +10020bf2: f1ba 0f00 cmp.w sl, #0 +10020bf6: d104 bne.n 10020c02 +10020bf8: f8a4 a02e strh.w sl, [r4, #46] ; 0x2e +10020bfc: f8a4 a030 strh.w sl, [r4, #48] ; 0x30 +10020c00: e052 b.n 10020ca8 +10020c02: 6fa9 ldr r1, [r5, #120] ; 0x78 +10020c04: e88d 0140 stmia.w sp, {r6, r8} +10020c08: f105 007c add.w r0, r5, #124 ; 0x7c +10020c0c: 4632 mov r2, r6 +10020c0e: f10d 0312 add.w r3, sp, #18 +10020c12: f01d fea5 bl 1003e960 <__rtw_get_sec_ie_veneer> +10020c16: 2800 cmp r0, #0 +10020c18: dd43 ble.n 10020ca2 +10020c1a: f8b8 b000 ldrh.w fp, [r8] +10020c1e: 9606 str r6, [sp, #24] +10020c20: 9607 str r6, [sp, #28] +10020c22: f8bd a012 ldrh.w sl, [sp, #18] +10020c26: f1bb 0f00 cmp.w fp, #0 +10020c2a: d01b beq.n 10020c64 +10020c2c: f1ba 0f00 cmp.w sl, #0 +10020c30: d002 beq.n 10020c38 +10020c32: 85e6 strh r6, [r4, #46] ; 0x2e +10020c34: 2360 movs r3, #96 ; 0x60 +10020c36: e030 b.n 10020c9a +10020c38: 6faa ldr r2, [r5, #120] ; 0x78 +10020c3a: 4648 mov r0, r9 +10020c3c: a918 add r1, sp, #96 ; 0x60 +10020c3e: 3a0c subs r2, #12 +10020c40: f01d fe42 bl 1003e8c8 <__rtw_get_wpa_ie_veneer> +10020c44: b148 cbz r0, 10020c5a +10020c46: 9b18 ldr r3, [sp, #96] ; 0x60 +10020c48: b13b cbz r3, 10020c5a +10020c4a: f8b8 1000 ldrh.w r1, [r8] +10020c4e: aa06 add r2, sp, #24 +10020c50: f8cd a000 str.w sl, [sp] +10020c54: ab07 add r3, sp, #28 +10020c56: f01d fe5f bl 1003e918 <__rtw_parse_wpa_ie_veneer> +10020c5a: 9b06 ldr r3, [sp, #24] +10020c5c: 2b08 cmp r3, #8 +10020c5e: f04f 0320 mov.w r3, #32 +10020c62: e017 b.n 10020c94 +10020c64: f1ba 0f00 cmp.w sl, #0 +10020c68: d01e beq.n 10020ca8 +10020c6a: 6faa ldr r2, [r5, #120] ; 0x78 +10020c6c: 4648 mov r0, r9 +10020c6e: a918 add r1, sp, #96 ; 0x60 +10020c70: 3a0c subs r2, #12 +10020c72: f01d fe11 bl 1003e898 <__rtw_get_wpa2_ie_veneer> +10020c76: b148 cbz r0, 10020c8c +10020c78: 9b18 ldr r3, [sp, #96] ; 0x60 +10020c7a: b13b cbz r3, 10020c8c +10020c7c: f8bd 1012 ldrh.w r1, [sp, #18] +10020c80: f8cd b000 str.w fp, [sp] +10020c84: aa06 add r2, sp, #24 +10020c86: ab07 add r3, sp, #28 +10020c88: f01d fe26 bl 1003e8d8 <__rtw_parse_wpa2_ie_veneer> +10020c8c: 9b06 ldr r3, [sp, #24] +10020c8e: 2b08 cmp r3, #8 +10020c90: f04f 0340 mov.w r3, #64 ; 0x40 +10020c94: d103 bne.n 10020c9e +10020c96: 2202 movs r2, #2 +10020c98: 85e2 strh r2, [r4, #46] ; 0x2e +10020c9a: 8623 strh r3, [r4, #48] ; 0x30 +10020c9c: e004 b.n 10020ca8 +10020c9e: 2204 movs r2, #4 +10020ca0: e7fa b.n 10020c98 +10020ca2: 2301 movs r3, #1 +10020ca4: 85e3 strh r3, [r4, #46] ; 0x2e +10020ca6: 8626 strh r6, [r4, #48] ; 0x30 +10020ca8: a818 add r0, sp, #96 ; 0x60 +10020caa: 2100 movs r1, #0 +10020cac: f44f 7200 mov.w r2, #512 ; 0x200 +10020cb0: f7f6 fbce bl 10017450 +10020cb4: 4648 mov r0, r9 +10020cb6: 6fa9 ldr r1, [r5, #120] ; 0x78 +10020cb8: aa18 add r2, sp, #96 ; 0x60 +10020cba: ab07 add r3, sp, #28 +10020cbc: f01d fe00 bl 1003e8c0 <__rtw_get_wps_ie_veneer> +10020cc0: b918 cbnz r0, 10020cca +10020cc2: 2306 movs r3, #6 +10020cc4: 8663 strh r3, [r4, #50] ; 0x32 +10020cc6: 86a0 strh r0, [r4, #52] ; 0x34 +10020cc8: e03a b.n 10020d40 +10020cca: f89d 9061 ldrb.w r9, [sp, #97] ; 0x61 +10020cce: ab18 add r3, sp, #96 ; 0x60 +10020cd0: 4499 add r9, r3 +10020cd2: f64f 7aff movw sl, #65535 ; 0xffff +10020cd6: f04f 0800 mov.w r8, #0 +10020cda: f10d 0666 add.w r6, sp, #102 ; 0x66 +10020cde: 454e cmp r6, r9 +10020ce0: d203 bcs.n 10020cea +10020ce2: ebc6 0309 rsb r3, r6, r9 +10020ce6: 2b03 cmp r3, #3 +10020ce8: dc07 bgt.n 10020cfa +10020cea: f1b8 0f01 cmp.w r8, #1 +10020cee: d123 bne.n 10020d38 +10020cf0: fa5f fa8a uxtb.w sl, sl +10020cf4: f8c4 a032 str.w sl, [r4, #50] ; 0x32 +10020cf8: e022 b.n 10020d40 +10020cfa: 8830 ldrh r0, [r6, #0] +10020cfc: f7f6 fb52 bl 100173a4 <_htons> +10020d00: 4683 mov fp, r0 +10020d02: 8870 ldrh r0, [r6, #2] +10020d04: f7f6 fb4e bl 100173a4 <_htons> +10020d08: f241 0141 movw r1, #4161 ; 0x1041 +10020d0c: 458b cmp fp, r1 +10020d0e: 4603 mov r3, r0 +10020d10: f106 0204 add.w r2, r6, #4 +10020d14: d102 bne.n 10020d1c +10020d16: f896 8004 ldrb.w r8, [r6, #4] +10020d1a: e00b b.n 10020d34 +10020d1c: f241 0112 movw r1, #4114 ; 0x1012 +10020d20: 458b cmp fp, r1 +10020d22: d107 bne.n 10020d34 +10020d24: 88b0 ldrh r0, [r6, #4] +10020d26: 9202 str r2, [sp, #8] +10020d28: 9303 str r3, [sp, #12] +10020d2a: f7f6 fb3b bl 100173a4 <_htons> +10020d2e: 9b03 ldr r3, [sp, #12] +10020d30: 9a02 ldr r2, [sp, #8] +10020d32: 4682 mov sl, r0 +10020d34: 18d6 adds r6, r2, r3 +10020d36: e7d2 b.n 10020cde +10020d38: 2307 movs r3, #7 +10020d3a: 8663 strh r3, [r4, #50] ; 0x32 +10020d3c: 2300 movs r3, #0 +10020d3e: 86a3 strh r3, [r4, #52] ; 0x34 +10020d40: 68ea ldr r2, [r5, #12] +10020d42: f10d 0021 add.w r0, sp, #33 ; 0x21 +10020d46: f105 0110 add.w r1, r5, #16 +10020d4a: 7022 strb r2, [r4, #0] +10020d4c: f7f6 fb70 bl 10017430 +10020d50: 6ceb ldr r3, [r5, #76] ; 0x4c +10020d52: 4638 mov r0, r7 +10020d54: f8c4 3036 str.w r3, [r4, #54] ; 0x36 +10020d58: f012 ff2d bl 10033bb6 +10020d5c: 2000 movs r0, #0 +10020d5e: e001 b.n 10020d64 +10020d60: f04f 30ff mov.w r0, #4294967295 +10020d64: f50d 7d19 add.w sp, sp, #612 ; 0x264 +10020d68: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +10020d6c : +10020d6c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10020d70: 460c mov r4, r1 +10020d72: 6b62 ldr r2, [r4, #52] ; 0x34 +10020d74: 6c41 ldr r1, [r0, #68] ; 0x44 +10020d76: f5ad 7d0b sub.w sp, sp, #556 ; 0x22c +10020d7a: f04f 0900 mov.w r9, #0 +10020d7e: 9004 str r0, [sp, #16] +10020d80: 6c06 ldr r6, [r0, #64] ; 0x40 +10020d82: 9106 str r1, [sp, #24] +10020d84: 9207 str r2, [sp, #28] +10020d86: a80a add r0, sp, #40 ; 0x28 +10020d88: 4649 mov r1, r9 +10020d8a: f44f 7200 mov.w r2, #512 ; 0x200 +10020d8e: f8ad 9020 strh.w r9, [sp, #32] +10020d92: f8ad 9022 strh.w r9, [sp, #34] ; 0x22 +10020d96: f7f6 fb5b bl 10017450 +10020d9a: 6fa1 ldr r1, [r4, #120] ; 0x78 +10020d9c: f104 0088 add.w r0, r4, #136 ; 0x88 +10020da0: 390c subs r1, #12 +10020da2: aa0a add r2, sp, #40 ; 0x28 +10020da4: ab09 add r3, sp, #36 ; 0x24 +10020da6: f01d fd8b bl 1003e8c0 <__rtw_get_wps_ie_veneer> +10020daa: b948 cbnz r0, 10020dc0 +10020dac: 23ff movs r3, #255 ; 0xff +10020dae: 7333 strb r3, [r6, #12] +10020db0: f64f 73ff movw r3, #65535 ; 0xffff +10020db4: 4607 mov r7, r0 +10020db6: 9305 str r3, [sp, #20] +10020db8: 4681 mov r9, r0 +10020dba: 4680 mov r8, r0 +10020dbc: 4683 mov fp, r0 +10020dbe: e037 b.n 10020e30 +10020dc0: f89d 5029 ldrb.w r5, [sp, #41] ; 0x29 +10020dc4: a90a add r1, sp, #40 ; 0x28 +10020dc6: f64f 72ff movw r2, #65535 ; 0xffff +10020dca: 440d add r5, r1 +10020dcc: 9205 str r2, [sp, #20] +10020dce: f10d 072e add.w r7, sp, #46 ; 0x2e +10020dd2: 46c8 mov r8, r9 +10020dd4: 46cb mov fp, r9 +10020dd6: 42af cmp r7, r5 +10020dd8: d229 bcs.n 10020e2e +10020dda: 1beb subs r3, r5, r7 +10020ddc: 2b03 cmp r3, #3 +10020dde: dd26 ble.n 10020e2e +10020de0: 8838 ldrh r0, [r7, #0] +10020de2: f7f6 fadf bl 100173a4 <_htons> +10020de6: 4682 mov sl, r0 +10020de8: 8878 ldrh r0, [r7, #2] +10020dea: f7f6 fadb bl 100173a4 <_htons> +10020dee: f241 0141 movw r1, #4161 ; 0x1041 +10020df2: 458a cmp sl, r1 +10020df4: 4603 mov r3, r0 +10020df6: f107 0204 add.w r2, r7, #4 +10020dfa: d102 bne.n 10020e02 +10020dfc: f897 9004 ldrb.w r9, [r7, #4] +10020e00: e013 b.n 10020e2a +10020e02: f241 0112 movw r1, #4114 ; 0x1012 +10020e06: 458a cmp sl, r1 +10020e08: d108 bne.n 10020e1c +10020e0a: 88b8 ldrh r0, [r7, #4] +10020e0c: 9203 str r2, [sp, #12] +10020e0e: 9302 str r3, [sp, #8] +10020e10: f7f6 fac8 bl 100173a4 <_htons> +10020e14: 9a03 ldr r2, [sp, #12] +10020e16: 9005 str r0, [sp, #20] +10020e18: 9b02 ldr r3, [sp, #8] +10020e1a: e006 b.n 10020e2a +10020e1c: f241 0111 movw r1, #4113 ; 0x1011 +10020e20: 458a cmp sl, r1 +10020e22: bf08 it eq +10020e24: 4680 moveq r8, r0 +10020e26: bf08 it eq +10020e28: 4693 moveq fp, r2 +10020e2a: 18d7 adds r7, r2, r3 +10020e2c: e7d3 b.n 10020dd6 +10020e2e: 2701 movs r7, #1 +10020e30: 7ae3 ldrb r3, [r4, #11] +10020e32: 2b01 cmp r3, #1 +10020e34: f04f 0300 mov.w r3, #0 +10020e38: d10d bne.n 10020e56 +10020e3a: 6fa1 ldr r1, [r4, #120] ; 0x78 +10020e3c: 9300 str r3, [sp, #0] +10020e3e: f104 007c add.w r0, r4, #124 ; 0x7c +10020e42: 220e movs r2, #14 +10020e44: f016 fc98 bl 10037778 +10020e48: 2800 cmp r0, #0 +10020e4a: bf0c ite eq +10020e4c: f04f 0a01 moveq.w sl, #1 +10020e50: f04f 0a03 movne.w sl, #3 +10020e54: e000 b.n 10020e58 +10020e56: 469a mov sl, r3 +10020e58: 2500 movs r5, #0 +10020e5a: 9b06 ldr r3, [sp, #24] +10020e5c: 429d cmp r5, r3 +10020e5e: d22b bcs.n 10020eb8 +10020e60: 5d73 ldrb r3, [r6, r5] +10020e62: eb06 0c05 add.w ip, r6, r5 +10020e66: b1b3 cbz r3, 10020e96 +10020e68: 1c68 adds r0, r5, #1 +10020e6a: 4430 add r0, r6 +10020e6c: 1d21 adds r1, r4, #4 +10020e6e: 2206 movs r2, #6 +10020e70: 9302 str r3, [sp, #8] +10020e72: f7f6 fae5 bl 10017440 +10020e76: 9b02 ldr r3, [sp, #8] +10020e78: b158 cbz r0, 10020e92 +10020e7a: 2b0e cmp r3, #14 +10020e7c: d006 beq.n 10020e8c +10020e7e: 3507 adds r5, #7 +10020e80: 6ba3 ldr r3, [r4, #56] ; 0x38 +10020e82: 5972 ldr r2, [r6, r5] +10020e84: 429a cmp r2, r3 +10020e86: d217 bcs.n 10020eb8 +10020e88: 5173 str r3, [r6, r5] +10020e8a: e015 b.n 10020eb8 +10020e8c: 68e2 ldr r2, [r4, #12] +10020e8e: 2a00 cmp r2, #0 +10020e90: d0f5 beq.n 10020e7e +10020e92: 441d add r5, r3 +10020e94: e7e1 b.n 10020e5a +10020e96: 9a04 ldr r2, [sp, #16] +10020e98: f1ba 0f01 cmp.w sl, #1 +10020e9c: f8b2 3048 ldrh.w r3, [r2, #72] ; 0x48 +10020ea0: f103 0301 add.w r3, r3, #1 +10020ea4: f8a2 3048 strh.w r3, [r2, #72] ; 0x48 +10020ea8: d108 bne.n 10020ebc +10020eaa: f108 030f add.w r3, r8, #15 +10020eae: b2db uxtb r3, r3 +10020eb0: 9906 ldr r1, [sp, #24] +10020eb2: 18ea adds r2, r5, r3 +10020eb4: 428a cmp r2, r1 +10020eb6: d904 bls.n 10020ec2 +10020eb8: 2000 movs r0, #0 +10020eba: e049 b.n 10020f50 +10020ebc: 68e3 ldr r3, [r4, #12] +10020ebe: 330f adds r3, #15 +10020ec0: e7f5 b.n 10020eae +10020ec2: 1c68 adds r0, r5, #1 +10020ec4: f88c 3000 strb.w r3, [ip] +10020ec8: 2206 movs r2, #6 +10020eca: 4430 add r0, r6 +10020ecc: 1d21 adds r1, r4, #4 +10020ece: f8cd c00c str.w ip, [sp, #12] +10020ed2: f7f6 faad bl 10017430 +10020ed6: 6ba3 ldr r3, [r4, #56] ; 0x38 +10020ed8: 9a07 ldr r2, [sp, #28] +10020eda: f8dd c00c ldr.w ip, [sp, #12] +10020ede: f8cc 3007 str.w r3, [ip, #7] +10020ee2: f012 03ff ands.w r3, r2, #255 ; 0xff +10020ee6: f04f 0200 mov.w r2, #0 +10020eea: d012 beq.n 10020f12 +10020eec: ab08 add r3, sp, #32 +10020eee: 9200 str r2, [sp, #0] +10020ef0: 9301 str r3, [sp, #4] +10020ef2: 6fa1 ldr r1, [r4, #120] ; 0x78 +10020ef4: f104 007c add.w r0, r4, #124 ; 0x7c +10020ef8: f10d 0322 add.w r3, sp, #34 ; 0x22 +10020efc: f8cd c00c str.w ip, [sp, #12] +10020f00: f01d fd2e bl 1003e960 <__rtw_get_sec_ie_veneer> +10020f04: 2800 cmp r0, #0 +10020f06: bfd4 ite le +10020f08: 2201 movle r2, #1 +10020f0a: 2203 movgt r2, #3 +10020f0c: f8dd c00c ldr.w ip, [sp, #12] +10020f10: e000 b.n 10020f14 +10020f12: 461a mov r2, r3 +10020f14: 1973 adds r3, r6, r5 +10020f16: 72da strb r2, [r3, #11] +10020f18: b12f cbz r7, 10020f26 +10020f1a: f1b9 0f01 cmp.w r9, #1 +10020f1e: d102 bne.n 10020f26 +10020f20: 9905 ldr r1, [sp, #20] +10020f22: 7319 strb r1, [r3, #12] +10020f24: e001 b.n 10020f2a +10020f26: 22ff movs r2, #255 ; 0xff +10020f28: 731a strb r2, [r3, #12] +10020f2a: f88c a00d strb.w sl, [ip, #13] +10020f2e: 6ce3 ldr r3, [r4, #76] ; 0x4c +10020f30: f1ba 0f01 cmp.w sl, #1 +10020f34: f88c 300e strb.w r3, [ip, #14] +10020f38: f105 000f add.w r0, r5, #15 +10020f3c: 4430 add r0, r6 +10020f3e: bf07 ittee eq +10020f40: 4659 moveq r1, fp +10020f42: 4642 moveq r2, r8 +10020f44: f104 0110 addne.w r1, r4, #16 +10020f48: 68e2 ldrne r2, [r4, #12] +10020f4a: f7f6 fa71 bl 10017430 +10020f4e: 2001 movs r0, #1 +10020f50: f50d 7d0b add.w sp, sp, #556 ; 0x22c +10020f54: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +10020f58 : +10020f58: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +10020f5c: 4688 mov r8, r1 +10020f5e: b085 sub sp, #20 +10020f60: 4604 mov r4, r0 +10020f62: 2800 cmp r0, #0 +10020f64: f000 8122 beq.w 100211ac +10020f68: 2020 movs r0, #32 +10020f6a: f7f6 fc31 bl 100177d0 +10020f6e: 4606 mov r6, r0 +10020f70: 2800 cmp r0, #0 +10020f72: f000 811b beq.w 100211ac +10020f76: f44f 7061 mov.w r0, #900 ; 0x384 +10020f7a: f7f6 fc29 bl 100177d0 +10020f7e: 4605 mov r5, r0 +10020f80: b910 cbnz r0, 10020f88 +10020f82: 4630 mov r0, r6 +10020f84: 2120 movs r1, #32 +10020f86: e0a0 b.n 100210ca +10020f88: f106 0018 add.w r0, r6, #24 +10020f8c: f7f6 fa68 bl 10017460 +10020f90: 2338 movs r3, #56 ; 0x38 +10020f92: 80b3 strh r3, [r6, #4] +10020f94: 2300 movs r3, #0 +10020f96: 6133 str r3, [r6, #16] +10020f98: 6173 str r3, [r6, #20] +10020f9a: f44f 7961 mov.w r9, #900 ; 0x384 +10020f9e: f44f 735f mov.w r3, #892 ; 0x37c +10020fa2: f8c6 900c str.w r9, [r6, #12] +10020fa6: 60b5 str r5, [r6, #8] +10020fa8: 802b strh r3, [r5, #0] +10020faa: 2308 movs r3, #8 +10020fac: 70ab strb r3, [r5, #2] +10020fae: f504 60a3 add.w r0, r4, #1304 ; 0x518 +10020fb2: f7f6 fb8f bl 100176d4 +10020fb6: f105 0708 add.w r7, r5, #8 +10020fba: 70e8 strb r0, [r5, #3] +10020fbc: 4641 mov r1, r8 +10020fbe: 4620 mov r0, r4 +10020fc0: 463a mov r2, r7 +10020fc2: f7ff fbe4 bl 1002078e +10020fc6: b930 cbnz r0, 10020fd6 +10020fc8: 4630 mov r0, r6 +10020fca: 2120 movs r1, #32 +10020fcc: f7f6 fa2d bl 1001742a +10020fd0: 4628 mov r0, r5 +10020fd2: 4649 mov r1, r9 +10020fd4: e079 b.n 100210ca +10020fd6: f8d4 350c ldr.w r3, [r4, #1292] ; 0x50c +10020fda: bb93 cbnz r3, 10021042 +10020fdc: 7d63 ldrb r3, [r4, #21] +10020fde: 2b01 cmp r3, #1 +10020fe0: d12f bne.n 10021042 +10020fe2: f994 3050 ldrsb.w r3, [r4, #80] ; 0x50 +10020fe6: 2b00 cmp r3, #0 +10020fe8: dd2b ble.n 10021042 +10020fea: f105 0018 add.w r0, r5, #24 +10020fee: f104 0150 add.w r1, r4, #80 ; 0x50 +10020ff2: f7f9 fdf9 bl 1001abe8 +10020ff6: bb20 cbnz r0, 10021042 +10020ff8: f8d4 3650 ldr.w r3, [r4, #1616] ; 0x650 +10020ffc: 220c movs r2, #12 +10020ffe: fb02 4303 mla r3, r2, r3, r4 +10021002: f893 252c ldrb.w r2, [r3, #1324] ; 0x52c +10021006: 208c movs r0, #140 ; 0x8c +10021008: f062 027f orn r2, r2, #127 ; 0x7f +1002100c: f883 252c strb.w r2, [r3, #1324] ; 0x52c +10021010: f7f6 fbce bl 100177b0 +10021014: f8c4 050c str.w r0, [r4, #1292] ; 0x50c +10021018: 4681 mov r9, r0 +1002101a: f8d8 0070 ldr.w r0, [r8, #112] ; 0x70 +1002101e: f7f6 fbc7 bl 100177b0 +10021022: f8c9 0078 str.w r0, [r9, #120] ; 0x78 +10021026: f8d4 350c ldr.w r3, [r4, #1292] ; 0x50c +1002102a: f8d8 2070 ldr.w r2, [r8, #112] ; 0x70 +1002102e: 6f98 ldr r0, [r3, #120] ; 0x78 +10021030: f8d8 1078 ldr.w r1, [r8, #120] ; 0x78 +10021034: f7f6 f9fc bl 10017430 +10021038: f8d4 350c ldr.w r3, [r4, #1292] ; 0x50c +1002103c: f8d8 2070 ldr.w r2, [r8, #112] ; 0x70 +10021040: 671a str r2, [r3, #112] ; 0x70 +10021042: f8b4 304a ldrh.w r3, [r4, #74] ; 0x4a +10021046: f5b3 7f04 cmp.w r3, #528 ; 0x210 +1002104a: d111 bne.n 10021070 +1002104c: f8d4 2658 ldr.w r2, [r4, #1624] ; 0x658 +10021050: b14a cbz r2, 10021066 +10021052: 696b ldr r3, [r5, #20] +10021054: 429a cmp r2, r3 +10021056: d131 bne.n 100210bc +10021058: f105 0018 add.w r0, r5, #24 +1002105c: f204 615c addw r1, r4, #1628 ; 0x65c +10021060: f7f9 fdce bl 1001ac00 +10021064: bb50 cbnz r0, 100210bc +10021066: 4620 mov r0, r4 +10021068: 4639 mov r1, r7 +1002106a: f7ff fd93 bl 10020b94 +1002106e: e016 b.n 1002109e +10021070: 6c23 ldr r3, [r4, #64] ; 0x40 +10021072: b36b cbz r3, 100210d0 +10021074: f8b4 361a ldrh.w r3, [r4, #1562] ; 0x61a +10021078: 2b02 cmp r3, #2 +1002107a: d016 beq.n 100210aa +1002107c: f8d4 2658 ldr.w r2, [r4, #1624] ; 0x658 +10021080: b14a cbz r2, 10021096 +10021082: 696b ldr r3, [r5, #20] +10021084: 429a cmp r2, r3 +10021086: d119 bne.n 100210bc +10021088: f105 0018 add.w r0, r5, #24 +1002108c: f204 615c addw r1, r4, #1628 ; 0x65c +10021090: f7f9 fdb6 bl 1001ac00 +10021094: b990 cbnz r0, 100210bc +10021096: 4620 mov r0, r4 +10021098: 4639 mov r1, r7 +1002109a: f7ff fe67 bl 10020d6c +1002109e: f8d4 364c ldr.w r3, [r4, #1612] ; 0x64c +100210a2: 3301 adds r3, #1 +100210a4: f8c4 364c str.w r3, [r4, #1612] ; 0x64c +100210a8: e008 b.n 100210bc +100210aa: f105 000c add.w r0, r5, #12 +100210ae: f204 6114 addw r1, r4, #1556 ; 0x614 +100210b2: 2206 movs r2, #6 +100210b4: f7f6 f9c4 bl 10017440 +100210b8: 2800 cmp r0, #0 +100210ba: d163 bne.n 10021184 +100210bc: 4630 mov r0, r6 +100210be: 2120 movs r1, #32 +100210c0: f7f6 f9b3 bl 1001742a +100210c4: 4628 mov r0, r5 +100210c6: f44f 7161 mov.w r1, #900 ; 0x384 +100210ca: f7f6 f9ae bl 1001742a +100210ce: e06d b.n 100211ac +100210d0: f894 3438 ldrb.w r3, [r4, #1080] ; 0x438 +100210d4: 2b01 cmp r3, #1 +100210d6: d112 bne.n 100210fe +100210d8: f105 000c add.w r0, r5, #12 +100210dc: f104 0174 add.w r1, r4, #116 ; 0x74 +100210e0: 2206 movs r2, #6 +100210e2: f7f6 f9ad bl 10017440 +100210e6: 2800 cmp r0, #0 +100210e8: d052 beq.n 10021190 +100210ea: 6ce3 ldr r3, [r4, #76] ; 0x4c +100210ec: 2b00 cmp r3, #0 +100210ee: d049 beq.n 10021184 +100210f0: f105 0018 add.w r0, r5, #24 +100210f4: f104 0150 add.w r1, r4, #80 ; 0x50 +100210f8: f7f9 fd76 bl 1001abe8 +100210fc: e02d b.n 1002115a +100210fe: f105 0018 add.w r0, r5, #24 +10021102: f104 0150 add.w r1, r4, #80 ; 0x50 +10021106: f7f9 fd6f bl 1001abe8 +1002110a: 2800 cmp r0, #0 +1002110c: d140 bne.n 10021190 +1002110e: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c +10021112: f8ad 000c strh.w r0, [sp, #12] +10021116: f8ad 000e strh.w r0, [sp, #14] +1002111a: b953 cbnz r3, 10021132 +1002111c: f241 3385 movw r3, #4997 ; 0x1385 +10021120: 5ce3 ldrb r3, [r4, r3] +10021122: b933 cbnz r3, 10021132 +10021124: f7eb fdfe bl 1000cd24 +10021128: b918 cbnz r0, 10021132 +1002112a: 6beb ldr r3, [r5, #60] ; 0x3c +1002112c: 2b01 cmp r3, #1 +1002112e: d129 bne.n 10021184 +10021130: e02e b.n 10021190 +10021132: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c +10021136: f023 0204 bic.w r2, r3, #4 +1002113a: 2a01 cmp r2, #1 +1002113c: d10f bne.n 1002115e +1002113e: 6beb ldr r3, [r5, #60] ; 0x3c +10021140: b333 cbz r3, 10021190 +10021142: ab03 add r3, sp, #12 +10021144: 2200 movs r2, #0 +10021146: f8d5 1080 ldr.w r1, [r5, #128] ; 0x80 +1002114a: f105 0084 add.w r0, r5, #132 ; 0x84 +1002114e: 9301 str r3, [sp, #4] +10021150: 9200 str r2, [sp, #0] +10021152: f10d 030e add.w r3, sp, #14 +10021156: f01d fc03 bl 1003e960 <__rtw_get_sec_ie_veneer> +1002115a: b198 cbz r0, 10021184 +1002115c: e018 b.n 10021190 +1002115e: 2b02 cmp r3, #2 +10021160: d001 beq.n 10021166 +10021162: 2b04 cmp r3, #4 +10021164: d10e bne.n 10021184 +10021166: 6beb ldr r3, [r5, #60] ; 0x3c +10021168: b193 cbz r3, 10021190 +1002116a: ab03 add r3, sp, #12 +1002116c: 2200 movs r2, #0 +1002116e: f8d5 1080 ldr.w r1, [r5, #128] ; 0x80 +10021172: f105 0084 add.w r0, r5, #132 ; 0x84 +10021176: 9301 str r3, [sp, #4] +10021178: 9200 str r2, [sp, #0] +1002117a: f10d 030e add.w r3, sp, #14 +1002117e: f01d fbef bl 1003e960 <__rtw_get_sec_ie_veneer> +10021182: b128 cbz r0, 10021190 +10021184: f604 1008 addw r0, r4, #2312 ; 0x908 +10021188: 4631 mov r1, r6 +1002118a: f7fb fa10 bl 1001c5ae +1002118e: e008 b.n 100211a2 +10021190: 4630 mov r0, r6 +10021192: 2120 movs r1, #32 +10021194: f7f6 f949 bl 1001742a +10021198: 4628 mov r0, r5 +1002119a: f44f 7161 mov.w r1, #900 ; 0x384 +1002119e: f7f6 f944 bl 1001742a +100211a2: f8d4 364c ldr.w r3, [r4, #1612] ; 0x64c +100211a6: 3301 adds r3, #1 +100211a8: f8c4 364c str.w r3, [r4, #1612] ; 0x64c +100211ac: b005 add sp, #20 +100211ae: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + ... + +100211b4 : +100211b4: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +100211b8: 2301 movs r3, #1 +100211ba: f88d 3007 strb.w r3, [sp, #7] +100211be: 6843 ldr r3, [r0, #4] +100211c0: 4605 mov r5, r0 +100211c2: 2b05 cmp r3, #5 +100211c4: 460f mov r7, r1 +100211c6: f8d1 8078 ldr.w r8, [r1, #120] ; 0x78 +100211ca: d128 bne.n 1002121e +100211cc: f500 54b5 add.w r4, r0, #5792 ; 0x16a0 +100211d0: 3408 adds r4, #8 +100211d2: 7a23 ldrb r3, [r4, #8] +100211d4: b31b cbz r3, 1002121e +100211d6: f104 0909 add.w r9, r4, #9 +100211da: 4648 mov r0, r9 +100211dc: f108 010a add.w r1, r8, #10 +100211e0: 2206 movs r2, #6 +100211e2: f7f6 f92d bl 10017440 +100211e6: b1d0 cbz r0, 1002121e +100211e8: 210a movs r1, #10 +100211ea: 4628 mov r0, r5 +100211ec: f10d 0207 add.w r2, sp, #7 +100211f0: f011 f97f bl 100324f2 +100211f4: 6921 ldr r1, [r4, #16] +100211f6: b111 cbz r1, 100211fe +100211f8: 4628 mov r0, r5 +100211fa: f7fd fb76 bl 1001e8ea +100211fe: 2600 movs r6, #0 +10021200: 4631 mov r1, r6 +10021202: 4648 mov r0, r9 +10021204: 2206 movs r2, #6 +10021206: 7226 strb r6, [r4, #8] +10021208: 6126 str r6, [r4, #16] +1002120a: f7f6 f921 bl 10017450 +1002120e: f104 0014 add.w r0, r4, #20 +10021212: f015 fe13 bl 10036e3c +10021216: 4628 mov r0, r5 +10021218: 4631 mov r1, r6 +1002121a: f002 fab1 bl 10023780 +1002121e: 4b0b ldr r3, [pc, #44] ; (1002124c ) +10021220: 6f39 ldr r1, [r7, #112] ; 0x70 +10021222: 681b ldr r3, [r3, #0] +10021224: b12b cbz r3, 10021232 +10021226: 3924 subs r1, #36 ; 0x24 +10021228: f108 0024 add.w r0, r8, #36 ; 0x24 +1002122c: b289 uxth r1, r1 +1002122e: 2250 movs r2, #80 ; 0x50 +10021230: 4798 blx r3 +10021232: f8d5 3648 ldr.w r3, [r5, #1608] ; 0x648 +10021236: 2b03 cmp r3, #3 +10021238: d103 bne.n 10021242 +1002123a: 4628 mov r0, r5 +1002123c: 4639 mov r1, r7 +1002123e: f7ff fe8b bl 10020f58 +10021242: 2001 movs r0, #1 +10021244: b003 add sp, #12 +10021246: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +1002124a: bf00 nop +1002124c: 1004de14 .word 0x1004de14 + +10021250 : +10021250: b570 push {r4, r5, r6, lr} +10021252: 4606 mov r6, r0 +10021254: 2020 movs r0, #32 +10021256: f7f6 fabb bl 100177d0 +1002125a: 4604 mov r4, r0 +1002125c: b348 cbz r0, 100212b2 +1002125e: 200c movs r0, #12 +10021260: f7f6 fab6 bl 100177d0 +10021264: 4605 mov r5, r0 +10021266: b928 cbnz r0, 10021274 +10021268: 4620 mov r0, r4 +1002126a: 2120 movs r1, #32 +1002126c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10021270: f7f6 b8db b.w 1001742a +10021274: f104 0018 add.w r0, r4, #24 +10021278: f7f6 f8f2 bl 10017460 +1002127c: 2338 movs r3, #56 ; 0x38 +1002127e: 80a3 strh r3, [r4, #4] +10021280: 230c movs r3, #12 +10021282: 60e3 str r3, [r4, #12] +10021284: 2300 movs r3, #0 +10021286: 6123 str r3, [r4, #16] +10021288: 6163 str r3, [r4, #20] +1002128a: 2304 movs r3, #4 +1002128c: 60a5 str r5, [r4, #8] +1002128e: 802b strh r3, [r5, #0] +10021290: 2309 movs r3, #9 +10021292: 70ab strb r3, [r5, #2] +10021294: f506 60a3 add.w r0, r6, #1304 ; 0x518 +10021298: f7f6 fa1c bl 100176d4 +1002129c: f8d6 364c ldr.w r3, [r6, #1612] ; 0x64c +100212a0: 70e8 strb r0, [r5, #3] +100212a2: 60ab str r3, [r5, #8] +100212a4: f606 1008 addw r0, r6, #2312 ; 0x908 +100212a8: 4621 mov r1, r4 +100212aa: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +100212ae: f7fb b97e b.w 1001c5ae +100212b2: bd70 pop {r4, r5, r6, pc} + +100212b4 : +100212b4: b5f8 push {r3, r4, r5, r6, r7, lr} +100212b6: 4606 mov r6, r0 +100212b8: 2020 movs r0, #32 +100212ba: 460f mov r7, r1 +100212bc: f7f6 fa88 bl 100177d0 +100212c0: 4604 mov r4, r0 +100212c2: b370 cbz r0, 10021322 +100212c4: 200c movs r0, #12 +100212c6: f7f6 fa83 bl 100177d0 +100212ca: 4605 mov r5, r0 +100212cc: b928 cbnz r0, 100212da +100212ce: 4620 mov r0, r4 +100212d0: 2120 movs r1, #32 +100212d2: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +100212d6: f7f6 b8a8 b.w 1001742a +100212da: f104 0018 add.w r0, r4, #24 +100212de: f7f6 f8bf bl 10017460 +100212e2: 2338 movs r3, #56 ; 0x38 +100212e4: 80a3 strh r3, [r4, #4] +100212e6: 230c movs r3, #12 +100212e8: 60e3 str r3, [r4, #12] +100212ea: 2300 movs r3, #0 +100212ec: 6123 str r3, [r4, #16] +100212ee: 6163 str r3, [r4, #20] +100212f0: 2304 movs r3, #4 +100212f2: 60a5 str r5, [r4, #8] +100212f4: 802b strh r3, [r5, #0] +100212f6: 230a movs r3, #10 +100212f8: 70ab strb r3, [r5, #2] +100212fa: f506 60a3 add.w r0, r6, #1304 ; 0x518 +100212fe: f7f6 f9e9 bl 100176d4 +10021302: f106 017c add.w r1, r6, #124 ; 0x7c +10021306: 70e8 strb r0, [r5, #3] +10021308: f8c6 7094 str.w r7, [r6, #148] ; 0x94 +1002130c: 4630 mov r0, r6 +1002130e: 60af str r7, [r5, #8] +10021310: f7fc fff9 bl 1001e306 +10021314: f606 1008 addw r0, r6, #2312 ; 0x908 +10021318: 4621 mov r1, r4 +1002131a: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +1002131e: f7fb b946 b.w 1001c5ae +10021322: bdf8 pop {r3, r4, r5, r6, r7, pc} + +10021324 : +10021324: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10021328: 6f8e ldr r6, [r1, #120] ; 0x78 +1002132a: 4604 mov r4, r0 +1002132c: 4630 mov r0, r6 +1002132e: f8d1 b070 ldr.w fp, [r1, #112] ; 0x70 +10021332: f7fd f93a bl 1001e5aa +10021336: 4601 mov r1, r0 +10021338: f504 50a4 add.w r0, r4, #5248 ; 0x1480 +1002133c: 3019 adds r0, #25 +1002133e: 2206 movs r2, #6 +10021340: f7f6 f87e bl 10017440 +10021344: 2800 cmp r0, #0 +10021346: f000 80dd beq.w 10021504 +1002134a: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +1002134e: f413 5f10 tst.w r3, #9216 ; 0x2400 +10021352: f000 80d7 beq.w 10021504 +10021356: f413 4580 ands.w r5, r3, #16384 ; 0x4000 +1002135a: f040 80d3 bne.w 10021504 +1002135e: f604 003c addw r0, r4, #2108 ; 0x83c +10021362: f015 fd6b bl 10036e3c +10021366: 8b73 ldrh r3, [r6, #26] +10021368: b123 cbz r3, 10021374 +1002136a: f8c4 5680 str.w r5, [r4, #1664] ; 0x680 +1002136e: f06f 0a03 mvn.w sl, #3 +10021372: e08d b.n 10021490 +10021374: 8b33 ldrh r3, [r6, #24] +10021376: f04f 081e mov.w r8, #30 +1002137a: f413 6f80 tst.w r3, #1024 ; 0x400 +1002137e: f8a4 372c strh.w r3, [r4, #1836] ; 0x72c +10021382: bf0c ite eq +10021384: 2314 moveq r3, #20 +10021386: 2309 movne r3, #9 +10021388: f884 372f strb.w r3, [r4, #1839] ; 0x72f +1002138c: f8b6 901c ldrh.w r9, [r6, #28] +10021390: f3c9 090d ubfx r9, r9, #0, #14 +10021394: f8a4 9728 strh.w r9, [r4, #1832] ; 0x728 +10021398: 46ca mov sl, r9 +1002139a: 45d8 cmp r8, fp +1002139c: d264 bcs.n 10021468 +1002139e: f816 3008 ldrb.w r3, [r6, r8] +100213a2: eb06 0508 add.w r5, r6, r8 +100213a6: 2b2d cmp r3, #45 ; 0x2d +100213a8: d051 beq.n 1002144e +100213aa: d806 bhi.n 100213ba +100213ac: 2b2a cmp r3, #42 ; 0x2a +100213ae: d157 bne.n 10021460 +100213b0: 4620 mov r0, r4 +100213b2: 4629 mov r1, r5 +100213b4: f007 fbaa bl 10028b0c +100213b8: e052 b.n 10021460 +100213ba: 2b3d cmp r3, #61 ; 0x3d +100213bc: d04c beq.n 10021458 +100213be: 2bdd cmp r3, #221 ; 0xdd +100213c0: d14e bne.n 10021460 +100213c2: 1caf adds r7, r5, #2 +100213c4: 4638 mov r0, r7 +100213c6: 4951 ldr r1, [pc, #324] ; (1002150c ) +100213c8: 2206 movs r2, #6 +100213ca: f7f6 f839 bl 10017440 +100213ce: b120 cbz r0, 100213da +100213d0: 4620 mov r0, r4 +100213d2: 4629 mov r1, r5 +100213d4: f007 faa3 bl 1002891e +100213d8: e042 b.n 10021460 +100213da: 4638 mov r0, r7 +100213dc: 494c ldr r1, [pc, #304] ; (10021510 ) +100213de: 2204 movs r2, #4 +100213e0: f7f6 f82e bl 10017440 +100213e4: b1a8 cbz r0, 10021412 +100213e6: 7868 ldrb r0, [r5, #1] +100213e8: 3802 subs r0, #2 +100213ea: f7f3 feb3 bl 10015154 +100213ee: 4607 mov r7, r0 +100213f0: 2800 cmp r0, #0 +100213f2: d035 beq.n 10021460 +100213f4: 786a ldrb r2, [r5, #1] +100213f6: 232d movs r3, #45 ; 0x2d +100213f8: 3a04 subs r2, #4 +100213fa: b2d2 uxtb r2, r2 +100213fc: 7003 strb r3, [r0, #0] +100213fe: 7042 strb r2, [r0, #1] +10021400: 1da9 adds r1, r5, #6 +10021402: 3002 adds r0, #2 +10021404: f7f9 fbe4 bl 1001abd0 +10021408: 4620 mov r0, r4 +1002140a: 4639 mov r1, r7 +1002140c: f007 fb00 bl 10028a10 +10021410: e019 b.n 10021446 +10021412: 4638 mov r0, r7 +10021414: 493f ldr r1, [pc, #252] ; (10021514 ) +10021416: 2204 movs r2, #4 +10021418: f7f6 f812 bl 10017440 +1002141c: b300 cbz r0, 10021460 +1002141e: 7868 ldrb r0, [r5, #1] +10021420: 3802 subs r0, #2 +10021422: f7f3 fe97 bl 10015154 +10021426: 4607 mov r7, r0 +10021428: b1d0 cbz r0, 10021460 +1002142a: 786a ldrb r2, [r5, #1] +1002142c: 233d movs r3, #61 ; 0x3d +1002142e: 3a04 subs r2, #4 +10021430: b2d2 uxtb r2, r2 +10021432: 7003 strb r3, [r0, #0] +10021434: 7042 strb r2, [r0, #1] +10021436: 1da9 adds r1, r5, #6 +10021438: 3002 adds r0, #2 +1002143a: f7f9 fbc9 bl 1001abd0 +1002143e: 4620 mov r0, r4 +10021440: 4639 mov r1, r7 +10021442: f007 fb35 bl 10028ab0 +10021446: 4638 mov r0, r7 +10021448: f7f3 ff20 bl 1001528c +1002144c: e008 b.n 10021460 +1002144e: 4620 mov r0, r4 +10021450: 4629 mov r1, r5 +10021452: f007 fadd bl 10028a10 +10021456: e003 b.n 10021460 +10021458: 4620 mov r0, r4 +1002145a: 4629 mov r1, r5 +1002145c: f007 fb28 bl 10028ab0 +10021460: 786b ldrb r3, [r5, #1] +10021462: 3302 adds r3, #2 +10021464: 4498 add r8, r3 +10021466: e798 b.n 1002139a +10021468: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +1002146c: f423 5300 bic.w r3, r3, #8192 ; 0x2000 +10021470: f443 4380 orr.w r3, r3, #16384 ; 0x4000 +10021474: f8c4 3680 str.w r3, [r4, #1664] ; 0x680 +10021478: 4b27 ldr r3, [pc, #156] ; (10021518 ) +1002147a: 681b ldr r3, [r3, #0] +1002147c: b143 cbz r3, 10021490 +1002147e: 4827 ldr r0, [pc, #156] ; (1002151c ) +10021480: f7f9 fb7e bl 1001ab80 +10021484: 4b26 ldr r3, [pc, #152] ; (10021520 ) +10021486: 4649 mov r1, r9 +10021488: f8d3 013c ldr.w r0, [r3, #316] ; 0x13c +1002148c: f7f9 fb78 bl 1001ab80 +10021490: f8d4 30d0 ldr.w r3, [r4, #208] ; 0xd0 +10021494: aa02 add r2, sp, #8 +10021496: 336e adds r3, #110 ; 0x6e +10021498: f802 3d01 strb.w r3, [r2, #-1]! +1002149c: 4620 mov r0, r4 +1002149e: 2134 movs r1, #52 ; 0x34 +100214a0: f011 f827 bl 100324f2 +100214a4: f7eb fc3e bl 1000cd24 +100214a8: b140 cbz r0, 100214bc +100214aa: 4630 mov r0, r6 +100214ac: f7fd f88d bl 1001e5ca +100214b0: 2206 movs r2, #6 +100214b2: 4601 mov r1, r0 +100214b4: 2300 movs r3, #0 +100214b6: 200c movs r0, #12 +100214b8: f7ec f858 bl 1000d56c +100214bc: 4620 mov r0, r4 +100214be: 4651 mov r1, sl +100214c0: f7ff fef8 bl 100212b4 +100214c4: f241 3385 movw r3, #4997 ; 0x1385 +100214c8: 5ce3 ldrb r3, [r4, r3] +100214ca: b143 cbz r3, 100214de +100214cc: 4630 mov r0, r6 +100214ce: f7fd f87c bl 1001e5ca +100214d2: 2206 movs r2, #6 +100214d4: 4601 mov r1, r0 +100214d6: 2300 movs r3, #0 +100214d8: 200a movs r0, #10 +100214da: f7ec f847 bl 1000d56c +100214de: f241 036c movw r3, #4204 ; 0x106c +100214e2: 58e3 ldr r3, [r4, r3] +100214e4: 2b04 cmp r3, #4 +100214e6: d001 beq.n 100214ec +100214e8: 2b07 cmp r3, #7 +100214ea: d10b bne.n 10021504 +100214ec: 4630 mov r0, r6 +100214ee: f7fd f86c bl 1001e5ca +100214f2: 4601 mov r1, r0 +100214f4: f504 6046 add.w r0, r4, #3168 ; 0xc60 +100214f8: f006 fedc bl 100282b4 +100214fc: 4601 mov r1, r0 +100214fe: 4620 mov r0, r4 +10021500: f003 fa6c bl 100249dc +10021504: 2001 movs r0, #1 +10021506: b003 add sp, #12 +10021508: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1002150c: 10041558 .word 0x10041558 +10021510: 100414bd .word 0x100414bd +10021514: 100414ab .word 0x100414ab +10021518: 10044f38 .word 0x10044f38 +1002151c: 100429b1 .word 0x100429b1 +10021520: 10043ac4 .word 0x10043ac4 + +10021524 : +10021524: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +10021526: 4606 mov r6, r0 +10021528: 2020 movs r0, #32 +1002152a: 460f mov r7, r1 +1002152c: f8ad 2006 strh.w r2, [sp, #6] +10021530: f7f6 f94e bl 100177d0 +10021534: 4604 mov r4, r0 +10021536: 2800 cmp r0, #0 +10021538: d03b beq.n 100215b2 +1002153a: 2014 movs r0, #20 +1002153c: f7f6 f948 bl 100177d0 +10021540: 4605 mov r5, r0 +10021542: b920 cbnz r0, 1002154e +10021544: 4620 mov r0, r4 +10021546: 2120 movs r1, #32 +10021548: f7f5 ff6f bl 1001742a +1002154c: e031 b.n 100215b2 +1002154e: f104 0018 add.w r0, r4, #24 +10021552: f7f5 ff85 bl 10017460 +10021556: 2338 movs r3, #56 ; 0x38 +10021558: 80a3 strh r3, [r4, #4] +1002155a: 2314 movs r3, #20 +1002155c: 60e3 str r3, [r4, #12] +1002155e: 2300 movs r3, #0 +10021560: 6123 str r3, [r4, #16] +10021562: 6163 str r3, [r4, #20] +10021564: 230c movs r3, #12 +10021566: 60a5 str r5, [r4, #8] +10021568: f506 60a3 add.w r0, r6, #1304 ; 0x518 +1002156c: 802b strh r3, [r5, #0] +1002156e: 70ab strb r3, [r5, #2] +10021570: f7f6 f8b0 bl 100176d4 +10021574: 4639 mov r1, r7 +10021576: 70e8 strb r0, [r5, #3] +10021578: 2206 movs r2, #6 +1002157a: f105 0008 add.w r0, r5, #8 +1002157e: f7f5 ff57 bl 10017430 +10021582: f105 000e add.w r0, r5, #14 +10021586: f10d 0106 add.w r1, sp, #6 +1002158a: 2202 movs r2, #2 +1002158c: f7f5 ff50 bl 10017430 +10021590: f506 6046 add.w r0, r6, #3168 ; 0xc60 +10021594: 4639 mov r1, r7 +10021596: f006 fe8d bl 100282b4 +1002159a: b110 cbz r0, 100215a2 +1002159c: f8d0 3100 ldr.w r3, [r0, #256] ; 0x100 +100215a0: e001 b.n 100215a6 +100215a2: f04f 33ff mov.w r3, #4294967295 +100215a6: 612b str r3, [r5, #16] +100215a8: f606 1008 addw r0, r6, #2312 ; 0x908 +100215ac: 4621 mov r1, r4 +100215ae: f7fa fffe bl 1001c5ae +100215b2: b003 add sp, #12 +100215b4: bdf0 pop {r4, r5, r6, r7, pc} + +100215b6 : +100215b6: b570 push {r4, r5, r6, lr} +100215b8: 4604 mov r4, r0 +100215ba: 3098 adds r0, #152 ; 0x98 +100215bc: 460d mov r5, r1 +100215be: 4616 mov r6, r2 +100215c0: f007 f8de bl 10028780 +100215c4: 2206 movs r2, #6 +100215c6: 4601 mov r1, r0 +100215c8: 4628 mov r0, r5 +100215ca: f7f5 ff39 bl 10017440 +100215ce: b1d8 cbz r0, 10021608 +100215d0: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +100215d4: f003 0203 and.w r2, r3, #3 +100215d8: 2a02 cmp r2, #2 +100215da: d115 bne.n 10021608 +100215dc: f413 4280 ands.w r2, r3, #16384 ; 0x4000 +100215e0: d008 beq.n 100215f4 +100215e2: 2300 movs r3, #0 +100215e4: f8c4 3680 str.w r3, [r4, #1664] ; 0x680 +100215e8: 4620 mov r0, r4 +100215ea: 4629 mov r1, r5 +100215ec: 4632 mov r2, r6 +100215ee: f7ff ff99 bl 10021524 +100215f2: e009 b.n 10021608 +100215f4: f413 5f1c tst.w r3, #9984 ; 0x2700 +100215f8: d006 beq.n 10021608 +100215fa: f8c4 2680 str.w r2, [r4, #1664] ; 0x680 +100215fe: 4620 mov r0, r4 +10021600: f06f 0101 mvn.w r1, #1 +10021604: f7ff fe56 bl 100212b4 +10021608: 2001 movs r0, #1 +1002160a: bd70 pop {r4, r5, r6, pc} + +1002160c : +1002160c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10021610: 4b63 ldr r3, [pc, #396] ; (100217a0 ) +10021612: 4680 mov r8, r0 +10021614: 681b ldr r3, [r3, #0] +10021616: 460c mov r4, r1 +10021618: f8d1 9078 ldr.w r9, [r1, #120] ; 0x78 +1002161c: f8d1 b070 ldr.w fp, [r1, #112] ; 0x70 +10021620: f100 0598 add.w r5, r0, #152 ; 0x98 +10021624: b133 cbz r3, 10021634 +10021626: f1ab 0124 sub.w r1, fp, #36 ; 0x24 +1002162a: f109 0024 add.w r0, r9, #36 ; 0x24 +1002162e: b289 uxth r1, r1 +10021630: 2280 movs r2, #128 ; 0x80 +10021632: 4798 blx r3 +10021634: f8d8 3648 ldr.w r3, [r8, #1608] ; 0x648 +10021638: 2b03 cmp r3, #3 +1002163a: d104 bne.n 10021646 +1002163c: 4640 mov r0, r8 +1002163e: 4621 mov r1, r4 +10021640: f7ff fc8a bl 10020f58 +10021644: e0a8 b.n 10021798 +10021646: 4628 mov r0, r5 +10021648: f007 f89a bl 10028780 +1002164c: 2206 movs r2, #6 +1002164e: 4601 mov r1, r0 +10021650: f109 0010 add.w r0, r9, #16 +10021654: f7f5 fef4 bl 10017440 +10021658: 2800 cmp r0, #0 +1002165a: f000 809d beq.w 10021798 +1002165e: f8d8 2680 ldr.w r2, [r8, #1664] ; 0x680 +10021662: 05d3 lsls r3, r2, #23 +10021664: d511 bpl.n 1002168a +10021666: f1ab 0118 sub.w r1, fp, #24 +1002166a: f109 0018 add.w r0, r9, #24 +1002166e: f007 fcb3 bl 10028fd8 +10021672: 4649 mov r1, r9 +10021674: f888 072e strb.w r0, [r8, #1838] ; 0x72e +10021678: 465a mov r2, fp +1002167a: f508 60a2 add.w r0, r8, #1296 ; 0x510 +1002167e: f007 fdf7 bl 10029270 +10021682: 4640 mov r0, r8 +10021684: f7ff f9a8 bl 100209d8 +10021688: e086 b.n 10021798 +1002168a: f244 0303 movw r3, #16387 ; 0x4003 +1002168e: 4013 ands r3, r2 +10021690: f244 0202 movw r2, #16386 ; 0x4002 +10021694: 4293 cmp r3, r2 +10021696: d17f bne.n 10021798 +10021698: f508 6046 add.w r0, r8, #3168 ; 0xc60 +1002169c: f109 010a add.w r1, r9, #10 +100216a0: f006 fe08 bl 100282b4 +100216a4: 4682 mov sl, r0 +100216a6: 2800 cmp r0, #0 +100216a8: d076 beq.n 10021798 +100216aa: 4649 mov r1, r9 +100216ac: 465a mov r2, fp +100216ae: 4640 mov r0, r8 +100216b0: f007 fa63 bl 10028b7a +100216b4: 4b3b ldr r3, [pc, #236] ; (100217a4 ) +100216b6: 7819 ldrb r1, [r3, #0] +100216b8: 461a mov r2, r3 +100216ba: b919 cbnz r1, 100216c4 +100216bc: b910 cbnz r0, 100216c4 +100216be: 2201 movs r2, #1 +100216c0: 701a strb r2, [r3, #0] +100216c2: e069 b.n 10021798 +100216c4: 2300 movs r3, #0 +100216c6: 7013 strb r3, [r2, #0] +100216c8: 2800 cmp r0, #0 +100216ca: d135 bne.n 10021738 +100216cc: 4b36 ldr r3, [pc, #216] ; (100217a8 ) +100216ce: 681b ldr r3, [r3, #0] +100216d0: b13b cbz r3, 100216e2 +100216d2: 4836 ldr r0, [pc, #216] ; (100217ac ) +100216d4: f7f9 fa54 bl 1001ab80 +100216d8: 4b35 ldr r3, [pc, #212] ; (100217b0 ) +100216da: f8d3 0128 ldr.w r0, [r3, #296] ; 0x128 +100216de: f7f9 fa4f bl 1001ab80 +100216e2: 4640 mov r0, r8 +100216e4: f108 019c add.w r1, r8, #156 ; 0x9c +100216e8: f64f 72ff movw r2, #65535 ; 0xffff +100216ec: f7ff ff63 bl 100215b6 +100216f0: f898 38f9 ldrb.w r3, [r8, #2297] ; 0x8f9 +100216f4: 2b00 cmp r3, #0 +100216f6: d04f beq.n 10021798 +100216f8: f898 286e ldrb.w r2, [r8, #2158] ; 0x86e +100216fc: f898 386d ldrb.w r3, [r8, #2157] ; 0x86d +10021700: 429a cmp r2, r3 +10021702: d214 bcs.n 1002172e +10021704: 4b2b ldr r3, [pc, #172] ; (100217b4 ) +10021706: 781a ldrb r2, [r3, #0] +10021708: 2a00 cmp r2, #0 +1002170a: d145 bne.n 10021798 +1002170c: 2201 movs r2, #1 +1002170e: 701a strb r2, [r3, #0] +10021710: f8b8 3870 ldrh.w r3, [r8, #2160] ; 0x870 +10021714: f44f 717a mov.w r1, #1000 ; 0x3e8 +10021718: 4359 muls r1, r3 +1002171a: f508 6006 add.w r0, r8, #2144 ; 0x860 +1002171e: f015 fb8b bl 10036e38 +10021722: f898 386e ldrb.w r3, [r8, #2158] ; 0x86e +10021726: 3301 adds r3, #1 +10021728: f888 386e strb.w r3, [r8, #2158] ; 0x86e +1002172c: e034 b.n 10021798 +1002172e: 4640 mov r0, r8 +10021730: 4921 ldr r1, [pc, #132] ; (100217b8 ) +10021732: f012 fa12 bl 10033b5a +10021736: e02f b.n 10021798 +10021738: f241 036c movw r3, #4204 ; 0x106c +1002173c: f858 3003 ldr.w r3, [r8, r3] +10021740: 2b04 cmp r3, #4 +10021742: d001 beq.n 10021748 +10021744: 2b07 cmp r3, #7 +10021746: d102 bne.n 1002174e +10021748: f015 fd70 bl 1003722c +1002174c: b128 cbz r0, 1002175a +1002174e: 2100 movs r1, #0 +10021750: 200f movs r0, #15 +10021752: 460a mov r2, r1 +10021754: 460b mov r3, r1 +10021756: f7eb ff09 bl 1000d56c +1002175a: f50a 72c4 add.w r2, sl, #392 ; 0x188 +1002175e: f50a 73c0 add.w r3, sl, #384 ; 0x180 +10021762: e9d2 4500 ldrd r4, r5, [r2] +10021766: e9d3 2300 ldrd r2, r3, [r3] +1002176a: 18a4 adds r4, r4, r2 +1002176c: eb45 0503 adc.w r5, r5, r3 +10021770: f50a 73c8 add.w r3, sl, #400 ; 0x190 +10021774: e9d3 2300 ldrd r2, r3, [r3] +10021778: 18a4 adds r4, r4, r2 +1002177a: eb45 0503 adc.w r5, r5, r3 +1002177e: 260f movs r6, #15 +10021780: 2700 movs r7, #0 +10021782: 4034 ands r4, r6 +10021784: 403d ands r5, r7 +10021786: ea54 0305 orrs.w r3, r4, r5 +1002178a: d105 bne.n 10021798 +1002178c: 4640 mov r0, r8 +1002178e: 4649 mov r1, r9 +10021790: 465a mov r2, fp +10021792: 4653 mov r3, sl +10021794: f007 faf9 bl 10028d8a +10021798: 2001 movs r0, #1 +1002179a: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +1002179e: bf00 nop +100217a0: 1004de14 .word 0x1004de14 +100217a4: 1004bba5 .word 0x1004bba5 +100217a8: 10044f38 .word 0x10044f38 +100217ac: 100429b1 .word 0x100429b1 +100217b0: 10043ac4 .word 0x10043ac4 +100217b4: 1004bb90 .word 0x1004bb90 +100217b8: 1003fc5d .word 0x1003fc5d + +100217bc : +100217bc: b5f0 push {r4, r5, r6, r7, lr} +100217be: 4604 mov r4, r0 +100217c0: b087 sub sp, #28 +100217c2: 3098 adds r0, #152 ; 0x98 +100217c4: 6f8d ldr r5, [r1, #120] ; 0x78 +100217c6: f006 ffdb bl 10028780 +100217ca: f105 0710 add.w r7, r5, #16 +100217ce: 4601 mov r1, r0 +100217d0: 2206 movs r2, #6 +100217d2: 4638 mov r0, r7 +100217d4: f7f5 fe34 bl 10017440 +100217d8: 2800 cmp r0, #0 +100217da: f000 8093 beq.w 10021904 +100217de: 6923 ldr r3, [r4, #16] +100217e0: 8b2e ldrh r6, [r5, #24] +100217e2: f013 0f10 tst.w r3, #16 +100217e6: 4b49 ldr r3, [pc, #292] ; (1002190c ) +100217e8: d150 bne.n 1002188c +100217ea: 681b ldr r3, [r3, #0] +100217ec: b193 cbz r3, 10021814 +100217ee: 4848 ldr r0, [pc, #288] ; (10021910 ) +100217f0: f7f9 f9c6 bl 1001ab80 +100217f4: 7ca9 ldrb r1, [r5, #18] +100217f6: 7c2a ldrb r2, [r5, #16] +100217f8: 7c6b ldrb r3, [r5, #17] +100217fa: 9100 str r1, [sp, #0] +100217fc: 7ce9 ldrb r1, [r5, #19] +100217fe: 9101 str r1, [sp, #4] +10021800: 7d29 ldrb r1, [r5, #20] +10021802: 9102 str r1, [sp, #8] +10021804: 7d69 ldrb r1, [r5, #21] +10021806: 9103 str r1, [sp, #12] +10021808: 4942 ldr r1, [pc, #264] ; (10021914 ) +1002180a: f8d1 0144 ldr.w r0, [r1, #324] ; 0x144 +1002180e: 4631 mov r1, r6 +10021810: f7f9 f9b6 bl 1001ab80 +10021814: 4620 mov r0, r4 +10021816: 4639 mov r1, r7 +10021818: 4632 mov r2, r6 +1002181a: f7ff fecc bl 100215b6 +1002181e: 2300 movs r3, #0 +10021820: f884 3488 strb.w r3, [r4, #1160] ; 0x488 +10021824: f894 38f9 ldrb.w r3, [r4, #2297] ; 0x8f9 +10021828: b323 cbz r3, 10021874 +1002182a: f894 286e ldrb.w r2, [r4, #2158] ; 0x86e +1002182e: f894 386d ldrb.w r3, [r4, #2157] ; 0x86d +10021832: 429a cmp r2, r3 +10021834: d21a bcs.n 1002186c +10021836: f894 386c ldrb.w r3, [r4, #2156] ; 0x86c +1002183a: b9bb cbnz r3, 1002186c +1002183c: f241 3385 movw r3, #4997 ; 0x1385 +10021840: 5ce3 ldrb r3, [r4, r3] +10021842: b99b cbnz r3, 1002186c +10021844: 4b34 ldr r3, [pc, #208] ; (10021918 ) +10021846: 781a ldrb r2, [r3, #0] +10021848: b9a2 cbnz r2, 10021874 +1002184a: 2201 movs r2, #1 +1002184c: 701a strb r2, [r3, #0] +1002184e: f8b4 3870 ldrh.w r3, [r4, #2160] ; 0x870 +10021852: f44f 717a mov.w r1, #1000 ; 0x3e8 +10021856: 4359 muls r1, r3 +10021858: f504 6006 add.w r0, r4, #2144 ; 0x860 +1002185c: f015 faec bl 10036e38 +10021860: f894 386e ldrb.w r3, [r4, #2158] ; 0x86e +10021864: 3301 adds r3, #1 +10021866: f884 386e strb.w r3, [r4, #2158] ; 0x86e +1002186a: e003 b.n 10021874 +1002186c: 4620 mov r0, r4 +1002186e: 492b ldr r1, [pc, #172] ; (1002191c ) +10021870: f012 f973 bl 10033b5a +10021874: f241 3385 movw r3, #4997 ; 0x1385 +10021878: 5ce3 ldrb r3, [r4, r3] +1002187a: 2b00 cmp r3, #0 +1002187c: d042 beq.n 10021904 +1002187e: 2100 movs r1, #0 +10021880: 460a mov r2, r1 +10021882: 460b mov r3, r1 +10021884: 200b movs r0, #11 +10021886: f7eb fe71 bl 1000d56c +1002188a: e03b b.n 10021904 +1002188c: 681b ldr r3, [r3, #0] +1002188e: b193 cbz r3, 100218b6 +10021890: 481f ldr r0, [pc, #124] ; (10021910 ) +10021892: f7f9 f975 bl 1001ab80 +10021896: 7b29 ldrb r1, [r5, #12] +10021898: 7aaa ldrb r2, [r5, #10] +1002189a: 7aeb ldrb r3, [r5, #11] +1002189c: 9100 str r1, [sp, #0] +1002189e: 7b69 ldrb r1, [r5, #13] +100218a0: 9101 str r1, [sp, #4] +100218a2: 7ba9 ldrb r1, [r5, #14] +100218a4: 9102 str r1, [sp, #8] +100218a6: 7be9 ldrb r1, [r5, #15] +100218a8: 9103 str r1, [sp, #12] +100218aa: 491a ldr r1, [pc, #104] ; (10021914 ) +100218ac: f8d1 0140 ldr.w r0, [r1, #320] ; 0x140 +100218b0: 4631 mov r1, r6 +100218b2: f7f9 f965 bl 1001ab80 +100218b6: f105 010a add.w r1, r5, #10 +100218ba: f504 6046 add.w r0, r4, #3168 ; 0xc60 +100218be: f006 fcf9 bl 100282b4 +100218c2: 4605 mov r5, r0 +100218c4: b1f0 cbz r0, 10021904 +100218c6: f604 46d4 addw r6, r4, #3284 ; 0xcd4 +100218ca: 4630 mov r0, r6 +100218cc: a905 add r1, sp, #20 +100218ce: f505 7707 add.w r7, r5, #540 ; 0x21c +100218d2: f7f5 fe89 bl 100175e8 +100218d6: 4638 mov r0, r7 +100218d8: f7f5 fdc5 bl 10017466 +100218dc: b948 cbnz r0, 100218f2 +100218de: 4638 mov r0, r7 +100218e0: f7f5 fdd2 bl 10017488 +100218e4: 4629 mov r1, r5 +100218e6: 4620 mov r0, r4 +100218e8: 2203 movs r2, #3 +100218ea: f7fa f9d8 bl 1001bc9e +100218ee: 4605 mov r5, r0 +100218f0: e000 b.n 100218f4 +100218f2: 2500 movs r5, #0 +100218f4: 4630 mov r0, r6 +100218f6: a905 add r1, sp, #20 +100218f8: f7f5 fe80 bl 100175fc +100218fc: 4620 mov r0, r4 +100218fe: 4629 mov r1, r5 +10021900: f7fa f872 bl 1001b9e8 +10021904: 2001 movs r0, #1 +10021906: b007 add sp, #28 +10021908: bdf0 pop {r4, r5, r6, r7, pc} +1002190a: bf00 nop +1002190c: 10044f38 .word 0x10044f38 +10021910: 100429b1 .word 0x100429b1 +10021914: 10043ac4 .word 0x10043ac4 +10021918: 1004bb90 .word 0x1004bb90 +1002191c: 1003fc5d .word 0x1003fc5d + +10021920 : +10021920: b5f0 push {r4, r5, r6, r7, lr} +10021922: 4604 mov r4, r0 +10021924: b087 sub sp, #28 +10021926: 3098 adds r0, #152 ; 0x98 +10021928: 6f8d ldr r5, [r1, #120] ; 0x78 +1002192a: f006 ff29 bl 10028780 +1002192e: f105 0710 add.w r7, r5, #16 +10021932: 4601 mov r1, r0 +10021934: 2206 movs r2, #6 +10021936: 4638 mov r0, r7 +10021938: f7f5 fd82 bl 10017440 +1002193c: 2800 cmp r0, #0 +1002193e: f000 809f beq.w 10021a80 +10021942: 6923 ldr r3, [r4, #16] +10021944: 8b2e ldrh r6, [r5, #24] +10021946: f013 0f10 tst.w r3, #16 +1002194a: 4b4f ldr r3, [pc, #316] ; (10021a88 ) +1002194c: d150 bne.n 100219f0 +1002194e: 681b ldr r3, [r3, #0] +10021950: b193 cbz r3, 10021978 +10021952: 484e ldr r0, [pc, #312] ; (10021a8c ) +10021954: f7f9 f914 bl 1001ab80 +10021958: 7ca9 ldrb r1, [r5, #18] +1002195a: 7c2a ldrb r2, [r5, #16] +1002195c: 7c6b ldrb r3, [r5, #17] +1002195e: 9100 str r1, [sp, #0] +10021960: 7ce9 ldrb r1, [r5, #19] +10021962: 9101 str r1, [sp, #4] +10021964: 7d29 ldrb r1, [r5, #20] +10021966: 9102 str r1, [sp, #8] +10021968: 7d69 ldrb r1, [r5, #21] +1002196a: 9103 str r1, [sp, #12] +1002196c: 4948 ldr r1, [pc, #288] ; (10021a90 ) +1002196e: f8d1 014c ldr.w r0, [r1, #332] ; 0x14c +10021972: 4631 mov r1, r6 +10021974: f7f9 f904 bl 1001ab80 +10021978: 4620 mov r0, r4 +1002197a: 4639 mov r1, r7 +1002197c: 4632 mov r2, r6 +1002197e: f7ff fe1a bl 100215b6 +10021982: 2300 movs r3, #0 +10021984: f884 3488 strb.w r3, [r4, #1160] ; 0x488 +10021988: f894 38f9 ldrb.w r3, [r4, #2297] ; 0x8f9 +1002198c: b323 cbz r3, 100219d8 +1002198e: f894 286e ldrb.w r2, [r4, #2158] ; 0x86e +10021992: f894 386d ldrb.w r3, [r4, #2157] ; 0x86d +10021996: 429a cmp r2, r3 +10021998: d21a bcs.n 100219d0 +1002199a: f894 386c ldrb.w r3, [r4, #2156] ; 0x86c +1002199e: b9bb cbnz r3, 100219d0 +100219a0: f241 3385 movw r3, #4997 ; 0x1385 +100219a4: 5ce3 ldrb r3, [r4, r3] +100219a6: b99b cbnz r3, 100219d0 +100219a8: 4b3a ldr r3, [pc, #232] ; (10021a94 ) +100219aa: 781a ldrb r2, [r3, #0] +100219ac: b9a2 cbnz r2, 100219d8 +100219ae: 2201 movs r2, #1 +100219b0: 701a strb r2, [r3, #0] +100219b2: f8b4 3870 ldrh.w r3, [r4, #2160] ; 0x870 +100219b6: f44f 717a mov.w r1, #1000 ; 0x3e8 +100219ba: 4359 muls r1, r3 +100219bc: f504 6006 add.w r0, r4, #2144 ; 0x860 +100219c0: f015 fa3a bl 10036e38 +100219c4: f894 386e ldrb.w r3, [r4, #2158] ; 0x86e +100219c8: 3301 adds r3, #1 +100219ca: f884 386e strb.w r3, [r4, #2158] ; 0x86e +100219ce: e003 b.n 100219d8 +100219d0: 4620 mov r0, r4 +100219d2: 4931 ldr r1, [pc, #196] ; (10021a98 ) +100219d4: f012 f8c1 bl 10033b5a +100219d8: f241 3385 movw r3, #4997 ; 0x1385 +100219dc: 5ce3 ldrb r3, [r4, r3] +100219de: 2b00 cmp r3, #0 +100219e0: d04e beq.n 10021a80 +100219e2: 2100 movs r1, #0 +100219e4: 460a mov r2, r1 +100219e6: 460b mov r3, r1 +100219e8: 200b movs r0, #11 +100219ea: f7eb fdbf bl 1000d56c +100219ee: e047 b.n 10021a80 +100219f0: 681b ldr r3, [r3, #0] +100219f2: b193 cbz r3, 10021a1a +100219f4: 4825 ldr r0, [pc, #148] ; (10021a8c ) +100219f6: f7f9 f8c3 bl 1001ab80 +100219fa: 7b29 ldrb r1, [r5, #12] +100219fc: 7aaa ldrb r2, [r5, #10] +100219fe: 7aeb ldrb r3, [r5, #11] +10021a00: 9100 str r1, [sp, #0] +10021a02: 7b69 ldrb r1, [r5, #13] +10021a04: 9101 str r1, [sp, #4] +10021a06: 7ba9 ldrb r1, [r5, #14] +10021a08: 9102 str r1, [sp, #8] +10021a0a: 7be9 ldrb r1, [r5, #15] +10021a0c: 9103 str r1, [sp, #12] +10021a0e: 4920 ldr r1, [pc, #128] ; (10021a90 ) +10021a10: f8d1 0148 ldr.w r0, [r1, #328] ; 0x148 +10021a14: 4631 mov r1, r6 +10021a16: f7f9 f8b3 bl 1001ab80 +10021a1a: f105 010a add.w r1, r5, #10 +10021a1e: f504 6046 add.w r0, r4, #3168 ; 0xc60 +10021a22: f006 fc47 bl 100282b4 +10021a26: 4605 mov r5, r0 +10021a28: b1f0 cbz r0, 10021a68 +10021a2a: f604 46d4 addw r6, r4, #3284 ; 0xcd4 +10021a2e: 4630 mov r0, r6 +10021a30: a905 add r1, sp, #20 +10021a32: f505 7707 add.w r7, r5, #540 ; 0x21c +10021a36: f7f5 fdd7 bl 100175e8 +10021a3a: 4638 mov r0, r7 +10021a3c: f7f5 fd13 bl 10017466 +10021a40: b948 cbnz r0, 10021a56 +10021a42: 4638 mov r0, r7 +10021a44: f7f5 fd20 bl 10017488 +10021a48: 4629 mov r1, r5 +10021a4a: 4620 mov r0, r4 +10021a4c: 2203 movs r2, #3 +10021a4e: f7fa f926 bl 1001bc9e +10021a52: 4605 mov r5, r0 +10021a54: e000 b.n 10021a58 +10021a56: 2500 movs r5, #0 +10021a58: 4630 mov r0, r6 +10021a5a: a905 add r1, sp, #20 +10021a5c: f7f5 fdce bl 100175fc +10021a60: 4620 mov r0, r4 +10021a62: 4629 mov r1, r5 +10021a64: f7f9 ffc0 bl 1001b9e8 +10021a68: f241 3585 movw r5, #4997 ; 0x1385 +10021a6c: 5d63 ldrb r3, [r4, r5] +10021a6e: b13b cbz r3, 10021a80 +10021a70: 2100 movs r1, #0 +10021a72: 460b mov r3, r1 +10021a74: 200b movs r0, #11 +10021a76: 460a mov r2, r1 +10021a78: f7eb fd78 bl 1000d56c +10021a7c: 2300 movs r3, #0 +10021a7e: 5563 strb r3, [r4, r5] +10021a80: 2001 movs r0, #1 +10021a82: b007 add sp, #28 +10021a84: bdf0 pop {r4, r5, r6, r7, pc} +10021a86: bf00 nop +10021a88: 10044f38 .word 0x10044f38 +10021a8c: 100429b1 .word 0x100429b1 +10021a90: 10043ac4 .word 0x10043ac4 +10021a94: 1004bb90 .word 0x1004bb90 +10021a98: 1003fc5d .word 0x1003fc5d + +10021a9c : +10021a9c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10021aa0: 4606 mov r6, r0 +10021aa2: 2020 movs r0, #32 +10021aa4: 4688 mov r8, r1 +10021aa6: 4617 mov r7, r2 +10021aa8: f7f5 fe92 bl 100177d0 +10021aac: 4604 mov r4, r0 +10021aae: b368 cbz r0, 10021b0c +10021ab0: 2014 movs r0, #20 +10021ab2: f7f5 fe8d bl 100177d0 +10021ab6: 4605 mov r5, r0 +10021ab8: b928 cbnz r0, 10021ac6 +10021aba: 4620 mov r0, r4 +10021abc: 2120 movs r1, #32 +10021abe: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +10021ac2: f7f5 bcb2 b.w 1001742a +10021ac6: f104 0018 add.w r0, r4, #24 +10021aca: f7f5 fcc9 bl 10017460 +10021ace: 2338 movs r3, #56 ; 0x38 +10021ad0: 80a3 strh r3, [r4, #4] +10021ad2: 2314 movs r3, #20 +10021ad4: 60e3 str r3, [r4, #12] +10021ad6: 2300 movs r3, #0 +10021ad8: 6123 str r3, [r4, #16] +10021ada: 6163 str r3, [r4, #20] +10021adc: 230c movs r3, #12 +10021ade: 60a5 str r5, [r4, #8] +10021ae0: 802b strh r3, [r5, #0] +10021ae2: 230b movs r3, #11 +10021ae4: 70ab strb r3, [r5, #2] +10021ae6: f506 60a3 add.w r0, r6, #1304 ; 0x518 +10021aea: f7f5 fdf3 bl 100176d4 +10021aee: 4641 mov r1, r8 +10021af0: 70e8 strb r0, [r5, #3] +10021af2: 2206 movs r2, #6 +10021af4: f105 0008 add.w r0, r5, #8 +10021af8: f7f5 fc9a bl 10017430 +10021afc: 612f str r7, [r5, #16] +10021afe: f606 1008 addw r0, r6, #2312 ; 0x908 +10021b02: 4621 mov r1, r4 +10021b04: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +10021b08: f7fa bd51 b.w 1001c5ae +10021b0c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10021b10 : +10021b10: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10021b14: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 +10021b18: 6f8f ldr r7, [r1, #120] ; 0x78 +10021b1a: f003 0303 and.w r3, r3, #3 +10021b1e: 6f09 ldr r1, [r1, #112] ; 0x70 +10021b20: b0bd sub sp, #244 ; 0xf4 +10021b22: 2b03 cmp r3, #3 +10021b24: 4605 mov r5, r0 +10021b26: 9104 str r1, [sp, #16] +10021b28: d007 beq.n 10021b3a +10021b2a: f8d5 3680 ldr.w r3, [r5, #1664] ; 0x680 +10021b2e: f003 0303 and.w r3, r3, #3 +10021b32: 2b03 cmp r3, #3 +10021b34: f040 82e5 bne.w 10022102 +10021b38: e006 b.n 10021b48 +10021b3a: f44f 6108 mov.w r1, #2176 ; 0x880 +10021b3e: f7fc fd25 bl 1001e58c +10021b42: 2800 cmp r0, #0 +10021b44: d0f1 beq.n 10021b2a +10021b46: e2c4 b.n 100220d2 +10021b48: f8b7 a000 ldrh.w sl, [r7] +10021b4c: 9a04 ldr r2, [sp, #16] +10021b4e: f01a 0afc ands.w sl, sl, #252 ; 0xfc +10021b52: bf14 ite ne +10021b54: f04f 090a movne.w r9, #10 +10021b58: f04f 0904 moveq.w r9, #4 +10021b5c: f109 0818 add.w r8, r9, #24 +10021b60: 4542 cmp r2, r8 +10021b62: f0c0 82ce bcc.w 10022102 +10021b66: f107 060a add.w r6, r7, #10 +10021b6a: f505 6046 add.w r0, r5, #3168 ; 0xc60 +10021b6e: 4631 mov r1, r6 +10021b70: f006 fba0 bl 100282b4 +10021b74: 4604 mov r4, r0 +10021b76: 2800 cmp r0, #0 +10021b78: f000 82ad beq.w 100220d6 +10021b7c: 7e3b ldrb r3, [r7, #24] +10021b7e: 7e79 ldrb r1, [r7, #25] +10021b80: 9a04 ldr r2, [sp, #16] +10021b82: ea43 2101 orr.w r1, r3, r1, lsl #8 +10021b86: f1a2 0318 sub.w r3, r2, #24 +10021b8a: ebc9 0903 rsb r9, r9, r3 +10021b8e: 4b9a ldr r3, [pc, #616] ; (10021df8 ) +10021b90: eb07 0b08 add.w fp, r7, r8 +10021b94: 681b ldr r3, [r3, #0] +10021b96: b14b cbz r3, 10021bac +10021b98: 4898 ldr r0, [pc, #608] ; (10021dfc ) +10021b9a: 9103 str r1, [sp, #12] +10021b9c: f7f8 fff0 bl 1001ab80 +10021ba0: 4b97 ldr r3, [pc, #604] ; (10021e00 ) +10021ba2: f8d3 0138 ldr.w r0, [r3, #312] ; 0x138 +10021ba6: f7f8 ffeb bl 1001ab80 +10021baa: 9903 ldr r1, [sp, #12] +10021bac: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 +10021bb0: 0558 lsls r0, r3, #21 +10021bb2: d405 bmi.n 10021bc0 +10021bb4: 045a lsls r2, r3, #17 +10021bb6: f140 828e bpl.w 100220d6 +10021bba: f423 4380 bic.w r3, r3, #16384 ; 0x4000 +10021bbe: e001 b.n 10021bc4 +10021bc0: f423 6380 bic.w r3, r3, #1024 ; 0x400 +10021bc4: f443 5300 orr.w r3, r3, #8192 ; 0x2000 +10021bc8: f8c4 30f8 str.w r3, [r4, #248] ; 0xf8 +10021bcc: f8a4 12c4 strh.w r1, [r4, #708] ; 0x2c4 +10021bd0: 4658 mov r0, fp +10021bd2: 4649 mov r1, r9 +10021bd4: aa0e add r2, sp, #56 ; 0x38 +10021bd6: 2301 movs r3, #1 +10021bd8: f01c feb6 bl 1003e948 <__rtw_ieee802_11_parse_elems_veneer> +10021bdc: 3001 adds r0, #1 +10021bde: f000 8292 beq.w 10022106 +10021be2: 9b0e ldr r3, [sp, #56] ; 0x38 +10021be4: 2b00 cmp r3, #0 +10021be6: f000 828e beq.w 10022106 +10021bea: 44b8 add r8, r7 +10021bec: 464b mov r3, r9 +10021bee: 4640 mov r0, r8 +10021bf0: 2100 movs r1, #0 +10021bf2: aa07 add r2, sp, #28 +10021bf4: f01c fe34 bl 1003e860 <__rtw_get_ie_veneer> +10021bf8: 9b07 ldr r3, [sp, #28] +10021bfa: 4606 mov r6, r0 +10021bfc: 2b00 cmp r3, #0 +10021bfe: f000 8282 beq.w 10022106 +10021c02: 3002 adds r0, #2 +10021c04: f105 01a8 add.w r1, r5, #168 ; 0xa8 +10021c08: f8d5 20a4 ldr.w r2, [r5, #164] ; 0xa4 +10021c0c: f7f5 fc18 bl 10017440 +10021c10: b120 cbz r0, 10021c1c +10021c12: f1d6 0101 rsbs r1, r6, #1 +10021c16: bf38 it cc +10021c18: 2100 movcc r1, #0 +10021c1a: e000 b.n 10021c1e +10021c1c: 2101 movs r1, #1 +10021c1e: f8d5 20a4 ldr.w r2, [r5, #164] ; 0xa4 +10021c22: 9b07 ldr r3, [sp, #28] +10021c24: 4293 cmp r3, r2 +10021c26: f040 826e bne.w 10022106 +10021c2a: 2900 cmp r1, #0 +10021c2c: f040 826b bne.w 10022106 +10021c30: 2101 movs r1, #1 +10021c32: 4640 mov r0, r8 +10021c34: aa07 add r2, sp, #28 +10021c36: 464b mov r3, r9 +10021c38: f01c fe12 bl 1003e860 <__rtw_get_ie_veneer> +10021c3c: 4601 mov r1, r0 +10021c3e: a80a add r0, sp, #40 ; 0x28 +10021c40: b931 cbnz r1, 10021c50 +10021c42: f105 01fc add.w r1, r5, #252 ; 0xfc +10021c46: 2210 movs r2, #16 +10021c48: f7f5 fbf2 bl 10017430 +10021c4c: 2610 movs r6, #16 +10021c4e: e016 b.n 10021c7e +10021c50: 3102 adds r1, #2 +10021c52: 9a07 ldr r2, [sp, #28] +10021c54: f7f5 fbec bl 10017430 +10021c58: 2132 movs r1, #50 ; 0x32 +10021c5a: 4640 mov r0, r8 +10021c5c: aa07 add r2, sp, #28 +10021c5e: 464b mov r3, r9 +10021c60: 9e07 ldr r6, [sp, #28] +10021c62: f01c fdfd bl 1003e860 <__rtw_get_ie_veneer> +10021c66: 4601 mov r1, r0 +10021c68: b148 cbz r0, 10021c7e +10021c6a: 2e10 cmp r6, #16 +10021c6c: d807 bhi.n 10021c7e +10021c6e: a80a add r0, sp, #40 ; 0x28 +10021c70: 4430 add r0, r6 +10021c72: 3102 adds r1, #2 +10021c74: 9a07 ldr r2, [sp, #28] +10021c76: f7f5 fbdb bl 10017430 +10021c7a: 9b07 ldr r3, [sp, #28] +10021c7c: 441e add r6, r3 +10021c7e: f504 7bac add.w fp, r4, #344 ; 0x158 +10021c82: 4632 mov r2, r6 +10021c84: 4658 mov r0, fp +10021c86: a90a add r1, sp, #40 ; 0x28 +10021c88: f8c4 6168 str.w r6, [r4, #360] ; 0x168 +10021c8c: f7f5 fbd0 bl 10017430 +10021c90: 4658 mov r0, fp +10021c92: f8d4 1168 ldr.w r1, [r4, #360] ; 0x168 +10021c96: f006 fc97 bl 100285c8 +10021c9a: 2300 movs r3, #0 +10021c9c: f204 22e5 addw r2, r4, #741 ; 0x2e5 +10021ca0: f8c4 32cc str.w r3, [r4, #716] ; 0x2cc +10021ca4: f8c4 32d0 str.w r3, [r4, #720] ; 0x2d0 +10021ca8: f8c4 32d4 str.w r3, [r4, #724] ; 0x2d4 +10021cac: f8c4 32d8 str.w r3, [r4, #728] ; 0x2d8 +10021cb0: f8c4 32dc str.w r3, [r4, #732] ; 0x2dc +10021cb4: f8c4 32e0 str.w r3, [r4, #736] ; 0x2e0 +10021cb8: 9205 str r2, [sp, #20] +10021cba: 4610 mov r0, r2 +10021cbc: 4619 mov r1, r3 +10021cbe: 2220 movs r2, #32 +10021cc0: 9303 str r3, [sp, #12] +10021cc2: f7f5 fbc5 bl 10017450 +10021cc6: f8d5 2e44 ldr.w r2, [r5, #3652] ; 0xe44 +10021cca: 9b03 ldr r3, [sp, #12] +10021ccc: f012 0f02 tst.w r2, #2 +10021cd0: d025 beq.n 10021d1e +10021cd2: 9e24 ldr r6, [sp, #144] ; 0x90 +10021cd4: b31e cbz r6, 10021d1e +10021cd6: f89d b094 ldrb.w fp, [sp, #148] ; 0x94 +10021cda: 9308 str r3, [sp, #32] +10021cdc: 9309 str r3, [sp, #36] ; 0x24 +10021cde: 9300 str r3, [sp, #0] +10021ce0: 1eb0 subs r0, r6, #2 +10021ce2: f10b 0102 add.w r1, fp, #2 +10021ce6: aa08 add r2, sp, #32 +10021ce8: ab09 add r3, sp, #36 ; 0x24 +10021cea: f01c fdf5 bl 1003e8d8 <__rtw_parse_wpa2_ie_veneer> +10021cee: 2801 cmp r0, #1 +10021cf0: f040 81f7 bne.w 100220e2 +10021cf4: f8d4 32d0 ldr.w r3, [r4, #720] ; 0x2d0 +10021cf8: f8c4 02cc str.w r0, [r4, #716] ; 0x2cc +10021cfc: f043 0302 orr.w r3, r3, #2 +10021d00: f8c4 32d0 str.w r3, [r4, #720] ; 0x2d0 +10021d04: 9a08 ldr r2, [sp, #32] +10021d06: f8d5 3e4c ldr.w r3, [r5, #3660] ; 0xe4c +10021d0a: 401a ands r2, r3 +10021d0c: f8c4 22d8 str.w r2, [r4, #728] ; 0x2d8 +10021d10: f8d5 3e54 ldr.w r3, [r5, #3668] ; 0xe54 +10021d14: 9909 ldr r1, [sp, #36] ; 0x24 +10021d16: 400b ands r3, r1 +10021d18: f8c4 32e0 str.w r3, [r4, #736] ; 0x2e0 +10021d1c: e029 b.n 10021d72 +10021d1e: f012 0c01 ands.w ip, r2, #1 +10021d22: f04f 0300 mov.w r3, #0 +10021d26: d02f beq.n 10021d88 +10021d28: 9e22 ldr r6, [sp, #136] ; 0x88 +10021d2a: b386 cbz r6, 10021d8e +10021d2c: f89d b08c ldrb.w fp, [sp, #140] ; 0x8c +10021d30: 9308 str r3, [sp, #32] +10021d32: 9309 str r3, [sp, #36] ; 0x24 +10021d34: 9300 str r3, [sp, #0] +10021d36: 1eb0 subs r0, r6, #2 +10021d38: f10b 0102 add.w r1, fp, #2 +10021d3c: aa08 add r2, sp, #32 +10021d3e: ab09 add r3, sp, #36 ; 0x24 +10021d40: f01c fdea bl 1003e918 <__rtw_parse_wpa_ie_veneer> +10021d44: 2801 cmp r0, #1 +10021d46: f040 81cc bne.w 100220e2 +10021d4a: f8d4 32d0 ldr.w r3, [r4, #720] ; 0x2d0 +10021d4e: f8c4 02cc str.w r0, [r4, #716] ; 0x2cc +10021d52: f043 0301 orr.w r3, r3, #1 +10021d56: f8c4 32d0 str.w r3, [r4, #720] ; 0x2d0 +10021d5a: 9a08 ldr r2, [sp, #32] +10021d5c: f8d5 3e48 ldr.w r3, [r5, #3656] ; 0xe48 +10021d60: 401a ands r2, r3 +10021d62: f8c4 22d4 str.w r2, [r4, #724] ; 0x2d4 +10021d66: f8d5 3e50 ldr.w r3, [r5, #3664] ; 0xe50 +10021d6a: 9909 ldr r1, [sp, #36] ; 0x24 +10021d6c: 400b ands r3, r1 +10021d6e: f8c4 32dc str.w r3, [r4, #732] ; 0x2dc +10021d72: 2a00 cmp r2, #0 +10021d74: bf14 ite ne +10021d76: 2100 movne r1, #0 +10021d78: 2129 moveq r1, #41 ; 0x29 +10021d7a: b90b cbnz r3, 10021d80 +10021d7c: 212a movs r1, #42 ; 0x2a +10021d7e: e1b3 b.n 100220e8 +10021d80: 2900 cmp r1, #0 +10021d82: f040 81b1 bne.w 100220e8 +10021d86: e003 b.n 10021d90 +10021d88: 46e3 mov fp, ip +10021d8a: 4666 mov r6, ip +10021d8c: e000 b.n 10021d90 +10021d8e: 46b3 mov fp, r6 +10021d90: f8d4 32c8 ldr.w r3, [r4, #712] ; 0x2c8 +10021d94: f8d5 2e44 ldr.w r2, [r5, #3652] ; 0xe44 +10021d98: f423 5340 bic.w r3, r3, #12288 ; 0x3000 +10021d9c: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 +10021da0: bb06 cbnz r6, 10021de4 +10021da2: 992a ldr r1, [sp, #168] ; 0xa8 +10021da4: b111 cbz r1, 10021dac +10021da6: f443 5380 orr.w r3, r3, #4096 ; 0x1000 +10021daa: e001 b.n 10021db0 +10021dac: f443 5300 orr.w r3, r3, #8192 ; 0x2000 +10021db0: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 +10021db4: b37a cbz r2, 10021e16 +10021db6: f8d4 32c8 ldr.w r3, [r4, #712] ; 0x2c8 +10021dba: f413 5f40 tst.w r3, #12288 ; 0x3000 +10021dbe: d02a beq.n 10021e16 +10021dc0: f8d5 04c4 ldr.w r0, [r5, #1220] ; 0x4c4 +10021dc4: b338 cbz r0, 10021e16 +10021dc6: 2200 movs r2, #0 +10021dc8: ab3c add r3, sp, #240 ; 0xf0 +10021dca: f803 2dcc strb.w r2, [r3, #-204]! +10021dce: f8d5 14d0 ldr.w r1, [r5, #1232] ; 0x4d0 +10021dd2: 9200 str r2, [sp, #0] +10021dd4: f241 0241 movw r2, #4161 ; 0x1041 +10021dd8: f01c fda2 bl 1003e920 <__rtw_get_wps_attr_content_veneer> +10021ddc: f89d 3024 ldrb.w r3, [sp, #36] ; 0x24 +10021de0: b9cb cbnz r3, 10021e16 +10021de2: e180 b.n 100220e6 +10021de4: 2a00 cmp r2, #0 +10021de6: f000 817c beq.w 100220e2 +10021dea: 9a2a ldr r2, [sp, #168] ; 0xa8 +10021dec: b152 cbz r2, 10021e04 +10021dee: f443 5380 orr.w r3, r3, #4096 ; 0x1000 +10021df2: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 +10021df6: e00e b.n 10021e16 +10021df8: 10044f38 .word 0x10044f38 +10021dfc: 100429b1 .word 0x100429b1 +10021e00: 10043ac4 .word 0x10043ac4 +10021e04: f10b 0202 add.w r2, fp, #2 +10021e08: 9805 ldr r0, [sp, #20] +10021e0a: 1eb1 subs r1, r6, #2 +10021e0c: 2a20 cmp r2, #32 +10021e0e: bf28 it cs +10021e10: 2220 movcs r2, #32 +10021e12: f7f5 fb0d bl 10017430 +10021e16: f8d4 32c8 ldr.w r3, [r4, #712] ; 0x2c8 +10021e1a: 2201 movs r2, #1 +10021e1c: f423 7300 bic.w r3, r3, #512 ; 0x200 +10021e20: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 +10021e24: 2300 movs r3, #0 +10021e26: f884 3310 strb.w r3, [r4, #784] ; 0x310 +10021e2a: f884 2316 strb.w r2, [r4, #790] ; 0x316 +10021e2e: f884 3315 strb.w r3, [r4, #789] ; 0x315 +10021e32: f884 3314 strb.w r3, [r4, #788] ; 0x314 +10021e36: f884 3313 strb.w r3, [r4, #787] ; 0x313 +10021e3a: f884 3312 strb.w r3, [r4, #786] ; 0x312 +10021e3e: f8d5 244c ldr.w r2, [r5, #1100] ; 0x44c +10021e42: f8c4 3104 str.w r3, [r4, #260] ; 0x104 +10021e46: 2a00 cmp r2, #0 +10021e48: d058 beq.n 10021efc +10021e4a: 9307 str r3, [sp, #28] +10021e4c: 4640 mov r0, r8 +10021e4e: 21dd movs r1, #221 ; 0xdd +10021e50: aa07 add r2, sp, #28 +10021e52: 464b mov r3, r9 +10021e54: f01c fd04 bl 1003e860 <__rtw_get_ie_veneer> +10021e58: 4606 mov r6, r0 +10021e5a: 2800 cmp r0, #0 +10021e5c: d04e beq.n 10021efc +10021e5e: 3002 adds r0, #2 +10021e60: 49ab ldr r1, [pc, #684] ; (10022110 ) +10021e62: 2206 movs r2, #6 +10021e64: f7f5 faec bl 10017440 +10021e68: 2800 cmp r0, #0 +10021e6a: d042 beq.n 10021ef2 +10021e6c: f8d4 32c8 ldr.w r3, [r4, #712] ; 0x2c8 +10021e70: 2101 movs r1, #1 +10021e72: f443 7300 orr.w r3, r3, #512 ; 0x200 +10021e76: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 +10021e7a: f8c4 1104 str.w r1, [r4, #260] ; 0x104 +10021e7e: 7a33 ldrb r3, [r6, #8] +10021e80: f3c3 1241 ubfx r2, r3, #5, #2 +10021e84: f884 2311 strb.w r2, [r4, #785] ; 0x311 +10021e88: f003 020f and.w r2, r3, #15 +10021e8c: 2a0f cmp r2, #15 +10021e8e: f884 3310 strb.w r3, [r4, #784] ; 0x310 +10021e92: d003 beq.n 10021e9c +10021e94: f884 1316 strb.w r1, [r4, #790] ; 0x316 +10021e98: b382 cbz r2, 10021efc +10021e9a: e002 b.n 10021ea2 +10021e9c: 2200 movs r2, #0 +10021e9e: f884 2316 strb.w r2, [r4, #790] ; 0x316 +10021ea2: f013 0201 ands.w r2, r3, #1 +10021ea6: bf18 it ne +10021ea8: 2203 movne r2, #3 +10021eaa: f884 2315 strb.w r2, [r4, #789] ; 0x315 +10021eae: f003 0202 and.w r2, r3, #2 +10021eb2: f002 01ff and.w r1, r2, #255 ; 0xff +10021eb6: b11a cbz r2, 10021ec0 +10021eb8: 2203 movs r2, #3 +10021eba: f884 2314 strb.w r2, [r4, #788] ; 0x314 +10021ebe: e001 b.n 10021ec4 +10021ec0: f884 1314 strb.w r1, [r4, #788] ; 0x314 +10021ec4: f003 0204 and.w r2, r3, #4 +10021ec8: f002 01ff and.w r1, r2, #255 ; 0xff +10021ecc: b11a cbz r2, 10021ed6 +10021ece: 2203 movs r2, #3 +10021ed0: f884 2312 strb.w r2, [r4, #786] ; 0x312 +10021ed4: e001 b.n 10021eda +10021ed6: f884 1312 strb.w r1, [r4, #786] ; 0x312 +10021eda: f003 0308 and.w r3, r3, #8 +10021ede: f003 02ff and.w r2, r3, #255 ; 0xff +10021ee2: b11b cbz r3, 10021eec +10021ee4: 2303 movs r3, #3 +10021ee6: f884 3313 strb.w r3, [r4, #787] ; 0x313 +10021eea: e007 b.n 10021efc +10021eec: f884 2313 strb.w r2, [r4, #787] ; 0x313 +10021ef0: e004 b.n 10021efc +10021ef2: 9b07 ldr r3, [sp, #28] +10021ef4: 3302 adds r3, #2 +10021ef6: eb06 0803 add.w r8, r6, r3 +10021efa: e7a7 b.n 10021e4c +10021efc: f204 2602 addw r6, r4, #514 ; 0x202 +10021f00: 2100 movs r1, #0 +10021f02: 4630 mov r0, r6 +10021f04: 221a movs r2, #26 +10021f06: f7f5 faa3 bl 10017450 +10021f0a: 9936 ldr r1, [sp, #216] ; 0xd8 +10021f0c: f8d4 32c8 ldr.w r3, [r4, #712] ; 0x2c8 +10021f10: b161 cbz r1, 10021f2c +10021f12: f89d 20dc ldrb.w r2, [sp, #220] ; 0xdc +10021f16: 2a19 cmp r2, #25 +10021f18: d908 bls.n 10021f2c +10021f1a: f443 6320 orr.w r3, r3, #2560 ; 0xa00 +10021f1e: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 +10021f22: 4630 mov r0, r6 +10021f24: 221a movs r2, #26 +10021f26: f7f5 fa83 bl 10017430 +10021f2a: e003 b.n 10021f34 +10021f2c: f423 6300 bic.w r3, r3, #2048 ; 0x800 +10021f30: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 +10021f34: f8d5 3454 ldr.w r3, [r5, #1108] ; 0x454 +10021f38: f8d4 22c8 ldr.w r2, [r4, #712] ; 0x2c8 +10021f3c: b913 cbnz r3, 10021f44 +10021f3e: 0510 lsls r0, r2, #20 +10021f40: f100 80e1 bmi.w 10022106 +10021f44: f8d4 1168 ldr.w r1, [r4, #360] ; 0x168 +10021f48: f042 4300 orr.w r3, r2, #2147483648 ; 0x80000000 +10021f4c: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 +10021f50: 4421 add r1, r4 +10021f52: 4623 mov r3, r4 +10021f54: 428b cmp r3, r1 +10021f56: d00a beq.n 10021f6e +10021f58: f893 0158 ldrb.w r0, [r3, #344] ; 0x158 +10021f5c: 3301 adds r3, #1 +10021f5e: f000 007f and.w r0, r0, #127 ; 0x7f +10021f62: 2816 cmp r0, #22 +10021f64: ddf6 ble.n 10021f54 +10021f66: f022 4200 bic.w r2, r2, #2147483648 ; 0x80000000 +10021f6a: f8c4 22c8 str.w r2, [r4, #712] ; 0x2c8 +10021f6e: f8b4 32c4 ldrh.w r3, [r4, #708] ; 0x2c4 +10021f72: f013 0f20 tst.w r3, #32 +10021f76: f8d4 32c8 ldr.w r3, [r4, #712] ; 0x2c8 +10021f7a: bf14 ite ne +10021f7c: f043 0380 orrne.w r3, r3, #128 ; 0x80 +10021f80: f023 0380 biceq.w r3, r3, #128 ; 0x80 +10021f84: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 +10021f88: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc +10021f8c: b9bb cbnz r3, 10021fbe +10021f8e: 2301 movs r3, #1 +10021f90: f8c4 30fc str.w r3, [r4, #252] ; 0xfc +10021f94: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc +10021f98: 2b05 cmp r3, #5 +10021f9a: d804 bhi.n 10021fa6 +10021f9c: eb05 0283 add.w r2, r5, r3, lsl #2 +10021fa0: f8d2 2ce4 ldr.w r2, [r2, #3300] ; 0xce4 +10021fa4: b94a cbnz r2, 10021fba +10021fa6: f8b5 2d00 ldrh.w r2, [r5, #3328] ; 0xd00 +10021faa: 4293 cmp r3, r2 +10021fac: f200 809b bhi.w 100220e6 +10021fb0: eb05 0383 add.w r3, r5, r3, lsl #2 +10021fb4: f8c3 4ce4 str.w r4, [r3, #3300] ; 0xce4 +10021fb8: e001 b.n 10021fbe +10021fba: 3301 adds r3, #1 +10021fbc: e7e8 b.n 10021f90 +10021fbe: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 +10021fc2: f605 46d8 addw r6, r5, #3288 ; 0xcd8 +10021fc6: f423 5300 bic.w r3, r3, #8192 ; 0x2000 +10021fca: f443 4380 orr.w r3, r3, #16384 ; 0x4000 +10021fce: 4630 mov r0, r6 +10021fd0: f8c4 30f8 str.w r3, [r4, #248] ; 0xf8 +10021fd4: a909 add r1, sp, #36 ; 0x24 +10021fd6: f504 7809 add.w r8, r4, #548 ; 0x224 +10021fda: f7f5 fb05 bl 100175e8 +10021fde: 4640 mov r0, r8 +10021fe0: f7f5 fa41 bl 10017466 +10021fe4: b910 cbnz r0, 10021fec +10021fe6: 4640 mov r0, r8 +10021fe8: f7f5 fa4e bl 10017488 +10021fec: 4630 mov r0, r6 +10021fee: a909 add r1, sp, #36 ; 0x24 +10021ff0: f605 46d4 addw r6, r5, #3284 ; 0xcd4 +10021ff4: f7f5 fb02 bl 100175fc +10021ff8: f504 7807 add.w r8, r4, #540 ; 0x21c +10021ffc: 4630 mov r0, r6 +10021ffe: a909 add r1, sp, #36 ; 0x24 +10022000: f7f5 faf2 bl 100175e8 +10022004: 4640 mov r0, r8 +10022006: f7f5 fa2e bl 10017466 +1002200a: b140 cbz r0, 1002201e +1002200c: f8d5 3ce4 ldr.w r3, [r5, #3300] ; 0xce4 +10022010: 4640 mov r0, r8 +10022012: f8c4 322c str.w r3, [r4, #556] ; 0x22c +10022016: f605 41c4 addw r1, r5, #3268 ; 0xcc4 +1002201a: f7f5 fa2f bl 1001747c +1002201e: a909 add r1, sp, #36 ; 0x24 +10022020: 4630 mov r0, r6 +10022022: f7f5 faeb bl 100175fc +10022026: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 +1002202a: 0459 lsls r1, r3, #17 +1002202c: d551 bpl.n 100220d2 +1002202e: 4628 mov r0, r5 +10022030: 4621 mov r1, r4 +10022032: f7f9 fcde bl 1001b9f2 +10022036: 4628 mov r0, r5 +10022038: 4621 mov r1, r4 +1002203a: f7f9 ffc5 bl 1001bfc8 +1002203e: f241 3385 movw r3, #4997 ; 0x1385 +10022042: 5ceb ldrb r3, [r5, r3] +10022044: f504 7684 add.w r6, r4, #264 ; 0x108 +10022048: b933 cbnz r3, 10022058 +1002204a: 463a mov r2, r7 +1002204c: 9f04 ldr r7, [sp, #16] +1002204e: 4628 mov r0, r5 +10022050: 4631 mov r1, r6 +10022052: b2bb uxth r3, r7 +10022054: f011 fdd8 bl 10033c08 +10022058: 4628 mov r0, r5 +1002205a: 4631 mov r1, r6 +1002205c: f8d4 20fc ldr.w r2, [r4, #252] ; 0xfc +10022060: f7ff fd1c bl 10021a9c +10022064: 4628 mov r0, r5 +10022066: f1ba 0f00 cmp.w sl, #0 +1002206a: d103 bne.n 10022074 +1002206c: 4651 mov r1, sl +1002206e: 4622 mov r2, r4 +10022070: 2310 movs r3, #16 +10022072: e002 b.n 1002207a +10022074: 2100 movs r1, #0 +10022076: 4622 mov r2, r4 +10022078: 2330 movs r3, #48 ; 0x30 +1002207a: f7fd fd37 bl 1001faec +1002207e: f8d4 32d0 ldr.w r3, [r4, #720] ; 0x2d0 +10022082: b333 cbz r3, 100220d2 +10022084: f241 3385 movw r3, #4997 ; 0x1385 +10022088: 5ceb ldrb r3, [r5, r3] +1002208a: bb13 cbnz r3, 100220d2 +1002208c: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc +10022090: f203 138b addw r3, r3, #395 ; 0x18b +10022094: eb05 0383 add.w r3, r5, r3, lsl #2 +10022098: f8d3 6d08 ldr.w r6, [r3, #3336] ; 0xd08 +1002209c: 6833 ldr r3, [r6, #0] +1002209e: b9c3 cbnz r3, 100220d2 +100220a0: 4628 mov r0, r5 +100220a2: 4621 mov r1, r4 +100220a4: f002 fc24 bl 100248f0 +100220a8: f8d4 32d0 ldr.w r3, [r4, #720] ; 0x2d0 +100220ac: 079a lsls r2, r3, #30 +100220ae: d504 bpl.n 100220ba +100220b0: f8d5 3d64 ldr.w r3, [r5, #3428] ; 0xd64 +100220b4: 7433 strb r3, [r6, #16] +100220b6: 2302 movs r3, #2 +100220b8: e005 b.n 100220c6 +100220ba: 07db lsls r3, r3, #31 +100220bc: d504 bpl.n 100220c8 +100220be: f8d5 3d64 ldr.w r3, [r5, #3428] ; 0xd64 +100220c2: 7433 strb r3, [r6, #16] +100220c4: 2301 movs r3, #1 +100220c6: 60b3 str r3, [r6, #8] +100220c8: 4628 mov r0, r5 +100220ca: 4621 mov r1, r4 +100220cc: 2200 movs r2, #0 +100220ce: f002 fcb3 bl 10024a38 +100220d2: 2001 movs r0, #1 +100220d4: e019 b.n 1002210a +100220d6: 4628 mov r0, r5 +100220d8: 4631 mov r1, r6 +100220da: 2206 movs r2, #6 +100220dc: f7fe f932 bl 10020344 +100220e0: e00f b.n 10022102 +100220e2: 2128 movs r1, #40 ; 0x28 +100220e4: e000 b.n 100220e8 +100220e6: 2111 movs r1, #17 +100220e8: 2600 movs r6, #0 +100220ea: f8c4 60fc str.w r6, [r4, #252] ; 0xfc +100220ee: 4628 mov r0, r5 +100220f0: 4622 mov r2, r4 +100220f2: f1ba 0f00 cmp.w sl, #0 +100220f6: d101 bne.n 100220fc +100220f8: 2310 movs r3, #16 +100220fa: e000 b.n 100220fe +100220fc: 2330 movs r3, #48 ; 0x30 +100220fe: f7fd fcf5 bl 1001faec +10022102: 2000 movs r0, #0 +10022104: e001 b.n 1002210a +10022106: 2101 movs r1, #1 +10022108: e7ee b.n 100220e8 +1002210a: b03d add sp, #244 ; 0xf4 +1002210c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10022110: 100414af .word 0x100414af + +10022114 : +10022114: b5f0 push {r4, r5, r6, r7, lr} +10022116: 6887 ldr r7, [r0, #8] +10022118: 2300 movs r3, #0 +1002211a: f897 c010 ldrb.w ip, [r7, #16] +1002211e: 461e mov r6, r3 +10022120: 461d mov r5, r3 +10022122: 4619 mov r1, r3 +10022124: 4618 mov r0, r3 +10022126: 4563 cmp r3, ip +10022128: da13 bge.n 10022152 +1002212a: eb07 0283 add.w r2, r7, r3, lsl #2 +1002212e: 6892 ldr r2, [r2, #8] +10022130: b16a cbz r2, 1002214e +10022132: f502 54c3 add.w r4, r2, #6240 ; 0x1860 +10022136: 340a adds r4, #10 +10022138: 7824 ldrb r4, [r4, #0] +1002213a: b91c cbnz r4, 10022144 +1002213c: f502 65d0 add.w r5, r2, #1664 ; 0x680 +10022140: 4610 mov r0, r2 +10022142: e004 b.n 1002214e +10022144: 2c01 cmp r4, #1 +10022146: bf04 itt eq +10022148: f502 66d0 addeq.w r6, r2, #1664 ; 0x680 +1002214c: 4611 moveq r1, r2 +1002214e: 3301 adds r3, #1 +10022150: e7e9 b.n 10022126 +10022152: b300 cbz r0, 10022196 +10022154: b1d1 cbz r1, 1002218c +10022156: 6830 ldr r0, [r6, #0] +10022158: f000 0303 and.w r3, r0, #3 +1002215c: 2b03 cmp r3, #3 +1002215e: d017 beq.n 10022190 +10022160: f244 0303 movw r3, #16387 ; 0x4003 +10022164: 4003 ands r3, r0 +10022166: f244 0202 movw r2, #16386 ; 0x4002 +1002216a: 4293 cmp r3, r2 +1002216c: d102 bne.n 10022174 +1002216e: 690b ldr r3, [r1, #16] +10022170: 05da lsls r2, r3, #23 +10022172: d50d bpl.n 10022190 +10022174: f410 4080 ands.w r0, r0, #16384 ; 0x4000 +10022178: d00d beq.n 10022196 +1002217a: 6828 ldr r0, [r5, #0] +1002217c: 0443 lsls r3, r0, #17 +1002217e: d409 bmi.n 10022194 +10022180: f000 0003 and.w r0, r0, #3 +10022184: 3803 subs r0, #3 +10022186: bf18 it ne +10022188: 2001 movne r0, #1 +1002218a: bdf0 pop {r4, r5, r6, r7, pc} +1002218c: 4608 mov r0, r1 +1002218e: bdf0 pop {r4, r5, r6, r7, pc} +10022190: 2001 movs r0, #1 +10022192: bdf0 pop {r4, r5, r6, r7, pc} +10022194: 2000 movs r0, #0 +10022196: bdf0 pop {r4, r5, r6, r7, pc} + +10022198 : +10022198: b5f8 push {r3, r4, r5, r6, r7, lr} +1002219a: 4605 mov r5, r0 +1002219c: 460c mov r4, r1 +1002219e: f006 fcc3 bl 10028b28 +100221a2: f8d5 3454 ldr.w r3, [r5, #1108] ; 0x454 +100221a6: f205 765a addw r6, r5, #1882 ; 0x75a +100221aa: b183 cbz r3, 100221ce +100221ac: f8d5 3458 ldr.w r3, [r5, #1112] ; 0x458 +100221b0: 2701 movs r7, #1 +100221b2: f8c4 71f4 str.w r7, [r4, #500] ; 0x1f4 +100221b6: f8c4 31f8 str.w r3, [r4, #504] ; 0x1f8 +100221ba: 4628 mov r0, r5 +100221bc: 4631 mov r1, r6 +100221be: f006 feb3 bl 10028f28 +100221c2: b108 cbz r0, 100221c8 +100221c4: f884 71fe strb.w r7, [r4, #510] ; 0x1fe +100221c8: f8c4 7104 str.w r7, [r4, #260] ; 0x104 +100221cc: e007 b.n 100221de +100221ce: f8c4 31f4 str.w r3, [r4, #500] ; 0x1f4 +100221d2: f8c4 31f8 str.w r3, [r4, #504] ; 0x1f8 +100221d6: f884 31fe strb.w r3, [r4, #510] ; 0x1fe +100221da: f8c4 3104 str.w r3, [r4, #260] ; 0x104 +100221de: f895 351f ldrb.w r3, [r5, #1311] ; 0x51f +100221e2: f884 31fc strb.w r3, [r4, #508] ; 0x1fc +100221e6: f895 3520 ldrb.w r3, [r5, #1312] ; 0x520 +100221ea: f884 31fd strb.w r3, [r4, #509] ; 0x1fd +100221ee: 2300 movs r3, #0 +100221f0: f884 31ff strb.w r3, [r4, #511] ; 0x1ff +100221f4: f884 3200 strb.w r3, [r4, #512] ; 0x200 +100221f8: f8d5 344c ldr.w r3, [r5, #1100] ; 0x44c +100221fc: b113 cbz r3, 10022204 +100221fe: 2301 movs r3, #1 +10022200: f8c4 3104 str.w r3, [r4, #260] ; 0x104 +10022204: f204 2002 addw r0, r4, #514 ; 0x202 +10022208: 4631 mov r1, r6 +1002220a: 221a movs r2, #26 +1002220c: f7f5 f910 bl 10017430 +10022210: 2301 movs r3, #1 +10022212: f8c4 30f8 str.w r3, [r4, #248] ; 0xf8 +10022216: bdf8 pop {r3, r4, r5, r6, r7, pc} + +10022218 : +10022218: b510 push {r4, lr} +1002221a: 4604 mov r4, r0 +1002221c: f006 fac1 bl 100287a2 +10022220: b308 cbz r0, 10022266 +10022222: 4620 mov r0, r4 +10022224: 210b movs r1, #11 +10022226: 2200 movs r2, #0 +10022228: f010 f963 bl 100324f2 +1002222c: 4a19 ldr r2, [pc, #100] ; (10022294 ) +1002222e: 4620 mov r0, r4 +10022230: 2104 movs r1, #4 +10022232: f010 f95e bl 100324f2 +10022236: f241 33b5 movw r3, #5045 ; 0x13b5 +1002223a: 5ce1 ldrb r1, [r4, r3] +1002223c: 4620 mov r0, r4 +1002223e: f006 fe9f bl 10028f80 +10022242: 4620 mov r0, r4 +10022244: 2101 movs r1, #1 +10022246: f7fc f9a1 bl 1001e58c +1002224a: 2801 cmp r0, #1 +1002224c: d011 beq.n 10022272 +1002224e: 2200 movs r2, #0 +10022250: f884 251f strb.w r2, [r4, #1311] ; 0x51f +10022254: f884 2520 strb.w r2, [r4, #1312] ; 0x520 +10022258: 4620 mov r0, r4 +1002225a: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e +1002225e: 4613 mov r3, r2 +10022260: f006 fa5c bl 1002871c +10022264: e005 b.n 10022272 +10022266: 4620 mov r0, r4 +10022268: f006 fab5 bl 100287d6 +1002226c: 2800 cmp r0, #0 +1002226e: d1d8 bne.n 10022222 +10022270: bd10 pop {r4, pc} +10022272: 4620 mov r0, r4 +10022274: f006 fb24 bl 100288c0 +10022278: 2300 movs r3, #0 +1002227a: 4620 mov r0, r4 +1002227c: f8c4 3680 str.w r3, [r4, #1664] ; 0x680 +10022280: 2102 movs r1, #2 +10022282: f006 f9df bl 10028644 +10022286: f604 003c addw r0, r4, #2108 ; 0x83c +1002228a: e8bd 4010 ldmia.w sp!, {r4, lr} +1002228e: f014 bdd5 b.w 10036e3c +10022292: bf00 nop +10022294: 100414c1 .word 0x100414c1 + +10022298 <_linked_info_dump>: +10022298: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1002229a: f641 035a movw r3, #6234 ; 0x185a +1002229e: 5cc3 ldrb r3, [r0, r3] +100222a0: 2100 movs r1, #0 +100222a2: 4604 mov r4, r0 +100222a4: 9100 str r1, [sp, #0] +100222a6: b333 cbz r3, 100222f6 <_linked_info_dump+0x5e> +100222a8: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 +100222ac: f003 0303 and.w r3, r3, #3 +100222b0: 2b02 cmp r3, #2 +100222b2: d103 bne.n 100222bc <_linked_info_dump+0x24> +100222b4: 466a mov r2, sp +100222b6: f010 f933 bl 10032520 +100222ba: e016 b.n 100222ea <_linked_info_dump+0x52> +100222bc: 2b03 cmp r3, #3 +100222be: d114 bne.n 100222ea <_linked_info_dump+0x52> +100222c0: f600 46d4 addw r6, r0, #3284 ; 0xcd4 +100222c4: 4630 mov r0, r6 +100222c6: a901 add r1, sp, #4 +100222c8: f7f5 f98e bl 100175e8 +100222cc: f8d4 5cc4 ldr.w r5, [r4, #3268] ; 0xcc4 +100222d0: f604 47c4 addw r7, r4, #3268 ; 0xcc4 +100222d4: 4638 mov r0, r7 +100222d6: 4629 mov r1, r5 +100222d8: f7f5 f963 bl 100175a2 +100222dc: b908 cbnz r0, 100222e2 <_linked_info_dump+0x4a> +100222de: 682d ldr r5, [r5, #0] +100222e0: e7f8 b.n 100222d4 <_linked_info_dump+0x3c> +100222e2: 4630 mov r0, r6 +100222e4: a901 add r1, sp, #4 +100222e6: f7f5 f989 bl 100175fc +100222ea: 2200 movs r2, #0 +100222ec: 4620 mov r0, r4 +100222ee: 2102 movs r1, #2 +100222f0: 4613 mov r3, r2 +100222f2: f010 f91e bl 10032532 +100222f6: b003 add sp, #12 +100222f8: bdf0 pop {r4, r5, r6, r7, pc} + +100222fa <_linked_rx_signal_strehgth_display>: +100222fa: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 +100222fe: b513 push {r0, r1, r4, lr} +10022300: f003 0303 and.w r3, r3, #3 +10022304: 2b02 cmp r3, #2 +10022306: 4604 mov r4, r0 +10022308: d101 bne.n 1002230e <_linked_rx_signal_strehgth_display+0x14> +1002230a: 2300 movs r3, #0 +1002230c: e002 b.n 10022314 <_linked_rx_signal_strehgth_display+0x1a> +1002230e: 2b03 cmp r3, #3 +10022310: d102 bne.n 10022318 <_linked_rx_signal_strehgth_display+0x1e> +10022312: 2302 movs r3, #2 +10022314: f88d 3003 strb.w r3, [sp, #3] +10022318: f10d 0203 add.w r2, sp, #3 +1002231c: 4620 mov r0, r4 +1002231e: 210e movs r1, #14 +10022320: f010 f8fe bl 10032520 +10022324: 4620 mov r0, r4 +10022326: 2100 movs r1, #0 +10022328: aa01 add r2, sp, #4 +1002232a: f010 f8f9 bl 10032520 +1002232e: b002 add sp, #8 +10022330: bd10 pop {r4, pc} + ... + +10022334 : +10022334: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10022338: f641 035b movw r3, #6235 ; 0x185b +1002233c: 5cc3 ldrb r3, [r0, r3] +1002233e: b08b sub sp, #44 ; 0x2c +10022340: 4606 mov r6, r0 +10022342: b10b cbz r3, 10022348 +10022344: f7ff ffd9 bl 100222fa <_linked_rx_signal_strehgth_display> +10022348: 4630 mov r0, r6 +1002234a: f006 fa2a bl 100287a2 +1002234e: 2800 cmp r0, #0 +10022350: f000 80ed beq.w 1002252e +10022354: f106 0a9c add.w sl, r6, #156 ; 0x9c +10022358: f506 6046 add.w r0, r6, #3168 ; 0xc60 +1002235c: 4651 mov r1, sl +1002235e: f005 ffa9 bl 100282b4 +10022362: 4680 mov r8, r0 +10022364: 2800 cmp r0, #0 +10022366: f000 8142 beq.w 100225ee +1002236a: 4630 mov r0, r6 +1002236c: f00e fe9a bl 100310a4 +10022370: 4647 mov r7, r8 +10022372: 4641 mov r1, r8 +10022374: e9f7 2366 ldrd r2, r3, [r7, #408]! ; 0x198 +10022378: e9f1 4568 ldrd r4, r5, [r1, #416]! ; 0x1a0 +1002237c: 4683 mov fp, r0 +1002237e: 18a4 adds r4, r4, r2 +10022380: 4640 mov r0, r8 +10022382: eb45 0503 adc.w r5, r5, r3 +10022386: e9f0 236a ldrd r2, r3, [r0, #424]! ; 0x1a8 +1002238a: 1912 adds r2, r2, r4 +1002238c: eb43 0305 adc.w r3, r3, r5 +10022390: 46c4 mov ip, r8 +10022392: 9000 str r0, [sp, #0] +10022394: 4640 mov r0, r8 +10022396: e9f0 4562 ldrd r4, r5, [r0, #392]! ; 0x188 +1002239a: e9cd 2306 strd r2, r3, [sp, #24] +1002239e: e9fc 2360 ldrd r2, r3, [ip, #384]! ; 0x180 +100223a2: 1912 adds r2, r2, r4 +100223a4: 4644 mov r4, r8 +100223a6: eb43 0305 adc.w r3, r3, r5 +100223aa: e9f4 8964 ldrd r8, r9, [r4, #400]! ; 0x190 +100223ae: eb18 0802 adds.w r8, r8, r2 +100223b2: eb49 0903 adc.w r9, r9, r3 +100223b6: e9dd 2306 ldrd r2, r3, [sp, #24] +100223ba: 454b cmp r3, r9 +100223bc: bf08 it eq +100223be: 4542 cmpeq r2, r8 +100223c0: f040 8089 bne.w 100224d6 +100223c4: f1bb 0f00 cmp.w fp, #0 +100223c8: f040 8085 bne.w 100224d6 +100223cc: f896 484c ldrb.w r4, [r6, #2124] ; 0x84c +100223d0: 2c07 cmp r4, #7 +100223d2: d83e bhi.n 10022452 +100223d4: b984 cbnz r4, 100223f8 +100223d6: f106 05a4 add.w r5, r6, #164 ; 0xa4 +100223da: 4630 mov r0, r6 +100223dc: 4629 mov r1, r5 +100223de: 4622 mov r2, r4 +100223e0: f7fc fff8 bl 1001f3d4 +100223e4: 4630 mov r0, r6 +100223e6: 4629 mov r1, r5 +100223e8: 4622 mov r2, r4 +100223ea: f7fc fff3 bl 1001f3d4 +100223ee: 4630 mov r0, r6 +100223f0: 4629 mov r1, r5 +100223f2: 4622 mov r2, r4 +100223f4: f7fc ffee bl 1001f3d4 +100223f8: f896 384c ldrb.w r3, [r6, #2124] ; 0x84c +100223fc: 2b04 cmp r3, #4 +100223fe: d904 bls.n 1002240a +10022400: 4630 mov r0, r6 +10022402: 2106 movs r1, #6 +10022404: 2201 movs r2, #1 +10022406: f7fa fd81 bl 1001cf0c +1002240a: 4b7a ldr r3, [pc, #488] ; (100225f4 ) +1002240c: f896 484c ldrb.w r4, [r6, #2124] ; 0x84c +10022410: e9d3 0102 ldrd r0, r1, [r3, #8] +10022414: 2201 movs r2, #1 +10022416: 2300 movs r3, #0 +10022418: 3401 adds r4, #1 +1002241a: 4002 ands r2, r0 +1002241c: 400b ands r3, r1 +1002241e: b2e4 uxtb r4, r4 +10022420: ea52 0803 orrs.w r8, r2, r3 +10022424: f886 484c strb.w r4, [r6, #2124] ; 0x84c +10022428: d065 beq.n 100224f6 +1002242a: 4630 mov r0, r6 +1002242c: f44f 6145 mov.w r1, #3152 ; 0xc50 +10022430: 22ff movs r2, #255 ; 0xff +10022432: f010 f91c bl 1003266e +10022436: f640 210a movw r1, #2570 ; 0xa0a +1002243a: 4605 mov r5, r0 +1002243c: 22ff movs r2, #255 ; 0xff +1002243e: 4630 mov r0, r6 +10022440: f010 f915 bl 1003266e +10022444: 0061 lsls r1, r4, #1 +10022446: 4603 mov r3, r0 +10022448: 462a mov r2, r5 +1002244a: 486b ldr r0, [pc, #428] ; (100225f8 ) +1002244c: f7f8 fb98 bl 1001ab80 +10022450: e051 b.n 100224f6 +10022452: 4b6a ldr r3, [pc, #424] ; (100225fc ) +10022454: f886 b84c strb.w fp, [r6, #2124] ; 0x84c +10022458: 681b ldr r3, [r3, #0] +1002245a: b15b cbz r3, 10022474 +1002245c: 4868 ldr r0, [pc, #416] ; (10022600 ) +1002245e: f7f8 fb8f bl 1001ab80 +10022462: 4b68 ldr r3, [pc, #416] ; (10022604 ) +10022464: f8d3 4180 ldr.w r4, [r3, #384] ; 0x180 +10022468: f7f5 f8ca bl 10017600 +1002246c: 4601 mov r1, r0 +1002246e: 4620 mov r0, r4 +10022470: f7f8 fb86 bl 1001ab80 +10022474: 4630 mov r0, r6 +10022476: 4651 mov r1, sl +10022478: f64f 72ff movw r2, #65535 ; 0xffff +1002247c: f7ff f89b bl 100215b6 +10022480: 2300 movs r3, #0 +10022482: f8c6 368c str.w r3, [r6, #1676] ; 0x68c +10022486: f896 38f9 ldrb.w r3, [r6, #2297] ; 0x8f9 +1002248a: 2b00 cmp r3, #0 +1002248c: f000 80af beq.w 100225ee +10022490: f896 286e ldrb.w r2, [r6, #2158] ; 0x86e +10022494: f896 386d ldrb.w r3, [r6, #2157] ; 0x86d +10022498: 429a cmp r2, r3 +1002249a: d215 bcs.n 100224c8 +1002249c: 4b5a ldr r3, [pc, #360] ; (10022608 ) +1002249e: 781a ldrb r2, [r3, #0] +100224a0: 2a00 cmp r2, #0 +100224a2: f040 80a4 bne.w 100225ee +100224a6: 2201 movs r2, #1 +100224a8: 701a strb r2, [r3, #0] +100224aa: f8b6 3870 ldrh.w r3, [r6, #2160] ; 0x870 +100224ae: f44f 717a mov.w r1, #1000 ; 0x3e8 +100224b2: 4359 muls r1, r3 +100224b4: f506 6006 add.w r0, r6, #2144 ; 0x860 +100224b8: f014 fcbe bl 10036e38 +100224bc: f896 386e ldrb.w r3, [r6, #2158] ; 0x86e +100224c0: 3301 adds r3, #1 +100224c2: f886 386e strb.w r3, [r6, #2158] ; 0x86e +100224c6: e092 b.n 100225ee +100224c8: 4950 ldr r1, [pc, #320] ; (1002260c ) +100224ca: 4630 mov r0, r6 +100224cc: b00b add sp, #44 ; 0x2c +100224ce: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100224d2: f011 bb42 b.w 10033b5a +100224d6: 2300 movs r3, #0 +100224d8: f886 384c strb.w r3, [r6, #2124] ; 0x84c +100224dc: e9dc 2300 ldrd r2, r3, [ip] +100224e0: e9c7 2300 strd r2, r3, [r7] +100224e4: e9d0 2300 ldrd r2, r3, [r0] +100224e8: 9800 ldr r0, [sp, #0] +100224ea: e9c1 2300 strd r2, r3, [r1] +100224ee: e9d4 2300 ldrd r2, r3, [r4] +100224f2: e9c0 2300 strd r2, r3, [r0] +100224f6: f606 1458 addw r4, r6, #2392 ; 0x958 +100224fa: e9d4 231a ldrd r2, r3, [r4, #104] ; 0x68 +100224fe: e9d4 0120 ldrd r0, r1, [r4, #128] ; 0x80 +10022502: 4299 cmp r1, r3 +10022504: bf08 it eq +10022506: 4290 cmpeq r0, r2 +10022508: d10b bne.n 10022522 +1002250a: f8d6 368c ldr.w r3, [r6, #1676] ; 0x68c +1002250e: 1c5a adds r2, r3, #1 +10022510: 2b0f cmp r3, #15 +10022512: f8c6 268c str.w r2, [r6, #1676] ; 0x68c +10022516: d16a bne.n 100225ee +10022518: 4630 mov r0, r6 +1002251a: 2100 movs r1, #0 +1002251c: f7fd fdf2 bl 10020104 +10022520: e001 b.n 10022526 +10022522: e9c4 2320 strd r2, r3, [r4, #128] ; 0x80 +10022526: 2300 movs r3, #0 +10022528: f8c6 368c str.w r3, [r6, #1676] ; 0x68c +1002252c: e05f b.n 100225ee +1002252e: 4630 mov r0, r6 +10022530: f006 f943 bl 100287ba +10022534: 2800 cmp r0, #0 +10022536: d05a beq.n 100225ee +10022538: f506 67d0 add.w r7, r6, #1664 ; 0x680 +1002253c: f206 74d4 addw r4, r6, #2004 ; 0x7d4 +10022540: f506 6cdc add.w ip, r6, #1760 ; 0x6e0 +10022544: 463d mov r5, r7 +10022546: 1bab subs r3, r5, r6 +10022548: 443b add r3, r7 +1002254a: f2a3 502c subw r0, r3, #1324 ; 0x52c +1002254e: 6802 ldr r2, [r0, #0] +10022550: 2a01 cmp r2, #1 +10022552: d147 bne.n 100225e4 +10022554: f5a3 63a6 sub.w r3, r3, #1328 ; 0x530 +10022558: 6819 ldr r1, [r3, #0] +1002255a: 2900 cmp r1, #0 +1002255c: d042 beq.n 100225e4 +1002255e: f501 73c0 add.w r3, r1, #384 ; 0x180 +10022562: e9d3 8900 ldrd r8, r9, [r3] +10022566: f501 73c4 add.w r3, r1, #392 ; 0x188 +1002256a: e9d3 ab00 ldrd sl, fp, [r3] +1002256e: 6862 ldr r2, [r4, #4] +10022570: f501 73c8 add.w r3, r1, #400 ; 0x190 +10022574: e9cd 8900 strd r8, r9, [sp] +10022578: e9cd ab06 strd sl, fp, [sp, #24] +1002257c: e9d3 ab00 ldrd sl, fp, [r3] +10022580: e9dd 8906 ldrd r8, r9, [sp, #24] +10022584: 2300 movs r3, #0 +10022586: e9cd 2308 strd r2, r3, [sp, #32] +1002258a: e9dd 2300 ldrd r2, r3, [sp] +1002258e: eb18 0802 adds.w r8, r8, r2 +10022592: eb49 0903 adc.w r9, r9, r3 +10022596: eb18 020a adds.w r2, r8, sl +1002259a: eb49 030b adc.w r3, r9, fp +1002259e: e9dd 8908 ldrd r8, r9, [sp, #32] +100225a2: 4599 cmp r9, r3 +100225a4: bf08 it eq +100225a6: 4590 cmpeq r8, r2 +100225a8: d114 bne.n 100225d4 +100225aa: 68a3 ldr r3, [r4, #8] +100225ac: 2b02 cmp r3, #2 +100225ae: d802 bhi.n 100225b6 +100225b0: 3301 adds r3, #1 +100225b2: 60a3 str r3, [r4, #8] +100225b4: e016 b.n 100225e4 +100225b6: 2300 movs r3, #0 +100225b8: 60a3 str r3, [r4, #8] +100225ba: f501 7184 add.w r1, r1, #264 ; 0x108 +100225be: 6003 str r3, [r0, #0] +100225c0: f64f 72ff movw r2, #65535 ; 0xffff +100225c4: 4630 mov r0, r6 +100225c6: f8cd c014 str.w ip, [sp, #20] +100225ca: f7fe ffab bl 10021524 +100225ce: f8dd c014 ldr.w ip, [sp, #20] +100225d2: e007 b.n 100225e4 +100225d4: 2300 movs r3, #0 +100225d6: 60a3 str r3, [r4, #8] +100225d8: f8dd 9000 ldr.w r9, [sp] +100225dc: 9b06 ldr r3, [sp, #24] +100225de: 444b add r3, r9 +100225e0: 4453 add r3, sl +100225e2: 6063 str r3, [r4, #4] +100225e4: 3520 adds r5, #32 +100225e6: 4565 cmp r5, ip +100225e8: f104 0420 add.w r4, r4, #32 +100225ec: d1ab bne.n 10022546 +100225ee: b00b add sp, #44 ; 0x2c +100225f0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +100225f4: 10000720 .word 0x10000720 +100225f8: 100414db .word 0x100414db +100225fc: 10044f38 .word 0x10044f38 +10022600: 100429b1 .word 0x100429b1 +10022604: 10043ac4 .word 0x10043ac4 +10022608: 1004bb90 .word 0x1004bb90 +1002260c: 1003fc5d .word 0x1003fc5d + +10022610 : +10022610: f8d0 3648 ldr.w r3, [r0, #1608] ; 0x648 +10022614: b573 push {r0, r1, r4, r5, r6, lr} +10022616: 2b01 cmp r3, #1 +10022618: 4604 mov r4, r0 +1002261a: dd65 ble.n 100226e8 +1002261c: 2b03 cmp r3, #3 +1002261e: d138 bne.n 10022692 +10022620: f8d0 3650 ldr.w r3, [r0, #1616] ; 0x650 +10022624: 220c movs r2, #12 +10022626: fb02 0203 mla r2, r2, r3, r0 +1002262a: f892 252c ldrb.w r2, [r2, #1324] ; 0x52c +1002262e: f012 0f06 tst.w r2, #6 +10022632: d02b beq.n 1002268c +10022634: 4d2d ldr r5, [pc, #180] ; (100226ec ) +10022636: f012 0f04 tst.w r2, #4 +1002263a: 7829 ldrb r1, [r5, #0] +1002263c: bf0c ite eq +1002263e: 2607 moveq r6, #7 +10022640: 261c movne r6, #28 +10022642: 42b1 cmp r1, r6 +10022644: 462e mov r6, r5 +10022646: d201 bcs.n 1002264c +10022648: 0612 lsls r2, r2, #24 +1002264a: d510 bpl.n 1002266e +1002264c: 3301 adds r3, #1 +1002264e: 210c movs r1, #12 +10022650: f8c4 3650 str.w r3, [r4, #1616] ; 0x650 +10022654: fb01 4303 mla r3, r1, r3, r4 +10022658: f893 152c ldrb.w r1, [r3, #1324] ; 0x52c +1002265c: 2200 movs r2, #0 +1002265e: f001 017e and.w r1, r1, #126 ; 0x7e +10022662: f883 152c strb.w r1, [r3, #1324] ; 0x52c +10022666: 7032 strb r2, [r6, #0] +10022668: f884 28fa strb.w r2, [r4, #2298] ; 0x8fa +1002266c: e011 b.n 10022692 +1002266e: f011 0f01 tst.w r1, #1 +10022672: bf0c ite eq +10022674: 2330 moveq r3, #48 ; 0x30 +10022676: 231e movne r3, #30 +10022678: aa02 add r2, sp, #8 +1002267a: f802 3d01 strb.w r3, [r2, #-1]! +1002267e: 2134 movs r1, #52 ; 0x34 +10022680: f00f ff37 bl 100324f2 +10022684: 782b ldrb r3, [r5, #0] +10022686: 3301 adds r3, #1 +10022688: 702b strb r3, [r5, #0] +1002268a: e002 b.n 10022692 +1002268c: 3301 adds r3, #1 +1002268e: f8c0 3650 str.w r3, [r0, #1616] ; 0x650 +10022692: f894 384a ldrb.w r3, [r4, #2122] ; 0x84a +10022696: 2b01 cmp r3, #1 +10022698: d106 bne.n 100226a8 +1002269a: f894 3522 ldrb.w r3, [r4, #1314] ; 0x522 +1002269e: f8c4 3650 str.w r3, [r4, #1616] ; 0x650 +100226a2: 2300 movs r3, #0 +100226a4: f884 384a strb.w r3, [r4, #2122] ; 0x84a +100226a8: 2020 movs r0, #32 +100226aa: f7f5 f891 bl 100177d0 +100226ae: 4605 mov r5, r0 +100226b0: b1d0 cbz r0, 100226e8 +100226b2: 2030 movs r0, #48 ; 0x30 +100226b4: f7f5 f88c bl 100177d0 +100226b8: 4606 mov r6, r0 +100226ba: b920 cbnz r0, 100226c6 +100226bc: 4628 mov r0, r5 +100226be: 2120 movs r1, #32 +100226c0: f7f4 feb3 bl 1001742a +100226c4: e010 b.n 100226e8 +100226c6: f105 0018 add.w r0, r5, #24 +100226ca: f7f4 fec9 bl 10017460 +100226ce: 2312 movs r3, #18 +100226d0: 80ab strh r3, [r5, #4] +100226d2: 2330 movs r3, #48 ; 0x30 +100226d4: 60eb str r3, [r5, #12] +100226d6: 2300 movs r3, #0 +100226d8: 60ae str r6, [r5, #8] +100226da: 612b str r3, [r5, #16] +100226dc: 616b str r3, [r5, #20] +100226de: f604 1008 addw r0, r4, #2312 ; 0x908 +100226e2: 4629 mov r1, r5 +100226e4: f7f9 ff63 bl 1001c5ae +100226e8: b002 add sp, #8 +100226ea: bd70 pop {r4, r5, r6, pc} +100226ec: 1004bba4 .word 0x1004bba4 + +100226f0 <_survey_timer_hdl>: +100226f0: f7ff bf8e b.w 10022610 + +100226f4 : +100226f4: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 +100226f8: b510 push {r4, lr} +100226fa: f413 7180 ands.w r1, r3, #256 ; 0x100 +100226fe: 4604 mov r4, r0 +10022700: d005 beq.n 1002270e +10022702: 2300 movs r3, #0 +10022704: f8c0 3680 str.w r3, [r0, #1664] ; 0x680 +10022708: f06f 0102 mvn.w r1, #2 +1002270c: e00d b.n 1002272a +1002270e: f413 7200 ands.w r2, r3, #512 ; 0x200 +10022712: d015 beq.n 10022740 +10022714: f8d0 3684 ldr.w r3, [r0, #1668] ; 0x684 +10022718: 3301 adds r3, #1 +1002271a: 2b04 cmp r3, #4 +1002271c: f8c0 3684 str.w r3, [r0, #1668] ; 0x684 +10022720: d907 bls.n 10022732 +10022722: f8c0 1680 str.w r1, [r0, #1664] ; 0x680 +10022726: f04f 31ff mov.w r1, #4294967295 +1002272a: e8bd 4010 ldmia.w sp!, {r4, lr} +1002272e: f7fe bdc1 b.w 100212b4 +10022732: 2301 movs r3, #1 +10022734: f8c0 3690 str.w r3, [r0, #1680] ; 0x690 +10022738: 460a mov r2, r1 +1002273a: f7fc ff43 bl 1001f5c4 +1002273e: e00f b.n 10022760 +10022740: 049b lsls r3, r3, #18 +10022742: d515 bpl.n 10022770 +10022744: f8d0 3688 ldr.w r3, [r0, #1672] ; 0x688 +10022748: 3301 adds r3, #1 +1002274a: 2b04 cmp r3, #4 +1002274c: f8c0 3688 str.w r3, [r0, #1672] ; 0x688 +10022750: d904 bls.n 1002275c +10022752: f8c0 2680 str.w r2, [r0, #1664] ; 0x680 +10022756: f06f 0101 mvn.w r1, #1 +1002275a: e7e6 b.n 1002272a +1002275c: f7fd fb1c bl 1001fd98 +10022760: f604 003c addw r0, r4, #2108 ; 0x83c +10022764: f44f 7196 mov.w r1, #300 ; 0x12c +10022768: e8bd 4010 ldmia.w sp!, {r4, lr} +1002276c: f014 bb64 b.w 10036e38 +10022770: bd10 pop {r4, pc} + +10022772 <_link_timer_hdl>: +10022772: f7ff bfbf b.w 100226f4 + +10022776 : +10022776: b168 cbz r0, 10022794 +10022778: f8d0 31f4 ldr.w r3, [r0, #500] ; 0x1f4 +1002277c: 2b01 cmp r3, #1 +1002277e: d109 bne.n 10022794 +10022780: f8d0 31f8 ldr.w r3, [r0, #504] ; 0x1f8 +10022784: 2b01 cmp r3, #1 +10022786: d105 bne.n 10022794 +10022788: f890 3200 ldrb.w r3, [r0, #512] ; 0x200 +1002278c: b113 cbz r3, 10022794 +1002278e: 2300 movs r3, #0 +10022790: f880 3200 strb.w r3, [r0, #512] ; 0x200 +10022794: 4770 bx lr + +10022796 : +10022796: 2000 movs r0, #0 +10022798: 4770 bx lr + +1002279a : +1002279a: b507 push {r0, r1, r2, lr} +1002279c: 780b ldrb r3, [r1, #0] +1002279e: 2b04 cmp r3, #4 +100227a0: d103 bne.n 100227aa +100227a2: 2303 movs r3, #3 +100227a4: f8c0 3680 str.w r3, [r0, #1664] ; 0x680 +100227a8: e00f b.n 100227ca +100227aa: 2b01 cmp r3, #1 +100227ac: d109 bne.n 100227c2 +100227ae: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 +100227b2: f023 0303 bic.w r3, r3, #3 +100227b6: f043 0302 orr.w r3, r3, #2 +100227ba: f8c0 3680 str.w r3, [r0, #1664] ; 0x680 +100227be: 2302 movs r3, #2 +100227c0: e003 b.n 100227ca +100227c2: b90b cbnz r3, 100227c8 +100227c4: 2301 movs r3, #1 +100227c6: e000 b.n 100227ca +100227c8: 2300 movs r3, #0 +100227ca: 2102 movs r1, #2 +100227cc: f10d 0207 add.w r2, sp, #7 +100227d0: f88d 3007 strb.w r3, [sp, #7] +100227d4: f00f fe8d bl 100324f2 +100227d8: 2000 movs r0, #0 +100227da: b003 add sp, #12 +100227dc: f85d fb04 ldr.w pc, [sp], #4 + +100227e0 : +100227e0: b537 push {r0, r1, r2, r4, r5, lr} +100227e2: 4604 mov r4, r0 +100227e4: f005 ffdd bl 100287a2 +100227e8: b128 cbz r0, 100227f6 +100227ea: 4620 mov r0, r4 +100227ec: f104 019c add.w r1, r4, #156 ; 0x9c +100227f0: 2203 movs r2, #3 +100227f2: f7fd fda7 bl 10020344 +100227f6: 4620 mov r0, r4 +100227f8: 210b movs r1, #11 +100227fa: 2200 movs r2, #0 +100227fc: f00f fe79 bl 100324f2 +10022800: 4620 mov r0, r4 +10022802: 2104 movs r1, #4 +10022804: 4a20 ldr r2, [pc, #128] ; (10022888 ) +10022806: f00f fe74 bl 100324f2 +1002280a: f241 33b5 movw r3, #5045 ; 0x13b5 +1002280e: 5ce1 ldrb r1, [r4, r3] +10022810: 4620 mov r0, r4 +10022812: f006 fbb5 bl 10028f80 +10022816: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +1002281a: 07db lsls r3, r3, #31 +1002281c: d507 bpl.n 1002282e +1002281e: aa02 add r2, sp, #8 +10022820: 2300 movs r3, #0 +10022822: f802 3d01 strb.w r3, [r2, #-1]! +10022826: 4620 mov r0, r4 +10022828: 2108 movs r1, #8 +1002282a: f00f fe62 bl 100324f2 +1002282e: 4620 mov r0, r4 +10022830: 2102 movs r1, #2 +10022832: 2500 movs r5, #0 +10022834: f005 ff06 bl 10028644 +10022838: f8c4 5680 str.w r5, [r4, #1664] ; 0x680 +1002283c: 4620 mov r0, r4 +1002283e: 2101 movs r1, #1 +10022840: f7fb fea4 bl 1001e58c +10022844: 2801 cmp r0, #1 +10022846: d00a beq.n 1002285e +10022848: f884 551f strb.w r5, [r4, #1311] ; 0x51f +1002284c: f884 5520 strb.w r5, [r4, #1312] ; 0x520 +10022850: 4620 mov r0, r4 +10022852: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e +10022856: 462a mov r2, r5 +10022858: 462b mov r3, r5 +1002285a: f005 ff5f bl 1002871c +1002285e: 4620 mov r0, r4 +10022860: f006 f82e bl 100288c0 +10022864: f604 003c addw r0, r4, #2108 ; 0x83c +10022868: f014 fae8 bl 10036e3c +1002286c: f204 402c addw r0, r4, #1068 ; 0x42c +10022870: f014 fae4 bl 10036e3c +10022874: 4620 mov r0, r4 +10022876: f004 f8f6 bl 10026a66 +1002287a: 4620 mov r0, r4 +1002287c: f004 f91f bl 10026abe +10022880: 2000 movs r0, #0 +10022882: b003 add sp, #12 +10022884: bd30 pop {r4, r5, pc} +10022886: bf00 nop +10022888: 100414c1 .word 0x100414c1 + +1002288c : +1002288c: 780b ldrb r3, [r1, #0] +1002288e: 2b03 cmp r3, #3 +10022890: bf98 it ls +10022892: f8c0 3694 strls.w r3, [r0, #1684] ; 0x694 +10022896: 2000 movs r0, #0 +10022898: 4770 bx lr + ... + +1002289c : +1002289c: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +1002289e: 2300 movs r3, #0 +100228a0: 9302 str r3, [sp, #8] +100228a2: f8ad 300c strh.w r3, [sp, #12] +100228a6: 78cb ldrb r3, [r1, #3] +100228a8: 4605 mov r5, r0 +100228aa: 460c mov r4, r1 +100228ac: b113 cbz r3, 100228b4 +100228ae: 784b ldrb r3, [r1, #1] +100228b0: f8c0 36a0 str.w r3, [r0, #1696] ; 0x6a0 +100228b4: 7863 ldrb r3, [r4, #1] +100228b6: 7826 ldrb r6, [r4, #0] +100228b8: ea43 0686 orr.w r6, r3, r6, lsl #2 +100228bc: 4b0c ldr r3, [pc, #48] ; (100228f0 ) +100228be: f446 4600 orr.w r6, r6, #32768 ; 0x8000 +100228c2: 681b ldr r3, [r3, #0] +100228c4: b14b cbz r3, 100228da +100228c6: 480b ldr r0, [pc, #44] ; (100228f4 ) +100228c8: f7f8 f95a bl 1001ab80 +100228cc: 4b0a ldr r3, [pc, #40] ; (100228f8 ) +100228ce: 7821 ldrb r1, [r4, #0] +100228d0: f8d3 0184 ldr.w r0, [r3, #388] ; 0x184 +100228d4: 7862 ldrb r2, [r4, #1] +100228d6: f7f8 f953 bl 1001ab80 +100228da: 7861 ldrb r1, [r4, #1] +100228dc: 3404 adds r4, #4 +100228de: 4628 mov r0, r5 +100228e0: 9400 str r4, [sp, #0] +100228e2: 4632 mov r2, r6 +100228e4: ab02 add r3, sp, #8 +100228e6: f005 ff99 bl 1002881c +100228ea: 2000 movs r0, #0 +100228ec: b004 add sp, #16 +100228ee: bd70 pop {r4, r5, r6, pc} +100228f0: 10044f38 .word 0x10044f38 +100228f4: 100429b1 .word 0x100429b1 +100228f8: 10043ac4 .word 0x10043ac4 + +100228fc : +100228fc: b5f0 push {r4, r5, r6, r7, lr} +100228fe: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 +10022902: b085 sub sp, #20 +10022904: f003 0303 and.w r3, r3, #3 +10022908: 2b02 cmp r3, #2 +1002290a: 4605 mov r5, r0 +1002290c: 460c mov r4, r1 +1002290e: d10e bne.n 1002292e +10022910: f500 6046 add.w r0, r0, #3168 ; 0xc60 +10022914: f105 019c add.w r1, r5, #156 ; 0x9c +10022918: f005 fccc bl 100282b4 +1002291c: b130 cbz r0, 1002292c +1002291e: f8d0 3100 ldr.w r3, [r0, #256] ; 0x100 +10022922: 2b02 cmp r3, #2 +10022924: bf0c ite eq +10022926: 2705 moveq r7, #5 +10022928: 2704 movne r7, #4 +1002292a: e000 b.n 1002292e +1002292c: 2704 movs r7, #4 +1002292e: f8d5 3680 ldr.w r3, [r5, #1664] ; 0x680 +10022932: f003 0303 and.w r3, r3, #3 +10022936: 2b02 cmp r3, #2 +10022938: d10b bne.n 10022952 +1002293a: 4b32 ldr r3, [pc, #200] ; (10022a04 ) +1002293c: 681b ldr r3, [r3, #0] +1002293e: b143 cbz r3, 10022952 +10022940: 4831 ldr r0, [pc, #196] ; (10022a08 ) +10022942: f7f8 f91d bl 1001ab80 +10022946: 4b31 ldr r3, [pc, #196] ; (10022a0c ) +10022948: 79a1 ldrb r1, [r4, #6] +1002294a: f8d3 0188 ldr.w r0, [r3, #392] ; 0x188 +1002294e: f7f8 f917 bl 1001ab80 +10022952: f8d5 3680 ldr.w r3, [r5, #1664] ; 0x680 +10022956: 79a6 ldrb r6, [r4, #6] +10022958: f003 0303 and.w r3, r3, #3 +1002295c: 2b03 cmp r3, #3 +1002295e: d136 bne.n 100229ce +10022960: b926 cbnz r6, 1002296c +10022962: 4628 mov r0, r5 +10022964: 79e1 ldrb r1, [r4, #7] +10022966: f005 ff94 bl 10028892 +1002296a: e02e b.n 100229ca +1002296c: f505 6046 add.w r0, r5, #3168 ; 0xc60 +10022970: 4621 mov r1, r4 +10022972: f005 fc9f bl 100282b4 +10022976: 2800 cmp r0, #0 +10022978: d03f beq.n 100229fa +1002297a: 79a3 ldrb r3, [r4, #6] +1002297c: f8d0 7100 ldr.w r7, [r0, #256] ; 0x100 +10022980: 009e lsls r6, r3, #2 +10022982: 3703 adds r7, #3 +10022984: f446 4600 orr.w r6, r6, #32768 ; 0x8000 +10022988: b2ff uxtb r7, r7 +1002298a: b1ab cbz r3, 100229b8 +1002298c: 4b1d ldr r3, [pc, #116] ; (10022a04 ) +1002298e: 681b ldr r3, [r3, #0] +10022990: b193 cbz r3, 100229b8 +10022992: 481d ldr r0, [pc, #116] ; (10022a08 ) +10022994: f7f8 f8f4 bl 1001ab80 +10022998: 78a0 ldrb r0, [r4, #2] +1002299a: 79a1 ldrb r1, [r4, #6] +1002299c: 9000 str r0, [sp, #0] +1002299e: 78e0 ldrb r0, [r4, #3] +100229a0: 7822 ldrb r2, [r4, #0] +100229a2: 9001 str r0, [sp, #4] +100229a4: 7920 ldrb r0, [r4, #4] +100229a6: 7863 ldrb r3, [r4, #1] +100229a8: 9002 str r0, [sp, #8] +100229aa: 7960 ldrb r0, [r4, #5] +100229ac: 9003 str r0, [sp, #12] +100229ae: 4817 ldr r0, [pc, #92] ; (10022a0c ) +100229b0: f8d0 018c ldr.w r0, [r0, #396] ; 0x18c +100229b4: f7f8 f8e4 bl 1001ab80 +100229b8: f104 0308 add.w r3, r4, #8 +100229bc: 9300 str r3, [sp, #0] +100229be: 4628 mov r0, r5 +100229c0: 4639 mov r1, r7 +100229c2: 4632 mov r2, r6 +100229c4: 4623 mov r3, r4 +100229c6: f005 ff29 bl 1002881c +100229ca: 2601 movs r6, #1 +100229cc: e016 b.n 100229fc +100229ce: b926 cbnz r6, 100229da +100229d0: 4628 mov r0, r5 +100229d2: 79e1 ldrb r1, [r4, #7] +100229d4: f005 ff5d bl 10028892 +100229d8: e010 b.n 100229fc +100229da: 00b2 lsls r2, r6, #2 +100229dc: f104 0308 add.w r3, r4, #8 +100229e0: 9300 str r3, [sp, #0] +100229e2: 4628 mov r0, r5 +100229e4: 4623 mov r3, r4 +100229e6: 4639 mov r1, r7 +100229e8: f442 4200 orr.w r2, r2, #32768 ; 0x8000 +100229ec: f005 ff16 bl 1002881c +100229f0: 79a3 ldrb r3, [r4, #6] +100229f2: 2600 movs r6, #0 +100229f4: f8c5 369c str.w r3, [r5, #1692] ; 0x69c +100229f8: e000 b.n 100229fc +100229fa: 2605 movs r6, #5 +100229fc: 4630 mov r0, r6 +100229fe: b005 add sp, #20 +10022a00: bdf0 pop {r4, r5, r6, r7, pc} +10022a02: bf00 nop +10022a04: 10044f38 .word 0x10044f38 +10022a08: 100429b1 .word 0x100429b1 +10022a0c: 10043ac4 .word 0x10043ac4 + +10022a10 : +10022a10: b5f8 push {r3, r4, r5, r6, r7, lr} +10022a12: 4606 mov r6, r0 +10022a14: 2020 movs r0, #32 +10022a16: f7f4 fedb bl 100177d0 +10022a1a: 4604 mov r4, r0 +10022a1c: b390 cbz r0, 10022a84 +10022a1e: f44f 705f mov.w r0, #892 ; 0x37c +10022a22: f7f4 fed5 bl 100177d0 +10022a26: 4605 mov r5, r0 +10022a28: b928 cbnz r0, 10022a36 +10022a2a: 4620 mov r0, r4 +10022a2c: 2120 movs r1, #32 +10022a2e: f7f4 fcfc bl 1001742a +10022a32: 4628 mov r0, r5 +10022a34: bdf8 pop {r3, r4, r5, r6, r7, pc} +10022a36: f106 0198 add.w r1, r6, #152 ; 0x98 +10022a3a: f44f 725f mov.w r2, #892 ; 0x37c +10022a3e: f7f4 fcf7 bl 10017430 +10022a42: 6fa9 ldr r1, [r5, #120] ; 0x78 +10022a44: f896 2740 ldrb.w r2, [r6, #1856] ; 0x740 +10022a48: 390c subs r1, #12 +10022a4a: f105 0088 add.w r0, r5, #136 ; 0x88 +10022a4e: f7fc f929 bl 1001eca4 +10022a52: 6fab ldr r3, [r5, #120] ; 0x78 +10022a54: 2700 movs r7, #0 +10022a56: 4418 add r0, r3 +10022a58: 67a8 str r0, [r5, #120] ; 0x78 +10022a5a: f104 0018 add.w r0, r4, #24 +10022a5e: f7f4 fcff bl 10017460 +10022a62: 2337 movs r3, #55 ; 0x37 +10022a64: 80a3 strh r3, [r4, #4] +10022a66: f44f 735f mov.w r3, #892 ; 0x37c +10022a6a: 60a5 str r5, [r4, #8] +10022a6c: 60e3 str r3, [r4, #12] +10022a6e: 6127 str r7, [r4, #16] +10022a70: 6167 str r7, [r4, #20] +10022a72: f606 1008 addw r0, r6, #2312 ; 0x908 +10022a76: 4621 mov r1, r4 +10022a78: f7f9 fd99 bl 1001c5ae +10022a7c: f886 7508 strb.w r7, [r6, #1288] ; 0x508 +10022a80: b2c0 uxtb r0, r0 +10022a82: bdf8 pop {r3, r4, r5, r6, r7, pc} +10022a84: bdf8 pop {r3, r4, r5, r6, r7, pc} + ... + +10022a88 : +10022a88: 680a ldr r2, [r1, #0] +10022a8a: b5f8 push {r3, r4, r5, r6, r7, lr} +10022a8c: f3c2 4507 ubfx r5, r2, #16, #8 +10022a90: 2d18 cmp r5, #24 +10022a92: 4604 mov r4, r0 +10022a94: 460e mov r6, r1 +10022a96: d819 bhi.n 10022acc +10022a98: 490d ldr r1, [pc, #52] ; (10022ad0 ) +10022a9a: f851 3035 ldr.w r3, [r1, r5, lsl #3] +10022a9e: 460f mov r7, r1 +10022aa0: b113 cbz r3, 10022aa8 +10022aa2: b292 uxth r2, r2 +10022aa4: 4293 cmp r3, r2 +10022aa6: d111 bne.n 10022acc +10022aa8: f604 101c addw r0, r4, #2332 ; 0x91c +10022aac: f7f4 fe0a bl 100176c4 +10022ab0: f116 0108 adds.w r1, r6, #8 +10022ab4: d00a beq.n 10022acc +10022ab6: eb07 05c5 add.w r5, r7, r5, lsl #3 +10022aba: 686b ldr r3, [r5, #4] +10022abc: b10b cbz r3, 10022ac2 +10022abe: 4620 mov r0, r4 +10022ac0: 4798 blx r3 +10022ac2: f8d4 3928 ldr.w r3, [r4, #2344] ; 0x928 +10022ac6: 3301 adds r3, #1 +10022ac8: f8c4 3928 str.w r3, [r4, #2344] ; 0x928 +10022acc: 2000 movs r0, #0 +10022ace: bdf8 pop {r3, r4, r5, r6, r7, pc} +10022ad0: 10041580 .word 0x10041580 + +10022ad4 : +10022ad4: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +10022ad8: 4607 mov r7, r0 +10022ada: f7fc f90d bl 1001ecf8 +10022ade: 4638 mov r0, r7 +10022ae0: f005 fc3e bl 10028360 +10022ae4: 4604 mov r4, r0 +10022ae6: 2800 cmp r0, #0 +10022ae8: d04d beq.n 10022b86 +10022aea: f8b7 3cfe ldrh.w r3, [r7, #3326] ; 0xcfe +10022aee: 07db lsls r3, r3, #31 +10022af0: d549 bpl.n 10022b86 +10022af2: f8d0 30f4 ldr.w r3, [r0, #244] ; 0xf4 +10022af6: 2b00 cmp r3, #0 +10022af8: d045 beq.n 10022b86 +10022afa: 200a movs r0, #10 +10022afc: f104 06f0 add.w r6, r4, #240 ; 0xf0 +10022b00: f7f4 fdb8 bl 10017674 +10022b04: 4630 mov r0, r6 +10022b06: a901 add r1, sp, #4 +10022b08: f7f4 fd6e bl 100175e8 +10022b0c: f104 09e8 add.w r9, r4, #232 ; 0xe8 +10022b10: f8d4 50e8 ldr.w r5, [r4, #232] ; 0xe8 +10022b14: 4648 mov r0, r9 +10022b16: 4629 mov r1, r5 +10022b18: f7f4 fd43 bl 100175a2 +10022b1c: bb78 cbnz r0, 10022b7e +10022b1e: 4628 mov r0, r5 +10022b20: f7f4 fcb2 bl 10017488 +10022b24: f8d4 30f4 ldr.w r3, [r4, #244] ; 0xf4 +10022b28: 4630 mov r0, r6 +10022b2a: 3b01 subs r3, #1 +10022b2c: 2b00 cmp r3, #0 +10022b2e: f8c4 30f4 str.w r3, [r4, #244] ; 0xf4 +10022b32: bf18 it ne +10022b34: 2301 movne r3, #1 +10022b36: f885 3065 strb.w r3, [r5, #101] ; 0x65 +10022b3a: 2301 movs r3, #1 +10022b3c: f885 3067 strb.w r3, [r5, #103] ; 0x67 +10022b40: 2311 movs r3, #17 +10022b42: f885 3068 strb.w r3, [r5, #104] ; 0x68 +10022b46: a901 add r1, sp, #4 +10022b48: f607 1858 addw r8, r7, #2392 ; 0x958 +10022b4c: f7f4 fd56 bl 100175fc +10022b50: 4640 mov r0, r8 +10022b52: a901 add r1, sp, #4 +10022b54: f7f4 fd48 bl 100175e8 +10022b58: 4638 mov r0, r7 +10022b5a: 4629 mov r1, r5 +10022b5c: f006 ffc3 bl 10029ae6 +10022b60: 2801 cmp r0, #1 +10022b62: d003 beq.n 10022b6c +10022b64: 4640 mov r0, r8 +10022b66: 4629 mov r1, r5 +10022b68: f006 ff22 bl 100299b0 +10022b6c: 4640 mov r0, r8 +10022b6e: a901 add r1, sp, #4 +10022b70: f7f4 fd44 bl 100175fc +10022b74: 4630 mov r0, r6 +10022b76: a901 add r1, sp, #4 +10022b78: f7f4 fd36 bl 100175e8 +10022b7c: e7c8 b.n 10022b10 +10022b7e: 4630 mov r0, r6 +10022b80: a901 add r1, sp, #4 +10022b82: f7f4 fd3b bl 100175fc +10022b86: 2000 movs r0, #0 +10022b88: b003 add sp, #12 +10022b8a: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + +10022b8e : +10022b8e: b150 cbz r0, 10022ba6 +10022b90: f641 035c movw r3, #6236 ; 0x185c +10022b94: 58c0 ldr r0, [r0, r3] +10022b96: b130 cbz r0, 10022ba6 +10022b98: f8d0 0680 ldr.w r0, [r0, #1664] ; 0x680 +10022b9c: f000 0003 and.w r0, r0, #3 +10022ba0: 1a43 subs r3, r0, r1 +10022ba2: 4258 negs r0, r3 +10022ba4: 4158 adcs r0, r3 +10022ba6: 4770 bx lr + +10022ba8 : +10022ba8: b5f0 push {r4, r5, r6, r7, lr} +10022baa: 2300 movs r3, #0 +10022bac: b08d sub sp, #52 ; 0x34 +10022bae: 9301 str r3, [sp, #4] +10022bb0: f641 035c movw r3, #6236 ; 0x185c +10022bb4: 58c7 ldr r7, [r0, r3] +10022bb6: 4604 mov r4, r0 +10022bb8: b10f cbz r7, 10022bbe +10022bba: f507 67a2 add.w r7, r7, #1296 ; 0x510 +10022bbe: f8b4 161a ldrh.w r1, [r4, #1562] ; 0x61a +10022bc2: f8b4 6848 ldrh.w r6, [r4, #2120] ; 0x848 +10022bc6: 2901 cmp r1, #1 +10022bc8: f8d4 3650 ldr.w r3, [r4, #1616] ; 0x650 +10022bcc: f04f 020c mov.w r2, #12 +10022bd0: d104 bne.n 10022bdc +10022bd2: fb02 4303 mla r3, r2, r3, r4 +10022bd6: f893 15cc ldrb.w r1, [r3, #1484] ; 0x5cc +10022bda: e042 b.n 10022c62 +10022bdc: 2902 cmp r1, #2 +10022bde: d104 bne.n 10022bea +10022be0: fb02 4303 mla r3, r2, r3, r4 +10022be4: f893 15fc ldrb.w r1, [r3, #1532] ; 0x5fc +10022be8: e03b b.n 10022c62 +10022bea: f894 18fa ldrb.w r1, [r4, #2298] ; 0x8fa +10022bee: b921 cbnz r1, 10022bfa +10022bf0: fb02 4303 mla r3, r2, r3, r4 +10022bf4: f893 1524 ldrb.w r1, [r3, #1316] ; 0x524 +10022bf8: e024 b.n 10022c44 +10022bfa: fb02 4103 mla r1, r2, r3, r4 +10022bfe: f891 252c ldrb.w r2, [r1, #1324] ; 0x52c +10022c02: f501 60a5 add.w r0, r1, #1320 ; 0x528 +10022c06: f012 0501 ands.w r5, r2, #1 +10022c0a: d00f beq.n 10022c2c +10022c0c: f012 0506 ands.w r5, r2, #6 +10022c10: f891 1524 ldrb.w r1, [r1, #1316] ; 0x524 +10022c14: d115 bne.n 10022c42 +10022c16: f022 0201 bic.w r2, r2, #1 +10022c1a: 7102 strb r2, [r0, #4] +10022c1c: f894 2522 ldrb.w r2, [r4, #1314] ; 0x522 +10022c20: 3301 adds r3, #1 +10022c22: 4293 cmp r3, r2 +10022c24: d10e bne.n 10022c44 +10022c26: f884 58fa strb.w r5, [r4, #2298] ; 0x8fa +10022c2a: e00b b.n 10022c44 +10022c2c: f894 2522 ldrb.w r2, [r4, #1314] ; 0x522 +10022c30: 4293 cmp r3, r2 +10022c32: da03 bge.n 10022c3c +10022c34: f504 6003 add.w r0, r4, #2096 ; 0x830 +10022c38: 2101 movs r1, #1 +10022c3a: e062 b.n 10022d02 +10022c3c: f884 58fa strb.w r5, [r4, #2298] ; 0x8fa +10022c40: e001 b.n 10022c46 +10022c42: 2619 movs r6, #25 +10022c44: b969 cbnz r1, 10022c62 +10022c46: f894 3522 ldrb.w r3, [r4, #1314] ; 0x522 +10022c4a: 2b01 cmp r3, #1 +10022c4c: d108 bne.n 10022c60 +10022c4e: 4620 mov r0, r4 +10022c50: f894 149e ldrb.w r1, [r4, #1182] ; 0x49e +10022c54: f204 5224 addw r2, r4, #1316 ; 0x524 +10022c58: f7fb fd06 bl 1001e668 +10022c5c: f884 0522 strb.w r0, [r4, #1314] ; 0x522 +10022c60: 2100 movs r1, #0 +10022c62: f8d4 3650 ldr.w r3, [r4, #1616] ; 0x650 +10022c66: 220c movs r2, #12 +10022c68: fb02 4203 mla r2, r2, r3, r4 +10022c6c: f8d2 5528 ldr.w r5, [r2, #1320] ; 0x528 +10022c70: 2900 cmp r1, #0 +10022c72: d049 beq.n 10022d08 +10022c74: 4620 mov r0, r4 +10022c76: b11b cbz r3, 10022c80 +10022c78: f894 38fa ldrb.w r3, [r4, #2298] ; 0x8fa +10022c7c: 2b01 cmp r3, #1 +10022c7e: d104 bne.n 10022c8a +10022c80: 2200 movs r2, #0 +10022c82: 4613 mov r3, r2 +10022c84: f005 fd4a bl 1002871c +10022c88: e001 b.n 10022c8e +10022c8a: f005 fd0f bl 100286ac +10022c8e: 2d01 cmp r5, #1 +10022c90: d12a bne.n 10022ce8 +10022c92: 6863 ldr r3, [r4, #4] +10022c94: 2b05 cmp r3, #5 +10022c96: d005 beq.n 10022ca4 +10022c98: f8d4 7658 ldr.w r7, [r4, #1624] ; 0x658 +10022c9c: b1b7 cbz r7, 10022ccc +10022c9e: f504 67cb add.w r7, r4, #1624 ; 0x658 +10022ca2: e017 b.n 10022cd4 +10022ca4: a802 add r0, sp, #8 +10022ca6: 2100 movs r1, #0 +10022ca8: 2228 movs r2, #40 ; 0x28 +10022caa: f7f4 fbd1 bl 10017450 +10022cae: a803 add r0, sp, #12 +10022cb0: 494c ldr r1, [pc, #304] ; (10022de4 ) +10022cb2: 2207 movs r2, #7 +10022cb4: f7f4 fbbc bl 10017430 +10022cb8: 2307 movs r3, #7 +10022cba: 4620 mov r0, r4 +10022cbc: a902 add r1, sp, #8 +10022cbe: 462a mov r2, r5 +10022cc0: 9302 str r3, [sp, #8] +10022cc2: f7fc fb87 bl 1001f3d4 +10022cc6: 4620 mov r0, r4 +10022cc8: a902 add r1, sp, #8 +10022cca: e00a b.n 10022ce2 +10022ccc: f8d4 3654 ldr.w r3, [r4, #1620] ; 0x654 +10022cd0: 2b01 cmp r3, #1 +10022cd2: d109 bne.n 10022ce8 +10022cd4: 4620 mov r0, r4 +10022cd6: 4639 mov r1, r7 +10022cd8: 462a mov r2, r5 +10022cda: f7fc fb7b bl 1001f3d4 +10022cde: 4620 mov r0, r4 +10022ce0: 4639 mov r1, r7 +10022ce2: 462a mov r2, r5 +10022ce4: f7fc fb76 bl 1001f3d4 +10022ce8: f8b4 361a ldrh.w r3, [r4, #1562] ; 0x61a +10022cec: 2b02 cmp r3, #2 +10022cee: d003 beq.n 10022cf8 +10022cf0: 2b01 cmp r3, #1 +10022cf2: bf08 it eq +10022cf4: 2621 moveq r6, #33 ; 0x21 +10022cf6: e001 b.n 10022cfc +10022cf8: f44f 76c8 mov.w r6, #400 ; 0x190 +10022cfc: f504 6003 add.w r0, r4, #2096 ; 0x830 +10022d00: 4631 mov r1, r6 +10022d02: f014 f899 bl 10036e38 +10022d06: e06a b.n 10022dde +10022d08: 6923 ldr r3, [r4, #16] +10022d0a: 07db lsls r3, r3, #31 +10022d0c: d55d bpl.n 10022dca +10022d0e: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e +10022d12: f894 351f ldrb.w r3, [r4, #1311] ; 0x51f +10022d16: f894 2520 ldrb.w r2, [r4, #1312] ; 0x520 +10022d1a: 2004 movs r0, #4 +10022d1c: f8c4 0648 str.w r0, [r4, #1608] ; 0x648 +10022d20: 4620 mov r0, r4 +10022d22: f005 fcfb bl 1002871c +10022d26: f8d4 1680 ldr.w r1, [r4, #1664] ; 0x680 +10022d2a: 4620 mov r0, r4 +10022d2c: f001 0103 and.w r1, r1, #3 +10022d30: f005 fc88 bl 10028644 +10022d34: aa0c add r2, sp, #48 ; 0x30 +10022d36: 23ff movs r3, #255 ; 0xff +10022d38: f842 3d2c str.w r3, [r2, #-44]! +10022d3c: 2134 movs r1, #52 ; 0x34 +10022d3e: 4620 mov r0, r4 +10022d40: f00f fbd7 bl 100324f2 +10022d44: 4620 mov r0, r4 +10022d46: f005 fc64 bl 10028612 +10022d4a: 4620 mov r0, r4 +10022d4c: f005 fd29 bl 100287a2 +10022d50: 2801 cmp r0, #1 +10022d52: f641 055c movw r5, #6236 ; 0x185c +10022d56: d103 bne.n 10022d60 +10022d58: 4620 mov r0, r4 +10022d5a: 2100 movs r1, #0 +10022d5c: f7fd f9d2 bl 10020104 +10022d60: 5960 ldr r0, [r4, r5] +10022d62: f005 fd1e bl 100287a2 +10022d66: 2801 cmp r0, #1 +10022d68: d103 bne.n 10022d72 +10022d6a: 5960 ldr r0, [r4, r5] +10022d6c: 2100 movs r1, #0 +10022d6e: f7fd f9c9 bl 10020104 +10022d72: aa0c add r2, sp, #48 ; 0x30 +10022d74: 2500 movs r5, #0 +10022d76: 210c movs r1, #12 +10022d78: f802 5d28 strb.w r5, [r2, #-40]! +10022d7c: 4620 mov r0, r4 +10022d7e: f00f fbb8 bl 100324f2 +10022d82: 4620 mov r0, r4 +10022d84: f7fe fa64 bl 10021250 +10022d88: 2364 movs r3, #100 ; 0x64 +10022d8a: f8a4 3848 strh.w r3, [r4, #2120] ; 0x848 +10022d8e: 4620 mov r0, r4 +10022d90: f8c4 5648 str.w r5, [r4, #1608] ; 0x648 +10022d94: f7fb fdf2 bl 1001e97c +10022d98: 4620 mov r0, r4 +10022d9a: f7fb fdef bl 1001e97c +10022d9e: 4620 mov r0, r4 +10022da0: f7fb fdec bl 1001e97c +10022da4: 4620 mov r0, r4 +10022da6: 2103 movs r1, #3 +10022da8: f7ff fef1 bl 10022b8e +10022dac: b1b8 cbz r0, 10022dde +10022dae: 4620 mov r0, r4 +10022db0: 2101 movs r1, #1 +10022db2: f7fb fbeb bl 1001e58c +10022db6: b190 cbz r0, 10022dde +10022db8: f641 035c movw r3, #6236 ; 0x185c +10022dbc: 58e0 ldr r0, [r4, r3] +10022dbe: 4629 mov r1, r5 +10022dc0: 462a mov r2, r5 +10022dc2: 2301 movs r3, #1 +10022dc4: f7f8 f930 bl 1001b028 +10022dc8: e009 b.n 10022dde +10022dca: 4620 mov r0, r4 +10022dcc: 2101 movs r1, #1 +10022dce: f7fb fbdd bl 1001e58c +10022dd2: 2800 cmp r0, #0 +10022dd4: d09b beq.n 10022d0e +10022dd6: 7bb9 ldrb r1, [r7, #14] +10022dd8: 7bfb ldrb r3, [r7, #15] +10022dda: 7c3a ldrb r2, [r7, #16] +10022ddc: e79d b.n 10022d1a +10022dde: b00d add sp, #52 ; 0x34 +10022de0: bdf0 pop {r4, r5, r6, r7, pc} +10022de2: bf00 nop +10022de4: 1004150a .word 0x1004150a + +10022de8 : +10022de8: b573 push {r0, r1, r4, r5, r6, lr} +10022dea: f8d0 6648 ldr.w r6, [r0, #1608] ; 0x648 +10022dee: 4604 mov r4, r0 +10022df0: 460d mov r5, r1 +10022df2: 2e00 cmp r6, #0 +10022df4: d147 bne.n 10022e86 +10022df6: 213f movs r1, #63 ; 0x3f +10022df8: 4632 mov r2, r6 +10022dfa: f00f fb7a bl 100324f2 +10022dfe: 2301 movs r3, #1 +10022e00: f8c4 3648 str.w r3, [r4, #1608] ; 0x648 +10022e04: 68ab ldr r3, [r5, #8] +10022e06: f8c4 664c str.w r6, [r4, #1612] ; 0x64c +10022e0a: f8c4 6650 str.w r6, [r4, #1616] ; 0x650 +10022e0e: b13b cbz r3, 10022e20 +10022e10: f204 605c addw r0, r4, #1628 ; 0x65c +10022e14: f105 010c add.w r1, r5, #12 +10022e18: 2220 movs r2, #32 +10022e1a: f7f4 fb09 bl 10017430 +10022e1e: 68ab ldr r3, [r5, #8] +10022e20: f8c4 3658 str.w r3, [r4, #1624] ; 0x658 +10022e24: 682b ldr r3, [r5, #0] +10022e26: 4620 mov r0, r4 +10022e28: f8c4 3654 str.w r3, [r4, #1620] ; 0x654 +10022e2c: f005 fcb9 bl 100287a2 +10022e30: 2801 cmp r0, #1 +10022e32: 4605 mov r5, r0 +10022e34: d113 bne.n 10022e5e +10022e36: 2302 movs r3, #2 +10022e38: f8c4 3648 str.w r3, [r4, #1608] ; 0x648 +10022e3c: 4629 mov r1, r5 +10022e3e: 4620 mov r0, r4 +10022e40: f7fd f960 bl 10020104 +10022e44: f641 065c movw r6, #6236 ; 0x185c +10022e48: 4629 mov r1, r5 +10022e4a: 4620 mov r0, r4 +10022e4c: f7fd f95a bl 10020104 +10022e50: 59a0 ldr r0, [r4, r6] +10022e52: f005 fca6 bl 100287a2 +10022e56: 2801 cmp r0, #1 +10022e58: 4605 mov r5, r0 +10022e5a: d144 bne.n 10022ee6 +10022e5c: e00a b.n 10022e74 +10022e5e: f641 065c movw r6, #6236 ; 0x185c +10022e62: 59a0 ldr r0, [r4, r6] +10022e64: f005 fc9d bl 100287a2 +10022e68: 2801 cmp r0, #1 +10022e6a: 4605 mov r5, r0 +10022e6c: d10b bne.n 10022e86 +10022e6e: 2302 movs r3, #2 +10022e70: f8c4 3648 str.w r3, [r4, #1608] ; 0x648 +10022e74: 59a0 ldr r0, [r4, r6] +10022e76: 4629 mov r1, r5 +10022e78: f7fd f944 bl 10020104 +10022e7c: 59a0 ldr r0, [r4, r6] +10022e7e: 4629 mov r1, r5 +10022e80: f7fd f940 bl 10020104 +10022e84: e02f b.n 10022ee6 +10022e86: f8d4 3648 ldr.w r3, [r4, #1608] ; 0x648 +10022e8a: 3b01 subs r3, #1 +10022e8c: 2b01 cmp r3, #1 +10022e8e: d826 bhi.n 10022ede +10022e90: 4620 mov r0, r4 +10022e92: f005 fbb3 bl 100285fc +10022e96: f241 33f9 movw r3, #5113 ; 0x13f9 +10022e9a: 5ce3 ldrb r3, [r4, r3] +10022e9c: 4620 mov r0, r4 +10022e9e: 2b01 cmp r3, #1 +10022ea0: bf19 ittee ne +10022ea2: 2100 movne r1, #0 +10022ea4: 460a movne r2, r1 +10022ea6: f44f 5100 moveq.w r1, #8192 ; 0x2000 +10022eaa: 2200 moveq r2, #0 +10022eac: f005 fbbc bl 10028628 +10022eb0: aa02 add r2, sp, #8 +10022eb2: 231e movs r3, #30 +10022eb4: f842 3d04 str.w r3, [r2, #-4]! +10022eb8: 4620 mov r0, r4 +10022eba: 2134 movs r1, #52 ; 0x34 +10022ebc: f00f fb19 bl 100324f2 +10022ec0: 4620 mov r0, r4 +10022ec2: 2100 movs r1, #0 +10022ec4: f005 fbbe bl 10028644 +10022ec8: 2301 movs r3, #1 +10022eca: aa02 add r2, sp, #8 +10022ecc: f802 3d05 strb.w r3, [r2, #-5]! +10022ed0: 4620 mov r0, r4 +10022ed2: 210c movs r1, #12 +10022ed4: f00f fb0d bl 100324f2 +10022ed8: 2303 movs r3, #3 +10022eda: f8c4 3648 str.w r3, [r4, #1608] ; 0x648 +10022ede: 4620 mov r0, r4 +10022ee0: f7ff fe62 bl 10022ba8 +10022ee4: e004 b.n 10022ef0 +10022ee6: f504 6003 add.w r0, r4, #2096 ; 0x830 +10022eea: 2132 movs r1, #50 ; 0x32 +10022eec: f013 ffa4 bl 10036e38 +10022ef0: 2000 movs r0, #0 +10022ef2: b002 add sp, #8 +10022ef4: bd70 pop {r4, r5, r6, pc} + +10022ef6 : +10022ef6: b570 push {r4, r5, r6, lr} +10022ef8: 4605 mov r5, r0 +10022efa: f7fb fb2b bl 1001e554 +10022efe: b388 cbz r0, 10022f64 +10022f00: f641 035c movw r3, #6236 ; 0x185c +10022f04: 58ec ldr r4, [r5, r3] +10022f06: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +10022f0a: f003 0303 and.w r3, r3, #3 +10022f0e: 2b03 cmp r3, #3 +10022f10: d119 bne.n 10022f46 +10022f12: f8b5 251e ldrh.w r2, [r5, #1310] ; 0x51e +10022f16: f8b4 351e ldrh.w r3, [r4, #1310] ; 0x51e +10022f1a: 429a cmp r2, r3 +10022f1c: d105 bne.n 10022f2a +10022f1e: f895 2520 ldrb.w r2, [r5, #1312] ; 0x520 +10022f22: f894 3520 ldrb.w r3, [r4, #1312] ; 0x520 +10022f26: 429a cmp r2, r3 +10022f28: d00d beq.n 10022f46 +10022f2a: 2601 movs r6, #1 +10022f2c: f884 6902 strb.w r6, [r4, #2306] ; 0x902 +10022f30: 4620 mov r0, r4 +10022f32: f7f8 ffe1 bl 1001bef8 +10022f36: 2200 movs r2, #0 +10022f38: f884 2902 strb.w r2, [r4, #2306] ; 0x902 +10022f3c: 4628 mov r0, r5 +10022f3e: 213f movs r1, #63 ; 0x3f +10022f40: f00f fad7 bl 100324f2 +10022f44: e00e b.n 10022f64 +10022f46: 6923 ldr r3, [r4, #16] +10022f48: f003 0309 and.w r3, r3, #9 +10022f4c: 2b09 cmp r3, #9 +10022f4e: d109 bne.n 10022f64 +10022f50: f895 251e ldrb.w r2, [r5, #1310] ; 0x51e +10022f54: f894 351e ldrb.w r3, [r4, #1310] ; 0x51e +10022f58: 429a cmp r2, r3 +10022f5a: d105 bne.n 10022f68 +10022f5c: f895 351f ldrb.w r3, [r5, #1311] ; 0x51f +10022f60: 2b01 cmp r3, #1 +10022f62: d008 beq.n 10022f76 +10022f64: 2001 movs r0, #1 +10022f66: bd70 pop {r4, r5, r6, pc} +10022f68: 4628 mov r0, r5 +10022f6a: f06f 0103 mvn.w r1, #3 +10022f6e: f7fe f9a1 bl 100212b4 +10022f72: 2000 movs r0, #0 +10022f74: bd70 pop {r4, r5, r6, pc} +10022f76: f894 051f ldrb.w r0, [r4, #1311] ; 0x51f +10022f7a: 2801 cmp r0, #1 +10022f7c: d1f2 bne.n 10022f64 +10022f7e: f895 2520 ldrb.w r2, [r5, #1312] ; 0x520 +10022f82: f894 3520 ldrb.w r3, [r4, #1312] ; 0x520 +10022f86: 429a cmp r2, r3 +10022f88: d1ee bne.n 10022f68 +10022f8a: bd70 pop {r4, r5, r6, pc} + +10022f8c : +10022f8c: b537 push {r0, r1, r2, r4, r5, lr} +10022f8e: f8d0 30e4 ldr.w r3, [r0, #228] ; 0xe4 +10022f92: f100 0598 add.w r5, r0, #152 ; 0x98 +10022f96: f880 351e strb.w r3, [r0, #1310] ; 0x51e +10022f9a: 4604 mov r4, r0 +10022f9c: 4628 mov r0, r5 +10022f9e: f005 fbf1 bl 10028784 +10022fa2: f8a4 072a strh.w r0, [r4, #1834] ; 0x72a +10022fa6: 4620 mov r0, r4 +10022fa8: f006 f8fe bl 100291a8 +10022fac: 4628 mov r0, r5 +10022fae: f7fa fb11 bl 1001d5d4 +10022fb2: 4605 mov r5, r0 +10022fb4: 4629 mov r1, r5 +10022fb6: 4620 mov r0, r4 +10022fb8: f006 f8b7 bl 1002912a +10022fbc: 07eb lsls r3, r5, #31 +10022fbe: d54c bpl.n 1002305a +10022fc0: 4620 mov r0, r4 +10022fc2: f7ff ff98 bl 10022ef6 +10022fc6: 2800 cmp r0, #0 +10022fc8: d047 beq.n 1002305a +10022fca: 4620 mov r0, r4 +10022fcc: 2102 movs r1, #2 +10022fce: f005 fb39 bl 10028644 +10022fd2: f8d4 3694 ldr.w r3, [r4, #1684] ; 0x694 +10022fd6: 4620 mov r0, r4 +10022fd8: 2b02 cmp r3, #2 +10022fda: bf14 ite ne +10022fdc: 23cf movne r3, #207 ; 0xcf +10022fde: 23cc moveq r3, #204 ; 0xcc +10022fe0: f88d 3007 strb.w r3, [sp, #7] +10022fe4: 6863 ldr r3, [r4, #4] +10022fe6: 2114 movs r1, #20 +10022fe8: 2b03 cmp r3, #3 +10022fea: bf08 it eq +10022fec: 232c moveq r3, #44 ; 0x2c +10022fee: f10d 0207 add.w r2, sp, #7 +10022ff2: bf08 it eq +10022ff4: f88d 3007 strbeq.w r3, [sp, #7] +10022ff8: f00f fa7b bl 100324f2 +10022ffc: f894 351f ldrb.w r3, [r4, #1311] ; 0x51f +10023000: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e +10023004: f894 2520 ldrb.w r2, [r4, #1312] ; 0x520 +10023008: 4620 mov r0, r4 +1002300a: f005 fb87 bl 1002871c +1002300e: f8b4 072a ldrh.w r0, [r4, #1834] ; 0x72a +10023012: f005 fbf1 bl 100287f8 +10023016: 4601 mov r1, r0 +10023018: f604 003c addw r0, r4, #2108 ; 0x83c +1002301c: f013 ff0c bl 10036e38 +10023020: f8d4 150c ldr.w r1, [r4, #1292] ; 0x50c +10023024: f44f 7381 mov.w r3, #258 ; 0x102 +10023028: f8c4 3680 str.w r3, [r4, #1664] ; 0x680 +1002302c: b1a9 cbz r1, 1002305a +1002302e: 6f8b ldr r3, [r1, #120] ; 0x78 +10023030: b19b cbz r3, 1002305a +10023032: 4620 mov r0, r4 +10023034: f7fe faea bl 1002160c +10023038: f8d4 350c ldr.w r3, [r4, #1292] ; 0x50c +1002303c: 2100 movs r1, #0 +1002303e: 6f98 ldr r0, [r3, #120] ; 0x78 +10023040: f7f4 f9f3 bl 1001742a +10023044: f8d4 050c ldr.w r0, [r4, #1292] ; 0x50c +10023048: 2100 movs r1, #0 +1002304a: f7f4 f9ee bl 1001742a +1002304e: f8d4 250c ldr.w r2, [r4, #1292] ; 0x50c +10023052: 2300 movs r3, #0 +10023054: 6793 str r3, [r2, #120] ; 0x78 +10023056: f8c4 350c str.w r3, [r4, #1292] ; 0x50c +1002305a: b003 add sp, #12 +1002305c: bd30 pop {r4, r5, pc} + ... + +10023060 : +10023060: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 +10023064: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +10023066: 045a lsls r2, r3, #17 +10023068: 4604 mov r4, r0 +1002306a: 460d mov r5, r1 +1002306c: f100 0698 add.w r6, r0, #152 ; 0x98 +10023070: d519 bpl.n 100230a6 +10023072: 079b lsls r3, r3, #30 +10023074: d504 bpl.n 10023080 +10023076: f100 019c add.w r1, r0, #156 ; 0x9c +1002307a: 2203 movs r2, #3 +1002307c: f7fd f962 bl 10020344 +10023080: 2700 movs r7, #0 +10023082: 4620 mov r0, r4 +10023084: f8c4 7680 str.w r7, [r4, #1664] ; 0x680 +10023088: f005 fc1a bl 100288c0 +1002308c: f604 003c addw r0, r4, #2108 ; 0x83c +10023090: f013 fed4 bl 10036e3c +10023094: 4620 mov r0, r4 +10023096: 2102 movs r1, #2 +10023098: f005 fad4 bl 10028644 +1002309c: 4620 mov r0, r4 +1002309e: 210b movs r1, #11 +100230a0: 463a mov r2, r7 +100230a2: f00f fa26 bl 100324f2 +100230a6: 4620 mov r0, r4 +100230a8: f7fb f870 bl 1001e18c +100230ac: 2300 movs r3, #0 +100230ae: 2278 movs r2, #120 ; 0x78 +100230b0: f884 351f strb.w r3, [r4, #1311] ; 0x51f +100230b4: f884 3520 strb.w r3, [r4, #1312] ; 0x520 +100230b8: f884 3732 strb.w r3, [r4, #1842] ; 0x732 +100230bc: f884 3731 strb.w r3, [r4, #1841] ; 0x731 +100230c0: f884 3734 strb.w r3, [r4, #1844] ; 0x734 +100230c4: f884 3735 strb.w r3, [r4, #1845] ; 0x735 +100230c8: f884 3736 strb.w r3, [r4, #1846] ; 0x736 +100230cc: f884 373b strb.w r3, [r4, #1851] ; 0x73b +100230d0: f884 373d strb.w r3, [r4, #1853] ; 0x73d +100230d4: f884 373f strb.w r3, [r4, #1855] ; 0x73f +100230d8: 4630 mov r0, r6 +100230da: 4629 mov r1, r5 +100230dc: f7f4 f9a8 bl 10017430 +100230e0: 6faa ldr r2, [r5, #120] ; 0x78 +100230e2: f5b2 7f40 cmp.w r2, #768 ; 0x300 +100230e6: f8c4 2110 str.w r2, [r4, #272] ; 0x110 +100230ea: d845 bhi.n 10023178 +100230ec: f105 017c add.w r1, r5, #124 ; 0x7c +100230f0: f504 708a add.w r0, r4, #276 ; 0x114 +100230f4: f7f4 f99c bl 10017430 +100230f8: 250c movs r5, #12 +100230fa: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +100230fe: 429d cmp r5, r3 +10023100: d21f bcs.n 10023142 +10023102: f105 0378 add.w r3, r5, #120 ; 0x78 +10023106: 18f0 adds r0, r6, r3 +10023108: 7902 ldrb r2, [r0, #4] +1002310a: 1d07 adds r7, r0, #4 +1002310c: 2a3d cmp r2, #61 ; 0x3d +1002310e: d011 beq.n 10023134 +10023110: 2add cmp r2, #221 ; 0xdd +10023112: d005 beq.n 10023120 +10023114: 2a2d cmp r2, #45 ; 0x2d +10023116: d110 bne.n 1002313a +10023118: 2301 movs r3, #1 +1002311a: f884 3735 strb.w r3, [r4, #1845] ; 0x735 +1002311e: e00c b.n 1002313a +10023120: 3006 adds r0, #6 +10023122: 4917 ldr r1, [pc, #92] ; (10023180 ) +10023124: 2204 movs r2, #4 +10023126: f7f4 f98b bl 10017440 +1002312a: b130 cbz r0, 1002313a +1002312c: 2301 movs r3, #1 +1002312e: f884 3731 strb.w r3, [r4, #1841] ; 0x731 +10023132: e002 b.n 1002313a +10023134: 2301 movs r3, #1 +10023136: f884 3736 strb.w r3, [r4, #1846] ; 0x736 +1002313a: 787b ldrb r3, [r7, #1] +1002313c: 3302 adds r3, #2 +1002313e: 441d add r5, r3 +10023140: e7db b.n 100230fa +10023142: f104 007c add.w r0, r4, #124 ; 0x7c +10023146: f014 fb8e bl 10037866 +1002314a: 4620 mov r0, r4 +1002314c: 2104 movs r1, #4 +1002314e: f104 029c add.w r2, r4, #156 ; 0x9c +10023152: f00f f9ce bl 100324f2 +10023156: 2500 movs r5, #0 +10023158: aa02 add r2, sp, #8 +1002315a: f802 5d01 strb.w r5, [r2, #-1]! +1002315e: 210d movs r1, #13 +10023160: 4620 mov r0, r4 +10023162: f00f f9c6 bl 100324f2 +10023166: f604 003c addw r0, r4, #2108 ; 0x83c +1002316a: f013 fe67 bl 10036e3c +1002316e: 4620 mov r0, r4 +10023170: f7ff ff0c bl 10022f8c +10023174: 4628 mov r0, r5 +10023176: e000 b.n 1002317a +10023178: 2004 movs r0, #4 +1002317a: b003 add sp, #12 +1002317c: bdf0 pop {r4, r5, r6, r7, pc} +1002317e: bf00 nop +10023180: 10041579 .word 0x10041579 + +10023184 : +10023184: b573 push {r0, r1, r4, r5, r6, lr} +10023186: 4605 mov r5, r0 +10023188: 460e mov r6, r1 +1002318a: f7fb f9e3 bl 1001e554 +1002318e: 2800 cmp r0, #0 +10023190: f000 80d9 beq.w 10023346 +10023194: f641 035c movw r3, #6236 ; 0x185c +10023198: 58ec ldr r4, [r5, r3] +1002319a: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +1002319e: f003 0303 and.w r3, r3, #3 +100231a2: 2b03 cmp r3, #3 +100231a4: f040 80cf bne.w 10023346 +100231a8: 6923 ldr r3, [r4, #16] +100231aa: 07db lsls r3, r3, #31 +100231ac: f140 80cb bpl.w 10023346 +100231b0: 2e00 cmp r6, #0 +100231b2: f894 351f ldrb.w r3, [r4, #1311] ; 0x51f +100231b6: f2c0 80b9 blt.w 1002332c +100231ba: f895 251e ldrb.w r2, [r5, #1310] ; 0x51e +100231be: 2b01 cmp r3, #1 +100231c0: f884 251e strb.w r2, [r4, #1310] ; 0x51e +100231c4: f504 7690 add.w r6, r4, #288 ; 0x120 +100231c8: f040 808e bne.w 100232e8 +100231cc: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +100231d0: 4630 mov r0, r6 +100231d2: 213d movs r1, #61 ; 0x3d +100231d4: aa01 add r2, sp, #4 +100231d6: 3b0c subs r3, #12 +100231d8: f01b fb42 bl 1003e860 <__rtw_get_ie_veneer> +100231dc: b138 cbz r0, 100231ee +100231de: 9a01 ldr r2, [sp, #4] +100231e0: b132 cbz r2, 100231f0 +100231e2: 78c1 ldrb r1, [r0, #3] +100231e4: 1c82 adds r2, r0, #2 +100231e6: f021 0103 bic.w r1, r1, #3 +100231ea: 70c1 strb r1, [r0, #3] +100231ec: e000 b.n 100231f0 +100231ee: 4602 mov r2, r0 +100231f0: f895 351f ldrb.w r3, [r5, #1311] ; 0x51f +100231f4: 2b01 cmp r3, #1 +100231f6: d114 bne.n 10023222 +100231f8: f895 3520 ldrb.w r3, [r5, #1312] ; 0x520 +100231fc: f884 3520 strb.w r3, [r4, #1312] ; 0x520 +10023200: 2a00 cmp r2, #0 +10023202: d068 beq.n 100232d6 +10023204: f895 3520 ldrb.w r3, [r5, #1312] ; 0x520 +10023208: 2b01 cmp r3, #1 +1002320a: d005 beq.n 10023218 +1002320c: 2b02 cmp r3, #2 +1002320e: d162 bne.n 100232d6 +10023210: 7853 ldrb r3, [r2, #1] +10023212: f043 0303 orr.w r3, r3, #3 +10023216: e002 b.n 1002321e +10023218: 7853 ldrb r3, [r2, #1] +1002321a: f043 0301 orr.w r3, r3, #1 +1002321e: 7053 strb r3, [r2, #1] +10023220: e059 b.n 100232d6 +10023222: 2b00 cmp r3, #0 +10023224: d157 bne.n 100232d6 +10023226: f895 351e ldrb.w r3, [r5, #1310] ; 0x51e +1002322a: 1e59 subs r1, r3, #1 +1002322c: 2903 cmp r1, #3 +1002322e: d937 bls.n 100232a0 +10023230: 1f59 subs r1, r3, #5 +10023232: 2909 cmp r1, #9 +10023234: d93b bls.n 100232ae +10023236: 2b6c cmp r3, #108 ; 0x6c +10023238: d032 beq.n 100232a0 +1002323a: d816 bhi.n 1002326a +1002323c: 2b34 cmp r3, #52 ; 0x34 +1002323e: d02f beq.n 100232a0 +10023240: d808 bhi.n 10023254 +10023242: 2b28 cmp r3, #40 ; 0x28 +10023244: d033 beq.n 100232ae +10023246: d801 bhi.n 1002324c +10023248: 2b24 cmp r3, #36 ; 0x24 +1002324a: e022 b.n 10023292 +1002324c: 2b2c cmp r3, #44 ; 0x2c +1002324e: d027 beq.n 100232a0 +10023250: 2b30 cmp r3, #48 ; 0x30 +10023252: e023 b.n 1002329c +10023254: 2b40 cmp r3, #64 ; 0x40 +10023256: d02a beq.n 100232ae +10023258: d803 bhi.n 10023262 +1002325a: 2b38 cmp r3, #56 ; 0x38 +1002325c: d027 beq.n 100232ae +1002325e: 2b3c cmp r3, #60 ; 0x3c +10023260: e017 b.n 10023292 +10023262: 2b64 cmp r3, #100 ; 0x64 +10023264: d01c beq.n 100232a0 +10023266: 2b68 cmp r3, #104 ; 0x68 +10023268: e018 b.n 1002329c +1002326a: 2b84 cmp r3, #132 ; 0x84 +1002326c: d018 beq.n 100232a0 +1002326e: d80a bhi.n 10023286 +10023270: 2b78 cmp r3, #120 ; 0x78 +10023272: d01c beq.n 100232ae +10023274: d803 bhi.n 1002327e +10023276: 2b70 cmp r3, #112 ; 0x70 +10023278: d019 beq.n 100232ae +1002327a: 2b74 cmp r3, #116 ; 0x74 +1002327c: e009 b.n 10023292 +1002327e: 2b7c cmp r3, #124 ; 0x7c +10023280: d00e beq.n 100232a0 +10023282: 2b80 cmp r3, #128 ; 0x80 +10023284: e00a b.n 1002329c +10023286: 2b99 cmp r3, #153 ; 0x99 +10023288: d011 beq.n 100232ae +1002328a: d804 bhi.n 10023296 +1002328c: 2b88 cmp r3, #136 ; 0x88 +1002328e: d00e beq.n 100232ae +10023290: 2b95 cmp r3, #149 ; 0x95 +10023292: d116 bne.n 100232c2 +10023294: e004 b.n 100232a0 +10023296: 2b9d cmp r3, #157 ; 0x9d +10023298: d002 beq.n 100232a0 +1002329a: 2ba1 cmp r3, #161 ; 0xa1 +1002329c: d111 bne.n 100232c2 +1002329e: e006 b.n 100232ae +100232a0: b11a cbz r2, 100232aa +100232a2: 7853 ldrb r3, [r2, #1] +100232a4: f043 0301 orr.w r3, r3, #1 +100232a8: 7053 strb r3, [r2, #1] +100232aa: 2301 movs r3, #1 +100232ac: e00f b.n 100232ce +100232ae: b11a cbz r2, 100232b8 +100232b0: 7853 ldrb r3, [r2, #1] +100232b2: f043 0303 orr.w r3, r3, #3 +100232b6: 7053 strb r3, [r2, #1] +100232b8: 2301 movs r3, #1 +100232ba: f884 351f strb.w r3, [r4, #1311] ; 0x51f +100232be: 2302 movs r3, #2 +100232c0: e007 b.n 100232d2 +100232c2: b11a cbz r2, 100232cc +100232c4: 7853 ldrb r3, [r2, #1] +100232c6: f023 0303 bic.w r3, r3, #3 +100232ca: 7053 strb r3, [r2, #1] +100232cc: 2300 movs r3, #0 +100232ce: f884 351f strb.w r3, [r4, #1311] ; 0x51f +100232d2: f884 3520 strb.w r3, [r4, #1312] ; 0x520 +100232d6: 4628 mov r0, r5 +100232d8: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e +100232dc: f894 2520 ldrb.w r2, [r4, #1312] ; 0x520 +100232e0: f894 351f ldrb.w r3, [r4, #1311] ; 0x51f +100232e4: f005 fa1a bl 1002871c +100232e8: f895 351e ldrb.w r3, [r5, #1310] ; 0x51e +100232ec: 4630 mov r0, r6 +100232ee: f8c4 30e4 str.w r3, [r4, #228] ; 0xe4 +100232f2: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +100232f6: 2103 movs r1, #3 +100232f8: aa01 add r2, sp, #4 +100232fa: 3b0c subs r3, #12 +100232fc: f01b fab0 bl 1003e860 <__rtw_get_ie_veneer> +10023300: b128 cbz r0, 1002330e +10023302: 9b01 ldr r3, [sp, #4] +10023304: 2b00 cmp r3, #0 +10023306: bfc4 itt gt +10023308: f895 351e ldrbgt.w r3, [r5, #1310] ; 0x51e +1002330c: 7083 strbgt r3, [r0, #2] +1002330e: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 +10023312: 4630 mov r0, r6 +10023314: 213d movs r1, #61 ; 0x3d +10023316: aa01 add r2, sp, #4 +10023318: 3b0c subs r3, #12 +1002331a: f01b faa1 bl 1003e860 <__rtw_get_ie_veneer> +1002331e: b160 cbz r0, 1002333a +10023320: 9b01 ldr r3, [sp, #4] +10023322: b153 cbz r3, 1002333a +10023324: f895 351e ldrb.w r3, [r5, #1310] ; 0x51e +10023328: 7083 strb r3, [r0, #2] +1002332a: e006 b.n 1002333a +1002332c: 4628 mov r0, r5 +1002332e: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e +10023332: f894 2520 ldrb.w r2, [r4, #1312] ; 0x520 +10023336: f005 f9f1 bl 1002871c +1002333a: 2100 movs r1, #0 +1002333c: 4620 mov r0, r4 +1002333e: 460a mov r2, r1 +10023340: 2301 movs r3, #1 +10023342: f7f7 fe71 bl 1001b028 +10023346: b002 add sp, #8 +10023348: bd70 pop {r4, r5, r6, pc} + ... + +1002334c : +1002334c: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1002334e: 1e0e subs r6, r1, #0 +10023350: 4604 mov r4, r0 +10023352: f500 6746 add.w r7, r0, #3168 ; 0xc60 +10023356: da12 bge.n 1002337e +10023358: 2301 movs r3, #1 +1002335a: aa01 add r2, sp, #4 +1002335c: 210d movs r1, #13 +1002335e: f88d 3004 strb.w r3, [sp, #4] +10023362: f00f f8c6 bl 100324f2 +10023366: 4620 mov r0, r4 +10023368: 2104 movs r1, #4 +1002336a: 4a4d ldr r2, [pc, #308] ; (100234a0 ) +1002336c: f00f f8c1 bl 100324f2 +10023370: f241 33b5 movw r3, #5045 ; 0x13b5 +10023374: 4620 mov r0, r4 +10023376: 5ce1 ldrb r1, [r4, r3] +10023378: f005 fe02 bl 10028f80 +1002337c: e089 b.n 10023492 +1002337e: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 +10023382: f003 0303 and.w r3, r3, #3 +10023386: 2b01 cmp r3, #1 +10023388: d110 bne.n 100233ac +1002338a: f004 ffe9 bl 10028360 +1002338e: 4605 mov r5, r0 +10023390: b160 cbz r0, 100233ac +10023392: f8d0 1100 ldr.w r1, [r0, #256] ; 0x100 +10023396: eb04 1241 add.w r2, r4, r1, lsl #5 +1002339a: f8c2 0790 str.w r0, [r2, #1936] ; 0x790 +1002339e: 4620 mov r0, r4 +100233a0: f005 ff52 bl 10029248 +100233a4: 4620 mov r0, r4 +100233a6: 4629 mov r1, r5 +100233a8: f005 fde2 bl 10028f70 +100233ac: f06f 4170 mvn.w r1, #4026531840 ; 0xf0000000 +100233b0: 2201 movs r2, #1 +100233b2: 4620 mov r0, r4 +100233b4: f005 f938 bl 10028628 +100233b8: 4620 mov r0, r4 +100233ba: f005 fe87 bl 100290cc +100233be: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c +100233c2: 4620 mov r0, r4 +100233c4: f023 0304 bic.w r3, r3, #4 +100233c8: 2b01 cmp r3, #1 +100233ca: bf18 it ne +100233cc: 2300 movne r3, #0 +100233ce: 2152 movs r1, #82 ; 0x52 +100233d0: f10d 0205 add.w r2, sp, #5 +100233d4: f88d 3005 strb.w r3, [sp, #5] +100233d8: f00f f88b bl 100324f2 +100233dc: 4620 mov r0, r4 +100233de: 2106 movs r1, #6 +100233e0: f104 02fc add.w r2, r4, #252 ; 0xfc +100233e4: f00f f885 bl 100324f2 +100233e8: f204 722a addw r2, r4, #1834 ; 0x72a +100233ec: 4620 mov r0, r4 +100233ee: 2110 movs r1, #16 +100233f0: f00f f87f bl 100324f2 +100233f4: f8b4 172c ldrh.w r1, [r4, #1836] ; 0x72c +100233f8: 4620 mov r0, r4 +100233fa: f005 fe96 bl 1002912a +100233fe: 4620 mov r0, r4 +10023400: f005 faa0 bl 10028944 +10023404: 4620 mov r0, r4 +10023406: f005 fb65 bl 10028ad4 +1002340a: 4638 mov r0, r7 +1002340c: f104 019c add.w r1, r4, #156 ; 0x9c +10023410: f004 ff50 bl 100282b4 +10023414: 4605 mov r5, r0 +10023416: b320 cbz r0, 10023462 +10023418: f8d0 3100 ldr.w r3, [r0, #256] ; 0x100 +1002341c: 4629 mov r1, r5 +1002341e: eb04 1343 add.w r3, r4, r3, lsl #5 +10023422: f8c3 0790 str.w r0, [r3, #1936] ; 0x790 +10023426: f894 3521 ldrb.w r3, [r4, #1313] ; 0x521 +1002342a: f880 317c strb.w r3, [r0, #380] ; 0x17c +1002342e: 4620 mov r0, r4 +10023430: f005 fda2 bl 10028f78 +10023434: 4620 mov r0, r4 +10023436: 2144 movs r1, #68 ; 0x44 +10023438: f505 7280 add.w r2, r5, #256 ; 0x100 +1002343c: f00f f859 bl 100324f2 +10023440: f8d5 3100 ldr.w r3, [r5, #256] ; 0x100 +10023444: aa02 add r2, sp, #8 +10023446: 021b lsls r3, r3, #8 +10023448: f043 0301 orr.w r3, r3, #1 +1002344c: 4620 mov r0, r4 +1002344e: 2145 movs r1, #69 ; 0x45 +10023450: f822 3d02 strh.w r3, [r2, #-2]! +10023454: f00f f84d bl 100324f2 +10023458: 4620 mov r0, r4 +1002345a: f8d5 1100 ldr.w r1, [r5, #256] ; 0x100 +1002345e: f00f f984 bl 1003276a +10023462: 2302 movs r3, #2 +10023464: 4620 mov r0, r4 +10023466: 210d movs r1, #13 +10023468: aa01 add r2, sp, #4 +1002346a: f88d 3004 strb.w r3, [sp, #4] +1002346e: f00f f840 bl 100324f2 +10023472: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 +10023476: f003 0303 and.w r3, r3, #3 +1002347a: 2b02 cmp r3, #2 +1002347c: d104 bne.n 10023488 +1002347e: 4620 mov r0, r4 +10023480: f504 61a2 add.w r1, r4, #1296 ; 0x510 +10023484: f005 fefd bl 10029282 +10023488: 4620 mov r0, r4 +1002348a: 2102 movs r1, #2 +1002348c: 2200 movs r2, #0 +1002348e: f7f9 fd3d bl 1001cf0c +10023492: 4620 mov r0, r4 +10023494: 4631 mov r1, r6 +10023496: f7ff fe75 bl 10023184 +1002349a: b003 add sp, #12 +1002349c: bdf0 pop {r4, r5, r6, r7, pc} +1002349e: bf00 nop +100234a0: 100414c1 .word 0x100414c1 + +100234a4 : +100234a4: b510 push {r4, lr} +100234a6: 4604 mov r4, r0 +100234a8: b141 cbz r1, 100234bc +100234aa: 7809 ldrb r1, [r1, #0] +100234ac: f200 5224 addw r2, r0, #1316 ; 0x524 +100234b0: f7fb f8da bl 1001e668 +100234b4: f884 0522 strb.w r0, [r4, #1314] ; 0x522 +100234b8: 2000 movs r0, #0 +100234ba: bd10 pop {r4, pc} +100234bc: 2004 movs r0, #4 +100234be: bd10 pop {r4, pc} + +100234c0 : +100234c0: b537 push {r0, r1, r2, r4, r5, lr} +100234c2: 4b10 ldr r3, [pc, #64] ; (10023504 ) +100234c4: 4604 mov r4, r0 +100234c6: f641 0534 movw r5, #6196 ; 0x1834 +100234ca: 9300 str r3, [sp, #0] +100234cc: 5961 ldr r1, [r4, r5] +100234ce: 4623 mov r3, r4 +100234d0: f500 6003 add.w r0, r0, #2096 ; 0x830 +100234d4: 4a0c ldr r2, [pc, #48] ; (10023508 ) +100234d6: f013 fcab bl 10036e30 +100234da: 4b0c ldr r3, [pc, #48] ; (1002350c ) +100234dc: f604 003c addw r0, r4, #2108 ; 0x83c +100234e0: 9300 str r3, [sp, #0] +100234e2: 5961 ldr r1, [r4, r5] +100234e4: 4623 mov r3, r4 +100234e6: 4a0a ldr r2, [pc, #40] ; (10023510 ) +100234e8: f013 fca2 bl 10036e30 +100234ec: 4b09 ldr r3, [pc, #36] ; (10023514 ) +100234ee: f504 6006 add.w r0, r4, #2144 ; 0x860 +100234f2: 9300 str r3, [sp, #0] +100234f4: 5961 ldr r1, [r4, r5] +100234f6: 4a08 ldr r2, [pc, #32] ; (10023518 ) +100234f8: 4623 mov r3, r4 +100234fa: f013 fc99 bl 10036e30 +100234fe: b003 add sp, #12 +10023500: bd30 pop {r4, r5, pc} +10023502: bf00 nop +10023504: 10041512 .word 0x10041512 +10023508: 100226f1 .word 0x100226f1 +1002350c: 1004151f .word 0x1004151f +10023510: 10022773 .word 0x10022773 +10023514: 1004152a .word 0x1004152a +10023518: 1001d275 .word 0x1001d275 + +1002351c : +1002351c: b5f0 push {r4, r5, r6, r7, lr} +1002351e: 4b53 ldr r3, [pc, #332] ; (1002366c ) +10023520: b089 sub sp, #36 ; 0x24 +10023522: 4604 mov r4, r0 +10023524: f8c4 0510 str.w r0, [r4, #1296] ; 0x510 +10023528: 466a mov r2, sp +1002352a: f103 0708 add.w r7, r3, #8 +1002352e: 6818 ldr r0, [r3, #0] +10023530: 6859 ldr r1, [r3, #4] +10023532: 4615 mov r5, r2 +10023534: c503 stmia r5!, {r0, r1} +10023536: 3308 adds r3, #8 +10023538: 42bb cmp r3, r7 +1002353a: 462a mov r2, r5 +1002353c: d1f7 bne.n 1002352e +1002353e: 6818 ldr r0, [r3, #0] +10023540: 791b ldrb r3, [r3, #4] +10023542: 6028 str r0, [r5, #0] +10023544: 712b strb r3, [r5, #4] +10023546: 220d movs r2, #13 +10023548: a804 add r0, sp, #16 +1002354a: 2100 movs r1, #0 +1002354c: f01a fb6a bl 1003dc24 +10023550: 2301 movs r3, #1 +10023552: f88d 3011 strb.w r3, [sp, #17] +10023556: 2303 movs r3, #3 +10023558: f88d 3013 strb.w r3, [sp, #19] +1002355c: 2304 movs r3, #4 +1002355e: f88d 3014 strb.w r3, [sp, #20] +10023562: 2306 movs r3, #6 +10023564: f88d 3015 strb.w r3, [sp, #21] +10023568: 2308 movs r3, #8 +1002356a: 2502 movs r5, #2 +1002356c: f88d 3016 strb.w r3, [sp, #22] +10023570: f504 60a3 add.w r0, r4, #1304 ; 0x518 +10023574: 23ff movs r3, #255 ; 0xff +10023576: 2100 movs r1, #0 +10023578: f88d 5012 strb.w r5, [sp, #18] +1002357c: f88d 3017 strb.w r3, [sp, #23] +10023580: f7f4 f898 bl 100176b4 +10023584: 2300 movs r3, #0 +10023586: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c +1002358a: f241 32b4 movw r2, #5044 ; 0x13b4 +1002358e: 5ca2 ldrb r2, [r4, r2] +10023590: f884 351f strb.w r3, [r4, #1311] ; 0x51f +10023594: f884 251e strb.w r2, [r4, #1310] ; 0x51e +10023598: f884 3520 strb.w r3, [r4, #1312] ; 0x520 +1002359c: f884 384c strb.w r3, [r4, #2124] ; 0x84c +100235a0: f241 33b5 movw r3, #5045 ; 0x13b5 +100235a4: 5ce3 ldrb r3, [r4, r3] +100235a6: f204 6039 addw r0, r4, #1593 ; 0x639 +100235aa: f884 3521 strb.w r3, [r4, #1313] ; 0x521 +100235ae: 4669 mov r1, sp +100235b0: 220d movs r2, #13 +100235b2: f7f3 ff3d bl 10017430 +100235b6: f204 602c addw r0, r4, #1580 ; 0x62c +100235ba: a904 add r1, sp, #16 +100235bc: 220d movs r2, #13 +100235be: f7f3 ff37 bl 10017430 +100235c2: f894 351e ldrb.w r3, [r4, #1310] ; 0x51e +100235c6: 2280 movs r2, #128 ; 0x80 +100235c8: 2b0e cmp r3, #14 +100235ca: bf84 itt hi +100235cc: 230c movhi r3, #12 +100235ce: f884 384b strbhi.w r3, [r4, #2123] ; 0x84b +100235d2: 6863 ldr r3, [r4, #4] +100235d4: bf98 it ls +100235d6: f884 584b strbls.w r5, [r4, #2123] ; 0x84b +100235da: 2b05 cmp r3, #5 +100235dc: f04f 0500 mov.w r5, #0 +100235e0: bf04 itt eq +100235e2: 230c moveq r3, #12 +100235e4: f884 384b strbeq.w r3, [r4, #2123] ; 0x84b +100235e8: 4629 mov r1, r5 +100235ea: f504 60d5 add.w r0, r4, #1704 ; 0x6a8 +100235ee: f8c4 5648 str.w r5, [r4, #1608] ; 0x648 +100235f2: f8c4 5650 str.w r5, [r4, #1616] ; 0x650 +100235f6: f8c4 564c str.w r5, [r4, #1612] ; 0x64c +100235fa: f884 584a strb.w r5, [r4, #2122] ; 0x84a +100235fe: f8c4 5680 str.w r5, [r4, #1664] ; 0x680 +10023602: f8c4 5684 str.w r5, [r4, #1668] ; 0x684 +10023606: f8c4 5688 str.w r5, [r4, #1672] ; 0x688 +1002360a: f8c4 568c str.w r5, [r4, #1676] ; 0x68c +1002360e: f8c4 5690 str.w r5, [r4, #1680] ; 0x690 +10023612: f8c4 5694 str.w r5, [r4, #1684] ; 0x694 +10023616: f8c4 56a0 str.w r5, [r4, #1696] ; 0x6a0 +1002361a: f8c4 56a4 str.w r5, [r4, #1700] ; 0x6a4 +1002361e: f8c4 569c str.w r5, [r4, #1692] ; 0x69c +10023622: f8c4 5698 str.w r5, [r4, #1688] ; 0x698 +10023626: f7f3 ff13 bl 10017450 +1002362a: 2309 movs r3, #9 +1002362c: f884 372f strb.w r3, [r4, #1839] ; 0x72f +10023630: 2302 movs r3, #2 +10023632: f884 3730 strb.w r3, [r4, #1840] ; 0x730 +10023636: 4620 mov r0, r4 +10023638: f884 573e strb.w r5, [r4, #1854] ; 0x73e +1002363c: f7ff ff40 bl 100234c0 +10023640: 4620 mov r0, r4 +10023642: f7f8 fd17 bl 1001c074 +10023646: f894 149e ldrb.w r1, [r4, #1182] ; 0x49e +1002364a: f204 5224 addw r2, r4, #1316 ; 0x524 +1002364e: 4620 mov r0, r4 +10023650: f7fb f80a bl 1001e668 +10023654: f884 0522 strb.w r0, [r4, #1314] ; 0x522 +10023658: 4620 mov r0, r4 +1002365a: f000 f94b bl 100238f4 +1002365e: 2364 movs r3, #100 ; 0x64 +10023660: 2001 movs r0, #1 +10023662: f8a4 3848 strh.w r3, [r4, #2120] ; 0x848 +10023666: b009 add sp, #36 ; 0x24 +10023668: bdf0 pop {r4, r5, r6, r7, pc} +1002366a: bf00 nop +1002366c: 10041417 .word 0x10041417 + +10023670 : +10023670: 2100 movs r1, #0 +10023672: f880 161c strb.w r1, [r0, #1564] ; 0x61c +10023676: f241 62a8 movw r2, #5800 ; 0x16a8 +1002367a: 5883 ldr r3, [r0, r2] +1002367c: 2b02 cmp r3, #2 +1002367e: d101 bne.n 10023684 +10023680: f7fc bd40 b.w 10020104 +10023684: 4770 bx lr + +10023686 : +10023686: 2103 movs r1, #3 +10023688: f7f9 bb36 b.w 1001ccf8 + +1002368c : +1002368c: b570 push {r4, r5, r6, lr} +1002368e: f241 63a8 movw r3, #5800 ; 0x16a8 +10023692: 58c3 ldr r3, [r0, r3] +10023694: 4604 mov r4, r0 +10023696: 2b03 cmp r3, #3 +10023698: 460d mov r5, r1 +1002369a: 4616 mov r6, r2 +1002369c: d030 beq.n 10023700 +1002369e: 2b02 cmp r3, #2 +100236a0: d114 bne.n 100236cc +100236a2: f890 351e ldrb.w r3, [r0, #1310] ; 0x51e +100236a6: 428b cmp r3, r1 +100236a8: d020 beq.n 100236ec +100236aa: 2101 movs r1, #1 +100236ac: f7fc fd2a bl 10020104 +100236b0: 4620 mov r0, r4 +100236b2: 2101 movs r1, #1 +100236b4: f7fc fd26 bl 10020104 +100236b8: 2200 movs r2, #0 +100236ba: f884 551e strb.w r5, [r4, #1310] ; 0x51e +100236be: f884 251f strb.w r2, [r4, #1311] ; 0x51f +100236c2: f884 2520 strb.w r2, [r4, #1312] ; 0x520 +100236c6: 4620 mov r0, r4 +100236c8: 4629 mov r1, r5 +100236ca: e00c b.n 100236e6 +100236cc: 2b01 cmp r3, #1 +100236ce: d117 bne.n 10023700 +100236d0: f890 351e ldrb.w r3, [r0, #1310] ; 0x51e +100236d4: 428b cmp r3, r1 +100236d6: d009 beq.n 100236ec +100236d8: 2200 movs r2, #0 +100236da: f884 151e strb.w r1, [r4, #1310] ; 0x51e +100236de: f880 251f strb.w r2, [r0, #1311] ; 0x51f +100236e2: f880 2520 strb.w r2, [r0, #1312] ; 0x520 +100236e6: 4613 mov r3, r2 +100236e8: f005 f818 bl 1002871c +100236ec: 2301 movs r3, #1 +100236ee: f884 361c strb.w r3, [r4, #1564] ; 0x61c +100236f2: f504 60c4 add.w r0, r4, #1568 ; 0x620 +100236f6: 4631 mov r1, r6 +100236f8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +100236fc: f013 bb9c b.w 10036e38 +10023700: bd70 pop {r4, r5, r6, pc} + +10023702 : +10023702: b510 push {r4, lr} +10023704: 4604 mov r4, r0 +10023706: f500 60c4 add.w r0, r0, #1568 ; 0x620 +1002370a: f013 fb97 bl 10036e3c +1002370e: 2100 movs r1, #0 +10023710: f884 161c strb.w r1, [r4, #1564] ; 0x61c +10023714: f241 63a8 movw r3, #5800 ; 0x16a8 +10023718: 58e3 ldr r3, [r4, r3] +1002371a: 2b02 cmp r3, #2 +1002371c: d104 bne.n 10023728 +1002371e: 4620 mov r0, r4 +10023720: e8bd 4010 ldmia.w sp!, {r4, lr} +10023724: f7fc bcee b.w 10020104 +10023728: bd10 pop {r4, pc} + +1002372a : +1002372a: 2301 movs r3, #1 +1002372c: f8c0 3600 str.w r3, [r0, #1536] ; 0x600 +10023730: 2300 movs r3, #0 +10023732: f880 15fc strb.w r1, [r0, #1532] ; 0x5fc +10023736: f880 3608 strb.w r3, [r0, #1544] ; 0x608 +1002373a: b12a cbz r2, 10023748 +1002373c: 4611 mov r1, r2 +1002373e: f200 6014 addw r0, r0, #1556 ; 0x614 +10023742: 2206 movs r2, #6 +10023744: f7f3 be74 b.w 10017430 +10023748: 4770 bx lr + +1002374a : +1002374a: f241 63a8 movw r3, #5800 ; 0x16a8 +1002374e: 50c1 str r1, [r0, r3] +10023750: 4770 bx lr + +10023752 : +10023752: f241 63ac movw r3, #5804 ; 0x16ac +10023756: 50c1 str r1, [r0, r3] +10023758: 4770 bx lr + +1002375a : +1002375a: b51f push {r0, r1, r2, r3, r4, lr} +1002375c: f8ad 3006 strh.w r3, [sp, #6] +10023760: f641 0334 movw r3, #6196 ; 0x1834 +10023764: 9100 str r1, [sp, #0] +10023766: f8ad 2004 strh.w r2, [sp, #4] +1002376a: 58c0 ldr r0, [r0, r3] +1002376c: f648 4110 movw r1, #35856 ; 0x8c10 +10023770: 466a mov r2, sp +10023772: 2300 movs r3, #0 +10023774: f010 f9ec bl 10033b50 +10023778: b005 add sp, #20 +1002377a: f85d fb04 ldr.w pc, [sp], #4 + ... + +10023780 : +10023780: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +10023782: 4605 mov r5, r0 +10023784: f240 1001 movw r0, #257 ; 0x101 +10023788: 460e mov r6, r1 +1002378a: f7f4 f821 bl 100177d0 +1002378e: 4604 mov r4, r0 +10023790: b1e0 cbz r0, 100237cc +10023792: 480f ldr r0, [pc, #60] ; (100237d0 ) +10023794: f7f7 fa30 bl 1001abf8 +10023798: 490d ldr r1, [pc, #52] ; (100237d0 ) +1002379a: 4602 mov r2, r0 +1002379c: 4620 mov r0, r4 +1002379e: f7f3 fe47 bl 10017430 +100237a2: 4668 mov r0, sp +100237a4: 2100 movs r1, #0 +100237a6: 2210 movs r2, #16 +100237a8: f7f3 fe52 bl 10017450 +100237ac: f641 0334 movw r3, #6196 ; 0x1834 +100237b0: 58e8 ldr r0, [r5, r3] +100237b2: f648 4102 movw r1, #35842 ; 0x8c02 +100237b6: 466a mov r2, sp +100237b8: 4623 mov r3, r4 +100237ba: f8ad 6006 strh.w r6, [sp, #6] +100237be: f010 f9c7 bl 10033b50 +100237c2: 4620 mov r0, r4 +100237c4: f240 1101 movw r1, #257 ; 0x101 +100237c8: f7f3 fe2f bl 1001742a +100237cc: b004 add sp, #16 +100237ce: bd70 pop {r4, r5, r6, pc} +100237d0: 1003fcaa .word 0x1003fcaa + +100237d4 : +100237d4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +100237d8: b08c sub sp, #48 ; 0x30 +100237da: 2700 movs r7, #0 +100237dc: ae0c add r6, sp, #48 ; 0x30 +100237de: 4c29 ldr r4, [pc, #164] ; (10023884 ) +100237e0: f806 7d29 strb.w r7, [r6, #-41]! +100237e4: 210a movs r1, #10 +100237e6: 4632 mov r2, r6 +100237e8: 4605 mov r5, r0 +100237ea: f00e fe82 bl 100324f2 +100237ee: 6823 ldr r3, [r4, #0] +100237f0: a802 add r0, sp, #8 +100237f2: 3301 adds r3, #1 +100237f4: 4639 mov r1, r7 +100237f6: 2228 movs r2, #40 ; 0x28 +100237f8: 6023 str r3, [r4, #0] +100237fa: f7f3 fe29 bl 10017450 +100237fe: a803 add r0, sp, #12 +10023800: 4921 ldr r1, [pc, #132] ; (10023888 ) +10023802: 2207 movs r2, #7 +10023804: f7f3 fe14 bl 10017430 +10023808: 2307 movs r3, #7 +1002380a: 4628 mov r0, r5 +1002380c: a902 add r1, sp, #8 +1002380e: 2201 movs r2, #1 +10023810: 9302 str r3, [sp, #8] +10023812: f7fb fddf bl 1001f3d4 +10023816: 4628 mov r0, r5 +10023818: a902 add r1, sp, #8 +1002381a: 2201 movs r2, #1 +1002381c: f7fb fdda bl 1001f3d4 +10023820: 6823 ldr r3, [r4, #0] +10023822: f505 54b5 add.w r4, r5, #5792 ; 0x16a0 +10023826: 2b3b cmp r3, #59 ; 0x3b +10023828: f104 0408 add.w r4, r4, #8 +1002382c: d805 bhi.n 1002383a +1002382e: f104 0014 add.w r0, r4, #20 +10023832: 214b movs r1, #75 ; 0x4b +10023834: f013 fb00 bl 10036e38 +10023838: e020 b.n 1002387c +1002383a: 6921 ldr r1, [r4, #16] +1002383c: b159 cbz r1, 10023856 +1002383e: f605 1858 addw r8, r5, #2392 ; 0x958 +10023842: 4640 mov r0, r8 +10023844: f006 f8b4 bl 100299b0 +10023848: 6923 ldr r3, [r4, #16] +1002384a: 4640 mov r0, r8 +1002384c: f8d3 1084 ldr.w r1, [r3, #132] ; 0x84 +10023850: 614f str r7, [r1, #20] +10023852: f007 f80e bl 1002a872 +10023856: 2100 movs r1, #0 +10023858: 2206 movs r2, #6 +1002385a: 7221 strb r1, [r4, #8] +1002385c: f104 0009 add.w r0, r4, #9 +10023860: f7f3 fdf6 bl 10017450 +10023864: 4628 mov r0, r5 +10023866: 2102 movs r1, #2 +10023868: f7ff ff8a bl 10023780 +1002386c: 2301 movs r3, #1 +1002386e: 4628 mov r0, r5 +10023870: 210a movs r1, #10 +10023872: 4632 mov r2, r6 +10023874: f88d 3007 strb.w r3, [sp, #7] +10023878: f00e fe3b bl 100324f2 +1002387c: b00c add sp, #48 ; 0x30 +1002387e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10023882: bf00 nop +10023884: 1004bba8 .word 0x1004bba8 +10023888: 1004150a .word 0x1004150a + +1002388c : +1002388c: b510 push {r4, lr} +1002388e: 2230 movs r2, #48 ; 0x30 +10023890: 2100 movs r1, #0 +10023892: 4604 mov r4, r0 +10023894: f7f3 fddc bl 10017450 +10023898: 2206 movs r2, #6 +1002389a: 7322 strb r2, [r4, #12] +1002389c: 220b movs r2, #11 +1002389e: 2301 movs r3, #1 +100238a0: 7622 strb r2, [r4, #24] +100238a2: 2200 movs r2, #0 +100238a4: 7023 strb r3, [r4, #0] +100238a6: f884 2024 strb.w r2, [r4, #36] ; 0x24 +100238aa: 6063 str r3, [r4, #4] +100238ac: 6123 str r3, [r4, #16] +100238ae: 61e3 str r3, [r4, #28] +100238b0: 62a3 str r3, [r4, #40] ; 0x28 +100238b2: bd10 pop {r4, pc} + +100238b4 : +100238b4: b537 push {r0, r1, r2, r4, r5, lr} +100238b6: f500 54b5 add.w r4, r0, #5792 ; 0x16a0 +100238ba: 3408 adds r4, #8 +100238bc: 4605 mov r5, r0 +100238be: 2100 movs r1, #0 +100238c0: 4620 mov r0, r4 +100238c2: 2220 movs r2, #32 +100238c4: f7f3 fdc4 bl 10017450 +100238c8: 4b05 ldr r3, [pc, #20] ; (100238e0 ) +100238ca: f104 0014 add.w r0, r4, #20 +100238ce: 9300 str r3, [sp, #0] +100238d0: 4629 mov r1, r5 +100238d2: 4a04 ldr r2, [pc, #16] ; (100238e4 ) +100238d4: 462b mov r3, r5 +100238d6: f013 faab bl 10036e30 +100238da: 2001 movs r0, #1 +100238dc: b003 add sp, #12 +100238de: bd30 pop {r4, r5, pc} +100238e0: 10041640 .word 0x10041640 +100238e4: 10023687 .word 0x10023687 + +100238e8 : +100238e8: f500 50b5 add.w r0, r0, #5792 ; 0x16a0 +100238ec: 301c adds r0, #28 +100238ee: f013 baaa b.w 10036e46 + ... + +100238f4 : +100238f4: b537 push {r0, r1, r2, r4, r5, lr} +100238f6: f200 55cc addw r5, r0, #1484 ; 0x5cc +100238fa: 4604 mov r4, r0 +100238fc: 2100 movs r1, #0 +100238fe: 4628 mov r0, r5 +10023900: 2230 movs r2, #48 ; 0x30 +10023902: f7f3 fda5 bl 10017450 +10023906: 4628 mov r0, r5 +10023908: f7ff ffc0 bl 1002388c +1002390c: f204 50fc addw r0, r4, #1532 ; 0x5fc +10023910: 2100 movs r1, #0 +10023912: 2218 movs r2, #24 +10023914: f7f3 fd9c bl 10017450 +10023918: f204 6014 addw r0, r4, #1556 ; 0x614 +1002391c: 2100 movs r1, #0 +1002391e: 2206 movs r2, #6 +10023920: f7f3 fd96 bl 10017450 +10023924: 4b07 ldr r3, [pc, #28] ; (10023944 ) +10023926: 2500 movs r5, #0 +10023928: 9300 str r3, [sp, #0] +1002392a: f504 60c4 add.w r0, r4, #1568 ; 0x620 +1002392e: f884 561c strb.w r5, [r4, #1564] ; 0x61c +10023932: 4621 mov r1, r4 +10023934: 4a04 ldr r2, [pc, #16] ; (10023948 ) +10023936: 4623 mov r3, r4 +10023938: f013 fa7a bl 10036e30 +1002393c: 4628 mov r0, r5 +1002393e: b003 add sp, #12 +10023940: bd30 pop {r4, r5, pc} +10023942: bf00 nop +10023944: 10041652 .word 0x10041652 +10023948: 10023671 .word 0x10023671 + +1002394c : +1002394c: f500 60c4 add.w r0, r0, #1568 ; 0x620 +10023950: f013 ba79 b.w 10036e46 + +10023954 : +10023954: 8802 ldrh r2, [r0, #0] +10023956: f412 7f80 tst.w r2, #256 ; 0x100 +1002395a: bf0c ite eq +1002395c: 2300 moveq r3, #0 +1002395e: 2302 movne r3, #2 +10023960: f3c2 2240 ubfx r2, r2, #9, #1 +10023964: 4313 orrs r3, r2 +10023966: 2b02 cmp r3, #2 +10023968: d006 beq.n 10023978 +1002396a: 2b03 cmp r3, #3 +1002396c: d004 beq.n 10023978 +1002396e: 2b01 cmp r3, #1 +10023970: bf14 ite ne +10023972: 3010 addne r0, #16 +10023974: 300a addeq r0, #10 +10023976: 4770 bx lr +10023978: 3004 adds r0, #4 +1002397a: 4770 bx lr + +1002397c : +1002397c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10023980: 4b1e ldr r3, [pc, #120] ; (100239fc ) +10023982: 2600 movs r6, #0 +10023984: 4635 mov r5, r6 +10023986: 781a ldrb r2, [r3, #0] +10023988: b1fa cbz r2, 100239ca +1002398a: f833 2c10 ldrh.w r2, [r3, #-16] +1002398e: f833 7c0e ldrh.w r7, [r3, #-14] +10023992: 3601 adds r6, #1 +10023994: 19d4 adds r4, r2, r7 +10023996: 428c cmp r4, r1 +10023998: dc17 bgt.n 100239ca +1002399a: eb00 0c02 add.w ip, r0, r2 +1002399e: 2200 movs r2, #0 +100239a0: 4614 mov r4, r2 +100239a2: 42ba cmp r2, r7 +100239a4: da10 bge.n 100239c8 +100239a6: f853 4c08 ldr.w r4, [r3, #-8] +100239aa: f814 8002 ldrb.w r8, [r4, r2] +100239ae: f81c 4002 ldrb.w r4, [ip, r2] +100239b2: ea88 0804 eor.w r8, r8, r4 +100239b6: f853 4c0c ldr.w r4, [r3, #-12] +100239ba: 5ca4 ldrb r4, [r4, r2] +100239bc: ea18 0f04 tst.w r8, r4 +100239c0: d103 bne.n 100239ca +100239c2: 3201 adds r2, #1 +100239c4: 2401 movs r4, #1 +100239c6: e7ec b.n 100239a2 +100239c8: b934 cbnz r4, 100239d8 +100239ca: 3501 adds r5, #1 +100239cc: 2d05 cmp r5, #5 +100239ce: f103 0318 add.w r3, r3, #24 +100239d2: d1d8 bne.n 10023986 +100239d4: b15e cbz r6, 100239ee +100239d6: 2400 movs r4, #0 +100239d8: 4b09 ldr r3, [pc, #36] ; (10023a00 ) +100239da: 2218 movs r2, #24 +100239dc: fb02 3505 mla r5, r2, r5, r3 +100239e0: 692b ldr r3, [r5, #16] +100239e2: 2b01 cmp r3, #1 +100239e4: d106 bne.n 100239f4 +100239e6: f084 0001 eor.w r0, r4, #1 +100239ea: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100239ee: 2001 movs r0, #1 +100239f0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100239f4: 4620 mov r0, r4 +100239f6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100239fa: bf00 nop +100239fc: 1004a99c .word 0x1004a99c +10023a00: 1004a988 .word 0x1004a988 + +10023a04 : +10023a04: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10023a08: f500 6645 add.w r6, r0, #3152 ; 0xc50 +10023a0c: 4605 mov r5, r0 +10023a0e: 4688 mov r8, r1 +10023a10: 4630 mov r0, r6 +10023a12: 2100 movs r1, #0 +10023a14: f7f3 fda4 bl 10017560 +10023a18: f8d5 4c48 ldr.w r4, [r5, #3144] ; 0xc48 +10023a1c: f605 4748 addw r7, r5, #3144 ; 0xc48 +10023a20: 4638 mov r0, r7 +10023a22: 4621 mov r1, r4 +10023a24: f7f3 fdbd bl 100175a2 +10023a28: b950 cbnz r0, 10023a40 +10023a2a: f104 0008 add.w r0, r4, #8 +10023a2e: 4641 mov r1, r8 +10023a30: 2206 movs r2, #6 +10023a32: f7f3 fd05 bl 10017440 +10023a36: b108 cbz r0, 10023a3c +10023a38: 7ba5 ldrb r5, [r4, #14] +10023a3a: e002 b.n 10023a42 +10023a3c: 6824 ldr r4, [r4, #0] +10023a3e: e7ed b.n 10023a1c +10023a40: 2500 movs r5, #0 +10023a42: 4630 mov r0, r6 +10023a44: 42bc cmp r4, r7 +10023a46: bf08 it eq +10023a48: 25ff moveq r5, #255 ; 0xff +10023a4a: 2100 movs r1, #0 +10023a4c: f7f3 fd92 bl 10017574 +10023a50: 4628 mov r0, r5 +10023a52: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10023a56 : +10023a56: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10023a5a: 4683 mov fp, r0 +10023a5c: 4614 mov r4, r2 +10023a5e: 460e mov r6, r1 +10023a60: b109 cbz r1, 10023a66 +10023a62: 6f8d ldr r5, [r1, #120] ; 0x78 +10023a64: e000 b.n 10023a68 +10023a66: 460d mov r5, r1 +10023a68: 4628 mov r0, r5 +10023a6a: f7ff ff73 bl 10023954 +10023a6e: 882b ldrh r3, [r5, #0] +10023a70: 1d27 adds r7, r4, #4 +10023a72: 8023 strh r3, [r4, #0] +10023a74: 8aeb ldrh r3, [r5, #22] +10023a76: 4682 mov sl, r0 +10023a78: 091b lsrs r3, r3, #4 +10023a7a: 82e3 strh r3, [r4, #22] +10023a7c: 886b ldrh r3, [r5, #2] +10023a7e: 4638 mov r0, r7 +10023a80: 8063 strh r3, [r4, #2] +10023a82: 1d29 adds r1, r5, #4 +10023a84: 2206 movs r2, #6 +10023a86: f104 080a add.w r8, r4, #10 +10023a8a: f7f3 fcd1 bl 10017430 +10023a8e: f104 0910 add.w r9, r4, #16 +10023a92: 4640 mov r0, r8 +10023a94: f105 010a add.w r1, r5, #10 +10023a98: 2206 movs r2, #6 +10023a9a: f7f3 fcc9 bl 10017430 +10023a9e: 2206 movs r2, #6 +10023aa0: 4648 mov r0, r9 +10023aa2: f105 0110 add.w r1, r5, #16 +10023aa6: f7f3 fcc3 bl 10017430 +10023aaa: 4658 mov r0, fp +10023aac: 4651 mov r1, sl +10023aae: f7ff ffa9 bl 10023a04 +10023ab2: 77a0 strb r0, [r4, #30] +10023ab4: f896 306c ldrb.w r3, [r6, #108] ; 0x6c +10023ab8: f104 0018 add.w r0, r4, #24 +10023abc: 77e3 strb r3, [r4, #31] +10023abe: 882a ldrh r2, [r5, #0] +10023ac0: f412 7f80 tst.w r2, #256 ; 0x100 +10023ac4: bf0c ite eq +10023ac6: 2300 moveq r3, #0 +10023ac8: 2302 movne r3, #2 +10023aca: f3c2 2240 ubfx r2, r2, #9, #1 +10023ace: 4313 orrs r3, r2 +10023ad0: 2b01 cmp r3, #1 +10023ad2: d004 beq.n 10023ade +10023ad4: 2b02 cmp r3, #2 +10023ad6: d008 beq.n 10023aea +10023ad8: b94b cbnz r3, 10023aee +10023ada: 4649 mov r1, r9 +10023adc: e000 b.n 10023ae0 +10023ade: 4641 mov r1, r8 +10023ae0: 2206 movs r2, #6 +10023ae2: e8bd 4ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10023ae6: f7f3 bca3 b.w 10017430 +10023aea: 4639 mov r1, r7 +10023aec: e7f8 b.n 10023ae0 +10023aee: 2100 movs r1, #0 +10023af0: 2206 movs r2, #6 +10023af2: e8bd 4ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10023af6: f7f3 bcab b.w 10017450 + +10023afa : +10023afa: b5f0 push {r4, r5, r6, r7, lr} +10023afc: 2330 movs r3, #48 ; 0x30 +10023afe: b085 sub sp, #20 +10023b00: 460d mov r5, r1 +10023b02: f88d 1007 strb.w r1, [sp, #7] +10023b06: 4604 mov r4, r0 +10023b08: 4617 mov r7, r2 +10023b0a: 9303 str r3, [sp, #12] +10023b0c: f890 1c44 ldrb.w r1, [r0, #3140] ; 0xc44 +10023b10: 2d00 cmp r5, #0 +10023b12: d036 beq.n 10023b82 +10023b14: 2900 cmp r1, #0 +10023b16: d151 bne.n 10023bbc +10023b18: 2501 movs r5, #1 +10023b1a: f500 6645 add.w r6, r0, #3152 ; 0xc50 +10023b1e: f880 551f strb.w r5, [r0, #1311] ; 0x51f +10023b22: f880 5520 strb.w r5, [r0, #1312] ; 0x520 +10023b26: 4630 mov r0, r6 +10023b28: f7f3 fd1a bl 10017560 +10023b2c: f894 3c44 ldrb.w r3, [r4, #3140] ; 0xc44 +10023b30: b93b cbnz r3, 10023b42 +10023b32: f604 4048 addw r0, r4, #3144 ; 0xc48 +10023b36: f7f3 fc93 bl 10017460 +10023b3a: f884 5c44 strb.w r5, [r4, #3140] ; 0xc44 +10023b3e: f884 7c45 strb.w r7, [r4, #3141] ; 0xc45 +10023b42: 4630 mov r0, r6 +10023b44: 2100 movs r1, #0 +10023b46: f7f3 fd15 bl 10017574 +10023b4a: 2100 movs r1, #0 +10023b4c: 4620 mov r0, r4 +10023b4e: f002 fd9b bl 10026688 +10023b52: 4620 mov r0, r4 +10023b54: f002 fc8f bl 10026476 +10023b58: 4620 mov r0, r4 +10023b5a: f10d 0207 add.w r2, sp, #7 +10023b5e: 2151 movs r1, #81 ; 0x51 +10023b60: f00e fcc7 bl 100324f2 +10023b64: aa03 add r2, sp, #12 +10023b66: 4620 mov r0, r4 +10023b68: 2134 movs r1, #52 ; 0x34 +10023b6a: f00e fcc2 bl 100324f2 +10023b6e: 4620 mov r0, r4 +10023b70: f004 fd44 bl 100285fc +10023b74: 4620 mov r0, r4 +10023b76: f06f 0101 mvn.w r1, #1 +10023b7a: 2200 movs r2, #0 +10023b7c: f004 fd54 bl 10028628 +10023b80: e01c b.n 10023bbc +10023b82: b1d9 cbz r1, 10023bbc +10023b84: f7e9 fd64 bl 1000d650 +10023b88: 4620 mov r0, r4 +10023b8a: 2151 movs r1, #81 ; 0x51 +10023b8c: f10d 0207 add.w r2, sp, #7 +10023b90: f00e fcaf bl 100324f2 +10023b94: 4620 mov r0, r4 +10023b96: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e +10023b9a: 462a mov r2, r5 +10023b9c: 462b mov r3, r5 +10023b9e: f884 551f strb.w r5, [r4, #1311] ; 0x51f +10023ba2: f884 5520 strb.w r5, [r4, #1312] ; 0x520 +10023ba6: f004 fdb9 bl 1002871c +10023baa: f241 33bf movw r3, #5055 ; 0x13bf +10023bae: 4620 mov r0, r4 +10023bb0: 5ce1 ldrb r1, [r4, r3] +10023bb2: f002 fd69 bl 10026688 +10023bb6: 4620 mov r0, r4 +10023bb8: f004 fd2b bl 10028612 +10023bbc: b005 add sp, #20 +10023bbe: bdf0 pop {r4, r5, r6, r7, pc} + +10023bc0 <_promisc_deinit>: +10023bc0: b570 push {r4, r5, r6, lr} +10023bc2: f500 6545 add.w r5, r0, #3152 ; 0xc50 +10023bc6: 4604 mov r4, r0 +10023bc8: 2100 movs r1, #0 +10023bca: 4628 mov r0, r5 +10023bcc: f7f3 fcc8 bl 10017560 +10023bd0: f894 3c44 ldrb.w r3, [r4, #3140] ; 0xc44 +10023bd4: b92b cbnz r3, 10023be2 <_promisc_deinit+0x22> +10023bd6: 4628 mov r0, r5 +10023bd8: 2100 movs r1, #0 +10023bda: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10023bde: f7f3 bcc9 b.w 10017574 +10023be2: 2300 movs r3, #0 +10023be4: f884 3c44 strb.w r3, [r4, #3140] ; 0xc44 +10023be8: f884 3c45 strb.w r3, [r4, #3141] ; 0xc45 +10023bec: f604 4048 addw r0, r4, #3144 ; 0xc48 +10023bf0: f8d4 1c48 ldr.w r1, [r4, #3144] ; 0xc48 +10023bf4: f7f3 fcd5 bl 100175a2 +10023bf8: 2800 cmp r0, #0 +10023bfa: d1ec bne.n 10023bd6 <_promisc_deinit+0x16> +10023bfc: f8d4 6c48 ldr.w r6, [r4, #3144] ; 0xc48 +10023c00: 4630 mov r0, r6 +10023c02: f7f3 fc41 bl 10017488 +10023c06: 4630 mov r0, r6 +10023c08: 2134 movs r1, #52 ; 0x34 +10023c0a: f7f3 fc0e bl 1001742a +10023c0e: e7ed b.n 10023bec <_promisc_deinit+0x2c> + +10023c10 <_promisc_recv_func>: +10023c10: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10023c14: 460c mov r4, r1 +10023c16: 6fa5 ldr r5, [r4, #120] ; 0x78 +10023c18: b09b sub sp, #108 ; 0x6c +10023c1a: 882a ldrh r2, [r5, #0] +10023c1c: f600 3154 addw r1, r0, #2900 ; 0xb54 +10023c20: b2d3 uxtb r3, r2 +10023c22: f412 7f80 tst.w r2, #256 ; 0x100 +10023c26: 9109 str r1, [sp, #36] ; 0x24 +10023c28: f003 01fc and.w r1, r3, #252 ; 0xfc +10023c2c: 9105 str r1, [sp, #20] +10023c2e: f3c2 2240 ubfx r2, r2, #9, #1 +10023c32: bf0c ite eq +10023c34: 2100 moveq r1, #0 +10023c36: 2102 movne r1, #2 +10023c38: 430a orrs r2, r1 +10023c3a: f884 2022 strb.w r2, [r4, #34] ; 0x22 +10023c3e: 882a ldrh r2, [r5, #0] +10023c40: f013 030c ands.w r3, r3, #12 +10023c44: f3c2 3280 ubfx r2, r2, #14, #1 +10023c48: f884 202d strb.w r2, [r4, #45] ; 0x2d +10023c4c: 882a ldrh r2, [r5, #0] +10023c4e: 4606 mov r6, r0 +10023c50: ea4f 32d2 mov.w r2, r2, lsr #15 +10023c54: f884 202c strb.w r2, [r4, #44] ; 0x2c +10023c58: d003 beq.n 10023c62 <_promisc_recv_func+0x52> +10023c5a: 2b08 cmp r3, #8 +10023c5c: f000 815b beq.w 10023f16 <_promisc_recv_func+0x306> +10023c60: e228 b.n 100240b4 <_promisc_recv_func+0x4a4> +10023c62: 9a05 ldr r2, [sp, #20] +10023c64: 2a80 cmp r2, #128 ; 0x80 +10023c66: d002 beq.n 10023c6e <_promisc_recv_func+0x5e> +10023c68: 2a50 cmp r2, #80 ; 0x50 +10023c6a: f040 813f bne.w 10023eec <_promisc_recv_func+0x2dc> +10023c6e: f896 3c45 ldrb.w r3, [r6, #3141] ; 0xc45 +10023c72: 2b00 cmp r3, #0 +10023c74: f000 813a beq.w 10023eec <_promisc_recv_func+0x2dc> +10023c78: f894 306c ldrb.w r3, [r4, #108] ; 0x6c +10023c7c: 2100 movs r1, #0 +10023c7e: 2220 movs r2, #32 +10023c80: a812 add r0, sp, #72 ; 0x48 +10023c82: f105 0b18 add.w fp, r5, #24 +10023c86: 9307 str r3, [sp, #28] +10023c88: f8ad 102a strh.w r1, [sp, #42] ; 0x2a +10023c8c: f8ad 102c strh.w r1, [sp, #44] ; 0x2c +10023c90: f8ad 102e strh.w r1, [sp, #46] ; 0x2e +10023c94: 910f str r1, [sp, #60] ; 0x3c +10023c96: 9110 str r1, [sp, #64] ; 0x40 +10023c98: f8d4 a070 ldr.w sl, [r4, #112] ; 0x70 +10023c9c: f7f3 fbd8 bl 10017450 +10023ca0: 4658 mov r0, fp +10023ca2: f7f9 fc95 bl 1001d5d0 +10023ca6: 2202 movs r2, #2 +10023ca8: 4601 mov r1, r0 +10023caa: f10d 002a add.w r0, sp, #42 ; 0x2a +10023cae: f7f3 fbbf bl 10017430 +10023cb2: f8bd 102a ldrh.w r1, [sp, #42] ; 0x2a +10023cb6: f105 0824 add.w r8, r5, #36 ; 0x24 +10023cba: f1aa 0724 sub.w r7, sl, #36 ; 0x24 +10023cbe: 9108 str r1, [sp, #32] +10023cc0: 4640 mov r0, r8 +10023cc2: 2103 movs r1, #3 +10023cc4: aa0c add r2, sp, #48 ; 0x30 +10023cc6: 463b mov r3, r7 +10023cc8: f01a fdca bl 1003e860 <__rtw_get_ie_veneer> +10023ccc: b110 cbz r0, 10023cd4 <_promisc_recv_func+0xc4> +10023cce: 9b0c ldr r3, [sp, #48] ; 0x30 +10023cd0: b113 cbz r3, 10023cd8 <_promisc_recv_func+0xc8> +10023cd2: 7880 ldrb r0, [r0, #2] +10023cd4: 9006 str r0, [sp, #24] +10023cd6: e000 b.n 10023cda <_promisc_recv_func+0xca> +10023cd8: 9306 str r3, [sp, #24] +10023cda: 2100 movs r1, #0 +10023cdc: 4640 mov r0, r8 +10023cde: aa0e add r2, sp, #56 ; 0x38 +10023ce0: 463b mov r3, r7 +10023ce2: f01a fdbd bl 1003e860 <__rtw_get_ie_veneer> +10023ce6: 4601 mov r1, r0 +10023ce8: 2800 cmp r0, #0 +10023cea: f000 80ff beq.w 10023eec <_promisc_recv_func+0x2dc> +10023cee: 7843 ldrb r3, [r0, #1] +10023cf0: b13b cbz r3, 10023d02 <_promisc_recv_func+0xf2> +10023cf2: 9a0e ldr r2, [sp, #56] ; 0x38 +10023cf4: 2a20 cmp r2, #32 +10023cf6: f200 80f9 bhi.w 10023eec <_promisc_recv_func+0x2dc> +10023cfa: a812 add r0, sp, #72 ; 0x48 +10023cfc: 3102 adds r1, #2 +10023cfe: f7f3 fb97 bl 10017430 +10023d02: 4640 mov r0, r8 +10023d04: 213d movs r1, #61 ; 0x3d +10023d06: aa0d add r2, sp, #52 ; 0x34 +10023d08: 463b mov r3, r7 +10023d0a: f01a fda9 bl 1003e860 <__rtw_get_ie_veneer> +10023d0e: b150 cbz r0, 10023d26 <_promisc_recv_func+0x116> +10023d10: 9b0d ldr r3, [sp, #52] ; 0x34 +10023d12: b153 cbz r3, 10023d2a <_promisc_recv_func+0x11a> +10023d14: 78c3 ldrb r3, [r0, #3] +10023d16: f003 0204 and.w r2, r3, #4 +10023d1a: f002 01ff and.w r1, r2, #255 ; 0xff +10023d1e: b132 cbz r2, 10023d2e <_promisc_recv_func+0x11e> +10023d20: f003 0303 and.w r3, r3, #3 +10023d24: e001 b.n 10023d2a <_promisc_recv_func+0x11a> +10023d26: 9004 str r0, [sp, #16] +10023d28: e002 b.n 10023d30 <_promisc_recv_func+0x120> +10023d2a: 9304 str r3, [sp, #16] +10023d2c: e000 b.n 10023d30 <_promisc_recv_func+0x120> +10023d2e: 9104 str r1, [sp, #16] +10023d30: f04f 0900 mov.w r9, #0 +10023d34: ab0b add r3, sp, #44 ; 0x2c +10023d36: 9301 str r3, [sp, #4] +10023d38: f1aa 0118 sub.w r1, sl, #24 +10023d3c: f8cd 9000 str.w r9, [sp] +10023d40: 4658 mov r0, fp +10023d42: 464a mov r2, r9 +10023d44: f10d 032e add.w r3, sp, #46 ; 0x2e +10023d48: f01a fe0a bl 1003e960 <__rtw_get_sec_ie_veneer> +10023d4c: f8bd a02c ldrh.w sl, [sp, #44] ; 0x2c +10023d50: f1ba 0f00 cmp.w sl, #0 +10023d54: d010 beq.n 10023d78 <_promisc_recv_func+0x168> +10023d56: 4640 mov r0, r8 +10023d58: a911 add r1, sp, #68 ; 0x44 +10023d5a: 463a mov r2, r7 +10023d5c: f01a fdb4 bl 1003e8c8 <__rtw_get_wpa_ie_veneer> +10023d60: b320 cbz r0, 10023dac <_promisc_recv_func+0x19c> +10023d62: 9b11 ldr r3, [sp, #68] ; 0x44 +10023d64: b313 cbz r3, 10023dac <_promisc_recv_func+0x19c> +10023d66: f8bd 102c ldrh.w r1, [sp, #44] ; 0x2c +10023d6a: f8cd 9000 str.w r9, [sp] +10023d6e: aa0f add r2, sp, #60 ; 0x3c +10023d70: ab10 add r3, sp, #64 ; 0x40 +10023d72: f01a fdd1 bl 1003e918 <__rtw_parse_wpa_ie_veneer> +10023d76: e019 b.n 10023dac <_promisc_recv_func+0x19c> +10023d78: f8bd 302e ldrh.w r3, [sp, #46] ; 0x2e +10023d7c: b183 cbz r3, 10023da0 <_promisc_recv_func+0x190> +10023d7e: 4640 mov r0, r8 +10023d80: a911 add r1, sp, #68 ; 0x44 +10023d82: 463a mov r2, r7 +10023d84: f01a fd88 bl 1003e898 <__rtw_get_wpa2_ie_veneer> +10023d88: b180 cbz r0, 10023dac <_promisc_recv_func+0x19c> +10023d8a: 9b11 ldr r3, [sp, #68] ; 0x44 +10023d8c: b173 cbz r3, 10023dac <_promisc_recv_func+0x19c> +10023d8e: f8bd 102e ldrh.w r1, [sp, #46] ; 0x2e +10023d92: f8cd a000 str.w sl, [sp] +10023d96: aa0f add r2, sp, #60 ; 0x3c +10023d98: ab10 add r3, sp, #64 ; 0x40 +10023d9a: f01a fd9d bl 1003e8d8 <__rtw_parse_wpa2_ie_veneer> +10023d9e: e005 b.n 10023dac <_promisc_recv_func+0x19c> +10023da0: 9a08 ldr r2, [sp, #32] +10023da2: 06d3 lsls r3, r2, #27 +10023da4: bf4c ite mi +10023da6: 2302 movmi r3, #2 +10023da8: 2301 movpl r3, #1 +10023daa: 930f str r3, [sp, #60] ; 0x3c +10023dac: 9f0f ldr r7, [sp, #60] ; 0x3c +10023dae: 2f04 cmp r7, #4 +10023db0: d01d beq.n 10023dee <_promisc_recv_func+0x1de> +10023db2: dc02 bgt.n 10023dba <_promisc_recv_func+0x1aa> +10023db4: 2f02 cmp r7, #2 +10023db6: d01f beq.n 10023df8 <_promisc_recv_func+0x1e8> +10023db8: e003 b.n 10023dc2 <_promisc_recv_func+0x1b2> +10023dba: 2f08 cmp r7, #8 +10023dbc: d003 beq.n 10023dc6 <_promisc_recv_func+0x1b6> +10023dbe: 2f10 cmp r7, #16 +10023dc0: d00b beq.n 10023dda <_promisc_recv_func+0x1ca> +10023dc2: 2701 movs r7, #1 +10023dc4: e018 b.n 10023df8 <_promisc_recv_func+0x1e8> +10023dc6: f8bd 302e ldrh.w r3, [sp, #46] ; 0x2e +10023dca: b993 cbnz r3, 10023df2 <_promisc_recv_func+0x1e2> +10023dcc: f8bd 302c ldrh.w r3, [sp, #44] ; 0x2c +10023dd0: 2b00 cmp r3, #0 +10023dd2: bf14 ite ne +10023dd4: 2703 movne r7, #3 +10023dd6: 2701 moveq r7, #1 +10023dd8: e00e b.n 10023df8 <_promisc_recv_func+0x1e8> +10023dda: f8bd 302e ldrh.w r3, [sp, #46] ; 0x2e +10023dde: b953 cbnz r3, 10023df6 <_promisc_recv_func+0x1e6> +10023de0: f8bd 302c ldrh.w r3, [sp, #44] ; 0x2c +10023de4: 2b00 cmp r3, #0 +10023de6: bf14 ite ne +10023de8: 2704 movne r7, #4 +10023dea: 2701 moveq r7, #1 +10023dec: e004 b.n 10023df8 <_promisc_recv_func+0x1e8> +10023dee: 2709 movs r7, #9 +10023df0: e002 b.n 10023df8 <_promisc_recv_func+0x1e8> +10023df2: 2705 movs r7, #5 +10023df4: e000 b.n 10023df8 <_promisc_recv_func+0x1e8> +10023df6: 2706 movs r7, #6 +10023df8: f896 3c44 ldrb.w r3, [r6, #3140] ; 0xc44 +10023dfc: f8dd 8038 ldr.w r8, [sp, #56] ; 0x38 +10023e00: 2b00 cmp r3, #0 +10023e02: d073 beq.n 10023eec <_promisc_recv_func+0x2dc> +10023e04: f105 0910 add.w r9, r5, #16 +10023e08: 49a9 ldr r1, [pc, #676] ; (100240b0 <_promisc_recv_func+0x4a0>) +10023e0a: 4648 mov r0, r9 +10023e0c: 2206 movs r2, #6 +10023e0e: f7f3 fb17 bl 10017440 +10023e12: 4601 mov r1, r0 +10023e14: 2800 cmp r0, #0 +10023e16: d169 bne.n 10023eec <_promisc_recv_func+0x2dc> +10023e18: f506 6345 add.w r3, r6, #3152 ; 0xc50 +10023e1c: 4618 mov r0, r3 +10023e1e: 9308 str r3, [sp, #32] +10023e20: f7f3 fb9e bl 10017560 +10023e24: f8d6 bc48 ldr.w fp, [r6, #3144] ; 0xc48 +10023e28: f606 4a48 addw sl, r6, #3144 ; 0xc48 +10023e2c: 4650 mov r0, sl +10023e2e: 4659 mov r1, fp +10023e30: f7f3 fbb7 bl 100175a2 +10023e34: b9d0 cbnz r0, 10023e6c <_promisc_recv_func+0x25c> +10023e36: f10b 0008 add.w r0, fp, #8 +10023e3a: 4649 mov r1, r9 +10023e3c: 2206 movs r2, #6 +10023e3e: f7f3 faff bl 10017440 +10023e42: b180 cbz r0, 10023e66 <_promisc_recv_func+0x256> +10023e44: 9906 ldr r1, [sp, #24] +10023e46: 9a04 ldr r2, [sp, #16] +10023e48: f88b 100f strb.w r1, [fp, #15] +10023e4c: f88b 2031 strb.w r2, [fp, #49] ; 0x31 +10023e50: f88b 700e strb.w r7, [fp, #14] +10023e54: f88b 8030 strb.w r8, [fp, #48] ; 0x30 +10023e58: f10b 0010 add.w r0, fp, #16 +10023e5c: a912 add r1, sp, #72 ; 0x48 +10023e5e: 4642 mov r2, r8 +10023e60: f7f3 fae6 bl 10017430 +10023e64: e002 b.n 10023e6c <_promisc_recv_func+0x25c> +10023e66: f8db b000 ldr.w fp, [fp] +10023e6a: e7dd b.n 10023e28 <_promisc_recv_func+0x218> +10023e6c: 45d3 cmp fp, sl +10023e6e: d139 bne.n 10023ee4 <_promisc_recv_func+0x2d4> +10023e70: 9b07 ldr r3, [sp, #28] +10023e72: fa4f fa83 sxtb.w sl, r3 +10023e76: fa1f fa8a uxth.w sl, sl +10023e7a: f8cd a01c str.w sl, [sp, #28] +10023e7e: f8d6 ac48 ldr.w sl, [r6, #3144] ; 0xc48 +10023e82: 4658 mov r0, fp +10023e84: 4651 mov r1, sl +10023e86: f7f3 fb8c bl 100175a2 +10023e8a: b928 cbnz r0, 10023e98 <_promisc_recv_func+0x288> +10023e8c: 9b07 ldr r3, [sp, #28] +10023e8e: f9ba 1032 ldrsh.w r1, [sl, #50] ; 0x32 +10023e92: b21a sxth r2, r3 +10023e94: 4291 cmp r1, r2 +10023e96: dc22 bgt.n 10023ede <_promisc_recv_func+0x2ce> +10023e98: 2034 movs r0, #52 ; 0x34 +10023e9a: f7f3 fc99 bl 100177d0 +10023e9e: 4603 mov r3, r0 +10023ea0: b300 cbz r0, 10023ee4 <_promisc_recv_func+0x2d4> +10023ea2: 4649 mov r1, r9 +10023ea4: 3008 adds r0, #8 +10023ea6: 2206 movs r2, #6 +10023ea8: 9303 str r3, [sp, #12] +10023eaa: f7f3 fac1 bl 10017430 +10023eae: 9b03 ldr r3, [sp, #12] +10023eb0: 9906 ldr r1, [sp, #24] +10023eb2: 9a04 ldr r2, [sp, #16] +10023eb4: 739f strb r7, [r3, #14] +10023eb6: 73d9 strb r1, [r3, #15] +10023eb8: f883 8030 strb.w r8, [r3, #48] ; 0x30 +10023ebc: f883 2031 strb.w r2, [r3, #49] ; 0x31 +10023ec0: f103 0010 add.w r0, r3, #16 +10023ec4: a912 add r1, sp, #72 ; 0x48 +10023ec6: 4642 mov r2, r8 +10023ec8: 9303 str r3, [sp, #12] +10023eca: f7f3 fab1 bl 10017430 +10023ece: 9b03 ldr r3, [sp, #12] +10023ed0: 9907 ldr r1, [sp, #28] +10023ed2: 4618 mov r0, r3 +10023ed4: 8659 strh r1, [r3, #50] ; 0x32 +10023ed6: 4651 mov r1, sl +10023ed8: f7f3 fad0 bl 1001747c +10023edc: e002 b.n 10023ee4 <_promisc_recv_func+0x2d4> +10023ede: f8da a000 ldr.w sl, [sl] +10023ee2: e7ce b.n 10023e82 <_promisc_recv_func+0x272> +10023ee4: 9808 ldr r0, [sp, #32] +10023ee6: 2100 movs r1, #0 +10023ee8: f7f3 fb44 bl 10017574 +10023eec: f8d6 3680 ldr.w r3, [r6, #1664] ; 0x680 +10023ef0: f003 0303 and.w r3, r3, #3 +10023ef4: 2b03 cmp r3, #3 +10023ef6: f040 80dd bne.w 100240b4 <_promisc_recv_func+0x4a4> +10023efa: f896 7c5a ldrb.w r7, [r6, #3162] ; 0xc5a +10023efe: 2f00 cmp r7, #0 +10023f00: f000 80d9 beq.w 100240b6 <_promisc_recv_func+0x4a6> +10023f04: 9a05 ldr r2, [sp, #20] +10023f06: 2a40 cmp r2, #64 ; 0x40 +10023f08: f040 80d4 bne.w 100240b4 <_promisc_recv_func+0x4a4> +10023f0c: 4630 mov r0, r6 +10023f0e: 4621 mov r1, r4 +10023f10: f7fb f9d4 bl 1001f2bc +10023f14: e0ce b.n 100240b4 <_promisc_recv_func+0x4a4> +10023f16: 9905 ldr r1, [sp, #20] +10023f18: 09cb lsrs r3, r1, #7 +10023f1a: f884 3024 strb.w r3, [r4, #36] ; 0x24 +10023f1e: 882b ldrh r3, [r5, #0] +10023f20: f403 7280 and.w r2, r3, #256 ; 0x100 +10023f24: b292 uxth r2, r2 +10023f26: 2a00 cmp r2, #0 +10023f28: bf0c ite eq +10023f2a: 2100 moveq r1, #0 +10023f2c: 2102 movne r1, #2 +10023f2e: f3c3 2340 ubfx r3, r3, #9, #1 +10023f32: 4319 orrs r1, r3 +10023f34: 2901 cmp r1, #1 +10023f36: d003 beq.n 10023f40 <_promisc_recv_func+0x330> +10023f38: d302 bcc.n 10023f40 <_promisc_recv_func+0x330> +10023f3a: f105 0810 add.w r8, r5, #16 +10023f3e: e001 b.n 10023f44 <_promisc_recv_func+0x334> +10023f40: f105 0804 add.w r8, r5, #4 +10023f44: 2a00 cmp r2, #0 +10023f46: bf0c ite eq +10023f48: 2200 moveq r2, #0 +10023f4a: 2202 movne r2, #2 +10023f4c: 4313 orrs r3, r2 +10023f4e: 2b01 cmp r3, #1 +10023f50: d003 beq.n 10023f5a <_promisc_recv_func+0x34a> +10023f52: d305 bcc.n 10023f60 <_promisc_recv_func+0x350> +10023f54: 2b02 cmp r3, #2 +10023f56: d003 beq.n 10023f60 <_promisc_recv_func+0x350> +10023f58: e005 b.n 10023f66 <_promisc_recv_func+0x356> +10023f5a: f105 0710 add.w r7, r5, #16 +10023f5e: e004 b.n 10023f6a <_promisc_recv_func+0x35a> +10023f60: f105 070a add.w r7, r5, #10 +10023f64: e001 b.n 10023f6a <_promisc_recv_func+0x35a> +10023f66: f105 0718 add.w r7, r5, #24 +10023f6a: 4628 mov r0, r5 +10023f6c: f7ff fcf2 bl 10023954 +10023f70: 4641 mov r1, r8 +10023f72: 2206 movs r2, #6 +10023f74: 4681 mov r9, r0 +10023f76: f104 0036 add.w r0, r4, #54 ; 0x36 +10023f7a: f7f3 fa59 bl 10017430 +10023f7e: f104 003c add.w r0, r4, #60 ; 0x3c +10023f82: 4639 mov r1, r7 +10023f84: 2206 movs r2, #6 +10023f86: f7f3 fa53 bl 10017430 +10023f8a: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10023f8e: 2b03 cmp r3, #3 +10023f90: f200 8090 bhi.w 100240b4 <_promisc_recv_func+0x4a4> +10023f94: e8df f003 tbb [pc, r3] +10023f98: 27100602 .word 0x27100602 +10023f9c: f104 0048 add.w r0, r4, #72 ; 0x48 +10023fa0: 4641 mov r1, r8 +10023fa2: e00c b.n 10023fbe <_promisc_recv_func+0x3ae> +10023fa4: f104 0048 add.w r0, r4, #72 ; 0x48 +10023fa8: 4641 mov r1, r8 +10023faa: 2206 movs r2, #6 +10023fac: f7f3 fa40 bl 10017430 +10023fb0: f104 0042 add.w r0, r4, #66 ; 0x42 +10023fb4: 4649 mov r1, r9 +10023fb6: e008 b.n 10023fca <_promisc_recv_func+0x3ba> +10023fb8: f104 0048 add.w r0, r4, #72 ; 0x48 +10023fbc: 4649 mov r1, r9 +10023fbe: 2206 movs r2, #6 +10023fc0: f7f3 fa36 bl 10017430 +10023fc4: f104 0042 add.w r0, r4, #66 ; 0x42 +10023fc8: 4639 mov r1, r7 +10023fca: 2206 movs r2, #6 +10023fcc: f7f3 fa30 bl 10017430 +10023fd0: f894 3024 ldrb.w r3, [r4, #36] ; 0x24 +10023fd4: 2b01 cmp r3, #1 +10023fd6: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +10023fda: d112 bne.n 10024002 <_promisc_recv_func+0x3f2> +10023fdc: 2b03 cmp r3, #3 +10023fde: bf14 ite ne +10023fe0: 231a movne r3, #26 +10023fe2: 2320 moveq r3, #32 +10023fe4: e011 b.n 1002400a <_promisc_recv_func+0x3fa> +10023fe6: f104 0048 add.w r0, r4, #72 ; 0x48 +10023fea: 1d29 adds r1, r5, #4 +10023fec: 2206 movs r2, #6 +10023fee: f7f3 fa1f bl 10017430 +10023ff2: f104 0042 add.w r0, r4, #66 ; 0x42 +10023ff6: f105 010a add.w r1, r5, #10 +10023ffa: 2206 movs r2, #6 +10023ffc: f7f3 fa18 bl 10017430 +10024000: e058 b.n 100240b4 <_promisc_recv_func+0x4a4> +10024002: 2b03 cmp r3, #3 +10024004: bf14 ite ne +10024006: 2318 movne r3, #24 +10024008: 231e moveq r3, #30 +1002400a: f884 3021 strb.w r3, [r4, #33] ; 0x21 +1002400e: f894 302c ldrb.w r3, [r4, #44] ; 0x2c +10024012: b123 cbz r3, 1002401e <_promisc_recv_func+0x40e> +10024014: f894 3021 ldrb.w r3, [r4, #33] ; 0x21 +10024018: 3304 adds r3, #4 +1002401a: f884 3021 strb.w r3, [r4, #33] ; 0x21 +1002401e: 4630 mov r0, r6 +10024020: 4649 mov r1, r9 +10024022: f7ff fcef bl 10023a04 +10024026: 28ff cmp r0, #255 ; 0xff +10024028: d044 beq.n 100240b4 <_promisc_recv_func+0x4a4> +1002402a: f894 302d ldrb.w r3, [r4, #45] ; 0x2d +1002402e: 2b00 cmp r3, #0 +10024030: d035 beq.n 1002409e <_promisc_recv_func+0x48e> +10024032: f896 3c45 ldrb.w r3, [r6, #3141] ; 0xc45 +10024036: b393 cbz r3, 1002409e <_promisc_recv_func+0x48e> +10024038: 3801 subs r0, #1 +1002403a: 2808 cmp r0, #8 +1002403c: d80e bhi.n 1002405c <_promisc_recv_func+0x44c> +1002403e: e8df f000 tbb [pc, r0] +10024042: 050d .short 0x050d +10024044: 09070907 .word 0x09070907 +10024048: 0d09 .short 0x0d09 +1002404a: 0b .byte 0x0b +1002404b: 00 .byte 0x00 +1002404c: 2301 movs r3, #1 +1002404e: e006 b.n 1002405e <_promisc_recv_func+0x44e> +10024050: 2302 movs r3, #2 +10024052: e004 b.n 1002405e <_promisc_recv_func+0x44e> +10024054: 2304 movs r3, #4 +10024056: e002 b.n 1002405e <_promisc_recv_func+0x44e> +10024058: 2305 movs r3, #5 +1002405a: e000 b.n 1002405e <_promisc_recv_func+0x44e> +1002405c: 2300 movs r3, #0 +1002405e: f884 302f strb.w r3, [r4, #47] ; 0x2f +10024062: f894 302f ldrb.w r3, [r4, #47] ; 0x2f +10024066: 3b01 subs r3, #1 +10024068: 2b05 cmp r3, #5 +1002406a: d812 bhi.n 10024092 <_promisc_recv_func+0x482> +1002406c: e8df f003 tbb [pc, r3] +10024070: 0a110503 .word 0x0a110503 +10024074: 0c03 .short 0x0c03 +10024076: 2304 movs r3, #4 +10024078: e00c b.n 10024094 <_promisc_recv_func+0x484> +1002407a: 2308 movs r3, #8 +1002407c: f884 3030 strb.w r3, [r4, #48] ; 0x30 +10024080: 2304 movs r3, #4 +10024082: e009 b.n 10024098 <_promisc_recv_func+0x488> +10024084: 2308 movs r3, #8 +10024086: e005 b.n 10024094 <_promisc_recv_func+0x484> +10024088: 2312 movs r3, #18 +1002408a: f884 3030 strb.w r3, [r4, #48] ; 0x30 +1002408e: 2310 movs r3, #16 +10024090: e002 b.n 10024098 <_promisc_recv_func+0x488> +10024092: 2300 movs r3, #0 +10024094: f884 3030 strb.w r3, [r4, #48] ; 0x30 +10024098: f884 3031 strb.w r3, [r4, #49] ; 0x31 +1002409c: e006 b.n 100240ac <_promisc_recv_func+0x49c> +1002409e: 2300 movs r3, #0 +100240a0: f884 302f strb.w r3, [r4, #47] ; 0x2f +100240a4: f884 3031 strb.w r3, [r4, #49] ; 0x31 +100240a8: f884 3030 strb.w r3, [r4, #48] ; 0x30 +100240ac: 2701 movs r7, #1 +100240ae: e002 b.n 100240b6 <_promisc_recv_func+0x4a6> +100240b0: 10041661 .word 0x10041661 +100240b4: 2700 movs r7, #0 +100240b6: f8df 80dc ldr.w r8, [pc, #220] ; 10024194 <_promisc_recv_func+0x584> +100240ba: 4834 ldr r0, [pc, #208] ; (1002418c <_promisc_recv_func+0x57c>) +100240bc: f7f3 fa14 bl 100174e8 +100240c0: f8d8 3000 ldr.w r3, [r8] +100240c4: b1ab cbz r3, 100240f2 <_promisc_recv_func+0x4e2> +100240c6: 4630 mov r0, r6 +100240c8: 4621 mov r1, r4 +100240ca: aa12 add r2, sp, #72 ; 0x48 +100240cc: f7ff fcc3 bl 10023a56 +100240d0: 6f27 ldr r7, [r4, #112] ; 0x70 +100240d2: 4628 mov r0, r5 +100240d4: b239 sxth r1, r7 +100240d6: f7ff fc51 bl 1002397c +100240da: b128 cbz r0, 100240e8 <_promisc_recv_func+0x4d8> +100240dc: f8d8 3000 ldr.w r3, [r8] +100240e0: 4628 mov r0, r5 +100240e2: 4639 mov r1, r7 +100240e4: aa12 add r2, sp, #72 ; 0x48 +100240e6: 4798 blx r3 +100240e8: 4828 ldr r0, [pc, #160] ; (1002418c <_promisc_recv_func+0x57c>) +100240ea: f7f3 f9e5 bl 100174b8 +100240ee: 2700 movs r7, #0 +100240f0: e01a b.n 10024128 <_promisc_recv_func+0x518> +100240f2: 4826 ldr r0, [pc, #152] ; (1002418c <_promisc_recv_func+0x57c>) +100240f4: f7f3 f9e0 bl 100174b8 +100240f8: 2f01 cmp r7, #1 +100240fa: d115 bne.n 10024128 <_promisc_recv_func+0x518> +100240fc: 4630 mov r0, r6 +100240fe: 4621 mov r1, r4 +10024100: aa12 add r2, sp, #72 ; 0x48 +10024102: f7ff fca8 bl 10023a56 +10024106: f894 302f ldrb.w r3, [r4, #47] ; 0x2f +1002410a: 2b02 cmp r3, #2 +1002410c: d113 bne.n 10024136 <_promisc_recv_func+0x526> +1002410e: 6fe3 ldr r3, [r4, #124] ; 0x7c +10024110: 6fa1 ldr r1, [r4, #120] ; 0x78 +10024112: f1a3 0208 sub.w r2, r3, #8 +10024116: 428a cmp r2, r1 +10024118: bf28 it cs +1002411a: 6f23 ldrcs r3, [r4, #112] ; 0x70 +1002411c: 67e2 str r2, [r4, #124] ; 0x7c +1002411e: bf2a itet cs +10024120: 3b08 subcs r3, #8 +10024122: 67e3 strcc r3, [r4, #124] ; 0x7c +10024124: 6723 strcs r3, [r4, #112] ; 0x70 +10024126: e006 b.n 10024136 <_promisc_recv_func+0x526> +10024128: 4620 mov r0, r4 +1002412a: 9909 ldr r1, [sp, #36] ; 0x24 +1002412c: f002 fc02 bl 10026934 +10024130: 2f01 cmp r7, #1 +10024132: d127 bne.n 10024184 <_promisc_recv_func+0x574> +10024134: e7e2 b.n 100240fc <_promisc_recv_func+0x4ec> +10024136: 4620 mov r0, r4 +10024138: f003 f9f6 bl 10027528 +1002413c: 68a5 ldr r5, [r4, #8] +1002413e: 4607 mov r7, r0 +10024140: b1e5 cbz r5, 1002417c <_promisc_recv_func+0x56c> +10024142: 6fa3 ldr r3, [r4, #120] ; 0x78 +10024144: 4628 mov r0, r5 +10024146: 612b str r3, [r5, #16] +10024148: 6f21 ldr r1, [r4, #112] ; 0x70 +1002414a: f012 fb8e bl 1003686a +1002414e: 6f23 ldr r3, [r4, #112] ; 0x70 +10024150: 480e ldr r0, [pc, #56] ; (1002418c <_promisc_recv_func+0x57c>) +10024152: 622b str r3, [r5, #32] +10024154: f7f3 f9c8 bl 100174e8 +10024158: 4b0d ldr r3, [pc, #52] ; (10024190 <_promisc_recv_func+0x580>) +1002415a: 681e ldr r6, [r3, #0] +1002415c: b15e cbz r6, 10024176 <_promisc_recv_func+0x566> +1002415e: f8d5 8010 ldr.w r8, [r5, #16] +10024162: 6a2d ldr r5, [r5, #32] +10024164: 4640 mov r0, r8 +10024166: b229 sxth r1, r5 +10024168: f7ff fc08 bl 1002397c +1002416c: b118 cbz r0, 10024176 <_promisc_recv_func+0x566> +1002416e: 4640 mov r0, r8 +10024170: 4629 mov r1, r5 +10024172: aa12 add r2, sp, #72 ; 0x48 +10024174: 47b0 blx r6 +10024176: 4805 ldr r0, [pc, #20] ; (1002418c <_promisc_recv_func+0x57c>) +10024178: f7f3 f99e bl 100174b8 +1002417c: 4620 mov r0, r4 +1002417e: 9909 ldr r1, [sp, #36] ; 0x24 +10024180: f002 fbd8 bl 10026934 +10024184: 4638 mov r0, r7 +10024186: b01b add sp, #108 ; 0x6c +10024188: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1002418c: 1004bbb0 .word 0x1004bbb0 +10024190: 1004bbb4 .word 0x1004bbb4 +10024194: 1004bbac .word 0x1004bbac + +10024198 <_promisc_set>: +10024198: b5f8 push {r3, r4, r5, r6, r7, lr} +1002419a: 4605 mov r5, r0 +1002419c: 481e ldr r0, [pc, #120] ; (10024218 <_promisc_set+0x80>) +1002419e: 460e mov r6, r1 +100241a0: 6803 ldr r3, [r0, #0] +100241a2: 4617 mov r7, r2 +100241a4: b913 cbnz r3, 100241ac <_promisc_set+0x14> +100241a6: 2101 movs r1, #1 +100241a8: f7f3 f976 bl 10017498 +100241ac: 4b1b ldr r3, [pc, #108] ; (1002421c <_promisc_set+0x84>) +100241ae: 7c1a ldrb r2, [r3, #16] +100241b0: 2a00 cmp r2, #0 +100241b2: d02d beq.n 10024210 <_promisc_set+0x78> +100241b4: 681b ldr r3, [r3, #0] +100241b6: 4818 ldr r0, [pc, #96] ; (10024218 <_promisc_set+0x80>) +100241b8: 691b ldr r3, [r3, #16] +100241ba: 681c ldr r4, [r3, #0] +100241bc: f7f3 f994 bl 100174e8 +100241c0: 2d04 cmp r5, #4 +100241c2: d820 bhi.n 10024206 <_promisc_set+0x6e> +100241c4: e8df f005 tbb [pc, r5] +100241c8: 130e0e03 .word 0x130e0e03 +100241cc: 18 .byte 0x18 +100241cd: 00 .byte 0x00 +100241ce: 2100 movs r1, #0 +100241d0: 460a mov r2, r1 +100241d2: 4620 mov r0, r4 +100241d4: f7ff fc91 bl 10023afa +100241d8: 4a11 ldr r2, [pc, #68] ; (10024220 <_promisc_set+0x88>) +100241da: 2300 movs r3, #0 +100241dc: 6013 str r3, [r2, #0] +100241de: 4a11 ldr r2, [pc, #68] ; (10024224 <_promisc_set+0x8c>) +100241e0: 6013 str r3, [r2, #0] +100241e2: e010 b.n 10024206 <_promisc_set+0x6e> +100241e4: 4b0e ldr r3, [pc, #56] ; (10024220 <_promisc_set+0x88>) +100241e6: 4620 mov r0, r4 +100241e8: 601e str r6, [r3, #0] +100241ea: b2e9 uxtb r1, r5 +100241ec: e008 b.n 10024200 <_promisc_set+0x68> +100241ee: 4b0d ldr r3, [pc, #52] ; (10024224 <_promisc_set+0x8c>) +100241f0: 4620 mov r0, r4 +100241f2: 601e str r6, [r3, #0] +100241f4: 2103 movs r1, #3 +100241f6: e003 b.n 10024200 <_promisc_set+0x68> +100241f8: 4b0a ldr r3, [pc, #40] ; (10024224 <_promisc_set+0x8c>) +100241fa: 4620 mov r0, r4 +100241fc: 601e str r6, [r3, #0] +100241fe: 2104 movs r1, #4 +10024200: 463a mov r2, r7 +10024202: f7ff fc7a bl 10023afa +10024206: 4804 ldr r0, [pc, #16] ; (10024218 <_promisc_set+0x80>) +10024208: f7f3 f956 bl 100174b8 +1002420c: 2000 movs r0, #0 +1002420e: bdf8 pop {r3, r4, r5, r6, r7, pc} +10024210: f04f 30ff mov.w r0, #4294967295 +10024214: bdf8 pop {r3, r4, r5, r6, r7, pc} +10024216: bf00 nop +10024218: 1004bbb0 .word 0x1004bbb0 +1002421c: 1004e03c .word 0x1004e03c +10024220: 1004bbb4 .word 0x1004bbb4 +10024224: 1004bbac .word 0x1004bbac + +10024228 <_is_promisc_enabled>: +10024228: 4b04 ldr r3, [pc, #16] ; (1002423c <_is_promisc_enabled+0x14>) +1002422a: 7c18 ldrb r0, [r3, #16] +1002422c: b120 cbz r0, 10024238 <_is_promisc_enabled+0x10> +1002422e: 681b ldr r3, [r3, #0] +10024230: 691b ldr r3, [r3, #16] +10024232: 681b ldr r3, [r3, #0] +10024234: f893 0c44 ldrb.w r0, [r3, #3140] ; 0xc44 +10024238: 4770 bx lr +1002423a: bf00 nop +1002423c: 1004e03c .word 0x1004e03c + +10024240 : +10024240: b082 sub sp, #8 +10024242: b530 push {r4, r5, lr} +10024244: b085 sub sp, #20 +10024246: ac04 add r4, sp, #16 +10024248: f844 2d04 str.w r2, [r4, #-4]! +1002424c: e88d 0003 stmia.w sp, {r0, r1} +10024250: a908 add r1, sp, #32 +10024252: e881 000c stmia.w r1, {r2, r3} +10024256: 4621 mov r1, r4 +10024258: 2204 movs r2, #4 +1002425a: 4605 mov r5, r0 +1002425c: f7f6 fcb8 bl 1001abd0 +10024260: 9b09 ldr r3, [sp, #36] ; 0x24 +10024262: 4621 mov r1, r4 +10024264: 2204 movs r2, #4 +10024266: 1d28 adds r0, r5, #4 +10024268: 9303 str r3, [sp, #12] +1002426a: f7f6 fcb1 bl 1001abd0 +1002426e: 9b0a ldr r3, [sp, #40] ; 0x28 +10024270: 4621 mov r1, r4 +10024272: 2204 movs r2, #4 +10024274: f105 0008 add.w r0, r5, #8 +10024278: 9303 str r3, [sp, #12] +1002427a: f7f6 fca9 bl 1001abd0 +1002427e: 9b0b ldr r3, [sp, #44] ; 0x2c +10024280: f105 000c add.w r0, r5, #12 +10024284: 4621 mov r1, r4 +10024286: 2204 movs r2, #4 +10024288: 9303 str r3, [sp, #12] +1002428a: f7f6 fca1 bl 1001abd0 +1002428e: 9b01 ldr r3, [sp, #4] +10024290: 2b10 cmp r3, #16 +10024292: d01f beq.n 100242d4 +10024294: 9b0c ldr r3, [sp, #48] ; 0x30 +10024296: 4621 mov r1, r4 +10024298: 2204 movs r2, #4 +1002429a: f105 0010 add.w r0, r5, #16 +1002429e: 9303 str r3, [sp, #12] +100242a0: f7f6 fc96 bl 1001abd0 +100242a4: 9b0d ldr r3, [sp, #52] ; 0x34 +100242a6: 4621 mov r1, r4 +100242a8: 2204 movs r2, #4 +100242aa: f105 0014 add.w r0, r5, #20 +100242ae: 9303 str r3, [sp, #12] +100242b0: f7f6 fc8e bl 1001abd0 +100242b4: 9b0e ldr r3, [sp, #56] ; 0x38 +100242b6: 4621 mov r1, r4 +100242b8: 2204 movs r2, #4 +100242ba: f105 0018 add.w r0, r5, #24 +100242be: 9303 str r3, [sp, #12] +100242c0: f7f6 fc86 bl 1001abd0 +100242c4: 9b0f ldr r3, [sp, #60] ; 0x3c +100242c6: f105 001c add.w r0, r5, #28 +100242ca: 4621 mov r1, r4 +100242cc: 2204 movs r2, #4 +100242ce: 9303 str r3, [sp, #12] +100242d0: f7f6 fc7e bl 1001abd0 +100242d4: b005 add sp, #20 +100242d6: e8bd 4030 ldmia.w sp!, {r4, r5, lr} +100242da: b002 add sp, #8 +100242dc: 4770 bx lr + ... + +100242e0 : +100242e0: b538 push {r3, r4, r5, lr} +100242e2: f241 3338 movw r3, #4920 ; 0x1338 +100242e6: 4604 mov r4, r0 +100242e8: 58c5 ldr r5, [r0, r3] +100242ea: f7f8 fbeb bl 1001cac4 +100242ee: 4620 mov r0, r4 +100242f0: f7f9 fbaf bl 1001da52 +100242f4: 4620 mov r0, r4 +100242f6: 2101 movs r1, #1 +100242f8: f7f9 fb3e bl 1001d978 +100242fc: f894 38f9 ldrb.w r3, [r4, #2297] ; 0x8f9 +10024300: b1fb cbz r3, 10024342 +10024302: f894 286e ldrb.w r2, [r4, #2158] ; 0x86e +10024306: f894 386d ldrb.w r3, [r4, #2157] ; 0x86d +1002430a: 429a cmp r2, r3 +1002430c: d215 bcs.n 1002433a +1002430e: 4b10 ldr r3, [pc, #64] ; (10024350 ) +10024310: 781a ldrb r2, [r3, #0] +10024312: b9b2 cbnz r2, 10024342 +10024314: 2201 movs r2, #1 +10024316: 701a strb r2, [r3, #0] +10024318: f8b4 3870 ldrh.w r3, [r4, #2160] ; 0x870 +1002431c: f44f 717a mov.w r1, #1000 ; 0x3e8 +10024320: 4359 muls r1, r3 +10024322: f884 286c strb.w r2, [r4, #2156] ; 0x86c +10024326: f504 6006 add.w r0, r4, #2144 ; 0x860 +1002432a: f012 fd85 bl 10036e38 +1002432e: f894 386e ldrb.w r3, [r4, #2158] ; 0x86e +10024332: 3301 adds r3, #1 +10024334: f884 386e strb.w r3, [r4, #2158] ; 0x86e +10024338: e003 b.n 10024342 +1002433a: 4620 mov r0, r4 +1002433c: 4905 ldr r1, [pc, #20] ; (10024354 ) +1002433e: f00f fc0c bl 10033b5a +10024342: f505 7041 add.w r0, r5, #772 ; 0x304 +10024346: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1002434a: f012 bd7c b.w 10036e46 +1002434e: bf00 nop +10024350: 1004bb90 .word 0x1004bb90 +10024354: 1003fc5d .word 0x1003fc5d + +10024358 : +10024358: b570 push {r4, r5, r6, lr} +1002435a: 6903 ldr r3, [r0, #16] +1002435c: 4606 mov r6, r0 +1002435e: 06d8 lsls r0, r3, #27 +10024360: 460d mov r5, r1 +10024362: d538 bpl.n 100243d6 +10024364: f8d1 30fc ldr.w r3, [r1, #252] ; 0xfc +10024368: f203 138b addw r3, r3, #395 ; 0x18b +1002436c: eb06 0383 add.w r3, r6, r3, lsl #2 +10024370: f8d3 4d08 ldr.w r4, [r3, #3336] ; 0xd08 +10024374: 2c00 cmp r4, #0 +10024376: d043 beq.n 10024400 +10024378: 7c23 ldrb r3, [r4, #16] +1002437a: f505 709c add.w r0, r5, #312 ; 0x138 +1002437e: f8c5 3114 str.w r3, [r5, #276] ; 0x114 +10024382: f104 01b4 add.w r1, r4, #180 ; 0xb4 +10024386: 2210 movs r2, #16 +10024388: f7f6 fc22 bl 1001abd0 +1002438c: 7c23 ldrb r3, [r4, #16] +1002438e: 2b02 cmp r3, #2 +10024390: d114 bne.n 100243bc +10024392: 6933 ldr r3, [r6, #16] +10024394: 06d9 lsls r1, r3, #27 +10024396: d50b bpl.n 100243b0 +10024398: f104 01c4 add.w r1, r4, #196 ; 0xc4 +1002439c: f505 708c add.w r0, r5, #280 ; 0x118 +100243a0: 2208 movs r2, #8 +100243a2: f7f6 fc15 bl 1001abd0 +100243a6: f505 7094 add.w r0, r5, #296 ; 0x128 +100243aa: f104 01cc add.w r1, r4, #204 ; 0xcc +100243ae: e023 b.n 100243f8 +100243b0: 071b lsls r3, r3, #28 +100243b2: d416 bmi.n 100243e2 +100243b4: 2200 movs r2, #0 +100243b6: f241 035d movw r3, #4189 ; 0x105d +100243ba: 54f2 strb r2, [r6, r3] +100243bc: 4630 mov r0, r6 +100243be: 4629 mov r1, r5 +100243c0: 2201 movs r2, #1 +100243c2: f7f8 fba5 bl 1001cb10 +100243c6: 4630 mov r0, r6 +100243c8: f003 ffca bl 10028360 +100243cc: b1c0 cbz r0, 10024400 +100243ce: 7c23 ldrb r3, [r4, #16] +100243d0: f8c0 3114 str.w r3, [r0, #276] ; 0x114 +100243d4: bd70 pop {r4, r5, r6, pc} +100243d6: 071a lsls r2, r3, #28 +100243d8: d512 bpl.n 10024400 +100243da: f241 3338 movw r3, #4920 ; 0x1338 +100243de: 58f4 ldr r4, [r6, r3] +100243e0: e7c8 b.n 10024374 +100243e2: f104 01cc add.w r1, r4, #204 ; 0xcc +100243e6: f505 708c add.w r0, r5, #280 ; 0x118 +100243ea: 2208 movs r2, #8 +100243ec: f7f6 fbf0 bl 1001abd0 +100243f0: f505 7094 add.w r0, r5, #296 ; 0x128 +100243f4: f104 01c4 add.w r1, r4, #196 ; 0xc4 +100243f8: 2208 movs r2, #8 +100243fa: f7f6 fbe9 bl 1001abd0 +100243fe: e7d9 b.n 100243b4 +10024400: bd70 pop {r4, r5, r6, pc} + +10024402 : +10024402: 7983 ldrb r3, [r0, #6] +10024404: 79c2 ldrb r2, [r0, #7] +10024406: 041b lsls r3, r3, #16 +10024408: eb03 2302 add.w r3, r3, r2, lsl #8 +1002440c: 7a02 ldrb r2, [r0, #8] +1002440e: 4413 add r3, r2 +10024410: 7942 ldrb r2, [r0, #5] +10024412: eb03 6302 add.w r3, r3, r2, lsl #24 +10024416: 600b str r3, [r1, #0] +10024418: 7a83 ldrb r3, [r0, #10] +1002441a: 7ac2 ldrb r2, [r0, #11] +1002441c: 041b lsls r3, r3, #16 +1002441e: eb03 2302 add.w r3, r3, r2, lsl #8 +10024422: 7b02 ldrb r2, [r0, #12] +10024424: 4413 add r3, r2 +10024426: 7a42 ldrb r2, [r0, #9] +10024428: eb03 6302 add.w r3, r3, r2, lsl #24 +1002442c: 604b str r3, [r1, #4] +1002442e: 4770 bx lr + +10024430 : +10024430: b530 push {r4, r5, lr} +10024432: b085 sub sp, #20 +10024434: e88d 0003 stmia.w sp, {r0, r1} +10024438: 4605 mov r5, r0 +1002443a: 460c mov r4, r1 +1002443c: 4610 mov r0, r2 +1002443e: a902 add r1, sp, #8 +10024440: f7ff ffdf bl 10024402 +10024444: 9b02 ldr r3, [sp, #8] +10024446: 42ab cmp r3, r5 +10024448: d806 bhi.n 10024458 +1002444a: d307 bcc.n 1002445c +1002444c: 9b03 ldr r3, [sp, #12] +1002444e: 42a3 cmp r3, r4 +10024450: bf8c ite hi +10024452: 2000 movhi r0, #0 +10024454: 2001 movls r0, #1 +10024456: e002 b.n 1002445e +10024458: 2000 movs r0, #0 +1002445a: e000 b.n 1002445e +1002445c: 2001 movs r0, #1 +1002445e: b005 add sp, #20 +10024460: bd30 pop {r4, r5, pc} + +10024462 : +10024462: 0e0b lsrs r3, r1, #24 +10024464: 7143 strb r3, [r0, #5] +10024466: 0c0b lsrs r3, r1, #16 +10024468: 7183 strb r3, [r0, #6] +1002446a: 0a0b lsrs r3, r1, #8 +1002446c: 71c3 strb r3, [r0, #7] +1002446e: 0e13 lsrs r3, r2, #24 +10024470: 7243 strb r3, [r0, #9] +10024472: 0c13 lsrs r3, r2, #16 +10024474: 7283 strb r3, [r0, #10] +10024476: 0a13 lsrs r3, r2, #8 +10024478: 7201 strb r1, [r0, #8] +1002447a: 72c3 strb r3, [r0, #11] +1002447c: 7302 strb r2, [r0, #12] +1002447e: 4770 bx lr + +10024480 : +10024480: 6843 ldr r3, [r0, #4] +10024482: 1c5a adds r2, r3, #1 +10024484: d109 bne.n 1002449a +10024486: 6802 ldr r2, [r0, #0] +10024488: 1c53 adds r3, r2, #1 +1002448a: bf18 it ne +1002448c: 3201 addne r2, #1 +1002448e: f04f 0300 mov.w r3, #0 +10024492: bf0c ite eq +10024494: 6003 streq r3, [r0, #0] +10024496: 6002 strne r2, [r0, #0] +10024498: e000 b.n 1002449c +1002449a: 3301 adds r3, #1 +1002449c: 6043 str r3, [r0, #4] +1002449e: 4770 bx lr + +100244a0 : +100244a0: b510 push {r4, lr} +100244a2: 4604 mov r4, r0 +100244a4: f854 2f08 ldr.w r2, [r4, #8]! +100244a8: 4603 mov r3, r0 +100244aa: 3201 adds r2, #1 +100244ac: d117 bne.n 100244de +100244ae: 68c2 ldr r2, [r0, #12] +100244b0: 3201 adds r2, #1 +100244b2: d114 bne.n 100244de +100244b4: 6802 ldr r2, [r0, #0] +100244b6: 3201 adds r2, #1 +100244b8: d107 bne.n 100244ca +100244ba: 6842 ldr r2, [r0, #4] +100244bc: 3201 adds r2, #1 +100244be: d104 bne.n 100244ca +100244c0: 2100 movs r1, #0 +100244c2: 2208 movs r2, #8 +100244c4: f7f6 fb88 bl 1001abd8 +100244c8: e002 b.n 100244d0 +100244ca: 4618 mov r0, r3 +100244cc: f7ff ffd8 bl 10024480 +100244d0: 4620 mov r0, r4 +100244d2: 2100 movs r1, #0 +100244d4: 2208 movs r2, #8 +100244d6: e8bd 4010 ldmia.w sp!, {r4, lr} +100244da: f7f6 bb7d b.w 1001abd8 +100244de: 4620 mov r0, r4 +100244e0: e8bd 4010 ldmia.w sp!, {r4, lr} +100244e4: f7ff bfcc b.w 10024480 + +100244e8 : +100244e8: b538 push {r3, r4, r5, lr} +100244ea: 4605 mov r5, r0 +100244ec: f855 3f10 ldr.w r3, [r5, #16]! +100244f0: 4604 mov r4, r0 +100244f2: 3301 adds r3, #1 +100244f4: d122 bne.n 1002453c +100244f6: 6943 ldr r3, [r0, #20] +100244f8: 3301 adds r3, #1 +100244fa: d11f bne.n 1002453c +100244fc: 6983 ldr r3, [r0, #24] +100244fe: 3301 adds r3, #1 +10024500: d11c bne.n 1002453c +10024502: 69c3 ldr r3, [r0, #28] +10024504: 3301 adds r3, #1 +10024506: d119 bne.n 1002453c +10024508: 6803 ldr r3, [r0, #0] +1002450a: 3301 adds r3, #1 +1002450c: d10d bne.n 1002452a +1002450e: 6843 ldr r3, [r0, #4] +10024510: 3301 adds r3, #1 +10024512: d10a bne.n 1002452a +10024514: 6883 ldr r3, [r0, #8] +10024516: 3301 adds r3, #1 +10024518: d107 bne.n 1002452a +1002451a: 68c3 ldr r3, [r0, #12] +1002451c: 3301 adds r3, #1 +1002451e: d104 bne.n 1002452a +10024520: 2100 movs r1, #0 +10024522: 2210 movs r2, #16 +10024524: f7f6 fb58 bl 1001abd8 +10024528: e002 b.n 10024530 +1002452a: 4620 mov r0, r4 +1002452c: f7ff ffb8 bl 100244a0 +10024530: 4628 mov r0, r5 +10024532: 2100 movs r1, #0 +10024534: 2210 movs r2, #16 +10024536: f7f6 fb4f bl 1001abd8 +1002453a: e002 b.n 10024542 +1002453c: 4628 mov r0, r5 +1002453e: f7ff ffaf bl 100244a0 +10024542: 4620 mov r0, r4 +10024544: bd38 pop {r3, r4, r5, pc} + ... + +10024548 : +10024548: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +1002454c: 6903 ldr r3, [r0, #16] +1002454e: 4604 mov r4, r0 +10024550: f013 0908 ands.w r9, r3, #8 +10024554: 460d mov r5, r1 +10024556: 4617 mov r7, r2 +10024558: d102 bne.n 10024560 +1002455a: 06db lsls r3, r3, #27 +1002455c: d42e bmi.n 100245bc +1002455e: e04d b.n 100245fc +10024560: f501 7184 add.w r1, r1, #264 ; 0x108 +10024564: b292 uxth r2, r2 +10024566: f7fd f826 bl 100215b6 +1002456a: f894 38f9 ldrb.w r3, [r4, #2297] ; 0x8f9 +1002456e: 2b00 cmp r3, #0 +10024570: d044 beq.n 100245fc +10024572: f894 286e ldrb.w r2, [r4, #2158] ; 0x86e +10024576: f894 386d ldrb.w r3, [r4, #2157] ; 0x86d +1002457a: 429a cmp r2, r3 +1002457c: d216 bcs.n 100245ac +1002457e: 4b21 ldr r3, [pc, #132] ; (10024604 ) +10024580: 781a ldrb r2, [r3, #0] +10024582: 2a00 cmp r2, #0 +10024584: d13a bne.n 100245fc +10024586: 2201 movs r2, #1 +10024588: 701a strb r2, [r3, #0] +1002458a: f8b4 3870 ldrh.w r3, [r4, #2160] ; 0x870 +1002458e: f44f 717a mov.w r1, #1000 ; 0x3e8 +10024592: 4359 muls r1, r3 +10024594: f884 286c strb.w r2, [r4, #2156] ; 0x86c +10024598: f504 6006 add.w r0, r4, #2144 ; 0x860 +1002459c: f012 fc4c bl 10036e38 +100245a0: f894 386e ldrb.w r3, [r4, #2158] ; 0x86e +100245a4: 3301 adds r3, #1 +100245a6: f884 386e strb.w r3, [r4, #2158] ; 0x86e +100245aa: e027 b.n 100245fc +100245ac: 4620 mov r0, r4 +100245ae: f00e fa2a bl 10032a06 +100245b2: 4620 mov r0, r4 +100245b4: 4914 ldr r1, [pc, #80] ; (10024608 ) +100245b6: f00f fad0 bl 10033b5a +100245ba: e01f b.n 100245fc +100245bc: f600 46d4 addw r6, r0, #3284 ; 0xcd4 +100245c0: 4630 mov r0, r6 +100245c2: a901 add r1, sp, #4 +100245c4: f505 7807 add.w r8, r5, #540 ; 0x21c +100245c8: f7f3 f80e bl 100175e8 +100245cc: 4640 mov r0, r8 +100245ce: f7f2 ff4a bl 10017466 +100245d2: b988 cbnz r0, 100245f8 +100245d4: 4640 mov r0, r8 +100245d6: f7f2 ff57 bl 10017488 +100245da: 4629 mov r1, r5 +100245dc: 4620 mov r0, r4 +100245de: b2ba uxth r2, r7 +100245e0: f7f7 fb5d bl 1001bc9e +100245e4: 4605 mov r5, r0 +100245e6: 4630 mov r0, r6 +100245e8: a901 add r1, sp, #4 +100245ea: f7f3 f807 bl 100175fc +100245ee: 4620 mov r0, r4 +100245f0: 4629 mov r1, r5 +100245f2: f7f7 f9f9 bl 1001b9e8 +100245f6: e001 b.n 100245fc +100245f8: 464d mov r5, r9 +100245fa: e7f4 b.n 100245e6 +100245fc: b003 add sp, #12 +100245fe: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +10024602: bf00 nop +10024604: 1004bb90 .word 0x1004bb90 +10024608: 1003fc5d .word 0x1003fc5d + +1002460c : +1002460c: b5f0 push {r4, r5, r6, r7, lr} +1002460e: f5ad 7d0b sub.w sp, sp, #556 ; 0x22c +10024612: ab02 add r3, sp, #8 +10024614: e883 0003 stmia.w r3, {r0, r1} +10024618: 4604 mov r4, r0 +1002461a: 7d07 ldrb r7, [r0, #20] +1002461c: 4621 mov r1, r4 +1002461e: 4616 mov r6, r2 +10024620: a80a add r0, sp, #40 ; 0x28 +10024622: 685a ldr r2, [r3, #4] +10024624: f10d 0587 add.w r5, sp, #135 ; 0x87 +10024628: f7f6 fad2 bl 1001abd0 +1002462c: 2100 movs r1, #0 +1002462e: 2210 movs r2, #16 +10024630: 4628 mov r0, r5 +10024632: f7f6 fad1 bl 1001abd8 +10024636: f8bd 0038 ldrh.w r0, [sp, #56] ; 0x38 +1002463a: f7f2 feb6 bl 100173aa <_ntohs> +1002463e: f007 0707 and.w r7, r7, #7 +10024642: 3004 adds r0, #4 +10024644: 2f01 cmp r7, #1 +10024646: b281 uxth r1, r0 +10024648: d107 bne.n 1002465a +1002464a: 9500 str r5, [sp, #0] +1002464c: f10d 0036 add.w r0, sp, #54 ; 0x36 +10024650: 4632 mov r2, r6 +10024652: 2310 movs r3, #16 +10024654: f01a f928 bl 1003e8a8 <__rt_md5_hmac_veneer> +10024658: e009 b.n 1002466e +1002465a: 2f02 cmp r7, #2 +1002465c: d112 bne.n 10024684 +1002465e: ad05 add r5, sp, #20 +10024660: 9500 str r5, [sp, #0] +10024662: f10d 0036 add.w r0, sp, #54 ; 0x36 +10024666: 4632 mov r2, r6 +10024668: 2310 movs r3, #16 +1002466a: f01a f98d bl 1003e988 <__rt_hmac_sha1_veneer> +1002466e: 4628 mov r0, r5 +10024670: f104 015f add.w r1, r4, #95 ; 0x5f +10024674: 2210 movs r2, #16 +10024676: f7f6 faa7 bl 1001abc8 +1002467a: f1d0 0001 rsbs r0, r0, #1 +1002467e: bf38 it cc +10024680: 2000 movcc r0, #0 +10024682: e000 b.n 10024686 +10024684: 2000 movs r0, #0 +10024686: f50d 7d0b add.w sp, sp, #556 ; 0x22c +1002468a: bdf0 pop {r4, r5, r6, r7, pc} + +1002468c : +1002468c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10024690: b08a sub sp, #40 ; 0x28 +10024692: ac02 add r4, sp, #8 +10024694: e884 0003 stmia.w r4, {r0, r1} +10024698: f100 045f add.w r4, r0, #95 ; 0x5f +1002469c: 4615 mov r5, r2 +1002469e: f100 080e add.w r8, r0, #14 +100246a2: 2100 movs r1, #0 +100246a4: 4620 mov r0, r4 +100246a6: 2210 movs r2, #16 +100246a8: 461e mov r6, r3 +100246aa: 9f03 ldr r7, [sp, #12] +100246ac: f7f6 fa94 bl 1001abd8 +100246b0: 2d01 cmp r5, #1 +100246b2: d108 bne.n 100246c6 +100246b4: 9400 str r4, [sp, #0] +100246b6: 4640 mov r0, r8 +100246b8: f1a7 010e sub.w r1, r7, #14 +100246bc: 4632 mov r2, r6 +100246be: 2310 movs r3, #16 +100246c0: f01a f8f2 bl 1003e8a8 <__rt_md5_hmac_veneer> +100246c4: e00f b.n 100246e6 +100246c6: 2d02 cmp r5, #2 +100246c8: d10d bne.n 100246e6 +100246ca: ad05 add r5, sp, #20 +100246cc: 4640 mov r0, r8 +100246ce: f1a7 010e sub.w r1, r7, #14 +100246d2: 4632 mov r2, r6 +100246d4: 9500 str r5, [sp, #0] +100246d6: 2310 movs r3, #16 +100246d8: f01a f956 bl 1003e988 <__rt_hmac_sha1_veneer> +100246dc: 4620 mov r0, r4 +100246de: 4629 mov r1, r5 +100246e0: 2210 movs r2, #16 +100246e2: f7f6 fa75 bl 1001abd0 +100246e6: b00a add sp, #40 ; 0x28 +100246e8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +100246ec : +100246ec: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +100246f0: 469a mov sl, r3 +100246f2: 4b2a ldr r3, [pc, #168] ; (1002479c ) +100246f4: f5ad 7d48 sub.w sp, sp, #800 ; 0x320 +100246f8: 4607 mov r7, r0 +100246fa: 468e mov lr, r1 +100246fc: 6818 ldr r0, [r3, #0] +100246fe: 6859 ldr r1, [r3, #4] +10024700: ac02 add r4, sp, #8 +10024702: c403 stmia r4!, {r0, r1} +10024704: f8d7 30e4 ldr.w r3, [r7, #228] ; 0xe4 +10024708: 4615 mov r5, r2 +1002470a: f893 9002 ldrb.w r9, [r3, #2] +1002470e: 9ed0 ldr r6, [sp, #832] ; 0x340 +10024710: f009 0907 and.w r9, r9, #7 +10024714: f1b9 0f01 cmp.w r9, #1 +10024718: f8dd 8344 ldr.w r8, [sp, #836] ; 0x344 +1002471c: f8d7 10d4 ldr.w r1, [r7, #212] ; 0xd4 +10024720: ac04 add r4, sp, #16 +10024722: d121 bne.n 10024768 +10024724: 313f adds r1, #63 ; 0x3f +10024726: 2210 movs r2, #16 +10024728: a845 add r0, sp, #276 ; 0x114 +1002472a: f7f6 fa51 bl 1001abd0 +1002472e: 4651 mov r1, sl +10024730: 4632 mov r2, r6 +10024732: a849 add r0, sp, #292 ; 0x124 +10024734: f7f6 fa4c bl 1001abd0 +10024738: a886 add r0, sp, #536 ; 0x218 +1002473a: a945 add r1, sp, #276 ; 0x114 +1002473c: f106 0210 add.w r2, r6, #16 +10024740: f01a f8d6 bl 1003e8f0 <__rt_arc4_init_veneer> +10024744: a886 add r0, sp, #536 ; 0x218 +10024746: 4621 mov r1, r4 +10024748: aa45 add r2, sp, #276 ; 0x114 +1002474a: f44f 7380 mov.w r3, #256 ; 0x100 +1002474e: f01a f8ef bl 1003e930 <__rt_arc4_crypt_veneer> +10024752: f8d7 20e4 ldr.w r2, [r7, #228] ; 0xe4 +10024756: a886 add r0, sp, #536 ; 0x218 +10024758: 4621 mov r1, r4 +1002475a: 325f adds r2, #95 ; 0x5f +1002475c: 462b mov r3, r5 +1002475e: f01a f8e7 bl 1003e930 <__rt_arc4_crypt_veneer> +10024762: 4640 mov r0, r8 +10024764: 4621 mov r1, r4 +10024766: e00e b.n 10024786 +10024768: 4611 mov r1, r2 +1002476a: 4670 mov r0, lr +1002476c: 4652 mov r2, sl +1002476e: 9400 str r4, [sp, #0] +10024770: 4633 mov r3, r6 +10024772: f01a f919 bl 1003e9a8 <__AES_UnWRAP_veneer> +10024776: 4620 mov r0, r4 +10024778: a902 add r1, sp, #8 +1002477a: 2208 movs r2, #8 +1002477c: f7f6 fa24 bl 1001abc8 +10024780: b930 cbnz r0, 10024790 +10024782: 4640 mov r0, r8 +10024784: a906 add r1, sp, #24 +10024786: 462a mov r2, r5 +10024788: f7f6 fa22 bl 1001abd0 +1002478c: 2001 movs r0, #1 +1002478e: e000 b.n 10024792 +10024790: 2000 movs r0, #0 +10024792: f50d 7d48 add.w sp, sp, #800 ; 0x320 +10024796: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1002479a: bf00 nop +1002479c: 10041667 .word 0x10041667 + +100247a0 : +100247a0: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +100247a4: f5ad 7d4b sub.w sp, sp, #812 ; 0x32c +100247a8: ac02 add r4, sp, #8 +100247aa: e884 0003 stmia.w r4, {r0, r1} +100247ae: 492a ldr r1, [pc, #168] ; (10024858 ) +100247b0: 4604 mov r4, r0 +100247b2: 6808 ldr r0, [r1, #0] +100247b4: 6849 ldr r1, [r1, #4] +100247b6: ad04 add r5, sp, #16 +100247b8: c503 stmia r5!, {r0, r1} +100247ba: 7d25 ldrb r5, [r4, #20] +100247bc: 4691 mov r9, r2 +100247be: f005 0507 and.w r5, r5, #7 +100247c2: 2d01 cmp r5, #1 +100247c4: 4698 mov r8, r3 +100247c6: 9fd2 ldr r7, [sp, #840] ; 0x348 +100247c8: 9ed3 ldr r6, [sp, #844] ; 0x34c +100247ca: d122 bne.n 10024812 +100247cc: f104 013f add.w r1, r4, #63 ; 0x3f +100247d0: 2210 movs r2, #16 +100247d2: a847 add r0, sp, #284 ; 0x11c +100247d4: f7f6 f9fc bl 1001abd0 +100247d8: 4649 mov r1, r9 +100247da: 4642 mov r2, r8 +100247dc: a84b add r0, sp, #300 ; 0x12c +100247de: f7f6 f9f7 bl 1001abd0 +100247e2: a888 add r0, sp, #544 ; 0x220 +100247e4: a947 add r1, sp, #284 ; 0x11c +100247e6: f108 0210 add.w r2, r8, #16 +100247ea: f01a f881 bl 1003e8f0 <__rt_arc4_init_veneer> +100247ee: a888 add r0, sp, #544 ; 0x220 +100247f0: a906 add r1, sp, #24 +100247f2: aa47 add r2, sp, #284 ; 0x11c +100247f4: f44f 7380 mov.w r3, #256 ; 0x100 +100247f8: f01a f89a bl 1003e930 <__rt_arc4_crypt_veneer> +100247fc: a888 add r0, sp, #544 ; 0x220 +100247fe: a906 add r1, sp, #24 +10024800: f104 0271 add.w r2, r4, #113 ; 0x71 +10024804: 463b mov r3, r7 +10024806: f01a f893 bl 1003e930 <__rt_arc4_crypt_veneer> +1002480a: 4630 mov r0, r6 +1002480c: a906 add r1, sp, #24 +1002480e: 463a mov r2, r7 +10024810: e01a b.n 10024848 +10024812: 2d02 cmp r5, #2 +10024814: d001 beq.n 1002481a +10024816: 2000 movs r0, #0 +10024818: e019 b.n 1002484e +1002481a: f894 1070 ldrb.w r1, [r4, #112] ; 0x70 +1002481e: f894 506f ldrb.w r5, [r4, #111] ; 0x6f +10024822: af06 add r7, sp, #24 +10024824: eb01 2505 add.w r5, r1, r5, lsl #8 +10024828: f104 0071 add.w r0, r4, #113 ; 0x71 +1002482c: 4629 mov r1, r5 +1002482e: 9700 str r7, [sp, #0] +10024830: f01a f8ba bl 1003e9a8 <__AES_UnWRAP_veneer> +10024834: 4638 mov r0, r7 +10024836: a904 add r1, sp, #16 +10024838: 2208 movs r2, #8 +1002483a: f7f6 f9c5 bl 1001abc8 +1002483e: 2800 cmp r0, #0 +10024840: d1e9 bne.n 10024816 +10024842: 4630 mov r0, r6 +10024844: a908 add r1, sp, #32 +10024846: 462a mov r2, r5 +10024848: f7f6 f9c2 bl 1001abd0 +1002484c: 2001 movs r0, #1 +1002484e: f50d 7d4b add.w sp, sp, #812 ; 0x32c +10024852: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +10024856: bf00 nop +10024858: 10041667 .word 0x10041667 + +1002485c : +1002485c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10024860: f500 588c add.w r8, r0, #4480 ; 0x1180 +10024864: f8d8 41a4 ldr.w r4, [r8, #420] ; 0x1a4 +10024868: f108 081c add.w r8, r8, #28 +1002486c: f600 5508 addw r5, r0, #3336 ; 0xd08 +10024870: eb08 1744 add.w r7, r8, r4, lsl #5 +10024874: 4606 mov r6, r0 +10024876: 37e8 adds r7, #232 ; 0xe8 +10024878: eb05 1004 add.w r0, r5, r4, lsl #4 +1002487c: 3064 adds r0, #100 ; 0x64 +1002487e: 4639 mov r1, r7 +10024880: 2210 movs r2, #16 +10024882: f7f6 f9a5 bl 1001abd0 +10024886: f898 30bc ldrb.w r3, [r8, #188] ; 0xbc +1002488a: 2b02 cmp r3, #2 +1002488c: d112 bne.n 100248b4 +1002488e: 6933 ldr r3, [r6, #16] +10024890: 06da lsls r2, r3, #27 +10024892: d51c bpl.n 100248ce +10024894: eb05 1004 add.w r0, r5, r4, lsl #4 +10024898: f107 0110 add.w r1, r7, #16 +1002489c: 30a4 adds r0, #164 ; 0xa4 +1002489e: 2208 movs r2, #8 +100248a0: f7f6 f996 bl 1001abd0 +100248a4: eb05 1004 add.w r0, r5, r4, lsl #4 +100248a8: 30e4 adds r0, #228 ; 0xe4 +100248aa: f107 0118 add.w r1, r7, #24 +100248ae: 2208 movs r2, #8 +100248b0: f7f6 f98e bl 1001abd0 +100248b4: f241 025c movw r2, #4188 ; 0x105c +100248b8: 2301 movs r3, #1 +100248ba: 54b3 strb r3, [r6, r2] +100248bc: 4630 mov r0, r6 +100248be: f8c6 4d68 str.w r4, [r6, #3432] ; 0xd68 +100248c2: 4629 mov r1, r5 +100248c4: 4622 mov r2, r4 +100248c6: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +100248ca: f7f9 bb93 b.w 1001dff4 +100248ce: 071b lsls r3, r3, #28 +100248d0: d5f0 bpl.n 100248b4 +100248d2: eb05 1004 add.w r0, r5, r4, lsl #4 +100248d6: f107 0118 add.w r1, r7, #24 +100248da: 30a4 adds r0, #164 ; 0xa4 +100248dc: 2208 movs r2, #8 +100248de: f7f6 f977 bl 1001abd0 +100248e2: eb05 1004 add.w r0, r5, r4, lsl #4 +100248e6: 30e4 adds r0, #228 ; 0xe4 +100248e8: f107 0110 add.w r1, r7, #16 +100248ec: e7df b.n 100248ae + ... + +100248f0 : +100248f0: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +100248f4: f641 0369 movw r3, #6249 ; 0x1869 +100248f8: f810 9003 ldrb.w r9, [r0, r3] +100248fc: 6903 ldr r3, [r0, #16] +100248fe: f119 0900 adds.w r9, r9, #0 +10024902: 4605 mov r5, r0 +10024904: bf18 it ne +10024906: f04f 0901 movne.w r9, #1 +1002490a: 06d8 lsls r0, r3, #27 +1002490c: 460e mov r6, r1 +1002490e: d53f bpl.n 10024990 +10024910: f8d1 30fc ldr.w r3, [r1, #252] ; 0xfc +10024914: f203 138b addw r3, r3, #395 ; 0x18b +10024918: eb05 0383 add.w r3, r5, r3, lsl #2 +1002491c: f8d3 4d08 ldr.w r4, [r3, #3336] ; 0xd08 +10024920: 2c00 cmp r4, #0 +10024922: d052 beq.n 100249ca +10024924: f504 783d add.w r8, r4, #756 ; 0x2f4 +10024928: 4640 mov r0, r8 +1002492a: f012 fa8c bl 10036e46 +1002492e: 692b ldr r3, [r5, #16] +10024930: 06d9 lsls r1, r3, #27 +10024932: d433 bmi.n 1002499c +10024934: 2100 movs r1, #0 +10024936: f44f 7249 mov.w r2, #804 ; 0x324 +1002493a: 4620 mov r0, r4 +1002493c: f7f6 f94c bl 1001abd8 +10024940: f104 0334 add.w r3, r4, #52 ; 0x34 +10024944: 6263 str r3, [r4, #36] ; 0x24 +10024946: f104 0354 add.w r3, r4, #84 ; 0x54 +1002494a: 62e3 str r3, [r4, #44] ; 0x2c +1002494c: f104 03f4 add.w r3, r4, #244 ; 0xf4 +10024950: f8c4 30dc str.w r3, [r4, #220] ; 0xdc +10024954: 4b1e ldr r3, [pc, #120] ; (100249d0 ) +10024956: 2720 movs r7, #32 +10024958: 62a7 str r7, [r4, #40] ; 0x28 +1002495a: 6327 str r7, [r4, #48] ; 0x30 +1002495c: 9300 str r3, [sp, #0] +1002495e: f641 0334 movw r3, #6196 ; 0x1834 +10024962: 58e9 ldr r1, [r5, r3] +10024964: 4640 mov r0, r8 +10024966: 4a1b ldr r2, [pc, #108] ; (100249d4 ) +10024968: 4633 mov r3, r6 +1002496a: f012 fa61 bl 10036e30 +1002496e: 4b1a ldr r3, [pc, #104] ; (100249d8 ) +10024970: 2128 movs r1, #40 ; 0x28 +10024972: fb01 3109 mla r1, r1, r9, r3 +10024976: 463a mov r2, r7 +10024978: 6175 str r5, [r6, #20] +1002497a: f104 0074 add.w r0, r4, #116 ; 0x74 +1002497e: f7f6 f927 bl 1001abd0 +10024982: 692b ldr r3, [r5, #16] +10024984: f013 0210 ands.w r2, r3, #16 +10024988: d015 beq.n 100249b6 +1002498a: 2301 movs r3, #1 +1002498c: 6023 str r3, [r4, #0] +1002498e: e01c b.n 100249ca +10024990: 071a lsls r2, r3, #28 +10024992: d51a bpl.n 100249ca +10024994: f241 3338 movw r3, #4920 ; 0x1338 +10024998: 58ec ldr r4, [r5, r3] +1002499a: e7c1 b.n 10024920 +1002499c: f8d6 2100 ldr.w r2, [r6, #256] ; 0x100 +100249a0: 2301 movs r3, #1 +100249a2: 3203 adds r2, #3 +100249a4: 4628 mov r0, r5 +100249a6: 4631 mov r1, r6 +100249a8: b2d2 uxtb r2, r2 +100249aa: f7f8 f92b bl 1001cc04 +100249ae: 2301 movs r3, #1 +100249b0: f8c6 3110 str.w r3, [r6, #272] ; 0x110 +100249b4: e7be b.n 10024934 +100249b6: 071b lsls r3, r3, #28 +100249b8: d507 bpl.n 100249ca +100249ba: f04f 33ff mov.w r3, #4294967295 +100249be: f8c4 2310 str.w r2, [r4, #784] ; 0x310 +100249c2: f8c4 2314 str.w r2, [r4, #788] ; 0x314 +100249c6: 6163 str r3, [r4, #20] +100249c8: 61a3 str r3, [r4, #24] +100249ca: b003 add sp, #12 +100249cc: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +100249d0: 1004167f .word 0x1004167f +100249d4: 100255ef .word 0x100255ef +100249d8: 1004bcc3 .word 0x1004bcc3 + +100249dc : +100249dc: b537 push {r0, r1, r2, r4, r5, lr} +100249de: f241 3338 movw r3, #4920 ; 0x1338 +100249e2: 58c5 ldr r5, [r0, r3] +100249e4: 6903 ldr r3, [r0, #16] +100249e6: 4604 mov r4, r0 +100249e8: 071b lsls r3, r3, #28 +100249ea: d51e bpl.n 10024a2a +100249ec: f8d5 3310 ldr.w r3, [r5, #784] ; 0x310 +100249f0: b9db cbnz r3, 10024a2a +100249f2: f8d5 3314 ldr.w r3, [r5, #788] ; 0x314 +100249f6: b9c3 cbnz r3, 10024a2a +100249f8: f505 7541 add.w r5, r5, #772 ; 0x304 +100249fc: f7ff ff78 bl 100248f0 +10024a00: 4628 mov r0, r5 +10024a02: f012 fa20 bl 10036e46 +10024a06: 4b0a ldr r3, [pc, #40] ; (10024a30 ) +10024a08: 4628 mov r0, r5 +10024a0a: 9300 str r3, [sp, #0] +10024a0c: f641 0334 movw r3, #6196 ; 0x1834 +10024a10: 58e1 ldr r1, [r4, r3] +10024a12: 4a08 ldr r2, [pc, #32] ; (10024a34 ) +10024a14: 4623 mov r3, r4 +10024a16: f012 fa0b bl 10036e30 +10024a1a: 4628 mov r0, r5 +10024a1c: f241 3188 movw r1, #5000 ; 0x1388 +10024a20: b003 add sp, #12 +10024a22: e8bd 4030 ldmia.w sp!, {r4, r5, lr} +10024a26: f012 ba07 b.w 10036e38 +10024a2a: b003 add sp, #12 +10024a2c: bd30 pop {r4, r5, pc} +10024a2e: bf00 nop +10024a30: 1004168b .word 0x1004168b +10024a34: 100242e1 .word 0x100242e1 + +10024a38 : +10024a38: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10024a3c: f600 5508 addw r5, r0, #3336 ; 0xd08 +10024a40: b0d9 sub sp, #356 ; 0x164 +10024a42: 4607 mov r7, r0 +10024a44: 460e mov r6, r1 +10024a46: 4692 mov sl, r2 +10024a48: 2d00 cmp r5, #0 +10024a4a: f000 8355 beq.w 100250f8 +10024a4e: 2900 cmp r1, #0 +10024a50: f000 8352 beq.w 100250f8 +10024a54: f8d1 30fc ldr.w r3, [r1, #252] ; 0xfc +10024a58: f203 138b addw r3, r3, #395 ; 0x18b +10024a5c: eb00 0383 add.w r3, r0, r3, lsl #2 +10024a60: f8d3 4d08 ldr.w r4, [r3, #3336] ; 0xd08 +10024a64: 6823 ldr r3, [r4, #0] +10024a66: 2b00 cmp r3, #0 +10024a68: f000 8346 beq.w 100250f8 +10024a6c: a80c add r0, sp, #48 ; 0x30 +10024a6e: 2100 movs r1, #0 +10024a70: 2208 movs r2, #8 +10024a72: f7f6 f8b1 bl 1001abd8 +10024a76: f8d4 80dc ldr.w r8, [r4, #220] ; 0xdc +10024a7a: f507 5b8c add.w fp, r7, #4480 ; 0x1180 +10024a7e: f108 0012 add.w r0, r8, #18 +10024a82: f8c4 00ec str.w r0, [r4, #236] ; 0xec +10024a86: f10b 0b1c add.w fp, fp, #28 +10024a8a: f89b 30bc ldrb.w r3, [fp, #188] ; 0xbc +10024a8e: 900c str r0, [sp, #48] ; 0x30 +10024a90: 2b04 cmp r3, #4 +10024a92: d007 beq.n 10024aa4 +10024a94: 7c23 ldrb r3, [r4, #16] +10024a96: 2b04 cmp r3, #4 +10024a98: bf14 ite ne +10024a9a: f04f 0901 movne.w r9, #1 +10024a9e: f04f 0902 moveq.w r9, #2 +10024aa2: e001 b.n 10024aa8 +10024aa4: f04f 0902 mov.w r9, #2 +10024aa8: f1ba 0f00 cmp.w sl, #0 +10024aac: d00f beq.n 10024ace +10024aae: f8d4 30f0 ldr.w r3, [r4, #240] ; 0xf0 +10024ab2: 6961 ldr r1, [r4, #20] +10024ab4: 69a2 ldr r2, [r4, #24] +10024ab6: 930d str r3, [sp, #52] ; 0x34 +10024ab8: f8d4 50e0 ldr.w r5, [r4, #224] ; 0xe0 +10024abc: f7ff fcd1 bl 10024462 +10024ac0: f104 0014 add.w r0, r4, #20 +10024ac4: f7ff fcdc bl 10024480 +10024ac8: f04f 0a01 mov.w sl, #1 +10024acc: e2ca b.n 10025064 +10024ace: 6823 ldr r3, [r4, #0] +10024ad0: f205 4594 addw r5, r5, #1172 ; 0x494 +10024ad4: 2b01 cmp r3, #1 +10024ad6: d003 beq.n 10024ae0 +10024ad8: 2b02 cmp r3, #2 +10024ada: f000 80dd beq.w 10024c98 +10024ade: e30b b.n 100250f8 +10024ae0: 4b69 ldr r3, [pc, #420] ; (10024c88 ) +10024ae2: 681b ldr r3, [r3, #0] +10024ae4: b13b cbz r3, 10024af6 +10024ae6: 4869 ldr r0, [pc, #420] ; (10024c8c ) +10024ae8: f7f6 f84a bl 1001ab80 +10024aec: 4b68 ldr r3, [pc, #416] ; (10024c90 ) +10024aee: f8d3 0194 ldr.w r0, [r3, #404] ; 0x194 +10024af2: f7f6 f845 bl 1001ab80 +10024af6: f44f 72f7 mov.w r2, #494 ; 0x1ee +10024afa: 2100 movs r1, #0 +10024afc: 980c ldr r0, [sp, #48] ; 0x30 +10024afe: f7f6 f86b bl 1001abd8 +10024b02: 68a3 ldr r3, [r4, #8] +10024b04: f04f 0a00 mov.w sl, #0 +10024b08: f013 0f02 tst.w r3, #2 +10024b0c: 9b0c ldr r3, [sp, #48] ; 0x30 +10024b0e: bf14 ite ne +10024b10: 2202 movne r2, #2 +10024b12: 22fe moveq r2, #254 ; 0xfe +10024b14: 701a strb r2, [r3, #0] +10024b16: 9b0c ldr r3, [sp, #48] ; 0x30 +10024b18: f104 0b14 add.w fp, r4, #20 +10024b1c: 789a ldrb r2, [r3, #2] +10024b1e: f022 0207 bic.w r2, r2, #7 +10024b22: 709a strb r2, [r3, #2] +10024b24: 9b0c ldr r3, [sp, #48] ; 0x30 +10024b26: 789a ldrb r2, [r3, #2] +10024b28: ea49 0202 orr.w r2, r9, r2 +10024b2c: 709a strb r2, [r3, #2] +10024b2e: 9b0c ldr r3, [sp, #48] ; 0x30 +10024b30: 789a ldrb r2, [r3, #2] +10024b32: f042 0208 orr.w r2, r2, #8 +10024b36: 709a strb r2, [r3, #2] +10024b38: 9b0c ldr r3, [sp, #48] ; 0x30 +10024b3a: 789a ldrb r2, [r3, #2] +10024b3c: f022 0230 bic.w r2, r2, #48 ; 0x30 +10024b40: 709a strb r2, [r3, #2] +10024b42: 9b0c ldr r3, [sp, #48] ; 0x30 +10024b44: 789a ldrb r2, [r3, #2] +10024b46: f022 0240 bic.w r2, r2, #64 ; 0x40 +10024b4a: 709a strb r2, [r3, #2] +10024b4c: 9b0c ldr r3, [sp, #48] ; 0x30 +10024b4e: 789a ldrb r2, [r3, #2] +10024b50: f062 027f orn r2, r2, #127 ; 0x7f +10024b54: 709a strb r2, [r3, #2] +10024b56: 9b0c ldr r3, [sp, #48] ; 0x30 +10024b58: 785a ldrb r2, [r3, #1] +10024b5a: f022 0201 bic.w r2, r2, #1 +10024b5e: 705a strb r2, [r3, #1] +10024b60: 9b0c ldr r3, [sp, #48] ; 0x30 +10024b62: 785a ldrb r2, [r3, #1] +10024b64: f022 0202 bic.w r2, r2, #2 +10024b68: 705a strb r2, [r3, #1] +10024b6a: 9b0c ldr r3, [sp, #48] ; 0x30 +10024b6c: 785a ldrb r2, [r3, #1] +10024b6e: f022 0204 bic.w r2, r2, #4 +10024b72: 705a strb r2, [r3, #1] +10024b74: 9b0c ldr r3, [sp, #48] ; 0x30 +10024b76: 785a ldrb r2, [r3, #1] +10024b78: f022 0208 bic.w r2, r2, #8 +10024b7c: 705a strb r2, [r3, #1] +10024b7e: 9b0c ldr r3, [sp, #48] ; 0x30 +10024b80: f883 a003 strb.w sl, [r3, #3] +10024b84: 7c23 ldrb r3, [r4, #16] +10024b86: 980c ldr r0, [sp, #48] ; 0x30 +10024b88: 2b02 cmp r3, #2 +10024b8a: bf14 ite ne +10024b8c: 2310 movne r3, #16 +10024b8e: 2320 moveq r3, #32 +10024b90: 7103 strb r3, [r0, #4] +10024b92: 6961 ldr r1, [r4, #20] +10024b94: 69a2 ldr r2, [r4, #24] +10024b96: f7ff fc64 bl 10024462 +10024b9a: 4659 mov r1, fp +10024b9c: 2208 movs r2, #8 +10024b9e: f104 001c add.w r0, r4, #28 +10024ba2: f7f6 f815 bl 1001abd0 +10024ba6: 4658 mov r0, fp +10024ba8: f7ff fc6a bl 10024480 +10024bac: 4628 mov r0, r5 +10024bae: f7ff fc9b bl 100244e8 +10024bb2: 46ee mov lr, sp +10024bb4: f105 0c08 add.w ip, r5, #8 +10024bb8: e8bc 000f ldmia.w ip!, {r0, r1, r2, r3} +10024bbc: e8ae 000f stmia.w lr!, {r0, r1, r2, r3} +10024bc0: e89c 0003 ldmia.w ip, {r0, r1} +10024bc4: e88e 0003 stmia.w lr, {r0, r1} +10024bc8: f104 0124 add.w r1, r4, #36 ; 0x24 +10024bcc: e895 000c ldmia.w r5, {r2, r3} +10024bd0: c903 ldmia r1, {r0, r1} +10024bd2: f7ff fb35 bl 10024240 +10024bd6: 980c ldr r0, [sp, #48] ; 0x30 +10024bd8: 6a61 ldr r1, [r4, #36] ; 0x24 +10024bda: 6aa2 ldr r2, [r4, #40] ; 0x28 +10024bdc: 300d adds r0, #13 +10024bde: f7f5 fff7 bl 1001abd0 +10024be2: 4651 mov r1, sl +10024be4: 2210 movs r2, #16 +10024be6: a814 add r0, sp, #80 ; 0x50 +10024be8: f7f5 fff6 bl 1001abd8 +10024bec: 980c ldr r0, [sp, #48] ; 0x30 +10024bee: a914 add r1, sp, #80 ; 0x50 +10024bf0: 2210 movs r2, #16 +10024bf2: 302d adds r0, #45 ; 0x2d +10024bf4: f7f5 ffec bl 1001abd0 +10024bf8: 4651 mov r1, sl +10024bfa: 2208 movs r2, #8 +10024bfc: a80e add r0, sp, #56 ; 0x38 +10024bfe: f7f5 ffeb bl 1001abd8 +10024c02: 980c ldr r0, [sp, #48] ; 0x30 +10024c04: a90e add r1, sp, #56 ; 0x38 +10024c06: 2208 movs r2, #8 +10024c08: 303d adds r0, #61 ; 0x3d +10024c0a: f7f5 ffe1 bl 1001abd0 +10024c0e: 4651 mov r1, sl +10024c10: 2208 movs r2, #8 +10024c12: a812 add r0, sp, #72 ; 0x48 +10024c14: f7f5 ffe0 bl 1001abd8 +10024c18: 980c ldr r0, [sp, #48] ; 0x30 +10024c1a: a912 add r1, sp, #72 ; 0x48 +10024c1c: 3045 adds r0, #69 ; 0x45 +10024c1e: 2208 movs r2, #8 +10024c20: f7f5 ffd6 bl 1001abd0 +10024c24: 68a3 ldr r3, [r4, #8] +10024c26: 980c ldr r0, [sp, #48] ; 0x30 +10024c28: f013 0302 ands.w r3, r3, #2 +10024c2c: d00a beq.n 10024c44 +10024c2e: 2316 movs r3, #22 +10024c30: f880 a05d strb.w sl, [r0, #93] ; 0x5d +10024c34: f880 305e strb.w r3, [r0, #94] ; 0x5e +10024c38: 4916 ldr r1, [pc, #88] ; (10024c94 ) +10024c3a: 2206 movs r2, #6 +10024c3c: 305f adds r0, #95 ; 0x5f +10024c3e: f7f5 ffc7 bl 1001abd0 +10024c42: e003 b.n 10024c4c +10024c44: f880 305d strb.w r3, [r0, #93] ; 0x5d +10024c48: f880 305e strb.w r3, [r0, #94] ; 0x5e +10024c4c: 2100 movs r1, #0 +10024c4e: 2210 movs r2, #16 +10024c50: a838 add r0, sp, #224 ; 0xe0 +10024c52: f7f5 ffc1 bl 1001abd8 +10024c56: 980c ldr r0, [sp, #48] ; 0x30 +10024c58: a938 add r1, sp, #224 ; 0xe0 +10024c5a: 304d adds r0, #77 ; 0x4d +10024c5c: 2210 movs r2, #16 +10024c5e: f7f5 ffb7 bl 1001abd0 +10024c62: 68a3 ldr r3, [r4, #8] +10024c64: 079b lsls r3, r3, #30 +10024c66: d508 bpl.n 10024c7a +10024c68: 9b0c ldr r3, [sp, #48] ; 0x30 +10024c6a: f893 205d ldrb.w r2, [r3, #93] ; 0x5d +10024c6e: f893 305e ldrb.w r3, [r3, #94] ; 0x5e +10024c72: eb03 2302 add.w r3, r3, r2, lsl #8 +10024c76: 335f adds r3, #95 ; 0x5f +10024c78: e000 b.n 10024c7c +10024c7a: 235f movs r3, #95 ; 0x5f +10024c7c: 930d str r3, [sp, #52] ; 0x34 +10024c7e: 9d0d ldr r5, [sp, #52] ; 0x34 +10024c80: f04f 0a00 mov.w sl, #0 +10024c84: 3512 adds r5, #18 +10024c86: e1e8 b.n 1002505a +10024c88: 10044f38 .word 0x10044f38 +10024c8c: 100429b1 .word 0x100429b1 +10024c90: 10043ac4 .word 0x10043ac4 +10024c94: 10044fac .word 0x10044fac +10024c98: 4b9e ldr r3, [pc, #632] ; (10024f14 ) +10024c9a: 681b ldr r3, [r3, #0] +10024c9c: b13b cbz r3, 10024cae +10024c9e: 489e ldr r0, [pc, #632] ; (10024f18 ) +10024ca0: f7f5 ff6e bl 1001ab80 +10024ca4: 4b9d ldr r3, [pc, #628] ; (10024f1c ) +10024ca6: f8d3 0198 ldr.w r0, [r3, #408] ; 0x198 +10024caa: f7f5 ff69 bl 1001ab80 +10024cae: 68a3 ldr r3, [r4, #8] +10024cb0: f10d 0a50 add.w sl, sp, #80 ; 0x50 +10024cb4: f013 0f02 tst.w r3, #2 +10024cb8: 9b0c ldr r3, [sp, #48] ; 0x30 +10024cba: bf14 ite ne +10024cbc: 2202 movne r2, #2 +10024cbe: 22fe moveq r2, #254 ; 0xfe +10024cc0: 701a strb r2, [r3, #0] +10024cc2: 9b0c ldr r3, [sp, #48] ; 0x30 +10024cc4: 789a ldrb r2, [r3, #2] +10024cc6: f022 0207 bic.w r2, r2, #7 +10024cca: 709a strb r2, [r3, #2] +10024ccc: f8d4 20e4 ldr.w r2, [r4, #228] ; 0xe4 +10024cd0: 9b0c ldr r3, [sp, #48] ; 0x30 +10024cd2: 7892 ldrb r2, [r2, #2] +10024cd4: 7899 ldrb r1, [r3, #2] +10024cd6: f002 0207 and.w r2, r2, #7 +10024cda: 430a orrs r2, r1 +10024cdc: 709a strb r2, [r3, #2] +10024cde: 9b0c ldr r3, [sp, #48] ; 0x30 +10024ce0: f8d4 20e4 ldr.w r2, [r4, #228] ; 0xe4 +10024ce4: 7891 ldrb r1, [r2, #2] +10024ce6: 789a ldrb r2, [r3, #2] +10024ce8: f001 0108 and.w r1, r1, #8 +10024cec: f022 0208 bic.w r2, r2, #8 +10024cf0: 430a orrs r2, r1 +10024cf2: 709a strb r2, [r3, #2] +10024cf4: 9b0c ldr r3, [sp, #48] ; 0x30 +10024cf6: 789a ldrb r2, [r3, #2] +10024cf8: f022 0230 bic.w r2, r2, #48 ; 0x30 +10024cfc: 709a strb r2, [r3, #2] +10024cfe: 9b0c ldr r3, [sp, #48] ; 0x30 +10024d00: 789a ldrb r2, [r3, #2] +10024d02: f042 0240 orr.w r2, r2, #64 ; 0x40 +10024d06: 709a strb r2, [r3, #2] +10024d08: 9b0c ldr r3, [sp, #48] ; 0x30 +10024d0a: 789a ldrb r2, [r3, #2] +10024d0c: f062 027f orn r2, r2, #127 ; 0x7f +10024d10: 709a strb r2, [r3, #2] +10024d12: 9b0c ldr r3, [sp, #48] ; 0x30 +10024d14: 785a ldrb r2, [r3, #1] +10024d16: f042 0201 orr.w r2, r2, #1 +10024d1a: 705a strb r2, [r3, #1] +10024d1c: 9b0c ldr r3, [sp, #48] ; 0x30 +10024d1e: 785a ldrb r2, [r3, #1] +10024d20: f022 0202 bic.w r2, r2, #2 +10024d24: 705a strb r2, [r3, #1] +10024d26: 9b0c ldr r3, [sp, #48] ; 0x30 +10024d28: 785a ldrb r2, [r3, #1] +10024d2a: f022 0204 bic.w r2, r2, #4 +10024d2e: 705a strb r2, [r3, #1] +10024d30: 9b0c ldr r3, [sp, #48] ; 0x30 +10024d32: 785a ldrb r2, [r3, #1] +10024d34: f022 0208 bic.w r2, r2, #8 +10024d38: 705a strb r2, [r3, #1] +10024d3a: 9a0c ldr r2, [sp, #48] ; 0x30 +10024d3c: 2300 movs r3, #0 +10024d3e: 70d3 strb r3, [r2, #3] +10024d40: 7c22 ldrb r2, [r4, #16] +10024d42: 980c ldr r0, [sp, #48] ; 0x30 +10024d44: 2a02 cmp r2, #2 +10024d46: bf14 ite ne +10024d48: 2210 movne r2, #16 +10024d4a: 2220 moveq r2, #32 +10024d4c: 7102 strb r2, [r0, #4] +10024d4e: 6961 ldr r1, [r4, #20] +10024d50: 69a2 ldr r2, [r4, #24] +10024d52: 9307 str r3, [sp, #28] +10024d54: f7ff fb85 bl 10024462 +10024d58: f104 0014 add.w r0, r4, #20 +10024d5c: f7ff fb90 bl 10024480 +10024d60: 980c ldr r0, [sp, #48] ; 0x30 +10024d62: 6a61 ldr r1, [r4, #36] ; 0x24 +10024d64: 6aa2 ldr r2, [r4, #40] ; 0x28 +10024d66: 300d adds r0, #13 +10024d68: f7f5 ff32 bl 1001abd0 +10024d6c: 9b07 ldr r3, [sp, #28] +10024d6e: 2210 movs r2, #16 +10024d70: 4619 mov r1, r3 +10024d72: 4650 mov r0, sl +10024d74: f7f5 ff30 bl 1001abd8 +10024d78: 980c ldr r0, [sp, #48] ; 0x30 +10024d7a: 4651 mov r1, sl +10024d7c: 302d adds r0, #45 ; 0x2d +10024d7e: 2210 movs r2, #16 +10024d80: f7f5 ff26 bl 1001abd0 +10024d84: 68a3 ldr r3, [r4, #8] +10024d86: f013 0302 ands.w r3, r3, #2 +10024d8a: f000 812f beq.w 10024fec +10024d8e: 4a64 ldr r2, [pc, #400] ; (10024f20 ) +10024d90: ab10 add r3, sp, #64 ; 0x40 +10024d92: 6810 ldr r0, [r2, #0] +10024d94: 6851 ldr r1, [r2, #4] +10024d96: f1b9 0f02 cmp.w r9, #2 +10024d9a: c303 stmia r3!, {r0, r1} +10024d9c: 9b0c ldr r3, [sp, #48] ; 0x30 +10024d9e: f04f 0213 mov.w r2, #19 +10024da2: 705a strb r2, [r3, #1] +10024da4: d11f bne.n 10024de6 +10024da6: 4628 mov r0, r5 +10024da8: f7ff fb9e bl 100244e8 +10024dac: 2310 movs r3, #16 +10024dae: 46ee mov lr, sp +10024db0: f105 0c08 add.w ip, r5, #8 +10024db4: 930b str r3, [sp, #44] ; 0x2c +10024db6: f8cd a028 str.w sl, [sp, #40] ; 0x28 +10024dba: e8bc 000f ldmia.w ip!, {r0, r1, r2, r3} +10024dbe: e8ae 000f stmia.w lr!, {r0, r1, r2, r3} +10024dc2: e89c 0003 ldmia.w ip, {r0, r1} +10024dc6: e88e 0003 stmia.w lr, {r0, r1} +10024dca: f10d 0b28 add.w fp, sp, #40 ; 0x28 +10024dce: e89b 0003 ldmia.w fp, {r0, r1} +10024dd2: e895 000c ldmia.w r5, {r2, r3} +10024dd6: f7ff fa33 bl 10024240 +10024dda: 980c ldr r0, [sp, #48] ; 0x30 +10024ddc: 4651 mov r1, sl +10024dde: 302d adds r0, #45 ; 0x2d +10024de0: 2210 movs r2, #16 +10024de2: f7f5 fef5 bl 1001abd0 +10024de6: f507 5a8c add.w sl, r7, #4480 ; 0x1180 +10024dea: f10a 0a1c add.w sl, sl, #28 +10024dee: f8da 1034 ldr.w r1, [sl, #52] ; 0x34 +10024df2: 780b ldrb r3, [r1, #0] +10024df4: 2b30 cmp r3, #48 ; 0x30 +10024df6: d10e bne.n 10024e16 +10024df8: f891 b001 ldrb.w fp, [r1, #1] +10024dfc: f10b 0b02 add.w fp, fp, #2 +10024e00: f1bb 0f64 cmp.w fp, #100 ; 0x64 +10024e04: f300 8178 bgt.w 100250f8 +10024e08: 465a mov r2, fp +10024e0a: a838 add r0, sp, #224 ; 0xe0 +10024e0c: f7f5 fee0 bl 1001abd0 +10024e10: ab38 add r3, sp, #224 ; 0xe0 +10024e12: 449b add fp, r3 +10024e14: e001 b.n 10024e1a +10024e16: f10d 0be0 add.w fp, sp, #224 ; 0xe0 +10024e1a: 4658 mov r0, fp +10024e1c: a910 add r1, sp, #64 ; 0x40 +10024e1e: 2208 movs r2, #8 +10024e20: f7f5 fed6 bl 1001abd0 +10024e24: f89a 30bc ldrb.w r3, [sl, #188] ; 0xbc +10024e28: f10b 0b08 add.w fp, fp, #8 +10024e2c: 2b02 cmp r3, #2 +10024e2e: bf14 ite ne +10024e30: 2316 movne r3, #22 +10024e32: 2326 moveq r3, #38 ; 0x26 +10024e34: f80b 3c07 strb.w r3, [fp, #-7] +10024e38: f8da 3020 ldr.w r3, [sl, #32] +10024e3c: b3bb cbz r3, 10024eae +10024e3e: f8da 3190 ldr.w r3, [sl, #400] ; 0x190 +10024e42: b913 cbnz r3, 10024e4a +10024e44: f8da 3028 ldr.w r3, [sl, #40] ; 0x28 +10024e48: b38b cbz r3, 10024eae +10024e4a: f8da 2028 ldr.w r2, [sl, #40] ; 0x28 +10024e4e: 2300 movs r3, #0 +10024e50: b10a cbz r2, 10024e56 +10024e52: f8ca 302c str.w r3, [sl, #44] ; 0x2c +10024e56: f8ca 3190 str.w r3, [sl, #400] ; 0x190 +10024e5a: f8ca 3028 str.w r3, [sl, #40] ; 0x28 +10024e5e: f8ca 3030 str.w r3, [sl, #48] ; 0x30 +10024e62: 4628 mov r0, r5 +10024e64: f7ff fb40 bl 100244e8 +10024e68: f105 0c08 add.w ip, r5, #8 +10024e6c: 46ee mov lr, sp +10024e6e: e8bc 000f ldmia.w ip!, {r0, r1, r2, r3} +10024e72: e8ae 000f stmia.w lr!, {r0, r1, r2, r3} +10024e76: e89c 0003 ldmia.w ip, {r0, r1} +10024e7a: e88e 0003 stmia.w lr, {r0, r1} +10024e7e: e895 000c ldmia.w r5, {r2, r3} +10024e82: 35c0 adds r5, #192 ; 0xc0 +10024e84: e895 0003 ldmia.w r5, {r0, r1} +10024e88: f7ff f9da bl 10024240 +10024e8c: f8da 3188 ldr.w r3, [sl, #392] ; 0x188 +10024e90: f507 50a4 add.w r0, r7, #5248 ; 0x1480 +10024e94: eb0a 1343 add.w r3, sl, r3, lsl #5 +10024e98: 33e8 adds r3, #232 ; 0xe8 +10024e9a: 9300 str r3, [sp, #0] +10024e9c: 2320 movs r3, #32 +10024e9e: 9301 str r3, [sp, #4] +10024ea0: 3019 adds r0, #25 +10024ea2: f8da 10c0 ldr.w r1, [sl, #192] ; 0xc0 +10024ea6: f50a 72b4 add.w r2, sl, #360 ; 0x168 +10024eaa: f019 fd11 bl 1003e8d0 <__rom_psk_CalcGTK_veneer> +10024eae: f507 558c add.w r5, r7, #4480 ; 0x1180 +10024eb2: f8d5 11a4 ldr.w r1, [r5, #420] ; 0x1a4 +10024eb6: 351c adds r5, #28 +10024eb8: f895 30bc ldrb.w r3, [r5, #188] ; 0xbc +10024ebc: eb05 1141 add.w r1, r5, r1, lsl #5 +10024ec0: 2b02 cmp r3, #2 +10024ec2: bf14 ite ne +10024ec4: 2210 movne r2, #16 +10024ec6: 2220 moveq r2, #32 +10024ec8: 4658 mov r0, fp +10024eca: 31e8 adds r1, #232 ; 0xe8 +10024ecc: f7f5 fe80 bl 1001abd0 +10024ed0: f895 30bc ldrb.w r3, [r5, #188] ; 0xbc +10024ed4: ad38 add r5, sp, #224 ; 0xe0 +10024ed6: 2b02 cmp r3, #2 +10024ed8: bf14 ite ne +10024eda: 2310 movne r3, #16 +10024edc: 2320 moveq r3, #32 +10024ede: 449b add fp, r3 +10024ee0: 4b10 ldr r3, [pc, #64] ; (10024f24 ) +10024ee2: ebc5 020b rsb r2, r5, fp +10024ee6: 4013 ands r3, r2 +10024ee8: 2b00 cmp r3, #0 +10024eea: da03 bge.n 10024ef4 +10024eec: 3b01 subs r3, #1 +10024eee: f063 0307 orn r3, r3, #7 +10024ef2: 3301 adds r3, #1 +10024ef4: b1db cbz r3, 10024f2e +10024ef6: 22dd movs r2, #221 ; 0xdd +10024ef8: 4659 mov r1, fp +10024efa: f801 2b01 strb.w r2, [r1], #1 +10024efe: 1c5a adds r2, r3, #1 +10024f00: 2a08 cmp r2, #8 +10024f02: d011 beq.n 10024f28 +10024f04: ebc3 000b rsb r0, r3, fp +10024f08: f04f 0e00 mov.w lr, #0 +10024f0c: f800 e002 strb.w lr, [r0, r2] +10024f10: 3201 adds r2, #1 +10024f12: e7f5 b.n 10024f00 +10024f14: 10044f38 .word 0x10044f38 +10024f18: 100429b1 .word 0x100429b1 +10024f1c: 10043ac4 .word 0x10043ac4 +10024f20: 1004166f .word 0x1004166f +10024f24: 80000007 .word 0x80000007 +10024f28: f1c3 0b07 rsb fp, r3, #7 +10024f2c: 448b add fp, r1 +10024f2e: 4974 ldr r1, [pc, #464] ; (10025100 ) +10024f30: f8d6 30fc ldr.w r3, [r6, #252] ; 0xfc +10024f34: 6808 ldr r0, [r1, #0] +10024f36: 6849 ldr r1, [r1, #4] +10024f38: aa12 add r2, sp, #72 ; 0x48 +10024f3a: f203 138b addw r3, r3, #395 ; 0x18b +10024f3e: c203 stmia r2!, {r0, r1} +10024f40: eb07 0383 add.w r3, r7, r3, lsl #2 +10024f44: f8d3 3d08 ldr.w r3, [r3, #3336] ; 0xd08 +10024f48: f10d 0a60 add.w sl, sp, #96 ; 0x60 +10024f4c: f8d3 30ec ldr.w r3, [r3, #236] ; 0xec +10024f50: f10d 0c26 add.w ip, sp, #38 ; 0x26 +10024f54: 789b ldrb r3, [r3, #2] +10024f56: f003 0307 and.w r3, r3, #7 +10024f5a: 2b01 cmp r3, #1 +10024f5c: d013 beq.n 10024f86 +10024f5e: f104 03a4 add.w r3, r4, #164 ; 0xa4 +10024f62: 9300 str r3, [sp, #0] +10024f64: 2310 movs r3, #16 +10024f66: 9301 str r3, [sp, #4] +10024f68: f8cd c00c str.w ip, [sp, #12] +10024f6c: f8cd a008 str.w sl, [sp, #8] +10024f70: 4628 mov r0, r5 +10024f72: ebc5 010b rsb r1, r5, fp +10024f76: aa12 add r2, sp, #72 ; 0x48 +10024f78: 2308 movs r3, #8 +10024f7a: f8cd c01c str.w ip, [sp, #28] +10024f7e: f019 fd1b bl 1003e9b8 <__AES_WRAP_veneer> +10024f82: f8dd c01c ldr.w ip, [sp, #28] +10024f86: f8bc 5000 ldrh.w r5, [ip] +10024f8a: 980c ldr r0, [sp, #48] ; 0x30 +10024f8c: 4651 mov r1, sl +10024f8e: 462a mov r2, r5 +10024f90: 305f adds r0, #95 ; 0x5f +10024f92: f7f5 fe1d bl 1001abd0 +10024f96: 980c ldr r0, [sp, #48] ; 0x30 +10024f98: 0a2b lsrs r3, r5, #8 +10024f9a: f880 505e strb.w r5, [r0, #94] ; 0x5e +10024f9e: f880 305d strb.w r3, [r0, #93] ; 0x5d +10024fa2: f896 3148 ldrb.w r3, [r6, #328] ; 0x148 +10024fa6: 355f adds r5, #95 ; 0x5f +10024fa8: f88d 3038 strb.w r3, [sp, #56] ; 0x38 +10024fac: f896 3149 ldrb.w r3, [r6, #329] ; 0x149 +10024fb0: a90e add r1, sp, #56 ; 0x38 +10024fb2: f88d 3039 strb.w r3, [sp, #57] ; 0x39 +10024fb6: f896 314a ldrb.w r3, [r6, #330] ; 0x14a +10024fba: 2208 movs r2, #8 +10024fbc: f88d 303a strb.w r3, [sp, #58] ; 0x3a +10024fc0: f896 314b ldrb.w r3, [r6, #331] ; 0x14b +10024fc4: 303d adds r0, #61 ; 0x3d +10024fc6: f88d 303b strb.w r3, [sp, #59] ; 0x3b +10024fca: f896 314c ldrb.w r3, [r6, #332] ; 0x14c +10024fce: 950d str r5, [sp, #52] ; 0x34 +10024fd0: f88d 303c strb.w r3, [sp, #60] ; 0x3c +10024fd4: f896 314d ldrb.w r3, [r6, #333] ; 0x14d +10024fd8: f88d 303d strb.w r3, [sp, #61] ; 0x3d +10024fdc: 2300 movs r3, #0 +10024fde: f88d 303e strb.w r3, [sp, #62] ; 0x3e +10024fe2: f88d 303f strb.w r3, [sp, #63] ; 0x3f +10024fe6: f7f5 fdf3 bl 1001abd0 +10024fea: e032 b.n 10025052 +10024fec: 4619 mov r1, r3 +10024fee: 2208 movs r2, #8 +10024ff0: a80e add r0, sp, #56 ; 0x38 +10024ff2: 9307 str r3, [sp, #28] +10024ff4: f7f5 fdf0 bl 1001abd8 +10024ff8: 980c ldr r0, [sp, #48] ; 0x30 +10024ffa: a90e add r1, sp, #56 ; 0x38 +10024ffc: 2208 movs r2, #8 +10024ffe: 303d adds r0, #61 ; 0x3d +10025000: f7f5 fde6 bl 1001abd0 +10025004: 9b07 ldr r3, [sp, #28] +10025006: 2208 movs r2, #8 +10025008: 4619 mov r1, r3 +1002500a: a812 add r0, sp, #72 ; 0x48 +1002500c: f7f5 fde4 bl 1001abd8 +10025010: 980c ldr r0, [sp, #48] ; 0x30 +10025012: a912 add r1, sp, #72 ; 0x48 +10025014: 2208 movs r2, #8 +10025016: 3045 adds r0, #69 ; 0x45 +10025018: f7f5 fdda bl 1001abd0 +1002501c: f8db 1034 ldr.w r1, [fp, #52] ; 0x34 +10025020: 9b07 ldr r3, [sp, #28] +10025022: 780a ldrb r2, [r1, #0] +10025024: 2add cmp r2, #221 ; 0xdd +10025026: d106 bne.n 10025036 +10025028: 784d ldrb r5, [r1, #1] +1002502a: a818 add r0, sp, #96 ; 0x60 +1002502c: 3502 adds r5, #2 +1002502e: 462a mov r2, r5 +10025030: f7f5 fdce bl 1001abd0 +10025034: e000 b.n 10025038 +10025036: 461d mov r5, r3 +10025038: 980c ldr r0, [sp, #48] ; 0x30 +1002503a: 0a2b lsrs r3, r5, #8 +1002503c: f880 505e strb.w r5, [r0, #94] ; 0x5e +10025040: f880 305d strb.w r3, [r0, #93] ; 0x5d +10025044: 462a mov r2, r5 +10025046: 305f adds r0, #95 ; 0x5f +10025048: a918 add r1, sp, #96 ; 0x60 +1002504a: 355f adds r5, #95 ; 0x5f +1002504c: f7f5 fdc0 bl 1001abd0 +10025050: 950d str r5, [sp, #52] ; 0x34 +10025052: 9d0d ldr r5, [sp, #52] ; 0x34 +10025054: f04f 0a01 mov.w sl, #1 +10025058: 3512 adds r5, #18 +1002505a: 9b0d ldr r3, [sp, #52] ; 0x34 +1002505c: f8c4 50e0 str.w r5, [r4, #224] ; 0xe0 +10025060: f8c4 30f0 str.w r3, [r4, #240] ; 0xf0 +10025064: f506 7184 add.w r1, r6, #264 ; 0x108 +10025068: 2206 movs r2, #6 +1002506a: 4640 mov r0, r8 +1002506c: f7f5 fdb0 bl 1001abd0 +10025070: f507 51a4 add.w r1, r7, #5248 ; 0x1480 +10025074: 3119 adds r1, #25 +10025076: 2206 movs r2, #6 +10025078: f108 0006 add.w r0, r8, #6 +1002507c: f7f5 fda8 bl 1001abd0 +10025080: f648 008e movw r0, #34958 ; 0x888e +10025084: f7f2 f98e bl 100173a4 <_htons> +10025088: 2301 movs r3, #1 +1002508a: f888 300e strb.w r3, [r8, #14] +1002508e: 2303 movs r3, #3 +10025090: f8a8 000c strh.w r0, [r8, #12] +10025094: f888 300f strb.w r3, [r8, #15] +10025098: f8bd 0034 ldrh.w r0, [sp, #52] ; 0x34 +1002509c: f7f2 f982 bl 100173a4 <_htons> +100250a0: f8a8 0010 strh.w r0, [r8, #16] +100250a4: f1ba 0f00 cmp.w sl, #0 +100250a8: d00a beq.n 100250c0 +100250aa: ab10 add r3, sp, #64 ; 0x40 +100250ac: f8cd 8040 str.w r8, [sp, #64] ; 0x40 +100250b0: 9511 str r5, [sp, #68] ; 0x44 +100250b2: e893 0003 ldmia.w r3, {r0, r1} +100250b6: 464a mov r2, r9 +100250b8: f104 0394 add.w r3, r4, #148 ; 0x94 +100250bc: f7ff fae6 bl 1002468c +100250c0: f44f 7000 mov.w r0, #512 ; 0x200 +100250c4: 214a movs r1, #74 ; 0x4a +100250c6: f011 fbc0 bl 1003684a +100250ca: 4606 mov r6, r0 +100250cc: b1a0 cbz r0, 100250f8 +100250ce: 462a mov r2, r5 +100250d0: 4641 mov r1, r8 +100250d2: 6900 ldr r0, [r0, #16] +100250d4: f7f5 fd7c bl 1001abd0 +100250d8: 4629 mov r1, r5 +100250da: 4630 mov r0, r6 +100250dc: f011 fb94 bl 10036808 +100250e0: f641 0334 movw r3, #6196 ; 0x1834 +100250e4: 58f9 ldr r1, [r7, r3] +100250e6: 4630 mov r0, r6 +100250e8: 6a8b ldr r3, [r1, #40] ; 0x28 +100250ea: 4798 blx r3 +100250ec: f504 703d add.w r0, r4, #756 ; 0x2f4 +100250f0: f44f 717a mov.w r1, #1000 ; 0x3e8 +100250f4: f011 fea0 bl 10036e38 +100250f8: b059 add sp, #356 ; 0x164 +100250fa: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +100250fe: bf00 nop +10025100: 10041667 .word 0x10041667 + +10025104 : +10025104: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10025108: f600 5308 addw r3, r0, #3336 ; 0xd08 +1002510c: b095 sub sp, #84 ; 0x54 +1002510e: 4680 mov r8, r0 +10025110: 468a mov sl, r1 +10025112: 4616 mov r6, r2 +10025114: 2b00 cmp r3, #0 +10025116: f000 8267 beq.w 100255e8 +1002511a: 2900 cmp r1, #0 +1002511c: f000 8264 beq.w 100255e8 +10025120: f241 3338 movw r3, #4920 ; 0x1338 +10025124: 58c5 ldr r5, [r0, r3] +10025126: f8d5 40dc ldr.w r4, [r5, #220] ; 0xdc +1002512a: f104 0312 add.w r3, r4, #18 +1002512e: f8c5 30ec str.w r3, [r5, #236] ; 0xec +10025132: b17a cbz r2, 10025154 +10025134: f8d5 70e0 ldr.w r7, [r5, #224] ; 0xe0 +10025138: f8d5 b0f0 ldr.w fp, [r5, #240] ; 0xf0 +1002513c: 2f00 cmp r7, #0 +1002513e: f000 8253 beq.w 100255e8 +10025142: f1bb 0f00 cmp.w fp, #0 +10025146: f000 824f beq.w 100255e8 +1002514a: f04f 0c00 mov.w ip, #0 +1002514e: f04f 0901 mov.w r9, #1 +10025152: e1f4 b.n 1002553e +10025154: f8d5 2314 ldr.w r2, [r5, #788] ; 0x314 +10025158: f104 0b3f add.w fp, r4, #63 ; 0x3f +1002515c: f104 074f add.w r7, r4, #79 ; 0x4f +10025160: 2a00 cmp r2, #0 +10025162: f040 8107 bne.w 10025374 +10025166: f8d5 2310 ldr.w r2, [r5, #784] ; 0x310 +1002516a: f04f 0901 mov.w r9, #1 +1002516e: 2a00 cmp r2, #0 +10025170: f040 8095 bne.w 1002529e +10025174: 4618 mov r0, r3 +10025176: 4631 mov r1, r6 +10025178: f44f 72f7 mov.w r2, #494 ; 0x1ee +1002517c: f8c5 9310 str.w r9, [r5, #784] ; 0x310 +10025180: f7f5 fd2a bl 1001abd8 +10025184: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 +10025188: 7d21 ldrb r1, [r4, #20] +1002518a: 781b ldrb r3, [r3, #0] +1002518c: f001 01f8 and.w r1, r1, #248 ; 0xf8 +10025190: 7521 strb r1, [r4, #20] +10025192: 74a3 strb r3, [r4, #18] +10025194: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 +10025198: f104 0017 add.w r0, r4, #23 +1002519c: 789a ldrb r2, [r3, #2] +1002519e: f002 0207 and.w r2, r2, #7 +100251a2: 430a orrs r2, r1 +100251a4: 7522 strb r2, [r4, #20] +100251a6: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 +100251aa: f002 02c7 and.w r2, r2, #199 ; 0xc7 +100251ae: 789b ldrb r3, [r3, #2] +100251b0: f003 0308 and.w r3, r3, #8 +100251b4: 4313 orrs r3, r2 +100251b6: 7523 strb r3, [r4, #20] +100251b8: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 +100251bc: f003 030f and.w r3, r3, #15 +100251c0: 7892 ldrb r2, [r2, #2] +100251c2: f012 0f30 tst.w r2, #48 ; 0x30 +100251c6: bf0c ite eq +100251c8: 2200 moveq r2, #0 +100251ca: 2240 movne r2, #64 ; 0x40 +100251cc: 4313 orrs r3, r2 +100251ce: 7523 strb r3, [r4, #20] +100251d0: 7ce3 ldrb r3, [r4, #19] +100251d2: ea43 0309 orr.w r3, r3, r9 +100251d6: 74e3 strb r3, [r4, #19] +100251d8: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 +100251dc: f023 0302 bic.w r3, r3, #2 +100251e0: 7852 ldrb r2, [r2, #1] +100251e2: f002 0202 and.w r2, r2, #2 +100251e6: 4313 orrs r3, r2 +100251e8: 74e3 strb r3, [r4, #19] +100251ea: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 +100251ee: f023 0304 bic.w r3, r3, #4 +100251f2: 7852 ldrb r2, [r2, #1] +100251f4: f002 0204 and.w r2, r2, #4 +100251f8: 4313 orrs r3, r2 +100251fa: 74e3 strb r3, [r4, #19] +100251fc: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 +10025200: f023 0308 bic.w r3, r3, #8 +10025204: 7852 ldrb r2, [r2, #1] +10025206: f002 0208 and.w r2, r2, #8 +1002520a: 4313 orrs r3, r2 +1002520c: 74e3 strb r3, [r4, #19] +1002520e: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 +10025212: 2208 movs r2, #8 +10025214: 78db ldrb r3, [r3, #3] +10025216: 7563 strb r3, [r4, #21] +10025218: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 +1002521c: 791b ldrb r3, [r3, #4] +1002521e: 75a3 strb r3, [r4, #22] +10025220: f8d5 10e4 ldr.w r1, [r5, #228] ; 0xe4 +10025224: 3105 adds r1, #5 +10025226: f7f5 fcd3 bl 1001abd0 +1002522a: 6ae9 ldr r1, [r5, #44] ; 0x2c +1002522c: 6b2a ldr r2, [r5, #48] ; 0x30 +1002522e: f104 001f add.w r0, r4, #31 +10025232: f7f5 fccd bl 1001abd0 +10025236: 4631 mov r1, r6 +10025238: 2210 movs r2, #16 +1002523a: a808 add r0, sp, #32 +1002523c: f7f5 fccc bl 1001abd8 +10025240: 4658 mov r0, fp +10025242: a908 add r1, sp, #32 +10025244: 2210 movs r2, #16 +10025246: f7f5 fcc3 bl 1001abd0 +1002524a: 4631 mov r1, r6 +1002524c: 2208 movs r2, #8 +1002524e: a804 add r0, sp, #16 +10025250: f7f5 fcc2 bl 1001abd8 +10025254: 4638 mov r0, r7 +10025256: a904 add r1, sp, #16 +10025258: 2208 movs r2, #8 +1002525a: f7f5 fcb9 bl 1001abd0 +1002525e: 4631 mov r1, r6 +10025260: 2208 movs r2, #8 +10025262: a806 add r0, sp, #24 +10025264: f7f5 fcb8 bl 1001abd8 +10025268: f508 578c add.w r7, r8, #4480 ; 0x1180 +1002526c: a906 add r1, sp, #24 +1002526e: 2208 movs r2, #8 +10025270: f104 0057 add.w r0, r4, #87 ; 0x57 +10025274: f7f5 fcac bl 1001abd0 +10025278: f897 3055 ldrb.w r3, [r7, #85] ; 0x55 +1002527c: f104 0071 add.w r0, r4, #113 ; 0x71 +10025280: f884 306f strb.w r3, [r4, #111] ; 0x6f +10025284: 6d7b ldr r3, [r7, #84] ; 0x54 +10025286: 371c adds r7, #28 +10025288: f884 3070 strb.w r3, [r4, #112] ; 0x70 +1002528c: 6b79 ldr r1, [r7, #52] ; 0x34 +1002528e: 6bba ldr r2, [r7, #56] ; 0x38 +10025290: f7f5 fc9e bl 1001abd0 +10025294: 6bbf ldr r7, [r7, #56] ; 0x38 +10025296: f107 0b5f add.w fp, r7, #95 ; 0x5f +1002529a: 3771 adds r7, #113 ; 0x71 +1002529c: e068 b.n 10025370 +1002529e: 4618 mov r0, r3 +100252a0: 4631 mov r1, r6 +100252a2: f44f 72f7 mov.w r2, #494 ; 0x1ee +100252a6: f8c5 9314 str.w r9, [r5, #788] ; 0x314 +100252aa: f8c5 6310 str.w r6, [r5, #784] ; 0x310 +100252ae: f7f5 fc93 bl 1001abd8 +100252b2: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 +100252b6: 7d22 ldrb r2, [r4, #20] +100252b8: 781b ldrb r3, [r3, #0] +100252ba: f002 02f8 and.w r2, r2, #248 ; 0xf8 +100252be: 7522 strb r2, [r4, #20] +100252c0: 74a3 strb r3, [r4, #18] +100252c2: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 +100252c6: f104 0017 add.w r0, r4, #23 +100252ca: 789b ldrb r3, [r3, #2] +100252cc: f003 0307 and.w r3, r3, #7 +100252d0: 4313 orrs r3, r2 +100252d2: 7523 strb r3, [r4, #20] +100252d4: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 +100252d8: f003 0307 and.w r3, r3, #7 +100252dc: 7892 ldrb r2, [r2, #2] +100252de: f002 0208 and.w r2, r2, #8 +100252e2: 4313 orrs r3, r2 +100252e4: 7523 strb r3, [r4, #20] +100252e6: 7ce3 ldrb r3, [r4, #19] +100252e8: f043 0301 orr.w r3, r3, #1 +100252ec: 74e3 strb r3, [r4, #19] +100252ee: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 +100252f2: f003 03f1 and.w r3, r3, #241 ; 0xf1 +100252f6: 7852 ldrb r2, [r2, #1] +100252f8: f002 0202 and.w r2, r2, #2 +100252fc: 4313 orrs r3, r2 +100252fe: 74e3 strb r3, [r4, #19] +10025300: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 +10025304: 2208 movs r2, #8 +10025306: 78db ldrb r3, [r3, #3] +10025308: 7563 strb r3, [r4, #21] +1002530a: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 +1002530e: 791b ldrb r3, [r3, #4] +10025310: 75a3 strb r3, [r4, #22] +10025312: f8d5 10e4 ldr.w r1, [r5, #228] ; 0xe4 +10025316: 3105 adds r1, #5 +10025318: f7f5 fc5a bl 1001abd0 +1002531c: 4631 mov r1, r6 +1002531e: 2210 movs r2, #16 +10025320: a808 add r0, sp, #32 +10025322: f7f5 fc59 bl 1001abd8 +10025326: 4658 mov r0, fp +10025328: a908 add r1, sp, #32 +1002532a: 2210 movs r2, #16 +1002532c: f7f5 fc50 bl 1001abd0 +10025330: 4631 mov r1, r6 +10025332: 2208 movs r2, #8 +10025334: a804 add r0, sp, #16 +10025336: f7f5 fc4f bl 1001abd8 +1002533a: 4638 mov r0, r7 +1002533c: a904 add r1, sp, #16 +1002533e: 2208 movs r2, #8 +10025340: f7f5 fc46 bl 1001abd0 +10025344: 4631 mov r1, r6 +10025346: 2208 movs r2, #8 +10025348: a806 add r0, sp, #24 +1002534a: f7f5 fc45 bl 1001abd8 +1002534e: f104 0057 add.w r0, r4, #87 ; 0x57 +10025352: a906 add r1, sp, #24 +10025354: 2208 movs r2, #8 +10025356: f7f5 fc3b bl 1001abd0 +1002535a: f04f 0b5f mov.w fp, #95 ; 0x5f +1002535e: f884 606f strb.w r6, [r4, #111] ; 0x6f +10025362: f884 6070 strb.w r6, [r4, #112] ; 0x70 +10025366: 2771 movs r7, #113 ; 0x71 +10025368: f8c5 631c str.w r6, [r5, #796] ; 0x31c +1002536c: f8c5 6320 str.w r6, [r5, #800] ; 0x320 +10025370: 46b4 mov ip, r6 +10025372: e0e0 b.n 10025536 +10025374: f8d5 2318 ldr.w r2, [r5, #792] ; 0x318 +10025378: 4618 mov r0, r3 +1002537a: 4631 mov r1, r6 +1002537c: 2a00 cmp r2, #0 +1002537e: d074 beq.n 1002546a +10025380: f44f 72f7 mov.w r2, #494 ; 0x1ee +10025384: f7f5 fc28 bl 1001abd8 +10025388: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 +1002538c: 7d21 ldrb r1, [r4, #20] +1002538e: 781b ldrb r3, [r3, #0] +10025390: f001 01f8 and.w r1, r1, #248 ; 0xf8 +10025394: 7521 strb r1, [r4, #20] +10025396: 74a3 strb r3, [r4, #18] +10025398: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 +1002539c: f104 0017 add.w r0, r4, #23 +100253a0: 789b ldrb r3, [r3, #2] +100253a2: f04f 0901 mov.w r9, #1 +100253a6: f003 0307 and.w r3, r3, #7 +100253aa: 430b orrs r3, r1 +100253ac: 7523 strb r3, [r4, #20] +100253ae: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 +100253b2: f003 03c7 and.w r3, r3, #199 ; 0xc7 +100253b6: 7892 ldrb r2, [r2, #2] +100253b8: f002 0208 and.w r2, r2, #8 +100253bc: 431a orrs r2, r3 +100253be: f508 538c add.w r3, r8, #4480 ; 0x1180 +100253c2: 7522 strb r2, [r4, #20] +100253c4: 331c adds r3, #28 +100253c6: f8d3 3188 ldr.w r3, [r3, #392] ; 0x188 +100253ca: 011b lsls r3, r3, #4 +100253cc: f003 0330 and.w r3, r3, #48 ; 0x30 +100253d0: 431a orrs r2, r3 +100253d2: 7ce3 ldrb r3, [r4, #19] +100253d4: f002 023f and.w r2, r2, #63 ; 0x3f +100253d8: f023 030c bic.w r3, r3, #12 +100253dc: f043 0303 orr.w r3, r3, #3 +100253e0: 7522 strb r2, [r4, #20] +100253e2: 74e3 strb r3, [r4, #19] +100253e4: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 +100253e8: 2208 movs r2, #8 +100253ea: 78db ldrb r3, [r3, #3] +100253ec: 7563 strb r3, [r4, #21] +100253ee: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 +100253f2: 791b ldrb r3, [r3, #4] +100253f4: 75a3 strb r3, [r4, #22] +100253f6: f8d5 10e4 ldr.w r1, [r5, #228] ; 0xe4 +100253fa: 3105 adds r1, #5 +100253fc: f7f5 fbe8 bl 1001abd0 +10025400: 4631 mov r1, r6 +10025402: 2220 movs r2, #32 +10025404: a80c add r0, sp, #48 ; 0x30 +10025406: f7f5 fbe7 bl 1001abd8 +1002540a: a90c add r1, sp, #48 ; 0x30 +1002540c: 2220 movs r2, #32 +1002540e: f104 001f add.w r0, r4, #31 +10025412: f7f5 fbdd bl 1001abd0 +10025416: 4631 mov r1, r6 +10025418: 2210 movs r2, #16 +1002541a: a808 add r0, sp, #32 +1002541c: f7f5 fbdc bl 1001abd8 +10025420: 4658 mov r0, fp +10025422: a908 add r1, sp, #32 +10025424: 2210 movs r2, #16 +10025426: f7f5 fbd3 bl 1001abd0 +1002542a: 4631 mov r1, r6 +1002542c: 2208 movs r2, #8 +1002542e: a804 add r0, sp, #16 +10025430: f7f5 fbd2 bl 1001abd8 +10025434: 4638 mov r0, r7 +10025436: a904 add r1, sp, #16 +10025438: 2208 movs r2, #8 +1002543a: f7f5 fbc9 bl 1001abd0 +1002543e: 4631 mov r1, r6 +10025440: 2208 movs r2, #8 +10025442: a806 add r0, sp, #24 +10025444: f7f5 fbc8 bl 1001abd8 +10025448: f104 0057 add.w r0, r4, #87 ; 0x57 +1002544c: a906 add r1, sp, #24 +1002544e: 2208 movs r2, #8 +10025450: f7f5 fbbe bl 1001abd0 +10025454: f04f 0b5f mov.w fp, #95 ; 0x5f +10025458: f884 606f strb.w r6, [r4, #111] ; 0x6f +1002545c: f884 6070 strb.w r6, [r4, #112] ; 0x70 +10025460: 2771 movs r7, #113 ; 0x71 +10025462: f8c5 6318 str.w r6, [r5, #792] ; 0x318 +10025466: 46b4 mov ip, r6 +10025468: e065 b.n 10025536 +1002546a: f44f 72f7 mov.w r2, #494 ; 0x1ee +1002546e: 9301 str r3, [sp, #4] +10025470: f7f5 fbb2 bl 1001abd8 +10025474: 68aa ldr r2, [r5, #8] +10025476: 9b01 ldr r3, [sp, #4] +10025478: f012 0f02 tst.w r2, #2 +1002547c: bf14 ite ne +1002547e: 2202 movne r2, #2 +10025480: 22fe moveq r2, #254 ; 0xfe +10025482: 74a2 strb r2, [r4, #18] +10025484: f508 528c add.w r2, r8, #4480 ; 0x1180 +10025488: 321c adds r2, #28 +1002548a: f892 20bc ldrb.w r2, [r2, #188] ; 0xbc +1002548e: 2a04 cmp r2, #4 +10025490: d007 beq.n 100254a2 +10025492: 7c2a ldrb r2, [r5, #16] +10025494: 2a04 cmp r2, #4 +10025496: bf14 ite ne +10025498: f04f 0901 movne.w r9, #1 +1002549c: f04f 0902 moveq.w r9, #2 +100254a0: e001 b.n 100254a6 +100254a2: f04f 0902 mov.w r9, #2 +100254a6: 7ce2 ldrb r2, [r4, #19] +100254a8: 2700 movs r7, #0 +100254aa: f042 020f orr.w r2, r2, #15 +100254ae: 7567 strb r7, [r4, #21] +100254b0: 75a7 strb r7, [r4, #22] +100254b2: f884 9014 strb.w r9, [r4, #20] +100254b6: 74e2 strb r2, [r4, #19] +100254b8: 4618 mov r0, r3 +100254ba: f8d5 131c ldr.w r1, [r5, #796] ; 0x31c +100254be: f8d5 2320 ldr.w r2, [r5, #800] ; 0x320 +100254c2: f7fe ffce bl 10024462 +100254c6: f505 7047 add.w r0, r5, #796 ; 0x31c +100254ca: f7fe ffd9 bl 10024480 +100254ce: 4639 mov r1, r7 +100254d0: 2220 movs r2, #32 +100254d2: a80c add r0, sp, #48 ; 0x30 +100254d4: f7f5 fb80 bl 1001abd8 +100254d8: a90c add r1, sp, #48 ; 0x30 +100254da: 2220 movs r2, #32 +100254dc: f104 001f add.w r0, r4, #31 +100254e0: f7f5 fb76 bl 1001abd0 +100254e4: 4639 mov r1, r7 +100254e6: 2210 movs r2, #16 +100254e8: a808 add r0, sp, #32 +100254ea: f7f5 fb75 bl 1001abd8 +100254ee: 4658 mov r0, fp +100254f0: a908 add r1, sp, #32 +100254f2: 2210 movs r2, #16 +100254f4: f7f5 fb6c bl 1001abd0 +100254f8: 4639 mov r1, r7 +100254fa: 2208 movs r2, #8 +100254fc: a804 add r0, sp, #16 +100254fe: f7f5 fb6b bl 1001abd8 +10025502: a904 add r1, sp, #16 +10025504: 2208 movs r2, #8 +10025506: f104 004f add.w r0, r4, #79 ; 0x4f +1002550a: f7f5 fb61 bl 1001abd0 +1002550e: 4639 mov r1, r7 +10025510: 2208 movs r2, #8 +10025512: a806 add r0, sp, #24 +10025514: f7f5 fb60 bl 1001abd8 +10025518: f104 0057 add.w r0, r4, #87 ; 0x57 +1002551c: a906 add r1, sp, #24 +1002551e: 2208 movs r2, #8 +10025520: f7f5 fb56 bl 1001abd0 +10025524: f04f 0b5f mov.w fp, #95 ; 0x5f +10025528: f884 706f strb.w r7, [r4, #111] ; 0x6f +1002552c: f884 7070 strb.w r7, [r4, #112] ; 0x70 +10025530: f04f 0c01 mov.w ip, #1 +10025534: 2771 movs r7, #113 ; 0x71 +10025536: f8c5 70e0 str.w r7, [r5, #224] ; 0xe0 +1002553a: f8c5 b0f0 str.w fp, [r5, #240] ; 0xf0 +1002553e: f50a 7184 add.w r1, sl, #264 ; 0x108 +10025542: 2206 movs r2, #6 +10025544: 4620 mov r0, r4 +10025546: f8cd c004 str.w ip, [sp, #4] +1002554a: f7f5 fb41 bl 1001abd0 +1002554e: f508 51a4 add.w r1, r8, #5248 ; 0x1480 +10025552: 3119 adds r1, #25 +10025554: 2206 movs r2, #6 +10025556: 1da0 adds r0, r4, #6 +10025558: f7f5 fb3a bl 1001abd0 +1002555c: f648 008e movw r0, #34958 ; 0x888e +10025560: f7f1 ff20 bl 100173a4 <_htons> +10025564: 2301 movs r3, #1 +10025566: 73a3 strb r3, [r4, #14] +10025568: 2303 movs r3, #3 +1002556a: 81a0 strh r0, [r4, #12] +1002556c: 73e3 strb r3, [r4, #15] +1002556e: fa1f f08b uxth.w r0, fp +10025572: f7f1 ff17 bl 100173a4 <_htons> +10025576: f8dd c004 ldr.w ip, [sp, #4] +1002557a: 8220 strh r0, [r4, #16] +1002557c: b9a6 cbnz r6, 100255a8 +1002557e: f105 0394 add.w r3, r5, #148 ; 0x94 +10025582: a902 add r1, sp, #8 +10025584: f1bc 0f00 cmp.w ip, #0 +10025588: d004 beq.n 10025594 +1002558a: 9402 str r4, [sp, #8] +1002558c: 9703 str r7, [sp, #12] +1002558e: c903 ldmia r1, {r0, r1} +10025590: 464a mov r2, r9 +10025592: e007 b.n 100255a4 +10025594: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 +10025598: 9402 str r4, [sp, #8] +1002559a: 7892 ldrb r2, [r2, #2] +1002559c: 9703 str r7, [sp, #12] +1002559e: f002 0207 and.w r2, r2, #7 +100255a2: c903 ldmia r1, {r0, r1} +100255a4: f7ff f872 bl 1002468c +100255a8: f44f 7000 mov.w r0, #512 ; 0x200 +100255ac: 214a movs r1, #74 ; 0x4a +100255ae: f011 f94c bl 1003684a +100255b2: 4606 mov r6, r0 +100255b4: b1c0 cbz r0, 100255e8 +100255b6: 463a mov r2, r7 +100255b8: 4621 mov r1, r4 +100255ba: 6900 ldr r0, [r0, #16] +100255bc: f7f5 fb08 bl 1001abd0 +100255c0: 4639 mov r1, r7 +100255c2: 4630 mov r0, r6 +100255c4: f011 f920 bl 10036808 +100255c8: f641 0334 movw r3, #6196 ; 0x1834 +100255cc: f858 1003 ldr.w r1, [r8, r3] +100255d0: 4630 mov r0, r6 +100255d2: 6a8b ldr r3, [r1, #40] ; 0x28 +100255d4: 4798 blx r3 +100255d6: f8d5 3314 ldr.w r3, [r5, #788] ; 0x314 +100255da: b92b cbnz r3, 100255e8 +100255dc: f505 703d add.w r0, r5, #756 ; 0x2f4 +100255e0: f44f 717a mov.w r1, #1000 ; 0x3e8 +100255e4: f011 fc28 bl 10036e38 +100255e8: b015 add sp, #84 ; 0x54 +100255ea: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +100255ee : +100255ee: b573 push {r0, r1, r4, r5, r6, lr} +100255f0: 4605 mov r5, r0 +100255f2: 2800 cmp r0, #0 +100255f4: d03c beq.n 10025670 +100255f6: 6944 ldr r4, [r0, #20] +100255f8: a901 add r1, sp, #4 +100255fa: f104 060c add.w r6, r4, #12 +100255fe: 4630 mov r0, r6 +10025600: f7f1 fff2 bl 100175e8 +10025604: 682b ldr r3, [r5, #0] +10025606: b303 cbz r3, 1002564a +10025608: 6923 ldr r3, [r4, #16] +1002560a: 06d8 lsls r0, r3, #27 +1002560c: d522 bpl.n 10025654 +1002560e: f8d5 30fc ldr.w r3, [r5, #252] ; 0xfc +10025612: f203 138b addw r3, r3, #395 ; 0x18b +10025616: eb04 0383 add.w r3, r4, r3, lsl #2 +1002561a: f8d3 3d08 ldr.w r3, [r3, #3336] ; 0xd08 +1002561e: b1a3 cbz r3, 1002564a +10025620: f8d3 2300 ldr.w r2, [r3, #768] ; 0x300 +10025624: 3201 adds r2, #1 +10025626: 2a05 cmp r2, #5 +10025628: f8c3 2300 str.w r2, [r3, #768] ; 0x300 +1002562c: dd05 ble.n 1002563a +1002562e: 4620 mov r0, r4 +10025630: 4629 mov r1, r5 +10025632: 220f movs r2, #15 +10025634: f7fe ff88 bl 10024548 +10025638: e007 b.n 1002564a +1002563a: 6923 ldr r3, [r4, #16] +1002563c: 06d9 lsls r1, r3, #27 +1002563e: d50f bpl.n 10025660 +10025640: 4620 mov r0, r4 +10025642: 4629 mov r1, r5 +10025644: 2201 movs r2, #1 +10025646: f7ff f9f7 bl 10024a38 +1002564a: 4630 mov r0, r6 +1002564c: a901 add r1, sp, #4 +1002564e: f7f1 ffd5 bl 100175fc +10025652: e00d b.n 10025670 +10025654: 071a lsls r2, r3, #28 +10025656: d5f8 bpl.n 1002564a +10025658: f241 3338 movw r3, #4920 ; 0x1338 +1002565c: 58e3 ldr r3, [r4, r3] +1002565e: e7de b.n 1002561e +10025660: 071b lsls r3, r3, #28 +10025662: d5f2 bpl.n 1002564a +10025664: 4620 mov r0, r4 +10025666: 4629 mov r1, r5 +10025668: 2201 movs r2, #1 +1002566a: f7ff fd4b bl 10025104 +1002566e: e7ec b.n 1002564a +10025670: b002 add sp, #8 +10025672: bd70 pop {r4, r5, r6, pc} + +10025674 : +10025674: f8d1 30fc ldr.w r3, [r1, #252] ; 0xfc +10025678: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1002567c: f203 138b addw r3, r3, #395 ; 0x18b +10025680: eb00 0383 add.w r3, r0, r3, lsl #2 +10025684: f8d3 4d08 ldr.w r4, [r3, #3336] ; 0xd08 +10025688: b086 sub sp, #24 +1002568a: f8d4 30d4 ldr.w r3, [r4, #212] ; 0xd4 +1002568e: 4605 mov r5, r0 +10025690: 7bda ldrb r2, [r3, #15] +10025692: 460e mov r6, r1 +10025694: 2a03 cmp r2, #3 +10025696: f040 80a8 bne.w 100257ea +1002569a: f103 0212 add.w r2, r3, #18 +1002569e: f8c4 20e4 str.w r2, [r4, #228] ; 0xe4 +100256a2: 7cda ldrb r2, [r3, #19] +100256a4: f002 0105 and.w r1, r2, #5 +100256a8: 2905 cmp r1, #5 +100256aa: d102 bne.n 100256b2 +100256ac: 0711 lsls r1, r2, #28 +100256ae: f100 809c bmi.w 100257ea +100256b2: 7d1b ldrb r3, [r3, #20] +100256b4: 071a lsls r2, r3, #28 +100256b6: f140 8098 bpl.w 100257ea +100256ba: 6823 ldr r3, [r4, #0] +100256bc: 2b01 cmp r3, #1 +100256be: d002 beq.n 100256c6 +100256c0: 2b02 cmp r3, #2 +100256c2: d04b beq.n 1002575c +100256c4: e091 b.n 100257ea +100256c6: 4b4a ldr r3, [pc, #296] ; (100257f0 ) +100256c8: 681b ldr r3, [r3, #0] +100256ca: b13b cbz r3, 100256dc +100256cc: 4849 ldr r0, [pc, #292] ; (100257f4 ) +100256ce: f7f5 fa57 bl 1001ab80 +100256d2: 4b49 ldr r3, [pc, #292] ; (100257f8 ) +100256d4: f8d3 01a0 ldr.w r0, [r3, #416] ; 0x1a0 +100256d8: f7f5 fa52 bl 1001ab80 +100256dc: f8d4 00e4 ldr.w r0, [r4, #228] ; 0xe4 +100256e0: a904 add r1, sp, #16 +100256e2: f7fe fe8e bl 10024402 +100256e6: a804 add r0, sp, #16 +100256e8: f7fe feca bl 10024480 +100256ec: 6962 ldr r2, [r4, #20] +100256ee: 9b04 ldr r3, [sp, #16] +100256f0: 429a cmp r2, r3 +100256f2: d17a bne.n 100257ea +100256f4: 69a2 ldr r2, [r4, #24] +100256f6: 9b05 ldr r3, [sp, #20] +100256f8: 429a cmp r2, r3 +100256fa: d176 bne.n 100257ea +100256fc: f504 703d add.w r0, r4, #756 ; 0x2f4 +10025700: f011 fb9c bl 10036e3c +10025704: f8d4 10e4 ldr.w r1, [r4, #228] ; 0xe4 +10025708: 6ae0 ldr r0, [r4, #44] ; 0x2c +1002570a: 310d adds r1, #13 +1002570c: 2220 movs r2, #32 +1002570e: f7f1 fe8f bl 10017430 +10025712: f104 0374 add.w r3, r4, #116 ; 0x74 +10025716: f8d4 00d4 ldr.w r0, [r4, #212] ; 0xd4 +1002571a: 9300 str r3, [sp, #0] +1002571c: 2320 movs r3, #32 +1002571e: 9301 str r3, [sp, #4] +10025720: f104 0794 add.w r7, r4, #148 ; 0x94 +10025724: 2340 movs r3, #64 ; 0x40 +10025726: 9702 str r7, [sp, #8] +10025728: 9303 str r3, [sp, #12] +1002572a: 1d81 adds r1, r0, #6 +1002572c: 6a62 ldr r2, [r4, #36] ; 0x24 +1002572e: 6ae3 ldr r3, [r4, #44] ; 0x2c +10025730: f019 f906 bl 1003e940 <__rom_psk_CalcPTK_veneer> +10025734: f104 03d4 add.w r3, r4, #212 ; 0xd4 +10025738: 463a mov r2, r7 +1002573a: e893 0003 ldmia.w r3, {r0, r1} +1002573e: f7fe ff65 bl 1002460c +10025742: 4607 mov r7, r0 +10025744: 2800 cmp r0, #0 +10025746: d034 beq.n 100257b2 +10025748: 2200 movs r2, #0 +1002574a: 2302 movs r3, #2 +1002574c: f8c4 2300 str.w r2, [r4, #768] ; 0x300 +10025750: 6023 str r3, [r4, #0] +10025752: 4628 mov r0, r5 +10025754: 4631 mov r1, r6 +10025756: f7ff f96f bl 10024a38 +1002575a: e046 b.n 100257ea +1002575c: 4b24 ldr r3, [pc, #144] ; (100257f0 ) +1002575e: 681b ldr r3, [r3, #0] +10025760: b13b cbz r3, 10025772 +10025762: 4824 ldr r0, [pc, #144] ; (100257f4 ) +10025764: f7f5 fa0c bl 1001ab80 +10025768: 4b23 ldr r3, [pc, #140] ; (100257f8 ) +1002576a: f8d3 01a4 ldr.w r0, [r3, #420] ; 0x1a4 +1002576e: f7f5 fa07 bl 1001ab80 +10025772: f8d4 00e4 ldr.w r0, [r4, #228] ; 0xe4 +10025776: a904 add r1, sp, #16 +10025778: f8d4 801c ldr.w r8, [r4, #28] +1002577c: 6a27 ldr r7, [r4, #32] +1002577e: f7fe fe40 bl 10024402 +10025782: 9b04 ldr r3, [sp, #16] +10025784: 4598 cmp r8, r3 +10025786: d106 bne.n 10025796 +10025788: 9b05 ldr r3, [sp, #20] +1002578a: 1afb subs r3, r7, r3 +1002578c: 425f negs r7, r3 +1002578e: 415f adcs r7, r3 +10025790: 2f00 cmp r7, #0 +10025792: d1b3 bne.n 100256fc +10025794: e000 b.n 10025798 +10025796: 2700 movs r7, #0 +10025798: f504 703d add.w r0, r4, #756 ; 0x2f4 +1002579c: f011 fb4e bl 10036e3c +100257a0: f104 03d4 add.w r3, r4, #212 ; 0xd4 +100257a4: e893 0003 ldmia.w r3, {r0, r1} +100257a8: f104 0294 add.w r2, r4, #148 ; 0x94 +100257ac: f7fe ff2e bl 1002460c +100257b0: b930 cbnz r0, 100257c0 +100257b2: 4628 mov r0, r5 +100257b4: 4631 mov r1, r6 +100257b6: 220e movs r2, #14 +100257b8: f7fe fec6 bl 10024548 +100257bc: 6027 str r7, [r4, #0] +100257be: e014 b.n 100257ea +100257c0: 4631 mov r1, r6 +100257c2: 4628 mov r0, r5 +100257c4: f7fe fdc8 bl 10024358 +100257c8: f8c6 7110 str.w r7, [r6, #272] ; 0x110 +100257cc: 2303 movs r3, #3 +100257ce: 2601 movs r6, #1 +100257d0: e884 0048 stmia.w r4, {r3, r6} +100257d4: f505 548c add.w r4, r5, #4480 ; 0x1180 +100257d8: 6c23 ldr r3, [r4, #64] ; 0x40 +100257da: 341c adds r4, #28 +100257dc: b92b cbnz r3, 100257ea +100257de: 6b23 ldr r3, [r4, #48] ; 0x30 +100257e0: b91b cbnz r3, 100257ea +100257e2: 4628 mov r0, r5 +100257e4: f7ff f83a bl 1002485c +100257e8: 6326 str r6, [r4, #48] ; 0x30 +100257ea: b006 add sp, #24 +100257ec: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100257f0: 10044f38 .word 0x10044f38 +100257f4: 100429b1 .word 0x100429b1 +100257f8: 10043ac4 .word 0x10043ac4 + +100257fc : +100257fc: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10025800: f100 090c add.w r9, r0, #12 +10025804: b0cc sub sp, #304 ; 0x130 +10025806: 4688 mov r8, r1 +10025808: 4605 mov r5, r0 +1002580a: a907 add r1, sp, #28 +1002580c: 4648 mov r0, r9 +1002580e: f7f1 feeb bl 100175e8 +10025812: f8d8 3000 ldr.w r3, [r8] +10025816: 2b00 cmp r3, #0 +10025818: f000 81ec beq.w 10025bf4 +1002581c: f241 3338 movw r3, #4920 ; 0x1338 +10025820: 58ec ldr r4, [r5, r3] +10025822: f8d4 30d4 ldr.w r3, [r4, #212] ; 0xd4 +10025826: 7bda ldrb r2, [r3, #15] +10025828: 2a03 cmp r2, #3 +1002582a: f040 81e3 bne.w 10025bf4 +1002582e: f103 0212 add.w r2, r3, #18 +10025832: f8c4 20e4 str.w r2, [r4, #228] ; 0xe4 +10025836: 7d1a ldrb r2, [r3, #20] +10025838: f002 0208 and.w r2, r2, #8 +1002583c: f002 07ff and.w r7, r2, #255 ; 0xff +10025840: 2a00 cmp r2, #0 +10025842: f000 8149 beq.w 10025ad8 +10025846: 7cdb ldrb r3, [r3, #19] +10025848: 07db lsls r3, r3, #31 +1002584a: d463 bmi.n 10025914 +1002584c: f504 7641 add.w r6, r4, #772 ; 0x304 +10025850: 4630 mov r0, r6 +10025852: f011 faf3 bl 10036e3c +10025856: 4630 mov r0, r6 +10025858: f011 faf5 bl 10036e46 +1002585c: f8d4 3314 ldr.w r3, [r4, #788] ; 0x314 +10025860: b913 cbnz r3, 10025868 +10025862: f8d4 3310 ldr.w r3, [r4, #784] ; 0x310 +10025866: b15b cbz r3, 10025880 +10025868: f04f 33ff mov.w r3, #4294967295 +1002586c: 2200 movs r2, #0 +1002586e: 6163 str r3, [r4, #20] +10025870: 61a3 str r3, [r4, #24] +10025872: f505 538c add.w r3, r5, #4480 ; 0x1180 +10025876: f8c4 2310 str.w r2, [r4, #784] ; 0x310 +1002587a: f8c4 2314 str.w r2, [r4, #788] ; 0x314 +1002587e: 64da str r2, [r3, #76] ; 0x4c +10025880: 6963 ldr r3, [r4, #20] +10025882: 3301 adds r3, #1 +10025884: d13a bne.n 100258fc +10025886: 69a3 ldr r3, [r4, #24] +10025888: 3301 adds r3, #1 +1002588a: d137 bne.n 100258fc +1002588c: f8d5 3d0c ldr.w r3, [r5, #3340] ; 0xd0c +10025890: f605 5708 addw r7, r5, #3336 ; 0xd08 +10025894: f207 4a94 addw sl, r7, #1172 ; 0x494 +10025898: 7423 strb r3, [r4, #16] +1002589a: 4650 mov r0, sl +1002589c: 466e mov r6, sp +1002589e: f207 479c addw r7, r7, #1180 ; 0x49c +100258a2: f7fe fe21 bl 100244e8 +100258a6: cf0f ldmia r7!, {r0, r1, r2, r3} +100258a8: c60f stmia r6!, {r0, r1, r2, r3} +100258aa: e897 0003 ldmia.w r7, {r0, r1} +100258ae: e886 0003 stmia.w r6, {r0, r1} +100258b2: f104 012c add.w r1, r4, #44 ; 0x2c +100258b6: e89a 000c ldmia.w sl, {r2, r3} +100258ba: c903 ldmia r1, {r0, r1} +100258bc: f7fe fcc0 bl 10024240 +100258c0: f8d4 10e4 ldr.w r1, [r4, #228] ; 0xe4 +100258c4: 6a60 ldr r0, [r4, #36] ; 0x24 +100258c6: 310d adds r1, #13 +100258c8: 2220 movs r2, #32 +100258ca: f7f1 fdb1 bl 10017430 +100258ce: f104 0374 add.w r3, r4, #116 ; 0x74 +100258d2: f8d4 00d4 ldr.w r0, [r4, #212] ; 0xd4 +100258d6: 9300 str r3, [sp, #0] +100258d8: 2320 movs r3, #32 +100258da: 9301 str r3, [sp, #4] +100258dc: f104 0394 add.w r3, r4, #148 ; 0x94 +100258e0: 9302 str r3, [sp, #8] +100258e2: 2340 movs r3, #64 ; 0x40 +100258e4: 9303 str r3, [sp, #12] +100258e6: 1d81 adds r1, r0, #6 +100258e8: 6a62 ldr r2, [r4, #36] ; 0x24 +100258ea: 6ae3 ldr r3, [r4, #44] ; 0x2c +100258ec: f019 f828 bl 1003e940 <__rom_psk_CalcPTK_veneer> +100258f0: 4628 mov r0, r5 +100258f2: 4641 mov r1, r8 +100258f4: 2200 movs r2, #0 +100258f6: f7ff fc05 bl 10025104 +100258fa: e17b b.n 10025bf4 +100258fc: f104 0314 add.w r3, r4, #20 +10025900: e893 0003 ldmia.w r3, {r0, r1} +10025904: f8d4 20e4 ldr.w r2, [r4, #228] ; 0xe4 +10025908: f7fe fd92 bl 10024430 +1002590c: 2800 cmp r0, #0 +1002590e: f040 8171 bne.w 10025bf4 +10025912: e7bb b.n 1002588c +10025914: 2300 movs r3, #0 +10025916: f8c4 3300 str.w r3, [r4, #768] ; 0x300 +1002591a: f8d4 3310 ldr.w r3, [r4, #784] ; 0x310 +1002591e: 2b00 cmp r3, #0 +10025920: f000 8168 beq.w 10025bf4 +10025924: f504 703d add.w r0, r4, #756 ; 0x2f4 +10025928: f011 fa88 bl 10036e3c +1002592c: f8d4 00e4 ldr.w r0, [r4, #228] ; 0xe4 +10025930: a90a add r1, sp, #40 ; 0x28 +10025932: f7fe fd66 bl 10024402 +10025936: 6963 ldr r3, [r4, #20] +10025938: 3301 adds r3, #1 +1002593a: d10e bne.n 1002595a +1002593c: 69a3 ldr r3, [r4, #24] +1002593e: 3301 adds r3, #1 +10025940: d10b bne.n 1002595a +10025942: f8d4 00e4 ldr.w r0, [r4, #228] ; 0xe4 +10025946: 6a61 ldr r1, [r4, #36] ; 0x24 +10025948: 300d adds r0, #13 +1002594a: 2220 movs r2, #32 +1002594c: f7f5 f93c bl 1001abc8 +10025950: 4606 mov r6, r0 +10025952: 2800 cmp r0, #0 +10025954: f040 814e bne.w 10025bf4 +10025958: e00a b.n 10025970 +1002595a: f104 0314 add.w r3, r4, #20 +1002595e: e893 0003 ldmia.w r3, {r0, r1} +10025962: f8d4 20e4 ldr.w r2, [r4, #228] ; 0xe4 +10025966: f7fe fd63 bl 10024430 +1002596a: 2800 cmp r0, #0 +1002596c: d0e9 beq.n 10025942 +1002596e: e141 b.n 10025bf4 +10025970: f104 03d4 add.w r3, r4, #212 ; 0xd4 +10025974: e893 0003 ldmia.w r3, {r0, r1} +10025978: f104 0294 add.w r2, r4, #148 ; 0x94 +1002597c: f7fe fe46 bl 1002460c +10025980: 2800 cmp r0, #0 +10025982: f000 8137 beq.w 10025bf4 +10025986: 9b0a ldr r3, [sp, #40] ; 0x28 +10025988: f8d4 10e4 ldr.w r1, [r4, #228] ; 0xe4 +1002598c: 6163 str r3, [r4, #20] +1002598e: 9b0b ldr r3, [sp, #44] ; 0x2c +10025990: 61a3 str r3, [r4, #24] +10025992: 780b ldrb r3, [r1, #0] +10025994: 2b02 cmp r3, #2 +10025996: d159 bne.n 10025a4c +10025998: 4b9a ldr r3, [pc, #616] ; (10025c04 ) +1002599a: af0c add r7, sp, #48 ; 0x30 +1002599c: f853 0b04 ldr.w r0, [r3], #4 +100259a0: 315f adds r1, #95 ; 0x5f +100259a2: 9008 str r0, [sp, #32] +100259a4: 6818 ldr r0, [r3, #0] +100259a6: 9009 str r0, [sp, #36] ; 0x24 +100259a8: f811 3c01 ldrb.w r3, [r1, #-1] +100259ac: f811 2c02 ldrb.w r2, [r1, #-2] +100259b0: 4620 mov r0, r4 +100259b2: eb03 2202 add.w r2, r3, r2, lsl #8 +100259b6: 2310 movs r3, #16 +100259b8: 9300 str r3, [sp, #0] +100259ba: 9701 str r7, [sp, #4] +100259bc: b292 uxth r2, r2 +100259be: f104 03a4 add.w r3, r4, #164 ; 0xa4 +100259c2: f7fe fe93 bl 100246ec +100259c6: 2800 cmp r0, #0 +100259c8: f000 8114 beq.w 10025bf4 +100259cc: 783b ldrb r3, [r7, #0] +100259ce: 2b30 cmp r3, #48 ; 0x30 +100259d0: d157 bne.n 10025a82 +100259d2: 787e ldrb r6, [r7, #1] +100259d4: 3602 adds r6, #2 +100259d6: 5dbb ldrb r3, [r7, r6] +100259d8: 2b30 cmp r3, #48 ; 0x30 +100259da: f000 810b beq.w 10025bf4 +100259de: 2bdd cmp r3, #221 ; 0xdd +100259e0: d001 beq.n 100259e6 +100259e2: 2600 movs r6, #0 +100259e4: e026 b.n 10025a34 +100259e6: 443e add r6, r7 +100259e8: 1cb0 adds r0, r6, #2 +100259ea: a909 add r1, sp, #36 ; 0x24 +100259ec: 2204 movs r2, #4 +100259ee: f7f5 f8eb bl 1001abc8 +100259f2: b910 cbnz r0, 100259fa +100259f4: 7873 ldrb r3, [r6, #1] +100259f6: 3302 adds r3, #2 +100259f8: 441e add r6, r3 +100259fa: 1cb0 adds r0, r6, #2 +100259fc: a908 add r1, sp, #32 +100259fe: 2204 movs r2, #4 +10025a00: f7f5 f8e2 bl 1001abc8 +10025a04: 2800 cmp r0, #0 +10025a06: d1ec bne.n 100259e2 +10025a08: 79b0 ldrb r0, [r6, #6] +10025a0a: 7872 ldrb r2, [r6, #1] +10025a0c: f505 5a8c add.w sl, r5, #4480 ; 0x1180 +10025a10: f000 0003 and.w r0, r0, #3 +10025a14: f8ca 01a4 str.w r0, [sl, #420] ; 0x1a4 +10025a18: f10a 0a1c add.w sl, sl, #28 +10025a1c: 3a06 subs r2, #6 +10025a1e: eb0a 1040 add.w r0, sl, r0, lsl #5 +10025a22: f106 0108 add.w r1, r6, #8 +10025a26: 30e8 adds r0, #232 ; 0xe8 +10025a28: b2d2 uxtb r2, r2 +10025a2a: 2601 movs r6, #1 +10025a2c: f7f5 f8d0 bl 1001abd0 +10025a30: f8ca 6030 str.w r6, [sl, #48] ; 0x30 +10025a34: 79fb ldrb r3, [r7, #7] +10025a36: 2b02 cmp r3, #2 +10025a38: d001 beq.n 10025a3e +10025a3a: 2b04 cmp r3, #4 +10025a3c: d121 bne.n 10025a82 +10025a3e: f505 528c add.w r2, r5, #4480 ; 0x1180 +10025a42: f882 30d8 strb.w r3, [r2, #216] ; 0xd8 +10025a46: f8c5 3d64 str.w r3, [r5, #3428] ; 0xd64 +10025a4a: e01a b.n 10025a82 +10025a4c: 2bfe cmp r3, #254 ; 0xfe +10025a4e: d118 bne.n 10025a82 +10025a50: 4631 mov r1, r6 +10025a52: 22ff movs r2, #255 ; 0xff +10025a54: a80c add r0, sp, #48 ; 0x30 +10025a56: f7f5 f8bf bl 1001abd8 +10025a5a: f8d4 10e4 ldr.w r1, [r4, #228] ; 0xe4 +10025a5e: a80c add r0, sp, #48 ; 0x30 +10025a60: 315f adds r1, #95 ; 0x5f +10025a62: 22ff movs r2, #255 ; 0xff +10025a64: f7f5 f8b4 bl 1001abd0 +10025a68: f89d 303b ldrb.w r3, [sp, #59] ; 0x3b +10025a6c: 2b02 cmp r3, #2 +10025a6e: d001 beq.n 10025a74 +10025a70: 2b04 cmp r3, #4 +10025a72: d105 bne.n 10025a80 +10025a74: f505 528c add.w r2, r5, #4480 ; 0x1180 +10025a78: f882 30d8 strb.w r3, [r2, #216] ; 0xd8 +10025a7c: f8c5 3d64 str.w r3, [r5, #3428] ; 0xd64 +10025a80: 2600 movs r6, #0 +10025a82: 4628 mov r0, r5 +10025a84: 4641 mov r1, r8 +10025a86: 2200 movs r2, #0 +10025a88: f7ff fb3c bl 10025104 +10025a8c: 4628 mov r0, r5 +10025a8e: 4641 mov r1, r8 +10025a90: f7fe fc62 bl 10024358 +10025a94: 2300 movs r3, #0 +10025a96: f8c8 3110 str.w r3, [r8, #272] ; 0x110 +10025a9a: b146 cbz r6, 10025aae +10025a9c: f895 28f9 ldrb.w r2, [r5, #2297] ; 0x8f9 +10025aa0: b10a cbz r2, 10025aa6 +10025aa2: f885 386e strb.w r3, [r5, #2158] ; 0x86e +10025aa6: 4628 mov r0, r5 +10025aa8: f7fe fed8 bl 1002485c +10025aac: e09e b.n 10025bec +10025aae: f504 7441 add.w r4, r4, #772 ; 0x304 +10025ab2: 4620 mov r0, r4 +10025ab4: f011 f9c7 bl 10036e46 +10025ab8: 4b53 ldr r3, [pc, #332] ; (10025c08 ) +10025aba: 4620 mov r0, r4 +10025abc: 9300 str r3, [sp, #0] +10025abe: f641 0334 movw r3, #6196 ; 0x1834 +10025ac2: 58e9 ldr r1, [r5, r3] +10025ac4: 4a51 ldr r2, [pc, #324] ; (10025c0c ) +10025ac6: 462b mov r3, r5 +10025ac8: f011 f9b2 bl 10036e30 +10025acc: 4620 mov r0, r4 +10025ace: f241 3188 movw r1, #5000 ; 0x1388 +10025ad2: f011 f9b1 bl 10036e38 +10025ad6: e08d b.n 10025bf4 +10025ad8: 4b4a ldr r3, [pc, #296] ; (10025c04 ) +10025ada: f504 7641 add.w r6, r4, #772 ; 0x304 +10025ade: 6818 ldr r0, [r3, #0] +10025ae0: 9009 str r0, [sp, #36] ; 0x24 +10025ae2: 4630 mov r0, r6 +10025ae4: f011 f9aa bl 10036e3c +10025ae8: 4630 mov r0, r6 +10025aea: f011 f9ac bl 10036e46 +10025aee: f8d4 00e4 ldr.w r0, [r4, #228] ; 0xe4 +10025af2: a90a add r1, sp, #40 ; 0x28 +10025af4: f8c4 7300 str.w r7, [r4, #768] ; 0x300 +10025af8: f7fe fc83 bl 10024402 +10025afc: f104 0314 add.w r3, r4, #20 +10025b00: e893 0003 ldmia.w r3, {r0, r1} +10025b04: f8d4 20e4 ldr.w r2, [r4, #228] ; 0xe4 +10025b08: f7fe fc92 bl 10024430 +10025b0c: 2800 cmp r0, #0 +10025b0e: d171 bne.n 10025bf4 +10025b10: f104 07d4 add.w r7, r4, #212 ; 0xd4 +10025b14: e897 0003 ldmia.w r7, {r0, r1} +10025b18: f104 0294 add.w r2, r4, #148 ; 0x94 +10025b1c: f7fe fd76 bl 1002460c +10025b20: 2800 cmp r0, #0 +10025b22: d067 beq.n 10025bf4 +10025b24: f505 568c add.w r6, r5, #4480 ; 0x1180 +10025b28: 361c adds r6, #28 +10025b2a: f896 30bc ldrb.w r3, [r6, #188] ; 0xbc +10025b2e: f104 02a4 add.w r2, r4, #164 ; 0xa4 +10025b32: 2b02 cmp r3, #2 +10025b34: bf14 ite ne +10025b36: 2310 movne r3, #16 +10025b38: 2320 moveq r3, #32 +10025b3a: 9300 str r3, [sp, #0] +10025b3c: f8d4 30e4 ldr.w r3, [r4, #228] ; 0xe4 +10025b40: 789b ldrb r3, [r3, #2] +10025b42: f3c3 1301 ubfx r3, r3, #4, #2 +10025b46: eb06 1343 add.w r3, r6, r3, lsl #5 +10025b4a: 33e8 adds r3, #232 ; 0xe8 +10025b4c: 9301 str r3, [sp, #4] +10025b4e: e897 0003 ldmia.w r7, {r0, r1} +10025b52: 2310 movs r3, #16 +10025b54: f7fe fe24 bl 100247a0 +10025b58: 2800 cmp r0, #0 +10025b5a: d04b beq.n 10025bf4 +10025b5c: f8d4 30e4 ldr.w r3, [r4, #228] ; 0xe4 +10025b60: 781a ldrb r2, [r3, #0] +10025b62: 7899 ldrb r1, [r3, #2] +10025b64: 2a02 cmp r2, #2 +10025b66: f3c1 1101 ubfx r1, r1, #4, #2 +10025b6a: d127 bne.n 10025bbc +10025b6c: f893 205d ldrb.w r2, [r3, #93] ; 0x5d +10025b70: f893 305e ldrb.w r3, [r3, #94] ; 0x5e +10025b74: eb06 1141 add.w r1, r6, r1, lsl #5 +10025b78: eb03 2202 add.w r2, r3, r2, lsl #8 +10025b7c: a80c add r0, sp, #48 ; 0x30 +10025b7e: 31e8 adds r1, #232 ; 0xe8 +10025b80: f7f5 f826 bl 1001abd0 +10025b84: f89d 3030 ldrb.w r3, [sp, #48] ; 0x30 +10025b88: 2bdd cmp r3, #221 ; 0xdd +10025b8a: d119 bne.n 10025bc0 +10025b8c: f10d 0032 add.w r0, sp, #50 ; 0x32 +10025b90: a909 add r1, sp, #36 ; 0x24 +10025b92: 2204 movs r2, #4 +10025b94: f7f5 f818 bl 1001abc8 +10025b98: b990 cbnz r0, 10025bc0 +10025b9a: f89d 0036 ldrb.w r0, [sp, #54] ; 0x36 +10025b9e: f89d 2031 ldrb.w r2, [sp, #49] ; 0x31 +10025ba2: f000 0003 and.w r0, r0, #3 +10025ba6: f8c6 0188 str.w r0, [r6, #392] ; 0x188 +10025baa: 3a06 subs r2, #6 +10025bac: eb06 1040 add.w r0, r6, r0, lsl #5 +10025bb0: a90e add r1, sp, #56 ; 0x38 +10025bb2: b2d2 uxtb r2, r2 +10025bb4: 30e8 adds r0, #232 ; 0xe8 +10025bb6: f7f5 f80b bl 1001abd0 +10025bba: e001 b.n 10025bc0 +10025bbc: f8c6 1188 str.w r1, [r6, #392] ; 0x188 +10025bc0: 9b0a ldr r3, [sp, #40] ; 0x28 +10025bc2: 4628 mov r0, r5 +10025bc4: 6163 str r3, [r4, #20] +10025bc6: 9b0b ldr r3, [sp, #44] ; 0x2c +10025bc8: 61a3 str r3, [r4, #24] +10025bca: 2301 movs r3, #1 +10025bcc: f8c4 3318 str.w r3, [r4, #792] ; 0x318 +10025bd0: 6333 str r3, [r6, #48] ; 0x30 +10025bd2: f7fe fe43 bl 1002485c +10025bd6: 4628 mov r0, r5 +10025bd8: 4641 mov r1, r8 +10025bda: 2200 movs r2, #0 +10025bdc: f7ff fa92 bl 10025104 +10025be0: f895 38f9 ldrb.w r3, [r5, #2297] ; 0x8f9 +10025be4: b113 cbz r3, 10025bec +10025be6: 2300 movs r3, #0 +10025be8: f885 386e strb.w r3, [r5, #2158] ; 0x86e +10025bec: 4628 mov r0, r5 +10025bee: 4908 ldr r1, [pc, #32] ; (10025c10 ) +10025bf0: f00d ffb3 bl 10033b5a +10025bf4: 4648 mov r0, r9 +10025bf6: a907 add r1, sp, #28 +10025bf8: f7f1 fd00 bl 100175fc +10025bfc: b04c add sp, #304 ; 0x130 +10025bfe: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10025c02: bf00 nop +10025c04: 10041677 .word 0x10041677 +10025c08: 1004168b .word 0x1004168b +10025c0c: 100242e1 .word 0x100242e1 +10025c10: 1003fc45 .word 0x1003fc45 + +10025c14 : +10025c14: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} +10025c18: f641 0369 movw r3, #6249 ; 0x1869 +10025c1c: 5cc4 ldrb r4, [r0, r3] +10025c1e: 460d mov r5, r1 +10025c20: 3400 adds r4, #0 +10025c22: 7809 ldrb r1, [r1, #0] +10025c24: bf18 it ne +10025c26: 2401 movne r4, #1 +10025c28: 4616 mov r6, r2 +10025c2a: 4824 ldr r0, [pc, #144] ; (10025cbc ) +10025c2c: ea4f 1884 mov.w r8, r4, lsl #6 +10025c30: b939 cbnz r1, 10025c42 +10025c32: 4444 add r4, r8 +10025c34: 4420 add r0, r4 +10025c36: 2241 movs r2, #65 ; 0x41 +10025c38: b002 add sp, #8 +10025c3a: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10025c3e: f7f4 bfcb b.w 1001abd8 +10025c42: 44a0 add r8, r4 +10025c44: 4480 add r8, r0 +10025c46: 4641 mov r1, r8 +10025c48: 4628 mov r0, r5 +10025c4a: f7f4 ffcd bl 1001abe8 +10025c4e: 4f1c ldr r7, [pc, #112] ; (10025cc0 ) +10025c50: b1e8 cbz r0, 10025c8e +10025c52: 4628 mov r0, r5 +10025c54: f7f4 ffd0 bl 1001abf8 +10025c58: 4682 mov sl, r0 +10025c5a: 4630 mov r0, r6 +10025c5c: f7f4 ffcc bl 1001abf8 +10025c60: 4629 mov r1, r5 +10025c62: 4681 mov r9, r0 +10025c64: 4640 mov r0, r8 +10025c66: f7f4 ffc3 bl 1001abf0 +10025c6a: 2024 movs r0, #36 ; 0x24 +10025c6c: fb00 7004 mla r0, r0, r4, r7 +10025c70: 4631 mov r1, r6 +10025c72: f7f4 ffbd bl 1001abf0 +10025c76: 4b13 ldr r3, [pc, #76] ; (10025cc4 ) +10025c78: 2228 movs r2, #40 ; 0x28 +10025c7a: fb02 3404 mla r4, r2, r4, r3 +10025c7e: 2100 movs r1, #0 +10025c80: 4620 mov r0, r4 +10025c82: f7f4 ffa9 bl 1001abd8 +10025c86: f1ba 0f3f cmp.w sl, #63 ; 0x3f +10025c8a: dd09 ble.n 10025ca0 +10025c8c: e012 b.n 10025cb4 +10025c8e: 2124 movs r1, #36 ; 0x24 +10025c90: 4630 mov r0, r6 +10025c92: fb01 7104 mla r1, r1, r4, r7 +10025c96: f7f4 ffa7 bl 1001abe8 +10025c9a: 2800 cmp r0, #0 +10025c9c: d1d9 bne.n 10025c52 +10025c9e: e009 b.n 10025cb4 +10025ca0: f1b9 0f20 cmp.w r9, #32 +10025ca4: dc06 bgt.n 10025cb4 +10025ca6: 9400 str r4, [sp, #0] +10025ca8: 4628 mov r0, r5 +10025caa: 4651 mov r1, sl +10025cac: 4632 mov r2, r6 +10025cae: 464b mov r3, r9 +10025cb0: f018 fe5e bl 1003e970 <__rom_psk_PasswordHash_veneer> +10025cb4: b002 add sp, #8 +10025cb6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10025cba: bf00 nop +10025cbc: 1004bc00 .word 0x1004bc00 +10025cc0: 1004bbb8 .word 0x1004bbb8 +10025cc4: 1004bcc3 .word 0x1004bcc3 + +10025cc8 : +10025cc8: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +10025ccc: f500 568c add.w r6, r0, #4480 ; 0x1180 +10025cd0: 361c adds r6, #28 +10025cd2: b093 sub sp, #76 ; 0x4c +10025cd4: 4605 mov r5, r0 +10025cd6: 4688 mov r8, r1 +10025cd8: 4617 mov r7, r2 +10025cda: 2100 movs r1, #0 +10025cdc: f44f 72ca mov.w r2, #404 ; 0x194 +10025ce0: 4630 mov r0, r6 +10025ce2: f7f4 ff79 bl 1001abd8 +10025ce6: f241 3330 movw r3, #4912 ; 0x1330 +10025cea: 58e8 ldr r0, [r5, r3] +10025cec: f241 3334 movw r3, #4916 ; 0x1334 +10025cf0: 58ea ldr r2, [r5, r3] +10025cf2: 2100 movs r1, #0 +10025cf4: f10d 090c add.w r9, sp, #12 +10025cf8: f7f4 ff6e bl 1001abd8 +10025cfc: ac0a add r4, sp, #40 ; 0x28 +10025cfe: 2108 movs r1, #8 +10025d00: 4648 mov r0, r9 +10025d02: f7f1 fd11 bl 10017728 +10025d06: 4620 mov r0, r4 +10025d08: 4649 mov r1, r9 +10025d0a: 2208 movs r2, #8 +10025d0c: f7f1 fb90 bl 10017430 +10025d10: 2300 movs r3, #0 +10025d12: f819 1003 ldrb.w r1, [r9, r3] +10025d16: 18e2 adds r2, r4, r3 +10025d18: 43c9 mvns r1, r1 +10025d1a: 7211 strb r1, [r2, #8] +10025d1c: ebc3 0109 rsb r1, r3, r9 +10025d20: 79c9 ldrb r1, [r1, #7] +10025d22: 3301 adds r3, #1 +10025d24: 7411 strb r1, [r2, #16] +10025d26: 2b08 cmp r3, #8 +10025d28: ea6f 0101 mvn.w r1, r1 +10025d2c: 7611 strb r1, [r2, #24] +10025d2e: d1f0 bne.n 10025d12 +10025d30: f10d 0914 add.w r9, sp, #20 +10025d34: 2310 movs r3, #16 +10025d36: f8cd 9000 str.w r9, [sp] +10025d3a: 4620 mov r0, r4 +10025d3c: 2120 movs r1, #32 +10025d3e: aa0c add r2, sp, #48 ; 0x30 +10025d40: f018 fe22 bl 1003e988 <__rt_hmac_sha1_veneer> +10025d44: 2300 movs r3, #0 +10025d46: f819 2003 ldrb.w r2, [r9, r3] +10025d4a: ebc3 0109 rsb r1, r3, r9 +10025d4e: 54e2 strb r2, [r4, r3] +10025d50: 7cc9 ldrb r1, [r1, #19] +10025d52: 18e2 adds r2, r4, r3 +10025d54: 3301 adds r3, #1 +10025d56: 2b10 cmp r3, #16 +10025d58: 7411 strb r1, [r2, #16] +10025d5a: d1f4 bne.n 10025d46 +10025d5c: 4621 mov r1, r4 +10025d5e: 4630 mov r0, r6 +10025d60: 2220 movs r2, #32 +10025d62: f7f1 fb65 bl 10017430 +10025d66: 692b ldr r3, [r5, #16] +10025d68: f505 548c add.w r4, r5, #4480 ; 0x1180 +10025d6c: f013 0f10 tst.w r3, #16 +10025d70: f104 041c add.w r4, r4, #28 +10025d74: d10b bne.n 10025d8e +10025d76: f104 053c add.w r5, r4, #60 ; 0x3c +10025d7a: 4628 mov r0, r5 +10025d7c: 4641 mov r1, r8 +10025d7e: 463a mov r2, r7 +10025d80: f7f1 fb56 bl 10017430 +10025d84: 6365 str r5, [r4, #52] ; 0x34 +10025d86: 63a7 str r7, [r4, #56] ; 0x38 +10025d88: b013 add sp, #76 ; 0x4c +10025d8a: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +10025d8e: f104 03c8 add.w r3, r4, #200 ; 0xc8 +10025d92: f8c4 30c0 str.w r3, [r4, #192] ; 0xc0 +10025d96: 2320 movs r3, #32 +10025d98: f8c4 30c4 str.w r3, [r4, #196] ; 0xc4 +10025d9c: 2301 movs r3, #1 +10025d9e: 6223 str r3, [r4, #32] +10025da0: f8c4 3188 str.w r3, [r4, #392] ; 0x188 +10025da4: 62a3 str r3, [r4, #40] ; 0x28 +10025da6: f8d5 3d64 ldr.w r3, [r5, #3428] ; 0xd64 +10025daa: 2202 movs r2, #2 +10025dac: f8c4 218c str.w r2, [r4, #396] ; 0x18c +10025db0: f884 30bc strb.w r3, [r4, #188] ; 0xbc +10025db4: e7df b.n 10025d76 + ... + +10025db8 : +10025db8: b5f0 push {r4, r5, r6, r7, lr} +10025dba: 7a46 ldrb r6, [r0, #9] +10025dbc: 7a02 ldrb r2, [r0, #8] +10025dbe: b085 sub sp, #20 +10025dc0: ea42 2606 orr.w r6, r2, r6, lsl #8 +10025dc4: 2300 movs r3, #0 +10025dc6: 2e01 cmp r6, #1 +10025dc8: 4604 mov r4, r0 +10025dca: 460d mov r5, r1 +10025dcc: 9302 str r3, [sp, #8] +10025dce: 9303 str r3, [sp, #12] +10025dd0: d92b bls.n 10025e2a +10025dd2: 9300 str r3, [sp, #0] +10025dd4: aa02 add r2, sp, #8 +10025dd6: ab03 add r3, sp, #12 +10025dd8: f018 fd7e bl 1003e8d8 <__rtw_parse_wpa2_ie_veneer> +10025ddc: 9b03 ldr r3, [sp, #12] +10025dde: 06da lsls r2, r3, #27 +10025de0: d50c bpl.n 10025dfc +10025de2: 4913 ldr r1, [pc, #76] ; (10025e30 ) +10025de4: f104 000a add.w r0, r4, #10 +10025de8: 2204 movs r2, #4 +10025dea: f7f1 fb21 bl 10017430 +10025dee: f1a5 020a sub.w r2, r5, #10 +10025df2: eba2 0286 sub.w r2, r2, r6, lsl #2 +10025df6: 00b1 lsls r1, r6, #2 +10025df8: 2300 movs r3, #0 +10025dfa: e005 b.n 10025e08 +10025dfc: 071b lsls r3, r3, #28 +10025dfe: d5f6 bpl.n 10025dee +10025e00: f104 000a add.w r0, r4, #10 +10025e04: 490b ldr r1, [pc, #44] ; (10025e34 ) +10025e06: e7ef b.n 10025de8 +10025e08: 4293 cmp r3, r2 +10025e0a: da06 bge.n 10025e1a +10025e0c: 1860 adds r0, r4, r1 +10025e0e: 4418 add r0, r3 +10025e10: 7a87 ldrb r7, [r0, #10] +10025e12: 18e0 adds r0, r4, r3 +10025e14: 7387 strb r7, [r0, #14] +10025e16: 3301 adds r3, #1 +10025e18: e7f6 b.n 10025e08 +10025e1a: 2301 movs r3, #1 +10025e1c: 1b9e subs r6, r3, r6 +10025e1e: eb05 0586 add.w r5, r5, r6, lsl #2 +10025e22: b2ad uxth r5, r5 +10025e24: 7223 strb r3, [r4, #8] +10025e26: 1eab subs r3, r5, #2 +10025e28: 7063 strb r3, [r4, #1] +10025e2a: 4628 mov r0, r5 +10025e2c: b005 add sp, #20 +10025e2e: bdf0 pop {r4, r5, r6, r7, pc} +10025e30: 00035430 .word 0x00035430 +10025e34: 0003542c .word 0x0003542c + +10025e38 : +10025e38: b5f0 push {r4, r5, r6, r7, lr} +10025e3a: 7b46 ldrb r6, [r0, #13] +10025e3c: 7b02 ldrb r2, [r0, #12] +10025e3e: b085 sub sp, #20 +10025e40: ea42 2606 orr.w r6, r2, r6, lsl #8 +10025e44: 2300 movs r3, #0 +10025e46: 2e01 cmp r6, #1 +10025e48: 4604 mov r4, r0 +10025e4a: 460d mov r5, r1 +10025e4c: 9302 str r3, [sp, #8] +10025e4e: 9303 str r3, [sp, #12] +10025e50: d92b bls.n 10025eaa +10025e52: 9300 str r3, [sp, #0] +10025e54: aa02 add r2, sp, #8 +10025e56: ab03 add r3, sp, #12 +10025e58: f018 fd5e bl 1003e918 <__rtw_parse_wpa_ie_veneer> +10025e5c: 9b03 ldr r3, [sp, #12] +10025e5e: 06da lsls r2, r3, #27 +10025e60: d50c bpl.n 10025e7c +10025e62: 4913 ldr r1, [pc, #76] ; (10025eb0 ) +10025e64: f104 000e add.w r0, r4, #14 +10025e68: 2204 movs r2, #4 +10025e6a: f7f1 fae1 bl 10017430 +10025e6e: f1a5 020e sub.w r2, r5, #14 +10025e72: eba2 0286 sub.w r2, r2, r6, lsl #2 +10025e76: 00b1 lsls r1, r6, #2 +10025e78: 2300 movs r3, #0 +10025e7a: e005 b.n 10025e88 +10025e7c: 071b lsls r3, r3, #28 +10025e7e: d5f6 bpl.n 10025e6e +10025e80: f104 000e add.w r0, r4, #14 +10025e84: 490b ldr r1, [pc, #44] ; (10025eb4 ) +10025e86: e7ef b.n 10025e68 +10025e88: 4293 cmp r3, r2 +10025e8a: da06 bge.n 10025e9a +10025e8c: 1860 adds r0, r4, r1 +10025e8e: 4418 add r0, r3 +10025e90: 7b87 ldrb r7, [r0, #14] +10025e92: 18e0 adds r0, r4, r3 +10025e94: 7487 strb r7, [r0, #18] +10025e96: 3301 adds r3, #1 +10025e98: e7f6 b.n 10025e88 +10025e9a: 2301 movs r3, #1 +10025e9c: 1b9e subs r6, r3, r6 +10025e9e: eb05 0586 add.w r5, r5, r6, lsl #2 +10025ea2: b2ad uxth r5, r5 +10025ea4: 7323 strb r3, [r4, #12] +10025ea6: 1eab subs r3, r5, #2 +10025ea8: 7063 strb r3, [r4, #1] +10025eaa: 4628 mov r0, r5 +10025eac: b005 add sp, #20 +10025eae: bdf0 pop {r4, r5, r6, r7, pc} +10025eb0: 0003541c .word 0x0003541c +10025eb4: 00035418 .word 0x00035418 + +10025eb8 : +10025eb8: f241 3338 movw r3, #4920 ; 0x1338 +10025ebc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10025ec0: 58c5 ldr r5, [r0, r3] +10025ec2: 4607 mov r7, r0 +10025ec4: f8d5 40dc ldr.w r4, [r5, #220] ; 0xdc +10025ec8: b093 sub sp, #76 ; 0x4c +10025eca: f104 0812 add.w r8, r4, #18 +10025ece: f100 0a98 add.w sl, r0, #152 ; 0x98 +10025ed2: f8c5 80ec str.w r8, [r5, #236] ; 0xec +10025ed6: 4640 mov r0, r8 +10025ed8: 2100 movs r1, #0 +10025eda: f44f 72f7 mov.w r2, #494 ; 0x1ee +10025ede: f7f4 fe7b bl 1001abd8 +10025ee2: 68ab ldr r3, [r5, #8] +10025ee4: 079b lsls r3, r3, #30 +10025ee6: bf4c ite mi +10025ee8: 2302 movmi r3, #2 +10025eea: 23fe movpl r3, #254 ; 0xfe +10025eec: 74a3 strb r3, [r4, #18] +10025eee: f507 538c add.w r3, r7, #4480 ; 0x1180 +10025ef2: 331c adds r3, #28 +10025ef4: f893 30bc ldrb.w r3, [r3, #188] ; 0xbc +10025ef8: 2b04 cmp r3, #4 +10025efa: d007 beq.n 10025f0c +10025efc: 7c2b ldrb r3, [r5, #16] +10025efe: 2b04 cmp r3, #4 +10025f00: bf14 ite ne +10025f02: f04f 0901 movne.w r9, #1 +10025f06: f04f 0902 moveq.w r9, #2 +10025f0a: e001 b.n 10025f10 +10025f0c: f04f 0902 mov.w r9, #2 +10025f10: 7ce3 ldrb r3, [r4, #19] +10025f12: 2600 movs r6, #0 +10025f14: f043 030f orr.w r3, r3, #15 +10025f18: 74e3 strb r3, [r4, #19] +10025f1a: f884 9014 strb.w r9, [r4, #20] +10025f1e: 7566 strb r6, [r4, #21] +10025f20: 75a6 strb r6, [r4, #22] +10025f22: f8d5 131c ldr.w r1, [r5, #796] ; 0x31c +10025f26: f8d5 2320 ldr.w r2, [r5, #800] ; 0x320 +10025f2a: 4640 mov r0, r8 +10025f2c: f7fe fa99 bl 10024462 +10025f30: f505 7047 add.w r0, r5, #796 ; 0x31c +10025f34: f7fe faa4 bl 10024480 +10025f38: 4631 mov r1, r6 +10025f3a: 2220 movs r2, #32 +10025f3c: a80a add r0, sp, #40 ; 0x28 +10025f3e: f7f4 fe4b bl 1001abd8 +10025f42: a90a add r1, sp, #40 ; 0x28 +10025f44: 2220 movs r2, #32 +10025f46: f104 001f add.w r0, r4, #31 +10025f4a: f7f4 fe41 bl 1001abd0 +10025f4e: 4631 mov r1, r6 +10025f50: 2210 movs r2, #16 +10025f52: a806 add r0, sp, #24 +10025f54: f7f4 fe40 bl 1001abd8 +10025f58: a906 add r1, sp, #24 +10025f5a: 2210 movs r2, #16 +10025f5c: f104 003f add.w r0, r4, #63 ; 0x3f +10025f60: f7f4 fe36 bl 1001abd0 +10025f64: 4631 mov r1, r6 +10025f66: 2208 movs r2, #8 +10025f68: a802 add r0, sp, #8 +10025f6a: f7f4 fe35 bl 1001abd8 +10025f6e: a902 add r1, sp, #8 +10025f70: 2208 movs r2, #8 +10025f72: f104 004f add.w r0, r4, #79 ; 0x4f +10025f76: f7f4 fe2b bl 1001abd0 +10025f7a: 4631 mov r1, r6 +10025f7c: 2208 movs r2, #8 +10025f7e: a804 add r0, sp, #16 +10025f80: f7f4 fe2a bl 1001abd8 +10025f84: f04f 0871 mov.w r8, #113 ; 0x71 +10025f88: a904 add r1, sp, #16 +10025f8a: 2208 movs r2, #8 +10025f8c: f04f 0b5f mov.w fp, #95 ; 0x5f +10025f90: f104 0057 add.w r0, r4, #87 ; 0x57 +10025f94: f7f4 fe1c bl 1001abd0 +10025f98: f884 606f strb.w r6, [r4, #111] ; 0x6f +10025f9c: f884 6070 strb.w r6, [r4, #112] ; 0x70 +10025fa0: 4650 mov r0, sl +10025fa2: f8c5 80e0 str.w r8, [r5, #224] ; 0xe0 +10025fa6: f8c5 b0f0 str.w fp, [r5, #240] ; 0xf0 +10025faa: f002 fbe9 bl 10028780 +10025fae: 2206 movs r2, #6 +10025fb0: 4601 mov r1, r0 +10025fb2: 4620 mov r0, r4 +10025fb4: f7f4 fe0c bl 1001abd0 +10025fb8: f507 51a4 add.w r1, r7, #5248 ; 0x1480 +10025fbc: 3119 adds r1, #25 +10025fbe: 2206 movs r2, #6 +10025fc0: 1da0 adds r0, r4, #6 +10025fc2: f7f4 fe05 bl 1001abd0 +10025fc6: f648 008e movw r0, #34958 ; 0x888e +10025fca: f7f1 f9eb bl 100173a4 <_htons> +10025fce: 2301 movs r3, #1 +10025fd0: 73a3 strb r3, [r4, #14] +10025fd2: 2303 movs r3, #3 +10025fd4: 81a0 strh r0, [r4, #12] +10025fd6: 73e3 strb r3, [r4, #15] +10025fd8: 4658 mov r0, fp +10025fda: f7f1 f9e3 bl 100173a4 <_htons> +10025fde: e88d 0110 stmia.w sp, {r4, r8} +10025fe2: f105 0394 add.w r3, r5, #148 ; 0x94 +10025fe6: 8220 strh r0, [r4, #16] +10025fe8: 464a mov r2, r9 +10025fea: e89d 0003 ldmia.w sp, {r0, r1} +10025fee: f7fe fb4d bl 1002468c +10025ff2: f44f 7000 mov.w r0, #512 ; 0x200 +10025ff6: 214a movs r1, #74 ; 0x4a +10025ff8: f010 fc27 bl 1003684a +10025ffc: 4605 mov r5, r0 +10025ffe: b180 cbz r0, 10026022 +10026000: 4642 mov r2, r8 +10026002: 4621 mov r1, r4 +10026004: 6900 ldr r0, [r0, #16] +10026006: f7f4 fde3 bl 1001abd0 +1002600a: 4641 mov r1, r8 +1002600c: 4628 mov r0, r5 +1002600e: f010 fbfb bl 10036808 +10026012: f641 0334 movw r3, #6196 ; 0x1834 +10026016: 58f9 ldr r1, [r7, r3] +10026018: 4628 mov r0, r5 +1002601a: 6a8b ldr r3, [r1, #40] ; 0x28 +1002601c: 4798 blx r3 +1002601e: 4630 mov r0, r6 +10026020: e001 b.n 10026026 +10026022: f04f 30ff mov.w r0, #4294967295 +10026026: b013 add sp, #76 ; 0x4c +10026028: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +1002602c : +1002602c: f7f7 b811 b.w 1001d052 + +10026030 : +10026030: b570 push {r4, r5, r6, lr} +10026032: f500 54a0 add.w r4, r0, #5120 ; 0x1400 +10026036: 4605 mov r5, r0 +10026038: 4620 mov r0, r4 +1002603a: f7f1 fa55 bl 100174e8 +1002603e: f894 3037 ldrb.w r3, [r4, #55] ; 0x37 +10026042: 2601 movs r6, #1 +10026044: f884 3035 strb.w r3, [r4, #53] ; 0x35 +10026048: 6ae3 ldr r3, [r4, #44] ; 0x2c +1002604a: 63a6 str r6, [r4, #56] ; 0x38 +1002604c: 4433 add r3, r6 +1002604e: 62e3 str r3, [r4, #44] ; 0x2c +10026050: 6f63 ldr r3, [r4, #116] ; 0x74 +10026052: 2b02 cmp r3, #2 +10026054: d136 bne.n 100260c4 +10026056: f7f1 fbd1 bl 100177fc +1002605a: f894 3035 ldrb.w r3, [r4, #53] ; 0x35 +1002605e: 7626 strb r6, [r4, #24] +10026060: 2b02 cmp r3, #2 +10026062: bf08 it eq +10026064: f884 607b strbeq.w r6, [r4, #123] ; 0x7b +10026068: 2600 movs r6, #0 +1002606a: f884 6068 strb.w r6, [r4, #104] ; 0x68 +1002606e: f7f1 fac7 bl 10017600 +10026072: 2301 movs r3, #1 +10026074: f241 72b4 movw r2, #6068 ; 0x17b4 +10026078: 50ab str r3, [r5, r2] +1002607a: f641 0258 movw r2, #6232 ; 0x1858 +1002607e: 54ab strb r3, [r5, r2] +10026080: 4628 mov r0, r5 +10026082: 213c movs r1, #60 ; 0x3c +10026084: 4632 mov r2, r6 +10026086: f00c fa34 bl 100324f2 +1002608a: f641 0330 movw r3, #6192 ; 0x1830 +1002608e: 58eb ldr r3, [r5, r3] +10026090: b10b cbz r3, 10026096 +10026092: 4628 mov r0, r5 +10026094: 4798 blx r3 +10026096: f241 73b0 movw r3, #6064 ; 0x17b0 +1002609a: 58eb ldr r3, [r5, r3] +1002609c: b913 cbnz r3, 100260a4 +1002609e: 4628 mov r0, r5 +100260a0: f00c fa1a bl 100324d8 +100260a4: 2200 movs r2, #0 +100260a6: f241 73b4 movw r3, #6068 ; 0x17b4 +100260aa: 50ea str r2, [r5, r3] +100260ac: 2302 movs r3, #2 +100260ae: 6723 str r3, [r4, #112] ; 0x70 +100260b0: 4b08 ldr r3, [pc, #32] ; (100260d4 ) +100260b2: 605a str r2, [r3, #4] +100260b4: 4a08 ldr r2, [pc, #32] ; (100260d8 ) +100260b6: 60da str r2, [r3, #12] +100260b8: 4a08 ldr r2, [pc, #32] ; (100260dc ) +100260ba: 611a str r2, [r3, #16] +100260bc: 2205 movs r2, #5 +100260be: 605a str r2, [r3, #4] +100260c0: f7f1 fba4 bl 1001780c +100260c4: 2300 movs r3, #0 +100260c6: 63a3 str r3, [r4, #56] ; 0x38 +100260c8: 4620 mov r0, r4 +100260ca: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +100260ce: f7f1 b9f3 b.w 100174b8 +100260d2: bf00 nop +100260d4: e000ed90 .word 0xe000ed90 +100260d8: 40080017 .word 0x40080017 +100260dc: 00040023 .word 0x00040023 + +100260e0 : +100260e0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +100260e4: f500 55a0 add.w r5, r0, #5120 ; 0x1400 +100260e8: 4604 mov r4, r0 +100260ea: 4628 mov r0, r5 +100260ec: f7f1 f9fc bl 100174e8 +100260f0: 6f2b ldr r3, [r5, #112] ; 0x70 +100260f2: 2b02 cmp r3, #2 +100260f4: d177 bne.n 100261e6 +100260f6: 6bae ldr r6, [r5, #56] ; 0x38 +100260f8: 2e00 cmp r6, #0 +100260fa: d174 bne.n 100261e6 +100260fc: f7f1 fb7e bl 100177fc +10026100: 4b3c ldr r3, [pc, #240] ; (100261f4 ) +10026102: 2217 movs r2, #23 +10026104: 605e str r6, [r3, #4] +10026106: 60da str r2, [r3, #12] +10026108: 2205 movs r2, #5 +1002610a: 611e str r6, [r3, #16] +1002610c: 605a str r2, [r3, #4] +1002610e: 6b2b ldr r3, [r5, #48] ; 0x30 +10026110: 2701 movs r7, #1 +10026112: 443b add r3, r7 +10026114: 632b str r3, [r5, #48] ; 0x30 +10026116: 676e str r6, [r5, #116] ; 0x74 +10026118: 63af str r7, [r5, #56] ; 0x38 +1002611a: f7f1 fa71 bl 10017600 +1002611e: 4620 mov r0, r4 +10026120: f011 fccb bl 10037aba +10026124: f641 0358 movw r3, #6232 ; 0x1858 +10026128: 54e6 strb r6, [r4, r3] +1002612a: f241 73ac movw r3, #6060 ; 0x17ac +1002612e: 50e6 str r6, [r4, r3] +10026130: f241 73b0 movw r3, #6064 ; 0x17b0 +10026134: 50e6 str r6, [r4, r3] +10026136: f241 73b4 movw r3, #6068 ; 0x17b4 +1002613a: 50e6 str r6, [r4, r3] +1002613c: f641 0638 movw r6, #6200 ; 0x1838 +10026140: 51a7 str r7, [r4, r6] +10026142: 4620 mov r0, r4 +10026144: f00c f9b3 bl 100324ae +10026148: b1c8 cbz r0, 1002617e +1002614a: f641 032c movw r3, #6188 ; 0x182c +1002614e: 58e3 ldr r3, [r4, r3] +10026150: b10b cbz r3, 10026156 +10026152: 4620 mov r0, r4 +10026154: 4798 blx r3 +10026156: f241 4364 movw r3, #5220 ; 0x1464 +1002615a: f504 50a2 add.w r0, r4, #5184 ; 0x1440 +1002615e: 58e1 ldr r1, [r4, r3] +10026160: 3018 adds r0, #24 +10026162: f010 fe69 bl 10036e38 +10026166: f504 6092 add.w r0, r4, #1168 ; 0x490 +1002616a: f241 3188 movw r1, #5000 ; 0x1388 +1002616e: f010 fe63 bl 10036e38 +10026172: f7ee fb7b bl 1001486c +10026176: 2300 movs r3, #0 +10026178: 672b str r3, [r5, #112] ; 0x70 +1002617a: 2701 movs r7, #1 +1002617c: e001 b.n 10026182 +1002617e: 51a0 str r0, [r4, r6] +10026180: 4607 mov r7, r0 +10026182: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c +10026186: f023 0304 bic.w r3, r3, #4 +1002618a: 2b01 cmp r3, #1 +1002618c: d11d bne.n 100261ca +1002618e: 2200 movs r2, #0 +10026190: 4620 mov r0, r4 +10026192: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e +10026196: 4613 mov r3, r2 +10026198: f002 fac0 bl 1002871c +1002619c: f604 5808 addw r8, r4, #3336 ; 0xd08 +100261a0: 2600 movs r6, #0 +100261a2: f894 349c ldrb.w r3, [r4, #1180] ; 0x49c +100261a6: 40f3 lsrs r3, r6 +100261a8: 07db lsls r3, r3, #31 +100261aa: d50b bpl.n 100261c4 +100261ac: f8d4 3d10 ldr.w r3, [r4, #3344] ; 0xd10 +100261b0: 4620 mov r0, r4 +100261b2: 429e cmp r6, r3 +100261b4: 4641 mov r1, r8 +100261b6: 4632 mov r2, r6 +100261b8: bf0c ite eq +100261ba: 2301 moveq r3, #1 +100261bc: 2300 movne r3, #0 +100261be: f7f7 ff19 bl 1001dff4 +100261c2: 4607 mov r7, r0 +100261c4: 3601 adds r6, #1 +100261c6: 2e04 cmp r6, #4 +100261c8: d1eb bne.n 100261a2 +100261ca: 4620 mov r0, r4 +100261cc: f240 5122 movw r1, #1314 ; 0x522 +100261d0: 2200 movs r2, #0 +100261d2: f011 fd77 bl 10037cc4 +100261d6: 2300 movs r3, #0 +100261d8: 63ab str r3, [r5, #56] ; 0x38 +100261da: f885 307b strb.w r3, [r5, #123] ; 0x7b +100261de: 762b strb r3, [r5, #24] +100261e0: f7f1 fb14 bl 1001780c +100261e4: e000 b.n 100261e8 +100261e6: 2701 movs r7, #1 +100261e8: 4628 mov r0, r5 +100261ea: f7f1 f965 bl 100174b8 +100261ee: 4638 mov r0, r7 +100261f0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100261f4: e000ed90 .word 0xe000ed90 + +100261f8 : +100261f8: f641 035c movw r3, #6236 ; 0x185c +100261fc: b570 push {r4, r5, r6, lr} +100261fe: 58c5 ldr r5, [r0, r3] +10026200: f241 433c movw r3, #5180 ; 0x143c +10026204: 58c6 ldr r6, [r0, r3] +10026206: 4604 mov r4, r0 +10026208: f7f1 f9fa bl 10017600 +1002620c: 4286 cmp r6, r0 +1002620e: d207 bcs.n 10026220 +10026210: 6920 ldr r0, [r4, #16] +10026212: f640 0381 movw r3, #2177 ; 0x881 +10026216: 4003 ands r3, r0 +10026218: b913 cbnz r3, 10026220 +1002621a: f010 0070 ands.w r0, r0, #112 ; 0x70 +1002621e: d001 beq.n 10026224 +10026220: 2000 movs r0, #0 +10026222: bd70 pop {r4, r5, r6, pc} +10026224: f241 63a8 movw r3, #5800 ; 0x16a8 +10026228: 58e1 ldr r1, [r4, r3] +1002622a: b971 cbnz r1, 1002624a +1002622c: b15d cbz r5, 10026246 +1002622e: 692a ldr r2, [r5, #16] +10026230: f640 0391 movw r3, #2193 ; 0x891 +10026234: 4013 ands r3, r2 +10026236: 2b00 cmp r3, #0 +10026238: d1f2 bne.n 10026220 +1002623a: f012 0f60 tst.w r2, #96 ; 0x60 +1002623e: bf14 ite ne +10026240: 2000 movne r0, #0 +10026242: 2001 moveq r0, #1 +10026244: bd70 pop {r4, r5, r6, pc} +10026246: 2001 movs r0, #1 +10026248: bd70 pop {r4, r5, r6, pc} +1002624a: bd70 pop {r4, r5, r6, pc} + +1002624c : +1002624c: b538 push {r3, r4, r5, lr} +1002624e: f500 54a0 add.w r4, r0, #5120 ; 0x1400 +10026252: 2301 movs r3, #1 +10026254: f884 3040 strb.w r3, [r4, #64] ; 0x40 +10026258: f894 3037 ldrb.w r3, [r4, #55] ; 0x37 +1002625c: 4605 mov r5, r0 +1002625e: b1a3 cbz r3, 1002628a +10026260: f7ff ffca bl 100261f8 +10026264: b188 cbz r0, 1002628a +10026266: f894 3068 ldrb.w r3, [r4, #104] ; 0x68 +1002626a: 6f22 ldr r2, [r4, #112] ; 0x70 +1002626c: 3301 adds r3, #1 +1002626e: b2db uxtb r3, r3 +10026270: f884 3068 strb.w r3, [r4, #104] ; 0x68 +10026274: b94a cbnz r2, 1002628a +10026276: 2b03 cmp r3, #3 +10026278: d907 bls.n 1002628a +1002627a: 2302 movs r3, #2 +1002627c: 6763 str r3, [r4, #116] ; 0x74 +1002627e: f895 386e ldrb.w r3, [r5, #2158] ; 0x86e +10026282: b913 cbnz r3, 1002628a +10026284: 4628 mov r0, r5 +10026286: f7ff fed3 bl 10026030 +1002628a: f241 4364 movw r3, #5220 ; 0x1464 +1002628e: f505 50a2 add.w r0, r5, #5184 ; 0x1440 +10026292: 58e9 ldr r1, [r5, r3] +10026294: 3018 adds r0, #24 +10026296: f010 fdcf bl 10036e38 +1002629a: 2300 movs r3, #0 +1002629c: f884 3040 strb.w r3, [r4, #64] ; 0x40 +100262a0: bd38 pop {r3, r4, r5, pc} + +100262a2 : +100262a2: b570 push {r4, r5, r6, lr} +100262a4: 6903 ldr r3, [r0, #16] +100262a6: 4605 mov r5, r0 +100262a8: 07da lsls r2, r3, #31 +100262aa: d504 bpl.n 100262b6 +100262ac: f413 6401 ands.w r4, r3, #2064 ; 0x810 +100262b0: d007 beq.n 100262c2 +100262b2: 2400 movs r4, #0 +100262b4: e027 b.n 10026306 +100262b6: f641 0269 movw r2, #6249 ; 0x1869 +100262ba: 5c84 ldrb r4, [r0, r2] +100262bc: 2c00 cmp r4, #0 +100262be: d1f5 bne.n 100262ac +100262c0: e021 b.n 10026306 +100262c2: f013 0f60 tst.w r3, #96 ; 0x60 +100262c6: d11e bne.n 10026306 +100262c8: f8d5 3d08 ldr.w r3, [r5, #3336] ; 0xd08 +100262cc: 2b02 cmp r3, #2 +100262ce: d103 bne.n 100262d8 +100262d0: f241 035c movw r3, #4188 ; 0x105c +100262d4: 5cec ldrb r4, [r5, r3] +100262d6: b1b4 cbz r4, 10026306 +100262d8: f641 0369 movw r3, #6249 ; 0x1869 +100262dc: 5cec ldrb r4, [r5, r3] +100262de: b98c cbnz r4, 10026304 +100262e0: f7f1 f98e bl 10017600 +100262e4: f505 55a0 add.w r5, r5, #5120 ; 0x1400 +100262e8: 6cab ldr r3, [r5, #72] ; 0x48 +100262ea: 1ac6 subs r6, r0, r3 +100262ec: 2001 movs r0, #1 +100262ee: f7f1 f9ad bl 1001764c +100262f2: 4286 cmp r6, r0 +100262f4: d307 bcc.n 10026306 +100262f6: f895 4056 ldrb.w r4, [r5, #86] ; 0x56 +100262fa: f114 34ff adds.w r4, r4, #4294967295 +100262fe: bf18 it ne +10026300: 2401 movne r4, #1 +10026302: e000 b.n 10026306 +10026304: 2401 movs r4, #1 +10026306: 4620 mov r0, r4 +10026308: bd70 pop {r4, r5, r6, pc} + +1002630a : +1002630a: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +1002630e: 290a cmp r1, #10 +10026310: 4606 mov r6, r0 +10026312: 4617 mov r7, r2 +10026314: 4698 mov r8, r3 +10026316: f88d 1007 strb.w r1, [sp, #7] +1002631a: 460d mov r5, r1 +1002631c: d82a bhi.n 10026374 +1002631e: f500 54a0 add.w r4, r0, #5120 ; 0x1400 +10026322: 7a23 ldrb r3, [r4, #8] +10026324: 428b cmp r3, r1 +10026326: d107 bne.n 10026338 +10026328: b323 cbz r3, 10026374 +1002632a: 7a63 ldrb r3, [r4, #9] +1002632c: 4293 cmp r3, r2 +1002632e: d10e bne.n 1002634e +10026330: 7aa3 ldrb r3, [r4, #10] +10026332: 4543 cmp r3, r8 +10026334: d10b bne.n 1002634e +10026336: e01d b.n 10026374 +10026338: b949 cbnz r1, 1002634e +1002633a: 7221 strb r1, [r4, #8] +1002633c: f10d 0207 add.w r2, sp, #7 +10026340: 212b movs r1, #43 ; 0x2b +10026342: f00c f8d6 bl 100324f2 +10026346: f884 5045 strb.w r5, [r4, #69] ; 0x45 +1002634a: 7625 strb r5, [r4, #24] +1002634c: e012 b.n 10026374 +1002634e: 4630 mov r0, r6 +10026350: f7ff ffa7 bl 100262a2 +10026354: b170 cbz r0, 10026374 +10026356: aa02 add r2, sp, #8 +10026358: f812 1d01 ldrb.w r1, [r2, #-1]! +1002635c: 2301 movs r3, #1 +1002635e: 7221 strb r1, [r4, #8] +10026360: f884 3045 strb.w r3, [r4, #69] ; 0x45 +10026364: 7267 strb r7, [r4, #9] +10026366: f884 800a strb.w r8, [r4, #10] +1002636a: 7623 strb r3, [r4, #24] +1002636c: 4630 mov r0, r6 +1002636e: 212b movs r1, #43 ; 0x2b +10026370: f00c f8bf bl 100324f2 +10026374: b002 add sp, #8 +10026376: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1002637a : +1002637a: b573 push {r0, r1, r4, r5, r6, lr} +1002637c: 2300 movs r3, #0 +1002637e: 4604 mov r4, r0 +10026380: 460e mov r6, r1 +10026382: f88d 3007 strb.w r3, [sp, #7] +10026386: f7f1 f93b bl 10017600 +1002638a: 4605 mov r5, r0 +1002638c: 4620 mov r0, r4 +1002638e: 212e movs r1, #46 ; 0x2e +10026390: f10d 0207 add.w r2, sp, #7 +10026394: f00c f8b4 bl 10032500 +10026398: f89d 3007 ldrb.w r3, [sp, #7] +1002639c: 2b01 cmp r3, #1 +1002639e: d00e beq.n 100263be +100263a0: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +100263a4: 3310 adds r3, #16 +100263a6: 681b ldr r3, [r3, #0] +100263a8: 2b01 cmp r3, #1 +100263aa: d00a beq.n 100263c2 +100263ac: 4628 mov r0, r5 +100263ae: f7f1 f957 bl 10017660 +100263b2: 42b0 cmp r0, r6 +100263b4: d808 bhi.n 100263c8 +100263b6: 2064 movs r0, #100 ; 0x64 +100263b8: f7f1 f964 bl 10017684 +100263bc: e7e6 b.n 1002638c +100263be: 2000 movs r0, #0 +100263c0: e004 b.n 100263cc +100263c2: f06f 0001 mvn.w r0, #1 +100263c6: e001 b.n 100263cc +100263c8: f04f 30ff mov.w r0, #4294967295 +100263cc: b002 add sp, #8 +100263ce: bd70 pop {r4, r5, r6, pc} + +100263d0 : +100263d0: b570 push {r4, r5, r6, lr} +100263d2: f500 54a0 add.w r4, r0, #5120 ; 0x1400 +100263d6: f894 3034 ldrb.w r3, [r4, #52] ; 0x34 +100263da: 4605 mov r5, r0 +100263dc: b36b cbz r3, 1002643a +100263de: f641 0369 movw r3, #6249 ; 0x1869 +100263e2: 5cc3 ldrb r3, [r0, r3] +100263e4: bb4b cbnz r3, 1002643a +100263e6: f7ff ff5c bl 100262a2 +100263ea: b330 cbz r0, 1002643a +100263ec: f641 035c movw r3, #6236 ; 0x185c +100263f0: 58e8 ldr r0, [r5, r3] +100263f2: b918 cbnz r0, 100263fc +100263f4: f894 3041 ldrb.w r3, [r4, #65] ; 0x41 +100263f8: b92b cbnz r3, 10026406 +100263fa: bd70 pop {r4, r5, r6, pc} +100263fc: f7ff ff51 bl 100262a2 +10026400: 2800 cmp r0, #0 +10026402: d1f7 bne.n 100263f4 +10026404: bd70 pop {r4, r5, r6, pc} +10026406: f894 3042 ldrb.w r3, [r4, #66] ; 0x42 +1002640a: 2b01 cmp r3, #1 +1002640c: d912 bls.n 10026434 +1002640e: 7a26 ldrb r6, [r4, #8] +10026410: b99e cbnz r6, 1002643a +10026412: 4628 mov r0, r5 +10026414: 2101 movs r1, #1 +10026416: f00a fbab bl 10030b70 +1002641a: 2301 movs r3, #1 +1002641c: 7623 strb r3, [r4, #24] +1002641e: f505 539e add.w r3, r5, #5056 ; 0x13c0 +10026422: 4628 mov r0, r5 +10026424: f894 1043 ldrb.w r1, [r4, #67] ; 0x43 +10026428: 781a ldrb r2, [r3, #0] +1002642a: 4633 mov r3, r6 +1002642c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10026430: f7ff bf6b b.w 1002630a +10026434: 3301 adds r3, #1 +10026436: f884 3042 strb.w r3, [r4, #66] ; 0x42 +1002643a: bd70 pop {r4, r5, r6, pc} + +1002643c : +1002643c: b570 push {r4, r5, r6, lr} +1002643e: f641 0369 movw r3, #6249 ; 0x1869 +10026442: 5cc6 ldrb r6, [r0, r3] +10026444: 4604 mov r4, r0 +10026446: b9ae cbnz r6, 10026474 +10026448: f500 55a0 add.w r5, r0, #5120 ; 0x1400 +1002644c: f895 3041 ldrb.w r3, [r5, #65] ; 0x41 +10026450: b173 cbz r3, 10026470 +10026452: 7a2b ldrb r3, [r5, #8] +10026454: b163 cbz r3, 10026470 +10026456: 4631 mov r1, r6 +10026458: f00a fb8a bl 10030b70 +1002645c: 4620 mov r0, r4 +1002645e: 4631 mov r1, r6 +10026460: 4632 mov r2, r6 +10026462: 4633 mov r3, r6 +10026464: f7ff ff51 bl 1002630a +10026468: 4620 mov r0, r4 +1002646a: 2164 movs r1, #100 ; 0x64 +1002646c: f7ff ff85 bl 1002637a +10026470: 2300 movs r3, #0 +10026472: 762b strb r3, [r5, #24] +10026474: bd70 pop {r4, r5, r6, pc} + +10026476 : +10026476: 6903 ldr r3, [r0, #16] +10026478: 07db lsls r3, r3, #31 +1002647a: d503 bpl.n 10026484 +1002647c: 2105 movs r1, #5 +1002647e: 2200 movs r2, #0 +10026480: f7f6 bd44 b.w 1001cf0c +10026484: 4770 bx lr + ... + +10026488 : +10026488: b573 push {r0, r1, r4, r5, r6, lr} +1002648a: f641 0369 movw r3, #6249 ; 0x1869 +1002648e: 5cc5 ldrb r5, [r0, r3] +10026490: 4606 mov r6, r0 +10026492: 2d00 cmp r5, #0 +10026494: d15a bne.n 1002654c +10026496: f500 54a0 add.w r4, r0, #5120 ; 0x1400 +1002649a: 4620 mov r0, r4 +1002649c: 2101 movs r1, #1 +1002649e: f7f0 fffb bl 10017498 +100264a2: 6725 str r5, [r4, #112] ; 0x70 +100264a4: 62e5 str r5, [r4, #44] ; 0x2c +100264a6: 6325 str r5, [r4, #48] ; 0x30 +100264a8: 63a5 str r5, [r4, #56] ; 0x38 +100264aa: f241 33bf movw r3, #5055 ; 0x13bf +100264ae: 5cf3 ldrb r3, [r6, r3] +100264b0: f104 0058 add.w r0, r4, #88 ; 0x58 +100264b4: f884 3035 strb.w r3, [r4, #53] ; 0x35 +100264b8: f884 3037 strb.w r3, [r4, #55] ; 0x37 +100264bc: f241 33be movw r3, #5054 ; 0x13be +100264c0: 5cf3 ldrb r3, [r6, r3] +100264c2: f884 5068 strb.w r5, [r4, #104] ; 0x68 +100264c6: f884 3034 strb.w r3, [r4, #52] ; 0x34 +100264ca: f44f 63fa mov.w r3, #2000 ; 0x7d0 +100264ce: f884 5055 strb.w r5, [r4, #85] ; 0x55 +100264d2: f884 5056 strb.w r5, [r4, #86] ; 0x56 +100264d6: f884 507b strb.w r5, [r4, #123] ; 0x7b +100264da: f884 5042 strb.w r5, [r4, #66] ; 0x42 +100264de: 6663 str r3, [r4, #100] ; 0x64 +100264e0: f241 33c1 movw r3, #5057 ; 0x13c1 +100264e4: 5cf3 ldrb r3, [r6, r3] +100264e6: 4a1a ldr r2, [pc, #104] ; (10026550 ) +100264e8: 2b01 cmp r3, #1 +100264ea: bf1b ittet ne +100264ec: f241 33bd movwne r3, #5053 ; 0x13bd +100264f0: 5cf3 ldrbne r3, [r6, r3] +100264f2: f884 5043 strbeq.w r5, [r4, #67] ; 0x43 +100264f6: f884 3043 strbne.w r3, [r4, #67] ; 0x43 +100264fa: f894 3043 ldrb.w r3, [r4, #67] ; 0x43 +100264fe: 2500 movs r5, #0 +10026500: 3300 adds r3, #0 +10026502: bf18 it ne +10026504: 2301 movne r3, #1 +10026506: f884 3041 strb.w r3, [r4, #65] ; 0x41 +1002650a: 230c movs r3, #12 +1002650c: 7125 strb r5, [r4, #4] +1002650e: f884 5045 strb.w r5, [r4, #69] ; 0x45 +10026512: 7163 strb r3, [r4, #5] +10026514: 7225 strb r5, [r4, #8] +10026516: f506 539e add.w r3, r6, #5056 ; 0x13c0 +1002651a: 781b ldrb r3, [r3, #0] +1002651c: 72a5 strb r5, [r4, #10] +1002651e: 7263 strb r3, [r4, #9] +10026520: 2380 movs r3, #128 ; 0x80 +10026522: 71a3 strb r3, [r4, #6] +10026524: 4b0b ldr r3, [pc, #44] ; (10026554 ) +10026526: 9300 str r3, [sp, #0] +10026528: f641 0334 movw r3, #6196 ; 0x1834 +1002652c: 58f1 ldr r1, [r6, r3] +1002652e: 4633 mov r3, r6 +10026530: f010 fc7e bl 10036e30 +10026534: 2332 movs r3, #50 ; 0x32 +10026536: f884 3090 strb.w r3, [r4, #144] ; 0x90 +1002653a: 230a movs r3, #10 +1002653c: f884 3091 strb.w r3, [r4, #145] ; 0x91 +10026540: f884 3092 strb.w r3, [r4, #146] ; 0x92 +10026544: f884 5093 strb.w r5, [r4, #147] ; 0x93 +10026548: f884 5094 strb.w r5, [r4, #148] ; 0x94 +1002654c: b002 add sp, #8 +1002654e: bd70 pop {r4, r5, r6, pc} +10026550: 1002602d .word 0x1002602d +10026554: 100416a4 .word 0x100416a4 + +10026558 : +10026558: f641 0369 movw r3, #6249 ; 0x1869 +1002655c: 5cc3 ldrb r3, [r0, r3] +1002655e: b91b cbnz r3, 10026568 +10026560: f500 50a0 add.w r0, r0, #5120 ; 0x1400 +10026564: f7f0 bfa0 b.w 100174a8 +10026568: 4770 bx lr + +1002656a <_rtw_pwr_wakeup>: +1002656a: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1002656e: f641 0368 movw r3, #6248 ; 0x1868 +10026572: 5cc3 ldrb r3, [r0, r3] +10026574: 4604 mov r4, r0 +10026576: 460e mov r6, r1 +10026578: f500 55a0 add.w r5, r0, #5120 ; 0x1400 +1002657c: f100 070c add.w r7, r0, #12 +10026580: b943 cbnz r3, 10026594 <_rtw_pwr_wakeup+0x2a> +10026582: f641 035c movw r3, #6236 ; 0x185c +10026586: 58c3 ldr r3, [r0, r3] +10026588: b123 cbz r3, 10026594 <_rtw_pwr_wakeup+0x2a> +1002658a: f503 55a0 add.w r5, r3, #5120 ; 0x1400 +1002658e: f103 070c add.w r7, r3, #12 +10026592: 461c mov r4, r3 +10026594: f7f1 f834 bl 10017600 +10026598: 4680 mov r8, r0 +1002659a: 4630 mov r0, r6 +1002659c: f7f1 f84c bl 10017638 +100265a0: 4440 add r0, r8 +100265a2: 63e8 str r0, [r5, #60] ; 0x3c +100265a4: f7f1 f82c bl 10017600 +100265a8: f895 3040 ldrb.w r3, [r5, #64] ; 0x40 +100265ac: 4680 mov r8, r0 +100265ae: b993 cbnz r3, 100265d6 <_rtw_pwr_wakeup+0x6c> +100265b0: 6d6b ldr r3, [r5, #84] ; 0x54 +100265b2: f023 437f bic.w r3, r3, #4278190080 ; 0xff000000 +100265b6: f023 03ff bic.w r3, r3, #255 ; 0xff +100265ba: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 +100265be: d10f bne.n 100265e0 <_rtw_pwr_wakeup+0x76> +100265c0: e023 b.n 1002660a <_rtw_pwr_wakeup+0xa0> +100265c2: 4640 mov r0, r8 +100265c4: f7f1 f84c bl 10017660 +100265c8: f640 33b8 movw r3, #3000 ; 0xbb8 +100265cc: 4298 cmp r0, r3 +100265ce: dcef bgt.n 100265b0 <_rtw_pwr_wakeup+0x46> +100265d0: 200a movs r0, #10 +100265d2: f7f1 f84f bl 10017674 +100265d6: f895 3040 ldrb.w r3, [r5, #64] ; 0x40 +100265da: 2b00 cmp r3, #0 +100265dc: d1f1 bne.n 100265c2 <_rtw_pwr_wakeup+0x58> +100265de: e7e7 b.n 100265b0 <_rtw_pwr_wakeup+0x46> +100265e0: f895 3055 ldrb.w r3, [r5, #85] ; 0x55 +100265e4: 2b01 cmp r3, #1 +100265e6: d104 bne.n 100265f2 <_rtw_pwr_wakeup+0x88> +100265e8: f641 0358 movw r3, #6232 ; 0x1858 +100265ec: 5ce3 ldrb r3, [r4, r3] +100265ee: 2b01 cmp r3, #1 +100265f0: d00b beq.n 1002660a <_rtw_pwr_wakeup+0xa0> +100265f2: 687b ldr r3, [r7, #4] +100265f4: 07db lsls r3, r3, #31 +100265f6: d501 bpl.n 100265fc <_rtw_pwr_wakeup+0x92> +100265f8: 2401 movs r4, #1 +100265fa: e017 b.n 1002662c <_rtw_pwr_wakeup+0xc2> +100265fc: 6f2b ldr r3, [r5, #112] ; 0x70 +100265fe: 2b02 cmp r3, #2 +10026600: d105 bne.n 1002660e <_rtw_pwr_wakeup+0xa4> +10026602: 4620 mov r0, r4 +10026604: f7ff fd6c bl 100260e0 +10026608: b908 cbnz r0, 1002660e <_rtw_pwr_wakeup+0xa4> +1002660a: 2400 movs r4, #0 +1002660c: e00e b.n 1002662c <_rtw_pwr_wakeup+0xc2> +1002660e: f241 73ac movw r3, #6060 ; 0x17ac +10026612: 58e3 ldr r3, [r4, r3] +10026614: 2b00 cmp r3, #0 +10026616: d1f8 bne.n 1002660a <_rtw_pwr_wakeup+0xa0> +10026618: f641 0338 movw r3, #6200 ; 0x1838 +1002661c: 58e3 ldr r3, [r4, r3] +1002661e: 2b00 cmp r3, #0 +10026620: d0f3 beq.n 1002660a <_rtw_pwr_wakeup+0xa0> +10026622: f241 73c5 movw r3, #6085 ; 0x17c5 +10026626: 5ce4 ldrb r4, [r4, r3] +10026628: 2c00 cmp r4, #0 +1002662a: d1e5 bne.n 100265f8 <_rtw_pwr_wakeup+0x8e> +1002662c: f7f0 ffe8 bl 10017600 +10026630: 4607 mov r7, r0 +10026632: 4630 mov r0, r6 +10026634: f7f1 f800 bl 10017638 +10026638: 4438 add r0, r7 +1002663a: 63e8 str r0, [r5, #60] ; 0x3c +1002663c: 4620 mov r0, r4 +1002663e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10026642 : +10026642: b538 push {r3, r4, r5, lr} +10026644: f500 55a0 add.w r5, r0, #5120 ; 0x1400 +10026648: f895 3034 ldrb.w r3, [r5, #52] ; 0x34 +1002664c: 460c mov r4, r1 +1002664e: b90b cbnz r3, 10026654 +10026650: b111 cbz r1, 10026658 +10026652: e017 b.n 10026684 +10026654: 290a cmp r1, #10 +10026656: d812 bhi.n 1002667e +10026658: f895 3043 ldrb.w r3, [r5, #67] ; 0x43 +1002665c: 42a3 cmp r3, r4 +1002665e: d011 beq.n 10026684 +10026660: b914 cbnz r4, 10026668 +10026662: f7ff ff08 bl 10026476 +10026666: e002 b.n 1002666e +10026668: 2302 movs r3, #2 +1002666a: f885 3042 strb.w r3, [r5, #66] ; 0x42 +1002666e: f885 4043 strb.w r4, [r5, #67] ; 0x43 +10026672: 3400 adds r4, #0 +10026674: bf18 it ne +10026676: 2401 movne r4, #1 +10026678: f885 4041 strb.w r4, [r5, #65] ; 0x41 +1002667c: e002 b.n 10026684 +1002667e: f06f 0015 mvn.w r0, #21 +10026682: bd38 pop {r3, r4, r5, pc} +10026684: 2000 movs r0, #0 +10026686: bd38 pop {r3, r4, r5, pc} + +10026688 : +10026688: b508 push {r3, lr} +1002668a: f500 53a0 add.w r3, r0, #5120 ; 0x1400 +1002668e: f893 2034 ldrb.w r2, [r3, #52] ; 0x34 +10026692: b902 cbnz r2, 10026696 +10026694: b921 cbnz r1, 100266a0 +10026696: 1e4a subs r2, r1, #1 +10026698: 2a01 cmp r2, #1 +1002669a: d803 bhi.n 100266a4 +1002669c: f883 1037 strb.w r1, [r3, #55] ; 0x37 +100266a0: 2000 movs r0, #0 +100266a2: bd08 pop {r3, pc} +100266a4: b961 cbnz r1, 100266c0 +100266a6: f883 1037 strb.w r1, [r3, #55] ; 0x37 +100266aa: 4a07 ldr r2, [pc, #28] ; (100266c8 ) +100266ac: f44f 61fa mov.w r1, #2000 ; 0x7d0 +100266b0: f7ff ff5b bl 1002656a <_rtw_pwr_wakeup> +100266b4: 2800 cmp r0, #0 +100266b6: bf14 ite ne +100266b8: 2000 movne r0, #0 +100266ba: f06f 000d mvneq.w r0, #13 +100266be: bd08 pop {r3, pc} +100266c0: f06f 0015 mvn.w r0, #21 +100266c4: bd08 pop {r3, pc} +100266c6: bf00 nop +100266c8: 10041695 .word 0x10041695 + +100266cc : +100266cc: f500 50a0 add.w r0, r0, #5120 ; 0x1400 +100266d0: f880 3092 strb.w r3, [r0, #146] ; 0x92 +100266d4: f89d 3000 ldrb.w r3, [sp] +100266d8: f880 1090 strb.w r1, [r0, #144] ; 0x90 +100266dc: f880 2091 strb.w r2, [r0, #145] ; 0x91 +100266e0: f880 3093 strb.w r3, [r0, #147] ; 0x93 +100266e4: 2000 movs r0, #0 +100266e6: 4770 bx lr + +100266e8 : +100266e8: f500 50a0 add.w r0, r0, #5120 ; 0x1400 +100266ec: f880 1094 strb.w r1, [r0, #148] ; 0x94 +100266f0: 2000 movs r0, #0 +100266f2: 4770 bx lr + +100266f4 : +100266f4: f500 50a0 add.w r0, r0, #5120 ; 0x1400 +100266f8: f890 0094 ldrb.w r0, [r0, #148] ; 0x94 +100266fc: 4770 bx lr + +100266fe : +100266fe: 4603 mov r3, r0 +10026700: b168 cbz r0, 1002671e +10026702: 6f80 ldr r0, [r0, #120] ; 0x78 +10026704: 6fda ldr r2, [r3, #124] ; 0x7c +10026706: 4408 add r0, r1 +10026708: 4290 cmp r0, r2 +1002670a: 6798 str r0, [r3, #120] ; 0x78 +1002670c: d903 bls.n 10026716 +1002670e: 1a40 subs r0, r0, r1 +10026710: 6798 str r0, [r3, #120] ; 0x78 +10026712: 2000 movs r0, #0 +10026714: 4770 bx lr +10026716: 6f1a ldr r2, [r3, #112] ; 0x70 +10026718: 1a51 subs r1, r2, r1 +1002671a: 6719 str r1, [r3, #112] ; 0x70 +1002671c: 4770 bx lr +1002671e: 4770 bx lr + +10026720 : +10026720: 4603 mov r3, r0 +10026722: b168 cbz r0, 10026740 +10026724: 6fc0 ldr r0, [r0, #124] ; 0x7c +10026726: 6f9a ldr r2, [r3, #120] ; 0x78 +10026728: 1a40 subs r0, r0, r1 +1002672a: 4290 cmp r0, r2 +1002672c: 67d8 str r0, [r3, #124] ; 0x7c +1002672e: d203 bcs.n 10026738 +10026730: 4408 add r0, r1 +10026732: 67d8 str r0, [r3, #124] ; 0x7c +10026734: 2000 movs r0, #0 +10026736: 4770 bx lr +10026738: 6f1a ldr r2, [r3, #112] ; 0x70 +1002673a: 1a51 subs r1, r2, r1 +1002673c: 6719 str r1, [r3, #112] ; 0x70 +1002673e: 4770 bx lr +10026740: 4770 bx lr + +10026742 : +10026742: b510 push {r4, lr} +10026744: 4603 mov r3, r0 +10026746: f890 0c02 ldrb.w r0, [r0, #3074] ; 0xc02 +1002674a: b138 cbz r0, 1002675c +1002674c: f893 2c03 ldrb.w r2, [r3, #3075] ; 0xc03 +10026750: f883 2c06 strb.w r2, [r3, #3078] ; 0xc06 +10026754: 3a64 subs r2, #100 ; 0x64 +10026756: f883 2c04 strb.w r2, [r3, #3076] ; 0xc04 +1002675a: e039 b.n 100267d0 +1002675c: f893 2c38 ldrb.w r2, [r3, #3128] ; 0xc38 +10026760: b922 cbnz r2, 1002676c +10026762: 2201 movs r2, #1 +10026764: f893 0c39 ldrb.w r0, [r3, #3129] ; 0xc39 +10026768: f883 2c38 strb.w r2, [r3, #3128] ; 0xc38 +1002676c: f893 2c2c ldrb.w r2, [r3, #3116] ; 0xc2c +10026770: b92a cbnz r2, 1002677e +10026772: 2201 movs r2, #1 +10026774: f893 1c2d ldrb.w r1, [r3, #3117] ; 0xc2d +10026778: f883 2c2c strb.w r2, [r3, #3116] ; 0xc2c +1002677c: e000 b.n 10026780 +1002677e: 2100 movs r1, #0 +10026780: 691a ldr r2, [r3, #16] +10026782: 0512 lsls r2, r2, #20 +10026784: d424 bmi.n 100267d0 +10026786: f893 2c06 ldrb.w r2, [r3, #3078] ; 0xc06 +1002678a: eb00 0042 add.w r0, r0, r2, lsl #1 +1002678e: 2203 movs r2, #3 +10026790: fbb0 f2f2 udiv r2, r0, r2 +10026794: eb02 0442 add.w r4, r2, r2, lsl #1 +10026798: 42a0 cmp r0, r4 +1002679a: d000 beq.n 1002679e +1002679c: 3201 adds r2, #1 +1002679e: f893 0c07 ldrb.w r0, [r3, #3079] ; 0xc07 +100267a2: 2a64 cmp r2, #100 ; 0x64 +100267a4: bf28 it cs +100267a6: 2264 movcs r2, #100 ; 0x64 +100267a8: eb01 0040 add.w r0, r1, r0, lsl #1 +100267ac: 2103 movs r1, #3 +100267ae: fbb0 f1f1 udiv r1, r0, r1 +100267b2: eb01 0441 add.w r4, r1, r1, lsl #1 +100267b6: 42a0 cmp r0, r4 +100267b8: bf18 it ne +100267ba: 3101 addne r1, #1 +100267bc: f883 2c06 strb.w r2, [r3, #3078] ; 0xc06 +100267c0: 2964 cmp r1, #100 ; 0x64 +100267c2: bf28 it cs +100267c4: 2164 movcs r1, #100 ; 0x64 +100267c6: 3a64 subs r2, #100 ; 0x64 +100267c8: f883 2c04 strb.w r2, [r3, #3076] ; 0xc04 +100267cc: f883 1c07 strb.w r1, [r3, #3079] ; 0xc07 +100267d0: f603 401c addw r0, r3, #3100 ; 0xc1c +100267d4: f8d3 1c28 ldr.w r1, [r3, #3112] ; 0xc28 +100267d8: e8bd 4010 ldmia.w sp!, {r4, lr} +100267dc: f010 bb2c b.w 10036e38 + +100267e0 <_rtw_init_sta_recv_priv>: +100267e0: b510 push {r4, lr} +100267e2: 2100 movs r1, #0 +100267e4: 4604 mov r4, r0 +100267e6: 2234 movs r2, #52 ; 0x34 +100267e8: f7f0 fe32 bl 10017450 +100267ec: 4620 mov r0, r4 +100267ee: f7f0 fedd bl 100175ac +100267f2: f104 0008 add.w r0, r4, #8 +100267f6: e8bd 4010 ldmia.w sp!, {r4, lr} +100267fa: f7f0 bedf b.w 100175bc + ... + +10026800 <_rtw_init_recv_priv>: +10026800: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +10026804: 4604 mov r4, r0 +10026806: 460e mov r6, r1 +10026808: 1d27 adds r7, r4, #4 +1002680a: f7f0 fecf bl 100175ac +1002680e: f504 7080 add.w r0, r4, #256 ; 0x100 +10026812: f7f0 fecb bl 100175ac +10026816: 4638 mov r0, r7 +10026818: f7f0 fed0 bl 100175bc +1002681c: f104 0010 add.w r0, r4, #16 +10026820: f7f0 fecc bl 100175bc +10026824: f104 001c add.w r0, r4, #28 +10026828: f7f0 fec8 bl 100175bc +1002682c: 2308 movs r3, #8 +1002682e: 6323 str r3, [r4, #48] ; 0x30 +10026830: 4631 mov r1, r6 +10026832: 6366 str r6, [r4, #52] ; 0x34 +10026834: 4620 mov r0, r4 +10026836: f00f fcd5 bl 100361e4 +1002683a: f44f 60ac mov.w r0, #1376 ; 0x560 +1002683e: f7f0 ffa7 bl 10017790 +10026842: 62a0 str r0, [r4, #40] ; 0x28 +10026844: b330 cbz r0, 10026894 <_rtw_init_recv_priv+0x94> +10026846: f100 05ff add.w r5, r0, #255 ; 0xff +1002684a: f025 05ff bic.w r5, r5, #255 ; 0xff +1002684e: 62e5 str r5, [r4, #44] ; 0x2c +10026850: f505 698c add.w r9, r5, #1120 ; 0x460 +10026854: 4628 mov r0, r5 +10026856: f7f0 fe03 bl 10017460 +1002685a: 4628 mov r0, r5 +1002685c: 4639 mov r1, r7 +1002685e: f7f0 fe0d bl 1001747c +10026862: 4629 mov r1, r5 +10026864: 4630 mov r0, r6 +10026866: f00f fcbf bl 100361e8 +1002686a: 2300 movs r3, #0 +1002686c: 672b str r3, [r5, #112] ; 0x70 +1002686e: 612e str r6, [r5, #16] +10026870: 358c adds r5, #140 ; 0x8c +10026872: 454d cmp r5, r9 +10026874: 4680 mov r8, r0 +10026876: d1ed bne.n 10026854 <_rtw_init_recv_priv+0x54> +10026878: 4b09 ldr r3, [pc, #36] ; (100268a0 <_rtw_init_recv_priv+0xa0>) +1002687a: f104 00cc add.w r0, r4, #204 ; 0xcc +1002687e: 9300 str r3, [sp, #0] +10026880: 4631 mov r1, r6 +10026882: 4633 mov r3, r6 +10026884: 4a07 ldr r2, [pc, #28] ; (100268a4 <_rtw_init_recv_priv+0xa4>) +10026886: f010 fad3 bl 10036e30 +1002688a: f44f 737a mov.w r3, #1000 ; 0x3e8 +1002688e: f8c4 30d8 str.w r3, [r4, #216] ; 0xd8 +10026892: e000 b.n 10026896 <_rtw_init_recv_priv+0x96> +10026894: 4680 mov r8, r0 +10026896: 4640 mov r0, r8 +10026898: b003 add sp, #12 +1002689a: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +1002689e: bf00 nop +100268a0: 100416db .word 0x100416db +100268a4: 10026743 .word 0x10026743 + +100268a8 : +100268a8: b510 push {r4, lr} +100268aa: 4604 mov r4, r0 +100268ac: f7f0 fe8c bl 100175c8 +100268b0: f504 7080 add.w r0, r4, #256 ; 0x100 +100268b4: f7f0 fe88 bl 100175c8 +100268b8: f104 000c add.w r0, r4, #12 +100268bc: f7f0 fe84 bl 100175c8 +100268c0: f104 0018 add.w r0, r4, #24 +100268c4: f7f0 fe80 bl 100175c8 +100268c8: f104 0024 add.w r0, r4, #36 ; 0x24 +100268cc: f7f0 fe7c bl 100175c8 +100268d0: f104 0088 add.w r0, r4, #136 ; 0x88 +100268d4: e8bd 4010 ldmia.w sp!, {r4, lr} +100268d8: f7f0 be76 b.w 100175c8 + +100268dc <_rtw_alloc_recvframe>: +100268dc: b538 push {r3, r4, r5, lr} +100268de: 4605 mov r5, r0 +100268e0: f7f0 fe5a bl 10017598 +100268e4: 2801 cmp r0, #1 +100268e6: d00f beq.n 10026908 <_rtw_alloc_recvframe+0x2c> +100268e8: 682c ldr r4, [r5, #0] +100268ea: 4620 mov r0, r4 +100268ec: f7f0 fdcc bl 10017488 +100268f0: 6923 ldr r3, [r4, #16] +100268f2: b153 cbz r3, 1002690a <_rtw_alloc_recvframe+0x2e> +100268f4: f603 3254 addw r2, r3, #2900 ; 0xb54 +100268f8: 4295 cmp r5, r2 +100268fa: d106 bne.n 1002690a <_rtw_alloc_recvframe+0x2e> +100268fc: f8d3 2b80 ldr.w r2, [r3, #2944] ; 0xb80 +10026900: 3a01 subs r2, #1 +10026902: f8c3 2b80 str.w r2, [r3, #2944] ; 0xb80 +10026906: e000 b.n 1002690a <_rtw_alloc_recvframe+0x2e> +10026908: 2400 movs r4, #0 +1002690a: 4620 mov r0, r4 +1002690c: bd38 pop {r3, r4, r5, pc} + +1002690e : +1002690e: b537 push {r0, r1, r2, r4, r5, lr} +10026910: f100 0408 add.w r4, r0, #8 +10026914: a901 add r1, sp, #4 +10026916: 4605 mov r5, r0 +10026918: 4620 mov r0, r4 +1002691a: f7f0 fe65 bl 100175e8 +1002691e: 4628 mov r0, r5 +10026920: f7ff ffdc bl 100268dc <_rtw_alloc_recvframe> +10026924: a901 add r1, sp, #4 +10026926: 4605 mov r5, r0 +10026928: 4620 mov r0, r4 +1002692a: f7f0 fe67 bl 100175fc +1002692e: 4628 mov r0, r5 +10026930: b003 add sp, #12 +10026932: bd30 pop {r4, r5, pc} + +10026934 : +10026934: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +10026938: 6904 ldr r4, [r0, #16] +1002693a: f641 0369 movw r3, #6249 ; 0x1869 +1002693e: 5ce3 ldrb r3, [r4, r3] +10026940: 4605 mov r5, r0 +10026942: 460f mov r7, r1 +10026944: b913 cbnz r3, 1002694c +10026946: f504 6635 add.w r6, r4, #2896 ; 0xb50 +1002694a: e007 b.n 1002695c +1002694c: f641 035c movw r3, #6236 ; 0x185c +10026950: 58e4 ldr r4, [r4, r3] +10026952: f504 6635 add.w r6, r4, #2896 ; 0xb50 +10026956: f604 3754 addw r7, r4, #2900 ; 0xb54 +1002695a: 6104 str r4, [r0, #16] +1002695c: 68a8 ldr r0, [r5, #8] +1002695e: b120 cbz r0, 1002696a +10026960: 69c1 ldr r1, [r0, #28] +10026962: f00f ff4f bl 10036804 +10026966: 2300 movs r3, #0 +10026968: 60ab str r3, [r5, #8] +1002696a: f107 0808 add.w r8, r7, #8 +1002696e: a901 add r1, sp, #4 +10026970: 4640 mov r0, r8 +10026972: f7f0 fe39 bl 100175e8 +10026976: 4628 mov r0, r5 +10026978: f7f0 fd86 bl 10017488 +1002697c: 2300 movs r3, #0 +1002697e: 672b str r3, [r5, #112] ; 0x70 +10026980: 4628 mov r0, r5 +10026982: 4639 mov r1, r7 +10026984: f7f0 fd7a bl 1001747c +10026988: b12c cbz r4, 10026996 +1002698a: 1d33 adds r3, r6, #4 +1002698c: 429f cmp r7, r3 +1002698e: d102 bne.n 10026996 +10026990: 6b33 ldr r3, [r6, #48] ; 0x30 +10026992: 3301 adds r3, #1 +10026994: 6333 str r3, [r6, #48] ; 0x30 +10026996: 6b33 ldr r3, [r6, #48] ; 0x30 +10026998: 2b08 cmp r3, #8 +1002699a: d90d bls.n 100269b8 +1002699c: 4b0a ldr r3, [pc, #40] ; (100269c8 ) +1002699e: 681b ldr r3, [r3, #0] +100269a0: b153 cbz r3, 100269b8 +100269a2: 480a ldr r0, [pc, #40] ; (100269cc ) +100269a4: f7f4 f8ec bl 1001ab80 +100269a8: 4b09 ldr r3, [pc, #36] ; (100269d0 ) +100269aa: 490a ldr r1, [pc, #40] ; (100269d4 ) +100269ac: f8d3 01ac ldr.w r0, [r3, #428] ; 0x1ac +100269b0: 6b32 ldr r2, [r6, #48] ; 0x30 +100269b2: 2308 movs r3, #8 +100269b4: f7f4 f8e4 bl 1001ab80 +100269b8: 4640 mov r0, r8 +100269ba: a901 add r1, sp, #4 +100269bc: f7f0 fe1e bl 100175fc +100269c0: 2001 movs r0, #1 +100269c2: b002 add sp, #8 +100269c4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100269c8: 10044f38 .word 0x10044f38 +100269cc: 100429b1 .word 0x100429b1 +100269d0: 10043ac4 .word 0x10043ac4 +100269d4: 100416be .word 0x100416be + +100269d8 <_rtw_enqueue_recvframe>: +100269d8: b570 push {r4, r5, r6, lr} +100269da: 4606 mov r6, r0 +100269dc: 6904 ldr r4, [r0, #16] +100269de: 460d mov r5, r1 +100269e0: f7f0 fd52 bl 10017488 +100269e4: 4630 mov r0, r6 +100269e6: 4629 mov r1, r5 +100269e8: f7f0 fd48 bl 1001747c +100269ec: b144 cbz r4, 10026a00 <_rtw_enqueue_recvframe+0x28> +100269ee: f604 3354 addw r3, r4, #2900 ; 0xb54 +100269f2: 429d cmp r5, r3 +100269f4: d104 bne.n 10026a00 <_rtw_enqueue_recvframe+0x28> +100269f6: f8d4 3b80 ldr.w r3, [r4, #2944] ; 0xb80 +100269fa: 3301 adds r3, #1 +100269fc: f8c4 3b80 str.w r3, [r4, #2944] ; 0xb80 +10026a00: 2001 movs r0, #1 +10026a02: bd70 pop {r4, r5, r6, pc} + +10026a04 : +10026a04: b573 push {r0, r1, r4, r5, r6, lr} +10026a06: f101 0408 add.w r4, r1, #8 +10026a0a: 4606 mov r6, r0 +10026a0c: 460d mov r5, r1 +10026a0e: 4620 mov r0, r4 +10026a10: a901 add r1, sp, #4 +10026a12: f7f0 fde9 bl 100175e8 +10026a16: 4629 mov r1, r5 +10026a18: 4630 mov r0, r6 +10026a1a: f7ff ffdd bl 100269d8 <_rtw_enqueue_recvframe> +10026a1e: a901 add r1, sp, #4 +10026a20: 4605 mov r5, r0 +10026a22: 4620 mov r0, r4 +10026a24: f7f0 fdea bl 100175fc +10026a28: 4628 mov r0, r5 +10026a2a: b002 add sp, #8 +10026a2c: bd70 pop {r4, r5, r6, pc} + +10026a2e : +10026a2e: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10026a32: f100 0608 add.w r6, r0, #8 +10026a36: 4605 mov r5, r0 +10026a38: 4630 mov r0, r6 +10026a3a: 460f mov r7, r1 +10026a3c: f7f0 fdcc bl 100175d8 +10026a40: 682c ldr r4, [r5, #0] +10026a42: 4628 mov r0, r5 +10026a44: 4621 mov r1, r4 +10026a46: f7f0 fdac bl 100175a2 +10026a4a: b938 cbnz r0, 10026a5c +10026a4c: f8d4 8000 ldr.w r8, [r4] +10026a50: 4620 mov r0, r4 +10026a52: 4639 mov r1, r7 +10026a54: f7ff ff6e bl 10026934 +10026a58: 4644 mov r4, r8 +10026a5a: e7f2 b.n 10026a42 +10026a5c: 4630 mov r0, r6 +10026a5e: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +10026a62: f7f0 bdc3 b.w 100175ec + +10026a66 : +10026a66: b570 push {r4, r5, r6, lr} +10026a68: f600 356c addw r5, r0, #2924 ; 0xb6c +10026a6c: 4606 mov r6, r0 +10026a6e: 4628 mov r0, r5 +10026a70: f7ff ff4d bl 1002690e +10026a74: 2400 movs r4, #0 +10026a76: b140 cbz r0, 10026a8a +10026a78: f606 3154 addw r1, r6, #2900 ; 0xb54 +10026a7c: f7ff ff5a bl 10026934 +10026a80: 4628 mov r0, r5 +10026a82: 3401 adds r4, #1 +10026a84: f7ff ff43 bl 1002690e +10026a88: e7f5 b.n 10026a76 +10026a8a: 4620 mov r0, r4 +10026a8c: bd70 pop {r4, r5, r6, pc} + +10026a8e <_rtw_free_recv_priv>: +10026a8e: b538 push {r3, r4, r5, lr} +10026a90: 6b45 ldr r5, [r0, #52] ; 0x34 +10026a92: 4604 mov r4, r0 +10026a94: 4628 mov r0, r5 +10026a96: f7e6 fddb bl 1000d650 +10026a9a: 4628 mov r0, r5 +10026a9c: f7ff ffe3 bl 10026a66 +10026aa0: 4620 mov r0, r4 +10026aa2: f7ff ff01 bl 100268a8 +10026aa6: 4620 mov r0, r4 +10026aa8: f00f fba3 bl 100361f2 +10026aac: 6aa0 ldr r0, [r4, #40] ; 0x28 +10026aae: b128 cbz r0, 10026abc <_rtw_free_recv_priv+0x2e> +10026ab0: f44f 61ac mov.w r1, #1376 ; 0x560 +10026ab4: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10026ab8: f7f0 bcb5 b.w 10017426 +10026abc: bd38 pop {r3, r4, r5, pc} + +10026abe : +10026abe: 2000 movs r0, #0 +10026ac0: 4770 bx lr + +10026ac2 : +10026ac2: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} +10026ac6: 460c mov r4, r1 +10026ac8: 4605 mov r5, r0 +10026aca: 3142 adds r1, #66 ; 0x42 +10026acc: f500 6046 add.w r0, r0, #3168 ; 0xc60 +10026ad0: f001 fbf0 bl 100282b4 +10026ad4: f894 302f ldrb.w r3, [r4, #47] ; 0x2f +10026ad8: 2b02 cmp r3, #2 +10026ada: d117 bne.n 10026b0c +10026adc: b908 cbnz r0, 10026ae2 +10026ade: 2501 movs r5, #1 +10026ae0: e00f b.n 10026b02 +10026ae2: f894 3048 ldrb.w r3, [r4, #72] ; 0x48 +10026ae6: 07de lsls r6, r3, #31 +10026ae8: d412 bmi.n 10026b10 +10026aea: e05b b.n 10026ba4 +10026aec: f894 1048 ldrb.w r1, [r4, #72] ; 0x48 +10026af0: f011 0101 ands.w r1, r1, #1 +10026af4: d159 bne.n 10026baa +10026af6: 2301 movs r3, #1 +10026af8: f894 202e ldrb.w r2, [r4, #46] ; 0x2e +10026afc: 2a01 cmp r2, #1 +10026afe: d03d beq.n 10026b7c +10026b00: 2500 movs r5, #0 +10026b02: 4620 mov r0, r4 +10026b04: 2108 movs r1, #8 +10026b06: f7ff fe0b bl 10026720 +10026b0a: e056 b.n 10026bba +10026b0c: 2501 movs r5, #1 +10026b0e: e054 b.n 10026bba +10026b10: f241 035c movw r3, #4188 ; 0x105c +10026b14: 5ceb ldrb r3, [r5, r3] +10026b16: f894 0058 ldrb.w r0, [r4, #88] ; 0x58 +10026b1a: 2b00 cmp r3, #0 +10026b1c: d040 beq.n 10026ba0 +10026b1e: eb05 1000 add.w r0, r5, r0, lsl #4 +10026b22: f600 50ec addw r0, r0, #3564 ; 0xdec +10026b26: f894 3021 ldrb.w r3, [r4, #33] ; 0x21 +10026b2a: 6f27 ldr r7, [r4, #112] ; 0x70 +10026b2c: f894 2031 ldrb.w r2, [r4, #49] ; 0x31 +10026b30: 1aff subs r7, r7, r3 +10026b32: f894 8030 ldrb.w r8, [r4, #48] ; 0x30 +10026b36: 1abf subs r7, r7, r2 +10026b38: 6fa1 ldr r1, [r4, #120] ; 0x78 +10026b3a: 3f08 subs r7, #8 +10026b3c: ebc8 0707 rsb r7, r8, r7 +10026b40: 4498 add r8, r3 +10026b42: f894 3025 ldrb.w r3, [r4, #37] ; 0x25 +10026b46: 4488 add r8, r1 +10026b48: ae02 add r6, sp, #8 +10026b4a: 9301 str r3, [sp, #4] +10026b4c: 9600 str r6, [sp, #0] +10026b4e: 463b mov r3, r7 +10026b50: 4642 mov r2, r8 +10026b52: f017 fe81 bl 1003e858 <__rtw_seccalctkipmic_veneer> +10026b56: 2000 movs r0, #0 +10026b58: 4447 add r7, r8 +10026b5a: 4601 mov r1, r0 +10026b5c: 5c72 ldrb r2, [r6, r1] +10026b5e: 5c7b ldrb r3, [r7, r1] +10026b60: 3101 adds r1, #1 +10026b62: 429a cmp r2, r3 +10026b64: bf18 it ne +10026b66: 2001 movne r0, #1 +10026b68: 2908 cmp r1, #8 +10026b6a: d1f7 bne.n 10026b5c +10026b6c: 2801 cmp r0, #1 +10026b6e: d10b bne.n 10026b88 +10026b70: 6f22 ldr r2, [r4, #112] ; 0x70 +10026b72: 2300 movs r3, #0 +10026b74: 4293 cmp r3, r2 +10026b76: d2b9 bcs.n 10026aec +10026b78: 3308 adds r3, #8 +10026b7a: e7fb b.n 10026b74 +10026b7c: 2b00 cmp r3, #0 +10026b7e: d0bf beq.n 10026b00 +10026b80: 4628 mov r0, r5 +10026b82: f00f fb87 bl 10036294 +10026b86: e7bb b.n 10026b00 +10026b88: f241 025e movw r2, #4190 ; 0x105e +10026b8c: 5cab ldrb r3, [r5, r2] +10026b8e: 2b00 cmp r3, #0 +10026b90: d1a5 bne.n 10026ade +10026b92: f894 3048 ldrb.w r3, [r4, #72] ; 0x48 +10026b96: 07d9 lsls r1, r3, #31 +10026b98: d5a1 bpl.n 10026ade +10026b9a: 2301 movs r3, #1 +10026b9c: 54ab strb r3, [r5, r2] +10026b9e: e79e b.n 10026ade +10026ba0: 461d mov r5, r3 +10026ba2: e00a b.n 10026bba +10026ba4: f500 7094 add.w r0, r0, #296 ; 0x128 +10026ba8: e7bd b.n 10026b26 +10026baa: f8d5 36a0 ldr.w r3, [r5, #1696] ; 0x6a0 +10026bae: f894 2058 ldrb.w r2, [r4, #88] ; 0x58 +10026bb2: 1ad2 subs r2, r2, r3 +10026bb4: 4253 negs r3, r2 +10026bb6: 4153 adcs r3, r2 +10026bb8: e79e b.n 10026af8 +10026bba: 4628 mov r0, r5 +10026bbc: b004 add sp, #16 +10026bbe: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10026bc2 : +10026bc2: b570 push {r4, r5, r6, lr} +10026bc4: f891 302f ldrb.w r3, [r1, #47] ; 0x2f +10026bc8: 4605 mov r5, r0 +10026bca: 460c mov r4, r1 +10026bcc: f891 202e ldrb.w r2, [r1, #46] ; 0x2e +10026bd0: 2b00 cmp r3, #0 +10026bd2: d033 beq.n 10026c3c +10026bd4: f891 0021 ldrb.w r0, [r1, #33] ; 0x21 +10026bd8: 6f89 ldr r1, [r1, #120] ; 0x78 +10026bda: 4401 add r1, r0 +10026bdc: 78c9 ldrb r1, [r1, #3] +10026bde: 0989 lsrs r1, r1, #6 +10026be0: f884 1058 strb.w r1, [r4, #88] ; 0x58 +10026be4: b122 cbz r2, 10026bf0 +10026be6: f241 0164 movw r1, #4196 ; 0x1064 +10026bea: 5869 ldr r1, [r5, r1] +10026bec: 2901 cmp r1, #1 +10026bee: d125 bne.n 10026c3c +10026bf0: f894 3048 ldrb.w r3, [r4, #72] ; 0x48 +10026bf4: f013 0301 ands.w r3, r3, #1 +10026bf8: d02f beq.n 10026c5a +10026bfa: f894 302f ldrb.w r3, [r4, #47] ; 0x2f +10026bfe: 3b01 subs r3, #1 +10026c00: 2b04 cmp r3, #4 +10026c02: d82e bhi.n 10026c62 +10026c04: e8df f003 tbb [pc, r3] +10026c08: 0d2d0803 .word 0x0d2d0803 +10026c0c: 03 .byte 0x03 +10026c0d: 00 .byte 0x00 +10026c0e: 4628 mov r0, r5 +10026c10: 4621 mov r1, r4 +10026c12: f000 ff8c bl 10027b2e +10026c16: e024 b.n 10026c62 +10026c18: 4628 mov r0, r5 +10026c1a: 4621 mov r1, r4 +10026c1c: f000 ffe0 bl 10027be0 +10026c20: e003 b.n 10026c2a +10026c22: 4628 mov r0, r5 +10026c24: 4621 mov r1, r4 +10026c26: f001 f848 bl 10027cba +10026c2a: 4606 mov r6, r0 +10026c2c: b9c8 cbnz r0, 10026c62 +10026c2e: 4620 mov r0, r4 +10026c30: f605 3154 addw r1, r5, #2900 ; 0xb54 +10026c34: f7ff fe7e bl 10026934 +10026c38: 4634 mov r4, r6 +10026c3a: e012 b.n 10026c62 +10026c3c: 2a01 cmp r2, #1 +10026c3e: d110 bne.n 10026c62 +10026c40: b17b cbz r3, 10026c62 +10026c42: f241 025d movw r2, #4189 ; 0x105d +10026c46: 5caa ldrb r2, [r5, r2] +10026c48: 2a01 cmp r2, #1 +10026c4a: d001 beq.n 10026c50 +10026c4c: 2b02 cmp r3, #2 +10026c4e: d008 beq.n 10026c62 +10026c50: 2201 movs r2, #1 +10026c52: f241 0368 movw r3, #4200 ; 0x1068 +10026c56: 50ea str r2, [r5, r3] +10026c58: e003 b.n 10026c62 +10026c5a: f241 0268 movw r2, #4200 ; 0x1068 +10026c5e: 50ab str r3, [r5, r2] +10026c60: e7cb b.n 10026bfa +10026c62: 4620 mov r0, r4 +10026c64: bd70 pop {r4, r5, r6, pc} + +10026c66 : +10026c66: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +10026c6a: 2300 movs r3, #0 +10026c6c: 4605 mov r5, r0 +10026c6e: f8ad 3006 strh.w r3, [sp, #6] +10026c72: f500 6046 add.w r0, r0, #3168 ; 0xc60 +10026c76: f8d5 8d08 ldr.w r8, [r5, #3336] ; 0xd08 +10026c7a: 460c mov r4, r1 +10026c7c: b109 cbz r1, 10026c82 +10026c7e: 6f8f ldr r7, [r1, #120] ; 0x78 +10026c80: e000 b.n 10026c84 +10026c82: 460f mov r7, r1 +10026c84: f104 0142 add.w r1, r4, #66 ; 0x42 +10026c88: f001 fb14 bl 100282b4 +10026c8c: f894 3030 ldrb.w r3, [r4, #48] ; 0x30 +10026c90: f894 1021 ldrb.w r1, [r4, #33] ; 0x21 +10026c94: 2202 movs r2, #2 +10026c96: 4419 add r1, r3 +10026c98: 3106 adds r1, #6 +10026c9a: 4439 add r1, r7 +10026c9c: 4606 mov r6, r0 +10026c9e: f10d 0006 add.w r0, sp, #6 +10026ca2: f7f0 fbc5 bl 10017430 +10026ca6: f8bd 0006 ldrh.w r0, [sp, #6] +10026caa: f7f0 fb7b bl 100173a4 <_htons> +10026cae: f1b8 0f02 cmp.w r8, #2 +10026cb2: f8ad 0006 strh.w r0, [sp, #6] +10026cb6: d10d bne.n 10026cd4 +10026cb8: b166 cbz r6, 10026cd4 +10026cba: f8d6 3110 ldr.w r3, [r6, #272] ; 0x110 +10026cbe: b14b cbz r3, 10026cd4 +10026cc0: f648 038e movw r3, #34958 ; 0x888e +10026cc4: 4298 cmp r0, r3 +10026cc6: d005 beq.n 10026cd4 +10026cc8: 4620 mov r0, r4 +10026cca: f605 3154 addw r1, r5, #2900 ; 0xb54 +10026cce: f7ff fe31 bl 10026934 +10026cd2: 2400 movs r4, #0 +10026cd4: 4620 mov r0, r4 +10026cd6: b002 add sp, #8 +10026cd8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10026cdc : +10026cdc: b510 push {r4, lr} +10026cde: f890 3025 ldrb.w r3, [r0, #37] ; 0x25 +10026ce2: 8d04 ldrh r4, [r0, #40] ; 0x28 +10026ce4: 2b0f cmp r3, #15 +10026ce6: f890 102a ldrb.w r1, [r0, #42] ; 0x2a +10026cea: dc0c bgt.n 10026d06 +10026cec: f001 010f and.w r1, r1, #15 +10026cf0: ea41 1104 orr.w r1, r1, r4, lsl #4 +10026cf4: f832 0013 ldrh.w r0, [r2, r3, lsl #1] +10026cf8: b289 uxth r1, r1 +10026cfa: 4288 cmp r0, r1 +10026cfc: d003 beq.n 10026d06 +10026cfe: f822 1013 strh.w r1, [r2, r3, lsl #1] +10026d02: 2001 movs r0, #1 +10026d04: bd10 pop {r4, pc} +10026d06: 2000 movs r0, #0 +10026d08: bd10 pop {r4, pc} + +10026d0a : +10026d0a: b538 push {r3, r4, r5, lr} +10026d0c: 313c adds r1, #60 ; 0x3c +10026d0e: 6bcd ldr r5, [r1, #60] ; 0x3c +10026d10: 4604 mov r4, r0 +10026d12: f500 6046 add.w r0, r0, #3168 ; 0xc60 +10026d16: f001 facd bl 100282b4 +10026d1a: 882a ldrh r2, [r5, #0] +10026d1c: 4601 mov r1, r0 +10026d1e: f402 5280 and.w r2, r2, #4096 ; 0x1000 +10026d22: b292 uxth r2, r2 +10026d24: b180 cbz r0, 10026d48 +10026d26: f8d0 30f8 ldr.w r3, [r0, #248] ; 0xf8 +10026d2a: b132 cbz r2, 10026d3a +10026d2c: 075a lsls r2, r3, #29 +10026d2e: d40b bmi.n 10026d48 +10026d30: 4620 mov r0, r4 +10026d32: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10026d36: f003 b978 b.w 1002a02a +10026d3a: 075b lsls r3, r3, #29 +10026d3c: d504 bpl.n 10026d48 +10026d3e: 4620 mov r0, r4 +10026d40: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10026d44: f003 b9e5 b.w 1002a112 +10026d48: bd38 pop {r3, r4, r5, pc} + +10026d4a : +10026d4a: b538 push {r3, r4, r5, lr} +10026d4c: 4604 mov r4, r0 +10026d4e: 460d mov r5, r1 +10026d50: f500 6046 add.w r0, r0, #3168 ; 0xc60 +10026d54: 313c adds r1, #60 ; 0x3c +10026d56: f001 faad bl 100282b4 +10026d5a: 4601 mov r1, r0 +10026d5c: b3c0 cbz r0, 10026dd0 +10026d5e: f8d0 3104 ldr.w r3, [r0, #260] ; 0x104 +10026d62: b3ab cbz r3, 10026dd0 +10026d64: f890 3310 ldrb.w r3, [r0, #784] ; 0x310 +10026d68: 0718 lsls r0, r3, #28 +10026d6a: d031 beq.n 10026dd0 +10026d6c: f8d1 30f8 ldr.w r3, [r1, #248] ; 0xf8 +10026d70: 075a lsls r2, r3, #29 +10026d72: d52d bpl.n 10026dd0 +10026d74: f895 2025 ldrb.w r2, [r5, #37] ; 0x25 +10026d78: 1e53 subs r3, r2, #1 +10026d7a: b2db uxtb r3, r3 +10026d7c: 2b06 cmp r3, #6 +10026d7e: d813 bhi.n 10026da8 +10026d80: 2001 movs r0, #1 +10026d82: fa00 f303 lsl.w r3, r0, r3 +10026d86: f013 0f60 tst.w r3, #96 ; 0x60 +10026d8a: d10a bne.n 10026da2 +10026d8c: f013 0f18 tst.w r3, #24 +10026d90: d104 bne.n 10026d9c +10026d92: 079b lsls r3, r3, #30 +10026d94: d008 beq.n 10026da8 +10026d96: f891 3312 ldrb.w r3, [r1, #786] ; 0x312 +10026d9a: e007 b.n 10026dac +10026d9c: f891 3314 ldrb.w r3, [r1, #788] ; 0x314 +10026da0: e004 b.n 10026dac +10026da2: f891 3315 ldrb.w r3, [r1, #789] ; 0x315 +10026da6: e001 b.n 10026dac +10026da8: f891 3313 ldrb.w r3, [r1, #787] ; 0x313 +10026dac: f003 0302 and.w r3, r3, #2 +10026db0: b2db uxtb r3, r3 +10026db2: b16b cbz r3, 10026dd0 +10026db4: f8d1 3318 ldr.w r3, [r1, #792] ; 0x318 +10026db8: 4620 mov r0, r4 +10026dba: b11b cbz r3, 10026dc4 +10026dbc: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10026dc0: f003 babb b.w 1002a33a +10026dc4: f501 7184 add.w r1, r1, #264 ; 0x108 +10026dc8: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10026dcc: f7f9 ba0f b.w 100201ee +10026dd0: bd38 pop {r3, r4, r5, pc} + +10026dd2 : +10026dd2: b5f0 push {r4, r5, r6, r7, lr} +10026dd4: 6f0c ldr r4, [r1, #112] ; 0x70 +10026dd6: f500 6335 add.w r3, r0, #2896 ; 0xb50 +10026dda: e9d3 6710 ldrd r6, r7, [r3, #64] ; 0x40 +10026dde: 17e5 asrs r5, r4, #31 +10026de0: 1936 adds r6, r6, r4 +10026de2: eb47 0705 adc.w r7, r7, r5 +10026de6: e9c3 6710 strd r6, r7, [r3, #64] ; 0x40 +10026dea: f8d0 3480 ldr.w r3, [r0, #1152] ; 0x480 +10026dee: 3301 adds r3, #1 +10026df0: f8c0 3480 str.w r3, [r0, #1152] ; 0x480 +10026df4: 8ece ldrh r6, [r1, #54] ; 0x36 +10026df6: f64f 73ff movw r3, #65535 ; 0xffff +10026dfa: 429e cmp r6, r3 +10026dfc: d102 bne.n 10026e04 +10026dfe: 6b8b ldr r3, [r1, #56] ; 0x38 +10026e00: 3301 adds r3, #1 +10026e02: d003 beq.n 10026e0c +10026e04: f891 3036 ldrb.w r3, [r1, #54] ; 0x36 +10026e08: 07db lsls r3, r3, #31 +10026e0a: d514 bpl.n 10026e36 +10026e0c: b912 cbnz r2, 10026e14 +10026e0e: f8d1 2088 ldr.w r2, [r1, #136] ; 0x88 +10026e12: b1b2 cbz r2, 10026e42 +10026e14: f502 72c0 add.w r2, r2, #384 ; 0x180 +10026e18: e9d2 0104 ldrd r0, r1, [r2, #16] +10026e1c: 3001 adds r0, #1 +10026e1e: f141 0100 adc.w r1, r1, #0 +10026e22: e9c2 0104 strd r0, r1, [r2, #16] +10026e26: e9d2 010c ldrd r0, r1, [r2, #48] ; 0x30 +10026e2a: 1824 adds r4, r4, r0 +10026e2c: eb45 0501 adc.w r5, r5, r1 +10026e30: e9c2 450c strd r4, r5, [r2, #48] ; 0x30 +10026e34: bdf0 pop {r4, r5, r6, r7, pc} +10026e36: f8d0 3484 ldr.w r3, [r0, #1156] ; 0x484 +10026e3a: 3301 adds r3, #1 +10026e3c: f8c0 3484 str.w r3, [r0, #1156] ; 0x484 +10026e40: e7e4 b.n 10026e0c +10026e42: bdf0 pop {r4, r5, r6, r7, pc} + +10026e44 : +10026e44: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10026e48: 6905 ldr r5, [r0, #16] +10026e4a: f891 8036 ldrb.w r8, [r1, #54] ; 0x36 +10026e4e: f015 0f60 tst.w r5, #96 ; 0x60 +10026e52: 4606 mov r6, r0 +10026e54: 460c mov r4, r1 +10026e56: 4691 mov r9, r2 +10026e58: 6f8f ldr r7, [r1, #120] ; 0x78 +10026e5a: f100 0a9c add.w sl, r0, #156 ; 0x9c +10026e5e: f008 0801 and.w r8, r8, #1 +10026e62: d028 beq.n 10026eb6 +10026e64: f500 57a4 add.w r7, r0, #5248 ; 0x1480 +10026e68: 3719 adds r7, #25 +10026e6a: f101 053c add.w r5, r1, #60 ; 0x3c +10026e6e: 4638 mov r0, r7 +10026e70: 4629 mov r1, r5 +10026e72: 2206 movs r2, #6 +10026e74: f7f0 fae4 bl 10017440 +10026e78: b108 cbz r0, 10026e7e +10026e7a: 2400 movs r4, #0 +10026e7c: e07b b.n 10026f76 +10026e7e: 4638 mov r0, r7 +10026e80: f104 0136 add.w r1, r4, #54 ; 0x36 +10026e84: 2206 movs r2, #6 +10026e86: f7f0 fadb bl 10017440 +10026e8a: b910 cbnz r0, 10026e92 +10026e8c: f1b8 0f00 cmp.w r8, #0 +10026e90: d0f3 beq.n 10026e7a +10026e92: 344e adds r4, #78 ; 0x4e +10026e94: 4620 mov r0, r4 +10026e96: 4939 ldr r1, [pc, #228] ; (10026f7c ) +10026e98: 2206 movs r2, #6 +10026e9a: f7f0 fad1 bl 10017440 +10026e9e: 2800 cmp r0, #0 +10026ea0: d1eb bne.n 10026e7a +10026ea2: 4650 mov r0, sl +10026ea4: 4935 ldr r1, [pc, #212] ; (10026f7c ) +10026ea6: 2206 movs r2, #6 +10026ea8: f7f0 faca bl 10017440 +10026eac: 2800 cmp r0, #0 +10026eae: d1e4 bne.n 10026e7a +10026eb0: 4620 mov r0, r4 +10026eb2: 4651 mov r1, sl +10026eb4: e005 b.n 10026ec2 +10026eb6: 072a lsls r2, r5, #28 +10026eb8: d509 bpl.n 10026ece +10026eba: f101 054e add.w r5, r1, #78 ; 0x4e +10026ebe: 4628 mov r0, r5 +10026ec0: 313c adds r1, #60 ; 0x3c +10026ec2: 2206 movs r2, #6 +10026ec4: f7f0 fabc bl 10017440 +10026ec8: 2800 cmp r0, #0 +10026eca: d152 bne.n 10026f72 +10026ecc: e7d5 b.n 10026e7a +10026ece: 06eb lsls r3, r5, #27 +10026ed0: d407 bmi.n 10026ee2 +10026ed2: f415 3580 ands.w r5, r5, #65536 ; 0x10000 +10026ed6: d129 bne.n 10026f2c +10026ed8: 462c mov r4, r5 +10026eda: f1b8 0f00 cmp.w r8, #0 +10026ede: d018 beq.n 10026f12 +10026ee0: e007 b.n 10026ef2 +10026ee2: f1b8 0f00 cmp.w r8, #0 +10026ee6: d008 beq.n 10026efa +10026ee8: f894 304e ldrb.w r3, [r4, #78] ; 0x4e +10026eec: 07d9 lsls r1, r3, #31 +10026eee: d5c4 bpl.n 10026e7a +10026ef0: 2401 movs r4, #1 +10026ef2: 4630 mov r0, r6 +10026ef4: f001 fa34 bl 10028360 +10026ef8: e010 b.n 10026f1c +10026efa: f104 004e add.w r0, r4, #78 ; 0x4e +10026efe: f104 0136 add.w r1, r4, #54 ; 0x36 +10026f02: 2206 movs r2, #6 +10026f04: f7f0 fa9c bl 10017440 +10026f08: 2800 cmp r0, #0 +10026f0a: d0b6 beq.n 10026e7a +10026f0c: f104 053c add.w r5, r4, #60 ; 0x3c +10026f10: 2401 movs r4, #1 +10026f12: f506 6046 add.w r0, r6, #3168 ; 0xc60 +10026f16: 4629 mov r1, r5 +10026f18: f001 f9cc bl 100282b4 +10026f1c: f8c9 0000 str.w r0, [r9] +10026f20: f8d9 3000 ldr.w r3, [r9] +10026f24: 2b00 cmp r3, #0 +10026f26: bf08 it eq +10026f28: 2400 moveq r4, #0 +10026f2a: e024 b.n 10026f76 +10026f2c: f101 0b36 add.w fp, r1, #54 ; 0x36 +10026f30: f104 053c add.w r5, r4, #60 ; 0x3c +10026f34: 4658 mov r0, fp +10026f36: 1d39 adds r1, r7, #4 +10026f38: 2206 movs r2, #6 +10026f3a: f7f0 fa79 bl 10017430 +10026f3e: 4628 mov r0, r5 +10026f40: f107 010a add.w r1, r7, #10 +10026f44: 2206 movs r2, #6 +10026f46: f7f0 fa73 bl 10017430 +10026f4a: f104 004e add.w r0, r4, #78 ; 0x4e +10026f4e: f107 0110 add.w r1, r7, #16 +10026f52: 2206 movs r2, #6 +10026f54: f7f0 fa6c bl 10017430 +10026f58: f104 0048 add.w r0, r4, #72 ; 0x48 +10026f5c: 4659 mov r1, fp +10026f5e: 2206 movs r2, #6 +10026f60: f7f0 fa66 bl 10017430 +10026f64: 4629 mov r1, r5 +10026f66: f104 0042 add.w r0, r4, #66 ; 0x42 +10026f6a: 2206 movs r2, #6 +10026f6c: f7f0 fa60 bl 10017430 +10026f70: 4655 mov r5, sl +10026f72: 2401 movs r4, #1 +10026f74: e7b1 b.n 10026eda +10026f76: 4620 mov r0, r4 +10026f78: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +10026f7c: 100416b7 .word 0x100416b7 + +10026f80 : +10026f80: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10026f84: 6903 ldr r3, [r0, #16] +10026f86: 4616 mov r6, r2 +10026f88: 071a lsls r2, r3, #28 +10026f8a: 4605 mov r5, r0 +10026f8c: 460c mov r4, r1 +10026f8e: 6f8f ldr r7, [r1, #120] ; 0x78 +10026f90: f500 6946 add.w r9, r0, #3168 ; 0xc60 +10026f94: f100 089c add.w r8, r0, #156 ; 0x9c +10026f98: f891 a036 ldrb.w sl, [r1, #54] ; 0x36 +10026f9c: d502 bpl.n 10026fa4 +10026f9e: f013 0f81 tst.w r3, #129 ; 0x81 +10026fa2: d107 bne.n 10026fb4 +10026fa4: f003 1301 and.w r3, r3, #65537 ; 0x10001 +10026fa8: f1b3 1f01 cmp.w r3, #65537 ; 0x10001 +10026fac: d049 beq.n 10027042 +10026fae: 2000 movs r0, #0 +10026fb0: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +10026fb4: 883b ldrh r3, [r7, #0] +10026fb6: f003 02fc and.w r2, r3, #252 ; 0xfc +10026fba: 2a48 cmp r2, #72 ; 0x48 +10026fbc: d0f7 beq.n 10026fae +10026fbe: f003 0288 and.w r2, r3, #136 ; 0x88 +10026fc2: 2a88 cmp r2, #136 ; 0x88 +10026fc4: d102 bne.n 10026fcc +10026fc6: f013 0f70 tst.w r3, #112 ; 0x70 +10026fca: d1f0 bne.n 10026fae +10026fcc: f505 57a4 add.w r7, r5, #5248 ; 0x1480 +10026fd0: 3719 adds r7, #25 +10026fd2: 4638 mov r0, r7 +10026fd4: f104 013c add.w r1, r4, #60 ; 0x3c +10026fd8: 2206 movs r2, #6 +10026fda: f7f0 fa31 bl 10017440 +10026fde: 2800 cmp r0, #0 +10026fe0: d1e5 bne.n 10026fae +10026fe2: 4638 mov r0, r7 +10026fe4: f104 0136 add.w r1, r4, #54 ; 0x36 +10026fe8: 2206 movs r2, #6 +10026fea: f00a 0a01 and.w sl, sl, #1 +10026fee: f7f0 fa27 bl 10017440 +10026ff2: b910 cbnz r0, 10026ffa +10026ff4: f1ba 0f00 cmp.w sl, #0 +10026ff8: d0d9 beq.n 10026fae +10026ffa: 344e adds r4, #78 ; 0x4e +10026ffc: 4620 mov r0, r4 +10026ffe: 492a ldr r1, [pc, #168] ; (100270a8 ) +10027000: 2206 movs r2, #6 +10027002: f7f0 fa1d bl 10017440 +10027006: 2800 cmp r0, #0 +10027008: d1d1 bne.n 10026fae +1002700a: 4640 mov r0, r8 +1002700c: 4926 ldr r1, [pc, #152] ; (100270a8 ) +1002700e: 2206 movs r2, #6 +10027010: f7f0 fa16 bl 10017440 +10027014: 2800 cmp r0, #0 +10027016: d1ca bne.n 10026fae +10027018: 4620 mov r0, r4 +1002701a: 4641 mov r1, r8 +1002701c: 2206 movs r2, #6 +1002701e: f7f0 fa0f bl 10017440 +10027022: 2800 cmp r0, #0 +10027024: d0c3 beq.n 10026fae +10027026: f1ba 0f00 cmp.w sl, #0 +1002702a: d003 beq.n 10027034 +1002702c: 4628 mov r0, r5 +1002702e: f001 f997 bl 10028360 +10027032: e003 b.n 1002703c +10027034: 4648 mov r0, r9 +10027036: 4621 mov r1, r4 +10027038: f001 f93c bl 100282b4 +1002703c: 6030 str r0, [r6, #0] +1002703e: 6830 ldr r0, [r6, #0] +10027040: e02c b.n 1002709c +10027042: f104 0b36 add.w fp, r4, #54 ; 0x36 +10027046: 4658 mov r0, fp +10027048: 1d39 adds r1, r7, #4 +1002704a: 2206 movs r2, #6 +1002704c: f104 0a3c add.w sl, r4, #60 ; 0x3c +10027050: f7f0 f9ee bl 10017430 +10027054: f104 054e add.w r5, r4, #78 ; 0x4e +10027058: 4650 mov r0, sl +1002705a: f107 010a add.w r1, r7, #10 +1002705e: 2206 movs r2, #6 +10027060: f7f0 f9e6 bl 10017430 +10027064: 4628 mov r0, r5 +10027066: f107 0110 add.w r1, r7, #16 +1002706a: 2206 movs r2, #6 +1002706c: f7f0 f9e0 bl 10017430 +10027070: f104 0048 add.w r0, r4, #72 ; 0x48 +10027074: 4659 mov r1, fp +10027076: 2206 movs r2, #6 +10027078: f7f0 f9da bl 10017430 +1002707c: f104 0042 add.w r0, r4, #66 ; 0x42 +10027080: 4651 mov r1, sl +10027082: 2206 movs r2, #6 +10027084: f7f0 f9d4 bl 10017430 +10027088: 4628 mov r0, r5 +1002708a: 4641 mov r1, r8 +1002708c: 2206 movs r2, #6 +1002708e: f7f0 f9cf bl 10017430 +10027092: 4648 mov r0, r9 +10027094: 4629 mov r1, r5 +10027096: f001 f90d bl 100282b4 +1002709a: 6030 str r0, [r6, #0] +1002709c: 3000 adds r0, #0 +1002709e: bf18 it ne +100270a0: 2001 movne r0, #1 +100270a2: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +100270a6: bf00 nop +100270a8: 100416b7 .word 0x100416b7 + +100270ac : +100270ac: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +100270b0: 6903 ldr r3, [r0, #16] +100270b2: 4604 mov r4, r0 +100270b4: 06db lsls r3, r3, #27 +100270b6: 460d mov r5, r1 +100270b8: 4616 mov r6, r2 +100270ba: f8d1 8078 ldr.w r8, [r1, #120] ; 0x78 +100270be: d51e bpl.n 100270fe +100270c0: f101 004e add.w r0, r1, #78 ; 0x4e +100270c4: 2206 movs r2, #6 +100270c6: f104 019c add.w r1, r4, #156 ; 0x9c +100270ca: f7f0 f9b9 bl 10017440 +100270ce: b338 cbz r0, 10027120 +100270d0: f105 073c add.w r7, r5, #60 ; 0x3c +100270d4: f504 6046 add.w r0, r4, #3168 ; 0xc60 +100270d8: 4639 mov r1, r7 +100270da: f001 f8eb bl 100282b4 +100270de: 6030 str r0, [r6, #0] +100270e0: b180 cbz r0, 10027104 +100270e2: 4620 mov r0, r4 +100270e4: 4629 mov r1, r5 +100270e6: f7ff fe10 bl 10026d0a +100270ea: f8b8 2000 ldrh.w r2, [r8] +100270ee: f002 03fc and.w r3, r2, #252 ; 0xfc +100270f2: 2b48 cmp r3, #72 ; 0x48 +100270f4: d00f beq.n 10027116 +100270f6: f002 0288 and.w r2, r2, #136 ; 0x88 +100270fa: 2a88 cmp r2, #136 ; 0x88 +100270fc: d013 beq.n 10027126 +100270fe: 2001 movs r0, #1 +10027100: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10027104: f894 5901 ldrb.w r5, [r4, #2305] ; 0x901 +10027108: b955 cbnz r5, 10027120 +1002710a: 4620 mov r0, r4 +1002710c: 4639 mov r1, r7 +1002710e: 2207 movs r2, #7 +10027110: f7f9 f918 bl 10020344 +10027114: e004 b.n 10027120 +10027116: 4620 mov r0, r4 +10027118: 4629 mov r1, r5 +1002711a: 6832 ldr r2, [r6, #0] +1002711c: f7ff fe59 bl 10026dd2 +10027120: 2000 movs r0, #0 +10027122: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10027126: 2bc8 cmp r3, #200 ; 0xc8 +10027128: d0f5 beq.n 10027116 +1002712a: 4620 mov r0, r4 +1002712c: 4629 mov r1, r5 +1002712e: f7ff fe0c bl 10026d4a +10027132: e7e4 b.n 100270fe + +10027134 : +10027134: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +10027138: 6f8c ldr r4, [r1, #120] ; 0x78 +1002713a: 4605 mov r5, r0 +1002713c: 8823 ldrh r3, [r4, #0] +1002713e: 460e mov r6, r1 +10027140: f003 030c and.w r3, r3, #12 +10027144: 2b04 cmp r3, #4 +10027146: f040 80be bne.w 100272c6 +1002714a: f505 51a4 add.w r1, r5, #5248 ; 0x1480 +1002714e: 1d20 adds r0, r4, #4 +10027150: 3119 adds r1, #25 +10027152: 2206 movs r2, #6 +10027154: f7f0 f974 bl 10017440 +10027158: 2800 cmp r0, #0 +1002715a: f000 80b4 beq.w 100272c6 +1002715e: 8823 ldrh r3, [r4, #0] +10027160: f003 03fc and.w r3, r3, #252 ; 0xfc +10027164: 2ba4 cmp r3, #164 ; 0xa4 +10027166: f040 80ae bne.w 100272c6 +1002716a: f104 010a add.w r1, r4, #10 +1002716e: f505 6046 add.w r0, r5, #3168 ; 0xc60 +10027172: 8867 ldrh r7, [r4, #2] +10027174: f001 f89e bl 100282b4 +10027178: f3c7 070d ubfx r7, r7, #0, #14 +1002717c: 4604 mov r4, r0 +1002717e: 2800 cmp r0, #0 +10027180: f000 80a1 beq.w 100272c6 +10027184: f8d0 00fc ldr.w r0, [r0, #252] ; 0xfc +10027188: 42b8 cmp r0, r7 +1002718a: f040 809c bne.w 100272c6 +1002718e: 4621 mov r1, r4 +10027190: e9f1 2362 ldrd r2, r3, [r1, #392]! ; 0x188 +10027194: 3201 adds r2, #1 +10027196: f143 0300 adc.w r3, r3, #0 +1002719a: e9c1 2300 strd r2, r3, [r1] +1002719e: f896 3025 ldrb.w r3, [r6, #37] ; 0x25 +100271a2: 3b01 subs r3, #1 +100271a4: b2db uxtb r3, r3 +100271a6: 2b06 cmp r3, #6 +100271a8: d814 bhi.n 100271d4 +100271aa: 2201 movs r2, #1 +100271ac: fa02 f303 lsl.w r3, r2, r3 +100271b0: f013 0f60 tst.w r3, #96 ; 0x60 +100271b4: d10b bne.n 100271ce +100271b6: f013 0f18 tst.w r3, #24 +100271ba: d105 bne.n 100271c8 +100271bc: 079f lsls r7, r3, #30 +100271be: d009 beq.n 100271d4 +100271c0: f894 7312 ldrb.w r7, [r4, #786] ; 0x312 +100271c4: 4017 ands r7, r2 +100271c6: e009 b.n 100271dc +100271c8: f894 7314 ldrb.w r7, [r4, #788] ; 0x314 +100271cc: e004 b.n 100271d8 +100271ce: f894 7315 ldrb.w r7, [r4, #789] ; 0x315 +100271d2: e001 b.n 100271d8 +100271d4: f894 7313 ldrb.w r7, [r4, #787] ; 0x313 +100271d8: f007 0701 and.w r7, r7, #1 +100271dc: 2f00 cmp r7, #0 +100271de: d172 bne.n 100272c6 +100271e0: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 +100271e4: 075e lsls r6, r3, #29 +100271e6: d56e bpl.n 100272c6 +100271e8: f8b5 3cfc ldrh.w r3, [r5, #3324] ; 0xcfc +100271ec: fa23 f000 lsr.w r0, r3, r0 +100271f0: 07c0 lsls r0, r0, #31 +100271f2: d568 bpl.n 100272c6 +100271f4: f104 08f0 add.w r8, r4, #240 ; 0xf0 +100271f8: 4640 mov r0, r8 +100271fa: a901 add r1, sp, #4 +100271fc: f7f0 f9f4 bl 100175e8 +10027200: 4620 mov r0, r4 +10027202: f850 6fe8 ldr.w r6, [r0, #232]! +10027206: 4631 mov r1, r6 +10027208: f7f0 f9cb bl 100175a2 +1002720c: 2800 cmp r0, #0 +1002720e: d13c bne.n 1002728a +10027210: 4630 mov r0, r6 +10027212: f7f0 f939 bl 10017488 +10027216: f8d4 30f4 ldr.w r3, [r4, #244] ; 0xf4 +1002721a: 4640 mov r0, r8 +1002721c: 3b01 subs r3, #1 +1002721e: f8c4 30f4 str.w r3, [r4, #244] ; 0xf4 +10027222: 3300 adds r3, #0 +10027224: bf18 it ne +10027226: 2301 movne r3, #1 +10027228: f886 3065 strb.w r3, [r6, #101] ; 0x65 +1002722c: 2301 movs r3, #1 +1002722e: f886 3067 strb.w r3, [r6, #103] ; 0x67 +10027232: a901 add r1, sp, #4 +10027234: f605 1758 addw r7, r5, #2392 ; 0x958 +10027238: f7f0 f9e0 bl 100175fc +1002723c: 4638 mov r0, r7 +1002723e: a901 add r1, sp, #4 +10027240: f7f0 f9d2 bl 100175e8 +10027244: 4628 mov r0, r5 +10027246: 4631 mov r1, r6 +10027248: f002 fc4d bl 10029ae6 +1002724c: 2801 cmp r0, #1 +1002724e: d003 beq.n 10027258 +10027250: 4638 mov r0, r7 +10027252: 4631 mov r1, r6 +10027254: f002 fbac bl 100299b0 +10027258: 4638 mov r0, r7 +1002725a: a901 add r1, sp, #4 +1002725c: f7f0 f9ce bl 100175fc +10027260: 4640 mov r0, r8 +10027262: a901 add r1, sp, #4 +10027264: f7f0 f9c0 bl 100175e8 +10027268: f8d4 20f4 ldr.w r2, [r4, #244] ; 0xf4 +1002726c: bb3a cbnz r2, 100272be +1002726e: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc +10027272: 2101 movs r1, #1 +10027274: fa01 f303 lsl.w r3, r1, r3 +10027278: f8b5 1cfe ldrh.w r1, [r5, #3326] ; 0xcfe +1002727c: 4628 mov r0, r5 +1002727e: ea21 0303 bic.w r3, r1, r3 +10027282: f8a5 3cfe strh.w r3, [r5, #3326] ; 0xcfe +10027286: 2105 movs r1, #5 +10027288: e016 b.n 100272b8 +1002728a: f8b5 3cfe ldrh.w r3, [r5, #3326] ; 0xcfe +1002728e: f8d4 20fc ldr.w r2, [r4, #252] ; 0xfc +10027292: fa23 f102 lsr.w r1, r3, r2 +10027296: 07c9 lsls r1, r1, #31 +10027298: d511 bpl.n 100272be +1002729a: f8d4 10f4 ldr.w r1, [r4, #244] ; 0xf4 +1002729e: b109 cbz r1, 100272a4 +100272a0: f8c4 70f4 str.w r7, [r4, #244] ; 0xf4 +100272a4: 2101 movs r1, #1 +100272a6: fa01 f202 lsl.w r2, r1, r2 +100272aa: ea23 0302 bic.w r3, r3, r2 +100272ae: f8a5 3cfe strh.w r3, [r5, #3326] ; 0xcfe +100272b2: 4628 mov r0, r5 +100272b4: 2105 movs r1, #5 +100272b6: 2200 movs r2, #0 +100272b8: 4613 mov r3, r2 +100272ba: f7f3 feb5 bl 1001b028 +100272be: 4640 mov r0, r8 +100272c0: a901 add r1, sp, #4 +100272c2: f7f0 f99b bl 100175fc +100272c6: 2000 movs r0, #0 +100272c8: b002 add sp, #8 +100272ca: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +100272ce : +100272ce: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} +100272d2: 6f8d ldr r5, [r1, #120] ; 0x78 +100272d4: 2300 movs r3, #0 +100272d6: f8b5 a000 ldrh.w sl, [r5] +100272da: 460c mov r4, r1 +100272dc: f40a 7280 and.w r2, sl, #256 ; 0x100 +100272e0: b292 uxth r2, r2 +100272e2: 429a cmp r2, r3 +100272e4: bf0c ite eq +100272e6: 4619 moveq r1, r3 +100272e8: 2102 movne r1, #2 +100272ea: 9301 str r3, [sp, #4] +100272ec: f3ca 2340 ubfx r3, sl, #9, #1 +100272f0: 4319 orrs r1, r3 +100272f2: 2901 cmp r1, #1 +100272f4: 4606 mov r6, r0 +100272f6: d003 beq.n 10027300 +100272f8: d302 bcc.n 10027300 +100272fa: f105 0910 add.w r9, r5, #16 +100272fe: e001 b.n 10027304 +10027300: f105 0904 add.w r9, r5, #4 +10027304: 2a00 cmp r2, #0 +10027306: bf0c ite eq +10027308: 2100 moveq r1, #0 +1002730a: 2102 movne r1, #2 +1002730c: 4319 orrs r1, r3 +1002730e: 2901 cmp r1, #1 +10027310: d003 beq.n 1002731a +10027312: d305 bcc.n 10027320 +10027314: 2902 cmp r1, #2 +10027316: d003 beq.n 10027320 +10027318: e005 b.n 10027326 +1002731a: f105 0810 add.w r8, r5, #16 +1002731e: e004 b.n 1002732a +10027320: f105 080a add.w r8, r5, #10 +10027324: e001 b.n 1002732a +10027326: f105 0818 add.w r8, r5, #24 +1002732a: 2a00 cmp r2, #0 +1002732c: bf0c ite eq +1002732e: 2200 moveq r2, #0 +10027330: 2202 movne r2, #2 +10027332: 4313 orrs r3, r2 +10027334: 2b02 cmp r3, #2 +10027336: d008 beq.n 1002734a +10027338: 2b03 cmp r3, #3 +1002733a: d006 beq.n 1002734a +1002733c: 2b01 cmp r3, #1 +1002733e: bf14 ite ne +10027340: f105 0710 addne.w r7, r5, #16 +10027344: f105 070a addeq.w r7, r5, #10 +10027348: e000 b.n 1002734c +1002734a: 1d2f adds r7, r5, #4 +1002734c: 2f00 cmp r7, #0 +1002734e: f000 80e1 beq.w 10027514 +10027352: f104 0036 add.w r0, r4, #54 ; 0x36 +10027356: 4649 mov r1, r9 +10027358: 2206 movs r2, #6 +1002735a: f7f0 f869 bl 10017430 +1002735e: f104 003c add.w r0, r4, #60 ; 0x3c +10027362: 4641 mov r1, r8 +10027364: 2206 movs r2, #6 +10027366: f7f0 f863 bl 10017430 +1002736a: f104 004e add.w r0, r4, #78 ; 0x4e +1002736e: 4639 mov r1, r7 +10027370: 2206 movs r2, #6 +10027372: f7f0 f85d bl 10017430 +10027376: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 +1002737a: 2b03 cmp r3, #3 +1002737c: f200 80ca bhi.w 10027514 +10027380: e8df f003 tbb [pc, r3] +10027384: 38261402 .word 0x38261402 +10027388: f104 0048 add.w r0, r4, #72 ; 0x48 +1002738c: 4649 mov r1, r9 +1002738e: 2206 movs r2, #6 +10027390: f7f0 f84e bl 10017430 +10027394: f104 0042 add.w r0, r4, #66 ; 0x42 +10027398: 4641 mov r1, r8 +1002739a: 2206 movs r2, #6 +1002739c: f7f0 f848 bl 10017430 +100273a0: 4630 mov r0, r6 +100273a2: 4621 mov r1, r4 +100273a4: aa01 add r2, sp, #4 +100273a6: f7ff fd4d bl 10026e44 +100273aa: e031 b.n 10027410 +100273ac: f104 0048 add.w r0, r4, #72 ; 0x48 +100273b0: 4649 mov r1, r9 +100273b2: 2206 movs r2, #6 +100273b4: f7f0 f83c bl 10017430 +100273b8: f104 0042 add.w r0, r4, #66 ; 0x42 +100273bc: 4639 mov r1, r7 +100273be: 2206 movs r2, #6 +100273c0: f7f0 f836 bl 10017430 +100273c4: 4630 mov r0, r6 +100273c6: 4621 mov r1, r4 +100273c8: aa01 add r2, sp, #4 +100273ca: f7ff fdd9 bl 10026f80 +100273ce: e01f b.n 10027410 +100273d0: f104 0048 add.w r0, r4, #72 ; 0x48 +100273d4: 4639 mov r1, r7 +100273d6: 2206 movs r2, #6 +100273d8: f7f0 f82a bl 10017430 +100273dc: f104 0042 add.w r0, r4, #66 ; 0x42 +100273e0: 4641 mov r1, r8 +100273e2: 2206 movs r2, #6 +100273e4: f7f0 f824 bl 10017430 +100273e8: 4630 mov r0, r6 +100273ea: 4621 mov r1, r4 +100273ec: aa01 add r2, sp, #4 +100273ee: f7ff fe5d bl 100270ac +100273f2: e00d b.n 10027410 +100273f4: f104 0048 add.w r0, r4, #72 ; 0x48 +100273f8: 1d29 adds r1, r5, #4 +100273fa: 2206 movs r2, #6 +100273fc: f7f0 f818 bl 10017430 +10027400: f104 0042 add.w r0, r4, #66 ; 0x42 +10027404: f105 010a add.w r1, r5, #10 +10027408: 2206 movs r2, #6 +1002740a: f7f0 f811 bl 10017430 +1002740e: e081 b.n 10027514 +10027410: 2800 cmp r0, #0 +10027412: d07f beq.n 10027514 +10027414: 9a01 ldr r2, [sp, #4] +10027416: 2a00 cmp r2, #0 +10027418: d07c beq.n 10027514 +1002741a: f894 0024 ldrb.w r0, [r4, #36] ; 0x24 +1002741e: 2300 movs r3, #0 +10027420: 2801 cmp r0, #1 +10027422: f8c4 2088 str.w r2, [r4, #136] ; 0x88 +10027426: f884 3023 strb.w r3, [r4, #35] ; 0x23 +1002742a: f884 3054 strb.w r3, [r4, #84] ; 0x54 +1002742e: f894 1022 ldrb.w r1, [r4, #34] ; 0x22 +10027432: d11a bne.n 1002746a +10027434: 7e2b ldrb r3, [r5, #24] +10027436: 2903 cmp r1, #3 +10027438: f003 030f and.w r3, r3, #15 +1002743c: f884 3025 strb.w r3, [r4, #37] ; 0x25 +10027440: 8b2f ldrh r7, [r5, #24] +10027442: bf14 ite ne +10027444: 211a movne r1, #26 +10027446: 2120 moveq r1, #32 +10027448: f3c7 1741 ubfx r7, r7, #5, #2 +1002744c: f884 7054 strb.w r7, [r4, #84] ; 0x54 +10027450: 8b2d ldrh r5, [r5, #24] +10027452: f884 1021 strb.w r1, [r4, #33] ; 0x21 +10027456: f3c5 15c0 ubfx r5, r5, #7, #1 +1002745a: f884 5023 strb.w r5, [r4, #35] ; 0x23 +1002745e: b163 cbz r3, 1002747a +10027460: 2b03 cmp r3, #3 +10027462: d00a beq.n 1002747a +10027464: f8c6 0b88 str.w r0, [r6, #2952] ; 0xb88 +10027468: e007 b.n 1002747a +1002746a: 2903 cmp r1, #3 +1002746c: f884 3025 strb.w r3, [r4, #37] ; 0x25 +10027470: bf14 ite ne +10027472: 2318 movne r3, #24 +10027474: 231e moveq r3, #30 +10027476: f884 3021 strb.w r3, [r4, #33] ; 0x21 +1002747a: f894 302c ldrb.w r3, [r4, #44] ; 0x2c +1002747e: b123 cbz r3, 1002748a +10027480: f894 3021 ldrb.w r3, [r4, #33] ; 0x21 +10027484: 3304 adds r3, #4 +10027486: f884 3021 strb.w r3, [r4, #33] ; 0x21 +1002748a: 4620 mov r0, r4 +1002748c: f3ca 21c0 ubfx r1, sl, #11, #1 +10027490: 32c8 adds r2, #200 ; 0xc8 +10027492: f7ff fc23 bl 10026cdc +10027496: 2800 cmp r0, #0 +10027498: d03c beq.n 10027514 +1002749a: f894 302d ldrb.w r3, [r4, #45] ; 0x2d +1002749e: b38b cbz r3, 10027504 +100274a0: f8d6 3d08 ldr.w r3, [r6, #3336] ; 0xd08 +100274a4: 2b04 cmp r3, #4 +100274a6: d80f bhi.n 100274c8 +100274a8: e8df f003 tbb [pc, r3] +100274ac: 0a030a0a .word 0x0a030a0a +100274b0: 0a .byte 0x0a +100274b1: 00 .byte 0x00 +100274b2: f894 3048 ldrb.w r3, [r4, #72] ; 0x48 +100274b6: 07db lsls r3, r3, #31 +100274b8: d52e bpl.n 10027518 +100274ba: f8d6 3d64 ldr.w r3, [r6, #3428] ; 0xd64 +100274be: e001 b.n 100274c4 +100274c0: f8d6 3d0c ldr.w r3, [r6, #3340] ; 0xd0c +100274c4: f884 302f strb.w r3, [r4, #47] ; 0x2f +100274c8: f894 302f ldrb.w r3, [r4, #47] ; 0x2f +100274cc: 3b01 subs r3, #1 +100274ce: 2b05 cmp r3, #5 +100274d0: d812 bhi.n 100274f8 +100274d2: e8df f003 tbb [pc, r3] +100274d6: 0503 .short 0x0503 +100274d8: 0c030a11 .word 0x0c030a11 +100274dc: 2304 movs r3, #4 +100274de: e00c b.n 100274fa +100274e0: 2308 movs r3, #8 +100274e2: f884 3030 strb.w r3, [r4, #48] ; 0x30 +100274e6: 2304 movs r3, #4 +100274e8: e009 b.n 100274fe +100274ea: 2308 movs r3, #8 +100274ec: e005 b.n 100274fa +100274ee: 2312 movs r3, #18 +100274f0: f884 3030 strb.w r3, [r4, #48] ; 0x30 +100274f4: 2310 movs r3, #16 +100274f6: e002 b.n 100274fe +100274f8: 2300 movs r3, #0 +100274fa: f884 3030 strb.w r3, [r4, #48] ; 0x30 +100274fe: f884 3031 strb.w r3, [r4, #49] ; 0x31 +10027502: e005 b.n 10027510 +10027504: f884 302f strb.w r3, [r4, #47] ; 0x2f +10027508: f884 3031 strb.w r3, [r4, #49] ; 0x31 +1002750c: f884 3030 strb.w r3, [r4, #48] ; 0x30 +10027510: 2001 movs r0, #1 +10027512: e005 b.n 10027520 +10027514: 2000 movs r0, #0 +10027516: e003 b.n 10027520 +10027518: 9b01 ldr r3, [sp, #4] +1002751a: f8d3 3114 ldr.w r3, [r3, #276] ; 0x114 +1002751e: e7d1 b.n 100274c4 +10027520: b002 add sp, #8 +10027522: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + ... + +10027528 : +10027528: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +1002752c: f890 302f ldrb.w r3, [r0, #47] ; 0x2f +10027530: 4604 mov r4, r0 +10027532: f8d0 8010 ldr.w r8, [r0, #16] +10027536: 6f87 ldr r7, [r0, #120] ; 0x78 +10027538: b11b cbz r3, 10027542 +1002753a: f890 1031 ldrb.w r1, [r0, #49] ; 0x31 +1002753e: f7ff f8ef bl 10026720 +10027542: f894 6030 ldrb.w r6, [r4, #48] ; 0x30 +10027546: f894 3021 ldrb.w r3, [r4, #33] ; 0x21 +1002754a: 4942 ldr r1, [pc, #264] ; (10027654 ) +1002754c: 441e add r6, r3 +1002754e: 19bd adds r5, r7, r6 +10027550: 4628 mov r0, r5 +10027552: 2206 movs r2, #6 +10027554: f7ef ff74 bl 10017440 +10027558: b940 cbnz r0, 1002756c +1002755a: 4628 mov r0, r5 +1002755c: 493e ldr r1, [pc, #248] ; (10027658 ) +1002755e: 2206 movs r2, #6 +10027560: f7ef ff6e bl 10017440 +10027564: 1c05 adds r5, r0, #0 +10027566: bf18 it ne +10027568: 2501 movne r5, #1 +1002756a: e010 b.n 1002758e +1002756c: 3606 adds r6, #6 +1002756e: 443e add r6, r7 +10027570: 4630 mov r0, r6 +10027572: 493a ldr r1, [pc, #232] ; (1002765c ) +10027574: 2202 movs r2, #2 +10027576: f7ef ff63 bl 10017440 +1002757a: 2800 cmp r0, #0 +1002757c: d1ed bne.n 1002755a +1002757e: 4630 mov r0, r6 +10027580: 4937 ldr r1, [pc, #220] ; (10027660 ) +10027582: 2202 movs r2, #2 +10027584: f7ef ff5c bl 10017440 +10027588: 2800 cmp r0, #0 +1002758a: d1e6 bne.n 1002755a +1002758c: 2501 movs r5, #1 +1002758e: f898 3c44 ldrb.w r3, [r8, #3140] ; 0xc44 +10027592: f894 6021 ldrb.w r6, [r4, #33] ; 0x21 +10027596: 2b00 cmp r3, #0 +10027598: bf18 it ne +1002759a: 2501 movne r5, #1 +1002759c: f894 3030 ldrb.w r3, [r4, #48] ; 0x30 +100275a0: 2d00 cmp r5, #0 +100275a2: 441e add r6, r3 +100275a4: bf0c ite eq +100275a6: 2300 moveq r3, #0 +100275a8: 2306 movne r3, #6 +100275aa: 441e add r6, r3 +100275ac: 6f23 ldr r3, [r4, #112] ; 0x70 +100275ae: eb07 0906 add.w r9, r7, r6 +100275b2: 1b9b subs r3, r3, r6 +100275b4: a801 add r0, sp, #4 +100275b6: 4649 mov r1, r9 +100275b8: 2202 movs r2, #2 +100275ba: f8ad 3006 strh.w r3, [sp, #6] +100275be: f7ef ff37 bl 10017430 +100275c2: f8bd 0004 ldrh.w r0, [sp, #4] +100275c6: f7ef feed bl 100173a4 <_htons> +100275ca: 86a0 strh r0, [r4, #52] ; 0x34 +100275cc: f8d8 3010 ldr.w r3, [r8, #16] +100275d0: f8ad 0004 strh.w r0, [sp, #4] +100275d4: 03db lsls r3, r3, #15 +100275d6: d424 bmi.n 10027622 +100275d8: 2d00 cmp r5, #0 +100275da: bf14 ite ne +100275dc: 2302 movne r3, #2 +100275de: 2300 moveq r3, #0 +100275e0: f1a6 010e sub.w r1, r6, #14 +100275e4: 4620 mov r0, r4 +100275e6: 4419 add r1, r3 +100275e8: f7ff f889 bl 100266fe +100275ec: 4606 mov r6, r0 +100275ee: 4630 mov r0, r6 +100275f0: f104 0136 add.w r1, r4, #54 ; 0x36 +100275f4: 2206 movs r2, #6 +100275f6: f7ef ff1b bl 10017430 +100275fa: 1db0 adds r0, r6, #6 +100275fc: f104 013c add.w r1, r4, #60 ; 0x3c +10027600: 2206 movs r2, #6 +10027602: f7ef ff15 bl 10017430 +10027606: bb0d cbnz r5, 1002764c +10027608: f8bd 0006 ldrh.w r0, [sp, #6] +1002760c: f7ef feca bl 100173a4 <_htons> +10027610: a902 add r1, sp, #8 +10027612: f821 0d02 strh.w r0, [r1, #-2]! +10027616: 2202 movs r2, #2 +10027618: f106 000c add.w r0, r6, #12 +1002761c: f7ef ff08 bl 10017430 +10027620: e014 b.n 1002764c +10027622: 2387 movs r3, #135 ; 0x87 +10027624: 55bb strb r3, [r7, r6] +10027626: 2312 movs r3, #18 +10027628: f889 3001 strb.w r3, [r9, #1] +1002762c: f1a6 0124 sub.w r1, r6, #36 ; 0x24 +10027630: f248 7312 movw r3, #34578 ; 0x8712 +10027634: 4620 mov r0, r4 +10027636: f8ad 3004 strh.w r3, [sp, #4] +1002763a: f7ff f860 bl 100266fe +1002763e: 6f61 ldr r1, [r4, #116] ; 0x74 +10027640: 4606 mov r6, r0 +10027642: 2218 movs r2, #24 +10027644: f7ef fef4 bl 10017430 +10027648: 3618 adds r6, #24 +1002764a: e7d0 b.n 100275ee +1002764c: 2001 movs r0, #1 +1002764e: b003 add sp, #12 +10027650: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +10027654: 100416fc .word 0x100416fc +10027658: 100416d5 .word 0x100416d5 +1002765c: 100416d3 .word 0x100416d3 +10027660: 100416d1 .word 0x100416d1 + +10027664 : +10027664: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10027668: 680c ldr r4, [r1, #0] +1002766a: f600 3754 addw r7, r0, #2900 ; 0xb54 +1002766e: 4620 mov r0, r4 +10027670: 460e mov r6, r1 +10027672: f7ef ff09 bl 10017488 +10027676: f894 302a ldrb.w r3, [r4, #42] ; 0x2a +1002767a: b153 cbz r3, 10027692 +1002767c: 4639 mov r1, r7 +1002767e: 4620 mov r0, r4 +10027680: f7ff f958 bl 10026934 +10027684: 4630 mov r0, r6 +10027686: 4639 mov r1, r7 +10027688: f7ff f9d1 bl 10026a2e +1002768c: 2000 movs r0, #0 +1002768e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +10027692: 6835 ldr r5, [r6, #0] +10027694: f04f 0801 mov.w r8, #1 +10027698: 4630 mov r0, r6 +1002769a: 4629 mov r1, r5 +1002769c: f7ef ff81 bl 100175a2 +100276a0: bb70 cbnz r0, 10027700 +100276a2: f895 302a ldrb.w r3, [r5, #42] ; 0x2a +100276a6: 4543 cmp r3, r8 +100276a8: d1e8 bne.n 1002767c +100276aa: f895 3021 ldrb.w r3, [r5, #33] ; 0x21 +100276ae: f895 1030 ldrb.w r1, [r5, #48] ; 0x30 +100276b2: 4628 mov r0, r5 +100276b4: 4419 add r1, r3 +100276b6: b2c9 uxtb r1, r1 +100276b8: f7ff f821 bl 100266fe +100276bc: f894 1031 ldrb.w r1, [r4, #49] ; 0x31 +100276c0: 4620 mov r0, r4 +100276c2: f7ff f82d bl 10026720 +100276c6: 6fa9 ldr r1, [r5, #120] ; 0x78 +100276c8: 6f2a ldr r2, [r5, #112] ; 0x70 +100276ca: 6fe0 ldr r0, [r4, #124] ; 0x7c +100276cc: f7ef feb0 bl 10017430 +100276d0: 6f2b ldr r3, [r5, #112] ; 0x70 +100276d2: 6fe2 ldr r2, [r4, #124] ; 0x7c +100276d4: f8d4 1080 ldr.w r1, [r4, #128] ; 0x80 +100276d8: 441a add r2, r3 +100276da: f108 0801 add.w r8, r8, #1 +100276de: 428a cmp r2, r1 +100276e0: fa5f f888 uxtb.w r8, r8 +100276e4: 67e2 str r2, [r4, #124] ; 0x7c +100276e6: d902 bls.n 100276ee +100276e8: 1ad3 subs r3, r2, r3 +100276ea: 67e3 str r3, [r4, #124] ; 0x7c +100276ec: e002 b.n 100276f4 +100276ee: 6f22 ldr r2, [r4, #112] ; 0x70 +100276f0: 4413 add r3, r2 +100276f2: 6723 str r3, [r4, #112] ; 0x70 +100276f4: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 +100276f8: f884 3031 strb.w r3, [r4, #49] ; 0x31 +100276fc: 682d ldr r5, [r5, #0] +100276fe: e7cb b.n 10027698 +10027700: 4630 mov r0, r6 +10027702: 4639 mov r1, r7 +10027704: f7ff f993 bl 10026a2e +10027708: 4620 mov r0, r4 +1002770a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + +1002770e : +1002770e: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10027712: 4606 mov r6, r0 +10027714: 460c mov r4, r1 +10027716: f600 3754 addw r7, r0, #2900 ; 0xb54 +1002771a: f891 902b ldrb.w r9, [r1, #43] ; 0x2b +1002771e: f891 802a ldrb.w r8, [r1, #42] ; 0x2a +10027722: f500 6046 add.w r0, r0, #3168 ; 0xc60 +10027726: 3142 adds r1, #66 ; 0x42 +10027728: f000 fdc4 bl 100282b4 +1002772c: b940 cbnz r0, 10027740 +1002772e: 6fa3 ldr r3, [r4, #120] ; 0x78 +10027730: 781b ldrb r3, [r3, #0] +10027732: f003 030c and.w r3, r3, #12 +10027736: 2b08 cmp r3, #8 +10027738: d005 beq.n 10027746 +1002773a: 4630 mov r0, r6 +1002773c: f000 fe10 bl 10028360 +10027740: f100 05bc add.w r5, r0, #188 ; 0xbc +10027744: e000 b.n 10027748 +10027746: 4605 mov r5, r0 +10027748: f1b9 0f00 cmp.w r9, #0 +1002774c: d103 bne.n 10027756 +1002774e: f1b8 0f00 cmp.w r8, #0 +10027752: d023 beq.n 1002779c +10027754: e018 b.n 10027788 +10027756: f1b9 0f01 cmp.w r9, #1 +1002775a: d12f bne.n 100277bc +1002775c: b17d cbz r5, 1002777e +1002775e: f1b8 0f00 cmp.w r8, #0 +10027762: d107 bne.n 10027774 +10027764: 4628 mov r0, r5 +10027766: f7ef ff17 bl 10017598 +1002776a: b918 cbnz r0, 10027774 +1002776c: 4628 mov r0, r5 +1002776e: 4639 mov r1, r7 +10027770: f7ff f95d bl 10026a2e +10027774: 4620 mov r0, r4 +10027776: 4629 mov r1, r5 +10027778: f7ef fe80 bl 1001747c +1002777c: e01e b.n 100277bc +1002777e: 4620 mov r0, r4 +10027780: 4639 mov r1, r7 +10027782: f7ff f8d7 bl 10026934 +10027786: e019 b.n 100277bc +10027788: b195 cbz r5, 100277b0 +1002778a: 4620 mov r0, r4 +1002778c: 4629 mov r1, r5 +1002778e: f7ef fe75 bl 1001747c +10027792: 4630 mov r0, r6 +10027794: 4629 mov r1, r5 +10027796: f7ff ff65 bl 10027664 +1002779a: 4604 mov r4, r0 +1002779c: b17c cbz r4, 100277be +1002779e: f894 302d ldrb.w r3, [r4, #45] ; 0x2d +100277a2: b163 cbz r3, 100277be +100277a4: 4630 mov r0, r6 +100277a6: 4621 mov r1, r4 +100277a8: f7ff f98b bl 10026ac2 +100277ac: 4605 mov r5, r0 +100277ae: b930 cbnz r0, 100277be +100277b0: 4620 mov r0, r4 +100277b2: 4639 mov r1, r7 +100277b4: f7ff f8be bl 10026934 +100277b8: 462c mov r4, r5 +100277ba: e000 b.n 100277be +100277bc: 2400 movs r4, #0 +100277be: 4620 mov r0, r4 +100277c0: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + +100277c4 : +100277c4: b570 push {r4, r5, r6, lr} +100277c6: 680e ldr r6, [r1, #0] +100277c8: 460d mov r5, r1 +100277ca: 6fb1 ldr r1, [r6, #120] ; 0x78 +100277cc: 4604 mov r4, r0 +100277ce: 310a adds r1, #10 +100277d0: f500 6046 add.w r0, r0, #3168 ; 0xc60 +100277d4: f000 fd6e bl 100282b4 +100277d8: b130 cbz r0, 100277e8 +100277da: e9f0 2360 ldrd r2, r3, [r0, #384]! ; 0x180 +100277de: 3201 adds r2, #1 +100277e0: f143 0300 adc.w r3, r3, #0 +100277e4: e9c0 2300 strd r2, r3, [r0] +100277e8: 4631 mov r1, r6 +100277ea: 4620 mov r0, r4 +100277ec: f7ff ff8f bl 1002770e +100277f0: 4601 mov r1, r0 +100277f2: 6028 str r0, [r5, #0] +100277f4: b110 cbz r0, 100277fc +100277f6: 4620 mov r0, r4 +100277f8: f7f7 fa10 bl 1001ec1c +100277fc: 2001 movs r0, #1 +100277fe: bd70 pop {r4, r5, r6, pc} + +10027800 : +10027800: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10027804: 680b ldr r3, [r1, #0] +10027806: 4680 mov r8, r0 +10027808: 6f9a ldr r2, [r3, #120] ; 0x78 +1002780a: 7817 ldrb r7, [r2, #0] +1002780c: f017 0703 ands.w r7, r7, #3 +10027810: d154 bne.n 100278bc +10027812: 8816 ldrh r6, [r2, #0] +10027814: f416 7f80 tst.w r6, #256 ; 0x100 +10027818: fa5f fc86 uxtb.w ip, r6 +1002781c: bf0c ite eq +1002781e: f04f 0900 moveq.w r9, #0 +10027822: f04f 0902 movne.w r9, #2 +10027826: f3c6 2640 ubfx r6, r6, #9, #1 +1002782a: ea49 0606 orr.w r6, r9, r6 +1002782e: f883 6022 strb.w r6, [r3, #34] ; 0x22 +10027832: 7d96 ldrb r6, [r2, #22] +10027834: f00c 040c and.w r4, ip, #12 +10027838: f006 060f and.w r6, r6, #15 +1002783c: f883 602a strb.w r6, [r3, #42] ; 0x2a +10027840: 8ad6 ldrh r6, [r2, #22] +10027842: 2c04 cmp r4, #4 +10027844: ea4f 1616 mov.w r6, r6, lsr #4 +10027848: 851e strh r6, [r3, #40] ; 0x28 +1002784a: 8816 ldrh r6, [r2, #0] +1002784c: f3c6 3600 ubfx r6, r6, #12, #1 +10027850: f883 6026 strb.w r6, [r3, #38] ; 0x26 +10027854: 8816 ldrh r6, [r2, #0] +10027856: f3c6 2680 ubfx r6, r6, #10, #1 +1002785a: f883 602b strb.w r6, [r3, #43] ; 0x2b +1002785e: 8816 ldrh r6, [r2, #0] +10027860: f3c6 3640 ubfx r6, r6, #13, #1 +10027864: f883 6027 strb.w r6, [r3, #39] ; 0x27 +10027868: 8816 ldrh r6, [r2, #0] +1002786a: f3c6 3680 ubfx r6, r6, #14, #1 +1002786e: f883 602d strb.w r6, [r3, #45] ; 0x2d +10027872: 8812 ldrh r2, [r2, #0] +10027874: ea4f 32d2 mov.w r2, r2, lsr #15 +10027878: f883 202c strb.w r2, [r3, #44] ; 0x2c +1002787c: d007 beq.n 1002788e +1002787e: 2c08 cmp r4, #8 +10027880: d009 beq.n 10027896 +10027882: b9f4 cbnz r4, 100278c2 +10027884: f7ff ff9e bl 100277c4 +10027888: 4620 mov r0, r4 +1002788a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1002788e: 6809 ldr r1, [r1, #0] +10027890: f7ff fc50 bl 10027134 +10027894: e015 b.n 100278c2 +10027896: ea4f 1cdc mov.w ip, ip, lsr #7 +1002789a: f883 c024 strb.w ip, [r3, #36] ; 0x24 +1002789e: 6809 ldr r1, [r1, #0] +100278a0: f7ff fd15 bl 100272ce +100278a4: b970 cbnz r0, 100278c4 +100278a6: f508 6135 add.w r1, r8, #2896 ; 0xb50 +100278aa: e9d1 2314 ldrd r2, r3, [r1, #80] ; 0x50 +100278ae: 3201 adds r2, #1 +100278b0: f143 0300 adc.w r3, r3, #0 +100278b4: e9c1 2314 strd r2, r3, [r1, #80] ; 0x50 +100278b8: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +100278bc: 2000 movs r0, #0 +100278be: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +100278c2: 4638 mov r0, r7 +100278c4: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + +100278c8 : +100278c8: b538 push {r3, r4, r5, lr} +100278ca: f891 3023 ldrb.w r3, [r1, #35] ; 0x23 +100278ce: 4605 mov r5, r0 +100278d0: 460c mov r4, r1 +100278d2: b943 cbnz r3, 100278e6 +100278d4: 4608 mov r0, r1 +100278d6: f7ff fe27 bl 10027528 +100278da: 4628 mov r0, r5 +100278dc: 4621 mov r1, r4 +100278de: f00e fd2d bl 1003633c +100278e2: 2001 movs r0, #1 +100278e4: bd38 pop {r3, r4, r5, pc} +100278e6: 2000 movs r0, #0 +100278e8: bd38 pop {r3, r4, r5, pc} + +100278ea : +100278ea: b570 push {r4, r5, r6, lr} +100278ec: f8d0 5454 ldr.w r5, [r0, #1108] ; 0x454 +100278f0: 4604 mov r4, r0 +100278f2: 2d01 cmp r5, #1 +100278f4: 460e mov r6, r1 +100278f6: d10e bne.n 10027916 +100278f8: f7ff ffe6 bl 100278c8 +100278fc: 2801 cmp r0, #1 +100278fe: d01f beq.n 10027940 +10027900: f241 73ac movw r3, #6060 ; 0x17ac +10027904: 58e3 ldr r3, [r4, r3] +10027906: b9c3 cbnz r3, 1002793a +10027908: f241 73b0 movw r3, #6064 ; 0x17b0 +1002790c: 58e0 ldr r0, [r4, r3] +1002790e: 3000 adds r0, #0 +10027910: bf18 it ne +10027912: 2001 movne r0, #1 +10027914: bd70 pop {r4, r5, r6, pc} +10027916: 4608 mov r0, r1 +10027918: f7ff fe06 bl 10027528 +1002791c: 2801 cmp r0, #1 +1002791e: 4605 mov r5, r0 +10027920: d10b bne.n 1002793a +10027922: f241 73ac movw r3, #6060 ; 0x17ac +10027926: 58e0 ldr r0, [r4, r3] +10027928: b948 cbnz r0, 1002793e +1002792a: f241 73b0 movw r3, #6064 ; 0x17b0 +1002792e: 58e3 ldr r3, [r4, r3] +10027930: b933 cbnz r3, 10027940 +10027932: 4620 mov r0, r4 +10027934: 4631 mov r1, r6 +10027936: f00e fd01 bl 1003633c +1002793a: 4628 mov r0, r5 +1002793c: bd70 pop {r4, r5, r6, pc} +1002793e: 2000 movs r0, #0 +10027940: bd70 pop {r4, r5, r6, pc} + +10027942 : +10027942: b537 push {r0, r1, r2, r4, r5, lr} +10027944: ab02 add r3, sp, #8 +10027946: f843 1d04 str.w r1, [r3, #-4]! +1002794a: 4619 mov r1, r3 +1002794c: 4605 mov r5, r0 +1002794e: f7ff ff57 bl 10027800 +10027952: 2801 cmp r0, #1 +10027954: 4604 mov r4, r0 +10027956: d005 beq.n 10027964 +10027958: 9801 ldr r0, [sp, #4] +1002795a: b118 cbz r0, 10027964 +1002795c: f605 3154 addw r1, r5, #2900 ; 0xb54 +10027960: f7fe ffe8 bl 10026934 +10027964: 4620 mov r0, r4 +10027966: b003 add sp, #12 +10027968: bd30 pop {r4, r5, pc} + +1002796a : +1002796a: b570 push {r4, r5, r6, lr} +1002796c: 460e mov r6, r1 +1002796e: 4604 mov r4, r0 +10027970: f7ff f927 bl 10026bc2 +10027974: 4601 mov r1, r0 +10027976: b908 cbnz r0, 1002797c +10027978: 2500 movs r5, #0 +1002797a: e01d b.n 100279b8 +1002797c: 4620 mov r0, r4 +1002797e: f7ff fec6 bl 1002770e +10027982: 4601 mov r1, r0 +10027984: b1b8 cbz r0, 100279b6 +10027986: 4620 mov r0, r4 +10027988: f7ff f96d bl 10026c66 +1002798c: 4605 mov r5, r0 +1002798e: 2800 cmp r0, #0 +10027990: d0f2 beq.n 10027978 +10027992: 4629 mov r1, r5 +10027994: 4620 mov r0, r4 +10027996: 2200 movs r2, #0 +10027998: f7ff fa1b bl 10026dd2 +1002799c: 4629 mov r1, r5 +1002799e: 4620 mov r0, r4 +100279a0: f7ff ffa3 bl 100278ea +100279a4: 2801 cmp r0, #1 +100279a6: 4605 mov r5, r0 +100279a8: d006 beq.n 100279b8 +100279aa: 4630 mov r0, r6 +100279ac: f604 3154 addw r1, r4, #2900 ; 0xb54 +100279b0: f7fe ffc0 bl 10026934 +100279b4: e000 b.n 100279b8 +100279b6: 2501 movs r5, #1 +100279b8: f504 6435 add.w r4, r4, #2896 ; 0xb50 +100279bc: e9d4 2314 ldrd r2, r3, [r4, #80] ; 0x50 +100279c0: 3201 adds r2, #1 +100279c2: f143 0300 adc.w r3, r3, #0 +100279c6: e9c4 2314 strd r2, r3, [r4, #80] ; 0x50 +100279ca: 4628 mov r0, r5 +100279cc: bd70 pop {r4, r5, r6, pc} + +100279ce : +100279ce: b570 push {r4, r5, r6, lr} +100279d0: 6903 ldr r3, [r0, #16] +100279d2: 460d mov r5, r1 +100279d4: 0719 lsls r1, r3, #28 +100279d6: 4604 mov r4, r0 +100279d8: d41e bmi.n 10027a18 +100279da: 4620 mov r0, r4 +100279dc: 4629 mov r1, r5 +100279de: f7ff ffb0 bl 10027942 +100279e2: 2801 cmp r0, #1 +100279e4: 4606 mov r6, r0 +100279e6: d138 bne.n 10027a5a +100279e8: 6923 ldr r3, [r4, #16] +100279ea: 071a lsls r2, r3, #28 +100279ec: d50e bpl.n 10027a0c +100279ee: f895 3048 ldrb.w r3, [r5, #72] ; 0x48 +100279f2: 07db lsls r3, r3, #31 +100279f4: d40a bmi.n 10027a0c +100279f6: f895 302f ldrb.w r3, [r5, #47] ; 0x2f +100279fa: b13b cbz r3, 10027a0c +100279fc: f895 302e ldrb.w r3, [r5, #46] ; 0x2e +10027a00: b1db cbz r3, 10027a3a +10027a02: f241 0364 movw r3, #4196 ; 0x1064 +10027a06: 58e3 ldr r3, [r4, r3] +10027a08: 2b01 cmp r3, #1 +10027a0a: d016 beq.n 10027a3a +10027a0c: 4620 mov r0, r4 +10027a0e: 4629 mov r1, r5 +10027a10: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10027a14: f7ff bfa9 b.w 1002796a +10027a18: f241 035d movw r3, #4189 ; 0x105d +10027a1c: 5cc3 ldrb r3, [r0, r3] +10027a1e: 2b00 cmp r3, #0 +10027a20: d0db beq.n 100279da +10027a22: f604 366c addw r6, r4, #2924 ; 0xb6c +10027a26: 4630 mov r0, r6 +10027a28: f7fe ff71 bl 1002690e +10027a2c: 4601 mov r1, r0 +10027a2e: 2800 cmp r0, #0 +10027a30: d0d3 beq.n 100279da +10027a32: 4620 mov r0, r4 +10027a34: f7ff ff99 bl 1002796a +10027a38: e7f5 b.n 10027a26 +10027a3a: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c +10027a3e: f023 0304 bic.w r3, r3, #4 +10027a42: 2b01 cmp r3, #1 +10027a44: d0e2 beq.n 10027a0c +10027a46: f241 035d movw r3, #4189 ; 0x105d +10027a4a: 5ce3 ldrb r3, [r4, r3] +10027a4c: 2b00 cmp r3, #0 +10027a4e: d1dd bne.n 10027a0c +10027a50: 4628 mov r0, r5 +10027a52: f604 316c addw r1, r4, #2924 ; 0xb6c +10027a56: f7fe ffd5 bl 10026a04 +10027a5a: 4630 mov r0, r6 +10027a5c: bd70 pop {r4, r5, r6, pc} + +10027a5e : +10027a5e: b510 push {r4, lr} +10027a60: 6904 ldr r4, [r0, #16] +10027a62: 4601 mov r1, r0 +10027a64: f894 3c44 ldrb.w r3, [r4, #3140] ; 0xc44 +10027a68: 4620 mov r0, r4 +10027a6a: b11b cbz r3, 10027a74 +10027a6c: e8bd 4010 ldmia.w sp!, {r4, lr} +10027a70: f7e5 bdf0 b.w 1000d654 +10027a74: f7ff ffab bl 100279ce +10027a78: b140 cbz r0, 10027a8c +10027a7a: f504 6435 add.w r4, r4, #2896 ; 0xb50 +10027a7e: e9d4 2312 ldrd r2, r3, [r4, #72] ; 0x48 +10027a82: 3201 adds r2, #1 +10027a84: f143 0300 adc.w r3, r3, #0 +10027a88: e9c4 2312 strd r2, r3, [r4, #72] ; 0x48 +10027a8c: bd10 pop {r4, pc} + ... + +10027a90 : +10027a90: b510 push {r4, lr} +10027a92: 4604 mov r4, r0 +10027a94: 4813 ldr r0, [pc, #76] ; (10027ae4 ) +10027a96: f7ef ff1d bl 100178d4 +10027a9a: f504 50c0 add.w r0, r4, #6144 ; 0x1800 +10027a9e: 3004 adds r0, #4 +10027aa0: f7ef fd22 bl 100174e8 +10027aa4: b1a0 cbz r0, 10027ad0 +10027aa6: f504 53c0 add.w r3, r4, #6144 ; 0x1800 +10027aaa: 330c adds r3, #12 +10027aac: 681b ldr r3, [r3, #0] +10027aae: b97b cbnz r3, 10027ad0 +10027ab0: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +10027ab4: 330c adds r3, #12 +10027ab6: 681b ldr r3, [r3, #0] +10027ab8: 2b01 cmp r3, #1 +10027aba: d009 beq.n 10027ad0 +10027abc: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +10027ac0: 3310 adds r3, #16 +10027ac2: 681b ldr r3, [r3, #0] +10027ac4: 2b01 cmp r3, #1 +10027ac6: d003 beq.n 10027ad0 +10027ac8: 4620 mov r0, r4 +10027aca: f003 fc09 bl 1002b2e0 +10027ace: e7e4 b.n 10027a9a +10027ad0: f504 50c0 add.w r0, r4, #6144 ; 0x1800 +10027ad4: 3008 adds r0, #8 +10027ad6: f7ef fcef bl 100174b8 +10027ada: e8bd 4010 ldmia.w sp!, {r4, lr} +10027ade: f7ef bf01 b.w 100178e4 +10027ae2: bf00 nop +10027ae4: 100416eb .word 0x100416eb + +10027ae8 : +10027ae8: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +10027aea: f8d1 5080 ldr.w r5, [r1, #128] ; 0x80 +10027aee: b1e5 cbz r5, 10027b2a +10027af0: 7f0b ldrb r3, [r1, #28] +10027af2: f003 03fb and.w r3, r3, #251 ; 0xfb +10027af6: 2b01 cmp r3, #1 +10027af8: d117 bne.n 10027b2a +10027afa: f8d0 6d10 ldr.w r6, [r0, #3344] ; 0xd10 +10027afe: 8a4c ldrh r4, [r1, #18] +10027b00: 7f4a ldrb r2, [r1, #29] +10027b02: 698b ldr r3, [r1, #24] +10027b04: 7f8f ldrb r7, [r1, #30] +10027b06: eb00 1106 add.w r1, r0, r6, lsl #4 +10027b0a: f601 5114 addw r1, r1, #3348 ; 0xd14 +10027b0e: eb00 0086 add.w r0, r0, r6, lsl #2 +10027b12: 9100 str r1, [sp, #0] +10027b14: f8d0 1d54 ldr.w r1, [r0, #3412] ; 0xd54 +10027b18: 1b1b subs r3, r3, r4 +10027b1a: 1a9b subs r3, r3, r2 +10027b1c: 9101 str r1, [sp, #4] +10027b1e: f105 0028 add.w r0, r5, #40 ; 0x28 +10027b22: 4621 mov r1, r4 +10027b24: 1bdb subs r3, r3, r7 +10027b26: f016 feff bl 1003e928 <__wep_80211_encrypt_veneer> +10027b2a: b003 add sp, #12 +10027b2c: bdf0 pop {r4, r5, r6, r7, pc} + +10027b2e : +10027b2e: b570 push {r4, r5, r6, lr} +10027b30: f891 302f ldrb.w r3, [r1, #47] ; 0x2f +10027b34: b086 sub sp, #24 +10027b36: f003 03fb and.w r3, r3, #251 ; 0xfb +10027b3a: 2b01 cmp r3, #1 +10027b3c: d118 bne.n 10027b70 +10027b3e: f891 5058 ldrb.w r5, [r1, #88] ; 0x58 +10027b42: f891 4021 ldrb.w r4, [r1, #33] ; 0x21 +10027b46: eb00 1605 add.w r6, r0, r5, lsl #4 +10027b4a: f606 5614 addw r6, r6, #3348 ; 0xd14 +10027b4e: f891 2030 ldrb.w r2, [r1, #48] ; 0x30 +10027b52: 6f0b ldr r3, [r1, #112] ; 0x70 +10027b54: eb00 0085 add.w r0, r0, r5, lsl #2 +10027b58: 9600 str r6, [sp, #0] +10027b5a: f8d0 0d54 ldr.w r0, [r0, #3412] ; 0xd54 +10027b5e: 1b1b subs r3, r3, r4 +10027b60: 9001 str r0, [sp, #4] +10027b62: a805 add r0, sp, #20 +10027b64: 9002 str r0, [sp, #8] +10027b66: 6f88 ldr r0, [r1, #120] ; 0x78 +10027b68: 1a9b subs r3, r3, r2 +10027b6a: 4621 mov r1, r4 +10027b6c: f016 fe84 bl 1003e878 <__wep_80211_decrypt_veneer> +10027b70: b006 add sp, #24 +10027b72: bd70 pop {r4, r5, r6, pc} + +10027b74 : +10027b74: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +10027b76: f8d1 3080 ldr.w r3, [r1, #128] ; 0x80 +10027b7a: 4605 mov r5, r0 +10027b7c: 460c mov r4, r1 +10027b7e: b90b cbnz r3, 10027b84 +10027b80: 2000 movs r0, #0 +10027b82: e02b b.n 10027bdc +10027b84: 7f0b ldrb r3, [r1, #28] +10027b86: 2b02 cmp r3, #2 +10027b88: d1fa bne.n 10027b80 +10027b8a: 6f08 ldr r0, [r1, #112] ; 0x70 +10027b8c: b920 cbnz r0, 10027b98 +10027b8e: f505 6046 add.w r0, r5, #3168 ; 0xc60 +10027b92: 3157 adds r1, #87 ; 0x57 +10027b94: f000 fb8e bl 100282b4 +10027b98: f894 2057 ldrb.w r2, [r4, #87] ; 0x57 +10027b9c: 07d3 lsls r3, r2, #31 +10027b9e: d51a bpl.n 10027bd6 +10027ba0: f8d5 2d68 ldr.w r2, [r5, #3432] ; 0xd68 +10027ba4: eb05 1502 add.w r5, r5, r2, lsl #4 +10027ba8: f605 556c addw r5, r5, #3436 ; 0xd6c +10027bac: 2800 cmp r0, #0 +10027bae: d0e7 beq.n 10027b80 +10027bb0: 8a61 ldrh r1, [r4, #18] +10027bb2: 69a3 ldr r3, [r4, #24] +10027bb4: 7f62 ldrb r2, [r4, #29] +10027bb6: f8d4 0080 ldr.w r0, [r4, #128] ; 0x80 +10027bba: 7fa6 ldrb r6, [r4, #30] +10027bbc: 1a5b subs r3, r3, r1 +10027bbe: 1a9b subs r3, r3, r2 +10027bc0: 9500 str r5, [sp, #0] +10027bc2: 3451 adds r4, #81 ; 0x51 +10027bc4: 2510 movs r5, #16 +10027bc6: 3028 adds r0, #40 ; 0x28 +10027bc8: 9501 str r5, [sp, #4] +10027bca: 9402 str r4, [sp, #8] +10027bcc: 1b9b subs r3, r3, r6 +10027bce: f016 feef bl 1003e9b0 <__tkip_80211_encrypt_veneer> +10027bd2: 2001 movs r0, #1 +10027bd4: e002 b.n 10027bdc +10027bd6: f500 759c add.w r5, r0, #312 ; 0x138 +10027bda: e7e7 b.n 10027bac +10027bdc: b004 add sp, #16 +10027bde: bd70 pop {r4, r5, r6, pc} + +10027be0 : +10027be0: b570 push {r4, r5, r6, lr} +10027be2: f891 302f ldrb.w r3, [r1, #47] ; 0x2f +10027be6: b086 sub sp, #24 +10027be8: 2b02 cmp r3, #2 +10027bea: 4605 mov r5, r0 +10027bec: 460c mov r4, r1 +10027bee: d001 beq.n 10027bf4 +10027bf0: 2000 movs r0, #0 +10027bf2: e02a b.n 10027c4a +10027bf4: f101 0642 add.w r6, r1, #66 ; 0x42 +10027bf8: f500 6046 add.w r0, r0, #3168 ; 0xc60 +10027bfc: 4631 mov r1, r6 +10027bfe: f000 fb59 bl 100282b4 +10027c02: b310 cbz r0, 10027c4a +10027c04: f894 3048 ldrb.w r3, [r4, #72] ; 0x48 +10027c08: 07db lsls r3, r3, #31 +10027c0a: d51b bpl.n 10027c44 +10027c0c: f241 035c movw r3, #4188 ; 0x105c +10027c10: 5ceb ldrb r3, [r5, r3] +10027c12: 2b00 cmp r3, #0 +10027c14: d0ec beq.n 10027bf0 +10027c16: f894 0058 ldrb.w r0, [r4, #88] ; 0x58 +10027c1a: eb05 1000 add.w r0, r5, r0, lsl #4 +10027c1e: f600 506c addw r0, r0, #3436 ; 0xd6c +10027c22: f894 1021 ldrb.w r1, [r4, #33] ; 0x21 +10027c26: 6f23 ldr r3, [r4, #112] ; 0x70 +10027c28: f894 2030 ldrb.w r2, [r4, #48] ; 0x30 +10027c2c: 9000 str r0, [sp, #0] +10027c2e: 2010 movs r0, #16 +10027c30: 1a5b subs r3, r3, r1 +10027c32: 9001 str r0, [sp, #4] +10027c34: a805 add r0, sp, #20 +10027c36: 9003 str r0, [sp, #12] +10027c38: 9602 str r6, [sp, #8] +10027c3a: 6fa0 ldr r0, [r4, #120] ; 0x78 +10027c3c: 1a9b subs r3, r3, r2 +10027c3e: f016 fe63 bl 1003e908 <__tkip_80211_decrypt_veneer> +10027c42: e002 b.n 10027c4a +10027c44: f500 709c add.w r0, r0, #312 ; 0x138 +10027c48: e7eb b.n 10027c22 +10027c4a: b006 add sp, #24 +10027c4c: bd70 pop {r4, r5, r6, pc} + +10027c4e : +10027c4e: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +10027c50: f8d1 5080 ldr.w r5, [r1, #128] ; 0x80 +10027c54: 4606 mov r6, r0 +10027c56: 460c mov r4, r1 +10027c58: b90d cbnz r5, 10027c5e +10027c5a: 2000 movs r0, #0 +10027c5c: e02b b.n 10027cb6 +10027c5e: 7f0b ldrb r3, [r1, #28] +10027c60: 2b04 cmp r3, #4 +10027c62: d123 bne.n 10027cac +10027c64: 6f08 ldr r0, [r1, #112] ; 0x70 +10027c66: b930 cbnz r0, 10027c76 +10027c68: f506 6046 add.w r0, r6, #3168 ; 0xc60 +10027c6c: 3157 adds r1, #87 ; 0x57 +10027c6e: f000 fb21 bl 100282b4 +10027c72: 2800 cmp r0, #0 +10027c74: d0f1 beq.n 10027c5a +10027c76: f894 2057 ldrb.w r2, [r4, #87] ; 0x57 +10027c7a: 07d3 lsls r3, r2, #31 +10027c7c: d518 bpl.n 10027cb0 +10027c7e: f8d6 3d68 ldr.w r3, [r6, #3432] ; 0xd68 +10027c82: eb06 1303 add.w r3, r6, r3, lsl #4 +10027c86: f603 536c addw r3, r3, #3436 ; 0xd6c +10027c8a: 8a61 ldrh r1, [r4, #18] +10027c8c: 69a2 ldr r2, [r4, #24] +10027c8e: 7f60 ldrb r0, [r4, #29] +10027c90: 1a52 subs r2, r2, r1 +10027c92: 1a12 subs r2, r2, r0 +10027c94: 8d28 ldrh r0, [r5, #40] ; 0x28 +10027c96: 7fa4 ldrb r4, [r4, #30] +10027c98: f000 000c and.w r0, r0, #12 +10027c9c: 9000 str r0, [sp, #0] +10027c9e: a802 add r0, sp, #8 +10027ca0: 9001 str r0, [sp, #4] +10027ca2: 1b12 subs r2, r2, r4 +10027ca4: f105 0028 add.w r0, r5, #40 ; 0x28 +10027ca8: f016 fe76 bl 1003e998 <__aes_80211_encrypt_veneer> +10027cac: 2001 movs r0, #1 +10027cae: e002 b.n 10027cb6 +10027cb0: f500 739c add.w r3, r0, #312 ; 0x138 +10027cb4: e7e9 b.n 10027c8a +10027cb6: b004 add sp, #16 +10027cb8: bd70 pop {r4, r5, r6, pc} + +10027cba : +10027cba: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +10027cbc: f891 302f ldrb.w r3, [r1, #47] ; 0x2f +10027cc0: 4605 mov r5, r0 +10027cc2: 2b04 cmp r3, #4 +10027cc4: 460c mov r4, r1 +10027cc6: 6f8e ldr r6, [r1, #120] ; 0x78 +10027cc8: d123 bne.n 10027d12 +10027cca: f500 6046 add.w r0, r0, #3168 ; 0xc60 +10027cce: 3142 adds r1, #66 ; 0x42 +10027cd0: f000 faf0 bl 100282b4 +10027cd4: b310 cbz r0, 10027d1c +10027cd6: f894 3048 ldrb.w r3, [r4, #72] ; 0x48 +10027cda: 07db lsls r3, r3, #31 +10027cdc: d51b bpl.n 10027d16 +10027cde: f241 035c movw r3, #4188 ; 0x105c +10027ce2: 5ce8 ldrb r0, [r5, r3] +10027ce4: b1d0 cbz r0, 10027d1c +10027ce6: f894 3058 ldrb.w r3, [r4, #88] ; 0x58 +10027cea: eb05 1503 add.w r5, r5, r3, lsl #4 +10027cee: f605 536c addw r3, r5, #3436 ; 0xd6c +10027cf2: 8830 ldrh r0, [r6, #0] +10027cf4: f894 1021 ldrb.w r1, [r4, #33] ; 0x21 +10027cf8: 6f22 ldr r2, [r4, #112] ; 0x70 +10027cfa: f000 000c and.w r0, r0, #12 +10027cfe: f894 4030 ldrb.w r4, [r4, #48] ; 0x30 +10027d02: 1a52 subs r2, r2, r1 +10027d04: 9000 str r0, [sp, #0] +10027d06: a802 add r0, sp, #8 +10027d08: 9001 str r0, [sp, #4] +10027d0a: 1b12 subs r2, r2, r4 +10027d0c: 4630 mov r0, r6 +10027d0e: f016 fd9b bl 1003e848 <__aes_80211_decrypt_veneer> +10027d12: 2001 movs r0, #1 +10027d14: e002 b.n 10027d1c +10027d16: f500 739c add.w r3, r0, #312 ; 0x138 +10027d1a: e7ea b.n 10027cf2 +10027d1c: b004 add sp, #16 +10027d1e: bd70 pop {r4, r5, r6, pc} + +10027d20 : +10027d20: b538 push {r3, r4, r5, lr} +10027d22: 6845 ldr r5, [r0, #4] +10027d24: 4604 mov r4, r0 +10027d26: 2d01 cmp r5, #1 +10027d28: d010 beq.n 10027d4c +10027d2a: 2d02 cmp r5, #2 +10027d2c: d00b beq.n 10027d46 +10027d2e: 2d05 cmp r5, #5 +10027d30: d009 beq.n 10027d46 +10027d32: 2d03 cmp r5, #3 +10027d34: d109 bne.n 10027d4a +10027d36: f641 0369 movw r3, #6249 ; 0x1869 +10027d3a: 5cc3 ldrb r3, [r0, r3] +10027d3c: 2b00 cmp r3, #0 +10027d3e: bf14 ite ne +10027d40: 2503 movne r5, #3 +10027d42: 2501 moveq r5, #1 +10027d44: e002 b.n 10027d4c +10027d46: 2503 movs r5, #3 +10027d48: e000 b.n 10027d4c +10027d4a: 2501 movs r5, #1 +10027d4c: f44f 7049 mov.w r0, #804 ; 0x324 +10027d50: 4368 muls r0, r5 +10027d52: f241 3334 movw r3, #4916 ; 0x1334 +10027d56: 3004 adds r0, #4 +10027d58: 50e0 str r0, [r4, r3] +10027d5a: f7ef fd19 bl 10017790 +10027d5e: f241 3330 movw r3, #4912 ; 0x1330 +10027d62: 50e0 str r0, [r4, r3] +10027d64: b1a0 cbz r0, 10027d90 +10027d66: f020 0003 bic.w r0, r0, #3 +10027d6a: 3004 adds r0, #4 +10027d6c: f241 3338 movw r3, #4920 ; 0x1338 +10027d70: 2d01 cmp r5, #1 +10027d72: 50e0 str r0, [r4, r3] +10027d74: d00b beq.n 10027d8e +10027d76: f500 7249 add.w r2, r0, #804 ; 0x324 +10027d7a: f241 333c movw r3, #4924 ; 0x133c +10027d7e: 2d03 cmp r5, #3 +10027d80: 50e2 str r2, [r4, r3] +10027d82: d104 bne.n 10027d8e +10027d84: f504 549a add.w r4, r4, #4928 ; 0x1340 +10027d88: f500 60c9 add.w r0, r0, #1608 ; 0x648 +10027d8c: 6020 str r0, [r4, #0] +10027d8e: 2001 movs r0, #1 +10027d90: bd38 pop {r3, r4, r5, pc} + +10027d92 : +10027d92: b510 push {r4, lr} +10027d94: 4604 mov r4, r0 +10027d96: f8d0 0628 ldr.w r0, [r0, #1576] ; 0x628 +10027d9a: b148 cbz r0, 10027db0 +10027d9c: f8d4 162c ldr.w r1, [r4, #1580] ; 0x62c +10027da0: b131 cbz r1, 10027db0 +10027da2: f7ef fb40 bl 10017426 +10027da6: 2300 movs r3, #0 +10027da8: f8c4 3628 str.w r3, [r4, #1576] ; 0x628 +10027dac: f8c4 362c str.w r3, [r4, #1580] ; 0x62c +10027db0: bd10 pop {r4, pc} + +10027db2 : +10027db2: 7843 ldrb r3, [r0, #1] +10027db4: 7802 ldrb r2, [r0, #0] +10027db6: ea83 0282 eor.w r2, r3, r2, lsl #2 +10027dba: 7883 ldrb r3, [r0, #2] +10027dbc: ea83 0282 eor.w r2, r3, r2, lsl #2 +10027dc0: 78c3 ldrb r3, [r0, #3] +10027dc2: ea83 0282 eor.w r2, r3, r2, lsl #2 +10027dc6: 7903 ldrb r3, [r0, #4] +10027dc8: ea83 0282 eor.w r2, r3, r2, lsl #2 +10027dcc: 7943 ldrb r3, [r0, #5] +10027dce: ea83 0082 eor.w r0, r3, r2, lsl #2 +10027dd2: ea80 2010 eor.w r0, r0, r0, lsr #8 +10027dd6: f000 0004 and.w r0, r0, #4 +10027dda: 4770 bx lr + +10027ddc <_addba_timer_hdl>: +10027ddc: f7fa bccb b.w 10022776 + +10027de0 <_rtw_init_stainfo>: +10027de0: b538 push {r3, r4, r5, lr} +10027de2: 2100 movs r1, #0 +10027de4: 4604 mov r4, r0 +10027de6: f44f 7254 mov.w r2, #848 ; 0x350 +10027dea: f7ef fb31 bl 10017450 +10027dee: 4620 mov r0, r4 +10027df0: f7ef fbdc bl 100175ac +10027df4: 1d20 adds r0, r4, #4 +10027df6: f7ef fb33 bl 10017460 +10027dfa: f104 000c add.w r0, r4, #12 +10027dfe: 2500 movs r5, #0 +10027e00: f7ef fb2e bl 10017460 +10027e04: f104 00e8 add.w r0, r4, #232 ; 0xe8 +10027e08: f7ef fbd8 bl 100175bc +10027e0c: f104 0018 add.w r0, r4, #24 +10027e10: f8c4 50f4 str.w r5, [r4, #244] ; 0xf4 +10027e14: f001 fa6c bl 100292f0 <_rtw_init_sta_xmit_priv> +10027e18: f104 00b4 add.w r0, r4, #180 ; 0xb4 +10027e1c: f7fe fce0 bl 100267e0 <_rtw_init_sta_recv_priv> +10027e20: f504 7007 add.w r0, r4, #540 ; 0x21c +10027e24: f7ef fb1c bl 10017460 +10027e28: f504 7009 add.w r0, r4, #548 ; 0x224 +10027e2c: f7ef fb18 bl 10017460 +10027e30: f884 52e4 strb.w r5, [r4, #740] ; 0x2e4 +10027e34: f884 5305 strb.w r5, [r4, #773] ; 0x305 +10027e38: f884 5306 strb.w r5, [r4, #774] ; 0x306 +10027e3c: f884 5307 strb.w r5, [r4, #775] ; 0x307 +10027e40: f884 5308 strb.w r5, [r4, #776] ; 0x308 +10027e44: f884 5309 strb.w r5, [r4, #777] ; 0x309 +10027e48: f884 530a strb.w r5, [r4, #778] ; 0x30a +10027e4c: f8c4 522c str.w r5, [r4, #556] ; 0x22c +10027e50: f8c4 52c8 str.w r5, [r4, #712] ; 0x2c8 +10027e54: f8a4 52c4 strh.w r5, [r4, #708] ; 0x2c4 +10027e58: f8c4 5230 str.w r5, [r4, #560] ; 0x230 +10027e5c: f8c4 5234 str.w r5, [r4, #564] ; 0x234 +10027e60: f8c4 5238 str.w r5, [r4, #568] ; 0x238 +10027e64: bd38 pop {r3, r4, r5, pc} + +10027e66 <_rtw_init_sta_priv>: +10027e66: 6843 ldr r3, [r0, #4] +10027e68: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10027e6c: 2b01 cmp r3, #1 +10027e6e: 4604 mov r4, r0 +10027e70: d00b beq.n 10027e8a <_rtw_init_sta_priv+0x24> +10027e72: 2b04 cmp r3, #4 +10027e74: d009 beq.n 10027e8a <_rtw_init_sta_priv+0x24> +10027e76: 2b03 cmp r3, #3 +10027e78: d109 bne.n 10027e8e <_rtw_init_sta_priv+0x28> +10027e7a: f641 0369 movw r3, #6249 ; 0x1869 +10027e7e: 5cc3 ldrb r3, [r0, r3] +10027e80: 2b00 cmp r3, #0 +10027e82: bf14 ite ne +10027e84: 2505 movne r5, #5 +10027e86: 2502 moveq r5, #2 +10027e88: e002 b.n 10027e90 <_rtw_init_sta_priv+0x2a> +10027e8a: 2502 movs r5, #2 +10027e8c: e000 b.n 10027e90 <_rtw_init_sta_priv+0x2a> +10027e8e: 2505 movs r5, #5 +10027e90: f44f 7054 mov.w r0, #848 ; 0x350 +10027e94: 4368 muls r0, r5 +10027e96: 3004 adds r0, #4 +10027e98: f8c4 0c64 str.w r0, [r4, #3172] ; 0xc64 +10027e9c: f7ef fc78 bl 10017790 +10027ea0: f8c4 0c60 str.w r0, [r4, #3168] ; 0xc60 +10027ea4: 2800 cmp r0, #0 +10027ea6: d050 beq.n 10027f4a <_rtw_init_sta_priv+0xe4> +10027ea8: f020 0003 bic.w r0, r0, #3 +10027eac: 3004 adds r0, #4 +10027eae: f604 486c addw r8, r4, #3180 ; 0xc6c +10027eb2: f8c4 0c68 str.w r0, [r4, #3176] ; 0xc68 +10027eb6: 4640 mov r0, r8 +10027eb8: f7ef fb80 bl 100175bc +10027ebc: 2700 movs r7, #0 +10027ebe: f604 4078 addw r0, r4, #3192 ; 0xc78 +10027ec2: f7ef fb73 bl 100175ac +10027ec6: f604 40a8 addw r0, r4, #3240 ; 0xca8 +10027eca: f8c4 7ca4 str.w r7, [r4, #3236] ; 0xca4 +10027ece: f7ef fb75 bl 100175bc +10027ed2: f604 40b4 addw r0, r4, #3252 ; 0xcb4 +10027ed6: f7ef fb71 bl 100175bc +10027eda: f8d4 6c68 ldr.w r6, [r4, #3176] ; 0xc68 +10027ede: 3604 adds r6, #4 +10027ee0: 4630 mov r0, r6 +10027ee2: f7ef fabd bl 10017460 +10027ee6: 3701 adds r7, #1 +10027ee8: 4630 mov r0, r6 +10027eea: 4641 mov r1, r8 +10027eec: f7ef fac6 bl 1001747c +10027ef0: 42af cmp r7, r5 +10027ef2: f506 7654 add.w r6, r6, #848 ; 0x350 +10027ef6: d1f3 bne.n 10027ee0 <_rtw_init_sta_priv+0x7a> +10027ef8: 2600 movs r6, #0 +10027efa: f604 407c addw r0, r4, #3196 ; 0xc7c +10027efe: 4430 add r0, r6 +10027f00: 3608 adds r6, #8 +10027f02: f7ef faad bl 10017460 +10027f06: 2e28 cmp r6, #40 ; 0x28 +10027f08: d1f7 bne.n 10027efa <_rtw_init_sta_priv+0x94> +10027f0a: 2300 movs r3, #0 +10027f0c: f8a4 3cfc strh.w r3, [r4, #3324] ; 0xcfc +10027f10: f8a4 3cfe strh.w r3, [r4, #3326] ; 0xcfe +10027f14: f604 40c4 addw r0, r4, #3268 ; 0xcc4 +10027f18: f7ef faa2 bl 10017460 +10027f1c: f604 40cc addw r0, r4, #3276 ; 0xccc +10027f20: f7ef fa9e bl 10017460 +10027f24: f604 40d4 addw r0, r4, #3284 ; 0xcd4 +10027f28: f7ef fb40 bl 100175ac +10027f2c: f604 40d8 addw r0, r4, #3288 ; 0xcd8 +10027f30: f7ef fb3c bl 100175ac +10027f34: 2303 movs r3, #3 +10027f36: f8c4 3cdc str.w r3, [r4, #3292] ; 0xcdc +10027f3a: f8c4 3ce0 str.w r3, [r4, #3296] ; 0xce0 +10027f3e: 233c movs r3, #60 ; 0x3c +10027f40: f8c4 3ce4 str.w r3, [r4, #3300] ; 0xce4 +10027f44: f8a4 5d00 strh.w r5, [r4, #3328] ; 0xd00 +10027f48: 2001 movs r0, #1 +10027f4a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10027f4e <_rtw_free_sta_xmit_priv_lock>: +10027f4e: b510 push {r4, lr} +10027f50: 4604 mov r4, r0 +10027f52: f7ef fb39 bl 100175c8 +10027f56: f104 001c add.w r0, r4, #28 +10027f5a: f7ef fb35 bl 100175c8 +10027f5e: f104 0034 add.w r0, r4, #52 ; 0x34 +10027f62: f7ef fb31 bl 100175c8 +10027f66: f104 004c add.w r0, r4, #76 ; 0x4c +10027f6a: f7ef fb2d bl 100175c8 +10027f6e: f104 0064 add.w r0, r4, #100 ; 0x64 +10027f72: e8bd 4010 ldmia.w sp!, {r4, lr} +10027f76: f7ef bb27 b.w 100175c8 + +10027f7a : +10027f7a: b510 push {r4, lr} +10027f7c: 4604 mov r4, r0 +10027f7e: f7ef fb23 bl 100175c8 +10027f82: f104 0018 add.w r0, r4, #24 +10027f86: f7ff ffe2 bl 10027f4e <_rtw_free_sta_xmit_priv_lock> +10027f8a: f104 00b4 add.w r0, r4, #180 ; 0xb4 +10027f8e: f7ef fb1b bl 100175c8 +10027f92: f104 00c4 add.w r0, r4, #196 ; 0xc4 +10027f96: f7ef fb17 bl 100175c8 +10027f9a: f104 00f0 add.w r0, r4, #240 ; 0xf0 +10027f9e: e8bd 4010 ldmia.w sp!, {r4, lr} +10027fa2: f7ef bb11 b.w 100175c8 + +10027fa6 : +10027fa6: b510 push {r4, lr} +10027fa8: 4604 mov r4, r0 +10027faa: 3014 adds r0, #20 +10027fac: f7ef fb0c bl 100175c8 +10027fb0: f104 0018 add.w r0, r4, #24 +10027fb4: f7ef fb08 bl 100175c8 +10027fb8: f104 005c add.w r0, r4, #92 ; 0x5c +10027fbc: f7ef fb04 bl 100175c8 +10027fc0: f104 0050 add.w r0, r4, #80 ; 0x50 +10027fc4: f7ef fb00 bl 100175c8 +10027fc8: f104 0074 add.w r0, r4, #116 ; 0x74 +10027fcc: f7ef fafc bl 100175c8 +10027fd0: f104 0078 add.w r0, r4, #120 ; 0x78 +10027fd4: e8bd 4010 ldmia.w sp!, {r4, lr} +10027fd8: f7ef baf6 b.w 100175c8 + +10027fdc <_rtw_free_sta_priv>: +10027fdc: b510 push {r4, lr} +10027fde: 4604 mov r4, r0 +10027fe0: b150 cbz r0, 10027ff8 <_rtw_free_sta_priv+0x1c> +10027fe2: f7ff ffe0 bl 10027fa6 +10027fe6: 6820 ldr r0, [r4, #0] +10027fe8: b130 cbz r0, 10027ff8 <_rtw_free_sta_priv+0x1c> +10027fea: 6861 ldr r1, [r4, #4] +10027fec: b121 cbz r1, 10027ff8 <_rtw_free_sta_priv+0x1c> +10027fee: f7ef fa1a bl 10017426 +10027ff2: 2300 movs r3, #0 +10027ff4: 6023 str r3, [r4, #0] +10027ff6: 6063 str r3, [r4, #4] +10027ff8: 2001 movs r0, #1 +10027ffa: bd10 pop {r4, pc} + +10027ffc : +10027ffc: b507 push {r0, r1, r2, lr} +10027ffe: 460b mov r3, r1 +10028000: 4906 ldr r1, [pc, #24] ; (1002801c ) +10028002: 4602 mov r2, r0 +10028004: 9100 str r1, [sp, #0] +10028006: f641 0134 movw r1, #6196 ; 0x1834 +1002800a: 5851 ldr r1, [r2, r1] +1002800c: f503 70e4 add.w r0, r3, #456 ; 0x1c8 +10028010: 4a03 ldr r2, [pc, #12] ; (10028020 ) +10028012: f00e ff0d bl 10036e30 +10028016: b003 add sp, #12 +10028018: f85d fb04 ldr.w pc, [sp], #4 +1002801c: 10041708 .word 0x10041708 +10028020: 10027ddd .word 0x10027ddd + +10028024 : +10028024: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} +10028028: f100 0714 add.w r7, r0, #20 +1002802c: f64f 73ff movw r3, #65535 ; 0xffff +10028030: f100 040c add.w r4, r0, #12 +10028034: 4605 mov r5, r0 +10028036: 4688 mov r8, r1 +10028038: 4638 mov r0, r7 +1002803a: a902 add r1, sp, #8 +1002803c: f8ad 3006 strh.w r3, [sp, #6] +10028040: f7ef fad2 bl 100175e8 +10028044: 4620 mov r0, r4 +10028046: f7ef faa7 bl 10017598 +1002804a: 2801 cmp r0, #1 +1002804c: d104 bne.n 10028058 +1002804e: 4638 mov r0, r7 +10028050: a902 add r1, sp, #8 +10028052: f7ef fad3 bl 100175fc +10028056: e045 b.n 100280e4 +10028058: 68ee ldr r6, [r5, #12] +1002805a: 4630 mov r0, r6 +1002805c: f7ef fa14 bl 10017488 +10028060: 1f34 subs r4, r6, #4 +10028062: a902 add r1, sp, #8 +10028064: 4638 mov r0, r7 +10028066: f7ef fac9 bl 100175fc +1002806a: 4620 mov r0, r4 +1002806c: f7ff feb8 bl 10027de0 <_rtw_init_stainfo> +10028070: 6e2b ldr r3, [r5, #96] ; 0x60 +10028072: f506 7082 add.w r0, r6, #260 ; 0x104 +10028076: 6163 str r3, [r4, #20] +10028078: 4641 mov r1, r8 +1002807a: 2206 movs r2, #6 +1002807c: f7ef f9d8 bl 10017430 +10028080: 4640 mov r0, r8 +10028082: f7ff fe96 bl 10027db2 +10028086: 2804 cmp r0, #4 +10028088: dc2c bgt.n 100280e4 +1002808a: eb05 00c0 add.w r0, r5, r0, lsl #3 +1002808e: f105 0718 add.w r7, r5, #24 +10028092: f100 081c add.w r8, r0, #28 +10028096: a903 add r1, sp, #12 +10028098: 4638 mov r0, r7 +1002809a: f7ef faa5 bl 100175e8 +1002809e: f106 0008 add.w r0, r6, #8 +100280a2: 4641 mov r1, r8 +100280a4: f7ef f9ea bl 1001747c +100280a8: 6c6b ldr r3, [r5, #68] ; 0x44 +100280aa: 4638 mov r0, r7 +100280ac: 3301 adds r3, #1 +100280ae: 646b str r3, [r5, #68] ; 0x44 +100280b0: a903 add r1, sp, #12 +100280b2: f7ef faa3 bl 100175fc +100280b6: 2600 movs r6, #0 +100280b8: f104 00c8 add.w r0, r4, #200 ; 0xc8 +100280bc: 4430 add r0, r6 +100280be: f10d 0106 add.w r1, sp, #6 +100280c2: 2202 movs r2, #2 +100280c4: 3602 adds r6, #2 +100280c6: f7ef f9b3 bl 10017430 +100280ca: 2e20 cmp r6, #32 +100280cc: d1f4 bne.n 100280b8 +100280ce: 6e28 ldr r0, [r5, #96] ; 0x60 +100280d0: 4621 mov r1, r4 +100280d2: f7ff ff93 bl 10027ffc +100280d6: f04f 33ff mov.w r3, #4294967295 +100280da: f8c4 3320 str.w r3, [r4, #800] ; 0x320 +100280de: f8c4 3324 str.w r3, [r4, #804] ; 0x324 +100280e2: e000 b.n 100280e6 +100280e4: 2400 movs r4, #0 +100280e6: 4620 mov r0, r4 +100280e8: b004 add sp, #16 +100280ea: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +100280ee : +100280ee: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +100280f0: 4605 mov r5, r0 +100280f2: f600 1658 addw r6, r0, #2392 ; 0x958 +100280f6: 460c mov r4, r1 +100280f8: 2900 cmp r1, #0 +100280fa: f000 80d7 beq.w 100282ac +100280fe: 4630 mov r0, r6 +10028100: a901 add r1, sp, #4 +10028102: f7ef fa71 bl 100175e8 +10028106: 2700 movs r7, #0 +10028108: 4630 mov r0, r6 +1002810a: f104 01e8 add.w r1, r4, #232 ; 0xe8 +1002810e: f001 fc78 bl 10029a02 +10028112: 4630 mov r0, r6 +10028114: f104 0174 add.w r1, r4, #116 ; 0x74 +10028118: f8c4 70f4 str.w r7, [r4, #244] ; 0xf4 +1002811c: f001 fc71 bl 10029a02 +10028120: f104 006c add.w r0, r4, #108 ; 0x6c +10028124: f7ef f9b0 bl 10017488 +10028128: 4630 mov r0, r6 +1002812a: f104 015c add.w r1, r4, #92 ; 0x5c +1002812e: f001 fc68 bl 10029a02 +10028132: f104 0054 add.w r0, r4, #84 ; 0x54 +10028136: f7ef f9a7 bl 10017488 +1002813a: 4630 mov r0, r6 +1002813c: f104 0144 add.w r1, r4, #68 ; 0x44 +10028140: f001 fc5f bl 10029a02 +10028144: f104 003c add.w r0, r4, #60 ; 0x3c +10028148: f7ef f99e bl 10017488 +1002814c: 4630 mov r0, r6 +1002814e: f104 012c add.w r1, r4, #44 ; 0x2c +10028152: f001 fc56 bl 10029a02 +10028156: f104 0024 add.w r0, r4, #36 ; 0x24 +1002815a: f7ef f995 bl 10017488 +1002815e: a901 add r1, sp, #4 +10028160: 4630 mov r0, r6 +10028162: f7ef fa4b bl 100175fc +10028166: f104 000c add.w r0, r4, #12 +1002816a: f7ef f98d bl 10017488 +1002816e: f8d5 3ca4 ldr.w r3, [r5, #3236] ; 0xca4 +10028172: f504 70e4 add.w r0, r4, #456 ; 0x1c8 +10028176: 3b01 subs r3, #1 +10028178: f8c5 3ca4 str.w r3, [r5, #3236] ; 0xca4 +1002817c: f00e fe63 bl 10036e46 +10028180: f504 7607 add.w r6, r4, #540 ; 0x21c +10028184: 4628 mov r0, r5 +10028186: 4639 mov r1, r7 +10028188: 4622 mov r2, r4 +1002818a: 463b mov r3, r7 +1002818c: f00a f9d1 bl 10032532 +10028190: 4630 mov r0, r6 +10028192: f7ef f968 bl 10017466 +10028196: b960 cbnz r0, 100281b2 +10028198: f605 47d4 addw r7, r5, #3284 ; 0xcd4 +1002819c: a901 add r1, sp, #4 +1002819e: 4638 mov r0, r7 +100281a0: f7ef fa22 bl 100175e8 +100281a4: 4630 mov r0, r6 +100281a6: f7ef f96f bl 10017488 +100281aa: 4638 mov r0, r7 +100281ac: a901 add r1, sp, #4 +100281ae: f7ef fa25 bl 100175fc +100281b2: f504 7609 add.w r6, r4, #548 ; 0x224 +100281b6: 4630 mov r0, r6 +100281b8: f7ef f955 bl 10017466 +100281bc: b960 cbnz r0, 100281d8 +100281be: f605 47d8 addw r7, r5, #3288 ; 0xcd8 +100281c2: a901 add r1, sp, #4 +100281c4: 4638 mov r0, r7 +100281c6: f7ef fa0f bl 100175e8 +100281ca: 4630 mov r0, r6 +100281cc: f7ef f95c bl 10017488 +100281d0: 4638 mov r0, r7 +100281d2: a901 add r1, sp, #4 +100281d4: f7ef fa12 bl 100175fc +100281d8: 692a ldr r2, [r5, #16] +100281da: 06d1 lsls r1, r2, #27 +100281dc: d44e bmi.n 1002827c +100281de: 0713 lsls r3, r2, #28 +100281e0: d457 bmi.n 10028292 +100281e2: f8d4 20fc ldr.w r2, [r4, #252] ; 0xfc +100281e6: 2101 movs r1, #1 +100281e8: 4091 lsls r1, r2 +100281ea: 2300 movs r3, #0 +100281ec: f884 3310 strb.w r3, [r4, #784] ; 0x310 +100281f0: f884 3311 strb.w r3, [r4, #785] ; 0x311 +100281f4: f884 3312 strb.w r3, [r4, #786] ; 0x312 +100281f8: f884 3313 strb.w r3, [r4, #787] ; 0x313 +100281fc: f884 3314 strb.w r3, [r4, #788] ; 0x314 +10028200: f884 3315 strb.w r3, [r4, #789] ; 0x315 +10028204: f884 3316 strb.w r3, [r4, #790] ; 0x316 +10028208: f8b5 0cfc ldrh.w r0, [r5, #3324] ; 0xcfc +1002820c: 43c9 mvns r1, r1 +1002820e: b289 uxth r1, r1 +10028210: 4008 ands r0, r1 +10028212: f8c4 3230 str.w r3, [r4, #560] ; 0x230 +10028216: f8c4 3234 str.w r3, [r4, #564] ; 0x234 +1002821a: f8c4 3238 str.w r3, [r4, #568] ; 0x238 +1002821e: f8c4 322c str.w r3, [r4, #556] ; 0x22c +10028222: f8c4 3318 str.w r3, [r4, #792] ; 0x318 +10028226: f8a5 0cfc strh.w r0, [r5, #3324] ; 0xcfc +1002822a: f8b5 0cfe ldrh.w r0, [r5, #3326] ; 0xcfe +1002822e: 4001 ands r1, r0 +10028230: f8a5 1cfe strh.w r1, [r5, #3326] ; 0xcfe +10028234: b172 cbz r2, 10028254 +10028236: 3a01 subs r2, #1 +10028238: eb05 0282 add.w r2, r5, r2, lsl #2 +1002823c: f8d2 1ce8 ldr.w r1, [r2, #3304] ; 0xce8 +10028240: 42a1 cmp r1, r4 +10028242: d107 bne.n 10028254 +10028244: f241 3138 movw r1, #4920 ; 0x1338 +10028248: 5851 ldr r1, [r2, r1] +1002824a: 600b str r3, [r1, #0] +1002824c: f8c2 3ce8 str.w r3, [r2, #3304] ; 0xce8 +10028250: f8c4 30fc str.w r3, [r4, #252] ; 0xfc +10028254: f605 466c addw r6, r5, #3180 ; 0xc6c +10028258: f605 4574 addw r5, r5, #3188 ; 0xc74 +1002825c: 4628 mov r0, r5 +1002825e: a901 add r1, sp, #4 +10028260: f7ef f9c2 bl 100175e8 +10028264: 1d20 adds r0, r4, #4 +10028266: 4631 mov r1, r6 +10028268: f7ef f908 bl 1001747c +1002826c: 4628 mov r0, r5 +1002826e: a901 add r1, sp, #4 +10028270: f7ef f9c4 bl 100175fc +10028274: 4620 mov r0, r4 +10028276: f7ff fe80 bl 10027f7a +1002827a: e017 b.n 100282ac +1002827c: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc +10028280: 2b00 cmp r3, #0 +10028282: d0ac beq.n 100281de +10028284: f203 43cd addw r3, r3, #1229 ; 0x4cd +10028288: f855 0023 ldr.w r0, [r5, r3, lsl #2] +1002828c: f500 703d add.w r0, r0, #756 ; 0x2f4 +10028290: e009 b.n 100282a6 +10028292: f241 3638 movw r6, #4920 ; 0x1338 +10028296: 59a8 ldr r0, [r5, r6] +10028298: f500 703d add.w r0, r0, #756 ; 0x2f4 +1002829c: f00e fdd3 bl 10036e46 +100282a0: 59a8 ldr r0, [r5, r6] +100282a2: f500 7041 add.w r0, r0, #772 ; 0x304 +100282a6: f00e fdce bl 10036e46 +100282aa: e79a b.n 100281e2 +100282ac: 2001 movs r0, #1 +100282ae: b003 add sp, #12 +100282b0: bdf0 pop {r4, r5, r6, r7, pc} + ... + +100282b4 : +100282b4: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} +100282b8: 4a1c ldr r2, [pc, #112] ; (1002832c ) +100282ba: 4605 mov r5, r0 +100282bc: 6810 ldr r0, [r2, #0] +100282be: 8892 ldrh r2, [r2, #4] +100282c0: ab02 add r3, sp, #8 +100282c2: 9002 str r0, [sp, #8] +100282c4: f8ad 200c strh.w r2, [sp, #12] +100282c8: 460c mov r4, r1 +100282ca: b359 cbz r1, 10028324 +100282cc: 780a ldrb r2, [r1, #0] +100282ce: f105 0618 add.w r6, r5, #24 +100282d2: f012 0f01 tst.w r2, #1 +100282d6: bf18 it ne +100282d8: 461c movne r4, r3 +100282da: 4620 mov r0, r4 +100282dc: f7ff fd69 bl 10027db2 +100282e0: 4607 mov r7, r0 +100282e2: 3703 adds r7, #3 +100282e4: eb05 05c7 add.w r5, r5, r7, lsl #3 +100282e8: 4630 mov r0, r6 +100282ea: a901 add r1, sp, #4 +100282ec: f7ef f97c bl 100175e8 +100282f0: 1d2f adds r7, r5, #4 +100282f2: 686d ldr r5, [r5, #4] +100282f4: 4638 mov r0, r7 +100282f6: 4629 mov r1, r5 +100282f8: f7ef f953 bl 100175a2 +100282fc: b968 cbnz r0, 1002831a +100282fe: f105 00fc add.w r0, r5, #252 ; 0xfc +10028302: 4621 mov r1, r4 +10028304: 2206 movs r2, #6 +10028306: f7ef f89b bl 10017440 +1002830a: 2801 cmp r0, #1 +1002830c: f1a5 080c sub.w r8, r5, #12 +10028310: d101 bne.n 10028316 +10028312: 4644 mov r4, r8 +10028314: e002 b.n 1002831c +10028316: 682d ldr r5, [r5, #0] +10028318: e7ec b.n 100282f4 +1002831a: 2400 movs r4, #0 +1002831c: 4630 mov r0, r6 +1002831e: a901 add r1, sp, #4 +10028320: f7ef f96c bl 100175fc +10028324: 4620 mov r0, r4 +10028326: b004 add sp, #16 +10028328: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1002832c: 10041702 .word 0x10041702 + +10028330 : +10028330: b507 push {r0, r1, r2, lr} +10028332: 4b0a ldr r3, [pc, #40] ; (1002835c ) +10028334: 4602 mov r2, r0 +10028336: 6818 ldr r0, [r3, #0] +10028338: 889b ldrh r3, [r3, #4] +1002833a: 9000 str r0, [sp, #0] +1002833c: 4669 mov r1, sp +1002833e: f502 6046 add.w r0, r2, #3168 ; 0xc60 +10028342: f8ad 3004 strh.w r3, [sp, #4] +10028346: f7ff fe6d bl 10028024 +1002834a: b110 cbz r0, 10028352 +1002834c: 2301 movs r3, #1 +1002834e: f8c0 3100 str.w r3, [r0, #256] ; 0x100 +10028352: 2001 movs r0, #1 +10028354: b003 add sp, #12 +10028356: f85d fb04 ldr.w pc, [sp], #4 +1002835a: bf00 nop +1002835c: 10041702 .word 0x10041702 + +10028360 : +10028360: b507 push {r0, r1, r2, lr} +10028362: 4b07 ldr r3, [pc, #28] ; (10028380 ) +10028364: 4602 mov r2, r0 +10028366: 6818 ldr r0, [r3, #0] +10028368: 889b ldrh r3, [r3, #4] +1002836a: 9000 str r0, [sp, #0] +1002836c: 4669 mov r1, sp +1002836e: f502 6046 add.w r0, r2, #3168 ; 0xc60 +10028372: f8ad 3004 strh.w r3, [sp, #4] +10028376: f7ff ff9d bl 100282b4 +1002837a: b003 add sp, #12 +1002837c: f85d fb04 ldr.w pc, [sp], #4 +10028380: 10041702 .word 0x10041702 + +10028384 : +10028384: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} +10028388: 4604 mov r4, r0 +1002838a: f7ff ffe9 bl 10028360 +1002838e: f8d4 3ca4 ldr.w r3, [r4, #3236] ; 0xca4 +10028392: 4682 mov sl, r0 +10028394: 2b01 cmp r3, #1 +10028396: d026 beq.n 100283e6 +10028398: f604 4778 addw r7, r4, #3192 ; 0xc78 +1002839c: 4638 mov r0, r7 +1002839e: a901 add r1, sp, #4 +100283a0: f7ef f922 bl 100175e8 +100283a4: f604 457c addw r5, r4, #3196 ; 0xc7c +100283a8: f604 49a4 addw r9, r4, #3236 ; 0xca4 +100283ac: 682e ldr r6, [r5, #0] +100283ae: 4628 mov r0, r5 +100283b0: 4631 mov r1, r6 +100283b2: f7ef f8f6 bl 100175a2 +100283b6: b978 cbnz r0, 100283d8 +100283b8: 4631 mov r1, r6 +100283ba: f1a6 080c sub.w r8, r6, #12 +100283be: 4620 mov r0, r4 +100283c0: f851 6bfc ldr.w r6, [r1], #252 +100283c4: 2203 movs r2, #3 +100283c6: f7f7 ffbd bl 10020344 +100283ca: 45c2 cmp sl, r8 +100283cc: d0ef beq.n 100283ae +100283ce: 4620 mov r0, r4 +100283d0: 4641 mov r1, r8 +100283d2: f7ff fe8c bl 100280ee +100283d6: e7ea b.n 100283ae +100283d8: 3508 adds r5, #8 +100283da: 454d cmp r5, r9 +100283dc: d1e6 bne.n 100283ac +100283de: 4638 mov r0, r7 +100283e0: a901 add r1, sp, #4 +100283e2: f7ef f90b bl 100175fc +100283e6: b002 add sp, #8 +100283e8: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + +100283ec : +100283ec: 2300 movs r3, #0 +100283ee: 428b cmp r3, r1 +100283f0: da0c bge.n 1002840c +100283f2: 5cc2 ldrb r2, [r0, r3] +100283f4: f002 027f and.w r2, r2, #127 ; 0x7f +100283f8: 2a02 cmp r2, #2 +100283fa: d009 beq.n 10028410 +100283fc: 2a04 cmp r2, #4 +100283fe: d007 beq.n 10028410 +10028400: 2a0b cmp r2, #11 +10028402: d005 beq.n 10028410 +10028404: 2a16 cmp r2, #22 +10028406: d003 beq.n 10028410 +10028408: 3301 adds r3, #1 +1002840a: e7f0 b.n 100283ee +1002840c: 2000 movs r0, #0 +1002840e: 4770 bx lr +10028410: 2001 movs r0, #1 +10028412: 4770 bx lr + +10028414 : +10028414: 2300 movs r3, #0 +10028416: 428b cmp r3, r1 +10028418: da0c bge.n 10028434 +1002841a: 5cc2 ldrb r2, [r0, r3] +1002841c: f002 027f and.w r2, r2, #127 ; 0x7f +10028420: 2a02 cmp r2, #2 +10028422: d005 beq.n 10028430 +10028424: 2a04 cmp r2, #4 +10028426: d003 beq.n 10028430 +10028428: 2a0b cmp r2, #11 +1002842a: d001 beq.n 10028430 +1002842c: 2a16 cmp r2, #22 +1002842e: d103 bne.n 10028438 +10028430: 3301 adds r3, #1 +10028432: e7f0 b.n 10028416 +10028434: 2001 movs r0, #1 +10028436: 4770 bx lr +10028438: 2000 movs r0, #0 +1002843a: 4770 bx lr + +1002843c : +1002843c: f241 63c8 movw r3, #5832 ; 0x16c8 +10028440: 3901 subs r1, #1 +10028442: 58c3 ldr r3, [r0, r3] +10028444: 2913 cmp r1, #19 +10028446: d824 bhi.n 10028492 +10028448: e8df f001 tbb [pc, r1] +1002844c: 250c250a .word 0x250c250a +10028450: 0e232323 .word 0x0e232323 +10028454: 23150e23 .word 0x23150e23 +10028458: 0e232323 .word 0x0e232323 +1002845c: 0e232323 .word 0x0e232323 +10028460: 2008 movs r0, #8 +10028462: 4770 bx lr +10028464: 2006 movs r0, #6 +10028466: 4770 bx lr +10028468: f893 303c ldrb.w r3, [r3, #60] ; 0x3c +1002846c: 2b02 cmp r3, #2 +1002846e: bf14 ite ne +10028470: 2005 movne r0, #5 +10028472: 2004 moveq r0, #4 +10028474: 4770 bx lr +10028476: f890 251f ldrb.w r2, [r0, #1311] ; 0x51f +1002847a: f893 003c ldrb.w r0, [r3, #60] ; 0x3c +1002847e: b922 cbnz r2, 1002848a +10028480: 2802 cmp r0, #2 +10028482: bf14 ite ne +10028484: 2003 movne r0, #3 +10028486: 2002 moveq r0, #2 +10028488: 4770 bx lr +1002848a: 3802 subs r0, #2 +1002848c: bf18 it ne +1002848e: 2001 movne r0, #1 +10028490: 4770 bx lr +10028492: 2000 movs r0, #0 +10028494: 4770 bx lr +10028496: 2007 movs r0, #7 +10028498: 4770 bx lr + +1002849a : +1002849a: b570 push {r4, r5, r6, lr} +1002849c: f890 351e ldrb.w r3, [r0, #1310] ; 0x51e +100284a0: 460d mov r5, r1 +100284a2: 2b0e cmp r3, #14 +100284a4: 4616 mov r6, r2 +100284a6: f890 3734 ldrb.w r3, [r0, #1844] ; 0x734 +100284aa: d904 bls.n 100284b6 +100284ac: 2b00 cmp r3, #0 +100284ae: bf14 ite ne +100284b0: 2014 movne r0, #20 +100284b2: 2004 moveq r0, #4 +100284b4: bd70 pop {r4, r5, r6, pc} +100284b6: 2b00 cmp r3, #0 +100284b8: 4608 mov r0, r1 +100284ba: 4611 mov r1, r2 +100284bc: bf14 ite ne +100284be: 2408 movne r4, #8 +100284c0: 2400 moveq r4, #0 +100284c2: f7ff ffa7 bl 10028414 +100284c6: 2801 cmp r0, #1 +100284c8: d102 bne.n 100284d0 +100284ca: f044 0001 orr.w r0, r4, #1 +100284ce: e009 b.n 100284e4 +100284d0: 4628 mov r0, r5 +100284d2: 4631 mov r1, r6 +100284d4: f7ff ff8a bl 100283ec +100284d8: 2801 cmp r0, #1 +100284da: bf0c ite eq +100284dc: f044 0003 orreq.w r0, r4, #3 +100284e0: f044 0002 orrne.w r0, r4, #2 +100284e4: b2c0 uxtb r0, r0 +100284e6: bd70 pop {r4, r5, r6, pc} + +100284e8 : +100284e8: f000 007f and.w r0, r0, #127 ; 0x7f +100284ec: 280b cmp r0, #11 +100284ee: bf9a itte ls +100284f0: 4b01 ldrls r3, [pc, #4] ; (100284f8 ) +100284f2: 5c18 ldrbls r0, [r3, r0] +100284f4: 2000 movhi r0, #0 +100284f6: 4770 bx lr +100284f8: 1004171a .word 0x1004171a + +100284fc : +100284fc: b570 push {r4, r5, r6, lr} +100284fe: 4605 mov r5, r0 +10028500: 460e mov r6, r1 +10028502: 2400 movs r4, #0 +10028504: 192b adds r3, r5, r4 +10028506: f893 062c ldrb.w r0, [r3, #1580] ; 0x62c +1002850a: 1c82 adds r2, r0, #2 +1002850c: b2d2 uxtb r2, r2 +1002850e: 2a01 cmp r2, #1 +10028510: d903 bls.n 1002851a +10028512: f7ff ffe9 bl 100284e8 +10028516: 4286 cmp r6, r0 +10028518: d004 beq.n 10028524 +1002851a: 3401 adds r4, #1 +1002851c: 2c0d cmp r4, #13 +1002851e: d1f1 bne.n 10028504 +10028520: 2000 movs r0, #0 +10028522: bd70 pop {r4, r5, r6, pc} +10028524: 2001 movs r0, #1 +10028526: bd70 pop {r4, r5, r6, pc} + +10028528 : +10028528: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1002852c: 2400 movs r4, #0 +1002852e: 4607 mov r7, r0 +10028530: 4688 mov r8, r1 +10028532: 4625 mov r5, r4 +10028534: 197b adds r3, r7, r5 +10028536: f893 0639 ldrb.w r0, [r3, #1593] ; 0x639 +1002853a: 28fe cmp r0, #254 ; 0xfe +1002853c: d010 beq.n 10028560 +1002853e: 28ff cmp r0, #255 ; 0xff +10028540: d011 beq.n 10028566 +10028542: f7ff ffd1 bl 100284e8 +10028546: 4606 mov r6, r0 +10028548: 4631 mov r1, r6 +1002854a: 4638 mov r0, r7 +1002854c: f7ff ffd6 bl 100284fc +10028550: 2801 cmp r0, #1 +10028552: bf04 itt eq +10028554: f066 067f orneq r6, r6, #127 ; 0x7f +10028558: b2f6 uxtbeq r6, r6 +1002855a: f808 6004 strb.w r6, [r8, r4] +1002855e: 3401 adds r4, #1 +10028560: 3501 adds r5, #1 +10028562: 2d0d cmp r5, #13 +10028564: d1e6 bne.n 10028534 +10028566: 4620 mov r0, r4 +10028568: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1002856c : +1002856c: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +1002856e: 4606 mov r6, r0 +10028570: 460d mov r5, r1 +10028572: 4614 mov r4, r2 +10028574: 4668 mov r0, sp +10028576: 220d movs r2, #13 +10028578: 2100 movs r1, #0 +1002857a: f7ee ff69 bl 10017450 +1002857e: 4669 mov r1, sp +10028580: 4630 mov r0, r6 +10028582: f7ff ffd1 bl 10028528 +10028586: 4669 mov r1, sp +10028588: 4602 mov r2, r0 +1002858a: 6020 str r0, [r4, #0] +1002858c: 4628 mov r0, r5 +1002858e: f7ee ff4f bl 10017430 +10028592: b004 add sp, #16 +10028594: bd70 pop {r4, r5, r6, pc} + +10028596 : +10028596: 2200 movs r2, #0 +10028598: 5c88 ldrb r0, [r1, r2] +1002859a: f000 037f and.w r3, r0, #127 ; 0x7f +1002859e: 2b0c cmp r3, #12 +100285a0: d805 bhi.n 100285ae +100285a2: 2b0b cmp r3, #11 +100285a4: d209 bcs.n 100285ba +100285a6: 2b02 cmp r3, #2 +100285a8: d007 beq.n 100285ba +100285aa: 2b04 cmp r3, #4 +100285ac: e004 b.n 100285b8 +100285ae: 2b18 cmp r3, #24 +100285b0: d003 beq.n 100285ba +100285b2: 2b30 cmp r3, #48 ; 0x30 +100285b4: d001 beq.n 100285ba +100285b6: 2b16 cmp r3, #22 +100285b8: d102 bne.n 100285c0 +100285ba: f060 007f orn r0, r0, #127 ; 0x7f +100285be: 5488 strb r0, [r1, r2] +100285c0: 3201 adds r2, #1 +100285c2: 2a10 cmp r2, #16 +100285c4: d1e8 bne.n 10028598 +100285c6: 4770 bx lr + +100285c8 : +100285c8: b570 push {r4, r5, r6, lr} +100285ca: 2200 movs r2, #0 +100285cc: b2d3 uxtb r3, r2 +100285ce: 428b cmp r3, r1 +100285d0: d210 bcs.n 100285f4 +100285d2: 5cc5 ldrb r5, [r0, r3] +100285d4: f005 047f and.w r4, r5, #127 ; 0x7f +100285d8: 3c02 subs r4, #2 +100285da: b2e4 uxtb r4, r4 +100285dc: 2c14 cmp r4, #20 +100285de: d807 bhi.n 100285f0 +100285e0: 2601 movs r6, #1 +100285e2: 40a6 lsls r6, r4 +100285e4: 4c04 ldr r4, [pc, #16] ; (100285f8 ) +100285e6: 4034 ands r4, r6 +100285e8: b114 cbz r4, 100285f0 +100285ea: f065 057f orn r5, r5, #127 ; 0x7f +100285ee: 54c5 strb r5, [r0, r3] +100285f0: 3201 adds r2, #1 +100285f2: e7eb b.n 100285cc +100285f4: bd70 pop {r4, r5, r6, pc} +100285f6: bf00 nop +100285f8: 00100205 .word 0x00100205 + +100285fc : +100285fc: b507 push {r0, r1, r2, lr} +100285fe: 2301 movs r3, #1 +10028600: aa02 add r2, sp, #8 +10028602: f802 3d01 strb.w r3, [r2, #-1]! +10028606: 2119 movs r1, #25 +10028608: f009 ff73 bl 100324f2 +1002860c: b003 add sp, #12 +1002860e: f85d fb04 ldr.w pc, [sp], #4 + +10028612 : +10028612: b507 push {r0, r1, r2, lr} +10028614: 2300 movs r3, #0 +10028616: aa02 add r2, sp, #8 +10028618: f802 3d01 strb.w r3, [r2, #-1]! +1002861c: 2119 movs r1, #25 +1002861e: f009 ff68 bl 100324f2 +10028622: b003 add sp, #12 +10028624: f85d fb04 ldr.w pc, [sp], #4 + +10028628 : +10028628: b507 push {r0, r1, r2, lr} +1002862a: ab02 add r3, sp, #8 +1002862c: f843 1d04 str.w r1, [r3, #-4]! +10028630: 2a01 cmp r2, #1 +10028632: bf0c ite eq +10028634: 211a moveq r1, #26 +10028636: 211b movne r1, #27 +10028638: 461a mov r2, r3 +1002863a: f009 ff5a bl 100324f2 +1002863e: b003 add sp, #12 +10028640: f85d fb04 ldr.w pc, [sp], #4 + +10028644 : +10028644: b507 push {r0, r1, r2, lr} +10028646: f641 026a movw r2, #6250 ; 0x186a +1002864a: 460b mov r3, r1 +1002864c: 5c81 ldrb r1, [r0, r2] +1002864e: aa02 add r2, sp, #8 +10028650: 2901 cmp r1, #1 +10028652: bf0e itee eq +10028654: f802 3d02 strbeq.w r3, [r2, #-2]! +10028658: f802 3d01 strbne.w r3, [r2, #-1]! +1002865c: 2100 movne r1, #0 +1002865e: f009 ff48 bl 100324f2 +10028662: b003 add sp, #12 +10028664: f85d fb04 ldr.w pc, [sp], #4 + +10028668 : +10028668: 2904 cmp r1, #4 +1002866a: b507 push {r0, r1, r2, lr} +1002866c: d103 bne.n 10028676 +1002866e: 2303 movs r3, #3 +10028670: f8c0 3680 str.w r3, [r0, #1664] ; 0x680 +10028674: e00f b.n 10028696 +10028676: 2901 cmp r1, #1 +10028678: d109 bne.n 1002868e +1002867a: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 +1002867e: f023 0303 bic.w r3, r3, #3 +10028682: f043 0302 orr.w r3, r3, #2 +10028686: f8c0 3680 str.w r3, [r0, #1664] ; 0x680 +1002868a: 2302 movs r3, #2 +1002868c: e003 b.n 10028696 +1002868e: b909 cbnz r1, 10028694 +10028690: 2301 movs r3, #1 +10028692: e000 b.n 10028696 +10028694: 2300 movs r3, #0 +10028696: 2102 movs r1, #2 +10028698: f10d 0207 add.w r2, sp, #7 +1002869c: f88d 3007 strb.w r3, [sp, #7] +100286a0: f009 ff27 bl 100324f2 +100286a4: 2000 movs r0, #0 +100286a6: b003 add sp, #12 +100286a8: f85d fb04 ldr.w pc, [sp], #4 + +100286ac : +100286ac: b538 push {r3, r4, r5, lr} +100286ae: f641 036c movw r3, #6252 ; 0x186c +100286b2: 4604 mov r4, r0 +100286b4: 460d mov r5, r1 +100286b6: 58c0 ldr r0, [r0, r3] +100286b8: 2100 movs r1, #0 +100286ba: f7ee ff5d bl 10017578 +100286be: f641 0374 movw r3, #6260 ; 0x1874 +100286c2: 58e3 ldr r3, [r4, r3] +100286c4: b103 cbz r3, 100286c8 +100286c6: 701d strb r5, [r3, #0] +100286c8: 4620 mov r0, r4 +100286ca: 4629 mov r1, r5 +100286cc: f00a f820 bl 10032710 +100286d0: f641 036c movw r3, #6252 ; 0x186c +100286d4: 58e0 ldr r0, [r4, r3] +100286d6: 2100 movs r1, #0 +100286d8: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +100286dc: f7ee bf54 b.w 10017588 + +100286e0 : +100286e0: f641 0370 movw r3, #6256 ; 0x1870 +100286e4: b570 push {r4, r5, r6, lr} +100286e6: 4604 mov r4, r0 +100286e8: 460d mov r5, r1 +100286ea: 58c0 ldr r0, [r0, r3] +100286ec: 2100 movs r1, #0 +100286ee: 4616 mov r6, r2 +100286f0: f7ee ff42 bl 10017578 +100286f4: f641 0374 movw r3, #6260 ; 0x1874 +100286f8: 58e2 ldr r2, [r4, r3] +100286fa: b112 cbz r2, 10028702 +100286fc: 7055 strb r5, [r2, #1] +100286fe: 58e3 ldr r3, [r4, r3] +10028700: 709e strb r6, [r3, #2] +10028702: 4620 mov r0, r4 +10028704: 4629 mov r1, r5 +10028706: 4632 mov r2, r6 +10028708: f009 fffb bl 10032702 +1002870c: f641 0370 movw r3, #6256 ; 0x1870 +10028710: 58e0 ldr r0, [r4, r3] +10028712: 2100 movs r1, #0 +10028714: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10028718: f7ee bf36 b.w 10017588 + +1002871c : +1002871c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10028720: 4698 mov r8, r3 +10028722: f890 361c ldrb.w r3, [r0, #1564] ; 0x61c +10028726: 4604 mov r4, r0 +10028728: 460d mov r5, r1 +1002872a: 4617 mov r7, r2 +1002872c: bb33 cbnz r3, 1002877c +1002872e: f1b8 0f00 cmp.w r8, #0 +10028732: d006 beq.n 10028742 +10028734: b12a cbz r2, 10028742 +10028736: 2a01 cmp r2, #1 +10028738: bf0c ite eq +1002873a: 1c8e addeq r6, r1, #2 +1002873c: 1e8e subne r6, r1, #2 +1002873e: b2f6 uxtb r6, r6 +10028740: e000 b.n 10028744 +10028742: 462e mov r6, r5 +10028744: f641 036c movw r3, #6252 ; 0x186c +10028748: 58e0 ldr r0, [r4, r3] +1002874a: 2100 movs r1, #0 +1002874c: f7ee ff14 bl 10017578 +10028750: f641 0374 movw r3, #6260 ; 0x1874 +10028754: 58e3 ldr r3, [r4, r3] +10028756: b103 cbz r3, 1002875a +10028758: 701d strb r5, [r3, #0] +1002875a: 4620 mov r0, r4 +1002875c: 4631 mov r1, r6 +1002875e: f009 ffd7 bl 10032710 +10028762: f641 036c movw r3, #6252 ; 0x186c +10028766: 58e0 ldr r0, [r4, r3] +10028768: 2100 movs r1, #0 +1002876a: f7ee ff0d bl 10017588 +1002876e: 4620 mov r0, r4 +10028770: 4641 mov r1, r8 +10028772: 463a mov r2, r7 +10028774: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +10028778: f7ff bfb2 b.w 100286e0 +1002877c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10028780 : +10028780: 3004 adds r0, #4 +10028782: 4770 bx lr + +10028784 : +10028784: b507 push {r0, r1, r2, lr} +10028786: 307c adds r0, #124 ; 0x7c +10028788: f7f4 ff31 bl 1001d5ee +1002878c: 2202 movs r2, #2 +1002878e: 4601 mov r1, r0 +10028790: f10d 0006 add.w r0, sp, #6 +10028794: f7ee fe4c bl 10017430 +10028798: f8bd 0006 ldrh.w r0, [sp, #6] +1002879c: b003 add sp, #12 +1002879e: f85d fb04 ldr.w pc, [sp], #4 + +100287a2 : +100287a2: b148 cbz r0, 100287b8 +100287a4: f8d0 2680 ldr.w r2, [r0, #1664] ; 0x680 +100287a8: f244 0303 movw r3, #16387 ; 0x4003 +100287ac: f244 0002 movw r0, #16386 ; 0x4002 +100287b0: 4013 ands r3, r2 +100287b2: 1a1b subs r3, r3, r0 +100287b4: 4258 negs r0, r3 +100287b6: 4158 adcs r0, r3 +100287b8: 4770 bx lr + +100287ba : +100287ba: f8d0 0680 ldr.w r0, [r0, #1664] ; 0x680 +100287be: f244 0301 movw r3, #16385 ; 0x4001 +100287c2: f420 507f bic.w r0, r0, #16320 ; 0x3fc0 +100287c6: f020 003c bic.w r0, r0, #60 ; 0x3c +100287ca: 0440 lsls r0, r0, #17 +100287cc: 0c40 lsrs r0, r0, #17 +100287ce: 1ac3 subs r3, r0, r3 +100287d0: 4258 negs r0, r3 +100287d2: 4158 adcs r0, r3 +100287d4: 4770 bx lr + +100287d6 : +100287d6: f8d0 37d4 ldr.w r3, [r0, #2004] ; 0x7d4 +100287da: 2b01 cmp r3, #1 +100287dc: d00a beq.n 100287f4 +100287de: f8d0 37f4 ldr.w r3, [r0, #2036] ; 0x7f4 +100287e2: 2b01 cmp r3, #1 +100287e4: d006 beq.n 100287f4 +100287e6: f8d0 0814 ldr.w r0, [r0, #2068] ; 0x814 +100287ea: f110 30ff adds.w r0, r0, #4294967295 +100287ee: bf18 it ne +100287f0: 2001 movne r0, #1 +100287f2: 4770 bx lr +100287f4: 2000 movs r0, #0 +100287f6: 4770 bx lr + +100287f8 : +100287f8: 0080 lsls r0, r0, #2 +100287fa: f241 736f movw r3, #5999 ; 0x176f +100287fe: 4298 cmp r0, r3 +10028800: d905 bls.n 1002880e +10028802: f644 6320 movw r3, #20000 ; 0x4e20 +10028806: 4298 cmp r0, r3 +10028808: bf28 it cs +1002880a: 4618 movcs r0, r3 +1002880c: 4770 bx lr +1002880e: f241 7070 movw r0, #6000 ; 0x1770 +10028812: 4770 bx lr + +10028814 : +10028814: 211d movs r1, #29 +10028816: 2200 movs r2, #0 +10028818: f009 be6b b.w 100324f2 + +1002881c : +1002881c: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} +10028820: 9f0a ldr r7, [sp, #40] ; 0x28 +10028822: 4680 mov r8, r0 +10028824: 4691 mov r9, r2 +10028826: 461d mov r5, r3 +10028828: ea4f 0ac1 mov.w sl, r1, lsl #3 +1002882c: 2405 movs r4, #5 +1002882e: b154 cbz r4, 10028846 +10028830: 2c01 cmp r4, #1 +10028832: d110 bne.n 10028856 +10028834: 792b ldrb r3, [r5, #4] +10028836: 78ea ldrb r2, [r5, #3] +10028838: 041b lsls r3, r3, #16 +1002883a: ea43 2302 orr.w r3, r3, r2, lsl #8 +1002883e: 78aa ldrb r2, [r5, #2] +10028840: 4313 orrs r3, r2 +10028842: 796a ldrb r2, [r5, #5] +10028844: e014 b.n 10028870 +10028846: 786b ldrb r3, [r5, #1] +10028848: 782a ldrb r2, [r5, #0] +1002884a: 061b lsls r3, r3, #24 +1002884c: ea43 4302 orr.w r3, r3, r2, lsl #16 +10028850: ea43 0309 orr.w r3, r3, r9 +10028854: e00e b.n 10028874 +10028856: f1a4 0e02 sub.w lr, r4, #2 +1002885a: eb07 068e add.w r6, r7, lr, lsl #2 +1002885e: 78b3 ldrb r3, [r6, #2] +10028860: 7872 ldrb r2, [r6, #1] +10028862: 041b lsls r3, r3, #16 +10028864: ea43 2302 orr.w r3, r3, r2, lsl #8 +10028868: f817 202e ldrb.w r2, [r7, lr, lsl #2] +1002886c: 4313 orrs r3, r2 +1002886e: 78f2 ldrb r2, [r6, #3] +10028870: ea43 6302 orr.w r3, r3, r2, lsl #24 +10028874: 9300 str r3, [sp, #0] +10028876: 4640 mov r0, r8 +10028878: eb04 030a add.w r3, r4, sl +1002887c: 211e movs r1, #30 +1002887e: 466a mov r2, sp +10028880: 9301 str r3, [sp, #4] +10028882: f009 fe36 bl 100324f2 +10028886: f114 34ff adds.w r4, r4, #4294967295 +1002888a: d2d0 bcs.n 1002882e +1002888c: b002 add sp, #8 +1002888e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + +10028892 : +10028892: b5f0 push {r4, r5, r6, r7, lr} +10028894: b089 sub sp, #36 ; 0x24 +10028896: 2400 movs r4, #0 +10028898: ad04 add r5, sp, #16 +1002889a: 4607 mov r7, r0 +1002889c: 460e mov r6, r1 +1002889e: 4628 mov r0, r5 +100288a0: 4621 mov r1, r4 +100288a2: 2210 movs r2, #16 +100288a4: 9402 str r4, [sp, #8] +100288a6: f8ad 400c strh.w r4, [sp, #12] +100288aa: f015 f9bb bl 1003dc24 +100288ae: 9500 str r5, [sp, #0] +100288b0: 4638 mov r0, r7 +100288b2: 4631 mov r1, r6 +100288b4: 4622 mov r2, r4 +100288b6: ab02 add r3, sp, #8 +100288b8: f7ff ffb0 bl 1002881c +100288bc: b009 add sp, #36 ; 0x24 +100288be: bdf0 pop {r4, r5, r6, r7, pc} + +100288c0 : +100288c0: b510 push {r4, lr} +100288c2: 2101 movs r1, #1 +100288c4: 4604 mov r4, r0 +100288c6: f7f5 fe61 bl 1001e58c +100288ca: 4602 mov r2, r0 +100288cc: b920 cbnz r0, 100288d8 +100288ce: 4620 mov r0, r4 +100288d0: 211d movs r1, #29 +100288d2: f009 fe0e bl 100324f2 +100288d6: e018 b.n 1002890a +100288d8: 6923 ldr r3, [r4, #16] +100288da: 071a lsls r2, r3, #28 +100288dc: d515 bpl.n 1002890a +100288de: f104 019c add.w r1, r4, #156 ; 0x9c +100288e2: f504 6046 add.w r0, r4, #3168 ; 0xc60 +100288e6: f7ff fce5 bl 100282b4 +100288ea: 4601 mov r1, r0 +100288ec: b168 cbz r0, 1002890a +100288ee: f8d1 30f8 ldr.w r3, [r1, #248] ; 0xf8 +100288f2: 06db lsls r3, r3, #27 +100288f4: d411 bmi.n 1002891a +100288f6: f8d1 3100 ldr.w r3, [r1, #256] ; 0x100 +100288fa: 2b02 cmp r3, #2 +100288fc: bf14 ite ne +100288fe: 2204 movne r2, #4 +10028900: 2205 moveq r2, #5 +10028902: 4620 mov r0, r4 +10028904: 2300 movs r3, #0 +10028906: f7f4 f97d bl 1001cc04 +1002890a: f504 60f2 add.w r0, r4, #1936 ; 0x790 +1002890e: 2100 movs r1, #0 +10028910: 22a0 movs r2, #160 ; 0xa0 +10028912: e8bd 4010 ldmia.w sp!, {r4, lr} +10028916: f7ee bd9b b.w 10017450 +1002891a: 2200 movs r2, #0 +1002891c: e7f1 b.n 10028902 + +1002891e : +1002891e: f8d0 344c ldr.w r3, [r0, #1100] ; 0x44c +10028922: b510 push {r4, lr} +10028924: b91b cbnz r3, 1002892e +10028926: f880 3731 strb.w r3, [r0, #1841] ; 0x731 +1002892a: 4618 mov r0, r3 +1002892c: bd10 pop {r4, pc} +1002892e: 2401 movs r4, #1 +10028930: f880 4731 strb.w r4, [r0, #1841] ; 0x731 +10028934: 3108 adds r1, #8 +10028936: f500 60e9 add.w r0, r0, #1864 ; 0x748 +1002893a: 2212 movs r2, #18 +1002893c: f7ee fd78 bl 10017430 +10028940: 4620 mov r0, r4 +10028942: bd10 pop {r4, pc} + +10028944 : +10028944: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +10028948: f890 3731 ldrb.w r3, [r0, #1841] ; 0x731 +1002894c: 4604 mov r4, r0 +1002894e: 2b00 cmp r3, #0 +10028950: d059 beq.n 10028a06 +10028952: f890 3521 ldrb.w r3, [r0, #1313] ; 0x521 +10028956: 2600 movs r6, #0 +10028958: 2b01 cmp r3, #1 +1002895a: f88d 6003 strb.w r6, [sp, #3] +1002895e: bf14 ite ne +10028960: f04f 0810 movne.w r8, #16 +10028964: f04f 080a moveq.w r8, #10 +10028968: f200 754a addw r5, r0, #1866 ; 0x74a +1002896c: 8869 ldrh r1, [r5, #2] +1002896e: 786a ldrb r2, [r5, #1] +10028970: 782b ldrb r3, [r5, #0] +10028972: 0409 lsls r1, r1, #16 +10028974: ea41 2102 orr.w r1, r1, r2, lsl #8 +10028978: f894 272f ldrb.w r2, [r4, #1839] ; 0x72f +1002897c: f003 000f and.w r0, r3, #15 +10028980: fb00 8202 mla r2, r0, r2, r8 +10028984: f3c3 1700 ubfx r7, r3, #4, #1 +10028988: b2d2 uxtb r2, r2 +1002898a: f3c3 1341 ubfx r3, r3, #5, #2 +1002898e: 4311 orrs r1, r2 +10028990: 2b02 cmp r3, #2 +10028992: aa02 add r2, sp, #8 +10028994: f842 1d04 str.w r1, [r2, #-4]! +10028998: 4620 mov r0, r4 +1002899a: d00f beq.n 100289bc +1002899c: 2b03 cmp r3, #3 +1002899e: d015 beq.n 100289cc +100289a0: 2b01 cmp r3, #1 +100289a2: d007 beq.n 100289b4 +100289a4: 2122 movs r1, #34 ; 0x22 +100289a6: f009 fda4 bl 100324f2 +100289aa: f89d 3003 ldrb.w r3, [sp, #3] +100289ae: ea43 0747 orr.w r7, r3, r7, lsl #1 +100289b2: e012 b.n 100289da +100289b4: 2123 movs r1, #35 ; 0x23 +100289b6: f009 fd9c bl 100324f2 +100289ba: e010 b.n 100289de +100289bc: 2121 movs r1, #33 ; 0x21 +100289be: f009 fd98 bl 100324f2 +100289c2: f89d 3003 ldrb.w r3, [sp, #3] +100289c6: ea43 0787 orr.w r7, r3, r7, lsl #2 +100289ca: e006 b.n 100289da +100289cc: 2120 movs r1, #32 +100289ce: f009 fd90 bl 100324f2 +100289d2: f89d 3003 ldrb.w r3, [sp, #3] +100289d6: ea43 07c7 orr.w r7, r3, r7, lsl #3 +100289da: f88d 7003 strb.w r7, [sp, #3] +100289de: 3601 adds r6, #1 +100289e0: 2e04 cmp r6, #4 +100289e2: f105 0504 add.w r5, r5, #4 +100289e6: d1c1 bne.n 1002896c +100289e8: f241 33c4 movw r3, #5060 ; 0x13c4 +100289ec: 5ce3 ldrb r3, [r4, r3] +100289ee: 2b01 cmp r3, #1 +100289f0: bf18 it ne +100289f2: f89d 3003 ldrbne.w r3, [sp, #3] +100289f6: d106 bne.n 10028a06 +100289f8: 4620 mov r0, r4 +100289fa: 2124 movs r1, #36 ; 0x24 +100289fc: f10d 0203 add.w r2, sp, #3 +10028a00: f009 fd77 bl 100324f2 +10028a04: e001 b.n 10028a0a +10028a06: f884 349d strb.w r3, [r4, #1181] ; 0x49d +10028a0a: b002 add sp, #8 +10028a0c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10028a10 : +10028a10: b573 push {r0, r1, r4, r5, r6, lr} +10028a12: 4604 mov r4, r0 +10028a14: 2900 cmp r1, #0 +10028a16: d046 beq.n 10028aa6 +10028a18: f8d0 3454 ldr.w r3, [r0, #1108] ; 0x454 +10028a1c: 2b00 cmp r3, #0 +10028a1e: d042 beq.n 10028aa6 +10028a20: 2301 movs r3, #1 +10028a22: f880 3735 strb.w r3, [r0, #1845] ; 0x735 +10028a26: 2300 movs r3, #0 +10028a28: 784a ldrb r2, [r1, #1] +10028a2a: 4293 cmp r3, r2 +10028a2c: d222 bcs.n 10028a74 +10028a2e: 2b02 cmp r3, #2 +10028a30: d00a beq.n 10028a48 +10028a32: f504 62d0 add.w r2, r4, #1664 ; 0x680 +10028a36: 441a add r2, r3 +10028a38: 18c8 adds r0, r1, r3 +10028a3a: 7885 ldrb r5, [r0, #2] +10028a3c: f892 00da ldrb.w r0, [r2, #218] ; 0xda +10028a40: 4028 ands r0, r5 +10028a42: f882 00da strb.w r0, [r2, #218] ; 0xda +10028a46: e013 b.n 10028a70 +10028a48: f894 075c ldrb.w r0, [r4, #1884] ; 0x75c +10028a4c: 790a ldrb r2, [r1, #4] +10028a4e: f000 0603 and.w r6, r0, #3 +10028a52: f002 0503 and.w r5, r2, #3 +10028a56: f000 001c and.w r0, r0, #28 +10028a5a: f002 021c and.w r2, r2, #28 +10028a5e: 4282 cmp r2, r0 +10028a60: bfb8 it lt +10028a62: 4602 movlt r2, r0 +10028a64: 42ae cmp r6, r5 +10028a66: bfd4 ite le +10028a68: 4332 orrle r2, r6 +10028a6a: 432a orrgt r2, r5 +10028a6c: f884 275c strb.w r2, [r4, #1884] ; 0x75c +10028a70: 3301 adds r3, #1 +10028a72: e7d9 b.n 10028a28 +10028a74: f10d 0207 add.w r2, sp, #7 +10028a78: 4620 mov r0, r4 +10028a7a: 2117 movs r1, #23 +10028a7c: f009 fd40 bl 10032500 +10028a80: f89d 2007 ldrb.w r2, [sp, #7] +10028a84: 2300 movs r3, #0 +10028a86: 2a03 cmp r2, #3 +10028a88: d000 beq.n 10028a8c +10028a8a: b94a cbnz r2, 10028aa0 +10028a8c: f504 61d0 add.w r1, r4, #1664 ; 0x680 +10028a90: 4806 ldr r0, [pc, #24] ; (10028aac ) +10028a92: 4419 add r1, r3 +10028a94: f891 50dd ldrb.w r5, [r1, #221] ; 0xdd +10028a98: 5c18 ldrb r0, [r3, r0] +10028a9a: 4028 ands r0, r5 +10028a9c: f881 00dd strb.w r0, [r1, #221] ; 0xdd +10028aa0: 3301 adds r3, #1 +10028aa2: 2b10 cmp r3, #16 +10028aa4: d1ef bne.n 10028a86 +10028aa6: b002 add sp, #8 +10028aa8: bd70 pop {r4, r5, r6, pc} +10028aaa: bf00 nop +10028aac: 100414c7 .word 0x100414c7 + +10028ab0 : +10028ab0: 460b mov r3, r1 +10028ab2: b171 cbz r1, 10028ad2 +10028ab4: f8d0 2454 ldr.w r2, [r0, #1108] ; 0x454 +10028ab8: b15a cbz r2, 10028ad2 +10028aba: 784a ldrb r2, [r1, #1] +10028abc: 2a16 cmp r2, #22 +10028abe: d808 bhi.n 10028ad2 +10028ac0: 2201 movs r2, #1 +10028ac2: f880 2736 strb.w r2, [r0, #1846] ; 0x736 +10028ac6: 3102 adds r1, #2 +10028ac8: f200 707a addw r0, r0, #1914 ; 0x77a +10028acc: 785a ldrb r2, [r3, #1] +10028ace: f7ee bcaf b.w 10017430 +10028ad2: 4770 bx lr + +10028ad4 : +10028ad4: b507 push {r0, r1, r2, lr} +10028ad6: f890 2736 ldrb.w r2, [r0, #1846] ; 0x736 +10028ada: 4603 mov r3, r0 +10028adc: b182 cbz r2, 10028b00 +10028ade: f890 2735 ldrb.w r2, [r0, #1845] ; 0x735 +10028ae2: b16a cbz r2, 10028b00 +10028ae4: f890 375c ldrb.w r3, [r0, #1884] ; 0x75c +10028ae8: 2201 movs r2, #1 +10028aea: f880 2734 strb.w r2, [r0, #1844] ; 0x734 +10028aee: f3c3 0382 ubfx r3, r3, #2, #3 +10028af2: aa02 add r2, sp, #8 +10028af4: f802 3d01 strb.w r3, [r2, #-1]! +10028af8: 2125 movs r1, #37 ; 0x25 +10028afa: f009 fcfa bl 100324f2 +10028afe: e002 b.n 10028b06 +10028b00: 2200 movs r2, #0 +10028b02: f883 2734 strb.w r2, [r3, #1844] ; 0x734 +10028b06: b003 add sp, #12 +10028b08: f85d fb04 ldr.w pc, [sp], #4 + +10028b0c : +10028b0c: 784a ldrb r2, [r1, #1] +10028b0e: 460b mov r3, r1 +10028b10: 2a01 cmp r2, #1 +10028b12: d808 bhi.n 10028b26 +10028b14: 2201 movs r2, #1 +10028b16: f880 2732 strb.w r2, [r0, #1842] ; 0x732 +10028b1a: 3102 adds r1, #2 +10028b1c: f200 7033 addw r0, r0, #1843 ; 0x733 +10028b20: 785a ldrb r2, [r3, #1] +10028b22: f7ee bc85 b.w 10017430 +10028b26: 4770 bx lr + +10028b28 : +10028b28: f500 539c add.w r3, r0, #4992 ; 0x1380 +10028b2c: 3308 adds r3, #8 +10028b2e: f893 202f ldrb.w r2, [r3, #47] ; 0x2f +10028b32: b112 cbz r2, 10028b3a +10028b34: 2a01 cmp r2, #1 +10028b36: d00c beq.n 10028b52 +10028b38: e004 b.n 10028b44 +10028b3a: f881 2175 strb.w r2, [r1, #373] ; 0x175 +10028b3e: f881 2174 strb.w r2, [r1, #372] ; 0x174 +10028b42: 4770 bx lr +10028b44: f890 2732 ldrb.w r2, [r0, #1842] ; 0x732 +10028b48: b18a cbz r2, 10028b6e +10028b4a: f890 2733 ldrb.w r2, [r0, #1843] ; 0x733 +10028b4e: 0792 lsls r2, r2, #30 +10028b50: d50d bpl.n 10028b6e +10028b52: f893 3030 ldrb.w r3, [r3, #48] ; 0x30 +10028b56: 2b01 cmp r3, #1 +10028b58: d104 bne.n 10028b64 +10028b5a: 2301 movs r3, #1 +10028b5c: f881 3175 strb.w r3, [r1, #373] ; 0x175 +10028b60: 2300 movs r3, #0 +10028b62: e007 b.n 10028b74 +10028b64: 2300 movs r3, #0 +10028b66: f881 3175 strb.w r3, [r1, #373] ; 0x175 +10028b6a: 2301 movs r3, #1 +10028b6c: e002 b.n 10028b74 +10028b6e: 2300 movs r3, #0 +10028b70: f881 3175 strb.w r3, [r1, #373] ; 0x175 +10028b74: f881 3174 strb.w r3, [r1, #372] ; 0x174 +10028b78: 4770 bx lr + +10028b7a : +10028b7a: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10028b7e: b093 sub sp, #76 ; 0x4c +10028b80: 4604 mov r4, r0 +10028b82: 4689 mov r9, r1 +10028b84: 4615 mov r5, r2 +10028b86: 2100 movs r1, #0 +10028b88: a80a add r0, sp, #40 ; 0x28 +10028b8a: 2220 movs r2, #32 +10028b8c: f8ad 1010 strh.w r1, [sp, #16] +10028b90: f8ad 1012 strh.w r1, [sp, #18] +10028b94: 9106 str r1, [sp, #24] +10028b96: 9107 str r1, [sp, #28] +10028b98: 9108 str r1, [sp, #32] +10028b9a: 9109 str r1, [sp, #36] ; 0x24 +10028b9c: f015 f842 bl 1003dc24 +10028ba0: 4620 mov r0, r4 +10028ba2: f7ff fdfe bl 100287a2 +10028ba6: b908 cbnz r0, 10028bac +10028ba8: 2001 movs r0, #1 +10028baa: e0eb b.n 10028d84 +10028bac: f241 3385 movw r3, #4997 ; 0x1385 +10028bb0: 5ce3 ldrb r3, [r4, r3] +10028bb2: 2b00 cmp r3, #0 +10028bb4: d1f8 bne.n 10028ba8 +10028bb6: f1a5 0218 sub.w r2, r5, #24 +10028bba: f5b2 7f40 cmp.w r2, #768 ; 0x300 +10028bbe: 9205 str r2, [sp, #20] +10028bc0: d901 bls.n 10028bc6 +10028bc2: 2000 movs r0, #0 +10028bc4: e0de b.n 10028d84 +10028bc6: f104 009c add.w r0, r4, #156 ; 0x9c +10028bca: f109 0110 add.w r1, r9, #16 +10028bce: 2206 movs r2, #6 +10028bd0: f7ee fc36 bl 10017440 +10028bd4: 2800 cmp r0, #0 +10028bd6: d0e7 beq.n 10028ba8 +10028bd8: af12 add r7, sp, #72 ; 0x48 +10028bda: f857 ad34 ldr.w sl, [r7, #-52]! +10028bde: f109 0524 add.w r5, r9, #36 ; 0x24 +10028be2: f1aa 060c sub.w r6, sl, #12 +10028be6: 4628 mov r0, r5 +10028be8: 212d movs r1, #45 ; 0x2d +10028bea: 463a mov r2, r7 +10028bec: 4633 mov r3, r6 +10028bee: f015 fe37 bl 1003e860 <__rtw_get_ie_veneer> +10028bf2: b120 cbz r0, 10028bfe +10028bf4: 9b05 ldr r3, [sp, #20] +10028bf6: b123 cbz r3, 10028c02 +10028bf8: f8b0 b002 ldrh.w fp, [r0, #2] +10028bfc: e002 b.n 10028c04 +10028bfe: 4683 mov fp, r0 +10028c00: e000 b.n 10028c04 +10028c02: 469b mov fp, r3 +10028c04: 4628 mov r0, r5 +10028c06: 213d movs r1, #61 ; 0x3d +10028c08: 463a mov r2, r7 +10028c0a: 4633 mov r3, r6 +10028c0c: f015 fe28 bl 1003e860 <__rtw_get_ie_veneer> +10028c10: b128 cbz r0, 10028c1e +10028c12: 9b05 ldr r3, [sp, #20] +10028c14: b123 cbz r3, 10028c20 +10028c16: f100 0802 add.w r8, r0, #2 +10028c1a: 78c3 ldrb r3, [r0, #3] +10028c1c: e001 b.n 10028c22 +10028c1e: 4603 mov r3, r0 +10028c20: 4698 mov r8, r3 +10028c22: f8b4 2424 ldrh.w r2, [r4, #1060] ; 0x424 +10028c26: 455a cmp r2, fp +10028c28: d104 bne.n 10028c34 +10028c2a: f894 2426 ldrb.w r2, [r4, #1062] ; 0x426 +10028c2e: 405a eors r2, r3 +10028c30: 0792 lsls r2, r2, #30 +10028c32: d003 beq.n 10028c3c +10028c34: f8a4 b424 strh.w fp, [r4, #1060] ; 0x424 +10028c38: f884 3426 strb.w r3, [r4, #1062] ; 0x426 +10028c3c: 4628 mov r0, r5 +10028c3e: 2103 movs r1, #3 +10028c40: 463a mov r2, r7 +10028c42: 4633 mov r3, r6 +10028c44: f015 fe0c bl 1003e860 <__rtw_get_ie_veneer> +10028c48: b108 cbz r0, 10028c4e +10028c4a: 7883 ldrb r3, [r0, #2] +10028c4c: e00d b.n 10028c6a +10028c4e: 4628 mov r0, r5 +10028c50: 213d movs r1, #61 ; 0x3d +10028c52: 463a mov r2, r7 +10028c54: 4633 mov r3, r6 +10028c56: f015 fe03 bl 1003e860 <__rtw_get_ie_veneer> +10028c5a: f1b8 0f00 cmp.w r8, #0 +10028c5e: d002 beq.n 10028c66 +10028c60: f898 3000 ldrb.w r3, [r8] +10028c64: e001 b.n 10028c6a +10028c66: f894 351e ldrb.w r3, [r4, #1310] ; 0x51e +10028c6a: f894 251e ldrb.w r2, [r4, #1310] ; 0x51e +10028c6e: 4293 cmp r3, r2 +10028c70: d1a7 bne.n 10028bc2 +10028c72: 463a mov r2, r7 +10028c74: 4628 mov r0, r5 +10028c76: 2100 movs r1, #0 +10028c78: 4633 mov r3, r6 +10028c7a: f015 fdf1 bl 1003e860 <__rtw_get_ie_veneer> +10028c7e: 4607 mov r7, r0 +10028c80: 2800 cmp r0, #0 +10028c82: d176 bne.n 10028d72 +10028c84: 2700 movs r7, #0 +10028c86: f88d 7028 strb.w r7, [sp, #40] ; 0x28 +10028c8a: a80a add r0, sp, #40 ; 0x28 +10028c8c: f104 01a8 add.w r1, r4, #168 ; 0xa8 +10028c90: 2220 movs r2, #32 +10028c92: f7ee fbd5 bl 10017440 +10028c96: b118 cbz r0, 10028ca0 +10028c98: f8d4 30a4 ldr.w r3, [r4, #164] ; 0xa4 +10028c9c: 429f cmp r7, r3 +10028c9e: d004 beq.n 10028caa +10028ca0: f89d 3028 ldrb.w r3, [sp, #40] ; 0x28 +10028ca4: b10b cbz r3, 10028caa +10028ca6: 2f00 cmp r7, #0 +10028ca8: d18b bne.n 10028bc2 +10028caa: f109 0918 add.w r9, r9, #24 +10028cae: 4648 mov r0, r9 +10028cb0: f7f4 fc8e bl 1001d5d0 +10028cb4: 2202 movs r2, #2 +10028cb6: 4601 mov r1, r0 +10028cb8: f10d 000e add.w r0, sp, #14 +10028cbc: f7ee fbb8 bl 10017430 +10028cc0: f8bd 300e ldrh.w r3, [sp, #14] +10028cc4: f8d4 70cc ldr.w r7, [r4, #204] ; 0xcc +10028cc8: f3c3 1300 ubfx r3, r3, #4, #1 +10028ccc: 429f cmp r7, r3 +10028cce: f47f af78 bne.w 10028bc2 +10028cd2: 2200 movs r2, #0 +10028cd4: ab04 add r3, sp, #16 +10028cd6: 9301 str r3, [sp, #4] +10028cd8: 9200 str r2, [sp, #0] +10028cda: f10d 0312 add.w r3, sp, #18 +10028cde: 4648 mov r0, r9 +10028ce0: 4651 mov r1, sl +10028ce2: f015 fe3d bl 1003e960 <__rtw_get_sec_ie_veneer> +10028ce6: f8bd 3012 ldrh.w r3, [sp, #18] +10028cea: b923 cbnz r3, 10028cf6 +10028cec: f8bd 3010 ldrh.w r3, [sp, #16] +10028cf0: b91b cbnz r3, 10028cfa +10028cf2: b2fb uxtb r3, r7 +10028cf4: e002 b.n 10028cfc +10028cf6: 2303 movs r3, #3 +10028cf8: e000 b.n 10028cfc +10028cfa: 2302 movs r3, #2 +10028cfc: f894 2414 ldrb.w r2, [r4, #1044] ; 0x414 +10028d00: 429a cmp r2, r3 +10028d02: f47f af5e bne.w 10028bc2 +10028d06: 3b02 subs r3, #2 +10028d08: 2b01 cmp r3, #1 +10028d0a: f63f af4d bhi.w 10028ba8 +10028d0e: 4628 mov r0, r5 +10028d10: a909 add r1, sp, #36 ; 0x24 +10028d12: 4632 mov r2, r6 +10028d14: f015 fdc0 bl 1003e898 <__rtw_get_wpa2_ie_veneer> +10028d18: b148 cbz r0, 10028d2e +10028d1a: 9909 ldr r1, [sp, #36] ; 0x24 +10028d1c: b139 cbz r1, 10028d2e +10028d1e: ab08 add r3, sp, #32 +10028d20: 9300 str r3, [sp, #0] +10028d22: 3102 adds r1, #2 +10028d24: aa06 add r2, sp, #24 +10028d26: ab07 add r3, sp, #28 +10028d28: f015 fdd6 bl 1003e8d8 <__rtw_parse_wpa2_ie_veneer> +10028d2c: e00e b.n 10028d4c +10028d2e: 4628 mov r0, r5 +10028d30: a909 add r1, sp, #36 ; 0x24 +10028d32: 4632 mov r2, r6 +10028d34: f015 fdc8 bl 1003e8c8 <__rtw_get_wpa_ie_veneer> +10028d38: b140 cbz r0, 10028d4c +10028d3a: 9909 ldr r1, [sp, #36] ; 0x24 +10028d3c: b131 cbz r1, 10028d4c +10028d3e: ab08 add r3, sp, #32 +10028d40: 9300 str r3, [sp, #0] +10028d42: 3102 adds r1, #2 +10028d44: aa06 add r2, sp, #24 +10028d46: ab07 add r3, sp, #28 +10028d48: f015 fde6 bl 1003e918 <__rtw_parse_wpa_ie_veneer> +10028d4c: f8d4 241c ldr.w r2, [r4, #1052] ; 0x41c +10028d50: 9b07 ldr r3, [sp, #28] +10028d52: 421a tst r2, r3 +10028d54: f43f af35 beq.w 10028bc2 +10028d58: f8d4 2418 ldr.w r2, [r4, #1048] ; 0x418 +10028d5c: 9b06 ldr r3, [sp, #24] +10028d5e: 421a tst r2, r3 +10028d60: f43f af2f beq.w 10028bc2 +10028d64: f8d4 0420 ldr.w r0, [r4, #1056] ; 0x420 +10028d68: 9b08 ldr r3, [sp, #32] +10028d6a: 1a1b subs r3, r3, r0 +10028d6c: 4258 negs r0, r3 +10028d6e: 4158 adcs r0, r3 +10028d70: e008 b.n 10028d84 +10028d72: 7842 ldrb r2, [r0, #1] +10028d74: 2a00 cmp r2, #0 +10028d76: d085 beq.n 10028c84 +10028d78: 1cb9 adds r1, r7, #2 +10028d7a: a80a add r0, sp, #40 ; 0x28 +10028d7c: f7ee fb58 bl 10017430 +10028d80: 787f ldrb r7, [r7, #1] +10028d82: e782 b.n 10028c8a +10028d84: b013 add sp, #76 ; 0x4c +10028d86: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +10028d8a : +10028d8a: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10028d8e: 4604 mov r4, r0 +10028d90: 460f mov r7, r1 +10028d92: 4698 mov r8, r3 +10028d94: f1a2 0924 sub.w r9, r2, #36 ; 0x24 +10028d98: 2500 movs r5, #0 +10028d9a: 454d cmp r5, r9 +10028d9c: d21d bcs.n 10028dda +10028d9e: f105 0024 add.w r0, r5, #36 ; 0x24 +10028da2: 183e adds r6, r7, r0 +10028da4: 5c38 ldrb r0, [r7, r0] +10028da6: 282a cmp r0, #42 ; 0x2a +10028da8: d00b beq.n 10028dc2 +10028daa: 283d cmp r0, #61 ; 0x3d +10028dac: d111 bne.n 10028dd2 +10028dae: f8d4 3454 ldr.w r3, [r4, #1108] ; 0x454 +10028db2: b173 cbz r3, 10028dd2 +10028db4: 7873 ldrb r3, [r6, #1] +10028db6: 2b16 cmp r3, #22 +10028db8: d80b bhi.n 10028dd2 +10028dba: 2300 movs r3, #0 +10028dbc: f884 373f strb.w r3, [r4, #1855] ; 0x73f +10028dc0: e007 b.n 10028dd2 +10028dc2: 4620 mov r0, r4 +10028dc4: 4631 mov r1, r6 +10028dc6: f7ff fea1 bl 10028b0c +10028dca: 4620 mov r0, r4 +10028dcc: 4641 mov r1, r8 +10028dce: f7ff feab bl 10028b28 +10028dd2: 7873 ldrb r3, [r6, #1] +10028dd4: 3302 adds r3, #2 +10028dd6: 441d add r5, r3 +10028dd8: e7df b.n 10028d9a +10028dda: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + ... + +10028de0 : +10028de0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10028de4: f100 0798 add.w r7, r0, #152 ; 0x98 +10028de8: 4606 mov r6, r0 +10028dea: 4638 mov r0, r7 +10028dec: f7f4 fbf2 bl 1001d5d4 +10028df0: 06c3 lsls r3, r0, #27 +10028df2: d402 bmi.n 10028dfa +10028df4: 2000 movs r0, #0 +10028df6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10028dfa: 250c movs r5, #12 +10028dfc: f8d6 3110 ldr.w r3, [r6, #272] ; 0x110 +10028e00: 429d cmp r5, r3 +10028e02: d2f7 bcs.n 10028df4 +10028e04: f105 0478 add.w r4, r5, #120 ; 0x78 +10028e08: 443c add r4, r7 +10028e0a: 7923 ldrb r3, [r4, #4] +10028e0c: f104 0804 add.w r8, r4, #4 +10028e10: 2b30 cmp r3, #48 ; 0x30 +10028e12: d011 beq.n 10028e38 +10028e14: 2bdd cmp r3, #221 ; 0xdd +10028e16: d113 bne.n 10028e40 +10028e18: 1da0 adds r0, r4, #6 +10028e1a: 490c ldr r1, [pc, #48] ; (10028e4c ) +10028e1c: 2204 movs r2, #4 +10028e1e: f7ee fb0f bl 10017440 +10028e22: b168 cbz r0, 10028e40 +10028e24: 490a ldr r1, [pc, #40] ; (10028e50 ) +10028e26: f104 0012 add.w r0, r4, #18 +10028e2a: 2204 movs r2, #4 +10028e2c: f7ee fb08 bl 10017440 +10028e30: b130 cbz r0, 10028e40 +10028e32: 2001 movs r0, #1 +10028e34: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10028e38: f104 000e add.w r0, r4, #14 +10028e3c: 4905 ldr r1, [pc, #20] ; (10028e54 ) +10028e3e: e7f4 b.n 10028e2a +10028e40: f898 3001 ldrb.w r3, [r8, #1] +10028e44: 3302 adds r3, #2 +10028e46: 441d add r5, r3 +10028e48: e7d8 b.n 10028dfc +10028e4a: bf00 nop +10028e4c: 10041554 .word 0x10041554 +10028e50: 00035418 .word 0x00035418 +10028e54: 100414b5 .word 0x100414b5 + +10028e58 : +10028e58: f000 007f and.w r0, r0, #127 ; 0x7f +10028e5c: 2818 cmp r0, #24 +10028e5e: d023 beq.n 10028ea8 +10028e60: d80c bhi.n 10028e7c +10028e62: 280c cmp r0, #12 +10028e64: d024 beq.n 10028eb0 +10028e66: d804 bhi.n 10028e72 +10028e68: 2804 cmp r0, #4 +10028e6a: d027 beq.n 10028ebc +10028e6c: 280b cmp r0, #11 +10028e6e: d023 beq.n 10028eb8 +10028e70: e010 b.n 10028e94 +10028e72: 2812 cmp r0, #18 +10028e74: d01a beq.n 10028eac +10028e76: 2816 cmp r0, #22 +10028e78: d01c beq.n 10028eb4 +10028e7a: e00b b.n 10028e94 +10028e7c: 2848 cmp r0, #72 ; 0x48 +10028e7e: d00d beq.n 10028e9c +10028e80: d804 bhi.n 10028e8c +10028e82: 2824 cmp r0, #36 ; 0x24 +10028e84: d00e beq.n 10028ea4 +10028e86: 2830 cmp r0, #48 ; 0x30 +10028e88: d00a beq.n 10028ea0 +10028e8a: e003 b.n 10028e94 +10028e8c: 2860 cmp r0, #96 ; 0x60 +10028e8e: d003 beq.n 10028e98 +10028e90: 286c cmp r0, #108 ; 0x6c +10028e92: d015 beq.n 10028ec0 +10028e94: 2000 movs r0, #0 +10028e96: 4770 bx lr +10028e98: 200a movs r0, #10 +10028e9a: 4770 bx lr +10028e9c: 2009 movs r0, #9 +10028e9e: 4770 bx lr +10028ea0: 2008 movs r0, #8 +10028ea2: 4770 bx lr +10028ea4: 2007 movs r0, #7 +10028ea6: 4770 bx lr +10028ea8: 2006 movs r0, #6 +10028eaa: 4770 bx lr +10028eac: 2005 movs r0, #5 +10028eae: 4770 bx lr +10028eb0: 2004 movs r0, #4 +10028eb2: 4770 bx lr +10028eb4: 2003 movs r0, #3 +10028eb6: 4770 bx lr +10028eb8: 2002 movs r0, #2 +10028eba: 4770 bx lr +10028ebc: 2001 movs r0, #1 +10028ebe: 4770 bx lr +10028ec0: 200b movs r0, #11 +10028ec2: 4770 bx lr + +10028ec4 : +10028ec4: b5f8 push {r3, r4, r5, r6, r7, lr} +10028ec6: 2400 movs r4, #0 +10028ec8: 4606 mov r6, r0 +10028eca: 290d cmp r1, #13 +10028ecc: bf34 ite cc +10028ece: 460f movcc r7, r1 +10028ed0: 270d movcs r7, #13 +10028ed2: 4625 mov r5, r4 +10028ed4: 42bd cmp r5, r7 +10028ed6: d00a beq.n 10028eee +10028ed8: 5d70 ldrb r0, [r6, r5] +10028eda: 0603 lsls r3, r0, #24 +10028edc: d505 bpl.n 10028eea +10028ede: f7ff ffbb bl 10028e58 +10028ee2: 2301 movs r3, #1 +10028ee4: fa03 f000 lsl.w r0, r3, r0 +10028ee8: 4304 orrs r4, r0 +10028eea: 3501 adds r5, #1 +10028eec: e7f2 b.n 10028ed4 +10028eee: 4620 mov r0, r4 +10028ef0: bdf8 pop {r3, r4, r5, r6, r7, pc} + +10028ef2 : +10028ef2: b5f8 push {r3, r4, r5, r6, r7, lr} +10028ef4: 2400 movs r4, #0 +10028ef6: 4606 mov r6, r0 +10028ef8: 290d cmp r1, #13 +10028efa: bf34 ite cc +10028efc: 460f movcc r7, r1 +10028efe: 270d movcs r7, #13 +10028f00: 4625 mov r5, r4 +10028f02: 42bd cmp r5, r7 +10028f04: d008 beq.n 10028f18 +10028f06: 5d70 ldrb r0, [r6, r5] +10028f08: f7ff ffa6 bl 10028e58 +10028f0c: 2301 movs r3, #1 +10028f0e: fa03 f000 lsl.w r0, r3, r0 +10028f12: 441d add r5, r3 +10028f14: 4304 orrs r4, r0 +10028f16: e7f4 b.n 10028f02 +10028f18: 4620 mov r0, r4 +10028f1a: bdf8 pop {r3, r4, r5, r6, r7, pc} + +10028f1c : +10028f1c: 78c3 ldrb r3, [r0, #3] +10028f1e: 7902 ldrb r2, [r0, #4] +10028f20: 0318 lsls r0, r3, #12 +10028f22: ea40 5002 orr.w r0, r0, r2, lsl #20 +10028f26: 4770 bx lr + +10028f28 : +10028f28: f890 3734 ldrb.w r3, [r0, #1844] ; 0x734 +10028f2c: b17b cbz r3, 10028f4e +10028f2e: f890 372e ldrb.w r3, [r0, #1838] ; 0x72e +10028f32: 2b04 cmp r3, #4 +10028f34: d00d beq.n 10028f52 +10028f36: f890 351f ldrb.w r3, [r0, #1311] ; 0x51f +10028f3a: 8808 ldrh r0, [r1, #0] +10028f3c: f013 0f01 tst.w r3, #1 +10028f40: bf0c ite eq +10028f42: 2305 moveq r3, #5 +10028f44: 2306 movne r3, #6 +10028f46: 4118 asrs r0, r3 +10028f48: f000 0001 and.w r0, r0, #1 +10028f4c: 4770 bx lr +10028f4e: 4618 mov r0, r3 +10028f50: 4770 bx lr +10028f52: 2000 movs r0, #0 +10028f54: 4770 bx lr + +10028f56 : +10028f56: 231b movs r3, #27 +10028f58: fa20 f203 lsr.w r2, r0, r3 +10028f5c: f012 0201 ands.w r2, r2, #1 +10028f60: d001 beq.n 10028f66 +10028f62: b2d8 uxtb r0, r3 +10028f64: 4770 bx lr +10028f66: f113 33ff adds.w r3, r3, #4294967295 +10028f6a: d2f5 bcs.n 10028f58 +10028f6c: 4610 mov r0, r2 +10028f6e: 4770 bx lr + +10028f70 : +10028f70: 4608 mov r0, r1 +10028f72: 2100 movs r1, #0 +10028f74: f009 bb48 b.w 10032608 + +10028f78 : +10028f78: 4608 mov r0, r1 +10028f7a: 2100 movs r1, #0 +10028f7c: f009 bb44 b.w 10032608 + +10028f80 : +10028f80: b530 push {r4, r5, lr} +10028f82: b085 sub sp, #20 +10028f84: 460d mov r5, r1 +10028f86: 4604 mov r4, r0 +10028f88: 2100 movs r1, #0 +10028f8a: 4668 mov r0, sp +10028f8c: 2210 movs r2, #16 +10028f8e: f7ee fa5f bl 10017450 +10028f92: 07eb lsls r3, r5, #31 +10028f94: 4668 mov r0, sp +10028f96: d50a bpl.n 10028fae +10028f98: 2d01 cmp r5, #1 +10028f9a: bf0b itete eq +10028f9c: 490b ldreq r1, [pc, #44] ; (10028fcc ) +10028f9e: 490c ldrne r1, [pc, #48] ; (10028fd0 ) +10028fa0: 2204 moveq r2, #4 +10028fa2: 2207 movne r2, #7 +10028fa4: f7ee fa44 bl 10017430 +10028fa8: 4620 mov r0, r4 +10028faa: 2102 movs r1, #2 +10028fac: e005 b.n 10028fba +10028fae: 4909 ldr r1, [pc, #36] ; (10028fd4 ) +10028fb0: 2203 movs r2, #3 +10028fb2: f7ee fa3d bl 10017430 +10028fb6: 4620 mov r0, r4 +10028fb8: 210c movs r1, #12 +10028fba: f7f5 fc33 bl 1001e824 +10028fbe: 4620 mov r0, r4 +10028fc0: 2106 movs r1, #6 +10028fc2: 466a mov r2, sp +10028fc4: f009 fa95 bl 100324f2 +10028fc8: b005 add sp, #20 +10028fca: bd30 pop {r4, r5, pc} +10028fcc: 10041738 .word 0x10041738 +10028fd0: 10041748 .word 0x10041748 +10028fd4: 1004174f .word 0x1004174f + +10028fd8 : +10028fd8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10028fdc: 4606 mov r6, r0 +10028fde: 4688 mov r8, r1 +10028fe0: 250c movs r5, #12 +10028fe2: 4545 cmp r5, r8 +10028fe4: d24d bcs.n 10029082 +10028fe6: 5d73 ldrb r3, [r6, r5] +10028fe8: 1977 adds r7, r6, r5 +10028fea: 2bdd cmp r3, #221 ; 0xdd +10028fec: d145 bne.n 1002907a +10028fee: 1cbc adds r4, r7, #2 +10028ff0: 4620 mov r0, r4 +10028ff2: 492d ldr r1, [pc, #180] ; (100290a8 ) +10028ff4: 2203 movs r2, #3 +10028ff6: f7ee fa23 bl 10017440 +10028ffa: b110 cbz r0, 10029002 +10028ffc: 2005 movs r0, #5 +10028ffe: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10029002: 4620 mov r0, r4 +10029004: 4929 ldr r1, [pc, #164] ; (100290ac ) +10029006: 2203 movs r2, #3 +10029008: f7ee fa1a bl 10017440 +1002900c: 2800 cmp r0, #0 +1002900e: d1f5 bne.n 10028ffc +10029010: 4620 mov r0, r4 +10029012: 4927 ldr r1, [pc, #156] ; (100290b0 ) +10029014: 2203 movs r2, #3 +10029016: f7ee fa13 bl 10017440 +1002901a: b110 cbz r0, 10029022 +1002901c: 2003 movs r0, #3 +1002901e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10029022: 4620 mov r0, r4 +10029024: 4923 ldr r1, [pc, #140] ; (100290b4 ) +10029026: 2203 movs r2, #3 +10029028: f7ee fa0a bl 10017440 +1002902c: 2800 cmp r0, #0 +1002902e: d1f5 bne.n 1002901c +10029030: 4620 mov r0, r4 +10029032: 4920 ldr r1, [pc, #128] ; (100290b4 ) +10029034: 2203 movs r2, #3 +10029036: f7ee fa03 bl 10017440 +1002903a: 2800 cmp r0, #0 +1002903c: d1ee bne.n 1002901c +1002903e: 4620 mov r0, r4 +10029040: 491d ldr r1, [pc, #116] ; (100290b8 ) +10029042: 2203 movs r2, #3 +10029044: f7ee f9fc bl 10017440 +10029048: b9f0 cbnz r0, 10029088 +1002904a: 4620 mov r0, r4 +1002904c: 491b ldr r1, [pc, #108] ; (100290bc ) +1002904e: 2203 movs r2, #3 +10029050: f7ee f9f6 bl 10017440 +10029054: b9d8 cbnz r0, 1002908e +10029056: 4620 mov r0, r4 +10029058: 4919 ldr r1, [pc, #100] ; (100290c0 ) +1002905a: 2203 movs r2, #3 +1002905c: f7ee f9f0 bl 10017440 +10029060: b9c0 cbnz r0, 10029094 +10029062: 4620 mov r0, r4 +10029064: 4917 ldr r1, [pc, #92] ; (100290c4 ) +10029066: 2203 movs r2, #3 +10029068: f7ee f9ea bl 10017440 +1002906c: b9a8 cbnz r0, 1002909a +1002906e: 4620 mov r0, r4 +10029070: 4915 ldr r1, [pc, #84] ; (100290c8 ) +10029072: 2203 movs r2, #3 +10029074: f7ee f9e4 bl 10017440 +10029078: b990 cbnz r0, 100290a0 +1002907a: 787b ldrb r3, [r7, #1] +1002907c: 3302 adds r3, #2 +1002907e: 441d add r5, r3 +10029080: e7af b.n 10028fe2 +10029082: 2000 movs r0, #0 +10029084: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10029088: 2008 movs r0, #8 +1002908a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1002908e: 2004 movs r0, #4 +10029090: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10029094: 2006 movs r0, #6 +10029096: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1002909a: 2001 movs r0, #1 +1002909c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100290a0: 200b movs r0, #11 +100290a2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100290a6: bf00 nop +100290a8: 10041726 .word 0x10041726 +100290ac: 10041729 .word 0x10041729 +100290b0: 1004173c .word 0x1004173c +100290b4: 1004173f .word 0x1004173f +100290b8: 10041732 .word 0x10041732 +100290bc: 1004172f .word 0x1004172f +100290c0: 10041735 .word 0x10041735 +100290c4: 1004172c .word 0x1004172c +100290c8: 10041752 .word 0x10041752 + +100290cc : +100290cc: b507 push {r0, r1, r2, lr} +100290ce: f890 272e ldrb.w r2, [r0, #1838] ; 0x72e +100290d2: 4603 mov r3, r0 +100290d4: 2a04 cmp r2, #4 +100290d6: d00f beq.n 100290f8 +100290d8: 2a08 cmp r2, #8 +100290da: d008 beq.n 100290ee +100290dc: 2a01 cmp r2, #1 +100290de: d11b bne.n 10029118 +100290e0: aa02 add r2, sp, #8 +100290e2: f06f 0304 mvn.w r3, #4 +100290e6: f842 3d04 str.w r3, [r2, #-4]! +100290ea: 211b movs r1, #27 +100290ec: e011 b.n 10029112 +100290ee: 2201 movs r2, #1 +100290f0: f880 2738 strb.w r2, [r0, #1848] ; 0x738 +100290f4: 2200 movs r2, #0 +100290f6: e013 b.n 10029120 +100290f8: 2200 movs r2, #0 +100290fa: f880 2738 strb.w r2, [r0, #1848] ; 0x738 +100290fe: 2201 movs r2, #1 +10029100: f880 2739 strb.w r2, [r0, #1849] ; 0x739 +10029104: f06f 0304 mvn.w r3, #4 +10029108: aa02 add r2, sp, #8 +1002910a: f842 3d08 str.w r3, [r2, #-8]! +1002910e: 211b movs r1, #27 +10029110: 466a mov r2, sp +10029112: f009 f9ee bl 100324f2 +10029116: e005 b.n 10029124 +10029118: 2200 movs r2, #0 +1002911a: f880 2738 strb.w r2, [r0, #1848] ; 0x738 +1002911e: 2201 movs r2, #1 +10029120: f883 2739 strb.w r2, [r3, #1849] ; 0x739 +10029124: b003 add sp, #12 +10029126: f85d fb04 ldr.w pc, [sp], #4 + +1002912a : +1002912a: b537 push {r0, r1, r2, r4, r5, lr} +1002912c: f001 0320 and.w r3, r1, #32 +10029130: b29b uxth r3, r3 +10029132: 4604 mov r4, r0 +10029134: 460d mov r5, r1 +10029136: f890 2730 ldrb.w r2, [r0, #1840] ; 0x730 +1002913a: b13b cbz r3, 1002914c +1002913c: 2a03 cmp r2, #3 +1002913e: d010 beq.n 10029162 +10029140: 2301 movs r3, #1 +10029142: aa02 add r2, sp, #8 +10029144: f802 3d01 strb.w r3, [r2, #-1]! +10029148: 2303 movs r3, #3 +1002914a: e005 b.n 10029158 +1002914c: 2a01 cmp r2, #1 +1002914e: d008 beq.n 10029162 +10029150: aa02 add r2, sp, #8 +10029152: f802 3d01 strb.w r3, [r2, #-1]! +10029156: 2301 movs r3, #1 +10029158: f884 3730 strb.w r3, [r4, #1840] ; 0x730 +1002915c: 2113 movs r1, #19 +1002915e: f009 f9c8 bl 100324f2 +10029162: 07ab lsls r3, r5, #30 +10029164: d501 bpl.n 1002916a +10029166: 2314 movs r3, #20 +10029168: e00c b.n 10029184 +1002916a: f894 3521 ldrb.w r3, [r4, #1313] ; 0x521 +1002916e: f013 0f0a tst.w r3, #10 +10029172: d00d beq.n 10029190 +10029174: f415 6f80 tst.w r5, #1024 ; 0x400 +10029178: f894 372f ldrb.w r3, [r4, #1839] ; 0x72f +1002917c: d005 beq.n 1002918a +1002917e: 2b09 cmp r3, #9 +10029180: d00a beq.n 10029198 +10029182: 2309 movs r3, #9 +10029184: f884 372f strb.w r3, [r4, #1839] ; 0x72f +10029188: e006 b.n 10029198 +1002918a: 2b14 cmp r3, #20 +1002918c: d1eb bne.n 10029166 +1002918e: e003 b.n 10029198 +10029190: f013 0f14 tst.w r3, #20 +10029194: d0e7 beq.n 10029166 +10029196: e7f4 b.n 10029182 +10029198: 4620 mov r0, r4 +1002919a: 2111 movs r1, #17 +1002919c: f204 722f addw r2, r4, #1839 ; 0x72f +100291a0: f009 f9a7 bl 100324f2 +100291a4: b003 add sp, #12 +100291a6: bd30 pop {r4, r5, pc} + +100291a8 : +100291a8: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +100291aa: f100 06fc add.w r6, r0, #252 ; 0xfc +100291ae: 4604 mov r4, r0 +100291b0: 4630 mov r0, r6 +100291b2: f015 fba5 bl 1003e900 <__rtw_get_rateset_len_veneer> +100291b6: f894 3736 ldrb.w r3, [r4, #1846] ; 0x736 +100291ba: 4607 mov r7, r0 +100291bc: b12b cbz r3, 100291ca +100291be: f894 3735 ldrb.w r3, [r4, #1845] ; 0x735 +100291c2: b113 cbz r3, 100291ca +100291c4: 2301 movs r3, #1 +100291c6: f884 3734 strb.w r3, [r4, #1844] ; 0x734 +100291ca: f894 351e ldrb.w r3, [r4, #1310] ; 0x51e +100291ce: 2b0e cmp r3, #14 +100291d0: f894 3734 ldrb.w r3, [r4, #1844] ; 0x734 +100291d4: d904 bls.n 100291e0 +100291d6: 2b00 cmp r3, #0 +100291d8: bf14 ite ne +100291da: 2314 movne r3, #20 +100291dc: 2304 moveq r3, #4 +100291de: e016 b.n 1002920e +100291e0: 2b00 cmp r3, #0 +100291e2: 4630 mov r0, r6 +100291e4: 4639 mov r1, r7 +100291e6: bf14 ite ne +100291e8: 2508 movne r5, #8 +100291ea: 2500 moveq r5, #0 +100291ec: f7ff f912 bl 10028414 +100291f0: 2801 cmp r0, #1 +100291f2: d102 bne.n 100291fa +100291f4: f045 0301 orr.w r3, r5, #1 +100291f8: e009 b.n 1002920e +100291fa: 4630 mov r0, r6 +100291fc: 4639 mov r1, r7 +100291fe: f7ff f8f5 bl 100283ec +10029202: 2801 cmp r0, #1 +10029204: bf0c ite eq +10029206: f045 0303 orreq.w r3, r5, #3 +1002920a: f045 0302 orrne.w r3, r5, #2 +1002920e: f241 32b5 movw r2, #5045 ; 0x13b5 +10029212: 5ca2 ldrb r2, [r4, r2] +10029214: 2112 movs r1, #18 +10029216: 4013 ands r3, r2 +10029218: f884 3521 strb.w r3, [r4, #1313] ; 0x521 +1002921c: 4b09 ldr r3, [pc, #36] ; (10029244 ) +1002921e: aa02 add r2, sp, #8 +10029220: f842 3d04 str.w r3, [r2, #-4]! +10029224: f504 53ba add.w r3, r4, #5952 ; 0x1740 +10029228: 4620 mov r0, r4 +1002922a: 681b ldr r3, [r3, #0] +1002922c: 4798 blx r3 +1002922e: f894 3521 ldrb.w r3, [r4, #1313] ; 0x521 +10029232: 4620 mov r0, r4 +10029234: 07db lsls r3, r3, #31 +10029236: bf4c ite mi +10029238: 2102 movmi r1, #2 +1002923a: 210c movpl r1, #12 +1002923c: f7f5 faf2 bl 1001e824 +10029240: b003 add sp, #12 +10029242: bdf0 pop {r4, r5, r6, r7, pc} +10029244: 0a0a0808 .word 0x0a0a0808 + +10029248 : +10029248: f890 3521 ldrb.w r3, [r0, #1313] ; 0x521 +1002924c: 3109 adds r1, #9 +1002924e: f013 0f01 tst.w r3, #1 +10029252: f500 60d0 add.w r0, r0, #1664 ; 0x680 +10029256: eb00 1041 add.w r0, r0, r1, lsl #5 +1002925a: f04f 0204 mov.w r2, #4 +1002925e: bf14 ite ne +10029260: 4901 ldrne r1, [pc, #4] ; (10029268 ) +10029262: 4902 ldreq r1, [pc, #8] ; (1002926c ) +10029264: f7ee b8e4 b.w 10017430 +10029268: 10041738 .word 0x10041738 +1002926c: 1004174f .word 0x1004174f + +10029270 : +10029270: 69cb ldr r3, [r1, #28] +10029272: 6989 ldr r1, [r1, #24] +10029274: 2200 movs r2, #0 +10029276: f500 7050 add.w r0, r0, #832 ; 0x340 +1002927a: 430a orrs r2, r1 +1002927c: e9c0 2300 strd r2, r3, [r0] +10029280: 4770 bx lr + +10029282 : +10029282: 2109 movs r1, #9 +10029284: 2200 movs r2, #0 +10029286: f009 b934 b.w 100324f2 + +1002928a <_init_txservq>: +1002928a: b510 push {r4, lr} +1002928c: 4604 mov r4, r0 +1002928e: f7ee f8e7 bl 10017460 +10029292: f104 0008 add.w r0, r4, #8 +10029296: f7ee f991 bl 100175bc +1002929a: 2300 movs r3, #0 +1002929c: 6163 str r3, [r4, #20] +1002929e: bd10 pop {r4, pc} + +100292a0 : +100292a0: b530 push {r4, r5, lr} +100292a2: 4605 mov r5, r0 +100292a4: b08b sub sp, #44 ; 0x2c +100292a6: 460c mov r4, r1 +100292a8: 6800 ldr r0, [r0, #0] +100292aa: 4629 mov r1, r5 +100292ac: f00d fb07 bl 100368be <_rtw_open_pktfile> +100292b0: 4628 mov r0, r5 +100292b2: a901 add r1, sp, #4 +100292b4: 220e movs r2, #14 +100292b6: f00d fb0b bl 100368d0 <_rtw_pktfile_read> +100292ba: 88a3 ldrh r3, [r4, #4] +100292bc: f5b3 6f00 cmp.w r3, #2048 ; 0x800 +100292c0: d108 bne.n 100292d4 +100292c2: 4628 mov r0, r5 +100292c4: a905 add r1, sp, #20 +100292c6: 2214 movs r2, #20 +100292c8: f00d fb02 bl 100368d0 <_rtw_pktfile_read> +100292cc: f89d 3015 ldrb.w r3, [sp, #21] +100292d0: 095b lsrs r3, r3, #5 +100292d2: e005 b.n 100292e0 +100292d4: f648 028e movw r2, #34958 ; 0x888e +100292d8: 4293 cmp r3, r2 +100292da: bf0c ite eq +100292dc: 2307 moveq r3, #7 +100292de: 2300 movne r3, #0 +100292e0: f884 3039 strb.w r3, [r4, #57] ; 0x39 +100292e4: 231a movs r3, #26 +100292e6: 8163 strh r3, [r4, #10] +100292e8: 2388 movs r3, #136 ; 0x88 +100292ea: 7063 strb r3, [r4, #1] +100292ec: b00b add sp, #44 ; 0x2c +100292ee: bd30 pop {r4, r5, pc} + +100292f0 <_rtw_init_sta_xmit_priv>: +100292f0: b510 push {r4, lr} +100292f2: 2100 movs r1, #0 +100292f4: 4604 mov r4, r0 +100292f6: 229c movs r2, #156 ; 0x9c +100292f8: f7ee f8aa bl 10017450 +100292fc: 4620 mov r0, r4 +100292fe: f7ee f955 bl 100175ac +10029302: f104 000c add.w r0, r4, #12 +10029306: f7ff ffc0 bl 1002928a <_init_txservq> +1002930a: f104 0024 add.w r0, r4, #36 ; 0x24 +1002930e: f7ff ffbc bl 1002928a <_init_txservq> +10029312: f104 003c add.w r0, r4, #60 ; 0x3c +10029316: f7ff ffb8 bl 1002928a <_init_txservq> +1002931a: f104 0054 add.w r0, r4, #84 ; 0x54 +1002931e: f7ff ffb4 bl 1002928a <_init_txservq> +10029322: f104 006c add.w r0, r4, #108 ; 0x6c +10029326: f7ee f89b bl 10017460 +1002932a: f104 0074 add.w r0, r4, #116 ; 0x74 +1002932e: e8bd 4010 ldmia.w sp!, {r4, lr} +10029332: f7ee b895 b.w 10017460 + +10029336 : +10029336: b510 push {r4, lr} +10029338: 4604 mov r4, r0 +1002933a: f7ee f945 bl 100175c8 +1002933e: f104 000c add.w r0, r4, #12 +10029342: f7ee f941 bl 100175c8 +10029346: f104 0018 add.w r0, r4, #24 +1002934a: f7ee f93d bl 100175c8 +1002934e: f104 0024 add.w r0, r4, #36 ; 0x24 +10029352: f7ee f939 bl 100175c8 +10029356: f104 0030 add.w r0, r4, #48 ; 0x30 +1002935a: f7ee f935 bl 100175c8 +1002935e: f104 003c add.w r0, r4, #60 ; 0x3c +10029362: f7ee f931 bl 100175c8 +10029366: f104 0054 add.w r0, r4, #84 ; 0x54 +1002936a: f7ee f92d bl 100175c8 +1002936e: f504 70de add.w r0, r4, #444 ; 0x1bc +10029372: f7ee f929 bl 100175c8 +10029376: f504 70e4 add.w r0, r4, #456 ; 0x1c8 +1002937a: e8bd 4010 ldmia.w sp!, {r4, lr} +1002937e: f7ee b923 b.w 100175c8 + +10029382 : +10029382: 2907 cmp r1, #7 +10029384: d818 bhi.n 100293b8 +10029386: 2301 movs r3, #1 +10029388: 408b lsls r3, r1 +1002938a: f013 0f09 tst.w r3, #9 +1002938e: d10a bne.n 100293a6 +10029390: f013 0fc0 tst.w r3, #192 ; 0xc0 +10029394: d10c bne.n 100293b0 +10029396: f013 0f30 tst.w r3, #48 ; 0x30 +1002939a: d00d beq.n 100293b8 +1002939c: f010 0f04 tst.w r0, #4 +100293a0: bf18 it ne +100293a2: 2100 movne r1, #0 +100293a4: e008 b.n 100293b8 +100293a6: f010 0f02 tst.w r0, #2 +100293aa: bf18 it ne +100293ac: 2101 movne r1, #1 +100293ae: e003 b.n 100293b8 +100293b0: f010 0f08 tst.w r0, #8 +100293b4: bf18 it ne +100293b6: 2105 movne r1, #5 +100293b8: 4608 mov r0, r1 +100293ba: 4770 bx lr + +100293bc : +100293bc: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +100293c0: 6f0f ldr r7, [r1, #112] ; 0x70 +100293c2: b090 sub sp, #64 ; 0x40 +100293c4: 2300 movs r3, #0 +100293c6: 4606 mov r6, r0 +100293c8: 460c mov r4, r1 +100293ca: 9301 str r3, [sp, #4] +100293cc: f891 8057 ldrb.w r8, [r1, #87] ; 0x57 +100293d0: b92f cbnz r7, 100293de +100293d2: f500 6046 add.w r0, r0, #3168 ; 0xc60 +100293d6: 3157 adds r1, #87 ; 0x57 +100293d8: f7fe ff6c bl 100282b4 +100293dc: 4607 mov r7, r0 +100293de: 7f23 ldrb r3, [r4, #28] +100293e0: 2b02 cmp r3, #2 +100293e2: f040 8096 bne.w 10029512 +100293e6: 2f00 cmp r7, #0 +100293e8: f000 8093 beq.w 10029512 +100293ec: a806 add r0, sp, #24 +100293ee: 2100 movs r1, #0 +100293f0: 2210 movs r2, #16 +100293f2: f014 fc17 bl 1003dc24 +100293f6: f018 0f01 tst.w r8, #1 +100293fa: f8d4 5080 ldr.w r5, [r4, #128] ; 0x80 +100293fe: d013 beq.n 10029428 +10029400: f8d6 0d68 ldr.w r0, [r6, #3432] ; 0xd68 +10029404: f606 5708 addw r7, r6, #3336 ; 0xd08 +10029408: eb07 1000 add.w r0, r7, r0, lsl #4 +1002940c: 30a4 adds r0, #164 ; 0xa4 +1002940e: a906 add r1, sp, #24 +10029410: 2210 movs r2, #16 +10029412: f7ee f815 bl 10017440 +10029416: 2801 cmp r0, #1 +10029418: d079 beq.n 1002950e +1002941a: f8d6 3d68 ldr.w r3, [r6, #3432] ; 0xd68 +1002941e: a80a add r0, sp, #40 ; 0x28 +10029420: eb07 1103 add.w r1, r7, r3, lsl #4 +10029424: 31a4 adds r1, #164 ; 0xa4 +10029426: e00a b.n 1002943e +10029428: f507 778c add.w r7, r7, #280 ; 0x118 +1002942c: 4638 mov r0, r7 +1002942e: a906 add r1, sp, #24 +10029430: 2210 movs r2, #16 +10029432: f7ee f805 bl 10017440 +10029436: 2801 cmp r0, #1 +10029438: d069 beq.n 1002950e +1002943a: a80a add r0, sp, #40 ; 0x28 +1002943c: 4639 mov r1, r7 +1002943e: f015 fa1f bl 1003e880 <__rtw_secmicsetkey_veneer> +10029442: f895 3029 ldrb.w r3, [r5, #41] ; 0x29 +10029446: a80a add r0, sp, #40 ; 0x28 +10029448: 07d9 lsls r1, r3, #31 +1002944a: d50c bpl.n 10029466 +1002944c: 2206 movs r2, #6 +1002944e: f105 0138 add.w r1, r5, #56 ; 0x38 +10029452: f015 fa1d bl 1003e890 <__rtw_secmicappend_veneer> +10029456: f895 3029 ldrb.w r3, [r5, #41] ; 0x29 +1002945a: a80a add r0, sp, #40 ; 0x28 +1002945c: 079a lsls r2, r3, #30 +1002945e: d50f bpl.n 10029480 +10029460: f105 0140 add.w r1, r5, #64 ; 0x40 +10029464: e00e b.n 10029484 +10029466: f105 012c add.w r1, r5, #44 ; 0x2c +1002946a: 2206 movs r2, #6 +1002946c: f015 fa10 bl 1003e890 <__rtw_secmicappend_veneer> +10029470: f895 3029 ldrb.w r3, [r5, #41] ; 0x29 +10029474: a80a add r0, sp, #40 ; 0x28 +10029476: 079b lsls r3, r3, #30 +10029478: d502 bpl.n 10029480 +1002947a: f105 0138 add.w r1, r5, #56 ; 0x38 +1002947e: e001 b.n 10029484 +10029480: f105 0132 add.w r1, r5, #50 ; 0x32 +10029484: 2206 movs r2, #6 +10029486: f015 fa03 bl 1003e890 <__rtw_secmicappend_veneer> +1002948a: f894 305e ldrb.w r3, [r4, #94] ; 0x5e +1002948e: b11b cbz r3, 10029498 +10029490: f894 3041 ldrb.w r3, [r4, #65] ; 0x41 +10029494: f88d 3004 strb.w r3, [sp, #4] +10029498: a901 add r1, sp, #4 +1002949a: 2204 movs r2, #4 +1002949c: a80a add r0, sp, #40 ; 0x28 +1002949e: f015 f9f7 bl 1003e890 <__rtw_secmicappend_veneer> +100294a2: 8a62 ldrh r2, [r4, #18] +100294a4: 69a6 ldr r6, [r4, #24] +100294a6: 7f63 ldrb r3, [r4, #29] +100294a8: 1ab6 subs r6, r6, r2 +100294aa: 1899 adds r1, r3, r2 +100294ac: 1af3 subs r3, r6, r3 +100294ae: 7aa6 ldrb r6, [r4, #10] +100294b0: 3528 adds r5, #40 ; 0x28 +100294b2: 440d add r5, r1 +100294b4: b106 cbz r6, 100294b8 +100294b6: 7fa6 ldrb r6, [r4, #30] +100294b8: 1b9e subs r6, r3, r6 +100294ba: 4629 mov r1, r5 +100294bc: a80a add r0, sp, #40 ; 0x28 +100294be: 4632 mov r2, r6 +100294c0: f015 f9e6 bl 1003e890 <__rtw_secmicappend_veneer> +100294c4: a80a add r0, sp, #40 ; 0x28 +100294c6: a902 add r1, sp, #8 +100294c8: f015 fa42 bl 1003e950 <__rtw_secgetmic_veneer> +100294cc: 7aa3 ldrb r3, [r4, #10] +100294ce: 4435 add r5, r6 +100294d0: b15b cbz r3, 100294ea +100294d2: 7fa3 ldrb r3, [r4, #30] +100294d4: b14b cbz r3, 100294ea +100294d6: a804 add r0, sp, #16 +100294d8: 2100 movs r1, #0 +100294da: 2208 movs r2, #8 +100294dc: f7ed ffb8 bl 10017450 +100294e0: a804 add r0, sp, #16 +100294e2: 4629 mov r1, r5 +100294e4: 7fa2 ldrb r2, [r4, #30] +100294e6: f7ed ffa3 bl 10017430 +100294ea: 4628 mov r0, r5 +100294ec: a902 add r1, sp, #8 +100294ee: 2208 movs r2, #8 +100294f0: f7ed ff9e bl 10017430 +100294f4: 69a3 ldr r3, [r4, #24] +100294f6: 3308 adds r3, #8 +100294f8: 61a3 str r3, [r4, #24] +100294fa: 7aa3 ldrb r3, [r4, #10] +100294fc: b14b cbz r3, 10029512 +100294fe: 7fa2 ldrb r2, [r4, #30] +10029500: b13a cbz r2, 10029512 +10029502: f105 0008 add.w r0, r5, #8 +10029506: a904 add r1, sp, #16 +10029508: f7ed ff92 bl 10017430 +1002950c: e001 b.n 10029512 +1002950e: 2000 movs r0, #0 +10029510: e000 b.n 10029514 +10029512: 2001 movs r0, #1 +10029514: b010 add sp, #64 ; 0x40 +10029516: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1002951a : +1002951a: b508 push {r3, lr} +1002951c: 7a8b ldrb r3, [r1, #10] +1002951e: b183 cbz r3, 10029542 +10029520: 7f0b ldrb r3, [r1, #28] +10029522: 3b01 subs r3, #1 +10029524: 2b04 cmp r3, #4 +10029526: d80c bhi.n 10029542 +10029528: e8df f003 tbb [pc, r3] +1002952c: 090b0603 .word 0x090b0603 +10029530: 03 .byte 0x03 +10029531: 00 .byte 0x00 +10029532: f7fe fad9 bl 10027ae8 +10029536: e004 b.n 10029542 +10029538: f7fe fb1c bl 10027b74 +1002953c: e001 b.n 10029542 +1002953e: f7fe fb86 bl 10027c4e +10029542: 2001 movs r0, #1 +10029544: bd08 pop {r3, pc} + +10029546 : +10029546: b5f8 push {r3, r4, r5, r6, r7, lr} +10029548: 6e96 ldr r6, [r2, #104] ; 0x68 +1002954a: 4607 mov r7, r0 +1002954c: 460d mov r5, r1 +1002954e: 4614 mov r4, r2 +10029550: f892 304f ldrb.w r3, [r2, #79] ; 0x4f +10029554: b95e cbnz r6, 1002956e +10029556: 07de lsls r6, r3, #31 +10029558: d502 bpl.n 10029560 +1002955a: f7fe ff01 bl 10028360 +1002955e: e005 b.n 1002956c +10029560: f500 6046 add.w r0, r0, #3168 ; 0xc60 +10029564: f102 014f add.w r1, r2, #79 ; 0x4f +10029568: f7fe fea4 bl 100282b4 +1002956c: 4606 mov r6, r0 +1002956e: 2100 movs r1, #0 +10029570: 221e movs r2, #30 +10029572: 4628 mov r0, r5 +10029574: f7ed ff6c bl 10017450 +10029578: 882b ldrh r3, [r5, #0] +1002957a: 7862 ldrb r2, [r4, #1] +1002957c: f023 03fc bic.w r3, r3, #252 ; 0xfc +10029580: 4313 orrs r3, r2 +10029582: 802b strh r3, [r5, #0] +10029584: 7862 ldrb r2, [r4, #1] +10029586: 0711 lsls r1, r2, #28 +10029588: d401 bmi.n 1002958e +1002958a: 2001 movs r0, #1 +1002958c: bdf8 pop {r3, r4, r5, r6, r7, pc} +1002958e: 6938 ldr r0, [r7, #16] +10029590: 0702 lsls r2, r0, #28 +10029592: f100 8097 bmi.w 100296c4 +10029596: 06c2 lsls r2, r0, #27 +10029598: f140 80af bpl.w 100296fa +1002959c: f443 7300 orr.w r3, r3, #512 ; 0x200 +100295a0: 4628 mov r0, r5 +100295a2: f820 3b04 strh.w r3, [r0], #4 +100295a6: f104 013d add.w r1, r4, #61 ; 0x3d +100295aa: 2206 movs r2, #6 +100295ac: f7ed ff40 bl 10017430 +100295b0: f105 000a add.w r0, r5, #10 +100295b4: f107 019c add.w r1, r7, #156 ; 0x9c +100295b8: 2206 movs r2, #6 +100295ba: f7ed ff39 bl 10017430 +100295be: f105 0010 add.w r0, r5, #16 +100295c2: f104 0143 add.w r1, r4, #67 ; 0x43 +100295c6: 2206 movs r2, #6 +100295c8: f7ed ff32 bl 10017430 +100295cc: f8d6 3104 ldr.w r3, [r6, #260] ; 0x104 +100295d0: f894 205d ldrb.w r2, [r4, #93] ; 0x5d +100295d4: 3300 adds r3, #0 +100295d6: bf18 it ne +100295d8: 2301 movne r3, #1 +100295da: b11a cbz r2, 100295e4 +100295dc: 882a ldrh r2, [r5, #0] +100295de: f442 5200 orr.w r2, r2, #8192 ; 0x2000 +100295e2: 802a strh r2, [r5, #0] +100295e4: 7d22 ldrb r2, [r4, #20] +100295e6: b11a cbz r2, 100295f0 +100295e8: 882a ldrh r2, [r5, #0] +100295ea: f442 4280 orr.w r2, r2, #16384 ; 0x4000 +100295ee: 802a strh r2, [r5, #0] +100295f0: b1c3 cbz r3, 10029624 +100295f2: 8963 ldrh r3, [r4, #10] +100295f4: f894 2039 ldrb.w r2, [r4, #57] ; 0x39 +100295f8: 3b02 subs r3, #2 +100295fa: b122 cbz r2, 10029606 +100295fc: 5ae9 ldrh r1, [r5, r3] +100295fe: f002 020f and.w r2, r2, #15 +10029602: 430a orrs r2, r1 +10029604: 52ea strh r2, [r5, r3] +10029606: f894 2061 ldrb.w r2, [r4, #97] ; 0x61 +1002960a: 5ae9 ldrh r1, [r5, r3] +1002960c: f002 0201 and.w r2, r2, #1 +10029610: ea41 1202 orr.w r2, r1, r2, lsl #4 +10029614: 52ea strh r2, [r5, r3] +10029616: f894 103a ldrb.w r1, [r4, #58] ; 0x3a +1002961a: f001 0103 and.w r1, r1, #3 +1002961e: ea42 1241 orr.w r2, r2, r1, lsl #5 +10029622: 52ea strh r2, [r5, r3] +10029624: 2e00 cmp r6, #0 +10029626: d0b0 beq.n 1002958a +10029628: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 +1002962c: eb06 0343 add.w r3, r6, r3, lsl #1 +10029630: f8b3 2094 ldrh.w r2, [r3, #148] ; 0x94 +10029634: 3201 adds r2, #1 +10029636: f8a3 2094 strh.w r2, [r3, #148] ; 0x94 +1002963a: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 +1002963e: eb06 0343 add.w r3, r6, r3, lsl #1 +10029642: f8b3 2094 ldrh.w r2, [r3, #148] ; 0x94 +10029646: f3c2 020b ubfx r2, r2, #0, #12 +1002964a: f8a3 2094 strh.w r2, [r3, #148] ; 0x94 +1002964e: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 +10029652: eb06 0343 add.w r3, r6, r3, lsl #1 +10029656: f8b3 3094 ldrh.w r3, [r3, #148] ; 0x94 +1002965a: 80e3 strh r3, [r4, #6] +1002965c: 8aea ldrh r2, [r5, #22] +1002965e: f002 020f and.w r2, r2, #15 +10029662: ea42 1303 orr.w r3, r2, r3, lsl #4 +10029666: 82eb strh r3, [r5, #22] +10029668: f894 3057 ldrb.w r3, [r4, #87] ; 0x57 +1002966c: b16b cbz r3, 1002968a +1002966e: f8d6 31f8 ldr.w r3, [r6, #504] ; 0x1f8 +10029672: b153 cbz r3, 1002968a +10029674: f896 21ff ldrb.w r2, [r6, #511] ; 0x1ff +10029678: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 +1002967c: fa22 f303 lsr.w r3, r2, r3 +10029680: 07d8 lsls r0, r3, #31 +10029682: bf44 itt mi +10029684: 2301 movmi r3, #1 +10029686: f884 305c strbmi.w r3, [r4, #92] ; 0x5c +1002968a: f894 005c ldrb.w r0, [r4, #92] ; 0x5c +1002968e: 2801 cmp r0, #1 +10029690: f47f af7b bne.w 1002958a +10029694: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 +10029698: f003 030f and.w r3, r3, #15 +1002969c: eb06 0643 add.w r6, r6, r3, lsl #1 +100296a0: f8b6 21d4 ldrh.w r2, [r6, #468] ; 0x1d4 +100296a4: 88e3 ldrh r3, [r4, #6] +100296a6: 1a99 subs r1, r3, r2 +100296a8: 0509 lsls r1, r1, #20 +100296aa: d503 bpl.n 100296b4 +100296ac: 2300 movs r3, #0 +100296ae: f884 305c strb.w r3, [r4, #92] ; 0x5c +100296b2: bdf8 pop {r3, r4, r5, r6, r7, pc} +100296b4: 3301 adds r3, #1 +100296b6: f3c3 030b ubfx r3, r3, #0, #12 +100296ba: f8a6 31d4 strh.w r3, [r6, #468] ; 0x1d4 +100296be: f884 005c strb.w r0, [r4, #92] ; 0x5c +100296c2: bdf8 pop {r3, r4, r5, r6, r7, pc} +100296c4: f443 7380 orr.w r3, r3, #256 ; 0x100 +100296c8: 4628 mov r0, r5 +100296ca: f820 3b04 strh.w r3, [r0], #4 +100296ce: f107 019c add.w r1, r7, #156 ; 0x9c +100296d2: 2206 movs r2, #6 +100296d4: f7ed feac bl 10017430 +100296d8: f105 000a add.w r0, r5, #10 +100296dc: f104 0143 add.w r1, r4, #67 ; 0x43 +100296e0: 2206 movs r2, #6 +100296e2: f7ed fea5 bl 10017430 +100296e6: f105 0010 add.w r0, r5, #16 +100296ea: f104 013d add.w r1, r4, #61 ; 0x3d +100296ee: 2206 movs r2, #6 +100296f0: f7ed fe9e bl 10017430 +100296f4: f8d7 344c ldr.w r3, [r7, #1100] ; 0x44c +100296f8: e76a b.n 100295d0 +100296fa: f010 0060 ands.w r0, r0, #96 ; 0x60 +100296fe: d011 beq.n 10029724 +10029700: 1d28 adds r0, r5, #4 +10029702: f104 013d add.w r1, r4, #61 ; 0x3d +10029706: 2206 movs r2, #6 +10029708: f7ed fe92 bl 10017430 +1002970c: f105 000a add.w r0, r5, #10 +10029710: f104 0143 add.w r1, r4, #67 ; 0x43 +10029714: 2206 movs r2, #6 +10029716: f7ed fe8b bl 10017430 +1002971a: f105 0010 add.w r0, r5, #16 +1002971e: f107 019c add.w r1, r7, #156 ; 0x9c +10029722: e750 b.n 100295c6 +10029724: bdf8 pop {r3, r4, r5, r6, r7, pc} + +10029726 : +10029726: b510 push {r4, lr} +10029728: 4604 mov r4, r0 +1002972a: f600 105c addw r0, r0, #2396 ; 0x95c +1002972e: f7ed ff33 bl 10017598 +10029732: b908 cbnz r0, 10029738 +10029734: 2001 movs r0, #1 +10029736: bd10 pop {r4, pc} +10029738: f604 1068 addw r0, r4, #2408 ; 0x968 +1002973c: f7ed ff2c bl 10017598 +10029740: 2800 cmp r0, #0 +10029742: d0f7 beq.n 10029734 +10029744: f604 1074 addw r0, r4, #2420 ; 0x974 +10029748: f7ed ff26 bl 10017598 +1002974c: 2800 cmp r0, #0 +1002974e: d0f1 beq.n 10029734 +10029750: f504 6018 add.w r0, r4, #2432 ; 0x980 +10029754: f7ed ff20 bl 10017598 +10029758: f1d0 0001 rsbs r0, r0, #1 +1002975c: bf38 it cc +1002975e: 2000 movcc r0, #0 +10029760: bd10 pop {r4, pc} + +10029762 : +10029762: f891 2039 ldrb.w r2, [r1, #57] ; 0x39 +10029766: 6e8b ldr r3, [r1, #104] ; 0x68 +10029768: 3a01 subs r2, #1 +1002976a: b2d2 uxtb r2, r2 +1002976c: 2a06 cmp r2, #6 +1002976e: d810 bhi.n 10029792 +10029770: 2101 movs r1, #1 +10029772: fa01 f202 lsl.w r2, r1, r2 +10029776: f012 0f60 tst.w r2, #96 ; 0x60 +1002977a: d108 bne.n 1002978e +1002977c: f012 0f18 tst.w r2, #24 +10029780: d103 bne.n 1002978a +10029782: 0792 lsls r2, r2, #30 +10029784: d005 beq.n 10029792 +10029786: 333c adds r3, #60 ; 0x3c +10029788: e004 b.n 10029794 +1002978a: 3354 adds r3, #84 ; 0x54 +1002978c: e002 b.n 10029794 +1002978e: 336c adds r3, #108 ; 0x6c +10029790: e000 b.n 10029794 +10029792: 3324 adds r3, #36 ; 0x24 +10029794: 6958 ldr r0, [r3, #20] +10029796: 4770 bx lr + +10029798 : +10029798: b510 push {r4, lr} +1002979a: f890 4521 ldrb.w r4, [r0, #1313] ; 0x521 +1002979e: 6f0b ldr r3, [r1, #112] ; 0x70 +100297a0: 2c07 cmp r4, #7 +100297a2: 698a ldr r2, [r1, #24] +100297a4: d903 bls.n 100297ae +100297a6: f241 34d2 movw r4, #5074 ; 0x13d2 +100297aa: 5d04 ldrb r4, [r0, r4] +100297ac: b17c cbz r4, 100297ce +100297ae: f241 34ba movw r4, #5050 ; 0x13ba +100297b2: 5b00 ldrh r0, [r0, r4] +100297b4: 4282 cmp r2, r0 +100297b6: d901 bls.n 100297bc +100297b8: 2301 movs r3, #1 +100297ba: e01c b.n 100297f6 +100297bc: f893 2175 ldrb.w r2, [r3, #373] ; 0x175 +100297c0: 2a00 cmp r2, #0 +100297c2: d1f9 bne.n 100297b8 +100297c4: f893 3174 ldrb.w r3, [r3, #372] ; 0x174 +100297c8: b1a3 cbz r3, 100297f4 +100297ca: 2302 movs r3, #2 +100297cc: e013 b.n 100297f6 +100297ce: f890 472e ldrb.w r4, [r0, #1838] ; 0x72e +100297d2: 2c05 cmp r4, #5 +100297d4: d012 beq.n 100297fc +100297d6: f8b3 4174 ldrh.w r4, [r3, #372] ; 0x174 +100297da: b9c4 cbnz r4, 1002980e +100297dc: f891 305f ldrb.w r3, [r1, #95] ; 0x5f +100297e0: b9f3 cbnz r3, 10029820 +100297e2: f241 33ba movw r3, #5050 ; 0x13ba +100297e6: 5ac3 ldrh r3, [r0, r3] +100297e8: 429a cmp r2, r3 +100297ea: d8e5 bhi.n 100297b8 +100297ec: f891 3064 ldrb.w r3, [r1, #100] ; 0x64 +100297f0: 2b01 cmp r3, #1 +100297f2: d0e1 beq.n 100297b8 +100297f4: 2300 movs r3, #0 +100297f6: f881 3044 strb.w r3, [r1, #68] ; 0x44 +100297fa: bd10 pop {r4, pc} +100297fc: f891 4064 ldrb.w r4, [r1, #100] ; 0x64 +10029800: 2c01 cmp r4, #1 +10029802: d1e8 bne.n 100297d6 +10029804: f8d0 4d0c ldr.w r4, [r0, #3340] ; 0xd0c +10029808: 2c04 cmp r4, #4 +1002980a: d1e4 bne.n 100297d6 +1002980c: e7dd b.n 100297ca +1002980e: f893 2175 ldrb.w r2, [r3, #373] ; 0x175 +10029812: 2a00 cmp r2, #0 +10029814: d1d0 bne.n 100297b8 +10029816: f893 3174 ldrb.w r3, [r3, #372] ; 0x174 +1002981a: 2b00 cmp r3, #0 +1002981c: d1d5 bne.n 100297ca +1002981e: bd10 pop {r4, pc} +10029820: f890 451f ldrb.w r4, [r0, #1311] ; 0x51f +10029824: f890 3737 ldrb.w r3, [r0, #1847] ; 0x737 +10029828: b11c cbz r4, 10029832 +1002982a: 3b02 subs r3, #2 +1002982c: 2b01 cmp r3, #1 +1002982e: d8d8 bhi.n 100297e2 +10029830: e7c2 b.n 100297b8 +10029832: 2b03 cmp r3, #3 +10029834: d1d5 bne.n 100297e2 +10029836: e7bf b.n 100297b8 + +10029838 : +10029838: 23aa movs r3, #170 ; 0xaa +1002983a: b510 push {r4, lr} +1002983c: 7003 strb r3, [r0, #0] +1002983e: 7043 strb r3, [r0, #1] +10029840: 2303 movs r3, #3 +10029842: 7083 strb r3, [r0, #2] +10029844: f248 1337 movw r3, #33079 ; 0x8137 +10029848: 4299 cmp r1, r3 +1002984a: 4604 mov r4, r0 +1002984c: d007 beq.n 1002985e +1002984e: 4a0a ldr r2, [pc, #40] ; (10029878 ) +10029850: 4b0a ldr r3, [pc, #40] ; (1002987c ) +10029852: f248 00f3 movw r0, #33011 ; 0x80f3 +10029856: 4281 cmp r1, r0 +10029858: bf18 it ne +1002985a: 4613 movne r3, r2 +1002985c: e000 b.n 10029860 +1002985e: 4b07 ldr r3, [pc, #28] ; (1002987c ) +10029860: 2200 movs r2, #0 +10029862: 70e2 strb r2, [r4, #3] +10029864: 785a ldrb r2, [r3, #1] +10029866: 4608 mov r0, r1 +10029868: 7122 strb r2, [r4, #4] +1002986a: 789b ldrb r3, [r3, #2] +1002986c: 7163 strb r3, [r4, #5] +1002986e: f7ed fd99 bl 100173a4 <_htons> +10029872: 80e0 strh r0, [r4, #6] +10029874: 2008 movs r0, #8 +10029876: bd10 pop {r4, pc} +10029878: 1004177b .word 0x1004177b +1002987c: 10041778 .word 0x10041778 + +10029880 : +10029880: b537 push {r0, r1, r2, r4, r5, lr} +10029882: f890 59b4 ldrb.w r5, [r0, #2484] ; 0x9b4 +10029886: 4604 mov r4, r0 +10029888: 4613 mov r3, r2 +1002988a: b115 cbz r5, 10029892 +1002988c: 2d01 cmp r5, #1 +1002988e: d018 beq.n 100298c2 +10029890: e002 b.n 10029898 +10029892: f880 59b5 strb.w r5, [r0, #2485] ; 0x9b5 +10029896: e014 b.n 100298c2 +10029898: 4608 mov r0, r1 +1002989a: aa01 add r2, sp, #4 +1002989c: 212a movs r1, #42 ; 0x2a +1002989e: f014 ffdf bl 1003e860 <__rtw_get_ie_veneer> +100298a2: b908 cbnz r0, 100298a8 +100298a4: 2300 movs r3, #0 +100298a6: e00a b.n 100298be +100298a8: 7883 ldrb r3, [r0, #2] +100298aa: 079b lsls r3, r3, #30 +100298ac: d5fa bpl.n 100298a4 +100298ae: f504 539c add.w r3, r4, #4992 ; 0x1380 +100298b2: 3308 adds r3, #8 +100298b4: f893 3030 ldrb.w r3, [r3, #48] ; 0x30 +100298b8: 2b01 cmp r3, #1 +100298ba: bf18 it ne +100298bc: 2302 movne r3, #2 +100298be: f884 39b5 strb.w r3, [r4, #2485] ; 0x9b5 +100298c2: b003 add sp, #12 +100298c4: bd30 pop {r4, r5, pc} + +100298c6 : +100298c6: 6f8b ldr r3, [r1, #120] ; 0x78 +100298c8: b570 push {r4, r5, r6, lr} +100298ca: f003 030f and.w r3, r3, #15 +100298ce: 2b01 cmp r3, #1 +100298d0: d120 bne.n 10029914 +100298d2: f600 1658 addw r6, r0, #2392 ; 0x958 +100298d6: e9d6 4518 ldrd r4, r5, [r6, #96] ; 0x60 +100298da: 17d3 asrs r3, r2, #31 +100298dc: 18a4 adds r4, r4, r2 +100298de: eb45 0503 adc.w r5, r5, r3 +100298e2: e9c6 4518 strd r4, r5, [r6, #96] ; 0x60 +100298e6: f8d0 447c ldr.w r4, [r0, #1148] ; 0x47c +100298ea: 3401 adds r4, #1 +100298ec: f8c0 447c str.w r4, [r0, #1148] ; 0x47c +100298f0: 6f0c ldr r4, [r1, #112] ; 0x70 +100298f2: b17c cbz r4, 10029914 +100298f4: f504 74c0 add.w r4, r4, #384 ; 0x180 +100298f8: e9d4 010e ldrd r0, r1, [r4, #56] ; 0x38 +100298fc: 3001 adds r0, #1 +100298fe: f141 0100 adc.w r1, r1, #0 +10029902: e9c4 010e strd r0, r1, [r4, #56] ; 0x38 +10029906: e9d4 0110 ldrd r0, r1, [r4, #64] ; 0x40 +1002990a: 1812 adds r2, r2, r0 +1002990c: eb43 0301 adc.w r3, r3, r1 +10029910: e9c4 2310 strd r2, r3, [r4, #64] ; 0x40 +10029914: bd70 pop {r4, r5, r6, pc} + +10029916 : +10029916: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +10029918: 4605 mov r5, r0 +1002991a: 460c mov r4, r1 +1002991c: b1c9 cbz r1, 10029952 +1002991e: f500 76f0 add.w r6, r0, #480 ; 0x1e0 +10029922: a901 add r1, sp, #4 +10029924: f500 77ec add.w r7, r0, #472 ; 0x1d8 +10029928: 4630 mov r0, r6 +1002992a: f7ed fe19 bl 10017560 +1002992e: 4620 mov r0, r4 +10029930: f7ed fdaa bl 10017488 +10029934: 4620 mov r0, r4 +10029936: 4639 mov r1, r7 +10029938: f7ed fda0 bl 1001747c +1002993c: f8d5 31ec ldr.w r3, [r5, #492] ; 0x1ec +10029940: 4630 mov r0, r6 +10029942: 3301 adds r3, #1 +10029944: f8c5 31ec str.w r3, [r5, #492] ; 0x1ec +10029948: a901 add r1, sp, #4 +1002994a: f7ed fe13 bl 10017574 +1002994e: 2001 movs r0, #1 +10029950: e000 b.n 10029954 +10029952: 4608 mov r0, r1 +10029954: b003 add sp, #12 +10029956: bdf0 pop {r4, r5, r6, r7, pc} + +10029958 : +10029958: b573 push {r0, r1, r4, r5, r6, lr} +1002995a: f100 0654 add.w r6, r0, #84 ; 0x54 +1002995e: f100 044c add.w r4, r0, #76 ; 0x4c +10029962: a901 add r1, sp, #4 +10029964: 4605 mov r5, r0 +10029966: 4630 mov r0, r6 +10029968: f7ed fe3e bl 100175e8 +1002996c: 4620 mov r0, r4 +1002996e: f7ed fe13 bl 10017598 +10029972: 2801 cmp r0, #1 +10029974: d014 beq.n 100299a0 +10029976: 6cec ldr r4, [r5, #76] ; 0x4c +10029978: 4620 mov r0, r4 +1002997a: f7ed fd85 bl 10017488 +1002997e: b184 cbz r4, 100299a2 +10029980: 6cab ldr r3, [r5, #72] ; 0x48 +10029982: 2100 movs r1, #0 +10029984: 3b01 subs r3, #1 +10029986: 64ab str r3, [r5, #72] ; 0x48 +10029988: f104 0008 add.w r0, r4, #8 +1002998c: f8c4 1080 str.w r1, [r4, #128] ; 0x80 +10029990: f8c4 1084 str.w r1, [r4, #132] ; 0x84 +10029994: 226c movs r2, #108 ; 0x6c +10029996: f7ed fd5b bl 10017450 +1002999a: 2301 movs r3, #1 +1002999c: 67a3 str r3, [r4, #120] ; 0x78 +1002999e: e000 b.n 100299a2 +100299a0: 2400 movs r4, #0 +100299a2: 4630 mov r0, r6 +100299a4: a901 add r1, sp, #4 +100299a6: f7ed fe29 bl 100175fc +100299aa: 4620 mov r0, r4 +100299ac: b002 add sp, #8 +100299ae: bd70 pop {r4, r5, r6, pc} + +100299b0 : +100299b0: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +100299b4: 4604 mov r4, r0 +100299b6: f8d0 8058 ldr.w r8, [r0, #88] ; 0x58 +100299ba: 460d mov r5, r1 +100299bc: b1e9 cbz r1, 100299fa +100299be: f100 0754 add.w r7, r0, #84 ; 0x54 +100299c2: 4638 mov r0, r7 +100299c4: a901 add r1, sp, #4 +100299c6: f7ed fe0f bl 100175e8 +100299ca: 4628 mov r0, r5 +100299cc: f7ed fd5c bl 10017488 +100299d0: 6f6e ldr r6, [r5, #116] ; 0x74 +100299d2: b10e cbz r6, 100299d8 +100299d4: 2300 movs r3, #0 +100299d6: 676b str r3, [r5, #116] ; 0x74 +100299d8: 4628 mov r0, r5 +100299da: f104 014c add.w r1, r4, #76 ; 0x4c +100299de: f7ed fd4d bl 1001747c +100299e2: 6ca3 ldr r3, [r4, #72] ; 0x48 +100299e4: 4638 mov r0, r7 +100299e6: 3301 adds r3, #1 +100299e8: 64a3 str r3, [r4, #72] ; 0x48 +100299ea: a901 add r1, sp, #4 +100299ec: f7ed fe06 bl 100175fc +100299f0: b11e cbz r6, 100299fa +100299f2: 4640 mov r0, r8 +100299f4: 4631 mov r1, r6 +100299f6: f00c ff89 bl 1003690c +100299fa: 2001 movs r0, #1 +100299fc: b002 add sp, #8 +100299fe: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10029a02 : +10029a02: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +10029a06: f101 0608 add.w r6, r1, #8 +10029a0a: 460d mov r5, r1 +10029a0c: 4607 mov r7, r0 +10029a0e: a901 add r1, sp, #4 +10029a10: 4630 mov r0, r6 +10029a12: f7ed fde9 bl 100175e8 +10029a16: 682c ldr r4, [r5, #0] +10029a18: 4628 mov r0, r5 +10029a1a: 4621 mov r1, r4 +10029a1c: f7ed fdc1 bl 100175a2 +10029a20: b938 cbnz r0, 10029a32 +10029a22: f8d4 8000 ldr.w r8, [r4] +10029a26: 4621 mov r1, r4 +10029a28: 4638 mov r0, r7 +10029a2a: f7ff ffc1 bl 100299b0 +10029a2e: 4644 mov r4, r8 +10029a30: e7f2 b.n 10029a18 +10029a32: 4630 mov r0, r6 +10029a34: a901 add r1, sp, #4 +10029a36: f7ed fde1 bl 100175fc +10029a3a: b002 add sp, #8 +10029a3c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10029a40 : +10029a40: 3a01 subs r2, #1 +10029a42: 2a06 cmp r2, #6 +10029a44: b510 push {r4, lr} +10029a46: d816 bhi.n 10029a76 +10029a48: 2401 movs r4, #1 +10029a4a: fa04 f202 lsl.w r2, r4, r2 +10029a4e: f012 0f60 tst.w r2, #96 ; 0x60 +10029a52: d10c bne.n 10029a6e +10029a54: f012 0f18 tst.w r2, #24 +10029a58: d105 bne.n 10029a66 +10029a5a: 0792 lsls r2, r2, #30 +10029a5c: d00b beq.n 10029a76 +10029a5e: f101 003c add.w r0, r1, #60 ; 0x3c +10029a62: 2203 movs r2, #3 +10029a64: e00a b.n 10029a7c +10029a66: f101 0054 add.w r0, r1, #84 ; 0x54 +10029a6a: 701c strb r4, [r3, #0] +10029a6c: bd10 pop {r4, pc} +10029a6e: f101 006c add.w r0, r1, #108 ; 0x6c +10029a72: 2200 movs r2, #0 +10029a74: e002 b.n 10029a7c +10029a76: f101 0024 add.w r0, r1, #36 ; 0x24 +10029a7a: 2202 movs r2, #2 +10029a7c: 701a strb r2, [r3, #0] +10029a7e: bd10 pop {r4, pc} + +10029a80 : +10029a80: b573 push {r0, r1, r4, r5, r6, lr} +10029a82: 460c mov r4, r1 +10029a84: 6f09 ldr r1, [r1, #112] ; 0x70 +10029a86: 4605 mov r5, r0 +10029a88: f8d0 69e0 ldr.w r6, [r0, #2528] ; 0x9e0 +10029a8c: b939 cbnz r1, 10029a9e +10029a8e: f104 0157 add.w r1, r4, #87 ; 0x57 +10029a92: f500 6046 add.w r0, r0, #3168 ; 0xc60 +10029a96: f7fe fc0d bl 100282b4 +10029a9a: 4601 mov r1, r0 +10029a9c: b309 cbz r1, 10029ae2 +10029a9e: 4628 mov r0, r5 +10029aa0: f894 2041 ldrb.w r2, [r4, #65] ; 0x41 +10029aa4: f10d 0307 add.w r3, sp, #7 +10029aa8: f7ff ffca bl 10029a40 +10029aac: 4605 mov r5, r0 +10029aae: f7ed fcda bl 10017466 +10029ab2: b130 cbz r0, 10029ac2 +10029ab4: f89d 3007 ldrb.w r3, [sp, #7] +10029ab8: 4628 mov r0, r5 +10029aba: f856 1033 ldr.w r1, [r6, r3, lsl #3] +10029abe: f7ed fcdd bl 1001747c +10029ac2: 4620 mov r0, r4 +10029ac4: f105 0108 add.w r1, r5, #8 +10029ac8: f7ed fcd8 bl 1001747c +10029acc: 696b ldr r3, [r5, #20] +10029ace: 2001 movs r0, #1 +10029ad0: 3301 adds r3, #1 +10029ad2: 616b str r3, [r5, #20] +10029ad4: f89d 3007 ldrb.w r3, [sp, #7] +10029ad8: eb06 06c3 add.w r6, r6, r3, lsl #3 +10029adc: 6873 ldr r3, [r6, #4] +10029ade: 3301 adds r3, #1 +10029ae0: 6073 str r3, [r6, #4] +10029ae2: b002 add sp, #8 +10029ae4: bd70 pop {r4, r5, r6, pc} + +10029ae6 : +10029ae6: b508 push {r3, lr} +10029ae8: f7ff ffca bl 10029a80 +10029aec: 3000 adds r0, #0 +10029aee: bf18 it ne +10029af0: 2001 movne r0, #1 +10029af2: bd08 pop {r3, pc} + +10029af4 : +10029af4: 2304 movs r3, #4 +10029af6: b510 push {r4, lr} +10029af8: 4604 mov r4, r0 +10029afa: f880 39e4 strb.w r3, [r0, #2532] ; 0x9e4 +10029afe: 2020 movs r0, #32 +10029b00: f7ed fe66 bl 100177d0 +10029b04: f894 39e4 ldrb.w r3, [r4, #2532] ; 0x9e4 +10029b08: f8c4 09e0 str.w r0, [r4, #2528] ; 0x9e0 +10029b0c: 2b05 cmp r3, #5 +10029b0e: d10f bne.n 10029b30 +10029b10: f604 138c addw r3, r4, #2444 ; 0x98c +10029b14: 6003 str r3, [r0, #0] +10029b16: f504 6318 add.w r3, r4, #2432 ; 0x980 +10029b1a: 6083 str r3, [r0, #8] +10029b1c: f604 1374 addw r3, r4, #2420 ; 0x974 +10029b20: 6103 str r3, [r0, #16] +10029b22: f604 1368 addw r3, r4, #2408 ; 0x968 +10029b26: f604 145c addw r4, r4, #2396 ; 0x95c +10029b2a: 6183 str r3, [r0, #24] +10029b2c: 6204 str r4, [r0, #32] +10029b2e: bd10 pop {r4, pc} +10029b30: 2b04 cmp r3, #4 +10029b32: d10b bne.n 10029b4c +10029b34: f504 6318 add.w r3, r4, #2432 ; 0x980 +10029b38: 6003 str r3, [r0, #0] +10029b3a: f604 1374 addw r3, r4, #2420 ; 0x974 +10029b3e: 6083 str r3, [r0, #8] +10029b40: f604 135c addw r3, r4, #2396 ; 0x95c +10029b44: f604 1468 addw r4, r4, #2408 ; 0x968 +10029b48: 6103 str r3, [r0, #16] +10029b4a: 6184 str r4, [r0, #24] +10029b4c: bd10 pop {r4, pc} + +10029b4e : +10029b4e: f8d0 39e0 ldr.w r3, [r0, #2528] ; 0x9e0 +10029b52: b12b cbz r3, 10029b60 +10029b54: f890 19e4 ldrb.w r1, [r0, #2532] ; 0x9e4 +10029b58: 4618 mov r0, r3 +10029b5a: 00c9 lsls r1, r1, #3 +10029b5c: f7ed bc65 b.w 1001742a +10029b60: 4770 bx lr + ... + +10029b64 <_rtw_free_xmit_priv>: +10029b64: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10029b68: 6d85 ldr r5, [r0, #88] ; 0x58 +10029b6a: 4604 mov r4, r0 +10029b6c: f8d0 9044 ldr.w r9, [r0, #68] ; 0x44 +10029b70: f8d0 71d0 ldr.w r7, [r0, #464] ; 0x1d0 +10029b74: 4628 mov r0, r5 +10029b76: f008 fd40 bl 100325fa +10029b7a: 4620 mov r0, r4 +10029b7c: f7ff fbdb bl 10029336 +10029b80: 6c63 ldr r3, [r4, #68] ; 0x44 +10029b82: 2b00 cmp r3, #0 +10029b84: d04e beq.n 10029c24 <_rtw_free_xmit_priv+0xc0> +10029b86: 2600 movs r6, #0 +10029b88: 4b27 ldr r3, [pc, #156] ; (10029c28 <_rtw_free_xmit_priv+0xc4>) +10029b8a: 21d4 movs r1, #212 ; 0xd4 +10029b8c: 681a ldr r2, [r3, #0] +10029b8e: fb01 9106 mla r1, r1, r6, r9 +10029b92: 4296 cmp r6, r2 +10029b94: 4698 mov r8, r3 +10029b96: d204 bcs.n 10029ba2 <_rtw_free_xmit_priv+0x3e> +10029b98: 4628 mov r0, r5 +10029b9a: f00c febb bl 10036914 +10029b9e: 3601 adds r6, #1 +10029ba0: e7f2 b.n 10029b88 <_rtw_free_xmit_priv+0x24> +10029ba2: 2600 movs r6, #0 +10029ba4: 4b21 ldr r3, [pc, #132] ; (10029c2c <_rtw_free_xmit_priv+0xc8>) +10029ba6: 215c movs r1, #92 ; 0x5c +10029ba8: 681a ldr r2, [r3, #0] +10029baa: fb01 7106 mla r1, r1, r6, r7 +10029bae: 4296 cmp r6, r2 +10029bb0: 4699 mov r9, r3 +10029bb2: d206 bcs.n 10029bc2 <_rtw_free_xmit_priv+0x5e> +10029bb4: 4628 mov r0, r5 +10029bb6: f240 6256 movw r2, #1622 ; 0x656 +10029bba: f00c fea6 bl 1003690a +10029bbe: 3601 adds r6, #1 +10029bc0: e7f0 b.n 10029ba4 <_rtw_free_xmit_priv+0x40> +10029bc2: 6c20 ldr r0, [r4, #64] ; 0x40 +10029bc4: b130 cbz r0, 10029bd4 <_rtw_free_xmit_priv+0x70> +10029bc6: f8d8 3000 ldr.w r3, [r8] +10029bca: 21d4 movs r1, #212 ; 0xd4 +10029bcc: 4359 muls r1, r3 +10029bce: 3104 adds r1, #4 +10029bd0: f7ed fc29 bl 10017426 +10029bd4: f8d4 01cc ldr.w r0, [r4, #460] ; 0x1cc +10029bd8: b130 cbz r0, 10029be8 <_rtw_free_xmit_priv+0x84> +10029bda: f8d9 3000 ldr.w r3, [r9] +10029bde: 215c movs r1, #92 ; 0x5c +10029be0: 4359 muls r1, r3 +10029be2: 3104 adds r1, #4 +10029be4: f7ed fc1f bl 10017426 +10029be8: f504 70f0 add.w r0, r4, #480 ; 0x1e0 +10029bec: f7ed fcec bl 100175c8 +10029bf0: f8d4 61e8 ldr.w r6, [r4, #488] ; 0x1e8 +10029bf4: f506 7738 add.w r7, r6, #736 ; 0x2e0 +10029bf8: 42be cmp r6, r7 +10029bfa: d007 beq.n 10029c0c <_rtw_free_xmit_priv+0xa8> +10029bfc: 4631 mov r1, r6 +10029bfe: 4628 mov r0, r5 +10029c00: f240 6204 movw r2, #1540 ; 0x604 +10029c04: f00c fe81 bl 1003690a +10029c08: 365c adds r6, #92 ; 0x5c +10029c0a: e7f5 b.n 10029bf8 <_rtw_free_xmit_priv+0x94> +10029c0c: f8d4 01e4 ldr.w r0, [r4, #484] ; 0x1e4 +10029c10: b118 cbz r0, 10029c1a <_rtw_free_xmit_priv+0xb6> +10029c12: f44f 7139 mov.w r1, #740 ; 0x2e4 +10029c16: f7ed fc06 bl 10017426 +10029c1a: 4628 mov r0, r5 +10029c1c: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10029c20: f7ff bf95 b.w 10029b4e +10029c24: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +10029c28: 10044fb8 .word 0x10044fb8 +10029c2c: 10044fb4 .word 0x10044fb4 + +10029c30 : +10029c30: b510 push {r4, lr} +10029c32: 2300 movs r3, #0 +10029c34: 428b cmp r3, r1 +10029c36: da05 bge.n 10029c44 +10029c38: eb00 02c3 add.w r2, r0, r3, lsl #3 +10029c3c: 2400 movs r4, #0 +10029c3e: 6054 str r4, [r2, #4] +10029c40: 3301 adds r3, #1 +10029c42: e7f7 b.n 10029c34 +10029c44: bd10 pop {r4, pc} + ... + +10029c48 <_rtw_init_xmit_priv>: +10029c48: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10029c4c: 4604 mov r4, r0 +10029c4e: 460d mov r5, r1 +10029c50: f7ed fcac bl 100175ac +10029c54: 1d20 adds r0, r4, #4 +10029c56: 65a5 str r5, [r4, #88] ; 0x58 +10029c58: f7ed fcb0 bl 100175bc +10029c5c: f104 0010 add.w r0, r4, #16 +10029c60: f7ed fcac bl 100175bc +10029c64: f104 001c add.w r0, r4, #28 +10029c68: f7ed fca8 bl 100175bc +10029c6c: f104 0028 add.w r0, r4, #40 ; 0x28 +10029c70: f7ed fca4 bl 100175bc +10029c74: 4e60 ldr r6, [pc, #384] ; (10029df8 <_rtw_init_xmit_priv+0x1b0>) +10029c76: f104 0034 add.w r0, r4, #52 ; 0x34 +10029c7a: f104 084c add.w r8, r4, #76 ; 0x4c +10029c7e: f7ed fc9d bl 100175bc +10029c82: 4640 mov r0, r8 +10029c84: f7ed fc9a bl 100175bc +10029c88: 6833 ldr r3, [r6, #0] +10029c8a: 22d4 movs r2, #212 ; 0xd4 +10029c8c: fb02 f003 mul.w r0, r2, r3 +10029c90: 3004 adds r0, #4 +10029c92: f7ed fd7d bl 10017790 +10029c96: 46b1 mov r9, r6 +10029c98: 6420 str r0, [r4, #64] ; 0x40 +10029c9a: b908 cbnz r0, 10029ca0 <_rtw_init_xmit_priv+0x58> +10029c9c: 6460 str r0, [r4, #68] ; 0x44 +10029c9e: e030 b.n 10029d02 <_rtw_init_xmit_priv+0xba> +10029ca0: 1cc7 adds r7, r0, #3 +10029ca2: f027 0603 bic.w r6, r7, #3 +10029ca6: 6466 str r6, [r4, #68] ; 0x44 +10029ca8: 2700 movs r7, #0 +10029caa: f8d9 3000 ldr.w r3, [r9] +10029cae: 429f cmp r7, r3 +10029cb0: d211 bcs.n 10029cd6 <_rtw_init_xmit_priv+0x8e> +10029cb2: 4630 mov r0, r6 +10029cb4: f7ed fbd4 bl 10017460 +10029cb8: 2300 movs r3, #0 +10029cba: 67f5 str r5, [r6, #124] ; 0x7c +10029cbc: 67b3 str r3, [r6, #120] ; 0x78 +10029cbe: 6773 str r3, [r6, #116] ; 0x74 +10029cc0: f8c6 3080 str.w r3, [r6, #128] ; 0x80 +10029cc4: f8c6 3084 str.w r3, [r6, #132] ; 0x84 +10029cc8: 4630 mov r0, r6 +10029cca: 4641 mov r1, r8 +10029ccc: f7ed fbd6 bl 1001747c +10029cd0: 36d4 adds r6, #212 ; 0xd4 +10029cd2: 3701 adds r7, #1 +10029cd4: e7e9 b.n 10029caa <_rtw_init_xmit_priv+0x62> +10029cd6: f504 79da add.w r9, r4, #436 ; 0x1b4 +10029cda: 64a3 str r3, [r4, #72] ; 0x48 +10029cdc: 4648 mov r0, r9 +10029cde: 4e47 ldr r6, [pc, #284] ; (10029dfc <_rtw_init_xmit_priv+0x1b4>) +10029ce0: f7ed fc6c bl 100175bc +10029ce4: f504 70e0 add.w r0, r4, #448 ; 0x1c0 +10029ce8: f7ed fc68 bl 100175bc +10029cec: 6833 ldr r3, [r6, #0] +10029cee: 225c movs r2, #92 ; 0x5c +10029cf0: fb02 f003 mul.w r0, r2, r3 +10029cf4: 3004 adds r0, #4 +10029cf6: f7ed fd4b bl 10017790 +10029cfa: 46b2 mov sl, r6 +10029cfc: f8c4 01cc str.w r0, [r4, #460] ; 0x1cc +10029d00: b908 cbnz r0, 10029d06 <_rtw_init_xmit_priv+0xbe> +10029d02: 2700 movs r7, #0 +10029d04: e075 b.n 10029df2 <_rtw_init_xmit_priv+0x1aa> +10029d06: 1cc6 adds r6, r0, #3 +10029d08: f026 0603 bic.w r6, r6, #3 +10029d0c: f8c4 61d0 str.w r6, [r4, #464] ; 0x1d0 +10029d10: 2701 movs r7, #1 +10029d12: f04f 0800 mov.w r8, #0 +10029d16: f8da 3000 ldr.w r3, [sl] +10029d1a: 4598 cmp r8, r3 +10029d1c: d224 bcs.n 10029d68 <_rtw_init_xmit_priv+0x120> +10029d1e: 4630 mov r0, r6 +10029d20: f7ed fb9e bl 10017460 +10029d24: 2300 movs r3, #0 +10029d26: 6173 str r3, [r6, #20] +10029d28: 60b5 str r5, [r6, #8] +10029d2a: 8333 strh r3, [r6, #24] +10029d2c: 4628 mov r0, r5 +10029d2e: 4631 mov r1, r6 +10029d30: f240 6256 movw r2, #1622 ; 0x656 +10029d34: f00c fde4 bl 10036900 +10029d38: 4607 mov r7, r0 +10029d3a: b958 cbnz r0, 10029d54 <_rtw_init_xmit_priv+0x10c> +10029d3c: 200a movs r0, #10 +10029d3e: f7ed fc99 bl 10017674 +10029d42: 4628 mov r0, r5 +10029d44: 4631 mov r1, r6 +10029d46: f240 6256 movw r2, #1622 ; 0x656 +10029d4a: f00c fdd9 bl 10036900 +10029d4e: 4607 mov r7, r0 +10029d50: 2800 cmp r0, #0 +10029d52: d0d6 beq.n 10029d02 <_rtw_init_xmit_priv+0xba> +10029d54: 2300 movs r3, #0 +10029d56: 8373 strh r3, [r6, #26] +10029d58: 4630 mov r0, r6 +10029d5a: 4649 mov r1, r9 +10029d5c: f7ed fb8e bl 1001747c +10029d60: 365c adds r6, #92 ; 0x5c +10029d62: f108 0801 add.w r8, r8, #1 +10029d66: e7d6 b.n 10029d16 <_rtw_init_xmit_priv+0xce> +10029d68: f504 78ec add.w r8, r4, #472 ; 0x1d8 +10029d6c: f8c4 31d4 str.w r3, [r4, #468] ; 0x1d4 +10029d70: 4640 mov r0, r8 +10029d72: f7ed fc23 bl 100175bc +10029d76: f44f 7039 mov.w r0, #740 ; 0x2e4 +10029d7a: f7ed fd09 bl 10017790 +10029d7e: f8c4 01e4 str.w r0, [r4, #484] ; 0x1e4 +10029d82: 2800 cmp r0, #0 +10029d84: d0bd beq.n 10029d02 <_rtw_init_xmit_priv+0xba> +10029d86: 1cc6 adds r6, r0, #3 +10029d88: f026 0603 bic.w r6, r6, #3 +10029d8c: f8c4 61e8 str.w r6, [r4, #488] ; 0x1e8 +10029d90: f506 7938 add.w r9, r6, #736 ; 0x2e0 +10029d94: 454e cmp r6, r9 +10029d96: d016 beq.n 10029dc6 <_rtw_init_xmit_priv+0x17e> +10029d98: 4630 mov r0, r6 +10029d9a: f7ed fb61 bl 10017460 +10029d9e: 2300 movs r3, #0 +10029da0: 6173 str r3, [r6, #20] +10029da2: 2301 movs r3, #1 +10029da4: 60b5 str r5, [r6, #8] +10029da6: 8333 strh r3, [r6, #24] +10029da8: 4628 mov r0, r5 +10029daa: 4631 mov r1, r6 +10029dac: f240 6204 movw r2, #1540 ; 0x604 +10029db0: f00c fda6 bl 10036900 +10029db4: 4607 mov r7, r0 +10029db6: 2800 cmp r0, #0 +10029db8: d0a3 beq.n 10029d02 <_rtw_init_xmit_priv+0xba> +10029dba: 4630 mov r0, r6 +10029dbc: 4641 mov r1, r8 +10029dbe: f7ed fb5d bl 1001747c +10029dc2: 365c adds r6, #92 ; 0x5c +10029dc4: e7e6 b.n 10029d94 <_rtw_init_xmit_priv+0x14c> +10029dc6: 2308 movs r3, #8 +10029dc8: f8c4 31ec str.w r3, [r4, #492] ; 0x1ec +10029dcc: 4628 mov r0, r5 +10029dce: f7ff fe91 bl 10029af4 +10029dd2: f8d4 0088 ldr.w r0, [r4, #136] ; 0x88 +10029dd6: f894 108c ldrb.w r1, [r4, #140] ; 0x8c +10029dda: f7ff ff29 bl 10029c30 +10029dde: 686b ldr r3, [r5, #4] +10029de0: 2b03 cmp r3, #3 +10029de2: d103 bne.n 10029dec <_rtw_init_xmit_priv+0x1a4> +10029de4: f641 0369 movw r3, #6249 ; 0x1869 +10029de8: 5ceb ldrb r3, [r5, r3] +10029dea: b913 cbnz r3, 10029df2 <_rtw_init_xmit_priv+0x1aa> +10029dec: 4628 mov r0, r5 +10029dee: f008 fbfb bl 100325e8 +10029df2: 4638 mov r0, r7 +10029df4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10029df8: 10044fb8 .word 0x10044fb8 +10029dfc: 10044fb4 .word 0x10044fb4 + +10029e00 : +10029e00: f890 3068 ldrb.w r3, [r0, #104] ; 0x68 +10029e04: 2b11 cmp r3, #17 +10029e06: bf9a itte ls +10029e08: 4a01 ldrls r2, [pc, #4] ; (10029e10 ) +10029e0a: 5cd0 ldrbls r0, [r2, r3] +10029e0c: 2005 movhi r0, #5 +10029e0e: 4770 bx lr +10029e10: 10041766 .word 0x10041766 + +10029e14 : +10029e14: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +10029e18: 6902 ldr r2, [r0, #16] +10029e1a: 4605 mov r5, r0 +10029e1c: 06d2 lsls r2, r2, #27 +10029e1e: 460e mov r6, r1 +10029e20: f891 7057 ldrb.w r7, [r1, #87] ; 0x57 +10029e24: d509 bpl.n 10029e3a +10029e26: 6f0c ldr r4, [r1, #112] ; 0x70 +10029e28: b94c cbnz r4, 10029e3e +10029e2a: f505 6046 add.w r0, r5, #3168 ; 0xc60 +10029e2e: f106 0157 add.w r1, r6, #87 ; 0x57 +10029e32: f7fe fa3f bl 100282b4 +10029e36: 4604 mov r4, r0 +10029e38: b908 cbnz r0, 10029e3e +10029e3a: 2000 movs r0, #0 +10029e3c: e0ba b.n 10029fb4 +10029e3e: 4a5f ldr r2, [pc, #380] ; (10029fbc ) +10029e40: f8d5 19a0 ldr.w r1, [r5, #2464] ; 0x9a0 +10029e44: 6810 ldr r0, [r2, #0] +10029e46: 2203 movs r2, #3 +10029e48: fbb0 f0f2 udiv r0, r0, r2 +10029e4c: 4281 cmp r1, r0 +10029e4e: f007 0301 and.w r3, r7, #1 +10029e52: d919 bls.n 10029e88 +10029e54: 495a ldr r1, [pc, #360] ; (10029fc0 ) +10029e56: 6809 ldr r1, [r1, #0] +10029e58: fbb1 f2f2 udiv r2, r1, r2 +10029e5c: f8d5 1b2c ldr.w r1, [r5, #2860] ; 0xb2c +10029e60: 4291 cmp r1, r2 +10029e62: d911 bls.n 10029e88 +10029e64: f8d5 2b44 ldr.w r2, [r5, #2884] ; 0xb44 +10029e68: 2a02 cmp r2, #2 +10029e6a: d90d bls.n 10029e88 +10029e6c: 4a55 ldr r2, [pc, #340] ; (10029fc4 ) +10029e6e: 6811 ldr r1, [r2, #0] +10029e70: 4a55 ldr r2, [pc, #340] ; (10029fc8 ) +10029e72: 3902 subs r1, #2 +10029e74: 6812 ldr r2, [r2, #0] +10029e76: 4291 cmp r1, r2 +10029e78: dd06 ble.n 10029e88 +10029e7a: 4a54 ldr r2, [pc, #336] ; (10029fcc ) +10029e7c: 6811 ldr r1, [r2, #0] +10029e7e: 4a54 ldr r2, [pc, #336] ; (10029fd0 ) +10029e80: 3905 subs r1, #5 +10029e82: 6812 ldr r2, [r2, #0] +10029e84: 4291 cmp r1, r2 +10029e86: dc05 bgt.n 10029e94 +10029e88: 2b00 cmp r3, #0 +10029e8a: d0d6 beq.n 10029e3a +10029e8c: 2311 movs r3, #17 +10029e8e: f886 3068 strb.w r3, [r6, #104] ; 0x68 +10029e92: e7d2 b.n 10029e3a +10029e94: f896 2067 ldrb.w r2, [r6, #103] ; 0x67 +10029e98: 2a01 cmp r2, #1 +10029e9a: d0f5 beq.n 10029e88 +10029e9c: f104 07f0 add.w r7, r4, #240 ; 0xf0 +10029ea0: 4638 mov r0, r7 +10029ea2: a901 add r1, sp, #4 +10029ea4: b303 cbz r3, 10029ee8 +10029ea6: f7ed fb9f bl 100175e8 +10029eaa: f8b5 0cfc ldrh.w r0, [r5, #3324] ; 0xcfc +10029eae: b1c8 cbz r0, 10029ee4 +10029eb0: 4630 mov r0, r6 +10029eb2: f7ed fae9 bl 10017488 +10029eb6: 4630 mov r0, r6 +10029eb8: f104 01e8 add.w r1, r4, #232 ; 0xe8 +10029ebc: f7ed fade bl 1001747c +10029ec0: f8d4 30f4 ldr.w r3, [r4, #244] ; 0xf4 +10029ec4: 3301 adds r3, #1 +10029ec6: f8c4 30f4 str.w r3, [r4, #244] ; 0xf4 +10029eca: f8b5 3cfe ldrh.w r3, [r5, #3326] ; 0xcfe +10029ece: f043 0301 orr.w r3, r3, #1 +10029ed2: f8a5 3cfe strh.w r3, [r5, #3326] ; 0xcfe +10029ed6: f8b5 3cfc ldrh.w r3, [r5, #3324] ; 0xcfc +10029eda: f043 0301 orr.w r3, r3, #1 +10029ede: f8a5 3cfc strh.w r3, [r5, #3324] ; 0xcfc +10029ee2: e05a b.n 10029f9a +10029ee4: 4604 mov r4, r0 +10029ee6: e060 b.n 10029faa +10029ee8: f7ed fb7e bl 100175e8 +10029eec: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 +10029ef0: f013 0304 ands.w r3, r3, #4 +10029ef4: d058 beq.n 10029fa8 +10029ef6: f8b5 2cfc ldrh.w r2, [r5, #3324] ; 0xcfc +10029efa: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc +10029efe: fa22 f303 lsr.w r3, r2, r3 +10029f02: f013 0301 ands.w r3, r3, #1 +10029f06: d04f beq.n 10029fa8 +10029f08: 4630 mov r0, r6 +10029f0a: f7ed fabd bl 10017488 +10029f0e: 4630 mov r0, r6 +10029f10: f104 01e8 add.w r1, r4, #232 ; 0xe8 +10029f14: f7ed fab2 bl 1001747c +10029f18: f8d4 30f4 ldr.w r3, [r4, #244] ; 0xf4 +10029f1c: f103 0801 add.w r8, r3, #1 +10029f20: f8c4 80f4 str.w r8, [r4, #244] ; 0xf4 +10029f24: f896 3041 ldrb.w r3, [r6, #65] ; 0x41 +10029f28: 3b01 subs r3, #1 +10029f2a: b2db uxtb r3, r3 +10029f2c: 2b06 cmp r3, #6 +10029f2e: d814 bhi.n 10029f5a +10029f30: 2201 movs r2, #1 +10029f32: fa02 f303 lsl.w r3, r2, r3 +10029f36: f013 0f60 tst.w r3, #96 ; 0x60 +10029f3a: d10b bne.n 10029f54 +10029f3c: f013 0f18 tst.w r3, #24 +10029f40: d105 bne.n 10029f4e +10029f42: 079b lsls r3, r3, #30 +10029f44: d009 beq.n 10029f5a +10029f46: f894 3312 ldrb.w r3, [r4, #786] ; 0x312 +10029f4a: 4013 ands r3, r2 +10029f4c: e009 b.n 10029f62 +10029f4e: f894 3314 ldrb.w r3, [r4, #788] ; 0x314 +10029f52: e004 b.n 10029f5e +10029f54: f894 3315 ldrb.w r3, [r4, #789] ; 0x315 +10029f58: e001 b.n 10029f5e +10029f5a: f894 3313 ldrb.w r3, [r4, #787] ; 0x313 +10029f5e: f003 0301 and.w r3, r3, #1 +10029f62: b123 cbz r3, 10029f6e +10029f64: f8d4 2318 ldr.w r2, [r4, #792] ; 0x318 +10029f68: 3201 adds r2, #1 +10029f6a: f8c4 2318 str.w r2, [r4, #792] ; 0x318 +10029f6e: f894 2316 ldrb.w r2, [r4, #790] ; 0x316 +10029f72: b112 cbz r2, 10029f7a +10029f74: b11b cbz r3, 10029f7e +10029f76: 2401 movs r4, #1 +10029f78: e017 b.n 10029faa +10029f7a: 2b00 cmp r3, #0 +10029f7c: d0fb beq.n 10029f76 +10029f7e: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc +10029f82: 2201 movs r2, #1 +10029f84: fa02 f303 lsl.w r3, r2, r3 +10029f88: f8b5 2cfe ldrh.w r2, [r5, #3326] ; 0xcfe +10029f8c: f1b8 0f01 cmp.w r8, #1 +10029f90: ea43 0302 orr.w r3, r3, r2 +10029f94: f8a5 3cfe strh.w r3, [r5, #3326] ; 0xcfe +10029f98: d1ed bne.n 10029f76 +10029f9a: 2200 movs r2, #0 +10029f9c: 4628 mov r0, r5 +10029f9e: 2105 movs r1, #5 +10029fa0: 4613 mov r3, r2 +10029fa2: f7f1 f841 bl 1001b028 +10029fa6: e7e6 b.n 10029f76 +10029fa8: 461c mov r4, r3 +10029faa: 4638 mov r0, r7 +10029fac: a901 add r1, sp, #4 +10029fae: f7ed fb25 bl 100175fc +10029fb2: 4620 mov r0, r4 +10029fb4: b002 add sp, #8 +10029fb6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10029fba: bf00 nop +10029fbc: 10044fb8 .word 0x10044fb8 +10029fc0: 10044fb4 .word 0x10044fb4 +10029fc4: 10044fc0 .word 0x10044fc0 +10029fc8: 1004de38 .word 0x1004de38 +10029fcc: 10044fc4 .word 0x10044fc4 +10029fd0: 1004e01c .word 0x1004e01c + +10029fd4 : +10029fd4: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +10029fd8: f8d0 79e0 ldr.w r7, [r0, #2528] ; 0x9e0 +10029fdc: 6814 ldr r4, [r2, #0] +10029fde: 4605 mov r5, r0 +10029fe0: 4688 mov r8, r1 +10029fe2: 4616 mov r6, r2 +10029fe4: 4630 mov r0, r6 +10029fe6: 4621 mov r1, r4 +10029fe8: f7ed fadb bl 100175a2 +10029fec: b9d0 cbnz r0, 1002a024 +10029fee: 4628 mov r0, r5 +10029ff0: 4621 mov r1, r4 +10029ff2: f8d4 9000 ldr.w r9, [r4] +10029ff6: f7ff ff0d bl 10029e14 +10029ffa: b198 cbz r0, 1002a024 +10029ffc: f894 2041 ldrb.w r2, [r4, #65] ; 0x41 +1002a000: f10d 0307 add.w r3, sp, #7 +1002a004: 4628 mov r0, r5 +1002a006: 4641 mov r1, r8 +1002a008: f7ff fd1a bl 10029a40 +1002a00c: 6943 ldr r3, [r0, #20] +1002a00e: 464c mov r4, r9 +1002a010: 3b01 subs r3, #1 +1002a012: 6143 str r3, [r0, #20] +1002a014: f89d 3007 ldrb.w r3, [sp, #7] +1002a018: eb07 03c3 add.w r3, r7, r3, lsl #3 +1002a01c: 685a ldr r2, [r3, #4] +1002a01e: 3a01 subs r2, #1 +1002a020: 605a str r2, [r3, #4] +1002a022: e7df b.n 10029fe4 +1002a024: b003 add sp, #12 +1002a026: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + +1002a02a : +1002a02a: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +1002a02e: 460c mov r4, r1 +1002a030: 4605 mov r5, r0 +1002a032: f7fe f995 bl 10028360 +1002a036: f605 1758 addw r7, r5, #2392 ; 0x958 +1002a03a: a901 add r1, sp, #4 +1002a03c: 4606 mov r6, r0 +1002a03e: 4638 mov r0, r7 +1002a040: f7ed fad2 bl 100175e8 +1002a044: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 +1002a048: f8d4 1100 ldr.w r1, [r4, #256] ; 0x100 +1002a04c: f043 0304 orr.w r3, r3, #4 +1002a050: f8c4 30f8 str.w r3, [r4, #248] ; 0xf8 +1002a054: 4628 mov r0, r5 +1002a056: f008 fb78 bl 1003274a +1002a05a: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc +1002a05e: 2201 movs r2, #1 +1002a060: fa02 f303 lsl.w r3, r2, r3 +1002a064: f8b5 2cfc ldrh.w r2, [r5, #3324] ; 0xcfc +1002a068: f104 0874 add.w r8, r4, #116 ; 0x74 +1002a06c: 4313 orrs r3, r2 +1002a06e: 4628 mov r0, r5 +1002a070: f8a5 3cfc strh.w r3, [r5, #3324] ; 0xcfc +1002a074: 4621 mov r1, r4 +1002a076: 4642 mov r2, r8 +1002a078: f7ff ffac bl 10029fd4 +1002a07c: 4640 mov r0, r8 +1002a07e: f7ed fa8b bl 10017598 +1002a082: b118 cbz r0, 1002a08c +1002a084: f104 006c add.w r0, r4, #108 ; 0x6c +1002a088: f7ed f9fe bl 10017488 +1002a08c: f104 085c add.w r8, r4, #92 ; 0x5c +1002a090: 4628 mov r0, r5 +1002a092: 4621 mov r1, r4 +1002a094: 4642 mov r2, r8 +1002a096: f7ff ff9d bl 10029fd4 +1002a09a: 4640 mov r0, r8 +1002a09c: f7ed fa7c bl 10017598 +1002a0a0: b118 cbz r0, 1002a0aa +1002a0a2: f104 0054 add.w r0, r4, #84 ; 0x54 +1002a0a6: f7ed f9ef bl 10017488 +1002a0aa: f104 082c add.w r8, r4, #44 ; 0x2c +1002a0ae: 4628 mov r0, r5 +1002a0b0: 4621 mov r1, r4 +1002a0b2: 4642 mov r2, r8 +1002a0b4: f7ff ff8e bl 10029fd4 +1002a0b8: 4640 mov r0, r8 +1002a0ba: f7ed fa6d bl 10017598 +1002a0be: b118 cbz r0, 1002a0c8 +1002a0c0: f104 0024 add.w r0, r4, #36 ; 0x24 +1002a0c4: f7ed f9e0 bl 10017488 +1002a0c8: f104 0844 add.w r8, r4, #68 ; 0x44 +1002a0cc: 4628 mov r0, r5 +1002a0ce: 4621 mov r1, r4 +1002a0d0: 4642 mov r2, r8 +1002a0d2: f7ff ff7f bl 10029fd4 +1002a0d6: 4640 mov r0, r8 +1002a0d8: f7ed fa5e bl 10017598 +1002a0dc: b118 cbz r0, 1002a0e6 +1002a0de: f104 003c add.w r0, r4, #60 ; 0x3c +1002a0e2: f7ed f9d1 bl 10017488 +1002a0e6: f106 042c add.w r4, r6, #44 ; 0x2c +1002a0ea: 4628 mov r0, r5 +1002a0ec: 4631 mov r1, r6 +1002a0ee: 4622 mov r2, r4 +1002a0f0: f7ff ff70 bl 10029fd4 +1002a0f4: 4620 mov r0, r4 +1002a0f6: f7ed fa4f bl 10017598 +1002a0fa: b118 cbz r0, 1002a104 +1002a0fc: f106 0024 add.w r0, r6, #36 ; 0x24 +1002a100: f7ed f9c2 bl 10017488 +1002a104: 4638 mov r0, r7 +1002a106: a901 add r1, sp, #4 +1002a108: f7ed fa78 bl 100175fc +1002a10c: b002 add sp, #8 +1002a10e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1002a112 : +1002a112: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} +1002a116: f101 08f0 add.w r8, r1, #240 ; 0xf0 +1002a11a: 460d mov r5, r1 +1002a11c: 4604 mov r4, r0 +1002a11e: a901 add r1, sp, #4 +1002a120: 4640 mov r0, r8 +1002a122: f7ed fa61 bl 100175e8 +1002a126: f8d5 60e8 ldr.w r6, [r5, #232] ; 0xe8 +1002a12a: f105 0ae8 add.w sl, r5, #232 ; 0xe8 +1002a12e: 2700 movs r7, #0 +1002a130: 4650 mov r0, sl +1002a132: 4631 mov r1, r6 +1002a134: f7ed fa35 bl 100175a2 +1002a138: 2800 cmp r0, #0 +1002a13a: d16d bne.n 1002a218 +1002a13c: 4630 mov r0, r6 +1002a13e: f7ed f9a3 bl 10017488 +1002a142: f896 3041 ldrb.w r3, [r6, #65] ; 0x41 +1002a146: 3b01 subs r3, #1 +1002a148: b2db uxtb r3, r3 +1002a14a: 2b06 cmp r3, #6 +1002a14c: d813 bhi.n 1002a176 +1002a14e: 2201 movs r2, #1 +1002a150: fa02 f303 lsl.w r3, r2, r3 +1002a154: f013 0f60 tst.w r3, #96 ; 0x60 +1002a158: d10a bne.n 1002a170 +1002a15a: f013 0f18 tst.w r3, #24 +1002a15e: d104 bne.n 1002a16a +1002a160: 0799 lsls r1, r3, #30 +1002a162: d008 beq.n 1002a176 +1002a164: f895 3312 ldrb.w r3, [r5, #786] ; 0x312 +1002a168: e007 b.n 1002a17a +1002a16a: f895 3314 ldrb.w r3, [r5, #788] ; 0x314 +1002a16e: e004 b.n 1002a17a +1002a170: f895 3315 ldrb.w r3, [r5, #789] ; 0x315 +1002a174: e001 b.n 1002a17a +1002a176: f895 3313 ldrb.w r3, [r5, #787] ; 0x313 +1002a17a: f8d5 20f4 ldr.w r2, [r5, #244] ; 0xf4 +1002a17e: f003 0302 and.w r3, r3, #2 +1002a182: 3a01 subs r2, #1 +1002a184: b2db uxtb r3, r3 +1002a186: f8c5 20f4 str.w r2, [r5, #244] ; 0xf4 +1002a18a: b102 cbz r2, 1002a18e +1002a18c: 2201 movs r2, #1 +1002a18e: f886 2065 strb.w r2, [r6, #101] ; 0x65 +1002a192: b183 cbz r3, 1002a1b6 +1002a194: f8d5 3318 ldr.w r3, [r5, #792] ; 0x318 +1002a198: 2201 movs r2, #1 +1002a19a: 3b01 subs r3, #1 +1002a19c: f8c5 3318 str.w r3, [r5, #792] ; 0x318 +1002a1a0: b12b cbz r3, 1002a1ae +1002a1a2: 2300 movs r3, #0 +1002a1a4: f886 2065 strb.w r2, [r6, #101] ; 0x65 +1002a1a8: f886 3069 strb.w r3, [r6, #105] ; 0x69 +1002a1ac: e003 b.n 1002a1b6 +1002a1ae: f886 3065 strb.w r3, [r6, #101] ; 0x65 +1002a1b2: f886 2069 strb.w r2, [r6, #105] ; 0x69 +1002a1b6: 2301 movs r3, #1 +1002a1b8: f886 3067 strb.w r3, [r6, #103] ; 0x67 +1002a1bc: 4640 mov r0, r8 +1002a1be: a901 add r1, sp, #4 +1002a1c0: f604 1958 addw r9, r4, #2392 ; 0x958 +1002a1c4: f7ed fa1a bl 100175fc +1002a1c8: 4648 mov r0, r9 +1002a1ca: a901 add r1, sp, #4 +1002a1cc: f7ed fa0c bl 100175e8 +1002a1d0: 4620 mov r0, r4 +1002a1d2: 4631 mov r1, r6 +1002a1d4: f7ff fc87 bl 10029ae6 +1002a1d8: 2801 cmp r0, #1 +1002a1da: d003 beq.n 1002a1e4 +1002a1dc: 4648 mov r0, r9 +1002a1de: 4631 mov r1, r6 +1002a1e0: f7ff fbe6 bl 100299b0 +1002a1e4: 4648 mov r0, r9 +1002a1e6: a901 add r1, sp, #4 +1002a1e8: f7ed fa08 bl 100175fc +1002a1ec: 4640 mov r0, r8 +1002a1ee: a901 add r1, sp, #4 +1002a1f0: f7ed f9fa bl 100175e8 +1002a1f4: f8d5 30f4 ldr.w r3, [r5, #244] ; 0xf4 +1002a1f8: f8d5 60e8 ldr.w r6, [r5, #232] ; 0xe8 +1002a1fc: 2b00 cmp r3, #0 +1002a1fe: d197 bne.n 1002a130 +1002a200: f8d5 30fc ldr.w r3, [r5, #252] ; 0xfc +1002a204: 2701 movs r7, #1 +1002a206: fa07 f303 lsl.w r3, r7, r3 +1002a20a: f8b4 2cfe ldrh.w r2, [r4, #3326] ; 0xcfe +1002a20e: ea22 0303 bic.w r3, r2, r3 +1002a212: f8a4 3cfe strh.w r3, [r4, #3326] ; 0xcfe +1002a216: e78b b.n 1002a130 +1002a218: f8d5 30f8 ldr.w r3, [r5, #248] ; 0xf8 +1002a21c: f8d5 1100 ldr.w r1, [r5, #256] ; 0x100 +1002a220: 075a lsls r2, r3, #29 +1002a222: bf44 itt mi +1002a224: f083 0304 eormi.w r3, r3, #4 +1002a228: f8c5 30f8 strmi.w r3, [r5, #248] ; 0xf8 +1002a22c: 4620 mov r0, r4 +1002a22e: f008 fa9c bl 1003276a +1002a232: f8d5 30fc ldr.w r3, [r5, #252] ; 0xfc +1002a236: 2201 movs r2, #1 +1002a238: fa02 f303 lsl.w r3, r2, r3 +1002a23c: f8b4 2cfc ldrh.w r2, [r4, #3324] ; 0xcfc +1002a240: 4640 mov r0, r8 +1002a242: ea22 0303 bic.w r3, r2, r3 +1002a246: f8a4 3cfc strh.w r3, [r4, #3324] ; 0xcfc +1002a24a: a901 add r1, sp, #4 +1002a24c: f7ed f9d6 bl 100175fc +1002a250: 4620 mov r0, r4 +1002a252: f7fe f885 bl 10028360 +1002a256: 4605 mov r5, r0 +1002a258: 2800 cmp r0, #0 +1002a25a: d06b beq.n 1002a334 +1002a25c: f8b4 3cfc ldrh.w r3, [r4, #3324] ; 0xcfc +1002a260: f023 0301 bic.w r3, r3, #1 +1002a264: b29b uxth r3, r3 +1002a266: 2b00 cmp r3, #0 +1002a268: d154 bne.n 1002a314 +1002a26a: f100 08f0 add.w r8, r0, #240 ; 0xf0 +1002a26e: 4640 mov r0, r8 +1002a270: a901 add r1, sp, #4 +1002a272: f7ed f9b9 bl 100175e8 +1002a276: f8d5 60e8 ldr.w r6, [r5, #232] ; 0xe8 +1002a27a: f105 0ae8 add.w sl, r5, #232 ; 0xe8 +1002a27e: 4650 mov r0, sl +1002a280: 4631 mov r1, r6 +1002a282: f7ed f98e bl 100175a2 +1002a286: 2800 cmp r0, #0 +1002a288: d13a bne.n 1002a300 +1002a28a: 4630 mov r0, r6 +1002a28c: f7ed f8fc bl 10017488 +1002a290: f8d5 30f4 ldr.w r3, [r5, #244] ; 0xf4 +1002a294: 4640 mov r0, r8 +1002a296: 3b01 subs r3, #1 +1002a298: 2b00 cmp r3, #0 +1002a29a: f8c5 30f4 str.w r3, [r5, #244] ; 0xf4 +1002a29e: bf18 it ne +1002a2a0: 2301 movne r3, #1 +1002a2a2: f886 3065 strb.w r3, [r6, #101] ; 0x65 +1002a2a6: 2301 movs r3, #1 +1002a2a8: f886 3067 strb.w r3, [r6, #103] ; 0x67 +1002a2ac: a901 add r1, sp, #4 +1002a2ae: f604 1958 addw r9, r4, #2392 ; 0x958 +1002a2b2: f7ed f9a3 bl 100175fc +1002a2b6: 4648 mov r0, r9 +1002a2b8: a901 add r1, sp, #4 +1002a2ba: f7ed f995 bl 100175e8 +1002a2be: 4620 mov r0, r4 +1002a2c0: 4631 mov r1, r6 +1002a2c2: f7ff fc10 bl 10029ae6 +1002a2c6: 2801 cmp r0, #1 +1002a2c8: d003 beq.n 1002a2d2 +1002a2ca: 4648 mov r0, r9 +1002a2cc: 4631 mov r1, r6 +1002a2ce: f7ff fb6f bl 100299b0 +1002a2d2: 4648 mov r0, r9 +1002a2d4: a901 add r1, sp, #4 +1002a2d6: f7ed f991 bl 100175fc +1002a2da: 4640 mov r0, r8 +1002a2dc: a901 add r1, sp, #4 +1002a2de: f7ed f983 bl 100175e8 +1002a2e2: f8d5 30f4 ldr.w r3, [r5, #244] ; 0xf4 +1002a2e6: f8d5 60e8 ldr.w r6, [r5, #232] ; 0xe8 +1002a2ea: 2b00 cmp r3, #0 +1002a2ec: d1c7 bne.n 1002a27e +1002a2ee: f8b4 3cfe ldrh.w r3, [r4, #3326] ; 0xcfe +1002a2f2: f047 0702 orr.w r7, r7, #2 +1002a2f6: f023 0301 bic.w r3, r3, #1 +1002a2fa: f8a4 3cfe strh.w r3, [r4, #3326] ; 0xcfe +1002a2fe: e7be b.n 1002a27e +1002a300: f8b4 3cfc ldrh.w r3, [r4, #3324] ; 0xcfc +1002a304: 4640 mov r0, r8 +1002a306: f023 0301 bic.w r3, r3, #1 +1002a30a: f8a4 3cfc strh.w r3, [r4, #3324] ; 0xcfc +1002a30e: a901 add r1, sp, #4 +1002a310: f7ed f974 bl 100175fc +1002a314: b12f cbz r7, 1002a322 +1002a316: 2200 movs r2, #0 +1002a318: 4620 mov r0, r4 +1002a31a: 2105 movs r1, #5 +1002a31c: 4613 mov r3, r2 +1002a31e: f7f0 fe83 bl 1001b028 +1002a322: 4620 mov r0, r4 +1002a324: f7ff f9ff bl 10029726 +1002a328: b120 cbz r0, 1002a334 +1002a32a: f504 50c0 add.w r0, r4, #6144 ; 0x1800 +1002a32e: 301c adds r0, #28 +1002a330: f7ed f8c2 bl 100174b8 +1002a334: b002 add sp, #8 +1002a336: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + +1002a33a : +1002a33a: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +1002a33e: f101 07f0 add.w r7, r1, #240 ; 0xf0 +1002a342: 460c mov r4, r1 +1002a344: 4606 mov r6, r0 +1002a346: a901 add r1, sp, #4 +1002a348: 4638 mov r0, r7 +1002a34a: f7ed f94d bl 100175e8 +1002a34e: f104 09e8 add.w r9, r4, #232 ; 0xe8 +1002a352: f8d4 50e8 ldr.w r5, [r4, #232] ; 0xe8 +1002a356: 4648 mov r0, r9 +1002a358: 4629 mov r1, r5 +1002a35a: f7ed f922 bl 100175a2 +1002a35e: 2800 cmp r0, #0 +1002a360: d171 bne.n 1002a446 +1002a362: f895 3041 ldrb.w r3, [r5, #65] ; 0x41 +1002a366: 3b01 subs r3, #1 +1002a368: b2db uxtb r3, r3 +1002a36a: 2b06 cmp r3, #6 +1002a36c: d813 bhi.n 1002a396 +1002a36e: 2201 movs r2, #1 +1002a370: fa02 f303 lsl.w r3, r2, r3 +1002a374: f013 0f60 tst.w r3, #96 ; 0x60 +1002a378: d10a bne.n 1002a390 +1002a37a: f013 0f18 tst.w r3, #24 +1002a37e: d104 bne.n 1002a38a +1002a380: 079b lsls r3, r3, #30 +1002a382: d008 beq.n 1002a396 +1002a384: f894 3312 ldrb.w r3, [r4, #786] ; 0x312 +1002a388: e007 b.n 1002a39a +1002a38a: f894 3314 ldrb.w r3, [r4, #788] ; 0x314 +1002a38e: e004 b.n 1002a39a +1002a390: f894 3315 ldrb.w r3, [r4, #789] ; 0x315 +1002a394: e001 b.n 1002a39a +1002a396: f894 3313 ldrb.w r3, [r4, #787] ; 0x313 +1002a39a: f003 0302 and.w r3, r3, #2 +1002a39e: b2db uxtb r3, r3 +1002a3a0: 2b00 cmp r3, #0 +1002a3a2: d0d8 beq.n 1002a356 +1002a3a4: 4628 mov r0, r5 +1002a3a6: f7ed f86f bl 10017488 +1002a3aa: f8d4 30f4 ldr.w r3, [r4, #244] ; 0xf4 +1002a3ae: 2201 movs r2, #1 +1002a3b0: 3b01 subs r3, #1 +1002a3b2: f8c4 30f4 str.w r3, [r4, #244] ; 0xf4 +1002a3b6: f8d4 3318 ldr.w r3, [r4, #792] ; 0x318 +1002a3ba: 3b01 subs r3, #1 +1002a3bc: f8c4 3318 str.w r3, [r4, #792] ; 0x318 +1002a3c0: b12b cbz r3, 1002a3ce +1002a3c2: 2300 movs r3, #0 +1002a3c4: f885 2065 strb.w r2, [r5, #101] ; 0x65 +1002a3c8: f885 3069 strb.w r3, [r5, #105] ; 0x69 +1002a3cc: e003 b.n 1002a3d6 +1002a3ce: f885 3065 strb.w r3, [r5, #101] ; 0x65 +1002a3d2: f885 2069 strb.w r2, [r5, #105] ; 0x69 +1002a3d6: 2301 movs r3, #1 +1002a3d8: f885 3067 strb.w r3, [r5, #103] ; 0x67 +1002a3dc: 4638 mov r0, r7 +1002a3de: a901 add r1, sp, #4 +1002a3e0: f606 1858 addw r8, r6, #2392 ; 0x958 +1002a3e4: f7ed f90a bl 100175fc +1002a3e8: 4640 mov r0, r8 +1002a3ea: a901 add r1, sp, #4 +1002a3ec: f7ed f8fc bl 100175e8 +1002a3f0: 4630 mov r0, r6 +1002a3f2: 4629 mov r1, r5 +1002a3f4: f7ff fb77 bl 10029ae6 +1002a3f8: 2801 cmp r0, #1 +1002a3fa: d003 beq.n 1002a404 +1002a3fc: 4640 mov r0, r8 +1002a3fe: 4629 mov r1, r5 +1002a400: f7ff fad6 bl 100299b0 +1002a404: 4640 mov r0, r8 +1002a406: a901 add r1, sp, #4 +1002a408: f7ed f8f8 bl 100175fc +1002a40c: 4638 mov r0, r7 +1002a40e: a901 add r1, sp, #4 +1002a410: f7ed f8ea bl 100175e8 +1002a414: f8d4 3318 ldr.w r3, [r4, #792] ; 0x318 +1002a418: 2b00 cmp r3, #0 +1002a41a: d19a bne.n 1002a352 +1002a41c: f894 2316 ldrb.w r2, [r4, #790] ; 0x316 +1002a420: 2a00 cmp r2, #0 +1002a422: d196 bne.n 1002a352 +1002a424: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc +1002a428: 2101 movs r1, #1 +1002a42a: fa01 f303 lsl.w r3, r1, r3 +1002a42e: f8b6 1cfe ldrh.w r1, [r6, #3326] ; 0xcfe +1002a432: 4630 mov r0, r6 +1002a434: ea21 0303 bic.w r3, r1, r3 +1002a438: f8a6 3cfe strh.w r3, [r6, #3326] ; 0xcfe +1002a43c: 2105 movs r1, #5 +1002a43e: 4613 mov r3, r2 +1002a440: f7f0 fdf2 bl 1001b028 +1002a444: e785 b.n 1002a352 +1002a446: 4638 mov r0, r7 +1002a448: a901 add r1, sp, #4 +1002a44a: f7ed f8d7 bl 100175fc +1002a44e: b003 add sp, #12 +1002a450: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + +1002a454 : +1002a454: b510 push {r4, lr} +1002a456: 4604 mov r4, r0 +1002a458: 4812 ldr r0, [pc, #72] ; (1002a4a4 ) +1002a45a: f7ed fa3b bl 100178d4 +1002a45e: f504 50c0 add.w r0, r4, #6144 ; 0x1800 +1002a462: 301c adds r0, #28 +1002a464: f7ed f840 bl 100174e8 +1002a468: b1a0 cbz r0, 1002a494 +1002a46a: f504 53c1 add.w r3, r4, #6176 ; 0x1820 +1002a46e: 3304 adds r3, #4 +1002a470: 681b ldr r3, [r3, #0] +1002a472: b97b cbnz r3, 1002a494 +1002a474: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +1002a478: 330c adds r3, #12 +1002a47a: 681b ldr r3, [r3, #0] +1002a47c: 2b01 cmp r3, #1 +1002a47e: d009 beq.n 1002a494 +1002a480: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +1002a484: 3310 adds r3, #16 +1002a486: 681b ldr r3, [r3, #0] +1002a488: 2b01 cmp r3, #1 +1002a48a: d003 beq.n 1002a494 +1002a48c: 4620 mov r0, r4 +1002a48e: f001 fa31 bl 1002b8f4 +1002a492: e7e4 b.n 1002a45e +1002a494: f504 50c1 add.w r0, r4, #6176 ; 0x1820 +1002a498: f7ed f80e bl 100174b8 +1002a49c: e8bd 4010 ldmia.w sp!, {r4, lr} +1002a4a0: f7ed ba20 b.w 100178e4 +1002a4a4: 10041755 .word 0x10041755 + +1002a4a8 : +1002a4a8: f008 b895 b.w 100325d6 + +1002a4ac : +1002a4ac: f008 b88a b.w 100325c4 + +1002a4b0 : +1002a4b0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002a4b4: f600 1958 addw r9, r0, #2392 ; 0x958 +1002a4b8: b095 sub sp, #84 ; 0x54 +1002a4ba: 4605 mov r5, r0 +1002a4bc: 4648 mov r0, r9 +1002a4be: 468a mov sl, r1 +1002a4c0: f7ff fa4a bl 10029958 +1002a4c4: 4604 mov r4, r0 +1002a4c6: 2800 cmp r0, #0 +1002a4c8: f000 80c3 beq.w 1002a652 +1002a4cc: f8da b000 ldr.w fp, [sl] +1002a4d0: 2300 movs r3, #0 +1002a4d2: a908 add r1, sp, #32 +1002a4d4: f100 0808 add.w r8, r0, #8 +1002a4d8: 4658 mov r0, fp +1002a4da: f88d 300f strb.w r3, [sp, #15] +1002a4de: 9301 str r3, [sp, #4] +1002a4e0: f00c f9ed bl 100368be <_rtw_open_pktfile> +1002a4e4: a904 add r1, sp, #16 +1002a4e6: 220e movs r2, #14 +1002a4e8: a808 add r0, sp, #32 +1002a4ea: f00c f9f1 bl 100368d0 <_rtw_pktfile_read> +1002a4ee: f8bd 001c ldrh.w r0, [sp, #28] +1002a4f2: f7ec ff57 bl 100173a4 <_htons> +1002a4f6: f104 0745 add.w r7, r4, #69 ; 0x45 +1002a4fa: 81a0 strh r0, [r4, #12] +1002a4fc: a904 add r1, sp, #16 +1002a4fe: 4638 mov r0, r7 +1002a500: 2206 movs r2, #6 +1002a502: f104 064b add.w r6, r4, #75 ; 0x4b +1002a506: f7ec ff93 bl 10017430 +1002a50a: 4630 mov r0, r6 +1002a50c: f10d 0116 add.w r1, sp, #22 +1002a510: 2206 movs r2, #6 +1002a512: f7ec ff8d bl 10017430 +1002a516: 9b01 ldr r3, [sp, #4] +1002a518: f884 3066 strb.w r3, [r4, #102] ; 0x66 +1002a51c: 692b ldr r3, [r5, #16] +1002a51e: f013 0f60 tst.w r3, #96 ; 0x60 +1002a522: f000 8099 beq.w 1002a658 +1002a526: f104 0057 add.w r0, r4, #87 ; 0x57 +1002a52a: 4639 mov r1, r7 +1002a52c: 2206 movs r2, #6 +1002a52e: f7ec ff7f bl 10017430 +1002a532: f104 0051 add.w r0, r4, #81 ; 0x51 +1002a536: 4631 mov r1, r6 +1002a538: 2206 movs r2, #6 +1002a53a: f7ec ff79 bl 10017430 +1002a53e: 9b09 ldr r3, [sp, #36] ; 0x24 +1002a540: 6163 str r3, [r4, #20] +1002a542: 89a3 ldrh r3, [r4, #12] +1002a544: f5b3 6f00 cmp.w r3, #2048 ; 0x800 +1002a548: d11e bne.n 1002a588 +1002a54a: a808 add r0, sp, #32 +1002a54c: a90e add r1, sp, #56 ; 0x38 +1002a54e: 2218 movs r2, #24 +1002a550: f00c f9be bl 100368d0 <_rtw_pktfile_read> +1002a554: 2300 movs r3, #0 +1002a556: 72e3 strb r3, [r4, #11] +1002a558: 9b09 ldr r3, [sp, #36] ; 0x24 +1002a55a: f5b3 7f8d cmp.w r3, #282 ; 0x11a +1002a55e: d913 bls.n 1002a588 +1002a560: 89a3 ldrh r3, [r4, #12] +1002a562: f5b3 6f00 cmp.w r3, #2048 ; 0x800 +1002a566: d10f bne.n 1002a588 +1002a568: f89d 304d ldrb.w r3, [sp, #77] ; 0x4d +1002a56c: 2b44 cmp r3, #68 ; 0x44 +1002a56e: d103 bne.n 1002a578 +1002a570: f89d 304f ldrb.w r3, [sp, #79] ; 0x4f +1002a574: 2b43 cmp r3, #67 ; 0x43 +1002a576: e004 b.n 1002a582 +1002a578: 2b43 cmp r3, #67 ; 0x43 +1002a57a: d105 bne.n 1002a588 +1002a57c: f89d 304f ldrb.w r3, [sp, #79] ; 0x4f +1002a580: 2b44 cmp r3, #68 ; 0x44 +1002a582: bf04 itt eq +1002a584: 2301 moveq r3, #1 +1002a586: 72e3 strbeq r3, [r4, #11] +1002a588: 89a2 ldrh r2, [r4, #12] +1002a58a: f640 0306 movw r3, #2054 ; 0x806 +1002a58e: 429a cmp r2, r3 +1002a590: d10a bne.n 1002a5a8 +1002a592: 2100 movs r1, #0 +1002a594: 2207 movs r2, #7 +1002a596: a808 add r0, sp, #32 +1002a598: f00c f99a bl 100368d0 <_rtw_pktfile_read> +1002a59c: a808 add r0, sp, #32 +1002a59e: f10d 010f add.w r1, sp, #15 +1002a5a2: 2201 movs r2, #1 +1002a5a4: f00c f994 bl 100368d0 <_rtw_pktfile_read> +1002a5a8: 89a3 ldrh r3, [r4, #12] +1002a5aa: f640 0206 movw r2, #2054 ; 0x806 +1002a5ae: 4293 cmp r3, r2 +1002a5b0: d103 bne.n 1002a5ba +1002a5b2: f89d 300f ldrb.w r3, [sp, #15] +1002a5b6: 2b01 cmp r3, #1 +1002a5b8: e002 b.n 1002a5c0 +1002a5ba: f648 028e movw r2, #34958 ; 0x888e +1002a5be: 4293 cmp r3, r2 +1002a5c0: d002 beq.n 1002a5c8 +1002a5c2: 7ae3 ldrb r3, [r4, #11] +1002a5c4: 2b01 cmp r3, #1 +1002a5c6: d104 bne.n 1002a5d2 +1002a5c8: 4628 mov r0, r5 +1002a5ca: 2104 movs r1, #4 +1002a5cc: 2201 movs r2, #1 +1002a5ce: f7f2 fc9d bl 1001cf0c +1002a5d2: f894 3057 ldrb.w r3, [r4, #87] ; 0x57 +1002a5d6: f013 0301 ands.w r3, r3, #1 +1002a5da: d152 bne.n 1002a682 +1002a5dc: f505 6046 add.w r0, r5, #3168 ; 0xc60 +1002a5e0: f104 0157 add.w r1, r4, #87 ; 0x57 +1002a5e4: 9301 str r3, [sp, #4] +1002a5e6: f7fd fe65 bl 100282b4 +1002a5ea: 9b01 ldr r3, [sp, #4] +1002a5ec: 4606 mov r6, r0 +1002a5ee: b360 cbz r0, 1002a64a +1002a5f0: 692f ldr r7, [r5, #16] +1002a5f2: f017 0710 ands.w r7, r7, #16 +1002a5f6: d14c bne.n 1002a692 +1002a5f8: f8d6 3100 ldr.w r3, [r6, #256] ; 0x100 +1002a5fc: 220e movs r2, #14 +1002a5fe: 8222 strh r2, [r4, #16] +1002a600: 2218 movs r2, #24 +1002a602: f884 3043 strb.w r3, [r4, #67] ; 0x43 +1002a606: 8262 strh r2, [r4, #18] +1002a608: 2300 movs r3, #0 +1002a60a: 2208 movs r2, #8 +1002a60c: 6726 str r6, [r4, #112] ; 0x70 +1002a60e: f884 3042 strb.w r3, [r4, #66] ; 0x42 +1002a612: 7262 strb r2, [r4, #9] +1002a614: f884 3041 strb.w r3, [r4, #65] ; 0x41 +1002a618: 692b ldr r3, [r5, #16] +1002a61a: f013 0f70 tst.w r3, #112 ; 0x70 +1002a61e: d03e beq.n 1002a69e +1002a620: f8d6 3104 ldr.w r3, [r6, #260] ; 0x104 +1002a624: b11b cbz r3, 1002a62e +1002a626: a808 add r0, sp, #32 +1002a628: 4641 mov r1, r8 +1002a62a: f7fe fe39 bl 100292a0 +1002a62e: f8d6 3110 ldr.w r3, [r6, #272] ; 0x110 +1002a632: 2b01 cmp r3, #1 +1002a634: d146 bne.n 1002a6c4 +1002a636: 2300 movs r3, #0 +1002a638: 89a2 ldrh r2, [r4, #12] +1002a63a: 7723 strb r3, [r4, #28] +1002a63c: f648 038e movw r3, #34958 ; 0x888e +1002a640: 429a cmp r2, r3 +1002a642: d067 beq.n 1002a714 +1002a644: 692b ldr r3, [r5, #16] +1002a646: 03db lsls r3, r3, #15 +1002a648: d464 bmi.n 1002a714 +1002a64a: 4648 mov r0, r9 +1002a64c: 4621 mov r1, r4 +1002a64e: f7ff f9af bl 100299b0 +1002a652: f04f 30ff mov.w r0, #4294967295 +1002a656: e0d6 b.n 1002a806 +1002a658: 0718 lsls r0, r3, #28 +1002a65a: d40d bmi.n 1002a678 +1002a65c: 06d9 lsls r1, r3, #27 +1002a65e: f57f af6e bpl.w 1002a53e +1002a662: f104 0057 add.w r0, r4, #87 ; 0x57 +1002a666: 4639 mov r1, r7 +1002a668: 2206 movs r2, #6 +1002a66a: f7ec fee1 bl 10017430 +1002a66e: f104 0051 add.w r0, r4, #81 ; 0x51 +1002a672: f105 019c add.w r1, r5, #156 ; 0x9c +1002a676: e75f b.n 1002a538 +1002a678: f104 0057 add.w r0, r4, #87 ; 0x57 +1002a67c: f105 019c add.w r1, r5, #156 ; 0x9c +1002a680: e754 b.n 1002a52c +1002a682: 4628 mov r0, r5 +1002a684: f7fd fe6c bl 10028360 +1002a688: 4606 mov r6, r0 +1002a68a: 2800 cmp r0, #0 +1002a68c: d0dd beq.n 1002a64a +1002a68e: 2701 movs r7, #1 +1002a690: e7b2 b.n 1002a5f8 +1002a692: f8d6 20f8 ldr.w r2, [r6, #248] ; 0xf8 +1002a696: 07d2 lsls r2, r2, #31 +1002a698: d5d7 bpl.n 1002a64a +1002a69a: 461f mov r7, r3 +1002a69c: e7ac b.n 1002a5f8 +1002a69e: f8d5 344c ldr.w r3, [r5, #1100] ; 0x44c +1002a6a2: 2b00 cmp r3, #0 +1002a6a4: d0c3 beq.n 1002a62e +1002a6a6: a808 add r0, sp, #32 +1002a6a8: 4641 mov r1, r8 +1002a6aa: f7fe fdf9 bl 100292a0 +1002a6ae: f895 049d ldrb.w r0, [r5, #1181] ; 0x49d +1002a6b2: 2800 cmp r0, #0 +1002a6b4: d0bb beq.n 1002a62e +1002a6b6: f894 1041 ldrb.w r1, [r4, #65] ; 0x41 +1002a6ba: f7fe fe62 bl 10029382 +1002a6be: f884 0041 strb.w r0, [r4, #65] ; 0x41 +1002a6c2: e7b4 b.n 1002a62e +1002a6c4: f8d5 3d08 ldr.w r3, [r5, #3336] ; 0xd08 +1002a6c8: 2b04 cmp r3, #4 +1002a6ca: d80e bhi.n 1002a6ea +1002a6cc: e8df f003 tbb [pc, r3] +1002a6d0: 0a030a0a .word 0x0a030a0a +1002a6d4: 0a .byte 0x0a +1002a6d5: 00 .byte 0x00 +1002a6d6: b117 cbz r7, 1002a6de +1002a6d8: f8d5 3d64 ldr.w r3, [r5, #3428] ; 0xd64 +1002a6dc: e004 b.n 1002a6e8 +1002a6de: f8d6 3114 ldr.w r3, [r6, #276] ; 0x114 +1002a6e2: e001 b.n 1002a6e8 +1002a6e4: f8d5 3d0c ldr.w r3, [r5, #3340] ; 0xd0c +1002a6e8: 7723 strb r3, [r4, #28] +1002a6ea: f8d5 3d08 ldr.w r3, [r5, #3336] ; 0xd08 +1002a6ee: 2b03 cmp r3, #3 +1002a6f0: d80d bhi.n 1002a70e +1002a6f2: e8df f003 tbb [pc, r3] +1002a6f6: 0202 .short 0x0202 +1002a6f8: 0205 .short 0x0205 +1002a6fa: f8d5 3d10 ldr.w r3, [r5, #3344] ; 0xd10 +1002a6fe: e007 b.n 1002a710 +1002a700: b117 cbz r7, 1002a708 +1002a702: f8d5 3d68 ldr.w r3, [r5, #3432] ; 0xd68 +1002a706: e003 b.n 1002a710 +1002a708: f884 705d strb.w r7, [r4, #93] ; 0x5d +1002a70c: e002 b.n 1002a714 +1002a70e: 2300 movs r3, #0 +1002a710: f884 305d strb.w r3, [r4, #93] ; 0x5d +1002a714: 7f23 ldrb r3, [r4, #28] +1002a716: 1e5a subs r2, r3, #1 +1002a718: 2a04 cmp r2, #4 +1002a71a: d813 bhi.n 1002a744 +1002a71c: e8df f002 tbb [pc, r2] +1002a720: 0e120503 .word 0x0e120503 +1002a724: 03 .byte 0x03 +1002a725: 00 .byte 0x00 +1002a726: 2204 movs r2, #4 +1002a728: e009 b.n 1002a73e +1002a72a: 2208 movs r2, #8 +1002a72c: 7762 strb r2, [r4, #29] +1002a72e: 2204 movs r2, #4 +1002a730: 77a2 strb r2, [r4, #30] +1002a732: f241 025d movw r2, #4189 ; 0x105d +1002a736: 5caa ldrb r2, [r5, r2] +1002a738: b942 cbnz r2, 1002a74c +1002a73a: e786 b.n 1002a64a +1002a73c: 2208 movs r2, #8 +1002a73e: 7762 strb r2, [r4, #29] +1002a740: 77a2 strb r2, [r4, #30] +1002a742: e003 b.n 1002a74c +1002a744: 2200 movs r2, #0 +1002a746: 7762 strb r2, [r4, #29] +1002a748: 77a2 strb r2, [r4, #30] +1002a74a: b153 cbz r3, 1002a762 +1002a74c: f505 5283 add.w r2, r5, #4192 ; 0x1060 +1002a750: 6812 ldr r2, [r2, #0] +1002a752: 2a01 cmp r2, #1 +1002a754: d003 beq.n 1002a75e +1002a756: f241 0268 movw r2, #4200 ; 0x1068 +1002a75a: 58aa ldr r2, [r5, r2] +1002a75c: b90a cbnz r2, 1002a762 +1002a75e: 2201 movs r2, #1 +1002a760: e000 b.n 1002a764 +1002a762: 2200 movs r2, #0 +1002a764: 72a2 strb r2, [r4, #10] +1002a766: 686a ldr r2, [r5, #4] +1002a768: 2a03 cmp r2, #3 +1002a76a: d107 bne.n 1002a77c +1002a76c: b133 cbz r3, 1002a77c +1002a76e: b91f cbnz r7, 1002a778 +1002a770: f003 03fb and.w r3, r3, #251 ; 0xfb +1002a774: 2b01 cmp r3, #1 +1002a776: d101 bne.n 1002a77c +1002a778: 2301 movs r3, #1 +1002a77a: 72a3 strb r3, [r4, #10] +1002a77c: 4658 mov r0, fp +1002a77e: 4641 mov r1, r8 +1002a780: f00c f8bd bl 100368fe +1002a784: 2300 movs r3, #0 +1002a786: f884 3065 strb.w r3, [r4, #101] ; 0x65 +1002a78a: f884 3069 strb.w r3, [r4, #105] ; 0x69 +1002a78e: f884 3067 strb.w r3, [r4, #103] ; 0x67 +1002a792: f8d6 2104 ldr.w r2, [r6, #260] ; 0x104 +1002a796: f884 205e strb.w r2, [r4, #94] ; 0x5e +1002a79a: f896 2176 ldrb.w r2, [r6, #374] ; 0x176 +1002a79e: f884 2060 strb.w r2, [r4, #96] ; 0x60 +1002a7a2: f8d6 21f4 ldr.w r2, [r6, #500] ; 0x1f4 +1002a7a6: f884 205f strb.w r2, [r4, #95] ; 0x5f +1002a7aa: f896 21fc ldrb.w r2, [r6, #508] ; 0x1fc +1002a7ae: f884 2061 strb.w r2, [r4, #97] ; 0x61 +1002a7b2: f896 21fd ldrb.w r2, [r6, #509] ; 0x1fd +1002a7b6: f884 2062 strb.w r2, [r4, #98] ; 0x62 +1002a7ba: f896 21fe ldrb.w r2, [r6, #510] ; 0x1fe +1002a7be: f884 3064 strb.w r3, [r4, #100] ; 0x64 +1002a7c2: f884 2063 strb.w r2, [r4, #99] ; 0x63 +1002a7c6: f884 306c strb.w r3, [r4, #108] ; 0x6c +1002a7ca: f8da 3000 ldr.w r3, [sl] +1002a7ce: 6763 str r3, [r4, #116] ; 0x74 +1002a7d0: 692a ldr r2, [r5, #16] +1002a7d2: f894 3041 ldrb.w r3, [r4, #65] ; 0x41 +1002a7d6: 06d6 lsls r6, r2, #27 +1002a7d8: d508 bpl.n 1002a7ec +1002a7da: 89a1 ldrh r1, [r4, #12] +1002a7dc: f648 028e movw r2, #34958 ; 0x888e +1002a7e0: 4291 cmp r1, r2 +1002a7e2: d00e beq.n 1002a802 +1002a7e4: 7ae2 ldrb r2, [r4, #11] +1002a7e6: 2a01 cmp r2, #1 +1002a7e8: bf08 it eq +1002a7ea: 2307 moveq r3, #7 +1002a7ec: f884 3068 strb.w r3, [r4, #104] ; 0x68 +1002a7f0: 4628 mov r0, r5 +1002a7f2: 4621 mov r1, r4 +1002a7f4: f007 fee6 bl 100325c4 +1002a7f8: f1d0 0001 rsbs r0, r0, #1 +1002a7fc: bf38 it cc +1002a7fe: 2000 movcc r0, #0 +1002a800: e001 b.n 1002a806 +1002a802: 2307 movs r3, #7 +1002a804: e7f2 b.n 1002a7ec +1002a806: b015 add sp, #84 ; 0x54 +1002a808: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +1002a80c : +1002a80c: 6803 ldr r3, [r0, #0] +1002a80e: b113 cbz r3, 1002a816 +1002a810: 6099 str r1, [r3, #8] +1002a812: 2300 movs r3, #0 +1002a814: 6003 str r3, [r0, #0] +1002a816: 4770 bx lr + +1002a818 : +1002a818: b573 push {r0, r1, r4, r5, r6, lr} +1002a81a: f500 76de add.w r6, r0, #444 ; 0x1bc +1002a81e: f500 74da add.w r4, r0, #436 ; 0x1b4 +1002a822: a901 add r1, sp, #4 +1002a824: 4605 mov r5, r0 +1002a826: 4630 mov r0, r6 +1002a828: f7ec fe9a bl 10017560 +1002a82c: 4620 mov r0, r4 +1002a82e: f7ec feb3 bl 10017598 +1002a832: 2801 cmp r0, #1 +1002a834: d015 beq.n 1002a862 +1002a836: f8d5 41b4 ldr.w r4, [r5, #436] ; 0x1b4 +1002a83a: 4620 mov r0, r4 +1002a83c: f7ec fe24 bl 10017488 +1002a840: b184 cbz r4, 1002a864 +1002a842: f8d5 31d4 ldr.w r3, [r5, #468] ; 0x1d4 +1002a846: 3b01 subs r3, #1 +1002a848: f8c5 31d4 str.w r3, [r5, #468] ; 0x1d4 +1002a84c: 2300 movs r3, #0 +1002a84e: 6163 str r3, [r4, #20] +1002a850: 6223 str r3, [r4, #32] +1002a852: 6a63 ldr r3, [r4, #36] ; 0x24 +1002a854: b133 cbz r3, 1002a864 +1002a856: f104 0024 add.w r0, r4, #36 ; 0x24 +1002a85a: 2102 movs r1, #2 +1002a85c: f7ff ffd6 bl 1002a80c +1002a860: e000 b.n 1002a864 +1002a862: 2400 movs r4, #0 +1002a864: 4630 mov r0, r6 +1002a866: a901 add r1, sp, #4 +1002a868: f7ec fe84 bl 10017574 +1002a86c: 4620 mov r0, r4 +1002a86e: b002 add sp, #8 +1002a870: bd70 pop {r4, r5, r6, pc} + +1002a872 : +1002a872: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1002a874: 4605 mov r5, r0 +1002a876: 460c mov r4, r1 +1002a878: b379 cbz r1, 1002a8da +1002a87a: 68c8 ldr r0, [r1, #12] +1002a87c: b120 cbz r0, 1002a888 +1002a87e: 69c1 ldr r1, [r0, #28] +1002a880: f00b ffc0 bl 10036804 +1002a884: 2300 movs r3, #0 +1002a886: 60e3 str r3, [r4, #12] +1002a888: 6a63 ldr r3, [r4, #36] ; 0x24 +1002a88a: b123 cbz r3, 1002a896 +1002a88c: f104 0024 add.w r0, r4, #36 ; 0x24 +1002a890: 2103 movs r1, #3 +1002a892: f7ff ffbb bl 1002a80c +1002a896: 8b26 ldrh r6, [r4, #24] +1002a898: 2e01 cmp r6, #1 +1002a89a: d104 bne.n 1002a8a6 +1002a89c: 4628 mov r0, r5 +1002a89e: 4621 mov r1, r4 +1002a8a0: f7ff f839 bl 10029916 +1002a8a4: e01b b.n 1002a8de +1002a8a6: b9d6 cbnz r6, 1002a8de +1002a8a8: f505 76de add.w r6, r5, #444 ; 0x1bc +1002a8ac: a901 add r1, sp, #4 +1002a8ae: 4630 mov r0, r6 +1002a8b0: f7ec fe56 bl 10017560 +1002a8b4: f505 77da add.w r7, r5, #436 ; 0x1b4 +1002a8b8: 4620 mov r0, r4 +1002a8ba: f7ec fde5 bl 10017488 +1002a8be: 4620 mov r0, r4 +1002a8c0: 4639 mov r1, r7 +1002a8c2: f7ec fddb bl 1001747c +1002a8c6: f8d5 31d4 ldr.w r3, [r5, #468] ; 0x1d4 +1002a8ca: 4630 mov r0, r6 +1002a8cc: 3301 adds r3, #1 +1002a8ce: f8c5 31d4 str.w r3, [r5, #468] ; 0x1d4 +1002a8d2: a901 add r1, sp, #4 +1002a8d4: f7ec fe4e bl 10017574 +1002a8d8: e001 b.n 1002a8de +1002a8da: 4608 mov r0, r1 +1002a8dc: e000 b.n 1002a8e0 +1002a8de: 2001 movs r0, #1 +1002a8e0: b003 add sp, #12 +1002a8e2: bdf0 pop {r4, r5, r6, r7, pc} + +1002a8e4 : +1002a8e4: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1002a8e6: f500 76f0 add.w r6, r0, #480 ; 0x1e0 +1002a8ea: f500 74ec add.w r4, r0, #472 ; 0x1d8 +1002a8ee: 4605 mov r5, r0 +1002a8f0: 460f mov r7, r1 +1002a8f2: 4630 mov r0, r6 +1002a8f4: a901 add r1, sp, #4 +1002a8f6: f7ec fe33 bl 10017560 +1002a8fa: 4620 mov r0, r4 +1002a8fc: f7ec fe4c bl 10017598 +1002a900: 2801 cmp r0, #1 +1002a902: d022 beq.n 1002a94a +1002a904: f8d5 41d8 ldr.w r4, [r5, #472] ; 0x1d8 +1002a908: 4620 mov r0, r4 +1002a90a: f7ec fdbd bl 10017488 +1002a90e: b1ec cbz r4, 1002a94c +1002a910: f8d5 31ec ldr.w r3, [r5, #492] ; 0x1ec +1002a914: 3b01 subs r3, #1 +1002a916: f8c5 31ec str.w r3, [r5, #492] ; 0x1ec +1002a91a: 2300 movs r3, #0 +1002a91c: 6163 str r3, [r4, #20] +1002a91e: 6a63 ldr r3, [r4, #36] ; 0x24 +1002a920: b123 cbz r3, 1002a92c +1002a922: f104 0024 add.w r0, r4, #36 ; 0x24 +1002a926: 2102 movs r1, #2 +1002a928: f7ff ff70 bl 1002a80c +1002a92c: f240 6052 movw r0, #1618 ; 0x652 +1002a930: 2f00 cmp r7, #0 +1002a932: bf18 it ne +1002a934: 4638 movne r0, r7 +1002a936: 2100 movs r1, #0 +1002a938: f00b ff87 bl 1003684a +1002a93c: 60e0 str r0, [r4, #12] +1002a93e: b128 cbz r0, 1002a94c +1002a940: 6903 ldr r3, [r0, #16] +1002a942: 2200 movs r2, #0 +1002a944: 6222 str r2, [r4, #32] +1002a946: 6123 str r3, [r4, #16] +1002a948: e000 b.n 1002a94c +1002a94a: 2400 movs r4, #0 +1002a94c: 4630 mov r0, r6 +1002a94e: a901 add r1, sp, #4 +1002a950: f7ec fe10 bl 10017574 +1002a954: b134 cbz r4, 1002a964 +1002a956: 68e6 ldr r6, [r4, #12] +1002a958: b926 cbnz r6, 1002a964 +1002a95a: 4621 mov r1, r4 +1002a95c: 4628 mov r0, r5 +1002a95e: f7ff ff88 bl 1002a872 +1002a962: 4634 mov r4, r6 +1002a964: 4620 mov r0, r4 +1002a966: b003 add sp, #12 +1002a968: bdf0 pop {r4, r5, r6, r7, pc} + +1002a96a : +1002a96a: 2100 movs r1, #0 +1002a96c: f7ff bf4e b.w 1002a80c + +1002a970 : +1002a970: f8d0 1bfc ldr.w r1, [r0, #3068] ; 0xbfc +1002a974: f8d0 0be0 ldr.w r0, [r0, #3040] ; 0xbe0 +1002a978: 00c9 lsls r1, r1, #3 +1002a97a: f7ec bd56 b.w 1001742a + +1002a97e : +1002a97e: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1002a980: 6805 ldr r5, [r0, #0] +1002a982: f641 035c movw r3, #6236 ; 0x185c +1002a986: 58eb ldr r3, [r5, r3] +1002a988: 460f mov r7, r1 +1002a98a: 689c ldr r4, [r3, #8] +1002a98c: a901 add r1, sp, #4 +1002a98e: 3420 adds r4, #32 +1002a990: 4620 mov r0, r4 +1002a992: 4616 mov r6, r2 +1002a994: f7ec fde4 bl 10017560 +1002a998: f505 53a0 add.w r3, r5, #5120 ; 0x1400 +1002a99c: f893 2035 ldrb.w r2, [r3, #53] ; 0x35 +1002a9a0: b112 cbz r2, 1002a9a8 +1002a9a2: 6f1b ldr r3, [r3, #112] ; 0x70 +1002a9a4: 2b02 cmp r3, #2 +1002a9a6: d005 beq.n 1002a9b4 +1002a9a8: f241 63c8 movw r3, #5832 ; 0x16c8 +1002a9ac: 58eb ldr r3, [r5, r3] +1002a9ae: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 +1002a9b2: b12b cbz r3, 1002a9c0 +1002a9b4: 4620 mov r0, r4 +1002a9b6: a901 add r1, sp, #4 +1002a9b8: f7ec fddc bl 10017574 +1002a9bc: 2000 movs r0, #0 +1002a9be: e009 b.n 1002a9d4 +1002a9c0: f107 4180 add.w r1, r7, #1073741824 ; 0x40000000 +1002a9c4: f501 2100 add.w r1, r1, #524288 ; 0x80000 +1002a9c8: 600e str r6, [r1, #0] +1002a9ca: 4620 mov r0, r4 +1002a9cc: a901 add r1, sp, #4 +1002a9ce: f7ec fdd1 bl 10017574 +1002a9d2: 2004 movs r0, #4 +1002a9d4: b003 add sp, #12 +1002a9d6: bdf0 pop {r4, r5, r6, r7, pc} + +1002a9d8 : +1002a9d8: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1002a9da: 6805 ldr r5, [r0, #0] +1002a9dc: f641 035c movw r3, #6236 ; 0x185c +1002a9e0: 58eb ldr r3, [r5, r3] +1002a9e2: 460e mov r6, r1 +1002a9e4: 689c ldr r4, [r3, #8] +1002a9e6: a901 add r1, sp, #4 +1002a9e8: 3420 adds r4, #32 +1002a9ea: 4620 mov r0, r4 +1002a9ec: 4617 mov r7, r2 +1002a9ee: f7ec fdb7 bl 10017560 +1002a9f2: f505 53a0 add.w r3, r5, #5120 ; 0x1400 +1002a9f6: f893 2035 ldrb.w r2, [r3, #53] ; 0x35 +1002a9fa: b112 cbz r2, 1002aa02 +1002a9fc: 6f1b ldr r3, [r3, #112] ; 0x70 +1002a9fe: 2b02 cmp r3, #2 +1002aa00: d005 beq.n 1002aa0e +1002aa02: f241 63c8 movw r3, #5832 ; 0x16c8 +1002aa06: 58eb ldr r3, [r5, r3] +1002aa08: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 +1002aa0c: b12b cbz r3, 1002aa1a +1002aa0e: 4620 mov r0, r4 +1002aa10: a901 add r1, sp, #4 +1002aa12: f7ec fdaf bl 10017574 +1002aa16: 2000 movs r0, #0 +1002aa18: e009 b.n 1002aa2e +1002aa1a: f106 4180 add.w r1, r6, #1073741824 ; 0x40000000 +1002aa1e: f501 2100 add.w r1, r1, #524288 ; 0x80000 +1002aa22: 800f strh r7, [r1, #0] +1002aa24: 4620 mov r0, r4 +1002aa26: a901 add r1, sp, #4 +1002aa28: f7ec fda4 bl 10017574 +1002aa2c: 2002 movs r0, #2 +1002aa2e: b003 add sp, #12 +1002aa30: bdf0 pop {r4, r5, r6, r7, pc} + +1002aa32 : +1002aa32: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1002aa34: 6805 ldr r5, [r0, #0] +1002aa36: f641 035c movw r3, #6236 ; 0x185c +1002aa3a: 58eb ldr r3, [r5, r3] +1002aa3c: 460e mov r6, r1 +1002aa3e: 689c ldr r4, [r3, #8] +1002aa40: a901 add r1, sp, #4 +1002aa42: 3420 adds r4, #32 +1002aa44: 4620 mov r0, r4 +1002aa46: 4617 mov r7, r2 +1002aa48: f7ec fd8a bl 10017560 +1002aa4c: f505 53a0 add.w r3, r5, #5120 ; 0x1400 +1002aa50: f893 2035 ldrb.w r2, [r3, #53] ; 0x35 +1002aa54: b112 cbz r2, 1002aa5c +1002aa56: 6f1b ldr r3, [r3, #112] ; 0x70 +1002aa58: 2b02 cmp r3, #2 +1002aa5a: d005 beq.n 1002aa68 +1002aa5c: f241 63c8 movw r3, #5832 ; 0x16c8 +1002aa60: 58eb ldr r3, [r5, r3] +1002aa62: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 +1002aa66: b12b cbz r3, 1002aa74 +1002aa68: 4620 mov r0, r4 +1002aa6a: a901 add r1, sp, #4 +1002aa6c: f7ec fd82 bl 10017574 +1002aa70: 2000 movs r0, #0 +1002aa72: e009 b.n 1002aa88 +1002aa74: f106 4180 add.w r1, r6, #1073741824 ; 0x40000000 +1002aa78: f501 2100 add.w r1, r1, #524288 ; 0x80000 +1002aa7c: 700f strb r7, [r1, #0] +1002aa7e: 4620 mov r0, r4 +1002aa80: a901 add r1, sp, #4 +1002aa82: f7ec fd77 bl 10017574 +1002aa86: 2001 movs r0, #1 +1002aa88: b003 add sp, #12 +1002aa8a: bdf0 pop {r4, r5, r6, r7, pc} + +1002aa8c : +1002aa8c: b573 push {r0, r1, r4, r5, r6, lr} +1002aa8e: 6805 ldr r5, [r0, #0] +1002aa90: f641 035c movw r3, #6236 ; 0x185c +1002aa94: 58eb ldr r3, [r5, r3] +1002aa96: 460e mov r6, r1 +1002aa98: 689c ldr r4, [r3, #8] +1002aa9a: a901 add r1, sp, #4 +1002aa9c: 3420 adds r4, #32 +1002aa9e: 4620 mov r0, r4 +1002aaa0: f7ec fd5e bl 10017560 +1002aaa4: f505 53a0 add.w r3, r5, #5120 ; 0x1400 +1002aaa8: f893 2035 ldrb.w r2, [r3, #53] ; 0x35 +1002aaac: b112 cbz r2, 1002aab4 +1002aaae: 6f1b ldr r3, [r3, #112] ; 0x70 +1002aab0: 2b02 cmp r3, #2 +1002aab2: d005 beq.n 1002aac0 +1002aab4: f241 63c8 movw r3, #5832 ; 0x16c8 +1002aab8: 58eb ldr r3, [r5, r3] +1002aaba: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 +1002aabe: b12b cbz r3, 1002aacc +1002aac0: 4620 mov r0, r4 +1002aac2: a901 add r1, sp, #4 +1002aac4: f7ec fd56 bl 10017574 +1002aac8: 2000 movs r0, #0 +1002aaca: e009 b.n 1002aae0 +1002aacc: f106 4180 add.w r1, r6, #1073741824 ; 0x40000000 +1002aad0: f501 2100 add.w r1, r1, #524288 ; 0x80000 +1002aad4: 680d ldr r5, [r1, #0] +1002aad6: 4620 mov r0, r4 +1002aad8: a901 add r1, sp, #4 +1002aada: f7ec fd4b bl 10017574 +1002aade: 4628 mov r0, r5 +1002aae0: b002 add sp, #8 +1002aae2: bd70 pop {r4, r5, r6, pc} + +1002aae4 : +1002aae4: b573 push {r0, r1, r4, r5, r6, lr} +1002aae6: 6805 ldr r5, [r0, #0] +1002aae8: f641 035c movw r3, #6236 ; 0x185c +1002aaec: 58eb ldr r3, [r5, r3] +1002aaee: 460e mov r6, r1 +1002aaf0: 689c ldr r4, [r3, #8] +1002aaf2: a901 add r1, sp, #4 +1002aaf4: 3420 adds r4, #32 +1002aaf6: 4620 mov r0, r4 +1002aaf8: f7ec fd32 bl 10017560 +1002aafc: f505 53a0 add.w r3, r5, #5120 ; 0x1400 +1002ab00: f893 2035 ldrb.w r2, [r3, #53] ; 0x35 +1002ab04: b112 cbz r2, 1002ab0c +1002ab06: 6f1b ldr r3, [r3, #112] ; 0x70 +1002ab08: 2b02 cmp r3, #2 +1002ab0a: d005 beq.n 1002ab18 +1002ab0c: f241 63c8 movw r3, #5832 ; 0x16c8 +1002ab10: 58eb ldr r3, [r5, r3] +1002ab12: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 +1002ab16: b12b cbz r3, 1002ab24 +1002ab18: 4620 mov r0, r4 +1002ab1a: a901 add r1, sp, #4 +1002ab1c: f7ec fd2a bl 10017574 +1002ab20: 2000 movs r0, #0 +1002ab22: e00a b.n 1002ab3a +1002ab24: f106 4180 add.w r1, r6, #1073741824 ; 0x40000000 +1002ab28: f501 2100 add.w r1, r1, #524288 ; 0x80000 +1002ab2c: 880d ldrh r5, [r1, #0] +1002ab2e: 4620 mov r0, r4 +1002ab30: b2ad uxth r5, r5 +1002ab32: a901 add r1, sp, #4 +1002ab34: f7ec fd1e bl 10017574 +1002ab38: 4628 mov r0, r5 +1002ab3a: b002 add sp, #8 +1002ab3c: bd70 pop {r4, r5, r6, pc} + +1002ab3e : +1002ab3e: b573 push {r0, r1, r4, r5, r6, lr} +1002ab40: 6805 ldr r5, [r0, #0] +1002ab42: f641 035c movw r3, #6236 ; 0x185c +1002ab46: 58eb ldr r3, [r5, r3] +1002ab48: 460e mov r6, r1 +1002ab4a: 689c ldr r4, [r3, #8] +1002ab4c: a901 add r1, sp, #4 +1002ab4e: 3420 adds r4, #32 +1002ab50: 4620 mov r0, r4 +1002ab52: f7ec fd05 bl 10017560 +1002ab56: f505 53a0 add.w r3, r5, #5120 ; 0x1400 +1002ab5a: f893 2035 ldrb.w r2, [r3, #53] ; 0x35 +1002ab5e: b112 cbz r2, 1002ab66 +1002ab60: 6f1b ldr r3, [r3, #112] ; 0x70 +1002ab62: 2b02 cmp r3, #2 +1002ab64: d005 beq.n 1002ab72 +1002ab66: f241 63c8 movw r3, #5832 ; 0x16c8 +1002ab6a: 58eb ldr r3, [r5, r3] +1002ab6c: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 +1002ab70: b12b cbz r3, 1002ab7e +1002ab72: 4620 mov r0, r4 +1002ab74: a901 add r1, sp, #4 +1002ab76: f7ec fcfd bl 10017574 +1002ab7a: 2000 movs r0, #0 +1002ab7c: e00a b.n 1002ab94 +1002ab7e: f106 4180 add.w r1, r6, #1073741824 ; 0x40000000 +1002ab82: f501 2100 add.w r1, r1, #524288 ; 0x80000 +1002ab86: 780d ldrb r5, [r1, #0] +1002ab88: 4620 mov r0, r4 +1002ab8a: b2ed uxtb r5, r5 +1002ab8c: a901 add r1, sp, #4 +1002ab8e: f7ec fcf1 bl 10017574 +1002ab92: 4628 mov r0, r5 +1002ab94: b002 add sp, #8 +1002ab96: bd70 pop {r4, r5, r6, pc} + +1002ab98 : +1002ab98: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +1002ab9c: 014f lsls r7, r1, #5 +1002ab9e: f600 1558 addw r5, r0, #2392 ; 0x958 +1002aba2: 4438 add r0, r7 +1002aba4: f107 0890 add.w r8, r7, #144 ; 0x90 +1002aba8: f8d0 99ec ldr.w r9, [r0, #2540] ; 0x9ec +1002abac: 460e mov r6, r1 +1002abae: eb05 0408 add.w r4, r5, r8 +1002abb2: 69e3 ldr r3, [r4, #28] +1002abb4: b1a3 cbz r3, 1002abe0 +1002abb6: 68a2 ldr r2, [r4, #8] +1002abb8: 6820 ldr r0, [r4, #0] +1002abba: 0153 lsls r3, r2, #5 +1002abbc: 58c1 ldr r1, [r0, r3] +1002abbe: 2e04 cmp r6, #4 +1002abc0: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000 +1002abc4: 50c1 str r1, [r0, r3] +1002abc6: d006 beq.n 1002abd6 +1002abc8: 68e3 ldr r3, [r4, #12] +1002abca: 3201 adds r2, #1 +1002abcc: fbb2 f1f3 udiv r1, r2, r3 +1002abd0: fb03 2311 mls r3, r3, r1, r2 +1002abd4: 60a3 str r3, [r4, #8] +1002abd6: 4620 mov r0, r4 +1002abd8: f000 ff51 bl 1002ba7e +1002abdc: 4601 mov r1, r0 +1002abde: b908 cbnz r0, 1002abe4 +1002abe0: 2600 movs r6, #0 +1002abe2: e00a b.n 1002abfa +1002abe4: 4628 mov r0, r5 +1002abe6: f7ff fe44 bl 1002a872 +1002abea: e7e2 b.n 1002abb2 +1002abec: f859 0026 ldr.w r0, [r9, r6, lsl #2] +1002abf0: b1b8 cbz r0, 1002ac22 +1002abf2: 2168 movs r1, #104 ; 0x68 +1002abf4: f7ec fc19 bl 1001742a +1002abf8: 3601 adds r6, #1 +1002abfa: 68e1 ldr r1, [r4, #12] +1002abfc: 428e cmp r6, r1 +1002abfe: d3f5 bcc.n 1002abec +1002ac00: 6860 ldr r0, [r4, #4] +1002ac02: 0089 lsls r1, r1, #2 +1002ac04: f7ec fc11 bl 1001742a +1002ac08: 68e1 ldr r1, [r4, #12] +1002ac0a: f855 0008 ldr.w r0, [r5, r8] +1002ac0e: 0149 lsls r1, r1, #5 +1002ac10: f7ec fc0b bl 1001742a +1002ac14: f107 00a8 add.w r0, r7, #168 ; 0xa8 +1002ac18: 4428 add r0, r5 +1002ac1a: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +1002ac1e: f7ec bcd3 b.w 100175c8 +1002ac22: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + ... + +1002ac28 : +1002ac28: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002ac2c: 2202 movs r2, #2 +1002ac2e: 2304 movs r3, #4 +1002ac30: f8c0 2af8 str.w r2, [r0, #2808] ; 0xaf8 +1002ac34: f8c0 2b00 str.w r2, [r0, #2816] ; 0xb00 +1002ac38: f640 0238 movw r2, #2104 ; 0x838 +1002ac3c: 4604 mov r4, r0 +1002ac3e: f8c0 3ae8 str.w r3, [r0, #2792] ; 0xae8 +1002ac42: f8c0 3aec str.w r3, [r0, #2796] ; 0xaec +1002ac46: f8c0 3af0 str.w r3, [r0, #2800] ; 0xaf0 +1002ac4a: f8c0 3af4 str.w r3, [r0, #2804] ; 0xaf4 +1002ac4e: f8c0 3afc str.w r3, [r0, #2812] ; 0xafc +1002ac52: f8a0 2c00 strh.w r2, [r0, #3072] ; 0xc00 +1002ac56: f8c0 3bfc str.w r3, [r0, #3068] ; 0xbfc +1002ac5a: 2020 movs r0, #32 +1002ac5c: f7ec fdb8 bl 100177d0 +1002ac60: f8c4 0be0 str.w r0, [r4, #3040] ; 0xbe0 +1002ac64: b908 cbnz r0, 1002ac6a +1002ac66: 2000 movs r0, #0 +1002ac68: e078 b.n 1002ad5c +1002ac6a: 2200 movs r2, #0 +1002ac6c: f8d4 6bfc ldr.w r6, [r4, #3068] ; 0xbfc +1002ac70: 4b3c ldr r3, [pc, #240] ; (1002ad64 ) +1002ac72: f8c4 2be8 str.w r2, [r4, #3048] ; 0xbe8 +1002ac76: 42b2 cmp r2, r6 +1002ac78: f100 0008 add.w r0, r0, #8 +1002ac7c: da11 bge.n 1002aca2 +1002ac7e: eb04 0182 add.w r1, r4, r2, lsl #2 +1002ac82: f8c1 3bec str.w r3, [r1, #3052] ; 0xbec +1002ac86: f8b4 1c00 ldrh.w r1, [r4, #3072] ; 0xc00 +1002ac8a: f830 5c06 ldrh.w r5, [r0, #-6] +1002ac8e: f3c1 010d ubfx r1, r1, #0, #14 +1002ac92: ea41 4105 orr.w r1, r1, r5, lsl #16 +1002ac96: e900 000a stmdb r0, {r1, r3} +1002ac9a: 3201 adds r2, #1 +1002ac9c: f603 0338 addw r3, r3, #2104 ; 0x838 +1002aca0: e7e9 b.n 1002ac76 +1002aca2: f604 2504 addw r5, r4, #2564 ; 0xa04 +1002aca6: f04f 0800 mov.w r8, #0 +1002acaa: f604 1a58 addw sl, r4, #2392 ; 0x958 +1002acae: eb0a 0308 add.w r3, sl, r8 +1002acb2: f8d3 9190 ldr.w r9, [r3, #400] ; 0x190 +1002acb6: f1b9 0f00 cmp.w r9, #0 +1002acba: d035 beq.n 1002ad28 +1002acbc: ea4f 1049 mov.w r0, r9, lsl #5 +1002acc0: f7ec fd86 bl 100177d0 +1002acc4: 4683 mov fp, r0 +1002acc6: b3c0 cbz r0, 1002ad3a +1002acc8: ea4f 0089 mov.w r0, r9, lsl #2 +1002accc: f7ec fd80 bl 100177d0 +1002acd0: 465f mov r7, fp +1002acd2: 4602 mov r2, r0 +1002acd4: 2600 movs r6, #0 +1002acd6: 454e cmp r6, r9 +1002acd8: d013 beq.n 1002ad02 +1002acda: 2068 movs r0, #104 ; 0x68 +1002acdc: 9201 str r2, [sp, #4] +1002acde: f7ec fd77 bl 100177d0 +1002ace2: 9a01 ldr r2, [sp, #4] +1002ace4: 3720 adds r7, #32 +1002ace6: f842 0026 str.w r0, [r2, r6, lsl #2] +1002acea: b330 cbz r0, 1002ad3a +1002acec: f837 3c1e ldrh.w r3, [r7, #-30] +1002acf0: f847 0c1c str.w r0, [r7, #-28] +1002acf4: 041b lsls r3, r3, #16 +1002acf6: f043 0366 orr.w r3, r3, #102 ; 0x66 +1002acfa: f847 3c20 str.w r3, [r7, #-32] +1002acfe: 3601 adds r6, #1 +1002ad00: e7e9 b.n 1002acd6 +1002ad02: f5ca 6a14 rsb sl, sl, #2368 ; 0x940 +1002ad06: f10a 0a0c add.w sl, sl, #12 +1002ad0a: 2700 movs r7, #0 +1002ad0c: eb04 000a add.w r0, r4, sl +1002ad10: f845 bc1c str.w fp, [r5, #-28] +1002ad14: f845 2c18 str.w r2, [r5, #-24] +1002ad18: f845 7c14 str.w r7, [r5, #-20] +1002ad1c: f845 6c10 str.w r6, [r5, #-16] +1002ad20: 4428 add r0, r5 +1002ad22: f7ec fc4b bl 100175bc +1002ad26: 602f str r7, [r5, #0] +1002ad28: f108 0804 add.w r8, r8, #4 +1002ad2c: f1b8 0f20 cmp.w r8, #32 +1002ad30: f105 0520 add.w r5, r5, #32 +1002ad34: d1b9 bne.n 1002acaa +1002ad36: 2001 movs r0, #1 +1002ad38: e010 b.n 1002ad5c +1002ad3a: 4620 mov r0, r4 +1002ad3c: f7ff fe18 bl 1002a970 +1002ad40: 2500 movs r5, #0 +1002ad42: eb0a 1345 add.w r3, sl, r5, lsl #5 +1002ad46: f8d3 3090 ldr.w r3, [r3, #144] ; 0x90 +1002ad4a: b11b cbz r3, 1002ad54 +1002ad4c: 4620 mov r0, r4 +1002ad4e: 4629 mov r1, r5 +1002ad50: f7ff ff22 bl 1002ab98 +1002ad54: 3501 adds r5, #1 +1002ad56: 2d08 cmp r5, #8 +1002ad58: d1f3 bne.n 1002ad42 +1002ad5a: e784 b.n 1002ac66 +1002ad5c: b003 add sp, #12 +1002ad5e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1002ad62: bf00 nop +1002ad64: 1004bd14 .word 0x1004bd14 + +1002ad68 : +1002ad68: b538 push {r3, r4, r5, lr} +1002ad6a: 4605 mov r5, r0 +1002ad6c: f7ff fe00 bl 1002a970 +1002ad70: 2400 movs r4, #0 +1002ad72: 4621 mov r1, r4 +1002ad74: 4628 mov r0, r5 +1002ad76: 3401 adds r4, #1 +1002ad78: f7ff ff0e bl 1002ab98 +1002ad7c: 2c08 cmp r4, #8 +1002ad7e: d1f8 bne.n 1002ad72 +1002ad80: 2001 movs r0, #1 +1002ad82: bd38 pop {r3, r4, r5, pc} + +1002ad84 : +1002ad84: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +1002ad88: f8d0 2be0 ldr.w r2, [r0, #3040] ; 0xbe0 +1002ad8c: 2300 movs r3, #0 +1002ad8e: 4605 mov r5, r0 +1002ad90: 9301 str r3, [sp, #4] +1002ad92: f600 1858 addw r8, r0, #2392 ; 0x958 +1002ad96: 6887 ldr r7, [r0, #8] +1002ad98: b10a cbz r2, 1002ad9e +1002ad9a: f8c0 3be8 str.w r3, [r0, #3048] ; 0xbe8 +1002ad9e: 3720 adds r7, #32 +1002ada0: 4638 mov r0, r7 +1002ada2: a901 add r1, sp, #4 +1002ada4: f7ec fbdc bl 10017560 +1002ada8: 462c mov r4, r5 +1002adaa: 2600 movs r6, #0 +1002adac: 1b63 subs r3, r4, r5 +1002adae: 4443 add r3, r8 +1002adb0: f8d3 3090 ldr.w r3, [r3, #144] ; 0x90 +1002adb4: b32b cbz r3, 1002ae02 +1002adb6: f604 19e8 addw r9, r4, #2536 ; 0x9e8 +1002adba: f8d4 3a04 ldr.w r3, [r4, #2564] ; 0xa04 +1002adbe: b1c3 cbz r3, 1002adf2 +1002adc0: f8d4 29f0 ldr.w r2, [r4, #2544] ; 0x9f0 +1002adc4: f8d4 09e8 ldr.w r0, [r4, #2536] ; 0x9e8 +1002adc8: 0151 lsls r1, r2, #5 +1002adca: 5843 ldr r3, [r0, r1] +1002adcc: 2e04 cmp r6, #4 +1002adce: f023 4300 bic.w r3, r3, #2147483648 ; 0x80000000 +1002add2: 5043 str r3, [r0, r1] +1002add4: d008 beq.n 1002ade8 +1002add6: f8d4 39f4 ldr.w r3, [r4, #2548] ; 0x9f4 +1002adda: 3201 adds r2, #1 +1002addc: fbb2 f1f3 udiv r1, r2, r3 +1002ade0: fb03 2311 mls r3, r3, r1, r2 +1002ade4: f8c4 39f0 str.w r3, [r4, #2544] ; 0x9f0 +1002ade8: 4648 mov r0, r9 +1002adea: f000 fe48 bl 1002ba7e +1002adee: 4601 mov r1, r0 +1002adf0: b918 cbnz r0, 1002adfa +1002adf2: 2300 movs r3, #0 +1002adf4: f8c4 39f0 str.w r3, [r4, #2544] ; 0x9f0 +1002adf8: e003 b.n 1002ae02 +1002adfa: 4640 mov r0, r8 +1002adfc: f7ff fd39 bl 1002a872 +1002ae00: e7db b.n 1002adba +1002ae02: 3601 adds r6, #1 +1002ae04: 2e08 cmp r6, #8 +1002ae06: f104 0420 add.w r4, r4, #32 +1002ae0a: d1cf bne.n 1002adac +1002ae0c: 4638 mov r0, r7 +1002ae0e: a901 add r1, sp, #4 +1002ae10: f7ec fbb0 bl 10017574 +1002ae14: b003 add sp, #12 +1002ae16: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + +1002ae1a : +1002ae1a: b510 push {r4, lr} +1002ae1c: f44f 7140 mov.w r1, #768 ; 0x300 +1002ae20: 4604 mov r4, r0 +1002ae22: f00c ff48 bl 10037cb6 +1002ae26: f44f 7140 mov.w r1, #768 ; 0x300 +1002ae2a: f420 7280 bic.w r2, r0, #256 ; 0x100 +1002ae2e: 4620 mov r0, r4 +1002ae30: f00c ff56 bl 10037ce0 +1002ae34: 4620 mov r0, r4 +1002ae36: f44f 717a mov.w r1, #1000 ; 0x3e8 +1002ae3a: f06f 427f mvn.w r2, #4278190080 ; 0xff000000 +1002ae3e: f00c ff4f bl 10037ce0 +1002ae42: 4620 mov r0, r4 +1002ae44: f44f 7160 mov.w r1, #896 ; 0x380 +1002ae48: f241 0204 movw r2, #4100 ; 0x1004 +1002ae4c: f00c ff41 bl 10037cd2 +1002ae50: 4620 mov r0, r4 +1002ae52: f240 3182 movw r1, #898 ; 0x382 +1002ae56: f242 0204 movw r2, #8196 ; 0x2004 +1002ae5a: f00c ff3a bl 10037cd2 +1002ae5e: 4620 mov r0, r4 +1002ae60: f44f 7161 mov.w r1, #900 ; 0x384 +1002ae64: f241 0204 movw r2, #4100 ; 0x1004 +1002ae68: f00c ff33 bl 10037cd2 +1002ae6c: 4620 mov r0, r4 +1002ae6e: f240 3186 movw r1, #902 ; 0x386 +1002ae72: f241 0204 movw r2, #4100 ; 0x1004 +1002ae76: f00c ff2c bl 10037cd2 +1002ae7a: 4620 mov r0, r4 +1002ae7c: f44f 7162 mov.w r1, #904 ; 0x388 +1002ae80: f241 0204 movw r2, #4100 ; 0x1004 +1002ae84: f00c ff25 bl 10037cd2 +1002ae88: 4620 mov r0, r4 +1002ae8a: f240 318a movw r1, #906 ; 0x38a +1002ae8e: f241 0204 movw r2, #4100 ; 0x1004 +1002ae92: f00c ff1e bl 10037cd2 +1002ae96: 4620 mov r0, r4 +1002ae98: f44f 7163 mov.w r1, #908 ; 0x38c +1002ae9c: f241 0202 movw r2, #4098 ; 0x1002 +1002aea0: f00c ff17 bl 10037cd2 +1002aea4: 4620 mov r0, r4 +1002aea6: f240 318e movw r1, #910 ; 0x38e +1002aeaa: f241 0202 movw r2, #4098 ; 0x1002 +1002aeae: f00c ff10 bl 10037cd2 +1002aeb2: 4620 mov r0, r4 +1002aeb4: f44f 7164 mov.w r1, #912 ; 0x390 +1002aeb8: f241 0202 movw r2, #4098 ; 0x1002 +1002aebc: f00c ff09 bl 10037cd2 +1002aec0: 4620 mov r0, r4 +1002aec2: f240 3192 movw r1, #914 ; 0x392 +1002aec6: f241 0202 movw r2, #4098 ; 0x1002 +1002aeca: f00c ff02 bl 10037cd2 +1002aece: 4620 mov r0, r4 +1002aed0: f44f 7165 mov.w r1, #916 ; 0x394 +1002aed4: f241 0202 movw r2, #4098 ; 0x1002 +1002aed8: f00c fefb bl 10037cd2 +1002aedc: 4620 mov r0, r4 +1002aede: f240 3196 movw r1, #918 ; 0x396 +1002aee2: f241 0202 movw r2, #4098 ; 0x1002 +1002aee6: f00c fef4 bl 10037cd2 +1002aeea: 4620 mov r0, r4 +1002aeec: f44f 7166 mov.w r1, #920 ; 0x398 +1002aef0: f241 0202 movw r2, #4098 ; 0x1002 +1002aef4: f00c feed bl 10037cd2 +1002aef8: 4620 mov r0, r4 +1002aefa: f240 319a movw r1, #922 ; 0x39a +1002aefe: f241 0202 movw r2, #4098 ; 0x1002 +1002af02: f00c fee6 bl 10037cd2 +1002af06: f8d4 29e8 ldr.w r2, [r4, #2536] ; 0x9e8 +1002af0a: 4620 mov r0, r4 +1002af0c: f44f 7146 mov.w r1, #792 ; 0x318 +1002af10: f00c fee6 bl 10037ce0 +1002af14: f8d4 2a08 ldr.w r2, [r4, #2568] ; 0xa08 +1002af18: 4620 mov r0, r4 +1002af1a: f44f 7148 mov.w r1, #800 ; 0x320 +1002af1e: f00c fedf bl 10037ce0 +1002af22: f8d4 2a28 ldr.w r2, [r4, #2600] ; 0xa28 +1002af26: 4620 mov r0, r4 +1002af28: f44f 714a mov.w r1, #808 ; 0x328 +1002af2c: f00c fed8 bl 10037ce0 +1002af30: f8d4 2a48 ldr.w r2, [r4, #2632] ; 0xa48 +1002af34: 4620 mov r0, r4 +1002af36: f44f 714c mov.w r1, #816 ; 0x330 +1002af3a: f00c fed1 bl 10037ce0 +1002af3e: f8d4 2a68 ldr.w r2, [r4, #2664] ; 0xa68 +1002af42: 4620 mov r0, r4 +1002af44: f44f 7142 mov.w r1, #776 ; 0x308 +1002af48: f00c feca bl 10037ce0 +1002af4c: f8d4 2a88 ldr.w r2, [r4, #2696] ; 0xa88 +1002af50: 4620 mov r0, r4 +1002af52: f44f 7144 mov.w r1, #784 ; 0x310 +1002af56: f00c fec3 bl 10037ce0 +1002af5a: f8d4 2aa8 ldr.w r2, [r4, #2728] ; 0xaa8 +1002af5e: 4620 mov r0, r4 +1002af60: f44f 7150 mov.w r1, #832 ; 0x340 +1002af64: f00c febc bl 10037ce0 +1002af68: 4620 mov r0, r4 +1002af6a: f8d4 2be0 ldr.w r2, [r4, #3040] ; 0xbe0 +1002af6e: f44f 714e mov.w r1, #824 ; 0x338 +1002af72: e8bd 4010 ldmia.w sp!, {r4, lr} +1002af76: f00c beb3 b.w 10037ce0 + ... + +1002af7c : +1002af7c: 2904 cmp r1, #4 +1002af7e: b538 push {r3, r4, r5, lr} +1002af80: 460d mov r5, r1 +1002af82: 4614 mov r4, r2 +1002af84: d02f beq.n 1002afe6 +1002af86: f241 73ac movw r3, #6060 ; 0x17ac +1002af8a: 58c3 ldr r3, [r0, r3] +1002af8c: bb5b cbnz r3, 1002afe6 +1002af8e: f241 73b0 movw r3, #6064 ; 0x17b0 +1002af92: 58c3 ldr r3, [r0, r3] +1002af94: bb3b cbnz r3, 1002afe6 +1002af96: b28b uxth r3, r1 +1002af98: 2b07 cmp r3, #7 +1002af9a: bf96 itet ls +1002af9c: 4a13 ldrls r2, [pc, #76] ; (1002afec ) +1002af9e: f44f 716a movhi.w r1, #936 ; 0x3a8 +1002afa2: f832 1013 ldrhls.w r1, [r2, r3, lsl #1] +1002afa6: f00c fe86 bl 10037cb6 +1002afaa: f3c0 430a ubfx r3, r0, #16, #11 +1002afae: f3c0 000a ubfx r0, r0, #0, #11 +1002afb2: 4298 cmp r0, r3 +1002afb4: d902 bls.n 1002afbc +1002afb6: 4284 cmp r4, r0 +1002afb8: d210 bcs.n 1002afdc +1002afba: e002 b.n 1002afc2 +1002afbc: d204 bcs.n 1002afc8 +1002afbe: 4284 cmp r4, r0 +1002afc0: d304 bcc.n 1002afcc +1002afc2: 429c cmp r4, r3 +1002afc4: d30a bcc.n 1002afdc +1002afc6: e001 b.n 1002afcc +1002afc8: 429c cmp r4, r3 +1002afca: d107 bne.n 1002afdc +1002afcc: 2d03 cmp r5, #3 +1002afce: d803 bhi.n 1002afd8 +1002afd0: 4b07 ldr r3, [pc, #28] ; (1002aff0 ) +1002afd2: 781a ldrb r2, [r3, #0] +1002afd4: 3201 adds r2, #1 +1002afd6: 701a strb r2, [r3, #0] +1002afd8: 2000 movs r0, #0 +1002afda: bd38 pop {r3, r4, r5, pc} +1002afdc: 2d03 cmp r5, #3 +1002afde: d802 bhi.n 1002afe6 +1002afe0: 4b03 ldr r3, [pc, #12] ; (1002aff0 ) +1002afe2: 2200 movs r2, #0 +1002afe4: 701a strb r2, [r3, #0] +1002afe6: 2001 movs r0, #1 +1002afe8: bd38 pop {r3, r4, r5, pc} +1002afea: bf00 nop +1002afec: 10041784 .word 0x10041784 +1002aff0: 1004ddf4 .word 0x1004ddf4 + +1002aff4 : +1002aff4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1002aff8: ea4f 1841 mov.w r8, r1, lsl #5 +1002affc: f600 1558 addw r5, r0, #2392 ; 0x958 +1002b000: f108 0890 add.w r8, r8, #144 ; 0x90 +1002b004: f641 035c movw r3, #6236 ; 0x185c +1002b008: 4604 mov r4, r0 +1002b00a: 460f mov r7, r1 +1002b00c: 4445 add r5, r8 +1002b00e: 58c6 ldr r6, [r0, r3] +1002b010: f7f3 faa0 bl 1001e554 +1002b014: b340 cbz r0, 1002b068 +1002b016: f641 0369 movw r3, #6249 ; 0x1869 +1002b01a: 5ce3 ldrb r3, [r4, r3] +1002b01c: b323 cbz r3, 1002b068 +1002b01e: f606 1558 addw r5, r6, #2392 ; 0x958 +1002b022: 4445 add r5, r8 +1002b024: e020 b.n 1002b068 +1002b026: 2f04 cmp r7, #4 +1002b028: 682b ldr r3, [r5, #0] +1002b02a: 68aa ldr r2, [r5, #8] +1002b02c: d020 beq.n 1002b070 +1002b02e: 4620 mov r0, r4 +1002b030: 4639 mov r1, r7 +1002b032: f7ff ffa3 bl 1002af7c +1002b036: 2800 cmp r0, #0 +1002b038: d04c beq.n 1002b0d4 +1002b03a: 68aa ldr r2, [r5, #8] +1002b03c: 68eb ldr r3, [r5, #12] +1002b03e: 3201 adds r2, #1 +1002b040: fbb2 f1f3 udiv r1, r2, r3 +1002b044: fb03 2311 mls r3, r3, r1, r2 +1002b048: 60ab str r3, [r5, #8] +1002b04a: 4628 mov r0, r5 +1002b04c: f000 fd17 bl 1002ba7e +1002b050: 4680 mov r8, r0 +1002b052: b148 cbz r0, 1002b068 +1002b054: 3024 adds r0, #36 ; 0x24 +1002b056: f7ff fc88 bl 1002a96a +1002b05a: f8d8 0008 ldr.w r0, [r8, #8] +1002b05e: 4641 mov r1, r8 +1002b060: f600 1058 addw r0, r0, #2392 ; 0x958 +1002b064: f7ff fc05 bl 1002a872 +1002b068: 69eb ldr r3, [r5, #28] +1002b06a: 2b00 cmp r3, #0 +1002b06c: d1db bne.n 1002b026 +1002b06e: e005 b.n 1002b07c +1002b070: 0152 lsls r2, r2, #5 +1002b072: 5899 ldr r1, [r3, r2] +1002b074: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000 +1002b078: 5099 str r1, [r3, r2] +1002b07a: e7e6 b.n 1002b04a +1002b07c: 2f04 cmp r7, #4 +1002b07e: d029 beq.n 1002b0d4 +1002b080: 4620 mov r0, r4 +1002b082: 4639 mov r1, r7 +1002b084: f000 fe55 bl 1002bd32 +1002b088: b320 cbz r0, 1002b0d4 +1002b08a: 6923 ldr r3, [r4, #16] +1002b08c: 051b lsls r3, r3, #20 +1002b08e: d408 bmi.n 1002b0a2 +1002b090: 4620 mov r0, r4 +1002b092: f7fe fb48 bl 10029726 +1002b096: b120 cbz r0, 1002b0a2 +1002b098: f504 50c0 add.w r0, r4, #6144 ; 0x1800 +1002b09c: 301c adds r0, #28 +1002b09e: f7ec fa0b bl 100174b8 +1002b0a2: b1be cbz r6, 1002b0d4 +1002b0a4: 4620 mov r0, r4 +1002b0a6: f44f 6100 mov.w r1, #2048 ; 0x800 +1002b0aa: f7f3 fa6f bl 1001e58c +1002b0ae: 2801 cmp r0, #1 +1002b0b0: d010 beq.n 1002b0d4 +1002b0b2: 4630 mov r0, r6 +1002b0b4: f7fe fb37 bl 10029726 +1002b0b8: b160 cbz r0, 1002b0d4 +1002b0ba: f641 0369 movw r3, #6249 ; 0x1869 +1002b0be: 5cf3 ldrb r3, [r6, r3] +1002b0c0: 2b00 cmp r3, #0 +1002b0c2: bf08 it eq +1002b0c4: 4634 moveq r4, r6 +1002b0c6: f504 50c0 add.w r0, r4, #6144 ; 0x1800 +1002b0ca: 301c adds r0, #28 +1002b0cc: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +1002b0d0: f7ec b9f2 b.w 100174b8 +1002b0d4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1002b0d8 : +1002b0d8: f641 0168 movw r1, #6248 ; 0x1868 +1002b0dc: 5c41 ldrb r1, [r0, r1] +1002b0de: f241 62c8 movw r2, #5832 ; 0x16c8 +1002b0e2: 5883 ldr r3, [r0, r2] +1002b0e4: b921 cbnz r1, 1002b0f0 +1002b0e6: f641 015c movw r1, #6236 ; 0x185c +1002b0ea: 5841 ldr r1, [r0, r1] +1002b0ec: b101 cbz r1, 1002b0f0 +1002b0ee: 588b ldr r3, [r1, r2] +1002b0f0: 4a1c ldr r2, [pc, #112] ; (1002b164 ) +1002b0f2: f8d3 1e0c ldr.w r1, [r3, #3596] ; 0xe0c +1002b0f6: 6810 ldr r0, [r2, #0] +1002b0f8: 3ab0 subs r2, #176 ; 0xb0 +1002b0fa: 4301 orrs r1, r0 +1002b0fc: f8d3 0e18 ldr.w r0, [r3, #3608] ; 0xe18 +1002b100: 4001 ands r1, r0 +1002b102: f8c3 1e0c str.w r1, [r3, #3596] ; 0xe0c +1002b106: f8c2 10b0 str.w r1, [r2, #176] ; 0xb0 +1002b10a: f8d2 0364 ldr.w r0, [r2, #868] ; 0x364 +1002b10e: f8d3 1e10 ldr.w r1, [r3, #3600] ; 0xe10 +1002b112: 4301 orrs r1, r0 +1002b114: f8d3 0e1c ldr.w r0, [r3, #3612] ; 0xe1c +1002b118: 4001 ands r1, r0 +1002b11a: f8c3 1e10 str.w r1, [r3, #3600] ; 0xe10 +1002b11e: f8c2 1364 str.w r1, [r2, #868] ; 0x364 +1002b122: 6810 ldr r0, [r2, #0] +1002b124: f8d3 1e14 ldr.w r1, [r3, #3604] ; 0xe14 +1002b128: 4301 orrs r1, r0 +1002b12a: f8d3 0e20 ldr.w r0, [r3, #3616] ; 0xe20 +1002b12e: 4001 ands r1, r0 +1002b130: f8c3 1e14 str.w r1, [r3, #3604] ; 0xe14 +1002b134: 6011 str r1, [r2, #0] +1002b136: f8d3 1e18 ldr.w r1, [r3, #3608] ; 0xe18 +1002b13a: f8d3 2e0c ldr.w r2, [r3, #3596] ; 0xe0c +1002b13e: 4211 tst r1, r2 +1002b140: d10e bne.n 1002b160 +1002b142: f8d3 1e1c ldr.w r1, [r3, #3612] ; 0xe1c +1002b146: f8d3 2e10 ldr.w r2, [r3, #3600] ; 0xe10 +1002b14a: 4211 tst r1, r2 +1002b14c: d108 bne.n 1002b160 +1002b14e: f8d3 2e20 ldr.w r2, [r3, #3616] ; 0xe20 +1002b152: f8d3 3e14 ldr.w r3, [r3, #3604] ; 0xe14 +1002b156: 421a tst r2, r3 +1002b158: bf0c ite eq +1002b15a: 2000 moveq r0, #0 +1002b15c: 2001 movne r0, #1 +1002b15e: 4770 bx lr +1002b160: 2001 movs r0, #1 +1002b162: 4770 bx lr +1002b164: 40080134 .word 0x40080134 + +1002b168 : +1002b168: f241 63c8 movw r3, #5832 ; 0x16c8 +1002b16c: 58c3 ldr r3, [r0, r3] +1002b16e: 2230 movs r2, #48 ; 0x30 +1002b170: f8c3 2e18 str.w r2, [r3, #3608] ; 0xe18 +1002b174: f240 127d movw r2, #381 ; 0x17d +1002b178: f8c3 2e1c str.w r2, [r3, #3612] ; 0xe1c +1002b17c: 4a01 ldr r2, [pc, #4] ; (1002b184 ) +1002b17e: f8c3 2e20 str.w r2, [r3, #3616] ; 0xe20 +1002b182: 4770 bx lr +1002b184: 80000040 .word 0x80000040 + +1002b188 : +1002b188: f641 0368 movw r3, #6248 ; 0x1868 +1002b18c: 5cc3 ldrb r3, [r0, r3] +1002b18e: b92b cbnz r3, 1002b19c +1002b190: f641 035c movw r3, #6236 ; 0x185c +1002b194: 58c3 ldr r3, [r0, r3] +1002b196: 2b00 cmp r3, #0 +1002b198: bf18 it ne +1002b19a: 4618 movne r0, r3 +1002b19c: f241 63c8 movw r3, #5832 ; 0x16c8 +1002b1a0: 58c3 ldr r3, [r0, r3] +1002b1a2: f8d3 2e1c ldr.w r2, [r3, #3612] ; 0xe1c +1002b1a6: 4b01 ldr r3, [pc, #4] ; (1002b1ac ) +1002b1a8: 601a str r2, [r3, #0] +1002b1aa: 4770 bx lr +1002b1ac: 400803ec .word 0x400803ec + +1002b1b0 : +1002b1b0: f641 0368 movw r3, #6248 ; 0x1868 +1002b1b4: 5cc3 ldrb r3, [r0, r3] +1002b1b6: b92b cbnz r3, 1002b1c4 +1002b1b8: f641 035c movw r3, #6236 ; 0x185c +1002b1bc: 58c3 ldr r3, [r0, r3] +1002b1be: 2b00 cmp r3, #0 +1002b1c0: bf18 it ne +1002b1c2: 4618 movne r0, r3 +1002b1c4: f241 63c8 movw r3, #5832 ; 0x16c8 +1002b1c8: 58c3 ldr r3, [r0, r3] +1002b1ca: 4907 ldr r1, [pc, #28] ; (1002b1e8 ) +1002b1cc: f8d3 2e1c ldr.w r2, [r3, #3612] ; 0xe1c +1002b1d0: f5a1 712f sub.w r1, r1, #700 ; 0x2bc +1002b1d4: f8c1 22bc str.w r2, [r1, #700] ; 0x2bc +1002b1d8: f8d3 2e18 ldr.w r2, [r3, #3608] ; 0xe18 +1002b1dc: 600a str r2, [r1, #0] +1002b1de: f8d3 2e20 ldr.w r2, [r3, #3616] ; 0xe20 +1002b1e2: 4b02 ldr r3, [pc, #8] ; (1002b1ec ) +1002b1e4: 601a str r2, [r3, #0] +1002b1e6: 4770 bx lr +1002b1e8: 400803ec .word 0x400803ec +1002b1ec: 40080080 .word 0x40080080 + +1002b1f0 : +1002b1f0: 4b01 ldr r3, [pc, #4] ; (1002b1f8 ) +1002b1f2: 2200 movs r2, #0 +1002b1f4: 601a str r2, [r3, #0] +1002b1f6: 4770 bx lr +1002b1f8: 400803ec .word 0x400803ec + +1002b1fc : +1002b1fc: 4a04 ldr r2, [pc, #16] ; (1002b210 ) +1002b1fe: 2300 movs r3, #0 +1002b200: 6013 str r3, [r2, #0] +1002b202: f5a2 722f sub.w r2, r2, #700 ; 0x2bc +1002b206: 6013 str r3, [r2, #0] +1002b208: f842 3cb0 str.w r3, [r2, #-176] +1002b20c: 4770 bx lr +1002b20e: bf00 nop +1002b210: 400803ec .word 0x400803ec + +1002b214 : +1002b214: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1002b218: 4690 mov r8, r2 +1002b21a: f641 0268 movw r2, #6248 ; 0x1868 +1002b21e: 5c82 ldrb r2, [r0, r2] +1002b220: f241 63c8 movw r3, #5832 ; 0x16c8 +1002b224: 4604 mov r4, r0 +1002b226: 460f mov r7, r1 +1002b228: 58c5 ldr r5, [r0, r3] +1002b22a: b92a cbnz r2, 1002b238 +1002b22c: f641 025c movw r2, #6236 ; 0x185c +1002b230: 5880 ldr r0, [r0, r2] +1002b232: b108 cbz r0, 1002b238 +1002b234: 58c5 ldr r5, [r0, r3] +1002b236: 4604 mov r4, r0 +1002b238: 4620 mov r0, r4 +1002b23a: f7ff ffdf bl 1002b1fc +1002b23e: 462b mov r3, r5 +1002b240: 2000 movs r0, #0 +1002b242: 583d ldr r5, [r7, r0] +1002b244: b125 cbz r5, 1002b250 +1002b246: f8d3 6e18 ldr.w r6, [r3, #3608] ; 0xe18 +1002b24a: 4335 orrs r5, r6 +1002b24c: f8c3 5e18 str.w r5, [r3, #3608] ; 0xe18 +1002b250: f858 5000 ldr.w r5, [r8, r0] +1002b254: b12d cbz r5, 1002b262 +1002b256: f8d3 6e18 ldr.w r6, [r3, #3608] ; 0xe18 +1002b25a: ea26 0505 bic.w r5, r6, r5 +1002b25e: f8c3 5e18 str.w r5, [r3, #3608] ; 0xe18 +1002b262: 3004 adds r0, #4 +1002b264: 280c cmp r0, #12 +1002b266: f103 0304 add.w r3, r3, #4 +1002b26a: d1ea bne.n 1002b242 +1002b26c: 4620 mov r0, r4 +1002b26e: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +1002b272: f7ff bf9d b.w 1002b1b0 + +1002b276 : +1002b276: f241 63c8 movw r3, #5832 ; 0x16c8 +1002b27a: b510 push {r4, lr} +1002b27c: 58c2 ldr r2, [r0, r3] +1002b27e: b909 cbnz r1, 1002b284 +1002b280: 2000 movs r0, #0 +1002b282: bd10 pop {r4, pc} +1002b284: 8848 ldrh r0, [r1, #2] +1002b286: f242 7311 movw r3, #10001 ; 0x2711 +1002b28a: f3c0 000c ubfx r0, r0, #0, #13 +1002b28e: 1c44 adds r4, r0, #1 +1002b290: f3c4 040c ubfx r4, r4, #0, #13 +1002b294: f8b2 1e24 ldrh.w r1, [r2, #3620] ; 0xe24 +1002b298: 4281 cmp r1, r0 +1002b29a: bf06 itte eq +1002b29c: f8a2 4e24 strheq.w r4, [r2, #3620] ; 0xe24 +1002b2a0: 2101 moveq r1, #1 +1002b2a2: 2100 movne r1, #0 +1002b2a4: 3b01 subs r3, #1 +1002b2a6: d0eb beq.n 1002b280 +1002b2a8: 2900 cmp r1, #0 +1002b2aa: d0f3 beq.n 1002b294 +1002b2ac: 2001 movs r0, #1 +1002b2ae: bd10 pop {r4, pc} + +1002b2b0 : +1002b2b0: b510 push {r4, lr} +1002b2b2: f44f 716d mov.w r1, #948 ; 0x3b4 +1002b2b6: 4604 mov r4, r0 +1002b2b8: f00c fcfd bl 10037cb6 +1002b2bc: f3c0 420a ubfx r2, r0, #16, #11 +1002b2c0: f3c0 030a ubfx r3, r0, #0, #11 +1002b2c4: 4293 cmp r3, r2 +1002b2c6: d008 beq.n 1002b2da +1002b2c8: ebc3 0302 rsb r3, r3, r2 +1002b2cc: bf31 iteee cc +1002b2ce: b298 uxthcc r0, r3 +1002b2d0: f8d4 0bfc ldrcs.w r0, [r4, #3068] ; 0xbfc +1002b2d4: 18c0 addcs r0, r0, r3 +1002b2d6: b280 uxthcs r0, r0 +1002b2d8: bd10 pop {r4, pc} +1002b2da: 2000 movs r0, #0 +1002b2dc: bd10 pop {r4, pc} + ... + +1002b2e0 : +1002b2e0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002b2e4: f241 63c8 movw r3, #5832 ; 0x16c8 +1002b2e8: 2400 movs r4, #0 +1002b2ea: 6882 ldr r2, [r0, #8] +1002b2ec: b08b sub sp, #44 ; 0x2c +1002b2ee: 58c7 ldr r7, [r0, r3] +1002b2f0: 4621 mov r1, r4 +1002b2f2: f641 035c movw r3, #6236 ; 0x185c +1002b2f6: 4605 mov r5, r0 +1002b2f8: 9408 str r4, [sp, #32] +1002b2fa: 9207 str r2, [sp, #28] +1002b2fc: f600 3654 addw r6, r0, #2900 ; 0xb54 +1002b300: f850 8003 ldr.w r8, [r0, r3] +1002b304: f7ff ffd4 bl 1002b2b0 +1002b308: 9404 str r4, [sp, #16] +1002b30a: 9005 str r0, [sp, #20] +1002b30c: 9b05 ldr r3, [sp, #20] +1002b30e: b193 cbz r3, 1002b336 +1002b310: f8d5 3be0 ldr.w r3, [r5, #3040] ; 0xbe0 +1002b314: f8d5 9be8 ldr.w r9, [r5, #3048] ; 0xbe8 +1002b318: 9306 str r3, [sp, #24] +1002b31a: 9a06 ldr r2, [sp, #24] +1002b31c: eb05 0389 add.w r3, r5, r9, lsl #2 +1002b320: f8d3 3bec ldr.w r3, [r3, #3052] ; 0xbec +1002b324: eb02 01c9 add.w r1, r2, r9, lsl #3 +1002b328: 4628 mov r0, r5 +1002b32a: 2200 movs r2, #0 +1002b32c: 9303 str r3, [sp, #12] +1002b32e: f7ff ffa2 bl 1002b276 +1002b332: 2801 cmp r0, #1 +1002b334: d027 beq.n 1002b386 +1002b336: 9b07 ldr r3, [sp, #28] +1002b338: a908 add r1, sp, #32 +1002b33a: f103 0420 add.w r4, r3, #32 +1002b33e: 4620 mov r0, r4 +1002b340: f7ec f90e bl 10017560 +1002b344: 2100 movs r1, #0 +1002b346: 4628 mov r0, r5 +1002b348: f005 fc12 bl 10030b70 +1002b34c: f8d7 3e1c ldr.w r3, [r7, #3612] ; 0xe1c +1002b350: f8d7 2e18 ldr.w r2, [r7, #3608] ; 0xe18 +1002b354: f043 0301 orr.w r3, r3, #1 +1002b358: f042 0210 orr.w r2, r2, #16 +1002b35c: f8c7 3e1c str.w r3, [r7, #3612] ; 0xe1c +1002b360: f8c7 2e18 str.w r2, [r7, #3608] ; 0xe18 +1002b364: f44f 7198 mov.w r1, #304 ; 0x130 +1002b368: 4628 mov r0, r5 +1002b36a: f00c fcb9 bl 10037ce0 +1002b36e: f44f 717b mov.w r1, #1004 ; 0x3ec +1002b372: 4628 mov r0, r5 +1002b374: f8d7 2e1c ldr.w r2, [r7, #3612] ; 0xe1c +1002b378: f00c fcb2 bl 10037ce0 +1002b37c: 692b ldr r3, [r5, #16] +1002b37e: 07d9 lsls r1, r3, #31 +1002b380: f100 8103 bmi.w 1002b58a +1002b384: e105 b.n 1002b592 +1002b386: 2100 movs r1, #0 +1002b388: 4628 mov r0, r5 +1002b38a: f005 fbf1 bl 10030b70 +1002b38e: 4630 mov r0, r6 +1002b390: f7fb fabd bl 1002690e +1002b394: 4604 mov r4, r0 +1002b396: 2800 cmp r0, #0 +1002b398: f000 80c4 beq.w 1002b524 +1002b39c: f7ec f860 bl 10017460 +1002b3a0: 2300 movs r3, #0 +1002b3a2: 6723 str r3, [r4, #112] ; 0x70 +1002b3a4: 9903 ldr r1, [sp, #12] +1002b3a6: 4620 mov r0, r4 +1002b3a8: f006 f817 bl 100313da +1002b3ac: 8ba3 ldrh r3, [r4, #28] +1002b3ae: f240 6229 movw r2, #1577 ; 0x629 +1002b3b2: 1e59 subs r1, r3, #1 +1002b3b4: b289 uxth r1, r1 +1002b3b6: 4291 cmp r1, r2 +1002b3b8: d911 bls.n 1002b3de +1002b3ba: 4aa4 ldr r2, [pc, #656] ; (1002b64c ) +1002b3bc: 6812 ldr r2, [r2, #0] +1002b3be: 2a00 cmp r2, #0 +1002b3c0: f000 80ac beq.w 1002b51c +1002b3c4: f240 602a movw r0, #1578 ; 0x62a +1002b3c8: f894 1032 ldrb.w r1, [r4, #50] ; 0x32 +1002b3cc: f894 2033 ldrb.w r2, [r4, #51] ; 0x33 +1002b3d0: 9000 str r0, [sp, #0] +1002b3d2: 489f ldr r0, [pc, #636] ; (1002b650 ) +1002b3d4: f8d0 0114 ldr.w r0, [r0, #276] ; 0x114 +1002b3d8: f7ef fbd2 bl 1001ab80 +1002b3dc: e09e b.n 1002b51c +1002b3de: f894 3032 ldrb.w r3, [r4, #50] ; 0x32 +1002b3e2: 2b00 cmp r3, #0 +1002b3e4: f040 809a bne.w 1002b51c +1002b3e8: f894 3033 ldrb.w r3, [r4, #51] ; 0x33 +1002b3ec: b1d3 cbz r3, 1002b424 +1002b3ee: f105 0b0c add.w fp, r5, #12 +1002b3f2: a909 add r1, sp, #36 ; 0x24 +1002b3f4: 4658 mov r0, fp +1002b3f6: f7ec f8f7 bl 100175e8 +1002b3fa: f8d5 1d0c ldr.w r1, [r5, #3340] ; 0xd0c +1002b3fe: f021 0a04 bic.w sl, r1, #4 +1002b402: f1ba 0f01 cmp.w sl, #1 +1002b406: d109 bne.n 1002b41c +1002b408: 4628 mov r0, r5 +1002b40a: f7f1 fb5b bl 1001cac4 +1002b40e: 4628 mov r0, r5 +1002b410: f7f2 fb1f bl 1001da52 +1002b414: 4628 mov r0, r5 +1002b416: 4651 mov r1, sl +1002b418: f7f2 faae bl 1001d978 +1002b41c: 4658 mov r0, fp +1002b41e: a909 add r1, sp, #36 ; 0x24 +1002b420: f7ec f8ec bl 100175fc +1002b424: 7fa3 ldrb r3, [r4, #30] +1002b426: b113 cbz r3, 1002b42e +1002b428: 9b03 ldr r3, [sp, #12] +1002b42a: 3318 adds r3, #24 +1002b42c: 9304 str r3, [sp, #16] +1002b42e: f894 2024 ldrb.w r2, [r4, #36] ; 0x24 +1002b432: 8d61 ldrh r1, [r4, #42] ; 0x2a +1002b434: 2a00 cmp r2, #0 +1002b436: bf0c ite eq +1002b438: 2200 moveq r2, #0 +1002b43a: 2206 movne r2, #6 +1002b43c: f5b1 7f80 cmp.w r1, #256 ; 0x100 +1002b440: f8b4 a01c ldrh.w sl, [r4, #28] +1002b444: d103 bne.n 1002b44e +1002b446: f240 6172 movw r1, #1650 ; 0x672 +1002b44a: 458a cmp sl, r1 +1002b44c: d902 bls.n 1002b454 +1002b44e: f10a 000e add.w r0, sl, #14 +1002b452: e001 b.n 1002b458 +1002b454: f44f 60d0 mov.w r0, #1664 ; 0x680 +1002b458: 2100 movs r1, #0 +1002b45a: 9202 str r2, [sp, #8] +1002b45c: f00b f9f5 bl 1003684a +1002b460: 9a02 ldr r2, [sp, #8] +1002b462: 4683 mov fp, r0 +1002b464: 2800 cmp r0, #0 +1002b466: d059 beq.n 1002b51c +1002b468: f505 51c1 add.w r1, r5, #6176 ; 0x1820 +1002b46c: 3114 adds r1, #20 +1002b46e: 6809 ldr r1, [r1, #0] +1002b470: f8c0 a020 str.w sl, [r0, #32] +1002b474: 61c1 str r1, [r0, #28] +1002b476: 4611 mov r1, r2 +1002b478: 60a0 str r0, [r4, #8] +1002b47a: f00b f9df bl 1003683c +1002b47e: f894 2020 ldrb.w r2, [r4, #32] +1002b482: 7fe1 ldrb r1, [r4, #31] +1002b484: 9b03 ldr r3, [sp, #12] +1002b486: 4411 add r1, r2 +1002b488: 3118 adds r1, #24 +1002b48a: f8db 0010 ldr.w r0, [fp, #16] +1002b48e: 4419 add r1, r3 +1002b490: 4652 mov r2, sl +1002b492: f7eb ffcd bl 10017430 +1002b496: f8db 200c ldr.w r2, [fp, #12] +1002b49a: 4658 mov r0, fp +1002b49c: 6762 str r2, [r4, #116] ; 0x74 +1002b49e: f8db 2010 ldr.w r2, [fp, #16] +1002b4a2: 67e2 str r2, [r4, #124] ; 0x7c +1002b4a4: 67a2 str r2, [r4, #120] ; 0x78 +1002b4a6: f00b f9de bl 10036866 +1002b4aa: 6fe2 ldr r2, [r4, #124] ; 0x7c +1002b4ac: f8c4 0080 str.w r0, [r4, #128] ; 0x80 +1002b4b0: 4452 add r2, sl +1002b4b2: 4282 cmp r2, r0 +1002b4b4: 67e2 str r2, [r4, #124] ; 0x7c +1002b4b6: d903 bls.n 1002b4c0 +1002b4b8: ebca 0302 rsb r3, sl, r2 +1002b4bc: 67e3 str r3, [r4, #124] ; 0x7c +1002b4be: e003 b.n 1002b4c8 +1002b4c0: 6f22 ldr r2, [r4, #112] ; 0x70 +1002b4c2: eb02 030a add.w r3, r2, sl +1002b4c6: 6723 str r3, [r4, #112] ; 0x70 +1002b4c8: 4628 mov r0, r5 +1002b4ca: f7f3 f843 bl 1001e554 +1002b4ce: b1c0 cbz r0, 1002b502 +1002b4d0: f894 a05c ldrb.w sl, [r4, #92] ; 0x5c +1002b4d4: f1ba 0f00 cmp.w sl, #0 +1002b4d8: d113 bne.n 1002b502 +1002b4da: 6fa3 ldr r3, [r4, #120] ; 0x78 +1002b4dc: 1d18 adds r0, r3, #4 +1002b4de: 791b ldrb r3, [r3, #4] +1002b4e0: 07da lsls r2, r3, #31 +1002b4e2: d45d bmi.n 1002b5a0 +1002b4e4: f508 51a4 add.w r1, r8, #5248 ; 0x1480 +1002b4e8: 3119 adds r1, #25 +1002b4ea: 2206 movs r2, #6 +1002b4ec: f7eb ffa8 bl 10017440 +1002b4f0: b138 cbz r0, 1002b502 +1002b4f2: f508 53c1 add.w r3, r8, #6176 ; 0x1820 +1002b4f6: 3314 adds r3, #20 +1002b4f8: 681b ldr r3, [r3, #0] +1002b4fa: f8cb 301c str.w r3, [fp, #28] +1002b4fe: f8c4 8010 str.w r8, [r4, #16] +1002b502: f894 305c ldrb.w r3, [r4, #92] ; 0x5c +1002b506: b94b cbnz r3, 1002b51c +1002b508: 7fa3 ldrb r3, [r4, #30] +1002b50a: b11b cbz r3, 1002b514 +1002b50c: 4620 mov r0, r4 +1002b50e: 9904 ldr r1, [sp, #16] +1002b510: f005 ffbb bl 1003148a +1002b514: 4620 mov r0, r4 +1002b516: f7fc faa2 bl 10027a5e +1002b51a: e003 b.n 1002b524 +1002b51c: 4620 mov r0, r4 +1002b51e: 4631 mov r1, r6 +1002b520: f7fb fa08 bl 10026934 +1002b524: 9a06 ldr r2, [sp, #24] +1002b526: f852 3039 ldr.w r3, [r2, r9, lsl #3] +1002b52a: f8b5 2c00 ldrh.w r2, [r5, #3072] ; 0xc00 +1002b52e: f423 537f bic.w r3, r3, #16320 ; 0x3fc0 +1002b532: f3c2 020d ubfx r2, r2, #0, #14 +1002b536: f023 033f bic.w r3, r3, #63 ; 0x3f +1002b53a: 4313 orrs r3, r2 +1002b53c: 9a06 ldr r2, [sp, #24] +1002b53e: f842 3039 str.w r3, [r2, r9, lsl #3] +1002b542: f8d5 2be8 ldr.w r2, [r5, #3048] ; 0xbe8 +1002b546: f8d5 3bfc ldr.w r3, [r5, #3068] ; 0xbfc +1002b54a: 3201 adds r2, #1 +1002b54c: fbb2 f1f3 udiv r1, r2, r3 +1002b550: fb03 2311 mls r3, r3, r1, r2 +1002b554: f8c5 3be8 str.w r3, [r5, #3048] ; 0xbe8 +1002b558: 4628 mov r0, r5 +1002b55a: f44f 716d mov.w r1, #948 ; 0x3b4 +1002b55e: f8b5 2be8 ldrh.w r2, [r5, #3048] ; 0xbe8 +1002b562: f00c fbb6 bl 10037cd2 +1002b566: b918 cbnz r0, 1002b570 +1002b568: 2001 movs r0, #1 +1002b56a: f7ec f883 bl 10017674 +1002b56e: e7f3 b.n 1002b558 +1002b570: 9a05 ldr r2, [sp, #20] +1002b572: 1e53 subs r3, r2, #1 +1002b574: b29b uxth r3, r3 +1002b576: 9305 str r3, [sp, #20] +1002b578: 692b ldr r3, [r5, #16] +1002b57a: 07db lsls r3, r3, #31 +1002b57c: f57f aec6 bpl.w 1002b30c +1002b580: 4628 mov r0, r5 +1002b582: 2101 movs r1, #1 +1002b584: f005 faf4 bl 10030b70 +1002b588: e6c0 b.n 1002b30c +1002b58a: 4628 mov r0, r5 +1002b58c: 2101 movs r1, #1 +1002b58e: f005 faef bl 10030b70 +1002b592: 4620 mov r0, r4 +1002b594: a908 add r1, sp, #32 +1002b596: f7eb ffed bl 10017574 +1002b59a: b00b add sp, #44 ; 0x2c +1002b59c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1002b5a0: 4630 mov r0, r6 +1002b5a2: f7fb f9b4 bl 1002690e +1002b5a6: 4683 mov fp, r0 +1002b5a8: 2800 cmp r0, #0 +1002b5aa: d0bb beq.n 1002b524 +1002b5ac: 68a0 ldr r0, [r4, #8] +1002b5ae: 2101 movs r1, #1 +1002b5b0: 4652 mov r2, sl +1002b5b2: f00b f96a bl 1003688a +1002b5b6: 4603 mov r3, r0 +1002b5b8: b908 cbnz r0, 1002b5be +1002b5ba: 4658 mov r0, fp +1002b5bc: e7af b.n 1002b51e +1002b5be: f8cb 8010 str.w r8, [fp, #16] +1002b5c2: 4658 mov r0, fp +1002b5c4: 9302 str r3, [sp, #8] +1002b5c6: f7eb ff4b bl 10017460 +1002b5ca: f10b 001c add.w r0, fp, #28 +1002b5ce: f104 011c add.w r1, r4, #28 +1002b5d2: 2254 movs r2, #84 ; 0x54 +1002b5d4: f8cb a084 str.w sl, [fp, #132] ; 0x84 +1002b5d8: f8cb a070 str.w sl, [fp, #112] ; 0x70 +1002b5dc: f7eb ff28 bl 10017430 +1002b5e0: f508 52c1 add.w r2, r8, #6176 ; 0x1820 +1002b5e4: 3214 adds r2, #20 +1002b5e6: 9b02 ldr r3, [sp, #8] +1002b5e8: 6812 ldr r2, [r2, #0] +1002b5ea: 4618 mov r0, r3 +1002b5ec: 61da str r2, [r3, #28] +1002b5ee: f8cb 3008 str.w r3, [fp, #8] +1002b5f2: 68da ldr r2, [r3, #12] +1002b5f4: f8cb 2074 str.w r2, [fp, #116] ; 0x74 +1002b5f8: 691a ldr r2, [r3, #16] +1002b5fa: f8cb 207c str.w r2, [fp, #124] ; 0x7c +1002b5fe: f8cb 2078 str.w r2, [fp, #120] ; 0x78 +1002b602: 9302 str r3, [sp, #8] +1002b604: f00b f92f bl 10036866 +1002b608: f8cb 0080 str.w r0, [fp, #128] ; 0x80 +1002b60c: 9b02 ldr r3, [sp, #8] +1002b60e: f8db 207c ldr.w r2, [fp, #124] ; 0x7c +1002b612: 6a1b ldr r3, [r3, #32] +1002b614: 441a add r2, r3 +1002b616: 4282 cmp r2, r0 +1002b618: f8cb 207c str.w r2, [fp, #124] ; 0x7c +1002b61c: d903 bls.n 1002b626 +1002b61e: 1ad3 subs r3, r2, r3 +1002b620: f8cb 307c str.w r3, [fp, #124] ; 0x7c +1002b624: e004 b.n 1002b630 +1002b626: f8db 2070 ldr.w r2, [fp, #112] ; 0x70 +1002b62a: 4413 add r3, r2 +1002b62c: f8cb 3070 str.w r3, [fp, #112] ; 0x70 +1002b630: f89b 301e ldrb.w r3, [fp, #30] +1002b634: b133 cbz r3, 1002b644 +1002b636: f89b 305c ldrb.w r3, [fp, #92] ; 0x5c +1002b63a: b91b cbnz r3, 1002b644 +1002b63c: 4658 mov r0, fp +1002b63e: 9904 ldr r1, [sp, #16] +1002b640: f005 ff23 bl 1003148a +1002b644: 4658 mov r0, fp +1002b646: f7fc fa0a bl 10027a5e +1002b64a: e75a b.n 1002b502 +1002b64c: 10044f38 .word 0x10044f38 +1002b650: 10043ac4 .word 0x10043ac4 + +1002b654 : +1002b654: b537 push {r0, r1, r2, r4, r5, lr} +1002b656: 4b09 ldr r3, [pc, #36] ; (1002b67c ) +1002b658: 4605 mov r5, r0 +1002b65a: 6818 ldr r0, [r3, #0] +1002b65c: 889b ldrh r3, [r3, #4] +1002b65e: 9000 str r0, [sp, #0] +1002b660: f8ad 3004 strh.w r3, [sp, #4] +1002b664: 2400 movs r4, #0 +1002b666: f81d 1004 ldrb.w r1, [sp, r4] +1002b66a: 4628 mov r0, r5 +1002b66c: 3401 adds r4, #1 +1002b66e: f7ff fcc1 bl 1002aff4 +1002b672: 2c06 cmp r4, #6 +1002b674: d1f7 bne.n 1002b666 +1002b676: b003 add sp, #12 +1002b678: bd30 pop {r4, r5, pc} +1002b67a: bf00 nop +1002b67c: 1004177e .word 0x1004177e + +1002b680 : +1002b680: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1002b682: 2300 movs r3, #0 +1002b684: 9301 str r3, [sp, #4] +1002b686: f241 63c8 movw r3, #5832 ; 0x16c8 +1002b68a: 58c6 ldr r6, [r0, r3] +1002b68c: f641 035c movw r3, #6236 ; 0x185c +1002b690: 58c7 ldr r7, [r0, r3] +1002b692: 4604 mov r4, r0 +1002b694: 6885 ldr r5, [r0, #8] +1002b696: b12f cbz r7, 1002b6a4 +1002b698: 693b ldr r3, [r7, #16] +1002b69a: f013 0f10 tst.w r3, #16 +1002b69e: bf08 it eq +1002b6a0: 4607 moveq r7, r0 +1002b6a2: e000 b.n 1002b6a6 +1002b6a4: 4607 mov r7, r0 +1002b6a6: 3520 adds r5, #32 +1002b6a8: 4628 mov r0, r5 +1002b6aa: a901 add r1, sp, #4 +1002b6ac: f7eb ff58 bl 10017560 +1002b6b0: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c +1002b6b4: f013 7fc0 tst.w r3, #25165824 ; 0x1800000 +1002b6b8: d02e beq.n 1002b718 +1002b6ba: 6923 ldr r3, [r4, #16] +1002b6bc: 06d8 lsls r0, r3, #27 +1002b6be: d510 bpl.n 1002b6e2 +1002b6c0: f894 3508 ldrb.w r3, [r4, #1288] ; 0x508 +1002b6c4: 2b01 cmp r3, #1 +1002b6c6: d10c bne.n 1002b6e2 +1002b6c8: f897 3b08 ldrb.w r3, [r7, #2824] ; 0xb08 +1002b6cc: b133 cbz r3, 1002b6dc +1002b6ce: 2300 movs r3, #0 +1002b6d0: f887 3b08 strb.w r3, [r7, #2824] ; 0xb08 +1002b6d4: 4638 mov r0, r7 +1002b6d6: 2104 movs r1, #4 +1002b6d8: f7ff fc8c bl 1002aff4 +1002b6dc: 4620 mov r0, r4 +1002b6de: f7f7 f997 bl 10022a10 +1002b6e2: 4620 mov r0, r4 +1002b6e4: 2110 movs r1, #16 +1002b6e6: f7f2 ff51 bl 1001e58c +1002b6ea: b1a8 cbz r0, 1002b718 +1002b6ec: f641 035c movw r3, #6236 ; 0x185c +1002b6f0: 58e3 ldr r3, [r4, r3] +1002b6f2: f893 3508 ldrb.w r3, [r3, #1288] ; 0x508 +1002b6f6: 2b01 cmp r3, #1 +1002b6f8: d10e bne.n 1002b718 +1002b6fa: f897 3b08 ldrb.w r3, [r7, #2824] ; 0xb08 +1002b6fe: b133 cbz r3, 1002b70e +1002b700: 2300 movs r3, #0 +1002b702: f887 3b08 strb.w r3, [r7, #2824] ; 0xb08 +1002b706: 4638 mov r0, r7 +1002b708: 2104 movs r1, #4 +1002b70a: f7ff fc73 bl 1002aff4 +1002b70e: f641 035c movw r3, #6236 ; 0x185c +1002b712: 58e0 ldr r0, [r4, r3] +1002b714: f7f7 f97c bl 10022a10 +1002b718: f8d6 3e10 ldr.w r3, [r6, #3600] ; 0xe10 +1002b71c: 0659 lsls r1, r3, #25 +1002b71e: d503 bpl.n 1002b728 +1002b720: 4620 mov r0, r4 +1002b722: 2105 movs r1, #5 +1002b724: f7ff fc66 bl 1002aff4 +1002b728: f8d6 3e10 ldr.w r3, [r6, #3600] ; 0xe10 +1002b72c: 05da lsls r2, r3, #23 +1002b72e: d503 bpl.n 1002b738 +1002b730: 4620 mov r0, r4 +1002b732: 2106 movs r1, #6 +1002b734: f7ff fc5e bl 1002aff4 +1002b738: f8d6 3e10 ldr.w r3, [r6, #3600] ; 0xe10 +1002b73c: 075b lsls r3, r3, #29 +1002b73e: d503 bpl.n 1002b748 +1002b740: 4620 mov r0, r4 +1002b742: 2100 movs r1, #0 +1002b744: f7ff fc56 bl 1002aff4 +1002b748: f8d6 3e10 ldr.w r3, [r6, #3600] ; 0xe10 +1002b74c: 03d8 lsls r0, r3, #15 +1002b74e: d509 bpl.n 1002b764 +1002b750: f897 3b08 ldrb.w r3, [r7, #2824] ; 0xb08 +1002b754: b133 cbz r3, 1002b764 +1002b756: 2300 movs r3, #0 +1002b758: f887 3b08 strb.w r3, [r7, #2824] ; 0xb08 +1002b75c: 4638 mov r0, r7 +1002b75e: 2104 movs r1, #4 +1002b760: f7ff fc48 bl 1002aff4 +1002b764: f8d6 3e10 ldr.w r3, [r6, #3600] ; 0xe10 +1002b768: 0799 lsls r1, r3, #30 +1002b76a: d105 bne.n 1002b778 +1002b76c: f8d6 2e0c ldr.w r2, [r6, #3596] ; 0xe0c +1002b770: 4b5d ldr r3, [pc, #372] ; (1002b8e8 ) +1002b772: 4013 ands r3, r2 +1002b774: 2b00 cmp r3, #0 +1002b776: d041 beq.n 1002b7fc +1002b778: f8d6 2e1c ldr.w r2, [r6, #3612] ; 0xe1c +1002b77c: f8d6 3e18 ldr.w r3, [r6, #3608] ; 0xe18 +1002b780: f022 0203 bic.w r2, r2, #3 +1002b784: f023 0310 bic.w r3, r3, #16 +1002b788: f8c6 2e1c str.w r2, [r6, #3612] ; 0xe1c +1002b78c: f8c6 3e18 str.w r3, [r6, #3608] ; 0xe18 +1002b790: f44f 717b mov.w r1, #1004 ; 0x3ec +1002b794: 4620 mov r0, r4 +1002b796: f00c faa3 bl 10037ce0 +1002b79a: 4620 mov r0, r4 +1002b79c: f44f 7198 mov.w r1, #304 ; 0x130 +1002b7a0: f8d6 2e18 ldr.w r2, [r6, #3608] ; 0xe18 +1002b7a4: f00c fa9c bl 10037ce0 +1002b7a8: f8d6 7e10 ldr.w r7, [r6, #3600] ; 0xe10 +1002b7ac: f017 0702 ands.w r7, r7, #2 +1002b7b0: d103 bne.n 1002b7ba +1002b7b2: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c +1002b7b6: 06da lsls r2, r3, #27 +1002b7b8: d51b bpl.n 1002b7f2 +1002b7ba: f504 6135 add.w r1, r4, #2896 ; 0xb50 +1002b7be: e9d1 2316 ldrd r2, r3, [r1, #88] ; 0x58 +1002b7c2: 3201 adds r2, #1 +1002b7c4: f143 0300 adc.w r3, r3, #0 +1002b7c8: e9c1 2316 strd r2, r3, [r1, #88] ; 0x58 +1002b7cc: 4b47 ldr r3, [pc, #284] ; (1002b8ec ) +1002b7ce: f04f 4280 mov.w r2, #1073741824 ; 0x40000000 +1002b7d2: e9d3 0102 ldrd r0, r1, [r3, #8] +1002b7d6: 2300 movs r3, #0 +1002b7d8: 4002 ands r2, r0 +1002b7da: 400b ands r3, r1 +1002b7dc: ea52 0103 orrs.w r1, r2, r3 +1002b7e0: d007 beq.n 1002b7f2 +1002b7e2: f8d6 2e0c ldr.w r2, [r6, #3596] ; 0xe0c +1002b7e6: 4842 ldr r0, [pc, #264] ; (1002b8f0 ) +1002b7e8: 4639 mov r1, r7 +1002b7ea: f002 0210 and.w r2, r2, #16 +1002b7ee: f7ef f9c7 bl 1001ab80 +1002b7f2: f504 50c0 add.w r0, r4, #6144 ; 0x1800 +1002b7f6: 3004 adds r0, #4 +1002b7f8: f7eb fe5e bl 100174b8 +1002b7fc: 4620 mov r0, r4 +1002b7fe: f7ff ff29 bl 1002b654 +1002b802: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c +1002b806: 039b lsls r3, r3, #14 +1002b808: d50f bpl.n 1002b82a +1002b80a: 4620 mov r0, r4 +1002b80c: f005 fc58 bl 100310c0 +1002b810: f896 3e54 ldrb.w r3, [r6, #3668] ; 0xe54 +1002b814: b14b cbz r3, 1002b82a +1002b816: f8d6 3e40 ldr.w r3, [r6, #3648] ; 0xe40 +1002b81a: f506 6063 add.w r0, r6, #3632 ; 0xe30 +1002b81e: f043 0301 orr.w r3, r3, #1 +1002b822: f8c6 3e40 str.w r3, [r6, #3648] ; 0xe40 +1002b826: f7eb fe47 bl 100174b8 +1002b82a: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c +1002b82e: 009f lsls r7, r3, #2 +1002b830: d50c bpl.n 1002b84c +1002b832: f896 3e54 ldrb.w r3, [r6, #3668] ; 0xe54 +1002b836: b14b cbz r3, 1002b84c +1002b838: f8d6 3e40 ldr.w r3, [r6, #3648] ; 0xe40 +1002b83c: f506 6063 add.w r0, r6, #3632 ; 0xe30 +1002b840: f043 0308 orr.w r3, r3, #8 +1002b844: f8c6 3e40 str.w r3, [r6, #3648] ; 0xe40 +1002b848: f7eb fe36 bl 100174b8 +1002b84c: f8d6 3e14 ldr.w r3, [r6, #3604] ; 0xe14 +1002b850: 07d8 lsls r0, r3, #31 +1002b852: d502 bpl.n 1002b85a +1002b854: 4620 mov r0, r4 +1002b856: f005 fa8b bl 10030d70 +1002b85a: f8d6 3e14 ldr.w r3, [r6, #3604] ; 0xe14 +1002b85e: 0799 lsls r1, r3, #30 +1002b860: d502 bpl.n 1002b868 +1002b862: 4620 mov r0, r4 +1002b864: f005 fab8 bl 10030dd8 +1002b868: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c +1002b86c: 035a lsls r2, r3, #13 +1002b86e: d502 bpl.n 1002b876 +1002b870: 4620 mov r0, r4 +1002b872: f005 fac9 bl 10030e08 +1002b876: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c +1002b87a: 031b lsls r3, r3, #12 +1002b87c: d502 bpl.n 1002b884 +1002b87e: 4620 mov r0, r4 +1002b880: f005 fad0 bl 10030e24 +1002b884: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c +1002b888: 02df lsls r7, r3, #11 +1002b88a: d502 bpl.n 1002b892 +1002b88c: 4620 mov r0, r4 +1002b88e: f005 fae1 bl 10030e54 +1002b892: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c +1002b896: 0298 lsls r0, r3, #10 +1002b898: d502 bpl.n 1002b8a0 +1002b89a: 4620 mov r0, r4 +1002b89c: f005 fb04 bl 10030ea8 +1002b8a0: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c +1002b8a4: 0259 lsls r1, r3, #9 +1002b8a6: d502 bpl.n 1002b8ae +1002b8a8: 4620 mov r0, r4 +1002b8aa: f005 fb1c bl 10030ee6 +1002b8ae: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c +1002b8b2: 019a lsls r2, r3, #6 +1002b8b4: d502 bpl.n 1002b8bc +1002b8b6: 4620 mov r0, r4 +1002b8b8: f005 fb33 bl 10030f22 +1002b8bc: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c +1002b8c0: 079b lsls r3, r3, #30 +1002b8c2: d502 bpl.n 1002b8ca +1002b8c4: 4620 mov r0, r4 +1002b8c6: f005 fb35 bl 10030f34 +1002b8ca: 2300 movs r3, #0 +1002b8cc: 4628 mov r0, r5 +1002b8ce: f8c6 3e0c str.w r3, [r6, #3596] ; 0xe0c +1002b8d2: f8c6 3e10 str.w r3, [r6, #3600] ; 0xe10 +1002b8d6: f8c6 3e14 str.w r3, [r6, #3604] ; 0xe14 +1002b8da: a901 add r1, sp, #4 +1002b8dc: f7eb fe4a bl 10017574 +1002b8e0: 2001 movs r0, #1 +1002b8e2: b003 add sp, #12 +1002b8e4: bdf0 pop {r4, r5, r6, r7, pc} +1002b8e6: bf00 nop +1002b8e8: 00040010 .word 0x00040010 +1002b8ec: 10000720 .word 0x10000720 +1002b8f0: 10041794 .word 0x10041794 + +1002b8f4 : +1002b8f4: b510 push {r4, lr} +1002b8f6: 4604 mov r4, r0 +1002b8f8: f000 fbdc bl 1002c0b4 +1002b8fc: f641 0369 movw r3, #6249 ; 0x1869 +1002b900: 5ce3 ldrb r3, [r4, r3] +1002b902: b953 cbnz r3, 1002b91a +1002b904: 4620 mov r0, r4 +1002b906: f7f2 fe25 bl 1001e554 +1002b90a: b130 cbz r0, 1002b91a +1002b90c: f641 035c movw r3, #6236 ; 0x185c +1002b910: 58e0 ldr r0, [r4, r3] +1002b912: e8bd 4010 ldmia.w sp!, {r4, lr} +1002b916: f000 bbcd b.w 1002c0b4 +1002b91a: bd10 pop {r4, pc} + +1002b91c : +1002b91c: b510 push {r4, lr} +1002b91e: 2100 movs r1, #0 +1002b920: 2228 movs r2, #40 ; 0x28 +1002b922: 4604 mov r4, r0 +1002b924: f7eb fd94 bl 10017450 +1002b928: 4b06 ldr r3, [pc, #24] ; (1002b944 ) +1002b92a: 60a3 str r3, [r4, #8] +1002b92c: 4b06 ldr r3, [pc, #24] ; (1002b948 ) +1002b92e: 60e3 str r3, [r4, #12] +1002b930: 4b06 ldr r3, [pc, #24] ; (1002b94c ) +1002b932: 6123 str r3, [r4, #16] +1002b934: 4b06 ldr r3, [pc, #24] ; (1002b950 ) +1002b936: 6163 str r3, [r4, #20] +1002b938: 4b06 ldr r3, [pc, #24] ; (1002b954 ) +1002b93a: 61a3 str r3, [r4, #24] +1002b93c: 4b06 ldr r3, [pc, #24] ; (1002b958 ) +1002b93e: 61e3 str r3, [r4, #28] +1002b940: bd10 pop {r4, pc} +1002b942: bf00 nop +1002b944: 1002ab3f .word 0x1002ab3f +1002b948: 1002aae5 .word 0x1002aae5 +1002b94c: 1002aa8d .word 0x1002aa8d +1002b950: 1002aa33 .word 0x1002aa33 +1002b954: 1002a9d9 .word 0x1002a9d9 +1002b958: 1002a97f .word 0x1002a97f + +1002b95c : +1002b95c: b570 push {r4, r5, r6, lr} +1002b95e: 4604 mov r4, r0 +1002b960: 460d mov r5, r1 +1002b962: f600 1658 addw r6, r0, #2392 ; 0x958 +1002b966: f7f2 fdf5 bl 1001e554 +1002b96a: b140 cbz r0, 1002b97e +1002b96c: f641 0369 movw r3, #6249 ; 0x1869 +1002b970: 5ce3 ldrb r3, [r4, r3] +1002b972: b123 cbz r3, 1002b97e +1002b974: f641 035c movw r3, #6236 ; 0x185c +1002b978: 58e6 ldr r6, [r4, r3] +1002b97a: f606 1658 addw r6, r6, #2392 ; 0x958 +1002b97e: eb06 1345 add.w r3, r6, r5, lsl #5 +1002b982: 2d04 cmp r5, #4 +1002b984: f103 0390 add.w r3, r3, #144 ; 0x90 +1002b988: d008 beq.n 1002b99c +1002b98a: 69d9 ldr r1, [r3, #28] +1002b98c: 689a ldr r2, [r3, #8] +1002b98e: 440a add r2, r1 +1002b990: 68d9 ldr r1, [r3, #12] +1002b992: fbb2 f0f1 udiv r0, r2, r1 +1002b996: fb01 2210 mls r2, r1, r0, r2 +1002b99a: e000 b.n 1002b99e +1002b99c: 2200 movs r2, #0 +1002b99e: 6818 ldr r0, [r3, #0] +1002b9a0: eb00 1042 add.w r0, r0, r2, lsl #5 +1002b9a4: bd70 pop {r4, r5, r6, pc} + +1002b9a6 : +1002b9a6: f890 20d0 ldrb.w r2, [r0, #208] ; 0xd0 +1002b9aa: f8d0 3084 ldr.w r3, [r0, #132] ; 0x84 +1002b9ae: b112 cbz r2, 1002b9b6 +1002b9b0: 2240 movs r2, #64 ; 0x40 +1002b9b2: 631a str r2, [r3, #48] ; 0x30 +1002b9b4: 4770 bx lr +1002b9b6: 2228 movs r2, #40 ; 0x28 +1002b9b8: 631a str r2, [r3, #48] ; 0x30 +1002b9ba: 6982 ldr r2, [r0, #24] +1002b9bc: 63da str r2, [r3, #60] ; 0x3c +1002b9be: 691a ldr r2, [r3, #16] +1002b9c0: 3228 adds r2, #40 ; 0x28 +1002b9c2: 639a str r2, [r3, #56] ; 0x38 +1002b9c4: 2202 movs r2, #2 +1002b9c6: 659a str r2, [r3, #88] ; 0x58 +1002b9c8: f8d0 20b4 ldr.w r2, [r0, #180] ; 0xb4 +1002b9cc: f8d0 30a8 ldr.w r3, [r0, #168] ; 0xa8 +1002b9d0: 4413 add r3, r2 +1002b9d2: f8c0 3098 str.w r3, [r0, #152] ; 0x98 +1002b9d6: 4770 bx lr + +1002b9d8 : +1002b9d8: b570 push {r4, r5, r6, lr} +1002b9da: 4604 mov r4, r0 +1002b9dc: 460e mov r6, r1 +1002b9de: f600 1558 addw r5, r0, #2392 ; 0x958 +1002b9e2: f7f2 fdb7 bl 1001e554 +1002b9e6: b140 cbz r0, 1002b9fa +1002b9e8: f641 0369 movw r3, #6249 ; 0x1869 +1002b9ec: 5ce3 ldrb r3, [r4, r3] +1002b9ee: b123 cbz r3, 1002b9fa +1002b9f0: f641 035c movw r3, #6236 ; 0x185c +1002b9f4: 58e5 ldr r5, [r4, r3] +1002b9f6: f605 1558 addw r5, r5, #2392 ; 0x958 +1002b9fa: 7833 ldrb r3, [r6, #0] +1002b9fc: 3b01 subs r3, #1 +1002b9fe: b2db uxtb r3, r3 +1002ba00: 2b11 cmp r3, #17 +1002ba02: bf96 itet ls +1002ba04: 4a07 ldrls r2, [pc, #28] ; (1002ba24 ) +1002ba06: 2302 movhi r3, #2 +1002ba08: 5cd3 ldrbls r3, [r2, r3] +1002ba0a: eb05 1543 add.w r5, r5, r3, lsl #5 +1002ba0e: f8d5 009c ldr.w r0, [r5, #156] ; 0x9c +1002ba12: f8d5 30ac ldr.w r3, [r5, #172] ; 0xac +1002ba16: 1ac0 subs r0, r0, r3 +1002ba18: 2801 cmp r0, #1 +1002ba1a: bf94 ite ls +1002ba1c: 2000 movls r0, #0 +1002ba1e: 2001 movhi r0, #1 +1002ba20: bd70 pop {r4, r5, r6, pc} +1002ba22: bf00 nop +1002ba24: 100417c6 .word 0x100417c6 + +1002ba28 : +1002ba28: b508 push {r3, lr} +1002ba2a: 6880 ldr r0, [r0, #8] +1002ba2c: 3020 adds r0, #32 +1002ba2e: f7eb fdbd bl 100175ac +1002ba32: 2001 movs r0, #1 +1002ba34: bd08 pop {r3, pc} + +1002ba36 : +1002ba36: 6880 ldr r0, [r0, #8] +1002ba38: 3020 adds r0, #32 +1002ba3a: f7eb bdc5 b.w 100175c8 + +1002ba3e : +1002ba3e: 2806 cmp r0, #6 +1002ba40: d809 bhi.n 1002ba56 +1002ba42: e8df f000 tbb [pc, r0] +1002ba46: 0909 .short 0x0909 +1002ba48: 06040909 .word 0x06040909 +1002ba4c: 09 .byte 0x09 +1002ba4d: 00 .byte 0x00 +1002ba4e: 200e movs r0, #14 +1002ba50: 4770 bx lr +1002ba52: 2004 movs r0, #4 +1002ba54: 4770 bx lr +1002ba56: 2010 movs r0, #16 +1002ba58: 4770 bx lr + +1002ba5a : +1002ba5a: b538 push {r3, r4, r5, lr} +1002ba5c: 4605 mov r5, r0 +1002ba5e: 460c mov r4, r1 +1002ba60: 4608 mov r0, r1 +1002ba62: b159 cbz r1, 1002ba7c +1002ba64: f7eb fd10 bl 10017488 +1002ba68: 4620 mov r0, r4 +1002ba6a: f105 0110 add.w r1, r5, #16 +1002ba6e: f7eb fd05 bl 1001747c +1002ba72: 69eb ldr r3, [r5, #28] +1002ba74: 2001 movs r0, #1 +1002ba76: 3301 adds r3, #1 +1002ba78: 61eb str r3, [r5, #28] +1002ba7a: bd38 pop {r3, r4, r5, pc} +1002ba7c: bd38 pop {r3, r4, r5, pc} + +1002ba7e : +1002ba7e: b538 push {r3, r4, r5, lr} +1002ba80: 4604 mov r4, r0 +1002ba82: 3010 adds r0, #16 +1002ba84: f7eb fd88 bl 10017598 +1002ba88: 2801 cmp r0, #1 +1002ba8a: d007 beq.n 1002ba9c +1002ba8c: 6925 ldr r5, [r4, #16] +1002ba8e: 4628 mov r0, r5 +1002ba90: f7eb fcfa bl 10017488 +1002ba94: 69e3 ldr r3, [r4, #28] +1002ba96: 3b01 subs r3, #1 +1002ba98: 61e3 str r3, [r4, #28] +1002ba9a: e000 b.n 1002ba9e +1002ba9c: 2500 movs r5, #0 +1002ba9e: 4628 mov r0, r5 +1002baa0: bd38 pop {r3, r4, r5, pc} + +1002baa2 : +1002baa2: f8d1 3084 ldr.w r3, [r1, #132] ; 0x84 +1002baa6: b530 push {r4, r5, lr} +1002baa8: 6d99 ldr r1, [r3, #88] ; 0x58 +1002baaa: 250c movs r5, #12 +1002baac: fb05 3101 mla r1, r5, r1, r3 +1002bab0: 4618 mov r0, r3 +1002bab2: 194d adds r5, r1, r5 +1002bab4: 2100 movs r1, #0 +1002bab6: 300c adds r0, #12 +1002bab8: 42a8 cmp r0, r5 +1002baba: d002 beq.n 1002bac2 +1002babc: 6a44 ldr r4, [r0, #36] ; 0x24 +1002babe: 4421 add r1, r4 +1002bac0: e7f9 b.n 1002bab6 +1002bac2: f011 007f ands.w r0, r1, #127 ; 0x7f +1002bac6: bf18 it ne +1002bac8: 2001 movne r0, #1 +1002baca: 6814 ldr r4, [r2, #0] +1002bacc: eb00 11d1 add.w r1, r0, r1, lsr #7 +1002bad0: b2c9 uxtb r1, r1 +1002bad2: f424 047f bic.w r4, r4, #16711680 ; 0xff0000 +1002bad6: ea44 4101 orr.w r1, r4, r1, lsl #16 +1002bada: 6011 str r1, [r2, #0] +1002badc: 8e18 ldrh r0, [r3, #48] ; 0x30 +1002bade: 0c09 lsrs r1, r1, #16 +1002bae0: 0409 lsls r1, r1, #16 +1002bae2: 4301 orrs r1, r0 +1002bae4: 6011 str r1, [r2, #0] +1002bae6: 6ad9 ldr r1, [r3, #44] ; 0x2c +1002bae8: 6051 str r1, [r2, #4] +1002baea: 6d99 ldr r1, [r3, #88] ; 0x58 +1002baec: 2904 cmp r1, #4 +1002baee: d816 bhi.n 1002bb1e +1002baf0: 3208 adds r2, #8 +1002baf2: 4619 mov r1, r3 +1002baf4: 2001 movs r0, #1 +1002baf6: 6d9c ldr r4, [r3, #88] ; 0x58 +1002baf8: 3208 adds r2, #8 +1002bafa: 42a0 cmp r0, r4 +1002bafc: f101 010c add.w r1, r1, #12 +1002bb00: d20d bcs.n 1002bb1e +1002bb02: 8e0c ldrh r4, [r1, #48] ; 0x30 +1002bb04: f832 5c06 ldrh.w r5, [r2, #-6] +1002bb08: 3001 adds r0, #1 +1002bb0a: ea44 4405 orr.w r4, r4, r5, lsl #16 +1002bb0e: f024 4400 bic.w r4, r4, #2147483648 ; 0x80000000 +1002bb12: f842 4c08 str.w r4, [r2, #-8] +1002bb16: 6acc ldr r4, [r1, #44] ; 0x2c +1002bb18: f842 4c04 str.w r4, [r2, #-4] +1002bb1c: e7eb b.n 1002baf6 +1002bb1e: 2001 movs r0, #1 +1002bb20: bd30 pop {r4, r5, pc} + +1002bb22 : +1002bb22: b570 push {r4, r5, r6, lr} +1002bb24: eb00 1441 add.w r4, r0, r1, lsl #5 +1002bb28: 4605 mov r5, r0 +1002bb2a: 4608 mov r0, r1 +1002bb2c: f7ff ff87 bl 1002ba3e +1002bb30: f8d4 39f0 ldr.w r3, [r4, #2544] ; 0x9f0 +1002bb34: f8d4 2a04 ldr.w r2, [r4, #2564] ; 0xa04 +1002bb38: 30e8 adds r0, #232 ; 0xe8 +1002bb3a: 441a add r2, r3 +1002bb3c: f8d4 39f4 ldr.w r3, [r4, #2548] ; 0x9f4 +1002bb40: 0086 lsls r6, r0, #2 +1002bb42: fbb2 f4f3 udiv r4, r2, r3 +1002bb46: fb03 2414 mls r4, r3, r4, r2 +1002bb4a: 4628 mov r0, r5 +1002bb4c: 4631 mov r1, r6 +1002bb4e: 4622 mov r2, r4 +1002bb50: f00c f8c6 bl 10037ce0 +1002bb54: b918 cbnz r0, 1002bb5e +1002bb56: 2001 movs r0, #1 +1002bb58: f7eb fd8c bl 10017674 +1002bb5c: e7f5 b.n 1002bb4a +1002bb5e: bd70 pop {r4, r5, r6, pc} + +1002bb60 : +1002bb60: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002bb64: 6883 ldr r3, [r0, #8] +1002bb66: b087 sub sp, #28 +1002bb68: 4605 mov r5, r0 +1002bb6a: f600 1a58 addw sl, r0, #2392 ; 0x958 +1002bb6e: 4608 mov r0, r1 +1002bb70: 460c mov r4, r1 +1002bb72: 9302 str r3, [sp, #8] +1002bb74: f8d1 7084 ldr.w r7, [r1, #132] ; 0x84 +1002bb78: f7fe f942 bl 10029e00 +1002bb7c: 2100 movs r1, #0 +1002bb7e: 4606 mov r6, r0 +1002bb80: 4628 mov r0, r5 +1002bb82: f004 fff5 bl 10030b70 +1002bb86: 69a3 ldr r3, [r4, #24] +1002bb88: 4628 mov r0, r5 +1002bb8a: 9303 str r3, [sp, #12] +1002bb8c: f7f2 fce2 bl 1001e554 +1002bb90: 2800 cmp r0, #0 +1002bb92: d05d beq.n 1002bc50 +1002bb94: f641 0369 movw r3, #6249 ; 0x1869 +1002bb98: 5ceb ldrb r3, [r5, r3] +1002bb9a: 2b00 cmp r3, #0 +1002bb9c: d058 beq.n 1002bc50 +1002bb9e: f641 035c movw r3, #6236 ; 0x185c +1002bba2: f855 8003 ldr.w r8, [r5, r3] +1002bba6: a905 add r1, sp, #20 +1002bba8: f8d8 3008 ldr.w r3, [r8, #8] +1002bbac: f103 0b20 add.w fp, r3, #32 +1002bbb0: 4658 mov r0, fp +1002bbb2: f7eb fcd5 bl 10017560 +1002bbb6: 2e04 cmp r6, #4 +1002bbb8: d009 beq.n 1002bbce +1002bbba: 4640 mov r0, r8 +1002bbbc: f104 0168 add.w r1, r4, #104 ; 0x68 +1002bbc0: f7ff ff0a bl 1002b9d8 +1002bbc4: 4681 mov r9, r0 +1002bbc6: 4658 mov r0, fp +1002bbc8: f1b9 0f00 cmp.w r9, #0 +1002bbcc: d051 beq.n 1002bc72 +1002bbce: b2f1 uxtb r1, r6 +1002bbd0: 4640 mov r0, r8 +1002bbd2: f7ff fec3 bl 1002b95c +1002bbd6: 4681 mov r9, r0 +1002bbd8: 4620 mov r0, r4 +1002bbda: f7ff fee4 bl 1002b9a6 +1002bbde: f8d9 3004 ldr.w r3, [r9, #4] +1002bbe2: 2e04 cmp r6, #4 +1002bbe4: bf08 it eq +1002bbe6: 2201 moveq r2, #1 +1002bbe8: 62fb str r3, [r7, #44] ; 0x2c +1002bbea: bf08 it eq +1002bbec: f885 2b08 strbeq.w r2, [r5, #2824] ; 0xb08 +1002bbf0: b93b cbnz r3, 1002bc02 +1002bbf2: 4658 mov r0, fp +1002bbf4: a905 add r1, sp, #20 +1002bbf6: 9301 str r3, [sp, #4] +1002bbf8: f7eb fcbc bl 10017574 +1002bbfc: 9b01 ldr r3, [sp, #4] +1002bbfe: 461e mov r6, r3 +1002bc00: e080 b.n 1002bd04 +1002bc02: 4619 mov r1, r3 +1002bc04: 4620 mov r0, r4 +1002bc06: f001 fe97 bl 1002d938 +1002bc0a: 4640 mov r0, r8 +1002bc0c: 4621 mov r1, r4 +1002bc0e: 464a mov r2, r9 +1002bc10: f7ff ff47 bl 1002baa2 +1002bc14: 8b3b ldrh r3, [r7, #24] +1002bc16: 2b02 cmp r3, #2 +1002bc18: d006 beq.n 1002bc28 +1002bc1a: eb08 1046 add.w r0, r8, r6, lsl #5 +1002bc1e: f600 10e8 addw r0, r0, #2536 ; 0x9e8 +1002bc22: 4639 mov r1, r7 +1002bc24: f7ff ff19 bl 1002ba5a +1002bc28: 9b02 ldr r3, [sp, #8] +1002bc2a: a905 add r1, sp, #20 +1002bc2c: f103 0020 add.w r0, r3, #32 +1002bc30: f7eb fca0 bl 10017574 +1002bc34: 2e04 cmp r6, #4 +1002bc36: d106 bne.n 1002bc46 +1002bc38: f8d9 3000 ldr.w r3, [r9] +1002bc3c: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000 +1002bc40: f8c9 3000 str.w r3, [r9] +1002bc44: e058 b.n 1002bcf8 +1002bc46: 4640 mov r0, r8 +1002bc48: 4631 mov r1, r6 +1002bc4a: f7ff ff6a bl 1002bb22 +1002bc4e: e053 b.n 1002bcf8 +1002bc50: 9b02 ldr r3, [sp, #8] +1002bc52: a905 add r1, sp, #20 +1002bc54: f103 0820 add.w r8, r3, #32 +1002bc58: 4640 mov r0, r8 +1002bc5a: f7eb fc81 bl 10017560 +1002bc5e: 2e04 cmp r6, #4 +1002bc60: d00c beq.n 1002bc7c +1002bc62: 4628 mov r0, r5 +1002bc64: f104 0168 add.w r1, r4, #104 ; 0x68 +1002bc68: f7ff feb6 bl 1002b9d8 +1002bc6c: 4681 mov r9, r0 +1002bc6e: b928 cbnz r0, 1002bc7c +1002bc70: 4640 mov r0, r8 +1002bc72: a905 add r1, sp, #20 +1002bc74: f7eb fc7e bl 10017574 +1002bc78: 464e mov r6, r9 +1002bc7a: e043 b.n 1002bd04 +1002bc7c: b2f1 uxtb r1, r6 +1002bc7e: 6fe0 ldr r0, [r4, #124] ; 0x7c +1002bc80: f7ff fe6c bl 1002b95c +1002bc84: 4681 mov r9, r0 +1002bc86: 4620 mov r0, r4 +1002bc88: f7ff fe8d bl 1002b9a6 +1002bc8c: f8d9 b004 ldr.w fp, [r9, #4] +1002bc90: 2e04 cmp r6, #4 +1002bc92: bf08 it eq +1002bc94: 2301 moveq r3, #1 +1002bc96: f8c7 b02c str.w fp, [r7, #44] ; 0x2c +1002bc9a: bf08 it eq +1002bc9c: f885 3b08 strbeq.w r3, [r5, #2824] ; 0xb08 +1002bca0: f1bb 0f00 cmp.w fp, #0 +1002bca4: d105 bne.n 1002bcb2 +1002bca6: 4640 mov r0, r8 +1002bca8: a905 add r1, sp, #20 +1002bcaa: f7eb fc63 bl 10017574 +1002bcae: 465e mov r6, fp +1002bcb0: e028 b.n 1002bd04 +1002bcb2: 4620 mov r0, r4 +1002bcb4: 4659 mov r1, fp +1002bcb6: f001 fe3f bl 1002d938 +1002bcba: 4628 mov r0, r5 +1002bcbc: 4621 mov r1, r4 +1002bcbe: 464a mov r2, r9 +1002bcc0: f7ff feef bl 1002baa2 +1002bcc4: 8b3b ldrh r3, [r7, #24] +1002bcc6: 2b02 cmp r3, #2 +1002bcc8: d005 beq.n 1002bcd6 +1002bcca: eb0a 1046 add.w r0, sl, r6, lsl #5 +1002bcce: 3090 adds r0, #144 ; 0x90 +1002bcd0: 4639 mov r1, r7 +1002bcd2: f7ff fec2 bl 1002ba5a +1002bcd6: 2e04 cmp r6, #4 +1002bcd8: d106 bne.n 1002bce8 +1002bcda: f8d9 3000 ldr.w r3, [r9] +1002bcde: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000 +1002bce2: f8c9 3000 str.w r3, [r9] +1002bce6: e003 b.n 1002bcf0 +1002bce8: 4628 mov r0, r5 +1002bcea: 4631 mov r1, r6 +1002bcec: f7ff ff19 bl 1002bb22 +1002bcf0: 4640 mov r0, r8 +1002bcf2: a905 add r1, sp, #20 +1002bcf4: f7eb fc3e bl 10017574 +1002bcf8: 4628 mov r0, r5 +1002bcfa: 4621 mov r1, r4 +1002bcfc: 9a03 ldr r2, [sp, #12] +1002bcfe: f7fd fde2 bl 100298c6 +1002bd02: 2601 movs r6, #1 +1002bd04: 4628 mov r0, r5 +1002bd06: 2101 movs r1, #1 +1002bd08: f004 ff32 bl 10030b70 +1002bd0c: 2e01 cmp r6, #1 +1002bd0e: d008 beq.n 1002bd22 +1002bd10: 4639 mov r1, r7 +1002bd12: 4650 mov r0, sl +1002bd14: f7fe fdad bl 1002a872 +1002bd18: f107 0024 add.w r0, r7, #36 ; 0x24 +1002bd1c: 2101 movs r1, #1 +1002bd1e: f7fe fd75 bl 1002a80c +1002bd22: 4650 mov r0, sl +1002bd24: 4621 mov r1, r4 +1002bd26: f7fd fe43 bl 100299b0 +1002bd2a: b2f0 uxtb r0, r6 +1002bd2c: b007 add sp, #28 +1002bd2e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +1002bd32 : +1002bd32: b570 push {r4, r5, r6, lr} +1002bd34: 4604 mov r4, r0 +1002bd36: 460e mov r6, r1 +1002bd38: f600 1558 addw r5, r0, #2392 ; 0x958 +1002bd3c: f7f2 fc0a bl 1001e554 +1002bd40: b140 cbz r0, 1002bd54 +1002bd42: f641 0369 movw r3, #6249 ; 0x1869 +1002bd46: 5ce3 ldrb r3, [r4, r3] +1002bd48: b123 cbz r3, 1002bd54 +1002bd4a: f641 035c movw r3, #6236 ; 0x185c +1002bd4e: 58e5 ldr r5, [r4, r3] +1002bd50: f605 1558 addw r5, r5, #2392 ; 0x958 +1002bd54: eb05 1546 add.w r5, r5, r6, lsl #5 +1002bd58: f8d5 009c ldr.w r0, [r5, #156] ; 0x9c +1002bd5c: f8d5 30ac ldr.w r3, [r5, #172] ; 0xac +1002bd60: 1ac0 subs r0, r0, r3 +1002bd62: 2801 cmp r0, #1 +1002bd64: bf94 ite ls +1002bd66: 2000 movls r0, #0 +1002bd68: 2001 movhi r0, #1 +1002bd6a: bd70 pop {r4, r5, r6, pc} + +1002bd6c : +1002bd6c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002bd70: 2301 movs r3, #1 +1002bd72: b089 sub sp, #36 ; 0x24 +1002bd74: 9305 str r3, [sp, #20] +1002bd76: 2302 movs r3, #2 +1002bd78: 9101 str r1, [sp, #4] +1002bd7a: 2500 movs r5, #0 +1002bd7c: 9306 str r3, [sp, #24] +1002bd7e: a903 add r1, sp, #12 +1002bd80: 2303 movs r3, #3 +1002bd82: 4682 mov sl, r0 +1002bd84: 4693 mov fp, r2 +1002bd86: 9504 str r5, [sp, #16] +1002bd88: 9307 str r3, [sp, #28] +1002bd8a: f7eb fc2d bl 100175e8 +1002bd8e: 455d cmp r5, fp +1002bd90: da2d bge.n 1002bdee +1002bd92: ab04 add r3, sp, #16 +1002bd94: f853 3025 ldr.w r3, [r3, r5, lsl #2] +1002bd98: 9a01 ldr r2, [sp, #4] +1002bd9a: f852 7033 ldr.w r7, [r2, r3, lsl #3] +1002bd9e: eb02 08c3 add.w r8, r2, r3, lsl #3 +1002bda2: 683e ldr r6, [r7, #0] +1002bda4: 4638 mov r0, r7 +1002bda6: 4631 mov r1, r6 +1002bda8: f7eb fbfb bl 100175a2 +1002bdac: b9e8 cbnz r0, 1002bdea +1002bdae: 68b4 ldr r4, [r6, #8] +1002bdb0: f106 0908 add.w r9, r6, #8 +1002bdb4: 4648 mov r0, r9 +1002bdb6: 4621 mov r1, r4 +1002bdb8: f7eb fbf3 bl 100175a2 +1002bdbc: b998 cbnz r0, 1002bde6 +1002bdbe: 4620 mov r0, r4 +1002bdc0: f7eb fb62 bl 10017488 +1002bdc4: 6972 ldr r2, [r6, #20] +1002bdc6: 3a01 subs r2, #1 +1002bdc8: 6172 str r2, [r6, #20] +1002bdca: b164 cbz r4, 1002bde6 +1002bdcc: f8d8 2004 ldr.w r2, [r8, #4] +1002bdd0: 4648 mov r0, r9 +1002bdd2: 3a01 subs r2, #1 +1002bdd4: f8c8 2004 str.w r2, [r8, #4] +1002bdd8: f7eb fbde bl 10017598 +1002bddc: b140 cbz r0, 1002bdf0 +1002bdde: 4630 mov r0, r6 +1002bde0: f7eb fb52 bl 10017488 +1002bde4: e004 b.n 1002bdf0 +1002bde6: 6836 ldr r6, [r6, #0] +1002bde8: e7dc b.n 1002bda4 +1002bdea: 3501 adds r5, #1 +1002bdec: e7cf b.n 1002bd8e +1002bdee: 2400 movs r4, #0 +1002bdf0: 4650 mov r0, sl +1002bdf2: a903 add r1, sp, #12 +1002bdf4: f7eb fc02 bl 100175fc +1002bdf8: 4620 mov r0, r4 +1002bdfa: b009 add sp, #36 ; 0x24 +1002bdfc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +1002be00 : +1002be00: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002be04: 468a mov sl, r1 +1002be06: 4611 mov r1, r2 +1002be08: b095 sub sp, #84 ; 0x54 +1002be0a: 4680 mov r8, r0 +1002be0c: f811 bf57 ldrb.w fp, [r1, #87]! +1002be10: f500 6046 add.w r0, r0, #3168 ; 0xc60 +1002be14: 4616 mov r6, r2 +1002be16: f102 0508 add.w r5, r2, #8 +1002be1a: f7fc fa4b bl 100282b4 +1002be1e: 4604 mov r4, r0 +1002be20: 2800 cmp r0, #0 +1002be22: f000 8143 beq.w 1002c0ac +1002be26: af08 add r7, sp, #32 +1002be28: 4640 mov r0, r8 +1002be2a: 4639 mov r1, r7 +1002be2c: 462a mov r2, r5 +1002be2e: f7fd fb8a bl 10029546 +1002be32: 2800 cmp r0, #0 +1002be34: f000 813a beq.w 1002c0ac +1002be38: 4650 mov r0, sl +1002be3a: a902 add r1, sp, #8 +1002be3c: f00a fd3f bl 100368be <_rtw_open_pktfile> +1002be40: a802 add r0, sp, #8 +1002be42: 2100 movs r1, #0 +1002be44: 8a32 ldrh r2, [r6, #16] +1002be46: f00a fd43 bl 100368d0 <_rtw_pktfile_read> +1002be4a: f8bd 3020 ldrh.w r3, [sp, #32] +1002be4e: f8b6 9012 ldrh.w r9, [r6, #18] +1002be52: f443 6380 orr.w r3, r3, #1024 ; 0x400 +1002be56: f8ad 3020 strh.w r3, [sp, #32] +1002be5a: 7f73 ldrb r3, [r6, #29] +1002be5c: f00b 0b01 and.w fp, fp, #1 +1002be60: 44b9 add r9, r7 +1002be62: 2b00 cmp r3, #0 +1002be64: f000 80d5 beq.w 1002c012 +1002be68: 7f33 ldrb r3, [r6, #28] +1002be6a: 3b01 subs r3, #1 +1002be6c: 2b04 cmp r3, #4 +1002be6e: f200 80c8 bhi.w 1002c002 +1002be72: e8df f003 tbb [pc, r3] +1002be76: 2603 .short 0x2603 +1002be78: 8ac6 .short 0x8ac6 +1002be7a: 03 .byte 0x03 +1002be7b: 00 .byte 0x00 +1002be7c: f894 3148 ldrb.w r3, [r4, #328] ; 0x148 +1002be80: 4621 mov r1, r4 +1002be82: 77f3 strb r3, [r6, #31] +1002be84: f894 3149 ldrb.w r3, [r4, #329] ; 0x149 +1002be88: 2500 movs r5, #0 +1002be8a: f886 3020 strb.w r3, [r6, #32] +1002be8e: f894 314a ldrb.w r3, [r4, #330] ; 0x14a +1002be92: f06f 447f mvn.w r4, #4278190080 ; 0xff000000 +1002be96: f886 3021 strb.w r3, [r6, #33] ; 0x21 +1002be9a: f896 305d ldrb.w r3, [r6, #93] ; 0x5d +1002be9e: 019b lsls r3, r3, #6 +1002bea0: f886 3022 strb.w r3, [r6, #34] ; 0x22 +1002bea4: e9f1 2352 ldrd r2, r3, [r1, #328]! ; 0x148 +1002bea8: 42ab cmp r3, r5 +1002beaa: bf08 it eq +1002beac: 42a2 cmpeq r2, r4 +1002beae: d003 beq.n 1002beb8 +1002beb0: 3201 adds r2, #1 +1002beb2: f143 0300 adc.w r3, r3, #0 +1002beb6: e001 b.n 1002bebc +1002beb8: 2200 movs r2, #0 +1002beba: 2300 movs r3, #0 +1002bebc: e9c1 2300 strd r2, r3, [r1] +1002bec0: e09f b.n 1002c002 +1002bec2: f894 3149 ldrb.w r3, [r4, #329] ; 0x149 +1002bec6: f504 7ea4 add.w lr, r4, #328 ; 0x148 +1002beca: 77f3 strb r3, [r6, #31] +1002becc: f894 3149 ldrb.w r3, [r4, #329] ; 0x149 +1002bed0: f003 035f and.w r3, r3, #95 ; 0x5f +1002bed4: f043 0320 orr.w r3, r3, #32 +1002bed8: f886 3020 strb.w r3, [r6, #32] +1002bedc: f894 3148 ldrb.w r3, [r4, #328] ; 0x148 +1002bee0: f886 3021 strb.w r3, [r6, #33] ; 0x21 +1002bee4: f1bb 0f00 cmp.w fp, #0 +1002bee8: d029 beq.n 1002bf3e +1002beea: f896 305d ldrb.w r3, [r6, #93] ; 0x5d +1002beee: f04f 30ff mov.w r0, #4294967295 +1002bef2: 019b lsls r3, r3, #6 +1002bef4: f043 0320 orr.w r3, r3, #32 +1002bef8: f886 3022 strb.w r3, [r6, #34] ; 0x22 +1002befc: f894 314a ldrb.w r3, [r4, #330] ; 0x14a +1002bf00: f64f 71ff movw r1, #65535 ; 0xffff +1002bf04: f886 3023 strb.w r3, [r6, #35] ; 0x23 +1002bf08: f894 314b ldrb.w r3, [r4, #331] ; 0x14b +1002bf0c: f886 3024 strb.w r3, [r6, #36] ; 0x24 +1002bf10: f894 314c ldrb.w r3, [r4, #332] ; 0x14c +1002bf14: f886 3025 strb.w r3, [r6, #37] ; 0x25 +1002bf18: f894 314d ldrb.w r3, [r4, #333] ; 0x14d +1002bf1c: f886 3026 strb.w r3, [r6, #38] ; 0x26 +1002bf20: e9de 2300 ldrd r2, r3, [lr] +1002bf24: 428b cmp r3, r1 +1002bf26: bf08 it eq +1002bf28: 4282 cmpeq r2, r0 +1002bf2a: d003 beq.n 1002bf34 +1002bf2c: 3201 adds r2, #1 +1002bf2e: f143 0300 adc.w r3, r3, #0 +1002bf32: e001 b.n 1002bf38 +1002bf34: 2200 movs r2, #0 +1002bf36: 2300 movs r3, #0 +1002bf38: e9ce 2300 strd r2, r3, [lr] +1002bf3c: e061 b.n 1002c002 +1002bf3e: 2320 movs r3, #32 +1002bf40: f886 3022 strb.w r3, [r6, #34] ; 0x22 +1002bf44: f894 314a ldrb.w r3, [r4, #330] ; 0x14a +1002bf48: f04f 32ff mov.w r2, #4294967295 +1002bf4c: f886 3023 strb.w r3, [r6, #35] ; 0x23 +1002bf50: f894 314b ldrb.w r3, [r4, #331] ; 0x14b +1002bf54: f886 3024 strb.w r3, [r6, #36] ; 0x24 +1002bf58: f894 314c ldrb.w r3, [r4, #332] ; 0x14c +1002bf5c: f886 3025 strb.w r3, [r6, #37] ; 0x25 +1002bf60: f894 314d ldrb.w r3, [r4, #333] ; 0x14d +1002bf64: f886 3026 strb.w r3, [r6, #38] ; 0x26 +1002bf68: f64f 73ff movw r3, #65535 ; 0xffff +1002bf6c: e9de 4500 ldrd r4, r5, [lr] +1002bf70: 429d cmp r5, r3 +1002bf72: bf08 it eq +1002bf74: 4294 cmpeq r4, r2 +1002bf76: d003 beq.n 1002bf80 +1002bf78: 3401 adds r4, #1 +1002bf7a: f145 0500 adc.w r5, r5, #0 +1002bf7e: e001 b.n 1002bf84 +1002bf80: 2400 movs r4, #0 +1002bf82: 2500 movs r5, #0 +1002bf84: e9ce 4500 strd r4, r5, [lr] +1002bf88: e03b b.n 1002c002 +1002bf8a: f894 3148 ldrb.w r3, [r4, #328] ; 0x148 +1002bf8e: f504 71a4 add.w r1, r4, #328 ; 0x148 +1002bf92: 77f3 strb r3, [r6, #31] +1002bf94: f894 3149 ldrb.w r3, [r4, #329] ; 0x149 +1002bf98: f886 3020 strb.w r3, [r6, #32] +1002bf9c: f1bb 0f00 cmp.w fp, #0 +1002bfa0: d008 beq.n 1002bfb4 +1002bfa2: 2300 movs r3, #0 +1002bfa4: f886 3021 strb.w r3, [r6, #33] ; 0x21 +1002bfa8: f896 305d ldrb.w r3, [r6, #93] ; 0x5d +1002bfac: 019b lsls r3, r3, #6 +1002bfae: f043 0320 orr.w r3, r3, #32 +1002bfb2: e002 b.n 1002bfba +1002bfb4: f886 b021 strb.w fp, [r6, #33] ; 0x21 +1002bfb8: 2320 movs r3, #32 +1002bfba: f886 3022 strb.w r3, [r6, #34] ; 0x22 +1002bfbe: f894 314a ldrb.w r3, [r4, #330] ; 0x14a +1002bfc2: f04f 32ff mov.w r2, #4294967295 +1002bfc6: f886 3023 strb.w r3, [r6, #35] ; 0x23 +1002bfca: f894 314b ldrb.w r3, [r4, #331] ; 0x14b +1002bfce: f886 3024 strb.w r3, [r6, #36] ; 0x24 +1002bfd2: f894 314c ldrb.w r3, [r4, #332] ; 0x14c +1002bfd6: f886 3025 strb.w r3, [r6, #37] ; 0x25 +1002bfda: f894 314d ldrb.w r3, [r4, #333] ; 0x14d +1002bfde: f886 3026 strb.w r3, [r6, #38] ; 0x26 +1002bfe2: f64f 73ff movw r3, #65535 ; 0xffff +1002bfe6: e9d1 4500 ldrd r4, r5, [r1] +1002bfea: 429d cmp r5, r3 +1002bfec: bf08 it eq +1002bfee: 4294 cmpeq r4, r2 +1002bff0: d003 beq.n 1002bffa +1002bff2: 3401 adds r4, #1 +1002bff4: f145 0500 adc.w r5, r5, #0 +1002bff8: e001 b.n 1002bffe +1002bffa: 2400 movs r4, #0 +1002bffc: 2500 movs r5, #0 +1002bffe: e9c1 4500 strd r4, r5, [r1] +1002c002: 4648 mov r0, r9 +1002c004: f106 011f add.w r1, r6, #31 +1002c008: 7f72 ldrb r2, [r6, #29] +1002c00a: f7eb fa11 bl 10017430 +1002c00e: 7f73 ldrb r3, [r6, #29] +1002c010: 4499 add r9, r3 +1002c012: 4648 mov r0, r9 +1002c014: 89b1 ldrh r1, [r6, #12] +1002c016: f7fd fc0f bl 10029838 +1002c01a: 8a32 ldrh r2, [r6, #16] +1002c01c: f8da 3010 ldr.w r3, [sl, #16] +1002c020: 4481 add r9, r0 +1002c022: 4413 add r3, r2 +1002c024: ebc7 0209 rsb r2, r7, r9 +1002c028: 1a9c subs r4, r3, r2 +1002c02a: 4639 mov r1, r7 +1002c02c: 4605 mov r5, r0 +1002c02e: 4620 mov r0, r4 +1002c030: 9301 str r3, [sp, #4] +1002c032: f7eb f9fd bl 10017430 +1002c036: f8d6 1084 ldr.w r1, [r6, #132] ; 0x84 +1002c03a: f1a4 0228 sub.w r2, r4, #40 ; 0x28 +1002c03e: 6977 ldr r7, [r6, #20] +1002c040: 610a str r2, [r1, #16] +1002c042: f8c6 2080 str.w r2, [r6, #128] ; 0x80 +1002c046: 7fb2 ldrb r2, [r6, #30] +1002c048: 9b01 ldr r3, [sp, #4] +1002c04a: b132 cbz r2, 1002c05a +1002c04c: 7ab1 ldrb r1, [r6, #10] +1002c04e: b121 cbz r1, 1002c05a +1002c050: 19d8 adds r0, r3, r7 +1002c052: f106 0131 add.w r1, r6, #49 ; 0x31 +1002c056: f7eb f9eb bl 10017430 +1002c05a: 8a72 ldrh r2, [r6, #18] +1002c05c: 7f73 ldrb r3, [r6, #29] +1002c05e: 4413 add r3, r2 +1002c060: 441d add r5, r3 +1002c062: 7ab3 ldrb r3, [r6, #10] +1002c064: b103 cbz r3, 1002c068 +1002c066: 7fb3 ldrb r3, [r6, #30] +1002c068: 442b add r3, r5 +1002c06a: 441f add r7, r3 +1002c06c: 8823 ldrh r3, [r4, #0] +1002c06e: 61b7 str r7, [r6, #24] +1002c070: f423 6380 bic.w r3, r3, #1024 ; 0x400 +1002c074: 8023 strh r3, [r4, #0] +1002c076: 4640 mov r0, r8 +1002c078: 4631 mov r1, r6 +1002c07a: f7fd f99f bl 100293bc +1002c07e: b1a8 cbz r0, 1002c0ac +1002c080: 4640 mov r0, r8 +1002c082: 4631 mov r1, r6 +1002c084: f7fd fa49 bl 1002951a +1002c088: 2400 movs r4, #0 +1002c08a: f1bb 0f00 cmp.w fp, #0 +1002c08e: d104 bne.n 1002c09a +1002c090: 4640 mov r0, r8 +1002c092: 4631 mov r1, r6 +1002c094: f7fd fb80 bl 10029798 +1002c098: e001 b.n 1002c09e +1002c09a: f886 4044 strb.w r4, [r6, #68] ; 0x44 +1002c09e: f8d6 3084 ldr.w r3, [r6, #132] ; 0x84 +1002c0a2: 6774 str r4, [r6, #116] ; 0x74 +1002c0a4: 2001 movs r0, #1 +1002c0a6: f8c3 a00c str.w sl, [r3, #12] +1002c0aa: e000 b.n 1002c0ae +1002c0ac: 2000 movs r0, #0 +1002c0ae: b015 add sp, #84 ; 0x54 +1002c0b0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +1002c0b4 : +1002c0b4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1002c0b8: 4604 mov r4, r0 +1002c0ba: f600 1758 addw r7, r0, #2392 ; 0x958 +1002c0be: f04f 0801 mov.w r8, #1 +1002c0c2: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +1002c0c6: 330c adds r3, #12 +1002c0c8: 681b ldr r3, [r3, #0] +1002c0ca: 2b01 cmp r3, #1 +1002c0cc: d072 beq.n 1002c1b4 +1002c0ce: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +1002c0d2: 3310 adds r3, #16 +1002c0d4: 681b ldr r3, [r3, #0] +1002c0d6: 2b01 cmp r3, #1 +1002c0d8: d06c beq.n 1002c1b4 +1002c0da: 4620 mov r0, r4 +1002c0dc: 2101 movs r1, #1 +1002c0de: f7ff fe28 bl 1002bd32 +1002c0e2: b908 cbnz r0, 1002c0e8 +1002c0e4: 2000 movs r0, #0 +1002c0e6: e01e b.n 1002c126 +1002c0e8: 4620 mov r0, r4 +1002c0ea: 2100 movs r1, #0 +1002c0ec: f7ff fe21 bl 1002bd32 +1002c0f0: 2800 cmp r0, #0 +1002c0f2: d0f7 beq.n 1002c0e4 +1002c0f4: 4620 mov r0, r4 +1002c0f6: 2102 movs r1, #2 +1002c0f8: f7ff fe1b bl 1002bd32 +1002c0fc: 2800 cmp r0, #0 +1002c0fe: d0f1 beq.n 1002c0e4 +1002c100: 4620 mov r0, r4 +1002c102: 2103 movs r1, #3 +1002c104: f7ff fe15 bl 1002bd32 +1002c108: 2800 cmp r0, #0 +1002c10a: d0eb beq.n 1002c0e4 +1002c10c: 4620 mov r0, r4 +1002c10e: 2105 movs r1, #5 +1002c110: f7ff fe0f bl 1002bd32 +1002c114: 2800 cmp r0, #0 +1002c116: d0e5 beq.n 1002c0e4 +1002c118: 4620 mov r0, r4 +1002c11a: 2106 movs r1, #6 +1002c11c: f7ff fe09 bl 1002bd32 +1002c120: 3000 adds r0, #0 +1002c122: bf18 it ne +1002c124: 2001 movne r0, #1 +1002c126: 2800 cmp r0, #0 +1002c128: d044 beq.n 1002c1b4 +1002c12a: 4638 mov r0, r7 +1002c12c: f7fe fb74 bl 1002a818 +1002c130: 4606 mov r6, r0 +1002c132: 2800 cmp r0, #0 +1002c134: d03e beq.n 1002c1b4 +1002c136: 4638 mov r0, r7 +1002c138: f8d4 19e0 ldr.w r1, [r4, #2528] ; 0x9e0 +1002c13c: f894 29e4 ldrb.w r2, [r4, #2532] ; 0x9e4 +1002c140: f7ff fe14 bl 1002bd6c +1002c144: 4605 mov r5, r0 +1002c146: b378 cbz r0, 1002c1a8 +1002c148: 6f83 ldr r3, [r0, #120] ; 0x78 +1002c14a: 2b03 cmp r3, #3 +1002c14c: d104 bne.n 1002c158 +1002c14e: 4638 mov r0, r7 +1002c150: 4631 mov r1, r6 +1002c152: f7fe fb8e bl 1002a872 +1002c156: e019 b.n 1002c18c +1002c158: 6932 ldr r2, [r6, #16] +1002c15a: f003 030f and.w r3, r3, #15 +1002c15e: 2b01 cmp r3, #1 +1002c160: f8c0 6084 str.w r6, [r0, #132] ; 0x84 +1002c164: f8c0 2080 str.w r2, [r0, #128] ; 0x80 +1002c168: 6170 str r0, [r6, #20] +1002c16a: d10c bne.n 1002c186 +1002c16c: f890 3041 ldrb.w r3, [r0, #65] ; 0x41 +1002c170: 2b0f cmp r3, #15 +1002c172: d808 bhi.n 1002c186 +1002c174: 4620 mov r0, r4 +1002c176: 6f69 ldr r1, [r5, #116] ; 0x74 +1002c178: 462a mov r2, r5 +1002c17a: f7ff fe41 bl 1002be00 +1002c17e: 2300 movs r3, #0 +1002c180: 4680 mov r8, r0 +1002c182: f885 30d0 strb.w r3, [r5, #208] ; 0xd0 +1002c186: f1b8 0f01 cmp.w r8, #1 +1002c18a: d104 bne.n 1002c196 +1002c18c: 4620 mov r0, r4 +1002c18e: 4629 mov r1, r5 +1002c190: f7ff fce6 bl 1002bb60 +1002c194: e795 b.n 1002c0c2 +1002c196: 4631 mov r1, r6 +1002c198: 4638 mov r0, r7 +1002c19a: f7fe fb6a bl 1002a872 +1002c19e: 4638 mov r0, r7 +1002c1a0: 4629 mov r1, r5 +1002c1a2: f7fd fc05 bl 100299b0 +1002c1a6: e78c b.n 1002c0c2 +1002c1a8: 4638 mov r0, r7 +1002c1aa: 4631 mov r1, r6 +1002c1ac: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +1002c1b0: f7fe bb5f b.w 1002a872 +1002c1b4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1002c1b8 : +1002c1b8: b5f8 push {r3, r4, r5, r6, r7, lr} +1002c1ba: f8d1 7084 ldr.w r7, [r1, #132] ; 0x84 +1002c1be: 460c mov r4, r1 +1002c1c0: 3168 adds r1, #104 ; 0x68 +1002c1c2: 4605 mov r5, r0 +1002c1c4: f7ff fc08 bl 1002b9d8 +1002c1c8: 4606 mov r6, r0 +1002c1ca: b958 cbnz r0, 1002c1e4 +1002c1cc: f605 1558 addw r5, r5, #2392 ; 0x958 +1002c1d0: 4639 mov r1, r7 +1002c1d2: 4628 mov r0, r5 +1002c1d4: f7fe fb4d bl 1002a872 +1002c1d8: 4628 mov r0, r5 +1002c1da: 4621 mov r1, r4 +1002c1dc: f7fd fbe8 bl 100299b0 +1002c1e0: 4630 mov r0, r6 +1002c1e2: bdf8 pop {r3, r4, r5, r6, r7, pc} +1002c1e4: 2300 movs r3, #0 +1002c1e6: f884 30d0 strb.w r3, [r4, #208] ; 0xd0 +1002c1ea: 4628 mov r0, r5 +1002c1ec: 4621 mov r1, r4 +1002c1ee: f7ff fcb7 bl 1002bb60 +1002c1f2: bdf8 pop {r3, r4, r5, r6, r7, pc} + +1002c1f4 : +1002c1f4: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +1002c1f8: f600 1458 addw r4, r0, #2392 ; 0x958 +1002c1fc: 460d mov r5, r1 +1002c1fe: 4606 mov r6, r0 +1002c200: f101 0808 add.w r8, r1, #8 +1002c204: 4620 mov r0, r4 +1002c206: a901 add r1, sp, #4 +1002c208: f7eb f9ee bl 100175e8 +1002c20c: f895 3068 ldrb.w r3, [r5, #104] ; 0x68 +1002c210: 2b11 cmp r3, #17 +1002c212: d00a beq.n 1002c22a +1002c214: 4630 mov r0, r6 +1002c216: 4629 mov r1, r5 +1002c218: f7fd fdfc bl 10029e14 +1002c21c: 2801 cmp r0, #1 +1002c21e: d104 bne.n 1002c22a +1002c220: 4620 mov r0, r4 +1002c222: a901 add r1, sp, #4 +1002c224: f7eb f9ea bl 100175fc +1002c228: e06f b.n 1002c30a +1002c22a: 4630 mov r0, r6 +1002c22c: 4641 mov r1, r8 +1002c22e: f7fd fa98 bl 10029762 +1002c232: 2800 cmp r0, #0 +1002c234: dd04 ble.n 1002c240 +1002c236: f895 3068 ldrb.w r3, [r5, #104] ; 0x68 +1002c23a: 2b11 cmp r3, #17 +1002c23c: d115 bne.n 1002c26a +1002c23e: e006 b.n 1002c24e +1002c240: 4630 mov r0, r6 +1002c242: f105 0168 add.w r1, r5, #104 ; 0x68 +1002c246: f7ff fbc7 bl 1002b9d8 +1002c24a: 2800 cmp r0, #0 +1002c24c: d0f3 beq.n 1002c236 +1002c24e: 6933 ldr r3, [r6, #16] +1002c250: f413 6f08 tst.w r3, #2176 ; 0x880 +1002c254: d109 bne.n 1002c26a +1002c256: 4630 mov r0, r6 +1002c258: f44f 6108 mov.w r1, #2176 ; 0x880 +1002c25c: f7f2 f996 bl 1001e58c +1002c260: 2801 cmp r0, #1 +1002c262: d002 beq.n 1002c26a +1002c264: 6fab ldr r3, [r5, #120] ; 0x78 +1002c266: 2b03 cmp r3, #3 +1002c268: d125 bne.n 1002c2b6 +1002c26a: 4629 mov r1, r5 +1002c26c: 4630 mov r0, r6 +1002c26e: f7fd fc3a bl 10029ae6 +1002c272: a901 add r1, sp, #4 +1002c274: 4607 mov r7, r0 +1002c276: 4620 mov r0, r4 +1002c278: f7eb f9c0 bl 100175fc +1002c27c: 2f01 cmp r7, #1 +1002c27e: d013 beq.n 1002c2a8 +1002c280: 4620 mov r0, r4 +1002c282: 4629 mov r1, r5 +1002c284: f7fd fb94 bl 100299b0 +1002c288: e9d4 231a ldrd r2, r3, [r4, #104] ; 0x68 +1002c28c: f112 32ff adds.w r2, r2, #4294967295 +1002c290: f143 33ff adc.w r3, r3, #4294967295 +1002c294: e9c4 231a strd r2, r3, [r4, #104] ; 0x68 +1002c298: e9d4 231c ldrd r2, r3, [r4, #112] ; 0x70 +1002c29c: 3201 adds r2, #1 +1002c29e: f143 0300 adc.w r3, r3, #0 +1002c2a2: e9c4 231c strd r2, r3, [r4, #112] ; 0x70 +1002c2a6: e030 b.n 1002c30a +1002c2a8: f506 50c0 add.w r0, r6, #6144 ; 0x1800 +1002c2ac: 301c adds r0, #28 +1002c2ae: f7eb f903 bl 100174b8 +1002c2b2: 2000 movs r0, #0 +1002c2b4: e02a b.n 1002c30c +1002c2b6: 4620 mov r0, r4 +1002c2b8: f7fe faae bl 1002a818 +1002c2bc: 4607 mov r7, r0 +1002c2be: 2800 cmp r0, #0 +1002c2c0: d0d3 beq.n 1002c26a +1002c2c2: 4620 mov r0, r4 +1002c2c4: a901 add r1, sp, #4 +1002c2c6: f7eb f999 bl 100175fc +1002c2ca: 6fab ldr r3, [r5, #120] ; 0x78 +1002c2cc: 2b03 cmp r3, #3 +1002c2ce: d005 beq.n 1002c2dc +1002c2d0: 693b ldr r3, [r7, #16] +1002c2d2: f8c5 7084 str.w r7, [r5, #132] ; 0x84 +1002c2d6: f8c5 3080 str.w r3, [r5, #128] ; 0x80 +1002c2da: 617d str r5, [r7, #20] +1002c2dc: 2300 movs r3, #0 +1002c2de: f885 30d0 strb.w r3, [r5, #208] ; 0xd0 +1002c2e2: 4630 mov r0, r6 +1002c2e4: 6f69 ldr r1, [r5, #116] ; 0x74 +1002c2e6: 462a mov r2, r5 +1002c2e8: f7ff fd8a bl 1002be00 +1002c2ec: 2801 cmp r0, #1 +1002c2ee: d104 bne.n 1002c2fa +1002c2f0: 4630 mov r0, r6 +1002c2f2: 4629 mov r1, r5 +1002c2f4: f7ff fc34 bl 1002bb60 +1002c2f8: e007 b.n 1002c30a +1002c2fa: 4639 mov r1, r7 +1002c2fc: 4620 mov r0, r4 +1002c2fe: f7fe fab8 bl 1002a872 +1002c302: 4620 mov r0, r4 +1002c304: 4629 mov r1, r5 +1002c306: f7fd fb53 bl 100299b0 +1002c30a: 2001 movs r0, #1 +1002c30c: b002 add sp, #8 +1002c30e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1002c312 : +1002c312: 2a06 cmp r2, #6 +1002c314: d812 bhi.n 1002c33c +1002c316: e8df f002 tbb [pc, r2] +1002c31a: 0604 .short 0x0604 +1002c31c: 0f0b0909 .word 0x0f0b0909 +1002c320: 06 .byte 0x06 +1002c321: 00 .byte 0x00 +1002c322: 2240 movs r2, #64 ; 0x40 +1002c324: e00b b.n 1002c33e +1002c326: f44f 7280 mov.w r2, #256 ; 0x100 +1002c32a: e003 b.n 1002c334 +1002c32c: 2280 movs r2, #128 ; 0x80 +1002c32e: e001 b.n 1002c334 +1002c330: f44f 7200 mov.w r2, #512 ; 0x200 +1002c334: 801a strh r2, [r3, #0] +1002c336: 4770 bx lr +1002c338: 2280 movs r2, #128 ; 0x80 +1002c33a: e000 b.n 1002c33e +1002c33c: 2200 movs r2, #0 +1002c33e: 701a strb r2, [r3, #0] +1002c340: 4770 bx lr + +1002c342 : +1002c342: b538 push {r3, r4, r5, lr} +1002c344: f241 63c8 movw r3, #5832 ; 0x16c8 +1002c348: 58c4 ldr r4, [r0, r3] +1002c34a: 4605 mov r5, r0 +1002c34c: f894 21a5 ldrb.w r2, [r4, #421] ; 0x1a5 +1002c350: f240 4122 movw r1, #1058 ; 0x422 +1002c354: f042 0240 orr.w r2, r2, #64 ; 0x40 +1002c358: f884 21a5 strb.w r2, [r4, #421] ; 0x1a5 +1002c35c: f00b fcb2 bl 10037cc4 +1002c360: 4628 mov r0, r5 +1002c362: f240 5141 movw r1, #1345 ; 0x541 +1002c366: 22ff movs r2, #255 ; 0xff +1002c368: f00b fcac bl 10037cc4 +1002c36c: f894 21a6 ldrb.w r2, [r4, #422] ; 0x1a6 +1002c370: 4628 mov r0, r5 +1002c372: f042 0201 orr.w r2, r2, #1 +1002c376: f884 21a6 strb.w r2, [r4, #422] ; 0x1a6 +1002c37a: f240 5142 movw r1, #1346 ; 0x542 +1002c37e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1002c382: f00b bc9f b.w 10037cc4 + ... + +1002c388 : +1002c388: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002c38c: f241 64c8 movw r4, #5832 ; 0x16c8 +1002c390: b087 sub sp, #28 +1002c392: 4680 mov r8, r0 +1002c394: 468a mov sl, r1 +1002c396: 9205 str r2, [sp, #20] +1002c398: 5905 ldr r5, [r0, r4] +1002c39a: f7f2 f8db bl 1001e554 +1002c39e: b150 cbz r0, 1002c3b6 +1002c3a0: f641 0369 movw r3, #6249 ; 0x1869 +1002c3a4: f818 3003 ldrb.w r3, [r8, r3] +1002c3a8: b12b cbz r3, 1002c3b6 +1002c3aa: f641 035c movw r3, #6236 ; 0x185c +1002c3ae: f858 3003 ldr.w r3, [r8, r3] +1002c3b2: 591c ldr r4, [r3, r4] +1002c3b4: e000 b.n 1002c3b8 +1002c3b6: 462c mov r4, r5 +1002c3b8: f1ba 0f04 cmp.w sl, #4 +1002c3bc: f200 80c3 bhi.w 1002c546 +1002c3c0: eb08 134a add.w r3, r8, sl, lsl #5 +1002c3c4: f8d3 6790 ldr.w r6, [r3, #1936] ; 0x790 +1002c3c8: 2e00 cmp r6, #0 +1002c3ca: f000 80bc beq.w 1002c546 +1002c3ce: f1ba 0f01 cmp.w sl, #1 +1002c3d2: f108 07fc add.w r7, r8, #252 ; 0xfc +1002c3d6: d02c beq.n 1002c432 +1002c3d8: d302 bcc.n 1002c3e0 +1002c3da: f1ba 0f02 cmp.w sl, #2 +1002c3de: d13e bne.n 1002c45e +1002c3e0: 4638 mov r0, r7 +1002c3e2: f012 fa8d bl 1003e900 <__rtw_get_rateset_len_veneer> +1002c3e6: 4683 mov fp, r0 +1002c3e8: 465a mov r2, fp +1002c3ea: 4639 mov r1, r7 +1002c3ec: 4640 mov r0, r8 +1002c3ee: f7fc f854 bl 1002849a +1002c3f2: f000 010f and.w r1, r0, #15 +1002c3f6: 4640 mov r0, r8 +1002c3f8: f7fc f820 bl 1002843c +1002c3fc: 4659 mov r1, fp +1002c3fe: fa5f f980 uxtb.w r9, r0 +1002c402: 4638 mov r0, r7 +1002c404: f7fc fd75 bl 10028ef2 +1002c408: f898 3734 ldrb.w r3, [r8, #1844] ; 0x734 +1002c40c: 4683 mov fp, r0 +1002c40e: f208 775a addw r7, r8, #1882 ; 0x75a +1002c412: b11b cbz r3, 1002c41c +1002c414: 4638 mov r0, r7 +1002c416: f7fc fd81 bl 10028f1c +1002c41a: e000 b.n 1002c41e +1002c41c: 4618 mov r0, r3 +1002c41e: 4639 mov r1, r7 +1002c420: ea40 0b0b orr.w fp, r0, fp +1002c424: 4640 mov r0, r8 +1002c426: f7fc fd7f bl 10028f28 +1002c42a: 1c07 adds r7, r0, #0 +1002c42c: bf18 it ne +1002c42e: 2701 movne r7, #1 +1002c430: e02f b.n 1002c492 +1002c432: f508 60f8 add.w r0, r8, #1984 ; 0x7c0 +1002c436: f012 fa63 bl 1003e900 <__rtw_get_rateset_len_veneer> +1002c43a: f898 2521 ldrb.w r2, [r8, #1313] ; 0x521 +1002c43e: 4683 mov fp, r0 +1002c440: f012 0f01 tst.w r2, #1 +1002c444: bf0c ite eq +1002c446: 2102 moveq r1, #2 +1002c448: 2101 movne r1, #1 +1002c44a: 4640 mov r0, r8 +1002c44c: f7fb fff6 bl 1002843c +1002c450: 4659 mov r1, fp +1002c452: fa5f f980 uxtb.w r9, r0 +1002c456: 4638 mov r0, r7 +1002c458: f7fc fd34 bl 10028ec4 +1002c45c: e017 b.n 1002c48e +1002c45e: eb08 194a add.w r9, r8, sl, lsl #5 +1002c462: f509 69f4 add.w r9, r9, #1952 ; 0x7a0 +1002c466: 4648 mov r0, r9 +1002c468: f012 fa4a bl 1003e900 <__rtw_get_rateset_len_veneer> +1002c46c: 4683 mov fp, r0 +1002c46e: 4649 mov r1, r9 +1002c470: 465a mov r2, fp +1002c472: 4640 mov r0, r8 +1002c474: f7fc f811 bl 1002849a +1002c478: f000 010f and.w r1, r0, #15 +1002c47c: 4640 mov r0, r8 +1002c47e: f7fb ffdd bl 1002843c +1002c482: 4659 mov r1, fp +1002c484: fa5f f980 uxtb.w r9, r0 +1002c488: 4638 mov r0, r7 +1002c48a: f7fc fd32 bl 10028ef2 +1002c48e: 4683 mov fp, r0 +1002c490: 2700 movs r7, #0 +1002c492: f641 0379 movw r3, #6265 ; 0x1879 +1002c496: f818 3003 ldrb.w r3, [r8, r3] +1002c49a: b1a3 cbz r3, 1002c4c6 +1002c49c: f641 037c movw r3, #6268 ; 0x187c +1002c4a0: f858 3003 ldr.w r3, [r8, r3] +1002c4a4: f413 2f7f tst.w r3, #1044480 ; 0xff000 +1002c4a8: d108 bne.n 1002c4bc +1002c4aa: f413 6f7f tst.w r3, #4080 ; 0xff0 +1002c4ae: d108 bne.n 1002c4c2 +1002c4b0: f013 0f0f tst.w r3, #15 +1002c4b4: bf18 it ne +1002c4b6: f04f 0908 movne.w r9, #8 +1002c4ba: e004 b.n 1002c4c6 +1002c4bc: f04f 0901 mov.w r9, #1 +1002c4c0: e001 b.n 1002c4c6 +1002c4c2: f04f 0906 mov.w r9, #6 +1002c4c6: 465a mov r2, fp +1002c4c8: 9b05 ldr r3, [sp, #20] +1002c4ca: 4651 mov r1, sl +1002c4cc: f504 7000 add.w r0, r4, #512 ; 0x200 +1002c4d0: f00d fffc bl 1003a4cc +1002c4d4: ea00 0b0b and.w fp, r0, fp +1002c4d8: 4658 mov r0, fp +1002c4da: f7fc fd3c bl 10028f56 +1002c4de: f894 31a4 ldrb.w r3, [r4, #420] ; 0x1a4 +1002c4e2: f000 0c3f and.w ip, r0, #63 ; 0x3f +1002c4e6: 2b01 cmp r3, #1 +1002c4e8: d10d bne.n 1002c506 +1002c4ea: f898 351f ldrb.w r3, [r8, #1311] ; 0x51f +1002c4ee: e88d 0880 stmia.w sp, {r7, fp} +1002c4f2: 4640 mov r0, r8 +1002c4f4: fa5f f18a uxtb.w r1, sl +1002c4f8: 464a mov r2, r9 +1002c4fa: f8cd c010 str.w ip, [sp, #16] +1002c4fe: f00e fcbf bl 1003ae80 +1002c502: f8dd c010 ldr.w ip, [sp, #16] +1002c506: 4455 add r5, sl +1002c508: 4b10 ldr r3, [pc, #64] ; (1002c54c ) +1002c50a: f886 9176 strb.w r9, [r6, #374] ; 0x176 +1002c50e: f886 c177 strb.w ip, [r6, #375] ; 0x177 +1002c512: f44f 7400 mov.w r4, #512 ; 0x200 +1002c516: f885 c1e0 strb.w ip, [r5, #480] ; 0x1e0 +1002c51a: 2500 movs r5, #0 +1002c51c: e9d3 6702 ldrd r6, r7, [r3, #8] +1002c520: 4034 ands r4, r6 +1002c522: 403d ands r5, r7 +1002c524: ea54 0305 orrs.w r3, r4, r5 +1002c528: d00d beq.n 1002c546 +1002c52a: 4b09 ldr r3, [pc, #36] ; (1002c550 ) +1002c52c: 681b ldr r3, [r3, #0] +1002c52e: b153 cbz r3, 1002c546 +1002c530: f898 351f ldrb.w r3, [r8, #1311] ; 0x51f +1002c534: 4907 ldr r1, [pc, #28] ; (1002c554 ) +1002c536: e88d 1808 stmia.w sp, {r3, fp, ip} +1002c53a: 4b07 ldr r3, [pc, #28] ; (1002c558 ) +1002c53c: 4652 mov r2, sl +1002c53e: 69d8 ldr r0, [r3, #28] +1002c540: 464b mov r3, r9 +1002c542: f7ee fb1d bl 1001ab80 +1002c546: b007 add sp, #28 +1002c548: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1002c54c: 10000720 .word 0x10000720 +1002c550: 10044f38 .word 0x10044f38 +1002c554: 100417e8 .word 0x100417e8 +1002c558: 10043ac4 .word 0x10043ac4 + +1002c55c : +1002c55c: b538 push {r3, r4, r5, lr} +1002c55e: 4604 mov r4, r0 +1002c560: 4813 ldr r0, [pc, #76] ; (1002c5b0 ) +1002c562: f7eb f9b7 bl 100178d4 +1002c566: f241 63c8 movw r3, #5832 ; 0x16c8 +1002c56a: 4620 mov r0, r4 +1002c56c: 58e5 ldr r5, [r4, r3] +1002c56e: f004 fdeb bl 10031148 +1002c572: f505 6063 add.w r0, r5, #3632 ; 0xe30 +1002c576: f7ea ffb7 bl 100174e8 +1002c57a: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +1002c57e: 330c adds r3, #12 +1002c580: 681b ldr r3, [r3, #0] +1002c582: 4620 mov r0, r4 +1002c584: 2b01 cmp r3, #1 +1002c586: d008 beq.n 1002c59a +1002c588: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +1002c58c: 3310 adds r3, #16 +1002c58e: 681b ldr r3, [r3, #0] +1002c590: 2b01 cmp r3, #1 +1002c592: d002 beq.n 1002c59a +1002c594: f004 fe02 bl 1003119c +1002c598: e7eb b.n 1002c572 +1002c59a: f004 fdfd bl 10031198 +1002c59e: f605 6034 addw r0, r5, #3636 ; 0xe34 +1002c5a2: f7ea ff89 bl 100174b8 +1002c5a6: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1002c5aa: f7eb b99b b.w 100178e4 +1002c5ae: bf00 nop +1002c5b0: 10041806 .word 0x10041806 + +1002c5b4 : +1002c5b4: b538 push {r3, r4, r5, lr} +1002c5b6: 4604 mov r4, r0 +1002c5b8: 4810 ldr r0, [pc, #64] ; (1002c5fc ) +1002c5ba: f7eb f98b bl 100178d4 +1002c5be: f241 63c8 movw r3, #5832 ; 0x16c8 +1002c5c2: 58e5 ldr r5, [r4, r3] +1002c5c4: f505 6066 add.w r0, r5, #3680 ; 0xe60 +1002c5c8: f7ea ff8e bl 100174e8 +1002c5cc: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +1002c5d0: 330c adds r3, #12 +1002c5d2: 681b ldr r3, [r3, #0] +1002c5d4: 2b01 cmp r3, #1 +1002c5d6: d009 beq.n 1002c5ec +1002c5d8: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +1002c5dc: 3310 adds r3, #16 +1002c5de: 681b ldr r3, [r3, #0] +1002c5e0: 2b01 cmp r3, #1 +1002c5e2: d003 beq.n 1002c5ec +1002c5e4: 4620 mov r0, r4 +1002c5e6: f004 fd3b bl 10031060 +1002c5ea: e7eb b.n 1002c5c4 +1002c5ec: f605 6064 addw r0, r5, #3684 ; 0xe64 +1002c5f0: f7ea ff62 bl 100174b8 +1002c5f4: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1002c5f8: f7eb b974 b.w 100178e4 +1002c5fc: 1004181b .word 0x1004181b + +1002c600 : +1002c600: b538 push {r3, r4, r5, lr} +1002c602: 4604 mov r4, r0 +1002c604: 4810 ldr r0, [pc, #64] ; (1002c648 ) +1002c606: f7eb f965 bl 100178d4 +1002c60a: f241 63c8 movw r3, #5832 ; 0x16c8 +1002c60e: 58e5 ldr r5, [r4, r3] +1002c610: f605 6078 addw r0, r5, #3704 ; 0xe78 +1002c614: f7ea ff68 bl 100174e8 +1002c618: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +1002c61c: 330c adds r3, #12 +1002c61e: 681b ldr r3, [r3, #0] +1002c620: 2b01 cmp r3, #1 +1002c622: d009 beq.n 1002c638 +1002c624: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +1002c628: 3310 adds r3, #16 +1002c62a: 681b ldr r3, [r3, #0] +1002c62c: 2b01 cmp r3, #1 +1002c62e: d003 beq.n 1002c638 +1002c630: 4620 mov r0, r4 +1002c632: f003 ffbb bl 100305ac +1002c636: e7eb b.n 1002c610 +1002c638: f605 607c addw r0, r5, #3708 ; 0xe7c +1002c63c: f7ea ff3c bl 100174b8 +1002c640: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1002c644: f7eb b94e b.w 100178e4 +1002c648: 1004181b .word 0x1004181b + +1002c64c : +1002c64c: b570 push {r4, r5, r6, lr} +1002c64e: f241 63c8 movw r3, #5832 ; 0x16c8 +1002c652: 58c6 ldr r6, [r0, r3] +1002c654: 4b18 ldr r3, [pc, #96] ; (1002c6b8 ) +1002c656: b086 sub sp, #24 +1002c658: 681c ldr r4, [r3, #0] +1002c65a: 4668 mov r0, sp +1002c65c: 2100 movs r1, #0 +1002c65e: 2218 movs r2, #24 +1002c660: f7ea fef6 bl 10017450 +1002c664: 230a movs r3, #10 +1002c666: 9300 str r3, [sp, #0] +1002c668: f484 3380 eor.w r3, r4, #65536 ; 0x10000 +1002c66c: f3c3 4300 ubfx r3, r3, #16, #1 +1002c670: 9301 str r3, [sp, #4] +1002c672: 2300 movs r3, #0 +1002c674: 9304 str r3, [sp, #16] +1002c676: f3c4 2301 ubfx r3, r4, #8, #2 +1002c67a: b133 cbz r3, 1002c68a +1002c67c: 2b01 cmp r3, #1 +1002c67e: d101 bne.n 1002c684 +1002c680: 2302 movs r3, #2 +1002c682: e002 b.n 1002c68a +1002c684: 2b02 cmp r3, #2 +1002c686: d101 bne.n 1002c68c +1002c688: 2301 movs r3, #1 +1002c68a: 9303 str r3, [sp, #12] +1002c68c: 4b0b ldr r3, [pc, #44] ; (1002c6bc ) +1002c68e: f3c4 1403 ubfx r4, r4, #4, #4 +1002c692: 681b ldr r3, [r3, #0] +1002c694: 9402 str r4, [sp, #8] +1002c696: f3c3 6340 ubfx r3, r3, #25, #1 +1002c69a: 4634 mov r4, r6 +1002c69c: 466d mov r5, sp +1002c69e: 61b3 str r3, [r6, #24] +1002c6a0: cd0f ldmia r5!, {r0, r1, r2, r3} +1002c6a2: c40f stmia r4!, {r0, r1, r2, r3} +1002c6a4: e895 0003 ldmia.w r5, {r0, r1} +1002c6a8: 2303 movs r3, #3 +1002c6aa: e884 0003 stmia.w r4, {r0, r1} +1002c6ae: f886 303c strb.w r3, [r6, #60] ; 0x3c +1002c6b2: b006 add sp, #24 +1002c6b4: bd70 pop {r4, r5, r6, pc} +1002c6b6: bf00 nop +1002c6b8: 400001f0 .word 0x400001f0 +1002c6bc: 400001f4 .word 0x400001f4 + +1002c6c0 : +1002c6c0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002c6c4: b085 sub sp, #20 +1002c6c6: 4692 mov sl, r2 +1002c6c8: 4604 mov r4, r0 +1002c6ca: 460f mov r7, r1 +1002c6cc: a802 add r0, sp, #8 +1002c6ce: 21ff movs r1, #255 ; 0xff +1002c6d0: 2208 movs r2, #8 +1002c6d2: 461d mov r5, r3 +1002c6d4: f89d 6038 ldrb.w r6, [sp, #56] ; 0x38 +1002c6d8: f7ea feba bl 10017450 +1002c6dc: f01a 0b01 ands.w fp, sl, #1 +1002c6e0: d13b bne.n 1002c75a +1002c6e2: f107 0801 add.w r8, r7, #1 +1002c6e6: fa1f f888 uxth.w r8, r8 +1002c6ea: 4639 mov r1, r7 +1002c6ec: 782a ldrb r2, [r5, #0] +1002c6ee: 4633 mov r3, r6 +1002c6f0: 4620 mov r0, r4 +1002c6f2: f00a fe5f bl 100373b4 +1002c6f6: 4641 mov r1, r8 +1002c6f8: 786a ldrb r2, [r5, #1] +1002c6fa: 4633 mov r3, r6 +1002c6fc: 4620 mov r0, r4 +1002c6fe: f00a fe59 bl 100373b4 +1002c702: 4620 mov r0, r4 +1002c704: 21ec movs r1, #236 ; 0xec +1002c706: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1002c70a: 465b mov r3, fp +1002c70c: f002 fa6b bl 1002ebe6 +1002c710: 4639 mov r1, r7 +1002c712: aa02 add r2, sp, #8 +1002c714: 4633 mov r3, r6 +1002c716: 4620 mov r0, r4 +1002c718: f00a fe32 bl 10037380 +1002c71c: 4641 mov r1, r8 +1002c71e: f10d 0209 add.w r2, sp, #9 +1002c722: 4633 mov r3, r6 +1002c724: 4620 mov r0, r4 +1002c726: f00a fe2b bl 10037380 +1002c72a: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1002c72e: 2301 movs r3, #1 +1002c730: 4620 mov r0, r4 +1002c732: 21ec movs r1, #236 ; 0xec +1002c734: f002 fa57 bl 1002ebe6 +1002c738: 782a ldrb r2, [r5, #0] +1002c73a: f89d 3008 ldrb.w r3, [sp, #8] +1002c73e: f107 0902 add.w r9, r7, #2 +1002c742: 429a cmp r2, r3 +1002c744: fa1f f989 uxth.w r9, r9 +1002c748: d10a bne.n 1002c760 +1002c74a: 786f ldrb r7, [r5, #1] +1002c74c: f89d 3009 ldrb.w r3, [sp, #9] +1002c750: 429f cmp r7, r3 +1002c752: bf0c ite eq +1002c754: 270f moveq r7, #15 +1002c756: 270e movne r7, #14 +1002c758: e003 b.n 1002c762 +1002c75a: 46b9 mov r9, r7 +1002c75c: 270f movs r7, #15 +1002c75e: e000 b.n 1002c762 +1002c760: 270e movs r7, #14 +1002c762: f00a 0302 and.w r3, sl, #2 +1002c766: f003 0cff and.w ip, r3, #255 ; 0xff +1002c76a: 2b00 cmp r3, #0 +1002c76c: d140 bne.n 1002c7f0 +1002c76e: f109 0b01 add.w fp, r9, #1 +1002c772: fa1f fb8b uxth.w fp, fp +1002c776: 4649 mov r1, r9 +1002c778: 78aa ldrb r2, [r5, #2] +1002c77a: 4633 mov r3, r6 +1002c77c: 4620 mov r0, r4 +1002c77e: f8cd c004 str.w ip, [sp, #4] +1002c782: f00a fe17 bl 100373b4 +1002c786: 4659 mov r1, fp +1002c788: 78ea ldrb r2, [r5, #3] +1002c78a: 4633 mov r3, r6 +1002c78c: 4620 mov r0, r4 +1002c78e: f00a fe11 bl 100373b4 +1002c792: f8dd c004 ldr.w ip, [sp, #4] +1002c796: 4620 mov r0, r4 +1002c798: 4663 mov r3, ip +1002c79a: 21ec movs r1, #236 ; 0xec +1002c79c: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1002c7a0: f002 fa21 bl 1002ebe6 +1002c7a4: 4649 mov r1, r9 +1002c7a6: f10d 020a add.w r2, sp, #10 +1002c7aa: 4633 mov r3, r6 +1002c7ac: 4620 mov r0, r4 +1002c7ae: f00a fde7 bl 10037380 +1002c7b2: 4659 mov r1, fp +1002c7b4: f10d 020b add.w r2, sp, #11 +1002c7b8: 4633 mov r3, r6 +1002c7ba: 4620 mov r0, r4 +1002c7bc: f00a fde0 bl 10037380 +1002c7c0: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1002c7c4: 2301 movs r3, #1 +1002c7c6: 4620 mov r0, r4 +1002c7c8: 21ec movs r1, #236 ; 0xec +1002c7ca: f002 fa0c bl 1002ebe6 +1002c7ce: 78aa ldrb r2, [r5, #2] +1002c7d0: f89d 300a ldrb.w r3, [sp, #10] +1002c7d4: f109 0802 add.w r8, r9, #2 +1002c7d8: 429a cmp r2, r3 +1002c7da: fa1f f888 uxth.w r8, r8 +1002c7de: d104 bne.n 1002c7ea +1002c7e0: 78ea ldrb r2, [r5, #3] +1002c7e2: f89d 300b ldrb.w r3, [sp, #11] +1002c7e6: 429a cmp r2, r3 +1002c7e8: d003 beq.n 1002c7f2 +1002c7ea: f007 07fd and.w r7, r7, #253 ; 0xfd +1002c7ee: e000 b.n 1002c7f2 +1002c7f0: 46c8 mov r8, r9 +1002c7f2: f00a 0304 and.w r3, sl, #4 +1002c7f6: f003 0cff and.w ip, r3, #255 ; 0xff +1002c7fa: 2b00 cmp r3, #0 +1002c7fc: d13f bne.n 1002c87e +1002c7fe: f108 0b01 add.w fp, r8, #1 +1002c802: fa1f fb8b uxth.w fp, fp +1002c806: 4641 mov r1, r8 +1002c808: 792a ldrb r2, [r5, #4] +1002c80a: 4633 mov r3, r6 +1002c80c: 4620 mov r0, r4 +1002c80e: f8cd c004 str.w ip, [sp, #4] +1002c812: f00a fdcf bl 100373b4 +1002c816: 4659 mov r1, fp +1002c818: 796a ldrb r2, [r5, #5] +1002c81a: 4633 mov r3, r6 +1002c81c: 4620 mov r0, r4 +1002c81e: f00a fdc9 bl 100373b4 +1002c822: f8dd c004 ldr.w ip, [sp, #4] +1002c826: 4620 mov r0, r4 +1002c828: 4663 mov r3, ip +1002c82a: 21ec movs r1, #236 ; 0xec +1002c82c: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1002c830: f002 f9d9 bl 1002ebe6 +1002c834: 4641 mov r1, r8 +1002c836: aa03 add r2, sp, #12 +1002c838: 4633 mov r3, r6 +1002c83a: 4620 mov r0, r4 +1002c83c: f00a fda0 bl 10037380 +1002c840: 4659 mov r1, fp +1002c842: f10d 020d add.w r2, sp, #13 +1002c846: 4633 mov r3, r6 +1002c848: 4620 mov r0, r4 +1002c84a: f00a fd99 bl 10037380 +1002c84e: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1002c852: 2301 movs r3, #1 +1002c854: 4620 mov r0, r4 +1002c856: 21ec movs r1, #236 ; 0xec +1002c858: f002 f9c5 bl 1002ebe6 +1002c85c: 792a ldrb r2, [r5, #4] +1002c85e: f89d 300c ldrb.w r3, [sp, #12] +1002c862: f108 0902 add.w r9, r8, #2 +1002c866: 429a cmp r2, r3 +1002c868: fa1f f989 uxth.w r9, r9 +1002c86c: d104 bne.n 1002c878 +1002c86e: 796a ldrb r2, [r5, #5] +1002c870: f89d 300d ldrb.w r3, [sp, #13] +1002c874: 429a cmp r2, r3 +1002c876: d003 beq.n 1002c880 +1002c878: f007 07fb and.w r7, r7, #251 ; 0xfb +1002c87c: e000 b.n 1002c880 +1002c87e: 46c1 mov r9, r8 +1002c880: f00a 0208 and.w r2, sl, #8 +1002c884: f002 0aff and.w sl, r2, #255 ; 0xff +1002c888: 2a00 cmp r2, #0 +1002c88a: d137 bne.n 1002c8fc +1002c88c: f109 0801 add.w r8, r9, #1 +1002c890: fa1f f888 uxth.w r8, r8 +1002c894: 4649 mov r1, r9 +1002c896: 79aa ldrb r2, [r5, #6] +1002c898: 4633 mov r3, r6 +1002c89a: 4620 mov r0, r4 +1002c89c: f00a fd8a bl 100373b4 +1002c8a0: 4641 mov r1, r8 +1002c8a2: 79ea ldrb r2, [r5, #7] +1002c8a4: 4633 mov r3, r6 +1002c8a6: 4620 mov r0, r4 +1002c8a8: f00a fd84 bl 100373b4 +1002c8ac: 4620 mov r0, r4 +1002c8ae: 21ec movs r1, #236 ; 0xec +1002c8b0: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1002c8b4: 4653 mov r3, sl +1002c8b6: f002 f996 bl 1002ebe6 +1002c8ba: 4649 mov r1, r9 +1002c8bc: f10d 020e add.w r2, sp, #14 +1002c8c0: 4633 mov r3, r6 +1002c8c2: 4620 mov r0, r4 +1002c8c4: f00a fd5c bl 10037380 +1002c8c8: 4641 mov r1, r8 +1002c8ca: f10d 020f add.w r2, sp, #15 +1002c8ce: 4633 mov r3, r6 +1002c8d0: 4620 mov r0, r4 +1002c8d2: f00a fd55 bl 10037380 +1002c8d6: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1002c8da: 2301 movs r3, #1 +1002c8dc: 4620 mov r0, r4 +1002c8de: 21ec movs r1, #236 ; 0xec +1002c8e0: f002 f981 bl 1002ebe6 +1002c8e4: 79aa ldrb r2, [r5, #6] +1002c8e6: f89d 300e ldrb.w r3, [sp, #14] +1002c8ea: 429a cmp r2, r3 +1002c8ec: d104 bne.n 1002c8f8 +1002c8ee: 79ea ldrb r2, [r5, #7] +1002c8f0: f89d 300f ldrb.w r3, [sp, #15] +1002c8f4: 429a cmp r2, r3 +1002c8f6: d001 beq.n 1002c8fc +1002c8f8: f007 07f7 and.w r7, r7, #247 ; 0xf7 +1002c8fc: 4638 mov r0, r7 +1002c8fe: b005 add sp, #20 +1002c900: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +1002c904 : +1002c904: b508 push {r3, lr} +1002c906: 4608 mov r0, r1 +1002c908: 4b02 ldr r3, [pc, #8] ; (1002c914 ) +1002c90a: 4611 mov r1, r2 +1002c90c: 2207 movs r2, #7 +1002c90e: 4798 blx r3 +1002c910: bd08 pop {r3, pc} +1002c912: bf00 nop +1002c914: 00006561 .word 0x00006561 + +1002c918 : +1002c918: b538 push {r3, r4, r5, lr} +1002c91a: f241 64c8 movw r4, #5832 ; 0x16c8 +1002c91e: 4605 mov r5, r0 +1002c920: 5900 ldr r0, [r0, r4] +1002c922: b128 cbz r0, 1002c930 +1002c924: f640 61b8 movw r1, #3768 ; 0xeb8 +1002c928: f7ea fd7d bl 10017426 +1002c92c: 2300 movs r3, #0 +1002c92e: 512b str r3, [r5, r4] +1002c930: bd38 pop {r3, r4, r5, pc} + +1002c932 : +1002c932: b538 push {r3, r4, r5, lr} +1002c934: f241 63c8 movw r3, #5832 ; 0x16c8 +1002c938: 58c5 ldr r5, [r0, r3] +1002c93a: 4604 mov r4, r0 +1002c93c: f895 21a5 ldrb.w r2, [r5, #421] ; 0x1a5 +1002c940: f240 4122 movw r1, #1058 ; 0x422 +1002c944: f002 02bf and.w r2, r2, #191 ; 0xbf +1002c948: f885 21a5 strb.w r2, [r5, #421] ; 0x1a5 +1002c94c: f00b f9ba bl 10037cc4 +1002c950: 4620 mov r0, r4 +1002c952: f240 5141 movw r1, #1345 ; 0x541 +1002c956: 2264 movs r2, #100 ; 0x64 +1002c958: f00b f9b4 bl 10037cc4 +1002c95c: f895 21a6 ldrb.w r2, [r5, #422] ; 0x1a6 +1002c960: 4620 mov r0, r4 +1002c962: f002 02fe and.w r2, r2, #254 ; 0xfe +1002c966: f885 21a6 strb.w r2, [r5, #422] ; 0x1a6 +1002c96a: f240 5142 movw r1, #1346 ; 0x542 +1002c96e: f00b f9a9 bl 10037cc4 +1002c972: 4620 mov r0, r4 +1002c974: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1002c978: f00e ba6a b.w 1003ae50 + +1002c97c : +1002c97c: b570 push {r4, r5, r6, lr} +1002c97e: 4616 mov r6, r2 +1002c980: f241 62c8 movw r2, #5832 ; 0x16c8 +1002c984: 5884 ldr r4, [r0, r2] +1002c986: 2901 cmp r1, #1 +1002c988: f504 7500 add.w r5, r4, #512 ; 0x200 +1002c98c: d020 beq.n 1002c9d0 +1002c98e: d302 bcc.n 1002c996 +1002c990: 2902 cmp r1, #2 +1002c992: d025 beq.n 1002c9e0 +1002c994: bd70 pop {r4, r5, r6, pc} +1002c996: f641 0169 movw r1, #6249 ; 0x1869 +1002c99a: 5c41 ldrb r1, [r0, r1] +1002c99c: b131 cbz r1, 1002c9ac +1002c99e: f641 015c movw r1, #6236 ; 0x185c +1002c9a2: 5841 ldr r1, [r0, r1] +1002c9a4: b111 cbz r1, 1002c9ac +1002c9a6: 588d ldr r5, [r1, r2] +1002c9a8: f505 7500 add.w r5, r5, #512 ; 0x200 +1002c9ac: f8d6 2100 ldr.w r2, [r6, #256] ; 0x100 +1002c9b0: 4628 mov r0, r5 +1002c9b2: 2149 movs r1, #73 ; 0x49 +1002c9b4: b292 uxth r2, r2 +1002c9b6: b13b cbz r3, 1002c9c8 +1002c9b8: 4633 mov r3, r6 +1002c9ba: f00c fadd bl 10038f78 +1002c9be: 4628 mov r0, r5 +1002c9c0: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1002c9c4: f00d bc95 b.w 1003a2f2 +1002c9c8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1002c9cc: f00c bad4 b.w 10038f78 +1002c9d0: 4628 mov r0, r5 +1002c9d2: e9d6 2300 ldrd r2, r3, [r6] +1002c9d6: 213d movs r1, #61 ; 0x3d +1002c9d8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1002c9dc: f00c bad4 b.w 10038f88 +1002c9e0: 4628 mov r0, r5 +1002c9e2: 2100 movs r1, #0 +1002c9e4: f00c fbba bl 1003915c +1002c9e8: 4d17 ldr r5, [pc, #92] ; (1002ca48 ) +1002c9ea: 4606 mov r6, r0 +1002c9ec: 682b ldr r3, [r5, #0] +1002c9ee: b11b cbz r3, 1002c9f8 +1002c9f0: 4b16 ldr r3, [pc, #88] ; (1002ca4c ) +1002c9f2: 6898 ldr r0, [r3, #8] +1002c9f4: f7ee f8c4 bl 1001ab80 +1002c9f8: 682b ldr r3, [r5, #0] +1002c9fa: b14b cbz r3, 1002ca10 +1002c9fc: 4b13 ldr r3, [pc, #76] ; (1002ca4c ) +1002c9fe: f894 12b7 ldrb.w r1, [r4, #695] ; 0x2b7 +1002ca02: 68d8 ldr r0, [r3, #12] +1002ca04: f894 22b9 ldrb.w r2, [r4, #697] ; 0x2b9 +1002ca08: f894 379c ldrb.w r3, [r4, #1948] ; 0x79c +1002ca0c: f7ee f8b8 bl 1001ab80 +1002ca10: 682b ldr r3, [r5, #0] +1002ca12: b133 cbz r3, 1002ca22 +1002ca14: 4b0d ldr r3, [pc, #52] ; (1002ca4c ) +1002ca16: 69b1 ldr r1, [r6, #24] +1002ca18: 6918 ldr r0, [r3, #16] +1002ca1a: 6932 ldr r2, [r6, #16] +1002ca1c: 69f3 ldr r3, [r6, #28] +1002ca1e: f7ee f8af bl 1001ab80 +1002ca22: f894 32b7 ldrb.w r3, [r4, #695] ; 0x2b7 +1002ca26: b16b cbz r3, 1002ca44 +1002ca28: 682b ldr r3, [r5, #0] +1002ca2a: b15b cbz r3, 1002ca44 +1002ca2c: 4b07 ldr r3, [pc, #28] ; (1002ca4c ) +1002ca2e: f894 12ea ldrb.w r1, [r4, #746] ; 0x2ea +1002ca32: 6958 ldr r0, [r3, #20] +1002ca34: f894 22c3 ldrb.w r2, [r4, #707] ; 0x2c3 +1002ca38: f894 32c4 ldrb.w r3, [r4, #708] ; 0x2c4 +1002ca3c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1002ca40: f7ee b89e b.w 1001ab80 +1002ca44: bd70 pop {r4, r5, r6, pc} +1002ca46: bf00 nop +1002ca48: 10044f38 .word 0x10044f38 +1002ca4c: 10043ac4 .word 0x10043ac4 + +1002ca50 : +1002ca50: b537 push {r0, r1, r2, r4, r5, lr} +1002ca52: f241 63c8 movw r3, #5832 ; 0x16c8 +1002ca56: 58c5 ldr r5, [r0, r3] +1002ca58: 4b11 ldr r3, [pc, #68] ; (1002caa0 ) +1002ca5a: 4604 mov r4, r0 +1002ca5c: e88d 0018 stmia.w sp, {r3, r4} +1002ca60: f605 6028 addw r0, r5, #3624 ; 0xe28 +1002ca64: 490f ldr r1, [pc, #60] ; (1002caa4 ) +1002ca66: f44f 7200 mov.w r2, #512 ; 0x200 +1002ca6a: 2306 movs r3, #6 +1002ca6c: f7ea fede bl 1001782c +1002ca70: 4b0d ldr r3, [pc, #52] ; (1002caa8 ) +1002ca72: f605 6058 addw r0, r5, #3672 ; 0xe58 +1002ca76: e88d 0018 stmia.w sp, {r3, r4} +1002ca7a: 490c ldr r1, [pc, #48] ; (1002caac ) +1002ca7c: f44f 7280 mov.w r2, #256 ; 0x100 +1002ca80: 2301 movs r3, #1 +1002ca82: f7ea fed3 bl 1001782c +1002ca86: 4b0a ldr r3, [pc, #40] ; (1002cab0 ) +1002ca88: f505 6067 add.w r0, r5, #3696 ; 0xe70 +1002ca8c: e88d 0018 stmia.w sp, {r3, r4} +1002ca90: 4908 ldr r1, [pc, #32] ; (1002cab4 ) +1002ca92: f44f 7280 mov.w r2, #256 ; 0x100 +1002ca96: 2303 movs r3, #3 +1002ca98: f7ea fec8 bl 1001782c +1002ca9c: b003 add sp, #12 +1002ca9e: bd30 pop {r4, r5, pc} +1002caa0: 1002c55d .word 0x1002c55d +1002caa4: 10041831 .word 0x10041831 +1002caa8: 1002c5b5 .word 0x1002c5b5 +1002caac: 1004184c .word 0x1004184c +1002cab0: 1002c601 .word 0x1002c601 +1002cab4: 1004186a .word 0x1004186a + +1002cab8 : +1002cab8: b510 push {r4, lr} +1002caba: f241 63c8 movw r3, #5832 ; 0x16c8 +1002cabe: 58c4 ldr r4, [r0, r3] +1002cac0: f604 6028 addw r0, r4, #3624 ; 0xe28 +1002cac4: f7ea fec0 bl 10017848 +1002cac8: f604 6058 addw r0, r4, #3672 ; 0xe58 +1002cacc: f7ea febc bl 10017848 +1002cad0: f504 6067 add.w r0, r4, #3696 ; 0xe70 +1002cad4: e8bd 4010 ldmia.w sp!, {r4, lr} +1002cad8: f7ea beb6 b.w 10017848 + +1002cadc : +1002cadc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002cae0: 461f mov r7, r3 +1002cae2: 18d3 adds r3, r2, r3 +1002cae4: b089 sub sp, #36 ; 0x24 +1002cae6: f5b3 7f00 cmp.w r3, #512 ; 0x200 +1002caea: 4606 mov r6, r0 +1002caec: 4693 mov fp, r2 +1002caee: f89d 504c ldrb.w r5, [sp, #76] ; 0x4c +1002caf2: f300 80a6 bgt.w 1002cc42 +1002caf6: f44f 7000 mov.w r0, #512 ; 0x200 +1002cafa: f7ea fe59 bl 100177b0 +1002cafe: 4681 mov r9, r0 +1002cb00: 2800 cmp r0, #0 +1002cb02: f000 809e beq.w 1002cc42 +1002cb06: 21ff movs r1, #255 ; 0xff +1002cb08: f44f 7200 mov.w r2, #512 ; 0x200 +1002cb0c: f7ea fca0 bl 10017450 +1002cb10: b925 cbnz r5, 1002cb1c +1002cb12: 4b4d ldr r3, [pc, #308] ; (1002cc48 ) +1002cb14: 681a ldr r2, [r3, #0] +1002cb16: f422 7240 bic.w r2, r2, #768 ; 0x300 +1002cb1a: 601a str r2, [r3, #0] +1002cb1c: 2400 movs r4, #0 +1002cb1e: 4630 mov r0, r6 +1002cb20: 4621 mov r1, r4 +1002cb22: f10d 0219 add.w r2, sp, #25 +1002cb26: 462b mov r3, r5 +1002cb28: f00a fc2a bl 10037380 +1002cb2c: f89d 8019 ldrb.w r8, [sp, #25] +1002cb30: f104 0a01 add.w sl, r4, #1 +1002cb34: f1b8 0fff cmp.w r8, #255 ; 0xff +1002cb38: fa1f fa8a uxth.w sl, sl +1002cb3c: d05f beq.n 1002cbfe +1002cb3e: f008 031f and.w r3, r8, #31 +1002cb42: 2b0f cmp r3, #15 +1002cb44: d118 bne.n 1002cb78 +1002cb46: 462b mov r3, r5 +1002cb48: 4630 mov r0, r6 +1002cb4a: 4651 mov r1, sl +1002cb4c: f10d 021a add.w r2, sp, #26 +1002cb50: f00a fc16 bl 10037380 +1002cb54: f89d 301a ldrb.w r3, [sp, #26] +1002cb58: 3402 adds r4, #2 +1002cb5a: f003 0c0f and.w ip, r3, #15 +1002cb5e: f1bc 0f0f cmp.w ip, #15 +1002cb62: b2a4 uxth r4, r4 +1002cb64: d048 beq.n 1002cbf8 +1002cb66: f003 03f0 and.w r3, r3, #240 ; 0xf0 +1002cb6a: ea4f 1858 mov.w r8, r8, lsr #5 +1002cb6e: ea48 0353 orr.w r3, r8, r3, lsr #1 +1002cb72: 2b3f cmp r3, #63 ; 0x3f +1002cb74: d83a bhi.n 1002cbec +1002cb76: e004 b.n 1002cb82 +1002cb78: ea4f 1318 mov.w r3, r8, lsr #4 +1002cb7c: f008 0c0f and.w ip, r8, #15 +1002cb80: 4654 mov r4, sl +1002cb82: 00db lsls r3, r3, #3 +1002cb84: 9305 str r3, [sp, #20] +1002cb86: f04f 0800 mov.w r8, #0 +1002cb8a: 9905 ldr r1, [sp, #20] +1002cb8c: eb01 0348 add.w r3, r1, r8, lsl #1 +1002cb90: b29b uxth r3, r3 +1002cb92: 9304 str r3, [sp, #16] +1002cb94: fa4c f308 asr.w r3, ip, r8 +1002cb98: 07db lsls r3, r3, #31 +1002cb9a: d421 bmi.n 1002cbe0 +1002cb9c: 4621 mov r1, r4 +1002cb9e: f10d 021b add.w r2, sp, #27 +1002cba2: 462b mov r3, r5 +1002cba4: 4630 mov r0, r6 +1002cba6: f8cd c00c str.w ip, [sp, #12] +1002cbaa: f104 0a01 add.w sl, r4, #1 +1002cbae: f00a fbe7 bl 10037380 +1002cbb2: f89d 301b ldrb.w r3, [sp, #27] +1002cbb6: 9a04 ldr r2, [sp, #16] +1002cbb8: fa1f fa8a uxth.w sl, sl +1002cbbc: f809 3002 strb.w r3, [r9, r2] +1002cbc0: 4630 mov r0, r6 +1002cbc2: f10d 021b add.w r2, sp, #27 +1002cbc6: 462b mov r3, r5 +1002cbc8: 4651 mov r1, sl +1002cbca: f00a fbd9 bl 10037380 +1002cbce: 9b04 ldr r3, [sp, #16] +1002cbd0: f89d 201b ldrb.w r2, [sp, #27] +1002cbd4: 444b add r3, r9 +1002cbd6: 705a strb r2, [r3, #1] +1002cbd8: 3402 adds r4, #2 +1002cbda: f8dd c00c ldr.w ip, [sp, #12] +1002cbde: b2a4 uxth r4, r4 +1002cbe0: f108 0801 add.w r8, r8, #1 +1002cbe4: f1b8 0f04 cmp.w r8, #4 +1002cbe8: d1cf bne.n 1002cb8a +1002cbea: e005 b.n 1002cbf8 +1002cbec: 4660 mov r0, ip +1002cbee: f00a fbab bl 10037348 +1002cbf2: eb04 0040 add.w r0, r4, r0, lsl #1 +1002cbf6: b284 uxth r4, r0 +1002cbf8: 2cff cmp r4, #255 ; 0xff +1002cbfa: d990 bls.n 1002cb1e +1002cbfc: 46a2 mov sl, r4 +1002cbfe: 2300 movs r3, #0 +1002cc00: b29a uxth r2, r3 +1002cc02: 42ba cmp r2, r7 +1002cc04: d206 bcs.n 1002cc14 +1002cc06: eb09 020b add.w r2, r9, fp +1002cc0a: 5cd2 ldrb r2, [r2, r3] +1002cc0c: 9912 ldr r1, [sp, #72] ; 0x48 +1002cc0e: 54ca strb r2, [r1, r3] +1002cc10: 3301 adds r3, #1 +1002cc12: e7f5 b.n 1002cc00 +1002cc14: 9500 str r5, [sp, #0] +1002cc16: 4630 mov r0, r6 +1002cc18: 2100 movs r1, #0 +1002cc1a: 2203 movs r2, #3 +1002cc1c: ab07 add r3, sp, #28 +1002cc1e: f10a 3aff add.w sl, sl, #4294967295 +1002cc22: f00a fba3 bl 1003736c +1002cc26: f8ad a01e strh.w sl, [sp, #30] +1002cc2a: b92d cbnz r5, 1002cc38 +1002cc2c: 4630 mov r0, r6 +1002cc2e: 213b movs r1, #59 ; 0x3b +1002cc30: f10d 021e add.w r2, sp, #30 +1002cc34: f005 fc5d bl 100324f2 +1002cc38: 4648 mov r0, r9 +1002cc3a: f44f 7100 mov.w r1, #512 ; 0x200 +1002cc3e: f7ea fbf4 bl 1001742a +1002cc42: b009 add sp, #36 ; 0x24 +1002cc44: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1002cc48: 400000ec .word 0x400000ec + +1002cc4c : +1002cc4c: 2901 cmp r1, #1 +1002cc4e: d104 bne.n 1002cc5a +1002cc50: 4b02 ldr r3, [pc, #8] ; (1002cc5c ) +1002cc52: e9d3 0102 ldrd r0, r1, [r3, #8] +1002cc56: e9c2 0100 strd r0, r1, [r2] +1002cc5a: 4770 bx lr +1002cc5c: 10000720 .word 0x10000720 + +1002cc60 : +1002cc60: b570 push {r4, r5, r6, lr} +1002cc62: 4606 mov r6, r0 +1002cc64: b086 sub sp, #24 +1002cc66: 2001 movs r0, #1 +1002cc68: f7ea f80c bl 10016c84 +1002cc6c: 2202 movs r2, #2 +1002cc6e: f10d 0306 add.w r3, sp, #6 +1002cc72: a803 add r0, sp, #12 +1002cc74: f44f 4120 mov.w r1, #40960 ; 0xa000 +1002cc78: f7ea ffc0 bl 10017bfc +1002cc7c: f8bd 2006 ldrh.w r2, [sp, #6] +1002cc80: f248 1395 movw r3, #33173 ; 0x8195 +1002cc84: 429a cmp r2, r3 +1002cc86: d004 beq.n 1002cc92 +1002cc88: 2001 movs r0, #1 +1002cc8a: f7ea f815 bl 10016cb8 +1002cc8e: 2000 movs r0, #0 +1002cc90: e034 b.n 1002ccfc +1002cc92: 2402 movs r4, #2 +1002cc94: ab02 add r3, sp, #8 +1002cc96: a803 add r0, sp, #12 +1002cc98: f504 4120 add.w r1, r4, #40960 ; 0xa000 +1002cc9c: 2202 movs r2, #2 +1002cc9e: f7ea ffad bl 10017bfc +1002cca2: f8bd 3008 ldrh.w r3, [sp, #8] +1002cca6: f64f 75ff movw r5, #65535 ; 0xffff +1002ccaa: 42ab cmp r3, r5 +1002ccac: d104 bne.n 1002ccb8 +1002ccae: 2001 movs r0, #1 +1002ccb0: f7ea f802 bl 10016cb8 +1002ccb4: 2001 movs r0, #1 +1002ccb6: e021 b.n 1002ccfc +1002ccb8: f504 4120 add.w r1, r4, #40960 ; 0xa000 +1002ccbc: 2202 movs r2, #2 +1002ccbe: a803 add r0, sp, #12 +1002ccc0: 3102 adds r1, #2 +1002ccc2: f10d 030a add.w r3, sp, #10 +1002ccc6: f7ea ff99 bl 10017bfc +1002ccca: f8bd 200a ldrh.w r2, [sp, #10] +1002ccce: 42aa cmp r2, r5 +1002ccd0: d0ed beq.n 1002ccae +1002ccd2: f8bd 3008 ldrh.w r3, [sp, #8] +1002ccd6: 1899 adds r1, r3, r2 +1002ccd8: f5b1 5f80 cmp.w r1, #4096 ; 0x1000 +1002ccdc: dcd4 bgt.n 1002cc88 +1002ccde: f504 4120 add.w r1, r4, #40960 ; 0xa000 +1002cce2: 4433 add r3, r6 +1002cce4: a803 add r0, sp, #12 +1002cce6: 3104 adds r1, #4 +1002cce8: f7ea ff88 bl 10017bfc +1002ccec: f8bd 300a ldrh.w r3, [sp, #10] +1002ccf0: 3304 adds r3, #4 +1002ccf2: 441c add r4, r3 +1002ccf4: f5b4 5f80 cmp.w r4, #4096 ; 0x1000 +1002ccf8: d3cc bcc.n 1002cc94 +1002ccfa: e7d8 b.n 1002ccae +1002ccfc: b006 add sp, #24 +1002ccfe: bd70 pop {r4, r5, r6, pc} + +1002cd00 : +1002cd00: b51f push {r0, r1, r2, r3, r4, lr} +1002cd02: f241 63c8 movw r3, #5832 ; 0x16c8 +1002cd06: 58c3 ldr r3, [r0, r3] +1002cd08: f893 303e ldrb.w r3, [r3, #62] ; 0x3e +1002cd0c: 2bfb cmp r3, #251 ; 0xfb +1002cd0e: d015 beq.n 1002cd3c +1002cd10: 2001 movs r0, #1 +1002cd12: f7e9 ffb7 bl 10016c84 +1002cd16: a801 add r0, sp, #4 +1002cd18: f44f 4120 mov.w r1, #40960 ; 0xa000 +1002cd1c: f7ea ff26 bl 10017b6c +1002cd20: ab04 add r3, sp, #16 +1002cd22: f248 1295 movw r2, #33173 ; 0x8195 +1002cd26: f823 2d0e strh.w r2, [r3, #-14]! +1002cd2a: a801 add r0, sp, #4 +1002cd2c: f44f 4120 mov.w r1, #40960 ; 0xa000 +1002cd30: 2202 movs r2, #2 +1002cd32: f7ea ffcd bl 10017cd0 +1002cd36: 2001 movs r0, #1 +1002cd38: f7e9 ffbe bl 10016cb8 +1002cd3c: b005 add sp, #20 +1002cd3e: f85d fb04 ldr.w pc, [sp], #4 + ... + +1002cd44 : +1002cd44: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1002cd48: b088 sub sp, #32 +1002cd4a: f89d 5040 ldrb.w r5, [sp, #64] ; 0x40 +1002cd4e: 2700 movs r7, #0 +1002cd50: 4699 mov r9, r3 +1002cd52: ab08 add r3, sp, #32 +1002cd54: f823 7d0c strh.w r7, [r3, #-12]! +1002cd58: 4604 mov r4, r0 +1002cd5a: 4690 mov r8, r2 +1002cd5c: 468a mov sl, r1 +1002cd5e: 2203 movs r2, #3 +1002cd60: 4639 mov r1, r7 +1002cd62: 9500 str r5, [sp, #0] +1002cd64: f00a fb02 bl 1003736c +1002cd68: 4620 mov r0, r4 +1002cd6a: 4639 mov r1, r7 +1002cd6c: 462a mov r2, r5 +1002cd6e: f00a fae5 bl 1003733c +1002cd72: 2604 movs r6, #4 +1002cd74: 4643 mov r3, r8 +1002cd76: 07da lsls r2, r3, #31 +1002cd78: f106 36ff add.w r6, r6, #4294967295 +1002cd7c: bf58 it pl +1002cd7e: 3702 addpl r7, #2 +1002cd80: b2b6 uxth r6, r6 +1002cd82: bf58 it pl +1002cd84: b2bf uxthpl r7, r7 +1002cd86: 085b lsrs r3, r3, #1 +1002cd88: 2e00 cmp r6, #0 +1002cd8a: d1f4 bne.n 1002cd76 +1002cd8c: 3702 adds r7, #2 +1002cd8e: b2bf uxth r7, r7 +1002cd90: f8bd 3014 ldrh.w r3, [sp, #20] +1002cd94: 4438 add r0, r7 +1002cd96: 4298 cmp r0, r3 +1002cd98: db03 blt.n 1002cda2 +1002cd9a: 4888 ldr r0, [pc, #544] ; (1002cfbc ) +1002cd9c: f7ed fef0 bl 1001ab80 +1002cda0: e042 b.n 1002ce28 +1002cda2: f10d 0016 add.w r0, sp, #22 +1002cda6: 21ff movs r1, #255 ; 0xff +1002cda8: 2208 movs r2, #8 +1002cdaa: f7ea fb51 bl 10017450 +1002cdae: 4649 mov r1, r9 +1002cdb0: f10d 0216 add.w r2, sp, #22 +1002cdb4: 4640 mov r0, r8 +1002cdb6: f88d a014 strb.w sl, [sp, #20] +1002cdba: f88d 8015 strb.w r8, [sp, #21] +1002cdbe: f00a fb1d bl 100373fc +1002cdc2: f89d 0015 ldrb.w r0, [sp, #21] +1002cdc6: f00a fabf bl 10037348 +1002cdca: 4631 mov r1, r6 +1002cdcc: f88d 001e strb.w r0, [sp, #30] +1002cdd0: 2203 movs r2, #3 +1002cdd2: 4620 mov r0, r4 +1002cdd4: ab04 add r3, sp, #16 +1002cdd6: 9500 str r5, [sp, #0] +1002cdd8: f8ad 600e strh.w r6, [sp, #14] +1002cddc: f8ad 6010 strh.w r6, [sp, #16] +1002cde0: f8ad 6012 strh.w r6, [sp, #18] +1002cde4: f88d 600d strb.w r6, [sp, #13] +1002cde8: f00a fac0 bl 1003736c +1002cdec: 9500 str r5, [sp, #0] +1002cdee: 4620 mov r0, r4 +1002cdf0: 4631 mov r1, r6 +1002cdf2: 2206 movs r2, #6 +1002cdf4: f10d 0312 add.w r3, sp, #18 +1002cdf8: f00a fab8 bl 1003736c +1002cdfc: b92d cbnz r5, 1002ce0a +1002cdfe: 4620 mov r0, r4 +1002ce00: 213b movs r1, #59 ; 0x3b +1002ce02: f10d 020e add.w r2, sp, #14 +1002ce06: f005 fb7b bl 10032500 +1002ce0a: f8bd 200e ldrh.w r2, [sp, #14] +1002ce0e: f8bd 3012 ldrh.w r3, [sp, #18] +1002ce12: fbb2 f1f3 udiv r1, r2, r3 +1002ce16: fb03 2111 mls r1, r3, r1, r2 +1002ce1a: f8bd 3010 ldrh.w r3, [sp, #16] +1002ce1e: b289 uxth r1, r1 +1002ce20: 428b cmp r3, r1 +1002ce22: f8ad 100e strh.w r1, [sp, #14] +1002ce26: d801 bhi.n 1002ce2c +1002ce28: 2000 movs r0, #0 +1002ce2a: e0c4 b.n 1002cfb6 +1002ce2c: 4620 mov r0, r4 +1002ce2e: f10d 020d add.w r2, sp, #13 +1002ce32: 462b mov r3, r5 +1002ce34: f00a faa4 bl 10037380 +1002ce38: b118 cbz r0, 1002ce42 +1002ce3a: f89d 300d ldrb.w r3, [sp, #13] +1002ce3e: 2bff cmp r3, #255 ; 0xff +1002ce40: d1f2 bne.n 1002ce28 +1002ce42: f89d 3014 ldrb.w r3, [sp, #20] +1002ce46: f8bd 600e ldrh.w r6, [sp, #14] +1002ce4a: 2b0f cmp r3, #15 +1002ce4c: f04f 0700 mov.w r7, #0 +1002ce50: d96b bls.n 1002cf2a +1002ce52: f10d 0312 add.w r3, sp, #18 +1002ce56: 9500 str r5, [sp, #0] +1002ce58: 4620 mov r0, r4 +1002ce5a: 4639 mov r1, r7 +1002ce5c: 2202 movs r2, #2 +1002ce5e: f8ad 7012 strh.w r7, [sp, #18] +1002ce62: f88d 7010 strb.w r7, [sp, #16] +1002ce66: f00a fa81 bl 1003736c +1002ce6a: f8bd 3012 ldrh.w r3, [sp, #18] +1002ce6e: 42b3 cmp r3, r6 +1002ce70: d9da bls.n 1002ce28 +1002ce72: f89d 9014 ldrb.w r9, [sp, #20] +1002ce76: ea4f 1949 mov.w r9, r9, lsl #5 +1002ce7a: f049 090f orr.w r9, r9, #15 +1002ce7e: fa5f f989 uxtb.w r9, r9 +1002ce82: 4631 mov r1, r6 +1002ce84: 464a mov r2, r9 +1002ce86: 462b mov r3, r5 +1002ce88: 4620 mov r0, r4 +1002ce8a: f00a fa93 bl 100373b4 +1002ce8e: 4620 mov r0, r4 +1002ce90: 21ec movs r1, #236 ; 0xec +1002ce92: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1002ce96: 2300 movs r3, #0 +1002ce98: f001 fea5 bl 1002ebe6 +1002ce9c: 4631 mov r1, r6 +1002ce9e: aa04 add r2, sp, #16 +1002cea0: 462b mov r3, r5 +1002cea2: 4620 mov r0, r4 +1002cea4: f00a fa6c bl 10037380 +1002cea8: 2301 movs r3, #1 +1002ceaa: 4620 mov r0, r4 +1002ceac: 21ec movs r1, #236 ; 0xec +1002ceae: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1002ceb2: f001 fe98 bl 1002ebe6 +1002ceb6: f89d 3010 ldrb.w r3, [sp, #16] +1002ceba: fa5f f887 uxtb.w r8, r7 +1002cebe: 454b cmp r3, r9 +1002cec0: d003 beq.n 1002ceca +1002cec2: 3701 adds r7, #1 +1002cec4: 2f05 cmp r7, #5 +1002cec6: d1dc bne.n 1002ce82 +1002cec8: e7ae b.n 1002ce28 +1002ceca: f89d 7014 ldrb.w r7, [sp, #20] +1002cece: f89d 3015 ldrb.w r3, [sp, #21] +1002ced2: 3601 adds r6, #1 +1002ced4: f007 0778 and.w r7, r7, #120 ; 0x78 +1002ced8: b2b6 uxth r6, r6 +1002ceda: ea43 0747 orr.w r7, r3, r7, lsl #1 +1002cede: 4631 mov r1, r6 +1002cee0: 463a mov r2, r7 +1002cee2: 462b mov r3, r5 +1002cee4: 4620 mov r0, r4 +1002cee6: f00a fa65 bl 100373b4 +1002ceea: 4620 mov r0, r4 +1002ceec: 21ec movs r1, #236 ; 0xec +1002ceee: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1002cef2: 2300 movs r3, #0 +1002cef4: f001 fe77 bl 1002ebe6 +1002cef8: 4631 mov r1, r6 +1002cefa: aa04 add r2, sp, #16 +1002cefc: 462b mov r3, r5 +1002cefe: 4620 mov r0, r4 +1002cf00: f00a fa3e bl 10037380 +1002cf04: 2301 movs r3, #1 +1002cf06: 4620 mov r0, r4 +1002cf08: 21ec movs r1, #236 ; 0xec +1002cf0a: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1002cf0e: f001 fe6a bl 1002ebe6 +1002cf12: f89d 3010 ldrb.w r3, [sp, #16] +1002cf16: 42bb cmp r3, r7 +1002cf18: d034 beq.n 1002cf84 +1002cf1a: f108 0301 add.w r3, r8, #1 +1002cf1e: f1b8 0f03 cmp.w r8, #3 +1002cf22: b2db uxtb r3, r3 +1002cf24: d880 bhi.n 1002ce28 +1002cf26: 4698 mov r8, r3 +1002cf28: e7d9 b.n 1002cede +1002cf2a: f89d 8015 ldrb.w r8, [sp, #21] +1002cf2e: f88d 7012 strb.w r7, [sp, #18] +1002cf32: ea48 1803 orr.w r8, r8, r3, lsl #4 +1002cf36: fa5f f888 uxtb.w r8, r8 +1002cf3a: 2705 movs r7, #5 +1002cf3c: 4631 mov r1, r6 +1002cf3e: 4642 mov r2, r8 +1002cf40: 462b mov r3, r5 +1002cf42: 4620 mov r0, r4 +1002cf44: f00a fa36 bl 100373b4 +1002cf48: 4620 mov r0, r4 +1002cf4a: 21ec movs r1, #236 ; 0xec +1002cf4c: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1002cf50: 2300 movs r3, #0 +1002cf52: f001 fe48 bl 1002ebe6 +1002cf56: 4631 mov r1, r6 +1002cf58: f10d 0212 add.w r2, sp, #18 +1002cf5c: 462b mov r3, r5 +1002cf5e: 4620 mov r0, r4 +1002cf60: f00a fa0e bl 10037380 +1002cf64: 2301 movs r3, #1 +1002cf66: 4620 mov r0, r4 +1002cf68: 21ec movs r1, #236 ; 0xec +1002cf6a: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1002cf6e: f001 fe3a bl 1002ebe6 +1002cf72: f89d 3012 ldrb.w r3, [sp, #18] +1002cf76: 4543 cmp r3, r8 +1002cf78: d004 beq.n 1002cf84 +1002cf7a: 3f01 subs r7, #1 +1002cf7c: f017 07ff ands.w r7, r7, #255 ; 0xff +1002cf80: d1dc bne.n 1002cf3c +1002cf82: e751 b.n 1002ce28 +1002cf84: 1c71 adds r1, r6, #1 +1002cf86: f89d 2015 ldrb.w r2, [sp, #21] +1002cf8a: 9500 str r5, [sp, #0] +1002cf8c: 4620 mov r0, r4 +1002cf8e: b289 uxth r1, r1 +1002cf90: f10d 0316 add.w r3, sp, #22 +1002cf94: f00a fa4b bl 1003742e +1002cf98: 280f cmp r0, #15 +1002cf9a: 4602 mov r2, r0 +1002cf9c: d00a beq.n 1002cfb4 +1002cf9e: f89d 1014 ldrb.w r1, [sp, #20] +1002cfa2: 9500 str r5, [sp, #0] +1002cfa4: 4620 mov r0, r4 +1002cfa6: f10d 0316 add.w r3, sp, #22 +1002cfaa: f00a fa1d bl 100373e8 +1002cfae: 2800 cmp r0, #0 +1002cfb0: f43f af3a beq.w 1002ce28 +1002cfb4: 2001 movs r0, #1 +1002cfb6: b008 add sp, #32 +1002cfb8: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1002cfbc: 10041887 .word 0x10041887 + +1002cfc0 : +1002cfc0: b5f0 push {r4, r5, r6, r7, lr} +1002cfc2: 2300 movs r3, #0 +1002cfc4: b085 sub sp, #20 +1002cfc6: 4605 mov r5, r0 +1002cfc8: f8ad 300e strh.w r3, [sp, #14] +1002cfcc: 4614 mov r4, r2 +1002cfce: b922 cbnz r2, 1002cfda +1002cfd0: 213b movs r1, #59 ; 0x3b +1002cfd2: f10d 020e add.w r2, sp, #14 +1002cfd6: f005 fa93 bl 10032500 +1002cfda: f8bd 600e ldrh.w r6, [sp, #14] +1002cfde: b924 cbnz r4, 1002cfea +1002cfe0: 4b2e ldr r3, [pc, #184] ; (1002d09c ) +1002cfe2: 681a ldr r2, [r3, #0] +1002cfe4: f422 7240 bic.w r2, r2, #768 ; 0x300 +1002cfe8: 601a str r2, [r3, #0] +1002cfea: 2700 movs r7, #0 +1002cfec: f8bd 100e ldrh.w r1, [sp, #14] +1002cff0: 29ff cmp r1, #255 ; 0xff +1002cff2: d80b bhi.n 1002d00c +1002cff4: 4628 mov r0, r5 +1002cff6: f10d 020d add.w r2, sp, #13 +1002cffa: 4623 mov r3, r4 +1002cffc: f00a f9c0 bl 10037380 +1002d000: 2800 cmp r0, #0 +1002d002: d03f beq.n 1002d084 +1002d004: f89d 000d ldrb.w r0, [sp, #13] +1002d008: 28ff cmp r0, #255 ; 0xff +1002d00a: d108 bne.n 1002d01e +1002d00c: 2c00 cmp r4, #0 +1002d00e: d141 bne.n 1002d094 +1002d010: 4628 mov r0, r5 +1002d012: 213b movs r1, #59 ; 0x3b +1002d014: f10d 020e add.w r2, sp, #14 +1002d018: f005 fa6b bl 100324f2 +1002d01c: e03a b.n 1002d094 +1002d01e: b176 cbz r6, 1002d03e +1002d020: f8bd 300e ldrh.w r3, [sp, #14] +1002d024: 42b3 cmp r3, r6 +1002d026: d10a bne.n 1002d03e +1002d028: 3701 adds r7, #1 +1002d02a: 23ff movs r3, #255 ; 0xff +1002d02c: 2f03 cmp r7, #3 +1002d02e: f88d 300d strb.w r3, [sp, #13] +1002d032: d827 bhi.n 1002d084 +1002d034: d1da bne.n 1002cfec +1002d036: 2600 movs r6, #0 +1002d038: f8ad 600e strh.w r6, [sp, #14] +1002d03c: e7d6 b.n 1002cfec +1002d03e: f000 031f and.w r3, r0, #31 +1002d042: 2b0f cmp r3, #15 +1002d044: d112 bne.n 1002d06c +1002d046: f8bd 100e ldrh.w r1, [sp, #14] +1002d04a: 4628 mov r0, r5 +1002d04c: 3101 adds r1, #1 +1002d04e: b289 uxth r1, r1 +1002d050: f10d 020d add.w r2, sp, #13 +1002d054: 4623 mov r3, r4 +1002d056: f8ad 100e strh.w r1, [sp, #14] +1002d05a: f00a f991 bl 10037380 +1002d05e: f89d 000d ldrb.w r0, [sp, #13] +1002d062: f000 000f and.w r0, r0, #15 +1002d066: 280f cmp r0, #15 +1002d068: d102 bne.n 1002d070 +1002d06a: e7bf b.n 1002cfec +1002d06c: f000 000f and.w r0, r0, #15 +1002d070: f00a f96a bl 10037348 +1002d074: f8bd 300e ldrh.w r3, [sp, #14] +1002d078: 3301 adds r3, #1 +1002d07a: eb03 0040 add.w r0, r3, r0, lsl #1 +1002d07e: f8ad 000e strh.w r0, [sp, #14] +1002d082: e7b3 b.n 1002cfec +1002d084: 9400 str r4, [sp, #0] +1002d086: 4628 mov r0, r5 +1002d088: 2100 movs r1, #0 +1002d08a: 2203 movs r2, #3 +1002d08c: f10d 030e add.w r3, sp, #14 +1002d090: f00a f96c bl 1003736c +1002d094: f8bd 000e ldrh.w r0, [sp, #14] +1002d098: b005 add sp, #20 +1002d09a: bdf0 pop {r4, r5, r6, r7, pc} +1002d09c: 400000ec .word 0x400000ec + +1002d0a0 : +1002d0a0: b5f0 push {r4, r5, r6, r7, lr} +1002d0a2: 461f mov r7, r3 +1002d0a4: f241 63c8 movw r3, #5832 ; 0x16c8 +1002d0a8: 58c3 ldr r3, [r0, r3] +1002d0aa: b089 sub sp, #36 ; 0x24 +1002d0ac: f893 303e ldrb.w r3, [r3, #62] ; 0x3e +1002d0b0: 4605 mov r5, r0 +1002d0b2: 2bfb cmp r3, #251 ; 0xfb +1002d0b4: f8ad 1006 strh.w r1, [sp, #6] +1002d0b8: f8ad 2004 strh.w r2, [sp, #4] +1002d0bc: d101 bne.n 1002d0c2 +1002d0be: 2000 movs r0, #0 +1002d0c0: e0d3 b.n 1002d26a +1002d0c2: f8bd 2006 ldrh.w r2, [sp, #6] +1002d0c6: f8bd 3004 ldrh.w r3, [sp, #4] +1002d0ca: 4413 add r3, r2 +1002d0cc: f5b3 5f80 cmp.w r3, #4096 ; 0x1000 +1002d0d0: dcf5 bgt.n 1002d0be +1002d0d2: 2001 movs r0, #1 +1002d0d4: f7e9 fdd6 bl 10016c84 +1002d0d8: 2202 movs r2, #2 +1002d0da: f10d 030e add.w r3, sp, #14 +1002d0de: f44f 4120 mov.w r1, #40960 ; 0xa000 +1002d0e2: a805 add r0, sp, #20 +1002d0e4: f7ea fd8a bl 10017bfc +1002d0e8: 2001 movs r0, #1 +1002d0ea: f7e9 fde5 bl 10016cb8 +1002d0ee: f8bd 200e ldrh.w r2, [sp, #14] +1002d0f2: f248 1395 movw r3, #33173 ; 0x8195 +1002d0f6: 429a cmp r2, r3 +1002d0f8: d002 beq.n 1002d100 +1002d0fa: 4628 mov r0, r5 +1002d0fc: f7ff fe00 bl 1002cd00 +1002d100: 2001 movs r0, #1 +1002d102: f7e9 fdbf bl 10016c84 +1002d106: 2202 movs r2, #2 +1002d108: ab04 add r3, sp, #16 +1002d10a: a805 add r0, sp, #20 +1002d10c: f24a 0102 movw r1, #40962 ; 0xa002 +1002d110: f7ea fd74 bl 10017bfc +1002d114: f8bd 2010 ldrh.w r2, [sp, #16] +1002d118: f64f 73ff movw r3, #65535 ; 0xffff +1002d11c: 429a cmp r2, r3 +1002d11e: f04f 0402 mov.w r4, #2 +1002d122: d013 beq.n 1002d14c +1002d124: f504 4120 add.w r1, r4, #40960 ; 0xa000 +1002d128: 2202 movs r2, #2 +1002d12a: f10d 0312 add.w r3, sp, #18 +1002d12e: a805 add r0, sp, #20 +1002d130: 3102 adds r1, #2 +1002d132: f7ea fd63 bl 10017bfc +1002d136: f8bd 2012 ldrh.w r2, [sp, #18] +1002d13a: f64f 73ff movw r3, #65535 ; 0xffff +1002d13e: 429a cmp r2, r3 +1002d140: d004 beq.n 1002d14c +1002d142: 3204 adds r2, #4 +1002d144: 4414 add r4, r2 +1002d146: f5b4 5f80 cmp.w r4, #4096 ; 0x1000 +1002d14a: d3eb bcc.n 1002d124 +1002d14c: 2001 movs r0, #1 +1002d14e: f7e9 fdb3 bl 10016cb8 +1002d152: f8bd 3004 ldrh.w r3, [sp, #4] +1002d156: 3304 adds r3, #4 +1002d158: 4423 add r3, r4 +1002d15a: f5b3 5f80 cmp.w r3, #4096 ; 0x1000 +1002d15e: d964 bls.n 1002d22a +1002d160: f44f 7000 mov.w r0, #512 ; 0x200 +1002d164: f7ea fb34 bl 100177d0 +1002d168: 21ff movs r1, #255 ; 0xff +1002d16a: 4606 mov r6, r0 +1002d16c: f44f 7200 mov.w r2, #512 ; 0x200 +1002d170: f7ea f96e bl 10017450 +1002d174: 2e00 cmp r6, #0 +1002d176: d0a2 beq.n 1002d0be +1002d178: f241 63c8 movw r3, #5832 ; 0x16c8 +1002d17c: 58eb ldr r3, [r5, r3] +1002d17e: f893 303e ldrb.w r3, [r3, #62] ; 0x3e +1002d182: 2bfb cmp r3, #251 ; 0xfb +1002d184: d104 bne.n 1002d190 +1002d186: 4628 mov r0, r5 +1002d188: f7ff fdba bl 1002cd00 +1002d18c: 2402 movs r4, #2 +1002d18e: e047 b.n 1002d220 +1002d190: 4630 mov r0, r6 +1002d192: f7ff fd65 bl 1002cc60 +1002d196: 2800 cmp r0, #0 +1002d198: d0f5 beq.n 1002d186 +1002d19a: 4628 mov r0, r5 +1002d19c: f7ff fdb0 bl 1002cd00 +1002d1a0: 2402 movs r4, #2 +1002d1a2: 2500 movs r5, #0 +1002d1a4: 5d73 ldrb r3, [r6, r5] +1002d1a6: 2bff cmp r3, #255 ; 0xff +1002d1a8: d035 beq.n 1002d216 +1002d1aa: 2301 movs r3, #1 +1002d1ac: f8ad 5010 strh.w r5, [sp, #16] +1002d1b0: f8ad 3012 strh.w r3, [sp, #18] +1002d1b4: 1c6a adds r2, r5, #1 +1002d1b6: b292 uxth r2, r2 +1002d1b8: 5cb3 ldrb r3, [r6, r2] +1002d1ba: 2bff cmp r3, #255 ; 0xff +1002d1bc: d006 beq.n 1002d1cc +1002d1be: f8bd 3012 ldrh.w r3, [sp, #18] +1002d1c2: 4615 mov r5, r2 +1002d1c4: 3301 adds r3, #1 +1002d1c6: f8ad 3012 strh.w r3, [sp, #18] +1002d1ca: e7f3 b.n 1002d1b4 +1002d1cc: 2001 movs r0, #1 +1002d1ce: f7e9 fd59 bl 10016c84 +1002d1d2: f504 4120 add.w r1, r4, #40960 ; 0xa000 +1002d1d6: 2202 movs r2, #2 +1002d1d8: ab04 add r3, sp, #16 +1002d1da: a805 add r0, sp, #20 +1002d1dc: f7ea fd78 bl 10017cd0 +1002d1e0: f504 4120 add.w r1, r4, #40960 ; 0xa000 +1002d1e4: 3102 adds r1, #2 +1002d1e6: 2202 movs r2, #2 +1002d1e8: f10d 0312 add.w r3, sp, #18 +1002d1ec: a805 add r0, sp, #20 +1002d1ee: f7ea fd6f bl 10017cd0 +1002d1f2: f8bd 3010 ldrh.w r3, [sp, #16] +1002d1f6: f504 4120 add.w r1, r4, #40960 ; 0xa000 +1002d1fa: 4433 add r3, r6 +1002d1fc: 3104 adds r1, #4 +1002d1fe: f8bd 2012 ldrh.w r2, [sp, #18] +1002d202: a805 add r0, sp, #20 +1002d204: f7ea fd64 bl 10017cd0 +1002d208: 2001 movs r0, #1 +1002d20a: f7e9 fd55 bl 10016cb8 +1002d20e: f8bd 3012 ldrh.w r3, [sp, #18] +1002d212: 3304 adds r3, #4 +1002d214: 441c add r4, r3 +1002d216: 3501 adds r5, #1 +1002d218: b2ad uxth r5, r5 +1002d21a: f5b5 7f00 cmp.w r5, #512 ; 0x200 +1002d21e: d3c1 bcc.n 1002d1a4 +1002d220: 4630 mov r0, r6 +1002d222: f44f 7100 mov.w r1, #512 ; 0x200 +1002d226: f7ea f900 bl 1001742a +1002d22a: 2001 movs r0, #1 +1002d22c: f7e9 fd2a bl 10016c84 +1002d230: f504 4120 add.w r1, r4, #40960 ; 0xa000 +1002d234: 2202 movs r2, #2 +1002d236: f10d 0306 add.w r3, sp, #6 +1002d23a: a805 add r0, sp, #20 +1002d23c: f7ea fd48 bl 10017cd0 +1002d240: f504 4120 add.w r1, r4, #40960 ; 0xa000 +1002d244: 3102 adds r1, #2 +1002d246: 2202 movs r2, #2 +1002d248: ab01 add r3, sp, #4 +1002d24a: a805 add r0, sp, #20 +1002d24c: f7ea fd40 bl 10017cd0 +1002d250: f504 4120 add.w r1, r4, #40960 ; 0xa000 +1002d254: 3104 adds r1, #4 +1002d256: f8bd 2004 ldrh.w r2, [sp, #4] +1002d25a: 463b mov r3, r7 +1002d25c: a805 add r0, sp, #20 +1002d25e: f7ea fd37 bl 10017cd0 +1002d262: 2001 movs r0, #1 +1002d264: f7e9 fd28 bl 10016cb8 +1002d268: 2001 movs r0, #1 +1002d26a: b009 add sp, #36 ; 0x24 +1002d26c: bdf0 pop {r4, r5, r6, r7, pc} + +1002d26e : +1002d26e: b538 push {r3, r4, r5, lr} +1002d270: f44f 61aa mov.w r1, #1360 ; 0x550 +1002d274: f241 63c8 movw r3, #5832 ; 0x16c8 +1002d278: 4604 mov r4, r0 +1002d27a: f241 0210 movw r2, #4112 ; 0x1010 +1002d27e: 58c5 ldr r5, [r0, r3] +1002d280: f00a fd27 bl 10037cd2 +1002d284: 4620 mov r0, r4 +1002d286: f44f 61a8 mov.w r1, #1344 ; 0x540 +1002d28a: f246 4204 movw r2, #25604 ; 0x6404 +1002d28e: f00a fd20 bl 10037cd2 +1002d292: 6923 ldr r3, [r4, #16] +1002d294: 071b lsls r3, r3, #28 +1002d296: d51b bpl.n 1002d2d0 +1002d298: f240 5159 movw r1, #1369 ; 0x559 +1002d29c: 2202 movs r2, #2 +1002d29e: 4620 mov r0, r4 +1002d2a0: f00a fd10 bl 10037cc4 +1002d2a4: f246 620f movw r2, #26127 ; 0x660f +1002d2a8: f44f 61a2 mov.w r1, #1296 ; 0x510 +1002d2ac: 4620 mov r0, r4 +1002d2ae: f00a fd10 bl 10037cd2 +1002d2b2: f240 4122 movw r1, #1058 ; 0x422 +1002d2b6: 4620 mov r0, r4 +1002d2b8: f00a fcef bl 10037c9a +1002d2bc: f240 5142 movw r1, #1346 ; 0x542 +1002d2c0: f885 01a5 strb.w r0, [r5, #421] ; 0x1a5 +1002d2c4: 4620 mov r0, r4 +1002d2c6: f00a fce8 bl 10037c9a +1002d2ca: f885 01a6 strb.w r0, [r5, #422] ; 0x1a6 +1002d2ce: bd38 pop {r3, r4, r5, pc} +1002d2d0: 4620 mov r0, r4 +1002d2d2: f44f 61ab mov.w r1, #1368 ; 0x558 +1002d2d6: 2205 movs r2, #5 +1002d2d8: f00a fcf4 bl 10037cc4 +1002d2dc: e7dc b.n 1002d298 + +1002d2de <_InitBurstPktLen_8195AB>: +1002d2de: f240 610c movw r1, #1548 ; 0x60c +1002d2e2: 2204 movs r2, #4 +1002d2e4: f00a bcee b.w 10037cc4 + +1002d2e8 : +1002d2e8: 4b20 ldr r3, [pc, #128] ; (1002d36c ) +1002d2ea: 60c3 str r3, [r0, #12] +1002d2ec: 4b20 ldr r3, [pc, #128] ; (1002d370 ) +1002d2ee: 6383 str r3, [r0, #56] ; 0x38 +1002d2f0: 4b20 ldr r3, [pc, #128] ; (1002d374 ) +1002d2f2: 63c3 str r3, [r0, #60] ; 0x3c +1002d2f4: 4b20 ldr r3, [pc, #128] ; (1002d378 ) +1002d2f6: 66c3 str r3, [r0, #108] ; 0x6c +1002d2f8: 4b20 ldr r3, [pc, #128] ; (1002d37c ) +1002d2fa: f8c0 308c str.w r3, [r0, #140] ; 0x8c +1002d2fe: 4b20 ldr r3, [pc, #128] ; (1002d380 ) +1002d300: 6403 str r3, [r0, #64] ; 0x40 +1002d302: 4b20 ldr r3, [pc, #128] ; (1002d384 ) +1002d304: f8c0 3088 str.w r3, [r0, #136] ; 0x88 +1002d308: 4b1f ldr r3, [pc, #124] ; (1002d388 ) +1002d30a: 6603 str r3, [r0, #96] ; 0x60 +1002d30c: 4b1f ldr r3, [pc, #124] ; (1002d38c ) +1002d30e: 6643 str r3, [r0, #100] ; 0x64 +1002d310: 4b1f ldr r3, [pc, #124] ; (1002d390 ) +1002d312: 6683 str r3, [r0, #104] ; 0x68 +1002d314: 4b1f ldr r3, [pc, #124] ; (1002d394 ) +1002d316: f8c0 30a4 str.w r3, [r0, #164] ; 0xa4 +1002d31a: 4b1f ldr r3, [pc, #124] ; (1002d398 ) +1002d31c: f8c0 30a8 str.w r3, [r0, #168] ; 0xa8 +1002d320: 4b1e ldr r3, [pc, #120] ; (1002d39c ) +1002d322: f8c0 30ac str.w r3, [r0, #172] ; 0xac +1002d326: 4b1e ldr r3, [pc, #120] ; (1002d3a0 ) +1002d328: f8c0 30b0 str.w r3, [r0, #176] ; 0xb0 +1002d32c: 4b1d ldr r3, [pc, #116] ; (1002d3a4 ) +1002d32e: f8c0 3094 str.w r3, [r0, #148] ; 0x94 +1002d332: 4b1d ldr r3, [pc, #116] ; (1002d3a8 ) +1002d334: f8c0 3098 str.w r3, [r0, #152] ; 0x98 +1002d338: 4b1c ldr r3, [pc, #112] ; (1002d3ac ) +1002d33a: f8c0 30b4 str.w r3, [r0, #180] ; 0xb4 +1002d33e: 4b1c ldr r3, [pc, #112] ; (1002d3b0 ) +1002d340: f8c0 30b8 str.w r3, [r0, #184] ; 0xb8 +1002d344: 4b1b ldr r3, [pc, #108] ; (1002d3b4 ) +1002d346: f8c0 30bc str.w r3, [r0, #188] ; 0xbc +1002d34a: 4b1b ldr r3, [pc, #108] ; (1002d3b8 ) +1002d34c: f8c0 30c0 str.w r3, [r0, #192] ; 0xc0 +1002d350: 4b1a ldr r3, [pc, #104] ; (1002d3bc ) +1002d352: f8c0 30c4 str.w r3, [r0, #196] ; 0xc4 +1002d356: 4b1a ldr r3, [pc, #104] ; (1002d3c0 ) +1002d358: f8c0 30c8 str.w r3, [r0, #200] ; 0xc8 +1002d35c: 4b19 ldr r3, [pc, #100] ; (1002d3c4 ) +1002d35e: f8c0 3080 str.w r3, [r0, #128] ; 0x80 +1002d362: 4b19 ldr r3, [pc, #100] ; (1002d3c8 ) +1002d364: f8c0 3084 str.w r3, [r0, #132] ; 0x84 +1002d368: 4770 bx lr +1002d36a: bf00 nop +1002d36c: 1002c919 .word 0x1002c919 +1002d370: 1003b7ad .word 0x1003b7ad +1002d374: 1003b885 .word 0x1003b885 +1002d378: 1003b6bd .word 0x1003b6bd +1002d37c: 1003b2d3 .word 0x1003b2d3 +1002d380: 1002c64d .word 0x1002c64d +1002d384: 1002c389 .word 0x1002c389 +1002d388: 1002f719 .word 0x1002f719 +1002d38c: 1002f73b .word 0x1002f73b +1002d390: 1002f755 .word 0x1002f755 +1002d394: 00018279 .word 0x00018279 +1002d398: 00018239 .word 0x00018239 +1002d39c: 1002ecc5 .word 0x1002ecc5 +1002d3a0: 1002ecdd .word 0x1002ecdd +1002d3a4: 1002ca51 .word 0x1002ca51 +1002d3a8: 1002cab9 .word 0x1002cab9 +1002d3ac: 1002c905 .word 0x1002c905 +1002d3b0: 1002cadd .word 0x1002cadd +1002d3b4: 1002c313 .word 0x1002c313 +1002d3b8: 1002cfc1 .word 0x1002cfc1 +1002d3bc: 1002cd45 .word 0x1002cd45 +1002d3c0: 1002c6c1 .word 0x1002c6c1 +1002d3c4: 1002cc4d .word 0x1002cc4d +1002d3c8: 1002c97d .word 0x1002c97d + +1002d3cc : +1002d3cc: 4770 bx lr + +1002d3ce : +1002d3ce: b538 push {r3, r4, r5, lr} +1002d3d0: f44f 7109 mov.w r1, #548 ; 0x224 +1002d3d4: 4604 mov r4, r0 +1002d3d6: f00a fc6e bl 10037cb6 +1002d3da: f44f 7109 mov.w r1, #548 ; 0x224 +1002d3de: f440 3280 orr.w r2, r0, #65536 ; 0x10000 +1002d3e2: 4620 mov r0, r4 +1002d3e4: f00a fc7c bl 10037ce0 +1002d3e8: f7ea f90a bl 10017600 +1002d3ec: 4605 mov r5, r0 +1002d3ee: 4620 mov r0, r4 +1002d3f0: f44f 7109 mov.w r1, #548 ; 0x224 +1002d3f4: f00a fc5f bl 10037cb6 +1002d3f8: 03c3 lsls r3, r0, #15 +1002d3fa: d509 bpl.n 1002d410 +1002d3fc: 4628 mov r0, r5 +1002d3fe: f7ea f92f bl 10017660 +1002d402: f5b0 7f7a cmp.w r0, #1000 ; 0x3e8 +1002d406: d805 bhi.n 1002d414 +1002d408: 2002 movs r0, #2 +1002d40a: f7ea f93b bl 10017684 +1002d40e: e7ee b.n 1002d3ee +1002d410: 2001 movs r0, #1 +1002d412: bd38 pop {r3, r4, r5, pc} +1002d414: 2000 movs r0, #0 +1002d416: bd38 pop {r3, r4, r5, pc} + +1002d418 : +1002d418: 280e cmp r0, #14 +1002d41a: d819 bhi.n 1002d450 +1002d41c: 1e43 subs r3, r0, #1 +1002d41e: 2b01 cmp r3, #1 +1002d420: d801 bhi.n 1002d426 +1002d422: 2300 movs r3, #0 +1002d424: e013 b.n 1002d44e +1002d426: 1ec3 subs r3, r0, #3 +1002d428: 2b02 cmp r3, #2 +1002d42a: d801 bhi.n 1002d430 +1002d42c: 2301 movs r3, #1 +1002d42e: e00e b.n 1002d44e +1002d430: 1f83 subs r3, r0, #6 +1002d432: 2b02 cmp r3, #2 +1002d434: d801 bhi.n 1002d43a +1002d436: 2302 movs r3, #2 +1002d438: e009 b.n 1002d44e +1002d43a: f1a0 0309 sub.w r3, r0, #9 +1002d43e: 2b02 cmp r3, #2 +1002d440: d801 bhi.n 1002d446 +1002d442: 2303 movs r3, #3 +1002d444: e003 b.n 1002d44e +1002d446: 380c subs r0, #12 +1002d448: 2802 cmp r0, #2 +1002d44a: d801 bhi.n 1002d450 +1002d44c: 2304 movs r3, #4 +1002d44e: 700b strb r3, [r1, #0] +1002d450: 2001 movs r0, #1 +1002d452: 4770 bx lr + +1002d454 : +1002d454: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002d458: f241 69c8 movw r9, #5832 ; 0x16c8 +1002d45c: f850 b009 ldr.w fp, [r0, r9] +1002d460: 4680 mov r8, r0 +1002d462: f44f 7000 mov.w r0, #512 ; 0x200 +1002d466: 468a mov sl, r1 +1002d468: 4616 mov r6, r2 +1002d46a: 461f mov r7, r3 +1002d46c: f7ea f9b0 bl 100177d0 +1002d470: 4604 mov r4, r0 +1002d472: b930 cbnz r0, 1002d482 +1002d474: 4638 mov r0, r7 +1002d476: 21ff movs r1, #255 ; 0xff +1002d478: 4632 mov r2, r6 +1002d47a: f7e9 ffe9 bl 10017450 +1002d47e: 4625 mov r5, r4 +1002d480: e059 b.n 1002d536 +1002d482: 4640 mov r0, r8 +1002d484: 2100 movs r1, #0 +1002d486: f44f 7200 mov.w r2, #512 ; 0x200 +1002d48a: 4623 mov r3, r4 +1002d48c: f009 ffed bl 1003746a +1002d490: 4605 mov r5, r0 +1002d492: b950 cbnz r0, 1002d4aa +1002d494: 4620 mov r0, r4 +1002d496: f44f 7100 mov.w r1, #512 ; 0x200 +1002d49a: f7e9 ffc6 bl 1001742a +1002d49e: 4638 mov r0, r7 +1002d4a0: 21ff movs r1, #255 ; 0xff +1002d4a2: 4632 mov r2, r6 +1002d4a4: f7e9 ffd4 bl 10017450 +1002d4a8: e045 b.n 1002d536 +1002d4aa: f504 758d add.w r5, r4, #282 ; 0x11a +1002d4ae: 4668 mov r0, sp +1002d4b0: 4629 mov r1, r5 +1002d4b2: 2206 movs r2, #6 +1002d4b4: f7e9 ffbc bl 10017430 +1002d4b8: f89b 303e ldrb.w r3, [fp, #62] ; 0x3e +1002d4bc: 2bfb cmp r3, #251 ; 0xfb +1002d4be: d00b beq.n 1002d4d8 +1002d4c0: f89d 3030 ldrb.w r3, [sp, #48] ; 0x30 +1002d4c4: b943 cbnz r3, 1002d4d8 +1002d4c6: f858 3009 ldr.w r3, [r8, r9] +1002d4ca: f893 303e ldrb.w r3, [r3, #62] ; 0x3e +1002d4ce: 2bfb cmp r3, #251 ; 0xfb +1002d4d0: d002 beq.n 1002d4d8 +1002d4d2: 4620 mov r0, r4 +1002d4d4: f7ff fbc4 bl 1002cc60 +1002d4d8: f89d 3000 ldrb.w r3, [sp] +1002d4dc: 2bff cmp r3, #255 ; 0xff +1002d4de: d113 bne.n 1002d508 +1002d4e0: f89d 3001 ldrb.w r3, [sp, #1] +1002d4e4: 2bff cmp r3, #255 ; 0xff +1002d4e6: d10f bne.n 1002d508 +1002d4e8: f89d 3002 ldrb.w r3, [sp, #2] +1002d4ec: 2bff cmp r3, #255 ; 0xff +1002d4ee: d10b bne.n 1002d508 +1002d4f0: f89d 3003 ldrb.w r3, [sp, #3] +1002d4f4: 2bff cmp r3, #255 ; 0xff +1002d4f6: d107 bne.n 1002d508 +1002d4f8: f89d 3004 ldrb.w r3, [sp, #4] +1002d4fc: 2bff cmp r3, #255 ; 0xff +1002d4fe: d103 bne.n 1002d508 +1002d500: f89d 3005 ldrb.w r3, [sp, #5] +1002d504: 2bff cmp r3, #255 ; 0xff +1002d506: d004 beq.n 1002d512 +1002d508: 4628 mov r0, r5 +1002d50a: 4669 mov r1, sp +1002d50c: 2206 movs r2, #6 +1002d50e: f7e9 ff8f bl 10017430 +1002d512: f504 70b0 add.w r0, r4, #352 ; 0x160 +1002d516: 21ff movs r1, #255 ; 0xff +1002d518: 2260 movs r2, #96 ; 0x60 +1002d51a: f7e9 ff99 bl 10017450 +1002d51e: 4638 mov r0, r7 +1002d520: eb04 010a add.w r1, r4, sl +1002d524: 4632 mov r2, r6 +1002d526: f7e9 ff83 bl 10017430 +1002d52a: 4620 mov r0, r4 +1002d52c: f44f 7100 mov.w r1, #512 ; 0x200 +1002d530: f7e9 ff7b bl 1001742a +1002d534: 2501 movs r5, #1 +1002d536: 4628 mov r0, r5 +1002d538: b003 add sp, #12 +1002d53a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + ... + +1002d540 : +1002d540: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002d544: 469c mov ip, r3 +1002d546: f241 63c8 movw r3, #5832 ; 0x16c8 +1002d54a: 58c3 ldr r3, [r0, r3] +1002d54c: 4682 mov sl, r0 +1002d54e: f893 303e ldrb.w r3, [r3, #62] ; 0x3e +1002d552: 460e mov r6, r1 +1002d554: 2bfb cmp r3, #251 ; 0xfb +1002d556: d011 beq.n 1002d57c +1002d558: f89d 3030 ldrb.w r3, [sp, #48] ; 0x30 +1002d55c: 491f ldr r1, [pc, #124] ; (1002d5dc ) +1002d55e: 2b00 cmp r3, #0 +1002d560: 4b1f ldr r3, [pc, #124] ; (1002d5e0 ) +1002d562: 4c20 ldr r4, [pc, #128] ; (1002d5e4 ) +1002d564: bf0c ite eq +1002d566: 4688 moveq r8, r1 +1002d568: 4698 movne r8, r3 +1002d56a: 4b1f ldr r3, [pc, #124] ; (1002d5e8 ) +1002d56c: bf0c ite eq +1002d56e: f04f 0b02 moveq.w fp, #2 +1002d572: f04f 0b04 movne.w fp, #4 +1002d576: bf18 it ne +1002d578: 461c movne r4, r3 +1002d57a: e004 b.n 1002d586 +1002d57c: f8df 8060 ldr.w r8, [pc, #96] ; 1002d5e0 +1002d580: 4c19 ldr r4, [pc, #100] ; (1002d5e8 ) +1002d582: f04f 0b04 mov.w fp, #4 +1002d586: f102 39ff add.w r9, r2, #4294967295 +1002d58a: 44b1 add r9, r6 +1002d58c: fa1f f989 uxth.w r9, r9 +1002d590: eb04 0b8b add.w fp, r4, fp, lsl #2 +1002d594: 4635 mov r5, r6 +1002d596: 455c cmp r4, fp +1002d598: d01b beq.n 1002d5d2 +1002d59a: 8821 ldrh r1, [r4, #0] +1002d59c: 8867 ldrh r7, [r4, #2] +1002d59e: 42a9 cmp r1, r5 +1002d5a0: bf38 it cc +1002d5a2: 4629 movcc r1, r5 +1002d5a4: 454f cmp r7, r9 +1002d5a6: bf28 it cs +1002d5a8: 464f movcs r7, r9 +1002d5aa: 428f cmp r7, r1 +1002d5ac: d30d bcc.n 1002d5ca +1002d5ae: 1c7d adds r5, r7, #1 +1002d5b0: b2ad uxth r5, r5 +1002d5b2: 1a6a subs r2, r5, r1 +1002d5b4: 1b8b subs r3, r1, r6 +1002d5b6: 4463 add r3, ip +1002d5b8: f8cd c004 str.w ip, [sp, #4] +1002d5bc: 4650 mov r0, sl +1002d5be: b292 uxth r2, r2 +1002d5c0: 47c0 blx r8 +1002d5c2: 2801 cmp r0, #1 +1002d5c4: f8dd c004 ldr.w ip, [sp, #4] +1002d5c8: d104 bne.n 1002d5d4 +1002d5ca: 454f cmp r7, r9 +1002d5cc: f104 0404 add.w r4, r4, #4 +1002d5d0: d1e1 bne.n 1002d596 +1002d5d2: 2001 movs r0, #1 +1002d5d4: b003 add sp, #12 +1002d5d6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1002d5da: bf00 nop +1002d5dc: 1002d0a1 .word 0x1002d0a1 +1002d5e0: 100374cd .word 0x100374cd +1002d5e4: 100417fe .word 0x100417fe +1002d5e8: 100417d8 .word 0x100417d8 + +1002d5ec : +1002d5ec: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +1002d5ee: f241 4298 movw r2, #5272 ; 0x1498 +1002d5f2: f500 54a4 add.w r4, r0, #5248 ; 0x1480 +1002d5f6: 5c85 ldrb r5, [r0, r2] +1002d5f8: 3418 adds r4, #24 +1002d5fa: 460e mov r6, r1 +1002d5fc: 7aa1 ldrb r1, [r4, #10] +1002d5fe: b965 cbnz r5, 1002d61a +1002d600: 2901 cmp r1, #1 +1002d602: d020 beq.n 1002d646 +1002d604: 340b adds r4, #11 +1002d606: 4629 mov r1, r5 +1002d608: 9500 str r5, [sp, #0] +1002d60a: f44f 7200 mov.w r2, #512 ; 0x200 +1002d60e: 4623 mov r3, r4 +1002d610: f7ff ff20 bl 1002d454 +1002d614: 4630 mov r0, r6 +1002d616: 4621 mov r1, r4 +1002d618: e011 b.n 1002d63e +1002d61a: b969 cbnz r1, 1002d638 +1002d61c: ab04 add r3, sp, #16 +1002d61e: f823 1d02 strh.w r1, [r3, #-2]! +1002d622: 2204 movs r2, #4 +1002d624: 9100 str r1, [sp, #0] +1002d626: f009 fea1 bl 1003736c +1002d62a: f104 000b add.w r0, r4, #11 +1002d62e: 21ff movs r1, #255 ; 0xff +1002d630: f8bd 200e ldrh.w r2, [sp, #14] +1002d634: f7e9 ff0c bl 10017450 +1002d638: 4630 mov r0, r6 +1002d63a: f104 010b add.w r1, r4, #11 +1002d63e: f44f 7200 mov.w r2, #512 ; 0x200 +1002d642: f7e9 fef5 bl 10017430 +1002d646: b004 add sp, #16 +1002d648: bd70 pop {r4, r5, r6, pc} + +1002d64a : +1002d64a: 880a ldrh r2, [r1, #0] +1002d64c: f248 1395 movw r3, #33173 ; 0x8195 +1002d650: 429a cmp r2, r3 +1002d652: bf18 it ne +1002d654: 2201 movne r2, #1 +1002d656: f241 4398 movw r3, #5272 ; 0x1498 +1002d65a: bf08 it eq +1002d65c: 2200 moveq r2, #0 +1002d65e: 54c2 strb r2, [r0, r3] +1002d660: 4770 bx lr + +1002d662 : +1002d662: b570 push {r4, r5, r6, lr} +1002d664: 4608 mov r0, r1 +1002d666: 4615 mov r5, r2 +1002d668: 460c mov r4, r1 +1002d66a: 220e movs r2, #14 +1002d66c: 2100 movs r1, #0 +1002d66e: 461e mov r6, r3 +1002d670: f7e9 feee bl 10017450 +1002d674: f895 3021 ldrb.w r3, [r5, #33] ; 0x21 +1002d678: 2bff cmp r3, #255 ; 0xff +1002d67a: d101 bne.n 1002d680 +1002d67c: 2300 movs r3, #0 +1002d67e: e003 b.n 1002d688 +1002d680: 2e00 cmp r6, #0 +1002d682: d1fb bne.n 1002d67c +1002d684: 4633 mov r3, r6 +1002d686: e009 b.n 1002d69c +1002d688: 2220 movs r2, #32 +1002d68a: 54e2 strb r2, [r4, r3] +1002d68c: 18e1 adds r1, r4, r3 +1002d68e: 3301 adds r3, #1 +1002d690: 2b06 cmp r3, #6 +1002d692: 718a strb r2, [r1, #6] +1002d694: d1f8 bne.n 1002d688 +1002d696: 2300 movs r3, #0 +1002d698: 7363 strb r3, [r4, #13] +1002d69a: e027 b.n 1002d6ec +1002d69c: 18ea adds r2, r5, r3 +1002d69e: f892 2020 ldrb.w r2, [r2, #32] +1002d6a2: 2aff cmp r2, #255 ; 0xff +1002d6a4: bf08 it eq +1002d6a6: 2220 moveq r2, #32 +1002d6a8: 54e2 strb r2, [r4, r3] +1002d6aa: 3301 adds r3, #1 +1002d6ac: 2b06 cmp r3, #6 +1002d6ae: d1f5 bne.n 1002d69c +1002d6b0: 2300 movs r3, #0 +1002d6b2: 18ea adds r2, r5, r3 +1002d6b4: f892 1026 ldrb.w r1, [r2, #38] ; 0x26 +1002d6b8: 18e2 adds r2, r4, r3 +1002d6ba: 29ff cmp r1, #255 ; 0xff +1002d6bc: f103 0301 add.w r3, r3, #1 +1002d6c0: bf08 it eq +1002d6c2: 2120 moveq r1, #32 +1002d6c4: 2b05 cmp r3, #5 +1002d6c6: 7191 strb r1, [r2, #6] +1002d6c8: d1f3 bne.n 1002d6b2 +1002d6ca: f895 202b ldrb.w r2, [r5, #43] ; 0x2b +1002d6ce: 2aff cmp r2, #255 ; 0xff +1002d6d0: d101 bne.n 1002d6d6 +1002d6d2: 2300 movs r3, #0 +1002d6d4: e005 b.n 1002d6e2 +1002d6d6: 0912 lsrs r2, r2, #4 +1002d6d8: b2d3 uxtb r3, r2 +1002d6da: 0711 lsls r1, r2, #28 +1002d6dc: bf48 it mi +1002d6de: f063 030f ornmi r3, r3, #15 +1002d6e2: 7363 strb r3, [r4, #13] +1002d6e4: f895 302b ldrb.w r3, [r5, #43] ; 0x2b +1002d6e8: 2bff cmp r3, #255 ; 0xff +1002d6ea: d101 bne.n 1002d6f0 +1002d6ec: 2302 movs r3, #2 +1002d6ee: e005 b.n 1002d6fc +1002d6f0: f003 030f and.w r3, r3, #15 +1002d6f4: 071a lsls r2, r3, #28 +1002d6f6: bf48 it mi +1002d6f8: f063 030f ornmi r3, r3, #15 +1002d6fc: 7323 strb r3, [r4, #12] +1002d6fe: bd70 pop {r4, r5, r6, pc} + +1002d700 : +1002d700: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1002d704: f241 63c8 movw r3, #5832 ; 0x16c8 +1002d708: b086 sub sp, #24 +1002d70a: 460f mov r7, r1 +1002d70c: 4690 mov r8, r2 +1002d70e: 58c4 ldr r4, [r0, r3] +1002d710: a902 add r1, sp, #8 +1002d712: 463a mov r2, r7 +1002d714: 4643 mov r3, r8 +1002d716: f7ff ffa4 bl 1002d662 +1002d71a: 4625 mov r5, r4 +1002d71c: 2600 movs r6, #0 +1002d71e: 3601 adds r6, #1 +1002d720: b2f6 uxtb r6, r6 +1002d722: 4630 mov r0, r6 +1002d724: f10d 0107 add.w r1, sp, #7 +1002d728: f7ff fe76 bl 1002d418 +1002d72c: 2e0e cmp r6, #14 +1002d72e: f89d 3007 ldrb.w r3, [sp, #7] +1002d732: d115 bne.n 1002d760 +1002d734: f89d 200d ldrb.w r2, [sp, #13] +1002d738: f884 2067 strb.w r2, [r4, #103] ; 0x67 +1002d73c: aa06 add r2, sp, #24 +1002d73e: 4413 add r3, r2 +1002d740: f813 3c0a ldrb.w r3, [r3, #-10] +1002d744: f884 3075 strb.w r3, [r4, #117] ; 0x75 +1002d748: f89d 3014 ldrb.w r3, [sp, #20] +1002d74c: f884 3076 strb.w r3, [r4, #118] ; 0x76 +1002d750: f89d 3015 ldrb.w r3, [sp, #21] +1002d754: f884 3077 strb.w r3, [r4, #119] ; 0x77 +1002d758: f1b8 0f00 cmp.w r8, #0 +1002d75c: d00c beq.n 1002d778 +1002d75e: e015 b.n 1002d78c +1002d760: aa06 add r2, sp, #24 +1002d762: 4413 add r3, r2 +1002d764: f813 2c10 ldrb.w r2, [r3, #-16] +1002d768: 3501 adds r5, #1 +1002d76a: f885 2059 strb.w r2, [r5, #89] ; 0x59 +1002d76e: f813 3c0a ldrb.w r3, [r3, #-10] +1002d772: f885 3067 strb.w r3, [r5, #103] ; 0x67 +1002d776: e7d2 b.n 1002d71e +1002d778: f897 3131 ldrb.w r3, [r7, #305] ; 0x131 +1002d77c: f003 0307 and.w r3, r3, #7 +1002d780: f884 3043 strb.w r3, [r4, #67] ; 0x43 +1002d784: f897 3131 ldrb.w r3, [r7, #305] ; 0x131 +1002d788: 2bff cmp r3, #255 ; 0xff +1002d78a: d102 bne.n 1002d792 +1002d78c: 2301 movs r3, #1 +1002d78e: f884 3043 strb.w r3, [r4, #67] ; 0x43 +1002d792: b006 add sp, #24 +1002d794: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1002d798 : +1002d798: f241 63c8 movw r3, #5832 ; 0x16c8 +1002d79c: 58c3 ldr r3, [r0, r3] +1002d79e: b912 cbnz r2, 1002d7a6 +1002d7a0: f891 2134 ldrb.w r2, [r1, #308] ; 0x134 +1002d7a4: e000 b.n 1002d7a8 +1002d7a6: 2201 movs r2, #1 +1002d7a8: f883 2042 strb.w r2, [r3, #66] ; 0x42 +1002d7ac: 4770 bx lr + +1002d7ae : +1002d7ae: b537 push {r0, r1, r2, r4, r5, lr} +1002d7b0: f241 63c8 movw r3, #5832 ; 0x16c8 +1002d7b4: 4605 mov r5, r0 +1002d7b6: 2100 movs r1, #0 +1002d7b8: 2201 movs r2, #1 +1002d7ba: 58c4 ldr r4, [r0, r3] +1002d7bc: f009 fdb8 bl 10037330 +1002d7c0: 2300 movs r3, #0 +1002d7c2: 21f8 movs r1, #248 ; 0xf8 +1002d7c4: f10d 0207 add.w r2, sp, #7 +1002d7c8: 4628 mov r0, r5 +1002d7ca: f009 fdd9 bl 10037380 +1002d7ce: 2100 movs r1, #0 +1002d7d0: 4628 mov r0, r5 +1002d7d2: 460a mov r2, r1 +1002d7d4: f009 fdac bl 10037330 +1002d7d8: f89d 3007 ldrb.w r3, [sp, #7] +1002d7dc: f884 303e strb.w r3, [r4, #62] ; 0x3e +1002d7e0: 330f adds r3, #15 +1002d7e2: b2db uxtb r3, r3 +1002d7e4: 2b0e cmp r3, #14 +1002d7e6: d813 bhi.n 1002d810 +1002d7e8: 2101 movs r1, #1 +1002d7ea: fa01 f303 lsl.w r3, r1, r3 +1002d7ee: f242 12c1 movw r2, #8641 ; 0x21c1 +1002d7f2: 401a ands r2, r3 +1002d7f4: b952 cbnz r2, 1002d80c +1002d7f6: f413 4f84 tst.w r3, #16896 ; 0x4200 +1002d7fa: d104 bne.n 1002d806 +1002d7fc: f413 5fe0 tst.w r3, #7168 ; 0x1c00 +1002d800: d006 beq.n 1002d810 +1002d802: 2302 movs r3, #2 +1002d804: e005 b.n 1002d812 +1002d806: f884 103d strb.w r1, [r4, #61] ; 0x3d +1002d80a: e004 b.n 1002d816 +1002d80c: 2303 movs r3, #3 +1002d80e: e000 b.n 1002d812 +1002d810: 2300 movs r3, #0 +1002d812: f884 303d strb.w r3, [r4, #61] ; 0x3d +1002d816: b003 add sp, #12 +1002d818: bd30 pop {r4, r5, pc} + +1002d81a : +1002d81a: b513 push {r0, r1, r4, lr} +1002d81c: 4613 mov r3, r2 +1002d81e: 4604 mov r4, r0 +1002d820: b129 cbz r1, 1002d82e +1002d822: f891 10c8 ldrb.w r1, [r1, #200] ; 0xc8 +1002d826: 29ff cmp r1, #255 ; 0xff +1002d828: bf08 it eq +1002d82a: 2301 moveq r3, #1 +1002d82c: e001 b.n 1002d832 +1002d82e: 2301 movs r3, #1 +1002d830: 21ff movs r1, #255 ; 0xff +1002d832: f241 32d3 movw r2, #5075 ; 0x13d3 +1002d836: 9300 str r3, [sp, #0] +1002d838: 5ca2 ldrb r2, [r4, r2] +1002d83a: 4620 mov r0, r4 +1002d83c: 2320 movs r3, #32 +1002d83e: f003 fed0 bl 100315e2 +1002d842: f884 049e strb.w r0, [r4, #1182] ; 0x49e +1002d846: b002 add sp, #8 +1002d848: bd10 pop {r4, pc} + +1002d84a : +1002d84a: f241 63c8 movw r3, #5832 ; 0x16c8 +1002d84e: 58c3 ldr r3, [r0, r3] +1002d850: b912 cbnz r2, 1002d858 +1002d852: f891 2135 ldrb.w r2, [r1, #309] ; 0x135 +1002d856: e000 b.n 1002d85a +1002d858: 2200 movs r2, #0 +1002d85a: f883 2041 strb.w r2, [r3, #65] ; 0x41 +1002d85e: 4770 bx lr + +1002d860 : +1002d860: f241 63c8 movw r3, #5832 ; 0x16c8 +1002d864: 58c3 ldr r3, [r0, r3] +1002d866: b91a cbnz r2, 1002d870 +1002d868: f891 20c9 ldrb.w r2, [r1, #201] ; 0xc9 +1002d86c: 2aff cmp r2, #255 ; 0xff +1002d86e: d100 bne.n 1002d872 +1002d870: 2220 movs r2, #32 +1002d872: f883 217b strb.w r2, [r3, #379] ; 0x17b +1002d876: 4770 bx lr + +1002d878 : +1002d878: f241 63c8 movw r3, #5832 ; 0x16c8 +1002d87c: 58c3 ldr r3, [r0, r3] +1002d87e: b912 cbnz r2, 1002d886 +1002d880: f891 10ca ldrb.w r1, [r1, #202] ; 0xca +1002d884: e000 b.n 1002d888 +1002d886: 211a movs r1, #26 +1002d888: f883 1044 strb.w r1, [r3, #68] ; 0x44 +1002d88c: f893 1044 ldrb.w r1, [r3, #68] ; 0x44 +1002d890: 29ff cmp r1, #255 ; 0xff +1002d892: d001 beq.n 1002d898 +1002d894: 2a01 cmp r2, #1 +1002d896: d102 bne.n 1002d89e +1002d898: 221a movs r2, #26 +1002d89a: f883 2044 strb.w r2, [r3, #68] ; 0x44 +1002d89e: 4770 bx lr + +1002d8a0 : +1002d8a0: b537 push {r0, r1, r2, r4, r5, lr} +1002d8a2: 4613 mov r3, r2 +1002d8a4: 4604 mov r4, r0 +1002d8a6: 460d mov r5, r1 +1002d8a8: b98a cbnz r2, 1002d8ce +1002d8aa: 21ee movs r1, #238 ; 0xee +1002d8ac: f10d 0207 add.w r2, sp, #7 +1002d8b0: f009 fd66 bl 10037380 +1002d8b4: f241 33f6 movw r3, #5110 ; 0x13f6 +1002d8b8: 5ce3 ldrb r3, [r4, r3] +1002d8ba: b933 cbnz r3, 1002d8ca +1002d8bc: f895 3138 ldrb.w r3, [r5, #312] ; 0x138 +1002d8c0: 2bff cmp r3, #255 ; 0xff +1002d8c2: d004 beq.n 1002d8ce +1002d8c4: 06db lsls r3, r3, #27 +1002d8c6: d405 bmi.n 1002d8d4 +1002d8c8: e001 b.n 1002d8ce +1002d8ca: 2b02 cmp r3, #2 +1002d8cc: d102 bne.n 1002d8d4 +1002d8ce: 23ff movs r3, #255 ; 0xff +1002d8d0: f88d 3007 strb.w r3, [sp, #7] +1002d8d4: f89d 3007 ldrb.w r3, [sp, #7] +1002d8d8: f241 61a3 movw r1, #5795 ; 0x16a3 +1002d8dc: 2bff cmp r3, #255 ; 0xff +1002d8de: f241 62a4 movw r2, #5796 ; 0x16a4 +1002d8e2: bf14 ite ne +1002d8e4: 2001 movne r0, #1 +1002d8e6: 2000 moveq r0, #0 +1002d8e8: 5460 strb r0, [r4, r1] +1002d8ea: 54a3 strb r3, [r4, r2] +1002d8ec: b003 add sp, #12 +1002d8ee: bd30 pop {r4, r5, pc} + +1002d8f0 : +1002d8f0: f241 63c8 movw r3, #5832 ; 0x16c8 +1002d8f4: 58c3 ldr r3, [r0, r3] +1002d8f6: 6adb ldr r3, [r3, #44] ; 0x2c +1002d8f8: 2b01 cmp r3, #1 +1002d8fa: d107 bne.n 1002d90c +1002d8fc: f891 0059 ldrb.w r0, [r1, #89] ; 0x59 +1002d900: 3801 subs r0, #1 +1002d902: 2801 cmp r0, #1 +1002d904: bf8c ite hi +1002d906: 2000 movhi r0, #0 +1002d908: 2001 movls r0, #1 +1002d90a: 4770 bx lr +1002d90c: 2000 movs r0, #0 +1002d90e: 4770 bx lr + +1002d910 : +1002d910: f241 63c8 movw r3, #5832 ; 0x16c8 +1002d914: 58c3 ldr r3, [r0, r3] +1002d916: 6ad8 ldr r0, [r3, #44] ; 0x2c +1002d918: 2801 cmp r0, #1 +1002d91a: d10b bne.n 1002d934 +1002d91c: f891 2059 ldrb.w r2, [r1, #89] ; 0x59 +1002d920: b942 cbnz r2, 1002d934 +1002d922: f893 3035 ldrb.w r3, [r3, #53] ; 0x35 +1002d926: 2b02 cmp r3, #2 +1002d928: d005 beq.n 1002d936 +1002d92a: 2b01 cmp r3, #1 +1002d92c: bf14 ite ne +1002d92e: 2000 movne r0, #0 +1002d930: 2002 moveq r0, #2 +1002d932: 4770 bx lr +1002d934: 2000 movs r0, #0 +1002d936: 4770 bx lr + +1002d938 : +1002d938: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1002d93c: 2228 movs r2, #40 ; 0x28 +1002d93e: 4605 mov r5, r0 +1002d940: f8d0 8080 ldr.w r8, [r0, #128] ; 0x80 +1002d944: 460c mov r4, r1 +1002d946: 4608 mov r0, r1 +1002d948: 2100 movs r1, #0 +1002d94a: f7e9 fd81 bl 10017450 +1002d94e: 6fee ldr r6, [r5, #124] ; 0x7c +1002d950: f895 9057 ldrb.w r9, [r5, #87] ; 0x57 +1002d954: f241 6ac8 movw sl, #5832 ; 0x16c8 +1002d958: 4630 mov r0, r6 +1002d95a: f856 700a ldr.w r7, [r6, sl] +1002d95e: f009 0901 and.w r9, r9, #1 +1002d962: f7f0 fdf7 bl 1001e554 +1002d966: b140 cbz r0, 1002d97a +1002d968: f641 0369 movw r3, #6249 ; 0x1869 +1002d96c: 5cf3 ldrb r3, [r6, r3] +1002d96e: b123 cbz r3, 1002d97a +1002d970: f641 035c movw r3, #6236 ; 0x185c +1002d974: 58f3 ldr r3, [r6, r3] +1002d976: f853 700a ldr.w r7, [r3, sl] +1002d97a: 6fab ldr r3, [r5, #120] ; 0x78 +1002d97c: 2b01 cmp r3, #1 +1002d97e: f040 80df bne.w 1002db40 +1002d982: f895 2043 ldrb.w r2, [r5, #67] ; 0x43 +1002d986: 7923 ldrb r3, [r4, #4] +1002d988: f362 0306 bfi r3, r2, #0, #7 +1002d98c: 7123 strb r3, [r4, #4] +1002d98e: f895 2060 ldrb.w r2, [r5, #96] ; 0x60 +1002d992: 79a3 ldrb r3, [r4, #6] +1002d994: f362 0304 bfi r3, r2, #0, #5 +1002d998: 71a3 strb r3, [r4, #6] +1002d99a: f895 2068 ldrb.w r2, [r5, #104] ; 0x68 +1002d99e: 7963 ldrb r3, [r4, #5] +1002d9a0: f362 0304 bfi r3, r2, #0, #5 +1002d9a4: 7163 strb r3, [r4, #5] +1002d9a6: 89ea ldrh r2, [r5, #14] +1002d9a8: 6a63 ldr r3, [r4, #36] ; 0x24 +1002d9aa: f362 3317 bfi r3, r2, #12, #12 +1002d9ae: 6263 str r3, [r4, #36] ; 0x24 +1002d9b0: 7f2b ldrb r3, [r5, #28] +1002d9b2: 7aaa ldrb r2, [r5, #10] +1002d9b4: b16b cbz r3, 1002d9d2 +1002d9b6: b94a cbnz r2, 1002d9cc +1002d9b8: 3b01 subs r3, #1 +1002d9ba: 2b04 cmp r3, #4 +1002d9bc: d806 bhi.n 1002d9cc +1002d9be: e8df f003 tbb [pc, r3] +1002d9c2: 0707 .short 0x0707 +1002d9c4: 0307 .short 0x0307 +1002d9c6: 07 .byte 0x07 +1002d9c7: 00 .byte 0x00 +1002d9c8: 2303 movs r3, #3 +1002d9ca: e002 b.n 1002d9d2 +1002d9cc: 2300 movs r3, #0 +1002d9ce: e000 b.n 1002d9d2 +1002d9d0: 2301 movs r3, #1 +1002d9d2: 79a2 ldrb r2, [r4, #6] +1002d9d4: f105 0808 add.w r8, r5, #8 +1002d9d8: f363 1287 bfi r2, r3, #6, #2 +1002d9dc: 71a2 strb r2, [r4, #6] +1002d9de: f895 3044 ldrb.w r3, [r5, #68] ; 0x44 +1002d9e2: b33b cbz r3, 1002da34 +1002d9e4: 2b01 cmp r3, #1 +1002d9e6: d005 beq.n 1002d9f4 +1002d9e8: 2b02 cmp r3, #2 +1002d9ea: d107 bne.n 1002d9fc +1002d9ec: 7b63 ldrb r3, [r4, #13] +1002d9ee: f043 0308 orr.w r3, r3, #8 +1002d9f2: e002 b.n 1002d9fa +1002d9f4: 7b63 ldrb r3, [r4, #13] +1002d9f6: f043 0330 orr.w r3, r3, #48 ; 0x30 +1002d9fa: 7363 strb r3, [r4, #13] +1002d9fc: 7ce3 ldrb r3, [r4, #19] +1002d9fe: 2208 movs r2, #8 +1002da00: f362 0304 bfi r3, r2, #0, #5 +1002da04: 74e3 strb r3, [r4, #19] +1002da06: 6923 ldr r3, [r4, #16] +1002da08: f443 33f0 orr.w r3, r3, #122880 ; 0x1e000 +1002da0c: 6123 str r3, [r4, #16] +1002da0e: f896 3730 ldrb.w r3, [r6, #1840] ; 0x730 +1002da12: 2b03 cmp r3, #3 +1002da14: d103 bne.n 1002da1e +1002da16: 7d63 ldrb r3, [r4, #21] +1002da18: f043 0310 orr.w r3, r3, #16 +1002da1c: 7563 strb r3, [r4, #21] +1002da1e: f895 305f ldrb.w r3, [r5, #95] ; 0x5f +1002da22: b13b cbz r3, 1002da34 +1002da24: 4630 mov r0, r6 +1002da26: 4641 mov r1, r8 +1002da28: f7ff ff72 bl 1002d910 +1002da2c: 6963 ldr r3, [r4, #20] +1002da2e: f360 3350 bfi r3, r0, #13, #4 +1002da32: 6163 str r3, [r4, #20] +1002da34: 89ab ldrh r3, [r5, #12] +1002da36: f648 028e movw r2, #34958 ; 0x888e +1002da3a: 4293 cmp r3, r2 +1002da3c: d06f beq.n 1002db1e +1002da3e: f640 0206 movw r2, #2054 ; 0x806 +1002da42: 4293 cmp r3, r2 +1002da44: d06b beq.n 1002db1e +1002da46: f648 02b4 movw r2, #34996 ; 0x88b4 +1002da4a: 4293 cmp r3, r2 +1002da4c: d067 beq.n 1002db1e +1002da4e: 7aeb ldrb r3, [r5, #11] +1002da50: 2b01 cmp r3, #1 +1002da52: d064 beq.n 1002db1e +1002da54: f895 3064 ldrb.w r3, [r5, #100] ; 0x64 +1002da58: 2b01 cmp r3, #1 +1002da5a: d10d bne.n 1002da78 +1002da5c: 7a63 ldrb r3, [r4, #9] +1002da5e: f043 0310 orr.w r3, r3, #16 +1002da62: 7263 strb r3, [r4, #9] +1002da64: 7ba3 ldrb r3, [r4, #14] +1002da66: f043 033e orr.w r3, r3, #62 ; 0x3e +1002da6a: 73a3 strb r3, [r4, #14] +1002da6c: f897 2e08 ldrb.w r2, [r7, #3592] ; 0xe08 +1002da70: 7aa3 ldrb r3, [r4, #10] +1002da72: f362 1306 bfi r3, r2, #4, #3 +1002da76: e002 b.n 1002da7e +1002da78: 7aa3 ldrb r3, [r4, #10] +1002da7a: f043 0301 orr.w r3, r3, #1 +1002da7e: 72a3 strb r3, [r4, #10] +1002da80: f895 305f ldrb.w r3, [r5, #95] ; 0x5f +1002da84: b17b cbz r3, 1002daa6 +1002da86: 4641 mov r1, r8 +1002da88: 4630 mov r0, r6 +1002da8a: f7ff ff31 bl 1002d8f0 +1002da8e: 7d23 ldrb r3, [r4, #20] +1002da90: 4641 mov r1, r8 +1002da92: f360 1346 bfi r3, r0, #5, #2 +1002da96: 7523 strb r3, [r4, #20] +1002da98: 4630 mov r0, r6 +1002da9a: f7ff ff39 bl 1002d910 +1002da9e: 7d23 ldrb r3, [r4, #20] +1002daa0: f360 0303 bfi r3, r0, #0, #4 +1002daa4: 7523 strb r3, [r4, #20] +1002daa6: 7c63 ldrb r3, [r4, #17] +1002daa8: f043 031f orr.w r3, r3, #31 +1002daac: 7463 strb r3, [r4, #17] +1002daae: f897 31a4 ldrb.w r3, [r7, #420] ; 0x1a4 +1002dab2: b9bb cbnz r3, 1002dae4 +1002dab4: 7b63 ldrb r3, [r4, #13] +1002dab6: f043 0301 orr.w r3, r3, #1 +1002daba: 7363 strb r3, [r4, #13] +1002dabc: f895 3043 ldrb.w r3, [r5, #67] ; 0x43 +1002dac0: 443b add r3, r7 +1002dac2: f993 31e0 ldrsb.w r3, [r3, #480] ; 0x1e0 +1002dac6: 2b00 cmp r3, #0 +1002dac8: da03 bge.n 1002dad2 +1002daca: 7d23 ldrb r3, [r4, #20] +1002dacc: f043 0310 orr.w r3, r3, #16 +1002dad0: 7523 strb r3, [r4, #20] +1002dad2: f895 3043 ldrb.w r3, [r5, #67] ; 0x43 +1002dad6: 441f add r7, r3 +1002dad8: f897 21e0 ldrb.w r2, [r7, #480] ; 0x1e0 +1002dadc: 7c23 ldrb r3, [r4, #16] +1002dade: f362 0306 bfi r3, r2, #0, #7 +1002dae2: 7423 strb r3, [r4, #16] +1002dae4: f641 0378 movw r3, #6264 ; 0x1878 +1002dae8: 5cf2 ldrb r2, [r6, r3] +1002daea: 2aff cmp r2, #255 ; 0xff +1002daec: f000 80a9 beq.w 1002dc42 +1002daf0: 7b62 ldrb r2, [r4, #13] +1002daf2: f042 0201 orr.w r2, r2, #1 +1002daf6: 7362 strb r2, [r4, #13] +1002daf8: 56f3 ldrsb r3, [r6, r3] +1002dafa: 2b00 cmp r3, #0 +1002dafc: da03 bge.n 1002db06 +1002dafe: 7d23 ldrb r3, [r4, #20] +1002db00: f043 0310 orr.w r3, r3, #16 +1002db04: 7523 strb r3, [r4, #20] +1002db06: f641 0278 movw r2, #6264 ; 0x1878 +1002db0a: 5cb2 ldrb r2, [r6, r2] +1002db0c: 7c23 ldrb r3, [r4, #16] +1002db0e: f362 0306 bfi r3, r2, #0, #7 +1002db12: 7423 strb r3, [r4, #16] +1002db14: 7b63 ldrb r3, [r4, #13] +1002db16: f043 0304 orr.w r3, r3, #4 +1002db1a: 7363 strb r3, [r4, #13] +1002db1c: e091 b.n 1002dc42 +1002db1e: 7aa3 ldrb r3, [r4, #10] +1002db20: f043 0301 orr.w r3, r3, #1 +1002db24: 72a3 strb r3, [r4, #10] +1002db26: 7b63 ldrb r3, [r4, #13] +1002db28: f043 0301 orr.w r3, r3, #1 +1002db2c: 7363 strb r3, [r4, #13] +1002db2e: f896 3730 ldrb.w r3, [r6, #1840] ; 0x730 +1002db32: 2b03 cmp r3, #3 +1002db34: d17d bne.n 1002dc32 +1002db36: 7d23 ldrb r3, [r4, #20] +1002db38: f043 0310 orr.w r3, r3, #16 +1002db3c: 7523 strb r3, [r4, #20] +1002db3e: e078 b.n 1002dc32 +1002db40: 2b03 cmp r3, #3 +1002db42: d159 bne.n 1002dbf8 +1002db44: f895 2043 ldrb.w r2, [r5, #67] ; 0x43 +1002db48: 7923 ldrb r3, [r4, #4] +1002db4a: f362 0306 bfi r3, r2, #0, #7 +1002db4e: 7123 strb r3, [r4, #4] +1002db50: f895 2068 ldrb.w r2, [r5, #104] ; 0x68 +1002db54: 7963 ldrb r3, [r4, #5] +1002db56: f362 0304 bfi r3, r2, #0, #5 +1002db5a: 7163 strb r3, [r4, #5] +1002db5c: f895 2060 ldrb.w r2, [r5, #96] ; 0x60 +1002db60: 79a3 ldrb r3, [r4, #6] +1002db62: f362 0304 bfi r3, r2, #0, #5 +1002db66: 71a3 strb r3, [r4, #6] +1002db68: 89ea ldrh r2, [r5, #14] +1002db6a: 6a63 ldr r3, [r4, #36] ; 0x24 +1002db6c: f362 3317 bfi r3, r2, #12, #12 +1002db70: 6263 str r3, [r4, #36] ; 0x24 +1002db72: 7b63 ldrb r3, [r4, #13] +1002db74: f043 0301 orr.w r3, r3, #1 +1002db78: 7363 strb r3, [r4, #13] +1002db7a: 7ca3 ldrb r3, [r4, #18] +1002db7c: f043 0302 orr.w r3, r3, #2 +1002db80: 74a3 strb r3, [r4, #18] +1002db82: f895 306c ldrb.w r3, [r5, #108] ; 0x6c +1002db86: 2b01 cmp r3, #1 +1002db88: 7ca3 ldrb r3, [r4, #18] +1002db8a: bf0c ite eq +1002db8c: 2206 moveq r2, #6 +1002db8e: 220c movne r2, #12 +1002db90: f362 0387 bfi r3, r2, #2, #6 +1002db94: 74a3 strb r3, [r4, #18] +1002db96: f896 084b ldrb.w r0, [r6, #2123] ; 0x84b +1002db9a: f003 fd4b bl 10031634 +1002db9e: 7c23 ldrb r3, [r4, #16] +1002dba0: f8b8 2028 ldrh.w r2, [r8, #40] ; 0x28 +1002dba4: f360 0306 bfi r3, r0, #0, #7 +1002dba8: 7423 strb r3, [r4, #16] +1002dbaa: f002 03c8 and.w r3, r2, #200 ; 0xc8 +1002dbae: 2bc8 cmp r3, #200 ; 0xc8 +1002dbb0: d147 bne.n 1002dc42 +1002dbb2: 7aa3 ldrb r3, [r4, #10] +1002dbb4: f402 5280 and.w r2, r2, #4096 ; 0x1000 +1002dbb8: f043 0308 orr.w r3, r3, #8 +1002dbbc: 72a3 strb r3, [r4, #10] +1002dbbe: f895 1043 ldrb.w r1, [r5, #67] ; 0x43 +1002dbc2: 8b23 ldrh r3, [r4, #24] +1002dbc4: b292 uxth r2, r2 +1002dbc6: f361 030b bfi r3, r1, #0, #12 +1002dbca: 8323 strh r3, [r4, #24] +1002dbcc: 7a63 ldrb r3, [r4, #9] +1002dbce: b122 cbz r2, 1002dbda +1002dbd0: f003 03bf and.w r3, r3, #191 ; 0xbf +1002dbd4: f043 0380 orr.w r3, r3, #128 ; 0x80 +1002dbd8: e003 b.n 1002dbe2 +1002dbda: f043 0340 orr.w r3, r3, #64 ; 0x40 +1002dbde: f362 13c7 bfi r3, r2, #7, #1 +1002dbe2: 7263 strb r3, [r4, #9] +1002dbe4: 7c63 ldrb r3, [r4, #17] +1002dbe6: 2207 movs r2, #7 +1002dbe8: f043 031f orr.w r3, r3, #31 +1002dbec: 7463 strb r3, [r4, #17] +1002dbee: 6923 ldr r3, [r4, #16] +1002dbf0: f362 3350 bfi r3, r2, #13, #4 +1002dbf4: 6123 str r3, [r4, #16] +1002dbf6: e024 b.n 1002dc42 +1002dbf8: 2b08 cmp r3, #8 +1002dbfa: d022 beq.n 1002dc42 +1002dbfc: f895 2043 ldrb.w r2, [r5, #67] ; 0x43 +1002dc00: 7923 ldrb r3, [r4, #4] +1002dc02: f362 0306 bfi r3, r2, #0, #7 +1002dc06: 7123 strb r3, [r4, #4] +1002dc08: f895 2060 ldrb.w r2, [r5, #96] ; 0x60 +1002dc0c: 79a3 ldrb r3, [r4, #6] +1002dc0e: f362 0304 bfi r3, r2, #0, #5 +1002dc12: 71a3 strb r3, [r4, #6] +1002dc14: f895 2068 ldrb.w r2, [r5, #104] ; 0x68 +1002dc18: 7963 ldrb r3, [r4, #5] +1002dc1a: f362 0304 bfi r3, r2, #0, #5 +1002dc1e: 7163 strb r3, [r4, #5] +1002dc20: 89ea ldrh r2, [r5, #14] +1002dc22: 6a63 ldr r3, [r4, #36] ; 0x24 +1002dc24: f362 3317 bfi r3, r2, #12, #12 +1002dc28: 6263 str r3, [r4, #36] ; 0x24 +1002dc2a: 7b63 ldrb r3, [r4, #13] +1002dc2c: f043 0301 orr.w r3, r3, #1 +1002dc30: 7363 strb r3, [r4, #13] +1002dc32: f896 084b ldrb.w r0, [r6, #2123] ; 0x84b +1002dc36: f003 fcfd bl 10031634 +1002dc3a: 7c23 ldrb r3, [r4, #16] +1002dc3c: f360 0306 bfi r3, r0, #0, #7 +1002dc40: 7423 strb r3, [r4, #16] +1002dc42: 8b2b ldrh r3, [r5, #24] +1002dc44: 8023 strh r3, [r4, #0] +1002dc46: 2328 movs r3, #40 ; 0x28 +1002dc48: 70a3 strb r3, [r4, #2] +1002dc4a: f1b9 0f00 cmp.w r9, #0 +1002dc4e: d003 beq.n 1002dc58 +1002dc50: 78e3 ldrb r3, [r4, #3] +1002dc52: f043 0301 orr.w r3, r3, #1 +1002dc56: 70e3 strb r3, [r4, #3] +1002dc58: f895 305e ldrb.w r3, [r5, #94] ; 0x5e +1002dc5c: b92b cbnz r3, 1002dc6a +1002dc5e: f894 3021 ldrb.w r3, [r4, #33] ; 0x21 +1002dc62: f043 0380 orr.w r3, r3, #128 ; 0x80 +1002dc66: f884 3021 strb.w r3, [r4, #33] ; 0x21 +1002dc6a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + +1002dc6e : +1002dc6e: b5f8 push {r3, r4, r5, r6, r7, lr} +1002dc70: 460c mov r4, r1 +1002dc72: 4616 mov r6, r2 +1002dc74: 4605 mov r5, r0 +1002dc76: 2228 movs r2, #40 ; 0x28 +1002dc78: 4608 mov r0, r1 +1002dc7a: 2100 movs r1, #0 +1002dc7c: 461f mov r7, r3 +1002dc7e: f7e9 fbe7 bl 10017450 +1002dc82: 6821 ldr r1, [r4, #0] +1002dc84: b2b2 uxth r2, r6 +1002dc86: f042 6242 orr.w r2, r2, #203423744 ; 0xc200000 +1002dc8a: f001 417f and.w r1, r1, #4278190080 ; 0xff000000 +1002dc8e: f442 2200 orr.w r2, r2, #524288 ; 0x80000 +1002dc92: 430a orrs r2, r1 +1002dc94: 6861 ldr r1, [r4, #4] +1002dc96: 2f01 cmp r7, #1 +1002dc98: f421 51f8 bic.w r1, r1, #7936 ; 0x1f00 +1002dc9c: f441 5190 orr.w r1, r1, #4608 ; 0x1200 +1002dca0: 6022 str r2, [r4, #0] +1002dca2: 6061 str r1, [r4, #4] +1002dca4: 68e3 ldr r3, [r4, #12] +1002dca6: d103 bne.n 1002dcb0 +1002dca8: f443 4300 orr.w r3, r3, #32768 ; 0x8000 +1002dcac: 60e3 str r3, [r4, #12] +1002dcae: e00a b.n 1002dcc6 +1002dcb0: f023 03c0 bic.w r3, r3, #192 ; 0xc0 +1002dcb4: 6a21 ldr r1, [r4, #32] +1002dcb6: 60e3 str r3, [r4, #12] +1002dcb8: 68a3 ldr r3, [r4, #8] +1002dcba: f441 4100 orr.w r1, r1, #32768 ; 0x8000 +1002dcbe: f443 2300 orr.w r3, r3, #524288 ; 0x80000 +1002dcc2: 6221 str r1, [r4, #32] +1002dcc4: 60a3 str r3, [r4, #8] +1002dcc6: f89d 3018 ldrb.w r3, [sp, #24] +1002dcca: 2b01 cmp r3, #1 +1002dccc: d103 bne.n 1002dcd6 +1002dcce: 68a3 ldr r3, [r4, #8] +1002dcd0: f443 0300 orr.w r3, r3, #8388608 ; 0x800000 +1002dcd4: 60a3 str r3, [r4, #8] +1002dcd6: 68e3 ldr r3, [r4, #12] +1002dcd8: f042 4200 orr.w r2, r2, #2147483648 ; 0x80000000 +1002dcdc: f443 7380 orr.w r3, r3, #256 ; 0x100 +1002dce0: 60e3 str r3, [r4, #12] +1002dce2: 6923 ldr r3, [r4, #16] +1002dce4: 6022 str r2, [r4, #0] +1002dce6: f023 037f bic.w r3, r3, #127 ; 0x7f +1002dcea: 6123 str r3, [r4, #16] +1002dcec: f89d 301c ldrb.w r3, [sp, #28] +1002dcf0: 2b01 cmp r3, #1 +1002dcf2: d11a bne.n 1002dd2a +1002dcf4: f8d5 2d0c ldr.w r2, [r5, #3340] ; 0xd0c +1002dcf8: 6863 ldr r3, [r4, #4] +1002dcfa: 2a06 cmp r2, #6 +1002dcfc: d812 bhi.n 1002dd24 +1002dcfe: e8df f002 tbb [pc, r2] +1002dd02: 0411 .short 0x0411 +1002dd04: 040e1104 .word 0x040e1104 +1002dd08: 09 .byte 0x09 +1002dd09: 00 .byte 0x00 +1002dd0a: f423 0340 bic.w r3, r3, #12582912 ; 0xc00000 +1002dd0e: f443 0380 orr.w r3, r3, #4194304 ; 0x400000 +1002dd12: e009 b.n 1002dd28 +1002dd14: f423 0340 bic.w r3, r3, #12582912 ; 0xc00000 +1002dd18: f443 0300 orr.w r3, r3, #8388608 ; 0x800000 +1002dd1c: e004 b.n 1002dd28 +1002dd1e: f443 0340 orr.w r3, r3, #12582912 ; 0xc00000 +1002dd22: e001 b.n 1002dd28 +1002dd24: f423 0340 bic.w r3, r3, #12582912 ; 0xc00000 +1002dd28: 6063 str r3, [r4, #4] +1002dd2a: bdf8 pop {r3, r4, r5, r6, r7, pc} + +1002dd2c : +1002dd2c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1002dd30: f241 63c8 movw r3, #5832 ; 0x16c8 +1002dd34: b086 sub sp, #24 +1002dd36: 4680 mov r8, r0 +1002dd38: 4614 mov r4, r2 +1002dd3a: 58c5 ldr r5, [r0, r3] +1002dd3c: 2952 cmp r1, #82 ; 0x52 +1002dd3e: f200 8635 bhi.w 1002e9ac +1002dd42: e8df f011 tbh [pc, r1, lsl #1] +1002dd46: 0053 .short 0x0053 +1002dd48: 0070005f .word 0x0070005f +1002dd4c: 01ff01eb .word 0x01ff01eb +1002dd50: 02270633 .word 0x02270633 +1002dd54: 02560633 .word 0x02560633 +1002dd58: 033c026b .word 0x033c026b +1002dd5c: 03840348 .word 0x03840348 +1002dd60: 063303f5 .word 0x063303f5 +1002dd64: 04870633 .word 0x04870633 +1002dd68: 048e048b .word 0x048e048b +1002dd6c: 04ae04a5 .word 0x04ae04a5 +1002dd70: 06330633 .word 0x06330633 +1002dd74: 04b90633 .word 0x04b90633 +1002dd78: 04c504bb .word 0x04c504bb +1002dd7c: 063304d5 .word 0x063304d5 +1002dd80: 04e104dc .word 0x04e104dc +1002dd84: 04ef0633 .word 0x04ef0633 +1002dd88: 04f504f2 .word 0x04f504f2 +1002dd8c: 04ff04fb .word 0x04ff04fb +1002dd90: 06330515 .word 0x06330515 +1002dd94: 06330633 .word 0x06330633 +1002dd98: 06330633 .word 0x06330633 +1002dd9c: 06330519 .word 0x06330519 +1002dda0: 0633051d .word 0x0633051d +1002dda4: 06330633 .word 0x06330633 +1002dda8: 06330633 .word 0x06330633 +1002ddac: 05210633 .word 0x05210633 +1002ddb0: 06330633 .word 0x06330633 +1002ddb4: 06330633 .word 0x06330633 +1002ddb8: 06330633 .word 0x06330633 +1002ddbc: 05340530 .word 0x05340530 +1002ddc0: 06330633 .word 0x06330633 +1002ddc4: 05910570 .word 0x05910570 +1002ddc8: 066b0595 .word 0x066b0595 +1002ddcc: 06330633 .word 0x06330633 +1002ddd0: 063305a1 .word 0x063305a1 +1002ddd4: 06330633 .word 0x06330633 +1002ddd8: 06330633 .word 0x06330633 +1002dddc: 066b0633 .word 0x066b0633 +1002dde0: 05bc05a7 .word 0x05bc05a7 +1002dde4: 06330633 .word 0x06330633 +1002dde8: 062205d2 .word 0x062205d2 +1002ddec: f44f 7181 mov.w r1, #258 ; 0x102 +1002ddf0: f009 ff53 bl 10037c9a +1002ddf4: 7823 ldrb r3, [r4, #0] +1002ddf6: f000 020c and.w r2, r0, #12 +1002ddfa: f44f 7181 mov.w r1, #258 ; 0x102 +1002ddfe: 4640 mov r0, r8 +1002de00: 431a orrs r2, r3 +1002de02: e00c b.n 1002de1e +1002de04: f44f 7181 mov.w r1, #258 ; 0x102 +1002de08: f009 ff47 bl 10037c9a +1002de0c: 7822 ldrb r2, [r4, #0] +1002de0e: f000 0003 and.w r0, r0, #3 +1002de12: ea40 0282 orr.w r2, r0, r2, lsl #2 +1002de16: f44f 7181 mov.w r1, #258 ; 0x102 +1002de1a: 4640 mov r0, r8 +1002de1c: b2d2 uxtb r2, r2 +1002de1e: f009 ff51 bl 10037cc4 +1002de22: f000 bdfb b.w 1002ea1c +1002de26: f641 036a movw r3, #6250 ; 0x186a +1002de2a: 5cc3 ldrb r3, [r0, r3] +1002de2c: 7824 ldrb r4, [r4, #0] +1002de2e: 2b01 cmp r3, #1 +1002de30: f024 0502 bic.w r5, r4, #2 +1002de34: f040 80b8 bne.w 1002dfa8 +1002de38: f240 5151 movw r1, #1361 ; 0x551 +1002de3c: f009 ff2d bl 10037c9a +1002de40: f040 0210 orr.w r2, r0, #16 +1002de44: b2d2 uxtb r2, r2 +1002de46: f240 5151 movw r1, #1361 ; 0x551 +1002de4a: 4640 mov r0, r8 +1002de4c: f009 ff3a bl 10037cc4 +1002de50: f44f 7181 mov.w r1, #258 ; 0x102 +1002de54: 4640 mov r0, r8 +1002de56: f009 ff20 bl 10037c9a +1002de5a: f000 0003 and.w r0, r0, #3 +1002de5e: ea40 0284 orr.w r2, r0, r4, lsl #2 +1002de62: f44f 7181 mov.w r1, #258 ; 0x102 +1002de66: 4640 mov r0, r8 +1002de68: b2d2 uxtb r2, r2 +1002de6a: f009 ff2b bl 10037cc4 +1002de6e: b9d5 cbnz r5, 1002dea6 +1002de70: 4640 mov r0, r8 +1002de72: 2103 movs r1, #3 +1002de74: f7f4 fe8b bl 10022b8e +1002de78: 4604 mov r4, r0 +1002de7a: b978 cbnz r0, 1002de9c +1002de7c: 4640 mov r0, r8 +1002de7e: f7fe fd58 bl 1002c932 +1002de82: 4bbb ldr r3, [pc, #748] ; (1002e170 ) +1002de84: 4640 mov r0, r8 +1002de86: 9303 str r3, [sp, #12] +1002de88: 4bba ldr r3, [pc, #744] ; (1002e174 ) +1002de8a: 4669 mov r1, sp +1002de8c: aa03 add r2, sp, #12 +1002de8e: 9400 str r4, [sp, #0] +1002de90: 9401 str r4, [sp, #4] +1002de92: 9402 str r4, [sp, #8] +1002de94: 9304 str r3, [sp, #16] +1002de96: 9405 str r4, [sp, #20] +1002de98: f7fd f9bc bl 1002b214 +1002de9c: 4640 mov r0, r8 +1002de9e: f240 5151 movw r1, #1361 ; 0x551 +1002dea2: 2211 movs r2, #17 +1002dea4: e7bb b.n 1002de1e +1002dea6: 2c01 cmp r4, #1 +1002dea8: d106 bne.n 1002deb8 +1002deaa: 4640 mov r0, r8 +1002deac: f7fe fa49 bl 1002c342 +1002deb0: 4640 mov r0, r8 +1002deb2: f240 5151 movw r1, #1361 ; 0x551 +1002deb6: e0b4 b.n 1002e022 +1002deb8: 2c03 cmp r4, #3 +1002deba: f040 85af bne.w 1002ea1c +1002debe: 4bad ldr r3, [pc, #692] ; (1002e174 ) +1002dec0: 48ad ldr r0, [pc, #692] ; (1002e178 ) +1002dec2: 2400 movs r4, #0 +1002dec4: e88d 0019 stmia.w sp, {r0, r3, r4} +1002dec8: 4669 mov r1, sp +1002deca: 4640 mov r0, r8 +1002decc: aa03 add r2, sp, #12 +1002dece: 9403 str r4, [sp, #12] +1002ded0: 9404 str r4, [sp, #16] +1002ded2: 9405 str r4, [sp, #20] +1002ded4: f7fd f99e bl 1002b214 +1002ded8: f240 4121 movw r1, #1057 ; 0x421 +1002dedc: 22ff movs r2, #255 ; 0xff +1002dede: 4640 mov r0, r8 +1002dee0: f009 fef0 bl 10037cc4 +1002dee4: 4640 mov r0, r8 +1002dee6: f7fe fa2c bl 1002c342 +1002deea: f240 5151 movw r1, #1361 ; 0x551 +1002deee: 2212 movs r2, #18 +1002def0: 4640 mov r0, r8 +1002def2: f009 fee7 bl 10037cc4 +1002def6: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002defa: 4aa0 ldr r2, [pc, #640] ; (1002e17c ) +1002defc: 4640 mov r0, r8 +1002defe: f009 feef bl 10037ce0 +1002df02: f240 61a4 movw r1, #1700 ; 0x6a4 +1002df06: f64f 72ff movw r2, #65535 ; 0xffff +1002df0a: 4640 mov r0, r8 +1002df0c: f009 fee1 bl 10037cd2 +1002df10: f240 61a2 movw r1, #1698 ; 0x6a2 +1002df14: f44f 6280 mov.w r2, #1024 ; 0x400 +1002df18: 4640 mov r0, r8 +1002df1a: f009 feda bl 10037cd2 +1002df1e: f240 5159 movw r1, #1369 ; 0x559 +1002df22: 2202 movs r2, #2 +1002df24: 4640 mov r0, r8 +1002df26: f009 fecd bl 10037cc4 +1002df2a: f44f 61ae mov.w r1, #1392 ; 0x570 +1002df2e: 220a movs r2, #10 +1002df30: 4640 mov r0, r8 +1002df32: f009 fec7 bl 10037cc4 +1002df36: f44f 61a2 mov.w r1, #1296 ; 0x510 +1002df3a: 4622 mov r2, r4 +1002df3c: 4640 mov r0, r8 +1002df3e: f009 fec8 bl 10037cd2 +1002df42: f44f 61a8 mov.w r1, #1344 ; 0x540 +1002df46: f64f 7204 movw r2, #65284 ; 0xff04 +1002df4a: 4640 mov r0, r8 +1002df4c: f009 fec1 bl 10037cd2 +1002df50: f44f 61a3 mov.w r1, #1304 ; 0x518 +1002df54: f647 72ff movw r2, #32767 ; 0x7fff +1002df58: 4640 mov r0, r8 +1002df5a: f009 feba bl 10037cd2 +1002df5e: f240 5153 movw r1, #1363 ; 0x553 +1002df62: 2202 movs r2, #2 +1002df64: 4640 mov r0, r8 +1002df66: f009 fead bl 10037cc4 +1002df6a: f240 5151 movw r1, #1361 ; 0x551 +1002df6e: 4640 mov r0, r8 +1002df70: 221e movs r2, #30 +1002df72: f009 fea7 bl 10037cc4 +1002df76: 4640 mov r0, r8 +1002df78: 4621 mov r1, r4 +1002df7a: f7f0 fb07 bl 1001e58c +1002df7e: b158 cbz r0, 1002df98 +1002df80: f44f 61aa mov.w r1, #1360 ; 0x550 +1002df84: 4640 mov r0, r8 +1002df86: f009 fe88 bl 10037c9a +1002df8a: f44f 61aa mov.w r1, #1360 ; 0x550 +1002df8e: f000 02f7 and.w r2, r0, #247 ; 0xf7 +1002df92: 4640 mov r0, r8 +1002df94: f009 fe96 bl 10037cc4 +1002df98: 4640 mov r0, r8 +1002df9a: f44f 61aa mov.w r1, #1360 ; 0x550 +1002df9e: f009 fe7c bl 10037c9a +1002dfa2: f040 0201 orr.w r2, r0, #1 +1002dfa6: e24e b.n 1002e446 +1002dfa8: f44f 61aa mov.w r1, #1360 ; 0x550 +1002dfac: f009 fe75 bl 10037c9a +1002dfb0: f040 0210 orr.w r2, r0, #16 +1002dfb4: b2d2 uxtb r2, r2 +1002dfb6: f44f 61aa mov.w r1, #1360 ; 0x550 +1002dfba: 4640 mov r0, r8 +1002dfbc: f009 fe82 bl 10037cc4 +1002dfc0: f44f 7181 mov.w r1, #258 ; 0x102 +1002dfc4: 4640 mov r0, r8 +1002dfc6: f009 fe68 bl 10037c9a +1002dfca: f000 020c and.w r2, r0, #12 +1002dfce: f44f 7181 mov.w r1, #258 ; 0x102 +1002dfd2: 4640 mov r0, r8 +1002dfd4: 4322 orrs r2, r4 +1002dfd6: f009 fe75 bl 10037cc4 +1002dfda: b9d5 cbnz r5, 1002e012 +1002dfdc: 4640 mov r0, r8 +1002dfde: 2103 movs r1, #3 +1002dfe0: f7f4 fdd5 bl 10022b8e +1002dfe4: 4604 mov r4, r0 +1002dfe6: b978 cbnz r0, 1002e008 +1002dfe8: 4640 mov r0, r8 +1002dfea: f7fe fca2 bl 1002c932 +1002dfee: 4b60 ldr r3, [pc, #384] ; (1002e170 ) +1002dff0: 4640 mov r0, r8 +1002dff2: 9303 str r3, [sp, #12] +1002dff4: 4b5f ldr r3, [pc, #380] ; (1002e174 ) +1002dff6: 4669 mov r1, sp +1002dff8: aa03 add r2, sp, #12 +1002dffa: 9400 str r4, [sp, #0] +1002dffc: 9401 str r4, [sp, #4] +1002dffe: 9402 str r4, [sp, #8] +1002e000: 9304 str r3, [sp, #16] +1002e002: 9405 str r4, [sp, #20] +1002e004: f7fd f906 bl 1002b214 +1002e008: 4640 mov r0, r8 +1002e00a: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e00e: 2219 movs r2, #25 +1002e010: e705 b.n 1002de1e +1002e012: 2c01 cmp r4, #1 +1002e014: d107 bne.n 1002e026 +1002e016: 4640 mov r0, r8 +1002e018: f7fe f993 bl 1002c342 +1002e01c: 4640 mov r0, r8 +1002e01e: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e022: 221a movs r2, #26 +1002e024: e6fb b.n 1002de1e +1002e026: 2c03 cmp r4, #3 +1002e028: f040 84f8 bne.w 1002ea1c +1002e02c: 4b51 ldr r3, [pc, #324] ; (1002e174 ) +1002e02e: 4952 ldr r1, [pc, #328] ; (1002e178 ) +1002e030: 2400 movs r4, #0 +1002e032: e88d 001a stmia.w sp, {r1, r3, r4} +1002e036: 4640 mov r0, r8 +1002e038: 4669 mov r1, sp +1002e03a: aa03 add r2, sp, #12 +1002e03c: 9403 str r4, [sp, #12] +1002e03e: 9404 str r4, [sp, #16] +1002e040: 9405 str r4, [sp, #20] +1002e042: f7fd f8e7 bl 1002b214 +1002e046: f240 4121 movw r1, #1057 ; 0x421 +1002e04a: 22ff movs r2, #255 ; 0xff +1002e04c: 4640 mov r0, r8 +1002e04e: f009 fe39 bl 10037cc4 +1002e052: 4640 mov r0, r8 +1002e054: f7fe f975 bl 1002c342 +1002e058: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e05c: 2212 movs r2, #18 +1002e05e: 4640 mov r0, r8 +1002e060: f009 fe30 bl 10037cc4 +1002e064: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e068: 4a44 ldr r2, [pc, #272] ; (1002e17c ) +1002e06a: 4640 mov r0, r8 +1002e06c: f009 fe38 bl 10037ce0 +1002e070: f240 61a4 movw r1, #1700 ; 0x6a4 +1002e074: f64f 72ff movw r2, #65535 ; 0xffff +1002e078: 4640 mov r0, r8 +1002e07a: f009 fe2a bl 10037cd2 +1002e07e: f240 61a2 movw r1, #1698 ; 0x6a2 +1002e082: f44f 6280 mov.w r2, #1024 ; 0x400 +1002e086: 4640 mov r0, r8 +1002e088: f009 fe23 bl 10037cd2 +1002e08c: f240 5159 movw r1, #1369 ; 0x559 +1002e090: 2202 movs r2, #2 +1002e092: 4640 mov r0, r8 +1002e094: f009 fe16 bl 10037cc4 +1002e098: f240 515a movw r1, #1370 ; 0x55a +1002e09c: 220a movs r2, #10 +1002e09e: 4640 mov r0, r8 +1002e0a0: f009 fe10 bl 10037cc4 +1002e0a4: f44f 61a2 mov.w r1, #1296 ; 0x510 +1002e0a8: 4622 mov r2, r4 +1002e0aa: 4640 mov r0, r8 +1002e0ac: f009 fe11 bl 10037cd2 +1002e0b0: f44f 61a8 mov.w r1, #1344 ; 0x540 +1002e0b4: f64f 7204 movw r2, #65284 ; 0xff04 +1002e0b8: 4640 mov r0, r8 +1002e0ba: f009 fe0a bl 10037cd2 +1002e0be: f44f 61a3 mov.w r1, #1304 ; 0x518 +1002e0c2: f647 72ff movw r2, #32767 ; 0x7fff +1002e0c6: 4640 mov r0, r8 +1002e0c8: f009 fe03 bl 10037cd2 +1002e0cc: f240 5153 movw r1, #1363 ; 0x553 +1002e0d0: 2201 movs r2, #1 +1002e0d2: 4640 mov r0, r8 +1002e0d4: f009 fdf6 bl 10037cc4 +1002e0d8: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e0dc: 4640 mov r0, r8 +1002e0de: 221e movs r2, #30 +1002e0e0: f009 fdf0 bl 10037cc4 +1002e0e4: 4640 mov r0, r8 +1002e0e6: 4621 mov r1, r4 +1002e0e8: f7f0 fa50 bl 1001e58c +1002e0ec: b158 cbz r0, 1002e106 +1002e0ee: f240 5151 movw r1, #1361 ; 0x551 +1002e0f2: 4640 mov r0, r8 +1002e0f4: f009 fdd1 bl 10037c9a +1002e0f8: f240 5151 movw r1, #1361 ; 0x551 +1002e0fc: f000 02f7 and.w r2, r0, #247 ; 0xf7 +1002e100: 4640 mov r0, r8 +1002e102: f009 fddf bl 10037cc4 +1002e106: f240 5151 movw r1, #1361 ; 0x551 +1002e10a: 4640 mov r0, r8 +1002e10c: f009 fdc5 bl 10037c9a +1002e110: f240 5151 movw r1, #1361 ; 0x551 +1002e114: f040 0201 orr.w r2, r0, #1 +1002e118: 4640 mov r0, r8 +1002e11a: e67f b.n 1002de1c +1002e11c: f641 036a movw r3, #6250 ; 0x186a +1002e120: 5cc3 ldrb r3, [r0, r3] +1002e122: 2500 movs r5, #0 +1002e124: 2b01 cmp r3, #1 +1002e126: bf14 ite ne +1002e128: f44f 66c2 movne.w r6, #1552 ; 0x610 +1002e12c: f44f 66e0 moveq.w r6, #1792 ; 0x700 +1002e130: 19a9 adds r1, r5, r6 +1002e132: 5d62 ldrb r2, [r4, r5] +1002e134: 4640 mov r0, r8 +1002e136: 3501 adds r5, #1 +1002e138: f009 fdc4 bl 10037cc4 +1002e13c: 2d06 cmp r5, #6 +1002e13e: d1f7 bne.n 1002e130 +1002e140: f000 bc6c b.w 1002ea1c +1002e144: f641 036a movw r3, #6250 ; 0x186a +1002e148: 5cc3 ldrb r3, [r0, r3] +1002e14a: 2b01 cmp r3, #1 +1002e14c: 7823 ldrb r3, [r4, #0] +1002e14e: bf14 ite ne +1002e150: f44f 66c3 movne.w r6, #1560 ; 0x618 +1002e154: f44f 66e1 moveq.w r6, #1800 ; 0x708 +1002e158: b10b cbz r3, 1002e15e +1002e15a: 2500 movs r5, #0 +1002e15c: e010 b.n 1002e180 +1002e15e: 7863 ldrb r3, [r4, #1] +1002e160: 2b00 cmp r3, #0 +1002e162: d1fa bne.n 1002e15a +1002e164: 78a3 ldrb r3, [r4, #2] +1002e166: 2b00 cmp r3, #0 +1002e168: d1f7 bne.n 1002e15a +1002e16a: f000 bc57 b.w 1002ea1c +1002e16e: bf00 nop +1002e170: 01800100 .word 0x01800100 +1002e174: 01010000 .word 0x01010000 +1002e178: 01800102 .word 0x01800102 +1002e17c: 7000208e .word 0x7000208e +1002e180: 19a9 adds r1, r5, r6 +1002e182: 5d62 ldrb r2, [r4, r5] +1002e184: 4640 mov r0, r8 +1002e186: 3501 adds r5, #1 +1002e188: f009 fd9c bl 10037cc4 +1002e18c: 2d06 cmp r5, #6 +1002e18e: d1f7 bne.n 1002e180 +1002e190: f000 bc44 b.w 1002ea1c +1002e194: aa06 add r2, sp, #24 +1002e196: 2600 movs r6, #0 +1002e198: f822 6d0c strh.w r6, [r2, #-12]! +1002e19c: 4621 mov r1, r4 +1002e19e: f003 fa5d bl 1003165c +1002e1a2: f8bd 200c ldrh.w r2, [sp, #12] +1002e1a6: f44f 6188 mov.w r1, #1088 ; 0x440 +1002e1aa: f402 72a8 and.w r2, r2, #336 ; 0x150 +1002e1ae: f042 020d orr.w r2, r2, #13 +1002e1b2: f8ad 200c strh.w r2, [sp, #12] +1002e1b6: 4640 mov r0, r8 +1002e1b8: 872a strh r2, [r5, #56] ; 0x38 +1002e1ba: f002 025d and.w r2, r2, #93 ; 0x5d +1002e1be: f009 fd81 bl 10037cc4 +1002e1c2: f8bd 200c ldrh.w r2, [sp, #12] +1002e1c6: f240 4141 movw r1, #1089 ; 0x441 +1002e1ca: 4640 mov r0, r8 +1002e1cc: 0a12 lsrs r2, r2, #8 +1002e1ce: f009 fd79 bl 10037cc4 +1002e1d2: f8bd 300c ldrh.w r3, [sp, #12] +1002e1d6: 4631 mov r1, r6 +1002e1d8: 2b01 cmp r3, #1 +1002e1da: b2ca uxtb r2, r1 +1002e1dc: f101 0101 add.w r1, r1, #1 +1002e1e0: d901 bls.n 1002e1e6 +1002e1e2: 085b lsrs r3, r3, #1 +1002e1e4: e7f8 b.n 1002e1d8 +1002e1e6: f8ad 300c strh.w r3, [sp, #12] +1002e1ea: 4640 mov r0, r8 +1002e1ec: f44f 6190 mov.w r1, #1152 ; 0x480 +1002e1f0: e615 b.n 1002de1e +1002e1f2: f641 026a movw r2, #6250 ; 0x186a +1002e1f6: 5c82 ldrb r2, [r0, r2] +1002e1f8: 7823 ldrb r3, [r4, #0] +1002e1fa: 2a01 cmp r2, #1 +1002e1fc: f240 5451 movw r4, #1361 ; 0x551 +1002e200: bf18 it ne +1002e202: f44f 64aa movne.w r4, #1360 ; 0x550 +1002e206: 4621 mov r1, r4 +1002e208: b10b cbz r3, 1002e20e +1002e20a: 220c movs r2, #12 +1002e20c: e607 b.n 1002de1e +1002e20e: f009 fd44 bl 10037c9a +1002e212: 4621 mov r1, r4 +1002e214: f000 02f3 and.w r2, r0, #243 ; 0xf3 +1002e218: 4640 mov r0, r8 +1002e21a: e600 b.n 1002de1e +1002e21c: f8b0 272a ldrh.w r2, [r0, #1834] ; 0x72a +1002e220: f500 6305 add.w r3, r0, #2128 ; 0x850 +1002e224: 0292 lsls r2, r2, #10 +1002e226: e9d3 4500 ldrd r4, r5, [r3] +1002e22a: 17d3 asrs r3, r2, #31 +1002e22c: 4620 mov r0, r4 +1002e22e: 4629 mov r1, r5 +1002e230: f7e9 fa6c bl 1001770c +1002e234: f5b4 6480 subs.w r4, r4, #1024 ; 0x400 +1002e238: f8d8 3680 ldr.w r3, [r8, #1664] ; 0x680 +1002e23c: f145 35ff adc.w r5, r5, #4294967295 +1002e240: 1a24 subs r4, r4, r0 +1002e242: eb65 0501 sbc.w r5, r5, r1 +1002e246: 07da lsls r2, r3, #31 +1002e248: d502 bpl.n 1002e250 +1002e24a: 4640 mov r0, r8 +1002e24c: f7fe fb71 bl 1002c932 +1002e250: f641 036a movw r3, #6250 ; 0x186a +1002e254: f818 3003 ldrb.w r3, [r8, r3] +1002e258: 4640 mov r0, r8 +1002e25a: 2b01 cmp r3, #1 +1002e25c: d152 bne.n 1002e304 +1002e25e: f240 5151 movw r1, #1361 ; 0x551 +1002e262: f009 fd1a bl 10037c9a +1002e266: f240 5151 movw r1, #1361 ; 0x551 +1002e26a: f000 02f7 and.w r2, r0, #247 ; 0xf7 +1002e26e: 4640 mov r0, r8 +1002e270: f009 fd28 bl 10037cc4 +1002e274: f44f 61ad mov.w r1, #1384 ; 0x568 +1002e278: 4622 mov r2, r4 +1002e27a: 4640 mov r0, r8 +1002e27c: f009 fd30 bl 10037ce0 +1002e280: 462a mov r2, r5 +1002e282: f240 516c movw r1, #1388 ; 0x56c +1002e286: 4640 mov r0, r8 +1002e288: f009 fd2a bl 10037ce0 +1002e28c: f240 5151 movw r1, #1361 ; 0x551 +1002e290: 4640 mov r0, r8 +1002e292: f009 fd02 bl 10037c9a +1002e296: f040 0208 orr.w r2, r0, #8 +1002e29a: f240 5151 movw r1, #1361 ; 0x551 +1002e29e: 4640 mov r0, r8 +1002e2a0: b2d2 uxtb r2, r2 +1002e2a2: f009 fd0f bl 10037cc4 +1002e2a6: f8d8 3680 ldr.w r3, [r8, #1664] ; 0x680 +1002e2aa: f003 0303 and.w r3, r3, #3 +1002e2ae: 2b02 cmp r3, #2 +1002e2b0: d17c bne.n 1002e3ac +1002e2b2: 4640 mov r0, r8 +1002e2b4: 2110 movs r1, #16 +1002e2b6: f7f0 f969 bl 1001e58c +1002e2ba: 2800 cmp r0, #0 +1002e2bc: d076 beq.n 1002e3ac +1002e2be: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e2c2: 4640 mov r0, r8 +1002e2c4: f009 fce9 bl 10037c9a +1002e2c8: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e2cc: f000 02f7 and.w r2, r0, #247 ; 0xf7 +1002e2d0: 4640 mov r0, r8 +1002e2d2: f009 fcf7 bl 10037cc4 +1002e2d6: f44f 61ac mov.w r1, #1376 ; 0x560 +1002e2da: 4622 mov r2, r4 +1002e2dc: 4640 mov r0, r8 +1002e2de: f009 fcff bl 10037ce0 +1002e2e2: 462a mov r2, r5 +1002e2e4: f240 5164 movw r1, #1380 ; 0x564 +1002e2e8: 4640 mov r0, r8 +1002e2ea: f009 fcf9 bl 10037ce0 +1002e2ee: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e2f2: 4640 mov r0, r8 +1002e2f4: f009 fcd1 bl 10037c9a +1002e2f8: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e2fc: f040 0208 orr.w r2, r0, #8 +1002e300: 4640 mov r0, r8 +1002e302: e050 b.n 1002e3a6 +1002e304: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e308: f009 fcc7 bl 10037c9a +1002e30c: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e310: f000 02f7 and.w r2, r0, #247 ; 0xf7 +1002e314: 4640 mov r0, r8 +1002e316: f009 fcd5 bl 10037cc4 +1002e31a: f44f 61ac mov.w r1, #1376 ; 0x560 +1002e31e: 4622 mov r2, r4 +1002e320: 4640 mov r0, r8 +1002e322: f009 fcdd bl 10037ce0 +1002e326: 462a mov r2, r5 +1002e328: f240 5164 movw r1, #1380 ; 0x564 +1002e32c: 4640 mov r0, r8 +1002e32e: f009 fcd7 bl 10037ce0 +1002e332: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e336: 4640 mov r0, r8 +1002e338: f009 fcaf bl 10037c9a +1002e33c: f040 0208 orr.w r2, r0, #8 +1002e340: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e344: 4640 mov r0, r8 +1002e346: b2d2 uxtb r2, r2 +1002e348: f009 fcbc bl 10037cc4 +1002e34c: f8d8 3680 ldr.w r3, [r8, #1664] ; 0x680 +1002e350: f003 0303 and.w r3, r3, #3 +1002e354: 2b02 cmp r3, #2 +1002e356: d129 bne.n 1002e3ac +1002e358: 4640 mov r0, r8 +1002e35a: 2110 movs r1, #16 +1002e35c: f7f0 f916 bl 1001e58c +1002e360: b320 cbz r0, 1002e3ac +1002e362: f240 5151 movw r1, #1361 ; 0x551 +1002e366: 4640 mov r0, r8 +1002e368: f009 fc97 bl 10037c9a +1002e36c: f240 5151 movw r1, #1361 ; 0x551 +1002e370: f000 02f7 and.w r2, r0, #247 ; 0xf7 +1002e374: 4640 mov r0, r8 +1002e376: f009 fca5 bl 10037cc4 +1002e37a: f44f 61ad mov.w r1, #1384 ; 0x568 +1002e37e: 4622 mov r2, r4 +1002e380: 4640 mov r0, r8 +1002e382: f009 fcad bl 10037ce0 +1002e386: 462a mov r2, r5 +1002e388: f240 516c movw r1, #1388 ; 0x56c +1002e38c: 4640 mov r0, r8 +1002e38e: f009 fca7 bl 10037ce0 +1002e392: f240 5151 movw r1, #1361 ; 0x551 +1002e396: 4640 mov r0, r8 +1002e398: f009 fc7f bl 10037c9a +1002e39c: f240 5151 movw r1, #1361 ; 0x551 +1002e3a0: f040 0208 orr.w r2, r0, #8 +1002e3a4: 4640 mov r0, r8 +1002e3a6: b2d2 uxtb r2, r2 +1002e3a8: f009 fc8c bl 10037cc4 +1002e3ac: f8d8 3680 ldr.w r3, [r8, #1664] ; 0x680 +1002e3b0: 07db lsls r3, r3, #31 +1002e3b2: f140 8333 bpl.w 1002ea1c +1002e3b6: 4640 mov r0, r8 +1002e3b8: f7fd ffc3 bl 1002c342 +1002e3bc: e32e b.n 1002ea1c +1002e3be: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e3c2: f009 fc78 bl 10037cb6 +1002e3c6: 7823 ldrb r3, [r4, #0] +1002e3c8: b113 cbz r3, 1002e3d0 +1002e3ca: f040 02c0 orr.w r2, r0, #192 ; 0xc0 +1002e3ce: e2e7 b.n 1002e9a0 +1002e3d0: f020 02c0 bic.w r2, r0, #192 ; 0xc0 +1002e3d4: e2e4 b.n 1002e9a0 +1002e3d6: 2100 movs r1, #0 +1002e3d8: f7f4 fbd9 bl 10022b8e +1002e3dc: b128 cbz r0, 1002e3ea +1002e3de: 4640 mov r0, r8 +1002e3e0: f240 61a4 movw r1, #1700 ; 0x6a4 +1002e3e4: 2200 movs r2, #0 +1002e3e6: f009 fc74 bl 10037cd2 +1002e3ea: f641 036a movw r3, #6250 ; 0x186a +1002e3ee: f818 3003 ldrb.w r3, [r8, r3] +1002e3f2: 4640 mov r0, r8 +1002e3f4: 2b01 cmp r3, #1 +1002e3f6: f240 5153 movw r1, #1363 ; 0x553 +1002e3fa: d11a bne.n 1002e432 +1002e3fc: 2202 movs r2, #2 +1002e3fe: f009 fc61 bl 10037cc4 +1002e402: f240 5151 movw r1, #1361 ; 0x551 +1002e406: 4640 mov r0, r8 +1002e408: f009 fc47 bl 10037c9a +1002e40c: f040 0210 orr.w r2, r0, #16 +1002e410: b2d2 uxtb r2, r2 +1002e412: f240 5151 movw r1, #1361 ; 0x551 +1002e416: 4640 mov r0, r8 +1002e418: f009 fc54 bl 10037cc4 +1002e41c: f240 5151 movw r1, #1361 ; 0x551 +1002e420: 4640 mov r0, r8 +1002e422: f009 fc3a bl 10037c9a +1002e426: f240 5151 movw r1, #1361 ; 0x551 +1002e42a: f000 02f7 and.w r2, r0, #247 ; 0xf7 +1002e42e: 4640 mov r0, r8 +1002e430: e4f5 b.n 1002de1e +1002e432: 2201 movs r2, #1 +1002e434: f009 fc46 bl 10037cc4 +1002e438: 4640 mov r0, r8 +1002e43a: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e43e: f009 fc2c bl 10037c9a +1002e442: f040 0210 orr.w r2, r0, #16 +1002e446: 4640 mov r0, r8 +1002e448: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e44c: e4e6 b.n 1002de1c +1002e44e: f641 036a movw r3, #6250 ; 0x186a +1002e452: 5cc3 ldrb r3, [r0, r3] +1002e454: f240 5651 movw r6, #1361 ; 0x551 +1002e458: 2b01 cmp r3, #1 +1002e45a: 6903 ldr r3, [r0, #16] +1002e45c: bf18 it ne +1002e45e: f44f 66aa movne.w r6, #1360 ; 0x550 +1002e462: 06df lsls r7, r3, #27 +1002e464: f140 82a6 bpl.w 1002e9b4 +1002e468: 4640 mov r0, r8 +1002e46a: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e46e: f009 fc22 bl 10037cb6 +1002e472: 7823 ldrb r3, [r4, #0] +1002e474: 4607 mov r7, r0 +1002e476: b35b cbz r3, 1002e4d0 +1002e478: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e47c: f027 0280 bic.w r2, r7, #128 ; 0x80 +1002e480: 4640 mov r0, r8 +1002e482: f009 fc2d bl 10037ce0 +1002e486: 4640 mov r0, r8 +1002e488: f240 61a4 movw r1, #1700 ; 0x6a4 +1002e48c: 2200 movs r2, #0 +1002e48e: f009 fc20 bl 10037cd2 +1002e492: f8d8 3010 ldr.w r3, [r8, #16] +1002e496: f013 0f68 tst.w r3, #104 ; 0x68 +1002e49a: f040 828f bne.w 1002e9bc +1002e49e: f44f 6188 mov.w r1, #1088 ; 0x440 +1002e4a2: 4640 mov r0, r8 +1002e4a4: f009 fc00 bl 10037ca8 +1002e4a8: 2103 movs r1, #3 +1002e4aa: f8a5 01a8 strh.w r0, [r5, #424] ; 0x1a8 +1002e4ae: 4640 mov r0, r8 +1002e4b0: f7f4 fb6d bl 10022b8e +1002e4b4: 2800 cmp r0, #0 +1002e4b6: f000 82b1 beq.w 1002ea1c +1002e4ba: 4640 mov r0, r8 +1002e4bc: 2101 movs r1, #1 +1002e4be: f7f0 f865 bl 1001e58c +1002e4c2: 2800 cmp r0, #0 +1002e4c4: f000 82aa beq.w 1002ea1c +1002e4c8: 4640 mov r0, r8 +1002e4ca: f7fe fa32 bl 1002c932 +1002e4ce: e2a5 b.n 1002ea1c +1002e4d0: f8d8 3010 ldr.w r3, [r8, #16] +1002e4d4: f013 0f11 tst.w r3, #17 +1002e4d8: f000 827c beq.w 1002e9d4 +1002e4dc: 4640 mov r0, r8 +1002e4de: f240 61a4 movw r1, #1700 ; 0x6a4 +1002e4e2: f64f 72ff movw r2, #65535 ; 0xffff +1002e4e6: f009 fbf4 bl 10037cd2 +1002e4ea: f8d8 3010 ldr.w r3, [r8, #16] +1002e4ee: f013 0f68 tst.w r3, #104 ; 0x68 +1002e4f2: f040 8277 bne.w 1002e9e4 +1002e4f6: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e4fa: f047 0280 orr.w r2, r7, #128 ; 0x80 +1002e4fe: 4640 mov r0, r8 +1002e500: f009 fbee bl 10037ce0 +1002e504: f44f 6188 mov.w r1, #1088 ; 0x440 +1002e508: 4640 mov r0, r8 +1002e50a: f8b5 21a8 ldrh.w r2, [r5, #424] ; 0x1a8 +1002e50e: f009 fbe0 bl 10037cd2 +1002e512: 4640 mov r0, r8 +1002e514: 2103 movs r1, #3 +1002e516: f7f4 fb3a bl 10022b8e +1002e51a: 2800 cmp r0, #0 +1002e51c: f000 827e beq.w 1002ea1c +1002e520: 4640 mov r0, r8 +1002e522: 2101 movs r1, #1 +1002e524: f7f0 f832 bl 1001e58c +1002e528: 2800 cmp r0, #0 +1002e52a: f000 8277 beq.w 1002ea1c +1002e52e: e742 b.n 1002e3b6 +1002e530: 7823 ldrb r3, [r4, #0] +1002e532: bb93 cbnz r3, 1002e59a +1002e534: 2103 movs r1, #3 +1002e536: f7f4 fb2a bl 10022b8e +1002e53a: b138 cbz r0, 1002e54c +1002e53c: 4640 mov r0, r8 +1002e53e: 2101 movs r1, #1 +1002e540: f7f0 f824 bl 1001e58c +1002e544: b110 cbz r0, 1002e54c +1002e546: 4640 mov r0, r8 +1002e548: f7fe f9f3 bl 1002c932 +1002e54c: f240 61a4 movw r1, #1700 ; 0x6a4 +1002e550: 4640 mov r0, r8 +1002e552: f64f 72ff movw r2, #65535 ; 0xffff +1002e556: f009 fbbc bl 10037cd2 +1002e55a: 4640 mov r0, r8 +1002e55c: 2103 movs r1, #3 +1002e55e: f7f4 fb16 bl 10022b8e +1002e562: b138 cbz r0, 1002e574 +1002e564: 4640 mov r0, r8 +1002e566: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e56a: f009 fba4 bl 10037cb6 +1002e56e: f040 0280 orr.w r2, r0, #128 ; 0x80 +1002e572: e006 b.n 1002e582 +1002e574: 4640 mov r0, r8 +1002e576: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e57a: f009 fb9c bl 10037cb6 +1002e57e: f040 02c0 orr.w r2, r0, #192 ; 0xc0 +1002e582: 4640 mov r0, r8 +1002e584: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e588: f009 fbaa bl 10037ce0 +1002e58c: f8d8 3010 ldr.w r3, [r8, #16] +1002e590: 071e lsls r6, r3, #28 +1002e592: f100 8232 bmi.w 1002e9fa +1002e596: 2407 movs r4, #7 +1002e598: e056 b.n 1002e648 +1002e59a: 2b01 cmp r3, #1 +1002e59c: d11e bne.n 1002e5dc +1002e59e: 2100 movs r1, #0 +1002e5a0: f7f4 faf5 bl 10022b8e +1002e5a4: b128 cbz r0, 1002e5b2 +1002e5a6: 4640 mov r0, r8 +1002e5a8: f240 61a4 movw r1, #1700 ; 0x6a4 +1002e5ac: 2200 movs r2, #0 +1002e5ae: f009 fb90 bl 10037cd2 +1002e5b2: 4640 mov r0, r8 +1002e5b4: 2103 movs r1, #3 +1002e5b6: f7f4 faea bl 10022b8e +1002e5ba: b168 cbz r0, 1002e5d8 +1002e5bc: 4640 mov r0, r8 +1002e5be: 2101 movs r1, #1 +1002e5c0: f7ef ffe4 bl 1001e58c +1002e5c4: b140 cbz r0, 1002e5d8 +1002e5c6: 4640 mov r0, r8 +1002e5c8: f7fd febb bl 1002c342 +1002e5cc: 4640 mov r0, r8 +1002e5ce: f240 5153 movw r1, #1363 ; 0x553 +1002e5d2: 2203 movs r2, #3 +1002e5d4: f009 fb76 bl 10037cc4 +1002e5d8: 2430 movs r4, #48 ; 0x30 +1002e5da: e035 b.n 1002e648 +1002e5dc: 2b02 cmp r3, #2 +1002e5de: d1fb bne.n 1002e5d8 +1002e5e0: f641 036a movw r3, #6250 ; 0x186a +1002e5e4: 5cc3 ldrb r3, [r0, r3] +1002e5e6: 2b01 cmp r3, #1 +1002e5e8: d109 bne.n 1002e5fe +1002e5ea: f240 5151 movw r1, #1361 ; 0x551 +1002e5ee: f009 fb54 bl 10037c9a +1002e5f2: f240 5151 movw r1, #1361 ; 0x551 +1002e5f6: f000 02ef and.w r2, r0, #239 ; 0xef +1002e5fa: 4640 mov r0, r8 +1002e5fc: e008 b.n 1002e610 +1002e5fe: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e602: f009 fb4a bl 10037c9a +1002e606: f44f 61aa mov.w r1, #1360 ; 0x550 +1002e60a: f000 02ef and.w r2, r0, #239 ; 0xef +1002e60e: 4640 mov r0, r8 +1002e610: f009 fb58 bl 10037cc4 +1002e614: f8d8 3010 ldr.w r3, [r8, #16] +1002e618: f013 0f60 tst.w r3, #96 ; 0x60 +1002e61c: f040 81f6 bne.w 1002ea0c +1002e620: 2430 movs r4, #48 ; 0x30 +1002e622: 4640 mov r0, r8 +1002e624: 2103 movs r1, #3 +1002e626: f7f4 fab2 bl 10022b8e +1002e62a: b168 cbz r0, 1002e648 +1002e62c: 4640 mov r0, r8 +1002e62e: 2101 movs r1, #1 +1002e630: f7ef ffac bl 1001e58c +1002e634: b140 cbz r0, 1002e648 +1002e636: 4640 mov r0, r8 +1002e638: f7fd fe83 bl 1002c342 +1002e63c: 4640 mov r0, r8 +1002e63e: f240 5153 movw r1, #1363 ; 0x553 +1002e642: 2203 movs r2, #3 +1002e644: f009 fb3e bl 10037cc4 +1002e648: 4640 mov r0, r8 +1002e64a: f240 412a movw r1, #1066 ; 0x42a +1002e64e: ea44 2204 orr.w r2, r4, r4, lsl #8 +1002e652: e197 b.n 1002e984 +1002e654: f240 5154 movw r1, #1364 ; 0x554 +1002e658: 8822 ldrh r2, [r4, #0] +1002e65a: e193 b.n 1002e984 +1002e65c: f240 511b movw r1, #1307 ; 0x51b +1002e660: e027 b.n 1002e6b2 +1002e662: f240 613c movw r1, #1596 ; 0x63c +1002e666: 7822 ldrb r2, [r4, #0] +1002e668: f009 fb2c bl 10037cc4 +1002e66c: f240 613d movw r1, #1597 ; 0x63d +1002e670: 7862 ldrb r2, [r4, #1] +1002e672: 4640 mov r0, r8 +1002e674: f009 fb26 bl 10037cc4 +1002e678: f240 613e movw r1, #1598 ; 0x63e +1002e67c: 78a2 ldrb r2, [r4, #2] +1002e67e: 4640 mov r0, r8 +1002e680: f009 fb20 bl 10037cc4 +1002e684: 4640 mov r0, r8 +1002e686: f240 613f movw r1, #1599 ; 0x63f +1002e68a: 78e2 ldrb r2, [r4, #3] +1002e68c: f7ff bbc7 b.w 1002de1e +1002e690: 7823 ldrb r3, [r4, #0] +1002e692: f240 4142 movw r1, #1090 ; 0x442 +1002e696: 2b00 cmp r3, #0 +1002e698: bf14 ite ne +1002e69a: 2280 movne r2, #128 ; 0x80 +1002e69c: 2200 moveq r2, #0 +1002e69e: f7ff bbbe b.w 1002de1e +1002e6a2: 6843 ldr r3, [r0, #4] +1002e6a4: f44f 61d0 mov.w r1, #1664 ; 0x680 +1002e6a8: 2b03 cmp r3, #3 +1002e6aa: d102 bne.n 1002e6b2 +1002e6ac: 222c movs r2, #44 ; 0x2c +1002e6ae: f7ff bbb6 b.w 1002de1e +1002e6b2: 7822 ldrb r2, [r4, #0] +1002e6b4: f7ff bbb3 b.w 1002de1e +1002e6b8: 6823 ldr r3, [r4, #0] +1002e6ba: e01d b.n 1002e6f8 +1002e6bc: 7823 ldrb r3, [r4, #0] +1002e6be: b123 cbz r3, 1002e6ca +1002e6c0: f8d5 3224 ldr.w r3, [r5, #548] ; 0x224 +1002e6c4: f8c5 3244 str.w r3, [r5, #580] ; 0x244 +1002e6c8: e1a8 b.n 1002ea1c +1002e6ca: f8d5 3244 ldr.w r3, [r5, #580] ; 0x244 +1002e6ce: e013 b.n 1002e6f8 +1002e6d0: 6823 ldr r3, [r4, #0] +1002e6d2: f06f 4270 mvn.w r2, #4026531840 ; 0xf0000000 +1002e6d6: 4293 cmp r3, r2 +1002e6d8: d106 bne.n 1002e6e8 +1002e6da: f895 31ae ldrb.w r3, [r5, #430] ; 0x1ae +1002e6de: f885 31ad strb.w r3, [r5, #429] ; 0x1ad +1002e6e2: f8d5 31b0 ldr.w r3, [r5, #432] ; 0x1b0 +1002e6e6: e007 b.n 1002e6f8 +1002e6e8: f8d5 2224 ldr.w r2, [r5, #548] ; 0x224 +1002e6ec: 4313 orrs r3, r2 +1002e6ee: e003 b.n 1002e6f8 +1002e6f0: f8d5 3224 ldr.w r3, [r5, #548] ; 0x224 +1002e6f4: 6822 ldr r2, [r4, #0] +1002e6f6: 4013 ands r3, r2 +1002e6f8: f8c5 3224 str.w r3, [r5, #548] ; 0x224 +1002e6fc: e18e b.n 1002ea1c +1002e6fe: f44f 61ce mov.w r1, #1648 ; 0x670 +1002e702: f04f 4240 mov.w r2, #3221225472 ; 0xc0000000 +1002e706: e14e b.n 1002e9a6 +1002e708: f240 6174 movw r1, #1652 ; 0x674 +1002e70c: 6822 ldr r2, [r4, #0] +1002e70e: f009 fae7 bl 10037ce0 +1002e712: 6862 ldr r2, [r4, #4] +1002e714: 4640 mov r0, r8 +1002e716: f042 4200 orr.w r2, r2, #2147483648 ; 0x80000000 +1002e71a: f44f 61ce mov.w r1, #1648 ; 0x670 +1002e71e: f442 3280 orr.w r2, r2, #65536 ; 0x10000 +1002e722: e140 b.n 1002e9a6 +1002e724: f44f 61a0 mov.w r1, #1280 ; 0x500 +1002e728: e00a b.n 1002e740 +1002e72a: f240 5104 movw r1, #1284 ; 0x504 +1002e72e: e007 b.n 1002e740 +1002e730: 6823 ldr r3, [r4, #0] +1002e732: f44f 61a1 mov.w r1, #1288 ; 0x508 +1002e736: f8c5 3180 str.w r3, [r5, #384] ; 0x180 +1002e73a: e001 b.n 1002e740 +1002e73c: f240 510c movw r1, #1292 ; 0x50c +1002e740: 6822 ldr r2, [r4, #0] +1002e742: e130 b.n 1002e9a6 +1002e744: 7823 ldrb r3, [r4, #0] +1002e746: b16b cbz r3, 1002e764 +1002e748: f013 0f02 tst.w r3, #2 +1002e74c: bf14 ite ne +1002e74e: 2203 movne r2, #3 +1002e750: 2201 moveq r2, #1 +1002e752: 075d lsls r5, r3, #29 +1002e754: bf48 it mi +1002e756: f042 0204 orrmi.w r2, r2, #4 +1002e75a: 071c lsls r4, r3, #28 +1002e75c: d503 bpl.n 1002e766 +1002e75e: f042 0208 orr.w r2, r2, #8 +1002e762: e000 b.n 1002e766 +1002e764: 461a mov r2, r3 +1002e766: 4640 mov r0, r8 +1002e768: f44f 61b8 mov.w r1, #1472 ; 0x5c0 +1002e76c: f7ff bb57 b.w 1002de1e +1002e770: 7823 ldrb r3, [r4, #0] +1002e772: f885 3e08 strb.w r3, [r5, #3592] ; 0xe08 +1002e776: e151 b.n 1002ea1c +1002e778: 7821 ldrb r1, [r4, #0] +1002e77a: f00c fbdf bl 1003af3c +1002e77e: e14d b.n 1002ea1c +1002e780: 7821 ldrb r1, [r4, #0] +1002e782: f00c fda1 bl 1003b2c8 +1002e786: e149 b.n 1002ea1c +1002e788: 6821 ldr r1, [r4, #0] +1002e78a: f505 7000 add.w r0, r5, #512 ; 0x200 +1002e78e: 29ff cmp r1, #255 ; 0xff +1002e790: bf17 itett ne +1002e792: f895 379c ldrbne.w r3, [r5, #1948] ; 0x79c +1002e796: f895 179d ldrbeq.w r1, [r5, #1949] ; 0x79d +1002e79a: f885 379d strbne.w r3, [r5, #1949] ; 0x79d +1002e79e: b2c9 uxtbne r1, r1 +1002e7a0: f00a ff3e bl 10039620 +1002e7a4: e13a b.n 1002ea1c +1002e7a6: 8823 ldrh r3, [r4, #0] +1002e7a8: f8a5 3e06 strh.w r3, [r5, #3590] ; 0xe06 +1002e7ac: e136 b.n 1002ea1c +1002e7ae: f240 5122 movw r1, #1314 ; 0x522 +1002e7b2: 22ff movs r2, #255 ; 0xff +1002e7b4: f009 fa86 bl 10037cc4 +1002e7b8: 4640 mov r0, r8 +1002e7ba: f240 41dc movw r1, #1244 ; 0x4dc +1002e7be: f009 fa73 bl 10037ca8 +1002e7c2: f508 53a0 add.w r3, r8, #5120 ; 0x1400 +1002e7c6: f8a8 0b48 strh.w r0, [r8, #2888] ; 0xb48 +1002e7ca: f893 307b ldrb.w r3, [r3, #123] ; 0x7b +1002e7ce: 2b01 cmp r3, #1 +1002e7d0: f000 8124 beq.w 1002ea1c +1002e7d4: f44f 7121 mov.w r1, #644 ; 0x284 +1002e7d8: 4640 mov r0, r8 +1002e7da: f009 fa6c bl 10037cb6 +1002e7de: f44f 7121 mov.w r1, #644 ; 0x284 +1002e7e2: f440 2280 orr.w r2, r0, #262144 ; 0x40000 +1002e7e6: 4640 mov r0, r8 +1002e7e8: f009 fa7a bl 10037ce0 +1002e7ec: 2464 movs r4, #100 ; 0x64 +1002e7ee: 4640 mov r0, r8 +1002e7f0: f44f 7121 mov.w r1, #644 ; 0x284 +1002e7f4: f009 fa5f bl 10037cb6 +1002e7f8: 0380 lsls r0, r0, #14 +1002e7fa: d403 bmi.n 1002e804 +1002e7fc: 3c01 subs r4, #1 +1002e7fe: f014 04ff ands.w r4, r4, #255 ; 0xff +1002e802: d1f4 bne.n 1002e7ee +1002e804: 4640 mov r0, r8 +1002e806: f44f 7105 mov.w r1, #532 ; 0x214 +1002e80a: 2200 movs r2, #0 +1002e80c: f009 fa61 bl 10037cd2 +1002e810: 4640 mov r0, r8 +1002e812: f44f 7100 mov.w r1, #512 ; 0x200 +1002e816: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 +1002e81a: f009 fa61 bl 10037ce0 +1002e81e: 2002 movs r0, #2 +1002e820: f7e8 ff38 bl 10017694 +1002e824: e0fa b.n 1002ea1c +1002e826: f240 412a movw r1, #1066 ; 0x42a +1002e82a: f240 1201 movw r2, #257 ; 0x101 +1002e82e: f009 fa50 bl 10037cd2 +1002e832: f44f 747a mov.w r4, #1000 ; 0x3e8 +1002e836: f44f 7100 mov.w r1, #512 ; 0x200 +1002e83a: 4640 mov r0, r8 +1002e83c: f009 fa3b bl 10037cb6 +1002e840: f44f 7101 mov.w r1, #516 ; 0x204 +1002e844: 4605 mov r5, r0 +1002e846: 4640 mov r0, r8 +1002e848: f009 fa35 bl 10037cb6 +1002e84c: 4285 cmp r5, r0 +1002e84e: d105 bne.n 1002e85c +1002e850: 4640 mov r0, r8 +1002e852: f240 412a movw r1, #1066 ; 0x42a +1002e856: f243 0230 movw r2, #12336 ; 0x3030 +1002e85a: e093 b.n 1002e984 +1002e85c: 200a movs r0, #10 +1002e85e: f7e8 ff09 bl 10017674 +1002e862: 3c01 subs r4, #1 +1002e864: d1e7 bne.n 1002e836 +1002e866: e7f3 b.n 1002e850 +1002e868: 7823 ldrb r3, [r4, #0] +1002e86a: f885 3e09 strb.w r3, [r5, #3593] ; 0xe09 +1002e86e: e0d5 b.n 1002ea1c +1002e870: 6822 ldr r2, [r4, #0] +1002e872: f5b2 4fff cmp.w r2, #32640 ; 0x7f80 +1002e876: f200 80d1 bhi.w 1002ea1c +1002e87a: 327f adds r2, #127 ; 0x7f +1002e87c: f240 6152 movw r1, #1618 ; 0x652 +1002e880: f3c2 12c7 ubfx r2, r2, #7, #8 +1002e884: f7ff bacb b.w 1002de1e +1002e888: 8822 ldrh r2, [r4, #0] +1002e88a: b2d1 uxtb r1, r2 +1002e88c: 0a12 lsrs r2, r2, #8 +1002e88e: f00c fae5 bl 1003ae5c +1002e892: e0c3 b.n 1002ea1c +1002e894: 7824 ldrb r4, [r4, #0] +1002e896: 2c1f cmp r4, #31 +1002e898: f200 80c0 bhi.w 1002ea1c +1002e89c: f240 41d4 movw r1, #1236 ; 0x4d4 +1002e8a0: f009 fa09 bl 10037cb6 +1002e8a4: fa20 f204 lsr.w r2, r0, r4 +1002e8a8: 07d1 lsls r1, r2, #31 +1002e8aa: 4603 mov r3, r0 +1002e8ac: f100 80b6 bmi.w 1002ea1c +1002e8b0: 2201 movs r2, #1 +1002e8b2: 40a2 lsls r2, r4 +1002e8b4: 4640 mov r0, r8 +1002e8b6: f240 41d4 movw r1, #1236 ; 0x4d4 +1002e8ba: 431a orrs r2, r3 +1002e8bc: e073 b.n 1002e9a6 +1002e8be: 7824 ldrb r4, [r4, #0] +1002e8c0: 2c1f cmp r4, #31 +1002e8c2: f200 80ab bhi.w 1002ea1c +1002e8c6: f240 41d4 movw r1, #1236 ; 0x4d4 +1002e8ca: f009 f9f4 bl 10037cb6 +1002e8ce: fa20 f204 lsr.w r2, r0, r4 +1002e8d2: 07d2 lsls r2, r2, #31 +1002e8d4: 4603 mov r3, r0 +1002e8d6: f140 80a1 bpl.w 1002ea1c +1002e8da: 2201 movs r2, #1 +1002e8dc: 40a2 lsls r2, r4 +1002e8de: 4640 mov r0, r8 +1002e8e0: f240 41d4 movw r1, #1236 ; 0x4d4 +1002e8e4: ea23 0202 bic.w r2, r3, r2 +1002e8e8: e05d b.n 1002e9a6 +1002e8ea: 7823 ldrb r3, [r4, #0] +1002e8ec: 2b04 cmp r3, #4 +1002e8ee: f200 8095 bhi.w 1002ea1c +1002e8f2: e8df f003 tbb [pc, r3] +1002e8f6: 0f03 .short 0x0f03 +1002e8f8: 0f29 .short 0x0f29 +1002e8fa: 29 .byte 0x29 +1002e8fb: 00 .byte 0x00 +1002e8fc: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e900: f8d8 2c54 ldr.w r2, [r8, #3156] ; 0xc54 +1002e904: f009 f9ec bl 10037ce0 +1002e908: 4640 mov r0, r8 +1002e90a: f240 61a4 movw r1, #1700 ; 0x6a4 +1002e90e: f8b0 2c58 ldrh.w r2, [r0, #3160] ; 0xc58 +1002e912: e037 b.n 1002e984 +1002e914: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e918: f009 f9cd bl 10037cb6 +1002e91c: f240 61a4 movw r1, #1700 ; 0x6a4 +1002e920: f8c8 0c54 str.w r0, [r8, #3156] ; 0xc54 +1002e924: 4640 mov r0, r8 +1002e926: f009 f9bf bl 10037ca8 +1002e92a: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e92e: f8a8 0c58 strh.w r0, [r8, #3160] ; 0xc58 +1002e932: 4640 mov r0, r8 +1002e934: f009 f9bf bl 10037cb6 +1002e938: f020 02c1 bic.w r2, r0, #193 ; 0xc1 +1002e93c: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e940: 4640 mov r0, r8 +1002e942: f042 0201 orr.w r2, r2, #1 +1002e946: e016 b.n 1002e976 +1002e948: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e94c: f009 f9b3 bl 10037cb6 +1002e950: f240 61a4 movw r1, #1700 ; 0x6a4 +1002e954: f8c8 0c54 str.w r0, [r8, #3156] ; 0xc54 +1002e958: 4640 mov r0, r8 +1002e95a: f009 f9a5 bl 10037ca8 +1002e95e: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e962: f8a8 0c58 strh.w r0, [r8, #3160] ; 0xc58 +1002e966: 4640 mov r0, r8 +1002e968: f009 f9a5 bl 10037cb6 +1002e96c: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e970: f020 02c0 bic.w r2, r0, #192 ; 0xc0 +1002e974: 4640 mov r0, r8 +1002e976: f009 f9b3 bl 10037ce0 +1002e97a: 4640 mov r0, r8 +1002e97c: f240 61a4 movw r1, #1700 ; 0x6a4 +1002e980: f64f 72ff movw r2, #65535 ; 0xffff +1002e984: f009 f9a5 bl 10037cd2 +1002e988: e048 b.n 1002ea1c +1002e98a: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e98e: f009 f992 bl 10037cb6 +1002e992: 7823 ldrb r3, [r4, #0] +1002e994: b113 cbz r3, 1002e99c +1002e996: f440 7200 orr.w r2, r0, #512 ; 0x200 +1002e99a: e001 b.n 1002e9a0 +1002e99c: f420 7200 bic.w r2, r0, #512 ; 0x200 +1002e9a0: 4640 mov r0, r8 +1002e9a2: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002e9a6: f009 f99b bl 10037ce0 +1002e9aa: e037 b.n 1002ea1c +1002e9ac: 4622 mov r2, r4 +1002e9ae: f003 f81d bl 100319ec +1002e9b2: e033 b.n 1002ea1c +1002e9b4: 2110 movs r1, #16 +1002e9b6: f7ef fde9 bl 1001e58c +1002e9ba: e555 b.n 1002e468 +1002e9bc: 4631 mov r1, r6 +1002e9be: 4640 mov r0, r8 +1002e9c0: f009 f96b bl 10037c9a +1002e9c4: f040 0210 orr.w r2, r0, #16 +1002e9c8: 4631 mov r1, r6 +1002e9ca: 4640 mov r0, r8 +1002e9cc: b2d2 uxtb r2, r2 +1002e9ce: f009 f979 bl 10037cc4 +1002e9d2: e564 b.n 1002e49e +1002e9d4: 4640 mov r0, r8 +1002e9d6: 2111 movs r1, #17 +1002e9d8: f7ef fdd8 bl 1001e58c +1002e9dc: 2800 cmp r0, #0 +1002e9de: f47f ad7d bne.w 1002e4dc +1002e9e2: e582 b.n 1002e4ea +1002e9e4: 4631 mov r1, r6 +1002e9e6: 4640 mov r0, r8 +1002e9e8: f009 f957 bl 10037c9a +1002e9ec: 4631 mov r1, r6 +1002e9ee: f000 02ef and.w r2, r0, #239 ; 0xef +1002e9f2: 4640 mov r0, r8 +1002e9f4: f009 f966 bl 10037cc4 +1002e9f8: e57d b.n 1002e4f6 +1002e9fa: f508 53a4 add.w r3, r8, #5248 ; 0x1480 +1002e9fe: 3318 adds r3, #24 +1002ea00: 891b ldrh r3, [r3, #8] +1002ea02: 2b12 cmp r3, #18 +1002ea04: bf14 ite ne +1002ea06: 2430 movne r4, #48 ; 0x30 +1002ea08: 2407 moveq r4, #7 +1002ea0a: e61d b.n 1002e648 +1002ea0c: 4640 mov r0, r8 +1002ea0e: f240 5142 movw r1, #1346 ; 0x542 +1002ea12: 2202 movs r2, #2 +1002ea14: f009 f956 bl 10037cc4 +1002ea18: 2407 movs r4, #7 +1002ea1a: e602 b.n 1002e622 +1002ea1c: b006 add sp, #24 +1002ea1e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1002ea22: bf00 nop + +1002ea24 : +1002ea24: b538 push {r3, r4, r5, lr} +1002ea26: 292e cmp r1, #46 ; 0x2e +1002ea28: f241 63c8 movw r3, #5832 ; 0x16c8 +1002ea2c: 4605 mov r5, r0 +1002ea2e: 4614 mov r4, r2 +1002ea30: 58c3 ldr r3, [r0, r3] +1002ea32: d018 beq.n 1002ea66 +1002ea34: d807 bhi.n 1002ea46 +1002ea36: 2917 cmp r1, #23 +1002ea38: d00e beq.n 1002ea58 +1002ea3a: 2918 cmp r1, #24 +1002ea3c: d00f beq.n 1002ea5e +1002ea3e: 2906 cmp r1, #6 +1002ea40: d134 bne.n 1002eaac +1002ea42: 8f1b ldrh r3, [r3, #56] ; 0x38 +1002ea44: e024 b.n 1002ea90 +1002ea46: 2940 cmp r1, #64 ; 0x40 +1002ea48: d024 beq.n 1002ea94 +1002ea4a: 2946 cmp r1, #70 ; 0x46 +1002ea4c: d026 beq.n 1002ea9c +1002ea4e: 293b cmp r1, #59 ; 0x3b +1002ea50: d12c bne.n 1002eaac +1002ea52: f8b3 3e06 ldrh.w r3, [r3, #3590] ; 0xe06 +1002ea56: e01b b.n 1002ea90 +1002ea58: f893 303c ldrb.w r3, [r3, #60] ; 0x3c +1002ea5c: e01c b.n 1002ea98 +1002ea5e: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 +1002ea62: 6013 str r3, [r2, #0] +1002ea64: bd38 pop {r3, r4, r5, pc} +1002ea66: f241 73b0 movw r3, #6064 ; 0x17b0 +1002ea6a: 58c3 ldr r3, [r0, r3] +1002ea6c: 2b01 cmp r3, #1 +1002ea6e: d00d beq.n 1002ea8c +1002ea70: f241 4370 movw r3, #5232 ; 0x1470 +1002ea74: 58c3 ldr r3, [r0, r3] +1002ea76: 2b02 cmp r3, #2 +1002ea78: d008 beq.n 1002ea8c +1002ea7a: f44f 61c1 mov.w r1, #1544 ; 0x608 +1002ea7e: f009 f91a bl 10037cb6 +1002ea82: f410 2fe0 tst.w r0, #458752 ; 0x70000 +1002ea86: d001 beq.n 1002ea8c +1002ea88: 2300 movs r3, #0 +1002ea8a: e005 b.n 1002ea98 +1002ea8c: 2301 movs r3, #1 +1002ea8e: e003 b.n 1002ea98 +1002ea90: 8023 strh r3, [r4, #0] +1002ea92: bd38 pop {r3, r4, r5, pc} +1002ea94: f893 3e09 ldrb.w r3, [r3, #3593] ; 0xe09 +1002ea98: 7023 strb r3, [r4, #0] +1002ea9a: bd38 pop {r3, r4, r5, pc} +1002ea9c: f240 411a movw r1, #1050 ; 0x41a +1002eaa0: f009 f902 bl 10037ca8 +1002eaa4: f3c0 2080 ubfx r0, r0, #10, #1 +1002eaa8: 7020 strb r0, [r4, #0] +1002eaaa: bd38 pop {r3, r4, r5, pc} +1002eaac: 4628 mov r0, r5 +1002eaae: 4622 mov r2, r4 +1002eab0: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1002eab4: f002 bf9f b.w 100319f6 + +1002eab8 : +1002eab8: f241 63c8 movw r3, #5832 ; 0x16c8 +1002eabc: 2909 cmp r1, #9 +1002eabe: b570 push {r4, r5, r6, lr} +1002eac0: 4606 mov r6, r0 +1002eac2: 58c4 ldr r4, [r0, r3] +1002eac4: d163 bne.n 1002eb8e +1002eac6: 7813 ldrb r3, [r2, #0] +1002eac8: b16b cbz r3, 1002eae6 +1002eaca: 2b01 cmp r3, #1 +1002eacc: d10e bne.n 1002eaec +1002eace: f8d4 3224 ldr.w r3, [r4, #548] ; 0x224 +1002ead2: 07db lsls r3, r3, #31 +1002ead4: d405 bmi.n 1002eae2 +1002ead6: f44f 6145 mov.w r1, #3152 ; 0xc50 +1002eada: f009 f8de bl 10037c9a +1002eade: f884 079c strb.w r0, [r4, #1948] ; 0x79c +1002eae2: f06f 4370 mvn.w r3, #4026531840 ; 0xf0000000 +1002eae6: f8c4 3224 str.w r3, [r4, #548] ; 0x224 +1002eaea: e050 b.n 1002eb8e +1002eaec: 2b02 cmp r3, #2 +1002eaee: d104 bne.n 1002eafa +1002eaf0: f8d4 3224 ldr.w r3, [r4, #548] ; 0x224 +1002eaf4: f023 0301 bic.w r3, r3, #1 +1002eaf8: e7f5 b.n 1002eae6 +1002eafa: 2b03 cmp r3, #3 +1002eafc: d104 bne.n 1002eb08 +1002eafe: f8d4 3224 ldr.w r3, [r4, #548] ; 0x224 +1002eb02: f043 0301 orr.w r3, r3, #1 +1002eb06: e7ee b.n 1002eae6 +1002eb08: 2b04 cmp r3, #4 +1002eb0a: d107 bne.n 1002eb1c +1002eb0c: f8d4 3224 ldr.w r3, [r4, #548] ; 0x224 +1002eb10: f023 7380 bic.w r3, r3, #16777216 ; 0x1000000 +1002eb14: f8c4 3224 str.w r3, [r4, #548] ; 0x224 +1002eb18: 2300 movs r3, #0 +1002eb1a: e008 b.n 1002eb2e +1002eb1c: 2b05 cmp r3, #5 +1002eb1e: d109 bne.n 1002eb34 +1002eb20: f8d4 3224 ldr.w r3, [r4, #548] ; 0x224 +1002eb24: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000 +1002eb28: f8c4 3224 str.w r3, [r4, #548] ; 0x224 +1002eb2c: 2301 movs r3, #1 +1002eb2e: f884 399f strb.w r3, [r4, #2463] ; 0x99f +1002eb32: e02c b.n 1002eb8e +1002eb34: 2b06 cmp r3, #6 +1002eb36: f504 7500 add.w r5, r4, #512 ; 0x200 +1002eb3a: d111 bne.n 1002eb60 +1002eb3c: 217f movs r1, #127 ; 0x7f +1002eb3e: 460a mov r2, r1 +1002eb40: 4628 mov r0, r5 +1002eb42: f00a fbcc bl 100392de +1002eb46: f8d4 21b0 ldr.w r2, [r4, #432] ; 0x1b0 +1002eb4a: 2300 movs r3, #0 +1002eb4c: f422 5200 bic.w r2, r2, #8192 ; 0x2000 +1002eb50: f8c4 21b0 str.w r2, [r4, #432] ; 0x1b0 +1002eb54: 4628 mov r0, r5 +1002eb56: 2101 movs r1, #1 +1002eb58: f00a fa16 bl 10038f88 +1002eb5c: 2300 movs r3, #0 +1002eb5e: e010 b.n 1002eb82 +1002eb60: 2b07 cmp r3, #7 +1002eb62: d114 bne.n 1002eb8e +1002eb64: 4628 mov r0, r5 +1002eb66: f00a fbf5 bl 10039354 +1002eb6a: f8d4 21b0 ldr.w r2, [r4, #432] ; 0x1b0 +1002eb6e: 2300 movs r3, #0 +1002eb70: f442 5200 orr.w r2, r2, #8192 ; 0x2000 +1002eb74: f8c4 21b0 str.w r2, [r4, #432] ; 0x1b0 +1002eb78: 4628 mov r0, r5 +1002eb7a: 2101 movs r1, #1 +1002eb7c: f00a fa04 bl 10038f88 +1002eb80: 2301 movs r3, #1 +1002eb82: 4a04 ldr r2, [pc, #16] ; (1002eb94 ) +1002eb84: f506 569c add.w r6, r6, #4992 ; 0x1380 +1002eb88: 7013 strb r3, [r2, #0] +1002eb8a: f886 3079 strb.w r3, [r6, #121] ; 0x79 +1002eb8e: 2001 movs r0, #1 +1002eb90: bd70 pop {r4, r5, r6, pc} +1002eb92: bf00 nop +1002eb94: 1004de10 .word 0x1004de10 + +1002eb98 : +1002eb98: f241 63c8 movw r3, #5832 ; 0x16c8 +1002eb9c: 2909 cmp r1, #9 +1002eb9e: 58c3 ldr r3, [r0, r3] +1002eba0: d005 beq.n 1002ebae +1002eba2: 290d cmp r1, #13 +1002eba4: d006 beq.n 1002ebb4 +1002eba6: b939 cbnz r1, 1002ebb8 +1002eba8: f8d3 31b4 ldr.w r3, [r3, #436] ; 0x1b4 +1002ebac: e003 b.n 1002ebb6 +1002ebae: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 +1002ebb2: e000 b.n 1002ebb6 +1002ebb4: 2301 movs r3, #1 +1002ebb6: 6013 str r3, [r2, #0] +1002ebb8: 2001 movs r0, #1 +1002ebba: 4770 bx lr + +1002ebbc : +1002ebbc: b510 push {r4, lr} +1002ebbe: f500 53a0 add.w r3, r0, #5120 ; 0x1400 +1002ebc2: f893 4035 ldrb.w r4, [r3, #53] ; 0x35 +1002ebc6: b114 cbz r4, 1002ebce +1002ebc8: 6f1b ldr r3, [r3, #112] ; 0x70 +1002ebca: 2b02 cmp r3, #2 +1002ebcc: d009 beq.n 1002ebe2 +1002ebce: f241 63c8 movw r3, #5832 ; 0x16c8 +1002ebd2: 58c3 ldr r3, [r0, r3] +1002ebd4: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 +1002ebd8: b91b cbnz r3, 1002ebe2 +1002ebda: e8bd 4010 ldmia.w sp!, {r4, lr} +1002ebde: f00f be53 b.w 1003e888 <__PHY_QueryBBReg_8195A_veneer> +1002ebe2: 2000 movs r0, #0 +1002ebe4: bd10 pop {r4, pc} + +1002ebe6 : +1002ebe6: b530 push {r4, r5, lr} +1002ebe8: f500 54a0 add.w r4, r0, #5120 ; 0x1400 +1002ebec: f894 5035 ldrb.w r5, [r4, #53] ; 0x35 +1002ebf0: b115 cbz r5, 1002ebf8 +1002ebf2: 6f24 ldr r4, [r4, #112] ; 0x70 +1002ebf4: 2c02 cmp r4, #2 +1002ebf6: d009 beq.n 1002ec0c +1002ebf8: f241 64c8 movw r4, #5832 ; 0x16c8 +1002ebfc: 5904 ldr r4, [r0, r4] +1002ebfe: f894 4e94 ldrb.w r4, [r4, #3732] ; 0xe94 +1002ec02: b91c cbnz r4, 1002ec0c +1002ec04: e8bd 4030 ldmia.w sp!, {r4, r5, lr} +1002ec08: f00f bec2 b.w 1003e990 <__PHY_SetBBReg_8195A_veneer> +1002ec0c: bd30 pop {r4, r5, pc} + ... + +1002ec10 : +1002ec10: f241 63c8 movw r3, #5832 ; 0x16c8 +1002ec14: 58c3 ldr r3, [r0, r3] +1002ec16: b570 push {r4, r5, r6, lr} +1002ec18: 251c movs r5, #28 +1002ec1a: fb05 3101 mla r1, r5, r1, r3 +1002ec1e: 4616 mov r6, r2 +1002ec20: f501 75c2 add.w r5, r1, #388 ; 0x184 +1002ec24: f04f 32ff mov.w r2, #4294967295 +1002ec28: f640 0124 movw r1, #2084 ; 0x824 +1002ec2c: 4604 mov r4, r0 +1002ec2e: f7ff ffc5 bl 1002ebbc +1002ec32: b2f6 uxtb r6, r6 +1002ec34: f020 40ff bic.w r0, r0, #2139095040 ; 0x7f800000 +1002ec38: ea40 53c6 orr.w r3, r0, r6, lsl #23 +1002ec3c: f023 4300 bic.w r3, r3, #2147483648 ; 0x80000000 +1002ec40: 4620 mov r0, r4 +1002ec42: f640 0124 movw r1, #2084 ; 0x824 +1002ec46: f04f 32ff mov.w r2, #4294967295 +1002ec4a: f7ff ffcc bl 1002ebe6 +1002ec4e: 4620 mov r0, r4 +1002ec50: f640 0124 movw r1, #2084 ; 0x824 +1002ec54: f04f 32ff mov.w r2, #4294967295 +1002ec58: f7ff ffb0 bl 1002ebbc +1002ec5c: 4606 mov r6, r0 +1002ec5e: f026 4300 bic.w r3, r6, #2147483648 ; 0x80000000 +1002ec62: 4620 mov r0, r4 +1002ec64: f640 0124 movw r1, #2084 ; 0x824 +1002ec68: f04f 32ff mov.w r2, #4294967295 +1002ec6c: f7ff ffbb bl 1002ebe6 +1002ec70: f046 4300 orr.w r3, r6, #2147483648 ; 0x80000000 +1002ec74: f640 0124 movw r1, #2084 ; 0x824 +1002ec78: f04f 32ff mov.w r2, #4294967295 +1002ec7c: 4620 mov r0, r4 +1002ec7e: f7ff ffb2 bl 1002ebe6 +1002ec82: 200a movs r0, #10 +1002ec84: f7e8 fd0e bl 100176a4 +1002ec88: 2032 movs r0, #50 ; 0x32 +1002ec8a: f7e8 fd0b bl 100176a4 +1002ec8e: 2032 movs r0, #50 ; 0x32 +1002ec90: f7e8 fd08 bl 100176a4 +1002ec94: 200a movs r0, #10 +1002ec96: f7e8 fd05 bl 100176a4 +1002ec9a: f44f 6102 mov.w r1, #2080 ; 0x820 +1002ec9e: 4620 mov r0, r4 +1002eca0: f44f 7280 mov.w r2, #256 ; 0x100 +1002eca4: f7ff ff8a bl 1002ebbc +1002eca8: f010 0fff tst.w r0, #255 ; 0xff +1002ecac: bf18 it ne +1002ecae: 69a9 ldrne r1, [r5, #24] +1002ecb0: 4620 mov r0, r4 +1002ecb2: bf08 it eq +1002ecb4: 6969 ldreq r1, [r5, #20] +1002ecb6: 4a02 ldr r2, [pc, #8] ; (1002ecc0 ) +1002ecb8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1002ecbc: f7ff bf7e b.w 1002ebbc +1002ecc0: 000fffff .word 0x000fffff + +1002ecc4 : +1002ecc4: b538 push {r3, r4, r5, lr} +1002ecc6: 461c mov r4, r3 +1002ecc8: f7ff ffa2 bl 1002ec10 +1002eccc: 4605 mov r5, r0 +1002ecce: 4620 mov r0, r4 +1002ecd0: f00f fde6 bl 1003e8a0 <__phy_CalculateBitShift_veneer> +1002ecd4: 402c ands r4, r5 +1002ecd6: fa24 f000 lsr.w r0, r4, r0 +1002ecda: bd38 pop {r3, r4, r5, pc} + +1002ecdc : +1002ecdc: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1002ece0: 461d mov r5, r3 +1002ece2: 4b13 ldr r3, [pc, #76] ; (1002ed30 ) +1002ece4: 4606 mov r6, r0 +1002ece6: 429d cmp r5, r3 +1002ece8: 4688 mov r8, r1 +1002ecea: 4617 mov r7, r2 +1002ecec: 9c08 ldr r4, [sp, #32] +1002ecee: d00b beq.n 1002ed08 +1002ecf0: f7ff ff8e bl 1002ec10 +1002ecf4: 4681 mov r9, r0 +1002ecf6: 4628 mov r0, r5 +1002ecf8: f00f fdd2 bl 1003e8a0 <__phy_CalculateBitShift_veneer> +1002ecfc: fa04 f000 lsl.w r0, r4, r0 +1002ed00: ea29 0505 bic.w r5, r9, r5 +1002ed04: ea40 0405 orr.w r4, r0, r5 +1002ed08: f241 63c8 movw r3, #5832 ; 0x16c8 +1002ed0c: 58f3 ldr r3, [r6, r3] +1002ed0e: 221c movs r2, #28 +1002ed10: fb02 3208 mla r2, r2, r8, r3 +1002ed14: f3c4 0413 ubfx r4, r4, #0, #20 +1002ed18: b2fb uxtb r3, r7 +1002ed1a: 4630 mov r0, r6 +1002ed1c: f8d2 1190 ldr.w r1, [r2, #400] ; 0x190 +1002ed20: ea44 5303 orr.w r3, r4, r3, lsl #20 +1002ed24: f04f 32ff mov.w r2, #4294967295 +1002ed28: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1002ed2c: f7ff bf5b b.w 1002ebe6 +1002ed30: 000fffff .word 0x000fffff + +1002ed34 : +1002ed34: b508 push {r3, lr} +1002ed36: f241 63c8 movw r3, #5832 ; 0x16c8 +1002ed3a: 58c0 ldr r0, [r0, r3] +1002ed3c: f500 7000 add.w r0, r0, #512 ; 0x200 +1002ed40: f00b f9f7 bl 1003a132 +1002ed44: f110 30ff adds.w r0, r0, #4294967295 +1002ed48: bf18 it ne +1002ed4a: 2001 movne r0, #1 +1002ed4c: bd08 pop {r3, pc} + +1002ed4e : +1002ed4e: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +1002ed52: f241 66c8 movw r6, #5832 ; 0x16c8 +1002ed56: 5985 ldr r5, [r0, r6] +1002ed58: f44f 6307 mov.w r3, #2160 ; 0x870 +1002ed5c: f8c5 3184 str.w r3, [r5, #388] ; 0x184 +1002ed60: f44f 6306 mov.w r3, #2144 ; 0x860 +1002ed64: f8c5 3188 str.w r3, [r5, #392] ; 0x188 +1002ed68: f8c5 318c str.w r3, [r5, #396] ; 0x18c +1002ed6c: f44f 6304 mov.w r3, #2112 ; 0x840 +1002ed70: f8c5 3190 str.w r3, [r5, #400] ; 0x190 +1002ed74: f640 0324 movw r3, #2084 ; 0x824 +1002ed78: f8c5 3194 str.w r3, [r5, #404] ; 0x194 +1002ed7c: f44f 630a mov.w r3, #2208 ; 0x8a0 +1002ed80: f8c5 3198 str.w r3, [r5, #408] ; 0x198 +1002ed84: f640 03b8 movw r3, #2232 ; 0x8b8 +1002ed88: f8c5 319c str.w r3, [r5, #412] ; 0x19c +1002ed8c: 2104 movs r1, #4 +1002ed8e: 4604 mov r4, r0 +1002ed90: f008 ff91 bl 10037cb6 +1002ed94: 2104 movs r1, #4 +1002ed96: f440 3240 orr.w r2, r0, #196608 ; 0x30000 +1002ed9a: 4620 mov r0, r4 +1002ed9c: f008 ffa0 bl 10037ce0 +1002eda0: 2107 movs r1, #7 +1002eda2: 460a mov r2, r1 +1002eda4: 4620 mov r0, r4 +1002eda6: f008 ff8d bl 10037cc4 +1002edaa: 2150 movs r1, #80 ; 0x50 +1002edac: 2200 movs r2, #0 +1002edae: 4620 mov r0, r4 +1002edb0: f008 ff88 bl 10037cc4 +1002edb4: 4620 mov r0, r4 +1002edb6: 59a7 ldr r7, [r4, r6] +1002edb8: f003 fac2 bl 10032340 +1002edbc: f241 33f4 movw r3, #5108 ; 0x13f4 +1002edc0: 5ce3 ldrb r3, [r4, r3] +1002edc2: f505 7900 add.w r9, r5, #512 ; 0x200 +1002edc6: 2b01 cmp r3, #1 +1002edc8: f507 7800 add.w r8, r7, #512 ; 0x200 +1002edcc: d00b beq.n 1002ede6 +1002edce: 2b02 cmp r3, #2 +1002edd0: d005 beq.n 1002edde +1002edd2: 4640 mov r0, r8 +1002edd4: 2100 movs r1, #0 +1002edd6: f00b f998 bl 1003a10a +1002edda: b958 cbnz r0, 1002edf4 +1002eddc: e00c b.n 1002edf8 +1002edde: f897 3043 ldrb.w r3, [r7, #67] ; 0x43 +1002ede2: 2b01 cmp r3, #1 +1002ede4: d1f5 bne.n 1002edd2 +1002ede6: 4640 mov r0, r8 +1002ede8: 2101 movs r1, #1 +1002edea: 2200 movs r2, #0 +1002edec: f00b f965 bl 1003a0ba +1002edf0: 2800 cmp r0, #0 +1002edf2: d0ee beq.n 1002edd2 +1002edf4: 2600 movs r6, #0 +1002edf6: e033 b.n 1002ee60 +1002edf8: 4620 mov r0, r4 +1002edfa: f002 ff5d bl 10031cb8 +1002edfe: f241 33f5 movw r3, #5109 ; 0x13f5 +1002ee02: 5ce3 ldrb r3, [r4, r3] +1002ee04: 2b01 cmp r3, #1 +1002ee06: d005 beq.n 1002ee14 +1002ee08: 2b02 cmp r3, #2 +1002ee0a: d121 bne.n 1002ee50 +1002ee0c: f897 3043 ldrb.w r3, [r7, #67] ; 0x43 +1002ee10: 2b02 cmp r3, #2 +1002ee12: d01d beq.n 1002ee50 +1002ee14: 4640 mov r0, r8 +1002ee16: 2104 movs r1, #4 +1002ee18: f00b f977 bl 1003a10a +1002ee1c: f8d7 3208 ldr.w r3, [r7, #520] ; 0x208 +1002ee20: f1d0 0601 rsbs r6, r0, #1 +1002ee24: bf38 it cc +1002ee26: 2600 movcc r6, #0 +1002ee28: 2b01 cmp r3, #1 +1002ee2a: d102 bne.n 1002ee32 +1002ee2c: 4620 mov r0, r4 +1002ee2e: f003 f8bf bl 10031fb0 +1002ee32: f241 33f4 movw r3, #5108 ; 0x13f4 +1002ee36: 5ce3 ldrb r3, [r4, r3] +1002ee38: 2b01 cmp r3, #1 +1002ee3a: d005 beq.n 1002ee48 +1002ee3c: 2b02 cmp r3, #2 +1002ee3e: d108 bne.n 1002ee52 +1002ee40: f897 3043 ldrb.w r3, [r7, #67] ; 0x43 +1002ee44: 2b01 cmp r3, #1 +1002ee46: d104 bne.n 1002ee52 +1002ee48: 4620 mov r0, r4 +1002ee4a: f003 f9d1 bl 100321f0 +1002ee4e: e000 b.n 1002ee52 +1002ee50: 2601 movs r6, #1 +1002ee52: 4640 mov r0, r8 +1002ee54: 2101 movs r1, #1 +1002ee56: f00b f958 bl 1003a10a +1002ee5a: 2800 cmp r0, #0 +1002ee5c: bf18 it ne +1002ee5e: 2600 movne r6, #0 +1002ee60: f895 117b ldrb.w r1, [r5, #379] ; 0x17b +1002ee64: 4648 mov r0, r9 +1002ee66: f001 013f and.w r1, r1, #63 ; 0x3f +1002ee6a: f00f fcf1 bl 1003e850 <__ROM_odm_SetCrystalCap_veneer> +1002ee6e: 4630 mov r0, r6 +1002ee70: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + +1002ee74 : +1002ee74: f002 ba3a b.w 100312ec + +1002ee78 : +1002ee78: b510 push {r4, lr} +1002ee7a: 460c mov r4, r1 +1002ee7c: 2a00 cmp r2, #0 +1002ee7e: d17f bne.n 1002ef80 +1002ee80: 2b48 cmp r3, #72 ; 0x48 +1002ee82: d05f beq.n 1002ef44 +1002ee84: d824 bhi.n 1002eed0 +1002ee86: 2b12 cmp r3, #18 +1002ee88: d051 beq.n 1002ef2e +1002ee8a: d810 bhi.n 1002eeae +1002ee8c: 2b04 cmp r3, #4 +1002ee8e: d046 beq.n 1002ef1e +1002ee90: d805 bhi.n 1002ee9e +1002ee92: 2b02 cmp r3, #2 +1002ee94: bf08 it eq +1002ee96: f640 6108 movweq r1, #3592 ; 0xe08 +1002ee9a: d042 beq.n 1002ef22 +1002ee9c: bd10 pop {r4, pc} +1002ee9e: 2b0b cmp r3, #11 +1002eea0: d042 beq.n 1002ef28 +1002eea2: 2b0c cmp r3, #12 +1002eea4: bf08 it eq +1002eea6: f44f 6160 moveq.w r1, #3584 ; 0xe00 +1002eeaa: d05a beq.n 1002ef62 +1002eeac: bd10 pop {r4, pc} +1002eeae: 2b18 cmp r3, #24 +1002eeb0: d040 beq.n 1002ef34 +1002eeb2: d805 bhi.n 1002eec0 +1002eeb4: 2b16 cmp r3, #22 +1002eeb6: bf08 it eq +1002eeb8: f640 016c movweq r1, #2156 ; 0x86c +1002eebc: d059 beq.n 1002ef72 +1002eebe: bd10 pop {r4, pc} +1002eec0: 2b24 cmp r3, #36 ; 0x24 +1002eec2: d03c beq.n 1002ef3e +1002eec4: 2b30 cmp r3, #48 ; 0x30 +1002eec6: bf08 it eq +1002eec8: f640 6104 movweq r1, #3588 ; 0xe04 +1002eecc: d049 beq.n 1002ef62 +1002eece: bd10 pop {r4, pc} +1002eed0: 2b82 cmp r3, #130 ; 0x82 +1002eed2: d040 beq.n 1002ef56 +1002eed4: d810 bhi.n 1002eef8 +1002eed6: 2b6c cmp r3, #108 ; 0x6c +1002eed8: d037 beq.n 1002ef4a +1002eeda: d805 bhi.n 1002eee8 +1002eedc: 2b60 cmp r3, #96 ; 0x60 +1002eede: bf08 it eq +1002eee0: f640 6104 movweq r1, #3588 ; 0xe04 +1002eee4: d028 beq.n 1002ef38 +1002eee6: bd10 pop {r4, pc} +1002eee8: 2b80 cmp r3, #128 ; 0x80 +1002eeea: d031 beq.n 1002ef50 +1002eeec: 2b81 cmp r3, #129 ; 0x81 +1002eeee: bf08 it eq +1002eef0: f44f 6161 moveq.w r1, #3600 ; 0xe10 +1002eef4: d015 beq.n 1002ef22 +1002eef6: bd10 pop {r4, pc} +1002eef8: 2b85 cmp r3, #133 ; 0x85 +1002eefa: d034 beq.n 1002ef66 +1002eefc: d807 bhi.n 1002ef0e +1002eefe: 2b83 cmp r3, #131 ; 0x83 +1002ef00: d02c beq.n 1002ef5c +1002ef02: 2b84 cmp r3, #132 ; 0x84 +1002ef04: bf08 it eq +1002ef06: f640 6114 movweq r1, #3604 ; 0xe14 +1002ef0a: d02a beq.n 1002ef62 +1002ef0c: bd10 pop {r4, pc} +1002ef0e: 2b86 cmp r3, #134 ; 0x86 +1002ef10: d02c beq.n 1002ef6c +1002ef12: 2b87 cmp r3, #135 ; 0x87 +1002ef14: bf08 it eq +1002ef16: f640 6114 movweq r1, #3604 ; 0xe14 +1002ef1a: d02a beq.n 1002ef72 +1002ef1c: bd10 pop {r4, pc} +1002ef1e: f640 016c movw r1, #2156 ; 0x86c +1002ef22: f44f 427f mov.w r2, #65280 ; 0xff00 +1002ef26: e026 b.n 1002ef76 +1002ef28: f640 016c movw r1, #2156 ; 0x86c +1002ef2c: e004 b.n 1002ef38 +1002ef2e: f44f 6160 mov.w r1, #3584 ; 0xe00 +1002ef32: e7f6 b.n 1002ef22 +1002ef34: f44f 6160 mov.w r1, #3584 ; 0xe00 +1002ef38: f44f 027f mov.w r2, #16711680 ; 0xff0000 +1002ef3c: e01b b.n 1002ef76 +1002ef3e: f44f 6160 mov.w r1, #3584 ; 0xe00 +1002ef42: e016 b.n 1002ef72 +1002ef44: f640 6104 movw r1, #3588 ; 0xe04 +1002ef48: e7eb b.n 1002ef22 +1002ef4a: f640 6104 movw r1, #3588 ; 0xe04 +1002ef4e: e010 b.n 1002ef72 +1002ef50: f44f 6161 mov.w r1, #3600 ; 0xe10 +1002ef54: e005 b.n 1002ef62 +1002ef56: f44f 6161 mov.w r1, #3600 ; 0xe10 +1002ef5a: e7ed b.n 1002ef38 +1002ef5c: f44f 6161 mov.w r1, #3600 ; 0xe10 +1002ef60: e007 b.n 1002ef72 +1002ef62: 22ff movs r2, #255 ; 0xff +1002ef64: e007 b.n 1002ef76 +1002ef66: f640 6114 movw r1, #3604 ; 0xe14 +1002ef6a: e7da b.n 1002ef22 +1002ef6c: f640 6114 movw r1, #3604 ; 0xe14 +1002ef70: e7e2 b.n 1002ef38 +1002ef72: f04f 427f mov.w r2, #4278190080 ; 0xff000000 +1002ef76: 4623 mov r3, r4 +1002ef78: e8bd 4010 ldmia.w sp!, {r4, lr} +1002ef7c: f7ff be33 b.w 1002ebe6 +1002ef80: bd10 pop {r4, pc} + +1002ef82 : +1002ef82: 780a ldrb r2, [r1, #0] +1002ef84: f500 509c add.w r0, r0, #4992 ; 0x1380 +1002ef88: f890 3051 ldrb.w r3, [r0, #81] ; 0x51 +1002ef8c: 2a3f cmp r2, #63 ; 0x3f +1002ef8e: bf88 it hi +1002ef90: 223f movhi r2, #63 ; 0x3f +1002ef92: f103 33ff add.w r3, r3, #4294967295 +1002ef96: bf88 it hi +1002ef98: 700a strbhi r2, [r1, #0] +1002ef9a: 2b03 cmp r3, #3 +1002ef9c: d80f bhi.n 1002efbe +1002ef9e: e8df f003 tbb [pc, r3] +1002efa2: 0502 .short 0x0502 +1002efa4: 0b08 .short 0x0b08 +1002efa6: 780b ldrb r3, [r1, #0] +1002efa8: 3b03 subs r3, #3 +1002efaa: e007 b.n 1002efbc +1002efac: 780b ldrb r3, [r1, #0] +1002efae: 3b06 subs r3, #6 +1002efb0: e004 b.n 1002efbc +1002efb2: 780b ldrb r3, [r1, #0] +1002efb4: 3b0c subs r3, #12 +1002efb6: e001 b.n 1002efbc +1002efb8: 780b ldrb r3, [r1, #0] +1002efba: 3b12 subs r3, #18 +1002efbc: 700b strb r3, [r1, #0] +1002efbe: 4770 bx lr + +1002efc0 : +1002efc0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002efc4: f241 66c8 movw r6, #5832 ; 0x16c8 +1002efc8: b089 sub sp, #36 ; 0x24 +1002efca: f10d 0e20 add.w lr, sp, #32 +1002efce: 5987 ldr r7, [r0, r6] +1002efd0: f89d b048 ldrb.w fp, [sp, #72] ; 0x48 +1002efd4: 2600 movs r6, #0 +1002efd6: f80e 6d01 strb.w r6, [lr, #-1]! +1002efda: e88d 4800 stmia.w sp, {fp, lr} +1002efde: 4604 mov r4, r0 +1002efe0: 460d mov r5, r1 +1002efe2: 4690 mov r8, r2 +1002efe4: 9305 str r3, [sp, #20] +1002efe6: f88d 601e strb.w r6, [sp, #30] +1002efea: f002 fe7d bl 10031ce8 +1002efee: 4631 mov r1, r6 +1002eff0: 4632 mov r2, r6 +1002eff2: 4633 mov r3, r6 +1002eff4: 4682 mov sl, r0 +1002eff6: f8cd 8000 str.w r8, [sp] +1002effa: 4620 mov r0, r4 +1002effc: f002 fee4 bl 10031dc8 +1002f000: f241 33f8 movw r3, #5112 ; 0x13f8 +1002f004: 5ce1 ldrb r1, [r4, r3] +1002f006: e88d 0120 stmia.w sp, {r5, r8} +1002f00a: f89d 201f ldrb.w r2, [sp, #31] +1002f00e: f897 3034 ldrb.w r3, [r7, #52] ; 0x34 +1002f012: 4681 mov r9, r0 +1002f014: 9302 str r3, [sp, #8] +1002f016: 1b93 subs r3, r2, r6 +1002f018: 425a negs r2, r3 +1002f01a: 415a adcs r2, r3 +1002f01c: 4620 mov r0, r4 +1002f01e: 6afb ldr r3, [r7, #44] ; 0x2c +1002f020: f003 f851 bl 100320c6 +1002f024: 4629 mov r1, r5 +1002f026: 4548 cmp r0, r9 +1002f028: bfd4 ite le +1002f02a: eb0a 0300 addle.w r3, sl, r0 +1002f02e: eb0a 0309 addgt.w r3, sl, r9 +1002f032: 4642 mov r2, r8 +1002f034: 4606 mov r6, r0 +1002f036: 4620 mov r0, r4 +1002f038: f88d 301e strb.w r3, [sp, #30] +1002f03c: f002 fea4 bl 10031d88 +1002f040: f89d 301e ldrb.w r3, [sp, #30] +1002f044: a908 add r1, sp, #32 +1002f046: 4403 add r3, r0 +1002f048: f801 3d02 strb.w r3, [r1, #-2]! +1002f04c: 4607 mov r7, r0 +1002f04e: 4620 mov r0, r4 +1002f050: f7ff ff97 bl 1002ef82 +1002f054: f99d 301e ldrsb.w r3, [sp, #30] +1002f058: f04f 4480 mov.w r4, #1073741824 ; 0x40000000 +1002f05c: 2b3f cmp r3, #63 ; 0x3f +1002f05e: bfc4 itt gt +1002f060: 233f movgt r3, #63 ; 0x3f +1002f062: f88d 301e strbgt.w r3, [sp, #30] +1002f066: f99d 301e ldrsb.w r3, [sp, #30] +1002f06a: 2500 movs r5, #0 +1002f06c: 2b00 cmp r3, #0 +1002f06e: bfbc itt lt +1002f070: 2300 movlt r3, #0 +1002f072: f88d 301e strblt.w r3, [sp, #30] +1002f076: 4b13 ldr r3, [pc, #76] ; (1002f0c4 ) +1002f078: e9d3 2302 ldrd r2, r3, [r3, #8] +1002f07c: 4014 ands r4, r2 +1002f07e: 401d ands r5, r3 +1002f080: ea54 0305 orrs.w r3, r4, r5 +1002f084: d018 beq.n 1002f0b8 +1002f086: 4b10 ldr r3, [pc, #64] ; (1002f0c8 ) +1002f088: 681a ldr r2, [r3, #0] +1002f08a: 461c mov r4, r3 +1002f08c: b132 cbz r2, 1002f09c +1002f08e: 4b0f ldr r3, [pc, #60] ; (1002f0cc ) +1002f090: 9905 ldr r1, [sp, #20] +1002f092: 6818 ldr r0, [r3, #0] +1002f094: 4642 mov r2, r8 +1002f096: 465b mov r3, fp +1002f098: f7eb fd72 bl 1001ab80 +1002f09c: 6823 ldr r3, [r4, #0] +1002f09e: b15b cbz r3, 1002f0b8 +1002f0a0: f99d 301e ldrsb.w r3, [sp, #30] +1002f0a4: 9700 str r7, [sp, #0] +1002f0a6: 9301 str r3, [sp, #4] +1002f0a8: 4b08 ldr r3, [pc, #32] ; (1002f0cc ) +1002f0aa: fa4f f18a sxtb.w r1, sl +1002f0ae: 6858 ldr r0, [r3, #4] +1002f0b0: 464a mov r2, r9 +1002f0b2: 4633 mov r3, r6 +1002f0b4: f7eb fd64 bl 1001ab80 +1002f0b8: f89d 001e ldrb.w r0, [sp, #30] +1002f0bc: b009 add sp, #36 ; 0x24 +1002f0be: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1002f0c2: bf00 nop +1002f0c4: 10000720 .word 0x10000720 +1002f0c8: 10044f38 .word 0x10044f38 +1002f0cc: 10043ac4 .word 0x10043ac4 + +1002f0d0 : +1002f0d0: 2200 movs r2, #0 +1002f0d2: f002 bfc7 b.w 10032064 + +1002f0d6 : +1002f0d6: f241 63c8 movw r3, #5832 ; 0x16c8 +1002f0da: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1002f0de: 58c5 ldr r5, [r0, r3] +1002f0e0: 4606 mov r6, r0 +1002f0e2: 6aef ldr r7, [r5, #44] ; 0x2c +1002f0e4: f505 7400 add.w r4, r5, #512 ; 0x200 +1002f0e8: b9d7 cbnz r7, 1002f120 +1002f0ea: f895 3034 ldrb.w r3, [r5, #52] ; 0x34 +1002f0ee: 3b0d subs r3, #13 +1002f0f0: 2b01 cmp r3, #1 +1002f0f2: d815 bhi.n 1002f120 +1002f0f4: f44f 6100 mov.w r1, #2048 ; 0x800 +1002f0f8: f44f 62e0 mov.w r2, #1792 ; 0x700 +1002f0fc: 2306 movs r3, #6 +1002f0fe: f7ff fd72 bl 1002ebe6 +1002f102: 4630 mov r0, r6 +1002f104: f44f 6141 mov.w r1, #3088 ; 0xc10 +1002f108: f04f 5240 mov.w r2, #805306368 ; 0x30000000 +1002f10c: 463b mov r3, r7 +1002f10e: f7ff fd6a bl 1002ebe6 +1002f112: 4630 mov r0, r6 +1002f114: f640 41e4 movw r1, #3300 ; 0xce4 +1002f118: f04f 5240 mov.w r2, #805306368 ; 0x30000000 +1002f11c: 463b mov r3, r7 +1002f11e: e015 b.n 1002f14c +1002f120: 4630 mov r0, r6 +1002f122: f44f 6100 mov.w r1, #2048 ; 0x800 +1002f126: f44f 62e0 mov.w r2, #1792 ; 0x700 +1002f12a: 2307 movs r3, #7 +1002f12c: f7ff fd5b bl 1002ebe6 +1002f130: 4630 mov r0, r6 +1002f132: f44f 6141 mov.w r1, #3088 ; 0xc10 +1002f136: f04f 5240 mov.w r2, #805306368 ; 0x30000000 +1002f13a: 2301 movs r3, #1 +1002f13c: f7ff fd53 bl 1002ebe6 +1002f140: 4630 mov r0, r6 +1002f142: f640 41e4 movw r1, #3300 ; 0xce4 +1002f146: f04f 5240 mov.w r2, #805306368 ; 0x30000000 +1002f14a: 2301 movs r3, #1 +1002f14c: f7ff fd4b bl 1002ebe6 +1002f150: 4620 mov r0, r4 +1002f152: f44f 6144 mov.w r1, #3136 ; 0xc40 +1002f156: f04f 52f8 mov.w r2, #520093696 ; 0x1f000000 +1002f15a: 231f movs r3, #31 +1002f15c: f00b f804 bl 1003a168 +1002f160: 4620 mov r0, r4 +1002f162: f44f 6144 mov.w r1, #3136 ; 0xc40 +1002f166: f44f 7200 mov.w r2, #512 ; 0x200 +1002f16a: 2300 movs r3, #0 +1002f16c: f00a fffc bl 1003a168 +1002f170: 4620 mov r0, r4 +1002f172: f44f 6154 mov.w r1, #3392 ; 0xd40 +1002f176: f04f 32ff mov.w r2, #4294967295 +1002f17a: 2300 movs r3, #0 +1002f17c: f00a fff4 bl 1003a168 +1002f180: 4620 mov r0, r4 +1002f182: f640 5144 movw r1, #3396 ; 0xd44 +1002f186: f04f 32ff mov.w r2, #4294967295 +1002f18a: 2300 movs r3, #0 +1002f18c: f00a ffec bl 1003a168 +1002f190: 4620 mov r0, r4 +1002f192: f640 514c movw r1, #3404 ; 0xd4c +1002f196: f04f 32ff mov.w r2, #4294967295 +1002f19a: 2300 movs r3, #0 +1002f19c: f00a ffe4 bl 1003a168 +1002f1a0: 4620 mov r0, r4 +1002f1a2: f640 512c movw r1, #3372 ; 0xd2c +1002f1a6: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +1002f1aa: 2300 movs r3, #0 +1002f1ac: f00a ffdc bl 1003a168 +1002f1b0: 4620 mov r0, r4 +1002f1b2: f640 1154 movw r1, #2388 ; 0x954 +1002f1b6: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 +1002f1ba: 2303 movs r3, #3 +1002f1bc: f00a ffd4 bl 1003a168 +1002f1c0: 4620 mov r0, r4 +1002f1c2: f44f 6143 mov.w r1, #3120 ; 0xc30 +1002f1c6: 220f movs r2, #15 +1002f1c8: 230a movs r3, #10 +1002f1ca: f00a ffcd bl 1003a168 +1002f1ce: 2300 movs r3, #0 +1002f1d0: 4620 mov r0, r4 +1002f1d2: f640 413c movw r1, #3132 ; 0xc3c +1002f1d6: 2210 movs r2, #16 +1002f1d8: f00a ffc6 bl 1003a168 +1002f1dc: f895 3034 ldrb.w r3, [r5, #52] ; 0x34 +1002f1e0: 3b01 subs r3, #1 +1002f1e2: 2b0d cmp r3, #13 +1002f1e4: f200 80db bhi.w 1002f39e +1002f1e8: e8df f003 tbb [pc, r3] +1002f1ec: d9453907 .word 0xd9453907 +1002f1f0: d9d9d9d9 .word 0xd9d9d9d9 +1002f1f4: d977d9d9 .word 0xd977d9d9 +1002f1f8: a58a .short 0xa58a +1002f1fa: 6aeb ldr r3, [r5, #44] ; 0x2c +1002f1fc: 2b00 cmp r3, #0 +1002f1fe: f040 80ce bne.w 1002f39e +1002f202: 4620 mov r0, r4 +1002f204: f44f 6144 mov.w r1, #3136 ; 0xc40 +1002f208: f04f 52f8 mov.w r2, #520093696 ; 0x1f000000 +1002f20c: 2305 movs r3, #5 +1002f20e: f00a ffab bl 1003a168 +1002f212: 4620 mov r0, r4 +1002f214: f44f 6144 mov.w r1, #3136 ; 0xc40 +1002f218: f44f 7200 mov.w r2, #512 ; 0x200 +1002f21c: 2301 movs r3, #1 +1002f21e: f00a ffa3 bl 1003a168 +1002f222: 4620 mov r0, r4 +1002f224: f640 1154 movw r1, #2388 ; 0x954 +1002f228: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 +1002f22c: 2301 movs r3, #1 +1002f22e: f00a ff9b bl 1003a168 +1002f232: 4620 mov r0, r4 +1002f234: f44f 6143 mov.w r1, #3120 ; 0xc30 +1002f238: 220f movs r2, #15 +1002f23a: 2307 movs r3, #7 +1002f23c: f00a ff94 bl 1003a168 +1002f240: 4620 mov r0, r4 +1002f242: f640 413c movw r1, #3132 ; 0xc3c +1002f246: 2210 movs r2, #16 +1002f248: 2301 movs r3, #1 +1002f24a: f00a ff8d bl 1003a168 +1002f24e: 4620 mov r0, r4 +1002f250: f44f 6154 mov.w r1, #3392 ; 0xd40 +1002f254: f04f 32ff mov.w r2, #4294967295 +1002f258: f44f 4340 mov.w r3, #49152 ; 0xc000 +1002f25c: e093 b.n 1002f386 +1002f25e: 6aeb ldr r3, [r5, #44] ; 0x2c +1002f260: 2b00 cmp r3, #0 +1002f262: f040 809c bne.w 1002f39e +1002f266: 4620 mov r0, r4 +1002f268: f640 514c movw r1, #3404 ; 0xd4c +1002f26c: f04f 32ff mov.w r2, #4294967295 +1002f270: f04f 4340 mov.w r3, #3221225472 ; 0xc0000000 +1002f274: e087 b.n 1002f386 +1002f276: 6aeb ldr r3, [r5, #44] ; 0x2c +1002f278: 2b00 cmp r3, #0 +1002f27a: f040 8090 bne.w 1002f39e +1002f27e: 4620 mov r0, r4 +1002f280: f44f 6144 mov.w r1, #3136 ; 0xc40 +1002f284: f04f 52f8 mov.w r2, #520093696 ; 0x1f000000 +1002f288: 2308 movs r3, #8 +1002f28a: f00a ff6d bl 1003a168 +1002f28e: 4620 mov r0, r4 +1002f290: f44f 6144 mov.w r1, #3136 ; 0xc40 +1002f294: f44f 7200 mov.w r2, #512 ; 0x200 +1002f298: 2301 movs r3, #1 +1002f29a: f00a ff65 bl 1003a168 +1002f29e: 4620 mov r0, r4 +1002f2a0: f640 1154 movw r1, #2388 ; 0x954 +1002f2a4: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 +1002f2a8: 2301 movs r3, #1 +1002f2aa: f00a ff5d bl 1003a168 +1002f2ae: 4620 mov r0, r4 +1002f2b0: f44f 6143 mov.w r1, #3120 ; 0xc30 +1002f2b4: 220f movs r2, #15 +1002f2b6: 2307 movs r3, #7 +1002f2b8: f00a ff56 bl 1003a168 +1002f2bc: 4620 mov r0, r4 +1002f2be: f640 413c movw r1, #3132 ; 0xc3c +1002f2c2: 2210 movs r2, #16 +1002f2c4: 2301 movs r3, #1 +1002f2c6: f00a ff4f bl 1003a168 +1002f2ca: 4620 mov r0, r4 +1002f2cc: f640 514c movw r1, #3404 ; 0xd4c +1002f2d0: f04f 32ff mov.w r2, #4294967295 +1002f2d4: f44f 4300 mov.w r3, #32768 ; 0x8000 +1002f2d8: e055 b.n 1002f386 +1002f2da: 6aed ldr r5, [r5, #44] ; 0x2c +1002f2dc: 2d01 cmp r5, #1 +1002f2de: d15e bne.n 1002f39e +1002f2e0: 4620 mov r0, r4 +1002f2e2: f640 5144 movw r1, #3396 ; 0xd44 +1002f2e6: f04f 32ff mov.w r2, #4294967295 +1002f2ea: f04f 63c0 mov.w r3, #100663296 ; 0x6000000 +1002f2ee: f00a ff3b bl 1003a168 +1002f2f2: 4620 mov r0, r4 +1002f2f4: f640 512c movw r1, #3372 ; 0xd2c +1002f2f8: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +1002f2fc: 462b mov r3, r5 +1002f2fe: e04a b.n 1002f396 +1002f300: 6aeb ldr r3, [r5, #44] ; 0x2c +1002f302: 2b00 cmp r3, #0 +1002f304: d14b bne.n 1002f39e +1002f306: 4620 mov r0, r4 +1002f308: f44f 6144 mov.w r1, #3136 ; 0xc40 +1002f30c: f04f 52f8 mov.w r2, #520093696 ; 0x1f000000 +1002f310: 230b movs r3, #11 +1002f312: f00a ff29 bl 1003a168 +1002f316: 4620 mov r0, r4 +1002f318: f44f 6144 mov.w r1, #3136 ; 0xc40 +1002f31c: f44f 7200 mov.w r2, #512 ; 0x200 +1002f320: 2301 movs r3, #1 +1002f322: f00a ff21 bl 1003a168 +1002f326: 4620 mov r0, r4 +1002f328: f44f 6154 mov.w r1, #3392 ; 0xd40 +1002f32c: f04f 32ff mov.w r2, #4294967295 +1002f330: f04f 6380 mov.w r3, #67108864 ; 0x4000000 +1002f334: e027 b.n 1002f386 +1002f336: 6aeb ldr r3, [r5, #44] ; 0x2c +1002f338: bb8b cbnz r3, 1002f39e +1002f33a: 4620 mov r0, r4 +1002f33c: f44f 6144 mov.w r1, #3136 ; 0xc40 +1002f340: f04f 52f8 mov.w r2, #520093696 ; 0x1f000000 +1002f344: 2304 movs r3, #4 +1002f346: f00a ff0f bl 1003a168 +1002f34a: 4620 mov r0, r4 +1002f34c: f44f 6144 mov.w r1, #3136 ; 0xc40 +1002f350: f44f 7200 mov.w r2, #512 ; 0x200 +1002f354: 2301 movs r3, #1 +1002f356: f00a ff07 bl 1003a168 +1002f35a: 4620 mov r0, r4 +1002f35c: f640 1154 movw r1, #2388 ; 0x954 +1002f360: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 +1002f364: 2301 movs r3, #1 +1002f366: f00a feff bl 1003a168 +1002f36a: 4620 mov r0, r4 +1002f36c: f44f 6143 mov.w r1, #3120 ; 0xc30 +1002f370: 220f movs r2, #15 +1002f372: 2307 movs r3, #7 +1002f374: f00a fef8 bl 1003a168 +1002f378: 4620 mov r0, r4 +1002f37a: f640 514c movw r1, #3404 ; 0xd4c +1002f37e: f04f 32ff mov.w r2, #4294967295 +1002f382: f44f 2300 mov.w r3, #524288 ; 0x80000 +1002f386: f00a feef bl 1003a168 +1002f38a: 4620 mov r0, r4 +1002f38c: f640 512c movw r1, #3372 ; 0xd2c +1002f390: f04f 5280 mov.w r2, #268435456 ; 0x10000000 +1002f394: 2301 movs r3, #1 +1002f396: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +1002f39a: f00a bee5 b.w 1003a168 +1002f39e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1002f3a2 : +1002f3a2: b570 push {r4, r5, r6, lr} +1002f3a4: 460e mov r6, r1 +1002f3a6: f44f 61cd mov.w r1, #1640 ; 0x668 +1002f3aa: 4605 mov r5, r0 +1002f3ac: f008 fc7c bl 10037ca8 +1002f3b0: 4604 mov r4, r0 +1002f3b2: b116 cbz r6, 1002f3ba +1002f3b4: 2e01 cmp r6, #1 +1002f3b6: d007 beq.n 1002f3c8 +1002f3b8: bd70 pop {r4, r5, r6, pc} +1002f3ba: f64f 627f movw r2, #65151 ; 0xfe7f +1002f3be: 4628 mov r0, r5 +1002f3c0: f44f 61cd mov.w r1, #1640 ; 0x668 +1002f3c4: 4022 ands r2, r4 +1002f3c6: e007 b.n 1002f3d8 +1002f3c8: f64f 627f movw r2, #65151 ; 0xfe7f +1002f3cc: 4002 ands r2, r0 +1002f3ce: f44f 61cd mov.w r1, #1640 ; 0x668 +1002f3d2: 4628 mov r0, r5 +1002f3d4: f042 0280 orr.w r2, r2, #128 ; 0x80 +1002f3d8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1002f3dc: f008 bc79 b.w 10037cd2 + +1002f3e0 : +1002f3e0: f241 63c8 movw r3, #5832 ; 0x16c8 +1002f3e4: 58c3 ldr r3, [r0, r3] +1002f3e6: 6ad8 ldr r0, [r3, #44] ; 0x2c +1002f3e8: 2801 cmp r0, #1 +1002f3ea: d108 bne.n 1002f3fe +1002f3ec: f893 3035 ldrb.w r3, [r3, #53] ; 0x35 +1002f3f0: 2b02 cmp r3, #2 +1002f3f2: d005 beq.n 1002f400 +1002f3f4: 2b01 cmp r3, #1 +1002f3f6: bf0c ite eq +1002f3f8: 2002 moveq r0, #2 +1002f3fa: 2000 movne r0, #0 +1002f3fc: 4770 bx lr +1002f3fe: 2000 movs r0, #0 +1002f400: 4770 bx lr + +1002f402 : +1002f402: f241 63c8 movw r3, #5832 ; 0x16c8 +1002f406: b570 push {r4, r5, r6, lr} +1002f408: 58c6 ldr r6, [r0, r3] +1002f40a: 4604 mov r4, r0 +1002f40c: 6af1 ldr r1, [r6, #44] ; 0x2c +1002f40e: f7ff ffc8 bl 1002f3a2 +1002f412: 4620 mov r0, r4 +1002f414: f7ff ffe4 bl 1002f3e0 +1002f418: f240 4183 movw r1, #1155 ; 0x483 +1002f41c: 4602 mov r2, r0 +1002f41e: 4620 mov r0, r4 +1002f420: f008 fc50 bl 10037cc4 +1002f424: 6af5 ldr r5, [r6, #44] ; 0x2c +1002f426: 2d00 cmp r5, #0 +1002f428: d056 beq.n 1002f4d8 +1002f42a: 2d01 cmp r5, #1 +1002f42c: f040 8099 bne.w 1002f562 +1002f430: 4620 mov r0, r4 +1002f432: f44f 6100 mov.w r1, #2048 ; 0x800 +1002f436: 462a mov r2, r5 +1002f438: 462b mov r3, r5 +1002f43a: f7ff fbd4 bl 1002ebe6 +1002f43e: 4620 mov r0, r4 +1002f440: f44f 6110 mov.w r1, #2304 ; 0x900 +1002f444: 462a mov r2, r5 +1002f446: 462b mov r3, r5 +1002f448: f7ff fbcd bl 1002ebe6 +1002f44c: f896 3035 ldrb.w r3, [r6, #53] ; 0x35 +1002f450: 4620 mov r0, r4 +1002f452: f44f 6120 mov.w r1, #2560 ; 0xa00 +1002f456: 2210 movs r2, #16 +1002f458: 085b lsrs r3, r3, #1 +1002f45a: f7ff fbc4 bl 1002ebe6 +1002f45e: 4620 mov r0, r4 +1002f460: f44f 6150 mov.w r1, #3328 ; 0xd00 +1002f464: f44f 6240 mov.w r2, #3072 ; 0xc00 +1002f468: f896 3035 ldrb.w r3, [r6, #53] ; 0x35 +1002f46c: f7ff fbbb bl 1002ebe6 +1002f470: f896 3035 ldrb.w r3, [r6, #53] ; 0x35 +1002f474: 4620 mov r0, r4 +1002f476: 2b01 cmp r3, #1 +1002f478: bf14 ite ne +1002f47a: 2301 movne r3, #1 +1002f47c: 2302 moveq r3, #2 +1002f47e: f640 0118 movw r1, #2072 ; 0x818 +1002f482: f04f 6240 mov.w r2, #201326592 ; 0xc000000 +1002f486: f7ff fbae bl 1002ebe6 +1002f48a: 4620 mov r0, r4 +1002f48c: f44f 6100 mov.w r1, #2048 ; 0x800 +1002f490: f44f 7240 mov.w r2, #768 ; 0x300 +1002f494: 2303 movs r3, #3 +1002f496: f7ff fba6 bl 1002ebe6 +1002f49a: 4620 mov r0, r4 +1002f49c: f640 41e4 movw r1, #3300 ; 0xce4 +1002f4a0: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 +1002f4a4: 462b mov r3, r5 +1002f4a6: f7ff fb9e bl 1002ebe6 +1002f4aa: 4620 mov r0, r4 +1002f4ac: f44f 6141 mov.w r1, #3088 ; 0xc10 +1002f4b0: f04f 5240 mov.w r2, #805306368 ; 0x30000000 +1002f4b4: 462b mov r3, r5 +1002f4b6: f7ff fb96 bl 1002ebe6 +1002f4ba: 4620 mov r0, r4 +1002f4bc: f640 1154 movw r1, #2388 ; 0x954 +1002f4c0: f04f 627f mov.w r2, #267386880 ; 0xff00000 +1002f4c4: 2306 movs r3, #6 +1002f4c6: f7ff fb8e bl 1002ebe6 +1002f4ca: 4620 mov r0, r4 +1002f4cc: f640 1154 movw r1, #2388 ; 0x954 +1002f4d0: f44f 2200 mov.w r2, #524288 ; 0x80000 +1002f4d4: 2300 movs r3, #0 +1002f4d6: e042 b.n 1002f55e +1002f4d8: 4620 mov r0, r4 +1002f4da: f44f 6100 mov.w r1, #2048 ; 0x800 +1002f4de: 2201 movs r2, #1 +1002f4e0: 462b mov r3, r5 +1002f4e2: f7ff fb80 bl 1002ebe6 +1002f4e6: 4620 mov r0, r4 +1002f4e8: f44f 6110 mov.w r1, #2304 ; 0x900 +1002f4ec: 2201 movs r2, #1 +1002f4ee: 462b mov r3, r5 +1002f4f0: f7ff fb79 bl 1002ebe6 +1002f4f4: 4620 mov r0, r4 +1002f4f6: f44f 6100 mov.w r1, #2048 ; 0x800 +1002f4fa: f44f 7240 mov.w r2, #768 ; 0x300 +1002f4fe: 2303 movs r3, #3 +1002f500: f7ff fb71 bl 1002ebe6 +1002f504: 4620 mov r0, r4 +1002f506: f640 41e4 movw r1, #3300 ; 0xce4 +1002f50a: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 +1002f50e: 2301 movs r3, #1 +1002f510: f7ff fb69 bl 1002ebe6 +1002f514: 4620 mov r0, r4 +1002f516: f44f 6141 mov.w r1, #3088 ; 0xc10 +1002f51a: f04f 5240 mov.w r2, #805306368 ; 0x30000000 +1002f51e: 2301 movs r3, #1 +1002f520: f7ff fb61 bl 1002ebe6 +1002f524: f896 3034 ldrb.w r3, [r6, #52] ; 0x34 +1002f528: 4620 mov r0, r4 +1002f52a: 3b0d subs r3, #13 +1002f52c: 2b01 cmp r3, #1 +1002f52e: f640 1154 movw r1, #2388 ; 0x954 +1002f532: f04f 627f mov.w r2, #267386880 ; 0xff00000 +1002f536: d809 bhi.n 1002f54c +1002f538: 230b movs r3, #11 +1002f53a: f7ff fb54 bl 1002ebe6 +1002f53e: 4620 mov r0, r4 +1002f540: f640 1154 movw r1, #2388 ; 0x954 +1002f544: f44f 2200 mov.w r2, #524288 ; 0x80000 +1002f548: 462b mov r3, r5 +1002f54a: e008 b.n 1002f55e +1002f54c: 23a8 movs r3, #168 ; 0xa8 +1002f54e: f7ff fb4a bl 1002ebe6 +1002f552: 4620 mov r0, r4 +1002f554: f640 1154 movw r1, #2388 ; 0x954 +1002f558: f44f 2200 mov.w r2, #524288 ; 0x80000 +1002f55c: 2301 movs r3, #1 +1002f55e: f7ff fb42 bl 1002ebe6 +1002f562: 4620 mov r0, r4 +1002f564: 6af1 ldr r1, [r6, #44] ; 0x2c +1002f566: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1002f56a: f001 be9d b.w 100312a8 + ... + +1002f570 : +1002f570: b570 push {r4, r5, r6, lr} +1002f572: f241 63c8 movw r3, #5832 ; 0x16c8 +1002f576: 58c5 ldr r5, [r0, r3] +1002f578: 4604 mov r4, r0 +1002f57a: f895 303b ldrb.w r3, [r5, #59] ; 0x3b +1002f57e: f895 1034 ldrb.w r1, [r5, #52] ; 0x34 +1002f582: 2b05 cmp r3, #5 +1002f584: d044 beq.n 1002f610 +1002f586: f8d5 21a0 ldr.w r2, [r5, #416] ; 0x1a0 +1002f58a: 4b22 ldr r3, [pc, #136] ; (1002f614 ) +1002f58c: 4013 ands r3, r2 +1002f58e: 430b orrs r3, r1 +1002f590: f8c5 31a0 str.w r3, [r5, #416] ; 0x1a0 +1002f594: f3c3 0313 ubfx r3, r3, #0, #20 +1002f598: f8d5 1190 ldr.w r1, [r5, #400] ; 0x190 +1002f59c: f04f 32ff mov.w r2, #4294967295 +1002f5a0: f043 73c0 orr.w r3, r3, #25165824 ; 0x1800000 +1002f5a4: f7ff fb1f bl 1002ebe6 +1002f5a8: 6aee ldr r6, [r5, #44] ; 0x2c +1002f5aa: b9ee cbnz r6, 1002f5e8 +1002f5ac: f895 3034 ldrb.w r3, [r5, #52] ; 0x34 +1002f5b0: 4620 mov r0, r4 +1002f5b2: 3b0d subs r3, #13 +1002f5b4: 2b01 cmp r3, #1 +1002f5b6: f640 1154 movw r1, #2388 ; 0x954 +1002f5ba: f04f 627f mov.w r2, #267386880 ; 0xff00000 +1002f5be: d809 bhi.n 1002f5d4 +1002f5c0: 230b movs r3, #11 +1002f5c2: f7ff fb10 bl 1002ebe6 +1002f5c6: 4620 mov r0, r4 +1002f5c8: f640 1154 movw r1, #2388 ; 0x954 +1002f5cc: f44f 2200 mov.w r2, #524288 ; 0x80000 +1002f5d0: 4633 mov r3, r6 +1002f5d2: e019 b.n 1002f608 +1002f5d4: 23a8 movs r3, #168 ; 0xa8 +1002f5d6: f7ff fb06 bl 1002ebe6 +1002f5da: 4620 mov r0, r4 +1002f5dc: f640 1154 movw r1, #2388 ; 0x954 +1002f5e0: f44f 2200 mov.w r2, #524288 ; 0x80000 +1002f5e4: 2301 movs r3, #1 +1002f5e6: e00f b.n 1002f608 +1002f5e8: 2e01 cmp r6, #1 +1002f5ea: d111 bne.n 1002f610 +1002f5ec: 4620 mov r0, r4 +1002f5ee: f640 1154 movw r1, #2388 ; 0x954 +1002f5f2: f04f 627f mov.w r2, #267386880 ; 0xff00000 +1002f5f6: 2306 movs r3, #6 +1002f5f8: f7ff faf5 bl 1002ebe6 +1002f5fc: 4620 mov r0, r4 +1002f5fe: f640 1154 movw r1, #2388 ; 0x954 +1002f602: f44f 2200 mov.w r2, #524288 ; 0x80000 +1002f606: 2300 movs r3, #0 +1002f608: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1002f60c: f7ff baeb b.w 1002ebe6 +1002f610: bd70 pop {r4, r5, r6, pc} +1002f612: bf00 nop +1002f614: 0ffffc00 .word 0x0ffffc00 + +1002f618 : +1002f618: f241 63c8 movw r3, #5832 ; 0x16c8 +1002f61c: b570 push {r4, r5, r6, lr} +1002f61e: 58c5 ldr r5, [r0, r3] +1002f620: f241 73ac movw r3, #6060 ; 0x17ac +1002f624: 58c3 ldr r3, [r0, r3] +1002f626: 4604 mov r4, r0 +1002f628: b9eb cbnz r3, 1002f666 +1002f62a: f241 73b0 movw r3, #6064 ; 0x17b0 +1002f62e: 58c6 ldr r6, [r0, r3] +1002f630: b9ce cbnz r6, 1002f666 +1002f632: f895 317c ldrb.w r3, [r5, #380] ; 0x17c +1002f636: b11b cbz r3, 1002f640 +1002f638: f7ff ff9a bl 1002f570 +1002f63c: f885 617c strb.w r6, [r5, #380] ; 0x17c +1002f640: f895 317d ldrb.w r3, [r5, #381] ; 0x17d +1002f644: b12b cbz r3, 1002f652 +1002f646: 4620 mov r0, r4 +1002f648: f7ff fedb bl 1002f402 +1002f64c: 2300 movs r3, #0 +1002f64e: f885 317d strb.w r3, [r5, #381] ; 0x17d +1002f652: 4620 mov r0, r4 +1002f654: f7ff fd3f bl 1002f0d6 +1002f658: 4620 mov r0, r4 +1002f65a: f895 1034 ldrb.w r1, [r5, #52] ; 0x34 +1002f65e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1002f662: f7ff bd35 b.w 1002f0d0 +1002f666: bd70 pop {r4, r5, r6, pc} + +1002f668 : +1002f668: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002f66c: b085 sub sp, #20 +1002f66e: 461e mov r6, r3 +1002f670: 9b0e ldr r3, [sp, #56] ; 0x38 +1002f672: 4617 mov r7, r2 +1002f674: 9303 str r3, [sp, #12] +1002f676: f241 63c8 movw r3, #5832 ; 0x16c8 +1002f67a: 58c4 ldr r4, [r0, r3] +1002f67c: 4605 mov r5, r0 +1002f67e: 9a0f ldr r2, [sp, #60] ; 0x3c +1002f680: f89d a044 ldrb.w sl, [sp, #68] ; 0x44 +1002f684: f894 8034 ldrb.w r8, [r4, #52] ; 0x34 +1002f688: 6ae3 ldr r3, [r4, #44] ; 0x2c +1002f68a: f894 b035 ldrb.w fp, [r4, #53] ; 0x35 +1002f68e: f894 9036 ldrb.w r9, [r4, #54] ; 0x36 +1002f692: b929 cbnz r1, 1002f6a0 +1002f694: 2f00 cmp r7, #0 +1002f696: d03c beq.n 1002f712 +1002f698: 2101 movs r1, #1 +1002f69a: f884 117d strb.w r1, [r4, #381] ; 0x17d +1002f69e: e00c b.n 1002f6ba +1002f6a0: 4631 mov r1, r6 +1002f6a2: 9201 str r2, [sp, #4] +1002f6a4: 9302 str r3, [sp, #8] +1002f6a6: f001 ffb6 bl 10031616 +1002f6aa: 9a01 ldr r2, [sp, #4] +1002f6ac: 9b02 ldr r3, [sp, #8] +1002f6ae: b110 cbz r0, 1002f6b6 +1002f6b0: 2101 movs r1, #1 +1002f6b2: f884 117c strb.w r1, [r4, #380] ; 0x17c +1002f6b6: 2f00 cmp r7, #0 +1002f6b8: d1ee bne.n 1002f698 +1002f6ba: f8b4 117c ldrh.w r1, [r4, #380] ; 0x17c +1002f6be: b341 cbz r1, 1002f712 +1002f6c0: f894 017c ldrb.w r0, [r4, #380] ; 0x17c +1002f6c4: b118 cbz r0, 1002f6ce +1002f6c6: f884 6034 strb.w r6, [r4, #52] ; 0x34 +1002f6ca: f884 6036 strb.w r6, [r4, #54] ; 0x36 +1002f6ce: f894 117d ldrb.w r1, [r4, #381] ; 0x17d +1002f6d2: b129 cbz r1, 1002f6e0 +1002f6d4: 9e03 ldr r6, [sp, #12] +1002f6d6: f884 2035 strb.w r2, [r4, #53] ; 0x35 +1002f6da: 62e6 str r6, [r4, #44] ; 0x2c +1002f6dc: f884 a036 strb.w sl, [r4, #54] ; 0x36 +1002f6e0: f241 76ac movw r6, #6060 ; 0x17ac +1002f6e4: 59ae ldr r6, [r5, r6] +1002f6e6: b94e cbnz r6, 1002f6fc +1002f6e8: f241 76b0 movw r6, #6064 ; 0x17b0 +1002f6ec: 59ae ldr r6, [r5, r6] +1002f6ee: b92e cbnz r6, 1002f6fc +1002f6f0: 4628 mov r0, r5 +1002f6f2: b005 add sp, #20 +1002f6f4: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002f6f8: f7ff bf8e b.w 1002f618 +1002f6fc: b118 cbz r0, 1002f706 +1002f6fe: f884 8034 strb.w r8, [r4, #52] ; 0x34 +1002f702: f884 8036 strb.w r8, [r4, #54] ; 0x36 +1002f706: b121 cbz r1, 1002f712 +1002f708: 62e3 str r3, [r4, #44] ; 0x2c +1002f70a: f884 b035 strb.w fp, [r4, #53] ; 0x35 +1002f70e: f884 9036 strb.w r9, [r4, #54] ; 0x36 +1002f712: b005 add sp, #20 +1002f714: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +1002f718 : +1002f718: b51f push {r0, r1, r2, r3, r4, lr} +1002f71a: f241 63c8 movw r3, #5832 ; 0x16c8 +1002f71e: 58c3 ldr r3, [r0, r3] +1002f720: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 +1002f724: e88d 0006 stmia.w sp, {r1, r2} +1002f728: 9202 str r2, [sp, #8] +1002f72a: 9303 str r3, [sp, #12] +1002f72c: 2100 movs r1, #0 +1002f72e: 2201 movs r2, #1 +1002f730: f7ff ff9a bl 1002f668 +1002f734: b005 add sp, #20 +1002f736: f85d fb04 ldr.w pc, [sp], #4 + +1002f73a : +1002f73a: b51f push {r0, r1, r2, r3, r4, lr} +1002f73c: 2200 movs r2, #0 +1002f73e: 460b mov r3, r1 +1002f740: 9103 str r1, [sp, #12] +1002f742: 9200 str r2, [sp, #0] +1002f744: 9201 str r2, [sp, #4] +1002f746: 9202 str r2, [sp, #8] +1002f748: 2101 movs r1, #1 +1002f74a: f7ff ff8d bl 1002f668 +1002f74e: b005 add sp, #20 +1002f750: f85d fb04 ldr.w pc, [sp], #4 + +1002f754 : +1002f754: b51f push {r0, r1, r2, r3, r4, lr} +1002f756: e88d 000c stmia.w sp, {r2, r3} +1002f75a: f89d 3018 ldrb.w r3, [sp, #24] +1002f75e: 460c mov r4, r1 +1002f760: 9103 str r1, [sp, #12] +1002f762: 2101 movs r1, #1 +1002f764: 9302 str r3, [sp, #8] +1002f766: 460a mov r2, r1 +1002f768: 4623 mov r3, r4 +1002f76a: f7ff ff7d bl 1002f668 +1002f76e: b004 add sp, #16 +1002f770: bd10 pop {r4, pc} + +1002f772 : +1002f772: b510 push {r4, lr} +1002f774: 4604 mov r4, r0 +1002f776: f7ea fccf bl 1001a118 +1002f77a: 4620 mov r0, r4 +1002f77c: e8bd 4010 ldmia.w sp!, {r4, lr} +1002f780: f7ea bcd4 b.w 1001a12c + +1002f784 : +1002f784: b538 push {r3, r4, r5, lr} +1002f786: 4c08 ldr r4, [pc, #32] ; (1002f7a8 ) +1002f788: 4605 mov r5, r0 +1002f78a: 6923 ldr r3, [r4, #16] +1002f78c: 2007 movs r0, #7 +1002f78e: 4798 blx r3 +1002f790: 68e3 ldr r3, [r4, #12] +1002f792: 2007 movs r0, #7 +1002f794: 4798 blx r3 +1002f796: 2007 movs r0, #7 +1002f798: 02a9 lsls r1, r5, #10 +1002f79a: f7ea fc3d bl 1001a018 +1002f79e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1002f7a2: 2007 movs r0, #7 +1002f7a4: f7ff bfe5 b.w 1002f772 +1002f7a8: 10000318 .word 0x10000318 + +1002f7ac : +1002f7ac: f241 63c8 movw r3, #5832 ; 0x16c8 +1002f7b0: 58c0 ldr r0, [r0, r3] +1002f7b2: f600 6078 addw r0, r0, #3704 ; 0xe78 +1002f7b6: f7e7 be87 b.w 100174c8 + ... + +1002f7bc : +1002f7bc: f241 63c8 movw r3, #5832 ; 0x16c8 +1002f7c0: 58c0 ldr r0, [r0, r3] +1002f7c2: 4b0a ldr r3, [pc, #40] ; (1002f7ec ) +1002f7c4: b510 push {r4, lr} +1002f7c6: 6819 ldr r1, [r3, #0] +1002f7c8: f3c1 0113 ubfx r1, r1, #0, #20 +1002f7cc: b151 cbz r1, 1002f7e4 +1002f7ce: 2300 movs r3, #0 +1002f7d0: fa21 f403 lsr.w r4, r1, r3 +1002f7d4: 07e4 lsls r4, r4, #31 +1002f7d6: b2da uxtb r2, r3 +1002f7d8: d405 bmi.n 1002f7e6 +1002f7da: 3301 adds r3, #1 +1002f7dc: 2b14 cmp r3, #20 +1002f7de: d1f7 bne.n 1002f7d0 +1002f7e0: 461a mov r2, r3 +1002f7e2: e000 b.n 1002f7e6 +1002f7e4: 460a mov r2, r1 +1002f7e6: f880 2ea4 strb.w r2, [r0, #3748] ; 0xea4 +1002f7ea: bd10 pop {r4, pc} +1002f7ec: 40080440 .word 0x40080440 + +1002f7f0 : +1002f7f0: f241 63c8 movw r3, #5832 ; 0x16c8 +1002f7f4: 58c0 ldr r0, [r0, r3] +1002f7f6: f500 6066 add.w r0, r0, #3680 ; 0xe60 +1002f7fa: f7e7 be65 b.w 100174c8 + ... + +1002f800 : +1002f800: b510 push {r4, lr} +1002f802: 4c09 ldr r4, [pc, #36] ; (1002f828 ) +1002f804: 2006 movs r0, #6 +1002f806: 6923 ldr r3, [r4, #16] +1002f808: 4798 blx r3 +1002f80a: 68e3 ldr r3, [r4, #12] +1002f80c: 2006 movs r0, #6 +1002f80e: 4798 blx r3 +1002f810: 2006 movs r0, #6 +1002f812: f44f 717a mov.w r1, #1000 ; 0x3e8 +1002f816: f7ea fbff bl 1001a018 +1002f81a: 2006 movs r0, #6 +1002f81c: f7ff ffa9 bl 1002f772 +1002f820: 4b02 ldr r3, [pc, #8] ; (1002f82c ) +1002f822: 2201 movs r2, #1 +1002f824: 701a strb r2, [r3, #0] +1002f826: bd10 pop {r4, pc} +1002f828: 10000318 .word 0x10000318 +1002f82c: 1004de00 .word 0x1004de00 + +1002f830 : +1002f830: b500 push {lr} +1002f832: 2a06 cmp r2, #6 +1002f834: b089 sub sp, #36 ; 0x24 +1002f836: f88d 101d strb.w r1, [sp, #29] +1002f83a: d101 bne.n 1002f840 +1002f83c: 490c ldr r1, [pc, #48] ; (1002f870 ) +1002f83e: e002 b.n 1002f846 +1002f840: 2a07 cmp r2, #7 +1002f842: d101 bne.n 1002f848 +1002f844: 490b ldr r1, [pc, #44] ; (1002f874 ) +1002f846: 9103 str r1, [sp, #12] +1002f848: 029b lsls r3, r3, #10 +1002f84a: 9300 str r3, [sp, #0] +1002f84c: 2301 movs r3, #1 +1002f84e: 9302 str r3, [sp, #8] +1002f850: 2105 movs r1, #5 +1002f852: 4b09 ldr r3, [pc, #36] ; (1002f878 ) +1002f854: 9104 str r1, [sp, #16] +1002f856: 210e movs r1, #14 +1002f858: 9005 str r0, [sp, #20] +1002f85a: 9106 str r1, [sp, #24] +1002f85c: f88d 201c strb.w r2, [sp, #28] +1002f860: 9101 str r1, [sp, #4] +1002f862: 685b ldr r3, [r3, #4] +1002f864: 4668 mov r0, sp +1002f866: 4798 blx r3 +1002f868: b009 add sp, #36 ; 0x24 +1002f86a: f85d fb04 ldr.w pc, [sp], #4 +1002f86e: bf00 nop +1002f870: 10030b25 .word 0x10030b25 +1002f874: 10030635 .word 0x10030635 +1002f878: 10000318 .word 0x10000318 + +1002f87c : +1002f87c: b500 push {lr} +1002f87e: 2301 movs r3, #1 +1002f880: b089 sub sp, #36 ; 0x24 +1002f882: 2906 cmp r1, #6 +1002f884: f88d 301d strb.w r3, [sp, #29] +1002f888: d101 bne.n 1002f88e +1002f88a: 4b0c ldr r3, [pc, #48] ; (1002f8bc ) +1002f88c: e002 b.n 1002f894 +1002f88e: 2907 cmp r1, #7 +1002f890: d101 bne.n 1002f896 +1002f892: 4b0b ldr r3, [pc, #44] ; (1002f8c0 ) +1002f894: 9303 str r3, [sp, #12] +1002f896: 2305 movs r3, #5 +1002f898: 9304 str r3, [sp, #16] +1002f89a: 230e movs r3, #14 +1002f89c: 9306 str r3, [sp, #24] +1002f89e: 9301 str r3, [sp, #4] +1002f8a0: 2300 movs r3, #0 +1002f8a2: 9005 str r0, [sp, #20] +1002f8a4: 9300 str r3, [sp, #0] +1002f8a6: 4668 mov r0, sp +1002f8a8: 2301 movs r3, #1 +1002f8aa: f88d 101c strb.w r1, [sp, #28] +1002f8ae: 9302 str r3, [sp, #8] +1002f8b0: f7ea fb8c bl 10019fcc +1002f8b4: b009 add sp, #36 ; 0x24 +1002f8b6: f85d fb04 ldr.w pc, [sp], #4 +1002f8ba: bf00 nop +1002f8bc: 10030b25 .word 0x10030b25 +1002f8c0: 10030635 .word 0x10030635 + +1002f8c4 : +1002f8c4: 4b0d ldr r3, [pc, #52] ; (1002f8fc ) +1002f8c6: 5cc2 ldrb r2, [r0, r3] +1002f8c8: f002 02fa and.w r2, r2, #250 ; 0xfa +1002f8cc: f042 0201 orr.w r2, r2, #1 +1002f8d0: 54c2 strb r2, [r0, r3] +1002f8d2: 3304 adds r3, #4 +1002f8d4: 5cc2 ldrb r2, [r0, r3] +1002f8d6: f042 021f orr.w r2, r2, #31 +1002f8da: 54c2 strb r2, [r0, r3] +1002f8dc: 3b0b subs r3, #11 +1002f8de: 5cc2 ldrb r2, [r0, r3] +1002f8e0: f042 020e orr.w r2, r2, #14 +1002f8e4: 54c2 strb r2, [r0, r3] +1002f8e6: f64f 72fd movw r2, #65533 ; 0xfffd +1002f8ea: f8c3 249e str.w r2, [r3, #1182] ; 0x49e +1002f8ee: 330a adds r3, #10 +1002f8f0: 5cc2 ldrb r2, [r0, r3] +1002f8f2: f002 0280 and.w r2, r2, #128 ; 0x80 +1002f8f6: 4311 orrs r1, r2 +1002f8f8: 54c1 strb r1, [r0, r3] +1002f8fa: 4770 bx lr +1002f8fc: 4008000d .word 0x4008000d + +1002f900 : +1002f900: b530 push {r4, r5, lr} +1002f902: 4b1b ldr r3, [pc, #108] ; (1002f970 ) +1002f904: 4c1b ldr r4, [pc, #108] ; (1002f974 ) +1002f906: 5cd0 ldrb r0, [r2, r3] +1002f908: f102 4580 add.w r5, r2, #1073741824 ; 0x40000000 +1002f90c: f000 003f and.w r0, r0, #63 ; 0x3f +1002f910: 54d0 strb r0, [r2, r3] +1002f912: 4819 ldr r0, [pc, #100] ; (1002f978 ) +1002f914: b1a9 cbz r1, 1002f942 +1002f916: 5d11 ldrb r1, [r2, r4] +1002f918: f105 1508 add.w r5, r5, #524296 ; 0x80008 +1002f91c: f041 0110 orr.w r1, r1, #16 +1002f920: 5511 strb r1, [r2, r4] +1002f922: 5cd1 ldrb r1, [r2, r3] +1002f924: f041 0180 orr.w r1, r1, #128 ; 0x80 +1002f928: 54d1 strb r1, [r2, r3] +1002f92a: 5a13 ldrh r3, [r2, r0] +1002f92c: f403 4370 and.w r3, r3, #61440 ; 0xf000 +1002f930: f443 7348 orr.w r3, r3, #800 ; 0x320 +1002f934: f043 0301 orr.w r3, r3, #1 +1002f938: 5213 strh r3, [r2, r0] +1002f93a: 682b ldr r3, [r5, #0] +1002f93c: f443 2300 orr.w r3, r3, #524288 ; 0x80000 +1002f940: e014 b.n 1002f96c +1002f942: 5d11 ldrb r1, [r2, r4] +1002f944: f105 1508 add.w r5, r5, #524296 ; 0x80008 +1002f948: f001 01ef and.w r1, r1, #239 ; 0xef +1002f94c: 5511 strb r1, [r2, r4] +1002f94e: 5cd1 ldrb r1, [r2, r3] +1002f950: f041 0140 orr.w r1, r1, #64 ; 0x40 +1002f954: 54d1 strb r1, [r2, r3] +1002f956: 5a13 ldrh r3, [r2, r0] +1002f958: f403 4370 and.w r3, r3, #61440 ; 0xf000 +1002f95c: f443 7391 orr.w r3, r3, #290 ; 0x122 +1002f960: f043 0301 orr.w r3, r3, #1 +1002f964: 5213 strh r3, [r2, r0] +1002f966: 682b ldr r3, [r5, #0] +1002f968: f423 2300 bic.w r3, r3, #524288 ; 0x80000 +1002f96c: 602b str r3, [r5, #0] +1002f96e: bd30 pop {r4, r5, pc} +1002f970: 40080009 .word 0x40080009 +1002f974: 40080029 .word 0x40080029 +1002f978: 40080018 .word 0x40080018 + +1002f97c : +1002f97c: 4b14 ldr r3, [pc, #80] ; (1002f9d0 ) +1002f97e: 4a15 ldr r2, [pc, #84] ; (1002f9d4 ) +1002f980: 781b ldrb r3, [r3, #0] +1002f982: 7812 ldrb r2, [r2, #0] +1002f984: 3303 adds r3, #3 +1002f986: 429a cmp r2, r3 +1002f988: d120 bne.n 1002f9cc +1002f98a: 7d03 ldrb r3, [r0, #20] +1002f98c: 2b0e cmp r3, #14 +1002f98e: d10b bne.n 1002f9a8 +1002f990: b9e1 cbnz r1, 1002f9cc +1002f992: 4b11 ldr r3, [pc, #68] ; (1002f9d8 ) +1002f994: 71c1 strb r1, [r0, #7] +1002f996: 781a ldrb r2, [r3, #0] +1002f998: f002 027f and.w r2, r2, #127 ; 0x7f +1002f99c: 701a strb r2, [r3, #0] +1002f99e: 230c movs r3, #12 +1002f9a0: 7503 strb r3, [r0, #20] +1002f9a2: 4b0e ldr r3, [pc, #56] ; (1002f9dc ) +1002f9a4: 7019 strb r1, [r3, #0] +1002f9a6: 4770 bx lr +1002f9a8: 2b06 cmp r3, #6 +1002f9aa: d10f bne.n 1002f9cc +1002f9ac: b171 cbz r1, 1002f9cc +1002f9ae: 4b0a ldr r3, [pc, #40] ; (1002f9d8 ) +1002f9b0: 2200 movs r2, #0 +1002f9b2: 7182 strb r2, [r0, #6] +1002f9b4: 7819 ldrb r1, [r3, #0] +1002f9b6: f041 0140 orr.w r1, r1, #64 ; 0x40 +1002f9ba: 7019 strb r1, [r3, #0] +1002f9bc: 7819 ldrb r1, [r3, #0] +1002f9be: f041 0180 orr.w r1, r1, #128 ; 0x80 +1002f9c2: 7019 strb r1, [r3, #0] +1002f9c4: 2304 movs r3, #4 +1002f9c6: 7503 strb r3, [r0, #20] +1002f9c8: 4b04 ldr r3, [pc, #16] ; (1002f9dc ) +1002f9ca: 701a strb r2, [r3, #0] +1002f9cc: 4770 bx lr +1002f9ce: bf00 nop +1002f9d0: 40080424 .word 0x40080424 +1002f9d4: 4008041c .word 0x4008041c +1002f9d8: 40080604 .word 0x40080604 +1002f9dc: 40080522 .word 0x40080522 + +1002f9e0 : +1002f9e0: 4818 ldr r0, [pc, #96] ; (1002fa44 ) +1002f9e2: b510 push {r4, lr} +1002f9e4: 7001 strb r1, [r0, #0] +1002f9e6: 01c9 lsls r1, r1, #7 +1002f9e8: f501 01f0 add.w r1, r1, #7864320 ; 0x780000 +1002f9ec: f46f 7c39 mvn.w ip, #740 ; 0x2e4 +1002f9f0: 0b0c lsrs r4, r1, #12 +1002f9f2: 4460 add r0, ip +1002f9f4: f3c1 010b ubfx r1, r1, #0, #12 +1002f9f8: 8004 strh r4, [r0, #0] +1002f9fa: f441 4000 orr.w r0, r1, #32768 ; 0x8000 +1002f9fe: b122 cbz r2, 1002fa0a +1002fa00: 4a11 ldr r2, [pc, #68] ; (1002fa48 ) +1002fa02: 5c81 ldrb r1, [r0, r2] +1002fa04: f041 0180 orr.w r1, r1, #128 ; 0x80 +1002fa08: 5481 strb r1, [r0, r2] +1002fa0a: 4910 ldr r1, [pc, #64] ; (1002fa4c ) +1002fa0c: 009b lsls r3, r3, #2 +1002fa0e: 5a42 ldrh r2, [r0, r1] +1002fa10: f043 0302 orr.w r3, r3, #2 +1002fa14: f422 527c bic.w r2, r2, #16128 ; 0x3f00 +1002fa18: f022 023f bic.w r2, r2, #63 ; 0x3f +1002fa1c: 0412 lsls r2, r2, #16 +1002fa1e: 0c12 lsrs r2, r2, #16 +1002fa20: 5242 strh r2, [r0, r1] +1002fa22: 4a0b ldr r2, [pc, #44] ; (1002fa50 ) +1002fa24: 5c81 ldrb r1, [r0, r2] +1002fa26: f001 0101 and.w r1, r1, #1 +1002fa2a: 430b orrs r3, r1 +1002fa2c: b2db uxtb r3, r3 +1002fa2e: 5483 strb r3, [r0, r2] +1002fa30: 4b08 ldr r3, [pc, #32] ; (1002fa54 ) +1002fa32: 22ff movs r2, #255 ; 0xff +1002fa34: 54c2 strb r2, [r0, r3] +1002fa36: 3318 adds r3, #24 +1002fa38: 5cc2 ldrb r2, [r0, r3] +1002fa3a: f002 02f7 and.w r2, r2, #247 ; 0xf7 +1002fa3e: 54c2 strb r2, [r0, r3] +1002fa40: bd10 pop {r4, pc} +1002fa42: bf00 nop +1002fa44: 40080425 .word 0x40080425 +1002fa48: 40080021 .word 0x40080021 +1002fa4c: 40080020 .word 0x40080020 +1002fa50: 40080012 .word 0x40080012 +1002fa54: 40080011 .word 0x40080011 + +1002fa58 : +1002fa58: b508 push {r3, lr} +1002fa5a: 4b08 ldr r3, [pc, #32] ; (1002fa7c ) +1002fa5c: 7819 ldrb r1, [r3, #0] +1002fa5e: 3b07 subs r3, #7 +1002fa60: 781b ldrb r3, [r3, #0] +1002fa62: b2c9 uxtb r1, r1 +1002fa64: f003 02ff and.w r2, r3, #255 ; 0xff +1002fa68: b93b cbnz r3, 1002fa7a +1002fa6a: 3102 adds r1, #2 +1002fa6c: 2318 movs r3, #24 +1002fa6e: b2c9 uxtb r1, r1 +1002fa70: f7ff ffb6 bl 1002f9e0 +1002fa74: 4b02 ldr r3, [pc, #8] ; (1002fa80 ) +1002fa76: 2220 movs r2, #32 +1002fa78: 701a strb r2, [r3, #0] +1002fa7a: bd08 pop {r3, pc} +1002fa7c: 40080424 .word 0x40080424 +1002fa80: 4008041f .word 0x4008041f + +1002fa84 : +1002fa84: b510 push {r4, lr} +1002fa86: f240 34ea movw r4, #1002 ; 0x3ea +1002fa8a: 4b0d ldr r3, [pc, #52] ; (1002fac0 ) +1002fa8c: 681b ldr r3, [r3, #0] +1002fa8e: b19b cbz r3, 1002fab8 +1002fa90: 3c01 subs r4, #1 +1002fa92: b2a4 uxth r4, r4 +1002fa94: b964 cbnz r4, 1002fab0 +1002fa96: 4b0b ldr r3, [pc, #44] ; (1002fac4 ) +1002fa98: 781a ldrb r2, [r3, #0] +1002fa9a: f042 0220 orr.w r2, r2, #32 +1002fa9e: 701a strb r2, [r3, #0] +1002faa0: 4b09 ldr r3, [pc, #36] ; (1002fac8 ) +1002faa2: 681b ldr r3, [r3, #0] +1002faa4: 005b lsls r3, r3, #1 +1002faa6: d509 bpl.n 1002fabc +1002faa8: 4b08 ldr r3, [pc, #32] ; (1002facc ) +1002faaa: 4809 ldr r0, [pc, #36] ; (1002fad0 ) +1002faac: 4798 blx r3 +1002faae: e005 b.n 1002fabc +1002fab0: 4b08 ldr r3, [pc, #32] ; (1002fad4 ) +1002fab2: 2032 movs r0, #50 ; 0x32 +1002fab4: 4798 blx r3 +1002fab6: e7e8 b.n 1002fa8a +1002fab8: 2001 movs r0, #1 +1002faba: bd10 pop {r4, pc} +1002fabc: 4620 mov r0, r4 +1002fabe: bd10 pop {r4, pc} +1002fac0: 400805f8 .word 0x400805f8 +1002fac4: 400801c0 .word 0x400801c0 +1002fac8: 10000314 .word 0x10000314 +1002facc: 0000f39d .word 0x0000f39d +1002fad0: 100418e0 .word 0x100418e0 +1002fad4: 00000899 .word 0x00000899 + +1002fad8 : +1002fad8: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +1002fadc: f241 63c8 movw r3, #5832 ; 0x16c8 +1002fae0: 58c5 ldr r5, [r0, r3] +1002fae2: 4b26 ldr r3, [pc, #152] ; (1002fb7c ) +1002fae4: 4604 mov r4, r0 +1002fae6: f893 9000 ldrb.w r9, [r3] +1002faea: 3b07 subs r3, #7 +1002faec: 781b ldrb r3, [r3, #0] +1002faee: 460e mov r6, r1 +1002faf0: 4690 mov r8, r2 +1002faf2: f605 6a88 addw sl, r5, #3720 ; 0xe88 +1002faf6: f109 0903 add.w r9, r9, #3 +1002fafa: b31b cbz r3, 1002fb44 +1002fafc: 4f20 ldr r7, [pc, #128] ; (1002fb80 ) +1002fafe: 23ff movs r3, #255 ; 0xff +1002fb00: f897 b000 ldrb.w fp, [r7] +1002fb04: 703b strb r3, [r7, #0] +1002fb06: f7ff ffbd bl 1002fa84 +1002fb0a: 2801 cmp r0, #1 +1002fb0c: fa5f fb8b uxtb.w fp, fp +1002fb10: 4602 mov r2, r0 +1002fb12: d110 bne.n 1002fb36 +1002fb14: 4643 mov r3, r8 +1002fb16: fa5f f189 uxtb.w r1, r9 +1002fb1a: 4620 mov r0, r4 +1002fb1c: f7ff ff60 bl 1002f9e0 +1002fb20: 4680 mov r8, r0 +1002fb22: 4631 mov r1, r6 +1002fb24: 4620 mov r0, r4 +1002fb26: 4642 mov r2, r8 +1002fb28: f7ff feea bl 1002f900 +1002fb2c: 4640 mov r0, r8 +1002fb2e: f895 1ea4 ldrb.w r1, [r5, #3748] ; 0xea4 +1002fb32: f7ff fec7 bl 1002f8c4 +1002fb36: f887 b000 strb.w fp, [r7] +1002fb3a: 4650 mov r0, sl +1002fb3c: 4631 mov r1, r6 +1002fb3e: f7ff ff1d bl 1002f97c +1002fb42: e014 b.n 1002fb6e +1002fb44: 4650 mov r0, sl +1002fb46: f7ff ff19 bl 1002f97c +1002fb4a: fa5f f189 uxtb.w r1, r9 +1002fb4e: 2201 movs r2, #1 +1002fb50: 4643 mov r3, r8 +1002fb52: 4620 mov r0, r4 +1002fb54: f7ff ff44 bl 1002f9e0 +1002fb58: 4607 mov r7, r0 +1002fb5a: 4631 mov r1, r6 +1002fb5c: 4620 mov r0, r4 +1002fb5e: 463a mov r2, r7 +1002fb60: f7ff fece bl 1002f900 +1002fb64: 4638 mov r0, r7 +1002fb66: f895 1ea4 ldrb.w r1, [r5, #3748] ; 0xea4 +1002fb6a: f7ff feab bl 1002f8c4 +1002fb6e: 4b05 ldr r3, [pc, #20] ; (1002fb84 ) +1002fb70: 2220 movs r2, #32 +1002fb72: 701a strb r2, [r3, #0] +1002fb74: 2001 movs r0, #1 +1002fb76: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +1002fb7a: bf00 nop +1002fb7c: 40080424 .word 0x40080424 +1002fb80: 40080522 .word 0x40080522 +1002fb84: 4008041f .word 0x4008041f + +1002fb88 : +1002fb88: b508 push {r3, lr} +1002fb8a: f7ff ff7b bl 1002fa84 +1002fb8e: 4b0a ldr r3, [pc, #40] ; (1002fbb8 ) +1002fb90: 681a ldr r2, [r3, #0] +1002fb92: f422 3200 bic.w r2, r2, #131072 ; 0x20000 +1002fb96: 601a str r2, [r3, #0] +1002fb98: 223f movs r2, #63 ; 0x3f +1002fb9a: f883 20fc strb.w r2, [r3, #252] ; 0xfc +1002fb9e: f893 20fd ldrb.w r2, [r3, #253] ; 0xfd +1002fba2: f002 02fd and.w r2, r2, #253 ; 0xfd +1002fba6: f883 20fd strb.w r2, [r3, #253] ; 0xfd +1002fbaa: f893 254f ldrb.w r2, [r3, #1359] ; 0x54f +1002fbae: f042 0220 orr.w r2, r2, #32 +1002fbb2: f883 254f strb.w r2, [r3, #1359] ; 0x54f +1002fbb6: bd08 pop {r3, pc} +1002fbb8: 40080004 .word 0x40080004 + +1002fbbc : +1002fbbc: 4b0a ldr r3, [pc, #40] ; (1002fbe8 ) +1002fbbe: 781a ldrb r2, [r3, #0] +1002fbc0: 3bfd subs r3, #253 ; 0xfd +1002fbc2: f042 0202 orr.w r2, r2, #2 +1002fbc6: f883 20fd strb.w r2, [r3, #253] ; 0xfd +1002fbca: 22ff movs r2, #255 ; 0xff +1002fbcc: f883 20fc strb.w r2, [r3, #252] ; 0xfc +1002fbd0: 2209 movs r2, #9 +1002fbd2: f883 26b3 strb.w r2, [r3, #1715] ; 0x6b3 +1002fbd6: 2286 movs r2, #134 ; 0x86 +1002fbd8: f883 26b0 strb.w r2, [r3, #1712] ; 0x6b0 +1002fbdc: 681a ldr r2, [r3, #0] +1002fbde: f442 3200 orr.w r2, r2, #131072 ; 0x20000 +1002fbe2: 601a str r2, [r3, #0] +1002fbe4: 4770 bx lr +1002fbe6: bf00 nop +1002fbe8: 40080101 .word 0x40080101 + +1002fbec : +1002fbec: 4b04 ldr r3, [pc, #16] ; (1002fc00 ) +1002fbee: 8818 ldrh r0, [r3, #0] +1002fbf0: f240 73ff movw r3, #2047 ; 0x7ff +1002fbf4: f3c0 000a ubfx r0, r0, #0, #11 +1002fbf8: 1ac3 subs r3, r0, r3 +1002fbfa: 4258 negs r0, r3 +1002fbfc: 4158 adcs r0, r3 +1002fbfe: 4770 bx lr +1002fc00: 4008041a .word 0x4008041a + +1002fc04 : +1002fc04: b538 push {r3, r4, r5, lr} +1002fc06: f241 63c8 movw r3, #5832 ; 0x16c8 +1002fc0a: 58c4 ldr r4, [r0, r3] +1002fc0c: 4b17 ldr r3, [pc, #92] ; (1002fc6c ) +1002fc0e: 2500 movs r5, #0 +1002fc10: 2217 movs r2, #23 +1002fc12: 605d str r5, [r3, #4] +1002fc14: 60da str r2, [r3, #12] +1002fc16: 2205 movs r2, #5 +1002fc18: 611d str r5, [r3, #16] +1002fc1a: f604 6088 addw r0, r4, #3720 ; 0xe88 +1002fc1e: 605a str r2, [r3, #4] +1002fc20: 4629 mov r1, r5 +1002fc22: 222c movs r2, #44 ; 0x2c +1002fc24: f7ea ffd8 bl 1001abd8 +1002fc28: 2302 movs r3, #2 +1002fc2a: f884 3e98 strb.w r3, [r4, #3736] ; 0xe98 +1002fc2e: f8a4 3ea6 strh.w r3, [r4, #3750] ; 0xea6 +1002fc32: 2201 movs r2, #1 +1002fc34: 230c movs r3, #12 +1002fc36: f884 2e9f strb.w r2, [r4, #3743] ; 0xe9f +1002fc3a: f884 2ea0 strb.w r2, [r4, #3744] ; 0xea0 +1002fc3e: f884 3e9b strb.w r3, [r4, #3739] ; 0xe9b +1002fc42: f884 3e9c strb.w r3, [r4, #3740] ; 0xe9c +1002fc46: 2204 movs r2, #4 +1002fc48: 4b09 ldr r3, [pc, #36] ; (1002fc70 ) +1002fc4a: f884 2ea1 strb.w r2, [r4, #3745] ; 0xea1 +1002fc4e: f884 5e88 strb.w r5, [r4, #3720] ; 0xe88 +1002fc52: 781a ldrb r2, [r3, #0] +1002fc54: f002 027f and.w r2, r2, #127 ; 0x7f +1002fc58: 701a strb r2, [r3, #0] +1002fc5a: 685a ldr r2, [r3, #4] +1002fc5c: f422 22e0 bic.w r2, r2, #458752 ; 0x70000 +1002fc60: 605a str r2, [r3, #4] +1002fc62: f803 5ce2 strb.w r5, [r3, #-226] +1002fc66: f884 5eb4 strb.w r5, [r4, #3764] ; 0xeb4 +1002fc6a: bd38 pop {r3, r4, r5, pc} +1002fc6c: e000ed90 .word 0xe000ed90 +1002fc70: 40080604 .word 0x40080604 + +1002fc74 : +1002fc74: 2901 cmp r1, #1 +1002fc76: d002 beq.n 1002fc7e +1002fc78: 2902 cmp r1, #2 +1002fc7a: d002 beq.n 1002fc82 +1002fc7c: 4770 bx lr +1002fc7e: 72c1 strb r1, [r0, #11] +1002fc80: 4770 bx lr +1002fc82: b912 cbnz r2, 1002fc8a +1002fc84: 2307 movs r3, #7 +1002fc86: 75c3 strb r3, [r0, #23] +1002fc88: e001 b.n 1002fc8e +1002fc8a: 3a01 subs r2, #1 +1002fc8c: 75c2 strb r2, [r0, #23] +1002fc8e: 7dc3 ldrb r3, [r0, #23] +1002fc90: 7603 strb r3, [r0, #24] +1002fc92: 2301 movs r3, #1 +1002fc94: 72c3 strb r3, [r0, #11] +1002fc96: 4770 bx lr + +1002fc98 : +1002fc98: f241 63c8 movw r3, #5832 ; 0x16c8 +1002fc9c: b510 push {r4, lr} +1002fc9e: 58c4 ldr r4, [r0, r3] +1002fca0: f7ff ffa4 bl 1002fbec +1002fca4: 2801 cmp r0, #1 +1002fca6: 4603 mov r3, r0 +1002fca8: d111 bne.n 1002fcce +1002fcaa: f894 0e8b ldrb.w r0, [r4, #3723] ; 0xe8b +1002fcae: b970 cbnz r0, 1002fcce +1002fcb0: f894 2e9b ldrb.w r2, [r4, #3739] ; 0xe9b +1002fcb4: 2a04 cmp r2, #4 +1002fcb6: d80d bhi.n 1002fcd4 +1002fcb8: f894 2e99 ldrb.w r2, [r4, #3737] ; 0xe99 +1002fcbc: 2a03 cmp r2, #3 +1002fcbe: d108 bne.n 1002fcd2 +1002fcc0: f894 0eb1 ldrb.w r0, [r4, #3761] ; 0xeb1 +1002fcc4: f1d0 0001 rsbs r0, r0, #1 +1002fcc8: bf38 it cc +1002fcca: 2000 movcc r0, #0 +1002fccc: bd10 pop {r4, pc} +1002fcce: 2000 movs r0, #0 +1002fcd0: bd10 pop {r4, pc} +1002fcd2: 4618 mov r0, r3 +1002fcd4: bd10 pop {r4, pc} + ... + +1002fcd8 : +1002fcd8: b510 push {r4, lr} +1002fcda: f241 63c8 movw r3, #5832 ; 0x16c8 +1002fcde: 58c4 ldr r4, [r0, r3] +1002fce0: f7ff ff84 bl 1002fbec +1002fce4: 2801 cmp r0, #1 +1002fce6: d12a bne.n 1002fd3e +1002fce8: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d +1002fcec: f013 0003 ands.w r0, r3, #3 +1002fcf0: d125 bne.n 1002fd3e +1002fcf2: f894 2e9b ldrb.w r2, [r4, #3739] ; 0xe9b +1002fcf6: bb4a cbnz r2, 1002fd4c +1002fcf8: f013 0314 ands.w r3, r3, #20 +1002fcfc: d126 bne.n 1002fd4c +1002fcfe: f894 0e92 ldrb.w r0, [r4, #3730] ; 0xe92 +1002fd02: b318 cbz r0, 1002fd4c +1002fd04: f894 2eb4 ldrb.w r2, [r4, #3764] ; 0xeb4 +1002fd08: b9da cbnz r2, 1002fd42 +1002fd0a: 4b11 ldr r3, [pc, #68] ; (1002fd50 ) +1002fd0c: 7819 ldrb r1, [r3, #0] +1002fd0e: f001 0102 and.w r1, r1, #2 +1002fd12: f001 00ff and.w r0, r1, #255 ; 0xff +1002fd16: b9b1 cbnz r1, 1002fd46 +1002fd18: 781a ldrb r2, [r3, #0] +1002fd1a: 07d2 lsls r2, r2, #31 +1002fd1c: d504 bpl.n 1002fd28 +1002fd1e: 781b ldrb r3, [r3, #0] +1002fd20: f003 03fc and.w r3, r3, #252 ; 0xfc +1002fd24: 2b80 cmp r3, #128 ; 0x80 +1002fd26: d011 beq.n 1002fd4c +1002fd28: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 +1002fd2c: 2b03 cmp r3, #3 +1002fd2e: d10c bne.n 1002fd4a +1002fd30: f894 0eb1 ldrb.w r0, [r4, #3761] ; 0xeb1 +1002fd34: f1d0 0001 rsbs r0, r0, #1 +1002fd38: bf38 it cc +1002fd3a: 2000 movcc r0, #0 +1002fd3c: bd10 pop {r4, pc} +1002fd3e: 2000 movs r0, #0 +1002fd40: bd10 pop {r4, pc} +1002fd42: 4618 mov r0, r3 +1002fd44: bd10 pop {r4, pc} +1002fd46: 4610 mov r0, r2 +1002fd48: bd10 pop {r4, pc} +1002fd4a: 2001 movs r0, #1 +1002fd4c: bd10 pop {r4, pc} +1002fd4e: bf00 nop +1002fd50: 40080662 .word 0x40080662 + +1002fd54 : +1002fd54: 4b0b ldr r3, [pc, #44] ; (1002fd84 ) +1002fd56: 781b ldrb r3, [r3, #0] +1002fd58: f003 00ff and.w r0, r3, #255 ; 0xff +1002fd5c: b983 cbnz r3, 1002fd80 +1002fd5e: 4b0a ldr r3, [pc, #40] ; (1002fd88 ) +1002fd60: 781b ldrb r3, [r3, #0] +1002fd62: 2b3f cmp r3, #63 ; 0x3f +1002fd64: d10d bne.n 1002fd82 +1002fd66: 4b09 ldr r3, [pc, #36] ; (1002fd8c ) +1002fd68: 781a ldrb r2, [r3, #0] +1002fd6a: f002 0202 and.w r2, r2, #2 +1002fd6e: f002 00ff and.w r0, r2, #255 ; 0xff +1002fd72: b132 cbz r2, 1002fd82 +1002fd74: 7818 ldrb r0, [r3, #0] +1002fd76: f080 0008 eor.w r0, r0, #8 +1002fd7a: f3c0 00c0 ubfx r0, r0, #3, #1 +1002fd7e: 4770 bx lr +1002fd80: 2000 movs r0, #0 +1002fd82: 4770 bx lr +1002fd84: 40080287 .word 0x40080287 +1002fd88: 40080100 .word 0x40080100 +1002fd8c: 40080286 .word 0x40080286 + +1002fd90 : +1002fd90: b538 push {r3, r4, r5, lr} +1002fd92: f241 63c8 movw r3, #5832 ; 0x16c8 +1002fd96: 4605 mov r5, r0 +1002fd98: 58c4 ldr r4, [r0, r3] +1002fd9a: b319 cbz r1, 1002fde4 +1002fd9c: 2100 movs r1, #0 +1002fd9e: f00b fb86 bl 1003b4ae +1002fda2: 2801 cmp r0, #1 +1002fda4: d11e bne.n 1002fde4 +1002fda6: 4b10 ldr r3, [pc, #64] ; (1002fde8 ) +1002fda8: 2100 movs r1, #0 +1002fdaa: 220f movs r2, #15 +1002fdac: f884 1e90 strb.w r1, [r4, #3728] ; 0xe90 +1002fdb0: 701a strb r2, [r3, #0] +1002fdb2: f893 20e2 ldrb.w r2, [r3, #226] ; 0xe2 +1002fdb6: 4628 mov r0, r5 +1002fdb8: f002 02bf and.w r2, r2, #191 ; 0xbf +1002fdbc: f883 20e2 strb.w r2, [r3, #226] ; 0xe2 +1002fdc0: 2208 movs r2, #8 +1002fdc2: f7ff fe89 bl 1002fad8 +1002fdc6: 2801 cmp r0, #1 +1002fdc8: d105 bne.n 1002fdd6 +1002fdca: 2306 movs r3, #6 +1002fdcc: f884 0e8e strb.w r0, [r4, #3726] ; 0xe8e +1002fdd0: f884 3e9c strb.w r3, [r4, #3740] ; 0xe9c +1002fdd4: bd38 pop {r3, r4, r5, pc} +1002fdd6: 4b05 ldr r3, [pc, #20] ; (1002fdec ) +1002fdd8: 681b ldr r3, [r3, #0] +1002fdda: 005b lsls r3, r3, #1 +1002fddc: d502 bpl.n 1002fde4 +1002fdde: 4804 ldr r0, [pc, #16] ; (1002fdf0 ) +1002fde0: 4b04 ldr r3, [pc, #16] ; (1002fdf4 ) +1002fde2: 4798 blx r3 +1002fde4: bd38 pop {r3, r4, r5, pc} +1002fde6: bf00 nop +1002fde8: 40080522 .word 0x40080522 +1002fdec: 10000314 .word 0x10000314 +1002fdf0: 1004190a .word 0x1004190a +1002fdf4: 0000f39d .word 0x0000f39d + +1002fdf8 : +1002fdf8: 4b05 ldr r3, [pc, #20] ; (1002fe10 ) +1002fdfa: 781a ldrb r2, [r3, #0] +1002fdfc: f002 027f and.w r2, r2, #127 ; 0x7f +1002fe00: 701a strb r2, [r3, #0] +1002fe02: 2200 movs r2, #0 +1002fe04: f803 2ce2 strb.w r2, [r3, #-226] +1002fe08: 230c movs r3, #12 +1002fe0a: 7503 strb r3, [r0, #20] +1002fe0c: 4770 bx lr +1002fe0e: bf00 nop +1002fe10: 40080604 .word 0x40080604 + +1002fe14 : +1002fe14: 7a02 ldrb r2, [r0, #8] +1002fe16: 4b09 ldr r3, [pc, #36] ; (1002fe3c ) +1002fe18: b92a cbnz r2, 1002fe26 +1002fe1a: 781a ldrb r2, [r3, #0] +1002fe1c: f042 0240 orr.w r2, r2, #64 ; 0x40 +1002fe20: 701a strb r2, [r3, #0] +1002fe22: 2304 movs r3, #4 +1002fe24: e004 b.n 1002fe30 +1002fe26: 781a ldrb r2, [r3, #0] +1002fe28: f002 027f and.w r2, r2, #127 ; 0x7f +1002fe2c: 701a strb r2, [r3, #0] +1002fe2e: 230c movs r3, #12 +1002fe30: 7503 strb r3, [r0, #20] +1002fe32: 4b03 ldr r3, [pc, #12] ; (1002fe40 ) +1002fe34: 2200 movs r2, #0 +1002fe36: 701a strb r2, [r3, #0] +1002fe38: 4770 bx lr +1002fe3a: bf00 nop +1002fe3c: 40080604 .word 0x40080604 +1002fe40: 40080522 .word 0x40080522 + +1002fe44 : +1002fe44: b538 push {r3, r4, r5, lr} +1002fe46: 2100 movs r1, #0 +1002fe48: f241 63c8 movw r3, #5832 ; 0x16c8 +1002fe4c: 4605 mov r5, r0 +1002fe4e: 58c4 ldr r4, [r0, r3] +1002fe50: f00b fb2d bl 1003b4ae +1002fe54: 2801 cmp r0, #1 +1002fe56: 4601 mov r1, r0 +1002fe58: d118 bne.n 1002fe8c +1002fe5a: 2300 movs r3, #0 +1002fe5c: f884 3e91 strb.w r3, [r4, #3729] ; 0xe91 +1002fe60: 4b0b ldr r3, [pc, #44] ; (1002fe90 ) +1002fe62: 226f movs r2, #111 ; 0x6f +1002fe64: 701a strb r2, [r3, #0] +1002fe66: 4628 mov r0, r5 +1002fe68: 2208 movs r2, #8 +1002fe6a: f7ff fe35 bl 1002fad8 +1002fe6e: 2801 cmp r0, #1 +1002fe70: d105 bne.n 1002fe7e +1002fe72: 230e movs r3, #14 +1002fe74: f884 0e8f strb.w r0, [r4, #3727] ; 0xe8f +1002fe78: f884 3e9c strb.w r3, [r4, #3740] ; 0xe9c +1002fe7c: bd38 pop {r3, r4, r5, pc} +1002fe7e: 4b05 ldr r3, [pc, #20] ; (1002fe94 ) +1002fe80: 681b ldr r3, [r3, #0] +1002fe82: 005b lsls r3, r3, #1 +1002fe84: d502 bpl.n 1002fe8c +1002fe86: 4804 ldr r0, [pc, #16] ; (1002fe98 ) +1002fe88: 4b04 ldr r3, [pc, #16] ; (1002fe9c ) +1002fe8a: 4798 blx r3 +1002fe8c: bd38 pop {r3, r4, r5, pc} +1002fe8e: bf00 nop +1002fe90: 40080522 .word 0x40080522 +1002fe94: 10000314 .word 0x10000314 +1002fe98: 1004195b .word 0x1004195b +1002fe9c: 0000f39d .word 0x0000f39d + +1002fea0 : +1002fea0: 7a43 ldrb r3, [r0, #9] +1002fea2: b90b cbnz r3, 1002fea8 +1002fea4: 230c movs r3, #12 +1002fea6: e009 b.n 1002febc +1002fea8: 4b07 ldr r3, [pc, #28] ; (1002fec8 ) +1002feaa: 781a ldrb r2, [r3, #0] +1002feac: f042 0240 orr.w r2, r2, #64 ; 0x40 +1002feb0: 701a strb r2, [r3, #0] +1002feb2: 781a ldrb r2, [r3, #0] +1002feb4: f042 0280 orr.w r2, r2, #128 ; 0x80 +1002feb8: 701a strb r2, [r3, #0] +1002feba: 2304 movs r3, #4 +1002febc: 7503 strb r3, [r0, #20] +1002febe: 4b03 ldr r3, [pc, #12] ; (1002fecc ) +1002fec0: 2200 movs r2, #0 +1002fec2: 701a strb r2, [r3, #0] +1002fec4: 4770 bx lr +1002fec6: bf00 nop +1002fec8: 40080604 .word 0x40080604 +1002fecc: 40080522 .word 0x40080522 + +1002fed0 : +1002fed0: b570 push {r4, r5, r6, lr} +1002fed2: f241 63c8 movw r3, #5832 ; 0x16c8 +1002fed6: 58c6 ldr r6, [r0, r3] +1002fed8: 4b0e ldr r3, [pc, #56] ; (1002ff14 ) +1002feda: 22ff movs r2, #255 ; 0xff +1002fedc: b086 sub sp, #24 +1002fede: 701a strb r2, [r3, #0] +1002fee0: 4605 mov r5, r0 +1002fee2: f7ff fdcf bl 1002fa84 +1002fee6: 4a0c ldr r2, [pc, #48] ; (1002ff18 ) +1002fee8: f04f 7300 mov.w r3, #33554432 ; 0x2000000 +1002feec: 6013 str r3, [r2, #0] +1002feee: 2400 movs r4, #0 +1002fef0: 4628 mov r0, r5 +1002fef2: 4669 mov r1, sp +1002fef4: aa03 add r2, sp, #12 +1002fef6: 9300 str r3, [sp, #0] +1002fef8: 9401 str r4, [sp, #4] +1002fefa: 9402 str r4, [sp, #8] +1002fefc: 9403 str r4, [sp, #12] +1002fefe: 9404 str r4, [sp, #16] +1002ff00: 9405 str r4, [sp, #20] +1002ff02: f7fb f987 bl 1002b214 +1002ff06: 4628 mov r0, r5 +1002ff08: f7ff fe3e bl 1002fb88 +1002ff0c: f886 4e9c strb.w r4, [r6, #3740] ; 0xe9c +1002ff10: b006 add sp, #24 +1002ff12: bd70 pop {r4, r5, r6, pc} +1002ff14: 40080522 .word 0x40080522 +1002ff18: 40080134 .word 0x40080134 + +1002ff1c : +1002ff1c: f241 63c8 movw r3, #5832 ; 0x16c8 +1002ff20: b510 push {r4, lr} +1002ff22: 58c4 ldr r4, [r0, r3] +1002ff24: 4b04 ldr r3, [pc, #16] ; (1002ff38 ) +1002ff26: 22ff movs r2, #255 ; 0xff +1002ff28: 701a strb r2, [r3, #0] +1002ff2a: f7ff fe2d bl 1002fb88 +1002ff2e: 2308 movs r3, #8 +1002ff30: f884 3e9c strb.w r3, [r4, #3740] ; 0xe9c +1002ff34: bd10 pop {r4, pc} +1002ff36: bf00 nop +1002ff38: 40080522 .word 0x40080522 + +1002ff3c : +1002ff3c: f241 63c8 movw r3, #5832 ; 0x16c8 +1002ff40: b510 push {r4, lr} +1002ff42: 58c4 ldr r4, [r0, r3] +1002ff44: f7ff fe3a bl 1002fbbc +1002ff48: 4b03 ldr r3, [pc, #12] ; (1002ff58 ) +1002ff4a: 2200 movs r2, #0 +1002ff4c: 701a strb r2, [r3, #0] +1002ff4e: 230c movs r3, #12 +1002ff50: f884 3e9c strb.w r3, [r4, #3740] ; 0xe9c +1002ff54: bd10 pop {r4, pc} +1002ff56: bf00 nop +1002ff58: 40080522 .word 0x40080522 + +1002ff5c : +1002ff5c: b538 push {r3, r4, r5, lr} +1002ff5e: 4605 mov r5, r0 +1002ff60: 2433 movs r4, #51 ; 0x33 +1002ff62: 4a0d ldr r2, [pc, #52] ; (1002ff98 ) +1002ff64: 8813 ldrh r3, [r2, #0] +1002ff66: f403 7380 and.w r3, r3, #256 ; 0x100 +1002ff6a: b29b uxth r3, r3 +1002ff6c: b113 cbz r3, 1002ff74 +1002ff6e: 8813 ldrh r3, [r2, #0] +1002ff70: f3c3 2340 ubfx r3, r3, #9, #1 +1002ff74: 429d cmp r5, r3 +1002ff76: d00e beq.n 1002ff96 +1002ff78: 3c01 subs r4, #1 +1002ff7a: 2014 movs r0, #20 +1002ff7c: 4b07 ldr r3, [pc, #28] ; (1002ff9c ) +1002ff7e: b2a4 uxth r4, r4 +1002ff80: 4798 blx r3 +1002ff82: 2c00 cmp r4, #0 +1002ff84: d1ed bne.n 1002ff62 +1002ff86: 4b06 ldr r3, [pc, #24] ; (1002ffa0 ) +1002ff88: 681b ldr r3, [r3, #0] +1002ff8a: 005b lsls r3, r3, #1 +1002ff8c: d503 bpl.n 1002ff96 +1002ff8e: 4b05 ldr r3, [pc, #20] ; (1002ffa4 ) +1002ff90: 4805 ldr r0, [pc, #20] ; (1002ffa8 ) +1002ff92: 4798 blx r3 +1002ff94: bd38 pop {r3, r4, r5, pc} +1002ff96: bd38 pop {r3, r4, r5, pc} +1002ff98: 400800f0 .word 0x400800f0 +1002ff9c: 00000899 .word 0x00000899 +1002ffa0: 10000314 .word 0x10000314 +1002ffa4: 0000f39d .word 0x0000f39d +1002ffa8: 100419ac .word 0x100419ac + +1002ffac : +1002ffac: 4b02 ldr r3, [pc, #8] ; (1002ffb8 ) +1002ffae: 781b ldrb r3, [r3, #0] +1002ffb0: 07db lsls r3, r3, #31 +1002ffb2: d4fb bmi.n 1002ffac +1002ffb4: 4770 bx lr +1002ffb6: bf00 nop +1002ffb8: 40080020 .word 0x40080020 + +1002ffbc : +1002ffbc: f241 63c8 movw r3, #5832 ; 0x16c8 +1002ffc0: 58c2 ldr r2, [r0, r3] +1002ffc2: 2301 movs r3, #1 +1002ffc4: b510 push {r4, lr} +1002ffc6: f882 3e94 strb.w r3, [r2, #3732] ; 0xe94 +1002ffca: 4b15 ldr r3, [pc, #84] ; (10030020 ) +1002ffcc: 6819 ldr r1, [r3, #0] +1002ffce: 461c mov r4, r3 +1002ffd0: f441 3140 orr.w r1, r1, #196608 ; 0x30000 +1002ffd4: 6019 str r1, [r3, #0] +1002ffd6: f892 2e9a ldrb.w r2, [r2, #3738] ; 0xe9a +1002ffda: b13a cbz r2, 1002ffec +1002ffdc: f203 130f addw r3, r3, #271 ; 0x10f +1002ffe0: 781a ldrb r2, [r3, #0] +1002ffe2: 0612 lsls r2, r2, #24 +1002ffe4: bf4c ite mi +1002ffe6: 2210 movmi r2, #16 +1002ffe8: 2290 movpl r2, #144 ; 0x90 +1002ffea: 701a strb r2, [r3, #0] +1002ffec: 4b0d ldr r3, [pc, #52] ; (10030024 ) +1002ffee: 2001 movs r0, #1 +1002fff0: 881a ldrh r2, [r3, #0] +1002fff2: b292 uxth r2, r2 +1002fff4: f442 7240 orr.w r2, r2, #768 ; 0x300 +1002fff8: 801a strh r2, [r3, #0] +1002fffa: f7ff ffaf bl 1002ff5c +1002fffe: 7823 ldrb r3, [r4, #0] +10030000: 2200 movs r2, #0 +10030002: f043 0304 orr.w r3, r3, #4 +10030006: 7023 strb r3, [r4, #0] +10030008: 4b07 ldr r3, [pc, #28] ; (10030028 ) +1003000a: e8bd 4010 ldmia.w sp!, {r4, lr} +1003000e: 605a str r2, [r3, #4] +10030010: 4a06 ldr r2, [pc, #24] ; (1003002c ) +10030012: 60da str r2, [r3, #12] +10030014: 4a06 ldr r2, [pc, #24] ; (10030030 ) +10030016: 611a str r2, [r3, #16] +10030018: 2205 movs r2, #5 +1003001a: 605a str r2, [r3, #4] +1003001c: f7e7 bbf6 b.w 1001780c +10030020: 40080020 .word 0x40080020 +10030024: 40080002 .word 0x40080002 +10030028: e000ed90 .word 0xe000ed90 +1003002c: 40080017 .word 0x40080017 +10030030: 00040023 .word 0x00040023 + +10030034 : +10030034: b538 push {r3, r4, r5, lr} +10030036: f241 63c8 movw r3, #5832 ; 0x16c8 +1003003a: 58c5 ldr r5, [r0, r3] +1003003c: 4b0f ldr r3, [pc, #60] ; (1003007c ) +1003003e: 2400 movs r4, #0 +10030040: 2217 movs r2, #23 +10030042: 605c str r4, [r3, #4] +10030044: 60da str r2, [r3, #12] +10030046: 2205 movs r2, #5 +10030048: 611c str r4, [r3, #16] +1003004a: 605a str r2, [r3, #4] +1003004c: 4b0c ldr r3, [pc, #48] ; (10030080 ) +1003004e: 781a ldrb r2, [r3, #0] +10030050: f042 0201 orr.w r2, r2, #1 +10030054: 701a strb r2, [r3, #0] +10030056: f7ff ffa9 bl 1002ffac +1003005a: 4a0a ldr r2, [pc, #40] ; (10030084 ) +1003005c: 4620 mov r0, r4 +1003005e: 8813 ldrh r3, [r2, #0] +10030060: f423 7340 bic.w r3, r3, #768 ; 0x300 +10030064: 041b lsls r3, r3, #16 +10030066: 0c1b lsrs r3, r3, #16 +10030068: 8013 strh r3, [r2, #0] +1003006a: f7ff ff77 bl 1002ff5c +1003006e: f885 4e94 strb.w r4, [r5, #3732] ; 0xe94 +10030072: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10030076: f7e7 bbc1 b.w 100177fc +1003007a: bf00 nop +1003007c: e000ed90 .word 0xe000ed90 +10030080: 40080020 .word 0x40080020 +10030084: 40080002 .word 0x40080002 + +10030088 : +10030088: b570 push {r4, r5, r6, lr} +1003008a: f241 63c8 movw r3, #5832 ; 0x16c8 +1003008e: 58c4 ldr r4, [r0, r3] +10030090: 2300 movs r3, #0 +10030092: f894 2e94 ldrb.w r2, [r4, #3732] ; 0xe94 +10030096: b086 sub sp, #24 +10030098: 4606 mov r6, r0 +1003009a: f884 3e8a strb.w r3, [r4, #3722] ; 0xe8a +1003009e: f884 3ea2 strb.w r3, [r4, #3746] ; 0xea2 +100300a2: f884 3ea3 strb.w r3, [r4, #3747] ; 0xea3 +100300a6: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d +100300aa: f8c4 3ea8 str.w r3, [r4, #3752] ; 0xea8 +100300ae: f884 3e93 strb.w r3, [r4, #3731] ; 0xe93 +100300b2: f884 3e96 strb.w r3, [r4, #3734] ; 0xe96 +100300b6: f884 3ea4 strb.w r3, [r4, #3748] ; 0xea4 +100300ba: 461d mov r5, r3 +100300bc: b10a cbz r2, 100300c2 +100300be: f7ff ffb9 bl 10030034 +100300c2: 4a0c ldr r2, [pc, #48] ; (100300f4 ) +100300c4: 2301 movs r3, #1 +100300c6: f44f 3100 mov.w r1, #131072 ; 0x20000 +100300ca: f884 5eb0 strb.w r5, [r4, #3760] ; 0xeb0 +100300ce: f884 5eb1 strb.w r5, [r4, #3761] ; 0xeb1 +100300d2: 4630 mov r0, r6 +100300d4: 6013 str r3, [r2, #0] +100300d6: f8c2 10b0 str.w r1, [r2, #176] ; 0xb0 +100300da: 9302 str r3, [sp, #8] +100300dc: 4669 mov r1, sp +100300de: 2302 movs r3, #2 +100300e0: aa03 add r2, sp, #12 +100300e2: 9500 str r5, [sp, #0] +100300e4: 9501 str r5, [sp, #4] +100300e6: 9503 str r5, [sp, #12] +100300e8: 9504 str r5, [sp, #16] +100300ea: 9305 str r3, [sp, #20] +100300ec: f7fb f892 bl 1002b214 +100300f0: b006 add sp, #24 +100300f2: bd70 pop {r4, r5, r6, pc} +100300f4: 40080084 .word 0x40080084 + +100300f8 : +100300f8: b570 push {r4, r5, r6, lr} +100300fa: f241 63c8 movw r3, #5832 ; 0x16c8 +100300fe: 58c4 ldr r4, [r0, r3] +10030100: 4605 mov r5, r0 +10030102: f894 3e94 ldrb.w r3, [r4, #3732] ; 0xe94 +10030106: 460e mov r6, r1 +10030108: b10b cbz r3, 1003010e +1003010a: f7ff ff93 bl 10030034 +1003010e: 4628 mov r0, r5 +10030110: f7ff fd54 bl 1002fbbc +10030114: b116 cbz r6, 1003011c +10030116: 4b03 ldr r3, [pc, #12] ; (10030124 ) +10030118: 2200 movs r2, #0 +1003011a: 701a strb r2, [r3, #0] +1003011c: 2304 movs r3, #4 +1003011e: f884 3e9c strb.w r3, [r4, #3740] ; 0xe9c +10030122: bd70 pop {r4, r5, r6, pc} +10030124: 40080522 .word 0x40080522 + +10030128 : +10030128: b538 push {r3, r4, r5, lr} +1003012a: f241 63c8 movw r3, #5832 ; 0x16c8 +1003012e: 58c3 ldr r3, [r0, r3] +10030130: 4604 mov r4, r0 +10030132: f893 2e88 ldrb.w r2, [r3, #3720] ; 0xe88 +10030136: 2a01 cmp r2, #1 +10030138: d11b bne.n 10030172 +1003013a: f893 2e94 ldrb.w r2, [r3, #3732] ; 0xe94 +1003013e: b9c2 cbnz r2, 10030172 +10030140: f893 3e9c ldrb.w r3, [r3, #3740] ; 0xe9c +10030144: f013 0ff7 tst.w r3, #247 ; 0xf7 +10030148: d10f bne.n 1003016a +1003014a: f7ff fe03 bl 1002fd54 +1003014e: 2801 cmp r0, #1 +10030150: d10b bne.n 1003016a +10030152: 4d10 ldr r5, [pc, #64] ; (10030194 ) +10030154: 2006 movs r0, #6 +10030156: 692b ldr r3, [r5, #16] +10030158: 4798 blx r3 +1003015a: 68eb ldr r3, [r5, #12] +1003015c: 2006 movs r0, #6 +1003015e: 4798 blx r3 +10030160: 4620 mov r0, r4 +10030162: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10030166: f7ff bf29 b.w 1002ffbc +1003016a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1003016e: f7ff bb47 b.w 1002f800 +10030172: f893 2e99 ldrb.w r2, [r3, #3737] ; 0xe99 +10030176: b162 cbz r2, 10030192 +10030178: f893 2e9b ldrb.w r2, [r3, #3739] ; 0xe9b +1003017c: f893 3e9c ldrb.w r3, [r3, #3740] ; 0xe9c +10030180: 429a cmp r2, r3 +10030182: d1f2 bne.n 1003016a +10030184: 4c03 ldr r4, [pc, #12] ; (10030194 ) +10030186: 2006 movs r0, #6 +10030188: 6923 ldr r3, [r4, #16] +1003018a: 4798 blx r3 +1003018c: 68e3 ldr r3, [r4, #12] +1003018e: 2006 movs r0, #6 +10030190: 4798 blx r3 +10030192: bd38 pop {r3, r4, r5, pc} +10030194: 10000318 .word 0x10000318 + +10030198 : +10030198: b5f8 push {r3, r4, r5, r6, r7, lr} +1003019a: f241 63c8 movw r3, #5832 ; 0x16c8 +1003019e: 4605 mov r5, r0 +100301a0: 4617 mov r7, r2 +100301a2: 58c4 ldr r4, [r0, r3] +100301a4: b672 cpsid i +100301a6: f894 3e8e ldrb.w r3, [r4, #3726] ; 0xe8e +100301aa: 2b01 cmp r3, #1 +100301ac: f000 80c3 beq.w 10030336 +100301b0: f894 3e8f ldrb.w r3, [r4, #3727] ; 0xe8f +100301b4: 2b01 cmp r3, #1 +100301b6: f000 80be beq.w 10030336 +100301ba: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +100301be: 428b cmp r3, r1 +100301c0: f000 80b9 beq.w 10030336 +100301c4: f604 6688 addw r6, r4, #3720 ; 0xe88 +100301c8: 290c cmp r1, #12 +100301ca: f200 80b4 bhi.w 10030336 +100301ce: e8df f001 tbb [pc, r1] +100301d2: b254 .short 0xb254 +100301d4: b230b27d .word 0xb230b27d +100301d8: b2abb2b2 .word 0xb2abb2b2 +100301dc: b2b2 .short 0xb2b2 +100301de: 07 .byte 0x07 +100301df: 00 .byte 0x00 +100301e0: 2b0e cmp r3, #14 +100301e2: d102 bne.n 100301ea +100301e4: 4630 mov r0, r6 +100301e6: f7ff fe5b bl 1002fea0 +100301ea: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +100301ee: b91b cbnz r3, 100301f8 +100301f0: 4628 mov r0, r5 +100301f2: 2101 movs r1, #1 +100301f4: f7ff ff80 bl 100300f8 +100301f8: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +100301fc: 2b06 cmp r3, #6 +100301fe: d102 bne.n 10030206 +10030200: 4630 mov r0, r6 +10030202: f7ff fe07 bl 1002fe14 +10030206: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +1003020a: 2b04 cmp r3, #4 +1003020c: d108 bne.n 10030220 +1003020e: b127 cbz r7, 1003021a +10030210: 4628 mov r0, r5 +10030212: 4639 mov r1, r7 +10030214: f7ff fdbc bl 1002fd90 +10030218: e002 b.n 10030220 +1003021a: 4630 mov r0, r6 +1003021c: f7ff fdec bl 1002fdf8 +10030220: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +10030224: 2b08 cmp r3, #8 +10030226: f040 8086 bne.w 10030336 +1003022a: 4628 mov r0, r5 +1003022c: f7ff fe86 bl 1002ff3c +10030230: e081 b.n 10030336 +10030232: b913 cbnz r3, 1003023a +10030234: 2101 movs r1, #1 +10030236: f7ff ff5f bl 100300f8 +1003023a: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +1003023e: 2b06 cmp r3, #6 +10030240: d102 bne.n 10030248 +10030242: 4630 mov r0, r6 +10030244: f7ff fde6 bl 1002fe14 +10030248: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +1003024c: 2b0e cmp r3, #14 +1003024e: d107 bne.n 10030260 +10030250: 4628 mov r0, r5 +10030252: f7ff fd21 bl 1002fc98 +10030256: 2801 cmp r0, #1 +10030258: d102 bne.n 10030260 +1003025a: 4630 mov r0, r6 +1003025c: f7ff fe20 bl 1002fea0 +10030260: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +10030264: 2b0c cmp r3, #12 +10030266: d166 bne.n 10030336 +10030268: 4628 mov r0, r5 +1003026a: f7ff fd15 bl 1002fc98 +1003026e: 2801 cmp r0, #1 +10030270: d161 bne.n 10030336 +10030272: 4628 mov r0, r5 +10030274: f7ff fde6 bl 1002fe44 +10030278: e05d b.n 10030336 +1003027a: 2b0e cmp r3, #14 +1003027c: d106 bne.n 1003028c +1003027e: f7ff fd0b bl 1002fc98 +10030282: 2801 cmp r0, #1 +10030284: d102 bne.n 1003028c +10030286: 4630 mov r0, r6 +10030288: f7ff fe0a bl 1002fea0 +1003028c: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +10030290: 2b06 cmp r3, #6 +10030292: d102 bne.n 1003029a +10030294: 4630 mov r0, r6 +10030296: f7ff fdbd bl 1002fe14 +1003029a: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +1003029e: 2b0c cmp r3, #12 +100302a0: d107 bne.n 100302b2 +100302a2: 4628 mov r0, r5 +100302a4: f7ff fcf8 bl 1002fc98 +100302a8: 2801 cmp r0, #1 +100302aa: d102 bne.n 100302b2 +100302ac: 4628 mov r0, r5 +100302ae: f7ff fdc9 bl 1002fe44 +100302b2: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +100302b6: 2b04 cmp r3, #4 +100302b8: d13d bne.n 10030336 +100302ba: 4628 mov r0, r5 +100302bc: f7ff fd0c bl 1002fcd8 +100302c0: 2801 cmp r0, #1 +100302c2: d138 bne.n 10030336 +100302c4: 4628 mov r0, r5 +100302c6: f7ff fe03 bl 1002fed0 +100302ca: e034 b.n 10030336 +100302cc: 2b0e cmp r3, #14 +100302ce: d106 bne.n 100302de +100302d0: f7ff fce2 bl 1002fc98 +100302d4: 2801 cmp r0, #1 +100302d6: d102 bne.n 100302de +100302d8: 4630 mov r0, r6 +100302da: f7ff fde1 bl 1002fea0 +100302de: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +100302e2: 2b06 cmp r3, #6 +100302e4: d102 bne.n 100302ec +100302e6: 4630 mov r0, r6 +100302e8: f7ff fd94 bl 1002fe14 +100302ec: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +100302f0: 2b0c cmp r3, #12 +100302f2: d107 bne.n 10030304 +100302f4: 4628 mov r0, r5 +100302f6: f7ff fccf bl 1002fc98 +100302fa: 2801 cmp r0, #1 +100302fc: d102 bne.n 10030304 +100302fe: 4628 mov r0, r5 +10030300: f7ff fda0 bl 1002fe44 +10030304: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +10030308: b91b cbnz r3, 10030312 +1003030a: 4628 mov r0, r5 +1003030c: 2101 movs r1, #1 +1003030e: f7ff fef3 bl 100300f8 +10030312: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +10030316: 2b04 cmp r3, #4 +10030318: d10d bne.n 10030336 +1003031a: 4b08 ldr r3, [pc, #32] ; (1003033c ) +1003031c: 226f movs r2, #111 ; 0x6f +1003031e: 701a strb r2, [r3, #0] +10030320: 2302 movs r3, #2 +10030322: f884 3e9c strb.w r3, [r4, #3740] ; 0xe9c +10030326: e006 b.n 10030336 +10030328: 2b0c cmp r3, #12 +1003032a: d104 bne.n 10030336 +1003032c: f894 3e92 ldrb.w r3, [r4, #3730] ; 0xe92 +10030330: b10b cbz r3, 10030336 +10030332: f7ff fdf3 bl 1002ff1c +10030336: b662 cpsie i +10030338: bdf8 pop {r3, r4, r5, r6, r7, pc} +1003033a: bf00 nop +1003033c: 40080522 .word 0x40080522 + +10030340 : +10030340: b570 push {r4, r5, r6, lr} +10030342: f241 63c8 movw r3, #5832 ; 0x16c8 +10030346: 4a19 ldr r2, [pc, #100] ; (100303ac ) +10030348: b086 sub sp, #24 +1003034a: 58c5 ldr r5, [r0, r3] +1003034c: f04f 731e mov.w r3, #41418752 ; 0x2780000 +10030350: 6013 str r3, [r2, #0] +10030352: 2400 movs r4, #0 +10030354: 4669 mov r1, sp +10030356: aa03 add r2, sp, #12 +10030358: 4606 mov r6, r0 +1003035a: 9300 str r3, [sp, #0] +1003035c: 9401 str r4, [sp, #4] +1003035e: 9402 str r4, [sp, #8] +10030360: 9403 str r4, [sp, #12] +10030362: 9404 str r4, [sp, #16] +10030364: 9405 str r4, [sp, #20] +10030366: f7fa ff55 bl 1002b214 +1003036a: 4b11 ldr r3, [pc, #68] ; (100303b0 ) +1003036c: 4630 mov r0, r6 +1003036e: 681a ldr r2, [r3, #0] +10030370: 4621 mov r1, r4 +10030372: f442 22e0 orr.w r2, r2, #458752 ; 0x70000 +10030376: 601a str r2, [r3, #0] +10030378: f895 2ea6 ldrb.w r2, [r5, #3750] ; 0xea6 +1003037c: f803 2cb0 strb.w r2, [r3, #-176] +10030380: f00b f895 bl 1003b4ae +10030384: 2801 cmp r0, #1 +10030386: 4602 mov r2, r0 +10030388: d10a bne.n 100303a0 +1003038a: f895 3e9c ldrb.w r3, [r5, #3740] ; 0xe9c +1003038e: f885 4e92 strb.w r4, [r5, #3730] ; 0xe92 +10030392: 075b lsls r3, r3, #29 +10030394: d407 bmi.n 100303a6 +10030396: 4630 mov r0, r6 +10030398: 2104 movs r1, #4 +1003039a: f7ff fefd bl 10030198 +1003039e: e002 b.n 100303a6 +100303a0: 2301 movs r3, #1 +100303a2: f885 3e92 strb.w r3, [r5, #3730] ; 0xe92 +100303a6: b006 add sp, #24 +100303a8: bd70 pop {r4, r5, r6, pc} +100303aa: bf00 nop +100303ac: 40080134 .word 0x40080134 +100303b0: 40080608 .word 0x40080608 + +100303b4 : +100303b4: b5f0 push {r4, r5, r6, r7, lr} +100303b6: f241 63c8 movw r3, #5832 ; 0x16c8 +100303ba: b087 sub sp, #28 +100303bc: 4606 mov r6, r0 +100303be: 58c5 ldr r5, [r0, r3] +100303c0: 460c mov r4, r1 +100303c2: 2900 cmp r1, #0 +100303c4: d13a bne.n 1003043c +100303c6: 4f1f ldr r7, [pc, #124] ; (10030444 ) +100303c8: aa03 add r2, sp, #12 +100303ca: f04f 731e mov.w r3, #41418752 ; 0x2780000 +100303ce: 9100 str r1, [sp, #0] +100303d0: 9101 str r1, [sp, #4] +100303d2: 9102 str r1, [sp, #8] +100303d4: 9104 str r1, [sp, #16] +100303d6: 9105 str r1, [sp, #20] +100303d8: 4669 mov r1, sp +100303da: 9303 str r3, [sp, #12] +100303dc: f7fa ff1a bl 1002b214 +100303e0: 693b ldr r3, [r7, #16] +100303e2: 2006 movs r0, #6 +100303e4: 4798 blx r3 +100303e6: 68fb ldr r3, [r7, #12] +100303e8: 2006 movs r0, #6 +100303ea: 4798 blx r3 +100303ec: 4630 mov r0, r6 +100303ee: 4621 mov r1, r4 +100303f0: f00b f85d bl 1003b4ae +100303f4: 4607 mov r7, r0 +100303f6: 4630 mov r0, r6 +100303f8: b957 cbnz r7, 10030410 +100303fa: f7ff fbdf bl 1002fbbc +100303fe: f605 6088 addw r0, r5, #3720 ; 0xe88 +10030402: f7ff fcf9 bl 1002fdf8 +10030406: f885 7e8e strb.w r7, [r5, #3726] ; 0xe8e +1003040a: f885 7e8f strb.w r7, [r5, #3727] ; 0xe8f +1003040e: e00a b.n 10030426 +10030410: 210c movs r1, #12 +10030412: 4622 mov r2, r4 +10030414: f7ff fec0 bl 10030198 +10030418: 4b0b ldr r3, [pc, #44] ; (10030448 ) +1003041a: 4630 mov r0, r6 +1003041c: 701c strb r4, [r3, #0] +1003041e: 4621 mov r1, r4 +10030420: 2218 movs r2, #24 +10030422: f7ff fb59 bl 1002fad8 +10030426: 2300 movs r3, #0 +10030428: f885 3e8b strb.w r3, [r5, #3723] ; 0xe8b +1003042c: f885 3eb1 strb.w r3, [r5, #3761] ; 0xeb1 +10030430: 4b06 ldr r3, [pc, #24] ; (1003044c ) +10030432: 681a ldr r2, [r3, #0] +10030434: f422 22e0 bic.w r2, r2, #458752 ; 0x70000 +10030438: 601a str r2, [r3, #0] +1003043a: e001 b.n 10030440 +1003043c: f7ff ff80 bl 10030340 +10030440: b007 add sp, #28 +10030442: bdf0 pop {r4, r5, r6, r7, pc} +10030444: 10000318 .word 0x10000318 +10030448: 40080522 .word 0x40080522 +1003044c: 40080608 .word 0x40080608 + +10030450 : +10030450: b510 push {r4, lr} +10030452: f241 63c8 movw r3, #5832 ; 0x16c8 +10030456: 58c3 ldr r3, [r0, r3] +10030458: 4604 mov r4, r0 +1003045a: f893 2e99 ldrb.w r2, [r3, #3737] ; 0xe99 +1003045e: 2a03 cmp r2, #3 +10030460: d10b bne.n 1003047a +10030462: f893 2eb1 ldrb.w r2, [r3, #3761] ; 0xeb1 +10030466: 2a01 cmp r2, #1 +10030468: d107 bne.n 1003047a +1003046a: 4c09 ldr r4, [pc, #36] ; (10030490 ) +1003046c: 2006 movs r0, #6 +1003046e: 6923 ldr r3, [r4, #16] +10030470: 4798 blx r3 +10030472: 68e3 ldr r3, [r4, #12] +10030474: 2006 movs r0, #6 +10030476: 4798 blx r3 +10030478: bd10 pop {r4, pc} +1003047a: 4620 mov r0, r4 +1003047c: f893 1e9b ldrb.w r1, [r3, #3739] ; 0xe9b +10030480: 2201 movs r2, #1 +10030482: f7ff fe89 bl 10030198 +10030486: 4620 mov r0, r4 +10030488: e8bd 4010 ldmia.w sp!, {r4, lr} +1003048c: f7ff b9b0 b.w 1002f7f0 +10030490: 10000318 .word 0x10000318 + +10030494 : +10030494: b570 push {r4, r5, r6, lr} +10030496: f241 63c8 movw r3, #5832 ; 0x16c8 +1003049a: 58c4 ldr r4, [r0, r3] +1003049c: 4606 mov r6, r0 +1003049e: f894 3e88 ldrb.w r3, [r4, #3720] ; 0xe88 +100304a2: b123 cbz r3, 100304ae +100304a4: f894 3e94 ldrb.w r3, [r4, #3732] ; 0xe94 +100304a8: b10b cbz r3, 100304ae +100304aa: f7ff fdc3 bl 10030034 +100304ae: f894 1eb1 ldrb.w r1, [r4, #3761] ; 0xeb1 +100304b2: f894 3eb0 ldrb.w r3, [r4, #3760] ; 0xeb0 +100304b6: 2901 cmp r1, #1 +100304b8: d135 bne.n 10030526 +100304ba: 2200 movs r2, #0 +100304bc: 2b02 cmp r3, #2 +100304be: f884 2eb1 strb.w r2, [r4, #3761] ; 0xeb1 +100304c2: d82b bhi.n 1003051c +100304c4: 2b01 cmp r3, #1 +100304c6: d002 beq.n 100304ce +100304c8: 2b02 cmp r3, #2 +100304ca: d015 beq.n 100304f8 +100304cc: e01e b.n 1003050c +100304ce: f894 5eac ldrb.w r5, [r4, #3756] ; 0xeac +100304d2: 2d31 cmp r5, #49 ; 0x31 +100304d4: d806 bhi.n 100304e4 +100304d6: f894 2ead ldrb.w r2, [r4, #3757] ; 0xead +100304da: f1c5 0532 rsb r5, r5, #50 ; 0x32 +100304de: ebc2 0545 rsb r5, r2, r5, lsl #1 +100304e2: e006 b.n 100304f2 +100304e4: 2d63 cmp r5, #99 ; 0x63 +100304e6: d811 bhi.n 1003050c +100304e8: f894 2ead ldrb.w r2, [r4, #3757] ; 0xead +100304ec: 4415 add r5, r2 +100304ee: f1c5 0564 rsb r5, r5, #100 ; 0x64 +100304f2: b2ed uxtb r5, r5 +100304f4: 461c mov r4, r3 +100304f6: e00b b.n 10030510 +100304f8: f894 3eac ldrb.w r3, [r4, #3756] ; 0xeac +100304fc: 2b31 cmp r3, #49 ; 0x31 +100304fe: d805 bhi.n 1003050c +10030500: f894 5eae ldrb.w r5, [r4, #3758] ; 0xeae +10030504: 460c mov r4, r1 +10030506: 1b5d subs r5, r3, r5 +10030508: b2ed uxtb r5, r5 +1003050a: e001 b.n 10030510 +1003050c: 4614 mov r4, r2 +1003050e: 4615 mov r5, r2 +10030510: 4630 mov r0, r6 +10030512: f7ff ff9d bl 10030450 +10030516: 2c01 cmp r4, #1 +10030518: d145 bne.n 100305a6 +1003051a: e03f b.n 1003059c +1003051c: 4630 mov r0, r6 +1003051e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10030522: f7ff bf95 b.w 10030450 +10030526: 2201 movs r2, #1 +10030528: 2b02 cmp r3, #2 +1003052a: f884 2eb1 strb.w r2, [r4, #3761] ; 0xeb1 +1003052e: d83a bhi.n 100305a6 +10030530: 4413 add r3, r2 +10030532: b2db uxtb r3, r3 +10030534: 2b02 cmp r3, #2 +10030536: f884 3eb0 strb.w r3, [r4, #3760] ; 0xeb0 +1003053a: d004 beq.n 10030546 +1003053c: 2b03 cmp r3, #3 +1003053e: d005 beq.n 1003054c +10030540: f894 5ead ldrb.w r5, [r4, #3757] ; 0xead +10030544: e004 b.n 10030550 +10030546: f894 5eae ldrb.w r5, [r4, #3758] ; 0xeae +1003054a: e001 b.n 10030550 +1003054c: f894 5eaf ldrb.w r5, [r4, #3759] ; 0xeaf +10030550: b9c5 cbnz r5, 10030584 +10030552: f884 5eb1 strb.w r5, [r4, #3761] ; 0xeb1 +10030556: 4630 mov r0, r6 +10030558: f894 5eac ldrb.w r5, [r4, #3756] ; 0xeac +1003055c: f7ff ff78 bl 10030450 +10030560: f894 3eac ldrb.w r3, [r4, #3756] ; 0xeac +10030564: 2b64 cmp r3, #100 ; 0x64 +10030566: d01e beq.n 100305a6 +10030568: 2b31 cmp r3, #49 ; 0x31 +1003056a: d804 bhi.n 10030576 +1003056c: f894 3eb0 ldrb.w r3, [r4, #3760] ; 0xeb0 +10030570: 2b03 cmp r3, #3 +10030572: d102 bne.n 1003057a +10030574: bd70 pop {r4, r5, r6, pc} +10030576: 2b63 cmp r3, #99 ; 0x63 +10030578: d810 bhi.n 1003059c +1003057a: f894 3eb0 ldrb.w r3, [r4, #3760] ; 0xeb0 +1003057e: 2b02 cmp r3, #2 +10030580: d10c bne.n 1003059c +10030582: bd70 pop {r4, r5, r6, pc} +10030584: 4630 mov r0, r6 +10030586: 210c movs r1, #12 +10030588: 2200 movs r2, #0 +1003058a: f7ff fe05 bl 10030198 +1003058e: 4b06 ldr r3, [pc, #24] ; (100305a8 ) +10030590: 2100 movs r1, #0 +10030592: 7019 strb r1, [r3, #0] +10030594: 4630 mov r0, r6 +10030596: 2218 movs r2, #24 +10030598: f7ff fa9e bl 1002fad8 +1003059c: 4628 mov r0, r5 +1003059e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +100305a2: f7ff b8ef b.w 1002f784 +100305a6: bd70 pop {r4, r5, r6, pc} +100305a8: 40080522 .word 0x40080522 + +100305ac : +100305ac: b573 push {r0, r1, r4, r5, r6, lr} +100305ae: 6885 ldr r5, [r0, #8] +100305b0: 2300 movs r3, #0 +100305b2: ac02 add r4, sp, #8 +100305b4: f844 3d04 str.w r3, [r4, #-4]! +100305b8: 3520 adds r5, #32 +100305ba: 4621 mov r1, r4 +100305bc: 4606 mov r6, r0 +100305be: 4628 mov r0, r5 +100305c0: f7e6 ffce bl 10017560 +100305c4: 4630 mov r0, r6 +100305c6: f7ff ff65 bl 10030494 +100305ca: 4628 mov r0, r5 +100305cc: 4621 mov r1, r4 +100305ce: f7e6 ffd1 bl 10017574 +100305d2: b002 add sp, #8 +100305d4: bd70 pop {r4, r5, r6, pc} + +100305d6 : +100305d6: f241 63c8 movw r3, #5832 ; 0x16c8 +100305da: 58c3 ldr r3, [r0, r3] +100305dc: f893 2e99 ldrb.w r2, [r3, #3737] ; 0xe99 +100305e0: b14a cbz r2, 100305f6 +100305e2: 2a03 cmp r2, #3 +100305e4: d007 beq.n 100305f6 +100305e6: f893 2e9b ldrb.w r2, [r3, #3739] ; 0xe9b +100305ea: f893 3e9c ldrb.w r3, [r3, #3740] ; 0xe9c +100305ee: 429a cmp r2, r3 +100305f0: d001 beq.n 100305f6 +100305f2: f7ff bf2d b.w 10030450 +100305f6: 4770 bx lr + +100305f8 : +100305f8: b538 push {r3, r4, r5, lr} +100305fa: 4c0c ldr r4, [pc, #48] ; (1003062c ) +100305fc: f241 63c8 movw r3, #5832 ; 0x16c8 +10030600: 58c5 ldr r5, [r0, r3] +10030602: 6923 ldr r3, [r4, #16] +10030604: 2007 movs r0, #7 +10030606: 4798 blx r3 +10030608: 68e3 ldr r3, [r4, #12] +1003060a: 2007 movs r0, #7 +1003060c: 4798 blx r3 +1003060e: 4b08 ldr r3, [pc, #32] ; (10030630 ) +10030610: 2202 movs r2, #2 +10030612: 701a strb r2, [r3, #0] +10030614: 2007 movs r0, #7 +10030616: f44f 5170 mov.w r1, #15360 ; 0x3c00 +1003061a: f7e9 fcfd bl 1001a018 +1003061e: 2007 movs r0, #7 +10030620: f7ff f8a7 bl 1002f772 +10030624: 2301 movs r3, #1 +10030626: f885 3e8b strb.w r3, [r5, #3723] ; 0xe8b +1003062a: bd38 pop {r3, r4, r5, pc} +1003062c: 10000318 .word 0x10000318 +10030630: 40080692 .word 0x40080692 + +10030634 : +10030634: b538 push {r3, r4, r5, lr} +10030636: 4d14 ldr r5, [pc, #80] ; (10030688 ) +10030638: 4604 mov r4, r0 +1003063a: 68eb ldr r3, [r5, #12] +1003063c: 2007 movs r0, #7 +1003063e: 4798 blx r3 +10030640: 692b ldr r3, [r5, #16] +10030642: 2007 movs r0, #7 +10030644: 4798 blx r3 +10030646: f241 63c8 movw r3, #5832 ; 0x16c8 +1003064a: 58e3 ldr r3, [r4, r3] +1003064c: f893 2e99 ldrb.w r2, [r3, #3737] ; 0xe99 +10030650: b1ca cbz r2, 10030686 +10030652: 2a03 cmp r2, #3 +10030654: d104 bne.n 10030660 +10030656: 4620 mov r0, r4 +10030658: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1003065c: f7ff b8a6 b.w 1002f7ac +10030660: 4a0a ldr r2, [pc, #40] ; (1003068c ) +10030662: 7812 ldrb r2, [r2, #0] +10030664: f002 0202 and.w r2, r2, #2 +10030668: f002 01ff and.w r1, r2, #255 ; 0xff +1003066c: b122 cbz r2, 10030678 +1003066e: 4620 mov r0, r4 +10030670: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10030674: f7ff bfc0 b.w 100305f8 +10030678: f883 1e8b strb.w r1, [r3, #3723] ; 0xe8b +1003067c: 4620 mov r0, r4 +1003067e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10030682: f7ff bee5 b.w 10030450 +10030686: bd38 pop {r3, r4, r5, pc} +10030688: 10000318 .word 0x10000318 +1003068c: 40080692 .word 0x40080692 + +10030690 : +10030690: b538 push {r3, r4, r5, lr} +10030692: f241 63c8 movw r3, #5832 ; 0x16c8 +10030696: 58c5 ldr r5, [r0, r3] +10030698: 4604 mov r4, r0 +1003069a: f7ff ffad bl 100305f8 +1003069e: f895 3e9c ldrb.w r3, [r5, #3740] ; 0xe9c +100306a2: 2b0c cmp r3, #12 +100306a4: d00d beq.n 100306c2 +100306a6: 4620 mov r0, r4 +100306a8: 210c movs r1, #12 +100306aa: 2200 movs r2, #0 +100306ac: f7ff fd74 bl 10030198 +100306b0: 4b04 ldr r3, [pc, #16] ; (100306c4 ) +100306b2: 2100 movs r1, #0 +100306b4: 7019 strb r1, [r3, #0] +100306b6: 4620 mov r0, r4 +100306b8: 2208 movs r2, #8 +100306ba: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +100306be: f7ff ba0b b.w 1002fad8 +100306c2: bd38 pop {r3, r4, r5, pc} +100306c4: 40080522 .word 0x40080522 + +100306c8 : +100306c8: b538 push {r3, r4, r5, lr} +100306ca: f241 63c8 movw r3, #5832 ; 0x16c8 +100306ce: 58c4 ldr r4, [r0, r3] +100306d0: 4b26 ldr r3, [pc, #152] ; (1003076c ) +100306d2: 881d ldrh r5, [r3, #0] +100306d4: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d +100306d8: b2ad uxth r5, r5 +100306da: f415 4f40 tst.w r5, #49152 ; 0xc000 +100306de: d107 bne.n 100306f0 +100306e0: f023 0303 bic.w r3, r3, #3 +100306e4: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d +100306e8: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +100306ec: f7ff beb0 b.w 10030450 +100306f0: 046a lsls r2, r5, #17 +100306f2: d513 bpl.n 1003071c +100306f4: f894 2e99 ldrb.w r2, [r4, #3737] ; 0xe99 +100306f8: 2a01 cmp r2, #1 +100306fa: d113 bne.n 10030724 +100306fc: f043 0301 orr.w r3, r3, #1 +10030700: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d +10030704: f894 3e97 ldrb.w r3, [r4, #3735] ; 0xe97 +10030708: f003 030f and.w r3, r3, #15 +1003070c: 2b02 cmp r3, #2 +1003070e: d002 beq.n 10030716 +10030710: f7ff f9a2 bl 1002fa58 +10030714: e006 b.n 10030724 +10030716: f7ff ffbb bl 10030690 +1003071a: e003 b.n 10030724 +1003071c: f023 0301 bic.w r3, r3, #1 +10030720: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d +10030724: f415 4f00 tst.w r5, #32768 ; 0x8000 +10030728: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d +1003072c: d019 beq.n 10030762 +1003072e: 4d10 ldr r5, [pc, #64] ; (10030770 ) +10030730: f043 0302 orr.w r3, r3, #2 +10030734: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d +10030738: 2006 movs r0, #6 +1003073a: 692b ldr r3, [r5, #16] +1003073c: 4798 blx r3 +1003073e: 68eb ldr r3, [r5, #12] +10030740: 2006 movs r0, #6 +10030742: 4798 blx r3 +10030744: 2006 movs r0, #6 +10030746: f44f 5170 mov.w r1, #15360 ; 0x3c00 +1003074a: f7e9 fc65 bl 1001a018 +1003074e: 2006 movs r0, #6 +10030750: f7ff f80f bl 1002f772 +10030754: 4b07 ldr r3, [pc, #28] ; (10030774 ) +10030756: 2200 movs r2, #0 +10030758: 701a strb r2, [r3, #0] +1003075a: 2301 movs r3, #1 +1003075c: f884 3e8a strb.w r3, [r4, #3722] ; 0xe8a +10030760: bd38 pop {r3, r4, r5, pc} +10030762: f023 0302 bic.w r3, r3, #2 +10030766: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d +1003076a: bd38 pop {r3, r4, r5, pc} +1003076c: 400806a8 .word 0x400806a8 +10030770: 10000318 .word 0x10000318 +10030774: 1004de00 .word 0x1004de00 + +10030778 : +10030778: b5f8 push {r3, r4, r5, r6, r7, lr} +1003077a: f241 63c8 movw r3, #5832 ; 0x16c8 +1003077e: 58c4 ldr r4, [r0, r3] +10030780: 4606 mov r6, r0 +10030782: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 +10030786: 2b00 cmp r3, #0 +10030788: d04e beq.n 10030828 +1003078a: 2100 movs r1, #0 +1003078c: f00a fe8f bl 1003b4ae +10030790: 2801 cmp r0, #1 +10030792: d149 bne.n 10030828 +10030794: f894 3e97 ldrb.w r3, [r4, #3735] ; 0xe97 +10030798: 091b lsrs r3, r3, #4 +1003079a: d010 beq.n 100307be +1003079c: 2b02 cmp r3, #2 +1003079e: dc43 bgt.n 10030828 +100307a0: f894 3ea0 ldrb.w r3, [r4, #3744] ; 0xea0 +100307a4: 3b01 subs r3, #1 +100307a6: b2db uxtb r3, r3 +100307a8: f884 3ea0 strb.w r3, [r4, #3744] ; 0xea0 +100307ac: b11b cbz r3, 100307b6 +100307ae: f894 3ea2 ldrb.w r3, [r4, #3746] ; 0xea2 +100307b2: b923 cbnz r3, 100307be +100307b4: bdf8 pop {r3, r4, r5, r6, r7, pc} +100307b6: f894 3e9f ldrb.w r3, [r4, #3743] ; 0xe9f +100307ba: f884 3ea0 strb.w r3, [r4, #3744] ; 0xea0 +100307be: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d +100307c2: 4d1a ldr r5, [pc, #104] ; (1003082c ) +100307c4: f043 0310 orr.w r3, r3, #16 +100307c8: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d +100307cc: f894 3ea2 ldrb.w r3, [r4, #3746] ; 0xea2 +100307d0: 4f17 ldr r7, [pc, #92] ; (10030830 ) +100307d2: 2b01 cmp r3, #1 +100307d4: d809 bhi.n 100307ea +100307d6: 692b ldr r3, [r5, #16] +100307d8: 2006 movs r0, #6 +100307da: 4798 blx r3 +100307dc: 68eb ldr r3, [r5, #12] +100307de: 2006 movs r0, #6 +100307e0: 4798 blx r3 +100307e2: f894 1ea2 ldrb.w r1, [r4, #3746] ; 0xea2 +100307e6: 3104 adds r1, #4 +100307e8: e00a b.n 10030800 +100307ea: 692b ldr r3, [r5, #16] +100307ec: 2006 movs r0, #6 +100307ee: 4798 blx r3 +100307f0: 68eb ldr r3, [r5, #12] +100307f2: 2006 movs r0, #6 +100307f4: 4798 blx r3 +100307f6: f894 3ea2 ldrb.w r3, [r4, #3746] ; 0xea2 +100307fa: eb03 0343 add.w r3, r3, r3, lsl #1 +100307fe: 1c99 adds r1, r3, #2 +10030800: 2006 movs r0, #6 +10030802: 0289 lsls r1, r1, #10 +10030804: f7e9 fc08 bl 1001a018 +10030808: 2006 movs r0, #6 +1003080a: f7fe ffb2 bl 1002f772 +1003080e: 2300 movs r3, #0 +10030810: 703b strb r3, [r7, #0] +10030812: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +10030816: 075b lsls r3, r3, #29 +10030818: d406 bmi.n 10030828 +1003081a: 4630 mov r0, r6 +1003081c: 2104 movs r1, #4 +1003081e: 2201 movs r2, #1 +10030820: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +10030824: f7ff bcb8 b.w 10030198 +10030828: bdf8 pop {r3, r4, r5, r6, r7, pc} +1003082a: bf00 nop +1003082c: 10000318 .word 0x10000318 +10030830: 1004de00 .word 0x1004de00 + +10030834 : +10030834: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10030838: f241 63c8 movw r3, #5832 ; 0x16c8 +1003083c: 58c4 ldr r4, [r0, r3] +1003083e: b086 sub sp, #24 +10030840: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 +10030844: 4605 mov r5, r0 +10030846: b37b cbz r3, 100308a8 +10030848: 2100 movs r1, #0 +1003084a: f00a fe30 bl 1003b4ae +1003084e: 2801 cmp r0, #1 +10030850: 4606 mov r6, r0 +10030852: d129 bne.n 100308a8 +10030854: f894 2e9f ldrb.w r2, [r4, #3743] ; 0xe9f +10030858: 4b1d ldr r3, [pc, #116] ; (100308d0 ) +1003085a: f8df 8080 ldr.w r8, [pc, #128] ; 100308dc +1003085e: 701a strb r2, [r3, #0] +10030860: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d +10030864: 2700 movs r7, #0 +10030866: f043 0310 orr.w r3, r3, #16 +1003086a: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d +1003086e: 2006 movs r0, #6 +10030870: f8d8 3010 ldr.w r3, [r8, #16] +10030874: f884 7ea0 strb.w r7, [r4, #3744] ; 0xea0 +10030878: 4798 blx r3 +1003087a: f8d8 300c ldr.w r3, [r8, #12] +1003087e: 2006 movs r0, #6 +10030880: 4798 blx r3 +10030882: 2006 movs r0, #6 +10030884: f44f 5180 mov.w r1, #4096 ; 0x1000 +10030888: f7e9 fbc6 bl 1001a018 +1003088c: 2006 movs r0, #6 +1003088e: f7fe ff70 bl 1002f772 +10030892: 4b10 ldr r3, [pc, #64] ; (100308d4 ) +10030894: 701f strb r7, [r3, #0] +10030896: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c +1003089a: 075b lsls r3, r3, #29 +1003089c: d404 bmi.n 100308a8 +1003089e: 4628 mov r0, r5 +100308a0: 2104 movs r1, #4 +100308a2: 4632 mov r2, r6 +100308a4: f7ff fc78 bl 10030198 +100308a8: 4a0b ldr r2, [pc, #44] ; (100308d8 ) +100308aa: f44f 3300 mov.w r3, #131072 ; 0x20000 +100308ae: 6013 str r3, [r2, #0] +100308b0: 4628 mov r0, r5 +100308b2: 9300 str r3, [sp, #0] +100308b4: 4669 mov r1, sp +100308b6: 2300 movs r3, #0 +100308b8: aa03 add r2, sp, #12 +100308ba: 9301 str r3, [sp, #4] +100308bc: 9302 str r3, [sp, #8] +100308be: 9303 str r3, [sp, #12] +100308c0: 9304 str r3, [sp, #16] +100308c2: 9305 str r3, [sp, #20] +100308c4: f7fa fca6 bl 1002b214 +100308c8: b006 add sp, #24 +100308ca: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100308ce: bf00 nop +100308d0: 40080573 .word 0x40080573 +100308d4: 1004de00 .word 0x1004de00 +100308d8: 40080134 .word 0x40080134 +100308dc: 10000318 .word 0x10000318 + +100308e0 : +100308e0: b570 push {r4, r5, r6, lr} +100308e2: f241 63c8 movw r3, #5832 ; 0x16c8 +100308e6: 58c4 ldr r4, [r0, r3] +100308e8: b086 sub sp, #24 +100308ea: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 +100308ee: 4605 mov r5, r0 +100308f0: 2b00 cmp r3, #0 +100308f2: f000 808d beq.w 10030a10 +100308f6: 2100 movs r1, #0 +100308f8: f00a fdd9 bl 1003b4ae +100308fc: 2801 cmp r0, #1 +100308fe: f040 8087 bne.w 10030a10 +10030902: f894 3e94 ldrb.w r3, [r4, #3732] ; 0xe94 +10030906: b113 cbz r3, 1003090e +10030908: 4628 mov r0, r5 +1003090a: f7ff fb93 bl 10030034 +1003090e: f894 3e97 ldrb.w r3, [r4, #3735] ; 0xe97 +10030912: 091b lsrs r3, r3, #4 +10030914: 2b01 cmp r3, #1 +10030916: d10a bne.n 1003092e +10030918: 4b3e ldr r3, [pc, #248] ; (10030a14 ) +1003091a: 681b ldr r3, [r3, #0] +1003091c: f3c3 4207 ubfx r2, r3, #16, #8 +10030920: 0e1b lsrs r3, r3, #24 +10030922: f884 2e9f strb.w r2, [r4, #3743] ; 0xe9f +10030926: bf18 it ne +10030928: 461a movne r2, r3 +1003092a: f884 2ea0 strb.w r2, [r4, #3744] ; 0xea0 +1003092e: 2300 movs r3, #0 +10030930: f884 3ea2 strb.w r3, [r4, #3746] ; 0xea2 +10030934: f884 3ea3 strb.w r3, [r4, #3747] ; 0xea3 +10030938: f894 2ea6 ldrb.w r2, [r4, #3750] ; 0xea6 +1003093c: 4b36 ldr r3, [pc, #216] ; (10030a18 ) +1003093e: 4e37 ldr r6, [pc, #220] ; (10030a1c ) +10030940: 701a strb r2, [r3, #0] +10030942: 6933 ldr r3, [r6, #16] +10030944: 2006 movs r0, #6 +10030946: 4798 blx r3 +10030948: 68f3 ldr r3, [r6, #12] +1003094a: 2006 movs r0, #6 +1003094c: 4798 blx r3 +1003094e: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d +10030952: f023 0312 bic.w r3, r3, #18 +10030956: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d +1003095a: f894 3e97 ldrb.w r3, [r4, #3735] ; 0xe97 +1003095e: 2b2f cmp r3, #47 ; 0x2f +10030960: d802 bhi.n 10030968 +10030962: 4628 mov r0, r5 +10030964: f7ff feb0 bl 100306c8 +10030968: f894 3e93 ldrb.w r3, [r4, #3731] ; 0xe93 +1003096c: 2b00 cmp r3, #0 +1003096e: d04c beq.n 10030a0a +10030970: f894 3e96 ldrb.w r3, [r4, #3734] ; 0xe96 +10030974: bb13 cbnz r3, 100309bc +10030976: f894 1ea0 ldrb.w r1, [r4, #3744] ; 0xea0 +1003097a: f894 2e9f ldrb.w r2, [r4, #3743] ; 0xe9f +1003097e: 428a cmp r2, r1 +10030980: d143 bne.n 10030a0a +10030982: 4827 ldr r0, [pc, #156] ; (10030a20 ) +10030984: 2101 movs r1, #1 +10030986: f884 1e96 strb.w r1, [r4, #3734] ; 0xe96 +1003098a: f2a0 40ef subw r0, r0, #1263 ; 0x4ef +1003098e: f880 24ef strb.w r2, [r0, #1263] ; 0x4ef +10030992: 2202 movs r2, #2 +10030994: 6002 str r2, [r0, #0] +10030996: 9202 str r2, [sp, #8] +10030998: f44f 3200 mov.w r2, #131072 ; 0x20000 +1003099c: 9203 str r2, [sp, #12] +1003099e: 9105 str r1, [sp, #20] +100309a0: 4628 mov r0, r5 +100309a2: 4669 mov r1, sp +100309a4: aa03 add r2, sp, #12 +100309a6: 9300 str r3, [sp, #0] +100309a8: 9301 str r3, [sp, #4] +100309aa: 9304 str r3, [sp, #16] +100309ac: f7fa fc32 bl 1002b214 +100309b0: f894 3ea0 ldrb.w r3, [r4, #3744] ; 0xea0 +100309b4: 3b01 subs r3, #1 +100309b6: f884 3ea0 strb.w r3, [r4, #3744] ; 0xea0 +100309ba: e026 b.n 10030a0a +100309bc: f894 2e97 ldrb.w r2, [r4, #3735] ; 0xe97 +100309c0: 0912 lsrs r2, r2, #4 +100309c2: 2a01 cmp r2, #1 +100309c4: d121 bne.n 10030a0a +100309c6: f894 3ea0 ldrb.w r3, [r4, #3744] ; 0xea0 +100309ca: f894 1e9f ldrb.w r1, [r4, #3743] ; 0xe9f +100309ce: 4299 cmp r1, r3 +100309d0: d01b beq.n 10030a0a +100309d2: 4913 ldr r1, [pc, #76] ; (10030a20 ) +100309d4: 7809 ldrb r1, [r1, #0] +100309d6: 428b cmp r3, r1 +100309d8: d017 beq.n 10030a0a +100309da: f894 3e92 ldrb.w r3, [r4, #3730] ; 0xe92 +100309de: b1a3 cbz r3, 10030a0a +100309e0: 4910 ldr r1, [pc, #64] ; (10030a24 ) +100309e2: 2300 movs r3, #0 +100309e4: 4810 ldr r0, [pc, #64] ; (10030a28 ) +100309e6: f884 3e96 strb.w r3, [r4, #3734] ; 0xe96 +100309ea: 600a str r2, [r1, #0] +100309ec: f44f 3100 mov.w r1, #131072 ; 0x20000 +100309f0: 6001 str r1, [r0, #0] +100309f2: e88d 000a stmia.w sp, {r1, r3} +100309f6: 9202 str r2, [sp, #8] +100309f8: 9303 str r3, [sp, #12] +100309fa: 9304 str r3, [sp, #16] +100309fc: 4628 mov r0, r5 +100309fe: 2302 movs r3, #2 +10030a00: 4669 mov r1, sp +10030a02: aa03 add r2, sp, #12 +10030a04: 9305 str r3, [sp, #20] +10030a06: f7fa fc05 bl 1002b214 +10030a0a: 2301 movs r3, #1 +10030a0c: f884 3e92 strb.w r3, [r4, #3730] ; 0xe92 +10030a10: b006 add sp, #24 +10030a12: bd70 pop {r4, r5, r6, pc} +10030a14: 400806a8 .word 0x400806a8 +10030a18: 40080558 .word 0x40080558 +10030a1c: 10000318 .word 0x10000318 +10030a20: 40080573 .word 0x40080573 +10030a24: 40080084 .word 0x40080084 +10030a28: 40080134 .word 0x40080134 + +10030a2c : +10030a2c: b510 push {r4, lr} +10030a2e: f241 63c8 movw r3, #5832 ; 0x16c8 +10030a32: 58c3 ldr r3, [r0, r3] +10030a34: 4604 mov r4, r0 +10030a36: f893 2e99 ldrb.w r2, [r3, #3737] ; 0xe99 +10030a3a: 2a01 cmp r2, #1 +10030a3c: d114 bne.n 10030a68 +10030a3e: f893 1e97 ldrb.w r1, [r3, #3735] ; 0xe97 +10030a42: 0709 lsls r1, r1, #28 +10030a44: d008 beq.n 10030a58 +10030a46: 210c movs r1, #12 +10030a48: 2200 movs r2, #0 +10030a4a: f7ff fba5 bl 10030198 +10030a4e: 4620 mov r0, r4 +10030a50: e8bd 4010 ldmia.w sp!, {r4, lr} +10030a54: f7ff bdd0 b.w 100305f8 +10030a58: f893 3e9c ldrb.w r3, [r3, #3740] ; 0xe9c +10030a5c: b923 cbnz r3, 10030a68 +10030a5e: 2104 movs r1, #4 +10030a60: e8bd 4010 ldmia.w sp!, {r4, lr} +10030a64: f7ff bb98 b.w 10030198 +10030a68: bd10 pop {r4, pc} + +10030a6a : +10030a6a: b570 push {r4, r5, r6, lr} +10030a6c: f241 63c8 movw r3, #5832 ; 0x16c8 +10030a70: 58c4 ldr r4, [r0, r3] +10030a72: b086 sub sp, #24 +10030a74: f894 3e93 ldrb.w r3, [r4, #3731] ; 0xe93 +10030a78: 4605 mov r5, r0 +10030a7a: b183 cbz r3, 10030a9e +10030a7c: f894 3e96 ldrb.w r3, [r4, #3734] ; 0xe96 +10030a80: 2b01 cmp r3, #1 +10030a82: d10c bne.n 10030a9e +10030a84: f44f 3200 mov.w r2, #131072 ; 0x20000 +10030a88: 2300 movs r3, #0 +10030a8a: 9203 str r2, [sp, #12] +10030a8c: 4669 mov r1, sp +10030a8e: aa03 add r2, sp, #12 +10030a90: 9300 str r3, [sp, #0] +10030a92: 9301 str r3, [sp, #4] +10030a94: 9302 str r3, [sp, #8] +10030a96: 9304 str r3, [sp, #16] +10030a98: 9305 str r3, [sp, #20] +10030a9a: f7fa fbbb bl 1002b214 +10030a9e: f894 6e8a ldrb.w r6, [r4, #3722] ; 0xe8a +10030aa2: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d +10030aa6: b16e cbz r6, 10030ac4 +10030aa8: 2200 movs r2, #0 +10030aaa: f884 2e8a strb.w r2, [r4, #3722] ; 0xe8a +10030aae: f013 0f05 tst.w r3, #5 +10030ab2: f023 0202 bic.w r2, r3, #2 +10030ab6: f884 2e9d strb.w r2, [r4, #3741] ; 0xe9d +10030aba: d131 bne.n 10030b20 +10030abc: 4628 mov r0, r5 +10030abe: f7ff fcc7 bl 10030450 +10030ac2: e02d b.n 10030b20 +10030ac4: f894 2ea2 ldrb.w r2, [r4, #3746] ; 0xea2 +10030ac8: f023 0310 bic.w r3, r3, #16 +10030acc: 3201 adds r2, #1 +10030ace: b2d2 uxtb r2, r2 +10030ad0: 2a02 cmp r2, #2 +10030ad2: f884 2ea2 strb.w r2, [r4, #3746] ; 0xea2 +10030ad6: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d +10030ada: d9ef bls.n 10030abc +10030adc: 4628 mov r0, r5 +10030ade: 4631 mov r1, r6 +10030ae0: f00a fce5 bl 1003b4ae +10030ae4: 2801 cmp r0, #1 +10030ae6: d118 bne.n 10030b1a +10030ae8: f894 3e97 ldrb.w r3, [r4, #3735] ; 0xe97 +10030aec: f3c3 0203 ubfx r2, r3, #0, #4 +10030af0: 071b lsls r3, r3, #28 +10030af2: d102 bne.n 10030afa +10030af4: f884 2e92 strb.w r2, [r4, #3730] ; 0xe92 +10030af8: e00f b.n 10030b1a +10030afa: f894 3ea3 ldrb.w r3, [r4, #3747] ; 0xea3 +10030afe: 3301 adds r3, #1 +10030b00: b2db uxtb r3, r3 +10030b02: 2b02 cmp r3, #2 +10030b04: f884 3ea3 strb.w r3, [r4, #3747] ; 0xea3 +10030b08: d904 bls.n 10030b14 +10030b0a: f884 6e92 strb.w r6, [r4, #3730] ; 0xe92 +10030b0e: f884 6ea3 strb.w r6, [r4, #3747] ; 0xea3 +10030b12: e002 b.n 10030b1a +10030b14: 4628 mov r0, r5 +10030b16: f7ff fdbb bl 10030690 +10030b1a: 2300 movs r3, #0 +10030b1c: f884 3ea2 strb.w r3, [r4, #3746] ; 0xea2 +10030b20: b006 add sp, #24 +10030b22: bd70 pop {r4, r5, r6, pc} + +10030b24 : +10030b24: b538 push {r3, r4, r5, lr} +10030b26: 4d10 ldr r5, [pc, #64] ; (10030b68 ) +10030b28: 4604 mov r4, r0 +10030b2a: 68eb ldr r3, [r5, #12] +10030b2c: 2006 movs r0, #6 +10030b2e: 4798 blx r3 +10030b30: 692b ldr r3, [r5, #16] +10030b32: 2006 movs r0, #6 +10030b34: 4798 blx r3 +10030b36: f241 4208 movw r2, #5128 ; 0x1408 +10030b3a: 5ca2 ldrb r2, [r4, r2] +10030b3c: f241 63c8 movw r3, #5832 ; 0x16c8 +10030b40: 58e3 ldr r3, [r4, r3] +10030b42: b17a cbz r2, 10030b64 +10030b44: 4a09 ldr r2, [pc, #36] ; (10030b6c ) +10030b46: 7812 ldrb r2, [r2, #0] +10030b48: b93a cbnz r2, 10030b5a +10030b4a: f893 3e99 ldrb.w r3, [r3, #3737] ; 0xe99 +10030b4e: b14b cbz r3, 10030b64 +10030b50: 4620 mov r0, r4 +10030b52: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10030b56: f7ff bf88 b.w 10030a6a +10030b5a: 4620 mov r0, r4 +10030b5c: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10030b60: f7fe be46 b.w 1002f7f0 +10030b64: bd38 pop {r3, r4, r5, pc} +10030b66: bf00 nop +10030b68: 10000318 .word 0x10000318 +10030b6c: 1004de00 .word 0x1004de00 + +10030b70 : +10030b70: f241 62c8 movw r2, #5832 ; 0x16c8 +10030b74: b538 push {r3, r4, r5, lr} +10030b76: 5884 ldr r4, [r0, r2] +10030b78: b151 cbz r1, 10030b90 +10030b7a: f241 4208 movw r2, #5128 ; 0x1408 +10030b7e: 5c80 ldrb r0, [r0, r2] +10030b80: b180 cbz r0, 10030ba4 +10030b82: 2501 movs r5, #1 +10030b84: f884 5e88 strb.w r5, [r4, #3720] ; 0xe88 +10030b88: f7fe fe3a bl 1002f800 +10030b8c: 4628 mov r0, r5 +10030b8e: bd38 pop {r3, r4, r5, pc} +10030b90: f894 3e94 ldrb.w r3, [r4, #3732] ; 0xe94 +10030b94: 2b01 cmp r3, #1 +10030b96: d101 bne.n 10030b9c +10030b98: f7ff fa4c bl 10030034 +10030b9c: 2300 movs r3, #0 +10030b9e: f884 3e88 strb.w r3, [r4, #3720] ; 0xe88 +10030ba2: 2001 movs r0, #1 +10030ba4: bd38 pop {r3, r4, r5, pc} + ... + +10030ba8 : +10030ba8: b5f0 push {r4, r5, r6, r7, lr} +10030baa: b087 sub sp, #28 +10030bac: 4604 mov r4, r0 +10030bae: 460d mov r5, r1 +10030bb0: 220c movs r2, #12 +10030bb2: 2100 movs r1, #0 +10030bb4: 4668 mov r0, sp +10030bb6: f00d f835 bl 1003dc24 +10030bba: 2100 movs r1, #0 +10030bbc: 220c movs r2, #12 +10030bbe: a803 add r0, sp, #12 +10030bc0: f00d f830 bl 1003dc24 +10030bc4: f241 63c8 movw r3, #5832 ; 0x16c8 +10030bc8: 4620 mov r0, r4 +10030bca: 58e7 ldr r7, [r4, r3] +10030bcc: f7ff fa5c bl 10030088 +10030bd0: 7829 ldrb r1, [r5, #0] +10030bd2: 4e12 ldr r6, [pc, #72] ; (10030c1c ) +10030bd4: f011 017f ands.w r1, r1, #127 ; 0x7f +10030bd8: d107 bne.n 10030bea +10030bda: 4620 mov r0, r4 +10030bdc: f7ff ffc8 bl 10030b70 +10030be0: 233f movs r3, #63 ; 0x3f +10030be2: 7033 strb r3, [r6, #0] +10030be4: 2302 movs r3, #2 +10030be6: 9303 str r3, [sp, #12] +10030be8: e00b b.n 10030c02 +10030bea: 7869 ldrb r1, [r5, #1] +10030bec: f607 6088 addw r0, r7, #3720 ; 0xe88 +10030bf0: f001 010f and.w r1, r1, #15 +10030bf4: 78aa ldrb r2, [r5, #2] +10030bf6: f7ff f83d bl 1002fc74 +10030bfa: 23ff movs r3, #255 ; 0xff +10030bfc: 7033 strb r3, [r6, #0] +10030bfe: 2302 movs r3, #2 +10030c00: 9300 str r3, [sp, #0] +10030c02: 4620 mov r0, r4 +10030c04: 4669 mov r1, sp +10030c06: aa03 add r2, sp, #12 +10030c08: f7fa fb04 bl 1002b214 +10030c0c: 7829 ldrb r1, [r5, #0] +10030c0e: 4620 mov r0, r4 +10030c10: f001 017f and.w r1, r1, #127 ; 0x7f +10030c14: f7ff fbce bl 100303b4 +10030c18: b007 add sp, #28 +10030c1a: bdf0 pop {r4, r5, r6, r7, pc} +10030c1c: 40080421 .word 0x40080421 + +10030c20 : +10030c20: b5f8 push {r3, r4, r5, r6, r7, lr} +10030c22: f641 025c movw r2, #6236 ; 0x185c +10030c26: f241 63c8 movw r3, #5832 ; 0x16c8 +10030c2a: 4604 mov r4, r0 +10030c2c: 58c3 ldr r3, [r0, r3] +10030c2e: 5880 ldr r0, [r0, r2] +10030c30: b128 cbz r0, 10030c3e +10030c32: 6902 ldr r2, [r0, #16] +10030c34: f012 0f10 tst.w r2, #16 +10030c38: bf08 it eq +10030c3a: 4620 moveq r0, r4 +10030c3c: e000 b.n 10030c40 +10030c3e: 4620 mov r0, r4 +10030c40: 4a41 ldr r2, [pc, #260] ; (10030d48 ) +10030c42: 4e42 ldr r6, [pc, #264] ; (10030d4c ) +10030c44: 7812 ldrb r2, [r2, #0] +10030c46: 7835 ldrb r5, [r6, #0] +10030c48: b2ed uxtb r5, r5 +10030c4a: 4295 cmp r5, r2 +10030c4c: d07b beq.n 10030d46 +10030c4e: 4940 ldr r1, [pc, #256] ; (10030d50 ) +10030c50: 3501 adds r5, #1 +10030c52: f44f 67cc mov.w r7, #1632 ; 0x660 +10030c56: f005 050f and.w r5, r5, #15 +10030c5a: 800f strh r7, [r1, #0] +10030c5c: 00ea lsls r2, r5, #3 +10030c5e: f8d0 7680 ldr.w r7, [r0, #1664] ; 0x680 +10030c62: f442 4200 orr.w r2, r2, #32768 ; 0x8000 +10030c66: f5a1 719d sub.w r1, r1, #314 ; 0x13a +10030c6a: 5a51 ldrh r1, [r2, r1] +10030c6c: f007 0703 and.w r7, r7, #3 +10030c70: 2f03 cmp r7, #3 +10030c72: f3c1 010b ubfx r1, r1, #0, #12 +10030c76: d105 bne.n 10030c84 +10030c78: 4b36 ldr r3, [pc, #216] ; (10030d54 ) +10030c7a: 681b ldr r3, [r3, #0] +10030c7c: 2b00 cmp r3, #0 +10030c7e: d05e beq.n 10030d3e +10030c80: 4798 blx r3 +10030c82: e05c b.n 10030d3e +10030c84: f240 3021 movw r0, #801 ; 0x321 +10030c88: 4281 cmp r1, r0 +10030c8a: d132 bne.n 10030cf2 +10030c8c: f893 0e8f ldrb.w r0, [r3, #3727] ; 0xe8f +10030c90: 2801 cmp r0, #1 +10030c92: d154 bne.n 10030d3e +10030c94: 2100 movs r1, #0 +10030c96: f102 4280 add.w r2, r2, #1073741824 ; 0x40000000 +10030c9a: f883 1e8f strb.w r1, [r3, #3727] ; 0xe8f +10030c9e: f502 2200 add.w r2, r2, #524288 ; 0x80000 +10030ca2: 7812 ldrb r2, [r2, #0] +10030ca4: 0612 lsls r2, r2, #24 +10030ca6: d502 bpl.n 10030cae +10030ca8: f883 1e91 strb.w r1, [r3, #3729] ; 0xe91 +10030cac: e016 b.n 10030cdc +10030cae: f8d3 2ea8 ldr.w r2, [r3, #3752] ; 0xea8 +10030cb2: f883 0e91 strb.w r0, [r3, #3729] ; 0xe91 +10030cb6: 1c57 adds r7, r2, #1 +10030cb8: d010 beq.n 10030cdc +10030cba: 3201 adds r2, #1 +10030cbc: 0550 lsls r0, r2, #21 +10030cbe: d402 bmi.n 10030cc6 +10030cc0: f8c3 2ea8 str.w r2, [r3, #3752] ; 0xea8 +10030cc4: e00a b.n 10030cdc +10030cc6: f8c3 1ea8 str.w r1, [r3, #3752] ; 0xea8 +10030cca: 4b23 ldr r3, [pc, #140] ; (10030d58 ) +10030ccc: 681b ldr r3, [r3, #0] +10030cce: 005a lsls r2, r3, #1 +10030cd0: d504 bpl.n 10030cdc +10030cd2: 4b22 ldr r3, [pc, #136] ; (10030d5c ) +10030cd4: 4822 ldr r0, [pc, #136] ; (10030d60 ) +10030cd6: 6819 ldr r1, [r3, #0] +10030cd8: 4b22 ldr r3, [pc, #136] ; (10030d64 ) +10030cda: 4798 blx r3 +10030cdc: 4620 mov r0, r4 +10030cde: f7ff fbb7 bl 10030450 +10030ce2: 4b21 ldr r3, [pc, #132] ; (10030d68 ) +10030ce4: 781b ldrb r3, [r3, #0] +10030ce6: 2bff cmp r3, #255 ; 0xff +10030ce8: d029 beq.n 10030d3e +10030cea: 4620 mov r0, r4 +10030cec: f7ff fe9e bl 10030a2c +10030cf0: e025 b.n 10030d3e +10030cf2: f240 1023 movw r0, #291 ; 0x123 +10030cf6: 4281 cmp r1, r0 +10030cf8: d11a bne.n 10030d30 +10030cfa: f893 1e8e ldrb.w r1, [r3, #3726] ; 0xe8e +10030cfe: 2901 cmp r1, #1 +10030d00: d11d bne.n 10030d3e +10030d02: 2100 movs r1, #0 +10030d04: f102 4280 add.w r2, r2, #1073741824 ; 0x40000000 +10030d08: f883 1e8e strb.w r1, [r3, #3726] ; 0xe8e +10030d0c: f502 2200 add.w r2, r2, #524288 ; 0x80000 +10030d10: 7812 ldrb r2, [r2, #0] +10030d12: f012 0f80 tst.w r2, #128 ; 0x80 +10030d16: bf14 ite ne +10030d18: 2200 movne r2, #0 +10030d1a: 2201 moveq r2, #1 +10030d1c: f883 2e90 strb.w r2, [r3, #3728] ; 0xe90 +10030d20: f893 3e99 ldrb.w r3, [r3, #3737] ; 0xe99 +10030d24: 2b03 cmp r3, #3 +10030d26: d00a beq.n 10030d3e +10030d28: 4620 mov r0, r4 +10030d2a: f7ff fb91 bl 10030450 +10030d2e: e006 b.n 10030d3e +10030d30: 4b09 ldr r3, [pc, #36] ; (10030d58 ) +10030d32: 681b ldr r3, [r3, #0] +10030d34: 005b lsls r3, r3, #1 +10030d36: d502 bpl.n 10030d3e +10030d38: 480c ldr r0, [pc, #48] ; (10030d6c ) +10030d3a: 4b0a ldr r3, [pc, #40] ; (10030d64 ) +10030d3c: 4798 blx r3 +10030d3e: 2d0f cmp r5, #15 +10030d40: bf08 it eq +10030d42: 2500 moveq r5, #0 +10030d44: 7035 strb r5, [r6, #0] +10030d46: bdf8 pop {r3, r4, r5, r6, r7, pc} +10030d48: 4008047e .word 0x4008047e +10030d4c: 4008047f .word 0x4008047f +10030d50: 40080140 .word 0x40080140 +10030d54: 1004ddf8 .word 0x1004ddf8 +10030d58: 10000314 .word 0x10000314 +10030d5c: 40080560 .word 0x40080560 +10030d60: 100419dd .word 0x100419dd +10030d64: 0000f39d .word 0x0000f39d +10030d68: 4008041a .word 0x4008041a +10030d6c: 100419ed .word 0x100419ed + +10030d70 : +10030d70: b570 push {r4, r5, r6, lr} +10030d72: f241 63c8 movw r3, #5832 ; 0x16c8 +10030d76: 58c4 ldr r4, [r0, r3] +10030d78: 4606 mov r6, r0 +10030d7a: f894 3e88 ldrb.w r3, [r4, #3720] ; 0xe88 +10030d7e: 2b01 cmp r3, #1 +10030d80: d104 bne.n 10030d8c +10030d82: f894 3e94 ldrb.w r3, [r4, #3732] ; 0xe94 +10030d86: b10b cbz r3, 10030d8c +10030d88: f7ff f954 bl 10030034 +10030d8c: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 +10030d90: 2b03 cmp r3, #3 +10030d92: d119 bne.n 10030dc8 +10030d94: 4d0f ldr r5, [pc, #60] ; (10030dd4 ) +10030d96: 2007 movs r0, #7 +10030d98: 68eb ldr r3, [r5, #12] +10030d9a: 4798 blx r3 +10030d9c: 692b ldr r3, [r5, #16] +10030d9e: 2007 movs r0, #7 +10030da0: 4798 blx r3 +10030da2: 68eb ldr r3, [r5, #12] +10030da4: 2006 movs r0, #6 +10030da6: 4798 blx r3 +10030da8: 692b ldr r3, [r5, #16] +10030daa: 2006 movs r0, #6 +10030dac: 4798 blx r3 +10030dae: 2300 movs r3, #0 +10030db0: f884 3eb0 strb.w r3, [r4, #3760] ; 0xeb0 +10030db4: f884 3eb1 strb.w r3, [r4, #3761] ; 0xeb1 +10030db8: 2301 movs r3, #1 +10030dba: f884 3e92 strb.w r3, [r4, #3730] ; 0xe92 +10030dbe: 4630 mov r0, r6 +10030dc0: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10030dc4: f7fe bcf2 b.w 1002f7ac +10030dc8: 4630 mov r0, r6 +10030dca: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10030dce: f7ff bcd3 b.w 10030778 +10030dd2: bf00 nop +10030dd4: 10000318 .word 0x10000318 + +10030dd8 : +10030dd8: b538 push {r3, r4, r5, lr} +10030dda: f241 63c8 movw r3, #5832 ; 0x16c8 +10030dde: 58c4 ldr r4, [r0, r3] +10030de0: 4605 mov r5, r0 +10030de2: f894 3e88 ldrb.w r3, [r4, #3720] ; 0xe88 +10030de6: 2b01 cmp r3, #1 +10030de8: d104 bne.n 10030df4 +10030dea: f894 3e94 ldrb.w r3, [r4, #3732] ; 0xe94 +10030dee: b10b cbz r3, 10030df4 +10030df0: f7ff f920 bl 10030034 +10030df4: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 +10030df8: 2b03 cmp r3, #3 +10030dfa: d004 beq.n 10030e06 +10030dfc: 4628 mov r0, r5 +10030dfe: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10030e02: f7ff bd17 b.w 10030834 +10030e06: bd38 pop {r3, r4, r5, pc} + +10030e08 : +10030e08: f241 63c8 movw r3, #5832 ; 0x16c8 +10030e0c: 58c3 ldr r3, [r0, r3] +10030e0e: f893 2e9c ldrb.w r2, [r3, #3740] ; 0xe9c +10030e12: 2a02 cmp r2, #2 +10030e14: d005 beq.n 10030e22 +10030e16: f893 3e99 ldrb.w r3, [r3, #3737] ; 0xe99 +10030e1a: 2b03 cmp r3, #3 +10030e1c: d001 beq.n 10030e22 +10030e1e: f7ff bd5f b.w 100308e0 +10030e22: 4770 bx lr + +10030e24 : +10030e24: b510 push {r4, lr} +10030e26: f241 63c8 movw r3, #5832 ; 0x16c8 +10030e2a: 2100 movs r1, #0 +10030e2c: 58c4 ldr r4, [r0, r3] +10030e2e: f00a fb3e bl 1003b4ae +10030e32: 2801 cmp r0, #1 +10030e34: d10b bne.n 10030e4e +10030e36: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 +10030e3a: b143 cbz r3, 10030e4e +10030e3c: 2b03 cmp r3, #3 +10030e3e: d006 beq.n 10030e4e +10030e40: 4c03 ldr r4, [pc, #12] ; (10030e50 ) +10030e42: 2006 movs r0, #6 +10030e44: 6923 ldr r3, [r4, #16] +10030e46: 4798 blx r3 +10030e48: 68e3 ldr r3, [r4, #12] +10030e4a: 2006 movs r0, #6 +10030e4c: 4798 blx r3 +10030e4e: bd10 pop {r4, pc} +10030e50: 10000318 .word 0x10000318 + +10030e54 : +10030e54: b570 push {r4, r5, r6, lr} +10030e56: f241 63c8 movw r3, #5832 ; 0x16c8 +10030e5a: 2100 movs r1, #0 +10030e5c: 4605 mov r5, r0 +10030e5e: 58c4 ldr r4, [r0, r3] +10030e60: f00a fb25 bl 1003b4ae +10030e64: 2801 cmp r0, #1 +10030e66: d11c bne.n 10030ea2 +10030e68: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 +10030e6c: b1cb cbz r3, 10030ea2 +10030e6e: 2b03 cmp r3, #3 +10030e70: d017 beq.n 10030ea2 +10030e72: 4e0c ldr r6, [pc, #48] ; (10030ea4 ) +10030e74: 2006 movs r0, #6 +10030e76: 6933 ldr r3, [r6, #16] +10030e78: 4798 blx r3 +10030e7a: 68f3 ldr r3, [r6, #12] +10030e7c: 2006 movs r0, #6 +10030e7e: 4798 blx r3 +10030e80: 2300 movs r3, #0 +10030e82: f884 3e8a strb.w r3, [r4, #3722] ; 0xe8a +10030e86: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d +10030e8a: f023 0202 bic.w r2, r3, #2 +10030e8e: f013 0f05 tst.w r3, #5 +10030e92: f884 2e9d strb.w r2, [r4, #3741] ; 0xe9d +10030e96: d104 bne.n 10030ea2 +10030e98: 4628 mov r0, r5 +10030e9a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10030e9e: f7ff bad7 b.w 10030450 +10030ea2: bd70 pop {r4, r5, r6, pc} +10030ea4: 10000318 .word 0x10000318 + +10030ea8 : +10030ea8: b538 push {r3, r4, r5, lr} +10030eaa: 2100 movs r1, #0 +10030eac: f241 63c8 movw r3, #5832 ; 0x16c8 +10030eb0: 4604 mov r4, r0 +10030eb2: 58c5 ldr r5, [r0, r3] +10030eb4: f00a fafb bl 1003b4ae +10030eb8: 2801 cmp r0, #1 +10030eba: d113 bne.n 10030ee4 +10030ebc: f895 3e99 ldrb.w r3, [r5, #3737] ; 0xe99 +10030ec0: b183 cbz r3, 10030ee4 +10030ec2: 2b03 cmp r3, #3 +10030ec4: d00e beq.n 10030ee4 +10030ec6: f895 3e97 ldrb.w r3, [r5, #3735] ; 0xe97 +10030eca: 4620 mov r0, r4 +10030ecc: f003 030f and.w r3, r3, #15 +10030ed0: 2b02 cmp r3, #2 +10030ed2: d003 beq.n 10030edc +10030ed4: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10030ed8: f7fe bdbe b.w 1002fa58 +10030edc: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10030ee0: f7ff bbd6 b.w 10030690 +10030ee4: bd38 pop {r3, r4, r5, pc} + +10030ee6 : +10030ee6: b538 push {r3, r4, r5, lr} +10030ee8: 2100 movs r1, #0 +10030eea: f241 63c8 movw r3, #5832 ; 0x16c8 +10030eee: 4605 mov r5, r0 +10030ef0: 58c4 ldr r4, [r0, r3] +10030ef2: f00a fadc bl 1003b4ae +10030ef6: 2801 cmp r0, #1 +10030ef8: d112 bne.n 10030f20 +10030efa: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 +10030efe: b17b cbz r3, 10030f20 +10030f00: 2b03 cmp r3, #3 +10030f02: d00d beq.n 10030f20 +10030f04: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d +10030f08: f023 0201 bic.w r2, r3, #1 +10030f0c: f013 0f06 tst.w r3, #6 +10030f10: f884 2e9d strb.w r2, [r4, #3741] ; 0xe9d +10030f14: d104 bne.n 10030f20 +10030f16: 4628 mov r0, r5 +10030f18: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10030f1c: f7ff ba98 b.w 10030450 +10030f20: bd38 pop {r3, r4, r5, pc} + +10030f22 : +10030f22: f241 63c8 movw r3, #5832 ; 0x16c8 +10030f26: 58c3 ldr r3, [r0, r3] +10030f28: f893 3e99 ldrb.w r3, [r3, #3737] ; 0xe99 +10030f2c: b10b cbz r3, 10030f32 +10030f2e: f7ff bd7d b.w 10030a2c +10030f32: 4770 bx lr + +10030f34 : +10030f34: f7ff be74 b.w 10030c20 + +10030f38 : +10030f38: b5f8 push {r3, r4, r5, r6, r7, lr} +10030f3a: f241 63c8 movw r3, #5832 ; 0x16c8 +10030f3e: 58c4 ldr r4, [r0, r3] +10030f40: 780b ldrb r3, [r1, #0] +10030f42: 4605 mov r5, r0 +10030f44: f3c3 0306 ubfx r3, r3, #0, #7 +10030f48: f884 3e99 strb.w r3, [r4, #3737] ; 0xe99 +10030f4c: b2da uxtb r2, r3 +10030f4e: 780b ldrb r3, [r1, #0] +10030f50: 2a03 cmp r2, #3 +10030f52: f3c3 13c0 ubfx r3, r3, #7, #1 +10030f56: f884 3e9a strb.w r3, [r4, #3738] ; 0xe9a +10030f5a: 7848 ldrb r0, [r1, #1] +10030f5c: f894 3e97 ldrb.w r3, [r4, #3735] ; 0xe97 +10030f60: ea4f 1010 mov.w r0, r0, lsr #4 +10030f64: f360 0303 bfi r3, r0, #0, #4 +10030f68: f884 3e97 strb.w r3, [r4, #3735] ; 0xe97 +10030f6c: 78cb ldrb r3, [r1, #3] +10030f6e: f3c3 0300 ubfx r3, r3, #0, #1 +10030f72: f884 3e89 strb.w r3, [r4, #3721] ; 0xe89 +10030f76: 7848 ldrb r0, [r1, #1] +10030f78: f894 3e97 ldrb.w r3, [r4, #3735] ; 0xe97 +10030f7c: f360 1307 bfi r3, r0, #4, #4 +10030f80: f884 3e97 strb.w r3, [r4, #3735] ; 0xe97 +10030f84: 788b ldrb r3, [r1, #2] +10030f86: f884 3e98 strb.w r3, [r4, #3736] ; 0xe98 +10030f8a: d117 bne.n 10030fbc +10030f8c: 79cb ldrb r3, [r1, #7] +10030f8e: f884 3eac strb.w r3, [r4, #3756] ; 0xeac +10030f92: 7a0a ldrb r2, [r1, #8] +10030f94: 79cb ldrb r3, [r1, #7] +10030f96: 429a cmp r2, r3 +10030f98: bf38 it cc +10030f9a: 4613 movcc r3, r2 +10030f9c: f884 3ead strb.w r3, [r4, #3757] ; 0xead +10030fa0: 7a4a ldrb r2, [r1, #9] +10030fa2: 79cb ldrb r3, [r1, #7] +10030fa4: 429a cmp r2, r3 +10030fa6: bf38 it cc +10030fa8: 4613 movcc r3, r2 +10030faa: f884 3eae strb.w r3, [r4, #3758] ; 0xeae +10030fae: 7a8a ldrb r2, [r1, #10] +10030fb0: 79cb ldrb r3, [r1, #7] +10030fb2: 429a cmp r2, r3 +10030fb4: bf38 it cc +10030fb6: 4613 movcc r3, r2 +10030fb8: f884 3eaf strb.w r3, [r4, #3759] ; 0xeaf +10030fbc: 790b ldrb r3, [r1, #4] +10030fbe: 4628 mov r0, r5 +10030fc0: f884 3e9b strb.w r3, [r4, #3739] ; 0xe9b +10030fc4: f7ff fdf0 bl 10030ba8 +10030fc8: 4628 mov r0, r5 +10030fca: f7fe fbf7 bl 1002f7bc +10030fce: f894 2e99 ldrb.w r2, [r4, #3737] ; 0xe99 +10030fd2: 4b1f ldr r3, [pc, #124] ; (10031050 ) +10030fd4: 1e51 subs r1, r2, #1 +10030fd6: 2600 movs r6, #0 +10030fd8: 2901 cmp r1, #1 +10030fda: 681f ldr r7, [r3, #0] +10030fdc: 4628 mov r0, r5 +10030fde: 601e str r6, [r3, #0] +10030fe0: 461c mov r4, r3 +10030fe2: d809 bhi.n 10030ff8 +10030fe4: 4631 mov r1, r6 +10030fe6: 2206 movs r2, #6 +10030fe8: 2304 movs r3, #4 +10030fea: f7fe fc21 bl 1002f830 +10030fee: 4628 mov r0, r5 +10030ff0: 4631 mov r1, r6 +10030ff2: 2207 movs r2, #7 +10030ff4: 230f movs r3, #15 +10030ff6: e00a b.n 1003100e +10030ff8: 2a03 cmp r2, #3 +10030ffa: d10b bne.n 10031014 +10030ffc: 4631 mov r1, r6 +10030ffe: 2206 movs r2, #6 +10031000: 4633 mov r3, r6 +10031002: f7fe fc15 bl 1002f830 +10031006: 4628 mov r0, r5 +10031008: 4631 mov r1, r6 +1003100a: 2207 movs r2, #7 +1003100c: 4633 mov r3, r6 +1003100e: f7fe fc0f bl 1002f830 +10031012: e006 b.n 10031022 +10031014: 2106 movs r1, #6 +10031016: f7fe fc31 bl 1002f87c +1003101a: 4628 mov r0, r5 +1003101c: 2107 movs r1, #7 +1003101e: f7fe fc2d bl 1002f87c +10031022: 4b0c ldr r3, [pc, #48] ; (10031054 ) +10031024: 22ff movs r2, #255 ; 0xff +10031026: 6027 str r7, [r4, #0] +10031028: 4628 mov r0, r5 +1003102a: 701a strb r2, [r3, #0] +1003102c: f7ff fad3 bl 100305d6 +10031030: 6823 ldr r3, [r4, #0] +10031032: f023 0308 bic.w r3, r3, #8 +10031036: 6023 str r3, [r4, #0] +10031038: 4b07 ldr r3, [pc, #28] ; (10031058 ) +1003103a: 681a ldr r2, [r3, #0] +1003103c: f022 0208 bic.w r2, r2, #8 +10031040: 601a str r2, [r3, #0] +10031042: 4b06 ldr r3, [pc, #24] ; (1003105c ) +10031044: 681a ldr r2, [r3, #0] +10031046: f022 0208 bic.w r2, r2, #8 +1003104a: 601a str r2, [r3, #0] +1003104c: bdf8 pop {r3, r4, r5, r6, r7, pc} +1003104e: bf00 nop +10031050: 10000314 .word 0x10000314 +10031054: 400804c8 .word 0x400804c8 +10031058: 10000310 .word 0x10000310 +1003105c: 1000030c .word 0x1000030c + +10031060 : +10031060: b537 push {r0, r1, r2, r4, r5, lr} +10031062: 2300 movs r3, #0 +10031064: 9301 str r3, [sp, #4] +10031066: f241 63c8 movw r3, #5832 ; 0x16c8 +1003106a: 58c3 ldr r3, [r0, r3] +1003106c: 4604 mov r4, r0 +1003106e: f893 2e99 ldrb.w r2, [r3, #3737] ; 0xe99 +10031072: 6885 ldr r5, [r0, #8] +10031074: b142 cbz r2, 10031088 +10031076: f893 1e9b ldrb.w r1, [r3, #3739] ; 0xe9b +1003107a: f893 3e9c ldrb.w r3, [r3, #3740] ; 0xe9c +1003107e: 428b cmp r3, r1 +10031080: d002 beq.n 10031088 +10031082: 2201 movs r2, #1 +10031084: f7ff f888 bl 10030198 +10031088: 3520 adds r5, #32 +1003108a: a901 add r1, sp, #4 +1003108c: 4628 mov r0, r5 +1003108e: f7e6 fa67 bl 10017560 +10031092: 4620 mov r0, r4 +10031094: f7ff f848 bl 10030128 +10031098: 4628 mov r0, r5 +1003109a: a901 add r1, sp, #4 +1003109c: f7e6 fa6a bl 10017574 +100310a0: b003 add sp, #12 +100310a2: bd30 pop {r4, r5, pc} + +100310a4 : +100310a4: f241 63c8 movw r3, #5832 ; 0x16c8 +100310a8: 58c3 ldr r3, [r0, r3] +100310aa: b082 sub sp, #8 +100310ac: f8d3 1ea8 ldr.w r1, [r3, #3752] ; 0xea8 +100310b0: 2200 movs r2, #0 +100310b2: 9201 str r2, [sp, #4] +100310b4: 9101 str r1, [sp, #4] +100310b6: 9801 ldr r0, [sp, #4] +100310b8: f8c3 2ea8 str.w r2, [r3, #3752] ; 0xea8 +100310bc: b002 add sp, #8 +100310be: 4770 bx lr + +100310c0 : +100310c0: b530 push {r4, r5, lr} +100310c2: f241 63c8 movw r3, #5832 ; 0x16c8 +100310c6: b087 sub sp, #28 +100310c8: 58c4 ldr r4, [r0, r3] +100310ca: 2100 movs r1, #0 +100310cc: 220c movs r2, #12 +100310ce: 4605 mov r5, r0 +100310d0: 4668 mov r0, sp +100310d2: f00c fda7 bl 1003dc24 +100310d6: a803 add r0, sp, #12 +100310d8: 2100 movs r1, #0 +100310da: 220c movs r2, #12 +100310dc: f00c fda2 bl 1003dc24 +100310e0: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 +100310e4: b183 cbz r3, 10031108 +100310e6: f894 3e93 ldrb.w r3, [r4, #3731] ; 0xe93 +100310ea: b16b cbz r3, 10031108 +100310ec: 4b0f ldr r3, [pc, #60] ; (1003112c ) +100310ee: 681b ldr r3, [r3, #0] +100310f0: 079b lsls r3, r3, #30 +100310f2: d509 bpl.n 10031108 +100310f4: f44f 3300 mov.w r3, #131072 ; 0x20000 +100310f8: 9303 str r3, [sp, #12] +100310fa: 4628 mov r0, r5 +100310fc: 2301 movs r3, #1 +100310fe: 4669 mov r1, sp +10031100: aa03 add r2, sp, #12 +10031102: 9305 str r3, [sp, #20] +10031104: f7fa f886 bl 1002b214 +10031108: 4b09 ldr r3, [pc, #36] ; (10031130 ) +1003110a: 781b ldrb r3, [r3, #0] +1003110c: f003 0303 and.w r3, r3, #3 +10031110: 2b03 cmp r3, #3 +10031112: d108 bne.n 10031126 +10031114: f894 3e55 ldrb.w r3, [r4, #3669] ; 0xe55 +10031118: 2b01 cmp r3, #1 +1003111a: d104 bne.n 10031126 +1003111c: 4b05 ldr r3, [pc, #20] ; (10031134 ) +1003111e: 781a ldrb r2, [r3, #0] +10031120: f042 0280 orr.w r2, r2, #128 ; 0x80 +10031124: 701a strb r2, [r3, #0] +10031126: b007 add sp, #28 +10031128: bd30 pop {r4, r5, pc} +1003112a: bf00 nop +1003112c: 40080080 .word 0x40080080 +10031130: 40080102 .word 0x40080102 +10031134: 40080521 .word 0x40080521 + +10031138 : +10031138: f241 63c8 movw r3, #5832 ; 0x16c8 +1003113c: 58c3 ldr r3, [r0, r3] +1003113e: 780a ldrb r2, [r1, #0] +10031140: f883 2e55 strb.w r2, [r3, #3669] ; 0xe55 +10031144: 4770 bx lr + ... + +10031148 : +10031148: f241 63c8 movw r3, #5832 ; 0x16c8 +1003114c: b530 push {r4, r5, lr} +1003114e: 58c5 ldr r5, [r0, r3] +10031150: 4b0e ldr r3, [pc, #56] ; (1003118c ) +10031152: b087 sub sp, #28 +10031154: 681a ldr r2, [r3, #0] +10031156: 4604 mov r4, r0 +10031158: f442 6200 orr.w r2, r2, #2048 ; 0x800 +1003115c: 601a str r2, [r3, #0] +1003115e: 4b0c ldr r3, [pc, #48] ; (10031190 ) +10031160: aa03 add r2, sp, #12 +10031162: 9300 str r3, [sp, #0] +10031164: 4669 mov r1, sp +10031166: 2300 movs r3, #0 +10031168: 9301 str r3, [sp, #4] +1003116a: 9302 str r3, [sp, #8] +1003116c: 9303 str r3, [sp, #12] +1003116e: 9304 str r3, [sp, #16] +10031170: 9305 str r3, [sp, #20] +10031172: f7fa f84f bl 1002b214 +10031176: 4620 mov r0, r4 +10031178: f7fe fd44 bl 1002fc04 +1003117c: 2301 movs r3, #1 +1003117e: f885 3e55 strb.w r3, [r5, #3669] ; 0xe55 +10031182: 4b04 ldr r3, [pc, #16] ; (10031194 ) +10031184: 2228 movs r2, #40 ; 0x28 +10031186: 701a strb r2, [r3, #0] +10031188: b007 add sp, #28 +1003118a: bd30 pop {r4, r5, pc} +1003118c: 40080100 .word 0x40080100 +10031190: 20060000 .word 0x20060000 +10031194: 4008055c .word 0x4008055c + +10031198 : +10031198: 4770 bx lr + ... + +1003119c : +1003119c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100311a0: f241 63c8 movw r3, #5832 ; 0x16c8 +100311a4: 58c6 ldr r6, [r0, r3] +100311a6: f8df 80fc ldr.w r8, [pc, #252] ; 100312a4 +100311aa: 6883 ldr r3, [r0, #8] +100311ac: b085 sub sp, #20 +100311ae: ac04 add r4, sp, #16 +100311b0: f8d6 1e40 ldr.w r1, [r6, #3648] ; 0xe40 +100311b4: f8d8 2000 ldr.w r2, [r8] +100311b8: f04f 0a00 mov.w sl, #0 +100311bc: f844 ad04 str.w sl, [r4, #-4]! +100311c0: f103 0920 add.w r9, r3, #32 +100311c4: 430a orrs r2, r1 +100311c6: 4605 mov r5, r0 +100311c8: 4621 mov r1, r4 +100311ca: 4648 mov r0, r9 +100311cc: f8c8 2000 str.w r2, [r8] +100311d0: f7e6 f9c6 bl 10017560 +100311d4: f8c6 ae40 str.w sl, [r6, #3648] ; 0xe40 +100311d8: 4648 mov r0, r9 +100311da: 4621 mov r1, r4 +100311dc: f506 7700 add.w r7, r6, #512 ; 0x200 +100311e0: f7e6 f9c8 bl 10017574 +100311e4: f8d8 3000 ldr.w r3, [r8] +100311e8: 4c2e ldr r4, [pc, #184] ; (100312a4 ) +100311ea: 2b00 cmp r3, #0 +100311ec: d056 beq.n 1003129c +100311ee: 4628 mov r0, r5 +100311f0: f00a f941 bl 1003b476 +100311f4: fa5f fb80 uxtb.w fp, r0 +100311f8: f1bb 0f00 cmp.w fp, #0 +100311fc: d103 bne.n 10031206 +100311fe: 6823 ldr r3, [r4, #0] +10031200: f023 0309 bic.w r3, r3, #9 +10031204: 6023 str r3, [r4, #0] +10031206: f506 745b add.w r4, r6, #876 ; 0x36c +1003120a: f04f 0900 mov.w r9, #0 +1003120e: fa5f fa89 uxtb.w sl, r9 +10031212: 45da cmp sl, fp +10031214: d2e6 bcs.n 100311e4 +10031216: 4628 mov r0, r5 +10031218: 4651 mov r1, sl +1003121a: f00a f948 bl 1003b4ae +1003121e: 2800 cmp r0, #0 +10031220: d038 beq.n 10031294 +10031222: f894 3038 ldrb.w r3, [r4, #56] ; 0x38 +10031226: 2b01 cmp r3, #1 +10031228: d034 beq.n 10031294 +1003122a: f8d8 3000 ldr.w r3, [r8] +1003122e: f884 a03b strb.w sl, [r4, #59] ; 0x3b +10031232: 0719 lsls r1, r3, #28 +10031234: d507 bpl.n 10031246 +10031236: 4a1b ldr r2, [pc, #108] ; (100312a4 ) +10031238: f023 0308 bic.w r3, r3, #8 +1003123c: 4638 mov r0, r7 +1003123e: 4621 mov r1, r4 +10031240: 6013 str r3, [r2, #0] +10031242: f007 f95d bl 10038500 +10031246: f8d8 3000 ldr.w r3, [r8] +1003124a: 07da lsls r2, r3, #31 +1003124c: d522 bpl.n 10031294 +1003124e: 4a15 ldr r2, [pc, #84] ; (100312a4 ) +10031250: f023 0301 bic.w r3, r3, #1 +10031254: 6013 str r3, [r2, #0] +10031256: 4628 mov r0, r5 +10031258: f894 103b ldrb.w r1, [r4, #59] ; 0x3b +1003125c: 2203 movs r2, #3 +1003125e: f00a f8d7 bl 1003b410 +10031262: 0603 lsls r3, r0, #24 +10031264: d41a bmi.n 1003129c +10031266: 2200 movs r2, #0 +10031268: 4638 mov r0, r7 +1003126a: 4621 mov r1, r4 +1003126c: f00a f92c bl 1003b4c8 +10031270: f505 53c3 add.w r3, r5, #6240 ; 0x1860 +10031274: 7e1a ldrb r2, [r3, #24] +10031276: 2aff cmp r2, #255 ; 0xff +10031278: d104 bne.n 10031284 +1003127a: 4638 mov r0, r7 +1003127c: 4621 mov r1, r4 +1003127e: f007 f9e1 bl 10038644 +10031282: e007 b.n 10031294 +10031284: f894 3036 ldrb.w r3, [r4, #54] ; 0x36 +10031288: 4638 mov r0, r7 +1003128a: 9300 str r3, [sp, #0] +1003128c: 4621 mov r1, r4 +1003128e: 2300 movs r3, #0 +10031290: f006 ffe0 bl 10038254 +10031294: f109 0901 add.w r9, r9, #1 +10031298: 3458 adds r4, #88 ; 0x58 +1003129a: e7b8 b.n 1003120e +1003129c: b005 add sp, #20 +1003129e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +100312a2: bf00 nop +100312a4: 1004ddfc .word 0x1004ddfc + +100312a8 : +100312a8: f241 63c8 movw r3, #5832 ; 0x16c8 +100312ac: b507 push {r0, r1, r2, lr} +100312ae: 58c3 ldr r3, [r0, r3] +100312b0: b161 cbz r1, 100312cc +100312b2: 2901 cmp r1, #1 +100312b4: d115 bne.n 100312e2 +100312b6: f8d3 21a0 ldr.w r2, [r3, #416] ; 0x1a0 +100312ba: 2100 movs r1, #0 +100312bc: f422 6240 bic.w r2, r2, #3072 ; 0xc00 +100312c0: f442 6280 orr.w r2, r2, #1024 ; 0x400 +100312c4: f8c3 21a0 str.w r2, [r3, #416] ; 0x1a0 +100312c8: 9200 str r2, [sp, #0] +100312ca: e006 b.n 100312da +100312cc: f8d3 21a0 ldr.w r2, [r3, #416] ; 0x1a0 +100312d0: f442 6240 orr.w r2, r2, #3072 ; 0xc00 +100312d4: f8c3 21a0 str.w r2, [r3, #416] ; 0x1a0 +100312d8: 9200 str r2, [sp, #0] +100312da: 2218 movs r2, #24 +100312dc: 4b02 ldr r3, [pc, #8] ; (100312e8 ) +100312de: f7fd fcfd bl 1002ecdc +100312e2: b003 add sp, #12 +100312e4: f85d fb04 ldr.w pc, [sp], #4 +100312e8: 000fffff .word 0x000fffff + +100312ec : +100312ec: f241 63c8 movw r3, #5832 ; 0x16c8 +100312f0: 58c2 ldr r2, [r0, r3] +100312f2: 2101 movs r1, #1 +100312f4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +100312f8: f882 103f strb.w r1, [r2, #63] ; 0x3f +100312fc: 58c6 ldr r6, [r0, r3] +100312fe: 4604 mov r4, r0 +10031300: f04f 0800 mov.w r8, #0 +10031304: f896 303f ldrb.w r3, [r6, #63] ; 0x3f +10031308: fa5f f588 uxtb.w r5, r8 +1003130c: 42ab cmp r3, r5 +1003130e: d93f bls.n 10031390 +10031310: 231c movs r3, #28 +10031312: fb03 6305 mla r3, r3, r5, r6 +10031316: f503 77c2 add.w r7, r3, #388 ; 0x184 +1003131a: f503 73c0 add.w r3, r3, #384 ; 0x180 +1003131e: b925 cbnz r5, 1003132a +10031320: 4620 mov r0, r4 +10031322: 6859 ldr r1, [r3, #4] +10031324: 2210 movs r2, #16 +10031326: f7fd fc49 bl 1002ebbc +1003132a: 68b9 ldr r1, [r7, #8] +1003132c: f44f 1280 mov.w r2, #1048576 ; 0x100000 +10031330: 2301 movs r3, #1 +10031332: 4620 mov r0, r4 +10031334: f7fd fc57 bl 1002ebe6 +10031338: 2001 movs r0, #1 +1003133a: f7e6 f9b3 bl 100176a4 +1003133e: 6879 ldr r1, [r7, #4] +10031340: 2210 movs r2, #16 +10031342: 2301 movs r3, #1 +10031344: 4620 mov r0, r4 +10031346: f7fd fc4e bl 1002ebe6 +1003134a: 2001 movs r0, #1 +1003134c: f7e6 f9aa bl 100176a4 +10031350: 6939 ldr r1, [r7, #16] +10031352: f44f 6280 mov.w r2, #1024 ; 0x400 +10031356: 2300 movs r3, #0 +10031358: 4620 mov r0, r4 +1003135a: f7fd fc44 bl 1002ebe6 +1003135e: 2001 movs r0, #1 +10031360: f7e6 f9a0 bl 100176a4 +10031364: 4620 mov r0, r4 +10031366: 6939 ldr r1, [r7, #16] +10031368: f44f 6200 mov.w r2, #2048 ; 0x800 +1003136c: 2300 movs r3, #0 +1003136e: f7fd fc3a bl 1002ebe6 +10031372: 2001 movs r0, #1 +10031374: f7e6 f996 bl 100176a4 +10031378: b93d cbnz r5, 1003138a +1003137a: f506 7000 add.w r0, r6, #512 ; 0x200 +1003137e: 4629 mov r1, r5 +10031380: 462a mov r2, r5 +10031382: f008 fe9a bl 1003a0ba +10031386: 2801 cmp r0, #1 +10031388: d009 beq.n 1003139e +1003138a: f108 0801 add.w r8, r8, #1 +1003138e: e7b9 b.n 10031304 +10031390: f506 7000 add.w r0, r6, #512 ; 0x200 +10031394: f008 fea0 bl 1003a0d8 +10031398: 2001 movs r0, #1 +1003139a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1003139e: 4628 mov r0, r5 +100313a0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +100313a4 : +100313a4: f890 3c38 ldrb.w r3, [r0, #3128] ; 0xc38 +100313a8: b133 cbz r3, 100313b8 +100313aa: 2300 movs r3, #0 +100313ac: f8c0 3c3c str.w r3, [r0, #3132] ; 0xc3c +100313b0: f8c0 3c40 str.w r3, [r0, #3136] ; 0xc40 +100313b4: f880 3c38 strb.w r3, [r0, #3128] ; 0xc38 +100313b8: f8d0 3c3c ldr.w r3, [r0, #3132] ; 0xc3c +100313bc: f8d0 2c40 ldr.w r2, [r0, #3136] ; 0xc40 +100313c0: 3301 adds r3, #1 +100313c2: f8c0 3c3c str.w r3, [r0, #3132] ; 0xc3c +100313c6: f891 106d ldrb.w r1, [r1, #109] ; 0x6d +100313ca: 440a add r2, r1 +100313cc: fbb2 f3f3 udiv r3, r2, r3 +100313d0: f8c0 2c40 str.w r2, [r0, #3136] ; 0xc40 +100313d4: f880 3c39 strb.w r3, [r0, #3129] ; 0xc39 +100313d8: 4770 bx lr + +100313da : +100313da: b538 push {r3, r4, r5, lr} +100313dc: 2254 movs r2, #84 ; 0x54 +100313de: 4604 mov r4, r0 +100313e0: 460d mov r5, r1 +100313e2: 301c adds r0, #28 +100313e4: 2100 movs r1, #0 +100313e6: f7e6 f833 bl 10017450 +100313ea: 682b ldr r3, [r5, #0] +100313ec: f3c3 020d ubfx r2, r3, #0, #14 +100313f0: f3c3 3380 ubfx r3, r3, #14, #1 +100313f4: f884 3032 strb.w r3, [r4, #50] ; 0x32 +100313f8: 682b ldr r3, [r5, #0] +100313fa: 83a2 strh r2, [r4, #28] +100313fc: f3c3 33c0 ubfx r3, r3, #15, #1 +10031400: f884 3033 strb.w r3, [r4, #51] ; 0x33 +10031404: 886b ldrh r3, [r5, #2] +10031406: f003 030f and.w r3, r3, #15 +1003140a: 00db lsls r3, r3, #3 +1003140c: 77e3 strb r3, [r4, #31] +1003140e: 682b ldr r3, [r5, #0] +10031410: f3c3 5302 ubfx r3, r3, #20, #3 +10031414: f884 302f strb.w r3, [r4, #47] ; 0x2f +10031418: 682b ldr r3, [r5, #0] +1003141a: f3c3 53c0 ubfx r3, r3, #23, #1 +1003141e: f884 3024 strb.w r3, [r4, #36] ; 0x24 +10031422: 78eb ldrb r3, [r5, #3] +10031424: f003 0303 and.w r3, r3, #3 +10031428: f884 3020 strb.w r3, [r4, #32] +1003142c: 682b ldr r3, [r5, #0] +1003142e: f3c3 6380 ubfx r3, r3, #26, #1 +10031432: 77a3 strb r3, [r4, #30] +10031434: 682b ldr r3, [r5, #0] +10031436: f083 6300 eor.w r3, r3, #134217728 ; 0x8000000 +1003143a: f3c3 63c0 ubfx r3, r3, #27, #1 +1003143e: f884 302e strb.w r3, [r4, #46] ; 0x2e +10031442: 686b ldr r3, [r5, #4] +10031444: f3c3 2303 ubfx r3, r3, #8, #4 +10031448: f884 3025 strb.w r3, [r4, #37] ; 0x25 +1003144c: 686b ldr r3, [r5, #4] +1003144e: f3c3 6380 ubfx r3, r3, #26, #1 +10031452: f884 3027 strb.w r3, [r4, #39] ; 0x27 +10031456: 686b ldr r3, [r5, #4] +10031458: f3c3 63c0 ubfx r3, r3, #27, #1 +1003145c: f884 302b strb.w r3, [r4, #43] ; 0x2b +10031460: 68ab ldr r3, [r5, #8] +10031462: f3c3 020b ubfx r2, r3, #0, #12 +10031466: f3c3 3303 ubfx r3, r3, #12, #4 +1003146a: f884 302a strb.w r3, [r4, #42] ; 0x2a +1003146e: 68ab ldr r3, [r5, #8] +10031470: 8522 strh r2, [r4, #40] ; 0x28 +10031472: f013 5380 ands.w r3, r3, #268435456 ; 0x10000000 +10031476: bf18 it ne +10031478: 2304 movne r3, #4 +1003147a: f884 305c strb.w r3, [r4, #92] ; 0x5c +1003147e: 68eb ldr r3, [r5, #12] +10031480: f003 037f and.w r3, r3, #127 ; 0x7f +10031484: f884 3068 strb.w r3, [r4, #104] ; 0x68 +10031488: bd38 pop {r3, r4, r5, pc} + +1003148a : +1003148a: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +1003148e: 6905 ldr r5, [r0, #16] +10031490: f241 63c8 movw r3, #5832 ; 0x16c8 +10031494: 58ef ldr r7, [r5, r3] +10031496: 6f84 ldr r4, [r0, #120] ; 0x78 +10031498: 2300 movs r3, #0 +1003149a: f88d 3002 strb.w r3, [sp, #2] +1003149e: f88d 3003 strb.w r3, [sp, #3] +100314a2: f88d 3004 strb.w r3, [sp, #4] +100314a6: 8822 ldrh r2, [r4, #0] +100314a8: 4689 mov r9, r1 +100314aa: f002 010c and.w r1, r2, #12 +100314ae: 2904 cmp r1, #4 +100314b0: 4606 mov r6, r0 +100314b2: f100 0869 add.w r8, r0, #105 ; 0x69 +100314b6: d002 beq.n 100314be +100314b8: 8e41 ldrh r1, [r0, #50] ; 0x32 +100314ba: 2900 cmp r1, #0 +100314bc: d06b beq.n 10031596 +100314be: 4618 mov r0, r3 +100314c0: b2c3 uxtb r3, r0 +100314c2: f88d 3002 strb.w r3, [sp, #2] +100314c6: b1cb cbz r3, 100314fc +100314c8: 8823 ldrh r3, [r4, #0] +100314ca: f413 7f80 tst.w r3, #256 ; 0x100 +100314ce: bf0c ite eq +100314d0: 2200 moveq r2, #0 +100314d2: 2202 movne r2, #2 +100314d4: f3c3 2340 ubfx r3, r3, #9, #1 +100314d8: 4313 orrs r3, r2 +100314da: 2b01 cmp r3, #1 +100314dc: d003 beq.n 100314e6 +100314de: d302 bcc.n 100314e6 +100314e0: f104 0010 add.w r0, r4, #16 +100314e4: e000 b.n 100314e8 +100314e6: 1d20 adds r0, r4, #4 +100314e8: f505 51a4 add.w r1, r5, #5248 ; 0x1480 +100314ec: 3119 adds r1, #25 +100314ee: 2206 movs r2, #6 +100314f0: f7e5 ffa6 bl 10017440 +100314f4: 3000 adds r0, #0 +100314f6: bf18 it ne +100314f8: 2001 movne r0, #1 +100314fa: e000 b.n 100314fe +100314fc: 4618 mov r0, r3 +100314fe: f89d 3002 ldrb.w r3, [sp, #2] +10031502: f88d 0003 strb.w r0, [sp, #3] +10031506: b133 cbz r3, 10031516 +10031508: 8823 ldrh r3, [r4, #0] +1003150a: f003 03fc and.w r3, r3, #252 ; 0xfc +1003150e: f1b3 0280 subs.w r2, r3, #128 ; 0x80 +10031512: 4253 negs r3, r2 +10031514: 4153 adcs r3, r2 +10031516: b2db uxtb r3, r3 +10031518: f88d 3004 strb.w r3, [sp, #4] +1003151c: b123 cbz r3, 10031528 +1003151e: 6929 ldr r1, [r5, #16] +10031520: f011 0108 ands.w r1, r1, #8 +10031524: d154 bne.n 100315d0 +10031526: e001 b.n 1003152c +10031528: f104 010a add.w r1, r4, #10 +1003152c: 23ff movs r3, #255 ; 0xff +1003152e: f505 6046 add.w r0, r5, #3168 ; 0xc60 +10031532: f88d 3001 strb.w r3, [sp, #1] +10031536: f7f6 febd bl 100282b4 +1003153a: 4604 mov r4, r0 +1003153c: b118 cbz r0, 10031546 +1003153e: f8d0 3100 ldr.w r3, [r0, #256] ; 0x100 +10031542: f88d 3001 strb.w r3, [sp, #1] +10031546: f896 2068 ldrb.w r2, [r6, #104] ; 0x68 +1003154a: ab02 add r3, sp, #8 +1003154c: f803 2d08 strb.w r2, [r3, #-8]! +10031550: f507 7000 add.w r0, r7, #512 ; 0x200 +10031554: 466b mov r3, sp +10031556: 4641 mov r1, r8 +10031558: 464a mov r2, r9 +1003155a: f008 fdac bl 1003a0b6 +1003155e: 2300 movs r3, #0 +10031560: f8c6 3088 str.w r3, [r6, #136] ; 0x88 +10031564: f89d 3002 ldrb.w r3, [sp, #2] +10031568: b113 cbz r3, 10031570 +1003156a: 692b ldr r3, [r5, #16] +1003156c: 06db lsls r3, r3, #27 +1003156e: d40a bmi.n 10031586 +10031570: f89d 3003 ldrb.w r3, [sp, #3] +10031574: b913 cbnz r3, 1003157c +10031576: f89d 3004 ldrb.w r3, [sp, #4] +1003157a: b37b cbz r3, 100315dc +1003157c: 692b ldr r3, [r5, #16] +1003157e: f013 0f60 tst.w r3, #96 ; 0x60 +10031582: d128 bne.n 100315d6 +10031584: e002 b.n 1003158c +10031586: b34c cbz r4, 100315dc +10031588: f8c6 4088 str.w r4, [r6, #136] ; 0x88 +1003158c: 4628 mov r0, r5 +1003158e: 4631 mov r1, r6 +10031590: f7ff ff08 bl 100313a4 +10031594: e022 b.n 100315dc +10031596: f412 7f80 tst.w r2, #256 ; 0x100 +1003159a: bf0c ite eq +1003159c: 2300 moveq r3, #0 +1003159e: 2302 movne r3, #2 +100315a0: f3c2 2240 ubfx r2, r2, #9, #1 +100315a4: 431a orrs r2, r3 +100315a6: 2a02 cmp r2, #2 +100315a8: d008 beq.n 100315bc +100315aa: 2a03 cmp r2, #3 +100315ac: d006 beq.n 100315bc +100315ae: 2a01 cmp r2, #1 +100315b0: bf14 ite ne +100315b2: f104 0010 addne.w r0, r4, #16 +100315b6: f104 000a addeq.w r0, r4, #10 +100315ba: e000 b.n 100315be +100315bc: 1d20 adds r0, r4, #4 +100315be: f105 019c add.w r1, r5, #156 ; 0x9c +100315c2: 2206 movs r2, #6 +100315c4: f7e5 ff3c bl 10017440 +100315c8: 3000 adds r0, #0 +100315ca: bf18 it ne +100315cc: 2001 movne r0, #1 +100315ce: e777 b.n 100314c0 +100315d0: f105 019c add.w r1, r5, #156 ; 0x9c +100315d4: e7aa b.n 1003152c +100315d6: 2c00 cmp r4, #0 +100315d8: d1d6 bne.n 10031588 +100315da: e7d7 b.n 1003158c +100315dc: b003 add sp, #12 +100315de: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + +100315e2 : +100315e2: f89d 0000 ldrb.w r0, [sp] +100315e6: b978 cbnz r0, 10031608 +100315e8: 2a58 cmp r2, #88 ; 0x58 +100315ea: d906 bls.n 100315fa +100315ec: f1b2 0c7f subs.w ip, r2, #127 ; 0x7f +100315f0: f1dc 0000 rsbs r0, ip, #0 +100315f4: eb50 000c adcs.w r0, r0, ip +100315f8: e000 b.n 100315fc +100315fa: 2001 movs r0, #1 +100315fc: f011 0f80 tst.w r1, #128 ; 0x80 +10031600: d100 bne.n 10031604 +10031602: b908 cbnz r0, 10031608 +10031604: f001 027f and.w r2, r1, #127 ; 0x7f +10031608: 2a58 cmp r2, #88 ; 0x58 +1003160a: d902 bls.n 10031612 +1003160c: 2a7f cmp r2, #127 ; 0x7f +1003160e: bf18 it ne +10031610: 461a movne r2, r3 +10031612: 4610 mov r0, r2 +10031614: 4770 bx lr + +10031616 : +10031616: 3901 subs r1, #1 +10031618: 290d cmp r1, #13 +1003161a: d808 bhi.n 1003162e +1003161c: f241 33b5 movw r3, #5045 ; 0x13b5 +10031620: 5cc3 ldrb r3, [r0, r3] +10031622: f013 0f0b tst.w r3, #11 +10031626: bf0c ite eq +10031628: 2000 moveq r0, #0 +1003162a: 2001 movne r0, #1 +1003162c: 4770 bx lr +1003162e: 2000 movs r0, #0 +10031630: 4770 bx lr + ... + +10031634 : +10031634: 3804 subs r0, #4 +10031636: b2c0 uxtb r0, r0 +10031638: 2883 cmp r0, #131 ; 0x83 +1003163a: bf9a itte ls +1003163c: 4b01 ldrls r3, [pc, #4] ; (10031644 ) +1003163e: 5c18 ldrbls r0, [r3, r0] +10031640: 2000 movhi r0, #0 +10031642: 4770 bx lr +10031644: 10041bcb .word 0x10041bcb + +10031648 : +10031648: 3801 subs r0, #1 +1003164a: b2c0 uxtb r0, r0 +1003164c: 2812 cmp r0, #18 +1003164e: bf9a itte ls +10031650: 4b01 ldrls r3, [pc, #4] ; (10031658 ) +10031652: 5c18 ldrbls r0, [r3, r0] +10031654: 2002 movhi r0, #2 +10031656: 4770 bx lr +10031658: 10041c4f .word 0x10041c4f + +1003165c : +1003165c: 2000 movs r0, #0 +1003165e: 5c0b ldrb r3, [r1, r0] +10031660: f013 0f80 tst.w r3, #128 ; 0x80 +10031664: d04c beq.n 10031700 +10031666: f003 037f and.w r3, r3, #127 ; 0x7f +1003166a: 2b16 cmp r3, #22 +1003166c: d030 beq.n 100316d0 +1003166e: d812 bhi.n 10031696 +10031670: 2b0b cmp r3, #11 +10031672: d029 beq.n 100316c8 +10031674: d807 bhi.n 10031686 +10031676: 2b02 cmp r3, #2 +10031678: d022 beq.n 100316c0 +1003167a: 2b04 cmp r3, #4 +1003167c: d140 bne.n 10031700 +1003167e: 8813 ldrh r3, [r2, #0] +10031680: f043 0302 orr.w r3, r3, #2 +10031684: e03b b.n 100316fe +10031686: 2b0c cmp r3, #12 +10031688: d026 beq.n 100316d8 +1003168a: 2b12 cmp r3, #18 +1003168c: d138 bne.n 10031700 +1003168e: 8813 ldrh r3, [r2, #0] +10031690: f043 0320 orr.w r3, r3, #32 +10031694: e033 b.n 100316fe +10031696: 2b30 cmp r3, #48 ; 0x30 +10031698: d026 beq.n 100316e8 +1003169a: d807 bhi.n 100316ac +1003169c: 2b18 cmp r3, #24 +1003169e: d01f beq.n 100316e0 +100316a0: 2b24 cmp r3, #36 ; 0x24 +100316a2: d12d bne.n 10031700 +100316a4: 8813 ldrh r3, [r2, #0] +100316a6: f043 0380 orr.w r3, r3, #128 ; 0x80 +100316aa: e028 b.n 100316fe +100316ac: 2b60 cmp r3, #96 ; 0x60 +100316ae: d01f beq.n 100316f0 +100316b0: 2b6c cmp r3, #108 ; 0x6c +100316b2: d021 beq.n 100316f8 +100316b4: 2b48 cmp r3, #72 ; 0x48 +100316b6: d123 bne.n 10031700 +100316b8: 8813 ldrh r3, [r2, #0] +100316ba: f443 7300 orr.w r3, r3, #512 ; 0x200 +100316be: e01e b.n 100316fe +100316c0: 8813 ldrh r3, [r2, #0] +100316c2: f043 0301 orr.w r3, r3, #1 +100316c6: e01a b.n 100316fe +100316c8: 8813 ldrh r3, [r2, #0] +100316ca: f043 0304 orr.w r3, r3, #4 +100316ce: e016 b.n 100316fe +100316d0: 8813 ldrh r3, [r2, #0] +100316d2: f043 0308 orr.w r3, r3, #8 +100316d6: e012 b.n 100316fe +100316d8: 8813 ldrh r3, [r2, #0] +100316da: f043 0310 orr.w r3, r3, #16 +100316de: e00e b.n 100316fe +100316e0: 8813 ldrh r3, [r2, #0] +100316e2: f043 0340 orr.w r3, r3, #64 ; 0x40 +100316e6: e00a b.n 100316fe +100316e8: 8813 ldrh r3, [r2, #0] +100316ea: f443 7380 orr.w r3, r3, #256 ; 0x100 +100316ee: e006 b.n 100316fe +100316f0: 8813 ldrh r3, [r2, #0] +100316f2: f443 6380 orr.w r3, r3, #1024 ; 0x400 +100316f6: e002 b.n 100316fe +100316f8: 8813 ldrh r3, [r2, #0] +100316fa: f443 6300 orr.w r3, r3, #2048 ; 0x800 +100316fe: 8013 strh r3, [r2, #0] +10031700: 3001 adds r0, #1 +10031702: 2810 cmp r0, #16 +10031704: d1ab bne.n 1003165e +10031706: 4770 bx lr + +10031708 : +10031708: 6883 ldr r3, [r0, #8] +1003170a: 2001 movs r0, #1 +1003170c: 7c99 ldrb r1, [r3, #18] +1003170e: 7c5a ldrb r2, [r3, #17] +10031710: 7559 strb r1, [r3, #21] +10031712: 7cd9 ldrb r1, [r3, #19] +10031714: 751a strb r2, [r3, #20] +10031716: 7599 strb r1, [r3, #22] +10031718: 75d9 strb r1, [r3, #23] +1003171a: 761a strb r2, [r3, #24] +1003171c: 765a strb r2, [r3, #25] +1003171e: 769a strb r2, [r3, #26] +10031720: 76da strb r2, [r3, #27] +10031722: 4770 bx lr + +10031724 : +10031724: f500 52a4 add.w r2, r0, #5248 ; 0x1480 +10031728: b510 push {r4, lr} +1003172a: 2103 movs r1, #3 +1003172c: 3219 adds r2, #25 +1003172e: 4604 mov r4, r0 +10031730: f000 fedf bl 100324f2 +10031734: f641 035c movw r3, #6236 ; 0x185c +10031738: 58e0 ldr r0, [r4, r3] +1003173a: b138 cbz r0, 1003174c +1003173c: f500 52a4 add.w r2, r0, #5248 ; 0x1480 +10031740: 2103 movs r1, #3 +10031742: 3219 adds r2, #25 +10031744: e8bd 4010 ldmia.w sp!, {r4, lr} +10031748: f000 bed3 b.w 100324f2 +1003174c: bd10 pop {r4, pc} + ... + +10031750 : +10031750: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10031754: f44f 7181 mov.w r1, #258 ; 0x102 +10031758: b091 sub sp, #68 ; 0x44 +1003175a: 4604 mov r4, r0 +1003175c: f006 fa9d bl 10037c9a +10031760: f44f 61aa mov.w r1, #1360 ; 0x550 +10031764: 4607 mov r7, r0 +10031766: 4620 mov r0, r4 +10031768: f006 fa97 bl 10037c9a +1003176c: f240 5151 movw r1, #1361 ; 0x551 +10031770: 4605 mov r5, r0 +10031772: 4620 mov r0, r4 +10031774: f006 fa91 bl 10037c9a +10031778: f240 515a movw r1, #1370 ; 0x55a +1003177c: 4606 mov r6, r0 +1003177e: 4620 mov r0, r4 +10031780: f006 fa8b bl 10037c9a +10031784: f240 515b movw r1, #1371 ; 0x55b +10031788: 9002 str r0, [sp, #8] +1003178a: 4620 mov r0, r4 +1003178c: f006 fa85 bl 10037c9a +10031790: f44f 61ae mov.w r1, #1392 ; 0x570 +10031794: 9003 str r0, [sp, #12] +10031796: 4620 mov r0, r4 +10031798: f006 fa7f bl 10037c9a +1003179c: f240 5171 movw r1, #1393 ; 0x571 +100317a0: 4683 mov fp, r0 +100317a2: 4620 mov r0, r4 +100317a4: f006 fa79 bl 10037c9a +100317a8: f04f 0900 mov.w r9, #0 +100317ac: 4682 mov sl, r0 +100317ae: f509 61ac add.w r1, r9, #1376 ; 0x560 +100317b2: 4620 mov r0, r4 +100317b4: f006 fa71 bl 10037c9a +100317b8: f10d 0830 add.w r8, sp, #48 ; 0x30 +100317bc: f808 0009 strb.w r0, [r8, r9] +100317c0: f109 0901 add.w r9, r9, #1 +100317c4: f1b9 0f08 cmp.w r9, #8 +100317c8: d1f1 bne.n 100317ae +100317ca: 2300 movs r3, #0 +100317cc: f503 61ad add.w r1, r3, #1384 ; 0x568 +100317d0: 4620 mov r0, r4 +100317d2: 9301 str r3, [sp, #4] +100317d4: f006 fa61 bl 10037c9a +100317d8: 9b01 ldr r3, [sp, #4] +100317da: f10d 0938 add.w r9, sp, #56 ; 0x38 +100317de: f809 0003 strb.w r0, [r9, r3] +100317e2: 3301 adds r3, #1 +100317e4: 2b08 cmp r3, #8 +100317e6: d1f1 bne.n 100317cc +100317e8: 2300 movs r3, #0 +100317ea: f503 61c2 add.w r1, r3, #1552 ; 0x610 +100317ee: 4620 mov r0, r4 +100317f0: 9301 str r3, [sp, #4] +100317f2: f006 fa52 bl 10037c9a +100317f6: 9b01 ldr r3, [sp, #4] +100317f8: aa04 add r2, sp, #16 +100317fa: 54d0 strb r0, [r2, r3] +100317fc: 3301 adds r3, #1 +100317fe: 2b06 cmp r3, #6 +10031800: d1f3 bne.n 100317ea +10031802: 2300 movs r3, #0 +10031804: f503 61c3 add.w r1, r3, #1560 ; 0x618 +10031808: 4620 mov r0, r4 +1003180a: 9301 str r3, [sp, #4] +1003180c: f006 fa45 bl 10037c9a +10031810: 9b01 ldr r3, [sp, #4] +10031812: aa06 add r2, sp, #24 +10031814: 54d0 strb r0, [r2, r3] +10031816: 3301 adds r3, #1 +10031818: 2b06 cmp r3, #6 +1003181a: d1f3 bne.n 10031804 +1003181c: 2300 movs r3, #0 +1003181e: f503 61e0 add.w r1, r3, #1792 ; 0x700 +10031822: 4620 mov r0, r4 +10031824: 9301 str r3, [sp, #4] +10031826: f006 fa38 bl 10037c9a +1003182a: 9b01 ldr r3, [sp, #4] +1003182c: aa08 add r2, sp, #32 +1003182e: 54d0 strb r0, [r2, r3] +10031830: 3301 adds r3, #1 +10031832: 2b06 cmp r3, #6 +10031834: d1f3 bne.n 1003181e +10031836: 2300 movs r3, #0 +10031838: f503 61e1 add.w r1, r3, #1800 ; 0x708 +1003183c: 4620 mov r0, r4 +1003183e: 9301 str r3, [sp, #4] +10031840: f006 fa2b bl 10037c9a +10031844: 9b01 ldr r3, [sp, #4] +10031846: aa0a add r2, sp, #40 ; 0x28 +10031848: 54d0 strb r0, [r2, r3] +1003184a: 3301 adds r3, #1 +1003184c: 2b06 cmp r3, #6 +1003184e: d1f3 bne.n 10031838 +10031850: f005 02e7 and.w r2, r5, #231 ; 0xe7 +10031854: f44f 61aa mov.w r1, #1360 ; 0x550 +10031858: f042 0210 orr.w r2, r2, #16 +1003185c: 4620 mov r0, r4 +1003185e: f006 fa31 bl 10037cc4 +10031862: f006 02e7 and.w r2, r6, #231 ; 0xe7 +10031866: f240 5151 movw r1, #1361 ; 0x551 +1003186a: f042 0210 orr.w r2, r2, #16 +1003186e: 4620 mov r0, r4 +10031870: f006 fa28 bl 10037cc4 +10031874: f007 0203 and.w r2, r7, #3 +10031878: f3c7 0381 ubfx r3, r7, #2, #2 +1003187c: ea43 0382 orr.w r3, r3, r2, lsl #2 +10031880: f007 02f0 and.w r2, r7, #240 ; 0xf0 +10031884: 431a orrs r2, r3 +10031886: f44f 7181 mov.w r1, #258 ; 0x102 +1003188a: 4620 mov r0, r4 +1003188c: f006 fa1a bl 10037cc4 +10031890: f44f 61aa mov.w r1, #1360 ; 0x550 +10031894: f006 02f7 and.w r2, r6, #247 ; 0xf7 +10031898: 4620 mov r0, r4 +1003189a: f006 fa13 bl 10037cc4 +1003189e: f240 515a movw r1, #1370 ; 0x55a +100318a2: 465a mov r2, fp +100318a4: 4620 mov r0, r4 +100318a6: f006 fa0d bl 10037cc4 +100318aa: 4620 mov r0, r4 +100318ac: f240 515b movw r1, #1371 ; 0x55b +100318b0: 4652 mov r2, sl +100318b2: f006 fa07 bl 10037cc4 +100318b6: 2700 movs r7, #0 +100318b8: f507 61ac add.w r1, r7, #1376 ; 0x560 +100318bc: f819 2007 ldrb.w r2, [r9, r7] +100318c0: 4620 mov r0, r4 +100318c2: 3701 adds r7, #1 +100318c4: f006 f9fe bl 10037cc4 +100318c8: 2f08 cmp r7, #8 +100318ca: d1f5 bne.n 100318b8 +100318cc: 2700 movs r7, #0 +100318ce: ab08 add r3, sp, #32 +100318d0: f507 61c2 add.w r1, r7, #1552 ; 0x610 +100318d4: 5dda ldrb r2, [r3, r7] +100318d6: 4620 mov r0, r4 +100318d8: 3701 adds r7, #1 +100318da: f006 f9f3 bl 10037cc4 +100318de: 2f06 cmp r7, #6 +100318e0: d1f5 bne.n 100318ce +100318e2: 2700 movs r7, #0 +100318e4: ab0a add r3, sp, #40 ; 0x28 +100318e6: f507 61c3 add.w r1, r7, #1560 ; 0x618 +100318ea: 5dda ldrb r2, [r3, r7] +100318ec: 4620 mov r0, r4 +100318ee: 3701 adds r7, #1 +100318f0: f006 f9e8 bl 10037cc4 +100318f4: 2f06 cmp r7, #6 +100318f6: d1f5 bne.n 100318e4 +100318f8: f240 5151 movw r1, #1361 ; 0x551 +100318fc: f005 02f7 and.w r2, r5, #247 ; 0xf7 +10031900: 4620 mov r0, r4 +10031902: f006 f9df bl 10037cc4 +10031906: f240 5171 movw r1, #1393 ; 0x571 +1003190a: 9a02 ldr r2, [sp, #8] +1003190c: 4620 mov r0, r4 +1003190e: f006 f9d9 bl 10037cc4 +10031912: 4620 mov r0, r4 +10031914: f240 5171 movw r1, #1393 ; 0x571 +10031918: 9a03 ldr r2, [sp, #12] +1003191a: f006 f9d3 bl 10037cc4 +1003191e: 2700 movs r7, #0 +10031920: f507 61ad add.w r1, r7, #1384 ; 0x568 +10031924: f818 2007 ldrb.w r2, [r8, r7] +10031928: 4620 mov r0, r4 +1003192a: 3701 adds r7, #1 +1003192c: f006 f9ca bl 10037cc4 +10031930: 2f08 cmp r7, #8 +10031932: d1f5 bne.n 10031920 +10031934: 2700 movs r7, #0 +10031936: ab04 add r3, sp, #16 +10031938: f507 61e0 add.w r1, r7, #1792 ; 0x700 +1003193c: 5dda ldrb r2, [r3, r7] +1003193e: 4620 mov r0, r4 +10031940: 3701 adds r7, #1 +10031942: f006 f9bf bl 10037cc4 +10031946: 2f06 cmp r7, #6 +10031948: d1f5 bne.n 10031936 +1003194a: 2700 movs r7, #0 +1003194c: ab06 add r3, sp, #24 +1003194e: f507 61e1 add.w r1, r7, #1800 ; 0x708 +10031952: 5dda ldrb r2, [r3, r7] +10031954: 4620 mov r0, r4 +10031956: 3701 adds r7, #1 +10031958: f006 f9b4 bl 10037cc4 +1003195c: 2f06 cmp r7, #6 +1003195e: d1f5 bne.n 1003194c +10031960: f44f 61aa mov.w r1, #1360 ; 0x550 +10031964: 4632 mov r2, r6 +10031966: 4620 mov r0, r4 +10031968: f006 f9ac bl 10037cc4 +1003196c: 462a mov r2, r5 +1003196e: f240 5151 movw r1, #1361 ; 0x551 +10031972: 4620 mov r0, r4 +10031974: f006 f9a6 bl 10037cc4 +10031978: f641 036a movw r3, #6250 ; 0x186a +1003197c: 5ce1 ldrb r1, [r4, r3] +1003197e: f641 055c movw r5, #6236 ; 0x185c +10031982: 4a17 ldr r2, [pc, #92] ; (100319e0 ) +10031984: b989 cbnz r1, 100319aa +10031986: 2001 movs r0, #1 +10031988: 54e0 strb r0, [r4, r3] +1003198a: 5960 ldr r0, [r4, r5] +1003198c: 54c1 strb r1, [r0, r3] +1003198e: 6813 ldr r3, [r2, #0] +10031990: b313 cbz r3, 100319d8 +10031992: 4814 ldr r0, [pc, #80] ; (100319e4 ) +10031994: f7e9 f8f4 bl 1001ab80 +10031998: 5962 ldr r2, [r4, r5] +1003199a: 4913 ldr r1, [pc, #76] ; (100319e8 ) +1003199c: f641 0334 movw r3, #6196 ; 0x1834 +100319a0: f8d1 01b0 ldr.w r0, [r1, #432] ; 0x1b0 +100319a4: 58d1 ldr r1, [r2, r3] +100319a6: 58e2 ldr r2, [r4, r3] +100319a8: e011 b.n 100319ce +100319aa: 2100 movs r1, #0 +100319ac: 54e1 strb r1, [r4, r3] +100319ae: 5961 ldr r1, [r4, r5] +100319b0: 2001 movs r0, #1 +100319b2: 54c8 strb r0, [r1, r3] +100319b4: 6813 ldr r3, [r2, #0] +100319b6: b17b cbz r3, 100319d8 +100319b8: 480a ldr r0, [pc, #40] ; (100319e4 ) +100319ba: f7e9 f8e1 bl 1001ab80 +100319be: 490a ldr r1, [pc, #40] ; (100319e8 ) +100319c0: 5962 ldr r2, [r4, r5] +100319c2: f641 0334 movw r3, #6196 ; 0x1834 +100319c6: f8d1 01b4 ldr.w r0, [r1, #436] ; 0x1b4 +100319ca: 58d2 ldr r2, [r2, r3] +100319cc: 58e1 ldr r1, [r4, r3] +100319ce: b011 add sp, #68 ; 0x44 +100319d0: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100319d4: f7e9 b8d4 b.w 1001ab80 +100319d8: b011 add sp, #68 ; 0x44 +100319da: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +100319de: bf00 nop +100319e0: 10044f38 .word 0x10044f38 +100319e4: 100429b1 .word 0x100429b1 +100319e8: 10043ac4 .word 0x10043ac4 + +100319ec : +100319ec: 2948 cmp r1, #72 ; 0x48 +100319ee: d101 bne.n 100319f4 +100319f0: f7ff beae b.w 10031750 +100319f4: 4770 bx lr + +100319f6 : +100319f6: 4770 bx lr + +100319f8 : +100319f8: b570 push {r4, r5, r6, lr} +100319fa: 4605 mov r5, r0 +100319fc: 460e mov r6, r1 +100319fe: f500 54a0 add.w r4, r0, #5120 ; 0x1400 +10031a02: b151 cbz r1, 10031a1a +10031a04: f894 1036 ldrb.w r1, [r4, #54] ; 0x36 +10031a08: f7f4 fe3e bl 10026688 +10031a0c: 4628 mov r0, r5 +10031a0e: f894 1044 ldrb.w r1, [r4, #68] ; 0x44 +10031a12: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10031a16: f7f4 be14 b.w 10026642 +10031a1a: f894 3043 ldrb.w r3, [r4, #67] ; 0x43 +10031a1e: f884 3044 strb.w r3, [r4, #68] ; 0x44 +10031a22: f7f4 fe0e bl 10026642 +10031a26: f894 3035 ldrb.w r3, [r4, #53] ; 0x35 +10031a2a: 4628 mov r0, r5 +10031a2c: f884 3036 strb.w r3, [r4, #54] ; 0x36 +10031a30: 4631 mov r1, r6 +10031a32: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10031a36: f7f4 be27 b.w 10026688 + ... + +10031a3c : +10031a3c: b537 push {r0, r1, r2, r4, r5, lr} +10031a3e: f241 63a3 movw r3, #5795 ; 0x16a3 +10031a42: 5cc3 ldrb r3, [r0, r3] +10031a44: 4604 mov r4, r0 +10031a46: 2b01 cmp r3, #1 +10031a48: d118 bne.n 10031a7c +10031a4a: f241 65a4 movw r5, #5796 ; 0x16a4 +10031a4e: 5d43 ldrb r3, [r0, r5] +10031a50: 2bff cmp r3, #255 ; 0xff +10031a52: d013 beq.n 10031a7c +10031a54: 2100 movs r1, #0 +10031a56: 2255 movs r2, #85 ; 0x55 +10031a58: f04f 33ff mov.w r3, #4294967295 +10031a5c: f000 fe35 bl 100326ca +10031a60: 5d63 ldrb r3, [r4, r5] +10031a62: f420 2078 bic.w r0, r0, #1015808 ; 0xf8000 +10031a66: f003 030f and.w r3, r3, #15 +10031a6a: ea40 30c3 orr.w r0, r0, r3, lsl #15 +10031a6e: 9000 str r0, [sp, #0] +10031a70: 2100 movs r1, #0 +10031a72: 4620 mov r0, r4 +10031a74: 2255 movs r2, #85 ; 0x55 +10031a76: 4b02 ldr r3, [pc, #8] ; (10031a80 ) +10031a78: f000 fe30 bl 100326dc +10031a7c: b003 add sp, #12 +10031a7e: bd30 pop {r4, r5, pc} +10031a80: 000fffff .word 0x000fffff + +10031a84 : +10031a84: b570 push {r4, r5, r6, lr} +10031a86: f640 6604 movw r6, #3588 ; 0xe04 +10031a8a: 42b1 cmp r1, r6 +10031a8c: 9804 ldr r0, [sp, #16] +10031a8e: 9d05 ldr r5, [sp, #20] +10031a90: 9c06 ldr r4, [sp, #24] +10031a92: d03b beq.n 10031b0c +10031a94: d807 bhi.n 10031aa6 +10031a96: f640 066c movw r6, #2156 ; 0x86c +10031a9a: 42b1 cmp r1, r6 +10031a9c: d053 beq.n 10031b46 +10031a9e: f5b1 6f60 cmp.w r1, #3584 ; 0xe00 +10031aa2: d016 beq.n 10031ad2 +10031aa4: bd70 pop {r4, r5, r6, pc} +10031aa6: f5b1 6f61 cmp.w r1, #3600 ; 0xe10 +10031aaa: d07a beq.n 10031ba2 +10031aac: f640 6214 movw r2, #3604 ; 0xe14 +10031ab0: 4291 cmp r1, r2 +10031ab2: f000 8093 beq.w 10031bdc +10031ab6: f640 6208 movw r2, #3592 ; 0xe08 +10031aba: 4291 cmp r1, r2 +10031abc: f040 80ac bne.w 10031c18 +10031ac0: 2200 movs r2, #0 +10031ac2: 7002 strb r2, [r0, #0] +10031ac4: f3c3 3203 ubfx r2, r3, #12, #4 +10031ac8: eb02 0282 add.w r2, r2, r2, lsl #2 +10031acc: f3c3 2303 ubfx r3, r3, #8, #4 +10031ad0: e062 b.n 10031b98 +10031ad2: 2204 movs r2, #4 +10031ad4: 7002 strb r2, [r0, #0] +10031ad6: 2205 movs r2, #5 +10031ad8: 7042 strb r2, [r0, #1] +10031ada: 2206 movs r2, #6 +10031adc: 7082 strb r2, [r0, #2] +10031ade: 2207 movs r2, #7 +10031ae0: 70c2 strb r2, [r0, #3] +10031ae2: 3d01 subs r5, #1 +10031ae4: 2200 movs r2, #0 +10031ae6: 1d11 adds r1, r2, #4 +10031ae8: fa23 f101 lsr.w r1, r3, r1 +10031aec: fa23 f002 lsr.w r0, r3, r2 +10031af0: f001 010f and.w r1, r1, #15 +10031af4: eb01 0181 add.w r1, r1, r1, lsl #2 +10031af8: f000 000f and.w r0, r0, #15 +10031afc: 3208 adds r2, #8 +10031afe: eb00 0141 add.w r1, r0, r1, lsl #1 +10031b02: 2a20 cmp r2, #32 +10031b04: f805 1f01 strb.w r1, [r5, #1]! +10031b08: d1ed bne.n 10031ae6 +10031b0a: e083 b.n 10031c14 +10031b0c: 2208 movs r2, #8 +10031b0e: 7002 strb r2, [r0, #0] +10031b10: 2209 movs r2, #9 +10031b12: 7042 strb r2, [r0, #1] +10031b14: 220a movs r2, #10 +10031b16: 7082 strb r2, [r0, #2] +10031b18: 220b movs r2, #11 +10031b1a: 70c2 strb r2, [r0, #3] +10031b1c: 3d01 subs r5, #1 +10031b1e: 2200 movs r2, #0 +10031b20: 1d11 adds r1, r2, #4 +10031b22: fa23 f101 lsr.w r1, r3, r1 +10031b26: fa23 f002 lsr.w r0, r3, r2 +10031b2a: f001 010f and.w r1, r1, #15 +10031b2e: eb01 0181 add.w r1, r1, r1, lsl #2 +10031b32: f000 000f and.w r0, r0, #15 +10031b36: 3208 adds r2, #8 +10031b38: eb00 0141 add.w r1, r0, r1, lsl #1 +10031b3c: 2a20 cmp r2, #32 +10031b3e: f805 1f01 strb.w r1, [r5, #1]! +10031b42: d1ed bne.n 10031b20 +10031b44: e066 b.n 10031c14 +10031b46: f512 7f80 cmn.w r2, #256 ; 0x100 +10031b4a: d11b bne.n 10031b84 +10031b4c: 2201 movs r2, #1 +10031b4e: 7002 strb r2, [r0, #0] +10031b50: 2202 movs r2, #2 +10031b52: 7042 strb r2, [r0, #1] +10031b54: 2203 movs r2, #3 +10031b56: 7082 strb r2, [r0, #2] +10031b58: 3d01 subs r5, #1 +10031b5a: 220c movs r2, #12 +10031b5c: 1f10 subs r0, r2, #4 +10031b5e: fa23 f102 lsr.w r1, r3, r2 +10031b62: fa23 f000 lsr.w r0, r3, r0 +10031b66: f001 010f and.w r1, r1, #15 +10031b6a: f000 000f and.w r0, r0, #15 +10031b6e: eb01 0181 add.w r1, r1, r1, lsl #2 +10031b72: 3208 adds r2, #8 +10031b74: eb00 0141 add.w r1, r0, r1, lsl #1 +10031b78: 2a24 cmp r2, #36 ; 0x24 +10031b7a: f805 1f01 strb.w r1, [r5, #1]! +10031b7e: d1ed bne.n 10031b5c +10031b80: 2303 movs r3, #3 +10031b82: e048 b.n 10031c16 +10031b84: 2aff cmp r2, #255 ; 0xff +10031b86: d147 bne.n 10031c18 +10031b88: 2203 movs r2, #3 +10031b8a: 7002 strb r2, [r0, #0] +10031b8c: f3c3 1203 ubfx r2, r3, #4, #4 +10031b90: eb02 0282 add.w r2, r2, r2, lsl #2 +10031b94: f003 030f and.w r3, r3, #15 +10031b98: eb03 0242 add.w r2, r3, r2, lsl #1 +10031b9c: 702a strb r2, [r5, #0] +10031b9e: 2301 movs r3, #1 +10031ba0: e039 b.n 10031c16 +10031ba2: 220c movs r2, #12 +10031ba4: 7002 strb r2, [r0, #0] +10031ba6: 220d movs r2, #13 +10031ba8: 7042 strb r2, [r0, #1] +10031baa: 220e movs r2, #14 +10031bac: 7082 strb r2, [r0, #2] +10031bae: 220f movs r2, #15 +10031bb0: 70c2 strb r2, [r0, #3] +10031bb2: 3d01 subs r5, #1 +10031bb4: 2200 movs r2, #0 +10031bb6: 1d11 adds r1, r2, #4 +10031bb8: fa23 f101 lsr.w r1, r3, r1 +10031bbc: fa23 f002 lsr.w r0, r3, r2 +10031bc0: f001 010f and.w r1, r1, #15 +10031bc4: eb01 0181 add.w r1, r1, r1, lsl #2 +10031bc8: f000 000f and.w r0, r0, #15 +10031bcc: 3208 adds r2, #8 +10031bce: eb00 0141 add.w r1, r0, r1, lsl #1 +10031bd2: 2a20 cmp r2, #32 +10031bd4: f805 1f01 strb.w r1, [r5, #1]! +10031bd8: d1ed bne.n 10031bb6 +10031bda: e01b b.n 10031c14 +10031bdc: 2210 movs r2, #16 +10031bde: 7002 strb r2, [r0, #0] +10031be0: 2211 movs r2, #17 +10031be2: 7042 strb r2, [r0, #1] +10031be4: 2212 movs r2, #18 +10031be6: 7082 strb r2, [r0, #2] +10031be8: 2213 movs r2, #19 +10031bea: 70c2 strb r2, [r0, #3] +10031bec: 3d01 subs r5, #1 +10031bee: 2200 movs r2, #0 +10031bf0: 1d11 adds r1, r2, #4 +10031bf2: fa23 f101 lsr.w r1, r3, r1 +10031bf6: fa23 f002 lsr.w r0, r3, r2 +10031bfa: f001 010f and.w r1, r1, #15 +10031bfe: eb01 0181 add.w r1, r1, r1, lsl #2 +10031c02: f000 000f and.w r0, r0, #15 +10031c06: 3208 adds r2, #8 +10031c08: eb00 0141 add.w r1, r0, r1, lsl #1 +10031c0c: 2a20 cmp r2, #32 +10031c0e: f805 1f01 strb.w r1, [r5, #1]! +10031c12: d1ed bne.n 10031bf0 +10031c14: 2304 movs r3, #4 +10031c16: 7023 strb r3, [r4, #0] +10031c18: bd70 pop {r4, r5, r6, pc} + ... + +10031c1c : +10031c1c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10031c20: 461e mov r6, r3 +10031c22: b088 sub sp, #32 +10031c24: f241 63c8 movw r3, #5832 ; 0x16c8 +10031c28: f850 a003 ldr.w sl, [r0, r3] +10031c2c: ab06 add r3, sp, #24 +10031c2e: 9300 str r3, [sp, #0] +10031c30: ab07 add r3, sp, #28 +10031c32: 9301 str r3, [sp, #4] +10031c34: f10d 0317 add.w r3, sp, #23 +10031c38: 460c mov r4, r1 +10031c3a: 9302 str r3, [sp, #8] +10031c3c: a910 add r1, sp, #64 ; 0x40 +10031c3e: 2700 movs r7, #0 +10031c40: 4615 mov r5, r2 +10031c42: c90e ldmia r1, {r1, r2, r3} +10031c44: 9706 str r7, [sp, #24] +10031c46: f88d 7017 strb.w r7, [sp, #23] +10031c4a: 9707 str r7, [sp, #28] +10031c4c: f7ff ff1a bl 10031a84 +10031c50: 2c01 cmp r4, #1 +10031c52: d82a bhi.n 10031caa +10031c54: 2d03 cmp r5, #3 +10031c56: d828 bhi.n 10031caa +10031c58: 2e03 cmp r6, #3 +10031c5a: d826 bhi.n 10031caa +10031c5c: f89d 2017 ldrb.w r2, [sp, #23] +10031c60: b2fb uxtb r3, r7 +10031c62: 429a cmp r2, r3 +10031c64: d921 bls.n 10031caa +10031c66: 1961 adds r1, r4, r5 +10031c68: 2014 movs r0, #20 +10031c6a: 4431 add r1, r6 +10031c6c: fb00 a101 mla r1, r0, r1, sl +10031c70: aa08 add r2, sp, #32 +10031c72: 441a add r2, r3 +10031c74: f812 3c08 ldrb.w r3, [r2, #-8] +10031c78: f812 2c04 ldrb.w r2, [r2, #-4] +10031c7c: 4419 add r1, r3 +10031c7e: f881 2046 strb.w r2, [r1, #70] ; 0x46 +10031c82: 490b ldr r1, [pc, #44] ; (10031cb0 ) +10031c84: f04f 4080 mov.w r0, #1073741824 ; 0x40000000 +10031c88: e9d1 8902 ldrd r8, r9, [r1, #8] +10031c8c: 2100 movs r1, #0 +10031c8e: ea00 0008 and.w r0, r0, r8 +10031c92: ea01 0109 and.w r1, r1, r9 +10031c96: ea50 0c01 orrs.w ip, r0, r1 +10031c9a: d004 beq.n 10031ca6 +10031c9c: 4805 ldr r0, [pc, #20] ; (10031cb4 ) +10031c9e: 4619 mov r1, r3 +10031ca0: b252 sxtb r2, r2 +10031ca2: f7e8 ff6d bl 1001ab80 +10031ca6: 3701 adds r7, #1 +10031ca8: e7d8 b.n 10031c5c +10031caa: b008 add sp, #32 +10031cac: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10031cb0: 10000720 .word 0x10000720 +10031cb4: 10041c76 .word 0x10041c76 + +10031cb8 : +10031cb8: f241 63c8 movw r3, #5832 ; 0x16c8 +10031cbc: 58c0 ldr r0, [r0, r3] +10031cbe: 2300 movs r3, #0 +10031cc0: 18c2 adds r2, r0, r3 +10031cc2: 3301 adds r3, #1 +10031cc4: 2100 movs r1, #0 +10031cc6: 2b14 cmp r3, #20 +10031cc8: f882 1046 strb.w r1, [r2, #70] ; 0x46 +10031ccc: d1f8 bne.n 10031cc0 +10031cce: 4770 bx lr + +10031cd0 : +10031cd0: b5f0 push {r4, r5, r6, r7, lr} +10031cd2: f241 67c8 movw r7, #5832 ; 0x16c8 +10031cd6: 59c7 ldr r7, [r0, r7] +10031cd8: f897 720c ldrb.w r7, [r7, #524] ; 0x20c +10031cdc: b11f cbz r7, 10031ce6 +10031cde: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} +10031ce2: f7ff bf9b b.w 10031c1c +10031ce6: bdf0 pop {r4, r5, r6, r7, pc} + +10031ce8 : +10031ce8: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10031cec: f89d 8020 ldrb.w r8, [sp, #32] +10031cf0: 460e mov r6, r1 +10031cf2: 4699 mov r9, r3 +10031cf4: 4641 mov r1, r8 +10031cf6: f241 63c8 movw r3, #5832 ; 0x16c8 +10031cfa: 4614 mov r4, r2 +10031cfc: 58c7 ldr r7, [r0, r3] +10031cfe: f7ff fc8a bl 10031616 +10031d02: f108 35ff add.w r5, r8, #4294967295 +10031d06: 2800 cmp r0, #0 +10031d08: b2ed uxtb r5, r5 +10031d0a: bf14 ite ne +10031d0c: 462b movne r3, r5 +10031d0e: 2300 moveq r3, #0 +10031d10: 9a09 ldr r2, [sp, #36] ; 0x24 +10031d12: f1b8 0f0f cmp.w r8, #15 +10031d16: bf34 ite cc +10031d18: 2001 movcc r0, #1 +10031d1a: 2000 movcs r0, #0 +10031d1c: bf28 it cs +10031d1e: 461d movcs r5, r3 +10031d20: 7010 strb r0, [r2, #0] +10031d22: b378 cbz r0, 10031d84 +10031d24: 2c02 cmp r4, #2 +10031d26: d005 beq.n 10031d34 +10031d28: 2c04 cmp r4, #4 +10031d2a: d003 beq.n 10031d34 +10031d2c: 2c0b cmp r4, #11 +10031d2e: d001 beq.n 10031d34 +10031d30: 2c16 cmp r4, #22 +10031d32: d106 bne.n 10031d42 +10031d34: 230e movs r3, #14 +10031d36: fb03 7306 mla r3, r3, r6, r7 +10031d3a: 441d add r5, r3 +10031d3c: f895 005a ldrb.w r0, [r5, #90] ; 0x5a +10031d40: e009 b.n 10031d56 +10031d42: 2c0b cmp r4, #11 +10031d44: d906 bls.n 10031d54 +10031d46: 230e movs r3, #14 +10031d48: fb03 7306 mla r3, r3, r6, r7 +10031d4c: 441d add r5, r3 +10031d4e: f895 0068 ldrb.w r0, [r5, #104] ; 0x68 +10031d52: e000 b.n 10031d56 +10031d54: 2000 movs r0, #0 +10031d56: f1a4 030c sub.w r3, r4, #12 +10031d5a: 2b60 cmp r3, #96 ; 0x60 +10031d5c: d806 bhi.n 10031d6c +10031d5e: 2c16 cmp r4, #22 +10031d60: d004 beq.n 10031d6c +10031d62: 19bb adds r3, r7, r6 +10031d64: f893 3076 ldrb.w r3, [r3, #118] ; 0x76 +10031d68: 4418 add r0, r3 +10031d6a: b2c0 uxtb r0, r0 +10031d6c: f1b9 0f00 cmp.w r9, #0 +10031d70: d108 bne.n 10031d84 +10031d72: f084 0480 eor.w r4, r4, #128 ; 0x80 +10031d76: 2c47 cmp r4, #71 ; 0x47 +10031d78: d804 bhi.n 10031d84 +10031d7a: 443e add r6, r7 +10031d7c: f896 3077 ldrb.w r3, [r6, #119] ; 0x77 +10031d80: 4418 add r0, r3 +10031d82: b2c0 uxtb r0, r0 +10031d84: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + +10031d88 : +10031d88: f241 63c8 movw r3, #5832 ; 0x16c8 +10031d8c: 58c3 ldr r3, [r0, r3] +10031d8e: f893 099f ldrb.w r0, [r3, #2463] ; 0x99f +10031d92: b168 cbz r0, 10031db0 +10031d94: 2a02 cmp r2, #2 +10031d96: 4419 add r1, r3 +10031d98: d005 beq.n 10031da6 +10031d9a: 2a04 cmp r2, #4 +10031d9c: d003 beq.n 10031da6 +10031d9e: 2a0b cmp r2, #11 +10031da0: d001 beq.n 10031da6 +10031da2: 2a16 cmp r2, #22 +10031da4: d102 bne.n 10031dac +10031da6: f891 0df5 ldrb.w r0, [r1, #3573] ; 0xdf5 +10031daa: e001 b.n 10031db0 +10031dac: f891 0df4 ldrb.w r0, [r1, #3572] ; 0xdf4 +10031db0: b240 sxtb r0, r0 +10031db2: 4770 bx lr + +10031db4 : +10031db4: 3804 subs r0, #4 +10031db6: b2c0 uxtb r0, r0 +10031db8: 2883 cmp r0, #131 ; 0x83 +10031dba: bf9a itte ls +10031dbc: 4b01 ldrls r3, [pc, #4] ; (10031dc4 ) +10031dbe: 5c18 ldrbls r0, [r3, r0] +10031dc0: 2000 movhi r0, #0 +10031dc2: 4770 bx lr +10031dc4: 10041cbe .word 0x10041cbe + +10031dc8 : +10031dc8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10031dcc: 4698 mov r8, r3 +10031dce: f241 63c8 movw r3, #5832 ; 0x16c8 +10031dd2: 58c7 ldr r7, [r0, r3] +10031dd4: 4604 mov r4, r0 +10031dd6: f89d 0018 ldrb.w r0, [sp, #24] +10031dda: 460d mov r5, r1 +10031ddc: 4616 mov r6, r2 +10031dde: f7ff ffe9 bl 10031db4 +10031de2: f241 33f5 movw r3, #5109 ; 0x13f5 +10031de6: 5ce4 ldrb r4, [r4, r3] +10031de8: 2c02 cmp r4, #2 +10031dea: d104 bne.n 10031df6 +10031dec: f897 3043 ldrb.w r3, [r7, #67] ; 0x43 +10031df0: 2b02 cmp r3, #2 +10031df2: d101 bne.n 10031df8 +10031df4: e014 b.n 10031e20 +10031df6: b18c cbz r4, 10031e1c +10031df8: 2d01 cmp r5, #1 +10031dfa: d811 bhi.n 10031e20 +10031dfc: 2e03 cmp r6, #3 +10031dfe: d80f bhi.n 10031e20 +10031e00: f1b8 0f03 cmp.w r8, #3 +10031e04: d80c bhi.n 10031e20 +10031e06: 2813 cmp r0, #19 +10031e08: d80a bhi.n 10031e20 +10031e0a: 4435 add r5, r6 +10031e0c: 44a8 add r8, r5 +10031e0e: 2514 movs r5, #20 +10031e10: fb05 7708 mla r7, r5, r8, r7 +10031e14: 4438 add r0, r7 +10031e16: f890 0046 ldrb.w r0, [r0, #70] ; 0x46 +10031e1a: e002 b.n 10031e22 +10031e1c: 4620 mov r0, r4 +10031e1e: e000 b.n 10031e22 +10031e20: 2000 movs r0, #0 +10031e22: b240 sxtb r0, r0 +10031e24: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10031e28 : +10031e28: b537 push {r0, r1, r2, r4, r5, lr} +10031e2a: 2316 movs r3, #22 +10031e2c: 2100 movs r1, #0 +10031e2e: 9300 str r3, [sp, #0] +10031e30: 460a mov r2, r1 +10031e32: 460b mov r3, r1 +10031e34: 4604 mov r4, r0 +10031e36: f7ff ffc7 bl 10031dc8 +10031e3a: f241 65c8 movw r5, #5832 ; 0x16c8 +10031e3e: 5963 ldr r3, [r4, r5] +10031e40: 2100 movs r1, #0 +10031e42: f883 0174 strb.w r0, [r3, #372] ; 0x174 +10031e46: 236c movs r3, #108 ; 0x6c +10031e48: 9300 str r3, [sp, #0] +10031e4a: 460a mov r2, r1 +10031e4c: 460b mov r3, r1 +10031e4e: 4620 mov r0, r4 +10031e50: f7ff ffba bl 10031dc8 +10031e54: 5963 ldr r3, [r4, r5] +10031e56: 2100 movs r1, #0 +10031e58: f883 0175 strb.w r0, [r3, #373] ; 0x175 +10031e5c: 2387 movs r3, #135 ; 0x87 +10031e5e: 9300 str r3, [sp, #0] +10031e60: 4620 mov r0, r4 +10031e62: 460b mov r3, r1 +10031e64: 460a mov r2, r1 +10031e66: f7ff ffaf bl 10031dc8 +10031e6a: 5963 ldr r3, [r4, r5] +10031e6c: f883 0176 strb.w r0, [r3, #374] ; 0x176 +10031e70: b003 add sp, #12 +10031e72: bd30 pop {r4, r5, pc} + +10031e74 : +10031e74: b5f8 push {r3, r4, r5, r6, r7, lr} +10031e76: 461e mov r6, r3 +10031e78: f241 63c8 movw r3, #5832 ; 0x16c8 +10031e7c: 460c mov r4, r1 +10031e7e: 58c7 ldr r7, [r0, r3] +10031e80: f89d 0018 ldrb.w r0, [sp, #24] +10031e84: 4615 mov r5, r2 +10031e86: f7ff ff95 bl 10031db4 +10031e8a: 2c01 cmp r4, #1 +10031e8c: d80f bhi.n 10031eae +10031e8e: 2d03 cmp r5, #3 +10031e90: d80d bhi.n 10031eae +10031e92: 2e03 cmp r6, #3 +10031e94: d80b bhi.n 10031eae +10031e96: 2813 cmp r0, #19 +10031e98: d809 bhi.n 10031eae +10031e9a: 442c add r4, r5 +10031e9c: 4426 add r6, r4 +10031e9e: 2414 movs r4, #20 +10031ea0: fb04 7706 mla r7, r4, r6, r7 +10031ea4: f99d 301c ldrsb.w r3, [sp, #28] +10031ea8: 4438 add r0, r7 +10031eaa: f880 3046 strb.w r3, [r0, #70] ; 0x46 +10031eae: bdf8 pop {r3, r4, r5, r6, r7, pc} + +10031eb0 : +10031eb0: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +10031eb4: 4a3d ldr r2, [pc, #244] ; (10031fac ) +10031eb6: 4604 mov r4, r0 +10031eb8: 6810 ldr r0, [r2, #0] +10031eba: b089 sub sp, #36 ; 0x24 +10031ebc: 4611 mov r1, r2 +10031ebe: 9003 str r0, [sp, #12] +10031ec0: f851 0f04 ldr.w r0, [r1, #4]! +10031ec4: ab04 add r3, sp, #16 +10031ec6: 6849 ldr r1, [r1, #4] +10031ec8: 2500 movs r5, #0 +10031eca: c303 stmia r3!, {r0, r1} +10031ecc: f852 0f0c ldr.w r0, [r2, #12]! +10031ed0: ab06 add r3, sp, #24 +10031ed2: 6851 ldr r1, [r2, #4] +10031ed4: f10d 0910 add.w r9, sp, #16 +10031ed8: c303 stmia r3!, {r0, r1} +10031eda: 2100 movs r1, #0 +10031edc: 2316 movs r3, #22 +10031ede: 9300 str r3, [sp, #0] +10031ee0: 4620 mov r0, r4 +10031ee2: 460a mov r2, r1 +10031ee4: 460b mov r3, r1 +10031ee6: f7ff ff6f bl 10031dc8 +10031eea: af06 add r7, sp, #24 +10031eec: fa5f f880 uxtb.w r8, r0 +10031ef0: ab03 add r3, sp, #12 +10031ef2: 5cee ldrb r6, [r5, r3] +10031ef4: 2100 movs r1, #0 +10031ef6: 460a mov r2, r1 +10031ef8: 460b mov r3, r1 +10031efa: 9600 str r6, [sp, #0] +10031efc: 4620 mov r0, r4 +10031efe: f7ff ff63 bl 10031dc8 +10031f02: ebc8 0000 rsb r0, r8, r0 +10031f06: 2100 movs r1, #0 +10031f08: b240 sxtb r0, r0 +10031f0a: 9001 str r0, [sp, #4] +10031f0c: 9600 str r6, [sp, #0] +10031f0e: 4620 mov r0, r4 +10031f10: 460a mov r2, r1 +10031f12: 460b mov r3, r1 +10031f14: 3501 adds r5, #1 +10031f16: f7ff ffad bl 10031e74 +10031f1a: 2d04 cmp r5, #4 +10031f1c: d1e8 bne.n 10031ef0 +10031f1e: 2100 movs r1, #0 +10031f20: 236c movs r3, #108 ; 0x6c +10031f22: 9300 str r3, [sp, #0] +10031f24: 4620 mov r0, r4 +10031f26: 460a mov r2, r1 +10031f28: 460b mov r3, r1 +10031f2a: f7ff ff4d bl 10031dc8 +10031f2e: 2500 movs r5, #0 +10031f30: fa5f f880 uxtb.w r8, r0 +10031f34: f819 6005 ldrb.w r6, [r9, r5] +10031f38: 2100 movs r1, #0 +10031f3a: 460a mov r2, r1 +10031f3c: 460b mov r3, r1 +10031f3e: 9600 str r6, [sp, #0] +10031f40: 4620 mov r0, r4 +10031f42: f7ff ff41 bl 10031dc8 +10031f46: ebc8 0000 rsb r0, r8, r0 +10031f4a: 2100 movs r1, #0 +10031f4c: b240 sxtb r0, r0 +10031f4e: 9001 str r0, [sp, #4] +10031f50: 9600 str r6, [sp, #0] +10031f52: 4620 mov r0, r4 +10031f54: 460a mov r2, r1 +10031f56: 460b mov r3, r1 +10031f58: 3501 adds r5, #1 +10031f5a: f7ff ff8b bl 10031e74 +10031f5e: 2d08 cmp r5, #8 +10031f60: d1e8 bne.n 10031f34 +10031f62: 2100 movs r1, #0 +10031f64: 2387 movs r3, #135 ; 0x87 +10031f66: 9300 str r3, [sp, #0] +10031f68: 4620 mov r0, r4 +10031f6a: 460a mov r2, r1 +10031f6c: 460b mov r3, r1 +10031f6e: f7ff ff2b bl 10031dc8 +10031f72: 2500 movs r5, #0 +10031f74: fa5f f880 uxtb.w r8, r0 +10031f78: 5d7e ldrb r6, [r7, r5] +10031f7a: 2100 movs r1, #0 +10031f7c: 460a mov r2, r1 +10031f7e: 460b mov r3, r1 +10031f80: 9600 str r6, [sp, #0] +10031f82: 4620 mov r0, r4 +10031f84: f7ff ff20 bl 10031dc8 +10031f88: ebc8 0000 rsb r0, r8, r0 +10031f8c: 2100 movs r1, #0 +10031f8e: b240 sxtb r0, r0 +10031f90: 9001 str r0, [sp, #4] +10031f92: 9600 str r6, [sp, #0] +10031f94: 4620 mov r0, r4 +10031f96: 460a mov r2, r1 +10031f98: 460b mov r3, r1 +10031f9a: 3501 adds r5, #1 +10031f9c: f7ff ff6a bl 10031e74 +10031fa0: 2d08 cmp r5, #8 +10031fa2: d1e9 bne.n 10031f78 +10031fa4: b009 add sp, #36 ; 0x24 +10031fa6: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +10031faa: bf00 nop +10031fac: 10041c62 .word 0x10041c62 + +10031fb0 : +10031fb0: b510 push {r4, lr} +10031fb2: 4604 mov r4, r0 +10031fb4: f7ff ff38 bl 10031e28 +10031fb8: 4620 mov r0, r4 +10031fba: e8bd 4010 ldmia.w sp!, {r4, lr} +10031fbe: f7ff bf77 b.w 10031eb0 + +10031fc2 : +10031fc2: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} +10031fc6: 9f0a ldr r7, [sp, #40] ; 0x28 +10031fc8: f89d 902c ldrb.w r9, [sp, #44] ; 0x2c +10031fcc: 4605 mov r5, r0 +10031fce: 460e mov r6, r1 +10031fd0: 4692 mov sl, r2 +10031fd2: 4698 mov r8, r3 +10031fd4: 2400 movs r4, #0 +10031fd6: 454c cmp r4, r9 +10031fd8: da0f bge.n 10031ffa +10031fda: 5d3a ldrb r2, [r7, r4] +10031fdc: 4631 mov r1, r6 +10031fde: 4653 mov r3, sl +10031fe0: f8cd 8000 str.w r8, [sp] +10031fe4: 4628 mov r0, r5 +10031fe6: f7fc ffeb bl 1002efc0 +10031fea: 5d3b ldrb r3, [r7, r4] +10031fec: 4601 mov r1, r0 +10031fee: 4632 mov r2, r6 +10031ff0: 4628 mov r0, r5 +10031ff2: f7fc ff41 bl 1002ee78 +10031ff6: 3401 adds r4, #1 +10031ff8: e7ed b.n 10031fd6 +10031ffa: b002 add sp, #8 +10031ffc: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + +10032000 : +10032000: b5f0 push {r4, r5, r6, r7, lr} +10032002: 4617 mov r7, r2 +10032004: f241 62c8 movw r2, #5832 ; 0x16c8 +10032008: b085 sub sp, #20 +1003200a: 4604 mov r4, r0 +1003200c: 468c mov ip, r1 +1003200e: 5885 ldr r5, [r0, r2] +10032010: b953 cbnz r3, 10032028 +10032012: 4b11 ldr r3, [pc, #68] ; (10032058 ) +10032014: 6818 ldr r0, [r3, #0] +10032016: 9002 str r0, [sp, #8] +10032018: 6b2b ldr r3, [r5, #48] ; 0x30 +1003201a: b9db cbnz r3, 10032054 +1003201c: ab02 add r3, sp, #8 +1003201e: 9300 str r3, [sp, #0] +10032020: 2304 movs r3, #4 +10032022: 9301 str r3, [sp, #4] +10032024: 4620 mov r0, r4 +10032026: e011 b.n 1003204c +10032028: 2b01 cmp r3, #1 +1003202a: d102 bne.n 10032032 +1003202c: ae02 add r6, sp, #8 +1003202e: 4b0b ldr r3, [pc, #44] ; (1003205c ) +10032030: e003 b.n 1003203a +10032032: 2b02 cmp r3, #2 +10032034: d10e bne.n 10032054 +10032036: 4b0a ldr r3, [pc, #40] ; (10032060 ) +10032038: ae02 add r6, sp, #8 +1003203a: 6818 ldr r0, [r3, #0] +1003203c: 6859 ldr r1, [r3, #4] +1003203e: ab02 add r3, sp, #8 +10032040: c603 stmia r6!, {r0, r1} +10032042: 9300 str r3, [sp, #0] +10032044: 2308 movs r3, #8 +10032046: 9301 str r3, [sp, #4] +10032048: 4620 mov r0, r4 +1003204a: 4661 mov r1, ip +1003204c: 6aea ldr r2, [r5, #44] ; 0x2c +1003204e: 463b mov r3, r7 +10032050: f7ff ffb7 bl 10031fc2 +10032054: b005 add sp, #20 +10032056: bdf0 pop {r4, r5, r6, r7, pc} +10032058: 10041c62 .word 0x10041c62 +1003205c: 10041c66 .word 0x10041c66 +10032060: 10041c6e .word 0x10041c6e + +10032064 : +10032064: f241 63c8 movw r3, #5832 ; 0x16c8 +10032068: 58c3 ldr r3, [r0, r3] +1003206a: b570 push {r4, r5, r6, lr} +1003206c: 6b1b ldr r3, [r3, #48] ; 0x30 +1003206e: 4606 mov r6, r0 +10032070: 460c mov r4, r1 +10032072: 4615 mov r5, r2 +10032074: b91b cbnz r3, 1003207e +10032076: 4611 mov r1, r2 +10032078: 4622 mov r2, r4 +1003207a: f7ff ffc1 bl 10032000 +1003207e: 4630 mov r0, r6 +10032080: 4629 mov r1, r5 +10032082: 4622 mov r2, r4 +10032084: 2301 movs r3, #1 +10032086: f7ff ffbb bl 10032000 +1003208a: 4630 mov r0, r6 +1003208c: 4629 mov r1, r5 +1003208e: 4622 mov r2, r4 +10032090: 2302 movs r3, #2 +10032092: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10032096: f7ff bfb3 b.w 10032000 + +1003209a : +1003209a: 2903 cmp r1, #3 +1003209c: d006 beq.n 100320ac +1003209e: f990 3000 ldrsb.w r3, [r0] +100320a2: 2b3f cmp r3, #63 ; 0x3f +100320a4: bfa8 it ge +100320a6: 233f movge r3, #63 ; 0x3f +100320a8: b2db uxtb r3, r3 +100320aa: e000 b.n 100320ae +100320ac: 233f movs r3, #63 ; 0x3f +100320ae: f990 2001 ldrsb.w r2, [r0, #1] +100320b2: b25b sxtb r3, r3 +100320b4: f990 0002 ldrsb.w r0, [r0, #2] +100320b8: 4293 cmp r3, r2 +100320ba: bfa8 it ge +100320bc: 4613 movge r3, r2 +100320be: 4283 cmp r3, r0 +100320c0: bfb8 it lt +100320c2: 4618 movlt r0, r3 +100320c4: 4770 bx lr + +100320c6 : +100320c6: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +100320ca: f241 61c8 movw r1, #5832 ; 0x16c8 +100320ce: 5845 ldr r5, [r0, r1] +100320d0: f241 31f4 movw r1, #5108 ; 0x13f4 +100320d4: 5c41 ldrb r1, [r0, r1] +100320d6: b085 sub sp, #20 +100320d8: 2902 cmp r1, #2 +100320da: f89d 7030 ldrb.w r7, [sp, #48] ; 0x30 +100320de: f89d 4034 ldrb.w r4, [sp, #52] ; 0x34 +100320e2: d104 bne.n 100320ee +100320e4: f895 1043 ldrb.w r1, [r5, #67] ; 0x43 +100320e8: 2901 cmp r1, #1 +100320ea: d17b bne.n 100321e4 +100320ec: e001 b.n 100320f2 +100320ee: 2900 cmp r1, #0 +100320f0: d078 beq.n 100321e4 +100320f2: f895 6045 ldrb.w r6, [r5, #69] ; 0x45 +100320f6: b123 cbz r3, 10032102 +100320f8: 2b01 cmp r3, #1 +100320fa: f64f 73ff movw r3, #65535 ; 0xffff +100320fe: bf08 it eq +10032100: 2301 moveq r3, #1 +10032102: 2c18 cmp r4, #24 +10032104: d023 beq.n 1003214e +10032106: d80d bhi.n 10032124 +10032108: 2c0b cmp r4, #11 +1003210a: d023 beq.n 10032154 +1003210c: d804 bhi.n 10032118 +1003210e: 2c02 cmp r4, #2 +10032110: d020 beq.n 10032154 +10032112: 2c04 cmp r4, #4 +10032114: d01e beq.n 10032154 +10032116: e017 b.n 10032148 +10032118: 2c12 cmp r4, #18 +1003211a: d018 beq.n 1003214e +1003211c: 2c16 cmp r4, #22 +1003211e: d019 beq.n 10032154 +10032120: 2c0c cmp r4, #12 +10032122: e007 b.n 10032134 +10032124: 2c60 cmp r4, #96 ; 0x60 +10032126: d012 beq.n 1003214e +10032128: d806 bhi.n 10032138 +1003212a: 2c30 cmp r4, #48 ; 0x30 +1003212c: d00f beq.n 1003214e +1003212e: 2c48 cmp r4, #72 ; 0x48 +10032130: d00d beq.n 1003214e +10032132: 2c24 cmp r4, #36 ; 0x24 +10032134: d108 bne.n 10032148 +10032136: e00a b.n 1003214e +10032138: 2c6c cmp r4, #108 ; 0x6c +1003213a: d008 beq.n 1003214e +1003213c: d304 bcc.n 10032148 +1003213e: 3c80 subs r4, #128 ; 0x80 +10032140: 2c07 cmp r4, #7 +10032142: bf98 it ls +10032144: 2002 movls r0, #2 +10032146: d907 bls.n 10032158 +10032148: f64f 70ff movw r0, #65535 ; 0xffff +1003214c: e004 b.n 10032158 +1003214e: 2001 movs r0, #1 +10032150: 2300 movs r3, #0 +10032152: e001 b.n 10032158 +10032154: 2000 movs r0, #0 +10032156: 4603 mov r3, r0 +10032158: b92a cbnz r2, 10032166 +1003215a: f89d 4038 ldrb.w r4, [sp, #56] ; 0x38 +1003215e: 3c01 subs r4, #1 +10032160: b264 sxtb r4, r4 +10032162: b2a4 uxth r4, r4 +10032164: e001 b.n 1003216a +10032166: f64f 74ff movw r4, #65535 ; 0xffff +1003216a: fa0f f983 sxth.w r9, r3 +1003216e: f1b9 3fff cmp.w r9, #4294967295 +10032172: d037 beq.n 100321e4 +10032174: fa0f f880 sxth.w r8, r0 +10032178: f1b8 3fff cmp.w r8, #4294967295 +1003217c: d032 beq.n 100321e4 +1003217e: b224 sxth r4, r4 +10032180: 1c63 adds r3, r4, #1 +10032182: d02f beq.n 100321e4 +10032184: bb72 cbnz r2, 100321e4 +10032186: 4611 mov r1, r2 +10032188: a801 add r0, sp, #4 +1003218a: 220a movs r2, #10 +1003218c: f00b fd4a bl 1003dc24 +10032190: 232a movs r3, #42 ; 0x2a +10032192: 200e movs r0, #14 +10032194: fb03 f909 mul.w r9, r3, r9 +10032198: fb00 f808 mul.w r8, r0, r8 +1003219c: eb09 0208 add.w r2, r9, r8 +100321a0: 442a add r2, r5 +100321a2: 4422 add r2, r4 +100321a4: 443a add r2, r7 +100321a6: f892 3078 ldrb.w r3, [r2, #120] ; 0x78 +100321aa: f88d 3004 strb.w r3, [sp, #4] +100321ae: f892 30cc ldrb.w r3, [r2, #204] ; 0xcc +100321b2: f88d 3005 strb.w r3, [sp, #5] +100321b6: f892 3120 ldrb.w r3, [r2, #288] ; 0x120 +100321ba: f88d 3006 strb.w r3, [sp, #6] +100321be: 1ef3 subs r3, r6, #3 +100321c0: 2b01 cmp r3, #1 +100321c2: d805 bhi.n 100321d0 +100321c4: a801 add r0, sp, #4 +100321c6: 4631 mov r1, r6 +100321c8: 4622 mov r2, r4 +100321ca: f7ff ff66 bl 1003209a +100321ce: e00a b.n 100321e6 +100321d0: 2354 movs r3, #84 ; 0x54 +100321d2: fb03 9906 mla r9, r3, r6, r9 +100321d6: 44c8 add r8, r9 +100321d8: 4445 add r5, r8 +100321da: 442c add r4, r5 +100321dc: 4427 add r7, r4 +100321de: f897 0078 ldrb.w r0, [r7, #120] ; 0x78 +100321e2: e000 b.n 100321e6 +100321e4: 203f movs r0, #63 ; 0x3f +100321e6: b240 sxtb r0, r0 +100321e8: b005 add sp, #20 +100321ea: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + ... + +100321f0 : +100321f0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100321f4: f241 63c8 movw r3, #5832 ; 0x16c8 +100321f8: b08d sub sp, #52 ; 0x34 +100321fa: 58c4 ldr r4, [r0, r3] +100321fc: 9009 str r0, [sp, #36] ; 0x24 +100321fe: 2700 movs r7, #0 +10032200: f04f 0c2a mov.w ip, #42 ; 0x2a +10032204: fb0c 4507 mla r5, ip, r7, r4 +10032208: 2600 movs r6, #0 +1003220a: f105 0bcc add.w fp, r5, #204 ; 0xcc +1003220e: f04f 0800 mov.w r8, #0 +10032212: f04f 0900 mov.w r9, #0 +10032216: eb08 0305 add.w r3, r8, r5 +1003221a: 2254 movs r2, #84 ; 0x54 +1003221c: fb02 3209 mla r2, r2, r9, r3 +10032220: 9208 str r2, [sp, #32] +10032222: f892 1078 ldrb.w r1, [r2, #120] ; 0x78 +10032226: f8d4 2208 ldr.w r2, [r4, #520] ; 0x208 +1003222a: 2a01 cmp r2, #1 +1003222c: d112 bne.n 10032254 +1003222e: f8dd c024 ldr.w ip, [sp, #36] ; 0x24 +10032232: b2f0 uxtb r0, r6 +10032234: f50c 52b6 add.w r2, ip, #5824 ; 0x16c0 +10032238: 3208 adds r2, #8 +1003223a: 6812 ldr r2, [r2, #0] +1003223c: 2802 cmp r0, #2 +1003223e: bf08 it eq +10032240: f892 a176 ldrbeq.w sl, [r2, #374] ; 0x176 +10032244: d010 beq.n 10032268 +10032246: 2801 cmp r0, #1 +10032248: bf0c ite eq +1003224a: f892 a175 ldrbeq.w sl, [r2, #373] ; 0x175 +1003224e: f892 a174 ldrbne.w sl, [r2, #372] ; 0x174 +10032252: e009 b.n 10032268 +10032254: f8dd c024 ldr.w ip, [sp, #36] ; 0x24 +10032258: f50c 529f add.w r2, ip, #5088 ; 0x13e0 +1003225c: f892 a017 ldrb.w sl, [r2, #23] +10032260: ea4f 0a4a mov.w sl, sl, lsl #1 +10032264: fa5f fa8a uxtb.w sl, sl +10032268: b248 sxtb r0, r1 +1003226a: 283f cmp r0, #63 ; 0x3f +1003226c: 9005 str r0, [sp, #20] +1003226e: d004 beq.n 1003227a +10032270: 9a08 ldr r2, [sp, #32] +10032272: ebca 0101 rsb r1, sl, r1 +10032276: f882 1078 strb.w r1, [r2, #120] ; 0x78 +1003227a: f8df c0c0 ldr.w ip, [pc, #192] ; 1003233c +1003227e: f04f 4280 mov.w r2, #1073741824 ; 0x40000000 +10032282: 2300 movs r3, #0 +10032284: e9dc 0102 ldrd r0, r1, [ip, #8] +10032288: 4002 ands r2, r0 +1003228a: 400b ands r3, r1 +1003228c: 4313 orrs r3, r2 +1003228e: d039 beq.n 10032304 +10032290: 9905 ldr r1, [sp, #20] +10032292: f108 0001 add.w r0, r8, #1 +10032296: 9a08 ldr r2, [sp, #32] +10032298: 9000 str r0, [sp, #0] +1003229a: 9101 str r1, [sp, #4] +1003229c: f8cd a008 str.w sl, [sp, #8] +100322a0: f992 3078 ldrsb.w r3, [r2, #120] ; 0x78 +100322a4: 9006 str r0, [sp, #24] +100322a6: 9303 str r3, [sp, #12] +100322a8: 4823 ldr r0, [pc, #140] ; (10032338 ) +100322aa: 4633 mov r3, r6 +100322ac: 4649 mov r1, r9 +100322ae: 463a mov r2, r7 +100322b0: f7e8 fc66 bl 1001ab80 +100322b4: fa5f f389 uxtb.w r3, r9 +100322b8: 2b02 cmp r3, #2 +100322ba: d123 bne.n 10032304 +100322bc: 2300 movs r3, #0 +100322be: f8ad 302c strh.w r3, [sp, #44] ; 0x2c +100322c2: f88d 302e strb.w r3, [sp, #46] ; 0x2e +100322c6: f81b 3c54 ldrb.w r3, [fp, #-84] +100322ca: 2104 movs r1, #4 +100322cc: f88d 302c strb.w r3, [sp, #44] ; 0x2c +100322d0: f89b 3000 ldrb.w r3, [fp] +100322d4: fa0f f288 sxth.w r2, r8 +100322d8: f88d 302d strb.w r3, [sp, #45] ; 0x2d +100322dc: f89b 3054 ldrb.w r3, [fp, #84] ; 0x54 +100322e0: a80b add r0, sp, #44 ; 0x2c +100322e2: f88d 302e strb.w r3, [sp, #46] ; 0x2e +100322e6: f7ff fed8 bl 1003209a +100322ea: 9b06 ldr r3, [sp, #24] +100322ec: 9003 str r0, [sp, #12] +100322ee: 9300 str r3, [sp, #0] +100322f0: 233f movs r3, #63 ; 0x3f +100322f2: 9301 str r3, [sp, #4] +100322f4: f8cd a008 str.w sl, [sp, #8] +100322f8: 480f ldr r0, [pc, #60] ; (10032338 ) +100322fa: 2103 movs r1, #3 +100322fc: 463a mov r2, r7 +100322fe: 4633 mov r3, r6 +10032300: f7e8 fc3e bl 1001ab80 +10032304: f109 0901 add.w r9, r9, #1 +10032308: f1b9 0f03 cmp.w r9, #3 +1003230c: d183 bne.n 10032216 +1003230e: f108 0801 add.w r8, r8, #1 +10032312: f1b8 0f0e cmp.w r8, #14 +10032316: f10b 0b01 add.w fp, fp, #1 +1003231a: f47f af7a bne.w 10032212 +1003231e: 3601 adds r6, #1 +10032320: 2e03 cmp r6, #3 +10032322: f105 050e add.w r5, r5, #14 +10032326: f47f af70 bne.w 1003220a +1003232a: 3701 adds r7, #1 +1003232c: 2f02 cmp r7, #2 +1003232e: f47f af67 bne.w 10032200 +10032332: b00d add sp, #52 ; 0x34 +10032334: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10032338: 10041c88 .word 0x10041c88 +1003233c: 10000720 .word 0x10000720 + +10032340 : +10032340: b530 push {r4, r5, lr} +10032342: f241 63c8 movw r3, #5832 ; 0x16c8 +10032346: 58c3 ldr r3, [r0, r3] +10032348: f103 00fc add.w r0, r3, #252 ; 0xfc +1003234c: 2200 movs r2, #0 +1003234e: 2100 movs r1, #0 +10032350: 18d4 adds r4, r2, r3 +10032352: 440c add r4, r1 +10032354: 3101 adds r1, #1 +10032356: 253f movs r5, #63 ; 0x3f +10032358: 290e cmp r1, #14 +1003235a: f884 5078 strb.w r5, [r4, #120] ; 0x78 +1003235e: d1f7 bne.n 10032350 +10032360: 320e adds r2, #14 +10032362: 2a2a cmp r2, #42 ; 0x2a +10032364: d1f3 bne.n 1003234e +10032366: 2200 movs r2, #0 +10032368: 2100 movs r1, #0 +1003236a: 18d4 adds r4, r2, r3 +1003236c: 440c add r4, r1 +1003236e: 3101 adds r1, #1 +10032370: 253f movs r5, #63 ; 0x3f +10032372: 290e cmp r1, #14 +10032374: f884 50a2 strb.w r5, [r4, #162] ; 0xa2 +10032378: d1f7 bne.n 1003236a +1003237a: 320e adds r2, #14 +1003237c: 2a2a cmp r2, #42 ; 0x2a +1003237e: d1f3 bne.n 10032368 +10032380: 3354 adds r3, #84 ; 0x54 +10032382: 4283 cmp r3, r0 +10032384: d1e2 bne.n 1003234c +10032386: bd30 pop {r4, r5, pc} + +10032388 : +10032388: b570 push {r4, r5, r6, lr} +1003238a: 2902 cmp r1, #2 +1003238c: f241 66c8 movw r6, #5832 ; 0x16c8 +10032390: f89d 5010 ldrb.w r5, [sp, #16] +10032394: f89d 4014 ldrb.w r4, [sp, #20] +10032398: 5986 ldr r6, [r0, r6] +1003239a: d002 beq.n 100323a2 +1003239c: 1ec8 subs r0, r1, #3 +1003239e: 4241 negs r1, r0 +100323a0: 4141 adcs r1, r0 +100323a2: 2d01 cmp r5, #1 +100323a4: d103 bne.n 100323ae +100323a6: 2c01 cmp r4, #1 +100323a8: d12b bne.n 10032402 +100323aa: 2400 movs r4, #0 +100323ac: e009 b.n 100323c2 +100323ae: 2d02 cmp r5, #2 +100323b0: d102 bne.n 100323b8 +100323b2: 2c01 cmp r4, #1 +100323b4: d125 bne.n 10032402 +100323b6: e004 b.n 100323c2 +100323b8: 2d03 cmp r5, #3 +100323ba: d122 bne.n 10032402 +100323bc: 2c01 cmp r4, #1 +100323be: d120 bne.n 10032402 +100323c0: 2402 movs r4, #2 +100323c2: 2a01 cmp r2, #1 +100323c4: d11d bne.n 10032402 +100323c6: f89d 0018 ldrb.w r0, [sp, #24] +100323ca: 3801 subs r0, #1 +100323cc: b240 sxtb r0, r0 +100323ce: 1c42 adds r2, r0, #1 +100323d0: d017 beq.n 10032402 +100323d2: f89d 201c ldrb.w r2, [sp, #28] +100323d6: 2a3f cmp r2, #63 ; 0x3f +100323d8: bf28 it cs +100323da: 223f movcs r2, #63 ; 0x3f +100323dc: 1e9d subs r5, r3, #2 +100323de: 426b negs r3, r5 +100323e0: 416b adcs r3, r5 +100323e2: 2554 movs r5, #84 ; 0x54 +100323e4: 4369 muls r1, r5 +100323e6: 252a movs r5, #42 ; 0x2a +100323e8: fb05 1103 mla r1, r5, r3, r1 +100323ec: 230e movs r3, #14 +100323ee: fb03 1404 mla r4, r3, r4, r1 +100323f2: 4434 add r4, r6 +100323f4: 4404 add r4, r0 +100323f6: f994 3078 ldrsb.w r3, [r4, #120] ; 0x78 +100323fa: 429a cmp r2, r3 +100323fc: bfb8 it lt +100323fe: f884 2078 strblt.w r2, [r4, #120] ; 0x78 +10032402: bd70 pop {r4, r5, r6, pc} + +10032404 : +10032404: b510 push {r4, lr} +10032406: f89d 4008 ldrb.w r4, [sp, #8] +1003240a: 9402 str r4, [sp, #8] +1003240c: e8bd 4010 ldmia.w sp!, {r4, lr} +10032410: f7fc bdd6 b.w 1002efc0 + +10032414 : +10032414: f641 0269 movw r2, #6249 ; 0x1869 +10032418: 5c82 ldrb r2, [r0, r2] +1003241a: b508 push {r3, lr} +1003241c: b922 cbnz r2, 10032428 +1003241e: f241 7218 movw r2, #5912 ; 0x1718 +10032422: 5883 ldr r3, [r0, r2] +10032424: b103 cbz r3, 10032428 +10032426: 4798 blx r3 +10032428: bd08 pop {r3, pc} + +1003242a : +1003242a: f641 0269 movw r2, #6249 ; 0x1869 +1003242e: 5c82 ldrb r2, [r0, r2] +10032430: b508 push {r3, lr} +10032432: b922 cbnz r2, 1003243e +10032434: f241 721c movw r2, #5916 ; 0x171c +10032438: 5883 ldr r3, [r0, r2] +1003243a: b103 cbz r3, 1003243e +1003243c: 4798 blx r3 +1003243e: bd08 pop {r3, pc} + +10032440 : +10032440: f641 0269 movw r2, #6249 ; 0x1869 +10032444: 5c82 ldrb r2, [r0, r2] +10032446: b508 push {r3, lr} +10032448: b922 cbnz r2, 10032454 +1003244a: f241 7210 movw r2, #5904 ; 0x1710 +1003244e: 5883 ldr r3, [r0, r2] +10032450: b103 cbz r3, 10032454 +10032452: 4798 blx r3 +10032454: bd08 pop {r3, pc} + +10032456 : +10032456: f641 0269 movw r2, #6249 ; 0x1869 +1003245a: 5c82 ldrb r2, [r0, r2] +1003245c: b508 push {r3, lr} +1003245e: b922 cbnz r2, 1003246a +10032460: f241 7214 movw r2, #5908 ; 0x1714 +10032464: 5883 ldr r3, [r0, r2] +10032466: b103 cbz r3, 1003246a +10032468: 4798 blx r3 +1003246a: bd08 pop {r3, pc} + +1003246c : +1003246c: f641 0269 movw r2, #6249 ; 0x1869 +10032470: 5c82 ldrb r2, [r0, r2] +10032472: b508 push {r3, lr} +10032474: b922 cbnz r2, 10032480 +10032476: f241 62dc movw r2, #5852 ; 0x16dc +1003247a: 5883 ldr r3, [r0, r2] +1003247c: b103 cbz r3, 10032480 +1003247e: 4798 blx r3 +10032480: bd08 pop {r3, pc} + +10032482 : +10032482: f641 0269 movw r2, #6249 ; 0x1869 +10032486: 5c82 ldrb r2, [r0, r2] +10032488: b508 push {r3, lr} +1003248a: b922 cbnz r2, 10032496 +1003248c: f241 7208 movw r2, #5896 ; 0x1708 +10032490: 5883 ldr r3, [r0, r2] +10032492: b103 cbz r3, 10032496 +10032494: 4798 blx r3 +10032496: bd08 pop {r3, pc} + +10032498 : +10032498: f641 0269 movw r2, #6249 ; 0x1869 +1003249c: 5c82 ldrb r2, [r0, r2] +1003249e: b508 push {r3, lr} +100324a0: b922 cbnz r2, 100324ac +100324a2: f241 720c movw r2, #5900 ; 0x170c +100324a6: 5883 ldr r3, [r0, r2] +100324a8: b103 cbz r3, 100324ac +100324aa: 4798 blx r3 +100324ac: bd08 pop {r3, pc} + +100324ae : +100324ae: b5f8 push {r3, r4, r5, r6, r7, lr} +100324b0: f241 76c5 movw r6, #6085 ; 0x17c5 +100324b4: 2700 movs r7, #0 +100324b6: f241 63d4 movw r3, #5844 ; 0x16d4 +100324ba: 5587 strb r7, [r0, r6] +100324bc: 58c3 ldr r3, [r0, r3] +100324be: 4604 mov r4, r0 +100324c0: 4798 blx r3 +100324c2: 2801 cmp r0, #1 +100324c4: 4605 mov r5, r0 +100324c6: bf18 it ne +100324c8: 55a7 strbne r7, [r4, r6] +100324ca: d103 bne.n 100324d4 +100324cc: 55a0 strb r0, [r4, r6] +100324ce: 4620 mov r0, r4 +100324d0: f7ff fab4 bl 10031a3c +100324d4: 4628 mov r0, r5 +100324d6: bdf8 pop {r3, r4, r5, r6, r7, pc} + +100324d8 : +100324d8: f241 63d8 movw r3, #5848 ; 0x16d8 +100324dc: b510 push {r4, lr} +100324de: 58c3 ldr r3, [r0, r3] +100324e0: 4604 mov r4, r0 +100324e2: 4798 blx r3 +100324e4: 2801 cmp r0, #1 +100324e6: d103 bne.n 100324f0 +100324e8: 2200 movs r2, #0 +100324ea: f241 73c5 movw r3, #6085 ; 0x17c5 +100324ee: 54e2 strb r2, [r4, r3] +100324f0: bd10 pop {r4, pc} + +100324f2 : +100324f2: b508 push {r3, lr} +100324f4: f500 53ba add.w r3, r0, #5952 ; 0x1740 +100324f8: 681b ldr r3, [r3, #0] +100324fa: b103 cbz r3, 100324fe +100324fc: 4798 blx r3 +100324fe: bd08 pop {r3, pc} + +10032500 : +10032500: b508 push {r3, lr} +10032502: f241 7344 movw r3, #5956 ; 0x1744 +10032506: 58c3 ldr r3, [r0, r3] +10032508: b103 cbz r3, 1003250c +1003250a: 4798 blx r3 +1003250c: bd08 pop {r3, pc} + +1003250e : +1003250e: b508 push {r3, lr} +10032510: f241 734c movw r3, #5964 ; 0x174c +10032514: 58c3 ldr r3, [r0, r3] +10032516: b10b cbz r3, 1003251c +10032518: 4798 blx r3 +1003251a: bd08 pop {r3, pc} +1003251c: 4618 mov r0, r3 +1003251e: bd08 pop {r3, pc} + +10032520 : +10032520: b508 push {r3, lr} +10032522: f241 7348 movw r3, #5960 ; 0x1748 +10032526: 58c3 ldr r3, [r0, r3] +10032528: b10b cbz r3, 1003252e +1003252a: 4798 blx r3 +1003252c: bd08 pop {r3, pc} +1003252e: 4618 mov r0, r3 +10032530: bd08 pop {r3, pc} + +10032532 : +10032532: b510 push {r4, lr} +10032534: f241 7454 movw r4, #5972 ; 0x1754 +10032538: 5904 ldr r4, [r0, r4] +1003253a: b104 cbz r4, 1003253e +1003253c: 47a0 blx r4 +1003253e: bd10 pop {r4, pc} + +10032540 : +10032540: b510 push {r4, lr} +10032542: f241 7450 movw r4, #5968 ; 0x1750 +10032546: 5904 ldr r4, [r0, r4] +10032548: b104 cbz r4, 1003254c +1003254a: 47a0 blx r4 +1003254c: bd10 pop {r4, pc} + +1003254e : +1003254e: b508 push {r3, lr} +10032550: f641 0369 movw r3, #6249 ; 0x1869 +10032554: 5cc3 ldrb r3, [r0, r3] +10032556: b12b cbz r3, 10032564 +10032558: f641 035c movw r3, #6236 ; 0x185c +1003255c: 58c3 ldr r3, [r0, r3] +1003255e: 2b00 cmp r3, #0 +10032560: bf18 it ne +10032562: 4618 movne r0, r3 +10032564: f500 53b9 add.w r3, r0, #5920 ; 0x1720 +10032568: 681b ldr r3, [r3, #0] +1003256a: b103 cbz r3, 1003256e +1003256c: 4798 blx r3 +1003256e: bd08 pop {r3, pc} + +10032570 : +10032570: b508 push {r3, lr} +10032572: f641 0369 movw r3, #6249 ; 0x1869 +10032576: 5cc3 ldrb r3, [r0, r3] +10032578: b12b cbz r3, 10032586 +1003257a: f641 035c movw r3, #6236 ; 0x185c +1003257e: 58c3 ldr r3, [r0, r3] +10032580: 2b00 cmp r3, #0 +10032582: bf18 it ne +10032584: 4618 movne r0, r3 +10032586: f241 7324 movw r3, #5924 ; 0x1724 +1003258a: 58c3 ldr r3, [r0, r3] +1003258c: b103 cbz r3, 10032590 +1003258e: 4798 blx r3 +10032590: bd08 pop {r3, pc} + +10032592 : +10032592: b508 push {r3, lr} +10032594: f500 53b7 add.w r3, r0, #5856 ; 0x16e0 +10032598: 681b ldr r3, [r3, #0] +1003259a: b10b cbz r3, 100325a0 +1003259c: 4798 blx r3 +1003259e: bd08 pop {r3, pc} +100325a0: 4618 mov r0, r3 +100325a2: bd08 pop {r3, pc} + +100325a4 : +100325a4: b508 push {r3, lr} +100325a6: f241 63e4 movw r3, #5860 ; 0x16e4 +100325aa: 58c3 ldr r3, [r0, r3] +100325ac: b10b cbz r3, 100325b2 +100325ae: 4798 blx r3 +100325b0: bd08 pop {r3, pc} +100325b2: 4618 mov r0, r3 +100325b4: bd08 pop {r3, pc} + +100325b6 : +100325b6: b508 push {r3, lr} +100325b8: f241 63e8 movw r3, #5864 ; 0x16e8 +100325bc: 58c3 ldr r3, [r0, r3] +100325be: b103 cbz r3, 100325c2 +100325c0: 4798 blx r3 +100325c2: bd08 pop {r3, pc} + +100325c4 : +100325c4: b508 push {r3, lr} +100325c6: f241 736c movw r3, #5996 ; 0x176c +100325ca: 58c3 ldr r3, [r0, r3] +100325cc: b10b cbz r3, 100325d2 +100325ce: 4798 blx r3 +100325d0: bd08 pop {r3, pc} +100325d2: 4618 mov r0, r3 +100325d4: bd08 pop {r3, pc} + +100325d6 : +100325d6: b508 push {r3, lr} +100325d8: f241 7370 movw r3, #6000 ; 0x1770 +100325dc: 58c3 ldr r3, [r0, r3] +100325de: b10b cbz r3, 100325e4 +100325e0: 4798 blx r3 +100325e2: bd08 pop {r3, pc} +100325e4: 4618 mov r0, r3 +100325e6: bd08 pop {r3, pc} + +100325e8 : +100325e8: b508 push {r3, lr} +100325ea: f241 63ec movw r3, #5868 ; 0x16ec +100325ee: 58c3 ldr r3, [r0, r3] +100325f0: b10b cbz r3, 100325f6 +100325f2: 4798 blx r3 +100325f4: bd08 pop {r3, pc} +100325f6: 4618 mov r0, r3 +100325f8: bd08 pop {r3, pc} + +100325fa : +100325fa: b508 push {r3, lr} +100325fc: f241 63f0 movw r3, #5872 ; 0x16f0 +10032600: 58c3 ldr r3, [r0, r3] +10032602: b103 cbz r3, 10032606 +10032604: 4798 blx r3 +10032606: bd08 pop {r3, pc} + +10032608 : +10032608: b510 push {r4, lr} +1003260a: 460a mov r2, r1 +1003260c: 4603 mov r3, r0 +1003260e: b188 cbz r0, 10032634 +10032610: 6940 ldr r0, [r0, #20] +10032612: 6901 ldr r1, [r0, #16] +10032614: 06c9 lsls r1, r1, #27 +10032616: d408 bmi.n 1003262a +10032618: f241 7158 movw r1, #5976 ; 0x1758 +1003261c: 5844 ldr r4, [r0, r1] +1003261e: b11c cbz r4, 10032628 +10032620: f8d3 1100 ldr.w r1, [r3, #256] ; 0x100 +10032624: 47a0 blx r4 +10032626: bd10 pop {r4, pc} +10032628: bd10 pop {r4, pc} +1003262a: 4619 mov r1, r3 +1003262c: e8bd 4010 ldmia.w sp!, {r4, lr} +10032630: f7e8 bc16 b.w 1001ae60 +10032634: bd10 pop {r4, pc} + +10032636 : +10032636: b510 push {r4, lr} +10032638: f241 745c movw r4, #5980 ; 0x175c +1003263c: 5904 ldr r4, [r0, r4] +1003263e: b104 cbz r4, 10032642 +10032640: 47a0 blx r4 +10032642: bd10 pop {r4, pc} + +10032644 : +10032644: b508 push {r3, lr} +10032646: f500 53bb add.w r3, r0, #5984 ; 0x1760 +1003264a: 681b ldr r3, [r3, #0] +1003264c: b103 cbz r3, 10032650 +1003264e: 4798 blx r3 +10032650: bd08 pop {r3, pc} + +10032652 : +10032652: b508 push {r3, lr} +10032654: f241 7364 movw r3, #5988 ; 0x1764 +10032658: 58c3 ldr r3, [r0, r3] +1003265a: b103 cbz r3, 1003265e +1003265c: 4798 blx r3 +1003265e: bd08 pop {r3, pc} + +10032660 : +10032660: b508 push {r3, lr} +10032662: f241 7368 movw r3, #5992 ; 0x1768 +10032666: 58c3 ldr r3, [r0, r3] +10032668: b103 cbz r3, 1003266c +1003266a: 4798 blx r3 +1003266c: bd08 pop {r3, pc} + +1003266e : +1003266e: b510 push {r4, lr} +10032670: f500 53a0 add.w r3, r0, #5120 ; 0x1400 +10032674: f893 4035 ldrb.w r4, [r3, #53] ; 0x35 +10032678: b114 cbz r4, 10032680 +1003267a: 6f1b ldr r3, [r3, #112] ; 0x70 +1003267c: 2b02 cmp r3, #2 +1003267e: d00b beq.n 10032698 +10032680: f241 63c8 movw r3, #5832 ; 0x16c8 +10032684: 58c3 ldr r3, [r0, r3] +10032686: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 +1003268a: b92b cbnz r3, 10032698 +1003268c: f241 7374 movw r3, #6004 ; 0x1774 +10032690: 58c3 ldr r3, [r0, r3] +10032692: b11b cbz r3, 1003269c +10032694: 4798 blx r3 +10032696: bd10 pop {r4, pc} +10032698: 2000 movs r0, #0 +1003269a: bd10 pop {r4, pc} +1003269c: 4618 mov r0, r3 +1003269e: bd10 pop {r4, pc} + +100326a0 : +100326a0: b538 push {r3, r4, r5, lr} +100326a2: f500 54a0 add.w r4, r0, #5120 ; 0x1400 +100326a6: f894 5035 ldrb.w r5, [r4, #53] ; 0x35 +100326aa: b115 cbz r5, 100326b2 +100326ac: 6f24 ldr r4, [r4, #112] ; 0x70 +100326ae: 2c02 cmp r4, #2 +100326b0: d00a beq.n 100326c8 +100326b2: f241 64c8 movw r4, #5832 ; 0x16c8 +100326b6: 5904 ldr r4, [r0, r4] +100326b8: f894 4e94 ldrb.w r4, [r4, #3732] ; 0xe94 +100326bc: b924 cbnz r4, 100326c8 +100326be: f241 7478 movw r4, #6008 ; 0x1778 +100326c2: 5904 ldr r4, [r0, r4] +100326c4: b104 cbz r4, 100326c8 +100326c6: 47a0 blx r4 +100326c8: bd38 pop {r3, r4, r5, pc} + +100326ca : +100326ca: b510 push {r4, lr} +100326cc: f241 747c movw r4, #6012 ; 0x177c +100326d0: 5904 ldr r4, [r0, r4] +100326d2: b10c cbz r4, 100326d8 +100326d4: 47a0 blx r4 +100326d6: bd10 pop {r4, pc} +100326d8: 4620 mov r0, r4 +100326da: bd10 pop {r4, pc} + +100326dc : +100326dc: b537 push {r0, r1, r2, r4, r5, lr} +100326de: f500 54bc add.w r4, r0, #6016 ; 0x1780 +100326e2: 6824 ldr r4, [r4, #0] +100326e4: b114 cbz r4, 100326ec +100326e6: 9d06 ldr r5, [sp, #24] +100326e8: 9500 str r5, [sp, #0] +100326ea: 47a0 blx r4 +100326ec: b003 add sp, #12 +100326ee: bd30 pop {r4, r5, pc} + +100326f0 : +100326f0: b508 push {r3, lr} +100326f2: f241 7328 movw r3, #5928 ; 0x1728 +100326f6: 58c3 ldr r3, [r0, r3] +100326f8: b10b cbz r3, 100326fe +100326fa: 4798 blx r3 +100326fc: bd08 pop {r3, pc} +100326fe: 4618 mov r0, r3 +10032700: bd08 pop {r3, pc} + +10032702 : +10032702: b508 push {r3, lr} +10032704: f241 7330 movw r3, #5936 ; 0x1730 +10032708: 58c3 ldr r3, [r0, r3] +1003270a: b103 cbz r3, 1003270e +1003270c: 4798 blx r3 +1003270e: bd08 pop {r3, pc} + +10032710 : +10032710: b508 push {r3, lr} +10032712: f241 7334 movw r3, #5940 ; 0x1734 +10032716: 58c3 ldr r3, [r0, r3] +10032718: b103 cbz r3, 1003271c +1003271a: 4798 blx r3 +1003271c: bd08 pop {r3, pc} + +1003271e : +1003271e: b537 push {r0, r1, r2, r4, r5, lr} +10032720: f241 7438 movw r4, #5944 ; 0x1738 +10032724: 5904 ldr r4, [r0, r4] +10032726: b11c cbz r4, 10032730 +10032728: f89d 5018 ldrb.w r5, [sp, #24] +1003272c: 9500 str r5, [sp, #0] +1003272e: 47a0 blx r4 +10032730: b003 add sp, #12 +10032732: bd30 pop {r4, r5, pc} + +10032734 : +10032734: f641 0269 movw r2, #6249 ; 0x1869 +10032738: 5c82 ldrb r2, [r0, r2] +1003273a: b508 push {r3, lr} +1003273c: b922 cbnz r2, 10032748 +1003273e: f241 723c movw r2, #5948 ; 0x173c +10032742: 5883 ldr r3, [r0, r2] +10032744: b103 cbz r3, 10032748 +10032746: 4798 blx r3 +10032748: bd08 pop {r3, pc} + +1003274a : +1003274a: b507 push {r0, r1, r2, lr} +1003274c: 2904 cmp r1, #4 +1003274e: f88d 1007 strb.w r1, [sp, #7] +10032752: d806 bhi.n 10032762 +10032754: 214d movs r1, #77 ; 0x4d +10032756: f10d 0207 add.w r2, sp, #7 +1003275a: f7ff feca bl 100324f2 +1003275e: 2001 movs r0, #1 +10032760: e000 b.n 10032764 +10032762: 2000 movs r0, #0 +10032764: b003 add sp, #12 +10032766: f85d fb04 ldr.w pc, [sp], #4 + +1003276a : +1003276a: b507 push {r0, r1, r2, lr} +1003276c: 2904 cmp r1, #4 +1003276e: f88d 1007 strb.w r1, [sp, #7] +10032772: d806 bhi.n 10032782 +10032774: 214e movs r1, #78 ; 0x4e +10032776: f10d 0207 add.w r2, sp, #7 +1003277a: f7ff feba bl 100324f2 +1003277e: 2001 movs r0, #1 +10032780: e000 b.n 10032784 +10032782: 2000 movs r0, #0 +10032784: b003 add sp, #12 +10032786: f85d fb04 ldr.w pc, [sp], #4 + +1003278a : +1003278a: 231f movs r3, #31 +1003278c: 8003 strh r3, [r0, #0] +1003278e: 4770 bx lr + +10032790 : +10032790: 6903 ldr r3, [r0, #16] +10032792: b530 push {r4, r5, lr} +10032794: 681b ldr r3, [r3, #0] +10032796: f641 0548 movw r5, #6216 ; 0x1848 +1003279a: f8d3 29c0 ldr.w r2, [r3, #2496] ; 0x9c0 +1003279e: f8d3 4b98 ldr.w r4, [r3, #2968] ; 0xb98 +100327a2: f503 50c2 add.w r0, r3, #6208 ; 0x1840 +100327a6: 6002 str r2, [r0, #0] +100327a8: f641 003c movw r0, #6204 ; 0x183c +100327ac: 501c str r4, [r3, r0] +100327ae: f8d3 49c8 ldr.w r4, [r3, #2504] ; 0x9c8 +100327b2: f641 0150 movw r1, #6224 ; 0x1850 +100327b6: 515c str r4, [r3, r5] +100327b8: f8d3 4ba0 ldr.w r4, [r3, #2976] ; 0xba0 +100327bc: f641 0544 movw r5, #6212 ; 0x1844 +100327c0: 515c str r4, [r3, r5] +100327c2: f8d3 49b8 ldr.w r4, [r3, #2488] ; 0x9b8 +100327c6: f641 0254 movw r2, #6228 ; 0x1854 +100327ca: 505c str r4, [r3, r1] +100327cc: f8d3 1b90 ldr.w r1, [r3, #2960] ; 0xb90 +100327d0: f641 044c movw r4, #6220 ; 0x184c +100327d4: 5119 str r1, [r3, r4] +100327d6: f8d3 1ba8 ldr.w r1, [r3, #2984] ; 0xba8 +100327da: 4418 add r0, r3 +100327dc: 5099 str r1, [r3, r2] +100327de: bd30 pop {r4, r5, pc} + +100327e0 : +100327e0: 6903 ldr r3, [r0, #16] +100327e2: 2101 movs r1, #1 +100327e4: 681a ldr r2, [r3, #0] +100327e6: f641 0358 movw r3, #6232 ; 0x1858 +100327ea: b510 push {r4, lr} +100327ec: 54d1 strb r1, [r2, r3] +100327ee: 4604 mov r4, r0 +100327f0: f7e4 fffe bl 100177f0 +100327f4: b910 cbnz r0, 100327fc +100327f6: 4620 mov r0, r4 +100327f8: f7e4 fffe bl 100177f8 +100327fc: 2000 movs r0, #0 +100327fe: bd10 pop {r4, pc} + +10032800 : +10032800: b538 push {r3, r4, r5, lr} +10032802: 6903 ldr r3, [r0, #16] +10032804: 4605 mov r5, r0 +10032806: 681c ldr r4, [r3, #0] +10032808: f241 4355 movw r3, #5205 ; 0x1455 +1003280c: 5ce3 ldrb r3, [r4, r3] +1003280e: 2b01 cmp r3, #1 +10032810: d107 bne.n 10032822 +10032812: f241 4270 movw r2, #5232 ; 0x1470 +10032816: 58a2 ldr r2, [r4, r2] +10032818: 2a02 cmp r2, #2 +1003281a: bf04 itt eq +1003281c: f241 426c movweq r2, #5228 ; 0x146c +10032820: 50a3 streq r3, [r4, r2] +10032822: f641 0358 movw r3, #6232 ; 0x1858 +10032826: 2201 movs r2, #1 +10032828: 54e2 strb r2, [r4, r3] +1003282a: f241 4370 movw r3, #5232 ; 0x1470 +1003282e: 58e3 ldr r3, [r4, r3] +10032830: b9a3 cbnz r3, 1003285c +10032832: 4628 mov r0, r5 +10032834: f7e4 ffdc bl 100177f0 +10032838: b910 cbnz r0, 10032840 +1003283a: 4628 mov r0, r5 +1003283c: f7e4 ffdc bl 100177f8 +10032840: 4620 mov r0, r4 +10032842: f7ea f93f bl 1001cac4 +10032846: 4620 mov r0, r4 +10032848: f7eb f903 bl 1001da52 +1003284c: 4620 mov r0, r4 +1003284e: 2101 movs r1, #1 +10032850: f7eb f892 bl 1001d978 +10032854: 4620 mov r0, r4 +10032856: 2101 movs r1, #1 +10032858: f7ea fed9 bl 1001d60e +1003285c: 2000 movs r0, #0 +1003285e: bd38 pop {r3, r4, r5, pc} + +10032860 : +10032860: b570 push {r4, r5, r6, lr} +10032862: f641 0334 movw r3, #6196 ; 0x1834 +10032866: 58c5 ldr r5, [r0, r3] +10032868: 6903 ldr r3, [r0, #16] +1003286a: 4604 mov r4, r0 +1003286c: 07da lsls r2, r3, #31 +1003286e: d439 bmi.n 100328e4 +10032870: 6923 ldr r3, [r4, #16] +10032872: 051b lsls r3, r3, #20 +10032874: d43a bmi.n 100328ec +10032876: 4620 mov r0, r4 +10032878: f7e9 fb80 bl 1001bf7c +1003287c: 6a6b ldr r3, [r5, #36] ; 0x24 +1003287e: 4628 mov r0, r5 +10032880: 4798 blx r3 +10032882: 4620 mov r0, r4 +10032884: f005 f896 bl 100379b4 +10032888: 2201 movs r2, #1 +1003288a: f241 73ac movw r3, #6060 ; 0x17ac +1003288e: 50e2 str r2, [r4, r3] +10032890: f641 0338 movw r3, #6200 ; 0x1838 +10032894: 58e3 ldr r3, [r4, r3] +10032896: 4293 cmp r3, r2 +10032898: d119 bne.n 100328ce +1003289a: f641 0330 movw r3, #6192 ; 0x1830 +1003289e: 58e3 ldr r3, [r4, r3] +100328a0: b10b cbz r3, 100328a6 +100328a2: 4620 mov r0, r4 +100328a4: 4798 blx r3 +100328a6: f241 4355 movw r3, #5205 ; 0x1455 +100328aa: 5ce3 ldrb r3, [r4, r3] +100328ac: b913 cbnz r3, 100328b4 +100328ae: 4620 mov r0, r4 +100328b0: f005 f9d8 bl 10037c64 +100328b4: f241 76b0 movw r6, #6064 ; 0x17b0 +100328b8: 59a3 ldr r3, [r4, r6] +100328ba: b923 cbnz r3, 100328c6 +100328bc: 4620 mov r0, r4 +100328be: f7ff fe0b bl 100324d8 +100328c2: 2301 movs r3, #1 +100328c4: 51a3 str r3, [r4, r6] +100328c6: 2200 movs r2, #0 +100328c8: f641 0338 movw r3, #6200 ; 0x1838 +100328cc: 50e2 str r2, [r4, r3] +100328ce: 4620 mov r0, r4 +100328d0: f7ff fe68 bl 100325a4 +100328d4: 4620 mov r0, r4 +100328d6: f005 f8b3 bl 10037a40 +100328da: 4628 mov r0, r5 +100328dc: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +100328e0: f004 b887 b.w 100369f2 +100328e4: 2100 movs r1, #0 +100328e6: f7ef ff7b bl 100227e0 +100328ea: e7c1 b.n 10032870 +100328ec: 2100 movs r1, #0 +100328ee: 460a mov r2, r1 +100328f0: 460b mov r3, r1 +100328f2: 2004 movs r0, #4 +100328f4: f7da fe3a bl 1000d56c +100328f8: e7bd b.n 10032876 + +100328fa : +100328fa: f001 b9d9 b.w 10033cb0 + +100328fe : +100328fe: f001 b96e b.w 10033bde + +10032902 : +10032902: f8d0 3d08 ldr.w r3, [r0, #3336] ; 0xd08 +10032906: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1003290a: 2b02 cmp r3, #2 +1003290c: 4604 mov r4, r0 +1003290e: d15b bne.n 100329c8 +10032910: f241 1394 movw r3, #4500 ; 0x1194 +10032914: f810 8003 ldrb.w r8, [r0, r3] +10032918: f241 1398 movw r3, #4504 ; 0x1198 +1003291c: f850 9003 ldr.w r9, [r0, r3] +10032920: 6903 ldr r3, [r0, #16] +10032922: f241 3538 movw r5, #4920 ; 0x1338 +10032926: f013 0f10 tst.w r3, #16 +1003292a: d061 beq.n 100329f0 +1003292c: 5940 ldr r0, [r0, r5] +1003292e: f500 703d add.w r0, r0, #756 ; 0x2f4 +10032932: f004 fa88 bl 10036e46 +10032936: f241 333c movw r3, #4924 ; 0x133c +1003293a: 58e0 ldr r0, [r4, r3] +1003293c: f500 703d add.w r0, r0, #756 ; 0x2f4 +10032940: f004 fa81 bl 10036e46 +10032944: f504 539a add.w r3, r4, #4928 ; 0x1340 +10032948: 6818 ldr r0, [r3, #0] +1003294a: f500 703d add.w r0, r0, #756 ; 0x2f4 +1003294e: f004 fa7a bl 10036e46 +10032952: f241 3a30 movw sl, #4912 ; 0x1330 +10032956: f241 3734 movw r7, #4916 ; 0x1334 +1003295a: f854 600a ldr.w r6, [r4, sl] +1003295e: 59e5 ldr r5, [r4, r7] +10032960: f604 5008 addw r0, r4, #3336 ; 0xd08 +10032964: 2100 movs r1, #0 +10032966: f44f 62d0 mov.w r2, #1664 ; 0x680 +1003296a: f7e4 fd71 bl 10017450 +1003296e: f844 600a str.w r6, [r4, sl] +10032972: 4630 mov r0, r6 +10032974: 51e5 str r5, [r4, r7] +10032976: 2100 movs r1, #0 +10032978: 462a mov r2, r5 +1003297a: f026 0603 bic.w r6, r6, #3 +1003297e: f7e4 fd67 bl 10017450 +10032982: 3604 adds r6, #4 +10032984: f241 3338 movw r3, #4920 ; 0x1338 +10032988: f5b5 6fc9 cmp.w r5, #1608 ; 0x648 +1003298c: 50e6 str r6, [r4, r3] +1003298e: d30d bcc.n 100329ac +10032990: f241 333c movw r3, #4924 ; 0x133c +10032994: f506 7249 add.w r2, r6, #804 ; 0x324 +10032998: 50e2 str r2, [r4, r3] +1003299a: f640 136b movw r3, #2411 ; 0x96b +1003299e: 429d cmp r5, r3 +100329a0: d904 bls.n 100329ac +100329a2: f504 539a add.w r3, r4, #4928 ; 0x1340 +100329a6: f506 66c9 add.w r6, r6, #1608 ; 0x648 +100329aa: 601e str r6, [r3, #0] +100329ac: f241 1394 movw r3, #4500 ; 0x1194 +100329b0: f804 8003 strb.w r8, [r4, r3] +100329b4: f241 1398 movw r3, #4504 ; 0x1198 +100329b8: f844 9003 str.w r9, [r4, r3] +100329bc: 2200 movs r2, #0 +100329be: f241 036c movw r3, #4204 ; 0x106c +100329c2: 50e2 str r2, [r4, r3] +100329c4: 2201 movs r2, #1 +100329c6: e00e b.n 100329e6 +100329c8: 2300 movs r3, #0 +100329ca: 2201 movs r2, #1 +100329cc: f241 016c movw r1, #4204 ; 0x106c +100329d0: f8c0 3d08 str.w r3, [r0, #3336] ; 0xd08 +100329d4: f8c0 3d0c str.w r3, [r0, #3340] ; 0xd0c +100329d8: f8c0 3d10 str.w r3, [r0, #3344] ; 0xd10 +100329dc: f8c0 3d64 str.w r3, [r0, #3428] ; 0xd64 +100329e0: f8c0 2d68 str.w r2, [r0, #3432] ; 0xd68 +100329e4: 5043 str r3, [r0, r1] +100329e6: f241 0370 movw r3, #4208 ; 0x1070 +100329ea: 50e2 str r2, [r4, r3] +100329ec: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +100329f0: 071b lsls r3, r3, #28 +100329f2: d5ae bpl.n 10032952 +100329f4: 5940 ldr r0, [r0, r5] +100329f6: f500 703d add.w r0, r0, #756 ; 0x2f4 +100329fa: f004 fa24 bl 10036e46 +100329fe: 5960 ldr r0, [r4, r5] +10032a00: f500 7041 add.w r0, r0, #772 ; 0x304 +10032a04: e7a3 b.n 1003294e + +10032a06 : +10032a06: b510 push {r4, lr} +10032a08: 4604 mov r4, r0 +10032a0a: f001 f96a bl 10033ce2 +10032a0e: f8d4 2d10 ldr.w r2, [r4, #3344] ; 0xd10 +10032a12: 2a03 cmp r2, #3 +10032a14: d817 bhi.n 10032a46 +10032a16: 2100 movs r1, #0 +10032a18: 460b mov r3, r1 +10032a1a: b2d2 uxtb r2, r2 +10032a1c: 4620 mov r0, r4 +10032a1e: f7ea f8f1 bl 1001cc04 +10032a22: f8d4 0d10 ldr.w r0, [r4, #3344] ; 0xd10 +10032a26: 2210 movs r2, #16 +10032a28: eb04 1000 add.w r0, r4, r0, lsl #4 +10032a2c: f600 5014 addw r0, r0, #3348 ; 0xd14 +10032a30: 2100 movs r1, #0 +10032a32: f7e4 fd0d bl 10017450 +10032a36: f8d4 3d10 ldr.w r3, [r4, #3344] ; 0xd10 +10032a3a: 2200 movs r2, #0 +10032a3c: f503 7355 add.w r3, r3, #852 ; 0x354 +10032a40: eb04 0383 add.w r3, r4, r3, lsl #2 +10032a44: 605a str r2, [r3, #4] +10032a46: 4620 mov r0, r4 +10032a48: e8bd 4010 ldmia.w sp!, {r4, lr} +10032a4c: f7ff bf59 b.w 10032902 + +10032a50 : +10032a50: 4601 mov r1, r0 +10032a52: b5f8 push {r3, r4, r5, r6, r7, lr} +10032a54: f641 0088 movw r0, #6280 ; 0x1888 +10032a58: b111 cbz r1, 10032a60 +10032a5a: f003 ffa9 bl 100369b0 +10032a5e: e001 b.n 10032a64 +10032a60: f003 ffb1 bl 100369c6 +10032a64: 4606 mov r6, r0 +10032a66: 2800 cmp r0, #0 +10032a68: d07f beq.n 10032b6a +10032a6a: 6903 ldr r3, [r0, #16] +10032a6c: f641 0234 movw r2, #6196 ; 0x1834 +10032a70: 681b ldr r3, [r3, #0] +10032a72: 2500 movs r5, #0 +10032a74: 5098 str r0, [r3, r2] +10032a76: 4a3e ldr r2, [pc, #248] ; (10032b70 ) +10032a78: f503 549c add.w r4, r3, #4992 ; 0x1380 +10032a7c: 6202 str r2, [r0, #32] +10032a7e: 4a3d ldr r2, [pc, #244] ; (10032b74 ) +10032a80: 3408 adds r4, #8 +10032a82: 6242 str r2, [r0, #36] ; 0x24 +10032a84: 4a3c ldr r2, [pc, #240] ; (10032b78 ) +10032a86: 493d ldr r1, [pc, #244] ; (10032b7c ) +10032a88: 6282 str r2, [r0, #40] ; 0x28 +10032a8a: 4a3d ldr r2, [pc, #244] ; (10032b80 ) +10032a8c: 2702 movs r7, #2 +10032a8e: 6302 str r2, [r0, #48] ; 0x30 +10032a90: 4a3c ldr r2, [pc, #240] ; (10032b84 ) +10032a92: 62c2 str r2, [r0, #44] ; 0x2c +10032a94: f241 3288 movw r2, #5000 ; 0x1388 +10032a98: 549d strb r5, [r3, r2] +10032a9a: f104 0008 add.w r0, r4, #8 +10032a9e: 2203 movs r2, #3 +10032aa0: f7e4 fcc6 bl 10017430 +10032aa4: 2303 movs r3, #3 +10032aa6: 6063 str r3, [r4, #4] +10032aa8: 2301 movs r3, #1 +10032aaa: f884 302c strb.w r3, [r4, #44] ; 0x2c +10032aae: f884 3030 strb.w r3, [r4, #48] ; 0x30 +10032ab2: f884 302e strb.w r3, [r4, #46] ; 0x2e +10032ab6: f884 3035 strb.w r3, [r4, #53] ; 0x35 +10032aba: f884 3037 strb.w r3, [r4, #55] ; 0x37 +10032abe: f884 3036 strb.w r3, [r4, #54] ; 0x36 +10032ac2: f884 303d strb.w r3, [r4, #61] ; 0x3d +10032ac6: f884 3044 strb.w r3, [r4, #68] ; 0x44 +10032aca: f884 3045 strb.w r3, [r4, #69] ; 0x45 +10032ace: 2305 movs r3, #5 +10032ad0: f884 3048 strb.w r3, [r4, #72] ; 0x48 +10032ad4: 4b2c ldr r3, [pc, #176] ; (10032b88 ) +10032ad6: 220b movs r2, #11 +10032ad8: 781b ldrb r3, [r3, #0] +10032ada: f884 202d strb.w r2, [r4, #45] ; 0x2d +10032ade: f640 122b movw r2, #2347 ; 0x92b +10032ae2: 8662 strh r2, [r4, #50] ; 0x32 +10032ae4: f884 3049 strb.w r3, [r4, #73] ; 0x49 +10032ae8: 2264 movs r2, #100 ; 0x64 +10032aea: 2359 movs r3, #89 ; 0x59 +10032aec: f884 304b strb.w r3, [r4, #75] ; 0x4b +10032af0: 6422 str r2, [r4, #64] ; 0x40 +10032af2: 2110 movs r1, #16 +10032af4: 4a25 ldr r2, [pc, #148] ; (10032b8c ) +10032af6: f884 702f strb.w r7, [r4, #47] ; 0x2f +10032afa: f884 5034 strb.w r5, [r4, #52] ; 0x34 +10032afe: f884 7038 strb.w r7, [r4, #56] ; 0x38 +10032b02: f884 5039 strb.w r5, [r4, #57] ; 0x39 +10032b06: f884 503a strb.w r5, [r4, #58] ; 0x3a +10032b0a: f884 503b strb.w r5, [r4, #59] ; 0x3b +10032b0e: f884 503c strb.w r5, [r4, #60] ; 0x3c +10032b12: f884 503e strb.w r5, [r4, #62] ; 0x3e +10032b16: f884 5046 strb.w r5, [r4, #70] ; 0x46 +10032b1a: f884 5047 strb.w r5, [r4, #71] ; 0x47 +10032b1e: f884 504a strb.w r5, [r4, #74] ; 0x4a +10032b22: f104 004c add.w r0, r4, #76 ; 0x4c +10032b26: f7e7 ffd5 bl 1001aad4 +10032b2a: f104 005c add.w r0, r4, #92 ; 0x5c +10032b2e: 2110 movs r1, #16 +10032b30: 4a17 ldr r2, [pc, #92] ; (10032b90 ) +10032b32: f7e7 ffcf bl 1001aad4 +10032b36: 230e movs r3, #14 +10032b38: f884 306f strb.w r3, [r4, #111] ; 0x6f +10032b3c: 4b15 ldr r3, [pc, #84] ; (10032b94 ) +10032b3e: f884 706c strb.w r7, [r4, #108] ; 0x6c +10032b42: 781b ldrb r3, [r3, #0] +10032b44: f884 706d strb.w r7, [r4, #109] ; 0x6d +10032b48: f884 3071 strb.w r3, [r4, #113] ; 0x71 +10032b4c: 4b12 ldr r3, [pc, #72] ; (10032b98 ) +10032b4e: f884 506e strb.w r5, [r4, #110] ; 0x6e +10032b52: 781b ldrb r3, [r3, #0] +10032b54: f884 5073 strb.w r5, [r4, #115] ; 0x73 +10032b58: f884 3072 strb.w r3, [r4, #114] ; 0x72 +10032b5c: 2304 movs r3, #4 +10032b5e: f884 3074 strb.w r3, [r4, #116] ; 0x74 +10032b62: 4b0e ldr r3, [pc, #56] ; (10032b9c ) +10032b64: 781b ldrb r3, [r3, #0] +10032b66: f884 3075 strb.w r3, [r4, #117] ; 0x75 +10032b6a: 4630 mov r0, r6 +10032b6c: bdf8 pop {r3, r4, r5, r6, r7, pc} +10032b6e: bf00 nop +10032b70: 10033059 .word 0x10033059 +10032b74: 10032801 .word 0x10032801 +10032b78: 10036965 .word 0x10036965 +10032b7c: 10041d42 .word 0x10041d42 +10032b80: 10032791 .word 0x10032791 +10032b84: 10034d79 .word 0x10034d79 +10032b88: 1004de08 .word 0x1004de08 +10032b8c: 1003fc02 .word 0x1003fc02 +10032b90: 10041d46 .word 0x10041d46 +10032b94: 1004de10 .word 0x1004de10 +10032b98: 10044fbc .word 0x10044fbc +10032b9c: 1004de20 .word 0x1004de20 + +10032ba0 : +10032ba0: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +10032ba4: 4605 mov r5, r0 +10032ba6: 2000 movs r0, #0 +10032ba8: 460f mov r7, r1 +10032baa: f7ff ff51 bl 10032a50 +10032bae: 4606 mov r6, r0 +10032bb0: 2800 cmp r0, #0 +10032bb2: f000 80e6 beq.w 10032d82 +10032bb6: 4b7a ldr r3, [pc, #488] ; (10032da0 ) +10032bb8: 4629 mov r1, r5 +10032bba: 6203 str r3, [r0, #32] +10032bbc: 4b79 ldr r3, [pc, #484] ; (10032da4 ) +10032bbe: f641 0288 movw r2, #6280 ; 0x1888 +10032bc2: 6243 str r3, [r0, #36] ; 0x24 +10032bc4: 6903 ldr r3, [r0, #16] +10032bc6: f04f 0800 mov.w r8, #0 +10032bca: 681c ldr r4, [r3, #0] +10032bcc: 4620 mov r0, r4 +10032bce: f7e4 fc2f bl 10017430 +10032bd2: f104 000c add.w r0, r4, #12 +10032bd6: 2100 movs r1, #0 +10032bd8: f240 5204 movw r2, #1284 ; 0x504 +10032bdc: f7e4 fc38 bl 10017450 +10032be0: f895 349e ldrb.w r3, [r5, #1182] ; 0x49e +10032be4: f504 60a2 add.w r0, r4, #1296 ; 0x510 +10032be8: f884 349e strb.w r3, [r4, #1182] ; 0x49e +10032bec: 2100 movs r1, #0 +10032bee: f44f 727e mov.w r2, #1016 ; 0x3f8 +10032bf2: f7e4 fc2d bl 10017450 +10032bf6: f504 6046 add.w r0, r4, #3168 ; 0xc60 +10032bfa: 2100 movs r1, #0 +10032bfc: 22a4 movs r2, #164 ; 0xa4 +10032bfe: f7e4 fc27 bl 10017450 +10032c02: f641 0364 movw r3, #6244 ; 0x1864 +10032c06: 58ea ldr r2, [r5, r3] +10032c08: 4620 mov r0, r4 +10032c0a: 50e2 str r2, [r4, r3] +10032c0c: f641 036c movw r3, #6252 ; 0x186c +10032c10: 58ea ldr r2, [r5, r3] +10032c12: 50e2 str r2, [r4, r3] +10032c14: f641 0370 movw r3, #6256 ; 0x1870 +10032c18: 58ea ldr r2, [r5, r3] +10032c1a: 50e2 str r2, [r4, r3] +10032c1c: f505 53c3 add.w r3, r5, #6240 ; 0x1860 +10032c20: 681a ldr r2, [r3, #0] +10032c22: f504 53c3 add.w r3, r4, #6240 ; 0x1860 +10032c26: 601a str r2, [r3, #0] +10032c28: f641 0338 movw r3, #6200 ; 0x1838 +10032c2c: f844 8003 str.w r8, [r4, r3] +10032c30: f641 0258 movw r2, #6232 ; 0x1858 +10032c34: 2301 movs r3, #1 +10032c36: 54a3 strb r3, [r4, r2] +10032c38: f241 72c5 movw r2, #6085 ; 0x17c5 +10032c3c: f804 8002 strb.w r8, [r4, r2] +10032c40: f641 0268 movw r2, #6248 ; 0x1868 +10032c44: f804 8002 strb.w r8, [r4, r2] +10032c48: f641 0269 movw r2, #6249 ; 0x1869 +10032c4c: 54a3 strb r3, [r4, r2] +10032c4e: f641 025c movw r2, #6236 ; 0x185c +10032c52: 50a5 str r5, [r4, r2] +10032c54: f641 026a movw r2, #6250 ; 0x186a +10032c58: 54a3 strb r3, [r4, r2] +10032c5a: f641 0334 movw r3, #6196 ; 0x1834 +10032c5e: 50e6 str r6, [r4, r3] +10032c60: 68a3 ldr r3, [r4, #8] +10032c62: 7c1a ldrb r2, [r3, #16] +10032c64: 605c str r4, [r3, #4] +10032c66: 1c51 adds r1, r2, #1 +10032c68: 7419 strb r1, [r3, #16] +10032c6a: 3202 adds r2, #2 +10032c6c: f843 4022 str.w r4, [r3, r2, lsl #2] +10032c70: 886b ldrh r3, [r5, #2] +10032c72: 8063 strh r3, [r4, #2] +10032c74: 882b ldrh r3, [r5, #0] +10032c76: 8023 strh r3, [r4, #0] +10032c78: f008 f82e bl 1003acd8 +10032c7c: f504 53b7 add.w r3, r4, #5856 ; 0x16e0 +10032c80: f8c3 8000 str.w r8, [r3] +10032c84: f241 63e4 movw r3, #5860 ; 0x16e4 +10032c88: f844 8003 str.w r8, [r4, r3] +10032c8c: f641 032c movw r3, #6188 ; 0x182c +10032c90: 58ea ldr r2, [r5, r3] +10032c92: 4620 mov r0, r4 +10032c94: 50e2 str r2, [r4, r3] +10032c96: f641 0330 movw r3, #6192 ; 0x1830 +10032c9a: 58ea ldr r2, [r5, r3] +10032c9c: 50e2 str r2, [r4, r3] +10032c9e: f7ff fbcf bl 10032440 +10032ca2: 4620 mov r0, r4 +10032ca4: f7ff fbb6 bl 10032414 +10032ca8: 4620 mov r0, r4 +10032caa: f004 ff33 bl 10037b14 +10032cae: 2801 cmp r0, #1 +10032cb0: d168 bne.n 10032d84 +10032cb2: b917 cbnz r7, 10032cba +10032cb4: f504 579f add.w r7, r4, #5088 ; 0x13e0 +10032cb8: 3704 adds r7, #4 +10032cba: 4639 mov r1, r7 +10032cbc: 4630 mov r0, r6 +10032cbe: f003 ff5a bl 10036b76 +10032cc2: f505 51a4 add.w r1, r5, #5248 ; 0x1480 +10032cc6: 2206 movs r2, #6 +10032cc8: 4668 mov r0, sp +10032cca: 3119 adds r1, #25 +10032ccc: f7e4 fbb0 bl 10017430 +10032cd0: f89d 2000 ldrb.w r2, [sp] +10032cd4: f89d 3005 ldrb.w r3, [sp, #5] +10032cd8: 2aff cmp r2, #255 ; 0xff +10032cda: d112 bne.n 10032d02 +10032cdc: f89d 2001 ldrb.w r2, [sp, #1] +10032ce0: 2aff cmp r2, #255 ; 0xff +10032ce2: d12d bne.n 10032d40 +10032ce4: f89d 2002 ldrb.w r2, [sp, #2] +10032ce8: 2aff cmp r2, #255 ; 0xff +10032cea: d129 bne.n 10032d40 +10032cec: f89d 2003 ldrb.w r2, [sp, #3] +10032cf0: 2aff cmp r2, #255 ; 0xff +10032cf2: d125 bne.n 10032d40 +10032cf4: f89d 2004 ldrb.w r2, [sp, #4] +10032cf8: 2aff cmp r2, #255 ; 0xff +10032cfa: d121 bne.n 10032d40 +10032cfc: 2bff cmp r3, #255 ; 0xff +10032cfe: d11f bne.n 10032d40 +10032d00: e00d b.n 10032d1e +10032d02: b9ea cbnz r2, 10032d40 +10032d04: f89d 2001 ldrb.w r2, [sp, #1] +10032d08: b9d2 cbnz r2, 10032d40 +10032d0a: f89d 2002 ldrb.w r2, [sp, #2] +10032d0e: b9ba cbnz r2, 10032d40 +10032d10: f89d 2003 ldrb.w r2, [sp, #3] +10032d14: b9a2 cbnz r2, 10032d40 +10032d16: f89d 2004 ldrb.w r2, [sp, #4] +10032d1a: b98a cbnz r2, 10032d40 +10032d1c: b983 cbnz r3, 10032d40 +10032d1e: 2300 movs r3, #0 +10032d20: f88d 3000 strb.w r3, [sp] +10032d24: 23e0 movs r3, #224 ; 0xe0 +10032d26: f88d 3001 strb.w r3, [sp, #1] +10032d2a: 234c movs r3, #76 ; 0x4c +10032d2c: f88d 3002 strb.w r3, [sp, #2] +10032d30: 2387 movs r3, #135 ; 0x87 +10032d32: f88d 3003 strb.w r3, [sp, #3] +10032d36: 2311 movs r3, #17 +10032d38: f88d 3004 strb.w r3, [sp, #4] +10032d3c: 2322 movs r3, #34 ; 0x22 +10032d3e: e000 b.n 10032d42 +10032d40: 3301 adds r3, #1 +10032d42: f504 50a4 add.w r0, r4, #5248 ; 0x1480 +10032d46: 3019 adds r0, #25 +10032d48: 4669 mov r1, sp +10032d4a: 2206 movs r2, #6 +10032d4c: f88d 3005 strb.w r3, [sp, #5] +10032d50: f641 0774 movw r7, #6260 ; 0x1874 +10032d54: f7e4 fb6c bl 10017430 +10032d58: f106 0014 add.w r0, r6, #20 +10032d5c: 4669 mov r1, sp +10032d5e: 2206 movs r2, #6 +10032d60: f7e4 fb66 bl 10017430 +10032d64: 59ee ldr r6, [r5, r7] +10032d66: f641 035c movw r3, #6236 ; 0x185c +10032d6a: 50ec str r4, [r5, r3] +10032d6c: b99e cbnz r6, 10032d96 +10032d6e: 2004 movs r0, #4 +10032d70: f7e4 fd0e bl 10017790 +10032d74: 2301 movs r3, #1 +10032d76: 51e8 str r0, [r5, r7] +10032d78: 51e0 str r0, [r4, r7] +10032d7a: 7003 strb r3, [r0, #0] +10032d7c: 7046 strb r6, [r0, #1] +10032d7e: 7086 strb r6, [r0, #2] +10032d80: e009 b.n 10032d96 +10032d82: 4604 mov r4, r0 +10032d84: 4620 mov r0, r4 +10032d86: f004 fe5b bl 10037a40 +10032d8a: 4630 mov r0, r6 +10032d8c: b126 cbz r6, 10032d98 +10032d8e: f003 fe30 bl 100369f2 +10032d92: 2000 movs r0, #0 +10032d94: e000 b.n 10032d98 +10032d96: 4620 mov r0, r4 +10032d98: b002 add sp, #8 +10032d9a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10032d9e: bf00 nop +10032da0: 10033031 .word 0x10033031 +10032da4: 100327e1 .word 0x100327e1 + +10032da8 : +10032da8: b510 push {r4, lr} +10032daa: 4604 mov r4, r0 +10032dac: b330 cbz r0, 10032dfc +10032dae: f004 fe01 bl 100379b4 +10032db2: f641 0338 movw r3, #6200 ; 0x1838 +10032db6: 58e3 ldr r3, [r4, r3] +10032db8: 2b01 cmp r3, #1 +10032dba: d11f bne.n 10032dfc +10032dbc: f241 72ac movw r2, #6060 ; 0x17ac +10032dc0: 50a3 str r3, [r4, r2] +10032dc2: f504 53bf add.w r3, r4, #6112 ; 0x17e0 +10032dc6: 3318 adds r3, #24 +10032dc8: 681b ldr r3, [r3, #0] +10032dca: 2b01 cmp r3, #1 +10032dcc: d103 bne.n 10032dd6 +10032dce: 2001 movs r0, #1 +10032dd0: f7e4 fc60 bl 10017694 +10032dd4: e7f5 b.n 10032dc2 +10032dd6: f504 53c2 add.w r3, r4, #6208 ; 0x1840 +10032dda: 69d8 ldr r0, [r3, #28] +10032ddc: f600 1008 addw r0, r0, #2312 ; 0x908 +10032de0: f7e4 fb41 bl 10017466 +10032de4: 2800 cmp r0, #0 +10032de6: d0f2 beq.n 10032dce +10032de8: f641 0330 movw r3, #6192 ; 0x1830 +10032dec: 58e3 ldr r3, [r4, r3] +10032dee: b10b cbz r3, 10032df4 +10032df0: 4620 mov r0, r4 +10032df2: 4798 blx r3 +10032df4: 2200 movs r2, #0 +10032df6: f641 0338 movw r3, #6200 ; 0x1838 +10032dfa: 50e2 str r2, [r4, r3] +10032dfc: bd10 pop {r4, pc} + +10032dfe : +10032dfe: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10032e02: 4604 mov r4, r0 +10032e04: b1f0 cbz r0, 10032e44 +10032e06: f641 0369 movw r3, #6249 ; 0x1869 +10032e0a: 5cc6 ldrb r6, [r0, r3] +10032e0c: b9d6 cbnz r6, 10032e44 +10032e0e: f641 075c movw r7, #6236 ; 0x185c +10032e12: 59c5 ldr r5, [r0, r7] +10032e14: b1b5 cbz r5, 10032e44 +10032e16: f641 0334 movw r3, #6196 ; 0x1834 +10032e1a: 4628 mov r0, r5 +10032e1c: f855 8003 ldr.w r8, [r5, r3] +10032e20: f7e9 f8ac bl 1001bf7c +10032e24: 51e6 str r6, [r4, r7] +10032e26: f641 0774 movw r7, #6260 ; 0x1874 +10032e2a: 51ee str r6, [r5, r7] +10032e2c: 4628 mov r0, r5 +10032e2e: f004 fe07 bl 10037a40 +10032e32: 4640 mov r0, r8 +10032e34: f003 fddd bl 100369f2 +10032e38: 59e0 ldr r0, [r4, r7] +10032e3a: b118 cbz r0, 10032e44 +10032e3c: 2104 movs r1, #4 +10032e3e: f7e4 faf2 bl 10017426 +10032e42: 51e6 str r6, [r4, r7] +10032e44: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10032e48 <_netdev_open>: +10032e48: 6903 ldr r3, [r0, #16] +10032e4a: b570 push {r4, r5, r6, lr} +10032e4c: 681c ldr r4, [r3, #0] +10032e4e: 4605 mov r5, r0 +10032e50: f504 53a0 add.w r3, r4, #5120 ; 0x1400 +10032e54: 6edb ldr r3, [r3, #108] ; 0x6c +10032e56: 2b01 cmp r3, #1 +10032e58: d104 bne.n 10032e64 <_netdev_open+0x1c> +10032e5a: 2200 movs r2, #0 +10032e5c: f641 0358 movw r3, #6232 ; 0x1858 +10032e60: 54e2 strb r2, [r4, r3] +10032e62: e04e b.n 10032f02 <_netdev_open+0xba> +10032e64: f641 0338 movw r3, #6200 ; 0x1838 +10032e68: 58e3 ldr r3, [r4, r3] +10032e6a: bb23 cbnz r3, 10032eb6 <_netdev_open+0x6e> +10032e6c: f241 72ac movw r2, #6060 ; 0x17ac +10032e70: 50a3 str r3, [r4, r2] +10032e72: f241 72b0 movw r2, #6064 ; 0x17b0 +10032e76: 50a3 str r3, [r4, r2] +10032e78: f241 72b4 movw r2, #6068 ; 0x17b4 +10032e7c: 50a3 str r3, [r4, r2] +10032e7e: f241 72c8 movw r2, #6088 ; 0x17c8 +10032e82: 54a3 strb r3, [r4, r2] +10032e84: 4620 mov r0, r4 +10032e86: f7ff fb12 bl 100324ae +10032e8a: 2800 cmp r0, #0 +10032e8c: d060 beq.n 10032f50 <_netdev_open+0x108> +10032e8e: 4620 mov r0, r4 +10032e90: f004 fe8a bl 10037ba8 +10032e94: 2800 cmp r0, #0 +10032e96: d05b beq.n 10032f50 <_netdev_open+0x108> +10032e98: 4620 mov r0, r4 +10032e9a: f7eb fbda bl 1001e652 +10032e9e: 2800 cmp r0, #0 +10032ea0: d056 beq.n 10032f50 <_netdev_open+0x108> +10032ea2: f641 032c movw r3, #6188 ; 0x182c +10032ea6: 58e3 ldr r3, [r4, r3] +10032ea8: b10b cbz r3, 10032eae <_netdev_open+0x66> +10032eaa: 4620 mov r0, r4 +10032eac: 4798 blx r3 +10032eae: 2201 movs r2, #1 +10032eb0: f641 0338 movw r3, #6200 ; 0x1838 +10032eb4: 50e2 str r2, [r4, r3] +10032eb6: f641 0358 movw r3, #6232 ; 0x1858 +10032eba: 2600 movs r6, #0 +10032ebc: 54e6 strb r6, [r4, r3] +10032ebe: f604 401c addw r0, r4, #3100 ; 0xc1c +10032ec2: f8d4 1c28 ldr.w r1, [r4, #3112] ; 0xc28 +10032ec6: f003 ffb7 bl 10036e38 +10032eca: f504 6092 add.w r0, r4, #1168 ; 0x490 +10032ece: f44f 61fa mov.w r1, #2000 ; 0x7d0 +10032ed2: f003 ffb1 bl 10036e38 +10032ed6: f241 4338 movw r3, #5176 ; 0x1438 +10032eda: 50e6 str r6, [r4, r3] +10032edc: f504 50a2 add.w r0, r4, #5184 ; 0x1440 +10032ee0: f241 4364 movw r3, #5220 ; 0x1464 +10032ee4: 3018 adds r0, #24 +10032ee6: 58e1 ldr r1, [r4, r3] +10032ee8: f003 ffa6 bl 10036e38 +10032eec: 4628 mov r0, r5 +10032eee: f7e4 fc7f bl 100177f0 +10032ef2: b918 cbnz r0, 10032efc <_netdev_open+0xb4> +10032ef4: 4628 mov r0, r5 +10032ef6: f7e4 fc7e bl 100177f6 +10032efa: e002 b.n 10032f02 <_netdev_open+0xba> +10032efc: 4628 mov r0, r5 +10032efe: f7e4 fc79 bl 100177f4 +10032f02: f641 035c movw r3, #6236 ; 0x185c +10032f06: 58e3 ldr r3, [r4, r3] +10032f08: b163 cbz r3, 10032f24 <_netdev_open+0xdc> +10032f0a: f641 0238 movw r2, #6200 ; 0x1838 +10032f0e: 589a ldr r2, [r3, r2] +10032f10: b11a cbz r2, 10032f1a <_netdev_open+0xd2> +10032f12: f241 72c5 movw r2, #6085 ; 0x17c5 +10032f16: 5c9a ldrb r2, [r3, r2] +10032f18: b922 cbnz r2, 10032f24 <_netdev_open+0xdc> +10032f1a: f641 0234 movw r2, #6196 ; 0x1834 +10032f1e: 5898 ldr r0, [r3, r2] +10032f20: f000 f828 bl 10032f74 <_netdev_if2_open> +10032f24: 4b10 ldr r3, [pc, #64] ; (10032f68 <_netdev_open+0x120>) +10032f26: 681b ldr r3, [r3, #0] +10032f28: b11b cbz r3, 10032f32 <_netdev_open+0xea> +10032f2a: 6862 ldr r2, [r4, #4] +10032f2c: 2a01 cmp r2, #1 +10032f2e: d100 bne.n 10032f32 <_netdev_open+0xea> +10032f30: 4798 blx r3 +10032f32: 4b0e ldr r3, [pc, #56] ; (10032f6c <_netdev_open+0x124>) +10032f34: 681b ldr r3, [r3, #0] +10032f36: b11b cbz r3, 10032f40 <_netdev_open+0xf8> +10032f38: 6862 ldr r2, [r4, #4] +10032f3a: 2a01 cmp r2, #1 +10032f3c: d100 bne.n 10032f40 <_netdev_open+0xf8> +10032f3e: 4798 blx r3 +10032f40: 4b0b ldr r3, [pc, #44] ; (10032f70 <_netdev_open+0x128>) +10032f42: 6818 ldr r0, [r3, #0] +10032f44: b178 cbz r0, 10032f66 <_netdev_open+0x11e> +10032f46: 6863 ldr r3, [r4, #4] +10032f48: 2b01 cmp r3, #1 +10032f4a: d10b bne.n 10032f64 <_netdev_open+0x11c> +10032f4c: 4780 blx r0 +10032f4e: e009 b.n 10032f64 <_netdev_open+0x11c> +10032f50: 2200 movs r2, #0 +10032f52: f641 0338 movw r3, #6200 ; 0x1838 +10032f56: 4628 mov r0, r5 +10032f58: 50e2 str r2, [r4, r3] +10032f5a: f7e4 fc4d bl 100177f8 +10032f5e: f04f 30ff mov.w r0, #4294967295 +10032f62: bd70 pop {r4, r5, r6, pc} +10032f64: 2000 movs r0, #0 +10032f66: bd70 pop {r4, r5, r6, pc} +10032f68: 1004de18 .word 0x1004de18 +10032f6c: 1004de04 .word 0x1004de04 +10032f70: 1004de0c .word 0x1004de0c + +10032f74 <_netdev_if2_open>: +10032f74: b5f8 push {r3, r4, r5, r6, r7, lr} +10032f76: 6903 ldr r3, [r0, #16] +10032f78: 4606 mov r6, r0 +10032f7a: 681c ldr r4, [r3, #0] +10032f7c: f641 035c movw r3, #6236 ; 0x185c +10032f80: 58e5 ldr r5, [r4, r3] +10032f82: f641 0338 movw r3, #6200 ; 0x1838 +10032f86: 58eb ldr r3, [r5, r3] +10032f88: b11b cbz r3, 10032f92 <_netdev_if2_open+0x1e> +10032f8a: f241 73c5 movw r3, #6085 ; 0x17c5 +10032f8e: 5ceb ldrb r3, [r5, r3] +10032f90: b923 cbnz r3, 10032f9c <_netdev_if2_open+0x28> +10032f92: f641 0334 movw r3, #6196 ; 0x1834 +10032f96: 58e8 ldr r0, [r5, r3] +10032f98: f7ff ff56 bl 10032e48 <_netdev_open> +10032f9c: f641 0238 movw r2, #6200 ; 0x1838 +10032fa0: 58a3 ldr r3, [r4, r2] +10032fa2: 2b00 cmp r3, #0 +10032fa4: d133 bne.n 1003300e <_netdev_if2_open+0x9a> +10032fa6: 58aa ldr r2, [r5, r2] +10032fa8: 2a01 cmp r2, #1 +10032faa: d130 bne.n 1003300e <_netdev_if2_open+0x9a> +10032fac: f241 72c5 movw r2, #6085 ; 0x17c5 +10032fb0: 5caa ldrb r2, [r5, r2] +10032fb2: 2a01 cmp r2, #1 +10032fb4: d12b bne.n 1003300e <_netdev_if2_open+0x9a> +10032fb6: f241 72ac movw r2, #6060 ; 0x17ac +10032fba: 50a3 str r3, [r4, r2] +10032fbc: f241 72b0 movw r2, #6064 ; 0x17b0 +10032fc0: 50a3 str r3, [r4, r2] +10032fc2: f106 0714 add.w r7, r6, #20 +10032fc6: f241 72b4 movw r2, #6068 ; 0x17b4 +10032fca: f504 51a4 add.w r1, r4, #5248 ; 0x1480 +10032fce: 50a3 str r3, [r4, r2] +10032fd0: 4638 mov r0, r7 +10032fd2: 2206 movs r2, #6 +10032fd4: 3119 adds r1, #25 +10032fd6: f7e4 fa2b bl 10017430 +10032fda: 4620 mov r0, r4 +10032fdc: 4629 mov r1, r5 +10032fde: f7ff fb31 bl 10032644 +10032fe2: f641 0359 movw r3, #6233 ; 0x1859 +10032fe6: 5cea ldrb r2, [r5, r3] +10032fe8: 4620 mov r0, r4 +10032fea: 54e2 strb r2, [r4, r3] +10032fec: 2103 movs r1, #3 +10032fee: 463a mov r2, r7 +10032ff0: f7ff fa7f bl 100324f2 +10032ff4: f641 032c movw r3, #6188 ; 0x182c +10032ff8: 58e3 ldr r3, [r4, r3] +10032ffa: b10b cbz r3, 10033000 <_netdev_if2_open+0x8c> +10032ffc: 4620 mov r0, r4 +10032ffe: 4798 blx r3 +10033000: 2301 movs r3, #1 +10033002: f241 72c5 movw r2, #6085 ; 0x17c5 +10033006: 54a3 strb r3, [r4, r2] +10033008: f641 0238 movw r2, #6200 ; 0x1838 +1003300c: 50a3 str r3, [r4, r2] +1003300e: 2200 movs r2, #0 +10033010: f641 0358 movw r3, #6232 ; 0x1858 +10033014: 54e2 strb r2, [r4, r3] +10033016: 4630 mov r0, r6 +10033018: f7e4 fbea bl 100177f0 +1003301c: b918 cbnz r0, 10033026 <_netdev_if2_open+0xb2> +1003301e: 4630 mov r0, r6 +10033020: f7e4 fbe9 bl 100177f6 +10033024: e002 b.n 1003302c <_netdev_if2_open+0xb8> +10033026: 4630 mov r0, r6 +10033028: f7e4 fbe4 bl 100177f4 +1003302c: 2000 movs r0, #0 +1003302e: bdf8 pop {r3, r4, r5, r6, r7, pc} + +10033030 : +10033030: b538 push {r3, r4, r5, lr} +10033032: 6903 ldr r3, [r0, #16] +10033034: 4605 mov r5, r0 +10033036: 681c ldr r4, [r3, #0] +10033038: 2100 movs r1, #0 +1003303a: f504 54c3 add.w r4, r4, #6240 ; 0x1860 +1003303e: 6820 ldr r0, [r4, #0] +10033040: f7e4 fa9a bl 10017578 +10033044: 4628 mov r0, r5 +10033046: f7ff ff95 bl 10032f74 <_netdev_if2_open> +1003304a: 2100 movs r1, #0 +1003304c: 4605 mov r5, r0 +1003304e: 6820 ldr r0, [r4, #0] +10033050: f7e4 fa9a bl 10017588 +10033054: 4628 mov r0, r5 +10033056: bd38 pop {r3, r4, r5, pc} + +10033058 : +10033058: b538 push {r3, r4, r5, lr} +1003305a: 6903 ldr r3, [r0, #16] +1003305c: 4605 mov r5, r0 +1003305e: 681c ldr r4, [r3, #0] +10033060: 2100 movs r1, #0 +10033062: f504 54c3 add.w r4, r4, #6240 ; 0x1860 +10033066: 6820 ldr r0, [r4, #0] +10033068: f7e4 fa86 bl 10017578 +1003306c: 4628 mov r0, r5 +1003306e: f7ff feeb bl 10032e48 <_netdev_open> +10033072: 2100 movs r1, #0 +10033074: 4605 mov r5, r0 +10033076: 6820 ldr r0, [r4, #0] +10033078: f7e4 fa86 bl 10017588 +1003307c: 4628 mov r0, r5 +1003307e: bd38 pop {r3, r4, r5, pc} + +10033080 : +10033080: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10033084: 4689 mov r9, r1 +10033086: 4606 mov r6, r0 +10033088: b188 cbz r0, 100330ae +1003308a: 6903 ldr r3, [r0, #16] +1003308c: 2200 movs r2, #0 +1003308e: 681c ldr r4, [r3, #0] +10033090: f504 519f add.w r1, r4, #5088 ; 0x13e0 +10033094: 4620 mov r0, r4 +10033096: 3104 adds r1, #4 +10033098: 68a5 ldr r5, [r4, #8] +1003309a: f7ff fd81 bl 10032ba0 +1003309e: 2800 cmp r0, #0 +100330a0: f000 8095 beq.w 100331ce +100330a4: f641 0334 movw r3, #6196 ; 0x1834 +100330a8: 58c0 ldr r0, [r0, r3] +100330aa: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +100330ae: f008 fd3b bl 1003bb28 +100330b2: 4605 mov r5, r0 +100330b4: 2800 cmp r0, #0 +100330b6: f000 8090 beq.w 100331da +100330ba: f641 0088 movw r0, #6280 ; 0x1888 +100330be: f7e4 fb67 bl 10017790 +100330c2: 4604 mov r4, r0 +100330c4: 2800 cmp r0, #0 +100330c6: f000 8085 beq.w 100331d4 +100330ca: 4b4a ldr r3, [pc, #296] ; (100331f4 ) +100330cc: f500 52c3 add.w r2, r0, #6240 ; 0x1860 +100330d0: 2701 movs r7, #1 +100330d2: f241 78ac movw r8, #6060 ; 0x17ac +100330d6: 6085 str r5, [r0, #8] +100330d8: 1d19 adds r1, r3, #4 +100330da: 6028 str r0, [r5, #0] +100330dc: f840 7008 str.w r7, [r0, r8] +100330e0: 6013 str r3, [r2, #0] +100330e2: f641 0264 movw r2, #6244 ; 0x1864 +100330e6: 5081 str r1, [r0, r2] +100330e8: f103 0108 add.w r1, r3, #8 +100330ec: f641 026c movw r2, #6252 ; 0x186c +100330f0: 5081 str r1, [r0, r2] +100330f2: 330c adds r3, #12 +100330f4: f641 0270 movw r2, #6256 ; 0x1870 +100330f8: 5083 str r3, [r0, r2] +100330fa: f641 0368 movw r3, #6248 ; 0x1868 +100330fe: 54c7 strb r7, [r0, r3] +10033100: f641 0369 movw r3, #6249 ; 0x1869 +10033104: 54c6 strb r6, [r0, r3] +10033106: 7c2b ldrb r3, [r5, #16] +10033108: 19da adds r2, r3, r7 +1003310a: 3302 adds r3, #2 +1003310c: 742a strb r2, [r5, #16] +1003310e: f845 0023 str.w r0, [r5, r3, lsl #2] +10033112: f641 036a movw r3, #6250 ; 0x186a +10033116: 54c6 strb r6, [r0, r3] +10033118: 2310 movs r3, #16 +1003311a: 8043 strh r3, [r0, #2] +1003311c: f8c0 9004 str.w r9, [r0, #4] +10033120: f7ff fb33 bl 1003278a +10033124: 4620 mov r0, r4 +10033126: f7ff fc93 bl 10032a50 +1003312a: 4606 mov r6, r0 +1003312c: 2800 cmp r0, #0 +1003312e: d05b beq.n 100331e8 +10033130: f604 102c addw r0, r4, #2348 ; 0x92c +10033134: f7f8 fbf2 bl 1002b91c +10033138: 4620 mov r0, r4 +1003313a: f007 fdcd bl 1003acd8 +1003313e: 2800 cmp r0, #0 +10033140: d03d beq.n 100331be +10033142: 4620 mov r0, r4 +10033144: f7ff f966 bl 10032414 +10033148: 4620 mov r0, r4 +1003314a: f7ff f979 bl 10032440 +1003314e: 4620 mov r0, r4 +10033150: f7ff f96b bl 1003242a +10033154: 4a28 ldr r2, [pc, #160] ; (100331f8 ) +10033156: f641 032c movw r3, #6188 ; 0x182c +1003315a: 50e2 str r2, [r4, r3] +1003315c: 4a27 ldr r2, [pc, #156] ; (100331fc ) +1003315e: f641 0330 movw r3, #6192 ; 0x1830 +10033162: 50e2 str r2, [r4, r3] +10033164: 4620 mov r0, r4 +10033166: f7ff fa14 bl 10032592 +1003316a: b340 cbz r0, 100331be +1003316c: 4620 mov r0, r4 +1003316e: f7ff f9ff bl 10032570 +10033172: 4620 mov r0, r4 +10033174: f004 fcce bl 10037b14 +10033178: b1c8 cbz r0, 100331ae +1003317a: f504 519e add.w r1, r4, #5056 ; 0x13c0 +1003317e: f504 57a4 add.w r7, r4, #5248 ; 0x1480 +10033182: 3114 adds r1, #20 +10033184: 3719 adds r7, #25 +10033186: 4630 mov r0, r6 +10033188: f003 fcf5 bl 10036b76 +1003318c: 4638 mov r0, r7 +1003318e: f004 fa5d bl 1003764c +10033192: f106 0014 add.w r0, r6, #20 +10033196: 4639 mov r1, r7 +10033198: 2206 movs r2, #6 +1003319a: f7e4 f949 bl 10017430 +1003319e: 4628 mov r0, r5 +100331a0: f008 fcd2 bl 1003bb48 +100331a4: f641 0334 movw r3, #6196 ; 0x1834 +100331a8: 58e0 ldr r0, [r4, r3] +100331aa: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +100331ae: f241 73b0 movw r3, #6064 ; 0x17b0 +100331b2: f844 7008 str.w r7, [r4, r8] +100331b6: 4620 mov r0, r4 +100331b8: 50e7 str r7, [r4, r3] +100331ba: f004 fc41 bl 10037a40 +100331be: f241 63c8 movw r3, #5832 ; 0x16c8 +100331c2: 58e0 ldr r0, [r4, r3] +100331c4: b160 cbz r0, 100331e0 +100331c6: 2104 movs r1, #4 +100331c8: f7e4 f92f bl 1001742a +100331cc: e008 b.n 100331e0 +100331ce: 4620 mov r0, r4 +100331d0: f7ff fb46 bl 10032860 +100331d4: 4628 mov r0, r5 +100331d6: f008 fcaf bl 1003bb38 +100331da: 2000 movs r0, #0 +100331dc: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +100331e0: 4630 mov r0, r6 +100331e2: f003 fc06 bl 100369f2 +100331e6: e7f5 b.n 100331d4 +100331e8: 4620 mov r0, r4 +100331ea: f641 0188 movw r1, #6280 ; 0x1888 +100331ee: f7e4 f91a bl 10017426 +100331f2: e7ef b.n 100331d4 +100331f4: 1004de28 .word 0x1004de28 +100331f8: 1003254f .word 0x1003254f +100331fc: 1003bc91 .word 0x1003bc91 + +10033200 : +10033200: b538 push {r3, r4, r5, lr} +10033202: 6903 ldr r3, [r0, #16] +10033204: 681c ldr r4, [r3, #0] +10033206: 68a5 ldr r5, [r4, #8] +10033208: 4628 mov r0, r5 +1003320a: f008 fca5 bl 1003bb58 +1003320e: 4620 mov r0, r4 +10033210: 2100 movs r1, #0 +10033212: f7f3 fa39 bl 10026688 +10033216: 2100 movs r1, #0 +10033218: 4620 mov r0, r4 +1003321a: f7f3 fa12 bl 10026642 +1003321e: 4620 mov r0, r4 +10033220: f7f3 f929 bl 10026476 +10033224: f641 035c movw r3, #6236 ; 0x185c +10033228: 58e0 ldr r0, [r4, r3] +1003322a: f7ff fdbd bl 10032da8 +1003322e: 4620 mov r0, r4 +10033230: f7ff fde5 bl 10032dfe +10033234: 4620 mov r0, r4 +10033236: f7ff fb13 bl 10032860 +1003323a: 4628 mov r0, r5 +1003323c: f008 fc7c bl 1003bb38 +10033240: 2000 movs r0, #0 +10033242: bd38 pop {r3, r4, r5, pc} + +10033244 : +10033244: b510 push {r4, lr} +10033246: 4c09 ldr r4, [pc, #36] ; (1003326c ) +10033248: 1d20 adds r0, r4, #4 +1003324a: f7e4 f957 bl 100174fc +1003324e: f104 0008 add.w r0, r4, #8 +10033252: f7e4 f953 bl 100174fc +10033256: f104 000c add.w r0, r4, #12 +1003325a: f7e4 f94f bl 100174fc +1003325e: f104 0010 add.w r0, r4, #16 +10033262: f7e4 f94b bl 100174fc +10033266: 2301 movs r3, #1 +10033268: 6023 str r3, [r4, #0] +1003326a: bd10 pop {r4, pc} +1003326c: 1004de24 .word 0x1004de24 + +10033270 : +10033270: b510 push {r4, lr} +10033272: 4c0a ldr r4, [pc, #40] ; (1003329c ) +10033274: 2300 movs r3, #0 +10033276: 4620 mov r0, r4 +10033278: f840 3b04 str.w r3, [r0], #4 +1003327c: f7e4 f946 bl 1001750c +10033280: f104 0008 add.w r0, r4, #8 +10033284: f7e4 f942 bl 1001750c +10033288: f104 000c add.w r0, r4, #12 +1003328c: f7e4 f93e bl 1001750c +10033290: f104 0010 add.w r0, r4, #16 +10033294: e8bd 4010 ldmia.w sp!, {r4, lr} +10033298: f7e4 b938 b.w 1001750c +1003329c: 1004de24 .word 0x1004de24 + +100332a0 : +100332a0: 6903 ldr r3, [r0, #16] +100332a2: 6810 ldr r0, [r2, #0] +100332a4: 681b ldr r3, [r3, #0] +100332a6: 7801 ldrb r1, [r0, #0] +100332a8: 7840 ldrb r0, [r0, #1] +100332aa: f883 086d strb.w r0, [r3, #2157] ; 0x86d +100332ae: 6812 ldr r2, [r2, #0] +100332b0: 7892 ldrb r2, [r2, #2] +100332b2: f8a3 2870 strh.w r2, [r3, #2160] ; 0x870 +100332b6: 2200 movs r2, #0 +100332b8: f883 286e strb.w r2, [r3, #2158] ; 0x86e +100332bc: b119 cbz r1, 100332c6 +100332be: 2201 movs r2, #1 +100332c0: f883 28f9 strb.w r2, [r3, #2297] ; 0x8f9 +100332c4: e001 b.n 100332ca +100332c6: f883 18f9 strb.w r1, [r3, #2297] ; 0x8f9 +100332ca: 2000 movs r0, #0 +100332cc: 4770 bx lr + +100332ce : +100332ce: 6902 ldr r2, [r0, #16] +100332d0: 2000 movs r0, #0 +100332d2: 6812 ldr r2, [r2, #0] +100332d4: f892 28f9 ldrb.w r2, [r2, #2297] ; 0x8f9 +100332d8: 701a strb r2, [r3, #0] +100332da: 4770 bx lr + +100332dc : +100332dc: 6812 ldr r2, [r2, #0] +100332de: 6903 ldr r3, [r0, #16] +100332e0: f992 2000 ldrsb.w r2, [r2] +100332e4: 681b ldr r3, [r3, #0] +100332e6: 2a31 cmp r2, #49 ; 0x31 +100332e8: d101 bne.n 100332ee +100332ea: 2100 movs r1, #0 +100332ec: e002 b.n 100332f4 +100332ee: 2a30 cmp r2, #48 ; 0x30 +100332f0: d103 bne.n 100332fa +100332f2: 2101 movs r1, #1 +100332f4: f241 72c9 movw r2, #6089 ; 0x17c9 +100332f8: 5499 strb r1, [r3, r2] +100332fa: 2000 movs r0, #0 +100332fc: 4770 bx lr + +100332fe : +100332fe: 6812 ldr r2, [r2, #0] +10033300: 6903 ldr r3, [r0, #16] +10033302: f992 2000 ldrsb.w r2, [r2] +10033306: 681b ldr r3, [r3, #0] +10033308: 2a31 cmp r2, #49 ; 0x31 +1003330a: d101 bne.n 10033310 +1003330c: 2200 movs r2, #0 +1003330e: e002 b.n 10033316 +10033310: 2a30 cmp r2, #48 ; 0x30 +10033312: d102 bne.n 1003331a +10033314: 2201 movs r2, #1 +10033316: f883 2901 strb.w r2, [r3, #2305] ; 0x901 +1003331a: 2000 movs r0, #0 +1003331c: 4770 bx lr + +1003331e : +1003331e: 2000 movs r0, #0 +10033320: 4770 bx lr + ... + +10033324 : +10033324: 4a03 ldr r2, [pc, #12] ; (10033334 ) +10033326: f3c0 030a ubfx r3, r0, #0, #11 +1003332a: f3c0 3002 ubfx r0, r0, #12, #3 +1003332e: 5610 ldrsb r0, [r2, r0] +10033330: 4358 muls r0, r3 +10033332: 4770 bx lr +10033334: 10042361 .word 0x10042361 + +10033338 : +10033338: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +1003333c: 6903 ldr r3, [r0, #16] +1003333e: 4617 mov r7, r2 +10033340: 681c ldr r4, [r3, #0] +10033342: 6813 ldr r3, [r2, #0] +10033344: 781d ldrb r5, [r3, #0] +10033346: 2d01 cmp r5, #1 +10033348: d112 bne.n 10033370 +1003334a: f204 5024 addw r0, r4, #1316 ; 0x524 +1003334e: 7859 ldrb r1, [r3, #1] +10033350: aa01 add r2, sp, #4 +10033352: f7eb f96d bl 1001e630 +10033356: 2801 cmp r0, #1 +10033358: d10a bne.n 10033370 +1003335a: f884 5522 strb.w r5, [r4, #1314] ; 0x522 +1003335e: 683b ldr r3, [r7, #0] +10033360: 785b ldrb r3, [r3, #1] +10033362: f8c4 5528 str.w r5, [r4, #1320] ; 0x528 +10033366: f884 3524 strb.w r3, [r4, #1316] ; 0x524 +1003336a: 2300 movs r3, #0 +1003336c: f884 3530 strb.w r3, [r4, #1328] ; 0x530 +10033370: 2601 movs r6, #1 +10033372: f04f 0800 mov.w r8, #0 +10033376: 1e73 subs r3, r6, #1 +10033378: 42ab cmp r3, r5 +1003337a: da14 bge.n 100333a6 +1003337c: 683b ldr r3, [r7, #0] +1003337e: f204 5024 addw r0, r4, #1316 ; 0x524 +10033382: 5d99 ldrb r1, [r3, r6] +10033384: aa01 add r2, sp, #4 +10033386: f7eb f953 bl 1001e630 +1003338a: 2801 cmp r0, #1 +1003338c: d109 bne.n 100333a2 +1003338e: 683b ldr r3, [r7, #0] +10033390: 210c movs r1, #12 +10033392: 442b add r3, r5 +10033394: 5d9a ldrb r2, [r3, r6] +10033396: 9b01 ldr r3, [sp, #4] +10033398: 4680 mov r8, r0 +1003339a: fb01 4303 mla r3, r1, r3, r4 +1003339e: f883 252c strb.w r2, [r3, #1324] ; 0x52c +100333a2: 3601 adds r6, #1 +100333a4: e7e7 b.n 10033376 +100333a6: f1b8 0f00 cmp.w r8, #0 +100333aa: d004 beq.n 100333b6 +100333ac: 2301 movs r3, #1 +100333ae: f884 38fa strb.w r3, [r4, #2298] ; 0x8fa +100333b2: 2000 movs r0, #0 +100333b4: e001 b.n 100333ba +100333b6: f06f 0015 mvn.w r0, #21 +100333ba: b002 add sp, #8 +100333bc: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +100333c0 : +100333c0: b5f8 push {r3, r4, r5, r6, r7, lr} +100333c2: 6903 ldr r3, [r0, #16] +100333c4: 681c ldr r4, [r3, #0] +100333c6: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc +100333ca: b373 cbz r3, 1003342a +100333cc: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 +100333d0: b35b cbz r3, 1003342a +100333d2: 2600 movs r6, #0 +100333d4: 4635 mov r5, r6 +100333d6: f894 1900 ldrb.w r1, [r4, #2304] ; 0x900 +100333da: 428d cmp r5, r1 +100333dc: da12 bge.n 10033404 +100333de: f8d4 28fc ldr.w r2, [r4, #2300] ; 0x8fc +100333e2: 00ef lsls r7, r5, #3 +100333e4: f852 0035 ldr.w r0, [r2, r5, lsl #3] +100333e8: 3501 adds r5, #1 +100333ea: 7841 ldrb r1, [r0, #1] +100333ec: 3102 adds r1, #2 +100333ee: f7e4 f81c bl 1001742a +100333f2: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc +100333f6: 443b add r3, r7 +100333f8: 791b ldrb r3, [r3, #4] +100333fa: f013 0f04 tst.w r3, #4 +100333fe: bf18 it ne +10033400: 2601 movne r6, #1 +10033402: e7e8 b.n 100333d6 +10033404: 2500 movs r5, #0 +10033406: f8d4 08fc ldr.w r0, [r4, #2300] ; 0x8fc +1003340a: 00c9 lsls r1, r1, #3 +1003340c: f7e4 f80d bl 1001742a +10033410: f8c4 58fc str.w r5, [r4, #2300] ; 0x8fc +10033414: f884 5900 strb.w r5, [r4, #2304] ; 0x900 +10033418: b156 cbz r6, 10033430 +1003341a: 4620 mov r0, r4 +1003341c: 4629 mov r1, r5 +1003341e: 462a mov r2, r5 +10033420: 2301 movs r3, #1 +10033422: f7e7 fe01 bl 1001b028 +10033426: 4628 mov r0, r5 +10033428: bdf8 pop {r3, r4, r5, r6, r7, pc} +1003342a: f04f 30ff mov.w r0, #4294967295 +1003342e: bdf8 pop {r3, r4, r5, r6, r7, pc} +10033430: 4630 mov r0, r6 +10033432: bdf8 pop {r3, r4, r5, r6, r7, pc} + +10033434 : +10033434: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10033438: 6903 ldr r3, [r0, #16] +1003343a: 681c ldr r4, [r3, #0] +1003343c: 6813 ldr r3, [r2, #0] +1003343e: f894 2900 ldrb.w r2, [r4, #2304] ; 0x900 +10033442: 791d ldrb r5, [r3, #4] +10033444: 681e ldr r6, [r3, #0] +10033446: 42aa cmp r2, r5 +10033448: d338 bcc.n 100334bc +1003344a: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc +1003344e: f105 5500 add.w r5, r5, #536870912 ; 0x20000000 +10033452: 3d01 subs r5, #1 +10033454: 6831 ldr r1, [r6, #0] +10033456: f853 0035 ldr.w r0, [r3, r5, lsl #3] +1003345a: 784a ldrb r2, [r1, #1] +1003345c: 7843 ldrb r3, [r0, #1] +1003345e: 00ef lsls r7, r5, #3 +10033460: 429a cmp r2, r3 +10033462: d011 beq.n 10033488 +10033464: 1c99 adds r1, r3, #2 +10033466: f7e3 ffe0 bl 1001742a +1003346a: 6833 ldr r3, [r6, #0] +1003346c: f8d4 88fc ldr.w r8, [r4, #2300] ; 0x8fc +10033470: 7858 ldrb r0, [r3, #1] +10033472: 3002 adds r0, #2 +10033474: f7e4 f99c bl 100177b0 +10033478: f848 0035 str.w r0, [r8, r5, lsl #3] +1003347c: 6831 ldr r1, [r6, #0] +1003347e: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc +10033482: 784a ldrb r2, [r1, #1] +10033484: f853 0035 ldr.w r0, [r3, r5, lsl #3] +10033488: 3202 adds r2, #2 +1003348a: f7e7 fba1 bl 1001abd0 +1003348e: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc +10033492: 7932 ldrb r2, [r6, #4] +10033494: 443b add r3, r7 +10033496: 711a strb r2, [r3, #4] +10033498: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc +1003349c: 441f add r7, r3 +1003349e: 793b ldrb r3, [r7, #4] +100334a0: f003 0304 and.w r3, r3, #4 +100334a4: f003 00ff and.w r0, r3, #255 ; 0xff +100334a8: b153 cbz r3, 100334c0 +100334aa: 2100 movs r1, #0 +100334ac: 4620 mov r0, r4 +100334ae: 460a mov r2, r1 +100334b0: 2301 movs r3, #1 +100334b2: f7e7 fdb9 bl 1001b028 +100334b6: 2000 movs r0, #0 +100334b8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100334bc: f04f 30ff mov.w r0, #4294967295 +100334c0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +100334c4 : +100334c4: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +100334c8: 6903 ldr r3, [r0, #16] +100334ca: 681c ldr r4, [r3, #0] +100334cc: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc +100334d0: 2b00 cmp r3, #0 +100334d2: d149 bne.n 10033568 +100334d4: f894 7900 ldrb.w r7, [r4, #2304] ; 0x900 +100334d8: 2f00 cmp r7, #0 +100334da: d145 bne.n 10033568 +100334dc: 6813 ldr r3, [r2, #0] +100334de: 681e ldr r6, [r3, #0] +100334e0: 2e00 cmp r6, #0 +100334e2: d03e beq.n 10033562 +100334e4: 6858 ldr r0, [r3, #4] +100334e6: 463d mov r5, r7 +100334e8: f884 0900 strb.w r0, [r4, #2304] ; 0x900 +100334ec: b2c0 uxtb r0, r0 +100334ee: 00c0 lsls r0, r0, #3 +100334f0: f7e4 f95e bl 100177b0 +100334f4: f894 2900 ldrb.w r2, [r4, #2304] ; 0x900 +100334f8: f8c4 08fc str.w r0, [r4, #2300] ; 0x8fc +100334fc: 4639 mov r1, r7 +100334fe: 00d2 lsls r2, r2, #3 +10033500: f7e7 fb6a bl 1001abd8 +10033504: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 +10033508: 429d cmp r5, r3 +1003350a: da23 bge.n 10033554 +1003350c: 6833 ldr r3, [r6, #0] +1003350e: f8d4 98fc ldr.w r9, [r4, #2300] ; 0x8fc +10033512: 7858 ldrb r0, [r3, #1] +10033514: ea4f 08c5 mov.w r8, r5, lsl #3 +10033518: 3002 adds r0, #2 +1003351a: f7e4 f949 bl 100177b0 +1003351e: f849 0035 str.w r0, [r9, r5, lsl #3] +10033522: 6831 ldr r1, [r6, #0] +10033524: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc +10033528: 784a ldrb r2, [r1, #1] +1003352a: f853 0035 ldr.w r0, [r3, r5, lsl #3] +1003352e: 3202 adds r2, #2 +10033530: f7e7 fb4e bl 1001abd0 +10033534: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc +10033538: 7932 ldrb r2, [r6, #4] +1003353a: 4443 add r3, r8 +1003353c: 711a strb r2, [r3, #4] +1003353e: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc +10033542: 3501 adds r5, #1 +10033544: 4443 add r3, r8 +10033546: 791b ldrb r3, [r3, #4] +10033548: 3608 adds r6, #8 +1003354a: f013 0f04 tst.w r3, #4 +1003354e: bf18 it ne +10033550: 2701 movne r7, #1 +10033552: e7d7 b.n 10033504 +10033554: b12f cbz r7, 10033562 +10033556: 2100 movs r1, #0 +10033558: 4620 mov r0, r4 +1003355a: 460a mov r2, r1 +1003355c: 2301 movs r3, #1 +1003355e: f7e7 fd63 bl 1001b028 +10033562: 2000 movs r0, #0 +10033564: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +10033568: f04f 30ff mov.w r0, #4294967295 +1003356c: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + +10033570 : +10033570: b508 push {r3, lr} +10033572: 6903 ldr r3, [r0, #16] +10033574: f44f 61a1 mov.w r1, #1288 ; 0x508 +10033578: 6818 ldr r0, [r3, #0] +1003357a: 6813 ldr r3, [r2, #0] +1003357c: 681a ldr r2, [r3, #0] +1003357e: f241 63c8 movw r3, #5832 ; 0x16c8 +10033582: 58c3 ldr r3, [r0, r3] +10033584: f8c3 2180 str.w r2, [r3, #384] ; 0x180 +10033588: f004 fbaa bl 10037ce0 +1003358c: 2000 movs r0, #0 +1003358e: bd08 pop {r3, pc} + +10033590 : +10033590: b538 push {r3, r4, r5, lr} +10033592: 461c mov r4, r3 +10033594: 6903 ldr r3, [r0, #16] +10033596: f640 6108 movw r1, #3592 ; 0xe08 +1003359a: 681d ldr r5, [r3, #0] +1003359c: f44f 427f mov.w r2, #65280 ; 0xff00 +100335a0: 4628 mov r0, r5 +100335a2: f7ff f864 bl 1003266e +100335a6: f640 016c movw r1, #2156 ; 0x86c +100335aa: 7020 strb r0, [r4, #0] +100335ac: f44f 427f mov.w r2, #65280 ; 0xff00 +100335b0: 4628 mov r0, r5 +100335b2: f7ff f85c bl 1003266e +100335b6: f640 016c movw r1, #2156 ; 0x86c +100335ba: 7060 strb r0, [r4, #1] +100335bc: f44f 027f mov.w r2, #16711680 ; 0xff0000 +100335c0: 4628 mov r0, r5 +100335c2: f7ff f854 bl 1003266e +100335c6: f640 016c movw r1, #2156 ; 0x86c +100335ca: 70a0 strb r0, [r4, #2] +100335cc: f04f 427f mov.w r2, #4278190080 ; 0xff000000 +100335d0: 4628 mov r0, r5 +100335d2: f7ff f84c bl 1003266e +100335d6: f44f 6160 mov.w r1, #3584 ; 0xe00 +100335da: 70e0 strb r0, [r4, #3] +100335dc: 22ff movs r2, #255 ; 0xff +100335de: 4628 mov r0, r5 +100335e0: f7ff f845 bl 1003266e +100335e4: f44f 6160 mov.w r1, #3584 ; 0xe00 +100335e8: 7120 strb r0, [r4, #4] +100335ea: f44f 427f mov.w r2, #65280 ; 0xff00 +100335ee: 4628 mov r0, r5 +100335f0: f7ff f83d bl 1003266e +100335f4: f44f 6160 mov.w r1, #3584 ; 0xe00 +100335f8: 7160 strb r0, [r4, #5] +100335fa: f44f 027f mov.w r2, #16711680 ; 0xff0000 +100335fe: 4628 mov r0, r5 +10033600: f7ff f835 bl 1003266e +10033604: f44f 6160 mov.w r1, #3584 ; 0xe00 +10033608: 71a0 strb r0, [r4, #6] +1003360a: f04f 427f mov.w r2, #4278190080 ; 0xff000000 +1003360e: 4628 mov r0, r5 +10033610: f7ff f82d bl 1003266e +10033614: f640 6104 movw r1, #3588 ; 0xe04 +10033618: 71e0 strb r0, [r4, #7] +1003361a: 22ff movs r2, #255 ; 0xff +1003361c: 4628 mov r0, r5 +1003361e: f7ff f826 bl 1003266e +10033622: f640 6104 movw r1, #3588 ; 0xe04 +10033626: 7220 strb r0, [r4, #8] +10033628: f44f 427f mov.w r2, #65280 ; 0xff00 +1003362c: 4628 mov r0, r5 +1003362e: f7ff f81e bl 1003266e +10033632: f640 6104 movw r1, #3588 ; 0xe04 +10033636: 7260 strb r0, [r4, #9] +10033638: f44f 027f mov.w r2, #16711680 ; 0xff0000 +1003363c: 4628 mov r0, r5 +1003363e: f7ff f816 bl 1003266e +10033642: f640 6104 movw r1, #3588 ; 0xe04 +10033646: 72a0 strb r0, [r4, #10] +10033648: f04f 427f mov.w r2, #4278190080 ; 0xff000000 +1003364c: 4628 mov r0, r5 +1003364e: f7ff f80e bl 1003266e +10033652: f44f 6161 mov.w r1, #3600 ; 0xe10 +10033656: 72e0 strb r0, [r4, #11] +10033658: 22ff movs r2, #255 ; 0xff +1003365a: 4628 mov r0, r5 +1003365c: f7ff f807 bl 1003266e +10033660: f44f 6161 mov.w r1, #3600 ; 0xe10 +10033664: 7320 strb r0, [r4, #12] +10033666: f44f 427f mov.w r2, #65280 ; 0xff00 +1003366a: 4628 mov r0, r5 +1003366c: f7fe ffff bl 1003266e +10033670: f44f 6161 mov.w r1, #3600 ; 0xe10 +10033674: 7360 strb r0, [r4, #13] +10033676: f44f 027f mov.w r2, #16711680 ; 0xff0000 +1003367a: 4628 mov r0, r5 +1003367c: f7fe fff7 bl 1003266e +10033680: f44f 6161 mov.w r1, #3600 ; 0xe10 +10033684: 73a0 strb r0, [r4, #14] +10033686: f04f 427f mov.w r2, #4278190080 ; 0xff000000 +1003368a: 4628 mov r0, r5 +1003368c: f7fe ffef bl 1003266e +10033690: f640 6114 movw r1, #3604 ; 0xe14 +10033694: 73e0 strb r0, [r4, #15] +10033696: 22ff movs r2, #255 ; 0xff +10033698: 4628 mov r0, r5 +1003369a: f7fe ffe8 bl 1003266e +1003369e: f640 6114 movw r1, #3604 ; 0xe14 +100336a2: 7420 strb r0, [r4, #16] +100336a4: f44f 427f mov.w r2, #65280 ; 0xff00 +100336a8: 4628 mov r0, r5 +100336aa: f7fe ffe0 bl 1003266e +100336ae: f640 6114 movw r1, #3604 ; 0xe14 +100336b2: 7460 strb r0, [r4, #17] +100336b4: f44f 027f mov.w r2, #16711680 ; 0xff0000 +100336b8: 4628 mov r0, r5 +100336ba: f7fe ffd8 bl 1003266e +100336be: f640 6114 movw r1, #3604 ; 0xe14 +100336c2: 74a0 strb r0, [r4, #18] +100336c4: f04f 427f mov.w r2, #4278190080 ; 0xff000000 +100336c8: 4628 mov r0, r5 +100336ca: f7fe ffd0 bl 1003266e +100336ce: 74e0 strb r0, [r4, #19] +100336d0: 2000 movs r0, #0 +100336d2: bd38 pop {r3, r4, r5, pc} + +100336d4 : +100336d4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +100336d8: 6903 ldr r3, [r0, #16] +100336da: 8897 ldrh r7, [r2, #4] +100336dc: 681e ldr r6, [r3, #0] +100336de: 6815 ldr r5, [r2, #0] +100336e0: 2400 movs r4, #0 +100336e2: 4623 mov r3, r4 +100336e4: 42bb cmp r3, r7 +100336e6: d214 bcs.n 10033712 +100336e8: 5ce9 ldrb r1, [r5, r3] +100336ea: 1c5a adds r2, r3, #1 +100336ec: 2903 cmp r1, #3 +100336ee: b292 uxth r2, r2 +100336f0: d001 beq.n 100336f6 +100336f2: 4613 mov r3, r2 +100336f4: e7f6 b.n 100336e4 +100336f6: 5caa ldrb r2, [r5, r2] +100336f8: 1c9c adds r4, r3, #2 +100336fa: 2a01 cmp r2, #1 +100336fc: b2a4 uxth r4, r4 +100336fe: d1f0 bne.n 100336e2 +10033700: 3303 adds r3, #3 +10033702: 4630 mov r0, r6 +10033704: fa1f f883 uxth.w r8, r3 +10033708: f7f2 fff4 bl 100266f4 +1003370c: 5528 strb r0, [r5, r4] +1003370e: 4644 mov r4, r8 +10033710: e7e7 b.n 100336e2 +10033712: 2000 movs r0, #0 +10033714: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10033718 : +10033718: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +1003371c: 6903 ldr r3, [r0, #16] +1003371e: f8b2 8004 ldrh.w r8, [r2, #4] +10033722: 681f ldr r7, [r3, #0] +10033724: 6815 ldr r5, [r2, #0] +10033726: 2400 movs r4, #0 +10033728: 4544 cmp r4, r8 +1003372a: d24a bcs.n 100337c2 +1003372c: 5d2a ldrb r2, [r5, r4] +1003372e: 1c63 adds r3, r4, #1 +10033730: b29b uxth r3, r3 +10033732: 2a03 cmp r2, #3 +10033734: d803 bhi.n 1003373e +10033736: e8df f002 tbb [pc, r2] +1003373a: 1004 .short 0x1004 +1003373c: 3620 .short 0x3620 +1003373e: 461c mov r4, r3 +10033740: e7f2 b.n 10033728 +10033742: 5ceb ldrb r3, [r5, r3] +10033744: 1ca6 adds r6, r4, #2 +10033746: 2b01 cmp r3, #1 +10033748: b2b6 uxth r6, r6 +1003374a: d138 bne.n 100337be +1003374c: 3403 adds r4, #3 +1003374e: 4638 mov r0, r7 +10033750: 5da9 ldrb r1, [r5, r6] +10033752: b2a4 uxth r4, r4 +10033754: f7f2 ff98 bl 10026688 +10033758: e030 b.n 100337bc +1003375a: 5ceb ldrb r3, [r5, r3] +1003375c: 1ca6 adds r6, r4, #2 +1003375e: 2b01 cmp r3, #1 +10033760: b2b6 uxth r6, r6 +10033762: d12c bne.n 100337be +10033764: 5dae ldrb r6, [r5, r6] +10033766: 4638 mov r0, r7 +10033768: f7f2 fe85 bl 10026476 +1003376c: 3403 adds r4, #3 +1003376e: 4638 mov r0, r7 +10033770: 4631 mov r1, r6 +10033772: b2a4 uxth r4, r4 +10033774: f7f2 ff65 bl 10026642 +10033778: e020 b.n 100337bc +1003377a: 5ceb ldrb r3, [r5, r3] +1003377c: 1ca6 adds r6, r4, #2 +1003377e: 2b04 cmp r3, #4 +10033780: b2b6 uxth r6, r6 +10033782: d11c bne.n 100337be +10033784: 1ce3 adds r3, r4, #3 +10033786: b29b uxth r3, r3 +10033788: 5da9 ldrb r1, [r5, r6] +1003378a: 5cea ldrb r2, [r5, r3] +1003378c: 1da6 adds r6, r4, #6 +1003378e: 1d23 adds r3, r4, #4 +10033790: 3405 adds r4, #5 +10033792: b2a4 uxth r4, r4 +10033794: 5d28 ldrb r0, [r5, r4] +10033796: b29b uxth r3, r3 +10033798: 5ceb ldrb r3, [r5, r3] +1003379a: 9000 str r0, [sp, #0] +1003379c: 4638 mov r0, r7 +1003379e: b2b6 uxth r6, r6 +100337a0: f7f2 ff94 bl 100266cc +100337a4: e00b b.n 100337be +100337a6: 5ceb ldrb r3, [r5, r3] +100337a8: 1ca6 adds r6, r4, #2 +100337aa: 2b01 cmp r3, #1 +100337ac: b2b6 uxth r6, r6 +100337ae: d106 bne.n 100337be +100337b0: 3403 adds r4, #3 +100337b2: 4638 mov r0, r7 +100337b4: 5da9 ldrb r1, [r5, r6] +100337b6: b2a4 uxth r4, r4 +100337b8: f7f2 ff96 bl 100266e8 +100337bc: 4626 mov r6, r4 +100337be: 4634 mov r4, r6 +100337c0: e7b2 b.n 10033728 +100337c2: 2000 movs r0, #0 +100337c4: b002 add sp, #8 +100337c6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + ... + +100337cc : +100337cc: b5f0 push {r4, r5, r6, r7, lr} +100337ce: 461c mov r4, r3 +100337d0: 6903 ldr r3, [r0, #16] +100337d2: b091 sub sp, #68 ; 0x44 +100337d4: 4620 mov r0, r4 +100337d6: 4937 ldr r1, [pc, #220] ; (100338b4 ) +100337d8: 2212 movs r2, #18 +100337da: 681d ldr r5, [r3, #0] +100337dc: f7e3 fe30 bl 10017440 +100337e0: b170 cbz r0, 10033800 +100337e2: aa08 add r2, sp, #32 +100337e4: f104 0012 add.w r0, r4, #18 +100337e8: 4933 ldr r1, [pc, #204] ; (100338b8 ) +100337ea: ab0a add r3, sp, #40 ; 0x28 +100337ec: f00a fadc bl 1003dda8 +100337f0: 4628 mov r0, r5 +100337f2: f89d 1020 ldrb.w r1, [sp, #32] +100337f6: f89d 2028 ldrb.w r2, [sp, #40] ; 0x28 +100337fa: f7ef ff47 bl 1002368c +100337fe: e055 b.n 100338ac +10033800: 4620 mov r0, r4 +10033802: 492e ldr r1, [pc, #184] ; (100338bc ) +10033804: 2218 movs r2, #24 +10033806: f7e3 fe1b bl 10017440 +1003380a: 4606 mov r6, r0 +1003380c: b118 cbz r0, 10033816 +1003380e: 4628 mov r0, r5 +10033810: f7ef ff77 bl 10023702 +10033814: e04a b.n 100338ac +10033816: 4620 mov r0, r4 +10033818: 4929 ldr r1, [pc, #164] ; (100338c0 ) +1003381a: 2213 movs r2, #19 +1003381c: f7e3 fe10 bl 10017440 +10033820: 4607 mov r7, r0 +10033822: b1f8 cbz r0, 10033864 +10033824: ab0b add r3, sp, #44 ; 0x2c +10033826: 9300 str r3, [sp, #0] +10033828: ab0c add r3, sp, #48 ; 0x30 +1003382a: 9301 str r3, [sp, #4] +1003382c: ab0d add r3, sp, #52 ; 0x34 +1003382e: 9302 str r3, [sp, #8] +10033830: ab0e add r3, sp, #56 ; 0x38 +10033832: 9303 str r3, [sp, #12] +10033834: af0a add r7, sp, #40 ; 0x28 +10033836: ab0f add r3, sp, #60 ; 0x3c +10033838: 9304 str r3, [sp, #16] +1003383a: f104 0013 add.w r0, r4, #19 +1003383e: 4921 ldr r1, [pc, #132] ; (100338c4 ) +10033840: aa07 add r2, sp, #28 +10033842: 463b mov r3, r7 +10033844: f00a fab0 bl 1003dda8 +10033848: 4630 mov r0, r6 +1003384a: f857 3020 ldr.w r3, [r7, r0, lsl #2] +1003384e: aa08 add r2, sp, #32 +10033850: 5483 strb r3, [r0, r2] +10033852: 3001 adds r0, #1 +10033854: 2806 cmp r0, #6 +10033856: d1f8 bne.n 1003384a +10033858: 4628 mov r0, r5 +1003385a: f89d 101c ldrb.w r1, [sp, #28] +1003385e: f7ef ff64 bl 1002372a +10033862: e023 b.n 100338ac +10033864: 4620 mov r0, r4 +10033866: 4918 ldr r1, [pc, #96] ; (100338c8 ) +10033868: 2205 movs r2, #5 +1003386a: f7e3 fde9 bl 10017440 +1003386e: 4606 mov r6, r0 +10033870: b158 cbz r0, 1003388a +10033872: aa10 add r2, sp, #64 ; 0x40 +10033874: f842 7d18 str.w r7, [r2, #-24]! +10033878: 4620 mov r0, r4 +1003387a: 4914 ldr r1, [pc, #80] ; (100338cc ) +1003387c: f00a fa94 bl 1003dda8 +10033880: 4628 mov r0, r5 +10033882: 990a ldr r1, [sp, #40] ; 0x28 +10033884: f7ef ff61 bl 1002374a +10033888: e010 b.n 100338ac +1003388a: 4620 mov r0, r4 +1003388c: 4910 ldr r1, [pc, #64] ; (100338d0 ) +1003388e: 2206 movs r2, #6 +10033890: f7e3 fdd6 bl 10017440 +10033894: b150 cbz r0, 100338ac +10033896: aa10 add r2, sp, #64 ; 0x40 +10033898: 490e ldr r1, [pc, #56] ; (100338d4 ) +1003389a: f842 6d18 str.w r6, [r2, #-24]! +1003389e: 4620 mov r0, r4 +100338a0: f00a fa82 bl 1003dda8 +100338a4: 4628 mov r0, r5 +100338a6: 990a ldr r1, [sp, #40] ; 0x28 +100338a8: f7ef ff53 bl 10023752 +100338ac: 2000 movs r0, #0 +100338ae: b011 add sp, #68 ; 0x44 +100338b0: bdf0 pop {r4, r5, r6, r7, pc} +100338b2: bf00 nop +100338b4: 10042064 .word 0x10042064 +100338b8: 10042077 .word 0x10042077 +100338bc: 10042082 .word 0x10042082 +100338c0: 1004209b .word 0x1004209b +100338c4: 100420af .word 0x100420af +100338c8: 100420cb .word 0x100420cb +100338cc: 100420d1 .word 0x100420d1 +100338d0: 100420d9 .word 0x100420d9 +100338d4: 100420e0 .word 0x100420e0 + +100338d8 : +100338d8: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +100338dc: 8894 ldrh r4, [r2, #4] +100338de: 461e mov r6, r3 +100338e0: 6903 ldr r3, [r0, #16] +100338e2: 4620 mov r0, r4 +100338e4: 4690 mov r8, r2 +100338e6: 681f ldr r7, [r3, #0] +100338e8: f7e3 ff62 bl 100177b0 +100338ec: 4605 mov r5, r0 +100338ee: 2800 cmp r0, #0 +100338f0: d03a beq.n 10033968 +100338f2: f8d8 1000 ldr.w r1, [r8] +100338f6: 4622 mov r2, r4 +100338f8: f7e3 fd9a bl 10017430 +100338fc: 2300 movs r3, #0 +100338fe: 9301 str r3, [sp, #4] +10033900: 9300 str r3, [sp, #0] +10033902: 4628 mov r0, r5 +10033904: 466b mov r3, sp +10033906: 491b ldr r1, [pc, #108] ; (10033974 ) +10033908: aa01 add r2, sp, #4 +1003390a: f00a fa4d bl 1003dda8 +1003390e: 9b01 ldr r3, [sp, #4] +10033910: 2b02 cmp r3, #2 +10033912: d00b beq.n 1003392c +10033914: 2b04 cmp r3, #4 +10033916: d011 beq.n 1003393c +10033918: 2b01 cmp r3, #1 +1003391a: d11e bne.n 1003395a +1003391c: 9900 ldr r1, [sp, #0] +1003391e: 4638 mov r0, r7 +10033920: f004 f9bb bl 10037c9a +10033924: 4914 ldr r1, [pc, #80] ; (10033978 ) +10033926: 4602 mov r2, r0 +10033928: 4630 mov r0, r6 +1003392a: e00e b.n 1003394a +1003392c: 9900 ldr r1, [sp, #0] +1003392e: 4638 mov r0, r7 +10033930: f004 f9ba bl 10037ca8 +10033934: 4911 ldr r1, [pc, #68] ; (1003397c ) +10033936: 4602 mov r2, r0 +10033938: 4630 mov r0, r6 +1003393a: e006 b.n 1003394a +1003393c: 9900 ldr r1, [sp, #0] +1003393e: 4638 mov r0, r7 +10033940: f004 f9b9 bl 10037cb6 +10033944: 490e ldr r1, [pc, #56] ; (10033980 ) +10033946: 4602 mov r2, r0 +10033948: 4630 mov r0, r6 +1003394a: f7e7 f8f3 bl 1001ab34 +1003394e: 4628 mov r0, r5 +10033950: 4621 mov r1, r4 +10033952: f7e3 fd6a bl 1001742a +10033956: 2000 movs r0, #0 +10033958: e008 b.n 1003396c +1003395a: 4628 mov r0, r5 +1003395c: 4621 mov r1, r4 +1003395e: f7e3 fd64 bl 1001742a +10033962: f06f 0015 mvn.w r0, #21 +10033966: e001 b.n 1003396c +10033968: f06f 000b mvn.w r0, #11 +1003396c: b002 add sp, #8 +1003396e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10033972: bf00 nop +10033974: 100420e9 .word 0x100420e9 +10033978: 100420ef .word 0x100420ef +1003397c: 100420f6 .word 0x100420f6 +10033980: 100420fd .word 0x100420fd + +10033984 : +10033984: b530 push {r4, r5, lr} +10033986: 6902 ldr r2, [r0, #16] +10033988: b087 sub sp, #28 +1003398a: 6815 ldr r5, [r2, #0] +1003398c: aa04 add r2, sp, #16 +1003398e: 2400 movs r4, #0 +10033990: 9200 str r2, [sp, #0] +10033992: 4618 mov r0, r3 +10033994: 4913 ldr r1, [pc, #76] ; (100339e4 ) +10033996: ab03 add r3, sp, #12 +10033998: aa05 add r2, sp, #20 +1003399a: 9405 str r4, [sp, #20] +1003399c: 9403 str r4, [sp, #12] +1003399e: 9404 str r4, [sp, #16] +100339a0: f00a fa02 bl 1003dda8 +100339a4: 9b05 ldr r3, [sp, #20] +100339a6: 2b02 cmp r3, #2 +100339a8: d00a beq.n 100339c0 +100339aa: 2b04 cmp r3, #4 +100339ac: d010 beq.n 100339d0 +100339ae: 2b01 cmp r3, #1 +100339b0: d114 bne.n 100339dc +100339b2: 4628 mov r0, r5 +100339b4: 9903 ldr r1, [sp, #12] +100339b6: f89d 2010 ldrb.w r2, [sp, #16] +100339ba: f004 f983 bl 10037cc4 +100339be: e005 b.n 100339cc +100339c0: 4628 mov r0, r5 +100339c2: 9903 ldr r1, [sp, #12] +100339c4: f8bd 2010 ldrh.w r2, [sp, #16] +100339c8: f004 f983 bl 10037cd2 +100339cc: 4620 mov r0, r4 +100339ce: e007 b.n 100339e0 +100339d0: 4628 mov r0, r5 +100339d2: 9903 ldr r1, [sp, #12] +100339d4: 9a04 ldr r2, [sp, #16] +100339d6: f004 f983 bl 10037ce0 +100339da: e7f7 b.n 100339cc +100339dc: f06f 0015 mvn.w r0, #21 +100339e0: b007 add sp, #28 +100339e2: bd30 pop {r4, r5, pc} +100339e4: 10042104 .word 0x10042104 + +100339e8 : +100339e8: b538 push {r3, r4, r5, lr} +100339ea: 6804 ldr r4, [r0, #0] +100339ec: f641 0369 movw r3, #6249 ; 0x1869 +100339f0: 5ce3 ldrb r3, [r4, r3] +100339f2: 460d mov r5, r1 +100339f4: b153 cbz r3, 10033a0c +100339f6: 4620 mov r0, r4 +100339f8: f44f 6100 mov.w r1, #2048 ; 0x800 +100339fc: f7ea fdc6 bl 1001e58c +10033a00: 2801 cmp r0, #1 +10033a02: d103 bne.n 10033a0c +10033a04: f44f 707a mov.w r0, #1000 ; 0x3e8 +10033a08: f7e3 fe34 bl 10017674 +10033a0c: f641 0369 movw r3, #6249 ; 0x1869 +10033a10: 5ce3 ldrb r3, [r4, r3] +10033a12: b1ab cbz r3, 10033a40 +10033a14: 4620 mov r0, r4 +10033a16: 2181 movs r1, #129 ; 0x81 +10033a18: f7ea fdb8 bl 1001e58c +10033a1c: 2801 cmp r0, #1 +10033a1e: d10f bne.n 10033a40 +10033a20: f641 035c movw r3, #6236 ; 0x185c +10033a24: 58e3 ldr r3, [r4, r3] +10033a26: f893 251e ldrb.w r2, [r3, #1310] ; 0x51e +10033a2a: f884 251e strb.w r2, [r4, #1310] ; 0x51e +10033a2e: f893 2520 ldrb.w r2, [r3, #1312] ; 0x520 +10033a32: f893 351f ldrb.w r3, [r3, #1311] ; 0x51f +10033a36: f884 2520 strb.w r2, [r4, #1312] ; 0x520 +10033a3a: f884 351f strb.w r3, [r4, #1311] ; 0x51f +10033a3e: e022 b.n 10033a86 +10033a40: f204 5024 addw r0, r4, #1316 ; 0x524 +10033a44: 4629 mov r1, r5 +10033a46: 2200 movs r2, #0 +10033a48: f7ea fdf2 bl 1001e630 +10033a4c: 2801 cmp r0, #1 +10033a4e: d11c bne.n 10033a8a +10033a50: f894 351f ldrb.w r3, [r4, #1311] ; 0x51f +10033a54: f884 551e strb.w r5, [r4, #1310] ; 0x51e +10033a58: 2b01 cmp r3, #1 +10033a5a: d10e bne.n 10033a7a +10033a5c: f1a5 020a sub.w r2, r5, #10 +10033a60: 2a03 cmp r2, #3 +10033a62: d803 bhi.n 10033a6c +10033a64: 4620 mov r0, r4 +10033a66: 4629 mov r1, r5 +10033a68: 2202 movs r2, #2 +10033a6a: e00a b.n 10033a82 +10033a6c: 1e6a subs r2, r5, #1 +10033a6e: 2a03 cmp r2, #3 +10033a70: 4620 mov r0, r4 +10033a72: 4629 mov r1, r5 +10033a74: d803 bhi.n 10033a7e +10033a76: 461a mov r2, r3 +10033a78: e003 b.n 10033a82 +10033a7a: 4620 mov r0, r4 +10033a7c: 4629 mov r1, r5 +10033a7e: f890 2520 ldrb.w r2, [r0, #1312] ; 0x520 +10033a82: f7f4 fe4b bl 1002871c +10033a86: 2000 movs r0, #0 +10033a88: bd38 pop {r3, r4, r5, pc} +10033a8a: f06f 0015 mvn.w r0, #21 +10033a8e: bd38 pop {r3, r4, r5, pc} + +10033a90 : +10033a90: b5f0 push {r4, r5, r6, r7, lr} +10033a92: 461d mov r5, r3 +10033a94: 6903 ldr r3, [r0, #16] +10033a96: b085 sub sp, #20 +10033a98: 681e ldr r6, [r3, #0] +10033a9a: 88d4 ldrh r4, [r2, #6] +10033a9c: 2e00 cmp r6, #0 +10033a9e: d047 beq.n 10033b30 +10033aa0: b91d cbnz r5, 10033aaa +10033aa2: 8095 strh r5, [r2, #4] +10033aa4: f06f 0004 mvn.w r0, #4 +10033aa8: e046 b.n 10033b38 +10033aaa: b114 cbz r4, 10033ab2 +10033aac: 2c01 cmp r4, #1 +10033aae: d029 beq.n 10033b04 +10033ab0: e041 b.n 10033b36 +10033ab2: 4628 mov r0, r5 +10033ab4: f7e7 f8a0 bl 1001abf8 +10033ab8: 280c cmp r0, #12 +10033aba: d001 beq.n 10033ac0 +10033abc: 481f ldr r0, [pc, #124] ; (10033b3c ) +10033abe: e032 b.n 10033b26 +10033ac0: 7828 ldrb r0, [r5, #0] +10033ac2: 7869 ldrb r1, [r5, #1] +10033ac4: f00a ff6c bl 1003e9a0 <__key_2char2num_veneer> +10033ac8: af02 add r7, sp, #8 +10033aca: 5538 strb r0, [r7, r4] +10033acc: 3401 adds r4, #1 +10033ace: 2c06 cmp r4, #6 +10033ad0: f105 0502 add.w r5, r5, #2 +10033ad4: d1f4 bne.n 10033ac0 +10033ad6: 2500 movs r5, #0 +10033ad8: 9500 str r5, [sp, #0] +10033ada: 4630 mov r0, r6 +10033adc: f44f 718d mov.w r1, #282 ; 0x11a +10033ae0: 4622 mov r2, r4 +10033ae2: 463b mov r3, r7 +10033ae4: f7f9 fd2c bl 1002d540 +10033ae8: b908 cbnz r0, 10033aee +10033aea: 4815 ldr r0, [pc, #84] ; (10033b40 ) +10033aec: e01b b.n 10033b26 +10033aee: f506 50a4 add.w r0, r6, #5248 ; 0x1480 +10033af2: 4639 mov r1, r7 +10033af4: 4622 mov r2, r4 +10033af6: 3019 adds r0, #25 +10033af8: f7e7 f86a bl 1001abd0 +10033afc: 4811 ldr r0, [pc, #68] ; (10033b44 ) +10033afe: f7e7 f83f bl 1001ab80 +10033b02: e018 b.n 10033b36 +10033b04: 4628 mov r0, r5 +10033b06: 2100 movs r1, #0 +10033b08: 2210 movs r2, #16 +10033b0a: 4b0f ldr r3, [pc, #60] ; (10033b48 ) +10033b0c: 4798 blx r3 +10033b0e: 2500 movs r5, #0 +10033b10: ab04 add r3, sp, #16 +10033b12: f803 0d08 strb.w r0, [r3, #-8]! +10033b16: 21c8 movs r1, #200 ; 0xc8 +10033b18: 9500 str r5, [sp, #0] +10033b1a: 4630 mov r0, r6 +10033b1c: 4622 mov r2, r4 +10033b1e: f7f9 fd0f bl 1002d540 +10033b22: b940 cbnz r0, 10033b36 +10033b24: 4809 ldr r0, [pc, #36] ; (10033b4c ) +10033b26: f7e7 f82b bl 1001ab80 +10033b2a: f04f 30ff mov.w r0, #4294967295 +10033b2e: e003 b.n 10033b38 +10033b30: f06f 0063 mvn.w r0, #99 ; 0x63 +10033b34: e000 b.n 10033b38 +10033b36: 2000 movs r0, #0 +10033b38: b005 add sp, #20 +10033b3a: bdf0 pop {r4, r5, r6, r7, pc} +10033b3c: 1004210d .word 0x1004210d +10033b40: 10042129 .word 0x10042129 +10033b44: 10042144 .word 0x10042144 +10033b48: 0000f965 .word 0x0000f965 +10033b4c: 1004217e .word 0x1004217e + +10033b50 : +10033b50: 4608 mov r0, r1 +10033b52: 4611 mov r1, r2 +10033b54: 461a mov r2, r3 +10033b56: f7d9 bf13 b.w 1000d980 + +10033b5a : +10033b5a: b530 push {r4, r5, lr} +10033b5c: 4608 mov r0, r1 +10033b5e: b085 sub sp, #20 +10033b60: 460d mov r5, r1 +10033b62: f7e7 f849 bl 1001abf8 +10033b66: f5b0 7f80 cmp.w r0, #256 ; 0x100 +10033b6a: d822 bhi.n 10033bb2 +10033b6c: f240 1001 movw r0, #257 ; 0x101 +10033b70: f7e3 fe2e bl 100177d0 +10033b74: 4604 mov r4, r0 +10033b76: b1e0 cbz r0, 10033bb2 +10033b78: 4628 mov r0, r5 +10033b7a: f7e7 f83d bl 1001abf8 +10033b7e: 4629 mov r1, r5 +10033b80: 4602 mov r2, r0 +10033b82: 4620 mov r0, r4 +10033b84: f7e3 fc54 bl 10017430 +10033b88: 2100 movs r1, #0 +10033b8a: 2210 movs r2, #16 +10033b8c: 4668 mov r0, sp +10033b8e: f7e3 fc5f bl 10017450 +10033b92: 4628 mov r0, r5 +10033b94: f7e7 f830 bl 1001abf8 +10033b98: 4669 mov r1, sp +10033b9a: f8ad 0004 strh.w r0, [sp, #4] +10033b9e: 4622 mov r2, r4 +10033ba0: f648 4002 movw r0, #35842 ; 0x8c02 +10033ba4: f7d9 feec bl 1000d980 +10033ba8: 4620 mov r0, r4 +10033baa: f240 1101 movw r1, #257 ; 0x101 +10033bae: f7e3 fc3c bl 1001742a +10033bb2: b005 add sp, #20 +10033bb4: bd30 pop {r4, r5, pc} + +10033bb6 : +10033bb6: b51f push {r0, r1, r2, r3, r4, lr} +10033bb8: 4604 mov r4, r0 +10033bba: 2100 movs r1, #0 +10033bbc: 4668 mov r0, sp +10033bbe: 2210 movs r2, #16 +10033bc0: f7e3 fc46 bl 10017450 +10033bc4: 6c23 ldr r3, [r4, #64] ; 0x40 +10033bc6: f648 3019 movw r0, #35609 ; 0x8b19 +10033bca: 9300 str r3, [sp, #0] +10033bcc: 6c63 ldr r3, [r4, #68] ; 0x44 +10033bce: 4669 mov r1, sp +10033bd0: 2200 movs r2, #0 +10033bd2: f8ad 3004 strh.w r3, [sp, #4] +10033bd6: f7d9 fed3 bl 1000d980 +10033bda: b004 add sp, #16 +10033bdc: bd10 pop {r4, pc} + +10033bde : +10033bde: b51f push {r0, r1, r2, r3, r4, lr} +10033be0: 4604 mov r4, r0 +10033be2: 2100 movs r1, #0 +10033be4: 4668 mov r0, sp +10033be6: 2210 movs r2, #16 +10033be8: f7e3 fc32 bl 10017450 +10033bec: 2200 movs r2, #0 +10033bee: 6422 str r2, [r4, #64] ; 0x40 +10033bf0: 6462 str r2, [r4, #68] ; 0x44 +10033bf2: f8a4 204a strh.w r2, [r4, #74] ; 0x4a +10033bf6: f648 3019 movw r0, #35609 ; 0x8b19 +10033bfa: 4669 mov r1, sp +10033bfc: f8ad 2006 strh.w r2, [sp, #6] +10033c00: f7d9 febe bl 1000d980 +10033c04: b004 add sp, #16 +10033c06: bd10 pop {r4, pc} + +10033c08 : +10033c08: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +10033c0a: f240 1001 movw r0, #257 ; 0x101 +10033c0e: 4616 mov r6, r2 +10033c10: 461d mov r5, r3 +10033c12: f7e3 fddd bl 100177d0 +10033c16: 4604 mov r4, r0 +10033c18: b1d0 cbz r0, 10033c50 +10033c1a: 480e ldr r0, [pc, #56] ; (10033c54 ) +10033c1c: f7e6 ffec bl 1001abf8 +10033c20: 490c ldr r1, [pc, #48] ; (10033c54 ) +10033c22: 4602 mov r2, r0 +10033c24: 4620 mov r0, r4 +10033c26: f7e3 fc03 bl 10017430 +10033c2a: 4668 mov r0, sp +10033c2c: 2100 movs r1, #0 +10033c2e: 2210 movs r2, #16 +10033c30: f7e3 fc0e bl 10017450 +10033c34: f648 4002 movw r0, #35842 ; 0x8c02 +10033c38: 4669 mov r1, sp +10033c3a: 4622 mov r2, r4 +10033c3c: 9600 str r6, [sp, #0] +10033c3e: f8ad 5004 strh.w r5, [sp, #4] +10033c42: f7d9 fe9d bl 1000d980 +10033c46: 4620 mov r0, r4 +10033c48: f240 1101 movw r1, #257 ; 0x101 +10033c4c: f7e3 fbed bl 1001742a +10033c50: b004 add sp, #16 +10033c52: bd70 pop {r4, r5, r6, pc} +10033c54: 1003fc93 .word 0x1003fc93 + +10033c58 : +10033c58: b530 push {r4, r5, lr} +10033c5a: f240 1001 movw r0, #257 ; 0x101 +10033c5e: b085 sub sp, #20 +10033c60: 460d mov r5, r1 +10033c62: f7e3 fdb5 bl 100177d0 +10033c66: 4604 mov r4, r0 +10033c68: b1e8 cbz r0, 10033ca6 +10033c6a: 4810 ldr r0, [pc, #64] ; (10033cac ) +10033c6c: f7e6 ffc4 bl 1001abf8 +10033c70: 490e ldr r1, [pc, #56] ; (10033cac ) +10033c72: 4602 mov r2, r0 +10033c74: 4620 mov r0, r4 +10033c76: f7e3 fbdb bl 10017430 +10033c7a: 4668 mov r0, sp +10033c7c: 2100 movs r1, #0 +10033c7e: 2210 movs r2, #16 +10033c80: f7e3 fbe6 bl 10017450 +10033c84: f10d 0002 add.w r0, sp, #2 +10033c88: 4629 mov r1, r5 +10033c8a: 2206 movs r2, #6 +10033c8c: f7e3 fbd0 bl 10017430 +10033c90: f648 4002 movw r0, #35842 ; 0x8c02 +10033c94: 4669 mov r1, sp +10033c96: 4622 mov r2, r4 +10033c98: f7d9 fe72 bl 1000d980 +10033c9c: 4620 mov r0, r4 +10033c9e: f240 1101 movw r1, #257 ; 0x101 +10033ca2: f7e3 fbc2 bl 1001742a +10033ca6: b005 add sp, #20 +10033ca8: bd30 pop {r4, r5, pc} +10033caa: bf00 nop +10033cac: 1003fc9d .word 0x1003fc9d + +10033cb0 : +10033cb0: b51f push {r0, r1, r2, r3, r4, lr} +10033cb2: 4604 mov r4, r0 +10033cb4: 2100 movs r1, #0 +10033cb6: 4668 mov r0, sp +10033cb8: 2210 movs r2, #16 +10033cba: f7e3 fbc9 bl 10017450 +10033cbe: 2301 movs r3, #1 +10033cc0: f10d 0002 add.w r0, sp, #2 +10033cc4: f104 019c add.w r1, r4, #156 ; 0x9c +10033cc8: 2206 movs r2, #6 +10033cca: f88d 3001 strb.w r3, [sp, #1] +10033cce: f7e3 fbaf bl 10017430 +10033cd2: f648 3015 movw r0, #35605 ; 0x8b15 +10033cd6: 4669 mov r1, sp +10033cd8: 2200 movs r2, #0 +10033cda: f7d9 fe51 bl 1000d980 +10033cde: b004 add sp, #16 +10033ce0: bd10 pop {r4, pc} + +10033ce2 : +10033ce2: b51f push {r0, r1, r2, r3, r4, lr} +10033ce4: 2100 movs r1, #0 +10033ce6: 4668 mov r0, sp +10033ce8: 2210 movs r2, #16 +10033cea: f7e3 fbb1 bl 10017450 +10033cee: 2301 movs r3, #1 +10033cf0: f10d 0002 add.w r0, sp, #2 +10033cf4: 2100 movs r1, #0 +10033cf6: 2206 movs r2, #6 +10033cf8: f88d 3001 strb.w r3, [sp, #1] +10033cfc: f7e3 fba8 bl 10017450 +10033d00: f648 3015 movw r0, #35605 ; 0x8b15 +10033d04: 4669 mov r1, sp +10033d06: 2200 movs r2, #0 +10033d08: f7d9 fe3a bl 1000d980 +10033d0c: b005 add sp, #20 +10033d0e: f85d fb04 ldr.w pc, [sp], #4 + +10033d12 : +10033d12: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +10033d14: 2300 movs r3, #0 +10033d16: 4604 mov r4, r0 +10033d18: 4616 mov r6, r2 +10033d1a: 9302 str r3, [sp, #8] +10033d1c: 9303 str r3, [sp, #12] +10033d1e: 460d mov r5, r1 +10033d20: b111 cbz r1, 10033d28 +10033d22: 3a04 subs r2, #4 +10033d24: 2afc cmp r2, #252 ; 0xfc +10033d26: d909 bls.n 10033d3c +10033d28: 6923 ldr r3, [r4, #16] +10033d2a: 2d00 cmp r5, #0 +10033d2c: f423 7380 bic.w r3, r3, #256 ; 0x100 +10033d30: 6123 str r3, [r4, #16] +10033d32: bf14 ite ne +10033d34: f06f 0015 mvnne.w r0, #21 +10033d38: 2000 moveq r0, #0 +10033d3a: e07f b.n 10033e3c +10033d3c: 9300 str r3, [sp, #0] +10033d3e: 4608 mov r0, r1 +10033d40: aa02 add r2, sp, #8 +10033d42: 4631 mov r1, r6 +10033d44: ab03 add r3, sp, #12 +10033d46: f00a fde7 bl 1003e918 <__rtw_parse_wpa_ie_veneer> +10033d4a: 2801 cmp r0, #1 +10033d4c: d10d bne.n 10033d6a +10033d4e: 2302 movs r3, #2 +10033d50: f8c4 3d08 str.w r3, [r4, #3336] ; 0xd08 +10033d54: 2204 movs r2, #4 +10033d56: f241 036c movw r3, #4204 ; 0x106c +10033d5a: f504 5084 add.w r0, r4, #4224 ; 0x1080 +10033d5e: 50e2 str r2, [r4, r3] +10033d60: 3010 adds r0, #16 +10033d62: 4629 mov r1, r5 +10033d64: 4632 mov r2, r6 +10033d66: f7e3 fb63 bl 10017430 +10033d6a: 2300 movs r3, #0 +10033d6c: 9300 str r3, [sp, #0] +10033d6e: 4628 mov r0, r5 +10033d70: 4631 mov r1, r6 +10033d72: aa02 add r2, sp, #8 +10033d74: ab03 add r3, sp, #12 +10033d76: f00a fdaf bl 1003e8d8 <__rtw_parse_wpa2_ie_veneer> +10033d7a: 2801 cmp r0, #1 +10033d7c: d10d bne.n 10033d9a +10033d7e: 2302 movs r3, #2 +10033d80: f8c4 3d08 str.w r3, [r4, #3336] ; 0xd08 +10033d84: 2207 movs r2, #7 +10033d86: f241 036c movw r3, #4204 ; 0x106c +10033d8a: f504 5084 add.w r0, r4, #4224 ; 0x1080 +10033d8e: 50e2 str r2, [r4, r3] +10033d90: 3010 adds r0, #16 +10033d92: 4629 mov r1, r5 +10033d94: 4632 mov r2, r6 +10033d96: f7e3 fb4b bl 10017430 +10033d9a: 9a02 ldr r2, [sp, #8] +10033d9c: 2300 movs r3, #0 +10033d9e: 3a01 subs r2, #1 +10033da0: 2a0f cmp r2, #15 +10033da2: d822 bhi.n 10033dea +10033da4: e8df f002 tbb [pc, r2] +10033da8: 1b210c08 .word 0x1b210c08 +10033dac: 0e212121 .word 0x0e212121 +10033db0: 21212121 .word 0x21212121 +10033db4: 16212121 .word 0x16212121 +10033db8: f8c4 3d64 str.w r3, [r4, #3428] ; 0xd64 +10033dbc: 2201 movs r2, #1 +10033dbe: e005 b.n 10033dcc +10033dc0: 2201 movs r2, #1 +10033dc2: e00d b.n 10033de0 +10033dc4: 2302 movs r3, #2 +10033dc6: f8c4 3d64 str.w r3, [r4, #3428] ; 0xd64 +10033dca: 2204 movs r2, #4 +10033dcc: f241 0370 movw r3, #4208 ; 0x1070 +10033dd0: 50e2 str r2, [r4, r3] +10033dd2: e00a b.n 10033dea +10033dd4: 2304 movs r3, #4 +10033dd6: f8c4 3d64 str.w r3, [r4, #3428] ; 0xd64 +10033dda: 2206 movs r2, #6 +10033ddc: e7f6 b.n 10033dcc +10033dde: 2205 movs r2, #5 +10033de0: f8c4 2d64 str.w r2, [r4, #3428] ; 0xd64 +10033de4: f241 0270 movw r2, #4208 ; 0x1070 +10033de8: 50a3 str r3, [r4, r2] +10033dea: 9a03 ldr r2, [sp, #12] +10033dec: 2300 movs r3, #0 +10033dee: 3a01 subs r2, #1 +10033df0: 2a0f cmp r2, #15 +10033df2: d822 bhi.n 10033e3a +10033df4: e8df f002 tbb [pc, r2] +10033df8: 1b210c08 .word 0x1b210c08 +10033dfc: 0e212121 .word 0x0e212121 +10033e00: 21212121 .word 0x21212121 +10033e04: 13212121 .word 0x13212121 +10033e08: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c +10033e0c: 2201 movs r2, #1 +10033e0e: e00a b.n 10033e26 +10033e10: 2201 movs r2, #1 +10033e12: e00d b.n 10033e30 +10033e14: 2302 movs r3, #2 +10033e16: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c +10033e1a: 2204 movs r2, #4 +10033e1c: e003 b.n 10033e26 +10033e1e: 2304 movs r3, #4 +10033e20: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c +10033e24: 2206 movs r2, #6 +10033e26: f241 0370 movw r3, #4208 ; 0x1070 +10033e2a: 50e2 str r2, [r4, r3] +10033e2c: e005 b.n 10033e3a +10033e2e: 2205 movs r2, #5 +10033e30: f8c4 2d0c str.w r2, [r4, #3340] ; 0xd0c +10033e34: f241 0270 movw r2, #4208 ; 0x1070 +10033e38: 50a3 str r3, [r4, r2] +10033e3a: 2000 movs r0, #0 +10033e3c: b004 add sp, #16 +10033e3e: bd70 pop {r4, r5, r6, pc} + +10033e40 : +10033e40: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10033e44: b378 cbz r0, 10033ea6 +10033e46: b371 cbz r1, 10033ea6 +10033e48: 3101 adds r1, #1 +10033e4a: 2300 movs r3, #0 +10033e4c: 4293 cmp r3, r2 +10033e4e: da2a bge.n 10033ea6 +10033e50: f811 4c01 ldrb.w r4, [r1, #-1] +10033e54: 2c60 cmp r4, #96 ; 0x60 +10033e56: d804 bhi.n 10033e62 +10033e58: 2c41 cmp r4, #65 ; 0x41 +10033e5a: bf34 ite cc +10033e5c: 2630 movcc r6, #48 ; 0x30 +10033e5e: 2641 movcs r6, #65 ; 0x41 +10033e60: e000 b.n 10033e64 +10033e62: 2661 movs r6, #97 ; 0x61 +10033e64: 780d ldrb r5, [r1, #0] +10033e66: 2d60 cmp r5, #96 ; 0x60 +10033e68: d804 bhi.n 10033e74 +10033e6a: 2d41 cmp r5, #65 ; 0x41 +10033e6c: bf34 ite cc +10033e6e: 2730 movcc r7, #48 ; 0x30 +10033e70: 2741 movcs r7, #65 ; 0x41 +10033e72: e000 b.n 10033e76 +10033e74: 2761 movs r7, #97 ; 0x61 +10033e76: 2c41 cmp r4, #65 ; 0x41 +10033e78: bf34 ite cc +10033e7a: f04f 0800 movcc.w r8, #0 +10033e7e: f04f 080a movcs.w r8, #10 +10033e82: 1ba4 subs r4, r4, r6 +10033e84: 2d41 cmp r5, #65 ; 0x41 +10033e86: ebc7 0705 rsb r7, r7, r5 +10033e8a: eb08 0504 add.w r5, r8, r4 +10033e8e: bf34 ite cc +10033e90: f04f 0c00 movcc.w ip, #0 +10033e94: f04f 0c0a movcs.w ip, #10 +10033e98: eb07 1505 add.w r5, r7, r5, lsl #4 +10033e9c: 4465 add r5, ip +10033e9e: 54c5 strb r5, [r0, r3] +10033ea0: 3102 adds r1, #2 +10033ea2: 3301 adds r3, #1 +10033ea4: e7d2 b.n 10033e4c +10033ea6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + ... + +10033eac : +10033eac: b570 push {r4, r5, r6, lr} +10033eae: 461d mov r5, r3 +10033eb0: 6903 ldr r3, [r0, #16] +10033eb2: 4616 mov r6, r2 +10033eb4: 681c ldr r4, [r3, #0] +10033eb6: f504 549a add.w r4, r4, #4928 ; 0x1340 +10033eba: 3404 adds r4, #4 +10033ebc: 4620 mov r0, r4 +10033ebe: f7e6 fe9b bl 1001abf8 +10033ec2: b282 uxth r2, r0 +10033ec4: 1e53 subs r3, r2, #1 +10033ec6: 2b3e cmp r3, #62 ; 0x3e +10033ec8: 80b2 strh r2, [r6, #4] +10033eca: d802 bhi.n 10033ed2 +10033ecc: 4628 mov r0, r5 +10033ece: 4621 mov r1, r4 +10033ed0: e00c b.n 10033eec +10033ed2: 4808 ldr r0, [pc, #32] ; (10033ef4 ) +10033ed4: f7e6 fe90 bl 1001abf8 +10033ed8: 2840 cmp r0, #64 ; 0x40 +10033eda: d109 bne.n 10033ef0 +10033edc: 4805 ldr r0, [pc, #20] ; (10033ef4 ) +10033ede: f7e6 fe8b bl 1001abf8 +10033ee2: 4904 ldr r1, [pc, #16] ; (10033ef4 ) +10033ee4: 4602 mov r2, r0 +10033ee6: 80b0 strh r0, [r6, #4] +10033ee8: b292 uxth r2, r2 +10033eea: 4628 mov r0, r5 +10033eec: f7e3 faa0 bl 10017430 +10033ef0: 2000 movs r0, #0 +10033ef2: bd70 pop {r4, r5, r6, pc} +10033ef4: 1004bc82 .word 0x1004bc82 + +10033ef8 : +10033ef8: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +10033efc: 461d mov r5, r3 +10033efe: 6903 ldr r3, [r0, #16] +10033f00: 4680 mov r8, r0 +10033f02: f44f 7040 mov.w r0, #768 ; 0x300 +10033f06: 4617 mov r7, r2 +10033f08: 681c ldr r4, [r3, #0] +10033f0a: f7e3 fc51 bl 100177b0 +10033f0e: 2100 movs r1, #0 +10033f10: 4606 mov r6, r0 +10033f12: f44f 7240 mov.w r2, #768 ; 0x300 +10033f16: f7e3 fa9b bl 10017450 +10033f1a: 88ba ldrh r2, [r7, #4] +10033f1c: 4620 mov r0, r4 +10033f1e: 4629 mov r1, r5 +10033f20: 4633 mov r3, r6 +10033f22: f7e8 f8d9 bl 1001c0d8 +10033f26: f5b0 7f40 cmp.w r0, #768 ; 0x300 +10033f2a: 4607 mov r7, r0 +10033f2c: dc4a bgt.n 10033fc4 +10033f2e: f241 036c movw r3, #4204 ; 0x106c +10033f32: 58e3 ldr r3, [r4, r3] +10033f34: 2b04 cmp r3, #4 +10033f36: d001 beq.n 10033f3c +10033f38: 2b07 cmp r3, #7 +10033f3a: d112 bne.n 10033f62 +10033f3c: 2130 movs r1, #48 ; 0x30 +10033f3e: aa01 add r2, sp, #4 +10033f40: 463b mov r3, r7 +10033f42: 4630 mov r0, r6 +10033f44: f00a fc8c bl 1003e860 <__rtw_get_ie_veneer> +10033f48: f8bd 2004 ldrh.w r2, [sp, #4] +10033f4c: 4601 mov r1, r0 +10033f4e: 4620 mov r0, r4 +10033f50: f7f1 feba bl 10025cc8 +10033f54: f504 519a add.w r1, r4, #4928 ; 0x1340 +10033f58: 4620 mov r0, r4 +10033f5a: 3104 adds r1, #4 +10033f5c: 462a mov r2, r5 +10033f5e: f7f1 fe59 bl 10025c14 +10033f62: f107 050e add.w r5, r7, #14 +10033f66: 4628 mov r0, r5 +10033f68: f7e3 fc22 bl 100177b0 +10033f6c: 4604 mov r4, r0 +10033f6e: 2100 movs r1, #0 +10033f70: 462a mov r2, r5 +10033f72: f104 090e add.w r9, r4, #14 +10033f76: f7e3 fa6b bl 10017450 +10033f7a: 4648 mov r0, r9 +10033f7c: 4631 mov r1, r6 +10033f7e: 463a mov r2, r7 +10033f80: f7e3 fa56 bl 10017430 +10033f84: f8d8 3010 ldr.w r3, [r8, #16] +10033f88: f8d3 8000 ldr.w r8, [r3] +10033f8c: f8d8 3010 ldr.w r3, [r8, #16] +10033f90: f013 0310 ands.w r3, r3, #16 +10033f94: d014 beq.n 10033fc0 +10033f96: f508 6050 add.w r0, r8, #3328 ; 0xd00 +10033f9a: f104 010c add.w r1, r4, #12 +10033f9e: 2202 movs r2, #2 +10033fa0: f7e3 fa46 bl 10017430 +10033fa4: f8b8 3d00 ldrh.w r3, [r8, #3328] ; 0xd00 +10033fa8: 3b01 subs r3, #1 +10033faa: b29b uxth r3, r3 +10033fac: 2b04 cmp r3, #4 +10033fae: d902 bls.n 10033fb6 +10033fb0: 2305 movs r3, #5 +10033fb2: f8a8 3d00 strh.w r3, [r8, #3328] ; 0xd00 +10033fb6: 4640 mov r0, r8 +10033fb8: 4649 mov r1, r9 +10033fba: 463a mov r2, r7 +10033fbc: f7e7 f994 bl 1001b2e8 +10033fc0: 2700 movs r7, #0 +10033fc2: e003 b.n 10033fcc +10033fc4: 2500 movs r5, #0 +10033fc6: 462c mov r4, r5 +10033fc8: f04f 37ff mov.w r7, #4294967295 +10033fcc: b126 cbz r6, 10033fd8 +10033fce: 4630 mov r0, r6 +10033fd0: f44f 7140 mov.w r1, #768 ; 0x300 +10033fd4: f7e3 fa29 bl 1001742a +10033fd8: b11c cbz r4, 10033fe2 +10033fda: 4620 mov r0, r4 +10033fdc: 4629 mov r1, r5 +10033fde: f7e3 fa24 bl 1001742a +10033fe2: 4638 mov r0, r7 +10033fe4: b003 add sp, #12 +10033fe6: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + ... + +10033fec : +10033fec: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10033ff0: 4c31 ldr r4, [pc, #196] ; (100340b8 ) +10033ff2: 4607 mov r7, r0 +10033ff4: 6823 ldr r3, [r4, #0] +10033ff6: b11b cbz r3, 10034000 +10033ff8: 4b30 ldr r3, [pc, #192] ; (100340bc ) +10033ffa: 6f18 ldr r0, [r3, #112] ; 0x70 +10033ffc: f7e6 fdc0 bl 1001ab80 +10034000: 2601 movs r6, #1 +10034002: 2500 movs r5, #0 +10034004: f006 0803 and.w r8, r6, #3 +10034008: f1b8 0f01 cmp.w r8, #1 +1003400c: d107 bne.n 1003401e +1003400e: 6823 ldr r3, [r4, #0] +10034010: b12b cbz r3, 1003401e +10034012: 4b2a ldr r3, [pc, #168] ; (100340bc ) +10034014: 4629 mov r1, r5 +10034016: f8d3 0080 ldr.w r0, [r3, #128] ; 0x80 +1003401a: f7e6 fdb1 bl 1001ab80 +1003401e: 6823 ldr r3, [r4, #0] +10034020: b153 cbz r3, 10034038 +10034022: 4b26 ldr r3, [pc, #152] ; (100340bc ) +10034024: 4629 mov r1, r5 +10034026: 4638 mov r0, r7 +10034028: f8d3 9084 ldr.w r9, [r3, #132] ; 0x84 +1003402c: f003 fe43 bl 10037cb6 +10034030: 4601 mov r1, r0 +10034032: 4648 mov r0, r9 +10034034: f7e6 fda4 bl 1001ab80 +10034038: f1b8 0f00 cmp.w r8, #0 +1003403c: d106 bne.n 1003404c +1003403e: 6823 ldr r3, [r4, #0] +10034040: b123 cbz r3, 1003404c +10034042: 4b1e ldr r3, [pc, #120] ; (100340bc ) +10034044: f8d3 0088 ldr.w r0, [r3, #136] ; 0x88 +10034048: f7e6 fd9a bl 1001ab80 +1003404c: 3504 adds r5, #4 +1003404e: f5b5 7f40 cmp.w r5, #768 ; 0x300 +10034052: f106 0601 add.w r6, r6, #1 +10034056: d1d5 bne.n 10034004 +10034058: 26c1 movs r6, #193 ; 0xc1 +1003405a: f44f 6580 mov.w r5, #1024 ; 0x400 +1003405e: f006 0803 and.w r8, r6, #3 +10034062: f1b8 0f01 cmp.w r8, #1 +10034066: d107 bne.n 10034078 +10034068: 6823 ldr r3, [r4, #0] +1003406a: b12b cbz r3, 10034078 +1003406c: 4b13 ldr r3, [pc, #76] ; (100340bc ) +1003406e: 4629 mov r1, r5 +10034070: f8d3 0080 ldr.w r0, [r3, #128] ; 0x80 +10034074: f7e6 fd84 bl 1001ab80 +10034078: 6823 ldr r3, [r4, #0] +1003407a: b153 cbz r3, 10034092 +1003407c: 4b0f ldr r3, [pc, #60] ; (100340bc ) +1003407e: 4629 mov r1, r5 +10034080: 4638 mov r0, r7 +10034082: f8d3 9084 ldr.w r9, [r3, #132] ; 0x84 +10034086: f003 fe16 bl 10037cb6 +1003408a: 4601 mov r1, r0 +1003408c: 4648 mov r0, r9 +1003408e: f7e6 fd77 bl 1001ab80 +10034092: f1b8 0f00 cmp.w r8, #0 +10034096: d106 bne.n 100340a6 +10034098: 6823 ldr r3, [r4, #0] +1003409a: b123 cbz r3, 100340a6 +1003409c: 4b07 ldr r3, [pc, #28] ; (100340bc ) +1003409e: f8d3 0088 ldr.w r0, [r3, #136] ; 0x88 +100340a2: f7e6 fd6d bl 1001ab80 +100340a6: 3504 adds r5, #4 +100340a8: f5b5 6f00 cmp.w r5, #2048 ; 0x800 +100340ac: f106 0601 add.w r6, r6, #1 +100340b0: d1d5 bne.n 1003405e +100340b2: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +100340b6: bf00 nop +100340b8: 10044f38 .word 0x10044f38 +100340bc: 10043ac4 .word 0x10043ac4 + +100340c0 : +100340c0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +100340c4: 4e19 ldr r6, [pc, #100] ; (1003412c ) +100340c6: 4680 mov r8, r0 +100340c8: 6833 ldr r3, [r6, #0] +100340ca: b11b cbz r3, 100340d4 +100340cc: 4b18 ldr r3, [pc, #96] ; (10034130 ) +100340ce: 6f58 ldr r0, [r3, #116] ; 0x74 +100340d0: f7e6 fd56 bl 1001ab80 +100340d4: 2501 movs r5, #1 +100340d6: f44f 6400 mov.w r4, #2048 ; 0x800 +100340da: f005 0703 and.w r7, r5, #3 +100340de: 2f01 cmp r7, #1 +100340e0: d107 bne.n 100340f2 +100340e2: 6833 ldr r3, [r6, #0] +100340e4: b12b cbz r3, 100340f2 +100340e6: 4b12 ldr r3, [pc, #72] ; (10034130 ) +100340e8: 4621 mov r1, r4 +100340ea: f8d3 0080 ldr.w r0, [r3, #128] ; 0x80 +100340ee: f7e6 fd47 bl 1001ab80 +100340f2: 6833 ldr r3, [r6, #0] +100340f4: b153 cbz r3, 1003410c +100340f6: 4b0e ldr r3, [pc, #56] ; (10034130 ) +100340f8: 4621 mov r1, r4 +100340fa: 4640 mov r0, r8 +100340fc: f8d3 9084 ldr.w r9, [r3, #132] ; 0x84 +10034100: f003 fdd9 bl 10037cb6 +10034104: 4601 mov r1, r0 +10034106: 4648 mov r0, r9 +10034108: f7e6 fd3a bl 1001ab80 +1003410c: b937 cbnz r7, 1003411c +1003410e: 6833 ldr r3, [r6, #0] +10034110: b123 cbz r3, 1003411c +10034112: 4b07 ldr r3, [pc, #28] ; (10034130 ) +10034114: f8d3 0088 ldr.w r0, [r3, #136] ; 0x88 +10034118: f7e6 fd32 bl 1001ab80 +1003411c: 3404 adds r4, #4 +1003411e: f5b4 5f80 cmp.w r4, #4096 ; 0x1000 +10034122: f105 0501 add.w r5, r5, #1 +10034126: d1d8 bne.n 100340da +10034128: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1003412c: 10044f38 .word 0x10044f38 +10034130: 10043ac4 .word 0x10043ac4 + +10034134 : +10034134: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +10034138: 4d22 ldr r5, [pc, #136] ; (100341c4 ) +1003413a: 2117 movs r1, #23 +1003413c: f10d 0207 add.w r2, sp, #7 +10034140: 4680 mov r8, r0 +10034142: f7fe f9dd bl 10032500 +10034146: 682b ldr r3, [r5, #0] +10034148: b11b cbz r3, 10034152 +1003414a: 4b1f ldr r3, [pc, #124] ; (100341c8 ) +1003414c: 6f98 ldr r0, [r3, #120] ; 0x78 +1003414e: f7e6 fd17 bl 1001ab80 +10034152: 682b ldr r3, [r5, #0] +10034154: b123 cbz r3, 10034160 +10034156: 4b1c ldr r3, [pc, #112] ; (100341c8 ) +10034158: 2100 movs r1, #0 +1003415a: 6f98 ldr r0, [r3, #120] ; 0x78 +1003415c: f7e6 fd10 bl 1001ab80 +10034160: 2400 movs r4, #0 +10034162: 4640 mov r0, r8 +10034164: 2100 movs r1, #0 +10034166: 4622 mov r2, r4 +10034168: f04f 33ff mov.w r3, #4294967295 +1003416c: f7fe faad bl 100326ca +10034170: 1c66 adds r6, r4, #1 +10034172: f006 0703 and.w r7, r6, #3 +10034176: 2f01 cmp r7, #1 +10034178: 4681 mov r9, r0 +1003417a: d019 beq.n 100341b0 +1003417c: 682b ldr r3, [r5, #0] +1003417e: b983 cbnz r3, 100341a2 +10034180: b137 cbz r7, 10034190 +10034182: f5b6 7f80 cmp.w r6, #256 ; 0x100 +10034186: 4634 mov r4, r6 +10034188: d1eb bne.n 10034162 +1003418a: b003 add sp, #12 +1003418c: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +10034190: 682b ldr r3, [r5, #0] +10034192: 2b00 cmp r3, #0 +10034194: d0f5 beq.n 10034182 +10034196: 4b0c ldr r3, [pc, #48] ; (100341c8 ) +10034198: f8d3 0088 ldr.w r0, [r3, #136] ; 0x88 +1003419c: f7e6 fcf0 bl 1001ab80 +100341a0: e7ef b.n 10034182 +100341a2: 4b09 ldr r3, [pc, #36] ; (100341c8 ) +100341a4: 4649 mov r1, r9 +100341a6: f8d3 0084 ldr.w r0, [r3, #132] ; 0x84 +100341aa: f7e6 fce9 bl 1001ab80 +100341ae: e7e7 b.n 10034180 +100341b0: 682b ldr r3, [r5, #0] +100341b2: 2b00 cmp r3, #0 +100341b4: d0e2 beq.n 1003417c +100341b6: 4b04 ldr r3, [pc, #16] ; (100341c8 ) +100341b8: 4621 mov r1, r4 +100341ba: f8d3 0080 ldr.w r0, [r3, #128] ; 0x80 +100341be: f7e6 fcdf bl 1001ab80 +100341c2: e7db b.n 1003417c +100341c4: 10044f38 .word 0x10044f38 +100341c8: 10043ac4 .word 0x10043ac4 + +100341cc : +100341cc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100341d0: 6903 ldr r3, [r0, #16] +100341d2: 8894 ldrh r4, [r2, #4] +100341d4: f8d3 8000 ldr.w r8, [r3] +100341d8: b087 sub sp, #28 +100341da: 2300 movs r3, #0 +100341dc: 42a3 cmp r3, r4 +100341de: 6811 ldr r1, [r2, #0] +100341e0: f103 0001 add.w r0, r3, #1 +100341e4: da02 bge.n 100341ec +100341e6: 56cb ldrsb r3, [r1, r3] +100341e8: 2b20 cmp r3, #32 +100341ea: d125 bne.n 10034238 +100341ec: 180d adds r5, r1, r0 +100341ee: 2210 movs r2, #16 +100341f0: 4608 mov r0, r1 +100341f2: 2100 movs r1, #0 +100341f4: f00a fb80 bl 1003e8f8 <__Strtoul_veneer> +100341f8: 2100 movs r1, #0 +100341fa: 4604 mov r4, r0 +100341fc: 2210 movs r2, #16 +100341fe: 4628 mov r0, r5 +10034200: f00a fb7a bl 1003e8f8 <__Strtoul_veneer> +10034204: 0e23 lsrs r3, r4, #24 +10034206: 3b70 subs r3, #112 ; 0x70 +10034208: 4682 mov sl, r0 +1003420a: 9004 str r0, [sp, #16] +1003420c: 0c21 lsrs r1, r4, #16 +1003420e: 2b0f cmp r3, #15 +10034210: f200 83e2 bhi.w 100349d8 +10034214: e8df f013 tbh [pc, r3, lsl #1] +10034218: 00380012 .word 0x00380012 +1003421c: 008a0080 .word 0x008a0080 +10034220: 00ac00a1 .word 0x00ac00a1 +10034224: 00d900cc .word 0x00d900cc +10034228: 00fc00e9 .word 0x00fc00e9 +1003422c: 03e003e0 .word 0x03e003e0 +10034230: 03e003e0 .word 0x03e003e0 +10034234: 010b03e0 .word 0x010b03e0 +10034238: 4603 mov r3, r0 +1003423a: e7cf b.n 100341dc +1003423c: b2c9 uxtb r1, r1 +1003423e: 2902 cmp r1, #2 +10034240: d00e beq.n 10034260 +10034242: 2904 cmp r1, #4 +10034244: d016 beq.n 10034274 +10034246: 2901 cmp r1, #1 +10034248: f040 83c6 bne.w 100349d8 +1003424c: 4ba7 ldr r3, [pc, #668] ; (100344ec ) +1003424e: 681b ldr r3, [r3, #0] +10034250: 2b00 cmp r3, #0 +10034252: f000 83c1 beq.w 100349d8 +10034256: 4ba6 ldr r3, [pc, #664] ; (100344f0 ) +10034258: b2a4 uxth r4, r4 +1003425a: f8d3 508c ldr.w r5, [r3, #140] ; 0x8c +1003425e: e02a b.n 100342b6 +10034260: 4ba2 ldr r3, [pc, #648] ; (100344ec ) +10034262: 681b ldr r3, [r3, #0] +10034264: 2b00 cmp r3, #0 +10034266: f000 83b7 beq.w 100349d8 +1003426a: 4ba1 ldr r3, [pc, #644] ; (100344f0 ) +1003426c: b2a4 uxth r4, r4 +1003426e: f8d3 5090 ldr.w r5, [r3, #144] ; 0x90 +10034272: e034 b.n 100342de +10034274: 4b9d ldr r3, [pc, #628] ; (100344ec ) +10034276: 681b ldr r3, [r3, #0] +10034278: 2b00 cmp r3, #0 +1003427a: f000 83ad beq.w 100349d8 +1003427e: 4b9c ldr r3, [pc, #624] ; (100344f0 ) +10034280: b2a4 uxth r4, r4 +10034282: f8d3 5094 ldr.w r5, [r3, #148] ; 0x94 +10034286: e03d b.n 10034304 +10034288: b2c9 uxtb r1, r1 +1003428a: 2902 cmp r1, #2 +1003428c: d018 beq.n 100342c0 +1003428e: 2904 cmp r1, #4 +10034290: d02a beq.n 100342e8 +10034292: 2901 cmp r1, #1 +10034294: f040 83a0 bne.w 100349d8 +10034298: b2a4 uxth r4, r4 +1003429a: 4640 mov r0, r8 +1003429c: 4621 mov r1, r4 +1003429e: fa5f f28a uxtb.w r2, sl +100342a2: f003 fd0f bl 10037cc4 +100342a6: 4b91 ldr r3, [pc, #580] ; (100344ec ) +100342a8: 681b ldr r3, [r3, #0] +100342aa: 2b00 cmp r3, #0 +100342ac: f000 8394 beq.w 100349d8 +100342b0: 4b8f ldr r3, [pc, #572] ; (100344f0 ) +100342b2: f8d3 5098 ldr.w r5, [r3, #152] ; 0x98 +100342b6: 4640 mov r0, r8 +100342b8: 4621 mov r1, r4 +100342ba: f003 fcee bl 10037c9a +100342be: e025 b.n 1003430c +100342c0: b2a4 uxth r4, r4 +100342c2: 4640 mov r0, r8 +100342c4: 4621 mov r1, r4 +100342c6: fa1f f28a uxth.w r2, sl +100342ca: f003 fd02 bl 10037cd2 +100342ce: 4b87 ldr r3, [pc, #540] ; (100344ec ) +100342d0: 681b ldr r3, [r3, #0] +100342d2: 2b00 cmp r3, #0 +100342d4: f000 8380 beq.w 100349d8 +100342d8: 4b85 ldr r3, [pc, #532] ; (100344f0 ) +100342da: f8d3 509c ldr.w r5, [r3, #156] ; 0x9c +100342de: 4640 mov r0, r8 +100342e0: 4621 mov r1, r4 +100342e2: f003 fce1 bl 10037ca8 +100342e6: e011 b.n 1003430c +100342e8: b2a4 uxth r4, r4 +100342ea: 4640 mov r0, r8 +100342ec: 4621 mov r1, r4 +100342ee: 4652 mov r2, sl +100342f0: f003 fcf6 bl 10037ce0 +100342f4: 4b7d ldr r3, [pc, #500] ; (100344ec ) +100342f6: 681b ldr r3, [r3, #0] +100342f8: 2b00 cmp r3, #0 +100342fa: f000 836d beq.w 100349d8 +100342fe: 4b7c ldr r3, [pc, #496] ; (100344f0 ) +10034300: f8d3 50a0 ldr.w r5, [r3, #160] ; 0xa0 +10034304: 4640 mov r0, r8 +10034306: 4621 mov r1, r4 +10034308: f003 fcd5 bl 10037cb6 +1003430c: 4602 mov r2, r0 +1003430e: 4621 mov r1, r4 +10034310: 4628 mov r0, r5 +10034312: f7e6 fc35 bl 1001ab80 +10034316: e35f b.n 100349d8 +10034318: 4b74 ldr r3, [pc, #464] ; (100344ec ) +1003431a: 681b ldr r3, [r3, #0] +1003431c: 2b00 cmp r3, #0 +1003431e: f000 835b beq.w 100349d8 +10034322: 4b73 ldr r3, [pc, #460] ; (100344f0 ) +10034324: b2a4 uxth r4, r4 +10034326: f8d3 50a4 ldr.w r5, [r3, #164] ; 0xa4 +1003432a: e00f b.n 1003434c +1003432c: b2a4 uxth r4, r4 +1003432e: 4653 mov r3, sl +10034330: 4640 mov r0, r8 +10034332: 4621 mov r1, r4 +10034334: f04f 32ff mov.w r2, #4294967295 +10034338: f7fe f9b2 bl 100326a0 +1003433c: 4b6b ldr r3, [pc, #428] ; (100344ec ) +1003433e: 681b ldr r3, [r3, #0] +10034340: 2b00 cmp r3, #0 +10034342: f000 8349 beq.w 100349d8 +10034346: 4b6a ldr r3, [pc, #424] ; (100344f0 ) +10034348: f8d3 50a8 ldr.w r5, [r3, #168] ; 0xa8 +1003434c: 4640 mov r0, r8 +1003434e: 4621 mov r1, r4 +10034350: f04f 32ff mov.w r2, #4294967295 +10034354: f7fe f98b bl 1003266e +10034358: e7d8 b.n 1003430c +1003435a: 4b64 ldr r3, [pc, #400] ; (100344ec ) +1003435c: 681b ldr r3, [r3, #0] +1003435e: 2b00 cmp r3, #0 +10034360: f000 833a beq.w 100349d8 +10034364: 4b62 ldr r3, [pc, #392] ; (100344f0 ) +10034366: b2cd uxtb r5, r1 +10034368: f8d3 60ac ldr.w r6, [r3, #172] ; 0xac +1003436c: b2a4 uxth r4, r4 +1003436e: e011 b.n 10034394 +10034370: b2cd uxtb r5, r1 +10034372: b2a4 uxth r4, r4 +10034374: 9000 str r0, [sp, #0] +10034376: f04f 33ff mov.w r3, #4294967295 +1003437a: 4640 mov r0, r8 +1003437c: 4629 mov r1, r5 +1003437e: 4622 mov r2, r4 +10034380: f7fe f9ac bl 100326dc +10034384: 4b59 ldr r3, [pc, #356] ; (100344ec ) +10034386: 681b ldr r3, [r3, #0] +10034388: 2b00 cmp r3, #0 +1003438a: f000 8325 beq.w 100349d8 +1003438e: 4b58 ldr r3, [pc, #352] ; (100344f0 ) +10034390: f8d3 60b0 ldr.w r6, [r3, #176] ; 0xb0 +10034394: 4629 mov r1, r5 +10034396: 4622 mov r2, r4 +10034398: 4640 mov r0, r8 +1003439a: f04f 33ff mov.w r3, #4294967295 +1003439e: f7fe f994 bl 100326ca +100343a2: 4629 mov r1, r5 +100343a4: 4603 mov r3, r0 +100343a6: 4622 mov r2, r4 +100343a8: 4630 mov r0, r6 +100343aa: f7e6 fbe9 bl 1001ab80 +100343ae: e313 b.n 100349d8 +100343b0: 4b4e ldr r3, [pc, #312] ; (100344ec ) +100343b2: 681b ldr r3, [r3, #0] +100343b4: 2b00 cmp r3, #0 +100343b6: f000 830f beq.w 100349d8 +100343ba: f024 417f bic.w r1, r4, #4278190080 ; 0xff000000 +100343be: f101 4380 add.w r3, r1, #1073741824 ; 0x40000000 +100343c2: 681a ldr r2, [r3, #0] +100343c4: 4b4b ldr r3, [pc, #300] ; (100344f4 ) +100343c6: 6958 ldr r0, [r3, #20] +100343c8: e00c b.n 100343e4 +100343ca: f024 417f bic.w r1, r4, #4278190080 ; 0xff000000 +100343ce: f101 4380 add.w r3, r1, #1073741824 ; 0x40000000 +100343d2: 4a46 ldr r2, [pc, #280] ; (100344ec ) +100343d4: 6018 str r0, [r3, #0] +100343d6: 6812 ldr r2, [r2, #0] +100343d8: 2a00 cmp r2, #0 +100343da: f000 82fd beq.w 100349d8 +100343de: 681a ldr r2, [r3, #0] +100343e0: 4b44 ldr r3, [pc, #272] ; (100344f4 ) +100343e2: 6998 ldr r0, [r3, #24] +100343e4: f041 4180 orr.w r1, r1, #1073741824 ; 0x40000000 +100343e8: e793 b.n 10034312 +100343ea: f011 01ff ands.w r1, r1, #255 ; 0xff +100343ee: d00c beq.n 1003440a +100343f0: 2901 cmp r1, #1 +100343f2: f040 82f1 bne.w 100349d8 +100343f6: f1ba 0f64 cmp.w sl, #100 ; 0x64 +100343fa: bf28 it cs +100343fc: f04f 0a64 movcs.w sl, #100 ; 0x64 +10034400: f888 1c02 strb.w r1, [r8, #3074] ; 0xc02 +10034404: f888 ac03 strb.w sl, [r8, #3075] ; 0xc03 +10034408: e2e6 b.n 100349d8 +1003440a: f888 1c02 strb.w r1, [r8, #3074] ; 0xc02 +1003440e: e2e3 b.n 100349d8 +10034410: f000 020f and.w r2, r0, #15 +10034414: f011 0fff tst.w r1, #255 ; 0xff +10034418: bf18 it ne +1003441a: f042 0210 orrne.w r2, r2, #16 +1003441e: 4640 mov r0, r8 +10034420: f240 61d9 movw r1, #1753 ; 0x6d9 +10034424: ea42 1242 orr.w r2, r2, r2, lsl #5 +10034428: f003 fc53 bl 10037cd2 +1003442c: e2d4 b.n 100349d8 +1003442e: b2c9 uxtb r1, r1 +10034430: 2922 cmp r1, #34 ; 0x22 +10034432: f000 80c4 beq.w 100345be +10034436: dc17 bgt.n 10034468 +10034438: 2911 cmp r1, #17 +1003443a: d07c beq.n 10034536 +1003443c: dc0d bgt.n 1003445a +1003443e: 2906 cmp r1, #6 +10034440: d046 beq.n 100344d0 +10034442: 2909 cmp r1, #9 +10034444: d05a beq.n 100344fc +10034446: 2905 cmp r1, #5 +10034448: f040 82c6 bne.w 100349d8 +1003444c: f508 6046 add.w r0, r8, #3168 ; 0xc60 +10034450: f108 019c add.w r1, r8, #156 ; 0x9c +10034454: f7f3 ff2e bl 100282b4 +10034458: e2be b.n 100349d8 +1003445a: 2913 cmp r1, #19 +1003445c: d07c beq.n 10034558 +1003445e: db6f blt.n 10034540 +10034460: 2917 cmp r1, #23 +10034462: f000 8085 beq.w 10034570 +10034466: e2b7 b.n 100349d8 +10034468: 29cc cmp r1, #204 ; 0xcc +1003446a: f000 80f6 beq.w 1003465a +1003446e: dc09 bgt.n 10034484 +10034470: 29c0 cmp r1, #192 ; 0xc0 +10034472: f000 80cd beq.w 10034610 +10034476: 29c1 cmp r1, #193 ; 0xc1 +10034478: f000 80d9 beq.w 1003462e +1003447c: 29aa cmp r1, #170 ; 0xaa +1003447e: f040 82ab bne.w 100349d8 +10034482: e0af b.n 100345e4 +10034484: 29dd cmp r1, #221 ; 0xdd +10034486: f000 814d beq.w 10034724 +1003448a: dc03 bgt.n 10034494 +1003448c: 29cd cmp r1, #205 ; 0xcd +1003448e: f000 8114 beq.w 100346ba +10034492: e2a1 b.n 100349d8 +10034494: 29ee cmp r1, #238 ; 0xee +10034496: f000 823e beq.w 10034916 +1003449a: 29fd cmp r1, #253 ; 0xfd +1003449c: f040 829c bne.w 100349d8 +100344a0: f241 63c8 movw r3, #5832 ; 0x16c8 +100344a4: fa5f f28a uxtb.w r2, sl +100344a8: f44f 6145 mov.w r1, #3152 ; 0xc50 +100344ac: 4640 mov r0, r8 +100344ae: f858 4003 ldr.w r4, [r8, r3] +100344b2: f003 fc07 bl 10037cc4 +100344b6: f44f 6145 mov.w r1, #3152 ; 0xc50 +100344ba: 4640 mov r0, r8 +100344bc: f003 fbed bl 10037c9a +100344c0: 4601 mov r1, r0 +100344c2: 480d ldr r0, [pc, #52] ; (100344f8 ) +100344c4: f7e6 fb5c bl 1001ab80 +100344c8: 9b04 ldr r3, [sp, #16] +100344ca: f884 379c strb.w r3, [r4, #1948] ; 0x79c +100344ce: e283 b.n 100349d8 +100344d0: 4640 mov r0, r8 +100344d2: aa05 add r2, sp, #20 +100344d4: 2118 movs r1, #24 +100344d6: f7fe f813 bl 10032500 +100344da: f004 040f and.w r4, r4, #15 +100344de: 4640 mov r0, r8 +100344e0: 2118 movs r1, #24 +100344e2: aa05 add r2, sp, #20 +100344e4: 9405 str r4, [sp, #20] +100344e6: f7fe f804 bl 100324f2 +100344ea: e275 b.n 100349d8 +100344ec: 10044f38 .word 0x10044f38 +100344f0: 10043ac4 .word 0x10043ac4 +100344f4: 10043c80 .word 0x10043c80 +100344f8: 10042239 .word 0x10042239 +100344fc: f608 4678 addw r6, r8, #3192 ; 0xc78 +10034500: 4630 mov r0, r6 +10034502: a905 add r1, sp, #20 +10034504: f7e3 f870 bl 100175e8 +10034508: 2400 movs r4, #0 +1003450a: eb08 0304 add.w r3, r8, r4 +1003450e: f608 477c addw r7, r8, #3196 ; 0xc7c +10034512: f8d3 5c7c ldr.w r5, [r3, #3196] ; 0xc7c +10034516: 4427 add r7, r4 +10034518: 4638 mov r0, r7 +1003451a: 4629 mov r1, r5 +1003451c: f7e3 f841 bl 100175a2 +10034520: b908 cbnz r0, 10034526 +10034522: 682d ldr r5, [r5, #0] +10034524: e7f8 b.n 10034518 +10034526: 3408 adds r4, #8 +10034528: 2c28 cmp r4, #40 ; 0x28 +1003452a: d1ee bne.n 1003450a +1003452c: 4630 mov r0, r6 +1003452e: a905 add r1, sp, #20 +10034530: f7e3 f864 bl 100175fc +10034534: e250 b.n 100349d8 +10034536: f641 035a movw r3, #6234 ; 0x185a +1003453a: f808 0003 strb.w r0, [r8, r3] +1003453e: e24b b.n 100349d8 +10034540: f508 539c add.w r3, r8, #4992 ; 0x1380 +10034544: 3308 adds r3, #8 +10034546: 2b00 cmp r3, #0 +10034548: f000 8246 beq.w 100349d8 +1003454c: 2803 cmp r0, #3 +1003454e: f200 8243 bhi.w 100349d8 +10034552: f883 0046 strb.w r0, [r3, #70] ; 0x46 +10034556: e23f b.n 100349d8 +10034558: f508 539c add.w r3, r8, #4992 ; 0x1380 +1003455c: 3308 adds r3, #8 +1003455e: 2b00 cmp r3, #0 +10034560: f000 823a beq.w 100349d8 +10034564: 2802 cmp r0, #2 +10034566: f200 8237 bhi.w 100349d8 +1003456a: f883 0045 strb.w r0, [r3, #69] ; 0x45 +1003456e: e233 b.n 100349d8 +10034570: 4b75 ldr r3, [pc, #468] ; (10034748 ) +10034572: 681a ldr r2, [r3, #0] +10034574: 461c mov r4, r3 +10034576: b12a cbz r2, 10034584 +10034578: 4b74 ldr r3, [pc, #464] ; (1003474c ) +1003457a: 4651 mov r1, sl +1003457c: f8d3 00b4 ldr.w r0, [r3, #180] ; 0xb4 +10034580: f7e6 fafe bl 1001ab80 +10034584: f208 5024 addw r0, r8, #1316 ; 0x524 +10034588: 9904 ldr r1, [sp, #16] +1003458a: 2200 movs r2, #0 +1003458c: f7ea f850 bl 1001e630 +10034590: 2801 cmp r0, #1 +10034592: d10b bne.n 100345ac +10034594: f89d 1010 ldrb.w r1, [sp, #16] +10034598: 4640 mov r0, r8 +1003459a: f888 151e strb.w r1, [r8, #1310] ; 0x51e +1003459e: f890 2520 ldrb.w r2, [r0, #1312] ; 0x520 +100345a2: f890 351f ldrb.w r3, [r0, #1311] ; 0x51f +100345a6: f7f4 f8b9 bl 1002871c +100345aa: e215 b.n 100349d8 +100345ac: 6823 ldr r3, [r4, #0] +100345ae: 2b00 cmp r3, #0 +100345b0: f000 8212 beq.w 100349d8 +100345b4: 4b65 ldr r3, [pc, #404] ; (1003474c ) +100345b6: 9904 ldr r1, [sp, #16] +100345b8: f8d3 00b8 ldr.w r0, [r3, #184] ; 0xb8 +100345bc: e20a b.n 100349d4 +100345be: 4b62 ldr r3, [pc, #392] ; (10034748 ) +100345c0: 681b ldr r3, [r3, #0] +100345c2: b153 cbz r3, 100345da +100345c4: 4b61 ldr r3, [pc, #388] ; (1003474c ) +100345c6: 4962 ldr r1, [pc, #392] ; (10034750 ) +100345c8: f8d3 00bc ldr.w r0, [r3, #188] ; 0xbc +100345cc: 4b61 ldr r3, [pc, #388] ; (10034754 ) +100345ce: f1ba 0f00 cmp.w sl, #0 +100345d2: bf18 it ne +100345d4: 4619 movne r1, r3 +100345d6: f7e6 fad3 bl 1001ab80 +100345da: 4640 mov r0, r8 +100345dc: 9904 ldr r1, [sp, #16] +100345de: f7fd fa0b bl 100319f8 +100345e2: e1f9 b.n 100349d8 +100345e4: f000 0a7f and.w sl, r0, #127 ; 0x7f +100345e8: f1ba 0f3f cmp.w sl, #63 ; 0x3f +100345ec: bf84 itt hi +100345ee: 23ff movhi r3, #255 ; 0xff +100345f0: 9304 strhi r3, [sp, #16] +100345f2: 4b55 ldr r3, [pc, #340] ; (10034748 ) +100345f4: 681b ldr r3, [r3, #0] +100345f6: b12b cbz r3, 10034604 +100345f8: 4b54 ldr r3, [pc, #336] ; (1003474c ) +100345fa: 9904 ldr r1, [sp, #16] +100345fc: f8d3 00c0 ldr.w r0, [r3, #192] ; 0xc0 +10034600: f7e6 fabe bl 1001ab80 +10034604: 9b04 ldr r3, [sp, #16] +10034606: f641 0278 movw r2, #6264 ; 0x1878 +1003460a: f808 3002 strb.w r3, [r8, r2] +1003460e: e1e3 b.n 100349d8 +10034610: 2300 movs r3, #0 +10034612: 4640 mov r0, r8 +10034614: 2101 movs r1, #1 +10034616: aa05 add r2, sp, #20 +10034618: f7fd ff92 bl 10032540 +1003461c: 4b4a ldr r3, [pc, #296] ; (10034748 ) +1003461e: 681b ldr r3, [r3, #0] +10034620: 2b00 cmp r3, #0 +10034622: f000 81d9 beq.w 100349d8 +10034626: 4b49 ldr r3, [pc, #292] ; (1003474c ) +10034628: f8d3 00c4 ldr.w r0, [r3, #196] ; 0xc4 +1003462c: e013 b.n 10034656 +1003462e: 4640 mov r0, r8 +10034630: 2101 movs r1, #1 +10034632: aa04 add r2, sp, #16 +10034634: 2300 movs r3, #0 +10034636: f7fd ff7c bl 10032532 +1003463a: 2300 movs r3, #0 +1003463c: 4640 mov r0, r8 +1003463e: 2101 movs r1, #1 +10034640: aa05 add r2, sp, #20 +10034642: f7fd ff7d bl 10032540 +10034646: 4b40 ldr r3, [pc, #256] ; (10034748 ) +10034648: 681b ldr r3, [r3, #0] +1003464a: 2b00 cmp r3, #0 +1003464c: f000 81c4 beq.w 100349d8 +10034650: 4b3e ldr r3, [pc, #248] ; (1003474c ) +10034652: f8d3 00c8 ldr.w r0, [r3, #200] ; 0xc8 +10034656: 9905 ldr r1, [sp, #20] +10034658: e1bc b.n 100349d4 +1003465a: 2800 cmp r0, #0 +1003465c: f040 81bc bne.w 100349d8 +10034660: 493d ldr r1, [pc, #244] ; (10034758 ) +10034662: f241 63c8 movw r3, #5832 ; 0x16c8 +10034666: f858 6003 ldr.w r6, [r8, r3] +1003466a: f04f 4280 mov.w r2, #1073741824 ; 0x40000000 +1003466e: 2300 movs r3, #0 +10034670: e9d1 4502 ldrd r4, r5, [r1, #8] +10034674: 432b orrs r3, r5 +10034676: 4322 orrs r2, r4 +10034678: e9c1 2302 strd r2, r3, [r1, #8] +1003467c: 4b32 ldr r3, [pc, #200] ; (10034748 ) +1003467e: 460f mov r7, r1 +10034680: 681b ldr r3, [r3, #0] +10034682: b143 cbz r3, 10034696 +10034684: 4b31 ldr r3, [pc, #196] ; (1003474c ) +10034686: f8d3 00cc ldr.w r0, [r3, #204] ; 0xcc +1003468a: f641 0378 movw r3, #6264 ; 0x1878 +1003468e: f818 1003 ldrb.w r1, [r8, r3] +10034692: f7e6 fa75 bl 1001ab80 +10034696: f641 0378 movw r3, #6264 ; 0x1878 +1003469a: f818 0003 ldrb.w r0, [r8, r3] +1003469e: f7fc ffd3 bl 10031648 +100346a2: f896 3034 ldrb.w r3, [r6, #52] ; 0x34 +100346a6: b2c2 uxtb r2, r0 +100346a8: 9300 str r3, [sp, #0] +100346aa: 4640 mov r0, r8 +100346ac: 2100 movs r1, #0 +100346ae: 6af3 ldr r3, [r6, #44] ; 0x2c +100346b0: f7fd fea8 bl 10032404 +100346b4: e9c7 4502 strd r4, r5, [r7, #8] +100346b8: e18e b.n 100349d8 +100346ba: 2800 cmp r0, #0 +100346bc: f040 818c bne.w 100349d8 +100346c0: f241 63c8 movw r3, #5832 ; 0x16c8 +100346c4: f858 9003 ldr.w r9, [r8, r3] +100346c8: f8df b08c ldr.w fp, [pc, #140] ; 10034758 +100346cc: f04f 7680 mov.w r6, #16777216 ; 0x1000000 +100346d0: 2700 movs r7, #0 +100346d2: e9db 4502 ldrd r4, r5, [fp, #8] +100346d6: f899 1034 ldrb.w r1, [r9, #52] ; 0x34 +100346da: 4326 orrs r6, r4 +100346dc: f8d9 202c ldr.w r2, [r9, #44] ; 0x2c +100346e0: 432f orrs r7, r5 +100346e2: 481e ldr r0, [pc, #120] ; (1003475c ) +100346e4: e9cb 6702 strd r6, r7, [fp, #8] +100346e8: f7e6 fa4a bl 1001ab80 +100346ec: 481c ldr r0, [pc, #112] ; (10034760 ) +100346ee: f7e6 fa47 bl 1001ab80 +100346f2: 465e mov r6, fp +100346f4: 4650 mov r0, sl +100346f6: f7fc ffa7 bl 10031648 +100346fa: f899 3034 ldrb.w r3, [r9, #52] ; 0x34 +100346fe: b2c2 uxtb r2, r0 +10034700: 9300 str r3, [sp, #0] +10034702: 4640 mov r0, r8 +10034704: 2100 movs r1, #0 +10034706: f8d9 302c ldr.w r3, [r9, #44] ; 0x2c +1003470a: f10a 0a01 add.w sl, sl, #1 +1003470e: f7fd fe79 bl 10032404 +10034712: f1ba 0f14 cmp.w sl, #20 +10034716: d1ed bne.n 100346f4 +10034718: 4812 ldr r0, [pc, #72] ; (10034764 ) +1003471a: f7e6 fa31 bl 1001ab80 +1003471e: e9c6 4502 strd r4, r5, [r6, #8] +10034722: e159 b.n 100349d8 +10034724: b918 cbnz r0, 1003472e +10034726: 4640 mov r0, r8 +10034728: f7ff fc60 bl 10033fec +1003472c: e154 b.n 100349d8 +1003472e: 2801 cmp r0, #1 +10034730: d103 bne.n 1003473a +10034732: 4640 mov r0, r8 +10034734: f7ff fcc4 bl 100340c0 +10034738: e14e b.n 100349d8 +1003473a: 2802 cmp r0, #2 +1003473c: d114 bne.n 10034768 +1003473e: 4640 mov r0, r8 +10034740: f7ff fcf8 bl 10034134 +10034744: e148 b.n 100349d8 +10034746: bf00 nop +10034748: 10044f38 .word 0x10044f38 +1003474c: 10043ac4 .word 0x10043ac4 +10034750: 1004219a .word 0x1004219a +10034754: 1003f82c .word 0x1003f82c +10034758: 10000720 .word 0x10000720 +1003475c: 100421a2 .word 0x100421a2 +10034760: 100421d2 .word 0x100421d2 +10034764: 100429b1 .word 0x100429b1 +10034768: 2803 cmp r0, #3 +1003476a: d17d bne.n 10034868 +1003476c: 4c9c ldr r4, [pc, #624] ; (100349e0 ) +1003476e: f241 63c8 movw r3, #5832 ; 0x16c8 +10034772: f858 5003 ldr.w r5, [r8, r3] +10034776: 6823 ldr r3, [r4, #0] +10034778: b123 cbz r3, 10034784 +1003477a: 4b9a ldr r3, [pc, #616] ; (100349e4 ) +1003477c: f8d3 00d0 ldr.w r0, [r3, #208] ; 0xd0 +10034780: f7e6 f9fe bl 1001ab80 +10034784: 6823 ldr r3, [r4, #0] +10034786: b16b cbz r3, 100347a4 +10034788: 4b96 ldr r3, [pc, #600] ; (100349e4 ) +1003478a: f640 6108 movw r1, #3592 ; 0xe08 +1003478e: 4640 mov r0, r8 +10034790: f44f 427f mov.w r2, #65280 ; 0xff00 +10034794: f8d3 60d4 ldr.w r6, [r3, #212] ; 0xd4 +10034798: f7fd ff69 bl 1003266e +1003479c: 4601 mov r1, r0 +1003479e: 4630 mov r0, r6 +100347a0: f7e6 f9ee bl 1001ab80 +100347a4: 6823 ldr r3, [r4, #0] +100347a6: b16b cbz r3, 100347c4 +100347a8: 4b8e ldr r3, [pc, #568] ; (100349e4 ) +100347aa: f640 016c movw r1, #2156 ; 0x86c +100347ae: 4640 mov r0, r8 +100347b0: f06f 02ff mvn.w r2, #255 ; 0xff +100347b4: f8d3 60d8 ldr.w r6, [r3, #216] ; 0xd8 +100347b8: f7fd ff59 bl 1003266e +100347bc: 4601 mov r1, r0 +100347be: 4630 mov r0, r6 +100347c0: f7e6 f9de bl 1001ab80 +100347c4: 6823 ldr r3, [r4, #0] +100347c6: b16b cbz r3, 100347e4 +100347c8: 4b86 ldr r3, [pc, #536] ; (100349e4 ) +100347ca: f44f 6160 mov.w r1, #3584 ; 0xe00 +100347ce: 4640 mov r0, r8 +100347d0: f04f 32ff mov.w r2, #4294967295 +100347d4: f8d3 60dc ldr.w r6, [r3, #220] ; 0xdc +100347d8: f7fd ff49 bl 1003266e +100347dc: 4601 mov r1, r0 +100347de: 4630 mov r0, r6 +100347e0: f7e6 f9ce bl 1001ab80 +100347e4: 6823 ldr r3, [r4, #0] +100347e6: b16b cbz r3, 10034804 +100347e8: 4b7e ldr r3, [pc, #504] ; (100349e4 ) +100347ea: f640 6104 movw r1, #3588 ; 0xe04 +100347ee: 4640 mov r0, r8 +100347f0: f04f 32ff mov.w r2, #4294967295 +100347f4: f8d3 60e0 ldr.w r6, [r3, #224] ; 0xe0 +100347f8: f7fd ff39 bl 1003266e +100347fc: 4601 mov r1, r0 +100347fe: 4630 mov r0, r6 +10034800: f7e6 f9be bl 1001ab80 +10034804: 6823 ldr r3, [r4, #0] +10034806: b16b cbz r3, 10034824 +10034808: 4b76 ldr r3, [pc, #472] ; (100349e4 ) +1003480a: f44f 6161 mov.w r1, #3600 ; 0xe10 +1003480e: 4640 mov r0, r8 +10034810: f04f 32ff mov.w r2, #4294967295 +10034814: f8d3 60e4 ldr.w r6, [r3, #228] ; 0xe4 +10034818: f7fd ff29 bl 1003266e +1003481c: 4601 mov r1, r0 +1003481e: 4630 mov r0, r6 +10034820: f7e6 f9ae bl 1001ab80 +10034824: 6823 ldr r3, [r4, #0] +10034826: b16b cbz r3, 10034844 +10034828: 4b6e ldr r3, [pc, #440] ; (100349e4 ) +1003482a: f640 6114 movw r1, #3604 ; 0xe14 +1003482e: 4640 mov r0, r8 +10034830: f04f 32ff mov.w r2, #4294967295 +10034834: f8d3 60e8 ldr.w r6, [r3, #232] ; 0xe8 +10034838: f7fd ff19 bl 1003266e +1003483c: 4601 mov r1, r0 +1003483e: 4630 mov r0, r6 +10034840: f7e6 f99e bl 1001ab80 +10034844: 6823 ldr r3, [r4, #0] +10034846: b133 cbz r3, 10034856 +10034848: 4b66 ldr r3, [pc, #408] ; (100349e4 ) +1003484a: f898 149e ldrb.w r1, [r8, #1182] ; 0x49e +1003484e: f8d3 00ec ldr.w r0, [r3, #236] ; 0xec +10034852: f7e6 f995 bl 1001ab80 +10034856: 6823 ldr r3, [r4, #0] +10034858: 2b00 cmp r3, #0 +1003485a: f000 80bd beq.w 100349d8 +1003485e: 4b62 ldr r3, [pc, #392] ; (100349e8 ) +10034860: f895 103e ldrb.w r1, [r5, #62] ; 0x3e +10034864: 69d8 ldr r0, [r3, #28] +10034866: e0b5 b.n 100349d4 +10034868: 2804 cmp r0, #4 +1003486a: d13a bne.n 100348e2 +1003486c: f44f 7000 mov.w r0, #512 ; 0x200 +10034870: f7e2 ffae bl 100177d0 +10034874: 4606 mov r6, r0 +10034876: 2800 cmp r0, #0 +10034878: f000 80ae beq.w 100349d8 +1003487c: 2500 movs r5, #0 +1003487e: 9500 str r5, [sp, #0] +10034880: 4640 mov r0, r8 +10034882: 4629 mov r1, r5 +10034884: f44f 7200 mov.w r2, #512 ; 0x200 +10034888: 4633 mov r3, r6 +1003488a: f7f8 fde3 bl 1002d454 +1003488e: 2801 cmp r0, #1 +10034890: d005 beq.n 1003489e +10034892: 4630 mov r0, r6 +10034894: f44f 7100 mov.w r1, #512 ; 0x200 +10034898: f7e2 fdc7 bl 1001742a +1003489c: e09c b.n 100349d8 +1003489e: 4853 ldr r0, [pc, #332] ; (100349ec ) +100348a0: f7e6 f96e bl 1001ab80 +100348a4: 4852 ldr r0, [pc, #328] ; (100349f0 ) +100348a6: 4629 mov r1, r5 +100348a8: f7e6 f96a bl 1001ab80 +100348ac: 2400 movs r4, #0 +100348ae: 1977 adds r7, r6, r5 +100348b0: 5d39 ldrb r1, [r7, r4] +100348b2: 4850 ldr r0, [pc, #320] ; (100349f4 ) +100348b4: 3401 adds r4, #1 +100348b6: f7e6 f963 bl 1001ab80 +100348ba: 2c08 cmp r4, #8 +100348bc: d1f7 bne.n 100348ae +100348be: 484e ldr r0, [pc, #312] ; (100349f8 ) +100348c0: f7e6 f95e bl 1001ab80 +100348c4: 5d39 ldrb r1, [r7, r4] +100348c6: 484b ldr r0, [pc, #300] ; (100349f4 ) +100348c8: 3401 adds r4, #1 +100348ca: f7e6 f959 bl 1001ab80 +100348ce: 2c10 cmp r4, #16 +100348d0: d1f8 bne.n 100348c4 +100348d2: 4846 ldr r0, [pc, #280] ; (100349ec ) +100348d4: 3510 adds r5, #16 +100348d6: f7e6 f953 bl 1001ab80 +100348da: f5b5 7f00 cmp.w r5, #512 ; 0x200 +100348de: d1e1 bne.n 100348a4 +100348e0: e7d7 b.n 10034892 +100348e2: 2805 cmp r0, #5 +100348e4: d178 bne.n 100349d8 +100348e6: 2400 movs r4, #0 +100348e8: f10d 010e add.w r1, sp, #14 +100348ec: 4640 mov r0, r8 +100348ee: f8ad 400e strh.w r4, [sp, #14] +100348f2: f8ad 4014 strh.w r4, [sp, #20] +100348f6: f002 fda4 bl 10037442 +100348fa: 4640 mov r0, r8 +100348fc: 4621 mov r1, r4 +100348fe: ab05 add r3, sp, #20 +10034900: 9400 str r4, [sp, #0] +10034902: 2203 movs r2, #3 +10034904: f002 fd32 bl 1003736c +10034908: f8bd 1014 ldrh.w r1, [sp, #20] +1003490c: f8bd 300e ldrh.w r3, [sp, #14] +10034910: 483a ldr r0, [pc, #232] ; (100349fc ) +10034912: 1ac9 subs r1, r1, r3 +10034914: e05e b.n 100349d4 +10034916: 280f cmp r0, #15 +10034918: 4c31 ldr r4, [pc, #196] ; (100349e0 ) +1003491a: d145 bne.n 100349a8 +1003491c: 4640 mov r0, r8 +1003491e: 2109 movs r1, #9 +10034920: aa05 add r2, sp, #20 +10034922: f7fd fdfd bl 10032520 +10034926: 6823 ldr r3, [r4, #0] +10034928: b12b cbz r3, 10034936 +1003492a: 4b2e ldr r3, [pc, #184] ; (100349e4 ) +1003492c: 9905 ldr r1, [sp, #20] +1003492e: f8d3 00f0 ldr.w r0, [r3, #240] ; 0xf0 +10034932: f7e6 f925 bl 1001ab80 +10034936: 6823 ldr r3, [r4, #0] +10034938: b123 cbz r3, 10034944 +1003493a: 4b2a ldr r3, [pc, #168] ; (100349e4 ) +1003493c: f8d3 00f4 ldr.w r0, [r3, #244] ; 0xf4 +10034940: f7e6 f91e bl 1001ab80 +10034944: 6823 ldr r3, [r4, #0] +10034946: b123 cbz r3, 10034952 +10034948: 4b26 ldr r3, [pc, #152] ; (100349e4 ) +1003494a: f8d3 00f8 ldr.w r0, [r3, #248] ; 0xf8 +1003494e: f7e6 f917 bl 1001ab80 +10034952: 6823 ldr r3, [r4, #0] +10034954: b123 cbz r3, 10034960 +10034956: 4b23 ldr r3, [pc, #140] ; (100349e4 ) +10034958: f8d3 00fc ldr.w r0, [r3, #252] ; 0xfc +1003495c: f7e6 f910 bl 1001ab80 +10034960: 6823 ldr r3, [r4, #0] +10034962: b123 cbz r3, 1003496e +10034964: 4b1f ldr r3, [pc, #124] ; (100349e4 ) +10034966: f8d3 0100 ldr.w r0, [r3, #256] ; 0x100 +1003496a: f7e6 f909 bl 1001ab80 +1003496e: 6823 ldr r3, [r4, #0] +10034970: b123 cbz r3, 1003497c +10034972: 4b1c ldr r3, [pc, #112] ; (100349e4 ) +10034974: f8d3 0104 ldr.w r0, [r3, #260] ; 0x104 +10034978: f7e6 f902 bl 1001ab80 +1003497c: 6823 ldr r3, [r4, #0] +1003497e: b123 cbz r3, 1003498a +10034980: 4b18 ldr r3, [pc, #96] ; (100349e4 ) +10034982: f8d3 0108 ldr.w r0, [r3, #264] ; 0x108 +10034986: f7e6 f8fb bl 1001ab80 +1003498a: 6823 ldr r3, [r4, #0] +1003498c: b123 cbz r3, 10034998 +1003498e: 4b15 ldr r3, [pc, #84] ; (100349e4 ) +10034990: f8d3 010c ldr.w r0, [r3, #268] ; 0x10c +10034994: f7e6 f8f4 bl 1001ab80 +10034998: 6823 ldr r3, [r4, #0] +1003499a: b1eb cbz r3, 100349d8 +1003499c: 4b11 ldr r3, [pc, #68] ; (100349e4 ) +1003499e: f8d3 0110 ldr.w r0, [r3, #272] ; 0x110 +100349a2: f7e6 f8ed bl 1001ab80 +100349a6: e017 b.n 100349d8 +100349a8: f241 63c8 movw r3, #5832 ; 0x16c8 +100349ac: 2109 movs r1, #9 +100349ae: aa04 add r2, sp, #16 +100349b0: 4640 mov r0, r8 +100349b2: f858 5003 ldr.w r5, [r8, r3] +100349b6: f7fd fdaa bl 1003250e +100349ba: 2109 movs r1, #9 +100349bc: 4640 mov r0, r8 +100349be: aa05 add r2, sp, #20 +100349c0: f7fd fdae bl 10032520 +100349c4: 9905 ldr r1, [sp, #20] +100349c6: 6823 ldr r3, [r4, #0] +100349c8: f8c5 11b0 str.w r1, [r5, #432] ; 0x1b0 +100349cc: b123 cbz r3, 100349d8 +100349ce: 4b05 ldr r3, [pc, #20] ; (100349e4 ) +100349d0: f8d3 00f0 ldr.w r0, [r3, #240] ; 0xf0 +100349d4: f7e6 f8d4 bl 1001ab80 +100349d8: 2000 movs r0, #0 +100349da: b007 add sp, #28 +100349dc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +100349e0: 10044f38 .word 0x10044f38 +100349e4: 10043ac4 .word 0x10043ac4 +100349e8: 10043c80 .word 0x10043c80 +100349ec: 100429b1 .word 0x100429b1 +100349f0: 1004220b .word 0x1004220b +100349f4: 10042213 .word 0x10042213 +100349f8: 10042211 .word 0x10042211 +100349fc: 10042219 .word 0x10042219 + +10034a00 : +10034a00: 1e43 subs r3, r0, #1 +10034a02: 2b02 cmp r3, #2 +10034a04: d804 bhi.n 10034a10 +10034a06: 4b04 ldr r3, [pc, #16] ; (10034a18 ) +10034a08: 3002 adds r0, #2 +10034a0a: 7018 strb r0, [r3, #0] +10034a0c: 2000 movs r0, #0 +10034a0e: 4770 bx lr +10034a10: f04f 30ff mov.w r0, #4294967295 +10034a14: 4770 bx lr +10034a16: bf00 nop +10034a18: 10044fbd .word 0x10044fbd + +10034a1c : +10034a1c: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} +10034a20: 4698 mov r8, r3 +10034a22: 6903 ldr r3, [r0, #16] +10034a24: 6810 ldr r0, [r2, #0] +10034a26: 681c ldr r4, [r3, #0] +10034a28: 2300 movs r3, #0 +10034a2a: 9303 str r3, [sp, #12] +10034a2c: f241 73c8 movw r3, #6088 ; 0x17c8 +10034a30: 5ce5 ldrb r5, [r4, r3] +10034a32: f504 569c add.w r6, r4, #4992 ; 0x1380 +10034a36: 1e6b subs r3, r5, #1 +10034a38: 425d negs r5, r3 +10034a3a: f106 0608 add.w r6, r6, #8 +10034a3e: 415d adcs r5, r3 +10034a40: f896 306e ldrb.w r3, [r6, #110] ; 0x6e +10034a44: b10b cbz r3, 10034a4a +10034a46: f045 0502 orr.w r5, r5, #2 +10034a4a: 491e ldr r1, [pc, #120] ; (10034ac4 ) +10034a4c: aa03 add r2, sp, #12 +10034a4e: f009 f9ab bl 1003dda8 +10034a52: 9f03 ldr r7, [sp, #12] +10034a54: bb87 cbnz r7, 10034ab8 +10034a56: f241 63c8 movw r3, #5832 ; 0x16c8 +10034a5a: f854 9003 ldr.w r9, [r4, r3] +10034a5e: f004 f8eb bl 10038c38 +10034a62: f241 73c8 movw r3, #6088 ; 0x17c8 +10034a66: 5ce1 ldrb r1, [r4, r3] +10034a68: 4682 mov sl, r0 +10034a6a: 4817 ldr r0, [pc, #92] ; (10034ac8 ) +10034a6c: f7e6 f888 bl 1001ab80 +10034a70: f241 63a4 movw r3, #5796 ; 0x16a4 +10034a74: 5ce2 ldrb r2, [r4, r3] +10034a76: f896 106e ldrb.w r1, [r6, #110] ; 0x6e +10034a7a: 4814 ldr r0, [pc, #80] ; (10034acc ) +10034a7c: f7e6 f880 bl 1001ab80 +10034a80: fa5f f18a uxtb.w r1, sl +10034a84: 4812 ldr r0, [pc, #72] ; (10034ad0 ) +10034a86: f7e6 f87b bl 1001ab80 +10034a8a: f10d 030b add.w r3, sp, #11 +10034a8e: 9700 str r7, [sp, #0] +10034a90: 4620 mov r0, r4 +10034a92: 21c8 movs r1, #200 ; 0xc8 +10034a94: 2201 movs r2, #1 +10034a96: f7f8 fcdd bl 1002d454 +10034a9a: f894 149e ldrb.w r1, [r4, #1182] ; 0x49e +10034a9e: f89d 200b ldrb.w r2, [sp, #11] +10034aa2: f899 3045 ldrb.w r3, [r9, #69] ; 0x45 +10034aa6: 480b ldr r0, [pc, #44] ; (10034ad4 ) +10034aa8: f7e6 f86a bl 1001ab80 +10034aac: 4640 mov r0, r8 +10034aae: 490a ldr r1, [pc, #40] ; (10034ad8 ) +10034ab0: 462a mov r2, r5 +10034ab2: f7e6 f83f bl 1001ab34 +10034ab6: e000 b.n 10034aba +10034ab8: 603d str r5, [r7, #0] +10034aba: 2000 movs r0, #0 +10034abc: b004 add sp, #16 +10034abe: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10034ac2: bf00 nop +10034ac4: 100420ec .word 0x100420ec +10034ac8: 10042249 .word 0x10042249 +10034acc: 10042258 .word 0x10042258 +10034ad0: 1004226b .word 0x1004226b +10034ad4: 1004227c .word 0x1004227c +10034ad8: 100420fd .word 0x100420fd + +10034adc : +10034adc: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +10034ae0: 4615 mov r5, r2 +10034ae2: 461e mov r6, r3 +10034ae4: 88d3 ldrh r3, [r2, #6] +10034ae6: 6902 ldr r2, [r0, #16] +10034ae8: b087 sub sp, #28 +10034aea: 6814 ldr r4, [r2, #0] +10034aec: 2c00 cmp r4, #0 +10034aee: f000 80af beq.w 10034c50 +10034af2: b91e cbnz r6, 10034afc +10034af4: 80ae strh r6, [r5, #4] +10034af6: f06f 0004 mvn.w r0, #4 +10034afa: e126 b.n 10034d4a +10034afc: 3b02 subs r3, #2 +10034afe: 2b07 cmp r3, #7 +10034b00: f200 80a0 bhi.w 10034c44 +10034b04: e8df f003 tbb [pc, r3] +10034b08: 524d0430 .word 0x524d0430 +10034b0c: 615b9e57 .word 0x615b9e57 +10034b10: 88ac ldrh r4, [r5, #4] +10034b12: 2300 movs r3, #0 +10034b14: 4620 mov r0, r4 +10034b16: 9304 str r3, [sp, #16] +10034b18: 9305 str r3, [sp, #20] +10034b1a: f7e2 fe49 bl 100177b0 +10034b1e: 4607 mov r7, r0 +10034b20: b1f8 cbz r0, 10034b62 +10034b22: 6829 ldr r1, [r5, #0] +10034b24: 88aa ldrh r2, [r5, #4] +10034b26: f7e2 fc83 bl 10017430 +10034b2a: 4638 mov r0, r7 +10034b2c: 4988 ldr r1, [pc, #544] ; (10034d50 ) +10034b2e: aa04 add r2, sp, #16 +10034b30: ab05 add r3, sp, #20 +10034b32: f009 f939 bl 1003dda8 +10034b36: 3001 adds r0, #1 +10034b38: 4630 mov r0, r6 +10034b3a: d103 bne.n 10034b44 +10034b3c: 4985 ldr r1, [pc, #532] ; (10034d54 ) +10034b3e: 220c movs r2, #12 +10034b40: 2322 movs r3, #34 ; 0x22 +10034b42: e002 b.n 10034b4a +10034b44: 4984 ldr r1, [pc, #528] ; (10034d58 ) +10034b46: 9a04 ldr r2, [sp, #16] +10034b48: 9b05 ldr r3, [sp, #20] +10034b4a: f7e5 fff3 bl 1001ab34 +10034b4e: 4630 mov r0, r6 +10034b50: f7e6 f852 bl 1001abf8 +10034b54: 3001 adds r0, #1 +10034b56: 80a8 strh r0, [r5, #4] +10034b58: 4621 mov r1, r4 +10034b5a: 4638 mov r0, r7 +10034b5c: f7e2 fc65 bl 1001742a +10034b60: e070 b.n 10034c44 +10034b62: f06f 040b mvn.w r4, #11 +10034b66: e06e b.n 10034c46 +10034b68: f241 419b movw r1, #5275 ; 0x149b +10034b6c: 5c61 ldrb r1, [r4, r1] +10034b6e: f241 4399 movw r3, #5273 ; 0x1499 +10034b72: 5ce2 ldrb r2, [r4, r3] +10034b74: f241 439a movw r3, #5274 ; 0x149a +10034b78: 5ce3 ldrb r3, [r4, r3] +10034b7a: 9100 str r1, [sp, #0] +10034b7c: f241 419c movw r1, #5276 ; 0x149c +10034b80: 5c61 ldrb r1, [r4, r1] +10034b82: 4630 mov r0, r6 +10034b84: 9101 str r1, [sp, #4] +10034b86: f241 419d movw r1, #5277 ; 0x149d +10034b8a: 5c61 ldrb r1, [r4, r1] +10034b8c: 9102 str r1, [sp, #8] +10034b8e: f241 419e movw r1, #5278 ; 0x149e +10034b92: 5c61 ldrb r1, [r4, r1] +10034b94: 9103 str r1, [sp, #12] +10034b96: 4971 ldr r1, [pc, #452] ; (10034d5c ) +10034b98: f7e5 ffcc bl 1001ab34 +10034b9c: 2312 movs r3, #18 +10034b9e: 80ab strh r3, [r5, #4] +10034ba0: e050 b.n 10034c44 +10034ba2: 6923 ldr r3, [r4, #16] +10034ba4: 6828 ldr r0, [r5, #0] +10034ba6: 06de lsls r6, r3, #27 +10034ba8: d455 bmi.n 10034c56 +10034baa: e035 b.n 10034c18 +10034bac: 6923 ldr r3, [r4, #16] +10034bae: 6828 ldr r0, [r5, #0] +10034bb0: 06d9 lsls r1, r3, #27 +10034bb2: d426 bmi.n 10034c02 +10034bb4: e030 b.n 10034c18 +10034bb6: 6923 ldr r3, [r4, #16] +10034bb8: 06db lsls r3, r3, #27 +10034bba: d430 bmi.n 10034c1e +10034bbc: e02c b.n 10034c18 +10034bbe: 462a mov r2, r5 +10034bc0: 4633 mov r3, r6 +10034bc2: f7ff ff2b bl 10034a1c +10034bc6: 4604 mov r4, r0 +10034bc8: e03d b.n 10034c46 +10034bca: 2100 movs r1, #0 +10034bcc: 2210 movs r2, #16 +10034bce: 4b64 ldr r3, [pc, #400] ; (10034d60 ) +10034bd0: 4630 mov r0, r6 +10034bd2: 4798 blx r3 +10034bd4: 2700 movs r7, #0 +10034bd6: ab06 add r3, sp, #24 +10034bd8: f803 0d04 strb.w r0, [r3, #-4]! +10034bdc: 21c8 movs r1, #200 ; 0xc8 +10034bde: 9700 str r7, [sp, #0] +10034be0: 4620 mov r0, r4 +10034be2: 2201 movs r2, #1 +10034be4: f7f8 fc36 bl 1002d454 +10034be8: b1b0 cbz r0, 10034c18 +10034bea: 495e ldr r1, [pc, #376] ; (10034d64 ) +10034bec: f89d 2014 ldrb.w r2, [sp, #20] +10034bf0: 4630 mov r0, r6 +10034bf2: f7e5 ff9f bl 1001ab34 +10034bf6: 4630 mov r0, r6 +10034bf8: f7e5 fffe bl 1001abf8 +10034bfc: 463c mov r4, r7 +10034bfe: 80a8 strh r0, [r5, #4] +10034c00: e021 b.n 10034c46 +10034c02: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 +10034c06: 2b04 cmp r3, #4 +10034c08: d106 bne.n 10034c18 +10034c0a: 4957 ldr r1, [pc, #348] ; (10034d68 ) +10034c0c: aa05 add r2, sp, #20 +10034c0e: f009 f8cb bl 1003dda8 +10034c12: 9805 ldr r0, [sp, #20] +10034c14: 2800 cmp r0, #0 +10034c16: d152 bne.n 10034cbe +10034c18: f04f 34ff mov.w r4, #4294967295 +10034c1c: e013 b.n 10034c46 +10034c1e: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 +10034c22: 2b04 cmp r3, #4 +10034c24: d1f8 bne.n 10034c18 +10034c26: f241 036c movw r3, #4204 ; 0x106c +10034c2a: 58e3 ldr r3, [r4, r3] +10034c2c: 4a4f ldr r2, [pc, #316] ; (10034d6c ) +10034c2e: 2b07 cmp r3, #7 +10034c30: 494f ldr r1, [pc, #316] ; (10034d70 ) +10034c32: bf18 it ne +10034c34: 2200 movne r2, #0 +10034c36: 4630 mov r0, r6 +10034c38: f7e5 ff7c bl 1001ab34 +10034c3c: 4630 mov r0, r6 +10034c3e: f7e5 ffdb bl 1001abf8 +10034c42: 80a8 strh r0, [r5, #4] +10034c44: 2400 movs r4, #0 +10034c46: 200a movs r0, #10 +10034c48: f7e2 fd14 bl 10017674 +10034c4c: 4620 mov r0, r4 +10034c4e: e07c b.n 10034d4a +10034c50: f06f 0063 mvn.w r0, #99 ; 0x63 +10034c54: e079 b.n 10034d4a +10034c56: 4947 ldr r1, [pc, #284] ; (10034d74 ) +10034c58: aa04 add r2, sp, #16 +10034c5a: f009 f8a5 bl 1003dda8 +10034c5e: 9b04 ldr r3, [sp, #16] +10034c60: 2b00 cmp r3, #0 +10034c62: d0d9 beq.n 10034c18 +10034c64: f604 48d4 addw r8, r4, #3284 ; 0xcd4 +10034c68: 4640 mov r0, r8 +10034c6a: a905 add r1, sp, #20 +10034c6c: f7e2 fcbc bl 100175e8 +10034c70: f604 49c4 addw r9, r4, #3268 ; 0xcc4 +10034c74: f8d4 6cc4 ldr.w r6, [r4, #3268] ; 0xcc4 +10034c78: 2400 movs r4, #0 +10034c7a: 4648 mov r0, r9 +10034c7c: 4631 mov r1, r6 +10034c7e: f7e2 fc90 bl 100175a2 +10034c82: b988 cbnz r0, 10034ca8 +10034c84: 9804 ldr r0, [sp, #16] +10034c86: 2206 movs r2, #6 +10034c88: fb02 0004 mla r0, r2, r4, r0 +10034c8c: f5a6 718a sub.w r1, r6, #276 ; 0x114 +10034c90: 3004 adds r0, #4 +10034c92: f7e2 fbcd bl 10017430 +10034c96: 9b04 ldr r3, [sp, #16] +10034c98: 1c67 adds r7, r4, #1 +10034c9a: 681b ldr r3, [r3, #0] +10034c9c: 429f cmp r7, r3 +10034c9e: d202 bcs.n 10034ca6 +10034ca0: 6836 ldr r6, [r6, #0] +10034ca2: 463c mov r4, r7 +10034ca4: e7e9 b.n 10034c7a +10034ca6: 463c mov r4, r7 +10034ca8: 4640 mov r0, r8 +10034caa: a905 add r1, sp, #20 +10034cac: f7e2 fca6 bl 100175fc +10034cb0: 9b04 ldr r3, [sp, #16] +10034cb2: 681a ldr r2, [r3, #0] +10034cb4: 42a2 cmp r2, r4 +10034cb6: bf94 ite ls +10034cb8: 601a strls r2, [r3, #0] +10034cba: 601c strhi r4, [r3, #0] +10034cbc: e03b b.n 10034d36 +10034cbe: 2300 movs r3, #0 +10034cc0: 2264 movs r2, #100 ; 0x64 +10034cc2: f504 51a4 add.w r1, r4, #5248 ; 0x1480 +10034cc6: e880 000c stmia.w r0, {r2, r3} +10034cca: 3119 adds r1, #25 +10034ccc: 2206 movs r2, #6 +10034cce: 3008 adds r0, #8 +10034cd0: f7e2 fbae bl 10017430 +10034cd4: 9e05 ldr r6, [sp, #20] +10034cd6: f8d4 30dc ldr.w r3, [r4, #220] ; 0xdc +10034cda: f504 708a add.w r0, r4, #276 ; 0x114 +10034cde: 81f3 strh r3, [r6, #14] +10034ce0: f7e8 fc76 bl 1001d5d0 +10034ce4: 8803 ldrh r3, [r0, #0] +10034ce6: 9805 ldr r0, [sp, #20] +10034ce8: 8233 strh r3, [r6, #16] +10034cea: f8d4 30e0 ldr.w r3, [r4, #224] ; 0xe0 +10034cee: 3013 adds r0, #19 +10034cf0: f8a0 3021 strh.w r3, [r0, #33] ; 0x21 +10034cf4: f104 01a8 add.w r1, r4, #168 ; 0xa8 +10034cf8: f8d4 20a4 ldr.w r2, [r4, #164] ; 0xa4 +10034cfc: f7e2 fb98 bl 10017430 +10034d00: 9b05 ldr r3, [sp, #20] +10034d02: f8d4 20a4 ldr.w r2, [r4, #164] ; 0xa4 +10034d06: f103 0040 add.w r0, r3, #64 ; 0x40 +10034d0a: 749a strb r2, [r3, #18] +10034d0c: f8d4 20e4 ldr.w r2, [r4, #228] ; 0xe4 +10034d10: f883 2033 strb.w r2, [r3, #51] ; 0x33 +10034d14: f8d4 20d0 ldr.w r2, [r4, #208] ; 0xd0 +10034d18: f8b4 1462 ldrh.w r1, [r4, #1122] ; 0x462 +10034d1c: 871a strh r2, [r3, #56] ; 0x38 +10034d1e: b169 cbz r1, 10034d3c +10034d20: 2201 movs r2, #1 +10034d22: f883 203a strb.w r2, [r3, #58] ; 0x3a +10034d26: f8b4 2462 ldrh.w r2, [r4, #1122] ; 0x462 +10034d2a: f204 4165 addw r1, r4, #1125 ; 0x465 +10034d2e: 63da str r2, [r3, #60] ; 0x3c +10034d30: 2210 movs r2, #16 +10034d32: f7e2 fb7d bl 10017430 +10034d36: 2400 movs r4, #0 +10034d38: 80ac strh r4, [r5, #4] +10034d3a: e784 b.n 10034c46 +10034d3c: f883 103a strb.w r1, [r3, #58] ; 0x3a +10034d40: 63d9 str r1, [r3, #60] ; 0x3c +10034d42: 2210 movs r2, #16 +10034d44: f7e2 fb84 bl 10017450 +10034d48: e7f5 b.n 10034d36 +10034d4a: b007 add sp, #28 +10034d4c: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +10034d50: 100422a4 .word 0x100422a4 +10034d54: 100422b6 .word 0x100422b6 +10034d58: 100422bc .word 0x100422bc +10034d5c: 1003f950 .word 0x1003f950 +10034d60: 0000f965 .word 0x0000f965 +10034d64: 100428d9 .word 0x100428d9 +10034d68: 100420ec .word 0x100420ec +10034d6c: 00400004 .word 0x00400004 +10034d70: 10040576 .word 0x10040576 +10034d74: 1003f7bb .word 0x1003f7bb + +10034d78 : +10034d78: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10034d7c: 6903 ldr r3, [r0, #16] +10034d7e: 460c mov r4, r1 +10034d80: f648 311b movw r1, #35611 ; 0x8b1b +10034d84: 428a cmp r2, r1 +10034d86: b09d sub sp, #116 ; 0x74 +10034d88: 4680 mov r8, r0 +10034d8a: 681d ldr r5, [r3, #0] +10034d8c: f000 81be beq.w 1003510c +10034d90: dc44 bgt.n 10034e1c +10034d92: f648 3109 movw r1, #35593 ; 0x8b09 +10034d96: 428a cmp r2, r1 +10034d98: f000 8412 beq.w 100355c0 +10034d9c: dc21 bgt.n 10034de2 +10034d9e: f648 3105 movw r1, #35589 ; 0x8b05 +10034da2: 428a cmp r2, r1 +10034da4: f000 8456 beq.w 10035654 +10034da8: dc0f bgt.n 10034dca +10034daa: f648 11f0 movw r1, #35312 ; 0x89f0 +10034dae: 428a cmp r2, r1 +10034db0: f000 8703 beq.w 10035bba +10034db4: f648 3104 movw r1, #35588 ; 0x8b04 +10034db8: 428a cmp r2, r1 +10034dba: f040 8756 bne.w 10035c6a +10034dbe: 4618 mov r0, r3 +10034dc0: 7da1 ldrb r1, [r4, #22] +10034dc2: f7fe fe11 bl 100339e8 +10034dc6: f000 bcf2 b.w 100357ae +10034dca: f648 3306 movw r3, #35590 ; 0x8b06 +10034dce: 429a cmp r2, r3 +10034dd0: f000 83ae beq.w 10035530 +10034dd4: f648 3307 movw r3, #35591 ; 0x8b07 +10034dd8: 429a cmp r2, r3 +10034dda: f000 83e4 beq.w 100355a6 +10034dde: f000 bf44 b.w 10035c6a +10034de2: f648 3318 movw r3, #35608 ; 0x8b18 +10034de6: 429a cmp r2, r3 +10034de8: f000 843d beq.w 10035666 +10034dec: dc0a bgt.n 10034e04 +10034dee: f648 3314 movw r3, #35604 ; 0x8b14 +10034df2: 429a cmp r2, r3 +10034df4: d060 beq.n 10034eb8 +10034df6: f648 3315 movw r3, #35605 ; 0x8b15 +10034dfa: 429a cmp r2, r3 +10034dfc: f000 80d9 beq.w 10034fb2 +10034e00: f000 bf33 b.w 10035c6a +10034e04: f648 3319 movw r3, #35609 ; 0x8b19 +10034e08: 429a cmp r2, r3 +10034e0a: f000 8455 beq.w 100356b8 +10034e0e: f648 331a movw r3, #35610 ; 0x8b1a +10034e12: 429a cmp r2, r3 +10034e14: f000 80de beq.w 10034fd4 +10034e18: f000 bf27 b.w 10035c6a +10034e1c: f648 3338 movw r3, #35640 ; 0x8b38 +10034e20: 429a cmp r2, r3 +10034e22: f000 868e beq.w 10035b42 +10034e26: dc23 bgt.n 10034e70 +10034e28: f648 3334 movw r3, #35636 ; 0x8b34 +10034e2c: 429a cmp r2, r3 +10034e2e: f000 81f6 beq.w 1003521e +10034e32: dc0b bgt.n 10034e4c +10034e34: f648 3330 movw r3, #35632 ; 0x8b30 +10034e38: 429a cmp r2, r3 +10034e3a: f000 84bb beq.w 100357b4 +10034e3e: f648 3332 movw r3, #35634 ; 0x8b32 +10034e42: 429a cmp r2, r3 +10034e44: f000 8172 beq.w 1003512c +10034e48: f000 bf0f b.w 10035c6a +10034e4c: f648 3335 movw r3, #35637 ; 0x8b35 +10034e50: 429a cmp r2, r3 +10034e52: f000 82fe beq.w 10035452 +10034e56: f648 3337 movw r3, #35639 ; 0x8b37 +10034e5a: 429a cmp r2, r3 +10034e5c: f040 8705 bne.w 10035c6a +10034e60: 4628 mov r0, r5 +10034e62: 6921 ldr r1, [r4, #16] +10034e64: 8aa2 ldrh r2, [r4, #20] +10034e66: 8ae3 ldrh r3, [r4, #22] +10034e68: f7e9 fd4c bl 1001e904 +10034e6c: f000 bc9f b.w 100357ae +10034e70: f648 33fd movw r3, #35837 ; 0x8bfd +10034e74: 429a cmp r2, r3 +10034e76: f000 83af beq.w 100355d8 +10034e7a: dc11 bgt.n 10034ea0 +10034e7c: f648 33fb movw r3, #35835 ; 0x8bfb +10034e80: 429a cmp r2, r3 +10034e82: f000 868d beq.w 10035ba0 +10034e86: f648 33fc movw r3, #35836 ; 0x8bfc +10034e8a: 429a cmp r2, r3 +10034e8c: f040 86ed bne.w 10035c6a +10034e90: 2100 movs r1, #0 +10034e92: f104 0210 add.w r2, r4, #16 +10034e96: 6923 ldr r3, [r4, #16] +10034e98: f7ff f808 bl 10033eac +10034e9c: f000 bc87 b.w 100357ae +10034ea0: f648 33fe movw r3, #35838 ; 0x8bfe +10034ea4: 429a cmp r2, r3 +10034ea6: f000 8384 beq.w 100355b2 +10034eaa: f648 33ff movw r3, #35839 ; 0x8bff +10034eae: 429a cmp r2, r3 +10034eb0: f000 8302 beq.w 100354b8 +10034eb4: f000 bed9 b.w 10035c6a +10034eb8: 2300 movs r3, #0 +10034eba: f885 386c strb.w r3, [r5, #2156] ; 0x86c +10034ebe: 4628 mov r0, r5 +10034ec0: f44f 6108 mov.w r1, #2176 ; 0x880 +10034ec4: f7e9 fb62 bl 1001e58c +10034ec8: 2801 cmp r0, #1 +10034eca: f000 846c beq.w 100357a6 +10034ece: 4628 mov r0, r5 +10034ed0: f44f 61fa mov.w r1, #2000 ; 0x7d0 +10034ed4: 4ab0 ldr r2, [pc, #704] ; (10035198 ) +10034ed6: f7f1 fb48 bl 1002656a <_rtw_pwr_wakeup> +10034eda: 2800 cmp r0, #0 +10034edc: f000 80fa beq.w 100350d4 +10034ee0: f641 0338 movw r3, #6200 ; 0x1838 +10034ee4: 58eb ldr r3, [r5, r3] +10034ee6: 2b00 cmp r3, #0 +10034ee8: f000 80f4 beq.w 100350d4 +10034eec: 7c63 ldrb r3, [r4, #17] +10034eee: 2b01 cmp r3, #1 +10034ef0: f040 8459 bne.w 100357a6 +10034ef4: f994 3012 ldrsb.w r3, [r4, #18] +10034ef8: bb1b cbnz r3, 10034f42 +10034efa: f994 3013 ldrsb.w r3, [r4, #19] +10034efe: bb03 cbnz r3, 10034f42 +10034f00: f994 3014 ldrsb.w r3, [r4, #20] +10034f04: b9eb cbnz r3, 10034f42 +10034f06: f994 3015 ldrsb.w r3, [r4, #21] +10034f0a: b9d3 cbnz r3, 10034f42 +10034f0c: f994 7016 ldrsb.w r7, [r4, #22] +10034f10: b9bf cbnz r7, 10034f42 +10034f12: f994 6017 ldrsb.w r6, [r4, #23] +10034f16: 2e01 cmp r6, #1 +10034f18: d113 bne.n 10034f42 +10034f1a: 692a ldr r2, [r5, #16] +10034f1c: f012 0301 ands.w r3, r2, #1 +10034f20: f000 86e6 beq.w 10035cf0 +10034f24: f885 686c strb.w r6, [r5, #2156] ; 0x86c +10034f28: 4628 mov r0, r5 +10034f2a: f7e7 fdcb bl 1001cac4 +10034f2e: 4628 mov r0, r5 +10034f30: f7e8 fd8f bl 1001da52 +10034f34: 4628 mov r0, r5 +10034f36: 4631 mov r1, r6 +10034f38: f7e8 fd1e bl 1001d978 +10034f3c: 46ba mov sl, r7 +10034f3e: f001 b93c b.w 100361ba +10034f42: f105 0634 add.w r6, r5, #52 ; 0x34 +10034f46: f241 036c movw r3, #4204 ; 0x106c +10034f4a: 4630 mov r0, r6 +10034f4c: a912 add r1, sp, #72 ; 0x48 +10034f4e: f855 9003 ldr.w r9, [r5, r3] +10034f52: f7e2 fb49 bl 100175e8 +10034f56: 6aeb ldr r3, [r5, #44] ; 0x2c +10034f58: f105 0a2c add.w sl, r5, #44 ; 0x2c +10034f5c: 61eb str r3, [r5, #28] +10034f5e: 4650 mov r0, sl +10034f60: 69e9 ldr r1, [r5, #28] +10034f62: f7e2 fb1e bl 100175a2 +10034f66: 2801 cmp r0, #1 +10034f68: f104 0712 add.w r7, r4, #18 +10034f6c: d014 beq.n 10034f98 +10034f6e: f8d5 801c ldr.w r8, [r5, #28] +10034f72: 4639 mov r1, r7 +10034f74: 4640 mov r0, r8 +10034f76: f850 3b20 ldr.w r3, [r0], #32 +10034f7a: 2206 movs r2, #6 +10034f7c: 61eb str r3, [r5, #28] +10034f7e: f7e2 fa5f bl 10017440 +10034f82: 2801 cmp r0, #1 +10034f84: d1eb bne.n 10034f5e +10034f86: 4628 mov r0, r5 +10034f88: f8d8 107c ldr.w r1, [r8, #124] ; 0x7c +10034f8c: f003 f854 bl 10038038 +10034f90: b910 cbnz r0, 10034f98 +10034f92: 4630 mov r0, r6 +10034f94: a912 add r1, sp, #72 ; 0x48 +10034f96: e09b b.n 100350d0 +10034f98: 4630 mov r0, r6 +10034f9a: a912 add r1, sp, #72 ; 0x48 +10034f9c: f7e2 fb2e bl 100175fc +10034fa0: 4649 mov r1, r9 +10034fa2: 4628 mov r0, r5 +10034fa4: f003 f8c1 bl 1003812a +10034fa8: 4628 mov r0, r5 +10034faa: 4639 mov r1, r7 +10034fac: f002 fef0 bl 10037d90 +10034fb0: e0a0 b.n 100350f4 +10034fb2: 2301 movs r3, #1 +10034fb4: 7463 strb r3, [r4, #17] +10034fb6: 3412 adds r4, #18 +10034fb8: 4620 mov r0, r4 +10034fba: 2206 movs r2, #6 +10034fbc: 2100 movs r1, #0 +10034fbe: f7e2 fa47 bl 10017450 +10034fc2: 692b ldr r3, [r5, #16] +10034fc4: 4620 mov r0, r4 +10034fc6: 07da lsls r2, r3, #31 +10034fc8: f140 8652 bpl.w 10035c70 +10034fcc: f105 019c add.w r1, r5, #156 ; 0x9c +10034fd0: 2206 movs r2, #6 +10034fd2: e2aa b.n 1003552a +10034fd4: 8aa2 ldrh r2, [r4, #20] +10034fd6: f605 0073 addw r0, r5, #2163 ; 0x873 +10034fda: 6921 ldr r1, [r4, #16] +10034fdc: f7e2 fa28 bl 10017430 +10034fe0: 8aa3 ldrh r3, [r4, #20] +10034fe2: 2200 movs r2, #0 +10034fe4: 442b add r3, r5 +10034fe6: f883 2873 strb.w r2, [r3, #2163] ; 0x873 +10034fea: f7d7 fe9b bl 1000cd24 +10034fee: b908 cbnz r0, 10034ff4 +10034ff0: f885 08f8 strb.w r0, [r5, #2296] ; 0x8f8 +10034ff4: f8d8 3010 ldr.w r3, [r8, #16] +10034ff8: 6926 ldr r6, [r4, #16] +10034ffa: 681d ldr r5, [r3, #0] +10034ffc: 2300 movs r3, #0 +10034ffe: f885 386c strb.w r3, [r5, #2156] ; 0x86c +10035002: 4628 mov r0, r5 +10035004: f44f 6108 mov.w r1, #2176 ; 0x880 +10035008: f7e9 fac0 bl 1001e58c +1003500c: 2801 cmp r0, #1 +1003500e: f000 83ca beq.w 100357a6 +10035012: 4628 mov r0, r5 +10035014: f44f 61fa mov.w r1, #2000 ; 0x7d0 +10035018: 4a60 ldr r2, [pc, #384] ; (1003519c ) +1003501a: f7f1 faa6 bl 1002656a <_rtw_pwr_wakeup> +1003501e: 2800 cmp r0, #0 +10035020: d058 beq.n 100350d4 +10035022: f641 0338 movw r3, #6200 ; 0x1838 +10035026: 58eb ldr r3, [r5, r3] +10035028: 2b00 cmp r3, #0 +1003502a: d053 beq.n 100350d4 +1003502c: 8aa3 ldrh r3, [r4, #20] +1003502e: 2b20 cmp r3, #32 +10035030: d868 bhi.n 10035104 +10035032: 692b ldr r3, [r5, #16] +10035034: f013 0810 ands.w r8, r3, #16 +10035038: d14c bne.n 100350d4 +1003503a: 4b59 ldr r3, [pc, #356] ; (100351a0 ) +1003503c: f505 6006 add.w r0, r5, #2144 ; 0x860 +10035040: f883 8000 strb.w r8, [r3] +10035044: f001 fefa bl 10036e3c +10035048: f241 036c movw r3, #4204 ; 0x106c +1003504c: 58ef ldr r7, [r5, r3] +1003504e: 8ae3 ldrh r3, [r4, #22] +10035050: 2b00 cmp r3, #0 +10035052: f000 864d beq.w 10035cf0 +10035056: 8aa3 ldrh r3, [r4, #20] +10035058: 2b00 cmp r3, #0 +1003505a: f000 8649 beq.w 10035cf0 +1003505e: 2b1f cmp r3, #31 +10035060: bf94 ite ls +10035062: 461c movls r4, r3 +10035064: 2420 movhi r4, #32 +10035066: 4641 mov r1, r8 +10035068: a812 add r0, sp, #72 ; 0x48 +1003506a: 2228 movs r2, #40 ; 0x28 +1003506c: f7e2 f9f0 bl 10017450 +10035070: 4631 mov r1, r6 +10035072: a813 add r0, sp, #76 ; 0x4c +10035074: 4622 mov r2, r4 +10035076: f105 0634 add.w r6, r5, #52 ; 0x34 +1003507a: 9412 str r4, [sp, #72] ; 0x48 +1003507c: f7e2 f9d8 bl 10017430 +10035080: 4630 mov r0, r6 +10035082: a90d add r1, sp, #52 ; 0x34 +10035084: f7e2 fab0 bl 100175e8 +10035088: 6aeb ldr r3, [r5, #44] ; 0x2c +1003508a: f105 082c add.w r8, r5, #44 ; 0x2c +1003508e: 61eb str r3, [r5, #28] +10035090: 4640 mov r0, r8 +10035092: 69e9 ldr r1, [r5, #28] +10035094: f7e2 fa85 bl 100175a2 +10035098: 2801 cmp r0, #1 +1003509a: d01f beq.n 100350dc +1003509c: 69ec ldr r4, [r5, #28] +1003509e: a913 add r1, sp, #76 ; 0x4c +100350a0: 4620 mov r0, r4 +100350a2: f850 3b2c ldr.w r3, [r0], #44 +100350a6: 9a12 ldr r2, [sp, #72] ; 0x48 +100350a8: 61eb str r3, [r5, #28] +100350aa: f7e2 f9c9 bl 10017440 +100350ae: 2801 cmp r0, #1 +100350b0: d1ee bne.n 10035090 +100350b2: 6aa2 ldr r2, [r4, #40] ; 0x28 +100350b4: 9b12 ldr r3, [sp, #72] ; 0x48 +100350b6: 429a cmp r2, r3 +100350b8: d1ea bne.n 10035090 +100350ba: 692b ldr r3, [r5, #16] +100350bc: 069b lsls r3, r3, #26 +100350be: f100 85e0 bmi.w 10035c82 +100350c2: 4628 mov r0, r5 +100350c4: 6fe1 ldr r1, [r4, #124] ; 0x7c +100350c6: f002 ffb7 bl 10038038 +100350ca: b938 cbnz r0, 100350dc +100350cc: 4630 mov r0, r6 +100350ce: a90d add r1, sp, #52 ; 0x34 +100350d0: f7e2 fa94 bl 100175fc +100350d4: f04f 3aff mov.w sl, #4294967295 +100350d8: f001 b86f b.w 100361ba +100350dc: 4630 mov r0, r6 +100350de: a90d add r1, sp, #52 ; 0x34 +100350e0: f7e2 fa8c bl 100175fc +100350e4: 4639 mov r1, r7 +100350e6: 4628 mov r0, r5 +100350e8: f003 f81f bl 1003812a +100350ec: 4628 mov r0, r5 +100350ee: a912 add r1, sp, #72 ; 0x48 +100350f0: f002 ff1a bl 10037f28 +100350f4: f1d0 0001 rsbs r0, r0, #1 +100350f8: bf38 it cc +100350fa: 2000 movcc r0, #0 +100350fc: f1c0 0a00 rsb sl, r0, #0 +10035100: f001 b85b b.w 100361ba +10035104: f06f 0a06 mvn.w sl, #6 +10035108: f001 b857 b.w 100361ba +1003510c: 692b ldr r3, [r5, #16] +1003510e: 6920 ldr r0, [r4, #16] +10035110: f013 0f41 tst.w r3, #65 ; 0x41 +10035114: d0de beq.n 100350d4 +10035116: f8d5 20a4 ldr.w r2, [r5, #164] ; 0xa4 +1003511a: f105 01a8 add.w r1, r5, #168 ; 0xa8 +1003511e: 82a2 strh r2, [r4, #20] +10035120: f7e2 f986 bl 10017430 +10035124: 2301 movs r3, #1 +10035126: 82e3 strh r3, [r4, #22] +10035128: f000 bdf8 b.w 10035d1c +1003512c: 8ae3 ldrh r3, [r4, #22] +1003512e: f3c3 030b ubfx r3, r3, #0, #12 +10035132: 2b0a cmp r3, #10 +10035134: f200 8599 bhi.w 10035c6a +10035138: e8df f013 tbh [pc, r3, lsl #1] +1003513c: 05f005f0 .word 0x05f005f0 +10035140: 05f005f0 .word 0x05f005f0 +10035144: 0016000b .word 0x0016000b +10035148: 05f00034 .word 0x05f00034 +1003514c: 059705f0 .word 0x059705f0 +10035150: 05f0 .short 0x05f0 +10035152: 6923 ldr r3, [r4, #16] +10035154: f241 1294 movw r2, #4500 ; 0x1194 +10035158: b11b cbz r3, 10035162 +1003515a: 2301 movs r3, #1 +1003515c: 54ab strb r3, [r5, r2] +1003515e: f000 bddd b.w 10035d1c +10035162: 54ab strb r3, [r5, r2] +10035164: f000 bdc4 b.w 10035cf0 +10035168: f241 0270 movw r2, #4208 ; 0x1070 +1003516c: 58ab ldr r3, [r5, r2] +1003516e: 2b00 cmp r3, #0 +10035170: f000 85be beq.w 10035cf0 +10035174: 6923 ldr r3, [r4, #16] +10035176: 2b00 cmp r3, #0 +10035178: f000 85ba beq.w 10035cf0 +1003517c: 2301 movs r3, #1 +1003517e: 50ab str r3, [r5, r2] +10035180: 2300 movs r3, #0 +10035182: f241 026c movw r2, #4204 ; 0x106c +10035186: f8c5 3d0c str.w r3, [r5, #3340] ; 0xd0c +1003518a: f8c5 3d64 str.w r3, [r5, #3428] ; 0xd64 +1003518e: f8c5 3d08 str.w r3, [r5, #3336] ; 0xd08 +10035192: 50ab str r3, [r5, r2] +10035194: f000 bdac b.w 10035cf0 +10035198: 10042341 .word 0x10042341 +1003519c: 10042350 .word 0x10042350 +100351a0: 1004bb90 .word 0x1004bb90 +100351a4: 692b ldr r3, [r5, #16] +100351a6: 07de lsls r6, r3, #31 +100351a8: f100 8573 bmi.w 10035c92 +100351ac: 6921 ldr r1, [r4, #16] +100351ae: f8d8 3010 ldr.w r3, [r8, #16] +100351b2: f001 0003 and.w r0, r1, #3 +100351b6: 2803 cmp r0, #3 +100351b8: 681a ldr r2, [r3, #0] +100351ba: d10b bne.n 100351d4 +100351bc: f241 0170 movw r1, #4208 ; 0x1070 +100351c0: 2300 movs r3, #0 +100351c2: 5053 str r3, [r2, r1] +100351c4: 2402 movs r4, #2 +100351c6: f241 016c movw r1, #4204 ; 0x106c +100351ca: 5054 str r4, [r2, r1] +100351cc: f8c2 0d08 str.w r0, [r2, #3336] ; 0xd08 +100351d0: f000 bd8e b.w 10035cf0 +100351d4: f011 0302 ands.w r3, r1, #2 +100351d8: d00b beq.n 100351f2 +100351da: f241 0170 movw r1, #4208 ; 0x1070 +100351de: 2300 movs r3, #0 +100351e0: 5053 str r3, [r2, r1] +100351e2: f241 006c movw r0, #4204 ; 0x106c +100351e6: 2101 movs r1, #1 +100351e8: 5011 str r1, [r2, r0] +100351ea: f8c2 1d08 str.w r1, [r2, #3336] ; 0xd08 +100351ee: f000 bd7f b.w 10035cf0 +100351f2: 07c8 lsls r0, r1, #31 +100351f4: d50a bpl.n 1003520c +100351f6: f241 016c movw r1, #4204 ; 0x106c +100351fa: 5850 ldr r0, [r2, r1] +100351fc: 2803 cmp r0, #3 +100351fe: f200 8577 bhi.w 10035cf0 +10035202: 5053 str r3, [r2, r1] +10035204: f8c2 3d08 str.w r3, [r2, #3336] ; 0xd08 +10035208: f000 bd72 b.w 10035cf0 +1003520c: f011 0f04 tst.w r1, #4 +10035210: bf0c ite eq +10035212: f06f 0a15 mvneq.w sl, #21 +10035216: f04f 0a00 movne.w sl, #0 +1003521a: f000 bfce b.w 100361ba +1003521e: 6923 ldr r3, [r4, #16] +10035220: f605 0094 addw r0, r5, #2196 ; 0x894 +10035224: 8c9b ldrh r3, [r3, #36] ; 0x24 +10035226: f885 3872 strb.w r3, [r5, #2162] ; 0x872 +1003522a: 6923 ldr r3, [r4, #16] +1003522c: 8cda ldrh r2, [r3, #38] ; 0x26 +1003522e: f8a5 28b4 strh.w r2, [r5, #2228] ; 0x8b4 +10035232: 6921 ldr r1, [r4, #16] +10035234: 3128 adds r1, #40 ; 0x28 +10035236: f7e2 f8fb bl 10017430 +1003523a: 7da3 ldrb r3, [r4, #22] +1003523c: 3b01 subs r3, #1 +1003523e: f885 38b6 strb.w r3, [r5, #2230] ; 0x8b6 +10035242: 6926 ldr r6, [r4, #16] +10035244: 8cf7 ldrh r7, [r6, #38] ; 0x26 +10035246: 3740 adds r7, #64 ; 0x40 +10035248: 4638 mov r0, r7 +1003524a: f7e2 fab1 bl 100177b0 +1003524e: 4605 mov r5, r0 +10035250: 2800 cmp r0, #0 +10035252: f43f af3f beq.w 100350d4 +10035256: 2100 movs r1, #0 +10035258: 463a mov r2, r7 +1003525a: f7e2 f8f9 bl 10017450 +1003525e: 2303 movs r3, #3 +10035260: 4628 mov r0, r5 +10035262: f840 3b04 str.w r3, [r0], #4 +10035266: 21ff movs r1, #255 ; 0xff +10035268: 2206 movs r2, #6 +1003526a: f7e2 f8f1 bl 10017450 +1003526e: 8cb3 ldrh r3, [r6, #36] ; 0x24 +10035270: 2b03 cmp r3, #3 +10035272: f63f af2f bhi.w 100350d4 +10035276: e8df f003 tbb [pc, r3] +1003527a: 0802 .short 0x0802 +1003527c: 0604 .short 0x0604 +1003527e: 49ba ldr r1, [pc, #744] ; (10035568 ) +10035280: e004 b.n 1003528c +10035282: 49ba ldr r1, [pc, #744] ; (1003556c ) +10035284: e002 b.n 1003528c +10035286: 49ba ldr r1, [pc, #744] ; (10035570 ) +10035288: e000 b.n 1003528c +1003528a: 49ba ldr r1, [pc, #744] ; (10035574 ) +1003528c: f105 090c add.w r9, r5, #12 +10035290: 4648 mov r0, r9 +10035292: 2210 movs r2, #16 +10035294: f7e5 fcb8 bl 1001ac08 +10035298: 6833 ldr r3, [r6, #0] +1003529a: 0719 lsls r1, r3, #28 +1003529c: bf44 itt mi +1003529e: 2301 movmi r3, #1 +100352a0: 772b strbmi r3, [r5, #28] +100352a2: 8cb3 ldrh r3, [r6, #36] ; 0x24 +100352a4: 2b01 cmp r3, #1 +100352a6: d004 beq.n 100352b2 +100352a8: 6833 ldr r3, [r6, #0] +100352aa: 075a lsls r2, r3, #29 +100352ac: bf44 itt mi +100352ae: 2300 movmi r3, #0 +100352b0: 772b strbmi r3, [r5, #28] +100352b2: 7da3 ldrb r3, [r4, #22] +100352b4: 3b01 subs r3, #1 +100352b6: f885 3024 strb.w r3, [r5, #36] ; 0x24 +100352ba: 6833 ldr r3, [r6, #0] +100352bc: 079b lsls r3, r3, #30 +100352be: d506 bpl.n 100352ce +100352c0: f105 0025 add.w r0, r5, #37 ; 0x25 +100352c4: f106 010c add.w r1, r6, #12 +100352c8: 2208 movs r2, #8 +100352ca: f7e2 f8b1 bl 10017430 +100352ce: 8cf3 ldrh r3, [r6, #38] ; 0x26 +100352d0: b13b cbz r3, 100352e2 +100352d2: 85eb strh r3, [r5, #46] ; 0x2e +100352d4: f105 0030 add.w r0, r5, #48 ; 0x30 +100352d8: f106 0128 add.w r1, r6, #40 ; 0x28 +100352dc: 8cf2 ldrh r2, [r6, #38] ; 0x26 +100352de: f7e2 f8a7 bl 10017430 +100352e2: f8d8 3010 ldr.w r3, [r8, #16] +100352e6: 681c ldr r4, [r3, #0] +100352e8: 2300 movs r3, #0 +100352ea: 622b str r3, [r5, #32] +100352ec: 76eb strb r3, [r5, #27] +100352ee: 8deb ldrh r3, [r5, #46] ; 0x2e +100352f0: 3330 adds r3, #48 ; 0x30 +100352f2: 429f cmp r7, r3 +100352f4: f0c0 84d9 bcc.w 10035caa +100352f8: 686b ldr r3, [r5, #4] +100352fa: 3301 adds r3, #1 +100352fc: f040 84d5 bne.w 10035caa +10035300: 892a ldrh r2, [r5, #8] +10035302: f64f 73ff movw r3, #65535 ; 0xffff +10035306: 429a cmp r2, r3 +10035308: f040 84cf bne.w 10035caa +1003530c: f895 3024 ldrb.w r3, [r5, #36] ; 0x24 +10035310: 2b03 cmp r3, #3 +10035312: f200 84ca bhi.w 10035caa +10035316: 4648 mov r0, r9 +10035318: 4996 ldr r1, [pc, #600] ; (10035574 ) +1003531a: f7e5 fc65 bl 1001abe8 +1003531e: 4683 mov fp, r0 +10035320: 2800 cmp r0, #0 +10035322: d172 bne.n 1003540a +10035324: f241 0370 movw r3, #4208 ; 0x1070 +10035328: 50e0 str r0, [r4, r3] +1003532a: 2301 movs r3, #1 +1003532c: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c +10035330: f8c4 3d64 str.w r3, [r4, #3428] ; 0xd64 +10035334: f895 8024 ldrb.w r8, [r5, #36] ; 0x24 +10035338: 8deb ldrh r3, [r5, #46] ; 0x2e +1003533a: f1b8 0f04 cmp.w r8, #4 +1003533e: f200 8082 bhi.w 10035446 +10035342: 2b00 cmp r3, #0 +10035344: f000 84b1 beq.w 10035caa +10035348: 2b05 cmp r3, #5 +1003534a: bf8c ite hi +1003534c: f04f 0a0d movhi.w sl, #13 +10035350: f04f 0a05 movls.w sl, #5 +10035354: f10a 090c add.w r9, sl, #12 +10035358: 4648 mov r0, r9 +1003535a: f7e2 fa29 bl 100177b0 +1003535e: 4606 mov r6, r0 +10035360: b910 cbnz r0, 10035368 +10035362: 2300 movs r3, #0 +10035364: f000 bca3 b.w 10035cae +10035368: 4659 mov r1, fp +1003536a: 464a mov r2, r9 +1003536c: f7e2 f870 bl 10017450 +10035370: f1ba 0f0d cmp.w sl, #13 +10035374: f8c6 a008 str.w sl, [r6, #8] +10035378: f8c6 9000 str.w r9, [r6] +1003537c: d104 bne.n 10035388 +1003537e: 2305 movs r3, #5 +10035380: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c +10035384: f8c4 3d64 str.w r3, [r4, #3428] ; 0xd64 +10035388: f048 4300 orr.w r3, r8, #2147483648 ; 0x80000000 +1003538c: 6073 str r3, [r6, #4] +1003538e: f106 030c add.w r3, r6, #12 +10035392: 4618 mov r0, r3 +10035394: f105 0130 add.w r1, r5, #48 ; 0x30 +10035398: 4652 mov r2, sl +1003539a: 9300 str r3, [sp, #0] +1003539c: f7e2 f848 bl 10017430 +100353a0: 4620 mov r0, r4 +100353a2: f44f 61fa mov.w r1, #2000 ; 0x7d0 +100353a6: 4a74 ldr r2, [pc, #464] ; (10035578 ) +100353a8: f7f1 f8df bl 1002656a <_rtw_pwr_wakeup> +100353ac: 9b00 ldr r3, [sp, #0] +100353ae: 2800 cmp r0, #0 +100353b0: f000 8480 beq.w 10035cb4 +100353b4: f895 a01c ldrb.w sl, [r5, #28] +100353b8: f1ba 0f00 cmp.w sl, #0 +100353bc: d00a beq.n 100353d4 +100353be: 4620 mov r0, r4 +100353c0: 4631 mov r1, r6 +100353c2: f002 fec4 bl 1003814e +100353c6: 2800 cmp r0, #0 +100353c8: bf0c ite eq +100353ca: f06f 045e mvneq.w r4, #94 ; 0x5e +100353ce: 2400 movne r4, #0 +100353d0: f000 bc72 b.w 10035cb8 +100353d4: f1b8 0f04 cmp.w r8, #4 +100353d8: f000 846c beq.w 10035cb4 +100353dc: f604 5b08 addw fp, r4, #3336 ; 0xd08 +100353e0: eb0b 1008 add.w r0, fp, r8, lsl #4 +100353e4: 4619 mov r1, r3 +100353e6: 300c adds r0, #12 +100353e8: 68b2 ldr r2, [r6, #8] +100353ea: f7e2 f821 bl 10017430 +100353ee: 68b3 ldr r3, [r6, #8] +100353f0: eb04 0288 add.w r2, r4, r8, lsl #2 +100353f4: f8c2 3d54 str.w r3, [r2, #3412] ; 0xd54 +100353f8: 4620 mov r0, r4 +100353fa: 4659 mov r1, fp +100353fc: 4642 mov r2, r8 +100353fe: 4653 mov r3, sl +10035400: f7e8 fdf8 bl 1001dff4 +10035404: 4654 mov r4, sl +10035406: f000 bc57 b.w 10035cb8 +1003540a: 4648 mov r0, r9 +1003540c: 4957 ldr r1, [pc, #348] ; (1003556c ) +1003540e: f7e5 fbeb bl 1001abe8 +10035412: b940 cbnz r0, 10035426 +10035414: f241 036c movw r3, #4204 ; 0x106c +10035418: 2207 movs r2, #7 +1003541a: 50e2 str r2, [r4, r3] +1003541c: 2302 movs r3, #2 +1003541e: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c +10035422: f8c4 3d64 str.w r3, [r4, #3428] ; 0xd64 +10035426: 4648 mov r0, r9 +10035428: 4951 ldr r1, [pc, #324] ; (10035570 ) +1003542a: f7e5 fbdd bl 1001abe8 +1003542e: 2800 cmp r0, #0 +10035430: d197 bne.n 10035362 +10035432: f241 036c movw r3, #4204 ; 0x106c +10035436: 2207 movs r2, #7 +10035438: 50e2 str r2, [r4, r3] +1003543a: 2304 movs r3, #4 +1003543c: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c +10035440: f8c4 3d64 str.w r3, [r4, #3428] ; 0xd64 +10035444: e78d b.n 10035362 +10035446: f06f 0a15 mvn.w sl, #21 +1003544a: 4628 mov r0, r5 +1003544c: 4639 mov r1, r7 +1003544e: f000 bc06 b.w 10035c5e +10035452: f8d5 3d0c ldr.w r3, [r5, #3340] ; 0xd0c +10035456: 2200 movs r2, #0 +10035458: 6926 ldr r6, [r4, #16] +1003545a: 82e2 strh r2, [r4, #22] +1003545c: 2b05 cmp r3, #5 +1003545e: f63f ae39 bhi.w 100350d4 +10035462: a101 add r1, pc, #4 ; (adr r1, 10035468 ) +10035464: f851 f023 ldr.w pc, [r1, r3, lsl #2] +10035468: 10035481 .word 0x10035481 +1003546c: 10035487 .word 0x10035487 +10035470: 100354ad .word 0x100354ad +10035474: 100350d5 .word 0x100350d5 +10035478: 100354b1 .word 0x100354b1 +1003547c: 10035487 .word 0x10035487 +10035480: 84b2 strh r2, [r6, #36] ; 0x24 +10035482: f000 bc4b b.w 10035d1c +10035486: 2301 movs r3, #1 +10035488: 84b3 strh r3, [r6, #36] ; 0x24 +1003548a: f8d5 3d10 ldr.w r3, [r5, #3344] ; 0xd10 +1003548e: f106 0028 add.w r0, r6, #40 ; 0x28 +10035492: 82e3 strh r3, [r4, #22] +10035494: b29b uxth r3, r3 +10035496: eb05 1103 add.w r1, r5, r3, lsl #4 +1003549a: f601 5114 addw r1, r1, #3348 ; 0xd14 +1003549e: 2210 movs r2, #16 +100354a0: f7e1 ffc6 bl 10017430 +100354a4: 2310 movs r3, #16 +100354a6: 84f3 strh r3, [r6, #38] ; 0x26 +100354a8: f000 bc38 b.w 10035d1c +100354ac: 2302 movs r3, #2 +100354ae: e000 b.n 100354b2 +100354b0: 2303 movs r3, #3 +100354b2: 84b3 strh r3, [r6, #36] ; 0x24 +100354b4: f000 bc32 b.w 10035d1c +100354b8: f895 38f9 ldrb.w r3, [r5, #2297] ; 0x8f9 +100354bc: b153 cbz r3, 100354d4 +100354be: f605 00b7 addw r0, r5, #2231 ; 0x8b7 +100354c2: 6921 ldr r1, [r4, #16] +100354c4: 8aa2 ldrh r2, [r4, #20] +100354c6: f7e1 ffb3 bl 10017430 +100354ca: 8aa3 ldrh r3, [r4, #20] +100354cc: 441d add r5, r3 +100354ce: 2300 movs r3, #0 +100354d0: f885 38b7 strb.w r3, [r5, #2231] ; 0x8b7 +100354d4: f8d8 3010 ldr.w r3, [r8, #16] +100354d8: 6925 ldr r5, [r4, #16] +100354da: 681e ldr r6, [r3, #0] +100354dc: f641 0369 movw r3, #6249 ; 0x1869 +100354e0: 5cf0 ldrb r0, [r6, r3] +100354e2: 8aa3 ldrh r3, [r4, #20] +100354e4: 1e5a subs r2, r3, #1 +100354e6: 2a3e cmp r2, #62 ; 0x3e +100354e8: d808 bhi.n 100354fc +100354ea: 4824 ldr r0, [pc, #144] ; (1003557c ) +100354ec: 2100 movs r1, #0 +100354ee: 2241 movs r2, #65 ; 0x41 +100354f0: f7e1 ffae bl 10017450 +100354f4: f506 509a add.w r0, r6, #4928 ; 0x1340 +100354f8: 3004 adds r0, #4 +100354fa: e014 b.n 10035526 +100354fc: 2b40 cmp r3, #64 ; 0x40 +100354fe: f47f ade9 bne.w 100350d4 +10035502: 4b1f ldr r3, [pc, #124] ; (10035580 ) +10035504: 2800 cmp r0, #0 +10035506: bf14 ite ne +10035508: 2028 movne r0, #40 ; 0x28 +1003550a: 2000 moveq r0, #0 +1003550c: 4418 add r0, r3 +1003550e: 4629 mov r1, r5 +10035510: 2220 movs r2, #32 +10035512: f7fe fc95 bl 10033e40 +10035516: f506 509a add.w r0, r6, #4928 ; 0x1340 +1003551a: 3004 adds r0, #4 +1003551c: 2100 movs r1, #0 +1003551e: 2241 movs r2, #65 ; 0x41 +10035520: f7e1 ff96 bl 10017450 +10035524: 4815 ldr r0, [pc, #84] ; (1003557c ) +10035526: 8aa2 ldrh r2, [r4, #20] +10035528: 4629 mov r1, r5 +1003552a: f7e1 ff81 bl 10017430 +1003552e: e3f5 b.n 10035d1c +10035530: 4628 mov r0, r5 +10035532: f44f 61fa mov.w r1, #2000 ; 0x7d0 +10035536: 4a13 ldr r2, [pc, #76] ; (10035584 ) +10035538: f7f1 f817 bl 1002656a <_rtw_pwr_wakeup> +1003553c: 2800 cmp r0, #0 +1003553e: f43f adc9 beq.w 100350d4 +10035542: f241 73c5 movw r3, #6085 ; 0x17c5 +10035546: 5ceb ldrb r3, [r5, r3] +10035548: 2b00 cmp r3, #0 +1003554a: f43f adc3 beq.w 100350d4 +1003554e: 6923 ldr r3, [r4, #16] +10035550: 2b03 cmp r3, #3 +10035552: f200 8128 bhi.w 100357a6 +10035556: e8df f003 tbb [pc, r3] +1003555a: 1902 .short 0x1902 +1003555c: 0417 .short 0x0417 +1003555e: 2402 movs r4, #2 +10035560: e015 b.n 1003558e +10035562: 2404 movs r4, #4 +10035564: e013 b.n 1003558e +10035566: bf00 nop +10035568: 100422e0 .word 0x100422e0 +1003556c: 100422e9 .word 0x100422e9 +10035570: 100422ee .word 0x100422ee +10035574: 100422e5 .word 0x100422e5 +10035578: 10041d63 .word 0x10041d63 +1003557c: 1004bc82 .word 0x1004bc82 +10035580: 1004bcc3 .word 0x1004bcc3 +10035584: 10042331 .word 0x10042331 +10035588: 2401 movs r4, #1 +1003558a: e000 b.n 1003558e +1003558c: 2400 movs r4, #0 +1003558e: 4628 mov r0, r5 +10035590: 4621 mov r1, r4 +10035592: f002 fd51 bl 10038038 +10035596: 2800 cmp r0, #0 +10035598: f43f ad9c beq.w 100350d4 +1003559c: 4628 mov r0, r5 +1003559e: 4621 mov r1, r4 +100355a0: f7f3 f862 bl 10028668 +100355a4: e3ba b.n 10035d1c +100355a6: 692b ldr r3, [r5, #16] +100355a8: 071d lsls r5, r3, #28 +100355aa: f140 838c bpl.w 10035cc6 +100355ae: 2302 movs r3, #2 +100355b0: e392 b.n 10035cd8 +100355b2: 2100 movs r1, #0 +100355b4: f104 0210 add.w r2, r4, #16 +100355b8: 6923 ldr r3, [r4, #16] +100355ba: f7fe fc9d bl 10033ef8 +100355be: e0f6 b.n 100357ae +100355c0: 692b ldr r3, [r5, #16] +100355c2: f013 0301 ands.w r3, r3, #1 +100355c6: f000 838b beq.w 10035ce0 +100355ca: f995 3c04 ldrsb.w r3, [r5, #3076] ; 0xc04 +100355ce: 425b negs r3, r3 +100355d0: 6123 str r3, [r4, #16] +100355d2: 2300 movs r3, #0 +100355d4: 7523 strb r3, [r4, #20] +100355d6: e38b b.n 10035cf0 +100355d8: 7c23 ldrb r3, [r4, #16] +100355da: b34b cbz r3, 10035630 +100355dc: 2b01 cmp r3, #1 +100355de: d029 beq.n 10035634 +100355e0: 2b02 cmp r3, #2 +100355e2: d01b beq.n 1003561c +100355e4: 2b03 cmp r3, #3 +100355e6: d027 beq.n 10035638 +100355e8: 2b04 cmp r3, #4 +100355ea: d019 beq.n 10035620 +100355ec: 2b05 cmp r3, #5 +100355ee: d025 beq.n 1003563c +100355f0: 2b06 cmp r3, #6 +100355f2: d017 beq.n 10035624 +100355f4: 2b07 cmp r3, #7 +100355f6: d017 beq.n 10035628 +100355f8: 2b08 cmp r3, #8 +100355fa: d017 beq.n 1003562c +100355fc: 2b09 cmp r3, #9 +100355fe: d017 beq.n 10035630 +10035600: 2b0a cmp r3, #10 +10035602: d017 beq.n 10035634 +10035604: 2b0b cmp r3, #11 +10035606: d017 beq.n 10035638 +10035608: f1a3 020c sub.w r2, r3, #12 +1003560c: 2a12 cmp r2, #18 +1003560e: d915 bls.n 1003563c +10035610: 3b1f subs r3, #31 +10035612: 2b98 cmp r3, #152 ; 0x98 +10035614: bf94 ite ls +10035616: 2121 movls r1, #33 ; 0x21 +10035618: 2120 movhi r1, #32 +1003561a: e010 b.n 1003563e +1003561c: 2122 movs r1, #34 ; 0x22 +1003561e: e00e b.n 1003563e +10035620: 2124 movs r1, #36 ; 0x24 +10035622: e00c b.n 1003563e +10035624: 2147 movs r1, #71 ; 0x47 +10035626: e00a b.n 1003563e +10035628: 2158 movs r1, #88 ; 0x58 +1003562a: e008 b.n 1003563e +1003562c: 2141 movs r1, #65 ; 0x41 +1003562e: e006 b.n 1003563e +10035630: 2120 movs r1, #32 +10035632: e004 b.n 1003563e +10035634: 2121 movs r1, #33 ; 0x21 +10035636: e002 b.n 1003563e +10035638: 2123 movs r1, #35 ; 0x23 +1003563a: e000 b.n 1003563e +1003563c: 212a movs r1, #42 ; 0x2a +1003563e: 4628 mov r0, r5 +10035640: 2201 movs r2, #1 +10035642: f7e7 fb88 bl 1001cd56 +10035646: f1b0 0a01 subs.w sl, r0, #1 +1003564a: bf18 it ne +1003564c: f06f 0a00 mvnne.w sl, #0 +10035650: f000 bdb3 b.w 100361ba +10035654: 692b ldr r3, [r5, #16] +10035656: f013 0301 ands.w r3, r3, #1 +1003565a: f000 8346 beq.w 10035cea +1003565e: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 +10035662: 75a3 strb r3, [r4, #22] +10035664: e35a b.n 10035d1c +10035666: 2300 movs r3, #0 +10035668: 4628 mov r0, r5 +1003566a: f44f 61fa mov.w r1, #2000 ; 0x7d0 +1003566e: 4a8c ldr r2, [pc, #560] ; (100358a0 ) +10035670: 6926 ldr r6, [r4, #16] +10035672: 930d str r3, [sp, #52] ; 0x34 +10035674: f7f0 ff79 bl 1002656a <_rtw_pwr_wakeup> +10035678: 2800 cmp r0, #0 +1003567a: f43f ad2b beq.w 100350d4 +1003567e: f241 73ac movw r3, #6060 ; 0x17ac +10035682: 58eb ldr r3, [r5, r3] +10035684: 2b00 cmp r3, #0 +10035686: f47f ad25 bne.w 100350d4 +1003568a: f641 0338 movw r3, #6200 ; 0x1838 +1003568e: 58eb ldr r3, [r5, r3] +10035690: 2b00 cmp r3, #0 +10035692: f43f ad1f beq.w 100350d4 +10035696: f241 73c5 movw r3, #6085 ; 0x17c5 +1003569a: 5ceb ldrb r3, [r5, r3] +1003569c: 2b00 cmp r3, #0 +1003569e: f43f ad19 beq.w 100350d4 +100356a2: f895 3488 ldrb.w r3, [r5, #1160] ; 0x488 +100356a6: 2b01 cmp r3, #1 +100356a8: f000 8334 beq.w 10035d14 +100356ac: 692f ldr r7, [r5, #16] +100356ae: f417 6708 ands.w r7, r7, #2176 ; 0x880 +100356b2: f040 832f bne.w 10035d14 +100356b6: e31d b.n 10035cf4 +100356b8: 8aa3 ldrh r3, [r4, #20] +100356ba: f8d4 8010 ldr.w r8, [r4, #16] +100356be: 9301 str r3, [sp, #4] +100356c0: f241 437c movw r3, #5244 ; 0x147c +100356c4: 5ceb ldrb r3, [r5, r3] +100356c6: b123 cbz r3, 100356d2 +100356c8: f241 73ac movw r3, #6060 ; 0x17ac +100356cc: 58eb ldr r3, [r5, r3] +100356ce: 2b00 cmp r3, #0 +100356d0: d169 bne.n 100357a6 +100356d2: 26c9 movs r6, #201 ; 0xc9 +100356d4: 692b ldr r3, [r5, #16] +100356d6: f413 6f08 tst.w r3, #2176 ; 0x880 +100356da: f040 8353 bne.w 10035d84 +100356de: f8b5 3048 ldrh.w r3, [r5, #72] ; 0x48 +100356e2: 82e3 strh r3, [r4, #22] +100356e4: f8b5 261a ldrh.w r2, [r5, #1562] ; 0x61a +100356e8: 2300 movs r3, #0 +100356ea: 2a02 cmp r2, #2 +100356ec: 642b str r3, [r5, #64] ; 0x40 +100356ee: f8a5 3048 strh.w r3, [r5, #72] ; 0x48 +100356f2: f040 82fd bne.w 10035cf0 +100356f6: f105 0934 add.w r9, r5, #52 ; 0x34 +100356fa: 4648 mov r0, r9 +100356fc: a912 add r1, sp, #72 ; 0x48 +100356fe: f7e1 ff73 bl 100175e8 +10035702: 6aee ldr r6, [r5, #44] ; 0x2c +10035704: f105 0b2c add.w fp, r5, #44 ; 0x2c +10035708: 4647 mov r7, r8 +1003570a: 4658 mov r0, fp +1003570c: 4631 mov r1, r6 +1003570e: f7e1 ff48 bl 100175a2 +10035712: 2801 cmp r0, #1 +10035714: d037 beq.n 10035786 +10035716: 9b01 ldr r3, [sp, #4] +10035718: 4443 add r3, r8 +1003571a: 1bdb subs r3, r3, r7 +1003571c: f5b3 7f40 cmp.w r3, #768 ; 0x300 +10035720: db34 blt.n 1003578c +10035722: f205 50fc addw r0, r5, #1532 ; 0x5fc +10035726: 6eb1 ldr r1, [r6, #104] ; 0x68 +10035728: 2200 movs r2, #0 +1003572a: f7e8 ff81 bl 1001e630 +1003572e: 2801 cmp r0, #1 +10035730: d127 bne.n 10035782 +10035732: f106 0a20 add.w sl, r6, #32 +10035736: f205 6014 addw r0, r5, #1556 ; 0x614 +1003573a: 4651 mov r1, sl +1003573c: 2206 movs r2, #6 +1003573e: f7e1 fe7f bl 10017440 +10035742: b1f0 cbz r0, 10035782 +10035744: 4638 mov r0, r7 +10035746: 4651 mov r1, sl +10035748: 2206 movs r2, #6 +1003574a: f7e1 fe71 bl 10017430 +1003574e: 6eb3 ldr r3, [r6, #104] ; 0x68 +10035750: 3713 adds r7, #19 +10035752: f807 3c0d strb.w r3, [r7, #-13] +10035756: 6933 ldr r3, [r6, #16] +10035758: f106 01a4 add.w r1, r6, #164 ; 0xa4 +1003575c: f847 3c0c str.w r3, [r7, #-12] +10035760: 6d73 ldr r3, [r6, #84] ; 0x54 +10035762: f847 3c08 str.w r3, [r7, #-8] +10035766: f8d6 3094 ldr.w r3, [r6, #148] ; 0x94 +1003576a: f847 3c04 str.w r3, [r7, #-4] +1003576e: f8d6 2094 ldr.w r2, [r6, #148] ; 0x94 +10035772: 4638 mov r0, r7 +10035774: 3a0c subs r2, #12 +10035776: f7e1 fe5b bl 10017430 +1003577a: f8d6 3094 ldr.w r3, [r6, #148] ; 0x94 +1003577e: 3b0c subs r3, #12 +10035780: 441f add r7, r3 +10035782: 6836 ldr r6, [r6, #0] +10035784: e7c1 b.n 1003570a +10035786: f04f 0a00 mov.w sl, #0 +1003578a: e001 b.n 10035790 +1003578c: f06f 0a06 mvn.w sl, #6 +10035790: ebc8 0707 rsb r7, r8, r7 +10035794: b2bf uxth r7, r7 +10035796: 4648 mov r0, r9 +10035798: a912 add r1, sp, #72 ; 0x48 +1003579a: f7e1 ff2f bl 100175fc +1003579e: 82a7 strh r7, [r4, #20] +100357a0: 82e7 strh r7, [r4, #22] +100357a2: f000 bd0a b.w 100361ba +100357a6: f06f 0a15 mvn.w sl, #21 +100357aa: f000 bd06 b.w 100361ba +100357ae: 4682 mov sl, r0 +100357b0: f000 bd03 b.w 100361ba +100357b4: 6927 ldr r7, [r4, #16] +100357b6: 8aa6 ldrh r6, [r4, #20] +100357b8: 2200 movs r2, #0 +100357ba: 4638 mov r0, r7 +100357bc: 4631 mov r1, r6 +100357be: ab07 add r3, sp, #28 +100357c0: 8ae4 ldrh r4, [r4, #22] +100357c2: 9207 str r2, [sp, #28] +100357c4: 9208 str r2, [sp, #32] +100357c6: f009 f87b bl 1003e8c0 <__rtw_get_wps_ie_veneer> +100357ca: b160 cbz r0, 100357e6 +100357cc: 9b07 ldr r3, [sp, #28] +100357ce: b153 cbz r3, 100357e6 +100357d0: 2300 movs r3, #0 +100357d2: 2c04 cmp r4, #4 +100357d4: f200 82a2 bhi.w 10035d1c +100357d8: e8df f014 tbh [pc, r4, lsl #1] +100357dc: 00640012 .word 0x00640012 +100357e0: 011700b4 .word 0x011700b4 +100357e4: 0165 .short 0x0165 +100357e6: 4638 mov r0, r7 +100357e8: 4631 mov r1, r6 +100357ea: 2200 movs r2, #0 +100357ec: ab08 add r3, sp, #32 +100357ee: f001 ff8f bl 10037710 +100357f2: 2800 cmp r0, #0 +100357f4: f000 8292 beq.w 10035d1c +100357f8: 9b08 ldr r3, [sp, #32] +100357fa: 2b00 cmp r3, #0 +100357fc: d1e8 bne.n 100357d0 +100357fe: e28d b.n 10035d1c +10035800: 2400 movs r4, #0 +10035802: 930d str r3, [sp, #52] ; 0x34 +10035804: 9312 str r3, [sp, #72] ; 0x48 +10035806: 2e00 cmp r6, #0 +10035808: f000 8288 beq.w 10035d1c +1003580c: 4638 mov r0, r7 +1003580e: 4631 mov r1, r6 +10035810: 4622 mov r2, r4 +10035812: ab0d add r3, sp, #52 ; 0x34 +10035814: f009 f854 bl 1003e8c0 <__rtw_get_wps_ie_veneer> +10035818: 4680 mov r8, r0 +1003581a: b1c8 cbz r0, 10035850 +1003581c: f8d5 04a4 ldr.w r0, [r5, #1188] ; 0x4a4 +10035820: b138 cbz r0, 10035832 +10035822: f8d5 14a8 ldr.w r1, [r5, #1192] ; 0x4a8 +10035826: f8c5 44a8 str.w r4, [r5, #1192] ; 0x4a8 +1003582a: f7e1 fdfe bl 1001742a +1003582e: f8c5 44a4 str.w r4, [r5, #1188] ; 0x4a4 +10035832: 980d ldr r0, [sp, #52] ; 0x34 +10035834: f7e1 ffbc bl 100177b0 +10035838: f8c5 04a4 str.w r0, [r5, #1188] ; 0x4a4 +1003583c: 2800 cmp r0, #0 +1003583e: f000 826d beq.w 10035d1c +10035842: 4641 mov r1, r8 +10035844: 9a0d ldr r2, [sp, #52] ; 0x34 +10035846: f7e1 fdf3 bl 10017430 +1003584a: 9b0d ldr r3, [sp, #52] ; 0x34 +1003584c: f8c5 34a8 str.w r3, [r5, #1192] ; 0x4a8 +10035850: 980d ldr r0, [sp, #52] ; 0x34 +10035852: 2200 movs r2, #0 +10035854: 1a31 subs r1, r6, r0 +10035856: b289 uxth r1, r1 +10035858: 4438 add r0, r7 +1003585a: ab12 add r3, sp, #72 ; 0x48 +1003585c: f001 ff58 bl 10037710 +10035860: 4604 mov r4, r0 +10035862: 2800 cmp r0, #0 +10035864: f000 825a beq.w 10035d1c +10035868: f8d5 04e0 ldr.w r0, [r5, #1248] ; 0x4e0 +1003586c: b140 cbz r0, 10035880 +1003586e: 2600 movs r6, #0 +10035870: f8d5 14f4 ldr.w r1, [r5, #1268] ; 0x4f4 +10035874: f8c5 64f4 str.w r6, [r5, #1268] ; 0x4f4 +10035878: f7e1 fdd7 bl 1001742a +1003587c: f8c5 64e0 str.w r6, [r5, #1248] ; 0x4e0 +10035880: 9812 ldr r0, [sp, #72] ; 0x48 +10035882: f7e1 ff95 bl 100177b0 +10035886: f8c5 04e0 str.w r0, [r5, #1248] ; 0x4e0 +1003588a: 2800 cmp r0, #0 +1003588c: f000 8246 beq.w 10035d1c +10035890: 4621 mov r1, r4 +10035892: 9a12 ldr r2, [sp, #72] ; 0x48 +10035894: f7e1 fdcc bl 10017430 +10035898: 9b12 ldr r3, [sp, #72] ; 0x48 +1003589a: f8c5 34f4 str.w r3, [r5, #1268] ; 0x4f4 +1003589e: e23d b.n 10035d1c +100358a0: 10041d53 .word 0x10041d53 +100358a4: 2400 movs r4, #0 +100358a6: 930d str r3, [sp, #52] ; 0x34 +100358a8: 9312 str r3, [sp, #72] ; 0x48 +100358aa: 2e00 cmp r6, #0 +100358ac: f000 8236 beq.w 10035d1c +100358b0: 4638 mov r0, r7 +100358b2: 4631 mov r1, r6 +100358b4: 4622 mov r2, r4 +100358b6: ab0d add r3, sp, #52 ; 0x34 +100358b8: f009 f802 bl 1003e8c0 <__rtw_get_wps_ie_veneer> +100358bc: 4680 mov r8, r0 +100358be: b1c8 cbz r0, 100358f4 +100358c0: f8d5 04c8 ldr.w r0, [r5, #1224] ; 0x4c8 +100358c4: b138 cbz r0, 100358d6 +100358c6: f8d5 14d4 ldr.w r1, [r5, #1236] ; 0x4d4 +100358ca: f8c5 44d4 str.w r4, [r5, #1236] ; 0x4d4 +100358ce: f7e1 fdac bl 1001742a +100358d2: f8c5 44c8 str.w r4, [r5, #1224] ; 0x4c8 +100358d6: 980d ldr r0, [sp, #52] ; 0x34 +100358d8: f7e1 ff6a bl 100177b0 +100358dc: f8c5 04c8 str.w r0, [r5, #1224] ; 0x4c8 +100358e0: 2800 cmp r0, #0 +100358e2: f000 821b beq.w 10035d1c +100358e6: 4641 mov r1, r8 +100358e8: 9a0d ldr r2, [sp, #52] ; 0x34 +100358ea: f7e1 fda1 bl 10017430 +100358ee: 9b0d ldr r3, [sp, #52] ; 0x34 +100358f0: f8c5 34d4 str.w r3, [r5, #1236] ; 0x4d4 +100358f4: 980d ldr r0, [sp, #52] ; 0x34 +100358f6: 2200 movs r2, #0 +100358f8: 1a31 subs r1, r6, r0 +100358fa: b289 uxth r1, r1 +100358fc: 4438 add r0, r7 +100358fe: ab12 add r3, sp, #72 ; 0x48 +10035900: f001 ff06 bl 10037710 +10035904: 4604 mov r4, r0 +10035906: 2800 cmp r0, #0 +10035908: f000 8208 beq.w 10035d1c +1003590c: f8d5 04e4 ldr.w r0, [r5, #1252] ; 0x4e4 +10035910: b140 cbz r0, 10035924 +10035912: 2600 movs r6, #0 +10035914: f8d5 14f8 ldr.w r1, [r5, #1272] ; 0x4f8 +10035918: f8c5 64f8 str.w r6, [r5, #1272] ; 0x4f8 +1003591c: f7e1 fd85 bl 1001742a +10035920: f8c5 64e4 str.w r6, [r5, #1252] ; 0x4e4 +10035924: 9812 ldr r0, [sp, #72] ; 0x48 +10035926: f7e1 ff43 bl 100177b0 +1003592a: f8c5 04e4 str.w r0, [r5, #1252] ; 0x4e4 +1003592e: 2800 cmp r0, #0 +10035930: f000 81f4 beq.w 10035d1c +10035934: 4621 mov r1, r4 +10035936: 9a12 ldr r2, [sp, #72] ; 0x48 +10035938: f7e1 fd7a bl 10017430 +1003593c: 9b12 ldr r3, [sp, #72] ; 0x48 +1003593e: f8c5 34f8 str.w r3, [r5, #1272] ; 0x4f8 +10035942: e1eb b.n 10035d1c +10035944: 2250 movs r2, #80 ; 0x50 +10035946: 9312 str r3, [sp, #72] ; 0x48 +10035948: f88d 2049 strb.w r2, [sp, #73] ; 0x49 +1003594c: 22f2 movs r2, #242 ; 0xf2 +1003594e: f88d 204a strb.w r2, [sp, #74] ; 0x4a +10035952: 2204 movs r2, #4 +10035954: 2400 movs r4, #0 +10035956: 9309 str r3, [sp, #36] ; 0x24 +10035958: 9313 str r3, [sp, #76] ; 0x4c +1003595a: f88d 204b strb.w r2, [sp, #75] ; 0x4b +1003595e: 930d str r3, [sp, #52] ; 0x34 +10035960: 2e00 cmp r6, #0 +10035962: f000 81db beq.w 10035d1c +10035966: 4638 mov r0, r7 +10035968: 4631 mov r1, r6 +1003596a: 4622 mov r2, r4 +1003596c: ab09 add r3, sp, #36 ; 0x24 +1003596e: f008 ffa7 bl 1003e8c0 <__rtw_get_wps_ie_veneer> +10035972: 4680 mov r8, r0 +10035974: b308 cbz r0, 100359ba +10035976: f8d5 04c4 ldr.w r0, [r5, #1220] ; 0x4c4 +1003597a: b138 cbz r0, 1003598c +1003597c: f8d5 14d0 ldr.w r1, [r5, #1232] ; 0x4d0 +10035980: f8c5 44d0 str.w r4, [r5, #1232] ; 0x4d0 +10035984: f7e1 fd51 bl 1001742a +10035988: f8c5 44c4 str.w r4, [r5, #1220] ; 0x4c4 +1003598c: 9809 ldr r0, [sp, #36] ; 0x24 +1003598e: f7e1 ff0f bl 100177b0 +10035992: f8c5 04c4 str.w r0, [r5, #1220] ; 0x4c4 +10035996: 2800 cmp r0, #0 +10035998: f000 81c0 beq.w 10035d1c +1003599c: 4641 mov r1, r8 +1003599e: 9a09 ldr r2, [sp, #36] ; 0x24 +100359a0: f7e1 fd46 bl 10017430 +100359a4: 2301 movs r3, #1 +100359a6: f885 3858 strb.w r3, [r5, #2136] ; 0x858 +100359aa: 9a09 ldr r2, [sp, #36] ; 0x24 +100359ac: 4628 mov r0, r5 +100359ae: f8c5 24d0 str.w r2, [r5, #1232] ; 0x4d0 +100359b2: 21dd movs r1, #221 ; 0xdd +100359b4: aa12 add r2, sp, #72 ; 0x48 +100359b6: f7e5 fb37 bl 1001b028 +100359ba: 9809 ldr r0, [sp, #36] ; 0x24 +100359bc: 2200 movs r2, #0 +100359be: 1a31 subs r1, r6, r0 +100359c0: b289 uxth r1, r1 +100359c2: 4438 add r0, r7 +100359c4: ab0d add r3, sp, #52 ; 0x34 +100359c6: f001 fea3 bl 10037710 +100359ca: 4604 mov r4, r0 +100359cc: 2800 cmp r0, #0 +100359ce: f000 81a5 beq.w 10035d1c +100359d2: f8d5 04dc ldr.w r0, [r5, #1244] ; 0x4dc +100359d6: b140 cbz r0, 100359ea +100359d8: 2600 movs r6, #0 +100359da: f8d5 14f0 ldr.w r1, [r5, #1264] ; 0x4f0 +100359de: f8c5 64f0 str.w r6, [r5, #1264] ; 0x4f0 +100359e2: f7e1 fd22 bl 1001742a +100359e6: f8c5 64dc str.w r6, [r5, #1244] ; 0x4dc +100359ea: 980d ldr r0, [sp, #52] ; 0x34 +100359ec: f7e1 fee0 bl 100177b0 +100359f0: f8c5 04dc str.w r0, [r5, #1244] ; 0x4dc +100359f4: 2800 cmp r0, #0 +100359f6: f000 8191 beq.w 10035d1c +100359fa: 4621 mov r1, r4 +100359fc: 9a0d ldr r2, [sp, #52] ; 0x34 +100359fe: f7e1 fd17 bl 10017430 +10035a02: 9b0d ldr r3, [sp, #52] ; 0x34 +10035a04: f8c5 34f0 str.w r3, [r5, #1264] ; 0x4f0 +10035a08: e188 b.n 10035d1c +10035a0a: 2400 movs r4, #0 +10035a0c: 930d str r3, [sp, #52] ; 0x34 +10035a0e: 9312 str r3, [sp, #72] ; 0x48 +10035a10: 2e00 cmp r6, #0 +10035a12: f000 8183 beq.w 10035d1c +10035a16: 4638 mov r0, r7 +10035a18: 4631 mov r1, r6 +10035a1a: 4622 mov r2, r4 +10035a1c: ab0d add r3, sp, #52 ; 0x34 +10035a1e: f008 ff4f bl 1003e8c0 <__rtw_get_wps_ie_veneer> +10035a22: b1c0 cbz r0, 10035a56 +10035a24: f8d5 04ac ldr.w r0, [r5, #1196] ; 0x4ac +10035a28: b138 cbz r0, 10035a3a +10035a2a: f8d5 14b0 ldr.w r1, [r5, #1200] ; 0x4b0 +10035a2e: f8c5 44b0 str.w r4, [r5, #1200] ; 0x4b0 +10035a32: f7e1 fcfa bl 1001742a +10035a36: f8c5 44ac str.w r4, [r5, #1196] ; 0x4ac +10035a3a: 4630 mov r0, r6 +10035a3c: f7e1 feb8 bl 100177b0 +10035a40: f8c5 04ac str.w r0, [r5, #1196] ; 0x4ac +10035a44: 2800 cmp r0, #0 +10035a46: f000 8169 beq.w 10035d1c +10035a4a: 4639 mov r1, r7 +10035a4c: 4632 mov r2, r6 +10035a4e: f7e1 fcef bl 10017430 +10035a52: f8c5 64b0 str.w r6, [r5, #1200] ; 0x4b0 +10035a56: 980d ldr r0, [sp, #52] ; 0x34 +10035a58: 2200 movs r2, #0 +10035a5a: 1a31 subs r1, r6, r0 +10035a5c: b289 uxth r1, r1 +10035a5e: 4438 add r0, r7 +10035a60: ab12 add r3, sp, #72 ; 0x48 +10035a62: f001 fe55 bl 10037710 +10035a66: 4604 mov r4, r0 +10035a68: 2800 cmp r0, #0 +10035a6a: f000 8157 beq.w 10035d1c +10035a6e: f8d5 04e8 ldr.w r0, [r5, #1256] ; 0x4e8 +10035a72: b140 cbz r0, 10035a86 +10035a74: 2600 movs r6, #0 +10035a76: f8d5 14fc ldr.w r1, [r5, #1276] ; 0x4fc +10035a7a: f8c5 64fc str.w r6, [r5, #1276] ; 0x4fc +10035a7e: f7e1 fcd4 bl 1001742a +10035a82: f8c5 64e8 str.w r6, [r5, #1256] ; 0x4e8 +10035a86: 9812 ldr r0, [sp, #72] ; 0x48 +10035a88: f7e1 fe92 bl 100177b0 +10035a8c: f8c5 04e8 str.w r0, [r5, #1256] ; 0x4e8 +10035a90: 2800 cmp r0, #0 +10035a92: f000 8143 beq.w 10035d1c +10035a96: 4621 mov r1, r4 +10035a98: 9a12 ldr r2, [sp, #72] ; 0x48 +10035a9a: f7e1 fcc9 bl 10017430 +10035a9e: 9b12 ldr r3, [sp, #72] ; 0x48 +10035aa0: f8c5 34fc str.w r3, [r5, #1276] ; 0x4fc +10035aa4: e13a b.n 10035d1c +10035aa6: 2400 movs r4, #0 +10035aa8: 930d str r3, [sp, #52] ; 0x34 +10035aaa: 9312 str r3, [sp, #72] ; 0x48 +10035aac: 2e00 cmp r6, #0 +10035aae: f000 8135 beq.w 10035d1c +10035ab2: 4638 mov r0, r7 +10035ab4: 4631 mov r1, r6 +10035ab6: 4622 mov r2, r4 +10035ab8: ab0d add r3, sp, #52 ; 0x34 +10035aba: f008 ff01 bl 1003e8c0 <__rtw_get_wps_ie_veneer> +10035abe: b1c0 cbz r0, 10035af2 +10035ac0: f8d5 04cc ldr.w r0, [r5, #1228] ; 0x4cc +10035ac4: b138 cbz r0, 10035ad6 +10035ac6: f8d5 14d8 ldr.w r1, [r5, #1240] ; 0x4d8 +10035aca: f8c5 44d8 str.w r4, [r5, #1240] ; 0x4d8 +10035ace: f7e1 fcac bl 1001742a +10035ad2: f8c5 44cc str.w r4, [r5, #1228] ; 0x4cc +10035ad6: 4630 mov r0, r6 +10035ad8: f7e1 fe6a bl 100177b0 +10035adc: f8c5 04cc str.w r0, [r5, #1228] ; 0x4cc +10035ae0: 2800 cmp r0, #0 +10035ae2: f000 811b beq.w 10035d1c +10035ae6: 4639 mov r1, r7 +10035ae8: 4632 mov r2, r6 +10035aea: f7e1 fca1 bl 10017430 +10035aee: f8c5 64d8 str.w r6, [r5, #1240] ; 0x4d8 +10035af2: 980d ldr r0, [sp, #52] ; 0x34 +10035af4: 2200 movs r2, #0 +10035af6: 1a31 subs r1, r6, r0 +10035af8: b289 uxth r1, r1 +10035afa: 4438 add r0, r7 +10035afc: ab12 add r3, sp, #72 ; 0x48 +10035afe: f001 fe07 bl 10037710 +10035b02: 4604 mov r4, r0 +10035b04: 2800 cmp r0, #0 +10035b06: f000 8109 beq.w 10035d1c +10035b0a: f8d5 04ec ldr.w r0, [r5, #1260] ; 0x4ec +10035b0e: b140 cbz r0, 10035b22 +10035b10: 2600 movs r6, #0 +10035b12: f8d5 1500 ldr.w r1, [r5, #1280] ; 0x500 +10035b16: f8c5 6500 str.w r6, [r5, #1280] ; 0x500 +10035b1a: f7e1 fc86 bl 1001742a +10035b1e: f8c5 64ec str.w r6, [r5, #1260] ; 0x4ec +10035b22: 9812 ldr r0, [sp, #72] ; 0x48 +10035b24: f7e1 fe44 bl 100177b0 +10035b28: f8c5 04ec str.w r0, [r5, #1260] ; 0x4ec +10035b2c: 2800 cmp r0, #0 +10035b2e: f000 80f5 beq.w 10035d1c +10035b32: 4621 mov r1, r4 +10035b34: 9a12 ldr r2, [sp, #72] ; 0x48 +10035b36: f7e1 fc7b bl 10017430 +10035b3a: 9b12 ldr r3, [sp, #72] ; 0x48 +10035b3c: f8c5 3500 str.w r3, [r5, #1280] ; 0x500 +10035b40: e0ec b.n 10035d1c +10035b42: f7d7 f8ef bl 1000cd24 +10035b46: b118 cbz r0, 10035b50 +10035b48: f7d7 f8ee bl 1000cd28 +10035b4c: f885 08f8 strb.w r0, [r5, #2296] ; 0x8f8 +10035b50: 8aa5 ldrh r5, [r4, #20] +10035b52: 6926 ldr r6, [r4, #16] +10035b54: f7e1 fc19 bl 1001738a +10035b58: 2000 movs r0, #0 +10035b5a: f001 fa49 bl 10036ff0 +10035b5e: f7e1 fc16 bl 1001738e +10035b62: 4628 mov r0, r5 +10035b64: f001 fa60 bl 10037028 +10035b68: 4604 mov r4, r0 +10035b6a: b178 cbz r0, 10035b8c +10035b6c: 462a mov r2, r5 +10035b6e: 6940 ldr r0, [r0, #20] +10035b70: 4631 mov r1, r6 +10035b72: f7e1 fc5d bl 10017430 +10035b76: 4629 mov r1, r5 +10035b78: 4620 mov r0, r4 +10035b7a: f000 fe45 bl 10036808 +10035b7e: 2000 movs r0, #0 +10035b80: 4621 mov r1, r4 +10035b82: f001 fa71 bl 10037068 +10035b86: f04f 0a00 mov.w sl, #0 +10035b8a: e001 b.n 10035b90 +10035b8c: f04f 3aff mov.w sl, #4294967295 +10035b90: f7e1 fbfb bl 1001738a +10035b94: 2000 movs r0, #0 +10035b96: f001 fa35 bl 10037004 +10035b9a: f7e1 fbf8 bl 1001738e +10035b9e: e30c b.n 100361ba +10035ba0: 7c23 ldrb r3, [r4, #16] +10035ba2: b10b cbz r3, 10035ba8 +10035ba4: 2307 movs r3, #7 +10035ba6: e000 b.n 10035baa +10035ba8: 2306 movs r3, #6 +10035baa: 4628 mov r0, r5 +10035bac: 2109 movs r1, #9 +10035bae: aa12 add r2, sp, #72 ; 0x48 +10035bb0: f88d 3048 strb.w r3, [sp, #72] ; 0x48 +10035bb4: f7fc fcab bl 1003250e +10035bb8: e0b0 b.n 10035d1c +10035bba: 2320 movs r3, #32 +10035bbc: 2100 movs r1, #0 +10035bbe: 2211 movs r2, #17 +10035bc0: a80d add r0, sp, #52 ; 0x34 +10035bc2: f8ad 3018 strh.w r3, [sp, #24] +10035bc6: 9107 str r1, [sp, #28] +10035bc8: f008 f82c bl 1003dc24 +10035bcc: a809 add r0, sp, #36 ; 0x24 +10035bce: f104 0110 add.w r1, r4, #16 +10035bd2: 2210 movs r2, #16 +10035bd4: f7e1 fc2c bl 10017430 +10035bd8: f8bd 9028 ldrh.w r9, [sp, #40] ; 0x28 +10035bdc: f109 0001 add.w r0, r9, #1 +10035be0: f7e1 fdf6 bl 100177d0 +10035be4: 9002 str r0, [sp, #8] +10035be6: 2800 cmp r0, #0 +10035be8: d03c beq.n 10035c64 +10035bea: 9909 ldr r1, [sp, #36] ; 0x24 +10035bec: 464a mov r2, r9 +10035bee: f7e1 fc1f bl 10017430 +10035bf2: 9b02 ldr r3, [sp, #8] +10035bf4: 49b4 ldr r1, [pc, #720] ; (10035ec8 ) +10035bf6: 4618 mov r0, r3 +10035bf8: aa0d add r2, sp, #52 ; 0x34 +10035bfa: 9307 str r3, [sp, #28] +10035bfc: f008 f8d4 bl 1003dda8 +10035c00: a80d add r0, sp, #52 ; 0x34 +10035c02: f7e4 fff9 bl 1001abf8 +10035c06: 4607 mov r7, r0 +10035c08: b100 cbz r0, 10035c0c +10035c0a: 1c47 adds r7, r0, #1 +10035c0c: 9b07 ldr r3, [sp, #28] +10035c0e: 4daf ldr r5, [pc, #700] ; (10035ecc ) +10035c10: 443b add r3, r7 +10035c12: 9307 str r3, [sp, #28] +10035c14: f04f 36ff mov.w r6, #4294967295 +10035c18: 3601 adds r6, #1 +10035c1a: 2e1c cmp r6, #28 +10035c1c: d009 beq.n 10035c32 +10035c1e: 4628 mov r0, r5 +10035c20: a90d add r1, sp, #52 ; 0x34 +10035c22: f7e4 ffe1 bl 1001abe8 +10035c26: f1a5 0a08 sub.w sl, r5, #8 +10035c2a: 3518 adds r5, #24 +10035c2c: 2800 cmp r0, #0 +10035c2e: d1f3 bne.n 10035c18 +10035c30: e0af b.n 10035d92 +10035c32: 2100 movs r1, #0 +10035c34: 9101 str r1, [sp, #4] +10035c36: 460d mov r5, r1 +10035c38: f06f 0a5e mvn.w sl, #94 ; 0x5e +10035c3c: 9802 ldr r0, [sp, #8] +10035c3e: 4649 mov r1, r9 +10035c40: f7e1 fbf3 bl 1001742a +10035c44: f04f 0800 mov.w r8, #0 +10035c48: 4646 mov r6, r8 +10035c4a: b11d cbz r5, 10035c54 +10035c4c: 4628 mov r0, r5 +10035c4e: 9901 ldr r1, [sp, #4] +10035c50: f7e1 fbeb bl 1001742a +10035c54: 2e00 cmp r6, #0 +10035c56: f000 82b0 beq.w 100361ba +10035c5a: 4630 mov r0, r6 +10035c5c: 4641 mov r1, r8 +10035c5e: f7e1 fbe4 bl 1001742a +10035c62: e2aa b.n 100361ba +10035c64: f06f 0a0b mvn.w sl, #11 +10035c68: e2a7 b.n 100361ba +10035c6a: f06f 0a5e mvn.w sl, #94 ; 0x5e +10035c6e: e2a4 b.n 100361ba +10035c70: f013 0f50 tst.w r3, #80 ; 0x50 +10035c74: f47f a9aa bne.w 10034fcc +10035c78: 2100 movs r1, #0 +10035c7a: 2206 movs r2, #6 +10035c7c: f7e1 fbe8 bl 10017450 +10035c80: e04c b.n 10035d1c +10035c82: 6fe2 ldr r2, [r4, #124] ; 0x7c +10035c84: f8d5 30f8 ldr.w r3, [r5, #248] ; 0xf8 +10035c88: 429a cmp r2, r3 +10035c8a: f47f aa01 bne.w 10035090 +10035c8e: f7ff ba18 b.w 100350c2 +10035c92: 4628 mov r0, r5 +10035c94: f7e6 ff16 bl 1001cac4 +10035c98: 4628 mov r0, r5 +10035c9a: f7e7 feda bl 1001da52 +10035c9e: 4628 mov r0, r5 +10035ca0: 2101 movs r1, #1 +10035ca2: f7e7 fe69 bl 1001d978 +10035ca6: f7ff ba81 b.w 100351ac +10035caa: f06f 0315 mvn.w r3, #21 +10035cae: 469a mov sl, r3 +10035cb0: f7ff bbcb b.w 1003544a +10035cb4: f06f 045e mvn.w r4, #94 ; 0x5e +10035cb8: 4630 mov r0, r6 +10035cba: 4649 mov r1, r9 +10035cbc: f7e1 fbb5 bl 1001742a +10035cc0: 46a2 mov sl, r4 +10035cc2: f7ff bbc2 b.w 1003544a +10035cc6: f013 0f60 tst.w r3, #96 ; 0x60 +10035cca: d001 beq.n 10035cd0 +10035ccc: 2301 movs r3, #1 +10035cce: e003 b.n 10035cd8 +10035cd0: f013 0310 ands.w r3, r3, #16 +10035cd4: d002 beq.n 10035cdc +10035cd6: 2303 movs r3, #3 +10035cd8: 6123 str r3, [r4, #16] +10035cda: e01f b.n 10035d1c +10035cdc: 6123 str r3, [r4, #16] +10035cde: e007 b.n 10035cf0 +10035ce0: 2201 movs r2, #1 +10035ce2: 6123 str r3, [r4, #16] +10035ce4: 7523 strb r3, [r4, #20] +10035ce6: 7562 strb r2, [r4, #21] +10035ce8: e002 b.n 10035cf0 +10035cea: f895 251e ldrb.w r2, [r5, #1310] ; 0x51e +10035cee: 75a2 strb r2, [r4, #22] +10035cf0: 469a mov sl, r3 +10035cf2: e262 b.n 100361ba +10035cf4: 4628 mov r0, r5 +10035cf6: f44f 6118 mov.w r1, #2432 ; 0x980 +10035cfa: f7e8 fc47 bl 1001e58c +10035cfe: 2801 cmp r0, #1 +10035d00: 4680 mov r8, r0 +10035d02: d10e bne.n 10035d22 +10035d04: 4628 mov r0, r5 +10035d06: f44f 6100 mov.w r1, #2048 ; 0x800 +10035d0a: f7e8 fc3f bl 1001e58c +10035d0e: b108 cbz r0, 10035d14 +10035d10: f885 8509 strb.w r8, [r5, #1289] ; 0x509 +10035d14: 4628 mov r0, r5 +10035d16: 2101 movs r1, #1 +10035d18: f7e7 feac bl 1001da74 +10035d1c: f04f 0a00 mov.w sl, #0 +10035d20: e24b b.n 100361ba +10035d22: 8ae3 ldrh r3, [r4, #22] +10035d24: 642e str r6, [r5, #64] ; 0x40 +10035d26: 0b1b lsrs r3, r3, #12 +10035d28: f8a5 361a strh.w r3, [r5, #1562] ; 0x61a +10035d2c: 8ae3 ldrh r3, [r4, #22] +10035d2e: f3c3 030b ubfx r3, r3, #0, #12 +10035d32: f8a5 304a strh.w r3, [r5, #74] ; 0x4a +10035d36: 8aa3 ldrh r3, [r4, #20] +10035d38: f8a5 7048 strh.w r7, [r5, #72] ; 0x48 +10035d3c: 646b str r3, [r5, #68] ; 0x44 +10035d3e: 8aa3 ldrh r3, [r4, #20] +10035d40: b90b cbnz r3, 10035d46 +10035d42: 2100 movs r1, #0 +10035d44: e018 b.n 10035d78 +10035d46: 2e00 cmp r6, #0 +10035d48: d0fb beq.n 10035d42 +10035d4a: 2204 movs r2, #4 +10035d4c: a80d add r0, sp, #52 ; 0x34 +10035d4e: 4631 mov r1, r6 +10035d50: f7e4 ff3e bl 1001abd0 +10035d54: 9a0d ldr r2, [sp, #52] ; 0x34 +10035d56: 1e53 subs r3, r2, #1 +10035d58: 2b1f cmp r3, #31 +10035d5a: d8f2 bhi.n 10035d42 +10035d5c: ac1c add r4, sp, #112 ; 0x70 +10035d5e: 1d31 adds r1, r6, #4 +10035d60: a813 add r0, sp, #76 ; 0x4c +10035d62: f844 2d28 str.w r2, [r4, #-40]! +10035d66: f7e4 ff33 bl 1001abd0 +10035d6a: 9a0d ldr r2, [sp, #52] ; 0x34 +10035d6c: 4639 mov r1, r7 +10035d6e: 4630 mov r0, r6 +10035d70: 3204 adds r2, #4 +10035d72: f7e4 ff31 bl 1001abd8 +10035d76: 4621 mov r1, r4 +10035d78: 4628 mov r0, r5 +10035d7a: 2201 movs r2, #1 +10035d7c: f002 f9ad bl 100380da +10035d80: f7ff b9b8 b.w 100350f4 +10035d84: 201e movs r0, #30 +10035d86: f7e1 fc75 bl 10017674 +10035d8a: 3e01 subs r6, #1 +10035d8c: f47f aca2 bne.w 100356d4 +10035d90: e4a5 b.n 100356de +10035d92: f8da 5000 ldr.w r5, [sl] +10035d96: f648 13ef movw r3, #35311 ; 0x89ef +10035d9a: 429d cmp r5, r3 +10035d9c: f240 81ea bls.w 10036174 +10035da0: 4682 mov sl, r0 +10035da2: 9004 str r0, [sp, #16] +10035da4: a80d add r0, sp, #52 ; 0x34 +10035da6: 494a ldr r1, [pc, #296] ; (10035ed0 ) +10035da8: f7e4 ff1e bl 1001abe8 +10035dac: b918 cbnz r0, 10035db6 +10035dae: f640 2128 movw r1, #2600 ; 0xa28 +10035db2: 9101 str r1, [sp, #4] +10035db4: e01c b.n 10035df0 +10035db6: a80d add r0, sp, #52 ; 0x34 +10035db8: 4946 ldr r1, [pc, #280] ; (10035ed4 ) +10035dba: f7e4 ff15 bl 1001abe8 +10035dbe: 2800 cmp r0, #0 +10035dc0: d0f5 beq.n 10035dae +10035dc2: a80d add r0, sp, #52 ; 0x34 +10035dc4: 4944 ldr r1, [pc, #272] ; (10035ed8 ) +10035dc6: f7e4 ff0f bl 1001abe8 +10035dca: 2800 cmp r0, #0 +10035dcc: d0ef beq.n 10035dae +10035dce: a80d add r0, sp, #52 ; 0x34 +10035dd0: 4942 ldr r1, [pc, #264] ; (10035edc ) +10035dd2: f7e4 ff09 bl 1001abe8 +10035dd6: 2800 cmp r0, #0 +10035dd8: d0e9 beq.n 10035dae +10035dda: a80d add r0, sp, #52 ; 0x34 +10035ddc: 4940 ldr r1, [pc, #256] ; (10035ee0 ) +10035dde: f7e4 ff03 bl 1001abe8 +10035de2: f640 2328 movw r3, #2600 ; 0xa28 +10035de6: 2800 cmp r0, #0 +10035de8: bf18 it ne +10035dea: f44f 6380 movne.w r3, #1024 ; 0x400 +10035dee: 9301 str r3, [sp, #4] +10035df0: 9801 ldr r0, [sp, #4] +10035df2: f7e1 fced bl 100177d0 +10035df6: 4605 mov r5, r0 +10035df8: 2800 cmp r0, #0 +10035dfa: f000 81d3 beq.w 100361a4 +10035dfe: 2318 movs r3, #24 +10035e00: 4373 muls r3, r6 +10035e02: ebc7 0709 rsb r7, r7, r9 +10035e06: 9703 str r7, [sp, #12] +10035e08: 4f36 ldr r7, [pc, #216] ; (10035ee4 ) +10035e0a: 9305 str r3, [sp, #20] +10035e0c: 441f add r7, r3 +10035e0e: 88ba ldrh r2, [r7, #4] +10035e10: f412 43e0 ands.w r3, r2, #28672 ; 0x7000 +10035e14: f000 808d beq.w 10035f32 +10035e18: f3c2 020a ubfx r2, r2, #0, #11 +10035e1c: 2a00 cmp r2, #0 +10035e1e: f000 8088 beq.w 10035f32 +10035e22: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 +10035e26: d061 beq.n 10035eec +10035e28: d806 bhi.n 10035e38 +10035e2a: f5b3 5f80 cmp.w r3, #4096 ; 0x1000 +10035e2e: f040 81bc bne.w 100361aa +10035e32: f04f 0b00 mov.w fp, #0 +10035e36: e009 b.n 10035e4c +10035e38: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 +10035e3c: d01e beq.n 10035e7c +10035e3e: f5b3 4fc0 cmp.w r3, #24576 ; 0x6000 +10035e42: f040 81b2 bne.w 100361aa +10035e46: f04f 0b00 mov.w fp, #0 +10035e4a: e067 b.n 10035f1c +10035e4c: a807 add r0, sp, #28 +10035e4e: a906 add r1, sp, #24 +10035e50: f7e4 fede bl 1001ac10 +10035e54: b148 cbz r0, 10035e6a +10035e56: aa08 add r2, sp, #32 +10035e58: 4923 ldr r1, [pc, #140] ; (10035ee8 ) +10035e5a: f007 ffa5 bl 1003dda8 +10035e5e: 9a08 ldr r2, [sp, #32] +10035e60: f805 200b strb.w r2, [r5, fp] +10035e64: f10b 0b01 add.w fp, fp, #1 +10035e68: e7f0 b.n 10035e4c +10035e6a: 88ba ldrh r2, [r7, #4] +10035e6c: fa1f f18b uxth.w r1, fp +10035e70: f3c2 020a ubfx r2, r2, #0, #11 +10035e74: f8ad b028 strh.w fp, [sp, #40] ; 0x28 +10035e78: 4291 cmp r1, r2 +10035e7a: e020 b.n 10035ebe +10035e7c: f04f 0c00 mov.w ip, #0 +10035e80: a807 add r0, sp, #28 +10035e82: a906 add r1, sp, #24 +10035e84: f8cd c000 str.w ip, [sp] +10035e88: f7e4 fec2 bl 1001ac10 +10035e8c: f8dd c000 ldr.w ip, [sp] +10035e90: b158 cbz r0, 10035eaa +10035e92: 4915 ldr r1, [pc, #84] ; (10035ee8 ) +10035e94: aa08 add r2, sp, #32 +10035e96: f007 ff87 bl 1003dda8 +10035e9a: f8dd c000 ldr.w ip, [sp] +10035e9e: 9b08 ldr r3, [sp, #32] +10035ea0: f845 302c str.w r3, [r5, ip, lsl #2] +10035ea4: f10c 0c01 add.w ip, ip, #1 +10035ea8: e7ea b.n 10035e80 +10035eaa: 88ba ldrh r2, [r7, #4] +10035eac: ea4f 0b8c mov.w fp, ip, lsl #2 +10035eb0: f8ad c028 strh.w ip, [sp, #40] ; 0x28 +10035eb4: f3c2 020a ubfx r2, r2, #0, #11 +10035eb8: fa1f fc8c uxth.w ip, ip +10035ebc: 4594 cmp ip, r2 +10035ebe: dd2d ble.n 10035f1c +10035ec0: f8ad 2028 strh.w r2, [sp, #40] ; 0x28 +10035ec4: e02a b.n 10035f1c +10035ec6: bf00 nop +10035ec8: 100422f3 .word 0x100422f3 +10035ecc: 10041dcc .word 0x10041dcc +10035ed0: 100422f8 .word 0x100422f8 +10035ed4: 10042303 .word 0x10042303 +10035ed8: 1004230e .word 0x1004230e +10035edc: 10042318 .word 0x10042318 +10035ee0: 10042322 .word 0x10042322 +10035ee4: 10041dc4 .word 0x10041dc4 +10035ee8: 10042329 .word 0x10042329 +10035eec: 9b03 ldr r3, [sp, #12] +10035eee: 2b00 cmp r3, #0 +10035ef0: dd0d ble.n 10035f0e +10035ef2: b29b uxth r3, r3 +10035ef4: 4293 cmp r3, r2 +10035ef6: bfd6 itet le +10035ef8: 9b03 ldrle r3, [sp, #12] +10035efa: f8ad 2028 strhgt.w r2, [sp, #40] ; 0x28 +10035efe: f8ad 3028 strhle.w r3, [sp, #40] ; 0x28 +10035f02: 9907 ldr r1, [sp, #28] +10035f04: f8bd 2028 ldrh.w r2, [sp, #40] ; 0x28 +10035f08: f7e1 fa92 bl 10017430 +10035f0c: e004 b.n 10035f18 +10035f0e: 2301 movs r3, #1 +10035f10: f8ad 3028 strh.w r3, [sp, #40] ; 0x28 +10035f14: 2300 movs r3, #0 +10035f16: 7003 strb r3, [r0, #0] +10035f18: f8bd b028 ldrh.w fp, [sp, #40] ; 0x28 +10035f1c: 88ba ldrh r2, [r7, #4] +10035f1e: 0510 lsls r0, r2, #20 +10035f20: d50b bpl.n 10035f3a +10035f22: f8bd 1028 ldrh.w r1, [sp, #40] ; 0x28 +10035f26: f3c2 020a ubfx r2, r2, #0, #11 +10035f2a: 4291 cmp r1, r2 +10035f2c: f040 8140 bne.w 100361b0 +10035f30: e003 b.n 10035f3a +10035f32: 2300 movs r3, #0 +10035f34: f8ad 3028 strh.w r3, [sp, #40] ; 0x28 +10035f38: 469b mov fp, r3 +10035f3a: 88ba ldrh r2, [r7, #4] +10035f3c: 0511 lsls r1, r2, #20 +10035f3e: d512 bpl.n 10035f66 +10035f40: 4610 mov r0, r2 +10035f42: 9200 str r2, [sp, #0] +10035f44: f7fd f9ee bl 10033324 +10035f48: 4450 add r0, sl +10035f4a: 2810 cmp r0, #16 +10035f4c: 9a00 ldr r2, [sp, #0] +10035f4e: dc0a bgt.n 10035f66 +10035f50: f1ba 0f00 cmp.w sl, #0 +10035f54: d001 beq.n 10035f5a +10035f56: 9b04 ldr r3, [sp, #16] +10035f58: 9309 str r3, [sp, #36] ; 0x24 +10035f5a: a809 add r0, sp, #36 ; 0x24 +10035f5c: 4450 add r0, sl +10035f5e: 4629 mov r1, r5 +10035f60: f1ca 0210 rsb r2, sl, #16 +10035f64: e007 b.n 10035f76 +10035f66: f402 41c0 and.w r1, r2, #24576 ; 0x6000 +10035f6a: f5b1 4fc0 cmp.w r1, #24576 ; 0x6000 +10035f6e: d105 bne.n 10035f7c +10035f70: 9809 ldr r0, [sp, #36] ; 0x24 +10035f72: 9907 ldr r1, [sp, #28] +10035f74: 9a03 ldr r2, [sp, #12] +10035f76: f7e1 fa5b bl 10017430 +10035f7a: e019 b.n 10035fb0 +10035f7c: b962 cbnz r2, 10035f98 +10035f7e: 88f8 ldrh r0, [r7, #6] +10035f80: 0502 lsls r2, r0, #20 +10035f82: d509 bpl.n 10035f98 +10035f84: f7fd f9ce bl 10033324 +10035f88: 2810 cmp r0, #16 +10035f8a: dc05 bgt.n 10035f98 +10035f8c: f1ba 0f00 cmp.w sl, #0 +10035f90: d00e beq.n 10035fb0 +10035f92: 9b04 ldr r3, [sp, #16] +10035f94: 9309 str r3, [sp, #36] ; 0x24 +10035f96: e00b b.n 10035fb0 +10035f98: 45cb cmp fp, r9 +10035f9a: 9809 ldr r0, [sp, #36] ; 0x24 +10035f9c: 4629 mov r1, r5 +10035f9e: bf8c ite hi +10035fa0: f109 32ff addhi.w r2, r9, #4294967295 +10035fa4: 465a movls r2, fp +10035fa6: f7e1 fa43 bl 10017430 +10035faa: 9b04 ldr r3, [sp, #16] +10035fac: f8ad 302a strh.w r3, [sp, #42] ; 0x2a +10035fb0: 4649 mov r1, r9 +10035fb2: 9802 ldr r0, [sp, #8] +10035fb4: f7e1 fa39 bl 1001742a +10035fb8: 4a82 ldr r2, [pc, #520] ; (100361c4 ) +10035fba: 9905 ldr r1, [sp, #20] +10035fbc: 5853 ldr r3, [r2, r1] +10035fbe: 07db lsls r3, r3, #31 +10035fc0: d40d bmi.n 10035fde +10035fc2: f8b7 b004 ldrh.w fp, [r7, #4] +10035fc6: 4658 mov r0, fp +10035fc8: f7fd f9ac bl 10033324 +10035fcc: f41b 6f00 tst.w fp, #2048 ; 0x800 +10035fd0: 4603 mov r3, r0 +10035fd2: d010 beq.n 10035ff6 +10035fd4: 4482 add sl, r0 +10035fd6: f1ba 0f10 cmp.w sl, #16 +10035fda: d90d bls.n 10035ff8 +10035fdc: e00b b.n 10035ff6 +10035fde: f8b7 a006 ldrh.w sl, [r7, #6] +10035fe2: 4650 mov r0, sl +10035fe4: f7fd f99e bl 10033324 +10035fe8: f41a 6f00 tst.w sl, #2048 ; 0x800 +10035fec: 4603 mov r3, r0 +10035fee: d002 beq.n 10035ff6 +10035ff0: 2810 cmp r0, #16 +10035ff2: d901 bls.n 10035ff8 +10035ff4: e008 b.n 10036008 +10035ff6: b93b cbnz r3, 10036008 +10035ff8: 4628 mov r0, r5 +10035ffa: 9901 ldr r1, [sp, #4] +10035ffc: f7e1 fa15 bl 1001742a +10036000: 2300 movs r3, #0 +10036002: ad09 add r5, sp, #36 ; 0x24 +10036004: 9302 str r3, [sp, #8] +10036006: e000 b.n 1003600a +10036008: 9502 str r5, [sp, #8] +1003600a: 4b6f ldr r3, [pc, #444] ; (100361c8 ) +1003600c: 4640 mov r0, r8 +1003600e: f853 6026 ldr.w r6, [r3, r6, lsl #2] +10036012: 2100 movs r1, #0 +10036014: aa09 add r2, sp, #36 ; 0x24 +10036016: 462b mov r3, r5 +10036018: 47b0 blx r6 +1003601a: f8b7 8006 ldrh.w r8, [r7, #6] +1003601e: 4682 mov sl, r0 +10036020: f418 4fe0 tst.w r8, #28672 ; 0x7000 +10036024: f000 80a0 beq.w 10036168 +10036028: f3c8 060a ubfx r6, r8, #0, #11 +1003602c: 2e00 cmp r6, #0 +1003602e: f000 809b beq.w 10036168 +10036032: a812 add r0, sp, #72 ; 0x48 +10036034: 2100 movs r1, #0 +10036036: 2214 movs r2, #20 +10036038: f007 fdf4 bl 1003dc24 +1003603c: f418 6f00 tst.w r8, #2048 ; 0x800 +10036040: d006 beq.n 10036050 +10036042: 4640 mov r0, r8 +10036044: f7fd f96e bl 10033324 +10036048: 2810 cmp r0, #16 +1003604a: dc01 bgt.n 10036050 +1003604c: 46b3 mov fp, r6 +1003604e: e001 b.n 10036054 +10036050: f8bd b028 ldrh.w fp, [sp, #40] ; 0x28 +10036054: a80d add r0, sp, #52 ; 0x34 +10036056: 495d ldr r1, [pc, #372] ; (100361cc ) +10036058: f7e4 fdc6 bl 1001abe8 +1003605c: b910 cbnz r0, 10036064 +1003605e: f640 2828 movw r8, #2600 ; 0xa28 +10036062: e01b b.n 1003609c +10036064: a80d add r0, sp, #52 ; 0x34 +10036066: 495a ldr r1, [pc, #360] ; (100361d0 ) +10036068: f7e4 fdbe bl 1001abe8 +1003606c: 2800 cmp r0, #0 +1003606e: d0f6 beq.n 1003605e +10036070: a80d add r0, sp, #52 ; 0x34 +10036072: 4958 ldr r1, [pc, #352] ; (100361d4 ) +10036074: f7e4 fdb8 bl 1001abe8 +10036078: 2800 cmp r0, #0 +1003607a: d0f0 beq.n 1003605e +1003607c: a80d add r0, sp, #52 ; 0x34 +1003607e: 4956 ldr r1, [pc, #344] ; (100361d8 ) +10036080: f7e4 fdb2 bl 1001abe8 +10036084: 2800 cmp r0, #0 +10036086: d0ea beq.n 1003605e +10036088: a80d add r0, sp, #52 ; 0x34 +1003608a: 4954 ldr r1, [pc, #336] ; (100361dc ) +1003608c: f7e4 fdac bl 1001abe8 +10036090: f640 2828 movw r8, #2600 ; 0xa28 +10036094: 2800 cmp r0, #0 +10036096: bf18 it ne +10036098: f44f 6880 movne.w r8, #1024 ; 0x400 +1003609c: 4640 mov r0, r8 +1003609e: f7e1 fb97 bl 100177d0 +100360a2: 4606 mov r6, r0 +100360a4: 2800 cmp r0, #0 +100360a6: d059 beq.n 1003615c +100360a8: 88fa ldrh r2, [r7, #6] +100360aa: f402 42e0 and.w r2, r2, #28672 ; 0x7000 +100360ae: f5b2 5f00 cmp.w r2, #8192 ; 0x2000 +100360b2: d041 beq.n 10036138 +100360b4: f5b2 4f80 cmp.w r2, #16384 ; 0x4000 +100360b8: d004 beq.n 100360c4 +100360ba: f5b2 5f80 cmp.w r2, #4096 ; 0x1000 +100360be: d150 bne.n 10036162 +100360c0: 2700 movs r7, #0 +100360c2: e018 b.n 100360f6 +100360c4: 2700 movs r7, #0 +100360c6: e034 b.n 10036132 +100360c8: 4945 ldr r1, [pc, #276] ; (100361e0 ) +100360ca: 5dea ldrb r2, [r5, r7] +100360cc: a812 add r0, sp, #72 ; 0x48 +100360ce: f7e4 fd31 bl 1001ab34 +100360d2: a812 add r0, sp, #72 ; 0x48 +100360d4: f7e4 fd90 bl 1001abf8 +100360d8: 4602 mov r2, r0 +100360da: 4630 mov r0, r6 +100360dc: 9200 str r2, [sp, #0] +100360de: f7e4 fd8b bl 1001abf8 +100360e2: 9a00 ldr r2, [sp, #0] +100360e4: 1811 adds r1, r2, r0 +100360e6: 3101 adds r1, #1 +100360e8: 4541 cmp r1, r8 +100360ea: d807 bhi.n 100360fc +100360ec: 4430 add r0, r6 +100360ee: a912 add r1, sp, #72 ; 0x48 +100360f0: f7e1 f99e bl 10017430 +100360f4: 3701 adds r7, #1 +100360f6: 455f cmp r7, fp +100360f8: dbe6 blt.n 100360c8 +100360fa: e021 b.n 10036140 +100360fc: f06f 0a06 mvn.w sl, #6 +10036100: e059 b.n 100361b6 +10036102: 4937 ldr r1, [pc, #220] ; (100361e0 ) +10036104: f855 2027 ldr.w r2, [r5, r7, lsl #2] +10036108: a812 add r0, sp, #72 ; 0x48 +1003610a: f7e4 fd13 bl 1001ab34 +1003610e: a812 add r0, sp, #72 ; 0x48 +10036110: f7e4 fd72 bl 1001abf8 +10036114: 4602 mov r2, r0 +10036116: 4630 mov r0, r6 +10036118: 9200 str r2, [sp, #0] +1003611a: f7e4 fd6d bl 1001abf8 +1003611e: 9a00 ldr r2, [sp, #0] +10036120: 1811 adds r1, r2, r0 +10036122: 3101 adds r1, #1 +10036124: 4541 cmp r1, r8 +10036126: d8e9 bhi.n 100360fc +10036128: 4430 add r0, r6 +1003612a: a912 add r1, sp, #72 ; 0x48 +1003612c: f7e1 f980 bl 10017430 +10036130: 3701 adds r7, #1 +10036132: 455f cmp r7, fp +10036134: dbe5 blt.n 10036102 +10036136: e003 b.n 10036140 +10036138: 4629 mov r1, r5 +1003613a: 465a mov r2, fp +1003613c: f7e1 f978 bl 10017430 +10036140: 4630 mov r0, r6 +10036142: f7e4 fd59 bl 1001abf8 +10036146: 1c42 adds r2, r0, #1 +10036148: 454a cmp r2, r9 +1003614a: 82a2 strh r2, [r4, #20] +1003614c: 6920 ldr r0, [r4, #16] +1003614e: 4631 mov r1, r6 +10036150: bf88 it hi +10036152: f109 32ff addhi.w r2, r9, #4294967295 +10036156: f7e1 f96b bl 10017430 +1003615a: e02c b.n 100361b6 +1003615c: f06f 0a0b mvn.w sl, #11 +10036160: e029 b.n 100361b6 +10036162: f04f 3aff mov.w sl, #4294967295 +10036166: e026 b.n 100361b6 +10036168: f04f 0800 mov.w r8, #0 +1003616c: f8a4 8014 strh.w r8, [r4, #20] +10036170: 4646 mov r6, r8 +10036172: e020 b.n 100361b6 +10036174: 4b13 ldr r3, [pc, #76] ; (100361c4 ) +10036176: f04f 36ff mov.w r6, #4294967295 +1003617a: 3601 adds r6, #1 +1003617c: 2e1c cmp r6, #28 +1003617e: d00d beq.n 1003619c +10036180: f993 2008 ldrsb.w r2, [r3, #8] +10036184: b10a cbz r2, 1003618a +10036186: 3318 adds r3, #24 +10036188: e7f7 b.n 1003617a +1003618a: 6859 ldr r1, [r3, #4] +1003618c: f8da 2004 ldr.w r2, [sl, #4] +10036190: 4291 cmp r1, r2 +10036192: d1f8 bne.n 10036186 +10036194: 9504 str r5, [sp, #16] +10036196: f04f 0a04 mov.w sl, #4 +1003619a: e603 b.n 10035da4 +1003619c: 2200 movs r2, #0 +1003619e: 9201 str r2, [sp, #4] +100361a0: 4615 mov r5, r2 +100361a2: e005 b.n 100361b0 +100361a4: f06f 0a0b mvn.w sl, #11 +100361a8: e548 b.n 10035c3c +100361aa: f04f 3aff mov.w sl, #4294967295 +100361ae: e545 b.n 10035c3c +100361b0: f06f 0a15 mvn.w sl, #21 +100361b4: e542 b.n 10035c3c +100361b6: 9d02 ldr r5, [sp, #8] +100361b8: e547 b.n 10035c4a +100361ba: 4650 mov r0, sl +100361bc: b01d add sp, #116 ; 0x74 +100361be: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +100361c2: bf00 nop +100361c4: 10041dc4 .word 0x10041dc4 +100361c8: 10041d78 .word 0x10041d78 +100361cc: 100422f8 .word 0x100422f8 +100361d0: 10042303 .word 0x10042303 +100361d4: 1004230e .word 0x1004230e +100361d8: 10042318 .word 0x10042318 +100361dc: 10042322 .word 0x10042322 +100361e0: 1004232c .word 0x1004232c + +100361e4 : +100361e4: 2001 movs r0, #1 +100361e6: 4770 bx lr + +100361e8 : +100361e8: 2300 movs r3, #0 +100361ea: 608b str r3, [r1, #8] +100361ec: 60cb str r3, [r1, #12] +100361ee: 2001 movs r0, #1 +100361f0: 4770 bx lr + +100361f2 : +100361f2: 4770 bx lr + +100361f4 : +100361f4: b570 push {r4, r5, r6, lr} +100361f6: b08a sub sp, #40 ; 0x28 +100361f8: 2100 movs r1, #0 +100361fa: 2601 movs r6, #1 +100361fc: 2220 movs r2, #32 +100361fe: 4604 mov r4, r0 +10036200: a802 add r0, sp, #8 +10036202: f88d 1000 strb.w r1, [sp] +10036206: f88d 1001 strb.w r1, [sp, #1] +1003620a: f88d 1002 strb.w r1, [sp, #2] +1003620e: f88d 1003 strb.w r1, [sp, #3] +10036212: f88d 1004 strb.w r1, [sp, #4] +10036216: f88d 6005 strb.w r6, [sp, #5] +1003621a: f7e4 fcdd bl 1001abd8 +1003621e: f10d 001a add.w r0, sp, #26 +10036222: 4669 mov r1, sp +10036224: 2206 movs r2, #6 +10036226: f88d 6019 strb.w r6, [sp, #25] +1003622a: f7e4 fcd1 bl 1001abd0 +1003622e: 4b16 ldr r3, [pc, #88] ; (10036288 ) +10036230: 6818 ldr r0, [r3, #0] +10036232: b318 cbz r0, 1003627c +10036234: a902 add r1, sp, #8 +10036236: f648 3214 movw r2, #35604 ; 0x8b14 +1003623a: f7fe fd9d bl 10034d78 +1003623e: f894 38f9 ldrb.w r3, [r4, #2297] ; 0x8f9 +10036242: 4605 mov r5, r0 +10036244: b1eb cbz r3, 10036282 +10036246: f894 286e ldrb.w r2, [r4, #2158] ; 0x86e +1003624a: f894 386d ldrb.w r3, [r4, #2157] ; 0x86d +1003624e: 429a cmp r2, r3 +10036250: d20f bcs.n 10036272 +10036252: 4b0e ldr r3, [pc, #56] ; (1003628c ) +10036254: 781a ldrb r2, [r3, #0] +10036256: b9a2 cbnz r2, 10036282 +10036258: f504 6006 add.w r0, r4, #2144 ; 0x860 +1003625c: f64e 2160 movw r1, #60000 ; 0xea60 +10036260: 701e strb r6, [r3, #0] +10036262: f000 fde9 bl 10036e38 +10036266: f894 386e ldrb.w r3, [r4, #2158] ; 0x86e +1003626a: 4433 add r3, r6 +1003626c: f884 386e strb.w r3, [r4, #2158] ; 0x86e +10036270: e007 b.n 10036282 +10036272: 4620 mov r0, r4 +10036274: 4906 ldr r1, [pc, #24] ; (10036290 ) +10036276: f7fd fc70 bl 10033b5a +1003627a: e002 b.n 10036282 +1003627c: f04f 30ff mov.w r0, #4294967295 +10036280: e000 b.n 10036284 +10036282: 4628 mov r0, r5 +10036284: b00a add sp, #40 ; 0x28 +10036286: bd70 pop {r4, r5, r6, pc} +10036288: 1004e03c .word 0x1004e03c +1003628c: 1004bb90 .word 0x1004bb90 +10036290: 1003fc5d .word 0x1003fc5d + +10036294 : +10036294: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10036298: b08c sub sp, #48 ; 0x30 +1003629a: 4604 mov r4, r0 +1003629c: 460f mov r7, r1 +1003629e: f241 1590 movw r5, #4496 ; 0x1190 +100362a2: f7ef fe09 bl 10025eb8 +100362a6: 2064 movs r0, #100 ; 0x64 +100362a8: f7e1 f9e4 bl 10017674 +100362ac: 5963 ldr r3, [r4, r5] +100362ae: b1bb cbz r3, 100362e0 +100362b0: f7e1 f9a6 bl 10017600 +100362b4: 5963 ldr r3, [r4, r5] +100362b6: 4606 mov r6, r0 +100362b8: ebc3 0800 rsb r8, r3, r0 +100362bc: 203c movs r0, #60 ; 0x3c +100362be: f7e1 f9c5 bl 1001764c +100362c2: 4580 cmp r8, r0 +100362c4: d20c bcs.n 100362e0 +100362c6: 2201 movs r2, #1 +100362c8: f241 1394 movw r3, #4500 ; 0x1194 +100362cc: 54e2 strb r2, [r4, r3] +100362ce: 2300 movs r3, #0 +100362d0: 5163 str r3, [r4, r5] +100362d2: f241 1398 movw r3, #4504 ; 0x1198 +100362d6: 50e6 str r6, [r4, r3] +100362d8: 4620 mov r0, r4 +100362da: f7ff ff8b bl 100361f4 +100362de: e002 b.n 100362e6 +100362e0: f7e1 f98e bl 10017600 +100362e4: 5160 str r0, [r4, r5] +100362e6: a805 add r0, sp, #20 +100362e8: 2100 movs r1, #0 +100362ea: 221c movs r2, #28 +100362ec: f7e1 f8b0 bl 10017450 +100362f0: 9b05 ldr r3, [sp, #20] +100362f2: b117 cbz r7, 100362fa +100362f4: f043 0304 orr.w r3, r3, #4 +100362f8: e001 b.n 100362fe +100362fa: f043 0308 orr.w r3, r3, #8 +100362fe: 9305 str r3, [sp, #20] +10036300: f10d 001a add.w r0, sp, #26 +10036304: 2301 movs r3, #1 +10036306: f104 0174 add.w r1, r4, #116 ; 0x74 +1003630a: 2206 movs r2, #6 +1003630c: f88d 3019 strb.w r3, [sp, #25] +10036310: f7e1 f88e bl 10017430 +10036314: a801 add r0, sp, #4 +10036316: 2100 movs r1, #0 +10036318: 2210 movs r2, #16 +1003631a: f7e1 f899 bl 10017450 +1003631e: 231c movs r3, #28 +10036320: f8ad 3008 strh.w r3, [sp, #8] +10036324: f641 0334 movw r3, #6196 ; 0x1834 +10036328: 58e0 ldr r0, [r4, r3] +1003632a: f648 4106 movw r1, #35846 ; 0x8c06 +1003632e: aa01 add r2, sp, #4 +10036330: ab05 add r3, sp, #20 +10036332: f7fd fc0d bl 10033b50 +10036336: b00c add sp, #48 ; 0x30 +10036338: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1003633c : +1003633c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10036340: 688d ldr r5, [r1, #8] +10036342: 4604 mov r4, r0 +10036344: 460e mov r6, r1 +10036346: f600 3954 addw r9, r0, #2900 ; 0xb54 +1003634a: 2d00 cmp r5, #0 +1003634c: f000 80d6 beq.w 100364fc +10036350: 6f8b ldr r3, [r1, #120] ; 0x78 +10036352: 4628 mov r0, r5 +10036354: 612b str r3, [r5, #16] +10036356: 6f09 ldr r1, [r1, #112] ; 0x70 +10036358: f000 fa87 bl 1003686a +1003635c: 6f33 ldr r3, [r6, #112] ; 0x70 +1003635e: 622b str r3, [r5, #32] +10036360: 6923 ldr r3, [r4, #16] +10036362: 06d9 lsls r1, r3, #27 +10036364: d515 bpl.n 10036392 +10036366: 46b0 mov r8, r6 +10036368: f818 7f36 ldrb.w r7, [r8, #54]! +1003636c: f504 51a4 add.w r1, r4, #5248 ; 0x1480 +10036370: 4640 mov r0, r8 +10036372: 3119 adds r1, #25 +10036374: 2206 movs r2, #6 +10036376: f7e1 f863 bl 10017440 +1003637a: b950 cbnz r0, 10036392 +1003637c: f241 73c9 movw r3, #6089 ; 0x17c9 +10036380: 5ce3 ldrb r3, [r4, r3] +10036382: f007 0701 and.w r7, r7, #1 +10036386: 2b00 cmp r3, #0 +10036388: f000 80bf beq.w 1003650a +1003638c: 2f00 cmp r7, #0 +1003638e: f000 80b5 beq.w 100364fc +10036392: f641 0334 movw r3, #6196 ; 0x1834 +10036396: 58e3 ldr r3, [r4, r3] +10036398: 61eb str r3, [r5, #28] +1003639a: 692b ldr r3, [r5, #16] +1003639c: 8998 ldrh r0, [r3, #12] +1003639e: f7e1 f801 bl 100173a4 <_htons> +100363a2: f648 038e movw r3, #34958 ; 0x888e +100363a6: 4298 cmp r0, r3 +100363a8: 692b ldr r3, [r5, #16] +100363aa: d116 bne.n 100363da +100363ac: f241 3285 movw r2, #4997 ; 0x1385 +100363b0: 5ca2 ldrb r2, [r4, r2] +100363b2: b192 cbz r2, 100363da +100363b4: 7bda ldrb r2, [r3, #15] +100363b6: 2a03 cmp r2, #3 +100363b8: d00f beq.n 100363da +100363ba: f504 6046 add.w r0, r4, #3168 ; 0xc60 +100363be: f106 0142 add.w r1, r6, #66 ; 0x42 +100363c2: f7f1 ff77 bl 100282b4 +100363c6: 2800 cmp r0, #0 +100363c8: f000 8098 beq.w 100364fc +100363cc: 6929 ldr r1, [r5, #16] +100363ce: 6a2a ldr r2, [r5, #32] +100363d0: 2300 movs r3, #0 +100363d2: 200d movs r0, #13 +100363d4: f7d7 f8ca bl 1000d56c +100363d8: e090 b.n 100364fc +100363da: 8998 ldrh r0, [r3, #12] +100363dc: f7e0 ffe2 bl 100173a4 <_htons> +100363e0: f648 038e movw r3, #34958 ; 0x888e +100363e4: 4298 cmp r0, r3 +100363e6: d148 bne.n 1003647a +100363e8: f241 036c movw r3, #4204 ; 0x106c +100363ec: 58e3 ldr r3, [r4, r3] +100363ee: 2b03 cmp r3, #3 +100363f0: d001 beq.n 100363f6 +100363f2: 2b06 cmp r3, #6 +100363f4: d141 bne.n 1003647a +100363f6: f504 6046 add.w r0, r4, #3168 ; 0xc60 +100363fa: f106 0142 add.w r1, r6, #66 ; 0x42 +100363fe: f8d5 a010 ldr.w sl, [r5, #16] +10036402: f7f1 ff57 bl 100282b4 +10036406: 4680 mov r8, r0 +10036408: 2800 cmp r0, #0 +1003640a: d077 beq.n 100364fc +1003640c: 6923 ldr r3, [r4, #16] +1003640e: 06da lsls r2, r3, #27 +10036410: f140 80a5 bpl.w 1003655e +10036414: f8d0 20fc ldr.w r2, [r0, #252] ; 0xfc +10036418: f202 128b addw r2, r2, #395 ; 0x18b +1003641c: eb04 0282 add.w r2, r4, r2, lsl #2 +10036420: f8d2 7d08 ldr.w r7, [r2, #3336] ; 0xd08 +10036424: 2f00 cmp r7, #0 +10036426: d069 beq.n 100364fc +10036428: f89a 200f ldrb.w r2, [sl, #15] +1003642c: 2a03 cmp r2, #3 +1003642e: d00b beq.n 10036448 +10036430: 2300 movs r3, #0 +10036432: 200d movs r0, #13 +10036434: 6929 ldr r1, [r5, #16] +10036436: 6a2a ldr r2, [r5, #32] +10036438: f7d7 f898 bl 1000d56c +1003643c: 2300 movs r3, #0 +1003643e: f8c7 3310 str.w r3, [r7, #784] ; 0x310 +10036442: f8c7 3314 str.w r3, [r7, #788] ; 0x314 +10036446: e059 b.n 100364fc +10036448: 071b lsls r3, r3, #28 +1003644a: d50d bpl.n 10036468 +1003644c: f8d7 3310 ldr.w r3, [r7, #784] ; 0x310 +10036450: b953 cbnz r3, 10036468 +10036452: f8d7 3314 ldr.w r3, [r7, #788] ; 0x314 +10036456: b93b cbnz r3, 10036468 +10036458: f44f 70fa mov.w r0, #500 ; 0x1f4 +1003645c: f7e1 f90a bl 10017674 +10036460: 4620 mov r0, r4 +10036462: 4641 mov r1, r8 +10036464: f7ee fa44 bl 100248f0 +10036468: 692b ldr r3, [r5, #16] +1003646a: 4620 mov r0, r4 +1003646c: f8c7 30d4 str.w r3, [r7, #212] ; 0xd4 +10036470: 6a2b ldr r3, [r5, #32] +10036472: 4641 mov r1, r8 +10036474: f8c7 30d8 str.w r3, [r7, #216] ; 0xd8 +10036478: e03e b.n 100364f8 +1003647a: f241 036c movw r3, #4204 ; 0x106c +1003647e: 58e3 ldr r3, [r4, r3] +10036480: 2b04 cmp r3, #4 +10036482: d001 beq.n 10036488 +10036484: 2b07 cmp r3, #7 +10036486: d128 bne.n 100364da +10036488: 692b ldr r3, [r5, #16] +1003648a: 8998 ldrh r0, [r3, #12] +1003648c: f7e0 ff8a bl 100173a4 <_htons> +10036490: f648 038e movw r3, #34958 ; 0x888e +10036494: 4298 cmp r0, r3 +10036496: d120 bne.n 100364da +10036498: f106 0142 add.w r1, r6, #66 ; 0x42 +1003649c: f504 6046 add.w r0, r4, #3168 ; 0xc60 +100364a0: f7f1 ff08 bl 100282b4 +100364a4: 4601 mov r1, r0 +100364a6: b348 cbz r0, 100364fc +100364a8: 6923 ldr r3, [r4, #16] +100364aa: 06df lsls r7, r3, #27 +100364ac: d55d bpl.n 1003656a +100364ae: f8d0 30fc ldr.w r3, [r0, #252] ; 0xfc +100364b2: f203 138b addw r3, r3, #395 ; 0x18b +100364b6: eb04 0383 add.w r3, r4, r3, lsl #2 +100364ba: f8d3 3d08 ldr.w r3, [r3, #3336] ; 0xd08 +100364be: b1eb cbz r3, 100364fc +100364c0: 692a ldr r2, [r5, #16] +100364c2: f8c3 20d4 str.w r2, [r3, #212] ; 0xd4 +100364c6: 6a2a ldr r2, [r5, #32] +100364c8: f8c3 20d8 str.w r2, [r3, #216] ; 0xd8 +100364cc: 6923 ldr r3, [r4, #16] +100364ce: 06d8 lsls r0, r3, #27 +100364d0: d50f bpl.n 100364f2 +100364d2: 4620 mov r0, r4 +100364d4: f7ef f8ce bl 10025674 +100364d8: e010 b.n 100364fc +100364da: 4628 mov r0, r5 +100364dc: f000 fdde bl 1003709c +100364e0: 2300 movs r3, #0 +100364e2: 60b3 str r3, [r6, #8] +100364e4: 4630 mov r0, r6 +100364e6: 4649 mov r1, r9 +100364e8: f7f0 fa24 bl 10026934 +100364ec: 2001 movs r0, #1 +100364ee: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +100364f2: 071b lsls r3, r3, #28 +100364f4: d502 bpl.n 100364fc +100364f6: 4620 mov r0, r4 +100364f8: f7ef f980 bl 100257fc +100364fc: 4630 mov r0, r6 +100364fe: 4649 mov r1, r9 +10036500: f7f0 fa18 bl 10026934 +10036504: 2000 movs r0, #0 +10036506: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1003650a: f8d4 3ca4 ldr.w r3, [r4, #3236] ; 0xca4 +1003650e: 2b03 cmp r3, #3 +10036510: f77f af3c ble.w 1003638c +10036514: b167 cbz r7, 10036530 +10036516: 4620 mov r0, r4 +10036518: f7f1 ff22 bl 10028360 +1003651c: 2800 cmp r0, #0 +1003651e: f43f af38 beq.w 10036392 +10036522: 4628 mov r0, r5 +10036524: 2101 movs r1, #1 +10036526: 224a movs r2, #74 ; 0x4a +10036528: f000 f9af bl 1003688a +1003652c: 4680 mov r8, r0 +1003652e: e008 b.n 10036542 +10036530: f504 6046 add.w r0, r4, #3168 ; 0xc60 +10036534: 4641 mov r1, r8 +10036536: f7f1 febd bl 100282b4 +1003653a: 2800 cmp r0, #0 +1003653c: f43f af29 beq.w 10036392 +10036540: 46b8 mov r8, r7 +10036542: f641 0334 movw r3, #6196 ; 0x1834 +10036546: 58e1 ldr r1, [r4, r3] +10036548: 4628 mov r0, r5 +1003654a: 61e9 str r1, [r5, #28] +1003654c: f000 fa0a bl 10036964 +10036550: 2f00 cmp r7, #0 +10036552: d0c5 beq.n 100364e0 +10036554: f1b8 0f00 cmp.w r8, #0 +10036558: d0c2 beq.n 100364e0 +1003655a: 4645 mov r5, r8 +1003655c: e719 b.n 10036392 +1003655e: 0719 lsls r1, r3, #28 +10036560: d5cc bpl.n 100364fc +10036562: f241 3238 movw r2, #4920 ; 0x1338 +10036566: 58a7 ldr r7, [r4, r2] +10036568: e75c b.n 10036424 +1003656a: 071a lsls r2, r3, #28 +1003656c: d5c6 bpl.n 100364fc +1003656e: f241 3338 movw r3, #4920 ; 0x1338 +10036572: 58e3 ldr r3, [r4, r3] +10036574: e7a3 b.n 100364be + ... + +10036578 : +10036578: b508 push {r3, lr} +1003657a: f7e0 ff06 bl 1001738a +1003657e: 4b04 ldr r3, [pc, #16] ; (10036590 ) +10036580: 681a ldr r2, [r3, #0] +10036582: 3201 adds r2, #1 +10036584: 601a str r2, [r3, #0] +10036586: e8bd 4008 ldmia.w sp!, {r3, lr} +1003658a: f7e0 bf00 b.w 1001738e +1003658e: bf00 nop +10036590: 1004e030 .word 0x1004e030 + +10036594 : +10036594: b510 push {r4, lr} +10036596: f7e0 fef8 bl 1001738a +1003659a: 4b04 ldr r3, [pc, #16] ; (100365ac ) +1003659c: 2200 movs r2, #0 +1003659e: 681c ldr r4, [r3, #0] +100365a0: 601a str r2, [r3, #0] +100365a2: f7e0 fef4 bl 1001738e +100365a6: 4620 mov r0, r4 +100365a8: bd10 pop {r4, pc} +100365aa: bf00 nop +100365ac: 1004e030 .word 0x1004e030 + +100365b0 : +100365b0: b538 push {r3, r4, r5, lr} +100365b2: 4c11 ldr r4, [pc, #68] ; (100365f8 ) +100365b4: 2230 movs r2, #48 ; 0x30 +100365b6: 6823 ldr r3, [r4, #0] +100365b8: 2100 movs r1, #0 +100365ba: 435a muls r2, r3 +100365bc: 480f ldr r0, [pc, #60] ; (100365fc ) +100365be: f7e4 fb0b bl 1001abd8 +100365c2: 4b0f ldr r3, [pc, #60] ; (10036600 ) +100365c4: 4a0d ldr r2, [pc, #52] ; (100365fc ) +100365c6: 6825 ldr r5, [r4, #0] +100365c8: 601b str r3, [r3, #0] +100365ca: 2100 movs r1, #0 +100365cc: 461c mov r4, r3 +100365ce: 42a9 cmp r1, r5 +100365d0: f102 0030 add.w r0, r2, #48 ; 0x30 +100365d4: da08 bge.n 100365e8 +100365d6: f840 3c2c str.w r3, [r0, #-44] +100365da: f840 4c30 str.w r4, [r0, #-48] +100365de: 3101 adds r1, #1 +100365e0: 601a str r2, [r3, #0] +100365e2: 4613 mov r3, r2 +100365e4: 4602 mov r2, r0 +100365e6: e7f2 b.n 100365ce +100365e8: 4a06 ldr r2, [pc, #24] ; (10036604 ) +100365ea: 6063 str r3, [r4, #4] +100365ec: 2300 movs r3, #0 +100365ee: 6013 str r3, [r2, #0] +100365f0: 4a05 ldr r2, [pc, #20] ; (10036608 ) +100365f2: 6013 str r3, [r2, #0] +100365f4: bd38 pop {r3, r4, r5, pc} +100365f6: bf00 nop +100365f8: 10044fc0 .word 0x10044fc0 +100365fc: 1004de3c .word 0x1004de3c +10036600: 1004e020 .word 0x1004e020 +10036604: 1004de38 .word 0x1004de38 +10036608: 1004e02c .word 0x1004e02c + +1003660c : +1003660c: b570 push {r4, r5, r6, lr} +1003660e: 4c11 ldr r4, [pc, #68] ; (10036654 ) +10036610: f44f 62d0 mov.w r2, #1664 ; 0x680 +10036614: 6823 ldr r3, [r4, #0] +10036616: 2100 movs r1, #0 +10036618: 435a muls r2, r3 +1003661a: 480f ldr r0, [pc, #60] ; (10036658 ) +1003661c: f7e4 fadc bl 1001abd8 +10036620: 4b0e ldr r3, [pc, #56] ; (1003665c ) +10036622: 2200 movs r2, #0 +10036624: 6826 ldr r6, [r4, #0] +10036626: 601b str r3, [r3, #0] +10036628: 4611 mov r1, r2 +1003662a: 461c mov r4, r3 +1003662c: 42b1 cmp r1, r6 +1003662e: da09 bge.n 10036644 +10036630: 4d09 ldr r5, [pc, #36] ; (10036658 ) +10036632: 3101 adds r1, #1 +10036634: 1950 adds r0, r2, r5 +10036636: 5154 str r4, [r2, r5] +10036638: 6043 str r3, [r0, #4] +1003663a: f502 62d0 add.w r2, r2, #1664 ; 0x680 +1003663e: 6018 str r0, [r3, #0] +10036640: 4603 mov r3, r0 +10036642: e7f3 b.n 1003662c +10036644: 4a06 ldr r2, [pc, #24] ; (10036660 ) +10036646: 6063 str r3, [r4, #4] +10036648: 2300 movs r3, #0 +1003664a: 6013 str r3, [r2, #0] +1003664c: 4a05 ldr r2, [pc, #20] ; (10036664 ) +1003664e: 6013 str r3, [r2, #0] +10036650: bd70 pop {r4, r5, r6, pc} +10036652: bf00 nop +10036654: 10044fc4 .word 0x10044fc4 +10036658: 10046708 .word 0x10046708 +1003665c: 10046700 .word 0x10046700 +10036660: 1004e01c .word 0x1004e01c +10036664: 1004e028 .word 0x1004e028 + +10036668 : +10036668: 4770 bx lr + ... + +1003666c : +1003666c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10036670: 4606 mov r6, r0 +10036672: f7e0 fe8a bl 1001738a +10036676: 4b3c ldr r3, [pc, #240] ; (10036768 ) +10036678: 681c ldr r4, [r3, #0] +1003667a: 4698 mov r8, r3 +1003667c: 429c cmp r4, r3 +1003667e: d00b beq.n 10036698 +10036680: e894 000c ldmia.w r4, {r2, r3} +10036684: 6053 str r3, [r2, #4] +10036686: 601a str r2, [r3, #0] +10036688: 4b38 ldr r3, [pc, #224] ; (1003676c ) +1003668a: 6024 str r4, [r4, #0] +1003668c: 681a ldr r2, [r3, #0] +1003668e: 6064 str r4, [r4, #4] +10036690: 3201 adds r2, #1 +10036692: 601a str r2, [r3, #0] +10036694: 3408 adds r4, #8 +10036696: e000 b.n 1003669a +10036698: 2400 movs r4, #0 +1003669a: f7e0 fe78 bl 1001738e +1003669e: b924 cbnz r4, 100366aa +100366a0: 4933 ldr r1, [pc, #204] ; (10036770 ) +100366a2: 4834 ldr r0, [pc, #208] ; (10036774 ) +100366a4: f7e4 fa6c bl 1001ab80 +100366a8: e05a b.n 10036760 +100366aa: 4620 mov r0, r4 +100366ac: 2100 movs r1, #0 +100366ae: 2228 movs r2, #40 ; 0x28 +100366b0: f7e4 fa92 bl 1001abd8 +100366b4: f240 6372 movw r3, #1650 ; 0x672 +100366b8: 429e cmp r6, r3 +100366ba: 4f2c ldr r7, [pc, #176] ; (1003676c ) +100366bc: dd1f ble.n 100366fe +100366be: 4630 mov r0, r6 +100366c0: f7e1 f886 bl 100177d0 +100366c4: 2301 movs r3, #1 +100366c6: 4605 mov r5, r0 +100366c8: 2800 cmp r0, #0 +100366ca: d130 bne.n 1003672e +100366cc: 4928 ldr r1, [pc, #160] ; (10036770 ) +100366ce: 482a ldr r0, [pc, #168] ; (10036778 ) +100366d0: f7e4 fa56 bl 1001ab80 +100366d4: f7e0 fe59 bl 1001738a +100366d8: f8d8 2004 ldr.w r2, [r8, #4] +100366dc: f1a4 0308 sub.w r3, r4, #8 +100366e0: f8c8 3004 str.w r3, [r8, #4] +100366e4: f844 8c08 str.w r8, [r4, #-8] +100366e8: f844 2c04 str.w r2, [r4, #-4] +100366ec: 6013 str r3, [r2, #0] +100366ee: 683b ldr r3, [r7, #0] +100366f0: 3b01 subs r3, #1 +100366f2: 603b str r3, [r7, #0] +100366f4: f7e0 fe4b bl 1001738e +100366f8: 2000 movs r0, #0 +100366fa: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100366fe: f7e0 fe44 bl 1001738a +10036702: 4b1e ldr r3, [pc, #120] ; (1003677c ) +10036704: 681d ldr r5, [r3, #0] +10036706: 429d cmp r5, r3 +10036708: d00b beq.n 10036722 +1003670a: e895 000c ldmia.w r5, {r2, r3} +1003670e: 6053 str r3, [r2, #4] +10036710: 601a str r2, [r3, #0] +10036712: 4b1b ldr r3, [pc, #108] ; (10036780 ) +10036714: 602d str r5, [r5, #0] +10036716: 681a ldr r2, [r3, #0] +10036718: 606d str r5, [r5, #4] +1003671a: 3201 adds r2, #1 +1003671c: 3508 adds r5, #8 +1003671e: 601a str r2, [r3, #0] +10036720: e000 b.n 10036724 +10036722: 2500 movs r5, #0 +10036724: f7e0 fe33 bl 1001738e +10036728: 2300 movs r3, #0 +1003672a: 2d00 cmp r5, #0 +1003672c: d0ce beq.n 100366cc +1003672e: 6263 str r3, [r4, #36] ; 0x24 +10036730: 4b14 ldr r3, [pc, #80] ; (10036784 ) +10036732: 683a ldr r2, [r7, #0] +10036734: 6819 ldr r1, [r3, #0] +10036736: 3603 adds r6, #3 +10036738: 428a cmp r2, r1 +1003673a: bfc8 it gt +1003673c: 601a strgt r2, [r3, #0] +1003673e: 4b10 ldr r3, [pc, #64] ; (10036780 ) +10036740: f026 0603 bic.w r6, r6, #3 +10036744: 681a ldr r2, [r3, #0] +10036746: 4b10 ldr r3, [pc, #64] ; (10036788 ) +10036748: 442e add r6, r5 +1003674a: 6819 ldr r1, [r3, #0] +1003674c: 60e5 str r5, [r4, #12] +1003674e: 428a cmp r2, r1 +10036750: bfc8 it gt +10036752: 601a strgt r2, [r3, #0] +10036754: 2301 movs r3, #1 +10036756: 6125 str r5, [r4, #16] +10036758: 6165 str r5, [r4, #20] +1003675a: 61a6 str r6, [r4, #24] +1003675c: f8c5 3674 str.w r3, [r5, #1652] ; 0x674 +10036760: 4620 mov r0, r4 +10036762: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10036766: bf00 nop +10036768: 1004e020 .word 0x1004e020 +1003676c: 1004de38 .word 0x1004de38 +10036770: 10042376 .word 0x10042376 +10036774: 10042380 .word 0x10042380 +10036778: 10042397 .word 0x10042397 +1003677c: 10046700 .word 0x10046700 +10036780: 1004e01c .word 0x1004e01c +10036784: 1004e02c .word 0x1004e02c +10036788: 1004e028 .word 0x1004e028 + +1003678c : +1003678c: b510 push {r4, lr} +1003678e: 4604 mov r4, r0 +10036790: f7e0 fdfb bl 1001738a +10036794: 6a63 ldr r3, [r4, #36] ; 0x24 +10036796: 2b01 cmp r3, #1 +10036798: d105 bne.n 100367a6 +1003679a: 2100 movs r1, #0 +1003679c: 6261 str r1, [r4, #36] ; 0x24 +1003679e: 68e0 ldr r0, [r4, #12] +100367a0: f7e0 fe43 bl 1001742a +100367a4: e014 b.n 100367d0 +100367a6: 68e0 ldr r0, [r4, #12] +100367a8: f200 6074 addw r0, r0, #1652 ; 0x674 +100367ac: f7e0 ffa6 bl 100176fc +100367b0: b170 cbz r0, 100367d0 +100367b2: 4a10 ldr r2, [pc, #64] ; (100367f4 ) +100367b4: 68e0 ldr r0, [r4, #12] +100367b6: 6851 ldr r1, [r2, #4] +100367b8: f1a0 0308 sub.w r3, r0, #8 +100367bc: 6053 str r3, [r2, #4] +100367be: f840 2c08 str.w r2, [r0, #-8] +100367c2: f840 1c04 str.w r1, [r0, #-4] +100367c6: 600b str r3, [r1, #0] +100367c8: 4b0b ldr r3, [pc, #44] ; (100367f8 ) +100367ca: 681a ldr r2, [r3, #0] +100367cc: 3a01 subs r2, #1 +100367ce: 601a str r2, [r3, #0] +100367d0: 4a0a ldr r2, [pc, #40] ; (100367fc ) +100367d2: f1a4 0308 sub.w r3, r4, #8 +100367d6: 6851 ldr r1, [r2, #4] +100367d8: 6053 str r3, [r2, #4] +100367da: f844 2c08 str.w r2, [r4, #-8] +100367de: f844 1c04 str.w r1, [r4, #-4] +100367e2: 600b str r3, [r1, #0] +100367e4: 4b06 ldr r3, [pc, #24] ; (10036800 ) +100367e6: e8bd 4010 ldmia.w sp!, {r4, lr} +100367ea: 681a ldr r2, [r3, #0] +100367ec: 3a01 subs r2, #1 +100367ee: 601a str r2, [r3, #0] +100367f0: f7e0 bdcd b.w 1001738e +100367f4: 10046700 .word 0x10046700 +100367f8: 1004e01c .word 0x1004e01c +100367fc: 1004e020 .word 0x1004e020 +10036800: 1004de38 .word 0x1004de38 + +10036804 : +10036804: f7ff bfc2 b.w 1003678c + +10036808 : +10036808: 4603 mov r3, r0 +1003680a: b510 push {r4, lr} +1003680c: 6940 ldr r0, [r0, #20] +1003680e: 6a1c ldr r4, [r3, #32] +10036810: 1842 adds r2, r0, r1 +10036812: 4421 add r1, r4 +10036814: 615a str r2, [r3, #20] +10036816: 6219 str r1, [r3, #32] +10036818: 699b ldr r3, [r3, #24] +1003681a: 429a cmp r2, r3 +1003681c: d908 bls.n 10036830 +1003681e: f240 217d movw r1, #637 ; 0x27d +10036822: 4a04 ldr r2, [pc, #16] ; (10036834 ) +10036824: 4804 ldr r0, [pc, #16] ; (10036838 ) +10036826: f7e4 f9ab bl 1001ab80 +1003682a: f7e0 fdb2 bl 10017392 +1003682e: e7fe b.n 1003682e +10036830: bd10 pop {r4, pc} +10036832: bf00 nop +10036834: 100423d9 .word 0x100423d9 +10036838: 100423b0 .word 0x100423b0 + +1003683c : +1003683c: 6903 ldr r3, [r0, #16] +1003683e: 440b add r3, r1 +10036840: 6103 str r3, [r0, #16] +10036842: 6943 ldr r3, [r0, #20] +10036844: 4419 add r1, r3 +10036846: 6141 str r1, [r0, #20] +10036848: 4770 bx lr + +1003684a : +1003684a: 3103 adds r1, #3 +1003684c: b538 push {r3, r4, r5, lr} +1003684e: f021 0403 bic.w r4, r1, #3 +10036852: 4420 add r0, r4 +10036854: f7ff ff0a bl 1003666c +10036858: 4605 mov r5, r0 +1003685a: b110 cbz r0, 10036862 +1003685c: 4621 mov r1, r4 +1003685e: f7ff ffed bl 1003683c +10036862: 4628 mov r0, r5 +10036864: bd38 pop {r3, r4, r5, pc} + +10036866 : +10036866: 6980 ldr r0, [r0, #24] +10036868: 4770 bx lr + +1003686a : +1003686a: 6903 ldr r3, [r0, #16] +1003686c: 4419 add r1, r3 +1003686e: 6141 str r1, [r0, #20] +10036870: 4770 bx lr + +10036872 : +10036872: 6a02 ldr r2, [r0, #32] +10036874: 4603 mov r3, r0 +10036876: 4291 cmp r1, r2 +10036878: d805 bhi.n 10036886 +1003687a: 1a52 subs r2, r2, r1 +1003687c: 6202 str r2, [r0, #32] +1003687e: 6900 ldr r0, [r0, #16] +10036880: 4408 add r0, r1 +10036882: 6118 str r0, [r3, #16] +10036884: 4770 bx lr +10036886: 2000 movs r0, #0 +10036888: 4770 bx lr + +1003688a : +1003688a: b538 push {r3, r4, r5, lr} +1003688c: 4611 mov r1, r2 +1003688e: 4604 mov r4, r0 +10036890: 6a00 ldr r0, [r0, #32] +10036892: f7ff ffda bl 1003684a +10036896: 4605 mov r5, r0 +10036898: b148 cbz r0, 100368ae +1003689a: 6a21 ldr r1, [r4, #32] +1003689c: f7ff ffb4 bl 10036808 +100368a0: 6928 ldr r0, [r5, #16] +100368a2: 6921 ldr r1, [r4, #16] +100368a4: 6a22 ldr r2, [r4, #32] +100368a6: f7e4 f993 bl 1001abd0 +100368aa: 69e3 ldr r3, [r4, #28] +100368ac: 61eb str r3, [r5, #28] +100368ae: 4628 mov r0, r5 +100368b0: bd38 pop {r3, r4, r5, pc} + +100368b2 : +100368b2: 68c2 ldr r2, [r0, #12] +100368b4: 6943 ldr r3, [r0, #20] +100368b6: 6900 ldr r0, [r0, #16] +100368b8: 4413 add r3, r2 +100368ba: 1a18 subs r0, r3, r0 +100368bc: 4770 bx lr + +100368be <_rtw_open_pktfile>: +100368be: 6903 ldr r3, [r0, #16] +100368c0: 6a02 ldr r2, [r0, #32] +100368c2: 6008 str r0, [r1, #0] +100368c4: 60cb str r3, [r1, #12] +100368c6: 610b str r3, [r1, #16] +100368c8: 614a str r2, [r1, #20] +100368ca: 604a str r2, [r1, #4] +100368cc: 608b str r3, [r1, #8] +100368ce: 4770 bx lr + +100368d0 <_rtw_pktfile_read>: +100368d0: b570 push {r4, r5, r6, lr} +100368d2: 4615 mov r5, r2 +100368d4: 4604 mov r4, r0 +100368d6: 460e mov r6, r1 +100368d8: f7ff ffeb bl 100368b2 +100368dc: 42a8 cmp r0, r5 +100368de: bf38 it cc +100368e0: 4605 movcc r5, r0 +100368e2: b126 cbz r6, 100368ee <_rtw_pktfile_read+0x1e> +100368e4: 4630 mov r0, r6 +100368e6: 6921 ldr r1, [r4, #16] +100368e8: 462a mov r2, r5 +100368ea: f7e0 fda1 bl 10017430 +100368ee: 6923 ldr r3, [r4, #16] +100368f0: 4628 mov r0, r5 +100368f2: 442b add r3, r5 +100368f4: 6123 str r3, [r4, #16] +100368f6: 6863 ldr r3, [r4, #4] +100368f8: 1b5b subs r3, r3, r5 +100368fa: 6063 str r3, [r4, #4] +100368fc: bd70 pop {r4, r5, r6, pc} + +100368fe : +100368fe: 4770 bx lr + +10036900 : +10036900: 2300 movs r3, #0 +10036902: 60cb str r3, [r1, #12] +10036904: 610b str r3, [r1, #16] +10036906: 2001 movs r0, #1 +10036908: 4770 bx lr + +1003690a : +1003690a: 4770 bx lr + +1003690c : +1003690c: 4608 mov r0, r1 +1003690e: 69c9 ldr r1, [r1, #28] +10036910: f7ff bf78 b.w 10036804 + +10036914 : +10036914: b510 push {r4, lr} +10036916: 460c mov r4, r1 +10036918: 6f49 ldr r1, [r1, #116] ; 0x74 +1003691a: b109 cbz r1, 10036920 +1003691c: f7ff fff6 bl 1003690c +10036920: 2300 movs r3, #0 +10036922: 6763 str r3, [r4, #116] ; 0x74 +10036924: bd10 pop {r4, pc} + +10036926 : +10036926: b537 push {r0, r1, r2, r4, r5, lr} +10036928: 4604 mov r4, r0 +1003692a: b1c8 cbz r0, 10036960 +1003692c: f641 0369 movw r3, #6249 ; 0x1869 +10036930: 5cc3 ldrb r3, [r0, r3] +10036932: b113 cbz r3, 1003693a +10036934: f641 035c movw r3, #6236 ; 0x185c +10036938: 58c4 ldr r4, [r0, r3] +1003693a: f604 1558 addw r5, r4, #2392 ; 0x958 +1003693e: 4628 mov r0, r5 +10036940: a901 add r1, sp, #4 +10036942: f7e0 fe51 bl 100175e8 +10036946: 4620 mov r0, r4 +10036948: f7f2 feed bl 10029726 +1003694c: b120 cbz r0, 10036958 +1003694e: f504 50c0 add.w r0, r4, #6144 ; 0x1800 +10036952: 3014 adds r0, #20 +10036954: f7e0 ff80 bl 10017858 +10036958: 4628 mov r0, r5 +1003695a: a901 add r1, sp, #4 +1003695c: f7e0 fe4e bl 100175fc +10036960: b003 add sp, #12 +10036962: bd30 pop {r4, r5, pc} + +10036964 : +10036964: b537 push {r0, r1, r2, r4, r5, lr} +10036966: 690b ldr r3, [r1, #16] +10036968: 9001 str r0, [sp, #4] +1003696a: 681d ldr r5, [r3, #0] +1003696c: 4628 mov r0, r5 +1003696e: f7e6 fe1f bl 1001d5b0 +10036972: f605 1458 addw r4, r5, #2392 ; 0x958 +10036976: b168 cbz r0, 10036994 +10036978: 4628 mov r0, r5 +1003697a: a901 add r1, sp, #4 +1003697c: f7f3 fd98 bl 1002a4b0 +10036980: 2800 cmp r0, #0 +10036982: db07 blt.n 10036994 +10036984: e9d4 231a ldrd r2, r3, [r4, #104] ; 0x68 +10036988: 3201 adds r2, #1 +1003698a: f143 0300 adc.w r3, r3, #0 +1003698e: e9c4 231a strd r2, r3, [r4, #104] ; 0x68 +10036992: e00a b.n 100369aa +10036994: e9d4 231c ldrd r2, r3, [r4, #112] ; 0x70 +10036998: 9801 ldr r0, [sp, #4] +1003699a: 3201 adds r2, #1 +1003699c: f143 0300 adc.w r3, r3, #0 +100369a0: e9c4 231c strd r2, r3, [r4, #112] ; 0x70 +100369a4: 69c1 ldr r1, [r0, #28] +100369a6: f7ff ff2d bl 10036804 +100369aa: 2000 movs r0, #0 +100369ac: b003 add sp, #12 +100369ae: bd30 pop {r4, r5, pc} + +100369b0 : +100369b0: b538 push {r3, r4, r5, lr} +100369b2: 4604 mov r4, r0 +100369b4: 2008 movs r0, #8 +100369b6: 460d mov r5, r1 +100369b8: f000 f8a2 bl 10036b00 +100369bc: b110 cbz r0, 100369c4 +100369be: 6903 ldr r3, [r0, #16] +100369c0: 601d str r5, [r3, #0] +100369c2: 605c str r4, [r3, #4] +100369c4: bd38 pop {r3, r4, r5, pc} + +100369c6 : +100369c6: b5f8 push {r3, r4, r5, r6, r7, lr} +100369c8: 4606 mov r6, r0 +100369ca: 2008 movs r0, #8 +100369cc: f000 f898 bl 10036b00 +100369d0: 4604 mov r4, r0 +100369d2: b160 cbz r0, 100369ee +100369d4: 6907 ldr r7, [r0, #16] +100369d6: 4630 mov r0, r6 +100369d8: f7e0 feda bl 10017790 +100369dc: 4605 mov r5, r0 +100369de: 6038 str r0, [r7, #0] +100369e0: b920 cbnz r0, 100369ec +100369e2: 4620 mov r0, r4 +100369e4: f000 f8ba bl 10036b5c +100369e8: 462c mov r4, r5 +100369ea: e000 b.n 100369ee +100369ec: 607e str r6, [r7, #4] +100369ee: 4620 mov r0, r4 +100369f0: bdf8 pop {r3, r4, r5, r6, r7, pc} + +100369f2 : +100369f2: b510 push {r4, lr} +100369f4: 4604 mov r4, r0 +100369f6: b150 cbz r0, 10036a0e +100369f8: 6903 ldr r3, [r0, #16] +100369fa: 6818 ldr r0, [r3, #0] +100369fc: b138 cbz r0, 10036a0e +100369fe: 6859 ldr r1, [r3, #4] +10036a00: f7e0 fd11 bl 10017426 +10036a04: 4620 mov r0, r4 +10036a06: e8bd 4010 ldmia.w sp!, {r4, lr} +10036a0a: f000 b8a7 b.w 10036b5c +10036a0e: bd10 pop {r4, pc} + +10036a10 : +10036a10: b510 push {r4, lr} +10036a12: 491d ldr r1, [pc, #116] ; (10036a88 ) +10036a14: 4604 mov r4, r0 +10036a16: f7e4 f8e7 bl 1001abe8 +10036a1a: b908 cbnz r0, 10036a20 +10036a1c: 2000 movs r0, #0 +10036a1e: bd10 pop {r4, pc} +10036a20: 4620 mov r0, r4 +10036a22: 491a ldr r1, [pc, #104] ; (10036a8c ) +10036a24: f7e4 f8e0 bl 1001abe8 +10036a28: 2800 cmp r0, #0 +10036a2a: d0f7 beq.n 10036a1c +10036a2c: 4620 mov r0, r4 +10036a2e: 4918 ldr r1, [pc, #96] ; (10036a90 ) +10036a30: f7e4 f8da bl 1001abe8 +10036a34: 2800 cmp r0, #0 +10036a36: d0f1 beq.n 10036a1c +10036a38: 4620 mov r0, r4 +10036a3a: 4916 ldr r1, [pc, #88] ; (10036a94 ) +10036a3c: f7e4 f8d4 bl 1001abe8 +10036a40: 2800 cmp r0, #0 +10036a42: d0eb beq.n 10036a1c +10036a44: 4620 mov r0, r4 +10036a46: 4914 ldr r1, [pc, #80] ; (10036a98 ) +10036a48: f7e4 f8ce bl 1001abe8 +10036a4c: 2800 cmp r0, #0 +10036a4e: d0e5 beq.n 10036a1c +10036a50: 4620 mov r0, r4 +10036a52: 4912 ldr r1, [pc, #72] ; (10036a9c ) +10036a54: f7e4 f8c8 bl 1001abe8 +10036a58: 2800 cmp r0, #0 +10036a5a: d0df beq.n 10036a1c +10036a5c: 4620 mov r0, r4 +10036a5e: 4910 ldr r1, [pc, #64] ; (10036aa0 ) +10036a60: f7e4 f8c2 bl 1001abe8 +10036a64: 2800 cmp r0, #0 +10036a66: d0d9 beq.n 10036a1c +10036a68: 4620 mov r0, r4 +10036a6a: 490e ldr r1, [pc, #56] ; (10036aa4 ) +10036a6c: f7e4 f8bc bl 1001abe8 +10036a70: 2800 cmp r0, #0 +10036a72: d0d3 beq.n 10036a1c +10036a74: 4620 mov r0, r4 +10036a76: 490c ldr r1, [pc, #48] ; (10036aa8 ) +10036a78: f7e4 f8b6 bl 1001abe8 +10036a7c: 3000 adds r0, #0 +10036a7e: bf18 it ne +10036a80: 2001 movne r0, #1 +10036a82: 4240 negs r0, r0 +10036a84: bd10 pop {r4, pc} +10036a86: bf00 nop +10036a88: 10041831 .word 0x10041831 +10036a8c: 1004184c .word 0x1004184c +10036a90: 1004186a .word 0x1004186a +10036a94: 10042449 .word 0x10042449 +10036a98: 10042455 .word 0x10042455 +10036a9c: 10042461 .word 0x10042461 +10036aa0: 10042472 .word 0x10042472 +10036aa4: 10042483 .word 0x10042483 +10036aa8: 10042498 .word 0x10042498 + +10036aac : +10036aac: b5f8 push {r3, r4, r5, r6, r7, lr} +10036aae: 4607 mov r7, r0 +10036ab0: f7e0 fc6b bl 1001738a +10036ab4: 4b0f ldr r3, [pc, #60] ; (10036af4 ) +10036ab6: 2500 movs r5, #0 +10036ab8: 681c ldr r4, [r3, #0] +10036aba: 461e mov r6, r3 +10036abc: 480d ldr r0, [pc, #52] ; (10036af4 ) +10036abe: 4621 mov r1, r4 +10036ac0: f7e0 fd6f bl 100175a2 +10036ac4: b930 cbnz r0, 10036ad4 +10036ac6: 68a3 ldr r3, [r4, #8] +10036ac8: 4625 mov r5, r4 +10036aca: 681b ldr r3, [r3, #0] +10036acc: 42bb cmp r3, r7 +10036ace: d001 beq.n 10036ad4 +10036ad0: 6824 ldr r4, [r4, #0] +10036ad2: e7f3 b.n 10036abc +10036ad4: f7e0 fc5b bl 1001738e +10036ad8: 42b4 cmp r4, r6 +10036ada: d105 bne.n 10036ae8 +10036adc: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +10036ae0: 4805 ldr r0, [pc, #20] ; (10036af8 ) +10036ae2: 4906 ldr r1, [pc, #24] ; (10036afc ) +10036ae4: f7e4 b84c b.w 1001ab80 +10036ae8: 68ab ldr r3, [r5, #8] +10036aea: 689a ldr r2, [r3, #8] +10036aec: 6858 ldr r0, [r3, #4] +10036aee: 4790 blx r2 +10036af0: bdf8 pop {r3, r4, r5, r6, r7, pc} +10036af2: bf00 nop +10036af4: 1004e034 .word 0x1004e034 +10036af8: 10042511 .word 0x10042511 +10036afc: 10042922 .word 0x10042922 + +10036b00 : +10036b00: b570 push {r4, r5, r6, lr} +10036b02: 4605 mov r5, r0 +10036b04: 2034 movs r0, #52 ; 0x34 +10036b06: f7e0 fe53 bl 100177b0 +10036b0a: 4604 mov r4, r0 +10036b0c: b920 cbnz r0, 10036b18 +10036b0e: 4910 ldr r1, [pc, #64] ; (10036b50 ) +10036b10: 4810 ldr r0, [pc, #64] ; (10036b54 ) +10036b12: f7e4 f835 bl 1001ab80 +10036b16: e019 b.n 10036b4c +10036b18: 2100 movs r1, #0 +10036b1a: 2234 movs r2, #52 ; 0x34 +10036b1c: f7e4 f85c bl 1001abd8 +10036b20: 2d00 cmp r5, #0 +10036b22: dd13 ble.n 10036b4c +10036b24: 4628 mov r0, r5 +10036b26: f7e0 fe43 bl 100177b0 +10036b2a: 4606 mov r6, r0 +10036b2c: 6120 str r0, [r4, #16] +10036b2e: b948 cbnz r0, 10036b44 +10036b30: 4907 ldr r1, [pc, #28] ; (10036b50 ) +10036b32: 4809 ldr r0, [pc, #36] ; (10036b58 ) +10036b34: f7e4 f824 bl 1001ab80 +10036b38: 4620 mov r0, r4 +10036b3a: 2134 movs r1, #52 ; 0x34 +10036b3c: f7e0 fc75 bl 1001742a +10036b40: 4630 mov r0, r6 +10036b42: bd70 pop {r4, r5, r6, pc} +10036b44: 2100 movs r1, #0 +10036b46: 462a mov r2, r5 +10036b48: f7e4 f846 bl 1001abd8 +10036b4c: 4620 mov r0, r4 +10036b4e: bd70 pop {r4, r5, r6, pc} +10036b50: 100424af .word 0x100424af +10036b54: 10042544 .word 0x10042544 +10036b58: 10042567 .word 0x10042567 + +10036b5c : +10036b5c: b510 push {r4, lr} +10036b5e: 4604 mov r4, r0 +10036b60: 6900 ldr r0, [r0, #16] +10036b62: b110 cbz r0, 10036b6a +10036b64: 2100 movs r1, #0 +10036b66: f7e0 fc60 bl 1001742a +10036b6a: 4620 mov r0, r4 +10036b6c: 2100 movs r1, #0 +10036b6e: e8bd 4010 ldmia.w sp!, {r4, lr} +10036b72: f7e0 bc5a b.w 1001742a + +10036b76 : +10036b76: b508 push {r3, lr} +10036b78: f7e4 f83a bl 1001abf0 +10036b7c: 2000 movs r0, #0 +10036b7e: bd08 pop {r3, pc} + +10036b80 : +10036b80: b508 push {r3, lr} +10036b82: 4804 ldr r0, [pc, #16] ; (10036b94 ) +10036b84: f7e0 fc6c bl 10017460 +10036b88: 4a03 ldr r2, [pc, #12] ; (10036b98 ) +10036b8a: 2300 movs r3, #0 +10036b8c: 6013 str r3, [r2, #0] +10036b8e: 4a03 ldr r2, [pc, #12] ; (10036b9c ) +10036b90: 6013 str r3, [r2, #0] +10036b92: bd08 pop {r3, pc} +10036b94: 1004e034 .word 0x1004e034 +10036b98: 1004e06c .word 0x1004e06c +10036b9c: 1004e070 .word 0x1004e070 + +10036ba0 : +10036ba0: 4b0e ldr r3, [pc, #56] ; (10036bdc ) +10036ba2: b510 push {r4, lr} +10036ba4: 681a ldr r2, [r3, #0] +10036ba6: 2a00 cmp r2, #0 +10036ba8: dd03 ble.n 10036bb2 +10036baa: 480d ldr r0, [pc, #52] ; (10036be0 ) +10036bac: 490d ldr r1, [pc, #52] ; (10036be4 ) +10036bae: f7e3 ffe7 bl 1001ab80 +10036bb2: f7e0 fbea bl 1001738a +10036bb6: 4c0c ldr r4, [pc, #48] ; (10036be8 ) +10036bb8: 4620 mov r0, r4 +10036bba: 6821 ldr r1, [r4, #0] +10036bbc: f7e0 fcf1 bl 100175a2 +10036bc0: b940 cbnz r0, 10036bd4 +10036bc2: 6824 ldr r4, [r4, #0] +10036bc4: 4620 mov r0, r4 +10036bc6: f7e0 fc5f bl 10017488 +10036bca: 4620 mov r0, r4 +10036bcc: 210c movs r1, #12 +10036bce: f7e0 fc2c bl 1001742a +10036bd2: e7f0 b.n 10036bb6 +10036bd4: e8bd 4010 ldmia.w sp!, {r4, lr} +10036bd8: f7e0 bbd9 b.w 1001738e +10036bdc: 1004e06c .word 0x1004e06c +10036be0: 1004258b .word 0x1004258b +10036be4: 100424be .word 0x100424be +10036be8: 1004e034 .word 0x1004e034 + +10036bec : +10036bec: 6883 ldr r3, [r0, #8] +10036bee: b537 push {r0, r1, r2, r4, r5, lr} +10036bf0: 4604 mov r4, r0 +10036bf2: 2b00 cmp r3, #0 +10036bf4: d043 beq.n 10036c7e +10036bf6: 6802 ldr r2, [r0, #0] +10036bf8: 2a00 cmp r2, #0 +10036bfa: d133 bne.n 10036c64 +10036bfc: 4b21 ldr r3, [pc, #132] ; (10036c84 ) +10036bfe: 4822 ldr r0, [pc, #136] ; (10036c88 ) +10036c00: 9300 str r3, [sp, #0] +10036c02: f04f 31ff mov.w r1, #4294967295 +10036c06: 4613 mov r3, r2 +10036c08: f7e0 fe2e bl 10017868 +10036c0c: 6020 str r0, [r4, #0] +10036c0e: b930 cbnz r0, 10036c1e +10036c10: 481e ldr r0, [pc, #120] ; (10036c8c ) +10036c12: 491f ldr r1, [pc, #124] ; (10036c90 ) +10036c14: b003 add sp, #12 +10036c16: e8bd 4030 ldmia.w sp!, {r4, r5, lr} +10036c1a: f7e3 bfb1 b.w 1001ab80 +10036c1e: 200c movs r0, #12 +10036c20: f7e0 fdd6 bl 100177d0 +10036c24: 4605 mov r5, r0 +10036c26: b950 cbnz r0, 10036c3e +10036c28: 4919 ldr r1, [pc, #100] ; (10036c90 ) +10036c2a: 481a ldr r0, [pc, #104] ; (10036c94 ) +10036c2c: f7e3 ffa8 bl 1001ab80 +10036c30: 6820 ldr r0, [r4, #0] +10036c32: f04f 31ff mov.w r1, #4294967295 +10036c36: f7e0 fe25 bl 10017884 +10036c3a: 6025 str r5, [r4, #0] +10036c3c: e01f b.n 10036c7e +10036c3e: 6084 str r4, [r0, #8] +10036c40: f7e0 fba3 bl 1001738a +10036c44: 4914 ldr r1, [pc, #80] ; (10036c98 ) +10036c46: 4628 mov r0, r5 +10036c48: f7e0 fc12 bl 10017470 +10036c4c: f7e0 fb9f bl 1001738e +10036c50: 4a12 ldr r2, [pc, #72] ; (10036c9c ) +10036c52: 6813 ldr r3, [r2, #0] +10036c54: 3301 adds r3, #1 +10036c56: 6013 str r3, [r2, #0] +10036c58: 4a11 ldr r2, [pc, #68] ; (10036ca0 ) +10036c5a: 6811 ldr r1, [r2, #0] +10036c5c: 428b cmp r3, r1 +10036c5e: dd0e ble.n 10036c7e +10036c60: 6013 str r3, [r2, #0] +10036c62: e00c b.n 10036c7e +10036c64: 4610 mov r0, r2 +10036c66: f7e0 fe17 bl 10017898 +10036c6a: 2801 cmp r0, #1 +10036c6c: d107 bne.n 10036c7e +10036c6e: 6820 ldr r0, [r4, #0] +10036c70: f04f 31ff mov.w r1, #4294967295 +10036c74: b003 add sp, #12 +10036c76: e8bd 4030 ldmia.w sp!, {r4, r5, lr} +10036c7a: f7e0 be17 b.w 100178ac +10036c7e: b003 add sp, #12 +10036c80: bd30 pop {r4, r5, pc} +10036c82: bf00 nop +10036c84: 10036aad .word 0x10036aad +10036c88: 10041685 .word 0x10041685 +10036c8c: 100425b0 .word 0x100425b0 +10036c90: 10042905 .word 0x10042905 +10036c94: 100425ca .word 0x100425ca +10036c98: 1004e034 .word 0x1004e034 +10036c9c: 1004e06c .word 0x1004e06c +10036ca0: 1004e070 .word 0x1004e070 + +10036ca4 : +10036ca4: b573 push {r0, r1, r4, r5, r6, lr} +10036ca6: 4b2d ldr r3, [pc, #180] ; (10036d5c ) +10036ca8: 4604 mov r4, r0 +10036caa: 7c1b ldrb r3, [r3, #16] +10036cac: 460e mov r6, r1 +10036cae: 2b00 cmp r3, #0 +10036cb0: d051 beq.n 10036d56 +10036cb2: 6802 ldr r2, [r0, #0] +10036cb4: 2a00 cmp r2, #0 +10036cb6: d131 bne.n 10036d1c +10036cb8: 4b29 ldr r3, [pc, #164] ; (10036d60 ) +10036cba: 482a ldr r0, [pc, #168] ; (10036d64 ) +10036cbc: 9300 str r3, [sp, #0] +10036cbe: f04f 31ff mov.w r1, #4294967295 +10036cc2: 4613 mov r3, r2 +10036cc4: f7e0 fdd0 bl 10017868 +10036cc8: 6020 str r0, [r4, #0] +10036cca: b920 cbnz r0, 10036cd6 +10036ccc: 4926 ldr r1, [pc, #152] ; (10036d68 ) +10036cce: 4827 ldr r0, [pc, #156] ; (10036d6c ) +10036cd0: f7e3 ff56 bl 1001ab80 +10036cd4: e02c b.n 10036d30 +10036cd6: 200c movs r0, #12 +10036cd8: f7e0 fd7a bl 100177d0 +10036cdc: 4605 mov r5, r0 +10036cde: b950 cbnz r0, 10036cf6 +10036ce0: 4921 ldr r1, [pc, #132] ; (10036d68 ) +10036ce2: 4823 ldr r0, [pc, #140] ; (10036d70 ) +10036ce4: f7e3 ff4c bl 1001ab80 +10036ce8: 6820 ldr r0, [r4, #0] +10036cea: f04f 31ff mov.w r1, #4294967295 +10036cee: f7e0 fdc9 bl 10017884 +10036cf2: 6025 str r5, [r4, #0] +10036cf4: e02f b.n 10036d56 +10036cf6: 6084 str r4, [r0, #8] +10036cf8: f7e0 fb47 bl 1001738a +10036cfc: 491d ldr r1, [pc, #116] ; (10036d74 ) +10036cfe: 4628 mov r0, r5 +10036d00: f7e0 fbb6 bl 10017470 +10036d04: f7e0 fb43 bl 1001738e +10036d08: 4a1b ldr r2, [pc, #108] ; (10036d78 ) +10036d0a: 6813 ldr r3, [r2, #0] +10036d0c: 3301 adds r3, #1 +10036d0e: 6013 str r3, [r2, #0] +10036d10: 4a1a ldr r2, [pc, #104] ; (10036d7c ) +10036d12: 6811 ldr r1, [r2, #0] +10036d14: 428b cmp r3, r1 +10036d16: dd0b ble.n 10036d30 +10036d18: 6013 str r3, [r2, #0] +10036d1a: e009 b.n 10036d30 +10036d1c: 4610 mov r0, r2 +10036d1e: f7e0 fdbb bl 10017898 +10036d22: 2801 cmp r0, #1 +10036d24: d104 bne.n 10036d30 +10036d26: 6820 ldr r0, [r4, #0] +10036d28: f04f 31ff mov.w r1, #4294967295 +10036d2c: f7e0 fdbe bl 100178ac +10036d30: 6824 ldr r4, [r4, #0] +10036d32: b184 cbz r4, 10036d56 +10036d34: 4630 mov r0, r6 +10036d36: f7e0 fc7f bl 10017638 +10036d3a: f04f 32ff mov.w r2, #4294967295 +10036d3e: 4601 mov r1, r0 +10036d40: 4620 mov r0, r4 +10036d42: f7e0 fdbd bl 100178c0 +10036d46: b930 cbnz r0, 10036d56 +10036d48: 480d ldr r0, [pc, #52] ; (10036d80 ) +10036d4a: 4907 ldr r1, [pc, #28] ; (10036d68 ) +10036d4c: b002 add sp, #8 +10036d4e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10036d52: f7e3 bf15 b.w 1001ab80 +10036d56: b002 add sp, #8 +10036d58: bd70 pop {r4, r5, r6, pc} +10036d5a: bf00 nop +10036d5c: 1004e03c .word 0x1004e03c +10036d60: 10036aad .word 0x10036aad +10036d64: 10041685 .word 0x10041685 +10036d68: 10042507 .word 0x10042507 +10036d6c: 100425b0 .word 0x100425b0 +10036d70: 100425ca .word 0x100425ca +10036d74: 1004e034 .word 0x1004e034 +10036d78: 1004e06c .word 0x1004e06c +10036d7c: 1004e070 .word 0x1004e070 +10036d80: 100425eb .word 0x100425eb + +10036d84 : +10036d84: 6803 ldr r3, [r0, #0] +10036d86: b570 push {r4, r5, r6, lr} +10036d88: 4605 mov r5, r0 +10036d8a: b1e3 cbz r3, 10036dc6 +10036d8c: f7e0 fafd bl 1001738a +10036d90: 4b0d ldr r3, [pc, #52] ; (10036dc8 ) +10036d92: 681c ldr r4, [r3, #0] +10036d94: 461e mov r6, r3 +10036d96: 480c ldr r0, [pc, #48] ; (10036dc8 ) +10036d98: 4621 mov r1, r4 +10036d9a: f7e0 fc02 bl 100175a2 +10036d9e: b920 cbnz r0, 10036daa +10036da0: 68a3 ldr r3, [r4, #8] +10036da2: 681a ldr r2, [r3, #0] +10036da4: 682b ldr r3, [r5, #0] +10036da6: 429a cmp r2, r3 +10036da8: d104 bne.n 10036db4 +10036daa: f7e0 faf0 bl 1001738e +10036dae: 42b4 cmp r4, r6 +10036db0: d102 bne.n 10036db8 +10036db2: bd70 pop {r4, r5, r6, pc} +10036db4: 6824 ldr r4, [r4, #0] +10036db6: e7ee b.n 10036d96 +10036db8: 6828 ldr r0, [r5, #0] +10036dba: f04f 31ff mov.w r1, #4294967295 +10036dbe: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10036dc2: f7e0 bd73 b.w 100178ac +10036dc6: bd70 pop {r4, r5, r6, pc} +10036dc8: 1004e034 .word 0x1004e034 + +10036dcc : +10036dcc: 6803 ldr r3, [r0, #0] +10036dce: b570 push {r4, r5, r6, lr} +10036dd0: 4605 mov r5, r0 +10036dd2: b33b cbz r3, 10036e24 +10036dd4: f7e0 fad9 bl 1001738a +10036dd8: 4b13 ldr r3, [pc, #76] ; (10036e28 ) +10036dda: 681c ldr r4, [r3, #0] +10036ddc: 461e mov r6, r3 +10036dde: 4812 ldr r0, [pc, #72] ; (10036e28 ) +10036de0: 4621 mov r1, r4 +10036de2: f7e0 fbde bl 100175a2 +10036de6: b970 cbnz r0, 10036e06 +10036de8: 68a3 ldr r3, [r4, #8] +10036dea: 681a ldr r2, [r3, #0] +10036dec: 682b ldr r3, [r5, #0] +10036dee: 429a cmp r2, r3 +10036df0: d107 bne.n 10036e02 +10036df2: 4620 mov r0, r4 +10036df4: f7e0 fb48 bl 10017488 +10036df8: 4620 mov r0, r4 +10036dfa: 210c movs r1, #12 +10036dfc: f7e0 fb15 bl 1001742a +10036e00: e001 b.n 10036e06 +10036e02: 6824 ldr r4, [r4, #0] +10036e04: e7eb b.n 10036dde +10036e06: f7e0 fac2 bl 1001738e +10036e0a: 42b4 cmp r4, r6 +10036e0c: d00a beq.n 10036e24 +10036e0e: 6828 ldr r0, [r5, #0] +10036e10: f04f 31ff mov.w r1, #4294967295 +10036e14: f7e0 fd36 bl 10017884 +10036e18: 2300 movs r3, #0 +10036e1a: 602b str r3, [r5, #0] +10036e1c: 4b03 ldr r3, [pc, #12] ; (10036e2c ) +10036e1e: 681a ldr r2, [r3, #0] +10036e20: 3a01 subs r2, #1 +10036e22: 601a str r2, [r3, #0] +10036e24: bd70 pop {r4, r5, r6, pc} +10036e26: bf00 nop +10036e28: 1004e034 .word 0x1004e034 +10036e2c: 1004e06c .word 0x1004e06c + +10036e30 : +10036e30: 6082 str r2, [r0, #8] +10036e32: 6043 str r3, [r0, #4] +10036e34: f7ff beda b.w 10036bec + +10036e38 : +10036e38: f7ff bf34 b.w 10036ca4 + +10036e3c : +10036e3c: b508 push {r3, lr} +10036e3e: f7ff ffa1 bl 10036d84 +10036e42: 2000 movs r0, #0 +10036e44: bd08 pop {r3, pc} + +10036e46 : +10036e46: f7ff bfc1 b.w 10036dcc + ... + +10036e4c : +10036e4c: 4b02 ldr r3, [pc, #8] ; (10036e58 ) +10036e4e: 681b ldr r3, [r3, #0] +10036e50: 1a18 subs r0, r3, r0 +10036e52: bf18 it ne +10036e54: 2001 movne r0, #1 +10036e56: 4770 bx lr +10036e58: 1004e03c .word 0x1004e03c + +10036e5c : +10036e5c: b570 push {r4, r5, r6, lr} +10036e5e: 460c mov r4, r1 +10036e60: 4606 mov r6, r0 +10036e62: b970 cbnz r0, 10036e82 +10036e64: 4601 mov r1, r0 +10036e66: f7e0 fc71 bl 1001774c +10036e6a: f7ff fba1 bl 100365b0 +10036e6e: f7ff fbcd bl 1003660c +10036e72: f7ff fb8f bl 10036594 +10036e76: f7ff fe83 bl 10036b80 +10036e7a: f7fc f9e3 bl 10033244 +10036e7e: 4630 mov r0, r6 +10036e80: e007 b.n 10036e92 +10036e82: 2801 cmp r0, #1 +10036e84: d103 bne.n 10036e8e +10036e86: 4b13 ldr r3, [pc, #76] ; (10036ed4 ) +10036e88: 6818 ldr r0, [r3, #0] +10036e8a: b910 cbnz r0, 10036e92 +10036e8c: e01f b.n 10036ece +10036e8e: 4812 ldr r0, [pc, #72] ; (10036ed8 ) +10036e90: e01a b.n 10036ec8 +10036e92: 4621 mov r1, r4 +10036e94: f7fc f8f4 bl 10033080 +10036e98: 4601 mov r1, r0 +10036e9a: b190 cbz r0, 10036ec2 +10036e9c: 2318 movs r3, #24 +10036e9e: 4373 muls r3, r6 +10036ea0: 4a0c ldr r2, [pc, #48] ; (10036ed4 ) +10036ea2: 2400 movs r4, #0 +10036ea4: 18d5 adds r5, r2, r3 +10036ea6: 606c str r4, [r5, #4] +10036ea8: 60ac str r4, [r5, #8] +10036eaa: 60ec str r4, [r5, #12] +10036eac: 742c strb r4, [r5, #16] +10036eae: 50d0 str r0, [r2, r3] +10036eb0: 4630 mov r0, r6 +10036eb2: f101 0214 add.w r2, r1, #20 +10036eb6: f7dd fc15 bl 100146e4 +10036eba: 2301 movs r3, #1 +10036ebc: 742b strb r3, [r5, #16] +10036ebe: 4620 mov r0, r4 +10036ec0: bd70 pop {r4, r5, r6, pc} +10036ec2: f7fc f9d5 bl 10033270 +10036ec6: 4805 ldr r0, [pc, #20] ; (10036edc ) +10036ec8: 4905 ldr r1, [pc, #20] ; (10036ee0 ) +10036eca: f7e3 fe59 bl 1001ab80 +10036ece: f04f 30ff mov.w r0, #4294967295 +10036ed2: bd70 pop {r4, r5, r6, pc} +10036ed4: 1004e03c .word 0x1004e03c +10036ed8: 1004260b .word 0x1004260b +10036edc: 10042626 .word 0x10042626 +10036ee0: 10042930 .word 0x10042930 + +10036ee4 : +10036ee4: b5f8 push {r3, r4, r5, r6, r7, lr} +10036ee6: 4c2d ldr r4, [pc, #180] ; (10036f9c ) +10036ee8: 7c23 ldrb r3, [r4, #16] +10036eea: 6826 ldr r6, [r4, #0] +10036eec: 2b00 cmp r3, #0 +10036eee: d053 beq.n 10036f98 +10036ef0: 6933 ldr r3, [r6, #16] +10036ef2: 2201 movs r2, #1 +10036ef4: 681d ldr r5, [r3, #0] +10036ef6: f241 73b8 movw r3, #6072 ; 0x17b8 +10036efa: f505 50be add.w r0, r5, #6080 ; 0x17c0 +10036efe: 54ea strb r2, [r5, r3] +10036f00: 300c adds r0, #12 +10036f02: f7e0 fca9 bl 10017858 +10036f06: f7e0 fa40 bl 1001738a +10036f0a: 2300 movs r3, #0 +10036f0c: 68a2 ldr r2, [r4, #8] +10036f0e: 68e7 ldr r7, [r4, #12] +10036f10: 7423 strb r3, [r4, #16] +10036f12: f884 3028 strb.w r3, [r4, #40] ; 0x28 +10036f16: 6a23 ldr r3, [r4, #32] +10036f18: 4417 add r7, r2 +10036f1a: 441f add r7, r3 +10036f1c: 6a63 ldr r3, [r4, #36] ; 0x24 +10036f1e: 441f add r7, r3 +10036f20: f7e0 fa35 bl 1001738e +10036f24: b14f cbz r7, 10036f3a +10036f26: 491e ldr r1, [pc, #120] ; (10036fa0 ) +10036f28: 463a mov r2, r7 +10036f2a: 481e ldr r0, [pc, #120] ; (10036fa4 ) +10036f2c: f7e3 fe28 bl 1001ab80 +10036f30: f44f 707a mov.w r0, #1000 ; 0x3e8 +10036f34: f7e0 fbae bl 10017694 +10036f38: e7e5 b.n 10036f06 +10036f3a: 2064 movs r0, #100 ; 0x64 +10036f3c: f7e0 fbaa bl 10017694 +10036f40: f505 53be add.w r3, r5, #6080 ; 0x17c0 +10036f44: 3310 adds r3, #16 +10036f46: 681b ldr r3, [r3, #0] +10036f48: b163 cbz r3, 10036f64 +10036f4a: f505 53bd add.w r3, r5, #6048 ; 0x17a0 +10036f4e: 3318 adds r3, #24 +10036f50: 781b ldrb r3, [r3, #0] +10036f52: 2b02 cmp r3, #2 +10036f54: d006 beq.n 10036f64 +10036f56: 4814 ldr r0, [pc, #80] ; (10036fa8 ) +10036f58: 4911 ldr r1, [pc, #68] ; (10036fa0 ) +10036f5a: f7e3 fe11 bl 1001ab80 +10036f5e: f44f 707a mov.w r0, #1000 ; 0x3e8 +10036f62: e7eb b.n 10036f3c +10036f64: 4630 mov r0, r6 +10036f66: f7fc f94b bl 10033200 +10036f6a: f7fc f981 bl 10033270 +10036f6e: f7ff fe17 bl 10036ba0 +10036f72: 2000 movs r0, #0 +10036f74: 6020 str r0, [r4, #0] +10036f76: 6060 str r0, [r4, #4] +10036f78: 60a0 str r0, [r4, #8] +10036f7a: 60e0 str r0, [r4, #12] +10036f7c: 7420 strb r0, [r4, #16] +10036f7e: 61a0 str r0, [r4, #24] +10036f80: 61e0 str r0, [r4, #28] +10036f82: 6220 str r0, [r4, #32] +10036f84: 6260 str r0, [r4, #36] ; 0x24 +10036f86: f884 0028 strb.w r0, [r4, #40] ; 0x28 +10036f8a: 4601 mov r1, r0 +10036f8c: f7e0 fa4a bl 10017424 +10036f90: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +10036f94: f7ff bb68 b.w 10036668 +10036f98: bdf8 pop {r3, r4, r5, r6, r7, pc} +10036f9a: bf00 nop +10036f9c: 1004e03c .word 0x1004e03c +10036fa0: 100424e6 .word 0x100424e6 +10036fa4: 10042647 .word 0x10042647 +10036fa8: 10042667 .word 0x10042667 + +10036fac : +10036fac: 2218 movs r2, #24 +10036fae: b508 push {r3, lr} +10036fb0: 4350 muls r0, r2 +10036fb2: 4b08 ldr r3, [pc, #32] ; (10036fd4 ) +10036fb4: 181a adds r2, r3, r0 +10036fb6: 5818 ldr r0, [r3, r0] +10036fb8: 7c13 ldrb r3, [r2, #16] +10036fba: b143 cbz r3, 10036fce +10036fbc: b920 cbnz r0, 10036fc8 +10036fbe: 4906 ldr r1, [pc, #24] ; (10036fd8 ) +10036fc0: 4806 ldr r0, [pc, #24] ; (10036fdc ) +10036fc2: f7e3 fddd bl 1001ab80 +10036fc6: e002 b.n 10036fce +10036fc8: 6a03 ldr r3, [r0, #32] +10036fca: 4798 blx r3 +10036fcc: bd08 pop {r3, pc} +10036fce: f04f 30ff mov.w r0, #4294967295 +10036fd2: bd08 pop {r3, pc} +10036fd4: 1004e03c .word 0x1004e03c +10036fd8: 100424f7 .word 0x100424f7 +10036fdc: 1004267e .word 0x1004267e + +10036fe0 : +10036fe0: 4b02 ldr r3, [pc, #8] ; (10036fec ) +10036fe2: 2218 movs r2, #24 +10036fe4: fb02 3000 mla r0, r2, r0, r3 +10036fe8: 7c00 ldrb r0, [r0, #16] +10036fea: 4770 bx lr +10036fec: 1004e03c .word 0x1004e03c + +10036ff0 : +10036ff0: 4b03 ldr r3, [pc, #12] ; (10037000 ) +10036ff2: 2218 movs r2, #24 +10036ff4: fb02 3000 mla r0, r2, r0, r3 +10036ff8: 6883 ldr r3, [r0, #8] +10036ffa: 3301 adds r3, #1 +10036ffc: 6083 str r3, [r0, #8] +10036ffe: 4770 bx lr +10037000: 1004e03c .word 0x1004e03c + +10037004 : +10037004: 4b03 ldr r3, [pc, #12] ; (10037014 ) +10037006: 2218 movs r2, #24 +10037008: fb02 3000 mla r0, r2, r0, r3 +1003700c: 6883 ldr r3, [r0, #8] +1003700e: 3b01 subs r3, #1 +10037010: 6083 str r3, [r0, #8] +10037012: 4770 bx lr +10037014: 1004e03c .word 0x1004e03c + +10037018 : +10037018: 4b02 ldr r3, [pc, #8] ; (10037024 ) +1003701a: 2218 movs r2, #24 +1003701c: fb02 3000 mla r0, r2, r0, r3 +10037020: 6840 ldr r0, [r0, #4] +10037022: 4770 bx lr +10037024: 1004e03c .word 0x1004e03c + +10037028 : +10037028: b508 push {r3, lr} +1003702a: 4b0b ldr r3, [pc, #44] ; (10037058 ) +1003702c: 681a ldr r2, [r3, #0] +1003702e: 4b0b ldr r3, [pc, #44] ; (1003705c ) +10037030: 3a02 subs r2, #2 +10037032: 681b ldr r3, [r3, #0] +10037034: 429a cmp r2, r3 +10037036: dd0b ble.n 10037050 +10037038: 4b09 ldr r3, [pc, #36] ; (10037060 ) +1003703a: 681a ldr r2, [r3, #0] +1003703c: 4b09 ldr r3, [pc, #36] ; (10037064 ) +1003703e: 3a02 subs r2, #2 +10037040: 681b ldr r3, [r3, #0] +10037042: 429a cmp r2, r3 +10037044: dd04 ble.n 10037050 +10037046: e8bd 4008 ldmia.w sp!, {r3, lr} +1003704a: 214a movs r1, #74 ; 0x4a +1003704c: f7ff bbfd b.w 1003684a +10037050: f7ff fa92 bl 10036578 +10037054: 2000 movs r0, #0 +10037056: bd08 pop {r3, pc} +10037058: 10044fc0 .word 0x10044fc0 +1003705c: 1004de38 .word 0x1004de38 +10037060: 10044fc4 .word 0x10044fc4 +10037064: 1004e01c .word 0x1004e01c + +10037068 : +10037068: b508 push {r3, lr} +1003706a: 1c43 adds r3, r0, #1 +1003706c: d105 bne.n 1003707a +1003706e: e8bd 4008 ldmia.w sp!, {r3, lr} +10037072: 4807 ldr r0, [pc, #28] ; (10037090 ) +10037074: 4907 ldr r1, [pc, #28] ; (10037094 ) +10037076: f7e3 bd83 b.w 1001ab80 +1003707a: 2218 movs r2, #24 +1003707c: fb02 f300 mul.w r3, r2, r0 +10037080: 4a05 ldr r2, [pc, #20] ; (10037098 ) +10037082: 4608 mov r0, r1 +10037084: 58d3 ldr r3, [r2, r3] +10037086: 61cb str r3, [r1, #28] +10037088: 6a9a ldr r2, [r3, #40] ; 0x28 +1003708a: 4619 mov r1, r3 +1003708c: 4790 blx r2 +1003708e: bd08 pop {r3, pc} +10037090: 10040203 .word 0x10040203 +10037094: 100424d3 .word 0x100424d3 +10037098: 1004e03c .word 0x1004e03c + +1003709c : +1003709c: b570 push {r4, r5, r6, lr} +1003709e: 4604 mov r4, r0 +100370a0: b928 cbnz r0, 100370ae +100370a2: 4825 ldr r0, [pc, #148] ; (10037138 ) +100370a4: 4925 ldr r1, [pc, #148] ; (1003713c ) +100370a6: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +100370aa: f7e3 bd69 b.w 1001ab80 +100370ae: 69c0 ldr r0, [r0, #28] +100370b0: f7ff fecc bl 10036e4c +100370b4: 1c43 adds r3, r0, #1 +100370b6: 4605 mov r5, r0 +100370b8: d0f3 beq.n 100370a2 +100370ba: 4e21 ldr r6, [pc, #132] ; (10037140 ) +100370bc: f7e0 f965 bl 1001738a +100370c0: 2318 movs r3, #24 +100370c2: fb03 6305 mla r3, r3, r5, r6 +100370c6: 7c1a ldrb r2, [r3, #16] +100370c8: b18a cbz r2, 100370ee +100370ca: 68da ldr r2, [r3, #12] +100370cc: 3201 adds r2, #1 +100370ce: 60da str r2, [r3, #12] +100370d0: f7e0 f95d bl 1001738e +100370d4: 6921 ldr r1, [r4, #16] +100370d6: 7b0b ldrb r3, [r1, #12] +100370d8: 2b08 cmp r3, #8 +100370da: d011 beq.n 10037100 +100370dc: 2318 movs r3, #24 +100370de: fb03 6305 mla r3, r3, r5, r6 +100370e2: 4628 mov r0, r5 +100370e4: 605c str r4, [r3, #4] +100370e6: 6a21 ldr r1, [r4, #32] +100370e8: f7dd fbb8 bl 1001485c +100370ec: e011 b.n 10037112 +100370ee: 4620 mov r0, r4 +100370f0: 69e1 ldr r1, [r4, #28] +100370f2: f7ff fb87 bl 10036804 +100370f6: 4911 ldr r1, [pc, #68] ; (1003713c ) +100370f8: 4812 ldr r0, [pc, #72] ; (10037144 ) +100370fa: f7e3 fd41 bl 1001ab80 +100370fe: e017 b.n 10037130 +10037100: 7b4b ldrb r3, [r1, #13] +10037102: 2b00 cmp r3, #0 +10037104: d1ea bne.n 100370dc +10037106: 4628 mov r0, r5 +10037108: 311e adds r1, #30 +1003710a: f7dd fb7d bl 10014808 +1003710e: 2800 cmp r0, #0 +10037110: d1e4 bne.n 100370dc +10037112: 4620 mov r0, r4 +10037114: 69e1 ldr r1, [r4, #28] +10037116: f7ff fb75 bl 10036804 +1003711a: 2318 movs r3, #24 +1003711c: fb03 6505 mla r5, r3, r5, r6 +10037120: 2300 movs r3, #0 +10037122: 606b str r3, [r5, #4] +10037124: 3508 adds r5, #8 +10037126: f7e0 f930 bl 1001738a +1003712a: 686b ldr r3, [r5, #4] +1003712c: 3b01 subs r3, #1 +1003712e: 606b str r3, [r5, #4] +10037130: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10037134: f7e0 b92b b.w 1001738e +10037138: 10040142 .word 0x10040142 +1003713c: 100428de .word 0x100428de +10037140: 1004e03c .word 0x1004e03c +10037144: 10040203 .word 0x10040203 + +10037148 : +10037148: f7fd bc5a b.w 10034a00 + +1003714c : +1003714c: 4b0a ldr r3, [pc, #40] ; (10037178 ) +1003714e: 4a0b ldr r2, [pc, #44] ; (1003717c ) +10037150: b2c0 uxtb r0, r0 +10037152: 7018 strb r0, [r3, #0] +10037154: 6813 ldr r3, [r2, #0] +10037156: b12b cbz r3, 10037164 +10037158: 691b ldr r3, [r3, #16] +1003715a: 681b ldr r3, [r3, #0] +1003715c: f503 539c add.w r3, r3, #4992 ; 0x1380 +10037160: f883 0051 strb.w r0, [r3, #81] ; 0x51 +10037164: 6993 ldr r3, [r2, #24] +10037166: b12b cbz r3, 10037174 +10037168: 691b ldr r3, [r3, #16] +1003716a: 681b ldr r3, [r3, #0] +1003716c: f503 539c add.w r3, r3, #4992 ; 0x1380 +10037170: f883 0051 strb.w r0, [r3, #81] ; 0x51 +10037174: 2000 movs r0, #0 +10037176: 4770 bx lr +10037178: 1004de08 .word 0x1004de08 +1003717c: 1004e03c .word 0x1004e03c + +10037180 : +10037180: b538 push {r3, r4, r5, lr} +10037182: 2205 movs r2, #5 +10037184: 4604 mov r4, r0 +10037186: 460d mov r5, r1 +10037188: 4608 mov r0, r1 +1003718a: 491e ldr r1, [pc, #120] ; (10037204 ) +1003718c: f7e3 fd1c bl 1001abc8 +10037190: 4b1d ldr r3, [pc, #116] ; (10037208 ) +10037192: 2800 cmp r0, #0 +10037194: bf14 ite ne +10037196: 2018 movne r0, #24 +10037198: 2000 moveq r0, #0 +1003719a: 5818 ldr r0, [r3, r0] +1003719c: b350 cbz r0, 100371f4 +1003719e: 6903 ldr r3, [r0, #16] +100371a0: f641 0268 movw r2, #6248 ; 0x1868 +100371a4: 681b ldr r3, [r3, #0] +100371a6: 5c9a ldrb r2, [r3, r2] +100371a8: b912 cbnz r2, 100371b0 +100371aa: f641 025c movw r2, #6236 ; 0x185c +100371ae: 589b ldr r3, [r3, r2] +100371b0: f503 53a0 add.w r3, r3, #5120 ; 0x1400 +100371b4: 69db ldr r3, [r3, #28] +100371b6: f1b3 4f00 cmp.w r3, #2147483648 ; 0x80000000 +100371ba: d10d bne.n 100371d8 +100371bc: f648 3306 movw r3, #35590 ; 0x8b06 +100371c0: 429c cmp r4, r3 +100371c2: d01b beq.n 100371fc +100371c4: f648 3314 movw r3, #35604 ; 0x8b14 +100371c8: 429c cmp r4, r3 +100371ca: d017 beq.n 100371fc +100371cc: f024 0202 bic.w r2, r4, #2 +100371d0: f648 3318 movw r3, #35608 ; 0x8b18 +100371d4: 429a cmp r2, r3 +100371d6: d011 beq.n 100371fc +100371d8: f5a4 4309 sub.w r3, r4, #35072 ; 0x8900 +100371dc: 3bf0 subs r3, #240 ; 0xf0 +100371de: 2b0f cmp r3, #15 +100371e0: d903 bls.n 100371ea +100371e2: f5a4 430b sub.w r3, r4, #35584 ; 0x8b00 +100371e6: 2bff cmp r3, #255 ; 0xff +100371e8: d808 bhi.n 100371fc +100371ea: 6ac3 ldr r3, [r0, #44] ; 0x2c +100371ec: 4629 mov r1, r5 +100371ee: 4622 mov r2, r4 +100371f0: 4798 blx r3 +100371f2: bd38 pop {r3, r4, r5, pc} +100371f4: 4805 ldr r0, [pc, #20] ; (1003720c ) +100371f6: 4906 ldr r1, [pc, #24] ; (10037210 ) +100371f8: f7e3 fcc2 bl 1001ab80 +100371fc: f04f 30ff mov.w r0, #4294967295 +10037200: bd38 pop {r3, r4, r5, pc} +10037202: bf00 nop +10037204: 1003fb87 .word 0x1003fb87 +10037208: 1004e03c .word 0x1004e03c +1003720c: 10040203 .word 0x10040203 +10037210: 10042910 .word 0x10042910 + +10037214 : +10037214: 2801 cmp r0, #1 +10037216: d805 bhi.n 10037224 +10037218: 4b03 ldr r3, [pc, #12] ; (10037228 ) +1003721a: 2218 movs r2, #24 +1003721c: fb02 3000 mla r0, r2, r0, r3 +10037220: 7c00 ldrb r0, [r0, #16] +10037222: 4770 bx lr +10037224: 2000 movs r0, #0 +10037226: 4770 bx lr +10037228: 1004e03c .word 0x1004e03c + +1003722c : +1003722c: b510 push {r4, lr} +1003722e: 4b09 ldr r3, [pc, #36] ; (10037254 ) +10037230: 7c1c ldrb r4, [r3, #16] +10037232: b144 cbz r4, 10037246 +10037234: 681b ldr r3, [r3, #0] +10037236: 691b ldr r3, [r3, #16] +10037238: 681a ldr r2, [r3, #0] +1003723a: f241 3338 movw r3, #4920 ; 0x1338 +1003723e: 58d3 ldr r3, [r2, r3] +10037240: f8d3 0314 ldr.w r0, [r3, #788] ; 0x314 +10037244: bd10 pop {r4, pc} +10037246: 4904 ldr r1, [pc, #16] ; (10037258 ) +10037248: 4804 ldr r0, [pc, #16] ; (1003725c ) +1003724a: f7e3 fc99 bl 1001ab80 +1003724e: 4620 mov r0, r4 +10037250: bd10 pop {r4, pc} +10037252: bf00 nop +10037254: 1004e03c .word 0x1004e03c +10037258: 100428ec .word 0x100428ec +1003725c: 10040203 .word 0x10040203 + +10037260 : +10037260: b5f0 push {r4, r5, r6, r7, lr} +10037262: 4c20 ldr r4, [pc, #128] ; (100372e4 ) +10037264: b085 sub sp, #20 +10037266: 7c23 ldrb r3, [r4, #16] +10037268: 4605 mov r5, r0 +1003726a: 2b00 cmp r3, #0 +1003726c: d036 beq.n 100372dc +1003726e: 4a1e ldr r2, [pc, #120] ; (100372e8 ) +10037270: ab02 add r3, sp, #8 +10037272: 6810 ldr r0, [r2, #0] +10037274: 9001 str r0, [sp, #4] +10037276: f852 0f04 ldr.w r0, [r2, #4]! +1003727a: 6851 ldr r1, [r2, #4] +1003727c: 220d movs r2, #13 +1003727e: c303 stmia r3!, {r0, r1} +10037280: 6823 ldr r3, [r4, #0] +10037282: 2100 movs r1, #0 +10037284: 691b ldr r3, [r3, #16] +10037286: 681c ldr r4, [r3, #0] +10037288: f204 6739 addw r7, r4, #1593 ; 0x639 +1003728c: 4638 mov r0, r7 +1003728e: f7e0 f8df bl 10017450 +10037292: f015 0601 ands.w r6, r5, #1 +10037296: d005 beq.n 100372a4 +10037298: 4638 mov r0, r7 +1003729a: a901 add r1, sp, #4 +1003729c: 2204 movs r2, #4 +1003729e: f7e0 f8c7 bl 10017430 +100372a2: 2604 movs r6, #4 +100372a4: 07ab lsls r3, r5, #30 +100372a6: d507 bpl.n 100372b8 +100372a8: 19a0 adds r0, r4, r6 +100372aa: f200 6039 addw r0, r0, #1593 ; 0x639 +100372ae: a902 add r1, sp, #8 +100372b0: 2208 movs r2, #8 +100372b2: f7e0 f8bd bl 10017430 +100372b6: 3608 adds r6, #8 +100372b8: 23ff movs r3, #255 ; 0xff +100372ba: 4426 add r6, r4 +100372bc: f886 3639 strb.w r3, [r6, #1593] ; 0x639 +100372c0: f241 33b5 movw r3, #5045 ; 0x13b5 +100372c4: 54e5 strb r5, [r4, r3] +100372c6: f005 0508 and.w r5, r5, #8 +100372ca: f005 02ff and.w r2, r5, #255 ; 0xff +100372ce: f241 33cc movw r3, #5068 ; 0x13cc +100372d2: b105 cbz r5, 100372d6 +100372d4: 2201 movs r2, #1 +100372d6: 54e2 strb r2, [r4, r3] +100372d8: 2000 movs r0, #0 +100372da: e001 b.n 100372e0 +100372dc: f04f 30ff mov.w r0, #4294967295 +100372e0: b005 add sp, #20 +100372e2: bdf0 pop {r4, r5, r6, r7, pc} +100372e4: 1004e03c .word 0x1004e03c +100372e8: 100424a3 .word 0x100424a3 + +100372ec : +100372ec: 4b0f ldr r3, [pc, #60] ; (1003732c ) +100372ee: b510 push {r4, lr} +100372f0: 681b ldr r3, [r3, #0] +100372f2: b10b cbz r3, 100372f8 +100372f4: 691b ldr r3, [r3, #16] +100372f6: 681c ldr r4, [r3, #0] +100372f8: 6920 ldr r0, [r4, #16] +100372fa: 06c3 lsls r3, r0, #27 +100372fc: d501 bpl.n 10037302 +100372fe: 2000 movs r0, #0 +10037300: bd10 pop {r4, pc} +10037302: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c +10037306: 2b01 cmp r3, #1 +10037308: d906 bls.n 10037318 +1003730a: 2b05 cmp r3, #5 +1003730c: d004 beq.n 10037318 +1003730e: f7ff ff8d bl 1003722c +10037312: 2801 cmp r0, #1 +10037314: d106 bne.n 10037324 +10037316: 6920 ldr r0, [r4, #16] +10037318: f000 0001 and.w r0, r0, #1 +1003731c: f080 0001 eor.w r0, r0, #1 +10037320: 4240 negs r0, r0 +10037322: bd10 pop {r4, pc} +10037324: f04f 30ff mov.w r0, #4294967295 +10037328: bd10 pop {r4, pc} +1003732a: bf00 nop +1003732c: 1004e03c .word 0x1004e03c + +10037330 : +10037330: b508 push {r3, lr} +10037332: f241 7384 movw r3, #6020 ; 0x1784 +10037336: 58c3 ldr r3, [r0, r3] +10037338: 4798 blx r3 +1003733a: bd08 pop {r3, pc} + +1003733c : +1003733c: b508 push {r3, lr} +1003733e: f241 7390 movw r3, #6032 ; 0x1790 +10037342: 58c3 ldr r3, [r0, r3] +10037344: 4798 blx r3 +10037346: bd08 pop {r3, pc} + +10037348 : +10037348: 4603 mov r3, r0 +1003734a: f000 0001 and.w r0, r0, #1 +1003734e: f080 0001 eor.w r0, r0, #1 +10037352: 0799 lsls r1, r3, #30 +10037354: bf5c itt pl +10037356: 3001 addpl r0, #1 +10037358: b2c0 uxtbpl r0, r0 +1003735a: 075a lsls r2, r3, #29 +1003735c: bf5c itt pl +1003735e: 3001 addpl r0, #1 +10037360: b2c0 uxtbpl r0, r0 +10037362: 071b lsls r3, r3, #28 +10037364: bf5c itt pl +10037366: 3001 addpl r0, #1 +10037368: b2c0 uxtbpl r0, r0 +1003736a: 4770 bx lr + +1003736c : +1003736c: b513 push {r0, r1, r4, lr} +1003736e: f89d 4010 ldrb.w r4, [sp, #16] +10037372: 9400 str r4, [sp, #0] +10037374: f241 748c movw r4, #6028 ; 0x178c +10037378: 5904 ldr r4, [r0, r4] +1003737a: 47a0 blx r4 +1003737c: b002 add sp, #8 +1003737e: bd10 pop {r4, pc} + +10037380 : +10037380: b5f8 push {r3, r4, r5, r6, r7, lr} +10037382: 460e mov r6, r1 +10037384: 4615 mov r5, r2 +10037386: 461c mov r4, r3 +10037388: b983 cbnz r3, 100373ac +1003738a: 4b09 ldr r3, [pc, #36] ; (100373b0 ) +1003738c: 4620 mov r0, r4 +1003738e: 681f ldr r7, [r3, #0] +10037390: f7df fc78 bl 10016c84 +10037394: 462a mov r2, r5 +10037396: 4631 mov r1, r6 +10037398: 2307 movs r3, #7 +1003739a: 4638 mov r0, r7 +1003739c: f7e3 fb1e bl 1001a9dc +100373a0: b2c5 uxtb r5, r0 +100373a2: 4620 mov r0, r4 +100373a4: f7df fc88 bl 10016cb8 +100373a8: 4628 mov r0, r5 +100373aa: bdf8 pop {r3, r4, r5, r6, r7, pc} +100373ac: 2000 movs r0, #0 +100373ae: bdf8 pop {r3, r4, r5, r6, r7, pc} +100373b0: 400000e8 .word 0x400000e8 + +100373b4 : +100373b4: b5f8 push {r3, r4, r5, r6, r7, lr} +100373b6: 460e mov r6, r1 +100373b8: 4615 mov r5, r2 +100373ba: 461c mov r4, r3 +100373bc: b983 cbnz r3, 100373e0 +100373be: 4b09 ldr r3, [pc, #36] ; (100373e4 ) +100373c0: 4620 mov r0, r4 +100373c2: 681f ldr r7, [r3, #0] +100373c4: f7df fc5e bl 10016c84 +100373c8: 462a mov r2, r5 +100373ca: 4631 mov r1, r6 +100373cc: 2307 movs r3, #7 +100373ce: 4638 mov r0, r7 +100373d0: f7e3 fb14 bl 1001a9fc +100373d4: b2c5 uxtb r5, r0 +100373d6: 4620 mov r0, r4 +100373d8: f7df fc6e bl 10016cb8 +100373dc: 4628 mov r0, r5 +100373de: bdf8 pop {r3, r4, r5, r6, r7, pc} +100373e0: 2000 movs r0, #0 +100373e2: bdf8 pop {r3, r4, r5, r6, r7, pc} +100373e4: 400000e8 .word 0x400000e8 + +100373e8 : +100373e8: b513 push {r0, r1, r4, lr} +100373ea: f89d 4010 ldrb.w r4, [sp, #16] +100373ee: 9400 str r4, [sp, #0] +100373f0: f241 7494 movw r4, #6036 ; 0x1794 +100373f4: 5904 ldr r4, [r0, r4] +100373f6: 47a0 blx r4 +100373f8: b002 add sp, #8 +100373fa: bd10 pop {r4, pc} + +100373fc : +100373fc: 07c3 lsls r3, r0, #31 +100373fe: d403 bmi.n 10037408 +10037400: 780b ldrb r3, [r1, #0] +10037402: 7013 strb r3, [r2, #0] +10037404: 784b ldrb r3, [r1, #1] +10037406: 7053 strb r3, [r2, #1] +10037408: 0783 lsls r3, r0, #30 +1003740a: d403 bmi.n 10037414 +1003740c: 788b ldrb r3, [r1, #2] +1003740e: 7093 strb r3, [r2, #2] +10037410: 78cb ldrb r3, [r1, #3] +10037412: 70d3 strb r3, [r2, #3] +10037414: 0743 lsls r3, r0, #29 +10037416: d403 bmi.n 10037420 +10037418: 790b ldrb r3, [r1, #4] +1003741a: 7113 strb r3, [r2, #4] +1003741c: 794b ldrb r3, [r1, #5] +1003741e: 7153 strb r3, [r2, #5] +10037420: 0703 lsls r3, r0, #28 +10037422: d403 bmi.n 1003742c +10037424: 798b ldrb r3, [r1, #6] +10037426: 7193 strb r3, [r2, #6] +10037428: 79cb ldrb r3, [r1, #7] +1003742a: 71d3 strb r3, [r2, #7] +1003742c: 4770 bx lr + +1003742e : +1003742e: b513 push {r0, r1, r4, lr} +10037430: f89d 4010 ldrb.w r4, [sp, #16] +10037434: 9400 str r4, [sp, #0] +10037436: f241 7498 movw r4, #6040 ; 0x1798 +1003743a: 5904 ldr r4, [r0, r4] +1003743c: 47a0 blx r4 +1003743e: b002 add sp, #8 +10037440: bd10 pop {r4, pc} + +10037442 : +10037442: b538 push {r3, r4, r5, lr} +10037444: 2201 movs r2, #1 +10037446: 460d mov r5, r1 +10037448: 2100 movs r1, #0 +1003744a: 4604 mov r4, r0 +1003744c: f7ff ff70 bl 10037330 +10037450: 2100 movs r1, #0 +10037452: 460a mov r2, r1 +10037454: 4620 mov r0, r4 +10037456: f7ff ff71 bl 1003733c +1003745a: 2100 movs r1, #0 +1003745c: 8028 strh r0, [r5, #0] +1003745e: 460a mov r2, r1 +10037460: 4620 mov r0, r4 +10037462: f7ff ff65 bl 10037330 +10037466: 2001 movs r0, #1 +10037468: bd38 pop {r3, r4, r5, pc} + +1003746a : +1003746a: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +1003746e: b085 sub sp, #20 +10037470: 2400 movs r4, #0 +10037472: 4699 mov r9, r3 +10037474: ab04 add r3, sp, #16 +10037476: f823 4d02 strh.w r4, [r3, #-2]! +1003747a: 4688 mov r8, r1 +1003747c: 4617 mov r7, r2 +1003747e: 9400 str r4, [sp, #0] +10037480: 2204 movs r2, #4 +10037482: 4621 mov r1, r4 +10037484: 4605 mov r5, r0 +10037486: f7ff ff71 bl 1003736c +1003748a: f8bd 300e ldrh.w r3, [sp, #14] +1003748e: eb08 0207 add.w r2, r8, r7 +10037492: 429a cmp r2, r3 +10037494: dc16 bgt.n 100374c4 +10037496: 4628 mov r0, r5 +10037498: 4621 mov r1, r4 +1003749a: 2201 movs r2, #1 +1003749c: f7ff ff48 bl 10037330 +100374a0: f241 7388 movw r3, #6024 ; 0x1788 +100374a4: 58ee ldr r6, [r5, r3] +100374a6: 4628 mov r0, r5 +100374a8: 4621 mov r1, r4 +100374aa: 4642 mov r2, r8 +100374ac: 463b mov r3, r7 +100374ae: f8cd 9000 str.w r9, [sp] +100374b2: 9401 str r4, [sp, #4] +100374b4: 47b0 blx r6 +100374b6: 4628 mov r0, r5 +100374b8: 4621 mov r1, r4 +100374ba: 4622 mov r2, r4 +100374bc: f7ff ff38 bl 10037330 +100374c0: 2001 movs r0, #1 +100374c2: e000 b.n 100374c6 +100374c4: 4620 mov r0, r4 +100374c6: b005 add sp, #20 +100374c8: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + +100374cc : +100374cc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +100374d0: b087 sub sp, #28 +100374d2: 2400 movs r4, #0 +100374d4: 4698 mov r8, r3 +100374d6: ab06 add r3, sp, #24 +100374d8: f823 4d0a strh.w r4, [r3, #-10]! +100374dc: 460e mov r6, r1 +100374de: 4617 mov r7, r2 +100374e0: 9400 str r4, [sp, #0] +100374e2: 4621 mov r1, r4 +100374e4: 2204 movs r2, #4 +100374e6: 4682 mov sl, r0 +100374e8: f7ff ff40 bl 1003736c +100374ec: f8bd 000e ldrh.w r0, [sp, #14] +100374f0: 19f3 adds r3, r6, r7 +100374f2: 4283 cmp r3, r0 +100374f4: dd01 ble.n 100374fa +100374f6: 2000 movs r0, #0 +100374f8: e0a5 b.n 10037646 +100374fa: f7e0 f969 bl 100177d0 +100374fe: 4605 mov r5, r0 +10037500: 2800 cmp r0, #0 +10037502: d0f8 beq.n 100374f6 +10037504: 4650 mov r0, sl +10037506: 4621 mov r1, r4 +10037508: f8bd 200e ldrh.w r2, [sp, #14] +1003750c: 462b mov r3, r5 +1003750e: f7ff ffac bl 1003746a +10037512: 4681 mov r9, r0 +10037514: 2800 cmp r0, #0 +10037516: f000 8090 beq.w 1003763a +1003751a: 2101 movs r1, #1 +1003751c: 460a mov r2, r1 +1003751e: 4650 mov r0, sl +10037520: f7ff ff06 bl 10037330 +10037524: a804 add r0, sp, #16 +10037526: 21ff movs r1, #255 ; 0xff +10037528: 2208 movs r2, #8 +1003752a: f7df ff91 bl 10017450 +1003752e: f016 0401 ands.w r4, r6, #1 +10037532: f3c6 0bc7 ubfx fp, r6, #3, #8 +10037536: f006 0307 and.w r3, r6, #7 +1003753a: d019 beq.n 10037570 +1003753c: f898 0000 ldrb.w r0, [r8] +10037540: 5daa ldrb r2, [r5, r6] +10037542: 4282 cmp r2, r0 +10037544: d010 beq.n 10037568 +10037546: 2101 movs r1, #1 +10037548: 105a asrs r2, r3, #1 +1003754a: fa01 f202 lsl.w r2, r1, r2 +1003754e: 19a9 adds r1, r5, r6 +10037550: f811 4c01 ldrb.w r4, [r1, #-1] +10037554: a906 add r1, sp, #24 +10037556: 4419 add r1, r3 +10037558: 43d2 mvns r2, r2 +1003755a: f002 020f and.w r2, r2, #15 +1003755e: f801 4c09 strb.w r4, [r1, #-9] +10037562: f801 0c08 strb.w r0, [r1, #-8] +10037566: e000 b.n 1003756a +10037568: 220f movs r2, #15 +1003756a: 3301 adds r3, #1 +1003756c: 2401 movs r4, #1 +1003756e: e03f b.n 100375f0 +10037570: 220f movs r2, #15 +10037572: e03d b.n 100375f0 +10037574: f815 c001 ldrb.w ip, [r5, r1] +10037578: 4584 cmp ip, r0 +1003757a: d00e beq.n 1003759a +1003757c: ea4f 0c63 mov.w ip, r3, asr #1 +10037580: fa0e fe0c lsl.w lr, lr, ip +10037584: ea22 020e bic.w r2, r2, lr +10037588: f10d 0e18 add.w lr, sp, #24 +1003758c: 4473 add r3, lr +1003758e: f803 0c08 strb.w r0, [r3, #-8] +10037592: 4429 add r1, r5 +10037594: 7849 ldrb r1, [r1, #1] +10037596: f803 1c07 strb.w r1, [r3, #-7] +1003759a: 3401 adds r4, #1 +1003759c: 2a0f cmp r2, #15 +1003759e: d13b bne.n 10037618 +100375a0: 42bc cmp r4, r7 +100375a2: d045 beq.n 10037630 +100375a4: 2208 movs r2, #8 +100375a6: f10b 0b01 add.w fp, fp, #1 +100375aa: a804 add r0, sp, #16 +100375ac: 21ff movs r1, #255 ; 0xff +100375ae: f7df ff4f bl 10017450 +100375b2: fa5f fb8b uxtb.w fp, fp +100375b6: 2300 movs r3, #0 +100375b8: 220f movs r2, #15 +100375ba: 42a7 cmp r7, r4 +100375bc: d0ee beq.n 1003759c +100375be: ebc4 0e07 rsb lr, r4, r7 +100375c2: f1be 0f01 cmp.w lr, #1 +100375c6: f818 0004 ldrb.w r0, [r8, r4] +100375ca: eb06 0104 add.w r1, r6, r4 +100375ce: d0d1 beq.n 10037574 +100375d0: f815 e001 ldrb.w lr, [r5, r1] +100375d4: 4586 cmp lr, r0 +100375d6: d10e bne.n 100375f6 +100375d8: eb08 0e04 add.w lr, r8, r4 +100375dc: 4429 add r1, r5 +100375de: f89e e001 ldrb.w lr, [lr, #1] +100375e2: 7849 ldrb r1, [r1, #1] +100375e4: 458e cmp lr, r1 +100375e6: d106 bne.n 100375f6 +100375e8: 3402 adds r4, #2 +100375ea: 42bc cmp r4, r7 +100375ec: d0d6 beq.n 1003759c +100375ee: 3302 adds r3, #2 +100375f0: 2b07 cmp r3, #7 +100375f2: dde2 ble.n 100375ba +100375f4: e7d2 b.n 1003759c +100375f6: 1059 asrs r1, r3, #1 +100375f8: f04f 0e01 mov.w lr, #1 +100375fc: fa0e f101 lsl.w r1, lr, r1 +10037600: ea22 0201 bic.w r2, r2, r1 +10037604: a906 add r1, sp, #24 +10037606: 4419 add r1, r3 +10037608: f801 0c08 strb.w r0, [r1, #-8] +1003760c: eb08 0004 add.w r0, r8, r4 +10037610: 7840 ldrb r0, [r0, #1] +10037612: f801 0c07 strb.w r0, [r1, #-7] +10037616: e7e7 b.n 100375e8 +10037618: 2300 movs r3, #0 +1003761a: 9300 str r3, [sp, #0] +1003761c: 4650 mov r0, sl +1003761e: 4659 mov r1, fp +10037620: ab04 add r3, sp, #16 +10037622: f7ff fee1 bl 100373e8 +10037626: fa5f f980 uxtb.w r9, r0 +1003762a: f1b9 0f00 cmp.w r9, #0 +1003762e: d1b7 bne.n 100375a0 +10037630: 4650 mov r0, sl +10037632: 2101 movs r1, #1 +10037634: 2200 movs r2, #0 +10037636: f7ff fe7b bl 10037330 +1003763a: 4628 mov r0, r5 +1003763c: f8bd 100e ldrh.w r1, [sp, #14] +10037640: f7df fef3 bl 1001742a +10037644: 4648 mov r0, r9 +10037646: b007 add sp, #28 +10037648: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +1003764c : +1003764c: b573 push {r0, r1, r4, r5, r6, lr} +1003764e: 4605 mov r5, r0 +10037650: 2800 cmp r0, #0 +10037652: d058 beq.n 10037706 +10037654: 4b2d ldr r3, [pc, #180] ; (1003770c ) +10037656: 681a ldr r2, [r3, #0] +10037658: 461e mov r6, r3 +1003765a: b18a cbz r2, 10037680 +1003765c: 2400 movs r4, #0 +1003765e: 6832 ldr r2, [r6, #0] +10037660: eb04 0344 add.w r3, r4, r4, lsl #1 +10037664: 18d1 adds r1, r2, r3 +10037666: 5cd0 ldrb r0, [r2, r3] +10037668: 7849 ldrb r1, [r1, #1] +1003766a: f007 f999 bl 1003e9a0 <__key_2char2num_veneer> +1003766e: f80d 0004 strb.w r0, [sp, r4] +10037672: 3401 adds r4, #1 +10037674: 2c06 cmp r4, #6 +10037676: d1f2 bne.n 1003765e +10037678: 4628 mov r0, r5 +1003767a: 4669 mov r1, sp +1003767c: 4622 mov r2, r4 +1003767e: e002 b.n 10037686 +10037680: 4668 mov r0, sp +10037682: 4629 mov r1, r5 +10037684: 2206 movs r2, #6 +10037686: f7df fed3 bl 10017430 +1003768a: f89d 3000 ldrb.w r3, [sp] +1003768e: 2bff cmp r3, #255 ; 0xff +10037690: d114 bne.n 100376bc +10037692: f89d 3001 ldrb.w r3, [sp, #1] +10037696: 2bff cmp r3, #255 ; 0xff +10037698: d135 bne.n 10037706 +1003769a: f89d 3002 ldrb.w r3, [sp, #2] +1003769e: 2bff cmp r3, #255 ; 0xff +100376a0: d131 bne.n 10037706 +100376a2: f89d 3003 ldrb.w r3, [sp, #3] +100376a6: 2bff cmp r3, #255 ; 0xff +100376a8: d12d bne.n 10037706 +100376aa: f89d 3004 ldrb.w r3, [sp, #4] +100376ae: 2bff cmp r3, #255 ; 0xff +100376b0: d129 bne.n 10037706 +100376b2: f89d 3005 ldrb.w r3, [sp, #5] +100376b6: 2bff cmp r3, #255 ; 0xff +100376b8: d125 bne.n 10037706 +100376ba: e00f b.n 100376dc +100376bc: bb1b cbnz r3, 10037706 +100376be: f89d 3001 ldrb.w r3, [sp, #1] +100376c2: bb03 cbnz r3, 10037706 +100376c4: f89d 3002 ldrb.w r3, [sp, #2] +100376c8: b9eb cbnz r3, 10037706 +100376ca: f89d 3003 ldrb.w r3, [sp, #3] +100376ce: b9d3 cbnz r3, 10037706 +100376d0: f89d 3004 ldrb.w r3, [sp, #4] +100376d4: b9bb cbnz r3, 10037706 +100376d6: f89d 3005 ldrb.w r3, [sp, #5] +100376da: b9a3 cbnz r3, 10037706 +100376dc: 22e0 movs r2, #224 ; 0xe0 +100376de: f88d 2001 strb.w r2, [sp, #1] +100376e2: 224c movs r2, #76 ; 0x4c +100376e4: f88d 2002 strb.w r2, [sp, #2] +100376e8: 2287 movs r2, #135 ; 0x87 +100376ea: 2300 movs r3, #0 +100376ec: f88d 2003 strb.w r2, [sp, #3] +100376f0: 4628 mov r0, r5 +100376f2: 4669 mov r1, sp +100376f4: 2206 movs r2, #6 +100376f6: f88d 3000 strb.w r3, [sp] +100376fa: f88d 3004 strb.w r3, [sp, #4] +100376fe: f88d 3005 strb.w r3, [sp, #5] +10037702: f7df fe95 bl 10017430 +10037706: b002 add sp, #8 +10037708: bd70 pop {r4, r5, r6, pc} +1003770a: bf00 nop +1003770c: 1004de1c .word 0x1004de1c + +10037710 : +10037710: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +10037714: 4690 mov r8, r2 +10037716: 4a17 ldr r2, [pc, #92] ; (10037774 ) +10037718: 4607 mov r7, r0 +1003771a: 6810 ldr r0, [r2, #0] +1003771c: 4689 mov r9, r1 +1003771e: 9001 str r0, [sp, #4] +10037720: 461e mov r6, r3 +10037722: b10b cbz r3, 10037728 +10037724: 2300 movs r3, #0 +10037726: 6033 str r3, [r6, #0] +10037728: 2500 movs r5, #0 +1003772a: 454d cmp r5, r9 +1003772c: d21d bcs.n 1003776a +1003772e: 5d7b ldrb r3, [r7, r5] +10037730: 197c adds r4, r7, r5 +10037732: 2bdd cmp r3, #221 ; 0xdd +10037734: d115 bne.n 10037762 +10037736: 1ca8 adds r0, r5, #2 +10037738: 4438 add r0, r7 +1003773a: a901 add r1, sp, #4 +1003773c: 2204 movs r2, #4 +1003773e: f7df fe7f bl 10017440 +10037742: 2801 cmp r0, #1 +10037744: d10d bne.n 10037762 +10037746: f1b8 0f00 cmp.w r8, #0 +1003774a: d005 beq.n 10037758 +1003774c: 7862 ldrb r2, [r4, #1] +1003774e: 4640 mov r0, r8 +10037750: 4621 mov r1, r4 +10037752: 3202 adds r2, #2 +10037754: f7df fe6c bl 10017430 +10037758: b146 cbz r6, 1003776c +1003775a: 7863 ldrb r3, [r4, #1] +1003775c: 3302 adds r3, #2 +1003775e: 6033 str r3, [r6, #0] +10037760: e004 b.n 1003776c +10037762: 7863 ldrb r3, [r4, #1] +10037764: 3302 adds r3, #2 +10037766: 441d add r5, r3 +10037768: e7df b.n 1003772a +1003776a: 2400 movs r4, #0 +1003776c: 4620 mov r0, r4 +1003776e: b003 add sp, #12 +10037770: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +10037774: 10043df7 .word 0x10043df7 + +10037778 : +10037778: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} +1003777c: 4698 mov r8, r3 +1003777e: 4b1a ldr r3, [pc, #104] ; (100377e8 ) +10037780: 4606 mov r6, r0 +10037782: 9d0a ldr r5, [sp, #40] ; 0x28 +10037784: 6818 ldr r0, [r3, #0] +10037786: 4689 mov r9, r1 +10037788: 4692 mov sl, r2 +1003778a: 9001 str r0, [sp, #4] +1003778c: b10d cbz r5, 10037792 +1003778e: 2300 movs r3, #0 +10037790: 602b str r3, [r5, #0] +10037792: 7833 ldrb r3, [r6, #0] +10037794: 2bdd cmp r3, #221 ; 0xdd +10037796: d001 beq.n 1003779c +10037798: 2000 movs r0, #0 +1003779a: e021 b.n 100377e0 +1003779c: 1cb0 adds r0, r6, #2 +1003779e: a901 add r1, sp, #4 +100377a0: 2204 movs r2, #4 +100377a2: f7df fe4d bl 10017440 +100377a6: 2801 cmp r0, #1 +100377a8: d1f6 bne.n 10037798 +100377aa: 1db4 adds r4, r6, #6 +100377ac: 1ba3 subs r3, r4, r6 +100377ae: 454b cmp r3, r9 +100377b0: d2f2 bcs.n 10037798 +100377b2: 7863 ldrb r3, [r4, #1] +100377b4: 78a7 ldrb r7, [r4, #2] +100377b6: ea43 2707 orr.w r7, r3, r7, lsl #8 +100377ba: 7823 ldrb r3, [r4, #0] +100377bc: 3703 adds r7, #3 +100377be: 4553 cmp r3, sl +100377c0: b2bf uxth r7, r7 +100377c2: d10a bne.n 100377da +100377c4: f1b8 0f00 cmp.w r8, #0 +100377c8: d004 beq.n 100377d4 +100377ca: 4640 mov r0, r8 +100377cc: 4621 mov r1, r4 +100377ce: 463a mov r2, r7 +100377d0: f7df fe2e bl 10017430 +100377d4: b11d cbz r5, 100377de +100377d6: 602f str r7, [r5, #0] +100377d8: e001 b.n 100377de +100377da: 443c add r4, r7 +100377dc: e7e6 b.n 100377ac +100377de: 4620 mov r0, r4 +100377e0: b002 add sp, #8 +100377e2: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +100377e6: bf00 nop +100377e8: 10043df7 .word 0x10043df7 + +100377ec : +100377ec: b530 push {r4, r5, lr} +100377ee: f8d0 2094 ldr.w r2, [r0, #148] ; 0x94 +100377f2: b087 sub sp, #28 +100377f4: f100 05a4 add.w r5, r0, #164 ; 0xa4 +100377f8: 2300 movs r3, #0 +100377fa: 4604 mov r4, r0 +100377fc: a902 add r1, sp, #8 +100377fe: 4628 mov r0, r5 +10037800: 3a0c subs r2, #12 +10037802: 9303 str r3, [sp, #12] +10037804: 9304 str r3, [sp, #16] +10037806: 9305 str r3, [sp, #20] +10037808: f007 f85e bl 1003e8c8 <__rtw_get_wpa_ie_veneer> +1003780c: b160 cbz r0, 10037828 +1003780e: 9902 ldr r1, [sp, #8] +10037810: b151 cbz r1, 10037828 +10037812: ab05 add r3, sp, #20 +10037814: 9300 str r3, [sp, #0] +10037816: 3102 adds r1, #2 +10037818: aa03 add r2, sp, #12 +1003781a: ab04 add r3, sp, #16 +1003781c: f007 f87c bl 1003e918 <__rtw_parse_wpa_ie_veneer> +10037820: 2801 cmp r0, #1 +10037822: d015 beq.n 10037850 +10037824: 2000 movs r0, #0 +10037826: e01c b.n 10037862 +10037828: f8d4 2094 ldr.w r2, [r4, #148] ; 0x94 +1003782c: 4628 mov r0, r5 +1003782e: a902 add r1, sp, #8 +10037830: 3a0c subs r2, #12 +10037832: f007 f831 bl 1003e898 <__rtw_get_wpa2_ie_veneer> +10037836: 2800 cmp r0, #0 +10037838: d0f4 beq.n 10037824 +1003783a: 9902 ldr r1, [sp, #8] +1003783c: 2900 cmp r1, #0 +1003783e: d0f1 beq.n 10037824 +10037840: ab05 add r3, sp, #20 +10037842: 9300 str r3, [sp, #0] +10037844: 3102 adds r1, #2 +10037846: aa03 add r2, sp, #12 +10037848: ab04 add r3, sp, #16 +1003784a: f007 f845 bl 1003e8d8 <__rtw_parse_wpa2_ie_veneer> +1003784e: e7e7 b.n 10037820 +10037850: 9b04 ldr r3, [sp, #16] +10037852: f8c4 33a0 str.w r3, [r4, #928] ; 0x3a0 +10037856: 9b03 ldr r3, [sp, #12] +10037858: f8c4 339c str.w r3, [r4, #924] ; 0x39c +1003785c: 9b05 ldr r3, [sp, #20] +1003785e: f8c4 33a4 str.w r3, [r4, #932] ; 0x3a4 +10037862: b007 add sp, #28 +10037864: bd30 pop {r4, r5, pc} + +10037866 : +10037866: b570 push {r4, r5, r6, lr} +10037868: f100 0598 add.w r5, r0, #152 ; 0x98 +1003786c: b086 sub sp, #24 +1003786e: 2300 movs r3, #0 +10037870: 4604 mov r4, r0 +10037872: 4628 mov r0, r5 +10037874: f8ad 300a strh.w r3, [sp, #10] +10037878: 9303 str r3, [sp, #12] +1003787a: 9304 str r3, [sp, #16] +1003787c: f7e5 fea8 bl 1001d5d0 +10037880: 2202 movs r2, #2 +10037882: 4601 mov r1, r0 +10037884: f10d 000a add.w r0, sp, #10 +10037888: f7df fdd2 bl 10017430 +1003788c: f8bd 300a ldrh.w r3, [sp, #10] +10037890: f003 0310 and.w r3, r3, #16 +10037894: b29b uxth r3, r3 +10037896: b113 cbz r3, 1003789e +10037898: 2601 movs r6, #1 +1003789a: 6526 str r6, [r4, #80] ; 0x50 +1003789c: e002 b.n 100378a4 +1003789e: f884 3398 strb.w r3, [r4, #920] ; 0x398 +100378a2: 461e mov r6, r3 +100378a4: 2200 movs r2, #0 +100378a6: ab03 add r3, sp, #12 +100378a8: 9200 str r2, [sp, #0] +100378aa: 9301 str r3, [sp, #4] +100378ac: 4628 mov r0, r5 +100378ae: f8d4 1094 ldr.w r1, [r4, #148] ; 0x94 +100378b2: ab04 add r3, sp, #16 +100378b4: f007 f854 bl 1003e960 <__rtw_get_sec_ie_veneer> +100378b8: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 +100378bc: f104 05a4 add.w r5, r4, #164 ; 0xa4 +100378c0: 3b0c subs r3, #12 +100378c2: 4628 mov r0, r5 +100378c4: 2130 movs r1, #48 ; 0x30 +100378c6: aa04 add r2, sp, #16 +100378c8: f006 ffca bl 1003e860 <__rtw_get_ie_veneer> +100378cc: 9b04 ldr r3, [sp, #16] +100378ce: b903 cbnz r3, 100378d2 +100378d0: b108 cbz r0, 100378d6 +100378d2: 2303 movs r3, #3 +100378d4: e005 b.n 100378e2 +100378d6: 9b03 ldr r3, [sp, #12] +100378d8: b10b cbz r3, 100378de +100378da: 2302 movs r3, #2 +100378dc: e001 b.n 100378e2 +100378de: b116 cbz r6, 100378e6 +100378e0: 2301 movs r3, #1 +100378e2: f884 3398 strb.w r3, [r4, #920] ; 0x398 +100378e6: 4620 mov r0, r4 +100378e8: f7ff ff80 bl 100377ec +100378ec: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 +100378f0: 4628 mov r0, r5 +100378f2: 212d movs r1, #45 ; 0x2d +100378f4: aa05 add r2, sp, #20 +100378f6: 3b0c subs r3, #12 +100378f8: f006 ffb2 bl 1003e860 <__rtw_get_ie_veneer> +100378fc: b130 cbz r0, 1003790c +100378fe: 9b05 ldr r3, [sp, #20] +10037900: b123 cbz r3, 1003790c +10037902: 7883 ldrb r3, [r0, #2] +10037904: 78c2 ldrb r2, [r0, #3] +10037906: ea43 2302 orr.w r3, r3, r2, lsl #8 +1003790a: e000 b.n 1003790e +1003790c: 2300 movs r3, #0 +1003790e: f8a4 33a8 strh.w r3, [r4, #936] ; 0x3a8 +10037912: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 +10037916: 4628 mov r0, r5 +10037918: 213d movs r1, #61 ; 0x3d +1003791a: aa05 add r2, sp, #20 +1003791c: 3b0c subs r3, #12 +1003791e: f006 ff9f bl 1003e860 <__rtw_get_ie_veneer> +10037922: b118 cbz r0, 1003792c +10037924: 9b05 ldr r3, [sp, #20] +10037926: b10b cbz r3, 1003792c +10037928: 78c3 ldrb r3, [r0, #3] +1003792a: e000 b.n 1003792e +1003792c: 2300 movs r3, #0 +1003792e: f884 33aa strb.w r3, [r4, #938] ; 0x3aa +10037932: b006 add sp, #24 +10037934: bd70 pop {r4, r5, r6, pc} + +10037936 : +10037936: b570 push {r4, r5, r6, lr} +10037938: f500 539c add.w r3, r0, #4992 ; 0x1380 +1003793c: f893 2037 ldrb.w r2, [r3, #55] ; 0x37 +10037940: 2500 movs r5, #0 +10037942: f880 29b4 strb.w r2, [r0, #2484] ; 0x9b4 +10037946: f893 2038 ldrb.w r2, [r3, #56] ; 0x38 +1003794a: 2601 movs r6, #1 +1003794c: f880 29b5 strb.w r2, [r0, #2485] ; 0x9b5 +10037950: f880 29b6 strb.w r2, [r0, #2486] ; 0x9b6 +10037954: 221e movs r2, #30 +10037956: f8c0 2428 str.w r2, [r0, #1064] ; 0x428 +1003795a: f241 025c movw r2, #4188 ; 0x105c +1003795e: f8c0 64a0 str.w r6, [r0, #1184] ; 0x4a0 +10037962: f8c0 5458 str.w r5, [r0, #1112] ; 0x458 +10037966: 5485 strb r5, [r0, r2] +10037968: f893 1042 ldrb.w r1, [r3, #66] ; 0x42 +1003796c: f500 5283 add.w r2, r0, #4192 ; 0x1060 +10037970: 6011 str r1, [r2, #0] +10037972: f893 2043 ldrb.w r2, [r3, #67] ; 0x43 +10037976: f241 0364 movw r3, #4196 ; 0x1064 +1003797a: 50c2 str r2, [r0, r3] +1003797c: f241 036c movw r3, #4204 ; 0x106c +10037980: f8c0 5d08 str.w r5, [r0, #3336] ; 0xd08 +10037984: f8c0 5d0c str.w r5, [r0, #3340] ; 0xd0c +10037988: f8c0 5d10 str.w r5, [r0, #3344] ; 0xd10 +1003798c: f8c0 5d64 str.w r5, [r0, #3428] ; 0xd64 +10037990: f8c0 6d68 str.w r6, [r0, #3432] ; 0xd68 +10037994: 50c5 str r5, [r0, r3] +10037996: f241 0370 movw r3, #4208 ; 0x1070 +1003799a: 50c6 str r6, [r0, r3] +1003799c: 4604 mov r4, r0 +1003799e: f7fa fd5a bl 10032456 +100379a2: f641 035b movw r3, #6235 ; 0x185b +100379a6: 54e5 strb r5, [r4, r3] +100379a8: 22ff movs r2, #255 ; 0xff +100379aa: f641 0378 movw r3, #6264 ; 0x1878 +100379ae: 54e2 strb r2, [r4, r3] +100379b0: 4630 mov r0, r6 +100379b2: bd70 pop {r4, r5, r6, pc} + +100379b4 : +100379b4: b538 push {r3, r4, r5, lr} +100379b6: f641 0369 movw r3, #6249 ; 0x1869 +100379ba: 5cc3 ldrb r3, [r0, r3] +100379bc: 4604 mov r4, r0 +100379be: b923 cbnz r3, 100379ca +100379c0: f500 50a2 add.w r0, r0, #5184 ; 0x1440 +100379c4: 3018 adds r0, #24 +100379c6: f7ff fa3e bl 10036e46 +100379ca: f504 6006 add.w r0, r4, #2144 ; 0x860 +100379ce: f7ff fa3a bl 10036e46 +100379d2: 6923 ldr r3, [r4, #16] +100379d4: 06da lsls r2, r3, #27 +100379d6: d526 bpl.n 10037a26 +100379d8: f241 3338 movw r3, #4920 ; 0x1338 +100379dc: 58e0 ldr r0, [r4, r3] +100379de: f500 703d add.w r0, r0, #756 ; 0x2f4 +100379e2: f7ff fa30 bl 10036e46 +100379e6: f241 333c movw r3, #4924 ; 0x133c +100379ea: 58e0 ldr r0, [r4, r3] +100379ec: f500 703d add.w r0, r0, #756 ; 0x2f4 +100379f0: f7ff fa29 bl 10036e46 +100379f4: f504 539a add.w r3, r4, #4928 ; 0x1340 +100379f8: 6818 ldr r0, [r3, #0] +100379fa: f500 703d add.w r0, r0, #756 ; 0x2f4 +100379fe: f7ff fa22 bl 10036e46 +10037a02: f504 50b5 add.w r0, r4, #5792 ; 0x16a0 +10037a06: 301c adds r0, #28 +10037a08: f7ff fa1d bl 10036e46 +10037a0c: f504 60c4 add.w r0, r4, #1568 ; 0x620 +10037a10: f7ff fa19 bl 10036e46 +10037a14: f604 401c addw r0, r4, #3100 ; 0xc1c +10037a18: f7ff fa15 bl 10036e46 +10037a1c: 4620 mov r0, r4 +10037a1e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +10037a22: f7fa bd39 b.w 10032498 +10037a26: 071b lsls r3, r3, #28 +10037a28: d5eb bpl.n 10037a02 +10037a2a: f241 3538 movw r5, #4920 ; 0x1338 +10037a2e: 5960 ldr r0, [r4, r5] +10037a30: f500 703d add.w r0, r0, #756 ; 0x2f4 +10037a34: f7ff fa07 bl 10036e46 +10037a38: 5960 ldr r0, [r4, r5] +10037a3a: f500 7041 add.w r0, r0, #772 ; 0x304 +10037a3e: e7de b.n 100379fe + +10037a40 : +10037a40: b510 push {r4, lr} +10037a42: 4604 mov r4, r0 +10037a44: f7eb ff50 bl 100238e8 +10037a48: f504 60a2 add.w r0, r4, #1296 ; 0x510 +10037a4c: f7e6 fe5a bl 1001e704 +10037a50: f604 1008 addw r0, r4, #2312 ; 0x908 +10037a54: f7e4 fd85 bl 1001c562 +10037a58: f604 101c addw r0, r4, #2332 ; 0x91c +10037a5c: f7e4 fd80 bl 1001c560 +10037a60: f104 000c add.w r0, r4, #12 +10037a64: f7e5 fdd1 bl 1001d60a +10037a68: f8d4 3c60 ldr.w r3, [r4, #3168] ; 0xc60 +10037a6c: b13b cbz r3, 10037a7e +10037a6e: 4620 mov r0, r4 +10037a70: f7f0 fc76 bl 10028360 +10037a74: 4601 mov r1, r0 +10037a76: b110 cbz r0, 10037a7e +10037a78: 4620 mov r0, r4 +10037a7a: f7f0 fb38 bl 100280ee +10037a7e: f604 1058 addw r0, r4, #2392 ; 0x958 +10037a82: f7f2 f86f bl 10029b64 <_rtw_free_xmit_priv> +10037a86: f504 6046 add.w r0, r4, #3168 ; 0xc60 +10037a8a: f7f0 faa7 bl 10027fdc <_rtw_free_sta_priv> +10037a8e: f504 6035 add.w r0, r4, #2896 ; 0xb50 +10037a92: f7ee fffc bl 10026a8e <_rtw_free_recv_priv> +10037a96: 4620 mov r0, r4 +10037a98: f7ee fd5e bl 10026558 +10037a9c: f604 5008 addw r0, r4, #3336 ; 0xd08 +10037aa0: f7f0 f977 bl 10027d92 +10037aa4: 4620 mov r0, r4 +10037aa6: f7fa fce1 bl 1003246c +10037aaa: f641 035c movw r3, #6236 ; 0x185c +10037aae: 58e2 ldr r2, [r4, r3] +10037ab0: b10a cbz r2, 10037ab6 +10037ab2: 2100 movs r1, #0 +10037ab4: 50d1 str r1, [r2, r3] +10037ab6: 2001 movs r0, #1 +10037ab8: bd10 pop {r4, pc} + +10037aba : +10037aba: b538 push {r3, r4, r5, lr} +10037abc: 4604 mov r4, r0 +10037abe: f7fa fcca bl 10032456 +10037ac2: 2100 movs r1, #0 +10037ac4: f641 035b movw r3, #6235 ; 0x185b +10037ac8: 54e1 strb r1, [r4, r3] +10037aca: 231e movs r3, #30 +10037acc: f8c4 3428 str.w r3, [r4, #1064] ; 0x428 +10037ad0: f504 50a0 add.w r0, r4, #5120 ; 0x1400 +10037ad4: 2200 movs r2, #0 +10037ad6: f504 651c add.w r5, r4, #2496 ; 0x9c0 +10037ada: 2300 movs r3, #0 +10037adc: f880 1056 strb.w r1, [r0, #86] ; 0x56 +10037ae0: 6381 str r1, [r0, #56] ; 0x38 +10037ae2: 6701 str r1, [r0, #112] ; 0x70 +10037ae4: e9c5 2300 strd r2, r3, [r5] +10037ae8: f604 3598 addw r5, r4, #2968 ; 0xb98 +10037aec: e9c5 2300 strd r2, r3, [r5] +10037af0: 6923 ldr r3, [r4, #16] +10037af2: f884 1488 strb.w r1, [r4, #1160] ; 0x488 +10037af6: f423 6308 bic.w r3, r3, #2176 ; 0x880 +10037afa: 6123 str r3, [r4, #16] +10037afc: f880 1068 strb.w r1, [r0, #104] ; 0x68 +10037b00: f8c4 1648 str.w r1, [r4, #1608] ; 0x648 +10037b04: f604 401c addw r0, r4, #3100 ; 0xc1c +10037b08: f8d4 1c28 ldr.w r1, [r4, #3112] ; 0xc28 +10037b0c: f7ff f994 bl 10036e38 +10037b10: 2001 movs r0, #1 +10037b12: bd38 pop {r3, r4, r5, pc} + +10037b14 : +10037b14: b538 push {r3, r4, r5, lr} +10037b16: 4604 mov r4, r0 +10037b18: f600 1008 addw r0, r0, #2312 ; 0x908 +10037b1c: f7e4 fd19 bl 1001c552 +10037b20: b908 cbnz r0, 10037b26 +10037b22: 2500 movs r5, #0 +10037b24: e03d b.n 10037ba2 +10037b26: f8c4 4918 str.w r4, [r4, #2328] ; 0x918 +10037b2a: f604 101c addw r0, r4, #2332 ; 0x91c +10037b2e: f7e4 fd15 bl 1001c55c +10037b32: 2800 cmp r0, #0 +10037b34: d0f5 beq.n 10037b22 +10037b36: 4620 mov r0, r4 +10037b38: f7f0 f8f2 bl 10027d20 +10037b3c: 2800 cmp r0, #0 +10037b3e: d0f0 beq.n 10037b22 +10037b40: 4620 mov r0, r4 +10037b42: f7e5 fd56 bl 1001d5f2 +10037b46: 2800 cmp r0, #0 +10037b48: d0eb beq.n 10037b22 +10037b4a: 4620 mov r0, r4 +10037b4c: f7eb feb2 bl 100238b4 +10037b50: 2800 cmp r0, #0 +10037b52: d0e6 beq.n 10037b22 +10037b54: 4620 mov r0, r4 +10037b56: f7eb fce1 bl 1002351c +10037b5a: 2800 cmp r0, #0 +10037b5c: d0e1 beq.n 10037b22 +10037b5e: f604 1058 addw r0, r4, #2392 ; 0x958 +10037b62: 4621 mov r1, r4 +10037b64: f7f2 f870 bl 10029c48 <_rtw_init_xmit_priv> +10037b68: 2800 cmp r0, #0 +10037b6a: d0da beq.n 10037b22 +10037b6c: f504 6035 add.w r0, r4, #2896 ; 0xb50 +10037b70: 4621 mov r1, r4 +10037b72: f7ee fe45 bl 10026800 <_rtw_init_recv_priv> +10037b76: 2800 cmp r0, #0 +10037b78: d0d3 beq.n 10037b22 +10037b7a: 4620 mov r0, r4 +10037b7c: f7f0 f973 bl 10027e66 <_rtw_init_sta_priv> +10037b80: 2800 cmp r0, #0 +10037b82: d0ce beq.n 10037b22 +10037b84: f8c4 4cc0 str.w r4, [r4, #3264] ; 0xcc0 +10037b88: 4620 mov r0, r4 +10037b8a: f7f0 fbd1 bl 10028330 +10037b8e: 4620 mov r0, r4 +10037b90: f7ee fc7a bl 10026488 +10037b94: 4620 mov r0, r4 +10037b96: f7ff fece bl 10037936 +10037b9a: 4605 mov r5, r0 +10037b9c: 4620 mov r0, r4 +10037b9e: f7fa fc70 bl 10032482 +10037ba2: 4628 mov r0, r5 +10037ba4: bd38 pop {r3, r4, r5, pc} + ... + +10037ba8 : +10037ba8: b537 push {r0, r1, r2, r4, r5, lr} +10037baa: 4b26 ldr r3, [pc, #152] ; (10037c44 ) +10037bac: 4604 mov r4, r0 +10037bae: f500 50bf add.w r0, r0, #6112 ; 0x17e0 +10037bb2: e88d 0018 stmia.w sp, {r3, r4} +10037bb6: 4924 ldr r1, [pc, #144] ; (10037c48 ) +10037bb8: f44f 62b8 mov.w r2, #1472 ; 0x5c0 +10037bbc: 2301 movs r3, #1 +10037bbe: 301c adds r0, #28 +10037bc0: f7df fe34 bl 1001782c +10037bc4: 4b21 ldr r3, [pc, #132] ; (10037c4c ) +10037bc6: 4605 mov r5, r0 +10037bc8: f504 50c0 add.w r0, r4, #6144 ; 0x1800 +10037bcc: e88d 0018 stmia.w sp, {r3, r4} +10037bd0: 3014 adds r0, #20 +10037bd2: 491f ldr r1, [pc, #124] ; (10037c50 ) +10037bd4: f44f 7280 mov.w r2, #256 ; 0x100 +10037bd8: 2301 movs r3, #1 +10037bda: f7df fe27 bl 1001782c +10037bde: 2801 cmp r0, #1 +10037be0: d103 bne.n 10037bea +10037be2: 1e6b subs r3, r5, #1 +10037be4: 425d negs r5, r3 +10037be6: 415d adcs r5, r3 +10037be8: e000 b.n 10037bec +10037bea: 2500 movs r5, #0 +10037bec: 4b19 ldr r3, [pc, #100] ; (10037c54 ) +10037bee: f504 50be add.w r0, r4, #6080 ; 0x17c0 +10037bf2: e88d 0018 stmia.w sp, {r3, r4} +10037bf6: 4918 ldr r1, [pc, #96] ; (10037c58 ) +10037bf8: f44f 7280 mov.w r2, #256 ; 0x100 +10037bfc: 2302 movs r3, #2 +10037bfe: 300c adds r0, #12 +10037c00: f7df fe14 bl 1001782c +10037c04: 4b15 ldr r3, [pc, #84] ; (10037c5c ) +10037c06: 2801 cmp r0, #1 +10037c08: f504 50bf add.w r0, r4, #6112 ; 0x17e0 +10037c0c: e88d 0018 stmia.w sp, {r3, r4} +10037c10: f100 0004 add.w r0, r0, #4 +10037c14: 4912 ldr r1, [pc, #72] ; (10037c60 ) +10037c16: f44f 7200 mov.w r2, #512 ; 0x200 +10037c1a: f04f 0302 mov.w r3, #2 +10037c1e: bf18 it ne +10037c20: 2500 movne r5, #0 +10037c22: f7df fe03 bl 1001782c +10037c26: 2801 cmp r0, #1 +10037c28: d105 bne.n 10037c36 +10037c2a: f504 50bf add.w r0, r4, #6112 ; 0x17e0 +10037c2e: 3010 adds r0, #16 +10037c30: f7df fc5a bl 100174e8 +10037c34: e000 b.n 10037c38 +10037c36: 2500 movs r5, #0 +10037c38: 4620 mov r0, r4 +10037c3a: f7fa fd0a bl 10032652 +10037c3e: 4628 mov r0, r5 +10037c40: b003 add sp, #12 +10037c42: bd30 pop {r4, r5, pc} +10037c44: 10027a91 .word 0x10027a91 +10037c48: 10042461 .word 0x10042461 +10037c4c: 1002a455 .word 0x1002a455 +10037c50: 10042472 .word 0x10042472 +10037c54: 1003bcc9 .word 0x1003bcc9 +10037c58: 10042483 .word 0x10042483 +10037c5c: 1001c69d .word 0x1001c69d +10037c60: 10042498 .word 0x10042498 + +10037c64 : +10037c64: b510 push {r4, lr} +10037c66: 4604 mov r4, r0 +10037c68: f500 50bf add.w r0, r0, #6112 ; 0x17e0 +10037c6c: 3004 adds r0, #4 +10037c6e: f7df fdeb bl 10017848 +10037c72: f504 50be add.w r0, r4, #6080 ; 0x17c0 +10037c76: 300c adds r0, #12 +10037c78: f7df fde6 bl 10017848 +10037c7c: f504 50bf add.w r0, r4, #6112 ; 0x17e0 +10037c80: 301c adds r0, #28 +10037c82: f7df fde1 bl 10017848 +10037c86: f504 50c0 add.w r0, r4, #6144 ; 0x1800 +10037c8a: 3014 adds r0, #20 +10037c8c: f7df fddc bl 10017848 +10037c90: 4620 mov r0, r4 +10037c92: e8bd 4010 ldmia.w sp!, {r4, lr} +10037c96: f7fa bce3 b.w 10032660 + +10037c9a : +10037c9a: b508 push {r3, lr} +10037c9c: 2200 movs r2, #0 +10037c9e: f8d0 3934 ldr.w r3, [r0, #2356] ; 0x934 +10037ca2: 6880 ldr r0, [r0, #8] +10037ca4: 4798 blx r3 +10037ca6: bd08 pop {r3, pc} + +10037ca8 : +10037ca8: b508 push {r3, lr} +10037caa: 2200 movs r2, #0 +10037cac: f8d0 3938 ldr.w r3, [r0, #2360] ; 0x938 +10037cb0: 6880 ldr r0, [r0, #8] +10037cb2: 4798 blx r3 +10037cb4: bd08 pop {r3, pc} + +10037cb6 : +10037cb6: b508 push {r3, lr} +10037cb8: 2200 movs r2, #0 +10037cba: f8d0 393c ldr.w r3, [r0, #2364] ; 0x93c +10037cbe: 6880 ldr r0, [r0, #8] +10037cc0: 4798 blx r3 +10037cc2: bd08 pop {r3, pc} + +10037cc4 : +10037cc4: b510 push {r4, lr} +10037cc6: 2300 movs r3, #0 +10037cc8: f8d0 4940 ldr.w r4, [r0, #2368] ; 0x940 +10037ccc: 6880 ldr r0, [r0, #8] +10037cce: 47a0 blx r4 +10037cd0: bd10 pop {r4, pc} + +10037cd2 : +10037cd2: b510 push {r4, lr} +10037cd4: 2300 movs r3, #0 +10037cd6: f8d0 4944 ldr.w r4, [r0, #2372] ; 0x944 +10037cda: 6880 ldr r0, [r0, #8] +10037cdc: 47a0 blx r4 +10037cde: bd10 pop {r4, pc} + +10037ce0 : +10037ce0: b510 push {r4, lr} +10037ce2: 2300 movs r3, #0 +10037ce4: f8d0 4948 ldr.w r4, [r0, #2376] ; 0x948 +10037ce8: 6880 ldr r0, [r0, #8] +10037cea: 47a0 blx r4 +10037cec: bd10 pop {r4, pc} + +10037cee : +10037cee: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +10037cf2: f100 0534 add.w r5, r0, #52 ; 0x34 +10037cf6: 4604 mov r4, r0 +10037cf8: a901 add r1, sp, #4 +10037cfa: f100 080c add.w r8, r0, #12 +10037cfe: 4628 mov r0, r5 +10037d00: f7df fc72 bl 100175e8 +10037d04: f06f 0201 mvn.w r2, #1 +10037d08: f8c4 2094 str.w r2, [r4, #148] ; 0x94 +10037d0c: 6922 ldr r2, [r4, #16] +10037d0e: 6ae3 ldr r3, [r4, #44] ; 0x2c +10037d10: f042 0280 orr.w r2, r2, #128 ; 0x80 +10037d14: 2601 movs r6, #1 +10037d16: 6122 str r2, [r4, #16] +10037d18: 61e3 str r3, [r4, #28] +10037d1a: 7566 strb r6, [r4, #21] +10037d1c: f104 002c add.w r0, r4, #44 ; 0x2c +10037d20: f7df fc3a bl 10017598 +10037d24: 4607 mov r7, r0 +10037d26: 42b7 cmp r7, r6 +10037d28: 4628 mov r0, r5 +10037d2a: a901 add r1, sp, #4 +10037d2c: d10f bne.n 10037d4e +10037d2e: f7df fc65 bl 100175fc +10037d32: 6923 ldr r3, [r4, #16] +10037d34: f023 0380 bic.w r3, r3, #128 ; 0x80 +10037d38: 6123 str r3, [r4, #16] +10037d3a: f894 3488 ldrb.w r3, [r4, #1160] ; 0x488 +10037d3e: b10b cbz r3, 10037d44 +10037d40: 2001 movs r0, #1 +10037d42: e022 b.n 10037d8a +10037d44: 4620 mov r0, r4 +10037d46: f104 014c add.w r1, r4, #76 ; 0x4c +10037d4a: 463a mov r2, r7 +10037d4c: e01b b.n 10037d86 +10037d4e: f7df fc55 bl 100175fc +10037d52: 4640 mov r0, r8 +10037d54: f7e6 f828 bl 1001dda8 +10037d58: 2801 cmp r0, #1 +10037d5a: d108 bne.n 10037d6e +10037d5c: 2300 movs r3, #0 +10037d5e: 7563 strb r3, [r4, #21] +10037d60: f204 402c addw r0, r4, #1068 ; 0x42c +10037d64: f641 1164 movw r1, #6500 ; 0x1964 +10037d68: f7ff f866 bl 10036e38 +10037d6c: e7e8 b.n 10037d40 +10037d6e: 6923 ldr r3, [r4, #16] +10037d70: f023 0380 bic.w r3, r3, #128 ; 0x80 +10037d74: 6123 str r3, [r4, #16] +10037d76: f894 3488 ldrb.w r3, [r4, #1160] ; 0x488 +10037d7a: 2b00 cmp r3, #0 +10037d7c: d1e0 bne.n 10037d40 +10037d7e: 4620 mov r0, r4 +10037d80: f104 014c add.w r1, r4, #76 ; 0x4c +10037d84: 4632 mov r2, r6 +10037d86: f7e5 f8f6 bl 1001cf76 +10037d8a: b002 add sp, #8 +10037d8c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10037d90 : +10037d90: b5f0 push {r4, r5, r6, r7, lr} +10037d92: 2600 movs r6, #0 +10037d94: b091 sub sp, #68 ; 0x44 +10037d96: 460c mov r4, r1 +10037d98: 4605 mov r5, r0 +10037d9a: 4631 mov r1, r6 +10037d9c: a806 add r0, sp, #24 +10037d9e: 2228 movs r2, #40 ; 0x28 +10037da0: 9605 str r6, [sp, #20] +10037da2: f7df fb55 bl 10017450 +10037da6: 7823 ldrb r3, [r4, #0] +10037da8: b953 cbnz r3, 10037dc0 +10037daa: 7863 ldrb r3, [r4, #1] +10037dac: b9cb cbnz r3, 10037de2 +10037dae: 78a3 ldrb r3, [r4, #2] +10037db0: b9bb cbnz r3, 10037de2 +10037db2: 78e3 ldrb r3, [r4, #3] +10037db4: b9ab cbnz r3, 10037de2 +10037db6: 7923 ldrb r3, [r4, #4] +10037db8: b99b cbnz r3, 10037de2 +10037dba: 7963 ldrb r3, [r4, #5] +10037dbc: b98b cbnz r3, 10037de2 +10037dbe: e087 b.n 10037ed0 +10037dc0: 2bff cmp r3, #255 ; 0xff +10037dc2: d10e bne.n 10037de2 +10037dc4: 7863 ldrb r3, [r4, #1] +10037dc6: 2bff cmp r3, #255 ; 0xff +10037dc8: d10b bne.n 10037de2 +10037dca: 78a3 ldrb r3, [r4, #2] +10037dcc: 2bff cmp r3, #255 ; 0xff +10037dce: d108 bne.n 10037de2 +10037dd0: 78e3 ldrb r3, [r4, #3] +10037dd2: 2bff cmp r3, #255 ; 0xff +10037dd4: d105 bne.n 10037de2 +10037dd6: 7923 ldrb r3, [r4, #4] +10037dd8: 2bff cmp r3, #255 ; 0xff +10037dda: d102 bne.n 10037de2 +10037ddc: 7963 ldrb r3, [r4, #5] +10037dde: 2bff cmp r3, #255 ; 0xff +10037de0: d078 beq.n 10037ed4 +10037de2: 4b4e ldr r3, [pc, #312] ; (10037f1c ) +10037de4: 681a ldr r2, [r3, #0] +10037de6: 461f mov r7, r3 +10037de8: b182 cbz r2, 10037e0c +10037dea: 484d ldr r0, [pc, #308] ; (10037f20 ) +10037dec: f7e2 fec8 bl 1001ab80 +10037df0: 78e0 ldrb r0, [r4, #3] +10037df2: 7821 ldrb r1, [r4, #0] +10037df4: 7862 ldrb r2, [r4, #1] +10037df6: 78a3 ldrb r3, [r4, #2] +10037df8: 9000 str r0, [sp, #0] +10037dfa: 7920 ldrb r0, [r4, #4] +10037dfc: 9001 str r0, [sp, #4] +10037dfe: 7960 ldrb r0, [r4, #5] +10037e00: 9002 str r0, [sp, #8] +10037e02: 4848 ldr r0, [pc, #288] ; (10037f24 ) +10037e04: f8d0 0120 ldr.w r0, [r0, #288] ; 0x120 +10037e08: f7e2 feba bl 1001ab80 +10037e0c: f105 060c add.w r6, r5, #12 +10037e10: a904 add r1, sp, #16 +10037e12: 4630 mov r0, r6 +10037e14: f7df fbe8 bl 100175e8 +10037e18: 692b ldr r3, [r5, #16] +10037e1a: 0519 lsls r1, r3, #20 +10037e1c: d40f bmi.n 10037e3e +10037e1e: 061a lsls r2, r3, #24 +10037e20: d45a bmi.n 10037ed8 +10037e22: f013 0f41 tst.w r3, #65 ; 0x41 +10037e26: d00a beq.n 10037e3e +10037e28: f105 009c add.w r0, r5, #156 ; 0x9c +10037e2c: 4621 mov r1, r4 +10037e2e: 2206 movs r2, #6 +10037e30: f7df fb06 bl 10017440 +10037e34: 2801 cmp r0, #1 +10037e36: d151 bne.n 10037edc +10037e38: 692b ldr r3, [r5, #16] +10037e3a: 071a lsls r2, r3, #28 +10037e3c: d54c bpl.n 10037ed8 +10037e3e: 79a3 ldrb r3, [r4, #6] +10037e40: 2b23 cmp r3, #35 ; 0x23 +10037e42: d12d bne.n 10037ea0 +10037e44: 79e3 ldrb r3, [r4, #7] +10037e46: 2b40 cmp r3, #64 ; 0x40 +10037e48: d12a bne.n 10037ea0 +10037e4a: a805 add r0, sp, #20 +10037e4c: f104 0108 add.w r1, r4, #8 +10037e50: 2204 movs r2, #4 +10037e52: f7df faed bl 10017430 +10037e56: 9b05 ldr r3, [sp, #20] +10037e58: b313 cbz r3, 10037ea0 +10037e5a: 683b ldr r3, [r7, #0] +10037e5c: b14b cbz r3, 10037e72 +10037e5e: 4830 ldr r0, [pc, #192] ; (10037f20 ) +10037e60: f7e2 fe8e bl 1001ab80 +10037e64: 4b2f ldr r3, [pc, #188] ; (10037f24 ) +10037e66: 9905 ldr r1, [sp, #20] +10037e68: f8d3 0124 ldr.w r0, [r3, #292] ; 0x124 +10037e6c: 3101 adds r1, #1 +10037e6e: f7e2 fe87 bl 1001ab80 +10037e72: 9905 ldr r1, [sp, #20] +10037e74: a807 add r0, sp, #28 +10037e76: f811 2b01 ldrb.w r2, [r1], #1 +10037e7a: 9206 str r2, [sp, #24] +10037e7c: f7df fad8 bl 10017430 +10037e80: f895 38f9 ldrb.w r3, [r5, #2297] ; 0x8f9 +10037e84: b163 cbz r3, 10037ea0 +10037e86: 9b05 ldr r3, [sp, #20] +10037e88: f605 0073 addw r0, r5, #2163 ; 0x873 +10037e8c: 781a ldrb r2, [r3, #0] +10037e8e: 1c59 adds r1, r3, #1 +10037e90: f7df face bl 10017430 +10037e94: 9b05 ldr r3, [sp, #20] +10037e96: 2200 movs r2, #0 +10037e98: 781b ldrb r3, [r3, #0] +10037e9a: 442b add r3, r5 +10037e9c: f883 2873 strb.w r2, [r3, #2163] ; 0x873 +10037ea0: f105 004c add.w r0, r5, #76 ; 0x4c +10037ea4: a906 add r1, sp, #24 +10037ea6: 2228 movs r2, #40 ; 0x28 +10037ea8: f7df fac2 bl 10017430 +10037eac: 4621 mov r1, r4 +10037eae: f105 0074 add.w r0, r5, #116 ; 0x74 +10037eb2: 2206 movs r2, #6 +10037eb4: f7df fabc bl 10017430 +10037eb8: 692b ldr r3, [r5, #16] +10037eba: 2401 movs r4, #1 +10037ebc: 0519 lsls r1, r3, #20 +10037ebe: f885 4438 strb.w r4, [r5, #1080] ; 0x438 +10037ec2: d522 bpl.n 10037f0a +10037ec4: 756c strb r4, [r5, #21] +10037ec6: 4630 mov r0, r6 +10037ec8: a904 add r1, sp, #16 +10037eca: f7df fb97 bl 100175fc +10037ece: e021 b.n 10037f14 +10037ed0: 461c mov r4, r3 +10037ed2: e01f b.n 10037f14 +10037ed4: 4634 mov r4, r6 +10037ed6: e01d b.n 10037f14 +10037ed8: 2401 movs r4, #1 +10037eda: e7f4 b.n 10037ec6 +10037edc: 4628 mov r0, r5 +10037ede: f7e4 fdf1 bl 1001cac4 +10037ee2: 692b ldr r3, [r5, #16] +10037ee4: 07db lsls r3, r3, #31 +10037ee6: d40c bmi.n 10037f02 +10037ee8: 4628 mov r0, r5 +10037eea: 2101 movs r1, #1 +10037eec: f7e5 fd44 bl 1001d978 +10037ef0: 692b ldr r3, [r5, #16] +10037ef2: 0658 lsls r0, r3, #25 +10037ef4: d5a3 bpl.n 10037e3e +10037ef6: f023 0340 bic.w r3, r3, #64 ; 0x40 +10037efa: f043 0320 orr.w r3, r3, #32 +10037efe: 612b str r3, [r5, #16] +10037f00: e79d b.n 10037e3e +10037f02: 4628 mov r0, r5 +10037f04: f7e5 fda5 bl 1001da52 +10037f08: e7ee b.n 10037ee8 +10037f0a: 4628 mov r0, r5 +10037f0c: f7ff feef bl 10037cee +10037f10: 4604 mov r4, r0 +10037f12: e7d8 b.n 10037ec6 +10037f14: 4620 mov r0, r4 +10037f16: b011 add sp, #68 ; 0x44 +10037f18: bdf0 pop {r4, r5, r6, r7, pc} +10037f1a: bf00 nop +10037f1c: 10044f38 .word 0x10044f38 +10037f20: 100429b1 .word 0x100429b1 +10037f24: 10043ac4 .word 0x10043ac4 + +10037f28 : +10037f28: 4b40 ldr r3, [pc, #256] ; (1003802c ) +10037f2a: b573 push {r0, r1, r4, r5, r6, lr} +10037f2c: 681b ldr r3, [r3, #0] +10037f2e: 4604 mov r4, r0 +10037f30: 460d mov r5, r1 +10037f32: b143 cbz r3, 10037f46 +10037f34: 483e ldr r0, [pc, #248] ; (10038030 ) +10037f36: f7e2 fe23 bl 1001ab80 +10037f3a: 4b3e ldr r3, [pc, #248] ; (10038034 ) +10037f3c: 1d29 adds r1, r5, #4 +10037f3e: f8d3 0124 ldr.w r0, [r3, #292] ; 0x124 +10037f42: f7e2 fe1d bl 1001ab80 +10037f46: f241 73c5 movw r3, #6085 ; 0x17c5 +10037f4a: 5ce3 ldrb r3, [r4, r3] +10037f4c: b333 cbz r3, 10037f9c +10037f4e: f104 060c add.w r6, r4, #12 +10037f52: a901 add r1, sp, #4 +10037f54: 4630 mov r0, r6 +10037f56: f7df fb47 bl 100175e8 +10037f5a: 6923 ldr r3, [r4, #16] +10037f5c: 0519 lsls r1, r3, #20 +10037f5e: d409 bmi.n 10037f74 +10037f60: 061a lsls r2, r3, #24 +10037f62: d415 bmi.n 10037f90 +10037f64: f003 0309 and.w r3, r3, #9 +10037f68: 2b09 cmp r3, #9 +10037f6a: d019 beq.n 10037fa0 +10037f6c: 6923 ldr r3, [r4, #16] +10037f6e: f013 0f41 tst.w r3, #65 ; 0x41 +10037f72: d120 bne.n 10037fb6 +10037f74: 4629 mov r1, r5 +10037f76: f104 004c add.w r0, r4, #76 ; 0x4c +10037f7a: 2228 movs r2, #40 ; 0x28 +10037f7c: f7df fa58 bl 10017430 +10037f80: 2300 movs r3, #0 +10037f82: f884 3438 strb.w r3, [r4, #1080] ; 0x438 +10037f86: 6923 ldr r3, [r4, #16] +10037f88: 0519 lsls r1, r3, #20 +10037f8a: d546 bpl.n 1003801a +10037f8c: 2301 movs r3, #1 +10037f8e: 7563 strb r3, [r4, #21] +10037f90: 2401 movs r4, #1 +10037f92: 4630 mov r0, r6 +10037f94: a901 add r1, sp, #4 +10037f96: f7df fb31 bl 100175fc +10037f9a: e043 b.n 10038024 +10037f9c: 461c mov r4, r3 +10037f9e: e041 b.n 10038024 +10037fa0: 4620 mov r0, r4 +10037fa2: f7e4 fd8f bl 1001cac4 +10037fa6: 4620 mov r0, r4 +10037fa8: f7e5 fd53 bl 1001da52 +10037fac: 4620 mov r0, r4 +10037fae: 2101 movs r1, #1 +10037fb0: f7e5 fce2 bl 1001d978 +10037fb4: e7da b.n 10037f6c +10037fb6: 6ce2 ldr r2, [r4, #76] ; 0x4c +10037fb8: 682b ldr r3, [r5, #0] +10037fba: 429a cmp r2, r3 +10037fbc: d116 bne.n 10037fec +10037fbe: 1d29 adds r1, r5, #4 +10037fc0: f104 0050 add.w r0, r4, #80 ; 0x50 +10037fc4: f7df fa3c bl 10017440 +10037fc8: 2801 cmp r0, #1 +10037fca: 4601 mov r1, r0 +10037fcc: d10e bne.n 10037fec +10037fce: 6923 ldr r3, [r4, #16] +10037fd0: 071a lsls r2, r3, #28 +10037fd2: d504 bpl.n 10037fde +10037fd4: 4620 mov r0, r4 +10037fd6: 460a mov r2, r1 +10037fd8: f7e4 ff98 bl 1001cf0c +10037fdc: e7ca b.n 10037f74 +10037fde: 4620 mov r0, r4 +10037fe0: f104 017c add.w r1, r4, #124 ; 0x7c +10037fe4: f7e5 fb15 bl 1001d612 +10037fe8: 2800 cmp r0, #0 +10037fea: d1d1 bne.n 10037f90 +10037fec: 4620 mov r0, r4 +10037fee: f7e4 fd69 bl 1001cac4 +10037ff2: 6923 ldr r3, [r4, #16] +10037ff4: 07db lsls r3, r3, #31 +10037ff6: d40c bmi.n 10038012 +10037ff8: 4620 mov r0, r4 +10037ffa: 2101 movs r1, #1 +10037ffc: f7e5 fcbc bl 1001d978 +10038000: 6923 ldr r3, [r4, #16] +10038002: 0658 lsls r0, r3, #25 +10038004: d5b6 bpl.n 10037f74 +10038006: f023 0340 bic.w r3, r3, #64 ; 0x40 +1003800a: f043 0320 orr.w r3, r3, #32 +1003800e: 6123 str r3, [r4, #16] +10038010: e7b0 b.n 10037f74 +10038012: 4620 mov r0, r4 +10038014: f7e5 fd1d bl 1001da52 +10038018: e7ee b.n 10037ff8 +1003801a: 4620 mov r0, r4 +1003801c: f7ff fe67 bl 10037cee +10038020: 4604 mov r4, r0 +10038022: e7b6 b.n 10037f92 +10038024: 4620 mov r0, r4 +10038026: b002 add sp, #8 +10038028: bd70 pop {r4, r5, r6, pc} +1003802a: bf00 nop +1003802c: 10044f38 .word 0x10044f38 +10038030: 100429b1 .word 0x100429b1 +10038034: 10043ac4 .word 0x10043ac4 + +10038038 : +10038038: f8d0 30f8 ldr.w r3, [r0, #248] ; 0xf8 +1003803c: b573 push {r0, r1, r4, r5, r6, lr} +1003803e: 428b cmp r3, r1 +10038040: 4604 mov r4, r0 +10038042: 460d mov r5, r1 +10038044: d046 beq.n 100380d4 +10038046: f100 060c add.w r6, r0, #12 +1003804a: 4630 mov r0, r6 +1003804c: a901 add r1, sp, #4 +1003804e: f7df facb bl 100175e8 +10038052: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 +10038056: 2b04 cmp r3, #4 +10038058: d106 bne.n 10038068 +1003805a: f04f 33ff mov.w r3, #4294967295 +1003805e: f8c4 3094 str.w r3, [r4, #148] ; 0x94 +10038062: 4620 mov r0, r4 +10038064: f7e4 f811 bl 1001c08a +10038068: 6923 ldr r3, [r4, #16] +1003806a: 07da lsls r2, r3, #31 +1003806c: d528 bpl.n 100380c0 +1003806e: 4620 mov r0, r4 +10038070: f7e4 fd28 bl 1001cac4 +10038074: 6923 ldr r3, [r4, #16] +10038076: f013 0f41 tst.w r3, #65 ; 0x41 +1003807a: d003 beq.n 10038084 +1003807c: 4620 mov r0, r4 +1003807e: 2101 movs r1, #1 +10038080: f7e5 fc7a bl 1001d978 +10038084: 6923 ldr r3, [r4, #16] +10038086: 07db lsls r3, r3, #31 +10038088: d51f bpl.n 100380ca +1003808a: 4620 mov r0, r4 +1003808c: f7e5 fce1 bl 1001da52 +10038090: 2d01 cmp r5, #1 +10038092: f8c4 50f8 str.w r5, [r4, #248] ; 0xf8 +10038096: d007 beq.n 100380a8 +10038098: d303 bcc.n 100380a2 +1003809a: 2d04 cmp r5, #4 +1003809c: d006 beq.n 100380ac +1003809e: 2300 movs r3, #0 +100380a0: e000 b.n 100380a4 +100380a2: 2320 movs r3, #32 +100380a4: 6123 str r3, [r4, #16] +100380a6: e006 b.n 100380b6 +100380a8: 2308 movs r3, #8 +100380aa: e7fb b.n 100380a4 +100380ac: 2310 movs r3, #16 +100380ae: 6123 str r3, [r4, #16] +100380b0: 4620 mov r0, r4 +100380b2: f7e3 ffbf bl 1001c034 +100380b6: 4630 mov r0, r6 +100380b8: a901 add r1, sp, #4 +100380ba: f7df fa9f bl 100175fc +100380be: e009 b.n 100380d4 +100380c0: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 +100380c4: 2b00 cmp r3, #0 +100380c6: d0d2 beq.n 1003806e +100380c8: e7d4 b.n 10038074 +100380ca: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 +100380ce: 2b01 cmp r3, #1 +100380d0: d9db bls.n 1003808a +100380d2: e7dd b.n 10038090 +100380d4: 2001 movs r0, #1 +100380d6: b002 add sp, #8 +100380d8: bd70 pop {r4, r5, r6, pc} + +100380da : +100380da: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +100380dc: 460e mov r6, r1 +100380de: 4617 mov r7, r2 +100380e0: 4604 mov r4, r0 +100380e2: b1f8 cbz r0, 10038124 +100380e4: f241 73c5 movw r3, #6085 ; 0x17c5 +100380e8: 5cc3 ldrb r3, [r0, r3] +100380ea: b12b cbz r3, 100380f8 +100380ec: 6903 ldr r3, [r0, #16] +100380ee: f413 6f08 tst.w r3, #2176 ; 0x880 +100380f2: d003 beq.n 100380fc +100380f4: 2401 movs r4, #1 +100380f6: e015 b.n 10038124 +100380f8: 461c mov r4, r3 +100380fa: e013 b.n 10038124 +100380fc: f890 3488 ldrb.w r3, [r0, #1160] ; 0x488 +10038100: 2b01 cmp r3, #1 +10038102: d0f9 beq.n 100380f8 +10038104: f104 050c add.w r5, r4, #12 +10038108: 4628 mov r0, r5 +1003810a: a901 add r1, sp, #4 +1003810c: f7df fa6c bl 100175e8 +10038110: 4620 mov r0, r4 +10038112: 4631 mov r1, r6 +10038114: 463a mov r2, r7 +10038116: f7e4 ff2e bl 1001cf76 +1003811a: a901 add r1, sp, #4 +1003811c: 4604 mov r4, r0 +1003811e: 4628 mov r0, r5 +10038120: f7df fa6c bl 100175fc +10038124: 4620 mov r0, r4 +10038126: b003 add sp, #12 +10038128: bdf0 pop {r4, r5, r6, r7, pc} + +1003812a : +1003812a: b508 push {r3, lr} +1003812c: 460b mov r3, r1 +1003812e: 2b03 cmp r3, #3 +10038130: f241 026c movw r2, #4204 ; 0x106c +10038134: 5083 str r3, [r0, r2] +10038136: bf84 itt hi +10038138: 2302 movhi r3, #2 +1003813a: f8c0 3d08 strhi.w r3, [r0, #3336] ; 0xd08 +1003813e: f600 5108 addw r1, r0, #3336 ; 0xd08 +10038142: f7e5 ff2f bl 1001dfa4 +10038146: 1e43 subs r3, r0, #1 +10038148: 4258 negs r0, r3 +1003814a: 4158 adcs r0, r3 +1003814c: bd08 pop {r3, pc} + +1003814e : +1003814e: b5f8 push {r3, r4, r5, r6, r7, lr} +10038150: 684d ldr r5, [r1, #4] +10038152: 4604 mov r4, r0 +10038154: f025 4540 bic.w r5, r5, #3221225472 ; 0xc0000000 +10038158: 2d04 cmp r5, #4 +1003815a: 460e mov r6, r1 +1003815c: dc25 bgt.n 100381aa +1003815e: 688a ldr r2, [r1, #8] +10038160: 2a05 cmp r2, #5 +10038162: d003 beq.n 1003816c +10038164: 2a0d cmp r2, #13 +10038166: d103 bne.n 10038170 +10038168: 2305 movs r3, #5 +1003816a: e002 b.n 10038172 +1003816c: 2301 movs r3, #1 +1003816e: e000 b.n 10038172 +10038170: 2300 movs r3, #0 +10038172: f604 5708 addw r7, r4, #3336 ; 0xd08 +10038176: eb07 1005 add.w r0, r7, r5, lsl #4 +1003817a: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c +1003817e: f106 010c add.w r1, r6, #12 +10038182: 300c adds r0, #12 +10038184: f7df f954 bl 10017430 +10038188: 68b3 ldr r3, [r6, #8] +1003818a: eb04 0285 add.w r2, r4, r5, lsl #2 +1003818e: f8c2 3d54 str.w r3, [r2, #3412] ; 0xd54 +10038192: 4620 mov r0, r4 +10038194: f8c4 5d10 str.w r5, [r4, #3344] ; 0xd10 +10038198: 4639 mov r1, r7 +1003819a: 462a mov r2, r5 +1003819c: 2301 movs r3, #1 +1003819e: f7e5 ff29 bl 1001dff4 +100381a2: 3000 adds r0, #0 +100381a4: bf18 it ne +100381a6: 2001 movne r0, #1 +100381a8: bdf8 pop {r3, r4, r5, r6, r7, pc} +100381aa: 2000 movs r0, #0 +100381ac: bdf8 pop {r3, r4, r5, r6, r7, pc} + +100381ae : +100381ae: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +100381b2: 6807 ldr r7, [r0, #0] +100381b4: 4604 mov r4, r0 +100381b6: 2600 movs r6, #0 +100381b8: 2e80 cmp r6, #128 ; 0x80 +100381ba: fa5f f886 uxtb.w r8, r6 +100381be: f04f 0500 mov.w r5, #0 +100381c2: d013 beq.n 100381ec +100381c4: b2ea uxtb r2, r5 +100381c6: 2a03 cmp r2, #3 +100381c8: bf0c ite eq +100381ca: 2380 moveq r3, #128 ; 0x80 +100381cc: 2300 movne r3, #0 +100381ce: 4638 mov r0, r7 +100381d0: 4641 mov r1, r8 +100381d2: f003 f922 bl 1003b41a +100381d6: 462a mov r2, r5 +100381d8: 4638 mov r0, r7 +100381da: 4631 mov r1, r6 +100381dc: 2300 movs r3, #0 +100381de: 3501 adds r5, #1 +100381e0: f003 f914 bl 1003b40c +100381e4: 2d10 cmp r5, #16 +100381e6: d1ed bne.n 100381c4 +100381e8: 3601 adds r6, #1 +100381ea: e7e5 b.n 100381b8 +100381ec: 2313 movs r3, #19 +100381ee: 2200 movs r2, #0 +100381f0: f884 317e strb.w r3, [r4, #382] ; 0x17e +100381f4: 4629 mov r1, r5 +100381f6: 2301 movs r3, #1 +100381f8: 3501 adds r5, #1 +100381fa: f884 317b strb.w r3, [r4, #379] ; 0x17b +100381fe: f884 31a3 strb.w r3, [r4, #419] ; 0x1a3 +10038202: f8a4 2188 strh.w r2, [r4, #392] ; 0x188 +10038206: f8a4 218a strh.w r2, [r4, #394] ; 0x18a +1003820a: f8a4 218c strh.w r2, [r4, #396] ; 0x18c +1003820e: f8a4 218e strh.w r2, [r4, #398] ; 0x18e +10038212: f8a4 2190 strh.w r2, [r4, #400] ; 0x190 +10038216: f8c4 2194 str.w r2, [r4, #404] ; 0x194 +1003821a: f8c4 21b0 str.w r2, [r4, #432] ; 0x1b0 +1003821e: f8a4 2198 strh.w r2, [r4, #408] ; 0x198 +10038222: f884 21b4 strb.w r2, [r4, #436] ; 0x1b4 +10038226: f884 217f strb.w r2, [r4, #383] ; 0x17f +1003822a: f884 216c strb.w r2, [r4, #364] ; 0x16c +1003822e: f884 21a2 strb.w r2, [r4, #418] ; 0x1a2 +10038232: f884 21a1 strb.w r2, [r4, #417] ; 0x1a1 +10038236: f884 21a4 strb.w r2, [r4, #420] ; 0x1a4 +1003823a: 4638 mov r0, r7 +1003823c: 4613 mov r3, r2 +1003823e: b2ed uxtb r5, r5 +10038240: f003 f8eb bl 1003b41a +10038244: 2d80 cmp r5, #128 ; 0x80 +10038246: d1d1 bne.n 100381ec +10038248: 23ff movs r3, #255 ; 0xff +1003824a: f884 317d strb.w r3, [r4, #381] ; 0x17d +1003824e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + ... + +10038254 : +10038254: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10038258: 4614 mov r4, r2 +1003825a: f8d0 9000 ldr.w r9, [r0] +1003825e: f89d 2030 ldrb.w r2, [sp, #48] ; 0x30 +10038262: 4688 mov r8, r1 +10038264: 9201 str r2, [sp, #4] +10038266: 4605 mov r5, r0 +10038268: 2201 movs r2, #1 +1003826a: 4648 mov r0, r9 +1003826c: f891 103b ldrb.w r1, [r1, #59] ; 0x3b +10038270: 461e mov r6, r3 +10038272: f003 f8cd bl 1003b410 +10038276: f898 3012 ldrb.w r3, [r8, #18] +1003827a: f004 027f and.w r2, r4, #127 ; 0x7f +1003827e: 429a cmp r2, r3 +10038280: d904 bls.n 1003828c +10038282: f024 0b7f bic.w fp, r4, #127 ; 0x7f +10038286: ea4b 0b03 orr.w fp, fp, r3 +1003828a: e004 b.n 10038296 +1003828c: f898 b013 ldrb.w fp, [r8, #19] +10038290: 455a cmp r2, fp +10038292: bf28 it cs +10038294: 46a3 movcs fp, r4 +10038296: 4c35 ldr r4, [pc, #212] ; (1003836c ) +10038298: b98e cbnz r6, 100382be +1003829a: f000 0a7f and.w sl, r0, #127 ; 0x7f +1003829e: 2100 movs r1, #0 +100382a0: f44f 7000 mov.w r0, #512 ; 0x200 +100382a4: e9d4 2302 ldrd r2, r3, [r4, #8] +100382a8: 4010 ands r0, r2 +100382aa: 4019 ands r1, r3 +100382ac: ea50 0301 orrs.w r3, r0, r1 +100382b0: d031 beq.n 10038316 +100382b2: 4b2f ldr r3, [pc, #188] ; (10038370 ) +100382b4: 681b ldr r3, [r3, #0] +100382b6: b373 cbz r3, 10038316 +100382b8: 4b2e ldr r3, [pc, #184] ; (10038374 ) +100382ba: 6998 ldr r0, [r3, #24] +100382bc: e028 b.n 10038310 +100382be: 2201 movs r2, #1 +100382c0: 4648 mov r0, r9 +100382c2: f898 103b ldrb.w r1, [r8, #59] ; 0x3b +100382c6: f003 f8a3 bl 1003b410 +100382ca: 4a2b ldr r2, [pc, #172] ; (10038378 ) +100382cc: f00b 037f and.w r3, fp, #127 ; 0x7f +100382d0: f812 a003 ldrb.w sl, [r2, r3] +100382d4: f000 0007 and.w r0, r0, #7 +100382d8: f509 53c4 add.w r3, r9, #6272 ; 0x1880 +100382dc: ea40 0aca orr.w sl, r0, sl, lsl #3 +100382e0: 781b ldrb r3, [r3, #0] +100382e2: f06a 0a7f orn sl, sl, #127 ; 0x7f +100382e6: fa5f fa8a uxtb.w sl, sl +100382ea: b933 cbnz r3, 100382fa +100382ec: 4628 mov r0, r5 +100382ee: f44f 6186 mov.w r1, #1072 ; 0x430 +100382f2: f04f 3201 mov.w r2, #16843009 ; 0x1010101 +100382f6: f001 ff31 bl 1003a15c +100382fa: e9d4 6702 ldrd r6, r7, [r4, #8] +100382fe: 2500 movs r5, #0 +10038300: f44f 7400 mov.w r4, #512 ; 0x200 +10038304: 4034 ands r4, r6 +10038306: 403d ands r5, r7 +10038308: ea54 0205 orrs.w r2, r4, r5 +1003830c: d003 beq.n 10038316 +1003830e: 481b ldr r0, [pc, #108] ; (1003837c ) +10038310: 4659 mov r1, fp +10038312: f7e2 fc35 bl 1001ab80 +10038316: 4648 mov r0, r9 +10038318: f898 103b ldrb.w r1, [r8, #59] ; 0x3b +1003831c: 465b mov r3, fp +1003831e: 2200 movs r2, #0 +10038320: f003 f87b bl 1003b41a +10038324: 4653 mov r3, sl +10038326: 4648 mov r0, r9 +10038328: f898 103b ldrb.w r1, [r8, #59] ; 0x3b +1003832c: 2201 movs r2, #1 +1003832e: f003 f874 bl 1003b41a +10038332: f898 403b ldrb.w r4, [r8, #59] ; 0x3b +10038336: 4648 mov r0, r9 +10038338: 4621 mov r1, r4 +1003833a: 2205 movs r2, #5 +1003833c: f003 f868 bl 1003b410 +10038340: 9a01 ldr r2, [sp, #4] +10038342: f000 05fc and.w r5, r0, #252 ; 0xfc +10038346: f002 0303 and.w r3, r2, #3 +1003834a: 4648 mov r0, r9 +1003834c: 4621 mov r1, r4 +1003834e: 432b orrs r3, r5 +10038350: 2205 movs r2, #5 +10038352: f003 f862 bl 1003b41a +10038356: 4641 mov r1, r8 +10038358: f891 203b ldrb.w r2, [r1, #59] ; 0x3b +1003835c: 4648 mov r0, r9 +1003835e: 2301 movs r3, #1 +10038360: b003 add sp, #12 +10038362: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10038366: f003 b85a b.w 1003b41e +1003836a: bf00 nop +1003836c: 10000720 .word 0x10000720 +10038370: 10044f38 .word 0x10044f38 +10038374: 10043ac4 .word 0x10043ac4 +10038378: 10045007 .word 0x10045007 +1003837c: 10043dfb .word 0x10043dfb + +10038380 : +10038380: b570 push {r4, r5, r6, lr} +10038382: 3201 adds r2, #1 +10038384: 6806 ldr r6, [r0, #0] +10038386: 460d mov r5, r1 +10038388: b2d4 uxtb r4, r2 +1003838a: 7cab ldrb r3, [r5, #18] +1003838c: 42a3 cmp r3, r4 +1003838e: d30d bcc.n 100383ac +10038390: 4630 mov r0, r6 +10038392: f895 103b ldrb.w r1, [r5, #59] ; 0x3b +10038396: 08e2 lsrs r2, r4, #3 +10038398: f003 f833 bl 1003b402 +1003839c: f004 0307 and.w r3, r4, #7 +100383a0: 40d8 lsrs r0, r3 +100383a2: 07c3 lsls r3, r0, #31 +100383a4: d403 bmi.n 100383ae +100383a6: 3401 adds r4, #1 +100383a8: b2e4 uxtb r4, r4 +100383aa: e7ee b.n 1003838a +100383ac: 2400 movs r4, #0 +100383ae: 4620 mov r0, r4 +100383b0: bd70 pop {r4, r5, r6, pc} + +100383b2 : +100383b2: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +100383b6: 3a01 subs r2, #1 +100383b8: 2500 movs r5, #0 +100383ba: f8d0 8000 ldr.w r8, [r0] +100383be: 460c mov r4, r1 +100383c0: 4699 mov r9, r3 +100383c2: b2d6 uxtb r6, r2 +100383c4: 462f mov r7, r5 +100383c6: 7ce3 ldrb r3, [r4, #19] +100383c8: b272 sxtb r2, r6 +100383ca: 429a cmp r2, r3 +100383cc: db16 blt.n 100383fc +100383ce: 10d2 asrs r2, r2, #3 +100383d0: 4640 mov r0, r8 +100383d2: f894 103b ldrb.w r1, [r4, #59] ; 0x3b +100383d6: f003 f814 bl 1003b402 +100383da: b2f2 uxtb r2, r6 +100383dc: f002 0307 and.w r3, r2, #7 +100383e0: 40d8 lsrs r0, r3 +100383e2: 07c3 lsls r3, r0, #31 +100383e4: d507 bpl.n 100383f6 +100383e6: 3701 adds r7, #1 +100383e8: b2ff uxtb r7, r7 +100383ea: 454f cmp r7, r9 +100383ec: d007 beq.n 100383fe +100383ee: 7ce3 ldrb r3, [r4, #19] +100383f0: 4293 cmp r3, r2 +100383f2: d204 bcs.n 100383fe +100383f4: 4615 mov r5, r2 +100383f6: 3a01 subs r2, #1 +100383f8: b2d6 uxtb r6, r2 +100383fa: e7e4 b.n 100383c6 +100383fc: 462a mov r2, r5 +100383fe: 4610 mov r0, r2 +10038400: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + +10038404 : +10038404: 7b4a ldrb r2, [r1, #13] +10038406: b513 push {r0, r1, r4, lr} +10038408: 2a2d cmp r2, #45 ; 0x2d +1003840a: f891 4036 ldrb.w r4, [r1, #54] ; 0x36 +1003840e: d902 bls.n 10038416 +10038410: f891 2040 ldrb.w r2, [r1, #64] ; 0x40 +10038414: e005 b.n 10038422 +10038416: 2a19 cmp r2, #25 +10038418: bf8c ite hi +1003841a: f891 2041 ldrbhi.w r2, [r1, #65] ; 0x41 +1003841e: f891 2042 ldrbls.w r2, [r1, #66] ; 0x42 +10038422: 9400 str r4, [sp, #0] +10038424: 2300 movs r3, #0 +10038426: f7ff ff15 bl 10038254 +1003842a: b002 add sp, #8 +1003842c: bd10 pop {r4, pc} + +1003842e : +1003842e: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +10038432: 6807 ldr r7, [r0, #0] +10038434: 460c mov r4, r1 +10038436: 2200 movs r2, #0 +10038438: f891 103b ldrb.w r1, [r1, #59] ; 0x3b +1003843c: 4606 mov r6, r0 +1003843e: 4638 mov r0, r7 +10038440: f002 ffe6 bl 1003b410 +10038444: f894 103b ldrb.w r1, [r4, #59] ; 0x3b +10038448: f000 057f and.w r5, r0, #127 ; 0x7f +1003844c: f020 087f bic.w r8, r0, #127 ; 0x7f +10038450: 7460 strb r0, [r4, #17] +10038452: 2205 movs r2, #5 +10038454: 4638 mov r0, r7 +10038456: f002 ffdb bl 1003b410 +1003845a: 7ca3 ldrb r3, [r4, #18] +1003845c: f000 0703 and.w r7, r0, #3 +10038460: 429d cmp r5, r3 +10038462: fa5f f888 uxtb.w r8, r8 +10038466: f884 703a strb.w r7, [r4, #58] ; 0x3a +1003846a: d108 bne.n 1003847e +1003846c: 7be2 ldrb r2, [r4, #15] +1003846e: 2a01 cmp r2, #1 +10038470: d124 bne.n 100384bc +10038472: f1b8 0f00 cmp.w r8, #0 +10038476: d121 bne.n 100384bc +10038478: f043 0380 orr.w r3, r3, #128 ; 0x80 +1003847c: e010 b.n 100384a0 +1003847e: f1a5 0211 sub.w r2, r5, #17 +10038482: 2a02 cmp r2, #2 +10038484: d802 bhi.n 1003848c +10038486: 7be2 ldrb r2, [r4, #15] +10038488: 2a01 cmp r2, #1 +1003848a: d011 beq.n 100384b0 +1003848c: 429d cmp r5, r3 +1003848e: d206 bcs.n 1003849e +10038490: 4630 mov r0, r6 +10038492: 4621 mov r1, r4 +10038494: 462a mov r2, r5 +10038496: f7ff ff73 bl 10038380 +1003849a: 4603 mov r3, r0 +1003849c: e000 b.n 100384a0 +1003849e: 7463 strb r3, [r4, #17] +100384a0: 461a mov r2, r3 +100384a2: 9700 str r7, [sp, #0] +100384a4: 4630 mov r0, r6 +100384a6: 4621 mov r1, r4 +100384a8: 2301 movs r3, #1 +100384aa: f7ff fed3 bl 10038254 +100384ae: e005 b.n 100384bc +100384b0: f1b8 0f00 cmp.w r8, #0 +100384b4: d1ec bne.n 10038490 +100384b6: f045 0380 orr.w r3, r5, #128 ; 0x80 +100384ba: e7f1 b.n 100384a0 +100384bc: b002 add sp, #8 +100384be: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +100384c2 : +100384c2: b573 push {r0, r1, r4, r5, r6, lr} +100384c4: 2205 movs r2, #5 +100384c6: 460c mov r4, r1 +100384c8: 4605 mov r5, r0 +100384ca: f891 103b ldrb.w r1, [r1, #59] ; 0x3b +100384ce: 6800 ldr r0, [r0, #0] +100384d0: f002 ff9e bl 1003b410 +100384d4: 7c63 ldrb r3, [r4, #17] +100384d6: 7ca2 ldrb r2, [r4, #18] +100384d8: f003 067f and.w r6, r3, #127 ; 0x7f +100384dc: f000 0003 and.w r0, r0, #3 +100384e0: f023 037f bic.w r3, r3, #127 ; 0x7f +100384e4: 9000 str r0, [sp, #0] +100384e6: 4296 cmp r6, r2 +100384e8: bf94 ite ls +100384ea: ea43 0206 orrls.w r2, r3, r6 +100384ee: 431a orrhi r2, r3 +100384f0: 4628 mov r0, r5 +100384f2: 4621 mov r1, r4 +100384f4: 2300 movs r3, #0 +100384f6: f7ff fead bl 10038254 +100384fa: b002 add sp, #8 +100384fc: bd70 pop {r4, r5, r6, pc} + ... + +10038500 : +10038500: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +10038504: 6806 ldr r6, [r0, #0] +10038506: f891 703b ldrb.w r7, [r1, #59] ; 0x3b +1003850a: 2201 movs r2, #1 +1003850c: 4605 mov r5, r0 +1003850e: 460c mov r4, r1 +10038510: 4630 mov r0, r6 +10038512: 4639 mov r1, r7 +10038514: f002 ff7c bl 1003b410 +10038518: 0602 lsls r2, r0, #24 +1003851a: d53e bpl.n 1003859a +1003851c: 4630 mov r0, r6 +1003851e: 4639 mov r1, r7 +10038520: 2202 movs r2, #2 +10038522: f002 ff75 bl 1003b410 +10038526: 0603 lsls r3, r0, #24 +10038528: d537 bpl.n 1003859a +1003852a: f010 0f40 tst.w r0, #64 ; 0x40 +1003852e: f506 58c4 add.w r8, r6, #6272 ; 0x1880 +10038532: d01d beq.n 10038570 +10038534: f898 3000 ldrb.w r3, [r8] +10038538: b92b cbnz r3, 10038546 +1003853a: 4628 mov r0, r5 +1003853c: f44f 6186 mov.w r1, #1072 ; 0x430 +10038540: 4a17 ldr r2, [pc, #92] ; (100385a0 ) +10038542: f001 fe0b bl 1003a15c +10038546: 4639 mov r1, r7 +10038548: 4630 mov r0, r6 +1003854a: 2200 movs r2, #0 +1003854c: f002 ff60 bl 1003b410 +10038550: 4639 mov r1, r7 +10038552: 4680 mov r8, r0 +10038554: 2205 movs r2, #5 +10038556: 4630 mov r0, r6 +10038558: f002 ff5a bl 1003b410 +1003855c: f000 0003 and.w r0, r0, #3 +10038560: 9000 str r0, [sp, #0] +10038562: 4621 mov r1, r4 +10038564: 4628 mov r0, r5 +10038566: 4642 mov r2, r8 +10038568: 2300 movs r3, #0 +1003856a: f7ff fe73 bl 10038254 +1003856e: e014 b.n 1003859a +10038570: f894 303d ldrb.w r3, [r4, #61] ; 0x3d +10038574: 4628 mov r0, r5 +10038576: 3301 adds r3, #1 +10038578: f884 303d strb.w r3, [r4, #61] ; 0x3d +1003857c: 4621 mov r1, r4 +1003857e: f7ff ffa0 bl 100384c2 +10038582: f898 3000 ldrb.w r3, [r8] +10038586: b92b cbnz r3, 10038594 +10038588: 4628 mov r0, r5 +1003858a: f44f 6186 mov.w r1, #1072 ; 0x430 +1003858e: 4a04 ldr r2, [pc, #16] ; (100385a0 ) +10038590: f001 fde4 bl 1003a15c +10038594: 2300 movs r3, #0 +10038596: f884 303d strb.w r3, [r4, #61] ; 0x3d +1003859a: b002 add sp, #8 +1003859c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +100385a0: 01010000 .word 0x01010000 + +100385a4 : +100385a4: e92d 4fe3 stmdb sp!, {r0, r1, r5, r6, r7, r8, r9, sl, fp, lr} +100385a8: 460d mov r5, r1 +100385aa: 4693 mov fp, r2 +100385ac: 4680 mov r8, r0 +100385ae: 2200 movs r2, #0 +100385b0: 6800 ldr r0, [r0, #0] +100385b2: f891 103b ldrb.w r1, [r1, #59] ; 0x3b +100385b6: f002 ff2b bl 1003b410 +100385ba: 7caa ldrb r2, [r5, #18] +100385bc: f000 067f and.w r6, r0, #127 ; 0x7f +100385c0: f895 a036 ldrb.w sl, [r5, #54] ; 0x36 +100385c4: 4296 cmp r6, r2 +100385c6: 746e strb r6, [r5, #17] +100385c8: f885 a03a strb.w sl, [r5, #58] ; 0x3a +100385cc: bf94 ite ls +100385ce: 4602 movls r2, r0 +100385d0: 4616 movhi r6, r2 +100385d2: 465f mov r7, fp +100385d4: f04f 0900 mov.w r9, #0 +100385d8: fa5f f389 uxtb.w r3, r9 +100385dc: 455b cmp r3, fp +100385de: d20b bcs.n 100385f8 +100385e0: 0613 lsls r3, r2, #24 +100385e2: d503 bpl.n 100385ec +100385e4: 3f01 subs r7, #1 +100385e6: f017 07ff ands.w r7, r7, #255 ; 0xff +100385ea: d004 beq.n 100385f6 +100385ec: f1a6 0312 sub.w r3, r6, #18 +100385f0: 2b01 cmp r3, #1 +100385f2: d81b bhi.n 1003862c +100385f4: e00a b.n 1003860c +100385f6: 4632 mov r2, r6 +100385f8: f8cd a000 str.w sl, [sp] +100385fc: 4640 mov r0, r8 +100385fe: 4629 mov r1, r5 +10038600: 2300 movs r3, #0 +10038602: f7ff fe27 bl 10038254 +10038606: b002 add sp, #8 +10038608: e8bd 8fe0 ldmia.w sp!, {r5, r6, r7, r8, r9, sl, fp, pc} +1003860c: 4632 mov r2, r6 +1003860e: 4640 mov r0, r8 +10038610: 4629 mov r1, r5 +10038612: 2301 movs r3, #1 +10038614: f7ff fecd bl 100383b2 +10038618: 3f01 subs r7, #1 +1003861a: f060 007f orn r0, r0, #127 ; 0x7f +1003861e: f017 07ff ands.w r7, r7, #255 ; 0xff +10038622: b2c2 uxtb r2, r0 +10038624: f109 0901 add.w r9, r9, #1 +10038628: d1d6 bne.n 100385d8 +1003862a: e7e5 b.n 100385f8 +1003862c: 7cea ldrb r2, [r5, #19] +1003862e: 4296 cmp r6, r2 +10038630: d9e2 bls.n 100385f8 +10038632: 4632 mov r2, r6 +10038634: 4640 mov r0, r8 +10038636: 4629 mov r1, r5 +10038638: 463b mov r3, r7 +1003863a: f7ff feba bl 100383b2 +1003863e: 4602 mov r2, r0 +10038640: e7da b.n 100385f8 + ... + +10038644 : +10038644: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +10038648: 4605 mov r5, r0 +1003864a: f895 30b7 ldrb.w r3, [r5, #183] ; 0xb7 +1003864e: 460c mov r4, r1 +10038650: 6800 ldr r0, [r0, #0] +10038652: 2b00 cmp r3, #0 +10038654: d065 beq.n 10038722 +10038656: f8d1 8028 ldr.w r8, [r1, #40] ; 0x28 +1003865a: f1b8 0f00 cmp.w r8, #0 +1003865e: d060 beq.n 10038722 +10038660: 8fcb ldrh r3, [r1, #62] ; 0x3e +10038662: f8b1 902c ldrh.w r9, [r1, #44] ; 0x2c +10038666: 3301 adds r3, #1 +10038668: 87cb strh r3, [r1, #62] ; 0x3e +1003866a: 7c8e ldrb r6, [r1, #18] +1003866c: 2200 movs r2, #0 +1003866e: f891 103b ldrb.w r1, [r1, #59] ; 0x3b +10038672: f002 fecd bl 1003b410 +10038676: 6aa3 ldr r3, [r4, #40] ; 0x28 +10038678: 2164 movs r1, #100 ; 0x64 +1003867a: 4359 muls r1, r3 +1003867c: 6c63 ldr r3, [r4, #68] ; 0x44 +1003867e: f8b4 c022 ldrh.w ip, [r4, #34] ; 0x22 +10038682: fbb1 f3f3 udiv r3, r1, r3 +10038686: f1c3 0164 rsb r1, r3, #100 ; 0x64 +1003868a: f894 3048 ldrb.w r3, [r4, #72] ; 0x48 +1003868e: f3c1 01c4 ubfx r1, r1, #3, #5 +10038692: ebc3 03c3 rsb r3, r3, r3, lsl #3 +10038696: eb01 01e3 add.w r1, r1, r3, asr #3 +1003869a: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 +1003869e: b2c9 uxtb r1, r1 +100386a0: 2b04 cmp r3, #4 +100386a2: f884 1048 strb.w r1, [r4, #72] ; 0x48 +100386a6: 8ca7 ldrh r7, [r4, #36] ; 0x24 +100386a8: d83b bhi.n 10038722 +100386aa: f000 027f and.w r2, r0, #127 ; 0x7f +100386ae: 42b2 cmp r2, r6 +100386b0: d903 bls.n 100386ba +100386b2: f000 0080 and.w r0, r0, #128 ; 0x80 +100386b6: 4330 orrs r0, r6 +100386b8: 4632 mov r2, r6 +100386ba: 4b1b ldr r3, [pc, #108] ; (10038728 ) +100386bc: 5c1b ldrb r3, [r3, r0] +100386be: 454b cmp r3, r9 +100386c0: d206 bcs.n 100386d0 +100386c2: 4628 mov r0, r5 +100386c4: 4621 mov r1, r4 +100386c6: 2201 movs r2, #1 +100386c8: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +100386cc: f7ff bf6a b.w 100385a4 +100386d0: fa1f f388 uxth.w r3, r8 +100386d4: 2b0e cmp r3, #14 +100386d6: d80e bhi.n 100386f6 +100386d8: 085a lsrs r2, r3, #1 +100386da: 4467 add r7, ip +100386dc: 4297 cmp r7, r2 +100386de: dcf0 bgt.n 100386c2 +100386e0: 8ba1 ldrh r1, [r4, #28] +100386e2: eb02 0393 add.w r3, r2, r3, lsr #2 +100386e6: 4299 cmp r1, r3 +100386e8: dd1b ble.n 10038722 +100386ea: 4628 mov r0, r5 +100386ec: 4621 mov r1, r4 +100386ee: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +100386f2: f7ff be9c b.w 1003842e +100386f6: f894 003b ldrb.w r0, [r4, #59] ; 0x3b +100386fa: b950 cbnz r0, 10038712 +100386fc: 085e lsrs r6, r3, #1 +100386fe: 42b7 cmp r7, r6 +10038700: d201 bcs.n 10038706 +10038702: 2001 movs r0, #1 +10038704: e003 b.n 1003870e +10038706: eb06 03d3 add.w r3, r6, r3, lsr #3 +1003870a: 429f cmp r7, r3 +1003870c: dd01 ble.n 10038712 +1003870e: 4b07 ldr r3, [pc, #28] ; (1003872c ) +10038710: 7018 strb r0, [r3, #0] +10038712: 4b07 ldr r3, [pc, #28] ; (10038730 ) +10038714: 5c9b ldrb r3, [r3, r2] +10038716: 428b cmp r3, r1 +10038718: d8e7 bhi.n 100386ea +1003871a: 4b06 ldr r3, [pc, #24] ; (10038734 ) +1003871c: 5c9b ldrb r3, [r3, r2] +1003871e: 428b cmp r3, r1 +10038720: d3cf bcc.n 100386c2 +10038722: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +10038726: bf00 nop +10038728: 1004501b .word 0x1004501b +1003872c: 1004e074 .word 0x1004e074 +10038730: 1004502f .word 0x1004502f +10038734: 10045043 .word 0x10045043 + +10038738 : +10038738: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1003873c: 780e ldrb r6, [r1, #0] +1003873e: 4a80 ldr r2, [pc, #512] ; (10038940 ) +10038740: ebc6 03c6 rsb r3, r6, r6, lsl #3 +10038744: f8d0 9000 ldr.w r9, [r0] +10038748: b085 sub sp, #20 +1003874a: 4682 mov sl, r0 +1003874c: 4688 mov r8, r1 +1003874e: eb02 0b03 add.w fp, r2, r3 +10038752: 2400 movs r4, #0 +10038754: 4648 mov r0, r9 +10038756: f898 103b ldrb.w r1, [r8, #59] ; 0x3b +1003875a: 4622 mov r2, r4 +1003875c: f002 fe51 bl 1003b402 +10038760: f898 3035 ldrb.w r3, [r8, #53] ; 0x35 +10038764: f81b 7004 ldrb.w r7, [fp, r4] +10038768: 2b02 cmp r3, #2 +1003876a: ea07 0700 and.w r7, r7, r0 +1003876e: d104 bne.n 1003877a +10038770: f014 0fff tst.w r4, #255 ; 0xff +10038774: bf08 it eq +10038776: f007 07f0 andeq.w r7, r7, #240 ; 0xf0 +1003877a: 4d72 ldr r5, [pc, #456] ; (10038944 ) +1003877c: 2100 movs r1, #0 +1003877e: f44f 7000 mov.w r0, #512 ; 0x200 +10038782: e9d5 2302 ldrd r2, r3, [r5, #8] +10038786: 4002 ands r2, r0 +10038788: 400b ands r3, r1 +1003878a: ea52 0103 orrs.w r1, r2, r3 +1003878e: d012 beq.n 100387b6 +10038790: 4b6d ldr r3, [pc, #436] ; (10038948 ) +10038792: 681b ldr r3, [r3, #0] +10038794: b17b cbz r3, 100387b6 +10038796: 4b6d ldr r3, [pc, #436] ; (1003894c ) +10038798: f898 103b ldrb.w r1, [r8, #59] ; 0x3b +1003879c: 6a1b ldr r3, [r3, #32] +1003879e: 4622 mov r2, r4 +100387a0: 4648 mov r0, r9 +100387a2: 9303 str r3, [sp, #12] +100387a4: f002 fe2d bl 1003b402 +100387a8: 9b03 ldr r3, [sp, #12] +100387aa: 4601 mov r1, r0 +100387ac: 4622 mov r2, r4 +100387ae: 4618 mov r0, r3 +100387b0: 463b mov r3, r7 +100387b2: f7e2 f9e5 bl 1001ab80 +100387b6: 4622 mov r2, r4 +100387b8: 4648 mov r0, r9 +100387ba: f898 103b ldrb.w r1, [r8, #59] ; 0x3b +100387be: 463b mov r3, r7 +100387c0: 3401 adds r4, #1 +100387c2: f002 fe23 bl 1003b40c +100387c6: 2c07 cmp r4, #7 +100387c8: d1c4 bne.n 10038754 +100387ca: 2e08 cmp r6, #8 +100387cc: d80f bhi.n 100387ee +100387ce: e8df f006 tbb [pc, r6] +100387d2: 1005 .short 0x1005 +100387d4: 10051005 .word 0x10051005 +100387d8: 1818 .short 0x1818 +100387da: 20 .byte 0x20 +100387db: 00 .byte 0x00 +100387dc: 231b movs r3, #27 +100387de: f888 3040 strb.w r3, [r8, #64] ; 0x40 +100387e2: 2317 movs r3, #23 +100387e4: f888 3041 strb.w r3, [r8, #65] ; 0x41 +100387e8: 2314 movs r3, #20 +100387ea: f888 3042 strb.w r3, [r8, #66] ; 0x42 +100387ee: 2406 movs r4, #6 +100387f0: e01e b.n 10038830 +100387f2: 2313 movs r3, #19 +100387f4: f888 3040 strb.w r3, [r8, #64] ; 0x40 +100387f8: 230f movs r3, #15 +100387fa: f888 3041 strb.w r3, [r8, #65] ; 0x41 +100387fe: 230c movs r3, #12 +10038800: e7f3 b.n 100387ea +10038802: 230b movs r3, #11 +10038804: f888 3040 strb.w r3, [r8, #64] ; 0x40 +10038808: 2307 movs r3, #7 +1003880a: f888 3041 strb.w r3, [r8, #65] ; 0x41 +1003880e: 2304 movs r3, #4 +10038810: e7eb b.n 100387ea +10038812: 2303 movs r3, #3 +10038814: f888 3040 strb.w r3, [r8, #64] ; 0x40 +10038818: 2302 movs r3, #2 +1003881a: f888 3041 strb.w r3, [r8, #65] ; 0x41 +1003881e: 2300 movs r3, #0 +10038820: e7e3 b.n 100387ea +10038822: f002 fdee bl 1003b402 +10038826: f010 000f ands.w r0, r0, #15 +1003882a: d10b bne.n 10038844 +1003882c: 3c01 subs r4, #1 +1003882e: b2e4 uxtb r4, r4 +10038830: 2c06 cmp r4, #6 +10038832: 4648 mov r0, r9 +10038834: 4622 mov r2, r4 +10038836: f898 103b ldrb.w r1, [r8, #59] ; 0x3b +1003883a: d0f2 beq.n 10038822 +1003883c: f002 fde1 bl 1003b402 +10038840: b2c0 uxtb r0, r0 +10038842: b178 cbz r0, 10038864 +10038844: f04f 0c07 mov.w ip, #7 +10038848: fa20 f30c lsr.w r3, r0, ip +1003884c: 07d9 lsls r1, r3, #31 +1003884e: d504 bpl.n 1003885a +10038850: eb0c 0cc4 add.w ip, ip, r4, lsl #3 +10038854: fa5f f78c uxtb.w r7, ip +10038858: e007 b.n 1003886a +1003885a: f10c 3cff add.w ip, ip, #4294967295 +1003885e: fa5f fc8c uxtb.w ip, ip +10038862: e7f1 b.n 10038848 +10038864: 2c00 cmp r4, #0 +10038866: d1e1 bne.n 1003882c +10038868: 4627 mov r7, r4 +1003886a: 2400 movs r4, #0 +1003886c: b2e6 uxtb r6, r4 +1003886e: 2e06 cmp r6, #6 +10038870: 4648 mov r0, r9 +10038872: f898 103b ldrb.w r1, [r8, #59] ; 0x3b +10038876: d105 bne.n 10038884 +10038878: 4632 mov r2, r6 +1003887a: f002 fdc2 bl 1003b402 +1003887e: f000 000f and.w r0, r0, #15 +10038882: e003 b.n 1003888c +10038884: 4622 mov r2, r4 +10038886: f002 fdbc bl 1003b402 +1003888a: b2c0 uxtb r0, r0 +1003888c: b160 cbz r0, 100388a8 +1003888e: 2100 movs r1, #0 +10038890: fa20 f201 lsr.w r2, r0, r1 +10038894: 07d2 lsls r2, r2, #31 +10038896: b2cb uxtb r3, r1 +10038898: d503 bpl.n 100388a2 +1003889a: eb03 03c6 add.w r3, r3, r6, lsl #3 +1003889e: b2db uxtb r3, r3 +100388a0: e006 b.n 100388b0 +100388a2: 3101 adds r1, #1 +100388a4: 2908 cmp r1, #8 +100388a6: d1f3 bne.n 10038890 +100388a8: 3401 adds r4, #1 +100388aa: 2c07 cmp r4, #7 +100388ac: d1de bne.n 1003886c +100388ae: 2300 movs r3, #0 +100388b0: f888 3013 strb.w r3, [r8, #19] +100388b4: f898 103b ldrb.w r1, [r8, #59] ; 0x3b +100388b8: 2200 movs r2, #0 +100388ba: f888 7012 strb.w r7, [r8, #18] +100388be: 4648 mov r0, r9 +100388c0: 9303 str r3, [sp, #12] +100388c2: f002 fda5 bl 1003b410 +100388c6: f898 103b ldrb.w r1, [r8, #59] ; 0x3b +100388ca: f000 0b7f and.w fp, r0, #127 ; 0x7f +100388ce: 2200 movs r2, #0 +100388d0: 4648 mov r0, r9 +100388d2: f002 fd9d bl 1003b410 +100388d6: 45bb cmp fp, r7 +100388d8: f020 007f bic.w r0, r0, #127 ; 0x7f +100388dc: b2c0 uxtb r0, r0 +100388de: 9b03 ldr r3, [sp, #12] +100388e0: d904 bls.n 100388ec +100388e2: ea40 0b07 orr.w fp, r0, r7 +100388e6: fa5f fb8b uxtb.w fp, fp +100388ea: e003 b.n 100388f4 +100388ec: 459b cmp fp, r3 +100388ee: bf38 it cc +100388f0: ea40 0b03 orrcc.w fp, r0, r3 +100388f4: e9d5 0102 ldrd r0, r1, [r5, #8] +100388f8: f44f 7400 mov.w r4, #512 ; 0x200 +100388fc: 2500 movs r5, #0 +100388fe: 4004 ands r4, r0 +10038900: 400d ands r5, r1 +10038902: ea54 0105 orrs.w r1, r4, r5 +10038906: d008 beq.n 1003891a +10038908: 4a0f ldr r2, [pc, #60] ; (10038948 ) +1003890a: 6812 ldr r2, [r2, #0] +1003890c: b12a cbz r2, 1003891a +1003890e: 4a0f ldr r2, [pc, #60] ; (1003894c ) +10038910: 4659 mov r1, fp +10038912: 6a50 ldr r0, [r2, #36] ; 0x24 +10038914: 463a mov r2, r7 +10038916: f7e2 f933 bl 1001ab80 +1003891a: f898 3036 ldrb.w r3, [r8, #54] ; 0x36 +1003891e: 4650 mov r0, sl +10038920: 9300 str r3, [sp, #0] +10038922: 4641 mov r1, r8 +10038924: 465a mov r2, fp +10038926: 2300 movs r3, #0 +10038928: f7ff fc94 bl 10038254 +1003892c: f898 103b ldrb.w r1, [r8, #59] ; 0x3b +10038930: 4648 mov r0, r9 +10038932: 2203 movs r2, #3 +10038934: 2300 movs r3, #0 +10038936: b005 add sp, #20 +10038938: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1003893c: f002 bd6d b.w 1003b41a +10038940: 10044fc8 .word 0x10044fc8 +10038944: 10000720 .word 0x10000720 +10038948: 10044f38 .word 0x10044f38 +1003894c: 10043ac4 .word 0x10043ac4 + +10038950 : +10038950: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10038954: f891 9000 ldrb.w r9, [r1] +10038958: b085 sub sp, #20 +1003895a: f009 097f and.w r9, r9, #127 ; 0x7f +1003895e: f1b9 0f06 cmp.w r9, #6 +10038962: 4682 mov sl, r0 +10038964: 460e mov r6, r1 +10038966: 6805 ldr r5, [r0, #0] +10038968: 784a ldrb r2, [r1, #1] +1003896a: f891 b002 ldrb.w fp, [r1, #2] +1003896e: d84d bhi.n 10038a0c +10038970: 2358 movs r3, #88 ; 0x58 +10038972: fb03 0309 mla r3, r3, r9, r0 +10038976: ea4f 11db mov.w r1, fp, lsr #7 +1003897a: f503 78b6 add.w r8, r3, #364 ; 0x16c +1003897e: f888 1038 strb.w r1, [r8, #56] ; 0x38 +10038982: f3cb 04c0 ubfx r4, fp, #3, #1 +10038986: f3cb 1180 ubfx r1, fp, #6, #1 +1003898a: f503 73b4 add.w r3, r3, #360 ; 0x168 +1003898e: f888 903b strb.w r9, [r8, #59] ; 0x3b +10038992: f888 1037 strb.w r1, [r8, #55] ; 0x37 +10038996: 2c00 cmp r4, #0 +10038998: d138 bne.n 10038a0c +1003899a: f00b 0b03 and.w fp, fp, #3 +1003899e: f002 0c1f and.w ip, r2, #31 +100389a2: 09d7 lsrs r7, r2, #7 +100389a4: f883 c004 strb.w ip, [r3, #4] +100389a8: f888 b035 strb.w fp, [r8, #53] ; 0x35 +100389ac: f888 b036 strb.w fp, [r8, #54] ; 0x36 +100389b0: f888 700f strb.w r7, [r8, #15] +100389b4: 1933 adds r3, r6, r4 +100389b6: 4622 mov r2, r4 +100389b8: 78db ldrb r3, [r3, #3] +100389ba: 4628 mov r0, r5 +100389bc: 4649 mov r1, r9 +100389be: 3401 adds r4, #1 +100389c0: f8cd c00c str.w ip, [sp, #12] +100389c4: f002 fd22 bl 1003b40c +100389c8: 2c04 cmp r4, #4 +100389ca: f8dd c00c ldr.w ip, [sp, #12] +100389ce: d1f1 bne.n 100389b4 +100389d0: 4b10 ldr r3, [pc, #64] ; (10038a14 ) +100389d2: f44f 7400 mov.w r4, #512 ; 0x200 +100389d6: 2500 movs r5, #0 +100389d8: e9d3 2302 ldrd r2, r3, [r3, #8] +100389dc: 4014 ands r4, r2 +100389de: 401d ands r5, r3 +100389e0: ea54 0305 orrs.w r3, r4, r5 +100389e4: d00b beq.n 100389fe +100389e6: 4b0c ldr r3, [pc, #48] ; (10038a18 ) +100389e8: 681b ldr r3, [r3, #0] +100389ea: b143 cbz r3, 100389fe +100389ec: 4b0b ldr r3, [pc, #44] ; (10038a1c ) +100389ee: f8cd b000 str.w fp, [sp] +100389f2: 6a98 ldr r0, [r3, #40] ; 0x28 +100389f4: 4649 mov r1, r9 +100389f6: 4662 mov r2, ip +100389f8: 463b mov r3, r7 +100389fa: f7e2 f8c1 bl 1001ab80 +100389fe: 4650 mov r0, sl +10038a00: 4641 mov r1, r8 +10038a02: b005 add sp, #20 +10038a04: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10038a08: f7ff be96 b.w 10038738 +10038a0c: b005 add sp, #20 +10038a0e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10038a12: bf00 nop +10038a14: 10000720 .word 0x10000720 +10038a18: 10044f38 .word 0x10044f38 +10038a1c: 10043ac4 .word 0x10043ac4 + +10038a20 : +10038a20: b510 push {r4, lr} +10038a22: 460b mov r3, r1 +10038a24: 4604 mov r4, r0 +10038a26: b188 cbz r0, 10038a4c +10038a28: 2906 cmp r1, #6 +10038a2a: d80f bhi.n 10038a4c +10038a2c: 2158 movs r1, #88 ; 0x58 +10038a2e: fb01 0103 mla r1, r1, r3, r0 +10038a32: f501 71b6 add.w r1, r1, #364 ; 0x16c +10038a36: 734a strb r2, [r1, #13] +10038a38: f881 303b strb.w r3, [r1, #59] ; 0x3b +10038a3c: f890 3123 ldrb.w r3, [r0, #291] ; 0x123 +10038a40: b123 cbz r3, 10038a4c +10038a42: f7ff fcdf bl 10038404 +10038a46: 2300 movs r3, #0 +10038a48: f884 3123 strb.w r3, [r4, #291] ; 0x123 +10038a4c: bd10 pop {r4, pc} + +10038a4e : +10038a4e: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +10038a52: f890 4034 ldrb.w r4, [r0, #52] ; 0x34 +10038a56: f890 7028 ldrb.w r7, [r0, #40] ; 0x28 +10038a5a: f3c4 1500 ubfx r5, r4, #4, #1 +10038a5e: ea4f 1cd4 mov.w ip, r4, lsr #7 +10038a62: ea45 0c8c orr.w ip, r5, ip, lsl #2 +10038a66: f3c4 05c0 ubfx r5, r4, #3, #1 +10038a6a: f3c4 1680 ubfx r6, r4, #6, #1 +10038a6e: ea4c 0c45 orr.w ip, ip, r5, lsl #1 +10038a72: ea4c 0cc6 orr.w ip, ip, r6, lsl #3 +10038a76: f3c4 0480 ubfx r4, r4, #2, #1 +10038a7a: ea4c 1c04 orr.w ip, ip, r4, lsl #4 +10038a7e: f007 04f0 and.w r4, r7, #240 ; 0xf0 +10038a82: f007 070f and.w r7, r7, #15 +10038a86: 023f lsls r7, r7, #8 +10038a88: f890 6030 ldrb.w r6, [r0, #48] ; 0x30 +10038a8c: ea47 4404 orr.w r4, r7, r4, lsl #16 +10038a90: f890 7021 ldrb.w r7, [r0, #33] ; 0x21 +10038a94: f890 5035 ldrb.w r5, [r0, #53] ; 0x35 +10038a98: 2e00 cmp r6, #0 +10038a9a: ea44 4407 orr.w r4, r4, r7, lsl #16 +10038a9e: ea44 040c orr.w r4, r4, ip +10038aa2: bf08 it eq +10038aa4: 260f moveq r6, #15 +10038aa6: 2d00 cmp r5, #0 +10038aa8: bf08 it eq +10038aaa: 250f moveq r5, #15 +10038aac: ea44 6606 orr.w r6, r4, r6, lsl #24 +10038ab0: f411 4f70 tst.w r1, #61440 ; 0xf000 +10038ab4: ea46 3505 orr.w r5, r6, r5, lsl #12 +10038ab8: f890 7036 ldrb.w r7, [r0, #54] ; 0x36 +10038abc: f890 c037 ldrb.w ip, [r0, #55] ; 0x37 +10038ac0: f890 8038 ldrb.w r8, [r0, #56] ; 0x38 +10038ac4: f890 4039 ldrb.w r4, [r0, #57] ; 0x39 +10038ac8: d004 beq.n 10038ad4 +10038aca: ea85 0001 eor.w r0, r5, r1 +10038ace: f410 4f70 tst.w r0, #61440 ; 0xf000 +10038ad2: d135 bne.n 10038b40 +10038ad4: f011 6f70 tst.w r1, #251658240 ; 0xf000000 +10038ad8: d004 beq.n 10038ae4 +10038ada: ea85 0001 eor.w r0, r5, r1 +10038ade: f010 6f70 tst.w r0, #251658240 ; 0xf000000 +10038ae2: d12d bne.n 10038b40 +10038ae4: f021 407f bic.w r0, r1, #4278190080 ; 0xff000000 +10038ae8: f420 4070 bic.w r0, r0, #61440 ; 0xf000 +10038aec: 4005 ands r5, r0 +10038aee: 4285 cmp r5, r0 +10038af0: d126 bne.n 10038b40 +10038af2: 0708 lsls r0, r1, #28 +10038af4: d021 beq.n 10038b3a +10038af6: f011 0f01 tst.w r1, #1 +10038afa: bf14 ite ne +10038afc: 20ff movne r0, #255 ; 0xff +10038afe: 2000 moveq r0, #0 +10038b00: 078e lsls r6, r1, #30 +10038b02: bf48 it mi +10038b04: f440 407f orrmi.w r0, r0, #65280 ; 0xff00 +10038b08: 074d lsls r5, r1, #29 +10038b0a: bf48 it mi +10038b0c: f440 007f orrmi.w r0, r0, #16711680 ; 0xff0000 +10038b10: 0709 lsls r1, r1, #28 +10038b12: ea4f 4108 mov.w r1, r8, lsl #16 +10038b16: ea41 210c orr.w r1, r1, ip, lsl #8 +10038b1a: ea41 0107 orr.w r1, r1, r7 +10038b1e: ea41 6104 orr.w r1, r1, r4, lsl #24 +10038b22: bf48 it mi +10038b24: f040 407f orrmi.w r0, r0, #4278190080 ; 0xff000000 +10038b28: 404a eors r2, r1 +10038b2a: 4210 tst r0, r2 +10038b2c: d108 bne.n 10038b40 +10038b2e: 4218 tst r0, r3 +10038b30: bf14 ite ne +10038b32: 2000 movne r0, #0 +10038b34: 2001 moveq r0, #1 +10038b36: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10038b3a: 2001 movs r0, #1 +10038b3c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +10038b40: 2000 movs r0, #0 +10038b42: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + ... + +10038b48 : +10038b48: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10038b4c: 4d1b ldr r5, [pc, #108] ; (10038bbc ) +10038b4e: 2700 movs r7, #0 +10038b50: 4681 mov r9, r0 +10038b52: f505 7a04 add.w sl, r5, #528 ; 0x210 +10038b56: 46b8 mov r8, r7 +10038b58: 463e mov r6, r7 +10038b5a: 2401 movs r4, #1 +10038b5c: 4555 cmp r5, sl +10038b5e: d02b beq.n 10038bb8 +10038b60: f855 1c04 ldr.w r1, [r5, #-4] +10038b64: 682b ldr r3, [r5, #0] +10038b66: f011 4f40 tst.w r1, #3221225472 ; 0xc0000000 +10038b6a: d013 beq.n 10038b94 +10038b6c: 2900 cmp r1, #0 +10038b6e: da08 bge.n 10038b82 +10038b70: f3c1 7201 ubfx r2, r1, #28, #2 +10038b74: 2a03 cmp r2, #3 +10038b76: d014 beq.n 10038ba2 +10038b78: 2a02 cmp r2, #2 +10038b7a: d115 bne.n 10038ba8 +10038b7c: f086 0401 eor.w r4, r6, #1 +10038b80: e018 b.n 10038bb4 +10038b82: b9a6 cbnz r6, 10038bae +10038b84: 4648 mov r0, r9 +10038b86: 4641 mov r1, r8 +10038b88: 463a mov r2, r7 +10038b8a: f7ff ff60 bl 10038a4e +10038b8e: b180 cbz r0, 10038bb2 +10038b90: 2601 movs r6, #1 +10038b92: e00e b.n 10038bb2 +10038b94: b174 cbz r4, 10038bb4 +10038b96: 4648 mov r0, r9 +10038b98: f04f 32ff mov.w r2, #4294967295 +10038b9c: f000 f88e bl 10038cbc +10038ba0: e000 b.n 10038ba4 +10038ba2: 2600 movs r6, #0 +10038ba4: 2401 movs r4, #1 +10038ba6: e005 b.n 10038bb4 +10038ba8: 461f mov r7, r3 +10038baa: 4688 mov r8, r1 +10038bac: e002 b.n 10038bb4 +10038bae: 2400 movs r4, #0 +10038bb0: e000 b.n 10038bb4 +10038bb2: 4634 mov r4, r6 +10038bb4: 3508 adds r5, #8 +10038bb6: e7d1 b.n 10038b5c +10038bb8: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10038bbc: 100450ec .word 0x100450ec + +10038bc0 : +10038bc0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10038bc4: 4d1b ldr r5, [pc, #108] ; (10038c34 ) +10038bc6: 2700 movs r7, #0 +10038bc8: 4681 mov r9, r0 +10038bca: f505 6acf add.w sl, r5, #1656 ; 0x678 +10038bce: 46b8 mov r8, r7 +10038bd0: 463e mov r6, r7 +10038bd2: 2401 movs r4, #1 +10038bd4: 4555 cmp r5, sl +10038bd6: d02b beq.n 10038c30 +10038bd8: f855 1c04 ldr.w r1, [r5, #-4] +10038bdc: 682b ldr r3, [r5, #0] +10038bde: f011 4f40 tst.w r1, #3221225472 ; 0xc0000000 +10038be2: d013 beq.n 10038c0c +10038be4: 2900 cmp r1, #0 +10038be6: da08 bge.n 10038bfa +10038be8: f3c1 7201 ubfx r2, r1, #28, #2 +10038bec: 2a03 cmp r2, #3 +10038bee: d014 beq.n 10038c1a +10038bf0: 2a02 cmp r2, #2 +10038bf2: d115 bne.n 10038c20 +10038bf4: f086 0401 eor.w r4, r6, #1 +10038bf8: e018 b.n 10038c2c +10038bfa: b9a6 cbnz r6, 10038c26 +10038bfc: 4648 mov r0, r9 +10038bfe: 4641 mov r1, r8 +10038c00: 463a mov r2, r7 +10038c02: f7ff ff24 bl 10038a4e +10038c06: b180 cbz r0, 10038c2a +10038c08: 2601 movs r6, #1 +10038c0a: e00e b.n 10038c2a +10038c0c: b174 cbz r4, 10038c2c +10038c0e: 4648 mov r0, r9 +10038c10: f04f 32ff mov.w r2, #4294967295 +10038c14: f000 f871 bl 10038cfa +10038c18: e000 b.n 10038c1c +10038c1a: 2600 movs r6, #0 +10038c1c: 2401 movs r4, #1 +10038c1e: e005 b.n 10038c2c +10038c20: 461f mov r7, r3 +10038c22: 4688 mov r8, r1 +10038c24: e002 b.n 10038c2c +10038c26: 2400 movs r4, #0 +10038c28: e000 b.n 10038c2c +10038c2a: 4634 mov r4, r6 +10038c2c: 3508 adds r5, #8 +10038c2e: e7d1 b.n 10038bd4 +10038c30: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10038c34: 100452fc .word 0x100452fc + +10038c38 : +10038c38: 201b movs r0, #27 +10038c3a: 4770 bx lr + +10038c3c : +10038c3c: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +10038c3e: 4c0b ldr r4, [pc, #44] ; (10038c6c ) +10038c40: 2301 movs r3, #1 +10038c42: 4605 mov r5, r0 +10038c44: 7303 strb r3, [r0, #12] +10038c46: 6083 str r3, [r0, #8] +10038c48: f104 0690 add.w r6, r4, #144 ; 0x90 +10038c4c: 68a3 ldr r3, [r4, #8] +10038c4e: 1f21 subs r1, r4, #4 +10038c50: 9300 str r3, [sp, #0] +10038c52: 68e3 ldr r3, [r4, #12] +10038c54: 4628 mov r0, r5 +10038c56: 9301 str r3, [sp, #4] +10038c58: 6923 ldr r3, [r4, #16] +10038c5a: 3418 adds r4, #24 +10038c5c: 9302 str r3, [sp, #8] +10038c5e: c90e ldmia r1, {r1, r2, r3} +10038c60: f000 f834 bl 10038ccc +10038c64: 42b4 cmp r4, r6 +10038c66: d1f1 bne.n 10038c4c +10038c68: b004 add sp, #16 +10038c6a: bd70 pop {r4, r5, r6, pc} +10038c6c: 1004505c .word 0x1004505c + +10038c70 : +10038c70: b537 push {r0, r1, r2, r4, r5, lr} +10038c72: 29fe cmp r1, #254 ; 0xfe +10038c74: 4614 mov r4, r2 +10038c76: 9a06 ldr r2, [sp, #24] +10038c78: d003 beq.n 10038c82 +10038c7a: f640 75fe movw r5, #4094 ; 0xffe +10038c7e: 42a9 cmp r1, r5 +10038c80: d105 bne.n 10038c8e +10038c82: 201e movs r0, #30 +10038c84: b003 add sp, #12 +10038c86: e8bd 4030 ldmia.w sp!, {r4, r5, lr} +10038c8a: f001 ba7e b.w 1003a18a +10038c8e: 4619 mov r1, r3 +10038c90: 9400 str r4, [sp, #0] +10038c92: 4b04 ldr r3, [pc, #16] ; (10038ca4 ) +10038c94: f001 fa6e bl 1003a174 +10038c98: 2001 movs r0, #1 +10038c9a: b003 add sp, #12 +10038c9c: e8bd 4030 ldmia.w sp!, {r4, r5, lr} +10038ca0: f001 ba75 b.w 1003a18e +10038ca4: 000fffff .word 0x000fffff + +10038ca8 : +10038ca8: b507 push {r0, r1, r2, lr} +10038caa: 2300 movs r3, #0 +10038cac: 9100 str r1, [sp, #0] +10038cae: f7ff ffdf bl 10038c70 +10038cb2: b003 add sp, #12 +10038cb4: f85d fb04 ldr.w pc, [sp], #4 + +10038cb8 : +10038cb8: f001 ba4a b.w 1003a150 + +10038cbc : +10038cbc: b508 push {r3, lr} +10038cbe: f001 fa53 bl 1003a168 +10038cc2: e8bd 4008 ldmia.w sp!, {r3, lr} +10038cc6: 2001 movs r0, #1 +10038cc8: f001 ba61 b.w 1003a18e + +10038ccc : +10038ccc: b5f0 push {r4, r5, r6, r7, lr} +10038cce: 9c05 ldr r4, [sp, #20] +10038cd0: 9e06 ldr r6, [sp, #24] +10038cd2: 2cfe cmp r4, #254 ; 0xfe +10038cd4: 9d07 ldr r5, [sp, #28] +10038cd6: d003 beq.n 10038ce0 +10038cd8: f640 77fe movw r7, #4094 ; 0xffe +10038cdc: 42bc cmp r4, r7 +10038cde: d104 bne.n 10038cea +10038ce0: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} +10038ce4: 2032 movs r0, #50 ; 0x32 +10038ce6: f001 ba50 b.w 1003a18a +10038cea: 9405 str r4, [sp, #20] +10038cec: 9606 str r6, [sp, #24] +10038cee: 9507 str r5, [sp, #28] +10038cf0: 6800 ldr r0, [r0, #0] +10038cf2: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} +10038cf6: f7f8 bfeb b.w 10031cd0 + +10038cfa : +10038cfa: 29fe cmp r1, #254 ; 0xfe +10038cfc: b510 push {r4, lr} +10038cfe: bf08 it eq +10038d00: 2032 moveq r0, #50 ; 0x32 +10038d02: d002 beq.n 10038d0a +10038d04: 29fd cmp r1, #253 ; 0xfd +10038d06: d103 bne.n 10038d10 +10038d08: 2005 movs r0, #5 +10038d0a: f001 fa3e bl 1003a18a +10038d0e: e013 b.n 10038d38 +10038d10: 29fc cmp r1, #252 ; 0xfc +10038d12: bf08 it eq +10038d14: 2001 moveq r0, #1 +10038d16: d0f8 beq.n 10038d0a +10038d18: 29fb cmp r1, #251 ; 0xfb +10038d1a: bf08 it eq +10038d1c: 2032 moveq r0, #50 ; 0x32 +10038d1e: d006 beq.n 10038d2e +10038d20: 29fa cmp r1, #250 ; 0xfa +10038d22: bf08 it eq +10038d24: 2005 moveq r0, #5 +10038d26: d002 beq.n 10038d2e +10038d28: 29f9 cmp r1, #249 ; 0xf9 +10038d2a: d103 bne.n 10038d34 +10038d2c: 2001 movs r0, #1 +10038d2e: f001 fa2e bl 1003a18e +10038d32: e001 b.n 10038d38 +10038d34: f001 fa18 bl 1003a168 +10038d38: e8bd 4010 ldmia.w sp!, {r4, lr} +10038d3c: 2001 movs r0, #1 +10038d3e: f001 ba26 b.w 1003a18e + +10038d42 : +10038d42: b5f0 push {r4, r5, r6, r7, lr} +10038d44: f89d 7014 ldrb.w r7, [sp, #20] +10038d48: f89d 6018 ldrb.w r6, [sp, #24] +10038d4c: f89d 501c ldrb.w r5, [sp, #28] +10038d50: f89d 4020 ldrb.w r4, [sp, #32] +10038d54: 9705 str r7, [sp, #20] +10038d56: 9606 str r6, [sp, #24] +10038d58: 9507 str r5, [sp, #28] +10038d5a: 9408 str r4, [sp, #32] +10038d5c: 6800 ldr r0, [r0, #0] +10038d5e: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} +10038d62: f7f9 bb11 b.w 10032388 + +10038d66 : +10038d66: 6ac3 ldr r3, [r0, #44] ; 0x2c +10038d68: f413 4fc0 tst.w r3, #24576 ; 0x6000 +10038d6c: d004 beq.n 10038d78 +10038d6e: 2301 movs r3, #1 +10038d70: f880 30e9 strb.w r3, [r0, #233] ; 0xe9 +10038d74: f880 30e8 strb.w r3, [r0, #232] ; 0xe8 +10038d78: 4770 bx lr + +10038d7a : +10038d7a: 6ac2 ldr r2, [r0, #44] ; 0x2c +10038d7c: f246 139f movw r3, #24991 ; 0x619f +10038d80: 4013 ands r3, r2 +10038d82: 2b00 cmp r3, #0 +10038d84: f640 0124 movw r1, #2084 ; 0x824 +10038d88: f640 0304 movw r3, #2052 ; 0x804 +10038d8c: bf08 it eq +10038d8e: 4619 moveq r1, r3 +10038d90: b510 push {r4, lr} +10038d92: bf14 ite ne +10038d94: f44f 7200 movne.w r2, #512 ; 0x200 +10038d98: f44f 3280 moveq.w r2, #65536 ; 0x10000 +10038d9c: 4604 mov r4, r0 +10038d9e: f001 f9e6 bl 1003a16e +10038da2: 6ae3 ldr r3, [r4, #44] ; 0x2c +10038da4: 77a0 strb r0, [r4, #30] +10038da6: f413 4380 ands.w r3, r3, #16384 ; 0x4000 +10038daa: d00c beq.n 10038dc6 +10038dac: 4620 mov r0, r4 +10038dae: f640 219c movw r1, #2716 ; 0xa9c +10038db2: f44f 3200 mov.w r2, #131072 ; 0x20000 +10038db6: f001 f9da bl 1003a16e +10038dba: 3000 adds r0, #0 +10038dbc: bf18 it ne +10038dbe: 2001 movne r0, #1 +10038dc0: f884 004b strb.w r0, [r4, #75] ; 0x4b +10038dc4: bd10 pop {r4, pc} +10038dc6: f884 304b strb.w r3, [r4, #75] ; 0x4b +10038dca: bd10 pop {r4, pc} + +10038dcc : +10038dcc: 2941 cmp r1, #65 ; 0x41 +10038dce: d875 bhi.n 10038ebc +10038dd0: e8df f001 tbb [pc, r1] +10038dd4: 2c292126 .word 0x2c292126 +10038dd8: 2334312f .word 0x2334312f +10038ddc: 43403d37 .word 0x43403d37 +10038de0: 4f4c4946 .word 0x4f4c4946 +10038de4: 5b585552 .word 0x5b585552 +10038de8: 6764615e .word 0x6764615e +10038dec: 726f6d6a .word 0x726f6d6a +10038df0: 74747474 .word 0x74747474 +10038df4: 74747474 .word 0x74747474 +10038df8: 74747474 .word 0x74747474 +10038dfc: 74747474 .word 0x74747474 +10038e00: 74747474 .word 0x74747474 +10038e04: 74747474 .word 0x74747474 +10038e08: 74747474 .word 0x74747474 +10038e0c: 74747474 .word 0x74747474 +10038e10: 74747474 .word 0x74747474 +10038e14: 3a74 .short 0x3a74 +10038e16: 6242 str r2, [r0, #36] ; 0x24 +10038e18: 4770 bx lr +10038e1a: f880 2032 strb.w r2, [r0, #50] ; 0x32 +10038e1e: 4770 bx lr +10038e20: f880 2021 strb.w r2, [r0, #33] ; 0x21 +10038e24: 4770 bx lr +10038e26: f880 2028 strb.w r2, [r0, #40] ; 0x28 +10038e2a: 4770 bx lr +10038e2c: f880 20bb strb.w r2, [r0, #187] ; 0xbb +10038e30: 4770 bx lr +10038e32: 62c2 str r2, [r0, #44] ; 0x2c +10038e34: 4770 bx lr +10038e36: f880 2030 strb.w r2, [r0, #48] ; 0x30 +10038e3a: 4770 bx lr +10038e3c: f880 2031 strb.w r2, [r0, #49] ; 0x31 +10038e40: 4770 bx lr +10038e42: f880 2033 strb.w r2, [r0, #51] ; 0x33 +10038e46: 4770 bx lr +10038e48: f880 2048 strb.w r2, [r0, #72] ; 0x48 +10038e4c: 4770 bx lr +10038e4e: f880 2034 strb.w r2, [r0, #52] ; 0x34 +10038e52: 4770 bx lr +10038e54: f880 2035 strb.w r2, [r0, #53] ; 0x35 +10038e58: 4770 bx lr +10038e5a: f880 203a strb.w r2, [r0, #58] ; 0x3a +10038e5e: 4770 bx lr +10038e60: f880 203b strb.w r2, [r0, #59] ; 0x3b +10038e64: 4770 bx lr +10038e66: f880 203c strb.w r2, [r0, #60] ; 0x3c +10038e6a: 4770 bx lr +10038e6c: f880 203d strb.w r2, [r0, #61] ; 0x3d +10038e70: 4770 bx lr +10038e72: f880 2037 strb.w r2, [r0, #55] ; 0x37 +10038e76: 4770 bx lr +10038e78: f880 2039 strb.w r2, [r0, #57] ; 0x39 +10038e7c: 4770 bx lr +10038e7e: f880 2036 strb.w r2, [r0, #54] ; 0x36 +10038e82: 4770 bx lr +10038e84: f880 2038 strb.w r2, [r0, #56] ; 0x38 +10038e88: 4770 bx lr +10038e8a: f880 203e strb.w r2, [r0, #62] ; 0x3e +10038e8e: 4770 bx lr +10038e90: f880 203f strb.w r2, [r0, #63] ; 0x3f +10038e94: 4770 bx lr +10038e96: f880 2040 strb.w r2, [r0, #64] ; 0x40 +10038e9a: 4770 bx lr +10038e9c: f880 2041 strb.w r2, [r0, #65] ; 0x41 +10038ea0: 4770 bx lr +10038ea2: f880 2042 strb.w r2, [r0, #66] ; 0x42 +10038ea6: 4770 bx lr +10038ea8: f880 2049 strb.w r2, [r0, #73] ; 0x49 +10038eac: 4770 bx lr +10038eae: f880 204a strb.w r2, [r0, #74] ; 0x4a +10038eb2: 4b03 ldr r3, [pc, #12] ; (10038ec0 ) +10038eb4: 701a strb r2, [r3, #0] +10038eb6: 4770 bx lr +10038eb8: 4b01 ldr r3, [pc, #4] ; (10038ec0 ) +10038eba: 705a strb r2, [r3, #1] +10038ebc: 4770 bx lr +10038ebe: bf00 nop +10038ec0: 10000720 .word 0x10000720 + +10038ec4 : +10038ec4: 391c subs r1, #28 +10038ec6: 291a cmp r1, #26 +10038ec8: d855 bhi.n 10038f76 +10038eca: e8df f001 tbb [pc, r1] +10038ece: 100e .short 0x100e +10038ed0: 18161412 .word 0x18161412 +10038ed4: 401e1c1a .word 0x401e1c1a +10038ed8: 28252220 .word 0x28252220 +10038edc: 34312e2b .word 0x34312e2b +10038ee0: 463d3a37 .word 0x463d3a37 +10038ee4: 49524f43 .word 0x49524f43 +10038ee8: 4c .byte 0x4c +10038ee9: 00 .byte 0x00 +10038eea: 6542 str r2, [r0, #84] ; 0x54 +10038eec: 4770 bx lr +10038eee: 6582 str r2, [r0, #88] ; 0x58 +10038ef0: 4770 bx lr +10038ef2: 65c2 str r2, [r0, #92] ; 0x5c +10038ef4: 4770 bx lr +10038ef6: 6602 str r2, [r0, #96] ; 0x60 +10038ef8: 4770 bx lr +10038efa: 6642 str r2, [r0, #100] ; 0x64 +10038efc: 4770 bx lr +10038efe: 6682 str r2, [r0, #104] ; 0x68 +10038f00: 4770 bx lr +10038f02: 66c2 str r2, [r0, #108] ; 0x6c +10038f04: 4770 bx lr +10038f06: 6702 str r2, [r0, #112] ; 0x70 +10038f08: 4770 bx lr +10038f0a: 6742 str r2, [r0, #116] ; 0x74 +10038f0c: 4770 bx lr +10038f0e: 67c2 str r2, [r0, #124] ; 0x7c +10038f10: 4770 bx lr +10038f12: f8c0 2080 str.w r2, [r0, #128] ; 0x80 +10038f16: 4770 bx lr +10038f18: f8c0 2084 str.w r2, [r0, #132] ; 0x84 +10038f1c: 4770 bx lr +10038f1e: f8c0 2088 str.w r2, [r0, #136] ; 0x88 +10038f22: 4770 bx lr +10038f24: f8c0 208c str.w r2, [r0, #140] ; 0x8c +10038f28: 4770 bx lr +10038f2a: f8c0 2090 str.w r2, [r0, #144] ; 0x90 +10038f2e: 4770 bx lr +10038f30: f8c0 2760 str.w r2, [r0, #1888] ; 0x760 +10038f34: 4770 bx lr +10038f36: f8c0 2764 str.w r2, [r0, #1892] ; 0x764 +10038f3a: 4770 bx lr +10038f3c: f8c0 2768 str.w r2, [r0, #1896] ; 0x768 +10038f40: 4770 bx lr +10038f42: f8c0 2094 str.w r2, [r0, #148] ; 0x94 +10038f46: 4770 bx lr +10038f48: f8c0 2098 str.w r2, [r0, #152] ; 0x98 +10038f4c: 4770 bx lr +10038f4e: f8c0 20b0 str.w r2, [r0, #176] ; 0xb0 +10038f52: 4770 bx lr +10038f54: f8c0 20a0 str.w r2, [r0, #160] ; 0xa0 +10038f58: 4770 bx lr +10038f5a: f8c0 209c str.w r2, [r0, #156] ; 0x9c +10038f5e: 4770 bx lr +10038f60: f8c0 20a8 str.w r2, [r0, #168] ; 0xa8 +10038f64: 4770 bx lr +10038f66: f8c0 20ac str.w r2, [r0, #172] ; 0xac +10038f6a: 4770 bx lr +10038f6c: f8c0 25c0 str.w r2, [r0, #1472] ; 0x5c0 +10038f70: 4770 bx lr +10038f72: f8c0 20a4 str.w r2, [r0, #164] ; 0xa4 +10038f76: 4770 bx lr + +10038f78 : +10038f78: 2949 cmp r1, #73 ; 0x49 +10038f7a: bf04 itt eq +10038f7c: eb00 0082 addeq.w r0, r0, r2, lsl #2 +10038f80: f8c0 314c streq.w r3, [r0, #332] ; 0x14c +10038f84: 4770 bx lr + ... + +10038f88 : +10038f88: 293e cmp r1, #62 ; 0x3e +10038f8a: d044 beq.n 10039016 +10038f8c: d815 bhi.n 10038fba +10038f8e: 2939 cmp r1, #57 ; 0x39 +10038f90: d026 beq.n 10038fe0 +10038f92: d80a bhi.n 10038faa +10038f94: 2907 cmp r1, #7 +10038f96: d028 beq.n 10038fea +10038f98: d802 bhi.n 10038fa0 +10038f9a: 2901 cmp r1, #1 +10038f9c: d023 beq.n 10038fe6 +10038f9e: 4770 bx lr +10038fa0: 2937 cmp r1, #55 ; 0x37 +10038fa2: d025 beq.n 10038ff0 +10038fa4: 2938 cmp r1, #56 ; 0x38 +10038fa6: d026 beq.n 10038ff6 +10038fa8: 4770 bx lr +10038faa: 293b cmp r1, #59 ; 0x3b +10038fac: d029 beq.n 10039002 +10038fae: d325 bcc.n 10038ffc +10038fb0: 293c cmp r1, #60 ; 0x3c +10038fb2: d029 beq.n 10039008 +10038fb4: 293d cmp r1, #61 ; 0x3d +10038fb6: d02a beq.n 1003900e +10038fb8: 4770 bx lr +10038fba: 2944 cmp r1, #68 ; 0x44 +10038fbc: d03a beq.n 10039034 +10038fbe: d807 bhi.n 10038fd0 +10038fc0: 2940 cmp r1, #64 ; 0x40 +10038fc2: d02e beq.n 10039022 +10038fc4: d32a bcc.n 1003901c +10038fc6: 2942 cmp r1, #66 ; 0x42 +10038fc8: d02e beq.n 10039028 +10038fca: 2943 cmp r1, #67 ; 0x43 +10038fcc: d02f beq.n 1003902e +10038fce: 4770 bx lr +10038fd0: 2946 cmp r1, #70 ; 0x46 +10038fd2: d035 beq.n 10039040 +10038fd4: d331 bcc.n 1003903a +10038fd6: 2947 cmp r1, #71 ; 0x47 +10038fd8: d035 beq.n 10039046 +10038fda: 2948 cmp r1, #72 ; 0x48 +10038fdc: d036 beq.n 1003904c +10038fde: 4770 bx lr +10038fe0: f880 20b4 strb.w r2, [r0, #180] ; 0xb4 +10038fe4: 4770 bx lr +10038fe6: 6242 str r2, [r0, #36] ; 0x24 +10038fe8: 4770 bx lr +10038fea: f880 2032 strb.w r2, [r0, #50] ; 0x32 +10038fee: 4770 bx lr +10038ff0: f880 20b5 strb.w r2, [r0, #181] ; 0xb5 +10038ff4: 4770 bx lr +10038ff6: f880 20b6 strb.w r2, [r0, #182] ; 0xb6 +10038ffa: 4770 bx lr +10038ffc: f880 20b7 strb.w r2, [r0, #183] ; 0xb7 +10039000: 4770 bx lr +10039002: f880 20b8 strb.w r2, [r0, #184] ; 0xb8 +10039006: 4770 bx lr +10039008: f880 20b9 strb.w r2, [r0, #185] ; 0xb9 +1003900c: 4770 bx lr +1003900e: 4911 ldr r1, [pc, #68] ; (10039054 ) +10039010: e9c1 2302 strd r2, r3, [r1, #8] +10039014: 4770 bx lr +10039016: 4b0f ldr r3, [pc, #60] ; (10039054 ) +10039018: 611a str r2, [r3, #16] +1003901a: 4770 bx lr +1003901c: f880 276e strb.w r2, [r0, #1902] ; 0x76e +10039020: 4770 bx lr +10039022: f880 276f strb.w r2, [r0, #1903] ; 0x76f +10039026: 4770 bx lr +10039028: f880 20bd strb.w r2, [r0, #189] ; 0xbd +1003902c: 4770 bx lr +1003902e: f880 20be strb.w r2, [r0, #190] ; 0xbe +10039032: 4770 bx lr +10039034: f880 20bf strb.w r2, [r0, #191] ; 0xbf +10039038: 4770 bx lr +1003903a: f880 20c0 strb.w r2, [r0, #192] ; 0xc0 +1003903e: 4770 bx lr +10039040: f880 20c2 strb.w r2, [r0, #194] ; 0xc2 +10039044: 4770 bx lr +10039046: f880 20c1 strb.w r2, [r0, #193] ; 0xc1 +1003904a: 4770 bx lr +1003904c: f880 2759 strb.w r2, [r0, #1881] ; 0x759 +10039050: 4770 bx lr +10039052: bf00 nop +10039054: 10000720 .word 0x10000720 + +10039058 : +10039058: b510 push {r4, lr} +1003905a: 4604 mov r4, r0 +1003905c: f7ff fe8d bl 10038d7a +10039060: 6ae2 ldr r2, [r4, #44] ; 0x2c +10039062: f246 139f movw r3, #24991 ; 0x619f +10039066: 4013 ands r3, r2 +10039068: 2b00 cmp r3, #0 +1003906a: f640 0124 movw r1, #2084 ; 0x824 +1003906e: f640 0304 movw r3, #2052 ; 0x804 +10039072: bf08 it eq +10039074: 4619 moveq r1, r3 +10039076: bf14 ite ne +10039078: f44f 7200 movne.w r2, #512 ; 0x200 +1003907c: f44f 3280 moveq.w r2, #65536 ; 0x10000 +10039080: 4620 mov r0, r4 +10039082: f001 f874 bl 1003a16e +10039086: 6ae2 ldr r2, [r4, #44] ; 0x2c +10039088: f246 139f movw r3, #24991 ; 0x619f +1003908c: 4013 ands r3, r2 +1003908e: f640 0108 movw r1, #2056 ; 0x808 +10039092: f640 4204 movw r2, #3076 ; 0xc04 +10039096: 2b00 cmp r3, #0 +10039098: bf18 it ne +1003909a: 4611 movne r1, r2 +1003909c: 77a0 strb r0, [r4, #30] +1003909e: 220f movs r2, #15 +100390a0: 4620 mov r0, r4 +100390a2: f001 f864 bl 1003a16e +100390a6: 77e0 strb r0, [r4, #31] +100390a8: 4620 mov r0, r4 +100390aa: f000 faaf bl 1003960c +100390ae: 4620 mov r0, r4 +100390b0: f7ff fe59 bl 10038d66 +100390b4: 23ff movs r3, #255 ; 0xff +100390b6: f884 30ec strb.w r3, [r4, #236] ; 0xec +100390ba: bd10 pop {r4, pc} + +100390bc : +100390bc: b510 push {r4, lr} +100390be: 4604 mov r4, r0 +100390c0: f7ff ffca bl 10039058 +100390c4: 4620 mov r0, r4 +100390c6: f000 fc42 bl 1003994e +100390ca: 4620 mov r0, r4 +100390cc: f000 f8cc bl 10039268 +100390d0: 4620 mov r0, r4 +100390d2: f000 f93f bl 10039354 +100390d6: 4620 mov r0, r4 +100390d8: f001 f985 bl 1003a3e6 +100390dc: 4620 mov r0, r4 +100390de: f000 fa53 bl 10039588 +100390e2: 4620 mov r0, r4 +100390e4: f001 f901 bl 1003a2ea +100390e8: 4620 mov r0, r4 +100390ea: f001 f8db bl 1003a2a4 +100390ee: 6ae2 ldr r2, [r4, #44] ; 0x2c +100390f0: f246 139f movw r3, #24991 ; 0x619f +100390f4: 4013 ands r3, r2 +100390f6: b13b cbz r3, 10039108 +100390f8: f5b2 5f00 cmp.w r2, #8192 ; 0x2000 +100390fc: d104 bne.n 10039108 +100390fe: 4620 mov r0, r4 +10039100: e8bd 4010 ldmia.w sp!, {r4, lr} +10039104: f7ff b853 b.w 100381ae +10039108: bd10 pop {r4, pc} + +1003910a : +1003910a: 6f03 ldr r3, [r0, #112] ; 0x70 +1003910c: 781b ldrb r3, [r3, #0] +1003910e: 2b01 cmp r3, #1 +10039110: d10d bne.n 1003912e +10039112: 6e83 ldr r3, [r0, #104] ; 0x68 +10039114: 781b ldrb r3, [r3, #0] +10039116: 2b01 cmp r3, #1 +10039118: d103 bne.n 10039122 +1003911a: 6f43 ldr r3, [r0, #116] ; 0x74 +1003911c: 781b ldrb r3, [r3, #0] +1003911e: 3b02 subs r3, #2 +10039120: e007 b.n 10039132 +10039122: 2b02 cmp r3, #2 +10039124: d107 bne.n 10039136 +10039126: 6f43 ldr r3, [r0, #116] ; 0x74 +10039128: 781b ldrb r3, [r3, #0] +1003912a: 3302 adds r3, #2 +1003912c: e001 b.n 10039132 +1003912e: 6f43 ldr r3, [r0, #116] ; 0x74 +10039130: 781b ldrb r3, [r3, #0] +10039132: f880 3020 strb.w r3, [r0, #32] +10039136: 2300 movs r3, #0 +10039138: 461a mov r2, r3 +1003913a: 18c1 adds r1, r0, r3 +1003913c: f8d1 114c ldr.w r1, [r1, #332] ; 0x14c +10039140: b109 cbz r1, 10039146 +10039142: 3201 adds r2, #1 +10039144: b2d2 uxtb r2, r2 +10039146: 3304 adds r3, #4 +10039148: 2b1c cmp r3, #28 +1003914a: d1f6 bne.n 1003913a +1003914c: 2a01 cmp r2, #1 +1003914e: bf16 itet ne +10039150: 2300 movne r3, #0 +10039152: f880 20bc strbeq.w r2, [r0, #188] ; 0xbc +10039156: f880 30bc strbne.w r3, [r0, #188] ; 0xbc +1003915a: 4770 bx lr + +1003915c : +1003915c: 2901 cmp r1, #1 +1003915e: d004 beq.n 1003916a +10039160: d308 bcc.n 10039174 +10039162: 2902 cmp r1, #2 +10039164: d003 beq.n 1003916e +10039166: 2000 movs r0, #0 +10039168: 4770 bx lr +1003916a: 4803 ldr r0, [pc, #12] ; (10039178 ) +1003916c: 4770 bx lr +1003916e: f500 7099 add.w r0, r0, #306 ; 0x132 +10039172: 4770 bx lr +10039174: 4801 ldr r0, [pc, #4] ; (1003917c ) +10039176: 4770 bx lr +10039178: 10000738 .word 0x10000738 +1003917c: 100006e0 .word 0x100006e0 + +10039180 : +10039180: f8d0 366c ldr.w r3, [r0, #1644] ; 0x66c +10039184: f8d0 2680 ldr.w r2, [r0, #1664] ; 0x680 +10039188: b530 push {r4, r5, lr} +1003918a: 0111 lsls r1, r2, #4 +1003918c: 011d lsls r5, r3, #4 +1003918e: 2310 movs r3, #16 +10039190: 428d cmp r5, r1 +10039192: d205 bcs.n 100391a0 +10039194: 1a89 subs r1, r1, r2 +10039196: 1e5c subs r4, r3, #1 +10039198: b10b cbz r3, 1003919e +1003919a: 4623 mov r3, r4 +1003919c: e7f8 b.n 10039190 +1003919e: 2300 movs r3, #0 +100391a0: f8d0 1148 ldr.w r1, [r0, #328] ; 0x148 +100391a4: f5b2 7f96 cmp.w r2, #300 ; 0x12c +100391a8: ea4f 0151 mov.w r1, r1, lsr #1 +100391ac: eb01 0383 add.w r3, r1, r3, lsl #2 +100391b0: f8c0 3148 str.w r3, [r0, #328] ; 0x148 +100391b4: bf26 itte cs +100391b6: 3303 addcs r3, #3 +100391b8: 08db lsrcs r3, r3, #3 +100391ba: 2300 movcc r3, #0 +100391bc: 2b02 cmp r3, #2 +100391be: bf94 ite ls +100391c0: 2300 movls r3, #0 +100391c2: 2301 movhi r3, #1 +100391c4: f880 3144 strb.w r3, [r0, #324] ; 0x144 +100391c8: bd30 pop {r4, r5, pc} + +100391ca : +100391ca: b510 push {r4, lr} +100391cc: 4604 mov r4, r0 +100391ce: f7ff ff9c bl 1003910a +100391d2: 4620 mov r0, r4 +100391d4: f000 fde0 bl 10039d98 +100391d8: 4620 mov r0, r4 +100391da: f7ff ffd1 bl 10039180 +100391de: 4620 mov r0, r4 +100391e0: f001 f8f7 bl 1003a3d2 +100391e4: f8d4 308c ldr.w r3, [r4, #140] ; 0x8c +100391e8: 4620 mov r0, r4 +100391ea: 781b ldrb r3, [r3, #0] +100391ec: 2b01 cmp r3, #1 +100391ee: d10a bne.n 10039206 +100391f0: f000 fc0c bl 10039a0c +100391f4: 4620 mov r0, r4 +100391f6: f894 159c ldrb.w r1, [r4, #1436] ; 0x59c +100391fa: f000 f91f bl 1003943c +100391fe: 4620 mov r0, r4 +10039200: f000 fddf bl 10039dc2 +10039204: e015 b.n 10039232 +10039206: f000 f818 bl 1003923a +1003920a: 4620 mov r0, r4 +1003920c: f000 fc7c bl 10039b08 +10039210: f894 159c ldrb.w r1, [r4, #1436] ; 0x59c +10039214: 4620 mov r0, r4 +10039216: f000 f911 bl 1003943c +1003921a: 4620 mov r0, r4 +1003921c: f000 fdd1 bl 10039dc2 +10039220: 4620 mov r0, r4 +10039222: f001 f949 bl 1003a4b8 +10039226: 4620 mov r0, r4 +10039228: f000 f9c3 bl 100395b2 +1003922c: 4620 mov r0, r4 +1003922e: f001 f855 bl 1003a2dc +10039232: 2300 movs r3, #0 +10039234: f884 33e8 strb.w r3, [r4, #1000] ; 0x3e8 +10039238: bd10 pop {r4, pc} + +1003923a : +1003923a: b510 push {r4, lr} +1003923c: 2102 movs r1, #2 +1003923e: 4604 mov r4, r0 +10039240: f7ff ff8c bl 1003915c +10039244: 6a63 ldr r3, [r4, #36] ; 0x24 +10039246: f413 5300 ands.w r3, r3, #8192 ; 0x2000 +1003924a: d008 beq.n 1003925e +1003924c: 6ae2 ldr r2, [r4, #44] ; 0x2c +1003924e: 2301 movs r3, #1 +10039250: f412 4fc4 tst.w r2, #25088 ; 0x6200 +10039254: f884 312f strb.w r3, [r4, #303] ; 0x12f +10039258: d003 beq.n 10039262 +1003925a: 2300 movs r3, #0 +1003925c: e001 b.n 10039262 +1003925e: f884 312f strb.w r3, [r4, #303] ; 0x12f +10039262: f884 312d strb.w r3, [r4, #301] ; 0x12d +10039266: bd10 pop {r4, pc} + +10039268 : +10039268: 6ac2 ldr r2, [r0, #44] ; 0x2c +1003926a: f246 139f movw r3, #24991 ; 0x619f +1003926e: 4013 ands r3, r2 +10039270: b510 push {r4, lr} +10039272: 4604 mov r4, r0 +10039274: b393 cbz r3, 100392dc +10039276: f640 0196 movw r1, #2198 ; 0x896 +1003927a: f24c 3250 movw r2, #50000 ; 0xc350 +1003927e: f000 ff6a bl 1003a156 +10039282: 4620 mov r0, r4 +10039284: f640 0192 movw r1, #2194 ; 0x892 +10039288: f64f 72ff movw r2, #65535 ; 0xffff +1003928c: f000 ff63 bl 1003a156 +10039290: 4620 mov r0, r4 +10039292: f640 0198 movw r1, #2200 ; 0x898 +10039296: f06f 02af mvn.w r2, #175 ; 0xaf +1003929a: f000 ff5f bl 1003a15c +1003929e: 4620 mov r0, r4 +100392a0: f640 019c movw r1, #2204 ; 0x89c +100392a4: f04f 32ff mov.w r2, #4294967295 +100392a8: f000 ff58 bl 1003a15c +100392ac: 22ff movs r2, #255 ; 0xff +100392ae: 4620 mov r0, r4 +100392b0: 4613 mov r3, r2 +100392b2: f640 6128 movw r1, #3624 ; 0xe28 +100392b6: f000 ff57 bl 1003a168 +100392ba: 4620 mov r0, r4 +100392bc: f44f 6109 mov.w r1, #2192 ; 0x890 +100392c0: f44f 62e0 mov.w r2, #1792 ; 0x700 +100392c4: 2301 movs r3, #1 +100392c6: f000 ff4f bl 1003a168 +100392ca: 4620 mov r0, r4 +100392cc: f640 410c movw r1, #3084 ; 0xc0c +100392d0: 2280 movs r2, #128 ; 0x80 +100392d2: 2301 movs r3, #1 +100392d4: e8bd 4010 ldmia.w sp!, {r4, lr} +100392d8: f000 bf46 b.w 1003a168 +100392dc: bd10 pop {r4, pc} + +100392de : +100392de: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +100392e2: 6ac6 ldr r6, [r0, #44] ; 0x2c +100392e4: f246 149f movw r4, #24991 ; 0x619f +100392e8: 4034 ands r4, r6 +100392ea: 4605 mov r5, r0 +100392ec: 460f mov r7, r1 +100392ee: 4613 mov r3, r2 +100392f0: b17c cbz r4, 10039312 +100392f2: f640 414c movw r1, #3148 ; 0xc4c +100392f6: 22ff movs r2, #255 ; 0xff +100392f8: b2db uxtb r3, r3 +100392fa: f000 ff35 bl 1003a168 +100392fe: 4628 mov r0, r5 +10039300: b2fb uxtb r3, r7 +10039302: f640 414c movw r1, #3148 ; 0xc4c +10039306: f44f 027f mov.w r2, #16711680 ; 0xff0000 +1003930a: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +1003930e: f000 bf2b b.w 1003a168 +10039312: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +10039316 : +10039316: b570 push {r4, r5, r6, lr} +10039318: 460d mov r5, r1 +1003931a: 4604 mov r4, r0 +1003931c: f44f 61a4 mov.w r1, #1312 ; 0x520 +10039320: f44f 4200 mov.w r2, #32768 ; 0x8000 +10039324: b94d cbnz r5, 1003933a +10039326: 2301 movs r3, #1 +10039328: f000 ff1b bl 1003a162 +1003932c: 4620 mov r0, r4 +1003932e: f240 5124 movw r1, #1316 ; 0x524 +10039332: f44f 6200 mov.w r2, #2048 ; 0x800 +10039336: 462b mov r3, r5 +10039338: e008 b.n 1003934c +1003933a: 2300 movs r3, #0 +1003933c: f000 ff11 bl 1003a162 +10039340: 4620 mov r0, r4 +10039342: f240 5124 movw r1, #1316 ; 0x524 +10039346: f44f 6200 mov.w r2, #2048 ; 0x800 +1003934a: 2301 movs r3, #1 +1003934c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +10039350: f000 bf07 b.w 1003a162 + +10039354 : +10039354: b538 push {r3, r4, r5, lr} +10039356: 2102 movs r1, #2 +10039358: 4604 mov r4, r0 +1003935a: f7ff feff bl 1003915c +1003935e: 2301 movs r3, #1 +10039360: f884 3131 strb.w r3, [r4, #305] ; 0x131 +10039364: 6823 ldr r3, [r4, #0] +10039366: f241 32fa movw r2, #5114 ; 0x13fa +1003936a: 5c9a ldrb r2, [r3, r2] +1003936c: 4605 mov r5, r0 +1003936e: 3200 adds r2, #0 +10039370: bf18 it ne +10039372: 2201 movne r2, #1 +10039374: f884 212b strb.w r2, [r4, #299] ; 0x12b +10039378: f241 32fc movw r2, #5116 ; 0x13fc +1003937c: 5c9a ldrb r2, [r3, r2] +1003937e: f884 212e strb.w r2, [r4, #302] ; 0x12e +10039382: f241 32fb movw r2, #5115 ; 0x13fb +10039386: 5c9b ldrb r3, [r3, r2] +10039388: 3300 adds r3, #0 +1003938a: bf18 it ne +1003938c: 2301 movne r3, #1 +1003938e: 7283 strb r3, [r0, #10] +10039390: f894 312b ldrb.w r3, [r4, #299] ; 0x12b +10039394: b9ab cbnz r3, 100393c2 +10039396: 6823 ldr r3, [r4, #0] +10039398: f241 32fd movw r2, #5117 ; 0x13fd +1003939c: 5c9b ldrb r3, [r3, r2] +1003939e: b903 cbnz r3, 100393a2 +100393a0: 23f5 movs r3, #245 ; 0xf5 +100393a2: 6ae2 ldr r2, [r4, #44] ; 0x2c +100393a4: f884 3128 strb.w r3, [r4, #296] ; 0x128 +100393a8: f246 139f movw r3, #24991 ; 0x619f +100393ac: 4013 ands r3, r2 +100393ae: b15b cbz r3, 100393c8 +100393b0: 4620 mov r0, r4 +100393b2: f640 414c movw r1, #3148 ; 0xc4c +100393b6: f44f 7240 mov.w r2, #768 ; 0x300 +100393ba: 2303 movs r3, #3 +100393bc: f000 fed4 bl 1003a168 +100393c0: e002 b.n 100393c8 +100393c2: 230a movs r3, #10 +100393c4: f884 3128 strb.w r3, [r4, #296] ; 0x128 +100393c8: 2307 movs r3, #7 +100393ca: f884 3129 strb.w r3, [r4, #297] ; 0x129 +100393ce: 2214 movs r2, #20 +100393d0: 2300 movs r3, #0 +100393d2: f884 312c strb.w r3, [r4, #300] ; 0x12c +100393d6: f884 312f strb.w r3, [r4, #303] ; 0x12f +100393da: 702a strb r2, [r5, #0] +100393dc: 2208 movs r2, #8 +100393de: 706a strb r2, [r5, #1] +100393e0: 2232 movs r2, #50 ; 0x32 +100393e2: 70ea strb r2, [r5, #3] +100393e4: 2101 movs r1, #1 +100393e6: 221c movs r2, #28 +100393e8: 712a strb r2, [r5, #4] +100393ea: 71ab strb r3, [r5, #6] +100393ec: 71eb strb r3, [r5, #7] +100393ee: 716b strb r3, [r5, #5] +100393f0: 726b strb r3, [r5, #9] +100393f2: 732b strb r3, [r5, #12] +100393f4: 736b strb r3, [r5, #13] +100393f6: 7229 strb r1, [r5, #8] +100393f8: 4620 mov r0, r4 +100393fa: f7ff ff8c bl 10039316 +100393fe: 6ae2 ldr r2, [r4, #44] ; 0x2c +10039400: f246 139f movw r3, #24991 ; 0x619f +10039404: 4013 ands r3, r2 +10039406: b143 cbz r3, 1003941a +10039408: 4620 mov r0, r4 +1003940a: f640 1108 movw r1, #2312 ; 0x908 +1003940e: f04f 32ff mov.w r2, #4294967295 +10039412: f44f 7302 mov.w r3, #520 ; 0x208 +10039416: f000 fea7 bl 1003a168 +1003941a: 6ae3 ldr r3, [r4, #44] ; 0x2c +1003941c: f413 4fc0 tst.w r3, #24576 ; 0x6000 +10039420: d007 beq.n 10039432 +10039422: 4620 mov r0, r4 +10039424: f640 6124 movw r1, #3620 ; 0xe24 +10039428: f44f 1240 mov.w r2, #3145728 ; 0x300000 +1003942c: 2301 movs r3, #1 +1003942e: f000 fe9b bl 1003a168 +10039432: f894 3128 ldrb.w r3, [r4, #296] ; 0x128 +10039436: 3330 adds r3, #48 ; 0x30 +10039438: 732b strb r3, [r5, #12] +1003943a: bd38 pop {r3, r4, r5, pc} + +1003943c : +1003943c: e92d 4f70 stmdb sp!, {r4, r5, r6, r8, r9, sl, fp, lr} +10039440: 4689 mov r9, r1 +10039442: 2102 movs r1, #2 +10039444: 4605 mov r5, r0 +10039446: f7ff fe89 bl 1003915c +1003944a: f895 3131 ldrb.w r3, [r5, #305] ; 0x131 +1003944e: 4606 mov r6, r0 +10039450: 2b00 cmp r3, #0 +10039452: f000 8090 beq.w 10039576 +10039456: 7b43 ldrb r3, [r0, #13] +10039458: 2b01 cmp r3, #1 +1003945a: f000 808c beq.w 10039576 +1003945e: 6a6b ldr r3, [r5, #36] ; 0x24 +10039460: 049b lsls r3, r3, #18 +10039462: d405 bmi.n 10039470 +10039464: 7803 ldrb r3, [r0, #0] +10039466: f885 3128 strb.w r3, [r5, #296] ; 0x128 +1003946a: 7843 ldrb r3, [r0, #1] +1003946c: f885 3129 strb.w r3, [r5, #297] ; 0x129 +10039470: 4c42 ldr r4, [pc, #264] ; (1003957c ) +10039472: 2100 movs r1, #0 +10039474: f44f 3000 mov.w r0, #131072 ; 0x20000 +10039478: e9d4 2302 ldrd r2, r3, [r4, #8] +1003947c: 4002 ands r2, r0 +1003947e: 400b ands r3, r1 +10039480: ea52 0103 orrs.w r1, r2, r3 +10039484: d00c beq.n 100394a0 +10039486: 4b3e ldr r3, [pc, #248] ; (10039580 ) +10039488: 681b ldr r3, [r3, #0] +1003948a: b14b cbz r3, 100394a0 +1003948c: 4b3d ldr r3, [pc, #244] ; (10039584 ) +1003948e: f996 1003 ldrsb.w r1, [r6, #3] +10039492: 6e58 ldr r0, [r3, #100] ; 0x64 +10039494: f995 2128 ldrsb.w r2, [r5, #296] ; 0x128 +10039498: f995 3129 ldrsb.w r3, [r5, #297] ; 0x129 +1003949c: f7e1 fb70 bl 1001ab80 +100394a0: 6f2b ldr r3, [r5, #112] ; 0x70 +100394a2: 781a ldrb r2, [r3, #0] +100394a4: 78f3 ldrb r3, [r6, #3] +100394a6: b11a cbz r2, 100394b0 +100394a8: 2a01 cmp r2, #1 +100394aa: bf04 itt eq +100394ac: 3302 addeq r3, #2 +100394ae: b2db uxtbeq r3, r3 +100394b0: fa5f fa83 uxtb.w sl, r3 +100394b4: f886 a004 strb.w sl, [r6, #4] +100394b8: f44f 3200 mov.w r2, #131072 ; 0x20000 +100394bc: 2300 movs r3, #0 +100394be: e9d4 0102 ldrd r0, r1, [r4, #8] +100394c2: 4002 ands r2, r0 +100394c4: 400b ands r3, r1 +100394c6: ea52 0103 orrs.w r1, r2, r3 +100394ca: d009 beq.n 100394e0 +100394cc: 4a2c ldr r2, [pc, #176] ; (10039580 ) +100394ce: 6812 ldr r2, [r2, #0] +100394d0: b132 cbz r2, 100394e0 +100394d2: 4a2c ldr r2, [pc, #176] ; (10039584 ) +100394d4: 7ab1 ldrb r1, [r6, #10] +100394d6: 6e90 ldr r0, [r2, #104] ; 0x68 +100394d8: f895 212f ldrb.w r2, [r5, #303] ; 0x12f +100394dc: f7e1 fb50 bl 1001ab80 +100394e0: 7ab2 ldrb r2, [r6, #10] +100394e2: 2a01 cmp r2, #1 +100394e4: d10b bne.n 100394fe +100394e6: f895 10b7 ldrb.w r1, [r5, #183] ; 0xb7 +100394ea: f895 212f ldrb.w r2, [r5, #303] ; 0x12f +100394ee: b921 cbnz r1, 100394fa +100394f0: b91a cbnz r2, 100394fa +100394f2: 217f movs r1, #127 ; 0x7f +100394f4: 4628 mov r0, r5 +100394f6: 460a mov r2, r1 +100394f8: e039 b.n 1003956e +100394fa: 2a00 cmp r2, #0 +100394fc: d0f9 beq.n 100394f2 +100394fe: 6aea ldr r2, [r5, #44] ; 0x2c +10039500: f412 4fc4 tst.w r2, #25088 ; 0x6200 +10039504: d018 beq.n 10039538 +10039506: 7b32 ldrb r2, [r6, #12] +10039508: 454a cmp r2, r9 +1003950a: d907 bls.n 1003951c +1003950c: f895 112f ldrb.w r1, [r5, #303] ; 0x12f +10039510: 2901 cmp r1, #1 +10039512: d103 bne.n 1003951c +10039514: ebc9 0202 rsb r2, r9, r2 +10039518: b2d2 uxtb r2, r2 +1003951a: e000 b.n 1003951e +1003951c: 2200 movs r2, #0 +1003951e: f895 1128 ldrb.w r1, [r5, #296] ; 0x128 +10039522: eb0a 0301 add.w r3, sl, r1 +10039526: 1a9a subs r2, r3, r2 +10039528: f895 3129 ldrb.w r3, [r5, #297] ; 0x129 +1003952c: b2d2 uxtb r2, r2 +1003952e: fa5f fb82 uxtb.w fp, r2 +10039532: 1ad2 subs r2, r2, r3 +10039534: fa5f f882 uxtb.w r8, r2 +10039538: f44f 3200 mov.w r2, #131072 ; 0x20000 +1003953c: 2300 movs r3, #0 +1003953e: e9d4 0102 ldrd r0, r1, [r4, #8] +10039542: 4002 ands r2, r0 +10039544: 400b ands r3, r1 +10039546: ea52 0103 orrs.w r1, r2, r3 +1003954a: fa4f fb8b sxtb.w fp, fp +1003954e: fa4f f488 sxtb.w r4, r8 +10039552: d009 beq.n 10039568 +10039554: 4b0a ldr r3, [pc, #40] ; (10039580 ) +10039556: 681b ldr r3, [r3, #0] +10039558: b133 cbz r3, 10039568 +1003955a: 4b0a ldr r3, [pc, #40] ; (10039584 ) +1003955c: 4649 mov r1, r9 +1003955e: 6ed8 ldr r0, [r3, #108] ; 0x6c +10039560: 465a mov r2, fp +10039562: 4623 mov r3, r4 +10039564: f7e1 fb0c bl 1001ab80 +10039568: 4628 mov r0, r5 +1003956a: 4621 mov r1, r4 +1003956c: 465a mov r2, fp +1003956e: e8bd 4f70 ldmia.w sp!, {r4, r5, r6, r8, r9, sl, fp, lr} +10039572: f7ff beb4 b.w 100392de +10039576: e8bd 8f70 ldmia.w sp!, {r4, r5, r6, r8, r9, sl, fp, pc} +1003957a: bf00 nop +1003957c: 10000720 .word 0x10000720 +10039580: 10044f38 .word 0x10044f38 +10039584: 10043ac4 .word 0x10043ac4 + +10039588 : +10039588: b538 push {r3, r4, r5, lr} +1003958a: 2101 movs r1, #1 +1003958c: 4605 mov r5, r0 +1003958e: f7ff fde5 bl 1003915c +10039592: 4604 mov r4, r0 +10039594: 4628 mov r0, r5 +10039596: f005 f96b bl 1003e870 <__ROM_odm_GetDefaultCrytaltalCap_veneer> +1003959a: 2301 movs r3, #1 +1003959c: 70a3 strb r3, [r4, #2] +1003959e: 2314 movs r3, #20 +100395a0: 77a3 strb r3, [r4, #30] +100395a2: 230a movs r3, #10 +100395a4: 77e3 strb r3, [r4, #31] +100395a6: 2350 movs r3, #80 ; 0x50 +100395a8: 70e0 strb r0, [r4, #3] +100395aa: 7120 strb r0, [r4, #4] +100395ac: f884 3020 strb.w r3, [r4, #32] +100395b0: bd38 pop {r3, r4, r5, pc} + +100395b2 : +100395b2: 6a42 ldr r2, [r0, #36] ; 0x24 +100395b4: 4603 mov r3, r0 +100395b6: 0452 lsls r2, r2, #17 +100395b8: d50a bpl.n 100395d0 +100395ba: f890 20b7 ldrb.w r2, [r0, #183] ; 0xb7 +100395be: b112 cbz r2, 100395c6 +100395c0: f890 20bc ldrb.w r2, [r0, #188] ; 0xbc +100395c4: b912 cbnz r2, 100395cc +100395c6: 4618 mov r0, r3 +100395c8: f005 b976 b.w 1003e8b8 <__ROM_ODM_CfoTrackingReset_veneer> +100395cc: f005 b9c4 b.w 1003e958 <__ROM_odm_CfoTrackingFlow_veneer> +100395d0: 4770 bx lr + +100395d2 : +100395d2: b5f8 push {r3, r4, r5, r6, r7, lr} +100395d4: 4607 mov r7, r0 +100395d6: 460e mov r6, r1 +100395d8: 2101 movs r1, #1 +100395da: 461d mov r5, r3 +100395dc: 4614 mov r4, r2 +100395de: f7ff fdbd bl 1003915c +100395e2: 6a7b ldr r3, [r7, #36] ; 0x24 +100395e4: 0459 lsls r1, r3, #17 +100395e6: d510 bpl.n 1003960a +100395e8: 78b3 ldrb r3, [r6, #2] +100395ea: b173 cbz r3, 1003960a +100395ec: b13d cbz r5, 100395fe +100395ee: f994 3000 ldrsb.w r3, [r4] +100395f2: 2d01 cmp r5, #1 +100395f4: 6083 str r3, [r0, #8] +100395f6: bf84 itt hi +100395f8: f994 3001 ldrsbhi.w r3, [r4, #1] +100395fc: 60c3 strhi r3, [r0, #12] +100395fe: 6943 ldr r3, [r0, #20] +10039600: 1c5a adds r2, r3, #1 +10039602: bf0c ite eq +10039604: 2300 moveq r3, #0 +10039606: 3301 addne r3, #1 +10039608: 6143 str r3, [r0, #20] +1003960a: bdf8 pop {r3, r4, r5, r6, r7, pc} + +1003960c : +1003960c: 4903 ldr r1, [pc, #12] ; (1003961c ) +1003960e: 2304 movs r3, #4 +10039610: 610b str r3, [r1, #16] +10039612: 2200 movs r2, #0 +10039614: 2300 movs r3, #0 +10039616: e9c1 2302 strd r2, r3, [r1, #8] +1003961a: 4770 bx lr +1003961c: 10000720 .word 0x10000720 + +10039620 : +10039620: b570 push {r4, r5, r6, lr} +10039622: f890 3580 ldrb.w r3, [r0, #1408] ; 0x580 +10039626: 4604 mov r4, r0 +10039628: 460d mov r5, r1 +1003962a: 6806 ldr r6, [r0, #0] +1003962c: 2b00 cmp r3, #0 +1003962e: d144 bne.n 100396ba +10039630: f890 359c ldrb.w r3, [r0, #1436] ; 0x59c +10039634: 428b cmp r3, r1 +10039636: d02c beq.n 10039692 +10039638: f890 3583 ldrb.w r3, [r0, #1411] ; 0x583 +1003963c: b923 cbnz r3, 10039648 +1003963e: f890 35a3 ldrb.w r3, [r0, #1443] ; 0x5a3 +10039642: 429d cmp r5, r3 +10039644: bf28 it cs +10039646: 461d movcs r5, r3 +10039648: 6a63 ldr r3, [r4, #36] ; 0x24 +1003964a: 049b lsls r3, r3, #18 +1003964c: d503 bpl.n 10039656 +1003964e: 4620 mov r0, r4 +10039650: 4629 mov r1, r5 +10039652: f7ff fef3 bl 1003943c +10039656: f894 3021 ldrb.w r3, [r4, #33] ; 0x21 +1003965a: f013 0f1c tst.w r3, #28 +1003965e: d016 beq.n 1003968e +10039660: 2100 movs r1, #0 +10039662: 4630 mov r0, r6 +10039664: f7f7 fa84 bl 10030b70 +10039668: 6ae2 ldr r2, [r4, #44] ; 0x2c +1003966a: f246 139f movw r3, #24991 ; 0x619f +1003966e: 4013 ands r3, r2 +10039670: 2b00 cmp r3, #0 +10039672: 4620 mov r0, r4 +10039674: f44f 6145 mov.w r1, #3152 ; 0xc50 +10039678: bf0c ite eq +1003967a: f04f 32ff moveq.w r2, #4294967295 +1003967e: 227f movne r2, #127 ; 0x7f +10039680: 462b mov r3, r5 +10039682: f000 fd71 bl 1003a168 +10039686: 4630 mov r0, r6 +10039688: 2101 movs r1, #1 +1003968a: f7f7 fa71 bl 10030b70 +1003968e: f884 559c strb.w r5, [r4, #1436] ; 0x59c +10039692: 4b0a ldr r3, [pc, #40] ; (100396bc ) +10039694: 2201 movs r2, #1 +10039696: e9d3 0102 ldrd r0, r1, [r3, #8] +1003969a: 2300 movs r3, #0 +1003969c: 4002 ands r2, r0 +1003969e: 400b ands r3, r1 +100396a0: ea52 0103 orrs.w r1, r2, r3 +100396a4: d009 beq.n 100396ba +100396a6: 4b06 ldr r3, [pc, #24] ; (100396c0 ) +100396a8: 681b ldr r3, [r3, #0] +100396aa: b133 cbz r3, 100396ba +100396ac: 4b05 ldr r3, [pc, #20] ; (100396c4 ) +100396ae: 4629 mov r1, r5 +100396b0: 6b18 ldr r0, [r3, #48] ; 0x30 +100396b2: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +100396b6: f7e1 ba63 b.w 1001ab80 +100396ba: bd70 pop {r4, r5, r6, pc} +100396bc: 10000720 .word 0x10000720 +100396c0: 10044f38 .word 0x10044f38 +100396c4: 10043ac4 .word 0x10043ac4 + +100396c8 : +100396c8: b570 push {r4, r5, r6, lr} +100396ca: 460d mov r5, r1 +100396cc: 2100 movs r1, #0 +100396ce: 4604 mov r4, r0 +100396d0: 4616 mov r6, r2 +100396d2: f7ff fd43 bl 1003915c +100396d6: 69c1 ldr r1, [r0, #28] +100396d8: f242 7210 movw r2, #10000 ; 0x2710 +100396dc: 4291 cmp r1, r2 +100396de: f894 35a4 ldrb.w r3, [r4, #1444] ; 0x5a4 +100396e2: d91f bls.n 10039724 +100396e4: f894 25ab ldrb.w r2, [r4, #1451] ; 0x5ab +100396e8: 2a03 cmp r2, #3 +100396ea: bf1c itt ne +100396ec: 3201 addne r2, #1 +100396ee: f884 25ab strbne.w r2, [r4, #1451] ; 0x5ab +100396f2: f894 25ac ldrb.w r2, [r4, #1452] ; 0x5ac +100396f6: 42b2 cmp r2, r6 +100396f8: d204 bcs.n 10039704 +100396fa: 2201 movs r2, #1 +100396fc: f884 65ac strb.w r6, [r4, #1452] ; 0x5ac +10039700: f884 25ab strb.w r2, [r4, #1451] ; 0x5ab +10039704: f894 25ab ldrb.w r2, [r4, #1451] ; 0x5ab +10039708: 2a02 cmp r2, #2 +1003970a: d924 bls.n 10039756 +1003970c: f894 25ac ldrb.w r2, [r4, #1452] ; 0x5ac +10039710: f894 35a3 ldrb.w r3, [r4, #1443] ; 0x5a3 +10039714: 1c51 adds r1, r2, #1 +10039716: 4299 cmp r1, r3 +10039718: bfbc itt lt +1003971a: 1c93 addlt r3, r2, #2 +1003971c: b2db uxtblt r3, r3 +1003971e: f44f 62e1 mov.w r2, #1800 ; 0x708 +10039722: e003 b.n 1003972c +10039724: f8d4 25b0 ldr.w r2, [r4, #1456] ; 0x5b0 +10039728: b11a cbz r2, 10039732 +1003972a: 3a01 subs r2, #1 +1003972c: f8c4 25b0 str.w r2, [r4, #1456] ; 0x5b0 +10039730: e011 b.n 10039756 +10039732: f894 15ab ldrb.w r1, [r4, #1451] ; 0x5ab +10039736: 2902 cmp r1, #2 +10039738: d80b bhi.n 10039752 +1003973a: f894 35ac ldrb.w r3, [r4, #1452] ; 0x5ac +1003973e: 1e5a subs r2, r3, #1 +10039740: 42aa cmp r2, r5 +10039742: bfcd iteet gt +10039744: 1e9a subgt r2, r3, #2 +10039746: f884 55ac strble.w r5, [r4, #1452] ; 0x5ac +1003974a: 462b movle r3, r5 +1003974c: f884 25ac strbgt.w r2, [r4, #1452] ; 0x5ac +10039750: e001 b.n 10039756 +10039752: f884 25ab strb.w r2, [r4, #1451] ; 0x5ab +10039756: 4618 mov r0, r3 +10039758: bd70 pop {r4, r5, r6, pc} + ... + +1003975c : +1003975c: b570 push {r4, r5, r6, lr} +1003975e: f44f 6140 mov.w r1, #3072 ; 0xc00 +10039762: 4605 mov r5, r0 +10039764: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 +10039768: 2301 movs r3, #1 +1003976a: f000 fcfd bl 1003a168 +1003976e: 4628 mov r0, r5 +10039770: 2301 movs r3, #1 +10039772: f44f 6150 mov.w r1, #3328 ; 0xd00 +10039776: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 +1003977a: f000 fcf5 bl 1003a168 +1003977e: 4628 mov r0, r5 +10039780: f44f 614f mov.w r1, #3312 ; 0xcf0 +10039784: f04f 32ff mov.w r2, #4294967295 +10039788: f000 fcf1 bl 1003a16e +1003978c: 4c60 ldr r4, [pc, #384] ; (10039910 ) +1003978e: b283 uxth r3, r0 +10039790: 0c00 lsrs r0, r0, #16 +10039792: 6260 str r0, [r4, #36] ; 0x24 +10039794: f44f 615a mov.w r1, #3488 ; 0xda0 +10039798: 4628 mov r0, r5 +1003979a: f04f 32ff mov.w r2, #4294967295 +1003979e: 6223 str r3, [r4, #32] +100397a0: f000 fce5 bl 1003a16e +100397a4: b283 uxth r3, r0 +100397a6: 0c00 lsrs r0, r0, #16 +100397a8: 6020 str r0, [r4, #0] +100397aa: f640 51a4 movw r1, #3492 ; 0xda4 +100397ae: 4628 mov r0, r5 +100397b0: f04f 32ff mov.w r2, #4294967295 +100397b4: 62a3 str r3, [r4, #40] ; 0x28 +100397b6: f000 fcda bl 1003a16e +100397ba: b283 uxth r3, r0 +100397bc: 0c00 lsrs r0, r0, #16 +100397be: 60a0 str r0, [r4, #8] +100397c0: f640 51a8 movw r1, #3496 ; 0xda8 +100397c4: 4628 mov r0, r5 +100397c6: f04f 32ff mov.w r2, #4294967295 +100397ca: 6063 str r3, [r4, #4] +100397cc: f000 fccf bl 1003a16e +100397d0: e894 000c ldmia.w r4, {r2, r3} +100397d4: 441a add r2, r3 +100397d6: 68a3 ldr r3, [r4, #8] +100397d8: b280 uxth r0, r0 +100397da: 441a add r2, r3 +100397dc: 6a23 ldr r3, [r4, #32] +100397de: 60e0 str r0, [r4, #12] +100397e0: 441a add r2, r3 +100397e2: 6a63 ldr r3, [r4, #36] ; 0x24 +100397e4: f640 212c movw r1, #2604 ; 0xa2c +100397e8: 4413 add r3, r2 +100397ea: 4418 add r0, r3 +100397ec: 6120 str r0, [r4, #16] +100397ee: f44f 5280 mov.w r2, #4096 ; 0x1000 +100397f2: 4628 mov r0, r5 +100397f4: 2301 movs r3, #1 +100397f6: f000 fcb7 bl 1003a168 +100397fa: 2301 movs r3, #1 +100397fc: 4628 mov r0, r5 +100397fe: f640 212c movw r1, #2604 ; 0xa2c +10039802: f44f 4280 mov.w r2, #16384 ; 0x4000 +10039806: f000 fcaf bl 1003a168 +1003980a: 4628 mov r0, r5 +1003980c: f640 215c movw r1, #2652 ; 0xa5c +10039810: 22ff movs r2, #255 ; 0xff +10039812: f000 fcac bl 1003a16e +10039816: f640 2158 movw r1, #2648 ; 0xa58 +1003981a: 61a0 str r0, [r4, #24] +1003981c: f04f 427f mov.w r2, #4278190080 ; 0xff000000 +10039820: 4628 mov r0, r5 +10039822: f000 fca4 bl 1003a16e +10039826: 69a3 ldr r3, [r4, #24] +10039828: 0200 lsls r0, r0, #8 +1003982a: b280 uxth r0, r0 +1003982c: 4403 add r3, r0 +1003982e: f44f 6126 mov.w r1, #2656 ; 0xa60 +10039832: 4628 mov r0, r5 +10039834: f04f 32ff mov.w r2, #4294967295 +10039838: 61a3 str r3, [r4, #24] +1003983a: f000 fc98 bl 1003a16e +1003983e: f3c0 2307 ubfx r3, r0, #8, #8 +10039842: 0200 lsls r0, r0, #8 +10039844: b280 uxth r0, r0 +10039846: 4318 orrs r0, r3 +10039848: 6a62 ldr r2, [r4, #36] ; 0x24 +1003984a: 6a23 ldr r3, [r4, #32] +1003984c: 62e0 str r0, [r4, #44] ; 0x2c +1003984e: 441a add r2, r3 +10039850: 6823 ldr r3, [r4, #0] +10039852: f640 410c movw r1, #3084 ; 0xc0c +10039856: 441a add r2, r3 +10039858: 6863 ldr r3, [r4, #4] +1003985a: 441a add r2, r3 +1003985c: 68a3 ldr r3, [r4, #8] +1003985e: 441a add r2, r3 +10039860: 68e3 ldr r3, [r4, #12] +10039862: 441a add r2, r3 +10039864: 69a3 ldr r3, [r4, #24] +10039866: 4413 add r3, r2 +10039868: 61e3 str r3, [r4, #28] +1003986a: 6aa3 ldr r3, [r4, #40] ; 0x28 +1003986c: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 +10039870: 4418 add r0, r3 +10039872: 6320 str r0, [r4, #48] ; 0x30 +10039874: 2301 movs r3, #1 +10039876: 4628 mov r0, r5 +10039878: f000 fc76 bl 1003a168 +1003987c: 4628 mov r0, r5 +1003987e: f640 410c movw r1, #3084 ; 0xc0c +10039882: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 +10039886: 2300 movs r3, #0 +10039888: f000 fc6e bl 1003a168 +1003988c: 4628 mov r0, r5 +1003988e: f44f 6150 mov.w r1, #3328 ; 0xd00 +10039892: f04f 6200 mov.w r2, #134217728 ; 0x8000000 +10039896: 2301 movs r3, #1 +10039898: f000 fc66 bl 1003a168 +1003989c: 4628 mov r0, r5 +1003989e: f44f 6150 mov.w r1, #3328 ; 0xd00 +100398a2: f04f 6200 mov.w r2, #134217728 ; 0x8000000 +100398a6: 2300 movs r3, #0 +100398a8: f000 fc5e bl 1003a168 +100398ac: 4628 mov r0, r5 +100398ae: f44f 6140 mov.w r1, #3072 ; 0xc00 +100398b2: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 +100398b6: 2300 movs r3, #0 +100398b8: f000 fc56 bl 1003a168 +100398bc: 4628 mov r0, r5 +100398be: f44f 6150 mov.w r1, #3328 ; 0xd00 +100398c2: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 +100398c6: 2300 movs r3, #0 +100398c8: f000 fc4e bl 1003a168 +100398cc: 4628 mov r0, r5 +100398ce: f640 212c movw r1, #2604 ; 0xa2c +100398d2: f44f 5240 mov.w r2, #12288 ; 0x3000 +100398d6: 2300 movs r3, #0 +100398d8: f000 fc46 bl 1003a168 +100398dc: 4628 mov r0, r5 +100398de: f640 212c movw r1, #2604 ; 0xa2c +100398e2: f44f 5240 mov.w r2, #12288 ; 0x3000 +100398e6: 2302 movs r3, #2 +100398e8: f000 fc3e bl 1003a168 +100398ec: 4628 mov r0, r5 +100398ee: f640 212c movw r1, #2604 ; 0xa2c +100398f2: f44f 4240 mov.w r2, #49152 ; 0xc000 +100398f6: 2300 movs r3, #0 +100398f8: f000 fc36 bl 1003a168 +100398fc: 4628 mov r0, r5 +100398fe: f640 212c movw r1, #2604 ; 0xa2c +10039902: f44f 4240 mov.w r2, #49152 ; 0xc000 +10039906: 2302 movs r3, #2 +10039908: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1003990c: f000 bc2c b.w 1003a168 +10039910: 100006e0 .word 0x100006e0 + +10039914 : +10039914: b570 push {r4, r5, r6, lr} +10039916: f890 35a7 ldrb.w r3, [r0, #1447] ; 0x5a7 +1003991a: 4604 mov r4, r0 +1003991c: 428b cmp r3, r1 +1003991e: 460d mov r5, r1 +10039920: 6806 ldr r6, [r0, #0] +10039922: d00d beq.n 10039940 +10039924: 2100 movs r1, #0 +10039926: 4630 mov r0, r6 +10039928: f7f7 f922 bl 10030b70 +1003992c: 4620 mov r0, r4 +1003992e: f640 210a movw r1, #2570 ; 0xa0a +10039932: 462a mov r2, r5 +10039934: f000 fc0c bl 1003a150 +10039938: 4630 mov r0, r6 +1003993a: 2101 movs r1, #1 +1003993c: f7f7 f918 bl 10030b70 +10039940: f894 35a7 ldrb.w r3, [r4, #1447] ; 0x5a7 +10039944: f884 55a7 strb.w r5, [r4, #1447] ; 0x5a7 +10039948: f884 35a6 strb.w r3, [r4, #1446] ; 0x5a6 +1003994c: bd70 pop {r4, r5, r6, pc} + +1003994e : +1003994e: 6ac2 ldr r2, [r0, #44] ; 0x2c +10039950: b538 push {r3, r4, r5, lr} +10039952: f246 139f movw r3, #24991 ; 0x619f +10039956: 2500 movs r5, #0 +10039958: 4013 ands r3, r2 +1003995a: 42ab cmp r3, r5 +1003995c: bf0c ite eq +1003995e: f04f 32ff moveq.w r2, #4294967295 +10039962: 227f movne r2, #127 ; 0x7f +10039964: f880 5580 strb.w r5, [r0, #1408] ; 0x580 +10039968: f880 5581 strb.w r5, [r0, #1409] ; 0x581 +1003996c: f880 5582 strb.w r5, [r0, #1410] ; 0x582 +10039970: f44f 6145 mov.w r1, #3152 ; 0xc50 +10039974: 4604 mov r4, r0 +10039976: f000 fbfa bl 1003a16e +1003997a: 2323 movs r3, #35 ; 0x23 +1003997c: f8c4 3588 str.w r3, [r4, #1416] ; 0x588 +10039980: 2328 movs r3, #40 ; 0x28 +10039982: f8c4 358c str.w r3, [r4, #1420] ; 0x58c +10039986: f44f 73c8 mov.w r3, #400 ; 0x190 +1003998a: f8c4 3590 str.w r3, [r4, #1424] ; 0x590 +1003998e: f44f 737a mov.w r3, #1000 ; 0x3e8 +10039992: f8c4 3594 str.w r3, [r4, #1428] ; 0x594 +10039996: 230a movs r3, #10 +10039998: f884 35a0 strb.w r3, [r4, #1440] ; 0x5a0 +1003999c: 230c movs r3, #12 +1003999e: f884 35a1 strb.w r3, [r4, #1441] ; 0x5a1 +100399a2: 23fc movs r3, #252 ; 0xfc +100399a4: f884 35a2 strb.w r3, [r4, #1442] ; 0x5a2 +100399a8: 23ff movs r3, #255 ; 0xff +100399aa: 2232 movs r2, #50 ; 0x32 +100399ac: f884 35a6 strb.w r3, [r4, #1446] ; 0x5a6 +100399b0: 2383 movs r3, #131 ; 0x83 +100399b2: f884 35a7 strb.w r3, [r4, #1447] ; 0x5a7 +100399b6: f884 259e strb.w r2, [r4, #1438] ; 0x59e +100399ba: 2320 movs r3, #32 +100399bc: 223e movs r2, #62 ; 0x3e +100399be: f884 059c strb.w r0, [r4, #1436] ; 0x59c +100399c2: f884 35ac strb.w r3, [r4, #1452] ; 0x5ac +100399c6: f884 55ab strb.w r5, [r4, #1451] ; 0x5ab +100399ca: f884 55b6 strb.w r5, [r4, #1462] ; 0x5b6 +100399ce: f884 55b7 strb.w r5, [r4, #1463] ; 0x5b7 +100399d2: f884 35b4 strb.w r3, [r4, #1460] ; 0x5b4 +100399d6: f884 35b5 strb.w r3, [r4, #1461] ; 0x5b5 +100399da: f884 25a3 strb.w r2, [r4, #1443] ; 0x5a3 +100399de: f884 35a4 strb.w r3, [r4, #1444] ; 0x5a4 +100399e2: f8c4 55b0 str.w r5, [r4, #1456] ; 0x5b0 +100399e6: bd38 pop {r3, r4, r5, pc} + +100399e8 : +100399e8: 6a43 ldr r3, [r0, #36] ; 0x24 +100399ea: f003 0309 and.w r3, r3, #9 +100399ee: 2b09 cmp r3, #9 +100399f0: d108 bne.n 10039a04 +100399f2: f8d0 3088 ldr.w r3, [r0, #136] ; 0x88 +100399f6: 781a ldrb r2, [r3, #0] +100399f8: b922 cbnz r2, 10039a04 +100399fa: f890 3582 ldrb.w r3, [r0, #1410] ; 0x582 +100399fe: b113 cbz r3, 10039a06 +10039a00: f880 2582 strb.w r2, [r0, #1410] ; 0x582 +10039a04: 2301 movs r3, #1 +10039a06: 4618 mov r0, r3 +10039a08: 4770 bx lr + ... + +10039a0c : +10039a0c: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +10039a10: 2100 movs r1, #0 +10039a12: 4680 mov r8, r0 +10039a14: f7ff fba2 bl 1003915c +10039a18: 4683 mov fp, r0 +10039a1a: 4640 mov r0, r8 +10039a1c: f898 40b9 ldrb.w r4, [r8, #185] ; 0xb9 +10039a20: f7ff ffe2 bl 100399e8 +10039a24: 2801 cmp r0, #1 +10039a26: d04d beq.n 10039ac4 +10039a28: f8db 301c ldr.w r3, [fp, #28] +10039a2c: 2b1e cmp r3, #30 +10039a2e: d902 bls.n 10039a36 +10039a30: f104 0309 add.w r3, r4, #9 +10039a34: e007 b.n 10039a46 +10039a36: 2b0f cmp r3, #15 +10039a38: d901 bls.n 10039a3e +10039a3a: 1de3 adds r3, r4, #7 +10039a3c: e003 b.n 10039a46 +10039a3e: 2b03 cmp r3, #3 +10039a40: bf8c ite hi +10039a42: 1d63 addhi r3, r4, #5 +10039a44: 1ce3 addls r3, r4, #3 +10039a46: f898 90b9 ldrb.w r9, [r8, #185] ; 0xb9 +10039a4a: f898 2759 ldrb.w r2, [r8, #1881] ; 0x759 +10039a4e: f1b9 0f2a cmp.w r9, #42 ; 0x2a +10039a52: bfc6 itte gt +10039a54: f1a9 090a subgt.w r9, r9, #10 +10039a58: fa5f f989 uxtbgt.w r9, r9 +10039a5c: f04f 0920 movle.w r9, #32 +10039a60: 2a00 cmp r2, #0 +10039a62: b2db uxtb r3, r3 +10039a64: bf0c ite eq +10039a66: f04f 0a46 moveq.w sl, #70 ; 0x46 +10039a6a: f04f 0a30 movne.w sl, #48 ; 0x30 +10039a6e: 4553 cmp r3, sl +10039a70: d803 bhi.n 10039a7a +10039a72: 4599 cmp r9, r3 +10039a74: bf28 it cs +10039a76: 464b movcs r3, r9 +10039a78: e000 b.n 10039a7c +10039a7a: 4653 mov r3, sl +10039a7c: 4a13 ldr r2, [pc, #76] ; (10039acc ) +10039a7e: 2401 movs r4, #1 +10039a80: 2500 movs r5, #0 +10039a82: e9d2 6702 ldrd r6, r7, [r2, #8] +10039a86: 4034 ands r4, r6 +10039a88: 403d ands r5, r7 +10039a8a: ea54 0205 orrs.w r2, r4, r5 +10039a8e: d012 beq.n 10039ab6 +10039a90: f898 13e8 ldrb.w r1, [r8, #1000] ; 0x3e8 +10039a94: 480e ldr r0, [pc, #56] ; (10039ad0 ) +10039a96: 9301 str r3, [sp, #4] +10039a98: f7e1 f872 bl 1001ab80 +10039a9c: f898 10b9 ldrb.w r1, [r8, #185] ; 0xb9 +10039aa0: f8db 201c ldr.w r2, [fp, #28] +10039aa4: 480b ldr r0, [pc, #44] ; (10039ad4 ) +10039aa6: f7e1 f86b bl 1001ab80 +10039aaa: 480b ldr r0, [pc, #44] ; (10039ad8 ) +10039aac: 4651 mov r1, sl +10039aae: 464a mov r2, r9 +10039ab0: f7e1 f866 bl 1001ab80 +10039ab4: 9b01 ldr r3, [sp, #4] +10039ab6: 4640 mov r0, r8 +10039ab8: 4619 mov r1, r3 +10039aba: b003 add sp, #12 +10039abc: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10039ac0: f7ff bdae b.w 10039620 +10039ac4: b003 add sp, #12 +10039ac6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10039aca: bf00 nop +10039acc: 10000720 .word 0x10000720 +10039ad0: 10043e0c .word 0x10043e0c +10039ad4: 10043e60 .word 0x10043e60 +10039ad8: 10043e19 .word 0x10043e19 + +10039adc : +10039adc: f890 30b7 ldrb.w r3, [r0, #183] ; 0xb7 +10039ae0: b143 cbz r3, 10039af4 +10039ae2: f44f 7340 mov.w r3, #768 ; 0x300 +10039ae6: f44f 7000 mov.w r0, #512 ; 0x200 +10039aea: e881 0009 stmia.w r1, {r0, r3} +10039aee: f44f 6380 mov.w r3, #1024 ; 0x400 +10039af2: e007 b.n 10039b04 +10039af4: f44f 637a mov.w r3, #4000 ; 0xfa0 +10039af8: f44f 62fa mov.w r2, #2000 ; 0x7d0 +10039afc: e881 000c stmia.w r1, {r2, r3} +10039b00: f241 3388 movw r3, #5000 ; 0x1388 +10039b04: 608b str r3, [r1, #8] +10039b06: 4770 bx lr + +10039b08 : +10039b08: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +10039b0c: 2100 movs r1, #0 +10039b0e: b087 sub sp, #28 +10039b10: 4604 mov r4, r0 +10039b12: f7ff fb23 bl 1003915c +10039b16: 4607 mov r7, r0 +10039b18: 4620 mov r0, r4 +10039b1a: f894 559c ldrb.w r5, [r4, #1436] ; 0x59c +10039b1e: f7ff ff63 bl 100399e8 +10039b22: 2801 cmp r0, #1 +10039b24: f000 8126 beq.w 10039d74 +10039b28: f894 312d ldrb.w r3, [r4, #301] ; 0x12d +10039b2c: 2b01 cmp r3, #1 +10039b2e: f894 30b7 ldrb.w r3, [r4, #183] ; 0xb7 +10039b32: bf0c ite eq +10039b34: f894 812c ldrbeq.w r8, [r4, #300] ; 0x12c +10039b38: f04f 0800 movne.w r8, #0 +10039b3c: b13b cbz r3, 10039b4e +10039b3e: f894 a5b6 ldrb.w sl, [r4, #1462] ; 0x5b6 +10039b42: f1da 0a01 rsbs sl, sl, #1 +10039b46: bf38 it cc +10039b48: f04f 0a00 movcc.w sl, #0 +10039b4c: e000 b.n 10039b50 +10039b4e: 469a mov sl, r3 +10039b50: fa5f fa8a uxtb.w sl, sl +10039b54: b943 cbnz r3, 10039b68 +10039b56: f894 95b6 ldrb.w r9, [r4, #1462] ; 0x5b6 +10039b5a: f1b9 0101 subs.w r1, r9, #1 +10039b5e: f1d1 0900 rsbs r9, r1, #0 +10039b62: eb59 0901 adcs.w r9, r9, r1 +10039b66: e001 b.n 10039b6c +10039b68: f04f 0900 mov.w r9, #0 +10039b6c: f8d4 20a8 ldr.w r2, [r4, #168] ; 0xa8 +10039b70: fa5f f989 uxtb.w r9, r9 +10039b74: 7812 ldrb r2, [r2, #0] +10039b76: b18a cbz r2, 10039b9c +10039b78: f8d4 20ac ldr.w r2, [r4, #172] ; 0xac +10039b7c: 7811 ldrb r1, [r2, #0] +10039b7e: 060a lsls r2, r1, #24 +10039b80: d50c bpl.n 10039b9c +10039b82: 4a7e ldr r2, [pc, #504] ; (10039d7c ) +10039b84: 6813 ldr r3, [r2, #0] +10039b86: 1c58 adds r0, r3, #1 +10039b88: 2b02 cmp r3, #2 +10039b8a: 6010 str r0, [r2, #0] +10039b8c: f200 80f2 bhi.w 10039d74 +10039b90: 3176 adds r1, #118 ; 0x76 +10039b92: 4620 mov r0, r4 +10039b94: b2c9 uxtb r1, r1 +10039b96: f7ff fd43 bl 10039620 +10039b9a: e0eb b.n 10039d74 +10039b9c: b1bb cbz r3, 10039bce +10039b9e: f894 30c2 ldrb.w r3, [r4, #194] ; 0xc2 +10039ba2: f894 60b9 ldrb.w r6, [r4, #185] ; 0xb9 +10039ba6: 2b01 cmp r3, #1 +10039ba8: bf14 ite ne +10039baa: 230f movne r3, #15 +10039bac: 230a moveq r3, #10 +10039bae: 4433 add r3, r6 +10039bb0: 2b5a cmp r3, #90 ; 0x5a +10039bb2: dd01 ble.n 10039bb8 +10039bb4: 235a movs r3, #90 ; 0x5a +10039bb6: e002 b.n 10039bbe +10039bb8: 2b1f cmp r3, #31 +10039bba: bfd8 it le +10039bbc: 2320 movle r3, #32 +10039bbe: 2e1f cmp r6, #31 +10039bc0: f884 35a3 strb.w r3, [r4, #1443] ; 0x5a3 +10039bc4: d906 bls.n 10039bd4 +10039bc6: 2e3e cmp r6, #62 ; 0x3e +10039bc8: bf28 it cs +10039bca: 263e movcs r6, #62 ; 0x3e +10039bcc: e003 b.n 10039bd6 +10039bce: 232a movs r3, #42 ; 0x2a +10039bd0: f884 35a3 strb.w r3, [r4, #1443] ; 0x5a3 +10039bd4: 2620 movs r6, #32 +10039bd6: f8df b1bc ldr.w fp, [pc, #444] ; 10039d94 +10039bda: 2100 movs r1, #0 +10039bdc: 2001 movs r0, #1 +10039bde: e9db 2302 ldrd r2, r3, [fp, #8] +10039be2: 4002 ands r2, r0 +10039be4: 400b ands r3, r1 +10039be6: ea52 0103 orrs.w r1, r2, r3 +10039bea: d014 beq.n 10039c16 +10039bec: f894 13e8 ldrb.w r1, [r4, #1000] ; 0x3e8 +10039bf0: 4863 ldr r0, [pc, #396] ; (10039d80 ) +10039bf2: f7e0 ffc5 bl 1001ab80 +10039bf6: 69f9 ldr r1, [r7, #28] +10039bf8: f894 20b7 ldrb.w r2, [r4, #183] ; 0xb7 +10039bfc: 9100 str r1, [sp, #0] +10039bfe: f894 30b9 ldrb.w r3, [r4, #185] ; 0xb9 +10039c02: 4629 mov r1, r5 +10039c04: 485f ldr r0, [pc, #380] ; (10039d84 ) +10039c06: f7e0 ffbb bl 1001ab80 +10039c0a: 485f ldr r0, [pc, #380] ; (10039d88 ) +10039c0c: f894 15a3 ldrb.w r1, [r4, #1443] ; 0x5a3 +10039c10: 4632 mov r2, r6 +10039c12: f7e0 ffb5 bl 1001ab80 +10039c16: f894 30b7 ldrb.w r3, [r4, #183] ; 0xb7 +10039c1a: b93b cbnz r3, 10039c2c +10039c1c: f884 65a4 strb.w r6, [r4, #1444] ; 0x5a4 +10039c20: f1b9 0f00 cmp.w r9, #0 +10039c24: d017 beq.n 10039c56 +10039c26: f884 65ac strb.w r6, [r4, #1452] ; 0x5ac +10039c2a: e014 b.n 10039c56 +10039c2c: 2100 movs r1, #0 +10039c2e: 2001 movs r0, #1 +10039c30: e9db 2302 ldrd r2, r3, [fp, #8] +10039c34: 4002 ands r2, r0 +10039c36: 400b ands r3, r1 +10039c38: ea52 0103 orrs.w r1, r2, r3 +10039c3c: d004 beq.n 10039c48 +10039c3e: 4853 ldr r0, [pc, #332] ; (10039d8c ) +10039c40: f894 15ac ldrb.w r1, [r4, #1452] ; 0x5ac +10039c44: f7e0 ff9c bl 1001ab80 +10039c48: 4620 mov r0, r4 +10039c4a: 4631 mov r1, r6 +10039c4c: 462a mov r2, r5 +10039c4e: f7ff fd3b bl 100396c8 +10039c52: f884 05a4 strb.w r0, [r4, #1444] ; 0x5a4 +10039c56: 2201 movs r2, #1 +10039c58: 2300 movs r3, #0 +10039c5a: e9db 0102 ldrd r0, r1, [fp, #8] +10039c5e: 4002 ands r2, r0 +10039c60: 400b ands r3, r1 +10039c62: ea52 0103 orrs.w r1, r2, r3 +10039c66: d004 beq.n 10039c72 +10039c68: 4849 ldr r0, [pc, #292] ; (10039d90 ) +10039c6a: f894 15a4 ldrb.w r1, [r4, #1444] ; 0x5a4 +10039c6e: f7e0 ff87 bl 1001ab80 +10039c72: f894 30b7 ldrb.w r3, [r4, #183] ; 0xb7 +10039c76: b163 cbz r3, 10039c92 +10039c78: f1ba 0f00 cmp.w sl, #0 +10039c7c: d109 bne.n 10039c92 +10039c7e: f894 33e8 ldrb.w r3, [r4, #1000] ; 0x3e8 +10039c82: 2b04 cmp r3, #4 +10039c84: d805 bhi.n 10039c92 +10039c86: f894 30b8 ldrb.w r3, [r4, #184] ; 0xb8 +10039c8a: b113 cbz r3, 10039c92 +10039c8c: 2320 movs r3, #32 +10039c8e: f884 35a4 strb.w r3, [r4, #1444] ; 0x5a4 +10039c92: f894 35a3 ldrb.w r3, [r4, #1443] ; 0x5a3 +10039c96: f894 25a4 ldrb.w r2, [r4, #1444] ; 0x5a4 +10039c9a: a903 add r1, sp, #12 +10039c9c: 429a cmp r2, r3 +10039c9e: bf88 it hi +10039ca0: f884 35a4 strbhi.w r3, [r4, #1444] ; 0x5a4 +10039ca4: 4620 mov r0, r4 +10039ca6: f7ff ff19 bl 10039adc +10039caa: f894 30b7 ldrb.w r3, [r4, #183] ; 0xb7 +10039cae: f894 15a4 ldrb.w r1, [r4, #1444] ; 0x5a4 +10039cb2: b373 cbz r3, 10039d12 +10039cb4: f1ba 0f00 cmp.w sl, #0 +10039cb8: d00e beq.n 10039cd8 +10039cba: 2300 movs r3, #0 +10039cbc: f884 35ab strb.w r3, [r4, #1451] ; 0x5ab +10039cc0: f894 30b9 ldrb.w r3, [r4, #185] ; 0xb9 +10039cc4: 2b3d cmp r3, #61 ; 0x3d +10039cc6: d803 bhi.n 10039cd0 +10039cc8: 42ab cmp r3, r5 +10039cca: bf28 it cs +10039ccc: 461d movcs r5, r3 +10039cce: e02d b.n 10039d2c +10039cd0: 2d3d cmp r5, #61 ; 0x3d +10039cd2: bf98 it ls +10039cd4: 253e movls r5, #62 ; 0x3e +10039cd6: e031 b.n 10039d3c +10039cd8: 69fb ldr r3, [r7, #28] +10039cda: 9a05 ldr r2, [sp, #20] +10039cdc: 4293 cmp r3, r2 +10039cde: d901 bls.n 10039ce4 +10039ce0: 3504 adds r5, #4 +10039ce2: e008 b.n 10039cf6 +10039ce4: 9a04 ldr r2, [sp, #16] +10039ce6: 4293 cmp r3, r2 +10039ce8: d901 bls.n 10039cee +10039cea: 3502 adds r5, #2 +10039cec: e003 b.n 10039cf6 +10039cee: 9a03 ldr r2, [sp, #12] +10039cf0: 4293 cmp r3, r2 +10039cf2: d201 bcs.n 10039cf8 +10039cf4: 3d02 subs r5, #2 +10039cf6: b2ed uxtb r5, r5 +10039cf8: f894 23e8 ldrb.w r2, [r4, #1000] ; 0x3e8 +10039cfc: 2a04 cmp r2, #4 +10039cfe: d81d bhi.n 10039d3c +10039d00: f5b3 7f40 cmp.w r3, #768 ; 0x300 +10039d04: d21a bcs.n 10039d3c +10039d06: f894 30b8 ldrb.w r3, [r4, #184] ; 0xb8 +10039d0a: 2b00 cmp r3, #0 +10039d0c: bf18 it ne +10039d0e: 460d movne r5, r1 +10039d10: e014 b.n 10039d3c +10039d12: f1b9 0f00 cmp.w r9, #0 +10039d16: d110 bne.n 10039d3a +10039d18: 69fb ldr r3, [r7, #28] +10039d1a: 9a05 ldr r2, [sp, #20] +10039d1c: 4293 cmp r3, r2 +10039d1e: d901 bls.n 10039d24 +10039d20: 3504 adds r5, #4 +10039d22: e003 b.n 10039d2c +10039d24: 9a04 ldr r2, [sp, #16] +10039d26: 4293 cmp r3, r2 +10039d28: d902 bls.n 10039d30 +10039d2a: 3502 adds r5, #2 +10039d2c: b2ed uxtb r5, r5 +10039d2e: e005 b.n 10039d3c +10039d30: 9a03 ldr r2, [sp, #12] +10039d32: 4293 cmp r3, r2 +10039d34: d202 bcs.n 10039d3c +10039d36: 3d02 subs r5, #2 +10039d38: e7f8 b.n 10039d2c +10039d3a: 2520 movs r5, #32 +10039d3c: 428d cmp r5, r1 +10039d3e: bf28 it cs +10039d40: 4629 movcs r1, r5 +10039d42: f894 35a3 ldrb.w r3, [r4, #1443] ; 0x5a3 +10039d46: b2c9 uxtb r1, r1 +10039d48: 4299 cmp r1, r3 +10039d4a: bf28 it cs +10039d4c: 4619 movcs r1, r3 +10039d4e: 6a63 ldr r3, [r4, #36] ; 0x24 +10039d50: 049b lsls r3, r3, #18 +10039d52: d506 bpl.n 10039d62 +10039d54: f894 312d ldrb.w r3, [r4, #301] ; 0x12d +10039d58: 2b01 cmp r3, #1 +10039d5a: d102 bne.n 10039d62 +10039d5c: 4541 cmp r1, r8 +10039d5e: bf28 it cs +10039d60: 4641 movcs r1, r8 +10039d62: 4620 mov r0, r4 +10039d64: f7ff fc5c bl 10039620 +10039d68: f894 30b7 ldrb.w r3, [r4, #183] ; 0xb7 +10039d6c: f884 65b4 strb.w r6, [r4, #1460] ; 0x5b4 +10039d70: f884 35b6 strb.w r3, [r4, #1462] ; 0x5b6 +10039d74: b007 add sp, #28 +10039d76: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +10039d7a: bf00 nop +10039d7c: 10045970 .word 0x10045970 +10039d80: 10043e0c .word 0x10043e0c +10039d84: 10043e46 .word 0x10043e46 +10039d88: 10043e19 .word 0x10043e19 +10039d8c: 10043e74 .word 0x10043e74 +10039d90: 10043e32 .word 0x10043e32 +10039d94: 10000720 .word 0x10000720 + +10039d98 : +10039d98: 6803 ldr r3, [r0, #0] +10039d9a: f503 52a0 add.w r2, r3, #5120 ; 0x1400 +10039d9e: f892 1035 ldrb.w r1, [r2, #53] ; 0x35 +10039da2: b111 cbz r1, 10039daa +10039da4: 6f12 ldr r2, [r2, #112] ; 0x70 +10039da6: 2a02 cmp r2, #2 +10039da8: d00a beq.n 10039dc0 +10039daa: 6a42 ldr r2, [r0, #36] ; 0x24 +10039dac: 0712 lsls r2, r2, #28 +10039dae: d507 bpl.n 10039dc0 +10039db0: f241 62c8 movw r2, #5832 ; 0x16c8 +10039db4: 589b ldr r3, [r3, r2] +10039db6: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 +10039dba: b90b cbnz r3, 10039dc0 +10039dbc: f7ff bcce b.w 1003975c +10039dc0: 4770 bx lr + +10039dc2 : +10039dc2: b510 push {r4, lr} +10039dc4: 2100 movs r1, #0 +10039dc6: 4604 mov r4, r0 +10039dc8: f7ff f9c8 bl 1003915c +10039dcc: 6a63 ldr r3, [r4, #36] ; 0x24 +10039dce: f003 0328 and.w r3, r3, #40 ; 0x28 +10039dd2: 2b28 cmp r3, #40 ; 0x28 +10039dd4: d134 bne.n 10039e40 +10039dd6: f894 303a ldrb.w r3, [r4, #58] ; 0x3a +10039dda: bb8b cbnz r3, 10039e40 +10039ddc: f894 30b7 ldrb.w r3, [r4, #183] ; 0xb7 +10039de0: b14b cbz r3, 10039df6 +10039de2: f894 3759 ldrb.w r3, [r4, #1881] ; 0x759 +10039de6: b96b cbnz r3, 10039e04 +10039de8: f894 30b9 ldrb.w r3, [r4, #185] ; 0xb9 +10039dec: 2b19 cmp r3, #25 +10039dee: d80b bhi.n 10039e08 +10039df0: 3b0b subs r3, #11 +10039df2: 2b0e cmp r3, #14 +10039df4: d90a bls.n 10039e0c +10039df6: 6983 ldr r3, [r0, #24] +10039df8: f5b3 7f7a cmp.w r3, #1000 ; 0x3e8 +10039dfc: bf8c ite hi +10039dfe: 2183 movhi r1, #131 ; 0x83 +10039e00: 2140 movls r1, #64 ; 0x40 +10039e02: e004 b.n 10039e0e +10039e04: 2140 movs r1, #64 ; 0x40 +10039e06: e002 b.n 10039e0e +10039e08: 21cd movs r1, #205 ; 0xcd +10039e0a: e000 b.n 10039e0e +10039e0c: 2183 movs r1, #131 ; 0x83 +10039e0e: f8d4 30a8 ldr.w r3, [r4, #168] ; 0xa8 +10039e12: 781b ldrb r3, [r3, #0] +10039e14: b17b cbz r3, 10039e36 +10039e16: f8d4 30ac ldr.w r3, [r4, #172] ; 0xac +10039e1a: 781b ldrb r3, [r3, #0] +10039e1c: b25a sxtb r2, r3 +10039e1e: 2a00 cmp r2, #0 +10039e20: da09 bge.n 10039e36 +10039e22: 3259 adds r2, #89 ; 0x59 +10039e24: db06 blt.n 10039e34 +10039e26: 3359 adds r3, #89 ; 0x59 +10039e28: b2db uxtb r3, r3 +10039e2a: 2b18 cmp r3, #24 +10039e2c: bf8c ite hi +10039e2e: 21cd movhi r1, #205 ; 0xcd +10039e30: 2183 movls r1, #131 ; 0x83 +10039e32: e000 b.n 10039e36 +10039e34: 2140 movs r1, #64 ; 0x40 +10039e36: 4620 mov r0, r4 +10039e38: e8bd 4010 ldmia.w sp!, {r4, lr} +10039e3c: f7ff bd6a b.w 10039914 +10039e40: bd10 pop {r4, pc} + +10039e42 : +10039e42: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10039e46: 4698 mov r8, r3 +10039e48: 781b ldrb r3, [r3, #0] +10039e4a: 4605 mov r5, r0 +10039e4c: 2b03 cmp r3, #3 +10039e4e: 460c mov r4, r1 +10039e50: 4616 mov r6, r2 +10039e52: d845 bhi.n 10039ee0 +10039e54: f8d0 33e0 ldr.w r3, [r0, #992] ; 0x3e0 +10039e58: 3301 adds r3, #1 +10039e5a: f8c0 33e0 str.w r3, [r0, #992] ; 0x3e0 +10039e5e: 7952 ldrb r2, [r2, #5] +10039e60: f002 031f and.w r3, r2, #31 +10039e64: 0952 lsrs r2, r2, #5 +10039e66: 3a01 subs r2, #1 +10039e68: 2a06 cmp r2, #6 +10039e6a: d818 bhi.n 10039e9e +10039e6c: e8df f002 tbb [pc, r2] +10039e70: 170e1711 .word 0x170e1711 +10039e74: 1709 .short 0x1709 +10039e76: 04 .byte 0x04 +10039e77: 00 .byte 0x00 +10039e78: ebc3 13c3 rsb r3, r3, r3, lsl #7 +10039e7c: 005f lsls r7, r3, #1 +10039e7e: 3f35 subs r7, #53 ; 0x35 +10039e80: e00b b.n 10039e9a +10039e82: ebc3 13c3 rsb r3, r3, r3, lsl #7 +10039e86: 005f lsls r7, r3, #1 +10039e88: 3f23 subs r7, #35 ; 0x23 +10039e8a: e006 b.n 10039e9a +10039e8c: f06f 070a mvn.w r7, #10 +10039e90: e001 b.n 10039e96 +10039e92: f06f 0703 mvn.w r7, #3 +10039e96: 1aff subs r7, r7, r3 +10039e98: 007f lsls r7, r7, #1 +10039e9a: b2ff uxtb r7, r7 +10039e9c: e000 b.n 10039ea0 +10039e9e: 2700 movs r7, #0 +10039ea0: b278 sxtb r0, r7 +10039ea2: f004 fd21 bl 1003e8e8 <__ROM_odm_QueryRxPwrPercentage_veneer> +10039ea6: 2828 cmp r0, #40 ; 0x28 +10039ea8: 7020 strb r0, [r4, #0] +10039eaa: 70e7 strb r7, [r4, #3] +10039eac: d902 bls.n 10039eb4 +10039eae: f895 3040 ldrb.w r3, [r5, #64] ; 0x40 +10039eb2: b173 cbz r3, 10039ed2 +10039eb4: 7932 ldrb r2, [r6, #4] +10039eb6: 2a40 cmp r2, #64 ; 0x40 +10039eb8: d80d bhi.n 10039ed6 +10039eba: 2a13 cmp r2, #19 +10039ebc: f04f 0364 mov.w r3, #100 ; 0x64 +10039ec0: d90a bls.n 10039ed8 +10039ec2: f1c2 0240 rsb r2, r2, #64 ; 0x40 +10039ec6: 4353 muls r3, r2 +10039ec8: 212c movs r1, #44 ; 0x2c +10039eca: fb93 f3f1 sdiv r3, r3, r1 +10039ece: b2db uxtb r3, r3 +10039ed0: e002 b.n 10039ed8 +10039ed2: 2364 movs r3, #100 ; 0x64 +10039ed4: e000 b.n 10039ed8 +10039ed6: 2300 movs r3, #0 +10039ed8: 7063 strb r3, [r4, #1] +10039eda: 7120 strb r0, [r4, #4] +10039edc: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +10039ee0: f8d0 33e4 ldr.w r3, [r0, #996] ; 0x3e4 +10039ee4: f890 a01f ldrb.w sl, [r0, #31] +10039ee8: 3301 adds r3, #1 +10039eea: f8c0 33e4 str.w r3, [r0, #996] ; 0x3e4 +10039eee: 7810 ldrb r0, [r2, #0] +10039ef0: f00a 0a01 and.w sl, sl, #1 +10039ef4: f000 003f and.w r0, r0, #63 ; 0x3f +10039ef8: 3837 subs r0, #55 ; 0x37 +10039efa: 0040 lsls r0, r0, #1 +10039efc: b240 sxtb r0, r0 +10039efe: f004 fcf3 bl 1003e8e8 <__ROM_odm_QueryRxPwrPercentage_veneer> +10039f02: 70a0 strb r0, [r4, #2] +10039f04: f896 9004 ldrb.w r9, [r6, #4] +10039f08: 4607 mov r7, r0 +10039f0a: ea4f 0959 mov.w r9, r9, lsr #1 +10039f0e: f1a9 096e sub.w r9, r9, #110 ; 0x6e +10039f12: fa5f f989 uxtb.w r9, r9 +10039f16: fa4f f089 sxtb.w r0, r9 +10039f1a: f004 fce5 bl 1003e8e8 <__ROM_odm_QueryRxPwrPercentage_veneer> +10039f1e: f884 9003 strb.w r9, [r4, #3] +10039f22: 7020 strb r0, [r4, #0] +10039f24: f996 000d ldrsb.w r0, [r6, #13] +10039f28: f004 fcda bl 1003e8e0 <__ROM_odm_EVMdbToPercentage_veneer> +10039f2c: 4641 mov r1, r8 +10039f2e: 7060 strb r0, [r4, #1] +10039f30: f106 0209 add.w r2, r6, #9 +10039f34: 4628 mov r0, r5 +10039f36: 2301 movs r3, #1 +10039f38: f7ff fb4b bl 100395d2 +10039f3c: f1ba 0f00 cmp.w sl, #0 +10039f40: d000 beq.n 10039f44 +10039f42: 7127 strb r7, [r4, #4] +10039f44: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + +10039f48 : +10039f48: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +10039f4c: 7853 ldrb r3, [r2, #1] +10039f4e: 2bff cmp r3, #255 ; 0xff +10039f50: f000 8099 beq.w 1003a086 +10039f54: eb00 0383 add.w r3, r0, r3, lsl #2 +10039f58: f8d3 414c ldr.w r4, [r3, #332] ; 0x14c +10039f5c: 2c00 cmp r4, #0 +10039f5e: f000 8092 beq.w 1003a086 +10039f62: 7893 ldrb r3, [r2, #2] +10039f64: 2b00 cmp r3, #0 +10039f66: f000 808e beq.w 1003a086 +10039f6a: 7913 ldrb r3, [r2, #4] +10039f6c: b123 cbz r3, 10039f78 +10039f6e: f890 33e8 ldrb.w r3, [r0, #1000] ; 0x3e8 +10039f72: 3301 adds r3, #1 +10039f74: f880 33e8 strb.w r3, [r0, #1000] ; 0x3e8 +10039f78: 7813 ldrb r3, [r2, #0] +10039f7a: f880 30ea strb.w r3, [r0, #234] ; 0xea +10039f7e: 78d7 ldrb r7, [r2, #3] +10039f80: f8d4 6324 ldr.w r6, [r4, #804] ; 0x324 +10039f84: f8d4 5328 ldr.w r5, [r4, #808] ; 0x328 +10039f88: b917 cbnz r7, 10039f90 +10039f8a: 7912 ldrb r2, [r2, #4] +10039f8c: 2a00 cmp r2, #0 +10039f8e: d07a beq.n 1003a086 +10039f90: 2b03 cmp r3, #3 +10039f92: f504 774c add.w r7, r4, #816 ; 0x330 +10039f96: d91b bls.n 10039fd0 +10039f98: 788b ldrb r3, [r1, #2] +10039f9a: 2d00 cmp r5, #0 +10039f9c: f880 30c3 strb.w r3, [r0, #195] ; 0xc3 +10039fa0: 780a ldrb r2, [r1, #0] +10039fa2: dc01 bgt.n 10039fa8 +10039fa4: 4615 mov r5, r2 +10039fa6: e009 b.n 10039fbc +10039fa8: 2113 movs r1, #19 +10039faa: 42aa cmp r2, r5 +10039fac: fb01 3505 mla r5, r1, r5, r3 +10039fb0: f04f 0214 mov.w r2, #20 +10039fb4: fb95 f5f2 sdiv r5, r5, r2 +10039fb8: bf88 it hi +10039fba: 3501 addhi r5, #1 +10039fbc: e9d7 2300 ldrd r2, r3, [r7] +10039fc0: 1892 adds r2, r2, r2 +10039fc2: eb43 0303 adc.w r3, r3, r3 +10039fc6: 2001 movs r0, #1 +10039fc8: 2100 movs r1, #0 +10039fca: 4302 orrs r2, r0 +10039fcc: 430b orrs r3, r1 +10039fce: e016 b.n 10039ffe +10039fd0: 780b ldrb r3, [r1, #0] +10039fd2: 2e00 cmp r6, #0 +10039fd4: f880 30c3 strb.w r3, [r0, #195] ; 0xc3 +10039fd8: 780b ldrb r3, [r1, #0] +10039fda: dc01 bgt.n 10039fe0 +10039fdc: 461e mov r6, r3 +10039fde: e009 b.n 10039ff4 +10039fe0: 2113 movs r1, #19 +10039fe2: 42b3 cmp r3, r6 +10039fe4: fb01 3606 mla r6, r1, r6, r3 +10039fe8: f04f 0214 mov.w r2, #20 +10039fec: fb96 f6f2 sdiv r6, r6, r2 +10039ff0: bf88 it hi +10039ff2: 3601 addhi r6, #1 +10039ff4: e9d7 2300 ldrd r2, r3, [r7] +10039ff8: 1892 adds r2, r2, r2 +10039ffa: eb43 0303 adc.w r3, r3, r3 +10039ffe: e9c7 2300 strd r2, r3, [r7] +1003a002: f894 3338 ldrb.w r3, [r4, #824] ; 0x338 +1003a006: f04f 0a00 mov.w sl, #0 +1003a00a: 2b3f cmp r3, #63 ; 0x3f +1003a00c: bf8c ite hi +1003a00e: 2340 movhi r3, #64 ; 0x40 +1003a010: 3301 addls r3, #1 +1003a012: f884 3338 strb.w r3, [r4, #824] ; 0x338 +1003a016: f894 8338 ldrb.w r8, [r4, #824] ; 0x338 +1003a01a: 46d1 mov r9, sl +1003a01c: fa5f f38a uxtb.w r3, sl +1003a020: 4543 cmp r3, r8 +1003a022: d20a bcs.n 1003a03a +1003a024: e9d7 0100 ldrd r0, r1, [r7] +1003a028: 4652 mov r2, sl +1003a02a: f003 fdef bl 1003dc0c <__aeabi_llsr> +1003a02e: f000 0001 and.w r0, r0, #1 +1003a032: 4481 add r9, r0 +1003a034: f10a 0a01 add.w sl, sl, #1 +1003a038: e7f0 b.n 1003a01c +1003a03a: f1b8 0f40 cmp.w r8, #64 ; 0x40 +1003a03e: d10f bne.n 1003a060 +1003a040: ea4f 1909 mov.w r9, r9, lsl #4 +1003a044: f1b9 0f40 cmp.w r9, #64 ; 0x40 +1003a048: bf28 it cs +1003a04a: f04f 0940 movcs.w r9, #64 ; 0x40 +1003a04e: f1c9 0840 rsb r8, r9, #64 ; 0x40 +1003a052: fb05 f909 mul.w r9, r5, r9 +1003a056: fb06 9808 mla r8, r6, r8, r9 +1003a05a: ea4f 1398 mov.w r3, r8, lsr #6 +1003a05e: e00c b.n 1003a07a +1003a060: f1b8 0f00 cmp.w r8, #0 +1003a064: d008 beq.n 1003a078 +1003a066: ebc9 0308 rsb r3, r9, r8 +1003a06a: fb05 f909 mul.w r9, r5, r9 +1003a06e: fb06 9903 mla r9, r6, r3, r9 +1003a072: fbb9 f3f8 udiv r3, r9, r8 +1003a076: e000 b.n 1003a07a +1003a078: 4643 mov r3, r8 +1003a07a: f8c4 6324 str.w r6, [r4, #804] ; 0x324 +1003a07e: f8c4 5328 str.w r5, [r4, #808] ; 0x328 +1003a082: f8c4 3320 str.w r3, [r4, #800] ; 0x320 +1003a086: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + +1003a08a : +1003a08a: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1003a08e: 4604 mov r4, r0 +1003a090: 461e mov r6, r3 +1003a092: 460f mov r7, r1 +1003a094: 4615 mov r5, r2 +1003a096: f7ff fed4 bl 10039e42 +1003a09a: f894 3758 ldrb.w r3, [r4, #1880] ; 0x758 +1003a09e: 2b01 cmp r3, #1 +1003a0a0: d007 beq.n 1003a0b2 +1003a0a2: 4620 mov r0, r4 +1003a0a4: 4639 mov r1, r7 +1003a0a6: 4632 mov r2, r6 +1003a0a8: 462b mov r3, r5 +1003a0aa: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +1003a0ae: f7ff bf4b b.w 10039f48 +1003a0b2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1003a0b6 : +1003a0b6: f7ff bfe8 b.w 1003a08a + +1003a0ba : +1003a0ba: b508 push {r3, lr} +1003a0bc: 6ac3 ldr r3, [r0, #44] ; 0x2c +1003a0be: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 +1003a0c2: d107 bne.n 1003a0d4 +1003a0c4: b911 cbnz r1, 1003a0cc +1003a0c6: f001 ff8f bl 1003bfe8 +1003a0ca: e003 b.n 1003a0d4 +1003a0cc: 2901 cmp r1, #1 +1003a0ce: d101 bne.n 1003a0d4 +1003a0d0: f002 f83e bl 1003c150 +1003a0d4: 2000 movs r0, #0 +1003a0d6: bd08 pop {r3, pc} + +1003a0d8 : +1003a0d8: 6ac3 ldr r3, [r0, #44] ; 0x2c +1003a0da: b510 push {r4, lr} +1003a0dc: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 +1003a0e0: 4604 mov r4, r0 +1003a0e2: d110 bne.n 1003a106 +1003a0e4: f890 3035 ldrb.w r3, [r0, #53] ; 0x35 +1003a0e8: 2b02 cmp r3, #2 +1003a0ea: d102 bne.n 1003a0f2 +1003a0ec: f001 ffb8 bl 1003c060 +1003a0f0: e006 b.n 1003a100 +1003a0f2: 2b03 cmp r3, #3 +1003a0f4: d102 bne.n 1003a0fc +1003a0f6: f002 f803 bl 1003c100 +1003a0fa: e001 b.n 1003a100 +1003a0fc: f001 ffd8 bl 1003c0b0 +1003a100: 4620 mov r0, r4 +1003a102: f002 f841 bl 1003c188 +1003a106: 2000 movs r0, #0 +1003a108: bd10 pop {r4, pc} + +1003a10a : +1003a10a: b508 push {r3, lr} +1003a10c: 6ac3 ldr r3, [r0, #44] ; 0x2c +1003a10e: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 +1003a112: d10c bne.n 1003a12e +1003a114: b911 cbnz r1, 1003a11c +1003a116: f7fe fd53 bl 10038bc0 +1003a11a: e008 b.n 1003a12e +1003a11c: 2901 cmp r1, #1 +1003a11e: d102 bne.n 1003a126 +1003a120: f7fe fd12 bl 10038b48 +1003a124: e003 b.n 1003a12e +1003a126: 2904 cmp r1, #4 +1003a128: d101 bne.n 1003a12e +1003a12a: f7fe fd87 bl 10038c3c +1003a12e: 2000 movs r0, #0 +1003a130: bd08 pop {r3, pc} + +1003a132 : +1003a132: b508 push {r3, lr} +1003a134: 6ac3 ldr r3, [r0, #44] ; 0x2c +1003a136: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 +1003a13a: d101 bne.n 1003a140 +1003a13c: f001 fe2e bl 1003bd9c +1003a140: 2000 movs r0, #0 +1003a142: bd08 pop {r3, pc} + +1003a144 : +1003a144: 6800 ldr r0, [r0, #0] +1003a146: f7fd bda8 b.w 10037c9a + +1003a14a : +1003a14a: 6800 ldr r0, [r0, #0] +1003a14c: f7fd bdb3 b.w 10037cb6 + +1003a150 : +1003a150: 6800 ldr r0, [r0, #0] +1003a152: f7fd bdb7 b.w 10037cc4 + +1003a156 : +1003a156: 6800 ldr r0, [r0, #0] +1003a158: f7fd bdbb b.w 10037cd2 + +1003a15c : +1003a15c: 6800 ldr r0, [r0, #0] +1003a15e: f7fd bdbf b.w 10037ce0 + +1003a162 : +1003a162: 6800 ldr r0, [r0, #0] +1003a164: f7f4 bd3f b.w 1002ebe6 + +1003a168 : +1003a168: 6800 ldr r0, [r0, #0] +1003a16a: f7f4 bd3c b.w 1002ebe6 + +1003a16e : +1003a16e: 6800 ldr r0, [r0, #0] +1003a170: f7f4 bd24 b.w 1002ebbc + +1003a174 : +1003a174: 6800 ldr r0, [r0, #0] +1003a176: f7f4 bdb1 b.w 1002ecdc + +1003a17a : +1003a17a: 6800 ldr r0, [r0, #0] +1003a17c: f7f4 bda2 b.w 1002ecc4 + +1003a180 : +1003a180: 4608 mov r0, r1 +1003a182: 4611 mov r1, r2 +1003a184: 461a mov r2, r3 +1003a186: f7dd b953 b.w 10017430 + +1003a18a : +1003a18a: f7dd ba83 b.w 10017694 + +1003a18e : +1003a18e: f7dd ba89 b.w 100176a4 + ... + +1003a194 : +1003a194: 4603 mov r3, r0 +1003a196: 6adb ldr r3, [r3, #44] ; 0x2c +1003a198: b510 push {r4, lr} +1003a19a: 2b10 cmp r3, #16 +1003a19c: 6800 ldr r0, [r0, #0] +1003a19e: d00a beq.n 1003a1b6 +1003a1a0: f5b3 7f80 cmp.w r3, #256 ; 0x100 +1003a1a4: d007 beq.n 1003a1b6 +1003a1a6: 2b80 cmp r3, #128 ; 0x80 +1003a1a8: d005 beq.n 1003a1b6 +1003a1aa: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 +1003a1ae: d002 beq.n 1003a1b6 +1003a1b0: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 +1003a1b4: d105 bne.n 1003a1c2 +1003a1b6: f44f 6148 mov.w r1, #3200 ; 0xc80 +1003a1ba: 4a0a ldr r2, [pc, #40] ; (1003a1e4 ) +1003a1bc: f7f4 fcfe bl 1002ebbc +1003a1c0: 4604 mov r4, r0 +1003a1c2: 2300 movs r3, #0 +1003a1c4: 4a08 ldr r2, [pc, #32] ; (1003a1e8 ) +1003a1c6: b2d8 uxtb r0, r3 +1003a1c8: f852 2023 ldr.w r2, [r2, r3, lsl #2] +1003a1cc: f5b2 1f80 cmp.w r2, #1048576 ; 0x100000 +1003a1d0: bf28 it cs +1003a1d2: 0d92 lsrcs r2, r2, #22 +1003a1d4: 4294 cmp r4, r2 +1003a1d6: d003 beq.n 1003a1e0 +1003a1d8: 3301 adds r3, #1 +1003a1da: 2b2b cmp r3, #43 ; 0x2b +1003a1dc: d1f2 bne.n 1003a1c4 +1003a1de: 4618 mov r0, r3 +1003a1e0: bd10 pop {r4, pc} +1003a1e2: bf00 nop +1003a1e4: ffc00000 .word 0xffc00000 +1003a1e8: 10043eac .word 0x10043eac + +1003a1ec : +1003a1ec: b510 push {r4, lr} +1003a1ee: 4604 mov r4, r0 +1003a1f0: f7ff ffd0 bl 1003a194 +1003a1f4: 6823 ldr r3, [r4, #0] +1003a1f6: f241 62c8 movw r2, #5832 ; 0x16c8 +1003a1fa: 589b ldr r3, [r3, r2] +1003a1fc: 2201 movs r2, #1 +1003a1fe: f884 279e strb.w r2, [r4, #1950] ; 0x79e +1003a202: 2200 movs r2, #0 +1003a204: f884 279c strb.w r2, [r4, #1948] ; 0x79c +1003a208: f884 279d strb.w r2, [r4, #1949] ; 0x79d +1003a20c: f8d4 209c ldr.w r2, [r4, #156] ; 0x9c +1003a210: 7812 ldrb r2, [r2, #0] +1003a212: f1d2 0201 rsbs r2, r2, #1 +1003a216: bf38 it cc +1003a218: 2200 movcc r2, #0 +1003a21a: f884 279f strb.w r2, [r4, #1951] ; 0x79f +1003a21e: f893 2044 ldrb.w r2, [r3, #68] ; 0x44 +1003a222: f884 27a5 strb.w r2, [r4, #1957] ; 0x7a5 +1003a226: f893 2044 ldrb.w r2, [r3, #68] ; 0x44 +1003a22a: f884 27a7 strb.w r2, [r4, #1959] ; 0x7a7 +1003a22e: f893 3044 ldrb.w r3, [r3, #68] ; 0x44 +1003a232: f884 37a6 strb.w r3, [r4, #1958] ; 0x7a6 +1003a236: 6ae3 ldr r3, [r4, #44] ; 0x2c +1003a238: 2b10 cmp r3, #16 +1003a23a: d00a beq.n 1003a252 +1003a23c: f5b3 7f80 cmp.w r3, #256 ; 0x100 +1003a240: d007 beq.n 1003a252 +1003a242: 2b80 cmp r3, #128 ; 0x80 +1003a244: d005 beq.n 1003a252 +1003a246: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 +1003a24a: d002 beq.n 1003a252 +1003a24c: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 +1003a250: d106 bne.n 1003a260 +1003a252: 282b cmp r0, #43 ; 0x2b +1003a254: bf28 it cs +1003a256: 201e movcs r0, #30 +1003a258: f884 0bef strb.w r0, [r4, #3055] ; 0xbef +1003a25c: 231b movs r3, #27 +1003a25e: e005 b.n 1003a26c +1003a260: 2825 cmp r0, #37 ; 0x25 +1003a262: bf28 it cs +1003a264: 2018 movcs r0, #24 +1003a266: f884 0bef strb.w r0, [r4, #3055] ; 0xbef +1003a26a: 2318 movs r3, #24 +1003a26c: f884 3bf0 strb.w r3, [r4, #3056] ; 0xbf0 +1003a270: f894 3bf0 ldrb.w r3, [r4, #3056] ; 0xbf0 +1003a274: f894 2bef ldrb.w r2, [r4, #3055] ; 0xbef +1003a278: f884 3bee strb.w r3, [r4, #3054] ; 0xbee +1003a27c: f884 37c1 strb.w r3, [r4, #1985] ; 0x7c1 +1003a280: 2300 movs r3, #0 +1003a282: f884 37c3 strb.w r3, [r4, #1987] ; 0x7c3 +1003a286: f884 37c4 strb.w r3, [r4, #1988] ; 0x7c4 +1003a28a: f884 37c2 strb.w r3, [r4, #1986] ; 0x7c2 +1003a28e: f884 2bea strb.w r2, [r4, #3050] ; 0xbea +1003a292: f884 27c5 strb.w r2, [r4, #1989] ; 0x7c5 +1003a296: f884 37c7 strb.w r3, [r4, #1991] ; 0x7c7 +1003a29a: f884 37c8 strb.w r3, [r4, #1992] ; 0x7c8 +1003a29e: f884 37c6 strb.w r3, [r4, #1990] ; 0x7c6 +1003a2a2: bd10 pop {r4, pc} + +1003a2a4 : +1003a2a4: f7ff bfa2 b.w 1003a1ec + +1003a2a8 : +1003a2a8: 6a43 ldr r3, [r0, #36] ; 0x24 +1003a2aa: b513 push {r0, r1, r4, lr} +1003a2ac: 01db lsls r3, r3, #7 +1003a2ae: 4604 mov r4, r0 +1003a2b0: 6802 ldr r2, [r0, #0] +1003a2b2: d511 bpl.n 1003a2d8 +1003a2b4: f890 17a0 ldrb.w r1, [r0, #1952] ; 0x7a0 +1003a2b8: b941 cbnz r1, 1003a2cc +1003a2ba: 2303 movs r3, #3 +1003a2bc: 9300 str r3, [sp, #0] +1003a2be: 2242 movs r2, #66 ; 0x42 +1003a2c0: f44f 3340 mov.w r3, #196608 ; 0x30000 +1003a2c4: f7ff ff56 bl 1003a174 +1003a2c8: 2301 movs r3, #1 +1003a2ca: e003 b.n 1003a2d4 +1003a2cc: 4610 mov r0, r2 +1003a2ce: f003 f9fd bl 1003d6cc +1003a2d2: 2300 movs r3, #0 +1003a2d4: f884 37a0 strb.w r3, [r4, #1952] ; 0x7a0 +1003a2d8: b002 add sp, #8 +1003a2da: bd10 pop {r4, pc} + +1003a2dc : +1003a2dc: f890 3021 ldrb.w r3, [r0, #33] ; 0x21 +1003a2e0: 2b10 cmp r3, #16 +1003a2e2: d101 bne.n 1003a2e8 +1003a2e4: f7ff bfe0 b.w 1003a2a8 +1003a2e8: 4770 bx lr + +1003a2ea : +1003a2ea: 2300 movs r3, #0 +1003a2ec: f880 3644 strb.w r3, [r0, #1604] ; 0x644 +1003a2f0: 4770 bx lr + +1003a2f2 : +1003a2f2: 2301 movs r3, #1 +1003a2f4: f880 3123 strb.w r3, [r0, #291] ; 0x123 +1003a2f8: 4770 bx lr + +1003a2fa : +1003a2fa: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1003a2fe: b087 sub sp, #28 +1003a300: f8d0 9000 ldr.w r9, [r0] +1003a304: f10d 0a04 add.w sl, sp, #4 +1003a308: f241 63c8 movw r3, #5832 ; 0x16c8 +1003a30c: 4605 mov r5, r0 +1003a30e: 2100 movs r1, #0 +1003a310: 4650 mov r0, sl +1003a312: 2214 movs r2, #20 +1003a314: f859 6003 ldr.w r6, [r9, r3] +1003a318: f003 fc84 bl 1003dc24 +1003a31c: f895 30b7 ldrb.w r3, [r5, #183] ; 0xb7 +1003a320: 2b01 cmp r3, #1 +1003a322: d153 bne.n 1003a3cc +1003a324: 2400 movs r4, #0 +1003a326: f885 3644 strb.w r3, [r5, #1604] ; 0x644 +1003a32a: 27ff movs r7, #255 ; 0xff +1003a32c: 46a3 mov fp, r4 +1003a32e: 4623 mov r3, r4 +1003a330: eb05 0283 add.w r2, r5, r3, lsl #2 +1003a334: f8d2 114c ldr.w r1, [r2, #332] ; 0x14c +1003a338: b1d1 cbz r1, 1003a370 +1003a33a: f891 2108 ldrb.w r2, [r1, #264] ; 0x108 +1003a33e: 07d2 lsls r2, r2, #31 +1003a340: d416 bmi.n 1003a370 +1003a342: f8d1 2320 ldr.w r2, [r1, #800] ; 0x320 +1003a346: 1c50 adds r0, r2, #1 +1003a348: d012 beq.n 1003a370 +1003a34a: f8d1 1100 ldr.w r1, [r1, #256] ; 0x100 +1003a34e: 4297 cmp r7, r2 +1003a350: bfa8 it ge +1003a352: 4617 movge r7, r2 +1003a354: 4593 cmp fp, r2 +1003a356: bfb8 it lt +1003a358: 4693 movlt fp, r2 +1003a35a: 4299 cmp r1, r3 +1003a35c: d108 bne.n 1003a370 +1003a35e: a806 add r0, sp, #24 +1003a360: 1c61 adds r1, r4, #1 +1003a362: ea43 4202 orr.w r2, r3, r2, lsl #16 +1003a366: eb00 0484 add.w r4, r0, r4, lsl #2 +1003a36a: f844 2c14 str.w r2, [r4, #-20] +1003a36e: b2cc uxtb r4, r1 +1003a370: 3301 adds r3, #1 +1003a372: 2b07 cmp r3, #7 +1003a374: d1dc bne.n 1003a330 +1003a376: f04f 0800 mov.w r8, #0 +1003a37a: 45a0 cmp r8, r4 +1003a37c: da10 bge.n 1003a3a0 +1003a37e: f85a 2028 ldr.w r2, [sl, r8, lsl #2] +1003a382: b152 cbz r2, 1003a39a +1003a384: 6aeb ldr r3, [r5, #44] ; 0x2c +1003a386: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 +1003a38a: d106 bne.n 1003a39a +1003a38c: b2d1 uxtb r1, r2 +1003a38e: f506 7000 add.w r0, r6, #512 ; 0x200 +1003a392: f3c2 4207 ubfx r2, r2, #16, #8 +1003a396: f7fe fb43 bl 10038a20 +1003a39a: f108 0801 add.w r8, r8, #1 +1003a39e: e7ec b.n 1003a37a +1003a3a0: 2fff cmp r7, #255 ; 0xff +1003a3a2: bf04 itt eq +1003a3a4: 2300 moveq r3, #0 +1003a3a6: f8c6 31bc streq.w r3, [r6, #444] ; 0x1bc +1003a3aa: f241 63c8 movw r3, #5832 ; 0x16c8 +1003a3ae: f859 3003 ldr.w r3, [r9, r3] +1003a3b2: bf18 it ne +1003a3b4: f8c6 71bc strne.w r7, [r6, #444] ; 0x1bc +1003a3b8: f8d3 21bc ldr.w r2, [r3, #444] ; 0x1bc +1003a3bc: f8c6 b1c0 str.w fp, [r6, #448] ; 0x1c0 +1003a3c0: f8c3 21c4 str.w r2, [r3, #452] ; 0x1c4 +1003a3c4: f8d6 31c4 ldr.w r3, [r6, #452] ; 0x1c4 +1003a3c8: f885 30b9 strb.w r3, [r5, #185] ; 0xb9 +1003a3cc: b007 add sp, #28 +1003a3ce: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +1003a3d2 : +1003a3d2: 6a42 ldr r2, [r0, #36] ; 0x24 +1003a3d4: 06d2 lsls r2, r2, #27 +1003a3d6: d505 bpl.n 1003a3e4 +1003a3d8: f890 3021 ldrb.w r3, [r0, #33] ; 0x21 +1003a3dc: 2b10 cmp r3, #16 +1003a3de: d101 bne.n 1003a3e4 +1003a3e0: f7ff bf8b b.w 1003a2fa +1003a3e4: 4770 bx lr + +1003a3e6 : +1003a3e6: 2301 movs r3, #1 +1003a3e8: f880 376d strb.w r3, [r0, #1901] ; 0x76d +1003a3ec: f880 376c strb.w r3, [r0, #1900] ; 0x76c +1003a3f0: 2300 movs r3, #0 +1003a3f2: f880 3770 strb.w r3, [r0, #1904] ; 0x770 +1003a3f6: f880 3773 strb.w r3, [r0, #1907] ; 0x773 +1003a3fa: 2332 movs r3, #50 ; 0x32 +1003a3fc: 2223 movs r2, #35 ; 0x23 +1003a3fe: f880 376e strb.w r3, [r0, #1902] ; 0x76e +1003a402: 2314 movs r3, #20 +1003a404: f880 2771 strb.w r2, [r0, #1905] ; 0x771 +1003a408: f880 376f strb.w r3, [r0, #1903] ; 0x76f +1003a40c: 4770 bx lr + ... + +1003a410 : +1003a410: 4b10 ldr r3, [pc, #64] ; (1003a454 ) +1003a412: b082 sub sp, #8 +1003a414: 6818 ldr r0, [r3, #0] +1003a416: 9000 str r0, [sp, #0] +1003a418: 8898 ldrh r0, [r3, #4] +1003a41a: 799b ldrb r3, [r3, #6] +1003a41c: f8ad 0004 strh.w r0, [sp, #4] +1003a420: f88d 3006 strb.w r3, [sp, #6] +1003a424: 2300 movs r3, #0 +1003a426: b2d8 uxtb r0, r3 +1003a428: 4290 cmp r0, r2 +1003a42a: d304 bcc.n 1003a436 +1003a42c: f81d 0003 ldrb.w r0, [sp, r3] +1003a430: 3003 adds r0, #3 +1003a432: f80d 0003 strb.w r0, [sp, r3] +1003a436: 3301 adds r3, #1 +1003a438: 2b07 cmp r3, #7 +1003a43a: d1f4 bne.n 1003a426 +1003a43c: 2300 movs r3, #0 +1003a43e: f81d 2003 ldrb.w r2, [sp, r3] +1003a442: b2d8 uxtb r0, r3 +1003a444: 4291 cmp r1, r2 +1003a446: d303 bcc.n 1003a450 +1003a448: 3301 adds r3, #1 +1003a44a: 2b07 cmp r3, #7 +1003a44c: d1f7 bne.n 1003a43e +1003a44e: 2000 movs r0, #0 +1003a450: b002 add sp, #8 +1003a452: 4770 bx lr +1003a454: 10043f68 .word 0x10043f68 + +1003a458 : +1003a458: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +1003a45c: 6807 ldr r7, [r0, #0] +1003a45e: f241 73ac movw r3, #6060 ; 0x17ac +1003a462: 58fb ldr r3, [r7, r3] +1003a464: 4605 mov r5, r0 +1003a466: bb2b cbnz r3, 1003a4b4 +1003a468: f890 376c ldrb.w r3, [r0, #1900] ; 0x76c +1003a46c: b313 cbz r3, 1003a4b4 +1003a46e: 4606 mov r6, r0 +1003a470: f100 091c add.w r9, r0, #28 +1003a474: f8d6 414c ldr.w r4, [r6, #332] ; 0x14c +1003a478: b19c cbz r4, 1003a4a2 +1003a47a: f894 3108 ldrb.w r3, [r4, #264] ; 0x108 +1003a47e: 07db lsls r3, r3, #31 +1003a480: d40f bmi.n 1003a4a2 +1003a482: f894 8342 ldrb.w r8, [r4, #834] ; 0x342 +1003a486: f8d4 1320 ldr.w r1, [r4, #800] ; 0x320 +1003a48a: 4628 mov r0, r5 +1003a48c: 4642 mov r2, r8 +1003a48e: f7ff ffbf bl 1003a410 +1003a492: 4580 cmp r8, r0 +1003a494: 4601 mov r1, r0 +1003a496: d004 beq.n 1003a4a2 +1003a498: f884 1342 strb.w r1, [r4, #834] ; 0x342 +1003a49c: 4620 mov r0, r4 +1003a49e: f7f8 f8b3 bl 10032608 +1003a4a2: 3604 adds r6, #4 +1003a4a4: 454e cmp r6, r9 +1003a4a6: d1e5 bne.n 1003a474 +1003a4a8: 2200 movs r2, #0 +1003a4aa: f641 0379 movw r3, #6265 ; 0x1879 +1003a4ae: 54fa strb r2, [r7, r3] +1003a4b0: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1003a4b4: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + +1003a4b8 : +1003a4b8: 6a42 ldr r2, [r0, #36] ; 0x24 +1003a4ba: 0792 lsls r2, r2, #30 +1003a4bc: d505 bpl.n 1003a4ca +1003a4be: f890 3021 ldrb.w r3, [r0, #33] ; 0x21 +1003a4c2: 2b10 cmp r3, #16 +1003a4c4: d101 bne.n 1003a4ca +1003a4c6: f7ff bfc7 b.w 1003a458 +1003a4ca: 4770 bx lr + +1003a4cc : +1003a4cc: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +1003a4d0: eb00 0181 add.w r1, r0, r1, lsl #2 +1003a4d4: 4691 mov r9, r2 +1003a4d6: f8d1 214c ldr.w r2, [r1, #332] ; 0x14c +1003a4da: 6804 ldr r4, [r0, #0] +1003a4dc: 2a00 cmp r2, #0 +1003a4de: d05f beq.n 1003a5a0 +1003a4e0: f892 217c ldrb.w r2, [r2, #380] ; 0x17c +1003a4e4: 1e51 subs r1, r2, #1 +1003a4e6: 290a cmp r1, #10 +1003a4e8: d819 bhi.n 1003a51e +1003a4ea: e8df f001 tbb [pc, r1] +1003a4ee: 5b3b .short 0x5b3b +1003a4f0: 18185b06 .word 0x18185b06 +1003a4f4: 09091818 .word 0x09091818 +1003a4f8: 09 .byte 0x09 +1003a4f9: 00 .byte 0x00 +1003a4fa: f640 78f5 movw r8, #4085 ; 0xff5 +1003a4fe: e012 b.n 1003a526 +1003a500: f890 1032 ldrb.w r1, [r0, #50] ; 0x32 +1003a504: 2901 cmp r1, #1 +1003a506: d850 bhi.n 1003a5aa +1003a508: 6f01 ldr r1, [r0, #112] ; 0x70 +1003a50a: 482b ldr r0, [pc, #172] ; (1003a5b8 ) +1003a50c: f891 8000 ldrb.w r8, [r1] +1003a510: 492a ldr r1, [pc, #168] ; (1003a5bc ) +1003a512: f1b8 0f01 cmp.w r8, #1 +1003a516: bf14 ite ne +1003a518: 4680 movne r8, r0 +1003a51a: 4688 moveq r8, r1 +1003a51c: e003 b.n 1003a526 +1003a51e: 2a01 cmp r2, #1 +1003a520: f04f 0800 mov.w r8, #0 +1003a524: d020 beq.n 1003a568 +1003a526: b1fb cbz r3, 1003a568 +1003a528: 2b01 cmp r3, #1 +1003a52a: d102 bne.n 1003a532 +1003a52c: f028 080f bic.w r8, r8, #15 +1003a530: e01a b.n 1003a568 +1003a532: 2b02 cmp r3, #2 +1003a534: d104 bne.n 1003a540 +1003a536: f428 5880 bic.w r8, r8, #4096 ; 0x1000 +1003a53a: f028 081f bic.w r8, r8, #31 +1003a53e: e013 b.n 1003a568 +1003a540: 2b03 cmp r3, #3 +1003a542: d104 bne.n 1003a54e +1003a544: f428 5840 bic.w r8, r8, #12288 ; 0x3000 +1003a548: f028 083f bic.w r8, r8, #63 ; 0x3f +1003a54c: e00c b.n 1003a568 +1003a54e: 2b04 cmp r3, #4 +1003a550: bf0b itete eq +1003a552: f428 48e0 biceq.w r8, r8, #28672 ; 0x7000 +1003a556: f428 4870 bicne.w r8, r8, #61440 ; 0xf000 +1003a55a: f028 087f biceq.w r8, r8, #127 ; 0x7f +1003a55e: f028 08ff bicne.w r8, r8, #255 ; 0xff +1003a562: e001 b.n 1003a568 +1003a564: f04f 080f mov.w r8, #15 +1003a568: f641 0179 movw r1, #6265 ; 0x1879 +1003a56c: 5c61 ldrb r1, [r4, r1] +1003a56e: b119 cbz r1, 1003a578 +1003a570: f641 017c movw r1, #6268 ; 0x187c +1003a574: f854 8001 ldr.w r8, [r4, r1] +1003a578: 4911 ldr r1, [pc, #68] ; (1003a5c0 ) +1003a57a: 2402 movs r4, #2 +1003a57c: 2500 movs r5, #0 +1003a57e: e9d1 6702 ldrd r6, r7, [r1, #8] +1003a582: 4034 ands r4, r6 +1003a584: 403d ands r5, r7 +1003a586: ea54 0105 orrs.w r1, r4, r5 +1003a58a: d006 beq.n 1003a59a +1003a58c: 4619 mov r1, r3 +1003a58e: f8cd 8000 str.w r8, [sp] +1003a592: 480c ldr r0, [pc, #48] ; (1003a5c4 ) +1003a594: 464b mov r3, r9 +1003a596: f7e0 faf3 bl 1001ab80 +1003a59a: ea08 0009 and.w r0, r8, r9 +1003a59e: e007 b.n 1003a5b0 +1003a5a0: 4648 mov r0, r9 +1003a5a2: e005 b.n 1003a5b0 +1003a5a4: f44f 687f mov.w r8, #4080 ; 0xff0 +1003a5a8: e7bd b.n 1003a526 +1003a5aa: f04f 0800 mov.w r8, #0 +1003a5ae: e7ba b.n 1003a526 +1003a5b0: b003 add sp, #12 +1003a5b2: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +1003a5b6: bf00 nop +1003a5b8: 000ff005 .word 0x000ff005 +1003a5bc: 000ff015 .word 0x000ff015 +1003a5c0: 10000720 .word 0x10000720 +1003a5c4: 10043f6f .word 0x10043f6f + +1003a5c8 <_ReadEfuseInfo8195a>: +1003a5c8: b570 push {r4, r5, r6, lr} +1003a5ca: f5ad 7d02 sub.w sp, sp, #520 ; 0x208 +1003a5ce: 4604 mov r4, r0 +1003a5d0: a902 add r1, sp, #8 +1003a5d2: f7f3 f8ec bl 1002d7ae +1003a5d6: 4620 mov r0, r4 +1003a5d8: a902 add r1, sp, #8 +1003a5da: f7f3 f807 bl 1002d5ec +1003a5de: f241 4698 movw r6, #5272 ; 0x1498 +1003a5e2: 4620 mov r0, r4 +1003a5e4: a902 add r1, sp, #8 +1003a5e6: f7f3 f830 bl 1002d64a +1003a5ea: 4620 mov r0, r4 +1003a5ec: 5da2 ldrb r2, [r4, r6] +1003a5ee: a902 add r1, sp, #8 +1003a5f0: f7f3 f8d2 bl 1002d798 +1003a5f4: 4b25 ldr r3, [pc, #148] ; (1003a68c <_ReadEfuseInfo8195a+0xc4>) +1003a5f6: 5da2 ldrb r2, [r4, r6] +1003a5f8: 6818 ldr r0, [r3, #0] +1003a5fa: 889b ldrh r3, [r3, #4] +1003a5fc: f504 55a4 add.w r5, r4, #5248 ; 0x1480 +1003a600: 3518 adds r5, #24 +1003a602: 9000 str r0, [sp, #0] +1003a604: f8ad 3004 strh.w r3, [sp, #4] +1003a608: b142 cbz r2, 1003a61c <_ReadEfuseInfo8195a+0x54> +1003a60a: 2300 movs r3, #0 +1003a60c: 18ea adds r2, r5, r3 +1003a60e: f81d 1003 ldrb.w r1, [sp, r3] +1003a612: 3301 adds r3, #1 +1003a614: 2b06 cmp r3, #6 +1003a616: 7051 strb r1, [r2, #1] +1003a618: d1f8 bne.n 1003a60c <_ReadEfuseInfo8195a+0x44> +1003a61a: e005 b.n 1003a628 <_ReadEfuseInfo8195a+0x60> +1003a61c: 1c68 adds r0, r5, #1 +1003a61e: f50d 7191 add.w r1, sp, #290 ; 0x122 +1003a622: 2206 movs r2, #6 +1003a624: f7dc ff04 bl 10017430 +1003a628: f241 4598 movw r5, #5272 ; 0x1498 +1003a62c: 5d62 ldrb r2, [r4, r5] +1003a62e: 4620 mov r0, r4 +1003a630: a902 add r1, sp, #8 +1003a632: f7f3 f865 bl 1002d700 +1003a636: 5d62 ldrb r2, [r4, r5] +1003a638: f241 63c8 movw r3, #5832 ; 0x16c8 +1003a63c: 58e3 ldr r3, [r4, r3] +1003a63e: b91a cbnz r2, 1003a648 <_ReadEfuseInfo8195a+0x80> +1003a640: f89d 2139 ldrb.w r2, [sp, #313] ; 0x139 +1003a644: 0952 lsrs r2, r2, #5 +1003a646: e000 b.n 1003a64a <_ReadEfuseInfo8195a+0x82> +1003a648: 2200 movs r2, #0 +1003a64a: f883 2040 strb.w r2, [r3, #64] ; 0x40 +1003a64e: f241 4598 movw r5, #5272 ; 0x1498 +1003a652: 4620 mov r0, r4 +1003a654: a902 add r1, sp, #8 +1003a656: 5d62 ldrb r2, [r4, r5] +1003a658: f7f3 f8df bl 1002d81a +1003a65c: 4620 mov r0, r4 +1003a65e: a902 add r1, sp, #8 +1003a660: 5d62 ldrb r2, [r4, r5] +1003a662: f7f3 f8fd bl 1002d860 +1003a666: 4620 mov r0, r4 +1003a668: a902 add r1, sp, #8 +1003a66a: 5d62 ldrb r2, [r4, r5] +1003a66c: f7f3 f904 bl 1002d878 +1003a670: 4620 mov r0, r4 +1003a672: a902 add r1, sp, #8 +1003a674: 5d62 ldrb r2, [r4, r5] +1003a676: f7f3 f8e8 bl 1002d84a +1003a67a: 4620 mov r0, r4 +1003a67c: a902 add r1, sp, #8 +1003a67e: 5d62 ldrb r2, [r4, r5] +1003a680: f7f3 f90e bl 1002d8a0 +1003a684: f50d 7d02 add.w sp, sp, #520 ; 0x208 +1003a688: bd70 pop {r4, r5, r6, pc} +1003a68a: bf00 nop +1003a68c: 10043fbb .word 0x10043fbb + +1003a690 : +1003a690: b570 push {r4, r5, r6, lr} +1003a692: f241 63c8 movw r3, #5832 ; 0x16c8 +1003a696: 6885 ldr r5, [r0, #8] +1003a698: 58c6 ldr r6, [r0, r3] +1003a69a: 4604 mov r4, r0 +1003a69c: f001 fb72 bl 1003bd84 +1003a6a0: 2304 movs r3, #4 +1003a6a2: 746b strb r3, [r5, #17] +1003a6a4: 2305 movs r3, #5 +1003a6a6: 74ab strb r3, [r5, #18] +1003a6a8: 2306 movs r3, #6 +1003a6aa: 74eb strb r3, [r5, #19] +1003a6ac: 2103 movs r1, #3 +1003a6ae: 2307 movs r3, #7 +1003a6b0: f886 1e04 strb.w r1, [r6, #3588] ; 0xe04 +1003a6b4: f886 3e03 strb.w r3, [r6, #3587] ; 0xe03 +1003a6b8: 4620 mov r0, r4 +1003a6ba: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1003a6be: f7f7 b823 b.w 10031708 + ... + +1003a6c4 : +1003a6c4: b530 push {r4, r5, lr} +1003a6c6: f241 73c5 movw r3, #6085 ; 0x17c5 +1003a6ca: 5cc4 ldrb r4, [r0, r3] +1003a6cc: b085 sub sp, #20 +1003a6ce: 2c01 cmp r4, #1 +1003a6d0: 4605 mov r5, r0 +1003a6d2: d10e bne.n 1003a6f2 +1003a6d4: aa04 add r2, sp, #16 +1003a6d6: 2300 movs r3, #0 +1003a6d8: f802 3d01 strb.w r3, [r2, #-1]! +1003a6dc: 2140 movs r1, #64 ; 0x40 +1003a6de: f7f7 ff08 bl 100324f2 +1003a6e2: 4b06 ldr r3, [pc, #24] ; (1003a6fc ) +1003a6e4: 4628 mov r0, r5 +1003a6e6: 9300 str r3, [sp, #0] +1003a6e8: 21ff movs r1, #255 ; 0xff +1003a6ea: 220f movs r2, #15 +1003a6ec: 4623 mov r3, r4 +1003a6ee: f001 f9bb bl 1003ba68 +1003a6f2: f7dd f88b bl 1001780c +1003a6f6: 2001 movs r0, #1 +1003a6f8: b005 add sp, #20 +1003a6fa: bd30 pop {r4, r5, pc} +1003a6fc: 10045974 .word 0x10045974 + +1003a700 <_InitPowerOn>: +1003a700: b51f push {r0, r1, r2, r3, r4, lr} +1003a702: 2140 movs r1, #64 ; 0x40 +1003a704: f10d 020e add.w r2, sp, #14 +1003a708: 4604 mov r4, r0 +1003a70a: f7f7 fef9 bl 10032500 +1003a70e: f89d 200e ldrb.w r2, [sp, #14] +1003a712: b9b2 cbnz r2, 1003a742 <_InitPowerOn+0x42> +1003a714: 211c movs r1, #28 +1003a716: 4620 mov r0, r4 +1003a718: f7fd fad4 bl 10037cc4 +1003a71c: 4b17 ldr r3, [pc, #92] ; (1003a77c <_InitPowerOn+0x7c>) +1003a71e: 4620 mov r0, r4 +1003a720: 9300 str r3, [sp, #0] +1003a722: 21ff movs r1, #255 ; 0xff +1003a724: 220f movs r2, #15 +1003a726: 2301 movs r3, #1 +1003a728: f001 f99e bl 1003ba68 +1003a72c: 2801 cmp r0, #1 +1003a72e: d107 bne.n 1003a740 <_InitPowerOn+0x40> +1003a730: aa04 add r2, sp, #16 +1003a732: f802 0d01 strb.w r0, [r2, #-1]! +1003a736: 2140 movs r1, #64 ; 0x40 +1003a738: 4620 mov r0, r4 +1003a73a: f7f7 feda bl 100324f2 +1003a73e: e000 b.n 1003a742 <_InitPowerOn+0x42> +1003a740: b1c8 cbz r0, 1003a776 <_InitPowerOn+0x76> +1003a742: f44f 7180 mov.w r1, #256 ; 0x100 +1003a746: 4620 mov r0, r4 +1003a748: f7fd faae bl 10037ca8 +1003a74c: f440 62c7 orr.w r2, r0, #1592 ; 0x638 +1003a750: f042 0207 orr.w r2, r2, #7 +1003a754: b292 uxth r2, r2 +1003a756: f44f 7180 mov.w r1, #256 ; 0x100 +1003a75a: 4620 mov r0, r4 +1003a75c: f7fd fab9 bl 10037cd2 +1003a760: 2104 movs r1, #4 +1003a762: 4620 mov r0, r4 +1003a764: f7fd faa7 bl 10037cb6 +1003a768: 2104 movs r1, #4 +1003a76a: f440 7280 orr.w r2, r0, #256 ; 0x100 +1003a76e: 4620 mov r0, r4 +1003a770: f7fd fab6 bl 10037ce0 +1003a774: 2001 movs r0, #1 +1003a776: b004 add sp, #16 +1003a778: bd10 pop {r4, pc} +1003a77a: bf00 nop +1003a77c: 10045a14 .word 0x10045a14 + +1003a780 : +1003a780: b510 push {r4, lr} +1003a782: 4604 mov r4, r0 +1003a784: f7ff ffbc bl 1003a700 <_InitPowerOn> +1003a788: 4b08 ldr r3, [pc, #32] ; (1003a7ac ) +1003a78a: 681a ldr r2, [r3, #0] +1003a78c: f241 4398 movw r3, #5272 ; 0x1498 +1003a790: f3c2 1000 ubfx r0, r2, #4, #1 +1003a794: 18e1 adds r1, r4, r3 +1003a796: f082 0220 eor.w r2, r2, #32 +1003a79a: 7288 strb r0, [r1, #10] +1003a79c: f3c2 1240 ubfx r2, r2, #5, #1 +1003a7a0: 54e2 strb r2, [r4, r3] +1003a7a2: 4620 mov r0, r4 +1003a7a4: e8bd 4010 ldmia.w sp!, {r4, lr} +1003a7a8: f7ff bf0e b.w 1003a5c8 <_ReadEfuseInfo8195a> +1003a7ac: 400000e0 .word 0x400000e0 + +1003a7b0 <_InitDriverInfoSize>: +1003a7b0: 460a mov r2, r1 +1003a7b2: f240 610f movw r1, #1551 ; 0x60f +1003a7b6: f7fd ba85 b.w 10037cc4 + +1003a7ba <_InitNetworkType>: +1003a7ba: b510 push {r4, lr} +1003a7bc: f44f 7180 mov.w r1, #256 ; 0x100 +1003a7c0: 4604 mov r4, r0 +1003a7c2: f7fd fa78 bl 10037cb6 +1003a7c6: f420 3240 bic.w r2, r0, #196608 ; 0x30000 +1003a7ca: f44f 7180 mov.w r1, #256 ; 0x100 +1003a7ce: 4620 mov r0, r4 +1003a7d0: f442 3200 orr.w r2, r2, #131072 ; 0x20000 +1003a7d4: e8bd 4010 ldmia.w sp!, {r4, lr} +1003a7d8: f7fd ba82 b.w 10037ce0 + +1003a7dc <_InitWMACSetting>: +1003a7dc: b538 push {r3, r4, r5, lr} +1003a7de: f241 63c8 movw r3, #5832 ; 0x16c8 +1003a7e2: 58c5 ldr r5, [r0, r3] +1003a7e4: 4a18 ldr r2, [pc, #96] ; (1003a848 <_InitWMACSetting+0x6c>) +1003a7e6: 4604 mov r4, r0 +1003a7e8: 62aa str r2, [r5, #40] ; 0x28 +1003a7ea: f44f 61c1 mov.w r1, #1544 ; 0x608 +1003a7ee: f7fd fa77 bl 10037ce0 +1003a7f2: f44f 61c4 mov.w r1, #1568 ; 0x620 +1003a7f6: f04f 32ff mov.w r2, #4294967295 +1003a7fa: 4620 mov r0, r4 +1003a7fc: f7fd fa70 bl 10037ce0 +1003a800: f240 6124 movw r1, #1572 ; 0x624 +1003a804: f04f 32ff mov.w r2, #4294967295 +1003a808: 4620 mov r0, r4 +1003a80a: f7fd fa69 bl 10037ce0 +1003a80e: f240 61a4 movw r1, #1700 ; 0x6a4 +1003a812: f64f 72ff movw r2, #65535 ; 0xffff +1003a816: 4620 mov r0, r4 +1003a818: f7fd fa5b bl 10037cd2 +1003a81c: f240 61a2 movw r1, #1698 ; 0x6a2 +1003a820: f44f 6280 mov.w r2, #1024 ; 0x400 +1003a824: 4620 mov r0, r4 +1003a826: f7fd fa54 bl 10037cd2 +1003a82a: f44f 61d4 mov.w r1, #1696 ; 0x6a0 +1003a82e: f64f 72ff movw r2, #65535 ; 0xffff +1003a832: 4620 mov r0, r4 +1003a834: f7fd fa4d bl 10037cd2 +1003a838: 4620 mov r0, r4 +1003a83a: f7f0 faee bl 1002ae1a +1003a83e: 2300 movs r3, #0 +1003a840: f8a5 3e24 strh.w r3, [r5, #3620] ; 0xe24 +1003a844: bd38 pop {r3, r4, r5, pc} +1003a846: bf00 nop +1003a848: 700860ce .word 0x700860ce + +1003a84c <_InitAdaptiveCtrl>: +1003a84c: b510 push {r4, lr} +1003a84e: f44f 6188 mov.w r1, #1088 ; 0x440 +1003a852: 4604 mov r4, r0 +1003a854: f7fd fa2f bl 10037cb6 +1003a858: 4a0c ldr r2, [pc, #48] ; (1003a88c <_InitAdaptiveCtrl+0x40>) +1003a85a: 0d03 lsrs r3, r0, #20 +1003a85c: 051b lsls r3, r3, #20 +1003a85e: 431a orrs r2, r3 +1003a860: 4620 mov r0, r4 +1003a862: f44f 6188 mov.w r1, #1088 ; 0x440 +1003a866: f7fd fa3b bl 10037ce0 +1003a86a: 4620 mov r0, r4 +1003a86c: f44f 6185 mov.w r1, #1064 ; 0x428 +1003a870: f241 0210 movw r2, #4112 ; 0x1010 +1003a874: f7fd fa2d bl 10037cd2 +1003a878: 4620 mov r0, r4 +1003a87a: f240 412a movw r1, #1066 ; 0x42a +1003a87e: f243 0230 movw r2, #12336 ; 0x3030 +1003a882: e8bd 4010 ldmia.w sp!, {r4, lr} +1003a886: f7fd ba24 b.w 10037cd2 +1003a88a: bf00 nop +1003a88c: 000ffff1 .word 0x000ffff1 + +1003a890 <_InitEDCA>: +1003a890: b510 push {r4, lr} +1003a892: f44f 6185 mov.w r1, #1064 ; 0x428 +1003a896: 4604 mov r4, r0 +1003a898: f241 020a movw r2, #4106 ; 0x100a +1003a89c: f7fd fa19 bl 10037cd2 +1003a8a0: 4620 mov r0, r4 +1003a8a2: f240 613a movw r1, #1594 ; 0x63a +1003a8a6: f241 020a movw r2, #4106 ; 0x100a +1003a8aa: f7fd fa12 bl 10037cd2 +1003a8ae: 4620 mov r0, r4 +1003a8b0: f240 5114 movw r1, #1300 ; 0x514 +1003a8b4: f241 020a movw r2, #4106 ; 0x100a +1003a8b8: f7fd fa0b bl 10037cd2 +1003a8bc: 4620 mov r0, r4 +1003a8be: f240 5116 movw r1, #1302 ; 0x516 +1003a8c2: f241 020a movw r2, #4106 ; 0x100a +1003a8c6: f7fd fa04 bl 10037cd2 +1003a8ca: 4620 mov r0, r4 +1003a8cc: f44f 61a1 mov.w r1, #1288 ; 0x508 +1003a8d0: 4a0b ldr r2, [pc, #44] ; (1003a900 <_InitEDCA+0x70>) +1003a8d2: f7fd fa05 bl 10037ce0 +1003a8d6: 4620 mov r0, r4 +1003a8d8: f240 510c movw r1, #1292 ; 0x50c +1003a8dc: f24a 424f movw r2, #42063 ; 0xa44f +1003a8e0: f7fd f9fe bl 10037ce0 +1003a8e4: 4620 mov r0, r4 +1003a8e6: f240 5104 movw r1, #1284 ; 0x504 +1003a8ea: 4a06 ldr r2, [pc, #24] ; (1003a904 <_InitEDCA+0x74>) +1003a8ec: f7fd f9f8 bl 10037ce0 +1003a8f0: 4620 mov r0, r4 +1003a8f2: f44f 61a0 mov.w r1, #1280 ; 0x500 +1003a8f6: 4a04 ldr r2, [pc, #16] ; (1003a908 <_InitEDCA+0x78>) +1003a8f8: e8bd 4010 ldmia.w sp!, {r4, lr} +1003a8fc: f7fd b9f0 b.w 10037ce0 +1003a900: 005ea42b .word 0x005ea42b +1003a904: 005ea324 .word 0x005ea324 +1003a908: 002fa226 .word 0x002fa226 + +1003a90c <_InitRateFallback>: +1003a90c: b510 push {r4, lr} +1003a90e: f44f 6186 mov.w r1, #1072 ; 0x430 +1003a912: 4604 mov r4, r0 +1003a914: 2200 movs r2, #0 +1003a916: f7fd f9e3 bl 10037ce0 +1003a91a: 4620 mov r0, r4 +1003a91c: f240 4134 movw r1, #1076 ; 0x434 +1003a920: 4a08 ldr r2, [pc, #32] ; (1003a944 <_InitRateFallback+0x38>) +1003a922: f7fd f9dd bl 10037ce0 +1003a926: 4620 mov r0, r4 +1003a928: f44f 6187 mov.w r1, #1080 ; 0x438 +1003a92c: 4a06 ldr r2, [pc, #24] ; (1003a948 <_InitRateFallback+0x3c>) +1003a92e: f7fd f9d7 bl 10037ce0 +1003a932: 4620 mov r0, r4 +1003a934: f240 413c movw r1, #1084 ; 0x43c +1003a938: 4a04 ldr r2, [pc, #16] ; (1003a94c <_InitRateFallback+0x40>) +1003a93a: e8bd 4010 ldmia.w sp!, {r4, lr} +1003a93e: f7fd b9cf b.w 10037ce0 +1003a942: bf00 nop +1003a944: 10080404 .word 0x10080404 +1003a948: 04030201 .word 0x04030201 +1003a94c: 08070605 .word 0x08070605 + +1003a950 <_InitRetryFunction>: +1003a950: b510 push {r4, lr} +1003a952: f44f 6184 mov.w r1, #1056 ; 0x420 +1003a956: 4604 mov r4, r0 +1003a958: f7fd f99f bl 10037c9a +1003a95c: f060 027f orn r2, r0, #127 ; 0x7f +1003a960: f44f 6184 mov.w r1, #1056 ; 0x420 +1003a964: 4620 mov r0, r4 +1003a966: b2d2 uxtb r2, r2 +1003a968: f7fd f9ac bl 10037cc4 +1003a96c: 4620 mov r0, r4 +1003a96e: f44f 61c8 mov.w r1, #1600 ; 0x640 +1003a972: 2240 movs r2, #64 ; 0x40 +1003a974: e8bd 4010 ldmia.w sp!, {r4, lr} +1003a978: f7fd b9a4 b.w 10037cc4 + +1003a97c <_InitOperationMode>: +1003a97c: b538 push {r3, r4, r5, lr} +1003a97e: f241 63c8 movw r3, #5832 ; 0x16c8 +1003a982: 58c5 ldr r5, [r0, r3] +1003a984: f890 3521 ldrb.w r3, [r0, #1313] ; 0x521 +1003a988: f240 6103 movw r1, #1539 ; 0x603 +1003a98c: 3b02 subs r3, #2 +1003a98e: b2db uxtb r3, r3 +1003a990: 2b0e cmp r3, #14 +1003a992: bf96 itet ls +1003a994: 4a0a ldrls r2, [pc, #40] ; (1003a9c0 <_InitOperationMode+0x44>) +1003a996: 2200 movhi r2, #0 +1003a998: 5cd2 ldrbls r2, [r2, r3] +1003a99a: 4604 mov r4, r0 +1003a99c: f7fd f992 bl 10037cc4 +1003a9a0: f895 303c ldrb.w r3, [r5, #60] ; 0x3c +1003a9a4: b11b cbz r3, 1003a9ae <_InitOperationMode+0x32> +1003a9a6: 2b03 cmp r3, #3 +1003a9a8: d001 beq.n 1003a9ae <_InitOperationMode+0x32> +1003a9aa: 2200 movs r2, #0 +1003a9ac: e000 b.n 1003a9b0 <_InitOperationMode+0x34> +1003a9ae: 2250 movs r2, #80 ; 0x50 +1003a9b0: 4620 mov r0, r4 +1003a9b2: f240 415c movw r1, #1116 ; 0x45c +1003a9b6: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1003a9ba: f7fd b983 b.w 10037cc4 +1003a9be: bf00 nop +1003a9c0: 10043fc1 .word 0x10043fc1 + +1003a9c4 <_InitInterrupt>: +1003a9c4: b510 push {r4, lr} +1003a9c6: 2180 movs r1, #128 ; 0x80 +1003a9c8: 4604 mov r4, r0 +1003a9ca: 2200 movs r2, #0 +1003a9cc: f7fd f988 bl 10037ce0 +1003a9d0: 4620 mov r0, r4 +1003a9d2: f44f 7198 mov.w r1, #304 ; 0x130 +1003a9d6: 2200 movs r2, #0 +1003a9d8: f7fd f982 bl 10037ce0 +1003a9dc: 4620 mov r0, r4 +1003a9de: f44f 719c mov.w r1, #312 ; 0x138 +1003a9e2: 2200 movs r2, #0 +1003a9e4: f7fd f97c bl 10037ce0 +1003a9e8: 4620 mov r0, r4 +1003a9ea: f44f 717b mov.w r1, #1004 ; 0x3ec +1003a9ee: 2200 movs r2, #0 +1003a9f0: f7fd f976 bl 10037ce0 +1003a9f4: 4620 mov r0, r4 +1003a9f6: f7f0 fbb7 bl 1002b168 +1003a9fa: 4620 mov r0, r4 +1003a9fc: e8bd 4010 ldmia.w sp!, {r4, lr} +1003aa00: f7f6 bba2 b.w 10031148 + +1003aa04 : +1003aa04: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} +1003aa08: f247 5330 movw r3, #30000 ; 0x7530 +1003aa0c: b085 sub sp, #20 +1003aa0e: 4604 mov r4, r0 +1003aa10: 9303 str r3, [sp, #12] +1003aa12: f241 63c8 movw r3, #5832 ; 0x16c8 +1003aa16: 58c6 ldr r6, [r0, r3] +1003aa18: f7dc fef0 bl 100177fc +1003aa1c: 4620 mov r0, r4 +1003aa1e: f7ff fe6f bl 1003a700 <_InitPowerOn> +1003aa22: b908 cbnz r0, 1003aa28 +1003aa24: 2000 movs r0, #0 +1003aa26: e150 b.n 1003acca +1003aa28: 2301 movs r3, #1 +1003aa2a: f641 0259 movw r2, #6233 ; 0x1859 +1003aa2e: 54a3 strb r3, [r4, r2] +1003aa30: f504 57a0 add.w r7, r4, #5120 ; 0x1400 +1003aa34: f886 31a4 strb.w r3, [r6, #420] ; 0x1a4 +1003aa38: 7ebb ldrb r3, [r7, #26] +1003aa3a: 2b01 cmp r3, #1 +1003aa3c: bf04 itt eq +1003aa3e: 2302 moveq r3, #2 +1003aa40: 673b streq r3, [r7, #112] ; 0x70 +1003aa42: f241 63c8 movw r3, #5832 ; 0x16c8 +1003aa46: 58e3 ldr r3, [r4, r3] +1003aa48: 681a ldr r2, [r3, #0] +1003aa4a: 3a01 subs r2, #1 +1003aa4c: 2a01 cmp r2, #1 +1003aa4e: d804 bhi.n 1003aa5a +1003aa50: 691a ldr r2, [r3, #16] +1003aa52: 1e91 subs r1, r2, #2 +1003aa54: 424a negs r2, r1 +1003aa56: 414a adcs r2, r1 +1003aa58: e000 b.n 1003aa5c +1003aa5a: 2200 movs r2, #0 +1003aa5c: 2104 movs r1, #4 +1003aa5e: f883 103b strb.w r1, [r3, #59] ; 0x3b +1003aa62: b912 cbnz r2, 1003aa6a +1003aa64: 2203 movs r2, #3 +1003aa66: f883 203c strb.w r2, [r3, #60] ; 0x3c +1003aa6a: 2306 movs r3, #6 +1003aa6c: f886 3034 strb.w r3, [r6, #52] ; 0x34 +1003aa70: 4620 mov r0, r4 +1003aa72: f7f4 f95f bl 1002ed34 +1003aa76: 2801 cmp r0, #1 +1003aa78: f040 8127 bne.w 1003acca +1003aa7c: 4620 mov r0, r4 +1003aa7e: f7f4 f966 bl 1002ed4e +1003aa82: 2801 cmp r0, #1 +1003aa84: f040 8121 bne.w 1003acca +1003aa88: 4620 mov r0, r4 +1003aa8a: f7f4 f9f3 bl 1002ee74 +1003aa8e: 2801 cmp r0, #1 +1003aa90: 4605 mov r5, r0 +1003aa92: f040 811a bne.w 1003acca +1003aa96: 4620 mov r0, r4 +1003aa98: f44f 6100 mov.w r1, #2048 ; 0x800 +1003aa9c: f04f 7280 mov.w r2, #16777216 ; 0x1000000 +1003aaa0: 462b mov r3, r5 +1003aaa2: f7f4 f8a0 bl 1002ebe6 +1003aaa6: 4620 mov r0, r4 +1003aaa8: f44f 6100 mov.w r1, #2048 ; 0x800 +1003aaac: f04f 7200 mov.w r2, #33554432 ; 0x2000000 +1003aab0: 462b mov r3, r5 +1003aab2: f7f4 f898 bl 1002ebe6 +1003aab6: 2218 movs r2, #24 +1003aab8: 4b85 ldr r3, [pc, #532] ; (1003acd0 ) +1003aaba: 4620 mov r0, r4 +1003aabc: 2100 movs r1, #0 +1003aabe: f7f4 f901 bl 1002ecc4 +1003aac2: f504 539c add.w r3, r4, #4992 ; 0x1380 +1003aac6: f8c6 01a0 str.w r0, [r6, #416] ; 0x1a0 +1003aaca: f893 2052 ldrb.w r2, [r3, #82] ; 0x52 +1003aace: f241 63c8 movw r3, #5832 ; 0x16c8 +1003aad2: 58e3 ldr r3, [r4, r3] +1003aad4: f893 3e03 ldrb.w r3, [r3, #3587] ; 0xe03 +1003aad8: f013 0901 ands.w r9, r3, #1 +1003aadc: d005 beq.n 1003aaea +1003aade: 2a00 cmp r2, #0 +1003aae0: bf0c ite eq +1003aae2: f04f 090c moveq.w r9, #12 +1003aae6: f04f 0930 movne.w r9, #48 ; 0x30 +1003aaea: f003 0102 and.w r1, r3, #2 +1003aaee: f001 08ff and.w r8, r1, #255 ; 0xff +1003aaf2: b129 cbz r1, 1003ab00 +1003aaf4: 2a00 cmp r2, #0 +1003aaf6: bf0c ite eq +1003aaf8: f04f 0802 moveq.w r8, #2 +1003aafc: f04f 0820 movne.w r8, #32 +1003ab00: f003 0304 and.w r3, r3, #4 +1003ab04: f003 05ff and.w r5, r3, #255 ; 0xff +1003ab08: b11b cbz r3, 1003ab12 +1003ab0a: 2a00 cmp r2, #0 +1003ab0c: bf0c ite eq +1003ab0e: 2502 moveq r5, #2 +1003ab10: 2520 movne r5, #32 +1003ab12: 462a mov r2, r5 +1003ab14: f44f 7105 mov.w r1, #532 ; 0x214 +1003ab18: 4620 mov r0, r4 +1003ab1a: f7fd f8d3 bl 10037cc4 +1003ab1e: f049 4300 orr.w r3, r9, #2147483648 ; 0x80000000 +1003ab22: f1c9 09f3 rsb r9, r9, #243 ; 0xf3 +1003ab26: ea43 2208 orr.w r2, r3, r8, lsl #8 +1003ab2a: ebc8 0809 rsb r8, r8, r9 +1003ab2e: ebc5 0508 rsb r5, r5, r8 +1003ab32: f44f 7100 mov.w r1, #512 ; 0x200 +1003ab36: ea42 4205 orr.w r2, r2, r5, lsl #16 +1003ab3a: 4620 mov r0, r4 +1003ab3c: f7fd f8d0 bl 10037ce0 +1003ab40: f240 4124 movw r1, #1060 ; 0x424 +1003ab44: 22f4 movs r2, #244 ; 0xf4 +1003ab46: 4620 mov r0, r4 +1003ab48: f7fd f8bc bl 10037cc4 +1003ab4c: f240 4125 movw r1, #1061 ; 0x425 +1003ab50: 22f4 movs r2, #244 ; 0xf4 +1003ab52: 4620 mov r0, r4 +1003ab54: f7fd f8b6 bl 10037cc4 +1003ab58: f240 415d movw r1, #1117 ; 0x45d +1003ab5c: 22f4 movs r2, #244 ; 0xf4 +1003ab5e: 4620 mov r0, r4 +1003ab60: f7fd f8b0 bl 10037cc4 +1003ab64: f44f 718a mov.w r1, #276 ; 0x114 +1003ab68: 22f4 movs r2, #244 ; 0xf4 +1003ab6a: 4620 mov r0, r4 +1003ab6c: f7fd f8aa bl 10037cc4 +1003ab70: f240 2109 movw r1, #521 ; 0x209 +1003ab74: 22f4 movs r2, #244 ; 0xf4 +1003ab76: 4620 mov r0, r4 +1003ab78: f7fd f8a4 bl 10037cc4 +1003ab7c: f240 4157 movw r1, #1111 ; 0x457 +1003ab80: 22fc movs r2, #252 ; 0xfc +1003ab82: 4620 mov r0, r4 +1003ab84: f7fd f89e bl 10037cc4 +1003ab88: 22fc movs r2, #252 ; 0xfc +1003ab8a: f240 2129 movw r1, #553 ; 0x229 +1003ab8e: 4620 mov r0, r4 +1003ab90: f7fd f898 bl 10037cc4 +1003ab94: f240 212a movw r1, #554 ; 0x22a +1003ab98: 4620 mov r0, r4 +1003ab9a: f7fd f87e bl 10037c9a +1003ab9e: f040 0202 orr.w r2, r0, #2 +1003aba2: f240 212a movw r1, #554 ; 0x22a +1003aba6: b2d2 uxtb r2, r2 +1003aba8: 4620 mov r0, r4 +1003abaa: f7fd f88b bl 10037cc4 +1003abae: 4620 mov r0, r4 +1003abb0: f7f2 fc0d bl 1002d3ce +1003abb4: 2801 cmp r0, #1 +1003abb6: 4680 mov r8, r0 +1003abb8: f47f af34 bne.w 1003aa24 +1003abbc: f44f 7186 mov.w r1, #268 ; 0x10c +1003abc0: 4620 mov r0, r4 +1003abc2: f7fd f871 bl 10037ca8 +1003abc6: f000 0207 and.w r2, r0, #7 +1003abca: f442 4275 orr.w r2, r2, #62720 ; 0xf500 +1003abce: f44f 7186 mov.w r1, #268 ; 0x10c +1003abd2: f042 02b0 orr.w r2, r2, #176 ; 0xb0 +1003abd6: 4620 mov r0, r4 +1003abd8: f7fd f87b bl 10037cd2 +1003abdc: f44f 718b mov.w r1, #278 ; 0x116 +1003abe0: f643 727f movw r2, #16255 ; 0x3f7f +1003abe4: 4620 mov r0, r4 +1003abe6: f7fd f874 bl 10037cd2 +1003abea: 2211 movs r2, #17 +1003abec: f44f 7182 mov.w r1, #260 ; 0x104 +1003abf0: 4620 mov r0, r4 +1003abf2: f7fd f867 bl 10037cc4 +1003abf6: 2104 movs r1, #4 +1003abf8: 4620 mov r0, r4 +1003abfa: f7ff fdd9 bl 1003a7b0 <_InitDriverInfoSize> +1003abfe: 4620 mov r0, r4 +1003ac00: f7f6 fd90 bl 10031724 +1003ac04: 4620 mov r0, r4 +1003ac06: f7ff fdd8 bl 1003a7ba <_InitNetworkType> +1003ac0a: 4620 mov r0, r4 +1003ac0c: f7ff fde6 bl 1003a7dc <_InitWMACSetting> +1003ac10: 4620 mov r0, r4 +1003ac12: f7ff fe1b bl 1003a84c <_InitAdaptiveCtrl> +1003ac16: 4620 mov r0, r4 +1003ac18: f7ff fe3a bl 1003a890 <_InitEDCA> +1003ac1c: 4620 mov r0, r4 +1003ac1e: f7ff fe75 bl 1003a90c <_InitRateFallback> +1003ac22: 4620 mov r0, r4 +1003ac24: f7ff fe94 bl 1003a950 <_InitRetryFunction> +1003ac28: 4620 mov r0, r4 +1003ac2a: f7ff fea7 bl 1003a97c <_InitOperationMode> +1003ac2e: 4620 mov r0, r4 +1003ac30: f7f2 fb1d bl 1002d26e +1003ac34: 4620 mov r0, r4 +1003ac36: f7ff fec5 bl 1003a9c4 <_InitInterrupt> +1003ac3a: 4620 mov r0, r4 +1003ac3c: f7f2 fb4f bl 1002d2de <_InitBurstPktLen_8195AB> +1003ac40: f44f 6198 mov.w r1, #1216 ; 0x4c0 +1003ac44: f44f 5240 mov.w r2, #12288 ; 0x3000 +1003ac48: 4620 mov r0, r4 +1003ac4a: f7fd f842 bl 10037cd2 +1003ac4e: f240 41c2 movw r1, #1218 ; 0x4c2 +1003ac52: f44f 5240 mov.w r2, #12288 ; 0x3000 +1003ac56: 4620 mov r0, r4 +1003ac58: f7fd f83b bl 10037cd2 +1003ac5c: 4620 mov r0, r4 +1003ac5e: f7ed fdd9 bl 10028814 +1003ac62: 2500 movs r5, #0 +1003ac64: f241 33b4 movw r3, #5044 ; 0x13b4 +1003ac68: 5ce1 ldrb r1, [r4, r3] +1003ac6a: 4620 mov r0, r4 +1003ac6c: 462b mov r3, r5 +1003ac6e: 462a mov r2, r5 +1003ac70: 9500 str r5, [sp, #0] +1003ac72: f7f7 fd54 bl 1003271e +1003ac76: f240 41cc movw r1, #1228 ; 0x4cc +1003ac7a: 4a16 ldr r2, [pc, #88] ; (1003acd4 ) +1003ac7c: 4620 mov r0, r4 +1003ac7e: f7fd f82f bl 10037ce0 +1003ac82: 22ff movs r2, #255 ; 0xff +1003ac84: f240 4123 movw r1, #1059 ; 0x423 +1003ac88: 4620 mov r0, r4 +1003ac8a: f7fd f81b bl 10037cc4 +1003ac8e: 4620 mov r0, r4 +1003ac90: f000 fc76 bl 1003b580 +1003ac94: f44f 7180 mov.w r1, #256 ; 0x100 +1003ac98: 4620 mov r0, r4 +1003ac9a: f7fc fffe bl 10037c9a +1003ac9e: f060 023f orn r2, r0, #63 ; 0x3f +1003aca2: f44f 7180 mov.w r1, #256 ; 0x100 +1003aca6: b2d2 uxtb r2, r2 +1003aca8: 4620 mov r0, r4 +1003acaa: f7fd f80b bl 10037cc4 +1003acae: 4620 mov r0, r4 +1003acb0: 2141 movs r1, #65 ; 0x41 +1003acb2: aa03 add r2, sp, #12 +1003acb4: f7f7 fc1d bl 100324f2 +1003acb8: 4620 mov r0, r4 +1003acba: 673d str r5, [r7, #112] ; 0x70 +1003acbc: 4629 mov r1, r5 +1003acbe: 462a mov r2, r5 +1003acc0: f002 fb8e bl 1003d3e0 +1003acc4: f886 8ca8 strb.w r8, [r6, #3240] ; 0xca8 +1003acc8: 4640 mov r0, r8 +1003acca: b005 add sp, #20 +1003accc: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} +1003acd0: 000fffff .word 0x000fffff +1003acd4: 0201ffff .word 0x0201ffff + +1003acd8 : +1003acd8: b570 push {r4, r5, r6, lr} +1003acda: f641 0369 movw r3, #6249 ; 0x1869 +1003acde: 5cc3 ldrb r3, [r0, r3] +1003ace0: f500 54b6 add.w r4, r0, #5824 ; 0x16c0 +1003ace4: 4605 mov r5, r0 +1003ace6: 3410 adds r4, #16 +1003ace8: b953 cbnz r3, 1003ad00 +1003acea: f640 60b8 movw r0, #3768 ; 0xeb8 +1003acee: f7dc fd4f bl 10017790 +1003acf2: f241 63c8 movw r3, #5832 ; 0x16c8 +1003acf6: 1c06 adds r6, r0, #0 +1003acf8: 50e8 str r0, [r5, r3] +1003acfa: bf18 it ne +1003acfc: 2601 movne r6, #1 +1003acfe: e000 b.n 1003ad02 +1003ad00: 2601 movs r6, #1 +1003ad02: f640 62b8 movw r2, #3768 ; 0xeb8 +1003ad06: f241 63cc movw r3, #5836 ; 0x16cc +1003ad0a: 50ea str r2, [r5, r3] +1003ad0c: 4620 mov r0, r4 +1003ad0e: f7f2 faeb bl 1002d2e8 +1003ad12: 4b15 ldr r3, [pc, #84] ; (1003ad68 ) +1003ad14: 4630 mov r0, r6 +1003ad16: 6063 str r3, [r4, #4] +1003ad18: 4b14 ldr r3, [pc, #80] ; (1003ad6c ) +1003ad1a: 60a3 str r3, [r4, #8] +1003ad1c: 4b14 ldr r3, [pc, #80] ; (1003ad70 ) +1003ad1e: 6123 str r3, [r4, #16] +1003ad20: 4b14 ldr r3, [pc, #80] ; (1003ad74 ) +1003ad22: 6163 str r3, [r4, #20] +1003ad24: 4b14 ldr r3, [pc, #80] ; (1003ad78 ) +1003ad26: 61a3 str r3, [r4, #24] +1003ad28: 4b14 ldr r3, [pc, #80] ; (1003ad7c ) +1003ad2a: 61e3 str r3, [r4, #28] +1003ad2c: 4b14 ldr r3, [pc, #80] ; (1003ad80 ) +1003ad2e: 6223 str r3, [r4, #32] +1003ad30: 4b14 ldr r3, [pc, #80] ; (1003ad84 ) +1003ad32: 6463 str r3, [r4, #68] ; 0x44 +1003ad34: 4b14 ldr r3, [pc, #80] ; (1003ad88 ) +1003ad36: 64a3 str r3, [r4, #72] ; 0x48 +1003ad38: 4b14 ldr r3, [pc, #80] ; (1003ad8c ) +1003ad3a: 64e3 str r3, [r4, #76] ; 0x4c +1003ad3c: 4b14 ldr r3, [pc, #80] ; (1003ad90 ) +1003ad3e: 6523 str r3, [r4, #80] ; 0x50 +1003ad40: 4b14 ldr r3, [pc, #80] ; (1003ad94 ) +1003ad42: 6563 str r3, [r4, #84] ; 0x54 +1003ad44: 4b14 ldr r3, [pc, #80] ; (1003ad98 ) +1003ad46: 65a3 str r3, [r4, #88] ; 0x58 +1003ad48: 4b14 ldr r3, [pc, #80] ; (1003ad9c ) +1003ad4a: 6723 str r3, [r4, #112] ; 0x70 +1003ad4c: 4b14 ldr r3, [pc, #80] ; (1003ada0 ) +1003ad4e: 6763 str r3, [r4, #116] ; 0x74 +1003ad50: 4b14 ldr r3, [pc, #80] ; (1003ada4 ) +1003ad52: 67a3 str r3, [r4, #120] ; 0x78 +1003ad54: 4b14 ldr r3, [pc, #80] ; (1003ada8 ) +1003ad56: 67e3 str r3, [r4, #124] ; 0x7c +1003ad58: 4b14 ldr r3, [pc, #80] ; (1003adac ) +1003ad5a: f8c4 309c str.w r3, [r4, #156] ; 0x9c +1003ad5e: 4b14 ldr r3, [pc, #80] ; (1003adb0 ) +1003ad60: f8c4 30a0 str.w r3, [r4, #160] ; 0xa0 +1003ad64: bd70 pop {r4, r5, r6, pc} +1003ad66: bf00 nop +1003ad68: 1003aa05 .word 0x1003aa05 +1003ad6c: 1003a6c5 .word 0x1003a6c5 +1003ad70: 1002ac29 .word 0x1002ac29 +1003ad74: 1002ad69 .word 0x1002ad69 +1003ad78: 1002ad85 .word 0x1002ad85 +1003ad7c: 1002ba29 .word 0x1002ba29 +1003ad80: 1002ba37 .word 0x1002ba37 +1003ad84: 1002d3cd .word 0x1002d3cd +1003ad88: 1003a691 .word 0x1003a691 +1003ad8c: 1003a781 .word 0x1003a781 +1003ad90: 1002b1b1 .word 0x1002b1b1 +1003ad94: 1002b1fd .word 0x1002b1fd +1003ad98: 1002b681 .word 0x1002b681 +1003ad9c: 1002dd2d .word 0x1002dd2d +1003ada0: 1002ea25 .word 0x1002ea25 +1003ada4: 1002eb99 .word 0x1002eb99 +1003ada8: 1002eab9 .word 0x1002eab9 +1003adac: 1002c1f5 .word 0x1002c1f5 +1003adb0: 1002c1b9 .word 0x1002c1b9 + +1003adb4 : +1003adb4: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +1003adb8: 461e mov r6, r3 +1003adba: f641 0364 movw r3, #6244 ; 0x1864 +1003adbe: 4607 mov r7, r0 +1003adc0: 58c0 ldr r0, [r0, r3] +1003adc2: 4688 mov r8, r1 +1003adc4: 4691 mov r9, r2 +1003adc6: f7dc fbb1 bl 1001752c +1003adca: b376 cbz r6, 1003ae2a +1003adcc: f1b9 0f0b cmp.w r9, #11 +1003add0: d82a bhi.n 1003ae28 +1003add2: f241 73b0 movw r3, #6064 ; 0x17b0 +1003add6: 58fb ldr r3, [r7, r3] +1003add8: 2b01 cmp r3, #1 +1003adda: d025 beq.n 1003ae28 +1003addc: 4b17 ldr r3, [pc, #92] ; (1003ae3c ) +1003adde: f04f 6400 mov.w r4, #134217728 ; 0x8000000 +1003ade2: 2500 movs r5, #0 +1003ade4: e9d3 2302 ldrd r2, r3, [r3, #8] +1003ade8: 4014 ands r4, r2 +1003adea: 401d ands r5, r3 +1003adec: ea54 0305 orrs.w r3, r4, r5 +1003adf0: d013 beq.n 1003ae1a +1003adf2: 4641 mov r1, r8 +1003adf4: 4812 ldr r0, [pc, #72] ; (1003ae40 ) +1003adf6: f7df fec3 bl 1001ab80 +1003adfa: 4812 ldr r0, [pc, #72] ; (1003ae44 ) +1003adfc: f7df fec0 bl 1001ab80 +1003ae00: 4634 mov r4, r6 +1003ae02: 44b1 add r9, r6 +1003ae04: 454c cmp r4, r9 +1003ae06: d005 beq.n 1003ae14 +1003ae08: f814 1b01 ldrb.w r1, [r4], #1 +1003ae0c: 480e ldr r0, [pc, #56] ; (1003ae48 ) +1003ae0e: f7df feb7 bl 1001ab80 +1003ae12: e7f7 b.n 1003ae04 +1003ae14: 480d ldr r0, [pc, #52] ; (1003ae4c ) +1003ae16: f7df feb3 bl 1001ab80 +1003ae1a: 4632 mov r2, r6 +1003ae1c: 4638 mov r0, r7 +1003ae1e: 4641 mov r1, r8 +1003ae20: f000 fdec bl 1003b9fc +1003ae24: 2601 movs r6, #1 +1003ae26: e000 b.n 1003ae2a +1003ae28: 2600 movs r6, #0 +1003ae2a: f641 0364 movw r3, #6244 ; 0x1864 +1003ae2e: 58f8 ldr r0, [r7, r3] +1003ae30: f7dc fb74 bl 1001751c +1003ae34: 4630 mov r0, r6 +1003ae36: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} +1003ae3a: bf00 nop +1003ae3c: 10000720 .word 0x10000720 +1003ae40: 10043fd6 .word 0x10043fd6 +1003ae44: 10043fe7 .word 0x10043fe7 +1003ae48: 1003f7c1 .word 0x1003f7c1 +1003ae4c: 1003febe .word 0x1003febe + +1003ae50 : +1003ae50: 4770 bx lr + +1003ae52 : +1003ae52: 460b mov r3, r1 +1003ae54: 2201 movs r2, #1 +1003ae56: 2100 movs r1, #0 +1003ae58: f7ff bfac b.w 1003adb4 + +1003ae5c : +1003ae5c: b507 push {r0, r1, r2, lr} +1003ae5e: 2300 movs r3, #0 +1003ae60: f001 0101 and.w r1, r1, #1 +1003ae64: f88d 3006 strb.w r3, [sp, #6] +1003ae68: f88d 1004 strb.w r1, [sp, #4] +1003ae6c: f88d 2005 strb.w r2, [sp, #5] +1003ae70: 2101 movs r1, #1 +1003ae72: 2203 movs r2, #3 +1003ae74: ab01 add r3, sp, #4 +1003ae76: f7ff ff9d bl 1003adb4 +1003ae7a: b003 add sp, #12 +1003ae7c: f85d fb04 ldr.w pc, [sp], #4 + +1003ae80 : +1003ae80: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} +1003ae84: 4682 mov sl, r0 +1003ae86: 4689 mov r9, r1 +1003ae88: 4690 mov r8, r2 +1003ae8a: a802 add r0, sp, #8 +1003ae8c: 2207 movs r2, #7 +1003ae8e: 2100 movs r1, #0 +1003ae90: 461f mov r7, r3 +1003ae92: 9e0d ldr r6, [sp, #52] ; 0x34 +1003ae94: f002 fec6 bl 1003dc24 +1003ae98: 4b24 ldr r3, [pc, #144] ; (1003af2c ) +1003ae9a: f44f 7200 mov.w r2, #512 ; 0x200 +1003ae9e: e9d3 4502 ldrd r4, r5, [r3, #8] +1003aea2: 2300 movs r3, #0 +1003aea4: 4014 ands r4, r2 +1003aea6: 401d ands r5, r3 +1003aea8: ea54 0305 orrs.w r3, r4, r5 +1003aeac: d00b beq.n 1003aec6 +1003aeae: 4b20 ldr r3, [pc, #128] ; (1003af30 ) +1003aeb0: 681b ldr r3, [r3, #0] +1003aeb2: b143 cbz r3, 1003aec6 +1003aeb4: 4b1f ldr r3, [pc, #124] ; (1003af34 ) +1003aeb6: 9700 str r7, [sp, #0] +1003aeb8: 9601 str r6, [sp, #4] +1003aeba: 6ad8 ldr r0, [r3, #44] ; 0x2c +1003aebc: 491e ldr r1, [pc, #120] ; (1003af38 ) +1003aebe: 464a mov r2, r9 +1003aec0: 4643 mov r3, r8 +1003aec2: f7df fe5d bl 1001ab80 +1003aec6: f89d 3009 ldrb.w r3, [sp, #9] +1003aeca: f008 081f and.w r8, r8, #31 +1003aece: f003 0360 and.w r3, r3, #96 ; 0x60 +1003aed2: ea43 0808 orr.w r8, r3, r8 +1003aed6: f89d 3030 ldrb.w r3, [sp, #48] ; 0x30 +1003aeda: f007 0703 and.w r7, r7, #3 +1003aede: 2b00 cmp r3, #0 +1003aee0: bf0c ite eq +1003aee2: 2300 moveq r3, #0 +1003aee4: 2380 movne r3, #128 ; 0x80 +1003aee6: ea43 0808 orr.w r8, r3, r8 +1003aeea: f89d 300a ldrb.w r3, [sp, #10] +1003aeee: f88d 600b strb.w r6, [sp, #11] +1003aef2: f023 0303 bic.w r3, r3, #3 +1003aef6: 431f orrs r7, r3 +1003aef8: f3c6 2307 ubfx r3, r6, #8, #8 +1003aefc: f88d 300c strb.w r3, [sp, #12] +1003af00: f3c6 4307 ubfx r3, r6, #16, #8 +1003af04: f88d 300d strb.w r3, [sp, #13] +1003af08: 0e36 lsrs r6, r6, #24 +1003af0a: 4650 mov r0, sl +1003af0c: 2140 movs r1, #64 ; 0x40 +1003af0e: 2207 movs r2, #7 +1003af10: ab02 add r3, sp, #8 +1003af12: f88d 9008 strb.w r9, [sp, #8] +1003af16: f88d 8009 strb.w r8, [sp, #9] +1003af1a: f88d 700a strb.w r7, [sp, #10] +1003af1e: f88d 600e strb.w r6, [sp, #14] +1003af22: f7ff ff47 bl 1003adb4 +1003af26: b004 add sp, #16 +1003af28: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1003af2c: 10000720 .word 0x10000720 +1003af30: 10044f38 .word 0x10044f38 +1003af34: 10043ac4 .word 0x10043ac4 +1003af38: 10043fec .word 0x10043fec + +1003af3c : +1003af3c: b530 push {r4, r5, lr} +1003af3e: b085 sub sp, #20 +1003af40: 4604 mov r4, r0 +1003af42: 460d mov r5, r1 +1003af44: 220b movs r2, #11 +1003af46: a801 add r0, sp, #4 +1003af48: 2100 movs r1, #0 +1003af4a: f002 fe6b bl 1003dc24 +1003af4e: f504 53a0 add.w r3, r4, #5120 ; 0x1400 +1003af52: f893 2094 ldrb.w r2, [r3, #148] ; 0x94 +1003af56: 2d00 cmp r5, #0 +1003af58: bf0c ite eq +1003af5a: 200c moveq r0, #12 +1003af5c: 2000 movne r0, #0 +1003af5e: b11a cbz r2, 1003af68 +1003af60: 3201 adds r2, #1 +1003af62: b2d1 uxtb r1, r2 +1003af64: 2202 movs r2, #2 +1003af66: e000 b.n 1003af6a +1003af68: 2101 movs r1, #1 +1003af6a: f88d 5004 strb.w r5, [sp, #4] +1003af6e: 7a5d ldrb r5, [r3, #9] +1003af70: f88d 1006 strb.w r1, [sp, #6] +1003af74: ea42 1205 orr.w r2, r2, r5, lsl #4 +1003af78: f88d 2005 strb.w r2, [sp, #5] +1003af7c: f241 32c6 movw r2, #5062 ; 0x13c6 +1003af80: 5ca2 ldrb r2, [r4, r2] +1003af82: f88d 0008 strb.w r0, [sp, #8] +1003af86: f88d 2007 strb.w r2, [sp, #7] +1003af8a: 2240 movs r2, #64 ; 0x40 +1003af8c: f88d 2009 strb.w r2, [sp, #9] +1003af90: f893 2090 ldrb.w r2, [r3, #144] ; 0x90 +1003af94: 4620 mov r0, r4 +1003af96: f88d 200b strb.w r2, [sp, #11] +1003af9a: f893 2091 ldrb.w r2, [r3, #145] ; 0x91 +1003af9e: 2120 movs r1, #32 +1003afa0: f88d 200c strb.w r2, [sp, #12] +1003afa4: f893 2092 ldrb.w r2, [r3, #146] ; 0x92 +1003afa8: f893 3093 ldrb.w r3, [r3, #147] ; 0x93 +1003afac: f88d 200d strb.w r2, [sp, #13] +1003afb0: f88d 300e strb.w r3, [sp, #14] +1003afb4: 220b movs r2, #11 +1003afb6: ab01 add r3, sp, #4 +1003afb8: f7ff fefc bl 1003adb4 +1003afbc: b005 add sp, #20 +1003afbe: bd30 pop {r4, r5, pc} + +1003afc0 : +1003afc0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1003afc4: 2901 cmp r1, #1 +1003afc6: b08f sub sp, #60 ; 0x3c +1003afc8: 4605 mov r5, r0 +1003afca: 468a mov sl, r1 +1003afcc: f040 8177 bne.w 1003b2be +1003afd0: f8b0 2728 ldrh.w r2, [r0, #1832] ; 0x728 +1003afd4: f44f 61d5 mov.w r1, #1704 ; 0x6a8 +1003afd8: ea6f 4282 mvn.w r2, r2, lsl #18 +1003afdc: ea6f 4292 mvn.w r2, r2, lsr #18 +1003afe0: b292 uxth r2, r2 +1003afe2: f7fc fe76 bl 10037cd2 +1003afe6: f44f 6080 mov.w r0, #1024 ; 0x400 +1003afea: f7dc fbf1 bl 100177d0 +1003afee: 4604 mov r4, r0 +1003aff0: 2800 cmp r0, #0 +1003aff2: f000 8164 beq.w 1003b2be +1003aff6: a80a add r0, sp, #40 ; 0x28 +1003aff8: 2100 movs r1, #0 +1003affa: 2210 movs r2, #16 +1003affc: f7dc fa28 bl 10017450 +1003b000: 4bb0 ldr r3, [pc, #704] ; (1003b2c4 ) +1003b002: f04f 0800 mov.w r8, #0 +1003b006: 6818 ldr r0, [r3, #0] +1003b008: f505 57a4 add.w r7, r5, #5248 ; 0x1480 +1003b00c: 889b ldrh r3, [r3, #4] +1003b00e: 9008 str r0, [sp, #32] +1003b010: a908 add r1, sp, #32 +1003b012: f104 002c add.w r0, r4, #44 ; 0x2c +1003b016: 2206 movs r2, #6 +1003b018: f8a4 8028 strh.w r8, [r4, #40] ; 0x28 +1003b01c: 3719 adds r7, #25 +1003b01e: f8ad 3024 strh.w r3, [sp, #36] ; 0x24 +1003b022: 940c str r4, [sp, #48] ; 0x30 +1003b024: f105 0998 add.w r9, r5, #152 ; 0x98 +1003b028: f7dc fa02 bl 10017430 +1003b02c: 4639 mov r1, r7 +1003b02e: 2206 movs r2, #6 +1003b030: f104 0032 add.w r0, r4, #50 ; 0x32 +1003b034: f7dc f9fc bl 10017430 +1003b038: 4648 mov r0, r9 +1003b03a: f7ed fba1 bl 10028780 +1003b03e: 2206 movs r2, #6 +1003b040: 4601 mov r1, r0 +1003b042: f104 0038 add.w r0, r4, #56 ; 0x38 +1003b046: f7dc f9f3 bl 10017430 +1003b04a: 8fe3 ldrh r3, [r4, #62] ; 0x3e +1003b04c: f505 768a add.w r6, r5, #276 ; 0x114 +1003b050: f003 030f and.w r3, r3, #15 +1003b054: 87e3 strh r3, [r4, #62] ; 0x3e +1003b056: 8d23 ldrh r3, [r4, #40] ; 0x28 +1003b058: 4630 mov r0, r6 +1003b05a: f023 03fc bic.w r3, r3, #252 ; 0xfc +1003b05e: f043 0380 orr.w r3, r3, #128 ; 0x80 +1003b062: 8523 strh r3, [r4, #40] ; 0x28 +1003b064: 2320 movs r3, #32 +1003b066: 9306 str r3, [sp, #24] +1003b068: f7e2 fac1 bl 1001d5ee +1003b06c: 2202 movs r2, #2 +1003b06e: 4601 mov r1, r0 +1003b070: f104 0048 add.w r0, r4, #72 ; 0x48 +1003b074: f7dc f9dc bl 10017430 +1003b078: 9b06 ldr r3, [sp, #24] +1003b07a: 4630 mov r0, r6 +1003b07c: 3302 adds r3, #2 +1003b07e: 9306 str r3, [sp, #24] +1003b080: f7e2 faa6 bl 1001d5d0 +1003b084: 2202 movs r2, #2 +1003b086: 4601 mov r1, r0 +1003b088: f104 004a add.w r0, r4, #74 ; 0x4a +1003b08c: f7dc f9d0 bl 10017430 +1003b090: f8d5 2680 ldr.w r2, [r5, #1664] ; 0x680 +1003b094: 9b06 ldr r3, [sp, #24] +1003b096: f002 0203 and.w r2, r2, #3 +1003b09a: 3302 adds r3, #2 +1003b09c: 2a03 cmp r2, #3 +1003b09e: f104 004c add.w r0, r4, #76 ; 0x4c +1003b0a2: 9306 str r3, [sp, #24] +1003b0a4: d109 bne.n 1003b0ba +1003b0a6: f8d5 2110 ldr.w r2, [r5, #272] ; 0x110 +1003b0aa: f505 7190 add.w r1, r5, #288 ; 0x120 +1003b0ae: 3a0c subs r2, #12 +1003b0b0: 441a add r2, r3 +1003b0b2: 9206 str r2, [sp, #24] +1003b0b4: f7dc f9bc bl 10017430 +1003b0b8: e040 b.n 1003b13c +1003b0ba: ae06 add r6, sp, #24 +1003b0bc: 4641 mov r1, r8 +1003b0be: f8d5 20a4 ldr.w r2, [r5, #164] ; 0xa4 +1003b0c2: f105 03a8 add.w r3, r5, #168 ; 0xa8 +1003b0c6: 9600 str r6, [sp, #0] +1003b0c8: f003 fc22 bl 1003e910 <__rtw_set_ie_veneer> +1003b0cc: f105 03fc add.w r3, r5, #252 ; 0xfc +1003b0d0: 4602 mov r2, r0 +1003b0d2: 4618 mov r0, r3 +1003b0d4: 9204 str r2, [sp, #16] +1003b0d6: 9303 str r3, [sp, #12] +1003b0d8: f003 fc12 bl 1003e900 <__rtw_get_rateset_len_veneer> +1003b0dc: 9a04 ldr r2, [sp, #16] +1003b0de: 4683 mov fp, r0 +1003b0e0: 4651 mov r1, sl +1003b0e2: 4610 mov r0, r2 +1003b0e4: 9b03 ldr r3, [sp, #12] +1003b0e6: f1bb 0f08 cmp.w fp, #8 +1003b0ea: bf34 ite cc +1003b0ec: 465a movcc r2, fp +1003b0ee: 2208 movcs r2, #8 +1003b0f0: 9600 str r6, [sp, #0] +1003b0f2: f003 fc0d bl 1003e910 <__rtw_set_ie_veneer> +1003b0f6: 4652 mov r2, sl +1003b0f8: f105 03e4 add.w r3, r5, #228 ; 0xe4 +1003b0fc: 9600 str r6, [sp, #0] +1003b0fe: 2103 movs r1, #3 +1003b100: f003 fc06 bl 1003e910 <__rtw_set_ie_veneer> +1003b104: f8d5 2680 ldr.w r2, [r5, #1664] ; 0x680 +1003b108: 4603 mov r3, r0 +1003b10a: f002 0203 and.w r2, r2, #3 +1003b10e: 2a01 cmp r2, #1 +1003b110: d108 bne.n 1003b124 +1003b112: ab0e add r3, sp, #56 ; 0x38 +1003b114: f843 8d1c str.w r8, [r3, #-28]! +1003b118: 2106 movs r1, #6 +1003b11a: 9600 str r6, [sp, #0] +1003b11c: 2202 movs r2, #2 +1003b11e: f003 fbf7 bl 1003e910 <__rtw_set_ie_veneer> +1003b122: 4603 mov r3, r0 +1003b124: f1bb 0f08 cmp.w fp, #8 +1003b128: d908 bls.n 1003b13c +1003b12a: 4618 mov r0, r3 +1003b12c: 9600 str r6, [sp, #0] +1003b12e: 2132 movs r1, #50 ; 0x32 +1003b130: f1ab 0208 sub.w r2, fp, #8 +1003b134: f505 7382 add.w r3, r5, #260 ; 0x104 +1003b138: f003 fbea bl 1003e910 <__rtw_set_ie_veneer> +1003b13c: 9b06 ldr r3, [sp, #24] +1003b13e: 4648 mov r0, r9 +1003b140: f103 0228 add.w r2, r3, #40 ; 0x28 +1003b144: f5b2 7f00 cmp.w r2, #512 ; 0x200 +1003b148: bf88 it hi +1003b14a: 2300 movhi r3, #0 +1003b14c: 3328 adds r3, #40 ; 0x28 +1003b14e: f013 027f ands.w r2, r3, #127 ; 0x7f +1003b152: bf18 it ne +1003b154: 2201 movne r2, #1 +1003b156: eb02 1ad3 add.w sl, r2, r3, lsr #7 +1003b15a: fa5f fa8a uxtb.w sl, sl +1003b15e: f1ba 0f01 cmp.w sl, #1 +1003b162: bf08 it eq +1003b164: f04f 0a02 moveq.w sl, #2 +1003b168: ea4f 1aca mov.w sl, sl, lsl #7 +1003b16c: 2302 movs r3, #2 +1003b16e: f88d 3029 strb.w r3, [sp, #41] ; 0x29 +1003b172: f241 02a4 movw r2, #4260 ; 0x10a4 +1003b176: f10a 0328 add.w r3, sl, #40 ; 0x28 +1003b17a: 52e2 strh r2, [r4, r3] +1003b17c: 18e6 adds r6, r4, r3 +1003b17e: f8b5 3728 ldrh.w r3, [r5, #1832] ; 0x728 +1003b182: f04f 0b00 mov.w fp, #0 +1003b186: ea6f 4383 mvn.w r3, r3, lsl #18 +1003b18a: ea6f 4393 mvn.w r3, r3, lsr #18 +1003b18e: 8073 strh r3, [r6, #2] +1003b190: f7ed faf6 bl 10028780 +1003b194: 2206 movs r2, #6 +1003b196: 4601 mov r1, r0 +1003b198: 1d30 adds r0, r6, #4 +1003b19a: f7dc f949 bl 10017430 +1003b19e: f106 000a add.w r0, r6, #10 +1003b1a2: 4639 mov r1, r7 +1003b1a4: 2206 movs r2, #6 +1003b1a6: f7dc f943 bl 10017430 +1003b1aa: eb04 010a add.w r1, r4, sl +1003b1ae: 2210 movs r2, #16 +1003b1b0: f8cd b000 str.w fp, [sp] +1003b1b4: f8cd b004 str.w fp, [sp, #4] +1003b1b8: 4628 mov r0, r5 +1003b1ba: 2301 movs r3, #1 +1003b1bc: f7f2 fd57 bl 1002dc6e +1003b1c0: 2303 movs r3, #3 +1003b1c2: f88d 302a strb.w r3, [sp, #42] ; 0x2a +1003b1c6: f10a 0380 add.w r3, sl, #128 ; 0x80 +1003b1ca: b29b uxth r3, r3 +1003b1cc: 4648 mov r0, r9 +1003b1ce: f103 0828 add.w r8, r3, #40 ; 0x28 +1003b1d2: 9305 str r3, [sp, #20] +1003b1d4: f7ed fad4 bl 10028780 +1003b1d8: f8d5 10f8 ldr.w r1, [r5, #248] ; 0xf8 +1003b1dc: eb04 0608 add.w r6, r4, r8 +1003b1e0: 2901 cmp r1, #1 +1003b1e2: f824 b008 strh.w fp, [r4, r8] +1003b1e6: 4603 mov r3, r0 +1003b1e8: f106 0204 add.w r2, r6, #4 +1003b1ec: f106 0b0a add.w fp, r6, #10 +1003b1f0: d016 beq.n 1003b220 +1003b1f2: 2904 cmp r1, #4 +1003b1f4: d12d bne.n 1003b252 +1003b1f6: f44f 7100 mov.w r1, #512 ; 0x200 +1003b1fa: 4610 mov r0, r2 +1003b1fc: f824 1008 strh.w r1, [r4, r8] +1003b200: 2206 movs r2, #6 +1003b202: 4619 mov r1, r3 +1003b204: f7dc f914 bl 10017430 +1003b208: 4648 mov r0, r9 +1003b20a: f7ed fab9 bl 10028780 +1003b20e: 2206 movs r2, #6 +1003b210: 4601 mov r1, r0 +1003b212: 4658 mov r0, fp +1003b214: f7dc f90c bl 10017430 +1003b218: f106 0010 add.w r0, r6, #16 +1003b21c: 4639 mov r1, r7 +1003b21e: e028 b.n 1003b272 +1003b220: f44f 7180 mov.w r1, #256 ; 0x100 +1003b224: f824 1008 strh.w r1, [r4, r8] +1003b228: 4648 mov r0, r9 +1003b22a: 9303 str r3, [sp, #12] +1003b22c: 9204 str r2, [sp, #16] +1003b22e: f7ed faa7 bl 10028780 +1003b232: 9a04 ldr r2, [sp, #16] +1003b234: 4601 mov r1, r0 +1003b236: 4610 mov r0, r2 +1003b238: 2206 movs r2, #6 +1003b23a: f7dc f8f9 bl 10017430 +1003b23e: 4658 mov r0, fp +1003b240: 4639 mov r1, r7 +1003b242: 2206 movs r2, #6 +1003b244: f7dc f8f4 bl 10017430 +1003b248: 9b03 ldr r3, [sp, #12] +1003b24a: f106 0010 add.w r0, r6, #16 +1003b24e: 4619 mov r1, r3 +1003b250: e00f b.n 1003b272 +1003b252: 4619 mov r1, r3 +1003b254: 4610 mov r0, r2 +1003b256: 2206 movs r2, #6 +1003b258: f7dc f8ea bl 10017430 +1003b25c: 4639 mov r1, r7 +1003b25e: 4658 mov r0, fp +1003b260: 2206 movs r2, #6 +1003b262: f7dc f8e5 bl 10017430 +1003b266: 4648 mov r0, r9 +1003b268: f7ed fa8a bl 10028780 +1003b26c: 4601 mov r1, r0 +1003b26e: f106 0010 add.w r0, r6, #16 +1003b272: 2206 movs r2, #6 +1003b274: f7dc f8dc bl 10017430 +1003b278: 8af3 ldrh r3, [r6, #22] +1003b27a: 9905 ldr r1, [sp, #20] +1003b27c: f003 030f and.w r3, r3, #15 +1003b280: 82f3 strh r3, [r6, #22] +1003b282: f834 3008 ldrh.w r3, [r4, r8] +1003b286: 4628 mov r0, r5 +1003b288: f023 03fc bic.w r3, r3, #252 ; 0xfc +1003b28c: f043 0348 orr.w r3, r3, #72 ; 0x48 +1003b290: f824 3008 strh.w r3, [r4, r8] +1003b294: 2300 movs r3, #0 +1003b296: 9300 str r3, [sp, #0] +1003b298: 9301 str r3, [sp, #4] +1003b29a: 4421 add r1, r4 +1003b29c: 2218 movs r2, #24 +1003b29e: f50a 7a80 add.w sl, sl, #256 ; 0x100 +1003b2a2: f7f2 fce4 bl 1002dc6e +1003b2a6: fa1f f38a uxth.w r3, sl +1003b2aa: 4628 mov r0, r5 +1003b2ac: a90a add r1, sp, #40 ; 0x28 +1003b2ae: 930d str r3, [sp, #52] ; 0x34 +1003b2b0: f7ff fdcf bl 1003ae52 +1003b2b4: 4620 mov r0, r4 +1003b2b6: f44f 6180 mov.w r1, #1024 ; 0x400 +1003b2ba: f7dc f8b6 bl 1001742a +1003b2be: b00f add sp, #60 ; 0x3c +1003b2c0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1003b2c4: 10043fd0 .word 0x10043fd0 + +1003b2c8 : +1003b2c8: 2901 cmp r1, #1 +1003b2ca: d101 bne.n 1003b2d0 +1003b2cc: f7ff be78 b.w 1003afc0 +1003b2d0: 4770 bx lr + +1003b2d2 : +1003b2d2: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} +1003b2d6: 7812 ldrb r2, [r2, #0] +1003b2d8: 4604 mov r4, r0 +1003b2da: f002 051f and.w r5, r2, #31 +1003b2de: f3c2 1840 ubfx r8, r2, #5, #1 +1003b2e2: eb04 1245 add.w r2, r4, r5, lsl #5 +1003b2e6: f8d2 7790 ldr.w r7, [r2, #1936] ; 0x790 +1003b2ea: f241 60c8 movw r0, #5832 ; 0x16c8 +1003b2ee: 5820 ldr r0, [r4, r0] +1003b2f0: f021 4670 bic.w r6, r1, #4026531840 ; 0xf0000000 +1003b2f4: ea4f 7911 mov.w r9, r1, lsr #28 +1003b2f8: b1c7 cbz r7, 1003b32c +1003b2fa: f8d7 21f4 ldr.w r2, [r7, #500] ; 0x1f4 +1003b2fe: b112 cbz r2, 1003b306 +1003b300: f897 71fc ldrb.w r7, [r7, #508] ; 0x1fc +1003b304: e001 b.n 1003b30a +1003b306: f894 751f ldrb.w r7, [r4, #1311] ; 0x51f +1003b30a: b133 cbz r3, 1003b31a +1003b30c: 4632 mov r2, r6 +1003b30e: f500 7000 add.w r0, r0, #512 ; 0x200 +1003b312: 4629 mov r1, r5 +1003b314: f7ff f8da bl 1003a4cc +1003b318: 4606 mov r6, r0 +1003b31a: f8cd 8000 str.w r8, [sp] +1003b31e: 9601 str r6, [sp, #4] +1003b320: 4620 mov r0, r4 +1003b322: 4629 mov r1, r5 +1003b324: 464a mov r2, r9 +1003b326: 463b mov r3, r7 +1003b328: f7ff fdaa bl 1003ae80 +1003b32c: b003 add sp, #12 +1003b32e: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + +1003b332 : +1003b332: b538 push {r3, r4, r5, lr} +1003b334: 4605 mov r5, r0 +1003b336: b149 cbz r1, 1003b34c +1003b338: 2901 cmp r1, #1 +1003b33a: d00a beq.n 1003b352 +1003b33c: 2902 cmp r1, #2 +1003b33e: d00b beq.n 1003b358 +1003b340: 2903 cmp r1, #3 +1003b342: bf0c ite eq +1003b344: f44f 64d0 moveq.w r4, #1664 ; 0x680 +1003b348: 2400 movne r4, #0 +1003b34a: e007 b.n 1003b35c +1003b34c: f44f 64ca mov.w r4, #1616 ; 0x650 +1003b350: e004 b.n 1003b35c +1003b352: f44f 64cc mov.w r4, #1632 ; 0x660 +1003b356: e001 b.n 1003b35c +1003b358: f44f 64ce mov.w r4, #1648 ; 0x670 +1003b35c: 4628 mov r0, r5 +1003b35e: f44f 71a0 mov.w r1, #320 ; 0x140 +1003b362: f7fc fca8 bl 10037cb6 +1003b366: f420 627f bic.w r2, r0, #4080 ; 0xff0 +1003b36a: f022 020f bic.w r2, r2, #15 +1003b36e: 4628 mov r0, r5 +1003b370: f44f 71a0 mov.w r1, #320 ; 0x140 +1003b374: 4322 orrs r2, r4 +1003b376: f7fc fcb3 bl 10037ce0 +1003b37a: 2000 movs r0, #0 +1003b37c: bd38 pop {r3, r4, r5, pc} + +1003b37e : +1003b37e: b570 push {r4, r5, r6, lr} +1003b380: 460d mov r5, r1 +1003b382: 2101 movs r1, #1 +1003b384: 4604 mov r4, r0 +1003b386: 4616 mov r6, r2 +1003b388: f7ff ffd3 bl 1003b332 +1003b38c: f505 6101 add.w r1, r5, #2064 ; 0x810 +1003b390: 4620 mov r0, r4 +1003b392: eb06 1101 add.w r1, r6, r1, lsl #4 +1003b396: f7fc fc80 bl 10037c9a +1003b39a: bd70 pop {r4, r5, r6, pc} + +1003b39c : +1003b39c: b5f8 push {r3, r4, r5, r6, r7, lr} +1003b39e: 460d mov r5, r1 +1003b3a0: 2101 movs r1, #1 +1003b3a2: 4616 mov r6, r2 +1003b3a4: 461f mov r7, r3 +1003b3a6: 4604 mov r4, r0 +1003b3a8: f7ff ffc3 bl 1003b332 +1003b3ac: f505 6101 add.w r1, r5, #2064 ; 0x810 +1003b3b0: 4620 mov r0, r4 +1003b3b2: eb06 1101 add.w r1, r6, r1, lsl #4 +1003b3b6: 463a mov r2, r7 +1003b3b8: f7fc fc84 bl 10037cc4 +1003b3bc: 2000 movs r0, #0 +1003b3be: bdf8 pop {r3, r4, r5, r6, r7, pc} + +1003b3c0 : +1003b3c0: b570 push {r4, r5, r6, lr} +1003b3c2: 460d mov r5, r1 +1003b3c4: 2101 movs r1, #1 +1003b3c6: 4604 mov r4, r0 +1003b3c8: 4616 mov r6, r2 +1003b3ca: f7ff ffb2 bl 1003b332 +1003b3ce: f505 5189 add.w r1, r5, #4384 ; 0x1120 +1003b3d2: 4620 mov r0, r4 +1003b3d4: eb06 01c1 add.w r1, r6, r1, lsl #3 +1003b3d8: f7fc fc5f bl 10037c9a +1003b3dc: bd70 pop {r4, r5, r6, pc} + +1003b3de : +1003b3de: b5f8 push {r3, r4, r5, r6, r7, lr} +1003b3e0: 460d mov r5, r1 +1003b3e2: 2101 movs r1, #1 +1003b3e4: 4616 mov r6, r2 +1003b3e6: 461f mov r7, r3 +1003b3e8: 4604 mov r4, r0 +1003b3ea: f7ff ffa2 bl 1003b332 +1003b3ee: f505 5189 add.w r1, r5, #4384 ; 0x1120 +1003b3f2: 4620 mov r0, r4 +1003b3f4: eb06 01c1 add.w r1, r6, r1, lsl #3 +1003b3f8: 463a mov r2, r7 +1003b3fa: f7fc fc63 bl 10037cc4 +1003b3fe: 2000 movs r0, #0 +1003b400: bdf8 pop {r3, r4, r5, r6, r7, pc} + +1003b402 : +1003b402: b508 push {r3, lr} +1003b404: f7ff ffdc bl 1003b3c0 +1003b408: b2c0 uxtb r0, r0 +1003b40a: bd08 pop {r3, pc} + +1003b40c : +1003b40c: f7ff bfe7 b.w 1003b3de + +1003b410 : +1003b410: b508 push {r3, lr} +1003b412: f7ff ffb4 bl 1003b37e +1003b416: b2c0 uxtb r0, r0 +1003b418: bd08 pop {r3, pc} + +1003b41a : +1003b41a: f7ff bfbf b.w 1003b39c + +1003b41e : +1003b41e: b570 push {r4, r5, r6, lr} +1003b420: 4606 mov r6, r0 +1003b422: 4615 mov r5, r2 +1003b424: b13b cbz r3, 1003b436 +1003b426: 2300 movs r3, #0 +1003b428: 838b strh r3, [r1, #28] +1003b42a: 83cb strh r3, [r1, #30] +1003b42c: 840b strh r3, [r1, #32] +1003b42e: 844b strh r3, [r1, #34] ; 0x22 +1003b430: 848b strh r3, [r1, #36] ; 0x24 +1003b432: 628b str r3, [r1, #40] ; 0x28 +1003b434: 858b strh r3, [r1, #44] ; 0x2c +1003b436: 4629 mov r1, r5 +1003b438: 4630 mov r0, r6 +1003b43a: 2203 movs r2, #3 +1003b43c: f7ff ff9f bl 1003b37e +1003b440: f000 03bf and.w r3, r0, #191 ; 0xbf +1003b444: 4629 mov r1, r5 +1003b446: 4630 mov r0, r6 +1003b448: 2203 movs r2, #3 +1003b44a: f043 0380 orr.w r3, r3, #128 ; 0x80 +1003b44e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1003b452: f7ff bfa3 b.w 1003b39c + +1003b456 : +1003b456: b570 push {r4, r5, r6, lr} +1003b458: 2203 movs r2, #3 +1003b45a: 4605 mov r5, r0 +1003b45c: 460c mov r4, r1 +1003b45e: f7ff ff8e bl 1003b37e +1003b462: f040 0340 orr.w r3, r0, #64 ; 0x40 +1003b466: 4621 mov r1, r4 +1003b468: 4628 mov r0, r5 +1003b46a: 2203 movs r2, #3 +1003b46c: b2db uxtb r3, r3 +1003b46e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1003b472: f7ff bf93 b.w 1003b39c + +1003b476 : +1003b476: f241 63c8 movw r3, #5832 ; 0x16c8 +1003b47a: b530 push {r4, r5, lr} +1003b47c: 58c4 ldr r4, [r0, r3] +1003b47e: 2010 movs r0, #16 +1003b480: 3801 subs r0, #1 +1003b482: b2c0 uxtb r0, r0 +1003b484: 1823 adds r3, r4, r0 +1003b486: f893 1e44 ldrb.w r1, [r3, #3652] ; 0xe44 +1003b48a: b169 cbz r1, 1003b4a8 +1003b48c: 2308 movs r3, #8 +1003b48e: 1e5a subs r2, r3, #1 +1003b490: b2d2 uxtb r2, r2 +1003b492: fa21 f502 lsr.w r5, r1, r2 +1003b496: 07ed lsls r5, r5, #31 +1003b498: d503 bpl.n 1003b4a2 +1003b49a: eb03 00c0 add.w r0, r3, r0, lsl #3 +1003b49e: b2c0 uxtb r0, r0 +1003b4a0: bd30 pop {r4, r5, pc} +1003b4a2: b10a cbz r2, 1003b4a8 +1003b4a4: 4613 mov r3, r2 +1003b4a6: e7f2 b.n 1003b48e +1003b4a8: 2800 cmp r0, #0 +1003b4aa: d1e9 bne.n 1003b480 +1003b4ac: bd30 pop {r4, r5, pc} + +1003b4ae : +1003b4ae: f241 63c8 movw r3, #5832 ; 0x16c8 +1003b4b2: 58c3 ldr r3, [r0, r3] +1003b4b4: eb03 03d1 add.w r3, r3, r1, lsr #3 +1003b4b8: f893 0e44 ldrb.w r0, [r3, #3652] ; 0xe44 +1003b4bc: f001 0107 and.w r1, r1, #7 +1003b4c0: 40c8 lsrs r0, r1 +1003b4c2: f000 0001 and.w r0, r0, #1 +1003b4c6: 4770 bx lr + +1003b4c8 : +1003b4c8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1003b4cc: 6805 ldr r5, [r0, #0] +1003b4ce: 460c mov r4, r1 +1003b4d0: 4628 mov r0, r5 +1003b4d2: f891 103b ldrb.w r1, [r1, #59] ; 0x3b +1003b4d6: 4617 mov r7, r2 +1003b4d8: f7ff ffbd bl 1003b456 +1003b4dc: 2014 movs r0, #20 +1003b4de: f7dc f8e1 bl 100176a4 +1003b4e2: f894 103b ldrb.w r1, [r4, #59] ; 0x3b +1003b4e6: 2206 movs r2, #6 +1003b4e8: 4628 mov r0, r5 +1003b4ea: f7ff ff48 bl 1003b37e +1003b4ee: f894 103b ldrb.w r1, [r4, #59] ; 0x3b +1003b4f2: 4606 mov r6, r0 +1003b4f4: 2207 movs r2, #7 +1003b4f6: 4628 mov r0, r5 +1003b4f8: f7ff ff41 bl 1003b37e +1003b4fc: b2f6 uxtb r6, r6 +1003b4fe: b2c0 uxtb r0, r0 +1003b500: ea46 2600 orr.w r6, r6, r0, lsl #8 +1003b504: 62a6 str r6, [r4, #40] ; 0x28 +1003b506: f894 103b ldrb.w r1, [r4, #59] ; 0x3b +1003b50a: 220a movs r2, #10 +1003b50c: 4628 mov r0, r5 +1003b50e: f7ff ff36 bl 1003b37e +1003b512: f894 103b ldrb.w r1, [r4, #59] ; 0x3b +1003b516: 4606 mov r6, r0 +1003b518: 220b movs r2, #11 +1003b51a: 4628 mov r0, r5 +1003b51c: f7ff ff2f bl 1003b37e +1003b520: b2f6 uxtb r6, r6 +1003b522: b2c0 uxtb r0, r0 +1003b524: ea46 2600 orr.w r6, r6, r0, lsl #8 +1003b528: 2300 movs r3, #0 +1003b52a: 83a6 strh r6, [r4, #28] +1003b52c: 6463 str r3, [r4, #68] ; 0x44 +1003b52e: 2601 movs r6, #1 +1003b530: f106 020b add.w r2, r6, #11 +1003b534: 4628 mov r0, r5 +1003b536: f894 103b ldrb.w r1, [r4, #59] ; 0x3b +1003b53a: b2d2 uxtb r2, r2 +1003b53c: f7ff ff1f bl 1003b37e +1003b540: eb04 0346 add.w r3, r4, r6, lsl #1 +1003b544: b2c0 uxtb r0, r0 +1003b546: 8398 strh r0, [r3, #28] +1003b548: 6c63 ldr r3, [r4, #68] ; 0x44 +1003b54a: fb00 3006 mla r0, r0, r6, r3 +1003b54e: 3601 adds r6, #1 +1003b550: 2e05 cmp r6, #5 +1003b552: 6460 str r0, [r4, #68] ; 0x44 +1003b554: d1ec bne.n 1003b530 +1003b556: 6aa3 ldr r3, [r4, #40] ; 0x28 +1003b558: f894 103b ldrb.w r1, [r4, #59] ; 0x3b +1003b55c: 4418 add r0, r3 +1003b55e: 6460 str r0, [r4, #68] ; 0x44 +1003b560: 2209 movs r2, #9 +1003b562: 4628 mov r0, r5 +1003b564: f7ff ff0b bl 1003b37e +1003b568: b2c0 uxtb r0, r0 +1003b56a: 85a0 strh r0, [r4, #44] ; 0x2c +1003b56c: 4621 mov r1, r4 +1003b56e: 4628 mov r0, r5 +1003b570: f894 203b ldrb.w r2, [r4, #59] ; 0x3b +1003b574: 463b mov r3, r7 +1003b576: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +1003b57a: f7ff bf50 b.w 1003b41e + ... + +1003b580 : +1003b580: b5f8 push {r3, r4, r5, r6, r7, lr} +1003b582: f241 63c8 movw r3, #5832 ; 0x16c8 +1003b586: 58c7 ldr r7, [r0, r3] +1003b588: 2201 movs r2, #1 +1003b58a: f887 21ac strb.w r2, [r7, #428] ; 0x1ac +1003b58e: 2200 movs r2, #0 +1003b590: f887 21ad strb.w r2, [r7, #429] ; 0x1ad +1003b594: f887 21ae strb.w r2, [r7, #430] ; 0x1ae +1003b598: 58c6 ldr r6, [r0, r3] +1003b59a: 4b46 ldr r3, [pc, #280] ; (1003b6b4 ) +1003b59c: 4605 mov r5, r0 +1003b59e: f8c6 31b0 str.w r3, [r6, #432] ; 0x1b0 +1003b5a2: f500 539c add.w r3, r0, #4992 ; 0x1380 +1003b5a6: 3308 adds r3, #8 +1003b5a8: f893 3071 ldrb.w r3, [r3, #113] ; 0x71 +1003b5ac: f506 7400 add.w r4, r6, #512 ; 0x200 +1003b5b0: 2b01 cmp r3, #1 +1003b5b2: d07a beq.n 1003b6aa +1003b5b4: 2300 movs r3, #0 +1003b5b6: f8d6 21b0 ldr.w r2, [r6, #432] ; 0x1b0 +1003b5ba: 4620 mov r0, r4 +1003b5bc: 2101 movs r1, #1 +1003b5be: f7fd fce3 bl 10038f88 +1003b5c2: 4620 mov r0, r4 +1003b5c4: 211d movs r1, #29 +1003b5c6: f605 12b8 addw r2, r5, #2488 ; 0x9b8 +1003b5ca: f7fd fc7b bl 10038ec4 +1003b5ce: 4620 mov r0, r4 +1003b5d0: 211e movs r1, #30 +1003b5d2: f505 6239 add.w r2, r5, #2960 ; 0xb90 +1003b5d6: f7fd fc75 bl 10038ec4 +1003b5da: 4620 mov r0, r4 +1003b5dc: 211f movs r1, #31 +1003b5de: f205 5221 addw r2, r5, #1313 ; 0x521 +1003b5e2: f7fd fc6f bl 10038ec4 +1003b5e6: f106 0235 add.w r2, r6, #53 ; 0x35 +1003b5ea: 4620 mov r0, r4 +1003b5ec: 2121 movs r1, #33 ; 0x21 +1003b5ee: f7fd fc69 bl 10038ec4 +1003b5f2: 4620 mov r0, r4 +1003b5f4: 2122 movs r1, #34 ; 0x22 +1003b5f6: f605 520c addw r2, r5, #3340 ; 0xd0c +1003b5fa: f7fd fc63 bl 10038ec4 +1003b5fe: f106 022c add.w r2, r6, #44 ; 0x2c +1003b602: 4620 mov r0, r4 +1003b604: 2123 movs r1, #35 ; 0x23 +1003b606: f7fd fc5d bl 10038ec4 +1003b60a: f106 0234 add.w r2, r6, #52 ; 0x34 +1003b60e: 4620 mov r0, r4 +1003b610: 2124 movs r1, #36 ; 0x24 +1003b612: f7fd fc57 bl 10038ec4 +1003b616: f505 52c2 add.w r2, r5, #6208 ; 0x1840 +1003b61a: 4620 mov r0, r4 +1003b61c: 2130 movs r1, #48 ; 0x30 +1003b61e: 3218 adds r2, #24 +1003b620: f7fd fc50 bl 10038ec4 +1003b624: f505 529e add.w r2, r5, #5056 ; 0x13c0 +1003b628: 4620 mov r0, r4 +1003b62a: 2131 movs r1, #49 ; 0x31 +1003b62c: 3201 adds r2, #1 +1003b62e: f7fd fc49 bl 10038ec4 +1003b632: f106 0230 add.w r2, r6, #48 ; 0x30 +1003b636: 4620 mov r0, r4 +1003b638: 2120 movs r1, #32 +1003b63a: f7fd fc43 bl 10038ec4 +1003b63e: f106 021e add.w r2, r6, #30 +1003b642: 4620 mov r0, r4 +1003b644: 2125 movs r1, #37 ; 0x25 +1003b646: f7fd fc3d bl 10038ec4 +1003b64a: 4620 mov r0, r4 +1003b64c: 2129 movs r1, #41 ; 0x29 +1003b64e: f105 0214 add.w r2, r5, #20 +1003b652: f7fd fc37 bl 10038ec4 +1003b656: f505 52a0 add.w r2, r5, #5120 ; 0x1400 +1003b65a: 4620 mov r0, r4 +1003b65c: 212a movs r1, #42 ; 0x2a +1003b65e: 3218 adds r2, #24 +1003b660: f7fd fc30 bl 10038ec4 +1003b664: 4620 mov r0, r4 +1003b666: 2135 movs r1, #53 ; 0x35 +1003b668: f605 4244 addw r2, r5, #3140 ; 0xc44 +1003b66c: f7fd fc2a bl 10038ec4 +1003b670: 4620 mov r0, r4 +1003b672: 2136 movs r1, #54 ; 0x36 +1003b674: f605 425b addw r2, r5, #3163 ; 0xc5b +1003b678: f7fd fc24 bl 10038ec4 +1003b67c: 2600 movs r6, #0 +1003b67e: b2b2 uxth r2, r6 +1003b680: 4620 mov r0, r4 +1003b682: 2149 movs r1, #73 ; 0x49 +1003b684: 2300 movs r3, #0 +1003b686: 3601 adds r6, #1 +1003b688: f7fd fc76 bl 10038f78 +1003b68c: 2e05 cmp r6, #5 +1003b68e: d1f6 bne.n 1003b67e +1003b690: f241 33c1 movw r3, #5057 ; 0x13c1 +1003b694: 5ceb ldrb r3, [r5, r3] +1003b696: b91b cbnz r3, 1003b6a0 +1003b698: f507 7000 add.w r0, r7, #512 ; 0x200 +1003b69c: f7fd fd0e bl 100390bc +1003b6a0: 22ff movs r2, #255 ; 0xff +1003b6a2: f641 0378 movw r3, #6264 ; 0x1878 +1003b6a6: 54ea strb r2, [r5, r3] +1003b6a8: bdf8 pop {r3, r4, r5, r6, r7, pc} +1003b6aa: 4b03 ldr r3, [pc, #12] ; (1003b6b8 ) +1003b6ac: f8c6 31b0 str.w r3, [r6, #432] ; 0x1b0 +1003b6b0: e780 b.n 1003b5b4 +1003b6b2: bf00 nop +1003b6b4: 051040bf .word 0x051040bf +1003b6b8: 051060bf .word 0x051060bf + +1003b6bc : +1003b6bc: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} +1003b6c0: 2301 movs r3, #1 +1003b6c2: f88d 3007 strb.w r3, [sp, #7] +1003b6c6: f241 63c8 movw r3, #5832 ; 0x16c8 +1003b6ca: 58c7 ldr r7, [r0, r3] +1003b6cc: f641 035c movw r3, #6236 ; 0x185c +1003b6d0: f850 a003 ldr.w sl, [r0, r3] +1003b6d4: f241 73c5 movw r3, #6085 ; 0x17c5 +1003b6d8: 5cc5 ldrb r5, [r0, r3] +1003b6da: 4604 mov r4, r0 +1003b6dc: 2d00 cmp r5, #0 +1003b6de: d061 beq.n 1003b7a4 +1003b6e0: 212e movs r1, #46 ; 0x2e +1003b6e2: f10d 0207 add.w r2, sp, #7 +1003b6e6: f7f6 ff0b bl 10032500 +1003b6ea: 2d01 cmp r5, #1 +1003b6ec: d15a bne.n 1003b7a4 +1003b6ee: 6923 ldr r3, [r4, #16] +1003b6f0: 4620 mov r0, r4 +1003b6f2: f3c3 09c0 ubfx r9, r3, #3, #1 +1003b6f6: f7e2 ff1f bl 1001e538 +1003b6fa: f894 884c ldrb.w r8, [r4, #2124] ; 0x84c +1003b6fe: b2c6 uxtb r6, r0 +1003b700: f118 0800 adds.w r8, r8, #0 +1003b704: bf18 it ne +1003b706: f04f 0801 movne.w r8, #1 +1003b70a: f1ba 0f00 cmp.w sl, #0 +1003b70e: d006 beq.n 1003b71e +1003b710: 4620 mov r0, r4 +1003b712: 4629 mov r1, r5 +1003b714: f7e2 ff3a bl 1001e58c +1003b718: 2801 cmp r0, #1 +1003b71a: bf08 it eq +1003b71c: 2601 moveq r6, #1 +1003b71e: f507 7500 add.w r5, r7, #512 ; 0x200 +1003b722: 4628 mov r0, r5 +1003b724: 213b movs r1, #59 ; 0x3b +1003b726: fa5f f289 uxtb.w r2, r9 +1003b72a: 2300 movs r3, #0 +1003b72c: f7fd fc2c bl 10038f88 +1003b730: 4628 mov r0, r5 +1003b732: 213a movs r1, #58 ; 0x3a +1003b734: b2f2 uxtb r2, r6 +1003b736: 2300 movs r3, #0 +1003b738: f7fd fc26 bl 10038f88 +1003b73c: 2148 movs r1, #72 ; 0x48 +1003b73e: fa5f f288 uxtb.w r2, r8 +1003b742: 2300 movs r3, #0 +1003b744: 4628 mov r0, r5 +1003b746: f7fd fc1f bl 10038f88 +1003b74a: f641 015c movw r1, #6236 ; 0x185c +1003b74e: 5861 ldr r1, [r4, r1] +1003b750: f241 62c8 movw r2, #5832 ; 0x16c8 +1003b754: 58a3 ldr r3, [r4, r2] +1003b756: b151 cbz r1, 1003b76e +1003b758: 588a ldr r2, [r1, r2] +1003b75a: f8d3 11bc ldr.w r1, [r3, #444] ; 0x1bc +1003b75e: f8d2 21bc ldr.w r2, [r2, #444] ; 0x1bc +1003b762: b111 cbz r1, 1003b76a +1003b764: b11a cbz r2, 1003b76e +1003b766: 4291 cmp r1, r2 +1003b768: dd01 ble.n 1003b76e +1003b76a: f8c3 21bc str.w r2, [r3, #444] ; 0x1bc +1003b76e: 6922 ldr r2, [r4, #16] +1003b770: f012 0f01 tst.w r2, #1 +1003b774: f8d3 21bc ldr.w r2, [r3, #444] ; 0x1bc +1003b778: d102 bne.n 1003b780 +1003b77a: b90a cbnz r2, 1003b780 +1003b77c: f8c3 21c4 str.w r2, [r3, #452] ; 0x1c4 +1003b780: f8c3 21c4 str.w r2, [r3, #452] ; 0x1c4 +1003b784: f8d7 21c4 ldr.w r2, [r7, #452] ; 0x1c4 +1003b788: 4628 mov r0, r5 +1003b78a: 17d3 asrs r3, r2, #31 +1003b78c: 213c movs r1, #60 ; 0x3c +1003b78e: f7fd fbfb bl 10038f88 +1003b792: 4628 mov r0, r5 +1003b794: 2142 movs r1, #66 ; 0x42 +1003b796: 2200 movs r2, #0 +1003b798: 2300 movs r3, #0 +1003b79a: f7fd fbf5 bl 10038f88 +1003b79e: 4628 mov r0, r5 +1003b7a0: f7fd fd13 bl 100391ca +1003b7a4: b002 add sp, #8 +1003b7a6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + ... + +1003b7ac : +1003b7ac: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1003b7b0: f241 64c8 movw r4, #5832 ; 0x16c8 +1003b7b4: 4606 mov r6, r0 +1003b7b6: 5900 ldr r0, [r0, r4] +1003b7b8: 2100 movs r1, #0 +1003b7ba: f500 70d6 add.w r0, r0, #428 ; 0x1ac +1003b7be: 2254 movs r2, #84 ; 0x54 +1003b7c0: f7db fe46 bl 10017450 +1003b7c4: 5935 ldr r5, [r6, r4] +1003b7c6: 2100 movs r1, #0 +1003b7c8: f505 7400 add.w r4, r5, #512 ; 0x200 +1003b7cc: 4620 mov r0, r4 +1003b7ce: 2204 movs r2, #4 +1003b7d0: f7db fe3e bl 10017450 +1003b7d4: 4620 mov r0, r4 +1003b7d6: 2100 movs r1, #0 +1003b7d8: 2210 movs r2, #16 +1003b7da: f8c5 6200 str.w r6, [r5, #512] ; 0x200 +1003b7de: f7fd faf5 bl 10038dcc +1003b7e2: 4620 mov r0, r4 +1003b7e4: 2102 movs r1, #2 +1003b7e6: 8872 ldrh r2, [r6, #2] +1003b7e8: f7fd faf0 bl 10038dcc +1003b7ec: 4620 mov r0, r4 +1003b7ee: 210a movs r1, #10 +1003b7f0: f895 203d ldrb.w r2, [r5, #61] ; 0x3d +1003b7f4: f7fd faea bl 10038dcc +1003b7f8: 4620 mov r0, r4 +1003b7fa: 2104 movs r1, #4 +1003b7fc: f44f 5200 mov.w r2, #8192 ; 0x2000 +1003b800: f7fd fae4 bl 10038dcc +1003b804: 4b1e ldr r3, [pc, #120] ; (1003b880 ) +1003b806: 4620 mov r0, r4 +1003b808: 681f ldr r7, [r3, #0] +1003b80a: 2106 movs r1, #6 +1003b80c: 2200 movs r2, #0 +1003b80e: f7fd fadd bl 10038dcc +1003b812: 4620 mov r0, r4 +1003b814: 2105 movs r1, #5 +1003b816: f3c7 1203 ubfx r2, r7, #4, #4 +1003b81a: f7fd fad7 bl 10038dcc +1003b81e: 686a ldr r2, [r5, #4] +1003b820: 4620 mov r0, r4 +1003b822: 1e53 subs r3, r2, #1 +1003b824: 425a negs r2, r3 +1003b826: 415a adcs r2, r3 +1003b828: 2103 movs r1, #3 +1003b82a: f7fd facf bl 10038dcc +1003b82e: 4620 mov r0, r4 +1003b830: 211b movs r1, #27 +1003b832: 2220 movs r2, #32 +1003b834: f7fd faca bl 10038dcc +1003b838: 4620 mov r0, r4 +1003b83a: 2114 movs r1, #20 +1003b83c: 8baa ldrh r2, [r5, #28] +1003b83e: f7fd fac5 bl 10038dcc +1003b842: f241 33d2 movw r3, #5074 ; 0x13d2 +1003b846: 5cf2 ldrb r2, [r6, r3] +1003b848: 4620 mov r0, r4 +1003b84a: 2116 movs r1, #22 +1003b84c: f7fd fabe bl 10038dcc +1003b850: f895 303c ldrb.w r3, [r5, #60] ; 0x3c +1003b854: 2b03 cmp r3, #3 +1003b856: d105 bne.n 1003b864 +1003b858: 4620 mov r0, r4 +1003b85a: 2107 movs r1, #7 +1003b85c: 2200 movs r2, #0 +1003b85e: 2300 movs r3, #0 +1003b860: f7fd fb92 bl 10038f88 +1003b864: f04f 63a0 mov.w r3, #83886080 ; 0x5000000 +1003b868: f8c5 31b0 str.w r3, [r5, #432] ; 0x1b0 +1003b86c: 4620 mov r0, r4 +1003b86e: 2101 movs r1, #1 +1003b870: f04f 62a0 mov.w r2, #83886080 ; 0x5000000 +1003b874: 2300 movs r3, #0 +1003b876: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +1003b87a: f7fd bb85 b.w 10038f88 +1003b87e: bf00 nop +1003b880: 400001f0 .word 0x400001f0 + +1003b884 : +1003b884: 4770 bx lr + +1003b886 : +1003b886: b570 push {r4, r5, r6, lr} +1003b888: 2205 movs r2, #5 +1003b88a: 4605 mov r5, r0 +1003b88c: 460c mov r4, r1 +1003b88e: f7ff fdbf bl 1003b410 +1003b892: 4621 mov r1, r4 +1003b894: f000 03fb and.w r3, r0, #251 ; 0xfb +1003b898: 2205 movs r2, #5 +1003b89a: 4628 mov r0, r5 +1003b89c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1003b8a0: f7ff bdbb b.w 1003b41a + +1003b8a4 : +1003b8a4: b570 push {r4, r5, r6, lr} +1003b8a6: 2205 movs r2, #5 +1003b8a8: 4605 mov r5, r0 +1003b8aa: 460c mov r4, r1 +1003b8ac: f7ff fdb0 bl 1003b410 +1003b8b0: f040 0304 orr.w r3, r0, #4 +1003b8b4: 4621 mov r1, r4 +1003b8b6: 4628 mov r0, r5 +1003b8b8: 2205 movs r2, #5 +1003b8ba: b2db uxtb r3, r3 +1003b8bc: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1003b8c0: f7ff bdab b.w 1003b41a + +1003b8c4 : +1003b8c4: f241 63c8 movw r3, #5832 ; 0x16c8 +1003b8c8: 58c1 ldr r1, [r0, r3] +1003b8ca: 2300 movs r3, #0 +1003b8cc: 461a mov r2, r3 +1003b8ce: 18c8 adds r0, r1, r3 +1003b8d0: f890 0e44 ldrb.w r0, [r0, #3652] ; 0xe44 +1003b8d4: 3301 adds r3, #1 +1003b8d6: 2b10 cmp r3, #16 +1003b8d8: ea42 0200 orr.w r2, r2, r0 +1003b8dc: d1f7 bne.n 1003b8ce +1003b8de: b11a cbz r2, 1003b8e8 +1003b8e0: 2301 movs r3, #1 +1003b8e2: f881 3e54 strb.w r3, [r1, #3668] ; 0xe54 +1003b8e6: 4770 bx lr +1003b8e8: f881 2e54 strb.w r2, [r1, #3668] ; 0xe54 +1003b8ec: 4770 bx lr + +1003b8ee : +1003b8ee: b530 push {r4, r5, lr} +1003b8f0: f241 64c8 movw r4, #5832 ; 0x16c8 +1003b8f4: 5905 ldr r5, [r0, r4] +1003b8f6: f001 0407 and.w r4, r1, #7 +1003b8fa: eb05 03d1 add.w r3, r5, r1, lsr #3 +1003b8fe: 2501 movs r5, #1 +1003b900: fa05 f404 lsl.w r4, r5, r4 +1003b904: b94a cbnz r2, 1003b91a +1003b906: f893 2e44 ldrb.w r2, [r3, #3652] ; 0xe44 +1003b90a: ea22 0404 bic.w r4, r2, r4 +1003b90e: f883 4e44 strb.w r4, [r3, #3652] ; 0xe44 +1003b912: e8bd 4030 ldmia.w sp!, {r4, r5, lr} +1003b916: f7ff bfc5 b.w 1003b8a4 +1003b91a: f893 2e44 ldrb.w r2, [r3, #3652] ; 0xe44 +1003b91e: 4314 orrs r4, r2 +1003b920: f883 4e44 strb.w r4, [r3, #3652] ; 0xe44 +1003b924: e8bd 4030 ldmia.w sp!, {r4, r5, lr} +1003b928: f7ff bfad b.w 1003b886 + +1003b92c : +1003b92c: b5f8 push {r3, r4, r5, r6, r7, lr} +1003b92e: 780b ldrb r3, [r1, #0] +1003b930: 784c ldrb r4, [r1, #1] +1003b932: 079b lsls r3, r3, #30 +1003b934: bf48 it mi +1003b936: 788f ldrbmi r7, [r1, #2] +1003b938: 4606 mov r6, r0 +1003b93a: 460d mov r5, r1 +1003b93c: bf58 it pl +1003b93e: 4627 movpl r7, r4 +1003b940: 42bc cmp r4, r7 +1003b942: d809 bhi.n 1003b958 +1003b944: 782a ldrb r2, [r5, #0] +1003b946: 4621 mov r1, r4 +1003b948: 4630 mov r0, r6 +1003b94a: f002 0201 and.w r2, r2, #1 +1003b94e: 3401 adds r4, #1 +1003b950: f7ff ffcd bl 1003b8ee +1003b954: b2e4 uxtb r4, r4 +1003b956: e7f3 b.n 1003b940 +1003b958: 4630 mov r0, r6 +1003b95a: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +1003b95e: f7ff bfb1 b.w 1003b8c4 + ... + +1003b964 : +1003b964: b570 push {r4, r5, r6, lr} +1003b966: 4b21 ldr r3, [pc, #132] ; (1003b9ec ) +1003b968: 6818 ldr r0, [r3, #0] +1003b96a: 784b ldrb r3, [r1, #1] +1003b96c: b913 cbnz r3, 1003b974 +1003b96e: 788b ldrb r3, [r1, #2] +1003b970: b9f3 cbnz r3, 1003b9b0 +1003b972: bd70 pop {r4, r5, r6, pc} +1003b974: 688a ldr r2, [r1, #8] +1003b976: b285 uxth r5, r0 +1003b978: 441d add r5, r3 +1003b97a: eb02 16c3 add.w r6, r2, r3, lsl #7 +1003b97e: 4b1c ldr r3, [pc, #112] ; (1003b9f0 ) +1003b980: f240 7287 movw r2, #1927 ; 0x787 +1003b984: 01ed lsls r5, r5, #7 +1003b986: f405 6578 and.w r5, r5, #3968 ; 0xf80 +1003b98a: 801a strh r2, [r3, #0] +1003b98c: 4a19 ldr r2, [pc, #100] ; (1003b9f4 ) +1003b98e: f105 4380 add.w r3, r5, #1073741824 ; 0x40000000 +1003b992: f503 2308 add.w r3, r3, #557056 ; 0x88000 +1003b996: 442a add r2, r5 +1003b998: 1b74 subs r4, r6, r5 +1003b99a: 441c add r4, r3 +1003b99c: f104 4440 add.w r4, r4, #3221225472 ; 0xc0000000 +1003b9a0: f5a4 2408 sub.w r4, r4, #557056 ; 0x88000 +1003b9a4: 6824 ldr r4, [r4, #0] +1003b9a6: f843 4b04 str.w r4, [r3], #4 +1003b9aa: 4293 cmp r3, r2 +1003b9ac: d1f4 bne.n 1003b998 +1003b9ae: e7de b.n 1003b96e +1003b9b0: 688c ldr r4, [r1, #8] +1003b9b2: b280 uxth r0, r0 +1003b9b4: 4418 add r0, r3 +1003b9b6: eb04 14c3 add.w r4, r4, r3, lsl #7 +1003b9ba: 4b0d ldr r3, [pc, #52] ; (1003b9f0 ) +1003b9bc: f240 7287 movw r2, #1927 ; 0x787 +1003b9c0: 01c0 lsls r0, r0, #7 +1003b9c2: f400 6078 and.w r0, r0, #3968 ; 0xf80 +1003b9c6: 801a strh r2, [r3, #0] +1003b9c8: 4a0b ldr r2, [pc, #44] ; (1003b9f8 ) +1003b9ca: f100 4380 add.w r3, r0, #1073741824 ; 0x40000000 +1003b9ce: f503 2308 add.w r3, r3, #557056 ; 0x88000 +1003b9d2: 4402 add r2, r0 +1003b9d4: 1a21 subs r1, r4, r0 +1003b9d6: 4419 add r1, r3 +1003b9d8: f101 4140 add.w r1, r1, #3221225472 ; 0xc0000000 +1003b9dc: f5a1 2108 sub.w r1, r1, #557056 ; 0x88000 +1003b9e0: 6809 ldr r1, [r1, #0] +1003b9e2: f843 1b04 str.w r1, [r3], #4 +1003b9e6: 4293 cmp r3, r2 +1003b9e8: d1f4 bne.n 1003b9d4 +1003b9ea: bd70 pop {r4, r5, r6, pc} +1003b9ec: 40080424 .word 0x40080424 +1003b9f0: 40080140 .word 0x40080140 +1003b9f4: 40088038 .word 0x40088038 +1003b9f8: 40088040 .word 0x40088040 + +1003b9fc : +1003b9fc: b573 push {r0, r1, r4, r5, r6, lr} +1003b9fe: f241 63c8 movw r3, #5832 ; 0x16c8 +1003ba02: 58c6 ldr r6, [r0, r3] +1003ba04: 460d mov r5, r1 +1003ba06: f896 3e88 ldrb.w r3, [r6, #3720] ; 0xe88 +1003ba0a: 4604 mov r4, r0 +1003ba0c: 2b01 cmp r3, #1 +1003ba0e: 4611 mov r1, r2 +1003ba10: d106 bne.n 1003ba20 +1003ba12: f896 3e94 ldrb.w r3, [r6, #3732] ; 0xe94 +1003ba16: b11b cbz r3, 1003ba20 +1003ba18: 9201 str r2, [sp, #4] +1003ba1a: f7f4 fb0b bl 10030034 +1003ba1e: 9901 ldr r1, [sp, #4] +1003ba20: 2d20 cmp r5, #32 +1003ba22: d014 beq.n 1003ba4e +1003ba24: d806 bhi.n 1003ba34 +1003ba26: b1b5 cbz r5, 1003ba56 +1003ba28: 2d01 cmp r5, #1 +1003ba2a: d117 bne.n 1003ba5c +1003ba2c: 4620 mov r0, r4 +1003ba2e: f7ff ff7d bl 1003b92c +1003ba32: e013 b.n 1003ba5c +1003ba34: 2d40 cmp r5, #64 ; 0x40 +1003ba36: d005 beq.n 1003ba44 +1003ba38: 2dc2 cmp r5, #194 ; 0xc2 +1003ba3a: d10f bne.n 1003ba5c +1003ba3c: 4620 mov r0, r4 +1003ba3e: f7f5 fb7b bl 10031138 +1003ba42: e00b b.n 1003ba5c +1003ba44: f506 7000 add.w r0, r6, #512 ; 0x200 +1003ba48: f7fc ff82 bl 10038950 +1003ba4c: e006 b.n 1003ba5c +1003ba4e: 4620 mov r0, r4 +1003ba50: f7f5 fa72 bl 10030f38 +1003ba54: e002 b.n 1003ba5c +1003ba56: 4620 mov r0, r4 +1003ba58: f7ff ff84 bl 1003b964 +1003ba5c: 4620 mov r0, r4 +1003ba5e: f7f4 fcf7 bl 10030450 +1003ba62: 2000 movs r0, #0 +1003ba64: b002 add sp, #8 +1003ba66: bd70 pop {r4, r5, r6, pc} + +1003ba68 : +1003ba68: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} +1003ba6c: 9c0c ldr r4, [sp, #48] ; 0x30 +1003ba6e: 4607 mov r7, r0 +1003ba70: 9100 str r1, [sp, #0] +1003ba72: 4693 mov fp, r2 +1003ba74: 9301 str r3, [sp, #4] +1003ba76: 2500 movs r5, #0 +1003ba78: 78e1 ldrb r1, [r4, #3] +1003ba7a: 7922 ldrb r2, [r4, #4] +1003ba7c: 0908 lsrs r0, r1, #4 +1003ba7e: f001 010f and.w r1, r1, #15 +1003ba82: ea1b 0f01 tst.w fp, r1 +1003ba86: f8b4 a000 ldrh.w sl, [r4] +1003ba8a: f894 c002 ldrb.w ip, [r4, #2] +1003ba8e: ea4f 1212 mov.w r2, r2, lsr #4 +1003ba92: 7966 ldrb r6, [r4, #5] +1003ba94: f894 8006 ldrb.w r8, [r4, #6] +1003ba98: d03e beq.n 1003bb18 +1003ba9a: 9b00 ldr r3, [sp, #0] +1003ba9c: ea1c 0f03 tst.w ip, r3 +1003baa0: d03a beq.n 1003bb18 +1003baa2: 9b01 ldr r3, [sp, #4] +1003baa4: 4203 tst r3, r0 +1003baa6: d037 beq.n 1003bb18 +1003baa8: 3a01 subs r2, #1 +1003baaa: 2a03 cmp r2, #3 +1003baac: d834 bhi.n 1003bb18 +1003baae: e8df f002 tbb [pc, r2] +1003bab2: 1902 .short 0x1902 +1003bab4: 3528 .short 0x3528 +1003bab6: 4651 mov r1, sl +1003bab8: 4638 mov r0, r7 +1003baba: f7fc f8ee bl 10037c9a +1003babe: ea20 0006 bic.w r0, r0, r6 +1003bac2: b2c2 uxtb r2, r0 +1003bac4: ea08 0606 and.w r6, r8, r6 +1003bac8: 4638 mov r0, r7 +1003baca: 4651 mov r1, sl +1003bacc: 4332 orrs r2, r6 +1003bace: f7fc f8f9 bl 10037cc4 +1003bad2: e021 b.n 1003bb18 +1003bad4: 2201 movs r2, #1 +1003bad6: f241 3188 movw r1, #5000 ; 0x1388 +1003bada: 4589 cmp r9, r1 +1003badc: f105 0501 add.w r5, r5, #1 +1003bae0: d81e bhi.n 1003bb20 +1003bae2: b9ca cbnz r2, 1003bb18 +1003bae4: 4638 mov r0, r7 +1003bae6: 4651 mov r1, sl +1003bae8: f7fc f8d7 bl 10037c9a +1003baec: ea08 0206 and.w r2, r8, r6 +1003baf0: 4030 ands r0, r6 +1003baf2: 4290 cmp r0, r2 +1003baf4: 46a9 mov r9, r5 +1003baf6: d0ed beq.n 1003bad4 +1003baf8: 200a movs r0, #10 +1003bafa: f7db fdd3 bl 100176a4 +1003bafe: 2200 movs r2, #0 +1003bb00: e7e9 b.n 1003bad6 +1003bb02: f1b8 0f00 cmp.w r8, #0 +1003bb06: d101 bne.n 1003bb0c +1003bb08: 4650 mov r0, sl +1003bb0a: e003 b.n 1003bb14 +1003bb0c: f44f 707a mov.w r0, #1000 ; 0x3e8 +1003bb10: fb00 f00a mul.w r0, r0, sl +1003bb14: f7db fdc6 bl 100176a4 +1003bb18: 3408 adds r4, #8 +1003bb1a: e7ad b.n 1003ba78 +1003bb1c: 2001 movs r0, #1 +1003bb1e: e000 b.n 1003bb22 +1003bb20: 2000 movs r0, #0 +1003bb22: b003 add sp, #12 +1003bb24: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +1003bb28 : +1003bb28: b508 push {r3, lr} +1003bb2a: 4b02 ldr r3, [pc, #8] ; (1003bb34 ) +1003bb2c: 6818 ldr r0, [r3, #0] +1003bb2e: b100 cbz r0, 1003bb32 +1003bb30: 4780 blx r0 +1003bb32: bd08 pop {r3, pc} +1003bb34: 1004400c .word 0x1004400c + +1003bb38 : +1003bb38: b508 push {r3, lr} +1003bb3a: 4b02 ldr r3, [pc, #8] ; (1003bb44 ) +1003bb3c: 685b ldr r3, [r3, #4] +1003bb3e: b103 cbz r3, 1003bb42 +1003bb40: 4798 blx r3 +1003bb42: bd08 pop {r3, pc} +1003bb44: 1004400c .word 0x1004400c + +1003bb48 : +1003bb48: b508 push {r3, lr} +1003bb4a: 4b02 ldr r3, [pc, #8] ; (1003bb54 ) +1003bb4c: 689b ldr r3, [r3, #8] +1003bb4e: b103 cbz r3, 1003bb52 +1003bb50: 4798 blx r3 +1003bb52: bd08 pop {r3, pc} +1003bb54: 1004400c .word 0x1004400c + +1003bb58 : +1003bb58: b508 push {r3, lr} +1003bb5a: 4b02 ldr r3, [pc, #8] ; (1003bb64 ) +1003bb5c: 68db ldr r3, [r3, #12] +1003bb5e: b103 cbz r3, 1003bb62 +1003bb60: 4798 blx r3 +1003bb62: bd08 pop {r3, pc} +1003bb64: 1004400c .word 0x1004400c + +1003bb68 : +1003bb68: b508 push {r3, lr} +1003bb6a: 2024 movs r0, #36 ; 0x24 +1003bb6c: f7db fe30 bl 100177d0 +1003bb70: b1a0 cbz r0, 1003bb9c +1003bb72: 4b0b ldr r3, [pc, #44] ; (1003bba0 ) +1003bb74: 681a ldr r2, [r3, #0] +1003bb76: f042 0201 orr.w r2, r2, #1 +1003bb7a: 601a str r2, [r3, #0] +1003bb7c: 681a ldr r2, [r3, #0] +1003bb7e: f042 0202 orr.w r2, r2, #2 +1003bb82: 601a str r2, [r3, #0] +1003bb84: f853 2c34 ldr.w r2, [r3, #-52] +1003bb88: f042 0204 orr.w r2, r2, #4 +1003bb8c: f843 2c34 str.w r2, [r3, #-52] +1003bb90: f853 2c30 ldr.w r2, [r3, #-48] +1003bb94: f442 3280 orr.w r2, r2, #65536 ; 0x10000 +1003bb98: f843 2c30 str.w r2, [r3, #-48] +1003bb9c: bd08 pop {r3, pc} +1003bb9e: bf00 nop +1003bba0: 40000244 .word 0x40000244 + +1003bba4 : +1003bba4: b508 push {r3, lr} +1003bba6: b110 cbz r0, 1003bbae +1003bba8: 2124 movs r1, #36 ; 0x24 +1003bbaa: f7db fc3e bl 1001742a +1003bbae: 4b0b ldr r3, [pc, #44] ; (1003bbdc ) +1003bbb0: 681b ldr r3, [r3, #0] +1003bbb2: 4b0b ldr r3, [pc, #44] ; (1003bbe0 ) +1003bbb4: 681a ldr r2, [r3, #0] +1003bbb6: f422 3280 bic.w r2, r2, #65536 ; 0x10000 +1003bbba: 601a str r2, [r3, #0] +1003bbbc: f853 2c04 ldr.w r2, [r3, #-4] +1003bbc0: f022 0204 bic.w r2, r2, #4 +1003bbc4: f843 2c04 str.w r2, [r3, #-4] +1003bbc8: 6b1a ldr r2, [r3, #48] ; 0x30 +1003bbca: f022 0201 bic.w r2, r2, #1 +1003bbce: 631a str r2, [r3, #48] ; 0x30 +1003bbd0: 6b1a ldr r2, [r3, #48] ; 0x30 +1003bbd2: f022 0202 bic.w r2, r2, #2 +1003bbd6: 631a str r2, [r3, #48] ; 0x30 +1003bbd8: bd08 pop {r3, pc} +1003bbda: bf00 nop +1003bbdc: 40080000 .word 0x40080000 +1003bbe0: 40000214 .word 0x40000214 + +1003bbe4 : +1003bbe4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1003bbe8: f8df 8048 ldr.w r8, [pc, #72] ; 1003bc34 +1003bbec: b088 sub sp, #32 +1003bbee: 4604 mov r4, r0 +1003bbf0: 230f movs r3, #15 +1003bbf2: 9002 str r0, [sp, #8] +1003bbf4: 270e movs r7, #14 +1003bbf6: 4e0d ldr r6, [pc, #52] ; (1003bc2c ) +1003bbf8: 4668 mov r0, sp +1003bbfa: 9301 str r3, [sp, #4] +1003bbfc: 4d0c ldr r5, [pc, #48] ; (1003bc30 ) +1003bbfe: f8cd 8000 str.w r8, [sp] +1003bc02: 9703 str r7, [sp, #12] +1003bc04: 47b0 blx r6 +1003bc06: 4668 mov r0, sp +1003bc08: 47a8 blx r5 +1003bc0a: 2310 movs r3, #16 +1003bc0c: eb0d 0003 add.w r0, sp, r3 +1003bc10: 9305 str r3, [sp, #20] +1003bc12: 9406 str r4, [sp, #24] +1003bc14: f8cd 8010 str.w r8, [sp, #16] +1003bc18: 9707 str r7, [sp, #28] +1003bc1a: 47b0 blx r6 +1003bc1c: a804 add r0, sp, #16 +1003bc1e: 47a8 blx r5 +1003bc20: 2301 movs r3, #1 +1003bc22: 7723 strb r3, [r4, #28] +1003bc24: 7763 strb r3, [r4, #29] +1003bc26: b008 add sp, #32 +1003bc28: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1003bc2c: 00004029 .word 0x00004029 +1003bc30: 000040f1 .word 0x000040f1 +1003bc34: 1003bd41 .word 0x1003bd41 + +1003bc38 : +1003bc38: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1003bc3c: 7f03 ldrb r3, [r0, #28] +1003bc3e: b088 sub sp, #32 +1003bc40: 4604 mov r4, r0 +1003bc42: b1e3 cbz r3, 1003bc7e +1003bc44: f8df 8044 ldr.w r8, [pc, #68] ; 1003bc8c +1003bc48: 230f movs r3, #15 +1003bc4a: 9002 str r0, [sp, #8] +1003bc4c: 270e movs r7, #14 +1003bc4e: 4668 mov r0, sp +1003bc50: 4e0c ldr r6, [pc, #48] ; (1003bc84 ) +1003bc52: 9301 str r3, [sp, #4] +1003bc54: 4d0c ldr r5, [pc, #48] ; (1003bc88 ) +1003bc56: f8cd 8000 str.w r8, [sp] +1003bc5a: 9703 str r7, [sp, #12] +1003bc5c: 47b0 blx r6 +1003bc5e: 4668 mov r0, sp +1003bc60: 47a8 blx r5 +1003bc62: 2310 movs r3, #16 +1003bc64: eb0d 0003 add.w r0, sp, r3 +1003bc68: 9305 str r3, [sp, #20] +1003bc6a: 9406 str r4, [sp, #24] +1003bc6c: f8cd 8010 str.w r8, [sp, #16] +1003bc70: 9707 str r7, [sp, #28] +1003bc72: 47b0 blx r6 +1003bc74: a804 add r0, sp, #16 +1003bc76: 47a8 blx r5 +1003bc78: 2300 movs r3, #0 +1003bc7a: 7763 strb r3, [r4, #29] +1003bc7c: 7723 strb r3, [r4, #28] +1003bc7e: b008 add sp, #32 +1003bc80: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1003bc84: 0000418d .word 0x0000418d +1003bc88: 00004091 .word 0x00004091 +1003bc8c: 1003bd41 .word 0x1003bd41 + +1003bc90 : +1003bc90: b510 push {r4, lr} +1003bc92: f641 0369 movw r3, #6249 ; 0x1869 +1003bc96: 5cc3 ldrb r3, [r0, r3] +1003bc98: 4604 mov r4, r0 +1003bc9a: b12b cbz r3, 1003bca8 +1003bc9c: f641 035c movw r3, #6236 ; 0x185c +1003bca0: 58c3 ldr r3, [r0, r3] +1003bca2: 2b00 cmp r3, #0 +1003bca4: bf18 it ne +1003bca6: 461c movne r4, r3 +1003bca8: f241 73b0 movw r3, #6064 ; 0x17b0 +1003bcac: 58e3 ldr r3, [r4, r3] +1003bcae: b953 cbnz r3, 1003bcc6 +1003bcb0: f241 7324 movw r3, #5924 ; 0x1724 +1003bcb4: 58e3 ldr r3, [r4, r3] +1003bcb6: b10b cbz r3, 1003bcbc +1003bcb8: 4620 mov r0, r4 +1003bcba: 4798 blx r3 +1003bcbc: 4620 mov r0, r4 +1003bcbe: e8bd 4010 ldmia.w sp!, {r4, lr} +1003bcc2: f7f6 bc78 b.w 100325b6 +1003bcc6: bd10 pop {r4, pc} + +1003bcc8 : +1003bcc8: b5f8 push {r3, r4, r5, r6, r7, lr} +1003bcca: 4604 mov r4, r0 +1003bccc: f504 55be add.w r5, r4, #6080 ; 0x17c0 +1003bcd0: 350c adds r5, #12 +1003bcd2: 4819 ldr r0, [pc, #100] ; (1003bd38 ) +1003bcd4: f105 0608 add.w r6, r5, #8 +1003bcd8: 4f18 ldr r7, [pc, #96] ; (1003bd3c ) +1003bcda: f7db fdfb bl 100178d4 +1003bcde: 4630 mov r0, r6 +1003bce0: 603e str r6, [r7, #0] +1003bce2: f7db fbe9 bl 100174b8 +1003bce6: 4630 mov r0, r6 +1003bce8: f7db fbfe bl 100174e8 +1003bcec: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +1003bcf0: 3318 adds r3, #24 +1003bcf2: 781b ldrb r3, [r3, #0] +1003bcf4: b98b cbnz r3, 1003bd1a +1003bcf6: 692b ldr r3, [r5, #16] +1003bcf8: b97b cbnz r3, 1003bd1a +1003bcfa: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +1003bcfe: 330c adds r3, #12 +1003bd00: 681b ldr r3, [r3, #0] +1003bd02: 2b01 cmp r3, #1 +1003bd04: d009 beq.n 1003bd1a +1003bd06: f504 53bd add.w r3, r4, #6048 ; 0x17a0 +1003bd0a: 3310 adds r3, #16 +1003bd0c: 681b ldr r3, [r3, #0] +1003bd0e: 2b01 cmp r3, #1 +1003bd10: d003 beq.n 1003bd1a +1003bd12: 4620 mov r0, r4 +1003bd14: f7f6 fcec bl 100326f0 +1003bd18: e7e5 b.n 1003bce6 +1003bd1a: 2202 movs r2, #2 +1003bd1c: f241 73b8 movw r3, #6072 ; 0x17b8 +1003bd20: 54e2 strb r2, [r4, r3] +1003bd22: f105 000c add.w r0, r5, #12 +1003bd26: 2300 movs r3, #0 +1003bd28: 603b str r3, [r7, #0] +1003bd2a: f7db fbc5 bl 100174b8 +1003bd2e: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +1003bd32: f7db bdd7 b.w 100178e4 +1003bd36: bf00 nop +1003bd38: 1004401c .word 0x1004401c +1003bd3c: 1004e078 .word 0x1004e078 + +1003bd40 : +1003bd40: b538 push {r3, r4, r5, lr} +1003bd42: 6804 ldr r4, [r0, #0] +1003bd44: f241 63c8 movw r3, #5832 ; 0x16c8 +1003bd48: 58e3 ldr r3, [r4, r3] +1003bd4a: 4605 mov r5, r0 +1003bd4c: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 +1003bd50: b113 cbz r3, 1003bd58 +1003bd52: 4620 mov r0, r4 +1003bd54: f7f4 f96e bl 10030034 +1003bd58: 7f6b ldrb r3, [r5, #29] +1003bd5a: b17b cbz r3, 1003bd7c +1003bd5c: 4620 mov r0, r4 +1003bd5e: f7ef fa47 bl 1002b1f0 +1003bd62: 4620 mov r0, r4 +1003bd64: f7ef f9b8 bl 1002b0d8 +1003bd68: 4b05 ldr r3, [pc, #20] ; (1003bd80 ) +1003bd6a: 681b ldr r3, [r3, #0] +1003bd6c: b133 cbz r3, 1003bd7c +1003bd6e: b110 cbz r0, 1003bd76 +1003bd70: 4618 mov r0, r3 +1003bd72: f7db fba9 bl 100174c8 +1003bd76: 4620 mov r0, r4 +1003bd78: f7ef fa06 bl 1002b188 +1003bd7c: 2001 movs r0, #1 +1003bd7e: bd38 pop {r3, r4, r5, pc} +1003bd80: 1004e078 .word 0x1004e078 + +1003bd84 : +1003bd84: 4a03 ldr r2, [pc, #12] ; (1003bd94 ) +1003bd86: 4b04 ldr r3, [pc, #16] ; (1003bd98 ) +1003bd88: 68d1 ldr r1, [r2, #12] +1003bd8a: 6952 ldr r2, [r2, #20] +1003bd8c: 6019 str r1, [r3, #0] +1003bd8e: 605a str r2, [r3, #4] +1003bd90: 4770 bx lr +1003bd92: bf00 nop +1003bd94: 100403dc .word 0x100403dc +1003bd98: 100006d4 .word 0x100006d4 + +1003bd9c : +1003bd9c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +1003bda0: 4f52 ldr r7, [pc, #328] ; (1003beec ) +1003bda2: f04f 0800 mov.w r8, #0 +1003bda6: 4605 mov r5, r0 +1003bda8: f507 7942 add.w r9, r7, #776 ; 0x308 +1003bdac: 4644 mov r4, r8 +1003bdae: 4646 mov r6, r8 +1003bdb0: 2301 movs r3, #1 +1003bdb2: 454f cmp r7, r9 +1003bdb4: f000 8097 beq.w 1003bee6 +1003bdb8: f857 1c04 ldr.w r1, [r7, #-4] +1003bdbc: 683a ldr r2, [r7, #0] +1003bdbe: f011 4f40 tst.w r1, #3221225472 ; 0xc0000000 +1003bdc2: d07e beq.n 1003bec2 +1003bdc4: 2900 cmp r1, #0 +1003bdc6: da08 bge.n 1003bdda +1003bdc8: f3c1 7001 ubfx r0, r1, #28, #2 +1003bdcc: 2803 cmp r0, #3 +1003bdce: d07e beq.n 1003bece +1003bdd0: 2802 cmp r0, #2 +1003bdd2: d17f bne.n 1003bed4 +1003bdd4: f086 0301 eor.w r3, r6, #1 +1003bdd8: e083 b.n 1003bee2 +1003bdda: 2e00 cmp r6, #0 +1003bddc: d17d bne.n 1003beda +1003bdde: f895 3034 ldrb.w r3, [r5, #52] ; 0x34 +1003bde2: f895 c028 ldrb.w ip, [r5, #40] ; 0x28 +1003bde6: f3c3 1100 ubfx r1, r3, #4, #1 +1003bdea: ea4f 1ad3 mov.w sl, r3, lsr #7 +1003bdee: ea41 0a8a orr.w sl, r1, sl, lsl #2 +1003bdf2: f3c3 01c0 ubfx r1, r3, #3, #1 +1003bdf6: f3c3 1080 ubfx r0, r3, #6, #1 +1003bdfa: ea4a 0a41 orr.w sl, sl, r1, lsl #1 +1003bdfe: ea4a 0ac0 orr.w sl, sl, r0, lsl #3 +1003be02: f3c3 0380 ubfx r3, r3, #2, #1 +1003be06: ea4a 1a03 orr.w sl, sl, r3, lsl #4 +1003be0a: f00c 03f0 and.w r3, ip, #240 ; 0xf0 +1003be0e: f00c 0c0f and.w ip, ip, #15 +1003be12: ea4f 2c0c mov.w ip, ip, lsl #8 +1003be16: f895 0030 ldrb.w r0, [r5, #48] ; 0x30 +1003be1a: ea4c 4303 orr.w r3, ip, r3, lsl #16 +1003be1e: f895 c021 ldrb.w ip, [r5, #33] ; 0x21 +1003be22: f895 1035 ldrb.w r1, [r5, #53] ; 0x35 +1003be26: 2800 cmp r0, #0 +1003be28: ea43 430c orr.w r3, r3, ip, lsl #16 +1003be2c: bf08 it eq +1003be2e: 200f moveq r0, #15 +1003be30: ea43 030a orr.w r3, r3, sl +1003be34: 2900 cmp r1, #0 +1003be36: bf08 it eq +1003be38: 210f moveq r1, #15 +1003be3a: ea43 6000 orr.w r0, r3, r0, lsl #24 +1003be3e: f414 4f70 tst.w r4, #61440 ; 0xf000 +1003be42: ea40 3101 orr.w r1, r0, r1, lsl #12 +1003be46: f895 a036 ldrb.w sl, [r5, #54] ; 0x36 +1003be4a: f895 b037 ldrb.w fp, [r5, #55] ; 0x37 +1003be4e: f895 0038 ldrb.w r0, [r5, #56] ; 0x38 +1003be52: f895 c039 ldrb.w ip, [r5, #57] ; 0x39 +1003be56: d004 beq.n 1003be62 +1003be58: ea81 0304 eor.w r3, r1, r4 +1003be5c: f413 4f70 tst.w r3, #61440 ; 0xf000 +1003be60: d13e bne.n 1003bee0 +1003be62: f014 6f70 tst.w r4, #251658240 ; 0xf000000 +1003be66: d004 beq.n 1003be72 +1003be68: ea81 0304 eor.w r3, r1, r4 +1003be6c: f013 6f70 tst.w r3, #251658240 ; 0xf000000 +1003be70: d133 bne.n 1003beda +1003be72: f024 437f bic.w r3, r4, #4278190080 ; 0xff000000 +1003be76: f423 4370 bic.w r3, r3, #61440 ; 0xf000 +1003be7a: 4019 ands r1, r3 +1003be7c: 4299 cmp r1, r3 +1003be7e: d12c bne.n 1003beda +1003be80: 0723 lsls r3, r4, #28 +1003be82: d02c beq.n 1003bede +1003be84: 0400 lsls r0, r0, #16 +1003be86: f014 0f01 tst.w r4, #1 +1003be8a: ea40 2b0b orr.w fp, r0, fp, lsl #8 +1003be8e: bf14 ite ne +1003be90: 23ff movne r3, #255 ; 0xff +1003be92: 2300 moveq r3, #0 +1003be94: ea4b 0a0a orr.w sl, fp, sl +1003be98: 07a1 lsls r1, r4, #30 +1003be9a: bf48 it mi +1003be9c: f443 437f orrmi.w r3, r3, #65280 ; 0xff00 +1003bea0: ea4a 6c0c orr.w ip, sl, ip, lsl #24 +1003bea4: 0761 lsls r1, r4, #29 +1003bea6: bf48 it mi +1003bea8: f443 037f orrmi.w r3, r3, #16711680 ; 0xff0000 +1003beac: ea88 0c0c eor.w ip, r8, ip +1003beb0: 0721 lsls r1, r4, #28 +1003beb2: bf48 it mi +1003beb4: f043 437f orrmi.w r3, r3, #4278190080 ; 0xff000000 +1003beb8: ea42 020c orr.w r2, r2, ip +1003bebc: 4213 tst r3, r2 +1003bebe: d10c bne.n 1003beda +1003bec0: e00d b.n 1003bede +1003bec2: b173 cbz r3, 1003bee2 +1003bec4: 4628 mov r0, r5 +1003bec6: b2d2 uxtb r2, r2 +1003bec8: f7fc fef6 bl 10038cb8 +1003becc: e000 b.n 1003bed0 +1003bece: 2600 movs r6, #0 +1003bed0: 2301 movs r3, #1 +1003bed2: e006 b.n 1003bee2 +1003bed4: 4690 mov r8, r2 +1003bed6: 460c mov r4, r1 +1003bed8: e003 b.n 1003bee2 +1003beda: 2300 movs r3, #0 +1003bedc: e001 b.n 1003bee2 +1003bede: 2601 movs r6, #1 +1003bee0: 4633 mov r3, r6 +1003bee2: 3708 adds r7, #8 +1003bee4: e765 b.n 1003bdb2 +1003bee6: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +1003beea: bf00 nop +1003beec: 10045ab8 .word 0x10045ab8 + +1003bef0 : +1003bef0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1003bef4: f890 4034 ldrb.w r4, [r0, #52] ; 0x34 +1003bef8: f890 7028 ldrb.w r7, [r0, #40] ; 0x28 +1003befc: f3c4 1500 ubfx r5, r4, #4, #1 +1003bf00: ea4f 1cd4 mov.w ip, r4, lsr #7 +1003bf04: ea45 0c8c orr.w ip, r5, ip, lsl #2 +1003bf08: f3c4 05c0 ubfx r5, r4, #3, #1 +1003bf0c: f3c4 1680 ubfx r6, r4, #6, #1 +1003bf10: ea4c 0c45 orr.w ip, ip, r5, lsl #1 +1003bf14: ea4c 0cc6 orr.w ip, ip, r6, lsl #3 +1003bf18: f3c4 0480 ubfx r4, r4, #2, #1 +1003bf1c: ea4c 1c04 orr.w ip, ip, r4, lsl #4 +1003bf20: f007 04f0 and.w r4, r7, #240 ; 0xf0 +1003bf24: f007 070f and.w r7, r7, #15 +1003bf28: 023f lsls r7, r7, #8 +1003bf2a: f890 6030 ldrb.w r6, [r0, #48] ; 0x30 +1003bf2e: ea47 4404 orr.w r4, r7, r4, lsl #16 +1003bf32: f890 7021 ldrb.w r7, [r0, #33] ; 0x21 +1003bf36: f890 5035 ldrb.w r5, [r0, #53] ; 0x35 +1003bf3a: 2e00 cmp r6, #0 +1003bf3c: ea44 4407 orr.w r4, r4, r7, lsl #16 +1003bf40: ea44 040c orr.w r4, r4, ip +1003bf44: bf08 it eq +1003bf46: 260f moveq r6, #15 +1003bf48: 2d00 cmp r5, #0 +1003bf4a: bf08 it eq +1003bf4c: 250f moveq r5, #15 +1003bf4e: ea44 6606 orr.w r6, r4, r6, lsl #24 +1003bf52: f411 4f70 tst.w r1, #61440 ; 0xf000 +1003bf56: ea46 3505 orr.w r5, r6, r5, lsl #12 +1003bf5a: f890 7036 ldrb.w r7, [r0, #54] ; 0x36 +1003bf5e: f890 c037 ldrb.w ip, [r0, #55] ; 0x37 +1003bf62: f890 8038 ldrb.w r8, [r0, #56] ; 0x38 +1003bf66: f890 4039 ldrb.w r4, [r0, #57] ; 0x39 +1003bf6a: d004 beq.n 1003bf76 +1003bf6c: ea85 0001 eor.w r0, r5, r1 +1003bf70: f410 4f70 tst.w r0, #61440 ; 0xf000 +1003bf74: d135 bne.n 1003bfe2 +1003bf76: f011 6f70 tst.w r1, #251658240 ; 0xf000000 +1003bf7a: d004 beq.n 1003bf86 +1003bf7c: ea85 0001 eor.w r0, r5, r1 +1003bf80: f010 6f70 tst.w r0, #251658240 ; 0xf000000 +1003bf84: d12d bne.n 1003bfe2 +1003bf86: f021 407f bic.w r0, r1, #4278190080 ; 0xff000000 +1003bf8a: f420 4070 bic.w r0, r0, #61440 ; 0xf000 +1003bf8e: 4005 ands r5, r0 +1003bf90: 4285 cmp r5, r0 +1003bf92: d126 bne.n 1003bfe2 +1003bf94: 0708 lsls r0, r1, #28 +1003bf96: d021 beq.n 1003bfdc +1003bf98: f011 0f01 tst.w r1, #1 +1003bf9c: bf14 ite ne +1003bf9e: 20ff movne r0, #255 ; 0xff +1003bfa0: 2000 moveq r0, #0 +1003bfa2: 078e lsls r6, r1, #30 +1003bfa4: bf48 it mi +1003bfa6: f440 407f orrmi.w r0, r0, #65280 ; 0xff00 +1003bfaa: 074d lsls r5, r1, #29 +1003bfac: bf48 it mi +1003bfae: f440 007f orrmi.w r0, r0, #16711680 ; 0xff0000 +1003bfb2: 0709 lsls r1, r1, #28 +1003bfb4: ea4f 4108 mov.w r1, r8, lsl #16 +1003bfb8: ea41 210c orr.w r1, r1, ip, lsl #8 +1003bfbc: ea41 0107 orr.w r1, r1, r7 +1003bfc0: ea41 6104 orr.w r1, r1, r4, lsl #24 +1003bfc4: bf48 it mi +1003bfc6: f040 407f orrmi.w r0, r0, #4278190080 ; 0xff000000 +1003bfca: 404a eors r2, r1 +1003bfcc: 4210 tst r0, r2 +1003bfce: d108 bne.n 1003bfe2 +1003bfd0: 4218 tst r0, r3 +1003bfd2: bf14 ite ne +1003bfd4: 2000 movne r0, #0 +1003bfd6: 2001 moveq r0, #1 +1003bfd8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1003bfdc: 2001 movs r0, #1 +1003bfde: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1003bfe2: 2000 movs r0, #0 +1003bfe4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1003bfe8 : +1003bfe8: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1003bfec: 4d1b ldr r5, [pc, #108] ; (1003c05c ) +1003bfee: 2700 movs r7, #0 +1003bff0: 4681 mov r9, r0 +1003bff2: f505 6ab9 add.w sl, r5, #1480 ; 0x5c8 +1003bff6: 46b8 mov r8, r7 +1003bff8: 463e mov r6, r7 +1003bffa: 2401 movs r4, #1 +1003bffc: 4555 cmp r5, sl +1003bffe: d02a beq.n 1003c056 +1003c000: f855 1c04 ldr.w r1, [r5, #-4] +1003c004: 682b ldr r3, [r5, #0] +1003c006: f011 4f40 tst.w r1, #3221225472 ; 0xc0000000 +1003c00a: d013 beq.n 1003c034 +1003c00c: 2900 cmp r1, #0 +1003c00e: da08 bge.n 1003c022 +1003c010: f3c1 7201 ubfx r2, r1, #28, #2 +1003c014: 2a03 cmp r2, #3 +1003c016: d013 beq.n 1003c040 +1003c018: 2a02 cmp r2, #2 +1003c01a: d114 bne.n 1003c046 +1003c01c: f086 0401 eor.w r4, r6, #1 +1003c020: e017 b.n 1003c052 +1003c022: b99e cbnz r6, 1003c04c +1003c024: 4648 mov r0, r9 +1003c026: 4641 mov r1, r8 +1003c028: 463a mov r2, r7 +1003c02a: f7ff ff61 bl 1003bef0 +1003c02e: b178 cbz r0, 1003c050 +1003c030: 2601 movs r6, #1 +1003c032: e00d b.n 1003c050 +1003c034: b16c cbz r4, 1003c052 +1003c036: 4648 mov r0, r9 +1003c038: 461a mov r2, r3 +1003c03a: f7fc fe35 bl 10038ca8 +1003c03e: e000 b.n 1003c042 +1003c040: 2600 movs r6, #0 +1003c042: 2401 movs r4, #1 +1003c044: e005 b.n 1003c052 +1003c046: 461f mov r7, r3 +1003c048: 4688 mov r8, r1 +1003c04a: e002 b.n 1003c052 +1003c04c: 2400 movs r4, #0 +1003c04e: e000 b.n 1003c052 +1003c050: 4634 mov r4, r6 +1003c052: 3508 adds r5, #8 +1003c054: e7d2 b.n 1003bffc +1003c056: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1003c05a: bf00 nop +1003c05c: 10045ef4 .word 0x10045ef4 + +1003c060 : +1003c060: b510 push {r4, lr} +1003c062: f600 210f addw r1, r0, #2575 ; 0xa0f +1003c066: 4604 mov r4, r0 +1003c068: 4a0d ldr r2, [pc, #52] ; (1003c0a0 ) +1003c06a: 231e movs r3, #30 +1003c06c: f7fe f888 bl 1003a180 +1003c070: 4620 mov r0, r4 +1003c072: f604 212d addw r1, r4, #2605 ; 0xa2d +1003c076: 4a0b ldr r2, [pc, #44] ; (1003c0a4 ) +1003c078: 231e movs r3, #30 +1003c07a: f7fe f881 bl 1003a180 +1003c07e: 4620 mov r0, r4 +1003c080: f604 11d3 addw r1, r4, #2515 ; 0x9d3 +1003c084: 4a08 ldr r2, [pc, #32] ; (1003c0a8 ) +1003c086: 231e movs r3, #30 +1003c088: f7fe f87a bl 1003a180 +1003c08c: 4620 mov r0, r4 +1003c08e: f604 11f1 addw r1, r4, #2545 ; 0x9f1 +1003c092: 4a06 ldr r2, [pc, #24] ; (1003c0ac ) +1003c094: 231e movs r3, #30 +1003c096: e8bd 4010 ldmia.w sp!, {r4, lr} +1003c09a: f7fe b871 b.w 1003a180 +1003c09e: bf00 nop +1003c0a0: 10045dfc .word 0x10045dfc +1003c0a4: 10045eb2 .word 0x10045eb2 +1003c0a8: 100464f6 .word 0x100464f6 +1003c0ac: 10045e38 .word 0x10045e38 + +1003c0b0 : +1003c0b0: b510 push {r4, lr} +1003c0b2: f600 210f addw r1, r0, #2575 ; 0xa0f +1003c0b6: 4604 mov r4, r0 +1003c0b8: 4a0d ldr r2, [pc, #52] ; (1003c0f0 ) +1003c0ba: 231e movs r3, #30 +1003c0bc: f7fe f860 bl 1003a180 +1003c0c0: 4620 mov r0, r4 +1003c0c2: f604 212d addw r1, r4, #2605 ; 0xa2d +1003c0c6: 4a0b ldr r2, [pc, #44] ; (1003c0f4 ) +1003c0c8: 231e movs r3, #30 +1003c0ca: f7fe f859 bl 1003a180 +1003c0ce: 4620 mov r0, r4 +1003c0d0: f604 11d3 addw r1, r4, #2515 ; 0x9d3 +1003c0d4: 4a08 ldr r2, [pc, #32] ; (1003c0f8 ) +1003c0d6: 231e movs r3, #30 +1003c0d8: f7fe f852 bl 1003a180 +1003c0dc: 4620 mov r0, r4 +1003c0de: f604 11f1 addw r1, r4, #2545 ; 0x9f1 +1003c0e2: 4a06 ldr r2, [pc, #24] ; (1003c0fc ) +1003c0e4: 231e movs r3, #30 +1003c0e6: e8bd 4010 ldmia.w sp!, {r4, lr} +1003c0ea: f7fe b849 b.w 1003a180 +1003c0ee: bf00 nop +1003c0f0: 10045ed0 .word 0x10045ed0 +1003c0f4: 10045e94 .word 0x10045e94 +1003c0f8: 10045e56 .word 0x10045e56 +1003c0fc: 10045e1a .word 0x10045e1a + +1003c100 : +1003c100: b510 push {r4, lr} +1003c102: f600 210f addw r1, r0, #2575 ; 0xa0f +1003c106: 4604 mov r4, r0 +1003c108: 4a0d ldr r2, [pc, #52] ; (1003c140 ) +1003c10a: 231e movs r3, #30 +1003c10c: f7fe f838 bl 1003a180 +1003c110: 4620 mov r0, r4 +1003c112: f604 212d addw r1, r4, #2605 ; 0xa2d +1003c116: 4a0b ldr r2, [pc, #44] ; (1003c144 ) +1003c118: 231e movs r3, #30 +1003c11a: f7fe f831 bl 1003a180 +1003c11e: 4620 mov r0, r4 +1003c120: f604 11d3 addw r1, r4, #2515 ; 0x9d3 +1003c124: 4a08 ldr r2, [pc, #32] ; (1003c148 ) +1003c126: 231e movs r3, #30 +1003c128: f7fe f82a bl 1003a180 +1003c12c: 4620 mov r0, r4 +1003c12e: f604 11f1 addw r1, r4, #2545 ; 0x9f1 +1003c132: 4a06 ldr r2, [pc, #24] ; (1003c14c ) +1003c134: 231e movs r3, #30 +1003c136: e8bd 4010 ldmia.w sp!, {r4, lr} +1003c13a: f7fe b821 b.w 1003a180 +1003c13e: bf00 nop +1003c140: 100464d6 .word 0x100464d6 +1003c144: 10045e74 .word 0x10045e74 +1003c148: 10045ddc .word 0x10045ddc +1003c14c: 10045dbc .word 0x10045dbc + +1003c150 : +1003c150: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} +1003c152: 4c0c ldr r4, [pc, #48] ; (1003c184 ) +1003c154: 4606 mov r6, r0 +1003c156: f504 6593 add.w r5, r4, #1176 ; 0x498 +1003c15a: 78a0 ldrb r0, [r4, #2] +1003c15c: f814 1c01 ldrb.w r1, [r4, #-1] +1003c160: 9000 str r0, [sp, #0] +1003c162: 78e0 ldrb r0, [r4, #3] +1003c164: 7822 ldrb r2, [r4, #0] +1003c166: 9001 str r0, [sp, #4] +1003c168: 7920 ldrb r0, [r4, #4] +1003c16a: 7863 ldrb r3, [r4, #1] +1003c16c: 9002 str r0, [sp, #8] +1003c16e: 7960 ldrb r0, [r4, #5] +1003c170: 3407 adds r4, #7 +1003c172: 9003 str r0, [sp, #12] +1003c174: 4630 mov r0, r6 +1003c176: f7fc fde4 bl 10038d42 +1003c17a: 42ac cmp r4, r5 +1003c17c: d1ed bne.n 1003c15a +1003c17e: b004 add sp, #16 +1003c180: bd70 pop {r4, r5, r6, pc} +1003c182: bf00 nop +1003c184: 10044032 .word 0x10044032 + +1003c188 : +1003c188: b510 push {r4, lr} +1003c18a: f600 214b addw r1, r0, #2635 ; 0xa4b +1003c18e: 4604 mov r4, r0 +1003c190: 4a06 ldr r2, [pc, #24] ; (1003c1ac ) +1003c192: 231e movs r3, #30 +1003c194: f7fd fff4 bl 1003a180 +1003c198: 4620 mov r0, r4 +1003c19a: f604 2169 addw r1, r4, #2665 ; 0xa69 +1003c19e: 4a04 ldr r2, [pc, #16] ; (1003c1b0 ) +1003c1a0: 231e movs r3, #30 +1003c1a2: e8bd 4010 ldmia.w sp!, {r4, lr} +1003c1a6: f7fd bfeb b.w 1003a180 +1003c1aa: bf00 nop +1003c1ac: 100464b8 .word 0x100464b8 +1003c1b0: 1004e07c .word 0x1004e07c + +1003c1b4 : +1003c1b4: f8d0 30b0 ldr.w r3, [r0, #176] ; 0xb0 +1003c1b8: 881b ldrh r3, [r3, #0] +1003c1ba: 2b02 cmp r3, #2 +1003c1bc: d005 beq.n 1003c1ca +1003c1be: 2b04 cmp r3, #4 +1003c1c0: d003 beq.n 1003c1ca +1003c1c2: 2b0b cmp r3, #11 +1003c1c4: d001 beq.n 1003c1ca +1003c1c6: 2b16 cmp r3, #22 +1003c1c8: d105 bne.n 1003c1d6 +1003c1ca: f600 13d3 addw r3, r0, #2515 ; 0x9d3 +1003c1ce: 600b str r3, [r1, #0] +1003c1d0: f600 10f1 addw r0, r0, #2545 ; 0x9f1 +1003c1d4: e004 b.n 1003c1e0 +1003c1d6: f600 230f addw r3, r0, #2575 ; 0xa0f +1003c1da: 600b str r3, [r1, #0] +1003c1dc: f600 202d addw r0, r0, #2605 ; 0xa2d +1003c1e0: 6010 str r0, [r2, #0] +1003c1e2: 4770 bx lr + +1003c1e4 : +1003c1e4: f600 234b addw r3, r0, #2635 ; 0xa4b +1003c1e8: f600 2069 addw r0, r0, #2665 ; 0xa69 +1003c1ec: 600b str r3, [r1, #0] +1003c1ee: 6010 str r0, [r2, #0] +1003c1f0: 4770 bx lr + ... + +1003c1f4 : +1003c1f4: 4b06 ldr r3, [pc, #24] ; (1003c210 ) +1003c1f6: 7919 ldrb r1, [r3, #4] +1003c1f8: f890 37ca ldrb.w r3, [r0, #1994] ; 0x7ca +1003c1fc: f001 013f and.w r1, r1, #63 ; 0x3f +1003c200: 4419 add r1, r3 +1003c202: b249 sxtb r1, r1 +1003c204: f381 0106 usat r1, #6, r1 +1003c208: b2c9 uxtb r1, r1 +1003c20a: f002 bb21 b.w 1003e850 <__ROM_odm_SetCrystalCap_veneer> +1003c20e: bf00 nop +1003c210: 10000738 .word 0x10000738 + +1003c214 : +1003c214: b5f8 push {r3, r4, r5, r6, r7, lr} +1003c216: f890 249e ldrb.w r2, [r0, #1182] ; 0x49e +1003c21a: f241 63c8 movw r3, #5832 ; 0x16c8 +1003c21e: 58c3 ldr r3, [r0, r3] +1003c220: f1a2 0122 sub.w r1, r2, #34 ; 0x22 +1003c224: 2901 cmp r1, #1 +1003c226: f503 7400 add.w r4, r3, #512 ; 0x200 +1003c22a: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 +1003c22e: d903 bls.n 1003c238 +1003c230: 2a2a cmp r2, #42 ; 0x2a +1003c232: d001 beq.n 1003c238 +1003c234: 2a58 cmp r2, #88 ; 0x58 +1003c236: d14b bne.n 1003c2d0 +1003c238: f1a3 020c sub.w r2, r3, #12 +1003c23c: 2a01 cmp r2, #1 +1003c23e: d801 bhi.n 1003c244 +1003c240: 4b25 ldr r3, [pc, #148] ; (1003c2d8 ) +1003c242: e002 b.n 1003c24a +1003c244: 2b0e cmp r3, #14 +1003c246: d141 bne.n 1003c2cc +1003c248: 4b24 ldr r3, [pc, #144] ; (1003c2dc ) +1003c24a: 7859 ldrb r1, [r3, #1] +1003c24c: 781a ldrb r2, [r3, #0] +1003c24e: 795f ldrb r7, [r3, #5] +1003c250: eb02 2201 add.w r2, r2, r1, lsl #8 +1003c254: 7899 ldrb r1, [r3, #2] +1003c256: 7a5e ldrb r6, [r3, #9] +1003c258: eb02 4201 add.w r2, r2, r1, lsl #16 +1003c25c: 78d9 ldrb r1, [r3, #3] +1003c25e: 7b5d ldrb r5, [r3, #13] +1003c260: eb02 6201 add.w r2, r2, r1, lsl #24 +1003c264: 7919 ldrb r1, [r3, #4] +1003c266: 4620 mov r0, r4 +1003c268: eb01 2707 add.w r7, r1, r7, lsl #8 +1003c26c: 7999 ldrb r1, [r3, #6] +1003c26e: eb07 4701 add.w r7, r7, r1, lsl #16 +1003c272: 79d9 ldrb r1, [r3, #7] +1003c274: eb07 6701 add.w r7, r7, r1, lsl #24 +1003c278: 7a19 ldrb r1, [r3, #8] +1003c27a: eb01 2606 add.w r6, r1, r6, lsl #8 +1003c27e: 7a99 ldrb r1, [r3, #10] +1003c280: eb06 4601 add.w r6, r6, r1, lsl #16 +1003c284: 7ad9 ldrb r1, [r3, #11] +1003c286: eb06 6601 add.w r6, r6, r1, lsl #24 +1003c28a: 7b19 ldrb r1, [r3, #12] +1003c28c: eb01 2505 add.w r5, r1, r5, lsl #8 +1003c290: 7b99 ldrb r1, [r3, #14] +1003c292: 7bdb ldrb r3, [r3, #15] +1003c294: eb05 4501 add.w r5, r5, r1, lsl #16 +1003c298: f640 2122 movw r1, #2594 ; 0xa22 +1003c29c: eb05 6503 add.w r5, r5, r3, lsl #24 +1003c2a0: f7fd ff5c bl 1003a15c +1003c2a4: 4620 mov r0, r4 +1003c2a6: 463a mov r2, r7 +1003c2a8: f640 2126 movw r1, #2598 ; 0xa26 +1003c2ac: f7fd ff56 bl 1003a15c +1003c2b0: 4620 mov r0, r4 +1003c2b2: 4632 mov r2, r6 +1003c2b4: f640 219a movw r1, #2714 ; 0xa9a +1003c2b8: f7fd ff50 bl 1003a15c +1003c2bc: 4620 mov r0, r4 +1003c2be: 462a mov r2, r5 +1003c2c0: f44f 612a mov.w r1, #2720 ; 0xaa0 +1003c2c4: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +1003c2c8: f7fd bf48 b.w 1003a15c +1003c2cc: 4b04 ldr r3, [pc, #16] ; (1003c2e0 ) +1003c2ce: e7bc b.n 1003c24a +1003c2d0: 2b0e cmp r3, #14 +1003c2d2: d1b5 bne.n 1003c240 +1003c2d4: e7b8 b.n 1003c248 +1003c2d6: bf00 nop +1003c2d8: 10043f58 .word 0x10043f58 +1003c2dc: 10043e8a .word 0x10043e8a +1003c2e0: 10043e9a .word 0x10043e9a + +1003c2e4 : +1003c2e4: 6803 ldr r3, [r0, #0] +1003c2e6: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} +1003c2ea: 4614 mov r4, r2 +1003c2ec: f241 62c8 movw r2, #5832 ; 0x16c8 +1003c2f0: 589e ldr r6, [r3, r2] +1003c2f2: f8d0 30b0 ldr.w r3, [r0, #176] ; 0xb0 +1003c2f6: 4680 mov r8, r0 +1003c2f8: 881b ldrh r3, [r3, #0] +1003c2fa: 460d mov r5, r1 +1003c2fc: b92b cbnz r3, 1003c30a +1003c2fe: f890 00ec ldrb.w r0, [r0, #236] ; 0xec +1003c302: 28ff cmp r0, #255 ; 0xff +1003c304: d001 beq.n 1003c30a +1003c306: f7f5 f99f bl 10031648 +1003c30a: 2d01 cmp r5, #1 +1003c30c: d17a bne.n 1003c404 +1003c30e: eb08 0304 add.w r3, r8, r4 +1003c312: f893 2bf2 ldrb.w r2, [r3, #3058] ; 0xbf2 +1003c316: f8d8 7000 ldr.w r7, [r8] +1003c31a: f883 2bf4 strb.w r2, [r3, #3060] ; 0xbf4 +1003c31e: f893 2bf3 ldrb.w r2, [r3, #3059] ; 0xbf3 +1003c322: f883 2bf5 strb.w r2, [r3, #3061] ; 0xbf5 +1003c326: f888 5bf7 strb.w r5, [r8, #3063] ; 0xbf7 +1003c32a: f888 5bf9 strb.w r5, [r8, #3065] ; 0xbf9 +1003c32e: 2c00 cmp r4, #0 +1003c330: d162 bne.n 1003c3f8 +1003c332: 4621 mov r1, r4 +1003c334: 4623 mov r3, r4 +1003c336: 4638 mov r0, r7 +1003c338: f896 2034 ldrb.w r2, [r6, #52] ; 0x34 +1003c33c: f7f5 fe60 bl 10032000 +1003c340: 4621 mov r1, r4 +1003c342: 462b mov r3, r5 +1003c344: 4638 mov r0, r7 +1003c346: f896 2034 ldrb.w r2, [r6, #52] ; 0x34 +1003c34a: f7f5 fe59 bl 10032000 +1003c34e: 4621 mov r1, r4 +1003c350: f896 2034 ldrb.w r2, [r6, #52] ; 0x34 +1003c354: 2302 movs r3, #2 +1003c356: 4638 mov r0, r7 +1003c358: f7f5 fe52 bl 10032000 +1003c35c: 4b2b ldr r3, [pc, #172] ; (1003c40c ) +1003c35e: f04f 7280 mov.w r2, #16777216 ; 0x1000000 +1003c362: e9d3 4502 ldrd r4, r5, [r3, #8] +1003c366: 2300 movs r3, #0 +1003c368: 4022 ands r2, r4 +1003c36a: 402b ands r3, r5 +1003c36c: ea52 0103 orrs.w r1, r2, r3 +1003c370: d042 beq.n 1003c3f8 +1003c372: 4c27 ldr r4, [pc, #156] ; (1003c410 ) +1003c374: 6823 ldr r3, [r4, #0] +1003c376: b18b cbz r3, 1003c39c +1003c378: f896 1034 ldrb.w r1, [r6, #52] ; 0x34 +1003c37c: f996 0076 ldrsb.w r0, [r6, #118] ; 0x76 +1003c380: 1e4b subs r3, r1, #1 +1003c382: 4433 add r3, r6 +1003c384: f893 205a ldrb.w r2, [r3, #90] ; 0x5a +1003c388: f893 3068 ldrb.w r3, [r3, #104] ; 0x68 +1003c38c: 9000 str r0, [sp, #0] +1003c38e: f996 0077 ldrsb.w r0, [r6, #119] ; 0x77 +1003c392: 9001 str r0, [sp, #4] +1003c394: 481f ldr r0, [pc, #124] ; (1003c414 ) +1003c396: 6bc0 ldr r0, [r0, #60] ; 0x3c +1003c398: f7de fbf2 bl 1001ab80 +1003c39c: 6823 ldr r3, [r4, #0] +1003c39e: b12b cbz r3, 1003c3ac +1003c3a0: 4b1c ldr r3, [pc, #112] ; (1003c414 ) +1003c3a2: f998 1bf5 ldrsb.w r1, [r8, #3061] ; 0xbf5 +1003c3a6: 6c18 ldr r0, [r3, #64] ; 0x40 +1003c3a8: f7de fbea bl 1001ab80 +1003c3ac: 6823 ldr r3, [r4, #0] +1003c3ae: b12b cbz r3, 1003c3bc +1003c3b0: 4b18 ldr r3, [pc, #96] ; (1003c414 ) +1003c3b2: f998 1bf4 ldrsb.w r1, [r8, #3060] ; 0xbf4 +1003c3b6: 6c58 ldr r0, [r3, #68] ; 0x44 +1003c3b8: f7de fbe2 bl 1001ab80 +1003c3bc: 6823 ldr r3, [r4, #0] +1003c3be: b163 cbz r3, 1003c3da +1003c3c0: 4b14 ldr r3, [pc, #80] ; (1003c414 ) +1003c3c2: f640 016c movw r1, #2156 ; 0x86c +1003c3c6: 4638 mov r0, r7 +1003c3c8: f04f 32ff mov.w r2, #4294967295 +1003c3cc: 6c9d ldr r5, [r3, #72] ; 0x48 +1003c3ce: f7f2 fbf5 bl 1002ebbc +1003c3d2: 4601 mov r1, r0 +1003c3d4: 4628 mov r0, r5 +1003c3d6: f7de fbd3 bl 1001ab80 +1003c3da: 6823 ldr r3, [r4, #0] +1003c3dc: b163 cbz r3, 1003c3f8 +1003c3de: 4b0d ldr r3, [pc, #52] ; (1003c414 ) +1003c3e0: f640 6114 movw r1, #3604 ; 0xe14 +1003c3e4: 4638 mov r0, r7 +1003c3e6: f04f 32ff mov.w r2, #4294967295 +1003c3ea: 6cdc ldr r4, [r3, #76] ; 0x4c +1003c3ec: f7f2 fbe6 bl 1002ebbc +1003c3f0: 4601 mov r1, r0 +1003c3f2: 4620 mov r0, r4 +1003c3f4: f7de fbc4 bl 1001ab80 +1003c3f8: 4638 mov r0, r7 +1003c3fa: b002 add sp, #8 +1003c3fc: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} +1003c400: f7ff bf08 b.w 1003c214 +1003c404: b002 add sp, #8 +1003c406: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1003c40a: bf00 nop +1003c40c: 10000720 .word 0x10000720 +1003c410: 10044f38 .word 0x10044f38 +1003c414: 10043ac4 .word 0x10043ac4 + +1003c418 : +1003c418: 2321 movs r3, #33 ; 0x21 +1003c41a: 7003 strb r3, [r0, #0] +1003c41c: 232b movs r3, #43 ; 0x2b +1003c41e: 7043 strb r3, [r0, #1] +1003c420: 2308 movs r3, #8 +1003c422: 7083 strb r3, [r0, #2] +1003c424: 2304 movs r3, #4 +1003c426: 70c3 strb r3, [r0, #3] +1003c428: 2301 movs r3, #1 +1003c42a: 7103 strb r3, [r0, #4] +1003c42c: 2342 movs r3, #66 ; 0x42 +1003c42e: 6083 str r3, [r0, #8] +1003c430: 4b06 ldr r3, [pc, #24] ; (1003c44c ) +1003c432: 60c3 str r3, [r0, #12] +1003c434: 4b06 ldr r3, [pc, #24] ; (1003c450 ) +1003c436: 6103 str r3, [r0, #16] +1003c438: 4b06 ldr r3, [pc, #24] ; (1003c454 ) +1003c43a: 6143 str r3, [r0, #20] +1003c43c: 4b06 ldr r3, [pc, #24] ; (1003c458 ) +1003c43e: 6183 str r3, [r0, #24] +1003c440: 4b06 ldr r3, [pc, #24] ; (1003c45c ) +1003c442: 61c3 str r3, [r0, #28] +1003c444: 4b06 ldr r3, [pc, #24] ; (1003c460 ) +1003c446: 6203 str r3, [r0, #32] +1003c448: 4770 bx lr +1003c44a: bf00 nop +1003c44c: 1003c2e5 .word 0x1003c2e5 +1003c450: 1003d69d .word 0x1003d69d +1003c454: 1003d375 .word 0x1003d375 +1003c458: 1003c1b5 .word 0x1003c1b5 +1003c45c: 1003c1e5 .word 0x1003c1e5 +1003c460: 1003c1f5 .word 0x1003c1f5 + +1003c464 : +1003c464: f241 63c8 movw r3, #5832 ; 0x16c8 +1003c468: b573 push {r0, r1, r4, r5, r6, lr} +1003c46a: 58c5 ldr r5, [r0, r3] +1003c46c: f640 6128 movw r1, #3624 ; 0xe28 +1003c470: f505 7400 add.w r4, r5, #512 ; 0x200 +1003c474: 4620 mov r0, r4 +1003c476: f06f 02ff mvn.w r2, #255 ; 0xff +1003c47a: 2300 movs r3, #0 +1003c47c: f7fd fe74 bl 1003a168 +1003c480: 2301 movs r3, #1 +1003c482: 9300 str r3, [sp, #0] +1003c484: 4620 mov r0, r4 +1003c486: 2100 movs r1, #0 +1003c488: 22ef movs r2, #239 ; 0xef +1003c48a: f44f 2300 mov.w r3, #524288 ; 0x80000 +1003c48e: f7fd fe71 bl 1003a174 +1003c492: f44f 3300 mov.w r3, #131072 ; 0x20000 +1003c496: 9300 str r3, [sp, #0] +1003c498: 4620 mov r0, r4 +1003c49a: 2100 movs r1, #0 +1003c49c: 2230 movs r2, #48 ; 0x30 +1003c49e: 4b56 ldr r3, [pc, #344] ; (1003c5f8 ) +1003c4a0: f7fd fe68 bl 1003a174 +1003c4a4: 230f movs r3, #15 +1003c4a6: 9300 str r3, [sp, #0] +1003c4a8: 4620 mov r0, r4 +1003c4aa: 2100 movs r1, #0 +1003c4ac: 2231 movs r2, #49 ; 0x31 +1003c4ae: 4b52 ldr r3, [pc, #328] ; (1003c5f8 ) +1003c4b0: f7fd fe60 bl 1003a174 +1003c4b4: f647 73f7 movw r3, #32759 ; 0x7ff7 +1003c4b8: 9300 str r3, [sp, #0] +1003c4ba: 4620 mov r0, r4 +1003c4bc: 2100 movs r1, #0 +1003c4be: 2232 movs r2, #50 ; 0x32 +1003c4c0: 4b4d ldr r3, [pc, #308] ; (1003c5f8 ) +1003c4c2: f7fd fe57 bl 1003a174 +1003c4c6: f44f 6318 mov.w r3, #2432 ; 0x980 +1003c4ca: 9300 str r3, [sp, #0] +1003c4cc: 4620 mov r0, r4 +1003c4ce: 2100 movs r1, #0 +1003c4d0: 22df movs r2, #223 ; 0xdf +1003c4d2: 4b49 ldr r3, [pc, #292] ; (1003c5f8 ) +1003c4d4: f7fd fe4e bl 1003a174 +1003c4d8: 4b48 ldr r3, [pc, #288] ; (1003c5fc ) +1003c4da: 4620 mov r0, r4 +1003c4dc: 9300 str r3, [sp, #0] +1003c4de: 2100 movs r1, #0 +1003c4e0: 2256 movs r2, #86 ; 0x56 +1003c4e2: 4b45 ldr r3, [pc, #276] ; (1003c5f8 ) +1003c4e4: f7fd fe46 bl 1003a174 +1003c4e8: 4620 mov r0, r4 +1003c4ea: f640 6128 movw r1, #3624 ; 0xe28 +1003c4ee: f06f 02ff mvn.w r2, #255 ; 0xff +1003c4f2: 4b43 ldr r3, [pc, #268] ; (1003c600 ) +1003c4f4: f7fd fe38 bl 1003a168 +1003c4f8: 4620 mov r0, r4 +1003c4fa: f44f 6163 mov.w r1, #3632 ; 0xe30 +1003c4fe: f04f 32ff mov.w r2, #4294967295 +1003c502: 4b40 ldr r3, [pc, #256] ; (1003c604 ) +1003c504: f7fd fe30 bl 1003a168 +1003c508: 4620 mov r0, r4 +1003c50a: f640 6134 movw r1, #3636 ; 0xe34 +1003c50e: f04f 32ff mov.w r2, #4294967295 +1003c512: 4b3d ldr r3, [pc, #244] ; (1003c608 ) +1003c514: f7fd fe28 bl 1003a168 +1003c518: 4620 mov r0, r4 +1003c51a: f640 6138 movw r1, #3640 ; 0xe38 +1003c51e: f04f 32ff mov.w r2, #4294967295 +1003c522: 4b3a ldr r3, [pc, #232] ; (1003c60c ) +1003c524: f7fd fe20 bl 1003a168 +1003c528: 4620 mov r0, r4 +1003c52a: f640 613c movw r1, #3644 ; 0xe3c +1003c52e: f04f 32ff mov.w r2, #4294967295 +1003c532: 4b37 ldr r3, [pc, #220] ; (1003c610 ) +1003c534: f7fd fe18 bl 1003a168 +1003c538: 4620 mov r0, r4 +1003c53a: f640 614c movw r1, #3660 ; 0xe4c +1003c53e: f04f 32ff mov.w r2, #4294967295 +1003c542: 4b34 ldr r3, [pc, #208] ; (1003c614 ) +1003c544: f7fd fe10 bl 1003a168 +1003c548: 4620 mov r0, r4 +1003c54a: f640 6148 movw r1, #3656 ; 0xe48 +1003c54e: f04f 32ff mov.w r2, #4294967295 +1003c552: f04f 4379 mov.w r3, #4177526784 ; 0xf9000000 +1003c556: f7fd fe07 bl 1003a168 +1003c55a: f640 6148 movw r1, #3656 ; 0xe48 +1003c55e: f04f 32ff mov.w r2, #4294967295 +1003c562: f04f 4378 mov.w r3, #4160749568 ; 0xf8000000 +1003c566: 4620 mov r0, r4 +1003c568: f7fd fdfe bl 1003a168 +1003c56c: 200a movs r0, #10 +1003c56e: f7fd fe0c bl 1003a18a +1003c572: 4620 mov r0, r4 +1003c574: f640 6128 movw r1, #3624 ; 0xe28 +1003c578: f06f 02ff mvn.w r2, #255 ; 0xff +1003c57c: 2300 movs r3, #0 +1003c57e: f7fd fdf3 bl 1003a168 +1003c582: f44f 73c0 mov.w r3, #384 ; 0x180 +1003c586: 9300 str r3, [sp, #0] +1003c588: 4620 mov r0, r4 +1003c58a: 2100 movs r1, #0 +1003c58c: 22df movs r2, #223 ; 0xdf +1003c58e: 4b1a ldr r3, [pc, #104] ; (1003c5f8 ) +1003c590: f7fd fdf0 bl 1003a174 +1003c594: 4b18 ldr r3, [pc, #96] ; (1003c5f8 ) +1003c596: 2100 movs r1, #0 +1003c598: 2208 movs r2, #8 +1003c59a: 4620 mov r0, r4 +1003c59c: f7fd fded bl 1003a17a +1003c5a0: f640 61ac movw r1, #3756 ; 0xeac +1003c5a4: f8c5 0da8 str.w r0, [r5, #3496] ; 0xda8 +1003c5a8: f04f 32ff mov.w r2, #4294967295 +1003c5ac: 4620 mov r0, r4 +1003c5ae: f7fd fdde bl 1003a16e +1003c5b2: f640 6194 movw r1, #3732 ; 0xe94 +1003c5b6: 4605 mov r5, r0 +1003c5b8: f04f 32ff mov.w r2, #4294967295 +1003c5bc: 4620 mov r0, r4 +1003c5be: f7fd fdd6 bl 1003a16e +1003c5c2: f640 619c movw r1, #3740 ; 0xe9c +1003c5c6: 4606 mov r6, r0 +1003c5c8: f04f 32ff mov.w r2, #4294967295 +1003c5cc: 4620 mov r0, r4 +1003c5ce: f7fd fdce bl 1003a16e +1003c5d2: f015 5580 ands.w r5, r5, #268435456 ; 0x10000000 +1003c5d6: d10a bne.n 1003c5ee +1003c5d8: f3c6 4609 ubfx r6, r6, #16, #10 +1003c5dc: f5b6 7fa1 cmp.w r6, #322 ; 0x142 +1003c5e0: d007 beq.n 1003c5f2 +1003c5e2: f3c0 4009 ubfx r0, r0, #16, #10 +1003c5e6: 3842 subs r0, #66 ; 0x42 +1003c5e8: bf18 it ne +1003c5ea: 2001 movne r0, #1 +1003c5ec: e002 b.n 1003c5f4 +1003c5ee: 2000 movs r0, #0 +1003c5f0: e000 b.n 1003c5f4 +1003c5f2: 4628 mov r0, r5 +1003c5f4: b002 add sp, #8 +1003c5f6: bd70 pop {r4, r5, r6, pc} +1003c5f8: 000fffff .word 0x000fffff +1003c5fc: 0005102a .word 0x0005102a +1003c600: 00808000 .word 0x00808000 +1003c604: 18008c1c .word 0x18008c1c +1003c608: 38008c1c .word 0x38008c1c +1003c60c: 821403ff .word 0x821403ff +1003c610: 28160000 .word 0x28160000 +1003c614: 00462911 .word 0x00462911 + +1003c618 : +1003c618: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1003c61c: f241 63c8 movw r3, #5832 ; 0x16c8 +1003c620: 58c7 ldr r7, [r0, r3] +1003c622: b085 sub sp, #20 +1003c624: f507 7400 add.w r4, r7, #512 ; 0x200 +1003c628: 4620 mov r0, r4 +1003c62a: f640 6128 movw r1, #3624 ; 0xe28 +1003c62e: f06f 02ff mvn.w r2, #255 ; 0xff +1003c632: 2300 movs r3, #0 +1003c634: 2601 movs r6, #1 +1003c636: f7fd fd97 bl 1003a168 +1003c63a: f44f 3b40 mov.w fp, #196608 ; 0x30000 +1003c63e: 4620 mov r0, r4 +1003c640: 2100 movs r1, #0 +1003c642: 22ef movs r2, #239 ; 0xef +1003c644: f44f 2300 mov.w r3, #524288 ; 0x80000 +1003c648: 9600 str r6, [sp, #0] +1003c64a: f7fd fd93 bl 1003a174 +1003c64e: f04f 0a0f mov.w sl, #15 +1003c652: 4620 mov r0, r4 +1003c654: 2100 movs r1, #0 +1003c656: 2230 movs r2, #48 ; 0x30 +1003c658: 4bc4 ldr r3, [pc, #784] ; (1003c96c ) +1003c65a: f8cd b000 str.w fp, [sp] +1003c65e: f7fd fd89 bl 1003a174 +1003c662: 4620 mov r0, r4 +1003c664: 2100 movs r1, #0 +1003c666: 2231 movs r2, #49 ; 0x31 +1003c668: 4bc0 ldr r3, [pc, #768] ; (1003c96c ) +1003c66a: f8cd a000 str.w sl, [sp] +1003c66e: f7fd fd81 bl 1003a174 +1003c672: 4bbf ldr r3, [pc, #764] ; (1003c970 ) +1003c674: 4620 mov r0, r4 +1003c676: 9300 str r3, [sp, #0] +1003c678: 2100 movs r1, #0 +1003c67a: 2232 movs r2, #50 ; 0x32 +1003c67c: 4bbb ldr r3, [pc, #748] ; (1003c96c ) +1003c67e: f44f 6918 mov.w r9, #2432 ; 0x980 +1003c682: f7fd fd77 bl 1003a174 +1003c686: 4620 mov r0, r4 +1003c688: 2100 movs r1, #0 +1003c68a: 22df movs r2, #223 ; 0xdf +1003c68c: 4bb7 ldr r3, [pc, #732] ; (1003c96c ) +1003c68e: f8cd 9000 str.w r9, [sp] +1003c692: f7fd fd6f bl 1003a174 +1003c696: 4bb7 ldr r3, [pc, #732] ; (1003c974 ) +1003c698: 4620 mov r0, r4 +1003c69a: 9300 str r3, [sp, #0] +1003c69c: 2100 movs r1, #0 +1003c69e: 2256 movs r2, #86 ; 0x56 +1003c6a0: 4bb2 ldr r3, [pc, #712] ; (1003c96c ) +1003c6a2: f7fd fd67 bl 1003a174 +1003c6a6: 4620 mov r0, r4 +1003c6a8: f640 6128 movw r1, #3624 ; 0xe28 +1003c6ac: f06f 02ff mvn.w r2, #255 ; 0xff +1003c6b0: 4bb1 ldr r3, [pc, #708] ; (1003c978 ) +1003c6b2: f7fd fd59 bl 1003a168 +1003c6b6: 4620 mov r0, r4 +1003c6b8: f44f 6164 mov.w r1, #3648 ; 0xe40 +1003c6bc: f04f 32ff mov.w r2, #4294967295 +1003c6c0: 4bae ldr r3, [pc, #696] ; (1003c97c ) +1003c6c2: f7fd fd51 bl 1003a168 +1003c6c6: 4620 mov r0, r4 +1003c6c8: f640 6144 movw r1, #3652 ; 0xe44 +1003c6cc: f04f 32ff mov.w r2, #4294967295 +1003c6d0: 4bab ldr r3, [pc, #684] ; (1003c980 ) +1003c6d2: f7fd fd49 bl 1003a168 +1003c6d6: 4620 mov r0, r4 +1003c6d8: f44f 6163 mov.w r1, #3632 ; 0xe30 +1003c6dc: f04f 32ff mov.w r2, #4294967295 +1003c6e0: 4ba8 ldr r3, [pc, #672] ; (1003c984 ) +1003c6e2: f7fd fd41 bl 1003a168 +1003c6e6: 4620 mov r0, r4 +1003c6e8: f640 6134 movw r1, #3636 ; 0xe34 +1003c6ec: f04f 32ff mov.w r2, #4294967295 +1003c6f0: 4ba5 ldr r3, [pc, #660] ; (1003c988 ) +1003c6f2: f7fd fd39 bl 1003a168 +1003c6f6: 4620 mov r0, r4 +1003c6f8: f640 6138 movw r1, #3640 ; 0xe38 +1003c6fc: f04f 32ff mov.w r2, #4294967295 +1003c700: 4ba2 ldr r3, [pc, #648] ; (1003c98c ) +1003c702: f7fd fd31 bl 1003a168 +1003c706: 4620 mov r0, r4 +1003c708: f640 613c movw r1, #3644 ; 0xe3c +1003c70c: f04f 32ff mov.w r2, #4294967295 +1003c710: 4b9f ldr r3, [pc, #636] ; (1003c990 ) +1003c712: f7fd fd29 bl 1003a168 +1003c716: 4620 mov r0, r4 +1003c718: f640 614c movw r1, #3660 ; 0xe4c +1003c71c: f04f 32ff mov.w r2, #4294967295 +1003c720: 4b9c ldr r3, [pc, #624] ; (1003c994 ) +1003c722: f7fd fd21 bl 1003a168 +1003c726: 4620 mov r0, r4 +1003c728: f640 6148 movw r1, #3656 ; 0xe48 +1003c72c: f04f 32ff mov.w r2, #4294967295 +1003c730: f04f 4379 mov.w r3, #4177526784 ; 0xf9000000 +1003c734: f7fd fd18 bl 1003a168 +1003c738: f640 6148 movw r1, #3656 ; 0xe48 +1003c73c: f04f 32ff mov.w r2, #4294967295 +1003c740: f04f 4378 mov.w r3, #4160749568 ; 0xf8000000 +1003c744: 4620 mov r0, r4 +1003c746: f7fd fd0f bl 1003a168 +1003c74a: 200a movs r0, #10 +1003c74c: f7fd fd1d bl 1003a18a +1003c750: f44f 78c0 mov.w r8, #384 ; 0x180 +1003c754: 4620 mov r0, r4 +1003c756: f640 6128 movw r1, #3624 ; 0xe28 +1003c75a: f06f 02ff mvn.w r2, #255 ; 0xff +1003c75e: 2300 movs r3, #0 +1003c760: f7fd fd02 bl 1003a168 +1003c764: 4b81 ldr r3, [pc, #516] ; (1003c96c ) +1003c766: 4620 mov r0, r4 +1003c768: 2100 movs r1, #0 +1003c76a: 22df movs r2, #223 ; 0xdf +1003c76c: f8cd 8000 str.w r8, [sp] +1003c770: f7fd fd00 bl 1003a174 +1003c774: f640 61ac movw r1, #3756 ; 0xeac +1003c778: f04f 32ff mov.w r2, #4294967295 +1003c77c: 4620 mov r0, r4 +1003c77e: f7fd fcf6 bl 1003a16e +1003c782: f640 6194 movw r1, #3732 ; 0xe94 +1003c786: 4605 mov r5, r0 +1003c788: f04f 32ff mov.w r2, #4294967295 +1003c78c: 4620 mov r0, r4 +1003c78e: f7fd fcee bl 1003a16e +1003c792: f640 619c movw r1, #3740 ; 0xe9c +1003c796: 4684 mov ip, r0 +1003c798: f04f 32ff mov.w r2, #4294967295 +1003c79c: 4620 mov r0, r4 +1003c79e: f8cd c00c str.w ip, [sp, #12] +1003c7a2: f7fd fce4 bl 1003a16e +1003c7a6: f015 5580 ands.w r5, r5, #268435456 ; 0x10000000 +1003c7aa: f8dd c00c ldr.w ip, [sp, #12] +1003c7ae: f040 80d4 bne.w 1003c95a +1003c7b2: 4a79 ldr r2, [pc, #484] ; (1003c998 ) +1003c7b4: ea0c 0202 and.w r2, ip, r2 +1003c7b8: f1b2 7fa1 cmp.w r2, #21102592 ; 0x1420000 +1003c7bc: f000 80cf beq.w 1003c95e +1003c7c0: f3c0 4309 ubfx r3, r0, #16, #10 +1003c7c4: 2b42 cmp r3, #66 ; 0x42 +1003c7c6: f000 80ca beq.w 1003c95e +1003c7ca: f042 4e00 orr.w lr, r2, #2147483648 ; 0x80000000 +1003c7ce: f44e 4ef8 orr.w lr, lr, #31744 ; 0x7c00 +1003c7d2: ea4e 0303 orr.w r3, lr, r3 +1003c7d6: 4620 mov r0, r4 +1003c7d8: f44f 6164 mov.w r1, #3648 ; 0xe40 +1003c7dc: f04f 32ff mov.w r2, #4294967295 +1003c7e0: f7fd fcc2 bl 1003a168 +1003c7e4: 462b mov r3, r5 +1003c7e6: 4620 mov r0, r4 +1003c7e8: f640 6128 movw r1, #3624 ; 0xe28 +1003c7ec: f06f 02ff mvn.w r2, #255 ; 0xff +1003c7f0: f7fd fcba bl 1003a168 +1003c7f4: 4629 mov r1, r5 +1003c7f6: 4620 mov r0, r4 +1003c7f8: 22ef movs r2, #239 ; 0xef +1003c7fa: f44f 2300 mov.w r3, #524288 ; 0x80000 +1003c7fe: 9600 str r6, [sp, #0] +1003c800: f7fd fcb8 bl 1003a174 +1003c804: 4629 mov r1, r5 +1003c806: 4620 mov r0, r4 +1003c808: 2230 movs r2, #48 ; 0x30 +1003c80a: 4b58 ldr r3, [pc, #352] ; (1003c96c ) +1003c80c: f8cd b000 str.w fp, [sp] +1003c810: f7fd fcb0 bl 1003a174 +1003c814: 4629 mov r1, r5 +1003c816: 4620 mov r0, r4 +1003c818: 2231 movs r2, #49 ; 0x31 +1003c81a: 4b54 ldr r3, [pc, #336] ; (1003c96c ) +1003c81c: f8cd a000 str.w sl, [sp] +1003c820: f7fd fca8 bl 1003a174 +1003c824: 4b5d ldr r3, [pc, #372] ; (1003c99c ) +1003c826: 4629 mov r1, r5 +1003c828: 9300 str r3, [sp, #0] +1003c82a: 4620 mov r0, r4 +1003c82c: 2232 movs r2, #50 ; 0x32 +1003c82e: 4b4f ldr r3, [pc, #316] ; (1003c96c ) +1003c830: f7fd fca0 bl 1003a174 +1003c834: 4629 mov r1, r5 +1003c836: 4620 mov r0, r4 +1003c838: 22df movs r2, #223 ; 0xdf +1003c83a: 4b4c ldr r3, [pc, #304] ; (1003c96c ) +1003c83c: f8cd 9000 str.w r9, [sp] +1003c840: f7fd fc98 bl 1003a174 +1003c844: 4b4b ldr r3, [pc, #300] ; (1003c974 ) +1003c846: 4629 mov r1, r5 +1003c848: 9300 str r3, [sp, #0] +1003c84a: 4620 mov r0, r4 +1003c84c: 2256 movs r2, #86 ; 0x56 +1003c84e: 4b47 ldr r3, [pc, #284] ; (1003c96c ) +1003c850: f7fd fc90 bl 1003a174 +1003c854: 4620 mov r0, r4 +1003c856: f640 6128 movw r1, #3624 ; 0xe28 +1003c85a: f06f 02ff mvn.w r2, #255 ; 0xff +1003c85e: 4b46 ldr r3, [pc, #280] ; (1003c978 ) +1003c860: f7fd fc82 bl 1003a168 +1003c864: 4620 mov r0, r4 +1003c866: f640 6144 movw r1, #3652 ; 0xe44 +1003c86a: f04f 32ff mov.w r2, #4294967295 +1003c86e: 4b44 ldr r3, [pc, #272] ; (1003c980 ) +1003c870: f7fd fc7a bl 1003a168 +1003c874: 4620 mov r0, r4 +1003c876: f44f 6163 mov.w r1, #3632 ; 0xe30 +1003c87a: f04f 32ff mov.w r2, #4294967295 +1003c87e: 4b42 ldr r3, [pc, #264] ; (1003c988 ) +1003c880: f7fd fc72 bl 1003a168 +1003c884: 4620 mov r0, r4 +1003c886: f640 6134 movw r1, #3636 ; 0xe34 +1003c88a: f04f 32ff mov.w r2, #4294967295 +1003c88e: 4b3d ldr r3, [pc, #244] ; (1003c984 ) +1003c890: f7fd fc6a bl 1003a168 +1003c894: 4620 mov r0, r4 +1003c896: f640 6138 movw r1, #3640 ; 0xe38 +1003c89a: f04f 32ff mov.w r2, #4294967295 +1003c89e: 4b40 ldr r3, [pc, #256] ; (1003c9a0 ) +1003c8a0: f7fd fc62 bl 1003a168 +1003c8a4: 4620 mov r0, r4 +1003c8a6: f640 613c movw r1, #3644 ; 0xe3c +1003c8aa: f04f 32ff mov.w r2, #4294967295 +1003c8ae: 4b3d ldr r3, [pc, #244] ; (1003c9a4 ) +1003c8b0: f7fd fc5a bl 1003a168 +1003c8b4: 4620 mov r0, r4 +1003c8b6: f640 614c movw r1, #3660 ; 0xe4c +1003c8ba: f04f 32ff mov.w r2, #4294967295 +1003c8be: 4b3a ldr r3, [pc, #232] ; (1003c9a8 ) +1003c8c0: f7fd fc52 bl 1003a168 +1003c8c4: 4620 mov r0, r4 +1003c8c6: f640 6148 movw r1, #3656 ; 0xe48 +1003c8ca: f04f 32ff mov.w r2, #4294967295 +1003c8ce: f04f 4379 mov.w r3, #4177526784 ; 0xf9000000 +1003c8d2: f7fd fc49 bl 1003a168 +1003c8d6: f640 6148 movw r1, #3656 ; 0xe48 +1003c8da: f04f 32ff mov.w r2, #4294967295 +1003c8de: f04f 4378 mov.w r3, #4160749568 ; 0xf8000000 +1003c8e2: 4620 mov r0, r4 +1003c8e4: f7fd fc40 bl 1003a168 +1003c8e8: 200a movs r0, #10 +1003c8ea: f7fd fc4e bl 1003a18a +1003c8ee: 462b mov r3, r5 +1003c8f0: 4620 mov r0, r4 +1003c8f2: f640 6128 movw r1, #3624 ; 0xe28 +1003c8f6: f06f 02ff mvn.w r2, #255 ; 0xff +1003c8fa: f7fd fc35 bl 1003a168 +1003c8fe: 4629 mov r1, r5 +1003c900: 4620 mov r0, r4 +1003c902: 22df movs r2, #223 ; 0xdf +1003c904: 4b19 ldr r3, [pc, #100] ; (1003c96c ) +1003c906: f8cd 8000 str.w r8, [sp] +1003c90a: f7fd fc33 bl 1003a174 +1003c90e: f8d7 3da8 ldr.w r3, [r7, #3496] ; 0xda8 +1003c912: 4629 mov r1, r5 +1003c914: 9300 str r3, [sp, #0] +1003c916: 4620 mov r0, r4 +1003c918: 4b14 ldr r3, [pc, #80] ; (1003c96c ) +1003c91a: 2208 movs r2, #8 +1003c91c: f7fd fc2a bl 1003a174 +1003c920: f640 61ac movw r1, #3756 ; 0xeac +1003c924: f04f 32ff mov.w r2, #4294967295 +1003c928: 4620 mov r0, r4 +1003c92a: f7fd fc20 bl 1003a16e +1003c92e: f640 61a4 movw r1, #3748 ; 0xea4 +1003c932: 4605 mov r5, r0 +1003c934: f04f 32ff mov.w r2, #4294967295 +1003c938: 4620 mov r0, r4 +1003c93a: f7fd fc18 bl 1003a16e +1003c93e: 012b lsls r3, r5, #4 +1003c940: d40f bmi.n 1003c962 +1003c942: f3c0 4009 ubfx r0, r0, #16, #10 +1003c946: f5b0 7f99 cmp.w r0, #306 ; 0x132 +1003c94a: d00a beq.n 1003c962 +1003c94c: f3c5 4509 ubfx r5, r5, #16, #10 +1003c950: 2d36 cmp r5, #54 ; 0x36 +1003c952: bf14 ite ne +1003c954: 2003 movne r0, #3 +1003c956: 4630 moveq r0, r6 +1003c958: e004 b.n 1003c964 +1003c95a: 2000 movs r0, #0 +1003c95c: e002 b.n 1003c964 +1003c95e: 4628 mov r0, r5 +1003c960: e000 b.n 1003c964 +1003c962: 4630 mov r0, r6 +1003c964: b005 add sp, #20 +1003c966: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1003c96a: bf00 nop +1003c96c: 000fffff .word 0x000fffff +1003c970: 000f1173 .word 0x000f1173 +1003c974: 0005100a .word 0x0005100a +1003c978: 00808000 .word 0x00808000 +1003c97c: 01007c00 .word 0x01007c00 +1003c980: 01004800 .word 0x01004800 +1003c984: 10008c1c .word 0x10008c1c +1003c988: 30008c1c .word 0x30008c1c +1003c98c: 82160fff .word 0x82160fff +1003c990: 28160000 .word 0x28160000 +1003c994: 00462911 .word 0x00462911 +1003c998: 03ff0000 .word 0x03ff0000 +1003c99c: 000f7ff2 .word 0x000f7ff2 +1003c9a0: 82160000 .word 0x82160000 +1003c9a4: 28160fff .word 0x28160fff +1003c9a8: 0046a911 .word 0x0046a911 + +1003c9ac <_PHY_PathAFillIQKMatrix8195A>: +1003c9ac: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1003c9b0: 461e mov r6, r3 +1003c9b2: 2eff cmp r6, #255 ; 0xff +1003c9b4: f241 63c8 movw r3, #5832 ; 0x16c8 +1003c9b8: 4690 mov r8, r2 +1003c9ba: 58c5 ldr r5, [r0, r3] +1003c9bc: f000 80bf beq.w 1003cb3e <_PHY_PathAFillIQKMatrix8195A+0x192> +1003c9c0: 2900 cmp r1, #0 +1003c9c2: f000 80bc beq.w 1003cb3e <_PHY_PathAFillIQKMatrix8195A+0x192> +1003c9c6: f505 7400 add.w r4, r5, #512 ; 0x200 +1003c9ca: f44f 6148 mov.w r1, #3200 ; 0xc80 +1003c9ce: f04f 32ff mov.w r2, #4294967295 +1003c9d2: 4620 mov r0, r4 +1003c9d4: f7fd fbcb bl 1003a16e +1003c9d8: 0173 lsls r3, r6, #5 +1003c9da: f858 2003 ldr.w r2, [r8, r3] +1003c9de: 0d87 lsrs r7, r0, #22 +1003c9e0: 0591 lsls r1, r2, #22 +1003c9e2: bf44 itt mi +1003c9e4: ea6f 5282 mvnmi.w r2, r2, lsl #22 +1003c9e8: ea6f 5292 mvnmi.w r2, r2, lsr #22 +1003c9ec: eb08 0603 add.w r6, r8, r3 +1003c9f0: fb07 f802 mul.w r8, r7, r2 +1003c9f4: 4620 mov r0, r4 +1003c9f6: ea4f 2318 mov.w r3, r8, lsr #8 +1003c9fa: f44f 6148 mov.w r1, #3200 ; 0xc80 +1003c9fe: f240 32ff movw r2, #1023 ; 0x3ff +1003ca02: f7fd fbb1 bl 1003a168 +1003ca06: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 +1003ca0a: f3c8 13c0 ubfx r3, r8, #7, #1 +1003ca0e: 4620 mov r0, r4 +1003ca10: f640 414c movw r1, #3148 ; 0xc4c +1003ca14: f7fd fba8 bl 1003a168 +1003ca18: 6873 ldr r3, [r6, #4] +1003ca1a: 4620 mov r0, r4 +1003ca1c: 059a lsls r2, r3, #22 +1003ca1e: bf44 itt mi +1003ca20: ea6f 5383 mvnmi.w r3, r3, lsl #22 +1003ca24: ea6f 5393 mvnmi.w r3, r3, lsr #22 +1003ca28: 435f muls r7, r3 +1003ca2a: ea4f 2817 mov.w r8, r7, lsr #8 +1003ca2e: f3c8 1383 ubfx r3, r8, #6, #4 +1003ca32: f640 4194 movw r1, #3220 ; 0xc94 +1003ca36: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 +1003ca3a: f7fd fb95 bl 1003a168 +1003ca3e: f640 4194 movw r1, #3220 ; 0xc94 +1003ca42: f8c5 1d48 str.w r1, [r5, #3400] ; 0xd48 +1003ca46: f04f 32ff mov.w r2, #4294967295 +1003ca4a: 4620 mov r0, r4 +1003ca4c: f7fd fb8f bl 1003a16e +1003ca50: f008 033f and.w r3, r8, #63 ; 0x3f +1003ca54: f8c5 0d4c str.w r0, [r5, #3404] ; 0xd4c +1003ca58: f44f 6148 mov.w r1, #3200 ; 0xc80 +1003ca5c: 4620 mov r0, r4 +1003ca5e: f44f 127c mov.w r2, #4128768 ; 0x3f0000 +1003ca62: f7fd fb81 bl 1003a168 +1003ca66: f44f 6148 mov.w r1, #3200 ; 0xc80 +1003ca6a: f8c5 1d50 str.w r1, [r5, #3408] ; 0xd50 +1003ca6e: f04f 32ff mov.w r2, #4294967295 +1003ca72: 4620 mov r0, r4 +1003ca74: f7fd fb7b bl 1003a16e +1003ca78: f3c7 13c0 ubfx r3, r7, #7, #1 +1003ca7c: f8c5 0d54 str.w r0, [r5, #3412] ; 0xd54 +1003ca80: f640 414c movw r1, #3148 ; 0xc4c +1003ca84: 4620 mov r0, r4 +1003ca86: f04f 5200 mov.w r2, #536870912 ; 0x20000000 +1003ca8a: f7fd fb6d bl 1003a168 +1003ca8e: f640 414c movw r1, #3148 ; 0xc4c +1003ca92: f8c5 1d58 str.w r1, [r5, #3416] ; 0xd58 +1003ca96: 4620 mov r0, r4 +1003ca98: f04f 32ff mov.w r2, #4294967295 +1003ca9c: f7fd fb67 bl 1003a16e +1003caa0: f89d 3018 ldrb.w r3, [sp, #24] +1003caa4: f8c5 0d5c str.w r0, [r5, #3420] ; 0xd5c +1003caa8: b1bb cbz r3, 1003cada <_PHY_PathAFillIQKMatrix8195A+0x12e> +1003caaa: f44f 614a mov.w r1, #3232 ; 0xca0 +1003caae: f8c5 1d80 str.w r1, [r5, #3456] ; 0xd80 +1003cab2: f04f 32ff mov.w r2, #4294967295 +1003cab6: 4620 mov r0, r4 +1003cab8: f7fd fb59 bl 1003a16e +1003cabc: f640 4114 movw r1, #3092 ; 0xc14 +1003cac0: f8c5 0d84 str.w r0, [r5, #3460] ; 0xd84 +1003cac4: f8c5 1d78 str.w r1, [r5, #3448] ; 0xd78 +1003cac8: 4620 mov r0, r4 +1003caca: f04f 32ff mov.w r2, #4294967295 +1003cace: f7fd fb4e bl 1003a16e +1003cad2: f8c5 0d7c str.w r0, [r5, #3452] ; 0xd7c +1003cad6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1003cada: 4620 mov r0, r4 +1003cadc: f640 4114 movw r1, #3092 ; 0xc14 +1003cae0: f240 32ff movw r2, #1023 ; 0x3ff +1003cae4: 68b3 ldr r3, [r6, #8] +1003cae6: f7fd fb3f bl 1003a168 +1003caea: 68f3 ldr r3, [r6, #12] +1003caec: 4620 mov r0, r4 +1003caee: f003 033f and.w r3, r3, #63 ; 0x3f +1003caf2: f640 4114 movw r1, #3092 ; 0xc14 +1003caf6: f44f 427c mov.w r2, #64512 ; 0xfc00 +1003cafa: f7fd fb35 bl 1003a168 +1003cafe: f640 4114 movw r1, #3092 ; 0xc14 +1003cb02: f8c5 1d78 str.w r1, [r5, #3448] ; 0xd78 +1003cb06: f04f 32ff mov.w r2, #4294967295 +1003cb0a: 4620 mov r0, r4 +1003cb0c: f7fd fb2f bl 1003a16e +1003cb10: 68f3 ldr r3, [r6, #12] +1003cb12: f8c5 0d7c str.w r0, [r5, #3452] ; 0xd7c +1003cb16: f44f 614a mov.w r1, #3232 ; 0xca0 +1003cb1a: 4620 mov r0, r4 +1003cb1c: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 +1003cb20: f3c3 1383 ubfx r3, r3, #6, #4 +1003cb24: f7fd fb20 bl 1003a168 +1003cb28: f44f 614a mov.w r1, #3232 ; 0xca0 +1003cb2c: f8c5 1d80 str.w r1, [r5, #3456] ; 0xd80 +1003cb30: 4620 mov r0, r4 +1003cb32: f04f 32ff mov.w r2, #4294967295 +1003cb36: f7fd fb1a bl 1003a16e +1003cb3a: f8c5 0d84 str.w r0, [r5, #3460] ; 0xd84 +1003cb3e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1003cb42 <_PHY_PathBFillIQKMatrix8195A>: +1003cb42: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1003cb46: 461e mov r6, r3 +1003cb48: 2eff cmp r6, #255 ; 0xff +1003cb4a: f241 63c8 movw r3, #5832 ; 0x16c8 +1003cb4e: 4617 mov r7, r2 +1003cb50: 58c5 ldr r5, [r0, r3] +1003cb52: f000 80b2 beq.w 1003ccba <_PHY_PathBFillIQKMatrix8195A+0x178> +1003cb56: 2900 cmp r1, #0 +1003cb58: f000 80af beq.w 1003ccba <_PHY_PathBFillIQKMatrix8195A+0x178> +1003cb5c: f505 7400 add.w r4, r5, #512 ; 0x200 +1003cb60: f04f 32ff mov.w r2, #4294967295 +1003cb64: f640 4188 movw r1, #3208 ; 0xc88 +1003cb68: 4620 mov r0, r4 +1003cb6a: f7fd fb00 bl 1003a16e +1003cb6e: eb07 1746 add.w r7, r7, r6, lsl #5 +1003cb72: 693e ldr r6, [r7, #16] +1003cb74: ea4f 5890 mov.w r8, r0, lsr #22 +1003cb78: 05b2 lsls r2, r6, #22 +1003cb7a: bf44 itt mi +1003cb7c: ea6f 5686 mvnmi.w r6, r6, lsl #22 +1003cb80: ea6f 5696 mvnmi.w r6, r6, lsr #22 +1003cb84: fb08 f606 mul.w r6, r8, r6 +1003cb88: 4620 mov r0, r4 +1003cb8a: 0a33 lsrs r3, r6, #8 +1003cb8c: f640 4188 movw r1, #3208 ; 0xc88 +1003cb90: f240 32ff movw r2, #1023 ; 0x3ff +1003cb94: f7fd fae8 bl 1003a168 +1003cb98: f3c6 13c0 ubfx r3, r6, #7, #1 +1003cb9c: 4620 mov r0, r4 +1003cb9e: f640 414c movw r1, #3148 ; 0xc4c +1003cba2: f04f 6200 mov.w r2, #134217728 ; 0x8000000 +1003cba6: f7fd fadf bl 1003a168 +1003cbaa: 6979 ldr r1, [r7, #20] +1003cbac: 4620 mov r0, r4 +1003cbae: 058b lsls r3, r1, #22 +1003cbb0: bf44 itt mi +1003cbb2: ea6f 5181 mvnmi.w r1, r1, lsl #22 +1003cbb6: ea6f 5191 mvnmi.w r1, r1, lsr #22 +1003cbba: fb08 f601 mul.w r6, r8, r1 +1003cbbe: ea4f 2816 mov.w r8, r6, lsr #8 +1003cbc2: f3c8 1383 ubfx r3, r8, #6, #4 +1003cbc6: f640 419c movw r1, #3228 ; 0xc9c +1003cbca: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 +1003cbce: f7fd facb bl 1003a168 +1003cbd2: f640 419c movw r1, #3228 ; 0xc9c +1003cbd6: f8c5 1d60 str.w r1, [r5, #3424] ; 0xd60 +1003cbda: f04f 32ff mov.w r2, #4294967295 +1003cbde: 4620 mov r0, r4 +1003cbe0: f7fd fac5 bl 1003a16e +1003cbe4: f008 033f and.w r3, r8, #63 ; 0x3f +1003cbe8: f8c5 0d64 str.w r0, [r5, #3428] ; 0xd64 +1003cbec: f640 4188 movw r1, #3208 ; 0xc88 +1003cbf0: 4620 mov r0, r4 +1003cbf2: f44f 127c mov.w r2, #4128768 ; 0x3f0000 +1003cbf6: f7fd fab7 bl 1003a168 +1003cbfa: f640 4188 movw r1, #3208 ; 0xc88 +1003cbfe: f8c5 1d68 str.w r1, [r5, #3432] ; 0xd68 +1003cc02: f04f 32ff mov.w r2, #4294967295 +1003cc06: 4620 mov r0, r4 +1003cc08: f7fd fab1 bl 1003a16e +1003cc0c: f3c6 13c0 ubfx r3, r6, #7, #1 +1003cc10: f8c5 0d6c str.w r0, [r5, #3436] ; 0xd6c +1003cc14: f640 414c movw r1, #3148 ; 0xc4c +1003cc18: 4620 mov r0, r4 +1003cc1a: f04f 7200 mov.w r2, #33554432 ; 0x2000000 +1003cc1e: f7fd faa3 bl 1003a168 +1003cc22: f640 414c movw r1, #3148 ; 0xc4c +1003cc26: f8c5 1d70 str.w r1, [r5, #3440] ; 0xd70 +1003cc2a: 4620 mov r0, r4 +1003cc2c: f04f 32ff mov.w r2, #4294967295 +1003cc30: f7fd fa9d bl 1003a16e +1003cc34: f89d 3018 ldrb.w r3, [sp, #24] +1003cc38: f8c5 0d74 str.w r0, [r5, #3444] ; 0xd74 +1003cc3c: b15b cbz r3, 1003cc56 <_PHY_PathBFillIQKMatrix8195A+0x114> +1003cc3e: f640 411c movw r1, #3100 ; 0xc1c +1003cc42: f8c5 1d88 str.w r1, [r5, #3464] ; 0xd88 +1003cc46: 4620 mov r0, r4 +1003cc48: f04f 32ff mov.w r2, #4294967295 +1003cc4c: f7fd fa8f bl 1003a16e +1003cc50: f8c5 0d8c str.w r0, [r5, #3468] ; 0xd8c +1003cc54: e026 b.n 1003cca4 <_PHY_PathBFillIQKMatrix8195A+0x162> +1003cc56: 4620 mov r0, r4 +1003cc58: f640 411c movw r1, #3100 ; 0xc1c +1003cc5c: f240 32ff movw r2, #1023 ; 0x3ff +1003cc60: 69bb ldr r3, [r7, #24] +1003cc62: f7fd fa81 bl 1003a168 +1003cc66: 69fb ldr r3, [r7, #28] +1003cc68: 4620 mov r0, r4 +1003cc6a: f003 033f and.w r3, r3, #63 ; 0x3f +1003cc6e: f640 411c movw r1, #3100 ; 0xc1c +1003cc72: f44f 427c mov.w r2, #64512 ; 0xfc00 +1003cc76: f7fd fa77 bl 1003a168 +1003cc7a: f640 411c movw r1, #3100 ; 0xc1c +1003cc7e: f8c5 1d88 str.w r1, [r5, #3464] ; 0xd88 +1003cc82: f04f 32ff mov.w r2, #4294967295 +1003cc86: 4620 mov r0, r4 +1003cc88: f7fd fa71 bl 1003a16e +1003cc8c: 69fb ldr r3, [r7, #28] +1003cc8e: f8c5 0d8c str.w r0, [r5, #3468] ; 0xd8c +1003cc92: f640 4178 movw r1, #3192 ; 0xc78 +1003cc96: 4620 mov r0, r4 +1003cc98: f44f 4270 mov.w r2, #61440 ; 0xf000 +1003cc9c: f3c3 1383 ubfx r3, r3, #6, #4 +1003cca0: f7fd fa62 bl 1003a168 +1003cca4: f640 4178 movw r1, #3192 ; 0xc78 +1003cca8: f8c5 1d90 str.w r1, [r5, #3472] ; 0xd90 +1003ccac: 4620 mov r0, r4 +1003ccae: f04f 32ff mov.w r2, #4294967295 +1003ccb2: f7fd fa5c bl 1003a16e +1003ccb6: f8c5 0d94 str.w r0, [r5, #3476] ; 0xd94 +1003ccba: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1003ccbe <_PHY_SaveADDARegisters8195A>: +1003ccbe: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1003ccc2: 461f mov r7, r3 +1003ccc4: f241 63c8 movw r3, #5832 ; 0x16c8 +1003ccc8: 58c3 ldr r3, [r0, r3] +1003ccca: 460d mov r5, r1 +1003cccc: 4616 mov r6, r2 +1003ccce: f503 7800 add.w r8, r3, #512 ; 0x200 +1003ccd2: 2400 movs r4, #0 +1003ccd4: 42bc cmp r4, r7 +1003ccd6: d00a beq.n 1003ccee <_PHY_SaveADDARegisters8195A+0x30> +1003ccd8: f855 1024 ldr.w r1, [r5, r4, lsl #2] +1003ccdc: 4640 mov r0, r8 +1003ccde: f04f 32ff mov.w r2, #4294967295 +1003cce2: f7fd fa44 bl 1003a16e +1003cce6: f846 0024 str.w r0, [r6, r4, lsl #2] +1003ccea: 3401 adds r4, #1 +1003ccec: e7f2 b.n 1003ccd4 <_PHY_SaveADDARegisters8195A+0x16> +1003ccee: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1003ccf2 <_PHY_SaveMACRegisters8195A>: +1003ccf2: b5f8 push {r3, r4, r5, r6, r7, lr} +1003ccf4: f241 63c8 movw r3, #5832 ; 0x16c8 +1003ccf8: 58c7 ldr r7, [r0, r3] +1003ccfa: 460e mov r6, r1 +1003ccfc: 4615 mov r5, r2 +1003ccfe: f507 7700 add.w r7, r7, #512 ; 0x200 +1003cd02: 2400 movs r4, #0 +1003cd04: 5931 ldr r1, [r6, r4] +1003cd06: 4638 mov r0, r7 +1003cd08: f7fd fa1c bl 1003a144 +1003cd0c: 5128 str r0, [r5, r4] +1003cd0e: 3404 adds r4, #4 +1003cd10: 2c0c cmp r4, #12 +1003cd12: d1f7 bne.n 1003cd04 <_PHY_SaveMACRegisters8195A+0x12> +1003cd14: 4638 mov r0, r7 +1003cd16: 68f1 ldr r1, [r6, #12] +1003cd18: f7fd fa17 bl 1003a14a +1003cd1c: 60e8 str r0, [r5, #12] +1003cd1e: bdf8 pop {r3, r4, r5, r6, r7, pc} + +1003cd20 <_PHY_ReloadADDARegisters8195A>: +1003cd20: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1003cd24: 461f mov r7, r3 +1003cd26: f241 63c8 movw r3, #5832 ; 0x16c8 +1003cd2a: 58c3 ldr r3, [r0, r3] +1003cd2c: 460d mov r5, r1 +1003cd2e: 4616 mov r6, r2 +1003cd30: f503 7800 add.w r8, r3, #512 ; 0x200 +1003cd34: 2400 movs r4, #0 +1003cd36: 42bc cmp r4, r7 +1003cd38: d00a beq.n 1003cd50 <_PHY_ReloadADDARegisters8195A+0x30> +1003cd3a: f855 1024 ldr.w r1, [r5, r4, lsl #2] +1003cd3e: f856 3024 ldr.w r3, [r6, r4, lsl #2] +1003cd42: 4640 mov r0, r8 +1003cd44: f04f 32ff mov.w r2, #4294967295 +1003cd48: f7fd fa0e bl 1003a168 +1003cd4c: 3401 adds r4, #1 +1003cd4e: e7f2 b.n 1003cd36 <_PHY_ReloadADDARegisters8195A+0x16> +1003cd50: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +1003cd54 <_PHY_ReloadMACRegisters8195A>: +1003cd54: b5f8 push {r3, r4, r5, r6, r7, lr} +1003cd56: f241 63c8 movw r3, #5832 ; 0x16c8 +1003cd5a: 58c7 ldr r7, [r0, r3] +1003cd5c: 460e mov r6, r1 +1003cd5e: 4615 mov r5, r2 +1003cd60: f507 7700 add.w r7, r7, #512 ; 0x200 +1003cd64: 2400 movs r4, #0 +1003cd66: 5931 ldr r1, [r6, r4] +1003cd68: 5d2a ldrb r2, [r5, r4] +1003cd6a: 4638 mov r0, r7 +1003cd6c: 3404 adds r4, #4 +1003cd6e: f7fd f9ef bl 1003a150 +1003cd72: 2c0c cmp r4, #12 +1003cd74: d1f7 bne.n 1003cd66 <_PHY_ReloadMACRegisters8195A+0x12> +1003cd76: 4638 mov r0, r7 +1003cd78: 68f1 ldr r1, [r6, #12] +1003cd7a: 68ea ldr r2, [r5, #12] +1003cd7c: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +1003cd80: f7fd b9ec b.w 1003a15c + +1003cd84 <_PHY_PathADDAOn8195A>: +1003cd84: f241 62c8 movw r2, #5832 ; 0x16c8 +1003cd88: b570 push {r4, r5, r6, lr} +1003cd8a: 5885 ldr r5, [r0, r2] +1003cd8c: 460e mov r6, r1 +1003cd8e: f505 7500 add.w r5, r5, #512 ; 0x200 +1003cd92: b933 cbnz r3, 1003cda2 <_PHY_PathADDAOn8195A+0x1e> +1003cd94: 4628 mov r0, r5 +1003cd96: 6809 ldr r1, [r1, #0] +1003cd98: f04f 32ff mov.w r2, #4294967295 +1003cd9c: 4b07 ldr r3, [pc, #28] ; (1003cdbc <_PHY_PathADDAOn8195A+0x38>) +1003cd9e: f7fd f9e3 bl 1003a168 +1003cda2: 2400 movs r4, #0 +1003cda4: 1933 adds r3, r6, r4 +1003cda6: 6859 ldr r1, [r3, #4] +1003cda8: 4628 mov r0, r5 +1003cdaa: f04f 32ff mov.w r2, #4294967295 +1003cdae: 4b03 ldr r3, [pc, #12] ; (1003cdbc <_PHY_PathADDAOn8195A+0x38>) +1003cdb0: 3404 adds r4, #4 +1003cdb2: f7fd f9d9 bl 1003a168 +1003cdb6: 2c3c cmp r4, #60 ; 0x3c +1003cdb8: d1f4 bne.n 1003cda4 <_PHY_PathADDAOn8195A+0x20> +1003cdba: bd70 pop {r4, r5, r6, pc} +1003cdbc: 03c00014 .word 0x03c00014 + +1003cdc0 <_PHY_MACSettingCalibration8195A>: +1003cdc0: f241 63c8 movw r3, #5832 ; 0x16c8 +1003cdc4: b570 push {r4, r5, r6, lr} +1003cdc6: 58c5 ldr r5, [r0, r3] +1003cdc8: 460c mov r4, r1 +1003cdca: f505 7500 add.w r5, r5, #512 ; 0x200 +1003cdce: 4616 mov r6, r2 +1003cdd0: 4628 mov r0, r5 +1003cdd2: 6809 ldr r1, [r1, #0] +1003cdd4: 223f movs r2, #63 ; 0x3f +1003cdd6: f7fd f9bb bl 1003a150 +1003cdda: 6872 ldr r2, [r6, #4] +1003cddc: 4628 mov r0, r5 +1003cdde: 6861 ldr r1, [r4, #4] +1003cde0: f002 02f7 and.w r2, r2, #247 ; 0xf7 +1003cde4: f7fd f9b4 bl 1003a150 +1003cde8: 68b2 ldr r2, [r6, #8] +1003cdea: 4628 mov r0, r5 +1003cdec: 68a1 ldr r1, [r4, #8] +1003cdee: f002 02f7 and.w r2, r2, #247 ; 0xf7 +1003cdf2: f7fd f9ad bl 1003a150 +1003cdf6: 68f2 ldr r2, [r6, #12] +1003cdf8: 4628 mov r0, r5 +1003cdfa: 68e1 ldr r1, [r4, #12] +1003cdfc: f002 02df and.w r2, r2, #223 ; 0xdf +1003ce00: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1003ce04: f7fd b9a4 b.w 1003a150 + +1003ce08 <_PHY_PIModeSwitch8195A>: +1003ce08: b570 push {r4, r5, r6, lr} +1003ce0a: f241 63c8 movw r3, #5832 ; 0x16c8 +1003ce0e: 58c5 ldr r5, [r0, r3] +1003ce10: 2900 cmp r1, #0 +1003ce12: bf0c ite eq +1003ce14: f04f 7480 moveq.w r4, #16777216 ; 0x1000000 +1003ce18: f04f 2401 movne.w r4, #16777472 ; 0x1000100 +1003ce1c: f505 7500 add.w r5, r5, #512 ; 0x200 +1003ce20: 4628 mov r0, r5 +1003ce22: 4623 mov r3, r4 +1003ce24: f44f 6102 mov.w r1, #2080 ; 0x820 +1003ce28: f04f 32ff mov.w r2, #4294967295 +1003ce2c: f7fd f99c bl 1003a168 +1003ce30: 4628 mov r0, r5 +1003ce32: 4623 mov r3, r4 +1003ce34: f640 0128 movw r1, #2088 ; 0x828 +1003ce38: f04f 32ff mov.w r2, #4294967295 +1003ce3c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1003ce40: f7fd b992 b.w 1003a168 + +1003ce44 : +1003ce44: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} +1003ce48: 4691 mov r9, r2 +1003ce4a: 4a4a ldr r2, [pc, #296] ; (1003cf74 ) +1003ce4c: ea4f 1849 mov.w r8, r9, lsl #5 +1003ce50: 8812 ldrh r2, [r2, #0] +1003ce52: eb01 0408 add.w r4, r1, r8 +1003ce56: eb01 1c43 add.w ip, r1, r3, lsl #5 +1003ce5a: 2000 movs r0, #0 +1003ce5c: f8ad 2004 strh.w r2, [sp, #4] +1003ce60: 4666 mov r6, ip +1003ce62: 4625 mov r5, r4 +1003ce64: 4602 mov r2, r0 +1003ce66: f012 0f01 tst.w r2, #1 +1003ce6a: ea4f 0a82 mov.w sl, r2, lsl #2 +1003ce6e: f854 7022 ldr.w r7, [r4, r2, lsl #2] +1003ce72: bf08 it eq +1003ce74: f85c a022 ldreq.w sl, [ip, r2, lsl #2] +1003ce78: d00f beq.n 1003ce9a +1003ce7a: f417 7f00 tst.w r7, #512 ; 0x200 +1003ce7e: f85c a00a ldr.w sl, [ip, sl] +1003ce82: bf1c itt ne +1003ce84: ea6f 5787 mvnne.w r7, r7, lsl #22 +1003ce88: ea6f 5797 mvnne.w r7, r7, lsr #22 +1003ce8c: f41a 7f00 tst.w sl, #512 ; 0x200 +1003ce90: bf1c itt ne +1003ce92: ea6f 5a8a mvnne.w sl, sl, lsl #22 +1003ce96: ea6f 5a9a mvnne.w sl, sl, lsr #22 +1003ce9a: 4557 cmp r7, sl +1003ce9c: bfcc ite gt +1003ce9e: ebca 0707 rsbgt r7, sl, r7 +1003cea2: ebc7 070a rsble r7, r7, sl +1003cea6: 2f05 cmp r7, #5 +1003cea8: d924 bls.n 1003cef4 +1003ceaa: f022 0704 bic.w r7, r2, #4 +1003ceae: 2f02 cmp r7, #2 +1003ceb0: d11d bne.n 1003ceee +1003ceb2: b9e0 cbnz r0, 1003ceee +1003ceb4: e895 0480 ldmia.w r5, {r7, sl} +1003ceb8: 44ba add sl, r7 +1003ceba: f1ba 0f00 cmp.w sl, #0 +1003cebe: d106 bne.n 1003cece +1003cec0: f10d 0a08 add.w sl, sp, #8 +1003cec4: eb0a 0792 add.w r7, sl, r2, lsr #2 +1003cec8: f807 3c04 strb.w r3, [r7, #-4] +1003cecc: e012 b.n 1003cef4 +1003cece: e896 0480 ldmia.w r6, {r7, sl} +1003ced2: 44ba add sl, r7 +1003ced4: f1ba 0f00 cmp.w sl, #0 +1003ced8: d106 bne.n 1003cee8 +1003ceda: f10d 0a08 add.w sl, sp, #8 +1003cede: eb0a 0792 add.w r7, sl, r2, lsr #2 +1003cee2: f807 9c04 strb.w r9, [r7, #-4] +1003cee6: e005 b.n 1003cef4 +1003cee8: 2001 movs r0, #1 +1003ceea: 4090 lsls r0, r2 +1003ceec: e002 b.n 1003cef4 +1003ceee: 2701 movs r7, #1 +1003cef0: 4097 lsls r7, r2 +1003cef2: 4338 orrs r0, r7 +1003cef4: 3201 adds r2, #1 +1003cef6: 2a08 cmp r2, #8 +1003cef8: f106 0604 add.w r6, r6, #4 +1003cefc: f105 0504 add.w r5, r5, #4 +1003cf00: d1b1 bne.n 1003ce66 +1003cf02: b9b8 cbnz r0, 1003cf34 +1003cf04: f89d 3004 ldrb.w r3, [sp, #4] +1003cf08: 2bff cmp r3, #255 ; 0xff +1003cf0a: d006 beq.n 1003cf1a +1003cf0c: 015b lsls r3, r3, #5 +1003cf0e: 18ca adds r2, r1, r3 +1003cf10: 58cb ldr r3, [r1, r3] +1003cf12: 660b str r3, [r1, #96] ; 0x60 +1003cf14: 6853 ldr r3, [r2, #4] +1003cf16: 664b str r3, [r1, #100] ; 0x64 +1003cf18: e000 b.n 1003cf1c +1003cf1a: 2001 movs r0, #1 +1003cf1c: f89d 3005 ldrb.w r3, [sp, #5] +1003cf20: 2bff cmp r3, #255 ; 0xff +1003cf22: d023 beq.n 1003cf6c +1003cf24: eb01 1343 add.w r3, r1, r3, lsl #5 +1003cf28: 691a ldr r2, [r3, #16] +1003cf2a: 670a str r2, [r1, #112] ; 0x70 +1003cf2c: 695b ldr r3, [r3, #20] +1003cf2e: 674b str r3, [r1, #116] ; 0x74 +1003cf30: 2000 movs r0, #0 +1003cf32: e01b b.n 1003cf6c +1003cf34: 0783 lsls r3, r0, #30 +1003cf36: d104 bne.n 1003cf42 +1003cf38: f851 3008 ldr.w r3, [r1, r8] +1003cf3c: 660b str r3, [r1, #96] ; 0x60 +1003cf3e: 6863 ldr r3, [r4, #4] +1003cf40: 664b str r3, [r1, #100] ; 0x64 +1003cf42: f010 0f0c tst.w r0, #12 +1003cf46: d103 bne.n 1003cf50 +1003cf48: 68a3 ldr r3, [r4, #8] +1003cf4a: 668b str r3, [r1, #104] ; 0x68 +1003cf4c: 68e3 ldr r3, [r4, #12] +1003cf4e: 66cb str r3, [r1, #108] ; 0x6c +1003cf50: f010 0f30 tst.w r0, #48 ; 0x30 +1003cf54: d103 bne.n 1003cf5e +1003cf56: 6923 ldr r3, [r4, #16] +1003cf58: 670b str r3, [r1, #112] ; 0x70 +1003cf5a: 6963 ldr r3, [r4, #20] +1003cf5c: 674b str r3, [r1, #116] ; 0x74 +1003cf5e: f010 00c0 ands.w r0, r0, #192 ; 0xc0 +1003cf62: d1e5 bne.n 1003cf30 +1003cf64: 69a3 ldr r3, [r4, #24] +1003cf66: 678b str r3, [r1, #120] ; 0x78 +1003cf68: 69e3 ldr r3, [r4, #28] +1003cf6a: 67cb str r3, [r1, #124] ; 0x7c +1003cf6c: b002 add sp, #8 +1003cf6e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1003cf72: bf00 nop +1003cf74: 100444cc .word 0x100444cc + +1003cf78 : +1003cf78: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1003cf7c: 4698 mov r8, r3 +1003cf7e: f241 63c8 movw r3, #5832 ; 0x16c8 +1003cf82: 58c6 ldr r6, [r0, r3] +1003cf84: b0a5 sub sp, #148 ; 0x94 +1003cf86: f506 7400 add.w r4, r6, #512 ; 0x200 +1003cf8a: 4605 mov r5, r0 +1003cf8c: 4689 mov r9, r1 +1003cf8e: 4617 mov r7, r2 +1003cf90: f44f 6145 mov.w r1, #3152 ; 0xc50 +1003cf94: 22ff movs r2, #255 ; 0xff +1003cf96: 4620 mov r0, r4 +1003cf98: f7fd f8e9 bl 1003a16e +1003cf9c: f640 4158 movw r1, #3160 ; 0xc58 +1003cfa0: 9004 str r0, [sp, #16] +1003cfa2: 22ff movs r2, #255 ; 0xff +1003cfa4: 4620 mov r0, r4 +1003cfa6: f7fd f8e2 bl 1003a16e +1003cfaa: f8df e354 ldr.w lr, [pc, #852] ; 1003d300 +1003cfae: f10d 0c50 add.w ip, sp, #80 ; 0x50 +1003cfb2: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} +1003cfb6: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} +1003cfba: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} +1003cfbe: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} +1003cfc2: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} +1003cfc6: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} +1003cfca: e89e 000f ldmia.w lr, {r0, r1, r2, r3} +1003cfce: f10d 0a1c add.w sl, sp, #28 +1003cfd2: e88c 000f stmia.w ip, {r0, r1, r2, r3} +1003cfd6: f10e 0310 add.w r3, lr, #16 +1003cfda: f10d 0c2c add.w ip, sp, #44 ; 0x2c +1003cfde: f10e 0e20 add.w lr, lr, #32 +1003cfe2: cb0f ldmia r3, {r0, r1, r2, r3} +1003cfe4: e88a 000f stmia.w sl, {r0, r1, r2, r3} +1003cfe8: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} +1003cfec: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} +1003cff0: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} +1003cff4: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} +1003cff8: f8de 3000 ldr.w r3, [lr] +1003cffc: f8cc 3000 str.w r3, [ip] +1003d000: b99f cbnz r7, 1003d02a +1003d002: 2310 movs r3, #16 +1003d004: 4628 mov r0, r5 +1003d006: a914 add r1, sp, #80 ; 0x50 +1003d008: f506 624b add.w r2, r6, #3248 ; 0xcb0 +1003d00c: f7ff fe57 bl 1003ccbe <_PHY_SaveADDARegisters8195A> +1003d010: 4628 mov r0, r5 +1003d012: 4651 mov r1, sl +1003d014: f506 624f add.w r2, r6, #3312 ; 0xcf0 +1003d018: f7ff fe6b bl 1003ccf2 <_PHY_SaveMACRegisters8195A> +1003d01c: 4628 mov r0, r5 +1003d01e: a90b add r1, sp, #44 ; 0x2c +1003d020: f606 5224 addw r2, r6, #3364 ; 0xd24 +1003d024: 2309 movs r3, #9 +1003d026: f7ff fe4a bl 1003ccbe <_PHY_SaveADDARegisters8195A> +1003d02a: 4628 mov r0, r5 +1003d02c: a914 add r1, sp, #80 ; 0x50 +1003d02e: 2201 movs r2, #1 +1003d030: 4643 mov r3, r8 +1003d032: f7ff fea7 bl 1003cd84 <_PHY_PathADDAOn8195A> +1003d036: b947 cbnz r7, 1003d04a +1003d038: 4620 mov r0, r4 +1003d03a: f44f 6102 mov.w r1, #2080 ; 0x820 +1003d03e: f44f 7280 mov.w r2, #256 ; 0x100 +1003d042: f7fd f894 bl 1003a16e +1003d046: f886 09b8 strb.w r0, [r6, #2488] ; 0x9b8 +1003d04a: f896 39b8 ldrb.w r3, [r6, #2488] ; 0x9b8 +1003d04e: b91b cbnz r3, 1003d058 +1003d050: 4628 mov r0, r5 +1003d052: 2101 movs r1, #1 +1003d054: f7ff fed8 bl 1003ce08 <_PHY_PIModeSwitch8195A> +1003d058: f640 1148 movw r1, #2376 ; 0x948 +1003d05c: f04f 32ff mov.w r2, #4294967295 +1003d060: 4620 mov r0, r4 +1003d062: f7fd f884 bl 1003a16e +1003d066: 2100 movs r1, #0 +1003d068: 22b0 movs r2, #176 ; 0xb0 +1003d06a: 4b9a ldr r3, [pc, #616] ; (1003d2d4 ) +1003d06c: 4683 mov fp, r0 +1003d06e: 4620 mov r0, r4 +1003d070: f7fd f883 bl 1003a17a +1003d074: f44f 6100 mov.w r1, #2048 ; 0x800 +1003d078: 9005 str r0, [sp, #20] +1003d07a: f04f 7280 mov.w r2, #16777216 ; 0x1000000 +1003d07e: 4620 mov r0, r4 +1003d080: 2300 movs r3, #0 +1003d082: f7fd f871 bl 1003a168 +1003d086: 4620 mov r0, r4 +1003d088: f640 4104 movw r1, #3076 ; 0xc04 +1003d08c: f04f 32ff mov.w r2, #4294967295 +1003d090: 4b91 ldr r3, [pc, #580] ; (1003d2d8 ) +1003d092: f7fd f869 bl 1003a168 +1003d096: 4620 mov r0, r4 +1003d098: f640 4108 movw r1, #3080 ; 0xc08 +1003d09c: f04f 32ff mov.w r2, #4294967295 +1003d0a0: 4b8e ldr r3, [pc, #568] ; (1003d2dc ) +1003d0a2: f7fd f861 bl 1003a168 +1003d0a6: f506 6a4f add.w sl, r6, #3312 ; 0xcf0 +1003d0aa: 4b8d ldr r3, [pc, #564] ; (1003d2e0 ) +1003d0ac: 4620 mov r0, r4 +1003d0ae: f640 0174 movw r1, #2164 ; 0x874 +1003d0b2: f04f 32ff mov.w r2, #4294967295 +1003d0b6: f7fd f857 bl 1003a168 +1003d0ba: 4628 mov r0, r5 +1003d0bc: a907 add r1, sp, #28 +1003d0be: 4652 mov r2, sl +1003d0c0: f7ff fe7e bl 1003cdc0 <_PHY_MACSettingCalibration8195A> +1003d0c4: 4620 mov r0, r4 +1003d0c6: f640 6128 movw r1, #3624 ; 0xe28 +1003d0ca: f06f 02ff mvn.w r2, #255 ; 0xff +1003d0ce: 4b85 ldr r3, [pc, #532] ; (1003d2e4 ) +1003d0d0: f7fd f84a bl 1003a168 +1003d0d4: 4620 mov r0, r4 +1003d0d6: f44f 6164 mov.w r1, #3648 ; 0xe40 +1003d0da: f04f 32ff mov.w r2, #4294967295 +1003d0de: 4b82 ldr r3, [pc, #520] ; (1003d2e8 ) +1003d0e0: f7fd f842 bl 1003a168 +1003d0e4: 4620 mov r0, r4 +1003d0e6: f640 6144 movw r1, #3652 ; 0xe44 +1003d0ea: f04f 32ff mov.w r2, #4294967295 +1003d0ee: 4b7f ldr r3, [pc, #508] ; (1003d2ec ) +1003d0f0: f7fd f83a bl 1003a168 +1003d0f4: 4628 mov r0, r5 +1003d0f6: 4641 mov r1, r8 +1003d0f8: f7ff f9b4 bl 1003c464 +1003d0fc: 2801 cmp r0, #1 +1003d0fe: d11b bne.n 1003d138 +1003d100: 4620 mov r0, r4 +1003d102: f640 6128 movw r1, #3624 ; 0xe28 +1003d106: f06f 02ff mvn.w r2, #255 ; 0xff +1003d10a: 2300 movs r3, #0 +1003d10c: f7fd f82c bl 1003a168 +1003d110: 2100 movs r1, #0 +1003d112: 2208 movs r2, #8 +1003d114: 4b6f ldr r3, [pc, #444] ; (1003d2d4 ) +1003d116: 4620 mov r0, r4 +1003d118: f7fd f82f bl 1003a17a +1003d11c: 4b74 ldr r3, [pc, #464] ; (1003d2f0 ) +1003d11e: f8c6 0dc4 str.w r0, [r6, #3524] ; 0xdc4 +1003d122: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1003d126: e9d3 0102 ldrd r0, r1, [r3, #8] +1003d12a: 2300 movs r3, #0 +1003d12c: 4002 ands r2, r0 +1003d12e: 400b ands r3, r1 +1003d130: ea52 0103 orrs.w r1, r2, r3 +1003d134: d107 bne.n 1003d146 +1003d136: e00d b.n 1003d154 +1003d138: 4628 mov r0, r5 +1003d13a: 4641 mov r1, r8 +1003d13c: f7ff f992 bl 1003c464 +1003d140: 2801 cmp r0, #1 +1003d142: d126 bne.n 1003d192 +1003d144: e7dc b.n 1003d100 +1003d146: 4b6b ldr r3, [pc, #428] ; (1003d2f4 ) +1003d148: 681b ldr r3, [r3, #0] +1003d14a: b11b cbz r3, 1003d154 +1003d14c: 4b6a ldr r3, [pc, #424] ; (1003d2f8 ) +1003d14e: 6d18 ldr r0, [r3, #80] ; 0x50 +1003d150: f7dd fd16 bl 1001ab80 +1003d154: ea4f 1c47 mov.w ip, r7, lsl #5 +1003d158: eb09 030c add.w r3, r9, ip +1003d15c: f640 6194 movw r1, #3732 ; 0xe94 +1003d160: f04f 32ff mov.w r2, #4294967295 +1003d164: 4620 mov r0, r4 +1003d166: 9302 str r3, [sp, #8] +1003d168: f8cd c00c str.w ip, [sp, #12] +1003d16c: f7fc ffff bl 1003a16e +1003d170: f8dd c00c ldr.w ip, [sp, #12] +1003d174: f3c0 4009 ubfx r0, r0, #16, #10 +1003d178: f849 000c str.w r0, [r9, ip] +1003d17c: f640 619c movw r1, #3740 ; 0xe9c +1003d180: 4620 mov r0, r4 +1003d182: f04f 32ff mov.w r2, #4294967295 +1003d186: f7fc fff2 bl 1003a16e +1003d18a: 9b02 ldr r3, [sp, #8] +1003d18c: f3c0 4009 ubfx r0, r0, #16, #10 +1003d190: 6058 str r0, [r3, #4] +1003d192: 4628 mov r0, r5 +1003d194: 4641 mov r1, r8 +1003d196: f7ff fa3f bl 1003c618 +1003d19a: 2803 cmp r0, #3 +1003d19c: d10b bne.n 1003d1b6 +1003d19e: 4b54 ldr r3, [pc, #336] ; (1003d2f0 ) +1003d1a0: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1003d1a4: e9d3 0102 ldrd r0, r1, [r3, #8] +1003d1a8: 2300 movs r3, #0 +1003d1aa: 4002 ands r2, r0 +1003d1ac: 400b ands r3, r1 +1003d1ae: ea52 0103 orrs.w r1, r2, r3 +1003d1b2: d107 bne.n 1003d1c4 +1003d1b4: e00d b.n 1003d1d2 +1003d1b6: 4628 mov r0, r5 +1003d1b8: 4641 mov r1, r8 +1003d1ba: f7ff fa2d bl 1003c618 +1003d1be: 2803 cmp r0, #3 +1003d1c0: d120 bne.n 1003d204 +1003d1c2: e7ec b.n 1003d19e +1003d1c4: 4b4b ldr r3, [pc, #300] ; (1003d2f4 ) +1003d1c6: 681b ldr r3, [r3, #0] +1003d1c8: b11b cbz r3, 1003d1d2 +1003d1ca: 4b4b ldr r3, [pc, #300] ; (1003d2f8 ) +1003d1cc: 6d58 ldr r0, [r3, #84] ; 0x54 +1003d1ce: f7dd fcd7 bl 1001ab80 +1003d1d2: f640 61a4 movw r1, #3748 ; 0xea4 +1003d1d6: f04f 32ff mov.w r2, #4294967295 +1003d1da: 4620 mov r0, r4 +1003d1dc: f7fc ffc7 bl 1003a16e +1003d1e0: eb09 1947 add.w r9, r9, r7, lsl #5 +1003d1e4: f3c0 4009 ubfx r0, r0, #16, #10 +1003d1e8: f8c9 0008 str.w r0, [r9, #8] +1003d1ec: f640 61ac movw r1, #3756 ; 0xeac +1003d1f0: 4620 mov r0, r4 +1003d1f2: f04f 32ff mov.w r2, #4294967295 +1003d1f6: f7fc ffba bl 1003a16e +1003d1fa: f3c0 4009 ubfx r0, r0, #16, #10 +1003d1fe: f8c9 000c str.w r0, [r9, #12] +1003d202: e012 b.n 1003d22a +1003d204: b988 cbnz r0, 1003d22a +1003d206: 4b3a ldr r3, [pc, #232] ; (1003d2f0 ) +1003d208: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1003d20c: e9d3 0102 ldrd r0, r1, [r3, #8] +1003d210: 2300 movs r3, #0 +1003d212: 4002 ands r2, r0 +1003d214: 400b ands r3, r1 +1003d216: ea52 0103 orrs.w r1, r2, r3 +1003d21a: d006 beq.n 1003d22a +1003d21c: 4b35 ldr r3, [pc, #212] ; (1003d2f4 ) +1003d21e: 681b ldr r3, [r3, #0] +1003d220: b11b cbz r3, 1003d22a +1003d222: 4b35 ldr r3, [pc, #212] ; (1003d2f8 ) +1003d224: 6d98 ldr r0, [r3, #88] ; 0x58 +1003d226: f7dd fcab bl 1001ab80 +1003d22a: 4620 mov r0, r4 +1003d22c: f640 6128 movw r1, #3624 ; 0xe28 +1003d230: f06f 02ff mvn.w r2, #255 ; 0xff +1003d234: 2300 movs r3, #0 +1003d236: f7fc ff97 bl 1003a168 +1003d23a: 2f00 cmp r7, #0 +1003d23c: d047 beq.n 1003d2ce +1003d23e: f896 19b8 ldrb.w r1, [r6, #2488] ; 0x9b8 +1003d242: b911 cbnz r1, 1003d24a +1003d244: 4628 mov r0, r5 +1003d246: f7ff fddf bl 1003ce08 <_PHY_PIModeSwitch8195A> +1003d24a: 4628 mov r0, r5 +1003d24c: 2310 movs r3, #16 +1003d24e: a914 add r1, sp, #80 ; 0x50 +1003d250: f506 624b add.w r2, r6, #3248 ; 0xcb0 +1003d254: f7ff fd64 bl 1003cd20 <_PHY_ReloadADDARegisters8195A> +1003d258: 4628 mov r0, r5 +1003d25a: a907 add r1, sp, #28 +1003d25c: 4652 mov r2, sl +1003d25e: f7ff fd79 bl 1003cd54 <_PHY_ReloadMACRegisters8195A> +1003d262: 4628 mov r0, r5 +1003d264: a90b add r1, sp, #44 ; 0x2c +1003d266: f606 5224 addw r2, r6, #3364 ; 0xd24 +1003d26a: 2309 movs r3, #9 +1003d26c: f7ff fd58 bl 1003cd20 <_PHY_ReloadADDARegisters8195A> +1003d270: 4620 mov r0, r4 +1003d272: f640 1148 movw r1, #2376 ; 0x948 +1003d276: f04f 32ff mov.w r2, #4294967295 +1003d27a: 465b mov r3, fp +1003d27c: f7fc ff74 bl 1003a168 +1003d280: 9d05 ldr r5, [sp, #20] +1003d282: 4620 mov r0, r4 +1003d284: 9500 str r5, [sp, #0] +1003d286: 2100 movs r1, #0 +1003d288: 22b0 movs r2, #176 ; 0xb0 +1003d28a: 4b12 ldr r3, [pc, #72] ; (1003d2d4 ) +1003d28c: f7fc ff72 bl 1003a174 +1003d290: 4620 mov r0, r4 +1003d292: f44f 6145 mov.w r1, #3152 ; 0xc50 +1003d296: 22ff movs r2, #255 ; 0xff +1003d298: 2350 movs r3, #80 ; 0x50 +1003d29a: f7fc ff65 bl 1003a168 +1003d29e: 9d04 ldr r5, [sp, #16] +1003d2a0: 4620 mov r0, r4 +1003d2a2: f44f 6145 mov.w r1, #3152 ; 0xc50 +1003d2a6: 22ff movs r2, #255 ; 0xff +1003d2a8: b2eb uxtb r3, r5 +1003d2aa: f7fc ff5d bl 1003a168 +1003d2ae: 4620 mov r0, r4 +1003d2b0: f44f 6163 mov.w r1, #3632 ; 0xe30 +1003d2b4: f04f 32ff mov.w r2, #4294967295 +1003d2b8: 4b10 ldr r3, [pc, #64] ; (1003d2fc ) +1003d2ba: f7fc ff55 bl 1003a168 +1003d2be: 4620 mov r0, r4 +1003d2c0: f640 6134 movw r1, #3636 ; 0xe34 +1003d2c4: f04f 32ff mov.w r2, #4294967295 +1003d2c8: 4b0c ldr r3, [pc, #48] ; (1003d2fc ) +1003d2ca: f7fc ff4d bl 1003a168 +1003d2ce: b025 add sp, #148 ; 0x94 +1003d2d0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1003d2d4: 000fffff .word 0x000fffff +1003d2d8: 03a05600 .word 0x03a05600 +1003d2dc: 000800e4 .word 0x000800e4 +1003d2e0: 25204000 .word 0x25204000 +1003d2e4: 00808000 .word 0x00808000 +1003d2e8: 01007c00 .word 0x01007c00 +1003d2ec: 01004800 .word 0x01004800 +1003d2f0: 10000720 .word 0x10000720 +1003d2f4: 10044f38 .word 0x10044f38 +1003d2f8: 10043ac4 .word 0x10043ac4 +1003d2fc: 01008c00 .word 0x01008c00 +1003d300: 100444d0 .word 0x100444d0 + +1003d304 : +1003d304: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} +1003d306: f640 5103 movw r1, #3331 ; 0xd03 +1003d30a: 4604 mov r4, r0 +1003d30c: 6807 ldr r7, [r0, #0] +1003d30e: f7fc ff19 bl 1003a144 +1003d312: 4605 mov r5, r0 +1003d314: f015 0670 ands.w r6, r5, #112 ; 0x70 +1003d318: bf19 ittee ne +1003d31a: f640 5103 movwne r1, #3331 ; 0xd03 +1003d31e: f005 028f andne.w r2, r5, #143 ; 0x8f +1003d322: f240 5122 movweq r1, #1314 ; 0x522 +1003d326: 22ff moveq r2, #255 ; 0xff +1003d328: 4620 mov r0, r4 +1003d32a: f7fc ff11 bl 1003a150 +1003d32e: 2100 movs r1, #0 +1003d330: 2218 movs r2, #24 +1003d332: f640 73ff movw r3, #4095 ; 0xfff +1003d336: 4638 mov r0, r7 +1003d338: f7f1 fcc4 bl 1002ecc4 +1003d33c: f440 4000 orr.w r0, r0, #32768 ; 0x8000 +1003d340: 9000 str r0, [sp, #0] +1003d342: 2100 movs r1, #0 +1003d344: 4620 mov r0, r4 +1003d346: 2218 movs r2, #24 +1003d348: f640 73ff movw r3, #4095 ; 0xfff +1003d34c: f7fc ff12 bl 1003a174 +1003d350: 2064 movs r0, #100 ; 0x64 +1003d352: f7fc ff1a bl 1003a18a +1003d356: 4620 mov r0, r4 +1003d358: b11e cbz r6, 1003d362 +1003d35a: f640 5103 movw r1, #3331 ; 0xd03 +1003d35e: 462a mov r2, r5 +1003d360: e002 b.n 1003d368 +1003d362: f240 5122 movw r1, #1314 ; 0x522 +1003d366: 4632 mov r2, r6 +1003d368: b003 add sp, #12 +1003d36a: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} +1003d36e: f7fc beef b.w 1003a150 + ... + +1003d374 : +1003d374: b538 push {r3, r4, r5, lr} +1003d376: 6a43 ldr r3, [r0, #36] ; 0x24 +1003d378: 4604 mov r4, r0 +1003d37a: 015b lsls r3, r3, #5 +1003d37c: d528 bpl.n 1003d3d0 +1003d37e: 2529 movs r5, #41 ; 0x29 +1003d380: f8d4 3088 ldr.w r3, [r4, #136] ; 0x88 +1003d384: 781b ldrb r3, [r3, #0] +1003d386: b12b cbz r3, 1003d394 +1003d388: 3d01 subs r5, #1 +1003d38a: d003 beq.n 1003d394 +1003d38c: 2032 movs r0, #50 ; 0x32 +1003d38e: f7fc fefc bl 1003a18a +1003d392: e7f5 b.n 1003d380 +1003d394: 2301 movs r3, #1 +1003d396: f884 3aa9 strb.w r3, [r4, #2729] ; 0xaa9 +1003d39a: 4620 mov r0, r4 +1003d39c: 2100 movs r1, #0 +1003d39e: f7ff ffb1 bl 1003d304 +1003d3a2: 2300 movs r3, #0 +1003d3a4: f884 3aa9 strb.w r3, [r4, #2729] ; 0xaa9 +1003d3a8: 4b0a ldr r3, [pc, #40] ; (1003d3d4 ) +1003d3aa: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1003d3ae: e9d3 0102 ldrd r0, r1, [r3, #8] +1003d3b2: 2300 movs r3, #0 +1003d3b4: 4002 ands r2, r0 +1003d3b6: 400b ands r3, r1 +1003d3b8: ea52 0103 orrs.w r1, r2, r3 +1003d3bc: d008 beq.n 1003d3d0 +1003d3be: 4b06 ldr r3, [pc, #24] ; (1003d3d8 ) +1003d3c0: 681b ldr r3, [r3, #0] +1003d3c2: b12b cbz r3, 1003d3d0 +1003d3c4: 4b05 ldr r3, [pc, #20] ; (1003d3dc ) +1003d3c6: 6e18 ldr r0, [r3, #96] ; 0x60 +1003d3c8: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1003d3cc: f7dd bbd8 b.w 1001ab80 +1003d3d0: bd38 pop {r3, r4, r5, pc} +1003d3d2: bf00 nop +1003d3d4: 10000720 .word 0x10000720 +1003d3d8: 10044f38 .word 0x10044f38 +1003d3dc: 10043ac4 .word 0x10043ac4 + +1003d3e0 : +1003d3e0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1003d3e4: 4fa8 ldr r7, [pc, #672] ; (1003d688 ) +1003d3e6: b0af sub sp, #188 ; 0xbc +1003d3e8: f241 63c8 movw r3, #5832 ; 0x16c8 +1003d3ec: ae05 add r6, sp, #20 +1003d3ee: 58c4 ldr r4, [r0, r3] +1003d3f0: 4605 mov r5, r0 +1003d3f2: 4688 mov r8, r1 +1003d3f4: 4694 mov ip, r2 +1003d3f6: cf0f ldmia r7!, {r0, r1, r2, r3} +1003d3f8: c60f stmia r6!, {r0, r1, r2, r3} +1003d3fa: cf0f ldmia r7!, {r0, r1, r2, r3} +1003d3fc: c60f stmia r6!, {r0, r1, r2, r3} +1003d3fe: 683b ldr r3, [r7, #0] +1003d400: 6033 str r3, [r6, #0] +1003d402: f8d4 3224 ldr.w r3, [r4, #548] ; 0x224 +1003d406: 015b lsls r3, r3, #5 +1003d408: f140 813b bpl.w 1003d682 +1003d40c: f504 7700 add.w r7, r4, #512 ; 0x200 +1003d410: f1bc 0f00 cmp.w ip, #0 +1003d414: d10a bne.n 1003d42c +1003d416: f1b8 0f00 cmp.w r8, #0 +1003d41a: d041 beq.n 1003d4a0 +1003d41c: 4628 mov r0, r5 +1003d41e: a905 add r1, sp, #20 +1003d420: f504 6250 add.w r2, r4, #3328 ; 0xd00 +1003d424: 2309 movs r3, #9 +1003d426: f7ff fc7b bl 1003cd20 <_PHY_ReloadADDARegisters8195A> +1003d42a: e12a b.n 1003d682 +1003d42c: 2600 movs r6, #0 +1003d42e: f604 1388 addw r3, r4, #2440 ; 0x988 +1003d432: 4433 add r3, r6 +1003d434: f8d3 13c0 ldr.w r1, [r3, #960] ; 0x3c0 +1003d438: f8d3 33c4 ldr.w r3, [r3, #964] ; 0x3c4 +1003d43c: b151 cbz r1, 1003d454 +1003d43e: b14b cbz r3, 1003d454 +1003d440: 4638 mov r0, r7 +1003d442: f04f 32ff mov.w r2, #4294967295 +1003d446: 3608 adds r6, #8 +1003d448: f7fc fe8e bl 1003a168 +1003d44c: 2e18 cmp r6, #24 +1003d44e: d1ee bne.n 1003d42e +1003d450: 2600 movs r6, #0 +1003d452: e000 b.n 1003d456 +1003d454: 26ff movs r6, #255 ; 0xff +1003d456: f604 5978 addw r9, r4, #3448 ; 0xd78 +1003d45a: f04f 0a00 mov.w sl, #0 +1003d45e: e899 000a ldmia.w r9, {r1, r3} +1003d462: b169 cbz r1, 1003d480 +1003d464: b163 cbz r3, 1003d480 +1003d466: 4638 mov r0, r7 +1003d468: f04f 32ff mov.w r2, #4294967295 +1003d46c: f10a 0a08 add.w sl, sl, #8 +1003d470: f7fc fe7a bl 1003a168 +1003d474: f1ba 0f10 cmp.w sl, #16 +1003d478: f109 0908 add.w r9, r9, #8 +1003d47c: d001 beq.n 1003d482 +1003d47e: e7ee b.n 1003d45e +1003d480: 26ff movs r6, #255 ; 0xff +1003d482: f8d4 3dc4 ldr.w r3, [r4, #3524] ; 0xdc4 +1003d486: 2b00 cmp r3, #0 +1003d488: d0c5 beq.n 1003d416 +1003d48a: 9300 str r3, [sp, #0] +1003d48c: 4638 mov r0, r7 +1003d48e: 2100 movs r1, #0 +1003d490: 2208 movs r2, #8 +1003d492: 4b7e ldr r3, [pc, #504] ; (1003d68c ) +1003d494: f7fc fe6e bl 1003a174 +1003d498: 2e00 cmp r6, #0 +1003d49a: f000 80f2 beq.w 1003d682 +1003d49e: e7ba b.n 1003d416 +1003d4a0: f640 1148 movw r1, #2376 ; 0x948 +1003d4a4: f04f 32ff mov.w r2, #4294967295 +1003d4a8: 4638 mov r0, r7 +1003d4aa: f7fc fe60 bl 1003a16e +1003d4ae: 22b0 movs r2, #176 ; 0xb0 +1003d4b0: 4683 mov fp, r0 +1003d4b2: 4641 mov r1, r8 +1003d4b4: 4638 mov r0, r7 +1003d4b6: 4b75 ldr r3, [pc, #468] ; (1003d68c ) +1003d4b8: f7fc fe5f bl 1003a17a +1003d4bc: 4642 mov r2, r8 +1003d4be: 9003 str r0, [sp, #12] +1003d4c0: 2300 movs r3, #0 +1003d4c2: f10d 0838 add.w r8, sp, #56 ; 0x38 +1003d4c6: f842 3008 str.w r3, [r2, r8] +1003d4ca: eb08 0102 add.w r1, r8, r2 +1003d4ce: 3204 adds r2, #4 +1003d4d0: 2a20 cmp r2, #32 +1003d4d2: 620b str r3, [r1, #32] +1003d4d4: 640b str r3, [r1, #64] ; 0x40 +1003d4d6: 660b str r3, [r1, #96] ; 0x60 +1003d4d8: d1f2 bne.n 1003d4c0 +1003d4da: 4699 mov r9, r3 +1003d4dc: 26ff movs r6, #255 ; 0xff +1003d4de: 469a mov sl, r3 +1003d4e0: 4628 mov r0, r5 +1003d4e2: a90e add r1, sp, #56 ; 0x38 +1003d4e4: 4652 mov r2, sl +1003d4e6: 2300 movs r3, #0 +1003d4e8: f7ff fd46 bl 1003cf78 +1003d4ec: f1ba 0f01 cmp.w sl, #1 +1003d4f0: d108 bne.n 1003d504 +1003d4f2: 4628 mov r0, r5 +1003d4f4: a90e add r1, sp, #56 ; 0x38 +1003d4f6: 2200 movs r2, #0 +1003d4f8: 4653 mov r3, sl +1003d4fa: f7ff fca3 bl 1003ce44 +1003d4fe: b318 cbz r0, 1003d548 +1003d500: 2600 movs r6, #0 +1003d502: e028 b.n 1003d556 +1003d504: f1ba 0f02 cmp.w sl, #2 +1003d508: d11e bne.n 1003d548 +1003d50a: 4628 mov r0, r5 +1003d50c: a90e add r1, sp, #56 ; 0x38 +1003d50e: 2200 movs r2, #0 +1003d510: 4653 mov r3, sl +1003d512: f7ff fc97 bl 1003ce44 +1003d516: 2800 cmp r0, #0 +1003d518: d1f2 bne.n 1003d500 +1003d51a: 4628 mov r0, r5 +1003d51c: a90e add r1, sp, #56 ; 0x38 +1003d51e: 2201 movs r2, #1 +1003d520: 4653 mov r3, sl +1003d522: f7ff fc8f bl 1003ce44 +1003d526: b970 cbnz r0, 1003d546 +1003d528: ab25 add r3, sp, #148 ; 0x94 +1003d52a: aa2d add r2, sp, #180 ; 0xb4 +1003d52c: f853 1f04 ldr.w r1, [r3, #4]! +1003d530: 4293 cmp r3, r2 +1003d532: 4489 add r9, r1 +1003d534: d1fa bne.n 1003d52c +1003d536: f1b9 0f00 cmp.w r9, #0 +1003d53a: bf0c ite eq +1003d53c: 26ff moveq r6, #255 ; 0xff +1003d53e: 2603 movne r6, #3 +1003d540: f04f 0a08 mov.w sl, #8 +1003d544: e000 b.n 1003d548 +1003d546: 2601 movs r6, #1 +1003d548: f10a 0a01 add.w sl, sl, #1 +1003d54c: fa5f fa8a uxtb.w sl, sl +1003d550: f1ba 0f02 cmp.w sl, #2 +1003d554: d9c4 bls.n 1003d4e0 +1003d556: ab0e add r3, sp, #56 ; 0x38 +1003d558: a82e add r0, sp, #184 ; 0xb8 +1003d55a: 681a ldr r2, [r3, #0] +1003d55c: 6899 ldr r1, [r3, #8] +1003d55e: f8d3 a010 ldr.w sl, [r3, #16] +1003d562: f8d3 c018 ldr.w ip, [r3, #24] +1003d566: 3320 adds r3, #32 +1003d568: 4283 cmp r3, r0 +1003d56a: d1f6 bne.n 1003d55a +1003d56c: 2eff cmp r6, #255 ; 0xff +1003d56e: d019 beq.n 1003d5a4 +1003d570: a92e add r1, sp, #184 ; 0xb8 +1003d572: eb01 1346 add.w r3, r1, r6, lsl #5 +1003d576: f853 1c7c ldr.w r1, [r3, #-124] +1003d57a: f853 2c80 ldr.w r2, [r3, #-128] +1003d57e: f8c4 1990 str.w r1, [r4, #2448] ; 0x990 +1003d582: f853 ac70 ldr.w sl, [r3, #-112] +1003d586: f853 1c6c ldr.w r1, [r3, #-108] +1003d58a: f8c4 298c str.w r2, [r4, #2444] ; 0x98c +1003d58e: f8c4 1998 str.w r1, [r4, #2456] ; 0x998 +1003d592: f8c4 a994 str.w sl, [r4, #2452] ; 0x994 +1003d596: f853 1c78 ldr.w r1, [r3, #-120] +1003d59a: f853 cc68 ldr.w ip, [r3, #-104] +1003d59e: f04f 0901 mov.w r9, #1 +1003d5a2: e00b b.n 1003d5bc +1003d5a4: f44f 7380 mov.w r3, #256 ; 0x100 +1003d5a8: f8c4 3994 str.w r3, [r4, #2452] ; 0x994 +1003d5ac: f8c4 398c str.w r3, [r4, #2444] ; 0x98c +1003d5b0: 2300 movs r3, #0 +1003d5b2: f8c4 3998 str.w r3, [r4, #2456] ; 0x998 +1003d5b6: f8c4 3990 str.w r3, [r4, #2448] ; 0x990 +1003d5ba: 4699 mov r9, r3 +1003d5bc: b172 cbz r2, 1003d5dc +1003d5be: f1d1 0101 rsbs r1, r1, #1 +1003d5c2: bf38 it cc +1003d5c4: 2100 movcc r1, #0 +1003d5c6: 9100 str r1, [sp, #0] +1003d5c8: 4628 mov r0, r5 +1003d5ca: 4649 mov r1, r9 +1003d5cc: aa0e add r2, sp, #56 ; 0x38 +1003d5ce: 4633 mov r3, r6 +1003d5d0: f8cd c008 str.w ip, [sp, #8] +1003d5d4: f7ff f9ea bl 1003c9ac <_PHY_PathAFillIQKMatrix8195A> +1003d5d8: f8dd c008 ldr.w ip, [sp, #8] +1003d5dc: f1ba 0f00 cmp.w sl, #0 +1003d5e0: d00a beq.n 1003d5f8 +1003d5e2: f1dc 0301 rsbs r3, ip, #1 +1003d5e6: bf38 it cc +1003d5e8: 2300 movcc r3, #0 +1003d5ea: 9300 str r3, [sp, #0] +1003d5ec: 4628 mov r0, r5 +1003d5ee: 4649 mov r1, r9 +1003d5f0: 4642 mov r2, r8 +1003d5f2: 4633 mov r3, r6 +1003d5f4: f7ff faa5 bl 1003cb42 <_PHY_PathBFillIQKMatrix8195A> +1003d5f8: f894 0034 ldrb.w r0, [r4, #52] ; 0x34 +1003d5fc: f000 fabc bl 1003db78 +1003d600: 2e03 cmp r6, #3 +1003d602: d815 bhi.n 1003d630 +1003d604: 2324 movs r3, #36 ; 0x24 +1003d606: f504 7e00 add.w lr, r4, #512 ; 0x200 +1003d60a: fb03 ee00 mla lr, r3, r0, lr +1003d60e: eb08 1646 add.w r6, r8, r6, lsl #5 +1003d612: 2300 movs r3, #0 +1003d614: 58f2 ldr r2, [r6, r3] +1003d616: eb0e 0103 add.w r1, lr, r3 +1003d61a: 3304 adds r3, #4 +1003d61c: 2b20 cmp r3, #32 +1003d61e: f8c1 27dc str.w r2, [r1, #2012] ; 0x7dc +1003d622: d1f7 bne.n 1003d614 +1003d624: 2324 movs r3, #36 ; 0x24 +1003d626: fb03 4000 mla r0, r3, r0, r4 +1003d62a: 2301 movs r3, #1 +1003d62c: f880 39d8 strb.w r3, [r0, #2520] ; 0x9d8 +1003d630: 4628 mov r0, r5 +1003d632: a905 add r1, sp, #20 +1003d634: f504 6250 add.w r2, r4, #3328 ; 0xd00 +1003d638: 2309 movs r3, #9 +1003d63a: f7ff fb40 bl 1003ccbe <_PHY_SaveADDARegisters8195A> +1003d63e: 4638 mov r0, r7 +1003d640: f640 1148 movw r1, #2376 ; 0x948 +1003d644: f04f 32ff mov.w r2, #4294967295 +1003d648: 465b mov r3, fp +1003d64a: f7fc fd8d bl 1003a168 +1003d64e: 9a03 ldr r2, [sp, #12] +1003d650: 4638 mov r0, r7 +1003d652: 9200 str r2, [sp, #0] +1003d654: 2100 movs r1, #0 +1003d656: 22b0 movs r2, #176 ; 0xb0 +1003d658: 4b0c ldr r3, [pc, #48] ; (1003d68c ) +1003d65a: f7fc fd8b bl 1003a174 +1003d65e: 4b0c ldr r3, [pc, #48] ; (1003d690 ) +1003d660: f04f 6280 mov.w r2, #67108864 ; 0x4000000 +1003d664: e9d3 0102 ldrd r0, r1, [r3, #8] +1003d668: 2300 movs r3, #0 +1003d66a: 4002 ands r2, r0 +1003d66c: 400b ands r3, r1 +1003d66e: ea52 0103 orrs.w r1, r2, r3 +1003d672: d006 beq.n 1003d682 +1003d674: 4b07 ldr r3, [pc, #28] ; (1003d694 ) +1003d676: 681b ldr r3, [r3, #0] +1003d678: b11b cbz r3, 1003d682 +1003d67a: 4b07 ldr r3, [pc, #28] ; (1003d698 ) +1003d67c: 6dd8 ldr r0, [r3, #92] ; 0x5c +1003d67e: f7dd fa7f bl 1001ab80 +1003d682: b02f add sp, #188 ; 0xbc +1003d684: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1003d688: 10044544 .word 0x10044544 +1003d68c: 000fffff .word 0x000fffff +1003d690: 10000720 .word 0x10000720 +1003d694: 10044f38 .word 0x10044f38 +1003d698: 10043ac4 .word 0x10043ac4 + +1003d69c : +1003d69c: b570 push {r4, r5, r6, lr} +1003d69e: 6805 ldr r5, [r0, #0] +1003d6a0: 4604 mov r4, r0 +1003d6a2: 4616 mov r6, r2 +1003d6a4: f000 fa44 bl 1003db30 +1003d6a8: 2100 movs r1, #0 +1003d6aa: f884 67a7 strb.w r6, [r4, #1959] ; 0x7a7 +1003d6ae: 4628 mov r0, r5 +1003d6b0: 460a mov r2, r1 +1003d6b2: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} +1003d6b6: f7ff be93 b.w 1003d3e0 + +1003d6ba : +1003d6ba: 6ac3 ldr r3, [r0, #44] ; 0x2c +1003d6bc: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 +1003d6c0: d102 bne.n 1003d6c8 +1003d6c2: 4608 mov r0, r1 +1003d6c4: f7fe bea8 b.w 1003c418 +1003d6c8: 4770 bx lr + ... + +1003d6cc : +1003d6cc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1003d6d0: f241 63c8 movw r3, #5832 ; 0x16c8 +1003d6d4: 58c4 ldr r4, [r0, r3] +1003d6d6: b09d sub sp, #116 ; 0x74 +1003d6d8: f504 7500 add.w r5, r4, #512 ; 0x200 +1003d6dc: f8d4 32b0 ldr.w r3, [r4, #688] ; 0x2b0 +1003d6e0: 4628 mov r0, r5 +1003d6e2: a913 add r1, sp, #76 ; 0x4c +1003d6e4: 881f ldrh r7, [r3, #0] +1003d6e6: f7ff ffe8 bl 1003d6ba +1003d6ea: f8d4 32b0 ldr.w r3, [r4, #688] ; 0x2b0 +1003d6ee: 2202 movs r2, #2 +1003d6f0: 801a strh r2, [r3, #0] +1003d6f2: ab0e add r3, sp, #56 ; 0x38 +1003d6f4: 9300 str r3, [sp, #0] +1003d6f6: 4628 mov r0, r5 +1003d6f8: a909 add r1, sp, #36 ; 0x24 +1003d6fa: aa0a add r2, sp, #40 ; 0x28 +1003d6fc: ab0d add r3, sp, #52 ; 0x34 +1003d6fe: 9e19 ldr r6, [sp, #100] ; 0x64 +1003d700: 47b0 blx r6 +1003d702: f8d4 32b0 ldr.w r3, [r4, #688] ; 0x2b0 +1003d706: 220c movs r2, #12 +1003d708: 801a strh r2, [r3, #0] +1003d70a: ab10 add r3, sp, #64 ; 0x40 +1003d70c: 9300 str r3, [sp, #0] +1003d70e: 4628 mov r0, r5 +1003d710: a90b add r1, sp, #44 ; 0x2c +1003d712: aa0c add r2, sp, #48 ; 0x30 +1003d714: ab0f add r3, sp, #60 ; 0x3c +1003d716: 9e19 ldr r6, [sp, #100] ; 0x64 +1003d718: 47b0 blx r6 +1003d71a: 4628 mov r0, r5 +1003d71c: a911 add r1, sp, #68 ; 0x44 +1003d71e: aa12 add r2, sp, #72 ; 0x48 +1003d720: 9b1a ldr r3, [sp, #104] ; 0x68 +1003d722: 4798 blx r3 +1003d724: f8d4 32b0 ldr.w r3, [r4, #688] ; 0x2b0 +1003d728: 4628 mov r0, r5 +1003d72a: 801f strh r7, [r3, #0] +1003d72c: f8d4 39bc ldr.w r3, [r4, #2492] ; 0x9bc +1003d730: 2100 movs r1, #0 +1003d732: 3301 adds r3, #1 +1003d734: f8c4 39bc str.w r3, [r4, #2492] ; 0x9bc +1003d738: 2301 movs r3, #1 +1003d73a: f884 399d strb.w r3, [r4, #2461] ; 0x99d +1003d73e: 9a15 ldr r2, [sp, #84] ; 0x54 +1003d740: f44f 437c mov.w r3, #64512 ; 0xfc00 +1003d744: f7fc fd19 bl 1003a17a +1003d748: f894 399f ldrb.w r3, [r4, #2463] ; 0x99f +1003d74c: 2b00 cmp r3, #0 +1003d74e: f000 81e9 beq.w 1003db24 +1003d752: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 +1003d756: 3b01 subs r3, #1 +1003d758: b2db uxtb r3, r3 +1003d75a: 2bfd cmp r3, #253 ; 0xfd +1003d75c: f200 81e2 bhi.w 1003db24 +1003d760: 49bb ldr r1, [pc, #748] ; (1003da50 ) +1003d762: f04f 7680 mov.w r6, #16777216 ; 0x1000000 +1003d766: 2700 movs r7, #0 +1003d768: e9d1 2302 ldrd r2, r3, [r1, #8] +1003d76c: 4032 ands r2, r6 +1003d76e: 403b ands r3, r7 +1003d770: ea52 0603 orrs.w r6, r2, r3 +1003d774: 4688 mov r8, r1 +1003d776: fa5f f980 uxtb.w r9, r0 +1003d77a: d007 beq.n 1003d78c +1003d77c: 4bb5 ldr r3, [pc, #724] ; (1003da54 ) +1003d77e: 681b ldr r3, [r3, #0] +1003d780: b123 cbz r3, 1003d78c +1003d782: 4bb5 ldr r3, [pc, #724] ; (1003da58 ) +1003d784: 4649 mov r1, r9 +1003d786: 6b58 ldr r0, [r3, #52] ; 0x34 +1003d788: f7dd f9fa bl 1001ab80 +1003d78c: f894 39b1 ldrb.w r3, [r4, #2481] ; 0x9b1 +1003d790: f89d 004f ldrb.w r0, [sp, #79] ; 0x4f +1003d794: 18e2 adds r2, r4, r3 +1003d796: 3301 adds r3, #1 +1003d798: b2db uxtb r3, r3 +1003d79a: 4283 cmp r3, r0 +1003d79c: f882 99a9 strb.w r9, [r2, #2473] ; 0x9a9 +1003d7a0: f884 39b1 strb.w r3, [r4, #2481] ; 0x9b1 +1003d7a4: bf04 itt eq +1003d7a6: 2300 moveq r3, #0 +1003d7a8: f884 39b1 strbeq.w r3, [r4, #2481] ; 0x9b1 +1003d7ac: 2300 movs r3, #0 +1003d7ae: 4619 mov r1, r3 +1003d7b0: 461a mov r2, r3 +1003d7b2: b2de uxtb r6, r3 +1003d7b4: 4286 cmp r6, r0 +1003d7b6: d208 bcs.n 1003d7ca +1003d7b8: 18ee adds r6, r5, r3 +1003d7ba: f896 67a9 ldrb.w r6, [r6, #1961] ; 0x7a9 +1003d7be: b116 cbz r6, 1003d7c6 +1003d7c0: 3201 adds r2, #1 +1003d7c2: 4431 add r1, r6 +1003d7c4: b2d2 uxtb r2, r2 +1003d7c6: 3301 adds r3, #1 +1003d7c8: e7f3 b.n 1003d7b2 +1003d7ca: b11a cbz r2, 1003d7d4 +1003d7cc: fbb1 f9f2 udiv r9, r1, r2 +1003d7d0: fa5f f989 uxtb.w r9, r9 +1003d7d4: f894 79a5 ldrb.w r7, [r4, #2469] ; 0x9a5 +1003d7d8: f894 39a6 ldrb.w r3, [r4, #2470] ; 0x9a6 +1003d7dc: 45b9 cmp r9, r7 +1003d7de: f894 69a7 ldrb.w r6, [r4, #2471] ; 0x9a7 +1003d7e2: bf8c ite hi +1003d7e4: ebc7 0709 rsbhi r7, r7, r9 +1003d7e8: ebc9 0707 rsbls r7, r9, r7 +1003d7ec: 4599 cmp r9, r3 +1003d7ee: bf8c ite hi +1003d7f0: ebc3 0309 rsbhi r3, r3, r9 +1003d7f4: ebc9 0303 rsbls r3, r9, r3 +1003d7f8: f89d 204e ldrb.w r2, [sp, #78] ; 0x4e +1003d7fc: 45b1 cmp r9, r6 +1003d7fe: b2db uxtb r3, r3 +1003d800: bf8c ite hi +1003d802: ebc6 0609 rsbhi r6, r6, r9 +1003d806: ebc9 0606 rsbls r6, r9, r6 +1003d80a: 429a cmp r2, r3 +1003d80c: b2ff uxtb r7, r7 +1003d80e: b2f6 uxtb r6, r6 +1003d810: d805 bhi.n 1003d81e +1003d812: 9b18 ldr r3, [sp, #96] ; 0x60 +1003d814: f884 99a6 strb.w r9, [r4, #2470] ; 0x9a6 +1003d818: b10b cbz r3, 1003d81e +1003d81a: 4628 mov r0, r5 +1003d81c: 4798 blx r3 +1003d81e: b117 cbz r7, 1003d826 +1003d820: f894 399f ldrb.w r3, [r4, #2463] ; 0x99f +1003d824: b953 cbnz r3, 1003d83c +1003d826: f89d 2050 ldrb.w r2, [sp, #80] ; 0x50 +1003d82a: 2300 movs r3, #0 +1003d82c: 2a00 cmp r2, #0 +1003d82e: f000 80c3 beq.w 1003d9b8 +1003d832: f884 39c6 strb.w r3, [r4, #2502] ; 0x9c6 +1003d836: f884 39c2 strb.w r3, [r4, #2498] ; 0x9c2 +1003d83a: e0bd b.n 1003d9b8 +1003d83c: f894 e044 ldrb.w lr, [r4, #68] ; 0x44 +1003d840: f04f 7280 mov.w r2, #16777216 ; 0x1000000 +1003d844: 45f1 cmp r9, lr +1003d846: bf8c ite hi +1003d848: ebce 0709 rsbhi r7, lr, r9 +1003d84c: ebc9 070e rsbls r7, r9, lr +1003d850: 2300 movs r3, #0 +1003d852: e9d8 0102 ldrd r0, r1, [r8, #8] +1003d856: b2ff uxtb r7, r7 +1003d858: 4002 ands r2, r0 +1003d85a: 400b ands r3, r1 +1003d85c: 2f1d cmp r7, #29 +1003d85e: bf28 it cs +1003d860: 271d movcs r7, #29 +1003d862: ea52 0a03 orrs.w sl, r2, r3 +1003d866: d00c beq.n 1003d882 +1003d868: 4b7a ldr r3, [pc, #488] ; (1003da54 ) +1003d86a: 681b ldr r3, [r3, #0] +1003d86c: b14b cbz r3, 1003d882 +1003d86e: f894 303d ldrb.w r3, [r4, #61] ; 0x3d +1003d872: 4639 mov r1, r7 +1003d874: 9300 str r3, [sp, #0] +1003d876: 4b78 ldr r3, [pc, #480] ; (1003da58 ) +1003d878: 464a mov r2, r9 +1003d87a: 6b98 ldr r0, [r3, #56] ; 0x38 +1003d87c: 4673 mov r3, lr +1003d87e: f7dd f97f bl 1001ab80 +1003d882: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 +1003d886: f894 19c7 ldrb.w r1, [r4, #2503] ; 0x9c7 +1003d88a: 454b cmp r3, r9 +1003d88c: f894 29c3 ldrb.w r2, [r4, #2499] ; 0x9c3 +1003d890: f894 39ca ldrb.w r3, [r4, #2506] ; 0x9ca +1003d894: f884 19c8 strb.w r1, [r4, #2504] ; 0x9c8 +1003d898: d213 bcs.n 1003d8c2 +1003d89a: 990b ldr r1, [sp, #44] ; 0x2c +1003d89c: 5dc8 ldrb r0, [r1, r7] +1003d89e: f884 09c7 strb.w r0, [r4, #2503] ; 0x9c7 +1003d8a2: 5dc9 ldrb r1, [r1, r7] +1003d8a4: f884 29c4 strb.w r2, [r4, #2500] ; 0x9c4 +1003d8a8: 9a09 ldr r2, [sp, #36] ; 0x24 +1003d8aa: f884 1df2 strb.w r1, [r4, #3570] ; 0xdf2 +1003d8ae: 5dd1 ldrb r1, [r2, r7] +1003d8b0: f884 19c3 strb.w r1, [r4, #2499] ; 0x9c3 +1003d8b4: 5dd2 ldrb r2, [r2, r7] +1003d8b6: f884 39cb strb.w r3, [r4, #2507] ; 0x9cb +1003d8ba: f884 2df3 strb.w r2, [r4, #3571] ; 0xdf3 +1003d8be: 9a11 ldr r2, [sp, #68] ; 0x44 +1003d8c0: e016 b.n 1003d8f0 +1003d8c2: 990c ldr r1, [sp, #48] ; 0x30 +1003d8c4: 5dc8 ldrb r0, [r1, r7] +1003d8c6: 4240 negs r0, r0 +1003d8c8: f884 09c7 strb.w r0, [r4, #2503] ; 0x9c7 +1003d8cc: 5dc9 ldrb r1, [r1, r7] +1003d8ce: f884 29c4 strb.w r2, [r4, #2500] ; 0x9c4 +1003d8d2: 4249 negs r1, r1 +1003d8d4: 9a0a ldr r2, [sp, #40] ; 0x28 +1003d8d6: f884 1df2 strb.w r1, [r4, #3570] ; 0xdf2 +1003d8da: 5dd1 ldrb r1, [r2, r7] +1003d8dc: 4249 negs r1, r1 +1003d8de: f884 19c3 strb.w r1, [r4, #2499] ; 0x9c3 +1003d8e2: 5dd2 ldrb r2, [r2, r7] +1003d8e4: f884 39cb strb.w r3, [r4, #2507] ; 0x9cb +1003d8e8: 4252 negs r2, r2 +1003d8ea: f884 2df3 strb.w r2, [r4, #3571] ; 0xdf3 +1003d8ee: 9a12 ldr r2, [sp, #72] ; 0x48 +1003d8f0: f812 8007 ldrb.w r8, [r2, r7] +1003d8f4: f89d b04d ldrb.w fp, [sp, #77] ; 0x4d +1003d8f8: f884 89ca strb.w r8, [r4, #2506] ; 0x9ca +1003d8fc: f89d e04c ldrb.w lr, [sp, #76] ; 0x4c +1003d900: ebb8 0803 subs.w r8, r8, r3 +1003d904: f10b 33ff add.w r3, fp, #4294967295 +1003d908: b2db uxtb r3, r3 +1003d90a: f89d c050 ldrb.w ip, [sp, #80] ; 0x50 +1003d90e: 9305 str r3, [sp, #20] +1003d910: f10e 33ff add.w r3, lr, #4294967295 +1003d914: f504 7000 add.w r0, r4, #512 ; 0x200 +1003d918: b2db uxtb r3, r3 +1003d91a: bf18 it ne +1003d91c: f04f 0801 movne.w r8, #1 +1003d920: f8cd c010 str.w ip, [sp, #16] +1003d924: 9306 str r3, [sp, #24] +1003d926: 9002 str r0, [sp, #8] +1003d928: 4601 mov r1, r0 +1003d92a: 2200 movs r2, #0 +1003d92c: f8dd a010 ldr.w sl, [sp, #16] +1003d930: b2d3 uxtb r3, r2 +1003d932: 4553 cmp r3, sl +1003d934: d242 bcs.n 1003d9bc +1003d936: f8dd a008 ldr.w sl, [sp, #8] +1003d93a: 1b0b subs r3, r1, r4 +1003d93c: 4453 add r3, sl +1003d93e: f893 05c8 ldrb.w r0, [r3, #1480] ; 0x5c8 +1003d942: f893 a5c7 ldrb.w sl, [r3, #1479] ; 0x5c7 +1003d946: 3201 adds r2, #1 +1003d948: 4550 cmp r0, sl +1003d94a: bf14 ite ne +1003d94c: ebc0 000a rsbne r0, r0, sl +1003d950: 2000 moveq r0, #0 +1003d952: f893 a5c3 ldrb.w sl, [r3, #1475] ; 0x5c3 +1003d956: f883 05c6 strb.w r0, [r3, #1478] ; 0x5c6 +1003d95a: f893 05c4 ldrb.w r0, [r3, #1476] ; 0x5c4 +1003d95e: 3101 adds r1, #1 +1003d960: 4550 cmp r0, sl +1003d962: bf14 ite ne +1003d964: ebc0 000a rsbne r0, r0, sl +1003d968: 2000 moveq r0, #0 +1003d96a: f883 05c2 strb.w r0, [r3, #1474] ; 0x5c2 +1003d96e: f893 a5c6 ldrb.w sl, [r3, #1478] ; 0x5c6 +1003d972: f893 09ea ldrb.w r0, [r3, #2538] ; 0x9ea +1003d976: f893 c5c2 ldrb.w ip, [r3, #1474] ; 0x5c2 +1003d97a: 4450 add r0, sl +1003d97c: b2c0 uxtb r0, r0 +1003d97e: f893 a9ee ldrb.w sl, [r3, #2542] ; 0x9ee +1003d982: 4583 cmp fp, r0 +1003d984: 44e2 add sl, ip +1003d986: bfd8 it le +1003d988: f8dd c014 ldrle.w ip, [sp, #20] +1003d98c: f8cd a01c str.w sl, [sp, #28] +1003d990: fa5f fa8a uxtb.w sl, sl +1003d994: f883 05c5 strb.w r0, [r3, #1477] ; 0x5c5 +1003d998: bfd8 it le +1003d99a: f883 c5c5 strble.w ip, [r3, #1477] ; 0x5c5 +1003d99e: 45d6 cmp lr, sl +1003d9a0: f883 09e8 strb.w r0, [r3, #2536] ; 0x9e8 +1003d9a4: bfd8 it le +1003d9a6: 9806 ldrle r0, [sp, #24] +1003d9a8: f883 a5c1 strb.w sl, [r3, #1473] ; 0x5c1 +1003d9ac: f883 a9ec strb.w sl, [r3, #2540] ; 0x9ec +1003d9b0: bfd8 it le +1003d9b2: f883 05c1 strble.w r0, [r3, #1473] ; 0x5c1 +1003d9b6: e7b9 b.n 1003d92c +1003d9b8: f04f 0800 mov.w r8, #0 +1003d9bc: f994 39c6 ldrsb.w r3, [r4, #2502] ; 0x9c6 +1003d9c0: b91b cbnz r3, 1003d9ca +1003d9c2: f994 39c2 ldrsb.w r3, [r4, #2498] ; 0x9c2 +1003d9c6: 2b00 cmp r3, #0 +1003d9c8: d070 beq.n 1003daac +1003d9ca: 2f00 cmp r7, #0 +1003d9cc: d06e beq.n 1003daac +1003d9ce: f894 399f ldrb.w r3, [r4, #2463] ; 0x99f +1003d9d2: 2b00 cmp r3, #0 +1003d9d4: d06a beq.n 1003daac +1003d9d6: 2301 movs r3, #1 +1003d9d8: f884 39c9 strb.w r3, [r4, #2505] ; 0x9c9 +1003d9dc: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 +1003d9e0: 454b cmp r3, r9 +1003d9e2: f8d4 322c ldr.w r3, [r4, #556] ; 0x22c +1003d9e6: d239 bcs.n 1003da5c +1003d9e8: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 +1003d9ec: d11c bne.n 1003da28 +1003d9ee: f04f 0a00 mov.w sl, #0 +1003d9f2: f89d 3050 ldrb.w r3, [sp, #80] ; 0x50 +1003d9f6: fa5f f28a uxtb.w r2, sl +1003d9fa: 4293 cmp r3, r2 +1003d9fc: f10a 0a01 add.w sl, sl, #1 +1003da00: d905 bls.n 1003da0e +1003da02: 4628 mov r0, r5 +1003da04: 2101 movs r1, #1 +1003da06: 2300 movs r3, #0 +1003da08: 9f16 ldr r7, [sp, #88] ; 0x58 +1003da0a: 47b8 blx r7 +1003da0c: e7f1 b.n 1003d9f2 +1003da0e: f89d 3050 ldrb.w r3, [sp, #80] ; 0x50 +1003da12: 2b00 cmp r3, #0 +1003da14: d048 beq.n 1003daa8 +1003da16: f894 3dec ldrb.w r3, [r4, #3564] ; 0xdec +1003da1a: f884 3dee strb.w r3, [r4, #3566] ; 0xdee +1003da1e: f894 3de8 ldrb.w r3, [r4, #3560] ; 0xde8 +1003da22: f884 3dea strb.w r3, [r4, #3562] ; 0xdea +1003da26: e03f b.n 1003daa8 +1003da28: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 +1003da2c: d1ef bne.n 1003da0e +1003da2e: f04f 0a00 mov.w sl, #0 +1003da32: f89d 3050 ldrb.w r3, [sp, #80] ; 0x50 +1003da36: fa5f f28a uxtb.w r2, sl +1003da3a: 4293 cmp r3, r2 +1003da3c: f10a 0a01 add.w sl, sl, #1 +1003da40: d9e5 bls.n 1003da0e +1003da42: 4628 mov r0, r5 +1003da44: 2101 movs r1, #1 +1003da46: 2300 movs r3, #0 +1003da48: 9f16 ldr r7, [sp, #88] ; 0x58 +1003da4a: 47b8 blx r7 +1003da4c: e7f1 b.n 1003da32 +1003da4e: bf00 nop +1003da50: 10000720 .word 0x10000720 +1003da54: 10044f38 .word 0x10044f38 +1003da58: 10043ac4 .word 0x10043ac4 +1003da5c: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 +1003da60: d10f bne.n 1003da82 +1003da62: f04f 0a00 mov.w sl, #0 +1003da66: f89d 3050 ldrb.w r3, [sp, #80] ; 0x50 +1003da6a: fa5f f28a uxtb.w r2, sl +1003da6e: 4293 cmp r3, r2 +1003da70: f10a 0a01 add.w sl, sl, #1 +1003da74: d9cb bls.n 1003da0e +1003da76: 4628 mov r0, r5 +1003da78: 2101 movs r1, #1 +1003da7a: 2300 movs r3, #0 +1003da7c: 9f16 ldr r7, [sp, #88] ; 0x58 +1003da7e: 47b8 blx r7 +1003da80: e7f1 b.n 1003da66 +1003da82: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 +1003da86: d1c2 bne.n 1003da0e +1003da88: f04f 0a00 mov.w sl, #0 +1003da8c: f89d 3050 ldrb.w r3, [sp, #80] ; 0x50 +1003da90: fa5f f28a uxtb.w r2, sl +1003da94: 4293 cmp r3, r2 +1003da96: f10a 0a01 add.w sl, sl, #1 +1003da9a: d9b8 bls.n 1003da0e +1003da9c: 4628 mov r0, r5 +1003da9e: 2101 movs r1, #1 +1003daa0: 2300 movs r3, #0 +1003daa2: 9f16 ldr r7, [sp, #88] ; 0x58 +1003daa4: 47b8 blx r7 +1003daa6: e7f1 b.n 1003da8c +1003daa8: f884 99a5 strb.w r9, [r4, #2469] ; 0x9a5 +1003daac: f1b8 0f00 cmp.w r8, #0 +1003dab0: d009 beq.n 1003dac6 +1003dab2: f894 399f ldrb.w r3, [r4, #2463] ; 0x99f +1003dab6: b133 cbz r3, 1003dac6 +1003dab8: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 +1003dabc: 2bff cmp r3, #255 ; 0xff +1003dabe: d002 beq.n 1003dac6 +1003dac0: 4628 mov r0, r5 +1003dac2: 9b1b ldr r3, [sp, #108] ; 0x6c +1003dac4: 4798 blx r3 +1003dac6: f89d 304e ldrb.w r3, [sp, #78] ; 0x4e +1003daca: 42b3 cmp r3, r6 +1003dacc: d808 bhi.n 1003dae0 +1003dace: f894 3cac ldrb.w r3, [r4, #3244] ; 0xcac +1003dad2: b92b cbnz r3, 1003dae0 +1003dad4: 4631 mov r1, r6 +1003dad6: 4628 mov r0, r5 +1003dad8: 464a mov r2, r9 +1003dada: 2308 movs r3, #8 +1003dadc: 9e17 ldr r6, [sp, #92] ; 0x5c +1003dade: 47b0 blx r6 +1003dae0: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 +1003dae4: 4628 mov r0, r5 +1003dae6: 3b05 subs r3, #5 +1003dae8: b2db uxtb r3, r3 +1003daea: 4599 cmp r9, r3 +1003daec: f04f 0100 mov.w r1, #0 +1003daf0: f04f 0286 mov.w r2, #134 ; 0x86 +1003daf4: f04f 33ff mov.w r3, #4294967295 +1003daf8: d905 bls.n 1003db06 +1003dafa: f7fc fb3e bl 1003a17a +1003dafe: 282a cmp r0, #42 ; 0x2a +1003db00: d00d beq.n 1003db1e +1003db02: 232a movs r3, #42 ; 0x2a +1003db04: e004 b.n 1003db10 +1003db06: f7fc fb38 bl 1003a17a +1003db0a: 283b cmp r0, #59 ; 0x3b +1003db0c: d007 beq.n 1003db1e +1003db0e: 233b movs r3, #59 ; 0x3b +1003db10: 9300 str r3, [sp, #0] +1003db12: 4628 mov r0, r5 +1003db14: 2100 movs r1, #0 +1003db16: 2286 movs r2, #134 ; 0x86 +1003db18: 4b04 ldr r3, [pc, #16] ; (1003db2c ) +1003db1a: f7fc fb2b bl 1003a174 +1003db1e: 2300 movs r3, #0 +1003db20: f884 399c strb.w r3, [r4, #2460] ; 0x99c +1003db24: b01d add sp, #116 ; 0x74 +1003db26: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1003db2a: bf00 nop +1003db2c: 000fffff .word 0x000fffff + +1003db30 : +1003db30: 6803 ldr r3, [r0, #0] +1003db32: 881b ldrh r3, [r3, #0] +1003db34: 3b0b subs r3, #11 +1003db36: b29b uxth r3, r3 +1003db38: 2b01 cmp r3, #1 +1003db3a: d81c bhi.n 1003db76 +1003db3c: 2200 movs r2, #0 +1003db3e: f44f 7380 mov.w r3, #256 ; 0x100 +1003db42: 3224 adds r2, #36 ; 0x24 +1003db44: f8c0 37f4 str.w r3, [r0, #2036] ; 0x7f4 +1003db48: f8c0 37ec str.w r3, [r0, #2028] ; 0x7ec +1003db4c: f8c0 37e4 str.w r3, [r0, #2020] ; 0x7e4 +1003db50: f8c0 37dc str.w r3, [r0, #2012] ; 0x7dc +1003db54: f5b2 7ffc cmp.w r2, #504 ; 0x1f8 +1003db58: f04f 0300 mov.w r3, #0 +1003db5c: f8c0 37f8 str.w r3, [r0, #2040] ; 0x7f8 +1003db60: f8c0 37f0 str.w r3, [r0, #2032] ; 0x7f0 +1003db64: f8c0 37e8 str.w r3, [r0, #2024] ; 0x7e8 +1003db68: f8c0 37e0 str.w r3, [r0, #2016] ; 0x7e0 +1003db6c: f880 37d8 strb.w r3, [r0, #2008] ; 0x7d8 +1003db70: f100 0024 add.w r0, r0, #36 ; 0x24 +1003db74: d1e3 bne.n 1003db3e +1003db76: 4770 bx lr + +1003db78 : +1003db78: b5f0 push {r4, r5, r6, r7, lr} +1003db7a: 4b13 ldr r3, [pc, #76] ; (1003dbc8 ) +1003db7c: b091 sub sp, #68 ; 0x44 +1003db7e: aa01 add r2, sp, #4 +1003db80: 4605 mov r5, r0 +1003db82: f103 0738 add.w r7, r3, #56 ; 0x38 +1003db86: 4616 mov r6, r2 +1003db88: 6818 ldr r0, [r3, #0] +1003db8a: 6859 ldr r1, [r3, #4] +1003db8c: 4614 mov r4, r2 +1003db8e: c403 stmia r4!, {r0, r1} +1003db90: 3308 adds r3, #8 +1003db92: 42bb cmp r3, r7 +1003db94: 4622 mov r2, r4 +1003db96: d1f7 bne.n 1003db88 +1003db98: 8819 ldrh r1, [r3, #0] +1003db9a: 789b ldrb r3, [r3, #2] +1003db9c: 2d0e cmp r5, #14 +1003db9e: 8021 strh r1, [r4, #0] +1003dba0: 70a3 strb r3, [r4, #2] +1003dba2: d90d bls.n 1003dbc0 +1003dba4: 2300 movs r3, #0 +1003dba6: 18f2 adds r2, r6, r3 +1003dba8: 7b92 ldrb r2, [r2, #14] +1003dbaa: f103 000e add.w r0, r3, #14 +1003dbae: 42aa cmp r2, r5 +1003dbb0: b2c0 uxtb r0, r0 +1003dbb2: d102 bne.n 1003dbba +1003dbb4: 380d subs r0, #13 +1003dbb6: b2c0 uxtb r0, r0 +1003dbb8: e003 b.n 1003dbc2 +1003dbba: 3301 adds r3, #1 +1003dbbc: 2b2d cmp r3, #45 ; 0x2d +1003dbbe: d1f2 bne.n 1003dba6 +1003dbc0: 2000 movs r0, #0 +1003dbc2: b011 add sp, #68 ; 0x44 +1003dbc4: bdf0 pop {r4, r5, r6, r7, pc} +1003dbc6: bf00 nop +1003dbc8: 10044568 .word 0x10044568 + +1003dbcc : +1003dbcc: b510 push {r4, lr} +1003dbce: 4c0b ldr r4, [pc, #44] ; (1003dbfc ) +1003dbd0: 6823 ldr r3, [r4, #0] +1003dbd2: 2b01 cmp r3, #1 +1003dbd4: f04f 0300 mov.w r3, #0 +1003dbd8: d00e beq.n 1003dbf8 +1003dbda: 4809 ldr r0, [pc, #36] ; (1003dc00 ) +1003dbdc: 2208 movs r2, #8 +1003dbde: 7043 strb r3, [r0, #1] +1003dbe0: 4b08 ldr r3, [pc, #32] ; (1003dc04 ) +1003dbe2: 70c2 strb r2, [r0, #3] +1003dbe4: 681a ldr r2, [r3, #0] +1003dbe6: f422 3200 bic.w r2, r2, #131072 ; 0x20000 +1003dbea: 601a str r2, [r3, #0] +1003dbec: 4b06 ldr r3, [pc, #24] ; (1003dc08 ) +1003dbee: 4798 blx r3 +1003dbf0: b918 cbnz r0, 1003dbfa +1003dbf2: 2301 movs r3, #1 +1003dbf4: 6023 str r3, [r4, #0] +1003dbf6: bd10 pop {r4, pc} +1003dbf8: 4618 mov r0, r3 +1003dbfa: bd10 pop {r4, pc} +1003dbfc: 1004e5a0 .word 0x1004e5a0 +1003dc00: 1004e0a0 .word 0x1004e0a0 +1003dc04: 10000310 .word 0x10000310 +1003dc08: 00006ea9 .word 0x00006ea9 + +1003dc0c <__aeabi_llsr>: +1003dc0c: 40d0 lsrs r0, r2 +1003dc0e: 1c0b adds r3, r1, #0 +1003dc10: 40d1 lsrs r1, r2 +1003dc12: 469c mov ip, r3 +1003dc14: 3a20 subs r2, #32 +1003dc16: 40d3 lsrs r3, r2 +1003dc18: 4318 orrs r0, r3 +1003dc1a: 4252 negs r2, r2 +1003dc1c: 4663 mov r3, ip +1003dc1e: 4093 lsls r3, r2 +1003dc20: 4318 orrs r0, r3 +1003dc22: 4770 bx lr + +1003dc24 : +1003dc24: 4603 mov r3, r0 +1003dc26: 4402 add r2, r0 +1003dc28: 4293 cmp r3, r2 +1003dc2a: d100 bne.n 1003dc2e +1003dc2c: 4770 bx lr +1003dc2e: f803 1b01 strb.w r1, [r3], #1 +1003dc32: e7f9 b.n 1003dc28 + +1003dc34 <_free_r>: +1003dc34: b538 push {r3, r4, r5, lr} +1003dc36: 4605 mov r5, r0 +1003dc38: 2900 cmp r1, #0 +1003dc3a: d043 beq.n 1003dcc4 <_free_r+0x90> +1003dc3c: f851 3c04 ldr.w r3, [r1, #-4] +1003dc40: 1f0c subs r4, r1, #4 +1003dc42: 2b00 cmp r3, #0 +1003dc44: bfb8 it lt +1003dc46: 18e4 addlt r4, r4, r3 +1003dc48: f000 f906 bl 1003de58 <__malloc_lock> +1003dc4c: 4a1e ldr r2, [pc, #120] ; (1003dcc8 <_free_r+0x94>) +1003dc4e: 6813 ldr r3, [r2, #0] +1003dc50: 4610 mov r0, r2 +1003dc52: b933 cbnz r3, 1003dc62 <_free_r+0x2e> +1003dc54: 6063 str r3, [r4, #4] +1003dc56: 6014 str r4, [r2, #0] +1003dc58: 4628 mov r0, r5 +1003dc5a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} +1003dc5e: f000 b8fc b.w 1003de5a <__malloc_unlock> +1003dc62: 42a3 cmp r3, r4 +1003dc64: d90b bls.n 1003dc7e <_free_r+0x4a> +1003dc66: 6821 ldr r1, [r4, #0] +1003dc68: 1862 adds r2, r4, r1 +1003dc6a: 4293 cmp r3, r2 +1003dc6c: bf01 itttt eq +1003dc6e: 681a ldreq r2, [r3, #0] +1003dc70: 685b ldreq r3, [r3, #4] +1003dc72: 1852 addeq r2, r2, r1 +1003dc74: 6022 streq r2, [r4, #0] +1003dc76: 6063 str r3, [r4, #4] +1003dc78: 6004 str r4, [r0, #0] +1003dc7a: e7ed b.n 1003dc58 <_free_r+0x24> +1003dc7c: 4613 mov r3, r2 +1003dc7e: 685a ldr r2, [r3, #4] +1003dc80: b10a cbz r2, 1003dc86 <_free_r+0x52> +1003dc82: 42a2 cmp r2, r4 +1003dc84: d9fa bls.n 1003dc7c <_free_r+0x48> +1003dc86: 6819 ldr r1, [r3, #0] +1003dc88: 1858 adds r0, r3, r1 +1003dc8a: 42a0 cmp r0, r4 +1003dc8c: d10b bne.n 1003dca6 <_free_r+0x72> +1003dc8e: 6820 ldr r0, [r4, #0] +1003dc90: 4401 add r1, r0 +1003dc92: 1858 adds r0, r3, r1 +1003dc94: 4282 cmp r2, r0 +1003dc96: 6019 str r1, [r3, #0] +1003dc98: d1de bne.n 1003dc58 <_free_r+0x24> +1003dc9a: 6810 ldr r0, [r2, #0] +1003dc9c: 6852 ldr r2, [r2, #4] +1003dc9e: 4401 add r1, r0 +1003dca0: 6019 str r1, [r3, #0] +1003dca2: 605a str r2, [r3, #4] +1003dca4: e7d8 b.n 1003dc58 <_free_r+0x24> +1003dca6: d902 bls.n 1003dcae <_free_r+0x7a> +1003dca8: 230c movs r3, #12 +1003dcaa: 602b str r3, [r5, #0] +1003dcac: e7d4 b.n 1003dc58 <_free_r+0x24> +1003dcae: 6820 ldr r0, [r4, #0] +1003dcb0: 1821 adds r1, r4, r0 +1003dcb2: 428a cmp r2, r1 +1003dcb4: bf01 itttt eq +1003dcb6: 6811 ldreq r1, [r2, #0] +1003dcb8: 6852 ldreq r2, [r2, #4] +1003dcba: 1809 addeq r1, r1, r0 +1003dcbc: 6021 streq r1, [r4, #0] +1003dcbe: 6062 str r2, [r4, #4] +1003dcc0: 605c str r4, [r3, #4] +1003dcc2: e7c9 b.n 1003dc58 <_free_r+0x24> +1003dcc4: bd38 pop {r3, r4, r5, pc} +1003dcc6: bf00 nop +1003dcc8: 1004e5a4 .word 0x1004e5a4 + +1003dccc <_malloc_r>: +1003dccc: b570 push {r4, r5, r6, lr} +1003dcce: 1ccd adds r5, r1, #3 +1003dcd0: f025 0503 bic.w r5, r5, #3 +1003dcd4: 3508 adds r5, #8 +1003dcd6: 2d0c cmp r5, #12 +1003dcd8: bf38 it cc +1003dcda: 250c movcc r5, #12 +1003dcdc: 2d00 cmp r5, #0 +1003dcde: 4606 mov r6, r0 +1003dce0: db01 blt.n 1003dce6 <_malloc_r+0x1a> +1003dce2: 42a9 cmp r1, r5 +1003dce4: d903 bls.n 1003dcee <_malloc_r+0x22> +1003dce6: 230c movs r3, #12 +1003dce8: 6033 str r3, [r6, #0] +1003dcea: 2000 movs r0, #0 +1003dcec: bd70 pop {r4, r5, r6, pc} +1003dcee: f000 f8b3 bl 1003de58 <__malloc_lock> +1003dcf2: 4a23 ldr r2, [pc, #140] ; (1003dd80 <_malloc_r+0xb4>) +1003dcf4: 6814 ldr r4, [r2, #0] +1003dcf6: 4621 mov r1, r4 +1003dcf8: b991 cbnz r1, 1003dd20 <_malloc_r+0x54> +1003dcfa: 4c22 ldr r4, [pc, #136] ; (1003dd84 <_malloc_r+0xb8>) +1003dcfc: 6823 ldr r3, [r4, #0] +1003dcfe: b91b cbnz r3, 1003dd08 <_malloc_r+0x3c> +1003dd00: 4630 mov r0, r6 +1003dd02: f000 f841 bl 1003dd88 <_sbrk_r> +1003dd06: 6020 str r0, [r4, #0] +1003dd08: 4629 mov r1, r5 +1003dd0a: 4630 mov r0, r6 +1003dd0c: f000 f83c bl 1003dd88 <_sbrk_r> +1003dd10: 1c43 adds r3, r0, #1 +1003dd12: d126 bne.n 1003dd62 <_malloc_r+0x96> +1003dd14: 230c movs r3, #12 +1003dd16: 4630 mov r0, r6 +1003dd18: 6033 str r3, [r6, #0] +1003dd1a: f000 f89e bl 1003de5a <__malloc_unlock> +1003dd1e: e7e4 b.n 1003dcea <_malloc_r+0x1e> +1003dd20: 680b ldr r3, [r1, #0] +1003dd22: 1b5b subs r3, r3, r5 +1003dd24: d41a bmi.n 1003dd5c <_malloc_r+0x90> +1003dd26: 2b0b cmp r3, #11 +1003dd28: d90f bls.n 1003dd4a <_malloc_r+0x7e> +1003dd2a: 600b str r3, [r1, #0] +1003dd2c: 18cc adds r4, r1, r3 +1003dd2e: 50cd str r5, [r1, r3] +1003dd30: 4630 mov r0, r6 +1003dd32: f000 f892 bl 1003de5a <__malloc_unlock> +1003dd36: f104 000b add.w r0, r4, #11 +1003dd3a: 1d23 adds r3, r4, #4 +1003dd3c: f020 0007 bic.w r0, r0, #7 +1003dd40: 1ac3 subs r3, r0, r3 +1003dd42: d01b beq.n 1003dd7c <_malloc_r+0xb0> +1003dd44: 425a negs r2, r3 +1003dd46: 50e2 str r2, [r4, r3] +1003dd48: bd70 pop {r4, r5, r6, pc} +1003dd4a: 428c cmp r4, r1 +1003dd4c: bf0b itete eq +1003dd4e: 6863 ldreq r3, [r4, #4] +1003dd50: 684b ldrne r3, [r1, #4] +1003dd52: 6013 streq r3, [r2, #0] +1003dd54: 6063 strne r3, [r4, #4] +1003dd56: bf18 it ne +1003dd58: 460c movne r4, r1 +1003dd5a: e7e9 b.n 1003dd30 <_malloc_r+0x64> +1003dd5c: 460c mov r4, r1 +1003dd5e: 6849 ldr r1, [r1, #4] +1003dd60: e7ca b.n 1003dcf8 <_malloc_r+0x2c> +1003dd62: 1cc4 adds r4, r0, #3 +1003dd64: f024 0403 bic.w r4, r4, #3 +1003dd68: 42a0 cmp r0, r4 +1003dd6a: d005 beq.n 1003dd78 <_malloc_r+0xac> +1003dd6c: 1a21 subs r1, r4, r0 +1003dd6e: 4630 mov r0, r6 +1003dd70: f000 f80a bl 1003dd88 <_sbrk_r> +1003dd74: 3001 adds r0, #1 +1003dd76: d0cd beq.n 1003dd14 <_malloc_r+0x48> +1003dd78: 6025 str r5, [r4, #0] +1003dd7a: e7d9 b.n 1003dd30 <_malloc_r+0x64> +1003dd7c: bd70 pop {r4, r5, r6, pc} +1003dd7e: bf00 nop +1003dd80: 1004e5a4 .word 0x1004e5a4 +1003dd84: 1004e5a8 .word 0x1004e5a8 + +1003dd88 <_sbrk_r>: +1003dd88: b538 push {r3, r4, r5, lr} +1003dd8a: 2300 movs r3, #0 +1003dd8c: 4c05 ldr r4, [pc, #20] ; (1003dda4 <_sbrk_r+0x1c>) +1003dd8e: 4605 mov r5, r0 +1003dd90: 4608 mov r0, r1 +1003dd92: 6023 str r3, [r4, #0] +1003dd94: f000 fd4a bl 1003e82c <_sbrk> +1003dd98: 1c43 adds r3, r0, #1 +1003dd9a: d102 bne.n 1003dda2 <_sbrk_r+0x1a> +1003dd9c: 6823 ldr r3, [r4, #0] +1003dd9e: b103 cbz r3, 1003dda2 <_sbrk_r+0x1a> +1003dda0: 602b str r3, [r5, #0] +1003dda2: bd38 pop {r3, r4, r5, pc} +1003dda4: 10049b08 .word 0x10049b08 + +1003dda8 : +1003dda8: b40e push {r1, r2, r3} +1003ddaa: f44f 7201 mov.w r2, #516 ; 0x204 +1003ddae: b530 push {r4, r5, lr} +1003ddb0: b09c sub sp, #112 ; 0x70 +1003ddb2: ac1f add r4, sp, #124 ; 0x7c +1003ddb4: f854 5b04 ldr.w r5, [r4], #4 +1003ddb8: f8ad 2014 strh.w r2, [sp, #20] +1003ddbc: 9002 str r0, [sp, #8] +1003ddbe: 9006 str r0, [sp, #24] +1003ddc0: f000 f81e bl 1003de00 +1003ddc4: 4b0b ldr r3, [pc, #44] ; (1003ddf4 ) +1003ddc6: 9003 str r0, [sp, #12] +1003ddc8: 930b str r3, [sp, #44] ; 0x2c +1003ddca: 2300 movs r3, #0 +1003ddcc: 930f str r3, [sp, #60] ; 0x3c +1003ddce: 9314 str r3, [sp, #80] ; 0x50 +1003ddd0: f64f 73ff movw r3, #65535 ; 0xffff +1003ddd4: 9007 str r0, [sp, #28] +1003ddd6: 4808 ldr r0, [pc, #32] ; (1003ddf8 ) +1003ddd8: f8ad 3016 strh.w r3, [sp, #22] +1003dddc: 462a mov r2, r5 +1003ddde: 4623 mov r3, r4 +1003dde0: a902 add r1, sp, #8 +1003dde2: 6800 ldr r0, [r0, #0] +1003dde4: 9401 str r4, [sp, #4] +1003dde6: f000 f893 bl 1003df10 <__ssvfiscanf_r> +1003ddea: b01c add sp, #112 ; 0x70 +1003ddec: e8bd 4030 ldmia.w sp!, {r4, r5, lr} +1003ddf0: b003 add sp, #12 +1003ddf2: 4770 bx lr +1003ddf4: 1003ddfd .word 0x1003ddfd +1003ddf8: 10046514 .word 0x10046514 + +1003ddfc <__seofread>: +1003ddfc: 2000 movs r0, #0 +1003ddfe: 4770 bx lr + +1003de00 : +1003de00: 4603 mov r3, r0 +1003de02: f813 2b01 ldrb.w r2, [r3], #1 +1003de06: 2a00 cmp r2, #0 +1003de08: d1fb bne.n 1003de02 +1003de0a: 1a18 subs r0, r3, r0 +1003de0c: 3801 subs r0, #1 +1003de0e: 4770 bx lr + +1003de10 <__locale_ctype_ptr_l>: +1003de10: f8d0 00ec ldr.w r0, [r0, #236] ; 0xec +1003de14: 4770 bx lr + ... + +1003de18 <__locale_ctype_ptr>: +1003de18: 4b04 ldr r3, [pc, #16] ; (1003de2c <__locale_ctype_ptr+0x14>) +1003de1a: 4a05 ldr r2, [pc, #20] ; (1003de30 <__locale_ctype_ptr+0x18>) +1003de1c: 681b ldr r3, [r3, #0] +1003de1e: 6a1b ldr r3, [r3, #32] +1003de20: 2b00 cmp r3, #0 +1003de22: bf08 it eq +1003de24: 4613 moveq r3, r2 +1003de26: f8d3 00ec ldr.w r0, [r3, #236] ; 0xec +1003de2a: 4770 bx lr +1003de2c: 10046514 .word 0x10046514 +1003de30: 10046578 .word 0x10046578 + +1003de34 <__ascii_mbtowc>: +1003de34: b082 sub sp, #8 +1003de36: b901 cbnz r1, 1003de3a <__ascii_mbtowc+0x6> +1003de38: a901 add r1, sp, #4 +1003de3a: b142 cbz r2, 1003de4e <__ascii_mbtowc+0x1a> +1003de3c: b14b cbz r3, 1003de52 <__ascii_mbtowc+0x1e> +1003de3e: 7813 ldrb r3, [r2, #0] +1003de40: 600b str r3, [r1, #0] +1003de42: 7812 ldrb r2, [r2, #0] +1003de44: 1c10 adds r0, r2, #0 +1003de46: bf18 it ne +1003de48: 2001 movne r0, #1 +1003de4a: b002 add sp, #8 +1003de4c: 4770 bx lr +1003de4e: 4610 mov r0, r2 +1003de50: e7fb b.n 1003de4a <__ascii_mbtowc+0x16> +1003de52: f06f 0001 mvn.w r0, #1 +1003de56: e7f8 b.n 1003de4a <__ascii_mbtowc+0x16> + +1003de58 <__malloc_lock>: +1003de58: 4770 bx lr + +1003de5a <__malloc_unlock>: +1003de5a: 4770 bx lr + +1003de5c <_sungetc_r>: +1003de5c: b538 push {r3, r4, r5, lr} +1003de5e: 1c4b adds r3, r1, #1 +1003de60: 4614 mov r4, r2 +1003de62: d103 bne.n 1003de6c <_sungetc_r+0x10> +1003de64: f04f 35ff mov.w r5, #4294967295 +1003de68: 4628 mov r0, r5 +1003de6a: bd38 pop {r3, r4, r5, pc} +1003de6c: 8993 ldrh r3, [r2, #12] +1003de6e: b2cd uxtb r5, r1 +1003de70: f023 0320 bic.w r3, r3, #32 +1003de74: 8193 strh r3, [r2, #12] +1003de76: 6b53 ldr r3, [r2, #52] ; 0x34 +1003de78: 6852 ldr r2, [r2, #4] +1003de7a: b18b cbz r3, 1003dea0 <_sungetc_r+0x44> +1003de7c: 6ba3 ldr r3, [r4, #56] ; 0x38 +1003de7e: 429a cmp r2, r3 +1003de80: da08 bge.n 1003de94 <_sungetc_r+0x38> +1003de82: 6823 ldr r3, [r4, #0] +1003de84: 1e5a subs r2, r3, #1 +1003de86: 6022 str r2, [r4, #0] +1003de88: f803 5c01 strb.w r5, [r3, #-1] +1003de8c: 6863 ldr r3, [r4, #4] +1003de8e: 3301 adds r3, #1 +1003de90: 6063 str r3, [r4, #4] +1003de92: e7e9 b.n 1003de68 <_sungetc_r+0xc> +1003de94: 4621 mov r1, r4 +1003de96: f000 fc3b bl 1003e710 <__submore> +1003de9a: 2800 cmp r0, #0 +1003de9c: d0f1 beq.n 1003de82 <_sungetc_r+0x26> +1003de9e: e7e1 b.n 1003de64 <_sungetc_r+0x8> +1003dea0: 6921 ldr r1, [r4, #16] +1003dea2: 6823 ldr r3, [r4, #0] +1003dea4: b151 cbz r1, 1003debc <_sungetc_r+0x60> +1003dea6: 4299 cmp r1, r3 +1003dea8: d208 bcs.n 1003debc <_sungetc_r+0x60> +1003deaa: f813 1c01 ldrb.w r1, [r3, #-1] +1003deae: 428d cmp r5, r1 +1003deb0: d104 bne.n 1003debc <_sungetc_r+0x60> +1003deb2: 3b01 subs r3, #1 +1003deb4: 3201 adds r2, #1 +1003deb6: 6023 str r3, [r4, #0] +1003deb8: 6062 str r2, [r4, #4] +1003deba: e7d5 b.n 1003de68 <_sungetc_r+0xc> +1003debc: 63e3 str r3, [r4, #60] ; 0x3c +1003debe: f104 0344 add.w r3, r4, #68 ; 0x44 +1003dec2: 6363 str r3, [r4, #52] ; 0x34 +1003dec4: 2303 movs r3, #3 +1003dec6: 63a3 str r3, [r4, #56] ; 0x38 +1003dec8: 4623 mov r3, r4 +1003deca: 6422 str r2, [r4, #64] ; 0x40 +1003decc: f803 5f46 strb.w r5, [r3, #70]! +1003ded0: 6023 str r3, [r4, #0] +1003ded2: 2301 movs r3, #1 +1003ded4: e7dc b.n 1003de90 <_sungetc_r+0x34> + +1003ded6 <__ssrefill_r>: +1003ded6: b510 push {r4, lr} +1003ded8: 460c mov r4, r1 +1003deda: 6b49 ldr r1, [r1, #52] ; 0x34 +1003dedc: b169 cbz r1, 1003defa <__ssrefill_r+0x24> +1003dede: f104 0344 add.w r3, r4, #68 ; 0x44 +1003dee2: 4299 cmp r1, r3 +1003dee4: d001 beq.n 1003deea <__ssrefill_r+0x14> +1003dee6: f7ff fea5 bl 1003dc34 <_free_r> +1003deea: 2000 movs r0, #0 +1003deec: 6c23 ldr r3, [r4, #64] ; 0x40 +1003deee: 6360 str r0, [r4, #52] ; 0x34 +1003def0: 6063 str r3, [r4, #4] +1003def2: b113 cbz r3, 1003defa <__ssrefill_r+0x24> +1003def4: 6be3 ldr r3, [r4, #60] ; 0x3c +1003def6: 6023 str r3, [r4, #0] +1003def8: bd10 pop {r4, pc} +1003defa: 6923 ldr r3, [r4, #16] +1003defc: f04f 30ff mov.w r0, #4294967295 +1003df00: 6023 str r3, [r4, #0] +1003df02: 2300 movs r3, #0 +1003df04: 6063 str r3, [r4, #4] +1003df06: 89a3 ldrh r3, [r4, #12] +1003df08: f043 0320 orr.w r3, r3, #32 +1003df0c: 81a3 strh r3, [r4, #12] +1003df0e: bd10 pop {r4, pc} + +1003df10 <__ssvfiscanf_r>: +1003df10: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1003df14: f5ad 7d25 sub.w sp, sp, #660 ; 0x294 +1003df18: 9301 str r3, [sp, #4] +1003df1a: 2300 movs r3, #0 +1003df1c: 4606 mov r6, r0 +1003df1e: 460c mov r4, r1 +1003df20: 4692 mov sl, r2 +1003df22: 270a movs r7, #10 +1003df24: 9346 str r3, [sp, #280] ; 0x118 +1003df26: 9347 str r3, [sp, #284] ; 0x11c +1003df28: 4b9f ldr r3, [pc, #636] ; (1003e1a8 <__ssvfiscanf_r+0x298>) +1003df2a: f10d 080c add.w r8, sp, #12 +1003df2e: 93a2 str r3, [sp, #648] ; 0x288 +1003df30: 4b9e ldr r3, [pc, #632] ; (1003e1ac <__ssvfiscanf_r+0x29c>) +1003df32: f8df 927c ldr.w r9, [pc, #636] ; 1003e1b0 <__ssvfiscanf_r+0x2a0> +1003df36: f8cd 8120 str.w r8, [sp, #288] ; 0x120 +1003df3a: 93a3 str r3, [sp, #652] ; 0x28c +1003df3c: f89a 3000 ldrb.w r3, [sl] +1003df40: 2b00 cmp r3, #0 +1003df42: f000 812f beq.w 1003e1a4 <__ssvfiscanf_r+0x294> +1003df46: f7ff ff67 bl 1003de18 <__locale_ctype_ptr> +1003df4a: f89a b000 ldrb.w fp, [sl] +1003df4e: 4458 add r0, fp +1003df50: 7843 ldrb r3, [r0, #1] +1003df52: f013 0308 ands.w r3, r3, #8 +1003df56: d143 bne.n 1003dfe0 <__ssvfiscanf_r+0xd0> +1003df58: f1bb 0f25 cmp.w fp, #37 ; 0x25 +1003df5c: f10a 0501 add.w r5, sl, #1 +1003df60: f040 8099 bne.w 1003e096 <__ssvfiscanf_r+0x186> +1003df64: 9345 str r3, [sp, #276] ; 0x114 +1003df66: 9343 str r3, [sp, #268] ; 0x10c +1003df68: f89a 3001 ldrb.w r3, [sl, #1] +1003df6c: 2b2a cmp r3, #42 ; 0x2a +1003df6e: d103 bne.n 1003df78 <__ssvfiscanf_r+0x68> +1003df70: 2310 movs r3, #16 +1003df72: f10a 0502 add.w r5, sl, #2 +1003df76: 9343 str r3, [sp, #268] ; 0x10c +1003df78: 7829 ldrb r1, [r5, #0] +1003df7a: 46aa mov sl, r5 +1003df7c: f1a1 0230 sub.w r2, r1, #48 ; 0x30 +1003df80: 2a09 cmp r2, #9 +1003df82: f105 0501 add.w r5, r5, #1 +1003df86: d941 bls.n 1003e00c <__ssvfiscanf_r+0xfc> +1003df88: 2203 movs r2, #3 +1003df8a: 4889 ldr r0, [pc, #548] ; (1003e1b0 <__ssvfiscanf_r+0x2a0>) +1003df8c: f000 fc06 bl 1003e79c +1003df90: b138 cbz r0, 1003dfa2 <__ssvfiscanf_r+0x92> +1003df92: eba0 0309 sub.w r3, r0, r9 +1003df96: 2001 movs r0, #1 +1003df98: 46aa mov sl, r5 +1003df9a: 4098 lsls r0, r3 +1003df9c: 9b43 ldr r3, [sp, #268] ; 0x10c +1003df9e: 4318 orrs r0, r3 +1003dfa0: 9043 str r0, [sp, #268] ; 0x10c +1003dfa2: f89a 3000 ldrb.w r3, [sl] +1003dfa6: f10a 0501 add.w r5, sl, #1 +1003dfaa: 2b67 cmp r3, #103 ; 0x67 +1003dfac: d84a bhi.n 1003e044 <__ssvfiscanf_r+0x134> +1003dfae: 2b65 cmp r3, #101 ; 0x65 +1003dfb0: f080 80b7 bcs.w 1003e122 <__ssvfiscanf_r+0x212> +1003dfb4: 2b47 cmp r3, #71 ; 0x47 +1003dfb6: d82f bhi.n 1003e018 <__ssvfiscanf_r+0x108> +1003dfb8: 2b45 cmp r3, #69 ; 0x45 +1003dfba: f080 80b2 bcs.w 1003e122 <__ssvfiscanf_r+0x212> +1003dfbe: 2b00 cmp r3, #0 +1003dfc0: f000 8082 beq.w 1003e0c8 <__ssvfiscanf_r+0x1b8> +1003dfc4: 2b25 cmp r3, #37 ; 0x25 +1003dfc6: d066 beq.n 1003e096 <__ssvfiscanf_r+0x186> +1003dfc8: 2303 movs r3, #3 +1003dfca: 9744 str r7, [sp, #272] ; 0x110 +1003dfcc: 9349 str r3, [sp, #292] ; 0x124 +1003dfce: e045 b.n 1003e05c <__ssvfiscanf_r+0x14c> +1003dfd0: 9947 ldr r1, [sp, #284] ; 0x11c +1003dfd2: 3301 adds r3, #1 +1003dfd4: 3101 adds r1, #1 +1003dfd6: 9147 str r1, [sp, #284] ; 0x11c +1003dfd8: 6861 ldr r1, [r4, #4] +1003dfda: 6023 str r3, [r4, #0] +1003dfdc: 3901 subs r1, #1 +1003dfde: 6061 str r1, [r4, #4] +1003dfe0: 6863 ldr r3, [r4, #4] +1003dfe2: 2b00 cmp r3, #0 +1003dfe4: dd0b ble.n 1003dffe <__ssvfiscanf_r+0xee> +1003dfe6: f7ff ff17 bl 1003de18 <__locale_ctype_ptr> +1003dfea: 6823 ldr r3, [r4, #0] +1003dfec: 7819 ldrb r1, [r3, #0] +1003dfee: 4408 add r0, r1 +1003dff0: 7841 ldrb r1, [r0, #1] +1003dff2: 070d lsls r5, r1, #28 +1003dff4: d4ec bmi.n 1003dfd0 <__ssvfiscanf_r+0xc0> +1003dff6: f10a 0501 add.w r5, sl, #1 +1003dffa: 46aa mov sl, r5 +1003dffc: e79e b.n 1003df3c <__ssvfiscanf_r+0x2c> +1003dffe: 9ba3 ldr r3, [sp, #652] ; 0x28c +1003e000: 4621 mov r1, r4 +1003e002: 4630 mov r0, r6 +1003e004: 4798 blx r3 +1003e006: 2800 cmp r0, #0 +1003e008: d0ed beq.n 1003dfe6 <__ssvfiscanf_r+0xd6> +1003e00a: e7f4 b.n 1003dff6 <__ssvfiscanf_r+0xe6> +1003e00c: 9b45 ldr r3, [sp, #276] ; 0x114 +1003e00e: fb07 1303 mla r3, r7, r3, r1 +1003e012: 3b30 subs r3, #48 ; 0x30 +1003e014: 9345 str r3, [sp, #276] ; 0x114 +1003e016: e7af b.n 1003df78 <__ssvfiscanf_r+0x68> +1003e018: 2b5b cmp r3, #91 ; 0x5b +1003e01a: d061 beq.n 1003e0e0 <__ssvfiscanf_r+0x1d0> +1003e01c: d80c bhi.n 1003e038 <__ssvfiscanf_r+0x128> +1003e01e: 2b58 cmp r3, #88 ; 0x58 +1003e020: d1d2 bne.n 1003dfc8 <__ssvfiscanf_r+0xb8> +1003e022: 9a43 ldr r2, [sp, #268] ; 0x10c +1003e024: f442 7200 orr.w r2, r2, #512 ; 0x200 +1003e028: 9243 str r2, [sp, #268] ; 0x10c +1003e02a: 2210 movs r2, #16 +1003e02c: 9244 str r2, [sp, #272] ; 0x110 +1003e02e: 2b6f cmp r3, #111 ; 0x6f +1003e030: bfb4 ite lt +1003e032: 2303 movlt r3, #3 +1003e034: 2304 movge r3, #4 +1003e036: e010 b.n 1003e05a <__ssvfiscanf_r+0x14a> +1003e038: 2b63 cmp r3, #99 ; 0x63 +1003e03a: d05c beq.n 1003e0f6 <__ssvfiscanf_r+0x1e6> +1003e03c: 2b64 cmp r3, #100 ; 0x64 +1003e03e: d1c3 bne.n 1003dfc8 <__ssvfiscanf_r+0xb8> +1003e040: 9744 str r7, [sp, #272] ; 0x110 +1003e042: e7f4 b.n 1003e02e <__ssvfiscanf_r+0x11e> +1003e044: 2b70 cmp r3, #112 ; 0x70 +1003e046: d042 beq.n 1003e0ce <__ssvfiscanf_r+0x1be> +1003e048: d81d bhi.n 1003e086 <__ssvfiscanf_r+0x176> +1003e04a: 2b6e cmp r3, #110 ; 0x6e +1003e04c: d059 beq.n 1003e102 <__ssvfiscanf_r+0x1f2> +1003e04e: d843 bhi.n 1003e0d8 <__ssvfiscanf_r+0x1c8> +1003e050: 2b69 cmp r3, #105 ; 0x69 +1003e052: d1b9 bne.n 1003dfc8 <__ssvfiscanf_r+0xb8> +1003e054: 2300 movs r3, #0 +1003e056: 9344 str r3, [sp, #272] ; 0x110 +1003e058: 2303 movs r3, #3 +1003e05a: 9349 str r3, [sp, #292] ; 0x124 +1003e05c: 6863 ldr r3, [r4, #4] +1003e05e: 2b00 cmp r3, #0 +1003e060: dd61 ble.n 1003e126 <__ssvfiscanf_r+0x216> +1003e062: 9b43 ldr r3, [sp, #268] ; 0x10c +1003e064: 0659 lsls r1, r3, #25 +1003e066: d56f bpl.n 1003e148 <__ssvfiscanf_r+0x238> +1003e068: 9b49 ldr r3, [sp, #292] ; 0x124 +1003e06a: 2b02 cmp r3, #2 +1003e06c: dc7c bgt.n 1003e168 <__ssvfiscanf_r+0x258> +1003e06e: ab01 add r3, sp, #4 +1003e070: 4622 mov r2, r4 +1003e072: a943 add r1, sp, #268 ; 0x10c +1003e074: 4630 mov r0, r6 +1003e076: f000 f89f bl 1003e1b8 <_scanf_chars> +1003e07a: 2801 cmp r0, #1 +1003e07c: f000 8092 beq.w 1003e1a4 <__ssvfiscanf_r+0x294> +1003e080: 2802 cmp r0, #2 +1003e082: d1ba bne.n 1003dffa <__ssvfiscanf_r+0xea> +1003e084: e01d b.n 1003e0c2 <__ssvfiscanf_r+0x1b2> +1003e086: 2b75 cmp r3, #117 ; 0x75 +1003e088: d0da beq.n 1003e040 <__ssvfiscanf_r+0x130> +1003e08a: 2b78 cmp r3, #120 ; 0x78 +1003e08c: d0c9 beq.n 1003e022 <__ssvfiscanf_r+0x112> +1003e08e: 2b73 cmp r3, #115 ; 0x73 +1003e090: d19a bne.n 1003dfc8 <__ssvfiscanf_r+0xb8> +1003e092: 2302 movs r3, #2 +1003e094: e7e1 b.n 1003e05a <__ssvfiscanf_r+0x14a> +1003e096: 6863 ldr r3, [r4, #4] +1003e098: 2b00 cmp r3, #0 +1003e09a: dd0c ble.n 1003e0b6 <__ssvfiscanf_r+0x1a6> +1003e09c: 6823 ldr r3, [r4, #0] +1003e09e: 781a ldrb r2, [r3, #0] +1003e0a0: 4593 cmp fp, r2 +1003e0a2: d17f bne.n 1003e1a4 <__ssvfiscanf_r+0x294> +1003e0a4: 3301 adds r3, #1 +1003e0a6: 6862 ldr r2, [r4, #4] +1003e0a8: 6023 str r3, [r4, #0] +1003e0aa: 9b47 ldr r3, [sp, #284] ; 0x11c +1003e0ac: 3a01 subs r2, #1 +1003e0ae: 3301 adds r3, #1 +1003e0b0: 6062 str r2, [r4, #4] +1003e0b2: 9347 str r3, [sp, #284] ; 0x11c +1003e0b4: e7a1 b.n 1003dffa <__ssvfiscanf_r+0xea> +1003e0b6: 9ba3 ldr r3, [sp, #652] ; 0x28c +1003e0b8: 4621 mov r1, r4 +1003e0ba: 4630 mov r0, r6 +1003e0bc: 4798 blx r3 +1003e0be: 2800 cmp r0, #0 +1003e0c0: d0ec beq.n 1003e09c <__ssvfiscanf_r+0x18c> +1003e0c2: 9846 ldr r0, [sp, #280] ; 0x118 +1003e0c4: 2800 cmp r0, #0 +1003e0c6: d163 bne.n 1003e190 <__ssvfiscanf_r+0x280> +1003e0c8: f04f 30ff mov.w r0, #4294967295 +1003e0cc: e066 b.n 1003e19c <__ssvfiscanf_r+0x28c> +1003e0ce: 9a43 ldr r2, [sp, #268] ; 0x10c +1003e0d0: f042 0220 orr.w r2, r2, #32 +1003e0d4: 9243 str r2, [sp, #268] ; 0x10c +1003e0d6: e7a4 b.n 1003e022 <__ssvfiscanf_r+0x112> +1003e0d8: 2308 movs r3, #8 +1003e0da: 9344 str r3, [sp, #272] ; 0x110 +1003e0dc: 2304 movs r3, #4 +1003e0de: e7bc b.n 1003e05a <__ssvfiscanf_r+0x14a> +1003e0e0: 4629 mov r1, r5 +1003e0e2: 4640 mov r0, r8 +1003e0e4: f000 f9c2 bl 1003e46c <__sccl> +1003e0e8: 9b43 ldr r3, [sp, #268] ; 0x10c +1003e0ea: 4605 mov r5, r0 +1003e0ec: f043 0340 orr.w r3, r3, #64 ; 0x40 +1003e0f0: 9343 str r3, [sp, #268] ; 0x10c +1003e0f2: 2301 movs r3, #1 +1003e0f4: e7b1 b.n 1003e05a <__ssvfiscanf_r+0x14a> +1003e0f6: 9b43 ldr r3, [sp, #268] ; 0x10c +1003e0f8: f043 0340 orr.w r3, r3, #64 ; 0x40 +1003e0fc: 9343 str r3, [sp, #268] ; 0x10c +1003e0fe: 2300 movs r3, #0 +1003e100: e7ab b.n 1003e05a <__ssvfiscanf_r+0x14a> +1003e102: 9a43 ldr r2, [sp, #268] ; 0x10c +1003e104: 06d0 lsls r0, r2, #27 +1003e106: f53f af78 bmi.w 1003dffa <__ssvfiscanf_r+0xea> +1003e10a: f012 0f01 tst.w r2, #1 +1003e10e: 9a01 ldr r2, [sp, #4] +1003e110: 9b47 ldr r3, [sp, #284] ; 0x11c +1003e112: f102 0104 add.w r1, r2, #4 +1003e116: 9101 str r1, [sp, #4] +1003e118: 6812 ldr r2, [r2, #0] +1003e11a: bf14 ite ne +1003e11c: 8013 strhne r3, [r2, #0] +1003e11e: 6013 streq r3, [r2, #0] +1003e120: e76b b.n 1003dffa <__ssvfiscanf_r+0xea> +1003e122: 2305 movs r3, #5 +1003e124: e799 b.n 1003e05a <__ssvfiscanf_r+0x14a> +1003e126: 9ba3 ldr r3, [sp, #652] ; 0x28c +1003e128: 4621 mov r1, r4 +1003e12a: 4630 mov r0, r6 +1003e12c: 4798 blx r3 +1003e12e: 2800 cmp r0, #0 +1003e130: d097 beq.n 1003e062 <__ssvfiscanf_r+0x152> +1003e132: e7c6 b.n 1003e0c2 <__ssvfiscanf_r+0x1b2> +1003e134: 9a47 ldr r2, [sp, #284] ; 0x11c +1003e136: 3201 adds r2, #1 +1003e138: 9247 str r2, [sp, #284] ; 0x11c +1003e13a: 6862 ldr r2, [r4, #4] +1003e13c: 3a01 subs r2, #1 +1003e13e: 2a00 cmp r2, #0 +1003e140: 6062 str r2, [r4, #4] +1003e142: dd0a ble.n 1003e15a <__ssvfiscanf_r+0x24a> +1003e144: 3301 adds r3, #1 +1003e146: 6023 str r3, [r4, #0] +1003e148: f7ff fe66 bl 1003de18 <__locale_ctype_ptr> +1003e14c: 6823 ldr r3, [r4, #0] +1003e14e: 781a ldrb r2, [r3, #0] +1003e150: 4410 add r0, r2 +1003e152: 7842 ldrb r2, [r0, #1] +1003e154: 0712 lsls r2, r2, #28 +1003e156: d4ed bmi.n 1003e134 <__ssvfiscanf_r+0x224> +1003e158: e786 b.n 1003e068 <__ssvfiscanf_r+0x158> +1003e15a: 9ba3 ldr r3, [sp, #652] ; 0x28c +1003e15c: 4621 mov r1, r4 +1003e15e: 4630 mov r0, r6 +1003e160: 4798 blx r3 +1003e162: 2800 cmp r0, #0 +1003e164: d0f0 beq.n 1003e148 <__ssvfiscanf_r+0x238> +1003e166: e7ac b.n 1003e0c2 <__ssvfiscanf_r+0x1b2> +1003e168: 2b04 cmp r3, #4 +1003e16a: dc06 bgt.n 1003e17a <__ssvfiscanf_r+0x26a> +1003e16c: ab01 add r3, sp, #4 +1003e16e: 4622 mov r2, r4 +1003e170: a943 add r1, sp, #268 ; 0x10c +1003e172: 4630 mov r0, r6 +1003e174: f000 f884 bl 1003e280 <_scanf_i> +1003e178: e77f b.n 1003e07a <__ssvfiscanf_r+0x16a> +1003e17a: 4b0e ldr r3, [pc, #56] ; (1003e1b4 <__ssvfiscanf_r+0x2a4>) +1003e17c: 2b00 cmp r3, #0 +1003e17e: f43f af3c beq.w 1003dffa <__ssvfiscanf_r+0xea> +1003e182: ab01 add r3, sp, #4 +1003e184: 4622 mov r2, r4 +1003e186: a943 add r1, sp, #268 ; 0x10c +1003e188: 4630 mov r0, r6 +1003e18a: f3af 8000 nop.w +1003e18e: e774 b.n 1003e07a <__ssvfiscanf_r+0x16a> +1003e190: 89a3 ldrh r3, [r4, #12] +1003e192: f013 0f40 tst.w r3, #64 ; 0x40 +1003e196: bf18 it ne +1003e198: f04f 30ff movne.w r0, #4294967295 +1003e19c: f50d 7d25 add.w sp, sp, #660 ; 0x294 +1003e1a0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1003e1a4: 9846 ldr r0, [sp, #280] ; 0x118 +1003e1a6: e7f9 b.n 1003e19c <__ssvfiscanf_r+0x28c> +1003e1a8: 1003de5d .word 0x1003de5d +1003e1ac: 1003ded7 .word 0x1003ded7 +1003e1b0: 10044a63 .word 0x10044a63 +1003e1b4: 00000000 .word 0x00000000 + +1003e1b8 <_scanf_chars>: +1003e1b8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1003e1bc: 4615 mov r5, r2 +1003e1be: 688a ldr r2, [r1, #8] +1003e1c0: 4680 mov r8, r0 +1003e1c2: 460c mov r4, r1 +1003e1c4: b932 cbnz r2, 1003e1d4 <_scanf_chars+0x1c> +1003e1c6: 698a ldr r2, [r1, #24] +1003e1c8: 2a00 cmp r2, #0 +1003e1ca: bf0c ite eq +1003e1cc: 2201 moveq r2, #1 +1003e1ce: f04f 32ff movne.w r2, #4294967295 +1003e1d2: 608a str r2, [r1, #8] +1003e1d4: 2600 movs r6, #0 +1003e1d6: 6822 ldr r2, [r4, #0] +1003e1d8: 06d1 lsls r1, r2, #27 +1003e1da: bf5f itttt pl +1003e1dc: 681a ldrpl r2, [r3, #0] +1003e1de: 1d11 addpl r1, r2, #4 +1003e1e0: 6019 strpl r1, [r3, #0] +1003e1e2: 6817 ldrpl r7, [r2, #0] +1003e1e4: 69a3 ldr r3, [r4, #24] +1003e1e6: b1db cbz r3, 1003e220 <_scanf_chars+0x68> +1003e1e8: 2b01 cmp r3, #1 +1003e1ea: d107 bne.n 1003e1fc <_scanf_chars+0x44> +1003e1ec: 682b ldr r3, [r5, #0] +1003e1ee: 6962 ldr r2, [r4, #20] +1003e1f0: 781b ldrb r3, [r3, #0] +1003e1f2: 5cd3 ldrb r3, [r2, r3] +1003e1f4: b9a3 cbnz r3, 1003e220 <_scanf_chars+0x68> +1003e1f6: 2e00 cmp r6, #0 +1003e1f8: d131 bne.n 1003e25e <_scanf_chars+0xa6> +1003e1fa: e006 b.n 1003e20a <_scanf_chars+0x52> +1003e1fc: 2b02 cmp r3, #2 +1003e1fe: d007 beq.n 1003e210 <_scanf_chars+0x58> +1003e200: 2e00 cmp r6, #0 +1003e202: d12c bne.n 1003e25e <_scanf_chars+0xa6> +1003e204: 69a3 ldr r3, [r4, #24] +1003e206: 2b01 cmp r3, #1 +1003e208: d129 bne.n 1003e25e <_scanf_chars+0xa6> +1003e20a: 2001 movs r0, #1 +1003e20c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1003e210: f7ff fe02 bl 1003de18 <__locale_ctype_ptr> +1003e214: 682b ldr r3, [r5, #0] +1003e216: 781b ldrb r3, [r3, #0] +1003e218: 4418 add r0, r3 +1003e21a: 7843 ldrb r3, [r0, #1] +1003e21c: 071b lsls r3, r3, #28 +1003e21e: d4ef bmi.n 1003e200 <_scanf_chars+0x48> +1003e220: 6823 ldr r3, [r4, #0] +1003e222: 3601 adds r6, #1 +1003e224: 06da lsls r2, r3, #27 +1003e226: bf5e ittt pl +1003e228: 682b ldrpl r3, [r5, #0] +1003e22a: 781b ldrbpl r3, [r3, #0] +1003e22c: 703b strbpl r3, [r7, #0] +1003e22e: 682a ldr r2, [r5, #0] +1003e230: 686b ldr r3, [r5, #4] +1003e232: f102 0201 add.w r2, r2, #1 +1003e236: 602a str r2, [r5, #0] +1003e238: 68a2 ldr r2, [r4, #8] +1003e23a: f103 33ff add.w r3, r3, #4294967295 +1003e23e: f102 32ff add.w r2, r2, #4294967295 +1003e242: 606b str r3, [r5, #4] +1003e244: bf58 it pl +1003e246: 3701 addpl r7, #1 +1003e248: 60a2 str r2, [r4, #8] +1003e24a: b142 cbz r2, 1003e25e <_scanf_chars+0xa6> +1003e24c: 2b00 cmp r3, #0 +1003e24e: dcc9 bgt.n 1003e1e4 <_scanf_chars+0x2c> +1003e250: f8d4 3180 ldr.w r3, [r4, #384] ; 0x180 +1003e254: 4629 mov r1, r5 +1003e256: 4640 mov r0, r8 +1003e258: 4798 blx r3 +1003e25a: 2800 cmp r0, #0 +1003e25c: d0c2 beq.n 1003e1e4 <_scanf_chars+0x2c> +1003e25e: 6823 ldr r3, [r4, #0] +1003e260: f013 0310 ands.w r3, r3, #16 +1003e264: d105 bne.n 1003e272 <_scanf_chars+0xba> +1003e266: 68e2 ldr r2, [r4, #12] +1003e268: 3201 adds r2, #1 +1003e26a: 60e2 str r2, [r4, #12] +1003e26c: 69a2 ldr r2, [r4, #24] +1003e26e: b102 cbz r2, 1003e272 <_scanf_chars+0xba> +1003e270: 703b strb r3, [r7, #0] +1003e272: 6923 ldr r3, [r4, #16] +1003e274: 2000 movs r0, #0 +1003e276: 441e add r6, r3 +1003e278: 6126 str r6, [r4, #16] +1003e27a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + ... + +1003e280 <_scanf_i>: +1003e280: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} +1003e284: 460c mov r4, r1 +1003e286: 469a mov sl, r3 +1003e288: 4b74 ldr r3, [pc, #464] ; (1003e45c <_scanf_i+0x1dc>) +1003e28a: b087 sub sp, #28 +1003e28c: 4683 mov fp, r0 +1003e28e: 4616 mov r6, r2 +1003e290: e893 0007 ldmia.w r3, {r0, r1, r2} +1003e294: ab03 add r3, sp, #12 +1003e296: 68a7 ldr r7, [r4, #8] +1003e298: e883 0007 stmia.w r3, {r0, r1, r2} +1003e29c: 4b70 ldr r3, [pc, #448] ; (1003e460 <_scanf_i+0x1e0>) +1003e29e: 69a1 ldr r1, [r4, #24] +1003e2a0: 4a70 ldr r2, [pc, #448] ; (1003e464 <_scanf_i+0x1e4>) +1003e2a2: f104 091c add.w r9, r4, #28 +1003e2a6: 2903 cmp r1, #3 +1003e2a8: bf18 it ne +1003e2aa: 461a movne r2, r3 +1003e2ac: 1e7b subs r3, r7, #1 +1003e2ae: f5b3 7fae cmp.w r3, #348 ; 0x15c +1003e2b2: bf84 itt hi +1003e2b4: f240 135d movwhi r3, #349 ; 0x15d +1003e2b8: 60a3 strhi r3, [r4, #8] +1003e2ba: 6823 ldr r3, [r4, #0] +1003e2bc: bf88 it hi +1003e2be: f46f 75ae mvnhi.w r5, #348 ; 0x15c +1003e2c2: f443 6350 orr.w r3, r3, #3328 ; 0xd00 +1003e2c6: 6023 str r3, [r4, #0] +1003e2c8: bf98 it ls +1003e2ca: 2700 movls r7, #0 +1003e2cc: 464b mov r3, r9 +1003e2ce: f04f 0800 mov.w r8, #0 +1003e2d2: 9200 str r2, [sp, #0] +1003e2d4: bf88 it hi +1003e2d6: 197f addhi r7, r7, r5 +1003e2d8: 6831 ldr r1, [r6, #0] +1003e2da: 9301 str r3, [sp, #4] +1003e2dc: ab03 add r3, sp, #12 +1003e2de: f853 0028 ldr.w r0, [r3, r8, lsl #2] +1003e2e2: 2202 movs r2, #2 +1003e2e4: 7809 ldrb r1, [r1, #0] +1003e2e6: f000 fa59 bl 1003e79c +1003e2ea: 9b01 ldr r3, [sp, #4] +1003e2ec: b328 cbz r0, 1003e33a <_scanf_i+0xba> +1003e2ee: f1b8 0f01 cmp.w r8, #1 +1003e2f2: d156 bne.n 1003e3a2 <_scanf_i+0x122> +1003e2f4: 6862 ldr r2, [r4, #4] +1003e2f6: b92a cbnz r2, 1003e304 <_scanf_i+0x84> +1003e2f8: 2208 movs r2, #8 +1003e2fa: 6062 str r2, [r4, #4] +1003e2fc: 6822 ldr r2, [r4, #0] +1003e2fe: f442 7200 orr.w r2, r2, #512 ; 0x200 +1003e302: 6022 str r2, [r4, #0] +1003e304: 6822 ldr r2, [r4, #0] +1003e306: f422 62a0 bic.w r2, r2, #1280 ; 0x500 +1003e30a: 6022 str r2, [r4, #0] +1003e30c: 68a2 ldr r2, [r4, #8] +1003e30e: 1e51 subs r1, r2, #1 +1003e310: 60a1 str r1, [r4, #8] +1003e312: b192 cbz r2, 1003e33a <_scanf_i+0xba> +1003e314: 6832 ldr r2, [r6, #0] +1003e316: 1c5d adds r5, r3, #1 +1003e318: 1c51 adds r1, r2, #1 +1003e31a: 6031 str r1, [r6, #0] +1003e31c: 7812 ldrb r2, [r2, #0] +1003e31e: 701a strb r2, [r3, #0] +1003e320: 6873 ldr r3, [r6, #4] +1003e322: 3b01 subs r3, #1 +1003e324: 2b00 cmp r3, #0 +1003e326: 6073 str r3, [r6, #4] +1003e328: dc06 bgt.n 1003e338 <_scanf_i+0xb8> +1003e32a: f8d4 3180 ldr.w r3, [r4, #384] ; 0x180 +1003e32e: 4631 mov r1, r6 +1003e330: 4658 mov r0, fp +1003e332: 4798 blx r3 +1003e334: 2800 cmp r0, #0 +1003e336: d177 bne.n 1003e428 <_scanf_i+0x1a8> +1003e338: 462b mov r3, r5 +1003e33a: f108 0801 add.w r8, r8, #1 +1003e33e: f1b8 0f03 cmp.w r8, #3 +1003e342: d1c9 bne.n 1003e2d8 <_scanf_i+0x58> +1003e344: 6862 ldr r2, [r4, #4] +1003e346: b90a cbnz r2, 1003e34c <_scanf_i+0xcc> +1003e348: 220a movs r2, #10 +1003e34a: 6062 str r2, [r4, #4] +1003e34c: 6862 ldr r2, [r4, #4] +1003e34e: 4946 ldr r1, [pc, #280] ; (1003e468 <_scanf_i+0x1e8>) +1003e350: 6960 ldr r0, [r4, #20] +1003e352: 1a89 subs r1, r1, r2 +1003e354: 9301 str r3, [sp, #4] +1003e356: f000 f889 bl 1003e46c <__sccl> +1003e35a: 9b01 ldr r3, [sp, #4] +1003e35c: f04f 0800 mov.w r8, #0 +1003e360: 461d mov r5, r3 +1003e362: 68a3 ldr r3, [r4, #8] +1003e364: 2b00 cmp r3, #0 +1003e366: d039 beq.n 1003e3dc <_scanf_i+0x15c> +1003e368: 6831 ldr r1, [r6, #0] +1003e36a: 6960 ldr r0, [r4, #20] +1003e36c: 780a ldrb r2, [r1, #0] +1003e36e: 5c80 ldrb r0, [r0, r2] +1003e370: 2800 cmp r0, #0 +1003e372: d033 beq.n 1003e3dc <_scanf_i+0x15c> +1003e374: 2a30 cmp r2, #48 ; 0x30 +1003e376: 6822 ldr r2, [r4, #0] +1003e378: d121 bne.n 1003e3be <_scanf_i+0x13e> +1003e37a: 0510 lsls r0, r2, #20 +1003e37c: d51f bpl.n 1003e3be <_scanf_i+0x13e> +1003e37e: f108 0801 add.w r8, r8, #1 +1003e382: b117 cbz r7, 1003e38a <_scanf_i+0x10a> +1003e384: 3301 adds r3, #1 +1003e386: 3f01 subs r7, #1 +1003e388: 60a3 str r3, [r4, #8] +1003e38a: 6873 ldr r3, [r6, #4] +1003e38c: 3b01 subs r3, #1 +1003e38e: 2b00 cmp r3, #0 +1003e390: 6073 str r3, [r6, #4] +1003e392: dd1c ble.n 1003e3ce <_scanf_i+0x14e> +1003e394: 6833 ldr r3, [r6, #0] +1003e396: 3301 adds r3, #1 +1003e398: 6033 str r3, [r6, #0] +1003e39a: 68a3 ldr r3, [r4, #8] +1003e39c: 3b01 subs r3, #1 +1003e39e: 60a3 str r3, [r4, #8] +1003e3a0: e7df b.n 1003e362 <_scanf_i+0xe2> +1003e3a2: f1b8 0f02 cmp.w r8, #2 +1003e3a6: d1b1 bne.n 1003e30c <_scanf_i+0x8c> +1003e3a8: 6822 ldr r2, [r4, #0] +1003e3aa: f402 61c0 and.w r1, r2, #1536 ; 0x600 +1003e3ae: f5b1 7f00 cmp.w r1, #512 ; 0x200 +1003e3b2: d1c2 bne.n 1003e33a <_scanf_i+0xba> +1003e3b4: 2110 movs r1, #16 +1003e3b6: f442 7280 orr.w r2, r2, #256 ; 0x100 +1003e3ba: 6061 str r1, [r4, #4] +1003e3bc: e7a5 b.n 1003e30a <_scanf_i+0x8a> +1003e3be: f422 6210 bic.w r2, r2, #2304 ; 0x900 +1003e3c2: 6022 str r2, [r4, #0] +1003e3c4: 780b ldrb r3, [r1, #0] +1003e3c6: 3501 adds r5, #1 +1003e3c8: f805 3c01 strb.w r3, [r5, #-1] +1003e3cc: e7dd b.n 1003e38a <_scanf_i+0x10a> +1003e3ce: f8d4 3180 ldr.w r3, [r4, #384] ; 0x180 +1003e3d2: 4631 mov r1, r6 +1003e3d4: 4658 mov r0, fp +1003e3d6: 4798 blx r3 +1003e3d8: 2800 cmp r0, #0 +1003e3da: d0de beq.n 1003e39a <_scanf_i+0x11a> +1003e3dc: 6823 ldr r3, [r4, #0] +1003e3de: 05d9 lsls r1, r3, #23 +1003e3e0: d50c bpl.n 1003e3fc <_scanf_i+0x17c> +1003e3e2: 454d cmp r5, r9 +1003e3e4: d908 bls.n 1003e3f8 <_scanf_i+0x178> +1003e3e6: f815 1c01 ldrb.w r1, [r5, #-1] +1003e3ea: 1e6f subs r7, r5, #1 +1003e3ec: f8d4 317c ldr.w r3, [r4, #380] ; 0x17c +1003e3f0: 4632 mov r2, r6 +1003e3f2: 4658 mov r0, fp +1003e3f4: 4798 blx r3 +1003e3f6: 463d mov r5, r7 +1003e3f8: 454d cmp r5, r9 +1003e3fa: d02c beq.n 1003e456 <_scanf_i+0x1d6> +1003e3fc: 6822 ldr r2, [r4, #0] +1003e3fe: f012 0210 ands.w r2, r2, #16 +1003e402: d11e bne.n 1003e442 <_scanf_i+0x1c2> +1003e404: 702a strb r2, [r5, #0] +1003e406: 6863 ldr r3, [r4, #4] +1003e408: 4649 mov r1, r9 +1003e40a: 4658 mov r0, fp +1003e40c: 9e00 ldr r6, [sp, #0] +1003e40e: 47b0 blx r6 +1003e410: 6822 ldr r2, [r4, #0] +1003e412: f8da 3000 ldr.w r3, [sl] +1003e416: f012 0f20 tst.w r2, #32 +1003e41a: d008 beq.n 1003e42e <_scanf_i+0x1ae> +1003e41c: 1d1a adds r2, r3, #4 +1003e41e: f8ca 2000 str.w r2, [sl] +1003e422: 681b ldr r3, [r3, #0] +1003e424: 6018 str r0, [r3, #0] +1003e426: e009 b.n 1003e43c <_scanf_i+0x1bc> +1003e428: f04f 0800 mov.w r8, #0 +1003e42c: e7d6 b.n 1003e3dc <_scanf_i+0x15c> +1003e42e: 07d2 lsls r2, r2, #31 +1003e430: d5f4 bpl.n 1003e41c <_scanf_i+0x19c> +1003e432: 1d1a adds r2, r3, #4 +1003e434: f8ca 2000 str.w r2, [sl] +1003e438: 681b ldr r3, [r3, #0] +1003e43a: 8018 strh r0, [r3, #0] +1003e43c: 68e3 ldr r3, [r4, #12] +1003e43e: 3301 adds r3, #1 +1003e440: 60e3 str r3, [r4, #12] +1003e442: 2000 movs r0, #0 +1003e444: eba5 0509 sub.w r5, r5, r9 +1003e448: 44a8 add r8, r5 +1003e44a: 6925 ldr r5, [r4, #16] +1003e44c: 4445 add r5, r8 +1003e44e: 6125 str r5, [r4, #16] +1003e450: b007 add sp, #28 +1003e452: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} +1003e456: 2001 movs r0, #1 +1003e458: e7fa b.n 1003e450 <_scanf_i+0x1d0> +1003e45a: bf00 nop +1003e45c: 10044a68 .word 0x10044a68 +1003e460: 1003e6ed .word 0x1003e6ed +1003e464: 1003e5cd .word 0x1003e5cd +1003e468: 10044a84 .word 0x10044a84 + +1003e46c <__sccl>: +1003e46c: b570 push {r4, r5, r6, lr} +1003e46e: 780b ldrb r3, [r1, #0] +1003e470: 1e44 subs r4, r0, #1 +1003e472: 2b5e cmp r3, #94 ; 0x5e +1003e474: bf13 iteet ne +1003e476: 1c4a addne r2, r1, #1 +1003e478: 1c8a addeq r2, r1, #2 +1003e47a: 784b ldrbeq r3, [r1, #1] +1003e47c: 2100 movne r1, #0 +1003e47e: bf08 it eq +1003e480: 2101 moveq r1, #1 +1003e482: f100 05ff add.w r5, r0, #255 ; 0xff +1003e486: f804 1f01 strb.w r1, [r4, #1]! +1003e48a: 42a5 cmp r5, r4 +1003e48c: d1fb bne.n 1003e486 <__sccl+0x1a> +1003e48e: b913 cbnz r3, 1003e496 <__sccl+0x2a> +1003e490: 3a01 subs r2, #1 +1003e492: 4610 mov r0, r2 +1003e494: bd70 pop {r4, r5, r6, pc} +1003e496: f081 0401 eor.w r4, r1, #1 +1003e49a: 4611 mov r1, r2 +1003e49c: 54c4 strb r4, [r0, r3] +1003e49e: 780d ldrb r5, [r1, #0] +1003e4a0: 1c4a adds r2, r1, #1 +1003e4a2: 2d2d cmp r5, #45 ; 0x2d +1003e4a4: d006 beq.n 1003e4b4 <__sccl+0x48> +1003e4a6: 2d5d cmp r5, #93 ; 0x5d +1003e4a8: d0f3 beq.n 1003e492 <__sccl+0x26> +1003e4aa: b90d cbnz r5, 1003e4b0 <__sccl+0x44> +1003e4ac: 460a mov r2, r1 +1003e4ae: e7f0 b.n 1003e492 <__sccl+0x26> +1003e4b0: 462b mov r3, r5 +1003e4b2: e7f2 b.n 1003e49a <__sccl+0x2e> +1003e4b4: 784e ldrb r6, [r1, #1] +1003e4b6: 2e5d cmp r6, #93 ; 0x5d +1003e4b8: d0fa beq.n 1003e4b0 <__sccl+0x44> +1003e4ba: 42b3 cmp r3, r6 +1003e4bc: dcf8 bgt.n 1003e4b0 <__sccl+0x44> +1003e4be: 3102 adds r1, #2 +1003e4c0: 3301 adds r3, #1 +1003e4c2: 429e cmp r6, r3 +1003e4c4: 54c4 strb r4, [r0, r3] +1003e4c6: dcfb bgt.n 1003e4c0 <__sccl+0x54> +1003e4c8: e7e9 b.n 1003e49e <__sccl+0x32> + +1003e4ca <_strtol_l.isra.0>: +1003e4ca: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} +1003e4ce: 4680 mov r8, r0 +1003e4d0: 4689 mov r9, r1 +1003e4d2: 4692 mov sl, r2 +1003e4d4: 461f mov r7, r3 +1003e4d6: 468b mov fp, r1 +1003e4d8: 465d mov r5, fp +1003e4da: 980a ldr r0, [sp, #40] ; 0x28 +1003e4dc: f815 4b01 ldrb.w r4, [r5], #1 +1003e4e0: f7ff fc96 bl 1003de10 <__locale_ctype_ptr_l> +1003e4e4: 4420 add r0, r4 +1003e4e6: 7846 ldrb r6, [r0, #1] +1003e4e8: f016 0608 ands.w r6, r6, #8 +1003e4ec: d10b bne.n 1003e506 <_strtol_l.isra.0+0x3c> +1003e4ee: 2c2d cmp r4, #45 ; 0x2d +1003e4f0: d10b bne.n 1003e50a <_strtol_l.isra.0+0x40> +1003e4f2: 2601 movs r6, #1 +1003e4f4: 782c ldrb r4, [r5, #0] +1003e4f6: f10b 0502 add.w r5, fp, #2 +1003e4fa: b167 cbz r7, 1003e516 <_strtol_l.isra.0+0x4c> +1003e4fc: 2f10 cmp r7, #16 +1003e4fe: d114 bne.n 1003e52a <_strtol_l.isra.0+0x60> +1003e500: 2c30 cmp r4, #48 ; 0x30 +1003e502: d00a beq.n 1003e51a <_strtol_l.isra.0+0x50> +1003e504: e011 b.n 1003e52a <_strtol_l.isra.0+0x60> +1003e506: 46ab mov fp, r5 +1003e508: e7e6 b.n 1003e4d8 <_strtol_l.isra.0+0xe> +1003e50a: 2c2b cmp r4, #43 ; 0x2b +1003e50c: bf04 itt eq +1003e50e: 782c ldrbeq r4, [r5, #0] +1003e510: f10b 0502 addeq.w r5, fp, #2 +1003e514: e7f1 b.n 1003e4fa <_strtol_l.isra.0+0x30> +1003e516: 2c30 cmp r4, #48 ; 0x30 +1003e518: d127 bne.n 1003e56a <_strtol_l.isra.0+0xa0> +1003e51a: 782b ldrb r3, [r5, #0] +1003e51c: f003 03df and.w r3, r3, #223 ; 0xdf +1003e520: 2b58 cmp r3, #88 ; 0x58 +1003e522: d14b bne.n 1003e5bc <_strtol_l.isra.0+0xf2> +1003e524: 2710 movs r7, #16 +1003e526: 786c ldrb r4, [r5, #1] +1003e528: 3502 adds r5, #2 +1003e52a: 2e00 cmp r6, #0 +1003e52c: bf0c ite eq +1003e52e: f06f 4100 mvneq.w r1, #2147483648 ; 0x80000000 +1003e532: f04f 4100 movne.w r1, #2147483648 ; 0x80000000 +1003e536: 2200 movs r2, #0 +1003e538: fbb1 fef7 udiv lr, r1, r7 +1003e53c: 4610 mov r0, r2 +1003e53e: fb07 1c1e mls ip, r7, lr, r1 +1003e542: f1a4 0330 sub.w r3, r4, #48 ; 0x30 +1003e546: 2b09 cmp r3, #9 +1003e548: d811 bhi.n 1003e56e <_strtol_l.isra.0+0xa4> +1003e54a: 461c mov r4, r3 +1003e54c: 42a7 cmp r7, r4 +1003e54e: dd1d ble.n 1003e58c <_strtol_l.isra.0+0xc2> +1003e550: 1c53 adds r3, r2, #1 +1003e552: d007 beq.n 1003e564 <_strtol_l.isra.0+0x9a> +1003e554: 4586 cmp lr, r0 +1003e556: d316 bcc.n 1003e586 <_strtol_l.isra.0+0xbc> +1003e558: d101 bne.n 1003e55e <_strtol_l.isra.0+0x94> +1003e55a: 45a4 cmp ip, r4 +1003e55c: db13 blt.n 1003e586 <_strtol_l.isra.0+0xbc> +1003e55e: 2201 movs r2, #1 +1003e560: fb00 4007 mla r0, r0, r7, r4 +1003e564: f815 4b01 ldrb.w r4, [r5], #1 +1003e568: e7eb b.n 1003e542 <_strtol_l.isra.0+0x78> +1003e56a: 270a movs r7, #10 +1003e56c: e7dd b.n 1003e52a <_strtol_l.isra.0+0x60> +1003e56e: f1a4 0341 sub.w r3, r4, #65 ; 0x41 +1003e572: 2b19 cmp r3, #25 +1003e574: d801 bhi.n 1003e57a <_strtol_l.isra.0+0xb0> +1003e576: 3c37 subs r4, #55 ; 0x37 +1003e578: e7e8 b.n 1003e54c <_strtol_l.isra.0+0x82> +1003e57a: f1a4 0361 sub.w r3, r4, #97 ; 0x61 +1003e57e: 2b19 cmp r3, #25 +1003e580: d804 bhi.n 1003e58c <_strtol_l.isra.0+0xc2> +1003e582: 3c57 subs r4, #87 ; 0x57 +1003e584: e7e2 b.n 1003e54c <_strtol_l.isra.0+0x82> +1003e586: f04f 32ff mov.w r2, #4294967295 +1003e58a: e7eb b.n 1003e564 <_strtol_l.isra.0+0x9a> +1003e58c: 1c53 adds r3, r2, #1 +1003e58e: d108 bne.n 1003e5a2 <_strtol_l.isra.0+0xd8> +1003e590: 2322 movs r3, #34 ; 0x22 +1003e592: 4608 mov r0, r1 +1003e594: f8c8 3000 str.w r3, [r8] +1003e598: f1ba 0f00 cmp.w sl, #0 +1003e59c: d107 bne.n 1003e5ae <_strtol_l.isra.0+0xe4> +1003e59e: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +1003e5a2: b106 cbz r6, 1003e5a6 <_strtol_l.isra.0+0xdc> +1003e5a4: 4240 negs r0, r0 +1003e5a6: f1ba 0f00 cmp.w sl, #0 +1003e5aa: d00c beq.n 1003e5c6 <_strtol_l.isra.0+0xfc> +1003e5ac: b122 cbz r2, 1003e5b8 <_strtol_l.isra.0+0xee> +1003e5ae: 3d01 subs r5, #1 +1003e5b0: f8ca 5000 str.w r5, [sl] +1003e5b4: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} +1003e5b8: 464d mov r5, r9 +1003e5ba: e7f9 b.n 1003e5b0 <_strtol_l.isra.0+0xe6> +1003e5bc: 2430 movs r4, #48 ; 0x30 +1003e5be: 2f00 cmp r7, #0 +1003e5c0: d1b3 bne.n 1003e52a <_strtol_l.isra.0+0x60> +1003e5c2: 2708 movs r7, #8 +1003e5c4: e7b1 b.n 1003e52a <_strtol_l.isra.0+0x60> +1003e5c6: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} + ... + +1003e5cc <_strtol_r>: +1003e5cc: b537 push {r0, r1, r2, r4, r5, lr} +1003e5ce: 4c06 ldr r4, [pc, #24] ; (1003e5e8 <_strtol_r+0x1c>) +1003e5d0: 4d06 ldr r5, [pc, #24] ; (1003e5ec <_strtol_r+0x20>) +1003e5d2: 6824 ldr r4, [r4, #0] +1003e5d4: 6a24 ldr r4, [r4, #32] +1003e5d6: 2c00 cmp r4, #0 +1003e5d8: bf08 it eq +1003e5da: 462c moveq r4, r5 +1003e5dc: 9400 str r4, [sp, #0] +1003e5de: f7ff ff74 bl 1003e4ca <_strtol_l.isra.0> +1003e5e2: b003 add sp, #12 +1003e5e4: bd30 pop {r4, r5, pc} +1003e5e6: bf00 nop +1003e5e8: 10046514 .word 0x10046514 +1003e5ec: 10046578 .word 0x10046578 + +1003e5f0 <_strtoul_l.isra.0>: +1003e5f0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} +1003e5f4: 4680 mov r8, r0 +1003e5f6: 4689 mov r9, r1 +1003e5f8: 4692 mov sl, r2 +1003e5fa: 461e mov r6, r3 +1003e5fc: 460f mov r7, r1 +1003e5fe: 463d mov r5, r7 +1003e600: 9808 ldr r0, [sp, #32] +1003e602: f815 4b01 ldrb.w r4, [r5], #1 +1003e606: f7ff fc03 bl 1003de10 <__locale_ctype_ptr_l> +1003e60a: 4420 add r0, r4 +1003e60c: 7843 ldrb r3, [r0, #1] +1003e60e: f013 0308 ands.w r3, r3, #8 +1003e612: d10a bne.n 1003e62a <_strtoul_l.isra.0+0x3a> +1003e614: 2c2d cmp r4, #45 ; 0x2d +1003e616: d10a bne.n 1003e62e <_strtoul_l.isra.0+0x3e> +1003e618: 2301 movs r3, #1 +1003e61a: 782c ldrb r4, [r5, #0] +1003e61c: 1cbd adds r5, r7, #2 +1003e61e: b15e cbz r6, 1003e638 <_strtoul_l.isra.0+0x48> +1003e620: 2e10 cmp r6, #16 +1003e622: d113 bne.n 1003e64c <_strtoul_l.isra.0+0x5c> +1003e624: 2c30 cmp r4, #48 ; 0x30 +1003e626: d009 beq.n 1003e63c <_strtoul_l.isra.0+0x4c> +1003e628: e010 b.n 1003e64c <_strtoul_l.isra.0+0x5c> +1003e62a: 462f mov r7, r5 +1003e62c: e7e7 b.n 1003e5fe <_strtoul_l.isra.0+0xe> +1003e62e: 2c2b cmp r4, #43 ; 0x2b +1003e630: bf04 itt eq +1003e632: 782c ldrbeq r4, [r5, #0] +1003e634: 1cbd addeq r5, r7, #2 +1003e636: e7f2 b.n 1003e61e <_strtoul_l.isra.0+0x2e> +1003e638: 2c30 cmp r4, #48 ; 0x30 +1003e63a: d125 bne.n 1003e688 <_strtoul_l.isra.0+0x98> +1003e63c: 782a ldrb r2, [r5, #0] +1003e63e: f002 02df and.w r2, r2, #223 ; 0xdf +1003e642: 2a58 cmp r2, #88 ; 0x58 +1003e644: d14a bne.n 1003e6dc <_strtoul_l.isra.0+0xec> +1003e646: 2610 movs r6, #16 +1003e648: 786c ldrb r4, [r5, #1] +1003e64a: 3502 adds r5, #2 +1003e64c: f04f 31ff mov.w r1, #4294967295 +1003e650: fbb1 f1f6 udiv r1, r1, r6 +1003e654: 2700 movs r7, #0 +1003e656: fb06 fe01 mul.w lr, r6, r1 +1003e65a: 4638 mov r0, r7 +1003e65c: ea6f 0e0e mvn.w lr, lr +1003e660: f1a4 0230 sub.w r2, r4, #48 ; 0x30 +1003e664: 2a09 cmp r2, #9 +1003e666: d811 bhi.n 1003e68c <_strtoul_l.isra.0+0x9c> +1003e668: 4614 mov r4, r2 +1003e66a: 42a6 cmp r6, r4 +1003e66c: dd1d ble.n 1003e6aa <_strtoul_l.isra.0+0xba> +1003e66e: 2f00 cmp r7, #0 +1003e670: db18 blt.n 1003e6a4 <_strtoul_l.isra.0+0xb4> +1003e672: 4281 cmp r1, r0 +1003e674: d316 bcc.n 1003e6a4 <_strtoul_l.isra.0+0xb4> +1003e676: d101 bne.n 1003e67c <_strtoul_l.isra.0+0x8c> +1003e678: 45a6 cmp lr, r4 +1003e67a: db13 blt.n 1003e6a4 <_strtoul_l.isra.0+0xb4> +1003e67c: 2701 movs r7, #1 +1003e67e: fb00 4006 mla r0, r0, r6, r4 +1003e682: f815 4b01 ldrb.w r4, [r5], #1 +1003e686: e7eb b.n 1003e660 <_strtoul_l.isra.0+0x70> +1003e688: 260a movs r6, #10 +1003e68a: e7df b.n 1003e64c <_strtoul_l.isra.0+0x5c> +1003e68c: f1a4 0241 sub.w r2, r4, #65 ; 0x41 +1003e690: 2a19 cmp r2, #25 +1003e692: d801 bhi.n 1003e698 <_strtoul_l.isra.0+0xa8> +1003e694: 3c37 subs r4, #55 ; 0x37 +1003e696: e7e8 b.n 1003e66a <_strtoul_l.isra.0+0x7a> +1003e698: f1a4 0261 sub.w r2, r4, #97 ; 0x61 +1003e69c: 2a19 cmp r2, #25 +1003e69e: d804 bhi.n 1003e6aa <_strtoul_l.isra.0+0xba> +1003e6a0: 3c57 subs r4, #87 ; 0x57 +1003e6a2: e7e2 b.n 1003e66a <_strtoul_l.isra.0+0x7a> +1003e6a4: f04f 37ff mov.w r7, #4294967295 +1003e6a8: e7eb b.n 1003e682 <_strtoul_l.isra.0+0x92> +1003e6aa: 2f00 cmp r7, #0 +1003e6ac: da09 bge.n 1003e6c2 <_strtoul_l.isra.0+0xd2> +1003e6ae: 2322 movs r3, #34 ; 0x22 +1003e6b0: f04f 30ff mov.w r0, #4294967295 +1003e6b4: f8c8 3000 str.w r3, [r8] +1003e6b8: f1ba 0f00 cmp.w sl, #0 +1003e6bc: d107 bne.n 1003e6ce <_strtoul_l.isra.0+0xde> +1003e6be: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1003e6c2: b103 cbz r3, 1003e6c6 <_strtoul_l.isra.0+0xd6> +1003e6c4: 4240 negs r0, r0 +1003e6c6: f1ba 0f00 cmp.w sl, #0 +1003e6ca: d00c beq.n 1003e6e6 <_strtoul_l.isra.0+0xf6> +1003e6cc: b127 cbz r7, 1003e6d8 <_strtoul_l.isra.0+0xe8> +1003e6ce: 3d01 subs r5, #1 +1003e6d0: f8ca 5000 str.w r5, [sl] +1003e6d4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} +1003e6d8: 464d mov r5, r9 +1003e6da: e7f9 b.n 1003e6d0 <_strtoul_l.isra.0+0xe0> +1003e6dc: 2430 movs r4, #48 ; 0x30 +1003e6de: 2e00 cmp r6, #0 +1003e6e0: d1b4 bne.n 1003e64c <_strtoul_l.isra.0+0x5c> +1003e6e2: 2608 movs r6, #8 +1003e6e4: e7b2 b.n 1003e64c <_strtoul_l.isra.0+0x5c> +1003e6e6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + ... + +1003e6ec <_strtoul_r>: +1003e6ec: b537 push {r0, r1, r2, r4, r5, lr} +1003e6ee: 4c06 ldr r4, [pc, #24] ; (1003e708 <_strtoul_r+0x1c>) +1003e6f0: 4d06 ldr r5, [pc, #24] ; (1003e70c <_strtoul_r+0x20>) +1003e6f2: 6824 ldr r4, [r4, #0] +1003e6f4: 6a24 ldr r4, [r4, #32] +1003e6f6: 2c00 cmp r4, #0 +1003e6f8: bf08 it eq +1003e6fa: 462c moveq r4, r5 +1003e6fc: 9400 str r4, [sp, #0] +1003e6fe: f7ff ff77 bl 1003e5f0 <_strtoul_l.isra.0> +1003e702: b003 add sp, #12 +1003e704: bd30 pop {r4, r5, pc} +1003e706: bf00 nop +1003e708: 10046514 .word 0x10046514 +1003e70c: 10046578 .word 0x10046578 + +1003e710 <__submore>: +1003e710: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} +1003e714: 460c mov r4, r1 +1003e716: 6b49 ldr r1, [r1, #52] ; 0x34 +1003e718: f104 0344 add.w r3, r4, #68 ; 0x44 +1003e71c: 4299 cmp r1, r3 +1003e71e: d11c bne.n 1003e75a <__submore+0x4a> +1003e720: f44f 6180 mov.w r1, #1024 ; 0x400 +1003e724: f7ff fad2 bl 1003dccc <_malloc_r> +1003e728: b918 cbnz r0, 1003e732 <__submore+0x22> +1003e72a: f04f 30ff mov.w r0, #4294967295 +1003e72e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1003e732: f44f 6380 mov.w r3, #1024 ; 0x400 +1003e736: 63a3 str r3, [r4, #56] ; 0x38 +1003e738: f894 3046 ldrb.w r3, [r4, #70] ; 0x46 +1003e73c: 6360 str r0, [r4, #52] ; 0x34 +1003e73e: f880 33ff strb.w r3, [r0, #1023] ; 0x3ff +1003e742: f894 3045 ldrb.w r3, [r4, #69] ; 0x45 +1003e746: f200 30fd addw r0, r0, #1021 ; 0x3fd +1003e74a: 7043 strb r3, [r0, #1] +1003e74c: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 +1003e750: 7003 strb r3, [r0, #0] +1003e752: 6020 str r0, [r4, #0] +1003e754: 2000 movs r0, #0 +1003e756: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} +1003e75a: 6ba6 ldr r6, [r4, #56] ; 0x38 +1003e75c: 0077 lsls r7, r6, #1 +1003e75e: 463a mov r2, r7 +1003e760: f000 f835 bl 1003e7ce <_realloc_r> +1003e764: 4605 mov r5, r0 +1003e766: 2800 cmp r0, #0 +1003e768: d0df beq.n 1003e72a <__submore+0x1a> +1003e76a: eb00 0806 add.w r8, r0, r6 +1003e76e: 4601 mov r1, r0 +1003e770: 4632 mov r2, r6 +1003e772: 4640 mov r0, r8 +1003e774: f000 f820 bl 1003e7b8 +1003e778: f8c4 8000 str.w r8, [r4] +1003e77c: 6365 str r5, [r4, #52] ; 0x34 +1003e77e: 63a7 str r7, [r4, #56] ; 0x38 +1003e780: e7e8 b.n 1003e754 <__submore+0x44> + +1003e782 <__ascii_wctomb>: +1003e782: b149 cbz r1, 1003e798 <__ascii_wctomb+0x16> +1003e784: 2aff cmp r2, #255 ; 0xff +1003e786: bf8b itete hi +1003e788: 238a movhi r3, #138 ; 0x8a +1003e78a: 700a strbls r2, [r1, #0] +1003e78c: 6003 strhi r3, [r0, #0] +1003e78e: 2001 movls r0, #1 +1003e790: bf88 it hi +1003e792: f04f 30ff movhi.w r0, #4294967295 +1003e796: 4770 bx lr +1003e798: 4608 mov r0, r1 +1003e79a: 4770 bx lr + +1003e79c : +1003e79c: b510 push {r4, lr} +1003e79e: b2c9 uxtb r1, r1 +1003e7a0: 4402 add r2, r0 +1003e7a2: 4290 cmp r0, r2 +1003e7a4: 4603 mov r3, r0 +1003e7a6: d101 bne.n 1003e7ac +1003e7a8: 2000 movs r0, #0 +1003e7aa: bd10 pop {r4, pc} +1003e7ac: 781c ldrb r4, [r3, #0] +1003e7ae: 3001 adds r0, #1 +1003e7b0: 428c cmp r4, r1 +1003e7b2: d1f6 bne.n 1003e7a2 +1003e7b4: 4618 mov r0, r3 +1003e7b6: bd10 pop {r4, pc} + +1003e7b8 : +1003e7b8: b510 push {r4, lr} +1003e7ba: 1e43 subs r3, r0, #1 +1003e7bc: 440a add r2, r1 +1003e7be: 4291 cmp r1, r2 +1003e7c0: d100 bne.n 1003e7c4 +1003e7c2: bd10 pop {r4, pc} +1003e7c4: f811 4b01 ldrb.w r4, [r1], #1 +1003e7c8: f803 4f01 strb.w r4, [r3, #1]! +1003e7cc: e7f7 b.n 1003e7be + +1003e7ce <_realloc_r>: +1003e7ce: b5f8 push {r3, r4, r5, r6, r7, lr} +1003e7d0: 4607 mov r7, r0 +1003e7d2: 4614 mov r4, r2 +1003e7d4: 460e mov r6, r1 +1003e7d6: b921 cbnz r1, 1003e7e2 <_realloc_r+0x14> +1003e7d8: 4611 mov r1, r2 +1003e7da: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} +1003e7de: f7ff ba75 b.w 1003dccc <_malloc_r> +1003e7e2: b922 cbnz r2, 1003e7ee <_realloc_r+0x20> +1003e7e4: f7ff fa26 bl 1003dc34 <_free_r> +1003e7e8: 4625 mov r5, r4 +1003e7ea: 4628 mov r0, r5 +1003e7ec: bdf8 pop {r3, r4, r5, r6, r7, pc} +1003e7ee: f000 f814 bl 1003e81a <_malloc_usable_size_r> +1003e7f2: 4284 cmp r4, r0 +1003e7f4: d90f bls.n 1003e816 <_realloc_r+0x48> +1003e7f6: 4621 mov r1, r4 +1003e7f8: 4638 mov r0, r7 +1003e7fa: f7ff fa67 bl 1003dccc <_malloc_r> +1003e7fe: 4605 mov r5, r0 +1003e800: 2800 cmp r0, #0 +1003e802: d0f2 beq.n 1003e7ea <_realloc_r+0x1c> +1003e804: 4631 mov r1, r6 +1003e806: 4622 mov r2, r4 +1003e808: f7ff ffd6 bl 1003e7b8 +1003e80c: 4631 mov r1, r6 +1003e80e: 4638 mov r0, r7 +1003e810: f7ff fa10 bl 1003dc34 <_free_r> +1003e814: e7e9 b.n 1003e7ea <_realloc_r+0x1c> +1003e816: 4635 mov r5, r6 +1003e818: e7e7 b.n 1003e7ea <_realloc_r+0x1c> + +1003e81a <_malloc_usable_size_r>: +1003e81a: f851 0c04 ldr.w r0, [r1, #-4] +1003e81e: 2800 cmp r0, #0 +1003e820: f1a0 0004 sub.w r0, r0, #4 +1003e824: bfbc itt lt +1003e826: 580b ldrlt r3, [r1, r0] +1003e828: 18c0 addlt r0, r0, r3 +1003e82a: 4770 bx lr + +1003e82c <_sbrk>: +1003e82c: 4a04 ldr r2, [pc, #16] ; (1003e840 <_sbrk+0x14>) +1003e82e: 4905 ldr r1, [pc, #20] ; (1003e844 <_sbrk+0x18>) +1003e830: 6813 ldr r3, [r2, #0] +1003e832: 2b00 cmp r3, #0 +1003e834: bf08 it eq +1003e836: 460b moveq r3, r1 +1003e838: 4418 add r0, r3 +1003e83a: 6010 str r0, [r2, #0] +1003e83c: 4618 mov r0, r3 +1003e83e: 4770 bx lr +1003e840: 1004e5ac .word 0x1004e5ac +1003e844: 10002400 .word 0x10002400 + +1003e848 <__aes_80211_decrypt_veneer>: +1003e848: f85f f000 ldr.w pc, [pc] ; 1003e84c <__aes_80211_decrypt_veneer+0x4> +1003e84c: 000151ad .word 0x000151ad + +1003e850 <__ROM_odm_SetCrystalCap_veneer>: +1003e850: f85f f000 ldr.w pc, [pc] ; 1003e854 <__ROM_odm_SetCrystalCap_veneer+0x4> +1003e854: 00018771 .word 0x00018771 + +1003e858 <__rtw_seccalctkipmic_veneer>: +1003e858: f85f f000 ldr.w pc, [pc] ; 1003e85c <__rtw_seccalctkipmic_veneer+0x4> +1003e85c: 0001449d .word 0x0001449d + +1003e860 <__rtw_get_ie_veneer>: +1003e860: f85f f000 ldr.w pc, [pc] ; 1003e864 <__rtw_get_ie_veneer+0x4> +1003e864: 0001355d .word 0x0001355d + +1003e868 <__SpicWaitBusyDoneRtl8195A_veneer>: +1003e868: f85f f000 ldr.w pc, [pc] ; 1003e86c <__SpicWaitBusyDoneRtl8195A_veneer+0x4> +1003e86c: 00002ea5 .word 0x00002ea5 + +1003e870 <__ROM_odm_GetDefaultCrytaltalCap_veneer>: +1003e870: f85f f000 ldr.w pc, [pc] ; 1003e874 <__ROM_odm_GetDefaultCrytaltalCap_veneer+0x4> +1003e874: 000187d5 .word 0x000187d5 + +1003e878 <__wep_80211_decrypt_veneer>: +1003e878: f85f f000 ldr.w pc, [pc] ; 1003e87c <__wep_80211_decrypt_veneer+0x4> +1003e87c: 000142f5 .word 0x000142f5 + +1003e880 <__rtw_secmicsetkey_veneer>: +1003e880: f85f f000 ldr.w pc, [pc] ; 1003e884 <__rtw_secmicsetkey_veneer+0x4> +1003e884: 000143d9 .word 0x000143d9 + +1003e888 <__PHY_QueryBBReg_8195A_veneer>: +1003e888: f85f f000 ldr.w pc, [pc] ; 1003e88c <__PHY_QueryBBReg_8195A_veneer+0x4> +1003e88c: 00018279 .word 0x00018279 + +1003e890 <__rtw_secmicappend_veneer>: +1003e890: f85f f000 ldr.w pc, [pc] ; 1003e894 <__rtw_secmicappend_veneer+0x4> +1003e894: 00014419 .word 0x00014419 + +1003e898 <__rtw_get_wpa2_ie_veneer>: +1003e898: f85f f000 ldr.w pc, [pc] ; 1003e89c <__rtw_get_wpa2_ie_veneer+0x4> +1003e89c: 000136c9 .word 0x000136c9 + +1003e8a0 <__phy_CalculateBitShift_veneer>: +1003e8a0: f85f f000 ldr.w pc, [pc] ; 1003e8a4 <__phy_CalculateBitShift_veneer+0x4> +1003e8a4: 00018221 .word 0x00018221 + +1003e8a8 <__rt_md5_hmac_veneer>: +1003e8a8: f85f f000 ldr.w pc, [pc] ; 1003e8ac <__rt_md5_hmac_veneer+0x4> +1003e8ac: 000132d5 .word 0x000132d5 + +1003e8b0 <__rtw_set_supported_rate_veneer>: +1003e8b0: f85f f000 ldr.w pc, [pc] ; 1003e8b4 <__rtw_set_supported_rate_veneer+0x4> +1003e8b4: 00013591 .word 0x00013591 + +1003e8b8 <__ROM_ODM_CfoTrackingReset_veneer>: +1003e8b8: f85f f000 ldr.w pc, [pc] ; 1003e8bc <__ROM_ODM_CfoTrackingReset_veneer+0x4> +1003e8bc: 000187e9 .word 0x000187e9 + +1003e8c0 <__rtw_get_wps_ie_veneer>: +1003e8c0: f85f f000 ldr.w pc, [pc] ; 1003e8c4 <__rtw_get_wps_ie_veneer+0x4> +1003e8c4: 00013a15 .word 0x00013a15 + +1003e8c8 <__rtw_get_wpa_ie_veneer>: +1003e8c8: f85f f000 ldr.w pc, [pc] ; 1003e8cc <__rtw_get_wpa_ie_veneer+0x4> +1003e8cc: 0001362d .word 0x0001362d + +1003e8d0 <__rom_psk_CalcGTK_veneer>: +1003e8d0: f85f f000 ldr.w pc, [pc] ; 1003e8d4 <__rom_psk_CalcGTK_veneer+0x4> +1003e8d4: 00013ed5 .word 0x00013ed5 + +1003e8d8 <__rtw_parse_wpa2_ie_veneer>: +1003e8d8: f85f f000 ldr.w pc, [pc] ; 1003e8dc <__rtw_parse_wpa2_ie_veneer+0x4> +1003e8dc: 000138ad .word 0x000138ad + +1003e8e0 <__ROM_odm_EVMdbToPercentage_veneer>: +1003e8e0: f85f f000 ldr.w pc, [pc] ; 1003e8e4 <__ROM_odm_EVMdbToPercentage_veneer+0x4> +1003e8e4: 000182bd .word 0x000182bd + +1003e8e8 <__ROM_odm_QueryRxPwrPercentage_veneer>: +1003e8e8: f85f f000 ldr.w pc, [pc] ; 1003e8ec <__ROM_odm_QueryRxPwrPercentage_veneer+0x4> +1003e8ec: 0001829d .word 0x0001829d + +1003e8f0 <__rt_arc4_init_veneer>: +1003e8f0: f85f f000 ldr.w pc, [pc] ; 1003e8f4 <__rt_arc4_init_veneer+0x4> +1003e8f4: 000128bd .word 0x000128bd + +1003e8f8 <__Strtoul_veneer>: +1003e8f8: f85f f000 ldr.w pc, [pc] ; 1003e8fc <__Strtoul_veneer+0x4> +1003e8fc: 0000e801 .word 0x0000e801 + +1003e900 <__rtw_get_rateset_len_veneer>: +1003e900: f85f f000 ldr.w pc, [pc] ; 1003e904 <__rtw_get_rateset_len_veneer+0x4> +1003e904: 00013611 .word 0x00013611 + +1003e908 <__tkip_80211_decrypt_veneer>: +1003e908: f85f f000 ldr.w pc, [pc] ; 1003e90c <__tkip_80211_decrypt_veneer+0x4> +1003e90c: 000149d5 .word 0x000149d5 + +1003e910 <__rtw_set_ie_veneer>: +1003e910: f85f f000 ldr.w pc, [pc] ; 1003e914 <__rtw_set_ie_veneer+0x4> +1003e914: 0001352d .word 0x0001352d + +1003e918 <__rtw_parse_wpa_ie_veneer>: +1003e918: f85f f000 ldr.w pc, [pc] ; 1003e91c <__rtw_parse_wpa_ie_veneer+0x4> +1003e91c: 000137d1 .word 0x000137d1 + +1003e920 <__rtw_get_wps_attr_content_veneer>: +1003e920: f85f f000 ldr.w pc, [pc] ; 1003e924 <__rtw_get_wps_attr_content_veneer+0x4> +1003e924: 00013b49 .word 0x00013b49 + +1003e928 <__wep_80211_encrypt_veneer>: +1003e928: f85f f000 ldr.w pc, [pc] ; 1003e92c <__wep_80211_encrypt_veneer+0x4> +1003e92c: 00014295 .word 0x00014295 + +1003e930 <__rt_arc4_crypt_veneer>: +1003e930: f85f f000 ldr.w pc, [pc] ; 1003e934 <__rt_arc4_crypt_veneer+0x4> +1003e934: 00012901 .word 0x00012901 + +1003e938 <__rtw_get_bit_value_from_ieee_value_veneer>: +1003e938: f85f f000 ldr.w pc, [pc] ; 1003e93c <__rtw_get_bit_value_from_ieee_value_veneer+0x4> +1003e93c: 00013449 .word 0x00013449 + +1003e940 <__rom_psk_CalcPTK_veneer>: +1003e940: f85f f000 ldr.w pc, [pc] ; 1003e944 <__rom_psk_CalcPTK_veneer+0x4> +1003e944: 00013f69 .word 0x00013f69 + +1003e948 <__rtw_ieee802_11_parse_elems_veneer>: +1003e948: f85f f000 ldr.w pc, [pc] ; 1003e94c <__rtw_ieee802_11_parse_elems_veneer+0x4> +1003e94c: 00013b91 .word 0x00013b91 + +1003e950 <__rtw_secgetmic_veneer>: +1003e950: f85f f000 ldr.w pc, [pc] ; 1003e954 <__rtw_secgetmic_veneer+0x4> +1003e954: 00014435 .word 0x00014435 + +1003e958 <__ROM_odm_CfoTrackingFlow_veneer>: +1003e958: f85f f000 ldr.w pc, [pc] ; 1003e95c <__ROM_odm_CfoTrackingFlow_veneer+0x4> +1003e95c: 00018811 .word 0x00018811 + +1003e960 <__rtw_get_sec_ie_veneer>: +1003e960: f85f f000 ldr.w pc, [pc] ; 1003e964 <__rtw_get_sec_ie_veneer+0x4> +1003e964: 00013965 .word 0x00013965 + +1003e968 <__rtw_check_network_type_veneer>: +1003e968: f85f f000 ldr.w pc, [pc] ; 1003e96c <__rtw_check_network_type_veneer+0x4> +1003e96c: 000134dd .word 0x000134dd + +1003e970 <__rom_psk_PasswordHash_veneer>: +1003e970: f85f f000 ldr.w pc, [pc] ; 1003e974 <__rom_psk_PasswordHash_veneer+0x4> +1003e974: 00013e9d .word 0x00013e9d + +1003e978 <__rtw_set_fixed_ie_veneer>: +1003e978: f85f f000 ldr.w pc, [pc] ; 1003e97c <__rtw_set_fixed_ie_veneer+0x4> +1003e97c: 0001350d .word 0x0001350d + +1003e980 <__HalGdmaChDisRtl8195a_veneer>: +1003e980: f85f f000 ldr.w pc, [pc] ; 1003e984 <__HalGdmaChDisRtl8195a_veneer+0x4> +1003e984: 00005e6d .word 0x00005e6d + +1003e988 <__rt_hmac_sha1_veneer>: +1003e988: f85f f000 ldr.w pc, [pc] ; 1003e98c <__rt_hmac_sha1_veneer+0x4> +1003e98c: 00015909 .word 0x00015909 + +1003e990 <__PHY_SetBBReg_8195A_veneer>: +1003e990: f85f f000 ldr.w pc, [pc] ; 1003e994 <__PHY_SetBBReg_8195A_veneer+0x4> +1003e994: 00018239 .word 0x00018239 + +1003e998 <__aes_80211_encrypt_veneer>: +1003e998: f85f f000 ldr.w pc, [pc] ; 1003e99c <__aes_80211_encrypt_veneer+0x4> +1003e99c: 00014e29 .word 0x00014e29 + +1003e9a0 <__key_2char2num_veneer>: +1003e9a0: f85f f000 ldr.w pc, [pc] ; 1003e9a4 <__key_2char2num_veneer+0x4> +1003e9a4: 00013db9 .word 0x00013db9 + +1003e9a8 <__AES_UnWRAP_veneer>: +1003e9a8: f85f f000 ldr.w pc, [pc] ; 1003e9ac <__AES_UnWRAP_veneer+0x4> +1003e9ac: 00012701 .word 0x00012701 + +1003e9b0 <__tkip_80211_encrypt_veneer>: +1003e9b0: f85f f000 ldr.w pc, [pc] ; 1003e9b4 <__tkip_80211_encrypt_veneer+0x4> +1003e9b4: 00014941 .word 0x00014941 + +1003e9b8 <__AES_WRAP_veneer>: +1003e9b8: f85f f000 ldr.w pc, [pc] ; 1003e9bc <__AES_WRAP_veneer+0x4> +1003e9bc: 000125c9 .word 0x000125c9 diff --git a/Firmware/Debug/obj/Debug.axf b/Firmware/Debug/obj/Debug.axf new file mode 100644 index 0000000..b7ecda3 Binary files /dev/null and b/Firmware/Debug/obj/Debug.axf differ diff --git a/Firmware/Debug/obj/Debug.nmap b/Firmware/Debug/obj/Debug.nmap new file mode 100644 index 0000000..fc37afb --- /dev/null +++ b/Firmware/Debug/obj/Debug.nmap @@ -0,0 +1,3247 @@ +00000000 A __vectors_table +00000000 D __rom_image_end__ +00000000 D __rom_image_start__ +00000020 A UartLogRamCmdTableSize +00000101 A Reset_Handler +00000109 A NMI_Handler +0000010d A HardFault_Handler +00000121 A MemManage_Handler +00000125 A BusFault_Handler +00000129 A UsageFault_Handler +00000201 A HalLogUartInit +000002d9 A HalSerialPutcRtl8195a +00000309 A HalSerialGetcRtl8195a +00000329 A HalSerialGetIsrEnRegRtl8195a +00000335 A HalSerialSetIrqEnRegRtl8195a +00000341 A HalCpuClkConfig +00000355 A HalGetCpuClk +0000039d A HalRomInfo +000003b5 A HalGetRomInfo +000003c5 A HalResetVsr +00000899 A HalDelayUs +000008e1 A HalNMIHandler +00000911 A HalHardFaultHandler +00000c09 A HalMemManageHandler +00000c39 A HalBusFaultHandler +00000c69 A HalUsageFaultHandler +00000cfd A HalUart0PinCtrlRtl8195A +00000dc9 A HalUart1PinCtrlRtl8195A +00000e9d A HalUart2PinCtrlRtl8195A +00000f75 A HalSPI0PinCtrlRtl8195A +00001015 A HalSPI1PinCtrlRtl8195A +000010e5 A HalSPI2PinCtrlRtl8195A +000011b5 A HalSPI0MCSPinCtrlRtl8195A +00001275 A HalI2C0PinCtrlRtl8195A +00001381 A HalI2C1PinCtrlRtl8195A +00001459 A HalI2C2PinCtrlRtl8195A +00001529 A HalI2C3PinCtrlRtl8195A +00001639 A HalI2S0PinCtrlRtl8195A +0000176d A HalI2S1PinCtrlRtl8195A +00001845 A HalPCM0PinCtrlRtl8195A +00001949 A HalPCM1PinCtrlRtl8195A +00001a1d A HalSDIODPinCtrlRtl8195A +00001a6d A HalSDIOHPinCtrlRtl8195A +00001ab9 A HalMIIPinCtrlRtl8195A +00001b51 A HalWLLEDPinCtrlRtl8195A +00001c0d A HalWLANT0PinCtrlRtl8195A +00001c61 A HalWLANT1PinCtrlRtl8195A +00001cb5 A HalWLBTCOEXPinCtrlRtl8195A +00001d05 A HalWLBTCMDPinCtrlRtl8195A +00001d59 A HalNFCPinCtrlRtl8195A +00001da9 A HalPWM0PinCtrlRtl8195A +00001ead A HalPWM1PinCtrlRtl8195A +00001fb5 A HalPWM2PinCtrlRtl8195A +000020b1 A HalPWM3PinCtrlRtl8195A +000021b9 A HalETE0PinCtrlRtl8195A +000022c1 A HalETE1PinCtrlRtl8195A +000023c9 A HalETE2PinCtrlRtl8195A +000024d1 A HalETE3PinCtrlRtl8195A +000025d9 A HalEGTIMPinCtrlRtl8195A +00002679 A HalSPIFlashPinCtrlRtl8195A +00002725 A HalSDRPinCtrlRtl8195A +0000280d A HalJTAGPinCtrlRtl8195A +00002861 A HalTRACEPinCtrlRtl8195A +000028b9 A HalLOGUartPinCtrlRtl8195A +0000291d A HalLOGUartIRPinCtrlRtl8195A +00002981 A HalSICPinCtrlRtl8195A +000029d9 A HalEEPROMPinCtrlRtl8195A +00002a31 A HalDEBUGPinCtrlRtl8195A +00002b39 A HalPinCtrlRtl8195A +00002e5d A SpicRxCmdRtl8195A +00002ea5 A SpicWaitBusyDoneRtl8195A +00002eb5 A SpicGetFlashStatusRtl8195A +00002f55 A SpicWaitWipDoneRtl8195A +00002f6d A SpicTxCmdRtl8195A +00002fc1 A SpicSetFlashStatusRtl8195A +00003049 A SpicCmpDataForCalibrationRtl8195A +00003081 A SpicLoadInitParaFromClockRtl8195A +000030e5 A SpicInitRtl8195A +000031bd A SpicEraseFlashRtl8195A +00003279 A SpiFlashApp +000033b5 A HalPeripheralIntrHandle +00003439 A HalSysOnIntrHandle +00003485 A HalWdgIntrHandle +000034d5 A HalTimer0IntrHandle +00003525 A HalTimer1IntrHandle +00003575 A HalI2C3IntrHandle +000035c5 A HalTimer2To7IntrHandle +00003615 A HalSpi0IntrHandle +00003665 A HalGpioIntrHandle +000036b5 A HalUart0IntrHandle +00003705 A HalSpiFlashIntrHandle +00003755 A HalUsbOtgIntrHandle +000037a5 A HalSdioHostIntrHandle +000037f5 A HalI2s0OrPcm0IntrHandle +00003845 A HalI2s1OrPcm1IntrHandle +00003895 A HalWlDmaIntrHandle +000038e5 A HalWlProtocolIntrHandle +00003935 A HalCryptoIntrHandle +00003985 A HalGmacIntrHandle +000039d5 A HalGdma0Ch0IntrHandle +00003a25 A HalGdma0Ch1IntrHandle +00003a75 A HalGdma0Ch2IntrHandle +00003ac5 A HalGdma0Ch3IntrHandle +00003b15 A HalGdma0Ch4IntrHandle +00003b65 A HalGdma0Ch5IntrHandle +00003bb5 A HalGdma1Ch0IntrHandle +00003c05 A HalGdma1Ch1IntrHandle +00003c55 A HalGdma1Ch2IntrHandle +00003ca5 A HalGdma1Ch3IntrHandle +00003cf5 A HalGdma1Ch4IntrHandle +00003d45 A HalGdma1Ch5IntrHandle +00003d95 A HalSdioDeviceIntrHandle +00003de5 A VectorTableInitRtl8195A +00004019 A VectorTableInitForOSRtl8195A +00004029 A VectorIrqRegisterRtl8195A +00004091 A VectorIrqUnRegisterRtl8195A +000040f1 A VectorIrqEnRtl8195A +0000418d A VectorIrqDisRtl8195A +0000422d A _UartRxDmaIrqHandle +00004281 A HalRuartPutCRtl8195a +0000429d A HalRuartGetCRtl8195a +000042bd A HalRuartRTSCtrlRtl8195a +000042e1 A HalRuartGetDebugValueRtl8195a +000043e1 A HalRuartGetIMRRtl8195a +0000442d A HalRuartSetIMRRtl8195a +00004465 A _UartIrqHandle +00004681 A HalRuartDmaInitRtl8195a +00004845 A HalRuartIntDisableRtl8195a +00004855 A HalRuartDeInitRtl8195a +00004985 A HalRuartIntEnableRtl8195a +00004995 A _UartTxDmaIrqHandle +000049d1 A HalRuartRegIrqRtl8195a +00004a4d A HalRuartAdapterLoadDefRtl8195a +00004add A HalRuartTxGdmaLoadDefRtl8195a +00004bc9 A HalRuartRxGdmaLoadDefRtl8195a +00004cc9 A RuartLock +00004ced A RuartUnLock +00004d09 A HalRuartIntSendRtl8195a +00004e35 A HalRuartDmaSendRtl8195a +00004f89 A HalRuartStopSendRtl8195a +0000504d A HalRuartIntRecvRtl8195a +000051ad A HalRuartDmaRecvRtl8195a +000052cd A HalRuartStopRecvRtl8195a +00005385 A RuartIsTimeout +000053b1 A HalRuartSendRtl8195a +00005599 A HalRuartRecvRtl8195a +00005751 A RuartResetRxFifoRtl8195a +00005775 A HalRuartResetRxFifoRtl8195a +00005829 A HalRuartInitRtl8195a +00005df1 A HalGdmaOnOffRtl8195a +00005e0d A HalGdmaChIsrEnAndDisRtl8195a +00005e51 A HalGdmaChEnRtl8195a +00005e6d A HalGdmaChDisRtl8195a +00005e91 A HalGdamChInitRtl8195a +00005ebd A HalGdmaChSetingRtl8195a +000060dd A HalGdmaChBlockSetingRtl8195a +00006419 A HalGdmaChIsrCleanRtl8195a +000064a1 A HalGdmaChCleanAutoSrcRtl8195a +00006501 A HalGdmaChCleanAutoDstRtl8195a +00006561 A HalEFUSEPowerSwitch8195AROM +000065f9 A HALEFUSEOneByteReadROM +00006699 A HALEFUSEOneByteWriteROM +0000681d A __rtl_memcmpb_v1_00 +00006861 A __rtl_random_v1_00 +00006881 A __rtl_align_to_be32_v1_00 +00006899 A __rtl_memsetw_v1_00 +000068ad A __rtl_memsetb_v1_00 +000068bd A __rtl_memcpyw_v1_00 +000068dd A __rtl_memcpyb_v1_00 +000068f5 A __rtl_memDump_v1_00 +00006901 A __rtl_AES_set_encrypt_key +00006c11 A __rtl_cryptoEngine_AES_set_decrypt_key +00006c95 A __rtl_cryptoEngine_set_security_mode_v1_00 +00006ea9 A __rtl_cryptoEngine_init_v1_00 +00007055 A __rtl_cryptoEngine_exit_v1_00 +000070b1 A __rtl_cryptoEngine_reset_v1_00 +000070ed A __rtl_cryptoEngine_v1_00 +00007c69 A __rtl_crypto_cipher_init_v1_00 +00007c89 A __rtl_crypto_cipher_encrypt_v1_00 +00007cad A __rtl_crypto_cipher_decrypt_v1_00 +00007cd5 A HalSsiPinmuxEnableRtl8195a +00007e45 A HalSsiEnableRtl8195a +00007ef9 A HalSsiDisableRtl8195a +00007fad A HalSsiLoadSettingRtl8195a +00008521 A HalSsiSetInterruptMaskRtl8195a +000085c9 A HalSsiGetInterruptMaskRtl8195a +0000863d A HalSsiSetSclkPolarityRtl8195a +00008715 A HalSsiSetSclkPhaseRtl8195a +000087e9 A HalSsiWriteRtl8195a +00008861 A HalSsiSetDeviceRoleRtl8195a +000088c9 A HalSsiSetRxFifoThresholdLevelRtl8195a +00008941 A HalSsiSetTxFifoThresholdLevelRtl8195a +000089b9 A HalSsiReadRtl8195a +00008a2d A HalSsiGetRxFifoLevelRtl8195a +00008aa5 A HalSsiGetTxFifoLevelRtl8195a +00008b1d A HalSsiGetStatusRtl8195a +00008b91 A HalSsiWriteableRtl8195a +00008c09 A HalSsiReadableRtl8195a +00008c81 A HalSsiBusyRtl8195a +00008cf9 A HalSsiReadInterruptRtl8195a +00008efd A HalSsiWriteInterruptRtl8195a +00009009 A HalSsiSetSlaveEnableRegisterRtl8195a +000090d9 A HalSsiGetInterruptStatusRtl8195a +0000914d A HalSsiInterruptEnableRtl8195a +00009299 A HalSsiInterruptDisableRtl8195a +000093e9 A HalSsiGetRawInterruptStatusRtl8195a +0000945d A HalSsiGetSlaveEnableRegisterRtl8195a +000094d1 A HalSsiInitRtl8195a +00009ba5 A _SsiReadInterrupt +00009db1 A _SsiWriteInterrupt +00009eb1 A _SsiIrqHandle +0000a061 A HalI2CWrite32 +0000a09d A HalI2CRead32 +0000a0dd A HalI2CDeInit8195a +0000a1f1 A HalI2CSendRtl8195a +0000a25d A HalI2CReceiveRtl8195a +0000a271 A HalI2CEnableRtl8195a +0000a389 A HalI2CIntrCtrl8195a +0000a3a1 A HalI2CReadRegRtl8195a +0000a3b1 A HalI2CWriteRegRtl8195a +0000a3c5 A HalI2CSetCLKRtl8195a +0000a6e9 A HalI2CMassSendRtl8195a +0000a749 A HalI2CClrIntrRtl8195a +0000a761 A HalI2CClrAllIntrRtl8195a +0000a775 A HalI2CInit8195a +0000aa31 A HalI2CDMACtrl8195a +0000aa61 A RtkI2CIoCtrl +0000aa65 A RtkI2CPowerCtrl +0000aa69 A HalI2COpInit +0000ac65 A I2CIsTimeout +0000b435 A I2CTXGDMAISRHandle +0000b4c1 A I2CRXGDMAISRHandle +0000b54d A RtkI2CIrqInit +0000b611 A RtkI2CIrqDeInit +0000b675 A RtkI2CPinMuxInit +0000b7c9 A RtkI2CPinMuxDeInit +0000b955 A RtkI2CDMAInit +0000bc95 A RtkI2CInit +0000bdad A RtkI2CDMADeInit +0000be4d A RtkI2CDeInit +0000bee5 A RtkI2CSendUserAddr +0000c07d A RtkI2CSend +0000c6dd A _RtkI2CReceive +0000ce51 A RtkI2CLoadDefault +0000cf21 A RtkSalI2COpInit +0000cf65 A HalI2SWrite32 +0000cf85 A HalI2SRead32 +0000cfa9 A HalI2SDeInitRtl8195a +0000cfc9 A HalI2STxRtl8195a +0000d011 A HalI2SRxRtl8195a +0000d05d A HalI2SEnableRtl8195a +0000d0b1 A HalI2SIntrCtrlRtl8195a +0000d0d1 A HalI2SReadRegRtl8195a +0000d0dd A HalI2SClrIntrRtl8195a +0000d0fd A HalI2SClrAllIntrRtl8195a +0000d11d A HalI2SInitRtl8195a +0000d2e5 A GPIO_GetIPPinName_8195a +0000d331 A GPIO_GetChipPinName_8195a +0000d39d A GPIO_PullCtrl_8195a +0000d421 A GPIO_FuncOn_8195a +0000d481 A GPIO_FuncOff_8195a +0000d4e9 A GPIO_Int_Mask_8195a +0000d511 A GPIO_Int_SetType_8195a +0000d5fd A HAL_GPIO_IrqHandler_8195a +0000d645 A HAL_GPIO_MbedIrqHandler_8195a +0000d6a1 A HAL_GPIO_UserIrqHandler_8195a +0000d6cd A HAL_GPIO_IntCtrl_8195a +0000d805 A HAL_GPIO_Init_8195a +0000dac1 A HAL_GPIO_DeInit_8195a +0000dbd1 A HAL_GPIO_ReadPin_8195a +0000dc91 A HAL_GPIO_WritePin_8195a +0000ddad A HAL_GPIO_RegIrq_8195a +0000ddf5 A HAL_GPIO_UnRegIrq_8195a +0000de15 A HAL_GPIO_UserRegIrq_8195a +0000def9 A HAL_GPIO_UserUnRegIrq_8195a +0000dfc1 A HAL_GPIO_MaskIrq_8195a +0000e061 A HAL_GPIO_UnMaskIrq_8195a +0000e101 A HAL_GPIO_IntDebounce_8195a +0000e1c1 A HAL_GPIO_GetIPPinName_8195a +0000e1c9 A HAL_GPIO_PullCtrl_8195a +0000e259 A DumpForOneBytes +0000e419 A CmdRomHelp +0000e491 A CmdWriteWord +0000e505 A CmdDumpHelfWord +0000e5f1 A CmdDumpWord +0000e6f5 A CmdDumpByte +0000e751 A CmdSpiFlashTool +0000e7a9 A GetRomCmdNum +0000e7ad A CmdWriteByte +0000e7ed A Isspace +0000e801 A Strtoul +0000e8b1 A ArrayInitialize +0000e8c9 A GetArgc +0000e8f9 A GetArgv +0000e95d A UartLogCmdExecute +0000e9fd A UartLogShowBackSpace +0000ea39 A UartLogRecallOldCmd +0000ea71 A UartLogHistoryCmd +0000eadd A UartLogCmdChk +0000ebf5 A UartLogIrqHandle +0000ecc5 A RtlConsolInit +0000ed49 A RtlConsolTaskRom +0000ed79 A RtlExitConsol +0000edcd A RtlConsolRom +0000ee0d A HalTimerOpInit +0000ee59 A HalTimerIrq2To7Handle +0000ef09 A HalGetTimerIdRtl8195a +0000ef3d A HalTimerInitRtl8195a +0000f069 A HalTimerDisRtl8195a +0000f089 A HalTimerEnRtl8195a +0000f0a9 A HalTimerReadCountRtl8195a +0000f0bd A HalTimerIrqClearRtl8195a +0000f0d1 A HalTimerDumpRegRtl8195a +0000f129 A VSprintf +0000f39d A DiagPrintf +0000f3b9 A DiagSPrintf +0000f3d1 A DiagSnPrintf +0000f3ed A prvDiagPrintf +0000f40d A prvDiagSPrintf +0000f429 A _memcmp +0000f465 A _memcpy +0000f511 A _memset +0000f585 A Rand +0000f60d A _strncpy +0000f629 A _strcpy +0000f639 A prvStrCpy +0000f651 A _strlen +0000f669 A _strnlen +0000f699 A prvStrLen +0000f6b1 A _strcmp +0000f6d1 A _strncmp +0000f719 A prvStrCmp +0000f749 A StrUpr +0000f769 A prvAtoi +0000f7bd A prvStrStr +0000f7d5 A _strsep +0000f815 A skip_spaces +0000f831 A skip_atoi +0000f869 A _parse_integer_fixup_radix +0000f8bd A _parse_integer +0000f915 A simple_strtoull +0000f945 A simple_strtoll +0000f965 A simple_strtoul +0000f96d A simple_strtol +0000f985 A _vsscanf +0000ff71 A _sscanf +0000ff91 A div_u64 +0000ff99 A div_s64 +0000ffa1 A div_u64_rem +0000ffb1 A div_s64_rem +0000ffc1 A _strpbrk +0000ffed A _strchr +00010005 A aes_set_key +000103d1 A aes_encrypt +000114a5 A aes_decrypt +000125c9 A AES_WRAP +00012701 A AES_UnWRAP +00012861 A crc32_get +00012895 A arc4_byte +000128bd A rt_arc4_init +00012901 A rt_arc4_crypt +000131c1 A rt_md5_init +000131f5 A rt_md5_append +0001327d A rt_md5_final +000132d5 A rt_md5_hmac +00013449 A rtw_get_bit_value_from_ieee_value +00013475 A rtw_is_cckrates_included +000134b5 A rtw_is_cckratesonly_included +000134dd A rtw_check_network_type +0001350d A rtw_set_fixed_ie +0001352d A rtw_set_ie +0001355d A rtw_get_ie +00013591 A rtw_set_supported_rate +00013611 A rtw_get_rateset_len +0001362d A rtw_get_wpa_ie +000136c9 A rtw_get_wpa2_ie +00013701 A rtw_get_wpa_cipher_suite +00013769 A rtw_get_wpa2_cipher_suite +000137d1 A rtw_parse_wpa_ie +000138ad A rtw_parse_wpa2_ie +00013965 A rtw_get_sec_ie +00013a15 A rtw_get_wps_ie +00013a99 A rtw_get_wps_attr +00013b49 A rtw_get_wps_attr_content +00013b91 A rtw_ieee802_11_parse_elems +00013d9d A str_2char2num +00013db9 A key_2char2num +00013dd1 A convert_ip_addr +00013e9d A rom_psk_PasswordHash +00013ed5 A rom_psk_CalcGTK +00013f69 A rom_psk_CalcPTK +00014295 A wep_80211_encrypt +000142f5 A wep_80211_decrypt +00014389 A tkip_micappendbyte +000143d9 A rtw_secmicsetkey +00014419 A rtw_secmicappend +00014435 A rtw_secgetmic +0001449d A rtw_seccalctkipmic +000145a5 A tkip_phase1 +00014725 A tkip_phase2 +00014941 A tkip_80211_encrypt +000149d5 A tkip_80211_decrypt +00014a8d A aes1_encrypt +00014c65 A aesccmp_construct_mic_iv +00014ccd A aesccmp_construct_mic_header1 +00014d21 A aesccmp_construct_mic_header2 +00014db5 A aesccmp_construct_ctr_preload +00014e29 A aes_80211_encrypt +000151ad A aes_80211_decrypt +000155b9 A _sha1_process_message_block +00015749 A _sha1_pad_message +000157e5 A rt_sha1_init +00015831 A rt_sha1_update +000158a9 A rt_sha1_finish +00015909 A rt_hmac_sha1 +00015a65 A rom_aes_128_cbc_encrypt +00015ae1 A rom_aes_128_cbc_decrypt +00015b5d A rom_rijndaelKeySetupEnc +00015c39 A rom_aes_decrypt_init +00015d15 A rom_aes_internal_decrypt +00016071 A rom_aes_decrypt_deinit +00016085 A rom_aes_encrypt_init +0001609d A rom_aes_internal_encrypt +00016451 A rom_aes_encrypt_deinit +00017b35 A bignum_init +00017b61 A bignum_deinit +00017b81 A bignum_get_unsigned_bin_len +00017b85 A bignum_get_unsigned_bin +00017c21 A bignum_set_unsigned_bin +00017cd1 A bignum_cmp +00017cd5 A bignum_cmp_d +00017cfd A bignum_add +00017d0d A bignum_sub +00017d1d A bignum_mul +00017d2d A bignum_exptmod +00017d51 A WPS_realloc +00017d99 A os_zalloc +00017dc1 A rom_hmac_sha256_vector +00017ebd A rom_hmac_sha256 +00018009 A rom_sha256_vector +00018221 A phy_CalculateBitShift +00018239 A PHY_SetBBReg_8195A +00018279 A PHY_QueryBBReg_8195A +0001829d A ROM_odm_QueryRxPwrPercentage +000182bd A ROM_odm_EVMdbToPercentage +000182e5 A ROM_odm_SignalScaleMapping_8195A +000183cd A ROM_odm_FalseAlarmCounterStatistics +00018721 A ROM_odm_SetEDCCAThreshold +00018749 A ROM_odm_SetTRxMux +00018771 A ROM_odm_SetCrystalCap +000187d5 A ROM_odm_GetDefaultCrytaltalCap +000187e9 A ROM_ODM_CfoTrackingReset +00018811 A ROM_odm_CfoTrackingFlow +0001965d A curve25519_donna +0001a391 A aes_test_alignment_detection +0001a3ed A aes_mode_reset +0001a3f9 A aes_ecb_encrypt +0001a431 A aes_ecb_decrypt +0001a469 A aes_cbc_encrypt +0001a579 A aes_cbc_decrypt +0001a701 A aes_cfb_encrypt +0001a9e5 A aes_cfb_decrypt +0001acc9 A aes_ofb_crypt +0001af7d A aes_ctr_crypt +0001b289 A aes_encrypt_key128 +0001b2a5 A aes_encrypt_key192 +0001b2c1 A aes_encrypt_key256 +0001b2e1 A aes_encrypt_key +0001b351 A aes_decrypt_key128 +0001b36d A aes_decrypt_key192 +0001b389 A aes_decrypt_key256 +0001b3a9 A aes_decrypt_key +0001b419 A aes_init +0001b41d A CRYPTO_chacha_20 +0001bc25 A CRYPTO_poly1305_init +0001bd09 A CRYPTO_poly1305_update +0001bd8d A CRYPTO_poly1305_finish +0001ceb5 A rom_sha512_starts +0001d009 A rom_sha512_update +0001d011 A rom_sha512_finish +0001d261 A rom_sha512 +0001d299 A rom_sha512_hmac_starts +0001d35d A rom_sha512_hmac_update +0001d365 A rom_sha512_hmac_finish +0001d3b5 A rom_sha512_hmac_reset +0001d3d1 A rom_sha512_hmac +0001d40d A rom_sha512_hkdf +0001d501 A rom_ed25519_gen_keypair +0001d505 A rom_ed25519_gen_signature +0001d51d A rom_ed25519_verify_signature +0001d521 A rom_ed25519_crypto_sign_seed_keypair +0001d579 A rom_ed25519_crypto_sign_detached +0001d655 A rom_ed25519_crypto_sign_verify_detached +0001f86d A rom_ed25519_ge_double_scalarmult_vartime +0001fc35 A rom_ed25519_ge_frombytes_negate_vartime +000207d5 A rom_ed25519_ge_p3_tobytes +00020821 A rom_ed25519_ge_scalarmult_base +000209e1 A rom_ed25519_ge_tobytes +00020a2d A rom_ed25519_sc_muladd +0002603d A rom_ed25519_sc_reduce +00028a4d A __rtl_memchr_v1_00 +00028ae1 A __rtl_memcmp_v1_00 +00028b49 A __aeabi_memcpy +00028b49 A __aeabi_memcpy4 +00028b49 A __rtl_memcpy_v1_00 +00028bed A __rtl_memmove_v1_00 +00028cb5 A __aeabi_memset +00028cb5 A __rtl_memset_v1_00 +00028d49 A __rtl_strcat_v1_00 +00028d91 A __rtl_strchr_v1_00 +00028e55 A __rtl_strcmp_v1_00 +00028ec9 A __rtl_strcpy_v1_00 +00028f15 A __rtl_strlen_v1_00 +00028f69 A __rtl_strncat_v1_00 +00028fc5 A __rtl_strncmp_v1_00 +0002907d A __rtl_strncpy_v1_00 +000293cd A __rtl_strstr_v1_00 +0002960d A __rtl_strsep_v1_00 +00029619 A __rtl_strtok_v1_00 +0002962d A __rtl__strtok_r_v1_00 +00029691 A __rtl_strtok_r_v1_00 +00029699 A __rtl_close_v1_00 +000296ad A __rtl_fstat_v1_00 +000296c1 A __rtl_isatty_v1_00 +000296d5 A __rtl_lseek_v1_00 +000296e9 A __rtl_open_v1_00 +000296fd A __rtl_read_v1_00 +00029711 A __rtl_write_v1_00 +00029725 A __rtl_sbrk_v1_00 +000297bd A __rtl_ltoa_v1_00 +00029855 A __rtl_ultoa_v1_00 +000298c5 A __rtl_dtoi_v1_00 +00029945 A __rtl_dtoi64_v1_00 +000299dd A __rtl_dtoui_v1_00 +000299e5 A __rtl_ftol_v1_00 +00029a51 A __rtl_itof_v1_00 +00029ae9 A __rtl_itod_v1_00 +00029b79 A __rtl_i64tod_v1_00 +00029c55 A __rtl_uitod_v1_00 +00029d2d A __rtl_ftod_v1_00 +00029de9 A __rtl_dtof_v1_00 +00029e89 A __rtl_uitof_v1_00 +00029f65 A __rtl_fadd_v1_00 +0002a261 A __rtl_fsub_v1_00 +0002a559 A __rtl_fmul_v1_00 +0002a695 A __rtl_fdiv_v1_00 +0002a825 A __rtl_dadd_v1_00 +0002aed9 A __rtl_dsub_v1_00 +0002b555 A __rtl_dmul_v1_00 +0002b8ad A __rtl_ddiv_v1_00 +0002be4d A __rtl_dcmpeq_v1_00 +0002bebd A __rtl_dcmplt_v1_00 +0002bf51 A __rtl_dcmpgt_v1_00 +0002c049 A __rtl_dcmple_v1_00 +0002c139 A __rtl_fcmplt_v1_00 +0002c195 A __rtl_fcmpgt_v1_00 +0002c229 A __rtl_cos_f32_v1_00 +0002c435 A __rtl_sin_f32_v1_00 +0002c639 A __rtl_fabs_v1_00 +0002c641 A __rtl_fabsf_v1_00 +0002c77d A __rtl_dtoa_r_v1_00 +0002d7d1 A __rom_mallocr_init_v1_00 +0002d841 A __rtl_free_r_v1_00 +0002da31 A __rtl_malloc_r_v1_00 +0002df55 A __rtl_realloc_r_v1_00 +0002e331 A __rtl_memalign_r_v1_00 +0002e421 A __rtl_valloc_r_v1_00 +0002e42d A __rtl_pvalloc_r_v1_00 +0002e441 A __rtl_calloc_r_v1_00 +0002e4a9 A __rtl_cfree_r_v1_00 +0002e515 A __rtl_Balloc_v1_00 +0002e571 A __rtl_Bfree_v1_00 +0002e585 A __rtl_i2b_v1_00 +0002e599 A __rtl_multadd_v1_00 +0002e629 A __rtl_mult_v1_00 +0002e769 A __rtl_pow5mult_v1_00 +0002e809 A __rtl_hi0bits_v1_00 +0002e845 A __rtl_d2b_v1_00 +0002e901 A __rtl_lshift_v1_00 +0002e9bd A __rtl_cmp_v1_00 +0002ea01 A __rtl_diff_v1_00 +0002eae9 A __rtl_sread_v1_00 +0002eb39 A __rtl_seofread_v1_00 +0002eb3d A __rtl_swrite_v1_00 +0002ebc1 A __rtl_sseek_v1_00 +0002ec11 A __rtl_sclose_v1_00 +0002ec41 A __rtl_sbrk_r_v1_00 +0002ef8d A __rtl_fflush_r_v1_00 +0002f661 A __rtl_vfprintf_r_v1_00 +00030c15 A __rtl_fpclassifyd +00030c68 A CpkClkTbl +00030c80 A ROM_IMG1_VALID_PATTEN +00030c88 A SpicCalibrationPattern +00030c98 A SpicInitCPUCLK +00030ca8 A BAUDRATE +00030d1c A OVSR +00030d90 A DIV +00030e04 A OVSR_ADJ +00030e78 A __AES_rcon +00030ea0 A __AES_Te4 +000312a0 A I2CDmaChNo +000312b4 A _GPIO_PinMap_Chip2IP_8195a +0003136c A _GPIO_PinMap_PullCtrl_8195a +00031594 A _GPIO_SWPORT_DDR_TBL +00031598 A _GPIO_EXT_PORT_TBL +0003159c A _GPIO_SWPORT_DR_TBL +000316a0 A UartLogRomCmdTable +00031700 A _HalRuartOp +00031760 A _HalGdmaOp +0003540c A RTW_WPA_OUI_TYPE +00035410 A WPA_CIPHER_SUITE_NONE +00035414 A WPA_CIPHER_SUITE_WEP40 +00035418 A WPA_CIPHER_SUITE_TKIP +0003541c A WPA_CIPHER_SUITE_CCMP +00035420 A WPA_CIPHER_SUITE_WEP104 +00035424 A RSN_CIPHER_SUITE_NONE +00035428 A RSN_CIPHER_SUITE_WEP40 +0003542c A RSN_CIPHER_SUITE_TKIP +00035430 A RSN_CIPHER_SUITE_CCMP +00035434 A RSN_CIPHER_SUITE_WEP104 +00035444 A RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X +00035448 A RSN_AUTH_KEY_MGMT_UNSPEC_802_1X +0003544c A RSN_VERSION_BSD +00035988 A rom_wps_Te0 +00035d88 A rom_wps_rcons +00035d94 A rom_wps_Td4s +00035e94 A rom_wps_Td0 +0003ec24 A str_rom_0123456789ABCDEF +0003ec24 A txt0123456789ABCDEF +0003ed05 A str_rom_57ch3Dch0A +000442d6 A str_rom_hex_addr +00044660 A str_rom_0123456789abcdef +0004467c A __rom_b_cut_end__ +0004467c A __rom_c_cut_text_start__ +0004467d A HalInitPlatformLogUartV02 +0004471d A HalReInitPlatformLogUartV02 +00044755 A HalInitPlatformTimerV02 +000447cd A HalShowBuildInfoV02 +00044831 A SpicReleaseDeepPowerDownFlashRtl8195A +0004488d A HalSpiInitV02 +00044a29 A HalBootFlowV02 +00044ae5 A HalInitialROMCodeGlobalVarV02 +00044b41 A HalResetVsrV02 +00044ce1 A HalI2CSendRtl8195aV02 +00044d59 A HalI2CSetCLKRtl8195aV02 +0004508d A RtkI2CSendV02 +000459a1 A RtkI2CReceiveV02 +000461ed A HalI2COpInitV02 +000463e9 A I2CISRHandleV02 +00046be1 A RtkSalI2COpInitV02 +00046c25 A SpicLoadInitParaFromClockRtl8195AV02 +00046c85 A SpiFlashAppV02 +00046dc5 A SpicInitRtl8195AV02 +00046ea1 A SpicEraseFlashRtl8195AV02 +00046f5d A HalTimerIrq2To7HandleV02 +00046fe1 A HalTimerIrqRegisterRtl8195aV02 +0004706d A HalTimerInitRtl8195aV02 +000471b5 A HalTimerReadCountRtl8195aV02 +000471d1 A HalTimerReLoadRtl8195aV02 +0004722d A HalTimerIrqUnRegisterRtl8195aV02 +000472c1 A HalTimerDeInitRtl8195aV02 +000472f9 A HalTimerOpInitV02 +00047345 A GPIO_LockV02 +00047379 A GPIO_UnLockV02 +000473a5 A GPIO_Int_Clear_8195aV02 +000473b5 A HAL_GPIO_IntCtrl_8195aV02 +00047541 A FindElementIndexV02 +0004756d A HalRuartInitRtl8195aV02 +00047619 A DramInit_rom +00047979 A ChangeRandSeed_rom +00047985 A Sdr_Rand2_rom +000479dd A MemTest_rom +00047a45 A SdrCalibration_rom +00047d99 A SdrControllerInit_rom +00047e39 A SDIO_EnterCritical +00047e85 A SDIO_ExitCritical +00047ec5 A SDIO_IRQ_Handler_Rom +00047f31 A SDIO_Interrupt_Init_Rom +00047f81 A SDIO_Device_Init_Rom +00048215 A SDIO_Interrupt_DeInit_Rom +00048255 A SDIO_Device_DeInit_Rom +00048281 A SDIO_Enable_Interrupt_Rom +000482a1 A SDIO_Disable_Interrupt_Rom +000482c1 A SDIO_Clear_ISR_Rom +000482d9 A SDIO_Alloc_Rx_Pkt_Rom +00048331 A SDIO_Free_Rx_Pkt_Rom +00048355 A SDIO_Recycle_Rx_BD_Rom +000484f1 A SDIO_RX_IRQ_Handler_BH_Rom +0004851d A SDIO_RxTask_Rom +0004856d A SDIO_Process_H2C_IOMsg_Rom +0004859d A SDIO_Send_C2H_IOMsg_Rom +000485b5 A SDIO_Process_RPWM_Rom +000485e9 A SDIO_Reset_Cmd_Rom +00048611 A SDIO_Rx_Data_Transaction_Rom +00048829 A SDIO_Send_C2H_PktMsg_Rom +000488f5 A SDIO_Register_Tx_Callback_Rom +000488fd A SDIO_ReadMem_Rom +000489a9 A SDIO_WriteMem_Rom +00048a69 A SDIO_SetMem_Rom +00048b29 A SDIO_TX_Pkt_Handle_Rom +00048c69 A SDIO_TX_FIFO_DataReady_Rom +00048d95 A SDIO_IRQ_Handler_BH_Rom +00048e9d A SDIO_TxTask_Rom +00048eed A SDIO_TaskUp_Rom +00048f55 A SDIO_Boot_Up +00049070 A __rom_c_cut_rodata_start__ +00049070 A __rom_c_cut_text_end__ +00049070 A BAUDRATE_v02 +000490fc A OVSR_v02 +00049188 A DIV_v02 +00049214 A OVSR_ADJ_v02 +000492a0 A SdrDramInfo_rom +000492b4 A SdrDramTiming_rom +000492e8 A SdrDramModeReg_rom +00049304 A SdrDramDev_rom +00049314 A __rom_c_cut_rodata_end__ +10000000 D __ram_image_start__ +10000000 D NewVectorTable +10000100 D UserIrqFunTable +10000200 D UserIrqDataTable +10000300 D __rom_bss_start__ +10000300 D CfgSysDebugWarn +10000304 D CfgSysDebugInfo +10000308 D CfgSysDebugErr +1000030c D ConfigDebugWarn +10000310 D ConfigDebugInfo +10000314 D ConfigDebugErr +10000318 D HalTimerOp +10000334 D GPIOState +1000034c D gTimerRecord +10000350 D SSI_DBG_CONFIG +10000354 D _pHAL_Gpio_Adapter +10000358 D Timer2To7VectorTable +10000370 D _rand_first +10000374 D _rand_z1 +10000378 D _rand_z2 +1000037c D _rand_z3 +10000380 D _rand_z4 +10000384 D pUartLogCtl +10000388 D UartLogBuf +10000408 D UartLogCtl +10000430 D UartLogHistoryBuf +100006ac D ArgvArray +100006d4 D rom_wlan_ram_map +100006e0 D FalseAlmCnt +10000720 D ROMInfo +10000738 D DM_CfoTrack +10000760 D rom_libgloss_ram_map +10000780 D __rtl_malloc_av_ +10000b88 D __rtl_malloc_trim_threshold +10000b8c D __rtl_malloc_top_pad +10000b90 D __rtl_malloc_sbrk_base +10000b94 D __rtl_malloc_max_sbrked_mem +10000b98 D __rtl_malloc_max_total_mem +10000b9c D __rtl_malloc_current_mallinfo +10000bc4 D __rtl_errno +10000bc8 A __ram_start_table_start__ +10000bc8 A gRamStartFun +10000bc8 D __rom_bss_end__ +10000bc8 T __ram_image1_text_start__ +10000bcc A gRamPatchWAKE +10000bd0 A gRamPatchFun0 +10000bd4 A gRamPatchFun1 +10000bd8 A gRamPatchFun2 +10000bdc A __image1_validate_code__ +10000bdc T RAM_IMG1_VALID_PATTEN +10000be4 T rand_x +10000be8 T AvaWds +10001be8 T SdrDramInfo +10001bfc T SdrDramTiming +10001c30 T SdrDramModeReg +10001c4c T SdrDramDev +10001c60 T _rtl_impure_ptr +10001c68 T impure_reent +10002090 T _rom_unc_data +100020b4 T _sdr_rnd2_y +100020b8 T _sdr_rnd2_z +100020bc T _sdr_rnd2_c +100020c0 t __ram_image_end__ +100020c0 T gBoot_Gpio_Adapter +100021ec T SpicInitParaAllClk +10002400 B __rom_heap_start__ +10002400 B end +10002430 t tab_seg_def +10002468 t txt_tab_seg +10002488 t flashcpy +10002528 t get_seg_id +10002560 t RtlConsolRam +10002584 T InitSpicFlashType +100025c4 t EnterImage15 +10002c80 t RtlBoot4ToSram +10002c86 t RtlBoot3ToSram +10002c8c t RtlBoot2ToSram +10002c92 t RtlBoot1ToSram +10002c98 t RtlBootToFlash +10002ca0 t InitTabParaAllClk +10002ce8 T spic_table_flash +10002d04 T __image1_bss_end__ +10002d04 T __image1_bss_start__ +10002d04 T __ram_image1_text_end__ +10003000 B __ram_heap1_start__ +10003000 B __rom_heap_end__ +10006000 D .image2.start.table1$$Base +10006000 D __image2_entry_func__ +10006000 D __ram_heap1_end__ +10006000 D __ram_image2_text_start__ +10006000 D gImage2EntryFun0 +10006004 D __image2_validate_code__ +10006004 D RAM_IMG2_VALID_PATTEN +10006018 D cus_sig +10006040 T SDIO_Device_Off +10006064 T SYSPlatformInit +10006084 T InfraStart +1000635c T UartLogIrqHandleRam +10006420 T RtlConsolTaskRam +100064e8 T console_init +100065b4 T SpicRxCmdRefinedRtl8195A +100066bc T SpicInitRefinedRtl8195A +10006770 T SpicReadUniqueIDRtl8195A +100067e4 T SpicReadIDRtl8195A +100068f4 T SpicConfigAutoModeRtl8195A +10006964 T SpicUserReadRtl8195A +10006ad8 T SpicUserReadFourByteRtl8195A +10006bf4 T SpicGetExtendAddrRtl8195A +10006c4c T SpicGetConfigRegRtl8195A +10006ca4 T SpicGetFlashStatusRefinedRtl8195A +10006cfc T SpicWaitWipDoneRefinedRtl8195A +10006d38 T SpicTxCmdWithDataRtl8195A +10006e0c T SpicGetFlashFlagRtl8195A +10006e98 T SpicWaitOperationDoneRtl8195A +10006ed4 T SpicDeepPowerDownFlashRtl8195A +10006f60 T SpicUserProgramRtl8195A +10007190 T SpicWaitWipRtl8195A +100071a4 T SpicTxFlashInstRtl8195A +10007238 T SpicEraseFlashRefinedRtl8195A +10007242 T SpicDieEraseFlashRtl8195A +10007264 T SpicBlockEraseFlashRtl8195A +10007286 T SpicSectorEraseFlashRtl8195A +100072a8 T SpicSetExtendAddrRtl8195A +100072c2 T SpicSetFlashStatusRefinedRtl8195A +100072f4 T SpicWriteProtectFlashRtl8195A +1000731c T SpicDisableRtl8195A +1000732c T SpicNVMCalLoad +1000743c T SpicNVMCalLoadAll +1000745a T SpicNVMCalStore +100075b4 T SpicCalibrationRtl8195A +10007808 T SpicFlashInitRtl8195A +100078b4 T SpicOneBitCalibrationRtl8195A +100078cc T ShowMemInfo +100078fc T main +10007994 T sys_write_cfg +100079a4 T user_ws_thrd +100079cc T user_init_thrd +10007a40 t WS2812_RGB2PWM +10007a80 t master_tr_done_callback +10007ad8 T WS2812_Tx +10007b98 T ws2812_Update +10007cc8 T ws2812_SetLen +10007d54 T ws2812_Init +10007e24 T ledFilter_Init +10007ecc T ledFilter_SetDefualtValue +10007ee8 T ledFilter_InitRainbow +10007f10 T ledFilter_Rainbow +10007f64 T ledFilter_InitFade +10007f98 T ledFilter_Fade +10008034 T ledFilter_InitWave +1000805c T ledFilter_Wave +100080b8 T ledFilter_InitConstant +100080e4 T ledFilter_Constant +10008164 T ledEffectsServer_Init +100081cc T ledEffectsServer_Task +1000824c t tcpsrv_list_delete +100082c8 t recv_trim_bufi +100083b6 t tcpsrv_server_sent +100083e4 T tspsrv_error_msg +100083fc T tcpsrv_print_remote_info +1000842c T tcpsrv_disconnect_calback_default +10008444 T tcpsrv_listen_default +10008458 T tcpsrv_sent_callback_default +1000846c T tcpsrv_received_data_default +10008484 t tcpsrv_server_close +10008584 t tcpsrv_poll +100085ea t tcpsrv_server_recv +100086a4 t tcpsrv_error +100086e8 T find_tcp_pcb +1000874c t tspsrv_delete_pcb +1000879e T tcpsrv_disconnect +100087c0 T tcpsrv_int_sent_data +10008890 T tcpsrv_unrecved_win +100088a8 T tcpsrv_server_port2pcfg +100088c0 t tcpsrv_server_accept +100089f0 T tcpsrv_init +10008a6c T tcpsrv_start +10008b04 T tcpsrv_close +10008b54 T WEBFSClose +10008b6c T WEBFSGetArray +10008bdc T WEBFSInit +10008c64 t GetFATRecord +10008cd4 T WEBFSOpen +10008dc0 T WEBFSGetBytesRem +10008de0 T WEBFSGetFilename +10008e24 T WEBFS_max_size +10008e38 T WEBFS_curent_size +10008e74 T WEBFS_base_addr +10008e7c t web_inc_fp +10008ec0 t Close_web_conn +10008f04 T qfnk_task +10008f60 t find_boundary +10008fd8 t web_int_disconnect +10009014 t webserver_disconnect +1000903c t web_parse_vars +100090cc T head_find_ctr +10009124 T web_inc_fopen +100091a4 t webserver_open_file +100092d0 T web_inc_fclose +1000931c t webserver_send_fdata +100095f0 t webserver_sent_callback +10009668 T web_trim_bufi +100096a6 T web_feee_bufi +100096c0 t webserver_received_data +1000a424 T webserver_qfn +1000a448 T webserver_init +1000a4f0 T webserver_reinit +1000a514 T rom_xstrcpy +1000a52a T rom_xstrcmp +1000a542 T rom_atoi +1000a584 T copy_align4 +1000a63c T hextoul +1000a676 T ahextoul +1000a690 T cmpcpystr +1000a708 T str_array +1000a768 T strtomac +1000a7ca T urldecode +1000a876 T htmlcode +1000a978 T web_strnstr +1000a9b8 T base64decode +1000aa50 T web_hexdump +1000aba0 T web_get_flash +1000ac14 T web_get_ram +1000ac98 t web_wscan_xml +1000ade8 T web_int_callback +1000c130 T web_int_vars +1000cbbc T UserAuthorization +1000cc14 T SystemCoreClockUpdate +1000cc28 T print_on +1000cc40 W console_help +1000cc80 T GetArgvRam +1000cd24 T get_eap_phase +1000cd28 T get_eap_method +1000cd2c T eap_autoreconnect_hdl +1000cd30 t wifi_no_network_hdl +1000cd48 t wifi_handshake_done_hdl +1000cd64 t wifi_disconn_hdl +1000cdd0 t wifi_connected_hdl +1000ce04 T wifi_scan_each_report_hdl +1000cf64 T wifi_rx_beacon_hdl +1000cf68 T wifi_connect +1000d3a4 T wifi_disconnect +1000d3d8 T wifi_set_country +1000d3e4 T wifi_get_rssi +1000d3f0 T wifi_off +1000d468 T wifi_start_ap +1000d554 T wifi_set_network_mode +1000d56c T wifi_indication +1000d5ac T wifi_reg_event_handler +1000d5fc T wifi_unreg_event_handler +1000d640 T init_event_callback_list +1000d650 T promisc_deinit +1000d654 T promisc_recv_func +1000d658 T promisc_set +1000d65c T is_promisc_enabled +1000d660 T iw_ioctl +1000d67c T wext_set_ssid +1000d6b0 T wext_set_bssid +1000d6fa T is_broadcast_ether_addr +1000d71a T wext_set_auth_param +1000d748 T wext_set_key_ext +1000d846 T wext_set_passphrase +1000d87a T wext_set_mode +1000d89e T wext_set_ap_ssid +1000d8d2 T wext_set_country +1000d8f6 T wext_get_rssi +1000d922 T wext_set_channel +1000d950 T wext_set_scan +1000d980 T wext_wlan_indicate +1000dac8 T wext_set_autoreconnect +1000db18 T wext_set_adaptivity +1000db40 T wext_set_sta_num +1000db44 T LwIP_DHCP +1000dcc4 t chk_ap_netif_num +1000dd10 t wifi_autoreconnect_hdl_ +1000dd60 T read_wifi_cfg +1000dda8 T write_wifi_cfg +1000dde8 T get_new_hostname +1000de1c T _wext_set_lps_dtim +1000de38 T _wext_enable_powersave +1000de70 T rtw_security_to_idx +1000de90 T show_wifi_ap_ip +1000dec0 t wifi_run_ap +1000dfc8 T show_wifi_st_ip +1000dff8 t StartStDHCPClient +1000e098 t wifi_run_st.part.1 +1000e164 T wifi_run +1000e3a8 T wifi_init +1000e478 t wifi_autoreconnect_thread_ +1000e4d8 T wifi_close_scan +1000e558 t _wifi_scan_done_hdl +1000e5d8 T wifi_set_timer_scan +1000e610 T api_wifi_scan +1000e76c T lwip_strerr +1000e77c T lwip_socket_init +1000e780 t tcpip_thread +1000e808 T tcpip_input +1000e850 T tcpip_callback_with_block +1000e8a4 T tcpip_timeout +1000e8e8 T tcpip_init +1000e92c t icmp_send_response.isra.0 +1000e998 T icmp_input +1000eac0 T icmp_dest_unreach +1000eaca T icmp_time_exceeded +1000ead4 t igmp_send +1000eb78 t igmp_delaying_member +1000ebb4 t igmp_lookup_group.part.1 +1000ebec T igmp_init +1000ec08 T igmp_report_groups +1000ec38 T igmp_report_groups_leave +1000ec6c T igmp_lookfor_group +1000ec8c T igmp_start +1000ecc8 T igmp_input +1000ed94 T igmp_tmr +1000edc0 t lwip_standard_chksum +1000ee20 T inet_chksum_pseudo +1000eea6 T inet_chksum +1000eeb2 T inet_chksum_pbuf +1000eef8 T ip_route +1000ef60 T ip_input +1000f120 T ip_output_if_opt +1000f26c T ip_output_if +1000f28e T ip_output +1000f2c6 T ip4_addr_isbroadcast +1000f2f8 T ipaddr_aton +1000f40a T ipaddr_addr +1000f422 t ipfrag_free_pbuf_custom +1000f438 t ip_reass_free_complete_datagram +1000f4b8 t ip_reass_remove_oldest_datagram +1000f530 T ip_reass_tmr +1000f558 T ip_reass +1000f804 T ip_frag +1000f968 T lwip_htons +1000f96e T lwip_ntohs +1000f974 T lwip_htonl +1000f978 T lwip_ntohl +1000f97c t dhcp_set_state +1000f98c t dhcp_option +1000f9a8 t dhcp_option_byte +1000f9ba t dhcp_option_short +1000f9d8 t dhcp_option_long +1000fa0e t dhcp_option_trailer +1000fa38 t dhcp_create_msg +1000fba4 t dhcp_delete_msg +1000fbbc t dhcp_discover +1000fc6c t dhcp_reboot +1000fd10 t dhcp_check +1000fd36 t dhcp_bind +1000fe14 t dhcp_option_hostname.isra.0 +1000fe54 t dhcp_rebind +1000fee8 t dhcp_select +1000ffd0 t dhcp_recv +100103c0 T dhcp_arp_reply +10010458 T dhcp_renew +100104ea T dhcp_supplied_address +10010504 T dhcp_release +100105ec T dhcp_coarse_tmr +1001068c T dhcp_fine_tmr +10010724 T dhcp_release_unicast +100107e8 T dhcp_stop +10010818 T dhcp_start +100108c4 t dns_call_found +10010960 t dns_send +10010a28 t dns_check_entry +10010ae8 T dns_init +10010b10 T dns_setserver +10010b30 T dns_tmr +10010b4e T lwip_init +10010b74 T sys_timeout +10010bd4 T tcp_timer_needed +10010c08 t tcpip_tcp_timer +10010c40 T sys_timeouts_init +10010ca4 t dns_timer +10010cc0 t igmp_timer +10010cd8 t dhcp_timer_fine +10010cf4 t dhcp_timer_coarse +10010d10 t arp_timer +10010d2c t ip_reass_timer +10010d48 T sys_untimeout +10010d90 T sys_timeouts_mbox_fetch +10010df0 T netif_init +10010df4 T netif_set_ipaddr +10010e44 T netif_set_addr +10010e60 T netif_add +10010ec0 T netif_set_gw +10010ec8 T netif_set_netmask +10010ed0 T netif_set_default +10010edc T netif_set_up +10010f12 T netif_set_down +10010f2c t pbuf_free_ooseq_callback +10010f60 t pbuf_pool_is_empty +10010f9c T pbuf_alloced_custom +10010ff0 T pbuf_header +10011046 T pbuf_free +1001108c T pbuf_alloc +100111ac T pbuf_realloc +100111de T pbuf_clen +100111ee T pbuf_ref +10011208 T pbuf_cat +10011224 T pbuf_chain +10011234 T pbuf_copy +100112d0 T pbuf_copy_partial +1001132e T pbuf_coalesce +1001135c T raw_input +100113d8 t tcp_accept_null +100113e0 t tcp_new_port +10011434 T tcp_init +10011450 T tcp_bind +100114e0 T tcp_listen_with_backlog +100115a0 T tcp_update_rcv_ann_wnd +100115d4 T tcp_recved +1001160e T tcp_seg_free +10011628 T tcp_segs_free +10011638 T tcp_setprio +1001163c T tcp_seg_copy +10011664 T tcp_arg +10011668 T tcp_recv +1001166e T tcp_sent +10011674 T tcp_err +1001167a T tcp_accept +1001167e T tcp_poll +10011688 T tcp_pcb_purge +100116c8 T tcp_slowtmr +100119a4 T tcp_pcb_remove +10011a0c t tcp_close_shutdown +10011b58 T tcp_close +10011b70 T tcp_recv_null +10011b94 T tcp_process_refused_data +10011bfc T tcp_fasttmr +10011c74 T tcp_tmr +10011c98 T tcp_abandon +10011d30 T tcp_abort +10011d38 T tcp_next_iss +10011d50 T tcp_alloc +10011e78 T tcp_new +10011e7e T tcp_eff_send_mss +10011e9c t tcp_oos_insert_segment +10011f18 t tcp_receive +100126f4 t tcp_parseopt.isra.0 +10012778 T tcp_input +10012fb8 t tcp_pbuf_prealloc +1001300c t tcp_create_segment +100130d0 t tcp_output_alloc_header.constprop.0 +1001313a T tcp_write +10013478 T tcp_enqueue_flags +10013522 T tcp_send_fin +1001356a T tcp_send_empty_ack +100135c8 T tcp_output +1001384c T tcp_rst +100138e4 T tcp_rexmit_rto +10013912 T tcp_rexmit +10013960 T tcp_rexmit_fast +100139b6 T tcp_keepalive +10013a08 T tcp_zero_window_probe +10013ab0 T udp_init +10013acc T udp_input +10013c5c T udp_bind +10013d00 T udp_sendto_if +10013e02 T udp_sendto +10013e38 T udp_connect +10013e80 T udp_disconnect +10013e90 T udp_recv +10013e98 T udp_remove +10013ec0 T udp_new +10013ee4 t etharp_free_entry +10013f14 t etharp_find_entry +10013fe4 t etharp_send_ip +10014018 T etharp_tmr +10014058 T etharp_cleanup_netif +10014080 T etharp_request +1001412c t etharp_output_to_arp_index +1001417c T etharp_query +10014278 T etharp_output +10014368 T ethernet_input +10014590 t low_level_output +100145ec t arp_timer +10014608 T ethernetif_recv +10014684 T ethernetif_init +100146c8 T lwip_POST_SLEEP_PROCESSING +100146e4 T rltk_wlan_set_netif_info +10014708 T rltk_wlan_send +1001479c T rltk_wlan_recv +10014808 T netif_is_valid_IP +10014840 T netif_get_idx +1001485c T netif_rx +1001486c T netif_post_sleep_processing +10014870 T sys_mbox_new +1001488a T sys_mbox_post +100148aa T sys_mbox_trypost +100148cc T sys_arch_mbox_fetch +10014918 T sys_mbox_valid +10014924 T sys_init +10014944 T sys_thread_new +100149a8 T sys_arch_protect +100149b2 T sys_arch_unprotect +100149b6 T sys_now +100149bc t mark_ip_in_table +10014a00 t dhcps_initialize_message +10014ab0 t add_offer_options +10014ba0 T dhcps_handle_state_machine_change +10014c70 t dhcps_receive_udp_packet_handler +10014f3c T dhcps_deinit +10014f64 T dhcps_init +1001506c t prvInsertBlockIntoFreeList +100150b4 t vPortDefineHeapRegions.constprop.1 +10015154 T pvPortMalloc +1001522c T __vPortFree +10015270 T vPortSetExtFree +1001528c T vPortFree +100152bc T xPortGetFreeHeapSize +100152c8 T xPortGetMinimumEverFreeHeapSize +100152d4 T pvPortReAlloc +1001536c T pvPortZalloc +10015388 t prvTaskExitError +1001539c t prvPortStartFirstTask +100153bc T pxPortInitialiseStack +100153e0 T vPortSVCHandler +10015400 t pxCurrentTCBConst2 +10015404 T vPortEnterCritical +10015424 T vPortExitCritical +10015440 T xPortPendSVHandler +10015480 t pxCurrentTCBConst +10015484 T xPortSysTickHandler +100154b0 W vPortSuppressTicksAndSleep +100155c8 W vPortSetupTimerInterrupt +10015618 T xPortStartScheduler +10015648 T vApplicationIdleHook +1001564c T osKernelSysTick +10015650 T xEventGroupCreate +1001566c T xEventGroupWaitBits +1001571c T xEventGroupClearBits +10015736 T xEventGroupSetBits +1001578e T vEventGroupSetBitsCallback +10015792 T vEventGroupDelete +100157b8 T xEventGroupSetBitsFromISR +100157c8 T vListInitialise +100157de T vListInitialiseItem +100157e4 T vListInsertEnd +100157fc T vListInsert +1001582a T uxListRemove +1001584a t prvCopyDataToQueue +100158b0 t prvCopyDataFromQueue +100158d8 t prvUnlockQueue +10015948 T xQueueGenericReset +100159b4 T xQueueGenericCreate +100159e8 T xQueueCreateCountingSemaphore +100159fc T xQueueGenericSend +10015af0 T xQueueCreateMutex +10015b14 T xQueueGenericSendFromISR +10015b7c T xQueueGiveFromISR +10015bd8 T xQueueGenericReceive +10015d0c T uxQueueMessagesWaiting +10015d1e T vQueueDelete +10015d22 T vQueueWaitForMessageRestricted +10015d68 t prvGetExpectedIdleTime +10015da4 t prvResetNextTaskUnblockTime +10015dc8 t prvAddCurrentTaskToDelayedList +10015e54 T xTaskGenericCreate +10016018 T vTaskDelete +100160d4 T uxTaskPriorityGet +100160f0 T vTaskPrioritySet +100161b8 T vTaskStartScheduler +10016224 T vTaskSuspendAll +10016234 T xTaskGetTickCount +10016240 T xTaskGetTickCountFromISR +1001624c T pcTaskGetName +1001625c T vTaskStepTick +1001626c T xTaskIncrementTick +10016378 T xTaskResumeAll +10016450 T vTaskDelay +10016480 t prvIdleTask +10016500 T vTaskSwitchContext +10016580 T vTaskPlaceOnEventList +100165a0 T vTaskPlaceOnUnorderedEventList +100165c8 T vTaskPlaceOnEventListRestricted +100165f4 T xTaskRemoveFromEventList +10016668 T xTaskRemoveFromUnorderedEventList +100166c4 T vTaskSetTimeOutState +100166dc T xTaskCheckForTimeOut +10016728 T vTaskMissedYield +10016734 T eTaskConfirmSleepModeStatus +10016768 T xTaskGetSchedulerState +10016788 T vTaskPriorityInherit +10016818 T xTaskPriorityDisinherit +10016888 T uxTaskResetEventItemValue +100168a0 T pvTaskIncrementMutexHeldCount +100168b8 t prvCheckForValidListAndQueue +10016904 t prvInsertTimerInActiveList +10016940 T xTimerCreateTimerTask +1001697c T xTimerCreate +100169b0 T xTimerGenericCommand +100169f0 t prvSwitchTimerLists +10016a58 t prvTimerTask +10016bec T xTimerIsTimerActive +10016c04 T pvTimerGetTimerID +10016c18 T xTimerPendFunctionCallFromISR +10016c40 t device_mutex_init +10016c84 T device_mutex_lock +10016cb8 T device_mutex_unlock +10016cd4 t _freertos_enter_critical_from_isr +10016cf4 t _freertos_exit_critical_from_isr +10016d04 t _freertos_systime_to_sec +10016d0e t _freertos_ms_to_systime +10016d10 t _freertos_sec_to_systime +10016d18 t _freertos_yield_os +10016d30 t _freertos_ATOMIC_SET +10016d34 t _freertos_ATOMIC_READ +10016d38 t _freertos_modular64 +10016daa t _freertos_thread_enter +10016dac T _freertos_wakelock_timeout +10016dae t _freertos_enter_critical +10016db2 t _freertos_exit_critical +10016db6 t _freertos_ATOMIC_SUB_RETURN +10016dce t _freertos_ATOMIC_DEC_RETURN +10016de4 t _freertos_ATOMIC_ADD_RETURN +10016dfc t _freertos_ATOMIC_INC_RETURN +10016e12 t _freertos_ATOMIC_SUB +10016e2a t _freertos_ATOMIC_DEC +10016e30 t _freertos_ATOMIC_ADD +10016e48 t _freertos_ATOMIC_INC +10016e4e T _freertos_malloc +10016e52 T _freertos_zmalloc +10016e6a t _freertos_memset +10016e6e T _freertos_mfree +10016e72 t _freertos_spinunlock_irqsave +10016e88 t _freertos_spinunlock +10016e94 t _freertos_mutex_put +10016e98 T _freertos_wakeup_task +10016e9e t _freertos_up_sema +10016ea2 t _freertos_exit_critical_mutex +10016eae T _freertos_timerCreate +10016eb2 T _freertos_timerDelete +10016ec6 T _freertos_timerStop +10016eda T _freertos_timerChangePeriod +10016ef4 T _freertos_timerStopFromISR +10016f08 T _freertos_timerChangePeriodFromISR +10016f24 T _freertos_timerIsTimerActive +10016f28 T _freertos_timerGetID +10016f2c T _freertos_timerStart +10016f48 T _freertos_timerReset +10016f64 t _freertos_arc4random +10016f94 t _freertos_get_current_time +10016f98 T _freertos_timerStartFromISR +10016fb6 T _freertos_timerResetFromISR +10016fd4 T _freertos_acquire_wakelock +10016fda T _freertos_release_wakelock +10016fe0 T _freertos_get_scheduler_state +10017000 t _freertos_thread_exit +10017006 t _freertos_GetFreeHeapSize +1001700a t _freertos_udelay_os +1001700e t _freertos_mdelay_os +10017012 t _freertos_deinit_xqueue +1001702c t _freertos_spinlock_free +1001703e t _freertos_mutex_free +10017042 t _freertos_free_sema +10017046 t _freertos_push_to_xqueue +1001706e t _freertos_pop_from_xqueue +10017096 t _freertos_down_sema +100170b8 t _freertos_init_xqueue +100170d4 t _freertos_spinlock_irqsave +10017114 t _freertos_spinlock +10017150 t _freertos_enter_critical_mutex +1001718c t _freertos_mutex_get +100171c8 t _freertos_spinlock_init +100171d6 t _freertos_mutex_init +100171da t _freertos_init_sema +100171ec t _freertos_create_task +1001727c t _freertos_memcmp +1001728a t _freertos_memcpy +1001728e t _freertos_get_random_bytes +100172c8 t _freertos_delete_task +10017314 t _freertos_mutex_get_timeout +10017350 t _freertos_up_sema_from_isr +10017380 t _freertos_systime_to_ms +10017382 t _freertos_msleep_os +10017386 t _freertos_usleep_os +1001738a T save_and_cli +1001738e T restore_flags +10017392 T cli +100173a4 T _htons +100173aa T _ntohs +100173b0 T _rtw_zvmalloc +100173d0 T _rtw_vmfree +100173f4 T _rtw_malloc +10017404 T _rtw_zmalloc +10017414 T _rtw_mfree +10017424 T deinit_mem_monitor +10017426 T rtw_vmfree +1001742a T rtw_mfree +10017430 T rtw_memcpy +10017440 T rtw_memcmp +10017450 T rtw_memset +10017460 T rtw_init_listhead +10017466 T rtw_is_list_empty +10017470 T rtw_list_insert_head +1001747c T rtw_list_insert_tail +10017488 T rtw_list_delete +10017498 T rtw_init_sema +100174a8 T rtw_free_sema +100174b8 T rtw_up_sema +100174c8 T rtw_up_sema_from_isr +100174d8 T rtw_down_timeout_sema +100174e8 T rtw_down_sema +100174fc T rtw_mutex_init +1001750c T rtw_mutex_free +1001751c T rtw_mutex_put +1001752c T rtw_mutex_get +1001753c T rtw_mutex_get_timeout +10017550 T rtw_enter_critical_from_isr +10017560 T rtw_enter_critical +10017564 T rtw_exit_critical_from_isr +10017574 T rtw_exit_critical +10017578 T rtw_enter_critical_mutex +10017588 T rtw_exit_critical_mutex +10017598 T rtw_queue_empty +100175a2 T rtw_end_of_queue_search +100175ac T rtw_spinlock_init +100175bc T rtw_init_queue +100175c8 T rtw_spinlock_free +100175d8 T rtw_spin_lock +100175e8 T rtw_enter_critical_bh +100175ec T rtw_spin_unlock +100175fc T rtw_exit_critical_bh +10017600 T rtw_get_current_time +10017610 T rtw_systime_to_ms +10017624 T rtw_systime_to_sec +10017638 T rtw_ms_to_systime +1001764c T rtw_sec_to_systime +10017660 T rtw_get_passing_time_ms +10017674 T rtw_msleep_os +10017684 T rtw_usleep_os +10017694 T rtw_mdelay_os +100176a4 T rtw_udelay_os +100176b4 T ATOMIC_SET +100176c4 T ATOMIC_INC +100176d4 T ATOMIC_INC_RETURN +100176e8 T ATOMIC_DEC_RETURN +100176fc T ATOMIC_DEC_AND_TEST +1001770c T rtw_modular64 +10017728 T rtw_get_random_bytes +1001773c T rtw_getFreeHeapSize +1001774c T init_mem_monitor +1001775c T add_mem_usage +10017790 T rtw_zvmalloc +100177b0 T rtw_malloc +100177d0 T rtw_zmalloc +100177f0 T rtw_netif_queue_stopped +100177f4 T rtw_netif_wake_queue +100177f6 T rtw_netif_start_queue +100177f8 T rtw_netif_stop_queue +100177fa T flush_signals_thread +100177fc T rtw_acquire_wakelock +1001780c T rtw_release_wakelock +1001781c T rtw_wakelock_timeout +1001782c T rtw_create_task +10017848 T rtw_delete_task +10017858 T rtw_wakeup_task +10017868 T rtw_timerCreate +10017884 T rtw_timerDelete +10017898 T rtw_timerIsTimerActive +100178ac T rtw_timerStop +100178c0 T rtw_timerChangePeriod +100178d4 T rtw_thread_enter +100178e4 T rtw_thread_exit +100178f4 T tcm_heap_free +10017974 T tcm_heap_init +100179c4 T tcm_heap_freeSpace +10017a04 T tcm_heap_malloc +10017aa4 T tcm_heap_calloc +10017abc T flash_init +10017b54 T flash_turnon +10017b6c T flash_erase_sector +10017b98 T flash_erase_block +10017bc4 T flash_read_word +10017bfc T flash_stream_read +10017cd0 T flash_stream_write +10017e20 T flash_get_size +10017e60 T gpio_set_hal_pin_mode +10017e84 T gpio_set +10017ebc T gpio_init +10017ef2 T gpio_mode +10017f04 T gpio_dir +10017f18 T gpio_write +10017f68 T pin_function +10017f6c W pinmap_merge +10017fa8 W pinmap_find_peripheral +10017fc0 W pinmap_peripheral +10017ffc T sleep_ex_selective +10018010 T deepsleep_ex +10018030 T spi_bus_tx_done_callback +10018040 T spi_tx_done_callback +10018060 T spi_rx_done_callback +1001807c T spi_init +100181c8 T spi_format +1001826c T spi_frequency +10018270 T spi_irq_hook +1001827c T spi_master_write_stream_dma +100182f4 T sys_reset +10018328 T us_ticker_read +10018354 T wait_us +100183ac t get_addr_fobj +100183f6 t get_addr_fobj_save +10018440 t _fwrite_word +1001846c t get_addr_bscfg +100184d0 T cmp_align1_align4 +1001857c T flash_write_cfg +100187a0 T flash_read_cfg +10018834 T En32KCalibration +100188c0 T WDGInitial +10018950 T WDGStart +10018968 T WDGRefresh +10018984 T HalGdmaOpInit +100189d8 T HalGdmaChnlRegister +10018a34 T HalGdmaChnlUnRegister +10018a90 T HalGdmaChnlAlloc +10018ac0 T HalGdmaChnlFree +10018ae8 T HAL_GPIO_GetPinName +10018af0 T HAL_GPIO_PullCtrl +10018b08 T HAL_GPIO_Init +10018b48 T HalSsiOpInit +10018c34 T HalSsiTxSingleBlkChnl +10018cc4 T HalSsiTxGdmaInit +10018cd8 T HalSsiTxGdmaDeInit +10018d08 T HalSsiTxMultiBlkChnl +10018d94 T HalSsiDmaSend +10018e1c T HalSsiInit +10018e98 T HalSsiSetFormat +10018e9c T HalTimerOpInit_Patch +10018ed8 T freertos_pre_sleep_processing +10018fb4 T freertos_post_sleep_processing +10018fd8 T freertos_ready_to_sleep +10018fe8 T acquire_wakelock +10019028 T release_wakelock +10019084 T HalGdmaChBlockSetingRtl8195a_Patch +10019308 T HalSsiPinmuxEnableRtl8195a_Patch +100193c0 T HalSsiInitRtl8195a_Patch +10019540 T HalSsiPinmuxDisableRtl8195a +10019610 T HalSsiSetFormatRtl8195a +100196a0 T HalSsiSetSclkRtl8195a +10019764 T HalSsiIntReadRtl8195a +100197b4 T HalSsiTxFIFOThresholdRtl8195a +100197cc T _SsiWriteInterruptRtl8195a +100198ec T _SsiReadInterruptRtl8195a +100199a0 T _SsiIrqHandleRtl8195a +10019a48 T SsiTxGdmaIrqHandle +10019a90 T HalSsiIntWriteRtl8195a +10019ae4 T HalSsiTxGdmaLoadDefRtl8195a +10019bf8 T HalSsiDmaInitRtl8195a +10019d20 T HalSsiDmaSendRtl8195a +10019db4 T HalSsiDmaSendMultiBlockRtl8195a +10019e88 T HalTimerIrq2To7Handle_Patch +10019edc T HalTimerIrqRegisterRtl8195a_Patch +10019f54 T HalTimerIrqUnRegisterRtl8195a_Patch +10019fcc T HalTimerDeInitRtl8195a_Patch +1001a000 T HalTimerReadCountRtl8195a_Patch +1001a018 T HalTimerReLoadRtl8195a_Patch +1001a04c T HalTimerInitRtl8195a_Patch +1001a118 T HalTimerIrqEnRtl8195a +1001a12c T HalTimerEnRtl8195a_Patch +1001a140 T HalTimerDisRtl8195a_Patch +1001a154 T vWFSSVCHandler +1001a15a t svcing +1001a174 T PatchHalLogUartInit +1001a218 T PSHalInitPlatformLogUart +1001a2dc T SDRWakeUp +1001a31c T SDRSleep +1001a444 T InitSYSIRQ +1001a480 T DurationScaleAndPeriodOP +1001a4b8 T CLKCal +1001a50c T BackupCPUClk +1001a52c T ReFillCpuClk +1001a54c T SYSIrqHandle +1001a598 T WakeFromSLPPG +1001a6d0 T InitSoCPM +1001a704 T RegPowerState +1001a768 T SetSYSTimer +1001a7a0 T SleepCG +1001a894 T DeepSleep +1001a9dc T HALEFUSEOneByteReadRAM +1001a9fc T HALEFUSEOneByteWriteRAM +1001aa00 T HalLogUartWaitTxFifoEmpty +1001aa18 T FunctionChk +1001aa1c T HalReInitPlatformTimer +1001aa8c T HalGetChipId +1001aab4 W __low_level_init +1001aab8 T rtl_libc_init +1001aad4 T rtl_snprintf +1001ab34 T rtl_sprintf +1001ab80 T rtl_printf +1001abc8 T rtl_memcmp +1001abd0 T rtl_memcpy +1001abd8 T rtl_memset +1001abe0 T rtl_strchr +1001abe8 T rtl_strcmp +1001abf0 T rtl_strcpy +1001abf8 T rtl_strlen +1001ac00 T rtl_strncmp +1001ac08 T rtl_strncpy +1001ac10 T rtl_strsep +1001ac18 T ram_libgloss_close +1001ac28 T ram_libgloss_fstat +1001ac48 T ram_libgloss_isatty +1001ac54 T ram_libgloss_lseek +1001ac64 T ram_libgloss_read +1001ac74 T ram_libgloss_sbrk +1001ac90 T ram_libgloss_write +1001acb0 T ram_libgloss_open +1001acec T init_rom_libgloss_ram_map +1001ad34 t rtw_ht_operation_update +1001ade6 t associated_clients_update.part.11 +1001ae22 T chk_sta_is_alive +1001ae60 T add_RATid +1001af70 T update_sta_info_apmode +1001b028 T update_beacon +1001b2e8 T rtw_check_beacon_data +1001b9e8 T associated_clients_update +1001b9f2 T bss_cap_update_on_sta_join +1001bba2 T bss_cap_update_on_sta_leave +1001bc9e T ap_free_sta +1001bd50 T expire_timeout_chk +1001bef8 T rtw_sta_flush +1001bf7c T free_mlme_ap_info +1001bfc8 T sta_info_update +1001c004 T ap_sta_info_defer_update +1001c034 T start_ap_mode +1001c074 T init_mlme_ap_info +1001c08a T stop_ap_mode +1001c0d8 T rtw_generate_bcn_ie +1001c440 T set_hidden_ssid +1001c498 T rtw_p2p_cmd_hdl +1001c4c2 T _rtw_init_evt_priv +1001c4d4 T _rtw_free_cmd_priv +1001c4de T _rtw_enqueue_cmd +1001c50a T _rtw_dequeue_cmd +1001c53e T _rtw_observequeue_cmd +1001c552 T rtw_init_cmd_priv +1001c55c T rtw_init_evt_priv +1001c560 T rtw_free_evt_priv +1001c562 T rtw_free_cmd_priv +1001c566 T rtw_cmd_filter +1001c584 T rtw_free_cmd_obj +1001c5ae T rtw_enqueue_cmd +1001c604 T rtw_set_channel_plan_cmd_callback +1001c61c T rtw_survey_cmd_callback +1001c638 T rtw_disassoc_cmd_callback +1001c668 T rtw_joinbss_cmd_callback +1001c684 T rtw_setstaKey_cmdrsp_callback +1001c69c T rtw_cmd_thread +1001c7f8 T rtw_joinbss_cmd +1001cac4 T rtw_disassoc_cmd +1001cb10 T rtw_setstakey_cmd +1001cc04 T rtw_clearstakey_cmd +1001cca4 T rtw_dynamic_chk_wk_cmd +1001ccf8 T rtw_p2p_cmd +1001cd56 T rtw_set_chplan_cmd +1001cdd6 T dynamic_chk_wk_hdl +1001ce9e T lps_ctrl_wk_hdl +1001cf0c T rtw_lps_ctrl_wk_cmd +1001cf76 T rtw_sitesurvey_cmd +1001d03e T rpt_timer_setting_wk_hdl +1001d052 T rtw_ps_cmd +1001d0ae T rtw_chk_hi_queue_cmd +1001d102 T rtw_drvextra_cmd_hdl +1001d1de t rtw_free_mlme_ie_data +1001d1f8 T rtw_init_mlme_timer +1001d254 T rtw_del_mlme_timer +1001d274 T reconnect_timer_hdl +1001d31c T _rtw_init_mlme_priv +1001d39e T rtw_mfree_mlme_priv_lock +1001d3ba T rtw_free_mlme_priv_ie_data +1001d42e T _rtw_free_mlme_priv +1001d456 T _rtw_alloc_network +1001d4a6 T _rtw_free_network +1001d506 T _rtw_free_network_nolock +1001d52c T _rtw_find_network +1001d568 T _rtw_free_network_queue +1001d5b0 T rtw_if_up +1001d5d0 T rtw_get_capability_from_ie +1001d5d4 T rtw_get_capability +1001d5ee T rtw_get_beacon_interval_from_ie +1001d5f2 T rtw_init_mlme_priv +1001d60a T rtw_free_mlme_priv +1001d60e T rtw_free_network_queue +1001d612 T rtw_is_same_ibss +1001d628 T is_same_network +1001d68c T update_network +1001d726 T rtw_update_scanned_network +1001d88c T rtw_add_network +1001d8ca T rtw_survey_event_callback +1001d976 T rtw_dummy_event_callback +1001d978 T rtw_free_assoc_resources +1001da42 T rtw_indicate_connect +1001da52 T rtw_indicate_disconnect +1001da74 T rtw_indicate_scan_done +1001da78 T rtw_joinbss_event_callback +1001da96 T search_max_mac_id +1001dade T rtw_stassoc_hw_rpt +1001db16 T rtw_stassoc_event_callback +1001db44 T rtw_stadel_event_callback +1001dbea T _rtw_join_timeout_handler +1001dc74 T rtw_join_timeout_handler +1001dccc T rtw_scan_timeout_handler +1001dcfc T _rtw_scan_timeout_handler +1001dd00 T rtw_dynamic_check_timer_handlder +1001dd58 T _dynamic_check_timer_handlder +1001dda8 T rtw_select_and_join_from_scanned_queue +1001de7c T rtw_surveydone_event_callback +1001dfa4 T rtw_set_auth +1001dff4 T rtw_set_key +1001e0b6 T rtw_restruct_wmm_ie +1001e11c T rtw_restruct_sec_ie +1001e18c T rtw_joinbss_reset +1001e19c T rtw_restructure_ht_ie +1001e27c T rtw_update_ht_cap +1001e306 T rtw_joinbss_event_prehandle +1001e538 T rtw_linked_check +1001e554 T rtw_buddy_adapter_up +1001e58c T check_buddy_fwstate +1001e5aa t get_da +1001e5ca t get_sa +1001e5f4 T OnAction_p2p +1001e5f8 T OnAction +1001e62c T DoReserved +1001e630 T rtw_is_channel_set_contains_channel +1001e652 T init_hw_mlme_ext +1001e668 T init_channel_set +1001e704 T free_mlme_ext_priv +1001e732 T rtw_action_public_decache +1001e77c T on_action_public_p2p +1001e7a8 T OnAction_public +1001e7ec T alloc_mgtxmitframe +1001e824 T update_mgnt_tx_rate +1001e82a T update_mgntframe_attrib +1001e886 T rtw_build_mgnt_frame +1001e8ea T dump_mgntframe +1001e904 T rtw_send_mgnt +1001e97c t issue_action_BSSCoexistPacket +1001eb90 T rtw_indicate_mgnt +1001ebb4 t _mgt_dispatcher.isra.4 +1001ec1c T mgt_dispatcher +1001eca4 T update_hidden_ssid +1001ecf8 T issue_beacon +1001ef44 T issue_probersp +1001f2bc T OnProbeReq +1001f3d4 T issue_probereq +1001f5c4 T issue_auth +1001f834 T OnAuth +1001faec T issue_asocrsp +1001fd98 T issue_assocreq +10020104 T issue_nulldata +100201ee T issue_qos_nulldata +10020344 T issue_deauth +10020438 T issue_action_BA +100206c0 T OnAction_back +1002078e T collect_bss_info +100209d8 T start_clnt_auth +10020a74 T start_clnt_assoc +10020aa8 T OnAuthClient +10020b94 T report_scan_result_one +10020d6c T add_site_survey +10020f58 T report_survey_event +100211b4 T OnProbeRsp +10021250 T report_surveydone_event +100212b4 T report_join_res +10021324 T OnAssocRsp +10021524 T report_del_sta_event +100215b6 T receive_disconnect +1002160c T OnBeacon +100217bc T OnDeAuth +10021920 T OnDisassoc +10021a9c T report_add_sta_event +10021b10 T OnAssocReq +10022114 T rtw_port_switch_chk +10022198 T update_sta_info +10022218 T mlmeext_sta_del_event_callback +10022298 T _linked_info_dump +100222fa T _linked_rx_signal_strehgth_display +10022334 T linked_status_chk +10022610 T survey_timer_hdl +100226f0 T _survey_timer_hdl +100226f4 T link_timer_hdl +10022772 T _link_timer_hdl +10022776 T addba_timer_hdl +10022796 T NULL_hdl +1002279a T setopmode_hdl +100227e0 T disconnect_hdl +1002288c T setauth_hdl +1002289c T setkey_hdl +100228fc T set_stakey_hdl +10022a10 T set_tx_beacon_cmd +10022a88 T mlme_evt_hdl +10022ad4 T tx_beacon_hdl +10022b8e T check_buddy_mlmeinfo_state +10022ba8 T site_survey +10022de8 T sitesurvey_cmd_hdl +10022ef6 T concurrent_chk_start_clnt_join +10022f8c T start_clnt_join +10023060 T join_cmd_hdl +10023184 T concurrent_chk_joinbss_done +1002334c T mlmeext_joinbss_event_callback +100234a4 T set_chplan_hdl +100234c0 T init_mlme_ext_timer +1002351c T init_mlme_ext_priv +10023670 t rtw_p2p_remain_on_timeout +10023686 t rtw_p2p_pre_tx_scan_timeout +1002368c T rtw_p2p_remain_on_channel +10023702 T rtw_p2p_cancel_remain_on_channel +1002372a T rtw_p2p_special_scan_param +1002374a T rtw_p2p_set_p2p_role +10023752 T rtw_p2p_set_p2p_state +1002375a T rtw_p2p_indicate_mgnt +10023780 T rtw_p2p_indicate_send_action_done +100237d4 T rtw_p2p_pre_tx_scan_cmd_callback +1002388c T init_social_channel_set +100238b4 T rtw_init_p2p_wdinfo +100238e8 T rtw_deinit_p2p_wdinfo +100238f4 T rtw_p2p_init_mlme_ext +1002394c T rtw_p2p_deinit_mlme_ext +10023954 t get_hdr_bssid +1002397c t filter_packet +10023a04 t promisc_get_encrypt +10023a56 t promisc_info_get +10023afa t promisc_set_enable +10023bc0 T _promisc_deinit +10023c10 T _promisc_recv_func +10024198 T _promisc_set +10024228 T _is_promisc_enabled +10024240 t SetEAPOL_KEYIV +100242e0 t WaitTimeout +10024358 t ToDrv_SetPTK +10024402 t Message_ReplayCounter_OC2LI.isra.2 +10024430 t Message_SmallerEqualReplayCounter.isra.4 +10024462 t Message_setReplayCounter.isra.5 +10024480 t INCLargeInteger +100244a0 t INCOctet16_INTEGER +100244e8 t INCOctet32_INTEGER +10024548 t ToDrv_DisconnectSTA +1002460c t CheckMIC.constprop.14 +1002468c t CalcMIC.constprop.15 +100246ec T DecWPA2KeyData +100247a0 T DecGTK +1002485c T ToDrv_SetGTK +100248f0 T init_wpa_sta_info +100249dc T WaitFourWayMsg +10024a38 T SendEAPOL +10025104 T ClientSendEAPOL +100255ee t ResendTimeout +10025674 T EAPOLKeyRecvd +100257fc T ClientEAPOLKeyRecvd +10025c14 T psk_derive +10025cc8 T psk_init +10025db8 T psk_strip_rsn_pairwise +10025e38 T psk_strip_wpa_pairwise +10025eb8 T tkip_send_mic_failure_report +1002602c T pwr_state_check_handler +10026030 T ips_enter +100260e0 T ips_leave +100261f8 T rtw_pwr_unassociated_idle +1002624c T rtw_ps_processor +100262a2 T PS_RDY_CHECK +1002630a T rtw_set_ps_mode +1002637a T LPS_RF_ON_check +100263d0 T LPS_Enter +1002643c T LPS_Leave +10026476 T LeaveAllPowerSaveMode +10026488 T rtw_init_pwrctrl_priv +10026558 T rtw_free_pwrctrl_priv +1002656a T _rtw_pwr_wakeup +10026642 T rtw_pm_set_lps +10026688 T rtw_pm_set_ips +100266cc T rtw_pm_set_tdma_param +100266e8 T rtw_pm_set_lps_dtim +100266f4 T rtw_pm_get_lps_dtim +100266fe t recvframe_pull +10026720 t recvframe_pull_tail +10026742 T rtw_signal_stat_timer_hdl +100267e0 T _rtw_init_sta_recv_priv +10026800 T _rtw_init_recv_priv +100268a8 T rtw_mfree_recv_priv_lock +100268dc T _rtw_alloc_recvframe +1002690e T rtw_alloc_recvframe +10026934 T rtw_free_recvframe +100269d8 T _rtw_enqueue_recvframe +10026a04 T rtw_enqueue_recvframe +10026a2e T rtw_free_recvframe_queue +10026a66 T rtw_free_uc_swdec_pending_queue +10026a8e T _rtw_free_recv_priv +10026abe T rtw_free_buf_pending_queue +10026ac2 T recvframe_chkmic +10026bc2 T decryptor +10026c66 T portctrl +10026cdc T recv_decache +10026d0a T process_pwrbit_data +10026d4a T process_wmmps_data +10026dd2 T count_rx_stats +10026e44 T sta2sta_data_frame +10026f80 T ap2sta_data_frame +100270ac T sta2ap_data_frame +10027134 T validate_recv_ctrl_frame +100272ce T validate_recv_data_frame +10027528 T wlanhdr_to_ethhdr +10027664 T recvframe_defrag +1002770e T recvframe_chk_defrag +100277c4 T validate_recv_mgnt_frame +10027800 T validate_recv_frame +100278c8 T recv_indicatepkt_reorder +100278ea T process_recv_indicatepkts +10027942 T recv_func_prehandle +1002796a T recv_func_posthandle +100279ce T recv_func +10027a5e T rtw_recv_entry +10027a90 T rtw_recv_tasklet +10027ae8 T rtw_wep_encrypt +10027b2e T rtw_wep_decrypt +10027b74 T rtw_tkip_encrypt +10027be0 T rtw_tkip_decrypt +10027c4e T rtw_aes_encrypt +10027cba T rtw_aes_decrypt +10027d20 T rtw_init_sec_priv +10027d92 T rtw_free_sec_priv +10027db2 t wifi_mac_hash +10027ddc T _addba_timer_hdl +10027de0 T _rtw_init_stainfo +10027e66 T _rtw_init_sta_priv +10027f4e T _rtw_free_sta_xmit_priv_lock +10027f7a T rtw_mfree_stainfo +10027fa6 T rtw_mfree_sta_priv_lock +10027fdc T _rtw_free_sta_priv +10027ffc T init_addba_retry_timer +10028024 T rtw_alloc_stainfo +100280ee T rtw_free_stainfo +100282b4 T rtw_get_stainfo +10028330 T rtw_init_bcmc_stainfo +10028360 T rtw_get_bcmc_stainfo +10028384 T rtw_free_all_stainfo +100283ec T cckrates_included +10028414 T cckratesonly_included +1002843c T networktype_to_raid_ex +1002849a T judge_network_type +100284e8 T ratetbl_val_2wifirate +100284fc T is_basicrate +10028528 T ratetbl2rateset +1002856c T get_rate_set +10028596 T UpdateBrateTbl +100285c8 T UpdateBrateTblForSoftAP +100285fc T Save_DM_Func_Flag +10028612 T Restore_DM_Func_Flag +10028628 T Switch_DM_Func +10028644 T Set_MSR +10028668 T set_opmode +100286ac T SelectChannel +100286e0 T SetBWMode +1002871c T set_channel_bwmode +10028780 T get_my_bssid +10028784 T get_beacon_interval +100287a2 T is_client_associated_to_ap +100287ba T is_client_associated_to_ibss +100287d6 T is_IBSS_empty +100287f8 T decide_wait_for_beacon_timeout +10028814 T invalidate_cam_all +1002881c T write_cam +10028892 T clear_cam_entry +100288c0 T flush_all_cam_entry +1002891e T WMM_param_handler +10028944 T WMMOnAssocRsp +10028a10 T HT_caps_handler +10028ab0 T HT_info_handler +10028ad4 T HTOnAssocRsp +10028b0c T ERP_IE_handler +10028b28 T VCS_update +10028b7a T rtw_check_bcn_info +10028d8a T update_beacon_info +10028de0 T is_ap_in_tkip +10028e58 T wifirate2_ratetbl_inx +10028ec4 T update_basic_rate +10028ef2 T update_supported_rate +10028f1c T update_MCS_rate +10028f28 T support_short_GI +10028f56 T get_highest_rate_idx +10028f70 T Update_RA_Entry +10028f78 T set_sta_rate +10028f80 T update_tx_basic_rate +10028fd8 T check_assoc_AP +100290cc T update_IOT_info +1002912a T update_capinfo +100291a8 T update_wireless_mode +10029248 T update_bmc_sta_support_rate +10029270 T update_TSF +10029282 T correct_TSF +1002928a t _init_txservq +100292a0 t set_qos +100292f0 T _rtw_init_sta_xmit_priv +10029336 T rtw_mfree_xmit_priv_lock +10029382 T qos_acm +100293bc T xmitframe_addmic +1002951a T xmitframe_swencrypt +10029546 T rtw_make_wlanhdr +10029726 T rtw_txframes_pending +10029762 T rtw_txframes_sta_ac_pending +10029798 T rtw_txframes_update_attrib_vcs_info +10029838 T rtw_put_snap +10029880 T rtw_update_protection +100298c6 T rtw_count_tx_stats +10029916 T rtw_free_xmitbuf_ext +10029958 T rtw_alloc_xmitframe +100299b0 T rtw_free_xmitframe +10029a02 T rtw_free_xmitframe_queue +10029a40 T rtw_get_sta_pending +10029a80 T rtw_xmit_classifier +10029ae6 T rtw_xmitframe_enqueue +10029af4 T rtw_alloc_hwxmits +10029b4e T rtw_free_hwxmits +10029b64 T _rtw_free_xmit_priv +10029c30 T rtw_init_hwxmits +10029c48 T _rtw_init_xmit_priv +10029e00 T rtw_get_ff_hwaddr +10029e14 T xmitframe_enqueue_for_sleeping_sta +10029fd4 t dequeue_xmitframes_to_sleeping_queue +1002a02a T stop_sta_xmit +1002a112 T wakeup_sta_to_xmit +1002a33a T xmit_delivery_enabled_frames +1002a454 T rtw_xmit_tasklet +1002a4a8 T rtw_xmit_mgnt +1002a4ac T rtw_xmit_data +1002a4b0 T rtw_xmit +1002a80c T rtw_sctx_done_err +1002a818 T rtw_alloc_xmitbuf +1002a872 T rtw_free_xmitbuf +1002a8e4 T rtw_alloc_xmitbuf_ext +1002a96a T rtw_sctx_done +1002a970 t rtl8195a_free_rx_ring +1002a97e t bus_write32 +1002a9d8 t bus_write16 +1002aa32 t bus_write8 +1002aa8c t bus_read32 +1002aae4 t bus_read16 +1002ab3e t bus_read8 +1002ab98 t rtl8195a_free_tx_ring +1002ac28 T rtl8195a_init_desc_ring +1002ad68 T rtl8195a_free_desc_ring +1002ad84 T rtl8195a_reset_desc_ring +1002ae1a T InitLxDmaRtl8195a +1002af7c T rtl8195a_check_txdesc_closed +1002aff4 t rtl8195a_tx_isr +1002b0d8 T InterruptRecognized8195a +1002b168 T InitInterrupt8195a +1002b188 T EnableDMA8195a +1002b1b0 T EnableInterrupt8195a +1002b1f0 T DisableDMA8195a +1002b1fc T DisableInterrupt8195a +1002b214 T UpdateInterruptMask8195a +1002b276 T CheckRxTgRtl8195a +1002b2b0 T rtl8192ee_check_rxdesc_remain +1002b2e0 T rtl8195a_recv_tasklet +1002b654 T rtl8195a_tx_int_handler +1002b680 T InterruptHandle8195a +1002b8f4 T rtl8195a_xmit_tasklet +1002b91c T lxbus_set_intf_ops +1002b95c t GetTxBufDesc +1002b9a6 t UpdateFirstTxbdtoXmitBuf.isra.3 +1002b9d8 t check_nic_enough_desc.isra.4 +1002ba28 T rtl8195ab_init_xmit_priv +1002ba36 T rtl8195ab_free_xmit_priv +1002ba3e T GetDmaTxbdIdx +1002ba5a T rtl8195a_enqueue_xmitbuf +1002ba7e T rtl8195a_dequeue_xmitbuf +1002baa2 T SetTxbdForLxDMARtl8195ab +1002bb22 T UpdateTxbdHostIndex +1002bb60 T rtw_dump_xframe +1002bd32 T check_tx_desc_resource +1002bd6c T rtw_dequeue_xframe +1002be00 T rtw_xmitframe_coalesce +1002c0b4 T rtl8195ab_xmitframe_resume +1002c1b8 T rtl8195ab_mgnt_xmit +1002c1f4 T rtl8195ab_hal_xmit +1002c312 t Hal_GetEfuseDefinition +1002c342 t ResumeTxBeacon +1002c388 T UpdateHalRAMask8195A +1002c55c T HalLittleWifiMCUThreadRtl8195a +1002c5b4 T HalCheckInReqStateThreadRtl8195a +1002c600 T HalTDMAChangeStateThreadRtl8195a +1002c64c t rtl8195a_read_chip_version +1002c6c0 t Hal_EfuseWordEnableDataWrite +1002c904 t Hal_EfusePowerSwitch +1002c918 t rtl8195a_free_hal_data +1002c932 t StopTxBeacon +1002c97c T SetHalODMVar8195A +1002ca50 T rtl8195a_start_thread +1002cab8 T rtl8195a_stop_thread +1002cadc t Hal_ReadEFuse +1002cc4c T GetHalODMVar8195A +1002cc60 t rtw_flash_map_update.part.12 +1002cd00 t rtw_flash_map_erase +1002cd44 t Hal_EfusePgPacketWrite +1002cfc0 t Hal_EfuseGetCurrentSize +1002d0a0 t rtw_flash_map_write +1002d26e T rtl8195a_InitBeaconParameters +1002d2de T _InitBurstPktLen_8195AB +1002d2e8 T rtl8195a_set_hal_ops +1002d3cc T rtl8195a_init_default_value +1002d3ce T rtl8195a_InitLLTTable +1002d418 T Hal_GetChnlGroup8195A +1002d454 T rtw_config_map_read +1002d540 T rtw_config_map_write +1002d5ec T Hal_InitPGData +1002d64a T Hal_EfuseParseIDCode +1002d662 T Hal_ReadPowerValueFromPROM_8195A +1002d700 T Hal_EfuseParseTxPowerInfo_8195A +1002d798 T Hal_EfuseParseEEPROMVer_8195A +1002d7ae T Hal_EfuseParsePackageType_8195A +1002d81a T Hal_EfuseParseChnlPlan_8195A +1002d84a T Hal_EfuseParseCustomerID_8195A +1002d860 T Hal_EfuseParseXtal_8195A +1002d878 T Hal_EfuseParseThermalMeter_8195A +1002d8a0 T Hal_ReadRFGainOffset +1002d8f0 T BWMapping_8195A +1002d910 T SCMapping_8195A +1002d938 T rtl8195a_update_txdesc +1002dc6e T rtl8195a_fill_fake_txdesc +1002dd2c T SetHwReg8195A +1002ea24 T GetHwReg8195A +1002eab8 T SetHalDefVar8195A +1002eb98 T GetHalDefVar8195A +1002ebbc T PHY_QueryBBReg_8195A_Safe +1002ebe6 T PHY_SetBBReg_8195A_Safe +1002ec10 t phy_RFSerialRead_8195A +1002ecc4 T PHY_QueryRFReg_8195A +1002ecdc T PHY_SetRFReg_8195A +1002ed34 T PHY_MACConfig8195A +1002ed4e T PHY_BBConfig8195A +1002ee74 T PHY_RFConfig8195A +1002ee78 T PHY_SetTxPowerIndex_8195A +1002ef82 T phy_TxPwrAdjInPercentage +1002efc0 T PHY_GetTxPowerIndex_8195A +1002f0d0 T PHY_SetTxPowerLevel8195A +1002f0d6 T phy_SpurCalibration_8195A +1002f3a2 T phy_SetRegBW_8195A +1002f3e0 T phy_GetSecondaryChnl_8195A +1002f402 T phy_PostSetBwMode8195A +1002f570 T phy_SwChnl8195A +1002f618 T phy_SwChnlAndSetBwMode8195A +1002f668 T PHY_HandleSwChnlAndSetBW8195A +1002f718 T PHY_SetBWMode8195A +1002f73a T PHY_SwChnl8195A +1002f754 T PHY_SetSwChnlBWMode8195A +1002f772 t HalTimerEnable +1002f784 T InitTDMATimer +1002f7ac T ChangeStateByTDMA +1002f7bc T GetMinRateInRRSR +1002f7f0 T CheckInReqState +1002f800 T InitCheckStateTimer +1002f830 T InitGTimer1ms +1002f87c T DeInitGTimer1ms +1002f8c4 T ChangeTransmiteRate +1002f900 T PowerBitSetting +1002f97c T ChkandChangePS +1002f9e0 T IssueRsvdPagePacketSetting +1002fa58 T IssuePSPoll +1002fa84 T WaitTxStateMachineOk +1002fad8 T IssueNullData +1002fb88 T PsCloseRF +1002fbbc T PsOpenRF +1002fbec T ChkTxQueueIsEmpty +1002fc04 T InitPS +1002fc74 T ConfigListenBeaconPeriod +1002fc98 T PS_S2_Condition_Match +1002fcd8 T PS_S4_Condition_Match +1002fd54 T PS_32K_Condition_Match +1002fd90 T PS_S2ToS3ToS0State +1002fdf8 T PS_S2ToS0State +1002fe14 T PS_S3ToS2orS0State +1002fe44 T PS_S0ToS1ToS2State +1002fea0 T PS_S1ToS0orS2State +1002fed0 T PS_S2ToS4State +1002ff1c T PS_S0ToS6State +1002ff3c T PS_S6ToS0State +1002ff5c T CheckTSFIsStable +1002ffac T WaitHWStateReady +1002ffbc T SysClkDown +10030034 T SysClkUp +10030088 T ResetPSParm +100300f8 T PS_S4ToS2State +10030128 T SleepTo32K +10030198 T Change_PS_State +10030340 T Legacy_PS_Setting +100303b4 T PSModeSetting +10030450 T ChangePSStateByRPWM +10030494 T ChangeTDMAState +100305ac T TDMAChangeStateTask +100305d6 T EnterPS +100305f8 T SetSmartPSTimer +10030634 T GTimer7Handle +10030690 T SmartPS2InitTimerAndToGetRxPkt +100306c8 T PS_OnBeacon +10030778 T PSBcnEarlyProcess +10030834 T PSMtiBcnEarlyProcess +100308e0 T PSRxBcnProcess +10030a2c T TxPktInPSOn +10030a6a T PsBcnToProcess +10030b24 T GTimer6Handle +10030b70 T RPWMProcess +10030ba8 T PSSetMode +10030c20 T SpeRPT +10030d70 T ISR_BcnEarly +10030dd8 T ISR_MtiBcnEarly +10030e08 T ISR_RxBcn +10030e24 T ISR_RxBCMD1 +10030e54 T ISR_RxBCMD0 +10030ea8 T ISR_RxUCMD1 +10030ee6 T ISR_RxUCMD0 +10030f22 T ISR_TxPktIn +10030f34 T ISR_TXCCX +10030f38 T H2CHDL_SetPwrMode +10031060 T CheckInReqStateTask +100310a4 T HalGetNullTxRpt +100310c0 T ISR_TBTT +10031138 T H2CHDL_BcnIgnoreEDCCA +10031148 T PMUInitial +10031198 T PMUDeInitial +1003119c T PMUTask +100312a8 T PHY_RF6052SetBandwidth8195A +100312ec T PHY_RF6052_Config8195A +100313a4 t process_rssi +100313da T rtl8195a_query_rx_desc_status +1003148a T rtl8195a_query_rx_phy_status +100315e2 T hal_com_get_channel_plan +10031616 T HAL_IsLegalChannel +10031634 T MRateToHwRate +10031648 T HwRateToMRate +1003165c T HalSetBrateCfg +10031708 T Hal_MappingOutPipe +10031724 T hal_init_macaddr +10031750 T hw_var_port_switch +100319ec T SetHwReg +100319f6 T GetHwReg +100319f8 T switch_power_saving_mode +10031a3c T rtw_bb_rf_gain_offset +10031a84 T PHY_GetRateValuesOfTxPowerByRate +10031c1c T PHY_StoreTxPowerByRateNew +10031cb8 T PHY_InitTxPowerByRate +10031cd0 T PHY_StoreTxPowerByRate +10031ce8 T PHY_GetTxPowerIndexBase +10031d88 T PHY_GetTxPowerTrackingOffset +10031db4 T PHY_GetRateIndexOfTxPowerByRate +10031dc8 T PHY_GetTxPowerByRate +10031e28 T phy_StoreTxPowerByRateBase +10031e74 T PHY_SetTxPowerByRate +10031eb0 T phy_ConvertTxPowerByRateInDbmToRelativeValues +10031fb0 T PHY_TxPowerByRateConfiguration +10031fc2 T PHY_SetTxPowerIndexByRateArray +10032000 T PHY_SetTxPowerIndexByRateSection +10032064 T PHY_SetTxPowerLevelByPath +1003209a T phy_GetWorldWideLimit +100320c6 T PHY_GetTxPowerLimit +100321f0 T PHY_ConvertTxPowerLimitToPowerIndex +10032340 T PHY_InitTxPowerLimit +10032388 T PHY_SetTxPowerLimit +10032404 T PHY_GetTxPowerIndex +10032414 T rtw_hal_chip_configure +1003242a T rtw_hal_read_chip_info +10032440 T rtw_hal_read_chip_version +10032456 T rtw_hal_def_value_init +1003246c T rtw_hal_free_data +10032482 T rtw_hal_dm_init +10032498 T rtw_hal_dm_deinit +100324ae T rtw_hal_init +100324d8 T rtw_hal_deinit +100324f2 T rtw_hal_set_hwreg +10032500 T rtw_hal_get_hwreg +1003250e T rtw_hal_set_def_var +10032520 T rtw_hal_get_def_var +10032532 T rtw_hal_set_odm_var +10032540 T rtw_hal_get_odm_var +1003254e T rtw_hal_enable_interrupt +10032570 T rtw_hal_disable_interrupt +10032592 T rtw_hal_inirp_init +100325a4 T rtw_hal_inirp_deinit +100325b6 T rtw_hal_irp_reset +100325c4 T rtw_hal_xmit +100325d6 T rtw_hal_mgnt_xmit +100325e8 T rtw_hal_init_xmit_priv +100325fa T rtw_hal_free_xmit_priv +10032608 T rtw_hal_update_ra_mask +10032636 T rtw_hal_add_ra_tid +10032644 T rtw_hal_clone_data +10032652 T rtw_hal_start_thread +10032660 T rtw_hal_stop_thread +1003266e T rtw_hal_read_bbreg +100326a0 T rtw_hal_write_bbreg +100326ca T rtw_hal_read_rfreg +100326dc T rtw_hal_write_rfreg +100326f0 T rtw_hal_interrupt_handler +10032702 T rtw_hal_set_bwmode +10032710 T rtw_hal_set_chan +1003271e T rtw_hal_set_chnl_bw +10032734 T rtw_hal_dm_watchdog +1003274a T rtw_hal_macid_sleep +1003276a T rtw_hal_macid_wakeup +1003278a T decide_chip_type_by_device_id +10032790 t rtw_net_get_stats +100327e0 t netdev_if2_close +10032800 t netdev_close +10032860 t rtw_if1_deinit +100328fa T rtw_os_indicate_connect +100328fe T rtw_os_indicate_scan_done +10032902 T rtw_reset_securitypriv +10032a06 T rtw_os_indicate_disconnect +10032a50 T rtw_init_netdev +10032ba0 T rtw_drv_if2_init +10032da8 T rtw_drv_if2_stop +10032dfe T rtw_drv_if2_free +10032e48 T _netdev_open +10032f74 T _netdev_if2_open +10033030 T netdev_if2_open +10033058 T netdev_open +10033080 T rtw_drv_probe +10033200 T rtw_dev_remove +10033244 T rtw_drv_entry +10033270 T rtw_drv_halt +100332a0 t rtw_wx_set_autoreconnect +100332ce t rtw_wx_get_autoreconnect +100332dc t rtw_forwarding_set +100332fe t rtw_set_ch_deauth +1003331e t rtw_p2p_get +10033324 t get_priv_size +10033338 t rtw_wx_set_pscan_freq +100333c0 t rtw_wx_del_custome_ie +10033434 t rtw_wx_update_custome_ie +100334c4 t rtw_wx_set_custome_ie +10033570 t rtw_set_tos_value +10033590 t rtw_get_tx_power +100336d4 t rtw_pm_get +10033718 t rtw_pm_set +100337cc t rtw_p2p_set +100338d8 t rtw_wx_read32 +10033984 t rtw_wx_write32 +100339e8 t rtw_wx_set_freq.isra.10 +10033a90 T rtw_ex_set +10033b50 T wireless_send_event +10033b5a T indicate_wx_custom_event +10033bb6 T indicate_wx_scan_result_present +10033bde T indicate_wx_scan_complete_event +10033c08 T rtw_indicate_sta_assoc +10033c58 T rtw_indicate_sta_disassoc +10033cb0 T rtw_indicate_wx_assoc_event +10033ce2 T rtw_indicate_wx_disassoc_event +10033d12 T rtw_set_wpa_ie +10033e40 T strtopsk +10033eac T rtw_wx_get_passphrase +10033ef8 T rtw_wx_set_ap_essid +10033fec T mac_reg_dump +100340c0 T bb_reg_dump +10034134 T rf_reg_dump +100341cc t rtw_dbg_port +10034a00 T rtw_set_sta_num +10034a1c T rtw_ex_get_drv_ability +10034adc T rtw_ex_get +10034d78 T rtw_ioctl +100361e4 T rtw_os_recv_resource_init +100361e8 T rtw_os_recv_resource_alloc +100361f2 T rtw_os_recv_resource_free +100361f4 T rtw_tkip_countermeasure +10036294 T rtw_handle_tkip_mic_err +1003633c T rtw_recv_indicatepkt +10036578 T skb_fail_inc +10036594 T skb_fail_get_and_rst +100365b0 T init_skb_pool +1003660c W init_skb_data_pool +10036668 W deinit_skb_data_pool +1003666c T alloc_skb +1003678c T kfree_skb +10036804 T kfree_skb_chk_key +10036808 T skb_put +1003683c T skb_reserve +1003684a T dev_alloc_skb +10036866 T skb_end_pointer +1003686a T skb_set_tail_pointer +10036872 T skb_pull +1003688a T skb_copy +100368b2 T rtw_remainder_len +100368be T _rtw_open_pktfile +100368d0 T _rtw_pktfile_read +100368fe T rtw_set_tx_chksum_offload +10036900 T rtw_os_xmit_resource_alloc +1003690a T rtw_os_xmit_resource_free +1003690c T rtw_os_pkt_complete +10036914 T rtw_os_xmit_complete +10036926 T rtw_os_xmit_schedule +10036964 T rtw_xmit_entry +100369b0 T rtw_alloc_etherdev_with_old_priv +100369c6 T rtw_alloc_etherdev +100369f2 T rtw_free_netdev +10036a10 T rtw_if_wifi_thread +10036aac T timer_wrapper +10036b00 T alloc_etherdev +10036b5c T free_netdev +10036b76 T dev_alloc_name +10036b80 T init_timer_wrapper +10036ba0 T deinit_timer_wrapper +10036bec T init_timer +10036ca4 T mod_timer +10036d84 T cancel_timer_ex +10036dcc T del_timer_sync +10036e30 T rtw_init_timer +10036e38 T rtw_set_timer +10036e3c T rtw_cancel_timer +10036e46 T rtw_del_timer +10036e4c T rltk_get_idx_bydev +10036e5c T rltk_wlan_init +10036ee4 T rltk_wlan_deinit +10036fac T rltk_wlan_start +10036fe0 T rltk_wlan_check_isup +10036ff0 T rltk_wlan_tx_inc +10037004 T rltk_wlan_tx_dec +10037018 T rltk_wlan_get_recv_skb +10037028 T rltk_wlan_alloc_skb +10037068 T rltk_wlan_send_skb +1003709c T rltk_netif_rx +10037148 T rltk_set_sta_num +1003714c T rltk_set_tx_power_percentage +10037180 T rltk_wlan_control +10037214 T rltk_wlan_running +1003722c T rltk_wlan_handshake_done +10037260 T rltk_wlan_wireless_mode +100372ec T rltk_wlan_is_connected_to_ap +10037330 T Efuse_PowerSwitch +1003733c T Efuse_GetCurrentSize +10037348 T Efuse_CalculateWordCnts +1003736c T EFUSE_GetEfuseDefinition +10037380 T efuse_OneByteRead +100373b4 T efuse_OneByteWrite +100373e8 T Efuse_PgPacketWrite +100373fc T efuse_WordEnableDataRead +1003742e T Efuse_WordEnableDataWrite +10037442 T efuse_GetCurrentSize +1003746a T rtw_efuse_map_read +100374cc T rtw_efuse_map_write +1003764c T rtw_macaddr_cfg +10037710 T rtw_get_p2p_ie +10037778 T rtw_get_p2p_attr +100377ec T rtw_get_cipher_info +10037866 T rtw_get_bcn_info +10037936 T rtw_init_default_value +100379b4 T rtw_cancel_all_timer +10037a40 T rtw_free_drv_sw +10037aba T rtw_reset_drv_sw +10037b14 T rtw_init_drv_sw +10037ba8 T rtw_start_drv_threads +10037c64 T rtw_stop_drv_threads +10037c9a T rtw_read8 +10037ca8 T rtw_read16 +10037cb6 T rtw_read32 +10037cc4 T rtw_write8 +10037cd2 T rtw_write16 +10037ce0 T rtw_write32 +10037cee T rtw_do_join +10037d90 T rtw_set_802_11_bssid +10037f28 T rtw_set_802_11_ssid +10038038 T rtw_set_802_11_infrastructure_mode +100380da T rtw_set_802_11_bssid_list_scan +1003812a T rtw_set_802_11_authentication_mode +1003814e T rtw_set_802_11_add_wep +100381ae T ODM_InitRAInfo +10038254 T InitialRateUpdate +10038380 T RateUp_search_RateMask +100383b2 T RateDown_search_RateMask +10038404 T StartRateByRSSI +1003842e T RateUpRAM8195A +100384c2 T RateDownTrying +10038500 T TryDone +100385a4 T RateDownStepRAM8195A +10038644 T RateDecisionRAM8195A +10038738 T ArfrRefresh +10038950 T H2CHDL_Set_MACID_Config +10038a20 T PHY_DM_RA_SetRSSI_8195A +10038a4e t CheckPositive.isra.0 +10038b48 T ODM_ReadAndConfig_MP_8195A_AGC_TAB +10038bc0 T ODM_ReadAndConfig_MP_8195A_PHY_REG +10038c38 T ODM_GetVersion_MP_8195A_PHY_REG +10038c3c T ODM_ReadAndConfig_MP_8195A_PHY_REG_PG +10038c70 T odm_ConfigRFReg_8195A +10038ca8 T odm_ConfigRF_RadioA_8195A +10038cb8 T odm_ConfigMAC_8195A +10038cbc T odm_ConfigBB_AGC_8195A +10038ccc T odm_ConfigBB_PHY_REG_PG_8195A +10038cfa T odm_ConfigBB_PHY_8195A +10038d42 T odm_ConfigBB_TXPWR_LMT_8195A +10038d66 T PHYDM_InitTRXAntennaSetting +10038d7a T phydm_Init_cck_setting +10038dcc T ODM_CmnInfoInit +10038ec4 T ODM_CmnInfoHook +10038f78 T ODM_CmnInfoPtrArrayHook +10038f88 T ODM_CmnInfoUpdate +10039058 T odm_CommonInfoSelfInit +100390bc T ODM_DMInit +1003910a T odm_CommonInfoSelfUpdate +1003915c T PhyDM_Get_Structure +10039180 T phydm_NoisyDetection +100391ca T ODM_DMWatchdog +1003923a T Phydm_CheckAdaptivity +10039268 T Phydm_NHMCounterStatisticsInit +100392de T Phydm_SetEDCCAThreshold +10039316 T Phydm_MACEDCCAState +10039354 T Phydm_AdaptivityInit +1003943c T Phydm_Adaptivity +10039588 T ODM_CfoTrackingInit +100395b2 T ODM_CfoTracking +100395d2 T ODM_ParsingCFO +1003960c T ODM_InitDebugSetting +10039620 T ODM_Write_DIG +100396c8 T odm_ForbiddenIGICheck +1003975c T odm_FalseAlarmCounterStatistics_patch +10039914 T ODM_Write_CCK_CCA_Thres +1003994e T odm_DIGInit +100399e8 T odm_DigAbort +10039a0c T odm_DIGbyRSSI_LPS +10039adc T odm_FAThresholdCheck +10039b08 T odm_DIG +10039d98 T odm_FalseAlarmCounterStatistics +10039dc2 T odm_CCKPacketDetectionThresh +10039e42 T odm_RxPhyStatus8195A_Parsing +10039f48 T odm_Process_RSSIForDM_8195A +1003a08a T ODM_PhyStatusQuery_8195A +1003a0b6 T ODM_PhyStatusQuery +1003a0ba T ODM_ConfigRFWithHeaderFile +1003a0d8 T ODM_ConfigRFWithTxPwrTrackHeaderFile +1003a10a T ODM_ConfigBBWithHeaderFile +1003a132 T ODM_ConfigMACWithHeaderFile +1003a144 T ODM_Read1Byte +1003a14a T ODM_Read4Byte +1003a150 T ODM_Write1Byte +1003a156 T ODM_Write2Byte +1003a15c T ODM_Write4Byte +1003a162 T ODM_SetMACReg +1003a168 T ODM_SetBBReg +1003a16e T ODM_GetBBReg +1003a174 T ODM_SetRFReg +1003a17a T ODM_GetRFReg +1003a180 T ODM_MoveMemory +1003a18a T ODM_delay_ms +1003a18e T ODM_delay_us +1003a194 T getSwingIndex +1003a1ec T odm_TXPowerTrackingThermalMeterInit +1003a2a4 T odm_TXPowerTrackingInit +1003a2a8 T odm_TXPowerTrackingCheckIOT +1003a2dc T ODM_TXPowerTrackingCheck +1003a2ea T odm_RSSIMonitorInit +1003a2f2 T ODM_RAPostActionOnAssoc +1003a2fa T odm_RSSIMonitorCheckIOT +1003a3d2 T odm_RSSIMonitorCheck +1003a3e6 T odm_RateAdaptiveMaskInit +1003a410 T phydm_RA_level_decision +1003a458 T odm_RefreshRateAdaptiveMaskIOT +1003a4b8 T odm_RefreshRateAdaptiveMask +1003a4cc T ODM_Get_Rate_Bitmap +1003a5c8 t _ReadEfuseInfo8195a +1003a690 t rtl8195a_interface_configure +1003a6c4 t rtl8195a_hal_deinit +1003a700 T _InitPowerOn +1003a780 t ReadAdapterInfo8195a +1003a7b0 T _InitDriverInfoSize +1003a7ba T _InitNetworkType +1003a7dc T _InitWMACSetting +1003a84c T _InitAdaptiveCtrl +1003a890 T _InitEDCA +1003a90c T _InitRateFallback +1003a950 T _InitRetryFunction +1003a97c T _InitOperationMode +1003a9c4 T _InitInterrupt +1003aa04 t rtl8195a_hal_init +1003acd8 T rtl8195ab_set_hal_ops +1003adb4 T FillH2CCmd8195A +1003ae50 T CheckFwRsvdPageContent +1003ae52 T rtl8195a_set_FwRsvdPage_cmd +1003ae5c T rtl8195a_set_FwMediaStatusRpt_cmd +1003ae80 T rtl8195a_set_FwMacIdConfig_cmd +1003af3c T rtl8195a_set_FwPwrMode_cmd +1003afc0 T rtl8195a_download_rsvd_page +1003b2c8 T rtl8195a_set_FwJoinBssRpt_cmd +1003b2d2 T rtl8195a_Add_RateATid +1003b332 T rtw_rpt_h_addr +1003b37e T rtw_txrpt_read8 +1003b39c T rtw_txrpt_write8 +1003b3c0 T rtw_ratemask_read8 +1003b3de T rtw_ratemask_write8 +1003b402 T ReadRateMask8 +1003b40c T WriteRateMask8 +1003b410 T ReadTxrpt8 +1003b41a T WriteTxrpt8 +1003b41e T ResetTxrpt +1003b456 T PsuseTxrpt +1003b476 T CheckMaxMacidNum +1003b4ae T GetMediaStatusCommon +1003b4c8 T GetTxrptStatistic +1003b580 T rtl8195a_InitHalDm +1003b6bc T rtl8195a_HalDmWatchDog +1003b7ac T rtl8195a_init_dm_priv +1003b884 T rtl8195a_deinit_dm_priv +1003b886 T MediaConnection +1003b8a4 T MediaDisconnection +1003b8c4 T RATaskEnable +1003b8ee T SetMediaStatus +1003b92c T H2CHDL_JoinInfo +1003b964 T H2CHDL_SetRsvdPage +1003b9fc T H2CCmdCommon +1003ba68 T HalPwrSeqCmdParsing +1003bb28 T hci_dvobj_init +1003bb38 T hci_dvobj_deinit +1003bb48 T hci_dvobj_request_irq +1003bb58 T hci_dvobj_free_irq +1003bb68 T hci_lxbus_dvobj_init +1003bba4 T hci_lxbus_dvobj_deinit +1003bbe4 T hci_lxbus_dvobj_request_irq +1003bc38 T hci_lxbus_free_irq +1003bc90 T hci_lxbus_intf_stop +1003bcc8 T rtw_interrupt_thread +1003bd40 T lextra_bus_dma_Interrupt +1003bd84 T init_rom_wlan_ram_map +1003bd9c T ODM_ReadAndConfig_MP_8195A_MAC_REG +1003bef0 t CheckPositive.isra.0 +1003bfe8 T ODM_ReadAndConfig_MP_8195A_RadioA +1003c060 T ODM_ReadAndConfig_MP_8195A_TxPowerTrack_QFN48 +1003c0b0 T ODM_ReadAndConfig_MP_8195A_TxPowerTrack_QFN56 +1003c100 T ODM_ReadAndConfig_MP_8195A_TxPowerTrack_TFBGA96 +1003c150 T ODM_ReadAndConfig_MP_8195A_TXPWR_LMT +1003c188 T ODM_ReadAndConfig_MP_8195A_TxXtalTrack +1003c1b4 T GetDeltaSwingTable_8195A +1003c1e4 T GetDeltaSwingXtalTable_8195A +1003c1f4 T ODM_TxXtalTrackSetXtal_8195A +1003c214 T Hal_MPT_CCKTxPowerAdjust +1003c2e4 T ODM_TxPwrTrackSetPwr_8195A +1003c418 T ConfigureTxpowerTrack_8195A +1003c464 T phy_PathA_IQK_8195A +1003c618 T phy_PathA_RxIQK8195A +1003c9ac T _PHY_PathAFillIQKMatrix8195A +1003cb42 T _PHY_PathBFillIQKMatrix8195A +1003ccbe T _PHY_SaveADDARegisters8195A +1003ccf2 T _PHY_SaveMACRegisters8195A +1003cd20 T _PHY_ReloadADDARegisters8195A +1003cd54 T _PHY_ReloadMACRegisters8195A +1003cd84 T _PHY_PathADDAOn8195A +1003cdc0 T _PHY_MACSettingCalibration8195A +1003ce08 T _PHY_PIModeSwitch8195A +1003ce44 T phy_SimularityCompare_8195A +1003cf78 T phy_IQCalibrate_8195A +1003d304 T phy_LCCalibrate_8195A +1003d374 T PHY_LCCalibrate_8195A +1003d3e0 T PHY_IQCalibrate_8195A +1003d69c T DoIQK_8195A +1003d6ba T ConfigureTxpowerTrack +1003d6cc T ODM_TXPowerTrackingCallback_ThermalMeter +1003db30 T ODM_ResetIQKResult +1003db78 T ODM_GetRightChnlPlaceforIQK +1003dbcc T rtl_cryptoEngine_init +1003dc0c T __aeabi_llsr +1003dc0c T __lshrdi3 +1003dc24 T memset +1003dc34 T _free_r +1003dccc T _malloc_r +1003dd88 T _sbrk_r +1003dda8 T siscanf +1003dda8 T sscanf +1003ddfc T __seofread +1003de00 T strlen +1003de10 T __locale_ctype_ptr_l +1003de18 T __locale_ctype_ptr +1003de34 T __ascii_mbtowc +1003de58 T __malloc_lock +1003de5a T __malloc_unlock +1003de5c T _sungetc_r +1003ded6 T __ssrefill_r +1003df10 T __ssvfiscanf_r +1003df10 T __ssvfscanf_r +1003e1b8 T _scanf_chars +1003e280 T _scanf_i +1003e46c T __sccl +1003e4ca t _strtol_l.isra.0 +1003e5cc T _strtol_r +1003e5f0 t _strtoul_l.isra.0 +1003e6ec T _strtoul_r +1003e710 T __submore +1003e782 T __ascii_wctomb +1003e79c T memchr +1003e7b8 T memcpy +1003e7ce T _realloc_r +1003e81a T _malloc_usable_size_r +1003e82c T _sbrk +1003e848 t __aes_80211_decrypt_veneer +1003e850 t __ROM_odm_SetCrystalCap_veneer +1003e858 t __rtw_seccalctkipmic_veneer +1003e860 t __rtw_get_ie_veneer +1003e868 t __SpicWaitBusyDoneRtl8195A_veneer +1003e870 t __ROM_odm_GetDefaultCrytaltalCap_veneer +1003e878 t __wep_80211_decrypt_veneer +1003e880 t __rtw_secmicsetkey_veneer +1003e888 t __PHY_QueryBBReg_8195A_veneer +1003e890 t __rtw_secmicappend_veneer +1003e898 t __rtw_get_wpa2_ie_veneer +1003e8a0 t __phy_CalculateBitShift_veneer +1003e8a8 t __rt_md5_hmac_veneer +1003e8b0 t __rtw_set_supported_rate_veneer +1003e8b8 t __ROM_ODM_CfoTrackingReset_veneer +1003e8c0 t __rtw_get_wps_ie_veneer +1003e8c8 t __rtw_get_wpa_ie_veneer +1003e8d0 t __rom_psk_CalcGTK_veneer +1003e8d8 t __rtw_parse_wpa2_ie_veneer +1003e8e0 t __ROM_odm_EVMdbToPercentage_veneer +1003e8e8 t __ROM_odm_QueryRxPwrPercentage_veneer +1003e8f0 t __rt_arc4_init_veneer +1003e8f8 t __Strtoul_veneer +1003e900 t __rtw_get_rateset_len_veneer +1003e908 t __tkip_80211_decrypt_veneer +1003e910 t __rtw_set_ie_veneer +1003e918 t __rtw_parse_wpa_ie_veneer +1003e920 t __rtw_get_wps_attr_content_veneer +1003e928 t __wep_80211_encrypt_veneer +1003e930 t __rt_arc4_crypt_veneer +1003e938 t __rtw_get_bit_value_from_ieee_value_veneer +1003e940 t __rom_psk_CalcPTK_veneer +1003e948 t __rtw_ieee802_11_parse_elems_veneer +1003e950 t __rtw_secgetmic_veneer +1003e958 t __ROM_odm_CfoTrackingFlow_veneer +1003e960 t __rtw_get_sec_ie_veneer +1003e968 t __rtw_check_network_type_veneer +1003e970 t __rom_psk_PasswordHash_veneer +1003e978 t __rtw_set_fixed_ie_veneer +1003e980 t __HalGdmaChDisRtl8195a_veneer +1003e988 t __rt_hmac_sha1_veneer +1003e990 t __PHY_SetBBReg_8195A_veneer +1003e998 t __aes_80211_encrypt_veneer +1003e9a0 t __key_2char2num_veneer +1003e9a8 t __AES_UnWRAP_veneer +1003e9b0 t __tkip_80211_encrypt_veneer +1003e9b8 t __AES_WRAP_veneer +1003ea8e d __func__.11903 +1003ea98 d __func__.11918 +1003eaa6 d __func__.11927 +1003eab2 d __func__.11935 +1003ebc2 d __func__.12433 +1003ebe7 d __func__.12510 +1003ec18 d srvContenErrX +1003ed5a D txt_tcpsrv_NULL_pointer +1003ed71 D txt_tcpsrv_already_initialized +1003ed8f D txt_tcpsrv_out_of_mem +1003edcc d HTTPResponse +1003ee9c D HTTPdefault +1003eee6 D HTTPfserror +1003ef25 D HTTPfsupload +1003f002 D HTTPresponse_200_head +1003f005 D HTTPresponse_302_head +1003f00b D HTTPresponse_304_head +1003f018 D HTTPresponse_400_head +1003f024 D HTTPresponse_401_content +1003f04a D HTTPresponse_401_head +1003f084 D HTTPresponse_404_content +1003f09a D HTTPresponse_404_head +1003f0a4 D HTTPresponse_411_content +1003f0d1 D HTTPresponse_411_head +1003f0e1 D HTTPresponse_413_content +1003f11d D HTTPresponse_413_head +1003f136 D HTTPresponse_414_content +1003f16b D HTTPresponse_414_head +1003f180 D HTTPresponse_418_content +1003f195 D HTTPresponse_418_head +1003f1a2 D HTTPresponse_429_head +1003f1c5 D HTTPresponse_500_content +1003f1e1 D HTTPresponse_500_head +1003f1f7 D HTTPresponse_501_content +1003f22a D HTTPresponse_501_head +1003f24c d chunks.14121 +1003f253 D crlf_end_boundary +1003f258 D disk_err1_filename +1003f266 D disk_err2_filename +1003f274 D disk_err3_filename +1003f282 D disk_ok_filename +1003f28f D file_label +1003f294 D fsupload_fname +1003f2a0 d httpContentTypes +1003f2e4 d httpFileExtensions +1003f328 D http_default_file +1003f333 D sector_filename +1003f495 D sysconst_filename +1003f49e D web_cgi_fname +1003f73a d base64map +1003fb3f d __func__.19539 +1003fd4c d __func__.20327 +1003ff44 d err_strerr +10040090 D ip_addr_any +10040094 D ip_addr_broadcast +100400a8 D memp_sizes +100400c8 D tcp_backoff +100400d8 D tcp_pcb_lists +100400e8 D tcp_persist_backoff +100400ef D ethbroadcast +100400f5 D ethzero +10040124 d __FUNCTION__.9366 +10040133 d __FUNCTION__.9378 +10040218 d dhcp_magic_cookie +1004021c d dhcp_option_interface_mtu +1004021e d dhcp_option_lease_time_one_day +1004029c d __FUNCTION__.13007 +100402b0 d __FUNCTION__.13015 +100402cc d __FUNCTION__.13041 +100402eb d __FUNCTION__.13058 +100402fe d __FUNCTION__.13069 +10040319 d __FUNCTION__.13203 +1004032f d __FUNCTION__.13207 +100403dc D osdep_service +10040520 d __FUNCTION__.7375 +100405a9 D GPIO_InPinMode +100405ad D GPIO_SWPORT_DR_TBL +100405b0 d __func__.8922 +10040636 d __FUNCTION__.8774 +10040643 d __FUNCTION__.8787 +100406a4 d PinMap_SSI_MISO +10040710 d PinMap_SSI_MOSI +10040907 D GDMA_Chnl_Option +100409a0 D SpiDefaultSetting +100409f0 D Ssi2_TX_GDMA_Chnl_Option +10040a0c D Ssi_MultiBlk_GDMA_Chnl_Option +10040e09 d __FUNCTION__.8629 +10040e2b d __FUNCTION__.8636 +10040e46 d __FUNCTION__.8643 +10040f6e d __FUNCTION__.18444 +10040f90 D wlancmds +10041190 D rtw_cmd_callback +10041424 d RTW_ChannelPlan2G +100414ab D HT_INFO_OUI +100414af D WMM_INFO_OUI +100414b5 D RSN_TKIP_CIPHER +100414b9 D WPS_OUI +100414bd D HT_CAP_OUI +100414c1 D null_addr +100414c7 D MCS_rate_1R +100414d7 D P2P_OUI +1004153c D OnAction_tbl +10041554 D RTW_WPA_OUI +10041558 D WMM_PARA_OUI +1004155e d RTW_ChannelPlanMap +10041579 D WMM_OUI +10041580 d wlanevents +10041661 D zero_bssid +10041695 d __FUNCTION__.18311 +100416be d __FUNCTION__.18144 +100416d1 D SNAP_ETH_TYPE_APPLETALK_AARP +100416d3 D SNAP_ETH_TYPE_IPX +100416d5 D rtw_bridge_tunnel_header +100416fc D rtw_rfc1042_header +1004171a d CSWTCH.36 +10041726 D ARTHEROS_OUI1 +10041729 D ARTHEROS_OUI2 +1004172c D REALTEK_OUI +1004172f D RALINK_OUI +10041732 D MARVELL_OUI +10041735 D CISCO_OUI +10041738 d rtw_basic_rate_cck +1004173c D BROADCOM_OUI1 +1004173f D BROADCOM_OUI2 +10041742 D REALTEK_96B_IE +10041748 d rtw_basic_rate_mix +1004174f d rtw_basic_rate_ofdm +10041752 D AIRGOCAP_OUI +10041766 d CSWTCH.67 +10041778 d P802_1H_OUI +1004177b d RFC1042_OUI +10041784 d CSWTCH.49 +100417c6 d CSWTCH.28 +100417d8 D efuse_map_mask +100417e8 d __func__.21858 +100417fe D flash_map_mask +10041bcb d CSWTCH.16 +10041c4f d CSWTCH.18 +10041cbe d CSWTCH.14 +10041d53 d __FUNCTION__.22029 +10041d63 d __FUNCTION__.21819 +10041d78 d rtw_private_handler +10041dc4 d rtw_private_args +10042331 d __FUNCTION__.21888 +10042341 d __FUNCTION__.22004 +10042350 d __FUNCTION__.22076 +10042361 d iw_priv_type_size +10042376 d __FUNCTION__.17971 +100424af d __FUNCTION__.21591 +100424be d __FUNCTION__.21613 +100424d3 d __FUNCTION__.21748 +100424e6 d __FUNCTION__.21700 +100424f7 d __FUNCTION__.21724 +10042507 d __FUNCTION__.21637 +100428de d __FUNCTION__.21753 +100428ec d __FUNCTION__.21815 +10042905 d __FUNCTION__.21630 +10042910 d __FUNCTION__.21799 +10042922 d __FUNCTION__.21625 +10042930 d __FUNCTION__.21688 +10043ac4 D rom_e_rtw_msgp_str_ +10043c80 D rom_f_rtw_msgp_str_ +10043e8a D CCKFCCTable_Ch14_8195A +10043e9a D CCKFCCTable_8195A +10043eac D OFDMSwingTable_New +10043f58 D CCKCETable_8195A +10043fc1 d CSWTCH.39 +10043fec d __func__.21335 +1004400c D hci_ops +10044031 V Array_MP_8195A_TXPWR_LMT +100445a3 d __func__.8589 +100445bd d __func__.8821 +100445d6 d __func__.8814 +100445f4 d __func__.8836 +10044616 d __func__.8670 +100449df d __func__.8682 +100449f2 d __func__.8617 +10044a0b d __func__.8826 +10044a25 d __func__.8804 +10044a44 d __func__.8831 +10044a8f D _ctype_ +10044b90 D __sf_fake_stderr +10044bb0 D __sf_fake_stdin +10044bd0 D __sf_fake_stdout +10044bf0 D xHeapRegions +10044c10 D console_commands +10044c10 D UartLogRamCmdTable +10044c30 D UartLogRamCmdTable_end +10044c34 D __data_start__ +10044c34 D syscfg +10044c3e D sin_table +10044d40 D HTTPAuthorization +10044d44 D HTTPContentLength +10044d48 D HTTPContentType +10044d4c D HTTPCookie +10044d50 D HTTPboundary +10044d54 D HTTPmultipartformdata +10044d58 D SystemCoreClock +10044d5c D error_flag +10044d60 D feep_tab +10044da0 D tab_code_rtw_secyrity +10044dc8 D wifi_ap_cfg +10044e30 D wifi_ap_dhcp +10044e40 D wifi_cfg +10044e47 D wifi_st_cfg +10044eb8 D wifi_st_dhcp +10044ec8 D wlan_ap_name +10044ece D wlan_ap_netifn +10044ecf D wlan_st_name +10044ed8 d iss.7970 +10044edc d tcp_port +10044ede d udp_port +10044ee0 D lwip_host_name +10044f00 d dhcp_recorded_xid +10044f04 d dhcp_server_state_machine +10044f08 d uxCriticalNesting +10044f0c d seed.13176 +10044f10 d last_wakelock_state +10044f30 d wakelock +10044f34 d wakeup_event +10044f38 D GlobalDebugEnable +10044f3c D mlme_sta_tbl +10044fac d PMKID_KDE_TYPE.18395 +10044fb4 V nr_xmitbuff +10044fb8 V nr_xmitframe +10044fbc D rtw_adaptivity_mode +10044fbd D g_user_ap_sta_num +10044fc0 V max_local_skb_num +10044fc4 V max_skb_buf_num +10044fc8 D ARFB_table +10045007 D TRYING_NECESSARY_idx +1004501b D DROPING_NECESSARY +1004502f D PER_RATE_UP +10045043 D PER_RATE_DOWN +10045058 V Array_MP_8195A_PHY_REG_PG +100450e8 D Array_MP_8195A_AGC_TAB +100452f8 D Array_MP_8195A_PHY_REG +10045970 d flag.21346 +10045974 D rtl8195A_card_disable_flow +10045a14 D rtl8195A_card_enable_flow +10045ab4 D Array_MP_8195A_MAC_REG +10045dbc D gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_TFBGA96_8195A +10045ddc D gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_TFBGA96_8195A +10045dfc D gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_QFN48_8195A +10045e1a D gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_QFN56_8195A +10045e38 D gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_QFN48_8195A +10045e56 D gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_QFN56_8195A +10045e74 D gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_TFBGA96_8195A +10045e94 D gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_QFN56_8195A +10045eb2 D gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_QFN48_8195A +10045ed0 D gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_QFN56_8195A +10045ef0 D Array_MP_8195A_RadioA +100464b8 D gDeltaSwingTableXtal_MP_P_TxXtalTrack_8195A +100464d6 D gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_TFBGA96_8195A +100464f6 D gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_QFN48_8195A +10046514 D _impure_ptr +10046518 d impure_data +10046578 D __global_locale +100466e4 D __data_end__ +100466e4 D __ram_image2_text_end__ +10046700 D .ram.bss$$Base +10046700 D __bss_start__ +10046700 D skbdata_list +10046708 V skb_data_pool +10049b08 D errno +10049b0c D sema_WEBReady +10049b10 D dma_buffer +1004a5dc D cfg_sema +1004a5e0 D cfg_updated +1004a5e4 D filt_const +1004a5f0 D filt_fade +1004a60c D filt_rainbow +1004a61c D filt_wave +1004a628 D strip +1004a640 D ws2812_cfg +1004a644 D phcfg +1004a648 D WEBFSStubs +1004a7c8 D disk_base_addr +1004a7cc D fatCache +1004a7dc d fatCacheID +1004a7e0 D isWEBFSLocked +1004a7e2 D numFiles +1004a7e4 D xQueueWebSrv +1004a7e8 d join_user_data +1004a7ec D rtw_join_status +1004a7f0 D scan_result_handler_ptr +1004a804 D wifi_mode +1004a808 d event_callback_list +1004a988 D paff_array +1004aa00 D lwip_init_done +1004aa04 D xnetif +1004aa7c D wifi_autoreconnect +1004aa84 D wifi_run_mode +1004aa85 D wifi_st_status +1004aa86 D wlan_st_netifn +1004aa88 D web_scan_handler_ptr +1004aa94 d mbox +1004aa98 d tcpip_init_done +1004aa9c d tcpip_init_done_arg +1004aaa0 d allrouters +1004aaa4 d allsystems +1004aaa8 d igmp_group_list +1004aaac D current_header +1004aab0 D current_iphdr_dest +1004aab4 D current_iphdr_src +1004aab8 D current_netif +1004aabc d ip_id +1004aabe d ip_reass_pbufcount +1004aac0 d reassdatagrams +1004aac4 D dhcp_rx_options_given +1004aad0 D dhcp_rx_options_val +1004aaf8 d xid.7907 +1004aafc d dns_payload +1004ab00 d dns_payload_buffer +1004ad04 d dns_pcbs +1004ad14 d dns_requests +1004ad44 d dns_servers +1004ad4c d dns_table +1004b18c d next_timeout +1004b190 d tcpip_tcp_timer_active +1004b194 D netif_default +1004b198 D netif_list +1004b19c d netif_num +1004b19d D pbuf_free_ooseq_pending +1004b1a0 d raw_pcbs +1004b1a4 D tcp_active_pcbs +1004b1a8 D tcp_active_pcbs_changed +1004b1ac D tcp_bound_pcbs +1004b1b0 D tcp_listen_pcbs +1004b1b4 D tcp_ticks +1004b1b8 d tcp_timer +1004b1b9 d tcp_timer_ctr +1004b1bc D tcp_tmp_pcb +1004b1c0 D tcp_tw_pcbs +1004b1c4 d ackno +1004b1c8 d flags +1004b1cc d inseg +1004b1e0 d recv_data +1004b1e4 d recv_flags +1004b1e8 d seqno +1004b1ec D tcp_input_pcb +1004b1f0 d tcphdr +1004b1f4 d tcplen +1004b1f8 D udp_pcbs +1004b1fc d arp_table +1004b2c4 d etharp_cached_entry +1004b2c8 d rarp_retrieve_cb +1004b2cc D lwip_tickless_used +1004b2d0 d s_nextthread +1004b2d4 d s_timeoutlist +1004b304 d bound_client_ethernet_address +1004b314 d client_request_ip +1004b318 d dhcp_client_ethernet_address +1004b328 d dhcp_message_repository +1004b32c d dhcp_message_total_options_lenth +1004b330 d dhcps_allocated_client_address +1004b334 D dhcps_ip4addr_pool_end +1004b335 D dhcps_ip4addr_pool_start +1004b338 d dhcps_ip_table_semaphore +1004b33c d dhcps_local_address +1004b340 d dhcps_local_gateway +1004b344 d dhcps_local_mask +1004b348 d dhcps_netif +1004b34c d dhcps_network_id +1004b350 d dhcps_pcb +1004b354 d dhcps_send_broadcast_address +1004b358 d dhcps_subnet_broadcast +1004b35c d ip_table +1004b37c d ext_free +1004b380 D ext_lower +1004b384 D ext_upper +1004b388 d pxEnd +1004b38c d xFreeBytesRemaining +1004b390 d xMinimumEverFreeBytesRemaining +1004b394 d xStart +1004b39c d ulStoppedTimerCompensation +1004b3a0 d ulTimerCountsForOneTick +1004b3a4 d xMaximumPossibleSuppressedTicks +1004b3a8 D pxCurrentTCB +1004b3ac d pxDelayedTaskList +1004b3b0 d pxOverflowDelayedTaskList +1004b3b4 d pxReadyTasksLists +1004b490 d ulTaskSwitchedInTime +1004b494 d uxCurrentNumberOfTasks +1004b498 d uxDeletedTasksWaitingCleanUp +1004b49c d uxPendedTicks +1004b4a0 d uxSchedulerSuspended +1004b4a4 d uxTaskNumber +1004b4a8 d uxTopReadyPriority +1004b4ac d xDelayedTaskList1 +1004b4c0 d xDelayedTaskList2 +1004b4d4 d xIdleTaskHandle +1004b4d8 d xNextTaskUnblockTime +1004b4dc d xNumOfOverflows +1004b4e0 d xPendingReadyList +1004b4f4 d xSchedulerRunning +1004b4f8 d xSuspendedTaskList +1004b50c d xTasksWaitingTermination +1004b520 d xTickCount +1004b524 d xYieldPending +1004b528 d pxCurrentTimerList +1004b52c d pxOverflowTimerList +1004b530 d xActiveTimerList1 +1004b544 d xActiveTimerList2 +1004b558 d xLastTime.5390 +1004b55c d xTimerQueue +1004b560 d xTimerTaskHandle +1004b564 d device_mutex +1004b574 d mutex_init +1004b578 d uxSavedInterruptStatus +1004b57c D min_free_heap_size +1004b580 d g_heap_inited +1004b584 D g_tcm_heap +1004b588 d tcm_lock +1004b58c D flashobj +1004b598 D fspic_isinit +1004b599 D SPI0_IS_AS_SLAVE +1004b59c D SpiGdmaOp +1004b5c4 D WDGAdapter +1004b600 d HalGdmaReg +1004b604 D gHAL_Gpio_Adapter +1004b730 d hold_wakelock_time +1004b7b0 d last_acquire_wakelock_time +1004b830 D missing_tick +1004b834 D psm_dd_hook_info_size +1004b838 D psm_dd_hook_infos +1004b8d8 D reserve_pll +1004b8dc d sys_sleep_time +1004b8e0 D Timer2To7HandlerData +1004b8f8 D PwrAdapter +1004bb84 D SYSAdapte +1004bb85 D libc_has_init +1004bb86 D print_off +1004bb88 d rheap_end +1004bb8c D p_ap_polling_sta_hdl +1004bb90 D auto_reconnect_running +1004bb94 D p_wlan_autoreconnect_hdl +1004bb98 D mac_monitor_callback +1004bb9c D mf_list_head +1004bba0 d rtw_indicate_mgnt_enable +1004bba4 d pscan_retry_cnt.22254 +1004bba5 d bcn_changed.21387 +1004bba8 D pre_tx_try_count +1004bbac D promisc_callback_all +1004bbb0 D promisc_sema +1004bbb4 D promisc_callback +1004bbb8 D psk_essid +1004bc00 D psk_passphrase +1004bc82 D psk_passphrase64 +1004bcc3 D wpa_global_PSK +1004bd14 d rx_ring_pool +1004ddf4 d stop_report_count.21381 +1004ddf8 D p_ap_polling_sta_int_hdl +1004ddfc d WifiMcuCmdBitMap.22051 +1004de00 D bCheckStateTIMER +1004de04 D p_wlan_init_done_callback +1004de08 D rtw_power_percentage_idx +1004de0c D p_wlan_uart_adapter_callback +1004de10 D rtw_adaptivity_en +1004de14 D p_wlan_mgmt_filter +1004de18 D p_jdsmart_callback +1004de1c D rtw_initmac +1004de20 D rtw_adaptivity_th_l2h_ini +1004de24 d drvpriv +1004de38 D skbbuf_used_num +1004de3c V skb_pool +1004e01c D skbdata_used_num +1004e020 d wrapper_skbbuf_list +1004e028 D max_skbdata_used_num +1004e02c D max_skbbuf_used_num +1004e030 d skb_fail_count +1004e034 D timer_table +1004e03c D rltk_wlan_info +1004e06c d timer_used_num +1004e070 D max_timer_used_num +1004e074 D Noisy_State +1004e078 D pExportWlanIrqSemaphore +1004e07c D gDeltaSwingTableXtal_MP_N_TxXtalTrack_8195A +1004e0a0 d g_rtl_cipherEngine +1004e5a0 d init_status.9277 +1004e5a4 D __malloc_free_list +1004e5a8 D __malloc_sbrk_start +1004e5ac d heap_end.4116 +1004e5b0 ? __ram_heap2_start__ +1004e5b0 D .ram.bss$$Limit +1004e5b0 D __bss_end__ +10070000 A __ram_heap2_end__ +1fff0000 D __ram_tcm_start__ +1fff0000 D __tcm_heap_start__ +1fff0000 D tcm_heap +1ffffd00 D __tcm_heap_end__ +30000000 ? __sdram_bss_end__ +30000000 ? __sdram_bss_start__ +30000000 ? __sdram_data_end__ +30000000 ? __sdram_data_start__ +30000000 ? __sdram_heap_start__ +30200000 A __sdram_heap_end__ diff --git a/Firmware/Debug/obj/obj_list.lst b/Firmware/Debug/obj/obj_list.lst new file mode 100644 index 0000000..2514233 --- /dev/null +++ b/Firmware/Debug/obj/obj_list.lst @@ -0,0 +1 @@ +Debug/obj/project/main.o Debug/obj/project/user_start.o Debug/obj/project/WS2812/WS2812.o Debug/obj/project/WS2812/ledfilters.o Debug/obj/project/WS2812/ledeffectsserver.o Debug/obj/project/tcpsrv/tcp_srv_conn.o Debug/obj/project/webfs/webfs.o Debug/obj/project/web/web_srv.o Debug/obj/project/web/web_utils.o Debug/obj/project/web/web_websocket.o Debug/obj/project/web/websock.o Debug/obj/project/web/web_int_callbacks.o Debug/obj/project/web/web_int_vars.o Debug/obj/project/web/web_auth.o Debug/obj/component/soc/realtek/8195a/fwlib/ram_lib/rtl_bios_data.o Debug/obj/component/soc/realtek/8195a/cmsis/device/system_8195a.o Debug/obj/component/soc/realtek/8195a/misc/driver/rtl_console_new.o Debug/obj/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_eap_config.o Debug/obj/component/common/api/wifi/wifi_conf.o Debug/obj/component/common/api/wifi/wifi_ind.o Debug/obj/component/common/api/wifi/wifi_promisc.o Debug/obj/component/common/api/wifi/wifi_simple_config.o Debug/obj/component/common/api/wifi/wifi_util.o Debug/obj/component/common/api/lwip_netconf.o Debug/obj/component/common/api/wifi_api.o Debug/obj/component/common/api/wifi_api_scan.o Debug/obj/component/common/network/lwip/src/api/api_lib.o Debug/obj/component/common/network/lwip/src/api/api_msg.o Debug/obj/component/common/network/lwip/src/api/err.o Debug/obj/component/common/network/lwip/src/api/netbuf.o Debug/obj/component/common/network/lwip/src/api/netdb.o Debug/obj/component/common/network/lwip/src/api/netifapi.o Debug/obj/component/common/network/lwip/src/api/sockets.o Debug/obj/component/common/network/lwip/src/api/tcpip.o Debug/obj/component/common/network/lwip/src/core/ipv4/autoip.o Debug/obj/component/common/network/lwip/src/core/ipv4/icmp.o Debug/obj/component/common/network/lwip/src/core/ipv4/igmp.o Debug/obj/component/common/network/lwip/src/core/ipv4/inet.o Debug/obj/component/common/network/lwip/src/core/ipv4/inet_chksum.o Debug/obj/component/common/network/lwip/src/core/ipv4/ip.o Debug/obj/component/common/network/lwip/src/core/ipv4/ip_addr.o Debug/obj/component/common/network/lwip/src/core/ipv4/ip_frag.o Debug/obj/component/common/network/lwip/src/core/def.o Debug/obj/component/common/network/lwip/src/core/dhcp.o Debug/obj/component/common/network/lwip/src/core/dns.o Debug/obj/component/common/network/lwip/src/core/init.o Debug/obj/component/common/network/lwip/src/core/lwip_timers.o Debug/obj/component/common/network/lwip/src/core/mem.o Debug/obj/component/common/network/lwip/src/core/memp.o Debug/obj/component/common/network/lwip/src/core/netif.o Debug/obj/component/common/network/lwip/src/core/pbuf.o Debug/obj/component/common/network/lwip/src/core/raw.o Debug/obj/component/common/network/lwip/src/core/stats.o Debug/obj/component/common/network/lwip/src/core/sys.o Debug/obj/component/common/network/lwip/src/core/tcp.o Debug/obj/component/common/network/lwip/src/core/tcp_in.o Debug/obj/component/common/network/lwip/src/core/tcp_out.o Debug/obj/component/common/network/lwip/src/core/udp.o Debug/obj/component/common/network/lwip/src/netif/etharp.o Debug/obj/component/common/network/lwip/port/realtek/freertos/ethernetif.o Debug/obj/component/common/drivers/wlan/realtek/src/osdep/lwip_intf.o Debug/obj/component/common/network/lwip/port/realtek/freertos/sys_arch.o Debug/obj/component/common/network/dhcp/dhcps.o Debug/obj/component/common/network/sntp/sntp.o Debug/obj/component/common/network/netbios/netbios.o Debug/obj/component/os/freertos/freertos/Source/portable/MemMang/heap_5.o Debug/obj/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3/port.o Debug/obj/component/os/freertos/cmsis_os.o Debug/obj/component/os/freertos/freertos/Source/croutine.o Debug/obj/component/os/freertos/freertos/Source/event_groups.o Debug/obj/component/os/freertos/freertos/Source/list.o Debug/obj/component/os/freertos/freertos/Source/queue.o Debug/obj/component/os/freertos/freertos/Source/tasks.o Debug/obj/component/os/freertos/freertos/Source/timers.o Debug/obj/component/os/os_dep/device_lock.o Debug/obj/component/os/freertos/freertos_service.o Debug/obj/component/soc/realtek/8195a/misc/os/mailbox.o Debug/obj/component/soc/realtek/8195a/misc/os/osdep_api.o Debug/obj/component/os/os_dep/osdep_service.o Debug/obj/component/os/os_dep/tcm_heap.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/analogin_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/dma_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/efuse_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/flash_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/gpio_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/gpio_irq_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/i2c_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/i2s_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/log_uart_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/nfc_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/pinmap.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/pinmap_common.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/port_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/pwmout_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/rtc_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/serial_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/sleep.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/spdio_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/spi_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/sys_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/timer_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/us_ticker.o Debug/obj/component/common/mbed/common/us_ticker_api.o Debug/obj/component/common/mbed/common/wait_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/wdt_api.o Debug/obj/component/common/mbed/targets/hal/rtl8195a/flash_eep.o Debug/obj/component/soc/realtek/8195a/fwlib/bitband_io.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_32k.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_adc.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_gdma.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_gpio.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_i2c.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_i2s.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_nfc.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_pcm.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_pwm.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_sdr_controller.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_ssi.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_timer.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_uart.o Debug/obj/component/soc/realtek/8195a/misc/os/freertos_pmu_8195a.o Debug/obj/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_adc.o Debug/obj/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gdma.o Debug/obj/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gpio.o Debug/obj/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2c.o Debug/obj/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2s.o Debug/obj/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_nfc.o Debug/obj/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pwm.o Debug/obj/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_ssi.o Debug/obj/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_timer.o Debug/obj/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_uart.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_dac.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_common.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_soc_ps_monitor.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_efuse.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_log_uart.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_pinmux.o Debug/obj/component/soc/realtek/8195a/fwlib/hal_misc.o Debug/obj/component/soc/realtek/8195a/fwlib/ram_lib/startup.o Debug/obj/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libc.o Debug/obj/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libgloss_retarget.o Debug/obj/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_eabi_cast_ram.o Debug/obj/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_math_ram.o Debug/obj/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/c_stdio.o Debug/obj/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot.o diff --git a/Firmware/Firmware.vcxproj b/Firmware/Firmware.vcxproj new file mode 100644 index 0000000..9292689 --- /dev/null +++ b/Firmware/Firmware.vcxproj @@ -0,0 +1,630 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + LinuxDebugger + ssh + gdb + gdb + localhost:3333 + IoT + {3D8B16B6-9763-48AD-A514-F45680E8613B} + Firmware + + + + Makefile + true + v140 + + + Makefile + false + v140 + + + Makefile + true + v140 + + + Makefile + false + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + false + <_ApplicableDebuggers>Desktop + LinuxDebugger + + + + + + + + + + + + Project + + + + PropertySheet + + + + File + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mingw32-make -s -j 10 all + C:\RTL\6-2017-q2\arm-none-eabi\include;$(SDK_PATH)\component\common\mbed\targets\hal\rtl8195a;$(SDK_PATH)\component\common\mbed\common;$(SDK_PATH)\component\common\mbed\hal;$(SDK_PATH)\component\common\mbed\hal_ext;$(SDK_PATH)\component\common\mbed\api;$(SDK_PATH)\component\common\api;$(SDK_PATH)\component\common\api\at_cmd;$(SDK_PATH)\component\common\api\network;$(SDK_PATH)\component\common\api\platform;$(SDK_PATH)\component\common\api\wifi\rtw_wowlan;$(SDK_PATH)\component\common\api\wifi;$(SDK_PATH)\component\common\network;$(SDK_PATH)\component\common\network\lwip\port\realtek;$(SDK_PATH)\component\common\network\lwip\port\realtek\arch;$(SDK_PATH)\component\common\network\lwip\port\realtek\freertos;$(SDK_PATH)\component\common\network\lwip\src\api;$(SDK_PATH)\component\common\network\lwip\src\core\ipv4;$(SDK_PATH)\component\common\network\lwip\src\core\snmp;$(SDK_PATH)\component\common\network\lwip\src\core;$(SDK_PATH)\component\common\network\lwip\src\include;$(SDK_PATH)\component\common\network\lwip\src\include\ipv4;$(SDK_PATH)\component\common\network\lwip\src\include\ipv4\lwip;$(SDK_PATH)\component\common\network\lwip\src\include\lwip;$(SDK_PATH)\component\common\network\lwip\src\include\netif;$(SDK_PATH)\component\common\network\lwip\src\include\posix\sys;$(SDK_PATH)\component\common\network\lwip\src\include\posix;$(SDK_PATH)\component\common\network\lwip\src\netif;$(SDK_PATH)\component\common\drivers\wlan\realtek\include;$(SDK_PATH)\component\common\drivers\wlan\realtek\include\byteorder;$(SDK_PATH)\component\common\drivers\wlan\realtek\src\osdep;$(SDK_PATH)\component\common\drivers\wlan\realtek\src\osdep\freertos;$(SDK_PATH)\component\os\freertos\freertos\Source;$(SDK_PATH)\component\os\freertos\freertos\Source\portable\GCC\ARM_CM3;$(SDK_PATH)\component\os\freertos\freertos\Source\include;$(SDK_PATH)\component\os\freertos;$(SDK_PATH)\component\os\os_dep\include;$(SDK_PATH)\component\os\os_dep;$(SDK_PATH)\component\os\rtx;$(SDK_PATH)\component\soc\realtek\common\bsp;$(SDK_PATH)\component\soc\realtek\8195a\fwlib;$(SDK_PATH)\component\soc\realtek\8195a\fwlib\src;$(SDK_PATH)\component\soc\realtek\8195a\fwlib\rtl8195a;$(SDK_PATH)\component\soc\realtek\8195a\fwlib\rtl8195a\src;$(SDK_PATH)\component\soc\realtek\8195a\fwlib\ram_lib;$(SDK_PATH)\component\soc\realtek\8195a\fwlib\ram_lib\wlan\realtek\wlan_ram_map\rom;$(SDK_PATH)\component\soc\realtek\8195a\fwlib\ram_lib\usb_otg\include;$(SDK_PATH)\component\soc\realtek\8195a\fwlib\ram_lib\usb_otg\include\usb_otg_inc;$(SDK_PATH)\component\soc\realtek\8195a\cmsis;$(SDK_PATH)\component\soc\realtek\8195a\cmsis\device;$(SDK_PATH)\component\soc\realtek\8195a\misc\driver;$(SDK_PATH)\component\soc\realtek\8195a\misc\platform;$(SDK_PATH)\component\soc\realtek\8195a\misc\os;$(SDK_PATH)\component\soc\realtek\8195a\misc\rtl_std_lib;$(SDK_PATH)\component\soc\realtek\8195a\misc\rtl_std_lib\include;$(SDK_PATH)\component\soc\realtek\8195a\misc\rtl_std_lib\lib_rtlstd;$(SDK_PATH)\component\soc\realtek\8195a\misc\rtl_std_lib\libc\rom\string;$(SDK_PATH)\component\soc\realtek\8195a\misc\rtl_std_lib\libgloss\rtl8195a\rom;$(ProjectDir)Project;$(ProjectDir)Project\web;$(ProjectDir)Project\webfs;$(ProjectDir)Project\tcpsrv;$(ProjectDir)Project\driver;$(ProjectDir)Project\rtl8195a;$(ProjectDir)Project\ina219;$(ProjectDir)Project\adc_ws;$(ProjectDir)Project\MPU6050;$(ProjectDir)Project\SSD1306;$(ProjectDir)Project\MLX90614;$(ProjectDir)Project\WS2812;$(IncludePath) + mingw32-make -s -j 10 rebuild + mingw32-make -s clean + ram_all.bin + $(ProjectDir)Debug\bin\ + $(ProjectDir)Debug + CONFIG_PLATFORM_8195A=1;GCC_ARMCM3;M3;F_CPU=166666666L;__STDC__;__extension__= + $(PATH) + + + + + + $(SourcePath) + + + + + + + + $(ProjectDir)Debug\$(MSBuildProjectName).log + + + + + \ No newline at end of file diff --git a/Firmware/Firmware.vcxproj.filters b/Firmware/Firmware.vcxproj.filters new file mode 100644 index 0000000..7f79c17 --- /dev/null +++ b/Firmware/Firmware.vcxproj.filters @@ -0,0 +1,1689 @@ + + + + + Assets + + + Assets + + + Assets + + + Assets + + + + + + + SDK + + + SDK + + + SDK + + + SDK + + + SDK + + + WEBFiles + + + WEBFiles + + + WEBFiles + + + WEBFiles + + + WEBFiles + + + WEBFiles + + + + + {08a26e93-524c-4982-a01c-c8d4f223d6be} + + + {af4e8ee4-e406-4847-a22e-226417025f10} + + + {b014e9e9-13dd-4945-aa54-d3cbe961df2b} + + + {bdc045f1-676a-4c2e-98dc-4c7011a097f5} + + + {2602ad5c-5b75-46cc-8329-75dbd58ceba3} + + + {50d960d6-c301-402f-ad1c-33d14b7a4dbd} + + + {bd2cf493-28ea-4ebb-ba05-fc5323ebb11a} + + + {ecd0e7a7-531f-4217-a881-e1e0eb621fab} + + + {d2dbf689-f27b-4505-913b-edfefef7eb67} + + + {d8f42812-c46b-48c5-9d7f-ee1bfbba4b87} + + + {1bb167b0-34a3-4b65-9cea-4cbed30dd4bb} + + + {016841a5-3b07-4f94-bb12-b31883d45b49} + + + {78f72bec-3f46-43e4-a7a1-a945df2bca74} + + + {a87a2ceb-e33a-4a05-bb2c-9812e68d9640} + + + {03be9a0c-e2e3-4fd5-9cc6-322f6920bd66} + + + {55db239c-cc9d-4fc0-980d-4c81373269b2} + + + {d5cb2f53-86df-4d9c-b49a-ff27c82bb756} + + + {15863588-146b-40b1-a2c0-6791fe6992d7} + + + {829362c2-bc6d-4481-a282-dbb5b0974c6f} + + + {e1a517b9-9564-4a08-98c7-5ce47f55bfb8} + + + {466c00ee-e82a-43a0-bde7-6303df1b8b3b} + + + {b2673331-9227-431b-bf26-f3950f9fc61f} + + + {4f9f22b5-2357-4bae-92e9-71f5833e915c} + + + {5f23425b-07ba-4da3-82fb-01389f9d6823} + + + {7efca65d-2fc2-4847-932e-884eaf3b0d1e} + + + {b034088a-75c9-4eed-b4f5-29a45c21ce71} + + + {a50b9c26-7062-4bb6-abb2-3f112109d17c} + + + {7e58d994-4bfa-42b6-97c4-b491b3ebda8e} + + + {33e076dd-aa6a-4025-b780-30ee285680c4} + + + {f3ed6348-e1f5-470b-8570-f29bdb6638c2} + + + {b0e18d25-33c7-4e1d-bc56-a1260280b139} + + + {d3dc3239-caff-4b38-ba23-3d33417a7427} + + + {e6d18fba-43bb-41df-a93a-1d993a4a267d} + + + {01fadd8c-9e93-40cd-9efb-72646df020c6} + + + {a0096c24-5171-4864-b77e-4f0a34e6976c} + + + {0f60cfc0-438c-4d04-91f4-cb0847341608} + + + {4e680784-982e-4ee9-b999-e3980683875e} + + + {c37ac131-62ee-451a-a2bf-414fd9304c75} + + + {94b7e724-6ae2-43b7-8058-102cec0b72c0} + + + {fd5b466a-a5f4-40a7-87ed-5de226fcbde7} + + + {96d3130f-cc4f-44ae-91dd-1c5869ab4c79} + + + {a06dcc19-509e-431a-9f53-eb7417fed78a} + + + {5d1454d4-bf49-4d6c-becf-edf7c9b46f88} + + + {4159f405-9a9c-4471-aae5-0e39825a123c} + + + {e142b148-8d5d-456c-817e-11a395464e3e} + + + {8f812468-9d50-4c08-97fa-f95595242d6d} + + + {cd792418-8a24-42ee-b501-4cd7de08d655} + + + {b83832e1-25ce-4c21-a70e-6e36d93023c2} + + + {904a78a5-f412-476c-991d-27026a35030b} + + + {fc66df77-bf94-4290-8bee-4cfe01edfbbd} + + + {ec299e57-688c-4952-a59d-0066e9d9b828} + + + {3b95f927-1b9c-4deb-9a43-ef17ff580860} + + + {50bddb50-3ba7-4b4d-98af-93e719d0560b} + + + {e335d202-d022-4a2e-9e21-5fd70e47ed4b} + + + {a30614c9-e68c-48bc-bae7-32bafe027f51} + + + {029b1e98-955f-44a0-b534-65a8b6617e0d} + + + {b408a7c8-8f6c-4300-b684-b6708e3a757d} + + + {b504c8a2-ad3c-484e-b3c3-9d26727f1d47} + + + {85a1adff-4f54-4722-9926-a11c12b07630} + + + {bbc2cfef-d508-4ce2-b4eb-e5ecd2820376} + + + {688c838e-5b2d-4240-9f38-2c36f58c864a} + + + {408f5db7-69fd-4fea-a77a-7a43597f7ccd} + + + {c71f79cb-3925-4614-aadb-ebc75d56b204} + + + {98131a92-9304-4820-8f5f-ac8dffd0dab3} + + + {0d9c4a2e-1df0-4ac7-973c-3747bcad49f7} + + + {a3667ce5-8a45-4d37-8a74-3d7baa58d9f3} + + + {0b6a769a-b849-4622-a163-43d3e4ba2a92} + + + {ba72b723-d707-4885-9d7e-e81dd91968c9} + + + {e5b26651-f2f5-454e-8c02-9ed742519e3f} + + + {272a6c70-71b2-4ad5-b065-efd7b0eb90ef} + + + {c23138eb-23eb-41b0-88b9-bfd6578d2eca} + + + {8c95d98e-afb1-4f5c-a14d-91cb4763d782} + + + {096ebc40-6894-49fd-8b52-04322f6591c3} + + + {63d64419-2c07-4426-80b7-59f108d94e42} + + + {76e3b46c-b00b-4aed-a790-e8095891ac47} + + + {915c7bfe-9abf-46e5-b10c-b07ffd002a8b} + + + + + Project + + + Project + + + Project + + + Project + + + Project + + + Project + + + Project + + + Project + + + Project + + + Project + + + Project\webfs + + + Project\rtl8195a + + + Project\rtl8195a + + + Project\rtl8195a + + + Project\rtl8195a + + + Project\rtl8195a + + + Project\rtl8195a + + + Project\tcpsrv + + + Project\web + + + Project\web + + + Project\web + + + Project\web + + + Project\web + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\common\mbed\hal + + + SDK\component\common\mbed\hal + + + SDK\component\common\mbed\hal + + + SDK\component\common\mbed\hal + + + SDK\component\common\mbed\hal + + + SDK\component\common\mbed\hal + + + SDK\component\common\mbed\hal + + + SDK\component\common\mbed\hal + + + SDK\component\common\mbed\hal + + + SDK\component\common\mbed\hal + + + SDK\component\common\mbed\hal + + + SDK\component\common\mbed\hal + + + SDK\component\common\mbed\hal + + + SDK\component\common\mbed\hal + + + SDK\component\common\mbed\hal + + + SDK\component\soc\realtek\8195a\cmsis\device + + + SDK\component\soc\realtek\8195a\cmsis\device + + + SDK\component\soc\realtek\8195a\cmsis\device + + + SDK\component\soc\realtek\8195a\cmsis\device + + + SDK\component\soc\realtek\8195a\cmsis\device + + + SDK\component\soc\realtek\8195a\cmsis\device + + + SDK\component\soc\realtek\8195a\cmsis\device + + + SDK\component\soc\realtek\8195a\cmsis\device + + + SDK\component\soc\realtek\8195a\cmsis\device + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\include + + + SDK\component\common\drivers\wlan\realtek\src\osdep\freertos + + + SDK\component\common\drivers\wlan\realtek\src\osdep\freertos + + + SDK\component\common\drivers\wlan\realtek\src\osdep\freertos + + + SDK\component\common\drivers\wlan\realtek\src\osdep\freertos + + + SDK\component\common\drivers\wlan\realtek\src\osdep\freertos + + + SDK\component\common\drivers\wlan\realtek\src\osdep + + + SDK\component\common\drivers\wlan\realtek\src\osdep + + + SDK\component\common\drivers\wlan\realtek\src\osdep + + + SDK\component\common\drivers\wlan\realtek\src\osdep + + + SDK\component\common\drivers\wlan\realtek\src\osdep + + + SDK\component\common\drivers\wlan\realtek\src\osdep + + + SDK\component\soc\realtek\8195a\misc\rtl_std_lib\include + + + SDK\component\soc\realtek\8195a\misc\rtl_std_lib\include + + + SDK\component\soc\realtek\8195a\misc\rtl_std_lib\include + + + SDK\component\soc\realtek\8195a\misc\rtl_std_lib\include + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\common\mbed\hal_ext + + + SDK\component\os\freertos + + + SDK\component\os\os_dep\include + + + SDK\component\os\os_dep\include + + + SDK\component\os\os_dep\include + + + SDK\component\os\os_dep\include + + + SDK\component\soc\realtek\8195a\misc\os + + + SDK\component\soc\realtek\8195a\misc\os + + + SDK\component\soc\realtek\8195a\misc\os + + + SDK\component\soc\realtek\8195a\misc\os + + + SDK\component\soc\realtek\8195a\misc\os + + + SDK\component\common\api\wifi + + + SDK\component\common\api\wifi + + + SDK\component\common\api\wifi + + + SDK\component\common\api\wifi + + + SDK\component\common\api\wifi + + + SDK\component\common\api\wifi\rtw_wowlan + + + SDK\component\common\api + + + SDK\component\common\api + + + SDK\component\common\api + + + SDK\component\common\api + + + SDK\component\common\drivers\wlan\realtek\src\hci\lxbus + + + SDK\component\common\drivers\wlan\realtek\src\hci + + + SDK\component\common\drivers\wlan\realtek\src\hci + + + SDK\component\common\drivers\wlan\realtek\src\hci\gspi + + + SDK\component\common\drivers\wlan\realtek\src\hci\sdio + + + SDK\component\soc\realtek\8195a\misc\driver + + + SDK\component\soc\realtek\8195a\misc\driver + + + SDK\component\common\api\wifi\rtw_wpa_supplicant\src\utils\rom + + + SDK\component\common\api\wifi\rtw_wpa_supplicant\src\utils + + + SDK\component\common\api\wifi\rtw_wpa_supplicant\src\wps + + + SDK\component\soc\realtek\common\bsp + + + SDK\component\soc\realtek\common\bsp + + + SDK\component\common\drivers\wlan\realtek\include\byteorder + + + SDK\component\common\drivers\wlan\realtek\include\byteorder + + + SDK\component\common\drivers\wlan\realtek\include\byteorder + + + SDK\component\common\network\lwip\src\include\ipv4\lwip + + + SDK\component\common\network\lwip\src\include\ipv4\lwip + + + SDK\component\common\network\lwip\src\include\ipv4\lwip + + + SDK\component\common\network\lwip\src\include\ipv4\lwip + + + SDK\component\common\network\lwip\src\include\ipv4\lwip + + + SDK\component\common\network\lwip\src\include\ipv4\lwip + + + SDK\component\common\network\lwip\src\include\ipv4\lwip + + + SDK\component\common\network\lwip\src\include\ipv4\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\lwip + + + SDK\component\common\network\lwip\src\include\netif + + + SDK\component\common\network\lwip\src\include\netif + + + SDK\component\common\network\lwip\src\include\netif + + + SDK\component\common\network\lwip\src\include\netif + + + SDK\component\common\network\lwip\src\include\posix + + + SDK\component\common\network\lwip\src\include\posix\sys + + + SDK\component\common\network\lwip\port\realtek\freertos + + + SDK\component\common\network\lwip\port\realtek\freertos + + + Project\WS2812 + + + Project\WS2812 + + + Project\WS2812 + + + + + Project + + + Project + + + Project\webfs + + + Project\tcpsrv + + + Project\web + + + Project\web + + + Project\web + + + Project\web + + + Project\web + + + Project\web + + + Project\web + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\fwlib\rtl8195a + + + SDK\component\soc\realtek\8195a\cmsis\device + + + SDK\component\soc\realtek\8195a\cmsis\device + + + SDK\component\soc\realtek\8195a\cmsis\device + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\mbed\targets\hal\rtl8195a + + + SDK\component\common\drivers\wlan\realtek\src\osdep + + + SDK\component\os\freertos + + + SDK\component\os\os_dep + + + SDK\component\os\os_dep + + + SDK\component\os\os_dep + + + SDK\component\soc\realtek\8195a\misc\os + + + SDK\component\soc\realtek\8195a\misc\os + + + SDK\component\soc\realtek\8195a\misc\os + + + SDK\component\common\api\wifi + + + SDK\component\common\api\wifi + + + SDK\component\common\api\wifi + + + SDK\component\common\api\wifi + + + SDK\component\common\api\wifi + + + SDK\component\common\api\wifi\rtw_wowlan + + + SDK\component\common\api\wifi\rtw_wpa_supplicant\wpa_supplicant + + + SDK\component\common\api\wifi\rtw_wpa_supplicant\wpa_supplicant + + + SDK\component\common\api\wifi\rtw_wpa_supplicant\wpa_supplicant + + + SDK\component\common\api + + + SDK\component\common\api + + + SDK\component\common\api + + + SDK\component\common\api + + + SDK\component\common\api + + + SDK\component\common\drivers\wlan\realtek\src\hci\gspi + + + SDK\component\common\drivers\wlan\realtek\src\hci\gspi + + + SDK\component\common\drivers\wlan\realtek\src\hci\gspi + + + SDK\component\common\drivers\wlan\realtek\src\hci\sdio + + + SDK\component\common\drivers\wlan\realtek\src\hci\sdio + + + SDK\component\common\drivers\wlan\realtek\src\hci\sdio + + + SDK\component\soc\realtek\8195a\misc\driver + + + SDK\component\soc\realtek\8195a\misc\driver + + + SDK\component\soc\realtek\8195a\misc\driver + + + SDK\component\soc\realtek\8195a\misc\driver + + + SDK\component\soc\realtek\8195a\misc\driver + + + SDK\component\soc\realtek\8195a\fwlib\ram_lib + + + SDK\component\soc\realtek\8195a\fwlib\ram_lib + + + SDK\component\soc\realtek\8195a\fwlib\ram_lib + + + SDK\component\soc\realtek\8195a\fwlib\ram_lib + + + SDK\component\soc\realtek\8195a\fwlib\ram_lib + + + SDK\component\soc\realtek\8195a\fwlib\ram_lib + + + SDK\component\soc\realtek\8195a\fwlib\ram_lib + + + SDK\component\soc\realtek\8195a\fwlib\ram_lib + + + SDK\component\soc\realtek\8195a\fwlib\ram_lib + + + SDK\component\soc\realtek\8195a\fwlib\ram_lib + + + SDK\component\common\api\wifi\rtw_wpa_supplicant\src\utils + + + SDK\component\soc\realtek\8195a\misc\rtl_std_lib\lib_rtlstd + + + SDK\component\soc\realtek\8195a\misc\rtl_std_lib\lib_rtlstd + + + SDK\component\soc\realtek\8195a\misc\rtl_std_lib\lib_rtlstd + + + SDK\component\soc\realtek\8195a\misc\rtl_std_lib\lib_rtlstd + + + SDK\component\soc\realtek\8195a\misc\rtl_std_lib\lib_rtlstd + + + SDK\component\soc\realtek\8195a\misc\rtl_std_lib\lib_rtlstd + + + SDK\component\common\network\lwip\src\api + + + SDK\component\common\network\lwip\src\api + + + SDK\component\common\network\lwip\src\api + + + SDK\component\common\network\lwip\src\api + + + SDK\component\common\network\lwip\src\api + + + SDK\component\common\network\lwip\src\api + + + SDK\component\common\network\lwip\src\api + + + SDK\component\common\network\lwip\src\api + + + SDK\component\common\network\lwip\src\netif + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core + + + SDK\component\common\network\lwip\src\core\snmp + + + SDK\component\common\network\lwip\src\core\snmp + + + SDK\component\common\network\lwip\src\core\snmp + + + SDK\component\common\network\lwip\src\core\snmp + + + SDK\component\common\network\lwip\src\core\snmp + + + SDK\component\common\network\lwip\src\core\snmp + + + SDK\component\common\network\lwip\src\core\ipv4 + + + SDK\component\common\network\lwip\src\core\ipv4 + + + SDK\component\common\network\lwip\src\core\ipv4 + + + SDK\component\common\network\lwip\src\core\ipv4 + + + SDK\component\common\network\lwip\src\core\ipv4 + + + SDK\component\common\network\lwip\src\core\ipv4 + + + SDK\component\common\network\lwip\src\core\ipv4 + + + SDK\component\common\network\lwip\src\core\ipv4 + + + SDK\component\common\network\lwip\port\realtek\freertos + + + SDK\component\common\network\lwip\port\realtek\freertos + + + Project\WS2812 + + + Project\WS2812 + + + Project\WS2812 + + + \ No newline at end of file diff --git a/Firmware/RTLGDB/RTLGDB.vcxproj.user b/Firmware/Firmware.vcxproj.user similarity index 100% rename from Firmware/RTLGDB/RTLGDB.vcxproj.user rename to Firmware/Firmware.vcxproj.user diff --git a/Firmware/RTLGDB/Project/FreeRTOSConfig.h b/Firmware/Project/FreeRTOSConfig.h similarity index 100% rename from Firmware/RTLGDB/Project/FreeRTOSConfig.h rename to Firmware/Project/FreeRTOSConfig.h diff --git a/Firmware/RTLGDB/Project/WS2812/ledeffectsserver.c b/Firmware/Project/WS2812/ledeffectsserver.c similarity index 100% rename from Firmware/RTLGDB/Project/WS2812/ledeffectsserver.c rename to Firmware/Project/WS2812/ledeffectsserver.c diff --git a/Firmware/RTLGDB/Project/WS2812/ledeffectsserver.h b/Firmware/Project/WS2812/ledeffectsserver.h similarity index 100% rename from Firmware/RTLGDB/Project/WS2812/ledeffectsserver.h rename to Firmware/Project/WS2812/ledeffectsserver.h diff --git a/Firmware/RTLGDB/Project/WS2812/ledfilters.c b/Firmware/Project/WS2812/ledfilters.c similarity index 100% rename from Firmware/RTLGDB/Project/WS2812/ledfilters.c rename to Firmware/Project/WS2812/ledfilters.c diff --git a/Firmware/RTLGDB/Project/WS2812/ledfilters.h b/Firmware/Project/WS2812/ledfilters.h similarity index 100% rename from Firmware/RTLGDB/Project/WS2812/ledfilters.h rename to Firmware/Project/WS2812/ledfilters.h diff --git a/Firmware/RTLGDB/Project/WS2812/ws2812.c b/Firmware/Project/WS2812/ws2812.c similarity index 100% rename from Firmware/RTLGDB/Project/WS2812/ws2812.c rename to Firmware/Project/WS2812/ws2812.c diff --git a/Firmware/RTLGDB/Project/WS2812/ws2812.h b/Firmware/Project/WS2812/ws2812.h similarity index 100% rename from Firmware/RTLGDB/Project/WS2812/ws2812.h rename to Firmware/Project/WS2812/ws2812.h diff --git a/Firmware/RTLGDB/Project/build_info.h b/Firmware/Project/build_info.h similarity index 51% rename from Firmware/RTLGDB/Project/build_info.h rename to Firmware/Project/build_info.h index b6db547..e2bfd76 100644 --- a/Firmware/RTLGDB/Project/build_info.h +++ b/Firmware/Project/build_info.h @@ -1,6 +1,6 @@ -#define UTS_VERSION "2018/01/06-01:09:40" -#define RTL8195AFW_COMPILE_TIME "2018/01/06-01:09:41" -#define RTL8195AFW_COMPILE_DATE "20180106" +#define UTS_VERSION "2018/01/29-16:33:25" +#define RTL8195AFW_COMPILE_TIME "2018/01/29-16:33:26" +#define RTL8195AFW_COMPILE_DATE "20180129" #define RTL8195AFW_COMPILE_BY "Andrew" #define RTL8195AFW_COMPILE_HOST "" #define RTL8195AFW_COMPILE_DOMAIN diff --git a/Firmware/RTLGDB/Project/feep_config.h b/Firmware/Project/feep_config.h similarity index 100% rename from Firmware/RTLGDB/Project/feep_config.h rename to Firmware/Project/feep_config.h diff --git a/Firmware/RTLGDB/Project/lwipopts.h b/Firmware/Project/lwipopts.h similarity index 100% rename from Firmware/RTLGDB/Project/lwipopts.h rename to Firmware/Project/lwipopts.h diff --git a/Firmware/RTLGDB/Project/macro_common.h b/Firmware/Project/macro_common.h similarity index 100% rename from Firmware/RTLGDB/Project/macro_common.h rename to Firmware/Project/macro_common.h diff --git a/Firmware/RTLGDB/Project/main.c b/Firmware/Project/main.c similarity index 100% rename from Firmware/RTLGDB/Project/main.c rename to Firmware/Project/main.c diff --git a/Firmware/RTLGDB/Project/main.h b/Firmware/Project/main.h similarity index 100% rename from Firmware/RTLGDB/Project/main.h rename to Firmware/Project/main.h diff --git a/Firmware/RTLGDB/Project/platform_autoconf.h b/Firmware/Project/platform_autoconf.h similarity index 100% rename from Firmware/RTLGDB/Project/platform_autoconf.h rename to Firmware/Project/platform_autoconf.h diff --git a/Firmware/RTLGDB/Project/platform_opts.h b/Firmware/Project/platform_opts.h similarity index 100% rename from Firmware/RTLGDB/Project/platform_opts.h rename to Firmware/Project/platform_opts.h diff --git a/Firmware/RTLGDB/Project/rtl8195a/c_types.h b/Firmware/Project/rtl8195a/c_types.h similarity index 100% rename from Firmware/RTLGDB/Project/rtl8195a/c_types.h rename to Firmware/Project/rtl8195a/c_types.h diff --git a/Firmware/RTLGDB/Project/rtl8195a/os.h b/Firmware/Project/rtl8195a/os.h similarity index 100% rename from Firmware/RTLGDB/Project/rtl8195a/os.h rename to Firmware/Project/rtl8195a/os.h diff --git a/Firmware/RTLGDB/Project/rtl8195a/queue.h b/Firmware/Project/rtl8195a/queue.h similarity index 100% rename from Firmware/RTLGDB/Project/rtl8195a/queue.h rename to Firmware/Project/rtl8195a/queue.h diff --git a/Firmware/RTLGDB/Project/rtl8195a/rom_wps_os.h b/Firmware/Project/rtl8195a/rom_wps_os.h similarity index 100% rename from Firmware/RTLGDB/Project/rtl8195a/rom_wps_os.h rename to Firmware/Project/rtl8195a/rom_wps_os.h diff --git a/Firmware/RTLGDB/Project/rtl8195a/rtl_common.h b/Firmware/Project/rtl8195a/rtl_common.h similarity index 100% rename from Firmware/RTLGDB/Project/rtl8195a/rtl_common.h rename to Firmware/Project/rtl8195a/rtl_common.h diff --git a/Firmware/RTLGDB/Project/rtl8195a/rtl_libc.h b/Firmware/Project/rtl8195a/rtl_libc.h similarity index 100% rename from Firmware/RTLGDB/Project/rtl8195a/rtl_libc.h rename to Firmware/Project/rtl8195a/rtl_libc.h diff --git a/Firmware/RTLGDB/Project/sys_cfg.h b/Firmware/Project/sys_cfg.h similarity index 100% rename from Firmware/RTLGDB/Project/sys_cfg.h rename to Firmware/Project/sys_cfg.h diff --git a/Firmware/RTLGDB/Project/tcpsrv/tcp_srv_conn.c b/Firmware/Project/tcpsrv/tcp_srv_conn.c similarity index 100% rename from Firmware/RTLGDB/Project/tcpsrv/tcp_srv_conn.c rename to Firmware/Project/tcpsrv/tcp_srv_conn.c diff --git a/Firmware/RTLGDB/Project/tcpsrv/tcp_srv_conn.h b/Firmware/Project/tcpsrv/tcp_srv_conn.h similarity index 100% rename from Firmware/RTLGDB/Project/tcpsrv/tcp_srv_conn.h rename to Firmware/Project/tcpsrv/tcp_srv_conn.h diff --git a/Firmware/RTLGDB/Project/user_config.h b/Firmware/Project/user_config.h similarity index 100% rename from Firmware/RTLGDB/Project/user_config.h rename to Firmware/Project/user_config.h diff --git a/Firmware/RTLGDB/Project/user_start.c b/Firmware/Project/user_start.c similarity index 100% rename from Firmware/RTLGDB/Project/user_start.c rename to Firmware/Project/user_start.c diff --git a/Firmware/RTLGDB/Project/web/web_auth.c b/Firmware/Project/web/web_auth.c similarity index 100% rename from Firmware/RTLGDB/Project/web/web_auth.c rename to Firmware/Project/web/web_auth.c diff --git a/Firmware/RTLGDB/Project/web/web_int_callbacks.c b/Firmware/Project/web/web_int_callbacks.c similarity index 100% rename from Firmware/RTLGDB/Project/web/web_int_callbacks.c rename to Firmware/Project/web/web_int_callbacks.c diff --git a/Firmware/RTLGDB/Project/web/web_int_vars.c b/Firmware/Project/web/web_int_vars.c similarity index 100% rename from Firmware/RTLGDB/Project/web/web_int_vars.c rename to Firmware/Project/web/web_int_vars.c diff --git a/Firmware/RTLGDB/Project/web/web_srv.c b/Firmware/Project/web/web_srv.c similarity index 100% rename from Firmware/RTLGDB/Project/web/web_srv.c rename to Firmware/Project/web/web_srv.c diff --git a/Firmware/RTLGDB/Project/web/web_srv.h b/Firmware/Project/web/web_srv.h similarity index 100% rename from Firmware/RTLGDB/Project/web/web_srv.h rename to Firmware/Project/web/web_srv.h diff --git a/Firmware/RTLGDB/Project/web/web_srv_int.h b/Firmware/Project/web/web_srv_int.h similarity index 100% rename from Firmware/RTLGDB/Project/web/web_srv_int.h rename to Firmware/Project/web/web_srv_int.h diff --git a/Firmware/RTLGDB/Project/web/web_utils.c b/Firmware/Project/web/web_utils.c similarity index 100% rename from Firmware/RTLGDB/Project/web/web_utils.c rename to Firmware/Project/web/web_utils.c diff --git a/Firmware/RTLGDB/Project/web/web_utils.h b/Firmware/Project/web/web_utils.h similarity index 100% rename from Firmware/RTLGDB/Project/web/web_utils.h rename to Firmware/Project/web/web_utils.h diff --git a/Firmware/RTLGDB/Project/web/web_websocket.c b/Firmware/Project/web/web_websocket.c similarity index 100% rename from Firmware/RTLGDB/Project/web/web_websocket.c rename to Firmware/Project/web/web_websocket.c diff --git a/Firmware/RTLGDB/Project/web/web_websocket.h b/Firmware/Project/web/web_websocket.h similarity index 100% rename from Firmware/RTLGDB/Project/web/web_websocket.h rename to Firmware/Project/web/web_websocket.h diff --git a/Firmware/RTLGDB/Project/web/websock.c b/Firmware/Project/web/websock.c similarity index 100% rename from Firmware/RTLGDB/Project/web/websock.c rename to Firmware/Project/web/websock.c diff --git a/Firmware/RTLGDB/Project/web/websock.h b/Firmware/Project/web/websock.h similarity index 100% rename from Firmware/RTLGDB/Project/web/websock.h rename to Firmware/Project/web/websock.h diff --git a/Firmware/RTLGDB/Project/webfs/webfs.c b/Firmware/Project/webfs/webfs.c similarity index 100% rename from Firmware/RTLGDB/Project/webfs/webfs.c rename to Firmware/Project/webfs/webfs.c diff --git a/Firmware/RTLGDB/Project/webfs/webfs.h b/Firmware/Project/webfs/webfs.h similarity index 100% rename from Firmware/RTLGDB/Project/webfs/webfs.h rename to Firmware/Project/webfs/webfs.h diff --git a/Firmware/RTLGDB/Project/wifi_user_set.h b/Firmware/Project/wifi_user_set.h similarity index 100% rename from Firmware/RTLGDB/Project/wifi_user_set.h rename to Firmware/Project/wifi_user_set.h diff --git a/Firmware/RTLGDB.VC.db b/Firmware/RTLGDB.VC.db deleted file mode 100644 index 2a2a76b..0000000 Binary files a/Firmware/RTLGDB.VC.db and /dev/null differ diff --git a/Firmware/RTLGDB/Debug/bin/WEBFiles.bin b/Firmware/RTLGDB/Debug/bin/WEBFiles.bin deleted file mode 100644 index 9b1fd21..0000000 Binary files a/Firmware/RTLGDB/Debug/bin/WEBFiles.bin and /dev/null differ diff --git a/Firmware/RTLGDB/Debug/bin/web_vars.txt b/Firmware/RTLGDB/Debug/bin/web_vars.txt deleted file mode 100644 index 43eee5c..0000000 --- a/Firmware/RTLGDB/Debug/bin/web_vars.txt +++ /dev/null @@ -1,35 +0,0 @@ -ws_striplen -ws_striplen -ws_filt_const_hue -ws_filt_const_sat -ws_filt_const_value -ws_filt_rbw_enbl -ws_filt_rbw_huesteps -ws_filt_rbw_cyclesteps -ws_filt_fd_enbl -ws_filt_fd_cyclesteps -ws_filt_fd_min -ws_filt_fd_max -ws_filt_fd_chance -ws_filt_wave_enbl -ws_filt_wave_step -ws_filt_wave_wavesteps -ws_filt_const_enbl -ws_isenable -wifi_st_ssid -wifi_st_psw -wifi_st_ip -wifi_ap_ssid -wifi_ap_psw -wifi_ap_ip -wifi_mode -wifi_bgn -wifi_txpow -wifi_st_ssid -wifi_st_psw -wifi_st_auth -wifi_st_ip -wifi_ap_ssid -wifi_ap_psw -wifi_ap_auth -wifi_ap_ip diff --git a/Firmware/RTLGDB/Debug/obj/Debug.asm b/Firmware/RTLGDB/Debug/obj/Debug.asm deleted file mode 100644 index 6bcafcb..0000000 --- a/Firmware/RTLGDB/Debug/obj/Debug.asm +++ /dev/null @@ -1,91695 +0,0 @@ - -Debug/obj/Debug.axf: file format elf32-littlearm - - -Disassembly of section .ram_image1.text: - -10000bc8 <__ram_image1_text_start__>: -10000bc8: 10002ca5 .word 0x10002ca5 -10000bcc: 10002c9f .word 0x10002c9f -10000bd0: 10002c99 .word 0x10002c99 -10000bd4: 10002c93 .word 0x10002c93 -10000bd8: 10002c8d .word 0x10002c8d - -10000bdc : -10000bdc: 88167923 ffffffff #y...... - -10000be4 : -10000be4: 075bcd15 ..[. - -10000be8 : - ... - -10001be8 : -10001be8: 10001c4c 10001c30 10001bfc 00002710 L...0........'.. -10001bf8: 00000000 .... - -10001bfc : -10001bfc: 0000ea60 007733a0 00000002 00003a98 `....3w......:.. -10001c0c: 00003a98 0000a410 00000002 00004e20 .:.......... N.. -10001c1c: 00000000 00000002 00000000 00000001 ................ -10001c2c: 0000ea60 `... - -10001c30 : - ... -10001c38: 00000003 00000000 00000000 00000000 ................ -10001c48: 00000000 .... - -10001c4c : -10001c4c: 00000008 00000000 00000000 00000000 ................ -10001c5c: 00000000 .... - -10001c60 <_rtl_impure_ptr>: -10001c60: 10001c68 00000000 h....... - -10001c68 : -10001c68: 00000000 10001f54 10001fbc 10002024 ....T.......$ .. - ... -10001c9c: 000437dc 00000000 00000000 00000000 .7.............. - ... -10001d10: 00000001 00000000 abcd330e e66d1234 .........3..4.m. -10001d20: 0005deec 0000000b 00000000 00000000 ................ - ... - -10002090 <_rom_unc_data>: - ... - -100020b4 <_sdr_rnd2_y>: -100020b4: 000587c4 .... - -100020b8 <_sdr_rnd2_z>: -100020b8: 1f123bb5 .;.. - -100020bc <_sdr_rnd2_c>: -100020bc: 0074cbb1 ..t. - -100020c0 : - ... - -100021ec : - ... -1000227c: 3d3d3d0d 45203d3d 7265746e 414c4620 .===== Enter FLA -1000228c: 422d4853 20746f6f 3d3d3d3d 3d0d000a SH-Boot ====...= -1000229c: 3d3d3d3d 746e4520 53207265 2d4d4152 ==== Enter SRAM- -100022ac: 746f6f42 20642520 3d3d3d3d 5043000a Boot %d ====..CP -100022bc: 4c432055 25203a4b 7a482064 4f53202c U CLK: %d Hz, SO -100022cc: 55462043 4520434e 25203a4e 47000a70 C FUNC EN: %p..G -100022dc: 43207465 20706968 46204449 656c6961 et Chip ID Faile -100022ec: 53000d64 20636970 6e696572 25207469 d..Spic reinit % -100022fc: 64253a64 7053000a 49206369 2074696e d:%d..Spic Init -1000230c: 6c696166 53000a21 63205244 62696c61 fail!..SDR calib -1000231c: 69746172 203a6e6f 78323025 3230252d ration: %02x-%02 -1000232c: 57000a78 69746961 6620676e 5320726f x..Waiting for S -1000233c: 4d415244 206f7420 64616f6c 0a2e2e2e DRAM to load.... -1000234c: 52445300 6c204d41 2064616f 000a6b6f .SDRAM load ok.. -1000235c: 656c6553 64657463 616d4920 25206567 Selected Image % -1000236c: 000a2e64 64616f4c 616c4620 73206873 d...Load Flash s -1000237c: 64256765 7830203a 78383025 203e2d20 eg%d: 0x%08x -> -1000238c: 203a7325 30257830 202c7838 657a6973 %s: 0x%08x, size -1000239c: 6425203a 6f4e000a 616d4920 64256567 : %d..No Image%d -100023ac: 72542021 676e6979 616d4920 2e306567 ! Trying Image0. -100023bc: 000a2e2e 49206f4e 6567616d 000a2130 ....No Image0!.. -100023cc: 574b5452 49006e69 6c61766e 49206469 RTKWin.Invalid I -100023dc: 6567616d 67695320 7574616e 0a216572 mage Signature!. -100023ec: 676d4900 67695320 25203a6e 47202c73 .Img Sign: %s, G -100023fc: 2040206f 30257830 0a0d7838 4b4e5500 o @ 0x%08x...UNK -1000240c: 41525300 4354004d 4453004d 004d4152 .SRAM.TCM.SDRAM. -1000241c: 00434f53 53414c46 50430048 4f520055 SOC.FLASH.CPU.RO -1000242c: 0000004d M... - -10002430 : -10002430: 10000000 10070000 1fff0000 20000000 ............... -10002440: 30000000 30200000 40000000 40800000 ...0.. 0...@...@ -10002450: 98000000 a0000000 e0000000 e0010000 ................ -10002460: 00000000 00050000 ........ - -10002468 : -10002468: 10002409 1000240d 10002412 10002416 .$...$...$...$.. -10002478: 1000241c 10002420 10002426 1000242a .$.. $..&$..*$.. - -10002488 : -10002488: 4603 mov r3, r0 -1000248a: f1b0 4f18 cmp.w r0, #2550136832 ; 0x98000000 -1000248e: bf38 it cc -10002490: f100 4318 addcc.w r3, r0, #2550136832 ; 0x98000000 -10002494: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -10002496: f023 0003 bic.w r0, r3, #3 -1000249a: f013 0303 ands.w r3, r3, #3 -1000249e: d02f beq.n 10002500 -100024a0: 1d05 adds r5, r0, #4 -100024a2: 6800 ldr r0, [r0, #0] -100024a4: ac02 add r4, sp, #8 -100024a6: f844 0d04 str.w r0, [r4, #-4]! -100024aa: 1e5e subs r6, r3, #1 -100024ac: 4426 add r6, r4 -100024ae: 4614 mov r4, r2 -100024b0: 1a5b subs r3, r3, r1 -100024b2: b13c cbz r4, 100024c4 -100024b4: f816 0f01 ldrb.w r0, [r6, #1]! -100024b8: 3c01 subs r4, #1 -100024ba: f801 0b01 strb.w r0, [r1], #1 -100024be: 18c8 adds r0, r1, r3 -100024c0: 0747 lsls r7, r0, #29 -100024c2: d5f6 bpl.n 100024b2 -100024c4: 460b mov r3, r1 -100024c6: 08a0 lsrs r0, r4, #2 -100024c8: 0087 lsls r7, r0, #2 -100024ca: eb05 0e07 add.w lr, r5, r7 -100024ce: 4575 cmp r5, lr -100024d0: f103 0304 add.w r3, r3, #4 -100024d4: d117 bne.n 10002506 -100024d6: 07a6 lsls r6, r4, #30 -100024d8: eb01 0307 add.w r3, r1, r7 -100024dc: d00d beq.n 100024fa -100024de: 682d ldr r5, [r5, #0] -100024e0: f801 5020 strb.w r5, [r1, r0, lsl #2] -100024e4: 07a0 lsls r0, r4, #30 -100024e6: 9501 str r5, [sp, #4] -100024e8: d507 bpl.n 100024fa -100024ea: f89d 1005 ldrb.w r1, [sp, #5] -100024ee: 7059 strb r1, [r3, #1] -100024f0: 07e1 lsls r1, r4, #31 -100024f2: bf44 itt mi -100024f4: f89d 1006 ldrbmi.w r1, [sp, #6] -100024f8: 7099 strbmi r1, [r3, #2] -100024fa: 4610 mov r0, r2 -100024fc: b003 add sp, #12 -100024fe: bdf0 pop {r4, r5, r6, r7, pc} -10002500: 4614 mov r4, r2 -10002502: 4605 mov r5, r0 -10002504: e7de b.n 100024c4 -10002506: f855 6b04 ldr.w r6, [r5], #4 -1000250a: f3c6 2c07 ubfx ip, r6, #8, #8 -1000250e: f803 6c04 strb.w r6, [r3, #-4] -10002512: f803 cc03 strb.w ip, [r3, #-3] -10002516: f3c6 4c07 ubfx ip, r6, #16, #8 -1000251a: 0e36 lsrs r6, r6, #24 -1000251c: f803 cc02 strb.w ip, [r3, #-2] -10002520: f803 6c01 strb.w r6, [r3, #-1] -10002524: e7d3 b.n 100024ce - ... - -10002528 : -10002528: 2900 cmp r1, #0 -1000252a: b510 push {r4, lr} -1000252c: dd0f ble.n 1000254e -1000252e: 2300 movs r3, #0 -10002530: 4a08 ldr r2, [pc, #32] ; (10002554 ) -10002532: 4401 add r1, r0 -10002534: f852 4c08 ldr.w r4, [r2, #-8] -10002538: 3301 adds r3, #1 -1000253a: 4284 cmp r4, r0 -1000253c: d803 bhi.n 10002546 -1000253e: f852 4c04 ldr.w r4, [r2, #-4] -10002542: 42a1 cmp r1, r4 -10002544: d904 bls.n 10002550 -10002546: 2b08 cmp r3, #8 -10002548: f102 0208 add.w r2, r2, #8 -1000254c: d1f2 bne.n 10002534 -1000254e: 2300 movs r3, #0 -10002550: 4618 mov r0, r3 -10002552: bd10 pop {r4, pc} -10002554: 10002438 .word 0x10002438 - -10002558 : -10002558: 4b06 ldr r3, [pc, #24] ; (10002574 ) -1000255a: 213f movs r1, #63 ; 0x3f -1000255c: 6818 ldr r0, [r3, #0] -1000255e: 2305 movs r3, #5 -10002560: 7083 strb r3, [r0, #2] -10002562: 2301 movs r3, #1 -10002564: 7183 strb r3, [r0, #6] -10002566: 6882 ldr r2, [r0, #8] -10002568: 7051 strb r1, [r2, #1] -1000256a: 6882 ldr r2, [r0, #8] -1000256c: 7013 strb r3, [r2, #0] -1000256e: 7103 strb r3, [r0, #4] -10002570: 4b01 ldr r3, [pc, #4] ; (10002578 ) -10002572: 4718 bx r3 -10002574: 10000384 .word 0x10000384 -10002578: 0000ed49 .word 0x0000ed49 - -1000257c : -1000257c: 2100 movs r1, #0 -1000257e: 4602 mov r2, r0 -10002580: 4b0c ldr r3, [pc, #48] ; (100025b4 ) -10002582: b530 push {r4, r5, lr} -10002584: 33d8 adds r3, #216 ; 0xd8 -10002586: f843 1cd8 str.w r1, [r3, #-216] -1000258a: f100 010f add.w r1, r0, #15 -1000258e: f812 4b01 ldrb.w r4, [r2], #1 -10002592: 1d1d adds r5, r3, #4 -10002594: 428a cmp r2, r1 -10002596: 601c str r4, [r3, #0] -10002598: d309 bcc.n 100025ae -1000259a: 6902 ldr r2, [r0, #16] -1000259c: 605a str r2, [r3, #4] -1000259e: 8a82 ldrh r2, [r0, #20] -100025a0: 609a str r2, [r3, #8] -100025a2: 7bc2 ldrb r2, [r0, #15] -100025a4: 60da str r2, [r3, #12] -100025a6: 2201 movs r2, #1 -100025a8: 4b03 ldr r3, [pc, #12] ; (100025b8 ) -100025aa: 601a str r2, [r3, #0] -100025ac: bd30 pop {r4, r5, pc} -100025ae: 462b mov r3, r5 -100025b0: e7ed b.n 1000258e -100025b2: bf00 nop -100025b4: 40006008 .word 0x40006008 -100025b8: 40006010 .word 0x40006010 - -100025bc : -100025bc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100025c0: 4604 mov r4, r0 -100025c2: b09b sub sp, #108 ; 0x6c -100025c4: 4fa8 ldr r7, [pc, #672] ; (10002868 ) -100025c6: b120 cbz r0, 100025d2 -100025c8: 48a8 ldr r0, [pc, #672] ; (1000286c ) -100025ca: 4aa9 ldr r2, [pc, #676] ; (10002870 ) -100025cc: 2100 movs r1, #0 -100025ce: 1a12 subs r2, r2, r0 -100025d0: 47b8 blx r7 -100025d2: b671 cpsid f -100025d4: 4ba7 ldr r3, [pc, #668] ; (10002874 ) -100025d6: 2100 movs r1, #0 -100025d8: 681a ldr r2, [r3, #0] -100025da: 20d8 movs r0, #216 ; 0xd8 -100025dc: f042 0240 orr.w r2, r2, #64 ; 0x40 -100025e0: 601a str r2, [r3, #0] -100025e2: 681a ldr r2, [r3, #0] -100025e4: 4ea4 ldr r6, [pc, #656] ; (10002878 ) -100025e6: f042 0280 orr.w r2, r2, #128 ; 0x80 -100025ea: 601a str r2, [r3, #0] -100025ec: 2201 movs r2, #1 -100025ee: 47b0 blx r6 -100025f0: f04f 33ff mov.w r3, #4294967295 -100025f4: 4aa1 ldr r2, [pc, #644] ; (1000287c ) -100025f6: 4da2 ldr r5, [pc, #648] ; (10002880 ) -100025f8: 6013 str r3, [r2, #0] -100025fa: 4aa2 ldr r2, [pc, #648] ; (10002884 ) -100025fc: 602b str r3, [r5, #0] -100025fe: 6013 str r3, [r2, #0] -10002600: 4aa1 ldr r2, [pc, #644] ; (10002888 ) -10002602: f8df 8308 ldr.w r8, [pc, #776] ; 1000290c -10002606: 6013 str r3, [r2, #0] -10002608: 4aa0 ldr r2, [pc, #640] ; (1000288c ) -1000260a: 2100 movs r1, #0 -1000260c: 6813 ldr r3, [r2, #0] -1000260e: 4640 mov r0, r8 -10002610: f423 0370 bic.w r3, r3, #15728640 ; 0xf00000 -10002614: f443 03c0 orr.w r3, r3, #6291456 ; 0x600000 -10002618: 6013 str r3, [r2, #0] -1000261a: 6c53 ldr r3, [r2, #68] ; 0x44 -1000261c: 46aa mov sl, r5 -1000261e: f023 0318 bic.w r3, r3, #24 -10002622: f043 0308 orr.w r3, r3, #8 -10002626: 6453 str r3, [r2, #68] ; 0x44 -10002628: f8d2 3220 ldr.w r3, [r2, #544] ; 0x220 -1000262c: f023 0301 bic.w r3, r3, #1 -10002630: f8c2 3220 str.w r3, [r2, #544] ; 0x220 -10002634: f8d2 31f4 ldr.w r3, [r2, #500] ; 0x1f4 -10002638: f023 0303 bic.w r3, r3, #3 -1000263c: f8c2 31f4 str.w r3, [r2, #500] ; 0x1f4 -10002640: f8d2 3280 ldr.w r3, [r2, #640] ; 0x280 -10002644: f023 0301 bic.w r3, r3, #1 -10002648: f8c2 3280 str.w r3, [r2, #640] ; 0x280 -1000264c: f44f 7296 mov.w r2, #300 ; 0x12c -10002650: 47b8 blx r7 -10002652: 4b8f ldr r3, [pc, #572] ; (10002890 ) -10002654: f8c3 8000 str.w r8, [r3] -10002658: 4b8e ldr r3, [pc, #568] ; (10002894 ) -1000265a: 681b ldr r3, [r3, #0] -1000265c: f413 5f80 tst.w r3, #4096 ; 0x1000 -10002660: d007 beq.n 10002672 -10002662: f244 0301 movw r3, #16385 ; 0x4001 -10002666: 4a8c ldr r2, [pc, #560] ; (10002898 ) -10002668: 7811 ldrb r1, [r2, #0] -1000266a: 0649 lsls r1, r1, #25 -1000266c: d401 bmi.n 10002672 -1000266e: 3b01 subs r3, #1 -10002670: d1fa bne.n 10002668 -10002672: 4a8a ldr r2, [pc, #552] ; (1000289c ) -10002674: 2001 movs r0, #1 -10002676: 6813 ldr r3, [r2, #0] -10002678: f423 3300 bic.w r3, r3, #131072 ; 0x20000 -1000267c: 6013 str r3, [r2, #0] -1000267e: 4b88 ldr r3, [pc, #544] ; (100028a0 ) -10002680: 4798 blx r3 -10002682: 4888 ldr r0, [pc, #544] ; (100028a4 ) -10002684: 4b88 ldr r3, [pc, #544] ; (100028a8 ) -10002686: 4798 blx r3 -10002688: 4b88 ldr r3, [pc, #544] ; (100028ac ) -1000268a: 4798 blx r3 -1000268c: 4b88 ldr r3, [pc, #544] ; (100028b0 ) -1000268e: 4798 blx r3 -10002690: b661 cpsie f -10002692: f8da 3000 ldr.w r3, [sl] -10002696: 2c00 cmp r4, #0 -10002698: f040 8198 bne.w 100029cc -1000269c: 005d lsls r5, r3, #1 -1000269e: d502 bpl.n 100026a6 -100026a0: 4884 ldr r0, [pc, #528] ; (100028b4 ) -100026a2: 4b85 ldr r3, [pc, #532] ; (100028b8 ) -100026a4: 4798 blx r3 -100026a6: f8da 3000 ldr.w r3, [sl] -100026aa: 0059 lsls r1, r3, #1 -100026ac: d507 bpl.n 100026be -100026ae: 4b83 ldr r3, [pc, #524] ; (100028bc ) -100026b0: 4798 blx r3 -100026b2: 4b78 ldr r3, [pc, #480] ; (10002894 ) -100026b4: 4601 mov r1, r0 -100026b6: 681a ldr r2, [r3, #0] -100026b8: 4881 ldr r0, [pc, #516] ; (100028c0 ) -100026ba: 4b7f ldr r3, [pc, #508] ; (100028b8 ) -100026bc: 4798 blx r3 -100026be: 23fc movs r3, #252 ; 0xfc -100026c0: f10d 0b68 add.w fp, sp, #104 ; 0x68 -100026c4: f80b 3d48 strb.w r3, [fp, #-72]! -100026c8: 4b7e ldr r3, [pc, #504] ; (100028c4 ) -100026ca: 465a mov r2, fp -100026cc: 6818 ldr r0, [r3, #0] -100026ce: 21f8 movs r1, #248 ; 0xf8 -100026d0: 2307 movs r3, #7 -100026d2: 4d7d ldr r5, [pc, #500] ; (100028c8 ) -100026d4: 47a8 blx r5 -100026d6: 2801 cmp r0, #1 -100026d8: d006 beq.n 100026e8 -100026da: f8da 3000 ldr.w r3, [sl] -100026de: 005a lsls r2, r3, #1 -100026e0: d502 bpl.n 100026e8 -100026e2: 487a ldr r0, [pc, #488] ; (100028cc ) -100026e4: 4b74 ldr r3, [pc, #464] ; (100028b8 ) -100026e6: 4798 blx r3 -100026e8: f89d 3020 ldrb.w r3, [sp, #32] -100026ec: 2bfd cmp r3, #253 ; 0xfd -100026ee: 4b78 ldr r3, [pc, #480] ; (100028d0 ) -100026f0: f200 8174 bhi.w 100029dc -100026f4: 4977 ldr r1, [pc, #476] ; (100028d4 ) -100026f6: 680a ldr r2, [r1, #0] -100026f8: f022 0210 bic.w r2, r2, #16 -100026fc: 600a str r2, [r1, #0] -100026fe: 681a ldr r2, [r3, #0] -10002700: f022 0202 bic.w r2, r2, #2 -10002704: 601a str r2, [r3, #0] -10002706: 4a63 ldr r2, [pc, #396] ; (10002894 ) -10002708: 6813 ldr r3, [r2, #0] -1000270a: f443 1300 orr.w r3, r3, #2097152 ; 0x200000 -1000270e: 4d72 ldr r5, [pc, #456] ; (100028d8 ) -10002710: 6013 str r3, [r2, #0] -10002712: 2100 movs r1, #0 -10002714: 2290 movs r2, #144 ; 0x90 -10002716: 4628 mov r0, r5 -10002718: 47b8 blx r7 -1000271a: 4b70 ldr r3, [pc, #448] ; (100028dc ) -1000271c: 4f70 ldr r7, [pc, #448] ; (100028e0 ) -1000271e: 681a ldr r2, [r3, #0] -10002720: 2100 movs r1, #0 -10002722: 602a str r2, [r5, #0] -10002724: 699a ldr r2, [r3, #24] -10002726: 20c4 movs r0, #196 ; 0xc4 -10002728: 632a str r2, [r5, #48] ; 0x30 -1000272a: 662a str r2, [r5, #96] ; 0x60 -1000272c: 685a ldr r2, [r3, #4] -1000272e: 60aa str r2, [r5, #8] -10002730: 69da ldr r2, [r3, #28] -10002732: 63aa str r2, [r5, #56] ; 0x38 -10002734: 66aa str r2, [r5, #104] ; 0x68 -10002736: 689a ldr r2, [r3, #8] -10002738: 6a1b ldr r3, [r3, #32] -1000273a: 612a str r2, [r5, #16] -1000273c: 642b str r3, [r5, #64] ; 0x40 -1000273e: 672b str r3, [r5, #112] ; 0x70 -10002740: 4b4c ldr r3, [pc, #304] ; (10002874 ) -10002742: 681a ldr r2, [r3, #0] -10002744: f442 7280 orr.w r2, r2, #256 ; 0x100 -10002748: 601a str r2, [r3, #0] -1000274a: 681a ldr r2, [r3, #0] -1000274c: f442 7200 orr.w r2, r2, #512 ; 0x200 -10002750: 601a str r2, [r3, #0] -10002752: 2201 movs r2, #1 -10002754: 47b0 blx r6 -10002756: 4638 mov r0, r7 -10002758: f7ff ff10 bl 1000257c -1000275c: 4b61 ldr r3, [pc, #388] ; (100028e4 ) -1000275e: 681e ldr r6, [r3, #0] -10002760: f3c6 1602 ubfx r6, r6, #4, #3 -10002764: 3606 adds r6, #6 -10002766: eb05 02c6 add.w r2, r5, r6, lsl #3 -1000276a: 78d3 ldrb r3, [r2, #3] -1000276c: 07db lsls r3, r3, #31 -1000276e: d51e bpl.n 100027ae -10002770: 2300 movs r3, #0 -10002772: 495d ldr r1, [pc, #372] ; (100028e8 ) -10002774: 600b str r3, [r1, #0] -10002776: 78d3 ldrb r3, [r2, #3] -10002778: f3c3 1301 ubfx r3, r3, #4, #2 -1000277c: eb07 0743 add.w r7, r7, r3, lsl #1 -10002780: 8ab8 ldrh r0, [r7, #20] -10002782: 4b5a ldr r3, [pc, #360] ; (100028ec ) -10002784: 7857 ldrb r7, [r2, #1] -10002786: 6018 str r0, [r3, #0] -10002788: 4859 ldr r0, [pc, #356] ; (100028f0 ) -1000278a: 7892 ldrb r2, [r2, #2] -1000278c: 6803 ldr r3, [r0, #0] -1000278e: 0c1b lsrs r3, r3, #16 -10002790: 041b lsls r3, r3, #16 -10002792: 433b orrs r3, r7 -10002794: 6003 str r3, [r0, #0] -10002796: f815 0036 ldrb.w r0, [r5, r6, lsl #3] -1000279a: 4b56 ldr r3, [pc, #344] ; (100028f4 ) -1000279c: 6018 str r0, [r3, #0] -1000279e: 4856 ldr r0, [pc, #344] ; (100028f8 ) -100027a0: 6803 ldr r3, [r0, #0] -100027a2: f023 03ff bic.w r3, r3, #255 ; 0xff -100027a6: 4313 orrs r3, r2 -100027a8: 6003 str r3, [r0, #0] -100027aa: 2301 movs r3, #1 -100027ac: 600b str r3, [r1, #0] -100027ae: 4a49 ldr r2, [pc, #292] ; (100028d4 ) -100027b0: 6813 ldr r3, [r2, #0] -100027b2: f043 0301 orr.w r3, r3, #1 -100027b6: 6013 str r3, [r2, #0] -100027b8: 4b50 ldr r3, [pc, #320] ; (100028fc ) -100027ba: 4798 blx r3 -100027bc: 2800 cmp r0, #0 -100027be: d13a bne.n 10002836 -100027c0: f04f 0801 mov.w r8, #1 -100027c4: 4a4c ldr r2, [pc, #304] ; (100028f8 ) -100027c6: 494b ldr r1, [pc, #300] ; (100028f4 ) -100027c8: 6813 ldr r3, [r2, #0] -100027ca: f023 03ff bic.w r3, r3, #255 ; 0xff -100027ce: f043 0331 orr.w r3, r3, #49 ; 0x31 -100027d2: 6013 str r3, [r2, #0] -100027d4: f502 42ba add.w r2, r2, #23808 ; 0x5d00 -100027d8: 4b45 ldr r3, [pc, #276] ; (100028f0 ) -100027da: 3208 adds r2, #8 -100027dc: 2700 movs r7, #0 -100027de: fa5f f988 uxtb.w r9, r8 -100027e2: b2f8 uxtb r0, r7 -100027e4: 9002 str r0, [sp, #8] -100027e6: 2000 movs r0, #0 -100027e8: 6010 str r0, [r2, #0] -100027ea: 6818 ldr r0, [r3, #0] -100027ec: 0c00 lsrs r0, r0, #16 -100027ee: 0400 lsls r0, r0, #16 -100027f0: 4338 orrs r0, r7 -100027f2: 6018 str r0, [r3, #0] -100027f4: 2001 movs r0, #1 -100027f6: 9305 str r3, [sp, #20] -100027f8: f8c1 8000 str.w r8, [r1] -100027fc: 9104 str r1, [sp, #16] -100027fe: 6010 str r0, [r2, #0] -10002800: 483e ldr r0, [pc, #248] ; (100028fc ) -10002802: 9203 str r2, [sp, #12] -10002804: 4780 blx r0 -10002806: 9a03 ldr r2, [sp, #12] -10002808: 9904 ldr r1, [sp, #16] -1000280a: 9b05 ldr r3, [sp, #20] -1000280c: 2800 cmp r0, #0 -1000280e: f000 8111 beq.w 10002a34 -10002812: 4b29 ldr r3, [pc, #164] ; (100028b8 ) -10002814: 9a02 ldr r2, [sp, #8] -10002816: 4649 mov r1, r9 -10002818: 4839 ldr r0, [pc, #228] ; (10002900 ) -1000281a: 4798 blx r3 -1000281c: f89d 3008 ldrb.w r3, [sp, #8] -10002820: f805 9036 strb.w r9, [r5, r6, lsl #3] -10002824: eb05 05c6 add.w r5, r5, r6, lsl #3 -10002828: 706b strb r3, [r5, #1] -1000282a: 2331 movs r3, #49 ; 0x31 -1000282c: 70ab strb r3, [r5, #2] -1000282e: 78eb ldrb r3, [r5, #3] -10002830: f043 0301 orr.w r3, r3, #1 -10002834: 70eb strb r3, [r5, #3] -10002836: 4b17 ldr r3, [pc, #92] ; (10002894 ) -10002838: 6819 ldr r1, [r3, #0] -1000283a: f411 1100 ands.w r1, r1, #2097152 ; 0x200000 -1000283e: f040 80ae bne.w 1000299e -10002842: f44f 63e0 mov.w r3, #1792 ; 0x700 -10002846: 2001 movs r0, #1 -10002848: 2508 movs r5, #8 -1000284a: 4e2e ldr r6, [pc, #184] ; (10002904 ) -1000284c: 6033 str r3, [r6, #0] -1000284e: 4b2e ldr r3, [pc, #184] ; (10002908 ) -10002850: 6018 str r0, [r3, #0] -10002852: f5a3 7308 sub.w r3, r3, #544 ; 0x220 -10002856: 601d str r5, [r3, #0] -10002858: 2506 movs r5, #6 -1000285a: 6059 str r1, [r3, #4] -1000285c: 6259 str r1, [r3, #36] ; 0x24 -1000285e: 621d str r5, [r3, #32] -10002860: 2522 movs r5, #34 ; 0x22 -10002862: 61dd str r5, [r3, #28] -10002864: e054 b.n 10002910 -10002866: bf00 nop -10002868: 0000f511 .word 0x0000f511 -1000286c: 10000300 .word 0x10000300 -10002870: 10000bc8 .word 0x10000bc8 -10002874: 40000230 .word 0x40000230 -10002878: 00002b39 .word 0x00002b39 -1000287c: 10000300 .word 0x10000300 -10002880: 10000314 .word 0x10000314 -10002884: 10000308 .word 0x10000308 -10002888: 1000030c .word 0x1000030c -1000288c: 40000020 .word 0x40000020 -10002890: 10000354 .word 0x10000354 -10002894: 40000210 .word 0x40000210 -10002898: 40003014 .word 0x40003014 -1000289c: 40000074 .word 0x40000074 -100028a0: 00000341 .word 0x00000341 -100028a4: 1ffffffc .word 0x1ffffffc -100028a8: 00003de5 .word 0x00003de5 -100028ac: 0004467d .word 0x0004467d -100028b0: 00044755 .word 0x00044755 -100028b4: 1000227c .word 0x1000227c -100028b8: 0000f39d .word 0x0000f39d -100028bc: 00000355 .word 0x00000355 -100028c0: 100022ba .word 0x100022ba -100028c4: 400000e8 .word 0x400000e8 -100028c8: 000065f9 .word 0x000065f9 -100028cc: 100022db .word 0x100022db -100028d0: 40000040 .word 0x40000040 -100028d4: 400002c0 .word 0x400002c0 -100028d8: 100021ec .word 0x100021ec -100028dc: 10002cac .word 0x10002cac -100028e0: 10002cf4 .word 0x10002cf4 -100028e4: 40000014 .word 0x40000014 -100028e8: 40006008 .word 0x40006008 -100028ec: 40006120 .word 0x40006120 -100028f0: 4000611c .word 0x4000611c -100028f4: 40006014 .word 0x40006014 -100028f8: 40000300 .word 0x40000300 -100028fc: 00003049 .word 0x00003049 -10002900: 100022ef .word 0x100022ef -10002904: 4000500c .word 0x4000500c -10002908: 40005224 .word 0x40005224 -1000290c: 100020c0 .word 0x100020c0 -10002910: 4d98 ldr r5, [pc, #608] ; (10002b74 ) -10002912: 60dd str r5, [r3, #12] -10002914: f242 6552 movw r5, #9810 ; 0x2652 -10002918: 611d str r5, [r3, #16] -1000291a: 4d97 ldr r5, [pc, #604] ; (10002b78 ) -1000291c: 615d str r5, [r3, #20] -1000291e: 2542 movs r5, #66 ; 0x42 -10002920: 619d str r5, [r3, #24] -10002922: 4d96 ldr r5, [pc, #600] ; (10002b7c ) -10002924: 6028 str r0, [r5, #0] -10002926: f8da 0000 ldr.w r0, [sl] -1000292a: 0040 lsls r0, r0, #1 -1000292c: d503 bpl.n 10002936 -1000292e: 2211 movs r2, #17 -10002930: 4893 ldr r0, [pc, #588] ; (10002b80 ) -10002932: 4b94 ldr r3, [pc, #592] ; (10002b84 ) -10002934: 4798 blx r3 -10002936: 682b ldr r3, [r5, #0] -10002938: 07d9 lsls r1, r3, #31 -1000293a: d5fc bpl.n 10002936 -1000293c: f44f 63c0 mov.w r3, #1536 ; 0x600 -10002940: 4a91 ldr r2, [pc, #580] ; (10002b88 ) -10002942: 6033 str r3, [r6, #0] -10002944: 6813 ldr r3, [r2, #0] -10002946: f423 037f bic.w r3, r3, #16711680 ; 0xff0000 -1000294a: f443 1388 orr.w r3, r3, #1114112 ; 0x110000 -1000294e: 6013 str r3, [r2, #0] -10002950: b304 cbz r4, 10002994 -10002952: 4a8e ldr r2, [pc, #568] ; (10002b8c ) -10002954: 4b8e ldr r3, [pc, #568] ; (10002b90 ) -10002956: 6811 ldr r1, [r2, #0] -10002958: 4299 cmp r1, r3 -1000295a: d11b bne.n 10002994 -1000295c: 4d8d ldr r5, [pc, #564] ; (10002b94 ) -1000295e: 6015 str r5, [r2, #0] -10002960: f8da 2000 ldr.w r2, [sl] -10002964: 0052 lsls r2, r2, #1 -10002966: d502 bpl.n 1000296e -10002968: 488b ldr r0, [pc, #556] ; (10002b98 ) -1000296a: 4b86 ldr r3, [pc, #536] ; (10002b84 ) -1000296c: 4798 blx r3 -1000296e: 4a87 ldr r2, [pc, #540] ; (10002b8c ) -10002970: f04f 6380 mov.w r3, #67108864 ; 0x4000000 -10002974: 4611 mov r1, r2 -10002976: 6810 ldr r0, [r2, #0] -10002978: 42a8 cmp r0, r5 -1000297a: d101 bne.n 10002980 -1000297c: 3b01 subs r3, #1 -1000297e: d1fa bne.n 10002976 -10002980: 680b ldr r3, [r1, #0] -10002982: 2b01 cmp r3, #1 -10002984: d106 bne.n 10002994 -10002986: f8da 3000 ldr.w r3, [sl] -1000298a: 005b lsls r3, r3, #1 -1000298c: d502 bpl.n 10002994 -1000298e: 4883 ldr r0, [pc, #524] ; (10002b9c ) -10002990: 4b7c ldr r3, [pc, #496] ; (10002b84 ) -10002992: 4798 blx r3 -10002994: 4a82 ldr r2, [pc, #520] ; (10002ba0 ) -10002996: 6813 ldr r3, [r2, #0] -10002998: f443 1300 orr.w r3, r3, #2097152 ; 0x200000 -1000299c: 6013 str r3, [r2, #0] -1000299e: 2c00 cmp r4, #0 -100029a0: f040 8140 bne.w 10002c24 -100029a4: 2204 movs r2, #4 -100029a6: a907 add r1, sp, #28 -100029a8: f249 0008 movw r0, #36872 ; 0x9008 -100029ac: f7ff fd6c bl 10002488 -100029b0: f89d 501d ldrb.w r5, [sp, #29] -100029b4: 2dff cmp r5, #255 ; 0xff -100029b6: d05f beq.n 10002a78 -100029b8: f005 007f and.w r0, r5, #127 ; 0x7f -100029bc: 4b79 ldr r3, [pc, #484] ; (10002ba4 ) -100029be: 4798 blx r3 -100029c0: 062f lsls r7, r5, #24 -100029c2: 9009 str r0, [sp, #36] ; 0x24 -100029c4: d54a bpl.n 10002a5c -100029c6: 2401 movs r4, #1 -100029c8: 9408 str r4, [sp, #32] -100029ca: e049 b.n 10002a60 -100029cc: 0058 lsls r0, r3, #1 -100029ce: f57f ae6a bpl.w 100026a6 -100029d2: 4621 mov r1, r4 -100029d4: 4b6b ldr r3, [pc, #428] ; (10002b84 ) -100029d6: 4874 ldr r0, [pc, #464] ; (10002ba8 ) -100029d8: 4798 blx r3 -100029da: e664 b.n 100026a6 -100029dc: 681a ldr r2, [r3, #0] -100029de: 2100 movs r1, #0 -100029e0: f3c2 0213 ubfx r2, r2, #0, #20 -100029e4: f442 1240 orr.w r2, r2, #3145728 ; 0x300000 -100029e8: 601a str r2, [r3, #0] -100029ea: 681a ldr r2, [r3, #0] -100029ec: 20c8 movs r0, #200 ; 0xc8 -100029ee: f042 0202 orr.w r2, r2, #2 -100029f2: 601a str r2, [r3, #0] -100029f4: 4a6d ldr r2, [pc, #436] ; (10002bac ) -100029f6: 6813 ldr r3, [r2, #0] -100029f8: f023 0307 bic.w r3, r3, #7 -100029fc: f043 0302 orr.w r3, r3, #2 -10002a00: 6013 str r3, [r2, #0] -10002a02: f852 3cb4 ldr.w r3, [r2, #-180] -10002a06: f423 6340 bic.w r3, r3, #3072 ; 0xc00 -10002a0a: f842 3cb4 str.w r3, [r2, #-180] -10002a0e: 2201 movs r2, #1 -10002a10: 47b0 blx r6 -10002a12: 4b67 ldr r3, [pc, #412] ; (10002bb0 ) -10002a14: 681a ldr r2, [r3, #0] -10002a16: f442 6280 orr.w r2, r2, #1024 ; 0x400 -10002a1a: 601a str r2, [r3, #0] -10002a1c: 681a ldr r2, [r3, #0] -10002a1e: f442 6200 orr.w r2, r2, #2048 ; 0x800 -10002a22: 601a str r2, [r3, #0] -10002a24: 2200 movs r2, #0 -10002a26: f8c3 2110 str.w r2, [r3, #272] ; 0x110 -10002a2a: 4a5d ldr r2, [pc, #372] ; (10002ba0 ) -10002a2c: 6813 ldr r3, [r2, #0] -10002a2e: f043 0340 orr.w r3, r3, #64 ; 0x40 -10002a32: e66c b.n 1000270e -10002a34: 3701 adds r7, #1 -10002a36: 2f3f cmp r7, #63 ; 0x3f -10002a38: f47f aed3 bne.w 100027e2 -10002a3c: f108 0801 add.w r8, r8, #1 -10002a40: f1b8 0f04 cmp.w r8, #4 -10002a44: f47f aeca bne.w 100027dc -10002a48: f8da 3000 ldr.w r3, [sl] -10002a4c: 005b lsls r3, r3, #1 -10002a4e: d502 bpl.n 10002a56 -10002a50: 4858 ldr r0, [pc, #352] ; (10002bb4 ) -10002a52: 4b4c ldr r3, [pc, #304] ; (10002b84 ) -10002a54: 4798 blx r3 -10002a56: f7ff fd7f bl 10002558 -10002a5a: e6ec b.n 10002836 -10002a5c: 2302 movs r3, #2 -10002a5e: 9308 str r3, [sp, #32] -10002a60: 4b55 ldr r3, [pc, #340] ; (10002bb8 ) -10002a62: 4658 mov r0, fp -10002a64: 4798 blx r3 -10002a66: 4b55 ldr r3, [pc, #340] ; (10002bbc ) -10002a68: 4658 mov r0, fp -10002a6a: 4798 blx r3 -10002a6c: 1a26 subs r6, r4, r0 -10002a6e: 4274 negs r4, r6 -10002a70: 4658 mov r0, fp -10002a72: 4b53 ldr r3, [pc, #332] ; (10002bc0 ) -10002a74: 4174 adcs r4, r6 -10002a76: 4798 blx r3 -10002a78: f44f 4330 mov.w r3, #45056 ; 0xb000 -10002a7c: 9307 str r3, [sp, #28] -10002a7e: f8da 3000 ldr.w r3, [sl] -10002a82: 3401 adds r4, #1 -10002a84: 005d lsls r5, r3, #1 -10002a86: d503 bpl.n 10002a90 -10002a88: 4621 mov r1, r4 -10002a8a: 484e ldr r0, [pc, #312] ; (10002bc4 ) -10002a8c: 4b3d ldr r3, [pc, #244] ; (10002b84 ) -10002a8e: 4798 blx r3 -10002a90: 2501 movs r5, #1 -10002a92: f8df 9144 ldr.w r9, [pc, #324] ; 10002bd8 -10002a96: 9807 ldr r0, [sp, #28] -10002a98: 2248 movs r2, #72 ; 0x48 -10002a9a: f600 70ff addw r0, r0, #4095 ; 0xfff -10002a9e: f420 607f bic.w r0, r0, #4080 ; 0xff0 -10002aa2: f020 000f bic.w r0, r0, #15 -10002aa6: 4659 mov r1, fp -10002aa8: 9007 str r0, [sp, #28] -10002aaa: f7ff fced bl 10002488 -10002aae: 9908 ldr r1, [sp, #32] -10002ab0: 9809 ldr r0, [sp, #36] ; 0x24 -10002ab2: f7ff fd39 bl 10002528 -10002ab6: 9b0b ldr r3, [sp, #44] ; 0x2c -10002ab8: 4a43 ldr r2, [pc, #268] ; (10002bc8 ) -10002aba: 4293 cmp r3, r2 -10002abc: d10a bne.n 10002ad4 -10002abe: f102 6280 add.w r2, r2, #67108864 ; 0x4000000 -10002ac2: 9b0a ldr r3, [sp, #40] ; 0x28 -10002ac4: f502 22ff add.w r2, r2, #522240 ; 0x7f800 -10002ac8: f502 7200 add.w r2, r2, #512 ; 0x200 -10002acc: 4293 cmp r3, r2 -10002ace: d146 bne.n 10002b5e -10002ad0: f440 7000 orr.w r0, r0, #512 ; 0x200 -10002ad4: 9a0d ldr r2, [sp, #52] ; 0x34 -10002ad6: 4b3d ldr r3, [pc, #244] ; (10002bcc ) -10002ad8: 429a cmp r2, r3 -10002ada: bf08 it eq -10002adc: f440 6080 orreq.w r0, r0, #1024 ; 0x400 -10002ae0: f5b0 6fa0 cmp.w r0, #1280 ; 0x500 -10002ae4: d37a bcc.n 10002bdc -10002ae6: f010 0fff tst.w r0, #255 ; 0xff -10002aea: d077 beq.n 10002bdc -10002aec: 9f07 ldr r7, [sp, #28] -10002aee: f04f 0800 mov.w r8, #0 -10002af2: f107 0310 add.w r3, r7, #16 -10002af6: 461e mov r6, r3 -10002af8: 9302 str r3, [sp, #8] -10002afa: 9b08 ldr r3, [sp, #32] -10002afc: 9a09 ldr r2, [sp, #36] ; 0x24 -10002afe: 4619 mov r1, r3 -10002b00: 4610 mov r0, r2 -10002b02: 9304 str r3, [sp, #16] -10002b04: 9203 str r2, [sp, #12] -10002b06: f7ff fd0f bl 10002528 -10002b0a: 42ac cmp r4, r5 -10002b0c: 9b04 ldr r3, [sp, #16] -10002b0e: d12b bne.n 10002b68 -10002b10: 1e41 subs r1, r0, #1 -10002b12: 2902 cmp r1, #2 -10002b14: f200 80a4 bhi.w 10002c60 -10002b18: f8da 1000 ldr.w r1, [sl] -10002b1c: 9a03 ldr r2, [sp, #12] -10002b1e: f011 4f80 tst.w r1, #1073741824 ; 0x40000000 -10002b22: d00a beq.n 10002b3a -10002b24: e88d 000c stmia.w sp, {r2, r3} -10002b28: 4b29 ldr r3, [pc, #164] ; (10002bd0 ) -10002b2a: 9a02 ldr r2, [sp, #8] -10002b2c: f853 3020 ldr.w r3, [r3, r0, lsl #2] -10002b30: fa5f f188 uxtb.w r1, r8 -10002b34: 4827 ldr r0, [pc, #156] ; (10002bd4 ) -10002b36: 4f13 ldr r7, [pc, #76] ; (10002b84 ) -10002b38: 47b8 blx r7 -10002b3a: 4630 mov r0, r6 -10002b3c: 9a08 ldr r2, [sp, #32] -10002b3e: 9909 ldr r1, [sp, #36] ; 0x24 -10002b40: f7ff fca2 bl 10002488 -10002b44: 4406 add r6, r0 -10002b46: 4630 mov r0, r6 -10002b48: 2210 movs r2, #16 -10002b4a: 4659 mov r1, fp -10002b4c: f7ff fc9c bl 10002488 -10002b50: f108 0801 add.w r8, r8, #1 -10002b54: 4406 add r6, r0 -10002b56: e7d0 b.n 10002afa -10002b58: 2500 movs r5, #0 -10002b5a: 462c mov r4, r5 -10002b5c: e79b b.n 10002a96 -10002b5e: 454b cmp r3, r9 -10002b60: bf08 it eq -10002b62: f440 7080 orreq.w r0, r0, #256 ; 0x100 -10002b66: e7b5 b.n 10002ad4 -10002b68: b108 cbz r0, 10002b6e -10002b6a: 441e add r6, r3 -10002b6c: e7eb b.n 10002b46 -10002b6e: 9607 str r6, [sp, #28] -10002b70: 3501 adds r5, #1 -10002b72: e790 b.n 10002a96 -10002b74: 09030e07 .word 0x09030e07 -10002b78: 00068873 .word 0x00068873 -10002b7c: 40005000 .word 0x40005000 -10002b80: 10002313 .word 0x10002313 -10002b84: 0000f39d .word 0x0000f39d -10002b88: 40000300 .word 0x40000300 -10002b8c: 1fff0000 .word 0x1fff0000 -10002b90: 12345678 .word 0x12345678 -10002b94: 87654321 .word 0x87654321 -10002b98: 1000232f .word 0x1000232f -10002b9c: 1000234d .word 0x1000234d -10002ba0: 40000210 .word 0x40000210 -10002ba4: 0000e1c1 .word 0x0000e1c1 -10002ba8: 1000229a .word 0x1000229a -10002bac: 40000304 .word 0x40000304 -10002bb0: 40000230 .word 0x40000230 -10002bb4: 10002302 .word 0x10002302 -10002bb8: 0000d805 .word 0x0000d805 -10002bbc: 0000dbd1 .word 0x0000dbd1 -10002bc0: 0000dac1 .word 0x0000dac1 -10002bc4: 1000235c .word 0x1000235c -10002bc8: 31313738 .word 0x31313738 -10002bcc: 574b5452 .word 0x574b5452 -10002bd0: 10002468 .word 0x10002468 -10002bd4: 10002370 .word 0x10002370 -10002bd8: 35393130 .word 0x35393130 -10002bdc: b315 cbz r5, 10002c24 -10002bde: f8da 3000 ldr.w r3, [sl] -10002be2: 0058 lsls r0, r3, #1 -10002be4: d503 bpl.n 10002bee -10002be6: 4621 mov r1, r4 -10002be8: 481f ldr r0, [pc, #124] ; (10002c68 ) -10002bea: 4b20 ldr r3, [pc, #128] ; (10002c6c ) -10002bec: 4798 blx r3 -10002bee: 2204 movs r2, #4 -10002bf0: a907 add r1, sp, #28 -10002bf2: f44f 4010 mov.w r0, #36864 ; 0x9000 -10002bf6: f7ff fc47 bl 10002488 -10002bfa: 9b07 ldr r3, [sp, #28] -10002bfc: f44f 7180 mov.w r1, #256 ; 0x100 -10002c00: f1b3 6f00 cmp.w r3, #134217728 ; 0x8000000 -10002c04: bf3c itt cc -10002c06: f103 4318 addcc.w r3, r3, #2550136832 ; 0x98000000 -10002c0a: 9307 strcc r3, [sp, #28] -10002c0c: 9807 ldr r0, [sp, #28] -10002c0e: f7ff fc8b bl 10002528 -10002c12: 2805 cmp r0, #5 -10002c14: d0a0 beq.n 10002b58 -10002c16: f8da 3000 ldr.w r3, [sl] -10002c1a: 0059 lsls r1, r3, #1 -10002c1c: d502 bpl.n 10002c24 -10002c1e: 4814 ldr r0, [pc, #80] ; (10002c70 ) -10002c20: 4b12 ldr r3, [pc, #72] ; (10002c6c ) -10002c22: 4798 blx r3 -10002c24: 4913 ldr r1, [pc, #76] ; (10002c74 ) -10002c26: 4814 ldr r0, [pc, #80] ; (10002c78 ) -10002c28: 4b14 ldr r3, [pc, #80] ; (10002c7c ) -10002c2a: 4798 blx r3 -10002c2c: b140 cbz r0, 10002c40 -10002c2e: f8da 3000 ldr.w r3, [sl] -10002c32: 005a lsls r2, r3, #1 -10002c34: d502 bpl.n 10002c3c -10002c36: 4812 ldr r0, [pc, #72] ; (10002c80 ) -10002c38: 4b0c ldr r3, [pc, #48] ; (10002c6c ) -10002c3a: 4798 blx r3 -10002c3c: f7ff fc8c bl 10002558 -10002c40: f8da 3000 ldr.w r3, [sl] -10002c44: 4c0f ldr r4, [pc, #60] ; (10002c84 ) -10002c46: f013 4f80 tst.w r3, #1073741824 ; 0x40000000 -10002c4a: d004 beq.n 10002c56 -10002c4c: 6822 ldr r2, [r4, #0] -10002c4e: 490a ldr r1, [pc, #40] ; (10002c78 ) -10002c50: 480d ldr r0, [pc, #52] ; (10002c88 ) -10002c52: 4b06 ldr r3, [pc, #24] ; (10002c6c ) -10002c54: 4798 blx r3 -10002c56: 6823 ldr r3, [r4, #0] -10002c58: 4798 blx r3 -10002c5a: b01b add sp, #108 ; 0x6c -10002c5c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10002c60: 2800 cmp r0, #0 -10002c62: d182 bne.n 10002b6a -10002c64: e7de b.n 10002c24 -10002c66: bf00 nop -10002c68: 100023a2 .word 0x100023a2 -10002c6c: 0000f39d .word 0x0000f39d -10002c70: 100023c0 .word 0x100023c0 -10002c74: 100023cc .word 0x100023cc -10002c78: 10006004 .word 0x10006004 -10002c7c: 0000f6b1 .word 0x0000f6b1 -10002c80: 100023d3 .word 0x100023d3 -10002c84: 10006000 .word 0x10006000 -10002c88: 100023ed .word 0x100023ed - -10002c8c : -10002c8c: 2004 movs r0, #4 -10002c8e: f7ff bc95 b.w 100025bc - -10002c92 : -10002c92: 2003 movs r0, #3 -10002c94: f7ff bc92 b.w 100025bc - -10002c98 : -10002c98: 2002 movs r0, #2 -10002c9a: f7ff bc8f b.w 100025bc - -10002c9e : -10002c9e: 2001 movs r0, #1 -10002ca0: f7ff bc8c b.w 100025bc - -10002ca4 : -10002ca4: 2000 movs r0, #0 -10002ca6: f7ff bc89 b.w 100025bc - ... - -10002cac : -10002cac: 0102 0131 0101 0331 0001 0531 0001 0731 ..1...1...1...1. -10002cbc: 0001 0931 0001 0b31 1301 1131 1201 1331 ..1...1...1...1. -10002ccc: 1101 1531 1101 1731 1101 1931 1101 1b31 ..1...1...1...1. - ... - -10002cf4 : -10002cf4: 3b0b 6b3b 02eb a2a2 3832 0506 0151 0f03 .;;k....28..Q... -10002d04: 0000 2003 0200 0202 0202 20c2 ... ....... - -Disassembly of section .ram_image2.text: - -10006040 : -10006040: 4a07 ldr r2, [pc, #28] ; (10006060 ) -10006042: 6813 ldr r3, [r2, #0] -10006044: f023 0301 bic.w r3, r3, #1 -10006048: 6013 str r3, [r2, #0] -1000604a: f852 3c2c ldr.w r3, [r2, #-44] -1000604e: f023 0303 bic.w r3, r3, #3 -10006052: f842 3c2c str.w r3, [r2, #-44] -10006056: 6e13 ldr r3, [r2, #96] ; 0x60 -10006058: f023 0301 bic.w r3, r3, #1 -1000605c: 6613 str r3, [r2, #96] ; 0x60 -1000605e: 4770 bx lr -10006060: 40000240 .word 0x40000240 - -10006064 : -10006064: 4a06 ldr r2, [pc, #24] ; (10006080 ) -10006066: 6813 ldr r3, [r2, #0] -10006068: f423 0370 bic.w r3, r3, #15728640 ; 0xf00000 -1000606c: f443 03c0 orr.w r3, r3, #6291456 ; 0x600000 -10006070: 6013 str r3, [r2, #0] -10006072: 6c53 ldr r3, [r2, #68] ; 0x44 -10006074: f023 0318 bic.w r3, r3, #24 -10006078: f043 0308 orr.w r3, r3, #8 -1000607c: 6453 str r3, [r2, #68] ; 0x44 -1000607e: 4770 bx lr -10006080: 40000020 .word 0x40000020 - -10006084 : -10006084: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10006088: 4d8f ldr r5, [pc, #572] ; (100062c8 ) -1000608a: 682b ldr r3, [r5, #0] -1000608c: 005e lsls r6, r3, #1 -1000608e: d503 bpl.n 10006098 -10006090: 498e ldr r1, [pc, #568] ; (100062cc ) -10006092: 488f ldr r0, [pc, #572] ; (100062d0 ) -10006094: 4b8f ldr r3, [pc, #572] ; (100062d4 ) -10006096: 4798 blx r3 -10006098: 488f ldr r0, [pc, #572] ; (100062d8 ) -1000609a: 4a90 ldr r2, [pc, #576] ; (100062dc ) -1000609c: 4c90 ldr r4, [pc, #576] ; (100062e0 ) -1000609e: 1a12 subs r2, r2, r0 -100060a0: 2100 movs r1, #0 -100060a2: f014 fd89 bl 1001abb8 -100060a6: f014 fcf7 bl 1001aa98 -100060aa: f44f 7296 mov.w r2, #300 ; 0x12c -100060ae: 2100 movs r1, #0 -100060b0: 4620 mov r0, r4 -100060b2: f014 fd81 bl 1001abb8 -100060b6: 4b8b ldr r3, [pc, #556] ; (100062e4 ) -100060b8: 488b ldr r0, [pc, #556] ; (100062e8 ) -100060ba: 601c str r4, [r3, #0] -100060bc: 4b8b ldr r3, [pc, #556] ; (100062ec ) -100060be: 4798 blx r3 -100060c0: f244 0301 movw r3, #16385 ; 0x4001 -100060c4: 4a8a ldr r2, [pc, #552] ; (100062f0 ) -100060c6: 7811 ldrb r1, [r2, #0] -100060c8: 064c lsls r4, r1, #25 -100060ca: d401 bmi.n 100060d0 -100060cc: 3b01 subs r3, #1 -100060ce: d1fa bne.n 100060c6 -100060d0: 4b88 ldr r3, [pc, #544] ; (100062f4 ) -100060d2: 4798 blx r3 -100060d4: 4b88 ldr r3, [pc, #544] ; (100062f8 ) -100060d6: 4298 cmp r0, r3 -100060d8: d007 beq.n 100060ea -100060da: 4a88 ldr r2, [pc, #544] ; (100062fc ) -100060dc: 2000 movs r0, #0 -100060de: 6813 ldr r3, [r2, #0] -100060e0: f423 3300 bic.w r3, r3, #131072 ; 0x20000 -100060e4: 6013 str r3, [r2, #0] -100060e6: 4b86 ldr r3, [pc, #536] ; (10006300 ) -100060e8: 4798 blx r3 -100060ea: f014 f885 bl 1001a1f8 -100060ee: f014 fc85 bl 1001a9fc -100060f2: f006 fd95 bl 1000cc20 -100060f6: f012 fb8d bl 10018814 -100060fa: 4b82 ldr r3, [pc, #520] ; (10006304 ) -100060fc: 4a82 ldr r2, [pc, #520] ; (10006308 ) -100060fe: 4c83 ldr r4, [pc, #524] ; (1000630c ) -10006100: 601a str r2, [r3, #0] -10006102: f102 2210 add.w r2, r2, #268439552 ; 0x10001000 -10006106: 32ff adds r2, #255 ; 0xff -10006108: 631a str r2, [r3, #48] ; 0x30 -1000610a: 6823 ldr r3, [r4, #0] -1000610c: f043 0301 orr.w r3, r3, #1 -10006110: 6023 str r3, [r4, #0] -10006112: f014 fcab bl 1001aa6c -10006116: 28fd cmp r0, #253 ; 0xfd -10006118: f240 80cb bls.w 100062b2 -1000611c: f854 1cb0 ldr.w r1, [r4, #-176] -10006120: 3cb0 subs r4, #176 ; 0xb0 -10006122: f411 1100 ands.w r1, r1, #2097152 ; 0x200000 -10006126: f040 808e bne.w 10006246 -1000612a: 4a79 ldr r2, [pc, #484] ; (10006310 ) -1000612c: 20c8 movs r0, #200 ; 0xc8 -1000612e: 6813 ldr r3, [r2, #0] -10006130: 4e78 ldr r6, [pc, #480] ; (10006314 ) -10006132: f3c3 0313 ubfx r3, r3, #0, #20 -10006136: f443 1340 orr.w r3, r3, #3145728 ; 0x300000 -1000613a: 6013 str r3, [r2, #0] -1000613c: 6813 ldr r3, [r2, #0] -1000613e: f043 0302 orr.w r3, r3, #2 -10006142: 6013 str r3, [r2, #0] -10006144: f8d2 32c4 ldr.w r3, [r2, #708] ; 0x2c4 -10006148: f023 0307 bic.w r3, r3, #7 -1000614c: f043 0302 orr.w r3, r3, #2 -10006150: f8c2 32c4 str.w r3, [r2, #708] ; 0x2c4 -10006154: f8d2 3210 ldr.w r3, [r2, #528] ; 0x210 -10006158: f423 6340 bic.w r3, r3, #3072 ; 0xc00 -1000615c: f8c2 3210 str.w r3, [r2, #528] ; 0x210 -10006160: 4b6d ldr r3, [pc, #436] ; (10006318 ) -10006162: 6019 str r1, [r3, #0] -10006164: f5a3 7388 sub.w r3, r3, #272 ; 0x110 -10006168: 681a ldr r2, [r3, #0] -1000616a: f442 6280 orr.w r2, r2, #1024 ; 0x400 -1000616e: 601a str r2, [r3, #0] -10006170: 681a ldr r2, [r3, #0] -10006172: f442 6200 orr.w r2, r2, #2048 ; 0x800 -10006176: 601a str r2, [r3, #0] -10006178: 2201 movs r2, #1 -1000617a: 4b68 ldr r3, [pc, #416] ; (1000631c ) -1000617c: 4798 blx r3 -1000617e: 6823 ldr r3, [r4, #0] -10006180: f043 0340 orr.w r3, r3, #64 ; 0x40 -10006184: 6023 str r3, [r4, #0] -10006186: f64f 6301 movw r3, #65025 ; 0xfe01 -1000618a: e9d6 0100 ldrd r0, r1, [r6] -1000618e: b282 uxth r2, r0 -10006190: 429a cmp r2, r3 -10006192: 460c mov r4, r1 -10006194: d17b bne.n 1000628e -10006196: b2ca uxtb r2, r1 -10006198: f3c1 2307 ubfx r3, r1, #8, #8 -1000619c: 4053 eors r3, r2 -1000619e: 2bff cmp r3, #255 ; 0xff -100061a0: d175 bne.n 1000628e -100061a2: f3c1 4307 ubfx r3, r1, #16, #8 -100061a6: ea83 6111 eor.w r1, r3, r1, lsr #24 -100061aa: 29ff cmp r1, #255 ; 0xff -100061ac: d16f bne.n 1000628e -100061ae: 6829 ldr r1, [r5, #0] -100061b0: 0048 lsls r0, r1, #1 -100061b2: d503 bpl.n 100061bc -100061b4: 4631 mov r1, r6 -100061b6: 485a ldr r0, [pc, #360] ; (10006320 ) -100061b8: 4e46 ldr r6, [pc, #280] ; (100062d4 ) -100061ba: 47b0 blx r6 -100061bc: f44f 62e0 mov.w r2, #1792 ; 0x700 -100061c0: 2101 movs r1, #1 -100061c2: 2008 movs r0, #8 -100061c4: 4e57 ldr r6, [pc, #348] ; (10006324 ) -100061c6: 4f58 ldr r7, [pc, #352] ; (10006328 ) -100061c8: 6032 str r2, [r6, #0] -100061ca: 4a58 ldr r2, [pc, #352] ; (1000632c ) -100061cc: f8df 8194 ldr.w r8, [pc, #404] ; 10006364 -100061d0: 6011 str r1, [r2, #0] -100061d2: f5a2 7208 sub.w r2, r2, #544 ; 0x220 -100061d6: 6010 str r0, [r2, #0] -100061d8: b2e2 uxtb r2, r4 -100061da: 4082 lsls r2, r0 -100061dc: f100 4080 add.w r0, r0, #1073741824 ; 0x40000000 -100061e0: f500 40a0 add.w r0, r0, #20480 ; 0x5000 -100061e4: 6002 str r2, [r0, #0] -100061e6: 2000 movs r0, #0 -100061e8: 4a51 ldr r2, [pc, #324] ; (10006330 ) -100061ea: f8df 90e8 ldr.w r9, [pc, #232] ; 100062d4 -100061ee: 6010 str r0, [r2, #0] -100061f0: 2006 movs r0, #6 -100061f2: f842 0c04 str.w r0, [r2, #-4] -100061f6: 2022 movs r0, #34 ; 0x22 -100061f8: f842 0c08 str.w r0, [r2, #-8] -100061fc: 484d ldr r0, [pc, #308] ; (10006334 ) -100061fe: f842 0c18 str.w r0, [r2, #-24] -10006202: f242 6052 movw r0, #9810 ; 0x2652 -10006206: f842 0c14 str.w r0, [r2, #-20] -1000620a: 484b ldr r0, [pc, #300] ; (10006338 ) -1000620c: f842 0c10 str.w r0, [r2, #-16] -10006210: 2042 movs r0, #66 ; 0x42 -10006212: f842 0c0c str.w r0, [r2, #-12] -10006216: 6039 str r1, [r7, #0] -10006218: 682b ldr r3, [r5, #0] -1000621a: f003 4380 and.w r3, r3, #1073741824 ; 0x40000000 -1000621e: 683a ldr r2, [r7, #0] -10006220: 07d2 lsls r2, r2, #31 -10006222: d541 bpl.n 100062a8 -10006224: f44f 63c0 mov.w r3, #1536 ; 0x600 -10006228: 4a44 ldr r2, [pc, #272] ; (1000633c ) -1000622a: 6033 str r3, [r6, #0] -1000622c: 6813 ldr r3, [r2, #0] -1000622e: f404 047f and.w r4, r4, #16711680 ; 0xff0000 -10006232: f423 037f bic.w r3, r3, #16711680 ; 0xff0000 -10006236: 431c orrs r4, r3 -10006238: 6014 str r4, [r2, #0] -1000623a: 682b ldr r3, [r5, #0] -1000623c: 005b lsls r3, r3, #1 -1000623e: d502 bpl.n 10006246 -10006240: 483f ldr r0, [pc, #252] ; (10006340 ) -10006242: 4b24 ldr r3, [pc, #144] ; (100062d4 ) -10006244: 4798 blx r3 -10006246: 4a3f ldr r2, [pc, #252] ; (10006344 ) -10006248: 483f ldr r0, [pc, #252] ; (10006348 ) -1000624a: 4282 cmp r2, r0 -1000624c: d003 beq.n 10006256 -1000624e: 1a12 subs r2, r2, r0 -10006250: 2100 movs r1, #0 -10006252: f014 fcb1 bl 1001abb8 -10006256: 4a3d ldr r2, [pc, #244] ; (1000634c ) -10006258: 6813 ldr r3, [r2, #0] -1000625a: f443 1300 orr.w r3, r3, #2097152 ; 0x200000 -1000625e: 6013 str r3, [r2, #0] -10006260: f8d2 30b0 ldr.w r3, [r2, #176] ; 0xb0 -10006264: f023 0301 bic.w r3, r3, #1 -10006268: f8c2 30b0 str.w r3, [r2, #176] ; 0xb0 -1000626c: f014 fa20 bl 1001a6b0 -10006270: 4a37 ldr r2, [pc, #220] ; (10006350 ) -10006272: 4938 ldr r1, [pc, #224] ; (10006354 ) -10006274: 4838 ldr r0, [pc, #224] ; (10006358 ) -10006276: 4b39 ldr r3, [pc, #228] ; (1000635c ) -10006278: 4798 blx r3 -1000627a: 4668 mov r0, sp -1000627c: f020 0007 bic.w r0, r0, #7 -10006280: 4685 mov sp, r0 -10006282: f014 fc07 bl 1001aa94 <__low_level_init> -10006286: f001 fb3f bl 10007908
-1000628a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1000628e: 2211 movs r2, #17 -10006290: 682b ldr r3, [r5, #0] -10006292: f36f 0407 bfc r4, #0, #8 -10006296: 0059 lsls r1, r3, #1 -10006298: f362 4417 bfi r4, r2, #16, #8 -1000629c: d58e bpl.n 100061bc -1000629e: 2100 movs r1, #0 -100062a0: 4b0c ldr r3, [pc, #48] ; (100062d4 ) -100062a2: 482f ldr r0, [pc, #188] ; (10006360 ) -100062a4: 4798 blx r3 -100062a6: e789 b.n 100061bc -100062a8: 2b00 cmp r3, #0 -100062aa: d0b8 beq.n 1000621e -100062ac: 4640 mov r0, r8 -100062ae: 47c8 blx r9 -100062b0: e7b2 b.n 10006218 -100062b2: 6823 ldr r3, [r4, #0] -100062b4: 4a16 ldr r2, [pc, #88] ; (10006310 ) -100062b6: f023 0310 bic.w r3, r3, #16 -100062ba: 6023 str r3, [r4, #0] -100062bc: 6813 ldr r3, [r2, #0] -100062be: f023 0302 bic.w r3, r3, #2 -100062c2: 6013 str r3, [r2, #0] -100062c4: e7c7 b.n 10006256 -100062c6: bf00 nop -100062c8: 10000314 .word 0x10000314 -100062cc: 10006018 .word 0x10006018 -100062d0: 10040e14 .word 0x10040e14 -100062d4: 0000f39d .word 0x0000f39d -100062d8: 10046680 .word 0x10046680 -100062dc: 1004e510 .word 0x1004e510 -100062e0: 100020c0 .word 0x100020c0 -100062e4: 10000354 .word 0x10000354 -100062e8: 1ffffffc .word 0x1ffffffc -100062ec: 00003de5 .word 0x00003de5 -100062f0: 40003014 .word 0x40003014 -100062f4: 00000355 .word 0x00000355 -100062f8: 09ef21aa .word 0x09ef21aa -100062fc: 40000074 .word 0x40000074 -10006300: 00000341 .word 0x00000341 -10006304: 100021ec .word 0x100021ec -10006308: 01310202 .word 0x01310202 -1000630c: 400002c0 .word 0x400002c0 -10006310: 40000040 .word 0x40000040 -10006314: 98009180 .word 0x98009180 -10006318: 40000340 .word 0x40000340 -1000631c: 00002b39 .word 0x00002b39 -10006320: 10040e30 .word 0x10040e30 -10006324: 4000500c .word 0x4000500c -10006328: 40005000 .word 0x40005000 -1000632c: 40005224 .word 0x40005224 -10006330: 40005028 .word 0x40005028 -10006334: 09030e07 .word 0x09030e07 -10006338: 00068873 .word 0x00068873 -1000633c: 40000300 .word 0x40000300 -10006340: 10040e7f .word 0x10040e7f -10006344: 30000000 .word 0x30000000 -10006348: 30000000 .word 0x30000000 -1000634c: 40000210 .word 0x40000210 -10006350: 10015465 .word 0x10015465 -10006354: 10015421 .word 0x10015421 -10006358: 100153c1 .word 0x100153c1 -1000635c: 00004019 .word 0x00004019 -10006360: 10040e59 .word 0x10040e59 -10006364: 10040e7d .word 0x10040e7d - -10006368 : -10006368: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1000636c: 4b28 ldr r3, [pc, #160] ; (10006410 ) -1000636e: 4798 blx r3 -10006370: 4d28 ldr r5, [pc, #160] ; (10006414 ) -10006372: 4607 mov r7, r0 -10006374: 2000 movs r0, #0 -10006376: 47a8 blx r5 -10006378: 2000 movs r0, #0 -1000637a: 4b27 ldr r3, [pc, #156] ; (10006418 ) -1000637c: 4798 blx r3 -1000637e: b1a0 cbz r0, 100063aa -10006380: 4e26 ldr r6, [pc, #152] ; (1000641c ) -10006382: 281b cmp r0, #27 -10006384: 6834 ldr r4, [r6, #0] -10006386: d115 bne.n 100063b4 -10006388: 7963 ldrb r3, [r4, #5] -1000638a: 2b01 cmp r3, #1 -1000638c: d003 beq.n 10006396 -1000638e: 2301 movs r3, #1 -10006390: 7163 strb r3, [r4, #5] -10006392: 2300 movs r3, #0 -10006394: e008 b.n 100063a8 -10006396: 79a3 ldrb r3, [r4, #6] -10006398: 2b01 cmp r3, #1 -1000639a: d002 beq.n 100063a2 -1000639c: 6a23 ldr r3, [r4, #32] -1000639e: 2b01 cmp r3, #1 -100063a0: d1f7 bne.n 10006392 -100063a2: 78e3 ldrb r3, [r4, #3] -100063a4: b90b cbnz r3, 100063aa -100063a6: 2301 movs r3, #1 -100063a8: 70e3 strb r3, [r4, #3] -100063aa: 4638 mov r0, r7 -100063ac: 462b mov r3, r5 -100063ae: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -100063b2: 4718 bx r3 -100063b4: 78e2 ldrb r2, [r4, #3] -100063b6: 2a01 cmp r2, #1 -100063b8: d103 bne.n 100063c2 -100063ba: 285b cmp r0, #91 ; 0x5b -100063bc: d1e9 bne.n 10006392 -100063be: 2302 movs r3, #2 -100063c0: e7f2 b.n 100063a8 -100063c2: 2a02 cmp r2, #2 -100063c4: d10b bne.n 100063de -100063c6: 2200 movs r2, #0 -100063c8: f1a0 0341 sub.w r3, r0, #65 ; 0x41 -100063cc: b2db uxtb r3, r3 -100063ce: 2b01 cmp r3, #1 -100063d0: 70e2 strb r2, [r4, #3] -100063d2: d8ea bhi.n 100063aa -100063d4: 2201 movs r2, #1 -100063d6: 4621 mov r1, r4 -100063d8: 4b11 ldr r3, [pc, #68] ; (10006420 ) -100063da: 4798 blx r3 -100063dc: e7e5 b.n 100063aa -100063de: 2201 movs r2, #1 -100063e0: 4621 mov r1, r4 -100063e2: 4b10 ldr r3, [pc, #64] ; (10006424 ) -100063e4: 4798 blx r3 -100063e6: 2802 cmp r0, #2 -100063e8: d1df bne.n 100063aa -100063ea: 68a2 ldr r2, [r4, #8] -100063ec: b14a cbz r2, 10006402 -100063ee: 2301 movs r3, #1 -100063f0: 7123 strb r3, [r4, #4] -100063f2: 6a23 ldr r3, [r4, #32] -100063f4: 2b00 cmp r3, #0 -100063f6: d0d8 beq.n 100063aa -100063f8: 6830 ldr r0, [r6, #0] -100063fa: 3024 adds r0, #36 ; 0x24 -100063fc: f011 f854 bl 100174a8 -10006400: e7d3 b.n 100063aa -10006402: 6833 ldr r3, [r6, #0] -10006404: 217f movs r1, #127 ; 0x7f -10006406: 6898 ldr r0, [r3, #8] -10006408: 4b07 ldr r3, [pc, #28] ; (10006428 ) -1000640a: 3001 adds r0, #1 -1000640c: 4798 blx r3 -1000640e: e7cc b.n 100063aa -10006410: 00000329 .word 0x00000329 -10006414: 00000335 .word 0x00000335 -10006418: 00000309 .word 0x00000309 -1000641c: 10000384 .word 0x10000384 -10006420: 0000ea71 .word 0x0000ea71 -10006424: 0000eadd .word 0x0000eadd -10006428: 0000e8b1 .word 0x0000e8b1 - -1000642c : -1000642c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10006430: 4b28 ldr r3, [pc, #160] ; (100064d4 ) -10006432: 4e29 ldr r6, [pc, #164] ; (100064d8 ) -10006434: 681d ldr r5, [r3, #0] -10006436: 2701 movs r7, #1 -10006438: f105 0424 add.w r4, r5, #36 ; 0x24 -1000643c: 622f str r7, [r5, #32] -1000643e: 4620 mov r0, r4 -10006440: f011 f842 bl 100174c8 -10006444: 792b ldrb r3, [r5, #4] -10006446: 2b00 cmp r3, #0 -10006448: d0f8 beq.n 1000643c -1000644a: 68a8 ldr r0, [r5, #8] -1000644c: 4922 ldr r1, [pc, #136] ; (100064d8 ) -1000644e: 3001 adds r0, #1 -10006450: f006 fc1c bl 1000cc8c -10006454: 4680 mov r8, r0 -10006456: 2800 cmp r0, #0 -10006458: d037 beq.n 100064ca -1000645a: 2701 movs r7, #1 -1000645c: 6830 ldr r0, [r6, #0] -1000645e: 4b1f ldr r3, [pc, #124] ; (100064dc ) -10006460: 4798 blx r3 -10006462: 692c ldr r4, [r5, #16] -10006464: f8df a088 ldr.w sl, [pc, #136] ; 100064f0 -10006468: f8df b078 ldr.w fp, [pc, #120] ; 100064e4 -1000646c: 3410 adds r4, #16 -1000646e: f854 1c10 ldr.w r1, [r4, #-16] -10006472: b991 cbnz r1, 1000649a -10006474: b11f cbz r7, 1000647e -10006476: 6831 ldr r1, [r6, #0] -10006478: 4819 ldr r0, [pc, #100] ; (100064e0 ) -1000647a: 4b1a ldr r3, [pc, #104] ; (100064e4 ) -1000647c: 4798 blx r3 -1000647e: 2004 movs r0, #4 -10006480: f012 fdc2 bl 10019008 -10006484: 2400 movs r4, #0 -10006486: 68ab ldr r3, [r5, #8] -10006488: 200d movs r0, #13 -1000648a: 701c strb r4, [r3, #0] -1000648c: 705c strb r4, [r3, #1] -1000648e: 4f16 ldr r7, [pc, #88] ; (100064e8 ) -10006490: 47b8 blx r7 -10006492: 203e movs r0, #62 ; 0x3e -10006494: 47b8 blx r7 -10006496: 712c strb r4, [r5, #4] -10006498: e7cd b.n 10006436 -1000649a: 6830 ldr r0, [r6, #0] -1000649c: 4b13 ldr r3, [pc, #76] ; (100064ec ) -1000649e: 4798 blx r3 -100064a0: 4681 mov r9, r0 -100064a2: b948 cbnz r0, 100064b8 -100064a4: f834 2c0c ldrh.w r2, [r4, #-12] -100064a8: 4590 cmp r8, r2 -100064aa: dd07 ble.n 100064bc -100064ac: f854 2c08 ldr.w r2, [r4, #-8] -100064b0: 4631 mov r1, r6 -100064b2: 4640 mov r0, r8 -100064b4: 4790 blx r2 -100064b6: 464f mov r7, r9 -100064b8: 3410 adds r4, #16 -100064ba: e7d8 b.n 1000646e -100064bc: f854 2c04 ldr.w r2, [r4, #-4] -100064c0: f854 1c10 ldr.w r1, [r4, #-16] -100064c4: 4650 mov r0, sl -100064c6: 47d8 blx fp -100064c8: e7f5 b.n 100064b6 -100064ca: 2004 movs r0, #4 -100064cc: f012 fd7c bl 10018fc8 -100064d0: e7d8 b.n 10006484 -100064d2: bf00 nop -100064d4: 10000384 .word 0x10000384 -100064d8: 100006ac .word 0x100006ac -100064dc: 0000f749 .word 0x0000f749 -100064e0: 1003fac0 .word 0x1003fac0 -100064e4: 0000f39d .word 0x0000f39d -100064e8: 000002d9 .word 0x000002d9 -100064ec: 0000f719 .word 0x0000f719 -100064f0: 1003faba .word 0x1003faba - -100064f4 : -100064f4: 2358 movs r3, #88 ; 0x58 -100064f6: b570 push {r4, r5, r6, lr} -100064f8: 2400 movs r4, #0 -100064fa: b088 sub sp, #32 -100064fc: 9305 str r3, [sp, #20] -100064fe: 4b22 ldr r3, [pc, #136] ; (10006588 ) -10006500: 4d22 ldr r5, [pc, #136] ; (1000658c ) -10006502: 9304 str r3, [sp, #16] -10006504: a804 add r0, sp, #16 -10006506: 4b22 ldr r3, [pc, #136] ; (10006590 ) -10006508: 9406 str r4, [sp, #24] -1000650a: 9407 str r4, [sp, #28] -1000650c: 4798 blx r3 -1000650e: 4628 mov r0, r5 -10006510: 4622 mov r2, r4 -10006512: f800 4b01 strb.w r4, [r0], #1 -10006516: 217f movs r1, #127 ; 0x7f -10006518: 4b1e ldr r3, [pc, #120] ; (10006594 ) -1000651a: 4798 blx r3 -1000651c: 2210 movs r2, #16 -1000651e: 481e ldr r0, [pc, #120] ; (10006598 ) -10006520: 4b1e ldr r3, [pc, #120] ; (1000659c ) -10006522: 7004 strb r4, [r0, #0] -10006524: 7044 strb r4, [r0, #1] -10006526: 70c4 strb r4, [r0, #3] -10006528: 7184 strb r4, [r0, #6] -1000652a: 6085 str r5, [r0, #8] -1000652c: 6184 str r4, [r0, #24] -1000652e: 4d1c ldr r5, [pc, #112] ; (100065a0 ) -10006530: 61c3 str r3, [r0, #28] -10006532: 4b1c ldr r3, [pc, #112] ; (100065a4 ) -10006534: 60c5 str r5, [r0, #12] -10006536: 6103 str r3, [r0, #16] -10006538: 4b1b ldr r3, [pc, #108] ; (100065a8 ) -1000653a: 4e1c ldr r6, [pc, #112] ; (100065ac ) -1000653c: 681b ldr r3, [r3, #0] -1000653e: 2101 movs r1, #1 -10006540: fb93 f3f2 sdiv r3, r3, r2 -10006544: 6143 str r3, [r0, #20] -10006546: 2305 movs r3, #5 -10006548: 6204 str r4, [r0, #32] -1000654a: 6030 str r0, [r6, #0] -1000654c: 7083 strb r3, [r0, #2] -1000654e: 3024 adds r0, #36 ; 0x24 -10006550: f010 ff92 bl 10017478 -10006554: 2201 movs r2, #1 -10006556: 6833 ldr r3, [r6, #0] -10006558: a804 add r0, sp, #16 -1000655a: 711c strb r4, [r3, #4] -1000655c: 715a strb r2, [r3, #5] -1000655e: 4b14 ldr r3, [pc, #80] ; (100065b0 ) -10006560: 4798 blx r3 -10006562: 2304 movs r3, #4 -10006564: 9403 str r4, [sp, #12] -10006566: 9300 str r3, [sp, #0] -10006568: 9402 str r4, [sp, #8] -1000656a: 9401 str r4, [sp, #4] -1000656c: 4623 mov r3, r4 -1000656e: f44f 6280 mov.w r2, #1024 ; 0x400 -10006572: 4910 ldr r1, [pc, #64] ; (100065b4 ) -10006574: 4810 ldr r0, [pc, #64] ; (100065b8 ) -10006576: f00f fc5d bl 10015e34 -1000657a: 2801 cmp r0, #1 -1000657c: d001 beq.n 10006582 -1000657e: 480f ldr r0, [pc, #60] ; (100065bc ) -10006580: 47a8 blx r5 -10006582: b008 add sp, #32 -10006584: bd70 pop {r4, r5, r6, pc} -10006586: bf00 nop -10006588: 10006369 .word 0x10006369 -1000658c: 10000388 .word 0x10000388 -10006590: 00004091 .word 0x00004091 -10006594: 0000e8b1 .word 0x0000e8b1 -10006598: 10000408 .word 0x10000408 -1000659c: 10000430 .word 0x10000430 -100065a0: 0000f39d .word 0x0000f39d -100065a4: 10044b98 .word 0x10044b98 -100065a8: 00000020 .word 0x00000020 -100065ac: 10000384 .word 0x10000384 -100065b0: 00004029 .word 0x00004029 -100065b4: 1003fad4 .word 0x1003fad4 -100065b8: 1000642d .word 0x1000642d -100065bc: 1003fadc .word 0x1003fadc - -100065c0 : -100065c0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100065c4: b087 sub sp, #28 -100065c6: ab02 add r3, sp, #8 -100065c8: e883 0006 stmia.w r3, {r1, r2} -100065cc: 4b31 ldr r3, [pc, #196] ; (10006694 ) -100065ce: 4680 mov r8, r0 -100065d0: 6818 ldr r0, [r3, #0] -100065d2: 4c31 ldr r4, [pc, #196] ; (10006698 ) -100065d4: f3c0 1002 ubfx r0, r0, #4, #3 -100065d8: eb04 04c0 add.w r4, r4, r0, lsl #3 -100065dc: 78e3 ldrb r3, [r4, #3] -100065de: b923 cbnz r3, 100065ea -100065e0: 2101 movs r1, #1 -100065e2: aa04 add r2, sp, #16 -100065e4: 4b2d ldr r3, [pc, #180] ; (1000669c ) -100065e6: 4798 blx r3 -100065e8: ac04 add r4, sp, #16 -100065ea: 4b2d ldr r3, [pc, #180] ; (100066a0 ) -100065ec: 681b ldr r3, [r3, #0] -100065ee: 04db lsls r3, r3, #19 -100065f0: d505 bpl.n 100065fe -100065f2: 482c ldr r0, [pc, #176] ; (100066a4 ) -100065f4: 492c ldr r1, [pc, #176] ; (100066a8 ) -100065f6: 4642 mov r2, r8 -100065f8: 4623 mov r3, r4 -100065fa: 4d2c ldr r5, [pc, #176] ; (100066ac ) -100065fc: 47a8 blx r5 -100065fe: 4f2c ldr r7, [pc, #176] ; (100066b0 ) -10006600: 7862 ldrb r2, [r4, #1] -10006602: f8d7 b000 ldr.w fp, [r7] -10006606: 4e2b ldr r6, [pc, #172] ; (100066b4 ) -10006608: ea4f 431b mov.w r3, fp, lsr #16 -1000660c: 041b lsls r3, r3, #16 -1000660e: 4313 orrs r3, r2 -10006610: 603b str r3, [r7, #0] -10006612: f8d6 a000 ldr.w sl, [r6] -10006616: 7823 ldrb r3, [r4, #0] -10006618: ea4f 411a mov.w r1, sl, lsr #16 -1000661c: 0409 lsls r1, r1, #16 -1000661e: 4d26 ldr r5, [pc, #152] ; (100066b8 ) -10006620: 4319 orrs r1, r3 -10006622: 6031 str r1, [r6, #0] -10006624: f8d5 9000 ldr.w r9, [r5] -10006628: 78a2 ldrb r2, [r4, #2] -1000662a: f029 03ff bic.w r3, r9, #255 ; 0xff -1000662e: 4c23 ldr r4, [pc, #140] ; (100066bc ) -10006630: 4313 orrs r3, r2 -10006632: 602b str r3, [r5, #0] -10006634: 4a22 ldr r2, [pc, #136] ; (100066c0 ) -10006636: 2300 movs r3, #0 -10006638: 6023 str r3, [r4, #0] -1000663a: 6811 ldr r1, [r2, #0] -1000663c: fa1f fb8b uxth.w fp, fp -10006640: f421 2170 bic.w r1, r1, #983040 ; 0xf0000 -10006644: f421 7140 bic.w r1, r1, #768 ; 0x300 -10006648: f441 7140 orr.w r1, r1, #768 ; 0x300 -1000664c: 6011 str r1, [r2, #0] -1000664e: f882 8060 strb.w r8, [r2, #96] ; 0x60 -10006652: 2201 movs r2, #1 -10006654: 6022 str r2, [r4, #0] -10006656: 9301 str r3, [sp, #4] -10006658: 4a1a ldr r2, [pc, #104] ; (100066c4 ) -1000665a: 4790 blx r2 -1000665c: 9b01 ldr r3, [sp, #4] -1000665e: fa1f fa8a uxth.w sl, sl -10006662: 6023 str r3, [r4, #0] -10006664: 683a ldr r2, [r7, #0] -10006666: fa5f f989 uxtb.w r9, r9 -1000666a: 0c12 lsrs r2, r2, #16 -1000666c: 0412 lsls r2, r2, #16 -1000666e: ea42 020b orr.w r2, r2, fp -10006672: 603a str r2, [r7, #0] -10006674: 6833 ldr r3, [r6, #0] -10006676: 0c1b lsrs r3, r3, #16 -10006678: 041b lsls r3, r3, #16 -1000667a: ea43 030a orr.w r3, r3, sl -1000667e: 6033 str r3, [r6, #0] -10006680: 682b ldr r3, [r5, #0] -10006682: f023 03ff bic.w r3, r3, #255 ; 0xff -10006686: ea43 0309 orr.w r3, r3, r9 -1000668a: 602b str r3, [r5, #0] -1000668c: b007 add sp, #28 -1000668e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10006692: bf00 nop -10006694: 40000014 .word 0x40000014 -10006698: 100021ec .word 0x100021ec -1000669c: 00003081 .word 0x00003081 -100066a0: 10000310 .word 0x10000310 -100066a4: 100445b7 .word 0x100445b7 -100066a8: 1004497a .word 0x1004497a -100066ac: 0000f39d .word 0x0000f39d -100066b0: 4000611c .word 0x4000611c -100066b4: 40006014 .word 0x40006014 -100066b8: 40000300 .word 0x40000300 -100066bc: 40006008 .word 0x40006008 -100066c0: 40006000 .word 0x40006000 -100066c4: 00002ea5 .word 0x00002ea5 - -100066c8 : -100066c8: 4b24 ldr r3, [pc, #144] ; (1000675c ) -100066ca: b537 push {r0, r1, r2, r4, r5, lr} -100066cc: 4605 mov r5, r0 -100066ce: 6818 ldr r0, [r3, #0] -100066d0: 2306 movs r3, #6 -100066d2: f3c0 1002 ubfx r0, r0, #4, #3 -100066d6: fb03 0301 mla r3, r3, r1, r0 -100066da: 4a21 ldr r2, [pc, #132] ; (10006760 ) -100066dc: 460c mov r4, r1 -100066de: eb02 03c3 add.w r3, r2, r3, lsl #3 -100066e2: 78da ldrb r2, [r3, #3] -100066e4: b922 cbnz r2, 100066f0 -100066e6: 4b1f ldr r3, [pc, #124] ; (10006764 ) -100066e8: 2101 movs r1, #1 -100066ea: 466a mov r2, sp -100066ec: 4798 blx r3 -100066ee: 466b mov r3, sp -100066f0: 4a1d ldr r2, [pc, #116] ; (10006768 ) -100066f2: 2100 movs r1, #0 -100066f4: 6011 str r1, [r2, #0] -100066f6: 2101 movs r1, #1 -100066f8: 60d5 str r5, [r2, #12] -100066fa: 6091 str r1, [r2, #8] -100066fc: 491b ldr r1, [pc, #108] ; (1000676c ) -100066fe: 7858 ldrb r0, [r3, #1] -10006700: 680a ldr r2, [r1, #0] -10006702: 2c01 cmp r4, #1 -10006704: ea4f 4212 mov.w r2, r2, lsr #16 -10006708: ea4f 4202 mov.w r2, r2, lsl #16 -1000670c: ea40 0202 orr.w r2, r0, r2 -10006710: 600a str r2, [r1, #0] -10006712: 4a17 ldr r2, [pc, #92] ; (10006770 ) -10006714: 7899 ldrb r1, [r3, #2] -10006716: 6810 ldr r0, [r2, #0] -10006718: f020 03ff bic.w r3, r0, #255 ; 0xff -1000671c: ea41 0303 orr.w r3, r1, r3 -10006720: 6013 str r3, [r2, #0] -10006722: 4b14 ldr r3, [pc, #80] ; (10006774 ) -10006724: f04f 0204 mov.w r2, #4 -10006728: 601a str r2, [r3, #0] -1000672a: d00e beq.n 1000674a -1000672c: d308 bcc.n 10006740 -1000672e: 2c02 cmp r4, #2 -10006730: d112 bne.n 10006758 -10006732: 4b11 ldr r3, [pc, #68] ; (10006778 ) -10006734: 681a ldr r2, [r3, #0] -10006736: f422 127c bic.w r2, r2, #4128768 ; 0x3f0000 -1000673a: f442 2220 orr.w r2, r2, #655360 ; 0xa0000 -1000673e: e00a b.n 10006756 -10006740: 4b0d ldr r3, [pc, #52] ; (10006778 ) -10006742: 681a ldr r2, [r3, #0] -10006744: f422 127c bic.w r2, r2, #4128768 ; 0x3f0000 -10006748: e005 b.n 10006756 -1000674a: 4b0b ldr r3, [pc, #44] ; (10006778 ) -1000674c: 681a ldr r2, [r3, #0] -1000674e: f422 127c bic.w r2, r2, #4128768 ; 0x3f0000 -10006752: f442 22a0 orr.w r2, r2, #327680 ; 0x50000 -10006756: 601a str r2, [r3, #0] -10006758: b003 add sp, #12 -1000675a: bd30 pop {r4, r5, pc} -1000675c: 40000014 .word 0x40000014 -10006760: 100021ec .word 0x100021ec -10006764: 00003081 .word 0x00003081 -10006768: 40006008 .word 0x40006008 -1000676c: 4000611c .word 0x4000611c -10006770: 40000300 .word 0x40000300 -10006774: 40006004 .word 0x40006004 -10006778: 40006000 .word 0x40006000 - -1000677c : -1000677c: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -10006780: 4b14 ldr r3, [pc, #80] ; (100067d4 ) -10006782: 4680 mov r8, r0 -10006784: 681b ldr r3, [r3, #0] -10006786: 460f mov r7, r1 -10006788: f413 5f80 tst.w r3, #4096 ; 0x1000 -1000678c: 466c mov r4, sp -1000678e: d005 beq.n 1000679c -10006790: 4811 ldr r0, [pc, #68] ; (100067d8 ) -10006792: 4912 ldr r1, [pc, #72] ; (100067dc ) -10006794: e89d 000c ldmia.w sp, {r2, r3} -10006798: 4d11 ldr r5, [pc, #68] ; (100067e0 ) -1000679a: 47a8 blx r5 -1000679c: 4b11 ldr r3, [pc, #68] ; (100067e4 ) -1000679e: 4d12 ldr r5, [pc, #72] ; (100067e8 ) -100067a0: 2600 movs r6, #0 -100067a2: 220c movs r2, #12 -100067a4: 602e str r6, [r5, #0] -100067a6: 601a str r2, [r3, #0] -100067a8: e894 0006 ldmia.w r4, {r1, r2} -100067ac: 204b movs r0, #75 ; 0x4b -100067ae: f7ff ff07 bl 100065c0 -100067b2: 4a0e ldr r2, [pc, #56] ; (100067ec ) -100067b4: 6813 ldr r3, [r2, #0] -100067b6: 4633 mov r3, r6 -100067b8: b2d9 uxtb r1, r3 -100067ba: 42b9 cmp r1, r7 -100067bc: d204 bcs.n 100067c8 -100067be: 7811 ldrb r1, [r2, #0] -100067c0: f808 1003 strb.w r1, [r8, r3] -100067c4: 3301 adds r3, #1 -100067c6: e7f7 b.n 100067b8 -100067c8: 2300 movs r3, #0 -100067ca: 602b str r3, [r5, #0] -100067cc: b002 add sp, #8 -100067ce: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100067d2: bf00 nop -100067d4: 10000310 .word 0x10000310 -100067d8: 100445d2 .word 0x100445d2 -100067dc: 1004459e .word 0x1004459e -100067e0: 0000f39d .word 0x0000f39d -100067e4: 40006004 .word 0x40006004 -100067e8: 40006008 .word 0x40006008 -100067ec: 40006060 .word 0x40006060 - -100067f0 : -100067f0: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} -100067f4: 4b38 ldr r3, [pc, #224] ; (100068d8 ) -100067f6: 466f mov r7, sp -100067f8: 681b ldr r3, [r3, #0] -100067fa: f413 5f80 tst.w r3, #4096 ; 0x1000 -100067fe: d010 beq.n 10006822 -10006800: 2400 movs r4, #0 -10006802: f88d 4004 strb.w r4, [sp, #4] -10006806: f88d 4005 strb.w r4, [sp, #5] -1000680a: f88d 4006 strb.w r4, [sp, #6] -1000680e: f88d 4007 strb.w r4, [sp, #7] -10006812: 4832 ldr r0, [pc, #200] ; (100068dc ) -10006814: 4932 ldr r1, [pc, #200] ; (100068e0 ) -10006816: e89d 000c ldmia.w sp, {r2, r3} -1000681a: 4d32 ldr r5, [pc, #200] ; (100068e4 ) -1000681c: 46a0 mov r8, r4 -1000681e: 4626 mov r6, r4 -10006820: 47a8 blx r5 -10006822: 4b31 ldr r3, [pc, #196] ; (100068e8 ) -10006824: 4931 ldr r1, [pc, #196] ; (100068ec ) -10006826: 2200 movs r2, #0 -10006828: 2003 movs r0, #3 -1000682a: 601a str r2, [r3, #0] -1000682c: 4691 mov r9, r2 -1000682e: 6008 str r0, [r1, #0] -10006830: 469a mov sl, r3 -10006832: 2500 movs r5, #0 -10006834: f88d 4004 strb.w r4, [sp, #4] -10006838: f88d 8005 strb.w r8, [sp, #5] -1000683c: f88d 6006 strb.w r6, [sp, #6] -10006840: f88d 5007 strb.w r5, [sp, #7] -10006844: 209f movs r0, #159 ; 0x9f -10006846: e897 0006 ldmia.w r7, {r1, r2} -1000684a: f7ff feb9 bl 100065c0 -1000684e: 4b28 ldr r3, [pc, #160] ; (100068f0 ) -10006850: 681e ldr r6, [r3, #0] -10006852: b2f4 uxtb r4, r6 -10006854: 1e63 subs r3, r4, #1 -10006856: b2db uxtb r3, r3 -10006858: 2bfd cmp r3, #253 ; 0xfd -1000685a: f3c6 2807 ubfx r8, r6, #8, #8 -1000685e: f3c6 4607 ubfx r6, r6, #16, #8 -10006862: d80f bhi.n 10006884 -10006864: 2c20 cmp r4, #32 -10006866: d01d beq.n 100068a4 -10006868: 2cc2 cmp r4, #194 ; 0xc2 -1000686a: d104 bne.n 10006876 -1000686c: 2e18 cmp r6, #24 -1000686e: bf14 ite ne -10006870: 2501 movne r5, #1 -10006872: 2502 moveq r5, #2 -10006874: e019 b.n 100068aa -10006876: 2cef cmp r4, #239 ; 0xef -10006878: d016 beq.n 100068a8 -1000687a: 2c1c cmp r4, #28 -1000687c: bf14 ite ne -1000687e: 2500 movne r5, #0 -10006880: 2505 moveq r5, #5 -10006882: e012 b.n 100068aa -10006884: f1b9 0f02 cmp.w r9, #2 -10006888: d106 bne.n 10006898 -1000688a: 4b1a ldr r3, [pc, #104] ; (100068f4 ) -1000688c: 681b ldr r3, [r3, #0] -1000688e: 005b lsls r3, r3, #1 -10006890: d502 bpl.n 10006898 -10006892: 4819 ldr r0, [pc, #100] ; (100068f8 ) -10006894: 4b13 ldr r3, [pc, #76] ; (100068e4 ) -10006896: 4798 blx r3 -10006898: f109 0901 add.w r9, r9, #1 -1000689c: f1b9 0f03 cmp.w r9, #3 -100068a0: d1c7 bne.n 10006832 -100068a2: e002 b.n 100068aa -100068a4: 2504 movs r5, #4 -100068a6: e000 b.n 100068aa -100068a8: 2503 movs r5, #3 -100068aa: 4b14 ldr r3, [pc, #80] ; (100068fc ) -100068ac: f103 0190 add.w r1, r3, #144 ; 0x90 -100068b0: f103 0230 add.w r2, r3, #48 ; 0x30 -100068b4: f803 4c01 strb.w r4, [r3, #-1] -100068b8: f883 8000 strb.w r8, [r3] -100068bc: 705e strb r6, [r3, #1] -100068be: 709d strb r5, [r3, #2] -100068c0: 3308 adds r3, #8 -100068c2: 4293 cmp r3, r2 -100068c4: d1f6 bne.n 100068b4 -100068c6: 428b cmp r3, r1 -100068c8: d1f2 bne.n 100068b0 -100068ca: 2300 movs r3, #0 -100068cc: f8ca 3000 str.w r3, [sl] -100068d0: b002 add sp, #8 -100068d2: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -100068d6: bf00 nop -100068d8: 10000310 .word 0x10000310 -100068dc: 100445d2 .word 0x100445d2 -100068e0: 10044967 .word 0x10044967 -100068e4: 0000f39d .word 0x0000f39d -100068e8: 40006008 .word 0x40006008 -100068ec: 40006004 .word 0x40006004 -100068f0: 40006060 .word 0x40006060 -100068f4: 10000314 .word 0x10000314 -100068f8: 100445e7 .word 0x100445e7 -100068fc: 100021f1 .word 0x100021f1 - -10006900 : -10006900: 4b17 ldr r3, [pc, #92] ; (10006960 ) -10006902: 2200 movs r2, #0 -10006904: 601a str r2, [r3, #0] -10006906: f503 738c add.w r3, r3, #280 ; 0x118 -1000690a: 681a ldr r2, [r3, #0] -1000690c: 2801 cmp r0, #1 -1000690e: f422 72ff bic.w r2, r2, #510 ; 0x1fe -10006912: 601a str r2, [r3, #0] -10006914: d10b bne.n 1000692e -10006916: 4a13 ldr r2, [pc, #76] ; (10006964 ) -10006918: 21a2 movs r1, #162 ; 0xa2 -1000691a: 6011 str r1, [r2, #0] -1000691c: 213b movs r1, #59 ; 0x3b -1000691e: f842 1c14 str.w r1, [r2, #-20] -10006922: 681a ldr r2, [r3, #0] -10006924: f442 7200 orr.w r2, r2, #512 ; 0x200 -10006928: f042 0202 orr.w r2, r2, #2 -1000692c: e016 b.n 1000695c -1000692e: 2802 cmp r0, #2 -10006930: d115 bne.n 1000695e -10006932: 4a0d ldr r2, [pc, #52] ; (10006968 ) -10006934: 2138 movs r1, #56 ; 0x38 -10006936: 6011 str r1, [r2, #0] -10006938: 21eb movs r1, #235 ; 0xeb -1000693a: f842 1c14 str.w r1, [r2, #-20] -1000693e: 2132 movs r1, #50 ; 0x32 -10006940: f842 1c04 str.w r1, [r2, #-4] -10006944: 216b movs r1, #107 ; 0x6b -10006946: f842 1c18 str.w r1, [r2, #-24] -1000694a: 4a08 ldr r2, [pc, #32] ; (1000696c ) -1000694c: 79d2 ldrb r2, [r2, #7] -1000694e: 2a02 cmp r2, #2 -10006950: 681a ldr r2, [r3, #0] -10006952: bf0c ite eq -10006954: f442 7202 orreq.w r2, r2, #520 ; 0x208 -10006958: f442 7204 orrne.w r2, r2, #528 ; 0x210 -1000695c: 601a str r2, [r3, #0] -1000695e: 4770 bx lr -10006960: 40006008 .word 0x40006008 -10006964: 400060fc .word 0x400060fc -10006968: 40006104 .word 0x40006104 -1000696c: 100021ec .word 0x100021ec - -10006970 : -10006970: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10006974: 4604 mov r4, r0 -10006976: 4854 ldr r0, [pc, #336] ; (10006ac8 ) -10006978: 4690 mov r8, r2 -1000697a: 2200 movs r2, #0 -1000697c: 6002 str r2, [r0, #0] -1000697e: 4a53 ldr r2, [pc, #332] ; (10006acc ) -10006980: f011 0703 ands.w r7, r1, #3 -10006984: 460d mov r5, r1 -10006986: bf18 it ne -10006988: ebc7 0501 rsbne r5, r7, r1 -1000698c: 6811 ldr r1, [r2, #0] -1000698e: 2b01 cmp r3, #1 -10006990: f421 2170 bic.w r1, r1, #983040 ; 0xf0000 -10006994: f421 7140 bic.w r1, r1, #768 ; 0x300 -10006998: f441 7140 orr.w r1, r1, #768 ; 0x300 -1000699c: 6011 str r1, [r2, #0] -1000699e: b085 sub sp, #20 -100069a0: 4682 mov sl, r0 -100069a2: 6813 ldr r3, [r2, #0] -100069a4: d105 bne.n 100069b2 -100069a6: f443 2380 orr.w r3, r3, #262144 ; 0x40000 -100069aa: 6013 str r3, [r2, #0] -100069ac: f04f 0b3b mov.w fp, #59 ; 0x3b -100069b0: e002 b.n 100069b8 -100069b2: 6013 str r3, [r2, #0] -100069b4: f04f 0b03 mov.w fp, #3 -100069b8: f3c5 2307 ubfx r3, r5, #8, #8 -100069bc: f3c5 4107 ubfx r1, r5, #16, #8 -100069c0: 041b lsls r3, r3, #16 -100069c2: ea43 2101 orr.w r1, r3, r1, lsl #8 -100069c6: ea41 6105 orr.w r1, r1, r5, lsl #24 -100069ca: ea41 010b orr.w r1, r1, fp -100069ce: f8df 9110 ldr.w r9, [pc, #272] ; 10006ae0 -100069d2: b127 cbz r7, 100069de -100069d4: 2c20 cmp r4, #32 -100069d6: d904 bls.n 100069e2 -100069d8: f107 031c add.w r3, r7, #28 -100069dc: e005 b.n 100069ea -100069de: 2c20 cmp r4, #32 -100069e0: d802 bhi.n 100069e8 -100069e2: f8c9 4000 str.w r4, [r9] -100069e6: e002 b.n 100069ee -100069e8: 2320 movs r3, #32 -100069ea: f8c9 3000 str.w r3, [r9] -100069ee: 4b38 ldr r3, [pc, #224] ; (10006ad0 ) -100069f0: 2203 movs r2, #3 -100069f2: 601a str r2, [r3, #0] -100069f4: 4a37 ldr r2, [pc, #220] ; (10006ad4 ) -100069f6: 2301 movs r3, #1 -100069f8: 6013 str r3, [r2, #0] -100069fa: 4e37 ldr r6, [pc, #220] ; (10006ad8 ) -100069fc: 6511 str r1, [r2, #80] ; 0x50 -100069fe: 3250 adds r2, #80 ; 0x50 -10006a00: f8ca 3000 str.w r3, [sl] -10006a04: 9200 str r2, [sp, #0] -10006a06: 47b0 blx r6 -10006a08: 9a00 ldr r2, [sp, #0] -10006a0a: 4631 mov r1, r6 -10006a0c: b1af cbz r7, 10006a3a -10006a0e: 6813 ldr r3, [r2, #0] -10006a10: 4646 mov r6, r8 -10006a12: 9303 str r3, [sp, #12] -10006a14: ebc8 0306 rsb r3, r8, r6 -10006a18: b2db uxtb r3, r3 -10006a1a: f1c7 0004 rsb r0, r7, #4 -10006a1e: 4283 cmp r3, r0 -10006a20: d207 bcs.n 10006a32 -10006a22: a804 add r0, sp, #16 -10006a24: 4438 add r0, r7 -10006a26: 4403 add r3, r0 -10006a28: f813 3c04 ldrb.w r3, [r3, #-4] -10006a2c: f806 3b01 strb.w r3, [r6], #1 -10006a30: e7f0 b.n 10006a14 -10006a32: 3c04 subs r4, #4 -10006a34: 443c add r4, r7 -10006a36: b2ff uxtb r7, r7 -10006a38: e007 b.n 10006a4a -10006a3a: 4646 mov r6, r8 -10006a3c: e005 b.n 10006a4a -10006a3e: f846 3b04 str.w r3, [r6], #4 -10006a42: 3704 adds r7, #4 -10006a44: 3c04 subs r4, #4 -10006a46: b2ff uxtb r7, r7 -10006a48: 46b0 mov r8, r6 -10006a4a: 2c00 cmp r4, #0 -10006a4c: d033 beq.n 10006ab6 -10006a4e: 2f1c cmp r7, #28 -10006a50: dd1f ble.n 10006a92 -10006a52: 443d add r5, r7 -10006a54: f3c5 4007 ubfx r0, r5, #16, #8 -10006a58: ea4b 6305 orr.w r3, fp, r5, lsl #24 -10006a5c: ea43 2300 orr.w r3, r3, r0, lsl #8 -10006a60: f3c5 2007 ubfx r0, r5, #8, #8 -10006a64: 2c1f cmp r4, #31 -10006a66: ea43 4300 orr.w r3, r3, r0, lsl #16 -10006a6a: f04f 0000 mov.w r0, #0 -10006a6e: f8ca 0000 str.w r0, [sl] -10006a72: bf8a itet hi -10006a74: 2020 movhi r0, #32 -10006a76: f8c9 4000 strls.w r4, [r9] -10006a7a: f8c9 0000 strhi.w r0, [r9] -10006a7e: 6013 str r3, [r2, #0] -10006a80: 2301 movs r3, #1 -10006a82: f8ca 3000 str.w r3, [sl] -10006a86: 9101 str r1, [sp, #4] -10006a88: 9200 str r2, [sp, #0] -10006a8a: 4788 blx r1 -10006a8c: 9a00 ldr r2, [sp, #0] -10006a8e: 9901 ldr r1, [sp, #4] -10006a90: 2700 movs r7, #0 -10006a92: 6813 ldr r3, [r2, #0] -10006a94: 2c03 cmp r4, #3 -10006a96: 9303 str r3, [sp, #12] -10006a98: d8d1 bhi.n 10006a3e -10006a9a: 4646 mov r6, r8 -10006a9c: ebc8 0306 rsb r3, r8, r6 -10006aa0: b2db uxtb r3, r3 -10006aa2: 42a3 cmp r3, r4 -10006aa4: d206 bcs.n 10006ab4 -10006aa6: aa04 add r2, sp, #16 -10006aa8: 4413 add r3, r2 -10006aaa: f813 3c04 ldrb.w r3, [r3, #-4] -10006aae: f806 3b01 strb.w r3, [r6], #1 -10006ab2: e7f3 b.n 10006a9c -10006ab4: 2400 movs r4, #0 -10006ab6: 4b09 ldr r3, [pc, #36] ; (10006adc ) -10006ab8: 2201 movs r2, #1 -10006aba: f8ca 4000 str.w r4, [sl] -10006abe: 601a str r2, [r3, #0] -10006ac0: b005 add sp, #20 -10006ac2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10006ac6: bf00 nop -10006ac8: 40006008 .word 0x40006008 -10006acc: 40006000 .word 0x40006000 -10006ad0: 40006118 .word 0x40006118 -10006ad4: 40006010 .word 0x40006010 -10006ad8: 00002ea5 .word 0x00002ea5 -10006adc: 40006128 .word 0x40006128 -10006ae0: 40006004 .word 0x40006004 - -10006ae4 : -10006ae4: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10006ae8: 4606 mov r6, r0 -10006aea: 460d mov r5, r1 -10006aec: f3c1 4007 ubfx r0, r1, #16, #8 -10006af0: f3c1 2707 ubfx r7, r1, #8, #8 -10006af4: 4939 ldr r1, [pc, #228] ; (10006bdc ) -10006af6: 4c3a ldr r4, [pc, #232] ; (10006be0 ) -10006af8: 4691 mov r9, r2 -10006afa: 2200 movs r2, #0 -10006afc: 600a str r2, [r1, #0] -10006afe: 6822 ldr r2, [r4, #0] -10006b00: 2b01 cmp r3, #1 -10006b02: f422 2270 bic.w r2, r2, #983040 ; 0xf0000 -10006b06: f422 7240 bic.w r2, r2, #768 ; 0x300 -10006b0a: f442 7240 orr.w r2, r2, #768 ; 0x300 -10006b0e: 6022 str r2, [r4, #0] -10006b10: 4688 mov r8, r1 -10006b12: d105 bne.n 10006b20 -10006b14: 6823 ldr r3, [r4, #0] -10006b16: f443 2380 orr.w r3, r3, #262144 ; 0x40000 -10006b1a: 6023 str r3, [r4, #0] -10006b1c: 243b movs r4, #59 ; 0x3b -10006b1e: e012 b.n 10006b46 -10006b20: b91b cbnz r3, 10006b2a -10006b22: 6823 ldr r3, [r4, #0] -10006b24: 6023 str r3, [r4, #0] -10006b26: 2403 movs r4, #3 -10006b28: e00d b.n 10006b46 -10006b2a: 4b2e ldr r3, [pc, #184] ; (10006be4 ) -10006b2c: 79db ldrb r3, [r3, #7] -10006b2e: 2b02 cmp r3, #2 -10006b30: 6823 ldr r3, [r4, #0] -10006b32: d104 bne.n 10006b3e -10006b34: f443 2300 orr.w r3, r3, #524288 ; 0x80000 -10006b38: 6023 str r3, [r4, #0] -10006b3a: 246b movs r4, #107 ; 0x6b -10006b3c: e003 b.n 10006b46 -10006b3e: f443 2320 orr.w r3, r3, #655360 ; 0xa0000 -10006b42: 6023 str r3, [r4, #0] -10006b44: 24eb movs r4, #235 ; 0xeb -10006b46: 2e1f cmp r6, #31 -10006b48: ea4f 4207 mov.w r2, r7, lsl #16 -10006b4c: 4f26 ldr r7, [pc, #152] ; (10006be8 ) -10006b4e: bf84 itt hi -10006b50: 2320 movhi r3, #32 -10006b52: 603b strhi r3, [r7, #0] -10006b54: 4b25 ldr r3, [pc, #148] ; (10006bec ) -10006b56: ea42 2200 orr.w r2, r2, r0, lsl #8 -10006b5a: f04f 0103 mov.w r1, #3 -10006b5e: bf98 it ls -10006b60: 603e strls r6, [r7, #0] -10006b62: ea42 6205 orr.w r2, r2, r5, lsl #24 -10006b66: 6019 str r1, [r3, #0] -10006b68: f8df a08c ldr.w sl, [pc, #140] ; 10006bf8 -10006b6c: 4920 ldr r1, [pc, #128] ; (10006bf0 ) -10006b6e: 2301 movs r3, #1 -10006b70: 4322 orrs r2, r4 -10006b72: 600b str r3, [r1, #0] -10006b74: f8df b084 ldr.w fp, [pc, #132] ; 10006bfc -10006b78: f8ca 2000 str.w r2, [sl] -10006b7c: f8c8 3000 str.w r3, [r8] -10006b80: 47d8 blx fp -10006b82: 2300 movs r3, #0 -10006b84: b326 cbz r6, 10006bd0 -10006b86: 2b20 cmp r3, #32 -10006b88: d11b bne.n 10006bc2 -10006b8a: 3520 adds r5, #32 -10006b8c: f3c5 4107 ubfx r1, r5, #16, #8 -10006b90: ea44 6205 orr.w r2, r4, r5, lsl #24 -10006b94: ea42 2201 orr.w r2, r2, r1, lsl #8 -10006b98: f3c5 2107 ubfx r1, r5, #8, #8 -10006b9c: ea42 4201 orr.w r2, r2, r1, lsl #16 -10006ba0: 2e1f cmp r6, #31 -10006ba2: f04f 0100 mov.w r1, #0 -10006ba6: f8c8 1000 str.w r1, [r8] -10006baa: bf88 it hi -10006bac: 603b strhi r3, [r7, #0] -10006bae: f04f 0301 mov.w r3, #1 -10006bb2: bf98 it ls -10006bb4: 603e strls r6, [r7, #0] -10006bb6: f8ca 2000 str.w r2, [sl] -10006bba: f8c8 3000 str.w r3, [r8] -10006bbe: 47d8 blx fp -10006bc0: 2300 movs r3, #0 -10006bc2: f8da 2000 ldr.w r2, [sl] -10006bc6: 3304 adds r3, #4 -10006bc8: f849 2b04 str.w r2, [r9], #4 -10006bcc: 3e04 subs r6, #4 -10006bce: e7d9 b.n 10006b84 -10006bd0: 4b08 ldr r3, [pc, #32] ; (10006bf4 ) -10006bd2: 2201 movs r2, #1 -10006bd4: 601a str r2, [r3, #0] -10006bd6: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -10006bda: bf00 nop -10006bdc: 40006008 .word 0x40006008 -10006be0: 40006000 .word 0x40006000 -10006be4: 100021ec .word 0x100021ec -10006be8: 40006004 .word 0x40006004 -10006bec: 40006118 .word 0x40006118 -10006bf0: 40006010 .word 0x40006010 -10006bf4: 40006128 .word 0x40006128 -10006bf8: 40006060 .word 0x40006060 -10006bfc: 00002ea5 .word 0x00002ea5 - -10006c00 : -10006c00: b573 push {r0, r1, r4, r5, r6, lr} -10006c02: 4b0e ldr r3, [pc, #56] ; (10006c3c ) -10006c04: 466c mov r4, sp -10006c06: 681b ldr r3, [r3, #0] -10006c08: e88d 0003 stmia.w sp, {r0, r1} -10006c0c: 04db lsls r3, r3, #19 -10006c0e: d505 bpl.n 10006c1c -10006c10: 480b ldr r0, [pc, #44] ; (10006c40 ) -10006c12: 490c ldr r1, [pc, #48] ; (10006c44 ) -10006c14: e89d 000c ldmia.w sp, {r2, r3} -10006c18: 4d0b ldr r5, [pc, #44] ; (10006c48 ) -10006c1a: 47a8 blx r5 -10006c1c: 4d0b ldr r5, [pc, #44] ; (10006c4c ) -10006c1e: 4b0c ldr r3, [pc, #48] ; (10006c50 ) -10006c20: 2600 movs r6, #0 -10006c22: 2201 movs r2, #1 -10006c24: 602e str r6, [r5, #0] -10006c26: 601a str r2, [r3, #0] -10006c28: 20c8 movs r0, #200 ; 0xc8 -10006c2a: e894 0006 ldmia.w r4, {r1, r2} -10006c2e: f7ff fcc7 bl 100065c0 -10006c32: 4b08 ldr r3, [pc, #32] ; (10006c54 ) -10006c34: 7818 ldrb r0, [r3, #0] -10006c36: 602e str r6, [r5, #0] -10006c38: b002 add sp, #8 -10006c3a: bd70 pop {r4, r5, r6, pc} -10006c3c: 10000310 .word 0x10000310 -10006c40: 100445d2 .word 0x100445d2 -10006c44: 10044993 .word 0x10044993 -10006c48: 0000f39d .word 0x0000f39d -10006c4c: 40006008 .word 0x40006008 -10006c50: 40006004 .word 0x40006004 -10006c54: 40006060 .word 0x40006060 - -10006c58 : -10006c58: b573 push {r0, r1, r4, r5, r6, lr} -10006c5a: 4b0e ldr r3, [pc, #56] ; (10006c94 ) -10006c5c: 466c mov r4, sp -10006c5e: 681b ldr r3, [r3, #0] -10006c60: e88d 0003 stmia.w sp, {r0, r1} -10006c64: 04db lsls r3, r3, #19 -10006c66: d505 bpl.n 10006c74 -10006c68: 480b ldr r0, [pc, #44] ; (10006c98 ) -10006c6a: 490c ldr r1, [pc, #48] ; (10006c9c ) -10006c6c: e89d 000c ldmia.w sp, {r2, r3} -10006c70: 4d0b ldr r5, [pc, #44] ; (10006ca0 ) -10006c72: 47a8 blx r5 -10006c74: 4d0b ldr r5, [pc, #44] ; (10006ca4 ) -10006c76: 4b0c ldr r3, [pc, #48] ; (10006ca8 ) -10006c78: 2600 movs r6, #0 -10006c7a: 2201 movs r2, #1 -10006c7c: 602e str r6, [r5, #0] -10006c7e: 601a str r2, [r3, #0] -10006c80: 2015 movs r0, #21 -10006c82: e894 0006 ldmia.w r4, {r1, r2} -10006c86: f7ff fc9b bl 100065c0 -10006c8a: 4b08 ldr r3, [pc, #32] ; (10006cac ) -10006c8c: 7818 ldrb r0, [r3, #0] -10006c8e: 602e str r6, [r5, #0] -10006c90: b002 add sp, #8 -10006c92: bd70 pop {r4, r5, r6, pc} -10006c94: 10000310 .word 0x10000310 -10006c98: 100445d2 .word 0x100445d2 -10006c9c: 100449cc .word 0x100449cc -10006ca0: 0000f39d .word 0x0000f39d -10006ca4: 40006008 .word 0x40006008 -10006ca8: 40006004 .word 0x40006004 -10006cac: 40006060 .word 0x40006060 - -10006cb0 : -10006cb0: b573 push {r0, r1, r4, r5, r6, lr} -10006cb2: 4b0e ldr r3, [pc, #56] ; (10006cec ) -10006cb4: 466c mov r4, sp -10006cb6: 681b ldr r3, [r3, #0] -10006cb8: e88d 0003 stmia.w sp, {r0, r1} -10006cbc: 04db lsls r3, r3, #19 -10006cbe: d505 bpl.n 10006ccc -10006cc0: 480b ldr r0, [pc, #44] ; (10006cf0 ) -10006cc2: 490c ldr r1, [pc, #48] ; (10006cf4 ) -10006cc4: e89d 000c ldmia.w sp, {r2, r3} -10006cc8: 4d0b ldr r5, [pc, #44] ; (10006cf8 ) -10006cca: 47a8 blx r5 -10006ccc: 4d0b ldr r5, [pc, #44] ; (10006cfc ) -10006cce: 4b0c ldr r3, [pc, #48] ; (10006d00 ) -10006cd0: 2600 movs r6, #0 -10006cd2: 2201 movs r2, #1 -10006cd4: 602e str r6, [r5, #0] -10006cd6: 601a str r2, [r3, #0] -10006cd8: 2005 movs r0, #5 -10006cda: e894 0006 ldmia.w r4, {r1, r2} -10006cde: f7ff fc6f bl 100065c0 -10006ce2: 4b08 ldr r3, [pc, #32] ; (10006d04 ) -10006ce4: 7818 ldrb r0, [r3, #0] -10006ce6: 602e str r6, [r5, #0] -10006ce8: b002 add sp, #8 -10006cea: bd70 pop {r4, r5, r6, pc} -10006cec: 10000310 .word 0x10000310 -10006cf0: 100445d2 .word 0x100445d2 -10006cf4: 1004457c .word 0x1004457c -10006cf8: 0000f39d .word 0x0000f39d -10006cfc: 40006008 .word 0x40006008 -10006d00: 40006004 .word 0x40006004 -10006d04: 40006060 .word 0x40006060 - -10006d08 : -10006d08: b537 push {r0, r1, r2, r4, r5, lr} -10006d0a: 4b0a ldr r3, [pc, #40] ; (10006d34 ) -10006d0c: 466c mov r4, sp -10006d0e: 681b ldr r3, [r3, #0] -10006d10: e88d 0003 stmia.w sp, {r0, r1} -10006d14: 04da lsls r2, r3, #19 -10006d16: d505 bpl.n 10006d24 -10006d18: 4807 ldr r0, [pc, #28] ; (10006d38 ) -10006d1a: 4908 ldr r1, [pc, #32] ; (10006d3c ) -10006d1c: e89d 000c ldmia.w sp, {r2, r3} -10006d20: 4d07 ldr r5, [pc, #28] ; (10006d40 ) -10006d22: 47a8 blx r5 -10006d24: e894 0003 ldmia.w r4, {r0, r1} -10006d28: f7ff ffc2 bl 10006cb0 -10006d2c: 07c3 lsls r3, r0, #31 -10006d2e: d4f9 bmi.n 10006d24 -10006d30: b003 add sp, #12 -10006d32: bd30 pop {r4, r5, pc} -10006d34: 10000310 .word 0x10000310 -10006d38: 100445d2 .word 0x100445d2 -10006d3c: 100449ad .word 0x100449ad -10006d40: 0000f39d .word 0x0000f39d - -10006d44 : -10006d44: b082 sub sp, #8 -10006d46: b5f0 push {r4, r5, r6, r7, lr} -10006d48: b085 sub sp, #20 -10006d4a: 930b str r3, [sp, #44] ; 0x2c -10006d4c: 4b27 ldr r3, [pc, #156] ; (10006dec ) -10006d4e: 4615 mov r5, r2 -10006d50: 681b ldr r3, [r3, #0] -10006d52: 4606 mov r6, r0 -10006d54: 04da lsls r2, r3, #19 -10006d56: 460c mov r4, r1 -10006d58: d50d bpl.n 10006d76 -10006d5a: 466b mov r3, sp -10006d5c: f843 5b04 str.w r5, [r3], #4 -10006d60: aa0b add r2, sp, #44 ; 0x2c -10006d62: e892 0003 ldmia.w r2, {r0, r1} -10006d66: 4f22 ldr r7, [pc, #136] ; (10006df0 ) -10006d68: e883 0003 stmia.w r3, {r0, r1} -10006d6c: 4632 mov r2, r6 -10006d6e: 4821 ldr r0, [pc, #132] ; (10006df4 ) -10006d70: 4921 ldr r1, [pc, #132] ; (10006df8 ) -10006d72: 4623 mov r3, r4 -10006d74: 47b8 blx r7 -10006d76: 4b21 ldr r3, [pc, #132] ; (10006dfc ) -10006d78: 2200 movs r2, #0 -10006d7a: 2c0f cmp r4, #15 -10006d7c: 601a str r2, [r3, #0] -10006d7e: 461f mov r7, r3 -10006d80: d908 bls.n 10006d94 -10006d82: 4b1f ldr r3, [pc, #124] ; (10006e00 ) -10006d84: 681b ldr r3, [r3, #0] -10006d86: 04db lsls r3, r3, #19 -10006d88: d503 bpl.n 10006d92 -10006d8a: 481e ldr r0, [pc, #120] ; (10006e04 ) -10006d8c: 4621 mov r1, r4 -10006d8e: 4b18 ldr r3, [pc, #96] ; (10006df0 ) -10006d90: 4798 blx r3 -10006d92: 240f movs r4, #15 -10006d94: 4b1c ldr r3, [pc, #112] ; (10006e08 ) -10006d96: 4a1d ldr r2, [pc, #116] ; (10006e0c ) -10006d98: 601c str r4, [r3, #0] -10006d9a: 6813 ldr r3, [r2, #0] -10006d9c: 3260 adds r2, #96 ; 0x60 -10006d9e: f423 2370 bic.w r3, r3, #983040 ; 0xf0000 -10006da2: f423 7340 bic.w r3, r3, #768 ; 0x300 -10006da6: f842 3c60 str.w r3, [r2, #-96] -10006daa: 7016 strb r6, [r2, #0] -10006dac: 2300 movs r3, #0 -10006dae: b2d9 uxtb r1, r3 -10006db0: 42a1 cmp r1, r4 -10006db2: d203 bcs.n 10006dbc -10006db4: 5ce9 ldrb r1, [r5, r3] -10006db6: 3301 adds r3, #1 -10006db8: 7011 strb r1, [r2, #0] -10006dba: e7f8 b.n 10006dae -10006dbc: 2301 movs r3, #1 -10006dbe: 603b str r3, [r7, #0] -10006dc0: 4b13 ldr r3, [pc, #76] ; (10006e10 ) -10006dc2: 4798 blx r3 -10006dc4: 4b13 ldr r3, [pc, #76] ; (10006e14 ) -10006dc6: 79db ldrb r3, [r3, #7] -10006dc8: 2b04 cmp r3, #4 -10006dca: ab0b add r3, sp, #44 ; 0x2c -10006dcc: e893 0003 ldmia.w r3, {r0, r1} -10006dd0: d105 bne.n 10006dde -10006dd2: b005 add sp, #20 -10006dd4: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} -10006dd8: b002 add sp, #8 -10006dda: f000 b863 b.w 10006ea4 -10006dde: b005 add sp, #20 -10006de0: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} -10006de4: b002 add sp, #8 -10006de6: f7ff bf8f b.w 10006d08 -10006dea: bf00 nop -10006dec: 10000310 .word 0x10000310 -10006df0: 0000f39d .word 0x0000f39d -10006df4: 100445f4 .word 0x100445f4 -10006df8: 1004452b .word 0x1004452b -10006dfc: 40006008 .word 0x40006008 -10006e00: 1000030c .word 0x1000030c -10006e04: 1004461b .word 0x1004461b -10006e08: 40006118 .word 0x40006118 -10006e0c: 40006000 .word 0x40006000 -10006e10: 00002ea5 .word 0x00002ea5 -10006e14: 100021ec .word 0x100021ec - -10006e18 : -10006e18: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -10006e1a: 4b19 ldr r3, [pc, #100] ; (10006e80 ) -10006e1c: ac02 add r4, sp, #8 -10006e1e: 681b ldr r3, [r3, #0] -10006e20: e884 0003 stmia.w r4, {r0, r1} -10006e24: 04d8 lsls r0, r3, #19 -10006e26: d505 bpl.n 10006e34 -10006e28: 4816 ldr r0, [pc, #88] ; (10006e84 ) -10006e2a: 4917 ldr r1, [pc, #92] ; (10006e88 ) -10006e2c: e894 000c ldmia.w r4, {r2, r3} -10006e30: 4d16 ldr r5, [pc, #88] ; (10006e8c ) -10006e32: 47a8 blx r5 -10006e34: 4b16 ldr r3, [pc, #88] ; (10006e90 ) -10006e36: 4d17 ldr r5, [pc, #92] ; (10006e94 ) -10006e38: 2600 movs r6, #0 -10006e3a: 2201 movs r2, #1 -10006e3c: 602e str r6, [r5, #0] -10006e3e: 601a str r2, [r3, #0] -10006e40: e894 0006 ldmia.w r4, {r1, r2} -10006e44: 2070 movs r0, #112 ; 0x70 -10006e46: f7ff fbbb bl 100065c0 -10006e4a: 4b13 ldr r3, [pc, #76] ; (10006e98 ) -10006e4c: 781c ldrb r4, [r3, #0] -10006e4e: 602e str r6, [r5, #0] -10006e50: b2e4 uxtb r4, r4 -10006e52: 07a1 lsls r1, r4, #30 -10006e54: d510 bpl.n 10006e78 -10006e56: 0622 lsls r2, r4, #24 -10006e58: d506 bpl.n 10006e68 -10006e5a: 4b10 ldr r3, [pc, #64] ; (10006e9c ) -10006e5c: 681b ldr r3, [r3, #0] -10006e5e: 04db lsls r3, r3, #19 -10006e60: d502 bpl.n 10006e68 -10006e62: 480f ldr r0, [pc, #60] ; (10006ea0 ) -10006e64: 4b09 ldr r3, [pc, #36] ; (10006e8c ) -10006e66: 4798 blx r3 -10006e68: 9b03 ldr r3, [sp, #12] -10006e6a: 2100 movs r1, #0 -10006e6c: 9300 str r3, [sp, #0] -10006e6e: 2050 movs r0, #80 ; 0x50 -10006e70: 9b02 ldr r3, [sp, #8] -10006e72: 460a mov r2, r1 -10006e74: f7ff ff66 bl 10006d44 -10006e78: 4620 mov r0, r4 -10006e7a: b004 add sp, #16 -10006e7c: bd70 pop {r4, r5, r6, pc} -10006e7e: bf00 nop -10006e80: 10000310 .word 0x10000310 -10006e84: 100445d2 .word 0x100445d2 -10006e88: 10044545 .word 0x10044545 -10006e8c: 0000f39d .word 0x0000f39d -10006e90: 40006004 .word 0x40006004 -10006e94: 40006008 .word 0x40006008 -10006e98: 40006060 .word 0x40006060 -10006e9c: 1000030c .word 0x1000030c -10006ea0: 10044657 .word 0x10044657 - -10006ea4 : -10006ea4: b537 push {r0, r1, r2, r4, r5, lr} -10006ea6: 4b0a ldr r3, [pc, #40] ; (10006ed0 ) -10006ea8: 466c mov r4, sp -10006eaa: 681b ldr r3, [r3, #0] -10006eac: e88d 0003 stmia.w sp, {r0, r1} -10006eb0: 04da lsls r2, r3, #19 -10006eb2: d505 bpl.n 10006ec0 -10006eb4: 4807 ldr r0, [pc, #28] ; (10006ed4 ) -10006eb6: 4908 ldr r1, [pc, #32] ; (10006ed8 ) -10006eb8: e89d 000c ldmia.w sp, {r2, r3} -10006ebc: 4d07 ldr r5, [pc, #28] ; (10006edc ) -10006ebe: 47a8 blx r5 -10006ec0: e894 0003 ldmia.w r4, {r0, r1} -10006ec4: f7ff ffa8 bl 10006e18 -10006ec8: 0603 lsls r3, r0, #24 -10006eca: d5f9 bpl.n 10006ec0 -10006ecc: b003 add sp, #12 -10006ece: bd30 pop {r4, r5, pc} -10006ed0: 10000310 .word 0x10000310 -10006ed4: 100445d2 .word 0x100445d2 -10006ed8: 1004455e .word 0x1004455e -10006edc: 0000f39d .word 0x0000f39d - -10006ee0 : -10006ee0: 4b18 ldr r3, [pc, #96] ; (10006f44 ) -10006ee2: b507 push {r0, r1, r2, lr} -10006ee4: 681b ldr r3, [r3, #0] -10006ee6: 019a lsls r2, r3, #6 -10006ee8: d528 bpl.n 10006f3c -10006eea: 4b17 ldr r3, [pc, #92] ; (10006f48 ) -10006eec: 681b ldr r3, [r3, #0] -10006eee: f3c3 1303 ubfx r3, r3, #4, #4 -10006ef2: 2b01 cmp r3, #1 -10006ef4: d922 bls.n 10006f3c -10006ef6: 4b15 ldr r3, [pc, #84] ; (10006f4c ) -10006ef8: 681a ldr r2, [r3, #0] -10006efa: f042 0201 orr.w r2, r2, #1 -10006efe: 601a str r2, [r3, #0] -10006f00: ab02 add r3, sp, #8 -10006f02: e913 0003 ldmdb r3, {r0, r1} -10006f06: f7ff feff bl 10006d08 -10006f0a: 4b11 ldr r3, [pc, #68] ; (10006f50 ) -10006f0c: 681b ldr r3, [r3, #0] -10006f0e: 005b lsls r3, r3, #1 -10006f10: d502 bpl.n 10006f18 -10006f12: 4810 ldr r0, [pc, #64] ; (10006f54 ) -10006f14: 4b10 ldr r3, [pc, #64] ; (10006f58 ) -10006f16: 4798 blx r3 -10006f18: 4a10 ldr r2, [pc, #64] ; (10006f5c ) -10006f1a: 4911 ldr r1, [pc, #68] ; (10006f60 ) -10006f1c: 2300 movs r3, #0 -10006f1e: 6013 str r3, [r2, #0] -10006f20: 680b ldr r3, [r1, #0] -10006f22: 2014 movs r0, #20 -10006f24: f423 2370 bic.w r3, r3, #983040 ; 0xf0000 -10006f28: f423 7340 bic.w r3, r3, #768 ; 0x300 -10006f2c: 600b str r3, [r1, #0] -10006f2e: 4b0d ldr r3, [pc, #52] ; (10006f64 ) -10006f30: 21b9 movs r1, #185 ; 0xb9 -10006f32: 7019 strb r1, [r3, #0] -10006f34: 2301 movs r3, #1 -10006f36: 6013 str r3, [r2, #0] -10006f38: 4b0b ldr r3, [pc, #44] ; (10006f68 ) -10006f3a: 4798 blx r3 -10006f3c: b003 add sp, #12 -10006f3e: f85d fb04 ldr.w pc, [sp], #4 -10006f42: bf00 nop -10006f44: 40000038 .word 0x40000038 -10006f48: 400001f0 .word 0x400001f0 -10006f4c: 400002c0 .word 0x400002c0 -10006f50: 10000314 .word 0x10000314 -10006f54: 1004468f .word 0x1004468f -10006f58: 0000f39d .word 0x0000f39d -10006f5c: 40006008 .word 0x40006008 -10006f60: 40006000 .word 0x40006000 -10006f64: 40006060 .word 0x40006060 -10006f68: 00000899 .word 0x00000899 - -10006f6c : -10006f6c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10006f70: b087 sub sp, #28 -10006f72: ae02 add r6, sp, #8 -10006f74: e886 0006 stmia.w r6, {r1, r2} -10006f78: 4605 mov r5, r0 -10006f7a: 2200 movs r2, #0 -10006f7c: 9810 ldr r0, [sp, #64] ; 0x40 -10006f7e: 9204 str r2, [sp, #16] -10006f80: 9205 str r2, [sp, #20] -10006f82: f013 02ff ands.w r2, r3, #255 ; 0xff -10006f86: 6801 ldr r1, [r0, #0] -10006f88: d007 beq.n 10006f9a -10006f8a: 29ff cmp r1, #255 ; 0xff -10006f8c: d802 bhi.n 10006f94 -10006f8e: 188c adds r4, r1, r2 -10006f90: 2cff cmp r4, #255 ; 0xff -10006f92: d909 bls.n 10006fa8 -10006f94: f5c2 7280 rsb r2, r2, #256 ; 0x100 -10006f98: e007 b.n 10006faa -10006f9a: f5b1 7f80 cmp.w r1, #256 ; 0x100 -10006f9e: bf34 ite cc -10006fa0: 460a movcc r2, r1 -10006fa2: f44f 7280 movcs.w r2, #256 ; 0x100 -10006fa6: e000 b.n 10006faa -10006fa8: 460a mov r2, r1 -10006faa: 1a89 subs r1, r1, r2 -10006fac: f013 0a03 ands.w sl, r3, #3 -10006fb0: 6001 str r1, [r0, #0] -10006fb2: d01c beq.n 10006fee -10006fb4: fa5f f08a uxtb.w r0, sl -10006fb8: 1a1b subs r3, r3, r0 -10006fba: f103 4118 add.w r1, r3, #2550136832 ; 0x98000000 -10006fbe: 6809 ldr r1, [r1, #0] -10006fc0: ac06 add r4, sp, #24 -10006fc2: f844 1d08 str.w r1, [r4, #-8]! -10006fc6: f1c0 0a04 rsb sl, r0, #4 -10006fca: 4420 add r0, r4 -10006fcc: fa5f fa8a uxtb.w sl, sl -10006fd0: 4629 mov r1, r5 -10006fd2: 3801 subs r0, #1 -10006fd4: 4614 mov r4, r2 -10006fd6: f811 7b01 ldrb.w r7, [r1], #1 -10006fda: 3c01 subs r4, #1 -10006fdc: f800 7f01 strb.w r7, [r0, #1]! -10006fe0: 468b mov fp, r1 -10006fe2: d013 beq.n 1000700c -10006fe4: 1b17 subs r7, r2, r4 -10006fe6: b2ff uxtb r7, r7 -10006fe8: 4557 cmp r7, sl -10006fea: d3f4 bcc.n 10006fd6 -10006fec: e00e b.n 1000700c -10006fee: 2a03 cmp r2, #3 -10006ff0: d90a bls.n 10007008 -10006ff2: 78a9 ldrb r1, [r5, #2] -10006ff4: 7868 ldrb r0, [r5, #1] -10006ff6: 0409 lsls r1, r1, #16 -10006ff8: ea41 2100 orr.w r1, r1, r0, lsl #8 -10006ffc: 7828 ldrb r0, [r5, #0] -10006ffe: 4301 orrs r1, r0 -10007000: 78e8 ldrb r0, [r5, #3] -10007002: ea41 6100 orr.w r1, r1, r0, lsl #24 -10007006: 9104 str r1, [sp, #16] -10007008: 46ab mov fp, r5 -1000700a: 4614 mov r4, r2 -1000700c: f014 0103 ands.w r1, r4, #3 -10007010: d01f beq.n 10007052 -10007012: 191a adds r2, r3, r4 -10007014: b2c9 uxtb r1, r1 -10007016: f102 4218 add.w r2, r2, #2550136832 ; 0x98000000 -1000701a: f1ba 0f00 cmp.w sl, #0 -1000701e: d000 beq.n 10007022 -10007020: 3204 adds r2, #4 -10007022: 1a52 subs r2, r2, r1 -10007024: 6812 ldr r2, [r2, #0] -10007026: 2000 movs r0, #0 -10007028: 9205 str r2, [sp, #20] -1000702a: 1a62 subs r2, r4, r1 -1000702c: 4493 add fp, r2 -1000702e: b2c2 uxtb r2, r0 -10007030: 428a cmp r2, r1 -10007032: d205 bcs.n 10007040 -10007034: f81b 7000 ldrb.w r7, [fp, r0] -10007038: aa05 add r2, sp, #20 -1000703a: 5487 strb r7, [r0, r2] -1000703c: 3001 adds r0, #1 -1000703e: e7f6 b.n 1000702e -10007040: 448b add fp, r1 -10007042: f1ba 0f00 cmp.w sl, #0 -10007046: d104 bne.n 10007052 -10007048: 2c03 cmp r4, #3 -1000704a: d802 bhi.n 10007052 -1000704c: 9a05 ldr r2, [sp, #20] -1000704e: 4654 mov r4, sl -10007050: 9204 str r2, [sp, #16] -10007052: ea4f 6803 mov.w r8, r3, lsl #24 -10007056: f3c3 4207 ubfx r2, r3, #16, #8 -1000705a: f048 0802 orr.w r8, r8, #2 -1000705e: ea48 2802 orr.w r8, r8, r2, lsl #8 -10007062: f3c3 2307 ubfx r3, r3, #8, #8 -10007066: 4f48 ldr r7, [pc, #288] ; (10007188 ) -10007068: ea48 4803 orr.w r8, r8, r3, lsl #16 -1000706c: 9b03 ldr r3, [sp, #12] -1000706e: 2100 movs r1, #0 -10007070: f8d7 9000 ldr.w r9, [r7] -10007074: 460a mov r2, r1 -10007076: 9300 str r3, [sp, #0] -10007078: 2006 movs r0, #6 -1000707a: 9b02 ldr r3, [sp, #8] -1000707c: f7ff fe62 bl 10006d44 -10007080: 4a42 ldr r2, [pc, #264] ; (1000718c ) -10007082: 2300 movs r3, #0 -10007084: 6013 str r3, [r2, #0] -10007086: 4b42 ldr r3, [pc, #264] ; (10007190 ) -10007088: 6819 ldr r1, [r3, #0] -1000708a: f421 7140 bic.w r1, r1, #768 ; 0x300 -1000708e: 6019 str r1, [r3, #0] -10007090: 2303 movs r3, #3 -10007092: 603b str r3, [r7, #0] -10007094: 4b3f ldr r3, [pc, #252] ; (10007194 ) -10007096: f8c3 8000 str.w r8, [r3] -1000709a: 9904 ldr r1, [sp, #16] -1000709c: 46b8 mov r8, r7 -1000709e: 6019 str r1, [r3, #0] -100070a0: 4617 mov r7, r2 -100070a2: 469e mov lr, r3 -100070a4: f1ba 0f00 cmp.w sl, #0 -100070a8: d105 bne.n 100070b6 -100070aa: 2c03 cmp r4, #3 -100070ac: d905 bls.n 100070ba -100070ae: f105 0b04 add.w fp, r5, #4 -100070b2: 3c04 subs r4, #4 -100070b4: e001 b.n 100070ba -100070b6: eb05 0b0a add.w fp, r5, sl -100070ba: 465a mov r2, fp -100070bc: f10b 0104 add.w r1, fp, #4 -100070c0: f10b 0518 add.w r5, fp, #24 -100070c4: 2c04 cmp r4, #4 -100070c6: 4613 mov r3, r2 -100070c8: d921 bls.n 1000710e -100070ca: f012 0f03 tst.w r2, #3 -100070ce: f1a4 0404 sub.w r4, r4, #4 -100070d2: d010 beq.n 100070f6 -100070d4: 7893 ldrb r3, [r2, #2] -100070d6: 7850 ldrb r0, [r2, #1] -100070d8: 041b lsls r3, r3, #16 -100070da: ea43 2300 orr.w r3, r3, r0, lsl #8 -100070de: f811 0c04 ldrb.w r0, [r1, #-4] -100070e2: 4303 orrs r3, r0 -100070e4: 78d0 ldrb r0, [r2, #3] -100070e6: ea43 6300 orr.w r3, r3, r0, lsl #24 -100070ea: 9304 str r3, [sp, #16] -100070ec: 4620 mov r0, r4 -100070ee: f8ce 3000 str.w r3, [lr] -100070f2: 460b mov r3, r1 -100070f4: e005 b.n 10007102 -100070f6: f851 0c04 ldr.w r0, [r1, #-4] -100070fa: 460b mov r3, r1 -100070fc: f8ce 0000 str.w r0, [lr] -10007100: 4620 mov r0, r4 -10007102: 3204 adds r2, #4 -10007104: 42aa cmp r2, r5 -10007106: f101 0104 add.w r1, r1, #4 -1000710a: d1db bne.n 100070c4 -1000710c: e000 b.n 10007110 -1000710e: 4620 mov r0, r4 -10007110: 2201 movs r2, #1 -10007112: f013 0f03 tst.w r3, #3 -10007116: 603a str r2, [r7, #0] -10007118: eb03 0200 add.w r2, r3, r0 -1000711c: d012 beq.n 10007144 -1000711e: 1ad1 subs r1, r2, r3 -10007120: 2903 cmp r1, #3 -10007122: d917 bls.n 10007154 -10007124: 7899 ldrb r1, [r3, #2] -10007126: 785c ldrb r4, [r3, #1] -10007128: 0409 lsls r1, r1, #16 -1000712a: ea41 2104 orr.w r1, r1, r4, lsl #8 -1000712e: 781c ldrb r4, [r3, #0] -10007130: 3304 adds r3, #4 -10007132: 4321 orrs r1, r4 -10007134: f813 4c01 ldrb.w r4, [r3, #-1] -10007138: ea41 6104 orr.w r1, r1, r4, lsl #24 -1000713c: 9104 str r1, [sp, #16] -1000713e: f8ce 1000 str.w r1, [lr] -10007142: e7ec b.n 1000711e -10007144: 1ad1 subs r1, r2, r3 -10007146: 2903 cmp r1, #3 -10007148: d904 bls.n 10007154 -1000714a: f853 1b04 ldr.w r1, [r3], #4 -1000714e: f8ce 1000 str.w r1, [lr] -10007152: e7f7 b.n 10007144 -10007154: f000 0003 and.w r0, r0, #3 -10007158: b110 cbz r0, 10007160 -1000715a: 9b05 ldr r3, [sp, #20] -1000715c: f8ce 3000 str.w r3, [lr] -10007160: 4b0d ldr r3, [pc, #52] ; (10007198 ) -10007162: 4798 blx r3 -10007164: e896 0003 ldmia.w r6, {r0, r1} -10007168: f89d 300f ldrb.w r3, [sp, #15] -1000716c: 2b04 cmp r3, #4 -1000716e: d102 bne.n 10007176 -10007170: f7ff fe98 bl 10006ea4 -10007174: e001 b.n 1000717a -10007176: f7ff fdc7 bl 10006d08 -1000717a: 2300 movs r3, #0 -1000717c: 603b str r3, [r7, #0] -1000717e: f8c8 9000 str.w r9, [r8] -10007182: b007 add sp, #28 -10007184: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10007188: 40006118 .word 0x40006118 -1000718c: 40006008 .word 0x40006008 -10007190: 40006000 .word 0x40006000 -10007194: 40006060 .word 0x40006060 -10007198: 00002ea5 .word 0x00002ea5 - -1000719c : -1000719c: b507 push {r0, r1, r2, lr} -1000719e: ab02 add r3, sp, #8 -100071a0: e913 0003 ldmdb r3, {r0, r1} -100071a4: f7ff fdb0 bl 10006d08 -100071a8: 2001 movs r0, #1 -100071aa: b003 add sp, #12 -100071ac: f85d fb04 ldr.w pc, [sp], #4 - -100071b0 : -100071b0: e92d 41d0 stmdb sp!, {r4, r6, r7, r8, lr} -100071b4: b085 sub sp, #20 -100071b6: ac02 add r4, sp, #8 -100071b8: 4680 mov r8, r0 -100071ba: 460f mov r7, r1 -100071bc: e894 0003 ldmia.w r4, {r0, r1} -100071c0: 4616 mov r6, r2 -100071c2: f7ff fda1 bl 10006d08 -100071c6: 4b1b ldr r3, [pc, #108] ; (10007234 ) -100071c8: 681b ldr r3, [r3, #0] -100071ca: 005a lsls r2, r3, #1 -100071cc: d502 bpl.n 100071d4 -100071ce: 481a ldr r0, [pc, #104] ; (10007238 ) -100071d0: 4b1a ldr r3, [pc, #104] ; (1000723c ) -100071d2: 4798 blx r3 -100071d4: e894 0003 ldmia.w r4, {r0, r1} -100071d8: f7ff fd6a bl 10006cb0 -100071dc: 9b03 ldr r3, [sp, #12] -100071de: f000 0002 and.w r0, r0, #2 -100071e2: 9300 str r3, [sp, #0] -100071e4: f000 01ff and.w r1, r0, #255 ; 0xff -100071e8: 9b02 ldr r3, [sp, #8] -100071ea: b920 cbnz r0, 100071f6 -100071ec: 2006 movs r0, #6 -100071ee: 460a mov r2, r1 -100071f0: f7ff fda8 bl 10006d44 -100071f4: e7ee b.n 100071d4 -100071f6: 4640 mov r0, r8 -100071f8: 4639 mov r1, r7 -100071fa: 4632 mov r2, r6 -100071fc: f7ff fda2 bl 10006d44 -10007200: 4b0f ldr r3, [pc, #60] ; (10007240 ) -10007202: 79db ldrb r3, [r3, #7] -10007204: 2b04 cmp r3, #4 -10007206: d104 bne.n 10007212 -10007208: e894 0003 ldmia.w r4, {r0, r1} -1000720c: f7ff fe4a bl 10006ea4 -10007210: e00c b.n 1000722c -10007212: 2b05 cmp r3, #5 -10007214: d104 bne.n 10007220 -10007216: e894 0003 ldmia.w r4, {r0, r1} -1000721a: f7ff fd75 bl 10006d08 -1000721e: e005 b.n 1000722c -10007220: e894 0003 ldmia.w r4, {r0, r1} -10007224: f7ff fd44 bl 10006cb0 -10007228: 0783 lsls r3, r0, #30 -1000722a: d4f9 bmi.n 10007220 -1000722c: b005 add sp, #20 -1000722e: e8bd 81d0 ldmia.w sp!, {r4, r6, r7, r8, pc} -10007232: bf00 nop -10007234: 10000314 .word 0x10000314 -10007238: 1004293a .word 0x1004293a -1000723c: 0000f39d .word 0x0000f39d -10007240: 100021ec .word 0x100021ec - -10007244 : -10007244: 2100 movs r1, #0 -10007246: 20c7 movs r0, #199 ; 0xc7 -10007248: 460a mov r2, r1 -1000724a: f7ff bfb1 b.w 100071b0 - -1000724e : -1000724e: b507 push {r0, r1, r2, lr} -10007250: 0c03 lsrs r3, r0, #16 -10007252: f88d 3004 strb.w r3, [sp, #4] -10007256: f88d 0006 strb.w r0, [sp, #6] -1000725a: 0a03 lsrs r3, r0, #8 -1000725c: 2103 movs r1, #3 -1000725e: 20c4 movs r0, #196 ; 0xc4 -10007260: aa01 add r2, sp, #4 -10007262: f88d 3005 strb.w r3, [sp, #5] -10007266: f7ff ffa3 bl 100071b0 -1000726a: b003 add sp, #12 -1000726c: f85d fb04 ldr.w pc, [sp], #4 - -10007270 : -10007270: b507 push {r0, r1, r2, lr} -10007272: 0c03 lsrs r3, r0, #16 -10007274: f88d 3004 strb.w r3, [sp, #4] -10007278: f88d 0006 strb.w r0, [sp, #6] -1000727c: 0a03 lsrs r3, r0, #8 -1000727e: 2103 movs r1, #3 -10007280: 20d8 movs r0, #216 ; 0xd8 -10007282: aa01 add r2, sp, #4 -10007284: f88d 3005 strb.w r3, [sp, #5] -10007288: f7ff ff92 bl 100071b0 -1000728c: b003 add sp, #12 -1000728e: f85d fb04 ldr.w pc, [sp], #4 - -10007292 : -10007292: b507 push {r0, r1, r2, lr} -10007294: 0c03 lsrs r3, r0, #16 -10007296: f88d 3004 strb.w r3, [sp, #4] -1000729a: f88d 0006 strb.w r0, [sp, #6] -1000729e: 0a03 lsrs r3, r0, #8 -100072a0: 2103 movs r1, #3 -100072a2: 2020 movs r0, #32 -100072a4: aa01 add r2, sp, #4 -100072a6: f88d 3005 strb.w r3, [sp, #5] -100072aa: f7ff ff81 bl 100071b0 -100072ae: b003 add sp, #12 -100072b0: f85d fb04 ldr.w pc, [sp], #4 - -100072b4 : -100072b4: b51f push {r0, r1, r2, r3, r4, lr} -100072b6: ab01 add r3, sp, #4 -100072b8: e883 0006 stmia.w r3, {r1, r2} -100072bc: 9003 str r0, [sp, #12] -100072be: 2101 movs r1, #1 -100072c0: 20c5 movs r0, #197 ; 0xc5 -100072c2: aa03 add r2, sp, #12 -100072c4: f7ff ff74 bl 100071b0 -100072c8: b005 add sp, #20 -100072ca: f85d fb04 ldr.w pc, [sp], #4 - -100072ce : -100072ce: b51f push {r0, r1, r2, r3, r4, lr} -100072d0: 4b0a ldr r3, [pc, #40] ; (100072fc ) -100072d2: f88d 000c strb.w r0, [sp, #12] -100072d6: 79db ldrb r3, [r3, #7] -100072d8: 0a00 lsrs r0, r0, #8 -100072da: 3b02 subs r3, #2 -100072dc: 2b01 cmp r3, #1 -100072de: f88d 000d strb.w r0, [sp, #13] -100072e2: f04f 0001 mov.w r0, #1 -100072e6: e88d 0006 stmia.w sp, {r1, r2} -100072ea: bf94 ite ls -100072ec: 2102 movls r1, #2 -100072ee: 4601 movhi r1, r0 -100072f0: aa03 add r2, sp, #12 -100072f2: f7ff ff5d bl 100071b0 -100072f6: b005 add sp, #20 -100072f8: f85d fb04 ldr.w pc, [sp], #4 -100072fc: 100021ec .word 0x100021ec - -10007300 : -10007300: b537 push {r0, r1, r2, r4, r5, lr} -10007302: 4605 mov r5, r0 -10007304: e89d 0003 ldmia.w sp, {r0, r1} -10007308: 466c mov r4, sp -1000730a: f7ff fcd1 bl 10006cb0 -1000730e: b11d cbz r5, 10007318 -10007310: f040 001c orr.w r0, r0, #28 -10007314: b2c0 uxtb r0, r0 -10007316: e001 b.n 1000731c -10007318: f000 00e3 and.w r0, r0, #227 ; 0xe3 -1000731c: e894 0006 ldmia.w r4, {r1, r2} -10007320: f7ff ffd5 bl 100072ce -10007324: b003 add sp, #12 -10007326: bd30 pop {r4, r5, pc} - -10007328 : -10007328: 4b02 ldr r3, [pc, #8] ; (10007334 ) -1000732a: 681a ldr r2, [r3, #0] -1000732c: f022 0201 bic.w r2, r2, #1 -10007330: 601a str r2, [r3, #0] -10007332: 4770 bx lr -10007334: 400002c0 .word 0x400002c0 - -10007338 : -10007338: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} -1000733c: 4e36 ldr r6, [pc, #216] ; (10007418 ) -1000733e: 4b37 ldr r3, [pc, #220] ; (1000741c ) -10007340: 2406 movs r4, #6 -10007342: 4a37 ldr r2, [pc, #220] ; (10007420 ) -10007344: fb04 1400 mla r4, r4, r0, r1 -10007348: f8d6 9000 ldr.w r9, [r6] -1000734c: 4688 mov r8, r1 -1000734e: 681b ldr r3, [r3, #0] -10007350: 6811 ldr r1, [r2, #0] -10007352: 4607 mov r7, r0 -10007354: 2902 cmp r1, #2 -10007356: f3c3 1302 ubfx r3, r3, #4, #3 -1000735a: ea4f 0ac4 mov.w sl, r4, lsl #3 -1000735e: d101 bne.n 10007364 -10007360: 2b00 cmp r3, #0 -10007362: d048 beq.n 100073f6 -10007364: 6812 ldr r2, [r2, #0] -10007366: 2a01 cmp r2, #1 -10007368: d101 bne.n 1000736e -1000736a: 2b01 cmp r3, #1 -1000736c: d043 beq.n 100073f6 -1000736e: 2500 movs r5, #0 -10007370: 4b2c ldr r3, [pc, #176] ; (10007424 ) -10007372: f853 2034 ldr.w r2, [r3, r4, lsl #3] -10007376: 1c51 adds r1, r2, #1 -10007378: 9203 str r2, [sp, #12] -1000737a: d033 beq.n 100073e4 -1000737c: 3304 adds r3, #4 -1000737e: f853 3034 ldr.w r3, [r3, r4, lsl #3] -10007382: ea83 0102 eor.w r1, r3, r2 -10007386: 3101 adds r1, #1 -10007388: d122 bne.n 100073d0 -1000738a: 2206 movs r2, #6 -1000738c: fb02 8207 mla r2, r2, r7, r8 -10007390: 4b25 ldr r3, [pc, #148] ; (10007428 ) -10007392: f89d 100c ldrb.w r1, [sp, #12] -10007396: eb03 04c2 add.w r4, r3, r2, lsl #3 -1000739a: f803 1032 strb.w r1, [r3, r2, lsl #3] -1000739e: f89d 100d ldrb.w r1, [sp, #13] -100073a2: 7061 strb r1, [r4, #1] -100073a4: f89d 100e ldrb.w r1, [sp, #14] -100073a8: 70a1 strb r1, [r4, #2] -100073aa: f89d 100f ldrb.w r1, [sp, #15] -100073ae: 70e1 strb r1, [r4, #3] -100073b0: 491e ldr r1, [pc, #120] ; (1000742c ) -100073b2: 6809 ldr r1, [r1, #0] -100073b4: 04c8 lsls r0, r1, #19 -100073b6: d515 bpl.n 100073e4 -100073b8: f813 3032 ldrb.w r3, [r3, r2, lsl #3] -100073bc: 7862 ldrb r2, [r4, #1] -100073be: 4639 mov r1, r7 -100073c0: 9200 str r2, [sp, #0] -100073c2: 78a2 ldrb r2, [r4, #2] -100073c4: 481a ldr r0, [pc, #104] ; (10007430 ) -100073c6: 9201 str r2, [sp, #4] -100073c8: 4c1a ldr r4, [pc, #104] ; (10007434 ) -100073ca: 4642 mov r2, r8 -100073cc: 47a0 blx r4 -100073ce: e009 b.n 100073e4 -100073d0: 4919 ldr r1, [pc, #100] ; (10007438 ) -100073d2: 6809 ldr r1, [r1, #0] -100073d4: 04c9 lsls r1, r1, #19 -100073d6: d505 bpl.n 100073e4 -100073d8: f50a 4110 add.w r1, sl, #36864 ; 0x9000 -100073dc: 4817 ldr r0, [pc, #92] ; (1000743c ) -100073de: 3180 adds r1, #128 ; 0x80 -100073e0: 4c14 ldr r4, [pc, #80] ; (10007434 ) -100073e2: 47a0 blx r4 -100073e4: b1ad cbz r5, 10007412 -100073e6: 4b16 ldr r3, [pc, #88] ; (10007440 ) -100073e8: 2200 movs r2, #0 -100073ea: 601a str r2, [r3, #0] -100073ec: 2201 movs r2, #1 -100073ee: f8c6 9000 str.w r9, [r6] -100073f2: 601a str r2, [r3, #0] -100073f4: e00d b.n 10007412 -100073f6: 4a12 ldr r2, [pc, #72] ; (10007440 ) -100073f8: 2300 movs r3, #0 -100073fa: 6013 str r3, [r2, #0] -100073fc: 6833 ldr r3, [r6, #0] -100073fe: 2501 movs r5, #1 -10007400: f443 7300 orr.w r3, r3, #512 ; 0x200 -10007404: f043 0302 orr.w r3, r3, #2 -10007408: 6033 str r3, [r6, #0] -1000740a: 6015 str r5, [r2, #0] -1000740c: 4b0d ldr r3, [pc, #52] ; (10007444 ) -1000740e: 4798 blx r3 -10007410: e7ae b.n 10007370 -10007412: b004 add sp, #16 -10007414: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10007418: 40006120 .word 0x40006120 -1000741c: 40000014 .word 0x40000014 -10007420: 40006014 .word 0x40006014 -10007424: 98009080 .word 0x98009080 -10007428: 100021ec .word 0x100021ec -1000742c: 10000310 .word 0x10000310 -10007430: 100446a1 .word 0x100446a1 -10007434: 0000f39d .word 0x0000f39d -10007438: 1000030c .word 0x1000030c -1000743c: 10044717 .word 0x10044717 -10007440: 40006008 .word 0x40006008 -10007444: 00002ea5 .word 0x00002ea5 - -10007448 : -10007448: b538 push {r3, r4, r5, lr} -1000744a: 2500 movs r5, #0 -1000744c: 2400 movs r4, #0 -1000744e: b2e1 uxtb r1, r4 -10007450: 4628 mov r0, r5 -10007452: 3401 adds r4, #1 -10007454: f7ff ff70 bl 10007338 -10007458: 2c06 cmp r4, #6 -1000745a: d1f8 bne.n 1000744e -1000745c: 3501 adds r5, #1 -1000745e: b2ed uxtb r5, r5 -10007460: 2d03 cmp r5, #3 -10007462: d1f3 bne.n 1000744c -10007464: bd38 pop {r3, r4, r5, pc} - -10007466 : -10007466: 2306 movs r3, #6 -10007468: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1000746c: fb03 1300 mla r3, r3, r0, r1 -10007470: 4f49 ldr r7, [pc, #292] ; (10007598 ) -10007472: b087 sub sp, #28 -10007474: eb07 03c3 add.w r3, r7, r3, lsl #3 -10007478: 791b ldrb r3, [r3, #4] -1000747a: 4606 mov r6, r0 -1000747c: 460d mov r5, r1 -1000747e: b90b cbnz r3, 10007484 -10007480: f7ff f9b6 bl 100067f0 -10007484: 4b45 ldr r3, [pc, #276] ; (1000759c ) -10007486: 681a ldr r2, [r3, #0] -10007488: 04d0 lsls r0, r2, #19 -1000748a: d504 bpl.n 10007496 -1000748c: 4844 ldr r0, [pc, #272] ; (100075a0 ) -1000748e: 4631 mov r1, r6 -10007490: 462a mov r2, r5 -10007492: 4b44 ldr r3, [pc, #272] ; (100075a4 ) -10007494: 4798 blx r3 -10007496: 2406 movs r4, #6 -10007498: fb04 5406 mla r4, r4, r6, r5 -1000749c: f8df 9118 ldr.w r9, [pc, #280] ; 100075b8 -100074a0: ea4f 08c4 mov.w r8, r4, lsl #3 -100074a4: f859 2034 ldr.w r2, [r9, r4, lsl #3] -100074a8: 1c51 adds r1, r2, #1 -100074aa: 9203 str r2, [sp, #12] -100074ac: d167 bne.n 1000757e -100074ae: f817 3034 ldrb.w r3, [r7, r4, lsl #3] -100074b2: f10d 0b10 add.w fp, sp, #16 -100074b6: f88d 300c strb.w r3, [sp, #12] -100074ba: eb07 0308 add.w r3, r7, r8 -100074be: 785a ldrb r2, [r3, #1] -100074c0: e89b 0003 ldmia.w fp, {r0, r1} -100074c4: f88d 200d strb.w r2, [sp, #13] -100074c8: 789a ldrb r2, [r3, #2] -100074ca: f88d 200e strb.w r2, [sp, #14] -100074ce: 78da ldrb r2, [r3, #3] -100074d0: f88d 200f strb.w r2, [sp, #15] -100074d4: 9a03 ldr r2, [sp, #12] -100074d6: f849 2034 str.w r2, [r9, r4, lsl #3] -100074da: 79db ldrb r3, [r3, #7] -100074dc: 2b04 cmp r3, #4 -100074de: d102 bne.n 100074e6 -100074e0: f7ff fce0 bl 10006ea4 -100074e4: e001 b.n 100074ea -100074e6: f7ff fc0f bl 10006d08 -100074ea: e89b 0003 ldmia.w fp, {r0, r1} -100074ee: 9a03 ldr r2, [sp, #12] -100074f0: f8df a0c8 ldr.w sl, [pc, #200] ; 100075bc -100074f4: 43d2 mvns r2, r2 -100074f6: f84a 2034 str.w r2, [sl, r4, lsl #3] -100074fa: 2206 movs r2, #6 -100074fc: fb02 5206 mla r2, r2, r6, r5 -10007500: eb07 02c2 add.w r2, r7, r2, lsl #3 -10007504: 79d2 ldrb r2, [r2, #7] -10007506: 2a04 cmp r2, #4 -10007508: d102 bne.n 10007510 -1000750a: f7ff fccb bl 10006ea4 -1000750e: e001 b.n 10007514 -10007510: f7ff fbfa bl 10006d08 -10007514: 4a21 ldr r2, [pc, #132] ; (1000759c ) -10007516: 6813 ldr r3, [r2, #0] -10007518: 04db lsls r3, r3, #19 -1000751a: d50f bpl.n 1000753c -1000751c: 2206 movs r2, #6 -1000751e: fb02 5206 mla r2, r2, r6, r5 -10007522: f817 3032 ldrb.w r3, [r7, r2, lsl #3] -10007526: eb07 07c2 add.w r7, r7, r2, lsl #3 -1000752a: 787a ldrb r2, [r7, #1] -1000752c: 481e ldr r0, [pc, #120] ; (100075a8 ) -1000752e: 9200 str r2, [sp, #0] -10007530: 78ba ldrb r2, [r7, #2] -10007532: 4631 mov r1, r6 -10007534: 9201 str r2, [sp, #4] -10007536: 462a mov r2, r5 -10007538: 4d1a ldr r5, [pc, #104] ; (100075a4 ) -1000753a: 47a8 blx r5 -1000753c: f859 3034 ldr.w r3, [r9, r4, lsl #3] -10007540: 9a03 ldr r2, [sp, #12] -10007542: 4293 cmp r3, r2 -10007544: d009 beq.n 1000755a -10007546: 4b19 ldr r3, [pc, #100] ; (100075ac ) -10007548: 681b ldr r3, [r3, #0] -1000754a: 04d8 lsls r0, r3, #19 -1000754c: d505 bpl.n 1000755a -1000754e: f859 3034 ldr.w r3, [r9, r4, lsl #3] -10007552: 4817 ldr r0, [pc, #92] ; (100075b0 ) -10007554: 4641 mov r1, r8 -10007556: 4d13 ldr r5, [pc, #76] ; (100075a4 ) -10007558: 47a8 blx r5 -1000755a: 9a03 ldr r2, [sp, #12] -1000755c: f85a 3034 ldr.w r3, [sl, r4, lsl #3] -10007560: 43d2 mvns r2, r2 -10007562: 4293 cmp r3, r2 -10007564: d015 beq.n 10007592 -10007566: 4b11 ldr r3, [pc, #68] ; (100075ac ) -10007568: 681b ldr r3, [r3, #0] -1000756a: 04d9 lsls r1, r3, #19 -1000756c: d511 bpl.n 10007592 -1000756e: f85a 3034 ldr.w r3, [sl, r4, lsl #3] -10007572: f108 0104 add.w r1, r8, #4 -10007576: 4c0b ldr r4, [pc, #44] ; (100075a4 ) -10007578: 480d ldr r0, [pc, #52] ; (100075b0 ) -1000757a: 47a0 blx r4 -1000757c: e009 b.n 10007592 -1000757e: 4b0b ldr r3, [pc, #44] ; (100075ac ) -10007580: 681b ldr r3, [r3, #0] -10007582: 04db lsls r3, r3, #19 -10007584: d505 bpl.n 10007592 -10007586: f508 4110 add.w r1, r8, #36864 ; 0x9000 -1000758a: 480a ldr r0, [pc, #40] ; (100075b4 ) -1000758c: 3180 adds r1, #128 ; 0x80 -1000758e: 4b05 ldr r3, [pc, #20] ; (100075a4 ) -10007590: 4798 blx r3 -10007592: b007 add sp, #28 -10007594: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10007598: 100021ec .word 0x100021ec -1000759c: 10000310 .word 0x10000310 -100075a0: 10044761 .word 0x10044761 -100075a4: 0000f39d .word 0x0000f39d -100075a8: 10044796 .word 0x10044796 -100075ac: 10000314 .word 0x10000314 -100075b0: 1004480d .word 0x1004480d -100075b4: 1004484d .word 0x1004484d -100075b8: 98009080 .word 0x98009080 -100075bc: 98009084 .word 0x98009084 - -100075c0 : -100075c0: 4b88 ldr r3, [pc, #544] ; (100077e4 ) -100075c2: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100075c6: 681b ldr r3, [r3, #0] -100075c8: b08d sub sp, #52 ; 0x34 -100075ca: f3c3 1b02 ubfx fp, r3, #4, #3 -100075ce: f1bb 0f00 cmp.w fp, #0 -100075d2: bf0c ite eq -100075d4: 2202 moveq r2, #2 -100075d6: 2201 movne r2, #1 -100075d8: 9207 str r2, [sp, #28] -100075da: 2206 movs r2, #6 -100075dc: fb02 b200 mla r2, r2, r0, fp -100075e0: 4b81 ldr r3, [pc, #516] ; (100077e8 ) -100075e2: 9006 str r0, [sp, #24] -100075e4: eb03 02c2 add.w r2, r3, r2, lsl #3 -100075e8: 78d2 ldrb r2, [r2, #3] -100075ea: 460d mov r5, r1 -100075ec: b912 cbnz r2, 100075f4 -100075ee: 4659 mov r1, fp -100075f0: f7ff fea2 bl 10007338 -100075f4: 9b06 ldr r3, [sp, #24] -100075f6: 2206 movs r2, #6 -100075f8: fb02 b203 mla r2, r2, r3, fp -100075fc: 487a ldr r0, [pc, #488] ; (100077e8 ) -100075fe: eb00 03c2 add.w r3, r0, r2, lsl #3 -10007602: 78d9 ldrb r1, [r3, #3] -10007604: b939 cbnz r1, 10007616 -10007606: 4b79 ldr r3, [pc, #484] ; (100077ec ) -10007608: 681b ldr r3, [r3, #0] -1000760a: 005a lsls r2, r3, #1 -1000760c: d525 bpl.n 1000765a -1000760e: 4b78 ldr r3, [pc, #480] ; (100077f0 ) -10007610: 4878 ldr r0, [pc, #480] ; (100077f4 ) -10007612: 4798 blx r3 -10007614: e021 b.n 1000765a -10007616: 4978 ldr r1, [pc, #480] ; (100077f8 ) -10007618: 2000 movs r0, #0 -1000761a: 6008 str r0, [r1, #0] -1000761c: 4872 ldr r0, [pc, #456] ; (100077e8 ) -1000761e: f810 0032 ldrb.w r0, [r0, r2, lsl #3] -10007622: 4a76 ldr r2, [pc, #472] ; (100077fc ) -10007624: 6010 str r0, [r2, #0] -10007626: 4876 ldr r0, [pc, #472] ; (10007800 ) -10007628: 785c ldrb r4, [r3, #1] -1000762a: 6802 ldr r2, [r0, #0] -1000762c: 0c12 lsrs r2, r2, #16 -1000762e: 0412 lsls r2, r2, #16 -10007630: 4322 orrs r2, r4 -10007632: 6002 str r2, [r0, #0] -10007634: 4a73 ldr r2, [pc, #460] ; (10007804 ) -10007636: 7898 ldrb r0, [r3, #2] -10007638: 6814 ldr r4, [r2, #0] -1000763a: f024 03ff bic.w r3, r4, #255 ; 0xff -1000763e: 4303 orrs r3, r0 -10007640: 2401 movs r4, #1 -10007642: 6013 str r3, [r2, #0] -10007644: 600c str r4, [r1, #0] -10007646: aa0c add r2, sp, #48 ; 0x30 -10007648: e912 0003 ldmdb r2, {r0, r1} -1000764c: f7ff fb5c bl 10006d08 -10007650: 4b6d ldr r3, [pc, #436] ; (10007808 ) -10007652: 4798 blx r3 -10007654: 2800 cmp r0, #0 -10007656: d0d6 beq.n 10007606 -10007658: e0c0 b.n 100077dc -1000765a: 9b07 ldr r3, [sp, #28] -1000765c: 006d lsls r5, r5, #1 -1000765e: fb03 fc05 mul.w ip, r3, r5 -10007662: 2400 movs r4, #0 -10007664: 9508 str r5, [sp, #32] -10007666: 461f mov r7, r3 -10007668: 9405 str r4, [sp, #20] -1000766a: 46a2 mov sl, r4 -1000766c: 46a0 mov r8, r4 -1000766e: 9a07 ldr r2, [sp, #28] -10007670: 4297 cmp r7, r2 -10007672: d102 bne.n 1000767a -10007674: 9b06 ldr r3, [sp, #24] -10007676: 2b00 cmp r3, #0 -10007678: d06a beq.n 10007750 -1000767a: 495f ldr r1, [pc, #380] ; (100077f8 ) -1000767c: 4b5f ldr r3, [pc, #380] ; (100077fc ) -1000767e: 2001 movs r0, #1 -10007680: 2200 movs r2, #0 -10007682: 600a str r2, [r1, #0] -10007684: 601f str r7, [r3, #0] -10007686: 6008 str r0, [r1, #0] -10007688: f10c 0014 add.w r0, ip, #20 -1000768c: 9009 str r0, [sp, #36] ; 0x24 -1000768e: 46e1 mov r9, ip -10007690: 9b09 ldr r3, [sp, #36] ; 0x24 -10007692: 4599 cmp r9, r3 -10007694: d251 bcs.n 1000773a -10007696: 4958 ldr r1, [pc, #352] ; (100077f8 ) -10007698: 2500 movs r5, #0 -1000769a: 600d str r5, [r1, #0] -1000769c: f8d1 3114 ldr.w r3, [r1, #276] ; 0x114 -100076a0: fa1f f089 uxth.w r0, r9 -100076a4: 0c1b lsrs r3, r3, #16 -100076a6: 041b lsls r3, r3, #16 -100076a8: 4303 orrs r3, r0 -100076aa: 4853 ldr r0, [pc, #332] ; (100077f8 ) -100076ac: f8c1 3114 str.w r3, [r1, #276] ; 0x114 -100076b0: 2301 movs r3, #1 -100076b2: 6003 str r3, [r0, #0] -100076b4: 462e mov r6, r5 -100076b6: 2363 movs r3, #99 ; 0x63 -100076b8: 4952 ldr r1, [pc, #328] ; (10007804 ) -100076ba: 6808 ldr r0, [r1, #0] -100076bc: f020 00ff bic.w r0, r0, #255 ; 0xff -100076c0: 4328 orrs r0, r5 -100076c2: 6008 str r0, [r1, #0] -100076c4: 9204 str r2, [sp, #16] -100076c6: 9303 str r3, [sp, #12] -100076c8: f8cd c008 str.w ip, [sp, #8] -100076cc: 494e ldr r1, [pc, #312] ; (10007808 ) -100076ce: 4788 blx r1 -100076d0: 9a04 ldr r2, [sp, #16] -100076d2: 9b03 ldr r3, [sp, #12] -100076d4: f8dd c008 ldr.w ip, [sp, #8] -100076d8: b1b0 cbz r0, 10007708 -100076da: b90e cbnz r6, 100076e0 -100076dc: 3201 adds r2, #1 -100076de: 462b mov r3, r5 -100076e0: 2d63 cmp r5, #99 ; 0x63 -100076e2: d121 bne.n 10007728 -100076e4: 2a01 cmp r2, #1 -100076e6: d102 bne.n 100076ee -100076e8: b2b9 uxth r1, r7 -100076ea: 9105 str r1, [sp, #20] -100076ec: e007 b.n 100076fe -100076ee: f1c3 0063 rsb r0, r3, #99 ; 0x63 -100076f2: ebc4 0108 rsb r1, r4, r8 -100076f6: 4288 cmp r0, r1 -100076f8: d916 bls.n 10007728 -100076fa: b2b8 uxth r0, r7 -100076fc: 9005 str r0, [sp, #20] -100076fe: fa1f fa89 uxth.w sl, r9 -10007702: 46a8 mov r8, r5 -10007704: 461c mov r4, r3 -10007706: e00f b.n 10007728 -10007708: 2e01 cmp r6, #1 -1000770a: d10f bne.n 1000772c -1000770c: 2a01 cmp r2, #1 -1000770e: d004 beq.n 1000771a -10007710: 1aee subs r6, r5, r3 -10007712: ebc4 0108 rsb r1, r4, r8 -10007716: 428e cmp r6, r1 -10007718: d908 bls.n 1000772c -1000771a: b2b9 uxth r1, r7 -1000771c: 9105 str r1, [sp, #20] -1000771e: fa1f fa89 uxth.w sl, r9 -10007722: 46a8 mov r8, r5 -10007724: 461c mov r4, r3 -10007726: e001 b.n 1000772c -10007728: 2601 movs r6, #1 -1000772a: e000 b.n 1000772e -1000772c: 4606 mov r6, r0 -1000772e: 3501 adds r5, #1 -10007730: 2d64 cmp r5, #100 ; 0x64 -10007732: d1c1 bne.n 100076b8 -10007734: f109 0901 add.w r9, r9, #1 -10007738: e7aa b.n 10007690 -1000773a: b14a cbz r2, 10007750 -1000773c: 4b2b ldr r3, [pc, #172] ; (100077ec ) -1000773e: 681a ldr r2, [r3, #0] -10007740: 461d mov r5, r3 -10007742: f012 4f80 tst.w r2, #1073741824 ; 0x40000000 -10007746: d00c beq.n 10007762 -10007748: 4b29 ldr r3, [pc, #164] ; (100077f0 ) -1000774a: 4830 ldr r0, [pc, #192] ; (1000780c ) -1000774c: 4798 blx r3 -1000774e: e008 b.n 10007762 -10007750: 3701 adds r7, #1 -10007752: 9b08 ldr r3, [sp, #32] -10007754: 2f04 cmp r7, #4 -10007756: 4463 add r3, ip -10007758: d801 bhi.n 1000775e -1000775a: 469c mov ip, r3 -1000775c: e787 b.n 1000766e -1000775e: 2000 movs r0, #0 -10007760: e03d b.n 100077de -10007762: 682b ldr r3, [r5, #0] -10007764: 005b lsls r3, r3, #1 -10007766: d507 bpl.n 10007778 -10007768: f8cd 8000 str.w r8, [sp] -1000776c: 4828 ldr r0, [pc, #160] ; (10007810 ) -1000776e: 9905 ldr r1, [sp, #20] -10007770: 4652 mov r2, sl -10007772: 4623 mov r3, r4 -10007774: 4d1e ldr r5, [pc, #120] ; (100077f0 ) -10007776: 47a8 blx r5 -10007778: 9905 ldr r1, [sp, #20] -1000777a: 481f ldr r0, [pc, #124] ; (100077f8 ) -1000777c: 2300 movs r3, #0 -1000777e: 4a1f ldr r2, [pc, #124] ; (100077fc ) -10007780: 6003 str r3, [r0, #0] -10007782: 9806 ldr r0, [sp, #24] -10007784: f3c1 030b ubfx r3, r1, #0, #12 -10007788: 6013 str r3, [r2, #0] -1000778a: 2306 movs r3, #6 -1000778c: fb03 b300 mla r3, r3, r0, fp -10007790: 4a15 ldr r2, [pc, #84] ; (100077e8 ) -10007792: 4815 ldr r0, [pc, #84] ; (100077e8 ) -10007794: f802 1033 strb.w r1, [r2, r3, lsl #3] -10007798: 4919 ldr r1, [pc, #100] ; (10007800 ) -1000779a: eb00 03c3 add.w r3, r0, r3, lsl #3 -1000779e: 680a ldr r2, [r1, #0] -100077a0: 4444 add r4, r8 -100077a2: 0c12 lsrs r2, r2, #16 -100077a4: 0412 lsls r2, r2, #16 -100077a6: ea4a 0202 orr.w r2, sl, r2 -100077aa: 600a str r2, [r1, #0] -100077ac: 4a15 ldr r2, [pc, #84] ; (10007804 ) -100077ae: f883 a001 strb.w sl, [r3, #1] -100077b2: 6811 ldr r1, [r2, #0] -100077b4: 0864 lsrs r4, r4, #1 -100077b6: b2e0 uxtb r0, r4 -100077b8: f021 01ff bic.w r1, r1, #255 ; 0xff -100077bc: 4301 orrs r1, r0 -100077be: 6011 str r1, [r2, #0] -100077c0: 490d ldr r1, [pc, #52] ; (100077f8 ) -100077c2: 709c strb r4, [r3, #2] -100077c4: 2401 movs r4, #1 -100077c6: 70dc strb r4, [r3, #3] -100077c8: aa0c add r2, sp, #48 ; 0x30 -100077ca: 600c str r4, [r1, #0] -100077cc: e912 0003 ldmdb r2, {r0, r1} -100077d0: f7ff fa9a bl 10006d08 -100077d4: 9806 ldr r0, [sp, #24] -100077d6: 4659 mov r1, fp -100077d8: f7ff fe45 bl 10007466 -100077dc: 4620 mov r0, r4 -100077de: b00d add sp, #52 ; 0x34 -100077e0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -100077e4: 40000014 .word 0x40000014 -100077e8: 100021ec .word 0x100021ec -100077ec: 10000314 .word 0x10000314 -100077f0: 0000f39d .word 0x0000f39d -100077f4: 100448b4 .word 0x100448b4 -100077f8: 40006008 .word 0x40006008 -100077fc: 40006014 .word 0x40006014 -10007800: 4000611c .word 0x4000611c -10007804: 40000300 .word 0x40000300 -10007808: 00003049 .word 0x00003049 -1000780c: 100448c6 .word 0x100448c6 -10007810: 100448e1 .word 0x100448e1 - -10007814 : -10007814: b573 push {r0, r1, r4, r5, r6, lr} -10007816: 4b24 ldr r3, [pc, #144] ; (100078a8 ) -10007818: 4604 mov r4, r0 -1000781a: 791a ldrb r2, [r3, #4] -1000781c: 461e mov r6, r3 -1000781e: b90a cbnz r2, 10007824 -10007820: f7fe ffe6 bl 100067f0 -10007824: e89d 0003 ldmia.w sp, {r0, r1} -10007828: f7ff fa6e bl 10006d08 -1000782c: 2c01 cmp r4, #1 -1000782e: d00f beq.n 10007850 -10007830: d30a bcc.n 10007848 -10007832: 2c02 cmp r4, #2 -10007834: d111 bne.n 1000785a -10007836: 4620 mov r0, r4 -10007838: f7ff f862 bl 10006900 -1000783c: 79f3 ldrb r3, [r6, #7] -1000783e: 2b05 cmp r3, #5 -10007840: bf0c ite eq -10007842: 2106 moveq r1, #6 -10007844: 2108 movne r1, #8 -10007846: e011 b.n 1000786c -10007848: 2000 movs r0, #0 -1000784a: f7ff f859 bl 10006900 -1000784e: e00c b.n 1000786a -10007850: 4620 mov r0, r4 -10007852: f7ff f855 bl 10006900 -10007856: 2108 movs r1, #8 -10007858: e008 b.n 1000786c -1000785a: 4b14 ldr r3, [pc, #80] ; (100078ac ) -1000785c: 6819 ldr r1, [r3, #0] -1000785e: f011 4180 ands.w r1, r1, #1073741824 ; 0x40000000 -10007862: d003 beq.n 1000786c -10007864: 4812 ldr r0, [pc, #72] ; (100078b0 ) -10007866: 4b13 ldr r3, [pc, #76] ; (100078b4 ) -10007868: 4798 blx r3 -1000786a: 2100 movs r1, #0 -1000786c: 4620 mov r0, r4 -1000786e: f7ff fea7 bl 100075c0 -10007872: b9a8 cbnz r0, 100078a0 -10007874: 4b0d ldr r3, [pc, #52] ; (100078ac ) -10007876: 681b ldr r3, [r3, #0] -10007878: 005b lsls r3, r3, #1 -1000787a: d502 bpl.n 10007882 -1000787c: 480e ldr r0, [pc, #56] ; (100078b8 ) -1000787e: 4b0d ldr r3, [pc, #52] ; (100078b4 ) -10007880: 4798 blx r3 -10007882: 2000 movs r0, #0 -10007884: 4601 mov r1, r0 -10007886: 466a mov r2, sp -10007888: 4b0c ldr r3, [pc, #48] ; (100078bc ) -1000788a: 4798 blx r3 -1000788c: f89d 0000 ldrb.w r0, [sp] -10007890: 2100 movs r1, #0 -10007892: f7fe ff19 bl 100066c8 -10007896: 2000 movs r0, #0 -10007898: f7ff f832 bl 10006900 -1000789c: 2000 movs r0, #0 -1000789e: e000 b.n 100078a2 -100078a0: 2001 movs r0, #1 -100078a2: b002 add sp, #8 -100078a4: bd70 pop {r4, r5, r6, pc} -100078a6: bf00 nop -100078a8: 100021ec .word 0x100021ec -100078ac: 10000314 .word 0x10000314 -100078b0: 10044919 .word 0x10044919 -100078b4: 0000f39d .word 0x0000f39d -100078b8: 10044937 .word 0x10044937 -100078bc: 00003081 .word 0x00003081 - -100078c0 : -100078c0: b508 push {r3, lr} -100078c2: 2000 movs r0, #0 -100078c4: f7ff f81c bl 10006900 -100078c8: 2000 movs r0, #0 -100078ca: 4601 mov r1, r0 -100078cc: f7ff fe78 bl 100075c0 -100078d0: 3000 adds r0, #0 -100078d2: bf18 it ne -100078d4: 2001 movne r0, #1 -100078d6: bd08 pop {r3, pc} - -100078d8 : -100078d8: b570 push {r4, r5, r6, lr} -100078da: 4b08 ldr r3, [pc, #32] ; (100078fc ) -100078dc: 4798 blx r3 -100078de: 4604 mov r4, r0 -100078e0: f00d fcd8 bl 10015294 -100078e4: 4605 mov r5, r0 -100078e6: f010 f85d bl 100179a4 -100078ea: 4621 mov r1, r4 -100078ec: 4c04 ldr r4, [pc, #16] ; (10007900 ) -100078ee: 4603 mov r3, r0 -100078f0: 462a mov r2, r5 -100078f2: 46a4 mov ip, r4 -100078f4: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -100078f8: 4802 ldr r0, [pc, #8] ; (10007904 ) -100078fa: 4760 bx ip -100078fc: 00000355 .word 0x00000355 -10007900: 0000f39d .word 0x0000f39d -10007904: 1003e9a0 .word 0x1003e9a0 - -10007908
: -10007908: b51f push {r0, r1, r2, r3, r4, lr} -1000790a: 4a1d ldr r2, [pc, #116] ; (10007980 ) -1000790c: f44f 607a mov.w r0, #4000 ; 0xfa0 -10007910: 6813 ldr r3, [r2, #0] -10007912: f3c3 0314 ubfx r3, r3, #0, #21 -10007916: 6013 str r3, [r2, #0] -10007918: f010 ffc2 bl 100188a0 -1000791c: f011 f808 bl 10018930 -10007920: f036 f944 bl 1003dbac -10007924: b130 cbz r0, 10007934 -10007926: 4b17 ldr r3, [pc, #92] ; (10007984 ) -10007928: 681b ldr r3, [r3, #0] -1000792a: 005b lsls r3, r3, #1 -1000792c: d502 bpl.n 10007934 -1000792e: 4816 ldr r0, [pc, #88] ; (10007988 ) -10007930: 4b16 ldr r3, [pc, #88] ; (1000798c ) -10007932: 4798 blx r3 -10007934: 2004 movs r0, #4 -10007936: f00d fbf9 bl 1001512c -1000793a: 2400 movs r4, #0 -1000793c: f00d fc92 bl 10015264 -10007940: f7ff ffca bl 100078d8 -10007944: 2306 movs r3, #6 -10007946: 9403 str r4, [sp, #12] -10007948: 9300 str r3, [sp, #0] -1000794a: 9402 str r4, [sp, #8] -1000794c: 4623 mov r3, r4 -1000794e: 9401 str r4, [sp, #4] -10007950: f44f 7200 mov.w r2, #512 ; 0x200 -10007954: 490e ldr r1, [pc, #56] ; (10007990 ) -10007956: 480f ldr r0, [pc, #60] ; (10007994 ) -10007958: f00e fa6c bl 10015e34 -1000795c: 2305 movs r3, #5 -1000795e: f44f 7200 mov.w r2, #512 ; 0x200 -10007962: 9300 str r3, [sp, #0] -10007964: 490c ldr r1, [pc, #48] ; (10007998 ) -10007966: 4623 mov r3, r4 -10007968: 9403 str r4, [sp, #12] -1000796a: 9402 str r4, [sp, #8] -1000796c: 9401 str r4, [sp, #4] -1000796e: 480b ldr r0, [pc, #44] ; (1000799c ) -10007970: f00e fa60 bl 10015e34 -10007974: f00e fc10 bl 10016198 -10007978: 4620 mov r0, r4 -1000797a: b004 add sp, #16 -1000797c: bd10 pop {r4, pc} -1000797e: bf00 nop -10007980: 40000210 .word 0x40000210 -10007984: 10000314 .word 0x10000314 -10007988: 1003e9d5 .word 0x1003e9d5 -1000798c: 0000f39d .word 0x0000f39d -10007990: 1003e9f1 .word 0x1003e9f1 -10007994: 100079d9 .word 0x100079d9 -10007998: 1003e9fb .word 0x1003e9fb -1000799c: 100079b1 .word 0x100079b1 - -100079a0 : -100079a0: 220a movs r2, #10 -100079a2: f245 3159 movw r1, #21337 ; 0x5359 -100079a6: 4801 ldr r0, [pc, #4] ; (100079ac ) -100079a8: f010 bdd8 b.w 1001855c -100079ac: 10044bbc .word 0x10044bbc - -100079b0 : -100079b0: b508 push {r3, lr} -100079b2: f000 fbdd bl 10008170 -100079b6: 4c07 ldr r4, [pc, #28] ; (100079d4 ) -100079b8: 2300 movs r3, #0 -100079ba: f242 7210 movw r2, #10000 ; 0x2710 -100079be: 4619 mov r1, r3 -100079c0: 6820 ldr r0, [r4, #0] -100079c2: f00e f8f9 bl 10015bb8 -100079c6: b108 cbz r0, 100079cc -100079c8: f000 fc06 bl 100081d8 -100079cc: f010 ffbc bl 10018948 -100079d0: e7f2 b.n 100079b8 -100079d2: bf00 nop -100079d4: 10049a8c .word 0x10049a8c - -100079d8 : -100079d8: b538 push {r3, r4, r5, lr} -100079da: 2001 movs r0, #1 -100079dc: f00e f878 bl 10015ad0 -100079e0: 2300 movs r3, #0 -100079e2: 4d16 ldr r5, [pc, #88] ; (10007a3c ) -100079e4: f44f 727a mov.w r2, #1000 ; 0x3e8 -100079e8: 4619 mov r1, r3 -100079ea: 6028 str r0, [r5, #0] -100079ec: f00e f8e4 bl 10015bb8 -100079f0: b1e8 cbz r0, 10007a2e -100079f2: 2200 movs r2, #0 -100079f4: 4c12 ldr r4, [pc, #72] ; (10007a40 ) -100079f6: 4b13 ldr r3, [pc, #76] ; (10007a44 ) -100079f8: 715a strb r2, [r3, #5] -100079fa: 7823 ldrb r3, [r4, #0] -100079fc: 075a lsls r2, r3, #29 -100079fe: bf5e ittt pl -10007a00: 2201 movpl r2, #1 -10007a02: 4b11 ldrpl r3, [pc, #68] ; (10007a48 ) -10007a04: 701a strbpl r2, [r3, #0] -10007a06: f001 f8ef bl 10008be8 -10007a0a: f006 fcd1 bl 1000e3b0 -10007a0e: 88a0 ldrh r0, [r4, #4] -10007a10: f002 fd20 bl 1000a454 -10007a14: 7823 ldrb r3, [r4, #0] -10007a16: 07db lsls r3, r3, #31 -10007a18: d503 bpl.n 10007a22 -10007a1a: f06f 0002 mvn.w r0, #2 -10007a1e: f011 faf3 bl 10019008 -10007a22: 2300 movs r3, #0 -10007a24: 6828 ldr r0, [r5, #0] -10007a26: 461a mov r2, r3 -10007a28: 4619 mov r1, r3 -10007a2a: f00d ffd7 bl 100159dc -10007a2e: f7ff ff53 bl 100078d8 -10007a32: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10007a36: 2000 movs r0, #0 -10007a38: f00e bade b.w 10015ff8 -10007a3c: 10049a8c .word 0x10049a8c -10007a40: 10044bbc .word 0x10044bbc -10007a44: 10044dc8 .word 0x10044dc8 -10007a48: 1004bae6 .word 0x1004bae6 - -10007a4c : -10007a4c: b5f0 push {r4, r5, r6, r7, lr} -10007a4e: 248e movs r4, #142 ; 0x8e -10007a50: 25e8 movs r5, #232 ; 0xe8 -10007a52: 26ee movs r6, #238 ; 0xee -10007a54: 2788 movs r7, #136 ; 0x88 -10007a56: 4603 mov r3, r0 -10007a58: 3004 adds r0, #4 -10007a5a: f001 02c0 and.w r2, r1, #192 ; 0xc0 -10007a5e: 2a40 cmp r2, #64 ; 0x40 -10007a60: d00f beq.n 10007a82 -10007a62: d806 bhi.n 10007a72 -10007a64: b15a cbz r2, 10007a7e -10007a66: 3301 adds r3, #1 -10007a68: 0089 lsls r1, r1, #2 -10007a6a: 4298 cmp r0, r3 -10007a6c: b2c9 uxtb r1, r1 -10007a6e: d1f4 bne.n 10007a5a -10007a70: bdf0 pop {r4, r5, r6, r7, pc} -10007a72: 2a80 cmp r2, #128 ; 0x80 -10007a74: d007 beq.n 10007a86 -10007a76: 2ac0 cmp r2, #192 ; 0xc0 -10007a78: d1f5 bne.n 10007a66 -10007a7a: 701e strb r6, [r3, #0] -10007a7c: e7f3 b.n 10007a66 -10007a7e: 701f strb r7, [r3, #0] -10007a80: e7f1 b.n 10007a66 -10007a82: 701c strb r4, [r3, #0] -10007a84: e7ef b.n 10007a66 -10007a86: 701d strb r5, [r3, #0] -10007a88: e7ed b.n 10007a66 - ... - -10007a8c : -10007a8c: 2300 movs r3, #0 -10007a8e: b507 push {r0, r1, r2, lr} -10007a90: 9301 str r3, [sp, #4] -10007a92: b199 cbz r1, 10007abc -10007a94: 2901 cmp r1, #1 -10007a96: d114 bne.n 10007ac2 -10007a98: aa01 add r2, sp, #4 -10007a9a: 2102 movs r1, #2 -10007a9c: f8d0 0700 ldr.w r0, [r0, #1792] ; 0x700 -10007aa0: f00d fe7a bl 10015798 -10007aa4: 2801 cmp r0, #1 -10007aa6: d109 bne.n 10007abc -10007aa8: 9b01 ldr r3, [sp, #4] -10007aaa: b13b cbz r3, 10007abc -10007aac: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -10007ab0: 4b08 ldr r3, [pc, #32] ; (10007ad4 ) -10007ab2: 601a str r2, [r3, #0] -10007ab4: f3bf 8f4f dsb sy -10007ab8: f3bf 8f6f isb sy -10007abc: b003 add sp, #12 -10007abe: f85d fb04 ldr.w pc, [sp], #4 -10007ac2: 4b05 ldr r3, [pc, #20] ; (10007ad8 ) -10007ac4: 681b ldr r3, [r3, #0] -10007ac6: 005b lsls r3, r3, #1 -10007ac8: d5f8 bpl.n 10007abc -10007aca: 4b04 ldr r3, [pc, #16] ; (10007adc ) -10007acc: 4804 ldr r0, [pc, #16] ; (10007ae0 ) -10007ace: 4798 blx r3 -10007ad0: e7f4 b.n 10007abc -10007ad2: bf00 nop -10007ad4: e000ed04 .word 0xe000ed04 -10007ad8: 10000314 .word 0x10000314 -10007adc: 0000f39d .word 0x0000f39d -10007ae0: 1003eaa0 .word 0x1003eaa0 - -10007ae4 : -10007ae4: b573 push {r0, r1, r4, r5, r6, lr} -10007ae6: 4604 mov r4, r0 -10007ae8: 460d mov r5, r1 -10007aea: f8d4 3620 ldr.w r3, [r4, #1568] ; 0x620 -10007aee: 075b lsls r3, r3, #29 -10007af0: d41d bmi.n 10007b2e -10007af2: b115 cbz r5, 10007afa -10007af4: 4628 mov r0, r5 -10007af6: f00e fc9b bl 10016430 -10007afa: 2300 movs r3, #0 -10007afc: f44f 727a mov.w r2, #1000 ; 0x3e8 -10007b00: 4619 mov r1, r3 -10007b02: f8d4 0704 ldr.w r0, [r4, #1796] ; 0x704 -10007b06: f00e f857 bl 10015bb8 -10007b0a: 2801 cmp r0, #1 -10007b0c: 4605 mov r5, r0 -10007b0e: d012 beq.n 10007b36 -10007b10: 4920 ldr r1, [pc, #128] ; (10007b94 ) -10007b12: 4821 ldr r0, [pc, #132] ; (10007b98 ) -10007b14: f013 f824 bl 1001ab60 -10007b18: 2300 movs r3, #0 -10007b1a: f8d4 0704 ldr.w r0, [r4, #1796] ; 0x704 -10007b1e: 461a mov r2, r3 -10007b20: 4619 mov r1, r3 -10007b22: f00d ff5b bl 100159dc -10007b26: f04f 30ff mov.w r0, #4294967295 -10007b2a: b002 add sp, #8 -10007b2c: bd70 pop {r4, r5, r6, pc} -10007b2e: 2000 movs r0, #0 -10007b30: f00e fc7e bl 10016430 -10007b34: e7d9 b.n 10007aea -10007b36: f8d4 3708 ldr.w r3, [r4, #1800] ; 0x708 -10007b3a: b113 cbz r3, 10007b42 -10007b3c: f8d4 370c ldr.w r3, [r4, #1804] ; 0x70c -10007b40: b913 cbnz r3, 10007b48 -10007b42: 4914 ldr r1, [pc, #80] ; (10007b94 ) -10007b44: 4815 ldr r0, [pc, #84] ; (10007b9c ) -10007b46: e7e5 b.n 10007b14 -10007b48: 2102 movs r1, #2 -10007b4a: f8d4 0700 ldr.w r0, [r4, #1792] ; 0x700 -10007b4e: f00d fdd5 bl 100156fc -10007b52: f8d4 270c ldr.w r2, [r4, #1804] ; 0x70c -10007b56: f8d4 1708 ldr.w r1, [r4, #1800] ; 0x708 -10007b5a: 4620 mov r0, r4 -10007b5c: f010 fb7e bl 1001825c -10007b60: f44f 737a mov.w r3, #1000 ; 0x3e8 -10007b64: 462a mov r2, r5 -10007b66: 9300 str r3, [sp, #0] -10007b68: 2102 movs r1, #2 -10007b6a: 2300 movs r3, #0 -10007b6c: f8d4 0700 ldr.w r0, [r4, #1792] ; 0x700 -10007b70: f00d fd6c bl 1001564c -10007b74: f010 0602 ands.w r6, r0, #2 -10007b78: d102 bne.n 10007b80 -10007b7a: 4906 ldr r1, [pc, #24] ; (10007b94 ) -10007b7c: 4808 ldr r0, [pc, #32] ; (10007ba0 ) -10007b7e: e7c9 b.n 10007b14 -10007b80: 2300 movs r3, #0 -10007b82: f8d4 0704 ldr.w r0, [r4, #1796] ; 0x704 -10007b86: 461a mov r2, r3 -10007b88: 4619 mov r1, r3 -10007b8a: f00d ff27 bl 100159dc -10007b8e: 4628 mov r0, r5 -10007b90: e7cb b.n 10007b2a -10007b92: bf00 nop -10007b94: 1003ea6e .word 0x1003ea6e -10007b98: 1003ea03 .word 0x1003ea03 -10007b9c: 1003ea33 .word 0x1003ea33 -10007ba0: 1003ea54 .word 0x1003ea54 - -10007ba4 : -10007ba4: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10007ba8: 4605 mov r5, r0 -10007baa: 460c mov r4, r1 -10007bac: 4616 mov r6, r2 -10007bae: 4699 mov r9, r3 -10007bb0: f8d5 3620 ldr.w r3, [r5, #1568] ; 0x620 -10007bb4: f013 0304 ands.w r3, r3, #4 -10007bb8: d138 bne.n 10007c2c -10007bba: f44f 727a mov.w r2, #1000 ; 0x3e8 -10007bbe: 4619 mov r1, r3 -10007bc0: f8d5 0704 ldr.w r0, [r5, #1796] ; 0x704 -10007bc4: f00d fff8 bl 10015bb8 -10007bc8: 2801 cmp r0, #1 -10007bca: d175 bne.n 10007cb8 -10007bcc: f8b5 3710 ldrh.w r3, [r5, #1808] ; 0x710 -10007bd0: f04f 0bc0 mov.w fp, #192 ; 0xc0 -10007bd4: 429e cmp r6, r3 -10007bd6: bf28 it cs -10007bd8: 461e movcs r6, r3 -10007bda: f8d5 7708 ldr.w r7, [r5, #1800] ; 0x708 -10007bde: eb06 0846 add.w r8, r6, r6, lsl #1 -10007be2: fa1f fa86 uxth.w sl, r6 -10007be6: 44a0 add r8, r4 -10007be8: 4544 cmp r4, r8 -10007bea: d123 bne.n 10007c34 -10007bec: f8b5 2710 ldrh.w r2, [r5, #1808] ; 0x710 -10007bf0: 4592 cmp sl, r2 -10007bf2: d208 bcs.n 10007c06 -10007bf4: 1b92 subs r2, r2, r6 -10007bf6: 4638 mov r0, r7 -10007bf8: 2188 movs r1, #136 ; 0x88 -10007bfa: f012 ffdd bl 1001abb8 -10007bfe: f8b5 3710 ldrh.w r3, [r5, #1808] ; 0x710 -10007c02: 1b9e subs r6, r3, r6 -10007c04: 4437 add r7, r6 -10007c06: 2219 movs r2, #25 -10007c08: 2100 movs r1, #0 -10007c0a: 4638 mov r0, r7 -10007c0c: f012 ffd4 bl 1001abb8 -10007c10: 2300 movs r3, #0 -10007c12: f8d5 0704 ldr.w r0, [r5, #1796] ; 0x704 -10007c16: 4619 mov r1, r3 -10007c18: 461a mov r2, r3 -10007c1a: f00d fedf bl 100159dc -10007c1e: 4649 mov r1, r9 -10007c20: 4628 mov r0, r5 -10007c22: b003 add sp, #12 -10007c24: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10007c28: f7ff bf5c b.w 10007ae4 -10007c2c: 2000 movs r0, #0 -10007c2e: f00e fbff bl 10016430 -10007c32: e7bd b.n 10007bb0 -10007c34: 7821 ldrb r1, [r4, #0] -10007c36: f894 e001 ldrb.w lr, [r4, #1] -10007c3a: fb0b f101 mul.w r1, fp, r1 -10007c3e: f3c1 2107 ubfx r1, r1, #8, #8 -10007c42: f001 033f and.w r3, r1, #63 ; 0x3f -10007c46: fb0e f303 mul.w r3, lr, r3 -10007c4a: 78a2 ldrb r2, [r4, #2] -10007c4c: 119b asrs r3, r3, #6 -10007c4e: fb02 f003 mul.w r0, r2, r3 -10007c52: ebae 0303 sub.w r3, lr, r3 -10007c56: ea6f 0e0e mvn.w lr, lr -10007c5a: b2db uxtb r3, r3 -10007c5c: fa5f fe8e uxtb.w lr, lr -10007c60: 4353 muls r3, r2 -10007c62: fb02 f20e mul.w r2, r2, lr -10007c66: 0989 lsrs r1, r1, #6 -10007c68: f3c2 2207 ubfx r2, r2, #8, #8 -10007c6c: f3c0 2007 ubfx r0, r0, #8, #8 -10007c70: 2901 cmp r1, #1 -10007c72: eb02 2e13 add.w lr, r2, r3, lsr #8 -10007c76: 4410 add r0, r2 -10007c78: d015 beq.n 10007ca6 -10007c7a: 2902 cmp r1, #2 -10007c7c: d017 beq.n 10007cae -10007c7e: 4613 mov r3, r2 -10007c80: b2c1 uxtb r1, r0 -10007c82: fa5f f28e uxtb.w r2, lr -10007c86: 4638 mov r0, r7 -10007c88: e88d 000c stmia.w sp, {r2, r3} -10007c8c: f7ff fede bl 10007a4c -10007c90: 9a00 ldr r2, [sp, #0] -10007c92: 3403 adds r4, #3 -10007c94: 4611 mov r1, r2 -10007c96: f7ff fed9 bl 10007a4c -10007c9a: 9b01 ldr r3, [sp, #4] -10007c9c: 4619 mov r1, r3 -10007c9e: f7ff fed5 bl 10007a4c -10007ca2: 4607 mov r7, r0 -10007ca4: e7a0 b.n 10007be8 -10007ca6: fa5f f18e uxtb.w r1, lr -10007caa: b2c3 uxtb r3, r0 -10007cac: e7eb b.n 10007c86 -10007cae: 4611 mov r1, r2 -10007cb0: fa5f f38e uxtb.w r3, lr -10007cb4: b2c2 uxtb r2, r0 -10007cb6: e7e6 b.n 10007c86 -10007cb8: 4904 ldr r1, [pc, #16] ; (10007ccc ) -10007cba: 4805 ldr r0, [pc, #20] ; (10007cd0 ) -10007cbc: f012 ff50 bl 1001ab60 -10007cc0: f04f 30ff mov.w r0, #4294967295 -10007cc4: b003 add sp, #12 -10007cc6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10007cca: bf00 nop -10007ccc: 1003ea78 .word 0x1003ea78 -10007cd0: 1003ea03 .word 0x1003ea03 - -10007cd4 : -10007cd4: b5f8 push {r3, r4, r5, r6, r7, lr} -10007cd6: 460f mov r7, r1 -10007cd8: 4605 mov r5, r0 -10007cda: b930 cbnz r0, 10007cea -10007cdc: 491b ldr r1, [pc, #108] ; (10007d4c ) -10007cde: 481c ldr r0, [pc, #112] ; (10007d50 ) -10007ce0: f012 ff3e bl 1001ab60 -10007ce4: f04f 30ff mov.w r0, #4294967295 -10007ce8: bdf8 pop {r3, r4, r5, r6, r7, pc} -10007cea: 2300 movs r3, #0 -10007cec: f44f 727a mov.w r2, #1000 ; 0x3e8 -10007cf0: 4619 mov r1, r3 -10007cf2: f8d0 0704 ldr.w r0, [r0, #1796] ; 0x704 -10007cf6: f00d ff5f bl 10015bb8 -10007cfa: 2801 cmp r0, #1 -10007cfc: 4604 mov r4, r0 -10007cfe: d002 beq.n 10007d06 -10007d00: 4912 ldr r1, [pc, #72] ; (10007d4c ) -10007d02: 4814 ldr r0, [pc, #80] ; (10007d54 ) -10007d04: e7ec b.n 10007ce0 -10007d06: 2fe4 cmp r7, #228 ; 0xe4 -10007d08: d81d bhi.n 10007d46 -10007d0a: 260c movs r6, #12 -10007d0c: 437e muls r6, r7 -10007d0e: 4812 ldr r0, [pc, #72] ; (10007d58 ) -10007d10: 4632 mov r2, r6 -10007d12: f8c5 0708 str.w r0, [r5, #1800] ; 0x708 -10007d16: 2188 movs r1, #136 ; 0x88 -10007d18: f012 ff4e bl 1001abb8 -10007d1c: f8d5 0708 ldr.w r0, [r5, #1800] ; 0x708 -10007d20: 2219 movs r2, #25 -10007d22: 2100 movs r1, #0 -10007d24: 4430 add r0, r6 -10007d26: f012 ff47 bl 1001abb8 -10007d2a: 2300 movs r3, #0 -10007d2c: 3619 adds r6, #25 -10007d2e: f8a5 7710 strh.w r7, [r5, #1808] ; 0x710 -10007d32: f8c5 670c str.w r6, [r5, #1804] ; 0x70c -10007d36: 461a mov r2, r3 -10007d38: 4619 mov r1, r3 -10007d3a: f8d5 0704 ldr.w r0, [r5, #1796] ; 0x704 -10007d3e: f00d fe4d bl 100159dc -10007d42: 4620 mov r0, r4 -10007d44: bdf8 pop {r3, r4, r5, r6, r7, pc} -10007d46: 4901 ldr r1, [pc, #4] ; (10007d4c ) -10007d48: 4804 ldr r0, [pc, #16] ; (10007d5c ) -10007d4a: e7c9 b.n 10007ce0 -10007d4c: 1003ea92 .word 0x1003ea92 -10007d50: 1003eb58 .word 0x1003eb58 -10007d54: 1003ea03 .word 0x1003ea03 -10007d58: 10049a90 .word 0x10049a90 -10007d5c: 1003eb76 .word 0x1003eb76 - -10007d60 : -10007d60: b537 push {r0, r1, r2, r4, r5, lr} -10007d62: 4605 mov r5, r0 -10007d64: f240 7014 movw r0, #1812 ; 0x714 -10007d68: f00d f9e0 bl 1001512c -10007d6c: 4604 mov r4, r0 -10007d6e: b930 cbnz r0, 10007d7e -10007d70: 4928 ldr r1, [pc, #160] ; (10007e14 ) -10007d72: 4829 ldr r0, [pc, #164] ; (10007e18 ) -10007d74: f012 fef4 bl 1001ab60 -10007d78: 4620 mov r0, r4 -10007d7a: b003 add sp, #12 -10007d7c: bd30 pop {r4, r5, pc} -10007d7e: f240 7214 movw r2, #1812 ; 0x714 -10007d82: 2100 movs r1, #0 -10007d84: f012 ff18 bl 1001abb8 -10007d88: 2001 movs r0, #1 -10007d8a: f00d fea1 bl 10015ad0 -10007d8e: f8c4 0704 str.w r0, [r4, #1796] ; 0x704 -10007d92: b910 cbnz r0, 10007d9a -10007d94: 491f ldr r1, [pc, #124] ; (10007e14 ) -10007d96: 4821 ldr r0, [pc, #132] ; (10007e1c ) -10007d98: e7ec b.n 10007d74 -10007d9a: f00d fc49 bl 10015630 -10007d9e: f8c4 0700 str.w r0, [r4, #1792] ; 0x700 -10007da2: b910 cbnz r0, 10007daa -10007da4: 491b ldr r1, [pc, #108] ; (10007e14 ) -10007da6: 481e ldr r0, [pc, #120] ; (10007e20 ) -10007da8: e7e4 b.n 10007d74 -10007daa: 2320 movs r3, #32 -10007dac: 2223 movs r2, #35 ; 0x23 -10007dae: 9300 str r3, [sp, #0] -10007db0: 2122 movs r1, #34 ; 0x22 -10007db2: 2321 movs r3, #33 ; 0x21 -10007db4: 4620 mov r0, r4 -10007db6: f010 f951 bl 1001805c -10007dba: 2300 movs r3, #0 -10007dbc: 2203 movs r2, #3 -10007dbe: 2108 movs r1, #8 -10007dc0: 4620 mov r0, r4 -10007dc2: f010 f9f1 bl 100181a8 -10007dc6: 4917 ldr r1, [pc, #92] ; (10007e24 ) -10007dc8: 4620 mov r0, r4 -10007dca: f010 fa3f bl 1001824c -10007dce: 4916 ldr r1, [pc, #88] ; (10007e28 ) -10007dd0: 4620 mov r0, r4 -10007dd2: 4622 mov r2, r4 -10007dd4: f010 fa3c bl 10018250 -10007dd8: 4629 mov r1, r5 -10007dda: 4620 mov r0, r4 -10007ddc: f7ff ff7a bl 10007cd4 -10007de0: 2800 cmp r0, #0 -10007de2: d1c9 bne.n 10007d78 -10007de4: 490b ldr r1, [pc, #44] ; (10007e14 ) -10007de6: 4811 ldr r0, [pc, #68] ; (10007e2c ) -10007de8: f012 feba bl 1001ab60 -10007dec: f8d4 0704 ldr.w r0, [r4, #1796] ; 0x704 -10007df0: b108 cbz r0, 10007df6 -10007df2: f00d ff84 bl 10015cfe -10007df6: f8d4 0700 ldr.w r0, [r4, #1792] ; 0x700 -10007dfa: b108 cbz r0, 10007e00 -10007dfc: f00d fcb9 bl 10015772 -10007e00: f8d4 0708 ldr.w r0, [r4, #1800] ; 0x708 -10007e04: b108 cbz r0, 10007e0a -10007e06: f00d fa2d bl 10015264 -10007e0a: 4620 mov r0, r4 -10007e0c: f00d fa2a bl 10015264 -10007e10: 2400 movs r4, #0 -10007e12: e7b1 b.n 10007d78 -10007e14: 1003ea86 .word 0x1003ea86 -10007e18: 1003eac0 .word 0x1003eac0 -10007e1c: 1003eae4 .word 0x1003eae4 -10007e20: 1003eb08 .word 0x1003eb08 -10007e24: 0033e140 .word 0x0033e140 -10007e28: 10007a8d .word 0x10007a8d -10007e2c: 1003eb32 .word 0x1003eb32 - -10007e30 : -10007e30: b570 push {r4, r5, r6, lr} -10007e32: 6803 ldr r3, [r0, #0] -10007e34: 4d24 ldr r5, [pc, #144] ; (10007ec8 ) -10007e36: 4604 mov r4, r0 -10007e38: 42ab cmp r3, r5 -10007e3a: 460e mov r6, r1 -10007e3c: d010 beq.n 10007e60 -10007e3e: 2218 movs r2, #24 -10007e40: 21ff movs r1, #255 ; 0xff -10007e42: f012 feb9 bl 1001abb8 -10007e46: 23e4 movs r3, #228 ; 0xe4 -10007e48: 60a3 str r3, [r4, #8] -10007e4a: 230a movs r3, #10 -10007e4c: 6123 str r3, [r4, #16] -10007e4e: 23ff movs r3, #255 ; 0xff -10007e50: 2200 movs r2, #0 -10007e52: 60e3 str r3, [r4, #12] -10007e54: 2301 movs r3, #1 -10007e56: 7562 strb r2, [r4, #21] -10007e58: 4a1c ldr r2, [pc, #112] ; (10007ecc ) -10007e5a: 6025 str r5, [r4, #0] -10007e5c: 7523 strb r3, [r4, #20] -10007e5e: 6013 str r3, [r2, #0] -10007e60: 68a3 ldr r3, [r4, #8] -10007e62: 2be4 cmp r3, #228 ; 0xe4 -10007e64: d904 bls.n 10007e70 -10007e66: 23e4 movs r3, #228 ; 0xe4 -10007e68: 2201 movs r2, #1 -10007e6a: 60a3 str r3, [r4, #8] -10007e6c: 4b17 ldr r3, [pc, #92] ; (10007ecc ) -10007e6e: 601a str r2, [r3, #0] -10007e70: 6923 ldr r3, [r4, #16] -10007e72: f5b3 7ffa cmp.w r3, #500 ; 0x1f4 -10007e76: d905 bls.n 10007e84 -10007e78: f44f 73fa mov.w r3, #500 ; 0x1f4 -10007e7c: 2201 movs r2, #1 -10007e7e: 6123 str r3, [r4, #16] -10007e80: 4b12 ldr r3, [pc, #72] ; (10007ecc ) -10007e82: 601a str r2, [r3, #0] -10007e84: 68e3 ldr r3, [r4, #12] -10007e86: 2bff cmp r3, #255 ; 0xff -10007e88: d904 bls.n 10007e94 -10007e8a: 23ff movs r3, #255 ; 0xff -10007e8c: 2201 movs r2, #1 -10007e8e: 60e3 str r3, [r4, #12] -10007e90: 4b0e ldr r3, [pc, #56] ; (10007ecc ) -10007e92: 601a str r2, [r3, #0] -10007e94: 68a0 ldr r0, [r4, #8] -10007e96: eb00 0040 add.w r0, r0, r0, lsl #1 -10007e9a: f00d f947 bl 1001512c -10007e9e: 6060 str r0, [r4, #4] -10007ea0: b930 cbnz r0, 10007eb0 -10007ea2: 490b ldr r1, [pc, #44] ; (10007ed0 ) -10007ea4: 480b ldr r0, [pc, #44] ; (10007ed4 ) -10007ea6: f012 fe5b bl 1001ab60 -10007eaa: f04f 30ff mov.w r0, #4294967295 -10007eae: bd70 pop {r4, r5, r6, pc} -10007eb0: 68a2 ldr r2, [r4, #8] -10007eb2: 2100 movs r1, #0 -10007eb4: eb02 0242 add.w r2, r2, r2, lsl #1 -10007eb8: f012 fe7e bl 1001abb8 -10007ebc: 8921 ldrh r1, [r4, #8] -10007ebe: 4630 mov r0, r6 -10007ec0: f7ff ff08 bl 10007cd4 -10007ec4: 2001 movs r0, #1 -10007ec6: bd70 pop {r4, r5, r6, pc} -10007ec8: 4c414d50 .word 0x4c414d50 -10007ecc: 1004a560 .word 0x1004a560 -10007ed0: 1003eba2 .word 0x1003eba2 -10007ed4: 1003ebb1 .word 0x1003ebb1 - -10007ed8 : -10007ed8: 2300 movs r3, #0 -10007eda: b530 push {r4, r5, lr} -10007edc: 6884 ldr r4, [r0, #8] -10007ede: 42a3 cmp r3, r4 -10007ee0: d100 bne.n 10007ee4 -10007ee2: bd30 pop {r4, r5, pc} -10007ee4: 6842 ldr r2, [r0, #4] -10007ee6: eb03 0543 add.w r5, r3, r3, lsl #1 -10007eea: 442a add r2, r5 -10007eec: 7091 strb r1, [r2, #2] -10007eee: 3301 adds r3, #1 -10007ef0: e7f5 b.n 10007ede - ... - -10007ef4 : -10007ef4: 4b07 ldr r3, [pc, #28] ; (10007f14 ) -10007ef6: 6842 ldr r2, [r0, #4] -10007ef8: 429a cmp r2, r3 -10007efa: d007 beq.n 10007f0c -10007efc: 6043 str r3, [r0, #4] -10007efe: 2372 movs r3, #114 ; 0x72 -10007f00: 6083 str r3, [r0, #8] -10007f02: 2301 movs r3, #1 -10007f04: 4a04 ldr r2, [pc, #16] ; (10007f18 ) -10007f06: 7003 strb r3, [r0, #0] -10007f08: 7303 strb r3, [r0, #12] -10007f0a: 6013 str r3, [r2, #0] -10007f0c: 2300 movs r3, #0 -10007f0e: 7343 strb r3, [r0, #13] -10007f10: 4770 bx lr -10007f12: bf00 nop -10007f14: 4c414d50 .word 0x4c414d50 -10007f18: 1004a560 .word 0x1004a560 - -10007f1c : -10007f1c: 7803 ldrb r3, [r0, #0] -10007f1e: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -10007f22: b173 cbz r3, 10007f42 -10007f24: 7d0b ldrb r3, [r1, #20] -10007f26: b163 cbz r3, 10007f42 -10007f28: 7b44 ldrb r4, [r0, #13] -10007f2a: 6885 ldr r5, [r0, #8] -10007f2c: 4622 mov r2, r4 -10007f2e: 462e mov r6, r5 -10007f30: 2300 movs r3, #0 -10007f32: 27ff movs r7, #255 ; 0xff -10007f34: f8d1 8008 ldr.w r8, [r1, #8] -10007f38: 4543 cmp r3, r8 -10007f3a: d104 bne.n 10007f46 -10007f3c: 7b03 ldrb r3, [r0, #12] -10007f3e: 441c add r4, r3 -10007f40: 7344 strb r4, [r0, #13] -10007f42: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -10007f46: 42b3 cmp r3, r6 -10007f48: bf08 it eq -10007f4a: 4622 moveq r2, r4 -10007f4c: f8d1 c004 ldr.w ip, [r1, #4] -10007f50: eb03 0e43 add.w lr, r3, r3, lsl #1 -10007f54: f80c 200e strb.w r2, [ip, lr] -10007f58: eb0c 090e add.w r9, ip, lr -10007f5c: fbb7 fef5 udiv lr, r7, r5 -10007f60: 4472 add r2, lr -10007f62: bf08 it eq -10007f64: 195e addeq r6, r3, r5 -10007f66: f889 7001 strb.w r7, [r9, #1] -10007f6a: b2d2 uxtb r2, r2 -10007f6c: 3301 adds r3, #1 -10007f6e: e7e3 b.n 10007f38 - -10007f70 : -10007f70: 4b0a ldr r3, [pc, #40] ; (10007f9c ) -10007f72: 6842 ldr r2, [r0, #4] -10007f74: 429a cmp r2, r3 -10007f76: d00a beq.n 10007f8e -10007f78: 22ff movs r2, #255 ; 0xff -10007f7a: 6102 str r2, [r0, #16] -10007f7c: 22fa movs r2, #250 ; 0xfa -10007f7e: 6043 str r3, [r0, #4] -10007f80: 2300 movs r3, #0 -10007f82: 6082 str r2, [r0, #8] -10007f84: 2201 movs r2, #1 -10007f86: 7003 strb r3, [r0, #0] -10007f88: 60c3 str r3, [r0, #12] -10007f8a: 4b05 ldr r3, [pc, #20] ; (10007fa0 ) -10007f8c: 601a str r2, [r3, #0] -10007f8e: 6883 ldr r3, [r0, #8] -10007f90: b903 cbnz r3, 10007f94 -10007f92: 7003 strb r3, [r0, #0] -10007f94: 2300 movs r3, #0 -10007f96: 6143 str r3, [r0, #20] -10007f98: 6183 str r3, [r0, #24] -10007f9a: 4770 bx lr -10007f9c: 4c414d50 .word 0x4c414d50 -10007fa0: 1004a560 .word 0x1004a560 - -10007fa4 : -10007fa4: 7803 ldrb r3, [r0, #0] -10007fa6: b5f0 push {r4, r5, r6, r7, lr} -10007fa8: 2b00 cmp r3, #0 -10007faa: d044 beq.n 10008036 -10007fac: 7d0b ldrb r3, [r1, #20] -10007fae: 2b00 cmp r3, #0 -10007fb0: d041 beq.n 10008036 -10007fb2: 6943 ldr r3, [r0, #20] -10007fb4: 688e ldr r6, [r1, #8] -10007fb6: b1ab cbz r3, 10007fe4 -10007fb8: 2300 movs r3, #0 -10007fba: f04f 0eff mov.w lr, #255 ; 0xff -10007fbe: 42b3 cmp r3, r6 -10007fc0: d014 beq.n 10007fec -10007fc2: 684c ldr r4, [r1, #4] -10007fc4: eb03 0243 add.w r2, r3, r3, lsl #1 -10007fc8: 4422 add r2, r4 -10007fca: 7894 ldrb r4, [r2, #2] -10007fcc: 6907 ldr r7, [r0, #16] -10007fce: 6885 ldr r5, [r0, #8] -10007fd0: 42bc cmp r4, r7 -10007fd2: d805 bhi.n 10007fe0 -10007fd4: fbbe fcf5 udiv ip, lr, r5 -10007fd8: 4464 add r4, ip -10007fda: 42a7 cmp r7, r4 -10007fdc: d223 bcs.n 10008026 -10007fde: 7097 strb r7, [r2, #2] -10007fe0: 6185 str r5, [r0, #24] -10007fe2: e021 b.n 10008028 -10007fe4: 27ff movs r7, #255 ; 0xff -10007fe6: 469e mov lr, r3 -10007fe8: 42b3 cmp r3, r6 -10007fea: d106 bne.n 10007ffa -10007fec: 6983 ldr r3, [r0, #24] -10007fee: 6882 ldr r2, [r0, #8] -10007ff0: 3301 adds r3, #1 -10007ff2: 4293 cmp r3, r2 -10007ff4: 6183 str r3, [r0, #24] -10007ff6: d219 bcs.n 1000802c -10007ff8: bdf0 pop {r4, r5, r6, r7, pc} -10007ffa: 684c ldr r4, [r1, #4] -10007ffc: eb03 0243 add.w r2, r3, r3, lsl #1 -10008000: 4422 add r2, r4 -10008002: 68c5 ldr r5, [r0, #12] -10008004: 7894 ldrb r4, [r2, #2] -10008006: 42ac cmp r4, r5 -10008008: 6885 ldr r5, [r0, #8] -1000800a: d90a bls.n 10008022 -1000800c: fbb7 fcf5 udiv ip, r7, r5 -10008010: 4564 cmp r4, ip -10008012: d904 bls.n 1000801e -10008014: eba4 040c sub.w r4, r4, ip -10008018: 7094 strb r4, [r2, #2] -1000801a: 3301 adds r3, #1 -1000801c: e7e4 b.n 10007fe8 -1000801e: f882 e002 strb.w lr, [r2, #2] -10008022: 6185 str r5, [r0, #24] -10008024: e7f9 b.n 1000801a -10008026: 7094 strb r4, [r2, #2] -10008028: 3301 adds r3, #1 -1000802a: e7c8 b.n 10007fbe -1000802c: 6942 ldr r2, [r0, #20] -1000802e: 2300 movs r3, #0 -10008030: b112 cbz r2, 10008038 -10008032: 6143 str r3, [r0, #20] -10008034: 6183 str r3, [r0, #24] -10008036: bdf0 pop {r4, r5, r6, r7, pc} -10008038: 2201 movs r2, #1 -1000803a: 6142 str r2, [r0, #20] -1000803c: e7fa b.n 10008034 - ... - -10008040 : -10008040: 4b07 ldr r3, [pc, #28] ; (10008060 ) -10008042: 6842 ldr r2, [r0, #4] -10008044: 429a cmp r2, r3 -10008046: d009 beq.n 1000805c -10008048: 6043 str r3, [r0, #4] -1000804a: 2300 movs r3, #0 -1000804c: 2214 movs r2, #20 -1000804e: 7003 strb r3, [r0, #0] -10008050: 7283 strb r3, [r0, #10] -10008052: 2301 movs r3, #1 -10008054: 7202 strb r2, [r0, #8] -10008056: 4a03 ldr r2, [pc, #12] ; (10008064 ) -10008058: 7243 strb r3, [r0, #9] -1000805a: 6013 str r3, [r2, #0] -1000805c: 4770 bx lr -1000805e: bf00 nop -10008060: 4c414d50 .word 0x4c414d50 -10008064: 1004a560 .word 0x1004a560 - -10008068 : -10008068: 7803 ldrb r3, [r0, #0] -1000806a: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1000806e: b18b cbz r3, 10008094 -10008070: 7d0b ldrb r3, [r1, #20] -10008072: b17b cbz r3, 10008094 -10008074: 7a82 ldrb r2, [r0, #10] -10008076: 7a05 ldrb r5, [r0, #8] -10008078: 4614 mov r4, r2 -1000807a: 462f mov r7, r5 -1000807c: 2300 movs r3, #0 -1000807e: f04f 08ff mov.w r8, #255 ; 0xff -10008082: f8d1 e008 ldr.w lr, [r1, #8] -10008086: f8df c038 ldr.w ip, [pc, #56] ; 100080c0 -1000808a: 4573 cmp r3, lr -1000808c: d104 bne.n 10008098 -1000808e: 7a43 ldrb r3, [r0, #9] -10008090: 441a add r2, r3 -10008092: 7282 strb r2, [r0, #10] -10008094: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10008098: 42bb cmp r3, r7 -1000809a: bf08 it eq -1000809c: 4614 moveq r4, r2 -1000809e: 684e ldr r6, [r1, #4] -100080a0: f81c 9004 ldrb.w r9, [ip, r4] -100080a4: eb03 0a43 add.w sl, r3, r3, lsl #1 -100080a8: 4456 add r6, sl -100080aa: f886 9002 strb.w r9, [r6, #2] -100080ae: fb98 f6f5 sdiv r6, r8, r5 -100080b2: 4434 add r4, r6 -100080b4: bf08 it eq -100080b6: 195f addeq r7, r3, r5 -100080b8: b2e4 uxtb r4, r4 -100080ba: 3301 adds r3, #1 -100080bc: e7e5 b.n 1000808a -100080be: bf00 nop -100080c0: 10044bc6 .word 0x10044bc6 - -100080c4 : -100080c4: 4b08 ldr r3, [pc, #32] ; (100080e8 ) -100080c6: 6882 ldr r2, [r0, #8] -100080c8: 429a cmp r2, r3 -100080ca: d00b beq.n 100080e4 -100080cc: 6083 str r3, [r0, #8] -100080ce: 2380 movs r3, #128 ; 0x80 -100080d0: 7043 strb r3, [r0, #1] -100080d2: 23ff movs r3, #255 ; 0xff -100080d4: 7083 strb r3, [r0, #2] -100080d6: 70c3 strb r3, [r0, #3] -100080d8: 2300 movs r3, #0 -100080da: 2201 movs r2, #1 -100080dc: 7003 strb r3, [r0, #0] -100080de: 7103 strb r3, [r0, #4] -100080e0: 4b02 ldr r3, [pc, #8] ; (100080ec ) -100080e2: 601a str r2, [r3, #0] -100080e4: 4770 bx lr -100080e6: bf00 nop -100080e8: 4c414d50 .word 0x4c414d50 -100080ec: 1004a560 .word 0x1004a560 - -100080f0 : -100080f0: 7d4b ldrb r3, [r1, #21] -100080f2: b5f0 push {r4, r5, r6, r7, lr} -100080f4: b1a3 cbz r3, 10008120 -100080f6: 2300 movs r3, #0 -100080f8: 2501 movs r5, #1 -100080fa: 461e mov r6, r3 -100080fc: 688c ldr r4, [r1, #8] -100080fe: 42a3 cmp r3, r4 -10008100: d100 bne.n 10008104 -10008102: bdf0 pop {r4, r5, r6, r7, pc} -10008104: 6848 ldr r0, [r1, #4] -10008106: eb03 0243 add.w r2, r3, r3, lsl #1 -1000810a: 4402 add r2, r0 -1000810c: 7890 ldrb r0, [r2, #2] -1000810e: 68cf ldr r7, [r1, #12] -10008110: 3301 adds r3, #1 -10008112: 42b8 cmp r0, r7 -10008114: bf39 ittee cc -10008116: 3001 addcc r0, #1 -10008118: 7090 strbcc r0, [r2, #2] -1000811a: 750d strbcs r5, [r1, #20] -1000811c: 754e strbcs r6, [r1, #21] -1000811e: e7ee b.n 100080fe -10008120: 7d0a ldrb r2, [r1, #20] -10008122: b972 cbnz r2, 10008142 -10008124: 4613 mov r3, r2 -10008126: 688c ldr r4, [r1, #8] -10008128: 42a3 cmp r3, r4 -1000812a: d100 bne.n 1000812e -1000812c: bdf0 pop {r4, r5, r6, r7, pc} -1000812e: 6848 ldr r0, [r1, #4] -10008130: eb03 0243 add.w r2, r3, r3, lsl #1 -10008134: 4402 add r2, r0 -10008136: 7890 ldrb r0, [r2, #2] -10008138: b108 cbz r0, 1000813e -1000813a: 3801 subs r0, #1 -1000813c: 7090 strb r0, [r2, #2] -1000813e: 3301 adds r3, #1 -10008140: e7f2 b.n 10008128 -10008142: 7802 ldrb r2, [r0, #0] -10008144: b132 cbz r2, 10008154 -10008146: 7902 ldrb r2, [r0, #4] -10008148: b122 cbz r2, 10008154 -1000814a: 688e ldr r6, [r1, #8] -1000814c: 42b3 cmp r3, r6 -1000814e: d102 bne.n 10008156 -10008150: 2300 movs r3, #0 -10008152: 7103 strb r3, [r0, #4] -10008154: bdf0 pop {r4, r5, r6, r7, pc} -10008156: 684d ldr r5, [r1, #4] -10008158: 7847 ldrb r7, [r0, #1] -1000815a: eb03 0443 add.w r4, r3, r3, lsl #1 -1000815e: 552f strb r7, [r5, r4] -10008160: 192a adds r2, r5, r4 -10008162: 7884 ldrb r4, [r0, #2] -10008164: 3301 adds r3, #1 -10008166: 7054 strb r4, [r2, #1] -10008168: 78c4 ldrb r4, [r0, #3] -1000816a: 7094 strb r4, [r2, #2] -1000816c: e7ee b.n 1000814c - ... - -10008170 : -10008170: b508 push {r3, lr} -10008172: 20e4 movs r0, #228 ; 0xe4 -10008174: f7ff fdf4 bl 10007d60 -10008178: 4b0f ldr r3, [pc, #60] ; (100081b8 ) -1000817a: 4601 mov r1, r0 -1000817c: 6018 str r0, [r3, #0] -1000817e: b928 cbnz r0, 1000818c -10008180: e8bd 4008 ldmia.w sp!, {r3, lr} -10008184: 490d ldr r1, [pc, #52] ; (100081bc ) -10008186: 480e ldr r0, [pc, #56] ; (100081c0 ) -10008188: f012 bcea b.w 1001ab60 -1000818c: 480d ldr r0, [pc, #52] ; (100081c4 ) -1000818e: f7ff fe4f bl 10007e30 -10008192: 480d ldr r0, [pc, #52] ; (100081c8 ) -10008194: f7ff feae bl 10007ef4 -10008198: 480c ldr r0, [pc, #48] ; (100081cc ) -1000819a: f7ff fee9 bl 10007f70 -1000819e: 480c ldr r0, [pc, #48] ; (100081d0 ) -100081a0: f7ff ff90 bl 100080c4 -100081a4: 480b ldr r0, [pc, #44] ; (100081d4 ) -100081a6: f7ff ff4b bl 10008040 -100081aa: e8bd 4008 ldmia.w sp!, {r3, lr} -100081ae: 21ff movs r1, #255 ; 0xff -100081b0: 4804 ldr r0, [pc, #16] ; (100081c4 ) -100081b2: f7ff be91 b.w 10007ed8 -100081b6: bf00 nop -100081b8: 1004a5c0 .word 0x1004a5c0 -100081bc: 1003ebc7 .word 0x1003ebc7 -100081c0: 1003ebdd .word 0x1003ebdd -100081c4: 1004a5a8 .word 0x1004a5a8 -100081c8: 1004a58c .word 0x1004a58c -100081cc: 1004a570 .word 0x1004a570 -100081d0: 1004a564 .word 0x1004a564 -100081d4: 1004a59c .word 0x1004a59c - -100081d8 : -100081d8: b580 push {r7, lr} -100081da: 2001 movs r0, #1 -100081dc: f00d fc78 bl 10015ad0 -100081e0: 4c16 ldr r4, [pc, #88] ; (1000823c ) -100081e2: 4d17 ldr r5, [pc, #92] ; (10008240 ) -100081e4: 4e17 ldr r6, [pc, #92] ; (10008244 ) -100081e6: 4f18 ldr r7, [pc, #96] ; (10008248 ) -100081e8: 6020 str r0, [r4, #0] -100081ea: 2300 movs r3, #0 -100081ec: f241 3288 movw r2, #5000 ; 0x1388 -100081f0: 4619 mov r1, r3 -100081f2: 6820 ldr r0, [r4, #0] -100081f4: f00d fce0 bl 10015bb8 -100081f8: b1e0 cbz r0, 10008234 -100081fa: 4911 ldr r1, [pc, #68] ; (10008240 ) -100081fc: 4630 mov r0, r6 -100081fe: f7ff fe8d bl 10007f1c -10008202: 490f ldr r1, [pc, #60] ; (10008240 ) -10008204: 4638 mov r0, r7 -10008206: f7ff ff73 bl 100080f0 -1000820a: 490d ldr r1, [pc, #52] ; (10008240 ) -1000820c: 480f ldr r0, [pc, #60] ; (1000824c ) -1000820e: f7ff ff2b bl 10008068 -10008212: 490b ldr r1, [pc, #44] ; (10008240 ) -10008214: 480e ldr r0, [pc, #56] ; (10008250 ) -10008216: f7ff fec5 bl 10007fa4 -1000821a: 480e ldr r0, [pc, #56] ; (10008254 ) -1000821c: 8a2b ldrh r3, [r5, #16] -1000821e: 68aa ldr r2, [r5, #8] -10008220: 6869 ldr r1, [r5, #4] -10008222: 6800 ldr r0, [r0, #0] -10008224: f7ff fcbe bl 10007ba4 -10008228: 2300 movs r3, #0 -1000822a: 6820 ldr r0, [r4, #0] -1000822c: 461a mov r2, r3 -1000822e: 4619 mov r1, r3 -10008230: f00d fbd4 bl 100159dc -10008234: f010 fb88 bl 10018948 -10008238: e7d7 b.n 100081ea -1000823a: bf00 nop -1000823c: 1004a55c .word 0x1004a55c -10008240: 1004a5a8 .word 0x1004a5a8 -10008244: 1004a58c .word 0x1004a58c -10008248: 1004a564 .word 0x1004a564 -1000824c: 1004a59c .word 0x1004a59c -10008250: 1004a570 .word 0x1004a570 -10008254: 1004a5c0 .word 0x1004a5c0 - -10008258 : -10008258: b538 push {r3, r4, r5, lr} -1000825a: 6843 ldr r3, [r0, #4] -1000825c: 4605 mov r5, r0 -1000825e: 2b04 cmp r3, #4 -10008260: d105 bne.n 1000826e -10008262: 68ab ldr r3, [r5, #8] -10008264: 68dc ldr r4, [r3, #12] -10008266: f103 020c add.w r2, r3, #12 -1000826a: b974 cbnz r4, 1000828a -1000826c: bd38 pop {r3, r4, r5, pc} -1000826e: 2304 movs r3, #4 -10008270: 6043 str r3, [r0, #4] -10008272: 6883 ldr r3, [r0, #8] -10008274: 695b ldr r3, [r3, #20] -10008276: b103 cbz r3, 1000827a -10008278: 4798 blx r3 -1000827a: 4b15 ldr r3, [pc, #84] ; (100082d0 ) -1000827c: 681b ldr r3, [r3, #0] -1000827e: 2b00 cmp r3, #0 -10008280: d0f4 beq.n 1000826c -10008282: 68ab ldr r3, [r5, #8] -10008284: 2b00 cmp r3, #0 -10008286: d1ec bne.n 10008262 -10008288: bd38 pop {r3, r4, r5, pc} -1000828a: 42ac cmp r4, r5 -1000828c: 6961 ldr r1, [r4, #20] -1000828e: d11b bne.n 100082c8 -10008290: 2500 movs r5, #0 -10008292: 6011 str r1, [r2, #0] -10008294: 6165 str r5, [r4, #20] -10008296: 79da ldrb r2, [r3, #7] -10008298: 3a01 subs r2, #1 -1000829a: 71da strb r2, [r3, #7] -1000829c: 6b60 ldr r0, [r4, #52] ; 0x34 -1000829e: b110 cbz r0, 100082a6 -100082a0: f00c ffe0 bl 10015264 -100082a4: 6365 str r5, [r4, #52] ; 0x34 -100082a6: 69e0 ldr r0, [r4, #28] -100082a8: b118 cbz r0, 100082b2 -100082aa: f00c ffdb bl 10015264 -100082ae: 2300 movs r3, #0 -100082b0: 61e3 str r3, [r4, #28] -100082b2: 6a60 ldr r0, [r4, #36] ; 0x24 -100082b4: b118 cbz r0, 100082be -100082b6: f00c ffd5 bl 10015264 -100082ba: 2300 movs r3, #0 -100082bc: 6263 str r3, [r4, #36] ; 0x24 -100082be: 4620 mov r0, r4 -100082c0: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -100082c4: f00c bfce b.w 10015264 -100082c8: f104 0214 add.w r2, r4, #20 -100082cc: 460c mov r4, r1 -100082ce: e7cc b.n 1000826a -100082d0: 1004a5c4 .word 0x1004a5c4 - -100082d4 : -100082d4: b5f8 push {r3, r4, r5, r6, r7, lr} -100082d6: 8803 ldrh r3, [r0, #0] -100082d8: 4604 mov r4, r0 -100082da: f443 7380 orr.w r3, r3, #256 ; 0x100 -100082de: 8003 strh r3, [r0, #0] -100082e0: 460e mov r6, r1 -100082e2: 2900 cmp r1, #0 -100082e4: d048 beq.n 10008378 -100082e6: 6a40 ldr r0, [r0, #36] ; 0x24 -100082e8: 2800 cmp r0, #0 -100082ea: d033 beq.n 10008354 -100082ec: 8823 ldrh r3, [r4, #0] -100082ee: 071a lsls r2, r3, #28 -100082f0: d51f bpl.n 10008332 -100082f2: 8de1 ldrh r1, [r4, #46] ; 0x2e -100082f4: 8d65 ldrh r5, [r4, #42] ; 0x2a -100082f6: 42a9 cmp r1, r5 -100082f8: d21b bcs.n 10008332 -100082fa: 428e cmp r6, r1 -100082fc: eba5 0501 sub.w r5, r5, r1 -10008300: d81b bhi.n 1000833a -10008302: 462a mov r2, r5 -10008304: 4401 add r1, r0 -10008306: f012 fc53 bl 1001abb0 -1000830a: 8de3 ldrh r3, [r4, #46] ; 0x2e -1000830c: 8565 strh r5, [r4, #42] ; 0x2a -1000830e: 429e cmp r6, r3 -10008310: d006 beq.n 10008320 -10008312: 4435 add r5, r6 -10008314: 1c69 adds r1, r5, #1 -10008316: 6a60 ldr r0, [r4, #36] ; 0x24 -10008318: f00c ffc8 bl 100152ac -1000831c: 6260 str r0, [r4, #36] ; 0x24 -1000831e: b1b0 cbz r0, 1000834e -10008320: 2000 movs r0, #0 -10008322: 6a63 ldr r3, [r4, #36] ; 0x24 -10008324: 5558 strb r0, [r3, r5] -10008326: 8823 ldrh r3, [r4, #0] -10008328: 85e0 strh r0, [r4, #46] ; 0x2e -1000832a: f360 2308 bfi r3, r0, #8, #1 -1000832e: 8023 strh r3, [r4, #0] -10008330: bdf8 pop {r3, r4, r5, r6, r7, pc} -10008332: 2500 movs r5, #0 -10008334: f00c ff96 bl 10015264 -10008338: 6265 str r5, [r4, #36] ; 0x24 -1000833a: 442e add r6, r5 -1000833c: 1c70 adds r0, r6, #1 -1000833e: f00c fef5 bl 1001512c -10008342: 4607 mov r7, r0 -10008344: b940 cbnz r0, 10008358 -10008346: 8823 ldrh r3, [r4, #0] -10008348: f360 2308 bfi r3, r0, #8, #1 -1000834c: 8023 strh r3, [r4, #0] -1000834e: f04f 30ff mov.w r0, #4294967295 -10008352: bdf8 pop {r3, r4, r5, r6, r7, pc} -10008354: 4605 mov r5, r0 -10008356: e7f0 b.n 1000833a -10008358: 2300 movs r3, #0 -1000835a: 5583 strb r3, [r0, r6] -1000835c: b145 cbz r5, 10008370 -1000835e: 8de3 ldrh r3, [r4, #46] ; 0x2e -10008360: 6a61 ldr r1, [r4, #36] ; 0x24 -10008362: 462a mov r2, r5 -10008364: 4419 add r1, r3 -10008366: f012 fc23 bl 1001abb0 -1000836a: 6a60 ldr r0, [r4, #36] ; 0x24 -1000836c: f00c ff7a bl 10015264 -10008370: 6267 str r7, [r4, #36] ; 0x24 -10008372: 8565 strh r5, [r4, #42] ; 0x2a -10008374: 2000 movs r0, #0 -10008376: e7d6 b.n 10008326 -10008378: 8803 ldrh r3, [r0, #0] -1000837a: 071b lsls r3, r3, #28 -1000837c: d503 bpl.n 10008386 -1000837e: 8dc1 ldrh r1, [r0, #46] ; 0x2e -10008380: 8d45 ldrh r5, [r0, #42] ; 0x2a -10008382: 42a9 cmp r1, r5 -10008384: d308 bcc.n 10008398 -10008386: 2500 movs r5, #0 -10008388: 6a60 ldr r0, [r4, #36] ; 0x24 -1000838a: 8565 strh r5, [r4, #42] ; 0x2a -1000838c: 2800 cmp r0, #0 -1000838e: d0f1 beq.n 10008374 -10008390: f00c ff68 bl 10015264 -10008394: 6265 str r5, [r4, #36] ; 0x24 -10008396: e7ed b.n 10008374 -10008398: 2900 cmp r1, #0 -1000839a: d0eb beq.n 10008374 -1000839c: 6a40 ldr r0, [r0, #36] ; 0x24 -1000839e: 1a6d subs r5, r5, r1 -100083a0: 462a mov r2, r5 -100083a2: 4401 add r1, r0 -100083a4: f012 fc04 bl 1001abb0 -100083a8: 8565 strh r5, [r4, #42] ; 0x2a -100083aa: 1c69 adds r1, r5, #1 -100083ac: 6a60 ldr r0, [r4, #36] ; 0x24 -100083ae: f00c ff7d bl 100152ac -100083b2: 6260 str r0, [r4, #36] ; 0x24 -100083b4: b918 cbnz r0, 100083be -100083b6: 8823 ldrh r3, [r4, #0] -100083b8: f360 2308 bfi r3, r0, #8, #1 -100083bc: e7c6 b.n 1000834c -100083be: 5546 strb r6, [r0, r5] -100083c0: e7d8 b.n 10008374 - -100083c2 : -100083c2: b178 cbz r0, 100083e4 -100083c4: b171 cbz r1, 100083e4 -100083c6: 2303 movs r3, #3 -100083c8: 6043 str r3, [r0, #4] -100083ca: 2300 movs r3, #0 -100083cc: 8801 ldrh r1, [r0, #0] -100083ce: 8183 strh r3, [r0, #12] -100083d0: f363 1186 bfi r1, r3, #6, #1 -100083d4: 8001 strh r1, [r0, #0] -100083d6: 8801 ldrh r1, [r0, #0] -100083d8: 0689 lsls r1, r1, #26 -100083da: d406 bmi.n 100083ea -100083dc: 6883 ldr r3, [r0, #8] -100083de: 69db ldr r3, [r3, #28] -100083e0: b11b cbz r3, 100083ea -100083e2: 4718 bx r3 -100083e4: f06f 000d mvn.w r0, #13 -100083e8: 4770 bx lr -100083ea: 4618 mov r0, r3 -100083ec: 4770 bx lr - ... - -100083f0 : -100083f0: f100 030f add.w r3, r0, #15 -100083f4: b2db uxtb r3, r3 -100083f6: 2b0f cmp r3, #15 -100083f8: d801 bhi.n 100083fe -100083fa: f006 b9bb b.w 1000e774 -100083fe: 4801 ldr r0, [pc, #4] ; (10008404 ) -10008400: 4770 bx lr -10008402: bf00 nop -10008404: 1003ebf8 .word 0x1003ebf8 - -10008408 : -10008408: b51f push {r0, r1, r2, r3, r4, lr} -1000840a: 6983 ldr r3, [r0, #24] -1000840c: 6884 ldr r4, [r0, #8] -1000840e: b17b cbz r3, 10008430 -10008410: 8bd9 ldrh r1, [r3, #30] -10008412: 79e4 ldrb r4, [r4, #7] -10008414: 7c43 ldrb r3, [r0, #17] -10008416: 7c02 ldrb r2, [r0, #16] -10008418: 9403 str r4, [sp, #12] -1000841a: 89c4 ldrh r4, [r0, #14] -1000841c: 9402 str r4, [sp, #8] -1000841e: 7cc4 ldrb r4, [r0, #19] -10008420: 9401 str r4, [sp, #4] -10008422: 7c80 ldrb r0, [r0, #18] -10008424: 9000 str r0, [sp, #0] -10008426: 4803 ldr r0, [pc, #12] ; (10008434 ) -10008428: f012 fb9a bl 1001ab60 -1000842c: b004 add sp, #16 -1000842e: bd10 pop {r4, pc} -10008430: 8861 ldrh r1, [r4, #2] -10008432: e7ee b.n 10008412 -10008434: 1003ec6a .word 0x1003ec6a - -10008438 : -10008438: 2200 movs r2, #0 -1000843a: b508 push {r3, lr} -1000843c: 6182 str r2, [r0, #24] -1000843e: f7ff ffe3 bl 10008408 -10008442: e8bd 4008 ldmia.w sp!, {r3, lr} -10008446: 4801 ldr r0, [pc, #4] ; (1000844c ) -10008448: f012 bb8a b.w 1001ab60 -1000844c: 1003fbd6 .word 0x1003fbd6 - -10008450 : -10008450: b508 push {r3, lr} -10008452: f7ff ffd9 bl 10008408 -10008456: 4802 ldr r0, [pc, #8] ; (10008460 ) -10008458: f012 fb82 bl 1001ab60 -1000845c: 2000 movs r0, #0 -1000845e: bd08 pop {r3, pc} -10008460: 1003ec62 .word 0x1003ec62 - -10008464 : -10008464: b508 push {r3, lr} -10008466: f7ff ffcf bl 10008408 -1000846a: 4802 ldr r0, [pc, #8] ; (10008474 ) -1000846c: f012 fb78 bl 1001ab60 -10008470: 2000 movs r0, #0 -10008472: bd08 pop {r3, pc} -10008474: 1003eca2 .word 0x1003eca2 - -10008478 : -10008478: b510 push {r4, lr} -1000847a: 4604 mov r4, r0 -1000847c: f7ff ffc4 bl 10008408 -10008480: 8d61 ldrh r1, [r4, #42] ; 0x2a -10008482: 4802 ldr r0, [pc, #8] ; (1000848c ) -10008484: f012 fb6c bl 1001ab60 -10008488: 2000 movs r0, #0 -1000848a: bd10 pop {r4, pc} -1000848c: 1003ec87 .word 0x1003ec87 - -10008490 : -10008490: b570 push {r4, r5, r6, lr} -10008492: 6985 ldr r5, [r0, #24] -10008494: 4604 mov r4, r0 -10008496: 2d00 cmp r5, #0 -10008498: d073 beq.n 10008582 -1000849a: 6843 ldr r3, [r0, #4] -1000849c: 2b01 cmp r3, #1 -1000849e: d03a beq.n 10008516 -100084a0: 2b04 cmp r3, #4 -100084a2: d038 beq.n 10008516 -100084a4: 2301 movs r3, #1 -100084a6: 2600 movs r6, #0 -100084a8: 6043 str r3, [r0, #4] -100084aa: 8803 ldrh r3, [r0, #0] -100084ac: 8186 strh r6, [r0, #12] -100084ae: f366 1386 bfi r3, r6, #6, #1 -100084b2: 8003 strh r3, [r0, #0] -100084b4: 8803 ldrh r3, [r0, #0] -100084b6: 4631 mov r1, r6 -100084b8: f043 0310 orr.w r3, r3, #16 -100084bc: 8003 strh r3, [r0, #0] -100084be: 8803 ldrh r3, [r0, #0] -100084c0: f043 0320 orr.w r3, r3, #32 -100084c4: 8003 strh r3, [r0, #0] -100084c6: 4628 mov r0, r5 -100084c8: f009 f8e8 bl 1001169c -100084cc: 4631 mov r1, r6 -100084ce: 4628 mov r0, r5 -100084d0: f009 f8e7 bl 100116a2 -100084d4: 4632 mov r2, r6 -100084d6: 4631 mov r1, r6 -100084d8: 4628 mov r0, r5 -100084da: f009 f8ea bl 100116b2 -100084de: 4631 mov r1, r6 -100084e0: 4628 mov r0, r5 -100084e2: f009 f8e1 bl 100116a8 -100084e6: 8e23 ldrh r3, [r4, #48] ; 0x30 -100084e8: b12b cbz r3, 100084f6 -100084ea: f241 61d0 movw r1, #5840 ; 0x16d0 -100084ee: 4628 mov r0, r5 -100084f0: f009 f88a bl 10011608 -100084f4: 8626 strh r6, [r4, #48] ; 0x30 -100084f6: 69e0 ldr r0, [r4, #28] -100084f8: b118 cbz r0, 10008502 -100084fa: f00c feb3 bl 10015264 -100084fe: 2300 movs r3, #0 -10008500: 61e3 str r3, [r4, #28] -10008502: 2600 movs r6, #0 -10008504: 6a60 ldr r0, [r4, #36] ; 0x24 -10008506: 8526 strh r6, [r4, #40] ; 0x28 -10008508: 85a6 strh r6, [r4, #44] ; 0x2c -1000850a: b110 cbz r0, 10008512 -1000850c: f00c feaa bl 10015264 -10008510: 6266 str r6, [r4, #36] ; 0x24 -10008512: 8566 strh r6, [r4, #42] ; 0x2a -10008514: 85e6 strh r6, [r4, #46] ; 0x2e -10008516: 6863 ldr r3, [r4, #4] -10008518: 2b01 cmp r3, #1 -1000851a: d001 beq.n 10008520 -1000851c: 2b04 cmp r3, #4 -1000851e: d130 bne.n 10008582 -10008520: 69ab ldr r3, [r5, #24] -10008522: b10b cbz r3, 10008528 -10008524: 2b0a cmp r3, #10 -10008526: d106 bne.n 10008536 -10008528: 2300 movs r3, #0 -1000852a: 4620 mov r0, r4 -1000852c: 61a3 str r3, [r4, #24] -1000852e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10008532: f7ff be91 b.w 10008258 -10008536: 89a3 ldrh r3, [r4, #12] -10008538: 2b03 cmp r3, #3 -1000853a: d90f bls.n 1000855c -1000853c: 4620 mov r0, r4 -1000853e: f7ff ff63 bl 10008408 -10008542: 4810 ldr r0, [pc, #64] ; (10008584 ) -10008544: f012 fb0c bl 1001ab60 -10008548: 2200 movs r2, #0 -1000854a: 4628 mov r0, r5 -1000854c: 4611 mov r1, r2 -1000854e: f009 f8b0 bl 100116b2 -10008552: 2100 movs r1, #0 -10008554: 4628 mov r0, r5 -10008556: f009 fbb9 bl 10011ccc -1000855a: e7e5 b.n 10008528 -1000855c: 4628 mov r0, r5 -1000855e: f009 fb15 bl 10011b8c -10008562: 2800 cmp r0, #0 -10008564: d0e0 beq.n 10008528 -10008566: 4620 mov r0, r4 -10008568: f7ff ff4e bl 10008408 -1000856c: 8be9 ldrh r1, [r5, #30] -1000856e: 4806 ldr r0, [pc, #24] ; (10008588 ) -10008570: f012 faf6 bl 1001ab60 -10008574: 4628 mov r0, r5 -10008576: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1000857a: 220a movs r2, #10 -1000857c: 4903 ldr r1, [pc, #12] ; (1000858c ) -1000857e: f009 b898 b.w 100116b2 -10008582: bd70 pop {r4, r5, r6, pc} -10008584: 1003ed0a .word 0x1003ed0a -10008588: 1003ed18 .word 0x1003ed18 -1000858c: 10008591 .word 0x10008591 - -10008590 : -10008590: b538 push {r3, r4, r5, lr} -10008592: 460d mov r5, r1 -10008594: 4604 mov r4, r0 -10008596: b978 cbnz r0, 100085b8 -10008598: 4602 mov r2, r0 -1000859a: 4601 mov r1, r0 -1000859c: 4628 mov r0, r5 -1000859e: f009 f888 bl 100116b2 -100085a2: 4621 mov r1, r4 -100085a4: 4628 mov r0, r5 -100085a6: f009 f87f bl 100116a8 -100085aa: 4628 mov r0, r5 -100085ac: 4621 mov r1, r4 -100085ae: f009 fb8d bl 10011ccc -100085b2: f06f 0009 mvn.w r0, #9 -100085b6: bd38 pop {r3, r4, r5, pc} -100085b8: 6983 ldr r3, [r0, #24] -100085ba: b183 cbz r3, 100085de -100085bc: 6842 ldr r2, [r0, #4] -100085be: 2a01 cmp r2, #1 -100085c0: d00d beq.n 100085de -100085c2: 8983 ldrh r3, [r0, #12] -100085c4: 6989 ldr r1, [r1, #24] -100085c6: 3301 adds r3, #1 -100085c8: b29b uxth r3, r3 -100085ca: 2904 cmp r1, #4 -100085cc: 8183 strh r3, [r0, #12] -100085ce: d106 bne.n 100085de -100085d0: 2a02 cmp r2, #2 -100085d2: d10b bne.n 100085ec -100085d4: 6882 ldr r2, [r0, #8] -100085d6: 7a12 ldrb r2, [r2, #8] -100085d8: b122 cbz r2, 100085e4 -100085da: 4293 cmp r3, r2 -100085dc: d902 bls.n 100085e4 -100085de: 4620 mov r0, r4 -100085e0: f7ff ff56 bl 10008490 -100085e4: f010 f9b0 bl 10018948 -100085e8: 2000 movs r0, #0 -100085ea: bd38 pop {r3, r4, r5, pc} -100085ec: 2a03 cmp r2, #3 -100085ee: d1f9 bne.n 100085e4 -100085f0: 6882 ldr r2, [r0, #8] -100085f2: 7a52 ldrb r2, [r2, #9] -100085f4: e7f0 b.n 100085d8 - -100085f6 : -100085f6: b5f8 push {r3, r4, r5, r6, r7, lr} -100085f8: 460f mov r7, r1 -100085fa: 4616 mov r6, r2 -100085fc: 461d mov r5, r3 -100085fe: 4604 mov r4, r0 -10008600: 2800 cmp r0, #0 -10008602: d051 beq.n 100086a8 -10008604: 2900 cmp r1, #0 -10008606: d04f beq.n 100086a8 -10008608: b102 cbz r2, 1000860c -1000860a: b123 cbz r3, 10008616 -1000860c: 4620 mov r0, r4 -1000860e: f7ff ff3f bl 10008490 -10008612: 4628 mov r0, r5 -10008614: bdf8 pop {r3, r4, r5, r6, r7, pc} -10008616: 8803 ldrh r3, [r0, #0] -10008618: f3c3 1300 ubfx r3, r3, #4, #1 -1000861c: b92b cbnz r3, 1000862a -1000861e: 6882 ldr r2, [r0, #8] -10008620: 6a12 ldr r2, [r2, #32] -10008622: b112 cbz r2, 1000862a -10008624: 6842 ldr r2, [r0, #4] -10008626: 2a01 cmp r2, #1 -10008628: d10c bne.n 10008644 -1000862a: 8e23 ldrh r3, [r4, #48] ; 0x30 -1000862c: 8931 ldrh r1, [r6, #8] -1000862e: 4638 mov r0, r7 -10008630: 4419 add r1, r3 -10008632: b289 uxth r1, r1 -10008634: f008 ffe8 bl 10011608 -10008638: 2300 movs r3, #0 -1000863a: 4630 mov r0, r6 -1000863c: 8623 strh r3, [r4, #48] ; 0x30 -1000863e: f008 fd1c bl 1001107a -10008642: e7e6 b.n 10008612 -10008644: 2203 movs r2, #3 -10008646: 8931 ldrh r1, [r6, #8] -10008648: 6042 str r2, [r0, #4] -1000864a: 8183 strh r3, [r0, #12] -1000864c: 2900 cmp r1, #0 -1000864e: d0e0 beq.n 10008612 -10008650: f7ff fe40 bl 100082d4 -10008654: 4605 mov r5, r0 -10008656: 2800 cmp r0, #0 -10008658: d1db bne.n 10008612 -1000865a: 6a60 ldr r0, [r4, #36] ; 0x24 -1000865c: 8d61 ldrh r1, [r4, #42] ; 0x2a -1000865e: 462b mov r3, r5 -10008660: 4401 add r1, r0 -10008662: 8932 ldrh r2, [r6, #8] -10008664: 4630 mov r0, r6 -10008666: f008 fe4d bl 10011304 -1000866a: 8d63 ldrh r3, [r4, #42] ; 0x2a -1000866c: 4605 mov r5, r0 -1000866e: 4403 add r3, r0 -10008670: 8563 strh r3, [r4, #42] ; 0x2a -10008672: 4630 mov r0, r6 -10008674: f008 fd01 bl 1001107a -10008678: 8823 ldrh r3, [r4, #0] -1000867a: 071b lsls r3, r3, #28 -1000867c: d410 bmi.n 100086a0 -1000867e: 4629 mov r1, r5 -10008680: 4638 mov r0, r7 -10008682: f008 ffc1 bl 10011608 -10008686: 68a3 ldr r3, [r4, #8] -10008688: 4620 mov r0, r4 -1000868a: 6a1b ldr r3, [r3, #32] -1000868c: 4798 blx r3 -1000868e: 2100 movs r1, #0 -10008690: 4605 mov r5, r0 -10008692: 4620 mov r0, r4 -10008694: f7ff fe1e bl 100082d4 -10008698: 2800 cmp r0, #0 -1000869a: bf18 it ne -1000869c: 4605 movne r5, r0 -1000869e: e7b8 b.n 10008612 -100086a0: 8e21 ldrh r1, [r4, #48] ; 0x30 -100086a2: 440d add r5, r1 -100086a4: 8625 strh r5, [r4, #48] ; 0x30 -100086a6: e7ee b.n 10008686 -100086a8: f06f 050d mvn.w r5, #13 -100086ac: e7b1 b.n 10008612 - ... - -100086b0 : -100086b0: b538 push {r3, r4, r5, lr} -100086b2: 460d mov r5, r1 -100086b4: 4604 mov r4, r0 -100086b6: b1c0 cbz r0, 100086ea -100086b8: f7ff fea6 bl 10008408 -100086bc: 4628 mov r0, r5 -100086be: f7ff fe97 bl 100083f0 -100086c2: 4629 mov r1, r5 -100086c4: 4602 mov r2, r0 -100086c6: 4809 ldr r0, [pc, #36] ; (100086ec ) -100086c8: f012 fa4a bl 1001ab60 -100086cc: 6863 ldr r3, [r4, #4] -100086ce: 2b01 cmp r3, #1 -100086d0: d00b beq.n 100086ea -100086d2: 69a3 ldr r3, [r4, #24] -100086d4: b14b cbz r3, 100086ea -100086d6: 68a3 ldr r3, [r4, #8] -100086d8: 4805 ldr r0, [pc, #20] ; (100086f0 ) -100086da: 8859 ldrh r1, [r3, #2] -100086dc: f012 fa40 bl 1001ab60 -100086e0: 4620 mov r0, r4 -100086e2: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -100086e6: f7ff bdb7 b.w 10008258 -100086ea: bd38 pop {r3, r4, r5, pc} -100086ec: 1003ebfa .word 0x1003ebfa -100086f0: 1003ec09 .word 0x1003ec09 - -100086f4 : -100086f4: 6983 ldr r3, [r0, #24] -100086f6: b510 push {r4, lr} -100086f8: b193 cbz r3, 10008720 -100086fa: 89c2 ldrh r2, [r0, #14] -100086fc: 8c1c ldrh r4, [r3, #32] -100086fe: 6881 ldr r1, [r0, #8] -10008700: 4294 cmp r4, r2 -10008702: 8849 ldrh r1, [r1, #2] -10008704: 6900 ldr r0, [r0, #16] -10008706: d105 bne.n 10008714 -10008708: 8bdc ldrh r4, [r3, #30] -1000870a: 428c cmp r4, r1 -1000870c: d102 bne.n 10008714 -1000870e: 685c ldr r4, [r3, #4] -10008710: 42a0 cmp r0, r4 -10008712: d005 beq.n 10008720 -10008714: 4b0e ldr r3, [pc, #56] ; (10008750 ) -10008716: 681b ldr r3, [r3, #0] -10008718: b923 cbnz r3, 10008724 -1000871a: 4b0e ldr r3, [pc, #56] ; (10008754 ) -1000871c: 681b ldr r3, [r3, #0] -1000871e: b963 cbnz r3, 1000873a -10008720: 4618 mov r0, r3 -10008722: bd10 pop {r4, pc} -10008724: 8c1c ldrh r4, [r3, #32] -10008726: 4294 cmp r4, r2 -10008728: d105 bne.n 10008736 -1000872a: 8bdc ldrh r4, [r3, #30] -1000872c: 428c cmp r4, r1 -1000872e: d102 bne.n 10008736 -10008730: 685c ldr r4, [r3, #4] -10008732: 42a0 cmp r0, r4 -10008734: d0f4 beq.n 10008720 -10008736: 68db ldr r3, [r3, #12] -10008738: e7ee b.n 10008718 -1000873a: 8c1c ldrh r4, [r3, #32] -1000873c: 4294 cmp r4, r2 -1000873e: d105 bne.n 1000874c -10008740: 8bdc ldrh r4, [r3, #30] -10008742: 428c cmp r4, r1 -10008744: d102 bne.n 1000874c -10008746: 685c ldr r4, [r3, #4] -10008748: 42a0 cmp r0, r4 -1000874a: d0e9 beq.n 10008720 -1000874c: 68db ldr r3, [r3, #12] -1000874e: e7e6 b.n 1000871e -10008750: 1004b108 .word 0x1004b108 -10008754: 1004b124 .word 0x1004b124 - -10008758 : -10008758: b538 push {r3, r4, r5, lr} -1000875a: 4605 mov r5, r0 -1000875c: f7ff ffca bl 100086f4 -10008760: 4604 mov r4, r0 -10008762: b1e8 cbz r0, 100087a0 -10008764: 2100 movs r1, #0 -10008766: f008 ff97 bl 10011698 -1000876a: 2100 movs r1, #0 -1000876c: 4620 mov r0, r4 -1000876e: f008 ff95 bl 1001169c -10008772: 2100 movs r1, #0 -10008774: 4620 mov r0, r4 -10008776: f008 ff97 bl 100116a8 -1000877a: 2200 movs r2, #0 -1000877c: 4620 mov r0, r4 -1000877e: 4611 mov r1, r2 -10008780: f008 ff97 bl 100116b2 -10008784: 2100 movs r1, #0 -10008786: 4620 mov r0, r4 -10008788: f008 ff8b bl 100116a2 -1000878c: f241 61d0 movw r1, #5840 ; 0x16d0 -10008790: 4620 mov r0, r4 -10008792: f008 ff39 bl 10011608 -10008796: 4620 mov r0, r4 -10008798: f009 f9f8 bl 10011b8c -1000879c: 2300 movs r3, #0 -1000879e: 61ab str r3, [r5, #24] -100087a0: 4628 mov r0, r5 -100087a2: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -100087a6: f7ff bd57 b.w 10008258 - -100087aa : -100087aa: b510 push {r4, lr} -100087ac: 4604 mov r4, r0 -100087ae: b158 cbz r0, 100087c8 -100087b0: 6843 ldr r3, [r0, #4] -100087b2: 2b01 cmp r3, #1 -100087b4: d008 beq.n 100087c8 -100087b6: f7ff ff9d bl 100086f4 -100087ba: 61a0 str r0, [r4, #24] -100087bc: b120 cbz r0, 100087c8 -100087be: 4620 mov r0, r4 -100087c0: e8bd 4010 ldmia.w sp!, {r4, lr} -100087c4: f7ff be64 b.w 10008490 -100087c8: bd10 pop {r4, pc} - ... - -100087cc : -100087cc: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -100087d0: 4688 mov r8, r1 -100087d2: 4617 mov r7, r2 -100087d4: 4604 mov r4, r0 -100087d6: b1a0 cbz r0, 10008802 -100087d8: f7ff ff8c bl 100086f4 -100087dc: 4605 mov r5, r0 -100087de: 61a0 str r0, [r4, #24] -100087e0: 2800 cmp r0, #0 -100087e2: d053 beq.n 1000888c -100087e4: 6863 ldr r3, [r4, #4] -100087e6: 2b01 cmp r3, #1 -100087e8: d050 beq.n 1000888c -100087ea: 8823 ldrh r3, [r4, #0] -100087ec: f043 0380 orr.w r3, r3, #128 ; 0x80 -100087f0: 8023 strh r3, [r4, #0] -100087f2: f8b0 206a ldrh.w r2, [r0, #106] ; 0x6a -100087f6: 42ba cmp r2, r7 -100087f8: d206 bcs.n 10008808 -100087fa: 4639 mov r1, r7 -100087fc: 4825 ldr r0, [pc, #148] ; (10008894 ) -100087fe: f012 f9af bl 1001ab60 -10008802: f06f 060d mvn.w r6, #13 -10008806: e036 b.n 10008876 -10008808: 2f00 cmp r7, #0 -1000880a: d038 beq.n 1000887e -1000880c: 8823 ldrh r3, [r4, #0] -1000880e: 463a mov r2, r7 -10008810: 075b lsls r3, r3, #29 -10008812: bf48 it mi -10008814: f890 3022 ldrbmi.w r3, [r0, #34] ; 0x22 -10008818: 4641 mov r1, r8 -1000881a: bf44 itt mi -1000881c: f043 0340 orrmi.w r3, r3, #64 ; 0x40 -10008820: f880 3022 strbmi.w r3, [r0, #34] ; 0x22 -10008824: 2301 movs r3, #1 -10008826: f00a fca2 bl 1001316e -1000882a: 4606 mov r6, r0 -1000882c: b970 cbnz r0, 1000884c -1000882e: 4628 mov r0, r5 -10008830: eb08 0307 add.w r3, r8, r7 -10008834: 6223 str r3, [r4, #32] -10008836: 8da3 ldrh r3, [r4, #44] ; 0x2c -10008838: 1bdf subs r7, r3, r7 -1000883a: 8823 ldrh r3, [r4, #0] -1000883c: 85a7 strh r7, [r4, #44] ; 0x2c -1000883e: f043 0340 orr.w r3, r3, #64 ; 0x40 -10008842: 8023 strh r3, [r4, #0] -10008844: f00a feda bl 100135fc -10008848: 4606 mov r6, r0 -1000884a: e010 b.n 1000886e -1000884c: f8b5 306a ldrh.w r3, [r5, #106] ; 0x6a -10008850: 4642 mov r2, r8 -10008852: 9301 str r3, [sp, #4] -10008854: 9000 str r0, [sp, #0] -10008856: 463b mov r3, r7 -10008858: 4629 mov r1, r5 -1000885a: 480f ldr r0, [pc, #60] ; (10008898 ) -1000885c: f012 f980 bl 1001ab60 -10008860: 8823 ldrh r3, [r4, #0] -10008862: 4620 mov r0, r4 -10008864: f36f 1386 bfc r3, #6, #1 -10008868: 8023 strh r3, [r4, #0] -1000886a: f7ff fe11 bl 10008490 -1000886e: 8823 ldrh r3, [r4, #0] -10008870: f36f 13c7 bfc r3, #7, #1 -10008874: 8023 strh r3, [r4, #0] -10008876: 4630 mov r0, r6 -10008878: b002 add sp, #8 -1000887a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000887e: f890 3022 ldrb.w r3, [r0, #34] ; 0x22 -10008882: f023 0340 bic.w r3, r3, #64 ; 0x40 -10008886: f880 3022 strb.w r3, [r0, #34] ; 0x22 -1000888a: e7db b.n 10008844 -1000888c: f06f 060c mvn.w r6, #12 -10008890: e7f1 b.n 10008876 -10008892: bf00 nop -10008894: 1003ec15 .word 0x1003ec15 -10008898: 1003ec3b .word 0x1003ec3b - -1000889c : -1000889c: 8e01 ldrh r1, [r0, #48] ; 0x30 -1000889e: b510 push {r4, lr} -100088a0: 4604 mov r4, r0 -100088a2: b119 cbz r1, 100088ac -100088a4: 6980 ldr r0, [r0, #24] -100088a6: b108 cbz r0, 100088ac -100088a8: f008 feae bl 10011608 -100088ac: 2300 movs r3, #0 -100088ae: 8623 strh r3, [r4, #48] ; 0x30 -100088b0: bd10 pop {r4, pc} - ... - -100088b4 : -100088b4: 4b04 ldr r3, [pc, #16] ; (100088c8 ) -100088b6: 681b ldr r3, [r3, #0] -100088b8: b90b cbnz r3, 100088be -100088ba: 4618 mov r0, r3 -100088bc: 4770 bx lr -100088be: 885a ldrh r2, [r3, #2] -100088c0: 4282 cmp r2, r0 -100088c2: d0fa beq.n 100088ba -100088c4: 6a5b ldr r3, [r3, #36] ; 0x24 -100088c6: e7f7 b.n 100088b8 -100088c8: 1004a5c4 .word 0x1004a5c4 - -100088cc : -100088cc: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -100088d0: 8bc8 ldrh r0, [r1, #30] -100088d2: 460e mov r6, r1 -100088d4: f7ff ffee bl 100088b4 -100088d8: 4604 mov r4, r0 -100088da: 2800 cmp r0, #0 -100088dc: d079 beq.n 100089d2 -100088de: f00c fcd9 bl 10015294 -100088e2: 88a3 ldrh r3, [r4, #4] -100088e4: 4298 cmp r0, r3 -100088e6: d207 bcs.n 100088f8 -100088e8: 8861 ldrh r1, [r4, #2] -100088ea: 483c ldr r0, [pc, #240] ; (100089dc ) -100088ec: f012 f938 bl 1001ab60 -100088f0: f04f 30ff mov.w r0, #4294967295 -100088f4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -100088f8: 79e2 ldrb r2, [r4, #7] -100088fa: 79a3 ldrb r3, [r4, #6] -100088fc: 429a cmp r2, r3 -100088fe: d30b bcc.n 10008918 -10008900: 7823 ldrb r3, [r4, #0] -10008902: 8861 ldrh r1, [r4, #2] -10008904: f013 0f01 tst.w r3, #1 -10008908: d00d beq.n 10008926 -1000890a: 4835 ldr r0, [pc, #212] ; (100089e0 ) -1000890c: f012 f928 bl 1001ab60 -10008910: 68e0 ldr r0, [r4, #12] -10008912: b108 cbz r0, 10008918 -10008914: f7ff ff20 bl 10008758 -10008918: 2038 movs r0, #56 ; 0x38 -1000891a: f00c fd13 bl 10015344 -1000891e: 4605 mov r5, r0 -10008920: b940 cbnz r0, 10008934 -10008922: 6883 ldr r3, [r0, #8] -10008924: deff udf #255 ; 0xff -10008926: 482f ldr r0, [pc, #188] ; (100089e4 ) -10008928: f012 f91a bl 1001ab60 -1000892c: f06f 000c mvn.w r0, #12 -10008930: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10008934: 2702 movs r7, #2 -10008936: 8823 ldrh r3, [r4, #0] -10008938: 6084 str r4, [r0, #8] -1000893a: 8003 strh r3, [r0, #0] -1000893c: 8c33 ldrh r3, [r6, #32] -1000893e: 6186 str r6, [r0, #24] -10008940: 81c3 strh r3, [r0, #14] -10008942: 6873 ldr r3, [r6, #4] -10008944: 4601 mov r1, r0 -10008946: 6103 str r3, [r0, #16] -10008948: 68e3 ldr r3, [r4, #12] -1000894a: 6143 str r3, [r0, #20] -1000894c: 79e3 ldrb r3, [r4, #7] -1000894e: 60e0 str r0, [r4, #12] -10008950: 3301 adds r3, #1 -10008952: 71e3 strb r3, [r4, #7] -10008954: 6047 str r7, [r0, #4] -10008956: 4630 mov r0, r6 -10008958: f008 fe9e bl 10011698 -1000895c: 4922 ldr r1, [pc, #136] ; (100089e8 ) -1000895e: 4630 mov r0, r6 -10008960: f008 fea2 bl 100116a8 -10008964: 4921 ldr r1, [pc, #132] ; (100089ec ) -10008966: 4630 mov r0, r6 -10008968: f008 fe9b bl 100116a2 -1000896c: 4920 ldr r1, [pc, #128] ; (100089f0 ) -1000896e: 4630 mov r0, r6 -10008970: f008 fe94 bl 1001169c -10008974: 463a mov r2, r7 -10008976: 491f ldr r1, [pc, #124] ; (100089f4 ) -10008978: 4630 mov r0, r6 -1000897a: f008 fe9a bl 100116b2 -1000897e: 882b ldrh r3, [r5, #0] -10008980: 079b lsls r3, r3, #30 -10008982: d404 bmi.n 1000898e -10008984: 69a3 ldr r3, [r4, #24] -10008986: bb03 cbnz r3, 100089ca -10008988: 4618 mov r0, r3 -1000898a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1000898e: 2600 movs r6, #0 -10008990: 4f19 ldr r7, [pc, #100] ; (100089f8 ) -10008992: 683a ldr r2, [r7, #0] -10008994: b99a cbnz r2, 100089be -10008996: f8df 9060 ldr.w r9, [pc, #96] ; 100089f8 -1000899a: 2e0a cmp r6, #10 -1000899c: ddf2 ble.n 10008984 -1000899e: f04f 0800 mov.w r8, #0 -100089a2: 683b ldr r3, [r7, #0] -100089a4: b973 cbnz r3, 100089c4 -100089a6: f1b8 0f00 cmp.w r8, #0 -100089aa: d006 beq.n 100089ba -100089ac: 4648 mov r0, r9 -100089ae: 4641 mov r1, r8 -100089b0: f009 f812 bl 100119d8 -100089b4: 4640 mov r0, r8 -100089b6: f00c fc55 bl 10015264 -100089ba: 3e01 subs r6, #1 -100089bc: e7ed b.n 1000899a -100089be: 3601 adds r6, #1 -100089c0: 68d2 ldr r2, [r2, #12] -100089c2: e7e7 b.n 10008994 -100089c4: 4698 mov r8, r3 -100089c6: 68db ldr r3, [r3, #12] -100089c8: e7ec b.n 100089a4 -100089ca: 4628 mov r0, r5 -100089cc: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -100089d0: 4718 bx r3 -100089d2: f06f 000d mvn.w r0, #13 -100089d6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -100089da: bf00 nop -100089dc: 1003ecab .word 0x1003ecab -100089e0: 1003ecd0 .word 0x1003ecd0 -100089e4: 1003ece4 .word 0x1003ece4 -100089e8: 100086b1 .word 0x100086b1 -100089ec: 100083c3 .word 0x100083c3 -100089f0: 100085f7 .word 0x100085f7 -100089f4: 10008591 .word 0x10008591 -100089f8: 1004b124 .word 0x1004b124 - -100089fc : -100089fc: b570 push {r4, r5, r6, lr} -100089fe: 4606 mov r6, r0 -10008a00: b348 cbz r0, 10008a56 -10008a02: 4b16 ldr r3, [pc, #88] ; (10008a5c ) -10008a04: 681d ldr r5, [r3, #0] -10008a06: b945 cbnz r5, 10008a1a -10008a08: 2028 movs r0, #40 ; 0x28 -10008a0a: f00c fc9b bl 10015344 -10008a0e: 4604 mov r4, r0 -10008a10: b970 cbnz r0, 10008a30 -10008a12: 4813 ldr r0, [pc, #76] ; (10008a60 ) -10008a14: f012 f8a4 bl 1001ab60 -10008a18: e006 b.n 10008a28 -10008a1a: 886b ldrh r3, [r5, #2] -10008a1c: 42b3 cmp r3, r6 -10008a1e: d105 bne.n 10008a2c -10008a20: 4810 ldr r0, [pc, #64] ; (10008a64 ) -10008a22: f012 f89d bl 1001ab60 -10008a26: 2400 movs r4, #0 -10008a28: 4620 mov r0, r4 -10008a2a: bd70 pop {r4, r5, r6, pc} -10008a2c: 6a6d ldr r5, [r5, #36] ; 0x24 -10008a2e: e7ea b.n 10008a06 -10008a30: f44f 4300 mov.w r3, #32768 ; 0x8000 -10008a34: 8083 strh r3, [r0, #4] -10008a36: 2305 movs r3, #5 -10008a38: 7203 strb r3, [r0, #8] -10008a3a: 7243 strb r3, [r0, #9] -10008a3c: 230a movs r3, #10 -10008a3e: 7183 strb r3, [r0, #6] -10008a40: 4b09 ldr r3, [pc, #36] ; (10008a68 ) -10008a42: 8046 strh r6, [r0, #2] -10008a44: 6183 str r3, [r0, #24] -10008a46: 4b09 ldr r3, [pc, #36] ; (10008a6c ) -10008a48: 71c5 strb r5, [r0, #7] -10008a4a: 6143 str r3, [r0, #20] -10008a4c: 4b08 ldr r3, [pc, #32] ; (10008a70 ) -10008a4e: 61c3 str r3, [r0, #28] -10008a50: 4b08 ldr r3, [pc, #32] ; (10008a74 ) -10008a52: 6203 str r3, [r0, #32] -10008a54: e7e8 b.n 10008a28 -10008a56: 4604 mov r4, r0 -10008a58: e7e6 b.n 10008a28 -10008a5a: bf00 nop -10008a5c: 1004a5c4 .word 0x1004a5c4 -10008a60: 1003ed6f .word 0x1003ed6f -10008a64: 1003ed51 .word 0x1003ed51 -10008a68: 10008451 .word 0x10008451 -10008a6c: 10008439 .word 0x10008439 -10008a70: 10008465 .word 0x10008465 -10008a74: 10008479 .word 0x10008479 - -10008a78 : -10008a78: b538 push {r3, r4, r5, lr} -10008a7a: 4604 mov r4, r0 -10008a7c: b930 cbnz r0, 10008a8c -10008a7e: 481e ldr r0, [pc, #120] ; (10008af8 ) -10008a80: f012 f86e bl 1001ab60 -10008a84: f06f 050d mvn.w r5, #13 -10008a88: 4628 mov r0, r5 -10008a8a: bd38 pop {r3, r4, r5, pc} -10008a8c: 6903 ldr r3, [r0, #16] -10008a8e: b12b cbz r3, 10008a9c -10008a90: 481a ldr r0, [pc, #104] ; (10008afc ) -10008a92: f012 f865 bl 1001ab60 -10008a96: f06f 0507 mvn.w r5, #7 -10008a9a: e7f5 b.n 10008a88 -10008a9c: f009 fa06 bl 10011eac -10008aa0: 6120 str r0, [r4, #16] -10008aa2: b328 cbz r0, 10008af0 -10008aa4: 2163 movs r1, #99 ; 0x63 -10008aa6: f008 fde1 bl 1001166c -10008aaa: 8862 ldrh r2, [r4, #2] -10008aac: 4914 ldr r1, [pc, #80] ; (10008b00 ) -10008aae: 6920 ldr r0, [r4, #16] -10008ab0: f008 fce8 bl 10011484 -10008ab4: 4605 mov r5, r0 -10008ab6: b988 cbnz r0, 10008adc -10008ab8: 21ff movs r1, #255 ; 0xff -10008aba: 6920 ldr r0, [r4, #16] -10008abc: f008 fd2a bl 10011514 -10008ac0: 4601 mov r1, r0 -10008ac2: 6120 str r0, [r4, #16] -10008ac4: b150 cbz r0, 10008adc -10008ac6: f008 fde7 bl 10011698 -10008aca: 4b0e ldr r3, [pc, #56] ; (10008b04 ) -10008acc: 490e ldr r1, [pc, #56] ; (10008b08 ) -10008ace: 681a ldr r2, [r3, #0] -10008ad0: 6920 ldr r0, [r4, #16] -10008ad2: 6262 str r2, [r4, #36] ; 0x24 -10008ad4: 601c str r4, [r3, #0] -10008ad6: f008 fdea bl 100116ae -10008ada: e7d5 b.n 10008a88 -10008adc: 2100 movs r1, #0 -10008ade: 6920 ldr r0, [r4, #16] -10008ae0: f009 f8f4 bl 10011ccc -10008ae4: 2300 movs r3, #0 -10008ae6: 6123 str r3, [r4, #16] -10008ae8: 4808 ldr r0, [pc, #32] ; (10008b0c ) -10008aea: f012 f839 bl 1001ab60 -10008aee: e7cb b.n 10008a88 -10008af0: f04f 35ff mov.w r5, #4294967295 -10008af4: e7f8 b.n 10008ae8 -10008af6: bf00 nop -10008af8: 1003ed3a .word 0x1003ed3a -10008afc: 1003ed51 .word 0x1003ed51 -10008b00: 10040070 .word 0x10040070 -10008b04: 1004a5c4 .word 0x1004a5c4 -10008b08: 100088cd .word 0x100088cd -10008b0c: 1003ed24 .word 0x1003ed24 - -10008b10 : -10008b10: b510 push {r4, lr} -10008b12: b928 cbnz r0, 10008b20 -10008b14: 4810 ldr r0, [pc, #64] ; (10008b58 ) -10008b16: f012 f823 bl 1001ab60 -10008b1a: f06f 000d mvn.w r0, #13 -10008b1e: bd10 pop {r4, pc} -10008b20: 4b0e ldr r3, [pc, #56] ; (10008b5c ) -10008b22: 681c ldr r4, [r3, #0] -10008b24: b914 cbnz r4, 10008b2c -10008b26: f06f 000c mvn.w r0, #12 -10008b2a: bd10 pop {r4, pc} -10008b2c: 4284 cmp r4, r0 -10008b2e: 6a62 ldr r2, [r4, #36] ; 0x24 -10008b30: d10e bne.n 10008b50 -10008b32: 601a str r2, [r3, #0] -10008b34: 68e0 ldr r0, [r4, #12] -10008b36: b940 cbnz r0, 10008b4a -10008b38: 6920 ldr r0, [r4, #16] -10008b3a: b108 cbz r0, 10008b40 -10008b3c: f009 f826 bl 10011b8c -10008b40: 4620 mov r0, r4 -10008b42: f00c fb8f bl 10015264 -10008b46: 2000 movs r0, #0 -10008b48: bd10 pop {r4, pc} -10008b4a: f7ff fe05 bl 10008758 -10008b4e: e7f1 b.n 10008b34 -10008b50: f104 0324 add.w r3, r4, #36 ; 0x24 -10008b54: 4614 mov r4, r2 -10008b56: e7e5 b.n 10008b24 -10008b58: 1003ed3a .word 0x1003ed3a -10008b5c: 1004a5c4 .word 0x1004a5c4 - -10008b60 : -10008b60: 1e43 subs r3, r0, #1 -10008b62: 2b1e cmp r3, #30 -10008b64: d805 bhi.n 10008b72 -10008b66: 230c movs r3, #12 -10008b68: f04f 32ff mov.w r2, #4294967295 -10008b6c: 4358 muls r0, r3 -10008b6e: 4b01 ldr r3, [pc, #4] ; (10008b74 ) -10008b70: 501a str r2, [r3, r0] -10008b72: 4770 bx lr -10008b74: 1004a5c8 .word 0x1004a5c8 - -10008b78 : -10008b78: 281f cmp r0, #31 -10008b7a: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10008b7e: 4607 mov r7, r0 -10008b80: 4688 mov r8, r1 -10008b82: 4614 mov r4, r2 -10008b84: d828 bhi.n 10008bd8 -10008b86: 260c movs r6, #12 -10008b88: 4d14 ldr r5, [pc, #80] ; (10008bdc ) -10008b8a: fb06 5300 mla r3, r6, r0, r5 -10008b8e: 4346 muls r6, r0 -10008b90: 685b ldr r3, [r3, #4] -10008b92: 429a cmp r2, r3 -10008b94: bf88 it hi -10008b96: b29c uxthhi r4, r3 -10008b98: 59ab ldr r3, [r5, r6] -10008b9a: 3301 adds r3, #1 -10008b9c: d01c beq.n 10008bd8 -10008b9e: b1c4 cbz r4, 10008bd2 -10008ba0: b171 cbz r1, 10008bc0 -10008ba2: 2001 movs r0, #1 -10008ba4: f00e f85e bl 10016c64 -10008ba8: 4b0d ldr r3, [pc, #52] ; (10008be0 ) -10008baa: 59a8 ldr r0, [r5, r6] -10008bac: 6819 ldr r1, [r3, #0] -10008bae: 4622 mov r2, r4 -10008bb0: 4401 add r1, r0 -10008bb2: 4643 mov r3, r8 -10008bb4: 480b ldr r0, [pc, #44] ; (10008be4 ) -10008bb6: f00f f811 bl 10017bdc -10008bba: 2001 movs r0, #1 -10008bbc: f00e f86c bl 10016c98 -10008bc0: 200c movs r0, #12 -10008bc2: 4378 muls r0, r7 -10008bc4: 582b ldr r3, [r5, r0] -10008bc6: 182a adds r2, r5, r0 -10008bc8: 4423 add r3, r4 -10008bca: 502b str r3, [r5, r0] -10008bcc: 6853 ldr r3, [r2, #4] -10008bce: 1b1b subs r3, r3, r4 -10008bd0: 6053 str r3, [r2, #4] -10008bd2: 4620 mov r0, r4 -10008bd4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10008bd8: 2400 movs r4, #0 -10008bda: e7fa b.n 10008bd2 -10008bdc: 1004a5c8 .word 0x1004a5c8 -10008be0: 1004a748 .word 0x1004a748 -10008be4: 1004b4ec .word 0x1004b4ec - -10008be8 : -10008be8: f44f 2350 mov.w r3, #851968 ; 0xd0000 -10008bec: b530 push {r4, r5, lr} -10008bee: 4d19 ldr r5, [pc, #100] ; (10008c54 ) -10008bf0: 4c19 ldr r4, [pc, #100] ; (10008c58 ) -10008bf2: b085 sub sp, #20 -10008bf4: f44f 72c0 mov.w r2, #384 ; 0x180 -10008bf8: 21ff movs r1, #255 ; 0xff -10008bfa: 4628 mov r0, r5 -10008bfc: 6023 str r3, [r4, #0] -10008bfe: f011 ffdb bl 1001abb8 -10008c02: 220c movs r2, #12 -10008c04: 2000 movs r0, #0 -10008c06: a901 add r1, sp, #4 -10008c08: e885 0005 stmia.w r5, {r0, r2} -10008c0c: f7ff ffb4 bl 10008b78 -10008c10: 4b12 ldr r3, [pc, #72] ; (10008c5c ) -10008c12: 9a01 ldr r2, [sp, #4] -10008c14: 429a cmp r2, r3 -10008c16: 4623 mov r3, r4 -10008c18: 4c11 ldr r4, [pc, #68] ; (10008c60 ) -10008c1a: d116 bne.n 10008c4a -10008c1c: f8bd 2008 ldrh.w r2, [sp, #8] -10008c20: 2a01 cmp r2, #1 -10008c22: d112 bne.n 10008c4a -10008c24: f8bd 200a ldrh.w r2, [sp, #10] -10008c28: f64f 71ff movw r1, #65535 ; 0xffff -10008c2c: 8022 strh r2, [r4, #0] -10008c2e: 4a0d ldr r2, [pc, #52] ; (10008c64 ) -10008c30: 480d ldr r0, [pc, #52] ; (10008c68 ) -10008c32: 6011 str r1, [r2, #0] -10008c34: 681a ldr r2, [r3, #0] -10008c36: 8821 ldrh r1, [r4, #0] -10008c38: f011 ff92 bl 1001ab60 -10008c3c: 8822 ldrh r2, [r4, #0] -10008c3e: 4b0b ldr r3, [pc, #44] ; (10008c6c ) -10008c40: b92a cbnz r2, 10008c4e -10008c42: 2201 movs r2, #1 -10008c44: 701a strb r2, [r3, #0] -10008c46: b005 add sp, #20 -10008c48: bd30 pop {r4, r5, pc} -10008c4a: 2200 movs r2, #0 -10008c4c: e7ec b.n 10008c28 -10008c4e: 2200 movs r2, #0 -10008c50: e7f8 b.n 10008c44 -10008c52: bf00 nop -10008c54: 1004a5c8 .word 0x1004a5c8 -10008c58: 1004a748 .word 0x1004a748 -10008c5c: 42455746 .word 0x42455746 -10008c60: 1004a762 .word 0x1004a762 -10008c64: 1004a75c .word 0x1004a75c -10008c68: 1003ed84 .word 0x1003ed84 -10008c6c: 1004a760 .word 0x1004a760 - -10008c70 : -10008c70: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -10008c72: 4e17 ldr r6, [pc, #92] ; (10008cd0 ) -10008c74: 4605 mov r5, r0 -10008c76: 6833 ldr r3, [r6, #0] -10008c78: 4298 cmp r0, r3 -10008c7a: d027 beq.n 10008ccc -10008c7c: 4b15 ldr r3, [pc, #84] ; (10008cd4 ) -10008c7e: 881b ldrh r3, [r3, #0] -10008c80: 4298 cmp r0, r3 -10008c82: d223 bcs.n 10008ccc -10008c84: 220c movs r2, #12 -10008c86: 4f14 ldr r7, [pc, #80] ; (10008cd8 ) -10008c88: 3306 adds r3, #6 -10008c8a: 607a str r2, [r7, #4] -10008c8c: 2204 movs r2, #4 -10008c8e: 4c13 ldr r4, [pc, #76] ; (10008cdc ) -10008c90: eb03 0340 add.w r3, r3, r0, lsl #1 -10008c94: 005b lsls r3, r3, #1 -10008c96: 18a1 adds r1, r4, r2 -10008c98: 603b str r3, [r7, #0] -10008c9a: 2000 movs r0, #0 -10008c9c: f7ff ff6c bl 10008b78 -10008ca0: 6863 ldr r3, [r4, #4] -10008ca2: 2208 movs r2, #8 -10008ca4: 603b str r3, [r7, #0] -10008ca6: 4669 mov r1, sp -10008ca8: 2000 movs r0, #0 -10008caa: f7ff ff65 bl 10008b78 -10008cae: f8bd 3004 ldrh.w r3, [sp, #4] -10008cb2: 9a00 ldr r2, [sp, #0] -10008cb4: 6035 str r5, [r6, #0] -10008cb6: 1ad2 subs r2, r2, r3 -10008cb8: 60a2 str r2, [r4, #8] -10008cba: 6862 ldr r2, [r4, #4] -10008cbc: f102 0108 add.w r1, r2, #8 -10008cc0: 6021 str r1, [r4, #0] -10008cc2: f8bd 1006 ldrh.w r1, [sp, #6] -10008cc6: 4413 add r3, r2 -10008cc8: 81a1 strh r1, [r4, #12] -10008cca: 6063 str r3, [r4, #4] -10008ccc: b003 add sp, #12 -10008cce: bdf0 pop {r4, r5, r6, r7, pc} -10008cd0: 1004a75c .word 0x1004a75c -10008cd4: 1004a762 .word 0x1004a762 -10008cd8: 1004a5c8 .word 0x1004a5c8 -10008cdc: 1004a74c .word 0x1004a74c - -10008ce0 : -10008ce0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10008ce4: 7803 ldrb r3, [r0, #0] -10008ce6: b099 sub sp, #100 ; 0x64 -10008ce8: 4607 mov r7, r0 -10008cea: b923 cbnz r3, 10008cf6 -10008cec: 26ff movs r6, #255 ; 0xff -10008cee: 4630 mov r0, r6 -10008cf0: b019 add sp, #100 ; 0x64 -10008cf2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10008cf6: 4b31 ldr r3, [pc, #196] ; (10008dbc ) -10008cf8: 781b ldrb r3, [r3, #0] -10008cfa: 2b01 cmp r3, #1 -10008cfc: d0f6 beq.n 10008cec -10008cfe: 4602 mov r2, r0 -10008d00: f04f 0900 mov.w r9, #0 -10008d04: eba2 0a07 sub.w sl, r2, r7 -10008d08: f812 3b01 ldrb.w r3, [r2], #1 -10008d0c: 2b00 cmp r3, #0 -10008d0e: d148 bne.n 10008da2 -10008d10: 492b ldr r1, [pc, #172] ; (10008dc0 ) -10008d12: 200c movs r0, #12 -10008d14: 460d mov r5, r1 -10008d16: 1c5a adds r2, r3, #1 -10008d18: fb00 1303 mla r3, r0, r3, r1 -10008d1c: 68db ldr r3, [r3, #12] -10008d1e: b2d6 uxtb r6, r2 -10008d20: 3301 adds r3, #1 -10008d22: d046 beq.n 10008db2 -10008d24: 2a1f cmp r2, #31 -10008d26: 4613 mov r3, r2 -10008d28: d1f5 bne.n 10008d16 -10008d2a: 2620 movs r6, #32 -10008d2c: 2400 movs r4, #0 -10008d2e: f8df b098 ldr.w fp, [pc, #152] ; 10008dc8 -10008d32: 4b24 ldr r3, [pc, #144] ; (10008dc4 ) -10008d34: 881a ldrh r2, [r3, #0] -10008d36: 4294 cmp r4, r2 -10008d38: dad8 bge.n 10008cec -10008d3a: f014 080f ands.w r8, r4, #15 -10008d3e: d109 bne.n 10008d54 -10008d40: 2320 movs r3, #32 -10008d42: 1da2 adds r2, r4, #6 -10008d44: 0052 lsls r2, r2, #1 -10008d46: 602a str r2, [r5, #0] -10008d48: 606b str r3, [r5, #4] -10008d4a: 461a mov r2, r3 -10008d4c: 4669 mov r1, sp -10008d4e: 4640 mov r0, r8 -10008d50: f7ff ff12 bl 10008b78 -10008d54: ab18 add r3, sp, #96 ; 0x60 -10008d56: eb03 0848 add.w r8, r3, r8, lsl #1 -10008d5a: f838 2c60 ldrh.w r2, [r8, #-96] -10008d5e: 454a cmp r2, r9 -10008d60: d12a bne.n 10008db8 -10008d62: fa1f f884 uxth.w r8, r4 -10008d66: 4640 mov r0, r8 -10008d68: f7ff ff82 bl 10008c70 -10008d6c: f8db 2000 ldr.w r2, [fp] -10008d70: a908 add r1, sp, #32 -10008d72: 602a str r2, [r5, #0] -10008d74: 2240 movs r2, #64 ; 0x40 -10008d76: 2000 movs r0, #0 -10008d78: 606a str r2, [r5, #4] -10008d7a: f7ff fefd bl 10008b78 -10008d7e: 4652 mov r2, sl -10008d80: a908 add r1, sp, #32 -10008d82: 4638 mov r0, r7 -10008d84: f011 ff2c bl 1001abe0 -10008d88: b9b0 cbnz r0, 10008db8 -10008d8a: 220c movs r2, #12 -10008d8c: 4372 muls r2, r6 -10008d8e: f8db 0004 ldr.w r0, [fp, #4] -10008d92: f8db 3008 ldr.w r3, [fp, #8] -10008d96: 18a9 adds r1, r5, r2 -10008d98: 50a8 str r0, [r5, r2] -10008d9a: 604b str r3, [r1, #4] -10008d9c: f8a1 8008 strh.w r8, [r1, #8] -10008da0: e7a5 b.n 10008cee -10008da2: 4499 add r9, r3 -10008da4: fa1f f989 uxth.w r9, r9 -10008da8: ea4f 0949 mov.w r9, r9, lsl #1 -10008dac: fa1f f989 uxth.w r9, r9 -10008db0: e7a8 b.n 10008d04 -10008db2: 2e1f cmp r6, #31 -10008db4: d09a beq.n 10008cec -10008db6: e7b9 b.n 10008d2c -10008db8: 3401 adds r4, #1 -10008dba: e7ba b.n 10008d32 -10008dbc: 1004a760 .word 0x1004a760 -10008dc0: 1004a5c8 .word 0x1004a5c8 -10008dc4: 1004a762 .word 0x1004a762 -10008dc8: 1004a74c .word 0x1004a74c - -10008dcc : -10008dcc: 281f cmp r0, #31 -10008dce: d808 bhi.n 10008de2 -10008dd0: 230c movs r3, #12 -10008dd2: 4358 muls r0, r3 -10008dd4: 4a04 ldr r2, [pc, #16] ; (10008de8 ) -10008dd6: 1813 adds r3, r2, r0 -10008dd8: 5812 ldr r2, [r2, r0] -10008dda: 3201 adds r2, #1 -10008ddc: d001 beq.n 10008de2 -10008dde: 6858 ldr r0, [r3, #4] -10008de0: 4770 bx lr -10008de2: 2000 movs r0, #0 -10008de4: 4770 bx lr -10008de6: bf00 nop -10008de8: 1004a5c8 .word 0x1004a5c8 - -10008dec : -10008dec: 281f cmp r0, #31 -10008dee: b570 push {r4, r5, r6, lr} -10008df0: 460d mov r5, r1 -10008df2: 4616 mov r6, r2 -10008df4: d815 bhi.n 10008e22 -10008df6: 230c movs r3, #12 -10008df8: 4358 muls r0, r3 -10008dfa: 4c0b ldr r4, [pc, #44] ; (10008e28 ) -10008dfc: 5822 ldr r2, [r4, r0] -10008dfe: 1823 adds r3, r4, r0 -10008e00: 3201 adds r2, #1 -10008e02: d00e beq.n 10008e22 -10008e04: 8918 ldrh r0, [r3, #8] -10008e06: f7ff ff33 bl 10008c70 -10008e0a: 4b08 ldr r3, [pc, #32] ; (10008e2c ) -10008e0c: 4632 mov r2, r6 -10008e0e: 681b ldr r3, [r3, #0] -10008e10: 4629 mov r1, r5 -10008e12: 6023 str r3, [r4, #0] -10008e14: 23ff movs r3, #255 ; 0xff -10008e16: 2000 movs r0, #0 -10008e18: 6063 str r3, [r4, #4] -10008e1a: f7ff fead bl 10008b78 -10008e1e: 2001 movs r0, #1 -10008e20: bd70 pop {r4, r5, r6, pc} -10008e22: 2000 movs r0, #0 -10008e24: bd70 pop {r4, r5, r6, pc} -10008e26: bf00 nop -10008e28: 1004a5c8 .word 0x1004a5c8 -10008e2c: 1004a74c .word 0x1004a74c - -10008e30 : -10008e30: b508 push {r3, lr} -10008e32: 4803 ldr r0, [pc, #12] ; (10008e40 ) -10008e34: f00e ffe4 bl 10017e00 -10008e38: f5a0 2050 sub.w r0, r0, #851968 ; 0xd0000 -10008e3c: bd08 pop {r3, pc} -10008e3e: bf00 nop -10008e40: 1004b4ec .word 0x1004b4ec - -10008e44 : -10008e44: 2300 movs r3, #0 -10008e46: b507 push {r0, r1, r2, lr} -10008e48: 2001 movs r0, #1 -10008e4a: 9301 str r3, [sp, #4] -10008e4c: f00d ff0a bl 10016c64 -10008e50: 4b08 ldr r3, [pc, #32] ; (10008e74 ) -10008e52: 881b ldrh r3, [r3, #0] -10008e54: b133 cbz r3, 10008e64 -10008e56: 4b08 ldr r3, [pc, #32] ; (10008e78 ) -10008e58: aa01 add r2, sp, #4 -10008e5a: 6819 ldr r1, [r3, #0] -10008e5c: 4807 ldr r0, [pc, #28] ; (10008e7c ) -10008e5e: 3108 adds r1, #8 -10008e60: f00e fea0 bl 10017ba4 -10008e64: 2001 movs r0, #1 -10008e66: f00d ff17 bl 10016c98 -10008e6a: 9801 ldr r0, [sp, #4] -10008e6c: b003 add sp, #12 -10008e6e: f85d fb04 ldr.w pc, [sp], #4 -10008e72: bf00 nop -10008e74: 1004a762 .word 0x1004a762 -10008e78: 1004a748 .word 0x1004a748 -10008e7c: 1004b4ec .word 0x1004b4ec - -10008e80 : -10008e80: f44f 2050 mov.w r0, #851968 ; 0xd0000 -10008e84: 4770 bx lr - ... - -10008e88 : -10008e88: b538 push {r3, r4, r5, lr} -10008e8a: 460d mov r5, r1 -10008e8c: 79c1 ldrb r1, [r0, #7] -10008e8e: 4604 mov r4, r0 -10008e90: 29ff cmp r1, #255 ; 0xff -10008e92: d00d beq.n 10008eb0 -10008e94: 480c ldr r0, [pc, #48] ; (10008ec8 ) -10008e96: f011 fe63 bl 1001ab60 -10008e9a: 79e0 ldrb r0, [r4, #7] -10008e9c: 28fb cmp r0, #251 ; 0xfb -10008e9e: d807 bhi.n 10008eb0 -10008ea0: f7ff ff94 bl 10008dcc -10008ea4: 69e3 ldr r3, [r4, #28] -10008ea6: 1a18 subs r0, r3, r0 -10008ea8: 61e0 str r0, [r4, #28] -10008eaa: 79e0 ldrb r0, [r4, #7] -10008eac: f7ff fe58 bl 10008b60 -10008eb0: 79a3 ldrb r3, [r4, #6] -10008eb2: 71e3 strb r3, [r4, #7] -10008eb4: 7963 ldrb r3, [r4, #5] -10008eb6: 71a3 strb r3, [r4, #6] -10008eb8: 7923 ldrb r3, [r4, #4] -10008eba: 7125 strb r5, [r4, #4] -10008ebc: 7163 strb r3, [r4, #5] -10008ebe: 6823 ldr r3, [r4, #0] -10008ec0: f043 0308 orr.w r3, r3, #8 -10008ec4: 6023 str r3, [r4, #0] -10008ec6: bd38 pop {r3, r4, r5, pc} -10008ec8: 1003f49f .word 0x1003f49f - -10008ecc : -10008ecc: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10008ed0: f04f 08ff mov.w r8, #255 ; 0xff -10008ed4: 6b45 ldr r5, [r0, #52] ; 0x34 -10008ed6: 4f0d ldr r7, [pc, #52] ; (10008f0c ) -10008ed8: 1d2c adds r4, r5, #4 -10008eda: f105 0608 add.w r6, r5, #8 -10008ede: 7821 ldrb r1, [r4, #0] -10008ee0: 29ff cmp r1, #255 ; 0xff -10008ee2: d009 beq.n 10008ef8 -10008ee4: 4638 mov r0, r7 -10008ee6: f011 fe3b bl 1001ab60 -10008eea: 7820 ldrb r0, [r4, #0] -10008eec: 28fb cmp r0, #251 ; 0xfb -10008eee: d801 bhi.n 10008ef4 -10008ef0: f7ff fe36 bl 10008b60 -10008ef4: f884 8000 strb.w r8, [r4] -10008ef8: 3401 adds r4, #1 -10008efa: 42b4 cmp r4, r6 -10008efc: d1ef bne.n 10008ede -10008efe: 682b ldr r3, [r5, #0] -10008f00: f023 0338 bic.w r3, r3, #56 ; 0x38 -10008f04: 602b str r3, [r5, #0] -10008f06: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10008f0a: bf00 nop -10008f0c: 1003f49f .word 0x1003f49f - -10008f10 : -10008f10: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} -10008f14: 2500 movs r5, #0 -10008f16: 462c mov r4, r5 -10008f18: f8df 804c ldr.w r8, [pc, #76] ; 10008f68 -10008f1c: 2300 movs r3, #0 -10008f1e: 2205 movs r2, #5 -10008f20: a901 add r1, sp, #4 -10008f22: f8d8 0000 ldr.w r0, [r8] -10008f26: f00c fe47 bl 10015bb8 -10008f2a: 2801 cmp r0, #1 -10008f2c: d110 bne.n 10008f50 -10008f2e: 9b01 ldr r3, [sp, #4] -10008f30: 2b00 cmp r3, #0 -10008f32: d0f3 beq.n 10008f1c -10008f34: f8bd 200c ldrh.w r2, [sp, #12] -10008f38: b13a cbz r2, 10008f4a -10008f3a: f00d f96b bl 10016214 -10008f3e: 9c01 ldr r4, [sp, #4] -10008f40: 4607 mov r7, r0 -10008f42: 9e02 ldr r6, [sp, #8] -10008f44: f8bd 500c ldrh.w r5, [sp, #12] -10008f48: e7e8 b.n 10008f1c -10008f4a: 9802 ldr r0, [sp, #8] -10008f4c: 4798 blx r3 -10008f4e: e7e5 b.n 10008f1c -10008f50: 2c00 cmp r4, #0 -10008f52: d0e3 beq.n 10008f1c -10008f54: f00d f95e bl 10016214 -10008f58: 1bc0 subs r0, r0, r7 -10008f5a: 42a8 cmp r0, r5 -10008f5c: d9de bls.n 10008f1c -10008f5e: 4630 mov r0, r6 -10008f60: 47a0 blx r4 -10008f62: 2400 movs r4, #0 -10008f64: e7da b.n 10008f1c -10008f66: bf00 nop -10008f68: 1004a764 .word 0x1004a764 - -10008f6c : -10008f6c: b5f8 push {r3, r4, r5, r6, r7, lr} -10008f6e: 4606 mov r6, r0 -10008f70: 8840 ldrh r0, [r0, #2] -10008f72: 3a06 subs r2, #6 -10008f74: 1a12 subs r2, r2, r0 -10008f76: 2a00 cmp r2, #0 -10008f78: dc01 bgt.n 10008f7e -10008f7a: 2000 movs r0, #0 -10008f7c: bdf8 pop {r3, r4, r5, r6, r7, pc} -10008f7e: 460b mov r3, r1 -10008f80: 461d mov r5, r3 -10008f82: 782c ldrb r4, [r5, #0] -10008f84: 3301 adds r3, #1 -10008f86: 2c2d cmp r4, #45 ; 0x2d -10008f88: d123 bne.n 10008fd2 -10008f8a: 781c ldrb r4, [r3, #0] -10008f8c: 2c2d cmp r4, #45 ; 0x2d -10008f8e: d120 bne.n 10008fd2 -10008f90: f8c6 50d0 str.w r5, [r6, #208] ; 0xd0 -10008f94: 3502 adds r5, #2 -10008f96: 4602 mov r2, r0 -10008f98: 1d31 adds r1, r6, #4 -10008f9a: 4628 mov r0, r5 -10008f9c: f011 fe04 bl 1001aba8 -10008fa0: 2800 cmp r0, #0 -10008fa2: d1ea bne.n 10008f7a -10008fa4: 8877 ldrh r7, [r6, #2] -10008fa6: 490e ldr r1, [pc, #56] ; (10008fe0 ) -10008fa8: 19ec adds r4, r5, r7 -10008faa: 4620 mov r0, r4 -10008fac: f001 fac3 bl 1000a536 -10008fb0: b120 cbz r0, 10008fbc -10008fb2: 3404 adds r4, #4 -10008fb4: f8c6 40d4 str.w r4, [r6, #212] ; 0xd4 -10008fb8: 20c8 movs r0, #200 ; 0xc8 -10008fba: bdf8 pop {r3, r4, r5, r6, r7, pc} -10008fbc: 5deb ldrb r3, [r5, r7] -10008fbe: 2b0d cmp r3, #13 -10008fc0: d10b bne.n 10008fda -10008fc2: 7863 ldrb r3, [r4, #1] -10008fc4: 2b0a cmp r3, #10 -10008fc6: d108 bne.n 10008fda -10008fc8: 3402 adds r4, #2 -10008fca: f8c6 40d4 str.w r4, [r6, #212] ; 0xd4 -10008fce: 2001 movs r0, #1 -10008fd0: bdf8 pop {r3, r4, r5, r6, r7, pc} -10008fd2: 1a5c subs r4, r3, r1 -10008fd4: 4294 cmp r4, r2 -10008fd6: ddd3 ble.n 10008f80 -10008fd8: e7cf b.n 10008f7a -10008fda: f44f 70c8 mov.w r0, #400 ; 0x190 -10008fde: bdf8 pop {r3, r4, r5, r6, r7, pc} -10008fe0: 1003f233 .word 0x1003f233 - -10008fe4 : -10008fe4: b538 push {r3, r4, r5, lr} -10008fe6: 4604 mov r4, r0 -10008fe8: 480c ldr r0, [pc, #48] ; (1000901c ) -10008fea: f011 fdb9 bl 1001ab60 -10008fee: 8823 ldrh r3, [r4, #0] -10008ff0: 4620 mov r0, r4 -10008ff2: f043 0320 orr.w r3, r3, #32 -10008ff6: 8023 strh r3, [r4, #0] -10008ff8: 8823 ldrh r3, [r4, #0] -10008ffa: 6b65 ldr r5, [r4, #52] ; 0x34 -10008ffc: f043 0310 orr.w r3, r3, #16 -10009000: 8023 strh r3, [r4, #0] -10009002: f7ff fc4b bl 1000889c -10009006: 8823 ldrh r3, [r4, #0] -10009008: 079b lsls r3, r3, #30 -1000900a: d502 bpl.n 10009012 -1000900c: 4620 mov r0, r4 -1000900e: f7ff fbcc bl 100087aa -10009012: 682b ldr r3, [r5, #0] -10009014: f043 0301 orr.w r3, r3, #1 -10009018: 602b str r3, [r5, #0] -1000901a: bd38 pop {r3, r4, r5, pc} -1000901c: 1003f4a5 .word 0x1003f4a5 - -10009020 : -10009020: b538 push {r3, r4, r5, lr} -10009022: 4605 mov r5, r0 -10009024: f7ff fa08 bl 10008438 -10009028: 6b6c ldr r4, [r5, #52] ; 0x34 -1000902a: b164 cbz r4, 10009046 -1000902c: 4628 mov r0, r5 -1000902e: f7ff ff4d bl 10008ecc -10009032: 6823 ldr r3, [r4, #0] -10009034: 035a lsls r2, r3, #13 -10009036: d506 bpl.n 10009046 -10009038: f423 2380 bic.w r3, r3, #262144 ; 0x40000 -1000903c: 6023 str r3, [r4, #0] -1000903e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10009042: f7fe bcad b.w 100079a0 -10009046: bd38 pop {r3, r4, r5, pc} - -10009048 : -10009048: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -1000904c: 4681 mov r9, r0 -1000904e: 4616 mov r6, r2 -10009050: f89d a030 ldrb.w sl, [sp, #48] ; 0x30 -10009054: 4688 mov r8, r1 -10009056: b151 cbz r1, 1000906e -10009058: b14e cbz r6, 1000906e -1000905a: b15b cbz r3, 10009074 -1000905c: b2b2 uxth r2, r6 -1000905e: 9200 str r2, [sp, #0] -10009060: 2200 movs r2, #0 -10009062: 4610 mov r0, r2 -10009064: f001 fb1a bl 1000a69c -10009068: 4604 mov r4, r0 -1000906a: b2b6 uxth r6, r6 -1000906c: b924 cbnz r4, 10009078 -1000906e: b003 add sp, #12 -10009070: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10009074: 1e4c subs r4, r1, #1 -10009076: e7f8 b.n 1000906a -10009078: eba4 0708 sub.w r7, r4, r8 -1000907c: 1bf7 subs r7, r6, r7 -1000907e: b2bf uxth r7, r7 -10009080: 9700 str r7, [sp, #0] -10009082: 233d movs r3, #61 ; 0x3d -10009084: 2200 movs r2, #0 -10009086: 1c61 adds r1, r4, #1 -10009088: 4620 mov r0, r4 -1000908a: f001 fb07 bl 1000a69c -1000908e: 4605 mov r5, r0 -10009090: 2800 cmp r0, #0 -10009092: d0ec beq.n 1000906e -10009094: 463b mov r3, r7 -10009096: 463a mov r2, r7 -10009098: eba5 0708 sub.w r7, r5, r8 -1000909c: 1bf7 subs r7, r6, r7 -1000909e: 4621 mov r1, r4 -100090a0: 4620 mov r0, r4 -100090a2: b2bf uxth r7, r7 -100090a4: f001 fb97 bl 1000a7d6 -100090a8: 4653 mov r3, sl -100090aa: 9700 str r7, [sp, #0] -100090ac: 2200 movs r2, #0 -100090ae: 1c69 adds r1, r5, #1 -100090b0: 4628 mov r0, r5 -100090b2: f001 faf3 bl 1000a69c -100090b6: 7823 ldrb r3, [r4, #0] -100090b8: 4683 mov fp, r0 -100090ba: b153 cbz r3, 100090d2 -100090bc: 463a mov r2, r7 -100090be: 4629 mov r1, r5 -100090c0: 463b mov r3, r7 -100090c2: 4628 mov r0, r5 -100090c4: f001 fb87 bl 1000a7d6 -100090c8: 462a mov r2, r5 -100090ca: 4621 mov r1, r4 -100090cc: 4648 mov r0, r9 -100090ce: f003 f835 bl 1000c13c -100090d2: 465c mov r4, fp -100090d4: e7ca b.n 1000906c - ... - -100090d8 : -100090d8: b570 push {r4, r5, r6, lr} -100090da: 4614 mov r4, r2 -100090dc: 461e mov r6, r3 -100090de: 8882 ldrh r2, [r0, #4] -100090e0: 18e3 adds r3, r4, r3 -100090e2: 3301 adds r3, #1 -100090e4: 4293 cmp r3, r2 -100090e6: 4605 mov r5, r0 -100090e8: db02 blt.n 100090f0 -100090ea: 2400 movs r4, #0 -100090ec: 4620 mov r0, r4 -100090ee: bd70 pop {r4, r5, r6, pc} -100090f0: 6cc0 ldr r0, [r0, #76] ; 0x4c -100090f2: f001 fc47 bl 1000a984 -100090f6: 2800 cmp r0, #0 -100090f8: d0f7 beq.n 100090ea -100090fa: 88ab ldrh r3, [r5, #4] -100090fc: 6cea ldr r2, [r5, #76] ; 0x4c -100090fe: 4404 add r4, r0 -10009100: 441a add r2, r3 -10009102: 1b12 subs r2, r2, r4 -10009104: 4909 ldr r1, [pc, #36] ; (1000912c ) -10009106: 4620 mov r0, r4 -10009108: f001 fc3c bl 1000a984 -1000910c: b930 cbnz r0, 1000911c -1000910e: f44f 73c8 mov.w r3, #400 ; 0x190 -10009112: 802b strh r3, [r5, #0] -10009114: e7e9 b.n 100090ea -10009116: 4284 cmp r4, r0 -10009118: d203 bcs.n 10009122 -1000911a: 3401 adds r4, #1 -1000911c: 7823 ldrb r3, [r4, #0] -1000911e: 2b20 cmp r3, #32 -10009120: d0f9 beq.n 10009116 -10009122: 1b00 subs r0, r0, r4 -10009124: 4286 cmp r6, r0 -10009126: dde1 ble.n 100090ec -10009128: e7f1 b.n 1000910e -1000912a: bf00 nop -1000912c: 1003f70e .word 0x1003f70e - -10009130 : -10009130: b570 push {r4, r5, r6, lr} -10009132: 6b44 ldr r4, [r0, #52] ; 0x34 -10009134: 460e mov r6, r1 -10009136: 6823 ldr r3, [r4, #0] -10009138: f003 0318 and.w r3, r3, #24 -1000913c: 2b08 cmp r3, #8 -1000913e: d101 bne.n 10009144 -10009140: 2000 movs r0, #0 -10009142: bd70 pop {r4, r5, r6, pc} -10009144: 4608 mov r0, r1 -10009146: f7ff fdcb bl 10008ce0 -1000914a: 4605 mov r5, r0 -1000914c: 4601 mov r1, r0 -1000914e: 4632 mov r2, r6 -10009150: 4814 ldr r0, [pc, #80] ; (100091a4 ) -10009152: f011 fd05 bl 1001ab60 -10009156: 2dff cmp r5, #255 ; 0xff -10009158: d0f2 beq.n 10009140 -1000915a: 4e13 ldr r6, [pc, #76] ; (100091a8 ) -1000915c: 89b2 ldrh r2, [r6, #12] -1000915e: 0790 lsls r0, r2, #30 -10009160: bf48 it mi -10009162: 6823 ldrmi r3, [r4, #0] -10009164: 4628 mov r0, r5 -10009166: bf44 itt mi -10009168: f043 0310 orrmi.w r3, r3, #16 -1000916c: 6023 strmi r3, [r4, #0] -1000916e: f7ff fe2d bl 10008dcc -10009172: 69e3 ldr r3, [r4, #28] -10009174: 4418 add r0, r3 -10009176: 89b3 ldrh r3, [r6, #12] -10009178: 61e0 str r0, [r4, #28] -1000917a: 07d9 lsls r1, r3, #31 -1000917c: d50c bpl.n 10009198 -1000917e: 6823 ldr r3, [r4, #0] -10009180: 071a lsls r2, r3, #28 -10009182: d506 bpl.n 10009192 -10009184: 4628 mov r0, r5 -10009186: f7ff fceb bl 10008b60 -1000918a: 4808 ldr r0, [pc, #32] ; (100091ac ) -1000918c: f011 fce8 bl 1001ab60 -10009190: e7d6 b.n 10009140 -10009192: f043 0320 orr.w r3, r3, #32 -10009196: 6023 str r3, [r4, #0] -10009198: 4620 mov r0, r4 -1000919a: 4629 mov r1, r5 -1000919c: f7ff fe74 bl 10008e88 -100091a0: 2001 movs r0, #1 -100091a2: bd70 pop {r4, r5, r6, pc} -100091a4: 1003f486 .word 0x1003f486 -100091a8: 1004a74c .word 0x1004a74c -100091ac: 1003f490 .word 0x1003f490 - -100091b0 : -100091b0: b570 push {r4, r5, r6, lr} -100091b2: 7a03 ldrb r3, [r0, #8] -100091b4: b090 sub sp, #64 ; 0x40 -100091b6: 2b2f cmp r3, #47 ; 0x2f -100091b8: 4605 mov r5, r0 -100091ba: 460c mov r4, r1 -100091bc: d003 beq.n 100091c6 -100091be: 2400 movs r4, #0 -100091c0: 4620 mov r0, r4 -100091c2: b010 add sp, #64 ; 0x40 -100091c4: bd70 pop {r4, r5, r6, pc} -100091c6: 7a43 ldrb r3, [r0, #9] -100091c8: 6b4e ldr r6, [r1, #52] ; 0x34 -100091ca: bb4b cbnz r3, 10009220 -100091cc: 4b3d ldr r3, [pc, #244] ; (100092c4 ) -100091ce: 781b ldrb r3, [r3, #0] -100091d0: b17b cbz r3, 100091f2 -100091d2: 21fc movs r1, #252 ; 0xfc -100091d4: 4630 mov r0, r6 -100091d6: f7ff fe57 bl 10008e88 -100091da: 233e movs r3, #62 ; 0x3e -100091dc: 2401 movs r4, #1 -100091de: 61f3 str r3, [r6, #28] -100091e0: f885 405d strb.w r4, [r5, #93] ; 0x5d -100091e4: f105 0208 add.w r2, r5, #8 -100091e8: 7931 ldrb r1, [r6, #4] -100091ea: 4837 ldr r0, [pc, #220] ; (100092c8 ) -100091ec: f011 fcb8 bl 1001ab60 -100091f0: e7e6 b.n 100091c0 -100091f2: 4936 ldr r1, [pc, #216] ; (100092cc ) -100091f4: 4668 mov r0, sp -100091f6: f001 f993 bl 1000a520 -100091fa: 4b32 ldr r3, [pc, #200] ; (100092c4 ) -100091fc: 781b ldrb r3, [r3, #0] -100091fe: 2b00 cmp r3, #0 -10009200: d1dd bne.n 100091be -10009202: 4669 mov r1, sp -10009204: 4620 mov r0, r4 -10009206: f7ff ff93 bl 10009130 -1000920a: b350 cbz r0, 10009262 -1000920c: 466b mov r3, sp -1000920e: 2400 movs r4, #0 -10009210: f813 2b01 ldrb.w r2, [r3], #1 -10009214: 2a1f cmp r2, #31 -10009216: d83c bhi.n 10009292 -10009218: 2c00 cmp r4, #0 -1000921a: d13e bne.n 1000929a -1000921c: 2401 movs r4, #1 -1000921e: e7cf b.n 100091c0 -10009220: f100 0109 add.w r1, r0, #9 -10009224: 223f movs r2, #63 ; 0x3f -10009226: 4668 mov r0, sp -10009228: f011 fcc2 bl 1001abb0 -1000922c: 4928 ldr r1, [pc, #160] ; (100092d0 ) -1000922e: 4668 mov r0, sp -10009230: f001 f981 bl 1000a536 -10009234: b128 cbz r0, 10009242 -10009236: 21fd movs r1, #253 ; 0xfd -10009238: 4630 mov r0, r6 -1000923a: f7ff fe25 bl 10008e88 -1000923e: 2349 movs r3, #73 ; 0x49 -10009240: e7cc b.n 100091dc -10009242: 4924 ldr r1, [pc, #144] ; (100092d4 ) -10009244: 4668 mov r0, sp -10009246: f001 f976 bl 1000a536 -1000924a: 2800 cmp r0, #0 -1000924c: d0d5 beq.n 100091fa -1000924e: 6833 ldr r3, [r6, #0] -10009250: 21fe movs r1, #254 ; 0xfe -10009252: f443 6380 orr.w r3, r3, #1024 ; 0x400 -10009256: 6033 str r3, [r6, #0] -10009258: 4630 mov r0, r6 -1000925a: f7ff fe15 bl 10008e88 -1000925e: 23dc movs r3, #220 ; 0xdc -10009260: e7bc b.n 100091dc -10009262: 4668 mov r0, sp -10009264: f011 fcb8 bl 1001abd8 -10009268: f100 030b add.w r3, r0, #11 -1000926c: 2b3e cmp r3, #62 ; 0x3e -1000926e: d8cd bhi.n 1000920c -10009270: 222f movs r2, #47 ; 0x2f -10009272: ab10 add r3, sp, #64 ; 0x40 -10009274: 4403 add r3, r0 -10009276: 3001 adds r0, #1 -10009278: 4914 ldr r1, [pc, #80] ; (100092cc ) -1000927a: 4468 add r0, sp -1000927c: f803 2c40 strb.w r2, [r3, #-64] -10009280: f001 f94e bl 1000a520 -10009284: 4669 mov r1, sp -10009286: 4620 mov r0, r4 -10009288: f7ff ff52 bl 10009130 -1000928c: 2800 cmp r0, #0 -1000928e: d1bd bne.n 1000920c -10009290: e795 b.n 100091be -10009292: 2a2e cmp r2, #46 ; 0x2e -10009294: bf08 it eq -10009296: 461c moveq r4, r3 -10009298: e7ba b.n 10009210 -1000929a: 2300 movs r3, #0 -1000929c: 4e0e ldr r6, [pc, #56] ; (100092d8 ) -1000929e: f885 305d strb.w r3, [r5, #93] ; 0x5d -100092a2: f895 305d ldrb.w r3, [r5, #93] ; 0x5d -100092a6: 2b0f cmp r3, #15 -100092a8: d8b8 bhi.n 1000921c -100092aa: f856 1023 ldr.w r1, [r6, r3, lsl #2] -100092ae: 4620 mov r0, r4 -100092b0: f001 f941 bl 1000a536 -100092b4: 2800 cmp r0, #0 -100092b6: d1b1 bne.n 1000921c -100092b8: f895 305d ldrb.w r3, [r5, #93] ; 0x5d -100092bc: 3301 adds r3, #1 -100092be: f885 305d strb.w r3, [r5, #93] ; 0x5d -100092c2: e7ee b.n 100092a2 -100092c4: 1004a760 .word 0x1004a760 -100092c8: 1003f486 .word 0x1003f486 -100092cc: 1003f308 .word 0x1003f308 -100092d0: 1003f47e .word 0x1003f47e -100092d4: 1003f274 .word 0x1003f274 -100092d8: 1003f2c4 .word 0x1003f2c4 - -100092dc : -100092dc: b510 push {r4, lr} -100092de: 7901 ldrb r1, [r0, #4] -100092e0: 4604 mov r4, r0 -100092e2: 29ff cmp r1, #255 ; 0xff -100092e4: d105 bne.n 100092f2 -100092e6: 6823 ldr r3, [r4, #0] -100092e8: 2001 movs r0, #1 -100092ea: f023 0338 bic.w r3, r3, #56 ; 0x38 -100092ee: 6023 str r3, [r4, #0] -100092f0: bd10 pop {r4, pc} -100092f2: 480c ldr r0, [pc, #48] ; (10009324 ) -100092f4: f011 fc34 bl 1001ab60 -100092f8: 7920 ldrb r0, [r4, #4] -100092fa: 28fb cmp r0, #251 ; 0xfb -100092fc: d805 bhi.n 1000930a -100092fe: f7ff fc2f bl 10008b60 -10009302: 6823 ldr r3, [r4, #0] -10009304: f023 0320 bic.w r3, r3, #32 -10009308: 6023 str r3, [r4, #0] -1000930a: 79a2 ldrb r2, [r4, #6] -1000930c: 7963 ldrb r3, [r4, #5] -1000930e: 7162 strb r2, [r4, #5] -10009310: 79e2 ldrb r2, [r4, #7] -10009312: 7123 strb r3, [r4, #4] -10009314: 71a2 strb r2, [r4, #6] -10009316: 22ff movs r2, #255 ; 0xff -10009318: 4293 cmp r3, r2 -1000931a: 71e2 strb r2, [r4, #7] -1000931c: d0e3 beq.n 100092e6 -1000931e: 2000 movs r0, #0 -10009320: bd10 pop {r4, pc} -10009322: bf00 nop -10009324: 1003f49f .word 0x1003f49f - -10009328 : -10009328: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1000932c: 6b44 ldr r4, [r0, #52] ; 0x34 -1000932e: b087 sub sp, #28 -10009330: 7923 ldrb r3, [r4, #4] -10009332: 4605 mov r5, r0 -10009334: 2bff cmp r3, #255 ; 0xff -10009336: d104 bne.n 10009342 -10009338: 6823 ldr r3, [r4, #0] -1000933a: f043 0306 orr.w r3, r3, #6 -1000933e: 6023 str r3, [r4, #0] -10009340: e01e b.n 10009380 -10009342: 48a1 ldr r0, [pc, #644] ; (100095c8 ) -10009344: f011 fc0c bl 1001ab60 -10009348: 69ab ldr r3, [r5, #24] -1000934a: f8b3 106a ldrh.w r1, [r3, #106] ; 0x6a -1000934e: f5b1 7f8c cmp.w r1, #280 ; 0x118 -10009352: 82e1 strh r1, [r4, #22] -10009354: d217 bcs.n 10009386 -10009356: 489d ldr r0, [pc, #628] ; (100095cc ) -10009358: f011 fc02 bl 1001ab60 -1000935c: 882b ldrh r3, [r5, #0] -1000935e: 0658 lsls r0, r3, #25 -10009360: d502 bpl.n 10009368 -10009362: 489b ldr r0, [pc, #620] ; (100095d0 ) -10009364: f011 fbfc bl 1001ab60 -10009368: 69aa ldr r2, [r5, #24] -1000936a: 4629 mov r1, r5 -1000936c: f892 3022 ldrb.w r3, [r2, #34] ; 0x22 -10009370: 4628 mov r0, r5 -10009372: f023 0340 bic.w r3, r3, #64 ; 0x40 -10009376: f882 3022 strb.w r3, [r2, #34] ; 0x22 -1000937a: 2200 movs r2, #0 -1000937c: f7ff fa26 bl 100087cc -10009380: b007 add sp, #28 -10009382: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10009386: 7923 ldrb r3, [r4, #4] -10009388: 2bfb cmp r3, #251 ; 0xfb -1000938a: d91c bls.n 100093c6 -1000938c: 6826 ldr r6, [r4, #0] -1000938e: f016 0680 ands.w r6, r6, #128 ; 0x80 -10009392: d118 bne.n 100093c6 -10009394: 6b6c ldr r4, [r5, #52] ; 0x34 -10009396: 7923 ldrb r3, [r4, #4] -10009398: 2bfd cmp r3, #253 ; 0xfd -1000939a: d006 beq.n 100093aa -1000939c: 2bfe cmp r3, #254 ; 0xfe -1000939e: d00f beq.n 100093c0 -100093a0: 2bfc cmp r3, #252 ; 0xfc -100093a2: d108 bne.n 100093b6 -100093a4: 498b ldr r1, [pc, #556] ; (100095d4 ) -100093a6: 263e movs r6, #62 ; 0x3e -100093a8: e001 b.n 100093ae -100093aa: 2649 movs r6, #73 ; 0x49 -100093ac: 498a ldr r1, [pc, #552] ; (100095d8 ) -100093ae: 4632 mov r2, r6 -100093b0: 4628 mov r0, r5 -100093b2: f7ff fa0b bl 100087cc -100093b6: 4631 mov r1, r6 -100093b8: 4888 ldr r0, [pc, #544] ; (100095dc ) -100093ba: f011 fbd1 bl 1001ab60 -100093be: e7bb b.n 10009338 -100093c0: 4987 ldr r1, [pc, #540] ; (100095e0 ) -100093c2: 26dc movs r6, #220 ; 0xdc -100093c4: e7f3 b.n 100093ae -100093c6: f641 409c movw r0, #7324 ; 0x1c9c -100093ca: 4288 cmp r0, r1 -100093cc: bf28 it cs -100093ce: 4608 movcs r0, r1 -100093d0: 82e0 strh r0, [r4, #22] -100093d2: f00b feab bl 1001512c -100093d6: 4607 mov r7, r0 -100093d8: b918 cbnz r0, 100093e2 -100093da: 4882 ldr r0, [pc, #520] ; (100095e4 ) -100093dc: f011 fbc0 bl 1001ab60 -100093e0: e7aa b.n 10009338 -100093e2: 2300 movs r3, #0 -100093e4: 6822 ldr r2, [r4, #0] -100093e6: 6120 str r0, [r4, #16] -100093e8: 0651 lsls r1, r2, #25 -100093ea: 82a3 strh r3, [r4, #20] -100093ec: d505 bpl.n 100093fa -100093ee: f100 0310 add.w r3, r0, #16 -100093f2: 6123 str r3, [r4, #16] -100093f4: 8ae3 ldrh r3, [r4, #22] -100093f6: 3b18 subs r3, #24 -100093f8: 82e3 strh r3, [r4, #22] -100093fa: 06d3 lsls r3, r2, #27 -100093fc: d446 bmi.n 1000948c -100093fe: 8ae2 ldrh r2, [r4, #22] -10009400: 6921 ldr r1, [r4, #16] -10009402: 7920 ldrb r0, [r4, #4] -10009404: f7ff fbb8 bl 10008b78 -10009408: 8ae3 ldrh r3, [r4, #22] -1000940a: 82a0 strh r0, [r4, #20] -1000940c: 4283 cmp r3, r0 -1000940e: d903 bls.n 10009418 -10009410: 6823 ldr r3, [r4, #0] -10009412: f043 0306 orr.w r3, r3, #6 -10009416: 6023 str r3, [r4, #0] -10009418: 8aa1 ldrh r1, [r4, #20] -1000941a: 4870 ldr r0, [pc, #448] ; (100095dc ) -1000941c: f011 fba0 bl 1001ab60 -10009420: 8aa2 ldrh r2, [r4, #20] -10009422: 2a00 cmp r2, #0 -10009424: d02c beq.n 10009480 -10009426: 69e3 ldr r3, [r4, #28] -10009428: 1a9b subs r3, r3, r2 -1000942a: 61e3 str r3, [r4, #28] -1000942c: 6823 ldr r3, [r4, #0] -1000942e: 0659 lsls r1, r3, #25 -10009430: d51a bpl.n 10009468 -10009432: 496d ldr r1, [pc, #436] ; (100095e8 ) -10009434: a802 add r0, sp, #8 -10009436: f011 fb6d bl 1001ab14 -1000943a: 4606 mov r6, r0 -1000943c: 6920 ldr r0, [r4, #16] -1000943e: 4632 mov r2, r6 -10009440: 1b80 subs r0, r0, r6 -10009442: 6120 str r0, [r4, #16] -10009444: a902 add r1, sp, #8 -10009446: f011 fbb3 bl 1001abb0 -1000944a: 8aa0 ldrh r0, [r4, #20] -1000944c: 6823 ldr r3, [r4, #0] -1000944e: 4406 add r6, r0 -10009450: b2b6 uxth r6, r6 -10009452: 075b lsls r3, r3, #29 -10009454: 82a6 strh r6, [r4, #20] -10009456: d507 bpl.n 10009468 -10009458: 6920 ldr r0, [r4, #16] -1000945a: 4964 ldr r1, [pc, #400] ; (100095ec ) -1000945c: 4430 add r0, r6 -1000945e: f001 f85f bl 1000a520 -10009462: 8aa3 ldrh r3, [r4, #20] -10009464: 4418 add r0, r3 -10009466: 82a0 strh r0, [r4, #20] -10009468: 69aa ldr r2, [r5, #24] -1000946a: 4628 mov r0, r5 -1000946c: f892 3022 ldrb.w r3, [r2, #34] ; 0x22 -10009470: f043 0340 orr.w r3, r3, #64 ; 0x40 -10009474: f882 3022 strb.w r3, [r2, #34] ; 0x22 -10009478: 8aa2 ldrh r2, [r4, #20] -1000947a: 6921 ldr r1, [r4, #16] -1000947c: f7ff f9a6 bl 100087cc -10009480: 4638 mov r0, r7 -10009482: f00b feef bl 10015264 -10009486: 2300 movs r3, #0 -10009488: 6123 str r3, [r4, #16] -1000948a: e779 b.n 10009380 -1000948c: f8df 8164 ldr.w r8, [pc, #356] ; 100095f4 -10009490: f8df a164 ldr.w sl, [pc, #356] ; 100095f8 -10009494: 6826 ldr r6, [r4, #0] -10009496: f016 0680 ands.w r6, r6, #128 ; 0x80 -1000949a: d010 beq.n 100094be -1000949c: 69a3 ldr r3, [r4, #24] -1000949e: b10b cbz r3, 100094a4 -100094a0: 4628 mov r0, r5 -100094a2: 4798 blx r3 -100094a4: 6823 ldr r3, [r4, #0] -100094a6: 061e lsls r6, r3, #24 -100094a8: d4b6 bmi.n 10009418 -100094aa: 8ae3 ldrh r3, [r4, #22] -100094ac: 8aa2 ldrh r2, [r4, #20] -100094ae: 1a9b subs r3, r3, r2 -100094b0: 2b7f cmp r3, #127 ; 0x7f -100094b2: ddb1 ble.n 10009418 -100094b4: 6823 ldr r3, [r4, #0] -100094b6: f013 0f86 tst.w r3, #134 ; 0x86 -100094ba: d0eb beq.n 10009494 -100094bc: e7ac b.n 10009418 -100094be: 8aa3 ldrh r3, [r4, #20] -100094c0: 6922 ldr r2, [r4, #16] -100094c2: 7920 ldrb r0, [r4, #4] -100094c4: eb02 0b03 add.w fp, r2, r3 -100094c8: 8ae2 ldrh r2, [r4, #22] -100094ca: 4659 mov r1, fp -100094cc: eba2 0903 sub.w r9, r2, r3 -100094d0: f1b9 0f80 cmp.w r9, #128 ; 0x80 -100094d4: bfa8 it ge -100094d6: f04f 0980 movge.w r9, #128 ; 0x80 -100094da: fa1f f289 uxth.w r2, r9 -100094de: f7ff fb4b bl 10008b78 -100094e2: 4602 mov r2, r0 -100094e4: 2800 cmp r0, #0 -100094e6: d063 beq.n 100095b0 -100094e8: 4658 mov r0, fp -100094ea: 4601 mov r1, r0 -100094ec: f891 e000 ldrb.w lr, [r1] -100094f0: 3001 adds r0, #1 -100094f2: f1be 0f7e cmp.w lr, #126 ; 0x7e -100094f6: d11e bne.n 10009536 -100094f8: f04f 0e0c mov.w lr, #12 -100094fc: 7923 ldrb r3, [r4, #4] -100094fe: fb0e fe03 mul.w lr, lr, r3 -10009502: f858 300e ldr.w r3, [r8, lr] -10009506: eb08 0c0e add.w ip, r8, lr -1000950a: f8dc 0004 ldr.w r0, [ip, #4] -1000950e: 3301 adds r3, #1 -10009510: 1a9b subs r3, r3, r2 -10009512: 4433 add r3, r6 -10009514: 3801 subs r0, #1 -10009516: f848 300e str.w r3, [r8, lr] -1000951a: 4410 add r0, r2 -1000951c: 6823 ldr r3, [r4, #0] -1000951e: 1b80 subs r0, r0, r6 -10009520: f8cc 0004 str.w r0, [ip, #4] -10009524: 0518 lsls r0, r3, #20 -10009526: d41d bmi.n 10009564 -10009528: f443 6300 orr.w r3, r3, #2048 ; 0x800 -1000952c: 6023 str r3, [r4, #0] -1000952e: 8aa3 ldrh r3, [r4, #20] -10009530: 441e add r6, r3 -10009532: 82a6 strh r6, [r4, #20] -10009534: e7b9 b.n 100094aa -10009536: 3601 adds r6, #1 -10009538: 42b2 cmp r2, r6 -1000953a: d8d6 bhi.n 100094ea -1000953c: 6821 ldr r1, [r4, #0] -1000953e: 4591 cmp r9, r2 -10009540: f421 6100 bic.w r1, r1, #2048 ; 0x800 -10009544: 6021 str r1, [r4, #0] -10009546: d909 bls.n 1000955c -10009548: 4620 mov r0, r4 -1000954a: 9201 str r2, [sp, #4] -1000954c: f7ff fec6 bl 100092dc -10009550: 9a01 ldr r2, [sp, #4] -10009552: b118 cbz r0, 1000955c -10009554: 6823 ldr r3, [r4, #0] -10009556: f043 0306 orr.w r3, r3, #6 -1000955a: 6023 str r3, [r4, #0] -1000955c: 8aa0 ldrh r0, [r4, #20] -1000955e: 4402 add r2, r0 -10009560: 82a2 strh r2, [r4, #20] -10009562: e7a2 b.n 100094aa -10009564: f423 6300 bic.w r3, r3, #2048 ; 0x800 -10009568: 6023 str r3, [r4, #0] -1000956a: b1ee cbz r6, 100095a8 -1000956c: 2300 movs r3, #0 -1000956e: 2204 movs r2, #4 -10009570: 700b strb r3, [r1, #0] -10009572: 4658 mov r0, fp -10009574: 491e ldr r1, [pc, #120] ; (100095f0 ) -10009576: f011 fb17 bl 1001aba8 -1000957a: b980 cbnz r0, 1000959e -1000957c: f10b 0104 add.w r1, fp, #4 -10009580: 4628 mov r0, r5 -10009582: f7ff fdd5 bl 10009130 -10009586: 2800 cmp r0, #0 -10009588: d18f bne.n 100094aa -1000958a: 8aa3 ldrh r3, [r4, #20] -1000958c: 6920 ldr r0, [r4, #16] -1000958e: 4651 mov r1, sl -10009590: 4418 add r0, r3 -10009592: f000 ffc5 bl 1000a520 -10009596: 8aa3 ldrh r3, [r4, #20] -10009598: 4418 add r0, r3 -1000959a: 82a0 strh r0, [r4, #20] -1000959c: e785 b.n 100094aa -1000959e: 4659 mov r1, fp -100095a0: 4628 mov r0, r5 -100095a2: f001 fc27 bl 1000adf4 -100095a6: e780 b.n 100094aa -100095a8: 8aa3 ldrh r3, [r4, #20] -100095aa: 3301 adds r3, #1 -100095ac: 82a3 strh r3, [r4, #20] -100095ae: e77c b.n 100094aa -100095b0: 4620 mov r0, r4 -100095b2: f7ff fe93 bl 100092dc -100095b6: 2800 cmp r0, #0 -100095b8: f43f af77 beq.w 100094aa -100095bc: 6823 ldr r3, [r4, #0] -100095be: f043 0306 orr.w r3, r3, #6 -100095c2: 6023 str r3, [r4, #0] -100095c4: e771 b.n 100094aa -100095c6: bf00 nop -100095c8: 1003f6b8 .word 0x1003f6b8 -100095cc: 1003f6bf .word 0x1003f6bf -100095d0: 1003f6cb .word 0x1003f6cb -100095d4: 1003eec6 .word 0x1003eec6 -100095d8: 1003ee7c .word 0x1003ee7c -100095dc: 1003f569 .word 0x1003f569 -100095e0: 1003ef05 .word 0x1003ef05 -100095e4: 1003f6d7 .word 0x1003f6d7 -100095e8: 1003f22c .word 0x1003f22c -100095ec: 1003f709 .word 0x1003f709 -100095f0: 1003f6f4 .word 0x1003f6f4 -100095f4: 1004a5c8 .word 0x1004a5c8 -100095f8: 1003f6f9 .word 0x1003f6f9 - -100095fc : -100095fc: b538 push {r3, r4, r5, lr} -100095fe: 4605 mov r5, r0 -10009600: f7fe ff02 bl 10008408 -10009604: 6b6c ldr r4, [r5, #52] ; 0x34 -10009606: b374 cbz r4, 10009666 -10009608: 6821 ldr r1, [r4, #0] -1000960a: 07c8 lsls r0, r1, #31 -1000960c: d41f bmi.n 1000964e -1000960e: 078a lsls r2, r1, #30 -10009610: d406 bmi.n 10009620 -10009612: f001 010c and.w r1, r1, #12 -10009616: 2908 cmp r1, #8 -10009618: d102 bne.n 10009620 -1000961a: 4628 mov r0, r5 -1000961c: f7ff fe84 bl 10009328 -10009620: 6823 ldr r3, [r4, #0] -10009622: 075b lsls r3, r3, #29 -10009624: d506 bpl.n 10009634 -10009626: 4628 mov r0, r5 -10009628: f7ff fc50 bl 10008ecc -1000962c: 6823 ldr r3, [r4, #0] -1000962e: f043 0302 orr.w r3, r3, #2 -10009632: 6023 str r3, [r4, #0] -10009634: 6824 ldr r4, [r4, #0] -10009636: f014 0402 ands.w r4, r4, #2 -1000963a: d004 beq.n 10009646 -1000963c: 4628 mov r0, r5 -1000963e: f7ff fcd1 bl 10008fe4 -10009642: 2000 movs r0, #0 -10009644: bd38 pop {r3, r4, r5, pc} -10009646: 4809 ldr r0, [pc, #36] ; (1000966c ) -10009648: f011 fa8a bl 1001ab60 -1000964c: e7f9 b.n 10009642 -1000964e: 4808 ldr r0, [pc, #32] ; (10009670 ) -10009650: f011 fa86 bl 1001ab60 -10009654: 882b ldrh r3, [r5, #0] -10009656: f043 0320 orr.w r3, r3, #32 -1000965a: 802b strh r3, [r5, #0] -1000965c: 882b ldrh r3, [r5, #0] -1000965e: f043 0310 orr.w r3, r3, #16 -10009662: 802b strh r3, [r5, #0] -10009664: e7ed b.n 10009642 -10009666: f06f 000d mvn.w r0, #13 -1000966a: bd38 pop {r3, r4, r5, pc} -1000966c: 1004135c .word 0x1004135c -10009670: 1003f711 .word 0x1003f711 - -10009674 : -10009674: b538 push {r3, r4, r5, lr} -10009676: 4604 mov r4, r0 -10009678: 4615 mov r5, r2 -1000967a: b189 cbz r1, 100096a0 -1000967c: b182 cbz r2, 100096a0 -1000967e: 8d43 ldrh r3, [r0, #42] ; 0x2a -10009680: 429a cmp r2, r3 -10009682: d20d bcs.n 100096a0 -10009684: 6a40 ldr r0, [r0, #36] ; 0x24 -10009686: f011 fa93 bl 1001abb0 -1000968a: 1c69 adds r1, r5, #1 -1000968c: 6a60 ldr r0, [r4, #36] ; 0x24 -1000968e: f00b fe0d bl 100152ac -10009692: 6260 str r0, [r4, #36] ; 0x24 -10009694: b118 cbz r0, 1000969e -10009696: 2300 movs r3, #0 -10009698: 8565 strh r5, [r4, #42] ; 0x2a -1000969a: 85e3 strh r3, [r4, #46] ; 0x2e -1000969c: 2001 movs r0, #1 -1000969e: bd38 pop {r3, r4, r5, pc} -100096a0: 6a60 ldr r0, [r4, #36] ; 0x24 -100096a2: 2800 cmp r0, #0 -100096a4: d0fa beq.n 1000969c -100096a6: f00b fddd bl 10015264 -100096aa: 2300 movs r3, #0 -100096ac: 6263 str r3, [r4, #36] ; 0x24 -100096ae: 8563 strh r3, [r4, #42] ; 0x2a -100096b0: e7f3 b.n 1000969a - -100096b2 : -100096b2: b538 push {r3, r4, r5, lr} -100096b4: 4604 mov r4, r0 -100096b6: 6a40 ldr r0, [r0, #36] ; 0x24 -100096b8: 2500 movs r5, #0 -100096ba: b128 cbz r0, 100096c8 -100096bc: f00b fdd2 bl 10015264 -100096c0: 2001 movs r0, #1 -100096c2: 6265 str r5, [r4, #36] ; 0x24 -100096c4: 8565 strh r5, [r4, #42] ; 0x2a -100096c6: 85e5 strh r5, [r4, #46] ; 0x2e -100096c8: bd38 pop {r3, r4, r5, pc} - ... - -100096cc : -100096cc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100096d0: 4604 mov r4, r0 -100096d2: b0b3 sub sp, #204 ; 0xcc -100096d4: f7fe fe98 bl 10008408 -100096d8: 8d61 ldrh r1, [r4, #42] ; 0x2a -100096da: 488d ldr r0, [pc, #564] ; (10009910 ) -100096dc: f011 fa40 bl 1001ab60 -100096e0: 6b66 ldr r6, [r4, #52] ; 0x34 -100096e2: b976 cbnz r6, 10009702 -100096e4: 2024 movs r0, #36 ; 0x24 -100096e6: f00b fe2d bl 10015344 -100096ea: 4606 mov r6, r0 -100096ec: 2800 cmp r0, #0 -100096ee: f000 867b beq.w 1000a3e8 -100096f2: 23ff movs r3, #255 ; 0xff -100096f4: 7103 strb r3, [r0, #4] -100096f6: 7143 strb r3, [r0, #5] -100096f8: 7183 strb r3, [r0, #6] -100096fa: 71c3 strb r3, [r0, #7] -100096fc: 2300 movs r3, #0 -100096fe: 6003 str r3, [r0, #0] -10009700: 6360 str r0, [r4, #52] ; 0x34 -10009702: 6833 ldr r3, [r6, #0] -10009704: 075a lsls r2, r3, #29 -10009706: f040 8189 bne.w 10009a1c -1000970a: f413 3380 ands.w r3, r3, #65536 ; 0x10000 -1000970e: bf04 itt eq -10009710: 60b3 streq r3, [r6, #8] -10009712: 60f3 streq r3, [r6, #12] -10009714: 2100 movs r1, #0 -10009716: 2260 movs r2, #96 ; 0x60 -10009718: a81a add r0, sp, #104 ; 0x68 -1000971a: f011 fa4d bl 1001abb8 -1000971e: 2310 movs r3, #16 -10009720: f04f 0bc8 mov.w fp, #200 ; 0xc8 -10009724: f88d 30c5 strb.w r3, [sp, #197] ; 0xc5 -10009728: 6833 ldr r3, [r6, #0] -1000972a: f8ad b068 strh.w fp, [sp, #104] ; 0x68 -1000972e: 0499 lsls r1, r3, #18 -10009730: f100 8215 bmi.w 10009b5e -10009734: 8823 ldrh r3, [r4, #0] -10009736: 4620 mov r0, r4 -10009738: f043 0308 orr.w r3, r3, #8 -1000973c: 8023 strh r3, [r4, #0] -1000973e: f7ff f8ad bl 1000889c -10009742: f240 13f5 movw r3, #501 ; 0x1f5 -10009746: 6a67 ldr r7, [r4, #36] ; 0x24 -10009748: 8d62 ldrh r2, [r4, #42] ; 0x2a -1000974a: 6b65 ldr r5, [r4, #52] ; 0x34 -1000974c: eb07 0902 add.w r9, r7, r2 -10009750: f8ad 3068 strh.w r3, [sp, #104] ; 0x68 -10009754: f8cd 90bc str.w r9, [sp, #188] ; 0xbc -10009758: b927 cbnz r7, 10009764 -1000975a: f44f 73fa mov.w r3, #500 ; 0x1f4 -1000975e: f8ad 3068 strh.w r3, [sp, #104] ; 0x68 -10009762: e1c2 b.n 10009aea -10009764: 2a06 cmp r2, #6 -10009766: f240 81c0 bls.w 10009aea -1000976a: 496a ldr r1, [pc, #424] ; (10009914 ) -1000976c: 4638 mov r0, r7 -1000976e: f001 f909 bl 1000a984 -10009772: 4682 mov sl, r0 -10009774: b910 cbnz r0, 1000977c -10009776: f44f 73c8 mov.w r3, #400 ; 0x190 -1000977a: e7f0 b.n 1000975e -1000977c: f100 0802 add.w r8, r0, #2 -10009780: eba8 0307 sub.w r3, r8, r7 -10009784: 2b06 cmp r3, #6 -10009786: f340 81b0 ble.w 10009aea -1000978a: 2204 movs r2, #4 -1000978c: 4962 ldr r1, [pc, #392] ; (10009918 ) -1000978e: 4638 mov r0, r7 -10009790: f011 fa26 bl 1001abe0 -10009794: 2800 cmp r0, #0 -10009796: d15b bne.n 10009850 -10009798: 682b ldr r3, [r5, #0] -1000979a: 1d38 adds r0, r7, #4 -1000979c: f443 7300 orr.w r3, r3, #512 ; 0x200 -100097a0: 602b str r3, [r5, #0] -100097a2: f8ad b068 strh.w fp, [sp, #104] ; 0x68 -100097a6: eba8 0200 sub.w r2, r8, r0 -100097aa: b293 uxth r3, r2 -100097ac: 2b0a cmp r3, #10 -100097ae: 902c str r0, [sp, #176] ; 0xb0 -100097b0: f8ad 306a strh.w r3, [sp, #106] ; 0x6a -100097b4: d915 bls.n 100097e2 -100097b6: 461a mov r2, r3 -100097b8: 4958 ldr r1, [pc, #352] ; (1000991c ) -100097ba: f001 f8e3 bl 1000a984 -100097be: b180 cbz r0, 100097e2 -100097c0: 79c3 ldrb r3, [r0, #7] -100097c2: 2b2e cmp r3, #46 ; 0x2e -100097c4: d10d bne.n 100097e2 -100097c6: 7983 ldrb r3, [r0, #6] -100097c8: 3b30 subs r3, #48 ; 0x30 -100097ca: b2da uxtb r2, r3 -100097cc: 2a09 cmp r2, #9 -100097ce: d808 bhi.n 100097e2 -100097d0: 7a03 ldrb r3, [r0, #8] -100097d2: 3b30 subs r3, #48 ; 0x30 -100097d4: b2db uxtb r3, r3 -100097d6: 2b09 cmp r3, #9 -100097d8: bf9c itt ls -100097da: eb03 1302 addls.w r3, r3, r2, lsl #4 -100097de: f88d 30c4 strbls.w r3, [sp, #196] ; 0xc4 -100097e2: f89d 30c4 ldrb.w r3, [sp, #196] ; 0xc4 -100097e6: 2b0f cmp r3, #15 -100097e8: d802 bhi.n 100097f0 -100097ea: 682b ldr r3, [r5, #0] -100097ec: 05da lsls r2, r3, #23 -100097ee: d4c2 bmi.n 10009776 -100097f0: eba9 0208 sub.w r2, r9, r8 -100097f4: 3202 adds r2, #2 -100097f6: 494a ldr r1, [pc, #296] ; (10009920 ) -100097f8: 4650 mov r0, sl -100097fa: f001 f8c3 bl 1000a984 -100097fe: 2800 cmp r0, #0 -10009800: f000 8103 beq.w 10009a0a -10009804: 1c83 adds r3, r0, #2 -10009806: 4598 cmp r8, r3 -10009808: 682a ldr r2, [r5, #0] -1000980a: d00d beq.n 10009828 -1000980c: f8cd 80b4 str.w r8, [sp, #180] ; 0xb4 -10009810: eba3 0808 sub.w r8, r3, r8 -10009814: 05d3 lsls r3, r2, #23 -10009816: bf42 ittt mi -10009818: 3004 addmi r0, #4 -1000981a: 902f strmi r0, [sp, #188] ; 0xbc -1000981c: eba9 0000 submi.w r0, r9, r0 -10009820: f8ad 806c strh.w r8, [sp, #108] ; 0x6c -10009824: bf48 it mi -10009826: 9030 strmi r0, [sp, #192] ; 0xc0 -10009828: 0717 lsls r7, r2, #28 -1000982a: d453 bmi.n 100098d4 -1000982c: 992c ldr r1, [sp, #176] ; 0xb0 -1000982e: b131 cbz r1, 1000983e -10009830: f8bd 306a ldrh.w r3, [sp, #106] ; 0x6a -10009834: 2b01 cmp r3, #1 -10009836: d81b bhi.n 10009870 -10009838: 780b ldrb r3, [r1, #0] -1000983a: f88d 3070 strb.w r3, [sp, #112] ; 0x70 -1000983e: 4621 mov r1, r4 -10009840: a81a add r0, sp, #104 ; 0x68 -10009842: f7ff fcb5 bl 100091b0 -10009846: 2800 cmp r0, #0 -10009848: d144 bne.n 100098d4 -1000984a: f44f 73ca mov.w r3, #404 ; 0x194 -1000984e: e786 b.n 1000975e -10009850: 2205 movs r2, #5 -10009852: 4934 ldr r1, [pc, #208] ; (10009924 ) -10009854: 4638 mov r0, r7 -10009856: f011 f9c3 bl 1001abe0 -1000985a: 2800 cmp r0, #0 -1000985c: f040 8145 bne.w 10009aea -10009860: 682b ldr r3, [r5, #0] -10009862: 1d78 adds r0, r7, #5 -10009864: f443 7380 orr.w r3, r3, #256 ; 0x100 -10009868: 602b str r3, [r5, #0] -1000986a: f8ad b068 strh.w fp, [sp, #104] ; 0x68 -1000986e: e79a b.n 100097a6 -10009870: 224f movs r2, #79 ; 0x4f -10009872: a806 add r0, sp, #24 -10009874: f000 ffaf bl 1000a7d6 -10009878: 492b ldr r1, [pc, #172] ; (10009928 ) -1000987a: a806 add r0, sp, #24 -1000987c: f000 fe5b bl 1000a536 -10009880: b300 cbz r0, 100098c4 -10009882: f10d 071f add.w r7, sp, #31 -10009886: 212f movs r1, #47 ; 0x2f -10009888: 4638 mov r0, r7 -1000988a: f011 f999 bl 1001abc0 -1000988e: 2800 cmp r0, #0 -10009890: bf14 ite ne -10009892: 4601 movne r1, r0 -10009894: 4639 moveq r1, r7 -10009896: 2340 movs r3, #64 ; 0x40 -10009898: 2200 movs r2, #0 -1000989a: 9300 str r3, [sp, #0] -1000989c: a81c add r0, sp, #112 ; 0x70 -1000989e: 233f movs r3, #63 ; 0x3f -100098a0: f000 fefc bl 1000a69c -100098a4: a81c add r0, sp, #112 ; 0x70 -100098a6: f011 f997 bl 1001abd8 -100098aa: 4920 ldr r1, [pc, #128] ; (1000992c ) -100098ac: 4602 mov r2, r0 -100098ae: a81c add r0, sp, #112 ; 0x70 -100098b0: f001 f868 bl 1000a984 -100098b4: 2800 cmp r0, #0 -100098b6: d0c2 beq.n 1000983e -100098b8: 6b62 ldr r2, [r4, #52] ; 0x34 -100098ba: 6813 ldr r3, [r2, #0] -100098bc: f443 6380 orr.w r3, r3, #1024 ; 0x400 -100098c0: 6013 str r3, [r2, #0] -100098c2: e7bc b.n 1000983e -100098c4: 491a ldr r1, [pc, #104] ; (10009930 ) -100098c6: a806 add r0, sp, #24 -100098c8: f000 fe35 bl 1000a536 -100098cc: 2800 cmp r0, #0 -100098ce: d1d8 bne.n 10009882 -100098d0: a906 add r1, sp, #24 -100098d2: e7e0 b.n 10009896 -100098d4: 9a2d ldr r2, [sp, #180] ; 0xb4 -100098d6: 682b ldr r3, [r5, #0] -100098d8: b112 cbz r2, 100098e0 -100098da: f8bd 206c ldrh.w r2, [sp, #108] ; 0x6c -100098de: b92a cbnz r2, 100098ec -100098e0: 0558 lsls r0, r3, #21 -100098e2: f140 8102 bpl.w 10009aea -100098e6: f240 1391 movw r3, #401 ; 0x191 -100098ea: e738 b.n 1000975e -100098ec: 05d9 lsls r1, r3, #23 -100098ee: f140 809a bpl.w 10009a26 -100098f2: 4910 ldr r1, [pc, #64] ; (10009934 ) -100098f4: 2301 movs r3, #1 -100098f6: 220f movs r2, #15 -100098f8: 6809 ldr r1, [r1, #0] -100098fa: a81a add r0, sp, #104 ; 0x68 -100098fc: f7ff fbec bl 100090d8 -10009900: b118 cbz r0, 1000990a -10009902: f8bd 3068 ldrh.w r3, [sp, #104] ; 0x68 -10009906: 2bc8 cmp r3, #200 ; 0xc8 -10009908: d016 beq.n 10009938 -1000990a: f240 139b movw r3, #411 ; 0x19b -1000990e: e726 b.n 1000975e -10009910: 1003f4ce .word 0x1003f4ce -10009914: 1003f70e .word 0x1003f70e -10009918: 1003f4d8 .word 0x1003f4d8 -1000991c: 1003f4e3 .word 0x1003f4e3 -10009920: 1003f70c .word 0x1003f70c -10009924: 1003f4dd .word 0x1003f4dd -10009928: 1003f4ea .word 0x1003f4ea -1000992c: 1003f4fa .word 0x1003f4fa -10009930: 1003f4f2 .word 0x1003f4f2 -10009934: 10044ccc .word 0x10044ccc -10009938: f000 fe09 bl 1000a54e -1000993c: 4607 mov r7, r0 -1000993e: 4601 mov r1, r0 -10009940: 9a30 ldr r2, [sp, #192] ; 0xc0 -10009942: 48a5 ldr r0, [pc, #660] ; (10009bd8 ) -10009944: f011 f90c bl 1001ab60 -10009948: 2f00 cmp r7, #0 -1000994a: d06b beq.n 10009a24 -1000994c: 682b ldr r3, [r5, #0] -1000994e: 61ef str r7, [r5, #28] -10009950: 045a lsls r2, r3, #17 -10009952: d468 bmi.n 10009a26 -10009954: f8bd 306c ldrh.w r3, [sp, #108] ; 0x6c -10009958: 2b2d cmp r3, #45 ; 0x2d -1000995a: d94e bls.n 100099fa -1000995c: 499f ldr r1, [pc, #636] ; (10009bdc ) -1000995e: 231e movs r3, #30 -10009960: 220d movs r2, #13 -10009962: 6809 ldr r1, [r1, #0] -10009964: a81a add r0, sp, #104 ; 0x68 -10009966: f7ff fbb7 bl 100090d8 -1000996a: f8bd 3068 ldrh.w r3, [sp, #104] ; 0x68 -1000996e: 4681 mov r9, r0 -10009970: 2bc8 cmp r3, #200 ; 0xc8 -10009972: f040 80ba bne.w 10009aea -10009976: 2800 cmp r0, #0 -10009978: d03c beq.n 100099f4 -1000997a: f8bd 306c ldrh.w r3, [sp, #108] ; 0x6c -1000997e: 9a2d ldr r2, [sp, #180] ; 0xb4 -10009980: 4997 ldr r1, [pc, #604] ; (10009be0 ) -10009982: 441a add r2, r3 -10009984: 1a12 subs r2, r2, r0 -10009986: f000 fffd bl 1000a984 -1000998a: 4b96 ldr r3, [pc, #600] ; (10009be4 ) -1000998c: 4680 mov r8, r0 -1000998e: eba0 0209 sub.w r2, r0, r9 -10009992: 6819 ldr r1, [r3, #0] -10009994: 4648 mov r0, r9 -10009996: f000 fff5 bl 1000a984 -1000999a: b358 cbz r0, 100099f4 -1000999c: 4b92 ldr r3, [pc, #584] ; (10009be8 ) -1000999e: 3013 adds r0, #19 -100099a0: eba8 0200 sub.w r2, r8, r0 -100099a4: 6819 ldr r1, [r3, #0] -100099a6: f000 ffed bl 1000a984 -100099aa: b318 cbz r0, 100099f4 -100099ac: f100 0a09 add.w sl, r0, #9 -100099b0: 20d8 movs r0, #216 ; 0xd8 -100099b2: f00b fcc7 bl 10015344 -100099b6: 4681 mov r9, r0 -100099b8: 2800 cmp r0, #0 -100099ba: f43f aece beq.w 1000975a -100099be: 2200 movs r2, #0 -100099c0: f898 3000 ldrb.w r3, [r8] -100099c4: f100 0b04 add.w fp, r0, #4 -100099c8: f888 2000 strb.w r2, [r8] -100099cc: 4651 mov r1, sl -100099ce: 2240 movs r2, #64 ; 0x40 -100099d0: 4658 mov r0, fp -100099d2: 9302 str r3, [sp, #8] -100099d4: f011 f8ec bl 1001abb0 -100099d8: 9b02 ldr r3, [sp, #8] -100099da: 4658 mov r0, fp -100099dc: f888 3000 strb.w r3, [r8] -100099e0: f011 f8fa bl 1001abd8 -100099e4: 682b ldr r3, [r5, #0] -100099e6: f8a9 0002 strh.w r0, [r9, #2] -100099ea: f443 43a0 orr.w r3, r3, #20480 ; 0x5000 -100099ee: f8c4 901c str.w r9, [r4, #28] -100099f2: 602b str r3, [r5, #0] -100099f4: 682b ldr r3, [r5, #0] -100099f6: 045b lsls r3, r3, #17 -100099f8: d415 bmi.n 10009a26 -100099fa: 9b30 ldr r3, [sp, #192] ; 0xc0 -100099fc: 429f cmp r7, r3 -100099fe: d912 bls.n 10009a26 -10009a00: f240 139d movw r3, #413 ; 0x19d -10009a04: 9730 str r7, [sp, #192] ; 0xc0 -10009a06: f8ad 3068 strh.w r3, [sp, #104] ; 0x68 -10009a0a: f241 63cf movw r3, #5839 ; 0x16cf -10009a0e: 8d62 ldrh r2, [r4, #42] ; 0x2a -10009a10: 429a cmp r2, r3 -10009a12: f200 80d5 bhi.w 10009bc0 -10009a16: 4875 ldr r0, [pc, #468] ; (10009bec ) -10009a18: f011 f8a2 bl 1001ab60 -10009a1c: 2000 movs r0, #0 -10009a1e: b033 add sp, #204 ; 0xcc -10009a20: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10009a24: 9730 str r7, [sp, #192] ; 0xc0 -10009a26: 682b ldr r3, [r5, #0] -10009a28: 0558 lsls r0, r3, #21 -10009a2a: d544 bpl.n 10009ab6 -10009a2c: 4970 ldr r1, [pc, #448] ; (10009bf0 ) -10009a2e: 2308 movs r3, #8 -10009a30: 220e movs r2, #14 -10009a32: 6809 ldr r1, [r1, #0] -10009a34: a81a add r0, sp, #104 ; 0x68 -10009a36: f7ff fb4f bl 100090d8 -10009a3a: 4607 mov r7, r0 -10009a3c: 2800 cmp r0, #0 -10009a3e: f43f af52 beq.w 100098e6 -10009a42: f8bd 3068 ldrh.w r3, [sp, #104] ; 0x68 -10009a46: 2bc8 cmp r3, #200 ; 0xc8 -10009a48: f47f af4d bne.w 100098e6 -10009a4c: 2205 movs r2, #5 -10009a4e: 4969 ldr r1, [pc, #420] ; (10009bf4 ) -10009a50: f011 f8c6 bl 1001abe0 -10009a54: 2800 cmp r0, #0 -10009a56: f47f af46 bne.w 100098e6 -10009a5a: 1d78 adds r0, r7, #5 -10009a5c: 7803 ldrb r3, [r0, #0] -10009a5e: 1c42 adds r2, r0, #1 -10009a60: 2b20 cmp r3, #32 -10009a62: f000 80ab beq.w 10009bbc -10009a66: 4603 mov r3, r0 -10009a68: 1a19 subs r1, r3, r0 -10009a6a: f813 2b01 ldrb.w r2, [r3], #1 -10009a6e: 2a2a cmp r2, #42 ; 0x2a -10009a70: d8fa bhi.n 10009a68 -10009a72: 234c movs r3, #76 ; 0x4c -10009a74: 9305 str r3, [sp, #20] -10009a76: 1f0b subs r3, r1, #4 -10009a78: 2b7c cmp r3, #124 ; 0x7c -10009a7a: f63f af34 bhi.w 100098e6 -10009a7e: ab05 add r3, sp, #20 -10009a80: aa06 add r2, sp, #24 -10009a82: f000 ff9f bl 1000a9c4 -10009a86: 2800 cmp r0, #0 -10009a88: f43f af2d beq.w 100098e6 -10009a8c: 9b05 ldr r3, [sp, #20] -10009a8e: aa32 add r2, sp, #200 ; 0xc8 -10009a90: 4413 add r3, r2 -10009a92: 2200 movs r2, #0 -10009a94: a906 add r1, sp, #24 -10009a96: 4858 ldr r0, [pc, #352] ; (10009bf8 ) -10009a98: f803 2cb0 strb.w r2, [r3, #-176] -10009a9c: f011 f860 bl 1001ab60 -10009aa0: 9905 ldr r1, [sp, #20] -10009aa2: a806 add r0, sp, #24 -10009aa4: f003 f890 bl 1000cbc8 -10009aa8: 2800 cmp r0, #0 -10009aaa: f43f af1c beq.w 100098e6 -10009aae: 682b ldr r3, [r5, #0] -10009ab0: f423 6380 bic.w r3, r3, #1024 ; 0x400 -10009ab4: 602b str r3, [r5, #0] -10009ab6: f8bd 306c ldrh.w r3, [sp, #108] ; 0x6c -10009aba: 2b0b cmp r3, #11 -10009abc: d915 bls.n 10009aea -10009abe: 494f ldr r1, [pc, #316] ; (10009bfc ) -10009ac0: 2302 movs r3, #2 -10009ac2: 2207 movs r2, #7 -10009ac4: 6809 ldr r1, [r1, #0] -10009ac6: a81a add r0, sp, #104 ; 0x68 -10009ac8: f7ff fb06 bl 100090d8 -10009acc: 4605 mov r5, r0 -10009ace: b160 cbz r0, 10009aea -10009ad0: f8bd 306c ldrh.w r3, [sp, #108] ; 0x6c -10009ad4: 9a2d ldr r2, [sp, #180] ; 0xb4 -10009ad6: 4942 ldr r1, [pc, #264] ; (10009be0 ) -10009ad8: 441a add r2, r3 -10009ada: 1a12 subs r2, r2, r0 -10009adc: f000 ff52 bl 1000a984 -10009ae0: b118 cbz r0, 10009aea -10009ae2: 1b40 subs r0, r0, r5 -10009ae4: 952e str r5, [sp, #184] ; 0xb8 -10009ae6: f8ad 006e strh.w r0, [sp, #110] ; 0x6e -10009aea: 6833 ldr r3, [r6, #0] -10009aec: 4944 ldr r1, [pc, #272] ; (10009c00 ) -10009aee: f413 7f80 tst.w r3, #256 ; 0x100 -10009af2: 4b44 ldr r3, [pc, #272] ; (10009c04 ) -10009af4: aa1c add r2, sp, #112 ; 0x70 -10009af6: bf18 it ne -10009af8: 4619 movne r1, r3 -10009afa: 4843 ldr r0, [pc, #268] ; (10009c08 ) -10009afc: f011 f830 bl 1001ab60 -10009b00: f8bd 3068 ldrh.w r3, [sp, #104] ; 0x68 -10009b04: 2bc8 cmp r3, #200 ; 0xc8 -10009b06: d126 bne.n 10009b56 -10009b08: f8bd 206e ldrh.w r2, [sp, #110] ; 0x6e -10009b0c: b132 cbz r2, 10009b1c -10009b0e: 233b movs r3, #59 ; 0x3b -10009b10: 992e ldr r1, [sp, #184] ; 0xb8 -10009b12: 9300 str r3, [sp, #0] -10009b14: 4620 mov r0, r4 -10009b16: 2300 movs r3, #0 -10009b18: f7ff fa96 bl 10009048 -10009b1c: 2526 movs r5, #38 ; 0x26 -10009b1e: 992c ldr r1, [sp, #176] ; 0xb0 -10009b20: f8bd 206a ldrh.w r2, [sp, #106] ; 0x6a -10009b24: 9500 str r5, [sp, #0] -10009b26: 233f movs r3, #63 ; 0x3f -10009b28: 4620 mov r0, r4 -10009b2a: f7ff fa8d bl 10009048 -10009b2e: 992f ldr r1, [sp, #188] ; 0xbc -10009b30: b189 cbz r1, 10009b56 -10009b32: 6833 ldr r3, [r6, #0] -10009b34: f413 5380 ands.w r3, r3, #4096 ; 0x1000 -10009b38: d045 beq.n 10009bc6 -10009b3a: 69f3 ldr r3, [r6, #28] -10009b3c: b15b cbz r3, 10009b56 -10009b3e: 9a30 ldr r2, [sp, #192] ; 0xc0 -10009b40: 4620 mov r0, r4 -10009b42: f7ff fd97 bl 10009674 -10009b46: b930 cbnz r0, 10009b56 -10009b48: 4830 ldr r0, [pc, #192] ; (10009c0c ) -10009b4a: f011 f809 bl 1001ab60 -10009b4e: f44f 73fa mov.w r3, #500 ; 0x1f4 -10009b52: f8ad 3068 strh.w r3, [sp, #104] ; 0x68 -10009b56: 6833 ldr r3, [r6, #0] -10009b58: f443 5300 orr.w r3, r3, #8192 ; 0x2000 -10009b5c: 6033 str r3, [r6, #0] -10009b5e: f8bd 3068 ldrh.w r3, [sp, #104] ; 0x68 -10009b62: 2bc8 cmp r3, #200 ; 0xc8 -10009b64: d16f bne.n 10009c46 -10009b66: 6833 ldr r3, [r6, #0] -10009b68: 04d9 lsls r1, r3, #19 -10009b6a: d56c bpl.n 10009c46 -10009b6c: 69f3 ldr r3, [r6, #28] -10009b6e: 2b00 cmp r3, #0 -10009b70: d069 beq.n 10009c46 -10009b72: 8823 ldrh r3, [r4, #0] -10009b74: f8d4 b034 ldr.w fp, [r4, #52] ; 0x34 -10009b78: f043 0308 orr.w r3, r3, #8 -10009b7c: 8023 strh r3, [r4, #0] -10009b7e: 8d63 ldrh r3, [r4, #42] ; 0x2a -10009b80: 2b00 cmp r3, #0 -10009b82: f43f af48 beq.w 10009a16 -10009b86: 4620 mov r0, r4 -10009b88: f7fe fe88 bl 1000889c -10009b8c: 69e5 ldr r5, [r4, #28] -10009b8e: 2d00 cmp r5, #0 -10009b90: d03e beq.n 10009c10 -10009b92: f8d4 8034 ldr.w r8, [r4, #52] ; 0x34 -10009b96: f8d8 301c ldr.w r3, [r8, #28] -10009b9a: b12b cbz r3, 10009ba8 -10009b9c: f8d4 a024 ldr.w sl, [r4, #36] ; 0x24 -10009ba0: f1ba 0f00 cmp.w sl, #0 -10009ba4: f040 8092 bne.w 10009ccc -10009ba8: 8d63 ldrh r3, [r4, #42] ; 0x2a -10009baa: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 -10009bae: f240 82a8 bls.w 1000a102 -10009bb2: f44f 73d1 mov.w r3, #418 ; 0x1a2 -10009bb6: f8ad 3068 strh.w r3, [sp, #104] ; 0x68 -10009bba: e03e b.n 10009c3a -10009bbc: 4610 mov r0, r2 -10009bbe: e74d b.n 10009a5c -10009bc0: f240 139d movw r3, #413 ; 0x19d -10009bc4: e5cb b.n 1000975e -10009bc6: 9a30 ldr r2, [sp, #192] ; 0xc0 -10009bc8: 2a00 cmp r2, #0 -10009bca: d0c4 beq.n 10009b56 -10009bcc: 9500 str r5, [sp, #0] -10009bce: 4620 mov r0, r4 -10009bd0: f7ff fa3a bl 10009048 -10009bd4: e7bf b.n 10009b56 -10009bd6: bf00 nop -10009bd8: 1003f502 .word 0x1003f502 -10009bdc: 10044cd0 .word 0x10044cd0 -10009be0: 1003f70e .word 0x1003f70e -10009be4: 10044cdc .word 0x10044cdc -10009be8: 10044cd8 .word 0x10044cd8 -10009bec: 1004135c .word 0x1004135c -10009bf0: 10044cc8 .word 0x10044cc8 -10009bf4: 1003f51a .word 0x1003f51a -10009bf8: 1003f54a .word 0x1003f54a -10009bfc: 10044cd4 .word 0x10044cd4 -10009c00: 1003f4ca .word 0x1003f4ca -10009c04: 1003f4c5 .word 0x1003f4c5 -10009c08: 1003f520 .word 0x1003f520 -10009c0c: 1003f52a .word 0x1003f52a -10009c10: f44f 77fa mov.w r7, #500 ; 0x1f4 -10009c14: 2300 movs r3, #0 -10009c16: 2fc8 cmp r7, #200 ; 0xc8 -10009c18: f8ad 7068 strh.w r7, [sp, #104] ; 0x68 -10009c1c: f8cb 301c str.w r3, [fp, #28] -10009c20: d10b bne.n 10009c3a -10009c22: f8db 3000 ldr.w r3, [fp] -10009c26: 041a lsls r2, r3, #16 -10009c28: f140 8250 bpl.w 1000a0cc -10009c2c: 69e1 ldr r1, [r4, #28] -10009c2e: b121 cbz r1, 10009c3a -10009c30: 2240 movs r2, #64 ; 0x40 -10009c32: 3185 adds r1, #133 ; 0x85 -10009c34: a81c add r0, sp, #112 ; 0x70 -10009c36: f010 ffbb bl 1001abb0 -10009c3a: f8db 3000 ldr.w r3, [fp] -10009c3e: f043 0302 orr.w r3, r3, #2 -10009c42: f8cb 3000 str.w r3, [fp] -10009c46: 8823 ldrh r3, [r4, #0] -10009c48: 4620 mov r0, r4 -10009c4a: f043 0310 orr.w r3, r3, #16 -10009c4e: 8023 strh r3, [r4, #0] -10009c50: 8823 ldrh r3, [r4, #0] -10009c52: f36f 03c3 bfc r3, #3, #1 -10009c56: 8023 strh r3, [r4, #0] -10009c58: f7ff fd2b bl 100096b2 -10009c5c: b110 cbz r0, 10009c64 -10009c5e: 4620 mov r0, r4 -10009c60: f7fe fe1c bl 1000889c -10009c64: 69a3 ldr r3, [r4, #24] -10009c66: f8b3 106a ldrh.w r1, [r3, #106] ; 0x6a -10009c6a: f5b1 7fc0 cmp.w r1, #384 ; 0x180 -10009c6e: f0c0 83b3 bcc.w 1000a3d8 -10009c72: f44f 70c0 mov.w r0, #384 ; 0x180 -10009c76: 6b65 ldr r5, [r4, #52] ; 0x34 -10009c78: f00b fa58 bl 1001512c -10009c7c: 6128 str r0, [r5, #16] -10009c7e: 2800 cmp r0, #0 -10009c80: f040 8253 bne.w 1000a12a -10009c84: 48af ldr r0, [pc, #700] ; (10009f44 ) -10009c86: f010 ff6b bl 1001ab60 -10009c8a: 682b ldr r3, [r5, #0] -10009c8c: f043 0306 orr.w r3, r3, #6 -10009c90: 602b str r3, [r5, #0] -10009c92: 6833 ldr r3, [r6, #0] -10009c94: f003 030f and.w r3, r3, #15 -10009c98: 2b08 cmp r3, #8 -10009c9a: d102 bne.n 10009ca2 -10009c9c: 4620 mov r0, r4 -10009c9e: f7ff fb43 bl 10009328 -10009ca2: 6833 ldr r3, [r6, #0] -10009ca4: 0758 lsls r0, r3, #29 -10009ca6: d509 bpl.n 10009cbc -10009ca8: 69a0 ldr r0, [r4, #24] -10009caa: f009 fca7 bl 100135fc -10009cae: 4620 mov r0, r4 -10009cb0: f7ff f90c bl 10008ecc -10009cb4: 6833 ldr r3, [r6, #0] -10009cb6: f043 0302 orr.w r3, r3, #2 -10009cba: 6033 str r3, [r6, #0] -10009cbc: 6833 ldr r3, [r6, #0] -10009cbe: 0799 lsls r1, r3, #30 -10009cc0: f57f aea9 bpl.w 10009a16 -10009cc4: 4620 mov r0, r4 -10009cc6: f7ff f98d bl 10008fe4 -10009cca: e6a7 b.n 10009a1c -10009ccc: f8b5 9002 ldrh.w r9, [r5, #2] -10009cd0: 8d67 ldrh r7, [r4, #42] ; 0x2a -10009cd2: f109 0208 add.w r2, r9, #8 -10009cd6: 4297 cmp r7, r2 -10009cd8: f4ff af66 bcc.w 10009ba8 -10009cdc: 882a ldrh r2, [r5, #0] -10009cde: 2a03 cmp r2, #3 -10009ce0: f63f af5b bhi.w 10009b9a -10009ce4: e8df f012 tbh [pc, r2, lsl #1] -10009ce8: 00820004 .word 0x00820004 -10009cec: 014a014a .word 0x014a014a -10009cf0: 463a mov r2, r7 -10009cf2: 4995 ldr r1, [pc, #596] ; (10009f48 ) -10009cf4: 4650 mov r0, sl -10009cf6: f000 fe45 bl 1000a984 -10009cfa: 4681 mov r9, r0 -10009cfc: 2800 cmp r0, #0 -10009cfe: f43f af53 beq.w 10009ba8 -10009d02: eba0 030a sub.w r3, r0, sl -10009d06: 461a mov r2, r3 -10009d08: 4651 mov r1, sl -10009d0a: 4628 mov r0, r5 -10009d0c: 9302 str r3, [sp, #8] -10009d0e: f7ff f92d bl 10008f6c -10009d12: 2801 cmp r0, #1 -10009d14: 4607 mov r7, r0 -10009d16: f040 81d5 bne.w 1000a0c4 -10009d1a: 2300 movs r3, #0 -10009d1c: f8d5 00d4 ldr.w r0, [r5, #212] ; 0xd4 -10009d20: f885 3045 strb.w r3, [r5, #69] ; 0x45 -10009d24: f885 3085 strb.w r3, [r5, #133] ; 0x85 -10009d28: eba9 0200 sub.w r2, r9, r0 -10009d2c: 4987 ldr r1, [pc, #540] ; (10009f4c ) -10009d2e: f000 fe29 bl 1000a984 -10009d32: b910 cbnz r0, 10009d3a -10009d34: f44f 77c8 mov.w r7, #400 ; 0x190 -10009d38: e76c b.n 10009c14 -10009d3a: 1d47 adds r7, r0, #5 -10009d3c: 45b9 cmp r9, r7 -10009d3e: d9f9 bls.n 10009d34 -10009d40: 2340 movs r3, #64 ; 0x40 -10009d42: 9300 str r3, [sp, #0] -10009d44: 2322 movs r3, #34 ; 0x22 -10009d46: f105 0a45 add.w sl, r5, #69 ; 0x45 -10009d4a: 461a mov r2, r3 -10009d4c: 4639 mov r1, r7 -10009d4e: 4650 mov r0, sl -10009d50: f000 fca4 bl 1000a69c -10009d54: b948 cbnz r0, 10009d6a -10009d56: 2340 movs r3, #64 ; 0x40 -10009d58: 9300 str r3, [sp, #0] -10009d5a: 2322 movs r3, #34 ; 0x22 -10009d5c: 4639 mov r1, r7 -10009d5e: 461a mov r2, r3 -10009d60: 4650 mov r0, sl -10009d62: f000 fc9b bl 1000a69c -10009d66: 2800 cmp r0, #0 -10009d68: d0e4 beq.n 10009d34 -10009d6a: 4581 cmp r9, r0 -10009d6c: d9e2 bls.n 10009d34 -10009d6e: eba9 0200 sub.w r2, r9, r0 -10009d72: 4977 ldr r1, [pc, #476] ; (10009f50 ) -10009d74: f000 fe06 bl 1000a984 -10009d78: b300 cbz r0, 10009dbc -10009d7a: f100 0709 add.w r7, r0, #9 -10009d7e: 45b9 cmp r9, r7 -10009d80: d914 bls.n 10009dac -10009d82: f04f 0a40 mov.w sl, #64 ; 0x40 -10009d86: 2322 movs r3, #34 ; 0x22 -10009d88: f105 0985 add.w r9, r5, #133 ; 0x85 -10009d8c: f8cd a000 str.w sl, [sp] -10009d90: 461a mov r2, r3 -10009d92: 4639 mov r1, r7 -10009d94: 4648 mov r0, r9 -10009d96: f000 fc81 bl 1000a69c -10009d9a: b938 cbnz r0, 10009dac -10009d9c: 2322 movs r3, #34 ; 0x22 -10009d9e: f8cd a000 str.w sl, [sp] -10009da2: 461a mov r2, r3 -10009da4: 4639 mov r1, r7 -10009da6: 4648 mov r0, r9 -10009da8: f000 fc78 bl 1000a69c -10009dac: f895 3085 ldrb.w r3, [r5, #133] ; 0x85 -10009db0: b123 cbz r3, 10009dbc -10009db2: f105 0185 add.w r1, r5, #133 ; 0x85 -10009db6: 4867 ldr r0, [pc, #412] ; (10009f54 ) -10009db8: f010 fed2 bl 1001ab60 -10009dbc: 882b ldrh r3, [r5, #0] -10009dbe: 9f02 ldr r7, [sp, #8] -10009dc0: 3301 adds r3, #1 -10009dc2: 802b strh r3, [r5, #0] -10009dc4: 8de3 ldrh r3, [r4, #46] ; 0x2e -10009dc6: 3704 adds r7, #4 -10009dc8: 8d62 ldrh r2, [r4, #42] ; 0x2a -10009dca: 6a61 ldr r1, [r4, #36] ; 0x24 -10009dcc: 443b add r3, r7 -10009dce: 85e3 strh r3, [r4, #46] ; 0x2e -10009dd0: 1bd2 subs r2, r2, r7 -10009dd2: 4439 add r1, r7 -10009dd4: 4620 mov r0, r4 -10009dd6: f7ff fc4d bl 10009674 -10009dda: 2800 cmp r0, #0 -10009ddc: f43f af18 beq.w 10009c10 -10009de0: f8d8 301c ldr.w r3, [r8, #28] -10009de4: 1bdf subs r7, r3, r7 -10009de6: f8c8 701c str.w r7, [r8, #28] -10009dea: e6d4 b.n 10009b96 -10009dec: f895 3085 ldrb.w r3, [r5, #133] ; 0x85 -10009df0: 2b00 cmp r3, #0 -10009df2: d07a beq.n 10009eea -10009df4: f105 0945 add.w r9, r5, #69 ; 0x45 -10009df8: 4957 ldr r1, [pc, #348] ; (10009f58 ) -10009dfa: 4648 mov r0, r9 -10009dfc: f000 fb9b bl 1000a536 -10009e00: 2800 cmp r0, #0 -10009e02: d044 beq.n 10009e8e -10009e04: 2f0b cmp r7, #11 -10009e06: f67f aecf bls.w 10009ba8 -10009e0a: f8da 3000 ldr.w r3, [sl] -10009e0e: 4a53 ldr r2, [pc, #332] ; (10009f5c ) -10009e10: 4293 cmp r3, r2 -10009e12: d10c bne.n 10009e2e -10009e14: f8ba 7004 ldrh.w r7, [sl, #4] -10009e18: 2f01 cmp r7, #1 -10009e1a: d108 bne.n 10009e2e -10009e1c: f8d8 301c ldr.w r3, [r8, #28] -10009e20: 886a ldrh r2, [r5, #2] -10009e22: f8da 9008 ldr.w r9, [sl, #8] -10009e26: 3b08 subs r3, #8 -10009e28: 1a9b subs r3, r3, r2 -10009e2a: 454b cmp r3, r9 -10009e2c: d20c bcs.n 10009e48 -10009e2e: 4b4c ldr r3, [pc, #304] ; (10009f60 ) -10009e30: 781b ldrb r3, [r3, #0] -10009e32: 2b00 cmp r3, #0 -10009e34: f47f af7e bne.w 10009d34 -10009e38: f8d8 3000 ldr.w r3, [r8] -10009e3c: 4949 ldr r1, [pc, #292] ; (10009f64 ) -10009e3e: f443 4300 orr.w r3, r3, #32768 ; 0x8000 -10009e42: f8c8 3000 str.w r3, [r8] -10009e46: e00f b.n 10009e68 -10009e48: f7fe fff2 bl 10008e30 -10009e4c: 4581 cmp r9, r0 -10009e4e: d911 bls.n 10009e74 -10009e50: 4b43 ldr r3, [pc, #268] ; (10009f60 ) -10009e52: 781b ldrb r3, [r3, #0] -10009e54: 2b00 cmp r3, #0 -10009e56: f47f af6d bne.w 10009d34 -10009e5a: f8d8 3000 ldr.w r3, [r8] -10009e5e: 4942 ldr r1, [pc, #264] ; (10009f68 ) -10009e60: f443 4300 orr.w r3, r3, #32768 ; 0x8000 -10009e64: f8c8 3000 str.w r3, [r8] -10009e68: f105 0085 add.w r0, r5, #133 ; 0x85 -10009e6c: f000 fb58 bl 1000a520 -10009e70: 27c8 movs r7, #200 ; 0xc8 -10009e72: e6cf b.n 10009c14 -10009e74: f8da 3008 ldr.w r3, [sl, #8] -10009e78: f8c5 30c8 str.w r3, [r5, #200] ; 0xc8 -10009e7c: f7ff f800 bl 10008e80 -10009e80: 2303 movs r3, #3 -10009e82: 802b strh r3, [r5, #0] -10009e84: 4b36 ldr r3, [pc, #216] ; (10009f60 ) -10009e86: f8c5 00cc str.w r0, [r5, #204] ; 0xcc -10009e8a: 701f strb r7, [r3, #0] -10009e8c: e683 b.n 10009b96 -10009e8e: 4937 ldr r1, [pc, #220] ; (10009f6c ) -10009e90: 4648 mov r0, r9 -10009e92: f000 fb50 bl 1000a536 -10009e96: b150 cbz r0, 10009eae -10009e98: f44f 5380 mov.w r3, #4096 ; 0x1000 -10009e9c: f8c5 30c8 str.w r3, [r5, #200] ; 0xc8 -10009ea0: f44f 4300 mov.w r3, #32768 ; 0x8000 -10009ea4: f8c5 30cc str.w r3, [r5, #204] ; 0xcc -10009ea8: 2302 movs r3, #2 -10009eaa: 802b strh r3, [r5, #0] -10009eac: e673 b.n 10009b96 -10009eae: 4930 ldr r1, [pc, #192] ; (10009f70 ) -10009eb0: 4648 mov r0, r9 -10009eb2: f000 fb40 bl 1000a536 -10009eb6: b158 cbz r0, 10009ed0 -10009eb8: f44f 5380 mov.w r3, #4096 ; 0x1000 -10009ebc: f105 004a add.w r0, r5, #74 ; 0x4a -10009ec0: f8c5 30c8 str.w r3, [r5, #200] ; 0xc8 -10009ec4: f000 fbdd bl 1000a682 -10009ec8: 0300 lsls r0, r0, #12 -10009eca: f8c5 00cc str.w r0, [r5, #204] ; 0xcc -10009ece: e7eb b.n 10009ea8 -10009ed0: 4b23 ldr r3, [pc, #140] ; (10009f60 ) -10009ed2: 781b ldrb r3, [r3, #0] -10009ed4: 2b00 cmp r3, #0 -10009ed6: f47f af2d bne.w 10009d34 -10009eda: f8d8 3000 ldr.w r3, [r8] -10009ede: 4925 ldr r1, [pc, #148] ; (10009f74 ) -10009ee0: f443 4300 orr.w r3, r3, #32768 ; 0x8000 -10009ee4: f8c8 3000 str.w r3, [r8] -10009ee8: e7be b.n 10009e68 -10009eea: 463a mov r2, r7 -10009eec: 4922 ldr r1, [pc, #136] ; (10009f78 ) -10009eee: 4650 mov r0, sl -10009ef0: f000 fd48 bl 1000a984 -10009ef4: 4681 mov r9, r0 -10009ef6: 2800 cmp r0, #0 -10009ef8: f43f ae56 beq.w 10009ba8 -10009efc: 463a mov r2, r7 -10009efe: 4651 mov r1, sl -10009f00: 4628 mov r0, r5 -10009f02: f7ff f833 bl 10008f6c -10009f06: 2801 cmp r0, #1 -10009f08: 4607 mov r7, r0 -10009f0a: d002 beq.n 10009f12 -10009f0c: 28c8 cmp r0, #200 ; 0xc8 -10009f0e: f040 80d9 bne.w 1000a0c4 -10009f12: 2300 movs r3, #0 -10009f14: 4652 mov r2, sl -10009f16: f889 3000 strb.w r3, [r9] -10009f1a: f105 0145 add.w r1, r5, #69 ; 0x45 -10009f1e: 4620 mov r0, r4 -10009f20: 9302 str r3, [sp, #8] -10009f22: f002 f90b bl 1000c13c -10009f26: 2fc8 cmp r7, #200 ; 0xc8 -10009f28: f43f ae74 beq.w 10009c14 -10009f2c: 9b02 ldr r3, [sp, #8] -10009f2e: f8d5 10d0 ldr.w r1, [r5, #208] ; 0xd0 -10009f32: 6a67 ldr r7, [r4, #36] ; 0x24 -10009f34: 802b strh r3, [r5, #0] -10009f36: 8de3 ldrh r3, [r4, #46] ; 0x2e -10009f38: 1bcf subs r7, r1, r7 -10009f3a: 8d62 ldrh r2, [r4, #42] ; 0x2a -10009f3c: 443b add r3, r7 -10009f3e: 85e3 strh r3, [r4, #46] ; 0x2e -10009f40: 1bd2 subs r2, r2, r7 -10009f42: e747 b.n 10009dd4 -10009f44: 1003f550 .word 0x1003f550 -10009f48: 1003f70c .word 0x1003f70c -10009f4c: 1003f53b .word 0x1003f53b -10009f50: 1003f537 .word 0x1003f537 -10009f54: 1003f541 .word 0x1003f541 -10009f58: 1003f26f .word 0x1003f26f -10009f5c: 42455746 .word 0x42455746 -10009f60: 1004a760 .word 0x1004a760 -10009f64: 1003f238 .word 0x1003f238 -10009f68: 1003f246 .word 0x1003f246 -10009f6c: 1003f475 .word 0x1003f475 -10009f70: 1003f313 .word 0x1003f313 -10009f74: 1003f254 .word 0x1003f254 -10009f78: 1003f70e .word 0x1003f70e -10009f7c: f609 0908 addw r9, r9, #2056 ; 0x808 -10009f80: 454b cmp r3, r9 -10009f82: bf28 it cs -10009f84: 464b movcs r3, r9 -10009f86: 429f cmp r7, r3 -10009f88: f4ff ae0e bcc.w 10009ba8 -10009f8c: 461a mov r2, r3 -10009f8e: 4651 mov r1, sl -10009f90: 4628 mov r0, r5 -10009f92: 9302 str r3, [sp, #8] -10009f94: f7fe ffea bl 10008f6c -10009f98: 2801 cmp r0, #1 -10009f9a: 4607 mov r7, r0 -10009f9c: 9b02 ldr r3, [sp, #8] -10009f9e: d001 beq.n 10009fa4 -10009fa0: 28c8 cmp r0, #200 ; 0xc8 -10009fa2: d176 bne.n 1000a092 -10009fa4: f8d5 20d0 ldr.w r2, [r5, #208] ; 0xd0 -10009fa8: f1a2 0902 sub.w r9, r2, #2 -10009fac: 6a62 ldr r2, [r4, #36] ; 0x24 -10009fae: eba9 0902 sub.w r9, r9, r2 -10009fb2: 4599 cmp r9, r3 -10009fb4: bf28 it cs -10009fb6: 4699 movcs r9, r3 -10009fb8: f8d5 30c8 ldr.w r3, [r5, #200] ; 0xc8 -10009fbc: 454b cmp r3, r9 -10009fbe: bf28 it cs -10009fc0: 464b movcs r3, r9 -10009fc2: 9302 str r3, [sp, #8] -10009fc4: b36b cbz r3, 1000a022 -10009fc6: 2001 movs r0, #1 -10009fc8: f00c fe4c bl 10016c64 -10009fcc: f8d5 30cc ldr.w r3, [r5, #204] ; 0xcc -10009fd0: 48ab ldr r0, [pc, #684] ; (1000a280 ) -10009fd2: 9303 str r3, [sp, #12] -10009fd4: f00d ff14 bl 10017e00 -10009fd8: 9b03 ldr r3, [sp, #12] -10009fda: f8d5 10cc ldr.w r1, [r5, #204] ; 0xcc -10009fde: 4283 cmp r3, r0 -10009fe0: d364 bcc.n 1000a0ac -10009fe2: 882b ldrh r3, [r5, #0] -10009fe4: 2b03 cmp r3, #3 -10009fe6: d161 bne.n 1000a0ac -10009fe8: b28b uxth r3, r1 -10009fea: b913 cbnz r3, 10009ff2 -10009fec: 48a4 ldr r0, [pc, #656] ; (1000a280 ) -10009fee: f00d fdc3 bl 10017b78 -10009ff2: 9b02 ldr r3, [sp, #8] -10009ff4: f8d5 10cc ldr.w r1, [r5, #204] ; 0xcc -10009ff8: 1cda adds r2, r3, #3 -10009ffa: f022 0203 bic.w r2, r2, #3 -10009ffe: 4653 mov r3, sl -1000a000: 489f ldr r0, [pc, #636] ; (1000a280 ) -1000a002: f00d fe55 bl 10017cb0 -1000a006: 2001 movs r0, #1 -1000a008: f00c fe46 bl 10016c98 -1000a00c: f8d5 30c8 ldr.w r3, [r5, #200] ; 0xc8 -1000a010: 9a02 ldr r2, [sp, #8] -1000a012: 1a9b subs r3, r3, r2 -1000a014: f8c5 30c8 str.w r3, [r5, #200] ; 0xc8 -1000a018: f8d5 30cc ldr.w r3, [r5, #204] ; 0xcc -1000a01c: 4413 add r3, r2 -1000a01e: f8c5 30cc str.w r3, [r5, #204] ; 0xcc -1000a022: f1b9 0f00 cmp.w r9, #0 -1000a026: d013 beq.n 1000a050 -1000a028: 8de3 ldrh r3, [r4, #46] ; 0x2e -1000a02a: 8d62 ldrh r2, [r4, #42] ; 0x2a -1000a02c: 6a61 ldr r1, [r4, #36] ; 0x24 -1000a02e: 444b add r3, r9 -1000a030: 85e3 strh r3, [r4, #46] ; 0x2e -1000a032: eba2 0209 sub.w r2, r2, r9 -1000a036: 4449 add r1, r9 -1000a038: 4620 mov r0, r4 -1000a03a: f7ff fb1b bl 10009674 -1000a03e: 2800 cmp r0, #0 -1000a040: f43f ade6 beq.w 10009c10 -1000a044: f8d8 301c ldr.w r3, [r8, #28] -1000a048: eba3 0309 sub.w r3, r3, r9 -1000a04c: f8c8 301c str.w r3, [r8, #28] -1000a050: 2f01 cmp r7, #1 -1000a052: d002 beq.n 1000a05a -1000a054: 2fc8 cmp r7, #200 ; 0xc8 -1000a056: f47f ad9e bne.w 10009b96 -1000a05a: 882b ldrh r3, [r5, #0] -1000a05c: 2b03 cmp r3, #3 -1000a05e: d101 bne.n 1000a064 -1000a060: f7fe fdc2 bl 10008be8 -1000a064: f8d5 30c8 ldr.w r3, [r5, #200] ; 0xc8 -1000a068: 2b00 cmp r3, #0 -1000a06a: f47f aee0 bne.w 10009e2e -1000a06e: 4b85 ldr r3, [pc, #532] ; (1000a284 ) -1000a070: 781b ldrb r3, [r3, #0] -1000a072: b953 cbnz r3, 1000a08a -1000a074: f8d8 3000 ldr.w r3, [r8] -1000a078: 4983 ldr r1, [pc, #524] ; (1000a288 ) -1000a07a: f443 4300 orr.w r3, r3, #32768 ; 0x8000 -1000a07e: f8c8 3000 str.w r3, [r8] -1000a082: f105 0085 add.w r0, r5, #133 ; 0x85 -1000a086: f000 fa4b bl 1000a520 -1000a08a: 2f01 cmp r7, #1 -1000a08c: d116 bne.n 1000a0bc -1000a08e: 2300 movs r3, #0 -1000a090: e70b b.n 10009eaa -1000a092: f8d8 301c ldr.w r3, [r8, #28] -1000a096: f8b5 9002 ldrh.w r9, [r5, #2] -1000a09a: 3b08 subs r3, #8 -1000a09c: eba3 0909 sub.w r9, r3, r9 -1000a0a0: f5b9 6f00 cmp.w r9, #2048 ; 0x800 -1000a0a4: bf28 it cs -1000a0a6: f44f 6900 movcs.w r9, #2048 ; 0x800 -1000a0aa: e785 b.n 10009fb8 -1000a0ac: f3c1 030b ubfx r3, r1, #0, #12 -1000a0b0: 2b00 cmp r3, #0 -1000a0b2: d19e bne.n 10009ff2 -1000a0b4: 4872 ldr r0, [pc, #456] ; (1000a280 ) -1000a0b6: f00d fd49 bl 10017b4c -1000a0ba: e79a b.n 10009ff2 -1000a0bc: 2fc8 cmp r7, #200 ; 0xc8 -1000a0be: f47f ad6a bne.w 10009b96 -1000a0c2: e5a7 b.n 10009c14 -1000a0c4: 2f01 cmp r7, #1 -1000a0c6: f73f ada5 bgt.w 10009c14 -1000a0ca: e56d b.n 10009ba8 -1000a0cc: 4a6d ldr r2, [pc, #436] ; (1000a284 ) -1000a0ce: 7812 ldrb r2, [r2, #0] -1000a0d0: 2a00 cmp r2, #0 -1000a0d2: f47f adb2 bne.w 10009c3a -1000a0d6: 071b lsls r3, r3, #28 -1000a0d8: f57f adaf bpl.w 10009c3a -1000a0dc: f89b 0004 ldrb.w r0, [fp, #4] -1000a0e0: 28fb cmp r0, #251 ; 0xfb -1000a0e2: f63f adaa bhi.w 10009c3a -1000a0e6: 2240 movs r2, #64 ; 0x40 -1000a0e8: a91c add r1, sp, #112 ; 0x70 -1000a0ea: f7fe fe7f bl 10008dec -1000a0ee: 2800 cmp r0, #0 -1000a0f0: f43f ada3 beq.w 10009c3a -1000a0f4: f8db 3000 ldr.w r3, [fp] -1000a0f8: f443 4300 orr.w r3, r3, #32768 ; 0x8000 -1000a0fc: f8cb 3000 str.w r3, [fp] -1000a100: e59b b.n 10009c3a -1000a102: 8de3 ldrh r3, [r4, #46] ; 0x2e -1000a104: f8db 201c ldr.w r2, [fp, #28] -1000a108: 429a cmp r2, r3 -1000a10a: f63f ac84 bhi.w 10009a16 -1000a10e: f44f 73c8 mov.w r3, #400 ; 0x190 -1000a112: f8ad 3068 strh.w r3, [sp, #104] ; 0x68 -1000a116: f8db 3000 ldr.w r3, [fp] -1000a11a: f043 0302 orr.w r3, r3, #2 -1000a11e: f8cb 3000 str.w r3, [fp] -1000a122: 2300 movs r3, #0 -1000a124: f8cb 301c str.w r3, [fp, #28] -1000a128: e58d b.n 10009c46 -1000a12a: f44f 73c0 mov.w r3, #384 ; 0x180 -1000a12e: 82eb strh r3, [r5, #22] -1000a130: 2300 movs r3, #0 -1000a132: 82ab strh r3, [r5, #20] -1000a134: 682b ldr r3, [r5, #0] -1000a136: 041f lsls r7, r3, #16 -1000a138: bf44 itt mi -1000a13a: f44f 7397 movmi.w r3, #302 ; 0x12e -1000a13e: f8ad 3068 strhmi.w r3, [sp, #104] ; 0x68 -1000a142: f8bd 2068 ldrh.w r2, [sp, #104] ; 0x68 -1000a146: 4f51 ldr r7, [pc, #324] ; (1000a28c ) -1000a148: 687b ldr r3, [r7, #4] -1000a14a: 0419 lsls r1, r3, #16 -1000a14c: d54e bpl.n 1000a1ec -1000a14e: 683a ldr r2, [r7, #0] -1000a150: 494f ldr r1, [pc, #316] ; (1000a290 ) -1000a152: f010 fcdf bl 1001ab14 -1000a156: 8aab ldrh r3, [r5, #20] -1000a158: 683a ldr r2, [r7, #0] -1000a15a: 4418 add r0, r3 -1000a15c: f240 1391 movw r3, #401 ; 0x191 -1000a160: 429a cmp r2, r3 -1000a162: 692b ldr r3, [r5, #16] -1000a164: b280 uxth r0, r0 -1000a166: 82a8 strh r0, [r5, #20] -1000a168: 68b9 ldr r1, [r7, #8] -1000a16a: 4418 add r0, r3 -1000a16c: d143 bne.n 1000a1f6 -1000a16e: f010 fcd1 bl 1001ab14 -1000a172: 8aab ldrh r3, [r5, #20] -1000a174: 4947 ldr r1, [pc, #284] ; (1000a294 ) -1000a176: 4418 add r0, r3 -1000a178: 82a8 strh r0, [r5, #20] -1000a17a: 8aab ldrh r3, [r5, #20] -1000a17c: 6928 ldr r0, [r5, #16] -1000a17e: 4418 add r0, r3 -1000a180: f000 f9ce bl 1000a520 -1000a184: 8aab ldrh r3, [r5, #20] -1000a186: 4418 add r0, r3 -1000a188: 682b ldr r3, [r5, #0] -1000a18a: b280 uxth r0, r0 -1000a18c: 041b lsls r3, r3, #16 -1000a18e: 82a8 strh r0, [r5, #20] -1000a190: d534 bpl.n 1000a1fc -1000a192: 692b ldr r3, [r5, #16] -1000a194: aa1c add r2, sp, #112 ; 0x70 -1000a196: 4418 add r0, r3 -1000a198: 493f ldr r1, [pc, #252] ; (1000a298 ) -1000a19a: f010 fcbb bl 1001ab14 -1000a19e: 8aab ldrh r3, [r5, #20] -1000a1a0: 4418 add r0, r3 -1000a1a2: 82a8 strh r0, [r5, #20] -1000a1a4: 8823 ldrh r3, [r4, #0] -1000a1a6: f043 0302 orr.w r3, r3, #2 -1000a1aa: 8023 strh r3, [r4, #0] -1000a1ac: 682b ldr r3, [r5, #0] -1000a1ae: f043 0302 orr.w r3, r3, #2 -1000a1b2: 602b str r3, [r5, #0] -1000a1b4: f8bd 2068 ldrh.w r2, [sp, #104] ; 0x68 -1000a1b8: 8aa9 ldrh r1, [r5, #20] -1000a1ba: 4838 ldr r0, [pc, #224] ; (1000a29c ) -1000a1bc: f010 fcd0 bl 1001ab60 -1000a1c0: 8aaa ldrh r2, [r5, #20] -1000a1c2: b16a cbz r2, 1000a1e0 -1000a1c4: 682b ldr r3, [r5, #0] -1000a1c6: 6929 ldr r1, [r5, #16] -1000a1c8: 079f lsls r7, r3, #30 -1000a1ca: bf44 itt mi -1000a1cc: f043 0301 orrmi.w r3, r3, #1 -1000a1d0: 602b strmi r3, [r5, #0] -1000a1d2: 4620 mov r0, r4 -1000a1d4: f7fe fafa bl 100087cc -1000a1d8: 8823 ldrh r3, [r4, #0] -1000a1da: f043 0304 orr.w r3, r3, #4 -1000a1de: 8023 strh r3, [r4, #0] -1000a1e0: 6928 ldr r0, [r5, #16] -1000a1e2: f00b f83f bl 10015264 -1000a1e6: 2300 movs r3, #0 -1000a1e8: 612b str r3, [r5, #16] -1000a1ea: e552 b.n 10009c92 -1000a1ec: 683b ldr r3, [r7, #0] -1000a1ee: 4293 cmp r3, r2 -1000a1f0: d0ad beq.n 1000a14e -1000a1f2: 3710 adds r7, #16 -1000a1f4: e7a8 b.n 1000a148 -1000a1f6: f000 f993 bl 1000a520 -1000a1fa: e7ba b.n 1000a172 -1000a1fc: 683b ldr r3, [r7, #0] -1000a1fe: 2bc8 cmp r3, #200 ; 0xc8 -1000a200: d014 beq.n 1000a22c -1000a202: 4628 mov r0, r5 -1000a204: f7ff f86a bl 100092dc -1000a208: 682b ldr r3, [r5, #0] -1000a20a: f423 5383 bic.w r3, r3, #4192 ; 0x1060 -1000a20e: f023 0314 bic.w r3, r3, #20 -1000a212: 602b str r3, [r5, #0] -1000a214: 687b ldr r3, [r7, #4] -1000a216: 07d8 lsls r0, r3, #31 -1000a218: d508 bpl.n 1000a22c -1000a21a: 4921 ldr r1, [pc, #132] ; (1000a2a0 ) -1000a21c: 683a ldr r2, [r7, #0] -1000a21e: a81c add r0, sp, #112 ; 0x70 -1000a220: f010 fc78 bl 1001ab14 -1000a224: 4621 mov r1, r4 -1000a226: a81a add r0, sp, #104 ; 0x68 -1000a228: f7fe ffc2 bl 100091b0 -1000a22c: 682a ldr r2, [r5, #0] -1000a22e: f8b5 8014 ldrh.w r8, [r5, #20] -1000a232: f012 0f08 tst.w r2, #8 -1000a236: d13d bne.n 1000a2b4 -1000a238: 68f8 ldr r0, [r7, #12] -1000a23a: 2800 cmp r0, #0 -1000a23c: f000 80c8 beq.w 1000a3d0 -1000a240: 692a ldr r2, [r5, #16] -1000a242: 4b18 ldr r3, [pc, #96] ; (1000a2a4 ) -1000a244: 4490 add r8, r2 -1000a246: f8d3 9000 ldr.w r9, [r3] -1000a24a: f010 fcc5 bl 1001abd8 -1000a24e: 4b16 ldr r3, [pc, #88] ; (1000a2a8 ) -1000a250: 464a mov r2, r9 -1000a252: 9301 str r3, [sp, #4] -1000a254: 4b15 ldr r3, [pc, #84] ; (1000a2ac ) -1000a256: 4916 ldr r1, [pc, #88] ; (1000a2b0 ) -1000a258: 681b ldr r3, [r3, #0] -1000a25a: 9300 str r3, [sp, #0] -1000a25c: 4603 mov r3, r0 -1000a25e: 4640 mov r0, r8 -1000a260: f010 fc58 bl 1001ab14 -1000a264: 8aab ldrh r3, [r5, #20] -1000a266: 68f9 ldr r1, [r7, #12] -1000a268: 4418 add r0, r3 -1000a26a: 692b ldr r3, [r5, #16] -1000a26c: b280 uxth r0, r0 -1000a26e: 82a8 strh r0, [r5, #20] -1000a270: 4418 add r0, r3 -1000a272: f000 f955 bl 1000a520 -1000a276: 8aab ldrh r3, [r5, #20] -1000a278: 4418 add r0, r3 -1000a27a: 82a8 strh r0, [r5, #20] -1000a27c: e796 b.n 1000a1ac -1000a27e: bf00 nop -1000a280: 1004b4ec .word 0x1004b4ec -1000a284: 1004a760 .word 0x1004a760 -1000a288: 1003f262 .word 0x1003f262 -1000a28c: 1003edac .word 0x1003edac -1000a290: 1003f560 .word 0x1003f560 -1000a294: 1003f56d .word 0x1003f56d -1000a298: 1003f594 .word 0x1003f594 -1000a29c: 1003f6a1 .word 0x1003f6a1 -1000a2a0: 1003f5a5 .word 0x1003f5a5 -1000a2a4: 10044ccc .word 0x10044ccc -1000a2a8: 1003f5be .word 0x1003f5be -1000a2ac: 10044cd0 .word 0x10044cd0 -1000a2b0: 1003f5ad .word 0x1003f5ad -1000a2b4: 69ea ldr r2, [r5, #28] -1000a2b6: 6928 ldr r0, [r5, #16] -1000a2b8: 2a00 cmp r2, #0 -1000a2ba: d07c beq.n 1000a3b6 -1000a2bc: 494e ldr r1, [pc, #312] ; (1000a3f8 ) -1000a2be: 4440 add r0, r8 -1000a2c0: f000 f92e bl 1000a520 -1000a2c4: 8aab ldrh r3, [r5, #20] -1000a2c6: 4418 add r0, r3 -1000a2c8: b280 uxth r0, r0 -1000a2ca: 82a8 strh r0, [r5, #20] -1000a2cc: f89d 30c5 ldrb.w r3, [sp, #197] ; 0xc5 -1000a2d0: 2b10 cmp r3, #16 -1000a2d2: d016 beq.n 1000a302 -1000a2d4: 792b ldrb r3, [r5, #4] -1000a2d6: 2bfd cmp r3, #253 ; 0xfd -1000a2d8: d106 bne.n 1000a2e8 -1000a2da: 682b ldr r3, [r5, #0] -1000a2dc: 06d9 lsls r1, r3, #27 -1000a2de: bf44 itt mi -1000a2e0: f895 3020 ldrbmi.w r3, [r5, #32] -1000a2e4: f88d 30c5 strbmi.w r3, [sp, #197] ; 0xc5 -1000a2e8: f89d 10c5 ldrb.w r1, [sp, #197] ; 0xc5 -1000a2ec: 692b ldr r3, [r5, #16] -1000a2ee: 4a43 ldr r2, [pc, #268] ; (1000a3fc ) -1000a2f0: 4418 add r0, r3 -1000a2f2: f852 2021 ldr.w r2, [r2, r1, lsl #2] -1000a2f6: 4942 ldr r1, [pc, #264] ; (1000a400 ) -1000a2f8: f010 fc0c bl 1001ab14 -1000a2fc: 8aab ldrh r3, [r5, #20] -1000a2fe: 4418 add r0, r3 -1000a300: 82a8 strh r0, [r5, #20] -1000a302: 682b ldr r3, [r5, #0] -1000a304: f8d5 e010 ldr.w lr, [r5, #16] -1000a308: f013 0f10 tst.w r3, #16 -1000a30c: 8aa8 ldrh r0, [r5, #20] -1000a30e: d029 beq.n 1000a364 -1000a310: 493c ldr r1, [pc, #240] ; (1000a404 ) -1000a312: 4470 add r0, lr -1000a314: f000 f904 bl 1000a520 -1000a318: 8aab ldrh r3, [r5, #20] -1000a31a: 4418 add r0, r3 -1000a31c: 82a8 strh r0, [r5, #20] -1000a31e: f89d 30c4 ldrb.w r3, [sp, #196] ; 0xc4 -1000a322: 2b10 cmp r3, #16 -1000a324: d903 bls.n 1000a32e -1000a326: 682b ldr r3, [r5, #0] -1000a328: f043 0340 orr.w r3, r3, #64 ; 0x40 -1000a32c: 602b str r3, [r5, #0] -1000a32e: 682a ldr r2, [r5, #0] -1000a330: 8aab ldrh r3, [r5, #20] -1000a332: f012 0f20 tst.w r2, #32 -1000a336: d039 beq.n 1000a3ac -1000a338: 6928 ldr r0, [r5, #16] -1000a33a: 4933 ldr r1, [pc, #204] ; (1000a408 ) -1000a33c: 4418 add r0, r3 -1000a33e: f000 f8ef bl 1000a520 -1000a342: 8aab ldrh r3, [r5, #20] -1000a344: 4418 add r0, r3 -1000a346: 82a8 strh r0, [r5, #20] -1000a348: 682b ldr r3, [r5, #0] -1000a34a: 065b lsls r3, r3, #25 -1000a34c: f53f af32 bmi.w 1000a1b4 -1000a350: 8aab ldrh r3, [r5, #20] -1000a352: 6928 ldr r0, [r5, #16] -1000a354: 492d ldr r1, [pc, #180] ; (1000a40c ) -1000a356: 4418 add r0, r3 -1000a358: f000 f8e2 bl 1000a520 -1000a35c: 8aab ldrh r3, [r5, #20] -1000a35e: 4418 add r0, r3 -1000a360: 82a8 strh r0, [r5, #20] -1000a362: e727 b.n 1000a1b4 -1000a364: 4a2a ldr r2, [pc, #168] ; (1000a410 ) -1000a366: 69eb ldr r3, [r5, #28] -1000a368: 6812 ldr r2, [r2, #0] -1000a36a: 492a ldr r1, [pc, #168] ; (1000a414 ) -1000a36c: 4470 add r0, lr -1000a36e: f010 fbd1 bl 1001ab14 -1000a372: 8aab ldrh r3, [r5, #20] -1000a374: 4418 add r0, r3 -1000a376: 683b ldr r3, [r7, #0] -1000a378: b280 uxth r0, r0 -1000a37a: 2bc8 cmp r3, #200 ; 0xc8 -1000a37c: 82a8 strh r0, [r5, #20] -1000a37e: 692b ldr r3, [r5, #16] -1000a380: d10f bne.n 1000a3a2 -1000a382: 4a25 ldr r2, [pc, #148] ; (1000a418 ) -1000a384: 7812 ldrb r2, [r2, #0] -1000a386: b962 cbnz r2, 1000a3a2 -1000a388: 792a ldrb r2, [r5, #4] -1000a38a: 2afd cmp r2, #253 ; 0xfd -1000a38c: d009 beq.n 1000a3a2 -1000a38e: f44f 6261 mov.w r2, #3600 ; 0xe10 -1000a392: 4922 ldr r1, [pc, #136] ; (1000a41c ) -1000a394: 4418 add r0, r3 -1000a396: f010 fbbd bl 1001ab14 -1000a39a: 8aab ldrh r3, [r5, #20] -1000a39c: 4418 add r0, r3 -1000a39e: 82a8 strh r0, [r5, #20] -1000a3a0: e7c5 b.n 1000a32e -1000a3a2: 4918 ldr r1, [pc, #96] ; (1000a404 ) -1000a3a4: 4418 add r0, r3 -1000a3a6: f000 f8bb bl 1000a520 -1000a3aa: e7f6 b.n 1000a39a -1000a3ac: 0652 lsls r2, r2, #25 -1000a3ae: d5cb bpl.n 1000a348 -1000a3b0: 6928 ldr r0, [r5, #16] -1000a3b2: 491b ldr r1, [pc, #108] ; (1000a420 ) -1000a3b4: e7c2 b.n 1000a33c -1000a3b6: 4a16 ldr r2, [pc, #88] ; (1000a410 ) -1000a3b8: 491a ldr r1, [pc, #104] ; (1000a424 ) -1000a3ba: 6812 ldr r2, [r2, #0] -1000a3bc: 4440 add r0, r8 -1000a3be: f010 fba9 bl 1001ab14 -1000a3c2: 8aab ldrh r3, [r5, #20] -1000a3c4: 4418 add r0, r3 -1000a3c6: 682b ldr r3, [r5, #0] -1000a3c8: 82a8 strh r0, [r5, #20] -1000a3ca: f043 0306 orr.w r3, r3, #6 -1000a3ce: e6f0 b.n 1000a1b2 -1000a3d0: f042 0202 orr.w r2, r2, #2 -1000a3d4: 602a str r2, [r5, #0] -1000a3d6: e6ed b.n 1000a1b4 -1000a3d8: 4813 ldr r0, [pc, #76] ; (1000a428 ) -1000a3da: f010 fbc1 bl 1001ab60 -1000a3de: 6833 ldr r3, [r6, #0] -1000a3e0: f043 0306 orr.w r3, r3, #6 -1000a3e4: 6033 str r3, [r6, #0] -1000a3e6: e45c b.n 10009ca2 -1000a3e8: 4810 ldr r0, [pc, #64] ; (1000a42c ) -1000a3ea: f010 fbb9 bl 1001ab60 -1000a3ee: f04f 30ff mov.w r0, #4294967295 -1000a3f2: f7ff bb14 b.w 10009a1e -1000a3f6: bf00 nop -1000a3f8: 1003f5c9 .word 0x1003f5c9 -1000a3fc: 1003f280 .word 0x1003f280 -1000a400: 1003f5ea .word 0x1003f5ea -1000a404: 1003f5fd .word 0x1003f5fd -1000a408: 1003f662 .word 0x1003f662 -1000a40c: 1003f70e .word 0x1003f70e -1000a410: 10044ccc .word 0x10044ccc -1000a414: 1003f63d .word 0x1003f63d -1000a418: 1004a760 .word 0x1004a760 -1000a41c: 1003f645 .word 0x1003f645 -1000a420: 1003f67b .word 0x1003f67b -1000a424: 1003f698 .word 0x1003f698 -1000a428: 1003f6bf .word 0x1003f6bf -1000a42c: 1003f6ae .word 0x1003f6ae - -1000a430 : -1000a430: b51f push {r0, r1, r2, r3, r4, lr} -1000a432: 2300 movs r3, #0 -1000a434: 9001 str r0, [sp, #4] -1000a436: 4806 ldr r0, [pc, #24] ; (1000a450 ) -1000a438: 9102 str r1, [sp, #8] -1000a43a: f8ad 200c strh.w r2, [sp, #12] -1000a43e: a901 add r1, sp, #4 -1000a440: 461a mov r2, r3 -1000a442: 6800 ldr r0, [r0, #0] -1000a444: f00b faca bl 100159dc -1000a448: b005 add sp, #20 -1000a44a: f85d fb04 ldr.w pc, [sp], #4 -1000a44e: bf00 nop -1000a450: 1004a764 .word 0x1004a764 - -1000a454 : -1000a454: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -1000a456: 4606 mov r6, r0 -1000a458: 2200 movs r2, #0 -1000a45a: 210c movs r1, #12 -1000a45c: 2005 movs r0, #5 -1000a45e: f00b fa99 bl 10015994 -1000a462: 4b1e ldr r3, [pc, #120] ; (1000a4dc ) -1000a464: 6018 str r0, [r3, #0] -1000a466: b920 cbnz r0, 1000a472 -1000a468: f04f 35ff mov.w r5, #4294967295 -1000a46c: 4628 mov r0, r5 -1000a46e: b004 add sp, #16 -1000a470: bd70 pop {r4, r5, r6, pc} -1000a472: 2300 movs r3, #0 -1000a474: 2205 movs r2, #5 -1000a476: 9303 str r3, [sp, #12] -1000a478: 9200 str r2, [sp, #0] -1000a47a: 9302 str r3, [sp, #8] -1000a47c: 9301 str r3, [sp, #4] -1000a47e: f44f 6280 mov.w r2, #1024 ; 0x400 -1000a482: 4917 ldr r1, [pc, #92] ; (1000a4e0 ) -1000a484: 4817 ldr r0, [pc, #92] ; (1000a4e4 ) -1000a486: f00b fcd5 bl 10015e34 -1000a48a: 2801 cmp r0, #1 -1000a48c: d1ec bne.n 1000a468 -1000a48e: 4630 mov r0, r6 -1000a490: f7fe fab4 bl 100089fc -1000a494: 4604 mov r4, r0 -1000a496: 2800 cmp r0, #0 -1000a498: d0e6 beq.n 1000a468 -1000a49a: 4b13 ldr r3, [pc, #76] ; (1000a4e8 ) -1000a49c: 781a ldrb r2, [r3, #0] -1000a49e: 0712 lsls r2, r2, #28 -1000a4a0: bf42 ittt mi -1000a4a2: 7802 ldrbmi r2, [r0, #0] -1000a4a4: f042 0202 orrmi.w r2, r2, #2 -1000a4a8: 7002 strbmi r2, [r0, #0] -1000a4aa: 2263 movs r2, #99 ; 0x63 -1000a4ac: 7182 strb r2, [r0, #6] -1000a4ae: 88da ldrh r2, [r3, #6] -1000a4b0: 7202 strb r2, [r0, #8] -1000a4b2: 891b ldrh r3, [r3, #8] -1000a4b4: 7243 strb r3, [r0, #9] -1000a4b6: 4b0d ldr r3, [pc, #52] ; (1000a4ec ) -1000a4b8: 6143 str r3, [r0, #20] -1000a4ba: 4b0d ldr r3, [pc, #52] ; (1000a4f0 ) -1000a4bc: 61c3 str r3, [r0, #28] -1000a4be: 4b0d ldr r3, [pc, #52] ; (1000a4f4 ) -1000a4c0: 6203 str r3, [r0, #32] -1000a4c2: f7fe fad9 bl 10008a78 -1000a4c6: 4605 mov r5, r0 -1000a4c8: b118 cbz r0, 1000a4d2 -1000a4ca: 4620 mov r0, r4 -1000a4cc: f7fe fb20 bl 10008b10 -1000a4d0: e7cc b.n 1000a46c -1000a4d2: 4631 mov r1, r6 -1000a4d4: 4808 ldr r0, [pc, #32] ; (1000a4f8 ) -1000a4d6: f010 fb43 bl 1001ab60 -1000a4da: e7c7 b.n 1000a46c -1000a4dc: 1004a764 .word 0x1004a764 -1000a4e0: 1003f4aa .word 0x1003f4aa -1000a4e4: 10008f11 .word 0x10008f11 -1000a4e8: 10044bbc .word 0x10044bbc -1000a4ec: 10009021 .word 0x10009021 -1000a4f0: 100095fd .word 0x100095fd -1000a4f4: 100096cd .word 0x100096cd -1000a4f8: 1003f4b2 .word 0x1003f4b2 - -1000a4fc : -1000a4fc: b508 push {r3, lr} -1000a4fe: b158 cbz r0, 1000a518 -1000a500: f7fe f9d8 bl 100088b4 -1000a504: f7fe fb04 bl 10008b10 -1000a508: 4b04 ldr r3, [pc, #16] ; (1000a51c ) -1000a50a: 889b ldrh r3, [r3, #4] -1000a50c: b12b cbz r3, 1000a51a -1000a50e: 4618 mov r0, r3 -1000a510: e8bd 4008 ldmia.w sp!, {r3, lr} -1000a514: f7ff bf9e b.w 1000a454 -1000a518: e7f6 b.n 1000a508 -1000a51a: bd08 pop {r3, pc} -1000a51c: 10044bbc .word 0x10044bbc - -1000a520 : -1000a520: 460b mov r3, r1 -1000a522: b510 push {r4, lr} -1000a524: 1e44 subs r4, r0, #1 -1000a526: 1a58 subs r0, r3, r1 -1000a528: f913 2b01 ldrsb.w r2, [r3], #1 -1000a52c: f804 2f01 strb.w r2, [r4, #1]! -1000a530: 2a00 cmp r2, #0 -1000a532: d1f8 bne.n 1000a526 -1000a534: bd10 pop {r4, pc} - -1000a536 : -1000a536: 3901 subs r1, #1 -1000a538: f911 3f01 ldrsb.w r3, [r1, #1]! -1000a53c: b90b cbnz r3, 1000a542 -1000a53e: 2001 movs r0, #1 -1000a540: 4770 bx lr -1000a542: f910 2b01 ldrsb.w r2, [r0], #1 -1000a546: 429a cmp r2, r3 -1000a548: d0f6 beq.n 1000a538 -1000a54a: 2000 movs r0, #0 -1000a54c: 4770 bx lr - -1000a54e : -1000a54e: b530 push {r4, r5, lr} -1000a550: f990 2000 ldrsb.w r2, [r0] -1000a554: 4603 mov r3, r0 -1000a556: 2a20 cmp r2, #32 -1000a558: f100 0001 add.w r0, r0, #1 -1000a55c: d0f8 beq.n 1000a550 -1000a55e: 2a2b cmp r2, #43 ; 0x2b -1000a560: d00f beq.n 1000a582 -1000a562: 2a2d cmp r2, #45 ; 0x2d -1000a564: d10f bne.n 1000a586 -1000a566: 2101 movs r1, #1 -1000a568: 3301 adds r3, #1 -1000a56a: 2000 movs r0, #0 -1000a56c: 250a movs r5, #10 -1000a56e: 3b01 subs r3, #1 -1000a570: f913 2f01 ldrsb.w r2, [r3, #1]! -1000a574: 3a30 subs r2, #48 ; 0x30 -1000a576: b2d4 uxtb r4, r2 -1000a578: 2c09 cmp r4, #9 -1000a57a: d906 bls.n 1000a58a -1000a57c: b901 cbnz r1, 1000a580 -1000a57e: 4240 negs r0, r0 -1000a580: bd30 pop {r4, r5, pc} -1000a582: 2100 movs r1, #0 -1000a584: e7f0 b.n 1000a568 -1000a586: 2100 movs r1, #0 -1000a588: e7ef b.n 1000a56a -1000a58a: 4368 muls r0, r5 -1000a58c: 1a80 subs r0, r0, r2 -1000a58e: e7ef b.n 1000a570 - -1000a590 : -1000a590: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1000a592: f021 0503 bic.w r5, r1, #3 -1000a596: f011 0103 ands.w r1, r1, #3 -1000a59a: d016 beq.n 1000a5ca -1000a59c: 4b29 ldr r3, [pc, #164] ; (1000a644 ) -1000a59e: f105 4470 add.w r4, r5, #4026531840 ; 0xf0000000 -1000a5a2: 429c cmp r4, r3 -1000a5a4: bf8c ite hi -1000a5a6: 2400 movhi r4, #0 -1000a5a8: 682c ldrls r4, [r5, #0] -1000a5aa: 1d2b adds r3, r5, #4 -1000a5ac: 461d mov r5, r3 -1000a5ae: ab02 add r3, sp, #8 -1000a5b0: 9401 str r4, [sp, #4] -1000a5b2: 185c adds r4, r3, r1 -1000a5b4: 3c05 subs r4, #5 -1000a5b6: 1a09 subs r1, r1, r0 -1000a5b8: b13a cbz r2, 1000a5ca -1000a5ba: f814 3f01 ldrb.w r3, [r4, #1]! -1000a5be: 3a01 subs r2, #1 -1000a5c0: f800 3b01 strb.w r3, [r0], #1 -1000a5c4: 1843 adds r3, r0, r1 -1000a5c6: 2b04 cmp r3, #4 -1000a5c8: d1f6 bne.n 1000a5b8 -1000a5ca: f04f 0e00 mov.w lr, #0 -1000a5ce: f022 0303 bic.w r3, r2, #3 -1000a5d2: 4f1c ldr r7, [pc, #112] ; (1000a644 ) -1000a5d4: 1d29 adds r1, r5, #4 -1000a5d6: 18c6 adds r6, r0, r3 -1000a5d8: 42b0 cmp r0, r6 -1000a5da: d113 bne.n 1000a604 -1000a5dc: f012 0203 ands.w r2, r2, #3 -1000a5e0: 442b add r3, r5 -1000a5e2: d00d beq.n 1000a600 -1000a5e4: 4917 ldr r1, [pc, #92] ; (1000a644 ) -1000a5e6: f103 4070 add.w r0, r3, #4026531840 ; 0xf0000000 -1000a5ea: 4288 cmp r0, r1 -1000a5ec: d827 bhi.n 1000a63e -1000a5ee: 681b ldr r3, [r3, #0] -1000a5f0: 9301 str r3, [sp, #4] -1000a5f2: 2300 movs r3, #0 -1000a5f4: a801 add r0, sp, #4 -1000a5f6: 5c19 ldrb r1, [r3, r0] -1000a5f8: 54f1 strb r1, [r6, r3] -1000a5fa: 3301 adds r3, #1 -1000a5fc: 4293 cmp r3, r2 -1000a5fe: d1fa bne.n 1000a5f6 -1000a600: b003 add sp, #12 -1000a602: bdf0 pop {r4, r5, r6, r7, pc} -1000a604: f101 4470 add.w r4, r1, #4026531840 ; 0xf0000000 -1000a608: 3c04 subs r4, #4 -1000a60a: 42bc cmp r4, r7 -1000a60c: bf96 itet ls -1000a60e: f851 4c04 ldrls.w r4, [r1, #-4] -1000a612: f8cd e004 strhi.w lr, [sp, #4] -1000a616: 9401 strls r4, [sp, #4] -1000a618: f89d 4004 ldrb.w r4, [sp, #4] -1000a61c: 3004 adds r0, #4 -1000a61e: f800 4c04 strb.w r4, [r0, #-4] -1000a622: f89d 4005 ldrb.w r4, [sp, #5] -1000a626: 3104 adds r1, #4 -1000a628: f800 4c03 strb.w r4, [r0, #-3] -1000a62c: f89d 4006 ldrb.w r4, [sp, #6] -1000a630: f800 4c02 strb.w r4, [r0, #-2] -1000a634: f89d 4007 ldrb.w r4, [sp, #7] -1000a638: f800 4c01 strb.w r4, [r0, #-1] -1000a63c: e7cc b.n 1000a5d8 -1000a63e: 2300 movs r3, #0 -1000a640: e7d6 b.n 1000a5f0 -1000a642: bf00 nop -1000a644: 8a001fff .word 0x8a001fff - -1000a648 : -1000a648: 1e42 subs r2, r0, #1 -1000a64a: 2000 movs r0, #0 -1000a64c: b510 push {r4, lr} -1000a64e: f812 3f01 ldrb.w r3, [r2, #1]! -1000a652: b903 cbnz r3, 1000a656 -1000a654: bd10 pop {r4, pc} -1000a656: f1a3 0130 sub.w r1, r3, #48 ; 0x30 -1000a65a: b2cc uxtb r4, r1 -1000a65c: 2c09 cmp r4, #9 -1000a65e: d802 bhi.n 1000a666 -1000a660: ea41 1000 orr.w r0, r1, r0, lsl #4 -1000a664: e7f3 b.n 1000a64e -1000a666: f1a3 0141 sub.w r1, r3, #65 ; 0x41 -1000a66a: 2905 cmp r1, #5 -1000a66c: d803 bhi.n 1000a676 -1000a66e: 3b37 subs r3, #55 ; 0x37 -1000a670: ea43 1000 orr.w r0, r3, r0, lsl #4 -1000a674: e7eb b.n 1000a64e -1000a676: f1a3 0161 sub.w r1, r3, #97 ; 0x61 -1000a67a: 2905 cmp r1, #5 -1000a67c: d8ea bhi.n 1000a654 -1000a67e: 3b57 subs r3, #87 ; 0x57 -1000a680: e7f6 b.n 1000a670 - -1000a682 : -1000a682: 7803 ldrb r3, [r0, #0] -1000a684: 2b30 cmp r3, #48 ; 0x30 -1000a686: d107 bne.n 1000a698 -1000a688: 7843 ldrb r3, [r0, #1] -1000a68a: f043 0320 orr.w r3, r3, #32 -1000a68e: 2b78 cmp r3, #120 ; 0x78 -1000a690: d102 bne.n 1000a698 -1000a692: 3002 adds r0, #2 -1000a694: f7ff bfd8 b.w 1000a648 -1000a698: f7ff bf59 b.w 1000a54e - -1000a69c : -1000a69c: b570 push {r4, r5, r6, lr} -1000a69e: f8bd 4010 ldrh.w r4, [sp, #16] -1000a6a2: b34c cbz r4, 1000a6f8 -1000a6a4: bb59 cbnz r1, 1000a6fe -1000a6a6: b1c0 cbz r0, 1000a6da -1000a6a8: 7001 strb r1, [r0, #0] -1000a6aa: e01e b.n 1000a6ea -1000a6ac: b90a cbnz r2, 1000a6b2 -1000a6ae: 2d20 cmp r5, #32 -1000a6b0: d102 bne.n 1000a6b8 -1000a6b2: 4295 cmp r5, r2 -1000a6b4: 4631 mov r1, r6 -1000a6b6: d123 bne.n 1000a700 -1000a6b8: b138 cbz r0, 1000a6ca -1000a6ba: 460a mov r2, r1 -1000a6bc: 4404 add r4, r0 -1000a6be: 42a0 cmp r0, r4 -1000a6c0: 4611 mov r1, r2 -1000a6c2: d10c bne.n 1000a6de -1000a6c4: 2200 movs r2, #0 -1000a6c6: f800 2c01 strb.w r2, [r0, #-1] -1000a6ca: 460a mov r2, r1 -1000a6cc: 4611 mov r1, r2 -1000a6ce: f812 0b01 ldrb.w r0, [r2], #1 -1000a6d2: 4283 cmp r3, r0 -1000a6d4: d009 beq.n 1000a6ea -1000a6d6: 281f cmp r0, #31 -1000a6d8: d8f8 bhi.n 1000a6cc -1000a6da: 2100 movs r1, #0 -1000a6dc: e005 b.n 1000a6ea -1000a6de: 7815 ldrb r5, [r2, #0] -1000a6e0: 1c4a adds r2, r1, #1 -1000a6e2: 429d cmp r5, r3 -1000a6e4: d103 bne.n 1000a6ee -1000a6e6: 2300 movs r3, #0 -1000a6e8: 7003 strb r3, [r0, #0] -1000a6ea: 4608 mov r0, r1 -1000a6ec: bd70 pop {r4, r5, r6, pc} -1000a6ee: 2d1f cmp r5, #31 -1000a6f0: d90e bls.n 1000a710 -1000a6f2: f800 5b01 strb.w r5, [r0], #1 -1000a6f6: e7e2 b.n 1000a6be -1000a6f8: 2900 cmp r1, #0 -1000a6fa: d0ee beq.n 1000a6da -1000a6fc: 4620 mov r0, r4 -1000a6fe: 460e mov r6, r1 -1000a700: 7835 ldrb r5, [r6, #0] -1000a702: 4631 mov r1, r6 -1000a704: 2d1f cmp r5, #31 -1000a706: f106 0601 add.w r6, r6, #1 -1000a70a: d8cf bhi.n 1000a6ac -1000a70c: 2800 cmp r0, #0 -1000a70e: d0e4 beq.n 1000a6da -1000a710: 2100 movs r1, #0 -1000a712: e7c9 b.n 1000a6a8 - -1000a714 : -1000a714: b5f8 push {r3, r4, r5, r6, r7, lr} -1000a716: 4604 mov r4, r0 -1000a718: 2000 movs r0, #0 -1000a71a: 460e mov r6, r1 -1000a71c: 4617 mov r7, r2 -1000a71e: 4605 mov r5, r0 -1000a720: 42bd cmp r5, r7 -1000a722: d301 bcc.n 1000a728 -1000a724: 4628 mov r0, r5 -1000a726: bdf8 pop {r3, r4, r5, r6, r7, pc} -1000a728: b940 cbnz r0, 1000a73c -1000a72a: 7823 ldrb r3, [r4, #0] -1000a72c: 2b2d cmp r3, #45 ; 0x2d -1000a72e: d117 bne.n 1000a760 -1000a730: 7861 ldrb r1, [r4, #1] -1000a732: 3930 subs r1, #48 ; 0x30 -1000a734: 2909 cmp r1, #9 -1000a736: d813 bhi.n 1000a760 -1000a738: 4620 mov r0, r4 -1000a73a: 3401 adds r4, #1 -1000a73c: 7823 ldrb r3, [r4, #0] -1000a73e: 2b2c cmp r3, #44 ; 0x2c -1000a740: d013 beq.n 1000a76a -1000a742: 2b29 cmp r3, #41 ; 0x29 -1000a744: d80a bhi.n 1000a75c -1000a746: b110 cbz r0, 1000a74e -1000a748: f7ff ff9b bl 1000a682 -1000a74c: 6030 str r0, [r6, #0] -1000a74e: 7823 ldrb r3, [r4, #0] -1000a750: 3604 adds r6, #4 -1000a752: 2b28 cmp r3, #40 ; 0x28 -1000a754: f105 0501 add.w r5, r5, #1 -1000a758: d9e4 bls.n 1000a724 -1000a75a: 2000 movs r0, #0 -1000a75c: 3401 adds r4, #1 -1000a75e: e7df b.n 1000a720 -1000a760: 3b30 subs r3, #48 ; 0x30 -1000a762: 2b09 cmp r3, #9 -1000a764: bf98 it ls -1000a766: 4620 movls r0, r4 -1000a768: e7e8 b.n 1000a73c -1000a76a: 2800 cmp r0, #0 -1000a76c: d1ec bne.n 1000a748 -1000a76e: 3604 adds r6, #4 -1000a770: 3501 adds r5, #1 -1000a772: e7f3 b.n 1000a75c - -1000a774 : -1000a774: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} -1000a778: 2403 movs r4, #3 -1000a77a: 460d mov r5, r1 -1000a77c: 233a movs r3, #58 ; 0x3a -1000a77e: 4601 mov r1, r0 -1000a780: 2200 movs r2, #0 -1000a782: 9400 str r4, [sp, #0] -1000a784: a803 add r0, sp, #12 -1000a786: f7ff ff89 bl 1000a69c -1000a78a: 4606 mov r6, r0 -1000a78c: a803 add r0, sp, #12 -1000a78e: f7ff ff5b bl 1000a648 -1000a792: 462f mov r7, r5 -1000a794: f105 0801 add.w r8, r5, #1 -1000a798: f807 0b05 strb.w r0, [r7], #5 -1000a79c: 45b8 cmp r8, r7 -1000a79e: 9400 str r4, [sp, #0] -1000a7a0: d10c bne.n 1000a7bc -1000a7a2: 2320 movs r3, #32 -1000a7a4: 223a movs r2, #58 ; 0x3a -1000a7a6: 4631 mov r1, r6 -1000a7a8: a803 add r0, sp, #12 -1000a7aa: f7ff ff77 bl 1000a69c -1000a7ae: a803 add r0, sp, #12 -1000a7b0: f7ff ff4a bl 1000a648 -1000a7b4: 7168 strb r0, [r5, #5] -1000a7b6: b004 add sp, #16 -1000a7b8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000a7bc: 233a movs r3, #58 ; 0x3a -1000a7be: 4631 mov r1, r6 -1000a7c0: 461a mov r2, r3 -1000a7c2: a803 add r0, sp, #12 -1000a7c4: f7ff ff6a bl 1000a69c -1000a7c8: 4606 mov r6, r0 -1000a7ca: a803 add r0, sp, #12 -1000a7cc: f7ff ff3c bl 1000a648 -1000a7d0: f808 0b01 strb.w r0, [r8], #1 -1000a7d4: e7e2 b.n 1000a79c - -1000a7d6 : -1000a7d6: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -1000a7da: 4606 mov r6, r0 -1000a7dc: 2900 cmp r1, #0 -1000a7de: d04e beq.n 1000a87e -1000a7e0: 4607 mov r7, r0 -1000a7e2: f04f 0820 mov.w r8, #32 -1000a7e6: 2000 movs r0, #0 -1000a7e8: 1e5d subs r5, r3, #1 -1000a7ea: 463e mov r6, r7 -1000a7ec: b2ad uxth r5, r5 -1000a7ee: b123 cbz r3, 1000a7fa -1000a7f0: 4290 cmp r0, r2 -1000a7f2: d002 beq.n 1000a7fa -1000a7f4: 780c ldrb r4, [r1, #0] -1000a7f6: 2c20 cmp r4, #32 -1000a7f8: d803 bhi.n 1000a802 -1000a7fa: 2300 movs r3, #0 -1000a7fc: 7033 strb r3, [r6, #0] -1000a7fe: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -1000a802: 2c25 cmp r4, #37 ; 0x25 -1000a804: d134 bne.n 1000a870 -1000a806: 2d01 cmp r5, #1 -1000a808: d937 bls.n 1000a87a -1000a80a: f04f 0c01 mov.w ip, #1 -1000a80e: 2600 movs r6, #0 -1000a810: f101 0901 add.w r9, r1, #1 -1000a814: eba3 050c sub.w r5, r3, ip -1000a818: f1bc 0f03 cmp.w ip, #3 -1000a81c: b2ad uxth r5, r5 -1000a81e: 4649 mov r1, r9 -1000a820: d01c beq.n 1000a85c -1000a822: f819 4b01 ldrb.w r4, [r9], #1 -1000a826: f1a4 0e30 sub.w lr, r4, #48 ; 0x30 -1000a82a: fa5f fe8e uxtb.w lr, lr -1000a82e: f1be 0f09 cmp.w lr, #9 -1000a832: d805 bhi.n 1000a840 -1000a834: ea4e 1406 orr.w r4, lr, r6, lsl #4 -1000a838: b2e6 uxtb r6, r4 -1000a83a: f10c 0c01 add.w ip, ip, #1 -1000a83e: e7e9 b.n 1000a814 -1000a840: f1a4 0e41 sub.w lr, r4, #65 ; 0x41 -1000a844: f1be 0f05 cmp.w lr, #5 -1000a848: d803 bhi.n 1000a852 -1000a84a: 3c37 subs r4, #55 ; 0x37 -1000a84c: ea44 1406 orr.w r4, r4, r6, lsl #4 -1000a850: e7f2 b.n 1000a838 -1000a852: f1a4 0e61 sub.w lr, r4, #97 ; 0x61 -1000a856: f1be 0f05 cmp.w lr, #5 -1000a85a: d907 bls.n 1000a86c -1000a85c: 3901 subs r1, #1 -1000a85e: 703e strb r6, [r7, #0] -1000a860: 3001 adds r0, #1 -1000a862: b280 uxth r0, r0 -1000a864: 3101 adds r1, #1 -1000a866: 3701 adds r7, #1 -1000a868: 462b mov r3, r5 -1000a86a: e7bd b.n 1000a7e8 -1000a86c: 3c57 subs r4, #87 ; 0x57 -1000a86e: e7ed b.n 1000a84c -1000a870: 2c2b cmp r4, #43 ; 0x2b -1000a872: d102 bne.n 1000a87a -1000a874: f887 8000 strb.w r8, [r7] -1000a878: e7f2 b.n 1000a860 -1000a87a: 703c strb r4, [r7, #0] -1000a87c: e7f0 b.n 1000a860 -1000a87e: 4608 mov r0, r1 -1000a880: e7bb b.n 1000a7fa - -1000a882 : -1000a882: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -1000a886: 4604 mov r4, r0 -1000a888: 2900 cmp r1, #0 -1000a88a: d079 beq.n 1000a980 -1000a88c: 2000 movs r0, #0 -1000a88e: 2726 movs r7, #38 ; 0x26 -1000a890: f04f 0e74 mov.w lr, #116 ; 0x74 -1000a894: 263b movs r6, #59 ; 0x3b -1000a896: f04f 096c mov.w r9, #108 ; 0x6c -1000a89a: f04f 0c61 mov.w ip, #97 ; 0x61 -1000a89e: f04f 0a6d mov.w sl, #109 ; 0x6d -1000a8a2: f04f 0870 mov.w r8, #112 ; 0x70 -1000a8a6: f04f 0b71 mov.w fp, #113 ; 0x71 -1000a8aa: 18cb adds r3, r1, r3 -1000a8ac: 9301 str r3, [sp, #4] -1000a8ae: 9b01 ldr r3, [sp, #4] -1000a8b0: 4299 cmp r1, r3 -1000a8b2: d005 beq.n 1000a8c0 -1000a8b4: 1e53 subs r3, r2, #1 -1000a8b6: b29b uxth r3, r3 -1000a8b8: b112 cbz r2, 1000a8c0 -1000a8ba: f811 5b01 ldrb.w r5, [r1], #1 -1000a8be: b925 cbnz r5, 1000a8ca -1000a8c0: 2300 movs r3, #0 -1000a8c2: 7023 strb r3, [r4, #0] -1000a8c4: b003 add sp, #12 -1000a8c6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1000a8ca: 2d27 cmp r5, #39 ; 0x27 -1000a8cc: d112 bne.n 1000a8f4 -1000a8ce: 2b05 cmp r3, #5 -1000a8d0: d9f6 bls.n 1000a8c0 -1000a8d2: 1fd3 subs r3, r2, #7 -1000a8d4: 226f movs r2, #111 ; 0x6f -1000a8d6: 70e2 strb r2, [r4, #3] -1000a8d8: 2273 movs r2, #115 ; 0x73 -1000a8da: 3006 adds r0, #6 -1000a8dc: b280 uxth r0, r0 -1000a8de: b29b uxth r3, r3 -1000a8e0: 7027 strb r7, [r4, #0] -1000a8e2: f884 c001 strb.w ip, [r4, #1] -1000a8e6: f884 8002 strb.w r8, [r4, #2] -1000a8ea: 7122 strb r2, [r4, #4] -1000a8ec: 7166 strb r6, [r4, #5] -1000a8ee: 3406 adds r4, #6 -1000a8f0: 461a mov r2, r3 -1000a8f2: e7dc b.n 1000a8ae -1000a8f4: 2d22 cmp r5, #34 ; 0x22 -1000a8f6: d10f bne.n 1000a918 -1000a8f8: 2b05 cmp r3, #5 -1000a8fa: d9e1 bls.n 1000a8c0 -1000a8fc: 1fd3 subs r3, r2, #7 -1000a8fe: 2275 movs r2, #117 ; 0x75 -1000a900: 70a2 strb r2, [r4, #2] -1000a902: 226f movs r2, #111 ; 0x6f -1000a904: 3006 adds r0, #6 -1000a906: b280 uxth r0, r0 -1000a908: b29b uxth r3, r3 -1000a90a: 7027 strb r7, [r4, #0] -1000a90c: f884 b001 strb.w fp, [r4, #1] -1000a910: 70e2 strb r2, [r4, #3] -1000a912: f884 e004 strb.w lr, [r4, #4] -1000a916: e7e9 b.n 1000a8ec -1000a918: 2d26 cmp r5, #38 ; 0x26 -1000a91a: d10f bne.n 1000a93c -1000a91c: 2b04 cmp r3, #4 -1000a91e: d9cf bls.n 1000a8c0 -1000a920: 3005 adds r0, #5 -1000a922: 1f93 subs r3, r2, #6 -1000a924: 7025 strb r5, [r4, #0] -1000a926: f884 c001 strb.w ip, [r4, #1] -1000a92a: f884 a002 strb.w sl, [r4, #2] -1000a92e: f884 8003 strb.w r8, [r4, #3] -1000a932: 7126 strb r6, [r4, #4] -1000a934: b280 uxth r0, r0 -1000a936: b29b uxth r3, r3 -1000a938: 3405 adds r4, #5 -1000a93a: e7d9 b.n 1000a8f0 -1000a93c: 2d3c cmp r5, #60 ; 0x3c -1000a93e: d10d bne.n 1000a95c -1000a940: 2b03 cmp r3, #3 -1000a942: d9bd bls.n 1000a8c0 -1000a944: 3004 adds r0, #4 -1000a946: 1f53 subs r3, r2, #5 -1000a948: b280 uxth r0, r0 -1000a94a: b29b uxth r3, r3 -1000a94c: 7027 strb r7, [r4, #0] -1000a94e: f884 9001 strb.w r9, [r4, #1] -1000a952: f884 e002 strb.w lr, [r4, #2] -1000a956: 70e6 strb r6, [r4, #3] -1000a958: 3404 adds r4, #4 -1000a95a: e7c9 b.n 1000a8f0 -1000a95c: 2d3e cmp r5, #62 ; 0x3e -1000a95e: d10a bne.n 1000a976 -1000a960: 2b03 cmp r3, #3 -1000a962: d9ad bls.n 1000a8c0 -1000a964: 1f53 subs r3, r2, #5 -1000a966: f04f 0267 mov.w r2, #103 ; 0x67 -1000a96a: 3004 adds r0, #4 -1000a96c: b280 uxth r0, r0 -1000a96e: b29b uxth r3, r3 -1000a970: 7027 strb r7, [r4, #0] -1000a972: 7062 strb r2, [r4, #1] -1000a974: e7ed b.n 1000a952 -1000a976: 3001 adds r0, #1 -1000a978: 7025 strb r5, [r4, #0] -1000a97a: b280 uxth r0, r0 -1000a97c: 3401 adds r4, #1 -1000a97e: e7b7 b.n 1000a8f0 -1000a980: 4608 mov r0, r1 -1000a982: e79d b.n 1000a8c0 - -1000a984 : -1000a984: b5f8 push {r3, r4, r5, r6, r7, lr} -1000a986: 4604 mov r4, r0 -1000a988: 4608 mov r0, r1 -1000a98a: 460f mov r7, r1 -1000a98c: 4615 mov r5, r2 -1000a98e: f010 f923 bl 1001abd8 -1000a992: 4606 mov r6, r0 -1000a994: b198 cbz r0, 1000a9be -1000a996: 4425 add r5, r4 -1000a998: 7820 ldrb r0, [r4, #0] -1000a99a: b188 cbz r0, 1000a9c0 -1000a99c: 19a3 adds r3, r4, r6 -1000a99e: 42ab cmp r3, r5 -1000a9a0: d901 bls.n 1000a9a6 -1000a9a2: 2000 movs r0, #0 -1000a9a4: bdf8 pop {r3, r4, r5, r6, r7, pc} -1000a9a6: 783b ldrb r3, [r7, #0] -1000a9a8: 4283 cmp r3, r0 -1000a9aa: d001 beq.n 1000a9b0 -1000a9ac: 3401 adds r4, #1 -1000a9ae: e7f3 b.n 1000a998 -1000a9b0: 4632 mov r2, r6 -1000a9b2: 4639 mov r1, r7 -1000a9b4: 4620 mov r0, r4 -1000a9b6: f010 f913 bl 1001abe0 -1000a9ba: 2800 cmp r0, #0 -1000a9bc: d1f6 bne.n 1000a9ac -1000a9be: 4620 mov r0, r4 -1000a9c0: bdf8 pop {r3, r4, r5, r6, r7, pc} - ... - -1000a9c4 : -1000a9c4: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1000a9c8: 2400 movs r4, #0 -1000a9ca: 468a mov sl, r1 -1000a9cc: 4684 mov ip, r0 -1000a9ce: 4625 mov r5, r4 -1000a9d0: 4626 mov r6, r4 -1000a9d2: 2703 movs r7, #3 -1000a9d4: f8df 8080 ldr.w r8, [pc, #128] ; 1000aa58 -1000a9d8: ebac 0e00 sub.w lr, ip, r0 -1000a9dc: 45f2 cmp sl, lr -1000a9de: dc04 bgt.n 1000a9ea -1000a9e0: b98d cbnz r5, 1000aa06 -1000a9e2: 601c str r4, [r3, #0] -1000a9e4: 2001 movs r0, #1 -1000a9e6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1000a9ea: f81c eb01 ldrb.w lr, [ip], #1 -1000a9ee: f00e 0e7f and.w lr, lr, #127 ; 0x7f -1000a9f2: f818 e00e ldrb.w lr, [r8, lr] -1000a9f6: f1be 0fff cmp.w lr, #255 ; 0xff -1000a9fa: d0ed beq.n 1000a9d8 -1000a9fc: f1be 0ffe cmp.w lr, #254 ; 0xfe -1000aa00: d104 bne.n 1000aa0c -1000aa02: 3f01 subs r7, #1 -1000aa04: d51f bpl.n 1000aa46 -1000aa06: 2000 movs r0, #0 -1000aa08: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1000aa0c: 2f03 cmp r7, #3 -1000aa0e: d1fa bne.n 1000aa06 -1000aa10: 3501 adds r5, #1 -1000aa12: 2d04 cmp r5, #4 -1000aa14: ea4e 1686 orr.w r6, lr, r6, lsl #6 -1000aa18: d111 bne.n 1000aa3e -1000aa1a: 1435 asrs r5, r6, #16 -1000aa1c: 2f01 cmp r7, #1 -1000aa1e: f104 0e01 add.w lr, r4, #1 -1000aa22: 5515 strb r5, [r2, r4] -1000aa24: dd12 ble.n 1000aa4c -1000aa26: ea4f 2926 mov.w r9, r6, asr #8 -1000aa2a: 2f03 cmp r7, #3 -1000aa2c: f104 0502 add.w r5, r4, #2 -1000aa30: f802 900e strb.w r9, [r2, lr] -1000aa34: d10e bne.n 1000aa54 -1000aa36: 5556 strb r6, [r2, r5] -1000aa38: 2600 movs r6, #0 -1000aa3a: 4635 mov r5, r6 -1000aa3c: 3403 adds r4, #3 -1000aa3e: 6819 ldr r1, [r3, #0] -1000aa40: 428c cmp r4, r1 -1000aa42: ddc9 ble.n 1000a9d8 -1000aa44: e7df b.n 1000aa06 -1000aa46: f04f 0e00 mov.w lr, #0 -1000aa4a: e7e1 b.n 1000aa10 -1000aa4c: 4674 mov r4, lr -1000aa4e: 2500 movs r5, #0 -1000aa50: 462e mov r6, r5 -1000aa52: e7f4 b.n 1000aa3e -1000aa54: 462c mov r4, r5 -1000aa56: e7fa b.n 1000aa4e -1000aa58: 1003f71a .word 0x1003f71a - -1000aa5c : -1000aa5c: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} -1000aa60: 4607 mov r7, r0 -1000aa62: 6b44 ldr r4, [r0, #52] ; 0x34 -1000aa64: f8df 8138 ldr.w r8, [pc, #312] ; 1000aba0 -1000aa68: 68a5 ldr r5, [r4, #8] -1000aa6a: 68e3 ldr r3, [r4, #12] -1000aa6c: f025 050f bic.w r5, r5, #15 -1000aa70: f023 030f bic.w r3, r3, #15 -1000aa74: 60a5 str r5, [r4, #8] -1000aa76: 60e3 str r3, [r4, #12] -1000aa78: 8aa3 ldrh r3, [r4, #20] -1000aa7a: 8ae2 ldrh r2, [r4, #22] -1000aa7c: 334b adds r3, #75 ; 0x4b -1000aa7e: 4293 cmp r3, r2 -1000aa80: db06 blt.n 1000aa90 -1000aa82: 6823 ldr r3, [r4, #0] -1000aa84: f043 0380 orr.w r3, r3, #128 ; 0x80 -1000aa88: 6023 str r3, [r4, #0] -1000aa8a: 4b43 ldr r3, [pc, #268] ; (1000ab98 ) -1000aa8c: 61a3 str r3, [r4, #24] -1000aa8e: e06c b.n 1000ab6a -1000aa90: f105 49d0 add.w r9, r5, #1744830464 ; 0x68000000 -1000aa94: f1b9 7f00 cmp.w r9, #33554432 ; 0x2000000 -1000aa98: d204 bcs.n 1000aaa4 -1000aa9a: 2001 movs r0, #1 -1000aa9c: f00c f8e2 bl 10016c64 -1000aaa0: f00d f848 bl 10017b34 -1000aaa4: 6923 ldr r3, [r4, #16] -1000aaa6: 8aa0 ldrh r0, [r4, #20] -1000aaa8: 462a mov r2, r5 -1000aaaa: 4418 add r0, r3 -1000aaac: 4641 mov r1, r8 -1000aaae: f010 f831 bl 1001ab14 -1000aab2: 8aa3 ldrh r3, [r4, #20] -1000aab4: 4418 add r0, r3 -1000aab6: 2300 movs r3, #0 -1000aab8: 82a0 strh r0, [r4, #20] -1000aaba: f855 2023 ldr.w r2, [r5, r3, lsl #2] -1000aabe: f84d 2023 str.w r2, [sp, r3, lsl #2] -1000aac2: 3301 adds r3, #1 -1000aac4: 2b04 cmp r3, #4 -1000aac6: d1f8 bne.n 1000aaba -1000aac8: 883e ldrh r6, [r7, #0] -1000aaca: 3510 adds r5, #16 -1000aacc: f3c6 3640 ubfx r6, r6, #13, #1 -1000aad0: 60a5 str r5, [r4, #8] -1000aad2: 2e00 cmp r6, #0 -1000aad4: d04c beq.n 1000ab70 -1000aad6: 2600 movs r6, #0 -1000aad8: f8df a0c8 ldr.w sl, [pc, #200] ; 1000aba4 -1000aadc: 6923 ldr r3, [r4, #16] -1000aade: 8aa0 ldrh r0, [r4, #20] -1000aae0: f85d 2026 ldr.w r2, [sp, r6, lsl #2] -1000aae4: 4418 add r0, r3 -1000aae6: 4651 mov r1, sl -1000aae8: f010 f814 bl 1001ab14 -1000aaec: 8aa3 ldrh r3, [r4, #20] -1000aaee: 3601 adds r6, #1 -1000aaf0: 4418 add r0, r3 -1000aaf2: 2e04 cmp r6, #4 -1000aaf4: 82a0 strh r0, [r4, #20] -1000aaf6: d1f1 bne.n 1000aadc -1000aaf8: f109 0910 add.w r9, r9, #16 -1000aafc: f1b9 7f00 cmp.w r9, #33554432 ; 0x2000000 -1000ab00: d204 bcs.n 1000ab0c -1000ab02: f7fc fc11 bl 10007328 -1000ab06: 2001 movs r0, #1 -1000ab08: f00c f8c6 bl 10016c98 -1000ab0c: 8aa3 ldrh r3, [r4, #20] -1000ab0e: 6921 ldr r1, [r4, #16] -1000ab10: 1c5a adds r2, r3, #1 -1000ab12: 82a2 strh r2, [r4, #20] -1000ab14: 2220 movs r2, #32 -1000ab16: 54ca strb r2, [r1, r3] -1000ab18: 8aa3 ldrh r3, [r4, #20] -1000ab1a: 6921 ldr r1, [r4, #16] -1000ab1c: 1c58 adds r0, r3, #1 -1000ab1e: 82a0 strh r0, [r4, #20] -1000ab20: 54ca strb r2, [r1, r3] -1000ab22: 2200 movs r2, #0 -1000ab24: 8aa1 ldrh r1, [r4, #20] -1000ab26: 6920 ldr r0, [r4, #16] -1000ab28: 1c4b adds r3, r1, #1 -1000ab2a: 82a3 strh r3, [r4, #20] -1000ab2c: f81d 3002 ldrb.w r3, [sp, r2] -1000ab30: 2b1f cmp r3, #31 -1000ab32: d92e bls.n 1000ab92 -1000ab34: 2b7f cmp r3, #127 ; 0x7f -1000ab36: bf08 it eq -1000ab38: 232e moveq r3, #46 ; 0x2e -1000ab3a: 3201 adds r2, #1 -1000ab3c: 2a10 cmp r2, #16 -1000ab3e: 5443 strb r3, [r0, r1] -1000ab40: d1f0 bne.n 1000ab24 -1000ab42: 8aa3 ldrh r3, [r4, #20] -1000ab44: 6920 ldr r0, [r4, #16] -1000ab46: 4915 ldr r1, [pc, #84] ; (1000ab9c ) -1000ab48: 4418 add r0, r3 -1000ab4a: f00f ffe3 bl 1001ab14 -1000ab4e: 8aa3 ldrh r3, [r4, #20] -1000ab50: 4418 add r0, r3 -1000ab52: 68e3 ldr r3, [r4, #12] -1000ab54: 82a0 strh r0, [r4, #20] -1000ab56: 429d cmp r5, r3 -1000ab58: d38e bcc.n 1000aa78 -1000ab5a: 6822 ldr r2, [r4, #0] -1000ab5c: f022 0380 bic.w r3, r2, #128 ; 0x80 -1000ab60: 03d2 lsls r2, r2, #15 -1000ab62: bf58 it pl -1000ab64: f043 0306 orrpl.w r3, r3, #6 -1000ab68: 6023 str r3, [r4, #0] -1000ab6a: b004 add sp, #16 -1000ab6c: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1000ab70: f8df a034 ldr.w sl, [pc, #52] ; 1000aba8 -1000ab74: 6923 ldr r3, [r4, #16] -1000ab76: 8aa0 ldrh r0, [r4, #20] -1000ab78: f81d 2006 ldrb.w r2, [sp, r6] -1000ab7c: 4418 add r0, r3 -1000ab7e: 4651 mov r1, sl -1000ab80: f00f ffc8 bl 1001ab14 -1000ab84: 8aa3 ldrh r3, [r4, #20] -1000ab86: 3601 adds r6, #1 -1000ab88: 4418 add r0, r3 -1000ab8a: 2e10 cmp r6, #16 -1000ab8c: 82a0 strh r0, [r4, #20] -1000ab8e: d1f1 bne.n 1000ab74 -1000ab90: e7b2 b.n 1000aaf8 -1000ab92: 232e movs r3, #46 ; 0x2e -1000ab94: e7d1 b.n 1000ab3a -1000ab96: bf00 nop -1000ab98: 1000aa5d .word 0x1000aa5d -1000ab9c: 1003f70e .word 0x1003f70e -1000aba0: 1003f79b .word 0x1003f79b -1000aba4: 1003f79a .word 0x1003f79a -1000aba8: 1003f7a0 .word 0x1003f7a0 - -1000abac : -1000abac: b538 push {r3, r4, r5, lr} -1000abae: 6b44 ldr r4, [r0, #52] ; 0x34 -1000abb0: 6823 ldr r3, [r4, #0] -1000abb2: 68e5 ldr r5, [r4, #12] -1000abb4: f013 0f80 tst.w r3, #128 ; 0x80 -1000abb8: 68a3 ldr r3, [r4, #8] -1000abba: d101 bne.n 1000abc0 -1000abbc: 42ab cmp r3, r5 -1000abbe: d022 beq.n 1000ac06 -1000abc0: 1aed subs r5, r5, r3 -1000abc2: 8aa2 ldrh r2, [r4, #20] -1000abc4: 8ae3 ldrh r3, [r4, #22] -1000abc6: 2001 movs r0, #1 -1000abc8: 1a9b subs r3, r3, r2 -1000abca: 429d cmp r5, r3 -1000abcc: bf28 it cs -1000abce: 461d movcs r5, r3 -1000abd0: f00c f848 bl 10016c64 -1000abd4: 6923 ldr r3, [r4, #16] -1000abd6: 462a mov r2, r5 -1000abd8: 68a1 ldr r1, [r4, #8] -1000abda: 480f ldr r0, [pc, #60] ; (1000ac18 ) -1000abdc: f00c fffe bl 10017bdc -1000abe0: b190 cbz r0, 1000ac08 -1000abe2: 8aa2 ldrh r2, [r4, #20] -1000abe4: 68a3 ldr r3, [r4, #8] -1000abe6: 442b add r3, r5 -1000abe8: 4415 add r5, r2 -1000abea: 68e2 ldr r2, [r4, #12] -1000abec: 60a3 str r3, [r4, #8] -1000abee: 4293 cmp r3, r2 -1000abf0: 82a5 strh r5, [r4, #20] -1000abf2: d209 bcs.n 1000ac08 -1000abf4: 4b09 ldr r3, [pc, #36] ; (1000ac1c ) -1000abf6: 2001 movs r0, #1 -1000abf8: 61a3 str r3, [r4, #24] -1000abfa: f00c f84d bl 10016c98 -1000abfe: 6823 ldr r3, [r4, #0] -1000ac00: f043 0380 orr.w r3, r3, #128 ; 0x80 -1000ac04: 6023 str r3, [r4, #0] -1000ac06: bd38 pop {r3, r4, r5, pc} -1000ac08: 2001 movs r0, #1 -1000ac0a: f00c f845 bl 10016c98 -1000ac0e: 6823 ldr r3, [r4, #0] -1000ac10: f023 0380 bic.w r3, r3, #128 ; 0x80 -1000ac14: e7f6 b.n 1000ac04 -1000ac16: bf00 nop -1000ac18: 1004b4ec .word 0x1004b4ec -1000ac1c: 1000abad .word 0x1000abad - -1000ac20 : -1000ac20: b538 push {r3, r4, r5, lr} -1000ac22: 6b44 ldr r4, [r0, #52] ; 0x34 -1000ac24: 6823 ldr r3, [r4, #0] -1000ac26: 68e2 ldr r2, [r4, #12] -1000ac28: f013 0f80 tst.w r3, #128 ; 0x80 -1000ac2c: 68a3 ldr r3, [r4, #8] -1000ac2e: d101 bne.n 1000ac34 -1000ac30: 4293 cmp r3, r2 -1000ac32: d033 beq.n 1000ac9c -1000ac34: 8ae5 ldrh r5, [r4, #22] -1000ac36: 8aa1 ldrh r1, [r4, #20] -1000ac38: 1ad2 subs r2, r2, r3 -1000ac3a: 1a6d subs r5, r5, r1 -1000ac3c: 4295 cmp r5, r2 -1000ac3e: f103 43d0 add.w r3, r3, #1744830464 ; 0x68000000 -1000ac42: bf28 it cs -1000ac44: 4615 movcs r5, r2 -1000ac46: f1b3 7f00 cmp.w r3, #33554432 ; 0x2000000 -1000ac4a: d204 bcs.n 1000ac56 -1000ac4c: 2001 movs r0, #1 -1000ac4e: f00c f809 bl 10016c64 -1000ac52: f00c ff6f bl 10017b34 -1000ac56: 462a mov r2, r5 -1000ac58: 68a1 ldr r1, [r4, #8] -1000ac5a: 6920 ldr r0, [r4, #16] -1000ac5c: f7ff fc98 bl 1000a590 -1000ac60: 68a3 ldr r3, [r4, #8] -1000ac62: f103 43d0 add.w r3, r3, #1744830464 ; 0x68000000 -1000ac66: f1b3 7f00 cmp.w r3, #33554432 ; 0x2000000 -1000ac6a: d204 bcs.n 1000ac76 -1000ac6c: f7fc fb5c bl 10007328 -1000ac70: 2001 movs r0, #1 -1000ac72: f00c f811 bl 10016c98 -1000ac76: 8aa3 ldrh r3, [r4, #20] -1000ac78: 442b add r3, r5 -1000ac7a: 82a3 strh r3, [r4, #20] -1000ac7c: 68a3 ldr r3, [r4, #8] -1000ac7e: 441d add r5, r3 -1000ac80: 68e3 ldr r3, [r4, #12] -1000ac82: 60a5 str r5, [r4, #8] -1000ac84: 429d cmp r5, r3 -1000ac86: 6823 ldr r3, [r4, #0] -1000ac88: d005 beq.n 1000ac96 -1000ac8a: f043 0380 orr.w r3, r3, #128 ; 0x80 -1000ac8e: 6023 str r3, [r4, #0] -1000ac90: 4b03 ldr r3, [pc, #12] ; (1000aca0 ) -1000ac92: 61a3 str r3, [r4, #24] -1000ac94: bd38 pop {r3, r4, r5, pc} -1000ac96: f023 0380 bic.w r3, r3, #128 ; 0x80 -1000ac9a: 6023 str r3, [r4, #0] -1000ac9c: bd38 pop {r3, r4, r5, pc} -1000ac9e: bf00 nop -1000aca0: 1000ac21 .word 0x1000ac21 - -1000aca4 : -1000aca4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1000aca8: 6b44 ldr r4, [r0, #52] ; 0x34 -1000acaa: b0c1 sub sp, #260 ; 0x104 -1000acac: 6825 ldr r5, [r4, #0] -1000acae: f015 0580 ands.w r5, r5, #128 ; 0x80 -1000acb2: d011 beq.n 1000acd8 -1000acb4: f04f 083e mov.w r8, #62 ; 0x3e -1000acb8: 4f4a ldr r7, [pc, #296] ; (1000ade4 ) -1000acba: f8df 9134 ldr.w r9, [pc, #308] ; 1000adf0 -1000acbe: 8aa6 ldrh r6, [r4, #20] -1000acc0: 8ae3 ldrh r3, [r4, #22] -1000acc2: f106 0289 add.w r2, r6, #137 ; 0x89 -1000acc6: 429a cmp r2, r3 -1000acc8: db29 blt.n 1000ad1e -1000acca: 6823 ldr r3, [r4, #0] -1000accc: f043 0380 orr.w r3, r3, #128 ; 0x80 -1000acd0: 6023 str r3, [r4, #0] -1000acd2: 4b45 ldr r3, [pc, #276] ; (1000ade8 ) -1000acd4: 61a3 str r3, [r4, #24] -1000acd6: e015 b.n 1000ad04 -1000acd8: 4b42 ldr r3, [pc, #264] ; (1000ade4 ) -1000acda: 60a5 str r5, [r4, #8] -1000acdc: 7ada ldrb r2, [r3, #11] -1000acde: 2a02 cmp r2, #2 -1000ace0: d113 bne.n 1000ad0a -1000ace2: f641 3058 movw r0, #7000 ; 0x1b58 -1000ace6: 7a1d ldrb r5, [r3, #8] -1000ace8: f003 fc7a bl 1000e5e0 -1000acec: 8aa3 ldrh r3, [r4, #20] -1000acee: 6920 ldr r0, [r4, #16] -1000acf0: 462a mov r2, r5 -1000acf2: 4418 add r0, r3 -1000acf4: 493d ldr r1, [pc, #244] ; (1000adec ) -1000acf6: f00f ff0d bl 1001ab14 -1000acfa: 8aa3 ldrh r3, [r4, #20] -1000acfc: 4418 add r0, r3 -1000acfe: 82a0 strh r0, [r4, #20] -1000ad00: 2d00 cmp r5, #0 -1000ad02: d1d7 bne.n 1000acb4 -1000ad04: b041 add sp, #260 ; 0x104 -1000ad06: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1000ad0a: 7adb ldrb r3, [r3, #11] -1000ad0c: f003 06ff and.w r6, r3, #255 ; 0xff -1000ad10: 2b00 cmp r3, #0 -1000ad12: d1eb bne.n 1000acec -1000ad14: 4630 mov r0, r6 -1000ad16: f003 fc7f bl 1000e618 -1000ad1a: 4635 mov r5, r6 -1000ad1c: e7e6 b.n 1000acec -1000ad1e: 7afb ldrb r3, [r7, #11] -1000ad20: 2b00 cmp r3, #0 -1000ad22: d058 beq.n 1000add6 -1000ad24: 68a3 ldr r3, [r4, #8] -1000ad26: 7a3a ldrb r2, [r7, #8] -1000ad28: 4293 cmp r3, r2 -1000ad2a: d254 bcs.n 1000add6 -1000ad2c: fb08 f303 mul.w r3, r8, r3 -1000ad30: 687a ldr r2, [r7, #4] -1000ad32: f10d 0a3c add.w sl, sp, #60 ; 0x3c -1000ad36: 18d5 adds r5, r2, r3 -1000ad38: 5cd3 ldrb r3, [r2, r3] -1000ad3a: 2200 movs r2, #0 -1000ad3c: 2b20 cmp r3, #32 -1000ad3e: bfd4 ite le -1000ad40: 18eb addle r3, r5, r3 -1000ad42: f105 0320 addgt.w r3, r5, #32 -1000ad46: 1c69 adds r1, r5, #1 -1000ad48: 705a strb r2, [r3, #1] -1000ad4a: 4650 mov r0, sl -1000ad4c: 2320 movs r3, #32 -1000ad4e: 22c0 movs r2, #192 ; 0xc0 -1000ad50: f7ff fd97 bl 1000a882 -1000ad54: 366a adds r6, #106 ; 0x6a -1000ad56: 8ae3 ldrh r3, [r4, #22] -1000ad58: 4406 add r6, r0 -1000ad5a: 429e cmp r6, r3 -1000ad5c: dcb5 bgt.n 1000acca -1000ad5e: 8aa3 ldrh r3, [r4, #20] -1000ad60: 6926 ldr r6, [r4, #16] -1000ad62: f8d4 b008 ldr.w fp, [r4, #8] -1000ad66: 441e add r6, r3 -1000ad68: f8d5 3036 ldr.w r3, [r5, #54] ; 0x36 -1000ad6c: 930d str r3, [sp, #52] ; 0x34 -1000ad6e: f8d5 002e ldr.w r0, [r5, #46] ; 0x2e -1000ad72: f003 f881 bl 1000de78 -1000ad76: f8d5 2032 ldr.w r2, [r5, #50] ; 0x32 -1000ad7a: 9b0d ldr r3, [sp, #52] ; 0x34 -1000ad7c: 920a str r2, [sp, #40] ; 0x28 -1000ad7e: f8d5 102a ldr.w r1, [r5, #42] ; 0x2a -1000ad82: f001 0103 and.w r1, r1, #3 -1000ad86: 9109 str r1, [sp, #36] ; 0x24 -1000ad88: f9b5 2028 ldrsh.w r2, [r5, #40] ; 0x28 -1000ad8c: f8cd a01c str.w sl, [sp, #28] -1000ad90: 9208 str r2, [sp, #32] -1000ad92: f895 2027 ldrb.w r2, [r5, #39] ; 0x27 -1000ad96: 4649 mov r1, r9 -1000ad98: 9206 str r2, [sp, #24] -1000ad9a: f895 2026 ldrb.w r2, [r5, #38] ; 0x26 -1000ad9e: 9205 str r2, [sp, #20] -1000ada0: f895 2025 ldrb.w r2, [r5, #37] ; 0x25 -1000ada4: 9204 str r2, [sp, #16] -1000ada6: f895 2024 ldrb.w r2, [r5, #36] ; 0x24 -1000adaa: 9203 str r2, [sp, #12] -1000adac: f895 2023 ldrb.w r2, [r5, #35] ; 0x23 -1000adb0: 9202 str r2, [sp, #8] -1000adb2: f895 2022 ldrb.w r2, [r5, #34] ; 0x22 -1000adb6: e88d 0005 stmia.w sp, {r0, r2} -1000adba: 465a mov r2, fp -1000adbc: 4630 mov r0, r6 -1000adbe: f00f fea9 bl 1001ab14 -1000adc2: 8aa3 ldrh r3, [r4, #20] -1000adc4: 4418 add r0, r3 -1000adc6: 68a3 ldr r3, [r4, #8] -1000adc8: 82a0 strh r0, [r4, #20] -1000adca: 3301 adds r3, #1 -1000adcc: 60a3 str r3, [r4, #8] -1000adce: 7a3a ldrb r2, [r7, #8] -1000add0: 4293 cmp r3, r2 -1000add2: f4ff af74 bcc.w 1000acbe -1000add6: f003 fb83 bl 1000e4e0 -1000adda: 6823 ldr r3, [r4, #0] -1000addc: f023 0380 bic.w r3, r3, #128 ; 0x80 -1000ade0: 6023 str r3, [r4, #0] -1000ade2: e78f b.n 1000ad04 -1000ade4: 1004aa08 .word 0x1004aa08 -1000ade8: 1000aca5 .word 0x1000aca5 -1000adec: 1003f9f4 .word 0x1003f9f4 -1000adf0: 1003fa06 .word 0x1003fa06 - -1000adf4 : -1000adf4: b5f0 push {r4, r5, r6, r7, lr} -1000adf6: 460d mov r5, r1 -1000adf8: b087 sub sp, #28 -1000adfa: 4606 mov r6, r0 -1000adfc: 6b44 ldr r4, [r0, #52] ; 0x34 -1000adfe: 213d movs r1, #61 ; 0x3d -1000ae00: 4628 mov r0, r5 -1000ae02: f00f fedd bl 1001abc0 -1000ae06: b148 cbz r0, 1000ae1c -1000ae08: 4602 mov r2, r0 -1000ae0a: 2300 movs r3, #0 -1000ae0c: 4629 mov r1, r5 -1000ae0e: f802 3b01 strb.w r3, [r2], #1 -1000ae12: 4630 mov r0, r6 -1000ae14: f001 f992 bl 1000c13c -1000ae18: b007 add sp, #28 -1000ae1a: bdf0 pop {r4, r5, r6, r7, pc} -1000ae1c: 4998 ldr r1, [pc, #608] ; (1000b080 ) -1000ae1e: 4628 mov r0, r5 -1000ae20: f7ff fb89 bl 1000a536 -1000ae24: b150 cbz r0, 1000ae3c -1000ae26: 8aa3 ldrh r3, [r4, #20] -1000ae28: 6920 ldr r0, [r4, #16] -1000ae2a: 68a2 ldr r2, [r4, #8] -1000ae2c: 4418 add r0, r3 -1000ae2e: 4995 ldr r1, [pc, #596] ; (1000b084 ) -1000ae30: f00f fe70 bl 1001ab14 -1000ae34: 8aa3 ldrh r3, [r4, #20] -1000ae36: 4418 add r0, r3 -1000ae38: 82a0 strh r0, [r4, #20] -1000ae3a: e7ed b.n 1000ae18 -1000ae3c: 4992 ldr r1, [pc, #584] ; (1000b088 ) -1000ae3e: 4628 mov r0, r5 -1000ae40: f7ff fb79 bl 1000a536 -1000ae44: b150 cbz r0, 1000ae5c -1000ae46: 8aa3 ldrh r3, [r4, #20] -1000ae48: 6920 ldr r0, [r4, #16] -1000ae4a: 68e2 ldr r2, [r4, #12] -1000ae4c: 4418 add r0, r3 -1000ae4e: 498d ldr r1, [pc, #564] ; (1000b084 ) -1000ae50: f00f fe60 bl 1001ab14 -1000ae54: 8aa3 ldrh r3, [r4, #20] -1000ae56: 4418 add r0, r3 -1000ae58: 82a0 strh r0, [r4, #20] -1000ae5a: e7dd b.n 1000ae18 -1000ae5c: 498b ldr r1, [pc, #556] ; (1000b08c ) -1000ae5e: 4628 mov r0, r5 -1000ae60: f7ff fb69 bl 1000a536 -1000ae64: 2800 cmp r0, #0 -1000ae66: f000 8170 beq.w 1000b14a -1000ae6a: 1cee adds r6, r5, #3 -1000ae6c: 4988 ldr r1, [pc, #544] ; (1000b090 ) -1000ae6e: 4630 mov r0, r6 -1000ae70: f7ff fb61 bl 1000a536 -1000ae74: 2800 cmp r0, #0 -1000ae76: f000 8144 beq.w 1000b102 -1000ae7a: f105 0608 add.w r6, r5, #8 -1000ae7e: 4985 ldr r1, [pc, #532] ; (1000b094 ) -1000ae80: 4630 mov r0, r6 -1000ae82: f7ff fb58 bl 1000a536 -1000ae86: 2800 cmp r0, #0 -1000ae88: d034 beq.n 1000aef4 -1000ae8a: 350c adds r5, #12 -1000ae8c: 4982 ldr r1, [pc, #520] ; (1000b098 ) -1000ae8e: 4628 mov r0, r5 -1000ae90: f7ff fb51 bl 1000a536 -1000ae94: b158 cbz r0, 1000aeae -1000ae96: 8aa3 ldrh r3, [r4, #20] -1000ae98: 6920 ldr r0, [r4, #16] -1000ae9a: 4a80 ldr r2, [pc, #512] ; (1000b09c ) -1000ae9c: 4418 add r0, r3 -1000ae9e: 7812 ldrb r2, [r2, #0] -1000aea0: 497f ldr r1, [pc, #508] ; (1000b0a0 ) -1000aea2: f00f fe37 bl 1001ab14 -1000aea6: 8aa3 ldrh r3, [r4, #20] -1000aea8: 4418 add r0, r3 -1000aeaa: 82a0 strh r0, [r4, #20] -1000aeac: e7b4 b.n 1000ae18 -1000aeae: 497d ldr r1, [pc, #500] ; (1000b0a4 ) -1000aeb0: 4628 mov r0, r5 -1000aeb2: f7ff fb40 bl 1000a536 -1000aeb6: b158 cbz r0, 1000aed0 -1000aeb8: 8aa3 ldrh r3, [r4, #20] -1000aeba: 6920 ldr r0, [r4, #16] -1000aebc: 4a77 ldr r2, [pc, #476] ; (1000b09c ) -1000aebe: 4418 add r0, r3 -1000aec0: 6892 ldr r2, [r2, #8] -1000aec2: 4977 ldr r1, [pc, #476] ; (1000b0a0 ) -1000aec4: f00f fe26 bl 1001ab14 -1000aec8: 8aa3 ldrh r3, [r4, #20] -1000aeca: 4418 add r0, r3 -1000aecc: 82a0 strh r0, [r4, #20] -1000aece: e7a3 b.n 1000ae18 -1000aed0: 4975 ldr r1, [pc, #468] ; (1000b0a8 ) -1000aed2: 4628 mov r0, r5 -1000aed4: f7ff fb2f bl 1000a536 -1000aed8: 2800 cmp r0, #0 -1000aeda: d09d beq.n 1000ae18 -1000aedc: 8aa3 ldrh r3, [r4, #20] -1000aede: 6920 ldr r0, [r4, #16] -1000aee0: 4a6e ldr r2, [pc, #440] ; (1000b09c ) -1000aee2: 4418 add r0, r3 -1000aee4: 7b12 ldrb r2, [r2, #12] -1000aee6: 496e ldr r1, [pc, #440] ; (1000b0a0 ) -1000aee8: f00f fe14 bl 1001ab14 -1000aeec: 8aa3 ldrh r3, [r4, #20] -1000aeee: 4418 add r0, r3 -1000aef0: 82a0 strh r0, [r4, #20] -1000aef2: e791 b.n 1000ae18 -1000aef4: 496d ldr r1, [pc, #436] ; (1000b0ac ) -1000aef6: 4630 mov r0, r6 -1000aef8: f7ff fb1d bl 1000a536 -1000aefc: 2800 cmp r0, #0 -1000aefe: d046 beq.n 1000af8e -1000af00: 350b adds r5, #11 -1000af02: 4965 ldr r1, [pc, #404] ; (1000b098 ) -1000af04: 4628 mov r0, r5 -1000af06: f7ff fb16 bl 1000a536 -1000af0a: b158 cbz r0, 1000af24 -1000af0c: 8aa3 ldrh r3, [r4, #20] -1000af0e: 6920 ldr r0, [r4, #16] -1000af10: 4a67 ldr r2, [pc, #412] ; (1000b0b0 ) -1000af12: 4418 add r0, r3 -1000af14: 7812 ldrb r2, [r2, #0] -1000af16: 4962 ldr r1, [pc, #392] ; (1000b0a0 ) -1000af18: f00f fdfc bl 1001ab14 -1000af1c: 8aa3 ldrh r3, [r4, #20] -1000af1e: 4418 add r0, r3 -1000af20: 82a0 strh r0, [r4, #20] -1000af22: e779 b.n 1000ae18 -1000af24: 4963 ldr r1, [pc, #396] ; (1000b0b4 ) -1000af26: 4628 mov r0, r5 -1000af28: f7ff fb05 bl 1000a536 -1000af2c: b158 cbz r0, 1000af46 -1000af2e: 8aa3 ldrh r3, [r4, #20] -1000af30: 6920 ldr r0, [r4, #16] -1000af32: 4a5f ldr r2, [pc, #380] ; (1000b0b0 ) -1000af34: 4418 add r0, r3 -1000af36: 68d2 ldr r2, [r2, #12] -1000af38: 4959 ldr r1, [pc, #356] ; (1000b0a0 ) -1000af3a: f00f fdeb bl 1001ab14 -1000af3e: 8aa3 ldrh r3, [r4, #20] -1000af40: 4418 add r0, r3 -1000af42: 82a0 strh r0, [r4, #20] -1000af44: e768 b.n 1000ae18 -1000af46: 495c ldr r1, [pc, #368] ; (1000b0b8 ) -1000af48: 4628 mov r0, r5 -1000af4a: f7ff faf4 bl 1000a536 -1000af4e: b158 cbz r0, 1000af68 -1000af50: 8aa3 ldrh r3, [r4, #20] -1000af52: 6920 ldr r0, [r4, #16] -1000af54: 4a56 ldr r2, [pc, #344] ; (1000b0b0 ) -1000af56: 4418 add r0, r3 -1000af58: 6912 ldr r2, [r2, #16] -1000af5a: 4951 ldr r1, [pc, #324] ; (1000b0a0 ) -1000af5c: f00f fdda bl 1001ab14 -1000af60: 8aa3 ldrh r3, [r4, #20] -1000af62: 4418 add r0, r3 -1000af64: 82a0 strh r0, [r4, #20] -1000af66: e757 b.n 1000ae18 -1000af68: 494f ldr r1, [pc, #316] ; (1000b0a8 ) -1000af6a: 4628 mov r0, r5 -1000af6c: f7ff fae3 bl 1000a536 -1000af70: 2800 cmp r0, #0 -1000af72: f43f af51 beq.w 1000ae18 -1000af76: 8aa3 ldrh r3, [r4, #20] -1000af78: 6920 ldr r0, [r4, #16] -1000af7a: 4a4d ldr r2, [pc, #308] ; (1000b0b0 ) -1000af7c: 4418 add r0, r3 -1000af7e: 6892 ldr r2, [r2, #8] -1000af80: 4947 ldr r1, [pc, #284] ; (1000b0a0 ) -1000af82: f00f fdc7 bl 1001ab14 -1000af86: 8aa3 ldrh r3, [r4, #20] -1000af88: 4418 add r0, r3 -1000af8a: 82a0 strh r0, [r4, #20] -1000af8c: e744 b.n 1000ae18 -1000af8e: 494b ldr r1, [pc, #300] ; (1000b0bc ) -1000af90: 4630 mov r0, r6 -1000af92: f7ff fad0 bl 1000a536 -1000af96: 2800 cmp r0, #0 -1000af98: d035 beq.n 1000b006 -1000af9a: 350d adds r5, #13 -1000af9c: 493e ldr r1, [pc, #248] ; (1000b098 ) -1000af9e: 4628 mov r0, r5 -1000afa0: f7ff fac9 bl 1000a536 -1000afa4: b158 cbz r0, 1000afbe -1000afa6: 8aa3 ldrh r3, [r4, #20] -1000afa8: 6920 ldr r0, [r4, #16] -1000afaa: 4a45 ldr r2, [pc, #276] ; (1000b0c0 ) -1000afac: 4418 add r0, r3 -1000afae: 7812 ldrb r2, [r2, #0] -1000afb0: 493b ldr r1, [pc, #236] ; (1000b0a0 ) -1000afb2: f00f fdaf bl 1001ab14 -1000afb6: 8aa3 ldrh r3, [r4, #20] -1000afb8: 4418 add r0, r3 -1000afba: 82a0 strh r0, [r4, #20] -1000afbc: e72c b.n 1000ae18 -1000afbe: 4941 ldr r1, [pc, #260] ; (1000b0c4 ) -1000afc0: 4628 mov r0, r5 -1000afc2: f7ff fab8 bl 1000a536 -1000afc6: b158 cbz r0, 1000afe0 -1000afc8: 8aa3 ldrh r3, [r4, #20] -1000afca: 6920 ldr r0, [r4, #16] -1000afcc: 4a3c ldr r2, [pc, #240] ; (1000b0c0 ) -1000afce: 4418 add r0, r3 -1000afd0: 7a52 ldrb r2, [r2, #9] -1000afd2: 4933 ldr r1, [pc, #204] ; (1000b0a0 ) -1000afd4: f00f fd9e bl 1001ab14 -1000afd8: 8aa3 ldrh r3, [r4, #20] -1000afda: 4418 add r0, r3 -1000afdc: 82a0 strh r0, [r4, #20] -1000afde: e71b b.n 1000ae18 -1000afe0: 4939 ldr r1, [pc, #228] ; (1000b0c8 ) -1000afe2: 4628 mov r0, r5 -1000afe4: f7ff faa7 bl 1000a536 -1000afe8: 2800 cmp r0, #0 -1000afea: f43f af15 beq.w 1000ae18 -1000afee: 8aa3 ldrh r3, [r4, #20] -1000aff0: 6920 ldr r0, [r4, #16] -1000aff2: 4a33 ldr r2, [pc, #204] ; (1000b0c0 ) -1000aff4: 4418 add r0, r3 -1000aff6: 7a12 ldrb r2, [r2, #8] -1000aff8: 4929 ldr r1, [pc, #164] ; (1000b0a0 ) -1000affa: f00f fd8b bl 1001ab14 -1000affe: 8aa3 ldrh r3, [r4, #20] -1000b000: 4418 add r0, r3 -1000b002: 82a0 strh r0, [r4, #20] -1000b004: e708 b.n 1000ae18 -1000b006: 4931 ldr r1, [pc, #196] ; (1000b0cc ) -1000b008: 4630 mov r0, r6 -1000b00a: f7ff fa94 bl 1000a536 -1000b00e: 2800 cmp r0, #0 -1000b010: f43f af02 beq.w 1000ae18 -1000b014: 350e adds r5, #14 -1000b016: 4920 ldr r1, [pc, #128] ; (1000b098 ) -1000b018: 4628 mov r0, r5 -1000b01a: f7ff fa8c bl 1000a536 -1000b01e: b158 cbz r0, 1000b038 -1000b020: 8aa3 ldrh r3, [r4, #20] -1000b022: 6920 ldr r0, [r4, #16] -1000b024: 4a2a ldr r2, [pc, #168] ; (1000b0d0 ) -1000b026: 4418 add r0, r3 -1000b028: 7812 ldrb r2, [r2, #0] -1000b02a: 491d ldr r1, [pc, #116] ; (1000b0a0 ) -1000b02c: f00f fd72 bl 1001ab14 -1000b030: 8aa3 ldrh r3, [r4, #20] -1000b032: 4418 add r0, r3 -1000b034: 82a0 strh r0, [r4, #20] -1000b036: e6ef b.n 1000ae18 -1000b038: 4926 ldr r1, [pc, #152] ; (1000b0d4 ) -1000b03a: 4628 mov r0, r5 -1000b03c: f7ff fa7b bl 1000a536 -1000b040: b158 cbz r0, 1000b05a -1000b042: 8aa3 ldrh r3, [r4, #20] -1000b044: 6920 ldr r0, [r4, #16] -1000b046: 4a22 ldr r2, [pc, #136] ; (1000b0d0 ) -1000b048: 4418 add r0, r3 -1000b04a: 7852 ldrb r2, [r2, #1] -1000b04c: 4914 ldr r1, [pc, #80] ; (1000b0a0 ) -1000b04e: f00f fd61 bl 1001ab14 -1000b052: 8aa3 ldrh r3, [r4, #20] -1000b054: 4418 add r0, r3 -1000b056: 82a0 strh r0, [r4, #20] -1000b058: e6de b.n 1000ae18 -1000b05a: 491f ldr r1, [pc, #124] ; (1000b0d8 ) -1000b05c: 4628 mov r0, r5 -1000b05e: f7ff fa6a bl 1000a536 -1000b062: 2800 cmp r0, #0 -1000b064: d03a beq.n 1000b0dc -1000b066: 8aa3 ldrh r3, [r4, #20] -1000b068: 6920 ldr r0, [r4, #16] -1000b06a: 4a19 ldr r2, [pc, #100] ; (1000b0d0 ) -1000b06c: 4418 add r0, r3 -1000b06e: 7892 ldrb r2, [r2, #2] -1000b070: 490b ldr r1, [pc, #44] ; (1000b0a0 ) -1000b072: f00f fd4f bl 1001ab14 -1000b076: 8aa3 ldrh r3, [r4, #20] -1000b078: 4418 add r0, r3 -1000b07a: 82a0 strh r0, [r4, #20] -1000b07c: e6cc b.n 1000ae18 -1000b07e: bf00 nop -1000b080: 1003f894 .word 0x1003f894 -1000b084: 1003f7a6 .word 0x1003f7a6 -1000b088: 1003f7ad .word 0x1003f7ad -1000b08c: 1003f7b2 .word 0x1003f7b2 -1000b090: 1003f7b6 .word 0x1003f7b6 -1000b094: 1003f7bc .word 0x1003f7bc -1000b098: 1003f7c1 .word 0x1003f7c1 -1000b09c: 1004a58c .word 0x1004a58c -1000b0a0: 1004052a .word 0x1004052a -1000b0a4: 1003f7c6 .word 0x1003f7c6 -1000b0a8: 1003f7cf .word 0x1003f7cf -1000b0ac: 1003f7da .word 0x1003f7da -1000b0b0: 1004a570 .word 0x1004a570 -1000b0b4: 1003f7de .word 0x1003f7de -1000b0b8: 1003f7e2 .word 0x1003f7e2 -1000b0bc: 1003f7e6 .word 0x1003f7e6 -1000b0c0: 1004a59c .word 0x1004a59c -1000b0c4: 1003f7ec .word 0x1003f7ec -1000b0c8: 1003f7f1 .word 0x1003f7f1 -1000b0cc: 1003f7fb .word 0x1003f7fb -1000b0d0: 1004a564 .word 0x1004a564 -1000b0d4: 1003f802 .word 0x1003f802 -1000b0d8: 1003f806 .word 0x1003f806 -1000b0dc: 499a ldr r1, [pc, #616] ; (1000b348 ) -1000b0de: 4628 mov r0, r5 -1000b0e0: f7ff fa29 bl 1000a536 -1000b0e4: 2800 cmp r0, #0 -1000b0e6: f43f ae97 beq.w 1000ae18 -1000b0ea: 8aa3 ldrh r3, [r4, #20] -1000b0ec: 6920 ldr r0, [r4, #16] -1000b0ee: 4a97 ldr r2, [pc, #604] ; (1000b34c ) -1000b0f0: 4418 add r0, r3 -1000b0f2: 78d2 ldrb r2, [r2, #3] -1000b0f4: 4996 ldr r1, [pc, #600] ; (1000b350 ) -1000b0f6: f00f fd0d bl 1001ab14 -1000b0fa: 8aa3 ldrh r3, [r4, #20] -1000b0fc: 4418 add r0, r3 -1000b0fe: 82a0 strh r0, [r4, #20] -1000b100: e68a b.n 1000ae18 -1000b102: 4994 ldr r1, [pc, #592] ; (1000b354 ) -1000b104: 4630 mov r0, r6 -1000b106: f7ff fa16 bl 1000a536 -1000b10a: b158 cbz r0, 1000b124 -1000b10c: 8aa3 ldrh r3, [r4, #20] -1000b10e: 6920 ldr r0, [r4, #16] -1000b110: 4a91 ldr r2, [pc, #580] ; (1000b358 ) -1000b112: 4418 add r0, r3 -1000b114: 7d12 ldrb r2, [r2, #20] -1000b116: 498e ldr r1, [pc, #568] ; (1000b350 ) -1000b118: f00f fcfc bl 1001ab14 -1000b11c: 8aa3 ldrh r3, [r4, #20] -1000b11e: 4418 add r0, r3 -1000b120: 82a0 strh r0, [r4, #20] -1000b122: e679 b.n 1000ae18 -1000b124: 498d ldr r1, [pc, #564] ; (1000b35c ) -1000b126: 4630 mov r0, r6 -1000b128: f7ff fa05 bl 1000a536 -1000b12c: 2800 cmp r0, #0 -1000b12e: f43f ae73 beq.w 1000ae18 -1000b132: 8aa3 ldrh r3, [r4, #20] -1000b134: 6920 ldr r0, [r4, #16] -1000b136: 4a88 ldr r2, [pc, #544] ; (1000b358 ) -1000b138: 4418 add r0, r3 -1000b13a: 6892 ldr r2, [r2, #8] -1000b13c: 4984 ldr r1, [pc, #528] ; (1000b350 ) -1000b13e: f00f fce9 bl 1001ab14 -1000b142: 8aa3 ldrh r3, [r4, #20] -1000b144: 4418 add r0, r3 -1000b146: 82a0 strh r0, [r4, #20] -1000b148: e666 b.n 1000ae18 -1000b14a: 4985 ldr r1, [pc, #532] ; (1000b360 ) -1000b14c: 4628 mov r0, r5 -1000b14e: f7ff f9f2 bl 1000a536 -1000b152: b330 cbz r0, 1000b1a2 -1000b154: 3504 adds r5, #4 -1000b156: 4983 ldr r1, [pc, #524] ; (1000b364 ) -1000b158: 4628 mov r0, r5 -1000b15a: f7ff f9ec bl 1000a536 -1000b15e: b118 cbz r0, 1000b168 -1000b160: 4630 mov r0, r6 -1000b162: f7ff fd9f bl 1000aca4 -1000b166: e657 b.n 1000ae18 -1000b168: 68a3 ldr r3, [r4, #8] -1000b16a: 4628 mov r0, r5 -1000b16c: f023 0303 bic.w r3, r3, #3 -1000b170: 60a3 str r3, [r4, #8] -1000b172: 497d ldr r1, [pc, #500] ; (1000b368 ) -1000b174: f7ff f9df bl 1000a536 -1000b178: 8aa3 ldrh r3, [r4, #20] -1000b17a: 6925 ldr r5, [r4, #16] -1000b17c: b160 cbz r0, 1000b198 -1000b17e: 68a2 ldr r2, [r4, #8] -1000b180: 18e8 adds r0, r5, r3 -1000b182: 6812 ldr r2, [r2, #0] -1000b184: 4979 ldr r1, [pc, #484] ; (1000b36c ) -1000b186: f00f fcc5 bl 1001ab14 -1000b18a: 8aa3 ldrh r3, [r4, #20] -1000b18c: 4418 add r0, r3 -1000b18e: 82a0 strh r0, [r4, #20] -1000b190: 68a3 ldr r3, [r4, #8] -1000b192: 3304 adds r3, #4 -1000b194: 60a3 str r3, [r4, #8] -1000b196: e63f b.n 1000ae18 -1000b198: 1c5a adds r2, r3, #1 -1000b19a: 82a2 strh r2, [r4, #20] -1000b19c: 223f movs r2, #63 ; 0x3f -1000b19e: 54ea strb r2, [r5, r3] -1000b1a0: e7f6 b.n 1000b190 -1000b1a2: 4973 ldr r1, [pc, #460] ; (1000b370 ) -1000b1a4: 4628 mov r0, r5 -1000b1a6: f7ff f9c6 bl 1000a536 -1000b1aa: 2800 cmp r0, #0 -1000b1ac: f000 819a beq.w 1000b4e4 -1000b1b0: 1d2e adds r6, r5, #4 -1000b1b2: 4970 ldr r1, [pc, #448] ; (1000b374 ) -1000b1b4: 4630 mov r0, r6 -1000b1b6: f7ff f9be bl 1000a536 -1000b1ba: b160 cbz r0, 1000b1d6 -1000b1bc: 6923 ldr r3, [r4, #16] -1000b1be: 8aa5 ldrh r5, [r4, #20] -1000b1c0: 441d add r5, r3 -1000b1c2: f002 fe15 bl 1000ddf0 -1000b1c6: 4601 mov r1, r0 -1000b1c8: 4628 mov r0, r5 -1000b1ca: f7ff f9a9 bl 1000a520 -1000b1ce: 8aa3 ldrh r3, [r4, #20] -1000b1d0: 4418 add r0, r3 -1000b1d2: 82a0 strh r0, [r4, #20] -1000b1d4: e620 b.n 1000ae18 -1000b1d6: 4968 ldr r1, [pc, #416] ; (1000b378 ) -1000b1d8: 4630 mov r0, r6 -1000b1da: f7ff f9ac bl 1000a536 -1000b1de: b168 cbz r0, 1000b1fc -1000b1e0: 6923 ldr r3, [r4, #16] -1000b1e2: 8aa5 ldrh r5, [r4, #20] -1000b1e4: 441d add r5, r3 -1000b1e6: f00f fc41 bl 1001aa6c -1000b1ea: 4964 ldr r1, [pc, #400] ; (1000b37c ) -1000b1ec: 4602 mov r2, r0 -1000b1ee: 4628 mov r0, r5 -1000b1f0: f00f fc90 bl 1001ab14 -1000b1f4: 8aa3 ldrh r3, [r4, #20] -1000b1f6: 4418 add r0, r3 -1000b1f8: 82a0 strh r0, [r4, #20] -1000b1fa: e60d b.n 1000ae18 -1000b1fc: 4960 ldr r1, [pc, #384] ; (1000b380 ) -1000b1fe: 4630 mov r0, r6 -1000b200: f7ff f999 bl 1000a536 -1000b204: b188 cbz r0, 1000b22a -1000b206: 495f ldr r1, [pc, #380] ; (1000b384 ) -1000b208: 8aa0 ldrh r0, [r4, #20] -1000b20a: 794b ldrb r3, [r1, #5] -1000b20c: 790a ldrb r2, [r1, #4] -1000b20e: 021b lsls r3, r3, #8 -1000b210: ea43 4302 orr.w r3, r3, r2, lsl #16 -1000b214: 6925 ldr r5, [r4, #16] -1000b216: 798a ldrb r2, [r1, #6] -1000b218: 4428 add r0, r5 -1000b21a: 431a orrs r2, r3 -1000b21c: 4957 ldr r1, [pc, #348] ; (1000b37c ) -1000b21e: f00f fc79 bl 1001ab14 -1000b222: 8aa3 ldrh r3, [r4, #20] -1000b224: 4418 add r0, r3 -1000b226: 82a0 strh r0, [r4, #20] -1000b228: e5f6 b.n 1000ae18 -1000b22a: 4957 ldr r1, [pc, #348] ; (1000b388 ) -1000b22c: 4630 mov r0, r6 -1000b22e: f7ff f982 bl 1000a536 -1000b232: b170 cbz r0, 1000b252 -1000b234: 6923 ldr r3, [r4, #16] -1000b236: 8aa5 ldrh r5, [r4, #20] -1000b238: 4852 ldr r0, [pc, #328] ; (1000b384 ) -1000b23a: 441d add r5, r3 -1000b23c: f00c fde0 bl 10017e00 -1000b240: 4952 ldr r1, [pc, #328] ; (1000b38c ) -1000b242: 4602 mov r2, r0 -1000b244: 4628 mov r0, r5 -1000b246: f00f fc65 bl 1001ab14 -1000b24a: 8aa3 ldrh r3, [r4, #20] -1000b24c: 4418 add r0, r3 -1000b24e: 82a0 strh r0, [r4, #20] -1000b250: e5e2 b.n 1000ae18 -1000b252: 494f ldr r1, [pc, #316] ; (1000b390 ) -1000b254: 4630 mov r0, r6 -1000b256: f7ff f96e bl 1000a536 -1000b25a: b148 cbz r0, 1000b270 -1000b25c: 8aa3 ldrh r3, [r4, #20] -1000b25e: 6920 ldr r0, [r4, #16] -1000b260: 494c ldr r1, [pc, #304] ; (1000b394 ) -1000b262: 4418 add r0, r3 -1000b264: f7ff f95c bl 1000a520 -1000b268: 8aa3 ldrh r3, [r4, #20] -1000b26a: 4418 add r0, r3 -1000b26c: 82a0 strh r0, [r4, #20] -1000b26e: e5d3 b.n 1000ae18 -1000b270: 4949 ldr r1, [pc, #292] ; (1000b398 ) -1000b272: 4630 mov r0, r6 -1000b274: f7ff f95f bl 1000a536 -1000b278: b148 cbz r0, 1000b28e -1000b27a: 8aa3 ldrh r3, [r4, #20] -1000b27c: 6920 ldr r0, [r4, #16] -1000b27e: 4947 ldr r1, [pc, #284] ; (1000b39c ) -1000b280: 4418 add r0, r3 -1000b282: f7ff f94d bl 1000a520 -1000b286: 8aa3 ldrh r3, [r4, #20] -1000b288: 4418 add r0, r3 -1000b28a: 82a0 strh r0, [r4, #20] -1000b28c: e5c4 b.n 1000ae18 -1000b28e: 4944 ldr r1, [pc, #272] ; (1000b3a0 ) -1000b290: 4630 mov r0, r6 -1000b292: f7ff f950 bl 1000a536 -1000b296: b148 cbz r0, 1000b2ac -1000b298: 8aa3 ldrh r3, [r4, #20] -1000b29a: 6920 ldr r0, [r4, #16] -1000b29c: 4941 ldr r1, [pc, #260] ; (1000b3a4 ) -1000b29e: 4418 add r0, r3 -1000b2a0: f7ff f93e bl 1000a520 -1000b2a4: 8aa3 ldrh r3, [r4, #20] -1000b2a6: 4418 add r0, r3 -1000b2a8: 82a0 strh r0, [r4, #20] -1000b2aa: e5b5 b.n 1000ae18 -1000b2ac: 493e ldr r1, [pc, #248] ; (1000b3a8 ) -1000b2ae: 4630 mov r0, r6 -1000b2b0: f7ff f941 bl 1000a536 -1000b2b4: b168 cbz r0, 1000b2d2 -1000b2b6: 6923 ldr r3, [r4, #16] -1000b2b8: 8aa5 ldrh r5, [r4, #20] -1000b2ba: 441d add r5, r3 -1000b2bc: f009 ffea bl 10015294 -1000b2c0: 4932 ldr r1, [pc, #200] ; (1000b38c ) -1000b2c2: 4602 mov r2, r0 -1000b2c4: 4628 mov r0, r5 -1000b2c6: f00f fc25 bl 1001ab14 -1000b2ca: 8aa3 ldrh r3, [r4, #20] -1000b2cc: 4418 add r0, r3 -1000b2ce: 82a0 strh r0, [r4, #20] -1000b2d0: e5a2 b.n 1000ae18 -1000b2d2: 4936 ldr r1, [pc, #216] ; (1000b3ac ) -1000b2d4: 4630 mov r0, r6 -1000b2d6: f7ff f92e bl 1000a536 -1000b2da: b168 cbz r0, 1000b2f8 -1000b2dc: 6923 ldr r3, [r4, #16] -1000b2de: 8aa5 ldrh r5, [r4, #20] -1000b2e0: 441d add r5, r3 -1000b2e2: f009 ffdd bl 100152a0 -1000b2e6: 4929 ldr r1, [pc, #164] ; (1000b38c ) -1000b2e8: 4602 mov r2, r0 -1000b2ea: 4628 mov r0, r5 -1000b2ec: f00f fc12 bl 1001ab14 -1000b2f0: 8aa3 ldrh r3, [r4, #20] -1000b2f2: 4418 add r0, r3 -1000b2f4: 82a0 strh r0, [r4, #20] -1000b2f6: e58f b.n 1000ae18 -1000b2f8: 492d ldr r1, [pc, #180] ; (1000b3b0 ) -1000b2fa: 4630 mov r0, r6 -1000b2fc: f7ff f91b bl 1000a536 -1000b300: b168 cbz r0, 1000b31e -1000b302: 6923 ldr r3, [r4, #16] -1000b304: 8aa5 ldrh r5, [r4, #20] -1000b306: 441d add r5, r3 -1000b308: f00c fb4c bl 100179a4 -1000b30c: 491f ldr r1, [pc, #124] ; (1000b38c ) -1000b30e: 4602 mov r2, r0 -1000b310: 4628 mov r0, r5 -1000b312: f00f fbff bl 1001ab14 -1000b316: 8aa3 ldrh r3, [r4, #20] -1000b318: 4418 add r0, r3 -1000b31a: 82a0 strh r0, [r4, #20] -1000b31c: e57c b.n 1000ae18 -1000b31e: 4925 ldr r1, [pc, #148] ; (1000b3b4 ) -1000b320: 4630 mov r0, r6 -1000b322: f7ff f908 bl 1000a536 -1000b326: 2800 cmp r0, #0 -1000b328: d046 beq.n 1000b3b8 -1000b32a: 6923 ldr r3, [r4, #16] -1000b32c: 8aa5 ldrh r5, [r4, #20] -1000b32e: 441d add r5, r3 -1000b330: f00a ff70 bl 10016214 -1000b334: 4915 ldr r1, [pc, #84] ; (1000b38c ) -1000b336: 4602 mov r2, r0 -1000b338: 4628 mov r0, r5 -1000b33a: f00f fbeb bl 1001ab14 -1000b33e: 8aa3 ldrh r3, [r4, #20] -1000b340: 4418 add r0, r3 -1000b342: 82a0 strh r0, [r4, #20] -1000b344: e568 b.n 1000ae18 -1000b346: bf00 nop -1000b348: 1003ffbe .word 0x1003ffbe -1000b34c: 1004a564 .word 0x1004a564 -1000b350: 1004052a .word 0x1004052a -1000b354: 1003f80a .word 0x1003f80a -1000b358: 1004a5a8 .word 0x1004a5a8 -1000b35c: 1003f813 .word 0x1003f813 -1000b360: 1003f81c .word 0x1003f81c -1000b364: 1003fee7 .word 0x1003fee7 -1000b368: 1003faa0 .word 0x1003faa0 -1000b36c: 1003f7a6 .word 0x1003f7a6 -1000b370: 1003f821 .word 0x1003f821 -1000b374: 1003f826 .word 0x1003f826 -1000b378: 1003f82a .word 0x1003f82a -1000b37c: 1003f79b .word 0x1003f79b -1000b380: 1003f82e .word 0x1003f82e -1000b384: 1004b4ec .word 0x1004b4ec -1000b388: 1003f832 .word 0x1003f832 -1000b38c: 1003f838 .word 0x1003f838 -1000b390: 1003f83b .word 0x1003f83b -1000b394: 1003f842 .word 0x1003f842 -1000b398: 1003f848 .word 0x1003f848 -1000b39c: 1003f84f .word 0x1003f84f -1000b3a0: 1003f855 .word 0x1003f855 -1000b3a4: 1003f85c .word 0x1003f85c -1000b3a8: 1003f862 .word 0x1003f862 -1000b3ac: 1003f867 .word 0x1003f867 -1000b3b0: 1003f86d .word 0x1003f86d -1000b3b4: 1003f875 .word 0x1003f875 -1000b3b8: 499c ldr r1, [pc, #624] ; (1000b62c ) -1000b3ba: 4630 mov r0, r6 -1000b3bc: f7ff f8bb bl 1000a536 -1000b3c0: b188 cbz r0, 1000b3e6 -1000b3c2: 4b9b ldr r3, [pc, #620] ; (1000b630 ) -1000b3c4: 781b ldrb r3, [r3, #0] -1000b3c6: 2b00 cmp r3, #0 -1000b3c8: f43f ad26 beq.w 1000ae18 -1000b3cc: 4a99 ldr r2, [pc, #612] ; (1000b634 ) -1000b3ce: 8aa0 ldrh r0, [r4, #20] -1000b3d0: 6925 ldr r5, [r4, #16] -1000b3d2: 6813 ldr r3, [r2, #0] -1000b3d4: 4998 ldr r1, [pc, #608] ; (1000b638 ) -1000b3d6: 6852 ldr r2, [r2, #4] -1000b3d8: 4428 add r0, r5 -1000b3da: f00f fb9b bl 1001ab14 -1000b3de: 8aa3 ldrh r3, [r4, #20] -1000b3e0: 4418 add r0, r3 -1000b3e2: 82a0 strh r0, [r4, #20] -1000b3e4: e518 b.n 1000ae18 -1000b3e6: 4995 ldr r1, [pc, #596] ; (1000b63c ) -1000b3e8: 4630 mov r0, r6 -1000b3ea: f7ff f8a4 bl 1000a536 -1000b3ee: b168 cbz r0, 1000b40c -1000b3f0: 6923 ldr r3, [r4, #16] -1000b3f2: 8aa5 ldrh r5, [r4, #20] -1000b3f4: 441d add r5, r3 -1000b3f6: 4b92 ldr r3, [pc, #584] ; (1000b640 ) -1000b3f8: 4798 blx r3 -1000b3fa: 4992 ldr r1, [pc, #584] ; (1000b644 ) -1000b3fc: 4602 mov r2, r0 -1000b3fe: 4628 mov r0, r5 -1000b400: f00f fb88 bl 1001ab14 -1000b404: 8aa3 ldrh r3, [r4, #20] -1000b406: 4418 add r0, r3 -1000b408: 82a0 strh r0, [r4, #20] -1000b40a: e505 b.n 1000ae18 -1000b40c: 498e ldr r1, [pc, #568] ; (1000b648 ) -1000b40e: 4630 mov r0, r6 -1000b410: f7ff f891 bl 1000a536 -1000b414: b158 cbz r0, 1000b42e -1000b416: 8aa2 ldrh r2, [r4, #20] -1000b418: 6921 ldr r1, [r4, #16] -1000b41a: 1c53 adds r3, r2, #1 -1000b41c: 82a3 strh r3, [r4, #20] -1000b41e: 4b8b ldr r3, [pc, #556] ; (1000b64c ) -1000b420: 781b ldrb r3, [r3, #0] -1000b422: f003 0301 and.w r3, r3, #1 -1000b426: f1c3 0331 rsb r3, r3, #49 ; 0x31 -1000b42a: 548b strb r3, [r1, r2] -1000b42c: e4f4 b.n 1000ae18 -1000b42e: 4988 ldr r1, [pc, #544] ; (1000b650 ) -1000b430: 4630 mov r0, r6 -1000b432: f7ff f880 bl 1000a536 -1000b436: b128 cbz r0, 1000b444 -1000b438: 22c8 movs r2, #200 ; 0xc8 -1000b43a: 2100 movs r1, #0 -1000b43c: 4885 ldr r0, [pc, #532] ; (1000b654 ) -1000b43e: f7fe fff7 bl 1000a430 -1000b442: e4e9 b.n 1000ae18 -1000b444: 4984 ldr r1, [pc, #528] ; (1000b658 ) -1000b446: 4630 mov r0, r6 -1000b448: f7ff f875 bl 1000a536 -1000b44c: b180 cbz r0, 1000b470 -1000b44e: 6923 ldr r3, [r4, #16] -1000b450: 8aa6 ldrh r6, [r4, #20] -1000b452: 1de8 adds r0, r5, #7 -1000b454: 441e add r6, r3 -1000b456: f7ff f914 bl 1000a682 -1000b45a: f020 0003 bic.w r0, r0, #3 -1000b45e: 6802 ldr r2, [r0, #0] -1000b460: 497e ldr r1, [pc, #504] ; (1000b65c ) -1000b462: 4630 mov r0, r6 -1000b464: f00f fb56 bl 1001ab14 -1000b468: 8aa3 ldrh r3, [r4, #20] -1000b46a: 4418 add r0, r3 -1000b46c: 82a0 strh r0, [r4, #20] -1000b46e: e4d3 b.n 1000ae18 -1000b470: 497b ldr r1, [pc, #492] ; (1000b660 ) -1000b472: 4630 mov r0, r6 -1000b474: f7ff f85f bl 1000a536 -1000b478: b188 cbz r0, 1000b49e -1000b47a: 6923 ldr r3, [r4, #16] -1000b47c: 8aa6 ldrh r6, [r4, #20] -1000b47e: f105 0008 add.w r0, r5, #8 -1000b482: 441e add r6, r3 -1000b484: f7ff f8fd bl 1000a682 -1000b488: f020 0003 bic.w r0, r0, #3 -1000b48c: 6802 ldr r2, [r0, #0] -1000b48e: 4975 ldr r1, [pc, #468] ; (1000b664 ) -1000b490: 4630 mov r0, r6 -1000b492: f00f fb3f bl 1001ab14 -1000b496: 8aa3 ldrh r3, [r4, #20] -1000b498: 4418 add r0, r3 -1000b49a: 82a0 strh r0, [r4, #20] -1000b49c: e4bc b.n 1000ae18 -1000b49e: 4630 mov r0, r6 -1000b4a0: 4971 ldr r1, [pc, #452] ; (1000b668 ) -1000b4a2: f7ff f848 bl 1000a536 -1000b4a6: 8aa5 ldrh r5, [r4, #20] -1000b4a8: 6926 ldr r6, [r4, #16] -1000b4aa: b1b0 cbz r0, 1000b4da -1000b4ac: 4b6f ldr r3, [pc, #444] ; (1000b66c ) -1000b4ae: 681b ldr r3, [r3, #0] -1000b4b0: b10b cbz r3, 1000b4b6 -1000b4b2: 685b ldr r3, [r3, #4] -1000b4b4: 9305 str r3, [sp, #20] -1000b4b6: f89d 1017 ldrb.w r1, [sp, #23] -1000b4ba: f89d 3015 ldrb.w r3, [sp, #21] -1000b4be: 9101 str r1, [sp, #4] -1000b4c0: f89d 1016 ldrb.w r1, [sp, #22] -1000b4c4: f89d 2014 ldrb.w r2, [sp, #20] -1000b4c8: 9100 str r1, [sp, #0] -1000b4ca: 1970 adds r0, r6, r5 -1000b4cc: 4968 ldr r1, [pc, #416] ; (1000b670 ) -1000b4ce: f00f fb21 bl 1001ab14 -1000b4d2: 8aa3 ldrh r3, [r4, #20] -1000b4d4: 4418 add r0, r3 -1000b4d6: 82a0 strh r0, [r4, #20] -1000b4d8: e49e b.n 1000ae18 -1000b4da: 1c6b adds r3, r5, #1 -1000b4dc: 82a3 strh r3, [r4, #20] -1000b4de: 233f movs r3, #63 ; 0x3f -1000b4e0: 5573 strb r3, [r6, r5] -1000b4e2: e499 b.n 1000ae18 -1000b4e4: 4963 ldr r1, [pc, #396] ; (1000b674 ) -1000b4e6: 4628 mov r0, r5 -1000b4e8: f7ff f825 bl 1000a536 -1000b4ec: 2800 cmp r0, #0 -1000b4ee: f000 8089 beq.w 1000b604 -1000b4f2: 1d2e adds r6, r5, #4 -1000b4f4: 4960 ldr r1, [pc, #384] ; (1000b678 ) -1000b4f6: 4630 mov r0, r6 -1000b4f8: f7ff f81d bl 1000a536 -1000b4fc: 2800 cmp r0, #0 -1000b4fe: d048 beq.n 1000b592 -1000b500: 3508 adds r5, #8 -1000b502: 495e ldr r1, [pc, #376] ; (1000b67c ) -1000b504: 4628 mov r0, r5 -1000b506: f7ff f816 bl 1000a536 -1000b50a: b158 cbz r0, 1000b524 -1000b50c: 8aa3 ldrh r3, [r4, #20] -1000b50e: 6920 ldr r0, [r4, #16] -1000b510: 4a5b ldr r2, [pc, #364] ; (1000b680 ) -1000b512: 4418 add r0, r3 -1000b514: 8892 ldrh r2, [r2, #4] -1000b516: 494b ldr r1, [pc, #300] ; (1000b644 ) -1000b518: f00f fafc bl 1001ab14 -1000b51c: 8aa3 ldrh r3, [r4, #20] -1000b51e: 4418 add r0, r3 -1000b520: 82a0 strh r0, [r4, #20] -1000b522: e479 b.n 1000ae18 -1000b524: 4957 ldr r1, [pc, #348] ; (1000b684 ) -1000b526: 4628 mov r0, r5 -1000b528: f7ff f805 bl 1000a536 -1000b52c: b158 cbz r0, 1000b546 -1000b52e: 8aa3 ldrh r3, [r4, #20] -1000b530: 6920 ldr r0, [r4, #16] -1000b532: 4a53 ldr r2, [pc, #332] ; (1000b680 ) -1000b534: 4418 add r0, r3 -1000b536: 88d2 ldrh r2, [r2, #6] -1000b538: 4942 ldr r1, [pc, #264] ; (1000b644 ) -1000b53a: f00f faeb bl 1001ab14 -1000b53e: 8aa3 ldrh r3, [r4, #20] -1000b540: 4418 add r0, r3 -1000b542: 82a0 strh r0, [r4, #20] -1000b544: e468 b.n 1000ae18 -1000b546: 4950 ldr r1, [pc, #320] ; (1000b688 ) -1000b548: 4628 mov r0, r5 -1000b54a: f7fe fff4 bl 1000a536 -1000b54e: b158 cbz r0, 1000b568 -1000b550: 8aa3 ldrh r3, [r4, #20] -1000b552: 6920 ldr r0, [r4, #16] -1000b554: 4a4a ldr r2, [pc, #296] ; (1000b680 ) -1000b556: 4418 add r0, r3 -1000b558: 8912 ldrh r2, [r2, #8] -1000b55a: 493a ldr r1, [pc, #232] ; (1000b644 ) -1000b55c: f00f fada bl 1001ab14 -1000b560: 8aa3 ldrh r3, [r4, #20] -1000b562: 4418 add r0, r3 -1000b564: 82a0 strh r0, [r4, #20] -1000b566: e457 b.n 1000ae18 -1000b568: 4948 ldr r1, [pc, #288] ; (1000b68c ) -1000b56a: 4628 mov r0, r5 -1000b56c: f7fe ffe3 bl 1000a536 -1000b570: 8aa3 ldrh r3, [r4, #20] -1000b572: 6922 ldr r2, [r4, #16] -1000b574: 1c59 adds r1, r3, #1 -1000b576: 82a1 strh r1, [r4, #20] -1000b578: b140 cbz r0, 1000b58c -1000b57a: 4941 ldr r1, [pc, #260] ; (1000b680 ) -1000b57c: 7809 ldrb r1, [r1, #0] -1000b57e: f011 0f08 tst.w r1, #8 -1000b582: bf14 ite ne -1000b584: 2131 movne r1, #49 ; 0x31 -1000b586: 2130 moveq r1, #48 ; 0x30 -1000b588: 54d1 strb r1, [r2, r3] -1000b58a: e445 b.n 1000ae18 -1000b58c: 213f movs r1, #63 ; 0x3f -1000b58e: 54d1 strb r1, [r2, r3] -1000b590: e442 b.n 1000ae18 -1000b592: 493f ldr r1, [pc, #252] ; (1000b690 ) -1000b594: 4630 mov r0, r6 -1000b596: f7fe ffce bl 1000a536 -1000b59a: b160 cbz r0, 1000b5b6 -1000b59c: 8aa3 ldrh r3, [r4, #20] -1000b59e: 6922 ldr r2, [r4, #16] -1000b5a0: 1c59 adds r1, r3, #1 -1000b5a2: 82a1 strh r1, [r4, #20] -1000b5a4: 4936 ldr r1, [pc, #216] ; (1000b680 ) -1000b5a6: 7809 ldrb r1, [r1, #0] -1000b5a8: f011 0f01 tst.w r1, #1 -1000b5ac: bf14 ite ne -1000b5ae: 2131 movne r1, #49 ; 0x31 -1000b5b0: 2130 moveq r1, #48 ; 0x30 -1000b5b2: 54d1 strb r1, [r2, r3] -1000b5b4: e430 b.n 1000ae18 -1000b5b6: 4937 ldr r1, [pc, #220] ; (1000b694 ) -1000b5b8: 4630 mov r0, r6 -1000b5ba: f7fe ffbc bl 1000a536 -1000b5be: b160 cbz r0, 1000b5da -1000b5c0: 8aa3 ldrh r3, [r4, #20] -1000b5c2: 6922 ldr r2, [r4, #16] -1000b5c4: 1c59 adds r1, r3, #1 -1000b5c6: 82a1 strh r1, [r4, #20] -1000b5c8: 492d ldr r1, [pc, #180] ; (1000b680 ) -1000b5ca: 7809 ldrb r1, [r1, #0] -1000b5cc: f011 0f02 tst.w r1, #2 -1000b5d0: bf14 ite ne -1000b5d2: 2131 movne r1, #49 ; 0x31 -1000b5d4: 2130 moveq r1, #48 ; 0x30 -1000b5d6: 54d1 strb r1, [r2, r3] -1000b5d8: e41e b.n 1000ae18 -1000b5da: 491b ldr r1, [pc, #108] ; (1000b648 ) -1000b5dc: 4630 mov r0, r6 -1000b5de: f7fe ffaa bl 1000a536 -1000b5e2: 8aa3 ldrh r3, [r4, #20] -1000b5e4: 6922 ldr r2, [r4, #16] -1000b5e6: 1c59 adds r1, r3, #1 -1000b5e8: 82a1 strh r1, [r4, #20] -1000b5ea: b140 cbz r0, 1000b5fe -1000b5ec: 4924 ldr r1, [pc, #144] ; (1000b680 ) -1000b5ee: 7809 ldrb r1, [r1, #0] -1000b5f0: f011 0f04 tst.w r1, #4 -1000b5f4: bf14 ite ne -1000b5f6: 2131 movne r1, #49 ; 0x31 -1000b5f8: 2130 moveq r1, #48 ; 0x30 -1000b5fa: 54d1 strb r1, [r2, r3] -1000b5fc: e40c b.n 1000ae18 -1000b5fe: 213f movs r1, #63 ; 0x3f -1000b600: 54d1 strb r1, [r2, r3] -1000b602: e409 b.n 1000ae18 -1000b604: 4924 ldr r1, [pc, #144] ; (1000b698 ) -1000b606: 4628 mov r0, r5 -1000b608: f7fe ff95 bl 1000a536 -1000b60c: 2800 cmp r0, #0 -1000b60e: f000 83e1 beq.w 1000bdd4 -1000b612: 1d6e adds r6, r5, #5 -1000b614: 4921 ldr r1, [pc, #132] ; (1000b69c ) -1000b616: 4630 mov r0, r6 -1000b618: f7fe ff8d bl 1000a536 -1000b61c: 2800 cmp r0, #0 -1000b61e: d03f beq.n 1000b6a0 -1000b620: f04f 30ff mov.w r0, #4294967295 -1000b624: f002 fba0 bl 1000dd68 -1000b628: f7ff bbf6 b.w 1000ae18 -1000b62c: 1003f872 .word 0x1003f872 -1000b630: 1004a784 .word 0x1004a784 -1000b634: 40080560 .word 0x40080560 -1000b638: 1003f87a .word 0x1003f87a -1000b63c: 1003f885 .word 0x1003f885 -1000b640: 00000355 .word 0x00000355 -1000b644: 1003f838 .word 0x1003f838 -1000b648: 1003f88c .word 0x1003f88c -1000b64c: 1004bae6 .word 0x1004bae6 -1000b650: 1003f892 .word 0x1003f892 -1000b654: 100182d5 .word 0x100182d5 -1000b658: 1003faa0 .word 0x1003faa0 -1000b65c: 1003f7a6 .word 0x1003f7a6 -1000b660: 1003f89a .word 0x1003f89a -1000b664: 1004052a .word 0x1004052a -1000b668: 1003f964 .word 0x1003f964 -1000b66c: 1004b0f8 .word 0x1004b0f8 -1000b670: 1003f89f .word 0x1003f89f -1000b674: 1003f8ab .word 0x1003f8ab -1000b678: 1003f8b0 .word 0x1003f8b0 -1000b67c: 1003f8b5 .word 0x1003f8b5 -1000b680: 10044bbc .word 0x10044bbc -1000b684: 1003f8ba .word 0x1003f8ba -1000b688: 1003f8c0 .word 0x1003f8c0 -1000b68c: 1003f8c6 .word 0x1003f8c6 -1000b690: 1003fa91 .word 0x1003fa91 -1000b694: 1003f8ca .word 0x1003f8ca -1000b698: 1003f8d1 .word 0x1003f8d1 -1000b69c: 1003f8d7 .word 0x1003f8d7 -1000b6a0: 4995 ldr r1, [pc, #596] ; (1000b8f8 ) -1000b6a2: 4630 mov r0, r6 -1000b6a4: f7fe ff47 bl 1000a536 -1000b6a8: b138 cbz r0, 1000b6ba -1000b6aa: 4b94 ldr r3, [pc, #592] ; (1000b8fc ) -1000b6ac: 22c8 movs r2, #200 ; 0xc8 -1000b6ae: 7819 ldrb r1, [r3, #0] -1000b6b0: 4893 ldr r0, [pc, #588] ; (1000b900 ) -1000b6b2: f7fe febd bl 1000a430 -1000b6b6: f7ff bbaf b.w 1000ae18 -1000b6ba: 4992 ldr r1, [pc, #584] ; (1000b904 ) -1000b6bc: 4630 mov r0, r6 -1000b6be: f7fe ff3a bl 1000a536 -1000b6c2: b160 cbz r0, 1000b6de -1000b6c4: 8aa3 ldrh r3, [r4, #20] -1000b6c6: 6920 ldr r0, [r4, #16] -1000b6c8: 4a8f ldr r2, [pc, #572] ; (1000b908 ) -1000b6ca: 4418 add r0, r3 -1000b6cc: 7812 ldrb r2, [r2, #0] -1000b6ce: 498f ldr r1, [pc, #572] ; (1000b90c ) -1000b6d0: f00f fa20 bl 1001ab14 -1000b6d4: 8aa3 ldrh r3, [r4, #20] -1000b6d6: 4418 add r0, r3 -1000b6d8: 82a0 strh r0, [r4, #20] -1000b6da: f7ff bb9d b.w 1000ae18 -1000b6de: 498c ldr r1, [pc, #560] ; (1000b910 ) -1000b6e0: 4630 mov r0, r6 -1000b6e2: f7fe ff28 bl 1000a536 -1000b6e6: b160 cbz r0, 1000b702 -1000b6e8: 8aa3 ldrh r3, [r4, #20] -1000b6ea: 6920 ldr r0, [r4, #16] -1000b6ec: 4a83 ldr r2, [pc, #524] ; (1000b8fc ) -1000b6ee: 4418 add r0, r3 -1000b6f0: 7812 ldrb r2, [r2, #0] -1000b6f2: 4986 ldr r1, [pc, #536] ; (1000b90c ) -1000b6f4: f00f fa0e bl 1001ab14 -1000b6f8: 8aa3 ldrh r3, [r4, #20] -1000b6fa: 4418 add r0, r3 -1000b6fc: 82a0 strh r0, [r4, #20] -1000b6fe: f7ff bb8b b.w 1000ae18 -1000b702: 4984 ldr r1, [pc, #528] ; (1000b914 ) -1000b704: 4630 mov r0, r6 -1000b706: f7fe ff16 bl 1000a536 -1000b70a: b160 cbz r0, 1000b726 -1000b70c: 8aa3 ldrh r3, [r4, #20] -1000b70e: 6920 ldr r0, [r4, #16] -1000b710: 4a7a ldr r2, [pc, #488] ; (1000b8fc ) -1000b712: 4418 add r0, r3 -1000b714: 7912 ldrb r2, [r2, #4] -1000b716: 497d ldr r1, [pc, #500] ; (1000b90c ) -1000b718: f00f f9fc bl 1001ab14 -1000b71c: 8aa3 ldrh r3, [r4, #20] -1000b71e: 4418 add r0, r3 -1000b720: 82a0 strh r0, [r4, #20] -1000b722: f7ff bb79 b.w 1000ae18 -1000b726: 497c ldr r1, [pc, #496] ; (1000b918 ) -1000b728: 4630 mov r0, r6 -1000b72a: f7fe ff04 bl 1000a536 -1000b72e: b160 cbz r0, 1000b74a -1000b730: 8aa3 ldrh r3, [r4, #20] -1000b732: 6920 ldr r0, [r4, #16] -1000b734: 4a71 ldr r2, [pc, #452] ; (1000b8fc ) -1000b736: 4418 add r0, r3 -1000b738: 78d2 ldrb r2, [r2, #3] -1000b73a: 4978 ldr r1, [pc, #480] ; (1000b91c ) -1000b73c: f00f f9ea bl 1001ab14 -1000b740: 8aa3 ldrh r3, [r4, #20] -1000b742: 4418 add r0, r3 -1000b744: 82a0 strh r0, [r4, #20] -1000b746: f7ff bb67 b.w 1000ae18 -1000b74a: 4975 ldr r1, [pc, #468] ; (1000b920 ) -1000b74c: 4630 mov r0, r6 -1000b74e: f7fe fef2 bl 1000a536 -1000b752: b160 cbz r0, 1000b76e -1000b754: 8aa3 ldrh r3, [r4, #20] -1000b756: 6920 ldr r0, [r4, #16] -1000b758: 4a68 ldr r2, [pc, #416] ; (1000b8fc ) -1000b75a: 4418 add r0, r3 -1000b75c: 7952 ldrb r2, [r2, #5] -1000b75e: 496f ldr r1, [pc, #444] ; (1000b91c ) -1000b760: f00f f9d8 bl 1001ab14 -1000b764: 8aa3 ldrh r3, [r4, #20] -1000b766: 4418 add r0, r3 -1000b768: 82a0 strh r0, [r4, #20] -1000b76a: f7ff bb55 b.w 1000ae18 -1000b76e: 496d ldr r1, [pc, #436] ; (1000b924 ) -1000b770: 4630 mov r0, r6 -1000b772: f7fe fee0 bl 1000a536 -1000b776: b160 cbz r0, 1000b792 -1000b778: 8aa3 ldrh r3, [r4, #20] -1000b77a: 6920 ldr r0, [r4, #16] -1000b77c: 4a5f ldr r2, [pc, #380] ; (1000b8fc ) -1000b77e: 4418 add r0, r3 -1000b780: 7992 ldrb r2, [r2, #6] -1000b782: 4966 ldr r1, [pc, #408] ; (1000b91c ) -1000b784: f00f f9c6 bl 1001ab14 -1000b788: 8aa3 ldrh r3, [r4, #20] -1000b78a: 4418 add r0, r3 -1000b78c: 82a0 strh r0, [r4, #20] -1000b78e: f7ff bb43 b.w 1000ae18 -1000b792: 4965 ldr r1, [pc, #404] ; (1000b928 ) -1000b794: 4630 mov r0, r6 -1000b796: f7fe fece bl 1000a536 -1000b79a: b160 cbz r0, 1000b7b6 -1000b79c: 8aa3 ldrh r3, [r4, #20] -1000b79e: 6920 ldr r0, [r4, #16] -1000b7a0: 4a56 ldr r2, [pc, #344] ; (1000b8fc ) -1000b7a2: 4418 add r0, r3 -1000b7a4: 7852 ldrb r2, [r2, #1] -1000b7a6: 495d ldr r1, [pc, #372] ; (1000b91c ) -1000b7a8: f00f f9b4 bl 1001ab14 -1000b7ac: 8aa3 ldrh r3, [r4, #20] -1000b7ae: 4418 add r0, r3 -1000b7b0: 82a0 strh r0, [r4, #20] -1000b7b2: f7ff bb31 b.w 1000ae18 -1000b7b6: 495d ldr r1, [pc, #372] ; (1000b92c ) -1000b7b8: 4630 mov r0, r6 -1000b7ba: f7fe febc bl 1000a536 -1000b7be: b160 cbz r0, 1000b7da -1000b7c0: 8aa3 ldrh r3, [r4, #20] -1000b7c2: 6920 ldr r0, [r4, #16] -1000b7c4: 4a4d ldr r2, [pc, #308] ; (1000b8fc ) -1000b7c6: 4418 add r0, r3 -1000b7c8: 7892 ldrb r2, [r2, #2] -1000b7ca: 4954 ldr r1, [pc, #336] ; (1000b91c ) -1000b7cc: f00f f9a2 bl 1001ab14 -1000b7d0: 8aa3 ldrh r3, [r4, #20] -1000b7d2: 4418 add r0, r3 -1000b7d4: 82a0 strh r0, [r4, #20] -1000b7d6: f7ff bb1f b.w 1000ae18 -1000b7da: 4955 ldr r1, [pc, #340] ; (1000b930 ) -1000b7dc: 4630 mov r0, r6 -1000b7de: f7fe feaa bl 1000a536 -1000b7e2: 2800 cmp r0, #0 -1000b7e4: f000 8162 beq.w 1000baac -1000b7e8: 3508 adds r5, #8 -1000b7ea: 4952 ldr r1, [pc, #328] ; (1000b934 ) -1000b7ec: 4628 mov r0, r5 -1000b7ee: f7fe fea2 bl 1000a536 -1000b7f2: b168 cbz r0, 1000b810 -1000b7f4: 2300 movs r3, #0 -1000b7f6: 4950 ldr r1, [pc, #320] ; (1000b938 ) -1000b7f8: f881 3020 strb.w r3, [r1, #32] -1000b7fc: 8aa3 ldrh r3, [r4, #20] -1000b7fe: 6920 ldr r0, [r4, #16] -1000b800: 4418 add r0, r3 -1000b802: f7fe fe8d bl 1000a520 -1000b806: 8aa3 ldrh r3, [r4, #20] -1000b808: 4418 add r0, r3 -1000b80a: 82a0 strh r0, [r4, #20] -1000b80c: f7ff bb04 b.w 1000ae18 -1000b810: 494a ldr r1, [pc, #296] ; (1000b93c ) -1000b812: 4628 mov r0, r5 -1000b814: f7fe fe8f bl 1000a536 -1000b818: b170 cbz r0, 1000b838 -1000b81a: 2300 movs r3, #0 -1000b81c: 4946 ldr r1, [pc, #280] ; (1000b938 ) -1000b81e: f881 3061 strb.w r3, [r1, #97] ; 0x61 -1000b822: 8aa3 ldrh r3, [r4, #20] -1000b824: 6920 ldr r0, [r4, #16] -1000b826: 3121 adds r1, #33 ; 0x21 -1000b828: 4418 add r0, r3 -1000b82a: f7fe fe79 bl 1000a520 -1000b82e: 8aa3 ldrh r3, [r4, #20] -1000b830: 4418 add r0, r3 -1000b832: 82a0 strh r0, [r4, #20] -1000b834: f7ff baf0 b.w 1000ae18 -1000b838: 4941 ldr r1, [pc, #260] ; (1000b940 ) -1000b83a: 4628 mov r0, r5 -1000b83c: f7fe fe7b bl 1000a536 -1000b840: b168 cbz r0, 1000b85e -1000b842: 8aa3 ldrh r3, [r4, #20] -1000b844: 6920 ldr r0, [r4, #16] -1000b846: 4a3c ldr r2, [pc, #240] ; (1000b938 ) -1000b848: 4418 add r0, r3 -1000b84a: f892 2066 ldrb.w r2, [r2, #102] ; 0x66 -1000b84e: 4933 ldr r1, [pc, #204] ; (1000b91c ) -1000b850: f00f f960 bl 1001ab14 -1000b854: 8aa3 ldrh r3, [r4, #20] -1000b856: 4418 add r0, r3 -1000b858: 82a0 strh r0, [r4, #20] -1000b85a: f7ff badd b.w 1000ae18 -1000b85e: 4939 ldr r1, [pc, #228] ; (1000b944 ) -1000b860: 4628 mov r0, r5 -1000b862: f7fe fe68 bl 1000a536 -1000b866: b168 cbz r0, 1000b884 -1000b868: 8aa3 ldrh r3, [r4, #20] -1000b86a: 6920 ldr r0, [r4, #16] -1000b86c: 4a32 ldr r2, [pc, #200] ; (1000b938 ) -1000b86e: 4418 add r0, r3 -1000b870: f892 2067 ldrb.w r2, [r2, #103] ; 0x67 -1000b874: 4929 ldr r1, [pc, #164] ; (1000b91c ) -1000b876: f00f f94d bl 1001ab14 -1000b87a: 8aa3 ldrh r3, [r4, #20] -1000b87c: 4418 add r0, r3 -1000b87e: 82a0 strh r0, [r4, #20] -1000b880: f7ff baca b.w 1000ae18 -1000b884: 4930 ldr r1, [pc, #192] ; (1000b948 ) -1000b886: 4628 mov r0, r5 -1000b888: f7fe fe55 bl 1000a536 -1000b88c: b168 cbz r0, 1000b8aa -1000b88e: 8aa3 ldrh r3, [r4, #20] -1000b890: 6922 ldr r2, [r4, #16] -1000b892: 1c59 adds r1, r3, #1 -1000b894: 82a1 strh r1, [r4, #20] -1000b896: 4928 ldr r1, [pc, #160] ; (1000b938 ) -1000b898: f891 1065 ldrb.w r1, [r1, #101] ; 0x65 -1000b89c: 2900 cmp r1, #0 -1000b89e: bf14 ite ne -1000b8a0: 2131 movne r1, #49 ; 0x31 -1000b8a2: 2130 moveq r1, #48 ; 0x30 -1000b8a4: 54d1 strb r1, [r2, r3] -1000b8a6: f7ff bab7 b.w 1000ae18 -1000b8aa: 4928 ldr r1, [pc, #160] ; (1000b94c ) -1000b8ac: 4628 mov r0, r5 -1000b8ae: f7fe fe42 bl 1000a536 -1000b8b2: b160 cbz r0, 1000b8ce -1000b8b4: 8aa2 ldrh r2, [r4, #20] -1000b8b6: 6921 ldr r1, [r4, #16] -1000b8b8: 1c53 adds r3, r2, #1 -1000b8ba: 82a3 strh r3, [r4, #20] -1000b8bc: 4b1e ldr r3, [pc, #120] ; (1000b938 ) -1000b8be: f893 3064 ldrb.w r3, [r3, #100] ; 0x64 -1000b8c2: f003 0301 and.w r3, r3, #1 -1000b8c6: 3330 adds r3, #48 ; 0x30 -1000b8c8: 548b strb r3, [r1, r2] -1000b8ca: f7ff baa5 b.w 1000ae18 -1000b8ce: 4920 ldr r1, [pc, #128] ; (1000b950 ) -1000b8d0: 4628 mov r0, r5 -1000b8d2: f7fe fe30 bl 1000a536 -1000b8d6: 2800 cmp r0, #0 -1000b8d8: d03c beq.n 1000b954 -1000b8da: 8aa3 ldrh r3, [r4, #20] -1000b8dc: 6920 ldr r0, [r4, #16] -1000b8de: 4a16 ldr r2, [pc, #88] ; (1000b938 ) -1000b8e0: 4418 add r0, r3 -1000b8e2: f8b2 2062 ldrh.w r2, [r2, #98] ; 0x62 -1000b8e6: 490d ldr r1, [pc, #52] ; (1000b91c ) -1000b8e8: f00f f914 bl 1001ab14 -1000b8ec: 8aa3 ldrh r3, [r4, #20] -1000b8ee: 4418 add r0, r3 -1000b8f0: 82a0 strh r0, [r4, #20] -1000b8f2: f7ff ba91 b.w 1000ae18 -1000b8f6: bf00 nop -1000b8f8: 1003f8dd .word 0x1003f8dd -1000b8fc: 10044dc8 .word 0x10044dc8 -1000b900: 1000e16d .word 0x1000e16d -1000b904: 1003f8e4 .word 0x1003f8e4 -1000b908: 1004a784 .word 0x1004a784 -1000b90c: 1004052a .word 0x1004052a -1000b910: 1003f8e5 .word 0x1003f8e5 -1000b914: 1003f8ea .word 0x1003f8ea -1000b918: 1003f8ee .word 0x1003f8ee -1000b91c: 1003f838 .word 0x1003f838 -1000b920: 1003f8f4 .word 0x1003f8f4 -1000b924: 1003f8f9 .word 0x1003f8f9 -1000b928: 1003f8fe .word 0x1003f8fe -1000b92c: 1003f903 .word 0x1003f903 -1000b930: 1003f90b .word 0x1003f90b -1000b934: 1003f97e .word 0x1003f97e -1000b938: 10044d50 .word 0x10044d50 -1000b93c: 1003f90f .word 0x1003f90f -1000b940: 1003f913 .word 0x1003f913 -1000b944: 1003f917 .word 0x1003f917 -1000b948: 1003f91c .word 0x1003f91c -1000b94c: 1003f921 .word 0x1003f921 -1000b950: 1003f927 .word 0x1003f927 -1000b954: 499b ldr r1, [pc, #620] ; (1000bbc4 ) -1000b956: 4628 mov r0, r5 -1000b958: f7fe fded bl 1000a536 -1000b95c: b300 cbz r0, 1000b9a0 -1000b95e: 223c movs r2, #60 ; 0x3c -1000b960: 4b99 ldr r3, [pc, #612] ; (1000bbc8 ) -1000b962: 8aa0 ldrh r0, [r4, #20] -1000b964: 7819 ldrb r1, [r3, #0] -1000b966: 4b99 ldr r3, [pc, #612] ; (1000bbcc ) -1000b968: 6925 ldr r5, [r4, #16] -1000b96a: fb02 3101 mla r1, r2, r1, r3 -1000b96e: f891 6030 ldrb.w r6, [r1, #48] ; 0x30 -1000b972: f891 302c ldrb.w r3, [r1, #44] ; 0x2c -1000b976: f891 202b ldrb.w r2, [r1, #43] ; 0x2b -1000b97a: 9603 str r6, [sp, #12] -1000b97c: f891 602f ldrb.w r6, [r1, #47] ; 0x2f -1000b980: 4428 add r0, r5 -1000b982: 9602 str r6, [sp, #8] -1000b984: f891 602e ldrb.w r6, [r1, #46] ; 0x2e -1000b988: 9601 str r6, [sp, #4] -1000b98a: f891 102d ldrb.w r1, [r1, #45] ; 0x2d -1000b98e: 9100 str r1, [sp, #0] -1000b990: 498f ldr r1, [pc, #572] ; (1000bbd0 ) -1000b992: f00f f8bf bl 1001ab14 -1000b996: 8aa3 ldrh r3, [r4, #20] -1000b998: 4418 add r0, r3 -1000b99a: 82a0 strh r0, [r4, #20] -1000b99c: f7ff ba3c b.w 1000ae18 -1000b9a0: 498c ldr r1, [pc, #560] ; (1000bbd4 ) -1000b9a2: 4628 mov r0, r5 -1000b9a4: f7fe fdc7 bl 1000a536 -1000b9a8: b150 cbz r0, 1000b9c0 -1000b9aa: 8aa3 ldrh r3, [r4, #20] -1000b9ac: 6920 ldr r0, [r4, #16] -1000b9ae: 498a ldr r1, [pc, #552] ; (1000bbd8 ) -1000b9b0: 4418 add r0, r3 -1000b9b2: f7fe fdb5 bl 1000a520 -1000b9b6: 8aa3 ldrh r3, [r4, #20] -1000b9b8: 4418 add r0, r3 -1000b9ba: 82a0 strh r0, [r4, #20] -1000b9bc: f7ff ba2c b.w 1000ae18 -1000b9c0: 4986 ldr r1, [pc, #536] ; (1000bbdc ) -1000b9c2: 4628 mov r0, r5 -1000b9c4: f7fe fdb7 bl 1000a536 -1000b9c8: b160 cbz r0, 1000b9e4 -1000b9ca: 8aa3 ldrh r3, [r4, #20] -1000b9cc: 6920 ldr r0, [r4, #16] -1000b9ce: 4a84 ldr r2, [pc, #528] ; (1000bbe0 ) -1000b9d0: 4418 add r0, r3 -1000b9d2: 7b12 ldrb r2, [r2, #12] -1000b9d4: 4983 ldr r1, [pc, #524] ; (1000bbe4 ) -1000b9d6: f00f f89d bl 1001ab14 -1000b9da: 8aa3 ldrh r3, [r4, #20] -1000b9dc: 4418 add r0, r3 -1000b9de: 82a0 strh r0, [r4, #20] -1000b9e0: f7ff ba1a b.w 1000ae18 -1000b9e4: 4980 ldr r1, [pc, #512] ; (1000bbe8 ) -1000b9e6: 4628 mov r0, r5 -1000b9e8: f7fe fda5 bl 1000a536 -1000b9ec: b188 cbz r0, 1000ba12 -1000b9ee: 497c ldr r1, [pc, #496] ; (1000bbe0 ) -1000b9f0: 8aa0 ldrh r0, [r4, #20] -1000b9f2: 78ce ldrb r6, [r1, #3] -1000b9f4: 784b ldrb r3, [r1, #1] -1000b9f6: 780a ldrb r2, [r1, #0] -1000b9f8: 6925 ldr r5, [r4, #16] -1000b9fa: 9601 str r6, [sp, #4] -1000b9fc: 7889 ldrb r1, [r1, #2] -1000b9fe: 4428 add r0, r5 -1000ba00: 9100 str r1, [sp, #0] -1000ba02: 497a ldr r1, [pc, #488] ; (1000bbec ) -1000ba04: f00f f886 bl 1001ab14 -1000ba08: 8aa3 ldrh r3, [r4, #20] -1000ba0a: 4418 add r0, r3 -1000ba0c: 82a0 strh r0, [r4, #20] -1000ba0e: f7ff ba03 b.w 1000ae18 -1000ba12: 4977 ldr r1, [pc, #476] ; (1000bbf0 ) -1000ba14: 4628 mov r0, r5 -1000ba16: f7fe fd8e bl 1000a536 -1000ba1a: b188 cbz r0, 1000ba40 -1000ba1c: 4970 ldr r1, [pc, #448] ; (1000bbe0 ) -1000ba1e: 8aa0 ldrh r0, [r4, #20] -1000ba20: 7ace ldrb r6, [r1, #11] -1000ba22: 7a4b ldrb r3, [r1, #9] -1000ba24: 7a0a ldrb r2, [r1, #8] -1000ba26: 6925 ldr r5, [r4, #16] -1000ba28: 9601 str r6, [sp, #4] -1000ba2a: 7a89 ldrb r1, [r1, #10] -1000ba2c: 4428 add r0, r5 -1000ba2e: 9100 str r1, [sp, #0] -1000ba30: 496e ldr r1, [pc, #440] ; (1000bbec ) -1000ba32: f00f f86f bl 1001ab14 -1000ba36: 8aa3 ldrh r3, [r4, #20] -1000ba38: 4418 add r0, r3 -1000ba3a: 82a0 strh r0, [r4, #20] -1000ba3c: f7ff b9ec b.w 1000ae18 -1000ba40: 496c ldr r1, [pc, #432] ; (1000bbf4 ) -1000ba42: 4628 mov r0, r5 -1000ba44: f7fe fd77 bl 1000a536 -1000ba48: b188 cbz r0, 1000ba6e -1000ba4a: 4965 ldr r1, [pc, #404] ; (1000bbe0 ) -1000ba4c: 8aa0 ldrh r0, [r4, #20] -1000ba4e: 79ce ldrb r6, [r1, #7] -1000ba50: 794b ldrb r3, [r1, #5] -1000ba52: 790a ldrb r2, [r1, #4] -1000ba54: 6925 ldr r5, [r4, #16] -1000ba56: 9601 str r6, [sp, #4] -1000ba58: 7989 ldrb r1, [r1, #6] -1000ba5a: 4428 add r0, r5 -1000ba5c: 9100 str r1, [sp, #0] -1000ba5e: 4963 ldr r1, [pc, #396] ; (1000bbec ) -1000ba60: f00f f858 bl 1001ab14 -1000ba64: 8aa3 ldrh r3, [r4, #20] -1000ba66: 4418 add r0, r3 -1000ba68: 82a0 strh r0, [r4, #20] -1000ba6a: f7ff b9d5 b.w 1000ae18 -1000ba6e: 4962 ldr r1, [pc, #392] ; (1000bbf8 ) -1000ba70: 4628 mov r0, r5 -1000ba72: f7fe fd60 bl 1000a536 -1000ba76: 2800 cmp r0, #0 -1000ba78: f43f a9ce beq.w 1000ae18 -1000ba7c: 223c movs r2, #60 ; 0x3c -1000ba7e: 4b5f ldr r3, [pc, #380] ; (1000bbfc ) -1000ba80: 4852 ldr r0, [pc, #328] ; (1000bbcc ) -1000ba82: 781b ldrb r3, [r3, #0] -1000ba84: 6925 ldr r5, [r4, #16] -1000ba86: 435a muls r2, r3 -1000ba88: 3204 adds r2, #4 -1000ba8a: 1811 adds r1, r2, r0 -1000ba8c: 78ce ldrb r6, [r1, #3] -1000ba8e: 784b ldrb r3, [r1, #1] -1000ba90: 5c12 ldrb r2, [r2, r0] -1000ba92: 8aa0 ldrh r0, [r4, #20] -1000ba94: 9601 str r6, [sp, #4] -1000ba96: 7889 ldrb r1, [r1, #2] -1000ba98: 4428 add r0, r5 -1000ba9a: 9100 str r1, [sp, #0] -1000ba9c: 4953 ldr r1, [pc, #332] ; (1000bbec ) -1000ba9e: f00f f839 bl 1001ab14 -1000baa2: 8aa3 ldrh r3, [r4, #20] -1000baa4: 4418 add r0, r3 -1000baa6: 82a0 strh r0, [r4, #20] -1000baa8: f7ff b9b6 b.w 1000ae18 -1000baac: 4954 ldr r1, [pc, #336] ; (1000bc00 ) -1000baae: 4630 mov r0, r6 -1000bab0: f7fe fd41 bl 1000a536 -1000bab4: 2800 cmp r0, #0 -1000bab6: f43f a9af beq.w 1000ae18 -1000baba: 3508 adds r5, #8 -1000babc: 4951 ldr r1, [pc, #324] ; (1000bc04 ) -1000babe: 4628 mov r0, r5 -1000bac0: f7fe fd39 bl 1000a536 -1000bac4: b308 cbz r0, 1000bb0a -1000bac6: a805 add r0, sp, #20 -1000bac8: f001 fc92 bl 1000d3f0 -1000bacc: 8aa3 ldrh r3, [r4, #20] -1000bace: 6920 ldr r0, [r4, #16] -1000bad0: 9a05 ldr r2, [sp, #20] -1000bad2: 494d ldr r1, [pc, #308] ; (1000bc08 ) -1000bad4: 4418 add r0, r3 -1000bad6: f00f f81d bl 1001ab14 -1000bada: 8aa3 ldrh r3, [r4, #20] -1000badc: 4418 add r0, r3 -1000bade: 82a0 strh r0, [r4, #20] -1000bae0: 494a ldr r1, [pc, #296] ; (1000bc0c ) -1000bae2: 4628 mov r0, r5 -1000bae4: f7fe fd27 bl 1000a536 -1000bae8: 4606 mov r6, r0 -1000baea: 2800 cmp r0, #0 -1000baec: d02f beq.n 1000bb4e -1000baee: 2300 movs r3, #0 -1000baf0: 4947 ldr r1, [pc, #284] ; (1000bc10 ) -1000baf2: f881 3020 strb.w r3, [r1, #32] -1000baf6: 8aa3 ldrh r3, [r4, #20] -1000baf8: 6920 ldr r0, [r4, #16] -1000bafa: 4418 add r0, r3 -1000bafc: f7fe fd10 bl 1000a520 -1000bb00: 8aa3 ldrh r3, [r4, #20] -1000bb02: 4418 add r0, r3 -1000bb04: 82a0 strh r0, [r4, #20] -1000bb06: f7ff b987 b.w 1000ae18 -1000bb0a: 4942 ldr r1, [pc, #264] ; (1000bc14 ) -1000bb0c: 4628 mov r0, r5 -1000bb0e: f7fe fd12 bl 1000a536 -1000bb12: b128 cbz r0, 1000bb20 -1000bb14: 4a40 ldr r2, [pc, #256] ; (1000bc18 ) -1000bb16: 8aa3 ldrh r3, [r4, #20] -1000bb18: 6920 ldr r0, [r4, #16] -1000bb1a: 7812 ldrb r2, [r2, #0] -1000bb1c: 4931 ldr r1, [pc, #196] ; (1000bbe4 ) -1000bb1e: e7d9 b.n 1000bad4 -1000bb20: 493e ldr r1, [pc, #248] ; (1000bc1c ) -1000bb22: 4628 mov r0, r5 -1000bb24: f7fe fd07 bl 1000a536 -1000bb28: b128 cbz r0, 1000bb36 -1000bb2a: 4a39 ldr r2, [pc, #228] ; (1000bc10 ) -1000bb2c: 8aa3 ldrh r3, [r4, #20] -1000bb2e: 6920 ldr r0, [r4, #16] -1000bb30: f892 206a ldrb.w r2, [r2, #106] ; 0x6a -1000bb34: e7f2 b.n 1000bb1c -1000bb36: 493a ldr r1, [pc, #232] ; (1000bc20 ) -1000bb38: 4628 mov r0, r5 -1000bb3a: f7fe fcfc bl 1000a536 -1000bb3e: 2800 cmp r0, #0 -1000bb40: d0ce beq.n 1000bae0 -1000bb42: 4a33 ldr r2, [pc, #204] ; (1000bc10 ) -1000bb44: 8aa3 ldrh r3, [r4, #20] -1000bb46: 6920 ldr r0, [r4, #16] -1000bb48: f892 206b ldrb.w r2, [r2, #107] ; 0x6b -1000bb4c: e7e6 b.n 1000bb1c -1000bb4e: 4935 ldr r1, [pc, #212] ; (1000bc24 ) -1000bb50: 4628 mov r0, r5 -1000bb52: f7fe fcf0 bl 1000a536 -1000bb56: b168 cbz r0, 1000bb74 -1000bb58: 492d ldr r1, [pc, #180] ; (1000bc10 ) -1000bb5a: f881 6061 strb.w r6, [r1, #97] ; 0x61 -1000bb5e: 8aa3 ldrh r3, [r4, #20] -1000bb60: 6920 ldr r0, [r4, #16] -1000bb62: 3121 adds r1, #33 ; 0x21 -1000bb64: 4418 add r0, r3 -1000bb66: f7fe fcdb bl 1000a520 -1000bb6a: 8aa3 ldrh r3, [r4, #20] -1000bb6c: 4418 add r0, r3 -1000bb6e: 82a0 strh r0, [r4, #20] -1000bb70: f7ff b952 b.w 1000ae18 -1000bb74: 4913 ldr r1, [pc, #76] ; (1000bbc4 ) -1000bb76: 4628 mov r0, r5 -1000bb78: f7fe fcdd bl 1000a536 -1000bb7c: 2800 cmp r0, #0 -1000bb7e: d053 beq.n 1000bc28 -1000bb80: 223c movs r2, #60 ; 0x3c -1000bb82: 4b1e ldr r3, [pc, #120] ; (1000bbfc ) -1000bb84: 8aa0 ldrh r0, [r4, #20] -1000bb86: 7819 ldrb r1, [r3, #0] -1000bb88: 4b10 ldr r3, [pc, #64] ; (1000bbcc ) -1000bb8a: 6925 ldr r5, [r4, #16] -1000bb8c: fb02 3101 mla r1, r2, r1, r3 -1000bb90: f891 6030 ldrb.w r6, [r1, #48] ; 0x30 -1000bb94: f891 302c ldrb.w r3, [r1, #44] ; 0x2c -1000bb98: f891 202b ldrb.w r2, [r1, #43] ; 0x2b -1000bb9c: 9603 str r6, [sp, #12] -1000bb9e: f891 602f ldrb.w r6, [r1, #47] ; 0x2f -1000bba2: 4428 add r0, r5 -1000bba4: 9602 str r6, [sp, #8] -1000bba6: f891 602e ldrb.w r6, [r1, #46] ; 0x2e -1000bbaa: 9601 str r6, [sp, #4] -1000bbac: f891 102d ldrb.w r1, [r1, #45] ; 0x2d -1000bbb0: 9100 str r1, [sp, #0] -1000bbb2: 4907 ldr r1, [pc, #28] ; (1000bbd0 ) -1000bbb4: f00e ffae bl 1001ab14 -1000bbb8: 8aa3 ldrh r3, [r4, #20] -1000bbba: 4418 add r0, r3 -1000bbbc: 82a0 strh r0, [r4, #20] -1000bbbe: f7ff b92b b.w 1000ae18 -1000bbc2: bf00 nop -1000bbc4: 1003f92c .word 0x1003f92c -1000bbc8: 10044e56 .word 0x10044e56 -1000bbcc: 1004a984 .word 0x1004a984 -1000bbd0: 1003f930 .word 0x1003f930 -1000bbd4: 1003f94e .word 0x1003f94e -1000bbd8: 10044e78 .word 0x10044e78 -1000bbdc: 1003f957 .word 0x1003f957 -1000bbe0: 10044db8 .word 0x10044db8 -1000bbe4: 1003f838 .word 0x1003f838 -1000bbe8: 1003f964 .word 0x1003f964 -1000bbec: 1003f89f .word 0x1003f89f -1000bbf0: 1003f95c .word 0x1003f95c -1000bbf4: 1003f95f .word 0x1003f95f -1000bbf8: 1003f963 .word 0x1003f963 -1000bbfc: 1004aa06 .word 0x1004aa06 -1000bc00: 1003f7fe .word 0x1003f7fe -1000bc04: 1003f967 .word 0x1003f967 -1000bc08: 1004052a .word 0x1004052a -1000bc0c: 1003f97e .word 0x1003f97e -1000bc10: 10044dcf .word 0x10044dcf -1000bc14: 1003f96c .word 0x1003f96c -1000bc18: 1004aa05 .word 0x1004aa05 -1000bc1c: 1003f973 .word 0x1003f973 -1000bc20: 1003f978 .word 0x1003f978 -1000bc24: 1003f90f .word 0x1003f90f -1000bc28: 49a7 ldr r1, [pc, #668] ; (1000bec8 ) -1000bc2a: 4628 mov r0, r5 -1000bc2c: f7fe fc83 bl 1000a536 -1000bc30: b1d8 cbz r0, 1000bc6a -1000bc32: 49a6 ldr r1, [pc, #664] ; (1000becc ) -1000bc34: 8aa0 ldrh r0, [r4, #20] -1000bc36: f891 6067 ldrb.w r6, [r1, #103] ; 0x67 -1000bc3a: f891 3063 ldrb.w r3, [r1, #99] ; 0x63 -1000bc3e: f891 2062 ldrb.w r2, [r1, #98] ; 0x62 -1000bc42: 6925 ldr r5, [r4, #16] -1000bc44: 9603 str r6, [sp, #12] -1000bc46: f891 6066 ldrb.w r6, [r1, #102] ; 0x66 -1000bc4a: 4428 add r0, r5 -1000bc4c: 9602 str r6, [sp, #8] -1000bc4e: f891 6065 ldrb.w r6, [r1, #101] ; 0x65 -1000bc52: 9601 str r6, [sp, #4] -1000bc54: f891 1064 ldrb.w r1, [r1, #100] ; 0x64 -1000bc58: 9100 str r1, [sp, #0] -1000bc5a: 499d ldr r1, [pc, #628] ; (1000bed0 ) -1000bc5c: f00e ff5a bl 1001ab14 -1000bc60: 8aa3 ldrh r3, [r4, #20] -1000bc62: 4418 add r0, r3 -1000bc64: 82a0 strh r0, [r4, #20] -1000bc66: f7ff b8d7 b.w 1000ae18 -1000bc6a: 499a ldr r1, [pc, #616] ; (1000bed4 ) -1000bc6c: 4628 mov r0, r5 -1000bc6e: f7fe fc62 bl 1000a536 -1000bc72: b168 cbz r0, 1000bc90 -1000bc74: 8aa3 ldrh r3, [r4, #20] -1000bc76: 6920 ldr r0, [r4, #16] -1000bc78: 4a94 ldr r2, [pc, #592] ; (1000becc ) -1000bc7a: 4418 add r0, r3 -1000bc7c: f892 2068 ldrb.w r2, [r2, #104] ; 0x68 -1000bc80: 4995 ldr r1, [pc, #596] ; (1000bed8 ) -1000bc82: f00e ff47 bl 1001ab14 -1000bc86: 8aa3 ldrh r3, [r4, #20] -1000bc88: 4418 add r0, r3 -1000bc8a: 82a0 strh r0, [r4, #20] -1000bc8c: f7ff b8c4 b.w 1000ae18 -1000bc90: 4992 ldr r1, [pc, #584] ; (1000bedc ) -1000bc92: 4628 mov r0, r5 -1000bc94: f7fe fc4f bl 1000a536 -1000bc98: b168 cbz r0, 1000bcb6 -1000bc9a: 8aa3 ldrh r3, [r4, #20] -1000bc9c: 6920 ldr r0, [r4, #16] -1000bc9e: 4a8b ldr r2, [pc, #556] ; (1000becc ) -1000bca0: 4418 add r0, r3 -1000bca2: f892 206c ldrb.w r2, [r2, #108] ; 0x6c -1000bca6: 498e ldr r1, [pc, #568] ; (1000bee0 ) -1000bca8: f00e ff34 bl 1001ab14 -1000bcac: 8aa3 ldrh r3, [r4, #20] -1000bcae: 4418 add r0, r3 -1000bcb0: 82a0 strh r0, [r4, #20] -1000bcb2: f7ff b8b1 b.w 1000ae18 -1000bcb6: 498b ldr r1, [pc, #556] ; (1000bee4 ) -1000bcb8: 4628 mov r0, r5 -1000bcba: f7fe fc3c bl 1000a536 -1000bcbe: b168 cbz r0, 1000bcdc -1000bcc0: 8aa3 ldrh r3, [r4, #20] -1000bcc2: 6920 ldr r0, [r4, #16] -1000bcc4: 4a81 ldr r2, [pc, #516] ; (1000becc ) -1000bcc6: 4418 add r0, r3 -1000bcc8: f892 206d ldrb.w r2, [r2, #109] ; 0x6d -1000bccc: 4982 ldr r1, [pc, #520] ; (1000bed8 ) -1000bcce: f00e ff21 bl 1001ab14 -1000bcd2: 8aa3 ldrh r3, [r4, #20] -1000bcd4: 4418 add r0, r3 -1000bcd6: 82a0 strh r0, [r4, #20] -1000bcd8: f7ff b89e b.w 1000ae18 -1000bcdc: 4982 ldr r1, [pc, #520] ; (1000bee8 ) -1000bcde: 4628 mov r0, r5 -1000bce0: f7fe fc29 bl 1000a536 -1000bce4: b150 cbz r0, 1000bcfc -1000bce6: 8aa3 ldrh r3, [r4, #20] -1000bce8: 6920 ldr r0, [r4, #16] -1000bcea: 4980 ldr r1, [pc, #512] ; (1000beec ) -1000bcec: 4418 add r0, r3 -1000bcee: f7fe fc17 bl 1000a520 -1000bcf2: 8aa3 ldrh r3, [r4, #20] -1000bcf4: 4418 add r0, r3 -1000bcf6: 82a0 strh r0, [r4, #20] -1000bcf8: f7ff b88e b.w 1000ae18 -1000bcfc: 497c ldr r1, [pc, #496] ; (1000bef0 ) -1000bcfe: 4628 mov r0, r5 -1000bd00: f7fe fc19 bl 1000a536 -1000bd04: b168 cbz r0, 1000bd22 -1000bd06: 8aa3 ldrh r3, [r4, #20] -1000bd08: 6920 ldr r0, [r4, #16] -1000bd0a: 4a70 ldr r2, [pc, #448] ; (1000becc ) -1000bd0c: 4418 add r0, r3 -1000bd0e: f892 2069 ldrb.w r2, [r2, #105] ; 0x69 -1000bd12: 4971 ldr r1, [pc, #452] ; (1000bed8 ) -1000bd14: f00e fefe bl 1001ab14 -1000bd18: 8aa3 ldrh r3, [r4, #20] -1000bd1a: 4418 add r0, r3 -1000bd1c: 82a0 strh r0, [r4, #20] -1000bd1e: f7ff b87b b.w 1000ae18 -1000bd22: 4974 ldr r1, [pc, #464] ; (1000bef4 ) -1000bd24: 4628 mov r0, r5 -1000bd26: f7fe fc06 bl 1000a536 -1000bd2a: b160 cbz r0, 1000bd46 -1000bd2c: 8aa3 ldrh r3, [r4, #20] -1000bd2e: 6920 ldr r0, [r4, #16] -1000bd30: 4a71 ldr r2, [pc, #452] ; (1000bef8 ) -1000bd32: 4418 add r0, r3 -1000bd34: 7b12 ldrb r2, [r2, #12] -1000bd36: 4968 ldr r1, [pc, #416] ; (1000bed8 ) -1000bd38: f00e feec bl 1001ab14 -1000bd3c: 8aa3 ldrh r3, [r4, #20] -1000bd3e: 4418 add r0, r3 -1000bd40: 82a0 strh r0, [r4, #20] -1000bd42: f7ff b869 b.w 1000ae18 -1000bd46: 496d ldr r1, [pc, #436] ; (1000befc ) -1000bd48: 4628 mov r0, r5 -1000bd4a: f7fe fbf4 bl 1000a536 -1000bd4e: b188 cbz r0, 1000bd74 -1000bd50: 4969 ldr r1, [pc, #420] ; (1000bef8 ) -1000bd52: 8aa0 ldrh r0, [r4, #20] -1000bd54: 78ce ldrb r6, [r1, #3] -1000bd56: 784b ldrb r3, [r1, #1] -1000bd58: 780a ldrb r2, [r1, #0] -1000bd5a: 6925 ldr r5, [r4, #16] -1000bd5c: 9601 str r6, [sp, #4] -1000bd5e: 7889 ldrb r1, [r1, #2] -1000bd60: 4428 add r0, r5 -1000bd62: 9100 str r1, [sp, #0] -1000bd64: 4966 ldr r1, [pc, #408] ; (1000bf00 ) -1000bd66: f00e fed5 bl 1001ab14 -1000bd6a: 8aa3 ldrh r3, [r4, #20] -1000bd6c: 4418 add r0, r3 -1000bd6e: 82a0 strh r0, [r4, #20] -1000bd70: f7ff b852 b.w 1000ae18 -1000bd74: 4963 ldr r1, [pc, #396] ; (1000bf04 ) -1000bd76: 4628 mov r0, r5 -1000bd78: f7fe fbdd bl 1000a536 -1000bd7c: b188 cbz r0, 1000bda2 -1000bd7e: 495e ldr r1, [pc, #376] ; (1000bef8 ) -1000bd80: 8aa0 ldrh r0, [r4, #20] -1000bd82: 7ace ldrb r6, [r1, #11] -1000bd84: 7a4b ldrb r3, [r1, #9] -1000bd86: 7a0a ldrb r2, [r1, #8] -1000bd88: 6925 ldr r5, [r4, #16] -1000bd8a: 9601 str r6, [sp, #4] -1000bd8c: 7a89 ldrb r1, [r1, #10] -1000bd8e: 4428 add r0, r5 -1000bd90: 9100 str r1, [sp, #0] -1000bd92: 495b ldr r1, [pc, #364] ; (1000bf00 ) -1000bd94: f00e febe bl 1001ab14 -1000bd98: 8aa3 ldrh r3, [r4, #20] -1000bd9a: 4418 add r0, r3 -1000bd9c: 82a0 strh r0, [r4, #20] -1000bd9e: f7ff b83b b.w 1000ae18 -1000bda2: 4959 ldr r1, [pc, #356] ; (1000bf08 ) -1000bda4: 4628 mov r0, r5 -1000bda6: f7fe fbc6 bl 1000a536 -1000bdaa: 2800 cmp r0, #0 -1000bdac: f43f a834 beq.w 1000ae18 -1000bdb0: 4951 ldr r1, [pc, #324] ; (1000bef8 ) -1000bdb2: 8aa0 ldrh r0, [r4, #20] -1000bdb4: 79ce ldrb r6, [r1, #7] -1000bdb6: 794b ldrb r3, [r1, #5] -1000bdb8: 790a ldrb r2, [r1, #4] -1000bdba: 6925 ldr r5, [r4, #16] -1000bdbc: 9601 str r6, [sp, #4] -1000bdbe: 7989 ldrb r1, [r1, #6] -1000bdc0: 4428 add r0, r5 -1000bdc2: 9100 str r1, [sp, #0] -1000bdc4: 494e ldr r1, [pc, #312] ; (1000bf00 ) -1000bdc6: f00e fea5 bl 1001ab14 -1000bdca: 8aa3 ldrh r3, [r4, #20] -1000bdcc: 4418 add r0, r3 -1000bdce: 82a0 strh r0, [r4, #20] -1000bdd0: f7ff b822 b.w 1000ae18 -1000bdd4: 494d ldr r1, [pc, #308] ; (1000bf0c ) -1000bdd6: 4628 mov r0, r5 -1000bdd8: f7fe fbad bl 1000a536 -1000bddc: 2800 cmp r0, #0 -1000bdde: d05f beq.n 1000bea0 -1000bde0: 1d2f adds r7, r5, #4 -1000bde2: 494b ldr r1, [pc, #300] ; (1000bf10 ) -1000bde4: 4638 mov r0, r7 -1000bde6: f7fe fba6 bl 1000a536 -1000bdea: 2800 cmp r0, #0 -1000bdec: d046 beq.n 1000be7c -1000bdee: 7a6b ldrb r3, [r5, #9] -1000bdf0: 2b5f cmp r3, #95 ; 0x5f -1000bdf2: d13e bne.n 1000be72 -1000bdf4: f105 070a add.w r7, r5, #10 -1000bdf8: 4946 ldr r1, [pc, #280] ; (1000bf14 ) -1000bdfa: 4638 mov r0, r7 -1000bdfc: f7fe fb9b bl 1000a536 -1000be00: b150 cbz r0, 1000be18 -1000be02: 2300 movs r3, #0 -1000be04: 4844 ldr r0, [pc, #272] ; (1000bf18 ) -1000be06: 60a3 str r3, [r4, #8] -1000be08: f00b fffa bl 10017e00 -1000be0c: 60e0 str r0, [r4, #12] -1000be0e: 4630 mov r0, r6 -1000be10: f7fe fecc bl 1000abac -1000be14: f7ff b800 b.w 1000ae18 -1000be18: 4940 ldr r1, [pc, #256] ; (1000bf1c ) -1000be1a: 4638 mov r0, r7 -1000be1c: f7fe fb8b bl 1000a536 -1000be20: b168 cbz r0, 1000be3e -1000be22: f105 000e add.w r0, r5, #14 -1000be26: f7fe fc2c bl 1000a682 -1000be2a: 0300 lsls r0, r0, #12 -1000be2c: 60a0 str r0, [r4, #8] -1000be2e: f500 5080 add.w r0, r0, #4096 ; 0x1000 -1000be32: 60e0 str r0, [r4, #12] -1000be34: 4630 mov r0, r6 -1000be36: f7fe feb9 bl 1000abac -1000be3a: f7fe bfed b.w 1000ae18 -1000be3e: 4938 ldr r1, [pc, #224] ; (1000bf20 ) -1000be40: 4638 mov r0, r7 -1000be42: f7fe fb78 bl 1000a536 -1000be46: b160 cbz r0, 1000be62 -1000be48: f7fd f81a bl 10008e80 -1000be4c: 60a0 str r0, [r4, #8] -1000be4e: 4605 mov r5, r0 -1000be50: f7fc fff8 bl 10008e44 -1000be54: 4428 add r0, r5 -1000be56: 60e0 str r0, [r4, #12] -1000be58: 4630 mov r0, r6 -1000be5a: f7fe fea7 bl 1000abac -1000be5e: f7fe bfdb b.w 1000ae18 -1000be62: 8aa3 ldrh r3, [r4, #20] -1000be64: 6922 ldr r2, [r4, #16] -1000be66: 1c59 adds r1, r3, #1 -1000be68: 82a1 strh r1, [r4, #20] -1000be6a: 213f movs r1, #63 ; 0x3f -1000be6c: 54d1 strb r1, [r2, r3] -1000be6e: f7fe bfd3 b.w 1000ae18 -1000be72: 4630 mov r0, r6 -1000be74: f7fe fe9a bl 1000abac -1000be78: f7fe bfce b.w 1000ae18 -1000be7c: 4929 ldr r1, [pc, #164] ; (1000bf24 ) -1000be7e: 4638 mov r0, r7 -1000be80: f7fe fb59 bl 1000a536 -1000be84: b120 cbz r0, 1000be90 -1000be86: 4630 mov r0, r6 -1000be88: f7fe feca bl 1000ac20 -1000be8c: f7fe bfc4 b.w 1000ae18 -1000be90: 8aa3 ldrh r3, [r4, #20] -1000be92: 6922 ldr r2, [r4, #16] -1000be94: 1c59 adds r1, r3, #1 -1000be96: 82a1 strh r1, [r4, #20] -1000be98: 213f movs r1, #63 ; 0x3f -1000be9a: 54d1 strb r1, [r2, r3] -1000be9c: f7fe bfbc b.w 1000ae18 -1000bea0: 4921 ldr r1, [pc, #132] ; (1000bf28 ) -1000bea2: 4628 mov r0, r5 -1000bea4: f7fe fb47 bl 1000a536 -1000bea8: 2800 cmp r0, #0 -1000beaa: d03f beq.n 1000bf2c -1000beac: 79ab ldrb r3, [r5, #6] -1000beae: 4630 mov r0, r6 -1000beb0: 2b64 cmp r3, #100 ; 0x64 -1000beb2: 8833 ldrh r3, [r6, #0] -1000beb4: bf0c ite eq -1000beb6: f443 5300 orreq.w r3, r3, #8192 ; 0x2000 -1000beba: f36f 334d bfcne r3, #13, #1 -1000bebe: 8033 strh r3, [r6, #0] -1000bec0: f7fe fdcc bl 1000aa5c -1000bec4: f7fe bfa8 b.w 1000ae18 -1000bec8: 1003f97d .word 0x1003f97d -1000becc: 10044dcf .word 0x10044dcf -1000bed0: 1003f930 .word 0x1003f930 -1000bed4: 1003f983 .word 0x1003f983 -1000bed8: 1003f838 .word 0x1003f838 -1000bedc: 1003fa91 .word 0x1003fa91 -1000bee0: 1004052a .word 0x1004052a -1000bee4: 1003f988 .word 0x1003f988 -1000bee8: 1003f94e .word 0x1003f94e -1000beec: 10044e68 .word 0x10044e68 -1000bef0: 1003f91c .word 0x1003f91c -1000bef4: 1003f957 .word 0x1003f957 -1000bef8: 10044e40 .word 0x10044e40 -1000befc: 1003f964 .word 0x1003f964 -1000bf00: 1003f89f .word 0x1003f89f -1000bf04: 1003f95c .word 0x1003f95c -1000bf08: 1003f95f .word 0x1003f95f -1000bf0c: 1003f98d .word 0x1003f98d -1000bf10: 1003f40a .word 0x1003f40a -1000bf14: 1003f992 .word 0x1003f992 -1000bf18: 1004b4ec .word 0x1004b4ec -1000bf1c: 1003f996 .word 0x1003f996 -1000bf20: 1003f99b .word 0x1003f99b -1000bf24: 1003faa0 .word 0x1003faa0 -1000bf28: 1003f9a0 .word 0x1003f9a0 -1000bf2c: 4972 ldr r1, [pc, #456] ; (1000c0f8 ) -1000bf2e: 4628 mov r0, r5 -1000bf30: f7fe fb01 bl 1000a536 -1000bf34: 2800 cmp r0, #0 -1000bf36: d06d beq.n 1000c014 -1000bf38: 3504 adds r5, #4 -1000bf3a: 4970 ldr r1, [pc, #448] ; (1000c0fc ) -1000bf3c: 4628 mov r0, r5 -1000bf3e: f7fe fafa bl 1000a536 -1000bf42: b160 cbz r0, 1000bf5e -1000bf44: 8aa3 ldrh r3, [r4, #20] -1000bf46: 68b2 ldr r2, [r6, #8] -1000bf48: 6920 ldr r0, [r4, #16] -1000bf4a: 8852 ldrh r2, [r2, #2] -1000bf4c: 4418 add r0, r3 -1000bf4e: 496c ldr r1, [pc, #432] ; (1000c100 ) -1000bf50: f00e fde0 bl 1001ab14 -1000bf54: 8aa3 ldrh r3, [r4, #20] -1000bf56: 4418 add r0, r3 -1000bf58: 82a0 strh r0, [r4, #20] -1000bf5a: f7fe bf5d b.w 1000ae18 -1000bf5e: 4969 ldr r1, [pc, #420] ; (1000c104 ) -1000bf60: 4628 mov r0, r5 -1000bf62: f7fe fae8 bl 1000a536 -1000bf66: b198 cbz r0, 1000bf90 -1000bf68: 69b1 ldr r1, [r6, #24] -1000bf6a: 8aa0 ldrh r0, [r4, #20] -1000bf6c: 8bce ldrh r6, [r1, #30] -1000bf6e: 784b ldrb r3, [r1, #1] -1000bf70: 780a ldrb r2, [r1, #0] -1000bf72: 6925 ldr r5, [r4, #16] -1000bf74: 9602 str r6, [sp, #8] -1000bf76: 78ce ldrb r6, [r1, #3] -1000bf78: 4428 add r0, r5 -1000bf7a: 9601 str r6, [sp, #4] -1000bf7c: 7889 ldrb r1, [r1, #2] -1000bf7e: 9100 str r1, [sp, #0] -1000bf80: 4961 ldr r1, [pc, #388] ; (1000c108 ) -1000bf82: f00e fdc7 bl 1001ab14 -1000bf86: 8aa3 ldrh r3, [r4, #20] -1000bf88: 4418 add r0, r3 -1000bf8a: 82a0 strh r0, [r4, #20] -1000bf8c: f7fe bf44 b.w 1000ae18 -1000bf90: 495e ldr r1, [pc, #376] ; (1000c10c ) -1000bf92: 4628 mov r0, r5 -1000bf94: f7fe facf bl 1000a536 -1000bf98: b190 cbz r0, 1000bfc0 -1000bf9a: 89f1 ldrh r1, [r6, #14] -1000bf9c: 7c73 ldrb r3, [r6, #17] -1000bf9e: 8aa0 ldrh r0, [r4, #20] -1000bfa0: 6925 ldr r5, [r4, #16] -1000bfa2: 7c32 ldrb r2, [r6, #16] -1000bfa4: 9102 str r1, [sp, #8] -1000bfa6: 7cf1 ldrb r1, [r6, #19] -1000bfa8: 4428 add r0, r5 -1000bfaa: 9101 str r1, [sp, #4] -1000bfac: 7cb1 ldrb r1, [r6, #18] -1000bfae: 9100 str r1, [sp, #0] -1000bfb0: 4955 ldr r1, [pc, #340] ; (1000c108 ) -1000bfb2: f00e fdaf bl 1001ab14 -1000bfb6: 8aa3 ldrh r3, [r4, #20] -1000bfb8: 4418 add r0, r3 -1000bfba: 82a0 strh r0, [r4, #20] -1000bfbc: f7fe bf2c b.w 1000ae18 -1000bfc0: 4953 ldr r1, [pc, #332] ; (1000c110 ) -1000bfc2: 4628 mov r0, r5 -1000bfc4: f7fe fab7 bl 1000a536 -1000bfc8: b160 cbz r0, 1000bfe4 -1000bfca: 8aa3 ldrh r3, [r4, #20] -1000bfcc: 68b2 ldr r2, [r6, #8] -1000bfce: 6920 ldr r0, [r4, #16] -1000bfd0: 7a12 ldrb r2, [r2, #8] -1000bfd2: 4418 add r0, r3 -1000bfd4: 494a ldr r1, [pc, #296] ; (1000c100 ) -1000bfd6: f00e fd9d bl 1001ab14 -1000bfda: 8aa3 ldrh r3, [r4, #20] -1000bfdc: 4418 add r0, r3 -1000bfde: 82a0 strh r0, [r4, #20] -1000bfe0: f7fe bf1a b.w 1000ae18 -1000bfe4: 4628 mov r0, r5 -1000bfe6: 494b ldr r1, [pc, #300] ; (1000c114 ) -1000bfe8: f7fe faa5 bl 1000a536 -1000bfec: 8aa3 ldrh r3, [r4, #20] -1000bfee: 6925 ldr r5, [r4, #16] -1000bff0: b150 cbz r0, 1000c008 -1000bff2: 68b2 ldr r2, [r6, #8] -1000bff4: 18e8 adds r0, r5, r3 -1000bff6: 7a52 ldrb r2, [r2, #9] -1000bff8: 4941 ldr r1, [pc, #260] ; (1000c100 ) -1000bffa: f00e fd8b bl 1001ab14 -1000bffe: 8aa3 ldrh r3, [r4, #20] -1000c000: 4418 add r0, r3 -1000c002: 82a0 strh r0, [r4, #20] -1000c004: f7fe bf08 b.w 1000ae18 -1000c008: 1c5a adds r2, r3, #1 -1000c00a: 82a2 strh r2, [r4, #20] -1000c00c: 223f movs r2, #63 ; 0x3f -1000c00e: 54ea strb r2, [r5, r3] -1000c010: f7fe bf02 b.w 1000ae18 -1000c014: 4940 ldr r1, [pc, #256] ; (1000c118 ) -1000c016: 4628 mov r0, r5 -1000c018: f7fe fa8d bl 1000a536 -1000c01c: 2800 cmp r0, #0 -1000c01e: d054 beq.n 1000c0ca -1000c020: 3504 adds r5, #4 -1000c022: 493e ldr r1, [pc, #248] ; (1000c11c ) -1000c024: 4628 mov r0, r5 -1000c026: f7fe fa86 bl 1000a536 -1000c02a: b160 cbz r0, 1000c046 -1000c02c: 8aa3 ldrh r3, [r4, #20] -1000c02e: 6920 ldr r0, [r4, #16] -1000c030: 4a3b ldr r2, [pc, #236] ; (1000c120 ) -1000c032: 4418 add r0, r3 -1000c034: 8812 ldrh r2, [r2, #0] -1000c036: 4932 ldr r1, [pc, #200] ; (1000c100 ) -1000c038: f00e fd6c bl 1001ab14 -1000c03c: 8aa3 ldrh r3, [r4, #20] -1000c03e: 4418 add r0, r3 -1000c040: 82a0 strh r0, [r4, #20] -1000c042: f7fe bee9 b.w 1000ae18 -1000c046: 4937 ldr r1, [pc, #220] ; (1000c124 ) -1000c048: 4628 mov r0, r5 -1000c04a: f7fe fa74 bl 1000a536 -1000c04e: b170 cbz r0, 1000c06e -1000c050: 6923 ldr r3, [r4, #16] -1000c052: 8aa5 ldrh r5, [r4, #20] -1000c054: 441d add r5, r3 -1000c056: f7fc ff13 bl 10008e80 -1000c05a: 4933 ldr r1, [pc, #204] ; (1000c128 ) -1000c05c: 4602 mov r2, r0 -1000c05e: 4628 mov r0, r5 -1000c060: f00e fd58 bl 1001ab14 -1000c064: 8aa3 ldrh r3, [r4, #20] -1000c066: 4418 add r0, r3 -1000c068: 82a0 strh r0, [r4, #20] -1000c06a: f7fe bed5 b.w 1000ae18 -1000c06e: 492f ldr r1, [pc, #188] ; (1000c12c ) -1000c070: 4628 mov r0, r5 -1000c072: f7fe fa60 bl 1000a536 -1000c076: b170 cbz r0, 1000c096 -1000c078: 6923 ldr r3, [r4, #16] -1000c07a: 8aa5 ldrh r5, [r4, #20] -1000c07c: 441d add r5, r3 -1000c07e: f7fc fee1 bl 10008e44 -1000c082: 491f ldr r1, [pc, #124] ; (1000c100 ) -1000c084: 4602 mov r2, r0 -1000c086: 4628 mov r0, r5 -1000c088: f00e fd44 bl 1001ab14 -1000c08c: 8aa3 ldrh r3, [r4, #20] -1000c08e: 4418 add r0, r3 -1000c090: 82a0 strh r0, [r4, #20] -1000c092: f7fe bec1 b.w 1000ae18 -1000c096: 4628 mov r0, r5 -1000c098: 4925 ldr r1, [pc, #148] ; (1000c130 ) -1000c09a: f7fe fa4c bl 1000a536 -1000c09e: 8aa5 ldrh r5, [r4, #20] -1000c0a0: 6923 ldr r3, [r4, #16] -1000c0a2: b160 cbz r0, 1000c0be -1000c0a4: 441d add r5, r3 -1000c0a6: f7fc fec3 bl 10008e30 -1000c0aa: 4915 ldr r1, [pc, #84] ; (1000c100 ) -1000c0ac: 4602 mov r2, r0 -1000c0ae: 4628 mov r0, r5 -1000c0b0: f00e fd30 bl 1001ab14 -1000c0b4: 8aa3 ldrh r3, [r4, #20] -1000c0b6: 4418 add r0, r3 -1000c0b8: 82a0 strh r0, [r4, #20] -1000c0ba: f7fe bead b.w 1000ae18 -1000c0be: 1c6a adds r2, r5, #1 -1000c0c0: 82a2 strh r2, [r4, #20] -1000c0c2: 223f movs r2, #63 ; 0x3f -1000c0c4: 555a strb r2, [r3, r5] -1000c0c6: f7fe bea7 b.w 1000ae18 -1000c0ca: 491a ldr r1, [pc, #104] ; (1000c134 ) -1000c0cc: 4628 mov r0, r5 -1000c0ce: f7fe fa32 bl 1000a536 -1000c0d2: 8aa3 ldrh r3, [r4, #20] -1000c0d4: 6922 ldr r2, [r4, #16] -1000c0d6: b140 cbz r0, 1000c0ea -1000c0d8: 18d0 adds r0, r2, r3 -1000c0da: 4917 ldr r1, [pc, #92] ; (1000c138 ) -1000c0dc: f00e fd1a bl 1001ab14 -1000c0e0: 8aa3 ldrh r3, [r4, #20] -1000c0e2: 4418 add r0, r3 -1000c0e4: 82a0 strh r0, [r4, #20] -1000c0e6: f7fe be97 b.w 1000ae18 -1000c0ea: 1c59 adds r1, r3, #1 -1000c0ec: 82a1 strh r1, [r4, #20] -1000c0ee: 213f movs r1, #63 ; 0x3f -1000c0f0: 54d1 strb r1, [r2, r3] -1000c0f2: f7fe be91 b.w 1000ae18 -1000c0f6: bf00 nop -1000c0f8: 1003f8b0 .word 0x1003f8b0 -1000c0fc: 1003f8b5 .word 0x1003f8b5 -1000c100: 1003f838 .word 0x1003f838 -1000c104: 1003f9a7 .word 0x1003f9a7 -1000c108: 1003f9ac .word 0x1003f9ac -1000c10c: 1003f9bb .word 0x1003f9bb -1000c110: 1003f8ba .word 0x1003f8ba -1000c114: 1003f8c0 .word 0x1003f8c0 -1000c118: 1003f9c2 .word 0x1003f9c2 -1000c11c: 1003f9c7 .word 0x1003f9c7 -1000c120: 1004a762 .word 0x1004a762 -1000c124: 1003f9cd .word 0x1003f9cd -1000c128: 1003f7a6 .word 0x1003f7a6 -1000c12c: 1003f9d6 .word 0x1003f9d6 -1000c130: 1003f9d2 .word 0x1003f9d2 -1000c134: 1003f9db .word 0x1003f9db -1000c138: 1003f9e4 .word 0x1003f9e4 - -1000c13c : -1000c13c: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -1000c140: f8d0 8034 ldr.w r8, [r0, #52] ; 0x34 -1000c144: b085 sub sp, #20 -1000c146: 4606 mov r6, r0 -1000c148: 4610 mov r0, r2 -1000c14a: 460d mov r5, r1 -1000c14c: 4617 mov r7, r2 -1000c14e: f7fe fa98 bl 1000a682 -1000c152: 4629 mov r1, r5 -1000c154: 4604 mov r4, r0 -1000c156: 463a mov r2, r7 -1000c158: 48a3 ldr r0, [pc, #652] ; (1000c3e8 ) -1000c15a: f00e fd01 bl 1001ab60 -1000c15e: 49a3 ldr r1, [pc, #652] ; (1000c3ec ) -1000c160: 4628 mov r0, r5 -1000c162: f7fe f9e8 bl 1000a536 -1000c166: b120 cbz r0, 1000c172 -1000c168: f8c8 4008 str.w r4, [r8, #8] -1000c16c: b005 add sp, #20 -1000c16e: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -1000c172: 499f ldr r1, [pc, #636] ; (1000c3f0 ) -1000c174: 4628 mov r0, r5 -1000c176: f7fe f9de bl 1000a536 -1000c17a: b110 cbz r0, 1000c182 -1000c17c: f8c8 400c str.w r4, [r8, #12] -1000c180: e7f4 b.n 1000c16c -1000c182: 499c ldr r1, [pc, #624] ; (1000c3f4 ) -1000c184: 4628 mov r0, r5 -1000c186: f7fe f9d6 bl 1000a536 -1000c18a: 4681 mov r9, r0 -1000c18c: 2800 cmp r0, #0 -1000c18e: f000 80b3 beq.w 1000c2f8 -1000c192: 1cee adds r6, r5, #3 -1000c194: 4998 ldr r1, [pc, #608] ; (1000c3f8 ) -1000c196: 4630 mov r0, r6 -1000c198: f7fe f9cd bl 1000a536 -1000c19c: 2800 cmp r0, #0 -1000c19e: f000 809e beq.w 1000c2de -1000c1a2: f105 0608 add.w r6, r5, #8 -1000c1a6: 4995 ldr r1, [pc, #596] ; (1000c3fc ) -1000c1a8: 4630 mov r0, r6 -1000c1aa: f7fe f9c4 bl 1000a536 -1000c1ae: b1d0 cbz r0, 1000c1e6 -1000c1b0: 350c adds r5, #12 -1000c1b2: 4993 ldr r1, [pc, #588] ; (1000c400 ) -1000c1b4: 4628 mov r0, r5 -1000c1b6: f7fe f9be bl 1000a536 -1000c1ba: b110 cbz r0, 1000c1c2 -1000c1bc: 4b91 ldr r3, [pc, #580] ; (1000c404 ) -1000c1be: 701c strb r4, [r3, #0] -1000c1c0: e7d4 b.n 1000c16c -1000c1c2: 4991 ldr r1, [pc, #580] ; (1000c408 ) -1000c1c4: 4628 mov r0, r5 -1000c1c6: f7fe f9b6 bl 1000a536 -1000c1ca: b118 cbz r0, 1000c1d4 -1000c1cc: 4b8d ldr r3, [pc, #564] ; (1000c404 ) -1000c1ce: b2e4 uxtb r4, r4 -1000c1d0: 609c str r4, [r3, #8] -1000c1d2: e7cb b.n 1000c16c -1000c1d4: 498d ldr r1, [pc, #564] ; (1000c40c ) -1000c1d6: 4628 mov r0, r5 -1000c1d8: f7fe f9ad bl 1000a536 -1000c1dc: 2800 cmp r0, #0 -1000c1de: d0c5 beq.n 1000c16c -1000c1e0: 4b88 ldr r3, [pc, #544] ; (1000c404 ) -1000c1e2: 731c strb r4, [r3, #12] -1000c1e4: e7c2 b.n 1000c16c -1000c1e6: 498a ldr r1, [pc, #552] ; (1000c410 ) -1000c1e8: 4630 mov r0, r6 -1000c1ea: f7fe f9a4 bl 1000a536 -1000c1ee: b320 cbz r0, 1000c23a -1000c1f0: 350b adds r5, #11 -1000c1f2: 4983 ldr r1, [pc, #524] ; (1000c400 ) -1000c1f4: 4628 mov r0, r5 -1000c1f6: f7fe f99e bl 1000a536 -1000c1fa: b110 cbz r0, 1000c202 -1000c1fc: 4b85 ldr r3, [pc, #532] ; (1000c414 ) -1000c1fe: 701c strb r4, [r3, #0] -1000c200: e7b4 b.n 1000c16c -1000c202: 4985 ldr r1, [pc, #532] ; (1000c418 ) -1000c204: 4628 mov r0, r5 -1000c206: f7fe f996 bl 1000a536 -1000c20a: b118 cbz r0, 1000c214 -1000c20c: 4b81 ldr r3, [pc, #516] ; (1000c414 ) -1000c20e: b2e4 uxtb r4, r4 -1000c210: 60dc str r4, [r3, #12] -1000c212: e7ab b.n 1000c16c -1000c214: 4981 ldr r1, [pc, #516] ; (1000c41c ) -1000c216: 4628 mov r0, r5 -1000c218: f7fe f98d bl 1000a536 -1000c21c: b118 cbz r0, 1000c226 -1000c21e: 4b7d ldr r3, [pc, #500] ; (1000c414 ) -1000c220: b2e4 uxtb r4, r4 -1000c222: 611c str r4, [r3, #16] -1000c224: e7a2 b.n 1000c16c -1000c226: 4979 ldr r1, [pc, #484] ; (1000c40c ) -1000c228: 4628 mov r0, r5 -1000c22a: f7fe f984 bl 1000a536 -1000c22e: 2800 cmp r0, #0 -1000c230: d09c beq.n 1000c16c -1000c232: 4b78 ldr r3, [pc, #480] ; (1000c414 ) -1000c234: b2e4 uxtb r4, r4 -1000c236: 609c str r4, [r3, #8] -1000c238: e798 b.n 1000c16c -1000c23a: 4979 ldr r1, [pc, #484] ; (1000c420 ) -1000c23c: 4630 mov r0, r6 -1000c23e: f7fe f97a bl 1000a536 -1000c242: b1d0 cbz r0, 1000c27a -1000c244: 350d adds r5, #13 -1000c246: 496e ldr r1, [pc, #440] ; (1000c400 ) -1000c248: 4628 mov r0, r5 -1000c24a: f7fe f974 bl 1000a536 -1000c24e: b110 cbz r0, 1000c256 -1000c250: 4b74 ldr r3, [pc, #464] ; (1000c424 ) -1000c252: 701c strb r4, [r3, #0] -1000c254: e78a b.n 1000c16c -1000c256: 4974 ldr r1, [pc, #464] ; (1000c428 ) -1000c258: 4628 mov r0, r5 -1000c25a: f7fe f96c bl 1000a536 -1000c25e: b110 cbz r0, 1000c266 -1000c260: 4b70 ldr r3, [pc, #448] ; (1000c424 ) -1000c262: 725c strb r4, [r3, #9] -1000c264: e782 b.n 1000c16c -1000c266: 4971 ldr r1, [pc, #452] ; (1000c42c ) -1000c268: 4628 mov r0, r5 -1000c26a: f7fe f964 bl 1000a536 -1000c26e: 2800 cmp r0, #0 -1000c270: f43f af7c beq.w 1000c16c -1000c274: 4b6b ldr r3, [pc, #428] ; (1000c424 ) -1000c276: 721c strb r4, [r3, #8] -1000c278: e778 b.n 1000c16c -1000c27a: 496d ldr r1, [pc, #436] ; (1000c430 ) -1000c27c: 4630 mov r0, r6 -1000c27e: f7fe f95a bl 1000a536 -1000c282: 2800 cmp r0, #0 -1000c284: f43f af72 beq.w 1000c16c -1000c288: 350e adds r5, #14 -1000c28a: 495d ldr r1, [pc, #372] ; (1000c400 ) -1000c28c: 4628 mov r0, r5 -1000c28e: f7fe f952 bl 1000a536 -1000c292: b110 cbz r0, 1000c29a -1000c294: 4b67 ldr r3, [pc, #412] ; (1000c434 ) -1000c296: 701c strb r4, [r3, #0] -1000c298: e768 b.n 1000c16c -1000c29a: 4967 ldr r1, [pc, #412] ; (1000c438 ) -1000c29c: 4628 mov r0, r5 -1000c29e: f7fe f94a bl 1000a536 -1000c2a2: b110 cbz r0, 1000c2aa -1000c2a4: 4b63 ldr r3, [pc, #396] ; (1000c434 ) -1000c2a6: 705c strb r4, [r3, #1] -1000c2a8: e760 b.n 1000c16c -1000c2aa: 4964 ldr r1, [pc, #400] ; (1000c43c ) -1000c2ac: 4628 mov r0, r5 -1000c2ae: f7fe f942 bl 1000a536 -1000c2b2: b110 cbz r0, 1000c2ba -1000c2b4: 4b5f ldr r3, [pc, #380] ; (1000c434 ) -1000c2b6: 709c strb r4, [r3, #2] -1000c2b8: e758 b.n 1000c16c -1000c2ba: 4961 ldr r1, [pc, #388] ; (1000c440 ) -1000c2bc: 4628 mov r0, r5 -1000c2be: f7fe f93a bl 1000a536 -1000c2c2: b110 cbz r0, 1000c2ca -1000c2c4: 4b5b ldr r3, [pc, #364] ; (1000c434 ) -1000c2c6: 70dc strb r4, [r3, #3] -1000c2c8: e750 b.n 1000c16c -1000c2ca: 495e ldr r1, [pc, #376] ; (1000c444 ) -1000c2cc: 4628 mov r0, r5 -1000c2ce: f7fe f932 bl 1000a536 -1000c2d2: 2800 cmp r0, #0 -1000c2d4: f43f af4a beq.w 1000c16c -1000c2d8: 4b56 ldr r3, [pc, #344] ; (1000c434 ) -1000c2da: 711c strb r4, [r3, #4] -1000c2dc: e746 b.n 1000c16c -1000c2de: 495a ldr r1, [pc, #360] ; (1000c448 ) -1000c2e0: 4630 mov r0, r6 -1000c2e2: f7fe f928 bl 1000a536 -1000c2e6: 2800 cmp r0, #0 -1000c2e8: f43f af40 beq.w 1000c16c -1000c2ec: 4b57 ldr r3, [pc, #348] ; (1000c44c ) -1000c2ee: b10c cbz r4, 1000c2f4 -1000c2f0: 755c strb r4, [r3, #21] -1000c2f2: e73b b.n 1000c16c -1000c2f4: 751c strb r4, [r3, #20] -1000c2f6: e739 b.n 1000c16c -1000c2f8: 4955 ldr r1, [pc, #340] ; (1000c450 ) -1000c2fa: 4628 mov r0, r5 -1000c2fc: f7fe f91b bl 1000a536 -1000c300: b3b0 cbz r0, 1000c370 -1000c302: 1d2e adds r6, r5, #4 -1000c304: 4953 ldr r1, [pc, #332] ; (1000c454 ) -1000c306: 4630 mov r0, r6 -1000c308: f7fe f915 bl 1000a536 -1000c30c: b150 cbz r0, 1000c324 -1000c30e: f243 0339 movw r3, #12345 ; 0x3039 -1000c312: 429c cmp r4, r3 -1000c314: f47f af2a bne.w 1000c16c -1000c318: 22c8 movs r2, #200 ; 0xc8 -1000c31a: 4649 mov r1, r9 -1000c31c: 484e ldr r0, [pc, #312] ; (1000c458 ) -1000c31e: f7fe f887 bl 1000a430 -1000c322: e723 b.n 1000c16c -1000c324: 494d ldr r1, [pc, #308] ; (1000c45c ) -1000c326: 4630 mov r0, r6 -1000c328: f7fe f905 bl 1000a536 -1000c32c: b148 cbz r0, 1000c342 -1000c32e: 1de8 adds r0, r5, #7 -1000c330: f7fe f9a7 bl 1000a682 -1000c334: 2220 movs r2, #32 -1000c336: f020 0103 bic.w r1, r0, #3 -1000c33a: 4638 mov r0, r7 -1000c33c: f7fe f9ea bl 1000a714 -1000c340: e714 b.n 1000c16c -1000c342: 4947 ldr r1, [pc, #284] ; (1000c460 ) -1000c344: 4630 mov r0, r6 -1000c346: f7fe f8f6 bl 1000a536 -1000c34a: b128 cbz r0, 1000c358 -1000c34c: fab4 f484 clz r4, r4 -1000c350: 4b44 ldr r3, [pc, #272] ; (1000c464 ) -1000c352: 0964 lsrs r4, r4, #5 -1000c354: 701c strb r4, [r3, #0] -1000c356: e709 b.n 1000c16c -1000c358: 4943 ldr r1, [pc, #268] ; (1000c468 ) -1000c35a: 4630 mov r0, r6 -1000c35c: f7fe f8eb bl 1000a536 -1000c360: 2800 cmp r0, #0 -1000c362: f43f af03 beq.w 1000c16c -1000c366: 4621 mov r1, r4 -1000c368: 2001 movs r0, #1 -1000c36a: f00b fe41 bl 10017ff0 -1000c36e: e6fd b.n 1000c16c -1000c370: 493e ldr r1, [pc, #248] ; (1000c46c ) -1000c372: 4628 mov r0, r5 -1000c374: f7fe f8df bl 1000a536 -1000c378: 4681 mov r9, r0 -1000c37a: 2800 cmp r0, #0 -1000c37c: f000 80e3 beq.w 1000c546 -1000c380: 1d2f adds r7, r5, #4 -1000c382: 493b ldr r1, [pc, #236] ; (1000c470 ) -1000c384: 4638 mov r0, r7 -1000c386: f7fe f8d6 bl 1000a536 -1000c38a: 2800 cmp r0, #0 -1000c38c: f000 8090 beq.w 1000c4b0 -1000c390: 3508 adds r5, #8 -1000c392: 4938 ldr r1, [pc, #224] ; (1000c474 ) -1000c394: 4628 mov r0, r5 -1000c396: f7fe f8ce bl 1000a536 -1000c39a: b150 cbz r0, 1000c3b2 -1000c39c: 4d36 ldr r5, [pc, #216] ; (1000c478 ) -1000c39e: 88a9 ldrh r1, [r5, #4] -1000c3a0: 428c cmp r4, r1 -1000c3a2: f43f aee3 beq.w 1000c16c -1000c3a6: 22c8 movs r2, #200 ; 0xc8 -1000c3a8: 4834 ldr r0, [pc, #208] ; (1000c47c ) -1000c3aa: f7fe f841 bl 1000a430 -1000c3ae: 80ac strh r4, [r5, #4] -1000c3b0: e6dc b.n 1000c16c -1000c3b2: 4933 ldr r1, [pc, #204] ; (1000c480 ) -1000c3b4: 4628 mov r0, r5 -1000c3b6: f7fe f8be bl 1000a536 -1000c3ba: 2800 cmp r0, #0 -1000c3bc: d062 beq.n 1000c484 -1000c3be: 4a2e ldr r2, [pc, #184] ; (1000c478 ) -1000c3c0: 68b3 ldr r3, [r6, #8] -1000c3c2: 7811 ldrb r1, [r2, #0] -1000c3c4: b13c cbz r4, 1000c3d6 -1000c3c6: f041 0108 orr.w r1, r1, #8 -1000c3ca: 7011 strb r1, [r2, #0] -1000c3cc: 781a ldrb r2, [r3, #0] -1000c3ce: f042 0202 orr.w r2, r2, #2 -1000c3d2: 701a strb r2, [r3, #0] -1000c3d4: e6ca b.n 1000c16c -1000c3d6: f364 01c3 bfi r1, r4, #3, #1 -1000c3da: 7011 strb r1, [r2, #0] -1000c3dc: 781a ldrb r2, [r3, #0] -1000c3de: f364 0241 bfi r2, r4, #1, #1 -1000c3e2: 701a strb r2, [r3, #0] -1000c3e4: e6c2 b.n 1000c16c -1000c3e6: bf00 nop -1000c3e8: 1003fa80 .word 0x1003fa80 -1000c3ec: 1003f894 .word 0x1003f894 -1000c3f0: 1003f7ad .word 0x1003f7ad -1000c3f4: 1003f7b2 .word 0x1003f7b2 -1000c3f8: 1003f7b6 .word 0x1003f7b6 -1000c3fc: 1003f7bc .word 0x1003f7bc -1000c400: 1003f7c1 .word 0x1003f7c1 -1000c404: 1004a58c .word 0x1004a58c -1000c408: 1003f7c6 .word 0x1003f7c6 -1000c40c: 1003f7cf .word 0x1003f7cf -1000c410: 1003f7da .word 0x1003f7da -1000c414: 1004a570 .word 0x1004a570 -1000c418: 1003f7de .word 0x1003f7de -1000c41c: 1003f7e2 .word 0x1003f7e2 -1000c420: 1003f7e6 .word 0x1003f7e6 -1000c424: 1004a59c .word 0x1004a59c -1000c428: 1003f7ec .word 0x1003f7ec -1000c42c: 1003f7f1 .word 0x1003f7f1 -1000c430: 1003f7fb .word 0x1003f7fb -1000c434: 1004a564 .word 0x1004a564 -1000c438: 1003f802 .word 0x1003f802 -1000c43c: 1003f806 .word 0x1003f806 -1000c440: 1003ffbe .word 0x1003ffbe -1000c444: 1003fa89 .word 0x1003fa89 -1000c448: 1003f80a .word 0x1003f80a -1000c44c: 1004a5a8 .word 0x1004a5a8 -1000c450: 1003f821 .word 0x1003f821 -1000c454: 1003f892 .word 0x1003f892 -1000c458: 100182d5 .word 0x100182d5 -1000c45c: 1003faa0 .word 0x1003faa0 -1000c460: 1003f88c .word 0x1003f88c -1000c464: 1004bae6 .word 0x1004bae6 -1000c468: 1003fa90 .word 0x1003fa90 -1000c46c: 1003f8ab .word 0x1003f8ab -1000c470: 1003f8b0 .word 0x1003f8b0 -1000c474: 1003f8b5 .word 0x1003f8b5 -1000c478: 10044bbc .word 0x10044bbc -1000c47c: 1000a4fd .word 0x1000a4fd -1000c480: 1003f8c6 .word 0x1003f8c6 -1000c484: 4998 ldr r1, [pc, #608] ; (1000c6e8 ) -1000c486: 4628 mov r0, r5 -1000c488: f7fe f855 bl 1000a536 -1000c48c: b120 cbz r0, 1000c498 -1000c48e: 4b97 ldr r3, [pc, #604] ; (1000c6ec ) -1000c490: 80dc strh r4, [r3, #6] -1000c492: 68b3 ldr r3, [r6, #8] -1000c494: 721c strb r4, [r3, #8] -1000c496: e669 b.n 1000c16c -1000c498: 4995 ldr r1, [pc, #596] ; (1000c6f0 ) -1000c49a: 4628 mov r0, r5 -1000c49c: f7fe f84b bl 1000a536 -1000c4a0: 2800 cmp r0, #0 -1000c4a2: f43f ae63 beq.w 1000c16c -1000c4a6: 4b91 ldr r3, [pc, #580] ; (1000c6ec ) -1000c4a8: 811c strh r4, [r3, #8] -1000c4aa: 68b3 ldr r3, [r6, #8] -1000c4ac: 725c strb r4, [r3, #9] -1000c4ae: e65d b.n 1000c16c -1000c4b0: 4990 ldr r1, [pc, #576] ; (1000c6f4 ) -1000c4b2: 4638 mov r0, r7 -1000c4b4: f7fe f83f bl 1000a536 -1000c4b8: b140 cbz r0, 1000c4cc -1000c4ba: 3400 adds r4, #0 -1000c4bc: bf18 it ne -1000c4be: 2401 movne r4, #1 -1000c4c0: 4b8a ldr r3, [pc, #552] ; (1000c6ec ) -1000c4c2: 781a ldrb r2, [r3, #0] -1000c4c4: f364 0241 bfi r2, r4, #1, #1 -1000c4c8: 701a strb r2, [r3, #0] -1000c4ca: e64f b.n 1000c16c -1000c4cc: 498a ldr r1, [pc, #552] ; (1000c6f8 ) -1000c4ce: 4638 mov r0, r7 -1000c4d0: f7fe f831 bl 1000a536 -1000c4d4: b188 cbz r0, 1000c4fa -1000c4d6: 2c00 cmp r4, #0 -1000c4d8: bf14 ite ne -1000c4da: 2101 movne r1, #1 -1000c4dc: 2100 moveq r1, #0 -1000c4de: 4b83 ldr r3, [pc, #524] ; (1000c6ec ) -1000c4e0: f06f 0002 mvn.w r0, #2 -1000c4e4: 781a ldrb r2, [r3, #0] -1000c4e6: f361 0200 bfi r2, r1, #0, #1 -1000c4ea: 701a strb r2, [r3, #0] -1000c4ec: d002 beq.n 1000c4f4 -1000c4ee: f00c fd8b bl 10019008 -1000c4f2: e63b b.n 1000c16c -1000c4f4: f00c fd68 bl 10018fc8 -1000c4f8: e638 b.n 1000c16c -1000c4fa: 4980 ldr r1, [pc, #512] ; (1000c6fc ) -1000c4fc: 4638 mov r0, r7 -1000c4fe: f7fe f81a bl 1000a536 -1000c502: b150 cbz r0, 1000c51a -1000c504: 4b79 ldr r3, [pc, #484] ; (1000c6ec ) -1000c506: 781a ldrb r2, [r3, #0] -1000c508: f364 0282 bfi r2, r4, #2, #1 -1000c50c: fab4 f484 clz r4, r4 -1000c510: 701a strb r2, [r3, #0] -1000c512: 4b7b ldr r3, [pc, #492] ; (1000c700 ) -1000c514: 0964 lsrs r4, r4, #5 -1000c516: 701c strb r4, [r3, #0] -1000c518: e628 b.n 1000c16c -1000c51a: 497a ldr r1, [pc, #488] ; (1000c704 ) -1000c51c: 4638 mov r0, r7 -1000c51e: f7fe f80a bl 1000a536 -1000c522: 2800 cmp r0, #0 -1000c524: f43f ae22 beq.w 1000c16c -1000c528: 2c02 cmp r4, #2 -1000c52a: d106 bne.n 1000c53a -1000c52c: f8d8 3000 ldr.w r3, [r8] -1000c530: f443 2380 orr.w r3, r3, #262144 ; 0x40000 -1000c534: f8c8 3000 str.w r3, [r8] -1000c538: e618 b.n 1000c16c -1000c53a: 2c01 cmp r4, #1 -1000c53c: f47f ae16 bne.w 1000c16c -1000c540: f7fb fa2e bl 100079a0 -1000c544: e612 b.n 1000c16c -1000c546: 4970 ldr r1, [pc, #448] ; (1000c708 ) -1000c548: 4628 mov r0, r5 -1000c54a: f7fd fff4 bl 1000a536 -1000c54e: 2800 cmp r0, #0 -1000c550: f000 8231 beq.w 1000c9b6 -1000c554: 1d6e adds r6, r5, #5 -1000c556: 496d ldr r1, [pc, #436] ; (1000c70c ) -1000c558: 4630 mov r0, r6 -1000c55a: f7fd ffec bl 1000a536 -1000c55e: b118 cbz r0, 1000c568 -1000c560: 4648 mov r0, r9 -1000c562: f002 f859 bl 1000e618 -1000c566: e601 b.n 1000c16c -1000c568: 4969 ldr r1, [pc, #420] ; (1000c710 ) -1000c56a: 4630 mov r0, r6 -1000c56c: f7fd ffe3 bl 1000a536 -1000c570: b128 cbz r0, 1000c57e -1000c572: 4620 mov r0, r4 -1000c574: f001 fbf8 bl 1000dd68 -1000c578: f8c8 000c str.w r0, [r8, #12] -1000c57c: e5f6 b.n 1000c16c -1000c57e: 4965 ldr r1, [pc, #404] ; (1000c714 ) -1000c580: 4630 mov r0, r6 -1000c582: f7fd ffd8 bl 1000a536 -1000c586: b130 cbz r0, 1000c596 -1000c588: 4b63 ldr r3, [pc, #396] ; (1000c718 ) -1000c58a: 22c8 movs r2, #200 ; 0xc8 -1000c58c: 7819 ldrb r1, [r3, #0] -1000c58e: 4863 ldr r0, [pc, #396] ; (1000c71c ) -1000c590: f7fd ff4e bl 1000a430 -1000c594: e5ea b.n 1000c16c -1000c596: 4962 ldr r1, [pc, #392] ; (1000c720 ) -1000c598: 4630 mov r0, r6 -1000c59a: f7fd ffcc bl 1000a536 -1000c59e: b110 cbz r0, 1000c5a6 -1000c5a0: 4b5d ldr r3, [pc, #372] ; (1000c718 ) -1000c5a2: 701c strb r4, [r3, #0] -1000c5a4: e5e2 b.n 1000c16c -1000c5a6: 495f ldr r1, [pc, #380] ; (1000c724 ) -1000c5a8: 4630 mov r0, r6 -1000c5aa: f7fd ffc4 bl 1000a536 -1000c5ae: b110 cbz r0, 1000c5b6 -1000c5b0: 4b59 ldr r3, [pc, #356] ; (1000c718 ) -1000c5b2: 711c strb r4, [r3, #4] -1000c5b4: e5da b.n 1000c16c -1000c5b6: 495c ldr r1, [pc, #368] ; (1000c728 ) -1000c5b8: 4630 mov r0, r6 -1000c5ba: f7fd ffbc bl 1000a536 -1000c5be: b110 cbz r0, 1000c5c6 -1000c5c0: 4b55 ldr r3, [pc, #340] ; (1000c718 ) -1000c5c2: 715c strb r4, [r3, #5] -1000c5c4: e5d2 b.n 1000c16c -1000c5c6: 4959 ldr r1, [pc, #356] ; (1000c72c ) -1000c5c8: 4630 mov r0, r6 -1000c5ca: f7fd ffb4 bl 1000a536 -1000c5ce: b110 cbz r0, 1000c5d6 -1000c5d0: 4b51 ldr r3, [pc, #324] ; (1000c718 ) -1000c5d2: 719c strb r4, [r3, #6] -1000c5d4: e5ca b.n 1000c16c -1000c5d6: 4956 ldr r1, [pc, #344] ; (1000c730 ) -1000c5d8: 4630 mov r0, r6 -1000c5da: f7fd ffac bl 1000a536 -1000c5de: b110 cbz r0, 1000c5e6 -1000c5e0: 4b4d ldr r3, [pc, #308] ; (1000c718 ) -1000c5e2: 70dc strb r4, [r3, #3] -1000c5e4: e5c2 b.n 1000c16c -1000c5e6: 4953 ldr r1, [pc, #332] ; (1000c734 ) -1000c5e8: 4630 mov r0, r6 -1000c5ea: f7fd ffa4 bl 1000a536 -1000c5ee: b110 cbz r0, 1000c5f6 -1000c5f0: 4b49 ldr r3, [pc, #292] ; (1000c718 ) -1000c5f2: 705c strb r4, [r3, #1] -1000c5f4: e5ba b.n 1000c16c -1000c5f6: 4950 ldr r1, [pc, #320] ; (1000c738 ) -1000c5f8: 4630 mov r0, r6 -1000c5fa: f7fd ff9c bl 1000a536 -1000c5fe: b110 cbz r0, 1000c606 -1000c600: 4b45 ldr r3, [pc, #276] ; (1000c718 ) -1000c602: 709c strb r4, [r3, #2] -1000c604: e5b2 b.n 1000c16c -1000c606: 493f ldr r1, [pc, #252] ; (1000c704 ) -1000c608: 4630 mov r0, r6 -1000c60a: f7fd ff94 bl 1000a536 -1000c60e: b118 cbz r0, 1000c618 -1000c610: 4620 mov r0, r4 -1000c612: f001 fbcd bl 1000ddb0 -1000c616: e5a9 b.n 1000c16c -1000c618: 4948 ldr r1, [pc, #288] ; (1000c73c ) -1000c61a: 4630 mov r0, r6 -1000c61c: f7fd ff8b bl 1000a536 -1000c620: 2800 cmp r0, #0 -1000c622: f000 80f3 beq.w 1000c80c -1000c626: 3508 adds r5, #8 -1000c628: 4945 ldr r1, [pc, #276] ; (1000c740 ) -1000c62a: 4628 mov r0, r5 -1000c62c: f7fd ff83 bl 1000a536 -1000c630: b1a8 cbz r0, 1000c65e -1000c632: 783b ldrb r3, [r7, #0] -1000c634: 2b00 cmp r3, #0 -1000c636: f43f ad99 beq.w 1000c16c -1000c63a: 4638 mov r0, r7 -1000c63c: f00e facc bl 1001abd8 -1000c640: 4604 mov r4, r0 -1000c642: 2221 movs r2, #33 ; 0x21 -1000c644: 2100 movs r1, #0 -1000c646: 483f ldr r0, [pc, #252] ; (1000c744 ) -1000c648: f00e fab6 bl 1001abb8 -1000c64c: 2c20 cmp r4, #32 -1000c64e: 4622 mov r2, r4 -1000c650: 4639 mov r1, r7 -1000c652: bfa8 it ge -1000c654: 2220 movge r2, #32 -1000c656: 483b ldr r0, [pc, #236] ; (1000c744 ) -1000c658: f00e faaa bl 1001abb0 -1000c65c: e586 b.n 1000c16c -1000c65e: 493a ldr r1, [pc, #232] ; (1000c748 ) -1000c660: 4628 mov r0, r5 -1000c662: f7fd ff68 bl 1000a536 -1000c666: b188 cbz r0, 1000c68c -1000c668: 4638 mov r0, r7 -1000c66a: f00e fab5 bl 1001abd8 -1000c66e: 4604 mov r4, r0 -1000c670: 2241 movs r2, #65 ; 0x41 -1000c672: 2100 movs r1, #0 -1000c674: 4835 ldr r0, [pc, #212] ; (1000c74c ) -1000c676: f00e fa9f bl 1001abb8 -1000c67a: 2c40 cmp r4, #64 ; 0x40 -1000c67c: 4622 mov r2, r4 -1000c67e: 4639 mov r1, r7 -1000c680: bfa8 it ge -1000c682: 2240 movge r2, #64 ; 0x40 -1000c684: 4831 ldr r0, [pc, #196] ; (1000c74c ) -1000c686: f00e fa93 bl 1001abb0 -1000c68a: e56f b.n 1000c16c -1000c68c: 4930 ldr r1, [pc, #192] ; (1000c750 ) -1000c68e: 4628 mov r0, r5 -1000c690: f7fd ff51 bl 1000a536 -1000c694: b118 cbz r0, 1000c69e -1000c696: 4b2b ldr r3, [pc, #172] ; (1000c744 ) -1000c698: f883 4066 strb.w r4, [r3, #102] ; 0x66 -1000c69c: e566 b.n 1000c16c -1000c69e: 492d ldr r1, [pc, #180] ; (1000c754 ) -1000c6a0: 4628 mov r0, r5 -1000c6a2: f7fd ff48 bl 1000a536 -1000c6a6: b118 cbz r0, 1000c6b0 -1000c6a8: 4b26 ldr r3, [pc, #152] ; (1000c744 ) -1000c6aa: f883 4067 strb.w r4, [r3, #103] ; 0x67 -1000c6ae: e55d b.n 1000c16c -1000c6b0: 4929 ldr r1, [pc, #164] ; (1000c758 ) -1000c6b2: 4628 mov r0, r5 -1000c6b4: f7fd ff3f bl 1000a536 -1000c6b8: b118 cbz r0, 1000c6c2 -1000c6ba: 4b22 ldr r3, [pc, #136] ; (1000c744 ) -1000c6bc: f883 4065 strb.w r4, [r3, #101] ; 0x65 -1000c6c0: e554 b.n 1000c16c -1000c6c2: 4926 ldr r1, [pc, #152] ; (1000c75c ) -1000c6c4: 4628 mov r0, r5 -1000c6c6: f7fd ff36 bl 1000a536 -1000c6ca: b118 cbz r0, 1000c6d4 -1000c6cc: 4b1d ldr r3, [pc, #116] ; (1000c744 ) -1000c6ce: f883 4064 strb.w r4, [r3, #100] ; 0x64 -1000c6d2: e54b b.n 1000c16c -1000c6d4: 4922 ldr r1, [pc, #136] ; (1000c760 ) -1000c6d6: 4628 mov r0, r5 -1000c6d8: f7fd ff2d bl 1000a536 -1000c6dc: 2800 cmp r0, #0 -1000c6de: d041 beq.n 1000c764 -1000c6e0: 4b18 ldr r3, [pc, #96] ; (1000c744 ) -1000c6e2: f8a3 4062 strh.w r4, [r3, #98] ; 0x62 -1000c6e6: e541 b.n 1000c16c -1000c6e8: 1003f8ba .word 0x1003f8ba -1000c6ec: 10044bbc .word 0x10044bbc -1000c6f0: 1003f8c0 .word 0x1003f8c0 -1000c6f4: 1003f8ca .word 0x1003f8ca -1000c6f8: 1003fa91 .word 0x1003fa91 -1000c6fc: 1003f88c .word 0x1003f88c -1000c700: 1004bae6 .word 0x1004bae6 -1000c704: 1003fa97 .word 0x1003fa97 -1000c708: 1003f8d1 .word 0x1003f8d1 -1000c70c: 1003fee7 .word 0x1003fee7 -1000c710: 1003f8d7 .word 0x1003f8d7 -1000c714: 1003f8dd .word 0x1003f8dd -1000c718: 10044dc8 .word 0x10044dc8 -1000c71c: 1000e16d .word 0x1000e16d -1000c720: 1003f8e5 .word 0x1003f8e5 -1000c724: 1003f8ea .word 0x1003f8ea -1000c728: 1003f8f4 .word 0x1003f8f4 -1000c72c: 1003f8f9 .word 0x1003f8f9 -1000c730: 1003f8ee .word 0x1003f8ee -1000c734: 1003f8fe .word 0x1003f8fe -1000c738: 1003f903 .word 0x1003f903 -1000c73c: 1003f90b .word 0x1003f90b -1000c740: 1003f97e .word 0x1003f97e -1000c744: 10044d50 .word 0x10044d50 -1000c748: 1003f90f .word 0x1003f90f -1000c74c: 10044d71 .word 0x10044d71 -1000c750: 1003f913 .word 0x1003f913 -1000c754: 1003f917 .word 0x1003f917 -1000c758: 1003f91c .word 0x1003f91c -1000c75c: 1003f921 .word 0x1003f921 -1000c760: 1003f927 .word 0x1003f927 -1000c764: 49ad ldr r1, [pc, #692] ; (1000ca1c ) -1000c766: 4628 mov r0, r5 -1000c768: f7fd fee5 bl 1000a536 -1000c76c: b318 cbz r0, 1000c7b6 -1000c76e: 4638 mov r0, r7 -1000c770: f00e fa32 bl 1001abd8 -1000c774: 280f cmp r0, #15 -1000c776: 4604 mov r4, r0 -1000c778: dc1b bgt.n 1000c7b2 -1000c77a: b148 cbz r0, 1000c790 -1000c77c: 2210 movs r2, #16 -1000c77e: 2100 movs r1, #0 -1000c780: 48a7 ldr r0, [pc, #668] ; (1000ca20 ) -1000c782: f00e fa19 bl 1001abb8 -1000c786: 4622 mov r2, r4 -1000c788: 4639 mov r1, r7 -1000c78a: 48a5 ldr r0, [pc, #660] ; (1000ca20 ) -1000c78c: f00e fa10 bl 1001abb0 -1000c790: 4ba4 ldr r3, [pc, #656] ; (1000ca24 ) -1000c792: 799b ldrb r3, [r3, #6] -1000c794: 0699 lsls r1, r3, #26 -1000c796: f57f ace9 bpl.w 1000c16c -1000c79a: 4ba3 ldr r3, [pc, #652] ; (1000ca28 ) -1000c79c: 48a3 ldr r0, [pc, #652] ; (1000ca2c ) -1000c79e: 9301 str r3, [sp, #4] -1000c7a0: 2320 movs r3, #32 -1000c7a2: 9302 str r3, [sp, #8] -1000c7a4: 2300 movs r3, #0 -1000c7a6: a901 add r1, sp, #4 -1000c7a8: 461a mov r2, r3 -1000c7aa: 6800 ldr r0, [r0, #0] -1000c7ac: f009 f916 bl 100159dc -1000c7b0: e4dc b.n 1000c16c -1000c7b2: 240f movs r4, #15 -1000c7b4: e7e2 b.n 1000c77c -1000c7b6: 499e ldr r1, [pc, #632] ; (1000ca30 ) -1000c7b8: 4628 mov r0, r5 -1000c7ba: f7fd febc bl 1000a536 -1000c7be: b110 cbz r0, 1000c7c6 -1000c7c0: 4b9c ldr r3, [pc, #624] ; (1000ca34 ) -1000c7c2: 731c strb r4, [r3, #12] -1000c7c4: e4d2 b.n 1000c16c -1000c7c6: 499c ldr r1, [pc, #624] ; (1000ca38 ) -1000c7c8: 4628 mov r0, r5 -1000c7ca: f7fd feb4 bl 1000a536 -1000c7ce: b128 cbz r0, 1000c7dc -1000c7d0: 4638 mov r0, r7 -1000c7d2: f002 fde8 bl 1000f3a6 -1000c7d6: 4b97 ldr r3, [pc, #604] ; (1000ca34 ) -1000c7d8: 6018 str r0, [r3, #0] -1000c7da: e4c7 b.n 1000c16c -1000c7dc: 4997 ldr r1, [pc, #604] ; (1000ca3c ) -1000c7de: 4628 mov r0, r5 -1000c7e0: f7fd fea9 bl 1000a536 -1000c7e4: b128 cbz r0, 1000c7f2 -1000c7e6: 4638 mov r0, r7 -1000c7e8: f002 fddd bl 1000f3a6 -1000c7ec: 4b91 ldr r3, [pc, #580] ; (1000ca34 ) -1000c7ee: 6098 str r0, [r3, #8] -1000c7f0: e4bc b.n 1000c16c -1000c7f2: 4993 ldr r1, [pc, #588] ; (1000ca40 ) -1000c7f4: 4628 mov r0, r5 -1000c7f6: f7fd fe9e bl 1000a536 -1000c7fa: 2800 cmp r0, #0 -1000c7fc: f43f acb6 beq.w 1000c16c -1000c800: 4638 mov r0, r7 -1000c802: f002 fdd0 bl 1000f3a6 -1000c806: 4b8b ldr r3, [pc, #556] ; (1000ca34 ) -1000c808: 6058 str r0, [r3, #4] -1000c80a: e4af b.n 1000c16c -1000c80c: 498d ldr r1, [pc, #564] ; (1000ca44 ) -1000c80e: 4630 mov r0, r6 -1000c810: f7fd fe91 bl 1000a536 -1000c814: 2800 cmp r0, #0 -1000c816: f43f aca9 beq.w 1000c16c -1000c81a: 3508 adds r5, #8 -1000c81c: 498a ldr r1, [pc, #552] ; (1000ca48 ) -1000c81e: 4628 mov r0, r5 -1000c820: f7fd fe89 bl 1000a536 -1000c824: b118 cbz r0, 1000c82e -1000c826: 4b89 ldr r3, [pc, #548] ; (1000ca4c ) -1000c828: f883 406a strb.w r4, [r3, #106] ; 0x6a -1000c82c: e49e b.n 1000c16c -1000c82e: 4988 ldr r1, [pc, #544] ; (1000ca50 ) -1000c830: 4628 mov r0, r5 -1000c832: f7fd fe80 bl 1000a536 -1000c836: 4680 mov r8, r0 -1000c838: b118 cbz r0, 1000c842 -1000c83a: 4b84 ldr r3, [pc, #528] ; (1000ca4c ) -1000c83c: f883 406b strb.w r4, [r3, #107] ; 0x6b -1000c840: e494 b.n 1000c16c -1000c842: 4984 ldr r1, [pc, #528] ; (1000ca54 ) -1000c844: 4628 mov r0, r5 -1000c846: f7fd fe76 bl 1000a536 -1000c84a: 4606 mov r6, r0 -1000c84c: b1a8 cbz r0, 1000c87a -1000c84e: 783b ldrb r3, [r7, #0] -1000c850: 2b00 cmp r3, #0 -1000c852: f43f ac8b beq.w 1000c16c -1000c856: 4638 mov r0, r7 -1000c858: f00e f9be bl 1001abd8 -1000c85c: 4604 mov r4, r0 -1000c85e: 4641 mov r1, r8 -1000c860: 2221 movs r2, #33 ; 0x21 -1000c862: 487a ldr r0, [pc, #488] ; (1000ca4c ) -1000c864: f00e f9a8 bl 1001abb8 -1000c868: 2c20 cmp r4, #32 -1000c86a: 4622 mov r2, r4 -1000c86c: 4639 mov r1, r7 -1000c86e: bfa8 it ge -1000c870: 2220 movge r2, #32 -1000c872: 4876 ldr r0, [pc, #472] ; (1000ca4c ) -1000c874: f00e f99c bl 1001abb0 -1000c878: e478 b.n 1000c16c -1000c87a: 4977 ldr r1, [pc, #476] ; (1000ca58 ) -1000c87c: 4628 mov r0, r5 -1000c87e: f7fd fe5a bl 1000a536 -1000c882: b188 cbz r0, 1000c8a8 -1000c884: 4638 mov r0, r7 -1000c886: f00e f9a7 bl 1001abd8 -1000c88a: 4604 mov r4, r0 -1000c88c: 4631 mov r1, r6 -1000c88e: 2241 movs r2, #65 ; 0x41 -1000c890: 4872 ldr r0, [pc, #456] ; (1000ca5c ) -1000c892: f00e f991 bl 1001abb8 -1000c896: 2c40 cmp r4, #64 ; 0x40 -1000c898: 4622 mov r2, r4 -1000c89a: 4639 mov r1, r7 -1000c89c: bfa8 it ge -1000c89e: 2240 movge r2, #64 ; 0x40 -1000c8a0: 486e ldr r0, [pc, #440] ; (1000ca5c ) -1000c8a2: f00e f985 bl 1001abb0 -1000c8a6: e461 b.n 1000c16c -1000c8a8: 496d ldr r1, [pc, #436] ; (1000ca60 ) -1000c8aa: 4628 mov r0, r5 -1000c8ac: f7fd fe43 bl 1000a536 -1000c8b0: b118 cbz r0, 1000c8ba -1000c8b2: 4b66 ldr r3, [pc, #408] ; (1000ca4c ) -1000c8b4: f883 4069 strb.w r4, [r3, #105] ; 0x69 -1000c8b8: e458 b.n 1000c16c -1000c8ba: 496a ldr r1, [pc, #424] ; (1000ca64 ) -1000c8bc: 4628 mov r0, r5 -1000c8be: f7fd fe3a bl 1000a536 -1000c8c2: b120 cbz r0, 1000c8ce -1000c8c4: 4968 ldr r1, [pc, #416] ; (1000ca68 ) -1000c8c6: 4638 mov r0, r7 -1000c8c8: f7fd ff54 bl 1000a774 -1000c8cc: e44e b.n 1000c16c -1000c8ce: 4967 ldr r1, [pc, #412] ; (1000ca6c ) -1000c8d0: 4628 mov r0, r5 -1000c8d2: f7fd fe30 bl 1000a536 -1000c8d6: b118 cbz r0, 1000c8e0 -1000c8d8: 4b5c ldr r3, [pc, #368] ; (1000ca4c ) -1000c8da: f883 4068 strb.w r4, [r3, #104] ; 0x68 -1000c8de: e445 b.n 1000c16c -1000c8e0: 4963 ldr r1, [pc, #396] ; (1000ca70 ) -1000c8e2: 4628 mov r0, r5 -1000c8e4: f7fd fe27 bl 1000a536 -1000c8e8: b118 cbz r0, 1000c8f2 -1000c8ea: 4b58 ldr r3, [pc, #352] ; (1000ca4c ) -1000c8ec: f883 406c strb.w r4, [r3, #108] ; 0x6c -1000c8f0: e43c b.n 1000c16c -1000c8f2: 4960 ldr r1, [pc, #384] ; (1000ca74 ) -1000c8f4: 4628 mov r0, r5 -1000c8f6: f7fd fe1e bl 1000a536 -1000c8fa: b118 cbz r0, 1000c904 -1000c8fc: 4b53 ldr r3, [pc, #332] ; (1000ca4c ) -1000c8fe: f883 406d strb.w r4, [r3, #109] ; 0x6d -1000c902: e433 b.n 1000c16c -1000c904: 4945 ldr r1, [pc, #276] ; (1000ca1c ) -1000c906: 4628 mov r0, r5 -1000c908: f7fd fe15 bl 1000a536 -1000c90c: b328 cbz r0, 1000c95a -1000c90e: 4638 mov r0, r7 -1000c910: f00e f962 bl 1001abd8 -1000c914: 280f cmp r0, #15 -1000c916: 4604 mov r4, r0 -1000c918: dc1d bgt.n 1000c956 -1000c91a: b148 cbz r0, 1000c930 -1000c91c: 2210 movs r2, #16 -1000c91e: 2100 movs r1, #0 -1000c920: 4855 ldr r0, [pc, #340] ; (1000ca78 ) -1000c922: f00e f949 bl 1001abb8 -1000c926: 4622 mov r2, r4 -1000c928: 4639 mov r1, r7 -1000c92a: 4853 ldr r0, [pc, #332] ; (1000ca78 ) -1000c92c: f00e f940 bl 1001abb0 -1000c930: 4b3c ldr r3, [pc, #240] ; (1000ca24 ) -1000c932: 799b ldrb r3, [r3, #6] -1000c934: 065a lsls r2, r3, #25 -1000c936: f57f ac19 bpl.w 1000c16c -1000c93a: 4b3b ldr r3, [pc, #236] ; (1000ca28 ) -1000c93c: 483b ldr r0, [pc, #236] ; (1000ca2c ) -1000c93e: 9301 str r3, [sp, #4] -1000c940: 2340 movs r3, #64 ; 0x40 -1000c942: 9302 str r3, [sp, #8] -1000c944: 2300 movs r3, #0 -1000c946: a901 add r1, sp, #4 -1000c948: 461a mov r2, r3 -1000c94a: 6800 ldr r0, [r0, #0] -1000c94c: f8ad 300c strh.w r3, [sp, #12] -1000c950: f009 f844 bl 100159dc -1000c954: e40a b.n 1000c16c -1000c956: 240f movs r4, #15 -1000c958: e7e0 b.n 1000c91c -1000c95a: 4935 ldr r1, [pc, #212] ; (1000ca30 ) -1000c95c: 4628 mov r0, r5 -1000c95e: f7fd fdea bl 1000a536 -1000c962: b110 cbz r0, 1000c96a -1000c964: 4b45 ldr r3, [pc, #276] ; (1000ca7c ) -1000c966: 731c strb r4, [r3, #12] -1000c968: e400 b.n 1000c16c -1000c96a: 4933 ldr r1, [pc, #204] ; (1000ca38 ) -1000c96c: 4628 mov r0, r5 -1000c96e: f7fd fde2 bl 1000a536 -1000c972: b130 cbz r0, 1000c982 -1000c974: 4638 mov r0, r7 -1000c976: f002 fd16 bl 1000f3a6 -1000c97a: 4b40 ldr r3, [pc, #256] ; (1000ca7c ) -1000c97c: 6018 str r0, [r3, #0] -1000c97e: f7ff bbf5 b.w 1000c16c -1000c982: 492e ldr r1, [pc, #184] ; (1000ca3c ) -1000c984: 4628 mov r0, r5 -1000c986: f7fd fdd6 bl 1000a536 -1000c98a: b130 cbz r0, 1000c99a -1000c98c: 4638 mov r0, r7 -1000c98e: f002 fd0a bl 1000f3a6 -1000c992: 4b3a ldr r3, [pc, #232] ; (1000ca7c ) -1000c994: 6098 str r0, [r3, #8] -1000c996: f7ff bbe9 b.w 1000c16c -1000c99a: 4929 ldr r1, [pc, #164] ; (1000ca40 ) -1000c99c: 4628 mov r0, r5 -1000c99e: f7fd fdca bl 1000a536 -1000c9a2: 2800 cmp r0, #0 -1000c9a4: f43f abe2 beq.w 1000c16c -1000c9a8: 4638 mov r0, r7 -1000c9aa: f002 fcfc bl 1000f3a6 -1000c9ae: 4b33 ldr r3, [pc, #204] ; (1000ca7c ) -1000c9b0: 6058 str r0, [r3, #4] -1000c9b2: f7ff bbdb b.w 1000c16c -1000c9b6: f898 3004 ldrb.w r3, [r8, #4] -1000c9ba: 2bfd cmp r3, #253 ; 0xfd -1000c9bc: f47f abd6 bne.w 1000c16c -1000c9c0: f8d8 3000 ldr.w r3, [r8] -1000c9c4: 059b lsls r3, r3, #22 -1000c9c6: f57f abd1 bpl.w 1000c16c -1000c9ca: 492d ldr r1, [pc, #180] ; (1000ca80 ) -1000c9cc: 4628 mov r0, r5 -1000c9ce: f7fd fdb2 bl 1000a536 -1000c9d2: 2800 cmp r0, #0 -1000c9d4: d058 beq.n 1000ca88 -1000c9d6: 2c00 cmp r4, #0 -1000c9d8: f43f abc8 beq.w 1000c16c -1000c9dc: f995 3006 ldrsb.w r3, [r5, #6] -1000c9e0: 1de8 adds r0, r5, #7 -1000c9e2: 2b64 cmp r3, #100 ; 0x64 -1000c9e4: 8833 ldrh r3, [r6, #0] -1000c9e6: bf0c ite eq -1000c9e8: f443 5300 orreq.w r3, r3, #8192 ; 0x2000 -1000c9ec: f36f 334d bfcne r3, #13, #1 -1000c9f0: 8033 strh r3, [r6, #0] -1000c9f2: f7fd fe46 bl 1000a682 -1000c9f6: 2300 movs r3, #0 -1000c9f8: f888 3020 strb.w r3, [r8, #32] -1000c9fc: f8d8 3000 ldr.w r3, [r8] -1000ca00: f8c8 0008 str.w r0, [r8, #8] -1000ca04: f043 0390 orr.w r3, r3, #144 ; 0x90 -1000ca08: f8c8 3000 str.w r3, [r8] -1000ca0c: 4b1d ldr r3, [pc, #116] ; (1000ca84 ) -1000ca0e: 4420 add r0, r4 -1000ca10: f8c8 000c str.w r0, [r8, #12] -1000ca14: f8c8 3018 str.w r3, [r8, #24] -1000ca18: f7ff bba8 b.w 1000c16c -1000ca1c: 1003f94e .word 0x1003f94e -1000ca20: 10044e78 .word 0x10044e78 -1000ca24: 10044dc8 .word 0x10044dc8 -1000ca28: 1000ddb1 .word 0x1000ddb1 -1000ca2c: 1004a764 .word 0x1004a764 -1000ca30: 1003f957 .word 0x1003f957 -1000ca34: 10044db8 .word 0x10044db8 -1000ca38: 1003f964 .word 0x1003f964 -1000ca3c: 1003f95c .word 0x1003f95c -1000ca40: 1003f95f .word 0x1003f95f -1000ca44: 1003f7fe .word 0x1003f7fe -1000ca48: 1003f973 .word 0x1003f973 -1000ca4c: 10044dcf .word 0x10044dcf -1000ca50: 1003f978 .word 0x1003f978 -1000ca54: 1003f97e .word 0x1003f97e -1000ca58: 1003f90f .word 0x1003f90f -1000ca5c: 10044df0 .word 0x10044df0 -1000ca60: 1003f91c .word 0x1003f91c -1000ca64: 1003f97d .word 0x1003f97d -1000ca68: 10044e31 .word 0x10044e31 -1000ca6c: 1003f983 .word 0x1003f983 -1000ca70: 1003fa91 .word 0x1003fa91 -1000ca74: 1003f988 .word 0x1003f988 -1000ca78: 10044e68 .word 0x10044e68 -1000ca7c: 10044e40 .word 0x10044e40 -1000ca80: 1003f9a0 .word 0x1003f9a0 -1000ca84: 1000aa5d .word 0x1000aa5d -1000ca88: 4947 ldr r1, [pc, #284] ; (1000cba8 ) -1000ca8a: 4628 mov r0, r5 -1000ca8c: f7fd fd53 bl 1000a536 -1000ca90: 2800 cmp r0, #0 -1000ca92: d073 beq.n 1000cb7c -1000ca94: f995 3005 ldrsb.w r3, [r5, #5] -1000ca98: 2b5f cmp r3, #95 ; 0x5f -1000ca9a: d161 bne.n 1000cb60 -1000ca9c: 1dae adds r6, r5, #6 -1000ca9e: 4943 ldr r1, [pc, #268] ; (1000cbac ) -1000caa0: 4630 mov r0, r6 -1000caa2: f7fd fd48 bl 1000a536 -1000caa6: b1a8 cbz r0, 1000cad4 -1000caa8: 2300 movs r3, #0 -1000caaa: 4841 ldr r0, [pc, #260] ; (1000cbb0 ) -1000caac: f8c8 3008 str.w r3, [r8, #8] -1000cab0: f00b f9a6 bl 10017e00 -1000cab4: 230f movs r3, #15 -1000cab6: f888 3020 strb.w r3, [r8, #32] -1000caba: f8d8 3000 ldr.w r3, [r8] -1000cabe: f8c8 000c str.w r0, [r8, #12] -1000cac2: f043 0390 orr.w r3, r3, #144 ; 0x90 -1000cac6: f8c8 3000 str.w r3, [r8] -1000caca: 4b3a ldr r3, [pc, #232] ; (1000cbb4 ) -1000cacc: f8c8 3018 str.w r3, [r8, #24] -1000cad0: f7ff bb4c b.w 1000c16c -1000cad4: 4938 ldr r1, [pc, #224] ; (1000cbb8 ) -1000cad6: 4630 mov r0, r6 -1000cad8: f7fd fd2d bl 1000a536 -1000cadc: b1c0 cbz r0, 1000cb10 -1000cade: f105 000a add.w r0, r5, #10 -1000cae2: f7fd fdce bl 1000a682 -1000cae6: 230f movs r3, #15 -1000cae8: f888 3020 strb.w r3, [r8, #32] -1000caec: f8d8 3000 ldr.w r3, [r8] -1000caf0: 0300 lsls r0, r0, #12 -1000caf2: f043 0390 orr.w r3, r3, #144 ; 0x90 -1000caf6: f8c8 3000 str.w r3, [r8] -1000cafa: 4b2e ldr r3, [pc, #184] ; (1000cbb4 ) -1000cafc: f8c8 0008 str.w r0, [r8, #8] -1000cb00: eb00 3004 add.w r0, r0, r4, lsl #12 -1000cb04: f8c8 000c str.w r0, [r8, #12] -1000cb08: f8c8 3018 str.w r3, [r8, #24] -1000cb0c: f7ff bb2e b.w 1000c16c -1000cb10: 492a ldr r1, [pc, #168] ; (1000cbbc ) -1000cb12: 4630 mov r0, r6 -1000cb14: f7fd fd0f bl 1000a536 -1000cb18: b1b8 cbz r0, 1000cb4a -1000cb1a: f7fc f9b1 bl 10008e80 -1000cb1e: f8c8 0008 str.w r0, [r8, #8] -1000cb22: 4604 mov r4, r0 -1000cb24: f7fc f98e bl 10008e44 -1000cb28: 230f movs r3, #15 -1000cb2a: f888 3020 strb.w r3, [r8, #32] -1000cb2e: f8d8 3000 ldr.w r3, [r8] -1000cb32: 4420 add r0, r4 -1000cb34: f043 0390 orr.w r3, r3, #144 ; 0x90 -1000cb38: f8c8 3000 str.w r3, [r8] -1000cb3c: 4b1d ldr r3, [pc, #116] ; (1000cbb4 ) -1000cb3e: f8c8 000c str.w r0, [r8, #12] -1000cb42: f8c8 3018 str.w r3, [r8, #24] -1000cb46: f7ff bb11 b.w 1000c16c -1000cb4a: f8b8 3014 ldrh.w r3, [r8, #20] -1000cb4e: f8d8 2010 ldr.w r2, [r8, #16] -1000cb52: 1c59 adds r1, r3, #1 -1000cb54: f8a8 1014 strh.w r1, [r8, #20] -1000cb58: 213f movs r1, #63 ; 0x3f -1000cb5a: 54d1 strb r1, [r2, r3] -1000cb5c: f7ff bb06 b.w 1000c16c -1000cb60: 230f movs r3, #15 -1000cb62: f888 3020 strb.w r3, [r8, #32] -1000cb66: f8d8 3000 ldr.w r3, [r8] -1000cb6a: f043 0390 orr.w r3, r3, #144 ; 0x90 -1000cb6e: f8c8 3000 str.w r3, [r8] -1000cb72: 4b10 ldr r3, [pc, #64] ; (1000cbb4 ) -1000cb74: f8c8 3018 str.w r3, [r8, #24] -1000cb78: f7ff baf8 b.w 1000c16c -1000cb7c: 4910 ldr r1, [pc, #64] ; (1000cbc0 ) -1000cb7e: 4628 mov r0, r5 -1000cb80: f7fd fcd9 bl 1000a536 -1000cb84: 2800 cmp r0, #0 -1000cb86: f43f aaf1 beq.w 1000c16c -1000cb8a: 230f movs r3, #15 -1000cb8c: f888 3020 strb.w r3, [r8, #32] -1000cb90: f8d8 3000 ldr.w r3, [r8] -1000cb94: f043 0390 orr.w r3, r3, #144 ; 0x90 -1000cb98: f8c8 3000 str.w r3, [r8] -1000cb9c: 4b09 ldr r3, [pc, #36] ; (1000cbc4 ) -1000cb9e: f8c8 3018 str.w r3, [r8, #24] -1000cba2: f7ff bae3 b.w 1000c16c -1000cba6: bf00 nop -1000cba8: 1003f40a .word 0x1003f40a -1000cbac: 1003f992 .word 0x1003f992 -1000cbb0: 1004b4ec .word 0x1004b4ec -1000cbb4: 1000abad .word 0x1000abad -1000cbb8: 1003f996 .word 0x1003f996 -1000cbbc: 1003f99b .word 0x1003f99b -1000cbc0: 1003fa9c .word 0x1003fa9c -1000cbc4: 1000ac21 .word 0x1000ac21 - -1000cbc8 : -1000cbc8: b538 push {r3, r4, r5, lr} -1000cbca: 213a movs r1, #58 ; 0x3a -1000cbcc: 4605 mov r5, r0 -1000cbce: f00d fff7 bl 1001abc0 -1000cbd2: b188 cbz r0, 1000cbf8 -1000cbd4: 2300 movs r3, #0 -1000cbd6: 1c44 adds r4, r0, #1 -1000cbd8: 7003 strb r3, [r0, #0] -1000cbda: 4629 mov r1, r5 -1000cbdc: 480c ldr r0, [pc, #48] ; (1000cc10 ) -1000cbde: f7fd fcaa bl 1000a536 -1000cbe2: b958 cbnz r0, 1000cbfc -1000cbe4: 4629 mov r1, r5 -1000cbe6: 480b ldr r0, [pc, #44] ; (1000cc14 ) -1000cbe8: f7fd fca5 bl 1000a536 -1000cbec: b120 cbz r0, 1000cbf8 -1000cbee: 4621 mov r1, r4 -1000cbf0: 4809 ldr r0, [pc, #36] ; (1000cc18 ) -1000cbf2: f7fd fca0 bl 1000a536 -1000cbf6: b948 cbnz r0, 1000cc0c -1000cbf8: 2000 movs r0, #0 -1000cbfa: bd38 pop {r3, r4, r5, pc} -1000cbfc: 4621 mov r1, r4 -1000cbfe: 4807 ldr r0, [pc, #28] ; (1000cc1c ) -1000cc00: f7fd fc99 bl 1000a536 -1000cc04: 2800 cmp r0, #0 -1000cc06: d0ed beq.n 1000cbe4 -1000cc08: 2001 movs r0, #1 -1000cc0a: bd38 pop {r3, r4, r5, pc} -1000cc0c: 2002 movs r0, #2 -1000cc0e: bd38 pop {r3, r4, r5, pc} -1000cc10: 10044d50 .word 0x10044d50 -1000cc14: 10044dcf .word 0x10044dcf -1000cc18: 10044df0 .word 0x10044df0 -1000cc1c: 10044d71 .word 0x10044d71 - -1000cc20 : -1000cc20: b508 push {r3, lr} -1000cc22: 4b02 ldr r3, [pc, #8] ; (1000cc2c ) -1000cc24: 4798 blx r3 -1000cc26: 4b02 ldr r3, [pc, #8] ; (1000cc30 ) -1000cc28: 6018 str r0, [r3, #0] -1000cc2a: bd08 pop {r3, pc} -1000cc2c: 00000355 .word 0x00000355 -1000cc30: 10044ce0 .word 0x10044ce0 - -1000cc34 : -1000cc34: 684b ldr r3, [r1, #4] -1000cc36: 4a04 ldr r2, [pc, #16] ; (1000cc48 ) -1000cc38: f993 3000 ldrsb.w r3, [r3] -1000cc3c: 3b31 subs r3, #49 ; 0x31 -1000cc3e: bf18 it ne -1000cc40: 2301 movne r3, #1 -1000cc42: 7013 strb r3, [r2, #0] -1000cc44: 4770 bx lr -1000cc46: bf00 nop -1000cc48: 1004bae6 .word 0x1004bae6 - -1000cc4c : -1000cc4c: b570 push {r4, r5, r6, lr} -1000cc4e: 480a ldr r0, [pc, #40] ; (1000cc78 ) -1000cc50: 4c0a ldr r4, [pc, #40] ; (1000cc7c ) -1000cc52: 47a0 blx r4 -1000cc54: 480a ldr r0, [pc, #40] ; (1000cc80 ) -1000cc56: 47a0 blx r4 -1000cc58: 4d0a ldr r5, [pc, #40] ; (1000cc84 ) -1000cc5a: 4e0b ldr r6, [pc, #44] ; (1000cc88 ) -1000cc5c: 3510 adds r5, #16 -1000cc5e: f855 1c20 ldr.w r1, [r5, #-32] -1000cc62: b921 cbnz r1, 1000cc6e -1000cc64: 4623 mov r3, r4 -1000cc66: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1000cc6a: 4805 ldr r0, [pc, #20] ; (1000cc80 ) -1000cc6c: 4718 bx r3 -1000cc6e: f855 2c14 ldr.w r2, [r5, #-20] -1000cc72: 4630 mov r0, r6 -1000cc74: 47a0 blx r4 -1000cc76: e7f1 b.n 1000cc5c -1000cc78: 1003faa4 .word 0x1003faa4 -1000cc7c: 0000f39d .word 0x0000f39d -1000cc80: 0003ed1e .word 0x0003ed1e -1000cc84: 10044ba8 .word 0x10044ba8 -1000cc88: 1003faba .word 0x1003faba - -1000cc8c : -1000cc8c: 2200 movs r2, #0 -1000cc8e: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1000cc92: 4603 mov r3, r0 -1000cc94: f100 0e7e add.w lr, r0, #126 ; 0x7e -1000cc98: 2720 movs r7, #32 -1000cc9a: 4616 mov r6, r2 -1000cc9c: 4610 mov r0, r2 -1000cc9e: f242 4c01 movw ip, #9217 ; 0x2401 -1000cca2: 4615 mov r5, r2 -1000cca4: 781c ldrb r4, [r3, #0] -1000cca6: 2c0d cmp r4, #13 -1000cca8: d804 bhi.n 1000ccb4 -1000ccaa: fa2c f804 lsr.w r8, ip, r4 -1000ccae: f018 0f01 tst.w r8, #1 -1000ccb2: d103 bne.n 1000ccbc -1000ccb4: 2809 cmp r0, #9 -1000ccb6: dc01 bgt.n 1000ccbc -1000ccb8: 4573 cmp r3, lr -1000ccba: d101 bne.n 1000ccc0 -1000ccbc: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000ccc0: 2a05 cmp r2, #5 -1000ccc2: d80a bhi.n 1000ccda -1000ccc4: e8df f002 tbb [pc, r2] -1000ccc8: 25160b03 .word 0x25160b03 -1000cccc: 2d2a .short 0x2d2a -1000ccce: 2c20 cmp r4, #32 -1000ccd0: d003 beq.n 1000ccda -1000ccd2: 2201 movs r2, #1 -1000ccd4: 600b str r3, [r1, #0] -1000ccd6: 3001 adds r0, #1 -1000ccd8: 3104 adds r1, #4 -1000ccda: 3301 adds r3, #1 -1000ccdc: e7e2 b.n 1000cca4 -1000ccde: 2c20 cmp r4, #32 -1000cce0: d102 bne.n 1000cce8 -1000cce2: 701d strb r5, [r3, #0] -1000cce4: 2202 movs r2, #2 -1000cce6: e7f8 b.n 1000ccda -1000cce8: 2c3d cmp r4, #61 ; 0x3d -1000ccea: d1f6 bne.n 1000ccda -1000ccec: 701d strb r5, [r3, #0] -1000ccee: 2202 movs r2, #2 -1000ccf0: 272c movs r7, #44 ; 0x2c -1000ccf2: e7f2 b.n 1000ccda -1000ccf4: 2c20 cmp r4, #32 -1000ccf6: d101 bne.n 1000ccfc -1000ccf8: 701d strb r5, [r3, #0] -1000ccfa: e7ee b.n 1000ccda -1000ccfc: 2c22 cmp r4, #34 ; 0x22 -1000ccfe: d001 beq.n 1000cd04 -1000cd00: 2c27 cmp r4, #39 ; 0x27 -1000cd02: d103 bne.n 1000cd0c -1000cd04: 701d strb r5, [r3, #0] -1000cd06: 4626 mov r6, r4 -1000cd08: 2204 movs r2, #4 -1000cd0a: e7e6 b.n 1000ccda -1000cd0c: 600b str r3, [r1, #0] -1000cd0e: 3001 adds r0, #1 -1000cd10: 3104 adds r1, #4 -1000cd12: 781a ldrb r2, [r3, #0] -1000cd14: 42ba cmp r2, r7 -1000cd16: d0e4 beq.n 1000cce2 -1000cd18: 2203 movs r2, #3 -1000cd1a: e7de b.n 1000ccda -1000cd1c: 600b str r3, [r1, #0] -1000cd1e: 3001 adds r0, #1 -1000cd20: 3104 adds r1, #4 -1000cd22: 781a ldrb r2, [r3, #0] -1000cd24: 42b2 cmp r2, r6 -1000cd26: d101 bne.n 1000cd2c -1000cd28: 701d strb r5, [r3, #0] -1000cd2a: e7f5 b.n 1000cd18 -1000cd2c: 2205 movs r2, #5 -1000cd2e: e7d4 b.n 1000ccda - -1000cd30 : -1000cd30: 2000 movs r0, #0 -1000cd32: 4770 bx lr - -1000cd34 : -1000cd34: 2000 movs r0, #0 -1000cd36: 4770 bx lr - -1000cd38 : -1000cd38: 4770 bx lr - ... - -1000cd3c : -1000cd3c: 4b03 ldr r3, [pc, #12] ; (1000cd4c ) -1000cd3e: 681b ldr r3, [r3, #0] -1000cd40: b113 cbz r3, 1000cd48 -1000cd42: 2220 movs r2, #32 -1000cd44: 4b02 ldr r3, [pc, #8] ; (1000cd50 ) -1000cd46: 601a str r2, [r3, #0] -1000cd48: 4770 bx lr -1000cd4a: bf00 nop -1000cd4c: 1004a768 .word 0x1004a768 -1000cd50: 1004a76c .word 0x1004a76c - -1000cd54 : -1000cd54: 229f movs r2, #159 ; 0x9f -1000cd56: 4b04 ldr r3, [pc, #16] ; (1000cd68 ) -1000cd58: 601a str r2, [r3, #0] -1000cd5a: 4b04 ldr r3, [pc, #16] ; (1000cd6c ) -1000cd5c: 6818 ldr r0, [r3, #0] -1000cd5e: b110 cbz r0, 1000cd66 -1000cd60: 3038 adds r0, #56 ; 0x38 -1000cd62: f00a bb99 b.w 10017498 -1000cd66: 4770 bx lr -1000cd68: 1004a76c .word 0x1004a76c -1000cd6c: 1004a768 .word 0x1004a768 - -1000cd70 : -1000cd70: 4b16 ldr r3, [pc, #88] ; (1000cdcc ) -1000cd72: 6818 ldr r0, [r3, #0] -1000cd74: b310 cbz r0, 1000cdbc -1000cd76: 6a83 ldr r3, [r0, #40] ; 0x28 -1000cd78: b94b cbnz r3, 1000cd8e -1000cd7a: 4b15 ldr r3, [pc, #84] ; (1000cdd0 ) -1000cd7c: 681b ldr r3, [r3, #0] -1000cd7e: 2b20 cmp r3, #32 -1000cd80: d102 bne.n 1000cd88 -1000cd82: 2201 movs r2, #1 -1000cd84: 4b13 ldr r3, [pc, #76] ; (1000cdd4 ) -1000cd86: 701a strb r2, [r3, #0] -1000cd88: 3038 adds r0, #56 ; 0x38 -1000cd8a: f00a bb85 b.w 10017498 -1000cd8e: 2b01 cmp r3, #1 -1000cd90: d107 bne.n 1000cda2 -1000cd92: 4b0f ldr r3, [pc, #60] ; (1000cdd0 ) -1000cd94: 681b ldr r3, [r3, #0] -1000cd96: 2b20 cmp r3, #32 -1000cd98: d0f3 beq.n 1000cd82 -1000cd9a: 2b00 cmp r3, #0 -1000cd9c: d1f4 bne.n 1000cd88 -1000cd9e: 2202 movs r2, #2 -1000cda0: e7f0 b.n 1000cd84 -1000cda2: 4a0d ldr r2, [pc, #52] ; (1000cdd8 ) -1000cda4: 4293 cmp r3, r2 -1000cda6: d1ef bne.n 1000cd88 -1000cda8: 4b09 ldr r3, [pc, #36] ; (1000cdd0 ) -1000cdaa: 681b ldr r3, [r3, #0] -1000cdac: 2b20 cmp r3, #32 -1000cdae: d0e8 beq.n 1000cd82 -1000cdb0: 2b00 cmp r3, #0 -1000cdb2: d0f4 beq.n 1000cd9e -1000cdb4: 2b1f cmp r3, #31 -1000cdb6: d1e7 bne.n 1000cd88 -1000cdb8: 2203 movs r2, #3 -1000cdba: e7e3 b.n 1000cd84 -1000cdbc: 4b05 ldr r3, [pc, #20] ; (1000cdd4 ) -1000cdbe: f993 2000 ldrsb.w r2, [r3] -1000cdc2: b912 cbnz r2, 1000cdca -1000cdc4: 2205 movs r2, #5 -1000cdc6: 701a strb r2, [r3, #0] -1000cdc8: 4770 bx lr -1000cdca: 4770 bx lr -1000cdcc: 1004a768 .word 0x1004a768 -1000cdd0: 1004a76c .word 0x1004a76c -1000cdd4: 10044ce4 .word 0x10044ce4 -1000cdd8: 00400004 .word 0x00400004 - -1000cddc : -1000cddc: 4b09 ldr r3, [pc, #36] ; (1000ce04 ) -1000cdde: 6818 ldr r0, [r3, #0] -1000cde0: b170 cbz r0, 1000ce00 -1000cde2: 6a83 ldr r3, [r0, #40] ; 0x28 -1000cde4: 2b01 cmp r3, #1 -1000cde6: d805 bhi.n 1000cdf4 -1000cde8: 221f movs r2, #31 -1000cdea: 4b07 ldr r3, [pc, #28] ; (1000ce08 ) -1000cdec: 3038 adds r0, #56 ; 0x38 -1000cdee: 601a str r2, [r3, #0] -1000cdf0: f00a bb52 b.w 10017498 -1000cdf4: 4a05 ldr r2, [pc, #20] ; (1000ce0c ) -1000cdf6: 4293 cmp r3, r2 -1000cdf8: bf02 ittt eq -1000cdfa: 221f moveq r2, #31 -1000cdfc: 4b02 ldreq r3, [pc, #8] ; (1000ce08 ) -1000cdfe: 601a streq r2, [r3, #0] -1000ce00: 4770 bx lr -1000ce02: bf00 nop -1000ce04: 1004a768 .word 0x1004a768 -1000ce08: 1004a76c .word 0x1004a76c -1000ce0c: 00400004 .word 0x00400004 - -1000ce10 : -1000ce10: b5f8 push {r3, r4, r5, r6, r7, lr} -1000ce12: 2300 movs r3, #0 -1000ce14: 4c55 ldr r4, [pc, #340] ; (1000cf6c ) -1000ce16: 4605 mov r5, r0 -1000ce18: 6826 ldr r6, [r4, #0] -1000ce1a: 7c20 ldrb r0, [r4, #16] -1000ce1c: 4283 cmp r3, r0 -1000ce1e: db2c blt.n 1000ce7a -1000ce20: 3001 adds r0, #1 -1000ce22: 7c63 ldrb r3, [r4, #17] -1000ce24: b2c0 uxtb r0, r0 -1000ce26: 4298 cmp r0, r3 -1000ce28: 7420 strb r0, [r4, #16] -1000ce2a: d975 bls.n 1000cf18 -1000ce2c: f06f 4740 mvn.w r7, #3221225472 ; 0xc0000000 -1000ce30: 7423 strb r3, [r4, #16] -1000ce32: 443b add r3, r7 -1000ce34: 6829 ldr r1, [r5, #0] -1000ce36: f856 0023 ldr.w r0, [r6, r3, lsl #2] -1000ce3a: f9b1 2028 ldrsh.w r2, [r1, #40] ; 0x28 -1000ce3e: f9b0 3028 ldrsh.w r3, [r0, #40] ; 0x28 -1000ce42: 429a cmp r2, r3 -1000ce44: f340 8090 ble.w 1000cf68 -1000ce48: 223e movs r2, #62 ; 0x3e -1000ce4a: f00a fae1 bl 10017410 -1000ce4e: 7c63 ldrb r3, [r4, #17] -1000ce50: 6822 ldr r2, [r4, #0] -1000ce52: 443b add r3, r7 -1000ce54: f852 2023 ldr.w r2, [r2, r3, lsl #2] -1000ce58: 2000 movs r0, #0 -1000ce5a: 7c23 ldrb r3, [r4, #16] -1000ce5c: 6826 ldr r6, [r4, #0] -1000ce5e: 3b01 subs r3, #1 -1000ce60: 4298 cmp r0, r3 -1000ce62: db63 blt.n 1000cf2c -1000ce64: 2a00 cmp r2, #0 -1000ce66: d176 bne.n 1000cf56 -1000ce68: 233e movs r3, #62 ; 0x3e -1000ce6a: 7c22 ldrb r2, [r4, #16] -1000ce6c: 4353 muls r3, r2 -1000ce6e: 6862 ldr r2, [r4, #4] -1000ce70: 3b3e subs r3, #62 ; 0x3e -1000ce72: 4413 add r3, r2 -1000ce74: f846 3020 str.w r3, [r6, r0, lsl #2] -1000ce78: e06f b.n 1000cf5a -1000ce7a: f856 1023 ldr.w r1, [r6, r3, lsl #2] -1000ce7e: 682a ldr r2, [r5, #0] -1000ce80: f891 e022 ldrb.w lr, [r1, #34] ; 0x22 -1000ce84: f892 7022 ldrb.w r7, [r2, #34] ; 0x22 -1000ce88: 45be cmp lr, r7 -1000ce8a: d143 bne.n 1000cf14 -1000ce8c: f891 e023 ldrb.w lr, [r1, #35] ; 0x23 -1000ce90: f892 7023 ldrb.w r7, [r2, #35] ; 0x23 -1000ce94: 45be cmp lr, r7 -1000ce96: d13d bne.n 1000cf14 -1000ce98: f891 e024 ldrb.w lr, [r1, #36] ; 0x24 -1000ce9c: f892 7024 ldrb.w r7, [r2, #36] ; 0x24 -1000cea0: 45be cmp lr, r7 -1000cea2: d137 bne.n 1000cf14 -1000cea4: f891 e025 ldrb.w lr, [r1, #37] ; 0x25 -1000cea8: f892 7025 ldrb.w r7, [r2, #37] ; 0x25 -1000ceac: 45be cmp lr, r7 -1000ceae: d131 bne.n 1000cf14 -1000ceb0: f891 e026 ldrb.w lr, [r1, #38] ; 0x26 -1000ceb4: f892 7026 ldrb.w r7, [r2, #38] ; 0x26 -1000ceb8: 45be cmp lr, r7 -1000ceba: d12b bne.n 1000cf14 -1000cebc: f891 e027 ldrb.w lr, [r1, #39] ; 0x27 -1000cec0: f892 7027 ldrb.w r7, [r2, #39] ; 0x27 -1000cec4: 45be cmp lr, r7 -1000cec6: d125 bne.n 1000cf14 -1000cec8: f9b2 0028 ldrsh.w r0, [r2, #40] ; 0x28 -1000cecc: f9b1 2028 ldrsh.w r2, [r1, #40] ; 0x28 -1000ced0: 4290 cmp r0, r2 -1000ced2: dd0b ble.n 1000ceec -1000ced4: 1e5a subs r2, r3, #1 -1000ced6: eb06 0383 add.w r3, r6, r3, lsl #2 -1000ceda: 1c50 adds r0, r2, #1 -1000cedc: d10d bne.n 1000cefa -1000cede: 3201 adds r2, #1 -1000cee0: f846 1022 str.w r1, [r6, r2, lsl #2] -1000cee4: 682b ldr r3, [r5, #0] -1000cee6: f9b3 3028 ldrsh.w r3, [r3, #40] ; 0x28 -1000ceea: 850b strh r3, [r1, #40] ; 0x28 -1000ceec: 6828 ldr r0, [r5, #0] -1000ceee: 223e movs r2, #62 ; 0x3e -1000cef0: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -1000cef4: 2100 movs r1, #0 -1000cef6: f00d be5f b.w 1001abb8 -1000cefa: f853 0c04 ldr.w r0, [r3, #-4] -1000cefe: 682c ldr r4, [r5, #0] -1000cf00: f9b0 7028 ldrsh.w r7, [r0, #40] ; 0x28 -1000cf04: f9b4 4028 ldrsh.w r4, [r4, #40] ; 0x28 -1000cf08: 42a7 cmp r7, r4 -1000cf0a: dae8 bge.n 1000cede -1000cf0c: f843 0904 str.w r0, [r3], #-4 -1000cf10: 3a01 subs r2, #1 -1000cf12: e7e2 b.n 1000ceda -1000cf14: 3301 adds r3, #1 -1000cf16: e781 b.n 1000ce1c -1000cf18: 223e movs r2, #62 ; 0x3e -1000cf1a: 4350 muls r0, r2 -1000cf1c: 6863 ldr r3, [r4, #4] -1000cf1e: 383e subs r0, #62 ; 0x3e -1000cf20: 6829 ldr r1, [r5, #0] -1000cf22: 4418 add r0, r3 -1000cf24: f00a fa74 bl 10017410 -1000cf28: 2200 movs r2, #0 -1000cf2a: e795 b.n 1000ce58 -1000cf2c: 682f ldr r7, [r5, #0] -1000cf2e: f856 1020 ldr.w r1, [r6, r0, lsl #2] -1000cf32: f9b7 7028 ldrsh.w r7, [r7, #40] ; 0x28 -1000cf36: f9b1 1028 ldrsh.w r1, [r1, #40] ; 0x28 -1000cf3a: 428f cmp r7, r1 -1000cf3c: dd09 ble.n 1000cf52 -1000cf3e: eb06 0183 add.w r1, r6, r3, lsl #2 -1000cf42: f851 7c04 ldr.w r7, [r1, #-4] -1000cf46: 3b01 subs r3, #1 -1000cf48: 4298 cmp r0, r3 -1000cf4a: f841 7904 str.w r7, [r1], #-4 -1000cf4e: dbf8 blt.n 1000cf42 -1000cf50: e788 b.n 1000ce64 -1000cf52: 3001 adds r0, #1 -1000cf54: e784 b.n 1000ce60 -1000cf56: f846 2020 str.w r2, [r6, r0, lsl #2] -1000cf5a: 6828 ldr r0, [r5, #0] -1000cf5c: 223e movs r2, #62 ; 0x3e -1000cf5e: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -1000cf62: 2100 movs r1, #0 -1000cf64: f00a ba64 b.w 10017430 -1000cf68: bdf8 pop {r3, r4, r5, r6, r7, pc} -1000cf6a: bf00 nop -1000cf6c: 1004a770 .word 0x1004a770 - -1000cf70 : -1000cf70: 4770 bx lr - ... - -1000cf74 : -1000cf74: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1000cf78: b0a3 sub sp, #140 ; 0x8c -1000cf7a: f10d 0a44 add.w sl, sp, #68 ; 0x44 -1000cf7e: 4dac ldr r5, [pc, #688] ; (1000d230 ) -1000cf80: 900d str r0, [sp, #52] ; 0x34 -1000cf82: 910f str r1, [sp, #60] ; 0x3c -1000cf84: 4691 mov r9, r2 -1000cf86: 2100 movs r1, #0 -1000cf88: 220e movs r2, #14 -1000cf8a: 4650 mov r0, sl -1000cf8c: 461f mov r7, r3 -1000cf8e: f8dd 80b0 ldr.w r8, [sp, #176] ; 0xb0 -1000cf92: 9e2e ldr r6, [sp, #184] ; 0xb8 -1000cf94: f030 fe36 bl 1003dc04 -1000cf98: 682b ldr r3, [r5, #0] -1000cf9a: f413 7f40 tst.w r3, #768 ; 0x300 -1000cf9e: f040 81f4 bne.w 1000d38a -1000cfa2: f1b9 0f00 cmp.w r9, #0 -1000cfa6: d04e beq.n 1000d046 -1000cfa8: 4648 mov r0, r9 -1000cfaa: f00d fe15 bl 1001abd8 -1000cfae: 2820 cmp r0, #32 -1000cfb0: bfa8 it ge -1000cfb2: 2020 movge r0, #32 -1000cfb4: 4683 mov fp, r0 -1000cfb6: f1b8 0f00 cmp.w r8, #0 -1000cfba: d046 beq.n 1000d04a -1000cfbc: 4640 mov r0, r8 -1000cfbe: f00d fe0b bl 1001abd8 -1000cfc2: 2840 cmp r0, #64 ; 0x40 -1000cfc4: bfa8 it ge -1000cfc6: 2040 movge r0, #64 ; 0x40 -1000cfc8: 4604 mov r4, r0 -1000cfca: 2300 movs r3, #0 -1000cfcc: 2105 movs r1, #5 -1000cfce: 602b str r3, [r5, #0] -1000cfd0: 4b98 ldr r3, [pc, #608] ; (1000d234 ) -1000cfd2: 203c movs r0, #60 ; 0x3c -1000cfd4: 7019 strb r1, [r3, #0] -1000cfd6: 930e str r3, [sp, #56] ; 0x38 -1000cfd8: f00a fbea bl 100177b0 -1000cfdc: 4605 mov r5, r0 -1000cfde: 2800 cmp r0, #0 -1000cfe0: f000 81d6 beq.w 1000d390 -1000cfe4: f1bb 0f00 cmp.w fp, #0 -1000cfe8: d008 beq.n 1000cffc -1000cfea: f1b9 0f00 cmp.w r9, #0 -1000cfee: d005 beq.n 1000cffc -1000cff0: f800 bb01 strb.w fp, [r0], #1 -1000cff4: 465a mov r2, fp -1000cff6: 4649 mov r1, r9 -1000cff8: f00a fa0a bl 10017410 -1000cffc: 9b0d ldr r3, [sp, #52] ; 0x34 -1000cffe: b12b cbz r3, 1000d00c -1000d000: 2206 movs r2, #6 -1000d002: 4619 mov r1, r3 -1000d004: f105 0022 add.w r0, r5, #34 ; 0x22 -1000d008: f00a fa02 bl 10017410 -1000d00c: 2305 movs r3, #5 -1000d00e: 9a0e ldr r2, [sp, #56] ; 0x38 -1000d010: 7013 strb r3, [r2, #0] -1000d012: f1a4 0308 sub.w r3, r4, #8 -1000d016: 2b38 cmp r3, #56 ; 0x38 -1000d018: d919 bls.n 1000d04e -1000d01a: 4b87 ldr r3, [pc, #540] ; (1000d238 ) -1000d01c: 429f cmp r7, r3 -1000d01e: d00b beq.n 1000d038 -1000d020: 3302 adds r3, #2 -1000d022: 429f cmp r7, r3 -1000d024: d008 beq.n 1000d038 -1000d026: f503 1300 add.w r3, r3, #2097152 ; 0x200000 -1000d02a: 429f cmp r7, r3 -1000d02c: d004 beq.n 1000d038 -1000d02e: f027 0204 bic.w r2, r7, #4 -1000d032: 3b02 subs r3, #2 -1000d034: 429a cmp r2, r3 -1000d036: d10a bne.n 1000d04e -1000d038: 2303 movs r3, #3 -1000d03a: 2004 movs r0, #4 -1000d03c: 9a0e ldr r2, [sp, #56] ; 0x38 -1000d03e: 7013 strb r3, [r2, #0] -1000d040: b023 add sp, #140 ; 0x8c -1000d042: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1000d046: 46cb mov fp, r9 -1000d048: e7b5 b.n 1000cfb6 -1000d04a: 4644 mov r4, r8 -1000d04c: e7bd b.n 1000cfca -1000d04e: f427 4300 bic.w r3, r7, #32768 ; 0x8000 -1000d052: 2b01 cmp r3, #1 -1000d054: f040 80bc bne.w 1000d1d0 -1000d058: f024 0308 bic.w r3, r4, #8 -1000d05c: 2b05 cmp r3, #5 -1000d05e: f000 80b7 beq.w 1000d1d0 -1000d062: 2c0a cmp r4, #10 -1000d064: d030 beq.n 1000d0c8 -1000d066: 2c1a cmp r4, #26 -1000d068: d1e6 bne.n 1000d038 -1000d06a: f10d 0954 add.w r9, sp, #84 ; 0x54 -1000d06e: 2234 movs r2, #52 ; 0x34 -1000d070: 2100 movs r1, #0 -1000d072: 4648 mov r0, r9 -1000d074: f030 fdc6 bl 1003dc04 -1000d078: ab21 add r3, sp, #132 ; 0x84 -1000d07a: 930a str r3, [sp, #40] ; 0x28 -1000d07c: ab20 add r3, sp, #128 ; 0x80 -1000d07e: 9309 str r3, [sp, #36] ; 0x24 -1000d080: ab1f add r3, sp, #124 ; 0x7c -1000d082: 9308 str r3, [sp, #32] -1000d084: ab1e add r3, sp, #120 ; 0x78 -1000d086: 9307 str r3, [sp, #28] -1000d088: ab1d add r3, sp, #116 ; 0x74 -1000d08a: 9306 str r3, [sp, #24] -1000d08c: ab1c add r3, sp, #112 ; 0x70 -1000d08e: 9305 str r3, [sp, #20] -1000d090: ab1b add r3, sp, #108 ; 0x6c -1000d092: 9304 str r3, [sp, #16] -1000d094: ab1a add r3, sp, #104 ; 0x68 -1000d096: 9303 str r3, [sp, #12] -1000d098: ab19 add r3, sp, #100 ; 0x64 -1000d09a: 9302 str r3, [sp, #8] -1000d09c: ab18 add r3, sp, #96 ; 0x60 -1000d09e: 9301 str r3, [sp, #4] -1000d0a0: ab17 add r3, sp, #92 ; 0x5c -1000d0a2: 9300 str r3, [sp, #0] -1000d0a4: 464a mov r2, r9 -1000d0a6: ab16 add r3, sp, #88 ; 0x58 -1000d0a8: 4964 ldr r1, [pc, #400] ; (1000d23c ) -1000d0aa: 4640 mov r0, r8 -1000d0ac: f030 fe6c bl 1003dd88 -1000d0b0: 2400 movs r4, #0 -1000d0b2: f859 3024 ldr.w r3, [r9, r4, lsl #2] -1000d0b6: f80a 3004 strb.w r3, [sl, r4] -1000d0ba: 3401 adds r4, #1 -1000d0bc: 2c0d cmp r4, #13 -1000d0be: d1f8 bne.n 1000d0b2 -1000d0c0: 2300 movs r3, #0 -1000d0c2: f88d 3051 strb.w r3, [sp, #81] ; 0x51 -1000d0c6: e01d b.n 1000d104 -1000d0c8: f10d 0954 add.w r9, sp, #84 ; 0x54 -1000d0cc: 2214 movs r2, #20 -1000d0ce: 2100 movs r1, #0 -1000d0d0: 4648 mov r0, r9 -1000d0d2: f030 fd97 bl 1003dc04 -1000d0d6: ab19 add r3, sp, #100 ; 0x64 -1000d0d8: 9302 str r3, [sp, #8] -1000d0da: ab18 add r3, sp, #96 ; 0x60 -1000d0dc: 9301 str r3, [sp, #4] -1000d0de: ab17 add r3, sp, #92 ; 0x5c -1000d0e0: 9300 str r3, [sp, #0] -1000d0e2: 464a mov r2, r9 -1000d0e4: ab16 add r3, sp, #88 ; 0x58 -1000d0e6: 4956 ldr r1, [pc, #344] ; (1000d240 ) -1000d0e8: 4640 mov r0, r8 -1000d0ea: f030 fe4d bl 1003dd88 -1000d0ee: 2400 movs r4, #0 -1000d0f0: f859 3024 ldr.w r3, [r9, r4, lsl #2] -1000d0f4: f80a 3004 strb.w r3, [sl, r4] -1000d0f8: 3401 adds r4, #1 -1000d0fa: 2c05 cmp r4, #5 -1000d0fc: d1f8 bne.n 1000d0f0 -1000d0fe: 2300 movs r3, #0 -1000d100: f88d 3049 strb.w r3, [sp, #73] ; 0x49 -1000d104: f04f 0901 mov.w r9, #1 -1000d108: 632c str r4, [r5, #48] ; 0x30 -1000d10a: b16c cbz r4, 1000d128 -1000d10c: 1c60 adds r0, r4, #1 -1000d10e: f00a fb4f bl 100177b0 -1000d112: 62e8 str r0, [r5, #44] ; 0x2c -1000d114: 2800 cmp r0, #0 -1000d116: f000 811a beq.w 1000d34e -1000d11a: 4622 mov r2, r4 -1000d11c: f1b9 0f00 cmp.w r9, #0 -1000d120: d159 bne.n 1000d1d6 -1000d122: 4641 mov r1, r8 -1000d124: f00a f974 bl 10017410 -1000d128: 9b2d ldr r3, [sp, #180] ; 0xb4 -1000d12a: 62af str r7, [r5, #40] ; 0x28 -1000d12c: 636b str r3, [r5, #52] ; 0x34 -1000d12e: 2e00 cmp r6, #0 -1000d130: d153 bne.n 1000d1da -1000d132: 4631 mov r1, r6 -1000d134: f105 0038 add.w r0, r5, #56 ; 0x38 -1000d138: f00a f99e bl 10017478 -1000d13c: 6bab ldr r3, [r5, #56] ; 0x38 -1000d13e: 2b00 cmp r3, #0 -1000d140: f000 811e beq.w 1000d380 -1000d144: 9310 str r3, [sp, #64] ; 0x40 -1000d146: 2200 movs r2, #0 -1000d148: 493e ldr r1, [pc, #248] ; (1000d244 ) -1000d14a: 200e movs r0, #14 -1000d14c: f000 fa32 bl 1000d5b4 -1000d150: 2200 movs r2, #0 -1000d152: 493d ldr r1, [pc, #244] ; (1000d248 ) -1000d154: 4610 mov r0, r2 -1000d156: f000 fa2d bl 1000d5b4 -1000d15a: 2200 movs r2, #0 -1000d15c: 493b ldr r1, [pc, #236] ; (1000d24c ) -1000d15e: 2001 movs r0, #1 -1000d160: f000 fa28 bl 1000d5b4 -1000d164: 2200 movs r2, #0 -1000d166: 493a ldr r1, [pc, #232] ; (1000d250 ) -1000d168: 2002 movs r0, #2 -1000d16a: f000 fa23 bl 1000d5b4 -1000d16e: f000 fa79 bl 1000d664 -1000d172: b120 cbz r0, 1000d17e -1000d174: 2200 movs r2, #0 -1000d176: 4611 mov r1, r2 -1000d178: 4610 mov r0, r2 -1000d17a: f000 fa71 bl 1000d660 -1000d17e: 6aab ldr r3, [r5, #40] ; 0x28 -1000d180: 4a34 ldr r2, [pc, #208] ; (1000d254 ) -1000d182: 4293 cmp r3, r2 -1000d184: d07a beq.n 1000d27c -1000d186: dc4c bgt.n 1000d222 -1000d188: 2b01 cmp r3, #1 -1000d18a: f000 80b6 beq.w 1000d2fa -1000d18e: dc26 bgt.n 1000d1de -1000d190: 2b00 cmp r3, #0 -1000d192: f000 8083 beq.w 1000d29c -1000d196: 4a30 ldr r2, [pc, #192] ; (1000d258 ) -1000d198: 4619 mov r1, r3 -1000d19a: 4830 ldr r0, [pc, #192] ; (1000d25c ) -1000d19c: f00d fce0 bl 1001ab60 -1000d1a0: 4b2f ldr r3, [pc, #188] ; (1000d260 ) -1000d1a2: 601d str r5, [r3, #0] -1000d1a4: 2e00 cmp r6, #0 -1000d1a6: f040 80ee bne.w 1000d386 -1000d1aa: f643 2198 movw r1, #15000 ; 0x3a98 -1000d1ae: f105 0038 add.w r0, r5, #56 ; 0x38 -1000d1b2: f00a f981 bl 100174b8 -1000d1b6: 2800 cmp r0, #0 -1000d1b8: f040 80b9 bne.w 1000d32e -1000d1bc: 4829 ldr r0, [pc, #164] ; (1000d264 ) -1000d1be: f00d fccf bl 1001ab60 -1000d1c2: b11c cbz r4, 1000d1cc -1000d1c4: 4631 mov r1, r6 -1000d1c6: 6ae8 ldr r0, [r5, #44] ; 0x2c -1000d1c8: f00a f91f bl 1001740a -1000d1cc: 2402 movs r4, #2 -1000d1ce: e0ba b.n 1000d346 -1000d1d0: f04f 0900 mov.w r9, #0 -1000d1d4: e798 b.n 1000d108 -1000d1d6: 4651 mov r1, sl -1000d1d8: e7a4 b.n 1000d124 -1000d1da: 63ae str r6, [r5, #56] ; 0x38 -1000d1dc: e7b3 b.n 1000d146 -1000d1de: f248 0201 movw r2, #32769 ; 0x8001 -1000d1e2: 4293 cmp r3, r2 -1000d1e4: f000 8089 beq.w 1000d2fa -1000d1e8: 4a13 ldr r2, [pc, #76] ; (1000d238 ) -1000d1ea: 4293 cmp r3, r2 -1000d1ec: d1d3 bne.n 1000d196 -1000d1ee: 2201 movs r2, #1 -1000d1f0: 2106 movs r1, #6 -1000d1f2: 481d ldr r0, [pc, #116] ; (1000d268 ) -1000d1f4: f000 fa95 bl 1000d722 -1000d1f8: 4603 mov r3, r0 -1000d1fa: 2800 cmp r0, #0 -1000d1fc: d1d0 bne.n 1000d1a0 -1000d1fe: 4602 mov r2, r0 -1000d200: 2102 movs r1, #2 -1000d202: 9004 str r0, [sp, #16] -1000d204: 9003 str r0, [sp, #12] -1000d206: 9002 str r0, [sp, #8] -1000d208: 9001 str r0, [sp, #4] -1000d20a: 9000 str r0, [sp, #0] -1000d20c: 4816 ldr r0, [pc, #88] ; (1000d268 ) -1000d20e: f000 fa9f bl 1000d750 -1000d212: 2800 cmp r0, #0 -1000d214: d1c4 bne.n 1000d1a0 -1000d216: 8e2a ldrh r2, [r5, #48] ; 0x30 -1000d218: 6ae9 ldr r1, [r5, #44] ; 0x2c -1000d21a: 4813 ldr r0, [pc, #76] ; (1000d268 ) -1000d21c: f000 fb17 bl 1000d84e -1000d220: e046 b.n 1000d2b0 -1000d222: 4a12 ldr r2, [pc, #72] ; (1000d26c ) -1000d224: 4293 cmp r3, r2 -1000d226: d029 beq.n 1000d27c -1000d228: dc22 bgt.n 1000d270 -1000d22a: 3a02 subs r2, #2 -1000d22c: e7dd b.n 1000d1ea -1000d22e: bf00 nop -1000d230: 1004a76c .word 0x1004a76c -1000d234: 10044ce4 .word 0x10044ce4 -1000d238: 00200002 .word 0x00200002 -1000d23c: 1003fb32 .word 0x1003fb32 -1000d240: 1003fb52 .word 0x1003fb52 -1000d244: 1000cd3d .word 0x1000cd3d -1000d248: 1000cddd .word 0x1000cddd -1000d24c: 1000cd71 .word 0x1000cd71 -1000d250: 1000cd55 .word 0x1000cd55 -1000d254: 00200004 .word 0x00200004 -1000d258: 1003fb1f .word 0x1003fb1f -1000d25c: 1003fb6d .word 0x1003fb6d -1000d260: 1004a768 .word 0x1004a768 -1000d264: 1003fb98 .word 0x1003fb98 -1000d268: 1003fb67 .word 0x1003fb67 -1000d26c: 00400004 .word 0x00400004 -1000d270: 4a49 ldr r2, [pc, #292] ; (1000d398 ) -1000d272: 4293 cmp r3, r2 -1000d274: d002 beq.n 1000d27c -1000d276: f5b3 0fc0 cmp.w r3, #6291456 ; 0x600000 -1000d27a: d18c bne.n 1000d196 -1000d27c: 2201 movs r2, #1 -1000d27e: 2106 movs r1, #6 -1000d280: 4846 ldr r0, [pc, #280] ; (1000d39c ) -1000d282: f000 fa4e bl 1000d722 -1000d286: 4603 mov r3, r0 -1000d288: 2800 cmp r0, #0 -1000d28a: d189 bne.n 1000d1a0 -1000d28c: 9004 str r0, [sp, #16] -1000d28e: 9003 str r0, [sp, #12] -1000d290: 9002 str r0, [sp, #8] -1000d292: 9001 str r0, [sp, #4] -1000d294: 9000 str r0, [sp, #0] -1000d296: 4602 mov r2, r0 -1000d298: 2103 movs r1, #3 -1000d29a: e7b7 b.n 1000d20c -1000d29c: 461a mov r2, r3 -1000d29e: 4619 mov r1, r3 -1000d2a0: 9304 str r3, [sp, #16] -1000d2a2: 9303 str r3, [sp, #12] -1000d2a4: 9302 str r3, [sp, #8] -1000d2a6: 9301 str r3, [sp, #4] -1000d2a8: 9300 str r3, [sp, #0] -1000d2aa: 483c ldr r0, [pc, #240] ; (1000d39c ) -1000d2ac: f000 fa50 bl 1000d750 -1000d2b0: 4607 mov r7, r0 -1000d2b2: 2800 cmp r0, #0 -1000d2b4: f47f af74 bne.w 1000d1a0 -1000d2b8: 9b0f ldr r3, [sp, #60] ; 0x3c -1000d2ba: b38b cbz r3, 1000d320 -1000d2bc: f10d 0854 add.w r8, sp, #84 ; 0x54 -1000d2c0: 9015 str r0, [sp, #84] ; 0x54 -1000d2c2: f8c8 0004 str.w r0, [r8, #4] -1000d2c6: f8c8 0008 str.w r0, [r8, #8] -1000d2ca: 2206 movs r2, #6 -1000d2cc: f105 0122 add.w r1, r5, #34 ; 0x22 -1000d2d0: 4640 mov r0, r8 -1000d2d2: f00d fc6d bl 1001abb0 -1000d2d6: 463b mov r3, r7 -1000d2d8: f818 2007 ldrb.w r2, [r8, r7] -1000d2dc: 3701 adds r7, #1 -1000d2de: 4413 add r3, r2 -1000d2e0: 2f06 cmp r7, #6 -1000d2e2: b29b uxth r3, r3 -1000d2e4: d1f8 bne.n 1000d2d8 -1000d2e6: f240 52fa movw r2, #1530 ; 0x5fa -1000d2ea: 4293 cmp r3, r2 -1000d2ec: d018 beq.n 1000d320 -1000d2ee: b1bb cbz r3, 1000d320 -1000d2f0: 4641 mov r1, r8 -1000d2f2: 482a ldr r0, [pc, #168] ; (1000d39c ) -1000d2f4: f000 f9e0 bl 1000d6b8 -1000d2f8: e752 b.n 1000d1a0 -1000d2fa: 2202 movs r2, #2 -1000d2fc: 2106 movs r1, #6 -1000d2fe: 4827 ldr r0, [pc, #156] ; (1000d39c ) -1000d300: f000 fa0f bl 1000d722 -1000d304: 4602 mov r2, r0 -1000d306: 2800 cmp r0, #0 -1000d308: f47f af4a bne.w 1000d1a0 -1000d30c: 2101 movs r1, #1 -1000d30e: 8e2b ldrh r3, [r5, #48] ; 0x30 -1000d310: 9304 str r3, [sp, #16] -1000d312: 6aeb ldr r3, [r5, #44] ; 0x2c -1000d314: 9002 str r0, [sp, #8] -1000d316: 9303 str r3, [sp, #12] -1000d318: 9001 str r0, [sp, #4] -1000d31a: 9100 str r1, [sp, #0] -1000d31c: 6b6b ldr r3, [r5, #52] ; 0x34 -1000d31e: e7c4 b.n 1000d2aa -1000d320: 4629 mov r1, r5 -1000d322: 481e ldr r0, [pc, #120] ; (1000d39c ) -1000d324: f811 2b01 ldrb.w r2, [r1], #1 -1000d328: f000 f9ac bl 1000d684 -1000d32c: e738 b.n 1000d1a0 -1000d32e: 6b2b ldr r3, [r5, #48] ; 0x30 -1000d330: b11b cbz r3, 1000d33a -1000d332: 4631 mov r1, r6 -1000d334: 6ae8 ldr r0, [r5, #44] ; 0x2c -1000d336: f00a f868 bl 1001740a -1000d33a: f029 ffc7 bl 100372cc -1000d33e: 3000 adds r0, #0 -1000d340: bf18 it ne -1000d342: 2001 movne r0, #1 -1000d344: 4244 negs r4, r0 -1000d346: a810 add r0, sp, #64 ; 0x40 -1000d348: f00a f89e bl 10017488 -1000d34c: e003 b.n 1000d356 -1000d34e: f06f 041a mvn.w r4, #26 -1000d352: 2e00 cmp r6, #0 -1000d354: d0f7 beq.n 1000d346 -1000d356: 2600 movs r6, #0 -1000d358: 4b11 ldr r3, [pc, #68] ; (1000d3a0 ) -1000d35a: 4631 mov r1, r6 -1000d35c: 4628 mov r0, r5 -1000d35e: 601e str r6, [r3, #0] -1000d360: f00a f853 bl 1001740a -1000d364: 490f ldr r1, [pc, #60] ; (1000d3a4 ) -1000d366: 4630 mov r0, r6 -1000d368: f000 f94c bl 1000d604 -1000d36c: 490e ldr r1, [pc, #56] ; (1000d3a8 ) -1000d36e: 200e movs r0, #14 -1000d370: f000 f948 bl 1000d604 -1000d374: 2002 movs r0, #2 -1000d376: 490d ldr r1, [pc, #52] ; (1000d3ac ) -1000d378: f000 f944 bl 1000d604 -1000d37c: 4620 mov r0, r4 -1000d37e: e65f b.n 1000d040 -1000d380: f06f 0415 mvn.w r4, #21 -1000d384: e7df b.n 1000d346 -1000d386: 2400 movs r4, #0 -1000d388: e7e5 b.n 1000d356 -1000d38a: f04f 30ff mov.w r0, #4294967295 -1000d38e: e657 b.n 1000d040 -1000d390: f06f 001a mvn.w r0, #26 -1000d394: e654 b.n 1000d040 -1000d396: bf00 nop -1000d398: 00400006 .word 0x00400006 -1000d39c: 1003fb67 .word 0x1003fb67 -1000d3a0: 1004a768 .word 0x1004a768 -1000d3a4: 1000cddd .word 0x1000cddd -1000d3a8: 1000cd3d .word 0x1000cd3d -1000d3ac: 1000cd55 .word 0x1000cd55 - -1000d3b0 : -1000d3b0: b513 push {r0, r1, r4, lr} -1000d3b2: 2301 movs r3, #1 -1000d3b4: 2400 movs r4, #0 -1000d3b6: 4669 mov r1, sp -1000d3b8: 4808 ldr r0, [pc, #32] ; (1000d3dc ) -1000d3ba: 9401 str r4, [sp, #4] -1000d3bc: 9400 str r4, [sp, #0] -1000d3be: f88d 3005 strb.w r3, [sp, #5] -1000d3c2: f000 f979 bl 1000d6b8 -1000d3c6: 42a0 cmp r0, r4 -1000d3c8: da06 bge.n 1000d3d8 -1000d3ca: 4805 ldr r0, [pc, #20] ; (1000d3e0 ) -1000d3cc: f00d fbc8 bl 1001ab60 -1000d3d0: f04f 30ff mov.w r0, #4294967295 -1000d3d4: b002 add sp, #8 -1000d3d6: bd10 pop {r4, pc} -1000d3d8: 4620 mov r0, r4 -1000d3da: e7fb b.n 1000d3d4 -1000d3dc: 1003fb67 .word 0x1003fb67 -1000d3e0: 1003fbb3 .word 0x1003fbb3 - -1000d3e4 : -1000d3e4: 4601 mov r1, r0 -1000d3e6: 4801 ldr r0, [pc, #4] ; (1000d3ec ) -1000d3e8: f000 ba77 b.w 1000d8da -1000d3ec: 1003fb67 .word 0x1003fb67 - -1000d3f0 : -1000d3f0: 4601 mov r1, r0 -1000d3f2: 4801 ldr r0, [pc, #4] ; (1000d3f8 ) -1000d3f4: f000 ba83 b.w 1000d8fe -1000d3f8: 1003fb67 .word 0x1003fb67 - -1000d3fc : -1000d3fc: b510 push {r4, lr} -1000d3fe: f008 ff09 bl 10016214 -1000d402: 4604 mov r4, r0 -1000d404: f007 fd86 bl 10014f14 -1000d408: 2104 movs r1, #4 -1000d40a: 2000 movs r0, #0 -1000d40c: f000 fb9e bl 1000db4c -1000d410: 2104 movs r1, #4 -1000d412: 2001 movs r0, #1 -1000d414: f000 fb9a bl 1000db4c -1000d418: 2000 movs r0, #0 -1000d41a: f029 feeb bl 100371f4 -1000d41e: b178 cbz r0, 1000d440 -1000d420: f029 fd50 bl 10036ec4 -1000d424: 2000 movs r0, #0 -1000d426: f029 fee5 bl 100371f4 -1000d42a: b178 cbz r0, 1000d44c -1000d42c: f008 fef2 bl 10016214 -1000d430: 1b00 subs r0, r0, r4 -1000d432: f5b0 6ffa cmp.w r0, #2000 ; 0x7d0 -1000d436: d913 bls.n 1000d460 -1000d438: 480b ldr r0, [pc, #44] ; (1000d468 ) -1000d43a: f00d fb91 bl 1001ab60 -1000d43e: e00a b.n 1000d456 -1000d440: 2001 movs r0, #1 -1000d442: f029 fed7 bl 100371f4 -1000d446: 2800 cmp r0, #0 -1000d448: d1ea bne.n 1000d420 -1000d44a: bd10 pop {r4, pc} -1000d44c: 2001 movs r0, #1 -1000d44e: f029 fed1 bl 100371f4 -1000d452: 2800 cmp r0, #0 -1000d454: d1ea bne.n 1000d42c -1000d456: 2200 movs r2, #0 -1000d458: 4b04 ldr r3, [pc, #16] ; (1000d46c ) -1000d45a: 2001 movs r0, #1 -1000d45c: 701a strb r2, [r3, #0] -1000d45e: bd10 pop {r4, pc} -1000d460: 200a movs r0, #10 -1000d462: f008 ffe5 bl 10016430 -1000d466: e7dd b.n 1000d424 -1000d468: 1003fbfb .word 0x1003fbfb -1000d46c: 1004a784 .word 0x1004a784 - -1000d470 : -1000d470: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1000d474: b087 sub sp, #28 -1000d476: 468b mov fp, r1 -1000d478: 4615 mov r5, r2 -1000d47a: 461e mov r6, r3 -1000d47c: f99d a040 ldrsb.w sl, [sp, #64] ; 0x40 -1000d480: 4680 mov r8, r0 -1000d482: 2800 cmp r0, #0 -1000d484: d03b beq.n 1000d4fe -1000d486: f00d fba7 bl 1001abd8 -1000d48a: 2820 cmp r0, #32 -1000d48c: bfa8 it ge -1000d48e: 2020 movge r0, #32 -1000d490: 4607 mov r7, r0 -1000d492: 2d00 cmp r5, #0 -1000d494: d035 beq.n 1000d502 -1000d496: 4628 mov r0, r5 -1000d498: f00d fb9e bl 1001abd8 -1000d49c: 2840 cmp r0, #64 ; 0x40 -1000d49e: bfa8 it ge -1000d4a0: 2040 movge r0, #64 ; 0x40 -1000d4a2: 4681 mov r9, r0 -1000d4a4: 4b2a ldr r3, [pc, #168] ; (1000d550 ) -1000d4a6: 4c2b ldr r4, [pc, #172] ; (1000d554 ) -1000d4a8: 781a ldrb r2, [r3, #0] -1000d4aa: 4b2b ldr r3, [pc, #172] ; (1000d558 ) -1000d4ac: 2a03 cmp r2, #3 -1000d4ae: bf08 it eq -1000d4b0: 461c moveq r4, r3 -1000d4b2: f000 f8d7 bl 1000d664 -1000d4b6: b120 cbz r0, 1000d4c2 -1000d4b8: 2200 movs r2, #0 -1000d4ba: 4611 mov r1, r2 -1000d4bc: 4610 mov r0, r2 -1000d4be: f000 f8cf bl 1000d660 -1000d4c2: 2103 movs r1, #3 -1000d4c4: 4620 mov r0, r4 -1000d4c6: f000 f9dc bl 1000d882 -1000d4ca: 2800 cmp r0, #0 -1000d4cc: db35 blt.n 1000d53a -1000d4ce: 1e73 subs r3, r6, #1 -1000d4d0: 2b0e cmp r3, #14 -1000d4d2: bf28 it cs -1000d4d4: 2601 movcs r6, #1 -1000d4d6: 4620 mov r0, r4 -1000d4d8: b2f1 uxtb r1, r6 -1000d4da: f000 fa26 bl 1000d92a -1000d4de: 2800 cmp r0, #0 -1000d4e0: db2b blt.n 1000d53a -1000d4e2: f1bb 0f00 cmp.w fp, #0 -1000d4e6: d10e bne.n 1000d506 -1000d4e8: f1ba 0f00 cmp.w sl, #0 -1000d4ec: d128 bne.n 1000d540 -1000d4ee: 4641 mov r1, r8 -1000d4f0: 4620 mov r0, r4 -1000d4f2: b2ba uxth r2, r7 -1000d4f4: b007 add sp, #28 -1000d4f6: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1000d4fa: f000 b9d4 b.w 1000d8a6 -1000d4fe: 4607 mov r7, r0 -1000d500: e7c7 b.n 1000d492 -1000d502: 46a9 mov r9, r5 -1000d504: e7ce b.n 1000d4a4 -1000d506: 2201 movs r2, #1 -1000d508: 2106 movs r1, #6 -1000d50a: 4620 mov r0, r4 -1000d50c: f000 f909 bl 1000d722 -1000d510: b988 cbnz r0, 1000d536 -1000d512: 9004 str r0, [sp, #16] -1000d514: 9003 str r0, [sp, #12] -1000d516: 9002 str r0, [sp, #8] -1000d518: 9001 str r0, [sp, #4] -1000d51a: 9000 str r0, [sp, #0] -1000d51c: 4603 mov r3, r0 -1000d51e: 4602 mov r2, r0 -1000d520: 2103 movs r1, #3 -1000d522: 4620 mov r0, r4 -1000d524: f000 f914 bl 1000d750 -1000d528: b928 cbnz r0, 1000d536 -1000d52a: fa1f f289 uxth.w r2, r9 -1000d52e: 4629 mov r1, r5 -1000d530: 4620 mov r0, r4 -1000d532: f000 f98c bl 1000d84e -1000d536: 2800 cmp r0, #0 -1000d538: dad6 bge.n 1000d4e8 -1000d53a: b007 add sp, #28 -1000d53c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1000d540: 2101 movs r1, #1 -1000d542: 4620 mov r0, r4 -1000d544: f00e ff6c bl 1001c420 -1000d548: 2800 cmp r0, #0 -1000d54a: dad0 bge.n 1000d4ee -1000d54c: e7f5 b.n 1000d53a -1000d54e: bf00 nop -1000d550: 1004a784 .word 0x1004a784 -1000d554: 1003fb67 .word 0x1003fb67 -1000d558: 1003fbe2 .word 0x1003fbe2 - -1000d55c : -1000d55c: f020 0302 bic.w r3, r0, #2 -1000d560: 2b01 cmp r3, #1 -1000d562: d001 beq.n 1000d568 -1000d564: 280b cmp r0, #11 -1000d566: d102 bne.n 1000d56e -1000d568: b2c0 uxtb r0, r0 -1000d56a: f029 be69 b.w 10037240 -1000d56e: f04f 30ff mov.w r0, #4294967295 -1000d572: 4770 bx lr - -1000d574 : -1000d574: 280f cmp r0, #15 -1000d576: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -1000d57a: 460d mov r5, r1 -1000d57c: 4616 mov r6, r2 -1000d57e: 461f mov r7, r3 -1000d580: dc13 bgt.n 1000d5aa -1000d582: 2318 movs r3, #24 -1000d584: 4358 muls r0, r3 -1000d586: 4b0a ldr r3, [pc, #40] ; (1000d5b0 ) -1000d588: 181c adds r4, r3, r0 -1000d58a: 3018 adds r0, #24 -1000d58c: eb03 0800 add.w r8, r3, r0 -1000d590: f8d4 9000 ldr.w r9, [r4] -1000d594: f1b9 0f00 cmp.w r9, #0 -1000d598: d004 beq.n 1000d5a4 -1000d59a: 6863 ldr r3, [r4, #4] -1000d59c: 463a mov r2, r7 -1000d59e: 4631 mov r1, r6 -1000d5a0: 4628 mov r0, r5 -1000d5a2: 47c8 blx r9 -1000d5a4: 3408 adds r4, #8 -1000d5a6: 4544 cmp r4, r8 -1000d5a8: d1f2 bne.n 1000d590 -1000d5aa: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1000d5ae: bf00 nop -1000d5b0: 1004a788 .word 0x1004a788 - -1000d5b4 : -1000d5b4: 280f cmp r0, #15 -1000d5b6: b570 push {r4, r5, r6, lr} -1000d5b8: d81d bhi.n 1000d5f6 -1000d5ba: 2418 movs r4, #24 -1000d5bc: 4344 muls r4, r0 -1000d5be: 4b10 ldr r3, [pc, #64] ; (1000d600 ) -1000d5c0: 191d adds r5, r3, r4 -1000d5c2: 591c ldr r4, [r3, r4] -1000d5c4: b1c4 cbz r4, 1000d5f8 -1000d5c6: 68ae ldr r6, [r5, #8] -1000d5c8: b1c6 cbz r6, 1000d5fc -1000d5ca: 692d ldr r5, [r5, #16] -1000d5cc: b99d cbnz r5, 1000d5f6 -1000d5ce: 2502 movs r5, #2 -1000d5d0: 42a1 cmp r1, r4 -1000d5d2: d010 beq.n 1000d5f6 -1000d5d4: 2418 movs r4, #24 -1000d5d6: fb04 3400 mla r4, r4, r0, r3 -1000d5da: 68a6 ldr r6, [r4, #8] -1000d5dc: 42b1 cmp r1, r6 -1000d5de: d00a beq.n 1000d5f6 -1000d5e0: 6924 ldr r4, [r4, #16] -1000d5e2: 428c cmp r4, r1 -1000d5e4: d007 beq.n 1000d5f6 -1000d5e6: eb00 0040 add.w r0, r0, r0, lsl #1 -1000d5ea: 4428 add r0, r5 -1000d5ec: f843 1030 str.w r1, [r3, r0, lsl #3] -1000d5f0: eb03 00c0 add.w r0, r3, r0, lsl #3 -1000d5f4: 6042 str r2, [r0, #4] -1000d5f6: bd70 pop {r4, r5, r6, pc} -1000d5f8: 4625 mov r5, r4 -1000d5fa: e7e9 b.n 1000d5d0 -1000d5fc: 2501 movs r5, #1 -1000d5fe: e7e7 b.n 1000d5d0 -1000d600: 1004a788 .word 0x1004a788 - -1000d604 : -1000d604: 280f cmp r0, #15 -1000d606: b510 push {r4, lr} -1000d608: d816 bhi.n 1000d638 -1000d60a: 2218 movs r2, #24 -1000d60c: 4342 muls r2, r0 -1000d60e: 4b0d ldr r3, [pc, #52] ; (1000d644 ) -1000d610: 189c adds r4, r3, r2 -1000d612: 589a ldr r2, [r3, r2] -1000d614: 4291 cmp r1, r2 -1000d616: d010 beq.n 1000d63a -1000d618: 68a2 ldr r2, [r4, #8] -1000d61a: 4291 cmp r1, r2 -1000d61c: d00f beq.n 1000d63e -1000d61e: 6922 ldr r2, [r4, #16] -1000d620: 428a cmp r2, r1 -1000d622: d109 bne.n 1000d638 -1000d624: 2202 movs r2, #2 -1000d626: eb00 0040 add.w r0, r0, r0, lsl #1 -1000d62a: 4410 add r0, r2 -1000d62c: 2200 movs r2, #0 -1000d62e: f843 2030 str.w r2, [r3, r0, lsl #3] -1000d632: eb03 03c0 add.w r3, r3, r0, lsl #3 -1000d636: 605a str r2, [r3, #4] -1000d638: bd10 pop {r4, pc} -1000d63a: 2200 movs r2, #0 -1000d63c: e7f3 b.n 1000d626 -1000d63e: 2201 movs r2, #1 -1000d640: e7f1 b.n 1000d626 -1000d642: bf00 nop -1000d644: 1004a788 .word 0x1004a788 - -1000d648 : -1000d648: f44f 72c0 mov.w r2, #384 ; 0x180 -1000d64c: 2100 movs r1, #0 -1000d64e: 4801 ldr r0, [pc, #4] ; (1000d654 ) -1000d650: f00d bab2 b.w 1001abb8 -1000d654: 1004a788 .word 0x1004a788 - -1000d658 : -1000d658: f016 baa2 b.w 10023ba0 <_promisc_deinit> - -1000d65c : -1000d65c: f016 bac8 b.w 10023bf0 <_promisc_recv_func> - -1000d660 : -1000d660: f016 bd8a b.w 10024178 <_promisc_set> - -1000d664 : -1000d664: f016 bdd0 b.w 10024208 <_is_promisc_enabled> - -1000d668 : -1000d668: b538 push {r3, r4, r5, lr} -1000d66a: 4614 mov r4, r2 -1000d66c: 460d mov r5, r1 -1000d66e: 2205 movs r2, #5 -1000d670: 4601 mov r1, r0 -1000d672: 4620 mov r0, r4 -1000d674: f00d fa9c bl 1001abb0 -1000d678: 4621 mov r1, r4 -1000d67a: 4628 mov r0, r5 -1000d67c: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1000d680: f029 bd6e b.w 10037160 - -1000d684 : -1000d684: b570 push {r4, r5, r6, lr} -1000d686: 4614 mov r4, r2 -1000d688: b088 sub sp, #32 -1000d68a: 4605 mov r5, r0 -1000d68c: 460e mov r6, r1 -1000d68e: 2220 movs r2, #32 -1000d690: 2100 movs r1, #0 -1000d692: 4668 mov r0, sp -1000d694: f00d fa90 bl 1001abb8 -1000d698: f8ad 4014 strh.w r4, [sp, #20] -1000d69c: 3400 adds r4, #0 -1000d69e: bf18 it ne -1000d6a0: 2401 movne r4, #1 -1000d6a2: 466a mov r2, sp -1000d6a4: f648 311a movw r1, #35610 ; 0x8b1a -1000d6a8: 4628 mov r0, r5 -1000d6aa: 9604 str r6, [sp, #16] -1000d6ac: f8ad 4016 strh.w r4, [sp, #22] -1000d6b0: f7ff ffda bl 1000d668 -1000d6b4: b008 add sp, #32 -1000d6b6: bd70 pop {r4, r5, r6, pc} - -1000d6b8 : -1000d6b8: b530 push {r4, r5, lr} -1000d6ba: b089 sub sp, #36 ; 0x24 -1000d6bc: 460c mov r4, r1 -1000d6be: 2220 movs r2, #32 -1000d6c0: 2100 movs r1, #0 -1000d6c2: 4605 mov r5, r0 -1000d6c4: 4668 mov r0, sp -1000d6c6: f00d fa77 bl 1001abb8 -1000d6ca: 2301 movs r3, #1 -1000d6cc: 2206 movs r2, #6 -1000d6ce: 4621 mov r1, r4 -1000d6d0: f10d 0012 add.w r0, sp, #18 -1000d6d4: f88d 3011 strb.w r3, [sp, #17] -1000d6d8: f00d fa6a bl 1001abb0 -1000d6dc: 79a3 ldrb r3, [r4, #6] -1000d6de: 2b23 cmp r3, #35 ; 0x23 -1000d6e0: d107 bne.n 1000d6f2 -1000d6e2: 79e3 ldrb r3, [r4, #7] -1000d6e4: 2b40 cmp r3, #64 ; 0x40 -1000d6e6: d104 bne.n 1000d6f2 -1000d6e8: 2206 movs r2, #6 -1000d6ea: a806 add r0, sp, #24 -1000d6ec: 18a1 adds r1, r4, r2 -1000d6ee: f00d fa5f bl 1001abb0 -1000d6f2: 466a mov r2, sp -1000d6f4: f648 3114 movw r1, #35604 ; 0x8b14 -1000d6f8: 4628 mov r0, r5 -1000d6fa: f7ff ffb5 bl 1000d668 -1000d6fe: b009 add sp, #36 ; 0x24 -1000d700: bd30 pop {r4, r5, pc} - -1000d702 : -1000d702: 7842 ldrb r2, [r0, #1] -1000d704: 7803 ldrb r3, [r0, #0] -1000d706: 4013 ands r3, r2 -1000d708: 7882 ldrb r2, [r0, #2] -1000d70a: 4013 ands r3, r2 -1000d70c: 78c2 ldrb r2, [r0, #3] -1000d70e: 4013 ands r3, r2 -1000d710: 7902 ldrb r2, [r0, #4] -1000d712: 7940 ldrb r0, [r0, #5] -1000d714: 4013 ands r3, r2 -1000d716: 4018 ands r0, r3 -1000d718: f1a0 03ff sub.w r3, r0, #255 ; 0xff -1000d71c: 4258 negs r0, r3 -1000d71e: 4158 adcs r0, r3 -1000d720: 4770 bx lr - -1000d722 : -1000d722: b570 push {r4, r5, r6, lr} -1000d724: 4605 mov r5, r0 -1000d726: 460c mov r4, r1 -1000d728: 4616 mov r6, r2 -1000d72a: b088 sub sp, #32 -1000d72c: 2220 movs r2, #32 -1000d72e: 2100 movs r1, #0 -1000d730: 4668 mov r0, sp -1000d732: f00d fa41 bl 1001abb8 -1000d736: f3c4 040b ubfx r4, r4, #0, #12 -1000d73a: 466a mov r2, sp -1000d73c: f648 3132 movw r1, #35634 ; 0x8b32 -1000d740: 4628 mov r0, r5 -1000d742: f8ad 4016 strh.w r4, [sp, #22] -1000d746: 9604 str r6, [sp, #16] -1000d748: f7ff ff8e bl 1000d668 -1000d74c: b008 add sp, #32 -1000d74e: bd70 pop {r4, r5, r6, pc} - -1000d750 : -1000d750: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1000d754: b089 sub sp, #36 ; 0x24 -1000d756: f8bd 7058 ldrh.w r7, [sp, #88] ; 0x58 -1000d75a: 4683 mov fp, r0 -1000d75c: f107 0a28 add.w sl, r7, #40 ; 0x28 -1000d760: 4650 mov r0, sl -1000d762: 4688 mov r8, r1 -1000d764: 4616 mov r6, r2 -1000d766: 461d mov r5, r3 -1000d768: f8bd 9050 ldrh.w r9, [sp, #80] ; 0x50 -1000d76c: f007 fcde bl 1001512c -1000d770: 4604 mov r4, r0 -1000d772: 2800 cmp r0, #0 -1000d774: d062 beq.n 1000d83c -1000d776: 4652 mov r2, sl -1000d778: 2100 movs r1, #0 -1000d77a: f00d fa1d bl 1001abb8 -1000d77e: 3501 adds r5, #1 -1000d780: 2220 movs r2, #32 -1000d782: 2100 movs r1, #0 -1000d784: 4668 mov r0, sp -1000d786: f00d fa17 bl 1001abb8 -1000d78a: b2ad uxth r5, r5 -1000d78c: f5b8 4f00 cmp.w r8, #32768 ; 0x8000 -1000d790: f445 6280 orr.w r2, r5, #1024 ; 0x400 -1000d794: bf08 it eq -1000d796: f445 4504 orreq.w r5, r5, #33792 ; 0x8400 -1000d79a: f8ad 2016 strh.w r2, [sp, #22] -1000d79e: 9404 str r4, [sp, #16] -1000d7a0: bf08 it eq -1000d7a2: f8ad 5016 strheq.w r5, [sp, #22] -1000d7a6: f8ad a014 strh.w sl, [sp, #20] -1000d7aa: f104 0516 add.w r5, r4, #22 -1000d7ae: b126 cbz r6, 1000d7ba -1000d7b0: 4630 mov r0, r6 -1000d7b2: f7ff ffa6 bl 1000d702 -1000d7b6: 2800 cmp r0, #0 -1000d7b8: d043 beq.n 1000d842 -1000d7ba: 6823 ldr r3, [r4, #0] -1000d7bc: f043 0304 orr.w r3, r3, #4 -1000d7c0: 6023 str r3, [r4, #0] -1000d7c2: 9b12 ldr r3, [sp, #72] ; 0x48 -1000d7c4: b11b cbz r3, 1000d7ce -1000d7c6: 6823 ldr r3, [r4, #0] -1000d7c8: f043 0308 orr.w r3, r3, #8 -1000d7cc: 6023 str r3, [r4, #0] -1000d7ce: 2301 movs r3, #1 -1000d7d0: 7563 strb r3, [r4, #21] -1000d7d2: b36e cbz r6, 1000d830 -1000d7d4: 2206 movs r2, #6 -1000d7d6: 4631 mov r1, r6 -1000d7d8: 4628 mov r0, r5 -1000d7da: f00d f9e9 bl 1001abb0 -1000d7de: 9b15 ldr r3, [sp, #84] ; 0x54 -1000d7e0: b13b cbz r3, 1000d7f2 -1000d7e2: b137 cbz r7, 1000d7f2 -1000d7e4: 463a mov r2, r7 -1000d7e6: 4619 mov r1, r3 -1000d7e8: f104 0028 add.w r0, r4, #40 ; 0x28 -1000d7ec: f00d f9e0 bl 1001abb0 -1000d7f0: 84e7 strh r7, [r4, #38] ; 0x26 -1000d7f2: 9b13 ldr r3, [sp, #76] ; 0x4c -1000d7f4: f8a4 8024 strh.w r8, [r4, #36] ; 0x24 -1000d7f8: b163 cbz r3, 1000d814 -1000d7fa: f1b9 0f00 cmp.w r9, #0 -1000d7fe: d009 beq.n 1000d814 -1000d800: 4620 mov r0, r4 -1000d802: 6823 ldr r3, [r4, #0] -1000d804: 464a mov r2, r9 -1000d806: f043 0302 orr.w r3, r3, #2 -1000d80a: f840 3b0c str.w r3, [r0], #12 -1000d80e: 9913 ldr r1, [sp, #76] ; 0x4c -1000d810: f00d f9ce bl 1001abb0 -1000d814: 466a mov r2, sp -1000d816: f648 3134 movw r1, #35636 ; 0x8b34 -1000d81a: 4658 mov r0, fp -1000d81c: f7ff ff24 bl 1000d668 -1000d820: 4605 mov r5, r0 -1000d822: 4620 mov r0, r4 -1000d824: f007 fd1e bl 10015264 -1000d828: 4628 mov r0, r5 -1000d82a: b009 add sp, #36 ; 0x24 -1000d82c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1000d830: 2206 movs r2, #6 -1000d832: 21ff movs r1, #255 ; 0xff -1000d834: 4628 mov r0, r5 -1000d836: f00d f9bf bl 1001abb8 -1000d83a: e7d0 b.n 1000d7de -1000d83c: f04f 35ff mov.w r5, #4294967295 -1000d840: e7f2 b.n 1000d828 -1000d842: 9b12 ldr r3, [sp, #72] ; 0x48 -1000d844: 2b00 cmp r3, #0 -1000d846: d1be bne.n 1000d7c6 -1000d848: 2301 movs r3, #1 -1000d84a: 7563 strb r3, [r4, #21] -1000d84c: e7c2 b.n 1000d7d4 - -1000d84e : -1000d84e: b570 push {r4, r5, r6, lr} -1000d850: 4614 mov r4, r2 -1000d852: b088 sub sp, #32 -1000d854: 4605 mov r5, r0 -1000d856: 460e mov r6, r1 -1000d858: 2220 movs r2, #32 -1000d85a: 2100 movs r1, #0 -1000d85c: 4668 mov r0, sp -1000d85e: f00d f9ab bl 1001abb8 -1000d862: f8ad 4014 strh.w r4, [sp, #20] -1000d866: 3400 adds r4, #0 -1000d868: bf18 it ne -1000d86a: 2401 movne r4, #1 -1000d86c: 466a mov r2, sp -1000d86e: f648 31ff movw r1, #35839 ; 0x8bff -1000d872: 4628 mov r0, r5 -1000d874: 9604 str r6, [sp, #16] -1000d876: f8ad 4016 strh.w r4, [sp, #22] -1000d87a: f7ff fef5 bl 1000d668 -1000d87e: b008 add sp, #32 -1000d880: bd70 pop {r4, r5, r6, pc} - -1000d882 : -1000d882: b530 push {r4, r5, lr} -1000d884: 4604 mov r4, r0 -1000d886: 460d mov r5, r1 -1000d888: b089 sub sp, #36 ; 0x24 -1000d88a: 2220 movs r2, #32 -1000d88c: 2100 movs r1, #0 -1000d88e: 4668 mov r0, sp -1000d890: f00d f992 bl 1001abb8 -1000d894: 466a mov r2, sp -1000d896: f648 3106 movw r1, #35590 ; 0x8b06 -1000d89a: 4620 mov r0, r4 -1000d89c: 9504 str r5, [sp, #16] -1000d89e: f7ff fee3 bl 1000d668 -1000d8a2: b009 add sp, #36 ; 0x24 -1000d8a4: bd30 pop {r4, r5, pc} - -1000d8a6 : -1000d8a6: b570 push {r4, r5, r6, lr} -1000d8a8: 4614 mov r4, r2 -1000d8aa: b088 sub sp, #32 -1000d8ac: 4605 mov r5, r0 -1000d8ae: 460e mov r6, r1 -1000d8b0: 2220 movs r2, #32 -1000d8b2: 2100 movs r1, #0 -1000d8b4: 4668 mov r0, sp -1000d8b6: f00d f97f bl 1001abb8 -1000d8ba: f8ad 4014 strh.w r4, [sp, #20] -1000d8be: 3400 adds r4, #0 -1000d8c0: bf18 it ne -1000d8c2: 2401 movne r4, #1 -1000d8c4: 466a mov r2, sp -1000d8c6: f648 31fe movw r1, #35838 ; 0x8bfe -1000d8ca: 4628 mov r0, r5 -1000d8cc: 9604 str r6, [sp, #16] -1000d8ce: f8ad 4016 strh.w r4, [sp, #22] -1000d8d2: f7ff fec9 bl 1000d668 -1000d8d6: b008 add sp, #32 -1000d8d8: bd70 pop {r4, r5, r6, pc} - -1000d8da : -1000d8da: b530 push {r4, r5, lr} -1000d8dc: 4604 mov r4, r0 -1000d8de: 460d mov r5, r1 -1000d8e0: b089 sub sp, #36 ; 0x24 -1000d8e2: 2220 movs r2, #32 -1000d8e4: 2100 movs r1, #0 -1000d8e6: 4668 mov r0, sp -1000d8e8: f00d f966 bl 1001abb8 -1000d8ec: 466a mov r2, sp -1000d8ee: f648 31fd movw r1, #35837 ; 0x8bfd -1000d8f2: 4620 mov r0, r4 -1000d8f4: 9504 str r5, [sp, #16] -1000d8f6: f7ff feb7 bl 1000d668 -1000d8fa: b009 add sp, #36 ; 0x24 -1000d8fc: bd30 pop {r4, r5, pc} - -1000d8fe : -1000d8fe: b530 push {r4, r5, lr} -1000d900: 4605 mov r5, r0 -1000d902: b089 sub sp, #36 ; 0x24 -1000d904: 460c mov r4, r1 -1000d906: 2220 movs r2, #32 -1000d908: 2100 movs r1, #0 -1000d90a: 4668 mov r0, sp -1000d90c: f00d f954 bl 1001abb8 -1000d910: 466a mov r2, sp -1000d912: f648 3109 movw r1, #35593 ; 0x8b09 -1000d916: 4628 mov r0, r5 -1000d918: f7ff fea6 bl 1000d668 -1000d91c: 2800 cmp r0, #0 -1000d91e: bfa2 ittt ge -1000d920: 9b04 ldrge r3, [sp, #16] -1000d922: 425b negge r3, r3 -1000d924: 6023 strge r3, [r4, #0] -1000d926: b009 add sp, #36 ; 0x24 -1000d928: bd30 pop {r4, r5, pc} - -1000d92a : -1000d92a: b530 push {r4, r5, lr} -1000d92c: b089 sub sp, #36 ; 0x24 -1000d92e: 4604 mov r4, r0 -1000d930: 460d mov r5, r1 -1000d932: 2220 movs r2, #32 -1000d934: 2100 movs r1, #0 -1000d936: 4668 mov r0, sp -1000d938: f00d f93e bl 1001abb8 -1000d93c: 2300 movs r3, #0 -1000d93e: 466a mov r2, sp -1000d940: f648 3104 movw r1, #35588 ; 0x8b04 -1000d944: 4620 mov r0, r4 -1000d946: 9304 str r3, [sp, #16] -1000d948: f8ad 3014 strh.w r3, [sp, #20] -1000d94c: f88d 5016 strb.w r5, [sp, #22] -1000d950: f7ff fe8a bl 1000d668 -1000d954: b009 add sp, #36 ; 0x24 -1000d956: bd30 pop {r4, r5, pc} - -1000d958 : -1000d958: b5f0 push {r4, r5, r6, r7, lr} -1000d95a: 4604 mov r4, r0 -1000d95c: 461e mov r6, r3 -1000d95e: 460f mov r7, r1 -1000d960: 4615 mov r5, r2 -1000d962: b089 sub sp, #36 ; 0x24 -1000d964: 2220 movs r2, #32 -1000d966: 2100 movs r1, #0 -1000d968: 4668 mov r0, sp -1000d96a: f00d f925 bl 1001abb8 -1000d96e: 466a mov r2, sp -1000d970: f648 3118 movw r1, #35608 ; 0x8b18 -1000d974: 4620 mov r0, r4 -1000d976: 9704 str r7, [sp, #16] -1000d978: f8ad 6016 strh.w r6, [sp, #22] -1000d97c: f8ad 5014 strh.w r5, [sp, #20] -1000d980: f7ff fe72 bl 1000d668 -1000d984: b009 add sp, #36 ; 0x24 -1000d986: bdf0 pop {r4, r5, r6, r7, pc} - -1000d988 : -1000d988: f648 3319 movw r3, #35609 ; 0x8b19 -1000d98c: b573 push {r0, r1, r4, r5, r6, lr} -1000d98e: 2600 movs r6, #0 -1000d990: 4298 cmp r0, r3 -1000d992: 460c mov r4, r1 -1000d994: 4615 mov r5, r2 -1000d996: 9600 str r6, [sp, #0] -1000d998: f8ad 6004 strh.w r6, [sp, #4] -1000d99c: f000 8082 beq.w 1000daa4 -1000d9a0: f648 4302 movw r3, #35842 ; 0x8c02 -1000d9a4: 4298 cmp r0, r3 -1000d9a6: d01a beq.n 1000d9de -1000d9a8: f648 3315 movw r3, #35605 ; 0x8b15 -1000d9ac: 4298 cmp r0, r3 -1000d9ae: d10f bne.n 1000d9d0 -1000d9b0: 784d ldrb r5, [r1, #1] -1000d9b2: 2d01 cmp r5, #1 -1000d9b4: d10c bne.n 1000d9d0 -1000d9b6: 3402 adds r4, #2 -1000d9b8: 2206 movs r2, #6 -1000d9ba: 4669 mov r1, sp -1000d9bc: 4620 mov r0, r4 -1000d9be: f00d f8f3 bl 1001aba8 -1000d9c2: 4603 mov r3, r0 -1000d9c4: b930 cbnz r0, 1000d9d4 -1000d9c6: 4602 mov r2, r0 -1000d9c8: 4601 mov r1, r0 -1000d9ca: 4628 mov r0, r5 -1000d9cc: f7ff fdd2 bl 1000d574 -1000d9d0: b002 add sp, #8 -1000d9d2: bd70 pop {r4, r5, r6, pc} -1000d9d4: 4633 mov r3, r6 -1000d9d6: 2206 movs r2, #6 -1000d9d8: 4621 mov r1, r4 -1000d9da: 4630 mov r0, r6 -1000d9dc: e7f6 b.n 1000d9cc -1000d9de: 2a00 cmp r2, #0 -1000d9e0: d0f6 beq.n 1000d9d0 -1000d9e2: 4835 ldr r0, [pc, #212] ; (1000dab8 ) -1000d9e4: f00d f8f8 bl 1001abd8 -1000d9e8: 4629 mov r1, r5 -1000d9ea: 4602 mov r2, r0 -1000d9ec: 4832 ldr r0, [pc, #200] ; (1000dab8 ) -1000d9ee: f00d f8db bl 1001aba8 -1000d9f2: 4606 mov r6, r0 -1000d9f4: b938 cbnz r0, 1000da06 -1000d9f6: 4830 ldr r0, [pc, #192] ; (1000dab8 ) -1000d9f8: f00d f8ee bl 1001abd8 -1000d9fc: 4633 mov r3, r6 -1000d9fe: 4602 mov r2, r0 -1000da00: 4629 mov r1, r5 -1000da02: 2002 movs r0, #2 -1000da04: e7e2 b.n 1000d9cc -1000da06: 482d ldr r0, [pc, #180] ; (1000dabc ) -1000da08: f00d f8e6 bl 1001abd8 -1000da0c: 4629 mov r1, r5 -1000da0e: 4602 mov r2, r0 -1000da10: 482a ldr r0, [pc, #168] ; (1000dabc ) -1000da12: f00d f8c9 bl 1001aba8 -1000da16: 4606 mov r6, r0 -1000da18: b938 cbnz r0, 1000da2a -1000da1a: 4828 ldr r0, [pc, #160] ; (1000dabc ) -1000da1c: f00d f8dc bl 1001abd8 -1000da20: 4633 mov r3, r6 -1000da22: 4602 mov r2, r0 -1000da24: 4629 mov r1, r5 -1000da26: 2005 movs r0, #5 -1000da28: e7d0 b.n 1000d9cc -1000da2a: 4825 ldr r0, [pc, #148] ; (1000dac0 ) -1000da2c: f00d f8d4 bl 1001abd8 -1000da30: 4629 mov r1, r5 -1000da32: 4602 mov r2, r0 -1000da34: 4822 ldr r0, [pc, #136] ; (1000dac0 ) -1000da36: f00d f8b7 bl 1001aba8 -1000da3a: 4606 mov r6, r0 -1000da3c: b938 cbnz r0, 1000da4e -1000da3e: 4820 ldr r0, [pc, #128] ; (1000dac0 ) -1000da40: f00d f8ca bl 1001abd8 -1000da44: 4633 mov r3, r6 -1000da46: 4602 mov r2, r0 -1000da48: 4629 mov r1, r5 -1000da4a: 200e movs r0, #14 -1000da4c: e7be b.n 1000d9cc -1000da4e: 481d ldr r0, [pc, #116] ; (1000dac4 ) -1000da50: f00d f8c2 bl 1001abd8 -1000da54: 4629 mov r1, r5 -1000da56: 4602 mov r2, r0 -1000da58: 481a ldr r0, [pc, #104] ; (1000dac4 ) -1000da5a: f00d f8a5 bl 1001aba8 -1000da5e: 4603 mov r3, r0 -1000da60: b918 cbnz r0, 1000da6a -1000da62: 88a2 ldrh r2, [r4, #4] -1000da64: 6821 ldr r1, [r4, #0] -1000da66: 2008 movs r0, #8 -1000da68: e7b0 b.n 1000d9cc -1000da6a: 4817 ldr r0, [pc, #92] ; (1000dac8 ) -1000da6c: f00d f8b4 bl 1001abd8 -1000da70: 4629 mov r1, r5 -1000da72: 4602 mov r2, r0 -1000da74: 4814 ldr r0, [pc, #80] ; (1000dac8 ) -1000da76: f00d f897 bl 1001aba8 -1000da7a: 4603 mov r3, r0 -1000da7c: b918 cbnz r0, 1000da86 -1000da7e: 2206 movs r2, #6 -1000da80: 1ca1 adds r1, r4, #2 -1000da82: 2009 movs r0, #9 -1000da84: e7a2 b.n 1000d9cc -1000da86: 4811 ldr r0, [pc, #68] ; (1000dacc ) -1000da88: f00d f8a6 bl 1001abd8 -1000da8c: 4629 mov r1, r5 -1000da8e: 4602 mov r2, r0 -1000da90: 480e ldr r0, [pc, #56] ; (1000dacc ) -1000da92: f00d f889 bl 1001aba8 -1000da96: 4602 mov r2, r0 -1000da98: 2800 cmp r0, #0 -1000da9a: d199 bne.n 1000d9d0 -1000da9c: 4601 mov r1, r0 -1000da9e: 88e3 ldrh r3, [r4, #6] -1000daa0: 2006 movs r0, #6 -1000daa2: e793 b.n 1000d9cc -1000daa4: 6809 ldr r1, [r1, #0] -1000daa6: b919 cbnz r1, 1000dab0 -1000daa8: 460b mov r3, r1 -1000daaa: 460a mov r2, r1 -1000daac: 2004 movs r0, #4 -1000daae: e78d b.n 1000d9cc -1000dab0: 4633 mov r3, r6 -1000dab2: 88a2 ldrh r2, [r4, #4] -1000dab4: 2003 movs r0, #3 -1000dab6: e789 b.n 1000d9cc -1000dab8: 1003fc25 .word 0x1003fc25 -1000dabc: 1003fc3d .word 0x1003fc3d -1000dac0: 1003fc52 .word 0x1003fc52 -1000dac4: 1003fc73 .word 0x1003fc73 -1000dac8: 1003fc7d .word 0x1003fc7d -1000dacc: 1003fc8a .word 0x1003fc8a - -1000dad0 : -1000dad0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1000dad4: b08e sub sp, #56 ; 0x38 -1000dad6: 4605 mov r5, r0 -1000dad8: 4688 mov r8, r1 -1000dada: 4617 mov r7, r2 -1000dadc: ac01 add r4, sp, #4 -1000dade: 2220 movs r2, #32 -1000dae0: 2100 movs r1, #0 -1000dae2: a806 add r0, sp, #24 -1000dae4: 461e mov r6, r3 -1000dae6: f00d f867 bl 1001abb8 -1000daea: 4a0c ldr r2, [pc, #48] ; (1000db1c ) -1000daec: 210d movs r1, #13 -1000daee: 4620 mov r0, r4 -1000daf0: f00c ffe0 bl 1001aab4 -1000daf4: 2311 movs r3, #17 -1000daf6: aa06 add r2, sp, #24 -1000daf8: f648 11f0 movw r1, #35312 ; 0x89f0 -1000dafc: 4628 mov r0, r5 -1000dafe: f88d 8011 strb.w r8, [sp, #17] -1000db02: f88d 7012 strb.w r7, [sp, #18] -1000db06: f88d 6013 strb.w r6, [sp, #19] -1000db0a: 940a str r4, [sp, #40] ; 0x28 -1000db0c: f8ad 302c strh.w r3, [sp, #44] ; 0x2c -1000db10: f7ff fdaa bl 1000d668 -1000db14: b00e add sp, #56 ; 0x38 -1000db16: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000db1a: bf00 nop -1000db1c: 1003fc18 .word 0x1003fc18 - -1000db20 : -1000db20: 2801 cmp r0, #1 -1000db22: 4b07 ldr r3, [pc, #28] ; (1000db40 ) -1000db24: d003 beq.n 1000db2e -1000db26: 2802 cmp r0, #2 -1000db28: d007 beq.n 1000db3a -1000db2a: 2200 movs r2, #0 -1000db2c: e002 b.n 1000db34 -1000db2e: 2200 movs r2, #0 -1000db30: 7018 strb r0, [r3, #0] -1000db32: 4b04 ldr r3, [pc, #16] ; (1000db44 ) -1000db34: 701a strb r2, [r3, #0] -1000db36: 2000 movs r0, #0 -1000db38: 4770 bx lr -1000db3a: 2201 movs r2, #1 -1000db3c: 701a strb r2, [r3, #0] -1000db3e: e7f8 b.n 1000db32 -1000db40: 1004dd70 .word 0x1004dd70 -1000db44: 10044f44 .word 0x10044f44 - -1000db48 : -1000db48: f029 baee b.w 10037128 - -1000db4c : -1000db4c: 2801 cmp r0, #1 -1000db4e: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1000db52: bf28 it cs -1000db54: 2001 movcs r0, #1 -1000db56: 253c movs r5, #60 ; 0x3c -1000db58: 4b52 ldr r3, [pc, #328] ; (1000dca4 ) -1000db5a: b086 sub sp, #24 -1000db5c: 4607 mov r7, r0 -1000db5e: fb05 3500 mla r5, r5, r0, r3 -1000db62: 460c mov r4, r1 -1000db64: b911 cbnz r1, 1000db6c -1000db66: 6069 str r1, [r5, #4] -1000db68: 60a9 str r1, [r5, #8] -1000db6a: 60e9 str r1, [r5, #12] -1000db6c: f04f 083c mov.w r8, #60 ; 0x3c -1000db70: 2600 movs r6, #0 -1000db72: fb08 3807 mla r8, r8, r7, r3 -1000db76: 2c04 cmp r4, #4 -1000db78: d8fd bhi.n 1000db76 -1000db7a: a301 add r3, pc, #4 ; (adr r3, 1000db80 ) -1000db7c: f853 f024 ldr.w pc, [r3, r4, lsl #2] -1000db80: 1000db95 .word 0x1000db95 -1000db84: 1000dba7 .word 0x1000dba7 -1000db88: 1000db77 .word 0x1000db77 -1000db8c: 1000dc77 .word 0x1000dc77 -1000db90: 1000dc8d .word 0x1000dc8d -1000db94: 200f movs r0, #15 -1000db96: 4944 ldr r1, [pc, #272] ; (1000dca8 ) -1000db98: f7ff fd34 bl 1000d604 -1000db9c: 4628 mov r0, r5 -1000db9e: f002 fdaf bl 10010700 -1000dba2: 2401 movs r4, #1 -1000dba4: e7e7 b.n 1000db76 -1000dba6: f8d8 3020 ldr.w r3, [r8, #32] -1000dbaa: 7b1a ldrb r2, [r3, #12] -1000dbac: b9aa cbnz r2, 1000dbda -1000dbae: 4b3f ldr r3, [pc, #252] ; (1000dcac ) -1000dbb0: 4a3f ldr r2, [pc, #252] ; (1000dcb0 ) -1000dbb2: 9303 str r3, [sp, #12] -1000dbb4: f06f 437f mvn.w r3, #4278190080 ; 0xff000000 -1000dbb8: 9304 str r3, [sp, #16] -1000dbba: ab06 add r3, sp, #24 -1000dbbc: f843 2d04 str.w r2, [r3, #-4]! -1000dbc0: a903 add r1, sp, #12 -1000dbc2: aa04 add r2, sp, #16 -1000dbc4: 4628 mov r0, r5 -1000dbc6: f003 f957 bl 10010e78 -1000dbca: 483a ldr r0, [pc, #232] ; (1000dcb4 ) -1000dbcc: f00c ffc8 bl 1001ab60 -1000dbd0: 2404 movs r4, #4 -1000dbd2: 4620 mov r0, r4 -1000dbd4: b006 add sp, #24 -1000dbd6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000dbda: f8d8 4004 ldr.w r4, [r8, #4] -1000dbde: b1ac cbz r4, 1000dc0c -1000dbe0: 2200 movs r2, #0 -1000dbe2: 4931 ldr r1, [pc, #196] ; (1000dca8 ) -1000dbe4: 200f movs r0, #15 -1000dbe6: f7ff fce5 bl 1000d5b4 -1000dbea: 0e23 lsrs r3, r4, #24 -1000dbec: 9301 str r3, [sp, #4] -1000dbee: f3c4 4307 ubfx r3, r4, #16, #8 -1000dbf2: b2e2 uxtb r2, r4 -1000dbf4: 9300 str r3, [sp, #0] -1000dbf6: 4639 mov r1, r7 -1000dbf8: f3c4 2307 ubfx r3, r4, #8, #8 -1000dbfc: 482e ldr r0, [pc, #184] ; (1000dcb8 ) -1000dbfe: f00c ffaf bl 1001ab60 -1000dc02: 2200 movs r2, #0 -1000dc04: 4b2d ldr r3, [pc, #180] ; (1000dcbc ) -1000dc06: 2402 movs r4, #2 -1000dc08: 601a str r2, [r3, #0] -1000dc0a: e7e2 b.n 1000dbd2 -1000dc0c: 7b5b ldrb r3, [r3, #13] -1000dc0e: 2b05 cmp r3, #5 -1000dc10: d921 bls.n 1000dc56 -1000dc12: 4628 mov r0, r5 -1000dc14: f002 fd5c bl 100106d0 -1000dc18: 4b24 ldr r3, [pc, #144] ; (1000dcac ) -1000dc1a: 4a25 ldr r2, [pc, #148] ; (1000dcb0 ) -1000dc1c: 9303 str r3, [sp, #12] -1000dc1e: f06f 437f mvn.w r3, #4278190080 ; 0xff000000 -1000dc22: 9304 str r3, [sp, #16] -1000dc24: ab06 add r3, sp, #24 -1000dc26: f843 2d04 str.w r2, [r3, #-4]! -1000dc2a: a903 add r1, sp, #12 -1000dc2c: aa04 add r2, sp, #16 -1000dc2e: 4628 mov r0, r5 -1000dc30: f003 f922 bl 10010e78 -1000dc34: 4639 mov r1, r7 -1000dc36: 4822 ldr r0, [pc, #136] ; (1000dcc0 ) -1000dc38: f00c ff92 bl 1001ab60 -1000dc3c: 2350 movs r3, #80 ; 0x50 -1000dc3e: 22a8 movs r2, #168 ; 0xa8 -1000dc40: 9300 str r3, [sp, #0] -1000dc42: 21c0 movs r1, #192 ; 0xc0 -1000dc44: 2303 movs r3, #3 -1000dc46: 481f ldr r0, [pc, #124] ; (1000dcc4 ) -1000dc48: f00c ff8a bl 1001ab60 -1000dc4c: 2204 movs r2, #4 -1000dc4e: 4b1b ldr r3, [pc, #108] ; (1000dcbc ) -1000dc50: 2405 movs r4, #5 -1000dc52: 601a str r2, [r3, #0] -1000dc54: e7bd b.n 1000dbd2 -1000dc56: f44f 70fa mov.w r0, #500 ; 0x1f4 -1000dc5a: f008 fbe9 bl 10016430 -1000dc5e: f002 fc89 bl 10010574 -1000dc62: f64e 235f movw r3, #59999 ; 0xea5f -1000dc66: f506 76fa add.w r6, r6, #500 ; 0x1f4 -1000dc6a: 429e cmp r6, r3 -1000dc6c: dd99 ble.n 1000dba2 -1000dc6e: f002 fc3d bl 100104ec -1000dc72: 4626 mov r6, r4 -1000dc74: e795 b.n 1000dba2 -1000dc76: 490c ldr r1, [pc, #48] ; (1000dca8 ) -1000dc78: 200f movs r0, #15 -1000dc7a: f7ff fcc3 bl 1000d604 -1000dc7e: 4812 ldr r0, [pc, #72] ; (1000dcc8 ) -1000dc80: f00c ff6e bl 1001ab60 -1000dc84: 4628 mov r0, r5 -1000dc86: f002 fcc1 bl 1001060c -1000dc8a: e7a2 b.n 1000dbd2 -1000dc8c: 4906 ldr r1, [pc, #24] ; (1000dca8 ) -1000dc8e: 200f movs r0, #15 -1000dc90: f7ff fcb8 bl 1000d604 -1000dc94: 4807 ldr r0, [pc, #28] ; (1000dcb4 ) -1000dc96: f00c ff63 bl 1001ab60 -1000dc9a: 4628 mov r0, r5 -1000dc9c: f002 fd18 bl 100106d0 -1000dca0: e797 b.n 1000dbd2 -1000dca2: bf00 nop -1000dca4: 1004a984 .word 0x1004a984 -1000dca8: 1000cf71 .word 0x1000cf71 -1000dcac: 5003a8c0 .word 0x5003a8c0 -1000dcb0: 0103a8c0 .word 0x0103a8c0 -1000dcb4: 1003fc9b .word 0x1003fc9b -1000dcb8: 1003fcb2 .word 0x1003fcb2 -1000dcbc: 10044ce4 .word 0x10044ce4 -1000dcc0: 1003fcd9 .word 0x1003fcd9 -1000dcc4: 1003fcf4 .word 0x1003fcf4 -1000dcc8: 1003fd15 .word 0x1003fd15 - -1000dccc : -1000dccc: b510 push {r4, lr} -1000dcce: 4b0d ldr r3, [pc, #52] ; (1000dd04 ) -1000dcd0: 480d ldr r0, [pc, #52] ; (1000dd08 ) -1000dcd2: 781b ldrb r3, [r3, #0] -1000dcd4: 490d ldr r1, [pc, #52] ; (1000dd0c ) -1000dcd6: 2b02 cmp r3, #2 -1000dcd8: 4a0d ldr r2, [pc, #52] ; (1000dd10 ) -1000dcda: 4b0e ldr r3, [pc, #56] ; (1000dd14 ) -1000dcdc: d109 bne.n 1000dcf2 -1000dcde: 2431 movs r4, #49 ; 0x31 -1000dce0: 7104 strb r4, [r0, #4] -1000dce2: 2030 movs r0, #48 ; 0x30 -1000dce4: 7108 strb r0, [r1, #4] -1000dce6: 2101 movs r1, #1 -1000dce8: 7011 strb r1, [r2, #0] -1000dcea: 2200 movs r2, #0 -1000dcec: 701a strb r2, [r3, #0] -1000dcee: 7818 ldrb r0, [r3, #0] -1000dcf0: bd10 pop {r4, pc} -1000dcf2: 2430 movs r4, #48 ; 0x30 -1000dcf4: 7104 strb r4, [r0, #4] -1000dcf6: 2031 movs r0, #49 ; 0x31 -1000dcf8: 7108 strb r0, [r1, #4] -1000dcfa: 2100 movs r1, #0 -1000dcfc: 7011 strb r1, [r2, #0] -1000dcfe: 2201 movs r2, #1 -1000dd00: e7f4 b.n 1000dcec -1000dd02: bf00 nop -1000dd04: 1004a784 .word 0x1004a784 -1000dd08: 10044e57 .word 0x10044e57 -1000dd0c: 10044e50 .word 0x10044e50 -1000dd10: 1004aa06 .word 0x1004aa06 -1000dd14: 10044e56 .word 0x10044e56 - -1000dd18 : -1000dd18: b51f push {r0, r1, r2, r3, r4, lr} -1000dd1a: 9a07 ldr r2, [sp, #28] -1000dd1c: 4b0e ldr r3, [pc, #56] ; (1000dd58 ) -1000dd1e: 490f ldr r1, [pc, #60] ; (1000dd5c ) -1000dd20: 6018 str r0, [r3, #0] -1000dd22: 605a str r2, [r3, #4] -1000dd24: 4b0e ldr r3, [pc, #56] ; (1000dd60 ) -1000dd26: 480f ldr r0, [pc, #60] ; (1000dd64 ) -1000dd28: 681b ldr r3, [r3, #0] -1000dd2a: 691b ldr r3, [r3, #16] -1000dd2c: 681a ldr r2, [r3, #0] -1000dd2e: f892 37e2 ldrb.w r3, [r2, #2018] ; 0x7e2 -1000dd32: 2bff cmp r3, #255 ; 0xff -1000dd34: f04f 0300 mov.w r3, #0 -1000dd38: bf08 it eq -1000dd3a: f882 37e2 strbeq.w r3, [r2, #2018] ; 0x7e2 -1000dd3e: 9303 str r3, [sp, #12] -1000dd40: 9302 str r3, [sp, #8] -1000dd42: 9301 str r3, [sp, #4] -1000dd44: 2301 movs r3, #1 -1000dd46: f44f 72c8 mov.w r2, #400 ; 0x190 -1000dd4a: 9300 str r3, [sp, #0] -1000dd4c: 4b02 ldr r3, [pc, #8] ; (1000dd58 ) -1000dd4e: f008 f871 bl 10015e34 -1000dd52: b005 add sp, #20 -1000dd54: f85d fb04 ldr.w pc, [sp], #4 -1000dd58: 1004a9fc .word 0x1004a9fc -1000dd5c: 1003fd69 .word 0x1003fd69 -1000dd60: 1004df9c .word 0x1004df9c -1000dd64: 1000e481 .word 0x1000e481 - -1000dd68 : -1000dd68: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1000dd6c: 4680 mov r8, r0 -1000dd6e: 2501 movs r5, #1 -1000dd70: 2600 movs r6, #0 -1000dd72: 4c0e ldr r4, [pc, #56] ; (1000ddac ) -1000dd74: f504 7780 add.w r7, r4, #256 ; 0x100 -1000dd78: f834 1c08 ldrh.w r1, [r4, #-8] -1000dd7c: b191 cbz r1, 1000dda4 -1000dd7e: ea15 0f08 tst.w r5, r8 -1000dd82: d00a beq.n 1000dd9a -1000dd84: f834 2c06 ldrh.w r2, [r4, #-6] -1000dd88: f854 0c04 ldr.w r0, [r4, #-4] -1000dd8c: f00a fcf8 bl 10018780 -1000dd90: f834 3c06 ldrh.w r3, [r4, #-6] -1000dd94: 4298 cmp r0, r3 -1000dd96: bfb8 it lt -1000dd98: 432e orrlt r6, r5 -1000dd9a: 3408 adds r4, #8 -1000dd9c: 42bc cmp r4, r7 -1000dd9e: ea4f 0545 mov.w r5, r5, lsl #1 -1000dda2: d1e9 bne.n 1000dd78 -1000dda4: 4630 mov r0, r6 -1000dda6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000ddaa: bf00 nop -1000ddac: 10044cf0 .word 0x10044cf0 - -1000ddb0 : -1000ddb0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1000ddb4: 4680 mov r8, r0 -1000ddb6: 2501 movs r5, #1 -1000ddb8: 2600 movs r6, #0 -1000ddba: 4c0c ldr r4, [pc, #48] ; (1000ddec ) -1000ddbc: f504 7780 add.w r7, r4, #256 ; 0x100 -1000ddc0: f834 1c08 ldrh.w r1, [r4, #-8] -1000ddc4: b179 cbz r1, 1000dde6 -1000ddc6: ea15 0f08 tst.w r5, r8 -1000ddca: d007 beq.n 1000dddc -1000ddcc: f834 2c06 ldrh.w r2, [r4, #-6] -1000ddd0: f854 0c04 ldr.w r0, [r4, #-4] -1000ddd4: f00a fbc2 bl 1001855c -1000ddd8: b900 cbnz r0, 1000dddc -1000ddda: 432e orrs r6, r5 -1000dddc: 3408 adds r4, #8 -1000ddde: 42bc cmp r4, r7 -1000dde0: ea4f 0545 mov.w r5, r5, lsl #1 -1000dde4: d1ec bne.n 1000ddc0 -1000dde6: 4630 mov r0, r6 -1000dde8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000ddec: 10044cf0 .word 0x10044cf0 - -1000ddf0 : -1000ddf0: 4b08 ldr r3, [pc, #32] ; (1000de14 ) -1000ddf2: 4a09 ldr r2, [pc, #36] ; (1000de18 ) -1000ddf4: 781b ldrb r3, [r3, #0] -1000ddf6: 7812 ldrb r2, [r2, #0] -1000ddf8: 429a cmp r2, r3 -1000ddfa: d103 bne.n 1000de04 -1000ddfc: 4b07 ldr r3, [pc, #28] ; (1000de1c ) -1000ddfe: 681b ldr r3, [r3, #0] -1000de00: 6a58 ldr r0, [r3, #36] ; 0x24 -1000de02: 4770 bx lr -1000de04: 4806 ldr r0, [pc, #24] ; (1000de20 ) -1000de06: f1a0 0210 sub.w r2, r0, #16 -1000de0a: 2b02 cmp r3, #2 -1000de0c: bf18 it ne -1000de0e: 4610 movne r0, r2 -1000de10: 4770 bx lr -1000de12: bf00 nop -1000de14: 10044dc8 .word 0x10044dc8 -1000de18: 1004aa04 .word 0x1004aa04 -1000de1c: 1004aa38 .word 0x1004aa38 -1000de20: 10044e78 .word 0x10044e78 - -1000de24 <_wext_set_lps_dtim>: -1000de24: 2318 movs r3, #24 -1000de26: 4358 muls r0, r3 -1000de28: 4b04 ldr r3, [pc, #16] ; (1000de3c <_wext_set_lps_dtim+0x18>) -1000de2a: 581b ldr r3, [r3, r0] -1000de2c: 691b ldr r3, [r3, #16] -1000de2e: 6818 ldr r0, [r3, #0] -1000de30: b108 cbz r0, 1000de36 <_wext_set_lps_dtim+0x12> -1000de32: f018 bc49 b.w 100266c8 -1000de36: f04f 30ff mov.w r0, #4294967295 -1000de3a: 4770 bx lr -1000de3c: 1004df9c .word 0x1004df9c - -1000de40 <_wext_enable_powersave>: -1000de40: b538 push {r3, r4, r5, lr} -1000de42: 2318 movs r3, #24 -1000de44: 4358 muls r0, r3 -1000de46: 4b0b ldr r3, [pc, #44] ; (1000de74 <_wext_enable_powersave+0x34>) -1000de48: 4615 mov r5, r2 -1000de4a: 581b ldr r3, [r3, r0] -1000de4c: 691b ldr r3, [r3, #16] -1000de4e: 681c ldr r4, [r3, #0] -1000de50: b164 cbz r4, 1000de6c <_wext_enable_powersave+0x2c> -1000de52: 4620 mov r0, r4 -1000de54: f018 fc08 bl 10026668 -1000de58: b950 cbnz r0, 1000de70 <_wext_enable_powersave+0x30> -1000de5a: 4620 mov r0, r4 -1000de5c: f018 fafb bl 10026456 -1000de60: 4629 mov r1, r5 -1000de62: 4620 mov r0, r4 -1000de64: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1000de68: f018 bbdb b.w 10026622 -1000de6c: f04f 30ff mov.w r0, #4294967295 -1000de70: bd38 pop {r3, r4, r5, pc} -1000de72: bf00 nop -1000de74: 1004df9c .word 0x1004df9c - -1000de78 : -1000de78: 2300 movs r3, #0 -1000de7a: b510 push {r4, lr} -1000de7c: 4c05 ldr r4, [pc, #20] ; (1000de94 ) -1000de7e: b2da uxtb r2, r3 -1000de80: f854 1022 ldr.w r1, [r4, r2, lsl #2] -1000de84: 4281 cmp r1, r0 -1000de86: d003 beq.n 1000de90 -1000de88: 3101 adds r1, #1 -1000de8a: f103 0301 add.w r3, r3, #1 -1000de8e: d1f6 bne.n 1000de7e -1000de90: 4610 mov r0, r2 -1000de92: bd10 pop {r4, pc} -1000de94: 10044d28 .word 0x10044d28 - -1000de98 : -1000de98: b513 push {r0, r1, r4, lr} -1000de9a: 213c movs r1, #60 ; 0x3c -1000de9c: 4b07 ldr r3, [pc, #28] ; (1000debc ) -1000de9e: 4c08 ldr r4, [pc, #32] ; (1000dec0 ) -1000dea0: 781b ldrb r3, [r3, #0] -1000dea2: 4359 muls r1, r3 -1000dea4: 3104 adds r1, #4 -1000dea6: 1908 adds r0, r1, r4 -1000dea8: 7883 ldrb r3, [r0, #2] -1000deaa: 7842 ldrb r2, [r0, #1] -1000deac: 78c0 ldrb r0, [r0, #3] -1000deae: 5d09 ldrb r1, [r1, r4] -1000deb0: 9000 str r0, [sp, #0] -1000deb2: 4804 ldr r0, [pc, #16] ; (1000dec4 ) -1000deb4: f00c fe54 bl 1001ab60 -1000deb8: b002 add sp, #8 -1000deba: bd10 pop {r4, pc} -1000debc: 10044e56 .word 0x10044e56 -1000dec0: 1004a984 .word 0x1004a984 -1000dec4: 1003fd38 .word 0x1003fd38 - -1000dec8 : -1000dec8: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -1000decc: 4b35 ldr r3, [pc, #212] ; (1000dfa4 ) -1000dece: 781b ldrb r3, [r3, #0] -1000ded0: 3b02 subs r3, #2 -1000ded2: 2b01 cmp r3, #1 -1000ded4: d863 bhi.n 1000df9e -1000ded6: 4c34 ldr r4, [pc, #208] ; (1000dfa8 ) -1000ded8: f894 0067 ldrb.w r0, [r4, #103] ; 0x67 -1000dedc: f7ff fe34 bl 1000db48 -1000dee0: b120 cbz r0, 1000deec -1000dee2: f894 1067 ldrb.w r1, [r4, #103] ; 0x67 -1000dee6: 4831 ldr r0, [pc, #196] ; (1000dfac ) -1000dee8: f00c fe3a bl 1001ab60 -1000deec: f894 3066 ldrb.w r3, [r4, #102] ; 0x66 -1000def0: f994 2064 ldrsb.w r2, [r4, #100] ; 0x64 -1000def4: 3b01 subs r3, #1 -1000def6: 2b0d cmp r3, #13 -1000def8: bf84 itt hi -1000defa: 2301 movhi r3, #1 -1000defc: f884 3066 strbhi.w r3, [r4, #102] ; 0x66 -1000df00: f894 3066 ldrb.w r3, [r4, #102] ; 0x66 -1000df04: f894 1065 ldrb.w r1, [r4, #101] ; 0x65 -1000df08: 9200 str r2, [sp, #0] -1000df0a: 4a29 ldr r2, [pc, #164] ; (1000dfb0 ) -1000df0c: f1a2 0021 sub.w r0, r2, #33 ; 0x21 -1000df10: f7ff faae bl 1000d470 -1000df14: 4604 mov r4, r0 -1000df16: 2800 cmp r0, #0 -1000df18: d13c bne.n 1000df94 -1000df1a: 4e26 ldr r6, [pc, #152] ; (1000dfb4 ) -1000df1c: 2565 movs r5, #101 ; 0x65 -1000df1e: 46b0 mov r8, r6 -1000df20: 4f25 ldr r7, [pc, #148] ; (1000dfb8 ) -1000df22: 2318 movs r3, #24 -1000df24: 7832 ldrb r2, [r6, #0] -1000df26: 4353 muls r3, r2 -1000df28: 58fb ldr r3, [r7, r3] -1000df2a: 691b ldr r3, [r3, #16] -1000df2c: 6819 ldr r1, [r3, #0] -1000df2e: b331 cbz r1, 1000df7e -1000df30: 690b ldr r3, [r1, #16] -1000df32: f013 0f41 tst.w r3, #65 ; 0x41 -1000df36: d022 beq.n 1000df7e -1000df38: f8d1 20a4 ldr.w r2, [r1, #164] ; 0xa4 -1000df3c: 481a ldr r0, [pc, #104] ; (1000dfa8 ) -1000df3e: 2a1f cmp r2, #31 -1000df40: bfd4 ite le -1000df42: 3201 addle r2, #1 -1000df44: 2220 movgt r2, #32 -1000df46: 31a8 adds r1, #168 ; 0xa8 -1000df48: f00c fe2e bl 1001aba8 -1000df4c: b9b8 cbnz r0, 1000df7e -1000df4e: 4b1b ldr r3, [pc, #108] ; (1000dfbc ) -1000df50: 7b1b ldrb r3, [r3, #12] -1000df52: b13b cbz r3, 1000df64 -1000df54: 203c movs r0, #60 ; 0x3c -1000df56: f898 2000 ldrb.w r2, [r8] -1000df5a: 4b19 ldr r3, [pc, #100] ; (1000dfc0 ) -1000df5c: fb00 3002 mla r0, r0, r2, r3 -1000df60: f006 ffec bl 10014f3c -1000df64: f7ff ff98 bl 1000de98 -1000df68: 4b16 ldr r3, [pc, #88] ; (1000dfc4 ) -1000df6a: 7998 ldrb r0, [r3, #6] -1000df6c: f010 0005 ands.w r0, r0, #5 -1000df70: d001 beq.n 1000df76 -1000df72: f7ff ff1d bl 1000ddb0 -1000df76: 4620 mov r0, r4 -1000df78: b002 add sp, #8 -1000df7a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000df7e: 3d01 subs r5, #1 -1000df80: d104 bne.n 1000df8c -1000df82: 4811 ldr r0, [pc, #68] ; (1000dfc8 ) -1000df84: f00c fdec bl 1001ab60 -1000df88: 2402 movs r4, #2 -1000df8a: e7f4 b.n 1000df76 -1000df8c: 2014 movs r0, #20 -1000df8e: f008 fa4f bl 10016430 -1000df92: e7c6 b.n 1000df22 -1000df94: 4601 mov r1, r0 -1000df96: 480d ldr r0, [pc, #52] ; (1000dfcc ) -1000df98: f00c fde2 bl 1001ab60 -1000df9c: e7eb b.n 1000df76 -1000df9e: f06f 0405 mvn.w r4, #5 -1000dfa2: e7e8 b.n 1000df76 -1000dfa4: 1004a784 .word 0x1004a784 -1000dfa8: 10044d50 .word 0x10044d50 -1000dfac: 1003fe4f .word 0x1003fe4f -1000dfb0: 10044d71 .word 0x10044d71 -1000dfb4: 10044e56 .word 0x10044e56 -1000dfb8: 1004df9c .word 0x1004df9c -1000dfbc: 10044db8 .word 0x10044db8 -1000dfc0: 1004a984 .word 0x1004a984 -1000dfc4: 10044dc8 .word 0x10044dc8 -1000dfc8: 1003fe6f .word 0x1003fe6f -1000dfcc: 1003fe82 .word 0x1003fe82 - -1000dfd0 : -1000dfd0: b513 push {r0, r1, r4, lr} -1000dfd2: 213c movs r1, #60 ; 0x3c -1000dfd4: 4b07 ldr r3, [pc, #28] ; (1000dff4 ) -1000dfd6: 4c08 ldr r4, [pc, #32] ; (1000dff8 ) -1000dfd8: 781b ldrb r3, [r3, #0] -1000dfda: 4359 muls r1, r3 -1000dfdc: 3104 adds r1, #4 -1000dfde: 1908 adds r0, r1, r4 -1000dfe0: 7883 ldrb r3, [r0, #2] -1000dfe2: 7842 ldrb r2, [r0, #1] -1000dfe4: 78c0 ldrb r0, [r0, #3] -1000dfe6: 5d09 ldrb r1, [r1, r4] -1000dfe8: 9000 str r0, [sp, #0] -1000dfea: 4804 ldr r0, [pc, #16] ; (1000dffc ) -1000dfec: f00c fdb8 bl 1001ab60 -1000dff0: b002 add sp, #8 -1000dff2: bd10 pop {r4, pc} -1000dff4: 1004aa06 .word 0x1004aa06 -1000dff8: 1004a984 .word 0x1004a984 -1000dffc: 1003fd50 .word 0x1003fd50 - -1000e000 : -1000e000: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1000e004: 4922 ldr r1, [pc, #136] ; (1000e090 ) -1000e006: 4e23 ldr r6, [pc, #140] ; (1000e094 ) -1000e008: 7b0f ldrb r7, [r1, #12] -1000e00a: 7834 ldrb r4, [r6, #0] -1000e00c: 2f02 cmp r7, #2 -1000e00e: 460d mov r5, r1 -1000e010: d114 bne.n 1000e03c -1000e012: 680b ldr r3, [r1, #0] -1000e014: 3b01 subs r3, #1 -1000e016: 3303 adds r3, #3 -1000e018: d812 bhi.n 1000e040 -1000e01a: 253c movs r5, #60 ; 0x3c -1000e01c: 481e ldr r0, [pc, #120] ; (1000e098 ) -1000e01e: f101 0308 add.w r3, r1, #8 -1000e022: 1d0a adds r2, r1, #4 -1000e024: fb05 0004 mla r0, r5, r4, r0 -1000e028: f002 ff26 bl 10010e78 -1000e02c: f7ff ffd0 bl 1000dfd0 -1000e030: 2203 movs r2, #3 -1000e032: 4b1a ldr r3, [pc, #104] ; (1000e09c ) -1000e034: 2000 movs r0, #0 -1000e036: 701a strb r2, [r3, #0] -1000e038: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000e03c: 2f00 cmp r7, #0 -1000e03e: d0f5 beq.n 1000e02c -1000e040: 2000 movs r0, #0 -1000e042: f008 f837 bl 100160b4 -1000e046: 2103 movs r1, #3 -1000e048: 4680 mov r8, r0 -1000e04a: 2000 movs r0, #0 -1000e04c: f008 f840 bl 100160d0 -1000e050: 2100 movs r1, #0 -1000e052: 7830 ldrb r0, [r6, #0] -1000e054: f7ff fd7a bl 1000db4c -1000e058: 4606 mov r6, r0 -1000e05a: 4641 mov r1, r8 -1000e05c: 2000 movs r0, #0 -1000e05e: f008 f837 bl 100160d0 -1000e062: 2e02 cmp r6, #2 -1000e064: d110 bne.n 1000e088 -1000e066: 233c movs r3, #60 ; 0x3c -1000e068: 480b ldr r0, [pc, #44] ; (1000e098 ) -1000e06a: 2f02 cmp r7, #2 -1000e06c: fb03 0004 mla r0, r3, r4, r0 -1000e070: 6843 ldr r3, [r0, #4] -1000e072: 602b str r3, [r5, #0] -1000e074: 68c3 ldr r3, [r0, #12] -1000e076: 60ab str r3, [r5, #8] -1000e078: 6883 ldr r3, [r0, #8] -1000e07a: 606b str r3, [r5, #4] -1000e07c: d9d6 bls.n 1000e02c -1000e07e: 2008 movs r0, #8 -1000e080: 732e strb r6, [r5, #12] -1000e082: f7ff fe95 bl 1000ddb0 -1000e086: e7d1 b.n 1000e02c -1000e088: f04f 30ff mov.w r0, #4294967295 -1000e08c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000e090: 10044e40 .word 0x10044e40 -1000e094: 1004aa06 .word 0x1004aa06 -1000e098: 1004a984 .word 0x1004a984 -1000e09c: 1004aa05 .word 0x1004aa05 - -1000e0a0 : -1000e0a0: b51f push {r0, r1, r2, r3, r4, lr} -1000e0a2: 4c26 ldr r4, [pc, #152] ; (1000e13c ) -1000e0a4: f894 206a ldrb.w r2, [r4, #106] ; 0x6a -1000e0a8: b1d2 cbz r2, 1000e0e0 -1000e0aa: 4825 ldr r0, [pc, #148] ; (1000e140 ) -1000e0ac: 4925 ldr r1, [pc, #148] ; (1000e144 ) -1000e0ae: f894 306b ldrb.w r3, [r4, #107] ; 0x6b -1000e0b2: 6008 str r0, [r1, #0] -1000e0b4: 4924 ldr r1, [pc, #144] ; (1000e148 ) -1000e0b6: 6809 ldr r1, [r1, #0] -1000e0b8: 6909 ldr r1, [r1, #16] -1000e0ba: 6808 ldr r0, [r1, #0] -1000e0bc: 2100 movs r1, #0 -1000e0be: f880 17e2 strb.w r1, [r0, #2018] ; 0x7e2 -1000e0c2: 2101 movs r1, #1 -1000e0c4: f880 27e1 strb.w r2, [r0, #2017] ; 0x7e1 -1000e0c8: f880 186d strb.w r1, [r0, #2157] ; 0x86d -1000e0cc: f8a0 37e4 strh.w r3, [r0, #2020] ; 0x7e4 -1000e0d0: 481e ldr r0, [pc, #120] ; (1000e14c ) -1000e0d2: f7ff fcfd bl 1000dad0 -1000e0d6: 4601 mov r1, r0 -1000e0d8: b110 cbz r0, 1000e0e0 -1000e0da: 481d ldr r0, [pc, #116] ; (1000e150 ) -1000e0dc: f00c fd40 bl 1001ab60 -1000e0e0: 2200 movs r2, #0 -1000e0e2: f894 3069 ldrb.w r3, [r4, #105] ; 0x69 -1000e0e6: f994 1068 ldrsb.w r1, [r4, #104] ; 0x68 -1000e0ea: 9202 str r2, [sp, #8] -1000e0ec: f04f 32ff mov.w r2, #4294967295 -1000e0f0: 2b09 cmp r3, #9 -1000e0f2: bf28 it cs -1000e0f4: 2306 movcs r3, #6 -1000e0f6: 4817 ldr r0, [pc, #92] ; (1000e154 ) -1000e0f8: 9201 str r2, [sp, #4] -1000e0fa: 4a17 ldr r2, [pc, #92] ; (1000e158 ) -1000e0fc: 9000 str r0, [sp, #0] -1000e0fe: f852 3023 ldr.w r3, [r2, r3, lsl #2] -1000e102: f1a0 0221 sub.w r2, r0, #33 ; 0x21 -1000e106: 3041 adds r0, #65 ; 0x41 -1000e108: f7fe ff34 bl 1000cf74 -1000e10c: 2201 movs r2, #1 -1000e10e: 4b13 ldr r3, [pc, #76] ; (1000e15c ) -1000e110: 4604 mov r4, r0 -1000e112: 701a strb r2, [r3, #0] -1000e114: b138 cbz r0, 1000e126 -1000e116: 4602 mov r2, r0 -1000e118: 4911 ldr r1, [pc, #68] ; (1000e160 ) -1000e11a: 4812 ldr r0, [pc, #72] ; (1000e164 ) -1000e11c: f00c fd20 bl 1001ab60 -1000e120: 4620 mov r0, r4 -1000e122: b004 add sp, #16 -1000e124: bd10 pop {r4, pc} -1000e126: 4b10 ldr r3, [pc, #64] ; (1000e168 ) -1000e128: 799b ldrb r3, [r3, #6] -1000e12a: 079b lsls r3, r3, #30 -1000e12c: d502 bpl.n 1000e134 -1000e12e: 2002 movs r0, #2 -1000e130: f7ff fe3e bl 1000ddb0 -1000e134: f7ff ff64 bl 1000e000 -1000e138: e7f2 b.n 1000e120 -1000e13a: bf00 nop -1000e13c: 10044dcf .word 0x10044dcf -1000e140: 1000dd19 .word 0x1000dd19 -1000e144: 1004baf4 .word 0x1004baf4 -1000e148: 1004df9c .word 0x1004df9c -1000e14c: 1003fb67 .word 0x1003fb67 -1000e150: 1003fea0 .word 0x1003fea0 -1000e154: 10044df0 .word 0x10044df0 -1000e158: 10044d28 .word 0x10044d28 -1000e15c: 1004aa05 .word 0x1004aa05 -1000e160: 1003fd2c .word 0x1003fd2c -1000e164: 1003fec3 .word 0x1003fec3 -1000e168: 10044dc8 .word 0x10044dc8 - -1000e16c : -1000e16c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1000e170: 4e7b ldr r6, [pc, #492] ; (1000e360 ) -1000e172: 4604 mov r4, r0 -1000e174: 7833 ldrb r3, [r6, #0] -1000e176: b13b cbz r3, 1000e188 -1000e178: f7ff f940 bl 1000d3fc -1000e17c: 2200 movs r2, #0 -1000e17e: 4b79 ldr r3, [pc, #484] ; (1000e364 ) -1000e180: 201e movs r0, #30 -1000e182: 701a strb r2, [r3, #0] -1000e184: f008 f954 bl 10016430 -1000e188: 2c00 cmp r4, #0 -1000e18a: f000 80db beq.w 1000e344 -1000e18e: 4d76 ldr r5, [pc, #472] ; (1000e368 ) -1000e190: b2e7 uxtb r7, r4 -1000e192: 7037 strb r7, [r6, #0] -1000e194: f7ff fd9a bl 1000dccc -1000e198: 7868 ldrb r0, [r5, #1] -1000e19a: f000 0003 and.w r0, r0, #3 -1000e19e: f7ff fcbf bl 1000db20 -1000e1a2: 4621 mov r1, r4 -1000e1a4: 2000 movs r0, #0 -1000e1a6: f028 fe49 bl 10036e3c -1000e1aa: 4680 mov r8, r0 -1000e1ac: 486f ldr r0, [pc, #444] ; (1000e36c ) -1000e1ae: f002 feaf bl 10010f10 -1000e1b2: f1b8 0f00 cmp.w r8, #0 -1000e1b6: f8df 81b4 ldr.w r8, [pc, #436] ; 1000e36c -1000e1ba: f2c0 80c0 blt.w 1000e33e -1000e1be: 2c03 cmp r4, #3 -1000e1c0: d124 bne.n 1000e20c -1000e1c2: 4621 mov r1, r4 -1000e1c4: 2001 movs r0, #1 -1000e1c6: f028 fe39 bl 10036e3c -1000e1ca: 2800 cmp r0, #0 -1000e1cc: f2c0 80b7 blt.w 1000e33e -1000e1d0: f108 003c add.w r0, r8, #60 ; 0x3c -1000e1d4: f002 fe9c bl 10010f10 -1000e1d8: f008 f81c bl 10016214 -1000e1dc: 4681 mov r9, r0 -1000e1de: 2000 movs r0, #0 -1000e1e0: f028 fed4 bl 10036f8c -1000e1e4: 2c03 cmp r4, #3 -1000e1e6: d102 bne.n 1000e1ee -1000e1e8: 2001 movs r0, #1 -1000e1ea: f028 fecf bl 10036f8c -1000e1ee: 2000 movs r0, #0 -1000e1f0: f029 f800 bl 100371f4 -1000e1f4: b978 cbnz r0, 1000e216 -1000e1f6: f008 f80d bl 10016214 -1000e1fa: eba0 0009 sub.w r0, r0, r9 -1000e1fe: f5b0 6ffa cmp.w r0, #2000 ; 0x7d0 -1000e202: d972 bls.n 1000e2ea -1000e204: 485a ldr r0, [pc, #360] ; (1000e370 ) -1000e206: f00c fcab bl 1001ab60 -1000e20a: e00b b.n 1000e224 -1000e20c: f108 003c add.w r0, r8, #60 ; 0x3c -1000e210: f002 fe99 bl 10010f46 -1000e214: e7e0 b.n 1000e1d8 -1000e216: 1ee2 subs r2, r4, #3 -1000e218: 4250 negs r0, r2 -1000e21a: 4150 adcs r0, r2 -1000e21c: f028 ffea bl 100371f4 -1000e220: 2800 cmp r0, #0 -1000e222: d0e8 beq.n 1000e1f6 -1000e224: 78a8 ldrb r0, [r5, #2] -1000e226: f7ff f8dd bl 1000d3e4 -1000e22a: b118 cbz r0, 1000e234 -1000e22c: 78a9 ldrb r1, [r5, #2] -1000e22e: 4851 ldr r0, [pc, #324] ; (1000e374 ) -1000e230: f00c fc96 bl 1001ab60 -1000e234: 4b50 ldr r3, [pc, #320] ; (1000e378 ) -1000e236: 78e8 ldrb r0, [r5, #3] -1000e238: 781b ldrb r3, [r3, #0] -1000e23a: 4283 cmp r3, r0 -1000e23c: d006 beq.n 1000e24c -1000e23e: f028 ff75 bl 1003712c -1000e242: b118 cbz r0, 1000e24c -1000e244: 78e9 ldrb r1, [r5, #3] -1000e246: 484d ldr r0, [pc, #308] ; (1000e37c ) -1000e248: f00c fc8a bl 1001ab60 -1000e24c: 7928 ldrb r0, [r5, #4] -1000e24e: f7ff f985 bl 1000d55c -1000e252: b118 cbz r0, 1000e25c -1000e254: 7929 ldrb r1, [r5, #4] -1000e256: 484a ldr r0, [pc, #296] ; (1000e380 ) -1000e258: f00c fc82 bl 1001ab60 -1000e25c: 2c03 cmp r4, #3 -1000e25e: d81c bhi.n 1000e29a -1000e260: f04f 0a3c mov.w sl, #60 ; 0x3c -1000e264: 4b47 ldr r3, [pc, #284] ; (1000e384 ) -1000e266: f8df 9144 ldr.w r9, [pc, #324] ; 1000e3ac -1000e26a: 7818 ldrb r0, [r3, #0] -1000e26c: 4b46 ldr r3, [pc, #280] ; (1000e388 ) -1000e26e: fb0a 8000 mla r0, sl, r0, r8 -1000e272: 1f1a subs r2, r3, #4 -1000e274: f1a3 0108 sub.w r1, r3, #8 -1000e278: f8c0 9024 str.w r9, [r0, #36] ; 0x24 -1000e27c: f002 fdfc bl 10010e78 -1000e280: 4b42 ldr r3, [pc, #264] ; (1000e38c ) -1000e282: 7818 ldrb r0, [r3, #0] -1000e284: f109 0310 add.w r3, r9, #16 -1000e288: fb0a 8000 mla r0, sl, r0, r8 -1000e28c: 6243 str r3, [r0, #36] ; 0x24 -1000e28e: 4b40 ldr r3, [pc, #256] ; (1000e390 ) -1000e290: 1f1a subs r2, r3, #4 -1000e292: f1a3 0108 sub.w r1, r3, #8 -1000e296: f002 fdef bl 10010e78 -1000e29a: 2c02 cmp r4, #2 -1000e29c: d045 beq.n 1000e32a -1000e29e: 2c03 cmp r4, #3 -1000e2a0: d027 beq.n 1000e2f2 -1000e2a2: 2c01 cmp r4, #1 -1000e2a4: d145 bne.n 1000e332 -1000e2a6: 7833 ldrb r3, [r6, #0] -1000e2a8: f003 03fd and.w r3, r3, #253 ; 0xfd -1000e2ac: 2b01 cmp r3, #1 -1000e2ae: d13a bne.n 1000e326 -1000e2b0: f7ff fef6 bl 1000e0a0 -1000e2b4: 4604 mov r4, r0 -1000e2b6: 4e37 ldr r6, [pc, #220] ; (1000e394 ) -1000e2b8: 2000 movs r0, #0 -1000e2ba: f896 106d ldrb.w r1, [r6, #109] ; 0x6d -1000e2be: f7ff fdb1 bl 1000de24 <_wext_set_lps_dtim> -1000e2c2: b120 cbz r0, 1000e2ce -1000e2c4: f896 106d ldrb.w r1, [r6, #109] ; 0x6d -1000e2c8: 4833 ldr r0, [pc, #204] ; (1000e398 ) -1000e2ca: f00c fc49 bl 1001ab60 -1000e2ce: f896 106c ldrb.w r1, [r6, #108] ; 0x6c -1000e2d2: 2000 movs r0, #0 -1000e2d4: f3c1 0240 ubfx r2, r1, #1, #1 -1000e2d8: f001 0101 and.w r1, r1, #1 -1000e2dc: f7ff fdb0 bl 1000de40 <_wext_enable_powersave> -1000e2e0: b190 cbz r0, 1000e308 -1000e2e2: 482e ldr r0, [pc, #184] ; (1000e39c ) -1000e2e4: f00c fc3c bl 1001ab60 -1000e2e8: e00e b.n 1000e308 -1000e2ea: 2014 movs r0, #20 -1000e2ec: f008 f8a0 bl 10016430 -1000e2f0: e77d b.n 1000e1ee -1000e2f2: f7ff fde9 bl 1000dec8 -1000e2f6: 7833 ldrb r3, [r6, #0] -1000e2f8: 4604 mov r4, r0 -1000e2fa: f003 03fd and.w r3, r3, #253 ; 0xfd -1000e2fe: 2b01 cmp r3, #1 -1000e300: d10f bne.n 1000e322 -1000e302: f7ff fecd bl 1000e0a0 -1000e306: 4304 orrs r4, r0 -1000e308: 4b25 ldr r3, [pc, #148] ; (1000e3a0 ) -1000e30a: 701f strb r7, [r3, #0] -1000e30c: b934 cbnz r4, 1000e31c -1000e30e: 79ab ldrb r3, [r5, #6] -1000e310: 06db lsls r3, r3, #27 -1000e312: d503 bpl.n 1000e31c -1000e314: 2010 movs r0, #16 -1000e316: 702f strb r7, [r5, #0] -1000e318: f7ff fd4a bl 1000ddb0 -1000e31c: 4620 mov r0, r4 -1000e31e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1000e322: 2000 movs r0, #0 -1000e324: e7ef b.n 1000e306 -1000e326: 2400 movs r4, #0 -1000e328: e7c5 b.n 1000e2b6 -1000e32a: f7ff fdcd bl 1000dec8 -1000e32e: 4604 mov r4, r0 -1000e330: e7ea b.n 1000e308 -1000e332: 7831 ldrb r1, [r6, #0] -1000e334: 481b ldr r0, [pc, #108] ; (1000e3a4 ) -1000e336: f00c fc13 bl 1001ab60 -1000e33a: 2401 movs r4, #1 -1000e33c: e7e4 b.n 1000e308 -1000e33e: 481a ldr r0, [pc, #104] ; (1000e3a8 ) -1000e340: f00c fc0e bl 1001ab60 -1000e344: 4d16 ldr r5, [pc, #88] ; (1000e3a0 ) -1000e346: 782a ldrb r2, [r5, #0] -1000e348: b10a cbz r2, 1000e34e -1000e34a: f7ff f831 bl 1000d3b0 -1000e34e: 2400 movs r4, #0 -1000e350: f7ff f854 bl 1000d3fc -1000e354: 4b03 ldr r3, [pc, #12] ; (1000e364 ) -1000e356: 702c strb r4, [r5, #0] -1000e358: 701c strb r4, [r3, #0] -1000e35a: f7ff fcb7 bl 1000dccc -1000e35e: e7dd b.n 1000e31c -1000e360: 1004a784 .word 0x1004a784 -1000e364: 1004aa05 .word 0x1004aa05 -1000e368: 10044dc8 .word 0x10044dc8 -1000e36c: 1004a984 .word 0x1004a984 -1000e370: 1003fd72 .word 0x1003fd72 -1000e374: 1003fd86 .word 0x1003fd86 -1000e378: 1004dd68 .word 0x1004dd68 -1000e37c: 1003fdac .word 0x1003fdac -1000e380: 1003fdcb .word 0x1003fdcb -1000e384: 1004aa06 .word 0x1004aa06 -1000e388: 10044e48 .word 0x10044e48 -1000e38c: 10044e56 .word 0x10044e56 -1000e390: 10044dc0 .word 0x10044dc0 -1000e394: 10044dcf .word 0x10044dcf -1000e398: 1003fdee .word 0x1003fdee -1000e39c: 1003fe08 .word 0x1003fe08 -1000e3a0: 1004aa04 .word 0x1004aa04 -1000e3a4: 1003fe28 .word 0x1003fe28 -1000e3a8: 1003fe3e .word 0x1003fe3e -1000e3ac: 10044e68 .word 0x10044e68 - -1000e3b0 : -1000e3b0: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} -1000e3b4: 4c28 ldr r4, [pc, #160] ; (1000e458 ) -1000e3b6: f8df 90c0 ldr.w r9, [pc, #192] ; 1000e478 -1000e3ba: 7960 ldrb r0, [r4, #5] -1000e3bc: f7ff fcd4 bl 1000dd68 -1000e3c0: 2200 movs r2, #0 -1000e3c2: 4b26 ldr r3, [pc, #152] ; (1000e45c ) -1000e3c4: f8d9 5000 ldr.w r5, [r9] -1000e3c8: 601a str r2, [r3, #0] -1000e3ca: 46a2 mov sl, r4 -1000e3cc: 2d00 cmp r5, #0 -1000e3ce: d13b bne.n 1000e448 -1000e3d0: 4629 mov r1, r5 -1000e3d2: 4628 mov r0, r5 -1000e3d4: f000 fa8c bl 1000e8f0 -1000e3d8: 2372 movs r3, #114 ; 0x72 -1000e3da: 4c21 ldr r4, [pc, #132] ; (1000e460 ) -1000e3dc: 263c movs r6, #60 ; 0x3c -1000e3de: f884 3032 strb.w r3, [r4, #50] ; 0x32 -1000e3e2: f884 306e strb.w r3, [r4, #110] ; 0x6e -1000e3e6: 2331 movs r3, #49 ; 0x31 -1000e3e8: 2230 movs r2, #48 ; 0x30 -1000e3ea: f884 306f strb.w r3, [r4, #111] ; 0x6f -1000e3ee: 4b1d ldr r3, [pc, #116] ; (1000e464 ) -1000e3f0: f8df 8088 ldr.w r8, [pc, #136] ; 1000e47c -1000e3f4: 7818 ldrb r0, [r3, #0] -1000e3f6: 4f1c ldr r7, [pc, #112] ; (1000e468 ) -1000e3f8: 4b1c ldr r3, [pc, #112] ; (1000e46c ) -1000e3fa: f884 2033 strb.w r2, [r4, #51] ; 0x33 -1000e3fe: f1a3 0108 sub.w r1, r3, #8 -1000e402: 1f1a subs r2, r3, #4 -1000e404: f8cd 8008 str.w r8, [sp, #8] -1000e408: e88d 00a0 stmia.w sp, {r5, r7} -1000e40c: fb06 4000 mla r0, r6, r0, r4 -1000e410: f002 fd40 bl 10010e94 -1000e414: 4b16 ldr r3, [pc, #88] ; (1000e470 ) -1000e416: 7818 ldrb r0, [r3, #0] -1000e418: 4b16 ldr r3, [pc, #88] ; (1000e474 ) -1000e41a: e88d 01a0 stmia.w sp, {r5, r7, r8} -1000e41e: 1f1a subs r2, r3, #4 -1000e420: f1a3 0108 sub.w r1, r3, #8 -1000e424: fb06 4000 mla r0, r6, r0, r4 -1000e428: f002 fd34 bl 10010e94 -1000e42c: 4620 mov r0, r4 -1000e42e: f002 fd69 bl 10010f04 -1000e432: 4620 mov r0, r4 -1000e434: f002 fd6c bl 10010f10 -1000e438: 19a0 adds r0, r4, r6 -1000e43a: f002 fd69 bl 10010f10 -1000e43e: 2301 movs r3, #1 -1000e440: f8c9 3000 str.w r3, [r9] -1000e444: f7ff f900 bl 1000d648 -1000e448: f89a 0000 ldrb.w r0, [sl] -1000e44c: b004 add sp, #16 -1000e44e: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1000e452: f7ff be8b b.w 1000e16c -1000e456: bf00 nop -1000e458: 10044dc8 .word 0x10044dc8 -1000e45c: 1004baf4 .word 0x1004baf4 -1000e460: 1004a984 .word 0x1004a984 -1000e464: 1004aa06 .word 0x1004aa06 -1000e468: 10014661 .word 0x10014661 -1000e46c: 10044e48 .word 0x10044e48 -1000e470: 10044e56 .word 0x10044e56 -1000e474: 10044dc0 .word 0x10044dc0 -1000e478: 1004a980 .word 0x1004a980 -1000e47c: 1000e811 .word 0x1000e811 - -1000e480 : -1000e480: b530 push {r4, r5, lr} -1000e482: 2402 movs r4, #2 -1000e484: b085 sub sp, #20 -1000e486: 4605 mov r5, r0 -1000e488: 4811 ldr r0, [pc, #68] ; (1000e4d0 ) -1000e48a: f00c fb69 bl 1001ab60 -1000e48e: 4b11 ldr r3, [pc, #68] ; (1000e4d4 ) -1000e490: 4a11 ldr r2, [pc, #68] ; (1000e4d8 ) -1000e492: 701c strb r4, [r3, #0] -1000e494: 2300 movs r3, #0 -1000e496: f992 1068 ldrsb.w r1, [r2, #104] ; 0x68 -1000e49a: 9302 str r3, [sp, #8] -1000e49c: 686b ldr r3, [r5, #4] -1000e49e: f102 0062 add.w r0, r2, #98 ; 0x62 -1000e4a2: 9301 str r3, [sp, #4] -1000e4a4: f102 0321 add.w r3, r2, #33 ; 0x21 -1000e4a8: 9300 str r3, [sp, #0] -1000e4aa: 682b ldr r3, [r5, #0] -1000e4ac: f7fe fd62 bl 1000cf74 -1000e4b0: b940 cbnz r0, 1000e4c4 -1000e4b2: 4b0a ldr r3, [pc, #40] ; (1000e4dc ) -1000e4b4: 799b ldrb r3, [r3, #6] -1000e4b6: 079b lsls r3, r3, #30 -1000e4b8: d502 bpl.n 1000e4c0 -1000e4ba: 4620 mov r0, r4 -1000e4bc: f7ff fc78 bl 1000ddb0 -1000e4c0: f7ff fd9e bl 1000e000 -1000e4c4: 2000 movs r0, #0 -1000e4c6: b005 add sp, #20 -1000e4c8: e8bd 4030 ldmia.w sp!, {r4, r5, lr} -1000e4cc: f007 bd94 b.w 10015ff8 -1000e4d0: 1004134d .word 0x1004134d -1000e4d4: 1004aa05 .word 0x1004aa05 -1000e4d8: 10044dcf .word 0x10044dcf -1000e4dc: 10044dc8 .word 0x10044dc8 - -1000e4e0 : -1000e4e0: b513 push {r0, r1, r4, lr} -1000e4e2: 4c1a ldr r4, [pc, #104] ; (1000e54c ) -1000e4e4: 481a ldr r0, [pc, #104] ; (1000e550 ) -1000e4e6: f00c fb3b bl 1001ab60 -1000e4ea: 7ce3 ldrb r3, [r4, #19] -1000e4ec: b18b cbz r3, 1000e512 -1000e4ee: 4919 ldr r1, [pc, #100] ; (1000e554 ) -1000e4f0: 2003 movs r0, #3 -1000e4f2: f7ff f887 bl 1000d604 -1000e4f6: 2004 movs r0, #4 -1000e4f8: 4917 ldr r1, [pc, #92] ; (1000e558 ) -1000e4fa: f7ff f883 bl 1000d604 -1000e4fe: 6860 ldr r0, [r4, #4] -1000e500: b110 cbz r0, 1000e508 -1000e502: 2100 movs r1, #0 -1000e504: f008 ff81 bl 1001740a -1000e508: 2214 movs r2, #20 -1000e50a: 2100 movs r1, #0 -1000e50c: 480f ldr r0, [pc, #60] ; (1000e54c ) -1000e50e: f008 ff8f bl 10017430 -1000e512: 4c12 ldr r4, [pc, #72] ; (1000e55c ) -1000e514: 7ae3 ldrb r3, [r4, #11] -1000e516: b1b3 cbz r3, 1000e546 -1000e518: 6820 ldr r0, [r4, #0] -1000e51a: b138 cbz r0, 1000e52c -1000e51c: f04f 33ff mov.w r3, #4294967295 -1000e520: 9300 str r3, [sp, #0] -1000e522: 2300 movs r3, #0 -1000e524: 2105 movs r1, #5 -1000e526: 461a mov r2, r3 -1000e528: f008 fa32 bl 10016990 -1000e52c: 6860 ldr r0, [r4, #4] -1000e52e: b110 cbz r0, 1000e536 -1000e530: 2100 movs r1, #0 -1000e532: f008 ff6a bl 1001740a -1000e536: 220c movs r2, #12 -1000e538: 2100 movs r1, #0 -1000e53a: 4808 ldr r0, [pc, #32] ; (1000e55c ) -1000e53c: b002 add sp, #8 -1000e53e: e8bd 4010 ldmia.w sp!, {r4, lr} -1000e542: f008 bf75 b.w 10017430 -1000e546: b002 add sp, #8 -1000e548: bd10 pop {r4, pc} -1000e54a: bf00 nop -1000e54c: 1004a770 .word 0x1004a770 -1000e550: 1003fef8 .word 0x1003fef8 -1000e554: 1000ce11 .word 0x1000ce11 -1000e558: 1000e561 .word 0x1000e561 -1000e55c: 1004aa08 .word 0x1004aa08 - -1000e560 <_wifi_scan_done_hdl>: -1000e560: b573 push {r0, r1, r4, r5, r6, lr} -1000e562: 481b ldr r0, [pc, #108] ; (1000e5d0 <_wifi_scan_done_hdl+0x70>) -1000e564: 6885 ldr r5, [r0, #8] -1000e566: 4606 mov r6, r0 -1000e568: b12d cbz r5, 1000e576 <_wifi_scan_done_hdl+0x16> -1000e56a: 47a8 blx r5 -1000e56c: b002 add sp, #8 -1000e56e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1000e572: f7ff bfb5 b.w 1000e4e0 -1000e576: 4c17 ldr r4, [pc, #92] ; (1000e5d4 <_wifi_scan_done_hdl+0x74>) -1000e578: 7ae3 ldrb r3, [r4, #11] -1000e57a: 2b00 cmp r3, #0 -1000e57c: d0f6 beq.n 1000e56c <_wifi_scan_done_hdl+0xc> -1000e57e: 7c03 ldrb r3, [r0, #16] -1000e580: 2b00 cmp r3, #0 -1000e582: d0f3 beq.n 1000e56c <_wifi_scan_done_hdl+0xc> -1000e584: f04f 33ff mov.w r3, #4294967295 -1000e588: f241 3288 movw r2, #5000 ; 0x1388 -1000e58c: 9300 str r3, [sp, #0] -1000e58e: 2104 movs r1, #4 -1000e590: 462b mov r3, r5 -1000e592: 6820 ldr r0, [r4, #0] -1000e594: f008 f9fc bl 10016990 -1000e598: 2801 cmp r0, #1 -1000e59a: d117 bne.n 1000e5cc <_wifi_scan_done_hdl+0x6c> -1000e59c: 6860 ldr r0, [r4, #4] -1000e59e: b110 cbz r0, 1000e5a6 <_wifi_scan_done_hdl+0x46> -1000e5a0: 4629 mov r1, r5 -1000e5a2: f008 ff32 bl 1001740a -1000e5a6: 6873 ldr r3, [r6, #4] -1000e5a8: 490b ldr r1, [pc, #44] ; (1000e5d8 <_wifi_scan_done_hdl+0x78>) -1000e5aa: 6063 str r3, [r4, #4] -1000e5ac: 7c33 ldrb r3, [r6, #16] -1000e5ae: 2003 movs r0, #3 -1000e5b0: 7223 strb r3, [r4, #8] -1000e5b2: f7ff f827 bl 1000d604 -1000e5b6: 4909 ldr r1, [pc, #36] ; (1000e5dc <_wifi_scan_done_hdl+0x7c>) -1000e5b8: 2004 movs r0, #4 -1000e5ba: f7ff f823 bl 1000d604 -1000e5be: 2214 movs r2, #20 -1000e5c0: 2100 movs r1, #0 -1000e5c2: 4803 ldr r0, [pc, #12] ; (1000e5d0 <_wifi_scan_done_hdl+0x70>) -1000e5c4: f008 ff34 bl 10017430 -1000e5c8: 2302 movs r3, #2 -1000e5ca: 72e3 strb r3, [r4, #11] -1000e5cc: b002 add sp, #8 -1000e5ce: bd70 pop {r4, r5, r6, pc} -1000e5d0: 1004a770 .word 0x1004a770 -1000e5d4: 1004aa08 .word 0x1004aa08 -1000e5d8: 1000ce11 .word 0x1000ce11 -1000e5dc: 1000e561 .word 0x1000e561 - -1000e5e0 : -1000e5e0: b513 push {r0, r1, r4, lr} -1000e5e2: 4c0b ldr r4, [pc, #44] ; (1000e610 ) -1000e5e4: 4602 mov r2, r0 -1000e5e6: 7ae3 ldrb r3, [r4, #11] -1000e5e8: b17b cbz r3, 1000e60a -1000e5ea: f04f 33ff mov.w r3, #4294967295 -1000e5ee: 2104 movs r1, #4 -1000e5f0: 9300 str r3, [sp, #0] -1000e5f2: 6820 ldr r0, [r4, #0] -1000e5f4: 2300 movs r3, #0 -1000e5f6: f008 f9cb bl 10016990 -1000e5fa: 2801 cmp r0, #1 -1000e5fc: d005 beq.n 1000e60a -1000e5fe: 4805 ldr r0, [pc, #20] ; (1000e614 ) -1000e600: b002 add sp, #8 -1000e602: e8bd 4010 ldmia.w sp!, {r4, lr} -1000e606: f00c baab b.w 1001ab60 -1000e60a: b002 add sp, #8 -1000e60c: bd10 pop {r4, pc} -1000e60e: bf00 nop -1000e610: 1004aa08 .word 0x1004aa08 -1000e614: 1003ff08 .word 0x1003ff08 - -1000e618 : -1000e618: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -1000e61c: 4c4d ldr r4, [pc, #308] ; (1000e754 ) -1000e61e: b08b sub sp, #44 ; 0x2c -1000e620: 7ce3 ldrb r3, [r4, #19] -1000e622: 4606 mov r6, r0 -1000e624: 2b00 cmp r3, #0 -1000e626: f040 8092 bne.w 1000e74e -1000e62a: 4d4b ldr r5, [pc, #300] ; (1000e758 ) -1000e62c: 7aeb ldrb r3, [r5, #11] -1000e62e: f003 07ff and.w r7, r3, #255 ; 0xff -1000e632: 2b00 cmp r3, #0 -1000e634: f040 808b bne.w 1000e74e -1000e638: f04f 0901 mov.w r9, #1 -1000e63c: 220c movs r2, #12 -1000e63e: 4639 mov r1, r7 -1000e640: 4628 mov r0, r5 -1000e642: f884 9013 strb.w r9, [r4, #19] -1000e646: f008 fef3 bl 10017430 -1000e64a: 4b44 ldr r3, [pc, #272] ; (1000e75c ) -1000e64c: f885 900b strb.w r9, [r5, #11] -1000e650: 463a mov r2, r7 -1000e652: 9300 str r3, [sp, #0] -1000e654: f640 11c4 movw r1, #2500 ; 0x9c4 -1000e658: 463b mov r3, r7 -1000e65a: 4841 ldr r0, [pc, #260] ; (1000e760 ) -1000e65c: f008 f97e bl 1001695c -1000e660: 4680 mov r8, r0 -1000e662: 6028 str r0, [r5, #0] -1000e664: 2800 cmp r0, #0 -1000e666: d044 beq.n 1000e6f2 -1000e668: f007 fdd4 bl 10016214 -1000e66c: f04f 33ff mov.w r3, #4294967295 -1000e670: 4602 mov r2, r0 -1000e672: 9300 str r3, [sp, #0] -1000e674: 4649 mov r1, r9 -1000e676: 463b mov r3, r7 -1000e678: 4640 mov r0, r8 -1000e67a: f008 f989 bl 10016990 -1000e67e: 4548 cmp r0, r9 -1000e680: 4605 mov r5, r0 -1000e682: d136 bne.n 1000e6f2 -1000e684: 4639 mov r1, r7 -1000e686: 2220 movs r2, #32 -1000e688: a802 add r0, sp, #8 -1000e68a: f008 fed1 bl 10017430 -1000e68e: 2029 movs r0, #41 ; 0x29 -1000e690: f8ad 001c strh.w r0, [sp, #28] -1000e694: f009 f87c bl 10017790 -1000e698: 4607 mov r7, r0 -1000e69a: 9006 str r0, [sp, #24] -1000e69c: b348 cbz r0, 1000e6f2 -1000e69e: 220c movs r2, #12 -1000e6a0: 4930 ldr r1, [pc, #192] ; (1000e764 ) -1000e6a2: f008 feb5 bl 10017410 -1000e6a6: 220e movs r2, #14 -1000e6a8: 463b mov r3, r7 -1000e6aa: 4628 mov r0, r5 -1000e6ac: f803 2f0c strb.w r2, [r3, #12]! -1000e6b0: 462a mov r2, r5 -1000e6b2: 7058 strb r0, [r3, #1] -1000e6b4: 3001 adds r0, #1 -1000e6b6: 280f cmp r0, #15 -1000e6b8: f8a3 200f strh.w r2, [r3, #15] -1000e6bc: f103 0301 add.w r3, r3, #1 -1000e6c0: d1f7 bne.n 1000e6b2 -1000e6c2: aa02 add r2, sp, #8 -1000e6c4: f648 11f0 movw r1, #35312 ; 0x89f0 -1000e6c8: 4827 ldr r0, [pc, #156] ; (1000e768 ) -1000e6ca: f7fe ffcd bl 1000d668 -1000e6ce: 4605 mov r5, r0 -1000e6d0: 2100 movs r1, #0 -1000e6d2: 4638 mov r0, r7 -1000e6d4: f008 fe99 bl 1001740a -1000e6d8: 2d00 cmp r5, #0 -1000e6da: db0a blt.n 1000e6f2 -1000e6dc: 2320 movs r3, #32 -1000e6de: f44f 6004 mov.w r0, #2112 ; 0x840 -1000e6e2: 60a6 str r6, [r4, #8] -1000e6e4: 7463 strb r3, [r4, #17] -1000e6e6: f009 f863 bl 100177b0 -1000e6ea: 6060 str r0, [r4, #4] -1000e6ec: b930 cbnz r0, 1000e6fc -1000e6ee: f7ff fef7 bl 1000e4e0 -1000e6f2: f7ff fef5 bl 1000e4e0 -1000e6f6: f04f 30ff mov.w r0, #4294967295 -1000e6fa: e025 b.n 1000e748 -1000e6fc: 2500 movs r5, #0 -1000e6fe: f500 60f8 add.w r0, r0, #1984 ; 0x7c0 -1000e702: 6020 str r0, [r4, #0] -1000e704: 462a mov r2, r5 -1000e706: 4919 ldr r1, [pc, #100] ; (1000e76c ) -1000e708: 2003 movs r0, #3 -1000e70a: 7425 strb r5, [r4, #16] -1000e70c: 74a5 strb r5, [r4, #18] -1000e70e: 60e5 str r5, [r4, #12] -1000e710: f7fe ff50 bl 1000d5b4 -1000e714: 462a mov r2, r5 -1000e716: 4916 ldr r1, [pc, #88] ; (1000e770 ) -1000e718: 2004 movs r0, #4 -1000e71a: f7fe ff4b bl 1000d5b4 -1000e71e: f44f 7304 mov.w r3, #528 ; 0x210 -1000e722: 462a mov r2, r5 -1000e724: 4629 mov r1, r5 -1000e726: 4810 ldr r0, [pc, #64] ; (1000e768 ) -1000e728: f7ff f916 bl 1000d958 -1000e72c: 2800 cmp r0, #0 -1000e72e: d1de bne.n 1000e6ee -1000e730: b14e cbz r6, 1000e746 -1000e732: f240 152d movw r5, #301 ; 0x12d -1000e736: e004 b.n 1000e742 -1000e738: 7ce3 ldrb r3, [r4, #19] -1000e73a: b123 cbz r3, 1000e746 -1000e73c: 200a movs r0, #10 -1000e73e: f007 fe77 bl 10016430 -1000e742: 3d01 subs r5, #1 -1000e744: d1f8 bne.n 1000e738 -1000e746: 2000 movs r0, #0 -1000e748: b00b add sp, #44 ; 0x2c -1000e74a: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -1000e74e: 2002 movs r0, #2 -1000e750: e7fa b.n 1000e748 -1000e752: bf00 nop -1000e754: 1004a770 .word 0x1004a770 -1000e758: 1004aa08 .word 0x1004aa08 -1000e75c: 1000e4e1 .word 0x1000e4e1 -1000e760: 1003fee4 .word 0x1003fee4 -1000e764: 1003feec .word 0x1003feec -1000e768: 1003fb67 .word 0x1003fb67 -1000e76c: 1000ce11 .word 0x1000ce11 -1000e770: 1000e561 .word 0x1000e561 - -1000e774 : -1000e774: 4b02 ldr r3, [pc, #8] ; (1000e780 ) -1000e776: 4240 negs r0, r0 -1000e778: f853 0020 ldr.w r0, [r3, r0, lsl #2] -1000e77c: 4770 bx lr -1000e77e: bf00 nop -1000e780: 1003ff24 .word 0x1003ff24 - -1000e784 : -1000e784: 4770 bx lr - ... - -1000e788 : -1000e788: 4b1e ldr r3, [pc, #120] ; (1000e804 ) -1000e78a: b507 push {r0, r1, r2, lr} -1000e78c: 681b ldr r3, [r3, #0] -1000e78e: b113 cbz r3, 1000e796 -1000e790: 4a1d ldr r2, [pc, #116] ; (1000e808 ) -1000e792: 6810 ldr r0, [r2, #0] -1000e794: 4798 blx r3 -1000e796: 4c1d ldr r4, [pc, #116] ; (1000e80c ) -1000e798: a901 add r1, sp, #4 -1000e79a: 4620 mov r0, r4 -1000e79c: f002 fb12 bl 10010dc4 -1000e7a0: 9b01 ldr r3, [sp, #4] -1000e7a2: 681a ldr r2, [r3, #0] -1000e7a4: 2a05 cmp r2, #5 -1000e7a6: d8f7 bhi.n 1000e798 -1000e7a8: e8df f002 tbb [pc, r2] -1000e7ac: 1e180803 .word 0x1e180803 -1000e7b0: 2723 .short 0x2723 -1000e7b2: 6898 ldr r0, [r3, #8] -1000e7b4: 6803 ldr r3, [r0, #0] -1000e7b6: 3004 adds r0, #4 -1000e7b8: 4798 blx r3 -1000e7ba: e7ed b.n 1000e798 -1000e7bc: 68d9 ldr r1, [r3, #12] -1000e7be: 6898 ldr r0, [r3, #8] -1000e7c0: f891 2031 ldrb.w r2, [r1, #49] ; 0x31 -1000e7c4: f012 0f60 tst.w r2, #96 ; 0x60 -1000e7c8: d005 beq.n 1000e7d6 -1000e7ca: f005 fde7 bl 1001439c -1000e7ce: 9801 ldr r0, [sp, #4] -1000e7d0: f006 fd48 bl 10015264 -1000e7d4: e7e0 b.n 1000e798 -1000e7d6: f000 fb91 bl 1000eefc -1000e7da: e7f8 b.n 1000e7ce -1000e7dc: f103 0008 add.w r0, r3, #8 -1000e7e0: c807 ldmia r0, {r0, r1, r2} -1000e7e2: f002 f9e1 bl 10010ba8 -1000e7e6: e7f2 b.n 1000e7ce -1000e7e8: 6919 ldr r1, [r3, #16] -1000e7ea: 68d8 ldr r0, [r3, #12] -1000e7ec: f002 fac6 bl 10010d7c -1000e7f0: e7ed b.n 1000e7ce -1000e7f2: 689a ldr r2, [r3, #8] -1000e7f4: 68d8 ldr r0, [r3, #12] -1000e7f6: 4790 blx r2 -1000e7f8: e7e9 b.n 1000e7ce -1000e7fa: 689a ldr r2, [r3, #8] -1000e7fc: 68d8 ldr r0, [r3, #12] -1000e7fe: 4790 blx r2 -1000e800: e7ca b.n 1000e798 -1000e802: bf00 nop -1000e804: 1004aa18 .word 0x1004aa18 -1000e808: 1004aa1c .word 0x1004aa1c -1000e80c: 1004aa14 .word 0x1004aa14 - -1000e810 : -1000e810: b570 push {r4, r5, r6, lr} -1000e812: 4606 mov r6, r0 -1000e814: 480e ldr r0, [pc, #56] ; (1000e850 ) -1000e816: 460d mov r5, r1 -1000e818: f006 f86c bl 100148f4 -1000e81c: b1a0 cbz r0, 1000e848 -1000e81e: 4b0d ldr r3, [pc, #52] ; (1000e854 ) -1000e820: 8a98 ldrh r0, [r3, #20] -1000e822: f006 fc83 bl 1001512c -1000e826: 4604 mov r4, r0 -1000e828: b158 cbz r0, 1000e842 -1000e82a: 2301 movs r3, #1 -1000e82c: 6086 str r6, [r0, #8] -1000e82e: 6003 str r3, [r0, #0] -1000e830: 60c5 str r5, [r0, #12] -1000e832: 4601 mov r1, r0 -1000e834: 4806 ldr r0, [pc, #24] ; (1000e850 ) -1000e836: f006 f826 bl 10014886 -1000e83a: b120 cbz r0, 1000e846 -1000e83c: 4620 mov r0, r4 -1000e83e: f006 fd11 bl 10015264 -1000e842: f04f 30ff mov.w r0, #4294967295 -1000e846: bd70 pop {r4, r5, r6, pc} -1000e848: f06f 0005 mvn.w r0, #5 -1000e84c: bd70 pop {r4, r5, r6, pc} -1000e84e: bf00 nop -1000e850: 1004aa14 .word 0x1004aa14 -1000e854: 10040088 .word 0x10040088 - -1000e858 : -1000e858: b5f8 push {r3, r4, r5, r6, r7, lr} -1000e85a: 4607 mov r7, r0 -1000e85c: 4811 ldr r0, [pc, #68] ; (1000e8a4 ) -1000e85e: 460e mov r6, r1 -1000e860: 4615 mov r5, r2 -1000e862: f006 f847 bl 100148f4 -1000e866: b1c8 cbz r0, 1000e89c -1000e868: 4b0f ldr r3, [pc, #60] ; (1000e8a8 ) -1000e86a: 8a58 ldrh r0, [r3, #18] -1000e86c: f006 fc5e bl 1001512c -1000e870: 4604 mov r4, r0 -1000e872: b180 cbz r0, 1000e896 -1000e874: 2304 movs r3, #4 -1000e876: 6087 str r7, [r0, #8] -1000e878: 6003 str r3, [r0, #0] -1000e87a: 60c6 str r6, [r0, #12] -1000e87c: 4601 mov r1, r0 -1000e87e: 4809 ldr r0, [pc, #36] ; (1000e8a4 ) -1000e880: b11d cbz r5, 1000e88a -1000e882: f005 fff0 bl 10014866 -1000e886: 2000 movs r0, #0 -1000e888: bdf8 pop {r3, r4, r5, r6, r7, pc} -1000e88a: f005 fffc bl 10014886 -1000e88e: b120 cbz r0, 1000e89a -1000e890: 4620 mov r0, r4 -1000e892: f006 fce7 bl 10015264 -1000e896: f04f 30ff mov.w r0, #4294967295 -1000e89a: bdf8 pop {r3, r4, r5, r6, r7, pc} -1000e89c: f06f 0005 mvn.w r0, #5 -1000e8a0: bdf8 pop {r3, r4, r5, r6, r7, pc} -1000e8a2: bf00 nop -1000e8a4: 1004aa14 .word 0x1004aa14 -1000e8a8: 10040088 .word 0x10040088 - -1000e8ac : -1000e8ac: b570 push {r4, r5, r6, lr} -1000e8ae: 4606 mov r6, r0 -1000e8b0: 480d ldr r0, [pc, #52] ; (1000e8e8 ) -1000e8b2: 460d mov r5, r1 -1000e8b4: 4614 mov r4, r2 -1000e8b6: f006 f81d bl 100148f4 -1000e8ba: b178 cbz r0, 1000e8dc -1000e8bc: 4b0b ldr r3, [pc, #44] ; (1000e8ec ) -1000e8be: 8a58 ldrh r0, [r3, #18] -1000e8c0: f006 fc34 bl 1001512c -1000e8c4: 4601 mov r1, r0 -1000e8c6: b160 cbz r0, 1000e8e2 -1000e8c8: 2302 movs r3, #2 -1000e8ca: 6086 str r6, [r0, #8] -1000e8cc: 6003 str r3, [r0, #0] -1000e8ce: 60c5 str r5, [r0, #12] -1000e8d0: 6104 str r4, [r0, #16] -1000e8d2: 4805 ldr r0, [pc, #20] ; (1000e8e8 ) -1000e8d4: f005 ffc7 bl 10014866 -1000e8d8: 2000 movs r0, #0 -1000e8da: bd70 pop {r4, r5, r6, pc} -1000e8dc: f06f 0005 mvn.w r0, #5 -1000e8e0: bd70 pop {r4, r5, r6, pc} -1000e8e2: f04f 30ff mov.w r0, #4294967295 -1000e8e6: bd70 pop {r4, r5, r6, pc} -1000e8e8: 1004aa14 .word 0x1004aa14 -1000e8ec: 10040088 .word 0x10040088 - -1000e8f0 : -1000e8f0: b537 push {r0, r1, r2, r4, r5, lr} -1000e8f2: 4605 mov r5, r0 -1000e8f4: 460c mov r4, r1 -1000e8f6: f002 f943 bl 10010b80 -1000e8fa: 4b09 ldr r3, [pc, #36] ; (1000e920 ) -1000e8fc: 2106 movs r1, #6 -1000e8fe: 601d str r5, [r3, #0] -1000e900: 4b08 ldr r3, [pc, #32] ; (1000e924 ) -1000e902: 4809 ldr r0, [pc, #36] ; (1000e928 ) -1000e904: 601c str r4, [r3, #0] -1000e906: f005 ffa1 bl 1001484c -1000e90a: 2309 movs r3, #9 -1000e90c: 2200 movs r2, #0 -1000e90e: 9300 str r3, [sp, #0] -1000e910: 4906 ldr r1, [pc, #24] ; (1000e92c ) -1000e912: f44f 737a mov.w r3, #1000 ; 0x3e8 -1000e916: 4806 ldr r0, [pc, #24] ; (1000e930 ) -1000e918: f006 f802 bl 10014920 -1000e91c: b003 add sp, #12 -1000e91e: bd30 pop {r4, r5, pc} -1000e920: 1004aa18 .word 0x1004aa18 -1000e924: 1004aa1c .word 0x1004aa1c -1000e928: 1004aa14 .word 0x1004aa14 -1000e92c: 1000e789 .word 0x1000e789 -1000e930: 10040066 .word 0x10040066 - -1000e934 : -1000e934: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} -1000e938: 4604 mov r4, r0 -1000e93a: 4688 mov r8, r1 -1000e93c: 4615 mov r5, r2 -1000e93e: 2124 movs r1, #36 ; 0x24 -1000e940: 2200 movs r2, #0 -1000e942: 2001 movs r0, #1 -1000e944: f002 fbbc bl 100110c0 -1000e948: 4606 mov r6, r0 -1000e94a: b328 cbz r0, 1000e998 -1000e94c: 6827 ldr r7, [r4, #0] -1000e94e: 6844 ldr r4, [r0, #4] -1000e950: 221c movs r2, #28 -1000e952: 7065 strb r5, [r4, #1] -1000e954: 2500 movs r5, #0 -1000e956: 4639 mov r1, r7 -1000e958: f884 8000 strb.w r8, [r4] -1000e95c: 7125 strb r5, [r4, #4] -1000e95e: 7165 strb r5, [r4, #5] -1000e960: 71a5 strb r5, [r4, #6] -1000e962: 71e5 strb r5, [r4, #7] -1000e964: f104 0008 add.w r0, r4, #8 -1000e968: f00c f922 bl 1001abb0 -1000e96c: 8971 ldrh r1, [r6, #10] -1000e96e: 70a5 strb r5, [r4, #2] -1000e970: 70e5 strb r5, [r4, #3] -1000e972: 4620 mov r0, r4 -1000e974: f000 fa7b bl 1000ee6e -1000e978: 8060 strh r0, [r4, #2] -1000e97a: 68fb ldr r3, [r7, #12] -1000e97c: aa04 add r2, sp, #16 -1000e97e: f842 3d04 str.w r3, [r2, #-4]! -1000e982: 2301 movs r3, #1 -1000e984: 9500 str r5, [sp, #0] -1000e986: 9301 str r3, [sp, #4] -1000e988: 4629 mov r1, r5 -1000e98a: 23ff movs r3, #255 ; 0xff -1000e98c: 4630 mov r0, r6 -1000e98e: f000 fc4c bl 1000f22a -1000e992: 4630 mov r0, r6 -1000e994: f002 fb71 bl 1001107a -1000e998: b004 add sp, #16 -1000e99a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - ... - -1000e9a0 : -1000e9a0: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} -1000e9a4: 6846 ldr r6, [r0, #4] -1000e9a6: 460f mov r7, r1 -1000e9a8: 7835 ldrb r5, [r6, #0] -1000e9aa: 4604 mov r4, r0 -1000e9ac: f005 050f and.w r5, r5, #15 -1000e9b0: 00ad lsls r5, r5, #2 -1000e9b2: f1c5 0a00 rsb sl, r5, #0 -1000e9b6: fa0f fa8a sxth.w sl, sl -1000e9ba: 4651 mov r1, sl -1000e9bc: f002 fb32 bl 10011024 -1000e9c0: b998 cbnz r0, 1000e9ea -1000e9c2: 8923 ldrh r3, [r4, #8] -1000e9c4: 2b03 cmp r3, #3 -1000e9c6: d910 bls.n 1000e9ea -1000e9c8: 6863 ldr r3, [r4, #4] -1000e9ca: 781b ldrb r3, [r3, #0] -1000e9cc: 2b08 cmp r3, #8 -1000e9ce: d10c bne.n 1000e9ea -1000e9d0: f8df 90f0 ldr.w r9, [pc, #240] ; 1000eac4 -1000e9d4: 4639 mov r1, r7 -1000e9d6: f8d9 0000 ldr.w r0, [r9] -1000e9da: f000 08f0 and.w r8, r0, #240 ; 0xf0 -1000e9de: f000 fc40 bl 1000f262 -1000e9e2: b910 cbnz r0, 1000e9ea -1000e9e4: f1b8 0fe0 cmp.w r8, #224 ; 0xe0 -1000e9e8: d105 bne.n 1000e9f6 -1000e9ea: 4620 mov r0, r4 -1000e9ec: b004 add sp, #16 -1000e9ee: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1000e9f2: f002 bb42 b.w 1001107a -1000e9f6: 8923 ldrh r3, [r4, #8] -1000e9f8: 2b07 cmp r3, #7 -1000e9fa: d9f6 bls.n 1000e9ea -1000e9fc: 4620 mov r0, r4 -1000e9fe: f000 fa3c bl 1000ee7a -1000ea02: 2800 cmp r0, #0 -1000ea04: d1f1 bne.n 1000e9ea -1000ea06: 2122 movs r1, #34 ; 0x22 -1000ea08: 4620 mov r0, r4 -1000ea0a: b22d sxth r5, r5 -1000ea0c: f002 fb0a bl 10011024 -1000ea10: 2800 cmp r0, #0 -1000ea12: d04c beq.n 1000eaae -1000ea14: 4629 mov r1, r5 -1000ea16: 4620 mov r0, r4 -1000ea18: f002 fb04 bl 10011024 -1000ea1c: 4602 mov r2, r0 -1000ea1e: 2800 cmp r0, #0 -1000ea20: d1e3 bne.n 1000e9ea -1000ea22: 8921 ldrh r1, [r4, #8] -1000ea24: 2002 movs r0, #2 -1000ea26: f002 fb4b bl 100110c0 -1000ea2a: 4680 mov r8, r0 -1000ea2c: 2800 cmp r0, #0 -1000ea2e: d0dc beq.n 1000e9ea -1000ea30: 4621 mov r1, r4 -1000ea32: f002 fc19 bl 10011268 -1000ea36: 2800 cmp r0, #0 -1000ea38: d1d7 bne.n 1000e9ea -1000ea3a: 4651 mov r1, sl -1000ea3c: 4640 mov r0, r8 -1000ea3e: f8d8 6004 ldr.w r6, [r8, #4] -1000ea42: f002 faef bl 10011024 -1000ea46: 2800 cmp r0, #0 -1000ea48: d1cf bne.n 1000e9ea -1000ea4a: 4620 mov r0, r4 -1000ea4c: f002 fb15 bl 1001107a -1000ea50: 4644 mov r4, r8 -1000ea52: f8d9 3000 ldr.w r3, [r9] -1000ea56: 6862 ldr r2, [r4, #4] -1000ea58: 60f3 str r3, [r6, #12] -1000ea5a: 4b19 ldr r3, [pc, #100] ; (1000eac0 ) -1000ea5c: f64f 71f6 movw r1, #65526 ; 0xfff6 -1000ea60: 681b ldr r3, [r3, #0] -1000ea62: f04f 08ff mov.w r8, #255 ; 0xff -1000ea66: 6133 str r3, [r6, #16] -1000ea68: 2300 movs r3, #0 -1000ea6a: 7013 strb r3, [r2, #0] -1000ea6c: 8853 ldrh r3, [r2, #2] -1000ea6e: 4630 mov r0, r6 -1000ea70: 428b cmp r3, r1 -1000ea72: bf8c ite hi -1000ea74: 3309 addhi r3, #9 -1000ea76: 3308 addls r3, #8 -1000ea78: 8053 strh r3, [r2, #2] -1000ea7a: 2300 movs r3, #0 -1000ea7c: 2114 movs r1, #20 -1000ea7e: 72b3 strb r3, [r6, #10] -1000ea80: 72f3 strb r3, [r6, #11] -1000ea82: f886 8008 strb.w r8, [r6, #8] -1000ea86: f000 f9f2 bl 1000ee6e -1000ea8a: 4629 mov r1, r5 -1000ea8c: 8170 strh r0, [r6, #10] -1000ea8e: 4620 mov r0, r4 -1000ea90: f002 fac8 bl 10011024 -1000ea94: 4602 mov r2, r0 -1000ea96: 2800 cmp r0, #0 -1000ea98: d1a7 bne.n 1000e9ea -1000ea9a: 2301 movs r3, #1 -1000ea9c: 9702 str r7, [sp, #8] -1000ea9e: e88d 000c stmia.w sp, {r2, r3} -1000eaa2: 4908 ldr r1, [pc, #32] ; (1000eac4 ) -1000eaa4: 4643 mov r3, r8 -1000eaa6: 4620 mov r0, r4 -1000eaa8: f000 fbae bl 1000f208 -1000eaac: e79d b.n 1000e9ea -1000eaae: f06f 0121 mvn.w r1, #33 ; 0x21 -1000eab2: 4620 mov r0, r4 -1000eab4: f002 fab6 bl 10011024 -1000eab8: 2800 cmp r0, #0 -1000eaba: d196 bne.n 1000e9ea -1000eabc: e7c9 b.n 1000ea52 -1000eabe: bf00 nop -1000eac0: 1004aa34 .word 0x1004aa34 -1000eac4: 1004aa30 .word 0x1004aa30 - -1000eac8 : -1000eac8: b2ca uxtb r2, r1 -1000eaca: 3004 adds r0, #4 -1000eacc: 2103 movs r1, #3 -1000eace: f7ff bf31 b.w 1000e934 - -1000ead2 : -1000ead2: b2ca uxtb r2, r1 -1000ead4: 3004 adds r0, #4 -1000ead6: 210b movs r1, #11 -1000ead8: f7ff bf2c b.w 1000e934 - -1000eadc : -1000eadc: 2200 movs r2, #0 -1000eade: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1000eae2: 4b25 ldr r3, [pc, #148] ; (1000eb78 ) -1000eae4: b088 sub sp, #32 -1000eae6: 681b ldr r3, [r3, #0] -1000eae8: 4605 mov r5, r0 -1000eaea: 460e mov r6, r1 -1000eaec: 4610 mov r0, r2 -1000eaee: 2108 movs r1, #8 -1000eaf0: 9306 str r3, [sp, #24] -1000eaf2: f002 fae5 bl 100110c0 -1000eaf6: 4607 mov r7, r0 -1000eaf8: b388 cbz r0, 1000eb5e -1000eafa: 686b ldr r3, [r5, #4] -1000eafc: 2e16 cmp r6, #22 -1000eafe: 685b ldr r3, [r3, #4] -1000eb00: 6844 ldr r4, [r0, #4] -1000eb02: 9306 str r3, [sp, #24] -1000eb04: d12e bne.n 1000eb64 -1000eb06: 68ab ldr r3, [r5, #8] -1000eb08: f105 0808 add.w r8, r5, #8 -1000eb0c: 6063 str r3, [r4, #4] -1000eb0e: 2301 movs r3, #1 -1000eb10: 732b strb r3, [r5, #12] -1000eb12: f1a6 0316 sub.w r3, r6, #22 -1000eb16: 2b01 cmp r3, #1 -1000eb18: d81e bhi.n 1000eb58 -1000eb1a: 7026 strb r6, [r4, #0] -1000eb1c: 2600 movs r6, #0 -1000eb1e: 2108 movs r1, #8 -1000eb20: 7066 strb r6, [r4, #1] -1000eb22: 70a6 strb r6, [r4, #2] -1000eb24: 70e6 strb r6, [r4, #3] -1000eb26: 4620 mov r0, r4 -1000eb28: f000 f9a1 bl 1000ee6e -1000eb2c: f240 4294 movw r2, #1172 ; 0x494 -1000eb30: 686b ldr r3, [r5, #4] -1000eb32: 8060 strh r0, [r4, #2] -1000eb34: f8ad 201c strh.w r2, [sp, #28] -1000eb38: 2204 movs r2, #4 -1000eb3a: 9302 str r3, [sp, #8] -1000eb3c: 2302 movs r3, #2 -1000eb3e: 9204 str r2, [sp, #16] -1000eb40: aa07 add r2, sp, #28 -1000eb42: 9203 str r2, [sp, #12] -1000eb44: 9301 str r3, [sp, #4] -1000eb46: 9600 str r6, [sp, #0] -1000eb48: 2301 movs r3, #1 -1000eb4a: 4642 mov r2, r8 -1000eb4c: a906 add r1, sp, #24 -1000eb4e: 4638 mov r0, r7 -1000eb50: f8ad 601e strh.w r6, [sp, #30] -1000eb54: f000 fab2 bl 1000f0bc -1000eb58: 4638 mov r0, r7 -1000eb5a: f002 fa8e bl 1001107a -1000eb5e: b008 add sp, #32 -1000eb60: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000eb64: 2e17 cmp r6, #23 -1000eb66: bf03 ittte eq -1000eb68: 68ab ldreq r3, [r5, #8] -1000eb6a: f8df 8010 ldreq.w r8, [pc, #16] ; 1000eb7c -1000eb6e: 6063 streq r3, [r4, #4] -1000eb70: f04f 0800 movne.w r8, #0 -1000eb74: e7cd b.n 1000eb12 -1000eb76: bf00 nop -1000eb78: 10040070 .word 0x10040070 -1000eb7c: 1004aa20 .word 0x1004aa20 - -1000eb80 : -1000eb80: b538 push {r3, r4, r5, lr} -1000eb82: 7b43 ldrb r3, [r0, #13] -1000eb84: 4605 mov r5, r0 -1000eb86: 2b02 cmp r3, #2 -1000eb88: 460c mov r4, r1 -1000eb8a: d005 beq.n 1000eb98 -1000eb8c: 2b01 cmp r3, #1 -1000eb8e: d111 bne.n 1000ebb4 -1000eb90: 89c3 ldrh r3, [r0, #14] -1000eb92: b10b cbz r3, 1000eb98 -1000eb94: 428b cmp r3, r1 -1000eb96: d90d bls.n 1000ebb4 -1000eb98: 2c00 cmp r4, #0 -1000eb9a: bf08 it eq -1000eb9c: 2401 moveq r4, #1 -1000eb9e: 4b06 ldr r3, [pc, #24] ; (1000ebb8 ) -1000eba0: 4798 blx r3 -1000eba2: 3c01 subs r4, #1 -1000eba4: fbb0 f1f4 udiv r1, r0, r4 -1000eba8: 2301 movs r3, #1 -1000ebaa: fb01 0414 mls r4, r1, r4, r0 -1000ebae: 3401 adds r4, #1 -1000ebb0: 81ec strh r4, [r5, #14] -1000ebb2: 736b strb r3, [r5, #13] -1000ebb4: bd38 pop {r3, r4, r5, pc} -1000ebb6: bf00 nop -1000ebb8: 0000f585 .word 0x0000f585 - -1000ebbc : -1000ebbc: b538 push {r3, r4, r5, lr} -1000ebbe: 4b0b ldr r3, [pc, #44] ; (1000ebec ) -1000ebc0: 4605 mov r5, r0 -1000ebc2: 8ad8 ldrh r0, [r3, #22] -1000ebc4: 460c mov r4, r1 -1000ebc6: f006 fab1 bl 1001512c -1000ebca: b160 cbz r0, 1000ebe6 -1000ebcc: 6045 str r5, [r0, #4] -1000ebce: 2300 movs r3, #0 -1000ebd0: b154 cbz r4, 1000ebe8 -1000ebd2: 6822 ldr r2, [r4, #0] -1000ebd4: 81c3 strh r3, [r0, #14] -1000ebd6: 7343 strb r3, [r0, #13] -1000ebd8: 7303 strb r3, [r0, #12] -1000ebda: 7403 strb r3, [r0, #16] -1000ebdc: 4b04 ldr r3, [pc, #16] ; (1000ebf0 ) -1000ebde: 6082 str r2, [r0, #8] -1000ebe0: 681a ldr r2, [r3, #0] -1000ebe2: 6018 str r0, [r3, #0] -1000ebe4: 6002 str r2, [r0, #0] -1000ebe6: bd38 pop {r3, r4, r5, pc} -1000ebe8: 461a mov r2, r3 -1000ebea: e7f3 b.n 1000ebd4 -1000ebec: 10040088 .word 0x10040088 -1000ebf0: 1004aa28 .word 0x1004aa28 - -1000ebf4 : -1000ebf4: 4a03 ldr r2, [pc, #12] ; (1000ec04 ) -1000ebf6: 4b04 ldr r3, [pc, #16] ; (1000ec08 ) -1000ebf8: 601a str r2, [r3, #0] -1000ebfa: 4b04 ldr r3, [pc, #16] ; (1000ec0c ) -1000ebfc: f102 7280 add.w r2, r2, #16777216 ; 0x1000000 -1000ec00: 601a str r2, [r3, #0] -1000ec02: 4770 bx lr -1000ec04: 010000e0 .word 0x010000e0 -1000ec08: 1004aa24 .word 0x1004aa24 -1000ec0c: 1004aa20 .word 0x1004aa20 - -1000ec10 : -1000ec10: b538 push {r3, r4, r5, lr} -1000ec12: 4605 mov r5, r0 -1000ec14: 4b06 ldr r3, [pc, #24] ; (1000ec30 ) -1000ec16: 681c ldr r4, [r3, #0] -1000ec18: b904 cbnz r4, 1000ec1c -1000ec1a: bd38 pop {r3, r4, r5, pc} -1000ec1c: 6863 ldr r3, [r4, #4] -1000ec1e: 42ab cmp r3, r5 -1000ec20: d103 bne.n 1000ec2a -1000ec22: 2105 movs r1, #5 -1000ec24: 4620 mov r0, r4 -1000ec26: f7ff ffab bl 1000eb80 -1000ec2a: 6824 ldr r4, [r4, #0] -1000ec2c: e7f4 b.n 1000ec18 -1000ec2e: bf00 nop -1000ec30: 1004aa28 .word 0x1004aa28 - -1000ec34 : -1000ec34: b510 push {r4, lr} -1000ec36: 4b06 ldr r3, [pc, #24] ; (1000ec50 ) -1000ec38: 681b ldr r3, [r3, #0] -1000ec3a: b133 cbz r3, 1000ec4a -1000ec3c: 685a ldr r2, [r3, #4] -1000ec3e: 4282 cmp r2, r0 -1000ec40: d1fa bne.n 1000ec38 -1000ec42: 689c ldr r4, [r3, #8] -1000ec44: 680a ldr r2, [r1, #0] -1000ec46: 4294 cmp r4, r2 -1000ec48: d1f6 bne.n 1000ec38 -1000ec4a: 4618 mov r0, r3 -1000ec4c: bd10 pop {r4, pc} -1000ec4e: bf00 nop -1000ec50: 1004aa28 .word 0x1004aa28 - -1000ec54 : -1000ec54: b510 push {r4, lr} -1000ec56: 490d ldr r1, [pc, #52] ; (1000ec8c ) -1000ec58: 4604 mov r4, r0 -1000ec5a: f7ff ffeb bl 1000ec34 -1000ec5e: b920 cbnz r0, 1000ec6a -1000ec60: 490a ldr r1, [pc, #40] ; (1000ec8c ) -1000ec62: 4620 mov r0, r4 -1000ec64: f7ff ffaa bl 1000ebbc -1000ec68: b160 cbz r0, 1000ec84 -1000ec6a: 2302 movs r3, #2 -1000ec6c: 7343 strb r3, [r0, #13] -1000ec6e: 7c03 ldrb r3, [r0, #16] -1000ec70: 3301 adds r3, #1 -1000ec72: 7403 strb r3, [r0, #16] -1000ec74: 6ba3 ldr r3, [r4, #56] ; 0x38 -1000ec76: b11b cbz r3, 1000ec80 -1000ec78: 2201 movs r2, #1 -1000ec7a: 4904 ldr r1, [pc, #16] ; (1000ec8c ) -1000ec7c: 4620 mov r0, r4 -1000ec7e: 4798 blx r3 -1000ec80: 2000 movs r0, #0 -1000ec82: bd10 pop {r4, pc} -1000ec84: f04f 30ff mov.w r0, #4294967295 -1000ec88: bd10 pop {r4, pc} -1000ec8a: bf00 nop -1000ec8c: 1004aa24 .word 0x1004aa24 - -1000ec90 : -1000ec90: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -1000ec94: 6843 ldr r3, [r0, #4] -1000ec96: 460f mov r7, r1 -1000ec98: 7819 ldrb r1, [r3, #0] -1000ec9a: 4606 mov r6, r0 -1000ec9c: f001 010f and.w r1, r1, #15 -1000eca0: 0089 lsls r1, r1, #2 -1000eca2: 4249 negs r1, r1 -1000eca4: 4615 mov r5, r2 -1000eca6: f002 f9bd bl 10011024 -1000ecaa: b910 cbnz r0, 1000ecb2 -1000ecac: 8971 ldrh r1, [r6, #10] -1000ecae: 2907 cmp r1, #7 -1000ecb0: d805 bhi.n 1000ecbe -1000ecb2: 4630 mov r0, r6 -1000ecb4: f002 f9e1 bl 1001107a -1000ecb8: b002 add sp, #8 -1000ecba: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000ecbe: 6874 ldr r4, [r6, #4] -1000ecc0: 4620 mov r0, r4 -1000ecc2: f000 f8d4 bl 1000ee6e -1000ecc6: 4680 mov r8, r0 -1000ecc8: 2800 cmp r0, #0 -1000ecca: d1f2 bne.n 1000ecb2 -1000eccc: 4629 mov r1, r5 -1000ecce: 4638 mov r0, r7 -1000ecd0: f7ff ffb0 bl 1000ec34 -1000ecd4: 2800 cmp r0, #0 -1000ecd6: d0ec beq.n 1000ecb2 -1000ecd8: 7823 ldrb r3, [r4, #0] -1000ecda: 2b11 cmp r3, #17 -1000ecdc: d00b beq.n 1000ecf6 -1000ecde: 2b16 cmp r3, #22 -1000ece0: d1e7 bne.n 1000ecb2 -1000ece2: 7b43 ldrb r3, [r0, #13] -1000ece4: 2b01 cmp r3, #1 -1000ece6: bf01 itttt eq -1000ece8: 2302 moveq r3, #2 -1000ecea: f8a0 800e strheq.w r8, [r0, #14] -1000ecee: 7343 strbeq r3, [r0, #13] -1000ecf0: f880 800c strbeq.w r8, [r0, #12] -1000ecf4: e7dd b.n 1000ecb2 -1000ecf6: 4b17 ldr r3, [pc, #92] ; (1000ed54 ) -1000ecf8: 6829 ldr r1, [r5, #0] -1000ecfa: 681a ldr r2, [r3, #0] -1000ecfc: 4698 mov r8, r3 -1000ecfe: 4291 cmp r1, r2 -1000ed00: 6863 ldr r3, [r4, #4] -1000ed02: d116 bne.n 1000ed32 -1000ed04: b9ab cbnz r3, 1000ed32 -1000ed06: 7863 ldrb r3, [r4, #1] -1000ed08: b90b cbnz r3, 1000ed0e -1000ed0a: 230a movs r3, #10 -1000ed0c: 7063 strb r3, [r4, #1] -1000ed0e: 4b12 ldr r3, [pc, #72] ; (1000ed58 ) -1000ed10: 681d ldr r5, [r3, #0] -1000ed12: 2d00 cmp r5, #0 -1000ed14: d0cd beq.n 1000ecb2 -1000ed16: 686b ldr r3, [r5, #4] -1000ed18: 429f cmp r7, r3 -1000ed1a: d108 bne.n 1000ed2e -1000ed1c: 68aa ldr r2, [r5, #8] -1000ed1e: f8d8 3000 ldr.w r3, [r8] -1000ed22: 429a cmp r2, r3 -1000ed24: d003 beq.n 1000ed2e -1000ed26: 7861 ldrb r1, [r4, #1] -1000ed28: 4628 mov r0, r5 -1000ed2a: f7ff ff29 bl 1000eb80 -1000ed2e: 682d ldr r5, [r5, #0] -1000ed30: e7ef b.n 1000ed12 -1000ed32: 2b00 cmp r3, #0 -1000ed34: d0bd beq.n 1000ecb2 -1000ed36: 4291 cmp r1, r2 -1000ed38: d107 bne.n 1000ed4a -1000ed3a: a902 add r1, sp, #8 -1000ed3c: f841 3d04 str.w r3, [r1, #-4]! -1000ed40: 4638 mov r0, r7 -1000ed42: f7ff ff77 bl 1000ec34 -1000ed46: 2800 cmp r0, #0 -1000ed48: d0b3 beq.n 1000ecb2 -1000ed4a: 7861 ldrb r1, [r4, #1] -1000ed4c: f7ff ff18 bl 1000eb80 -1000ed50: e7af b.n 1000ecb2 -1000ed52: bf00 nop -1000ed54: 1004aa24 .word 0x1004aa24 -1000ed58: 1004aa28 .word 0x1004aa28 - -1000ed5c : -1000ed5c: 4b09 ldr r3, [pc, #36] ; (1000ed84 ) -1000ed5e: b510 push {r4, lr} -1000ed60: 681c ldr r4, [r3, #0] -1000ed62: b904 cbnz r4, 1000ed66 -1000ed64: bd10 pop {r4, pc} -1000ed66: 89e3 ldrh r3, [r4, #14] -1000ed68: b153 cbz r3, 1000ed80 -1000ed6a: 3b01 subs r3, #1 -1000ed6c: b29b uxth r3, r3 -1000ed6e: 81e3 strh r3, [r4, #14] -1000ed70: b933 cbnz r3, 1000ed80 -1000ed72: 7b63 ldrb r3, [r4, #13] -1000ed74: 2b01 cmp r3, #1 -1000ed76: d103 bne.n 1000ed80 -1000ed78: 2116 movs r1, #22 -1000ed7a: 4620 mov r0, r4 -1000ed7c: f7ff feae bl 1000eadc -1000ed80: 6824 ldr r4, [r4, #0] -1000ed82: e7ee b.n 1000ed62 -1000ed84: 1004aa28 .word 0x1004aa28 - -1000ed88 : -1000ed88: 2300 movs r3, #0 -1000ed8a: b513 push {r0, r1, r4, lr} -1000ed8c: f010 0201 ands.w r2, r0, #1 -1000ed90: f8ad 3006 strh.w r3, [sp, #6] -1000ed94: d01f beq.n 1000edd6 -1000ed96: 4299 cmp r1, r3 -1000ed98: dd24 ble.n 1000ede4 -1000ed9a: 1c43 adds r3, r0, #1 -1000ed9c: 7800 ldrb r0, [r0, #0] -1000ed9e: 3901 subs r1, #1 -1000eda0: f88d 0007 strb.w r0, [sp, #7] -1000eda4: 2000 movs r0, #0 -1000eda6: 2901 cmp r1, #1 -1000eda8: dc17 bgt.n 1000edda -1000edaa: d102 bne.n 1000edb2 -1000edac: 781b ldrb r3, [r3, #0] -1000edae: f88d 3006 strb.w r3, [sp, #6] -1000edb2: f8bd 3006 ldrh.w r3, [sp, #6] -1000edb6: 4403 add r3, r0 -1000edb8: b298 uxth r0, r3 -1000edba: eb00 4313 add.w r3, r0, r3, lsr #16 -1000edbe: b298 uxth r0, r3 -1000edc0: eb00 4013 add.w r0, r0, r3, lsr #16 -1000edc4: b122 cbz r2, 1000edd0 -1000edc6: 0203 lsls r3, r0, #8 -1000edc8: b29b uxth r3, r3 -1000edca: f3c0 2007 ubfx r0, r0, #8, #8 -1000edce: 4318 orrs r0, r3 -1000edd0: b280 uxth r0, r0 -1000edd2: b002 add sp, #8 -1000edd4: bd10 pop {r4, pc} -1000edd6: 4603 mov r3, r0 -1000edd8: e7e4 b.n 1000eda4 -1000edda: f833 4b02 ldrh.w r4, [r3], #2 -1000edde: 3902 subs r1, #2 -1000ede0: 4420 add r0, r4 -1000ede2: e7e0 b.n 1000eda6 -1000ede4: 4618 mov r0, r3 -1000ede6: e7e4 b.n 1000edb2 - -1000ede8 : -1000ede8: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -1000edec: 2500 movs r5, #0 -1000edee: 4606 mov r6, r0 -1000edf0: 4688 mov r8, r1 -1000edf2: 4691 mov r9, r2 -1000edf4: 461f mov r7, r3 -1000edf6: 462c mov r4, r5 -1000edf8: bb26 cbnz r6, 1000ee44 -1000edfa: b125 cbz r5, 1000ee06 -1000edfc: 0221 lsls r1, r4, #8 -1000edfe: b289 uxth r1, r1 -1000ee00: f3c4 2407 ubfx r4, r4, #8, #8 -1000ee04: 430c orrs r4, r1 -1000ee06: f8d9 2000 ldr.w r2, [r9] -1000ee0a: f8d8 3000 ldr.w r3, [r8] -1000ee0e: b290 uxth r0, r2 -1000ee10: eb00 4012 add.w r0, r0, r2, lsr #16 -1000ee14: b29a uxth r2, r3 -1000ee16: 4410 add r0, r2 -1000ee18: eb00 4013 add.w r0, r0, r3, lsr #16 -1000ee1c: 4404 add r4, r0 -1000ee1e: 4638 mov r0, r7 -1000ee20: f000 fd6e bl 1000f900 -1000ee24: 4404 add r4, r0 -1000ee26: f8bd 0020 ldrh.w r0, [sp, #32] -1000ee2a: f000 fd69 bl 1000f900 -1000ee2e: 4420 add r0, r4 -1000ee30: b284 uxth r4, r0 -1000ee32: eb04 4410 add.w r4, r4, r0, lsr #16 -1000ee36: b2a0 uxth r0, r4 -1000ee38: eb00 4014 add.w r0, r0, r4, lsr #16 -1000ee3c: 43c0 mvns r0, r0 -1000ee3e: b280 uxth r0, r0 -1000ee40: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1000ee44: 8971 ldrh r1, [r6, #10] -1000ee46: 6870 ldr r0, [r6, #4] -1000ee48: f7ff ff9e bl 1000ed88 -1000ee4c: 8973 ldrh r3, [r6, #10] -1000ee4e: 4404 add r4, r0 -1000ee50: b2a0 uxth r0, r4 -1000ee52: 07db lsls r3, r3, #31 -1000ee54: eb00 4414 add.w r4, r0, r4, lsr #16 -1000ee58: d507 bpl.n 1000ee6a -1000ee5a: 0223 lsls r3, r4, #8 -1000ee5c: f1c5 0501 rsb r5, r5, #1 -1000ee60: b29b uxth r3, r3 -1000ee62: f3c4 2407 ubfx r4, r4, #8, #8 -1000ee66: b2ed uxtb r5, r5 -1000ee68: 431c orrs r4, r3 -1000ee6a: 6836 ldr r6, [r6, #0] -1000ee6c: e7c4 b.n 1000edf8 - -1000ee6e : -1000ee6e: b508 push {r3, lr} -1000ee70: f7ff ff8a bl 1000ed88 -1000ee74: 43c0 mvns r0, r0 -1000ee76: b280 uxth r0, r0 -1000ee78: bd08 pop {r3, pc} - -1000ee7a : -1000ee7a: b570 push {r4, r5, r6, lr} -1000ee7c: 2500 movs r5, #0 -1000ee7e: 4606 mov r6, r0 -1000ee80: 462c mov r4, r5 -1000ee82: b946 cbnz r6, 1000ee96 -1000ee84: b125 cbz r5, 1000ee90 -1000ee86: 0223 lsls r3, r4, #8 -1000ee88: b29b uxth r3, r3 -1000ee8a: f3c4 2407 ubfx r4, r4, #8, #8 -1000ee8e: 431c orrs r4, r3 -1000ee90: 43e0 mvns r0, r4 -1000ee92: b280 uxth r0, r0 -1000ee94: bd70 pop {r4, r5, r6, pc} -1000ee96: 8971 ldrh r1, [r6, #10] -1000ee98: 6870 ldr r0, [r6, #4] -1000ee9a: f7ff ff75 bl 1000ed88 -1000ee9e: 8973 ldrh r3, [r6, #10] -1000eea0: 4420 add r0, r4 -1000eea2: b284 uxth r4, r0 -1000eea4: 07db lsls r3, r3, #31 -1000eea6: eb04 4410 add.w r4, r4, r0, lsr #16 -1000eeaa: d507 bpl.n 1000eebc -1000eeac: 0223 lsls r3, r4, #8 -1000eeae: f1c5 0501 rsb r5, r5, #1 -1000eeb2: b29b uxth r3, r3 -1000eeb4: f3c4 2407 ubfx r4, r4, #8, #8 -1000eeb8: b2ed uxtb r5, r5 -1000eeba: 431c orrs r4, r3 -1000eebc: 6836 ldr r6, [r6, #0] -1000eebe: e7e0 b.n 1000ee82 - -1000eec0 : -1000eec0: 4b0c ldr r3, [pc, #48] ; (1000eef4 ) -1000eec2: 681b ldr r3, [r3, #0] -1000eec4: b94b cbnz r3, 1000eeda -1000eec6: 4a0c ldr r2, [pc, #48] ; (1000eef8 ) -1000eec8: 6812 ldr r2, [r2, #0] -1000eeca: b182 cbz r2, 1000eeee -1000eecc: f892 1031 ldrb.w r1, [r2, #49] ; 0x31 -1000eed0: f011 0f01 tst.w r1, #1 -1000eed4: bf18 it ne -1000eed6: 4613 movne r3, r2 -1000eed8: e009 b.n 1000eeee -1000eeda: f893 2031 ldrb.w r2, [r3, #49] ; 0x31 -1000eede: 07d2 lsls r2, r2, #31 -1000eee0: d5ef bpl.n 1000eec2 -1000eee2: 6859 ldr r1, [r3, #4] -1000eee4: 6802 ldr r2, [r0, #0] -1000eee6: 404a eors r2, r1 -1000eee8: 6899 ldr r1, [r3, #8] -1000eeea: 420a tst r2, r1 -1000eeec: d1e9 bne.n 1000eec2 -1000eeee: 4618 mov r0, r3 -1000eef0: 4770 bx lr -1000eef2: bf00 nop -1000eef4: 1004b0fc .word 0x1004b0fc -1000eef8: 1004b0f8 .word 0x1004b0f8 - -1000eefc : -1000eefc: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -1000ef00: 6847 ldr r7, [r0, #4] -1000ef02: 4604 mov r4, r0 -1000ef04: f897 8000 ldrb.w r8, [r7] -1000ef08: 460e mov r6, r1 -1000ef0a: ea4f 1318 mov.w r3, r8, lsr #4 -1000ef0e: 2b04 cmp r3, #4 -1000ef10: d006 beq.n 1000ef20 -1000ef12: 4620 mov r0, r4 -1000ef14: f002 f8b1 bl 1001107a -1000ef18: 2000 movs r0, #0 -1000ef1a: b003 add sp, #12 -1000ef1c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1000ef20: 8878 ldrh r0, [r7, #2] -1000ef22: f000 fcf0 bl 1000f906 -1000ef26: f008 080f and.w r8, r8, #15 -1000ef2a: 8963 ldrh r3, [r4, #10] -1000ef2c: ea4f 0888 mov.w r8, r8, lsl #2 -1000ef30: 4543 cmp r3, r8 -1000ef32: 4605 mov r5, r0 -1000ef34: d3ed bcc.n 1000ef12 -1000ef36: 8923 ldrh r3, [r4, #8] -1000ef38: 4283 cmp r3, r0 -1000ef3a: d3ea bcc.n 1000ef12 -1000ef3c: 4641 mov r1, r8 -1000ef3e: 4638 mov r0, r7 -1000ef40: f7ff ff95 bl 1000ee6e -1000ef44: 2800 cmp r0, #0 -1000ef46: d1e4 bne.n 1000ef12 -1000ef48: 4629 mov r1, r5 -1000ef4a: 4620 mov r0, r4 -1000ef4c: f002 f948 bl 100111e0 -1000ef50: 693b ldr r3, [r7, #16] -1000ef52: 4955 ldr r1, [pc, #340] ; (1000f0a8 ) -1000ef54: 4a55 ldr r2, [pc, #340] ; (1000f0ac ) -1000ef56: 600b str r3, [r1, #0] -1000ef58: 68f8 ldr r0, [r7, #12] -1000ef5a: f003 03f0 and.w r3, r3, #240 ; 0xf0 -1000ef5e: 2be0 cmp r3, #224 ; 0xe0 -1000ef60: 6010 str r0, [r2, #0] -1000ef62: 4689 mov r9, r1 -1000ef64: 4692 mov sl, r2 -1000ef66: d114 bne.n 1000ef92 -1000ef68: f996 3031 ldrsb.w r3, [r6, #49] ; 0x31 -1000ef6c: 2b00 cmp r3, #0 -1000ef6e: da05 bge.n 1000ef7c -1000ef70: 4630 mov r0, r6 -1000ef72: f7ff fe5f bl 1000ec34 -1000ef76: 2800 cmp r0, #0 -1000ef78: f040 8093 bne.w 1000f0a2 -1000ef7c: 7a7b ldrb r3, [r7, #9] -1000ef7e: 2b11 cmp r3, #17 -1000ef80: d105 bne.n 1000ef8e -1000ef82: 44b8 add r8, r7 -1000ef84: f8b8 3002 ldrh.w r3, [r8, #2] -1000ef88: f5b3 4f88 cmp.w r3, #17408 ; 0x4400 -1000ef8c: d066 beq.n 1000f05c -1000ef8e: 2500 movs r5, #0 -1000ef90: e01a b.n 1000efc8 -1000ef92: 4635 mov r5, r6 -1000ef94: f04f 0b01 mov.w fp, #1 -1000ef98: 4b45 ldr r3, [pc, #276] ; (1000f0b0 ) -1000ef9a: f895 2031 ldrb.w r2, [r5, #49] ; 0x31 -1000ef9e: 07d2 lsls r2, r2, #31 -1000efa0: d404 bmi.n 1000efac -1000efa2: f1bb 0f00 cmp.w fp, #0 -1000efa6: d150 bne.n 1000f04a -1000efa8: 682d ldr r5, [r5, #0] -1000efaa: e04f b.n 1000f04c -1000efac: 686a ldr r2, [r5, #4] -1000efae: 2a00 cmp r2, #0 -1000efb0: d0f7 beq.n 1000efa2 -1000efb2: f8d9 0000 ldr.w r0, [r9] -1000efb6: 9301 str r3, [sp, #4] -1000efb8: 4282 cmp r2, r0 -1000efba: d005 beq.n 1000efc8 -1000efbc: 4629 mov r1, r5 -1000efbe: f000 f950 bl 1000f262 -1000efc2: 9b01 ldr r3, [sp, #4] -1000efc4: 2800 cmp r0, #0 -1000efc6: d0ec beq.n 1000efa2 -1000efc8: f8da 0000 ldr.w r0, [sl] -1000efcc: b150 cbz r0, 1000efe4 -1000efce: 4631 mov r1, r6 -1000efd0: f000 f947 bl 1000f262 -1000efd4: 2800 cmp r0, #0 -1000efd6: d19c bne.n 1000ef12 -1000efd8: f8da 3000 ldr.w r3, [sl] -1000efdc: f003 03f0 and.w r3, r3, #240 ; 0xf0 -1000efe0: 2be0 cmp r3, #224 ; 0xe0 -1000efe2: d096 beq.n 1000ef12 -1000efe4: 2d00 cmp r5, #0 -1000efe6: d094 beq.n 1000ef12 -1000efe8: 88fb ldrh r3, [r7, #6] -1000efea: f023 03c0 bic.w r3, r3, #192 ; 0xc0 -1000efee: b133 cbz r3, 1000effe -1000eff0: 4620 mov r0, r4 -1000eff2: f000 fa7d bl 1000f4f0 -1000eff6: 4604 mov r4, r0 -1000eff8: 2800 cmp r0, #0 -1000effa: d08d beq.n 1000ef18 -1000effc: 6847 ldr r7, [r0, #4] -1000effe: f8df 80b8 ldr.w r8, [pc, #184] ; 1000f0b8 -1000f002: 4d2c ldr r5, [pc, #176] ; (1000f0b4 ) -1000f004: 4631 mov r1, r6 -1000f006: 4620 mov r0, r4 -1000f008: f8c8 6000 str.w r6, [r8] -1000f00c: 602f str r7, [r5, #0] -1000f00e: f002 f9bf bl 10011390 -1000f012: bb68 cbnz r0, 1000f070 -1000f014: 7a7b ldrb r3, [r7, #9] -1000f016: 2b02 cmp r3, #2 -1000f018: d03d beq.n 1000f096 -1000f01a: d821 bhi.n 1000f060 -1000f01c: 2b01 cmp r3, #1 -1000f01e: d035 beq.n 1000f08c -1000f020: 4631 mov r1, r6 -1000f022: f8d9 0000 ldr.w r0, [r9] -1000f026: f000 f91c bl 1000f262 -1000f02a: b950 cbnz r0, 1000f042 -1000f02c: f8d9 3000 ldr.w r3, [r9] -1000f030: f003 03f0 and.w r3, r3, #240 ; 0xf0 -1000f034: 2be0 cmp r3, #224 ; 0xe0 -1000f036: d004 beq.n 1000f042 -1000f038: 6067 str r7, [r4, #4] -1000f03a: 2102 movs r1, #2 -1000f03c: 4620 mov r0, r4 -1000f03e: f7ff fd43 bl 1000eac8 -1000f042: 4620 mov r0, r4 -1000f044: f002 f819 bl 1001107a -1000f048: e012 b.n 1000f070 -1000f04a: 681d ldr r5, [r3, #0] -1000f04c: 42b5 cmp r5, r6 -1000f04e: bf08 it eq -1000f050: 682d ldreq r5, [r5, #0] -1000f052: f04f 0b00 mov.w fp, #0 -1000f056: 2d00 cmp r5, #0 -1000f058: d19f bne.n 1000ef9a -1000f05a: e78f b.n 1000ef7c -1000f05c: 4635 mov r5, r6 -1000f05e: e7c1 b.n 1000efe4 -1000f060: 2b06 cmp r3, #6 -1000f062: d00e beq.n 1000f082 -1000f064: 2b11 cmp r3, #17 -1000f066: d1db bne.n 1000f020 -1000f068: 4631 mov r1, r6 -1000f06a: 4620 mov r0, r4 -1000f06c: f004 fd48 bl 10013b00 -1000f070: 2300 movs r3, #0 -1000f072: f8c8 3000 str.w r3, [r8] -1000f076: 602b str r3, [r5, #0] -1000f078: f8ca 3000 str.w r3, [sl] -1000f07c: f8c9 3000 str.w r3, [r9] -1000f080: e74a b.n 1000ef18 -1000f082: 4631 mov r1, r6 -1000f084: 4620 mov r0, r4 -1000f086: f003 fb91 bl 100127ac -1000f08a: e7f1 b.n 1000f070 -1000f08c: 4631 mov r1, r6 -1000f08e: 4620 mov r0, r4 -1000f090: f7ff fc86 bl 1000e9a0 -1000f094: e7ec b.n 1000f070 -1000f096: 4a04 ldr r2, [pc, #16] ; (1000f0a8 ) -1000f098: 4631 mov r1, r6 -1000f09a: 4620 mov r0, r4 -1000f09c: f7ff fdf8 bl 1000ec90 -1000f0a0: e7e6 b.n 1000f070 -1000f0a2: 4635 mov r5, r6 -1000f0a4: e790 b.n 1000efc8 -1000f0a6: bf00 nop -1000f0a8: 1004aa30 .word 0x1004aa30 -1000f0ac: 1004aa34 .word 0x1004aa34 -1000f0b0: 1004b0fc .word 0x1004b0fc -1000f0b4: 1004aa2c .word 0x1004aa2c -1000f0b8: 1004aa38 .word 0x1004aa38 - -1000f0bc : -1000f0bc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1000f0c0: b087 sub sp, #28 -1000f0c2: 4606 mov r6, r0 -1000f0c4: 9101 str r1, [sp, #4] -1000f0c6: 4699 mov r9, r3 -1000f0c8: f89d a040 ldrb.w sl, [sp, #64] ; 0x40 -1000f0cc: f89d b044 ldrb.w fp, [sp, #68] ; 0x44 -1000f0d0: f8dd 8048 ldr.w r8, [sp, #72] ; 0x48 -1000f0d4: f8bd 4050 ldrh.w r4, [sp, #80] ; 0x50 -1000f0d8: 4617 mov r7, r2 -1000f0da: 2a00 cmp r2, #0 -1000f0dc: f000 8085 beq.w 1000f1ea -1000f0e0: 2c00 cmp r4, #0 -1000f0e2: d07f beq.n 1000f1e4 -1000f0e4: 1ce5 adds r5, r4, #3 -1000f0e6: f025 0503 bic.w r5, r5, #3 -1000f0ea: b2ad uxth r5, r5 -1000f0ec: f105 0314 add.w r3, r5, #20 -1000f0f0: b29b uxth r3, r3 -1000f0f2: b229 sxth r1, r5 -1000f0f4: 9300 str r3, [sp, #0] -1000f0f6: f001 ff95 bl 10011024 -1000f0fa: b120 cbz r0, 1000f106 -1000f0fc: f06f 0001 mvn.w r0, #1 -1000f100: b007 add sp, #28 -1000f102: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1000f106: 9002 str r0, [sp, #8] -1000f108: 4622 mov r2, r4 -1000f10a: 9913 ldr r1, [sp, #76] ; 0x4c -1000f10c: 6870 ldr r0, [r6, #4] -1000f10e: f00b fd4f bl 1001abb0 -1000f112: 42ac cmp r4, r5 -1000f114: 9b02 ldr r3, [sp, #8] -1000f116: d205 bcs.n 1000f124 -1000f118: 6870 ldr r0, [r6, #4] -1000f11a: 1b2a subs r2, r5, r4 -1000f11c: 4619 mov r1, r3 -1000f11e: 4420 add r0, r4 -1000f120: f00b fd4a bl 1001abb8 -1000f124: 2300 movs r3, #0 -1000f126: 461c mov r4, r3 -1000f128: 086d lsrs r5, r5, #1 -1000f12a: 42ab cmp r3, r5 -1000f12c: db54 blt.n 1000f1d8 -1000f12e: 2114 movs r1, #20 -1000f130: 4630 mov r0, r6 -1000f132: f001 ff77 bl 10011024 -1000f136: 9003 str r0, [sp, #12] -1000f138: 2800 cmp r0, #0 -1000f13a: d1df bne.n 1000f0fc -1000f13c: 6875 ldr r5, [r6, #4] -1000f13e: 9b00 ldr r3, [sp, #0] -1000f140: f885 9008 strb.w r9, [r5, #8] -1000f144: f885 b009 strb.w fp, [r5, #9] -1000f148: 6839 ldr r1, [r7, #0] -1000f14a: ea49 290b orr.w r9, r9, fp, lsl #8 -1000f14e: b28a uxth r2, r1 -1000f150: eb02 4211 add.w r2, r2, r1, lsr #16 -1000f154: 4491 add r9, r2 -1000f156: 089a lsrs r2, r3, #2 -1000f158: f042 0240 orr.w r2, r2, #64 ; 0x40 -1000f15c: b2d2 uxtb r2, r2 -1000f15e: 702a strb r2, [r5, #0] -1000f160: f885 a001 strb.w sl, [r5, #1] -1000f164: ea42 220a orr.w r2, r2, sl, lsl #8 -1000f168: 6129 str r1, [r5, #16] -1000f16a: 8930 ldrh r0, [r6, #8] -1000f16c: 9202 str r2, [sp, #8] -1000f16e: f000 fbc7 bl 1000f900 -1000f172: 9b03 ldr r3, [sp, #12] -1000f174: 8068 strh r0, [r5, #2] -1000f176: 71ab strb r3, [r5, #6] -1000f178: 71eb strb r3, [r5, #7] -1000f17a: 4b22 ldr r3, [pc, #136] ; (1000f204 ) -1000f17c: 4683 mov fp, r0 -1000f17e: 8818 ldrh r0, [r3, #0] -1000f180: 9300 str r3, [sp, #0] -1000f182: f000 fbbd bl 1000f900 -1000f186: 9b00 ldr r3, [sp, #0] -1000f188: 80a8 strh r0, [r5, #4] -1000f18a: 8819 ldrh r1, [r3, #0] -1000f18c: 9a02 ldr r2, [sp, #8] -1000f18e: 3101 adds r1, #1 -1000f190: 8019 strh r1, [r3, #0] -1000f192: 9b01 ldr r3, [sp, #4] -1000f194: b10b cbz r3, 1000f19a -1000f196: 681b ldr r3, [r3, #0] -1000f198: b90b cbnz r3, 1000f19e -1000f19a: f8d8 3004 ldr.w r3, [r8, #4] -1000f19e: 60eb str r3, [r5, #12] -1000f1a0: 68e9 ldr r1, [r5, #12] -1000f1a2: b28b uxth r3, r1 -1000f1a4: 4499 add r9, r3 -1000f1a6: eb09 4911 add.w r9, r9, r1, lsr #16 -1000f1aa: 444c add r4, r9 -1000f1ac: 4414 add r4, r2 -1000f1ae: 445c add r4, fp -1000f1b0: 4420 add r0, r4 -1000f1b2: b283 uxth r3, r0 -1000f1b4: eb03 4010 add.w r0, r3, r0, lsr #16 -1000f1b8: eb00 4010 add.w r0, r0, r0, lsr #16 -1000f1bc: 43c0 mvns r0, r0 -1000f1be: 8168 strh r0, [r5, #10] -1000f1c0: f8b8 3028 ldrh.w r3, [r8, #40] ; 0x28 -1000f1c4: b1bb cbz r3, 1000f1f6 -1000f1c6: 8932 ldrh r2, [r6, #8] -1000f1c8: 429a cmp r2, r3 -1000f1ca: d914 bls.n 1000f1f6 -1000f1cc: 463a mov r2, r7 -1000f1ce: 4641 mov r1, r8 -1000f1d0: 4630 mov r0, r6 -1000f1d2: f000 fae3 bl 1000f79c -1000f1d6: e793 b.n 1000f100 -1000f1d8: 6872 ldr r2, [r6, #4] -1000f1da: f832 2013 ldrh.w r2, [r2, r3, lsl #1] -1000f1de: 3301 adds r3, #1 -1000f1e0: 4414 add r4, r2 -1000f1e2: e7a2 b.n 1000f12a -1000f1e4: 2314 movs r3, #20 -1000f1e6: 9300 str r3, [sp, #0] -1000f1e8: e7a1 b.n 1000f12e -1000f1ea: 6843 ldr r3, [r0, #4] -1000f1ec: af06 add r7, sp, #24 -1000f1ee: 691b ldr r3, [r3, #16] -1000f1f0: f847 3d04 str.w r3, [r7, #-4]! -1000f1f4: e7e4 b.n 1000f1c0 -1000f1f6: f8d8 3014 ldr.w r3, [r8, #20] -1000f1fa: 463a mov r2, r7 -1000f1fc: 4631 mov r1, r6 -1000f1fe: 4640 mov r0, r8 -1000f200: 4798 blx r3 -1000f202: e77d b.n 1000f100 -1000f204: 1004aa3c .word 0x1004aa3c - -1000f208 : -1000f208: b510 push {r4, lr} -1000f20a: 2400 movs r4, #0 -1000f20c: b086 sub sp, #24 -1000f20e: 9404 str r4, [sp, #16] -1000f210: 9403 str r4, [sp, #12] -1000f212: 9c0a ldr r4, [sp, #40] ; 0x28 -1000f214: 9402 str r4, [sp, #8] -1000f216: f89d 4024 ldrb.w r4, [sp, #36] ; 0x24 -1000f21a: 9401 str r4, [sp, #4] -1000f21c: f89d 4020 ldrb.w r4, [sp, #32] -1000f220: 9400 str r4, [sp, #0] -1000f222: f7ff ff4b bl 1000f0bc -1000f226: b006 add sp, #24 -1000f228: bd10 pop {r4, pc} - -1000f22a : -1000f22a: b5f0 push {r4, r5, r6, r7, lr} -1000f22c: 4605 mov r5, r0 -1000f22e: b085 sub sp, #20 -1000f230: 4610 mov r0, r2 -1000f232: 460e mov r6, r1 -1000f234: 4614 mov r4, r2 -1000f236: 461f mov r7, r3 -1000f238: f7ff fe42 bl 1000eec0 -1000f23c: b170 cbz r0, 1000f25c -1000f23e: f89d 302c ldrb.w r3, [sp, #44] ; 0x2c -1000f242: 9002 str r0, [sp, #8] -1000f244: 9301 str r3, [sp, #4] -1000f246: f89d 3028 ldrb.w r3, [sp, #40] ; 0x28 -1000f24a: 4622 mov r2, r4 -1000f24c: 9300 str r3, [sp, #0] -1000f24e: 4631 mov r1, r6 -1000f250: 463b mov r3, r7 -1000f252: 4628 mov r0, r5 -1000f254: f7ff ffd8 bl 1000f208 -1000f258: b005 add sp, #20 -1000f25a: bdf0 pop {r4, r5, r6, r7, pc} -1000f25c: f06f 0003 mvn.w r0, #3 -1000f260: e7fa b.n 1000f258 - -1000f262 : -1000f262: 1e43 subs r3, r0, #1 -1000f264: 3303 adds r3, #3 -1000f266: d811 bhi.n 1000f28c -1000f268: f891 3031 ldrb.w r3, [r1, #49] ; 0x31 -1000f26c: f013 0302 ands.w r3, r3, #2 -1000f270: d00e beq.n 1000f290 -1000f272: 684a ldr r2, [r1, #4] -1000f274: 4290 cmp r0, r2 -1000f276: d00b beq.n 1000f290 -1000f278: 688b ldr r3, [r1, #8] -1000f27a: 4042 eors r2, r0 -1000f27c: 421a tst r2, r3 -1000f27e: d107 bne.n 1000f290 -1000f280: 43db mvns r3, r3 -1000f282: 4383 bics r3, r0 -1000f284: bf0c ite eq -1000f286: 2001 moveq r0, #1 -1000f288: 2000 movne r0, #0 -1000f28a: 4770 bx lr -1000f28c: 2001 movs r0, #1 -1000f28e: 4770 bx lr -1000f290: 2000 movs r0, #0 -1000f292: 4770 bx lr - -1000f294 : -1000f294: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -1000f298: b085 sub sp, #20 -1000f29a: 460c mov r4, r1 -1000f29c: 466b mov r3, sp -1000f29e: 46ee mov lr, sp -1000f2a0: f990 2000 ldrsb.w r2, [r0] -1000f2a4: f10d 0c0c add.w ip, sp, #12 -1000f2a8: f1a2 0130 sub.w r1, r2, #48 ; 0x30 -1000f2ac: b2c9 uxtb r1, r1 -1000f2ae: 2909 cmp r1, #9 -1000f2b0: d874 bhi.n 1000f39c -1000f2b2: 2a30 cmp r2, #48 ; 0x30 -1000f2b4: d11c bne.n 1000f2f0 -1000f2b6: f990 2001 ldrsb.w r2, [r0, #1] -1000f2ba: f022 0120 bic.w r1, r2, #32 -1000f2be: 2958 cmp r1, #88 ; 0x58 -1000f2c0: bf13 iteet ne -1000f2c2: 2608 movne r6, #8 -1000f2c4: 2610 moveq r6, #16 -1000f2c6: f990 2002 ldrsbeq.w r2, [r0, #2] -1000f2ca: 3001 addne r0, #1 -1000f2cc: bf08 it eq -1000f2ce: 3002 addeq r0, #2 -1000f2d0: 1c45 adds r5, r0, #1 -1000f2d2: 2000 movs r0, #0 -1000f2d4: b2d1 uxtb r1, r2 -1000f2d6: f1a1 0730 sub.w r7, r1, #48 ; 0x30 -1000f2da: 2f09 cmp r7, #9 -1000f2dc: f105 39ff add.w r9, r5, #4294967295 -1000f2e0: d808 bhi.n 1000f2f4 -1000f2e2: fb00 2006 mla r0, r0, r6, r2 -1000f2e6: 3830 subs r0, #48 ; 0x30 -1000f2e8: f995 2000 ldrsb.w r2, [r5] -1000f2ec: 3501 adds r5, #1 -1000f2ee: e7f1 b.n 1000f2d4 -1000f2f0: 260a movs r6, #10 -1000f2f2: e7ed b.n 1000f2d0 -1000f2f4: 2e10 cmp r6, #16 -1000f2f6: d112 bne.n 1000f31e -1000f2f8: f021 0820 bic.w r8, r1, #32 -1000f2fc: f1a8 0841 sub.w r8, r8, #65 ; 0x41 -1000f300: f1a1 0761 sub.w r7, r1, #97 ; 0x61 -1000f304: f1b8 0f05 cmp.w r8, #5 -1000f308: b2ff uxtb r7, r7 -1000f30a: d808 bhi.n 1000f31e -1000f30c: 2f19 cmp r7, #25 -1000f30e: bf8c ite hi -1000f310: 2141 movhi r1, #65 ; 0x41 -1000f312: 2161 movls r1, #97 ; 0x61 -1000f314: 320a adds r2, #10 -1000f316: 1a52 subs r2, r2, r1 -1000f318: ea42 1000 orr.w r0, r2, r0, lsl #4 -1000f31c: e7e4 b.n 1000f2e8 -1000f31e: 2a2e cmp r2, #46 ; 0x2e -1000f320: d108 bne.n 1000f334 -1000f322: 4563 cmp r3, ip -1000f324: d03a beq.n 1000f39c -1000f326: f843 0b04 str.w r0, [r3], #4 -1000f32a: f999 2001 ldrsb.w r2, [r9, #1] -1000f32e: f109 0001 add.w r0, r9, #1 -1000f332: e7b9 b.n 1000f2a8 -1000f334: f032 0520 bics.w r5, r2, #32 -1000f338: d004 beq.n 1000f344 -1000f33a: 3909 subs r1, #9 -1000f33c: 2904 cmp r1, #4 -1000f33e: d901 bls.n 1000f344 -1000f340: 2a2c cmp r2, #44 ; 0x2c -1000f342: d12b bne.n 1000f39c -1000f344: eba3 030e sub.w r3, r3, lr -1000f348: 109b asrs r3, r3, #2 -1000f34a: 3301 adds r3, #1 -1000f34c: 2b04 cmp r3, #4 -1000f34e: d80a bhi.n 1000f366 -1000f350: e8df f003 tbb [pc, r3] -1000f354: 0f030925 .word 0x0f030925 -1000f358: 19 .byte 0x19 -1000f359: 00 .byte 0x00 -1000f35a: f1b0 7f80 cmp.w r0, #16777216 ; 0x1000000 -1000f35e: d21d bcs.n 1000f39c -1000f360: 9b00 ldr r3, [sp, #0] -1000f362: ea40 6003 orr.w r0, r0, r3, lsl #24 -1000f366: b114 cbz r4, 1000f36e -1000f368: f000 fad0 bl 1000f90c -1000f36c: 6020 str r0, [r4, #0] -1000f36e: 2301 movs r3, #1 -1000f370: e015 b.n 1000f39e -1000f372: f5b0 3f80 cmp.w r0, #65536 ; 0x10000 -1000f376: d211 bcs.n 1000f39c -1000f378: 9b01 ldr r3, [sp, #4] -1000f37a: 9a00 ldr r2, [sp, #0] -1000f37c: 041b lsls r3, r3, #16 -1000f37e: ea43 6302 orr.w r3, r3, r2, lsl #24 -1000f382: 4318 orrs r0, r3 -1000f384: e7ef b.n 1000f366 -1000f386: 28ff cmp r0, #255 ; 0xff -1000f388: d808 bhi.n 1000f39c -1000f38a: 9b01 ldr r3, [sp, #4] -1000f38c: 9a00 ldr r2, [sp, #0] -1000f38e: 041b lsls r3, r3, #16 -1000f390: ea43 6302 orr.w r3, r3, r2, lsl #24 -1000f394: 9a02 ldr r2, [sp, #8] -1000f396: ea43 2302 orr.w r3, r3, r2, lsl #8 -1000f39a: e7f2 b.n 1000f382 -1000f39c: 2300 movs r3, #0 -1000f39e: 4618 mov r0, r3 -1000f3a0: b005 add sp, #20 -1000f3a2: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - -1000f3a6 : -1000f3a6: b507 push {r0, r1, r2, lr} -1000f3a8: a901 add r1, sp, #4 -1000f3aa: f7ff ff73 bl 1000f294 -1000f3ae: b118 cbz r0, 1000f3b8 -1000f3b0: 9801 ldr r0, [sp, #4] -1000f3b2: b003 add sp, #12 -1000f3b4: f85d fb04 ldr.w pc, [sp], #4 -1000f3b8: f04f 30ff mov.w r0, #4294967295 -1000f3bc: e7f9 b.n 1000f3b2 - -1000f3be : -1000f3be: b510 push {r4, lr} -1000f3c0: 4604 mov r4, r0 -1000f3c2: 6940 ldr r0, [r0, #20] -1000f3c4: b108 cbz r0, 1000f3ca -1000f3c6: f001 fe58 bl 1001107a -1000f3ca: 4620 mov r0, r4 -1000f3cc: e8bd 4010 ldmia.w sp!, {r4, lr} -1000f3d0: f005 bf48 b.w 10015264 - -1000f3d4 : -1000f3d4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1000f3d8: 6846 ldr r6, [r0, #4] -1000f3da: 4605 mov r5, r0 -1000f3dc: 6870 ldr r0, [r6, #4] -1000f3de: 460f mov r7, r1 -1000f3e0: 8883 ldrh r3, [r0, #4] -1000f3e2: bb23 cbnz r3, 1000f42e -1000f3e4: 6803 ldr r3, [r0, #0] -1000f3e6: 2214 movs r2, #20 -1000f3e8: 606b str r3, [r5, #4] -1000f3ea: f105 0108 add.w r1, r5, #8 -1000f3ee: f00b fbdf bl 1001abb0 -1000f3f2: 2101 movs r1, #1 -1000f3f4: 4630 mov r0, r6 -1000f3f6: f7ff fb6c bl 1000ead2 -1000f3fa: 4630 mov r0, r6 -1000f3fc: f001 ff09 bl 10011212 -1000f400: b284 uxth r4, r0 -1000f402: 4630 mov r0, r6 -1000f404: f001 fe39 bl 1001107a -1000f408: 686e ldr r6, [r5, #4] -1000f40a: b996 cbnz r6, 1000f432 -1000f40c: 4a0f ldr r2, [pc, #60] ; (1000f44c ) -1000f40e: 4628 mov r0, r5 -1000f410: 6813 ldr r3, [r2, #0] -1000f412: 429d cmp r5, r3 -1000f414: 682b ldr r3, [r5, #0] -1000f416: bf14 ite ne -1000f418: 603b strne r3, [r7, #0] -1000f41a: 6013 streq r3, [r2, #0] -1000f41c: f005 ff22 bl 10015264 -1000f420: 4a0b ldr r2, [pc, #44] ; (1000f450 ) -1000f422: 4620 mov r0, r4 -1000f424: 8813 ldrh r3, [r2, #0] -1000f426: 1b1b subs r3, r3, r4 -1000f428: 8013 strh r3, [r2, #0] -1000f42a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000f42e: 2400 movs r4, #0 -1000f430: e7ea b.n 1000f408 -1000f432: 6873 ldr r3, [r6, #4] -1000f434: 4630 mov r0, r6 -1000f436: f8d3 8000 ldr.w r8, [r3] -1000f43a: f001 feea bl 10011212 -1000f43e: 4404 add r4, r0 -1000f440: 4630 mov r0, r6 -1000f442: b2a4 uxth r4, r4 -1000f444: f001 fe19 bl 1001107a -1000f448: 4646 mov r6, r8 -1000f44a: e7de b.n 1000f40a -1000f44c: 1004aa40 .word 0x1004aa40 -1000f450: 1004aa3e .word 0x1004aa3e - -1000f454 : -1000f454: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1000f458: 4606 mov r6, r0 -1000f45a: 460f mov r7, r1 -1000f45c: 2500 movs r5, #0 -1000f45e: f8df 8064 ldr.w r8, [pc, #100] ; 1000f4c4 -1000f462: 2400 movs r4, #0 -1000f464: 4621 mov r1, r4 -1000f466: 4620 mov r0, r4 -1000f468: f8d8 3000 ldr.w r3, [r8] -1000f46c: b953 cbnz r3, 1000f484 -1000f46e: b110 cbz r0, 1000f476 -1000f470: f7ff ffb0 bl 1000f3d4 -1000f474: 4405 add r5, r0 -1000f476: 42bd cmp r5, r7 -1000f478: da01 bge.n 1000f47e -1000f47a: 2c01 cmp r4, #1 -1000f47c: dcf1 bgt.n 1000f462 -1000f47e: 4628 mov r0, r5 -1000f480: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000f484: f8d6 e00c ldr.w lr, [r6, #12] -1000f488: 695a ldr r2, [r3, #20] -1000f48a: 4572 cmp r2, lr -1000f48c: d109 bne.n 1000f4a2 -1000f48e: f8d6 e010 ldr.w lr, [r6, #16] -1000f492: 699a ldr r2, [r3, #24] -1000f494: 4572 cmp r2, lr -1000f496: d104 bne.n 1000f4a2 -1000f498: f8b3 e00c ldrh.w lr, [r3, #12] -1000f49c: 88b2 ldrh r2, [r6, #4] -1000f49e: 4596 cmp lr, r2 -1000f4a0: d007 beq.n 1000f4b2 -1000f4a2: 3401 adds r4, #1 -1000f4a4: b158 cbz r0, 1000f4be -1000f4a6: f893 e01f ldrb.w lr, [r3, #31] -1000f4aa: 7fc2 ldrb r2, [r0, #31] -1000f4ac: 4596 cmp lr, r2 -1000f4ae: bf98 it ls -1000f4b0: 4618 movls r0, r3 -1000f4b2: 681a ldr r2, [r3, #0] -1000f4b4: 2a00 cmp r2, #0 -1000f4b6: bf18 it ne -1000f4b8: 4619 movne r1, r3 -1000f4ba: 4613 mov r3, r2 -1000f4bc: e7d6 b.n 1000f46c -1000f4be: 4618 mov r0, r3 -1000f4c0: e7f7 b.n 1000f4b2 -1000f4c2: bf00 nop -1000f4c4: 1004aa40 .word 0x1004aa40 - -1000f4c8 : -1000f4c8: b538 push {r3, r4, r5, lr} -1000f4ca: 2400 movs r4, #0 -1000f4cc: 4b07 ldr r3, [pc, #28] ; (1000f4ec ) -1000f4ce: 6818 ldr r0, [r3, #0] -1000f4d0: b900 cbnz r0, 1000f4d4 -1000f4d2: bd38 pop {r3, r4, r5, pc} -1000f4d4: 7fc3 ldrb r3, [r0, #31] -1000f4d6: 6805 ldr r5, [r0, #0] -1000f4d8: b123 cbz r3, 1000f4e4 -1000f4da: 4604 mov r4, r0 -1000f4dc: 3b01 subs r3, #1 -1000f4de: 77c3 strb r3, [r0, #31] -1000f4e0: 4628 mov r0, r5 -1000f4e2: e7f5 b.n 1000f4d0 -1000f4e4: 4621 mov r1, r4 -1000f4e6: f7ff ff75 bl 1000f3d4 -1000f4ea: e7f9 b.n 1000f4e0 -1000f4ec: 1004aa40 .word 0x1004aa40 - -1000f4f0 : -1000f4f0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1000f4f4: 6844 ldr r4, [r0, #4] -1000f4f6: b085 sub sp, #20 -1000f4f8: 7823 ldrb r3, [r4, #0] -1000f4fa: 4605 mov r5, r0 -1000f4fc: f003 030f and.w r3, r3, #15 -1000f500: 2b05 cmp r3, #5 -1000f502: d14a bne.n 1000f59a -1000f504: 88e0 ldrh r0, [r4, #6] -1000f506: f000 f9fe bl 1000f906 -1000f50a: 9002 str r0, [sp, #8] -1000f50c: 8860 ldrh r0, [r4, #2] -1000f50e: f000 f9fa bl 1000f906 -1000f512: 7823 ldrb r3, [r4, #0] -1000f514: 4683 mov fp, r0 -1000f516: 4628 mov r0, r5 -1000f518: 9303 str r3, [sp, #12] -1000f51a: f001 fe7a bl 10011212 -1000f51e: 4e9c ldr r6, [pc, #624] ; (1000f790 ) -1000f520: 4680 mov r8, r0 -1000f522: 8833 ldrh r3, [r6, #0] -1000f524: 4403 add r3, r0 -1000f526: 2b1e cmp r3, #30 -1000f528: dc2e bgt.n 1000f588 -1000f52a: 2300 movs r3, #0 -1000f52c: 4f99 ldr r7, [pc, #612] ; (1000f794 ) -1000f52e: 9301 str r3, [sp, #4] -1000f530: f8d7 9000 ldr.w r9, [r7] -1000f534: f1b9 0f00 cmp.w r9, #0 -1000f538: d134 bne.n 1000f5a4 -1000f53a: 4b97 ldr r3, [pc, #604] ; (1000f798 ) -1000f53c: f8b3 a00a ldrh.w sl, [r3, #10] -1000f540: 4650 mov r0, sl -1000f542: f005 fdf3 bl 1001512c -1000f546: 4681 mov r9, r0 -1000f548: b950 cbnz r0, 1000f560 -1000f54a: 4641 mov r1, r8 -1000f54c: 4620 mov r0, r4 -1000f54e: f7ff ff81 bl 1000f454 -1000f552: 4580 cmp r8, r0 -1000f554: dc21 bgt.n 1000f59a -1000f556: 4650 mov r0, sl -1000f558: f005 fde8 bl 1001512c -1000f55c: 4681 mov r9, r0 -1000f55e: b1e0 cbz r0, 1000f59a -1000f560: 2220 movs r2, #32 -1000f562: 2100 movs r1, #0 -1000f564: 4648 mov r0, r9 -1000f566: f00b fb27 bl 1001abb8 -1000f56a: 2203 movs r2, #3 -1000f56c: f889 201f strb.w r2, [r9, #31] -1000f570: 683a ldr r2, [r7, #0] -1000f572: f8c7 9000 str.w r9, [r7] -1000f576: f8c9 2000 str.w r2, [r9] -1000f57a: 2214 movs r2, #20 -1000f57c: 4621 mov r1, r4 -1000f57e: f109 0008 add.w r0, r9, #8 -1000f582: f00b fb15 bl 1001abb0 -1000f586: e0c1 b.n 1000f70c -1000f588: 4601 mov r1, r0 -1000f58a: 4620 mov r0, r4 -1000f58c: f7ff ff62 bl 1000f454 -1000f590: b118 cbz r0, 1000f59a -1000f592: 8833 ldrh r3, [r6, #0] -1000f594: 4443 add r3, r8 -1000f596: 2b1e cmp r3, #30 -1000f598: ddc7 ble.n 1000f52a -1000f59a: 4628 mov r0, r5 -1000f59c: f001 fd6d bl 1001107a -1000f5a0: 2500 movs r5, #0 -1000f5a2: e06c b.n 1000f67e -1000f5a4: 68e2 ldr r2, [r4, #12] -1000f5a6: f8d9 1014 ldr.w r1, [r9, #20] -1000f5aa: 4291 cmp r1, r2 -1000f5ac: d10a bne.n 1000f5c4 -1000f5ae: 6922 ldr r2, [r4, #16] -1000f5b0: f8d9 1018 ldr.w r1, [r9, #24] -1000f5b4: 4291 cmp r1, r2 -1000f5b6: d105 bne.n 1000f5c4 -1000f5b8: f8b9 100c ldrh.w r1, [r9, #12] -1000f5bc: 88a2 ldrh r2, [r4, #4] -1000f5be: 4291 cmp r1, r2 -1000f5c0: f000 8095 beq.w 1000f6ee -1000f5c4: f8cd 9004 str.w r9, [sp, #4] -1000f5c8: f8d9 9000 ldr.w r9, [r9] -1000f5cc: e7b2 b.n 1000f534 -1000f5ce: f8dc 8004 ldr.w r8, [ip, #4] -1000f5d2: f8b8 a004 ldrh.w sl, [r8, #4] -1000f5d6: 4550 cmp r0, sl -1000f5d8: d255 bcs.n 1000f686 -1000f5da: f8c1 c000 str.w ip, [r1] -1000f5de: 2a00 cmp r2, #0 -1000f5e0: f000 80d2 beq.w 1000f788 -1000f5e4: f8b2 c006 ldrh.w ip, [r2, #6] -1000f5e8: 4584 cmp ip, r0 -1000f5ea: d86b bhi.n 1000f6c4 -1000f5ec: 4554 cmp r4, sl -1000f5ee: d869 bhi.n 1000f6c4 -1000f5f0: 6015 str r5, [r2, #0] -1000f5f2: f899 201e ldrb.w r2, [r9, #30] -1000f5f6: f012 0501 ands.w r5, r2, #1 -1000f5fa: d040 beq.n 1000f67e -1000f5fc: 2b00 cmp r3, #0 -1000f5fe: d0cf beq.n 1000f5a0 -1000f600: f8d9 2004 ldr.w r2, [r9, #4] -1000f604: 6855 ldr r5, [r2, #4] -1000f606: 88aa ldrh r2, [r5, #4] -1000f608: 2a00 cmp r2, #0 -1000f60a: d1c9 bne.n 1000f5a0 -1000f60c: f8d1 8000 ldr.w r8, [r1] -1000f610: f1b8 0f00 cmp.w r8, #0 -1000f614: d14b bne.n 1000f6ae -1000f616: f8b9 201c ldrh.w r2, [r9, #28] -1000f61a: f109 0108 add.w r1, r9, #8 -1000f61e: 3214 adds r2, #20 -1000f620: f8a9 201c strh.w r2, [r9, #28] -1000f624: 4628 mov r0, r5 -1000f626: 2214 movs r2, #20 -1000f628: 682c ldr r4, [r5, #0] -1000f62a: f00b fac1 bl 1001abb0 -1000f62e: f8b9 001c ldrh.w r0, [r9, #28] -1000f632: f000 f965 bl 1000f900 -1000f636: f885 8006 strb.w r8, [r5, #6] -1000f63a: 8068 strh r0, [r5, #2] -1000f63c: f885 8007 strb.w r8, [r5, #7] -1000f640: f885 800a strb.w r8, [r5, #10] -1000f644: f885 800b strb.w r8, [r5, #11] -1000f648: 4628 mov r0, r5 -1000f64a: 2114 movs r1, #20 -1000f64c: f7ff fc0f bl 1000ee6e -1000f650: 8168 strh r0, [r5, #10] -1000f652: f8d9 5004 ldr.w r5, [r9, #4] -1000f656: 2c00 cmp r4, #0 -1000f658: d13b bne.n 1000f6d2 -1000f65a: 683a ldr r2, [r7, #0] -1000f65c: 4648 mov r0, r9 -1000f65e: 4591 cmp r9, r2 -1000f660: bf18 it ne -1000f662: 9b01 ldrne r3, [sp, #4] -1000f664: f8d9 2000 ldr.w r2, [r9] -1000f668: bf14 ite ne -1000f66a: 601a strne r2, [r3, #0] -1000f66c: 603a streq r2, [r7, #0] -1000f66e: f005 fdf9 bl 10015264 -1000f672: 4628 mov r0, r5 -1000f674: f001 fdcd bl 10011212 -1000f678: 8833 ldrh r3, [r6, #0] -1000f67a: 1a18 subs r0, r3, r0 -1000f67c: 8030 strh r0, [r6, #0] -1000f67e: 4628 mov r0, r5 -1000f680: b005 add sp, #20 -1000f682: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1000f686: d01d beq.n 1000f6c4 -1000f688: f8b8 c006 ldrh.w ip, [r8, #6] -1000f68c: 4584 cmp ip, r0 -1000f68e: d819 bhi.n 1000f6c4 -1000f690: b11a cbz r2, 1000f69a -1000f692: 88d2 ldrh r2, [r2, #6] -1000f694: 4552 cmp r2, sl -1000f696: bf18 it ne -1000f698: 2300 movne r3, #0 -1000f69a: f8d8 c000 ldr.w ip, [r8] -1000f69e: 4642 mov r2, r8 -1000f6a0: e06c b.n 1000f77c -1000f6a2: 88d4 ldrh r4, [r2, #6] -1000f6a4: 6015 str r5, [r2, #0] -1000f6a6: 42a0 cmp r0, r4 -1000f6a8: bf18 it ne -1000f6aa: 2300 movne r3, #0 -1000f6ac: e7a1 b.n 1000f5f2 -1000f6ae: f8d8 2004 ldr.w r2, [r8, #4] -1000f6b2: 88c8 ldrh r0, [r1, #6] -1000f6b4: 8891 ldrh r1, [r2, #4] -1000f6b6: 4288 cmp r0, r1 -1000f6b8: f47f af72 bne.w 1000f5a0 -1000f6bc: f8d2 8000 ldr.w r8, [r2] -1000f6c0: 4611 mov r1, r2 -1000f6c2: e7a5 b.n 1000f610 -1000f6c4: 4628 mov r0, r5 -1000f6c6: f001 fda4 bl 10011212 -1000f6ca: 8833 ldrh r3, [r6, #0] -1000f6cc: 1a18 subs r0, r3, r0 -1000f6ce: 8030 strh r0, [r6, #0] -1000f6d0: e763 b.n 1000f59a -1000f6d2: f8d4 8004 ldr.w r8, [r4, #4] -1000f6d6: f06f 0113 mvn.w r1, #19 -1000f6da: 4620 mov r0, r4 -1000f6dc: f001 fca2 bl 10011024 -1000f6e0: 4621 mov r1, r4 -1000f6e2: 4628 mov r0, r5 -1000f6e4: f001 fdaa bl 1001123c -1000f6e8: f8d8 4000 ldr.w r4, [r8] -1000f6ec: e7b3 b.n 1000f656 -1000f6ee: 88e0 ldrh r0, [r4, #6] -1000f6f0: f000 f909 bl 1000f906 -1000f6f4: f3c0 000c ubfx r0, r0, #0, #13 -1000f6f8: b940 cbnz r0, 1000f70c -1000f6fa: f8b9 000e ldrh.w r0, [r9, #14] -1000f6fe: f000 f902 bl 1000f906 -1000f702: f3c0 000c ubfx r0, r0, #0, #13 -1000f706: 2800 cmp r0, #0 -1000f708: f47f af37 bne.w 1000f57a -1000f70c: 8832 ldrh r2, [r6, #0] -1000f70e: 4490 add r8, r2 -1000f710: f8a6 8000 strh.w r8, [r6] -1000f714: 88e2 ldrh r2, [r4, #6] -1000f716: 0693 lsls r3, r2, #26 -1000f718: d40f bmi.n 1000f73a -1000f71a: f899 201e ldrb.w r2, [r9, #30] -1000f71e: 9b03 ldr r3, [sp, #12] -1000f720: f042 0201 orr.w r2, r2, #1 -1000f724: f889 201e strb.w r2, [r9, #30] -1000f728: f003 020f and.w r2, r3, #15 -1000f72c: 9b02 ldr r3, [sp, #8] -1000f72e: ebab 0b82 sub.w fp, fp, r2, lsl #2 -1000f732: eb0b 0bc3 add.w fp, fp, r3, lsl #3 -1000f736: f8a9 b01c strh.w fp, [r9, #28] -1000f73a: f8d5 8004 ldr.w r8, [r5, #4] -1000f73e: f8b8 0002 ldrh.w r0, [r8, #2] -1000f742: f000 f8e0 bl 1000f906 -1000f746: f898 4000 ldrb.w r4, [r8] -1000f74a: f004 040f and.w r4, r4, #15 -1000f74e: eba0 0484 sub.w r4, r0, r4, lsl #2 -1000f752: f8b8 0006 ldrh.w r0, [r8, #6] -1000f756: f000 f8d6 bl 1000f906 -1000f75a: 2200 movs r2, #0 -1000f75c: 2301 movs r3, #1 -1000f75e: f3c0 000c ubfx r0, r0, #0, #13 -1000f762: 00c0 lsls r0, r0, #3 -1000f764: b2a4 uxth r4, r4 -1000f766: 6869 ldr r1, [r5, #4] -1000f768: 4404 add r4, r0 -1000f76a: b2a4 uxth r4, r4 -1000f76c: f8d9 c004 ldr.w ip, [r9, #4] -1000f770: 700a strb r2, [r1, #0] -1000f772: 704a strb r2, [r1, #1] -1000f774: 708a strb r2, [r1, #2] -1000f776: 70ca strb r2, [r1, #3] -1000f778: 8088 strh r0, [r1, #4] -1000f77a: 80cc strh r4, [r1, #6] -1000f77c: f1bc 0f00 cmp.w ip, #0 -1000f780: f47f af25 bne.w 1000f5ce -1000f784: 2a00 cmp r2, #0 -1000f786: d18c bne.n 1000f6a2 -1000f788: f8c9 5004 str.w r5, [r9, #4] -1000f78c: e731 b.n 1000f5f2 -1000f78e: bf00 nop -1000f790: 1004aa3e .word 0x1004aa3e -1000f794: 1004aa40 .word 0x1004aa40 -1000f798: 10040088 .word 0x10040088 - -1000f79c : -1000f79c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1000f7a0: 8d0b ldrh r3, [r1, #40] ; 0x28 -1000f7a2: b08d sub sp, #52 ; 0x34 -1000f7a4: 9305 str r3, [sp, #20] -1000f7a6: 6843 ldr r3, [r0, #4] -1000f7a8: 920a str r2, [sp, #40] ; 0x28 -1000f7aa: 9306 str r3, [sp, #24] -1000f7ac: 9104 str r1, [sp, #16] -1000f7ae: 4605 mov r5, r0 -1000f7b0: 88d8 ldrh r0, [r3, #6] -1000f7b2: f000 f8a8 bl 1000f906 -1000f7b6: 2208 movs r2, #8 -1000f7b8: f3c0 030c ubfx r3, r0, #0, #13 -1000f7bc: 9302 str r3, [sp, #8] -1000f7be: f400 5300 and.w r3, r0, #8192 ; 0x2000 -1000f7c2: 9308 str r3, [sp, #32] -1000f7c4: 9b05 ldr r3, [sp, #20] -1000f7c6: 2600 movs r6, #0 -1000f7c8: 3b14 subs r3, #20 -1000f7ca: fb93 f3f2 sdiv r3, r3, r2 -1000f7ce: 2714 movs r7, #20 -1000f7d0: b29b uxth r3, r3 -1000f7d2: 892c ldrh r4, [r5, #8] -1000f7d4: 9307 str r3, [sp, #28] -1000f7d6: 00db lsls r3, r3, #3 -1000f7d8: 3c14 subs r4, #20 -1000f7da: b29b uxth r3, r3 -1000f7dc: b2a4 uxth r4, r4 -1000f7de: 9309 str r3, [sp, #36] ; 0x24 -1000f7e0: b91c cbnz r4, 1000f7ea -1000f7e2: 4620 mov r0, r4 -1000f7e4: b00d add sp, #52 ; 0x34 -1000f7e6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1000f7ea: 9b02 ldr r3, [sp, #8] -1000f7ec: 2200 movs r2, #0 -1000f7ee: f3c3 0a0c ubfx sl, r3, #0, #13 -1000f7f2: 9b08 ldr r3, [sp, #32] -1000f7f4: 2114 movs r1, #20 -1000f7f6: ea43 030a orr.w r3, r3, sl -1000f7fa: 9303 str r3, [sp, #12] -1000f7fc: 9b05 ldr r3, [sp, #20] -1000f7fe: 2002 movs r0, #2 -1000f800: 3b13 subs r3, #19 -1000f802: 42a3 cmp r3, r4 -1000f804: bfdf itttt le -1000f806: 9b03 ldrle r3, [sp, #12] -1000f808: f8dd a024 ldrle.w sl, [sp, #36] ; 0x24 -1000f80c: f443 5300 orrle.w r3, r3, #8192 ; 0x2000 -1000f810: 9303 strle r3, [sp, #12] -1000f812: bfc8 it gt -1000f814: 46a2 movgt sl, r4 -1000f816: f001 fc53 bl 100110c0 -1000f81a: 4680 mov r8, r0 -1000f81c: b300 cbz r0, 1000f860 -1000f81e: 2214 movs r2, #20 -1000f820: 9906 ldr r1, [sp, #24] -1000f822: 6840 ldr r0, [r0, #4] -1000f824: f00b f9c4 bl 1001abb0 -1000f828: 686b ldr r3, [r5, #4] -1000f82a: f8d8 9004 ldr.w r9, [r8, #4] -1000f82e: 443b add r3, r7 -1000f830: 606b str r3, [r5, #4] -1000f832: 896b ldrh r3, [r5, #10] -1000f834: 1bdf subs r7, r3, r7 -1000f836: 816f strh r7, [r5, #10] -1000f838: 4657 mov r7, sl -1000f83a: 2f00 cmp r7, #0 -1000f83c: d032 beq.n 1000f8a4 -1000f83e: 896e ldrh r6, [r5, #10] -1000f840: 42be cmp r6, r7 -1000f842: bf28 it cs -1000f844: 463e movcs r6, r7 -1000f846: b2b6 uxth r6, r6 -1000f848: b90e cbnz r6, 1000f84e -1000f84a: 682d ldr r5, [r5, #0] -1000f84c: e7f5 b.n 1000f83a -1000f84e: 4b2a ldr r3, [pc, #168] ; (1000f8f8 ) -1000f850: 8998 ldrh r0, [r3, #12] -1000f852: f005 fc6b bl 1001512c -1000f856: 4683 mov fp, r0 -1000f858: b928 cbnz r0, 1000f866 -1000f85a: 4640 mov r0, r8 -1000f85c: f001 fc0d bl 1001107a -1000f860: f04f 30ff mov.w r0, #4294967295 -1000f864: e7be b.n 1000f7e4 -1000f866: 9601 str r6, [sp, #4] -1000f868: 686b ldr r3, [r5, #4] -1000f86a: 2202 movs r2, #2 -1000f86c: 9300 str r3, [sp, #0] -1000f86e: 4631 mov r1, r6 -1000f870: 4603 mov r3, r0 -1000f872: 2003 movs r0, #3 -1000f874: f001 fbac bl 10010fd0 -1000f878: b918 cbnz r0, 1000f882 -1000f87a: 4658 mov r0, fp -1000f87c: f005 fcf2 bl 10015264 -1000f880: e7eb b.n 1000f85a -1000f882: 900b str r0, [sp, #44] ; 0x2c -1000f884: 4628 mov r0, r5 -1000f886: f001 fccc bl 10011222 -1000f88a: 4b1c ldr r3, [pc, #112] ; (1000f8fc ) -1000f88c: 1bbf subs r7, r7, r6 -1000f88e: f8cb 5014 str.w r5, [fp, #20] -1000f892: f8cb 3010 str.w r3, [fp, #16] -1000f896: 990b ldr r1, [sp, #44] ; 0x2c -1000f898: 4640 mov r0, r8 -1000f89a: b2bf uxth r7, r7 -1000f89c: f001 fcce bl 1001123c -1000f8a0: 2f00 cmp r7, #0 -1000f8a2: d1d2 bne.n 1000f84a -1000f8a4: 9803 ldr r0, [sp, #12] -1000f8a6: f000 f82b bl 1000f900 -1000f8aa: f8a9 0006 strh.w r0, [r9, #6] -1000f8ae: f10a 0014 add.w r0, sl, #20 -1000f8b2: b280 uxth r0, r0 -1000f8b4: f000 f824 bl 1000f900 -1000f8b8: f889 700a strb.w r7, [r9, #10] -1000f8bc: f8a9 0002 strh.w r0, [r9, #2] -1000f8c0: f889 700b strb.w r7, [r9, #11] -1000f8c4: 2114 movs r1, #20 -1000f8c6: 4648 mov r0, r9 -1000f8c8: f7ff fad1 bl 1000ee6e -1000f8cc: 9b04 ldr r3, [sp, #16] -1000f8ce: 9a0a ldr r2, [sp, #40] ; 0x28 -1000f8d0: 695b ldr r3, [r3, #20] -1000f8d2: f8a9 000a strh.w r0, [r9, #10] -1000f8d6: 4641 mov r1, r8 -1000f8d8: 9804 ldr r0, [sp, #16] -1000f8da: 4798 blx r3 -1000f8dc: 4640 mov r0, r8 -1000f8de: f001 fbcc bl 1001107a -1000f8e2: 9b02 ldr r3, [sp, #8] -1000f8e4: 9a07 ldr r2, [sp, #28] -1000f8e6: eba4 040a sub.w r4, r4, sl -1000f8ea: 4413 add r3, r2 -1000f8ec: b29b uxth r3, r3 -1000f8ee: b2a4 uxth r4, r4 -1000f8f0: 9302 str r3, [sp, #8] -1000f8f2: 4637 mov r7, r6 -1000f8f4: e774 b.n 1000f7e0 -1000f8f6: bf00 nop -1000f8f8: 10040088 .word 0x10040088 -1000f8fc: 1000f3bf .word 0x1000f3bf - -1000f900 : -1000f900: ba40 rev16 r0, r0 -1000f902: b280 uxth r0, r0 -1000f904: 4770 bx lr - -1000f906 : -1000f906: ba40 rev16 r0, r0 -1000f908: b280 uxth r0, r0 -1000f90a: 4770 bx lr - -1000f90c : -1000f90c: ba00 rev r0, r0 -1000f90e: 4770 bx lr - -1000f910 : -1000f910: f7ff bffc b.w 1000f90c - -1000f914 : -1000f914: 7b03 ldrb r3, [r0, #12] -1000f916: 428b cmp r3, r1 -1000f918: bf1f itttt ne -1000f91a: 2300 movne r3, #0 -1000f91c: 7301 strbne r1, [r0, #12] -1000f91e: 7343 strbne r3, [r0, #13] -1000f920: 8343 strhne r3, [r0, #26] -1000f922: 4770 bx lr - -1000f924 : -1000f924: 8b03 ldrh r3, [r0, #24] -1000f926: b530 push {r4, r5, lr} -1000f928: 6944 ldr r4, [r0, #20] -1000f92a: 18e5 adds r5, r4, r3 -1000f92c: f885 10f0 strb.w r1, [r5, #240] ; 0xf0 -1000f930: 1c99 adds r1, r3, #2 -1000f932: 3301 adds r3, #1 -1000f934: b29b uxth r3, r3 -1000f936: 4423 add r3, r4 -1000f938: 8301 strh r1, [r0, #24] -1000f93a: f883 20f0 strb.w r2, [r3, #240] ; 0xf0 -1000f93e: bd30 pop {r4, r5, pc} - -1000f940 : -1000f940: b510 push {r4, lr} -1000f942: 8b02 ldrh r2, [r0, #24] -1000f944: 6943 ldr r3, [r0, #20] -1000f946: 1c54 adds r4, r2, #1 -1000f948: 4413 add r3, r2 -1000f94a: 8304 strh r4, [r0, #24] -1000f94c: f883 10f0 strb.w r1, [r3, #240] ; 0xf0 -1000f950: bd10 pop {r4, pc} - -1000f952 : -1000f952: 8b03 ldrh r3, [r0, #24] -1000f954: 6942 ldr r2, [r0, #20] -1000f956: b530 push {r4, r5, lr} -1000f958: 18d4 adds r4, r2, r3 -1000f95a: 0a0d lsrs r5, r1, #8 -1000f95c: f884 50f0 strb.w r5, [r4, #240] ; 0xf0 -1000f960: 1c9c adds r4, r3, #2 -1000f962: 3301 adds r3, #1 -1000f964: b29b uxth r3, r3 -1000f966: 4413 add r3, r2 -1000f968: 8304 strh r4, [r0, #24] -1000f96a: f883 10f0 strb.w r1, [r3, #240] ; 0xf0 -1000f96e: bd30 pop {r4, r5, pc} - -1000f970 : -1000f970: 8b03 ldrh r3, [r0, #24] -1000f972: 6942 ldr r2, [r0, #20] -1000f974: b530 push {r4, r5, lr} -1000f976: 18d4 adds r4, r2, r3 -1000f978: 0e0d lsrs r5, r1, #24 -1000f97a: f884 50f0 strb.w r5, [r4, #240] ; 0xf0 -1000f97e: 1c5c adds r4, r3, #1 -1000f980: b2a4 uxth r4, r4 -1000f982: 4414 add r4, r2 -1000f984: 0c0d lsrs r5, r1, #16 -1000f986: f884 50f0 strb.w r5, [r4, #240] ; 0xf0 -1000f98a: 1c9c adds r4, r3, #2 -1000f98c: b2a4 uxth r4, r4 -1000f98e: 4414 add r4, r2 -1000f990: 0a0d lsrs r5, r1, #8 -1000f992: f884 50f0 strb.w r5, [r4, #240] ; 0xf0 -1000f996: 1d1c adds r4, r3, #4 -1000f998: 3303 adds r3, #3 -1000f99a: b29b uxth r3, r3 -1000f99c: 4413 add r3, r2 -1000f99e: 8304 strh r4, [r0, #24] -1000f9a0: f883 10f0 strb.w r1, [r3, #240] ; 0xf0 -1000f9a4: bd30 pop {r4, r5, pc} - -1000f9a6 : -1000f9a6: b510 push {r4, lr} -1000f9a8: b158 cbz r0, 1000f9c2 -1000f9aa: 8b03 ldrh r3, [r0, #24] -1000f9ac: 6942 ldr r2, [r0, #20] -1000f9ae: 1c59 adds r1, r3, #1 -1000f9b0: 8301 strh r1, [r0, #24] -1000f9b2: 21ff movs r1, #255 ; 0xff -1000f9b4: 4413 add r3, r2 -1000f9b6: f883 10f0 strb.w r1, [r3, #240] ; 0xf0 -1000f9ba: 2100 movs r1, #0 -1000f9bc: 8b03 ldrh r3, [r0, #24] -1000f9be: 2b43 cmp r3, #67 ; 0x43 -1000f9c0: d900 bls.n 1000f9c4 -1000f9c2: bd10 pop {r4, pc} -1000f9c4: 1c5c adds r4, r3, #1 -1000f9c6: 4413 add r3, r2 -1000f9c8: 8304 strh r4, [r0, #24] -1000f9ca: f883 10f0 strb.w r1, [r3, #240] ; 0xf0 -1000f9ce: e7f5 b.n 1000f9bc - -1000f9d0 : -1000f9d0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1000f9d4: 460c mov r4, r1 -1000f9d6: 4616 mov r6, r2 -1000f9d8: 4680 mov r8, r0 -1000f9da: 2800 cmp r0, #0 -1000f9dc: f000 8087 beq.w 1000faee -1000f9e0: 2900 cmp r1, #0 -1000f9e2: f000 8088 beq.w 1000faf6 -1000f9e6: 2200 movs r2, #0 -1000f9e8: f44f 719a mov.w r1, #308 ; 0x134 -1000f9ec: 4610 mov r0, r2 -1000f9ee: f001 fb67 bl 100110c0 -1000f9f2: 6120 str r0, [r4, #16] -1000f9f4: 2800 cmp r0, #0 -1000f9f6: f000 8082 beq.w 1000fafe -1000f9fa: 7b63 ldrb r3, [r4, #13] -1000f9fc: 4d42 ldr r5, [pc, #264] ; (1000fb08 ) -1000f9fe: b913 cbnz r3, 1000fa06 -1000fa00: 4b42 ldr r3, [pc, #264] ; (1000fb0c ) -1000fa02: 4798 blx r3 -1000fa04: 6028 str r0, [r5, #0] -1000fa06: 6923 ldr r3, [r4, #16] -1000fa08: 6828 ldr r0, [r5, #0] -1000fa0a: 685f ldr r7, [r3, #4] -1000fa0c: 2301 movs r3, #1 -1000fa0e: 2500 movs r5, #0 -1000fa10: 6020 str r0, [r4, #0] -1000fa12: 6167 str r7, [r4, #20] -1000fa14: 703b strb r3, [r7, #0] -1000fa16: 707b strb r3, [r7, #1] -1000fa18: f898 302a ldrb.w r3, [r8, #42] ; 0x2a -1000fa1c: 70fd strb r5, [r7, #3] -1000fa1e: 70bb strb r3, [r7, #2] -1000fa20: f7ff ff74 bl 1000f90c -1000fa24: 6963 ldr r3, [r4, #20] -1000fa26: 2e08 cmp r6, #8 -1000fa28: 6078 str r0, [r7, #4] -1000fa2a: 721d strb r5, [r3, #8] -1000fa2c: 725d strb r5, [r3, #9] -1000fa2e: 729d strb r5, [r3, #10] -1000fa30: 72dd strb r5, [r3, #11] -1000fa32: 731d strb r5, [r3, #12] -1000fa34: 735d strb r5, [r3, #13] -1000fa36: 739d strb r5, [r3, #14] -1000fa38: 73dd strb r5, [r3, #15] -1000fa3a: d007 beq.n 1000fa4c -1000fa3c: 2e04 cmp r6, #4 -1000fa3e: d005 beq.n 1000fa4c -1000fa40: 2e03 cmp r6, #3 -1000fa42: d106 bne.n 1000fa52 -1000fa44: 7b22 ldrb r2, [r4, #12] -1000fa46: 3a04 subs r2, #4 -1000fa48: 2a01 cmp r2, #1 -1000fa4a: d802 bhi.n 1000fa52 -1000fa4c: f8d8 2004 ldr.w r2, [r8, #4] -1000fa50: 60da str r2, [r3, #12] -1000fa52: 2200 movs r2, #0 -1000fa54: 741a strb r2, [r3, #16] -1000fa56: 745a strb r2, [r3, #17] -1000fa58: 749a strb r2, [r3, #18] -1000fa5a: 74da strb r2, [r3, #19] -1000fa5c: 751a strb r2, [r3, #20] -1000fa5e: 755a strb r2, [r3, #21] -1000fa60: 759a strb r2, [r3, #22] -1000fa62: 75da strb r2, [r3, #23] -1000fa64: 761a strb r2, [r3, #24] -1000fa66: 765a strb r2, [r3, #25] -1000fa68: 769a strb r2, [r3, #26] -1000fa6a: 76da strb r2, [r3, #27] -1000fa6c: f898 502a ldrb.w r5, [r8, #42] ; 0x2a -1000fa70: f103 011c add.w r1, r3, #28 -1000fa74: b290 uxth r0, r2 -1000fa76: 4285 cmp r5, r0 -1000fa78: bf92 itee ls -1000fa7a: 2000 movls r0, #0 -1000fa7c: eb08 0002 addhi.w r0, r8, r2 -1000fa80: f890 002b ldrbhi.w r0, [r0, #43] ; 0x2b -1000fa84: 3201 adds r2, #1 -1000fa86: 2a10 cmp r2, #16 -1000fa88: f801 0b01 strb.w r0, [r1], #1 -1000fa8c: d1f2 bne.n 1000fa74 -1000fa8e: 2000 movs r0, #0 -1000fa90: f103 022c add.w r2, r3, #44 ; 0x2c -1000fa94: f103 016c add.w r1, r3, #108 ; 0x6c -1000fa98: f802 0b01 strb.w r0, [r2], #1 -1000fa9c: 428a cmp r2, r1 -1000fa9e: d1fb bne.n 1000fa98 -1000faa0: 2100 movs r1, #0 -1000faa2: f103 00ec add.w r0, r3, #236 ; 0xec -1000faa6: f802 1b01 strb.w r1, [r2], #1 -1000faaa: 4282 cmp r2, r0 -1000faac: d1fb bne.n 1000faa6 -1000faae: f06f 007d mvn.w r0, #125 ; 0x7d -1000fab2: 2263 movs r2, #99 ; 0x63 -1000fab4: f883 00ed strb.w r0, [r3, #237] ; 0xed -1000fab8: 2053 movs r0, #83 ; 0x53 -1000faba: f883 20ec strb.w r2, [r3, #236] ; 0xec -1000fabe: f883 20ef strb.w r2, [r3, #239] ; 0xef -1000fac2: 2200 movs r2, #0 -1000fac4: f883 00ee strb.w r0, [r3, #238] ; 0xee -1000fac8: 8321 strh r1, [r4, #24] -1000faca: 33f0 adds r3, #240 ; 0xf0 -1000facc: f803 2b01 strb.w r2, [r3], #1 -1000fad0: 3201 adds r2, #1 -1000fad2: 2a44 cmp r2, #68 ; 0x44 -1000fad4: d1fa bne.n 1000facc -1000fad6: 2201 movs r2, #1 -1000fad8: 4620 mov r0, r4 -1000fada: 2135 movs r1, #53 ; 0x35 -1000fadc: f7ff ff22 bl 1000f924 -1000fae0: 4620 mov r0, r4 -1000fae2: 4631 mov r1, r6 -1000fae4: f7ff ff2c bl 1000f940 -1000fae8: 2000 movs r0, #0 -1000faea: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000faee: f06f 000d mvn.w r0, #13 -1000faf2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000faf6: f06f 0005 mvn.w r0, #5 -1000fafa: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000fafe: f04f 30ff mov.w r0, #4294967295 -1000fb02: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1000fb06: bf00 nop -1000fb08: 1004aa78 .word 0x1004aa78 -1000fb0c: 0000f585 .word 0x0000f585 - -1000fb10 : -1000fb10: b510 push {r4, lr} -1000fb12: 4604 mov r4, r0 -1000fb14: b130 cbz r0, 1000fb24 -1000fb16: 6900 ldr r0, [r0, #16] -1000fb18: b108 cbz r0, 1000fb1e -1000fb1a: f001 faae bl 1001107a -1000fb1e: 2300 movs r3, #0 -1000fb20: 6123 str r3, [r4, #16] -1000fb22: 6163 str r3, [r4, #20] -1000fb24: bd10 pop {r4, pc} - ... - -1000fb28 : -1000fb28: 2300 movs r3, #0 -1000fb2a: b573 push {r0, r1, r4, r5, r6, lr} -1000fb2c: 4606 mov r6, r0 -1000fb2e: 6a04 ldr r4, [r0, #32] -1000fb30: 2106 movs r1, #6 -1000fb32: 62e3 str r3, [r4, #44] ; 0x2c -1000fb34: 4620 mov r0, r4 -1000fb36: f7ff feed bl 1000f914 -1000fb3a: 2201 movs r2, #1 -1000fb3c: 4621 mov r1, r4 -1000fb3e: 4630 mov r0, r6 -1000fb40: f7ff ff46 bl 1000f9d0 -1000fb44: 4605 mov r5, r0 -1000fb46: bb80 cbnz r0, 1000fbaa -1000fb48: 2202 movs r2, #2 -1000fb4a: 2139 movs r1, #57 ; 0x39 -1000fb4c: 4620 mov r0, r4 -1000fb4e: f7ff fee9 bl 1000f924 -1000fb52: 8d31 ldrh r1, [r6, #40] ; 0x28 -1000fb54: 4620 mov r0, r4 -1000fb56: f7ff fefc bl 1000f952 -1000fb5a: 2204 movs r2, #4 -1000fb5c: 2137 movs r1, #55 ; 0x37 -1000fb5e: 4620 mov r0, r4 -1000fb60: f7ff fee0 bl 1000f924 -1000fb64: 2101 movs r1, #1 -1000fb66: 4620 mov r0, r4 -1000fb68: f7ff feea bl 1000f940 -1000fb6c: 2103 movs r1, #3 -1000fb6e: 4620 mov r0, r4 -1000fb70: f7ff fee6 bl 1000f940 -1000fb74: 211c movs r1, #28 -1000fb76: 4620 mov r0, r4 -1000fb78: f7ff fee2 bl 1000f940 -1000fb7c: 2106 movs r1, #6 -1000fb7e: 4620 mov r0, r4 -1000fb80: f7ff fede bl 1000f940 -1000fb84: 4620 mov r0, r4 -1000fb86: f7ff ff0e bl 1000f9a6 -1000fb8a: 8b21 ldrh r1, [r4, #24] -1000fb8c: 6920 ldr r0, [r4, #16] -1000fb8e: 31f0 adds r1, #240 ; 0xf0 -1000fb90: b289 uxth r1, r1 -1000fb92: f001 fb25 bl 100111e0 -1000fb96: 9600 str r6, [sp, #0] -1000fb98: 2343 movs r3, #67 ; 0x43 -1000fb9a: 4a0e ldr r2, [pc, #56] ; (1000fbd4 ) -1000fb9c: 6921 ldr r1, [r4, #16] -1000fb9e: 6860 ldr r0, [r4, #4] -1000fba0: f004 f8c8 bl 10013d34 -1000fba4: 4620 mov r0, r4 -1000fba6: f7ff ffb3 bl 1000fb10 -1000fbaa: 7b63 ldrb r3, [r4, #13] -1000fbac: 4628 mov r0, r5 -1000fbae: 3301 adds r3, #1 -1000fbb0: b2da uxtb r2, r3 -1000fbb2: 2a05 cmp r2, #5 -1000fbb4: bf96 itet ls -1000fbb6: f44f 737a movls.w r3, #1000 ; 0x3e8 -1000fbba: f64e 2360 movwhi r3, #60000 ; 0xea60 -1000fbbe: 4093 lslls r3, r2 -1000fbc0: 7362 strb r2, [r4, #13] -1000fbc2: f44f 72fa mov.w r2, #500 ; 0x1f4 -1000fbc6: f203 13f3 addw r3, r3, #499 ; 0x1f3 -1000fbca: fb93 f3f2 sdiv r3, r3, r2 -1000fbce: 8363 strh r3, [r4, #26] -1000fbd0: b002 add sp, #8 -1000fbd2: bd70 pop {r4, r5, r6, pc} -1000fbd4: 10040074 .word 0x10040074 - -1000fbd8 : -1000fbd8: b573 push {r0, r1, r4, r5, r6, lr} -1000fbda: 4606 mov r6, r0 -1000fbdc: 6a04 ldr r4, [r0, #32] -1000fbde: 2103 movs r1, #3 -1000fbe0: 4620 mov r0, r4 -1000fbe2: f7ff fe97 bl 1000f914 -1000fbe6: 2203 movs r2, #3 -1000fbe8: 4621 mov r1, r4 -1000fbea: 4630 mov r0, r6 -1000fbec: f7ff fef0 bl 1000f9d0 -1000fbf0: 4605 mov r5, r0 -1000fbf2: bb40 cbnz r0, 1000fc46 -1000fbf4: 2202 movs r2, #2 -1000fbf6: 2139 movs r1, #57 ; 0x39 -1000fbf8: 4620 mov r0, r4 -1000fbfa: f7ff fe93 bl 1000f924 -1000fbfe: f44f 7110 mov.w r1, #576 ; 0x240 -1000fc02: 4620 mov r0, r4 -1000fc04: f7ff fea5 bl 1000f952 -1000fc08: 2204 movs r2, #4 -1000fc0a: 2132 movs r1, #50 ; 0x32 -1000fc0c: 4620 mov r0, r4 -1000fc0e: f7ff fe89 bl 1000f924 -1000fc12: 6ae0 ldr r0, [r4, #44] ; 0x2c -1000fc14: f7ff fe7c bl 1000f910 -1000fc18: 4601 mov r1, r0 -1000fc1a: 4620 mov r0, r4 -1000fc1c: f7ff fea8 bl 1000f970 -1000fc20: 4620 mov r0, r4 -1000fc22: f7ff fec0 bl 1000f9a6 -1000fc26: 8b21 ldrh r1, [r4, #24] -1000fc28: 6920 ldr r0, [r4, #16] -1000fc2a: 31f0 adds r1, #240 ; 0xf0 -1000fc2c: b289 uxth r1, r1 -1000fc2e: f001 fad7 bl 100111e0 -1000fc32: 9600 str r6, [sp, #0] -1000fc34: 2343 movs r3, #67 ; 0x43 -1000fc36: 4a10 ldr r2, [pc, #64] ; (1000fc78 ) -1000fc38: 6921 ldr r1, [r4, #16] -1000fc3a: 6860 ldr r0, [r4, #4] -1000fc3c: f004 f87a bl 10013d34 -1000fc40: 4620 mov r0, r4 -1000fc42: f7ff ff65 bl 1000fb10 -1000fc46: 7b63 ldrb r3, [r4, #13] -1000fc48: 4628 mov r0, r5 -1000fc4a: 3301 adds r3, #1 -1000fc4c: b2db uxtb r3, r3 -1000fc4e: 2b09 cmp r3, #9 -1000fc50: 7363 strb r3, [r4, #13] -1000fc52: bf96 itet ls -1000fc54: ebc3 1243 rsbls r2, r3, r3, lsl #5 -1000fc58: f242 7310 movwhi r3, #10000 ; 0x2710 -1000fc5c: eb03 0382 addls.w r3, r3, r2, lsl #2 -1000fc60: f44f 72fa mov.w r2, #500 ; 0x1f4 -1000fc64: bf9c itt ls -1000fc66: 00db lslls r3, r3, #3 -1000fc68: b29b uxthls r3, r3 -1000fc6a: f203 13f3 addw r3, r3, #499 ; 0x1f3 -1000fc6e: fb93 f3f2 sdiv r3, r3, r2 -1000fc72: 8363 strh r3, [r4, #26] -1000fc74: b002 add sp, #8 -1000fc76: bd70 pop {r4, r5, r6, pc} -1000fc78: 10040074 .word 0x10040074 - -1000fc7c : -1000fc7c: b538 push {r3, r4, r5, lr} -1000fc7e: 4605 mov r5, r0 -1000fc80: 6a04 ldr r4, [r0, #32] -1000fc82: 2108 movs r1, #8 -1000fc84: 4620 mov r0, r4 -1000fc86: f7ff fe45 bl 1000f914 -1000fc8a: 2200 movs r2, #0 -1000fc8c: f104 012c add.w r1, r4, #44 ; 0x2c -1000fc90: 4628 mov r0, r5 -1000fc92: f004 fa8d bl 100141b0 -1000fc96: 7b63 ldrb r3, [r4, #13] -1000fc98: 3301 adds r3, #1 -1000fc9a: 7363 strb r3, [r4, #13] -1000fc9c: 2301 movs r3, #1 -1000fc9e: 8363 strh r3, [r4, #26] -1000fca0: bd38 pop {r3, r4, r5, pc} - -1000fca2 : -1000fca2: b537 push {r0, r1, r2, r4, r5, lr} -1000fca4: 4605 mov r5, r0 -1000fca6: 2800 cmp r0, #0 -1000fca8: d055 beq.n 1000fd56 -1000fcaa: 6a04 ldr r4, [r0, #32] -1000fcac: 2c00 cmp r4, #0 -1000fcae: d052 beq.n 1000fd56 -1000fcb0: 2300 movs r3, #0 -1000fcb2: 84a3 strh r3, [r4, #36] ; 0x24 -1000fcb4: 6be3 ldr r3, [r4, #60] ; 0x3c -1000fcb6: 1c5a adds r2, r3, #1 -1000fcb8: d00b beq.n 1000fcd2 -1000fcba: 223c movs r2, #60 ; 0x3c -1000fcbc: 331e adds r3, #30 -1000fcbe: fbb3 f3f2 udiv r3, r3, r2 -1000fcc2: f64f 72ff movw r2, #65535 ; 0xffff -1000fcc6: 4293 cmp r3, r2 -1000fcc8: bf28 it cs -1000fcca: 4613 movcs r3, r2 -1000fccc: 2b00 cmp r3, #0 -1000fcce: d044 beq.n 1000fd5a -1000fcd0: 84e3 strh r3, [r4, #38] ; 0x26 -1000fcd2: 6c23 ldr r3, [r4, #64] ; 0x40 -1000fcd4: 1c58 adds r0, r3, #1 -1000fcd6: d00d beq.n 1000fcf4 -1000fcd8: 223c movs r2, #60 ; 0x3c -1000fcda: 331e adds r3, #30 -1000fcdc: fbb3 f3f2 udiv r3, r3, r2 -1000fce0: f64f 72ff movw r2, #65535 ; 0xffff -1000fce4: 4293 cmp r3, r2 -1000fce6: bf28 it cs -1000fce8: 4613 movcs r3, r2 -1000fcea: 2b00 cmp r3, #0 -1000fcec: d037 beq.n 1000fd5e -1000fcee: 83a3 strh r3, [r4, #28] -1000fcf0: 8ba3 ldrh r3, [r4, #28] -1000fcf2: 8423 strh r3, [r4, #32] -1000fcf4: 6c63 ldr r3, [r4, #68] ; 0x44 -1000fcf6: 1c59 adds r1, r3, #1 -1000fcf8: d00c beq.n 1000fd14 -1000fcfa: 223c movs r2, #60 ; 0x3c -1000fcfc: 331e adds r3, #30 -1000fcfe: fbb3 f3f2 udiv r3, r3, r2 -1000fd02: f64f 72ff movw r2, #65535 ; 0xffff -1000fd06: 4293 cmp r3, r2 -1000fd08: bf28 it cs -1000fd0a: 4613 movcs r3, r2 -1000fd0c: b34b cbz r3, 1000fd62 -1000fd0e: 83e3 strh r3, [r4, #30] -1000fd10: 8be3 ldrh r3, [r4, #30] -1000fd12: 8463 strh r3, [r4, #34] ; 0x22 -1000fd14: 7ba3 ldrb r3, [r4, #14] -1000fd16: b333 cbz r3, 1000fd66 -1000fd18: 6b23 ldr r3, [r4, #48] ; 0x30 -1000fd1a: 9300 str r3, [sp, #0] -1000fd1c: 6b63 ldr r3, [r4, #52] ; 0x34 -1000fd1e: 9301 str r3, [sp, #4] -1000fd20: b92b cbnz r3, 1000fd2e -1000fd22: 6ae3 ldr r3, [r4, #44] ; 0x2c -1000fd24: 9a00 ldr r2, [sp, #0] -1000fd26: 4013 ands r3, r2 -1000fd28: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000 -1000fd2c: 9301 str r3, [sp, #4] -1000fd2e: f104 012c add.w r1, r4, #44 ; 0x2c -1000fd32: 4628 mov r0, r5 -1000fd34: f001 f878 bl 10010e28 -1000fd38: 4669 mov r1, sp -1000fd3a: 4628 mov r0, r5 -1000fd3c: f001 f8de bl 10010efc -1000fd40: a901 add r1, sp, #4 -1000fd42: 4628 mov r0, r5 -1000fd44: f001 f8d6 bl 10010ef4 -1000fd48: 4628 mov r0, r5 -1000fd4a: f001 f8e1 bl 10010f10 -1000fd4e: 210a movs r1, #10 -1000fd50: 4620 mov r0, r4 -1000fd52: f7ff fddf bl 1000f914 -1000fd56: b003 add sp, #12 -1000fd58: bd30 pop {r4, r5, pc} -1000fd5a: 2301 movs r3, #1 -1000fd5c: e7b8 b.n 1000fcd0 -1000fd5e: 2301 movs r3, #1 -1000fd60: e7c5 b.n 1000fcee -1000fd62: 2301 movs r3, #1 -1000fd64: e7d3 b.n 1000fd0e -1000fd66: f894 302c ldrb.w r3, [r4, #44] ; 0x2c -1000fd6a: 061a lsls r2, r3, #24 -1000fd6c: d401 bmi.n 1000fd72 -1000fd6e: 23ff movs r3, #255 ; 0xff -1000fd70: e7d3 b.n 1000fd1a -1000fd72: 2bbf cmp r3, #191 ; 0xbf -1000fd74: bf8c ite hi -1000fd76: f06f 437f mvnhi.w r3, #4278190080 ; 0xff000000 -1000fd7a: f64f 73ff movwls r3, #65535 ; 0xffff -1000fd7e: e7cc b.n 1000fd1a - -1000fd80 : -1000fd80: b570 push {r4, r5, r6, lr} -1000fd82: 4606 mov r6, r0 -1000fd84: 6808 ldr r0, [r1, #0] -1000fd86: 460c mov r4, r1 -1000fd88: b190 cbz r0, 1000fdb0 -1000fd8a: f00a ff25 bl 1001abd8 -1000fd8e: b178 cbz r0, 1000fdb0 -1000fd90: 8b33 ldrh r3, [r6, #24] -1000fd92: 6825 ldr r5, [r4, #0] -1000fd94: f1c3 0441 rsb r4, r3, #65 ; 0x41 -1000fd98: 42a0 cmp r0, r4 -1000fd9a: bf28 it cs -1000fd9c: 4620 movcs r0, r4 -1000fd9e: b2c4 uxtb r4, r0 -1000fda0: 4622 mov r2, r4 -1000fda2: 210c movs r1, #12 -1000fda4: 4630 mov r0, r6 -1000fda6: f7ff fdbd bl 1000f924 -1000fdaa: 442c add r4, r5 -1000fdac: 42a5 cmp r5, r4 -1000fdae: d100 bne.n 1000fdb2 -1000fdb0: bd70 pop {r4, r5, r6, pc} -1000fdb2: f815 1b01 ldrb.w r1, [r5], #1 -1000fdb6: 4630 mov r0, r6 -1000fdb8: f7ff fdc2 bl 1000f940 -1000fdbc: e7f6 b.n 1000fdac - ... - -1000fdc0 : -1000fdc0: b573 push {r0, r1, r4, r5, r6, lr} -1000fdc2: 4606 mov r6, r0 -1000fdc4: 6a04 ldr r4, [r0, #32] -1000fdc6: 2104 movs r1, #4 -1000fdc8: 4620 mov r0, r4 -1000fdca: f7ff fda3 bl 1000f914 -1000fdce: 2203 movs r2, #3 -1000fdd0: 4621 mov r1, r4 -1000fdd2: 4630 mov r0, r6 -1000fdd4: f7ff fdfc bl 1000f9d0 -1000fdd8: 4605 mov r5, r0 -1000fdda: bb00 cbnz r0, 1000fe1e -1000fddc: 2202 movs r2, #2 -1000fdde: 2139 movs r1, #57 ; 0x39 -1000fde0: 4620 mov r0, r4 -1000fde2: f7ff fd9f bl 1000f924 -1000fde6: 8d31 ldrh r1, [r6, #40] ; 0x28 -1000fde8: 4620 mov r0, r4 -1000fdea: f7ff fdb2 bl 1000f952 -1000fdee: f106 0124 add.w r1, r6, #36 ; 0x24 -1000fdf2: 4620 mov r0, r4 -1000fdf4: f7ff ffc4 bl 1000fd80 -1000fdf8: 4620 mov r0, r4 -1000fdfa: f7ff fdd4 bl 1000f9a6 -1000fdfe: 8b21 ldrh r1, [r4, #24] -1000fe00: 6920 ldr r0, [r4, #16] -1000fe02: 31f0 adds r1, #240 ; 0xf0 -1000fe04: b289 uxth r1, r1 -1000fe06: f001 f9eb bl 100111e0 -1000fe0a: 9600 str r6, [sp, #0] -1000fe0c: 2343 movs r3, #67 ; 0x43 -1000fe0e: 4a10 ldr r2, [pc, #64] ; (1000fe50 ) -1000fe10: 6921 ldr r1, [r4, #16] -1000fe12: 6860 ldr r0, [r4, #4] -1000fe14: f003 ff8e bl 10013d34 -1000fe18: 4620 mov r0, r4 -1000fe1a: f7ff fe79 bl 1000fb10 -1000fe1e: 7b63 ldrb r3, [r4, #13] -1000fe20: 4628 mov r0, r5 -1000fe22: 3301 adds r3, #1 -1000fe24: b2db uxtb r3, r3 -1000fe26: 2b09 cmp r3, #9 -1000fe28: 7363 strb r3, [r4, #13] -1000fe2a: bf96 itet ls -1000fe2c: ebc3 1243 rsbls r2, r3, r3, lsl #5 -1000fe30: f242 7310 movwhi r3, #10000 ; 0x2710 -1000fe34: eb03 0382 addls.w r3, r3, r2, lsl #2 -1000fe38: f44f 72fa mov.w r2, #500 ; 0x1f4 -1000fe3c: bf9c itt ls -1000fe3e: 00db lslls r3, r3, #3 -1000fe40: b29b uxthls r3, r3 -1000fe42: f203 13f3 addw r3, r3, #499 ; 0x1f3 -1000fe46: fb93 f3f2 sdiv r3, r3, r2 -1000fe4a: 8363 strh r3, [r4, #26] -1000fe4c: b002 add sp, #8 -1000fe4e: bd70 pop {r4, r5, r6, pc} -1000fe50: 10040074 .word 0x10040074 - -1000fe54 : -1000fe54: b573 push {r0, r1, r4, r5, r6, lr} -1000fe56: 4606 mov r6, r0 -1000fe58: 6a04 ldr r4, [r0, #32] -1000fe5a: 2101 movs r1, #1 -1000fe5c: 4620 mov r0, r4 -1000fe5e: f7ff fd59 bl 1000f914 -1000fe62: 2203 movs r2, #3 -1000fe64: 4621 mov r1, r4 -1000fe66: 4630 mov r0, r6 -1000fe68: f7ff fdb2 bl 1000f9d0 -1000fe6c: 4605 mov r5, r0 -1000fe6e: 2800 cmp r0, #0 -1000fe70: d14d bne.n 1000ff0e -1000fe72: 2202 movs r2, #2 -1000fe74: 2139 movs r1, #57 ; 0x39 -1000fe76: 4620 mov r0, r4 -1000fe78: f7ff fd54 bl 1000f924 -1000fe7c: 8d31 ldrh r1, [r6, #40] ; 0x28 -1000fe7e: 4620 mov r0, r4 -1000fe80: f7ff fd67 bl 1000f952 -1000fe84: 2204 movs r2, #4 -1000fe86: 2132 movs r1, #50 ; 0x32 -1000fe88: 4620 mov r0, r4 -1000fe8a: f7ff fd4b bl 1000f924 -1000fe8e: 6ae0 ldr r0, [r4, #44] ; 0x2c -1000fe90: f7ff fd3e bl 1000f910 -1000fe94: 4601 mov r1, r0 -1000fe96: 4620 mov r0, r4 -1000fe98: f7ff fd6a bl 1000f970 -1000fe9c: 2204 movs r2, #4 -1000fe9e: 2136 movs r1, #54 ; 0x36 -1000fea0: 4620 mov r0, r4 -1000fea2: f7ff fd3f bl 1000f924 -1000fea6: 6aa0 ldr r0, [r4, #40] ; 0x28 -1000fea8: f7ff fd32 bl 1000f910 -1000feac: 4601 mov r1, r0 -1000feae: 4620 mov r0, r4 -1000feb0: f7ff fd5e bl 1000f970 -1000feb4: 2204 movs r2, #4 -1000feb6: 2137 movs r1, #55 ; 0x37 -1000feb8: 4620 mov r0, r4 -1000feba: f7ff fd33 bl 1000f924 -1000febe: 2101 movs r1, #1 -1000fec0: 4620 mov r0, r4 -1000fec2: f7ff fd3d bl 1000f940 -1000fec6: 2103 movs r1, #3 -1000fec8: 4620 mov r0, r4 -1000feca: f7ff fd39 bl 1000f940 -1000fece: 211c movs r1, #28 -1000fed0: 4620 mov r0, r4 -1000fed2: f7ff fd35 bl 1000f940 -1000fed6: 2106 movs r1, #6 -1000fed8: 4620 mov r0, r4 -1000feda: f7ff fd31 bl 1000f940 -1000fede: f106 0124 add.w r1, r6, #36 ; 0x24 -1000fee2: 4620 mov r0, r4 -1000fee4: f7ff ff4c bl 1000fd80 -1000fee8: 4620 mov r0, r4 -1000feea: f7ff fd5c bl 1000f9a6 -1000feee: 8b21 ldrh r1, [r4, #24] -1000fef0: 6920 ldr r0, [r4, #16] -1000fef2: 31f0 adds r1, #240 ; 0xf0 -1000fef4: b289 uxth r1, r1 -1000fef6: f001 f973 bl 100111e0 -1000fefa: 9600 str r6, [sp, #0] -1000fefc: 2343 movs r3, #67 ; 0x43 -1000fefe: 4a0e ldr r2, [pc, #56] ; (1000ff38 ) -1000ff00: 6921 ldr r1, [r4, #16] -1000ff02: 6860 ldr r0, [r4, #4] -1000ff04: f003 ff16 bl 10013d34 -1000ff08: 4620 mov r0, r4 -1000ff0a: f7ff fe01 bl 1000fb10 -1000ff0e: 7b63 ldrb r3, [r4, #13] -1000ff10: 4628 mov r0, r5 -1000ff12: 3301 adds r3, #1 -1000ff14: b2da uxtb r2, r3 -1000ff16: 2a05 cmp r2, #5 -1000ff18: bf96 itet ls -1000ff1a: f44f 737a movls.w r3, #1000 ; 0x3e8 -1000ff1e: f64e 2360 movwhi r3, #60000 ; 0xea60 -1000ff22: 4093 lslls r3, r2 -1000ff24: 7362 strb r2, [r4, #13] -1000ff26: f44f 72fa mov.w r2, #500 ; 0x1f4 -1000ff2a: f203 13f3 addw r3, r3, #499 ; 0x1f3 -1000ff2e: fb93 f3f2 sdiv r3, r3, r2 -1000ff32: 8363 strh r3, [r4, #26] -1000ff34: b002 add sp, #8 -1000ff36: bd70 pop {r4, r5, r6, pc} -1000ff38: 10040074 .word 0x10040074 - -1000ff3c : -1000ff3c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1000ff40: 8953 ldrh r3, [r2, #10] -1000ff42: b089 sub sp, #36 ; 0x24 -1000ff44: 2b2b cmp r3, #43 ; 0x2b -1000ff46: 4606 mov r6, r0 -1000ff48: 4693 mov fp, r2 -1000ff4a: f8d0 a020 ldr.w sl, [r0, #32] -1000ff4e: d95c bls.n 1001000a -1000ff50: 6852 ldr r2, [r2, #4] -1000ff52: 7813 ldrb r3, [r2, #0] -1000ff54: 2b02 cmp r3, #2 -1000ff56: d158 bne.n 1001000a -1000ff58: f896 302a ldrb.w r3, [r6, #42] ; 0x2a -1000ff5c: f100 012b add.w r1, r0, #43 ; 0x2b -1000ff60: 332b adds r3, #43 ; 0x2b -1000ff62: f102 001c add.w r0, r2, #28 -1000ff66: 4433 add r3, r6 -1000ff68: 4299 cmp r1, r3 -1000ff6a: d148 bne.n 1000fffe -1000ff6c: 6850 ldr r0, [r2, #4] -1000ff6e: f7ff fccf bl 1000f910 -1000ff72: f8da 3000 ldr.w r3, [sl] -1000ff76: 4298 cmp r0, r3 -1000ff78: d147 bne.n 1001000a -1000ff7a: 220a movs r2, #10 -1000ff7c: 2100 movs r1, #0 -1000ff7e: 48ad ldr r0, [pc, #692] ; (10010234 ) -1000ff80: f00a fe1a bl 1001abb8 -1000ff84: f8bb 300a ldrh.w r3, [fp, #10] -1000ff88: 2b2b cmp r3, #43 ; 0x2b -1000ff8a: d93e bls.n 1001000a -1000ff8c: f8db 3004 ldr.w r3, [fp, #4] -1000ff90: 24f0 movs r4, #240 ; 0xf0 -1000ff92: f8ca 3008 str.w r3, [sl, #8] -1000ff96: 2300 movs r3, #0 -1000ff98: f8bb 9008 ldrh.w r9, [fp, #8] -1000ff9c: 9301 str r3, [sp, #4] -1000ff9e: 465f mov r7, fp -1000ffa0: 897b ldrh r3, [r7, #10] -1000ffa2: 42a3 cmp r3, r4 -1000ffa4: d93a bls.n 1001001c -1000ffa6: 687b ldr r3, [r7, #4] -1000ffa8: 9302 str r3, [sp, #8] -1000ffaa: 9b02 ldr r3, [sp, #8] -1000ffac: 5d1a ldrb r2, [r3, r4] -1000ffae: 2aff cmp r2, #255 ; 0xff -1000ffb0: f000 80c1 beq.w 10010136 -1000ffb4: 454c cmp r4, r9 -1000ffb6: f080 80be bcs.w 10010136 -1000ffba: 1ca3 adds r3, r4, #2 -1000ffbc: b29b uxth r3, r3 -1000ffbe: 8979 ldrh r1, [r7, #10] -1000ffc0: 9305 str r3, [sp, #20] -1000ffc2: 1c63 adds r3, r4, #1 -1000ffc4: 428b cmp r3, r1 -1000ffc6: da33 bge.n 10010030 -1000ffc8: 9b02 ldr r3, [sp, #8] -1000ffca: 4423 add r3, r4 -1000ffcc: 785b ldrb r3, [r3, #1] -1000ffce: 2a33 cmp r2, #51 ; 0x33 -1000ffd0: f000 8084 beq.w 100100dc -1000ffd4: f200 8172 bhi.w 100102bc -1000ffd8: 2a01 cmp r2, #1 -1000ffda: d073 beq.n 100100c4 -1000ffdc: d32f bcc.n 1001003e -1000ffde: 2a03 cmp r2, #3 -1000ffe0: d076 beq.n 100100d0 -1000ffe2: 2a06 cmp r2, #6 -1000ffe4: f040 8192 bne.w 1001030c -1000ffe8: 079a lsls r2, r3, #30 -1000ffea: d10e bne.n 1001000a -1000ffec: 2b08 cmp r3, #8 -1000ffee: 461d mov r5, r3 -1000fff0: bf28 it cs -1000fff2: 2508 movcs r5, #8 -1000fff4: 429d cmp r5, r3 -1000fff6: d808 bhi.n 1001000a -1000fff8: f04f 0808 mov.w r8, #8 -1000fffc: e025 b.n 1001004a -1000fffe: f811 5b01 ldrb.w r5, [r1], #1 -10010002: f810 4b01 ldrb.w r4, [r0], #1 -10010006: 42a5 cmp r5, r4 -10010008: d0ae beq.n 1000ff68 -1001000a: 2300 movs r3, #0 -1001000c: 4658 mov r0, fp -1001000e: f8ca 3008 str.w r3, [sl, #8] -10010012: f001 f832 bl 1001107a -10010016: b009 add sp, #36 ; 0x24 -10010018: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1001001c: 683f ldr r7, [r7, #0] -1001001e: 1ae4 subs r4, r4, r3 -10010020: eba9 0903 sub.w r9, r9, r3 -10010024: b2a4 uxth r4, r4 -10010026: fa1f f989 uxth.w r9, r9 -1001002a: 2f00 cmp r7, #0 -1001002c: d1b8 bne.n 1000ffa0 -1001002e: e7ec b.n 1001000a -10010030: 683b ldr r3, [r7, #0] -10010032: 2b00 cmp r3, #0 -10010034: f000 815d beq.w 100102f2 -10010038: 685b ldr r3, [r3, #4] -1001003a: 781b ldrb r3, [r3, #0] -1001003c: e7c7 b.n 1000ffce -1001003e: 2500 movs r5, #0 -10010040: f04f 38ff mov.w r8, #4294967295 -10010044: 462b mov r3, r5 -10010046: 3c01 subs r4, #1 -10010048: b2a4 uxth r4, r4 -1001004a: 3402 adds r4, #2 -1001004c: 441c add r4, r3 -1001004e: b2a4 uxth r4, r4 -10010050: 2d00 cmp r5, #0 -10010052: d064 beq.n 1001011e -10010054: ab08 add r3, sp, #32 -10010056: 9304 str r3, [sp, #16] -10010058: 2300 movs r3, #0 -1001005a: 9a04 ldr r2, [sp, #16] -1001005c: f8cd 8000 str.w r8, [sp] -10010060: f842 3d04 str.w r3, [r2, #-4]! -10010064: 9204 str r2, [sp, #16] -10010066: 4a73 ldr r2, [pc, #460] ; (10010234 ) -10010068: f108 33ff add.w r3, r8, #4294967295 -1001006c: 18d3 adds r3, r2, r3 -1001006e: 9303 str r3, [sp, #12] -10010070: 9b00 ldr r3, [sp, #0] -10010072: 9a05 ldr r2, [sp, #20] -10010074: eba3 0308 sub.w r3, r3, r8 -10010078: eb02 0383 add.w r3, r2, r3, lsl #2 -1001007c: 9a03 ldr r2, [sp, #12] -1001007e: b29b uxth r3, r3 -10010080: 7852 ldrb r2, [r2, #1] -10010082: 2a00 cmp r2, #0 -10010084: d14b bne.n 1001011e -10010086: 2d03 cmp r5, #3 -10010088: bf94 ite ls -1001008a: 462a movls r2, r5 -1001008c: 2204 movhi r2, #4 -1001008e: 9904 ldr r1, [sp, #16] -10010090: 4638 mov r0, r7 -10010092: f001 f937 bl 10011304 -10010096: 2d04 cmp r5, #4 -10010098: d934 bls.n 10010104 -1001009a: 07ab lsls r3, r5, #30 -1001009c: d1b5 bne.n 1001000a -1001009e: f04f 0201 mov.w r2, #1 -100100a2: 9b03 ldr r3, [sp, #12] -100100a4: 9807 ldr r0, [sp, #28] -100100a6: f803 2f01 strb.w r2, [r3, #1]! -100100aa: 9303 str r3, [sp, #12] -100100ac: f7ff fc2e bl 1000f90c -100100b0: 9a00 ldr r2, [sp, #0] -100100b2: 4b61 ldr r3, [pc, #388] ; (10010238 ) -100100b4: 3d04 subs r5, #4 -100100b6: f843 0022 str.w r0, [r3, r2, lsl #2] -100100ba: 4613 mov r3, r2 -100100bc: 3301 adds r3, #1 -100100be: b2ed uxtb r5, r5 -100100c0: 9300 str r3, [sp, #0] -100100c2: e7d5 b.n 10010070 -100100c4: 2b04 cmp r3, #4 -100100c6: d1a0 bne.n 1001000a -100100c8: 461d mov r5, r3 -100100ca: f04f 0806 mov.w r8, #6 -100100ce: e7bc b.n 1001004a -100100d0: 2b03 cmp r3, #3 -100100d2: d99a bls.n 1001000a -100100d4: f04f 0807 mov.w r8, #7 -100100d8: 2504 movs r5, #4 -100100da: e7b6 b.n 1001004a -100100dc: 2b04 cmp r3, #4 -100100de: d194 bne.n 1001000a -100100e0: 461d mov r5, r3 -100100e2: f04f 0803 mov.w r8, #3 -100100e6: e7b0 b.n 1001004a -100100e8: 2b01 cmp r3, #1 -100100ea: d18e bne.n 1001000a -100100ec: 461d mov r5, r3 -100100ee: f04f 0800 mov.w r8, #0 -100100f2: e7aa b.n 1001004a -100100f4: 2b04 cmp r3, #4 -100100f6: d188 bne.n 1001000a -100100f8: 461d mov r5, r3 -100100fa: f04f 0802 mov.w r8, #2 -100100fe: e7a4 b.n 1001004a -10010100: 2b04 cmp r3, #4 -10010102: e0e5 b.n 100102d0 -10010104: d15b bne.n 100101be -10010106: 9807 ldr r0, [sp, #28] -10010108: f7ff fc02 bl 1000f910 -1001010c: 9007 str r0, [sp, #28] -1001010e: 2301 movs r3, #1 -10010110: 4a48 ldr r2, [pc, #288] ; (10010234 ) -10010112: 9900 ldr r1, [sp, #0] -10010114: 5453 strb r3, [r2, r1] -10010116: 9b07 ldr r3, [sp, #28] -10010118: 4a47 ldr r2, [pc, #284] ; (10010238 ) -1001011a: f842 3021 str.w r3, [r2, r1, lsl #2] -1001011e: 897b ldrh r3, [r7, #10] -10010120: 42a3 cmp r3, r4 -10010122: f63f af42 bhi.w 1000ffaa -10010126: 1ae4 subs r4, r4, r3 -10010128: eba9 0903 sub.w r9, r9, r3 -1001012c: b2a4 uxth r4, r4 -1001012e: fa1f f989 uxth.w r9, r9 -10010132: 454c cmp r4, r9 -10010134: d34a bcc.n 100101cc -10010136: 4a3f ldr r2, [pc, #252] ; (10010234 ) -10010138: 7813 ldrb r3, [r2, #0] -1001013a: 4615 mov r5, r2 -1001013c: 2b00 cmp r3, #0 -1001013e: d147 bne.n 100101d0 -10010140: 9b01 ldr r3, [sp, #4] -10010142: 2b00 cmp r3, #0 -10010144: d14c bne.n 100101e0 -10010146: 786b ldrb r3, [r5, #1] -10010148: 2b00 cmp r3, #0 -1001014a: f43f af5e beq.w 1001000a -1001014e: 4b3a ldr r3, [pc, #232] ; (10010238 ) -10010150: 791a ldrb r2, [r3, #4] -10010152: 461f mov r7, r3 -10010154: 2a05 cmp r2, #5 -10010156: d173 bne.n 10010240 -10010158: f89a 300c ldrb.w r3, [sl, #12] -1001015c: 2b01 cmp r3, #1 -1001015e: d161 bne.n 10010224 -10010160: 9b01 ldr r3, [sp, #4] -10010162: 6a34 ldr r4, [r6, #32] -10010164: 6323 str r3, [r4, #48] ; 0x30 -10010166: 6363 str r3, [r4, #52] ; 0x34 -10010168: 78eb ldrb r3, [r5, #3] -1001016a: b10b cbz r3, 10010170 -1001016c: 68fb ldr r3, [r7, #12] -1001016e: 63e3 str r3, [r4, #60] ; 0x3c -10010170: 792b ldrb r3, [r5, #4] -10010172: 2b00 cmp r3, #0 -10010174: d042 beq.n 100101fc -10010176: 693b ldr r3, [r7, #16] -10010178: 6423 str r3, [r4, #64] ; 0x40 -1001017a: 796b ldrb r3, [r5, #5] -1001017c: 2b00 cmp r3, #0 -1001017e: d040 beq.n 10010202 -10010180: 697b ldr r3, [r7, #20] -10010182: 6463 str r3, [r4, #68] ; 0x44 -10010184: 68a3 ldr r3, [r4, #8] -10010186: 691b ldr r3, [r3, #16] -10010188: 62e3 str r3, [r4, #44] ; 0x2c -1001018a: 79ab ldrb r3, [r5, #6] -1001018c: b123 cbz r3, 10010198 -1001018e: 69b8 ldr r0, [r7, #24] -10010190: f7ff fbbc bl 1000f90c -10010194: 2301 movs r3, #1 -10010196: 6320 str r0, [r4, #48] ; 0x30 -10010198: 73a3 strb r3, [r4, #14] -1001019a: 79eb ldrb r3, [r5, #7] -1001019c: b11b cbz r3, 100101a6 -1001019e: 69f8 ldr r0, [r7, #28] -100101a0: f7ff fbb4 bl 1000f90c -100101a4: 6360 str r0, [r4, #52] ; 0x34 -100101a6: 2400 movs r4, #0 -100101a8: 4f24 ldr r7, [pc, #144] ; (1001023c ) -100101aa: fa5f f884 uxtb.w r8, r4 -100101ae: 3401 adds r4, #1 -100101b0: 192b adds r3, r5, r4 -100101b2: 79db ldrb r3, [r3, #7] -100101b4: bb63 cbnz r3, 10010210 -100101b6: 4630 mov r0, r6 -100101b8: f7ff fd60 bl 1000fc7c -100101bc: e725 b.n 1001000a -100101be: 2d01 cmp r5, #1 -100101c0: f47f af23 bne.w 1001000a -100101c4: f89d 301c ldrb.w r3, [sp, #28] -100101c8: 9307 str r3, [sp, #28] -100101ca: e7a0 b.n 1001010e -100101cc: 683f ldr r7, [r7, #0] -100101ce: e6ea b.n 1000ffa6 -100101d0: 2100 movs r1, #0 -100101d2: 4b19 ldr r3, [pc, #100] ; (10010238 ) -100101d4: 7011 strb r1, [r2, #0] -100101d6: 681b ldr r3, [r3, #0] -100101d8: 2b01 cmp r3, #1 -100101da: d00b beq.n 100101f4 -100101dc: 2b02 cmp r3, #2 -100101de: d105 bne.n 100101ec -100101e0: 2300 movs r3, #0 -100101e2: f04f 096c mov.w r9, #108 ; 0x6c -100101e6: 9301 str r3, [sp, #4] -100101e8: 242c movs r4, #44 ; 0x2c -100101ea: e6d8 b.n 1000ff9e -100101ec: 2b03 cmp r3, #3 -100101ee: d1a7 bne.n 10010140 -100101f0: 2301 movs r3, #1 -100101f2: 9301 str r3, [sp, #4] -100101f4: f04f 09ec mov.w r9, #236 ; 0xec -100101f8: 246c movs r4, #108 ; 0x6c -100101fa: e6d0 b.n 1000ff9e -100101fc: 6be3 ldr r3, [r4, #60] ; 0x3c -100101fe: 085b lsrs r3, r3, #1 -10010200: e7ba b.n 10010178 -10010202: 6be2 ldr r2, [r4, #60] ; 0x3c -10010204: 0893 lsrs r3, r2, #2 -10010206: eb03 0352 add.w r3, r3, r2, lsr #1 -1001020a: eb03 03d2 add.w r3, r3, r2, lsr #3 -1001020e: e7b8 b.n 10010182 -10010210: f857 0f04 ldr.w r0, [r7, #4]! -10010214: f7ff fb7a bl 1000f90c -10010218: a907 add r1, sp, #28 -1001021a: 9007 str r0, [sp, #28] -1001021c: 4640 mov r0, r8 -1001021e: f000 fc5d bl 10010adc -10010222: e7c2 b.n 100101aa -10010224: 3b03 subs r3, #3 -10010226: 2b02 cmp r3, #2 -10010228: f63f aeef bhi.w 1001000a -1001022c: 4630 mov r0, r6 -1001022e: f7ff fd38 bl 1000fca2 -10010232: e6ea b.n 1001000a -10010234: 1004aa44 .word 0x1004aa44 -10010238: 1004aa50 .word 0x1004aa50 -1001023c: 1004aa6c .word 0x1004aa6c -10010240: 2a06 cmp r2, #6 -10010242: d11f bne.n 10010284 -10010244: f89a 300c ldrb.w r3, [sl, #12] -10010248: 1eda subs r2, r3, #3 -1001024a: 2a02 cmp r2, #2 -1001024c: d902 bls.n 10010254 -1001024e: 2b01 cmp r3, #1 -10010250: f47f aedb bne.w 1001000a -10010254: 4630 mov r0, r6 -10010256: 6a34 ldr r4, [r6, #32] -10010258: f000 fe75 bl 10010f46 -1001025c: 4630 mov r0, r6 -1001025e: 4932 ldr r1, [pc, #200] ; (10010328 ) -10010260: f000 fde2 bl 10010e28 -10010264: 4630 mov r0, r6 -10010266: 4930 ldr r1, [pc, #192] ; (10010328 ) -10010268: f000 fe44 bl 10010ef4 -1001026c: 4630 mov r0, r6 -1001026e: 492e ldr r1, [pc, #184] ; (10010328 ) -10010270: f000 fe44 bl 10010efc -10010274: 4620 mov r0, r4 -10010276: 210c movs r1, #12 -10010278: f7ff fb4c bl 1000f914 -1001027c: 4630 mov r0, r6 -1001027e: f7ff fc53 bl 1000fb28 -10010282: e6c2 b.n 1001000a -10010284: 2a02 cmp r2, #2 -10010286: f47f aec0 bne.w 1001000a -1001028a: f89a 200c ldrb.w r2, [sl, #12] -1001028e: 2a06 cmp r2, #6 -10010290: f47f aebb bne.w 1001000a -10010294: f8bd 2004 ldrh.w r2, [sp, #4] -10010298: f8aa 201a strh.w r2, [sl, #26] -1001029c: 78aa ldrb r2, [r5, #2] -1001029e: 2a00 cmp r2, #0 -100102a0: f43f aeb3 beq.w 1001000a -100102a4: 6898 ldr r0, [r3, #8] -100102a6: 6a34 ldr r4, [r6, #32] -100102a8: f7ff fb30 bl 1000f90c -100102ac: 68a3 ldr r3, [r4, #8] -100102ae: 62a0 str r0, [r4, #40] ; 0x28 -100102b0: 691b ldr r3, [r3, #16] -100102b2: 4630 mov r0, r6 -100102b4: 62e3 str r3, [r4, #44] ; 0x2c -100102b6: f7ff fdcd bl 1000fe54 -100102ba: e6a6 b.n 1001000a -100102bc: 2a36 cmp r2, #54 ; 0x36 -100102be: f43f af19 beq.w 100100f4 -100102c2: d80a bhi.n 100102da -100102c4: 2a34 cmp r2, #52 ; 0x34 -100102c6: f43f af0f beq.w 100100e8 -100102ca: 2a35 cmp r2, #53 ; 0x35 -100102cc: d11e bne.n 1001030c -100102ce: 2b01 cmp r3, #1 -100102d0: f47f ae9b bne.w 1001000a -100102d4: 461d mov r5, r3 -100102d6: 4698 mov r8, r3 -100102d8: e6b7 b.n 1001004a -100102da: 2a3a cmp r2, #58 ; 0x3a -100102dc: f43f af10 beq.w 10010100 -100102e0: 2a3b cmp r2, #59 ; 0x3b -100102e2: d113 bne.n 1001030c -100102e4: 2b04 cmp r3, #4 -100102e6: f47f ae90 bne.w 1001000a -100102ea: 461d mov r5, r3 -100102ec: f04f 0805 mov.w r8, #5 -100102f0: e6ab b.n 1001004a -100102f2: 2a06 cmp r2, #6 -100102f4: f43f ae78 beq.w 1000ffe8 -100102f8: d80c bhi.n 10010314 -100102fa: 2a01 cmp r2, #1 -100102fc: f43f ae85 beq.w 1001000a -10010300: f4ff ae9d bcc.w 1001003e -10010304: 2a03 cmp r2, #3 -10010306: f43f ae80 beq.w 1001000a -1001030a: 2300 movs r3, #0 -1001030c: 9a05 ldr r2, [sp, #20] -1001030e: 441a add r2, r3 -10010310: b294 uxth r4, r2 -10010312: e704 b.n 1001011e -10010314: 2a33 cmp r2, #51 ; 0x33 -10010316: d3f8 bcc.n 1001030a -10010318: 2a36 cmp r2, #54 ; 0x36 -1001031a: f67f ae76 bls.w 1001000a -1001031e: 3a3a subs r2, #58 ; 0x3a -10010320: 2a01 cmp r2, #1 -10010322: f67f ae72 bls.w 1001000a -10010326: e7f0 b.n 1001030a -10010328: 10040070 .word 0x10040070 - -1001032c : -1001032c: b537 push {r0, r1, r2, r4, r5, lr} -1001032e: 4605 mov r5, r0 -10010330: 2800 cmp r0, #0 -10010332: d037 beq.n 100103a4 -10010334: 6a04 ldr r4, [r0, #32] -10010336: 2c00 cmp r4, #0 -10010338: d034 beq.n 100103a4 -1001033a: 7b23 ldrb r3, [r4, #12] -1001033c: 2b08 cmp r3, #8 -1001033e: d131 bne.n 100103a4 -10010340: 680a ldr r2, [r1, #0] -10010342: 6ae3 ldr r3, [r4, #44] ; 0x2c -10010344: 429a cmp r2, r3 -10010346: d12d bne.n 100103a4 -10010348: 210c movs r1, #12 -1001034a: 4620 mov r0, r4 -1001034c: f7ff fae2 bl 1000f914 -10010350: 2204 movs r2, #4 -10010352: 4621 mov r1, r4 -10010354: 4628 mov r0, r5 -10010356: f7ff fb3b bl 1000f9d0 -1001035a: b9f0 cbnz r0, 1001039a -1001035c: 2204 movs r2, #4 -1001035e: 2132 movs r1, #50 ; 0x32 -10010360: 4620 mov r0, r4 -10010362: f7ff fadf bl 1000f924 -10010366: 6ae0 ldr r0, [r4, #44] ; 0x2c -10010368: f7ff fad2 bl 1000f910 -1001036c: 4601 mov r1, r0 -1001036e: 4620 mov r0, r4 -10010370: f7ff fafe bl 1000f970 -10010374: 4620 mov r0, r4 -10010376: f7ff fb16 bl 1000f9a6 -1001037a: 8b21 ldrh r1, [r4, #24] -1001037c: 6920 ldr r0, [r4, #16] -1001037e: 31f0 adds r1, #240 ; 0xf0 -10010380: b289 uxth r1, r1 -10010382: f000 ff2d bl 100111e0 -10010386: 9500 str r5, [sp, #0] -10010388: 2343 movs r3, #67 ; 0x43 -1001038a: 4a07 ldr r2, [pc, #28] ; (100103a8 ) -1001038c: 6921 ldr r1, [r4, #16] -1001038e: 6860 ldr r0, [r4, #4] -10010390: f003 fcd0 bl 10013d34 -10010394: 4620 mov r0, r4 -10010396: f7ff fbbb bl 1000fb10 -1001039a: 7b63 ldrb r3, [r4, #13] -1001039c: 3301 adds r3, #1 -1001039e: 7363 strb r3, [r4, #13] -100103a0: 2314 movs r3, #20 -100103a2: 8363 strh r3, [r4, #26] -100103a4: b003 add sp, #12 -100103a6: bd30 pop {r4, r5, pc} -100103a8: 10040074 .word 0x10040074 - -100103ac : -100103ac: b573 push {r0, r1, r4, r5, r6, lr} -100103ae: 4606 mov r6, r0 -100103b0: 6a04 ldr r4, [r0, #32] -100103b2: 2105 movs r1, #5 -100103b4: 4620 mov r0, r4 -100103b6: f7ff faad bl 1000f914 -100103ba: 2203 movs r2, #3 -100103bc: 4621 mov r1, r4 -100103be: 4630 mov r0, r6 -100103c0: f7ff fb06 bl 1000f9d0 -100103c4: 4605 mov r5, r0 -100103c6: bb08 cbnz r0, 1001040c -100103c8: 2202 movs r2, #2 -100103ca: 2139 movs r1, #57 ; 0x39 -100103cc: 4620 mov r0, r4 -100103ce: f7ff faa9 bl 1000f924 -100103d2: 8d31 ldrh r1, [r6, #40] ; 0x28 -100103d4: 4620 mov r0, r4 -100103d6: f7ff fabc bl 1000f952 -100103da: f106 0124 add.w r1, r6, #36 ; 0x24 -100103de: 4620 mov r0, r4 -100103e0: f7ff fcce bl 1000fd80 -100103e4: 4620 mov r0, r4 -100103e6: f7ff fade bl 1000f9a6 -100103ea: 8b21 ldrh r1, [r4, #24] -100103ec: 6920 ldr r0, [r4, #16] -100103ee: 31f0 adds r1, #240 ; 0xf0 -100103f0: b289 uxth r1, r1 -100103f2: f000 fef5 bl 100111e0 -100103f6: 9600 str r6, [sp, #0] -100103f8: 2343 movs r3, #67 ; 0x43 -100103fa: f104 0228 add.w r2, r4, #40 ; 0x28 -100103fe: 6921 ldr r1, [r4, #16] -10010400: 6860 ldr r0, [r4, #4] -10010402: f003 fc97 bl 10013d34 -10010406: 4620 mov r0, r4 -10010408: f7ff fb82 bl 1000fb10 -1001040c: 7b63 ldrb r3, [r4, #13] -1001040e: 4628 mov r0, r5 -10010410: 3301 adds r3, #1 -10010412: b2db uxtb r3, r3 -10010414: 2b09 cmp r3, #9 -10010416: 7363 strb r3, [r4, #13] -10010418: bf96 itet ls -1001041a: ebc3 1243 rsbls r2, r3, r3, lsl #5 -1001041e: f644 6320 movwhi r3, #20000 ; 0x4e20 -10010422: eb03 0382 addls.w r3, r3, r2, lsl #2 -10010426: f44f 72fa mov.w r2, #500 ; 0x1f4 -1001042a: bf9c itt ls -1001042c: 011b lslls r3, r3, #4 -1001042e: b29b uxthls r3, r3 -10010430: f203 13f3 addw r3, r3, #499 ; 0x1f3 -10010434: fb93 f3f2 sdiv r3, r3, r2 -10010438: 8363 strh r3, [r4, #26] -1001043a: b002 add sp, #8 -1001043c: bd70 pop {r4, r5, r6, pc} - ... - -10010440 : -10010440: b573 push {r0, r1, r4, r5, r6, lr} -10010442: 6a04 ldr r4, [r0, #32] -10010444: 4605 mov r5, r0 -10010446: 2100 movs r1, #0 -10010448: 4620 mov r0, r4 -1001044a: f7ff fa63 bl 1000f914 -1001044e: 2300 movs r3, #0 -10010450: 2207 movs r2, #7 -10010452: 62a3 str r3, [r4, #40] ; 0x28 -10010454: 62e3 str r3, [r4, #44] ; 0x2c -10010456: 6323 str r3, [r4, #48] ; 0x30 -10010458: 6363 str r3, [r4, #52] ; 0x34 -1001045a: 6463 str r3, [r4, #68] ; 0x44 -1001045c: 6423 str r3, [r4, #64] ; 0x40 -1001045e: 63e3 str r3, [r4, #60] ; 0x3c -10010460: 4621 mov r1, r4 -10010462: 4628 mov r0, r5 -10010464: f7ff fab4 bl 1000f9d0 -10010468: 4606 mov r6, r0 -1001046a: b998 cbnz r0, 10010494 -1001046c: 4620 mov r0, r4 -1001046e: f7ff fa9a bl 1000f9a6 -10010472: 8b21 ldrh r1, [r4, #24] -10010474: 6920 ldr r0, [r4, #16] -10010476: 31f0 adds r1, #240 ; 0xf0 -10010478: b289 uxth r1, r1 -1001047a: f000 feb1 bl 100111e0 -1001047e: 9500 str r5, [sp, #0] -10010480: 2343 movs r3, #67 ; 0x43 -10010482: f104 0228 add.w r2, r4, #40 ; 0x28 -10010486: 6921 ldr r1, [r4, #16] -10010488: 6860 ldr r0, [r4, #4] -1001048a: f003 fc53 bl 10013d34 -1001048e: 4620 mov r0, r4 -10010490: f7ff fb3e bl 1000fb10 -10010494: 7b63 ldrb r3, [r4, #13] -10010496: 4628 mov r0, r5 -10010498: 3301 adds r3, #1 -1001049a: b2db uxtb r3, r3 -1001049c: 2b09 cmp r3, #9 -1001049e: bf98 it ls -100104a0: ebc3 1243 rsbls r2, r3, r3, lsl #5 -100104a4: 7363 strb r3, [r4, #13] -100104a6: bf8c ite hi -100104a8: f242 7310 movwhi r3, #10000 ; 0x2710 -100104ac: eb03 0382 addls.w r3, r3, r2, lsl #2 -100104b0: f44f 72fa mov.w r2, #500 ; 0x1f4 -100104b4: bf9c itt ls -100104b6: 00db lslls r3, r3, #3 -100104b8: b29b uxthls r3, r3 -100104ba: f203 13f3 addw r3, r3, #499 ; 0x1f3 -100104be: fb93 f3f2 sdiv r3, r3, r2 -100104c2: 8363 strh r3, [r4, #26] -100104c4: f000 fd3f bl 10010f46 -100104c8: 4628 mov r0, r5 -100104ca: 4907 ldr r1, [pc, #28] ; (100104e8 ) -100104cc: f000 fcac bl 10010e28 -100104d0: 4628 mov r0, r5 -100104d2: 4905 ldr r1, [pc, #20] ; (100104e8 ) -100104d4: f000 fd0e bl 10010ef4 -100104d8: 4628 mov r0, r5 -100104da: 4903 ldr r1, [pc, #12] ; (100104e8 ) -100104dc: f000 fd0e bl 10010efc -100104e0: 4630 mov r0, r6 -100104e2: b002 add sp, #8 -100104e4: bd70 pop {r4, r5, r6, pc} -100104e6: bf00 nop -100104e8: 10040070 .word 0x10040070 - -100104ec : -100104ec: b570 push {r4, r5, r6, lr} -100104ee: f240 2619 movw r6, #537 ; 0x219 -100104f2: 4b1f ldr r3, [pc, #124] ; (10010570 ) -100104f4: 681d ldr r5, [r3, #0] -100104f6: b905 cbnz r5, 100104fa -100104f8: bd70 pop {r4, r5, r6, pc} -100104fa: 6a2c ldr r4, [r5, #32] -100104fc: b164 cbz r4, 10010518 -100104fe: 8ca3 ldrh r3, [r4, #36] ; 0x24 -10010500: 8ce2 ldrh r2, [r4, #38] ; 0x26 -10010502: 3301 adds r3, #1 -10010504: b29b uxth r3, r3 -10010506: 429a cmp r2, r3 -10010508: 84a3 strh r3, [r4, #36] ; 0x24 -1001050a: d107 bne.n 1001051c -1001050c: 4628 mov r0, r5 -1001050e: f7ff ff97 bl 10010440 -10010512: 4628 mov r0, r5 -10010514: f7ff fb08 bl 1000fb28 -10010518: 682d ldr r5, [r5, #0] -1001051a: e7ec b.n 100104f6 -1001051c: 8c63 ldrh r3, [r4, #34] ; 0x22 -1001051e: 1e5a subs r2, r3, #1 -10010520: 2b01 cmp r3, #1 -10010522: 8462 strh r2, [r4, #34] ; 0x22 -10010524: d114 bne.n 10010550 -10010526: 7b23 ldrb r3, [r4, #12] -10010528: 3b01 subs r3, #1 -1001052a: b2db uxtb r3, r3 -1001052c: 2b09 cmp r3, #9 -1001052e: d8f3 bhi.n 10010518 -10010530: fa26 f303 lsr.w r3, r6, r3 -10010534: 07db lsls r3, r3, #31 -10010536: d5ef bpl.n 10010518 -10010538: 4628 mov r0, r5 -1001053a: f7ff fc41 bl 1000fdc0 -1001053e: 6a2a ldr r2, [r5, #32] -10010540: 8ca1 ldrh r1, [r4, #36] ; 0x24 -10010542: 8cd3 ldrh r3, [r2, #38] ; 0x26 -10010544: 1a5b subs r3, r3, r1 -10010546: 2b01 cmp r3, #1 -10010548: dde6 ble.n 10010518 -1001054a: 105b asrs r3, r3, #1 -1001054c: 8453 strh r3, [r2, #34] ; 0x22 -1001054e: e7e3 b.n 10010518 -10010550: 8c23 ldrh r3, [r4, #32] -10010552: 1e5a subs r2, r3, #1 -10010554: 2b01 cmp r3, #1 -10010556: 8422 strh r2, [r4, #32] -10010558: d1de bne.n 10010518 -1001055a: 7b23 ldrb r3, [r4, #12] -1001055c: f003 02fb and.w r2, r3, #251 ; 0xfb -10010560: 2a01 cmp r2, #1 -10010562: d001 beq.n 10010568 -10010564: 2b0a cmp r3, #10 -10010566: d1d7 bne.n 10010518 -10010568: 4628 mov r0, r5 -1001056a: f7ff ff1f bl 100103ac -1001056e: e7d3 b.n 10010518 -10010570: 1004b0fc .word 0x1004b0fc - -10010574 : -10010574: b538 push {r3, r4, r5, lr} -10010576: 2500 movs r5, #0 -10010578: 4b23 ldr r3, [pc, #140] ; (10010608 ) -1001057a: 681c ldr r4, [r3, #0] -1001057c: b904 cbnz r4, 10010580 -1001057e: bd38 pop {r3, r4, r5, pc} -10010580: 6a23 ldr r3, [r4, #32] -10010582: b123 cbz r3, 1001058e -10010584: 8b5a ldrh r2, [r3, #26] -10010586: 2a01 cmp r2, #1 -10010588: d903 bls.n 10010592 -1001058a: 3a01 subs r2, #1 -1001058c: 835a strh r2, [r3, #26] -1001058e: 6824 ldr r4, [r4, #0] -10010590: e7f4 b.n 1001057c -10010592: d1fc bne.n 1001058e -10010594: 7b1a ldrb r2, [r3, #12] -10010596: 835d strh r5, [r3, #26] -10010598: 2a0c cmp r2, #12 -1001059a: d001 beq.n 100105a0 -1001059c: 2a06 cmp r2, #6 -1001059e: d103 bne.n 100105a8 -100105a0: 4620 mov r0, r4 -100105a2: f7ff fac1 bl 1000fb28 -100105a6: e7f2 b.n 1001058e -100105a8: 2a01 cmp r2, #1 -100105aa: d106 bne.n 100105ba -100105ac: 7b5b ldrb r3, [r3, #13] -100105ae: 4620 mov r0, r4 -100105b0: 2b05 cmp r3, #5 -100105b2: d81d bhi.n 100105f0 -100105b4: f7ff fc4e bl 1000fe54 -100105b8: e7e9 b.n 1001058e -100105ba: 2a08 cmp r2, #8 -100105bc: d109 bne.n 100105d2 -100105be: 7b5b ldrb r3, [r3, #13] -100105c0: 4620 mov r0, r4 -100105c2: 2b01 cmp r3, #1 -100105c4: d802 bhi.n 100105cc -100105c6: f7ff fb59 bl 1000fc7c -100105ca: e7e0 b.n 1001058e -100105cc: f7ff fb69 bl 1000fca2 -100105d0: e7dd b.n 1001058e -100105d2: 2a05 cmp r2, #5 -100105d4: d103 bne.n 100105de -100105d6: 4620 mov r0, r4 -100105d8: f7ff fee8 bl 100103ac -100105dc: e7d7 b.n 1001058e -100105de: 2a04 cmp r2, #4 -100105e0: d109 bne.n 100105f6 -100105e2: 7b5b ldrb r3, [r3, #13] -100105e4: 4620 mov r0, r4 -100105e6: 2b08 cmp r3, #8 -100105e8: d802 bhi.n 100105f0 -100105ea: f7ff fbe9 bl 1000fdc0 -100105ee: e7ce b.n 1001058e -100105f0: f7ff ff26 bl 10010440 -100105f4: e7d4 b.n 100105a0 -100105f6: 2a03 cmp r2, #3 -100105f8: d1c9 bne.n 1001058e -100105fa: 7b5b ldrb r3, [r3, #13] -100105fc: 4620 mov r0, r4 -100105fe: 2b01 cmp r3, #1 -10010600: d8cf bhi.n 100105a2 -10010602: f7ff fae9 bl 1000fbd8 -10010606: e7c2 b.n 1001058e -10010608: 1004b0fc .word 0x1004b0fc - -1001060c : -1001060c: b573 push {r0, r1, r4, r5, r6, lr} -1001060e: 4605 mov r5, r0 -10010610: 6a04 ldr r4, [r0, #32] -10010612: 210b movs r1, #11 -10010614: 4620 mov r0, r4 -10010616: f7ff f97d bl 1000f914 -1001061a: 2203 movs r2, #3 -1001061c: 6a29 ldr r1, [r5, #32] -1001061e: 4628 mov r0, r5 -10010620: f7ff f9d6 bl 1000f9d0 -10010624: 4606 mov r6, r0 -10010626: bb40 cbnz r0, 1001067a -10010628: 2201 movs r2, #1 -1001062a: 2135 movs r1, #53 ; 0x35 -1001062c: 4620 mov r0, r4 -1001062e: f7ff f979 bl 1000f924 -10010632: 2107 movs r1, #7 -10010634: 4620 mov r0, r4 -10010636: f7ff f983 bl 1000f940 -1001063a: 2204 movs r2, #4 -1001063c: 2136 movs r1, #54 ; 0x36 -1001063e: 4620 mov r0, r4 -10010640: f7ff f970 bl 1000f924 -10010644: 6aa0 ldr r0, [r4, #40] ; 0x28 -10010646: f7ff f963 bl 1000f910 -1001064a: 4601 mov r1, r0 -1001064c: 4620 mov r0, r4 -1001064e: f7ff f98f bl 1000f970 -10010652: 4620 mov r0, r4 -10010654: f7ff f9a7 bl 1000f9a6 -10010658: 8b21 ldrh r1, [r4, #24] -1001065a: 6920 ldr r0, [r4, #16] -1001065c: 31f0 adds r1, #240 ; 0xf0 -1001065e: b289 uxth r1, r1 -10010660: f000 fdbe bl 100111e0 -10010664: 9500 str r5, [sp, #0] -10010666: 2343 movs r3, #67 ; 0x43 -10010668: f104 0228 add.w r2, r4, #40 ; 0x28 -1001066c: 6921 ldr r1, [r4, #16] -1001066e: 6860 ldr r0, [r4, #4] -10010670: f003 fb60 bl 10013d34 -10010674: 6a28 ldr r0, [r5, #32] -10010676: f7ff fa4b bl 1000fb10 -1001067a: 7b63 ldrb r3, [r4, #13] -1001067c: 4628 mov r0, r5 -1001067e: 3301 adds r3, #1 -10010680: b2db uxtb r3, r3 -10010682: 2b09 cmp r3, #9 -10010684: bf98 it ls -10010686: ebc3 1243 rsbls r2, r3, r3, lsl #5 -1001068a: 7363 strb r3, [r4, #13] -1001068c: bf8c ite hi -1001068e: f242 7310 movwhi r3, #10000 ; 0x2710 -10010692: eb03 0382 addls.w r3, r3, r2, lsl #2 -10010696: f44f 72fa mov.w r2, #500 ; 0x1f4 -1001069a: bf9c itt ls -1001069c: 00db lslls r3, r3, #3 -1001069e: b29b uxthls r3, r3 -100106a0: f203 13f3 addw r3, r3, #499 ; 0x1f3 -100106a4: fb93 f3f2 sdiv r3, r3, r2 -100106a8: 8363 strh r3, [r4, #26] -100106aa: f000 fc4c bl 10010f46 -100106ae: 4628 mov r0, r5 -100106b0: 4906 ldr r1, [pc, #24] ; (100106cc ) -100106b2: f000 fbb9 bl 10010e28 -100106b6: 4628 mov r0, r5 -100106b8: 4904 ldr r1, [pc, #16] ; (100106cc ) -100106ba: f000 fc1b bl 10010ef4 -100106be: 4628 mov r0, r5 -100106c0: 4902 ldr r1, [pc, #8] ; (100106cc ) -100106c2: f000 fc1b bl 10010efc -100106c6: 4630 mov r0, r6 -100106c8: b002 add sp, #8 -100106ca: bd70 pop {r4, r5, r6, pc} -100106cc: 10040070 .word 0x10040070 - -100106d0 : -100106d0: b510 push {r4, lr} -100106d2: b198 cbz r0, 100106fc -100106d4: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 -100106d8: 6a04 ldr r4, [r0, #32] -100106da: f023 0308 bic.w r3, r3, #8 -100106de: f880 3031 strb.w r3, [r0, #49] ; 0x31 -100106e2: b15c cbz r4, 100106fc -100106e4: 6860 ldr r0, [r4, #4] -100106e6: b118 cbz r0, 100106f0 -100106e8: f003 fbf0 bl 10013ecc -100106ec: 2300 movs r3, #0 -100106ee: 6063 str r3, [r4, #4] -100106f0: 4620 mov r0, r4 -100106f2: e8bd 4010 ldmia.w sp!, {r4, lr} -100106f6: 2100 movs r1, #0 -100106f8: f7ff b90c b.w 1000f914 -100106fc: bd10 pop {r4, pc} - ... - -10010700 : -10010700: b538 push {r3, r4, r5, lr} -10010702: 4604 mov r4, r0 -10010704: b910 cbnz r0, 1001070c -10010706: f06f 000d mvn.w r0, #13 -1001070a: bd38 pop {r3, r4, r5, pc} -1001070c: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 -10010710: 6a05 ldr r5, [r0, #32] -10010712: f023 0208 bic.w r2, r3, #8 -10010716: 069b lsls r3, r3, #26 -10010718: f880 2031 strb.w r2, [r0, #49] ; 0x31 -1001071c: d5f3 bpl.n 10010706 -1001071e: 8d03 ldrh r3, [r0, #40] ; 0x28 -10010720: f5b3 7f10 cmp.w r3, #576 ; 0x240 -10010724: d202 bcs.n 1001072c -10010726: f04f 30ff mov.w r0, #4294967295 -1001072a: bd38 pop {r3, r4, r5, pc} -1001072c: bb55 cbnz r5, 10010784 -1001072e: 2048 movs r0, #72 ; 0x48 -10010730: f004 fcfc bl 1001512c -10010734: 4605 mov r5, r0 -10010736: 2800 cmp r0, #0 -10010738: d0f5 beq.n 10010726 -1001073a: 6220 str r0, [r4, #32] -1001073c: 2248 movs r2, #72 ; 0x48 -1001073e: 2100 movs r1, #0 -10010740: 4628 mov r0, r5 -10010742: f00a fa39 bl 1001abb8 -10010746: f003 fbd5 bl 10013ef4 -1001074a: 6068 str r0, [r5, #4] -1001074c: 2800 cmp r0, #0 -1001074e: d0ea beq.n 10010726 -10010750: 7a02 ldrb r2, [r0, #8] -10010752: 4913 ldr r1, [pc, #76] ; (100107a0 ) -10010754: f042 0220 orr.w r2, r2, #32 -10010758: 7202 strb r2, [r0, #8] -1001075a: 2244 movs r2, #68 ; 0x44 -1001075c: f003 fa98 bl 10013c90 -10010760: 2243 movs r2, #67 ; 0x43 -10010762: 490f ldr r1, [pc, #60] ; (100107a0 ) -10010764: 6868 ldr r0, [r5, #4] -10010766: f003 fb81 bl 10013e6c -1001076a: 6868 ldr r0, [r5, #4] -1001076c: 4622 mov r2, r4 -1001076e: 490d ldr r1, [pc, #52] ; (100107a4 ) -10010770: f003 fba8 bl 10013ec4 -10010774: 4620 mov r0, r4 -10010776: f7ff f9d7 bl 1000fb28 -1001077a: b148 cbz r0, 10010790 -1001077c: 4620 mov r0, r4 -1001077e: f7ff ffa7 bl 100106d0 -10010782: e7d0 b.n 10010726 -10010784: 6868 ldr r0, [r5, #4] -10010786: 2800 cmp r0, #0 -10010788: d0d8 beq.n 1001073c -1001078a: f003 fb9f bl 10013ecc -1001078e: e7d5 b.n 1001073c -10010790: f894 3031 ldrb.w r3, [r4, #49] ; 0x31 -10010794: f043 0308 orr.w r3, r3, #8 -10010798: f884 3031 strb.w r3, [r4, #49] ; 0x31 -1001079c: bd38 pop {r3, r4, r5, pc} -1001079e: bf00 nop -100107a0: 10040070 .word 0x10040070 -100107a4: 1000ff3d .word 0x1000ff3d - -100107a8 : -100107a8: 7802 ldrb r2, [r0, #0] -100107aa: 1c43 adds r3, r0, #1 -100107ac: f002 01c0 and.w r1, r2, #192 ; 0xc0 -100107b0: 29c0 cmp r1, #192 ; 0xc0 -100107b2: d005 beq.n 100107c0 -100107b4: 1898 adds r0, r3, r2 -100107b6: 5c9b ldrb r3, [r3, r2] -100107b8: 2b00 cmp r3, #0 -100107ba: d1f5 bne.n 100107a8 -100107bc: 3001 adds r0, #1 -100107be: 4770 bx lr -100107c0: 4618 mov r0, r3 -100107c2: e7fb b.n 100107bc - -100107c4 : -100107c4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100107c8: 4691 mov r9, r2 -100107ca: 8912 ldrh r2, [r2, #8] -100107cc: b087 sub sp, #28 -100107ce: f1a2 031a sub.w r3, r2, #26 -100107d2: f5b3 7ff3 cmp.w r3, #486 ; 0x1e6 -100107d6: f200 80ae bhi.w 10010936 -100107da: f8df a17c ldr.w sl, [pc, #380] ; 10010958 -100107de: 2300 movs r3, #0 -100107e0: f8da 1000 ldr.w r1, [sl] -100107e4: 4648 mov r0, r9 -100107e6: f000 fd8d bl 10011304 -100107ea: f8b9 3008 ldrh.w r3, [r9, #8] -100107ee: 4283 cmp r3, r0 -100107f0: f040 80a1 bne.w 10010936 -100107f4: f8da 8000 ldr.w r8, [sl] -100107f8: f8b8 0000 ldrh.w r0, [r8] -100107fc: f7ff f880 bl 1000f900 -10010800: 2803 cmp r0, #3 -10010802: 4606 mov r6, r0 -10010804: f200 8097 bhi.w 10010936 -10010808: f44f 758c mov.w r5, #280 ; 0x118 -1001080c: 4345 muls r5, r0 -1001080e: 4c50 ldr r4, [pc, #320] ; (10010950 ) -10010810: 5d63 ldrb r3, [r4, r5] -10010812: eb04 0b05 add.w fp, r4, r5 -10010816: 2b02 cmp r3, #2 -10010818: f040 808d bne.w 10010936 -1001081c: 2303 movs r3, #3 -1001081e: 5563 strb r3, [r4, r5] -10010820: f898 3003 ldrb.w r3, [r8, #3] -10010824: f003 030f and.w r3, r3, #15 -10010828: f88b 3005 strb.w r3, [fp, #5] -1001082c: f8b8 0004 ldrh.w r0, [r8, #4] -10010830: f7ff f866 bl 1000f900 -10010834: 9001 str r0, [sp, #4] -10010836: f8b8 0006 ldrh.w r0, [r8, #6] -1001083a: f7ff f861 bl 1000f900 -1001083e: f998 2002 ldrsb.w r2, [r8, #2] -10010842: 4607 mov r7, r0 -10010844: 2a00 cmp r2, #0 -10010846: 9b01 ldr r3, [sp, #4] -10010848: db10 blt.n 1001086c -1001084a: f44f 708c mov.w r0, #280 ; 0x118 -1001084e: 4370 muls r0, r6 -10010850: 1822 adds r2, r4, r0 -10010852: f8d2 3110 ldr.w r3, [r2, #272] ; 0x110 -10010856: 2b00 cmp r3, #0 -10010858: d173 bne.n 10010942 -1001085a: f44f 738c mov.w r3, #280 ; 0x118 -1001085e: 435e muls r6, r3 -10010860: 2300 movs r3, #0 -10010862: 19a2 adds r2, r4, r6 -10010864: 55a3 strb r3, [r4, r6] -10010866: f8c2 3110 str.w r3, [r2, #272] ; 0x110 -1001086a: e064 b.n 10010936 -1001086c: f89b 2005 ldrb.w r2, [fp, #5] -10010870: 2a00 cmp r2, #0 -10010872: d1ea bne.n 1001084a -10010874: 2b01 cmp r3, #1 -10010876: d1e8 bne.n 1001084a -10010878: f8da 0000 ldr.w r0, [sl] -1001087c: f105 080c add.w r8, r5, #12 -10010880: 44a0 add r8, r4 -10010882: 300c adds r0, #12 -10010884: 4602 mov r2, r0 -10010886: 4643 mov r3, r8 -10010888: 1c51 adds r1, r2, #1 -1001088a: 7812 ldrb r2, [r2, #0] -1001088c: f002 0ec0 and.w lr, r2, #192 ; 0xc0 -10010890: f1be 0fc0 cmp.w lr, #192 ; 0xc0 -10010894: d00a beq.n 100108ac -10010896: eb03 0c02 add.w ip, r3, r2 -1001089a: 4563 cmp r3, ip -1001089c: 469e mov lr, r3 -1001089e: 460a mov r2, r1 -100108a0: f103 0301 add.w r3, r3, #1 -100108a4: d106 bne.n 100108b4 -100108a6: 7809 ldrb r1, [r1, #0] -100108a8: 2900 cmp r1, #0 -100108aa: d1ed bne.n 10010888 -100108ac: f7ff ff7c bl 100107a8 -100108b0: 3004 adds r0, #4 -100108b2: e00c b.n 100108ce -100108b4: f89e e000 ldrb.w lr, [lr] -100108b8: 7812 ldrb r2, [r2, #0] -100108ba: 3101 adds r1, #1 -100108bc: 4596 cmp lr, r2 -100108be: d0ec beq.n 1001089a -100108c0: e7c3 b.n 1001084a -100108c2: f7ff f81d bl 1000f900 -100108c6: 3f01 subs r7, #1 -100108c8: 300a adds r0, #10 -100108ca: 4450 add r0, sl -100108cc: b2bf uxth r7, r7 -100108ce: 2f00 cmp r7, #0 -100108d0: d0bb beq.n 1001084a -100108d2: f7ff ff69 bl 100107a8 -100108d6: 220a movs r2, #10 -100108d8: 4601 mov r1, r0 -100108da: 4682 mov sl, r0 -100108dc: a803 add r0, sp, #12 -100108de: f00a f967 bl 1001abb0 -100108e2: 9b03 ldr r3, [sp, #12] -100108e4: f8bd 0014 ldrh.w r0, [sp, #20] -100108e8: f1b3 2f01 cmp.w r3, #16777472 ; 0x1000100 -100108ec: d1e9 bne.n 100108c2 -100108ee: f5b0 6f80 cmp.w r0, #1024 ; 0x400 -100108f2: d1e6 bne.n 100108c2 -100108f4: 9804 ldr r0, [sp, #16] -100108f6: f7ff f80b bl 1000f910 -100108fa: f44f 738c mov.w r3, #280 ; 0x118 -100108fe: fb03 4306 mla r3, r3, r6, r4 -10010902: 4a14 ldr r2, [pc, #80] ; (10010954 ) -10010904: f505 7586 add.w r5, r5, #268 ; 0x10c -10010908: 4290 cmp r0, r2 -1001090a: 4425 add r5, r4 -1001090c: 6098 str r0, [r3, #8] -1001090e: f10a 010a add.w r1, sl, #10 -10010912: bf88 it hi -10010914: 609a strhi r2, [r3, #8] -10010916: 4628 mov r0, r5 -10010918: 2204 movs r2, #4 -1001091a: f00a f949 bl 1001abb0 -1001091e: f44f 738c mov.w r3, #280 ; 0x118 -10010922: fb03 4406 mla r4, r3, r6, r4 -10010926: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001092a: b123 cbz r3, 10010936 -1001092c: f8d4 2114 ldr.w r2, [r4, #276] ; 0x114 -10010930: 4629 mov r1, r5 -10010932: 4640 mov r0, r8 -10010934: 4798 blx r3 -10010936: 4648 mov r0, r9 -10010938: f000 fb9f bl 1001107a -1001093c: b007 add sp, #28 -1001093e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10010942: 300c adds r0, #12 -10010944: f8d2 2114 ldr.w r2, [r2, #276] ; 0x114 -10010948: 2100 movs r1, #0 -1001094a: 4420 add r0, r4 -1001094c: 4798 blx r3 -1001094e: e784 b.n 1001085a -10010950: 1004ac90 .word 0x1004ac90 -10010954: 00093a80 .word 0x00093a80 -10010958: 1004aa7c .word 0x1004aa7c - -1001095c : -1001095c: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -10010960: 4690 mov r8, r2 -10010962: 2200 movs r2, #0 -10010964: 4606 mov r6, r0 -10010966: 460f mov r7, r1 -10010968: 4610 mov r0, r2 -1001096a: f44f 7188 mov.w r1, #272 ; 0x110 -1001096e: f000 fba7 bl 100110c0 -10010972: 4605 mov r5, r0 -10010974: 2800 cmp r0, #0 -10010976: d054 beq.n 10010a22 -10010978: 6844 ldr r4, [r0, #4] -1001097a: 220c movs r2, #12 -1001097c: 2100 movs r1, #0 -1001097e: 4620 mov r0, r4 -10010980: f00a f91a bl 1001abb8 -10010984: 4640 mov r0, r8 -10010986: f7fe ffbb bl 1000f900 -1001098a: 2301 movs r3, #1 -1001098c: 2200 movs r2, #0 -1001098e: 70a3 strb r3, [r4, #2] -10010990: 7163 strb r3, [r4, #5] -10010992: 8020 strh r0, [r4, #0] -10010994: 7122 strb r2, [r4, #4] -10010996: f104 030c add.w r3, r4, #12 -1001099a: 1e79 subs r1, r7, #1 -1001099c: f103 0e01 add.w lr, r3, #1 -100109a0: 4674 mov r4, lr -100109a2: 1c4f adds r7, r1, #1 -100109a4: 4639 mov r1, r7 -100109a6: f917 0b01 ldrsb.w r0, [r7], #1 -100109aa: eba4 020e sub.w r2, r4, lr -100109ae: 282e cmp r0, #46 ; 0x2e -100109b0: b2d2 uxtb r2, r2 -100109b2: d131 bne.n 10010a18 -100109b4: 701a strb r2, [r3, #0] -100109b6: f991 3000 ldrsb.w r3, [r1] -100109ba: bb5b cbnz r3, 10010a14 -100109bc: 4620 mov r0, r4 -100109be: 2204 movs r2, #4 -100109c0: f800 3b01 strb.w r3, [r0], #1 -100109c4: f44f 7380 mov.w r3, #256 ; 0x100 -100109c8: eb0d 0102 add.w r1, sp, r2 -100109cc: f8ad 3004 strh.w r3, [sp, #4] -100109d0: f8ad 3006 strh.w r3, [sp, #6] -100109d4: f00a f8ec bl 1001abb0 -100109d8: 6869 ldr r1, [r5, #4] -100109da: 3405 adds r4, #5 -100109dc: 1a61 subs r1, r4, r1 -100109de: b289 uxth r1, r1 -100109e0: 4628 mov r0, r5 -100109e2: f000 fbfd bl 100111e0 -100109e6: 4b10 ldr r3, [pc, #64] ; (10010a28 ) -100109e8: 4c10 ldr r4, [pc, #64] ; (10010a2c ) -100109ea: eb03 0686 add.w r6, r3, r6, lsl #2 -100109ee: 2235 movs r2, #53 ; 0x35 -100109f0: 4631 mov r1, r6 -100109f2: 6820 ldr r0, [r4, #0] -100109f4: f003 fa3a bl 10013e6c -100109f8: 6820 ldr r0, [r4, #0] -100109fa: 2335 movs r3, #53 ; 0x35 -100109fc: 4632 mov r2, r6 -100109fe: 4629 mov r1, r5 -10010a00: f003 fa19 bl 10013e36 -10010a04: 4604 mov r4, r0 -10010a06: 4628 mov r0, r5 -10010a08: f000 fb37 bl 1001107a -10010a0c: 4620 mov r0, r4 -10010a0e: b002 add sp, #8 -10010a10: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10010a14: 4623 mov r3, r4 -10010a16: e7c1 b.n 1001099c -10010a18: 2800 cmp r0, #0 -10010a1a: d0cb beq.n 100109b4 -10010a1c: f804 0b01 strb.w r0, [r4], #1 -10010a20: e7c0 b.n 100109a4 -10010a22: f04f 34ff mov.w r4, #4294967295 -10010a26: e7f1 b.n 10010a0c -10010a28: 1004ac88 .word 0x1004ac88 -10010a2c: 1004ac84 .word 0x1004ac84 - -10010a30 : -10010a30: f44f 728c mov.w r2, #280 ; 0x118 -10010a34: 4342 muls r2, r0 -10010a36: b570 push {r4, r5, r6, lr} -10010a38: 4c26 ldr r4, [pc, #152] ; (10010ad4 ) -10010a3a: 4605 mov r5, r0 -10010a3c: 5ca1 ldrb r1, [r4, r2] -10010a3e: 18a3 adds r3, r4, r2 -10010a40: 2902 cmp r1, #2 -10010a42: 4626 mov r6, r4 -10010a44: d011 beq.n 10010a6a -10010a46: 2903 cmp r1, #3 -10010a48: d03c beq.n 10010ac4 -10010a4a: 2901 cmp r1, #1 -10010a4c: d141 bne.n 10010ad2 -10010a4e: 2002 movs r0, #2 -10010a50: 54a0 strb r0, [r4, r2] -10010a52: 2000 movs r0, #0 -10010a54: 7099 strb r1, [r3, #2] -10010a56: 7058 strb r0, [r3, #1] -10010a58: 70d8 strb r0, [r3, #3] -10010a5a: f102 010c add.w r1, r2, #12 -10010a5e: 4421 add r1, r4 -10010a60: 462a mov r2, r5 -10010a62: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10010a66: f7ff bf79 b.w 1001095c -10010a6a: 7899 ldrb r1, [r3, #2] -10010a6c: 3901 subs r1, #1 -10010a6e: b2c9 uxtb r1, r1 -10010a70: 7099 strb r1, [r3, #2] -10010a72: bb71 cbnz r1, 10010ad2 -10010a74: 78d9 ldrb r1, [r3, #3] -10010a76: 7858 ldrb r0, [r3, #1] -10010a78: 3101 adds r1, #1 -10010a7a: b2c9 uxtb r1, r1 -10010a7c: 2904 cmp r1, #4 -10010a7e: 70d9 strb r1, [r3, #3] -10010a80: d11e bne.n 10010ac0 -10010a82: b938 cbnz r0, 10010a94 -10010a84: 4a14 ldr r2, [pc, #80] ; (10010ad8 ) -10010a86: 6852 ldr r2, [r2, #4] -10010a88: b122 cbz r2, 10010a94 -10010a8a: 2201 movs r2, #1 -10010a8c: 70d8 strb r0, [r3, #3] -10010a8e: 705a strb r2, [r3, #1] -10010a90: 709a strb r2, [r3, #2] -10010a92: bd70 pop {r4, r5, r6, pc} -10010a94: f44f 708c mov.w r0, #280 ; 0x118 -10010a98: 4368 muls r0, r5 -10010a9a: 1832 adds r2, r6, r0 -10010a9c: f8d2 3110 ldr.w r3, [r2, #272] ; 0x110 -10010aa0: b12b cbz r3, 10010aae -10010aa2: 300c adds r0, #12 -10010aa4: f8d2 2114 ldr.w r2, [r2, #276] ; 0x114 -10010aa8: 2100 movs r1, #0 -10010aaa: 4430 add r0, r6 -10010aac: 4798 blx r3 -10010aae: f44f 738c mov.w r3, #280 ; 0x118 -10010ab2: 435d muls r5, r3 -10010ab4: 2300 movs r3, #0 -10010ab6: 1972 adds r2, r6, r5 -10010ab8: 5573 strb r3, [r6, r5] -10010aba: f8c2 3110 str.w r3, [r2, #272] ; 0x110 -10010abe: bd70 pop {r4, r5, r6, pc} -10010ac0: 7099 strb r1, [r3, #2] -10010ac2: e7ca b.n 10010a5a -10010ac4: 6899 ldr r1, [r3, #8] -10010ac6: 3901 subs r1, #1 -10010ac8: 6099 str r1, [r3, #8] -10010aca: b911 cbnz r1, 10010ad2 -10010acc: 54a1 strb r1, [r4, r2] -10010ace: f8c3 1110 str.w r1, [r3, #272] ; 0x110 -10010ad2: bd70 pop {r4, r5, r6, pc} -10010ad4: 1004ac90 .word 0x1004ac90 -10010ad8: 1004ac88 .word 0x1004ac88 - -10010adc : -10010adc: 2801 cmp r0, #1 -10010ade: d808 bhi.n 10010af2 -10010ae0: 4b04 ldr r3, [pc, #16] ; (10010af4 ) -10010ae2: 681b ldr r3, [r3, #0] -10010ae4: b12b cbz r3, 10010af2 -10010ae6: b121 cbz r1, 10010af2 -10010ae8: 680b ldr r3, [r1, #0] -10010aea: b113 cbz r3, 10010af2 -10010aec: 4a02 ldr r2, [pc, #8] ; (10010af8 ) -10010aee: f842 3020 str.w r3, [r2, r0, lsl #2] -10010af2: 4770 bx lr -10010af4: 1004ac84 .word 0x1004ac84 -10010af8: 1004ac88 .word 0x1004ac88 - -10010afc : -10010afc: 4b0f ldr r3, [pc, #60] ; (10010b3c ) -10010afe: b537 push {r0, r1, r2, r4, r5, lr} -10010b00: 4a0f ldr r2, [pc, #60] ; (10010b40 ) -10010b02: f023 0303 bic.w r3, r3, #3 -10010b06: 480f ldr r0, [pc, #60] ; (10010b44 ) -10010b08: 6013 str r3, [r2, #0] -10010b0a: f7fe fc4c bl 1000f3a6 -10010b0e: 4d0e ldr r5, [pc, #56] ; (10010b48 ) -10010b10: 9001 str r0, [sp, #4] -10010b12: 682c ldr r4, [r5, #0] -10010b14: b984 cbnz r4, 10010b38 -10010b16: f003 f9ed bl 10013ef4 -10010b1a: 6028 str r0, [r5, #0] -10010b1c: b160 cbz r0, 10010b38 -10010b1e: 4622 mov r2, r4 -10010b20: 490a ldr r1, [pc, #40] ; (10010b4c ) -10010b22: f003 f8b5 bl 10013c90 -10010b26: 490a ldr r1, [pc, #40] ; (10010b50 ) -10010b28: 6828 ldr r0, [r5, #0] -10010b2a: 4622 mov r2, r4 -10010b2c: f003 f9ca bl 10013ec4 -10010b30: a901 add r1, sp, #4 -10010b32: 4620 mov r0, r4 -10010b34: f7ff ffd2 bl 10010adc -10010b38: b003 add sp, #12 -10010b3a: bd30 pop {r4, r5, pc} -10010b3c: 1004aa83 .word 0x1004aa83 -10010b40: 1004aa7c .word 0x1004aa7c -10010b44: 10040078 .word 0x10040078 -10010b48: 1004ac84 .word 0x1004ac84 -10010b4c: 10040070 .word 0x10040070 -10010b50: 100107c5 .word 0x100107c5 - -10010b54 : -10010b54: b508 push {r3, lr} -10010b56: 4b09 ldr r3, [pc, #36] ; (10010b7c ) -10010b58: 681b ldr r3, [r3, #0] -10010b5a: b16b cbz r3, 10010b78 -10010b5c: 2000 movs r0, #0 -10010b5e: f7ff ff67 bl 10010a30 -10010b62: 2001 movs r0, #1 -10010b64: f7ff ff64 bl 10010a30 -10010b68: 2002 movs r0, #2 -10010b6a: f7ff ff61 bl 10010a30 -10010b6e: e8bd 4008 ldmia.w sp!, {r3, lr} -10010b72: 2003 movs r0, #3 -10010b74: f7ff bf5c b.w 10010a30 -10010b78: bd08 pop {r3, pc} -10010b7a: bf00 nop -10010b7c: 1004ac84 .word 0x1004ac84 - -10010b80 : -10010b80: b508 push {r3, lr} -10010b82: f003 febd bl 10014900 -10010b86: f000 f94d bl 10010e24 -10010b8a: f7fd fdfb bl 1000e784 -10010b8e: f002 ffa9 bl 10013ae4 -10010b92: f000 fc69 bl 10011468 -10010b96: f7fe f82d bl 1000ebf4 -10010b9a: f7ff ffaf bl 10010afc -10010b9e: e8bd 4008 ldmia.w sp!, {r3, lr} -10010ba2: f000 b867 b.w 10010c74 - ... - -10010ba8 : -10010ba8: 4b15 ldr r3, [pc, #84] ; (10010c00 ) -10010baa: b570 push {r4, r5, r6, lr} -10010bac: 4604 mov r4, r0 -10010bae: 8b18 ldrh r0, [r3, #24] -10010bb0: 460e mov r6, r1 -10010bb2: 4615 mov r5, r2 -10010bb4: f004 faba bl 1001512c -10010bb8: b308 cbz r0, 10010bfe -10010bba: 2300 movs r3, #0 -10010bbc: 4911 ldr r1, [pc, #68] ; (10010c04 ) -10010bbe: 6003 str r3, [r0, #0] -10010bc0: 680b ldr r3, [r1, #0] -10010bc2: 6086 str r6, [r0, #8] -10010bc4: 60c5 str r5, [r0, #12] -10010bc6: 6044 str r4, [r0, #4] -10010bc8: b90b cbnz r3, 10010bce -10010bca: 6008 str r0, [r1, #0] -10010bcc: bd70 pop {r4, r5, r6, pc} -10010bce: 685a ldr r2, [r3, #4] -10010bd0: 4294 cmp r4, r2 -10010bd2: d207 bcs.n 10010be4 -10010bd4: 1b12 subs r2, r2, r4 -10010bd6: 605a str r2, [r3, #4] -10010bd8: 6003 str r3, [r0, #0] -10010bda: e7f6 b.n 10010bca -10010bdc: 6854 ldr r4, [r2, #4] -10010bde: 42a1 cmp r1, r4 -10010be0: d30a bcc.n 10010bf8 -10010be2: 4613 mov r3, r2 -10010be4: 685a ldr r2, [r3, #4] -10010be6: 6841 ldr r1, [r0, #4] -10010be8: 1a89 subs r1, r1, r2 -10010bea: 681a ldr r2, [r3, #0] -10010bec: 6041 str r1, [r0, #4] -10010bee: 2a00 cmp r2, #0 -10010bf0: d1f4 bne.n 10010bdc -10010bf2: 6002 str r2, [r0, #0] -10010bf4: 6018 str r0, [r3, #0] -10010bf6: bd70 pop {r4, r5, r6, pc} -10010bf8: 1a61 subs r1, r4, r1 -10010bfa: 6051 str r1, [r2, #4] -10010bfc: e7f9 b.n 10010bf2 -10010bfe: bd70 pop {r4, r5, r6, pc} -10010c00: 10040088 .word 0x10040088 -10010c04: 1004b0f0 .word 0x1004b0f0 - -10010c08 : -10010c08: 4b08 ldr r3, [pc, #32] ; (10010c2c ) -10010c0a: 681a ldr r2, [r3, #0] -10010c0c: b962 cbnz r2, 10010c28 -10010c0e: 4a08 ldr r2, [pc, #32] ; (10010c30 ) -10010c10: 6812 ldr r2, [r2, #0] -10010c12: b912 cbnz r2, 10010c1a -10010c14: 4a07 ldr r2, [pc, #28] ; (10010c34 ) -10010c16: 6812 ldr r2, [r2, #0] -10010c18: b132 cbz r2, 10010c28 -10010c1a: 2201 movs r2, #1 -10010c1c: 4906 ldr r1, [pc, #24] ; (10010c38 ) -10010c1e: 601a str r2, [r3, #0] -10010c20: 20fa movs r0, #250 ; 0xfa -10010c22: 2200 movs r2, #0 -10010c24: f7ff bfc0 b.w 10010ba8 -10010c28: 4770 bx lr -10010c2a: bf00 nop -10010c2c: 1004b0f4 .word 0x1004b0f4 -10010c30: 1004b108 .word 0x1004b108 -10010c34: 1004b124 .word 0x1004b124 -10010c38: 10010c3d .word 0x10010c3d - -10010c3c : -10010c3c: b508 push {r3, lr} -10010c3e: f001 f833 bl 10011ca8 -10010c42: 4b08 ldr r3, [pc, #32] ; (10010c64 ) -10010c44: 681b ldr r3, [r3, #0] -10010c46: b913 cbnz r3, 10010c4e -10010c48: 4b07 ldr r3, [pc, #28] ; (10010c68 ) -10010c4a: 681b ldr r3, [r3, #0] -10010c4c: b133 cbz r3, 10010c5c -10010c4e: e8bd 4008 ldmia.w sp!, {r3, lr} -10010c52: 2200 movs r2, #0 -10010c54: 4905 ldr r1, [pc, #20] ; (10010c6c ) -10010c56: 20fa movs r0, #250 ; 0xfa -10010c58: f7ff bfa6 b.w 10010ba8 -10010c5c: 4a04 ldr r2, [pc, #16] ; (10010c70 ) -10010c5e: 6013 str r3, [r2, #0] -10010c60: bd08 pop {r3, pc} -10010c62: bf00 nop -10010c64: 1004b108 .word 0x1004b108 -10010c68: 1004b124 .word 0x1004b124 -10010c6c: 10010c3d .word 0x10010c3d -10010c70: 1004b0f4 .word 0x1004b0f4 - -10010c74 : -10010c74: b508 push {r3, lr} -10010c76: 2200 movs r2, #0 -10010c78: 4911 ldr r1, [pc, #68] ; (10010cc0 ) -10010c7a: f44f 707a mov.w r0, #1000 ; 0x3e8 -10010c7e: f7ff ff93 bl 10010ba8 -10010c82: 2200 movs r2, #0 -10010c84: 490f ldr r1, [pc, #60] ; (10010cc4 ) -10010c86: f241 3088 movw r0, #5000 ; 0x1388 -10010c8a: f7ff ff8d bl 10010ba8 -10010c8e: 2200 movs r2, #0 -10010c90: 490d ldr r1, [pc, #52] ; (10010cc8 ) -10010c92: f64e 2060 movw r0, #60000 ; 0xea60 -10010c96: f7ff ff87 bl 10010ba8 -10010c9a: 2200 movs r2, #0 -10010c9c: 490b ldr r1, [pc, #44] ; (10010ccc ) -10010c9e: f44f 70fa mov.w r0, #500 ; 0x1f4 -10010ca2: f7ff ff81 bl 10010ba8 -10010ca6: 2200 movs r2, #0 -10010ca8: 4909 ldr r1, [pc, #36] ; (10010cd0 ) -10010caa: 2064 movs r0, #100 ; 0x64 -10010cac: f7ff ff7c bl 10010ba8 -10010cb0: e8bd 4008 ldmia.w sp!, {r3, lr} -10010cb4: 2200 movs r2, #0 -10010cb6: 4907 ldr r1, [pc, #28] ; (10010cd4 ) -10010cb8: f44f 707a mov.w r0, #1000 ; 0x3e8 -10010cbc: f7ff bf74 b.w 10010ba8 -10010cc0: 10010d61 .word 0x10010d61 -10010cc4: 10010d45 .word 0x10010d45 -10010cc8: 10010d29 .word 0x10010d29 -10010ccc: 10010d0d .word 0x10010d0d -10010cd0: 10010cf5 .word 0x10010cf5 -10010cd4: 10010cd9 .word 0x10010cd9 - -10010cd8 : -10010cd8: b508 push {r3, lr} -10010cda: f7ff ff3b bl 10010b54 -10010cde: e8bd 4008 ldmia.w sp!, {r3, lr} -10010ce2: 2200 movs r2, #0 -10010ce4: 4902 ldr r1, [pc, #8] ; (10010cf0 ) -10010ce6: f44f 707a mov.w r0, #1000 ; 0x3e8 -10010cea: f7ff bf5d b.w 10010ba8 -10010cee: bf00 nop -10010cf0: 10010cd9 .word 0x10010cd9 - -10010cf4 : -10010cf4: b508 push {r3, lr} -10010cf6: f7fe f831 bl 1000ed5c -10010cfa: e8bd 4008 ldmia.w sp!, {r3, lr} -10010cfe: 2200 movs r2, #0 -10010d00: 4901 ldr r1, [pc, #4] ; (10010d08 ) -10010d02: 2064 movs r0, #100 ; 0x64 -10010d04: f7ff bf50 b.w 10010ba8 -10010d08: 10010cf5 .word 0x10010cf5 - -10010d0c : -10010d0c: b508 push {r3, lr} -10010d0e: f7ff fc31 bl 10010574 -10010d12: e8bd 4008 ldmia.w sp!, {r3, lr} -10010d16: 2200 movs r2, #0 -10010d18: 4902 ldr r1, [pc, #8] ; (10010d24 ) -10010d1a: f44f 70fa mov.w r0, #500 ; 0x1f4 -10010d1e: f7ff bf43 b.w 10010ba8 -10010d22: bf00 nop -10010d24: 10010d0d .word 0x10010d0d - -10010d28 : -10010d28: b508 push {r3, lr} -10010d2a: f7ff fbdf bl 100104ec -10010d2e: e8bd 4008 ldmia.w sp!, {r3, lr} -10010d32: 2200 movs r2, #0 -10010d34: 4902 ldr r1, [pc, #8] ; (10010d40 ) -10010d36: f64e 2060 movw r0, #60000 ; 0xea60 -10010d3a: f7ff bf35 b.w 10010ba8 -10010d3e: bf00 nop -10010d40: 10010d29 .word 0x10010d29 - -10010d44 : -10010d44: b508 push {r3, lr} -10010d46: f003 f981 bl 1001404c -10010d4a: e8bd 4008 ldmia.w sp!, {r3, lr} -10010d4e: 2200 movs r2, #0 -10010d50: 4902 ldr r1, [pc, #8] ; (10010d5c ) -10010d52: f241 3088 movw r0, #5000 ; 0x1388 -10010d56: f7ff bf27 b.w 10010ba8 -10010d5a: bf00 nop -10010d5c: 10010d45 .word 0x10010d45 - -10010d60 : -10010d60: b508 push {r3, lr} -10010d62: f7fe fbb1 bl 1000f4c8 -10010d66: e8bd 4008 ldmia.w sp!, {r3, lr} -10010d6a: 2200 movs r2, #0 -10010d6c: 4902 ldr r1, [pc, #8] ; (10010d78 ) -10010d6e: f44f 707a mov.w r0, #1000 ; 0x3e8 -10010d72: f7ff bf19 b.w 10010ba8 -10010d76: bf00 nop -10010d78: 10010d61 .word 0x10010d61 - -10010d7c : -10010d7c: b470 push {r4, r5, r6} -10010d7e: 4c10 ldr r4, [pc, #64] ; (10010dc0 ) -10010d80: 6823 ldr r3, [r4, #0] -10010d82: b1d3 cbz r3, 10010dba -10010d84: 2500 movs r5, #0 -10010d86: 689a ldr r2, [r3, #8] -10010d88: 4282 cmp r2, r0 -10010d8a: 681a ldr r2, [r3, #0] -10010d8c: d112 bne.n 10010db4 -10010d8e: 68de ldr r6, [r3, #12] -10010d90: 428e cmp r6, r1 -10010d92: d10f bne.n 10010db4 -10010d94: b965 cbnz r5, 10010db0 -10010d96: 6022 str r2, [r4, #0] -10010d98: 681a ldr r2, [r3, #0] -10010d9a: b11a cbz r2, 10010da4 -10010d9c: 6851 ldr r1, [r2, #4] -10010d9e: 6858 ldr r0, [r3, #4] -10010da0: 4401 add r1, r0 -10010da2: 6051 str r1, [r2, #4] -10010da4: 4618 mov r0, r3 -10010da6: bc70 pop {r4, r5, r6} -10010da8: f004 ba5c b.w 10015264 -10010dac: 4613 mov r3, r2 -10010dae: e7ea b.n 10010d86 -10010db0: 602a str r2, [r5, #0] -10010db2: e7f1 b.n 10010d98 -10010db4: 461d mov r5, r3 -10010db6: 2a00 cmp r2, #0 -10010db8: d1f8 bne.n 10010dac -10010dba: bc70 pop {r4, r5, r6} -10010dbc: 4770 bx lr -10010dbe: bf00 nop -10010dc0: 1004b0f0 .word 0x1004b0f0 - -10010dc4 : -10010dc4: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10010dc8: 4c15 ldr r4, [pc, #84] ; (10010e20 ) -10010dca: 4606 mov r6, r0 -10010dcc: 460f mov r7, r1 -10010dce: 46a0 mov r8, r4 -10010dd0: 6822 ldr r2, [r4, #0] -10010dd2: b92a cbnz r2, 10010de0 -10010dd4: 4639 mov r1, r7 -10010dd6: 4630 mov r0, r6 -10010dd8: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10010ddc: f003 bd64 b.w 100148a8 -10010de0: 6852 ldr r2, [r2, #4] -10010de2: b972 cbnz r2, 10010e02 -10010de4: f8d8 0000 ldr.w r0, [r8] -10010de8: 6803 ldr r3, [r0, #0] -10010dea: 6885 ldr r5, [r0, #8] -10010dec: f8c8 3000 str.w r3, [r8] -10010df0: f8d0 900c ldr.w r9, [r0, #12] -10010df4: f004 fa36 bl 10015264 -10010df8: 2d00 cmp r5, #0 -10010dfa: d0e9 beq.n 10010dd0 -10010dfc: 4648 mov r0, r9 -10010dfe: 47a8 blx r5 -10010e00: e7e6 b.n 10010dd0 -10010e02: 4639 mov r1, r7 -10010e04: 4630 mov r0, r6 -10010e06: f003 fd4f bl 100148a8 -10010e0a: 1c43 adds r3, r0, #1 -10010e0c: d0ea beq.n 10010de4 -10010e0e: 6822 ldr r2, [r4, #0] -10010e10: 6853 ldr r3, [r2, #4] -10010e12: 4298 cmp r0, r3 -10010e14: bf2c ite cs -10010e16: 2300 movcs r3, #0 -10010e18: 1a1b subcc r3, r3, r0 -10010e1a: 6053 str r3, [r2, #4] -10010e1c: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -10010e20: 1004b0f0 .word 0x1004b0f0 - -10010e24 : -10010e24: 4770 bx lr - ... - -10010e28 : -10010e28: b570 push {r4, r5, r6, lr} -10010e2a: 4605 mov r5, r0 -10010e2c: 460c mov r4, r1 -10010e2e: b151 cbz r1, 10010e46 -10010e30: 680a ldr r2, [r1, #0] -10010e32: 6843 ldr r3, [r0, #4] -10010e34: 429a cmp r2, r3 -10010e36: d005 beq.n 10010e44 -10010e38: 4b0d ldr r3, [pc, #52] ; (10010e70 ) -10010e3a: 6818 ldr r0, [r3, #0] -10010e3c: b928 cbnz r0, 10010e4a -10010e3e: 4b0d ldr r3, [pc, #52] ; (10010e74 ) -10010e40: 681b ldr r3, [r3, #0] -10010e42: b95b cbnz r3, 10010e5c -10010e44: 6824 ldr r4, [r4, #0] -10010e46: 606c str r4, [r5, #4] -10010e48: bd70 pop {r4, r5, r6, pc} -10010e4a: 6802 ldr r2, [r0, #0] -10010e4c: 686b ldr r3, [r5, #4] -10010e4e: 68c6 ldr r6, [r0, #12] -10010e50: 429a cmp r2, r3 -10010e52: d101 bne.n 10010e58 -10010e54: f000 ff86 bl 10011d64 -10010e58: 4630 mov r0, r6 -10010e5a: e7ef b.n 10010e3c -10010e5c: 681a ldr r2, [r3, #0] -10010e5e: b122 cbz r2, 10010e6a -10010e60: 6869 ldr r1, [r5, #4] -10010e62: 428a cmp r2, r1 -10010e64: bf04 itt eq -10010e66: 6822 ldreq r2, [r4, #0] -10010e68: 601a streq r2, [r3, #0] -10010e6a: 68db ldr r3, [r3, #12] -10010e6c: e7e9 b.n 10010e42 -10010e6e: bf00 nop -10010e70: 1004b108 .word 0x1004b108 -10010e74: 1004b114 .word 0x1004b114 - -10010e78 : -10010e78: b570 push {r4, r5, r6, lr} -10010e7a: 4615 mov r5, r2 -10010e7c: 4606 mov r6, r0 -10010e7e: 461c mov r4, r3 -10010e80: f7ff ffd2 bl 10010e28 -10010e84: b105 cbz r5, 10010e88 -10010e86: 682d ldr r5, [r5, #0] -10010e88: 60b5 str r5, [r6, #8] -10010e8a: b104 cbz r4, 10010e8e -10010e8c: 6824 ldr r4, [r4, #0] -10010e8e: 60f4 str r4, [r6, #12] -10010e90: bd70 pop {r4, r5, r6, pc} - ... - -10010e94 : -10010e94: b5f8 push {r3, r4, r5, r6, r7, lr} -10010e96: 2500 movs r5, #0 -10010e98: 4604 mov r4, r0 -10010e9a: 9e06 ldr r6, [sp, #24] -10010e9c: 4f13 ldr r7, [pc, #76] ; (10010eec ) -10010e9e: 61c6 str r6, [r0, #28] -10010ea0: 783e ldrb r6, [r7, #0] -10010ea2: 6045 str r5, [r0, #4] -10010ea4: f106 0e01 add.w lr, r6, #1 -10010ea8: f880 6034 strb.w r6, [r0, #52] ; 0x34 -10010eac: 9e08 ldr r6, [sp, #32] -10010eae: 6085 str r5, [r0, #8] -10010eb0: 60c5 str r5, [r0, #12] -10010eb2: f880 5031 strb.w r5, [r0, #49] ; 0x31 -10010eb6: 6205 str r5, [r0, #32] -10010eb8: 6385 str r5, [r0, #56] ; 0x38 -10010eba: 6106 str r6, [r0, #16] -10010ebc: f887 e000 strb.w lr, [r7] -10010ec0: f7ff ffda bl 10010e78 -10010ec4: 4620 mov r0, r4 -10010ec6: 9b07 ldr r3, [sp, #28] -10010ec8: 4798 blx r3 -10010eca: b960 cbnz r0, 10010ee6 -10010ecc: 4b08 ldr r3, [pc, #32] ; (10010ef0 ) -10010ece: 681a ldr r2, [r3, #0] -10010ed0: 6022 str r2, [r4, #0] -10010ed2: 601c str r4, [r3, #0] -10010ed4: f994 3031 ldrsb.w r3, [r4, #49] ; 0x31 -10010ed8: 42ab cmp r3, r5 -10010eda: da02 bge.n 10010ee2 -10010edc: 4620 mov r0, r4 -10010ede: f7fd feb9 bl 1000ec54 -10010ee2: 4620 mov r0, r4 -10010ee4: bdf8 pop {r3, r4, r5, r6, r7, pc} -10010ee6: 462c mov r4, r5 -10010ee8: e7fb b.n 10010ee2 -10010eea: bf00 nop -10010eec: 1004b100 .word 0x1004b100 -10010ef0: 1004b0fc .word 0x1004b0fc - -10010ef4 : -10010ef4: b101 cbz r1, 10010ef8 -10010ef6: 6809 ldr r1, [r1, #0] -10010ef8: 60c1 str r1, [r0, #12] -10010efa: 4770 bx lr - -10010efc : -10010efc: b101 cbz r1, 10010f00 -10010efe: 6809 ldr r1, [r1, #0] -10010f00: 6081 str r1, [r0, #8] -10010f02: 4770 bx lr - -10010f04 : -10010f04: 4b01 ldr r3, [pc, #4] ; (10010f0c ) -10010f06: 6018 str r0, [r3, #0] -10010f08: 4770 bx lr -10010f0a: bf00 nop -10010f0c: 1004b0f8 .word 0x1004b0f8 - -10010f10 : -10010f10: b510 push {r4, lr} -10010f12: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 -10010f16: 4604 mov r4, r0 -10010f18: 07d9 lsls r1, r3, #31 -10010f1a: d413 bmi.n 10010f44 -10010f1c: f043 0201 orr.w r2, r3, #1 -10010f20: f880 2031 strb.w r2, [r0, #49] ; 0x31 -10010f24: 06da lsls r2, r3, #27 -10010f26: d50d bpl.n 10010f44 -10010f28: 069b lsls r3, r3, #26 -10010f2a: d502 bpl.n 10010f32 -10010f2c: 1d01 adds r1, r0, #4 -10010f2e: f003 f8c1 bl 100140b4 -10010f32: f994 3031 ldrsb.w r3, [r4, #49] ; 0x31 -10010f36: 2b00 cmp r3, #0 -10010f38: da04 bge.n 10010f44 -10010f3a: 4620 mov r0, r4 -10010f3c: e8bd 4010 ldmia.w sp!, {r4, lr} -10010f40: f7fd be66 b.w 1000ec10 -10010f44: bd10 pop {r4, pc} - -10010f46 : -10010f46: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 -10010f4a: 07d9 lsls r1, r3, #31 -10010f4c: d507 bpl.n 10010f5e -10010f4e: f023 0101 bic.w r1, r3, #1 -10010f52: 069b lsls r3, r3, #26 -10010f54: f880 1031 strb.w r1, [r0, #49] ; 0x31 -10010f58: d501 bpl.n 10010f5e -10010f5a: f003 b897 b.w 1001408c -10010f5e: 4770 bx lr - -10010f60 : -10010f60: b510 push {r4, lr} -10010f62: f003 fd0f bl 10014984 -10010f66: 2200 movs r2, #0 -10010f68: 4b08 ldr r3, [pc, #32] ; (10010f8c ) -10010f6a: 701a strb r2, [r3, #0] -10010f6c: f003 fd0f bl 1001498e -10010f70: 4b07 ldr r3, [pc, #28] ; (10010f90 ) -10010f72: 681c ldr r4, [r3, #0] -10010f74: b904 cbnz r4, 10010f78 -10010f76: bd10 pop {r4, pc} -10010f78: 6fa0 ldr r0, [r4, #120] ; 0x78 -10010f7a: b120 cbz r0, 10010f86 -10010f7c: f000 fb6e bl 1001165c -10010f80: 2300 movs r3, #0 -10010f82: 67a3 str r3, [r4, #120] ; 0x78 -10010f84: bd10 pop {r4, pc} -10010f86: 68e4 ldr r4, [r4, #12] -10010f88: e7f4 b.n 10010f74 -10010f8a: bf00 nop -10010f8c: 1004b101 .word 0x1004b101 -10010f90: 1004b108 .word 0x1004b108 - -10010f94 : -10010f94: b538 push {r3, r4, r5, lr} -10010f96: f003 fcf5 bl 10014984 -10010f9a: 2301 movs r3, #1 -10010f9c: 4d0a ldr r5, [pc, #40] ; (10010fc8 ) -10010f9e: 782c ldrb r4, [r5, #0] -10010fa0: 702b strb r3, [r5, #0] -10010fa2: b2e4 uxtb r4, r4 -10010fa4: f003 fcf3 bl 1001498e -10010fa8: b964 cbnz r4, 10010fc4 -10010faa: 4622 mov r2, r4 -10010fac: 4621 mov r1, r4 -10010fae: 4807 ldr r0, [pc, #28] ; (10010fcc ) -10010fb0: f7fd fc52 bl 1000e858 -10010fb4: b130 cbz r0, 10010fc4 -10010fb6: f003 fce5 bl 10014984 -10010fba: 702c strb r4, [r5, #0] -10010fbc: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10010fc0: f003 bce5 b.w 1001498e -10010fc4: bd38 pop {r3, r4, r5, pc} -10010fc6: bf00 nop -10010fc8: 1004b101 .word 0x1004b101 -10010fcc: 10010f61 .word 0x10010f61 - -10010fd0 : -10010fd0: b570 push {r4, r5, r6, lr} -10010fd2: 9d04 ldr r5, [sp, #16] -10010fd4: 2803 cmp r0, #3 -10010fd6: d823 bhi.n 10011020 -10010fd8: e8df f000 tbb [pc, r0] -10010fdc: 1c1a021e .word 0x1c1a021e -10010fe0: 2022 movs r0, #34 ; 0x22 -10010fe2: 3003 adds r0, #3 -10010fe4: f020 0403 bic.w r4, r0, #3 -10010fe8: f8bd 0014 ldrh.w r0, [sp, #20] -10010fec: 1866 adds r6, r4, r1 -10010fee: 4286 cmp r6, r0 -10010ff0: f04f 0000 mov.w r0, #0 -10010ff4: dc15 bgt.n 10011022 -10010ff6: 6018 str r0, [r3, #0] -10010ff8: b185 cbz r5, 1001101c -10010ffa: 442c add r4, r5 -10010ffc: 605c str r4, [r3, #4] -10010ffe: 2002 movs r0, #2 -10011000: 731a strb r2, [r3, #12] -10011002: 2201 movs r2, #1 -10011004: 7358 strb r0, [r3, #13] -10011006: 8119 strh r1, [r3, #8] -10011008: 8159 strh r1, [r3, #10] -1001100a: 81da strh r2, [r3, #14] -1001100c: 4618 mov r0, r3 -1001100e: bd70 pop {r4, r5, r6, pc} -10011010: 200e movs r0, #14 -10011012: e7e6 b.n 10010fe2 -10011014: 2000 movs r0, #0 -10011016: e7e4 b.n 10010fe2 -10011018: 2036 movs r0, #54 ; 0x36 -1001101a: e7e2 b.n 10010fe2 -1001101c: 605d str r5, [r3, #4] -1001101e: e7ee b.n 10010ffe -10011020: 2000 movs r0, #0 -10011022: bd70 pop {r4, r5, r6, pc} - -10011024 : -10011024: b510 push {r4, lr} -10011026: b1e1 cbz r1, 10011062 -10011028: b138 cbz r0, 1001103a -1001102a: 2900 cmp r1, #0 -1001102c: da06 bge.n 1001103c -1001102e: 424a negs r2, r1 -10011030: 8943 ldrh r3, [r0, #10] -10011032: b292 uxth r2, r2 -10011034: 4293 cmp r3, r2 -10011036: d202 bcs.n 1001103e -10011038: 2001 movs r0, #1 -1001103a: bd10 pop {r4, pc} -1001103c: b28a uxth r2, r1 -1001103e: 7b04 ldrb r4, [r0, #12] -10011040: 6843 ldr r3, [r0, #4] -10011042: b10c cbz r4, 10011048 -10011044: 2c03 cmp r4, #3 -10011046: d10e bne.n 10011066 -10011048: 1a5b subs r3, r3, r1 -1001104a: f100 0210 add.w r2, r0, #16 -1001104e: 4293 cmp r3, r2 -10011050: d3f2 bcc.n 10011038 -10011052: 6043 str r3, [r0, #4] -10011054: 8943 ldrh r3, [r0, #10] -10011056: b289 uxth r1, r1 -10011058: 440b add r3, r1 -1001105a: 8143 strh r3, [r0, #10] -1001105c: 8903 ldrh r3, [r0, #8] -1001105e: 4419 add r1, r3 -10011060: 8101 strh r1, [r0, #8] -10011062: 2000 movs r0, #0 -10011064: bd10 pop {r4, pc} -10011066: 3c01 subs r4, #1 -10011068: 2c01 cmp r4, #1 -1001106a: d8e5 bhi.n 10011038 -1001106c: 2900 cmp r1, #0 -1001106e: dae3 bge.n 10011038 -10011070: 8944 ldrh r4, [r0, #10] -10011072: 4294 cmp r4, r2 -10011074: d3e0 bcc.n 10011038 -10011076: 1a5b subs r3, r3, r1 -10011078: e7eb b.n 10011052 - -1001107a : -1001107a: b5f8 push {r3, r4, r5, r6, r7, lr} -1001107c: 4604 mov r4, r0 -1001107e: b1e0 cbz r0, 100110ba -10011080: 2600 movs r6, #0 -10011082: b2f7 uxtb r7, r6 -10011084: b90c cbnz r4, 1001108a -10011086: 4638 mov r0, r7 -10011088: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001108a: f003 fc7b bl 10014984 -1001108e: 89e5 ldrh r5, [r4, #14] -10011090: 3d01 subs r5, #1 -10011092: b2ad uxth r5, r5 -10011094: 81e5 strh r5, [r4, #14] -10011096: f003 fc7a bl 1001498e -1001109a: 2d00 cmp r5, #0 -1001109c: d1f3 bne.n 10011086 -1001109e: 7b63 ldrb r3, [r4, #13] -100110a0: 6825 ldr r5, [r4, #0] -100110a2: 079b lsls r3, r3, #30 -100110a4: d505 bpl.n 100110b2 -100110a6: 6923 ldr r3, [r4, #16] -100110a8: 4620 mov r0, r4 -100110aa: 4798 blx r3 -100110ac: 3601 adds r6, #1 -100110ae: 462c mov r4, r5 -100110b0: e7e7 b.n 10011082 -100110b2: 4620 mov r0, r4 -100110b4: f004 f8d6 bl 10015264 -100110b8: e7f8 b.n 100110ac -100110ba: 4607 mov r7, r0 -100110bc: e7e3 b.n 10011086 - ... - -100110c0 : -100110c0: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -100110c4: 460e mov r6, r1 -100110c6: 4617 mov r7, r2 -100110c8: 2803 cmp r0, #3 -100110ca: d846 bhi.n 1001115a -100110cc: e8df f000 tbb [pc, r0] -100110d0: 0b09020d .word 0x0b09020d -100110d4: 2522 movs r5, #34 ; 0x22 -100110d6: 2f03 cmp r7, #3 -100110d8: d83f bhi.n 1001115a -100110da: e8df f007 tbb [pc, r7] -100110de: 7058 .short 0x7058 -100110e0: 0870 .short 0x0870 -100110e2: 250e movs r5, #14 -100110e4: e7f7 b.n 100110d6 -100110e6: 2500 movs r5, #0 -100110e8: e7f5 b.n 100110d6 -100110ea: 2536 movs r5, #54 ; 0x36 -100110ec: e7f3 b.n 100110d6 -100110ee: 4b3b ldr r3, [pc, #236] ; (100111dc ) -100110f0: 8bdf ldrh r7, [r3, #30] -100110f2: 4638 mov r0, r7 -100110f4: f004 f81a bl 1001512c -100110f8: 4604 mov r4, r0 -100110fa: b920 cbnz r0, 10011106 -100110fc: f7ff ff4a bl 10010f94 -10011100: 4620 mov r0, r4 -10011102: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -10011106: 2103 movs r1, #3 -10011108: 1942 adds r2, r0, r5 -1001110a: 3213 adds r2, #19 -1001110c: f022 0203 bic.w r2, r2, #3 -10011110: 2300 movs r3, #0 -10011112: 6042 str r2, [r0, #4] -10011114: 2201 movs r2, #1 -10011116: 440d add r5, r1 -10011118: f025 0503 bic.w r5, r5, #3 -1001111c: f5c5 75fa rsb r5, r5, #500 ; 0x1f4 -10011120: 42b5 cmp r5, r6 -10011122: bfa8 it ge -10011124: 4635 movge r5, r6 -10011126: 4681 mov r9, r0 -10011128: 469a mov sl, r3 -1001112a: 468b mov fp, r1 -1001112c: 4690 mov r8, r2 -1001112e: 8145 strh r5, [r0, #10] -10011130: 7301 strb r1, [r0, #12] -10011132: 6003 str r3, [r0, #0] -10011134: 8106 strh r6, [r0, #8] -10011136: 81c2 strh r2, [r0, #14] -10011138: 1b75 subs r5, r6, r5 -1001113a: 2d00 cmp r5, #0 -1001113c: dc04 bgt.n 10011148 -1001113e: 2301 movs r3, #1 -10011140: 81e3 strh r3, [r4, #14] -10011142: 2300 movs r3, #0 -10011144: 7363 strb r3, [r4, #13] -10011146: e7db b.n 10011100 -10011148: 4638 mov r0, r7 -1001114a: f003 ffef bl 1001512c -1001114e: b930 cbnz r0, 1001115e -10011150: f7ff ff20 bl 10010f94 -10011154: 4620 mov r0, r4 -10011156: f7ff ff90 bl 1001107a -1001115a: 2400 movs r4, #0 -1001115c: e7d0 b.n 10011100 -1001115e: b2aa uxth r2, r5 -10011160: f5b2 7ffa cmp.w r2, #500 ; 0x1f4 -10011164: f880 b00c strb.w fp, [r0, #12] -10011168: f880 a00d strb.w sl, [r0, #13] -1001116c: f8c0 a000 str.w sl, [r0] -10011170: f8c9 0000 str.w r0, [r9] -10011174: 8102 strh r2, [r0, #8] -10011176: bf28 it cs -10011178: f44f 72fa movcs.w r2, #500 ; 0x1f4 -1001117c: f100 0310 add.w r3, r0, #16 -10011180: 8142 strh r2, [r0, #10] -10011182: 6043 str r3, [r0, #4] -10011184: f8a0 800e strh.w r8, [r0, #14] -10011188: 1aad subs r5, r5, r2 -1001118a: 4681 mov r9, r0 -1001118c: e7d5 b.n 1001113a -1001118e: f105 0013 add.w r0, r5, #19 -10011192: 1cf3 adds r3, r6, #3 -10011194: f023 0303 bic.w r3, r3, #3 -10011198: f020 0003 bic.w r0, r0, #3 -1001119c: 4418 add r0, r3 -1001119e: f003 ffc5 bl 1001512c -100111a2: 4604 mov r4, r0 -100111a4: 2800 cmp r0, #0 -100111a6: d0d8 beq.n 1001115a -100111a8: 2300 movs r3, #0 -100111aa: 4405 add r5, r0 -100111ac: 3513 adds r5, #19 -100111ae: f025 0503 bic.w r5, r5, #3 -100111b2: 6045 str r5, [r0, #4] -100111b4: 8106 strh r6, [r0, #8] -100111b6: 8146 strh r6, [r0, #10] -100111b8: 6003 str r3, [r0, #0] -100111ba: 7303 strb r3, [r0, #12] -100111bc: e7bf b.n 1001113e -100111be: 4b07 ldr r3, [pc, #28] ; (100111dc ) -100111c0: 8b98 ldrh r0, [r3, #28] -100111c2: f003 ffb3 bl 1001512c -100111c6: 4604 mov r4, r0 -100111c8: 2800 cmp r0, #0 -100111ca: d0c6 beq.n 1001115a -100111cc: 2300 movs r3, #0 -100111ce: 8106 strh r6, [r0, #8] -100111d0: 6043 str r3, [r0, #4] -100111d2: 8146 strh r6, [r0, #10] -100111d4: 6003 str r3, [r0, #0] -100111d6: 7307 strb r7, [r0, #12] -100111d8: e7b1 b.n 1001113e -100111da: bf00 nop -100111dc: 10040088 .word 0x10040088 - -100111e0 : -100111e0: 8903 ldrh r3, [r0, #8] -100111e2: b510 push {r4, lr} -100111e4: 428b cmp r3, r1 -100111e6: 4604 mov r4, r0 -100111e8: d90b bls.n 10011202 -100111ea: 1acb subs r3, r1, r3 -100111ec: 8962 ldrh r2, [r4, #10] -100111ee: 6820 ldr r0, [r4, #0] -100111f0: 4291 cmp r1, r2 -100111f2: d807 bhi.n 10011204 -100111f4: 8161 strh r1, [r4, #10] -100111f6: 8121 strh r1, [r4, #8] -100111f8: b108 cbz r0, 100111fe -100111fa: f7ff ff3e bl 1001107a -100111fe: 2300 movs r3, #0 -10011200: 6023 str r3, [r4, #0] -10011202: bd10 pop {r4, pc} -10011204: 1a89 subs r1, r1, r2 -10011206: 8922 ldrh r2, [r4, #8] -10011208: b289 uxth r1, r1 -1001120a: 441a add r2, r3 -1001120c: 8122 strh r2, [r4, #8] -1001120e: 4604 mov r4, r0 -10011210: e7ec b.n 100111ec - -10011212 : -10011212: 4603 mov r3, r0 -10011214: 2200 movs r2, #0 -10011216: b2d0 uxtb r0, r2 -10011218: 3201 adds r2, #1 -1001121a: b903 cbnz r3, 1001121e -1001121c: 4770 bx lr -1001121e: 681b ldr r3, [r3, #0] -10011220: e7f9 b.n 10011216 - -10011222 : -10011222: b510 push {r4, lr} -10011224: 4604 mov r4, r0 -10011226: b140 cbz r0, 1001123a -10011228: f003 fbac bl 10014984 -1001122c: 89e3 ldrh r3, [r4, #14] -1001122e: 3301 adds r3, #1 -10011230: 81e3 strh r3, [r4, #14] -10011232: e8bd 4010 ldmia.w sp!, {r4, lr} -10011236: f003 bbaa b.w 1001498e -1001123a: bd10 pop {r4, pc} - -1001123c : -1001123c: b510 push {r4, lr} -1001123e: b150 cbz r0, 10011256 -10011240: b909 cbnz r1, 10011246 -10011242: bd10 pop {r4, pc} -10011244: 4620 mov r0, r4 -10011246: 8903 ldrh r3, [r0, #8] -10011248: 890a ldrh r2, [r1, #8] -1001124a: 6804 ldr r4, [r0, #0] -1001124c: 4413 add r3, r2 -1001124e: 8103 strh r3, [r0, #8] -10011250: 2c00 cmp r4, #0 -10011252: d1f7 bne.n 10011244 -10011254: 6001 str r1, [r0, #0] -10011256: bd10 pop {r4, pc} - -10011258 : -10011258: b510 push {r4, lr} -1001125a: f7ff ffef bl 1001123c -1001125e: e8bd 4010 ldmia.w sp!, {r4, lr} -10011262: 4608 mov r0, r1 -10011264: f7ff bfdd b.w 10011222 - -10011268 : -10011268: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1001126c: 460c mov r4, r1 -1001126e: 4605 mov r5, r0 -10011270: b918 cbnz r0, 1001127a -10011272: f06f 000d mvn.w r0, #13 -10011276: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1001127a: 2900 cmp r1, #0 -1001127c: d0f9 beq.n 10011272 -1001127e: 8902 ldrh r2, [r0, #8] -10011280: 890b ldrh r3, [r1, #8] -10011282: 429a cmp r2, r3 -10011284: d3f5 bcc.n 10011272 -10011286: f04f 0800 mov.w r8, #0 -1001128a: 4647 mov r7, r8 -1001128c: 8963 ldrh r3, [r4, #10] -1001128e: 896e ldrh r6, [r5, #10] -10011290: eba3 0308 sub.w r3, r3, r8 -10011294: 1bf6 subs r6, r6, r7 -10011296: 429e cmp r6, r3 -10011298: 6861 ldr r1, [r4, #4] -1001129a: 6868 ldr r0, [r5, #4] -1001129c: bfac ite ge -1001129e: b29e uxthge r6, r3 -100112a0: b2b6 uxthlt r6, r6 -100112a2: 4632 mov r2, r6 -100112a4: 4441 add r1, r8 -100112a6: 4438 add r0, r7 -100112a8: f009 fc82 bl 1001abb0 -100112ac: 4437 add r7, r6 -100112ae: 8962 ldrh r2, [r4, #10] -100112b0: 4446 add r6, r8 -100112b2: fa1f f886 uxth.w r8, r6 -100112b6: 896b ldrh r3, [r5, #10] -100112b8: 4542 cmp r2, r8 -100112ba: b2bf uxth r7, r7 -100112bc: bf9c itt ls -100112be: 6824 ldrls r4, [r4, #0] -100112c0: f04f 0800 movls.w r8, #0 -100112c4: 429f cmp r7, r3 -100112c6: d10b bne.n 100112e0 -100112c8: 682d ldr r5, [r5, #0] -100112ca: b945 cbnz r5, 100112de -100112cc: 2c00 cmp r4, #0 -100112ce: d1d0 bne.n 10011272 -100112d0: 4620 mov r0, r4 -100112d2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100112d6: f06f 0005 mvn.w r0, #5 -100112da: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100112de: 2700 movs r7, #0 -100112e0: b134 cbz r4, 100112f0 -100112e2: 8962 ldrh r2, [r4, #10] -100112e4: 8923 ldrh r3, [r4, #8] -100112e6: 429a cmp r2, r3 -100112e8: d102 bne.n 100112f0 -100112ea: 6823 ldr r3, [r4, #0] -100112ec: 2b00 cmp r3, #0 -100112ee: d1f2 bne.n 100112d6 -100112f0: 896a ldrh r2, [r5, #10] -100112f2: 892b ldrh r3, [r5, #8] -100112f4: 429a cmp r2, r3 -100112f6: d102 bne.n 100112fe -100112f8: 682b ldr r3, [r5, #0] -100112fa: 2b00 cmp r3, #0 -100112fc: d1eb bne.n 100112d6 -100112fe: 2c00 cmp r4, #0 -10011300: d1c4 bne.n 1001128c -10011302: e7e5 b.n 100112d0 - -10011304 : -10011304: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10011308: 460f mov r7, r1 -1001130a: 4690 mov r8, r2 -1001130c: 4606 mov r6, r0 -1001130e: b320 cbz r0, 1001135a -10011310: b329 cbz r1, 1001135e -10011312: 2500 movs r5, #0 -10011314: f1b8 0f00 cmp.w r8, #0 -10011318: d000 beq.n 1001131c -1001131a: b916 cbnz r6, 10011322 -1001131c: 4628 mov r0, r5 -1001131e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10011322: b133 cbz r3, 10011332 -10011324: 8971 ldrh r1, [r6, #10] -10011326: 428b cmp r3, r1 -10011328: d303 bcc.n 10011332 -1001132a: 1a5b subs r3, r3, r1 -1001132c: b29b uxth r3, r3 -1001132e: 6836 ldr r6, [r6, #0] -10011330: e7f0 b.n 10011314 -10011332: 8974 ldrh r4, [r6, #10] -10011334: 6871 ldr r1, [r6, #4] -10011336: 1ae4 subs r4, r4, r3 -10011338: b2a4 uxth r4, r4 -1001133a: 4544 cmp r4, r8 -1001133c: bf28 it cs -1001133e: 4644 movcs r4, r8 -10011340: 4419 add r1, r3 -10011342: 4622 mov r2, r4 -10011344: 1978 adds r0, r7, r5 -10011346: 4425 add r5, r4 -10011348: eba8 0404 sub.w r4, r8, r4 -1001134c: f009 fc30 bl 1001abb0 -10011350: b2ad uxth r5, r5 -10011352: fa1f f884 uxth.w r8, r4 -10011356: 2300 movs r3, #0 -10011358: e7e9 b.n 1001132e -1001135a: 4605 mov r5, r0 -1001135c: e7de b.n 1001131c -1001135e: 460d mov r5, r1 -10011360: e7dc b.n 1001131c - -10011362 : -10011362: b538 push {r3, r4, r5, lr} -10011364: 4604 mov r4, r0 -10011366: 6823 ldr r3, [r4, #0] -10011368: 4608 mov r0, r1 -1001136a: b913 cbnz r3, 10011372 -1001136c: 4625 mov r5, r4 -1001136e: 4628 mov r0, r5 -10011370: bd38 pop {r3, r4, r5, pc} -10011372: 2200 movs r2, #0 -10011374: 8921 ldrh r1, [r4, #8] -10011376: f7ff fea3 bl 100110c0 -1001137a: 4605 mov r5, r0 -1001137c: 2800 cmp r0, #0 -1001137e: d0f5 beq.n 1001136c -10011380: 4621 mov r1, r4 -10011382: f7ff ff71 bl 10011268 -10011386: 4620 mov r0, r4 -10011388: f7ff fe77 bl 1001107a -1001138c: e7ef b.n 1001136e - ... - -10011390 : -10011390: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10011394: 4607 mov r7, r0 -10011396: 2600 movs r6, #0 -10011398: 6843 ldr r3, [r0, #4] -1001139a: 4d19 ldr r5, [pc, #100] ; (10011400 ) -1001139c: f893 8009 ldrb.w r8, [r3, #9] -100113a0: 682c ldr r4, [r5, #0] -100113a2: f8df 9060 ldr.w r9, [pc, #96] ; 10011404 -100113a6: f8df a060 ldr.w sl, [pc, #96] ; 10011408 -100113aa: b914 cbnz r4, 100113b2 -100113ac: 4620 mov r0, r4 -100113ae: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -100113b2: 7c23 ldrb r3, [r4, #16] -100113b4: 4543 cmp r3, r8 -100113b6: d11e bne.n 100113f6 -100113b8: 6823 ldr r3, [r4, #0] -100113ba: b11b cbz r3, 100113c4 -100113bc: f8da 2000 ldr.w r2, [sl] -100113c0: 4293 cmp r3, r2 -100113c2: d118 bne.n 100113f6 -100113c4: f8d4 b014 ldr.w fp, [r4, #20] -100113c8: f1bb 0f00 cmp.w fp, #0 -100113cc: d013 beq.n 100113f6 -100113ce: 464b mov r3, r9 -100113d0: 463a mov r2, r7 -100113d2: 4621 mov r1, r4 -100113d4: 69a0 ldr r0, [r4, #24] -100113d6: 47d8 blx fp -100113d8: b138 cbz r0, 100113ea -100113da: b176 cbz r6, 100113fa -100113dc: 2001 movs r0, #1 -100113de: 2700 movs r7, #0 -100113e0: 68e3 ldr r3, [r4, #12] -100113e2: 60f3 str r3, [r6, #12] -100113e4: 682b ldr r3, [r5, #0] -100113e6: 602c str r4, [r5, #0] -100113e8: 60e3 str r3, [r4, #12] -100113ea: 68e3 ldr r3, [r4, #12] -100113ec: 4626 mov r6, r4 -100113ee: 2800 cmp r0, #0 -100113f0: d1dd bne.n 100113ae -100113f2: 461c mov r4, r3 -100113f4: e7d9 b.n 100113aa -100113f6: 2000 movs r0, #0 -100113f8: e7f7 b.n 100113ea -100113fa: 2001 movs r0, #1 -100113fc: 4637 mov r7, r6 -100113fe: e7f4 b.n 100113ea -10011400: 1004b104 .word 0x1004b104 -10011404: 1004aa34 .word 0x1004aa34 -10011408: 1004aa30 .word 0x1004aa30 - -1001140c : -1001140c: f06f 0009 mvn.w r0, #9 -10011410: 4770 bx lr - ... - -10011414 : -10011414: b5f0 push {r4, r5, r6, r7, lr} -10011416: f44f 4380 mov.w r3, #16384 ; 0x4000 -1001141a: f64f 75ff movw r5, #65535 ; 0xffff -1001141e: 4a10 ldr r2, [pc, #64] ; (10011460 ) -10011420: 4e10 ldr r6, [pc, #64] ; (10011464 ) -10011422: 8810 ldrh r0, [r2, #0] -10011424: 42a8 cmp r0, r5 -10011426: bf08 it eq -10011428: f44f 4040 moveq.w r0, #49152 ; 0xc000 -1001142c: f04f 0100 mov.w r1, #0 -10011430: bf1c itt ne -10011432: 3001 addne r0, #1 -10011434: b280 uxthne r0, r0 -10011436: f856 4021 ldr.w r4, [r6, r1, lsl #2] -1001143a: 6824 ldr r4, [r4, #0] -1001143c: b924 cbnz r4, 10011448 -1001143e: 3101 adds r1, #1 -10011440: 2904 cmp r1, #4 -10011442: d1f8 bne.n 10011436 -10011444: 8010 strh r0, [r2, #0] -10011446: bdf0 pop {r4, r5, r6, r7, pc} -10011448: 8be7 ldrh r7, [r4, #30] -1001144a: 4287 cmp r7, r0 -1001144c: d106 bne.n 1001145c -1001144e: 3b01 subs r3, #1 -10011450: b29b uxth r3, r3 -10011452: 2b00 cmp r3, #0 -10011454: d1e6 bne.n 10011424 -10011456: 8010 strh r0, [r2, #0] -10011458: 4618 mov r0, r3 -1001145a: bdf0 pop {r4, r5, r6, r7, pc} -1001145c: 68e4 ldr r4, [r4, #12] -1001145e: e7ed b.n 1001143c -10011460: 10044e64 .word 0x10044e64 -10011464: 100400b8 .word 0x100400b8 - -10011468 : -10011468: b508 push {r3, lr} -1001146a: 4b04 ldr r3, [pc, #16] ; (1001147c ) -1001146c: 4798 blx r3 -1001146e: ea6f 4080 mvn.w r0, r0, lsl #18 -10011472: ea6f 4090 mvn.w r0, r0, lsr #18 -10011476: 4b02 ldr r3, [pc, #8] ; (10011480 ) -10011478: 8018 strh r0, [r3, #0] -1001147a: bd08 pop {r3, pc} -1001147c: 0000f585 .word 0x0000f585 -10011480: 10044e64 .word 0x10044e64 - -10011484 : -10011484: b5f8 push {r3, r4, r5, r6, r7, lr} -10011486: 6983 ldr r3, [r0, #24] -10011488: 4604 mov r4, r0 -1001148a: 460d mov r5, r1 -1001148c: 2b00 cmp r3, #0 -1001148e: d133 bne.n 100114f8 -10011490: 7a03 ldrb r3, [r0, #8] -10011492: f013 0f04 tst.w r3, #4 -10011496: bf0c ite eq -10011498: 2704 moveq r7, #4 -1001149a: 2703 movne r7, #3 -1001149c: b91a cbnz r2, 100114a6 -1001149e: f7ff ffb9 bl 10011414 -100114a2: 4602 mov r2, r0 -100114a4: b358 cbz r0, 100114fe -100114a6: 2100 movs r1, #0 -100114a8: f8df e064 ldr.w lr, [pc, #100] ; 10011510 -100114ac: f85e 3021 ldr.w r3, [lr, r1, lsl #2] -100114b0: 681b ldr r3, [r3, #0] -100114b2: b97b cbnz r3, 100114d4 -100114b4: 3101 adds r1, #1 -100114b6: 428f cmp r7, r1 -100114b8: d1f8 bne.n 100114ac -100114ba: b115 cbz r5, 100114c2 -100114bc: 682b ldr r3, [r5, #0] -100114be: b103 cbz r3, 100114c2 -100114c0: 6023 str r3, [r4, #0] -100114c2: 4b12 ldr r3, [pc, #72] ; (1001150c ) -100114c4: 83e2 strh r2, [r4, #30] -100114c6: 681a ldr r2, [r3, #0] -100114c8: 601c str r4, [r3, #0] -100114ca: 60e2 str r2, [r4, #12] -100114cc: f7ff fb9c bl 10010c08 -100114d0: 2000 movs r0, #0 -100114d2: bdf8 pop {r3, r4, r5, r6, r7, pc} -100114d4: 8bd8 ldrh r0, [r3, #30] -100114d6: 4290 cmp r0, r2 -100114d8: d10c bne.n 100114f4 -100114da: 7a20 ldrb r0, [r4, #8] -100114dc: 0746 lsls r6, r0, #29 -100114de: d502 bpl.n 100114e6 -100114e0: 7a18 ldrb r0, [r3, #8] -100114e2: 0740 lsls r0, r0, #29 -100114e4: d406 bmi.n 100114f4 -100114e6: 681e ldr r6, [r3, #0] -100114e8: b166 cbz r6, 10011504 -100114ea: b15d cbz r5, 10011504 -100114ec: 6828 ldr r0, [r5, #0] -100114ee: b148 cbz r0, 10011504 -100114f0: 4286 cmp r6, r0 -100114f2: d007 beq.n 10011504 -100114f4: 68db ldr r3, [r3, #12] -100114f6: e7dc b.n 100114b2 -100114f8: f06f 0005 mvn.w r0, #5 -100114fc: bdf8 pop {r3, r4, r5, r6, r7, pc} -100114fe: f06f 0001 mvn.w r0, #1 -10011502: bdf8 pop {r3, r4, r5, r6, r7, pc} -10011504: f06f 0007 mvn.w r0, #7 -10011508: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001150a: bf00 nop -1001150c: 1004b110 .word 0x1004b110 -10011510: 100400b8 .word 0x100400b8 - -10011514 : -10011514: b538 push {r3, r4, r5, lr} -10011516: 6983 ldr r3, [r0, #24] -10011518: 4604 mov r4, r0 -1001151a: b10b cbz r3, 10011520 -1001151c: 2000 movs r0, #0 -1001151e: bd38 pop {r3, r4, r5, pc} -10011520: 7a03 ldrb r3, [r0, #8] -10011522: 075b lsls r3, r3, #29 -10011524: d502 bpl.n 1001152c -10011526: 4b26 ldr r3, [pc, #152] ; (100115c0 ) -10011528: 681b ldr r3, [r3, #0] -1001152a: bb03 cbnz r3, 1001156e -1001152c: 4b25 ldr r3, [pc, #148] ; (100115c4 ) -1001152e: 88d8 ldrh r0, [r3, #6] -10011530: f003 fdfc bl 1001512c -10011534: 4605 mov r5, r0 -10011536: 2800 cmp r0, #0 -10011538: d0f0 beq.n 1001151c -1001153a: 6923 ldr r3, [r4, #16] -1001153c: 8be2 ldrh r2, [r4, #30] -1001153e: 6103 str r3, [r0, #16] -10011540: 2301 movs r3, #1 -10011542: 83c2 strh r2, [r0, #30] -10011544: 6183 str r3, [r0, #24] -10011546: 7f23 ldrb r3, [r4, #28] -10011548: 7703 strb r3, [r0, #28] -1001154a: 7a23 ldrb r3, [r4, #8] -1001154c: f043 0302 orr.w r3, r3, #2 -10011550: 7203 strb r3, [r0, #8] -10011552: 7aa3 ldrb r3, [r4, #10] -10011554: 7283 strb r3, [r0, #10] -10011556: 7a63 ldrb r3, [r4, #9] -10011558: 7243 strb r3, [r0, #9] -1001155a: 6823 ldr r3, [r4, #0] -1001155c: 6003 str r3, [r0, #0] -1001155e: b1fa cbz r2, 100115a0 -10011560: 4a19 ldr r2, [pc, #100] ; (100115c8 ) -10011562: 6813 ldr r3, [r2, #0] -10011564: 429c cmp r4, r3 -10011566: d10c bne.n 10011582 -10011568: 68e3 ldr r3, [r4, #12] -1001156a: 6013 str r3, [r2, #0] -1001156c: e016 b.n 1001159c -1001156e: 8bd9 ldrh r1, [r3, #30] -10011570: 8be2 ldrh r2, [r4, #30] -10011572: 4291 cmp r1, r2 -10011574: d103 bne.n 1001157e -10011576: 6819 ldr r1, [r3, #0] -10011578: 6822 ldr r2, [r4, #0] -1001157a: 4291 cmp r1, r2 -1001157c: d0ce beq.n 1001151c -1001157e: 68db ldr r3, [r3, #12] -10011580: e7d3 b.n 1001152a -10011582: 2100 movs r1, #0 -10011584: 4a11 ldr r2, [pc, #68] ; (100115cc ) -10011586: 6013 str r3, [r2, #0] -10011588: b90b cbnz r3, 1001158e -1001158a: b139 cbz r1, 1001159c -1001158c: e7ed b.n 1001156a -1001158e: 68d8 ldr r0, [r3, #12] -10011590: 4284 cmp r4, r0 -10011592: d112 bne.n 100115ba -10011594: b101 cbz r1, 10011598 -10011596: 6013 str r3, [r2, #0] -10011598: 68e2 ldr r2, [r4, #12] -1001159a: 60da str r2, [r3, #12] -1001159c: 2300 movs r3, #0 -1001159e: 60e3 str r3, [r4, #12] -100115a0: 4620 mov r0, r4 -100115a2: f003 fe5f bl 10015264 -100115a6: 4b0a ldr r3, [pc, #40] ; (100115d0 ) -100115a8: 616b str r3, [r5, #20] -100115aa: 4b05 ldr r3, [pc, #20] ; (100115c0 ) -100115ac: 681a ldr r2, [r3, #0] -100115ae: 601d str r5, [r3, #0] -100115b0: 60ea str r2, [r5, #12] -100115b2: f7ff fb29 bl 10010c08 -100115b6: 4628 mov r0, r5 -100115b8: bd38 pop {r3, r4, r5, pc} -100115ba: 2101 movs r1, #1 -100115bc: 4603 mov r3, r0 -100115be: e7e3 b.n 10011588 -100115c0: 1004b114 .word 0x1004b114 -100115c4: 10040088 .word 0x10040088 -100115c8: 1004b110 .word 0x1004b110 -100115cc: 1004b120 .word 0x1004b120 -100115d0: 1001140d .word 0x1001140d - -100115d4 : -100115d4: 4602 mov r2, r0 -100115d6: b570 push {r4, r5, r6, lr} -100115d8: f640 3668 movw r6, #2920 ; 0xb68 -100115dc: 8e05 ldrh r5, [r0, #48] ; 0x30 -100115de: 6b41 ldr r1, [r0, #52] ; 0x34 -100115e0: 6ac4 ldr r4, [r0, #44] ; 0x2c -100115e2: 1a6b subs r3, r5, r1 -100115e4: 1918 adds r0, r3, r4 -100115e6: 8f53 ldrh r3, [r2, #58] ; 0x3a -100115e8: 42b3 cmp r3, r6 -100115ea: bf94 ite ls -100115ec: 1ac3 subls r3, r0, r3 -100115ee: 1b83 subhi r3, r0, r6 -100115f0: 2b00 cmp r3, #0 -100115f2: db01 blt.n 100115f8 -100115f4: 8655 strh r5, [r2, #50] ; 0x32 -100115f6: bd70 pop {r4, r5, r6, pc} -100115f8: 2000 movs r0, #0 -100115fa: 1a63 subs r3, r4, r1 -100115fc: 2b00 cmp r3, #0 -100115fe: bfd6 itet le -10011600: 1b09 suble r1, r1, r4 -10011602: 8650 strhgt r0, [r2, #50] ; 0x32 -10011604: 8651 strhle r1, [r2, #50] ; 0x32 -10011606: bd70 pop {r4, r5, r6, pc} - -10011608 : -10011608: 8e03 ldrh r3, [r0, #48] ; 0x30 -1001160a: b510 push {r4, lr} -1001160c: 4419 add r1, r3 -1001160e: f241 63d0 movw r3, #5840 ; 0x16d0 -10011612: b289 uxth r1, r1 -10011614: 4299 cmp r1, r3 -10011616: bf8c ite hi -10011618: 8603 strhhi r3, [r0, #48] ; 0x30 -1001161a: 8601 strhls r1, [r0, #48] ; 0x30 -1001161c: 4604 mov r4, r0 -1001161e: f7ff ffd9 bl 100115d4 -10011622: f240 53b3 movw r3, #1459 ; 0x5b3 -10011626: 4298 cmp r0, r3 -10011628: dd0a ble.n 10011640 -1001162a: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -1001162e: 4620 mov r0, r4 -10011630: f043 0302 orr.w r3, r3, #2 -10011634: f884 3022 strb.w r3, [r4, #34] ; 0x22 -10011638: e8bd 4010 ldmia.w sp!, {r4, lr} -1001163c: f001 bfde b.w 100135fc -10011640: bd10 pop {r4, pc} - -10011642 : -10011642: b510 push {r4, lr} -10011644: 4604 mov r4, r0 -10011646: b140 cbz r0, 1001165a -10011648: 6840 ldr r0, [r0, #4] -1001164a: b108 cbz r0, 10011650 -1001164c: f7ff fd15 bl 1001107a -10011650: 4620 mov r0, r4 -10011652: e8bd 4010 ldmia.w sp!, {r4, lr} -10011656: f003 be05 b.w 10015264 -1001165a: bd10 pop {r4, pc} - -1001165c : -1001165c: b510 push {r4, lr} -1001165e: b900 cbnz r0, 10011662 -10011660: bd10 pop {r4, pc} -10011662: 6804 ldr r4, [r0, #0] -10011664: f7ff ffed bl 10011642 -10011668: 4620 mov r0, r4 -1001166a: e7f8 b.n 1001165e - -1001166c : -1001166c: 7701 strb r1, [r0, #28] -1001166e: 4770 bx lr - -10011670 : -10011670: b538 push {r3, r4, r5, lr} -10011672: 4b08 ldr r3, [pc, #32] ; (10011694 ) -10011674: 4605 mov r5, r0 -10011676: 8918 ldrh r0, [r3, #8] -10011678: f003 fd58 bl 1001512c -1001167c: 4604 mov r4, r0 -1001167e: b130 cbz r0, 1001168e -10011680: 2214 movs r2, #20 -10011682: 4629 mov r1, r5 -10011684: f009 fa94 bl 1001abb0 -10011688: 6860 ldr r0, [r4, #4] -1001168a: f7ff fdca bl 10011222 -1001168e: 4620 mov r0, r4 -10011690: bd38 pop {r3, r4, r5, pc} -10011692: bf00 nop -10011694: 10040088 .word 0x10040088 - -10011698 : -10011698: 6101 str r1, [r0, #16] -1001169a: 4770 bx lr - -1001169c : -1001169c: f8c0 1084 str.w r1, [r0, #132] ; 0x84 -100116a0: 4770 bx lr - -100116a2 : -100116a2: f8c0 1080 str.w r1, [r0, #128] ; 0x80 -100116a6: 4770 bx lr - -100116a8 : -100116a8: f8c0 1090 str.w r1, [r0, #144] ; 0x90 -100116ac: 4770 bx lr - -100116ae : -100116ae: 6141 str r1, [r0, #20] -100116b0: 4770 bx lr - -100116b2 : -100116b2: f8c0 108c str.w r1, [r0, #140] ; 0x8c -100116b6: f880 2024 strb.w r2, [r0, #36] ; 0x24 -100116ba: 4770 bx lr - -100116bc : -100116bc: b538 push {r3, r4, r5, lr} -100116be: 6983 ldr r3, [r0, #24] -100116c0: 4604 mov r4, r0 -100116c2: 2b01 cmp r3, #1 -100116c4: d919 bls.n 100116fa -100116c6: 2b0a cmp r3, #10 -100116c8: d017 beq.n 100116fa -100116ca: 6fc0 ldr r0, [r0, #124] ; 0x7c -100116cc: b118 cbz r0, 100116d6 -100116ce: f7ff fcd4 bl 1001107a -100116d2: 2300 movs r3, #0 -100116d4: 67e3 str r3, [r4, #124] ; 0x7c -100116d6: 6fa0 ldr r0, [r4, #120] ; 0x78 -100116d8: f7ff ffc0 bl 1001165c -100116dc: 2500 movs r5, #0 -100116de: f64f 73ff movw r3, #65535 ; 0xffff -100116e2: 6f20 ldr r0, [r4, #112] ; 0x70 -100116e4: 8723 strh r3, [r4, #56] ; 0x38 -100116e6: 67a5 str r5, [r4, #120] ; 0x78 -100116e8: f7ff ffb8 bl 1001165c -100116ec: 6f60 ldr r0, [r4, #116] ; 0x74 -100116ee: f7ff ffb5 bl 1001165c -100116f2: 6725 str r5, [r4, #112] ; 0x70 -100116f4: 6765 str r5, [r4, #116] ; 0x74 -100116f6: f8a4 506e strh.w r5, [r4, #110] ; 0x6e -100116fa: bd38 pop {r3, r4, r5, pc} - -100116fc : -100116fc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10011700: 4dae ldr r5, [pc, #696] ; (100119bc ) -10011702: 4faf ldr r7, [pc, #700] ; (100119c0 ) -10011704: 682b ldr r3, [r5, #0] -10011706: b085 sub sp, #20 -10011708: 3301 adds r3, #1 -1001170a: 602b str r3, [r5, #0] -1001170c: 783b ldrb r3, [r7, #0] -1001170e: f8df 92c0 ldr.w r9, [pc, #704] ; 100119d0 -10011712: 3301 adds r3, #1 -10011714: 703b strb r3, [r7, #0] -10011716: 9702 str r7, [sp, #8] -10011718: 4baa ldr r3, [pc, #680] ; (100119c4 ) -1001171a: 2600 movs r6, #0 -1001171c: 4698 mov r8, r3 -1001171e: 681c ldr r4, [r3, #0] -10011720: f8df b2b0 ldr.w fp, [pc, #688] ; 100119d4 -10011724: b93c cbnz r4, 10011736 -10011726: 4fa8 ldr r7, [pc, #672] ; (100119c8 ) -10011728: 683e ldr r6, [r7, #0] -1001172a: 2e00 cmp r6, #0 -1001172c: f040 812e bne.w 1001198c -10011730: b005 add sp, #20 -10011732: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10011736: 9b02 ldr r3, [sp, #8] -10011738: f894 2025 ldrb.w r2, [r4, #37] ; 0x25 -1001173c: 781b ldrb r3, [r3, #0] -1001173e: 429a cmp r2, r3 -10011740: d105 bne.n 1001174e -10011742: f8d4 a00c ldr.w sl, [r4, #12] -10011746: 4634 mov r4, r6 -10011748: 4626 mov r6, r4 -1001174a: 4654 mov r4, sl -1001174c: e7ea b.n 10011724 -1001174e: 69a0 ldr r0, [r4, #24] -10011750: f884 3025 strb.w r3, [r4, #37] ; 0x25 -10011754: 2802 cmp r0, #2 -10011756: f894 104a ldrb.w r1, [r4, #74] ; 0x4a -1001175a: d102 bne.n 10011762 -1001175c: 2906 cmp r1, #6 -1001175e: f000 80d0 beq.w 10011902 -10011762: 290c cmp r1, #12 -10011764: f000 80cd beq.w 10011902 -10011768: f894 70a1 ldrb.w r7, [r4, #161] ; 0xa1 -1001176c: 2f00 cmp r7, #0 -1001176e: f000 8092 beq.w 10011896 -10011772: 4996 ldr r1, [pc, #600] ; (100119cc ) -10011774: f894 20a0 ldrb.w r2, [r4, #160] ; 0xa0 -10011778: 4439 add r1, r7 -1001177a: 3201 adds r2, #1 -1001177c: f811 1c01 ldrb.w r1, [r1, #-1] -10011780: b2d2 uxtb r2, r2 -10011782: 4291 cmp r1, r2 -10011784: f884 20a0 strb.w r2, [r4, #160] ; 0xa0 -10011788: d978 bls.n 1001187c -1001178a: 2700 movs r7, #0 -1001178c: 69a2 ldr r2, [r4, #24] -1001178e: 2a06 cmp r2, #6 -10011790: d10a bne.n 100117a8 -10011792: f894 1022 ldrb.w r1, [r4, #34] ; 0x22 -10011796: 06cb lsls r3, r1, #27 -10011798: d506 bpl.n 100117a8 -1001179a: 6829 ldr r1, [r5, #0] -1001179c: 6aa0 ldr r0, [r4, #40] ; 0x28 -1001179e: 1a09 subs r1, r1, r0 -100117a0: 2928 cmp r1, #40 ; 0x28 -100117a2: bf84 itt hi -100117a4: 1c7b addhi r3, r7, #1 -100117a6: b2df uxtbhi r7, r3 -100117a8: f894 a008 ldrb.w sl, [r4, #8] -100117ac: f01a 0a08 ands.w sl, sl, #8 -100117b0: d01b beq.n 100117ea -100117b2: 1f11 subs r1, r2, #4 -100117b4: 2901 cmp r1, #1 -100117b6: d902 bls.n 100117be -100117b8: 2a07 cmp r2, #7 -100117ba: f040 80b4 bne.w 10011926 -100117be: f44f 7efa mov.w lr, #500 ; 0x1f4 -100117c2: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 -100117c6: f8d4 a098 ldr.w sl, [r4, #152] ; 0x98 -100117ca: f8d4 109c ldr.w r1, [r4, #156] ; 0x9c -100117ce: 6828 ldr r0, [r5, #0] -100117d0: fb01 310a mla r1, r1, sl, r3 -100117d4: fbb1 f1fe udiv r1, r1, lr -100117d8: 6aa2 ldr r2, [r4, #40] ; 0x28 -100117da: 1a80 subs r0, r0, r2 -100117dc: 4288 cmp r0, r1 -100117de: f240 8092 bls.w 10011906 -100117e2: f04f 0a01 mov.w sl, #1 -100117e6: 1c7b adds r3, r7, #1 -100117e8: b2df uxtb r7, r3 -100117ea: 6fa0 ldr r0, [r4, #120] ; 0x78 -100117ec: b168 cbz r0, 1001180a -100117ee: 682a ldr r2, [r5, #0] -100117f0: 6aa1 ldr r1, [r4, #40] ; 0x28 -100117f2: f9b4 e048 ldrsh.w lr, [r4, #72] ; 0x48 -100117f6: 1a51 subs r1, r2, r1 -100117f8: 2206 movs r2, #6 -100117fa: fb02 f20e mul.w r2, r2, lr -100117fe: 4291 cmp r1, r2 -10011800: d303 bcc.n 1001180a -10011802: f7ff ff2b bl 1001165c -10011806: 2200 movs r2, #0 -10011808: 67a2 str r2, [r4, #120] ; 0x78 -1001180a: 69a2 ldr r2, [r4, #24] -1001180c: 2a03 cmp r2, #3 -1001180e: f040 808d bne.w 1001192c -10011812: 682a ldr r2, [r5, #0] -10011814: 6aa1 ldr r1, [r4, #40] ; 0x28 -10011816: 1a52 subs r2, r2, r1 -10011818: 2a28 cmp r2, #40 ; 0x28 -1001181a: d802 bhi.n 10011822 -1001181c: 2f00 cmp r7, #0 -1001181e: f000 8090 beq.w 10011942 -10011822: 4620 mov r0, r4 -10011824: f7ff ff4a bl 100116bc -10011828: 68e3 ldr r3, [r4, #12] -1001182a: 2e00 cmp r6, #0 -1001182c: f000 8086 beq.w 1001193c -10011830: 60f3 str r3, [r6, #12] -10011832: f1ba 0f00 cmp.w sl, #0 -10011836: d009 beq.n 1001184c -10011838: 8c23 ldrh r3, [r4, #32] -1001183a: 4622 mov r2, r4 -1001183c: 9301 str r3, [sp, #4] -1001183e: 8be3 ldrh r3, [r4, #30] -10011840: 9300 str r3, [sp, #0] -10011842: 6ae1 ldr r1, [r4, #44] ; 0x2c -10011844: 1d23 adds r3, r4, #4 -10011846: 6d60 ldr r0, [r4, #84] ; 0x54 -10011848: f002 f81a bl 10013880 -1001184c: 6922 ldr r2, [r4, #16] -1001184e: 4620 mov r0, r4 -10011850: f8d4 7090 ldr.w r7, [r4, #144] ; 0x90 -10011854: 9203 str r2, [sp, #12] -10011856: f8d4 a00c ldr.w sl, [r4, #12] -1001185a: f003 fd03 bl 10015264 -1001185e: 2100 movs r1, #0 -10011860: f889 1000 strb.w r1, [r9] -10011864: b127 cbz r7, 10011870 -10011866: 9a03 ldr r2, [sp, #12] -10011868: f06f 0109 mvn.w r1, #9 -1001186c: 4610 mov r0, r2 -1001186e: 47b8 blx r7 -10011870: f899 3000 ldrb.w r3, [r9] -10011874: 2b00 cmp r3, #0 -10011876: f43f af66 beq.w 10011746 -1001187a: e74d b.n 10011718 -1001187c: 2200 movs r2, #0 -1001187e: 2f06 cmp r7, #6 -10011880: bf98 it ls -10011882: 1c7b addls r3, r7, #1 -10011884: f884 20a0 strb.w r2, [r4, #160] ; 0xa0 -10011888: bf98 it ls -1001188a: f884 30a1 strbls.w r3, [r4, #161] ; 0xa1 -1001188e: 4620 mov r0, r4 -10011890: f002 f8d4 bl 10013a3c -10011894: e779 b.n 1001178a -10011896: f9b4 2038 ldrsh.w r2, [r4, #56] ; 0x38 -1001189a: 2a00 cmp r2, #0 -1001189c: bfa4 itt ge -1001189e: 3201 addge r2, #1 -100118a0: 8722 strhge r2, [r4, #56] ; 0x38 -100118a2: 6f62 ldr r2, [r4, #116] ; 0x74 -100118a4: 2a00 cmp r2, #0 -100118a6: f43f af70 beq.w 1001178a -100118aa: f9b4 e038 ldrsh.w lr, [r4, #56] ; 0x38 -100118ae: f9b4 2048 ldrsh.w r2, [r4, #72] ; 0x48 -100118b2: 4596 cmp lr, r2 -100118b4: f6ff af69 blt.w 1001178a -100118b8: 2802 cmp r0, #2 -100118ba: d00a beq.n 100118d2 -100118bc: f9b4 0044 ldrsh.w r0, [r4, #68] ; 0x44 -100118c0: f9b4 2046 ldrsh.w r2, [r4, #70] ; 0x46 -100118c4: f81b 1001 ldrb.w r1, [fp, r1] -100118c8: eb02 02e0 add.w r2, r2, r0, asr #3 -100118cc: 408a lsls r2, r1 -100118ce: f8a4 2048 strh.w r2, [r4, #72] ; 0x48 -100118d2: 2200 movs r2, #0 -100118d4: f8b4 1050 ldrh.w r1, [r4, #80] ; 0x50 -100118d8: 8722 strh r2, [r4, #56] ; 0x38 -100118da: f8b4 2064 ldrh.w r2, [r4, #100] ; 0x64 -100118de: 428a cmp r2, r1 -100118e0: bf28 it cs -100118e2: 460a movcs r2, r1 -100118e4: 8f61 ldrh r1, [r4, #58] ; 0x3a -100118e6: 0852 lsrs r2, r2, #1 -100118e8: 0048 lsls r0, r1, #1 -100118ea: 4282 cmp r2, r0 -100118ec: f8a4 2052 strh.w r2, [r4, #82] ; 0x52 -100118f0: f8a4 1050 strh.w r1, [r4, #80] ; 0x50 -100118f4: bfb8 it lt -100118f6: f8a4 0052 strhlt.w r0, [r4, #82] ; 0x52 -100118fa: 4620 mov r0, r4 -100118fc: f002 f80c bl 10013918 -10011900: e744 b.n 1001178c -10011902: 2701 movs r7, #1 -10011904: e742 b.n 1001178c -10011906: f894 20a2 ldrb.w r2, [r4, #162] ; 0xa2 -1001190a: fb0a 3202 mla r2, sl, r2, r3 -1001190e: fbb2 f2fe udiv r2, r2, lr -10011912: 4290 cmp r0, r2 -10011914: d907 bls.n 10011926 -10011916: 4620 mov r0, r4 -10011918: f002 f867 bl 100139ea -1001191c: f894 20a2 ldrb.w r2, [r4, #162] ; 0xa2 -10011920: 3201 adds r2, #1 -10011922: f884 20a2 strb.w r2, [r4, #162] ; 0xa2 -10011926: f04f 0a00 mov.w sl, #0 -1001192a: e75e b.n 100117ea -1001192c: 2a09 cmp r2, #9 -1001192e: f47f af75 bne.w 1001181c -10011932: 682a ldr r2, [r5, #0] -10011934: 6aa1 ldr r1, [r4, #40] ; 0x28 -10011936: 1a52 subs r2, r2, r1 -10011938: 2af0 cmp r2, #240 ; 0xf0 -1001193a: e76e b.n 1001181a -1001193c: f8c8 3000 str.w r3, [r8] -10011940: e777 b.n 10011832 -10011942: f894 2023 ldrb.w r2, [r4, #35] ; 0x23 -10011946: f894 1024 ldrb.w r1, [r4, #36] ; 0x24 -1001194a: 3201 adds r2, #1 -1001194c: b2d2 uxtb r2, r2 -1001194e: 4291 cmp r1, r2 -10011950: f8d4 a00c ldr.w sl, [r4, #12] -10011954: f884 2023 strb.w r2, [r4, #35] ; 0x23 -10011958: f63f aef6 bhi.w 10011748 -1001195c: f8d4 208c ldr.w r2, [r4, #140] ; 0x8c -10011960: f884 7023 strb.w r7, [r4, #35] ; 0x23 -10011964: f889 7000 strb.w r7, [r9] -10011968: b172 cbz r2, 10011988 -1001196a: 4621 mov r1, r4 -1001196c: 6920 ldr r0, [r4, #16] -1001196e: 4790 blx r2 -10011970: f899 3000 ldrb.w r3, [r9] -10011974: 2b00 cmp r3, #0 -10011976: f47f aecf bne.w 10011718 -1001197a: 2800 cmp r0, #0 -1001197c: f47f aee4 bne.w 10011748 -10011980: 4620 mov r0, r4 -10011982: f001 fe3b bl 100135fc -10011986: e6df b.n 10011748 -10011988: 4638 mov r0, r7 -1001198a: e7f1 b.n 10011970 -1001198c: 682b ldr r3, [r5, #0] -1001198e: 6ab2 ldr r2, [r6, #40] ; 0x28 -10011990: 1a9b subs r3, r3, r2 -10011992: 2bf0 cmp r3, #240 ; 0xf0 -10011994: d80a bhi.n 100119ac -10011996: 4634 mov r4, r6 -10011998: 68f6 ldr r6, [r6, #12] -1001199a: e6c6 b.n 1001172a -1001199c: 60e3 str r3, [r4, #12] -1001199e: f8d6 800c ldr.w r8, [r6, #12] -100119a2: 4630 mov r0, r6 -100119a4: f003 fc5e bl 10015264 -100119a8: 4646 mov r6, r8 -100119aa: e6be b.n 1001172a -100119ac: 4630 mov r0, r6 -100119ae: f7ff fe85 bl 100116bc -100119b2: 68f3 ldr r3, [r6, #12] -100119b4: 2c00 cmp r4, #0 -100119b6: d1f1 bne.n 1001199c -100119b8: 603b str r3, [r7, #0] -100119ba: e7f0 b.n 1001199e -100119bc: 1004b118 .word 0x1004b118 -100119c0: 1004b11d .word 0x1004b11d -100119c4: 1004b108 .word 0x1004b108 -100119c8: 1004b124 .word 0x1004b124 -100119cc: 100400c8 .word 0x100400c8 -100119d0: 1004b10c .word 0x1004b10c -100119d4: 100400a8 .word 0x100400a8 - -100119d8 : -100119d8: 6803 ldr r3, [r0, #0] -100119da: b510 push {r4, lr} -100119dc: 428b cmp r3, r1 -100119de: 460c mov r4, r1 -100119e0: d119 bne.n 10011a16 -100119e2: 68cb ldr r3, [r1, #12] -100119e4: 6003 str r3, [r0, #0] -100119e6: 2300 movs r3, #0 -100119e8: 4620 mov r0, r4 -100119ea: 60e3 str r3, [r4, #12] -100119ec: f7ff fe66 bl 100116bc -100119f0: 69a3 ldr r3, [r4, #24] -100119f2: 2b0a cmp r3, #10 -100119f4: d00c beq.n 10011a10 -100119f6: 2b01 cmp r3, #1 -100119f8: d00a beq.n 10011a10 -100119fa: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -100119fe: 07da lsls r2, r3, #31 -10011a00: d506 bpl.n 10011a10 -10011a02: f043 0302 orr.w r3, r3, #2 -10011a06: f884 3022 strb.w r3, [r4, #34] ; 0x22 -10011a0a: 4620 mov r0, r4 -10011a0c: f001 fdf6 bl 100135fc -10011a10: 2300 movs r3, #0 -10011a12: 61a3 str r3, [r4, #24] -10011a14: bd10 pop {r4, pc} -10011a16: 2100 movs r1, #0 -10011a18: 4a08 ldr r2, [pc, #32] ; (10011a3c ) -10011a1a: 6013 str r3, [r2, #0] -10011a1c: b91b cbnz r3, 10011a26 -10011a1e: 2900 cmp r1, #0 -10011a20: d0e1 beq.n 100119e6 -10011a22: 6013 str r3, [r2, #0] -10011a24: e7df b.n 100119e6 -10011a26: 68d8 ldr r0, [r3, #12] -10011a28: 4284 cmp r4, r0 -10011a2a: d104 bne.n 10011a36 -10011a2c: b101 cbz r1, 10011a30 -10011a2e: 6013 str r3, [r2, #0] -10011a30: 68e2 ldr r2, [r4, #12] -10011a32: 60da str r2, [r3, #12] -10011a34: e7d7 b.n 100119e6 -10011a36: 2101 movs r1, #1 -10011a38: 4603 mov r3, r0 -10011a3a: e7ef b.n 10011a1c -10011a3c: 1004b120 .word 0x1004b120 - -10011a40 : -10011a40: b537 push {r0, r1, r2, r4, r5, lr} -10011a42: 6983 ldr r3, [r0, #24] -10011a44: 4604 mov r4, r0 -10011a46: 2900 cmp r1, #0 -10011a48: d041 beq.n 10011ace -10011a4a: 2b04 cmp r3, #4 -10011a4c: d001 beq.n 10011a52 -10011a4e: 2b07 cmp r3, #7 -10011a50: d13d bne.n 10011ace -10011a52: 6fe2 ldr r2, [r4, #124] ; 0x7c -10011a54: b922 cbnz r2, 10011a60 -10011a56: f241 62d0 movw r2, #5840 ; 0x16d0 -10011a5a: 8e21 ldrh r1, [r4, #48] ; 0x30 -10011a5c: 4291 cmp r1, r2 -10011a5e: d036 beq.n 10011ace -10011a60: 8c23 ldrh r3, [r4, #32] -10011a62: 4622 mov r2, r4 -10011a64: 9301 str r3, [sp, #4] -10011a66: 8be3 ldrh r3, [r4, #30] -10011a68: 6ae1 ldr r1, [r4, #44] ; 0x2c -10011a6a: 9300 str r3, [sp, #0] -10011a6c: 6d60 ldr r0, [r4, #84] ; 0x54 -10011a6e: 1d23 adds r3, r4, #4 -10011a70: f001 ff06 bl 10013880 -10011a74: 4620 mov r0, r4 -10011a76: f7ff fe21 bl 100116bc -10011a7a: 4a3e ldr r2, [pc, #248] ; (10011b74 ) -10011a7c: 6813 ldr r3, [r2, #0] -10011a7e: 429c cmp r4, r3 -10011a80: d102 bne.n 10011a88 -10011a82: 68e3 ldr r3, [r4, #12] -10011a84: 6013 str r3, [r2, #0] -10011a86: e00c b.n 10011aa2 -10011a88: 2100 movs r1, #0 -10011a8a: 4a3b ldr r2, [pc, #236] ; (10011b78 ) -10011a8c: 6013 str r3, [r2, #0] -10011a8e: b90b cbnz r3, 10011a94 -10011a90: b139 cbz r1, 10011aa2 -10011a92: e7f7 b.n 10011a84 -10011a94: 68d8 ldr r0, [r3, #12] -10011a96: 4284 cmp r4, r0 -10011a98: d116 bne.n 10011ac8 -10011a9a: b101 cbz r1, 10011a9e -10011a9c: 6013 str r3, [r2, #0] -10011a9e: 68e2 ldr r2, [r4, #12] -10011aa0: 60da str r2, [r3, #12] -10011aa2: 2201 movs r2, #1 -10011aa4: 2500 movs r5, #0 -10011aa6: 4b35 ldr r3, [pc, #212] ; (10011b7c ) -10011aa8: 60e5 str r5, [r4, #12] -10011aaa: 701a strb r2, [r3, #0] -10011aac: 69a3 ldr r3, [r4, #24] -10011aae: 2b04 cmp r3, #4 -10011ab0: d13a bne.n 10011b28 -10011ab2: 230a movs r3, #10 -10011ab4: 61a3 str r3, [r4, #24] -10011ab6: 4b32 ldr r3, [pc, #200] ; (10011b80 ) -10011ab8: 681a ldr r2, [r3, #0] -10011aba: 601c str r4, [r3, #0] -10011abc: 60e2 str r2, [r4, #12] -10011abe: f7ff f8a3 bl 10010c08 -10011ac2: 2000 movs r0, #0 -10011ac4: b003 add sp, #12 -10011ac6: bd30 pop {r4, r5, pc} -10011ac8: 2101 movs r1, #1 -10011aca: 4603 mov r3, r0 -10011acc: e7df b.n 10011a8e -10011ace: 2b07 cmp r3, #7 -10011ad0: d8f7 bhi.n 10011ac2 -10011ad2: a201 add r2, pc, #4 ; (adr r2, 10011ad8 ) -10011ad4: f852 f023 ldr.w pc, [r2, r3, lsl #2] -10011ad8: 10011af9 .word 0x10011af9 -10011adc: 10011b37 .word 0x10011b37 -10011ae0: 10011b41 .word 0x10011b41 -10011ae4: 10011b51 .word 0x10011b51 -10011ae8: 10011b51 .word 0x10011b51 -10011aec: 10011ac3 .word 0x10011ac3 -10011af0: 10011ac3 .word 0x10011ac3 -10011af4: 10011b67 .word 0x10011b67 -10011af8: 8be3 ldrh r3, [r4, #30] -10011afa: b1ab cbz r3, 10011b28 -10011afc: 4a21 ldr r2, [pc, #132] ; (10011b84 ) -10011afe: 6813 ldr r3, [r2, #0] -10011b00: 429c cmp r4, r3 -10011b02: d102 bne.n 10011b0a -10011b04: 68e3 ldr r3, [r4, #12] -10011b06: 6013 str r3, [r2, #0] -10011b08: e00c b.n 10011b24 -10011b0a: 2100 movs r1, #0 -10011b0c: 4a1a ldr r2, [pc, #104] ; (10011b78 ) -10011b0e: 6013 str r3, [r2, #0] -10011b10: b90b cbnz r3, 10011b16 -10011b12: b139 cbz r1, 10011b24 -10011b14: e7f7 b.n 10011b06 -10011b16: 68d8 ldr r0, [r3, #12] -10011b18: 4284 cmp r4, r0 -10011b1a: d109 bne.n 10011b30 -10011b1c: b101 cbz r1, 10011b20 -10011b1e: 6013 str r3, [r2, #0] -10011b20: 68e2 ldr r2, [r4, #12] -10011b22: 60da str r2, [r3, #12] -10011b24: 2300 movs r3, #0 -10011b26: 60e3 str r3, [r4, #12] -10011b28: 4620 mov r0, r4 -10011b2a: f003 fb9b bl 10015264 -10011b2e: e7c8 b.n 10011ac2 -10011b30: 2101 movs r1, #1 -10011b32: 4603 mov r3, r0 -10011b34: e7ec b.n 10011b10 -10011b36: 4621 mov r1, r4 -10011b38: 4813 ldr r0, [pc, #76] ; (10011b88 ) -10011b3a: f7ff ff4d bl 100119d8 -10011b3e: e7f3 b.n 10011b28 -10011b40: 4621 mov r1, r4 -10011b42: 480c ldr r0, [pc, #48] ; (10011b74 ) -10011b44: f7ff ff48 bl 100119d8 -10011b48: 2201 movs r2, #1 -10011b4a: 4b0c ldr r3, [pc, #48] ; (10011b7c ) -10011b4c: 701a strb r2, [r3, #0] -10011b4e: e7eb b.n 10011b28 -10011b50: 4620 mov r0, r4 -10011b52: f001 fd00 bl 10013556 -10011b56: 2800 cmp r0, #0 -10011b58: d1b4 bne.n 10011ac4 -10011b5a: 2305 movs r3, #5 -10011b5c: 61a3 str r3, [r4, #24] -10011b5e: 4620 mov r0, r4 -10011b60: f001 fd4c bl 100135fc -10011b64: e7ad b.n 10011ac2 -10011b66: 4620 mov r0, r4 -10011b68: f001 fcf5 bl 10013556 -10011b6c: 2800 cmp r0, #0 -10011b6e: d1a9 bne.n 10011ac4 -10011b70: 2309 movs r3, #9 -10011b72: e7f3 b.n 10011b5c -10011b74: 1004b108 .word 0x1004b108 -10011b78: 1004b120 .word 0x1004b120 -10011b7c: 1004b10c .word 0x1004b10c -10011b80: 1004b124 .word 0x1004b124 -10011b84: 1004b110 .word 0x1004b110 -10011b88: 1004b114 .word 0x1004b114 - -10011b8c : -10011b8c: 6983 ldr r3, [r0, #24] -10011b8e: 2101 movs r1, #1 -10011b90: 2b01 cmp r3, #1 -10011b92: bf1e ittt ne -10011b94: f890 3022 ldrbne.w r3, [r0, #34] ; 0x22 -10011b98: f043 0310 orrne.w r3, r3, #16 -10011b9c: f880 3022 strbne.w r3, [r0, #34] ; 0x22 -10011ba0: f7ff bf4e b.w 10011a40 - -10011ba4 : -10011ba4: b510 push {r4, lr} -10011ba6: 4608 mov r0, r1 -10011ba8: 4614 mov r4, r2 -10011baa: b13a cbz r2, 10011bbc -10011bac: 8911 ldrh r1, [r2, #8] -10011bae: f7ff fd2b bl 10011608 -10011bb2: 4620 mov r0, r4 -10011bb4: f7ff fa61 bl 1001107a -10011bb8: 2000 movs r0, #0 -10011bba: bd10 pop {r4, pc} -10011bbc: 2b00 cmp r3, #0 -10011bbe: d1fb bne.n 10011bb8 -10011bc0: e8bd 4010 ldmia.w sp!, {r4, lr} -10011bc4: f7ff bfe2 b.w 10011b8c - -10011bc8 : -10011bc8: b5f8 push {r3, r4, r5, r6, r7, lr} -10011bca: 2300 movs r3, #0 -10011bcc: 6fc6 ldr r6, [r0, #124] ; 0x7c -10011bce: f8d0 5084 ldr.w r5, [r0, #132] ; 0x84 -10011bd2: 7b77 ldrb r7, [r6, #13] -10011bd4: 4604 mov r4, r0 -10011bd6: 67c3 str r3, [r0, #124] ; 0x7c -10011bd8: b1e5 cbz r5, 10011c14 -10011bda: 4601 mov r1, r0 -10011bdc: 4632 mov r2, r6 -10011bde: 6900 ldr r0, [r0, #16] -10011be0: 47a8 blx r5 -10011be2: 4605 mov r5, r0 -10011be4: b9e8 cbnz r0, 10011c22 -10011be6: 06bb lsls r3, r7, #26 -10011be8: d512 bpl.n 10011c10 -10011bea: f241 62d0 movw r2, #5840 ; 0x16d0 -10011bee: 8e23 ldrh r3, [r4, #48] ; 0x30 -10011bf0: f8d4 6084 ldr.w r6, [r4, #132] ; 0x84 -10011bf4: 4293 cmp r3, r2 -10011bf6: bf1c itt ne -10011bf8: 3301 addne r3, #1 -10011bfa: 8623 strhne r3, [r4, #48] ; 0x30 -10011bfc: b146 cbz r6, 10011c10 -10011bfe: 2300 movs r3, #0 -10011c00: 4621 mov r1, r4 -10011c02: 461a mov r2, r3 -10011c04: 6920 ldr r0, [r4, #16] -10011c06: 47b0 blx r6 -10011c08: 300a adds r0, #10 -10011c0a: d101 bne.n 10011c10 -10011c0c: f06f 0509 mvn.w r5, #9 -10011c10: 4628 mov r0, r5 -10011c12: bdf8 pop {r3, r4, r5, r6, r7, pc} -10011c14: 4601 mov r1, r0 -10011c16: 462b mov r3, r5 -10011c18: 4632 mov r2, r6 -10011c1a: 4628 mov r0, r5 -10011c1c: f7ff ffc2 bl 10011ba4 -10011c20: e7df b.n 10011be2 -10011c22: f110 050a adds.w r5, r0, #10 -10011c26: d0f1 beq.n 10011c0c -10011c28: 67e6 str r6, [r4, #124] ; 0x7c -10011c2a: 2500 movs r5, #0 -10011c2c: e7f0 b.n 10011c10 - ... - -10011c30 : -10011c30: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10011c34: 4d19 ldr r5, [pc, #100] ; (10011c9c ) -10011c36: 4f1a ldr r7, [pc, #104] ; (10011ca0 ) -10011c38: 782b ldrb r3, [r5, #0] -10011c3a: 4e1a ldr r6, [pc, #104] ; (10011ca4 ) -10011c3c: 3301 adds r3, #1 -10011c3e: 702b strb r3, [r5, #0] -10011c40: f04f 0800 mov.w r8, #0 -10011c44: 683c ldr r4, [r7, #0] -10011c46: 782b ldrb r3, [r5, #0] -10011c48: b90c cbnz r4, 10011c4e -10011c4a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -10011c4e: f894 2025 ldrb.w r2, [r4, #37] ; 0x25 -10011c52: 429a cmp r2, r3 -10011c54: d0f8 beq.n 10011c48 -10011c56: f884 3025 strb.w r3, [r4, #37] ; 0x25 -10011c5a: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10011c5e: 07da lsls r2, r3, #31 -10011c60: d50c bpl.n 10011c7c -10011c62: f043 0302 orr.w r3, r3, #2 -10011c66: f884 3022 strb.w r3, [r4, #34] ; 0x22 -10011c6a: 4620 mov r0, r4 -10011c6c: f001 fcc6 bl 100135fc -10011c70: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10011c74: f023 0303 bic.w r3, r3, #3 -10011c78: f884 3022 strb.w r3, [r4, #34] ; 0x22 -10011c7c: 6fe3 ldr r3, [r4, #124] ; 0x7c -10011c7e: f8d4 900c ldr.w r9, [r4, #12] -10011c82: b90b cbnz r3, 10011c88 -10011c84: 464c mov r4, r9 -10011c86: e7de b.n 10011c46 -10011c88: 4620 mov r0, r4 -10011c8a: f886 8000 strb.w r8, [r6] -10011c8e: f7ff ff9b bl 10011bc8 -10011c92: 7833 ldrb r3, [r6, #0] -10011c94: 2b00 cmp r3, #0 -10011c96: d0f5 beq.n 10011c84 -10011c98: e7d2 b.n 10011c40 -10011c9a: bf00 nop -10011c9c: 1004b11d .word 0x1004b11d -10011ca0: 1004b108 .word 0x1004b108 -10011ca4: 1004b10c .word 0x1004b10c - -10011ca8 : -10011ca8: b508 push {r3, lr} -10011caa: f7ff ffc1 bl 10011c30 -10011cae: 4a06 ldr r2, [pc, #24] ; (10011cc8 ) -10011cb0: 7813 ldrb r3, [r2, #0] -10011cb2: 3301 adds r3, #1 -10011cb4: b2db uxtb r3, r3 -10011cb6: 7013 strb r3, [r2, #0] -10011cb8: 07db lsls r3, r3, #31 -10011cba: d503 bpl.n 10011cc4 -10011cbc: e8bd 4008 ldmia.w sp!, {r3, lr} -10011cc0: f7ff bd1c b.w 100116fc -10011cc4: bd08 pop {r3, pc} -10011cc6: bf00 nop -10011cc8: 1004b11c .word 0x1004b11c - -10011ccc : -10011ccc: 6983 ldr r3, [r0, #24] -10011cce: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -10011cd2: 2b0a cmp r3, #10 -10011cd4: 4604 mov r4, r0 -10011cd6: 4689 mov r9, r1 -10011cd8: d109 bne.n 10011cee -10011cda: 4601 mov r1, r0 -10011cdc: 481e ldr r0, [pc, #120] ; (10011d58 ) -10011cde: f7ff fe7b bl 100119d8 -10011ce2: 4620 mov r0, r4 -10011ce4: b003 add sp, #12 -10011ce6: e8bd 43f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, lr} -10011cea: f003 babb b.w 10015264 -10011cee: 6d47 ldr r7, [r0, #84] ; 0x54 -10011cf0: f8d0 802c ldr.w r8, [r0, #44] ; 0x2c -10011cf4: f8d0 5090 ldr.w r5, [r0, #144] ; 0x90 -10011cf8: 6906 ldr r6, [r0, #16] -10011cfa: 4601 mov r1, r0 -10011cfc: 4817 ldr r0, [pc, #92] ; (10011d5c ) -10011cfe: f7ff fe6b bl 100119d8 -10011d02: 2201 movs r2, #1 -10011d04: 4b16 ldr r3, [pc, #88] ; (10011d60 ) -10011d06: 6f60 ldr r0, [r4, #116] ; 0x74 -10011d08: 701a strb r2, [r3, #0] -10011d0a: b108 cbz r0, 10011d10 -10011d0c: f7ff fca6 bl 1001165c -10011d10: 6f20 ldr r0, [r4, #112] ; 0x70 -10011d12: b108 cbz r0, 10011d18 -10011d14: f7ff fca2 bl 1001165c -10011d18: 6fa0 ldr r0, [r4, #120] ; 0x78 -10011d1a: b108 cbz r0, 10011d20 -10011d1c: f7ff fc9e bl 1001165c -10011d20: f1b9 0f00 cmp.w r9, #0 -10011d24: d009 beq.n 10011d3a -10011d26: 8c23 ldrh r3, [r4, #32] -10011d28: 4622 mov r2, r4 -10011d2a: 9301 str r3, [sp, #4] -10011d2c: 8be3 ldrh r3, [r4, #30] -10011d2e: 4641 mov r1, r8 -10011d30: 9300 str r3, [sp, #0] -10011d32: 4638 mov r0, r7 -10011d34: 1d23 adds r3, r4, #4 -10011d36: f001 fda3 bl 10013880 -10011d3a: 4620 mov r0, r4 -10011d3c: f003 fa92 bl 10015264 -10011d40: b13d cbz r5, 10011d52 -10011d42: f06f 0109 mvn.w r1, #9 -10011d46: 4630 mov r0, r6 -10011d48: 462b mov r3, r5 -10011d4a: b003 add sp, #12 -10011d4c: e8bd 43f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, lr} -10011d50: 4718 bx r3 -10011d52: b003 add sp, #12 -10011d54: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -10011d58: 1004b124 .word 0x1004b124 -10011d5c: 1004b108 .word 0x1004b108 -10011d60: 1004b10c .word 0x1004b10c - -10011d64 : -10011d64: 2101 movs r1, #1 -10011d66: f7ff bfb1 b.w 10011ccc - ... - -10011d6c : -10011d6c: 4b03 ldr r3, [pc, #12] ; (10011d7c ) -10011d6e: 4a04 ldr r2, [pc, #16] ; (10011d80 ) -10011d70: 6818 ldr r0, [r3, #0] -10011d72: 6812 ldr r2, [r2, #0] -10011d74: 4410 add r0, r2 -10011d76: 6018 str r0, [r3, #0] -10011d78: 4770 bx lr -10011d7a: bf00 nop -10011d7c: 10044e60 .word 0x10044e60 -10011d80: 1004b118 .word 0x1004b118 - -10011d84 : -10011d84: b5f8 push {r3, r4, r5, r6, r7, lr} -10011d86: 4b41 ldr r3, [pc, #260] ; (10011e8c ) -10011d88: 4607 mov r7, r0 -10011d8a: 889e ldrh r6, [r3, #4] -10011d8c: 4d40 ldr r5, [pc, #256] ; (10011e90 ) -10011d8e: 4630 mov r0, r6 -10011d90: f003 f9cc bl 1001512c -10011d94: 4604 mov r4, r0 -10011d96: bb00 cbnz r0, 10011dda -10011d98: 4621 mov r1, r4 -10011d9a: 4b3e ldr r3, [pc, #248] ; (10011e94 ) -10011d9c: 6828 ldr r0, [r5, #0] -10011d9e: 681b ldr r3, [r3, #0] -10011da0: 2b00 cmp r3, #0 -10011da2: d15c bne.n 10011e5e -10011da4: b114 cbz r4, 10011dac -10011da6: 4620 mov r0, r4 -10011da8: f7ff ffdc bl 10011d64 -10011dac: 4630 mov r0, r6 -10011dae: f003 f9bd bl 1001512c -10011db2: 4604 mov r4, r0 -10011db4: b988 cbnz r0, 10011dda -10011db6: 207f movs r0, #127 ; 0x7f -10011db8: 46a6 mov lr, r4 -10011dba: 4b37 ldr r3, [pc, #220] ; (10011e98 ) -10011dbc: f8d5 c000 ldr.w ip, [r5] -10011dc0: 681b ldr r3, [r3, #0] -10011dc2: 2b00 cmp r3, #0 -10011dc4: d153 bne.n 10011e6e -10011dc6: b114 cbz r4, 10011dce -10011dc8: 4620 mov r0, r4 -10011dca: f7ff ffcb bl 10011d64 -10011dce: 4630 mov r0, r6 -10011dd0: f003 f9ac bl 1001512c -10011dd4: 4604 mov r4, r0 -10011dd6: 2800 cmp r0, #0 -10011dd8: d03f beq.n 10011e5a -10011dda: 22a4 movs r2, #164 ; 0xa4 -10011ddc: 2100 movs r1, #0 -10011dde: 4620 mov r0, r4 -10011de0: f008 feea bl 1001abb8 -10011de4: f641 4384 movw r3, #7300 ; 0x1c84 -10011de8: f8a4 306a strh.w r3, [r4, #106] ; 0x6a -10011dec: f241 63d0 movw r3, #5840 ; 0x16d0 -10011df0: 8623 strh r3, [r4, #48] ; 0x30 -10011df2: 8663 strh r3, [r4, #50] ; 0x32 -10011df4: 23ff movs r3, #255 ; 0xff -10011df6: 72a3 strb r3, [r4, #10] -10011df8: f44f 7306 mov.w r3, #536 ; 0x218 -10011dfc: 8763 strh r3, [r4, #58] ; 0x3a -10011dfe: 2306 movs r3, #6 -10011e00: f8a4 3048 strh.w r3, [r4, #72] ; 0x48 -10011e04: f8a4 3046 strh.w r3, [r4, #70] ; 0x46 -10011e08: f64f 73ff movw r3, #65535 ; 0xffff -10011e0c: 2100 movs r1, #0 -10011e0e: 8723 strh r3, [r4, #56] ; 0x38 -10011e10: 2301 movs r3, #1 -10011e12: 7727 strb r7, [r4, #28] -10011e14: f8a4 3050 strh.w r3, [r4, #80] ; 0x50 -10011e18: f8a4 106c strh.w r1, [r4, #108] ; 0x6c -10011e1c: 7261 strb r1, [r4, #9] -10011e1e: f8a4 1044 strh.w r1, [r4, #68] ; 0x44 -10011e22: f7ff ffa3 bl 10011d6c -10011e26: 682b ldr r3, [r5, #0] -10011e28: 65e0 str r0, [r4, #92] ; 0x5c -10011e2a: 62a3 str r3, [r4, #40] ; 0x28 -10011e2c: 4b1b ldr r3, [pc, #108] ; (10011e9c ) -10011e2e: 6560 str r0, [r4, #84] ; 0x54 -10011e30: 781b ldrb r3, [r3, #0] -10011e32: 64e0 str r0, [r4, #76] ; 0x4c -10011e34: f884 3025 strb.w r3, [r4, #37] ; 0x25 -10011e38: 4b19 ldr r3, [pc, #100] ; (10011ea0 ) -10011e3a: 6620 str r0, [r4, #96] ; 0x60 -10011e3c: f8c4 3084 str.w r3, [r4, #132] ; 0x84 -10011e40: 4b18 ldr r3, [pc, #96] ; (10011ea4 ) -10011e42: f884 1023 strb.w r1, [r4, #35] ; 0x23 -10011e46: f8c4 3094 str.w r3, [r4, #148] ; 0x94 -10011e4a: 4b17 ldr r3, [pc, #92] ; (10011ea8 ) -10011e4c: f884 10a2 strb.w r1, [r4, #162] ; 0xa2 -10011e50: f8c4 3098 str.w r3, [r4, #152] ; 0x98 -10011e54: 2309 movs r3, #9 -10011e56: f8c4 309c str.w r3, [r4, #156] ; 0x9c -10011e5a: 4620 mov r0, r4 -10011e5c: bdf8 pop {r3, r4, r5, r6, r7, pc} -10011e5e: 6a9a ldr r2, [r3, #40] ; 0x28 -10011e60: 1a82 subs r2, r0, r2 -10011e62: 428a cmp r2, r1 -10011e64: bf24 itt cs -10011e66: 461c movcs r4, r3 -10011e68: 4611 movcs r1, r2 -10011e6a: 68db ldr r3, [r3, #12] -10011e6c: e798 b.n 10011da0 -10011e6e: 7f19 ldrb r1, [r3, #28] -10011e70: 428f cmp r7, r1 -10011e72: d309 bcc.n 10011e88 -10011e74: 4281 cmp r1, r0 -10011e76: d807 bhi.n 10011e88 -10011e78: 6a9a ldr r2, [r3, #40] ; 0x28 -10011e7a: ebac 0202 sub.w r2, ip, r2 -10011e7e: 4572 cmp r2, lr -10011e80: bf22 ittt cs -10011e82: 4608 movcs r0, r1 -10011e84: 4696 movcs lr, r2 -10011e86: 461c movcs r4, r3 -10011e88: 68db ldr r3, [r3, #12] -10011e8a: e79a b.n 10011dc2 -10011e8c: 10040088 .word 0x10040088 -10011e90: 1004b118 .word 0x1004b118 -10011e94: 1004b124 .word 0x1004b124 -10011e98: 1004b108 .word 0x1004b108 -10011e9c: 1004b11d .word 0x1004b11d -10011ea0: 10011ba5 .word 0x10011ba5 -10011ea4: 006ddd00 .word 0x006ddd00 -10011ea8: 000124f8 .word 0x000124f8 - -10011eac : -10011eac: 2040 movs r0, #64 ; 0x40 -10011eae: f7ff bf69 b.w 10011d84 - -10011eb2 : -10011eb2: b510 push {r4, lr} -10011eb4: 4604 mov r4, r0 -10011eb6: 4608 mov r0, r1 -10011eb8: f7fd f802 bl 1000eec0 -10011ebc: b130 cbz r0, 10011ecc -10011ebe: 8d03 ldrh r3, [r0, #40] ; 0x28 -10011ec0: b123 cbz r3, 10011ecc -10011ec2: 3b28 subs r3, #40 ; 0x28 -10011ec4: b29b uxth r3, r3 -10011ec6: 429c cmp r4, r3 -10011ec8: bf28 it cs -10011eca: 461c movcs r4, r3 -10011ecc: 4620 mov r0, r4 -10011ece: bd10 pop {r4, pc} - -10011ed0 : -10011ed0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10011ed4: 6903 ldr r3, [r0, #16] -10011ed6: 4605 mov r5, r0 -10011ed8: 8998 ldrh r0, [r3, #12] -10011eda: 460c mov r4, r1 -10011edc: f7fd fd13 bl 1000f906 -10011ee0: 07c2 lsls r2, r0, #31 -10011ee2: d415 bmi.n 10011f10 -10011ee4: 4e18 ldr r6, [pc, #96] ; (10011f48 ) -10011ee6: b1bc cbz r4, 10011f18 -10011ee8: 6927 ldr r7, [r4, #16] -10011eea: 6830 ldr r0, [r6, #0] -10011eec: 892b ldrh r3, [r5, #8] -10011eee: 6879 ldr r1, [r7, #4] -10011ef0: 8922 ldrh r2, [r4, #8] -10011ef2: 4403 add r3, r0 -10011ef4: 440a add r2, r1 -10011ef6: 1a9a subs r2, r3, r2 -10011ef8: 2a00 cmp r2, #0 -10011efa: da10 bge.n 10011f1e -10011efc: 1a5b subs r3, r3, r1 -10011efe: 2b00 cmp r3, #0 -10011f00: dd0a ble.n 10011f18 -10011f02: 1a09 subs r1, r1, r0 -10011f04: b289 uxth r1, r1 -10011f06: 8129 strh r1, [r5, #8] -10011f08: 6868 ldr r0, [r5, #4] -10011f0a: f7ff f969 bl 100111e0 -10011f0e: e003 b.n 10011f18 -10011f10: 4620 mov r0, r4 -10011f12: f7ff fba3 bl 1001165c -10011f16: 2400 movs r4, #0 -10011f18: 602c str r4, [r5, #0] -10011f1a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10011f1e: 89b8 ldrh r0, [r7, #12] -10011f20: f7fd fcf1 bl 1000f906 -10011f24: 07c3 lsls r3, r0, #31 -10011f26: d509 bpl.n 10011f3c -10011f28: f8d5 8010 ldr.w r8, [r5, #16] -10011f2c: 2001 movs r0, #1 -10011f2e: f8b8 700c ldrh.w r7, [r8, #12] -10011f32: f7fd fce5 bl 1000f900 -10011f36: 4338 orrs r0, r7 -10011f38: f8a8 000c strh.w r0, [r8, #12] -10011f3c: 6827 ldr r7, [r4, #0] -10011f3e: 4620 mov r0, r4 -10011f40: f7ff fb7f bl 10011642 -10011f44: 463c mov r4, r7 -10011f46: e7ce b.n 10011ee6 -10011f48: 1004b14c .word 0x1004b14c - -10011f4c : -10011f4c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -10011f50: 4ba7 ldr r3, [pc, #668] ; (100121f0 ) -10011f52: 4604 mov r4, r0 -10011f54: 781b ldrb r3, [r3, #0] -10011f56: 4ea7 ldr r6, [pc, #668] ; (100121f4 ) -10011f58: f013 0f10 tst.w r3, #16 -10011f5c: d070 beq.n 10012040 -10011f5e: 6da3 ldr r3, [r4, #88] ; 0x58 -10011f60: 6832 ldr r2, [r6, #0] -10011f62: 6980 ldr r0, [r0, #24] -10011f64: 1a9d subs r5, r3, r2 -10011f66: 2d00 cmp r5, #0 -10011f68: f8b4 1064 ldrh.w r1, [r4, #100] ; 0x64 -10011f6c: 6de7 ldr r7, [r4, #92] ; 0x5c -10011f6e: 4da2 ldr r5, [pc, #648] ; (100121f8 ) -10011f70: db0d blt.n 10011f8e -10011f72: 4293 cmp r3, r2 -10011f74: d103 bne.n 10011f7e -10011f76: 682b ldr r3, [r5, #0] -10011f78: 1afb subs r3, r7, r3 -10011f7a: 2b00 cmp r3, #0 -10011f7c: db07 blt.n 10011f8e -10011f7e: 682b ldr r3, [r5, #0] -10011f80: 429f cmp r7, r3 -10011f82: d11f bne.n 10011fc4 -10011f84: 4b9d ldr r3, [pc, #628] ; (100121fc ) -10011f86: 681b ldr r3, [r3, #0] -10011f88: 89db ldrh r3, [r3, #14] -10011f8a: 428b cmp r3, r1 -10011f8c: d91a bls.n 10011fc4 -10011f8e: 4b9b ldr r3, [pc, #620] ; (100121fc ) -10011f90: f8b4 c066 ldrh.w ip, [r4, #102] ; 0x66 -10011f94: 681b ldr r3, [r3, #0] -10011f96: f8b3 e00e ldrh.w lr, [r3, #14] -10011f9a: 65a2 str r2, [r4, #88] ; 0x58 -10011f9c: 4673 mov r3, lr -10011f9e: 682a ldr r2, [r5, #0] -10011fa0: 45f4 cmp ip, lr -10011fa2: 65e2 str r2, [r4, #92] ; 0x5c -10011fa4: f8a4 e064 strh.w lr, [r4, #100] ; 0x64 -10011fa8: bf38 it cc -10011faa: f8a4 e066 strhcc.w lr, [r4, #102] ; 0x66 -10011fae: f894 20a1 ldrb.w r2, [r4, #161] ; 0xa1 -10011fb2: 2b00 cmp r3, #0 -10011fb4: f040 8111 bne.w 100121da -10011fb8: b922 cbnz r2, 10011fc4 -10011fba: 2301 movs r3, #1 -10011fbc: f884 e0a0 strb.w lr, [r4, #160] ; 0xa0 -10011fc0: f884 30a1 strb.w r3, [r4, #161] ; 0xa1 -10011fc4: 682a ldr r2, [r5, #0] -10011fc6: f8d4 e04c ldr.w lr, [r4, #76] ; 0x4c -10011fca: eba2 030e sub.w r3, r2, lr -10011fce: 2b00 cmp r3, #0 -10011fd0: f300 811a bgt.w 10012208 -10011fd4: 2300 movs r3, #0 -10011fd6: f8a4 3068 strh.w r3, [r4, #104] ; 0x68 -10011fda: 4b89 ldr r3, [pc, #548] ; (10012200 ) -10011fdc: 881b ldrh r3, [r3, #0] -10011fde: 2b00 cmp r3, #0 -10011fe0: f040 839a bne.w 10012718 -10011fe4: f8b4 3064 ldrh.w r3, [r4, #100] ; 0x64 -10011fe8: 6de0 ldr r0, [r4, #92] ; 0x5c -10011fea: 4439 add r1, r7 -10011fec: 4403 add r3, r0 -10011fee: 4299 cmp r1, r3 -10011ff0: f040 8392 bne.w 10012718 -10011ff4: f9b4 3038 ldrsh.w r3, [r4, #56] ; 0x38 -10011ff8: 2b00 cmp r3, #0 -10011ffa: f2c0 838d blt.w 10012718 -10011ffe: 4572 cmp r2, lr -10012000: f040 838a bne.w 10012718 -10012004: f894 204b ldrb.w r2, [r4, #75] ; 0x4b -10012008: 1c53 adds r3, r2, #1 -1001200a: b2db uxtb r3, r3 -1001200c: 429a cmp r2, r3 -1001200e: bf38 it cc -10012010: f884 304b strbcc.w r3, [r4, #75] ; 0x4b -10012014: f894 304b ldrb.w r3, [r4, #75] ; 0x4b -10012018: 2b03 cmp r3, #3 -1001201a: f240 80e3 bls.w 100121e4 -1001201e: f8b4 2050 ldrh.w r2, [r4, #80] ; 0x50 -10012022: 8f63 ldrh r3, [r4, #58] ; 0x3a -10012024: 4413 add r3, r2 -10012026: b29b uxth r3, r3 -10012028: 429a cmp r2, r3 -1001202a: d201 bcs.n 10012030 -1001202c: f8a4 3050 strh.w r3, [r4, #80] ; 0x50 -10012030: 6f23 ldr r3, [r4, #112] ; 0x70 -10012032: 2b00 cmp r3, #0 -10012034: f040 816b bne.w 1001230e -10012038: 6be2 ldr r2, [r4, #60] ; 0x3c -1001203a: 2a00 cmp r2, #0 -1001203c: f040 81a9 bne.w 10012392 -10012040: 4f6f ldr r7, [pc, #444] ; (10012200 ) -10012042: 6ae2 ldr r2, [r4, #44] ; 0x2c -10012044: 8838 ldrh r0, [r7, #0] -10012046: 2800 cmp r0, #0 -10012048: f000 8359 beq.w 100126fe -1001204c: 69a3 ldr r3, [r4, #24] -1001204e: 2b06 cmp r3, #6 -10012050: f200 8355 bhi.w 100126fe -10012054: 6833 ldr r3, [r6, #0] -10012056: eba2 0e03 sub.w lr, r2, r3 -1001205a: f1be 0f01 cmp.w lr, #1 -1001205e: f100 81c7 bmi.w 100123f0 -10012062: f1c3 0101 rsb r1, r3, #1 -10012066: 1a09 subs r1, r1, r0 -10012068: 4411 add r1, r2 -1001206a: 2900 cmp r1, #0 -1001206c: f300 81c0 bgt.w 100123f0 -10012070: 4d64 ldr r5, [pc, #400] ; (10012204 ) -10012072: 4671 mov r1, lr -10012074: 6868 ldr r0, [r5, #4] -10012076: 8943 ldrh r3, [r0, #10] -10012078: 459e cmp lr, r3 -1001207a: f340 81b6 ble.w 100123ea -1001207e: f04f 0e00 mov.w lr, #0 -10012082: 8903 ldrh r3, [r0, #8] -10012084: 1a5b subs r3, r3, r1 -10012086: b29b uxth r3, r3 -10012088: 8942 ldrh r2, [r0, #10] -1001208a: 4291 cmp r1, r2 -1001208c: f300 81a7 bgt.w 100123de -10012090: 4249 negs r1, r1 -10012092: b209 sxth r1, r1 -10012094: f7fe ffc6 bl 10011024 -10012098: 8929 ldrh r1, [r5, #8] -1001209a: 6833 ldr r3, [r6, #0] -1001209c: 6ae2 ldr r2, [r4, #44] ; 0x2c -1001209e: 440b add r3, r1 -100120a0: 1a9b subs r3, r3, r2 -100120a2: 812b strh r3, [r5, #8] -100120a4: 692b ldr r3, [r5, #16] -100120a6: 6032 str r2, [r6, #0] -100120a8: 605a str r2, [r3, #4] -100120aa: 6831 ldr r1, [r6, #0] -100120ac: 6ae2 ldr r2, [r4, #44] ; 0x2c -100120ae: 1a8b subs r3, r1, r2 -100120b0: 2b00 cmp r3, #0 -100120b2: f2c0 831f blt.w 100126f4 -100120b6: 1c4b adds r3, r1, #1 -100120b8: 8e20 ldrh r0, [r4, #48] ; 0x30 -100120ba: 1a9b subs r3, r3, r2 -100120bc: 1a1b subs r3, r3, r0 -100120be: 2b00 cmp r3, #0 -100120c0: f300 8318 bgt.w 100126f4 -100120c4: 4291 cmp r1, r2 -100120c6: f040 824d bne.w 10012564 -100120ca: 4d4e ldr r5, [pc, #312] ; (10012204 ) -100120cc: 692b ldr r3, [r5, #16] -100120ce: f8b5 8008 ldrh.w r8, [r5, #8] -100120d2: 8998 ldrh r0, [r3, #12] -100120d4: f7fd fc17 bl 1000f906 -100120d8: f010 0003 ands.w r0, r0, #3 -100120dc: bf18 it ne -100120de: 2001 movne r0, #1 -100120e0: 8e23 ldrh r3, [r4, #48] ; 0x30 -100120e2: 4440 add r0, r8 -100120e4: b280 uxth r0, r0 -100120e6: 4283 cmp r3, r0 -100120e8: 8038 strh r0, [r7, #0] -100120ea: d234 bcs.n 10012156 -100120ec: 692b ldr r3, [r5, #16] -100120ee: 8998 ldrh r0, [r3, #12] -100120f0: f7fd fc09 bl 1000f906 -100120f4: 07c2 lsls r2, r0, #31 -100120f6: d510 bpl.n 1001211a -100120f8: f8d5 9010 ldr.w r9, [r5, #16] -100120fc: f8b9 800c ldrh.w r8, [r9, #12] -10012100: 4640 mov r0, r8 -10012102: f7fd fc00 bl 1000f906 -10012106: f000 003e and.w r0, r0, #62 ; 0x3e -1001210a: f7fd fbf9 bl 1000f900 -1001210e: f428 587c bic.w r8, r8, #16128 ; 0x3f00 -10012112: ea48 0800 orr.w r8, r8, r0 -10012116: f8a9 800c strh.w r8, [r9, #12] -1001211a: 8e23 ldrh r3, [r4, #48] ; 0x30 -1001211c: 812b strh r3, [r5, #8] -1001211e: 692b ldr r3, [r5, #16] -10012120: 8998 ldrh r0, [r3, #12] -10012122: f7fd fbf0 bl 1000f906 -10012126: 0783 lsls r3, r0, #30 -10012128: bf48 it mi -1001212a: 892b ldrhmi r3, [r5, #8] -1001212c: 6868 ldr r0, [r5, #4] -1001212e: bf44 itt mi -10012130: f103 33ff addmi.w r3, r3, #4294967295 -10012134: 812b strhmi r3, [r5, #8] -10012136: 8929 ldrh r1, [r5, #8] -10012138: f7ff f852 bl 100111e0 -1001213c: 692b ldr r3, [r5, #16] -1001213e: f8b5 8008 ldrh.w r8, [r5, #8] -10012142: 8998 ldrh r0, [r3, #12] -10012144: f7fd fbdf bl 1000f906 -10012148: f010 0003 ands.w r0, r0, #3 -1001214c: bf18 it ne -1001214e: 2001 movne r0, #1 -10012150: 4480 add r8, r0 -10012152: f8a7 8000 strh.w r8, [r7] -10012156: 6fa3 ldr r3, [r4, #120] ; 0x78 -10012158: 2b00 cmp r3, #0 -1001215a: f000 815a beq.w 10012412 -1001215e: 692b ldr r3, [r5, #16] -10012160: 8998 ldrh r0, [r3, #12] -10012162: f7fd fbd0 bl 1000f906 -10012166: 07c0 lsls r0, r0, #31 -10012168: f100 8150 bmi.w 1001240c -1001216c: f8d4 8078 ldr.w r8, [r4, #120] ; 0x78 -10012170: f1b8 0f00 cmp.w r8, #0 -10012174: d02e beq.n 100121d4 -10012176: f8d8 e010 ldr.w lr, [r8, #16] -1001217a: 6830 ldr r0, [r6, #0] -1001217c: 883b ldrh r3, [r7, #0] -1001217e: f8de 2004 ldr.w r2, [lr, #4] -10012182: f8b8 1008 ldrh.w r1, [r8, #8] -10012186: 4403 add r3, r0 -10012188: 4411 add r1, r2 -1001218a: 1a59 subs r1, r3, r1 -1001218c: 2900 cmp r1, #0 -1001218e: f280 8173 bge.w 10012478 -10012192: 1a9b subs r3, r3, r2 -10012194: 2b00 cmp r3, #0 -10012196: dd1d ble.n 100121d4 -10012198: 692b ldr r3, [r5, #16] -1001219a: 1a12 subs r2, r2, r0 -1001219c: 812a strh r2, [r5, #8] -1001219e: 8998 ldrh r0, [r3, #12] -100121a0: f7fd fbb1 bl 1000f906 -100121a4: 0783 lsls r3, r0, #30 -100121a6: bf48 it mi -100121a8: 892b ldrhmi r3, [r5, #8] -100121aa: 6868 ldr r0, [r5, #4] -100121ac: bf44 itt mi -100121ae: f103 33ff addmi.w r3, r3, #4294967295 -100121b2: 812b strhmi r3, [r5, #8] -100121b4: 8929 ldrh r1, [r5, #8] -100121b6: f7ff f813 bl 100111e0 -100121ba: 692b ldr r3, [r5, #16] -100121bc: f8b5 9008 ldrh.w r9, [r5, #8] -100121c0: 8998 ldrh r0, [r3, #12] -100121c2: f7fd fba0 bl 1000f906 -100121c6: f010 0003 ands.w r0, r0, #3 -100121ca: bf18 it ne -100121cc: 2001 movne r0, #1 -100121ce: 4481 add r9, r0 -100121d0: f8a7 9000 strh.w r9, [r7] -100121d4: f8c4 8078 str.w r8, [r4, #120] ; 0x78 -100121d8: e11b b.n 10012412 -100121da: 2a00 cmp r2, #0 -100121dc: f43f aef2 beq.w 10011fc4 -100121e0: 2300 movs r3, #0 -100121e2: e6ed b.n 10011fc0 -100121e4: f47f af24 bne.w 10012030 -100121e8: 4620 mov r0, r4 -100121ea: f001 fbd3 bl 10013994 -100121ee: e71f b.n 10012030 -100121f0: 1004b12c .word 0x1004b12c -100121f4: 1004b14c .word 0x1004b14c -100121f8: 1004b128 .word 0x1004b128 -100121fc: 1004b154 .word 0x1004b154 -10012200: 1004b158 .word 0x1004b158 -10012204: 1004b130 .word 0x1004b130 -10012208: 6d61 ldr r1, [r4, #84] ; 0x54 -1001220a: 1a51 subs r1, r2, r1 -1001220c: 2900 cmp r1, #0 -1001220e: dc7a bgt.n 10012306 -10012210: f894 1022 ldrb.w r1, [r4, #34] ; 0x22 -10012214: f9b4 e044 ldrsh.w lr, [r4, #68] ; 0x44 -10012218: 074f lsls r7, r1, #29 -1001221a: f04f 0700 mov.w r7, #0 -1001221e: bf42 ittt mi -10012220: f021 0104 bicmi.w r1, r1, #4 -10012224: f884 1022 strbmi.w r1, [r4, #34] ; 0x22 -10012228: f8b4 1052 ldrhmi.w r1, [r4, #82] ; 0x52 -1001222c: b29b uxth r3, r3 -1001222e: bf48 it mi -10012230: f8a4 1050 strhmi.w r1, [r4, #80] ; 0x50 -10012234: f8b4 1046 ldrh.w r1, [r4, #70] ; 0x46 -10012238: f8a4 3068 strh.w r3, [r4, #104] ; 0x68 -1001223c: eb01 01ee add.w r1, r1, lr, asr #3 -10012240: f8a4 1048 strh.w r1, [r4, #72] ; 0x48 -10012244: f8b4 106a ldrh.w r1, [r4, #106] ; 0x6a -10012248: 2803 cmp r0, #3 -1001224a: 440b add r3, r1 -1001224c: f884 704a strb.w r7, [r4, #74] ; 0x4a -10012250: f8a4 306a strh.w r3, [r4, #106] ; 0x6a -10012254: f884 704b strb.w r7, [r4, #75] ; 0x4b -10012258: 64e2 str r2, [r4, #76] ; 0x4c -1001225a: d90f bls.n 1001227c -1001225c: f8b4 2050 ldrh.w r2, [r4, #80] ; 0x50 -10012260: f8b4 3052 ldrh.w r3, [r4, #82] ; 0x52 -10012264: 4293 cmp r3, r2 -10012266: 8f63 ldrh r3, [r4, #58] ; 0x3a -10012268: bf9c itt ls -1001226a: 435b mulls r3, r3 -1001226c: fb93 f3f2 sdivls r3, r3, r2 -10012270: 4413 add r3, r2 -10012272: b29b uxth r3, r3 -10012274: 429a cmp r2, r3 -10012276: d201 bcs.n 1001227c -10012278: f8a4 3050 strh.w r3, [r4, #80] ; 0x50 -1001227c: 6f63 ldr r3, [r4, #116] ; 0x74 -1001227e: b94b cbnz r3, 10012294 -10012280: 6f62 ldr r2, [r4, #116] ; 0x74 -10012282: 2300 movs r3, #0 -10012284: 2a00 cmp r2, #0 -10012286: d13c bne.n 10012302 -10012288: f64f 72ff movw r2, #65535 ; 0xffff -1001228c: 8722 strh r2, [r4, #56] ; 0x38 -1001228e: f884 3023 strb.w r3, [r4, #35] ; 0x23 -10012292: e6cd b.n 10012030 -10012294: 691b ldr r3, [r3, #16] -10012296: 6858 ldr r0, [r3, #4] -10012298: f7fd fb3a bl 1000f910 -1001229c: 6f63 ldr r3, [r4, #116] ; 0x74 -1001229e: 4607 mov r7, r0 -100122a0: f8b3 8008 ldrh.w r8, [r3, #8] -100122a4: 691b ldr r3, [r3, #16] -100122a6: 8998 ldrh r0, [r3, #12] -100122a8: f7fd fb2d bl 1000f906 -100122ac: f010 0003 ands.w r0, r0, #3 -100122b0: bf18 it ne -100122b2: 2001 movne r0, #1 -100122b4: 682b ldr r3, [r5, #0] -100122b6: 4440 add r0, r8 -100122b8: 1aff subs r7, r7, r3 -100122ba: 4438 add r0, r7 -100122bc: 2800 cmp r0, #0 -100122be: dcdf bgt.n 10012280 -100122c0: 6f67 ldr r7, [r4, #116] ; 0x74 -100122c2: 683b ldr r3, [r7, #0] -100122c4: 6878 ldr r0, [r7, #4] -100122c6: 6763 str r3, [r4, #116] ; 0x74 -100122c8: f7fe ffa3 bl 10011212 -100122cc: f8b4 3068 ldrh.w r3, [r4, #104] ; 0x68 -100122d0: b15b cbz r3, 100122ea -100122d2: 693b ldr r3, [r7, #16] -100122d4: 8998 ldrh r0, [r3, #12] -100122d6: f7fd fb16 bl 1000f906 -100122da: 07c0 lsls r0, r0, #31 -100122dc: bf42 ittt mi -100122de: f8b4 3068 ldrhmi.w r3, [r4, #104] ; 0x68 -100122e2: f103 33ff addmi.w r3, r3, #4294967295 -100122e6: f8a4 3068 strhmi.w r3, [r4, #104] ; 0x68 -100122ea: 6878 ldr r0, [r7, #4] -100122ec: f7fe ff91 bl 10011212 -100122f0: f8b4 306c ldrh.w r3, [r4, #108] ; 0x6c -100122f4: 1a18 subs r0, r3, r0 -100122f6: f8a4 006c strh.w r0, [r4, #108] ; 0x6c -100122fa: 4638 mov r0, r7 -100122fc: f7ff f9a1 bl 10011642 -10012300: e7bc b.n 1001227c -10012302: 8723 strh r3, [r4, #56] ; 0x38 -10012304: e7c3 b.n 1001228e -10012306: 2300 movs r3, #0 -10012308: f8a4 3068 strh.w r3, [r4, #104] ; 0x68 -1001230c: e690 b.n 10012030 -1001230e: 691b ldr r3, [r3, #16] -10012310: 682f ldr r7, [r5, #0] -10012312: 6858 ldr r0, [r3, #4] -10012314: f7fd fafc bl 1000f910 -10012318: 6f23 ldr r3, [r4, #112] ; 0x70 -1001231a: 4681 mov r9, r0 -1001231c: f8b3 8008 ldrh.w r8, [r3, #8] -10012320: 691b ldr r3, [r3, #16] -10012322: eba7 0709 sub.w r7, r7, r9 -10012326: 8998 ldrh r0, [r3, #12] -10012328: f7fd faed bl 1000f906 -1001232c: f010 0003 ands.w r0, r0, #3 -10012330: bf18 it ne -10012332: 2001 movne r0, #1 -10012334: 4440 add r0, r8 -10012336: 1a3f subs r7, r7, r0 -10012338: 2f00 cmp r7, #0 -1001233a: f6ff ae7d blt.w 10012038 -1001233e: 682b ldr r3, [r5, #0] -10012340: 6d62 ldr r2, [r4, #84] ; 0x54 -10012342: 1a9b subs r3, r3, r2 -10012344: 2b00 cmp r3, #0 -10012346: f73f ae77 bgt.w 10012038 -1001234a: 6f27 ldr r7, [r4, #112] ; 0x70 -1001234c: 683b ldr r3, [r7, #0] -1001234e: 6723 str r3, [r4, #112] ; 0x70 -10012350: b90b cbnz r3, 10012356 -10012352: f8a4 306e strh.w r3, [r4, #110] ; 0x6e -10012356: 6878 ldr r0, [r7, #4] -10012358: f7fe ff5b bl 10011212 -1001235c: f8b4 3068 ldrh.w r3, [r4, #104] ; 0x68 -10012360: b15b cbz r3, 1001237a -10012362: 693b ldr r3, [r7, #16] -10012364: 8998 ldrh r0, [r3, #12] -10012366: f7fd face bl 1000f906 -1001236a: 07c1 lsls r1, r0, #31 -1001236c: bf42 ittt mi -1001236e: f8b4 3068 ldrhmi.w r3, [r4, #104] ; 0x68 -10012372: f103 33ff addmi.w r3, r3, #4294967295 -10012376: f8a4 3068 strhmi.w r3, [r4, #104] ; 0x68 -1001237a: 6878 ldr r0, [r7, #4] -1001237c: f7fe ff49 bl 10011212 -10012380: f8b4 306c ldrh.w r3, [r4, #108] ; 0x6c -10012384: 1a18 subs r0, r3, r0 -10012386: f8a4 006c strh.w r0, [r4, #108] ; 0x6c -1001238a: 4638 mov r0, r7 -1001238c: f7ff f959 bl 10011642 -10012390: e64e b.n 10012030 -10012392: 6c23 ldr r3, [r4, #64] ; 0x40 -10012394: 6829 ldr r1, [r5, #0] -10012396: 1a5b subs r3, r3, r1 -10012398: 2b00 cmp r3, #0 -1001239a: f6bf ae51 bge.w 10012040 -1001239e: 4ba4 ldr r3, [pc, #656] ; (10012630 ) -100123a0: f9b4 0044 ldrsh.w r0, [r4, #68] ; 0x44 -100123a4: 6819 ldr r1, [r3, #0] -100123a6: 1a89 subs r1, r1, r2 -100123a8: eba1 01e0 sub.w r1, r1, r0, asr #3 -100123ac: b289 uxth r1, r1 -100123ae: b20b sxth r3, r1 -100123b0: 2b00 cmp r3, #0 -100123b2: f9b4 2046 ldrsh.w r2, [r4, #70] ; 0x46 -100123b6: 4408 add r0, r1 -100123b8: bfbc itt lt -100123ba: 4249 neglt r1, r1 -100123bc: b20b sxthlt r3, r1 -100123be: eba2 02a2 sub.w r2, r2, r2, asr #2 -100123c2: 4413 add r3, r2 -100123c4: b200 sxth r0, r0 -100123c6: b29b uxth r3, r3 -100123c8: f8a4 3046 strh.w r3, [r4, #70] ; 0x46 -100123cc: eb03 03e0 add.w r3, r3, r0, asr #3 -100123d0: f8a4 3048 strh.w r3, [r4, #72] ; 0x48 -100123d4: 2300 movs r3, #0 -100123d6: f8a4 0044 strh.w r0, [r4, #68] ; 0x44 -100123da: 63e3 str r3, [r4, #60] ; 0x3c -100123dc: e630 b.n 10012040 -100123de: 8103 strh r3, [r0, #8] -100123e0: f8a0 e00a strh.w lr, [r0, #10] -100123e4: 1a89 subs r1, r1, r2 -100123e6: 6800 ldr r0, [r0, #0] -100123e8: e64e b.n 10012088 -100123ea: f1ce 0100 rsb r1, lr, #0 -100123ee: e650 b.n 10012092 -100123f0: 1a9b subs r3, r3, r2 -100123f2: 2b00 cmp r3, #0 -100123f4: bfbe ittt lt -100123f6: f894 3022 ldrblt.w r3, [r4, #34] ; 0x22 -100123fa: f043 0302 orrlt.w r3, r3, #2 -100123fe: f884 3022 strblt.w r3, [r4, #34] ; 0x22 -10012402: e652 b.n 100120aa -10012404: 6803 ldr r3, [r0, #0] -10012406: 67a3 str r3, [r4, #120] ; 0x78 -10012408: f7ff f91b bl 10011642 -1001240c: 6fa0 ldr r0, [r4, #120] ; 0x78 -1001240e: 2800 cmp r0, #0 -10012410: d1f8 bne.n 10012404 -10012412: 8839 ldrh r1, [r7, #0] -10012414: 8e23 ldrh r3, [r4, #48] ; 0x30 -10012416: 6832 ldr r2, [r6, #0] -10012418: 1a5b subs r3, r3, r1 -1001241a: 440a add r2, r1 -1001241c: 62e2 str r2, [r4, #44] ; 0x2c -1001241e: 8623 strh r3, [r4, #48] ; 0x30 -10012420: 4620 mov r0, r4 -10012422: f7ff f8d7 bl 100115d4 -10012426: 686b ldr r3, [r5, #4] -10012428: 891a ldrh r2, [r3, #8] -1001242a: b11a cbz r2, 10012434 -1001242c: 4a81 ldr r2, [pc, #516] ; (10012634 ) -1001242e: 6013 str r3, [r2, #0] -10012430: 2300 movs r3, #0 -10012432: 606b str r3, [r5, #4] -10012434: 692b ldr r3, [r5, #16] -10012436: f04f 0900 mov.w r9, #0 -1001243a: 8998 ldrh r0, [r3, #12] -1001243c: f7fd fa63 bl 1000f906 -10012440: 07c5 lsls r5, r0, #31 -10012442: bf48 it mi -10012444: 4a7c ldrmi r2, [pc, #496] ; (10012638 ) -10012446: 4f7b ldr r7, [pc, #492] ; (10012634 ) -10012448: bf48 it mi -1001244a: 7813 ldrbmi r3, [r2, #0] -1001244c: f8df 81e8 ldr.w r8, [pc, #488] ; 10012638 -10012450: bf44 itt mi -10012452: f043 0320 orrmi.w r3, r3, #32 -10012456: 7013 strbmi r3, [r2, #0] -10012458: 6fa5 ldr r5, [r4, #120] ; 0x78 -1001245a: b125 cbz r5, 10012466 -1001245c: 6929 ldr r1, [r5, #16] -1001245e: 6ae2 ldr r2, [r4, #44] ; 0x2c -10012460: 684b ldr r3, [r1, #4] -10012462: 4293 cmp r3, r2 -10012464: d033 beq.n 100124ce -10012466: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -1001246a: 07d9 lsls r1, r3, #31 -1001246c: d574 bpl.n 10012558 -1001246e: f023 0301 bic.w r3, r3, #1 -10012472: f043 0302 orr.w r3, r3, #2 -10012476: e071 b.n 1001255c -10012478: f8be 000c ldrh.w r0, [lr, #12] -1001247c: f7fd fa43 bl 1000f906 -10012480: 07c1 lsls r1, r0, #31 -10012482: d51d bpl.n 100124c0 -10012484: 692b ldr r3, [r5, #16] -10012486: 8998 ldrh r0, [r3, #12] -10012488: f7fd fa3d bl 1000f906 -1001248c: 0782 lsls r2, r0, #30 -1001248e: d417 bmi.n 100124c0 -10012490: f8d5 a010 ldr.w sl, [r5, #16] -10012494: 2001 movs r0, #1 -10012496: f8ba 900c ldrh.w r9, [sl, #12] -1001249a: f7fd fa31 bl 1000f900 -1001249e: 692b ldr r3, [r5, #16] -100124a0: ea49 0000 orr.w r0, r9, r0 -100124a4: f8aa 000c strh.w r0, [sl, #12] -100124a8: 8998 ldrh r0, [r3, #12] -100124aa: f8b5 9008 ldrh.w r9, [r5, #8] -100124ae: f7fd fa2a bl 1000f906 -100124b2: f010 0003 ands.w r0, r0, #3 -100124b6: bf18 it ne -100124b8: 2001 movne r0, #1 -100124ba: 4481 add r9, r0 -100124bc: f8a7 9000 strh.w r9, [r7] -100124c0: f8d8 9000 ldr.w r9, [r8] -100124c4: 4640 mov r0, r8 -100124c6: f7ff f8bc bl 10011642 -100124ca: 46c8 mov r8, r9 -100124cc: e650 b.n 10012170 -100124ce: 6033 str r3, [r6, #0] -100124d0: 8988 ldrh r0, [r1, #12] -100124d2: f8b5 a008 ldrh.w sl, [r5, #8] -100124d6: f7fd fa16 bl 1000f906 -100124da: f010 0003 ands.w r0, r0, #3 -100124de: bf18 it ne -100124e0: 2001 movne r0, #1 -100124e2: 6ae3 ldr r3, [r4, #44] ; 0x2c -100124e4: 4450 add r0, sl -100124e6: 4418 add r0, r3 -100124e8: 692b ldr r3, [r5, #16] -100124ea: 62e0 str r0, [r4, #44] ; 0x2c -100124ec: 8998 ldrh r0, [r3, #12] -100124ee: f7fd fa0a bl 1000f906 -100124f2: 692b ldr r3, [r5, #16] -100124f4: f8b5 a008 ldrh.w sl, [r5, #8] -100124f8: 8998 ldrh r0, [r3, #12] -100124fa: f7fd fa04 bl 1000f906 -100124fe: f010 0003 ands.w r0, r0, #3 -10012502: bf18 it ne -10012504: 2001 movne r0, #1 -10012506: 8e23 ldrh r3, [r4, #48] ; 0x30 -10012508: 4450 add r0, sl -1001250a: 1a18 subs r0, r3, r0 -1001250c: 8620 strh r0, [r4, #48] ; 0x30 -1001250e: 4620 mov r0, r4 -10012510: f7ff f860 bl 100115d4 -10012514: 6869 ldr r1, [r5, #4] -10012516: 890b ldrh r3, [r1, #8] -10012518: b12b cbz r3, 10012526 -1001251a: 6838 ldr r0, [r7, #0] -1001251c: b1d0 cbz r0, 10012554 -1001251e: f7fe fe8d bl 1001123c -10012522: f8c5 9004 str.w r9, [r5, #4] -10012526: 692b ldr r3, [r5, #16] -10012528: 8998 ldrh r0, [r3, #12] -1001252a: f7fd f9ec bl 1000f906 -1001252e: 07c0 lsls r0, r0, #31 -10012530: d50a bpl.n 10012548 -10012532: f898 3000 ldrb.w r3, [r8] -10012536: f043 0320 orr.w r3, r3, #32 -1001253a: f888 3000 strb.w r3, [r8] -1001253e: 69a3 ldr r3, [r4, #24] -10012540: 2b04 cmp r3, #4 -10012542: bf04 itt eq -10012544: 2307 moveq r3, #7 -10012546: 61a3 streq r3, [r4, #24] -10012548: 682b ldr r3, [r5, #0] -1001254a: 4628 mov r0, r5 -1001254c: 67a3 str r3, [r4, #120] ; 0x78 -1001254e: f7ff f878 bl 10011642 -10012552: e781 b.n 10012458 -10012554: 6039 str r1, [r7, #0] -10012556: e7e4 b.n 10012522 -10012558: f043 0301 orr.w r3, r3, #1 -1001255c: f884 3022 strb.w r3, [r4, #34] ; 0x22 -10012560: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10012564: 4620 mov r0, r4 -10012566: f001 f81a bl 1001359e -1001256a: 6fa5 ldr r5, [r4, #120] ; 0x78 -1001256c: b92d cbnz r5, 1001257a -1001256e: 4833 ldr r0, [pc, #204] ; (1001263c ) -10012570: f7ff f87e bl 10011670 -10012574: 67a0 str r0, [r4, #120] ; 0x78 -10012576: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1001257a: f04f 0800 mov.w r8, #0 -1001257e: 6833 ldr r3, [r6, #0] -10012580: f103 3eff add.w lr, r3, #4294967295 -10012584: f103 0c01 add.w ip, r3, #1 -10012588: 6928 ldr r0, [r5, #16] -1001258a: 6842 ldr r2, [r0, #4] -1001258c: 429a cmp r2, r3 -1001258e: d118 bne.n 100125c2 -10012590: 482a ldr r0, [pc, #168] ; (1001263c ) -10012592: 892b ldrh r3, [r5, #8] -10012594: 8902 ldrh r2, [r0, #8] -10012596: 429a cmp r2, r3 -10012598: f240 80c2 bls.w 10012720 -1001259c: f7ff f868 bl 10011670 -100125a0: 2800 cmp r0, #0 -100125a2: f000 80bd beq.w 10012720 -100125a6: f1b8 0f00 cmp.w r8, #0 -100125aa: d008 beq.n 100125be -100125ac: f8c8 0000 str.w r0, [r8] -100125b0: 4629 mov r1, r5 -100125b2: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -100125b6: f7ff bc8b b.w 10011ed0 -100125ba: 460d mov r5, r1 -100125bc: e7e4 b.n 10012588 -100125be: 67a0 str r0, [r4, #120] ; 0x78 -100125c0: e7f6 b.n 100125b0 -100125c2: f1b8 0f00 cmp.w r8, #0 -100125c6: d10a bne.n 100125de -100125c8: 1a99 subs r1, r3, r2 -100125ca: 2900 cmp r1, #0 -100125cc: da38 bge.n 10012640 -100125ce: 481b ldr r0, [pc, #108] ; (1001263c ) -100125d0: f7ff f84e bl 10011670 -100125d4: 2800 cmp r0, #0 -100125d6: f000 80a3 beq.w 10012720 -100125da: 67a0 str r0, [r4, #120] ; 0x78 -100125dc: e7e8 b.n 100125b0 -100125de: f8d8 1010 ldr.w r1, [r8, #16] -100125e2: 6849 ldr r1, [r1, #4] -100125e4: ebae 0101 sub.w r1, lr, r1 -100125e8: 2900 cmp r1, #0 -100125ea: db29 blt.n 10012640 -100125ec: ebac 0102 sub.w r1, ip, r2 -100125f0: 2900 cmp r1, #0 -100125f2: dc25 bgt.n 10012640 -100125f4: 4811 ldr r0, [pc, #68] ; (1001263c ) -100125f6: f7ff f83b bl 10011670 -100125fa: 4604 mov r4, r0 -100125fc: 2800 cmp r0, #0 -100125fe: f000 808f beq.w 10012720 -10012602: f8d8 3010 ldr.w r3, [r8, #16] -10012606: 6831 ldr r1, [r6, #0] -10012608: 685a ldr r2, [r3, #4] -1001260a: f8b8 3008 ldrh.w r3, [r8, #8] -1001260e: 4413 add r3, r2 -10012610: 1a5b subs r3, r3, r1 -10012612: 2b00 cmp r3, #0 -10012614: dd07 ble.n 10012626 -10012616: 1a89 subs r1, r1, r2 -10012618: b289 uxth r1, r1 -1001261a: f8a8 1008 strh.w r1, [r8, #8] -1001261e: f8d8 0004 ldr.w r0, [r8, #4] -10012622: f7fe fddd bl 100111e0 -10012626: f8c8 4000 str.w r4, [r8] -1001262a: 4629 mov r1, r5 -1001262c: 4620 mov r0, r4 -1001262e: e7c0 b.n 100125b2 -10012630: 1004b118 .word 0x1004b118 -10012634: 1004b144 .word 0x1004b144 -10012638: 1004b148 .word 0x1004b148 -1001263c: 1004b130 .word 0x1004b130 -10012640: 6829 ldr r1, [r5, #0] -10012642: 46a8 mov r8, r5 -10012644: 2900 cmp r1, #0 -10012646: d1b8 bne.n 100125ba -10012648: 1a9b subs r3, r3, r2 -1001264a: 2b00 cmp r3, #0 -1001264c: dd68 ble.n 10012720 -1001264e: 8980 ldrh r0, [r0, #12] -10012650: f7fd f959 bl 1000f906 -10012654: 07c2 lsls r2, r0, #31 -10012656: d463 bmi.n 10012720 -10012658: 4832 ldr r0, [pc, #200] ; (10012724 ) -1001265a: f7ff f809 bl 10011670 -1001265e: 6028 str r0, [r5, #0] -10012660: 2800 cmp r0, #0 -10012662: d05d beq.n 10012720 -10012664: 692b ldr r3, [r5, #16] -10012666: 6831 ldr r1, [r6, #0] -10012668: 685a ldr r2, [r3, #4] -1001266a: 892b ldrh r3, [r5, #8] -1001266c: 4413 add r3, r2 -1001266e: 1a5b subs r3, r3, r1 -10012670: 2b00 cmp r3, #0 -10012672: dd05 ble.n 10012680 -10012674: 1a89 subs r1, r1, r2 -10012676: b289 uxth r1, r1 -10012678: 8129 strh r1, [r5, #8] -1001267a: 6868 ldr r0, [r5, #4] -1001267c: f7fe fdb0 bl 100111e0 -10012680: 6833 ldr r3, [r6, #0] -10012682: 883a ldrh r2, [r7, #0] -10012684: 6ae1 ldr r1, [r4, #44] ; 0x2c -10012686: 441a add r2, r3 -10012688: 8e23 ldrh r3, [r4, #48] ; 0x30 -1001268a: 440b add r3, r1 -1001268c: 429a cmp r2, r3 -1001268e: d947 bls.n 10012720 -10012690: 682b ldr r3, [r5, #0] -10012692: 691b ldr r3, [r3, #16] -10012694: 8998 ldrh r0, [r3, #12] -10012696: f7fd f936 bl 1000f906 -1001269a: 07c3 lsls r3, r0, #31 -1001269c: d511 bpl.n 100126c2 -1001269e: 682b ldr r3, [r5, #0] -100126a0: f8d3 9010 ldr.w r9, [r3, #16] -100126a4: f8b9 800c ldrh.w r8, [r9, #12] -100126a8: 4640 mov r0, r8 -100126aa: f7fd f92c bl 1000f906 -100126ae: f000 003e and.w r0, r0, #62 ; 0x3e -100126b2: f7fd f925 bl 1000f900 -100126b6: f428 587c bic.w r8, r8, #16128 ; 0x3f00 -100126ba: ea48 0800 orr.w r8, r8, r0 -100126be: f8a9 800c strh.w r8, [r9, #12] -100126c2: 8e21 ldrh r1, [r4, #48] ; 0x30 -100126c4: 6832 ldr r2, [r6, #0] -100126c6: 682b ldr r3, [r5, #0] -100126c8: 1a89 subs r1, r1, r2 -100126ca: 6ae2 ldr r2, [r4, #44] ; 0x2c -100126cc: 6858 ldr r0, [r3, #4] -100126ce: 4411 add r1, r2 -100126d0: b289 uxth r1, r1 -100126d2: 8119 strh r1, [r3, #8] -100126d4: f7fe fd84 bl 100111e0 -100126d8: 682b ldr r3, [r5, #0] -100126da: 891c ldrh r4, [r3, #8] -100126dc: 691b ldr r3, [r3, #16] -100126de: 8998 ldrh r0, [r3, #12] -100126e0: f7fd f911 bl 1000f906 -100126e4: f010 0003 ands.w r0, r0, #3 -100126e8: bf18 it ne -100126ea: 2001 movne r0, #1 -100126ec: 4404 add r4, r0 -100126ee: 803c strh r4, [r7, #0] -100126f0: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -100126f4: 4620 mov r0, r4 -100126f6: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -100126fa: f000 bf50 b.w 1001359e -100126fe: 6833 ldr r3, [r6, #0] -10012700: 1a99 subs r1, r3, r2 -10012702: 2900 cmp r1, #0 -10012704: db05 blt.n 10012712 -10012706: 3301 adds r3, #1 -10012708: 1a9b subs r3, r3, r2 -1001270a: 8e22 ldrh r2, [r4, #48] ; 0x30 -1001270c: 1a9b subs r3, r3, r2 -1001270e: 2b00 cmp r3, #0 -10012710: dd06 ble.n 10012720 -10012712: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10012716: e6ac b.n 10012472 -10012718: 2300 movs r3, #0 -1001271a: f884 304b strb.w r3, [r4, #75] ; 0x4b -1001271e: e487 b.n 10012030 -10012720: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10012724: 1004b130 .word 0x1004b130 - -10012728 : -10012728: b5f8 push {r3, r4, r5, r6, r7, lr} -1001272a: 4e1f ldr r6, [pc, #124] ; (100127a8 ) -1001272c: 4604 mov r4, r0 -1001272e: 6835 ldr r5, [r6, #0] -10012730: 89a8 ldrh r0, [r5, #12] -10012732: f7fd f8e8 bl 1000f906 -10012736: f3c0 300f ubfx r0, r0, #12, #16 -1001273a: 2805 cmp r0, #5 -1001273c: d90f bls.n 1001275e -1001273e: 6833 ldr r3, [r6, #0] -10012740: f240 57b4 movw r7, #1460 ; 0x5b4 -10012744: 8998 ldrh r0, [r3, #12] -10012746: f7fd f8de bl 1000f906 -1001274a: f240 56b3 movw r6, #1459 ; 0x5b3 -1001274e: 2300 movs r3, #0 -10012750: 0b00 lsrs r0, r0, #12 -10012752: 3805 subs r0, #5 -10012754: 0080 lsls r0, r0, #2 -10012756: 3514 adds r5, #20 -10012758: b280 uxth r0, r0 -1001275a: 4298 cmp r0, r3 -1001275c: d800 bhi.n 10012760 -1001275e: bdf8 pop {r3, r4, r5, r6, r7, pc} -10012760: 5cea ldrb r2, [r5, r3] -10012762: 2a01 cmp r2, #1 -10012764: d009 beq.n 1001277a -10012766: d3fa bcc.n 1001275e -10012768: 2a02 cmp r2, #2 -1001276a: eb05 0103 add.w r1, r5, r3 -1001276e: d007 beq.n 10012780 -10012770: 784a ldrb r2, [r1, #1] -10012772: 2a00 cmp r2, #0 -10012774: d0f3 beq.n 1001275e -10012776: 4413 add r3, r2 -10012778: e000 b.n 1001277c -1001277a: 3301 adds r3, #1 -1001277c: b29b uxth r3, r3 -1001277e: e7ec b.n 1001275a -10012780: 784a ldrb r2, [r1, #1] -10012782: 2a04 cmp r2, #4 -10012784: d1eb bne.n 1001275e -10012786: 1cda adds r2, r3, #3 -10012788: 4282 cmp r2, r0 -1001278a: dae8 bge.n 1001275e -1001278c: f891 e002 ldrb.w lr, [r1, #2] -10012790: 78ca ldrb r2, [r1, #3] -10012792: 3304 adds r3, #4 -10012794: ea42 220e orr.w r2, r2, lr, lsl #8 -10012798: 1e51 subs r1, r2, #1 -1001279a: b289 uxth r1, r1 -1001279c: 42b1 cmp r1, r6 -1001279e: bf88 it hi -100127a0: 463a movhi r2, r7 -100127a2: 8022 strh r2, [r4, #0] -100127a4: e7ea b.n 1001277c -100127a6: bf00 nop -100127a8: 1004b154 .word 0x1004b154 - -100127ac : -100127ac: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100127b0: 6843 ldr r3, [r0, #4] -100127b2: 460f mov r7, r1 -100127b4: 7819 ldrb r1, [r3, #0] -100127b6: 4db0 ldr r5, [pc, #704] ; (10012a78 ) -100127b8: f001 010f and.w r1, r1, #15 -100127bc: 0089 lsls r1, r1, #2 -100127be: 440b add r3, r1 -100127c0: b089 sub sp, #36 ; 0x24 -100127c2: 4249 negs r1, r1 -100127c4: 4606 mov r6, r0 -100127c6: 602b str r3, [r5, #0] -100127c8: f7fe fc2c bl 10011024 -100127cc: 2800 cmp r0, #0 -100127ce: f040 8102 bne.w 100129d6 -100127d2: 8933 ldrh r3, [r6, #8] -100127d4: 2b13 cmp r3, #19 -100127d6: f240 80fe bls.w 100129d6 -100127da: 4ca8 ldr r4, [pc, #672] ; (10012a7c ) -100127dc: 4639 mov r1, r7 -100127de: 6820 ldr r0, [r4, #0] -100127e0: f7fc fd3f bl 1000f262 -100127e4: 46a0 mov r8, r4 -100127e6: 2800 cmp r0, #0 -100127e8: f040 80f5 bne.w 100129d6 -100127ec: 6823 ldr r3, [r4, #0] -100127ee: f003 03f0 and.w r3, r3, #240 ; 0xf0 -100127f2: 2be0 cmp r3, #224 ; 0xe0 -100127f4: f000 80ef beq.w 100129d6 -100127f8: 8933 ldrh r3, [r6, #8] -100127fa: 4ca1 ldr r4, [pc, #644] ; (10012a80 ) -100127fc: 9300 str r3, [sp, #0] -100127fe: 4642 mov r2, r8 -10012800: 2306 movs r3, #6 -10012802: 4621 mov r1, r4 -10012804: 4630 mov r0, r6 -10012806: f7fc faef bl 1000ede8 -1001280a: 9406 str r4, [sp, #24] -1001280c: 2800 cmp r0, #0 -1001280e: f040 80e2 bne.w 100129d6 -10012812: 682b ldr r3, [r5, #0] -10012814: 8998 ldrh r0, [r3, #12] -10012816: f7fd f876 bl 1000f906 -1001281a: 0b00 lsrs r0, r0, #12 -1001281c: ebc0 3080 rsb r0, r0, r0, lsl #14 -10012820: 0081 lsls r1, r0, #2 -10012822: b209 sxth r1, r1 -10012824: 4630 mov r0, r6 -10012826: f7fe fbfd bl 10011024 -1001282a: 4607 mov r7, r0 -1001282c: 2800 cmp r0, #0 -1001282e: f040 80d2 bne.w 100129d6 -10012832: 682c ldr r4, [r5, #0] -10012834: f8df 926c ldr.w r9, [pc, #620] ; 10012aa4 -10012838: 8820 ldrh r0, [r4, #0] -1001283a: f7fd f864 bl 1000f906 -1001283e: 8020 strh r0, [r4, #0] -10012840: 682c ldr r4, [r5, #0] -10012842: f8df a264 ldr.w sl, [pc, #612] ; 10012aa8 -10012846: 8860 ldrh r0, [r4, #2] -10012848: f7fd f85d bl 1000f906 -1001284c: 8060 strh r0, [r4, #2] -1001284e: 682c ldr r4, [r5, #0] -10012850: 6860 ldr r0, [r4, #4] -10012852: f7fd f85d bl 1000f910 -10012856: 6060 str r0, [r4, #4] -10012858: 682c ldr r4, [r5, #0] -1001285a: f8c9 0000 str.w r0, [r9] -1001285e: 68a0 ldr r0, [r4, #8] -10012860: f7fd f856 bl 1000f910 -10012864: 4b87 ldr r3, [pc, #540] ; (10012a84 ) -10012866: 60a0 str r0, [r4, #8] -10012868: 682c ldr r4, [r5, #0] -1001286a: 6018 str r0, [r3, #0] -1001286c: 89e0 ldrh r0, [r4, #14] -1001286e: f7fd f84a bl 1000f906 -10012872: 682b ldr r3, [r5, #0] -10012874: 81e0 strh r0, [r4, #14] -10012876: 8998 ldrh r0, [r3, #12] -10012878: f7fd f845 bl 1000f906 -1001287c: b2c3 uxtb r3, r0 -1001287e: f013 0b03 ands.w fp, r3, #3 -10012882: bf18 it ne -10012884: f04f 0b01 movne.w fp, #1 -10012888: 9702 str r7, [sp, #8] -1001288a: 464f mov r7, r9 -1001288c: 4a7e ldr r2, [pc, #504] ; (10012a88 ) -1001288e: f003 013f and.w r1, r3, #63 ; 0x3f -10012892: 7011 strb r1, [r2, #0] -10012894: 497d ldr r1, [pc, #500] ; (10012a8c ) -10012896: 9806 ldr r0, [sp, #24] -10012898: 680a ldr r2, [r1, #0] -1001289a: f8b6 e008 ldrh.w lr, [r6, #8] -1001289e: 9205 str r2, [sp, #20] -100128a0: 44f3 add fp, lr -100128a2: f8d0 c000 ldr.w ip, [r0] -100128a6: f8d8 0000 ldr.w r0, [r8] -100128aa: fa1f fb8b uxth.w fp, fp -100128ae: 682a ldr r2, [r5, #0] -100128b0: 9c05 ldr r4, [sp, #20] -100128b2: f8aa b000 strh.w fp, [sl] -100128b6: 9003 str r0, [sp, #12] -100128b8: f8cd a010 str.w sl, [sp, #16] -100128bc: 9107 str r1, [sp, #28] -100128be: b914 cbnz r4, 100128c6 -100128c0: 4973 ldr r1, [pc, #460] ; (10012a90 ) -100128c2: 6808 ldr r0, [r1, #0] -100128c4: e08e b.n 100129e4 -100128c6: f8b4 9020 ldrh.w r9, [r4, #32] -100128ca: 8811 ldrh r1, [r2, #0] -100128cc: 4589 cmp r9, r1 -100128ce: d147 bne.n 10012960 -100128d0: f8b4 901e ldrh.w r9, [r4, #30] -100128d4: 8851 ldrh r1, [r2, #2] -100128d6: 4589 cmp r9, r1 -100128d8: d142 bne.n 10012960 -100128da: 6861 ldr r1, [r4, #4] -100128dc: 4561 cmp r1, ip -100128de: d13f bne.n 10012960 -100128e0: 6821 ldr r1, [r4, #0] -100128e2: 4608 mov r0, r1 -100128e4: 9903 ldr r1, [sp, #12] -100128e6: 4288 cmp r0, r1 -100128e8: d13a bne.n 10012960 -100128ea: 9802 ldr r0, [sp, #8] -100128ec: 68e1 ldr r1, [r4, #12] -100128ee: b120 cbz r0, 100128fa -100128f0: 60c1 str r1, [r0, #12] -100128f2: 9905 ldr r1, [sp, #20] -100128f4: 60e1 str r1, [r4, #12] -100128f6: 4965 ldr r1, [pc, #404] ; (10012a8c ) -100128f8: 600c str r4, [r1, #0] -100128fa: 2000 movs r0, #0 -100128fc: 4965 ldr r1, [pc, #404] ; (10012a94 ) -100128fe: f8df 81ac ldr.w r8, [pc, #428] ; 10012aac -10012902: 610a str r2, [r1, #16] -10012904: 4a64 ldr r2, [pc, #400] ; (10012a98 ) -10012906: f013 0f08 tst.w r3, #8 -1001290a: 6008 str r0, [r1, #0] -1001290c: f8a1 e008 strh.w lr, [r1, #8] -10012910: 604e str r6, [r1, #4] -10012912: 6010 str r0, [r2, #0] -10012914: f888 0000 strb.w r0, [r8] -10012918: 4692 mov sl, r2 -1001291a: 4689 mov r9, r1 -1001291c: d003 beq.n 10012926 -1001291e: 7b73 ldrb r3, [r6, #13] -10012920: f043 0301 orr.w r3, r3, #1 -10012924: 7373 strb r3, [r6, #13] -10012926: 6fe3 ldr r3, [r4, #124] ; 0x7c -10012928: f8df b184 ldr.w fp, [pc, #388] ; 10012ab0 -1001292c: 2b00 cmp r3, #0 -1001292e: f040 8115 bne.w 10012b5c -10012932: 4e55 ldr r6, [pc, #340] ; (10012a88 ) -10012934: f8cb 4000 str.w r4, [fp] -10012938: 7833 ldrb r3, [r6, #0] -1001293a: 0759 lsls r1, r3, #29 -1001293c: f100 812b bmi.w 10012b96 -10012940: f013 0f02 tst.w r3, #2 -10012944: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10012948: f000 8155 beq.w 10012bf6 -1001294c: 69a2 ldr r2, [r4, #24] -1001294e: 3a02 subs r2, #2 -10012950: 2a01 cmp r2, #1 -10012952: f240 8150 bls.w 10012bf6 -10012956: f043 0302 orr.w r3, r3, #2 -1001295a: f884 3022 strb.w r3, [r4, #34] ; 0x22 -1001295e: e136 b.n 10012bce -10012960: 9402 str r4, [sp, #8] -10012962: 68e4 ldr r4, [r4, #12] -10012964: e7ab b.n 100128be -10012966: 8c01 ldrh r1, [r0, #32] -10012968: f8b2 e000 ldrh.w lr, [r2] -1001296c: 458e cmp lr, r1 -1001296e: d138 bne.n 100129e2 -10012970: 8bc1 ldrh r1, [r0, #30] -10012972: f8b2 9002 ldrh.w r9, [r2, #2] -10012976: 4589 cmp r9, r1 -10012978: d133 bne.n 100129e2 -1001297a: 6841 ldr r1, [r0, #4] -1001297c: 458c cmp ip, r1 -1001297e: d130 bne.n 100129e2 -10012980: 6801 ldr r1, [r0, #0] -10012982: 460c mov r4, r1 -10012984: 9903 ldr r1, [sp, #12] -10012986: 42a1 cmp r1, r4 -10012988: d12b bne.n 100129e2 -1001298a: 0759 lsls r1, r3, #29 -1001298c: d423 bmi.n 100129d6 -1001298e: 079a lsls r2, r3, #30 -10012990: d511 bpl.n 100129b6 -10012992: 6839 ldr r1, [r7, #0] -10012994: 6ac3 ldr r3, [r0, #44] ; 0x2c -10012996: 1acb subs r3, r1, r3 -10012998: d412 bmi.n 100129c0 -1001299a: 8e02 ldrh r2, [r0, #48] ; 0x30 -1001299c: 1a9b subs r3, r3, r2 -1001299e: 2b00 cmp r3, #0 -100129a0: dc0e bgt.n 100129c0 -100129a2: e88d 4200 stmia.w sp, {r9, lr} -100129a6: 4b36 ldr r3, [pc, #216] ; (10012a80 ) -100129a8: 4a34 ldr r2, [pc, #208] ; (10012a7c ) -100129aa: 4459 add r1, fp -100129ac: 4835 ldr r0, [pc, #212] ; (10012a84 ) -100129ae: 6800 ldr r0, [r0, #0] -100129b0: f000 ff66 bl 10013880 -100129b4: e00f b.n 100129d6 -100129b6: 07dd lsls r5, r3, #31 -100129b8: bf42 ittt mi -100129ba: 4b38 ldrmi r3, [pc, #224] ; (10012a9c ) -100129bc: 681b ldrmi r3, [r3, #0] -100129be: 6283 strmi r3, [r0, #40] ; 0x28 -100129c0: f1bb 0f00 cmp.w fp, #0 -100129c4: d007 beq.n 100129d6 -100129c6: f890 3022 ldrb.w r3, [r0, #34] ; 0x22 -100129ca: f043 0302 orr.w r3, r3, #2 -100129ce: f880 3022 strb.w r3, [r0, #34] ; 0x22 -100129d2: f000 fe13 bl 100135fc -100129d6: 4630 mov r0, r6 -100129d8: b009 add sp, #36 ; 0x24 -100129da: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100129de: f7fe bb4c b.w 1001107a -100129e2: 68c0 ldr r0, [r0, #12] -100129e4: 2800 cmp r0, #0 -100129e6: d1be bne.n 10012966 -100129e8: 492d ldr r1, [pc, #180] ; (10012aa0 ) -100129ea: 4681 mov r9, r0 -100129ec: f8d1 e000 ldr.w lr, [r1] -100129f0: 9002 str r0, [sp, #8] -100129f2: 4671 mov r1, lr -100129f4: b999 cbnz r1, 10012a1e -100129f6: f1b9 0f00 cmp.w r9, #0 -100129fa: d127 bne.n 10012a4c -100129fc: 8990 ldrh r0, [r2, #12] -100129fe: f7fc ff82 bl 1000f906 -10012a02: 0743 lsls r3, r0, #29 -10012a04: d4e7 bmi.n 100129d6 -10012a06: 682b ldr r3, [r5, #0] -10012a08: 9a04 ldr r2, [sp, #16] -10012a0a: 6839 ldr r1, [r7, #0] -10012a0c: 8810 ldrh r0, [r2, #0] -10012a0e: 881a ldrh r2, [r3, #0] -10012a10: 4401 add r1, r0 -10012a12: 9201 str r2, [sp, #4] -10012a14: 885b ldrh r3, [r3, #2] -10012a16: 4a19 ldr r2, [pc, #100] ; (10012a7c ) -10012a18: 9300 str r3, [sp, #0] -10012a1a: 4b19 ldr r3, [pc, #100] ; (10012a80 ) -10012a1c: e7c6 b.n 100129ac -10012a1e: f8b1 a01e ldrh.w sl, [r1, #30] -10012a22: f8b2 c002 ldrh.w ip, [r2, #2] -10012a26: 45e2 cmp sl, ip -10012a28: d10b bne.n 10012a42 -10012a2a: f8d1 c000 ldr.w ip, [r1] -10012a2e: 9c03 ldr r4, [sp, #12] -10012a30: 4564 cmp r4, ip -10012a32: d009 beq.n 10012a48 -10012a34: f1bc 0f00 cmp.w ip, #0 -10012a38: 9c02 ldr r4, [sp, #8] -10012a3a: bf04 itt eq -10012a3c: 4604 moveq r4, r0 -10012a3e: 4689 moveq r9, r1 -10012a40: 9402 str r4, [sp, #8] -10012a42: 4608 mov r0, r1 -10012a44: 68c9 ldr r1, [r1, #12] -10012a46: e7d5 b.n 100129f4 -10012a48: 4689 mov r9, r1 -10012a4a: 9002 str r0, [sp, #8] -10012a4c: 9902 ldr r1, [sp, #8] -10012a4e: b141 cbz r1, 10012a62 -10012a50: f8d9 100c ldr.w r1, [r9, #12] -10012a54: 9802 ldr r0, [sp, #8] -10012a56: 60c1 str r1, [r0, #12] -10012a58: 4911 ldr r1, [pc, #68] ; (10012aa0 ) -10012a5a: f8c9 e00c str.w lr, [r9, #12] -10012a5e: f8c1 9000 str.w r9, [r1] -10012a62: 075c lsls r4, r3, #29 -10012a64: d4b7 bmi.n 100129d6 -10012a66: f013 0410 ands.w r4, r3, #16 -10012a6a: d023 beq.n 10012ab4 -10012a6c: 8813 ldrh r3, [r2, #0] -10012a6e: 6839 ldr r1, [r7, #0] -10012a70: 9301 str r3, [sp, #4] -10012a72: 8853 ldrh r3, [r2, #2] -10012a74: 9300 str r3, [sp, #0] -10012a76: e796 b.n 100129a6 -10012a78: 1004b154 .word 0x1004b154 -10012a7c: 1004aa30 .word 0x1004aa30 -10012a80: 1004aa34 .word 0x1004aa34 -10012a84: 1004b128 .word 0x1004b128 -10012a88: 1004b12c .word 0x1004b12c -10012a8c: 1004b108 .word 0x1004b108 -10012a90: 1004b124 .word 0x1004b124 -10012a94: 1004b130 .word 0x1004b130 -10012a98: 1004b144 .word 0x1004b144 -10012a9c: 1004b118 .word 0x1004b118 -10012aa0: 1004b114 .word 0x1004b114 -10012aa4: 1004b14c .word 0x1004b14c -10012aa8: 1004b158 .word 0x1004b158 -10012aac: 1004b148 .word 0x1004b148 -10012ab0: 1004b150 .word 0x1004b150 -10012ab4: 0798 lsls r0, r3, #30 -10012ab6: d58e bpl.n 100129d6 -10012ab8: f899 001c ldrb.w r0, [r9, #28] -10012abc: f7ff f962 bl 10011d84 -10012ac0: 4682 mov sl, r0 -10012ac2: 2800 cmp r0, #0 -10012ac4: d087 beq.n 100129d6 -10012ac6: f8d8 3000 ldr.w r3, [r8] -10012aca: 682a ldr r2, [r5, #0] -10012acc: 6003 str r3, [r0, #0] -10012ace: f8b9 301e ldrh.w r3, [r9, #30] -10012ad2: 7851 ldrb r1, [r2, #1] -10012ad4: 83c3 strh r3, [r0, #30] -10012ad6: 9b06 ldr r3, [sp, #24] -10012ad8: 681b ldr r3, [r3, #0] -10012ada: 6043 str r3, [r0, #4] -10012adc: 7813 ldrb r3, [r2, #0] -10012ade: ea43 2301 orr.w r3, r3, r1, lsl #8 -10012ae2: 8403 strh r3, [r0, #32] -10012ae4: 2303 movs r3, #3 -10012ae6: 6183 str r3, [r0, #24] -10012ae8: 683b ldr r3, [r7, #0] -10012aea: 1c59 adds r1, r3, #1 -10012aec: 62c1 str r1, [r0, #44] ; 0x2c -10012aee: 6341 str r1, [r0, #52] ; 0x34 -10012af0: 3b01 subs r3, #1 -10012af2: 89d2 ldrh r2, [r2, #14] -10012af4: 6583 str r3, [r0, #88] ; 0x58 -10012af6: f8d9 3010 ldr.w r3, [r9, #16] -10012afa: f8a0 2064 strh.w r2, [r0, #100] ; 0x64 -10012afe: 6103 str r3, [r0, #16] -10012b00: f8d9 3014 ldr.w r3, [r9, #20] -10012b04: f8a0 2066 strh.w r2, [r0, #102] ; 0x66 -10012b08: f8a0 2052 strh.w r2, [r0, #82] ; 0x52 -10012b0c: 6143 str r3, [r0, #20] -10012b0e: f899 3008 ldrb.w r3, [r9, #8] -10012b12: f023 0373 bic.w r3, r3, #115 ; 0x73 -10012b16: 7203 strb r3, [r0, #8] -10012b18: 9b07 ldr r3, [sp, #28] -10012b1a: 681b ldr r3, [r3, #0] -10012b1c: 60c3 str r3, [r0, #12] -10012b1e: 9b07 ldr r3, [sp, #28] -10012b20: 6018 str r0, [r3, #0] -10012b22: f7fe f871 bl 10010c08 -10012b26: 2201 movs r2, #1 -10012b28: 4ba3 ldr r3, [pc, #652] ; (10012db8 ) -10012b2a: f10a 003a add.w r0, sl, #58 ; 0x3a -10012b2e: 701a strb r2, [r3, #0] -10012b30: f7ff fdfa bl 10012728 -10012b34: f10a 0104 add.w r1, sl, #4 -10012b38: f8ba 003a ldrh.w r0, [sl, #58] ; 0x3a -10012b3c: f7ff f9b9 bl 10011eb2 -10012b40: 2112 movs r1, #18 -10012b42: f8aa 003a strh.w r0, [sl, #58] ; 0x3a -10012b46: 4650 mov r0, sl -10012b48: f000 fcb0 bl 100134ac -10012b4c: b120 cbz r0, 10012b58 -10012b4e: 4621 mov r1, r4 -10012b50: 4650 mov r0, sl -10012b52: f7ff f8bb bl 10011ccc -10012b56: e73e b.n 100129d6 -10012b58: 4650 mov r0, sl -10012b5a: e73a b.n 100129d2 -10012b5c: 4620 mov r0, r4 -10012b5e: f7ff f833 bl 10011bc8 -10012b62: 300a adds r0, #10 -10012b64: d008 beq.n 10012b78 -10012b66: 6fe3 ldr r3, [r4, #124] ; 0x7c -10012b68: 2b00 cmp r3, #0 -10012b6a: f43f aee2 beq.w 10012932 -10012b6e: 4b93 ldr r3, [pc, #588] ; (10012dbc ) -10012b70: 881b ldrh r3, [r3, #0] -10012b72: 2b00 cmp r3, #0 -10012b74: f43f aedd beq.w 10012932 -10012b78: 2400 movs r4, #0 -10012b7a: f8d9 0004 ldr.w r0, [r9, #4] -10012b7e: f8cb 4000 str.w r4, [fp] -10012b82: f8ca 4000 str.w r4, [sl] -10012b86: b118 cbz r0, 10012b90 -10012b88: f7fe fa77 bl 1001107a -10012b8c: f8c9 4004 str.w r4, [r9, #4] -10012b90: b009 add sp, #36 ; 0x24 -10012b92: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10012b96: 69a3 ldr r3, [r4, #24] -10012b98: 2b02 cmp r3, #2 -10012b9a: d10f bne.n 10012bbc -10012b9c: 4b88 ldr r3, [pc, #544] ; (10012dc0 ) -10012b9e: 6d62 ldr r2, [r4, #84] ; 0x54 -10012ba0: 681b ldr r3, [r3, #0] -10012ba2: 429a cmp r2, r3 -10012ba4: d113 bne.n 10012bce -10012ba6: f898 3000 ldrb.w r3, [r8] -10012baa: f043 0308 orr.w r3, r3, #8 -10012bae: f888 3000 strb.w r3, [r8] -10012bb2: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10012bb6: f023 0301 bic.w r3, r3, #1 -10012bba: e6ce b.n 1001295a -10012bbc: 4b81 ldr r3, [pc, #516] ; (10012dc4 ) -10012bbe: 6ae2 ldr r2, [r4, #44] ; 0x2c -10012bc0: 681b ldr r3, [r3, #0] -10012bc2: 1a9b subs r3, r3, r2 -10012bc4: d403 bmi.n 10012bce -10012bc6: 8e22 ldrh r2, [r4, #48] ; 0x30 -10012bc8: 1a9b subs r3, r3, r2 -10012bca: 2b00 cmp r3, #0 -10012bcc: ddeb ble.n 10012ba6 -10012bce: f898 3000 ldrb.w r3, [r8] -10012bd2: 071d lsls r5, r3, #28 -10012bd4: f140 819e bpl.w 10012f14 -10012bd8: f8d4 3090 ldr.w r3, [r4, #144] ; 0x90 -10012bdc: b11b cbz r3, 10012be6 -10012bde: f06f 010a mvn.w r1, #10 -10012be2: 6920 ldr r0, [r4, #16] -10012be4: 4798 blx r3 -10012be6: 4621 mov r1, r4 -10012be8: 4877 ldr r0, [pc, #476] ; (10012dc8 ) -10012bea: f7fe fef5 bl 100119d8 -10012bee: 4620 mov r0, r4 -10012bf0: f002 fb38 bl 10015264 -10012bf4: e7c0 b.n 10012b78 -10012bf6: 06da lsls r2, r3, #27 -10012bf8: bf58 it pl -10012bfa: 4b74 ldrpl r3, [pc, #464] ; (10012dcc ) -10012bfc: f104 003a add.w r0, r4, #58 ; 0x3a -10012c00: bf5c itt pl -10012c02: 681b ldrpl r3, [r3, #0] -10012c04: 62a3 strpl r3, [r4, #40] ; 0x28 -10012c06: 2300 movs r3, #0 -10012c08: f884 30a2 strb.w r3, [r4, #162] ; 0xa2 -10012c0c: f7ff fd8c bl 10012728 -10012c10: 69a3 ldr r3, [r4, #24] -10012c12: 3b02 subs r3, #2 -10012c14: 2b07 cmp r3, #7 -10012c16: d8da bhi.n 10012bce -10012c18: e8df f013 tbh [pc, r3, lsl #1] -10012c1c: 00720008 .word 0x00720008 -10012c20: 00de00c9 .word 0x00de00c9 -10012c24: 00c9012a .word 0x00c9012a -10012c28: 0169014a .word 0x0169014a -10012c2c: 7833 ldrb r3, [r6, #0] -10012c2e: f003 0312 and.w r3, r3, #18 -10012c32: 2b12 cmp r3, #18 -10012c34: d150 bne.n 10012cd8 -10012c36: 6f63 ldr r3, [r4, #116] ; 0x74 -10012c38: 691b ldr r3, [r3, #16] -10012c3a: 6858 ldr r0, [r3, #4] -10012c3c: f7fc fe68 bl 1000f910 -10012c40: 4b5f ldr r3, [pc, #380] ; (10012dc0 ) -10012c42: 3001 adds r0, #1 -10012c44: 681b ldr r3, [r3, #0] -10012c46: 4298 cmp r0, r3 -10012c48: d146 bne.n 10012cd8 -10012c4a: f8b4 306a ldrh.w r3, [r4, #106] ; 0x6a -10012c4e: 64e0 str r0, [r4, #76] ; 0x4c -10012c50: 3301 adds r3, #1 -10012c52: f8a4 306a strh.w r3, [r4, #106] ; 0x6a -10012c56: 683b ldr r3, [r7, #0] -10012c58: 8f60 ldrh r0, [r4, #58] ; 0x3a -10012c5a: 1c5a adds r2, r3, #1 -10012c5c: 62e2 str r2, [r4, #44] ; 0x2c -10012c5e: 6362 str r2, [r4, #52] ; 0x34 -10012c60: 682a ldr r2, [r5, #0] -10012c62: 3b01 subs r3, #1 -10012c64: 89d2 ldrh r2, [r2, #14] -10012c66: 65a3 str r3, [r4, #88] ; 0x58 -10012c68: 2304 movs r3, #4 -10012c6a: f8a4 2064 strh.w r2, [r4, #100] ; 0x64 -10012c6e: 18e1 adds r1, r4, r3 -10012c70: f8a4 2066 strh.w r2, [r4, #102] ; 0x66 -10012c74: 61a3 str r3, [r4, #24] -10012c76: f7ff f91c bl 10011eb2 -10012c7a: eb00 0380 add.w r3, r0, r0, lsl #2 -10012c7e: 005b lsls r3, r3, #1 -10012c80: f8a4 3052 strh.w r3, [r4, #82] ; 0x52 -10012c84: f8b4 3050 ldrh.w r3, [r4, #80] ; 0x50 -10012c88: 8760 strh r0, [r4, #58] ; 0x3a -10012c8a: 2b01 cmp r3, #1 -10012c8c: bf04 itt eq -10012c8e: 0040 lsleq r0, r0, #1 -10012c90: b280 uxtheq r0, r0 -10012c92: f8b4 306c ldrh.w r3, [r4, #108] ; 0x6c -10012c96: f8a4 0050 strh.w r0, [r4, #80] ; 0x50 -10012c9a: 6f60 ldr r0, [r4, #116] ; 0x74 -10012c9c: 3b01 subs r3, #1 -10012c9e: f8a4 306c strh.w r3, [r4, #108] ; 0x6c -10012ca2: 6803 ldr r3, [r0, #0] -10012ca4: 6763 str r3, [r4, #116] ; 0x74 -10012ca6: f7fe fccc bl 10011642 -10012caa: 6f63 ldr r3, [r4, #116] ; 0x74 -10012cac: b943 cbnz r3, 10012cc0 -10012cae: f64f 73ff movw r3, #65535 ; 0xffff -10012cb2: 8723 strh r3, [r4, #56] ; 0x38 -10012cb4: f8d4 3088 ldr.w r3, [r4, #136] ; 0x88 -10012cb8: b93b cbnz r3, 10012cca -10012cba: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10012cbe: e64a b.n 10012956 -10012cc0: 2300 movs r3, #0 -10012cc2: 8723 strh r3, [r4, #56] ; 0x38 -10012cc4: f884 304a strb.w r3, [r4, #74] ; 0x4a -10012cc8: e7f4 b.n 10012cb4 -10012cca: 2200 movs r2, #0 -10012ccc: 4621 mov r1, r4 -10012cce: 6920 ldr r0, [r4, #16] -10012cd0: 4798 blx r3 -10012cd2: 300a adds r0, #10 -10012cd4: d1f1 bne.n 10012cba -10012cd6: e74f b.n 10012b78 -10012cd8: 7833 ldrb r3, [r6, #0] -10012cda: 06db lsls r3, r3, #27 -10012cdc: f57f af77 bpl.w 10012bce -10012ce0: 682b ldr r3, [r5, #0] -10012ce2: 9a04 ldr r2, [sp, #16] -10012ce4: 6839 ldr r1, [r7, #0] -10012ce6: 8810 ldrh r0, [r2, #0] -10012ce8: 881a ldrh r2, [r3, #0] -10012cea: 4401 add r1, r0 -10012cec: 9201 str r2, [sp, #4] -10012cee: 885b ldrh r3, [r3, #2] -10012cf0: 4833 ldr r0, [pc, #204] ; (10012dc0 ) -10012cf2: 9300 str r3, [sp, #0] -10012cf4: 4a36 ldr r2, [pc, #216] ; (10012dd0 ) -10012cf6: 4b37 ldr r3, [pc, #220] ; (10012dd4 ) -10012cf8: 6800 ldr r0, [r0, #0] -10012cfa: f000 fdc1 bl 10013880 -10012cfe: e766 b.n 10012bce -10012d00: 7833 ldrb r3, [r6, #0] -10012d02: 06de lsls r6, r3, #27 -10012d04: d545 bpl.n 10012d92 -10012d06: 4b2e ldr r3, [pc, #184] ; (10012dc0 ) -10012d08: 6818 ldr r0, [r3, #0] -10012d0a: 6ce3 ldr r3, [r4, #76] ; 0x4c -10012d0c: 43db mvns r3, r3 -10012d0e: 42c3 cmn r3, r0 -10012d10: d433 bmi.n 10012d7a -10012d12: 6d63 ldr r3, [r4, #84] ; 0x54 -10012d14: 1ac3 subs r3, r0, r3 -10012d16: 2b00 cmp r3, #0 -10012d18: dc2f bgt.n 10012d7a -10012d1a: 2304 movs r3, #4 -10012d1c: 61a3 str r3, [r4, #24] -10012d1e: 6963 ldr r3, [r4, #20] -10012d20: b91b cbnz r3, 10012d2a -10012d22: 4620 mov r0, r4 -10012d24: f7ff f81e bl 10011d64 -10012d28: e726 b.n 10012b78 -10012d2a: 2200 movs r2, #0 -10012d2c: 4621 mov r1, r4 -10012d2e: 6920 ldr r0, [r4, #16] -10012d30: 4798 blx r3 -10012d32: b110 cbz r0, 10012d3a -10012d34: 300a adds r0, #10 -10012d36: d1f4 bne.n 10012d22 -10012d38: e71e b.n 10012b78 -10012d3a: 4620 mov r0, r4 -10012d3c: f8b4 5050 ldrh.w r5, [r4, #80] ; 0x50 -10012d40: f7ff f904 bl 10011f4c -10012d44: f8b4 3068 ldrh.w r3, [r4, #104] ; 0x68 -10012d48: b113 cbz r3, 10012d50 -10012d4a: 3b01 subs r3, #1 -10012d4c: f8a4 3068 strh.w r3, [r4, #104] ; 0x68 -10012d50: 8f63 ldrh r3, [r4, #58] ; 0x3a -10012d52: 2d01 cmp r5, #1 -10012d54: bf04 itt eq -10012d56: 005b lsleq r3, r3, #1 -10012d58: b29b uxtheq r3, r3 -10012d5a: f8a4 3050 strh.w r3, [r4, #80] ; 0x50 -10012d5e: f898 3000 ldrb.w r3, [r8] -10012d62: 0699 lsls r1, r3, #26 -10012d64: f57f af33 bpl.w 10012bce -10012d68: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10012d6c: f043 0302 orr.w r3, r3, #2 -10012d70: f884 3022 strb.w r3, [r4, #34] ; 0x22 -10012d74: 2307 movs r3, #7 -10012d76: 61a3 str r3, [r4, #24] -10012d78: e729 b.n 10012bce -10012d7a: 682b ldr r3, [r5, #0] -10012d7c: 9a04 ldr r2, [sp, #16] -10012d7e: 6839 ldr r1, [r7, #0] -10012d80: 8815 ldrh r5, [r2, #0] -10012d82: 881a ldrh r2, [r3, #0] -10012d84: 4429 add r1, r5 -10012d86: 9201 str r2, [sp, #4] -10012d88: 885b ldrh r3, [r3, #2] -10012d8a: 4a11 ldr r2, [pc, #68] ; (10012dd0 ) -10012d8c: 9300 str r3, [sp, #0] -10012d8e: 4b11 ldr r3, [pc, #68] ; (10012dd4 ) -10012d90: e7b3 b.n 10012cfa -10012d92: 0798 lsls r0, r3, #30 -10012d94: f57f af1b bpl.w 10012bce -10012d98: 4a0a ldr r2, [pc, #40] ; (10012dc4 ) -10012d9a: 6ae3 ldr r3, [r4, #44] ; 0x2c -10012d9c: 6812 ldr r2, [r2, #0] -10012d9e: 3b01 subs r3, #1 -10012da0: 4293 cmp r3, r2 -10012da2: f47f af14 bne.w 10012bce -10012da6: 4620 mov r0, r4 -10012da8: f000 fdcd bl 10013946 -10012dac: e70f b.n 10012bce -10012dae: 4620 mov r0, r4 -10012db0: f7ff f8cc bl 10011f4c -10012db4: e7d3 b.n 10012d5e -10012db6: bf00 nop -10012db8: 1004b10c .word 0x1004b10c -10012dbc: 1004b158 .word 0x1004b158 -10012dc0: 1004b128 .word 0x1004b128 -10012dc4: 1004b14c .word 0x1004b14c -10012dc8: 1004b108 .word 0x1004b108 -10012dcc: 1004b118 .word 0x1004b118 -10012dd0: 1004aa30 .word 0x1004aa30 -10012dd4: 1004aa34 .word 0x1004aa34 -10012dd8: 4620 mov r0, r4 -10012dda: f7ff f8b7 bl 10011f4c -10012dde: f898 3000 ldrb.w r3, [r8] -10012de2: f013 0f20 tst.w r3, #32 -10012de6: 7833 ldrb r3, [r6, #0] -10012de8: d037 beq.n 10012e5a -10012dea: f013 0f10 tst.w r3, #16 -10012dee: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10012df2: f043 0302 orr.w r3, r3, #2 -10012df6: d02c beq.n 10012e52 -10012df8: 4a77 ldr r2, [pc, #476] ; (10012fd8 ) -10012dfa: 6d61 ldr r1, [r4, #84] ; 0x54 -10012dfc: 6812 ldr r2, [r2, #0] -10012dfe: 4291 cmp r1, r2 -10012e00: d127 bne.n 10012e52 -10012e02: f884 3022 strb.w r3, [r4, #34] ; 0x22 -10012e06: 4620 mov r0, r4 -10012e08: f7fe fc58 bl 100116bc -10012e0c: 4a73 ldr r2, [pc, #460] ; (10012fdc ) -10012e0e: 6813 ldr r3, [r2, #0] -10012e10: 429c cmp r4, r3 -10012e12: d102 bne.n 10012e1a -10012e14: 68e3 ldr r3, [r4, #12] -10012e16: 6013 str r3, [r2, #0] -10012e18: e00c b.n 10012e34 -10012e1a: 2100 movs r1, #0 -10012e1c: 4a70 ldr r2, [pc, #448] ; (10012fe0 ) -10012e1e: 6013 str r3, [r2, #0] -10012e20: b90b cbnz r3, 10012e26 -10012e22: b139 cbz r1, 10012e34 -10012e24: e7f7 b.n 10012e16 -10012e26: 68d8 ldr r0, [r3, #12] -10012e28: 4284 cmp r4, r0 -10012e2a: d10f bne.n 10012e4c -10012e2c: b101 cbz r1, 10012e30 -10012e2e: 6013 str r3, [r2, #0] -10012e30: 68e2 ldr r2, [r4, #12] -10012e32: 60da str r2, [r3, #12] -10012e34: 2201 movs r2, #1 -10012e36: 4b6b ldr r3, [pc, #428] ; (10012fe4 ) -10012e38: 701a strb r2, [r3, #0] -10012e3a: 230a movs r3, #10 -10012e3c: 61a3 str r3, [r4, #24] -10012e3e: 4b6a ldr r3, [pc, #424] ; (10012fe8 ) -10012e40: 681a ldr r2, [r3, #0] -10012e42: 601c str r4, [r3, #0] -10012e44: 60e2 str r2, [r4, #12] -10012e46: f7fd fedf bl 10010c08 -10012e4a: e6c0 b.n 10012bce -10012e4c: 2101 movs r1, #1 -10012e4e: 4603 mov r3, r0 -10012e50: e7e6 b.n 10012e20 -10012e52: f884 3022 strb.w r3, [r4, #34] ; 0x22 -10012e56: 2308 movs r3, #8 -10012e58: e78d b.n 10012d76 -10012e5a: 06da lsls r2, r3, #27 -10012e5c: f57f aeb7 bpl.w 10012bce -10012e60: 4b5d ldr r3, [pc, #372] ; (10012fd8 ) -10012e62: 6d62 ldr r2, [r4, #84] ; 0x54 -10012e64: 681b ldr r3, [r3, #0] -10012e66: 429a cmp r2, r3 -10012e68: f47f aeb1 bne.w 10012bce -10012e6c: 2306 movs r3, #6 -10012e6e: e782 b.n 10012d76 -10012e70: 4620 mov r0, r4 -10012e72: f7ff f86b bl 10011f4c -10012e76: f898 3000 ldrb.w r3, [r8] -10012e7a: 069b lsls r3, r3, #26 -10012e7c: f57f aea7 bpl.w 10012bce -10012e80: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10012e84: 4620 mov r0, r4 -10012e86: f043 0302 orr.w r3, r3, #2 -10012e8a: f884 3022 strb.w r3, [r4, #34] ; 0x22 -10012e8e: f7fe fc15 bl 100116bc -10012e92: 4a52 ldr r2, [pc, #328] ; (10012fdc ) -10012e94: 6813 ldr r3, [r2, #0] -10012e96: 429c cmp r4, r3 -10012e98: d0bc beq.n 10012e14 -10012e9a: 2100 movs r1, #0 -10012e9c: 4a50 ldr r2, [pc, #320] ; (10012fe0 ) -10012e9e: 6013 str r3, [r2, #0] -10012ea0: 2b00 cmp r3, #0 -10012ea2: d0be beq.n 10012e22 -10012ea4: 68d8 ldr r0, [r3, #12] -10012ea6: 4284 cmp r4, r0 -10012ea8: d0c0 beq.n 10012e2c -10012eaa: 2101 movs r1, #1 -10012eac: 4603 mov r3, r0 -10012eae: e7f7 b.n 10012ea0 -10012eb0: 4620 mov r0, r4 -10012eb2: f7ff f84b bl 10011f4c -10012eb6: 7833 ldrb r3, [r6, #0] -10012eb8: 06df lsls r7, r3, #27 -10012eba: f57f ae88 bpl.w 10012bce -10012ebe: 4b46 ldr r3, [pc, #280] ; (10012fd8 ) -10012ec0: 6d62 ldr r2, [r4, #84] ; 0x54 -10012ec2: 681b ldr r3, [r3, #0] -10012ec4: 429a cmp r2, r3 -10012ec6: f47f ae82 bne.w 10012bce -10012eca: 4620 mov r0, r4 -10012ecc: f7fe fbf6 bl 100116bc -10012ed0: 4a42 ldr r2, [pc, #264] ; (10012fdc ) -10012ed2: 6813 ldr r3, [r2, #0] -10012ed4: 429c cmp r4, r3 -10012ed6: d09d beq.n 10012e14 -10012ed8: 2100 movs r1, #0 -10012eda: 4a41 ldr r2, [pc, #260] ; (10012fe0 ) -10012edc: 6013 str r3, [r2, #0] -10012ede: 2b00 cmp r3, #0 -10012ee0: d09f beq.n 10012e22 -10012ee2: 68d8 ldr r0, [r3, #12] -10012ee4: 4284 cmp r4, r0 -10012ee6: d0a1 beq.n 10012e2c -10012ee8: 2101 movs r1, #1 -10012eea: 4603 mov r3, r0 -10012eec: e7f7 b.n 10012ede -10012eee: 4620 mov r0, r4 -10012ef0: f7ff f82c bl 10011f4c -10012ef4: 7833 ldrb r3, [r6, #0] -10012ef6: 06de lsls r6, r3, #27 -10012ef8: f57f ae69 bpl.w 10012bce -10012efc: 4b36 ldr r3, [pc, #216] ; (10012fd8 ) -10012efe: 6d62 ldr r2, [r4, #84] ; 0x54 -10012f00: 681b ldr r3, [r3, #0] -10012f02: 429a cmp r2, r3 -10012f04: bf02 ittt eq -10012f06: f898 3000 ldrbeq.w r3, [r8] -10012f0a: f043 0310 orreq.w r3, r3, #16 -10012f0e: f888 3000 strbeq.w r3, [r8] -10012f12: e65c b.n 10012bce -10012f14: 06d8 lsls r0, r3, #27 -10012f16: d50c bpl.n 10012f32 -10012f18: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10012f1c: 06d9 lsls r1, r3, #27 -10012f1e: f53f ae62 bmi.w 10012be6 -10012f22: f8d4 3090 ldr.w r3, [r4, #144] ; 0x90 -10012f26: 2b00 cmp r3, #0 -10012f28: f43f ae5d beq.w 10012be6 -10012f2c: f06f 010b mvn.w r1, #11 -10012f30: e657 b.n 10012be2 -10012f32: f8b4 2068 ldrh.w r2, [r4, #104] ; 0x68 -10012f36: b99a cbnz r2, 10012f60 -10012f38: f8da 2000 ldr.w r2, [sl] -10012f3c: b9d2 cbnz r2, 10012f74 -10012f3e: f898 3000 ldrb.w r3, [r8] -10012f42: 069a lsls r2, r3, #26 -10012f44: d505 bpl.n 10012f52 -10012f46: 6fe3 ldr r3, [r4, #124] ; 0x7c -10012f48: b39b cbz r3, 10012fb2 -10012f4a: 7b5a ldrb r2, [r3, #13] -10012f4c: f042 0220 orr.w r2, r2, #32 -10012f50: 735a strb r2, [r3, #13] -10012f52: 2300 movs r3, #0 -10012f54: 4620 mov r0, r4 -10012f56: f8cb 3000 str.w r3, [fp] -10012f5a: f000 fb4f bl 100135fc -10012f5e: e60b b.n 10012b78 -10012f60: f8d4 3080 ldr.w r3, [r4, #128] ; 0x80 -10012f64: 2b00 cmp r3, #0 -10012f66: d0e7 beq.n 10012f38 -10012f68: 4621 mov r1, r4 -10012f6a: 6920 ldr r0, [r4, #16] -10012f6c: 4798 blx r3 -10012f6e: 300a adds r0, #10 -10012f70: d1e2 bne.n 10012f38 -10012f72: e601 b.n 10012b78 -10012f74: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10012f78: f013 0310 ands.w r3, r3, #16 -10012f7c: d003 beq.n 10012f86 -10012f7e: 4610 mov r0, r2 -10012f80: f7fe f87b bl 1001107a -10012f84: e6cd b.n 10012d22 -10012f86: f8d4 5084 ldr.w r5, [r4, #132] ; 0x84 -10012f8a: b165 cbz r5, 10012fa6 -10012f8c: 4621 mov r1, r4 -10012f8e: 6920 ldr r0, [r4, #16] -10012f90: 47a8 blx r5 -10012f92: f110 0f0a cmn.w r0, #10 -10012f96: f43f adef beq.w 10012b78 -10012f9a: 2800 cmp r0, #0 -10012f9c: d0cf beq.n 10012f3e -10012f9e: f8da 3000 ldr.w r3, [sl] -10012fa2: 67e3 str r3, [r4, #124] ; 0x7c -10012fa4: e7cb b.n 10012f3e -10012fa6: 462b mov r3, r5 -10012fa8: 4621 mov r1, r4 -10012faa: 4628 mov r0, r5 -10012fac: f7fe fdfa bl 10011ba4 -10012fb0: e7ef b.n 10012f92 -10012fb2: f241 62d0 movw r2, #5840 ; 0x16d0 -10012fb6: 8e23 ldrh r3, [r4, #48] ; 0x30 -10012fb8: f8d4 5084 ldr.w r5, [r4, #132] ; 0x84 -10012fbc: 4293 cmp r3, r2 -10012fbe: bf1c itt ne -10012fc0: 3301 addne r3, #1 -10012fc2: 8623 strhne r3, [r4, #48] ; 0x30 -10012fc4: 2d00 cmp r5, #0 -10012fc6: d0c4 beq.n 10012f52 -10012fc8: 2300 movs r3, #0 -10012fca: 4621 mov r1, r4 -10012fcc: 461a mov r2, r3 -10012fce: 6920 ldr r0, [r4, #16] -10012fd0: 47a8 blx r5 -10012fd2: 300a adds r0, #10 -10012fd4: d1bd bne.n 10012f52 -10012fd6: e5cf b.n 10012b78 -10012fd8: 1004b128 .word 0x1004b128 -10012fdc: 1004b108 .word 0x1004b108 -10012fe0: 1004b120 .word 0x1004b120 -10012fe4: 1004b10c .word 0x1004b10c -10012fe8: 1004b124 .word 0x1004b124 - -10012fec : -10012fec: b570 push {r4, r5, r6, lr} -10012fee: 460d mov r5, r1 -10012ff0: 4295 cmp r5, r2 -10012ff2: 461e mov r6, r3 -10012ff4: f89d 1018 ldrb.w r1, [sp, #24] -10012ff8: 9b04 ldr r3, [sp, #16] -10012ffa: d21e bcs.n 1001303a -10012ffc: f89d 4014 ldrb.w r4, [sp, #20] -10013000: 07a4 lsls r4, r4, #30 -10013002: d408 bmi.n 10013016 -10013004: f893 4022 ldrb.w r4, [r3, #34] ; 0x22 -10013008: 0664 lsls r4, r4, #25 -1001300a: d416 bmi.n 1001303a -1001300c: b119 cbz r1, 10013016 -1001300e: 6f19 ldr r1, [r3, #112] ; 0x70 -10013010: b909 cbnz r1, 10013016 -10013012: 6f5b ldr r3, [r3, #116] ; 0x74 -10013014: b18b cbz r3, 1001303a -10013016: f205 54b7 addw r4, r5, #1463 ; 0x5b7 -1001301a: f024 0103 bic.w r1, r4, #3 -1001301e: 428a cmp r2, r1 -10013020: bfa8 it ge -10013022: 460a movge r2, r1 -10013024: b291 uxth r1, r2 -10013026: 2200 movs r2, #0 -10013028: f7fe f84a bl 100110c0 -1001302c: b120 cbz r0, 10013038 -1001302e: 8942 ldrh r2, [r0, #10] -10013030: 1b52 subs r2, r2, r5 -10013032: 8032 strh r2, [r6, #0] -10013034: 8105 strh r5, [r0, #8] -10013036: 8145 strh r5, [r0, #10] -10013038: bd70 pop {r4, r5, r6, pc} -1001303a: 4629 mov r1, r5 -1001303c: e7f3 b.n 10013026 - ... - -10013040 : -10013040: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -10013044: f89d 8020 ldrb.w r8, [sp, #32] -10013048: 469a mov sl, r3 -1001304a: f018 0f01 tst.w r8, #1 -1001304e: bf14 ite ne -10013050: 2504 movne r5, #4 -10013052: 2500 moveq r5, #0 -10013054: f018 0f02 tst.w r8, #2 -10013058: bf14 ite ne -1001305a: 230c movne r3, #12 -1001305c: 2300 moveq r3, #0 -1001305e: 441d add r5, r3 -10013060: 4b27 ldr r3, [pc, #156] ; (10013100 ) -10013062: 4681 mov r9, r0 -10013064: 8918 ldrh r0, [r3, #8] -10013066: 460f mov r7, r1 -10013068: 4616 mov r6, r2 -1001306a: f002 f85f bl 1001512c -1001306e: 4604 mov r4, r0 -10013070: b928 cbnz r0, 1001307e -10013072: 4638 mov r0, r7 -10013074: f7fe f801 bl 1001107a -10013078: 4620 mov r0, r4 -1001307a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1001307e: f880 800c strb.w r8, [r0, #12] -10013082: f04f 0800 mov.w r8, #0 -10013086: 893b ldrh r3, [r7, #8] -10013088: 6047 str r7, [r0, #4] -1001308a: 1b5b subs r3, r3, r5 -1001308c: f8c0 8000 str.w r8, [r0] -10013090: 8103 strh r3, [r0, #8] -10013092: f8a0 800a strh.w r8, [r0, #10] -10013096: 2114 movs r1, #20 -10013098: 4638 mov r0, r7 -1001309a: f7fd ffc3 bl 10011024 -1001309e: 4607 mov r7, r0 -100130a0: b120 cbz r0, 100130ac -100130a2: 4620 mov r0, r4 -100130a4: f7fe facd bl 10011642 -100130a8: 4644 mov r4, r8 -100130aa: e7e5 b.n 10013078 -100130ac: 6863 ldr r3, [r4, #4] -100130ae: f8b9 001e ldrh.w r0, [r9, #30] -100130b2: f8d3 8004 ldr.w r8, [r3, #4] -100130b6: f3c5 0587 ubfx r5, r5, #2, #8 -100130ba: f8c4 8010 str.w r8, [r4, #16] -100130be: f7fc fc1f bl 1000f900 -100130c2: f8a8 0000 strh.w r0, [r8] -100130c6: f8b9 0020 ldrh.w r0, [r9, #32] -100130ca: f8d4 8010 ldr.w r8, [r4, #16] -100130ce: f7fc fc17 bl 1000f900 -100130d2: f8a8 0002 strh.w r0, [r8, #2] -100130d6: 4650 mov r0, sl -100130d8: f8d4 8010 ldr.w r8, [r4, #16] -100130dc: f7fc fc16 bl 1000f90c -100130e0: 3505 adds r5, #5 -100130e2: ea46 3505 orr.w r5, r6, r5, lsl #12 -100130e6: f8c8 0004 str.w r0, [r8, #4] -100130ea: b2a8 uxth r0, r5 -100130ec: f8d4 8010 ldr.w r8, [r4, #16] -100130f0: f7fc fc06 bl 1000f900 -100130f4: 6923 ldr r3, [r4, #16] -100130f6: f8a8 000c strh.w r0, [r8, #12] -100130fa: 749f strb r7, [r3, #18] -100130fc: 74df strb r7, [r3, #19] -100130fe: e7bb b.n 10013078 -10013100: 10040088 .word 0x10040088 - -10013104 : -10013104: 3114 adds r1, #20 -10013106: b5f8 push {r3, r4, r5, r6, r7, lr} -10013108: b28c uxth r4, r1 -1001310a: 4605 mov r5, r0 -1001310c: 4617 mov r7, r2 -1001310e: 4621 mov r1, r4 -10013110: 2200 movs r2, #0 -10013112: 2001 movs r0, #1 -10013114: f7fd ffd4 bl 100110c0 -10013118: 4606 mov r6, r0 -1001311a: b930 cbnz r0, 1001312a -1001311c: 2203 movs r2, #3 -1001311e: 4621 mov r1, r4 -10013120: 2001 movs r0, #1 -10013122: f7fd ffcd bl 100110c0 -10013126: 4606 mov r6, r0 -10013128: b1f8 cbz r0, 1001316a -1001312a: 8be8 ldrh r0, [r5, #30] -1001312c: 6874 ldr r4, [r6, #4] -1001312e: f7fc fbe7 bl 1000f900 -10013132: 8020 strh r0, [r4, #0] -10013134: 8c28 ldrh r0, [r5, #32] -10013136: f7fc fbe3 bl 1000f900 -1001313a: 6067 str r7, [r4, #4] -1001313c: 8060 strh r0, [r4, #2] -1001313e: 6ae8 ldr r0, [r5, #44] ; 0x2c -10013140: f7fc fbe4 bl 1000f90c -10013144: 60a0 str r0, [r4, #8] -10013146: f245 0010 movw r0, #20496 ; 0x5010 -1001314a: f7fc fbd9 bl 1000f900 -1001314e: 81a0 strh r0, [r4, #12] -10013150: 8e68 ldrh r0, [r5, #50] ; 0x32 -10013152: f7fc fbd5 bl 1000f900 -10013156: 2300 movs r3, #0 -10013158: 8e6a ldrh r2, [r5, #50] ; 0x32 -1001315a: 7423 strb r3, [r4, #16] -1001315c: 7463 strb r3, [r4, #17] -1001315e: 74a3 strb r3, [r4, #18] -10013160: 74e3 strb r3, [r4, #19] -10013162: 6aeb ldr r3, [r5, #44] ; 0x2c -10013164: 81e0 strh r0, [r4, #14] -10013166: 4413 add r3, r2 -10013168: 636b str r3, [r5, #52] ; 0x34 -1001316a: 4630 mov r0, r6 -1001316c: bdf8 pop {r3, r4, r5, r6, r7, pc} - -1001316e : -1001316e: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10013172: b08f sub sp, #60 ; 0x3c -10013174: 9306 str r3, [sp, #24] -10013176: 2300 movs r3, #0 -10013178: f8ad 3036 strh.w r3, [sp, #54] ; 0x36 -1001317c: f8b0 3066 ldrh.w r3, [r0, #102] ; 0x66 -10013180: 4692 mov sl, r2 -10013182: 8f42 ldrh r2, [r0, #58] ; 0x3a -10013184: 085b lsrs r3, r3, #1 -10013186: 4293 cmp r3, r2 -10013188: bf28 it cs -1001318a: 4613 movcs r3, r2 -1001318c: 4604 mov r4, r0 -1001318e: 9309 str r3, [sp, #36] ; 0x24 -10013190: 9105 str r1, [sp, #20] -10013192: 2900 cmp r1, #0 -10013194: f000 8177 beq.w 10013486 -10013198: 6983 ldr r3, [r0, #24] -1001319a: 2b07 cmp r3, #7 -1001319c: d003 beq.n 100131a6 -1001319e: 3b02 subs r3, #2 -100131a0: 2b02 cmp r3, #2 -100131a2: f200 8173 bhi.w 1001348c -100131a6: f1ba 0f00 cmp.w sl, #0 -100131aa: d012 beq.n 100131d2 -100131ac: f8b4 306a ldrh.w r3, [r4, #106] ; 0x6a -100131b0: 4553 cmp r3, sl -100131b2: d20a bcs.n 100131ca -100131b4: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -100131b8: f063 037f orn r3, r3, #127 ; 0x7f -100131bc: f884 3022 strb.w r3, [r4, #34] ; 0x22 -100131c0: f04f 30ff mov.w r0, #4294967295 -100131c4: b00f add sp, #60 ; 0x3c -100131c6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -100131ca: f8b4 306c ldrh.w r3, [r4, #108] ; 0x6c -100131ce: 2b13 cmp r3, #19 -100131d0: d8f0 bhi.n 100131b4 -100131d2: f8b4 306c ldrh.w r3, [r4, #108] ; 0x6c -100131d6: f8d4 b070 ldr.w fp, [r4, #112] ; 0x70 -100131da: 9304 str r3, [sp, #16] -100131dc: 465d mov r5, fp -100131de: f1bb 0f00 cmp.w fp, #0 -100131e2: d104 bne.n 100131ee -100131e4: 465f mov r7, fp -100131e6: 46d8 mov r8, fp -100131e8: 465e mov r6, fp -100131ea: e05b b.n 100132a4 -100131ec: 464d mov r5, r9 -100131ee: f8d5 9000 ldr.w r9, [r5] -100131f2: f1b9 0f00 cmp.w r9, #0 -100131f6: d1f9 bne.n 100131ec -100131f8: 7b29 ldrb r1, [r5, #12] -100131fa: 892e ldrh r6, [r5, #8] -100131fc: f011 0f01 tst.w r1, #1 -10013200: bf14 ite ne -10013202: 2004 movne r0, #4 -10013204: 2000 moveq r0, #0 -10013206: f011 0f02 tst.w r1, #2 -1001320a: bf14 ite ne -1001320c: 230c movne r3, #12 -1001320e: 2300 moveq r3, #0 -10013210: 9a09 ldr r2, [sp, #36] ; 0x24 -10013212: 1b92 subs r2, r2, r6 -10013214: 1a12 subs r2, r2, r0 -10013216: 1ad3 subs r3, r2, r3 -10013218: b29a uxth r2, r3 -1001321a: f8b4 306e ldrh.w r3, [r4, #110] ; 0x6e -1001321e: 2b00 cmp r3, #0 -10013220: f000 813e beq.w 100134a0 -10013224: 459a cmp sl, r3 -10013226: 4657 mov r7, sl -10013228: bf28 it cs -1001322a: 461f movcs r7, r3 -1001322c: 1bdb subs r3, r3, r7 -1001322e: 1bd2 subs r2, r2, r7 -10013230: 45ba cmp sl, r7 -10013232: f8ad 3036 strh.w r3, [sp, #54] ; 0x36 -10013236: b292 uxth r2, r2 -10013238: 46ab mov fp, r5 -1001323a: f240 812a bls.w 10013492 -1001323e: 2a00 cmp r2, #0 -10013240: d069 beq.n 10013316 -10013242: 2e00 cmp r6, #0 -10013244: d06a beq.n 1001331c -10013246: ebaa 0b07 sub.w fp, sl, r7 -1001324a: 4593 cmp fp, r2 -1001324c: bfa8 it ge -1001324e: 4693 movge fp, r2 -10013250: 9b06 ldr r3, [sp, #24] -10013252: fa1f f88b uxth.w r8, fp -10013256: 07db lsls r3, r3, #31 -10013258: d550 bpl.n 100132fc -1001325a: 2301 movs r3, #1 -1001325c: 9302 str r3, [sp, #8] -1001325e: 9b06 ldr r3, [sp, #24] -10013260: 9400 str r4, [sp, #0] -10013262: 9301 str r3, [sp, #4] -10013264: 4641 mov r1, r8 -10013266: f10d 0336 add.w r3, sp, #54 ; 0x36 -1001326a: 2003 movs r0, #3 -1001326c: f7ff febe bl 10012fec -10013270: 4606 mov r6, r0 -10013272: 2800 cmp r0, #0 -10013274: f000 8105 beq.w 10013482 -10013278: 896b ldrh r3, [r5, #10] -1001327a: f8bd 2036 ldrh.w r2, [sp, #54] ; 0x36 -1001327e: 6840 ldr r0, [r0, #4] -10013280: 4413 add r3, r2 -10013282: 816b strh r3, [r5, #10] -10013284: 9b05 ldr r3, [sp, #20] -10013286: 4642 mov r2, r8 -10013288: 19d9 adds r1, r3, r7 -1001328a: f007 fc91 bl 1001abb0 -1001328e: 4630 mov r0, r6 -10013290: f7fd ffbf bl 10011212 -10013294: 46ab mov fp, r5 -10013296: 9b04 ldr r3, [sp, #16] -10013298: 44b8 add r8, r7 -1001329a: 4403 add r3, r0 -1001329c: b29b uxth r3, r3 -1001329e: fa1f f888 uxth.w r8, r8 -100132a2: 9304 str r3, [sp, #16] -100132a4: f04f 0900 mov.w r9, #0 -100132a8: 9b06 ldr r3, [sp, #24] -100132aa: f8cd 9028 str.w r9, [sp, #40] ; 0x28 -100132ae: f003 0301 and.w r3, r3, #1 -100132b2: 9307 str r3, [sp, #28] -100132b4: 45d0 cmp r8, sl -100132b6: d333 bcc.n 10013320 -100132b8: b15f cbz r7, 100132d2 -100132ba: f8d5 8004 ldr.w r8, [r5, #4] -100132be: f1b8 0f00 cmp.w r8, #0 -100132c2: f040 80a1 bne.w 10013408 -100132c6: 892b ldrh r3, [r5, #8] -100132c8: 443b add r3, r7 -100132ca: 812b strh r3, [r5, #8] -100132cc: 896b ldrh r3, [r5, #10] -100132ce: 1bdf subs r7, r3, r7 -100132d0: 816f strh r7, [r5, #10] -100132d2: f8bd 3036 ldrh.w r3, [sp, #54] ; 0x36 -100132d6: f8a4 306e strh.w r3, [r4, #110] ; 0x6e -100132da: 2e00 cmp r6, #0 -100132dc: f000 80ad beq.w 1001343a -100132e0: 4631 mov r1, r6 -100132e2: 6868 ldr r0, [r5, #4] -100132e4: f7fd ffaa bl 1001123c -100132e8: 892b ldrh r3, [r5, #8] -100132ea: 8932 ldrh r2, [r6, #8] -100132ec: 4413 add r3, r2 -100132ee: 812b strh r3, [r5, #8] -100132f0: f8c5 9000 str.w r9, [r5] -100132f4: e0a6 b.n 10013444 -100132f6: 464f mov r7, r9 -100132f8: 46cb mov fp, r9 -100132fa: e7a0 b.n 1001323e -100132fc: 2201 movs r2, #1 -100132fe: 4641 mov r1, r8 -10013300: 2003 movs r0, #3 -10013302: f7fd fedd bl 100110c0 -10013306: 4606 mov r6, r0 -10013308: 2800 cmp r0, #0 -1001330a: f000 80ba beq.w 10013482 -1001330e: 9b05 ldr r3, [sp, #20] -10013310: 443b add r3, r7 -10013312: 6043 str r3, [r0, #4] -10013314: e7bb b.n 1001328e -10013316: 46b8 mov r8, r7 -10013318: 4616 mov r6, r2 -1001331a: e7c3 b.n 100132a4 -1001331c: 46b8 mov r8, r7 -1001331e: e7c1 b.n 100132a4 -10013320: 9a09 ldr r2, [sp, #36] ; 0x24 -10013322: ebaa 0308 sub.w r3, sl, r8 -10013326: b29b uxth r3, r3 -10013328: 4293 cmp r3, r2 -1001332a: bf28 it cs -1001332c: 4613 movcs r3, r2 -1001332e: 9308 str r3, [sp, #32] -10013330: 9b07 ldr r3, [sp, #28] -10013332: b303 cbz r3, 10013376 -10013334: fab9 f389 clz r3, r9 -10013338: 095b lsrs r3, r3, #5 -1001333a: 9302 str r3, [sp, #8] -1001333c: 9b06 ldr r3, [sp, #24] -1001333e: 9400 str r4, [sp, #0] -10013340: 9301 str r3, [sp, #4] -10013342: 9908 ldr r1, [sp, #32] -10013344: f10d 0336 add.w r3, sp, #54 ; 0x36 -10013348: 2000 movs r0, #0 -1001334a: f7ff fe4f bl 10012fec -1001334e: 4683 mov fp, r0 -10013350: b330 cbz r0, 100133a0 -10013352: 9b05 ldr r3, [sp, #20] -10013354: 9a08 ldr r2, [sp, #32] -10013356: eb03 0108 add.w r1, r3, r8 -1001335a: 6840 ldr r0, [r0, #4] -1001335c: f007 fc28 bl 1001abb0 -10013360: 4658 mov r0, fp -10013362: f7fd ff56 bl 10011212 -10013366: 9b04 ldr r3, [sp, #16] -10013368: 4403 add r3, r0 -1001336a: b29b uxth r3, r3 -1001336c: 2b14 cmp r3, #20 -1001336e: 9304 str r3, [sp, #16] -10013370: d92c bls.n 100133cc -10013372: 4658 mov r0, fp -10013374: e012 b.n 1001339c -10013376: 2201 movs r2, #1 -10013378: 9908 ldr r1, [sp, #32] -1001337a: 9807 ldr r0, [sp, #28] -1001337c: f7fd fea0 bl 100110c0 -10013380: b170 cbz r0, 100133a0 -10013382: 9a05 ldr r2, [sp, #20] -10013384: 900b str r0, [sp, #44] ; 0x2c -10013386: 4442 add r2, r8 -10013388: 6042 str r2, [r0, #4] -1001338a: 9a07 ldr r2, [sp, #28] -1001338c: 4611 mov r1, r2 -1001338e: 4610 mov r0, r2 -10013390: f7fd fe96 bl 100110c0 -10013394: 9b0b ldr r3, [sp, #44] ; 0x2c -10013396: 4683 mov fp, r0 -10013398: b9a0 cbnz r0, 100133c4 -1001339a: 4618 mov r0, r3 -1001339c: f7fd fe6d bl 1001107a -100133a0: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -100133a4: f063 037f orn r3, r3, #127 ; 0x7f -100133a8: f884 3022 strb.w r3, [r4, #34] ; 0x22 -100133ac: b116 cbz r6, 100133b4 -100133ae: 4630 mov r0, r6 -100133b0: f7fd fe63 bl 1001107a -100133b4: f1b9 0f00 cmp.w r9, #0 -100133b8: f43f af02 beq.w 100131c0 -100133bc: 4648 mov r0, r9 -100133be: f7fe f94d bl 1001165c -100133c2: e6fd b.n 100131c0 -100133c4: 4619 mov r1, r3 -100133c6: f7fd ff39 bl 1001123c -100133ca: e7c9 b.n 10013360 -100133cc: 2200 movs r2, #0 -100133ce: 6e23 ldr r3, [r4, #96] ; 0x60 -100133d0: 4659 mov r1, fp -100133d2: 9200 str r2, [sp, #0] -100133d4: 4443 add r3, r8 -100133d6: 4620 mov r0, r4 -100133d8: f7ff fe32 bl 10013040 -100133dc: 4683 mov fp, r0 -100133de: 2800 cmp r0, #0 -100133e0: d0de beq.n 100133a0 -100133e2: f8bd 3036 ldrh.w r3, [sp, #54] ; 0x36 -100133e6: 8143 strh r3, [r0, #10] -100133e8: f1b9 0f00 cmp.w r9, #0 -100133ec: d008 beq.n 10013400 -100133ee: 9b0a ldr r3, [sp, #40] ; 0x28 -100133f0: 6018 str r0, [r3, #0] -100133f2: 9b08 ldr r3, [sp, #32] -100133f4: f8cd b028 str.w fp, [sp, #40] ; 0x28 -100133f8: 4498 add r8, r3 -100133fa: fa1f f888 uxth.w r8, r8 -100133fe: e759 b.n 100132b4 -10013400: 4681 mov r9, r0 -10013402: e7f6 b.n 100133f2 -10013404: 464e mov r6, r9 -10013406: e758 b.n 100132ba -10013408: f8b8 3008 ldrh.w r3, [r8, #8] -1001340c: 443b add r3, r7 -1001340e: f8a8 3008 strh.w r3, [r8, #8] -10013412: f8d8 3000 ldr.w r3, [r8] -10013416: b96b cbnz r3, 10013434 -10013418: f8d8 3004 ldr.w r3, [r8, #4] -1001341c: f8b8 000a ldrh.w r0, [r8, #10] -10013420: 463a mov r2, r7 -10013422: 4418 add r0, r3 -10013424: 9905 ldr r1, [sp, #20] -10013426: f007 fbc3 bl 1001abb0 -1001342a: f8b8 300a ldrh.w r3, [r8, #10] -1001342e: 443b add r3, r7 -10013430: f8a8 300a strh.w r3, [r8, #10] -10013434: f8d8 8000 ldr.w r8, [r8] -10013438: e741 b.n 100132be -1001343a: 2d00 cmp r5, #0 -1001343c: f47f af58 bne.w 100132f0 -10013440: f8c4 9070 str.w r9, [r4, #112] ; 0x70 -10013444: 6e23 ldr r3, [r4, #96] ; 0x60 -10013446: 4453 add r3, sl -10013448: 6623 str r3, [r4, #96] ; 0x60 -1001344a: f8b4 306a ldrh.w r3, [r4, #106] ; 0x6a -1001344e: eba3 0a0a sub.w sl, r3, sl -10013452: f8bd 3010 ldrh.w r3, [sp, #16] -10013456: f8a4 a06a strh.w sl, [r4, #106] ; 0x6a -1001345a: f8a4 306c strh.w r3, [r4, #108] ; 0x6c -1001345e: f1bb 0f00 cmp.w fp, #0 -10013462: d00c beq.n 1001347e -10013464: f8db 4010 ldr.w r4, [fp, #16] -10013468: b14c cbz r4, 1001347e -1001346a: 9b06 ldr r3, [sp, #24] -1001346c: f013 0b02 ands.w fp, r3, #2 -10013470: d105 bne.n 1001347e -10013472: 2008 movs r0, #8 -10013474: 89a5 ldrh r5, [r4, #12] -10013476: f7fc fa43 bl 1000f900 -1001347a: 4328 orrs r0, r5 -1001347c: 81a0 strh r0, [r4, #12] -1001347e: 2000 movs r0, #0 -10013480: e6a0 b.n 100131c4 -10013482: 2600 movs r6, #0 -10013484: e78c b.n 100133a0 -10013486: f06f 000d mvn.w r0, #13 -1001348a: e69b b.n 100131c4 -1001348c: f06f 000c mvn.w r0, #12 -10013490: e698 b.n 100131c4 -10013492: 2f00 cmp r7, #0 -10013494: d1b6 bne.n 10013404 -10013496: f8bd 3036 ldrh.w r3, [sp, #54] ; 0x36 -1001349a: f8a4 306e strh.w r3, [r4, #110] ; 0x6e -1001349e: e727 b.n 100132f0 -100134a0: f1ba 0f00 cmp.w sl, #0 -100134a4: f47f af27 bne.w 100132f6 -100134a8: 46d3 mov fp, sl -100134aa: e7f4 b.n 10013496 - -100134ac : -100134ac: f8b0 306c ldrh.w r3, [r0, #108] ; 0x6c -100134b0: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -100134b2: 2b13 cmp r3, #19 -100134b4: 4604 mov r4, r0 -100134b6: 460d mov r5, r1 -100134b8: f001 0603 and.w r6, r1, #3 -100134bc: d908 bls.n 100134d0 -100134be: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -100134c2: f063 037f orn r3, r3, #127 ; 0x7f -100134c6: f884 3022 strb.w r3, [r4, #34] ; 0x22 -100134ca: f04f 30ff mov.w r0, #4294967295 -100134ce: e03a b.n 10013546 -100134d0: f001 0302 and.w r3, r1, #2 -100134d4: 2b00 cmp r3, #0 -100134d6: f8b0 306a ldrh.w r3, [r0, #106] ; 0x6a -100134da: bf15 itete ne -100134dc: 2701 movne r7, #1 -100134de: 2700 moveq r7, #0 -100134e0: 2104 movne r1, #4 -100134e2: 2100 moveq r1, #0 -100134e4: 2b00 cmp r3, #0 -100134e6: d0f0 beq.n 100134ca -100134e8: 2200 movs r2, #0 -100134ea: 4610 mov r0, r2 -100134ec: f7fd fde8 bl 100110c0 -100134f0: 4601 mov r1, r0 -100134f2: 2800 cmp r0, #0 -100134f4: d0e3 beq.n 100134be -100134f6: 9700 str r7, [sp, #0] -100134f8: 6e23 ldr r3, [r4, #96] ; 0x60 -100134fa: 462a mov r2, r5 -100134fc: 4620 mov r0, r4 -100134fe: f7ff fd9f bl 10013040 -10013502: 2800 cmp r0, #0 -10013504: d0db beq.n 100134be -10013506: 6f23 ldr r3, [r4, #112] ; 0x70 -10013508: bb03 cbnz r3, 1001354c -1001350a: 6720 str r0, [r4, #112] ; 0x70 -1001350c: 2300 movs r3, #0 -1001350e: f8a4 306e strh.w r3, [r4, #110] ; 0x6e -10013512: b13e cbz r6, 10013524 -10013514: 6e23 ldr r3, [r4, #96] ; 0x60 -10013516: 3301 adds r3, #1 -10013518: 6623 str r3, [r4, #96] ; 0x60 -1001351a: f8b4 306a ldrh.w r3, [r4, #106] ; 0x6a -1001351e: 3b01 subs r3, #1 -10013520: f8a4 306a strh.w r3, [r4, #106] ; 0x6a -10013524: 07eb lsls r3, r5, #31 -10013526: bf42 ittt mi -10013528: f894 3022 ldrbmi.w r3, [r4, #34] ; 0x22 -1001352c: f043 0320 orrmi.w r3, r3, #32 -10013530: f884 3022 strbmi.w r3, [r4, #34] ; 0x22 -10013534: 6840 ldr r0, [r0, #4] -10013536: f7fd fe6c bl 10011212 -1001353a: f8b4 306c ldrh.w r3, [r4, #108] ; 0x6c -1001353e: 4418 add r0, r3 -10013540: f8a4 006c strh.w r0, [r4, #108] ; 0x6c -10013544: 2000 movs r0, #0 -10013546: b003 add sp, #12 -10013548: bdf0 pop {r4, r5, r6, r7, pc} -1001354a: 4613 mov r3, r2 -1001354c: 681a ldr r2, [r3, #0] -1001354e: 2a00 cmp r2, #0 -10013550: d1fb bne.n 1001354a -10013552: 6018 str r0, [r3, #0] -10013554: e7da b.n 1001350c - -10013556 : -10013556: b5f8 push {r3, r4, r5, r6, r7, lr} -10013558: 6f04 ldr r4, [r0, #112] ; 0x70 -1001355a: 4605 mov r5, r0 -1001355c: b934 cbnz r4, 1001356c -1001355e: 4628 mov r0, r5 -10013560: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -10013564: 2101 movs r1, #1 -10013566: f7ff bfa1 b.w 100134ac -1001356a: 461c mov r4, r3 -1001356c: 6823 ldr r3, [r4, #0] -1001356e: 2b00 cmp r3, #0 -10013570: d1fb bne.n 1001356a -10013572: 6923 ldr r3, [r4, #16] -10013574: 8998 ldrh r0, [r3, #12] -10013576: f7fc f9c6 bl 1000f906 -1001357a: f010 0707 ands.w r7, r0, #7 -1001357e: d1ee bne.n 1001355e -10013580: 6926 ldr r6, [r4, #16] -10013582: 2001 movs r0, #1 -10013584: 89b4 ldrh r4, [r6, #12] -10013586: f7fc f9bb bl 1000f900 -1001358a: 4320 orrs r0, r4 -1001358c: 81b0 strh r0, [r6, #12] -1001358e: f895 3022 ldrb.w r3, [r5, #34] ; 0x22 -10013592: 4638 mov r0, r7 -10013594: f043 0320 orr.w r3, r3, #32 -10013598: f885 3022 strb.w r3, [r5, #34] ; 0x22 -1001359c: bdf8 pop {r3, r4, r5, r6, r7, pc} - -1001359e : -1001359e: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -100135a0: 4604 mov r4, r0 -100135a2: 6d40 ldr r0, [r0, #84] ; 0x54 -100135a4: f7fc f9b2 bl 1000f90c -100135a8: 2100 movs r1, #0 -100135aa: 4602 mov r2, r0 -100135ac: 4620 mov r0, r4 -100135ae: f7ff fda9 bl 10013104 -100135b2: 4605 mov r5, r0 -100135b4: b1f8 cbz r0, 100135f6 -100135b6: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -100135ba: 6847 ldr r7, [r0, #4] -100135bc: f023 0303 bic.w r3, r3, #3 -100135c0: f884 3022 strb.w r3, [r4, #34] ; 0x22 -100135c4: 8903 ldrh r3, [r0, #8] -100135c6: 1d26 adds r6, r4, #4 -100135c8: 9300 str r3, [sp, #0] -100135ca: 4632 mov r2, r6 -100135cc: 2306 movs r3, #6 -100135ce: 4621 mov r1, r4 -100135d0: f7fb fc0a bl 1000ede8 -100135d4: 2206 movs r2, #6 -100135d6: 8238 strh r0, [r7, #16] -100135d8: 9201 str r2, [sp, #4] -100135da: 7a62 ldrb r2, [r4, #9] -100135dc: 7aa3 ldrb r3, [r4, #10] -100135de: 9200 str r2, [sp, #0] -100135e0: 4621 mov r1, r4 -100135e2: 4632 mov r2, r6 -100135e4: 4628 mov r0, r5 -100135e6: f7fb fe20 bl 1000f22a -100135ea: 4628 mov r0, r5 -100135ec: f7fd fd45 bl 1001107a -100135f0: 2000 movs r0, #0 -100135f2: b003 add sp, #12 -100135f4: bdf0 pop {r4, r5, r6, r7, pc} -100135f6: f06f 0001 mvn.w r0, #1 -100135fa: e7fa b.n 100135f2 - -100135fc : -100135fc: 4b9e ldr r3, [pc, #632] ; (10013878 ) -100135fe: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10013602: 681b ldr r3, [r3, #0] -10013604: 4604 mov r4, r0 -10013606: 4298 cmp r0, r3 -10013608: d02e beq.n 10013668 -1001360a: f8b0 3050 ldrh.w r3, [r0, #80] ; 0x50 -1001360e: f8b0 7064 ldrh.w r7, [r0, #100] ; 0x64 -10013612: 6f05 ldr r5, [r0, #112] ; 0x70 -10013614: 429f cmp r7, r3 -10013616: bf28 it cs -10013618: 461f movcs r7, r3 -1001361a: f890 3022 ldrb.w r3, [r0, #34] ; 0x22 -1001361e: 079a lsls r2, r3, #30 -10013620: d510 bpl.n 10013644 -10013622: b92d cbnz r5, 10013630 -10013624: 4620 mov r0, r4 -10013626: b003 add sp, #12 -10013628: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001362c: f7ff bfb7 b.w 1001359e -10013630: 692b ldr r3, [r5, #16] -10013632: 6858 ldr r0, [r3, #4] -10013634: f7fc f96c bl 1000f910 -10013638: 892b ldrh r3, [r5, #8] -1001363a: 6ce2 ldr r2, [r4, #76] ; 0x4c -1001363c: 1a9b subs r3, r3, r2 -1001363e: 4418 add r0, r3 -10013640: 4287 cmp r7, r0 -10013642: d3ef bcc.n 10013624 -10013644: 6f66 ldr r6, [r4, #116] ; 0x74 -10013646: b9a6 cbnz r6, 10013672 -10013648: f8df 9230 ldr.w r9, [pc, #560] ; 1001387c -1001364c: f104 0804 add.w r8, r4, #4 -10013650: 2d00 cmp r5, #0 -10013652: d141 bne.n 100136d8 -10013654: 6f23 ldr r3, [r4, #112] ; 0x70 -10013656: b90b cbnz r3, 1001365c -10013658: f8a4 306e strh.w r3, [r4, #110] ; 0x6e -1001365c: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10013660: f003 037f and.w r3, r3, #127 ; 0x7f -10013664: f884 3022 strb.w r3, [r4, #34] ; 0x22 -10013668: 2000 movs r0, #0 -1001366a: b003 add sp, #12 -1001366c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10013670: 461e mov r6, r3 -10013672: 6833 ldr r3, [r6, #0] -10013674: 2b00 cmp r3, #0 -10013676: d1fb bne.n 10013670 -10013678: e7e6 b.n 10013648 -1001367a: 692b ldr r3, [r5, #16] -1001367c: 6858 ldr r0, [r3, #4] -1001367e: f7fc f947 bl 1000f910 -10013682: 6933 ldr r3, [r6, #16] -10013684: 4682 mov sl, r0 -10013686: 6858 ldr r0, [r3, #4] -10013688: f7fc f942 bl 1000f910 -1001368c: ebaa 0000 sub.w r0, sl, r0 -10013690: 2800 cmp r0, #0 -10013692: da1b bge.n 100136cc -10013694: f104 0a74 add.w sl, r4, #116 ; 0x74 -10013698: f8da 3000 ldr.w r3, [sl] -1001369c: b933 cbnz r3, 100136ac -1001369e: f8da 3000 ldr.w r3, [sl] -100136a2: 602b str r3, [r5, #0] -100136a4: f8ca 5000 str.w r5, [sl] -100136a8: 6f25 ldr r5, [r4, #112] ; 0x70 -100136aa: e7d1 b.n 10013650 -100136ac: 691b ldr r3, [r3, #16] -100136ae: 6858 ldr r0, [r3, #4] -100136b0: f7fc f92e bl 1000f910 -100136b4: 692b ldr r3, [r5, #16] -100136b6: 4683 mov fp, r0 -100136b8: 6858 ldr r0, [r3, #4] -100136ba: f7fc f929 bl 1000f910 -100136be: ebab 0000 sub.w r0, fp, r0 -100136c2: 2800 cmp r0, #0 -100136c4: daeb bge.n 1001369e -100136c6: f8da a000 ldr.w sl, [sl] -100136ca: e7e5 b.n 10013698 -100136cc: 6035 str r5, [r6, #0] -100136ce: e0cb b.n 10013868 -100136d0: 4628 mov r0, r5 -100136d2: f7fd ffb6 bl 10011642 -100136d6: e7e7 b.n 100136a8 -100136d8: 692b ldr r3, [r5, #16] -100136da: 6858 ldr r0, [r3, #4] -100136dc: f7fc f918 bl 1000f910 -100136e0: 892b ldrh r3, [r5, #8] -100136e2: 6ce2 ldr r2, [r4, #76] ; 0x4c -100136e4: 1a9b subs r3, r3, r2 -100136e6: 4418 add r0, r3 -100136e8: 4287 cmp r7, r0 -100136ea: d3b3 bcc.n 10013654 -100136ec: 692b ldr r3, [r5, #16] -100136ee: 8998 ldrh r0, [r3, #12] -100136f0: f7fc f909 bl 1000f906 -100136f4: 6f63 ldr r3, [r4, #116] ; 0x74 -100136f6: b1a3 cbz r3, 10013722 -100136f8: f894 2022 ldrb.w r2, [r4, #34] ; 0x22 -100136fc: f012 0f44 tst.w r2, #68 ; 0x44 -10013700: d10f bne.n 10013722 -10013702: 6f23 ldr r3, [r4, #112] ; 0x70 -10013704: b12b cbz r3, 10013712 -10013706: 6819 ldr r1, [r3, #0] -10013708: b959 cbnz r1, 10013722 -1001370a: 8919 ldrh r1, [r3, #8] -1001370c: 8f63 ldrh r3, [r4, #58] ; 0x3a -1001370e: 4299 cmp r1, r3 -10013710: d207 bcs.n 10013722 -10013712: f8b4 306a ldrh.w r3, [r4, #106] ; 0x6a -10013716: b123 cbz r3, 10013722 -10013718: f8b4 306c ldrh.w r3, [r4, #108] ; 0x6c -1001371c: 2b13 cmp r3, #19 -1001371e: f240 80a5 bls.w 1001386c -10013722: 682b ldr r3, [r5, #0] -10013724: 6723 str r3, [r4, #112] ; 0x70 -10013726: 69a3 ldr r3, [r4, #24] -10013728: 2b02 cmp r3, #2 -1001372a: d010 beq.n 1001374e -1001372c: f8d5 b010 ldr.w fp, [r5, #16] -10013730: 2010 movs r0, #16 -10013732: f8bb a00c ldrh.w sl, [fp, #12] -10013736: f7fc f8e3 bl 1000f900 -1001373a: ea4a 0000 orr.w r0, sl, r0 -1001373e: f8ab 000c strh.w r0, [fp, #12] -10013742: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10013746: f023 0303 bic.w r3, r3, #3 -1001374a: f884 3022 strb.w r3, [r4, #34] ; 0x22 -1001374e: 6ae0 ldr r0, [r4, #44] ; 0x2c -10013750: f8d5 a010 ldr.w sl, [r5, #16] -10013754: f7fc f8da bl 1000f90c -10013758: f8ca 0008 str.w r0, [sl, #8] -1001375c: 8e60 ldrh r0, [r4, #50] ; 0x32 -1001375e: f8d5 a010 ldr.w sl, [r5, #16] -10013762: f7fc f8cd bl 1000f900 -10013766: 8e62 ldrh r2, [r4, #50] ; 0x32 -10013768: 6ae3 ldr r3, [r4, #44] ; 0x2c -1001376a: f8aa 000e strh.w r0, [sl, #14] -1001376e: 4413 add r3, r2 -10013770: 6363 str r3, [r4, #52] ; 0x34 -10013772: 7b2b ldrb r3, [r5, #12] -10013774: 07db lsls r3, r3, #31 -10013776: d50c bpl.n 10013792 -10013778: 4641 mov r1, r8 -1001377a: f240 50b4 movw r0, #1460 ; 0x5b4 -1001377e: f8d5 a010 ldr.w sl, [r5, #16] -10013782: f7fe fb96 bl 10011eb2 -10013786: f040 7001 orr.w r0, r0, #33816576 ; 0x2040000 -1001378a: f7fc f8bf bl 1000f90c -1001378e: f8ca 0014 str.w r0, [sl, #20] -10013792: f9b4 3038 ldrsh.w r3, [r4, #56] ; 0x38 -10013796: 3301 adds r3, #1 -10013798: bf04 itt eq -1001379a: 2300 moveq r3, #0 -1001379c: 8723 strheq r3, [r4, #56] ; 0x38 -1001379e: 6823 ldr r3, [r4, #0] -100137a0: b933 cbnz r3, 100137b0 -100137a2: 4640 mov r0, r8 -100137a4: f7fb fb8c bl 1000eec0 -100137a8: 2800 cmp r0, #0 -100137aa: d032 beq.n 10013812 -100137ac: 6843 ldr r3, [r0, #4] -100137ae: 6023 str r3, [r4, #0] -100137b0: 6be3 ldr r3, [r4, #60] ; 0x3c -100137b2: b93b cbnz r3, 100137c4 -100137b4: f8d9 3000 ldr.w r3, [r9] -100137b8: 63e3 str r3, [r4, #60] ; 0x3c -100137ba: 692b ldr r3, [r5, #16] -100137bc: 6858 ldr r0, [r3, #4] -100137be: f7fc f8a7 bl 1000f910 -100137c2: 6420 str r0, [r4, #64] ; 0x40 -100137c4: 6868 ldr r0, [r5, #4] -100137c6: f8d5 a010 ldr.w sl, [r5, #16] -100137ca: 6843 ldr r3, [r0, #4] -100137cc: 4621 mov r1, r4 -100137ce: ebaa 0303 sub.w r3, sl, r3 -100137d2: b29a uxth r2, r3 -100137d4: 8943 ldrh r3, [r0, #10] -100137d6: f8c0 a004 str.w sl, [r0, #4] -100137da: 1a9b subs r3, r3, r2 -100137dc: 8143 strh r3, [r0, #10] -100137de: 8903 ldrh r3, [r0, #8] -100137e0: 1a9b subs r3, r3, r2 -100137e2: 2200 movs r2, #0 -100137e4: b29b uxth r3, r3 -100137e6: 8103 strh r3, [r0, #8] -100137e8: f88a 2010 strb.w r2, [sl, #16] -100137ec: f88a 2011 strb.w r2, [sl, #17] -100137f0: 9300 str r3, [sp, #0] -100137f2: 4642 mov r2, r8 -100137f4: 2306 movs r3, #6 -100137f6: f7fb faf7 bl 1000ede8 -100137fa: 2206 movs r2, #6 -100137fc: f8aa 0010 strh.w r0, [sl, #16] -10013800: 9201 str r2, [sp, #4] -10013802: 7a62 ldrb r2, [r4, #9] -10013804: 7aa3 ldrb r3, [r4, #10] -10013806: 9200 str r2, [sp, #0] -10013808: 4621 mov r1, r4 -1001380a: 4642 mov r2, r8 -1001380c: 6868 ldr r0, [r5, #4] -1001380e: f7fb fd0c bl 1000f22a -10013812: 692b ldr r3, [r5, #16] -10013814: 6858 ldr r0, [r3, #4] -10013816: f7fc f87b bl 1000f910 -1001381a: 692b ldr r3, [r5, #16] -1001381c: 4682 mov sl, r0 -1001381e: 8998 ldrh r0, [r3, #12] -10013820: f8b5 b008 ldrh.w fp, [r5, #8] -10013824: f7fc f86f bl 1000f906 -10013828: f010 0003 ands.w r0, r0, #3 -1001382c: bf18 it ne -1001382e: 2001 movne r0, #1 -10013830: 6d63 ldr r3, [r4, #84] ; 0x54 -10013832: 4458 add r0, fp -10013834: 4450 add r0, sl -10013836: 1a1b subs r3, r3, r0 -10013838: 2b00 cmp r3, #0 -1001383a: 692b ldr r3, [r5, #16] -1001383c: bfb8 it lt -1001383e: 6560 strlt r0, [r4, #84] ; 0x54 -10013840: 8998 ldrh r0, [r3, #12] -10013842: f8b5 a008 ldrh.w sl, [r5, #8] -10013846: f7fc f85e bl 1000f906 -1001384a: f010 0003 ands.w r0, r0, #3 -1001384e: bf18 it ne -10013850: 2001 movne r0, #1 -10013852: eb10 0f0a cmn.w r0, sl -10013856: f43f af3b beq.w 100136d0 -1001385a: 2300 movs r3, #0 -1001385c: 602b str r3, [r5, #0] -1001385e: 6f63 ldr r3, [r4, #116] ; 0x74 -10013860: 2b00 cmp r3, #0 -10013862: f47f af0a bne.w 1001367a -10013866: 6765 str r5, [r4, #116] ; 0x74 -10013868: 462e mov r6, r5 -1001386a: e71d b.n 100136a8 -1001386c: f012 0fa0 tst.w r2, #160 ; 0xa0 -10013870: f47f af57 bne.w 10013722 -10013874: e6ee b.n 10013654 -10013876: bf00 nop -10013878: 1004b150 .word 0x1004b150 -1001387c: 1004b118 .word 0x1004b118 - -10013880 : -10013880: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10013884: 4681 mov r9, r0 -10013886: 460e mov r6, r1 -10013888: 4617 mov r7, r2 -1001388a: 2114 movs r1, #20 -1001388c: 2200 movs r2, #0 -1001388e: 2001 movs r0, #1 -10013890: 4698 mov r8, r3 -10013892: f8bd b030 ldrh.w fp, [sp, #48] ; 0x30 -10013896: f8bd a034 ldrh.w sl, [sp, #52] ; 0x34 -1001389a: f7fd fc11 bl 100110c0 -1001389e: 4605 mov r5, r0 -100138a0: b3b8 cbz r0, 10013912 -100138a2: 6844 ldr r4, [r0, #4] -100138a4: 4658 mov r0, fp -100138a6: f7fc f82b bl 1000f900 -100138aa: 8020 strh r0, [r4, #0] -100138ac: 4650 mov r0, sl -100138ae: f7fc f827 bl 1000f900 -100138b2: 8060 strh r0, [r4, #2] -100138b4: 4648 mov r0, r9 -100138b6: f7fc f829 bl 1000f90c -100138ba: 6060 str r0, [r4, #4] -100138bc: 4630 mov r0, r6 -100138be: f7fc f825 bl 1000f90c -100138c2: 60a0 str r0, [r4, #8] -100138c4: f245 0014 movw r0, #20500 ; 0x5014 -100138c8: f7fc f81a bl 1000f900 -100138cc: 2316 movs r3, #22 -100138ce: 73a3 strb r3, [r4, #14] -100138d0: f06f 032f mvn.w r3, #47 ; 0x2f -100138d4: 2600 movs r6, #0 -100138d6: 73e3 strb r3, [r4, #15] -100138d8: 892b ldrh r3, [r5, #8] -100138da: 81a0 strh r0, [r4, #12] -100138dc: 7426 strb r6, [r4, #16] -100138de: 7466 strb r6, [r4, #17] -100138e0: 74a6 strb r6, [r4, #18] -100138e2: 74e6 strb r6, [r4, #19] -100138e4: 4642 mov r2, r8 -100138e6: 9300 str r3, [sp, #0] -100138e8: 4639 mov r1, r7 -100138ea: 2306 movs r3, #6 -100138ec: 4628 mov r0, r5 -100138ee: f7fb fa7b bl 1000ede8 -100138f2: 2306 movs r3, #6 -100138f4: 8220 strh r0, [r4, #16] -100138f6: 4642 mov r2, r8 -100138f8: 9301 str r3, [sp, #4] -100138fa: 9600 str r6, [sp, #0] -100138fc: 23ff movs r3, #255 ; 0xff -100138fe: 4639 mov r1, r7 -10013900: 4628 mov r0, r5 -10013902: f7fb fc92 bl 1000f22a -10013906: 4628 mov r0, r5 -10013908: b003 add sp, #12 -1001390a: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001390e: f7fd bbb4 b.w 1001107a -10013912: b003 add sp, #12 -10013914: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -10013918 : -10013918: 6f42 ldr r2, [r0, #116] ; 0x74 -1001391a: b410 push {r4} -1001391c: b18a cbz r2, 10013942 -1001391e: 4611 mov r1, r2 -10013920: 680b ldr r3, [r1, #0] -10013922: b963 cbnz r3, 1001393e -10013924: 6f04 ldr r4, [r0, #112] ; 0x70 -10013926: 600c str r4, [r1, #0] -10013928: 6702 str r2, [r0, #112] ; 0x70 -1001392a: f890 204a ldrb.w r2, [r0, #74] ; 0x4a -1001392e: 6743 str r3, [r0, #116] ; 0x74 -10013930: 3201 adds r2, #1 -10013932: f880 204a strb.w r2, [r0, #74] ; 0x4a -10013936: 63c3 str r3, [r0, #60] ; 0x3c -10013938: bc10 pop {r4} -1001393a: f7ff be5f b.w 100135fc -1001393e: 4619 mov r1, r3 -10013940: e7ee b.n 10013920 -10013942: bc10 pop {r4} -10013944: 4770 bx lr - -10013946 : -10013946: b5f8 push {r3, r4, r5, r6, r7, lr} -10013948: 6f45 ldr r5, [r0, #116] ; 0x74 -1001394a: 4604 mov r4, r0 -1001394c: b19d cbz r5, 10013976 -1001394e: 682b ldr r3, [r5, #0] -10013950: f100 0670 add.w r6, r0, #112 ; 0x70 -10013954: 6743 str r3, [r0, #116] ; 0x74 -10013956: 6833 ldr r3, [r6, #0] -10013958: b973 cbnz r3, 10013978 -1001395a: 6833 ldr r3, [r6, #0] -1001395c: 602b str r3, [r5, #0] -1001395e: 6035 str r5, [r6, #0] -10013960: 682b ldr r3, [r5, #0] -10013962: b90b cbnz r3, 10013968 -10013964: f8a4 306e strh.w r3, [r4, #110] ; 0x6e -10013968: f894 304a ldrb.w r3, [r4, #74] ; 0x4a -1001396c: 3301 adds r3, #1 -1001396e: f884 304a strb.w r3, [r4, #74] ; 0x4a -10013972: 2300 movs r3, #0 -10013974: 63e3 str r3, [r4, #60] ; 0x3c -10013976: bdf8 pop {r3, r4, r5, r6, r7, pc} -10013978: 691b ldr r3, [r3, #16] -1001397a: 6858 ldr r0, [r3, #4] -1001397c: f7fb ffc8 bl 1000f910 -10013980: 692b ldr r3, [r5, #16] -10013982: 4607 mov r7, r0 -10013984: 6858 ldr r0, [r3, #4] -10013986: f7fb ffc3 bl 1000f910 -1001398a: 1a38 subs r0, r7, r0 -1001398c: 2800 cmp r0, #0 -1001398e: dae4 bge.n 1001395a -10013990: 6836 ldr r6, [r6, #0] -10013992: e7e0 b.n 10013956 - -10013994 : -10013994: 6f43 ldr r3, [r0, #116] ; 0x74 -10013996: b510 push {r4, lr} -10013998: 4604 mov r4, r0 -1001399a: b32b cbz r3, 100139e8 -1001399c: f890 3022 ldrb.w r3, [r0, #34] ; 0x22 -100139a0: 075b lsls r3, r3, #29 -100139a2: d421 bmi.n 100139e8 -100139a4: f7ff ffcf bl 10013946 -100139a8: f8b4 3050 ldrh.w r3, [r4, #80] ; 0x50 -100139ac: f8b4 2064 ldrh.w r2, [r4, #100] ; 0x64 -100139b0: 4293 cmp r3, r2 -100139b2: bf8b itete hi -100139b4: 0852 lsrhi r2, r2, #1 -100139b6: 085b lsrls r3, r3, #1 -100139b8: f8a4 2052 strhhi.w r2, [r4, #82] ; 0x52 -100139bc: f8a4 3052 strhls.w r3, [r4, #82] ; 0x52 -100139c0: 8f63 ldrh r3, [r4, #58] ; 0x3a -100139c2: f8b4 1052 ldrh.w r1, [r4, #82] ; 0x52 -100139c6: 005a lsls r2, r3, #1 -100139c8: 4291 cmp r1, r2 -100139ca: bfb8 it lt -100139cc: f8a4 2052 strhlt.w r2, [r4, #82] ; 0x52 -100139d0: 4413 add r3, r2 -100139d2: f8b4 2052 ldrh.w r2, [r4, #82] ; 0x52 -100139d6: 4413 add r3, r2 -100139d8: f8a4 3050 strh.w r3, [r4, #80] ; 0x50 -100139dc: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -100139e0: f043 0304 orr.w r3, r3, #4 -100139e4: f884 3022 strb.w r3, [r4, #34] ; 0x22 -100139e8: bd10 pop {r4, pc} - -100139ea : -100139ea: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -100139ec: 4604 mov r4, r0 -100139ee: 6d40 ldr r0, [r0, #84] ; 0x54 -100139f0: 3801 subs r0, #1 -100139f2: f7fb ff8b bl 1000f90c -100139f6: 2100 movs r1, #0 -100139f8: 4602 mov r2, r0 -100139fa: 4620 mov r0, r4 -100139fc: f7ff fb82 bl 10013104 -10013a00: 4605 mov r5, r0 -10013a02: b1c8 cbz r0, 10013a38 -10013a04: 8903 ldrh r3, [r0, #8] -10013a06: 1d26 adds r6, r4, #4 -10013a08: 6847 ldr r7, [r0, #4] -10013a0a: 4632 mov r2, r6 -10013a0c: 9300 str r3, [sp, #0] -10013a0e: 4621 mov r1, r4 -10013a10: 2306 movs r3, #6 -10013a12: f7fb f9e9 bl 1000ede8 -10013a16: 2100 movs r1, #0 -10013a18: 2206 movs r2, #6 -10013a1a: 8238 strh r0, [r7, #16] -10013a1c: 7aa3 ldrb r3, [r4, #10] -10013a1e: e88d 0006 stmia.w sp, {r1, r2} -10013a22: 4628 mov r0, r5 -10013a24: 4632 mov r2, r6 -10013a26: 4621 mov r1, r4 -10013a28: f7fb fbff bl 1000f22a -10013a2c: 4628 mov r0, r5 -10013a2e: b003 add sp, #12 -10013a30: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} -10013a34: f7fd bb21 b.w 1001107a -10013a38: b003 add sp, #12 -10013a3a: bdf0 pop {r4, r5, r6, r7, pc} - -10013a3c : -10013a3c: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -10013a40: 6f45 ldr r5, [r0, #116] ; 0x74 -10013a42: 4606 mov r6, r0 -10013a44: b915 cbnz r5, 10013a4c -10013a46: 6f05 ldr r5, [r0, #112] ; 0x70 -10013a48: 2d00 cmp r5, #0 -10013a4a: d047 beq.n 10013adc -10013a4c: 692b ldr r3, [r5, #16] -10013a4e: 8998 ldrh r0, [r3, #12] -10013a50: f7fb ff59 bl 1000f906 -10013a54: f010 0401 ands.w r4, r0, #1 -10013a58: bf18 it ne -10013a5a: 892c ldrhne r4, [r5, #8] -10013a5c: 692b ldr r3, [r5, #16] -10013a5e: bf1c itt ne -10013a60: fab4 f484 clzne r4, r4 -10013a64: 0964 lsrne r4, r4, #5 -10013a66: 685a ldr r2, [r3, #4] -10013a68: f084 0101 eor.w r1, r4, #1 -10013a6c: 4630 mov r0, r6 -10013a6e: f7ff fb49 bl 10013104 -10013a72: 4607 mov r7, r0 -10013a74: b390 cbz r0, 10013adc -10013a76: f8d0 8004 ldr.w r8, [r0, #4] -10013a7a: b324 cbz r4, 10013ac6 -10013a7c: 2011 movs r0, #17 -10013a7e: f9b8 400c ldrsh.w r4, [r8, #12] -10013a82: f7fb ff3d bl 1000f900 -10013a86: f424 547c bic.w r4, r4, #16128 ; 0x3f00 -10013a8a: 4320 orrs r0, r4 -10013a8c: f8a8 000c strh.w r0, [r8, #12] -10013a90: 893b ldrh r3, [r7, #8] -10013a92: 1d34 adds r4, r6, #4 -10013a94: 9300 str r3, [sp, #0] -10013a96: 4622 mov r2, r4 -10013a98: 4631 mov r1, r6 -10013a9a: 2306 movs r3, #6 -10013a9c: 4638 mov r0, r7 -10013a9e: f7fb f9a3 bl 1000ede8 -10013aa2: 2100 movs r1, #0 -10013aa4: 2206 movs r2, #6 -10013aa6: f8a8 0010 strh.w r0, [r8, #16] -10013aaa: 7ab3 ldrb r3, [r6, #10] -10013aac: e88d 0006 stmia.w sp, {r1, r2} -10013ab0: 4638 mov r0, r7 -10013ab2: 4622 mov r2, r4 -10013ab4: 4631 mov r1, r6 -10013ab6: f7fb fbb8 bl 1000f22a -10013aba: 4638 mov r0, r7 -10013abc: b002 add sp, #8 -10013abe: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -10013ac2: f7fd bada b.w 1001107a -10013ac6: 6868 ldr r0, [r5, #4] -10013ac8: 892a ldrh r2, [r5, #8] -10013aca: 8903 ldrh r3, [r0, #8] -10013acc: f108 0114 add.w r1, r8, #20 -10013ad0: 1a9b subs r3, r3, r2 -10013ad2: b29b uxth r3, r3 -10013ad4: 2201 movs r2, #1 -10013ad6: f7fd fc15 bl 10011304 -10013ada: e7d9 b.n 10013a90 -10013adc: b002 add sp, #8 -10013ade: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - ... - -10013ae4 : -10013ae4: b508 push {r3, lr} -10013ae6: 4b04 ldr r3, [pc, #16] ; (10013af8 ) -10013ae8: 4798 blx r3 -10013aea: ea6f 4080 mvn.w r0, r0, lsl #18 -10013aee: ea6f 4090 mvn.w r0, r0, lsr #18 -10013af2: 4b02 ldr r3, [pc, #8] ; (10013afc ) -10013af4: 8018 strh r0, [r3, #0] -10013af6: bd08 pop {r3, pc} -10013af8: 0000f585 .word 0x0000f585 -10013afc: 10044e66 .word 0x10044e66 - -10013b00 : -10013b00: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10013b04: f8d0 a004 ldr.w sl, [r0, #4] -10013b08: 468b mov fp, r1 -10013b0a: f89a 1000 ldrb.w r1, [sl] -10013b0e: 8903 ldrh r3, [r0, #8] -10013b10: f001 010f and.w r1, r1, #15 -10013b14: 1c8a adds r2, r1, #2 -10013b16: ebb3 0f82 cmp.w r3, r2, lsl #2 -10013b1a: b085 sub sp, #20 -10013b1c: 4605 mov r5, r0 -10013b1e: db05 blt.n 10013b2c -10013b20: 0089 lsls r1, r1, #2 -10013b22: 4249 negs r1, r1 -10013b24: f7fd fa7e bl 10011024 -10013b28: 4606 mov r6, r0 -10013b2a: b128 cbz r0, 10013b38 -10013b2c: 4628 mov r0, r5 -10013b2e: b005 add sp, #20 -10013b30: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10013b34: f7fd baa1 b.w 1001107a -10013b38: 4c52 ldr r4, [pc, #328] ; (10013c84 ) -10013b3a: 4659 mov r1, fp -10013b3c: 6820 ldr r0, [r4, #0] -10013b3e: 686f ldr r7, [r5, #4] -10013b40: f7fb fb8f bl 1000f262 -10013b44: 4680 mov r8, r0 -10013b46: 8838 ldrh r0, [r7, #0] -10013b48: f7fb fedd bl 1000f906 -10013b4c: 4681 mov r9, r0 -10013b4e: 8878 ldrh r0, [r7, #2] -10013b50: f7fb fed9 bl 1000f906 -10013b54: 2844 cmp r0, #68 ; 0x44 -10013b56: d131 bne.n 10013bbc -10013b58: f1b9 0f43 cmp.w r9, #67 ; 0x43 -10013b5c: d13d bne.n 10013bda -10013b5e: f8db 3020 ldr.w r3, [fp, #32] -10013b62: 2b00 cmp r3, #0 -10013b64: d039 beq.n 10013bda -10013b66: 685c ldr r4, [r3, #4] -10013b68: 2c00 cmp r4, #0 -10013b6a: d036 beq.n 10013bda -10013b6c: 6863 ldr r3, [r4, #4] -10013b6e: b11b cbz r3, 10013b78 -10013b70: 4a45 ldr r2, [pc, #276] ; (10013c88 ) -10013b72: 6812 ldr r2, [r2, #0] -10013b74: 4293 cmp r3, r2 -10013b76: d130 bne.n 10013bda -10013b78: 88fb ldrh r3, [r7, #6] -10013b7a: b14b cbz r3, 10013b90 -10013b7c: 892b ldrh r3, [r5, #8] -10013b7e: 4a41 ldr r2, [pc, #260] ; (10013c84 ) -10013b80: 9300 str r3, [sp, #0] -10013b82: 4941 ldr r1, [pc, #260] ; (10013c88 ) -10013b84: 2311 movs r3, #17 -10013b86: 4628 mov r0, r5 -10013b88: f7fb f92e bl 1000ede8 -10013b8c: 2800 cmp r0, #0 -10013b8e: d1cd bne.n 10013b2c -10013b90: f06f 0107 mvn.w r1, #7 -10013b94: 4628 mov r0, r5 -10013b96: f7fd fa45 bl 10011024 -10013b9a: 2800 cmp r0, #0 -10013b9c: d1c6 bne.n 10013b2c -10013b9e: 2c00 cmp r4, #0 -10013ba0: d056 beq.n 10013c50 -10013ba2: 69e6 ldr r6, [r4, #28] -10013ba4: 2e00 cmp r6, #0 -10013ba6: d0c1 beq.n 10013b2c -10013ba8: f8cd 9000 str.w r9, [sp] -10013bac: 4b36 ldr r3, [pc, #216] ; (10013c88 ) -10013bae: 462a mov r2, r5 -10013bb0: 4621 mov r1, r4 -10013bb2: 6a20 ldr r0, [r4, #32] -10013bb4: 47b0 blx r6 -10013bb6: b005 add sp, #20 -10013bb8: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10013bbc: 4b33 ldr r3, [pc, #204] ; (10013c8c ) -10013bbe: f8d4 e000 ldr.w lr, [r4] -10013bc2: 681b ldr r3, [r3, #0] -10013bc4: f00e 0cf0 and.w ip, lr, #240 ; 0xf0 -10013bc8: 9302 str r3, [sp, #8] -10013bca: 4b2f ldr r3, [pc, #188] ; (10013c88 ) -10013bcc: 9c02 ldr r4, [sp, #8] -10013bce: 681b ldr r3, [r3, #0] -10013bd0: 9303 str r3, [sp, #12] -10013bd2: 4633 mov r3, r6 -10013bd4: b94c cbnz r4, 10013bea -10013bd6: 2b00 cmp r3, #0 -10013bd8: d138 bne.n 10013c4c -10013bda: 4b2a ldr r3, [pc, #168] ; (10013c84 ) -10013bdc: f8db 2004 ldr.w r2, [fp, #4] -10013be0: 681b ldr r3, [r3, #0] -10013be2: 429a cmp r2, r3 -10013be4: d1a2 bne.n 10013b2c -10013be6: 2400 movs r4, #0 -10013be8: e7c6 b.n 10013b78 -10013bea: 8a62 ldrh r2, [r4, #18] -10013bec: 4282 cmp r2, r0 -10013bee: d12a bne.n 10013c46 -10013bf0: 6822 ldr r2, [r4, #0] -10013bf2: f1b8 0f00 cmp.w r8, #0 -10013bf6: d100 bne.n 10013bfa -10013bf8: b172 cbz r2, 10013c18 -10013bfa: 4572 cmp r2, lr -10013bfc: d00c beq.n 10013c18 -10013bfe: f1bc 0fe0 cmp.w ip, #224 ; 0xe0 -10013c02: d009 beq.n 10013c18 -10013c04: f1b8 0f00 cmp.w r8, #0 -10013c08: d01d beq.n 10013c46 -10013c0a: b12a cbz r2, 10013c18 -10013c0c: f8db 1008 ldr.w r1, [fp, #8] -10013c10: ea82 020e eor.w r2, r2, lr -10013c14: 420a tst r2, r1 -10013c16: d116 bne.n 10013c46 -10013c18: b923 cbnz r3, 10013c24 -10013c1a: 7c22 ldrb r2, [r4, #16] -10013c1c: f012 0f04 tst.w r2, #4 -10013c20: bf08 it eq -10013c22: 4623 moveq r3, r4 -10013c24: 8aa2 ldrh r2, [r4, #20] -10013c26: 454a cmp r2, r9 -10013c28: d10d bne.n 10013c46 -10013c2a: 6862 ldr r2, [r4, #4] -10013c2c: b942 cbnz r2, 10013c40 -10013c2e: 2e00 cmp r6, #0 -10013c30: d0a2 beq.n 10013b78 -10013c32: 68e3 ldr r3, [r4, #12] -10013c34: 60f3 str r3, [r6, #12] -10013c36: 9b02 ldr r3, [sp, #8] -10013c38: 60e3 str r3, [r4, #12] -10013c3a: 4b14 ldr r3, [pc, #80] ; (10013c8c ) -10013c3c: 601c str r4, [r3, #0] -10013c3e: e79b b.n 10013b78 -10013c40: 9903 ldr r1, [sp, #12] -10013c42: 428a cmp r2, r1 -10013c44: d0f3 beq.n 10013c2e -10013c46: 4626 mov r6, r4 -10013c48: 68e4 ldr r4, [r4, #12] -10013c4a: e7c3 b.n 10013bd4 -10013c4c: 461c mov r4, r3 -10013c4e: e793 b.n 10013b78 -10013c50: f1b8 0f00 cmp.w r8, #0 -10013c54: f47f af6a bne.w 10013b2c -10013c58: 4b0a ldr r3, [pc, #40] ; (10013c84 ) -10013c5a: 681b ldr r3, [r3, #0] -10013c5c: f003 03f0 and.w r3, r3, #240 ; 0xf0 -10013c60: 2be0 cmp r3, #224 ; 0xe0 -10013c62: f43f af63 beq.w 10013b2c -10013c66: f89a 1000 ldrb.w r1, [sl] -10013c6a: 4628 mov r0, r5 -10013c6c: f001 010f and.w r1, r1, #15 -10013c70: 3102 adds r1, #2 -10013c72: 0089 lsls r1, r1, #2 -10013c74: f7fd f9d6 bl 10011024 -10013c78: 2103 movs r1, #3 -10013c7a: 4628 mov r0, r5 -10013c7c: f7fa ff24 bl 1000eac8 -10013c80: e754 b.n 10013b2c -10013c82: bf00 nop -10013c84: 1004aa30 .word 0x1004aa30 -10013c88: 1004aa34 .word 0x1004aa34 -10013c8c: 1004b15c .word 0x1004b15c - -10013c90 : -10013c90: b5f0 push {r4, r5, r6, r7, lr} -10013c92: 4e26 ldr r6, [pc, #152] ; (10013d2c ) -10013c94: 2400 movs r4, #0 -10013c96: 6837 ldr r7, [r6, #0] -10013c98: 463b mov r3, r7 -10013c9a: b9db cbnz r3, 10013cd4 -10013c9c: b101 cbz r1, 10013ca0 -10013c9e: 6809 ldr r1, [r1, #0] -10013ca0: 6001 str r1, [r0, #0] -10013ca2: b98a cbnz r2, 10013cc8 -10013ca4: f44f 4580 mov.w r5, #16384 ; 0x4000 -10013ca8: f64f 7cff movw ip, #65535 ; 0xffff -10013cac: 4920 ldr r1, [pc, #128] ; (10013d30 ) -10013cae: 880b ldrh r3, [r1, #0] -10013cb0: 4563 cmp r3, ip -10013cb2: bf08 it eq -10013cb4: f44f 4240 moveq.w r2, #49152 ; 0xc000 -10013cb8: 46be mov lr, r7 -10013cba: bf1c itt ne -10013cbc: 1c5a addne r2, r3, #1 -10013cbe: b292 uxthne r2, r2 -10013cc0: f1be 0f00 cmp.w lr, #0 -10013cc4: d125 bne.n 10013d12 -10013cc6: 800a strh r2, [r1, #0] -10013cc8: 8242 strh r2, [r0, #18] -10013cca: b90c cbnz r4, 10013cd0 -10013ccc: 60c7 str r7, [r0, #12] -10013cce: 6030 str r0, [r6, #0] -10013cd0: 2000 movs r0, #0 -10013cd2: bdf0 pop {r4, r5, r6, r7, pc} -10013cd4: 4283 cmp r3, r0 -10013cd6: d01a beq.n 10013d0e -10013cd8: 7a05 ldrb r5, [r0, #8] -10013cda: 076d lsls r5, r5, #29 -10013cdc: d415 bmi.n 10013d0a -10013cde: 7a1d ldrb r5, [r3, #8] -10013ce0: 076d lsls r5, r5, #29 -10013ce2: d412 bmi.n 10013d0a -10013ce4: 8a5d ldrh r5, [r3, #18] -10013ce6: 4295 cmp r5, r2 -10013ce8: d10f bne.n 10013d0a -10013cea: b913 cbnz r3, 10013cf2 -10013cec: f06f 0007 mvn.w r0, #7 -10013cf0: bdf0 pop {r4, r5, r6, r7, pc} -10013cf2: f8d3 e000 ldr.w lr, [r3] -10013cf6: f1be 0f00 cmp.w lr, #0 -10013cfa: d0f7 beq.n 10013cec -10013cfc: 2900 cmp r1, #0 -10013cfe: d0f5 beq.n 10013cec -10013d00: 680d ldr r5, [r1, #0] -10013d02: 2d00 cmp r5, #0 -10013d04: d0f2 beq.n 10013cec -10013d06: 45ae cmp lr, r5 -10013d08: d0f0 beq.n 10013cec -10013d0a: 68db ldr r3, [r3, #12] -10013d0c: e7c5 b.n 10013c9a -10013d0e: 2401 movs r4, #1 -10013d10: e7fb b.n 10013d0a -10013d12: f8be 3012 ldrh.w r3, [lr, #18] -10013d16: 4293 cmp r3, r2 -10013d18: d105 bne.n 10013d26 -10013d1a: 3d01 subs r5, #1 -10013d1c: b2ad uxth r5, r5 -10013d1e: 2d00 cmp r5, #0 -10013d20: d1c6 bne.n 10013cb0 -10013d22: 800a strh r2, [r1, #0] -10013d24: e7e2 b.n 10013cec -10013d26: f8de e00c ldr.w lr, [lr, #12] -10013d2a: e7c9 b.n 10013cc0 -10013d2c: 1004b15c .word 0x1004b15c -10013d30: 10044e66 .word 0x10044e66 - -10013d34 : -10013d34: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} -10013d38: 4691 mov r9, r2 -10013d3a: 8a42 ldrh r2, [r0, #18] -10013d3c: 4605 mov r5, r0 -10013d3e: 460f mov r7, r1 -10013d40: 4698 mov r8, r3 -10013d42: f8dd a030 ldr.w sl, [sp, #48] ; 0x30 -10013d46: 2a00 cmp r2, #0 -10013d48: d04c beq.n 10013de4 -10013d4a: 2108 movs r1, #8 -10013d4c: 4638 mov r0, r7 -10013d4e: f7fd f969 bl 10011024 -10013d52: 2800 cmp r0, #0 -10013d54: d150 bne.n 10013df8 -10013d56: 463c mov r4, r7 -10013d58: 8a68 ldrh r0, [r5, #18] -10013d5a: 6866 ldr r6, [r4, #4] -10013d5c: f7fb fdd0 bl 1000f900 -10013d60: 8030 strh r0, [r6, #0] -10013d62: 4640 mov r0, r8 -10013d64: f7fb fdcc bl 1000f900 -10013d68: 2300 movs r3, #0 -10013d6a: 71b3 strb r3, [r6, #6] -10013d6c: 71f3 strb r3, [r6, #7] -10013d6e: f8d9 3000 ldr.w r3, [r9] -10013d72: 8070 strh r0, [r6, #2] -10013d74: f003 03f0 and.w r3, r3, #240 ; 0xf0 -10013d78: 2be0 cmp r3, #224 ; 0xe0 -10013d7a: d106 bne.n 10013d8a -10013d7c: 7c2b ldrb r3, [r5, #16] -10013d7e: 071a lsls r2, r3, #28 -10013d80: bf42 ittt mi -10013d82: 7b63 ldrbmi r3, [r4, #13] -10013d84: f043 0304 orrmi.w r3, r3, #4 -10013d88: 7363 strbmi r3, [r4, #13] -10013d8a: 682b ldr r3, [r5, #0] -10013d8c: 2b00 cmp r3, #0 -10013d8e: d141 bne.n 10013e14 -10013d90: f10a 0804 add.w r8, sl, #4 -10013d94: 8920 ldrh r0, [r4, #8] -10013d96: f7fb fdb3 bl 1000f900 -10013d9a: 80b0 strh r0, [r6, #4] -10013d9c: 7c2b ldrb r3, [r5, #16] -10013d9e: 07db lsls r3, r3, #31 -10013da0: d40d bmi.n 10013dbe -10013da2: 8923 ldrh r3, [r4, #8] -10013da4: 464a mov r2, r9 -10013da6: 9300 str r3, [sp, #0] -10013da8: 4641 mov r1, r8 -10013daa: 2311 movs r3, #17 -10013dac: 4620 mov r0, r4 -10013dae: f7fb f81b bl 1000ede8 -10013db2: f64f 73ff movw r3, #65535 ; 0xffff -10013db6: 2800 cmp r0, #0 -10013db8: bf08 it eq -10013dba: 4618 moveq r0, r3 -10013dbc: 80f0 strh r0, [r6, #6] -10013dbe: 2211 movs r2, #17 -10013dc0: 9201 str r2, [sp, #4] -10013dc2: 7a6a ldrb r2, [r5, #9] -10013dc4: 7aab ldrb r3, [r5, #10] -10013dc6: 9200 str r2, [sp, #0] -10013dc8: f8cd a008 str.w sl, [sp, #8] -10013dcc: 464a mov r2, r9 -10013dce: 4641 mov r1, r8 -10013dd0: 4620 mov r0, r4 -10013dd2: f7fb fa19 bl 1000f208 -10013dd6: 42bc cmp r4, r7 -10013dd8: 4606 mov r6, r0 -10013dda: d009 beq.n 10013df0 -10013ddc: 4620 mov r0, r4 -10013dde: f7fd f94c bl 1001107a -10013de2: e005 b.n 10013df0 -10013de4: 4601 mov r1, r0 -10013de6: f7ff ff53 bl 10013c90 -10013dea: 4606 mov r6, r0 -10013dec: 2800 cmp r0, #0 -10013dee: d0ac beq.n 10013d4a -10013df0: 4630 mov r0, r6 -10013df2: b004 add sp, #16 -10013df4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10013df8: 2200 movs r2, #0 -10013dfa: 2108 movs r1, #8 -10013dfc: 2001 movs r0, #1 -10013dfe: f7fd f95f bl 100110c0 -10013e02: 4604 mov r4, r0 -10013e04: b1a0 cbz r0, 10013e30 -10013e06: 893b ldrh r3, [r7, #8] -10013e08: 2b00 cmp r3, #0 -10013e0a: d0a5 beq.n 10013d58 -10013e0c: 4639 mov r1, r7 -10013e0e: f7fd fa23 bl 10011258 -10013e12: e7a1 b.n 10013d58 -10013e14: f8da 2004 ldr.w r2, [sl, #4] -10013e18: 4293 cmp r3, r2 -10013e1a: d007 beq.n 10013e2c -10013e1c: 42bc cmp r4, r7 -10013e1e: d002 beq.n 10013e26 -10013e20: 4620 mov r0, r4 -10013e22: f7fd f92a bl 1001107a -10013e26: f06f 0605 mvn.w r6, #5 -10013e2a: e7e1 b.n 10013df0 -10013e2c: 46a8 mov r8, r5 -10013e2e: e7b1 b.n 10013d94 -10013e30: f04f 36ff mov.w r6, #4294967295 -10013e34: e7dc b.n 10013df0 - -10013e36 : -10013e36: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -10013e38: 4614 mov r4, r2 -10013e3a: 6812 ldr r2, [r2, #0] -10013e3c: 4605 mov r5, r0 -10013e3e: f002 02f0 and.w r2, r2, #240 ; 0xf0 -10013e42: 2ae0 cmp r2, #224 ; 0xe0 -10013e44: bf0c ite eq -10013e46: 3018 addeq r0, #24 -10013e48: 4620 movne r0, r4 -10013e4a: 460e mov r6, r1 -10013e4c: 461f mov r7, r3 -10013e4e: f7fb f837 bl 1000eec0 -10013e52: b140 cbz r0, 10013e66 -10013e54: 9000 str r0, [sp, #0] -10013e56: 463b mov r3, r7 -10013e58: 4622 mov r2, r4 -10013e5a: 4631 mov r1, r6 -10013e5c: 4628 mov r0, r5 -10013e5e: f7ff ff69 bl 10013d34 -10013e62: b003 add sp, #12 -10013e64: bdf0 pop {r4, r5, r6, r7, pc} -10013e66: f06f 0003 mvn.w r0, #3 -10013e6a: e7fa b.n 10013e62 - -10013e6c : -10013e6c: b570 push {r4, r5, r6, lr} -10013e6e: 4616 mov r6, r2 -10013e70: 8a42 ldrh r2, [r0, #18] -10013e72: 4604 mov r4, r0 -10013e74: 460d mov r5, r1 -10013e76: b16a cbz r2, 10013e94 -10013e78: b995 cbnz r5, 10013ea0 -10013e7a: 7c23 ldrb r3, [r4, #16] -10013e7c: 6065 str r5, [r4, #4] -10013e7e: f043 0304 orr.w r3, r3, #4 -10013e82: 7423 strb r3, [r4, #16] -10013e84: 4b0a ldr r3, [pc, #40] ; (10013eb0 ) -10013e86: 82a6 strh r6, [r4, #20] -10013e88: 681a ldr r2, [r3, #0] -10013e8a: 4610 mov r0, r2 -10013e8c: b950 cbnz r0, 10013ea4 -10013e8e: 60e2 str r2, [r4, #12] -10013e90: 601c str r4, [r3, #0] -10013e92: bd70 pop {r4, r5, r6, pc} -10013e94: 4601 mov r1, r0 -10013e96: f7ff fefb bl 10013c90 -10013e9a: 2800 cmp r0, #0 -10013e9c: d0ec beq.n 10013e78 -10013e9e: bd70 pop {r4, r5, r6, pc} -10013ea0: 682d ldr r5, [r5, #0] -10013ea2: e7ea b.n 10013e7a -10013ea4: 42a0 cmp r0, r4 -10013ea6: d001 beq.n 10013eac -10013ea8: 68c0 ldr r0, [r0, #12] -10013eaa: e7ef b.n 10013e8c -10013eac: 2000 movs r0, #0 -10013eae: bd70 pop {r4, r5, r6, pc} -10013eb0: 1004b15c .word 0x1004b15c - -10013eb4 : -10013eb4: 2300 movs r3, #0 -10013eb6: 6043 str r3, [r0, #4] -10013eb8: 8283 strh r3, [r0, #20] -10013eba: 7c03 ldrb r3, [r0, #16] -10013ebc: f023 0304 bic.w r3, r3, #4 -10013ec0: 7403 strb r3, [r0, #16] -10013ec2: 4770 bx lr - -10013ec4 : -10013ec4: 61c1 str r1, [r0, #28] -10013ec6: 6202 str r2, [r0, #32] -10013ec8: 4770 bx lr - ... - -10013ecc : -10013ecc: 4a08 ldr r2, [pc, #32] ; (10013ef0 ) -10013ece: 6813 ldr r3, [r2, #0] -10013ed0: 4283 cmp r3, r0 -10013ed2: d10a bne.n 10013eea -10013ed4: 68c3 ldr r3, [r0, #12] -10013ed6: 6013 str r3, [r2, #0] -10013ed8: f001 b9c4 b.w 10015264 -10013edc: 68da ldr r2, [r3, #12] -10013ede: b11a cbz r2, 10013ee8 -10013ee0: 4290 cmp r0, r2 -10013ee2: bf04 itt eq -10013ee4: 68c2 ldreq r2, [r0, #12] -10013ee6: 60da streq r2, [r3, #12] -10013ee8: 68db ldr r3, [r3, #12] -10013eea: 2b00 cmp r3, #0 -10013eec: d1f6 bne.n 10013edc -10013eee: e7f3 b.n 10013ed8 -10013ef0: 1004b15c .word 0x1004b15c - -10013ef4 : -10013ef4: 4b07 ldr r3, [pc, #28] ; (10013f14 ) -10013ef6: b510 push {r4, lr} -10013ef8: 8858 ldrh r0, [r3, #2] -10013efa: f001 f917 bl 1001512c -10013efe: 4604 mov r4, r0 -10013f00: b128 cbz r0, 10013f0e -10013f02: 2224 movs r2, #36 ; 0x24 -10013f04: 2100 movs r1, #0 -10013f06: f006 fe57 bl 1001abb8 -10013f0a: 23ff movs r3, #255 ; 0xff -10013f0c: 72a3 strb r3, [r4, #10] -10013f0e: 4620 mov r0, r4 -10013f10: bd10 pop {r4, pc} -10013f12: bf00 nop -10013f14: 10040088 .word 0x10040088 - -10013f18 : -10013f18: b570 push {r4, r5, r6, lr} -10013f1a: 2614 movs r6, #20 -10013f1c: 4346 muls r6, r0 -10013f1e: 4d09 ldr r5, [pc, #36] ; (10013f44 ) -10013f20: 4604 mov r4, r0 -10013f22: 59a8 ldr r0, [r5, r6] -10013f24: b118 cbz r0, 10013f2e -10013f26: f7fd f8a8 bl 1001107a -10013f2a: 2300 movs r3, #0 -10013f2c: 51ab str r3, [r5, r6] -10013f2e: 2014 movs r0, #20 -10013f30: 2300 movs r3, #0 -10013f32: fb00 5004 mla r0, r0, r4, r5 -10013f36: 7483 strb r3, [r0, #18] -10013f38: 74c3 strb r3, [r0, #19] -10013f3a: 6083 str r3, [r0, #8] -10013f3c: 6043 str r3, [r0, #4] -10013f3e: 60c3 str r3, [r0, #12] -10013f40: 8203 strh r3, [r0, #16] -10013f42: bd70 pop {r4, r5, r6, pc} -10013f44: 1004b160 .word 0x1004b160 - -10013f48 : -10013f48: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10013f4c: 220a movs r2, #10 -10013f4e: 4605 mov r5, r0 -10013f50: 2000 movs r0, #0 -10013f52: 4b30 ldr r3, [pc, #192] ; (10014014 ) -10013f54: 4681 mov r9, r0 -10013f56: 4684 mov ip, r0 -10013f58: 4683 mov fp, r0 -10013f5a: 4614 mov r4, r2 -10013f5c: 4696 mov lr, r2 -10013f5e: 4616 mov r6, r2 -10013f60: 4698 mov r8, r3 -10013f62: 9101 str r1, [sp, #4] -10013f64: 2c0a cmp r4, #10 -10013f66: 7c9f ldrb r7, [r3, #18] -10013f68: d110 bne.n 10013f8c -10013f6a: b98f cbnz r7, 10013f90 -10013f6c: b244 sxtb r4, r0 -10013f6e: 3001 adds r0, #1 -10013f70: 280a cmp r0, #10 -10013f72: f103 0314 add.w r3, r3, #20 -10013f76: d1f5 bne.n 10013f64 -10013f78: 9b01 ldr r3, [sp, #4] -10013f7a: 0799 lsls r1, r3, #30 -10013f7c: d403 bmi.n 10013f86 -10013f7e: 2c0a cmp r4, #10 -10013f80: d11b bne.n 10013fba -10013f82: 07db lsls r3, r3, #31 -10013f84: d428 bmi.n 10013fd8 -10013f86: f04f 30ff mov.w r0, #4294967295 -10013f8a: e008 b.n 10013f9e -10013f8c: 2f00 cmp r7, #0 -10013f8e: d0ee beq.n 10013f6e -10013f90: b39d cbz r5, 10013ffa -10013f92: 6829 ldr r1, [r5, #0] -10013f94: 468a mov sl, r1 -10013f96: 6859 ldr r1, [r3, #4] -10013f98: 458a cmp sl, r1 -10013f9a: d12e bne.n 10013ffa -10013f9c: b240 sxtb r0, r0 -10013f9e: b003 add sp, #12 -10013fa0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10013fa4: 45da cmp sl, fp -10013fa6: d3e2 bcc.n 10013f6e -10013fa8: b246 sxtb r6, r0 -10013faa: 46d3 mov fp, sl -10013fac: e7df b.n 10013f6e -10013fae: 45e2 cmp sl, ip -10013fb0: bf24 itt cs -10013fb2: fa4f fe80 sxtbcs.w lr, r0 -10013fb6: 46d4 movcs ip, sl -10013fb8: e7d9 b.n 10013f6e -10013fba: b2e4 uxtb r4, r4 -10013fbc: b125 cbz r5, 10013fc8 -10013fbe: 2314 movs r3, #20 -10013fc0: fb03 8304 mla r3, r3, r4, r8 -10013fc4: 682a ldr r2, [r5, #0] -10013fc6: 605a str r2, [r3, #4] -10013fc8: 2314 movs r3, #20 -10013fca: fb03 8804 mla r8, r3, r4, r8 -10013fce: 2300 movs r3, #0 -10013fd0: b260 sxtb r0, r4 -10013fd2: f888 3013 strb.w r3, [r8, #19] -10013fd6: e7e2 b.n 10013f9e -10013fd8: f1be 0f0a cmp.w lr, #10 -10013fdc: d005 beq.n 10013fea -10013fde: fa5f f48e uxtb.w r4, lr -10013fe2: 4620 mov r0, r4 -10013fe4: f7ff ff98 bl 10013f18 -10013fe8: e7e8 b.n 10013fbc -10013fea: 2e0a cmp r6, #10 -10013fec: d001 beq.n 10013ff2 -10013fee: b2f4 uxtb r4, r6 -10013ff0: e7f7 b.n 10013fe2 -10013ff2: 2a0a cmp r2, #10 -10013ff4: d0c7 beq.n 10013f86 -10013ff6: b2d4 uxtb r4, r2 -10013ff8: e7f3 b.n 10013fe2 -10013ffa: 2f01 cmp r7, #1 -10013ffc: f893 a013 ldrb.w sl, [r3, #19] -10014000: d1d5 bne.n 10013fae -10014002: 681f ldr r7, [r3, #0] -10014004: 2f00 cmp r7, #0 -10014006: d0cd beq.n 10013fa4 -10014008: 45ca cmp sl, r9 -1001400a: d3b0 bcc.n 10013f6e -1001400c: b242 sxtb r2, r0 -1001400e: 46d1 mov r9, sl -10014010: e7ad b.n 10013f6e -10014012: bf00 nop -10014014: 1004b160 .word 0x1004b160 - -10014018 : -10014018: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1001401c: 684c ldr r4, [r1, #4] -1001401e: 4605 mov r5, r0 -10014020: 460e mov r6, r1 -10014022: 4617 mov r7, r2 -10014024: 4619 mov r1, r3 -10014026: 2206 movs r2, #6 -10014028: 4620 mov r0, r4 -1001402a: f006 fdc1 bl 1001abb0 -1001402e: 2206 movs r2, #6 -10014030: 4639 mov r1, r7 -10014032: 18a0 adds r0, r4, r2 -10014034: f006 fdbc bl 1001abb0 -10014038: 2308 movs r3, #8 -1001403a: 7323 strb r3, [r4, #12] -1001403c: 2300 movs r3, #0 -1001403e: 4631 mov r1, r6 -10014040: 7363 strb r3, [r4, #13] -10014042: 4628 mov r0, r5 -10014044: 69ab ldr r3, [r5, #24] -10014046: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -1001404a: 4718 bx r3 - -1001404c : -1001404c: b570 push {r4, r5, r6, lr} -1001404e: 2500 movs r5, #0 -10014050: 2602 movs r6, #2 -10014052: 4c0d ldr r4, [pc, #52] ; (10014088 ) -10014054: 7ca2 ldrb r2, [r4, #18] -10014056: b162 cbz r2, 10014072 -10014058: 7ce3 ldrb r3, [r4, #19] -1001405a: 3301 adds r3, #1 -1001405c: b2db uxtb r3, r3 -1001405e: 2bef cmp r3, #239 ; 0xef -10014060: 74e3 strb r3, [r4, #19] -10014062: d803 bhi.n 1001406c -10014064: 2a01 cmp r2, #1 -10014066: d10a bne.n 1001407e -10014068: 2b01 cmp r3, #1 -1001406a: d902 bls.n 10014072 -1001406c: 4628 mov r0, r5 -1001406e: f7ff ff53 bl 10013f18 -10014072: 3501 adds r5, #1 -10014074: 2d0a cmp r5, #10 -10014076: f104 0414 add.w r4, r4, #20 -1001407a: d1eb bne.n 10014054 -1001407c: bd70 pop {r4, r5, r6, pc} -1001407e: 2a03 cmp r2, #3 -10014080: bf08 it eq -10014082: 74a6 strbeq r6, [r4, #18] -10014084: e7f5 b.n 10014072 -10014086: bf00 nop -10014088: 1004b160 .word 0x1004b160 - -1001408c : -1001408c: b570 push {r4, r5, r6, lr} -1001408e: 4606 mov r6, r0 -10014090: 2400 movs r4, #0 -10014092: 4d07 ldr r5, [pc, #28] ; (100140b0 ) -10014094: 7cab ldrb r3, [r5, #18] -10014096: b12b cbz r3, 100140a4 -10014098: 68ab ldr r3, [r5, #8] -1001409a: 42b3 cmp r3, r6 -1001409c: d102 bne.n 100140a4 -1001409e: 4620 mov r0, r4 -100140a0: f7ff ff3a bl 10013f18 -100140a4: 3401 adds r4, #1 -100140a6: 2c0a cmp r4, #10 -100140a8: f105 0514 add.w r5, r5, #20 -100140ac: d1f2 bne.n 10014094 -100140ae: bd70 pop {r4, r5, r6, pc} -100140b0: 1004b160 .word 0x1004b160 - -100140b4 : -100140b4: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -100140b8: 2200 movs r2, #0 -100140ba: 4606 mov r6, r0 -100140bc: 4688 mov r8, r1 -100140be: f100 072b add.w r7, r0, #43 ; 0x2b -100140c2: f100 0904 add.w r9, r0, #4 -100140c6: 212a movs r1, #42 ; 0x2a -100140c8: 2003 movs r0, #3 -100140ca: f7fc fff9 bl 100110c0 -100140ce: 4605 mov r5, r0 -100140d0: 2800 cmp r0, #0 -100140d2: d03e beq.n 10014152 -100140d4: 6844 ldr r4, [r0, #4] -100140d6: 2001 movs r0, #1 -100140d8: f7fb fc12 bl 1000f900 -100140dc: 2206 movs r2, #6 -100140de: 82a0 strh r0, [r4, #20] -100140e0: 4639 mov r1, r7 -100140e2: f104 0016 add.w r0, r4, #22 -100140e6: f006 fd63 bl 1001abb0 -100140ea: 2206 movs r2, #6 -100140ec: 491a ldr r1, [pc, #104] ; (10014158 ) -100140ee: f104 0020 add.w r0, r4, #32 -100140f2: f006 fd5d bl 1001abb0 -100140f6: 2206 movs r2, #6 -100140f8: 4918 ldr r1, [pc, #96] ; (1001415c ) -100140fa: 4620 mov r0, r4 -100140fc: f006 fd58 bl 1001abb0 -10014100: 2206 movs r2, #6 -10014102: 4639 mov r1, r7 -10014104: 18a0 adds r0, r4, r2 -10014106: f006 fd53 bl 1001abb0 -1001410a: 2204 movs r2, #4 -1001410c: 4649 mov r1, r9 -1001410e: f104 001c add.w r0, r4, #28 -10014112: f006 fd4d bl 1001abb0 -10014116: 2204 movs r2, #4 -10014118: 4641 mov r1, r8 -1001411a: f104 0026 add.w r0, r4, #38 ; 0x26 -1001411e: f006 fd47 bl 1001abb0 -10014122: 2300 movs r3, #0 -10014124: 2201 movs r2, #1 -10014126: 73a3 strb r3, [r4, #14] -10014128: 7463 strb r3, [r4, #17] -1001412a: 2104 movs r1, #4 -1001412c: 2306 movs r3, #6 -1001412e: 73e2 strb r2, [r4, #15] -10014130: 2208 movs r2, #8 -10014132: 74e1 strb r1, [r4, #19] -10014134: 74a3 strb r3, [r4, #18] -10014136: 7363 strb r3, [r4, #13] -10014138: 7422 strb r2, [r4, #16] -1001413a: 7322 strb r2, [r4, #12] -1001413c: 69b3 ldr r3, [r6, #24] -1001413e: 4629 mov r1, r5 -10014140: 4630 mov r0, r6 -10014142: 4798 blx r3 -10014144: 4604 mov r4, r0 -10014146: 4628 mov r0, r5 -10014148: f7fc ff97 bl 1001107a -1001414c: 4620 mov r0, r4 -1001414e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -10014152: f04f 34ff mov.w r4, #4294967295 -10014156: e7f9 b.n 1001414c -10014158: 100400d5 .word 0x100400d5 -1001415c: 100400cf .word 0x100400cf - -10014160 : -10014160: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10014164: 460f mov r7, r1 -10014166: 2114 movs r1, #20 -10014168: 4351 muls r1, r2 -1001416a: 4c10 ldr r4, [pc, #64] ; (100141ac ) -1001416c: 4606 mov r6, r0 -1001416e: eb04 0801 add.w r8, r4, r1 -10014172: f898 3012 ldrb.w r3, [r8, #18] -10014176: 4615 mov r5, r2 -10014178: 2b02 cmp r3, #2 -1001417a: d10b bne.n 10014194 -1001417c: f898 3013 ldrb.w r3, [r8, #19] -10014180: 2be3 cmp r3, #227 ; 0xe3 -10014182: d907 bls.n 10014194 -10014184: 3104 adds r1, #4 -10014186: 4421 add r1, r4 -10014188: f7ff ff94 bl 100140b4 -1001418c: b910 cbnz r0, 10014194 -1001418e: 2303 movs r3, #3 -10014190: f888 3012 strb.w r3, [r8, #18] -10014194: 2314 movs r3, #20 -10014196: fb03 4305 mla r3, r3, r5, r4 -1001419a: f106 022b add.w r2, r6, #43 ; 0x2b -1001419e: 4639 mov r1, r7 -100141a0: 4630 mov r0, r6 -100141a2: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -100141a6: 330c adds r3, #12 -100141a8: f7ff bf36 b.w 10014018 -100141ac: 1004b160 .word 0x1004b160 - -100141b0 : -100141b0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -100141b4: 4688 mov r8, r1 -100141b6: 4607 mov r7, r0 -100141b8: 4601 mov r1, r0 -100141ba: f8d8 0000 ldr.w r0, [r8] -100141be: 4614 mov r4, r2 -100141c0: f7fb f84f bl 1000f262 -100141c4: 2800 cmp r0, #0 -100141c6: d150 bne.n 1001426a -100141c8: f8d8 3000 ldr.w r3, [r8] -100141cc: f003 02f0 and.w r2, r3, #240 ; 0xf0 -100141d0: 2ae0 cmp r2, #224 ; 0xe0 -100141d2: d04a beq.n 1001426a -100141d4: 2b00 cmp r3, #0 -100141d6: d048 beq.n 1001426a -100141d8: 2101 movs r1, #1 -100141da: 4640 mov r0, r8 -100141dc: f7ff feb4 bl 10013f48 -100141e0: 1e06 subs r6, r0, #0 -100141e2: db46 blt.n 10014272 -100141e4: 2314 movs r3, #20 -100141e6: 4d2f ldr r5, [pc, #188] ; (100142a4 ) -100141e8: fb03 5206 mla r2, r3, r6, r5 -100141ec: 7c91 ldrb r1, [r2, #18] -100141ee: b909 cbnz r1, 100141f4 -100141f0: 2101 movs r1, #1 -100141f2: 7491 strb r1, [r2, #18] -100141f4: fb03 5306 mla r3, r3, r6, r5 -100141f8: 7c9b ldrb r3, [r3, #18] -100141fa: 2b01 cmp r3, #1 -100141fc: d000 beq.n 10014200 -100141fe: b934 cbnz r4, 1001420e -10014200: 4641 mov r1, r8 -10014202: 4638 mov r0, r7 -10014204: f7ff ff56 bl 100140b4 -10014208: b91c cbnz r4, 10014212 -1001420a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1001420e: f04f 30ff mov.w r0, #4294967295 -10014212: 2314 movs r3, #20 -10014214: 4373 muls r3, r6 -10014216: 18ea adds r2, r5, r3 -10014218: 7c92 ldrb r2, [r2, #18] -1001421a: 2a01 cmp r2, #1 -1001421c: d90b bls.n 10014236 -1001421e: 4a22 ldr r2, [pc, #136] ; (100142a8 ) -10014220: 330c adds r3, #12 -10014222: 7016 strb r6, [r2, #0] -10014224: 442b add r3, r5 -10014226: f107 022b add.w r2, r7, #43 ; 0x2b -1001422a: 4621 mov r1, r4 -1001422c: 4638 mov r0, r7 -1001422e: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -10014232: f7ff bef1 b.w 10014018 -10014236: d132 bne.n 1001429e -10014238: 4623 mov r3, r4 -1001423a: b98b cbnz r3, 10014260 -1001423c: 4620 mov r0, r4 -1001423e: f7fc fff0 bl 10011222 -10014242: b344 cbz r4, 10014296 -10014244: 4627 mov r7, r4 -10014246: 2314 movs r3, #20 -10014248: fb03 f206 mul.w r2, r3, r6 -1001424c: 58a8 ldr r0, [r5, r2] -1001424e: 461c mov r4, r3 -10014250: b108 cbz r0, 10014256 -10014252: f7fc ff12 bl 1001107a -10014256: 4366 muls r6, r4 -10014258: 2000 movs r0, #0 -1001425a: 51af str r7, [r5, r6] -1001425c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10014260: 7b1a ldrb r2, [r3, #12] -10014262: 2a01 cmp r2, #1 -10014264: d108 bne.n 10014278 -10014266: 681b ldr r3, [r3, #0] -10014268: e7e7 b.n 1001423a -1001426a: f06f 000d mvn.w r0, #13 -1001426e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10014272: 4630 mov r0, r6 -10014274: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10014278: 2200 movs r2, #0 -1001427a: 8919 ldrh r1, [r3, #8] -1001427c: 2003 movs r0, #3 -1001427e: f7fc ff1f bl 100110c0 -10014282: 4607 mov r7, r0 -10014284: b138 cbz r0, 10014296 -10014286: 4621 mov r1, r4 -10014288: f7fc ffee bl 10011268 -1001428c: 2800 cmp r0, #0 -1001428e: d0da beq.n 10014246 -10014290: 4638 mov r0, r7 -10014292: f7fc fef2 bl 1001107a -10014296: f04f 30ff mov.w r0, #4294967295 -1001429a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1001429e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100142a2: bf00 nop -100142a4: 1004b160 .word 0x1004b160 -100142a8: 1004b228 .word 0x1004b228 - -100142ac : -100142ac: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -100142ae: 460e mov r6, r1 -100142b0: 4604 mov r4, r0 -100142b2: 210e movs r1, #14 -100142b4: 4630 mov r0, r6 -100142b6: 4615 mov r5, r2 -100142b8: f7fc feb4 bl 10011024 -100142bc: 2800 cmp r0, #0 -100142be: d160 bne.n 10014382 -100142c0: 4621 mov r1, r4 -100142c2: 6828 ldr r0, [r5, #0] -100142c4: f7fa ffcd bl 1000f262 -100142c8: 2800 cmp r0, #0 -100142ca: d158 bne.n 1001437e -100142cc: 682b ldr r3, [r5, #0] -100142ce: f003 02f0 and.w r2, r3, #240 ; 0xf0 -100142d2: 2ae0 cmp r2, #224 ; 0xe0 -100142d4: d11a bne.n 1001430c -100142d6: 2301 movs r3, #1 -100142d8: f88d 3000 strb.w r3, [sp] -100142dc: 235e movs r3, #94 ; 0x5e -100142de: f88d 3002 strb.w r3, [sp, #2] -100142e2: 786b ldrb r3, [r5, #1] -100142e4: f88d 0001 strb.w r0, [sp, #1] -100142e8: f003 037f and.w r3, r3, #127 ; 0x7f -100142ec: f88d 3003 strb.w r3, [sp, #3] -100142f0: 78ab ldrb r3, [r5, #2] -100142f2: f88d 3004 strb.w r3, [sp, #4] -100142f6: 78eb ldrb r3, [r5, #3] -100142f8: f88d 3005 strb.w r3, [sp, #5] -100142fc: 466b mov r3, sp -100142fe: f104 022b add.w r2, r4, #43 ; 0x2b -10014302: 4631 mov r1, r6 -10014304: 4620 mov r0, r4 -10014306: f7ff fe87 bl 10014018 -1001430a: e01f b.n 1001434c -1001430c: 6862 ldr r2, [r4, #4] -1001430e: 68a1 ldr r1, [r4, #8] -10014310: 405a eors r2, r3 -10014312: 420a tst r2, r1 -10014314: d008 beq.n 10014328 -10014316: f64f 62a9 movw r2, #65193 ; 0xfea9 -1001431a: b29b uxth r3, r3 -1001431c: 4293 cmp r3, r2 -1001431e: d003 beq.n 10014328 -10014320: 68e3 ldr r3, [r4, #12] -10014322: f104 050c add.w r5, r4, #12 -10014326: b37b cbz r3, 10014388 -10014328: 2014 movs r0, #20 -1001432a: 4b19 ldr r3, [pc, #100] ; (10014390 ) -1001432c: 4919 ldr r1, [pc, #100] ; (10014394 ) -1001432e: 781a ldrb r2, [r3, #0] -10014330: fb00 1002 mla r0, r0, r2, r1 -10014334: 7c81 ldrb r1, [r0, #18] -10014336: 2901 cmp r1, #1 -10014338: 4619 mov r1, r3 -1001433a: d909 bls.n 10014350 -1001433c: 682f ldr r7, [r5, #0] -1001433e: 6843 ldr r3, [r0, #4] -10014340: 429f cmp r7, r3 -10014342: d105 bne.n 10014350 -10014344: 4631 mov r1, r6 -10014346: 4620 mov r0, r4 -10014348: f7ff ff0a bl 10014160 -1001434c: b003 add sp, #12 -1001434e: bdf0 pop {r4, r5, r6, r7, pc} -10014350: 2200 movs r2, #0 -10014352: 4b10 ldr r3, [pc, #64] ; (10014394 ) -10014354: 7c98 ldrb r0, [r3, #18] -10014356: 2801 cmp r0, #1 -10014358: d906 bls.n 10014368 -1001435a: 682f ldr r7, [r5, #0] -1001435c: 6858 ldr r0, [r3, #4] -1001435e: 4287 cmp r7, r0 -10014360: d102 bne.n 10014368 -10014362: b2d2 uxtb r2, r2 -10014364: 700a strb r2, [r1, #0] -10014366: e7ed b.n 10014344 -10014368: 3201 adds r2, #1 -1001436a: 2a0a cmp r2, #10 -1001436c: f103 0314 add.w r3, r3, #20 -10014370: d1f0 bne.n 10014354 -10014372: 4632 mov r2, r6 -10014374: 4629 mov r1, r5 -10014376: 4620 mov r0, r4 -10014378: f7ff ff1a bl 100141b0 -1001437c: e7e6 b.n 1001434c -1001437e: 4b06 ldr r3, [pc, #24] ; (10014398 ) -10014380: e7bd b.n 100142fe -10014382: f06f 0001 mvn.w r0, #1 -10014386: e7e1 b.n 1001434c -10014388: f06f 0003 mvn.w r0, #3 -1001438c: e7de b.n 1001434c -1001438e: bf00 nop -10014390: 1004b228 .word 0x1004b228 -10014394: 1004b160 .word 0x1004b160 -10014398: 100400cf .word 0x100400cf - -1001439c : -1001439c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100143a0: 8943 ldrh r3, [r0, #10] -100143a2: b087 sub sp, #28 -100143a4: 2b0e cmp r3, #14 -100143a6: 4604 mov r4, r0 -100143a8: 460d mov r5, r1 -100143aa: d914 bls.n 100143d6 -100143ac: 6840 ldr r0, [r0, #4] -100143ae: 7803 ldrb r3, [r0, #0] -100143b0: 8986 ldrh r6, [r0, #12] -100143b2: 07df lsls r7, r3, #31 -100143b4: d50a bpl.n 100143cc -100143b6: 2b01 cmp r3, #1 -100143b8: d111 bne.n 100143de -100143ba: 7843 ldrb r3, [r0, #1] -100143bc: b933 cbnz r3, 100143cc -100143be: 7883 ldrb r3, [r0, #2] -100143c0: 2b5e cmp r3, #94 ; 0x5e -100143c2: d103 bne.n 100143cc -100143c4: 7b63 ldrb r3, [r4, #13] -100143c6: f043 0310 orr.w r3, r3, #16 -100143ca: 7363 strb r3, [r4, #13] -100143cc: 2e08 cmp r6, #8 -100143ce: d010 beq.n 100143f2 -100143d0: f5b6 6fc1 cmp.w r6, #1544 ; 0x608 -100143d4: d020 beq.n 10014418 -100143d6: 4620 mov r0, r4 -100143d8: f7fc fe4f bl 1001107a -100143dc: e018 b.n 10014410 -100143de: 2206 movs r2, #6 -100143e0: 4960 ldr r1, [pc, #384] ; (10014564 ) -100143e2: f006 fbe1 bl 1001aba8 -100143e6: 2800 cmp r0, #0 -100143e8: d1f0 bne.n 100143cc -100143ea: 7b63 ldrb r3, [r4, #13] -100143ec: f043 0308 orr.w r3, r3, #8 -100143f0: e7eb b.n 100143ca -100143f2: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 -100143f6: 0698 lsls r0, r3, #26 -100143f8: d5ed bpl.n 100143d6 -100143fa: f06f 010d mvn.w r1, #13 -100143fe: 4620 mov r0, r4 -10014400: f7fc fe10 bl 10011024 -10014404: 2800 cmp r0, #0 -10014406: d1e6 bne.n 100143d6 -10014408: 4629 mov r1, r5 -1001440a: 4620 mov r0, r4 -1001440c: f7fa fd76 bl 1000eefc -10014410: 2000 movs r0, #0 -10014412: b007 add sp, #28 -10014414: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10014418: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 -1001441c: 0699 lsls r1, r3, #26 -1001441e: d5da bpl.n 100143d6 -10014420: 8963 ldrh r3, [r4, #10] -10014422: 2b29 cmp r3, #41 ; 0x29 -10014424: d9d7 bls.n 100143d6 -10014426: 6866 ldr r6, [r4, #4] -10014428: 89f3 ldrh r3, [r6, #14] -1001442a: f5b3 7f80 cmp.w r3, #256 ; 0x100 -1001442e: d1d2 bne.n 100143d6 -10014430: 7cb3 ldrb r3, [r6, #18] -10014432: 2b06 cmp r3, #6 -10014434: d1cf bne.n 100143d6 -10014436: 7cf7 ldrb r7, [r6, #19] -10014438: 2f04 cmp r7, #4 -1001443a: d1cc bne.n 100143d6 -1001443c: 8a33 ldrh r3, [r6, #16] -1001443e: 2b08 cmp r3, #8 -10014440: d1c9 bne.n 100143d6 -10014442: f106 031c add.w r3, r6, #28 -10014446: 4619 mov r1, r3 -10014448: 463a mov r2, r7 -1001444a: a804 add r0, sp, #16 -1001444c: 9300 str r3, [sp, #0] -1001444e: f006 fbaf bl 1001abb0 -10014452: f106 0326 add.w r3, r6, #38 ; 0x26 -10014456: 4619 mov r1, r3 -10014458: 463a mov r2, r7 -1001445a: a805 add r0, sp, #20 -1001445c: 9302 str r3, [sp, #8] -1001445e: f006 fba7 bl 1001abb0 -10014462: 686b ldr r3, [r5, #4] -10014464: b11b cbz r3, 1001446e -10014466: 9a05 ldr r2, [sp, #20] -10014468: 1ad2 subs r2, r2, r3 -1001446a: 4253 negs r3, r2 -1001446c: 4153 adcs r3, r2 -1001446e: 9301 str r3, [sp, #4] -10014470: 9b01 ldr r3, [sp, #4] -10014472: 9804 ldr r0, [sp, #16] -10014474: 2b00 cmp r3, #0 -10014476: f106 0816 add.w r8, r6, #22 -1001447a: bf14 ite ne -1001447c: 2701 movne r7, #1 -1001447e: 2702 moveq r7, #2 -10014480: f105 0a2b add.w sl, r5, #43 ; 0x2b -10014484: b3a0 cbz r0, 100144f0 -10014486: 4629 mov r1, r5 -10014488: f7fa feeb bl 1000f262 -1001448c: 9003 str r0, [sp, #12] -1001448e: bb78 cbnz r0, 100144f0 -10014490: 9a04 ldr r2, [sp, #16] -10014492: f002 02f0 and.w r2, r2, #240 ; 0xf0 -10014496: 2ae0 cmp r2, #224 ; 0xe0 -10014498: d02a beq.n 100144f0 -1001449a: 4639 mov r1, r7 -1001449c: a804 add r0, sp, #16 -1001449e: f7ff fd53 bl 10013f48 -100144a2: 2800 cmp r0, #0 -100144a4: db24 blt.n 100144f0 -100144a6: 2714 movs r7, #20 -100144a8: 2202 movs r2, #2 -100144aa: 4347 muls r7, r0 -100144ac: f8df 90b8 ldr.w r9, [pc, #184] ; 10014568 -100144b0: f107 000c add.w r0, r7, #12 -100144b4: eb09 0b07 add.w fp, r9, r7 -100144b8: f88b 2012 strb.w r2, [fp, #18] -100144bc: f8cb 5008 str.w r5, [fp, #8] -100144c0: 2206 movs r2, #6 -100144c2: 4641 mov r1, r8 -100144c4: 4448 add r0, r9 -100144c6: f006 fb73 bl 1001abb0 -100144ca: 9b03 ldr r3, [sp, #12] -100144cc: f88b 3013 strb.w r3, [fp, #19] -100144d0: f859 b007 ldr.w fp, [r9, r7] -100144d4: f1bb 0f00 cmp.w fp, #0 -100144d8: d00a beq.n 100144f0 -100144da: f849 3007 str.w r3, [r9, r7] -100144de: 4652 mov r2, sl -100144e0: 4643 mov r3, r8 -100144e2: 4659 mov r1, fp -100144e4: 4628 mov r0, r5 -100144e6: f7ff fd97 bl 10014018 -100144ea: 4658 mov r0, fp -100144ec: f7fc fdc5 bl 1001107a -100144f0: 8ab3 ldrh r3, [r6, #20] -100144f2: f5b3 7f80 cmp.w r3, #256 ; 0x100 -100144f6: d008 beq.n 1001450a -100144f8: f5b3 7f00 cmp.w r3, #512 ; 0x200 -100144fc: f47f af6b bne.w 100143d6 -10014500: a904 add r1, sp, #16 -10014502: 4628 mov r0, r5 -10014504: f7fb ff12 bl 1001032c -10014508: e765 b.n 100143d6 -1001450a: 9b01 ldr r3, [sp, #4] -1001450c: 2b00 cmp r3, #0 -1001450e: f43f af62 beq.w 100143d6 -10014512: 2002 movs r0, #2 -10014514: f7fb f9f4 bl 1000f900 -10014518: 9900 ldr r1, [sp, #0] -1001451a: 82b0 strh r0, [r6, #20] -1001451c: 2204 movs r2, #4 -1001451e: 9802 ldr r0, [sp, #8] -10014520: f006 fb46 bl 1001abb0 -10014524: 2204 movs r2, #4 -10014526: 9800 ldr r0, [sp, #0] -10014528: 18a9 adds r1, r5, r2 -1001452a: f006 fb41 bl 1001abb0 -1001452e: 4641 mov r1, r8 -10014530: 2206 movs r2, #6 -10014532: f106 0020 add.w r0, r6, #32 -10014536: f006 fb3b bl 1001abb0 -1001453a: 4641 mov r1, r8 -1001453c: 2206 movs r2, #6 -1001453e: 4630 mov r0, r6 -10014540: f006 fb36 bl 1001abb0 -10014544: 4651 mov r1, sl -10014546: 2206 movs r2, #6 -10014548: 4640 mov r0, r8 -1001454a: f006 fb31 bl 1001abb0 -1001454e: 2206 movs r2, #6 -10014550: 4651 mov r1, sl -10014552: 18b0 adds r0, r6, r2 -10014554: f006 fb2c bl 1001abb0 -10014558: 69ab ldr r3, [r5, #24] -1001455a: 4621 mov r1, r4 -1001455c: 4628 mov r0, r5 -1001455e: 4798 blx r3 -10014560: e739 b.n 100143d6 -10014562: bf00 nop -10014564: 100400cf .word 0x100400cf -10014568: 1004b160 .word 0x1004b160 - -1001456c : -1001456c: b570 push {r4, r5, r6, lr} -1001456e: b0c0 sub sp, #256 ; 0x100 -10014570: 4606 mov r6, r0 -10014572: 460d mov r5, r1 -10014574: f000 f952 bl 1001481c -10014578: b2c0 uxtb r0, r0 -1001457a: f022 fe3b bl 100371f4 -1001457e: b300 cbz r0, 100145c2 -10014580: 462b mov r3, r5 -10014582: 2400 movs r4, #0 -10014584: b1c3 cbz r3, 100145b8 -10014586: 2c20 cmp r4, #32 -10014588: d10b bne.n 100145a2 -1001458a: 4630 mov r0, r6 -1001458c: f000 f946 bl 1001481c -10014590: 892b ldrh r3, [r5, #8] -10014592: 4622 mov r2, r4 -10014594: 4669 mov r1, sp -10014596: f000 f8a5 bl 100146e4 -1001459a: b178 cbz r0, 100145bc -1001459c: f06f 0001 mvn.w r0, #1 -100145a0: e00d b.n 100145be -100145a2: 685a ldr r2, [r3, #4] -100145a4: 8959 ldrh r1, [r3, #10] -100145a6: f84d 2034 str.w r2, [sp, r4, lsl #3] -100145aa: 3401 adds r4, #1 -100145ac: eb0d 02c4 add.w r2, sp, r4, lsl #3 -100145b0: f842 1c04 str.w r1, [r2, #-4] -100145b4: 681b ldr r3, [r3, #0] -100145b6: e7e5 b.n 10014584 -100145b8: 2c00 cmp r4, #0 -100145ba: d1e6 bne.n 1001458a -100145bc: 2000 movs r0, #0 -100145be: b040 add sp, #256 ; 0x100 -100145c0: bd70 pop {r4, r5, r6, pc} -100145c2: f06f 000e mvn.w r0, #14 -100145c6: e7fa b.n 100145be - -100145c8 : -100145c8: b508 push {r3, lr} -100145ca: f7ff fd3f bl 1001404c -100145ce: e8bd 4008 ldmia.w sp!, {r3, lr} -100145d2: 2200 movs r2, #0 -100145d4: 4902 ldr r1, [pc, #8] ; (100145e0 ) -100145d6: f241 3088 movw r0, #5000 ; 0x1388 -100145da: f7fc bae5 b.w 10010ba8 -100145de: bf00 nop -100145e0: 100145c9 .word 0x100145c9 - -100145e4 : -100145e4: b570 push {r4, r5, r6, lr} -100145e6: b0c0 sub sp, #256 ; 0x100 -100145e8: 4606 mov r6, r0 -100145ea: 460c mov r4, r1 -100145ec: f000 f916 bl 1001481c -100145f0: b2c0 uxtb r0, r0 -100145f2: f022 fdff bl 100371f4 -100145f6: b170 cbz r0, 10014616 -100145f8: f240 6304 movw r3, #1540 ; 0x604 -100145fc: 429c cmp r4, r3 -100145fe: bf28 it cs -10014600: 461c movcs r4, r3 -10014602: 2203 movs r2, #3 -10014604: b2a1 uxth r1, r4 -10014606: 4610 mov r0, r2 -10014608: f7fc fd5a bl 100110c0 -1001460c: 4605 mov r5, r0 -1001460e: b920 cbnz r0, 1001461a -10014610: 4812 ldr r0, [pc, #72] ; (1001465c ) -10014612: f006 faa5 bl 1001ab60 -10014616: b040 add sp, #256 ; 0x100 -10014618: bd70 pop {r4, r5, r6, pc} -1001461a: 4603 mov r3, r0 -1001461c: 2400 movs r4, #0 -1001461e: 685a ldr r2, [r3, #4] -10014620: 8959 ldrh r1, [r3, #10] -10014622: f84d 2034 str.w r2, [sp, r4, lsl #3] -10014626: 681b ldr r3, [r3, #0] -10014628: 3401 adds r4, #1 -1001462a: eb0d 02c4 add.w r2, sp, r4, lsl #3 -1001462e: f842 1c04 str.w r1, [r2, #-4] -10014632: b10b cbz r3, 10014638 -10014634: 2c20 cmp r4, #32 -10014636: d1f2 bne.n 1001461e -10014638: 4630 mov r0, r6 -1001463a: f000 f8ef bl 1001481c -1001463e: 4669 mov r1, sp -10014640: 4622 mov r2, r4 -10014642: f000 f899 bl 10014778 -10014646: 6933 ldr r3, [r6, #16] -10014648: 4631 mov r1, r6 -1001464a: 4628 mov r0, r5 -1001464c: 4798 blx r3 -1001464e: 2800 cmp r0, #0 -10014650: d0e1 beq.n 10014616 -10014652: 4628 mov r0, r5 -10014654: f7fc fd11 bl 1001107a -10014658: e7dd b.n 10014616 -1001465a: bf00 nop -1001465c: 100400db .word 0x100400db - -10014660 : -10014660: f990 3033 ldrsb.w r3, [r0, #51] ; 0x33 -10014664: 2b30 cmp r3, #48 ; 0x30 -10014666: d110 bne.n 1001468a -10014668: 4b0a ldr r3, [pc, #40] ; (10014694 ) -1001466a: 6243 str r3, [r0, #36] ; 0x24 -1001466c: 4b0a ldr r3, [pc, #40] ; (10014698 ) -1001466e: 6143 str r3, [r0, #20] -10014670: 4b0a ldr r3, [pc, #40] ; (1001469c ) -10014672: 6183 str r3, [r0, #24] -10014674: 2306 movs r3, #6 -10014676: f880 302a strb.w r3, [r0, #42] ; 0x2a -1001467a: f240 53dc movw r3, #1500 ; 0x5dc -1001467e: 8503 strh r3, [r0, #40] ; 0x28 -10014680: 2322 movs r3, #34 ; 0x22 -10014682: f880 3031 strb.w r3, [r0, #49] ; 0x31 -10014686: 2000 movs r0, #0 -10014688: 4770 bx lr -1001468a: 2b31 cmp r3, #49 ; 0x31 -1001468c: d1ee bne.n 1001466c -1001468e: 4b04 ldr r3, [pc, #16] ; (100146a0 ) -10014690: e7eb b.n 1001466a -10014692: bf00 nop -10014694: 10044e68 .word 0x10044e68 -10014698: 100142ad .word 0x100142ad -1001469c: 1001456d .word 0x1001456d -100146a0: 10044e78 .word 0x10044e78 - -100146a4 : -100146a4: 4b04 ldr r3, [pc, #16] ; (100146b8 ) -100146a6: 681b ldr r3, [r3, #0] -100146a8: b12b cbz r3, 100146b6 -100146aa: 2200 movs r2, #0 -100146ac: 4903 ldr r1, [pc, #12] ; (100146bc ) -100146ae: f241 3088 movw r0, #5000 ; 0x1388 -100146b2: f7fa b8fb b.w 1000e8ac -100146b6: 4770 bx lr -100146b8: 1004b22c .word 0x1004b22c -100146bc: 100145c9 .word 0x100145c9 - -100146c0 : -100146c0: b570 push {r4, r5, r6, lr} -100146c2: 243c movs r4, #60 ; 0x3c -100146c4: 460e mov r6, r1 -100146c6: fb04 f500 mul.w r5, r4, r0 -100146ca: 4c05 ldr r4, [pc, #20] ; (100146e0 ) -100146cc: f105 002b add.w r0, r5, #43 ; 0x2b -100146d0: 4611 mov r1, r2 -100146d2: 4420 add r0, r4 -100146d4: 2206 movs r2, #6 -100146d6: 442c add r4, r5 -100146d8: f002 fe9a bl 10017410 -100146dc: 61e6 str r6, [r4, #28] -100146de: bd70 pop {r4, r5, r6, pc} -100146e0: 1004a984 .word 0x1004a984 - -100146e4 : -100146e4: b5f8 push {r3, r4, r5, r6, r7, lr} -100146e6: 461e mov r6, r3 -100146e8: 1c43 adds r3, r0, #1 -100146ea: 4605 mov r5, r0 -100146ec: 460c mov r4, r1 -100146ee: 4617 mov r7, r2 -100146f0: d107 bne.n 10014702 -100146f2: 491f ldr r1, [pc, #124] ; (10014770 ) -100146f4: 481f ldr r0, [pc, #124] ; (10014774 ) -100146f6: f006 fa33 bl 1001ab60 -100146fa: f04f 34ff mov.w r4, #4294967295 -100146fe: 4620 mov r0, r4 -10014700: bdf8 pop {r3, r4, r5, r6, r7, pc} -10014702: f002 fe32 bl 1001736a -10014706: 4628 mov r0, r5 -10014708: f022 fc5a bl 10036fc0 -1001470c: b160 cbz r0, 10014728 -1001470e: 4628 mov r0, r5 -10014710: f022 fc5e bl 10036fd0 -10014714: f002 fe2b bl 1001736e -10014718: 4630 mov r0, r6 -1001471a: f022 fc75 bl 10037008 -1001471e: 4606 mov r6, r0 -10014720: b948 cbnz r0, 10014736 -10014722: f04f 34ff mov.w r4, #4294967295 -10014726: e00f b.n 10014748 -10014728: 4911 ldr r1, [pc, #68] ; (10014770 ) -1001472a: 4812 ldr r0, [pc, #72] ; (10014774 ) -1001472c: f006 fa18 bl 1001ab60 -10014730: f002 fe1d bl 1001736e -10014734: e7e1 b.n 100146fa -10014736: eb04 07c7 add.w r7, r4, r7, lsl #3 -1001473a: 42bc cmp r4, r7 -1001473c: d30c bcc.n 10014758 -1001473e: 4631 mov r1, r6 -10014740: 4628 mov r0, r5 -10014742: f022 fc81 bl 10037048 -10014746: 2400 movs r4, #0 -10014748: f002 fe0f bl 1001736a -1001474c: 4628 mov r0, r5 -1001474e: f022 fc49 bl 10036fe4 -10014752: f002 fe0c bl 1001736e -10014756: e7d2 b.n 100146fe -10014758: e894 0006 ldmia.w r4, {r1, r2} -1001475c: 6970 ldr r0, [r6, #20] -1001475e: f002 fe57 bl 10017410 -10014762: 6861 ldr r1, [r4, #4] -10014764: 4630 mov r0, r6 -10014766: f022 f83f bl 100367e8 -1001476a: 3408 adds r4, #8 -1001476c: e7e5 b.n 1001473a -1001476e: bf00 nop -10014770: 10040104 .word 0x10040104 -10014774: 100401b7 .word 0x100401b7 - -10014778 : -10014778: 1c43 adds r3, r0, #1 -1001477a: b570 push {r4, r5, r6, lr} -1001477c: 4606 mov r6, r0 -1001477e: 460c mov r4, r1 -10014780: 4615 mov r5, r2 -10014782: d105 bne.n 10014790 -10014784: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10014788: 4911 ldr r1, [pc, #68] ; (100147d0 ) -1001478a: 4812 ldr r0, [pc, #72] ; (100147d4 ) -1001478c: f006 b9e8 b.w 1001ab60 -10014790: f022 fc16 bl 10036fc0 -10014794: b170 cbz r0, 100147b4 -10014796: 4630 mov r0, r6 -10014798: f022 fc2e bl 10036ff8 -1001479c: 4606 mov r6, r0 -1001479e: b928 cbnz r0, 100147ac -100147a0: 4b0d ldr r3, [pc, #52] ; (100147d8 ) -100147a2: 2291 movs r2, #145 ; 0x91 -100147a4: 490d ldr r1, [pc, #52] ; (100147dc ) -100147a6: 480e ldr r0, [pc, #56] ; (100147e0 ) -100147a8: f006 f9da bl 1001ab60 -100147ac: eb04 05c5 add.w r5, r4, r5, lsl #3 -100147b0: 42ac cmp r4, r5 -100147b2: d300 bcc.n 100147b6 -100147b4: bd70 pop {r4, r5, r6, pc} -100147b6: 6820 ldr r0, [r4, #0] -100147b8: b138 cbz r0, 100147ca -100147ba: 6931 ldr r1, [r6, #16] -100147bc: 6862 ldr r2, [r4, #4] -100147be: f002 fe27 bl 10017410 -100147c2: 6861 ldr r1, [r4, #4] -100147c4: 4630 mov r0, r6 -100147c6: f022 f844 bl 10036852 -100147ca: 3408 adds r4, #8 -100147cc: e7f0 b.n 100147b0 -100147ce: bf00 nop -100147d0: 10040113 .word 0x10040113 -100147d4: 10040122 .word 0x10040122 -100147d8: 10040135 .word 0x10040135 -100147dc: 10040176 .word 0x10040176 -100147e0: 10040188 .word 0x10040188 - -100147e4 : -100147e4: b538 push {r3, r4, r5, lr} -100147e6: 243c movs r4, #60 ; 0x3c -100147e8: 4b0b ldr r3, [pc, #44] ; (10014818 ) -100147ea: fb04 3400 mla r4, r4, r0, r3 -100147ee: 6863 ldr r3, [r4, #4] -100147f0: b90b cbnz r3, 100147f6 -100147f2: 2001 movs r0, #1 -100147f4: bd38 pop {r3, r4, r5, pc} -100147f6: 680d ldr r5, [r1, #0] -100147f8: f005 03f0 and.w r3, r5, #240 ; 0xf0 -100147fc: 2be0 cmp r3, #224 ; 0xe0 -100147fe: d0f8 beq.n 100147f2 -10014800: 4621 mov r1, r4 -10014802: 4628 mov r0, r5 -10014804: f7fa fd2d bl 1000f262 -10014808: 2800 cmp r0, #0 -1001480a: d1f2 bne.n 100147f2 -1001480c: 6860 ldr r0, [r4, #4] -1001480e: 1b43 subs r3, r0, r5 -10014810: 4258 negs r0, r3 -10014812: 4158 adcs r0, r3 -10014814: bd38 pop {r3, r4, r5, pc} -10014816: bf00 nop -10014818: 1004a984 .word 0x1004a984 - -1001481c : -1001481c: 4b04 ldr r3, [pc, #16] ; (10014830 ) -1001481e: 1ac0 subs r0, r0, r3 -10014820: 4b04 ldr r3, [pc, #16] ; (10014834 ) -10014822: 1080 asrs r0, r0, #2 -10014824: 4358 muls r0, r3 -10014826: 2802 cmp r0, #2 -10014828: bf28 it cs -1001482a: f04f 30ff movcs.w r0, #4294967295 -1001482e: 4770 bx lr -10014830: 1004a984 .word 0x1004a984 -10014834: eeeeeeef .word 0xeeeeeeef - -10014838 : -10014838: 223c movs r2, #60 ; 0x3c -1001483a: 4b02 ldr r3, [pc, #8] ; (10014844 ) -1001483c: fb02 3000 mla r0, r2, r0, r3 -10014840: f7ff bed0 b.w 100145e4 -10014844: 1004a984 .word 0x1004a984 - -10014848 : -10014848: f7ff bf2c b.w 100146a4 - -1001484c : -1001484c: b510 push {r4, lr} -1001484e: 2200 movs r2, #0 -10014850: 4604 mov r4, r0 -10014852: 4608 mov r0, r1 -10014854: 2104 movs r1, #4 -10014856: f001 f89d bl 10015994 -1001485a: 6020 str r0, [r4, #0] -1001485c: fab0 f080 clz r0, r0 -10014860: 0940 lsrs r0, r0, #5 -10014862: 4240 negs r0, r0 -10014864: bd10 pop {r4, pc} - -10014866 : -10014866: b537 push {r0, r1, r2, r4, r5, lr} -10014868: 4605 mov r5, r0 -1001486a: ac02 add r4, sp, #8 -1001486c: f844 1d04 str.w r1, [r4, #-4]! -10014870: 2300 movs r3, #0 -10014872: f04f 32ff mov.w r2, #4294967295 -10014876: 4621 mov r1, r4 -10014878: 6828 ldr r0, [r5, #0] -1001487a: f001 f8af bl 100159dc -1001487e: 2801 cmp r0, #1 -10014880: d1f6 bne.n 10014870 -10014882: b003 add sp, #12 -10014884: bd30 pop {r4, r5, pc} - -10014886 : -10014886: 2300 movs r3, #0 -10014888: b513 push {r0, r1, r4, lr} -1001488a: ac02 add r4, sp, #8 -1001488c: f844 1d04 str.w r1, [r4, #-4]! -10014890: 461a mov r2, r3 -10014892: 4621 mov r1, r4 -10014894: 6800 ldr r0, [r0, #0] -10014896: f001 f8a1 bl 100159dc -1001489a: f110 30ff adds.w r0, r0, #4294967295 -1001489e: bf18 it ne -100148a0: f04f 30ff movne.w r0, #4294967295 -100148a4: b002 add sp, #8 -100148a6: bd10 pop {r4, pc} - -100148a8 : -100148a8: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -100148aa: 4606 mov r6, r0 -100148ac: 460d mov r5, r1 -100148ae: 4617 mov r7, r2 -100148b0: f001 fcb0 bl 10016214 -100148b4: 4604 mov r4, r0 -100148b6: b905 cbnz r5, 100148ba -100148b8: ad01 add r5, sp, #4 -100148ba: b18f cbz r7, 100148e0 -100148bc: 2300 movs r3, #0 -100148be: 463a mov r2, r7 -100148c0: 4629 mov r1, r5 -100148c2: 6830 ldr r0, [r6, #0] -100148c4: f001 f978 bl 10015bb8 -100148c8: 2801 cmp r0, #1 -100148ca: d103 bne.n 100148d4 -100148cc: f001 fca2 bl 10016214 -100148d0: 1b00 subs r0, r0, r4 -100148d2: e003 b.n 100148dc -100148d4: 2300 movs r3, #0 -100148d6: f04f 30ff mov.w r0, #4294967295 -100148da: 602b str r3, [r5, #0] -100148dc: b003 add sp, #12 -100148de: bdf0 pop {r4, r5, r6, r7, pc} -100148e0: 2300 movs r3, #0 -100148e2: f04f 32ff mov.w r2, #4294967295 -100148e6: 4629 mov r1, r5 -100148e8: 6830 ldr r0, [r6, #0] -100148ea: f001 f965 bl 10015bb8 -100148ee: 2801 cmp r0, #1 -100148f0: d1f6 bne.n 100148e0 -100148f2: e7eb b.n 100148cc - -100148f4 : -100148f4: 6800 ldr r0, [r0, #0] -100148f6: 3000 adds r0, #0 -100148f8: bf18 it ne -100148fa: 2001 movne r0, #1 -100148fc: 4770 bx lr - ... - -10014900 : -10014900: 2300 movs r3, #0 -10014902: 461a mov r2, r3 -10014904: 4904 ldr r1, [pc, #16] ; (10014918 ) -10014906: 18c8 adds r0, r1, r3 -10014908: 6042 str r2, [r0, #4] -1001490a: 505a str r2, [r3, r1] -1001490c: 3308 adds r3, #8 -1001490e: 2b30 cmp r3, #48 ; 0x30 -10014910: d1f9 bne.n 10014906 -10014912: 4b02 ldr r3, [pc, #8] ; (1001491c ) -10014914: 801a strh r2, [r3, #0] -10014916: 4770 bx lr -10014918: 1004b234 .word 0x1004b234 -1001491c: 1004b230 .word 0x1004b230 - -10014920 : -10014920: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10014924: 4c15 ldr r4, [pc, #84] ; (1001497c ) -10014926: 461f mov r7, r3 -10014928: 8823 ldrh r3, [r4, #0] -1001492a: b086 sub sp, #24 -1001492c: 2b05 cmp r3, #5 -1001492e: 4606 mov r6, r0 -10014930: 460d mov r5, r1 -10014932: 4690 mov r8, r2 -10014934: d903 bls.n 1001493e -10014936: 2000 movs r0, #0 -10014938: b006 add sp, #24 -1001493a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1001493e: f000 fd51 bl 100153e4 -10014942: 2300 movs r3, #0 -10014944: 9303 str r3, [sp, #12] -10014946: 9302 str r3, [sp, #8] -10014948: ab05 add r3, sp, #20 -1001494a: 9301 str r3, [sp, #4] -1001494c: 9b0c ldr r3, [sp, #48] ; 0x30 -1001494e: b2ba uxth r2, r7 -10014950: 9300 str r3, [sp, #0] -10014952: 4631 mov r1, r6 -10014954: 4643 mov r3, r8 -10014956: 4628 mov r0, r5 -10014958: f001 fa6c bl 10015e34 -1001495c: 4605 mov r5, r0 -1001495e: 8822 ldrh r2, [r4, #0] -10014960: 1c53 adds r3, r2, #1 -10014962: 8023 strh r3, [r4, #0] -10014964: 4b06 ldr r3, [pc, #24] ; (10014980 ) -10014966: eb03 03c2 add.w r3, r3, r2, lsl #3 -1001496a: 9a05 ldr r2, [sp, #20] -1001496c: 605a str r2, [r3, #4] -1001496e: f000 fd49 bl 10015404 -10014972: 2d01 cmp r5, #1 -10014974: d1df bne.n 10014936 -10014976: 9805 ldr r0, [sp, #20] -10014978: e7de b.n 10014938 -1001497a: bf00 nop -1001497c: 1004b230 .word 0x1004b230 -10014980: 1004b234 .word 0x1004b234 - -10014984 : -10014984: b508 push {r3, lr} -10014986: f000 fd2d bl 100153e4 -1001498a: 2001 movs r0, #1 -1001498c: bd08 pop {r3, pc} - -1001498e : -1001498e: f000 bd39 b.w 10015404 - ... - -10014994 : -10014994: 2300 movs r3, #0 -10014996: b570 push {r4, r5, r6, lr} -10014998: 4d0d ldr r5, [pc, #52] ; (100149d0 ) -1001499a: 4604 mov r4, r0 -1001499c: 4619 mov r1, r3 -1001499e: f04f 32ff mov.w r2, #4294967295 -100149a2: 6828 ldr r0, [r5, #0] -100149a4: f001 f908 bl 10015bb8 -100149a8: 2001 movs r0, #1 -100149aa: 4b0a ldr r3, [pc, #40] ; (100149d4 ) -100149ac: 0962 lsrs r2, r4, #5 -100149ae: f853 1022 ldr.w r1, [r3, r2, lsl #2] -100149b2: f004 041f and.w r4, r4, #31 -100149b6: 40a0 lsls r0, r4 -100149b8: 4308 orrs r0, r1 -100149ba: f843 0022 str.w r0, [r3, r2, lsl #2] -100149be: 2300 movs r3, #0 -100149c0: 6828 ldr r0, [r5, #0] -100149c2: 461a mov r2, r3 -100149c4: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -100149c8: 4619 mov r1, r3 -100149ca: f001 b807 b.w 100159dc -100149ce: bf00 nop -100149d0: 1004b298 .word 0x1004b298 -100149d4: 1004b2bc .word 0x1004b2bc - -100149d8 : -100149d8: 2302 movs r3, #2 -100149da: b573 push {r0, r1, r4, r5, r6, lr} -100149dc: 7003 strb r3, [r0, #0] -100149de: 2301 movs r3, #1 -100149e0: 2500 movs r5, #0 -100149e2: 2204 movs r2, #4 -100149e4: 7043 strb r3, [r0, #1] -100149e6: 2306 movs r3, #6 -100149e8: 4604 mov r4, r0 -100149ea: ae02 add r6, sp, #8 -100149ec: 7083 strb r3, [r0, #2] -100149ee: f846 1d04 str.w r1, [r6, #-4]! -100149f2: 70c5 strb r5, [r0, #3] -100149f4: 1881 adds r1, r0, r2 -100149f6: 4820 ldr r0, [pc, #128] ; (10014a78 ) -100149f8: f006 f8da bl 1001abb0 -100149fc: 8125 strh r5, [r4, #8] -100149fe: f44f 4000 mov.w r0, #32768 ; 0x8000 -10014a02: f7fa ff7d bl 1000f900 -10014a06: 4631 mov r1, r6 -10014a08: 8160 strh r0, [r4, #10] -10014a0a: 2204 movs r2, #4 -10014a0c: f104 0010 add.w r0, r4, #16 -10014a10: f006 f8ce bl 1001abb0 -10014a14: 4629 mov r1, r5 -10014a16: 2204 movs r2, #4 -10014a18: f104 000c add.w r0, r4, #12 -10014a1c: f006 f8cc bl 1001abb8 -10014a20: 4629 mov r1, r5 -10014a22: 2204 movs r2, #4 -10014a24: f104 0014 add.w r0, r4, #20 -10014a28: f006 f8c6 bl 1001abb8 -10014a2c: 4629 mov r1, r5 -10014a2e: 2204 movs r2, #4 -10014a30: f104 0018 add.w r0, r4, #24 -10014a34: f006 f8c0 bl 1001abb8 -10014a38: 2210 movs r2, #16 -10014a3a: 4910 ldr r1, [pc, #64] ; (10014a7c ) -10014a3c: f104 001c add.w r0, r4, #28 -10014a40: f006 f8b6 bl 1001abb0 -10014a44: 4629 mov r1, r5 -10014a46: 2240 movs r2, #64 ; 0x40 -10014a48: f104 002c add.w r0, r4, #44 ; 0x2c -10014a4c: f006 f8b4 bl 1001abb8 -10014a50: 4629 mov r1, r5 -10014a52: 2280 movs r2, #128 ; 0x80 -10014a54: f104 006c add.w r0, r4, #108 ; 0x6c -10014a58: f006 f8ae bl 1001abb8 -10014a5c: 4b08 ldr r3, [pc, #32] ; (10014a80 ) -10014a5e: 34ec adds r4, #236 ; 0xec -10014a60: 681a ldr r2, [r3, #0] -10014a62: 4629 mov r1, r5 -10014a64: 4620 mov r0, r4 -10014a66: f006 f8a7 bl 1001abb8 -10014a6a: 2204 movs r2, #4 -10014a6c: 4905 ldr r1, [pc, #20] ; (10014a84 ) -10014a6e: 4620 mov r0, r4 -10014a70: f006 f89e bl 1001abb0 -10014a74: b002 add sp, #8 -10014a76: bd70 pop {r4, r5, r6, pc} -10014a78: 10044e88 .word 0x10044e88 -10014a7c: 1004b278 .word 0x1004b278 -10014a80: 1004b28c .word 0x1004b28c -10014a84: 100401cc .word 0x100401cc - -10014a88 : -10014a88: b570 push {r4, r5, r6, lr} -10014a8a: 2504 movs r5, #4 -10014a8c: 2601 movs r6, #1 -10014a8e: 4604 mov r4, r0 -10014a90: 7006 strb r6, [r0, #0] -10014a92: 7045 strb r5, [r0, #1] -10014a94: 462a mov r2, r5 -10014a96: 4932 ldr r1, [pc, #200] ; (10014b60 ) -10014a98: 3002 adds r0, #2 -10014a9a: f006 f889 bl 1001abb0 -10014a9e: 2303 movs r3, #3 -10014aa0: 462a mov r2, r5 -10014aa2: 71a3 strb r3, [r4, #6] -10014aa4: 71e5 strb r5, [r4, #7] -10014aa6: 492f ldr r1, [pc, #188] ; (10014b64 ) -10014aa8: f104 0008 add.w r0, r4, #8 -10014aac: f006 f880 bl 1001abb0 -10014ab0: 2306 movs r3, #6 -10014ab2: 462a mov r2, r5 -10014ab4: 7323 strb r3, [r4, #12] -10014ab6: 7365 strb r5, [r4, #13] -10014ab8: 492a ldr r1, [pc, #168] ; (10014b64 ) -10014aba: f104 000e add.w r0, r4, #14 -10014abe: f006 f877 bl 1001abb0 -10014ac2: 2333 movs r3, #51 ; 0x33 -10014ac4: 462a mov r2, r5 -10014ac6: 74a3 strb r3, [r4, #18] -10014ac8: 74e5 strb r5, [r4, #19] -10014aca: 4927 ldr r1, [pc, #156] ; (10014b68 ) -10014acc: f104 0014 add.w r0, r4, #20 -10014ad0: f006 f86e bl 1001abb0 -10014ad4: 2336 movs r3, #54 ; 0x36 -10014ad6: 462a mov r2, r5 -10014ad8: 7623 strb r3, [r4, #24] -10014ada: 7665 strb r5, [r4, #25] -10014adc: 4921 ldr r1, [pc, #132] ; (10014b64 ) -10014ade: f104 001a add.w r0, r4, #26 -10014ae2: f006 f865 bl 1001abb0 -10014ae6: 231c movs r3, #28 -10014ae8: 462a mov r2, r5 -10014aea: 77a3 strb r3, [r4, #30] -10014aec: 77e5 strb r5, [r4, #31] -10014aee: 491f ldr r1, [pc, #124] ; (10014b6c ) -10014af0: f104 0020 add.w r0, r4, #32 -10014af4: f006 f85c bl 1001abb0 -10014af8: 231a movs r3, #26 -10014afa: 2202 movs r2, #2 -10014afc: f884 3024 strb.w r3, [r4, #36] ; 0x24 -10014b00: f884 2025 strb.w r2, [r4, #37] ; 0x25 -10014b04: 491a ldr r1, [pc, #104] ; (10014b70 ) -10014b06: f104 0026 add.w r0, r4, #38 ; 0x26 -10014b0a: f006 f851 bl 1001abb0 -10014b0e: 231f movs r3, #31 -10014b10: f884 6029 strb.w r6, [r4, #41] ; 0x29 -10014b14: f884 3028 strb.w r3, [r4, #40] ; 0x28 -10014b18: 4632 mov r2, r6 -10014b1a: 2100 movs r1, #0 -10014b1c: f104 002a add.w r0, r4, #42 ; 0x2a -10014b20: f006 f846 bl 1001abb0 -10014b24: 4b13 ldr r3, [pc, #76] ; (10014b74 ) -10014b26: f104 062b add.w r6, r4, #43 ; 0x2b -10014b2a: 681b ldr r3, [r3, #0] -10014b2c: 6a5d ldr r5, [r3, #36] ; 0x24 -10014b2e: b17d cbz r5, 10014b50 -10014b30: 4628 mov r0, r5 -10014b32: f006 f851 bl 1001abd8 -10014b36: b2c0 uxtb r0, r0 -10014b38: b150 cbz r0, 10014b50 -10014b3a: 230c movs r3, #12 -10014b3c: f104 062d add.w r6, r4, #45 ; 0x2d -10014b40: f884 302b strb.w r3, [r4, #43] ; 0x2b -10014b44: f804 0f2c strb.w r0, [r4, #44]! -10014b48: 182b adds r3, r5, r0 -10014b4a: 429d cmp r5, r3 -10014b4c: d103 bne.n 10014b56 -10014b4e: 4406 add r6, r0 -10014b50: 23ff movs r3, #255 ; 0xff -10014b52: 7033 strb r3, [r6, #0] -10014b54: bd70 pop {r4, r5, r6, pc} -10014b56: f815 2b01 ldrb.w r2, [r5], #1 -10014b5a: f804 2f01 strb.w r2, [r4, #1]! -10014b5e: e7f4 b.n 10014b4a -10014b60: 1004b2a4 .word 0x1004b2a4 -10014b64: 1004b29c .word 0x1004b29c -10014b68: 100401d2 .word 0x100401d2 -10014b6c: 1004b2b8 .word 0x1004b2b8 -10014b70: 100401d0 .word 0x100401d0 -10014b74: 1004b2a8 .word 0x1004b2a8 - -10014b78 : -10014b78: 3801 subs r0, #1 -10014b7a: b538 push {r3, r4, r5, lr} -10014b7c: 4c2b ldr r4, [pc, #172] ; (10014c2c ) -10014b7e: 2806 cmp r0, #6 -10014b80: d80a bhi.n 10014b98 -10014b82: e8df f000 tbb [pc, r0] -10014b86: 0904 .short 0x0904 -10014b88: 0909500b .word 0x0909500b -10014b8c: 50 .byte 0x50 -10014b8d: 00 .byte 0x00 -10014b8e: 7823 ldrb r3, [r4, #0] -10014b90: 2b05 cmp r3, #5 -10014b92: d101 bne.n 10014b98 -10014b94: 2301 movs r3, #1 -10014b96: 7023 strb r3, [r4, #0] -10014b98: 7820 ldrb r0, [r4, #0] -10014b9a: bd38 pop {r3, r4, r5, pc} -10014b9c: 7823 ldrb r3, [r4, #0] -10014b9e: 2b01 cmp r3, #1 -10014ba0: d10b bne.n 10014bba -10014ba2: 4823 ldr r0, [pc, #140] ; (10014c30 ) -10014ba4: 78c3 ldrb r3, [r0, #3] -10014ba6: b133 cbz r3, 10014bb6 -10014ba8: 2204 movs r2, #4 -10014baa: 4922 ldr r1, [pc, #136] ; (10014c34 ) -10014bac: f005 fffc bl 1001aba8 -10014bb0: b908 cbnz r0, 10014bb6 -10014bb2: 2303 movs r3, #3 -10014bb4: e7ef b.n 10014b96 -10014bb6: 2304 movs r3, #4 -10014bb8: e7ed b.n 10014b96 -10014bba: 2b05 cmp r3, #5 -10014bbc: d1fb bne.n 10014bb6 -10014bbe: 4d1c ldr r5, [pc, #112] ; (10014c30 ) -10014bc0: 78eb ldrb r3, [r5, #3] -10014bc2: b163 cbz r3, 10014bde -10014bc4: 2204 movs r2, #4 -10014bc6: 491b ldr r1, [pc, #108] ; (10014c34 ) -10014bc8: 4628 mov r0, r5 -10014bca: f005 ffed bl 1001aba8 -10014bce: b930 cbnz r0, 10014bde -10014bd0: 2210 movs r2, #16 -10014bd2: 4919 ldr r1, [pc, #100] ; (10014c38 ) -10014bd4: 4819 ldr r0, [pc, #100] ; (10014c3c ) -10014bd6: f005 ffe7 bl 1001aba8 -10014bda: 2800 cmp r0, #0 -10014bdc: d0e9 beq.n 10014bb2 -10014bde: 4b15 ldr r3, [pc, #84] ; (10014c34 ) -10014be0: 4a17 ldr r2, [pc, #92] ; (10014c40 ) -10014be2: 7818 ldrb r0, [r3, #0] -10014be4: 7811 ldrb r1, [r2, #0] -10014be6: 4288 cmp r0, r1 -10014be8: d1e5 bne.n 10014bb6 -10014bea: 7858 ldrb r0, [r3, #1] -10014bec: 7851 ldrb r1, [r2, #1] -10014bee: 4288 cmp r0, r1 -10014bf0: d1e1 bne.n 10014bb6 -10014bf2: 7899 ldrb r1, [r3, #2] -10014bf4: 7892 ldrb r2, [r2, #2] -10014bf6: 4291 cmp r1, r2 -10014bf8: d1dd bne.n 10014bb6 -10014bfa: 78da ldrb r2, [r3, #3] -10014bfc: 2a00 cmp r2, #0 -10014bfe: d0da beq.n 10014bb6 -10014c00: 2101 movs r1, #1 -10014c02: 0950 lsrs r0, r2, #5 -10014c04: f002 021f and.w r2, r2, #31 -10014c08: fa01 f202 lsl.w r2, r1, r2 -10014c0c: 490d ldr r1, [pc, #52] ; (10014c44 ) -10014c0e: f851 1020 ldr.w r1, [r1, r0, lsl #2] -10014c12: 420a tst r2, r1 -10014c14: d1cf bne.n 10014bb6 -10014c16: 681b ldr r3, [r3, #0] -10014c18: 2210 movs r2, #16 -10014c1a: 4907 ldr r1, [pc, #28] ; (10014c38 ) -10014c1c: 4807 ldr r0, [pc, #28] ; (10014c3c ) -10014c1e: 602b str r3, [r5, #0] -10014c20: f005 ffc6 bl 1001abb0 -10014c24: e7c5 b.n 10014bb2 -10014c26: 2305 movs r3, #5 -10014c28: e7b5 b.n 10014b96 -10014c2a: bf00 nop -10014c2c: 10044e8c .word 0x10044e8c -10014c30: 1004b290 .word 0x1004b290 -10014c34: 1004b274 .word 0x1004b274 -10014c38: 1004b278 .word 0x1004b278 -10014c3c: 1004b264 .word 0x1004b264 -10014c40: 1004b2ac .word 0x1004b2ac -10014c44: 1004b2bc .word 0x1004b2bc - -10014c48 : -10014c48: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10014c4c: f8bd 3030 ldrh.w r3, [sp, #48] ; 0x30 -10014c50: 4615 mov r5, r2 -10014c52: 4e9f ldr r6, [pc, #636] ; (10014ed0 ) -10014c54: 6852 ldr r2, [r2, #4] -10014c56: 2b44 cmp r3, #68 ; 0x44 -10014c58: 4688 mov r8, r1 -10014c5a: 6032 str r2, [r6, #0] -10014c5c: f040 8136 bne.w 10014ecc -10014c60: 682f ldr r7, [r5, #0] -10014c62: f9b5 4008 ldrsh.w r4, [r5, #8] -10014c66: b16f cbz r7, 10014c84 -10014c68: 2100 movs r1, #0 -10014c6a: 4628 mov r0, r5 -10014c6c: f7fc fb79 bl 10011362 -10014c70: 8903 ldrh r3, [r0, #8] -10014c72: 4607 mov r7, r0 -10014c74: 42a3 cmp r3, r4 -10014c76: d005 beq.n 10014c84 -10014c78: 4628 mov r0, r5 -10014c7a: b003 add sp, #12 -10014c7c: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10014c80: f7fc b9fb b.w 1001107a -10014c84: 6869 ldr r1, [r5, #4] -10014c86: 2210 movs r2, #16 -10014c88: 6031 str r1, [r6, #0] -10014c8a: 4892 ldr r0, [pc, #584] ; (10014ed4 ) -10014c8c: 311c adds r1, #28 -10014c8e: f005 ff8f bl 1001abb0 -10014c92: 6830 ldr r0, [r6, #0] -10014c94: 686a ldr r2, [r5, #4] -10014c96: 30ec adds r0, #236 ; 0xec -10014c98: 896b ldrh r3, [r5, #10] -10014c9a: 1a82 subs r2, r0, r2 -10014c9c: f8df 926c ldr.w r9, [pc, #620] ; 10014f0c -10014ca0: 1a9b subs r3, r3, r2 -10014ca2: 498d ldr r1, [pc, #564] ; (10014ed8 ) -10014ca4: 2204 movs r2, #4 -10014ca6: f8c9 3000 str.w r3, [r9] -10014caa: f005 ff7d bl 1001aba8 -10014cae: 2800 cmp r0, #0 -10014cb0: f040 80a5 bne.w 10014dfe -10014cb4: 4682 mov sl, r0 -10014cb6: f8d9 3000 ldr.w r3, [r9] -10014cba: 6834 ldr r4, [r6, #0] -10014cbc: f1a3 0904 sub.w r9, r3, #4 -10014cc0: 34f0 adds r4, #240 ; 0xf0 -10014cc2: fa0f f989 sxth.w r9, r9 -10014cc6: f8df b214 ldr.w fp, [pc, #532] ; 10014edc -10014cca: 44a1 add r9, r4 -10014ccc: 45a1 cmp r9, r4 -10014cce: d83e bhi.n 10014d4e -10014cd0: 4650 mov r0, sl -10014cd2: f7ff ff51 bl 10014b78 -10014cd6: 2803 cmp r0, #3 -10014cd8: f000 80b2 beq.w 10014e40 -10014cdc: 2804 cmp r0, #4 -10014cde: f000 80d5 beq.w 10014e8c -10014ce2: 2801 cmp r0, #1 -10014ce4: f040 808b bne.w 10014dfe -10014ce8: 686b ldr r3, [r5, #4] -10014cea: 4c7c ldr r4, [pc, #496] ; (10014edc ) -10014cec: 6033 str r3, [r6, #0] -10014cee: 4b7c ldr r3, [pc, #496] ; (10014ee0 ) -10014cf0: 78da ldrb r2, [r3, #3] -10014cf2: 4699 mov r9, r3 -10014cf4: 2a00 cmp r2, #0 -10014cf6: d03b beq.n 10014d70 -10014cf8: 2204 movs r2, #4 -10014cfa: 4621 mov r1, r4 -10014cfc: 4618 mov r0, r3 -10014cfe: f005 ff53 bl 1001aba8 -10014d02: 2800 cmp r0, #0 -10014d04: d134 bne.n 10014d70 -10014d06: 2210 movs r2, #16 -10014d08: 4972 ldr r1, [pc, #456] ; (10014ed4 ) -10014d0a: 4876 ldr r0, [pc, #472] ; (10014ee4 ) -10014d0c: f005 ff4c bl 1001aba8 -10014d10: bb70 cbnz r0, 10014d70 -10014d12: 78e4 ldrb r4, [r4, #3] -10014d14: 2c00 cmp r4, #0 -10014d16: d145 bne.n 10014da4 -10014d18: 2300 movs r3, #0 -10014d1a: f8df a1f4 ldr.w sl, [pc, #500] ; 10014f10 -10014d1e: 4619 mov r1, r3 -10014d20: f04f 32ff mov.w r2, #4294967295 -10014d24: f8da 0000 ldr.w r0, [sl] -10014d28: f000 ff46 bl 10015bb8 -10014d2c: f04f 0e01 mov.w lr, #1 -10014d30: 4b6d ldr r3, [pc, #436] ; (10014ee8 ) -10014d32: 486e ldr r0, [pc, #440] ; (10014eec ) -10014d34: 781c ldrb r4, [r3, #0] -10014d36: 4b6e ldr r3, [pc, #440] ; (10014ef0 ) -10014d38: 7819 ldrb r1, [r3, #0] -10014d3a: 428c cmp r4, r1 -10014d3c: d967 bls.n 10014e0e -10014d3e: 2300 movs r3, #0 -10014d40: f8da 0000 ldr.w r0, [sl] -10014d44: 461a mov r2, r3 -10014d46: 4619 mov r1, r3 -10014d48: f000 fe48 bl 100159dc -10014d4c: e070 b.n 10014e30 -10014d4e: 7823 ldrb r3, [r4, #0] -10014d50: 2b32 cmp r3, #50 ; 0x32 -10014d52: d007 beq.n 10014d64 -10014d54: 2b35 cmp r3, #53 ; 0x35 -10014d56: d101 bne.n 10014d5c -10014d58: f894 a002 ldrb.w sl, [r4, #2] -10014d5c: 7863 ldrb r3, [r4, #1] -10014d5e: 3302 adds r3, #2 -10014d60: 441c add r4, r3 -10014d62: e7b3 b.n 10014ccc -10014d64: 2204 movs r2, #4 -10014d66: 1ca1 adds r1, r4, #2 -10014d68: 4658 mov r0, fp -10014d6a: f005 ff21 bl 1001abb0 -10014d6e: e7f5 b.n 10014d5c -10014d70: 4b60 ldr r3, [pc, #384] ; (10014ef4 ) -10014d72: 7821 ldrb r1, [r4, #0] -10014d74: 781a ldrb r2, [r3, #0] -10014d76: 4291 cmp r1, r2 -10014d78: d1ce bne.n 10014d18 -10014d7a: 7861 ldrb r1, [r4, #1] -10014d7c: 785a ldrb r2, [r3, #1] -10014d7e: 4291 cmp r1, r2 -10014d80: d1ca bne.n 10014d18 -10014d82: 78a2 ldrb r2, [r4, #2] -10014d84: 789b ldrb r3, [r3, #2] -10014d86: 429a cmp r2, r3 -10014d88: d1c6 bne.n 10014d18 -10014d8a: 78e4 ldrb r4, [r4, #3] -10014d8c: 2c00 cmp r4, #0 -10014d8e: d0c3 beq.n 10014d18 -10014d90: 2301 movs r3, #1 -10014d92: f004 021f and.w r2, r4, #31 -10014d96: 4093 lsls r3, r2 -10014d98: 4a54 ldr r2, [pc, #336] ; (10014eec ) -10014d9a: 0961 lsrs r1, r4, #5 -10014d9c: f852 2021 ldr.w r2, [r2, r1, lsl #2] -10014da0: 4213 tst r3, r2 -10014da2: d1b9 bne.n 10014d18 -10014da4: 4a53 ldr r2, [pc, #332] ; (10014ef4 ) -10014da6: 484f ldr r0, [pc, #316] ; (10014ee4 ) -10014da8: 7853 ldrb r3, [r2, #1] -10014daa: 7891 ldrb r1, [r2, #2] -10014dac: 021b lsls r3, r3, #8 -10014dae: 7812 ldrb r2, [r2, #0] -10014db0: ea43 4301 orr.w r3, r3, r1, lsl #16 -10014db4: 4313 orrs r3, r2 -10014db6: ea43 6404 orr.w r4, r3, r4, lsl #24 -10014dba: 2210 movs r2, #16 -10014dbc: 4945 ldr r1, [pc, #276] ; (10014ed4 ) -10014dbe: f8c9 4000 str.w r4, [r9] -10014dc2: f005 fef5 bl 1001abb0 -10014dc6: f8d9 1000 ldr.w r1, [r9] -10014dca: 6830 ldr r0, [r6, #0] -10014dcc: f7ff fe04 bl 100149d8 -10014dd0: 2335 movs r3, #53 ; 0x35 -10014dd2: 6830 ldr r0, [r6, #0] -10014dd4: f880 30f0 strb.w r3, [r0, #240] ; 0xf0 -10014dd8: 2301 movs r3, #1 -10014dda: f880 30f1 strb.w r3, [r0, #241] ; 0xf1 -10014dde: 2302 movs r3, #2 -10014de0: 30f3 adds r0, #243 ; 0xf3 -10014de2: f800 3c01 strb.w r3, [r0, #-1] -10014de6: f7ff fe4f bl 10014a88 -10014dea: 4b43 ldr r3, [pc, #268] ; (10014ef8 ) -10014dec: 4843 ldr r0, [pc, #268] ; (10014efc ) -10014dee: 681b ldr r3, [r3, #0] -10014df0: 4a43 ldr r2, [pc, #268] ; (10014f00 ) -10014df2: 9300 str r3, [sp, #0] -10014df4: 4629 mov r1, r5 -10014df6: 2344 movs r3, #68 ; 0x44 -10014df8: 6800 ldr r0, [r0, #0] -10014dfa: f7fe ff9b bl 10013d34 -10014dfe: 4640 mov r0, r8 -10014e00: f7ff f858 bl 10013eb4 -10014e04: 2f00 cmp r7, #0 -10014e06: f43f af37 beq.w 10014c78 -10014e0a: 4638 mov r0, r7 -10014e0c: e735 b.n 10014c7a -10014e0e: 0962 lsrs r2, r4, #5 -10014e10: f004 031f and.w r3, r4, #31 -10014e14: f850 2022 ldr.w r2, [r0, r2, lsl #2] -10014e18: fa0e f303 lsl.w r3, lr, r3 -10014e1c: 4013 ands r3, r2 -10014e1e: d10c bne.n 10014e3a -10014e20: 461a mov r2, r3 -10014e22: 4619 mov r1, r3 -10014e24: f8da 0000 ldr.w r0, [sl] -10014e28: f000 fdd8 bl 100159dc -10014e2c: 2c00 cmp r4, #0 -10014e2e: d1b9 bne.n 10014da4 -10014e30: 4834 ldr r0, [pc, #208] ; (10014f04 ) -10014e32: f005 fe95 bl 1001ab60 -10014e36: 2400 movs r4, #0 -10014e38: e7b4 b.n 10014da4 -10014e3a: 3401 adds r4, #1 -10014e3c: b2e4 uxtb r4, r4 -10014e3e: e77c b.n 10014d3a -10014e40: f8df 909c ldr.w r9, [pc, #156] ; 10014ee0 -10014e44: 6868 ldr r0, [r5, #4] -10014e46: f8d9 1000 ldr.w r1, [r9] -10014e4a: 6030 str r0, [r6, #0] -10014e4c: f7ff fdc4 bl 100149d8 -10014e50: 2335 movs r3, #53 ; 0x35 -10014e52: 6830 ldr r0, [r6, #0] -10014e54: 2405 movs r4, #5 -10014e56: f880 30f0 strb.w r3, [r0, #240] ; 0xf0 -10014e5a: 2301 movs r3, #1 -10014e5c: f880 40f2 strb.w r4, [r0, #242] ; 0xf2 -10014e60: f880 30f1 strb.w r3, [r0, #241] ; 0xf1 -10014e64: 30f3 adds r0, #243 ; 0xf3 -10014e66: f7ff fe0f bl 10014a88 -10014e6a: 4b23 ldr r3, [pc, #140] ; (10014ef8 ) -10014e6c: 4823 ldr r0, [pc, #140] ; (10014efc ) -10014e6e: 681b ldr r3, [r3, #0] -10014e70: 4a23 ldr r2, [pc, #140] ; (10014f00 ) -10014e72: 9300 str r3, [sp, #0] -10014e74: 4629 mov r1, r5 -10014e76: 2344 movs r3, #68 ; 0x44 -10014e78: 6800 ldr r0, [r0, #0] -10014e7a: f7fe ff5b bl 10013d34 -10014e7e: f899 0003 ldrb.w r0, [r9, #3] -10014e82: f7ff fd87 bl 10014994 -10014e86: 4b20 ldr r3, [pc, #128] ; (10014f08 ) -10014e88: 701c strb r4, [r3, #0] -10014e8a: e7b8 b.n 10014dfe -10014e8c: 6868 ldr r0, [r5, #4] -10014e8e: 2100 movs r1, #0 -10014e90: 6030 str r0, [r6, #0] -10014e92: f7ff fda1 bl 100149d8 -10014e96: 2235 movs r2, #53 ; 0x35 -10014e98: 6833 ldr r3, [r6, #0] -10014e9a: 4818 ldr r0, [pc, #96] ; (10014efc ) -10014e9c: f883 20f0 strb.w r2, [r3, #240] ; 0xf0 -10014ea0: 2201 movs r2, #1 -10014ea2: f883 20f1 strb.w r2, [r3, #241] ; 0xf1 -10014ea6: 2206 movs r2, #6 -10014ea8: f883 20f2 strb.w r2, [r3, #242] ; 0xf2 -10014eac: 22ff movs r2, #255 ; 0xff -10014eae: f883 20f3 strb.w r2, [r3, #243] ; 0xf3 -10014eb2: 4b11 ldr r3, [pc, #68] ; (10014ef8 ) -10014eb4: 4a12 ldr r2, [pc, #72] ; (10014f00 ) -10014eb6: 681b ldr r3, [r3, #0] -10014eb8: 4629 mov r1, r5 -10014eba: 9300 str r3, [sp, #0] -10014ebc: 6800 ldr r0, [r0, #0] -10014ebe: 2344 movs r3, #68 ; 0x44 -10014ec0: f7fe ff38 bl 10013d34 -10014ec4: 2205 movs r2, #5 -10014ec6: 4b10 ldr r3, [pc, #64] ; (10014f08 ) -10014ec8: 701a strb r2, [r3, #0] -10014eca: e798 b.n 10014dfe -10014ecc: 2700 movs r7, #0 -10014ece: e796 b.n 10014dfe -10014ed0: 1004b288 .word 0x1004b288 -10014ed4: 1004b278 .word 0x1004b278 -10014ed8: 100401cc .word 0x100401cc -10014edc: 1004b274 .word 0x1004b274 -10014ee0: 1004b290 .word 0x1004b290 -10014ee4: 1004b264 .word 0x1004b264 -10014ee8: 1004b295 .word 0x1004b295 -10014eec: 1004b2bc .word 0x1004b2bc -10014ef0: 1004b294 .word 0x1004b294 -10014ef4: 1004b2ac .word 0x1004b2ac -10014ef8: 1004b2a8 .word 0x1004b2a8 -10014efc: 1004b2b0 .word 0x1004b2b0 -10014f00: 1004b2b4 .word 0x1004b2b4 -10014f04: 100401ec .word 0x100401ec -10014f08: 10044e8c .word 0x10044e8c -10014f0c: 1004b28c .word 0x1004b28c -10014f10: 1004b298 .word 0x1004b298 - -10014f14 : -10014f14: b510 push {r4, lr} -10014f16: 4c07 ldr r4, [pc, #28] ; (10014f34 ) -10014f18: 6820 ldr r0, [r4, #0] -10014f1a: b118 cbz r0, 10014f24 -10014f1c: f7fe ffd6 bl 10013ecc -10014f20: 2300 movs r3, #0 -10014f22: 6023 str r3, [r4, #0] -10014f24: 4c04 ldr r4, [pc, #16] ; (10014f38 ) -10014f26: 6820 ldr r0, [r4, #0] -10014f28: b118 cbz r0, 10014f32 -10014f2a: f000 fee8 bl 10015cfe -10014f2e: 2300 movs r3, #0 -10014f30: 6023 str r3, [r4, #0] -10014f32: bd10 pop {r4, pc} -10014f34: 1004b2b0 .word 0x1004b2b0 -10014f38: 1004b298 .word 0x1004b298 - -10014f3c : -10014f3c: b5f8 push {r3, r4, r5, r6, r7, lr} -10014f3e: 4b30 ldr r3, [pc, #192] ; (10015000 ) -10014f40: 4604 mov r4, r0 -10014f42: 6018 str r0, [r3, #0] -10014f44: f7ff ffe6 bl 10014f14 -10014f48: f7fe ffd4 bl 10013ef4 -10014f4c: 4d2d ldr r5, [pc, #180] ; (10015004 ) -10014f4e: 6028 str r0, [r5, #0] -10014f50: b920 cbnz r0, 10014f5c -10014f52: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -10014f56: 482c ldr r0, [pc, #176] ; (10015008 ) -10014f58: f005 be02 b.w 1001ab60 -10014f5c: f04f 36ff mov.w r6, #4294967295 -10014f60: 4b2a ldr r3, [pc, #168] ; (1001500c ) -10014f62: 2220 movs r2, #32 -10014f64: 2100 movs r1, #0 -10014f66: 482a ldr r0, [pc, #168] ; (10015010 ) -10014f68: 601e str r6, [r3, #0] -10014f6a: f005 fe25 bl 1001abb8 -10014f6e: 4b29 ldr r3, [pc, #164] ; (10015014 ) -10014f70: 4a29 ldr r2, [pc, #164] ; (10015018 ) -10014f72: 7818 ldrb r0, [r3, #0] -10014f74: 7811 ldrb r1, [r2, #0] -10014f76: 4f29 ldr r7, [pc, #164] ; (1001501c ) -10014f78: 4301 orrs r1, r0 -10014f7a: bf04 itt eq -10014f7c: 2102 moveq r1, #2 -10014f7e: 7011 strbeq r1, [r2, #0] -10014f80: f04f 0204 mov.w r2, #4 -10014f84: bf08 it eq -10014f86: 701e strbeq r6, [r3, #0] -10014f88: 18a1 adds r1, r4, r2 -10014f8a: 4e25 ldr r6, [pc, #148] ; (10015020 ) -10014f8c: 4638 mov r0, r7 -10014f8e: f005 fe0f bl 1001abb0 -10014f92: f104 0108 add.w r1, r4, #8 -10014f96: 2204 movs r2, #4 -10014f98: 4822 ldr r0, [pc, #136] ; (10015024 ) -10014f9a: f005 fe09 bl 1001abb0 -10014f9e: f104 010c add.w r1, r4, #12 -10014fa2: 2204 movs r2, #4 -10014fa4: 4630 mov r0, r6 -10014fa6: f005 fe03 bl 1001abb0 -10014faa: 68a2 ldr r2, [r4, #8] -10014fac: 6863 ldr r3, [r4, #4] -10014fae: 491e ldr r1, [pc, #120] ; (10015028 ) -10014fb0: ea03 0002 and.w r0, r3, r2 -10014fb4: ea63 0302 orn r3, r3, r2 -10014fb8: 4a1c ldr r2, [pc, #112] ; (1001502c ) -10014fba: 6008 str r0, [r1, #0] -10014fbc: 2001 movs r0, #1 -10014fbe: 6013 str r3, [r2, #0] -10014fc0: f000 fd86 bl 10015ad0 -10014fc4: 4b1a ldr r3, [pc, #104] ; (10015030 ) -10014fc6: 2204 movs r2, #4 -10014fc8: 6018 str r0, [r3, #0] -10014fca: 2100 movs r1, #0 -10014fcc: 4819 ldr r0, [pc, #100] ; (10015034 ) -10014fce: f005 fdf3 bl 1001abb8 -10014fd2: 2210 movs r2, #16 -10014fd4: 2100 movs r1, #0 -10014fd6: 4818 ldr r0, [pc, #96] ; (10015038 ) -10014fd8: f005 fdee bl 1001abb8 -10014fdc: 78f8 ldrb r0, [r7, #3] -10014fde: f7ff fcd9 bl 10014994 -10014fe2: 78f0 ldrb r0, [r6, #3] -10014fe4: f7ff fcd6 bl 10014994 -10014fe8: 2243 movs r2, #67 ; 0x43 -10014fea: 4914 ldr r1, [pc, #80] ; (1001503c ) -10014fec: 6828 ldr r0, [r5, #0] -10014fee: f7fe fe4f bl 10013c90 -10014ff2: 6828 ldr r0, [r5, #0] -10014ff4: 2200 movs r2, #0 -10014ff6: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -10014ffa: 4911 ldr r1, [pc, #68] ; (10015040 ) -10014ffc: f7fe bf62 b.w 10013ec4 -10015000: 1004b2a8 .word 0x1004b2a8 -10015004: 1004b2b0 .word 0x1004b2b0 -10015008: 100401d6 .word 0x100401d6 -1001500c: 1004b2b4 .word 0x1004b2b4 -10015010: 1004b2bc .word 0x1004b2bc -10015014: 1004b294 .word 0x1004b294 -10015018: 1004b295 .word 0x1004b295 -1001501c: 1004b29c .word 0x1004b29c -10015020: 1004b2a0 .word 0x1004b2a0 -10015024: 1004b2a4 .word 0x1004b2a4 -10015028: 1004b2ac .word 0x1004b2ac -1001502c: 1004b2b8 .word 0x1004b2b8 -10015030: 1004b298 .word 0x1004b298 -10015034: 1004b290 .word 0x1004b290 -10015038: 1004b264 .word 0x1004b264 -1001503c: 10040070 .word 0x10040070 -10015040: 10014c49 .word 0x10014c49 - -10015044 : -10015044: b510 push {r4, lr} -10015046: 4b0f ldr r3, [pc, #60] ; (10015084 ) -10015048: 681a ldr r2, [r3, #0] -1001504a: 4282 cmp r2, r0 -1001504c: d318 bcc.n 10015080 -1001504e: 685c ldr r4, [r3, #4] -10015050: 1919 adds r1, r3, r4 -10015052: 4288 cmp r0, r1 -10015054: bf01 itttt eq -10015056: 6841 ldreq r1, [r0, #4] -10015058: 4618 moveq r0, r3 -1001505a: 1909 addeq r1, r1, r4 -1001505c: 6059 streq r1, [r3, #4] -1001505e: 6844 ldr r4, [r0, #4] -10015060: 1901 adds r1, r0, r4 -10015062: 428a cmp r2, r1 -10015064: d107 bne.n 10015076 -10015066: 4908 ldr r1, [pc, #32] ; (10015088 ) -10015068: 6809 ldr r1, [r1, #0] -1001506a: 428a cmp r2, r1 -1001506c: bf1f itttt ne -1001506e: 6851 ldrne r1, [r2, #4] -10015070: 6812 ldrne r2, [r2, #0] -10015072: 1909 addne r1, r1, r4 -10015074: 6041 strne r1, [r0, #4] -10015076: 4298 cmp r0, r3 -10015078: 6002 str r2, [r0, #0] -1001507a: bf18 it ne -1001507c: 6018 strne r0, [r3, #0] -1001507e: bd10 pop {r4, pc} -10015080: 4613 mov r3, r2 -10015082: e7e1 b.n 10015048 -10015084: 1004b2f4 .word 0x1004b2f4 -10015088: 1004b2e8 .word 0x1004b2e8 - -1001508c : -1001508c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10015090: f005 fcec bl 1001aa6c -10015094: 2200 movs r2, #0 -10015096: 4611 mov r1, r2 -10015098: 4614 mov r4, r2 -1001509a: 4696 mov lr, r2 -1001509c: 4d1e ldr r5, [pc, #120] ; (10015118 ) -1001509e: 3005 adds r0, #5 -100150a0: 682e ldr r6, [r5, #0] -100150a2: 4f1e ldr r7, [pc, #120] ; (1001511c ) -100150a4: f8df c080 ldr.w ip, [pc, #128] ; 10015128 -100150a8: b2c0 uxtb r0, r0 -100150aa: eb07 03c1 add.w r3, r7, r1, lsl #3 -100150ae: 685b ldr r3, [r3, #4] -100150b0: b93b cbnz r3, 100150c2 -100150b2: b102 cbz r2, 100150b6 -100150b4: 602e str r6, [r5, #0] -100150b6: 4b1a ldr r3, [pc, #104] ; (10015120 ) -100150b8: 601c str r4, [r3, #0] -100150ba: 4b1a ldr r3, [pc, #104] ; (10015124 ) -100150bc: 601c str r4, [r3, #0] -100150be: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100150c2: f857 8031 ldr.w r8, [r7, r1, lsl #3] -100150c6: f1b8 5f00 cmp.w r8, #536870912 ; 0x20000000 -100150ca: d901 bls.n 100150d0 -100150cc: 2802 cmp r0, #2 -100150ce: d921 bls.n 10015114 -100150d0: f018 0f07 tst.w r8, #7 -100150d4: 4642 mov r2, r8 -100150d6: d007 beq.n 100150e8 -100150d8: f108 0807 add.w r8, r8, #7 -100150dc: f028 0807 bic.w r8, r8, #7 -100150e0: 4413 add r3, r2 -100150e2: 4642 mov r2, r8 -100150e4: eba3 0308 sub.w r3, r3, r8 -100150e8: b919 cbnz r1, 100150f2 -100150ea: f8cc 2000 str.w r2, [ip] -100150ee: f8cc 1004 str.w r1, [ip, #4] -100150f2: 4413 add r3, r2 -100150f4: 3b08 subs r3, #8 -100150f6: f023 0307 bic.w r3, r3, #7 -100150fa: eba3 0802 sub.w r8, r3, r2 -100150fe: f8c3 e004 str.w lr, [r3, #4] -10015102: f8c3 e000 str.w lr, [r3] -10015106: e882 0108 stmia.w r2, {r3, r8} -1001510a: b106 cbz r6, 1001510e -1001510c: 6032 str r2, [r6, #0] -1001510e: 461e mov r6, r3 -10015110: 2201 movs r2, #1 -10015112: 4444 add r4, r8 -10015114: 3101 adds r1, #1 -10015116: e7c8 b.n 100150aa -10015118: 1004b2e8 .word 0x1004b2e8 -1001511c: 10044b78 .word 0x10044b78 -10015120: 1004b2f0 .word 0x1004b2f0 -10015124: 1004b2ec .word 0x1004b2ec -10015128: 1004b2f4 .word 0x1004b2f4 - -1001512c : -1001512c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10015130: 4e2b ldr r6, [pc, #172] ; (100151e0 ) -10015132: 4604 mov r4, r0 -10015134: 6833 ldr r3, [r6, #0] -10015136: b90b cbnz r3, 1001513c -10015138: f7ff ffa8 bl 1001508c -1001513c: f001 f862 bl 10016204 -10015140: 2c00 cmp r4, #0 -10015142: db13 blt.n 1001516c -10015144: d049 beq.n 100151da -10015146: 3408 adds r4, #8 -10015148: 0762 lsls r2, r4, #29 -1001514a: d002 beq.n 10015152 -1001514c: f024 0407 bic.w r4, r4, #7 -10015150: 3408 adds r4, #8 -10015152: 4b24 ldr r3, [pc, #144] ; (100151e4 ) -10015154: 681f ldr r7, [r3, #0] -10015156: 4698 mov r8, r3 -10015158: 42a7 cmp r7, r4 -1001515a: d307 bcc.n 1001516c -1001515c: 4b22 ldr r3, [pc, #136] ; (100151e8 ) -1001515e: 681d ldr r5, [r3, #0] -10015160: 686a ldr r2, [r5, #4] -10015162: 42a2 cmp r2, r4 -10015164: d304 bcc.n 10015170 -10015166: 6831 ldr r1, [r6, #0] -10015168: 428d cmp r5, r1 -1001516a: d107 bne.n 1001517c -1001516c: 2600 movs r6, #0 -1001516e: e020 b.n 100151b2 -10015170: 6829 ldr r1, [r5, #0] -10015172: 2900 cmp r1, #0 -10015174: d0f7 beq.n 10015166 -10015176: 462b mov r3, r5 -10015178: 460d mov r5, r1 -1001517a: e7f1 b.n 10015160 -1001517c: 681e ldr r6, [r3, #0] -1001517e: 6829 ldr r1, [r5, #0] -10015180: 1b12 subs r2, r2, r4 -10015182: 2a10 cmp r2, #16 -10015184: f106 0608 add.w r6, r6, #8 -10015188: 6019 str r1, [r3, #0] -1001518a: d904 bls.n 10015196 -1001518c: 1928 adds r0, r5, r4 -1001518e: 6042 str r2, [r0, #4] -10015190: 606c str r4, [r5, #4] -10015192: f7ff ff57 bl 10015044 -10015196: 686b ldr r3, [r5, #4] -10015198: 4914 ldr r1, [pc, #80] ; (100151ec ) -1001519a: 1aff subs r7, r7, r3 -1001519c: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000 -100151a0: 606b str r3, [r5, #4] -100151a2: 2300 movs r3, #0 -100151a4: 6808 ldr r0, [r1, #0] -100151a6: f8c8 7000 str.w r7, [r8] -100151aa: 4287 cmp r7, r0 -100151ac: bf38 it cc -100151ae: 600f strcc r7, [r1, #0] -100151b0: 602b str r3, [r5, #0] -100151b2: f001 f8d1 bl 10016358 -100151b6: b96e cbnz r6, 100151d4 -100151b8: 4b0d ldr r3, [pc, #52] ; (100151f0 ) -100151ba: 681b ldr r3, [r3, #0] -100151bc: 029b lsls r3, r3, #10 -100151be: d509 bpl.n 100151d4 -100151c0: 4d0c ldr r5, [pc, #48] ; (100151f4 ) -100151c2: 480d ldr r0, [pc, #52] ; (100151f8 ) -100151c4: 47a8 blx r5 -100151c6: 4b07 ldr r3, [pc, #28] ; (100151e4 ) -100151c8: 4621 mov r1, r4 -100151ca: 681a ldr r2, [r3, #0] -100151cc: 480b ldr r0, [pc, #44] ; (100151fc ) -100151ce: 47a8 blx r5 -100151d0: 480b ldr r0, [pc, #44] ; (10015200 ) -100151d2: 47a8 blx r5 -100151d4: 4630 mov r0, r6 -100151d6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100151da: 4626 mov r6, r4 -100151dc: e7e9 b.n 100151b2 -100151de: bf00 nop -100151e0: 1004b2e8 .word 0x1004b2e8 -100151e4: 1004b2ec .word 0x1004b2ec -100151e8: 1004b2f4 .word 0x1004b2f4 -100151ec: 1004b2f0 .word 0x1004b2f0 -100151f0: 1000030c .word 0x1000030c -100151f4: 0000f39d .word 0x0000f39d -100151f8: 100401fb .word 0x100401fb -100151fc: 1004020b .word 0x1004020b -10015200: 100407ab .word 0x100407ab - -10015204 <__vPortFree>: -10015204: b510 push {r4, lr} -10015206: 4604 mov r4, r0 -10015208: b1d0 cbz r0, 10015240 <__vPortFree+0x3c> -1001520a: f850 3c04 ldr.w r3, [r0, #-4] -1001520e: 2b00 cmp r3, #0 -10015210: da16 bge.n 10015240 <__vPortFree+0x3c> -10015212: f850 2c08 ldr.w r2, [r0, #-8] -10015216: b99a cbnz r2, 10015240 <__vPortFree+0x3c> -10015218: f023 4300 bic.w r3, r3, #2147483648 ; 0x80000000 -1001521c: f840 3c04 str.w r3, [r0, #-4] -10015220: f000 fff0 bl 10016204 -10015224: 4a07 ldr r2, [pc, #28] ; (10015244 <__vPortFree+0x40>) -10015226: f854 3c04 ldr.w r3, [r4, #-4] -1001522a: 6811 ldr r1, [r2, #0] -1001522c: f1a4 0008 sub.w r0, r4, #8 -10015230: 440b add r3, r1 -10015232: 6013 str r3, [r2, #0] -10015234: f7ff ff06 bl 10015044 -10015238: e8bd 4010 ldmia.w sp!, {r4, lr} -1001523c: f001 b88c b.w 10016358 -10015240: bd10 pop {r4, pc} -10015242: bf00 nop -10015244: 1004b2ec .word 0x1004b2ec - -10015248 : -10015248: 4b03 ldr r3, [pc, #12] ; (10015258 ) -1001524a: 6018 str r0, [r3, #0] -1001524c: 4b03 ldr r3, [pc, #12] ; (1001525c ) -1001524e: 6019 str r1, [r3, #0] -10015250: 4b03 ldr r3, [pc, #12] ; (10015260 ) -10015252: 601a str r2, [r3, #0] -10015254: 4770 bx lr -10015256: bf00 nop -10015258: 1004b2dc .word 0x1004b2dc -1001525c: 1004b2e4 .word 0x1004b2e4 -10015260: 1004b2e0 .word 0x1004b2e0 - -10015264 : -10015264: 4a08 ldr r2, [pc, #32] ; (10015288 ) -10015266: 4603 mov r3, r0 -10015268: 6812 ldr r2, [r2, #0] -1001526a: 4290 cmp r0, r2 -1001526c: d307 bcc.n 1001527e -1001526e: 4a07 ldr r2, [pc, #28] ; (1001528c ) -10015270: 6812 ldr r2, [r2, #0] -10015272: 4290 cmp r0, r2 -10015274: d203 bcs.n 1001527e -10015276: 4b06 ldr r3, [pc, #24] ; (10015290 ) -10015278: 681b ldr r3, [r3, #0] -1001527a: b11b cbz r3, 10015284 -1001527c: 4718 bx r3 -1001527e: 4618 mov r0, r3 -10015280: f7ff bfc0 b.w 10015204 <__vPortFree> -10015284: 4770 bx lr -10015286: bf00 nop -10015288: 1004b2e0 .word 0x1004b2e0 -1001528c: 1004b2e4 .word 0x1004b2e4 -10015290: 1004b2dc .word 0x1004b2dc - -10015294 : -10015294: 4b01 ldr r3, [pc, #4] ; (1001529c ) -10015296: 6818 ldr r0, [r3, #0] -10015298: 4770 bx lr -1001529a: bf00 nop -1001529c: 1004b2ec .word 0x1004b2ec - -100152a0 : -100152a0: 4b01 ldr r3, [pc, #4] ; (100152a8 ) -100152a2: 6818 ldr r0, [r3, #0] -100152a4: 4770 bx lr -100152a6: bf00 nop -100152a8: 1004b2f0 .word 0x1004b2f0 - -100152ac : -100152ac: 4b20 ldr r3, [pc, #128] ; (10015330 ) -100152ae: b570 push {r4, r5, r6, lr} -100152b0: 681b ldr r3, [r3, #0] -100152b2: 4604 mov r4, r0 -100152b4: 4298 cmp r0, r3 -100152b6: 460d mov r5, r1 -100152b8: d30d bcc.n 100152d6 -100152ba: 4b1e ldr r3, [pc, #120] ; (10015334 ) -100152bc: 681b ldr r3, [r3, #0] -100152be: 4298 cmp r0, r3 -100152c0: d209 bcs.n 100152d6 -100152c2: 4b1d ldr r3, [pc, #116] ; (10015338 ) -100152c4: 681b ldr r3, [r3, #0] -100152c6: b103 cbz r3, 100152ca -100152c8: 4798 blx r3 -100152ca: b155 cbz r5, 100152e2 -100152cc: 4628 mov r0, r5 -100152ce: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -100152d2: f7ff bf2b b.w 1001512c -100152d6: 2c00 cmp r4, #0 -100152d8: d0f7 beq.n 100152ca -100152da: b925 cbnz r5, 100152e6 -100152dc: 4620 mov r0, r4 -100152de: f7ff ffc1 bl 10015264 -100152e2: 462e mov r6, r5 -100152e4: e021 b.n 1001532a -100152e6: 4628 mov r0, r5 -100152e8: f7ff ff20 bl 1001512c -100152ec: 4606 mov r6, r0 -100152ee: b1e0 cbz r0, 1001532a -100152f0: f854 2c04 ldr.w r2, [r4, #-4] -100152f4: 4621 mov r1, r4 -100152f6: f022 4200 bic.w r2, r2, #2147483648 ; 0x80000000 -100152fa: 3a08 subs r2, #8 -100152fc: 42aa cmp r2, r5 -100152fe: bf28 it cs -10015300: 462a movcs r2, r5 -10015302: 4b0e ldr r3, [pc, #56] ; (1001533c ) -10015304: 4798 blx r3 -10015306: f000 ff7d bl 10016204 -1001530a: 490d ldr r1, [pc, #52] ; (10015340 ) -1001530c: f854 3c04 ldr.w r3, [r4, #-4] -10015310: 680a ldr r2, [r1, #0] -10015312: f023 4300 bic.w r3, r3, #2147483648 ; 0x80000000 -10015316: f844 3c04 str.w r3, [r4, #-4] -1001531a: f1a4 0008 sub.w r0, r4, #8 -1001531e: 4413 add r3, r2 -10015320: 600b str r3, [r1, #0] -10015322: f7ff fe8f bl 10015044 -10015326: f001 f817 bl 10016358 -1001532a: 4630 mov r0, r6 -1001532c: bd70 pop {r4, r5, r6, pc} -1001532e: bf00 nop -10015330: 1004b2e0 .word 0x1004b2e0 -10015334: 1004b2e4 .word 0x1004b2e4 -10015338: 1004b2dc .word 0x1004b2dc -1001533c: 00028b49 .word 0x00028b49 -10015340: 1004b2ec .word 0x1004b2ec - -10015344 : -10015344: b538 push {r3, r4, r5, lr} -10015346: 4605 mov r5, r0 -10015348: f7ff fef0 bl 1001512c -1001534c: 4604 mov r4, r0 -1001534e: b118 cbz r0, 10015358 -10015350: 462a mov r2, r5 -10015352: 2100 movs r1, #0 -10015354: 4b01 ldr r3, [pc, #4] ; (1001535c ) -10015356: 4798 blx r3 -10015358: 4620 mov r0, r4 -1001535a: bd38 pop {r3, r4, r5, pc} -1001535c: 0000f511 .word 0x0000f511 - -10015360 : -10015360: f04f 0350 mov.w r3, #80 ; 0x50 -10015364: f383 8811 msr BASEPRI, r3 -10015368: f3bf 8f6f isb sy -1001536c: f3bf 8f4f dsb sy -10015370: e7fe b.n 10015370 - ... - -10015374 : -10015374: 4806 ldr r0, [pc, #24] ; (10015390 ) -10015376: 6800 ldr r0, [r0, #0] -10015378: 6800 ldr r0, [r0, #0] -1001537a: f380 8808 msr MSP, r0 -1001537e: b662 cpsie i -10015380: b661 cpsie f -10015382: f3bf 8f4f dsb sy -10015386: f3bf 8f6f isb sy -1001538a: df00 svc 0 -1001538c: bf00 nop -1001538e: 0000 .short 0x0000 -10015390: e000ed08 .word 0xe000ed08 - -10015394 : -10015394: f04f 7380 mov.w r3, #16777216 ; 0x1000000 -10015398: f840 3c04 str.w r3, [r0, #-4] -1001539c: 4b05 ldr r3, [pc, #20] ; (100153b4 ) -1001539e: f021 0101 bic.w r1, r1, #1 -100153a2: f840 1c08 str.w r1, [r0, #-8] -100153a6: f840 3c0c str.w r3, [r0, #-12] -100153aa: f840 2c20 str.w r2, [r0, #-32] -100153ae: 3840 subs r0, #64 ; 0x40 -100153b0: 4770 bx lr -100153b2: bf00 nop -100153b4: 10015361 .word 0x10015361 - ... - -100153c0 : -100153c0: 4b07 ldr r3, [pc, #28] ; (100153e0 ) -100153c2: 6819 ldr r1, [r3, #0] -100153c4: 6808 ldr r0, [r1, #0] -100153c6: e8b0 0ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp} -100153ca: f380 8809 msr PSP, r0 -100153ce: f3bf 8f6f isb sy -100153d2: f04f 0000 mov.w r0, #0 -100153d6: f380 8811 msr BASEPRI, r0 -100153da: f04e 0e0d orr.w lr, lr, #13 -100153de: 4770 bx lr - -100153e0 : -100153e0: 1004b308 .word 0x1004b308 - -100153e4 : -100153e4: f04f 0350 mov.w r3, #80 ; 0x50 -100153e8: f383 8811 msr BASEPRI, r3 -100153ec: f3bf 8f6f isb sy -100153f0: f3bf 8f4f dsb sy -100153f4: 4a02 ldr r2, [pc, #8] ; (10015400 ) -100153f6: 6813 ldr r3, [r2, #0] -100153f8: 3301 adds r3, #1 -100153fa: 6013 str r3, [r2, #0] -100153fc: 4770 bx lr -100153fe: bf00 nop -10015400: 10044e90 .word 0x10044e90 - -10015404 : -10015404: 4a03 ldr r2, [pc, #12] ; (10015414 ) -10015406: 6813 ldr r3, [r2, #0] -10015408: 3b01 subs r3, #1 -1001540a: 6013 str r3, [r2, #0] -1001540c: b90b cbnz r3, 10015412 -1001540e: f383 8811 msr BASEPRI, r3 -10015412: 4770 bx lr -10015414: 10044e90 .word 0x10044e90 - ... - -10015420 : -10015420: f3ef 8009 mrs r0, PSP -10015424: f3bf 8f6f isb sy -10015428: 4b0d ldr r3, [pc, #52] ; (10015460 ) -1001542a: 681a ldr r2, [r3, #0] -1001542c: e920 0ff0 stmdb r0!, {r4, r5, r6, r7, r8, r9, sl, fp} -10015430: 6010 str r0, [r2, #0] -10015432: e92d 4008 stmdb sp!, {r3, lr} -10015436: f04f 0050 mov.w r0, #80 ; 0x50 -1001543a: f380 8811 msr BASEPRI, r0 -1001543e: f001 f84f bl 100164e0 -10015442: f04f 0000 mov.w r0, #0 -10015446: f380 8811 msr BASEPRI, r0 -1001544a: e8bd 4008 ldmia.w sp!, {r3, lr} -1001544e: 6819 ldr r1, [r3, #0] -10015450: 6808 ldr r0, [r1, #0] -10015452: e8b0 0ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp} -10015456: f380 8809 msr PSP, r0 -1001545a: f3bf 8f6f isb sy -1001545e: 4770 bx lr - -10015460 : -10015460: 1004b308 .word 0x1004b308 - -10015464 : -10015464: b508 push {r3, lr} -10015466: f04f 0350 mov.w r3, #80 ; 0x50 -1001546a: f383 8811 msr BASEPRI, r3 -1001546e: f3bf 8f6f isb sy -10015472: f3bf 8f4f dsb sy -10015476: f000 fee9 bl 1001624c -1001547a: b118 cbz r0, 10015484 -1001547c: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -10015480: 4b02 ldr r3, [pc, #8] ; (1001548c ) -10015482: 601a str r2, [r3, #0] -10015484: 2300 movs r3, #0 -10015486: f383 8811 msr BASEPRI, r3 -1001548a: bd08 pop {r3, pc} -1001548c: e000ed04 .word 0xe000ed04 - -10015490 : -10015490: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -10015492: 4b3f ldr r3, [pc, #252] ; (10015590 ) -10015494: 4a3f ldr r2, [pc, #252] ; (10015594 ) -10015496: 681b ldr r3, [r3, #0] -10015498: 9001 str r0, [sp, #4] -1001549a: 4298 cmp r0, r3 -1001549c: bf88 it hi -1001549e: 9301 strhi r3, [sp, #4] -100154a0: 6813 ldr r3, [r2, #0] -100154a2: 4d3d ldr r5, [pc, #244] ; (10015598 ) -100154a4: f023 0301 bic.w r3, r3, #1 -100154a8: 6013 str r3, [r2, #0] -100154aa: 4b3c ldr r3, [pc, #240] ; (1001559c ) -100154ac: 682a ldr r2, [r5, #0] -100154ae: 681c ldr r4, [r3, #0] -100154b0: 9b01 ldr r3, [sp, #4] -100154b2: 4e3b ldr r6, [pc, #236] ; (100155a0 ) -100154b4: 3b01 subs r3, #1 -100154b6: fb02 4403 mla r4, r2, r3, r4 -100154ba: 6833 ldr r3, [r6, #0] -100154bc: 429c cmp r4, r3 -100154be: bf88 it hi -100154c0: 1ae4 subhi r4, r4, r3 -100154c2: b672 cpsid i -100154c4: f3bf 8f4f dsb sy -100154c8: f3bf 8f6f isb sy -100154cc: f001 f922 bl 10016714 -100154d0: 4b30 ldr r3, [pc, #192] ; (10015594 ) -100154d2: 4932 ldr r1, [pc, #200] ; (1001559c ) -100154d4: 4a33 ldr r2, [pc, #204] ; (100155a4 ) -100154d6: b958 cbnz r0, 100154f0 -100154d8: 6809 ldr r1, [r1, #0] -100154da: 6011 str r1, [r2, #0] -100154dc: 6819 ldr r1, [r3, #0] -100154de: f041 0101 orr.w r1, r1, #1 -100154e2: 6019 str r1, [r3, #0] -100154e4: 682b ldr r3, [r5, #0] -100154e6: 3b01 subs r3, #1 -100154e8: 6013 str r3, [r2, #0] -100154ea: b662 cpsie i -100154ec: b004 add sp, #16 -100154ee: bd70 pop {r4, r5, r6, pc} -100154f0: 6014 str r4, [r2, #0] -100154f2: 2200 movs r2, #0 -100154f4: 600a str r2, [r1, #0] -100154f6: 681a ldr r2, [r3, #0] -100154f8: a804 add r0, sp, #16 -100154fa: f042 0201 orr.w r2, r2, #1 -100154fe: 601a str r2, [r3, #0] -10015500: 9b01 ldr r3, [sp, #4] -10015502: f840 3d04 str.w r3, [r0, #-4]! -10015506: f003 fcd7 bl 10018eb8 -1001550a: 9b03 ldr r3, [sp, #12] -1001550c: b123 cbz r3, 10015518 -1001550e: f3bf 8f4f dsb sy -10015512: bf30 wfi -10015514: f3bf 8f6f isb sy -10015518: a801 add r0, sp, #4 -1001551a: f003 fd3b bl 10018f94 -1001551e: 4a1d ldr r2, [pc, #116] ; (10015594 ) -10015520: 6813 ldr r3, [r2, #0] -10015522: f023 0101 bic.w r1, r3, #1 -10015526: 6011 str r1, [r2, #0] -10015528: b662 cpsie i -1001552a: f413 3f80 tst.w r3, #65536 ; 0x10000 -1001552e: 491b ldr r1, [pc, #108] ; (1001559c ) -10015530: d021 beq.n 10015576 -10015532: 680b ldr r3, [r1, #0] -10015534: 682a ldr r2, [r5, #0] -10015536: 6831 ldr r1, [r6, #0] -10015538: 4413 add r3, r2 -1001553a: 3b01 subs r3, #1 -1001553c: 1b1b subs r3, r3, r4 -1001553e: 428b cmp r3, r1 -10015540: d301 bcc.n 10015546 -10015542: 429a cmp r2, r3 -10015544: d200 bcs.n 10015548 -10015546: 1e53 subs r3, r2, #1 -10015548: 4a16 ldr r2, [pc, #88] ; (100155a4 ) -1001554a: 6013 str r3, [r2, #0] -1001554c: 9801 ldr r0, [sp, #4] -1001554e: 3801 subs r0, #1 -10015550: 2200 movs r2, #0 -10015552: 4b12 ldr r3, [pc, #72] ; (1001559c ) -10015554: 601a str r2, [r3, #0] -10015556: f7ff ff45 bl 100153e4 -1001555a: 4a0e ldr r2, [pc, #56] ; (10015594 ) -1001555c: 6813 ldr r3, [r2, #0] -1001555e: f043 0301 orr.w r3, r3, #1 -10015562: 6013 str r3, [r2, #0] -10015564: f000 fe6a bl 1001623c -10015568: 682b ldr r3, [r5, #0] -1001556a: 4a0e ldr r2, [pc, #56] ; (100155a4 ) -1001556c: 3b01 subs r3, #1 -1001556e: 6013 str r3, [r2, #0] -10015570: f7ff ff48 bl 10015404 -10015574: e7ba b.n 100154ec -10015576: 682b ldr r3, [r5, #0] -10015578: 9a01 ldr r2, [sp, #4] -1001557a: 6809 ldr r1, [r1, #0] -1001557c: 435a muls r2, r3 -1001557e: 1a52 subs r2, r2, r1 -10015580: fbb2 f0f3 udiv r0, r2, r3 -10015584: fb00 3303 mla r3, r0, r3, r3 -10015588: 1a9b subs r3, r3, r2 -1001558a: 4a06 ldr r2, [pc, #24] ; (100155a4 ) -1001558c: 6013 str r3, [r2, #0] -1001558e: e7df b.n 10015550 -10015590: 1004b304 .word 0x1004b304 -10015594: e000e010 .word 0xe000e010 -10015598: 1004b300 .word 0x1004b300 -1001559c: e000e018 .word 0xe000e018 -100155a0: 1004b2fc .word 0x1004b2fc -100155a4: e000e014 .word 0xe000e014 - -100155a8 : -100155a8: 4b0d ldr r3, [pc, #52] ; (100155e0 ) -100155aa: 490e ldr r1, [pc, #56] ; (100155e4 ) -100155ac: 681a ldr r2, [r3, #0] -100155ae: f44f 737a mov.w r3, #1000 ; 0x3e8 -100155b2: fbb2 f3f3 udiv r3, r2, r3 -100155b6: 600b str r3, [r1, #0] -100155b8: f06f 417f mvn.w r1, #4278190080 ; 0xff000000 -100155bc: fbb1 f1f3 udiv r1, r1, r3 -100155c0: 4809 ldr r0, [pc, #36] ; (100155e8 ) -100155c2: fbb2 f2f2 udiv r2, r2, r2 -100155c6: 6001 str r1, [r0, #0] -100155c8: 212d movs r1, #45 ; 0x2d -100155ca: fbb1 f2f2 udiv r2, r1, r2 -100155ce: 4907 ldr r1, [pc, #28] ; (100155ec ) -100155d0: 3b01 subs r3, #1 -100155d2: 600a str r2, [r1, #0] -100155d4: 4a06 ldr r2, [pc, #24] ; (100155f0 ) -100155d6: 6013 str r3, [r2, #0] -100155d8: 2207 movs r2, #7 -100155da: 4b06 ldr r3, [pc, #24] ; (100155f4 ) -100155dc: 601a str r2, [r3, #0] -100155de: 4770 bx lr -100155e0: 10044ce0 .word 0x10044ce0 -100155e4: 1004b300 .word 0x1004b300 -100155e8: 1004b304 .word 0x1004b304 -100155ec: 1004b2fc .word 0x1004b2fc -100155f0: e000e014 .word 0xe000e014 -100155f4: e000e010 .word 0xe000e010 - -100155f8 : -100155f8: b508 push {r3, lr} -100155fa: 4b09 ldr r3, [pc, #36] ; (10015620 ) -100155fc: 681a ldr r2, [r3, #0] -100155fe: f442 0270 orr.w r2, r2, #15728640 ; 0xf00000 -10015602: 601a str r2, [r3, #0] -10015604: 681a ldr r2, [r3, #0] -10015606: f042 4270 orr.w r2, r2, #4026531840 ; 0xf0000000 -1001560a: 601a str r2, [r3, #0] -1001560c: f7ff ffcc bl 100155a8 -10015610: 2200 movs r2, #0 -10015612: 4b04 ldr r3, [pc, #16] ; (10015624 ) -10015614: 601a str r2, [r3, #0] -10015616: f7ff fead bl 10015374 -1001561a: f7ff fea1 bl 10015360 -1001561e: bf00 nop -10015620: e000ed20 .word 0xe000ed20 -10015624: 10044e90 .word 0x10044e90 - -10015628 : -10015628: f003 b98e b.w 10018948 - -1001562c : -1001562c: f000 bdf2 b.w 10016214 - -10015630 : -10015630: b510 push {r4, lr} -10015632: 201c movs r0, #28 -10015634: f7ff fd7a bl 1001512c -10015638: 4604 mov r4, r0 -1001563a: b120 cbz r0, 10015646 -1001563c: 2300 movs r3, #0 -1001563e: f840 3b04 str.w r3, [r0], #4 -10015642: f000 f8b1 bl 100157a8 -10015646: 4620 mov r0, r4 -10015648: bd10 pop {r4, pc} - ... - -1001564c : -1001564c: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10015650: 4606 mov r6, r0 -10015652: 460d mov r5, r1 -10015654: 4699 mov r9, r3 -10015656: 4690 mov r8, r2 -10015658: 9f08 ldr r7, [sp, #32] -1001565a: f000 fdd3 bl 10016204 -1001565e: 6834 ldr r4, [r6, #0] -10015660: ea04 0305 and.w r3, r4, r5 -10015664: f1b9 0f00 cmp.w r9, #0 -10015668: d113 bne.n 10015692 -1001566a: b9a3 cbnz r3, 10015696 -1001566c: b1d7 cbz r7, 100156a4 -1001566e: f1b8 0f00 cmp.w r8, #0 -10015672: bf0c ite eq -10015674: 2100 moveq r1, #0 -10015676: f04f 7180 movne.w r1, #16777216 ; 0x1000000 -1001567a: f1b9 0f00 cmp.w r9, #0 -1001567e: d001 beq.n 10015684 -10015680: f041 6180 orr.w r1, r1, #67108864 ; 0x4000000 -10015684: 463a mov r2, r7 -10015686: 4329 orrs r1, r5 -10015688: 1d30 adds r0, r6, #4 -1001568a: f000 ff79 bl 10016580 -1001568e: 2400 movs r4, #0 -10015690: e008 b.n 100156a4 -10015692: 429d cmp r5, r3 -10015694: d1ea bne.n 1001566c -10015696: f1b8 0f00 cmp.w r8, #0 -1001569a: d002 beq.n 100156a2 -1001569c: ea24 0305 bic.w r3, r4, r5 -100156a0: 6033 str r3, [r6, #0] -100156a2: 2700 movs r7, #0 -100156a4: f000 fe58 bl 10016358 -100156a8: b1d7 cbz r7, 100156e0 -100156aa: b938 cbnz r0, 100156bc -100156ac: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -100156b0: 4b11 ldr r3, [pc, #68] ; (100156f8 ) -100156b2: 601a str r2, [r3, #0] -100156b4: f3bf 8f4f dsb sy -100156b8: f3bf 8f6f isb sy -100156bc: f001 f8d4 bl 10016868 -100156c0: 0183 lsls r3, r0, #6 -100156c2: 4604 mov r4, r0 -100156c4: d40a bmi.n 100156dc -100156c6: f7ff fe8d bl 100153e4 -100156ca: 6834 ldr r4, [r6, #0] -100156cc: ea05 0304 and.w r3, r5, r4 -100156d0: f1b9 0f00 cmp.w r9, #0 -100156d4: d107 bne.n 100156e6 -100156d6: b943 cbnz r3, 100156ea -100156d8: f7ff fe94 bl 10015404 -100156dc: f024 447f bic.w r4, r4, #4278190080 ; 0xff000000 -100156e0: 4620 mov r0, r4 -100156e2: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -100156e6: 429d cmp r5, r3 -100156e8: d1f6 bne.n 100156d8 -100156ea: f1b8 0f00 cmp.w r8, #0 -100156ee: d0f3 beq.n 100156d8 -100156f0: ea24 0505 bic.w r5, r4, r5 -100156f4: 6035 str r5, [r6, #0] -100156f6: e7ef b.n 100156d8 -100156f8: e000ed04 .word 0xe000ed04 - -100156fc : -100156fc: b570 push {r4, r5, r6, lr} -100156fe: 4606 mov r6, r0 -10015700: 460c mov r4, r1 -10015702: f7ff fe6f bl 100153e4 -10015706: 6835 ldr r5, [r6, #0] -10015708: ea25 0404 bic.w r4, r5, r4 -1001570c: 6034 str r4, [r6, #0] -1001570e: f7ff fe79 bl 10015404 -10015712: 4628 mov r0, r5 -10015714: bd70 pop {r4, r5, r6, pc} - -10015716 : -10015716: b5f8 push {r3, r4, r5, r6, r7, lr} -10015718: 4604 mov r4, r0 -1001571a: 460d mov r5, r1 -1001571c: f100 060c add.w r6, r0, #12 -10015720: f000 fd70 bl 10016204 -10015724: 6823 ldr r3, [r4, #0] -10015726: 6920 ldr r0, [r4, #16] -10015728: 432b orrs r3, r5 -1001572a: 2500 movs r5, #0 -1001572c: 6023 str r3, [r4, #0] -1001572e: 42b0 cmp r0, r6 -10015730: 6821 ldr r1, [r4, #0] -10015732: d106 bne.n 10015742 -10015734: ea21 0105 bic.w r1, r1, r5 -10015738: 6021 str r1, [r4, #0] -1001573a: f000 fe0d bl 10016358 -1001573e: 6820 ldr r0, [r4, #0] -10015740: bdf8 pop {r3, r4, r5, r6, r7, pc} -10015742: e890 0088 ldmia.w r0, {r3, r7} -10015746: f013 6f80 tst.w r3, #67108864 ; 0x4000000 -1001574a: f023 427f bic.w r2, r3, #4278190080 ; 0xff000000 -1001574e: d103 bne.n 10015758 -10015750: 420a tst r2, r1 -10015752: d104 bne.n 1001575e -10015754: 4638 mov r0, r7 -10015756: e7ea b.n 1001572e -10015758: ea32 0e01 bics.w lr, r2, r1 -1001575c: d1fa bne.n 10015754 -1001575e: 01db lsls r3, r3, #7 -10015760: d500 bpl.n 10015764 -10015762: 4315 orrs r5, r2 -10015764: f041 7100 orr.w r1, r1, #33554432 ; 0x2000000 -10015768: f000 ff6e bl 10016648 -1001576c: e7f2 b.n 10015754 - -1001576e : -1001576e: f7ff bfd2 b.w 10015716 - -10015772 : -10015772: b510 push {r4, lr} -10015774: 4604 mov r4, r0 -10015776: f000 fd45 bl 10016204 -1001577a: 6863 ldr r3, [r4, #4] -1001577c: b933 cbnz r3, 1001578c -1001577e: 4620 mov r0, r4 -10015780: f7ff fd70 bl 10015264 -10015784: e8bd 4010 ldmia.w sp!, {r4, lr} -10015788: f000 bde6 b.w 10016358 -1001578c: f04f 7100 mov.w r1, #33554432 ; 0x2000000 -10015790: 6920 ldr r0, [r4, #16] -10015792: f000 ff59 bl 10016648 -10015796: e7f0 b.n 1001577a - -10015798 : -10015798: 4613 mov r3, r2 -1001579a: 460a mov r2, r1 -1001579c: 4601 mov r1, r0 -1001579e: 4801 ldr r0, [pc, #4] ; (100157a4 ) -100157a0: f001 ba2a b.w 10016bf8 -100157a4: 1001576f .word 0x1001576f - -100157a8 : -100157a8: f100 0308 add.w r3, r0, #8 -100157ac: 6043 str r3, [r0, #4] -100157ae: f04f 32ff mov.w r2, #4294967295 -100157b2: 60c3 str r3, [r0, #12] -100157b4: 6103 str r3, [r0, #16] -100157b6: 2300 movs r3, #0 -100157b8: 6082 str r2, [r0, #8] -100157ba: 6003 str r3, [r0, #0] -100157bc: 4770 bx lr - -100157be : -100157be: 2300 movs r3, #0 -100157c0: 6103 str r3, [r0, #16] -100157c2: 4770 bx lr - -100157c4 : -100157c4: 6843 ldr r3, [r0, #4] -100157c6: 689a ldr r2, [r3, #8] -100157c8: 604b str r3, [r1, #4] -100157ca: 608a str r2, [r1, #8] -100157cc: 689a ldr r2, [r3, #8] -100157ce: 6051 str r1, [r2, #4] -100157d0: 6099 str r1, [r3, #8] -100157d2: 6803 ldr r3, [r0, #0] -100157d4: 6108 str r0, [r1, #16] -100157d6: 3301 adds r3, #1 -100157d8: 6003 str r3, [r0, #0] -100157da: 4770 bx lr - -100157dc : -100157dc: 680a ldr r2, [r1, #0] -100157de: b530 push {r4, r5, lr} -100157e0: 1c53 adds r3, r2, #1 -100157e2: d10a bne.n 100157fa -100157e4: 6903 ldr r3, [r0, #16] -100157e6: 685a ldr r2, [r3, #4] -100157e8: 604a str r2, [r1, #4] -100157ea: 6091 str r1, [r2, #8] -100157ec: 608b str r3, [r1, #8] -100157ee: 6059 str r1, [r3, #4] -100157f0: 6803 ldr r3, [r0, #0] -100157f2: 6108 str r0, [r1, #16] -100157f4: 3301 adds r3, #1 -100157f6: 6003 str r3, [r0, #0] -100157f8: bd30 pop {r4, r5, pc} -100157fa: f100 0308 add.w r3, r0, #8 -100157fe: 685c ldr r4, [r3, #4] -10015800: 6825 ldr r5, [r4, #0] -10015802: 42aa cmp r2, r5 -10015804: d3ef bcc.n 100157e6 -10015806: 4623 mov r3, r4 -10015808: e7f9 b.n 100157fe - -1001580a : -1001580a: 6841 ldr r1, [r0, #4] -1001580c: 6882 ldr r2, [r0, #8] -1001580e: 6903 ldr r3, [r0, #16] -10015810: 608a str r2, [r1, #8] -10015812: 6882 ldr r2, [r0, #8] -10015814: 6051 str r1, [r2, #4] -10015816: 6859 ldr r1, [r3, #4] -10015818: 4288 cmp r0, r1 -1001581a: bf08 it eq -1001581c: 605a streq r2, [r3, #4] -1001581e: 2200 movs r2, #0 -10015820: 6102 str r2, [r0, #16] -10015822: 6818 ldr r0, [r3, #0] -10015824: 3801 subs r0, #1 -10015826: 6018 str r0, [r3, #0] -10015828: 4770 bx lr - -1001582a : -1001582a: b570 push {r4, r5, r6, lr} -1001582c: 4615 mov r5, r2 -1001582e: 6c02 ldr r2, [r0, #64] ; 0x40 -10015830: 4604 mov r4, r0 -10015832: 6b86 ldr r6, [r0, #56] ; 0x38 -10015834: b942 cbnz r2, 10015848 -10015836: 6805 ldr r5, [r0, #0] -10015838: b99d cbnz r5, 10015862 -1001583a: 6840 ldr r0, [r0, #4] -1001583c: f000 ffdc bl 100167f8 -10015840: 6065 str r5, [r4, #4] -10015842: 3601 adds r6, #1 -10015844: 63a6 str r6, [r4, #56] ; 0x38 -10015846: bd70 pop {r4, r5, r6, pc} -10015848: b96d cbnz r5, 10015866 -1001584a: 6880 ldr r0, [r0, #8] -1001584c: f005 f9b0 bl 1001abb0 -10015850: 68a3 ldr r3, [r4, #8] -10015852: 6c22 ldr r2, [r4, #64] ; 0x40 -10015854: 4413 add r3, r2 -10015856: 6862 ldr r2, [r4, #4] -10015858: 60a3 str r3, [r4, #8] -1001585a: 4293 cmp r3, r2 -1001585c: d301 bcc.n 10015862 -1001585e: 6823 ldr r3, [r4, #0] -10015860: 60a3 str r3, [r4, #8] -10015862: 2000 movs r0, #0 -10015864: e7ed b.n 10015842 -10015866: 68c0 ldr r0, [r0, #12] -10015868: f005 f9a2 bl 1001abb0 -1001586c: 6c23 ldr r3, [r4, #64] ; 0x40 -1001586e: 68e2 ldr r2, [r4, #12] -10015870: 425b negs r3, r3 -10015872: 6821 ldr r1, [r4, #0] -10015874: 441a add r2, r3 -10015876: 428a cmp r2, r1 -10015878: 60e2 str r2, [r4, #12] -1001587a: bf3e ittt cc -1001587c: 6862 ldrcc r2, [r4, #4] -1001587e: 189b addcc r3, r3, r2 -10015880: 60e3 strcc r3, [r4, #12] -10015882: 2d02 cmp r5, #2 -10015884: d1ed bne.n 10015862 -10015886: b10e cbz r6, 1001588c -10015888: 3e01 subs r6, #1 -1001588a: e7ea b.n 10015862 -1001588c: 4630 mov r0, r6 -1001588e: e7d8 b.n 10015842 - -10015890 : -10015890: 4603 mov r3, r0 -10015892: 6c1a ldr r2, [r3, #64] ; 0x40 -10015894: b410 push {r4} -10015896: 4608 mov r0, r1 -10015898: b162 cbz r2, 100158b4 -1001589a: 68d9 ldr r1, [r3, #12] -1001589c: 685c ldr r4, [r3, #4] -1001589e: 4411 add r1, r2 -100158a0: 42a1 cmp r1, r4 -100158a2: 60d9 str r1, [r3, #12] -100158a4: bf28 it cs -100158a6: 6819 ldrcs r1, [r3, #0] -100158a8: bc10 pop {r4} -100158aa: bf28 it cs -100158ac: 60d9 strcs r1, [r3, #12] -100158ae: 68d9 ldr r1, [r3, #12] -100158b0: f005 b97e b.w 1001abb0 -100158b4: bc10 pop {r4} -100158b6: 4770 bx lr - -100158b8 : -100158b8: b570 push {r4, r5, r6, lr} -100158ba: 4604 mov r4, r0 -100158bc: f7ff fd92 bl 100153e4 -100158c0: f894 5045 ldrb.w r5, [r4, #69] ; 0x45 -100158c4: f104 0624 add.w r6, r4, #36 ; 0x24 -100158c8: b26d sxtb r5, r5 -100158ca: 2d00 cmp r5, #0 -100158cc: dc14 bgt.n 100158f8 -100158ce: 23ff movs r3, #255 ; 0xff -100158d0: f884 3045 strb.w r3, [r4, #69] ; 0x45 -100158d4: f7ff fd96 bl 10015404 -100158d8: f7ff fd84 bl 100153e4 -100158dc: f894 5044 ldrb.w r5, [r4, #68] ; 0x44 -100158e0: f104 0610 add.w r6, r4, #16 -100158e4: b26d sxtb r5, r5 -100158e6: 2d00 cmp r5, #0 -100158e8: dc12 bgt.n 10015910 -100158ea: 23ff movs r3, #255 ; 0xff -100158ec: f884 3044 strb.w r3, [r4, #68] ; 0x44 -100158f0: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -100158f4: f7ff bd86 b.w 10015404 -100158f8: 6a63 ldr r3, [r4, #36] ; 0x24 -100158fa: 2b00 cmp r3, #0 -100158fc: d0e7 beq.n 100158ce -100158fe: 4630 mov r0, r6 -10015900: f000 fe68 bl 100165d4 -10015904: b108 cbz r0, 1001590a -10015906: f000 feff bl 10016708 -1001590a: 3d01 subs r5, #1 -1001590c: b26d sxtb r5, r5 -1001590e: e7dc b.n 100158ca -10015910: 6923 ldr r3, [r4, #16] -10015912: 2b00 cmp r3, #0 -10015914: d0e9 beq.n 100158ea -10015916: 4630 mov r0, r6 -10015918: f000 fe5c bl 100165d4 -1001591c: b108 cbz r0, 10015922 -1001591e: f000 fef3 bl 10016708 -10015922: 3d01 subs r5, #1 -10015924: b26d sxtb r5, r5 -10015926: e7de b.n 100158e6 - -10015928 : -10015928: b538 push {r3, r4, r5, lr} -1001592a: 4604 mov r4, r0 -1001592c: 460d mov r5, r1 -1001592e: f7ff fd59 bl 100153e4 -10015932: 6c20 ldr r0, [r4, #64] ; 0x40 -10015934: 6be3 ldr r3, [r4, #60] ; 0x3c -10015936: 6822 ldr r2, [r4, #0] -10015938: 4343 muls r3, r0 -1001593a: 18d1 adds r1, r2, r3 -1001593c: 1a1b subs r3, r3, r0 -1001593e: 4413 add r3, r2 -10015940: 6061 str r1, [r4, #4] -10015942: 60e3 str r3, [r4, #12] -10015944: 2100 movs r1, #0 -10015946: 23ff movs r3, #255 ; 0xff -10015948: 63a1 str r1, [r4, #56] ; 0x38 -1001594a: 60a2 str r2, [r4, #8] -1001594c: f884 3044 strb.w r3, [r4, #68] ; 0x44 -10015950: f884 3045 strb.w r3, [r4, #69] ; 0x45 -10015954: b995 cbnz r5, 1001597c -10015956: 6923 ldr r3, [r4, #16] -10015958: b163 cbz r3, 10015974 -1001595a: f104 0010 add.w r0, r4, #16 -1001595e: f000 fe39 bl 100165d4 -10015962: b138 cbz r0, 10015974 -10015964: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -10015968: 4b09 ldr r3, [pc, #36] ; (10015990 ) -1001596a: 601a str r2, [r3, #0] -1001596c: f3bf 8f4f dsb sy -10015970: f3bf 8f6f isb sy -10015974: f7ff fd46 bl 10015404 -10015978: 2001 movs r0, #1 -1001597a: bd38 pop {r3, r4, r5, pc} -1001597c: f104 0010 add.w r0, r4, #16 -10015980: f7ff ff12 bl 100157a8 -10015984: f104 0024 add.w r0, r4, #36 ; 0x24 -10015988: f7ff ff0e bl 100157a8 -1001598c: e7f2 b.n 10015974 -1001598e: bf00 nop -10015990: e000ed04 .word 0xe000ed04 - -10015994 : -10015994: b5f8 push {r3, r4, r5, r6, r7, lr} -10015996: 4606 mov r6, r0 -10015998: 4348 muls r0, r1 -1001599a: 3050 adds r0, #80 ; 0x50 -1001599c: 460d mov r5, r1 -1001599e: 4617 mov r7, r2 -100159a0: f7ff fbc4 bl 1001512c -100159a4: 4604 mov r4, r0 -100159a6: b148 cbz r0, 100159bc -100159a8: b955 cbnz r5, 100159c0 -100159aa: 6020 str r0, [r4, #0] -100159ac: 63e6 str r6, [r4, #60] ; 0x3c -100159ae: 6425 str r5, [r4, #64] ; 0x40 -100159b0: 2101 movs r1, #1 -100159b2: 4620 mov r0, r4 -100159b4: f7ff ffb8 bl 10015928 -100159b8: f884 704c strb.w r7, [r4, #76] ; 0x4c -100159bc: 4620 mov r0, r4 -100159be: bdf8 pop {r3, r4, r5, r6, r7, pc} -100159c0: f100 0350 add.w r3, r0, #80 ; 0x50 -100159c4: 6003 str r3, [r0, #0] -100159c6: e7f1 b.n 100159ac - -100159c8 : -100159c8: b510 push {r4, lr} -100159ca: 2202 movs r2, #2 -100159cc: 460c mov r4, r1 -100159ce: 2100 movs r1, #0 -100159d0: f7ff ffe0 bl 10015994 -100159d4: b100 cbz r0, 100159d8 -100159d6: 6384 str r4, [r0, #56] ; 0x38 -100159d8: bd10 pop {r4, pc} - ... - -100159dc : -100159dc: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} -100159e0: 2600 movs r6, #0 -100159e2: 4604 mov r4, r0 -100159e4: 4689 mov r9, r1 -100159e6: 461f mov r7, r3 -100159e8: 46b0 mov r8, r6 -100159ea: f8df a0e0 ldr.w sl, [pc, #224] ; 10015acc -100159ee: 9201 str r2, [sp, #4] -100159f0: f7ff fcf8 bl 100153e4 -100159f4: 6ba2 ldr r2, [r4, #56] ; 0x38 -100159f6: 6be3 ldr r3, [r4, #60] ; 0x3c -100159f8: 429a cmp r2, r3 -100159fa: d301 bcc.n 10015a00 -100159fc: 2f02 cmp r7, #2 -100159fe: d119 bne.n 10015a34 -10015a00: 463a mov r2, r7 -10015a02: 4649 mov r1, r9 -10015a04: 4620 mov r0, r4 -10015a06: f7ff ff10 bl 1001582a -10015a0a: 6a63 ldr r3, [r4, #36] ; 0x24 -10015a0c: b11b cbz r3, 10015a16 -10015a0e: f104 0024 add.w r0, r4, #36 ; 0x24 -10015a12: f000 fddf bl 100165d4 -10015a16: b138 cbz r0, 10015a28 -10015a18: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -10015a1c: 4b2b ldr r3, [pc, #172] ; (10015acc ) -10015a1e: 601a str r2, [r3, #0] -10015a20: f3bf 8f4f dsb sy -10015a24: f3bf 8f6f isb sy -10015a28: f7ff fcec bl 10015404 -10015a2c: 2001 movs r0, #1 -10015a2e: b004 add sp, #16 -10015a30: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10015a34: 9d01 ldr r5, [sp, #4] -10015a36: b91d cbnz r5, 10015a40 -10015a38: f7ff fce4 bl 10015404 -10015a3c: 2000 movs r0, #0 -10015a3e: e7f6 b.n 10015a2e -10015a40: b916 cbnz r6, 10015a48 -10015a42: a802 add r0, sp, #8 -10015a44: f000 fe2e bl 100166a4 -10015a48: f7ff fcdc bl 10015404 -10015a4c: f000 fbda bl 10016204 -10015a50: f7ff fcc8 bl 100153e4 -10015a54: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 -10015a58: 2bff cmp r3, #255 ; 0xff -10015a5a: bf08 it eq -10015a5c: f884 8044 strbeq.w r8, [r4, #68] ; 0x44 -10015a60: f894 3045 ldrb.w r3, [r4, #69] ; 0x45 -10015a64: 2bff cmp r3, #255 ; 0xff -10015a66: bf08 it eq -10015a68: f884 8045 strbeq.w r8, [r4, #69] ; 0x45 -10015a6c: f7ff fcca bl 10015404 -10015a70: a901 add r1, sp, #4 -10015a72: a802 add r0, sp, #8 -10015a74: f000 fe22 bl 100166bc -10015a78: bb10 cbnz r0, 10015ac0 -10015a7a: f7ff fcb3 bl 100153e4 -10015a7e: 6ba6 ldr r6, [r4, #56] ; 0x38 -10015a80: 6be5 ldr r5, [r4, #60] ; 0x3c -10015a82: f7ff fcbf bl 10015404 -10015a86: 42ae cmp r6, r5 -10015a88: d114 bne.n 10015ab4 -10015a8a: 9901 ldr r1, [sp, #4] -10015a8c: f104 0010 add.w r0, r4, #16 -10015a90: f000 fd66 bl 10016560 -10015a94: 4620 mov r0, r4 -10015a96: f7ff ff0f bl 100158b8 -10015a9a: f000 fc5d bl 10016358 -10015a9e: b938 cbnz r0, 10015ab0 -10015aa0: f04f 5380 mov.w r3, #268435456 ; 0x10000000 -10015aa4: f8ca 3000 str.w r3, [sl] -10015aa8: f3bf 8f4f dsb sy -10015aac: f3bf 8f6f isb sy -10015ab0: 2601 movs r6, #1 -10015ab2: e79d b.n 100159f0 -10015ab4: 4620 mov r0, r4 -10015ab6: f7ff feff bl 100158b8 -10015aba: f000 fc4d bl 10016358 -10015abe: e7f7 b.n 10015ab0 -10015ac0: 4620 mov r0, r4 -10015ac2: f7ff fef9 bl 100158b8 -10015ac6: f000 fc47 bl 10016358 -10015aca: e7b7 b.n 10015a3c -10015acc: e000ed04 .word 0xe000ed04 - -10015ad0 : -10015ad0: b510 push {r4, lr} -10015ad2: 4602 mov r2, r0 -10015ad4: 2100 movs r1, #0 -10015ad6: 2001 movs r0, #1 -10015ad8: f7ff ff5c bl 10015994 -10015adc: 4604 mov r4, r0 -10015ade: b138 cbz r0, 10015af0 -10015ae0: 2300 movs r3, #0 -10015ae2: 6043 str r3, [r0, #4] -10015ae4: 6003 str r3, [r0, #0] -10015ae6: 60c3 str r3, [r0, #12] -10015ae8: 461a mov r2, r3 -10015aea: 4619 mov r1, r3 -10015aec: f7ff ff76 bl 100159dc -10015af0: 4620 mov r0, r4 -10015af2: bd10 pop {r4, pc} - -10015af4 : -10015af4: b5f8 push {r3, r4, r5, r6, r7, lr} -10015af6: 4605 mov r5, r0 -10015af8: 4617 mov r7, r2 -10015afa: f3ef 8611 mrs r6, BASEPRI -10015afe: f04f 0250 mov.w r2, #80 ; 0x50 -10015b02: f382 8811 msr BASEPRI, r2 -10015b06: f3bf 8f6f isb sy -10015b0a: f3bf 8f4f dsb sy -10015b0e: 6b80 ldr r0, [r0, #56] ; 0x38 -10015b10: 6bea ldr r2, [r5, #60] ; 0x3c -10015b12: 4290 cmp r0, r2 -10015b14: d301 bcc.n 10015b1a -10015b16: 2b02 cmp r3, #2 -10015b18: d11e bne.n 10015b58 -10015b1a: f895 4045 ldrb.w r4, [r5, #69] ; 0x45 -10015b1e: 461a mov r2, r3 -10015b20: b264 sxtb r4, r4 -10015b22: 4628 mov r0, r5 -10015b24: f7ff fe81 bl 1001582a -10015b28: 1c63 adds r3, r4, #1 -10015b2a: d110 bne.n 10015b4e -10015b2c: 6a6b ldr r3, [r5, #36] ; 0x24 -10015b2e: b90b cbnz r3, 10015b34 -10015b30: 2001 movs r0, #1 -10015b32: e009 b.n 10015b48 -10015b34: f105 0024 add.w r0, r5, #36 ; 0x24 -10015b38: f000 fd4c bl 100165d4 -10015b3c: 2800 cmp r0, #0 -10015b3e: d0f7 beq.n 10015b30 -10015b40: 2f00 cmp r7, #0 -10015b42: d0f5 beq.n 10015b30 -10015b44: 2001 movs r0, #1 -10015b46: 6038 str r0, [r7, #0] -10015b48: f386 8811 msr BASEPRI, r6 -10015b4c: bdf8 pop {r3, r4, r5, r6, r7, pc} -10015b4e: 3401 adds r4, #1 -10015b50: b264 sxtb r4, r4 -10015b52: f885 4045 strb.w r4, [r5, #69] ; 0x45 -10015b56: e7eb b.n 10015b30 -10015b58: 2000 movs r0, #0 -10015b5a: e7f5 b.n 10015b48 - -10015b5c : -10015b5c: b538 push {r3, r4, r5, lr} -10015b5e: 460c mov r4, r1 -10015b60: f3ef 8511 mrs r5, BASEPRI -10015b64: f04f 0350 mov.w r3, #80 ; 0x50 -10015b68: f383 8811 msr BASEPRI, r3 -10015b6c: f3bf 8f6f isb sy -10015b70: f3bf 8f4f dsb sy -10015b74: 6b82 ldr r2, [r0, #56] ; 0x38 -10015b76: 6bc3 ldr r3, [r0, #60] ; 0x3c -10015b78: 429a cmp r2, r3 -10015b7a: d21b bcs.n 10015bb4 -10015b7c: f890 3045 ldrb.w r3, [r0, #69] ; 0x45 -10015b80: 3201 adds r2, #1 -10015b82: b25b sxtb r3, r3 -10015b84: 6382 str r2, [r0, #56] ; 0x38 -10015b86: 1c5a adds r2, r3, #1 -10015b88: d10f bne.n 10015baa -10015b8a: 6a43 ldr r3, [r0, #36] ; 0x24 -10015b8c: b90b cbnz r3, 10015b92 -10015b8e: 2001 movs r0, #1 -10015b90: e008 b.n 10015ba4 -10015b92: 3024 adds r0, #36 ; 0x24 -10015b94: f000 fd1e bl 100165d4 -10015b98: 2800 cmp r0, #0 -10015b9a: d0f8 beq.n 10015b8e -10015b9c: 2c00 cmp r4, #0 -10015b9e: d0f6 beq.n 10015b8e -10015ba0: 2001 movs r0, #1 -10015ba2: 6020 str r0, [r4, #0] -10015ba4: f385 8811 msr BASEPRI, r5 -10015ba8: bd38 pop {r3, r4, r5, pc} -10015baa: 3301 adds r3, #1 -10015bac: b25b sxtb r3, r3 -10015bae: f880 3045 strb.w r3, [r0, #69] ; 0x45 -10015bb2: e7ec b.n 10015b8e -10015bb4: 2000 movs r0, #0 -10015bb6: e7f5 b.n 10015ba4 - -10015bb8 : -10015bb8: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} -10015bbc: f04f 0a00 mov.w sl, #0 -10015bc0: 4604 mov r4, r0 -10015bc2: 460f mov r7, r1 -10015bc4: 4698 mov r8, r3 -10015bc6: 4656 mov r6, sl -10015bc8: f8df 911c ldr.w r9, [pc, #284] ; 10015ce8 -10015bcc: 9201 str r2, [sp, #4] -10015bce: f7ff fc09 bl 100153e4 -10015bd2: 6ba5 ldr r5, [r4, #56] ; 0x38 -10015bd4: b355 cbz r5, 10015c2c -10015bd6: 4639 mov r1, r7 -10015bd8: 4620 mov r0, r4 -10015bda: 68e6 ldr r6, [r4, #12] -10015bdc: f7ff fe58 bl 10015890 -10015be0: f1b8 0f00 cmp.w r8, #0 -10015be4: d11b bne.n 10015c1e -10015be6: 6823 ldr r3, [r4, #0] -10015be8: 3d01 subs r5, #1 -10015bea: 63a5 str r5, [r4, #56] ; 0x38 -10015bec: b913 cbnz r3, 10015bf4 -10015bee: f000 fe47 bl 10016880 -10015bf2: 6060 str r0, [r4, #4] -10015bf4: 6923 ldr r3, [r4, #16] -10015bf6: b163 cbz r3, 10015c12 -10015bf8: f104 0010 add.w r0, r4, #16 -10015bfc: f000 fcea bl 100165d4 -10015c00: b138 cbz r0, 10015c12 -10015c02: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -10015c06: 4b38 ldr r3, [pc, #224] ; (10015ce8 ) -10015c08: 601a str r2, [r3, #0] -10015c0a: f3bf 8f4f dsb sy -10015c0e: f3bf 8f6f isb sy -10015c12: f7ff fbf7 bl 10015404 -10015c16: 2001 movs r0, #1 -10015c18: b004 add sp, #16 -10015c1a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10015c1e: 6a63 ldr r3, [r4, #36] ; 0x24 -10015c20: 60e6 str r6, [r4, #12] -10015c22: 2b00 cmp r3, #0 -10015c24: d0f5 beq.n 10015c12 -10015c26: f104 0024 add.w r0, r4, #36 ; 0x24 -10015c2a: e7e7 b.n 10015bfc -10015c2c: 9d01 ldr r5, [sp, #4] -10015c2e: b91d cbnz r5, 10015c38 -10015c30: f7ff fbe8 bl 10015404 -10015c34: 4628 mov r0, r5 -10015c36: e7ef b.n 10015c18 -10015c38: f1ba 0f00 cmp.w sl, #0 -10015c3c: d102 bne.n 10015c44 -10015c3e: a802 add r0, sp, #8 -10015c40: f000 fd30 bl 100166a4 -10015c44: f7ff fbde bl 10015404 -10015c48: f000 fadc bl 10016204 -10015c4c: f7ff fbca bl 100153e4 -10015c50: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 -10015c54: 2bff cmp r3, #255 ; 0xff -10015c56: bf08 it eq -10015c58: f884 6044 strbeq.w r6, [r4, #68] ; 0x44 -10015c5c: f894 3045 ldrb.w r3, [r4, #69] ; 0x45 -10015c60: 2bff cmp r3, #255 ; 0xff -10015c62: bf08 it eq -10015c64: f884 6045 strbeq.w r6, [r4, #69] ; 0x45 -10015c68: f7ff fbcc bl 10015404 -10015c6c: a901 add r1, sp, #4 -10015c6e: a802 add r0, sp, #8 -10015c70: f000 fd24 bl 100166bc -10015c74: bb50 cbnz r0, 10015ccc -10015c76: f7ff fbb5 bl 100153e4 -10015c7a: 6ba5 ldr r5, [r4, #56] ; 0x38 -10015c7c: f7ff fbc2 bl 10015404 -10015c80: b9f5 cbnz r5, 10015cc0 -10015c82: 6823 ldr r3, [r4, #0] -10015c84: b933 cbnz r3, 10015c94 -10015c86: f7ff fbad bl 100153e4 -10015c8a: 6860 ldr r0, [r4, #4] -10015c8c: f000 fd6c bl 10016768 -10015c90: f7ff fbb8 bl 10015404 -10015c94: 9901 ldr r1, [sp, #4] -10015c96: f104 0024 add.w r0, r4, #36 ; 0x24 -10015c9a: f000 fc61 bl 10016560 -10015c9e: 4620 mov r0, r4 -10015ca0: f7ff fe0a bl 100158b8 -10015ca4: f000 fb58 bl 10016358 -10015ca8: b938 cbnz r0, 10015cba -10015caa: f04f 5380 mov.w r3, #268435456 ; 0x10000000 -10015cae: f8c9 3000 str.w r3, [r9] -10015cb2: f3bf 8f4f dsb sy -10015cb6: f3bf 8f6f isb sy -10015cba: f04f 0a01 mov.w sl, #1 -10015cbe: e786 b.n 10015bce -10015cc0: 4620 mov r0, r4 -10015cc2: f7ff fdf9 bl 100158b8 -10015cc6: f000 fb47 bl 10016358 -10015cca: e7f6 b.n 10015cba -10015ccc: 4620 mov r0, r4 -10015cce: f7ff fdf3 bl 100158b8 -10015cd2: f000 fb41 bl 10016358 -10015cd6: f7ff fb85 bl 100153e4 -10015cda: 6ba5 ldr r5, [r4, #56] ; 0x38 -10015cdc: f7ff fb92 bl 10015404 -10015ce0: 2d00 cmp r5, #0 -10015ce2: d1ea bne.n 10015cba -10015ce4: e7a6 b.n 10015c34 -10015ce6: bf00 nop -10015ce8: e000ed04 .word 0xe000ed04 - -10015cec : -10015cec: b510 push {r4, lr} -10015cee: 4604 mov r4, r0 -10015cf0: f7ff fb78 bl 100153e4 -10015cf4: 6ba4 ldr r4, [r4, #56] ; 0x38 -10015cf6: f7ff fb85 bl 10015404 -10015cfa: 4620 mov r0, r4 -10015cfc: bd10 pop {r4, pc} - -10015cfe : -10015cfe: f7ff bab1 b.w 10015264 - -10015d02 : -10015d02: b570 push {r4, r5, r6, lr} -10015d04: 4604 mov r4, r0 -10015d06: 460d mov r5, r1 -10015d08: 4616 mov r6, r2 -10015d0a: f7ff fb6b bl 100153e4 -10015d0e: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 -10015d12: 2bff cmp r3, #255 ; 0xff -10015d14: bf04 itt eq -10015d16: 2300 moveq r3, #0 -10015d18: f884 3044 strbeq.w r3, [r4, #68] ; 0x44 -10015d1c: f894 3045 ldrb.w r3, [r4, #69] ; 0x45 -10015d20: 2bff cmp r3, #255 ; 0xff -10015d22: bf04 itt eq -10015d24: 2300 moveq r3, #0 -10015d26: f884 3045 strbeq.w r3, [r4, #69] ; 0x45 -10015d2a: f7ff fb6b bl 10015404 -10015d2e: 6ba3 ldr r3, [r4, #56] ; 0x38 -10015d30: b92b cbnz r3, 10015d3e -10015d32: 4632 mov r2, r6 -10015d34: 4629 mov r1, r5 -10015d36: f104 0024 add.w r0, r4, #36 ; 0x24 -10015d3a: f000 fc35 bl 100165a8 -10015d3e: 4620 mov r0, r4 -10015d40: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10015d44: f7ff bdb8 b.w 100158b8 - -10015d48 : -10015d48: 4b09 ldr r3, [pc, #36] ; (10015d70 ) -10015d4a: 4a0a ldr r2, [pc, #40] ; (10015d74 ) -10015d4c: 681b ldr r3, [r3, #0] -10015d4e: 6812 ldr r2, [r2, #0] -10015d50: 6ad0 ldr r0, [r2, #44] ; 0x2c -10015d52: b958 cbnz r0, 10015d6c -10015d54: 4a08 ldr r2, [pc, #32] ; (10015d78 ) -10015d56: 6812 ldr r2, [r2, #0] -10015d58: 2a01 cmp r2, #1 -10015d5a: d808 bhi.n 10015d6e -10015d5c: 2b01 cmp r3, #1 -10015d5e: d806 bhi.n 10015d6e -10015d60: 4b06 ldr r3, [pc, #24] ; (10015d7c ) -10015d62: 6818 ldr r0, [r3, #0] -10015d64: 4b06 ldr r3, [pc, #24] ; (10015d80 ) -10015d66: 681b ldr r3, [r3, #0] -10015d68: 1ac0 subs r0, r0, r3 -10015d6a: 4770 bx lr -10015d6c: 2000 movs r0, #0 -10015d6e: 4770 bx lr -10015d70: 1004b408 .word 0x1004b408 -10015d74: 1004b308 .word 0x1004b308 -10015d78: 1004b314 .word 0x1004b314 -10015d7c: 1004b438 .word 0x1004b438 -10015d80: 1004b480 .word 0x1004b480 - -10015d84 : -10015d84: 4a06 ldr r2, [pc, #24] ; (10015da0 ) -10015d86: 6813 ldr r3, [r2, #0] -10015d88: 6819 ldr r1, [r3, #0] -10015d8a: 4b06 ldr r3, [pc, #24] ; (10015da4 ) -10015d8c: b919 cbnz r1, 10015d96 -10015d8e: f04f 32ff mov.w r2, #4294967295 -10015d92: 601a str r2, [r3, #0] -10015d94: 4770 bx lr -10015d96: 6812 ldr r2, [r2, #0] -10015d98: 68d2 ldr r2, [r2, #12] -10015d9a: 68d2 ldr r2, [r2, #12] -10015d9c: 6852 ldr r2, [r2, #4] -10015d9e: e7f8 b.n 10015d92 -10015da0: 1004b30c .word 0x1004b30c -10015da4: 1004b438 .word 0x1004b438 - -10015da8 : -10015da8: b5f8 push {r3, r4, r5, r6, r7, lr} -10015daa: 4b1b ldr r3, [pc, #108] ; (10015e18 ) -10015dac: 4e1b ldr r6, [pc, #108] ; (10015e1c ) -10015dae: 681d ldr r5, [r3, #0] -10015db0: 4604 mov r4, r0 -10015db2: 6830 ldr r0, [r6, #0] -10015db4: 460f mov r7, r1 -10015db6: 3004 adds r0, #4 -10015db8: f7ff fd27 bl 1001580a -10015dbc: 4633 mov r3, r6 -10015dbe: b940 cbnz r0, 10015dd2 -10015dc0: 2001 movs r0, #1 -10015dc2: 6831 ldr r1, [r6, #0] -10015dc4: 4e16 ldr r6, [pc, #88] ; (10015e20 ) -10015dc6: 6ac9 ldr r1, [r1, #44] ; 0x2c -10015dc8: 6832 ldr r2, [r6, #0] -10015dca: 4088 lsls r0, r1 -10015dcc: ea22 0200 bic.w r2, r2, r0 -10015dd0: 6032 str r2, [r6, #0] -10015dd2: 1c62 adds r2, r4, #1 -10015dd4: d107 bne.n 10015de6 -10015dd6: b137 cbz r7, 10015de6 -10015dd8: 6819 ldr r1, [r3, #0] -10015dda: 4812 ldr r0, [pc, #72] ; (10015e24 ) -10015ddc: 3104 adds r1, #4 -10015dde: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -10015de2: f7ff bcef b.w 100157c4 -10015de6: 442c add r4, r5 -10015de8: 681a ldr r2, [r3, #0] -10015dea: 42a5 cmp r5, r4 -10015dec: 6054 str r4, [r2, #4] -10015dee: d907 bls.n 10015e00 -10015df0: 4a0d ldr r2, [pc, #52] ; (10015e28 ) -10015df2: 6810 ldr r0, [r2, #0] -10015df4: 6819 ldr r1, [r3, #0] -10015df6: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -10015dfa: 3104 adds r1, #4 -10015dfc: f7ff bcee b.w 100157dc -10015e00: 4a0a ldr r2, [pc, #40] ; (10015e2c ) -10015e02: 6810 ldr r0, [r2, #0] -10015e04: 6819 ldr r1, [r3, #0] -10015e06: 3104 adds r1, #4 -10015e08: f7ff fce8 bl 100157dc -10015e0c: 4b08 ldr r3, [pc, #32] ; (10015e30 ) -10015e0e: 681a ldr r2, [r3, #0] -10015e10: 4294 cmp r4, r2 -10015e12: bf38 it cc -10015e14: 601c strcc r4, [r3, #0] -10015e16: bdf8 pop {r3, r4, r5, r6, r7, pc} -10015e18: 1004b480 .word 0x1004b480 -10015e1c: 1004b308 .word 0x1004b308 -10015e20: 1004b408 .word 0x1004b408 -10015e24: 1004b458 .word 0x1004b458 -10015e28: 1004b310 .word 0x1004b310 -10015e2c: 1004b30c .word 0x1004b30c -10015e30: 1004b438 .word 0x1004b438 - -10015e34 : -10015e34: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10015e38: 9d0c ldr r5, [sp, #48] ; 0x30 -10015e3a: 4680 mov r8, r0 -10015e3c: 460f mov r7, r1 -10015e3e: 4692 mov sl, r2 -10015e40: 4699 mov r9, r3 -10015e42: 9e0b ldr r6, [sp, #44] ; 0x2c -10015e44: b965 cbnz r5, 10015e60 -10015e46: 0094 lsls r4, r2, #2 -10015e48: 4620 mov r0, r4 -10015e4a: f001 fdcb bl 100179e4 -10015e4e: 4605 mov r5, r0 -10015e50: b930 cbnz r0, 10015e60 -10015e52: 4620 mov r0, r4 -10015e54: f7ff f96a bl 1001512c -10015e58: 4605 mov r5, r0 -10015e5a: 2800 cmp r0, #0 -10015e5c: f000 80a2 beq.w 10015fa4 -10015e60: 205c movs r0, #92 ; 0x5c -10015e62: f7ff f963 bl 1001512c -10015e66: 4604 mov r4, r0 -10015e68: 2800 cmp r0, #0 -10015e6a: f000 8098 beq.w 10015f9e -10015e6e: ea4f 0a8a mov.w sl, sl, lsl #2 -10015e72: 4652 mov r2, sl -10015e74: 6305 str r5, [r0, #48] ; 0x30 -10015e76: 21a5 movs r1, #165 ; 0xa5 -10015e78: 4628 mov r0, r5 -10015e7a: f004 fe9d bl 1001abb8 -10015e7e: 6b23 ldr r3, [r4, #48] ; 0x30 -10015e80: f1aa 0a04 sub.w sl, sl, #4 -10015e84: 449a add sl, r3 -10015e86: f02a 0a07 bic.w sl, sl, #7 -10015e8a: 1e7b subs r3, r7, #1 -10015e8c: f104 0234 add.w r2, r4, #52 ; 0x34 -10015e90: 3709 adds r7, #9 -10015e92: f993 1001 ldrsb.w r1, [r3, #1] -10015e96: f802 1b01 strb.w r1, [r2], #1 -10015e9a: f913 1f01 ldrsb.w r1, [r3, #1]! -10015e9e: b109 cbz r1, 10015ea4 -10015ea0: 429f cmp r7, r3 -10015ea2: d1f6 bne.n 10015e92 -10015ea4: 9d0a ldr r5, [sp, #40] ; 0x28 -10015ea6: f04f 0b00 mov.w fp, #0 -10015eaa: 2d0a cmp r5, #10 -10015eac: bf28 it cs -10015eae: 250a movcs r5, #10 -10015eb0: 1d27 adds r7, r4, #4 -10015eb2: 62e5 str r5, [r4, #44] ; 0x2c -10015eb4: 64a5 str r5, [r4, #72] ; 0x48 -10015eb6: 4638 mov r0, r7 -10015eb8: f884 b03d strb.w fp, [r4, #61] ; 0x3d -10015ebc: f8c4 b04c str.w fp, [r4, #76] ; 0x4c -10015ec0: f7ff fc7d bl 100157be -10015ec4: f1c5 050b rsb r5, r5, #11 -10015ec8: f104 0018 add.w r0, r4, #24 -10015ecc: f7ff fc77 bl 100157be -10015ed0: f8c4 b054 str.w fp, [r4, #84] ; 0x54 -10015ed4: 6124 str r4, [r4, #16] -10015ed6: 61a5 str r5, [r4, #24] -10015ed8: 6264 str r4, [r4, #36] ; 0x24 -10015eda: f8c4 b050 str.w fp, [r4, #80] ; 0x50 -10015ede: f884 b058 strb.w fp, [r4, #88] ; 0x58 -10015ee2: 464a mov r2, r9 -10015ee4: 4641 mov r1, r8 -10015ee6: 4650 mov r0, sl -10015ee8: f7ff fa54 bl 10015394 -10015eec: 6020 str r0, [r4, #0] -10015eee: b106 cbz r6, 10015ef2 -10015ef0: 6034 str r4, [r6, #0] -10015ef2: f7ff fa77 bl 100153e4 -10015ef6: 4b32 ldr r3, [pc, #200] ; (10015fc0 ) -10015ef8: 4e32 ldr r6, [pc, #200] ; (10015fc4 ) -10015efa: 681a ldr r2, [r3, #0] -10015efc: f8df 80f0 ldr.w r8, [pc, #240] ; 10015ff0 -10015f00: 3201 adds r2, #1 -10015f02: 601a str r2, [r3, #0] -10015f04: 6835 ldr r5, [r6, #0] -10015f06: 2d00 cmp r5, #0 -10015f08: d14f bne.n 10015faa -10015f0a: 6034 str r4, [r6, #0] -10015f0c: 681b ldr r3, [r3, #0] -10015f0e: 2b01 cmp r3, #1 -10015f10: d11d bne.n 10015f4e -10015f12: eb08 0005 add.w r0, r8, r5 -10015f16: 3514 adds r5, #20 -10015f18: f7ff fc46 bl 100157a8 -10015f1c: 2ddc cmp r5, #220 ; 0xdc -10015f1e: d1f8 bne.n 10015f12 -10015f20: f8df 90d0 ldr.w r9, [pc, #208] ; 10015ff4 -10015f24: 4d28 ldr r5, [pc, #160] ; (10015fc8 ) -10015f26: 4648 mov r0, r9 -10015f28: f7ff fc3e bl 100157a8 -10015f2c: 4628 mov r0, r5 -10015f2e: f7ff fc3b bl 100157a8 -10015f32: 4826 ldr r0, [pc, #152] ; (10015fcc ) -10015f34: f7ff fc38 bl 100157a8 -10015f38: 4825 ldr r0, [pc, #148] ; (10015fd0 ) -10015f3a: f7ff fc35 bl 100157a8 -10015f3e: 4825 ldr r0, [pc, #148] ; (10015fd4 ) -10015f40: f7ff fc32 bl 100157a8 -10015f44: 4b24 ldr r3, [pc, #144] ; (10015fd8 ) -10015f46: f8c3 9000 str.w r9, [r3] -10015f4a: 4b24 ldr r3, [pc, #144] ; (10015fdc ) -10015f4c: 601d str r5, [r3, #0] -10015f4e: 2501 movs r5, #1 -10015f50: 4a23 ldr r2, [pc, #140] ; (10015fe0 ) -10015f52: 4924 ldr r1, [pc, #144] ; (10015fe4 ) -10015f54: 6813 ldr r3, [r2, #0] -10015f56: 6808 ldr r0, [r1, #0] -10015f58: 3301 adds r3, #1 -10015f5a: 6013 str r3, [r2, #0] -10015f5c: 6ae2 ldr r2, [r4, #44] ; 0x2c -10015f5e: 6423 str r3, [r4, #64] ; 0x40 -10015f60: fa05 f302 lsl.w r3, r5, r2 -10015f64: 4303 orrs r3, r0 -10015f66: 2014 movs r0, #20 -10015f68: 600b str r3, [r1, #0] -10015f6a: fb00 8002 mla r0, r0, r2, r8 -10015f6e: 4639 mov r1, r7 -10015f70: f7ff fc28 bl 100157c4 -10015f74: f7ff fa46 bl 10015404 -10015f78: 4b1b ldr r3, [pc, #108] ; (10015fe8 ) -10015f7a: 681b ldr r3, [r3, #0] -10015f7c: b163 cbz r3, 10015f98 -10015f7e: 6833 ldr r3, [r6, #0] -10015f80: 6ada ldr r2, [r3, #44] ; 0x2c -10015f82: 6ae3 ldr r3, [r4, #44] ; 0x2c -10015f84: 429a cmp r2, r3 -10015f86: d207 bcs.n 10015f98 -10015f88: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -10015f8c: 4b17 ldr r3, [pc, #92] ; (10015fec ) -10015f8e: 601a str r2, [r3, #0] -10015f90: f3bf 8f4f dsb sy -10015f94: f3bf 8f6f isb sy -10015f98: 4628 mov r0, r5 -10015f9a: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -10015f9e: 4628 mov r0, r5 -10015fa0: f7ff f960 bl 10015264 -10015fa4: f04f 35ff mov.w r5, #4294967295 -10015fa8: e7f6 b.n 10015f98 -10015faa: 4b0f ldr r3, [pc, #60] ; (10015fe8 ) -10015fac: 681b ldr r3, [r3, #0] -10015fae: 2b00 cmp r3, #0 -10015fb0: d1cd bne.n 10015f4e -10015fb2: 6833 ldr r3, [r6, #0] -10015fb4: 6ada ldr r2, [r3, #44] ; 0x2c -10015fb6: 6ae3 ldr r3, [r4, #44] ; 0x2c -10015fb8: 429a cmp r2, r3 -10015fba: bf98 it ls -10015fbc: 6034 strls r4, [r6, #0] -10015fbe: e7c6 b.n 10015f4e -10015fc0: 1004b3f4 .word 0x1004b3f4 -10015fc4: 1004b308 .word 0x1004b308 -10015fc8: 1004b420 .word 0x1004b420 -10015fcc: 1004b440 .word 0x1004b440 -10015fd0: 1004b46c .word 0x1004b46c -10015fd4: 1004b458 .word 0x1004b458 -10015fd8: 1004b30c .word 0x1004b30c -10015fdc: 1004b310 .word 0x1004b310 -10015fe0: 1004b404 .word 0x1004b404 -10015fe4: 1004b408 .word 0x1004b408 -10015fe8: 1004b454 .word 0x1004b454 -10015fec: e000ed04 .word 0xe000ed04 -10015ff0: 1004b314 .word 0x1004b314 -10015ff4: 1004b40c .word 0x1004b40c - -10015ff8 : -10015ff8: b570 push {r4, r5, r6, lr} -10015ffa: 4604 mov r4, r0 -10015ffc: 4d24 ldr r5, [pc, #144] ; (10016090 ) -10015ffe: f7ff f9f1 bl 100153e4 -10016002: b904 cbnz r4, 10016006 -10016004: 682c ldr r4, [r5, #0] -10016006: 1d26 adds r6, r4, #4 -10016008: 4630 mov r0, r6 -1001600a: f7ff fbfe bl 1001580a -1001600e: b960 cbnz r0, 1001602a -10016010: 2114 movs r1, #20 -10016012: 6ae0 ldr r0, [r4, #44] ; 0x2c -10016014: 4b1f ldr r3, [pc, #124] ; (10016094 ) -10016016: 4341 muls r1, r0 -10016018: 585b ldr r3, [r3, r1] -1001601a: b933 cbnz r3, 1001602a -1001601c: 2201 movs r2, #1 -1001601e: 491e ldr r1, [pc, #120] ; (10016098 ) -10016020: 4082 lsls r2, r0 -10016022: 680b ldr r3, [r1, #0] -10016024: ea23 0302 bic.w r3, r3, r2 -10016028: 600b str r3, [r1, #0] -1001602a: 6aa3 ldr r3, [r4, #40] ; 0x28 -1001602c: b11b cbz r3, 10016036 -1001602e: f104 0018 add.w r0, r4, #24 -10016032: f7ff fbea bl 1001580a -10016036: 4a19 ldr r2, [pc, #100] ; (1001609c ) -10016038: 6813 ldr r3, [r2, #0] -1001603a: 3301 adds r3, #1 -1001603c: 6013 str r3, [r2, #0] -1001603e: 682b ldr r3, [r5, #0] -10016040: 429c cmp r4, r3 -10016042: d118 bne.n 10016076 -10016044: 4631 mov r1, r6 -10016046: 4816 ldr r0, [pc, #88] ; (100160a0 ) -10016048: f7ff fbbc bl 100157c4 -1001604c: 4a15 ldr r2, [pc, #84] ; (100160a4 ) -1001604e: 6813 ldr r3, [r2, #0] -10016050: 3301 adds r3, #1 -10016052: 6013 str r3, [r2, #0] -10016054: f7ff f9d6 bl 10015404 -10016058: 4b13 ldr r3, [pc, #76] ; (100160a8 ) -1001605a: 681b ldr r3, [r3, #0] -1001605c: b153 cbz r3, 10016074 -1001605e: 682b ldr r3, [r5, #0] -10016060: 429c cmp r4, r3 -10016062: d107 bne.n 10016074 -10016064: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -10016068: 4b10 ldr r3, [pc, #64] ; (100160ac ) -1001606a: 601a str r2, [r3, #0] -1001606c: f3bf 8f4f dsb sy -10016070: f3bf 8f6f isb sy -10016074: bd70 pop {r4, r5, r6, pc} -10016076: 4a0e ldr r2, [pc, #56] ; (100160b0 ) -10016078: 6b20 ldr r0, [r4, #48] ; 0x30 -1001607a: 6813 ldr r3, [r2, #0] -1001607c: 3b01 subs r3, #1 -1001607e: 6013 str r3, [r2, #0] -10016080: f7ff f8f0 bl 10015264 -10016084: 4620 mov r0, r4 -10016086: f7ff f8ed bl 10015264 -1001608a: f7ff fe7b bl 10015d84 -1001608e: e7e1 b.n 10016054 -10016090: 1004b308 .word 0x1004b308 -10016094: 1004b314 .word 0x1004b314 -10016098: 1004b408 .word 0x1004b408 -1001609c: 1004b404 .word 0x1004b404 -100160a0: 1004b46c .word 0x1004b46c -100160a4: 1004b3f8 .word 0x1004b3f8 -100160a8: 1004b454 .word 0x1004b454 -100160ac: e000ed04 .word 0xe000ed04 -100160b0: 1004b3f4 .word 0x1004b3f4 - -100160b4 : -100160b4: b510 push {r4, lr} -100160b6: 4604 mov r4, r0 -100160b8: f7ff f994 bl 100153e4 -100160bc: b90c cbnz r4, 100160c2 -100160be: 4b03 ldr r3, [pc, #12] ; (100160cc ) -100160c0: 681c ldr r4, [r3, #0] -100160c2: 6ae4 ldr r4, [r4, #44] ; 0x2c -100160c4: f7ff f99e bl 10015404 -100160c8: 4620 mov r0, r4 -100160ca: bd10 pop {r4, pc} -100160cc: 1004b308 .word 0x1004b308 - -100160d0 : -100160d0: 290a cmp r1, #10 -100160d2: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -100160d6: bf28 it cs -100160d8: 210a movcs r1, #10 -100160da: 4604 mov r4, r0 -100160dc: 460e mov r6, r1 -100160de: f7ff f981 bl 100153e4 -100160e2: b90c cbnz r4, 100160e8 -100160e4: 4b28 ldr r3, [pc, #160] ; (10016188 ) -100160e6: 681c ldr r4, [r3, #0] -100160e8: 6ca2 ldr r2, [r4, #72] ; 0x48 -100160ea: 42b2 cmp r2, r6 -100160ec: d041 beq.n 10016172 -100160ee: 4b26 ldr r3, [pc, #152] ; (10016188 ) -100160f0: d243 bcs.n 1001617a -100160f2: 6819 ldr r1, [r3, #0] -100160f4: 428c cmp r4, r1 -100160f6: d045 beq.n 10016184 -100160f8: 681b ldr r3, [r3, #0] -100160fa: 6add ldr r5, [r3, #44] ; 0x2c -100160fc: 42b5 cmp r5, r6 -100160fe: bf8c ite hi -10016100: 2500 movhi r5, #0 -10016102: 2501 movls r5, #1 -10016104: 6ae7 ldr r7, [r4, #44] ; 0x2c -10016106: 69a3 ldr r3, [r4, #24] -10016108: 42ba cmp r2, r7 -1001610a: bf08 it eq -1001610c: 62e6 streq r6, [r4, #44] ; 0x2c -1001610e: 2b00 cmp r3, #0 -10016110: f04f 0314 mov.w r3, #20 -10016114: 64a6 str r6, [r4, #72] ; 0x48 -10016116: bfa4 itt ge -10016118: f1c6 060b rsbge r6, r6, #11 -1001611c: 61a6 strge r6, [r4, #24] -1001611e: 4e1b ldr r6, [pc, #108] ; (1001618c ) -10016120: 6962 ldr r2, [r4, #20] -10016122: fb03 6307 mla r3, r3, r7, r6 -10016126: 429a cmp r2, r3 -10016128: d11a bne.n 10016160 -1001612a: f104 0804 add.w r8, r4, #4 -1001612e: 4640 mov r0, r8 -10016130: f7ff fb6b bl 1001580a -10016134: b938 cbnz r0, 10016146 -10016136: 2201 movs r2, #1 -10016138: 4915 ldr r1, [pc, #84] ; (10016190 ) -1001613a: fa02 f707 lsl.w r7, r2, r7 -1001613e: 680b ldr r3, [r1, #0] -10016140: ea23 0707 bic.w r7, r3, r7 -10016144: 600f str r7, [r1, #0] -10016146: 2301 movs r3, #1 -10016148: 4911 ldr r1, [pc, #68] ; (10016190 ) -1001614a: 6ae2 ldr r2, [r4, #44] ; 0x2c -1001614c: 6808 ldr r0, [r1, #0] -1001614e: 4093 lsls r3, r2 -10016150: 4303 orrs r3, r0 -10016152: 2014 movs r0, #20 -10016154: 600b str r3, [r1, #0] -10016156: fb00 6002 mla r0, r0, r2, r6 -1001615a: 4641 mov r1, r8 -1001615c: f7ff fb32 bl 100157c4 -10016160: b13d cbz r5, 10016172 -10016162: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -10016166: 4b0b ldr r3, [pc, #44] ; (10016194 ) -10016168: 601a str r2, [r3, #0] -1001616a: f3bf 8f4f dsb sy -1001616e: f3bf 8f6f isb sy -10016172: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -10016176: f7ff b945 b.w 10015404 -1001617a: 681d ldr r5, [r3, #0] -1001617c: 1b63 subs r3, r4, r5 -1001617e: 425d negs r5, r3 -10016180: 415d adcs r5, r3 -10016182: e7bf b.n 10016104 -10016184: 2500 movs r5, #0 -10016186: e7bd b.n 10016104 -10016188: 1004b308 .word 0x1004b308 -1001618c: 1004b314 .word 0x1004b314 -10016190: 1004b408 .word 0x1004b408 -10016194: e000ed04 .word 0xe000ed04 - -10016198 : -10016198: b51f push {r0, r1, r2, r3, r4, lr} -1001619a: 2400 movs r4, #0 -1001619c: 4b13 ldr r3, [pc, #76] ; (100161ec ) -1001619e: 9403 str r4, [sp, #12] -100161a0: 9301 str r3, [sp, #4] -100161a2: 9402 str r4, [sp, #8] -100161a4: 9400 str r4, [sp, #0] -100161a6: 4623 mov r3, r4 -100161a8: 2246 movs r2, #70 ; 0x46 -100161aa: 4911 ldr r1, [pc, #68] ; (100161f0 ) -100161ac: 4811 ldr r0, [pc, #68] ; (100161f4 ) -100161ae: f7ff fe41 bl 10015e34 -100161b2: 2801 cmp r0, #1 -100161b4: d118 bne.n 100161e8 -100161b6: f000 fbb3 bl 10016920 -100161ba: 2801 cmp r0, #1 -100161bc: d114 bne.n 100161e8 -100161be: f04f 0350 mov.w r3, #80 ; 0x50 -100161c2: f383 8811 msr BASEPRI, r3 -100161c6: f3bf 8f6f isb sy -100161ca: f3bf 8f4f dsb sy -100161ce: f04f 32ff mov.w r2, #4294967295 -100161d2: 4b09 ldr r3, [pc, #36] ; (100161f8 ) -100161d4: 601a str r2, [r3, #0] -100161d6: 4b09 ldr r3, [pc, #36] ; (100161fc ) -100161d8: 6018 str r0, [r3, #0] -100161da: 4b09 ldr r3, [pc, #36] ; (10016200 ) -100161dc: 601c str r4, [r3, #0] -100161de: b004 add sp, #16 -100161e0: e8bd 4010 ldmia.w sp!, {r4, lr} -100161e4: f7ff ba08 b.w 100155f8 -100161e8: b004 add sp, #16 -100161ea: bd10 pop {r4, pc} -100161ec: 1004b434 .word 0x1004b434 -100161f0: 1004022a .word 0x1004022a -100161f4: 10016461 .word 0x10016461 -100161f8: 1004b438 .word 0x1004b438 -100161fc: 1004b454 .word 0x1004b454 -10016200: 1004b480 .word 0x1004b480 - -10016204 : -10016204: 4a02 ldr r2, [pc, #8] ; (10016210 ) -10016206: 6813 ldr r3, [r2, #0] -10016208: 3301 adds r3, #1 -1001620a: 6013 str r3, [r2, #0] -1001620c: 4770 bx lr -1001620e: bf00 nop -10016210: 1004b400 .word 0x1004b400 - -10016214 : -10016214: 4b01 ldr r3, [pc, #4] ; (1001621c ) -10016216: 6818 ldr r0, [r3, #0] -10016218: 4770 bx lr -1001621a: bf00 nop -1001621c: 1004b480 .word 0x1004b480 - -10016220 : -10016220: 4b01 ldr r3, [pc, #4] ; (10016228 ) -10016222: 6818 ldr r0, [r3, #0] -10016224: 4770 bx lr -10016226: bf00 nop -10016228: 1004b480 .word 0x1004b480 - -1001622c : -1001622c: b908 cbnz r0, 10016232 -1001622e: 4b02 ldr r3, [pc, #8] ; (10016238 ) -10016230: 6818 ldr r0, [r3, #0] -10016232: 3034 adds r0, #52 ; 0x34 -10016234: 4770 bx lr -10016236: bf00 nop -10016238: 1004b308 .word 0x1004b308 - -1001623c : -1001623c: 4a02 ldr r2, [pc, #8] ; (10016248 ) -1001623e: 6813 ldr r3, [r2, #0] -10016240: 4418 add r0, r3 -10016242: 6010 str r0, [r2, #0] -10016244: 4770 bx lr -10016246: bf00 nop -10016248: 1004b480 .word 0x1004b480 - -1001624c : -1001624c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10016250: 4b36 ldr r3, [pc, #216] ; (1001632c ) -10016252: 681b ldr r3, [r3, #0] -10016254: 2b00 cmp r3, #0 -10016256: d147 bne.n 100162e8 -10016258: 4b35 ldr r3, [pc, #212] ; (10016330 ) -1001625a: 681c ldr r4, [r3, #0] -1001625c: 3401 adds r4, #1 -1001625e: 601c str r4, [r3, #0] -10016260: b95c cbnz r4, 1001627a -10016262: 4a34 ldr r2, [pc, #208] ; (10016334 ) -10016264: 4b34 ldr r3, [pc, #208] ; (10016338 ) -10016266: 6811 ldr r1, [r2, #0] -10016268: 6818 ldr r0, [r3, #0] -1001626a: 6010 str r0, [r2, #0] -1001626c: 4a33 ldr r2, [pc, #204] ; (1001633c ) -1001626e: 6019 str r1, [r3, #0] -10016270: 6813 ldr r3, [r2, #0] -10016272: 3301 adds r3, #1 -10016274: 6013 str r3, [r2, #0] -10016276: f7ff fd85 bl 10015d84 -1001627a: 4d31 ldr r5, [pc, #196] ; (10016340 ) -1001627c: f04f 0b00 mov.w fp, #0 -10016280: 682b ldr r3, [r5, #0] -10016282: 4f30 ldr r7, [pc, #192] ; (10016344 ) -10016284: 429c cmp r4, r3 -10016286: d33e bcc.n 10016306 -10016288: f8df 80a8 ldr.w r8, [pc, #168] ; 10016334 -1001628c: f8df 90c4 ldr.w r9, [pc, #196] ; 10016354 -10016290: f8d8 2000 ldr.w r2, [r8] -10016294: 6812 ldr r2, [r2, #0] -10016296: bb72 cbnz r2, 100162f6 -10016298: f04f 32ff mov.w r2, #4294967295 -1001629c: 602a str r2, [r5, #0] -1001629e: e032 b.n 10016306 -100162a0: f106 0a04 add.w sl, r6, #4 -100162a4: 4650 mov r0, sl -100162a6: f7ff fab0 bl 1001580a -100162aa: 6ab1 ldr r1, [r6, #40] ; 0x28 -100162ac: b119 cbz r1, 100162b6 -100162ae: f106 0018 add.w r0, r6, #24 -100162b2: f7ff faaa bl 1001580a -100162b6: 2201 movs r2, #1 -100162b8: f04f 0e14 mov.w lr, #20 -100162bc: 6af0 ldr r0, [r6, #44] ; 0x2c -100162be: f8d9 3000 ldr.w r3, [r9] -100162c2: fa02 f100 lsl.w r1, r2, r0 -100162c6: 4319 orrs r1, r3 -100162c8: 4b1f ldr r3, [pc, #124] ; (10016348 ) -100162ca: f8c9 1000 str.w r1, [r9] -100162ce: fb0e 3000 mla r0, lr, r0, r3 -100162d2: 4651 mov r1, sl -100162d4: f7ff fa76 bl 100157c4 -100162d8: 6838 ldr r0, [r7, #0] -100162da: 6af1 ldr r1, [r6, #44] ; 0x2c -100162dc: 6ac2 ldr r2, [r0, #44] ; 0x2c -100162de: 4291 cmp r1, r2 -100162e0: bf28 it cs -100162e2: f04f 0b01 movcs.w fp, #1 -100162e6: e7d3 b.n 10016290 -100162e8: 4a18 ldr r2, [pc, #96] ; (1001634c ) -100162ea: f04f 0b00 mov.w fp, #0 -100162ee: 6813 ldr r3, [r2, #0] -100162f0: 3301 adds r3, #1 -100162f2: 6013 str r3, [r2, #0] -100162f4: e011 b.n 1001631a -100162f6: f8d8 2000 ldr.w r2, [r8] -100162fa: 68d2 ldr r2, [r2, #12] -100162fc: 68d6 ldr r6, [r2, #12] -100162fe: 6871 ldr r1, [r6, #4] -10016300: 428c cmp r4, r1 -10016302: d2cd bcs.n 100162a0 -10016304: 6029 str r1, [r5, #0] -10016306: 683a ldr r2, [r7, #0] -10016308: 4b0f ldr r3, [pc, #60] ; (10016348 ) -1001630a: 6ad1 ldr r1, [r2, #44] ; 0x2c -1001630c: 2214 movs r2, #20 -1001630e: 434a muls r2, r1 -10016310: 589a ldr r2, [r3, r2] -10016312: 2a02 cmp r2, #2 -10016314: bf28 it cs -10016316: f04f 0b01 movcs.w fp, #1 -1001631a: 4a0d ldr r2, [pc, #52] ; (10016350 ) -1001631c: 6812 ldr r2, [r2, #0] -1001631e: 2a00 cmp r2, #0 -10016320: bf18 it ne -10016322: f04f 0b01 movne.w fp, #1 -10016326: 4658 mov r0, fp -10016328: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -1001632c: 1004b400 .word 0x1004b400 -10016330: 1004b480 .word 0x1004b480 -10016334: 1004b30c .word 0x1004b30c -10016338: 1004b310 .word 0x1004b310 -1001633c: 1004b43c .word 0x1004b43c -10016340: 1004b438 .word 0x1004b438 -10016344: 1004b308 .word 0x1004b308 -10016348: 1004b314 .word 0x1004b314 -1001634c: 1004b3fc .word 0x1004b3fc -10016350: 1004b484 .word 0x1004b484 -10016354: 1004b408 .word 0x1004b408 - -10016358 : -10016358: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -1001635c: f7ff f842 bl 100153e4 -10016360: 4b2a ldr r3, [pc, #168] ; (1001640c ) -10016362: 681a ldr r2, [r3, #0] -10016364: 3a01 subs r2, #1 -10016366: 601a str r2, [r3, #0] -10016368: 681c ldr r4, [r3, #0] -1001636a: b12c cbz r4, 10016378 -1001636c: 2400 movs r4, #0 -1001636e: f7ff f849 bl 10015404 -10016372: 4620 mov r0, r4 -10016374: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -10016378: 4b25 ldr r3, [pc, #148] ; (10016410 ) -1001637a: 681b ldr r3, [r3, #0] -1001637c: 2b00 cmp r3, #0 -1001637e: d0f5 beq.n 1001636c -10016380: f8df 90a4 ldr.w r9, [pc, #164] ; 10016428 -10016384: 4f23 ldr r7, [pc, #140] ; (10016414 ) -10016386: f8df 80a4 ldr.w r8, [pc, #164] ; 1001642c -1001638a: f8d9 3000 ldr.w r3, [r9] -1001638e: b9e3 cbnz r3, 100163ca -10016390: b10c cbz r4, 10016396 -10016392: f7ff fcf7 bl 10015d84 -10016396: 4d20 ldr r5, [pc, #128] ; (10016418 ) -10016398: 682c ldr r4, [r5, #0] -1001639a: b144 cbz r4, 100163ae -1001639c: 2701 movs r7, #1 -1001639e: 4e1f ldr r6, [pc, #124] ; (1001641c ) -100163a0: f7ff ff54 bl 1001624c -100163a4: b100 cbz r0, 100163a8 -100163a6: 6037 str r7, [r6, #0] -100163a8: 3c01 subs r4, #1 -100163aa: d1f9 bne.n 100163a0 -100163ac: 602c str r4, [r5, #0] -100163ae: 4b1b ldr r3, [pc, #108] ; (1001641c ) -100163b0: 681b ldr r3, [r3, #0] -100163b2: 2b00 cmp r3, #0 -100163b4: d0da beq.n 1001636c -100163b6: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -100163ba: 4b19 ldr r3, [pc, #100] ; (10016420 ) -100163bc: 601a str r2, [r3, #0] -100163be: f3bf 8f4f dsb sy -100163c2: f3bf 8f6f isb sy -100163c6: 2401 movs r4, #1 -100163c8: e7d1 b.n 1001636e -100163ca: f8d9 300c ldr.w r3, [r9, #12] -100163ce: 2501 movs r5, #1 -100163d0: 68dc ldr r4, [r3, #12] -100163d2: 1d26 adds r6, r4, #4 -100163d4: f104 0018 add.w r0, r4, #24 -100163d8: f7ff fa17 bl 1001580a -100163dc: 4630 mov r0, r6 -100163de: f7ff fa14 bl 1001580a -100163e2: 2014 movs r0, #20 -100163e4: 6ae2 ldr r2, [r4, #44] ; 0x2c -100163e6: 6839 ldr r1, [r7, #0] -100163e8: fa05 f302 lsl.w r3, r5, r2 -100163ec: 430b orrs r3, r1 -100163ee: fb00 8002 mla r0, r0, r2, r8 -100163f2: 4631 mov r1, r6 -100163f4: 603b str r3, [r7, #0] -100163f6: f7ff f9e5 bl 100157c4 -100163fa: 4b0a ldr r3, [pc, #40] ; (10016424 ) -100163fc: 6ae2 ldr r2, [r4, #44] ; 0x2c -100163fe: 681b ldr r3, [r3, #0] -10016400: 6adb ldr r3, [r3, #44] ; 0x2c -10016402: 429a cmp r2, r3 -10016404: bf24 itt cs -10016406: 4b05 ldrcs r3, [pc, #20] ; (1001641c ) -10016408: 601d strcs r5, [r3, #0] -1001640a: e7be b.n 1001638a -1001640c: 1004b400 .word 0x1004b400 -10016410: 1004b3f4 .word 0x1004b3f4 -10016414: 1004b408 .word 0x1004b408 -10016418: 1004b3fc .word 0x1004b3fc -1001641c: 1004b484 .word 0x1004b484 -10016420: e000ed04 .word 0xe000ed04 -10016424: 1004b308 .word 0x1004b308 -10016428: 1004b440 .word 0x1004b440 -1001642c: 1004b314 .word 0x1004b314 - -10016430 : -10016430: b508 push {r3, lr} -10016432: b940 cbnz r0, 10016446 -10016434: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -10016438: 4b08 ldr r3, [pc, #32] ; (1001645c ) -1001643a: 601a str r2, [r3, #0] -1001643c: f3bf 8f4f dsb sy -10016440: f3bf 8f6f isb sy -10016444: bd08 pop {r3, pc} -10016446: f7ff fedd bl 10016204 -1001644a: 2100 movs r1, #0 -1001644c: f7ff fcac bl 10015da8 -10016450: f7ff ff82 bl 10016358 -10016454: 2800 cmp r0, #0 -10016456: d0ed beq.n 10016434 -10016458: bd08 pop {r3, pc} -1001645a: bf00 nop -1001645c: e000ed04 .word 0xe000ed04 - -10016460 : -10016460: b570 push {r4, r5, r6, lr} -10016462: 4e1c ldr r6, [pc, #112] ; (100164d4 ) -10016464: 4c1c ldr r4, [pc, #112] ; (100164d8 ) -10016466: 6823 ldr r3, [r4, #0] -10016468: b9ab cbnz r3, 10016496 -1001646a: f7ff f8dd bl 10015628 -1001646e: f7ff fc6b bl 10015d48 -10016472: 2801 cmp r0, #1 -10016474: d9f6 bls.n 10016464 -10016476: f7ff fec5 bl 10016204 -1001647a: f7ff fc65 bl 10015d48 -1001647e: 2801 cmp r0, #1 -10016480: 4604 mov r4, r0 -10016482: d905 bls.n 10016490 -10016484: f002 fd98 bl 10018fb8 -10016488: b110 cbz r0, 10016490 -1001648a: 4620 mov r0, r4 -1001648c: f7ff f800 bl 10015490 -10016490: f7ff ff62 bl 10016358 -10016494: e7e6 b.n 10016464 -10016496: f7ff feb5 bl 10016204 -1001649a: 6835 ldr r5, [r6, #0] -1001649c: f7ff ff5c bl 10016358 -100164a0: 2d00 cmp r5, #0 -100164a2: d0e0 beq.n 10016466 -100164a4: f7fe ff9e bl 100153e4 -100164a8: 68f3 ldr r3, [r6, #12] -100164aa: 68dd ldr r5, [r3, #12] -100164ac: 1d28 adds r0, r5, #4 -100164ae: f7ff f9ac bl 1001580a -100164b2: 4a0a ldr r2, [pc, #40] ; (100164dc ) -100164b4: 6813 ldr r3, [r2, #0] -100164b6: 3b01 subs r3, #1 -100164b8: 6013 str r3, [r2, #0] -100164ba: 6823 ldr r3, [r4, #0] -100164bc: 3b01 subs r3, #1 -100164be: 6023 str r3, [r4, #0] -100164c0: f7fe ffa0 bl 10015404 -100164c4: 6b28 ldr r0, [r5, #48] ; 0x30 -100164c6: f7fe fecd bl 10015264 -100164ca: 4628 mov r0, r5 -100164cc: f7fe feca bl 10015264 -100164d0: e7c9 b.n 10016466 -100164d2: bf00 nop -100164d4: 1004b46c .word 0x1004b46c -100164d8: 1004b3f8 .word 0x1004b3f8 -100164dc: 1004b3f4 .word 0x1004b3f4 - -100164e0 : -100164e0: 4b18 ldr r3, [pc, #96] ; (10016544 ) -100164e2: b570 push {r4, r5, r6, lr} -100164e4: 681a ldr r2, [r3, #0] -100164e6: 4b18 ldr r3, [pc, #96] ; (10016548 ) -100164e8: b112 cbz r2, 100164f0 -100164ea: 2201 movs r2, #1 -100164ec: 601a str r2, [r3, #0] -100164ee: bd70 pop {r4, r5, r6, pc} -100164f0: 601a str r2, [r3, #0] -100164f2: 4b16 ldr r3, [pc, #88] ; (1001654c ) -100164f4: 4a16 ldr r2, [pc, #88] ; (10016550 ) -100164f6: 6819 ldr r1, [r3, #0] -100164f8: 6815 ldr r5, [r2, #0] -100164fa: 4816 ldr r0, [pc, #88] ; (10016554 ) -100164fc: 42a9 cmp r1, r5 -100164fe: d904 bls.n 1001650a -10016500: 6804 ldr r4, [r0, #0] -10016502: 6d23 ldr r3, [r4, #80] ; 0x50 -10016504: 1b5b subs r3, r3, r5 -10016506: 440b add r3, r1 -10016508: 6523 str r3, [r4, #80] ; 0x50 -1001650a: 4b13 ldr r3, [pc, #76] ; (10016558 ) -1001650c: 6011 str r1, [r2, #0] -1001650e: 681b ldr r3, [r3, #0] -10016510: fab3 f383 clz r3, r3 -10016514: 2414 movs r4, #20 -10016516: b2db uxtb r3, r3 -10016518: f1c3 031f rsb r3, r3, #31 -1001651c: fb04 f203 mul.w r2, r4, r3 -10016520: 490e ldr r1, [pc, #56] ; (1001655c ) -10016522: 188d adds r5, r1, r2 -10016524: 686e ldr r6, [r5, #4] -10016526: 3208 adds r2, #8 -10016528: 6876 ldr r6, [r6, #4] -1001652a: 440a add r2, r1 -1001652c: 4296 cmp r6, r2 -1001652e: fb04 1303 mla r3, r4, r3, r1 -10016532: bf08 it eq -10016534: 6872 ldreq r2, [r6, #4] -10016536: 606e str r6, [r5, #4] -10016538: bf08 it eq -1001653a: 606a streq r2, [r5, #4] -1001653c: 685b ldr r3, [r3, #4] -1001653e: 68db ldr r3, [r3, #12] -10016540: 6003 str r3, [r0, #0] -10016542: bd70 pop {r4, r5, r6, pc} -10016544: 1004b400 .word 0x1004b400 -10016548: 1004b484 .word 0x1004b484 -1001654c: 1004b480 .word 0x1004b480 -10016550: 1004b3f0 .word 0x1004b3f0 -10016554: 1004b308 .word 0x1004b308 -10016558: 1004b408 .word 0x1004b408 -1001655c: 1004b314 .word 0x1004b314 - -10016560 : -10016560: b510 push {r4, lr} -10016562: 460c mov r4, r1 -10016564: 4b05 ldr r3, [pc, #20] ; (1001657c ) -10016566: 6819 ldr r1, [r3, #0] -10016568: 3118 adds r1, #24 -1001656a: f7ff f937 bl 100157dc -1001656e: 4620 mov r0, r4 -10016570: e8bd 4010 ldmia.w sp!, {r4, lr} -10016574: 2101 movs r1, #1 -10016576: f7ff bc17 b.w 10015da8 -1001657a: bf00 nop -1001657c: 1004b308 .word 0x1004b308 - -10016580 : -10016580: b510 push {r4, lr} -10016582: 4614 mov r4, r2 -10016584: 4b07 ldr r3, [pc, #28] ; (100165a4 ) -10016586: f041 4100 orr.w r1, r1, #2147483648 ; 0x80000000 -1001658a: 681a ldr r2, [r3, #0] -1001658c: 6191 str r1, [r2, #24] -1001658e: 6819 ldr r1, [r3, #0] -10016590: 3118 adds r1, #24 -10016592: f7ff f917 bl 100157c4 -10016596: 4620 mov r0, r4 -10016598: e8bd 4010 ldmia.w sp!, {r4, lr} -1001659c: 2101 movs r1, #1 -1001659e: f7ff bc03 b.w 10015da8 -100165a2: bf00 nop -100165a4: 1004b308 .word 0x1004b308 - -100165a8 : -100165a8: b538 push {r3, r4, r5, lr} -100165aa: 4614 mov r4, r2 -100165ac: 460d mov r5, r1 -100165ae: 4b08 ldr r3, [pc, #32] ; (100165d0 ) -100165b0: 6819 ldr r1, [r3, #0] -100165b2: 3118 adds r1, #24 -100165b4: f7ff f906 bl 100157c4 -100165b8: 2c00 cmp r4, #0 -100165ba: 4621 mov r1, r4 -100165bc: bf08 it eq -100165be: 4628 moveq r0, r5 -100165c0: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -100165c4: bf18 it ne -100165c6: f04f 30ff movne.w r0, #4294967295 -100165ca: f7ff bbed b.w 10015da8 -100165ce: bf00 nop -100165d0: 1004b308 .word 0x1004b308 - -100165d4 : -100165d4: b538 push {r3, r4, r5, lr} -100165d6: 68c3 ldr r3, [r0, #12] -100165d8: 68dc ldr r4, [r3, #12] -100165da: f104 0518 add.w r5, r4, #24 -100165de: 4628 mov r0, r5 -100165e0: f7ff f913 bl 1001580a -100165e4: 4b12 ldr r3, [pc, #72] ; (10016630 ) -100165e6: 681b ldr r3, [r3, #0] -100165e8: b9f3 cbnz r3, 10016628 -100165ea: 1d25 adds r5, r4, #4 -100165ec: 4628 mov r0, r5 -100165ee: f7ff f90c bl 1001580a -100165f2: 2301 movs r3, #1 -100165f4: 490f ldr r1, [pc, #60] ; (10016634 ) -100165f6: 6ae2 ldr r2, [r4, #44] ; 0x2c -100165f8: 6808 ldr r0, [r1, #0] -100165fa: 4093 lsls r3, r2 -100165fc: 4303 orrs r3, r0 -100165fe: 2014 movs r0, #20 -10016600: 600b str r3, [r1, #0] -10016602: 4629 mov r1, r5 -10016604: 4b0c ldr r3, [pc, #48] ; (10016638 ) -10016606: fb00 3002 mla r0, r0, r2, r3 -1001660a: f7ff f8db bl 100157c4 -1001660e: 4b0b ldr r3, [pc, #44] ; (1001663c ) -10016610: 6ae2 ldr r2, [r4, #44] ; 0x2c -10016612: 681b ldr r3, [r3, #0] -10016614: 6adb ldr r3, [r3, #44] ; 0x2c -10016616: 429a cmp r2, r3 -10016618: bf85 ittet hi -1001661a: 2001 movhi r0, #1 -1001661c: 4b08 ldrhi r3, [pc, #32] ; (10016640 ) -1001661e: 2000 movls r0, #0 -10016620: 6018 strhi r0, [r3, #0] -10016622: f7ff fbaf bl 10015d84 -10016626: bd38 pop {r3, r4, r5, pc} -10016628: 4629 mov r1, r5 -1001662a: 4806 ldr r0, [pc, #24] ; (10016644 ) -1001662c: e7ed b.n 1001660a -1001662e: bf00 nop -10016630: 1004b400 .word 0x1004b400 -10016634: 1004b408 .word 0x1004b408 -10016638: 1004b314 .word 0x1004b314 -1001663c: 1004b308 .word 0x1004b308 -10016640: 1004b484 .word 0x1004b484 -10016644: 1004b440 .word 0x1004b440 - -10016648 : -10016648: b570 push {r4, r5, r6, lr} -1001664a: 2401 movs r4, #1 -1001664c: 68c5 ldr r5, [r0, #12] -1001664e: f041 4100 orr.w r1, r1, #2147483648 ; 0x80000000 -10016652: 6001 str r1, [r0, #0] -10016654: 1d2e adds r6, r5, #4 -10016656: f7ff f8d8 bl 1001580a -1001665a: 4630 mov r0, r6 -1001665c: f7ff f8d5 bl 1001580a -10016660: 490c ldr r1, [pc, #48] ; (10016694 ) -10016662: 6aea ldr r2, [r5, #44] ; 0x2c -10016664: 6808 ldr r0, [r1, #0] -10016666: fa04 f302 lsl.w r3, r4, r2 -1001666a: 4303 orrs r3, r0 -1001666c: 2014 movs r0, #20 -1001666e: 600b str r3, [r1, #0] -10016670: 4b09 ldr r3, [pc, #36] ; (10016698 ) -10016672: 4631 mov r1, r6 -10016674: fb00 3002 mla r0, r0, r2, r3 -10016678: f7ff f8a4 bl 100157c4 -1001667c: 4b07 ldr r3, [pc, #28] ; (1001669c ) -1001667e: 6aea ldr r2, [r5, #44] ; 0x2c -10016680: 681b ldr r3, [r3, #0] -10016682: 6adb ldr r3, [r3, #44] ; 0x2c -10016684: 429a cmp r2, r3 -10016686: bf83 ittte hi -10016688: 4b05 ldrhi r3, [pc, #20] ; (100166a0 ) -1001668a: 4620 movhi r0, r4 -1001668c: 601c strhi r4, [r3, #0] -1001668e: 2000 movls r0, #0 -10016690: bd70 pop {r4, r5, r6, pc} -10016692: bf00 nop -10016694: 1004b408 .word 0x1004b408 -10016698: 1004b314 .word 0x1004b314 -1001669c: 1004b308 .word 0x1004b308 -100166a0: 1004b484 .word 0x1004b484 - -100166a4 : -100166a4: 4b03 ldr r3, [pc, #12] ; (100166b4 ) -100166a6: 681b ldr r3, [r3, #0] -100166a8: 6003 str r3, [r0, #0] -100166aa: 4b03 ldr r3, [pc, #12] ; (100166b8 ) -100166ac: 681b ldr r3, [r3, #0] -100166ae: 6043 str r3, [r0, #4] -100166b0: 4770 bx lr -100166b2: bf00 nop -100166b4: 1004b43c .word 0x1004b43c -100166b8: 1004b480 .word 0x1004b480 - -100166bc : -100166bc: b538 push {r3, r4, r5, lr} -100166be: 460d mov r5, r1 -100166c0: 4604 mov r4, r0 -100166c2: f7fe fe8f bl 100153e4 -100166c6: 4b0e ldr r3, [pc, #56] ; (10016700 ) -100166c8: 682a ldr r2, [r5, #0] -100166ca: 6818 ldr r0, [r3, #0] -100166cc: 1c53 adds r3, r2, #1 -100166ce: d010 beq.n 100166f2 -100166d0: 4b0c ldr r3, [pc, #48] ; (10016704 ) -100166d2: 6821 ldr r1, [r4, #0] -100166d4: 681b ldr r3, [r3, #0] -100166d6: 4299 cmp r1, r3 -100166d8: 6863 ldr r3, [r4, #4] -100166da: d001 beq.n 100166e0 -100166dc: 4298 cmp r0, r3 -100166de: d20d bcs.n 100166fc -100166e0: 1ac1 subs r1, r0, r3 -100166e2: 428a cmp r2, r1 -100166e4: d90a bls.n 100166fc -100166e6: 1a1b subs r3, r3, r0 -100166e8: 4413 add r3, r2 -100166ea: 602b str r3, [r5, #0] -100166ec: 4620 mov r0, r4 -100166ee: f7ff ffd9 bl 100166a4 -100166f2: 2400 movs r4, #0 -100166f4: f7fe fe86 bl 10015404 -100166f8: 4620 mov r0, r4 -100166fa: bd38 pop {r3, r4, r5, pc} -100166fc: 2401 movs r4, #1 -100166fe: e7f9 b.n 100166f4 -10016700: 1004b480 .word 0x1004b480 -10016704: 1004b43c .word 0x1004b43c - -10016708 : -10016708: 2201 movs r2, #1 -1001670a: 4b01 ldr r3, [pc, #4] ; (10016710 ) -1001670c: 601a str r2, [r3, #0] -1001670e: 4770 bx lr -10016710: 1004b484 .word 0x1004b484 - -10016714 : -10016714: 4b08 ldr r3, [pc, #32] ; (10016738 ) -10016716: 6818 ldr r0, [r3, #0] -10016718: b960 cbnz r0, 10016734 -1001671a: 4b08 ldr r3, [pc, #32] ; (1001673c ) -1001671c: 681b ldr r3, [r3, #0] -1001671e: b953 cbnz r3, 10016736 -10016720: 4b07 ldr r3, [pc, #28] ; (10016740 ) -10016722: 4a08 ldr r2, [pc, #32] ; (10016744 ) -10016724: 681b ldr r3, [r3, #0] -10016726: 6810 ldr r0, [r2, #0] -10016728: 3b01 subs r3, #1 -1001672a: 4298 cmp r0, r3 -1001672c: bf14 ite ne -1001672e: 2001 movne r0, #1 -10016730: 2002 moveq r0, #2 -10016732: 4770 bx lr -10016734: 2000 movs r0, #0 -10016736: 4770 bx lr -10016738: 1004b440 .word 0x1004b440 -1001673c: 1004b484 .word 0x1004b484 -10016740: 1004b3f4 .word 0x1004b3f4 -10016744: 1004b458 .word 0x1004b458 - -10016748 : -10016748: 4b05 ldr r3, [pc, #20] ; (10016760 ) -1001674a: 681b ldr r3, [r3, #0] -1001674c: b133 cbz r3, 1001675c -1001674e: 4b05 ldr r3, [pc, #20] ; (10016764 ) -10016750: 681b ldr r3, [r3, #0] -10016752: 2b00 cmp r3, #0 -10016754: bf0c ite eq -10016756: 2002 moveq r0, #2 -10016758: 2000 movne r0, #0 -1001675a: 4770 bx lr -1001675c: 2001 movs r0, #1 -1001675e: 4770 bx lr -10016760: 1004b454 .word 0x1004b454 -10016764: 1004b400 .word 0x1004b400 - -10016768 : -10016768: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1001676c: 4604 mov r4, r0 -1001676e: 2800 cmp r0, #0 -10016770: d039 beq.n 100167e6 -10016772: 4d1e ldr r5, [pc, #120] ; (100167ec ) -10016774: 6ac3 ldr r3, [r0, #44] ; 0x2c -10016776: 682a ldr r2, [r5, #0] -10016778: 6ad2 ldr r2, [r2, #44] ; 0x2c -1001677a: 4293 cmp r3, r2 -1001677c: d233 bcs.n 100167e6 -1001677e: 2714 movs r7, #20 -10016780: 6982 ldr r2, [r0, #24] -10016782: 4e1b ldr r6, [pc, #108] ; (100167f0 ) -10016784: 2a00 cmp r2, #0 -10016786: bfa8 it ge -10016788: 682a ldrge r2, [r5, #0] -1001678a: fb07 6303 mla r3, r7, r3, r6 -1001678e: bfa2 ittt ge -10016790: 6ad2 ldrge r2, [r2, #44] ; 0x2c -10016792: f1c2 020b rsbge r2, r2, #11 -10016796: 6182 strge r2, [r0, #24] -10016798: 6942 ldr r2, [r0, #20] -1001679a: 429a cmp r2, r3 -1001679c: d120 bne.n 100167e0 -1001679e: f100 0804 add.w r8, r0, #4 -100167a2: 4640 mov r0, r8 -100167a4: f7ff f831 bl 1001580a -100167a8: 4a12 ldr r2, [pc, #72] ; (100167f4 ) -100167aa: b948 cbnz r0, 100167c0 -100167ac: 6ae0 ldr r0, [r4, #44] ; 0x2c -100167ae: 4347 muls r7, r0 -100167b0: 59f3 ldr r3, [r6, r7] -100167b2: b92b cbnz r3, 100167c0 -100167b4: 2101 movs r1, #1 -100167b6: 6813 ldr r3, [r2, #0] -100167b8: 4081 lsls r1, r0 -100167ba: ea23 0301 bic.w r3, r3, r1 -100167be: 6013 str r3, [r2, #0] -100167c0: 682b ldr r3, [r5, #0] -100167c2: 6811 ldr r1, [r2, #0] -100167c4: 6ad8 ldr r0, [r3, #44] ; 0x2c -100167c6: 2301 movs r3, #1 -100167c8: 4083 lsls r3, r0 -100167ca: 430b orrs r3, r1 -100167cc: 6013 str r3, [r2, #0] -100167ce: 2314 movs r3, #20 -100167d0: 62e0 str r0, [r4, #44] ; 0x2c -100167d2: 4641 mov r1, r8 -100167d4: fb03 6000 mla r0, r3, r0, r6 -100167d8: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -100167dc: f7fe bff2 b.w 100157c4 -100167e0: 682b ldr r3, [r5, #0] -100167e2: 6adb ldr r3, [r3, #44] ; 0x2c -100167e4: 62c3 str r3, [r0, #44] ; 0x2c -100167e6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100167ea: bf00 nop -100167ec: 1004b308 .word 0x1004b308 -100167f0: 1004b314 .word 0x1004b314 -100167f4: 1004b408 .word 0x1004b408 - -100167f8 : -100167f8: b5f8 push {r3, r4, r5, r6, r7, lr} -100167fa: 4604 mov r4, r0 -100167fc: b908 cbnz r0, 10016802 -100167fe: 2000 movs r0, #0 -10016800: bdf8 pop {r3, r4, r5, r6, r7, pc} -10016802: 6cc3 ldr r3, [r0, #76] ; 0x4c -10016804: 6ac1 ldr r1, [r0, #44] ; 0x2c -10016806: 6c82 ldr r2, [r0, #72] ; 0x48 -10016808: 3b01 subs r3, #1 -1001680a: 4291 cmp r1, r2 -1001680c: 64c3 str r3, [r0, #76] ; 0x4c -1001680e: d0f6 beq.n 100167fe -10016810: 2b00 cmp r3, #0 -10016812: d1f4 bne.n 100167fe -10016814: 1d05 adds r5, r0, #4 -10016816: 4628 mov r0, r5 -10016818: f7fe fff7 bl 1001580a -1001681c: 4e10 ldr r6, [pc, #64] ; (10016860 ) -1001681e: 4a11 ldr r2, [pc, #68] ; (10016864 ) -10016820: b950 cbnz r0, 10016838 -10016822: 2114 movs r1, #20 -10016824: 6ae7 ldr r7, [r4, #44] ; 0x2c -10016826: 4379 muls r1, r7 -10016828: 5873 ldr r3, [r6, r1] -1001682a: b92b cbnz r3, 10016838 -1001682c: 2001 movs r0, #1 -1001682e: 6813 ldr r3, [r2, #0] -10016830: 40b8 lsls r0, r7 -10016832: ea23 0300 bic.w r3, r3, r0 -10016836: 6013 str r3, [r2, #0] -10016838: 6ca3 ldr r3, [r4, #72] ; 0x48 -1001683a: f1c3 010b rsb r1, r3, #11 -1001683e: 62e3 str r3, [r4, #44] ; 0x2c -10016840: 61a1 str r1, [r4, #24] -10016842: 2401 movs r4, #1 -10016844: 6811 ldr r1, [r2, #0] -10016846: fa04 f003 lsl.w r0, r4, r3 -1001684a: 4308 orrs r0, r1 -1001684c: 6010 str r0, [r2, #0] -1001684e: 2014 movs r0, #20 -10016850: 4629 mov r1, r5 -10016852: fb00 6003 mla r0, r0, r3, r6 -10016856: f7fe ffb5 bl 100157c4 -1001685a: 4620 mov r0, r4 -1001685c: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001685e: bf00 nop -10016860: 1004b314 .word 0x1004b314 -10016864: 1004b408 .word 0x1004b408 - -10016868 : -10016868: 4b04 ldr r3, [pc, #16] ; (1001687c ) -1001686a: 681a ldr r2, [r3, #0] -1001686c: 6990 ldr r0, [r2, #24] -1001686e: 681a ldr r2, [r3, #0] -10016870: 681b ldr r3, [r3, #0] -10016872: 6adb ldr r3, [r3, #44] ; 0x2c -10016874: f1c3 030b rsb r3, r3, #11 -10016878: 6193 str r3, [r2, #24] -1001687a: 4770 bx lr -1001687c: 1004b308 .word 0x1004b308 - -10016880 : -10016880: 4b04 ldr r3, [pc, #16] ; (10016894 ) -10016882: 681a ldr r2, [r3, #0] -10016884: b11a cbz r2, 1001688e -10016886: 6819 ldr r1, [r3, #0] -10016888: 6cca ldr r2, [r1, #76] ; 0x4c -1001688a: 3201 adds r2, #1 -1001688c: 64ca str r2, [r1, #76] ; 0x4c -1001688e: 6818 ldr r0, [r3, #0] -10016890: 4770 bx lr -10016892: bf00 nop -10016894: 1004b308 .word 0x1004b308 - -10016898 : -10016898: b5f8 push {r3, r4, r5, r6, r7, lr} -1001689a: 4c0d ldr r4, [pc, #52] ; (100168d0 ) -1001689c: f7fe fda2 bl 100153e4 -100168a0: 6825 ldr r5, [r4, #0] -100168a2: b98d cbnz r5, 100168c8 -100168a4: 4f0b ldr r7, [pc, #44] ; (100168d4 ) -100168a6: 4e0c ldr r6, [pc, #48] ; (100168d8 ) -100168a8: 4638 mov r0, r7 -100168aa: f7fe ff7d bl 100157a8 -100168ae: 4630 mov r0, r6 -100168b0: f7fe ff7a bl 100157a8 -100168b4: 4b09 ldr r3, [pc, #36] ; (100168dc ) -100168b6: 462a mov r2, r5 -100168b8: 601f str r7, [r3, #0] -100168ba: 4b09 ldr r3, [pc, #36] ; (100168e0 ) -100168bc: 2110 movs r1, #16 -100168be: 200a movs r0, #10 -100168c0: 601e str r6, [r3, #0] -100168c2: f7ff f867 bl 10015994 -100168c6: 6020 str r0, [r4, #0] -100168c8: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -100168cc: f7fe bd9a b.w 10015404 -100168d0: 1004b4bc .word 0x1004b4bc -100168d4: 1004b490 .word 0x1004b490 -100168d8: 1004b4a4 .word 0x1004b4a4 -100168dc: 1004b488 .word 0x1004b488 -100168e0: 1004b48c .word 0x1004b48c - -100168e4 : -100168e4: 4291 cmp r1, r2 -100168e6: b508 push {r3, lr} -100168e8: 6041 str r1, [r0, #4] -100168ea: 6100 str r0, [r0, #16] -100168ec: d80a bhi.n 10016904 -100168ee: 1ad2 subs r2, r2, r3 -100168f0: 6983 ldr r3, [r0, #24] -100168f2: 429a cmp r2, r3 -100168f4: d20d bcs.n 10016912 -100168f6: 4b08 ldr r3, [pc, #32] ; (10016918 ) -100168f8: 1d01 adds r1, r0, #4 -100168fa: 6818 ldr r0, [r3, #0] -100168fc: f7fe ff6e bl 100157dc -10016900: 2000 movs r0, #0 -10016902: bd08 pop {r3, pc} -10016904: 429a cmp r2, r3 -10016906: d201 bcs.n 1001690c -10016908: 4299 cmp r1, r3 -1001690a: d202 bcs.n 10016912 -1001690c: 1d01 adds r1, r0, #4 -1001690e: 4b03 ldr r3, [pc, #12] ; (1001691c ) -10016910: e7f3 b.n 100168fa -10016912: 2001 movs r0, #1 -10016914: bd08 pop {r3, pc} -10016916: bf00 nop -10016918: 1004b48c .word 0x1004b48c -1001691c: 1004b488 .word 0x1004b488 - -10016920 : -10016920: b51f push {r0, r1, r2, r3, r4, lr} -10016922: f7ff ffb9 bl 10016898 -10016926: 4b09 ldr r3, [pc, #36] ; (1001694c ) -10016928: 6818 ldr r0, [r3, #0] -1001692a: 2300 movs r3, #0 -1001692c: b158 cbz r0, 10016946 -1001692e: 4a08 ldr r2, [pc, #32] ; (10016950 ) -10016930: 9303 str r3, [sp, #12] -10016932: 9201 str r2, [sp, #4] -10016934: 2201 movs r2, #1 -10016936: 9302 str r3, [sp, #8] -10016938: 9200 str r2, [sp, #0] -1001693a: 4906 ldr r1, [pc, #24] ; (10016954 ) -1001693c: f44f 7200 mov.w r2, #512 ; 0x200 -10016940: 4805 ldr r0, [pc, #20] ; (10016958 ) -10016942: f7ff fa77 bl 10015e34 -10016946: b005 add sp, #20 -10016948: f85d fb04 ldr.w pc, [sp], #4 -1001694c: 1004b4bc .word 0x1004b4bc -10016950: 1004b4c0 .word 0x1004b4c0 -10016954: 1004022f .word 0x1004022f -10016958: 10016a39 .word 0x10016a39 - -1001695c : -1001695c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10016960: 4680 mov r8, r0 -10016962: 202c movs r0, #44 ; 0x2c -10016964: 460f mov r7, r1 -10016966: 4616 mov r6, r2 -10016968: 461d mov r5, r3 -1001696a: f7fe fbdf bl 1001512c -1001696e: 4604 mov r4, r0 -10016970: b158 cbz r0, 1001698a -10016972: f7ff ff91 bl 10016898 -10016976: 9b06 ldr r3, [sp, #24] -10016978: f8c4 8000 str.w r8, [r4] -1001697c: 61a7 str r7, [r4, #24] -1001697e: 61e6 str r6, [r4, #28] -10016980: 6225 str r5, [r4, #32] -10016982: 6263 str r3, [r4, #36] ; 0x24 -10016984: 1d20 adds r0, r4, #4 -10016986: f7fe ff1a bl 100157be -1001698a: 4620 mov r0, r4 -1001698c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -10016990 : -10016990: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -10016992: 4c0e ldr r4, [pc, #56] ; (100169cc ) -10016994: 4605 mov r5, r0 -10016996: 6820 ldr r0, [r4, #0] -10016998: 4616 mov r6, r2 -1001699a: 461a mov r2, r3 -1001699c: b178 cbz r0, 100169be -1001699e: 2905 cmp r1, #5 -100169a0: e88d 0042 stmia.w sp, {r1, r6} -100169a4: 9502 str r5, [sp, #8] -100169a6: dc0c bgt.n 100169c2 -100169a8: f7ff fece bl 10016748 -100169ac: 2300 movs r3, #0 -100169ae: 2802 cmp r0, #2 -100169b0: bf0c ite eq -100169b2: 9a08 ldreq r2, [sp, #32] -100169b4: 461a movne r2, r3 -100169b6: 4669 mov r1, sp -100169b8: 6820 ldr r0, [r4, #0] -100169ba: f7ff f80f bl 100159dc -100169be: b004 add sp, #16 -100169c0: bd70 pop {r4, r5, r6, pc} -100169c2: 2300 movs r3, #0 -100169c4: 4669 mov r1, sp -100169c6: f7ff f895 bl 10015af4 -100169ca: e7f8 b.n 100169be -100169cc: 1004b4bc .word 0x1004b4bc - -100169d0 : -100169d0: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -100169d4: f04f 0800 mov.w r8, #0 -100169d8: 4d15 ldr r5, [pc, #84] ; (10016a30 ) -100169da: 682b ldr r3, [r5, #0] -100169dc: 681a ldr r2, [r3, #0] -100169de: b932 cbnz r2, 100169ee -100169e0: 4a14 ldr r2, [pc, #80] ; (10016a34 ) -100169e2: 6811 ldr r1, [r2, #0] -100169e4: 6013 str r3, [r2, #0] -100169e6: 6029 str r1, [r5, #0] -100169e8: b002 add sp, #8 -100169ea: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100169ee: 68db ldr r3, [r3, #12] -100169f0: 68dc ldr r4, [r3, #12] -100169f2: 681e ldr r6, [r3, #0] -100169f4: 1d27 adds r7, r4, #4 -100169f6: 4638 mov r0, r7 -100169f8: f7fe ff07 bl 1001580a -100169fc: 6a63 ldr r3, [r4, #36] ; 0x24 -100169fe: 4620 mov r0, r4 -10016a00: 4798 blx r3 -10016a02: 69e3 ldr r3, [r4, #28] -10016a04: 2b01 cmp r3, #1 -10016a06: d1e8 bne.n 100169da -10016a08: 69a3 ldr r3, [r4, #24] -10016a0a: 4433 add r3, r6 -10016a0c: 429e cmp r6, r3 -10016a0e: d206 bcs.n 10016a1e -10016a10: 6063 str r3, [r4, #4] -10016a12: 6124 str r4, [r4, #16] -10016a14: 4639 mov r1, r7 -10016a16: 6828 ldr r0, [r5, #0] -10016a18: f7fe fee0 bl 100157dc -10016a1c: e7dd b.n 100169da -10016a1e: 2300 movs r3, #0 -10016a20: f8cd 8000 str.w r8, [sp] -10016a24: 4632 mov r2, r6 -10016a26: 4619 mov r1, r3 -10016a28: 4620 mov r0, r4 -10016a2a: f7ff ffb1 bl 10016990 -10016a2e: e7d4 b.n 100169da -10016a30: 1004b488 .word 0x1004b488 -10016a34: 1004b48c .word 0x1004b48c - -10016a38 : -10016a38: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10016a3c: f8df 8184 ldr.w r8, [pc, #388] ; 10016bc4 -10016a40: b087 sub sp, #28 -10016a42: f8df b184 ldr.w fp, [pc, #388] ; 10016bc8 -10016a46: f8db 2000 ldr.w r2, [fp] -10016a4a: 6817 ldr r7, [r2, #0] -10016a4c: 2f00 cmp r7, #0 -10016a4e: d06f beq.n 10016b30 -10016a50: 68d2 ldr r2, [r2, #12] -10016a52: f8d2 9000 ldr.w r9, [r2] -10016a56: f7ff fbd5 bl 10016204 -10016a5a: f7ff fbdb bl 10016214 -10016a5e: 4d56 ldr r5, [pc, #344] ; (10016bb8 ) -10016a60: 4682 mov sl, r0 -10016a62: 682a ldr r2, [r5, #0] -10016a64: 462e mov r6, r5 -10016a66: 4290 cmp r0, r2 -10016a68: d264 bcs.n 10016b34 -10016a6a: f7ff ffb1 bl 100169d0 -10016a6e: 2401 movs r4, #1 -10016a70: f8c5 a000 str.w sl, [r5] -10016a74: 4d51 ldr r5, [pc, #324] ; (10016bbc ) -10016a76: 2c00 cmp r4, #0 -10016a78: d178 bne.n 10016b6c -10016a7a: 2f00 cmp r7, #0 -10016a7c: d05c beq.n 10016b38 -10016a7e: 45d1 cmp r9, sl -10016a80: d872 bhi.n 10016b68 -10016a82: f7ff fc69 bl 10016358 -10016a86: f8db 3000 ldr.w r3, [fp] -10016a8a: 68db ldr r3, [r3, #12] -10016a8c: f8d3 b00c ldr.w fp, [r3, #12] -10016a90: f10b 0004 add.w r0, fp, #4 -10016a94: f7fe feb9 bl 1001580a -10016a98: f8db 301c ldr.w r3, [fp, #28] -10016a9c: 2b01 cmp r3, #1 -10016a9e: d10f bne.n 10016ac0 -10016aa0: f8db 1018 ldr.w r1, [fp, #24] -10016aa4: 464b mov r3, r9 -10016aa6: 4652 mov r2, sl -10016aa8: 4449 add r1, r9 -10016aaa: 4658 mov r0, fp -10016aac: f7ff ff1a bl 100168e4 -10016ab0: b130 cbz r0, 10016ac0 -10016ab2: 9400 str r4, [sp, #0] -10016ab4: 4623 mov r3, r4 -10016ab6: 464a mov r2, r9 -10016ab8: 4621 mov r1, r4 -10016aba: 4658 mov r0, fp -10016abc: f7ff ff68 bl 10016990 -10016ac0: f8db 3024 ldr.w r3, [fp, #36] ; 0x24 -10016ac4: 4658 mov r0, fp -10016ac6: 4798 blx r3 -10016ac8: 2300 movs r3, #0 -10016aca: a902 add r1, sp, #8 -10016acc: 461a mov r2, r3 -10016ace: 6828 ldr r0, [r5, #0] -10016ad0: f7ff f872 bl 10015bb8 -10016ad4: 2800 cmp r0, #0 -10016ad6: d0b4 beq.n 10016a42 -10016ad8: 9b02 ldr r3, [sp, #8] -10016ada: 2b00 cmp r3, #0 -10016adc: da03 bge.n 10016ae6 -10016ade: 9905 ldr r1, [sp, #20] -10016ae0: 9804 ldr r0, [sp, #16] -10016ae2: 9b03 ldr r3, [sp, #12] -10016ae4: 4798 blx r3 -10016ae6: 9b02 ldr r3, [sp, #8] -10016ae8: 2b00 cmp r3, #0 -10016aea: dbed blt.n 10016ac8 -10016aec: 9c04 ldr r4, [sp, #16] -10016aee: 6963 ldr r3, [r4, #20] -10016af0: b113 cbz r3, 10016af8 -10016af2: 1d20 adds r0, r4, #4 -10016af4: f7fe fe89 bl 1001580a -10016af8: f7ff fb8c bl 10016214 -10016afc: 6833 ldr r3, [r6, #0] -10016afe: 4681 mov r9, r0 -10016b00: 4298 cmp r0, r3 -10016b02: d201 bcs.n 10016b08 -10016b04: f7ff ff64 bl 100169d0 -10016b08: 9b02 ldr r3, [sp, #8] -10016b0a: f8c6 9000 str.w r9, [r6] -10016b0e: 2b09 cmp r3, #9 -10016b10: d8da bhi.n 10016ac8 -10016b12: 2201 movs r2, #1 -10016b14: fa02 f303 lsl.w r3, r2, r3 -10016b18: f413 7a04 ands.w sl, r3, #528 ; 0x210 -10016b1c: d143 bne.n 10016ba6 -10016b1e: f013 0fc7 tst.w r3, #199 ; 0xc7 -10016b22: d126 bne.n 10016b72 -10016b24: 069b lsls r3, r3, #26 -10016b26: d5cf bpl.n 10016ac8 -10016b28: 4620 mov r0, r4 -10016b2a: f7fe fb9b bl 10015264 -10016b2e: e7cb b.n 10016ac8 -10016b30: 46b9 mov r9, r7 -10016b32: e790 b.n 10016a56 -10016b34: 2400 movs r4, #0 -10016b36: e79b b.n 10016a70 -10016b38: 4b21 ldr r3, [pc, #132] ; (10016bc0 ) -10016b3a: 681b ldr r3, [r3, #0] -10016b3c: 681a ldr r2, [r3, #0] -10016b3e: fab2 f282 clz r2, r2 -10016b42: 0952 lsrs r2, r2, #5 -10016b44: eba9 010a sub.w r1, r9, sl -10016b48: 6828 ldr r0, [r5, #0] -10016b4a: f7ff f8da bl 10015d02 -10016b4e: f7ff fc03 bl 10016358 -10016b52: 2800 cmp r0, #0 -10016b54: d1b8 bne.n 10016ac8 -10016b56: f04f 5380 mov.w r3, #268435456 ; 0x10000000 -10016b5a: f8c8 3000 str.w r3, [r8] -10016b5e: f3bf 8f4f dsb sy -10016b62: f3bf 8f6f isb sy -10016b66: e7af b.n 10016ac8 -10016b68: 4622 mov r2, r4 -10016b6a: e7eb b.n 10016b44 -10016b6c: f7ff fbf4 bl 10016358 -10016b70: e7aa b.n 10016ac8 -10016b72: 69a1 ldr r1, [r4, #24] -10016b74: 9b03 ldr r3, [sp, #12] -10016b76: 464a mov r2, r9 -10016b78: 4419 add r1, r3 -10016b7a: 4620 mov r0, r4 -10016b7c: f7ff feb2 bl 100168e4 -10016b80: 2800 cmp r0, #0 -10016b82: d0a1 beq.n 10016ac8 -10016b84: 6a63 ldr r3, [r4, #36] ; 0x24 -10016b86: 4620 mov r0, r4 -10016b88: 4798 blx r3 -10016b8a: 69e3 ldr r3, [r4, #28] -10016b8c: 2b01 cmp r3, #1 -10016b8e: d19b bne.n 10016ac8 -10016b90: 69a2 ldr r2, [r4, #24] -10016b92: 9903 ldr r1, [sp, #12] -10016b94: f8cd a000 str.w sl, [sp] -10016b98: 440a add r2, r1 -10016b9a: 4653 mov r3, sl -10016b9c: 4651 mov r1, sl -10016b9e: 4620 mov r0, r4 -10016ba0: f7ff fef6 bl 10016990 -10016ba4: e790 b.n 10016ac8 -10016ba6: 9903 ldr r1, [sp, #12] -10016ba8: 464b mov r3, r9 -10016baa: 61a1 str r1, [r4, #24] -10016bac: 464a mov r2, r9 -10016bae: 4449 add r1, r9 -10016bb0: 4620 mov r0, r4 -10016bb2: f7ff fe97 bl 100168e4 -10016bb6: e787 b.n 10016ac8 -10016bb8: 1004b4b8 .word 0x1004b4b8 -10016bbc: 1004b4bc .word 0x1004b4bc -10016bc0: 1004b48c .word 0x1004b48c -10016bc4: e000ed04 .word 0xe000ed04 -10016bc8: 1004b488 .word 0x1004b488 - -10016bcc : -10016bcc: b510 push {r4, lr} -10016bce: 4604 mov r4, r0 -10016bd0: f7fe fc08 bl 100153e4 -10016bd4: 6964 ldr r4, [r4, #20] -10016bd6: 3400 adds r4, #0 -10016bd8: bf18 it ne -10016bda: 2401 movne r4, #1 -10016bdc: f7fe fc12 bl 10015404 -10016be0: 4620 mov r0, r4 -10016be2: bd10 pop {r4, pc} - -10016be4 : -10016be4: b510 push {r4, lr} -10016be6: 4604 mov r4, r0 -10016be8: f7fe fbfc bl 100153e4 -10016bec: 6a24 ldr r4, [r4, #32] -10016bee: f7fe fc09 bl 10015404 -10016bf2: 4620 mov r0, r4 -10016bf4: bd10 pop {r4, pc} - ... - -10016bf8 : -10016bf8: b51f push {r0, r1, r2, r3, r4, lr} -10016bfa: 461c mov r4, r3 -10016bfc: f06f 0301 mvn.w r3, #1 -10016c00: 9001 str r0, [sp, #4] -10016c02: 4806 ldr r0, [pc, #24] ; (10016c1c ) -10016c04: 9300 str r3, [sp, #0] -10016c06: 9102 str r1, [sp, #8] -10016c08: 9203 str r2, [sp, #12] -10016c0a: 2300 movs r3, #0 -10016c0c: 4622 mov r2, r4 -10016c0e: 4669 mov r1, sp -10016c10: 6800 ldr r0, [r0, #0] -10016c12: f7fe ff6f bl 10015af4 -10016c16: b004 add sp, #16 -10016c18: bd10 pop {r4, pc} -10016c1a: bf00 nop -10016c1c: 1004b4bc .word 0x1004b4bc - -10016c20 : -10016c20: b573 push {r0, r1, r4, r5, r6, lr} -10016c22: 2401 movs r4, #1 -10016c24: 4d0d ldr r5, [pc, #52] ; (10016c5c ) -10016c26: 4084 lsls r4, r0 -10016c28: 682b ldr r3, [r5, #0] -10016c2a: 4606 mov r6, r0 -10016c2c: 421c tst r4, r3 -10016c2e: d112 bne.n 10016c56 -10016c30: a901 add r1, sp, #4 -10016c32: 4668 mov r0, sp -10016c34: f000 fc84 bl 10017540 -10016c38: 682b ldr r3, [r5, #0] -10016c3a: 421c tst r4, r3 -10016c3c: d107 bne.n 10016c4e -10016c3e: 4808 ldr r0, [pc, #32] ; (10016c60 ) -10016c40: eb00 0086 add.w r0, r0, r6, lsl #2 -10016c44: f000 fc4a bl 100174dc -10016c48: 682b ldr r3, [r5, #0] -10016c4a: 431c orrs r4, r3 -10016c4c: 602c str r4, [r5, #0] -10016c4e: a901 add r1, sp, #4 -10016c50: 4668 mov r0, sp -10016c52: f000 fc7f bl 10017554 -10016c56: b002 add sp, #8 -10016c58: bd70 pop {r4, r5, r6, pc} -10016c5a: bf00 nop -10016c5c: 1004b4d4 .word 0x1004b4d4 -10016c60: 1004b4c4 .word 0x1004b4c4 - -10016c64 : -10016c64: b570 push {r4, r5, r6, lr} -10016c66: 4605 mov r5, r0 -10016c68: f7ff ffda bl 10016c20 -10016c6c: 4c08 ldr r4, [pc, #32] ; (10016c90 ) -10016c6e: 4e09 ldr r6, [pc, #36] ; (10016c94 ) -10016c70: eb04 0485 add.w r4, r4, r5, lsl #2 -10016c74: f242 7110 movw r1, #10000 ; 0x2710 -10016c78: 4620 mov r0, r4 -10016c7a: f000 fc4f bl 1001751c -10016c7e: 2800 cmp r0, #0 -10016c80: db00 blt.n 10016c84 -10016c82: bd70 pop {r4, r5, r6, pc} -10016c84: 4629 mov r1, r5 -10016c86: 4630 mov r0, r6 -10016c88: f003 ff6a bl 1001ab60 -10016c8c: e7f2 b.n 10016c74 -10016c8e: bf00 nop -10016c90: 1004b4c4 .word 0x1004b4c4 -10016c94: 10040237 .word 0x10040237 - -10016c98 : -10016c98: b510 push {r4, lr} -10016c9a: 4604 mov r4, r0 -10016c9c: f7ff ffc0 bl 10016c20 -10016ca0: 4803 ldr r0, [pc, #12] ; (10016cb0 ) -10016ca2: eb00 0084 add.w r0, r0, r4, lsl #2 -10016ca6: e8bd 4010 ldmia.w sp!, {r4, lr} -10016caa: f000 bc27 b.w 100174fc -10016cae: bf00 nop -10016cb0: 1004b4c4 .word 0x1004b4c4 - -10016cb4 <_freertos_enter_critical_from_isr>: -10016cb4: f3ef 8211 mrs r2, BASEPRI -10016cb8: f04f 0350 mov.w r3, #80 ; 0x50 -10016cbc: f383 8811 msr BASEPRI, r3 -10016cc0: f3bf 8f6f isb sy -10016cc4: f3bf 8f4f dsb sy -10016cc8: 4b01 ldr r3, [pc, #4] ; (10016cd0 <_freertos_enter_critical_from_isr+0x1c>) -10016cca: 601a str r2, [r3, #0] -10016ccc: 4770 bx lr -10016cce: bf00 nop -10016cd0: 1004b4d8 .word 0x1004b4d8 - -10016cd4 <_freertos_exit_critical_from_isr>: -10016cd4: 4b02 ldr r3, [pc, #8] ; (10016ce0 <_freertos_exit_critical_from_isr+0xc>) -10016cd6: 681b ldr r3, [r3, #0] -10016cd8: f383 8811 msr BASEPRI, r3 -10016cdc: 4770 bx lr -10016cde: bf00 nop -10016ce0: 1004b4d8 .word 0x1004b4d8 - -10016ce4 <_freertos_systime_to_sec>: -10016ce4: f44f 737a mov.w r3, #1000 ; 0x3e8 -10016ce8: fbb0 f0f3 udiv r0, r0, r3 -10016cec: 4770 bx lr - -10016cee <_freertos_ms_to_systime>: -10016cee: 4770 bx lr - -10016cf0 <_freertos_sec_to_systime>: -10016cf0: f44f 737a mov.w r3, #1000 ; 0x3e8 -10016cf4: 4358 muls r0, r3 -10016cf6: 4770 bx lr - -10016cf8 <_freertos_yield_os>: -10016cf8: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -10016cfc: 4b03 ldr r3, [pc, #12] ; (10016d0c <_freertos_yield_os+0x14>) -10016cfe: 601a str r2, [r3, #0] -10016d00: f3bf 8f4f dsb sy -10016d04: f3bf 8f6f isb sy -10016d08: 4770 bx lr -10016d0a: bf00 nop -10016d0c: e000ed04 .word 0xe000ed04 - -10016d10 <_freertos_ATOMIC_SET>: -10016d10: 6001 str r1, [r0, #0] -10016d12: 4770 bx lr - -10016d14 <_freertos_ATOMIC_READ>: -10016d14: 6800 ldr r0, [r0, #0] -10016d16: 4770 bx lr - -10016d18 <_freertos_modular64>: -10016d18: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -10016d1c: 460e mov r6, r1 -10016d1e: 2700 movs r7, #0 -10016d20: ea56 0407 orrs.w r4, r6, r7 -10016d24: d106 bne.n 10016d34 <_freertos_modular64+0x1c> -10016d26: fbb0 f3f2 udiv r3, r0, r2 -10016d2a: fb03 0012 mls r0, r3, r2, r0 -10016d2e: 2100 movs r1, #0 -10016d30: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -10016d34: 428a cmp r2, r1 -10016d36: 4614 mov r4, r2 -10016d38: f04f 0500 mov.w r5, #0 -10016d3c: d806 bhi.n 10016d4c <_freertos_modular64+0x34> -10016d3e: fbb1 f3f2 udiv r3, r1, r2 -10016d42: fb03 f902 mul.w r9, r3, r2 -10016d46: 1bc0 subs r0, r0, r7 -10016d48: eb61 0109 sbc.w r1, r1, r9 -10016d4c: 2201 movs r2, #1 -10016d4e: 2300 movs r3, #0 -10016d50: ea54 0605 orrs.w r6, r4, r5 -10016d54: d003 beq.n 10016d5e <_freertos_modular64+0x46> -10016d56: 428d cmp r5, r1 -10016d58: bf08 it eq -10016d5a: 4284 cmpeq r4, r0 -10016d5c: d310 bcc.n 10016d80 <_freertos_modular64+0x68> -10016d5e: 42a9 cmp r1, r5 -10016d60: bf08 it eq -10016d62: 42a0 cmpeq r0, r4 -10016d64: d302 bcc.n 10016d6c <_freertos_modular64+0x54> -10016d66: 1b00 subs r0, r0, r4 -10016d68: eb61 0105 sbc.w r1, r1, r5 -10016d6c: 085b lsrs r3, r3, #1 -10016d6e: ea4f 0232 mov.w r2, r2, rrx -10016d72: 086d lsrs r5, r5, #1 -10016d74: ea4f 0434 mov.w r4, r4, rrx -10016d78: ea52 0603 orrs.w r6, r2, r3 -10016d7c: d1ef bne.n 10016d5e <_freertos_modular64+0x46> -10016d7e: e7d6 b.n 10016d2e <_freertos_modular64+0x16> -10016d80: 1924 adds r4, r4, r4 -10016d82: 416d adcs r5, r5 -10016d84: 1892 adds r2, r2, r2 -10016d86: 415b adcs r3, r3 -10016d88: e7e2 b.n 10016d50 <_freertos_modular64+0x38> - -10016d8a <_freertos_thread_enter>: -10016d8a: 4770 bx lr - -10016d8c <_freertos_wakelock_timeout>: -10016d8c: 4770 bx lr - -10016d8e <_freertos_enter_critical>: -10016d8e: f7fe bb29 b.w 100153e4 - -10016d92 <_freertos_exit_critical>: -10016d92: f7fe bb37 b.w 10015404 - -10016d96 <_freertos_ATOMIC_SUB_RETURN>: -10016d96: b570 push {r4, r5, r6, lr} -10016d98: 4605 mov r5, r0 -10016d9a: 460e mov r6, r1 -10016d9c: f7fe fb22 bl 100153e4 -10016da0: 682c ldr r4, [r5, #0] -10016da2: 1ba4 subs r4, r4, r6 -10016da4: 602c str r4, [r5, #0] -10016da6: f7fe fb2d bl 10015404 -10016daa: 4620 mov r0, r4 -10016dac: bd70 pop {r4, r5, r6, pc} - -10016dae <_freertos_ATOMIC_DEC_RETURN>: -10016dae: b538 push {r3, r4, r5, lr} -10016db0: 4605 mov r5, r0 -10016db2: f7fe fb17 bl 100153e4 -10016db6: 682c ldr r4, [r5, #0] -10016db8: 3c01 subs r4, #1 -10016dba: 602c str r4, [r5, #0] -10016dbc: f7fe fb22 bl 10015404 -10016dc0: 4620 mov r0, r4 -10016dc2: bd38 pop {r3, r4, r5, pc} - -10016dc4 <_freertos_ATOMIC_ADD_RETURN>: -10016dc4: b570 push {r4, r5, r6, lr} -10016dc6: 4605 mov r5, r0 -10016dc8: 460e mov r6, r1 -10016dca: f7fe fb0b bl 100153e4 -10016dce: 682c ldr r4, [r5, #0] -10016dd0: 4434 add r4, r6 -10016dd2: 602c str r4, [r5, #0] -10016dd4: f7fe fb16 bl 10015404 -10016dd8: 4620 mov r0, r4 -10016dda: bd70 pop {r4, r5, r6, pc} - -10016ddc <_freertos_ATOMIC_INC_RETURN>: -10016ddc: b538 push {r3, r4, r5, lr} -10016dde: 4605 mov r5, r0 -10016de0: f7fe fb00 bl 100153e4 -10016de4: 682c ldr r4, [r5, #0] -10016de6: 3401 adds r4, #1 -10016de8: 602c str r4, [r5, #0] -10016dea: f7fe fb0b bl 10015404 -10016dee: 4620 mov r0, r4 -10016df0: bd38 pop {r3, r4, r5, pc} - -10016df2 <_freertos_ATOMIC_SUB>: -10016df2: b538 push {r3, r4, r5, lr} -10016df4: 4604 mov r4, r0 -10016df6: 460d mov r5, r1 -10016df8: f7fe faf4 bl 100153e4 -10016dfc: 6823 ldr r3, [r4, #0] -10016dfe: 1b5b subs r3, r3, r5 -10016e00: 6023 str r3, [r4, #0] -10016e02: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10016e06: f7fe bafd b.w 10015404 - -10016e0a <_freertos_ATOMIC_DEC>: -10016e0a: 2101 movs r1, #1 -10016e0c: f7ff bff1 b.w 10016df2 <_freertos_ATOMIC_SUB> - -10016e10 <_freertos_ATOMIC_ADD>: -10016e10: b538 push {r3, r4, r5, lr} -10016e12: 4604 mov r4, r0 -10016e14: 460d mov r5, r1 -10016e16: f7fe fae5 bl 100153e4 -10016e1a: 6823 ldr r3, [r4, #0] -10016e1c: 442b add r3, r5 -10016e1e: 6023 str r3, [r4, #0] -10016e20: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10016e24: f7fe baee b.w 10015404 - -10016e28 <_freertos_ATOMIC_INC>: -10016e28: 2101 movs r1, #1 -10016e2a: f7ff bff1 b.w 10016e10 <_freertos_ATOMIC_ADD> - -10016e2e <_freertos_malloc>: -10016e2e: f7fe b97d b.w 1001512c - -10016e32 <_freertos_zmalloc>: -10016e32: b538 push {r3, r4, r5, lr} -10016e34: 4605 mov r5, r0 -10016e36: f7fe f979 bl 1001512c -10016e3a: 4604 mov r4, r0 -10016e3c: b118 cbz r0, 10016e46 <_freertos_zmalloc+0x14> -10016e3e: 462a mov r2, r5 -10016e40: 2100 movs r1, #0 -10016e42: f003 feb9 bl 1001abb8 -10016e46: 4620 mov r0, r4 -10016e48: bd38 pop {r3, r4, r5, pc} - -10016e4a <_freertos_memset>: -10016e4a: f003 beb5 b.w 1001abb8 - -10016e4e <_freertos_mfree>: -10016e4e: f7fe ba09 b.w 10015264 - -10016e52 <_freertos_spinunlock_irqsave>: -10016e52: b508 push {r3, lr} -10016e54: 2300 movs r3, #0 -10016e56: 6800 ldr r0, [r0, #0] -10016e58: 461a mov r2, r3 -10016e5a: 4619 mov r1, r3 -10016e5c: f7fe fdbe bl 100159dc -10016e60: e8bd 4008 ldmia.w sp!, {r3, lr} -10016e64: f7fe bace b.w 10015404 - -10016e68 <_freertos_spinunlock>: -10016e68: 2300 movs r3, #0 -10016e6a: 6800 ldr r0, [r0, #0] -10016e6c: 461a mov r2, r3 -10016e6e: 4619 mov r1, r3 -10016e70: f7fe bdb4 b.w 100159dc - -10016e74 <_freertos_mutex_put>: -10016e74: f7ff bff8 b.w 10016e68 <_freertos_spinunlock> - -10016e78 <_freertos_wakeup_task>: -10016e78: 3008 adds r0, #8 -10016e7a: f7ff bff5 b.w 10016e68 <_freertos_spinunlock> - -10016e7e <_freertos_up_sema>: -10016e7e: f7ff bff3 b.w 10016e68 <_freertos_spinunlock> - -10016e82 <_freertos_exit_critical_mutex>: -10016e82: 2300 movs r3, #0 -10016e84: 6800 ldr r0, [r0, #0] -10016e86: 461a mov r2, r3 -10016e88: 4619 mov r1, r3 -10016e8a: f7fe bda7 b.w 100159dc - -10016e8e <_freertos_timerCreate>: -10016e8e: f7ff bd65 b.w 1001695c - -10016e92 <_freertos_timerDelete>: -10016e92: 2300 movs r3, #0 -10016e94: b507 push {r0, r1, r2, lr} -10016e96: 461a mov r2, r3 -10016e98: 9100 str r1, [sp, #0] -10016e9a: 2105 movs r1, #5 -10016e9c: f7ff fd78 bl 10016990 -10016ea0: b003 add sp, #12 -10016ea2: f85d fb04 ldr.w pc, [sp], #4 - -10016ea6 <_freertos_timerStop>: -10016ea6: 2300 movs r3, #0 -10016ea8: b507 push {r0, r1, r2, lr} -10016eaa: 461a mov r2, r3 -10016eac: 9100 str r1, [sp, #0] -10016eae: 2103 movs r1, #3 -10016eb0: f7ff fd6e bl 10016990 -10016eb4: b003 add sp, #12 -10016eb6: f85d fb04 ldr.w pc, [sp], #4 - -10016eba <_freertos_timerChangePeriod>: -10016eba: 2300 movs r3, #0 -10016ebc: b507 push {r0, r1, r2, lr} -10016ebe: 9200 str r2, [sp, #0] -10016ec0: 4299 cmp r1, r3 -10016ec2: bf14 ite ne -10016ec4: 460a movne r2, r1 -10016ec6: 2201 moveq r2, #1 -10016ec8: 2104 movs r1, #4 -10016eca: f7ff fd61 bl 10016990 -10016ece: b003 add sp, #12 -10016ed0: f85d fb04 ldr.w pc, [sp], #4 - -10016ed4 <_freertos_timerStopFromISR>: -10016ed4: b507 push {r0, r1, r2, lr} -10016ed6: 2200 movs r2, #0 -10016ed8: 460b mov r3, r1 -10016eda: 9200 str r2, [sp, #0] -10016edc: 2108 movs r1, #8 -10016ede: f7ff fd57 bl 10016990 -10016ee2: b003 add sp, #12 -10016ee4: f85d fb04 ldr.w pc, [sp], #4 - -10016ee8 <_freertos_timerChangePeriodFromISR>: -10016ee8: 2300 movs r3, #0 -10016eea: b507 push {r0, r1, r2, lr} -10016eec: 9300 str r3, [sp, #0] -10016eee: 4613 mov r3, r2 -10016ef0: 2900 cmp r1, #0 -10016ef2: bf14 ite ne -10016ef4: 460a movne r2, r1 -10016ef6: 2201 moveq r2, #1 -10016ef8: 2109 movs r1, #9 -10016efa: f7ff fd49 bl 10016990 -10016efe: b003 add sp, #12 -10016f00: f85d fb04 ldr.w pc, [sp], #4 - -10016f04 <_freertos_timerIsTimerActive>: -10016f04: f7ff be62 b.w 10016bcc - -10016f08 <_freertos_timerGetID>: -10016f08: f7ff be6c b.w 10016be4 - -10016f0c <_freertos_timerStart>: -10016f0c: b537 push {r0, r1, r2, r4, r5, lr} -10016f0e: 460d mov r5, r1 -10016f10: 4604 mov r4, r0 -10016f12: f7ff f97f bl 10016214 -10016f16: 9500 str r5, [sp, #0] -10016f18: 4602 mov r2, r0 -10016f1a: 2300 movs r3, #0 -10016f1c: 2101 movs r1, #1 -10016f1e: 4620 mov r0, r4 -10016f20: f7ff fd36 bl 10016990 -10016f24: b003 add sp, #12 -10016f26: bd30 pop {r4, r5, pc} - -10016f28 <_freertos_timerReset>: -10016f28: b537 push {r0, r1, r2, r4, r5, lr} -10016f2a: 460d mov r5, r1 -10016f2c: 4604 mov r4, r0 -10016f2e: f7ff f971 bl 10016214 -10016f32: 9500 str r5, [sp, #0] -10016f34: 4602 mov r2, r0 -10016f36: 2300 movs r3, #0 -10016f38: 2102 movs r1, #2 -10016f3a: 4620 mov r0, r4 -10016f3c: f7ff fd28 bl 10016990 -10016f40: b003 add sp, #12 -10016f42: bd30 pop {r4, r5, pc} - -10016f44 <_freertos_arc4random>: -10016f44: b510 push {r4, lr} -10016f46: f7ff f965 bl 10016214 -10016f4a: 4907 ldr r1, [pc, #28] ; (10016f68 <_freertos_arc4random+0x24>) -10016f4c: 4b07 ldr r3, [pc, #28] ; (10016f6c <_freertos_arc4random+0x28>) -10016f4e: 680c ldr r4, [r1, #0] -10016f50: 4a07 ldr r2, [pc, #28] ; (10016f70 <_freertos_arc4random+0x2c>) -10016f52: ea03 13c4 and.w r3, r3, r4, lsl #7 -10016f56: ea02 2214 and.w r2, r2, r4, lsr #8 -10016f5a: 4053 eors r3, r2 -10016f5c: ea83 3340 eor.w r3, r3, r0, lsl #13 -10016f60: ea83 2050 eor.w r0, r3, r0, lsr #9 -10016f64: 6008 str r0, [r1, #0] -10016f66: bd10 pop {r4, pc} -10016f68: 10044e94 .word 0x10044e94 -10016f6c: 3f807f80 .word 0x3f807f80 -10016f70: 000f80ff .word 0x000f80ff - -10016f74 <_freertos_get_current_time>: -10016f74: f7ff b94e b.w 10016214 - -10016f78 <_freertos_timerStartFromISR>: -10016f78: b537 push {r0, r1, r2, r4, r5, lr} -10016f7a: 460d mov r5, r1 -10016f7c: 4604 mov r4, r0 -10016f7e: f7ff f94f bl 10016220 -10016f82: 2300 movs r3, #0 -10016f84: 4602 mov r2, r0 -10016f86: 9300 str r3, [sp, #0] -10016f88: 2106 movs r1, #6 -10016f8a: 462b mov r3, r5 -10016f8c: 4620 mov r0, r4 -10016f8e: f7ff fcff bl 10016990 -10016f92: b003 add sp, #12 -10016f94: bd30 pop {r4, r5, pc} - -10016f96 <_freertos_timerResetFromISR>: -10016f96: b537 push {r0, r1, r2, r4, r5, lr} -10016f98: 460d mov r5, r1 -10016f9a: 4604 mov r4, r0 -10016f9c: f7ff f940 bl 10016220 -10016fa0: 2300 movs r3, #0 -10016fa2: 4602 mov r2, r0 -10016fa4: 9300 str r3, [sp, #0] -10016fa6: 2107 movs r1, #7 -10016fa8: 462b mov r3, r5 -10016faa: 4620 mov r0, r4 -10016fac: f7ff fcf0 bl 10016990 -10016fb0: b003 add sp, #12 -10016fb2: bd30 pop {r4, r5, pc} - -10016fb4 <_freertos_acquire_wakelock>: -10016fb4: 2002 movs r0, #2 -10016fb6: f002 b807 b.w 10018fc8 - -10016fba <_freertos_release_wakelock>: -10016fba: 2002 movs r0, #2 -10016fbc: f002 b824 b.w 10019008 - -10016fc0 <_freertos_get_scheduler_state>: -10016fc0: b508 push {r3, lr} -10016fc2: f7ff fbc1 bl 10016748 -10016fc6: b2c0 uxtb r0, r0 -10016fc8: 2801 cmp r0, #1 -10016fca: d005 beq.n 10016fd8 <_freertos_get_scheduler_state+0x18> -10016fcc: 2802 cmp r0, #2 -10016fce: d005 beq.n 10016fdc <_freertos_get_scheduler_state+0x1c> -10016fd0: 2800 cmp r0, #0 -10016fd2: bf08 it eq -10016fd4: 2002 moveq r0, #2 -10016fd6: bd08 pop {r3, pc} -10016fd8: 2000 movs r0, #0 -10016fda: bd08 pop {r3, pc} -10016fdc: 2001 movs r0, #1 -10016fde: bd08 pop {r3, pc} - -10016fe0 <_freertos_thread_exit>: -10016fe0: 2000 movs r0, #0 -10016fe2: f7ff b809 b.w 10015ff8 - -10016fe6 <_freertos_GetFreeHeapSize>: -10016fe6: f7fe b955 b.w 10015294 - -10016fea <_freertos_udelay_os>: -10016fea: f001 b9a3 b.w 10018334 - -10016fee <_freertos_mdelay_os>: -10016fee: f7ff ba1f b.w 10016430 - -10016ff2 <_freertos_deinit_xqueue>: -10016ff2: b538 push {r3, r4, r5, lr} -10016ff4: 4605 mov r5, r0 -10016ff6: f7fe fe79 bl 10015cec -10016ffa: 4604 mov r4, r0 -10016ffc: 6828 ldr r0, [r5, #0] -10016ffe: f7fe fe7e bl 10015cfe -10017002: 1c20 adds r0, r4, #0 -10017004: bf18 it ne -10017006: 2001 movne r0, #1 -10017008: 4240 negs r0, r0 -1001700a: bd38 pop {r3, r4, r5, pc} - -1001700c <_freertos_spinlock_free>: -1001700c: b510 push {r4, lr} -1001700e: 4604 mov r4, r0 -10017010: 6800 ldr r0, [r0, #0] -10017012: b108 cbz r0, 10017018 <_freertos_spinlock_free+0xc> -10017014: f7fe fe73 bl 10015cfe -10017018: 2300 movs r3, #0 -1001701a: 6023 str r3, [r4, #0] -1001701c: bd10 pop {r4, pc} - -1001701e <_freertos_mutex_free>: -1001701e: f7ff bff5 b.w 1001700c <_freertos_spinlock_free> - -10017022 <_freertos_free_sema>: -10017022: f7ff bff3 b.w 1001700c <_freertos_spinlock_free> - -10017026 <_freertos_push_to_xqueue>: -10017026: b538 push {r3, r4, r5, lr} -10017028: 1c53 adds r3, r2, #1 -1001702a: 4604 mov r4, r0 -1001702c: 460d mov r5, r1 -1001702e: d003 beq.n 10017038 <_freertos_push_to_xqueue+0x12> -10017030: 4610 mov r0, r2 -10017032: f000 faf1 bl 10017618 -10017036: 4602 mov r2, r0 -10017038: 2300 movs r3, #0 -1001703a: 4629 mov r1, r5 -1001703c: 6820 ldr r0, [r4, #0] -1001703e: f7fe fccd bl 100159dc -10017042: f110 30ff adds.w r0, r0, #4294967295 -10017046: bf18 it ne -10017048: f04f 30ff movne.w r0, #4294967295 -1001704c: bd38 pop {r3, r4, r5, pc} - -1001704e <_freertos_pop_from_xqueue>: -1001704e: b538 push {r3, r4, r5, lr} -10017050: 1c53 adds r3, r2, #1 -10017052: 4604 mov r4, r0 -10017054: 460d mov r5, r1 -10017056: d003 beq.n 10017060 <_freertos_pop_from_xqueue+0x12> -10017058: 4610 mov r0, r2 -1001705a: f000 fadd bl 10017618 -1001705e: 4602 mov r2, r0 -10017060: 2300 movs r3, #0 -10017062: 4629 mov r1, r5 -10017064: 6820 ldr r0, [r4, #0] -10017066: f7fe fda7 bl 10015bb8 -1001706a: f110 30ff adds.w r0, r0, #4294967295 -1001706e: bf18 it ne -10017070: f04f 30ff movne.w r0, #4294967295 -10017074: bd38 pop {r3, r4, r5, pc} - -10017076 <_freertos_down_sema>: -10017076: 1c4a adds r2, r1, #1 -10017078: b510 push {r4, lr} -1001707a: 4604 mov r4, r0 -1001707c: 4608 mov r0, r1 -1001707e: d001 beq.n 10017084 <_freertos_down_sema+0xe> -10017080: f000 faca bl 10017618 -10017084: 2300 movs r3, #0 -10017086: 4602 mov r2, r0 -10017088: 4619 mov r1, r3 -1001708a: 6820 ldr r0, [r4, #0] -1001708c: f7fe fd94 bl 10015bb8 -10017090: 1e43 subs r3, r0, #1 -10017092: 4258 negs r0, r3 -10017094: 4158 adcs r0, r3 -10017096: bd10 pop {r4, pc} - -10017098 <_freertos_init_xqueue>: -10017098: b510 push {r4, lr} -1001709a: 4611 mov r1, r2 -1001709c: 4604 mov r4, r0 -1001709e: 2200 movs r2, #0 -100170a0: 4618 mov r0, r3 -100170a2: f7fe fc77 bl 10015994 -100170a6: 6020 str r0, [r4, #0] -100170a8: fab0 f080 clz r0, r0 -100170ac: 0940 lsrs r0, r0, #5 -100170ae: 4240 negs r0, r0 -100170b0: bd10 pop {r4, pc} - ... - -100170b4 <_freertos_spinlock_irqsave>: -100170b4: b573 push {r0, r1, r4, r5, r6, lr} -100170b6: 4604 mov r4, r0 -100170b8: f7fe f994 bl 100153e4 -100170bc: 4d0b ldr r5, [pc, #44] ; (100170ec <_freertos_spinlock_irqsave+0x38>) -100170be: 4e0c ldr r6, [pc, #48] ; (100170f0 <_freertos_spinlock_irqsave+0x3c>) -100170c0: 2300 movs r3, #0 -100170c2: f64e 2260 movw r2, #60000 ; 0xea60 -100170c6: 4619 mov r1, r3 -100170c8: 6820 ldr r0, [r4, #0] -100170ca: f7fe fd75 bl 10015bb8 -100170ce: 2801 cmp r0, #1 -100170d0: d101 bne.n 100170d6 <_freertos_spinlock_irqsave+0x22> -100170d2: b002 add sp, #8 -100170d4: bd70 pop {r4, r5, r6, pc} -100170d6: 2000 movs r0, #0 -100170d8: f7ff f8a8 bl 1001622c -100170dc: 9400 str r4, [sp, #0] -100170de: 4602 mov r2, r0 -100170e0: 462b mov r3, r5 -100170e2: 4902 ldr r1, [pc, #8] ; (100170ec <_freertos_spinlock_irqsave+0x38>) -100170e4: 4630 mov r0, r6 -100170e6: f003 fd3b bl 1001ab60 -100170ea: e7e9 b.n 100170c0 <_freertos_spinlock_irqsave+0xc> -100170ec: 100402b2 .word 0x100402b2 -100170f0: 1004036e .word 0x1004036e - -100170f4 <_freertos_spinlock>: -100170f4: b573 push {r0, r1, r4, r5, r6, lr} -100170f6: 4604 mov r4, r0 -100170f8: 4d0b ldr r5, [pc, #44] ; (10017128 <_freertos_spinlock+0x34>) -100170fa: 4e0c ldr r6, [pc, #48] ; (1001712c <_freertos_spinlock+0x38>) -100170fc: 2300 movs r3, #0 -100170fe: f64e 2260 movw r2, #60000 ; 0xea60 -10017102: 4619 mov r1, r3 -10017104: 6820 ldr r0, [r4, #0] -10017106: f7fe fd57 bl 10015bb8 -1001710a: 2801 cmp r0, #1 -1001710c: d101 bne.n 10017112 <_freertos_spinlock+0x1e> -1001710e: b002 add sp, #8 -10017110: bd70 pop {r4, r5, r6, pc} -10017112: 2000 movs r0, #0 -10017114: f7ff f88a bl 1001622c -10017118: 9400 str r4, [sp, #0] -1001711a: 4602 mov r2, r0 -1001711c: 462b mov r3, r5 -1001711e: 4902 ldr r1, [pc, #8] ; (10017128 <_freertos_spinlock+0x34>) -10017120: 4630 mov r0, r6 -10017122: f003 fd1d bl 1001ab60 -10017126: e7e9 b.n 100170fc <_freertos_spinlock+0x8> -10017128: 1004029f .word 0x1004029f -1001712c: 1004036e .word 0x1004036e - -10017130 <_freertos_enter_critical_mutex>: -10017130: b570 push {r4, r5, r6, lr} -10017132: 4604 mov r4, r0 -10017134: 4d0b ldr r5, [pc, #44] ; (10017164 <_freertos_enter_critical_mutex+0x34>) -10017136: 4e0c ldr r6, [pc, #48] ; (10017168 <_freertos_enter_critical_mutex+0x38>) -10017138: 2300 movs r3, #0 -1001713a: f64e 2260 movw r2, #60000 ; 0xea60 -1001713e: 4619 mov r1, r3 -10017140: 6820 ldr r0, [r4, #0] -10017142: f7fe fd39 bl 10015bb8 -10017146: 2801 cmp r0, #1 -10017148: f04f 0000 mov.w r0, #0 -1001714c: d100 bne.n 10017150 <_freertos_enter_critical_mutex+0x20> -1001714e: bd70 pop {r4, r5, r6, pc} -10017150: f7ff f86c bl 1001622c -10017154: 4623 mov r3, r4 -10017156: 4601 mov r1, r0 -10017158: 462a mov r2, r5 -1001715a: 4630 mov r0, r6 -1001715c: f003 fd00 bl 1001ab60 -10017160: e7ea b.n 10017138 <_freertos_enter_critical_mutex+0x8> -10017162: bf00 nop -10017164: 10040280 .word 0x10040280 -10017168: 10040351 .word 0x10040351 - -1001716c <_freertos_mutex_get>: -1001716c: b573 push {r0, r1, r4, r5, r6, lr} -1001716e: 4604 mov r4, r0 -10017170: 4d0b ldr r5, [pc, #44] ; (100171a0 <_freertos_mutex_get+0x34>) -10017172: 4e0c ldr r6, [pc, #48] ; (100171a4 <_freertos_mutex_get+0x38>) -10017174: 2300 movs r3, #0 -10017176: f64e 2260 movw r2, #60000 ; 0xea60 -1001717a: 4619 mov r1, r3 -1001717c: 6820 ldr r0, [r4, #0] -1001717e: f7fe fd1b bl 10015bb8 -10017182: 2801 cmp r0, #1 -10017184: d101 bne.n 1001718a <_freertos_mutex_get+0x1e> -10017186: b002 add sp, #8 -10017188: bd70 pop {r4, r5, r6, pc} -1001718a: 2000 movs r0, #0 -1001718c: f7ff f84e bl 1001622c -10017190: 9400 str r4, [sp, #0] -10017192: 4602 mov r2, r0 -10017194: 462b mov r3, r5 -10017196: 4902 ldr r1, [pc, #8] ; (100171a0 <_freertos_mutex_get+0x34>) -10017198: 4630 mov r0, r6 -1001719a: f003 fce1 bl 1001ab60 -1001719e: e7e9 b.n 10017174 <_freertos_mutex_get+0x8> -100171a0: 10040250 .word 0x10040250 -100171a4: 1004036e .word 0x1004036e - -100171a8 <_freertos_spinlock_init>: -100171a8: b510 push {r4, lr} -100171aa: 4604 mov r4, r0 -100171ac: 2001 movs r0, #1 -100171ae: f7fe fc8f bl 10015ad0 -100171b2: 6020 str r0, [r4, #0] -100171b4: bd10 pop {r4, pc} - -100171b6 <_freertos_mutex_init>: -100171b6: f7ff bff7 b.w 100171a8 <_freertos_spinlock_init> - -100171ba <_freertos_init_sema>: -100171ba: b510 push {r4, lr} -100171bc: 4604 mov r4, r0 -100171be: f04f 30ff mov.w r0, #4294967295 -100171c2: f7fe fc01 bl 100159c8 -100171c6: 6020 str r0, [r4, #0] -100171c8: bd10 pop {r4, pc} - ... - -100171cc <_freertos_create_task>: -100171cc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100171d0: 2500 movs r5, #0 -100171d2: 4604 mov r4, r0 -100171d4: 460e mov r6, r1 -100171d6: b087 sub sp, #28 -100171d8: 6021 str r1, [r4, #0] -100171da: f8dd 9040 ldr.w r9, [sp, #64] ; 0x40 -100171de: 6105 str r5, [r0, #16] -100171e0: 6145 str r5, [r0, #20] -100171e2: 4629 mov r1, r5 -100171e4: 3008 adds r0, #8 -100171e6: 9205 str r2, [sp, #20] -100171e8: 4698 mov r8, r3 -100171ea: 9f11 ldr r7, [sp, #68] ; 0x44 -100171ec: f7ff ffe5 bl 100171ba <_freertos_init_sema> -100171f0: 4629 mov r1, r5 -100171f2: f104 000c add.w r0, r4, #12 -100171f6: f7ff ffe0 bl 100171ba <_freertos_init_sema> -100171fa: 45a9 cmp r9, r5 -100171fc: 4630 mov r0, r6 -100171fe: bf08 it eq -10017200: 462f moveq r7, r5 -10017202: f01f fbf5 bl 100369f0 -10017206: 9a05 ldr r2, [sp, #20] -10017208: f108 0804 add.w r8, r8, #4 -1001720c: fa1f fa82 uxth.w sl, r2 -10017210: f104 0b04 add.w fp, r4, #4 -10017214: 9005 str r0, [sp, #20] -10017216: b9d0 cbnz r0, 1001724e <_freertos_create_task+0x82> -10017218: 0090 lsls r0, r2, #2 -1001721a: f000 fbe3 bl 100179e4 -1001721e: 9b05 ldr r3, [sp, #20] -10017220: 9002 str r0, [sp, #8] -10017222: 9303 str r3, [sp, #12] -10017224: e88d 0900 stmia.w sp, {r8, fp} -10017228: 463b mov r3, r7 -1001722a: 4652 mov r2, sl -1001722c: 4631 mov r1, r6 -1001722e: 4648 mov r0, r9 -10017230: f7fe fe00 bl 10015e34 -10017234: 2801 cmp r0, #1 -10017236: 4605 mov r5, r0 -10017238: d005 beq.n 10017246 <_freertos_create_task+0x7a> -1001723a: 4603 mov r3, r0 -1001723c: 6822 ldr r2, [r4, #0] -1001723e: 4905 ldr r1, [pc, #20] ; (10017254 <_freertos_create_task+0x88>) -10017240: 4805 ldr r0, [pc, #20] ; (10017258 <_freertos_create_task+0x8c>) -10017242: f003 fc8d bl 1001ab60 -10017246: 4628 mov r0, r5 -10017248: b007 add sp, #28 -1001724a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1001724e: 9503 str r5, [sp, #12] -10017250: 9502 str r5, [sp, #8] -10017252: e7e7 b.n 10017224 <_freertos_create_task+0x58> -10017254: 100402cd .word 0x100402cd -10017258: 100402f9 .word 0x100402f9 - -1001725c <_freertos_memcmp>: -1001725c: b508 push {r3, lr} -1001725e: f003 fca3 bl 1001aba8 -10017262: fab0 f080 clz r0, r0 -10017266: 0940 lsrs r0, r0, #5 -10017268: bd08 pop {r3, pc} - -1001726a <_freertos_memcpy>: -1001726a: f003 bca1 b.w 1001abb0 - -1001726e <_freertos_get_random_bytes>: -1001726e: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -10017270: 4607 mov r7, r0 -10017272: 460c mov r4, r1 -10017274: 2600 movs r6, #0 -10017276: 088d lsrs r5, r1, #2 -10017278: 42ae cmp r6, r5 -1001727a: db0f blt.n 1001729c <_freertos_get_random_bytes+0x2e> -1001727c: ebb4 0485 subs.w r4, r4, r5, lsl #2 -10017280: d009 beq.n 10017296 <_freertos_get_random_bytes+0x28> -10017282: f7ff fe5f bl 10016f44 <_freertos_arc4random> -10017286: a902 add r1, sp, #8 -10017288: f841 0d04 str.w r0, [r1, #-4]! -1001728c: 4622 mov r2, r4 -1001728e: eb07 0085 add.w r0, r7, r5, lsl #2 -10017292: f003 fc8d bl 1001abb0 -10017296: 2000 movs r0, #0 -10017298: b003 add sp, #12 -1001729a: bdf0 pop {r4, r5, r6, r7, pc} -1001729c: f7ff fe52 bl 10016f44 <_freertos_arc4random> -100172a0: f847 0026 str.w r0, [r7, r6, lsl #2] -100172a4: 3601 adds r6, #1 -100172a6: e7e7 b.n 10017278 <_freertos_get_random_bytes+0xa> - -100172a8 <_freertos_delete_task>: -100172a8: 6843 ldr r3, [r0, #4] -100172aa: b570 push {r4, r5, r6, lr} -100172ac: 4604 mov r4, r0 -100172ae: b92b cbnz r3, 100172bc <_freertos_delete_task+0x14> -100172b0: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -100172b4: 490d ldr r1, [pc, #52] ; (100172ec <_freertos_delete_task+0x44>) -100172b6: 480e ldr r0, [pc, #56] ; (100172f0 <_freertos_delete_task+0x48>) -100172b8: f003 bc52 b.w 1001ab60 -100172bc: 2301 movs r3, #1 -100172be: f100 0608 add.w r6, r0, #8 -100172c2: 6103 str r3, [r0, #16] -100172c4: f104 050c add.w r5, r4, #12 -100172c8: 4630 mov r0, r6 -100172ca: f7ff fdcd bl 10016e68 <_freertos_spinunlock> -100172ce: f04f 31ff mov.w r1, #4294967295 -100172d2: 4628 mov r0, r5 -100172d4: f7ff fecf bl 10017076 <_freertos_down_sema> -100172d8: 4630 mov r0, r6 -100172da: f7ff fe97 bl 1001700c <_freertos_spinlock_free> -100172de: 4628 mov r0, r5 -100172e0: f7ff fe94 bl 1001700c <_freertos_spinlock_free> -100172e4: 2300 movs r3, #0 -100172e6: 6063 str r3, [r4, #4] -100172e8: bd70 pop {r4, r5, r6, pc} -100172ea: bf00 nop -100172ec: 100402e3 .word 0x100402e3 -100172f0: 10040321 .word 0x10040321 - -100172f4 <_freertos_mutex_get_timeout>: -100172f4: 2300 movs r3, #0 -100172f6: b513 push {r0, r1, r4, lr} -100172f8: 460a mov r2, r1 -100172fa: 4604 mov r4, r0 -100172fc: 4619 mov r1, r3 -100172fe: 6800 ldr r0, [r0, #0] -10017300: f7fe fc5a bl 10015bb8 -10017304: 2801 cmp r0, #1 -10017306: f04f 0000 mov.w r0, #0 -1001730a: d00a beq.n 10017322 <_freertos_mutex_get_timeout+0x2e> -1001730c: f7fe ff8e bl 1001622c -10017310: 4b05 ldr r3, [pc, #20] ; (10017328 <_freertos_mutex_get_timeout+0x34>) -10017312: 4602 mov r2, r0 -10017314: 9400 str r4, [sp, #0] -10017316: 4619 mov r1, r3 -10017318: 4804 ldr r0, [pc, #16] ; (1001732c <_freertos_mutex_get_timeout+0x38>) -1001731a: f003 fc21 bl 1001ab60 -1001731e: f04f 30ff mov.w r0, #4294967295 -10017322: b002 add sp, #8 -10017324: bd10 pop {r4, pc} -10017326: bf00 nop -10017328: 10040264 .word 0x10040264 -1001732c: 1004036e .word 0x1004036e - -10017330 <_freertos_up_sema_from_isr>: -10017330: 2300 movs r3, #0 -10017332: b507 push {r0, r1, r2, lr} -10017334: a902 add r1, sp, #8 -10017336: f841 3d04 str.w r3, [r1, #-4]! -1001733a: 6800 ldr r0, [r0, #0] -1001733c: f7fe fc0e bl 10015b5c -10017340: 9b01 ldr r3, [sp, #4] -10017342: b13b cbz r3, 10017354 <_freertos_up_sema_from_isr+0x24> -10017344: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -10017348: 4b04 ldr r3, [pc, #16] ; (1001735c <_freertos_up_sema_from_isr+0x2c>) -1001734a: 601a str r2, [r3, #0] -1001734c: f3bf 8f4f dsb sy -10017350: f3bf 8f6f isb sy -10017354: b003 add sp, #12 -10017356: f85d fb04 ldr.w pc, [sp], #4 -1001735a: bf00 nop -1001735c: e000ed04 .word 0xe000ed04 - -10017360 <_freertos_systime_to_ms>: -10017360: 4770 bx lr - -10017362 <_freertos_msleep_os>: -10017362: f7ff b865 b.w 10016430 - -10017366 <_freertos_usleep_os>: -10017366: f000 bfe5 b.w 10018334 - -1001736a : -1001736a: f7fe b83b b.w 100153e4 - -1001736e : -1001736e: f7fe b849 b.w 10015404 - -10017372 : -10017372: f04f 0350 mov.w r3, #80 ; 0x50 -10017376: f383 8811 msr BASEPRI, r3 -1001737a: f3bf 8f6f isb sy -1001737e: f3bf 8f4f dsb sy -10017382: 4770 bx lr - -10017384 <_htons>: -10017384: ba40 rev16 r0, r0 -10017386: b280 uxth r0, r0 -10017388: 4770 bx lr - -1001738a <_ntohs>: -1001738a: ba40 rev16 r0, r0 -1001738c: b280 uxth r0, r0 -1001738e: 4770 bx lr - -10017390 <_rtw_zvmalloc>: -10017390: b510 push {r4, lr} -10017392: 4604 mov r4, r0 -10017394: f000 fb76 bl 10017a84 -10017398: b930 cbnz r0, 100173a8 <_rtw_zvmalloc+0x18> -1001739a: 4b04 ldr r3, [pc, #16] ; (100173ac <_rtw_zvmalloc+0x1c>) -1001739c: 685b ldr r3, [r3, #4] -1001739e: b11b cbz r3, 100173a8 <_rtw_zvmalloc+0x18> -100173a0: 4620 mov r0, r4 -100173a2: e8bd 4010 ldmia.w sp!, {r4, lr} -100173a6: 4718 bx r3 -100173a8: bd10 pop {r4, pc} -100173aa: bf00 nop -100173ac: 10040390 .word 0x10040390 - -100173b0 <_rtw_vmfree>: -100173b0: f64f 72fe movw r2, #65534 ; 0xfffe -100173b4: 4b05 ldr r3, [pc, #20] ; (100173cc <_rtw_vmfree+0x1c>) -100173b6: 4403 add r3, r0 -100173b8: 4293 cmp r3, r2 -100173ba: d801 bhi.n 100173c0 <_rtw_vmfree+0x10> -100173bc: f000 ba8a b.w 100178d4 -100173c0: 4b03 ldr r3, [pc, #12] ; (100173d0 <_rtw_vmfree+0x20>) -100173c2: 689b ldr r3, [r3, #8] -100173c4: b103 cbz r3, 100173c8 <_rtw_vmfree+0x18> -100173c6: 4718 bx r3 -100173c8: 4770 bx lr -100173ca: bf00 nop -100173cc: e000ffff .word 0xe000ffff -100173d0: 10040390 .word 0x10040390 - -100173d4 <_rtw_malloc>: -100173d4: 4b02 ldr r3, [pc, #8] ; (100173e0 <_rtw_malloc+0xc>) -100173d6: 68db ldr r3, [r3, #12] -100173d8: b103 cbz r3, 100173dc <_rtw_malloc+0x8> -100173da: 4718 bx r3 -100173dc: 4618 mov r0, r3 -100173de: 4770 bx lr -100173e0: 10040390 .word 0x10040390 - -100173e4 <_rtw_zmalloc>: -100173e4: 4b02 ldr r3, [pc, #8] ; (100173f0 <_rtw_zmalloc+0xc>) -100173e6: 691b ldr r3, [r3, #16] -100173e8: b103 cbz r3, 100173ec <_rtw_zmalloc+0x8> -100173ea: 4718 bx r3 -100173ec: 4618 mov r0, r3 -100173ee: 4770 bx lr -100173f0: 10040390 .word 0x10040390 - -100173f4 <_rtw_mfree>: -100173f4: 4b02 ldr r3, [pc, #8] ; (10017400 <_rtw_mfree+0xc>) -100173f6: 695b ldr r3, [r3, #20] -100173f8: b103 cbz r3, 100173fc <_rtw_mfree+0x8> -100173fa: 4718 bx r3 -100173fc: 4770 bx lr -100173fe: bf00 nop -10017400: 10040390 .word 0x10040390 - -10017404 : -10017404: 4770 bx lr - -10017406 : -10017406: f7ff bfd3 b.w 100173b0 <_rtw_vmfree> - -1001740a : -1001740a: f7ff bff3 b.w 100173f4 <_rtw_mfree> - ... - -10017410 : -10017410: 4b02 ldr r3, [pc, #8] ; (1001741c ) -10017412: 699b ldr r3, [r3, #24] -10017414: b103 cbz r3, 10017418 -10017416: 4718 bx r3 -10017418: 4770 bx lr -1001741a: bf00 nop -1001741c: 10040390 .word 0x10040390 - -10017420 : -10017420: 4b02 ldr r3, [pc, #8] ; (1001742c ) -10017422: 69db ldr r3, [r3, #28] -10017424: b103 cbz r3, 10017428 -10017426: 4718 bx r3 -10017428: 4618 mov r0, r3 -1001742a: 4770 bx lr -1001742c: 10040390 .word 0x10040390 - -10017430 : -10017430: 4b02 ldr r3, [pc, #8] ; (1001743c ) -10017432: 6a1b ldr r3, [r3, #32] -10017434: b103 cbz r3, 10017438 -10017436: 4718 bx r3 -10017438: 4770 bx lr -1001743a: bf00 nop -1001743c: 10040390 .word 0x10040390 - -10017440 : -10017440: 6000 str r0, [r0, #0] -10017442: 6040 str r0, [r0, #4] -10017444: 4770 bx lr - -10017446 : -10017446: 6803 ldr r3, [r0, #0] -10017448: 1a1b subs r3, r3, r0 -1001744a: 4258 negs r0, r3 -1001744c: 4158 adcs r0, r3 -1001744e: 4770 bx lr - -10017450 : -10017450: 680b ldr r3, [r1, #0] -10017452: 6058 str r0, [r3, #4] -10017454: 6003 str r3, [r0, #0] -10017456: 6041 str r1, [r0, #4] -10017458: 6008 str r0, [r1, #0] -1001745a: 4770 bx lr - -1001745c : -1001745c: 684b ldr r3, [r1, #4] -1001745e: 6048 str r0, [r1, #4] -10017460: e880 000a stmia.w r0, {r1, r3} -10017464: 6018 str r0, [r3, #0] -10017466: 4770 bx lr - -10017468 : -10017468: e890 000c ldmia.w r0, {r2, r3} -1001746c: 6053 str r3, [r2, #4] -1001746e: 601a str r2, [r3, #0] -10017470: 6000 str r0, [r0, #0] -10017472: 6040 str r0, [r0, #4] -10017474: 4770 bx lr - ... - -10017478 : -10017478: 4b02 ldr r3, [pc, #8] ; (10017484 ) -1001747a: 6a5b ldr r3, [r3, #36] ; 0x24 -1001747c: b103 cbz r3, 10017480 -1001747e: 4718 bx r3 -10017480: 4770 bx lr -10017482: bf00 nop -10017484: 10040390 .word 0x10040390 - -10017488 : -10017488: 4b02 ldr r3, [pc, #8] ; (10017494 ) -1001748a: 6a9b ldr r3, [r3, #40] ; 0x28 -1001748c: b103 cbz r3, 10017490 -1001748e: 4718 bx r3 -10017490: 4770 bx lr -10017492: bf00 nop -10017494: 10040390 .word 0x10040390 - -10017498 : -10017498: 4b02 ldr r3, [pc, #8] ; (100174a4 ) -1001749a: 6adb ldr r3, [r3, #44] ; 0x2c -1001749c: b103 cbz r3, 100174a0 -1001749e: 4718 bx r3 -100174a0: 4770 bx lr -100174a2: bf00 nop -100174a4: 10040390 .word 0x10040390 - -100174a8 : -100174a8: 4b02 ldr r3, [pc, #8] ; (100174b4 ) -100174aa: 6b1b ldr r3, [r3, #48] ; 0x30 -100174ac: b103 cbz r3, 100174b0 -100174ae: 4718 bx r3 -100174b0: 4770 bx lr -100174b2: bf00 nop -100174b4: 10040390 .word 0x10040390 - -100174b8 : -100174b8: 4b02 ldr r3, [pc, #8] ; (100174c4 ) -100174ba: 6b5b ldr r3, [r3, #52] ; 0x34 -100174bc: b103 cbz r3, 100174c0 -100174be: 4718 bx r3 -100174c0: 4618 mov r0, r3 -100174c2: 4770 bx lr -100174c4: 10040390 .word 0x10040390 - -100174c8 : -100174c8: b510 push {r4, lr} -100174ca: 4604 mov r4, r0 -100174cc: f04f 31ff mov.w r1, #4294967295 -100174d0: 4620 mov r0, r4 -100174d2: f7ff fff1 bl 100174b8 -100174d6: 2801 cmp r0, #1 -100174d8: d1f8 bne.n 100174cc -100174da: bd10 pop {r4, pc} - -100174dc : -100174dc: 4b02 ldr r3, [pc, #8] ; (100174e8 ) -100174de: 6b9b ldr r3, [r3, #56] ; 0x38 -100174e0: b103 cbz r3, 100174e4 -100174e2: 4718 bx r3 -100174e4: 4770 bx lr -100174e6: bf00 nop -100174e8: 10040390 .word 0x10040390 - -100174ec : -100174ec: 4b02 ldr r3, [pc, #8] ; (100174f8 ) -100174ee: 6bdb ldr r3, [r3, #60] ; 0x3c -100174f0: b103 cbz r3, 100174f4 -100174f2: 4718 bx r3 -100174f4: 4770 bx lr -100174f6: bf00 nop -100174f8: 10040390 .word 0x10040390 - -100174fc : -100174fc: 4b02 ldr r3, [pc, #8] ; (10017508 ) -100174fe: 6c9b ldr r3, [r3, #72] ; 0x48 -10017500: b103 cbz r3, 10017504 -10017502: 4718 bx r3 -10017504: 4770 bx lr -10017506: bf00 nop -10017508: 10040390 .word 0x10040390 - -1001750c : -1001750c: 4b02 ldr r3, [pc, #8] ; (10017518 ) -1001750e: 6c1b ldr r3, [r3, #64] ; 0x40 -10017510: b103 cbz r3, 10017514 -10017512: 4718 bx r3 -10017514: 4770 bx lr -10017516: bf00 nop -10017518: 10040390 .word 0x10040390 - -1001751c : -1001751c: 4b03 ldr r3, [pc, #12] ; (1001752c ) -1001751e: 6c5b ldr r3, [r3, #68] ; 0x44 -10017520: b103 cbz r3, 10017524 -10017522: 4718 bx r3 -10017524: f04f 30ff mov.w r0, #4294967295 -10017528: 4770 bx lr -1001752a: bf00 nop -1001752c: 10040390 .word 0x10040390 - -10017530 : -10017530: 4b02 ldr r3, [pc, #8] ; (1001753c ) -10017532: 6cdb ldr r3, [r3, #76] ; 0x4c -10017534: b103 cbz r3, 10017538 -10017536: 4718 bx r3 -10017538: 4770 bx lr -1001753a: bf00 nop -1001753c: 10040390 .word 0x10040390 - -10017540 : -10017540: f7ff bff6 b.w 10017530 - -10017544 : -10017544: 4b02 ldr r3, [pc, #8] ; (10017550 ) -10017546: 6d1b ldr r3, [r3, #80] ; 0x50 -10017548: b103 cbz r3, 1001754c -1001754a: 4718 bx r3 -1001754c: 4770 bx lr -1001754e: bf00 nop -10017550: 10040390 .word 0x10040390 - -10017554 : -10017554: f7ff bff6 b.w 10017544 - -10017558 : -10017558: 4b02 ldr r3, [pc, #8] ; (10017564 ) -1001755a: 6e5b ldr r3, [r3, #100] ; 0x64 -1001755c: b103 cbz r3, 10017560 -1001755e: 4718 bx r3 -10017560: 4618 mov r0, r3 -10017562: 4770 bx lr -10017564: 10040390 .word 0x10040390 - -10017568 : -10017568: 4b02 ldr r3, [pc, #8] ; (10017574 ) -1001756a: 6e9b ldr r3, [r3, #104] ; 0x68 -1001756c: b103 cbz r3, 10017570 -1001756e: 4718 bx r3 -10017570: 4770 bx lr -10017572: bf00 nop -10017574: 10040390 .word 0x10040390 - -10017578 : -10017578: 6803 ldr r3, [r0, #0] -1001757a: 1a1b subs r3, r3, r0 -1001757c: 4258 negs r0, r3 -1001757e: 4158 adcs r0, r3 -10017580: 4770 bx lr - -10017582 : -10017582: 1a0b subs r3, r1, r0 -10017584: 4258 negs r0, r3 -10017586: 4158 adcs r0, r3 -10017588: 4770 bx lr - ... - -1001758c : -1001758c: 4b02 ldr r3, [pc, #8] ; (10017598 ) -1001758e: 6edb ldr r3, [r3, #108] ; 0x6c -10017590: b103 cbz r3, 10017594 -10017592: 4718 bx r3 -10017594: 4770 bx lr -10017596: bf00 nop -10017598: 10040390 .word 0x10040390 - -1001759c : -1001759c: 6000 str r0, [r0, #0] -1001759e: 6040 str r0, [r0, #4] -100175a0: 3008 adds r0, #8 -100175a2: f7ff bff3 b.w 1001758c - ... - -100175a8 : -100175a8: 4b02 ldr r3, [pc, #8] ; (100175b4 ) -100175aa: 6f1b ldr r3, [r3, #112] ; 0x70 -100175ac: b103 cbz r3, 100175b0 -100175ae: 4718 bx r3 -100175b0: 4770 bx lr -100175b2: bf00 nop -100175b4: 10040390 .word 0x10040390 - -100175b8 : -100175b8: 4b02 ldr r3, [pc, #8] ; (100175c4 ) -100175ba: 6f5b ldr r3, [r3, #116] ; 0x74 -100175bc: b103 cbz r3, 100175c0 -100175be: 4718 bx r3 -100175c0: 4770 bx lr -100175c2: bf00 nop -100175c4: 10040390 .word 0x10040390 - -100175c8 : -100175c8: f7ff bff6 b.w 100175b8 - -100175cc : -100175cc: 4b02 ldr r3, [pc, #8] ; (100175d8 ) -100175ce: 6f9b ldr r3, [r3, #120] ; 0x78 -100175d0: b103 cbz r3, 100175d4 -100175d2: 4718 bx r3 -100175d4: 4770 bx lr -100175d6: bf00 nop -100175d8: 10040390 .word 0x10040390 - -100175dc : -100175dc: f7ff bff6 b.w 100175cc - -100175e0 : -100175e0: 4b02 ldr r3, [pc, #8] ; (100175ec ) -100175e2: f8d3 0094 ldr.w r0, [r3, #148] ; 0x94 -100175e6: b100 cbz r0, 100175ea -100175e8: 4700 bx r0 -100175ea: 4770 bx lr -100175ec: 10040390 .word 0x10040390 - -100175f0 : -100175f0: 4b03 ldr r3, [pc, #12] ; (10017600 ) -100175f2: f8d3 3098 ldr.w r3, [r3, #152] ; 0x98 -100175f6: b103 cbz r3, 100175fa -100175f8: 4718 bx r3 -100175fa: 4618 mov r0, r3 -100175fc: 4770 bx lr -100175fe: bf00 nop -10017600: 10040390 .word 0x10040390 - -10017604 : -10017604: 4b03 ldr r3, [pc, #12] ; (10017614 ) -10017606: f8d3 309c ldr.w r3, [r3, #156] ; 0x9c -1001760a: b103 cbz r3, 1001760e -1001760c: 4718 bx r3 -1001760e: 4618 mov r0, r3 -10017610: 4770 bx lr -10017612: bf00 nop -10017614: 10040390 .word 0x10040390 - -10017618 : -10017618: 4b03 ldr r3, [pc, #12] ; (10017628 ) -1001761a: f8d3 30a0 ldr.w r3, [r3, #160] ; 0xa0 -1001761e: b103 cbz r3, 10017622 -10017620: 4718 bx r3 -10017622: 4618 mov r0, r3 -10017624: 4770 bx lr -10017626: bf00 nop -10017628: 10040390 .word 0x10040390 - -1001762c : -1001762c: 4b03 ldr r3, [pc, #12] ; (1001763c ) -1001762e: f8d3 30a4 ldr.w r3, [r3, #164] ; 0xa4 -10017632: b103 cbz r3, 10017636 -10017634: 4718 bx r3 -10017636: 4618 mov r0, r3 -10017638: 4770 bx lr -1001763a: bf00 nop -1001763c: 10040390 .word 0x10040390 - -10017640 : -10017640: b510 push {r4, lr} -10017642: 4604 mov r4, r0 -10017644: f7ff ffcc bl 100175e0 -10017648: 1b00 subs r0, r0, r4 -1001764a: e8bd 4010 ldmia.w sp!, {r4, lr} -1001764e: f7ff bfcf b.w 100175f0 - ... - -10017654 : -10017654: 4b02 ldr r3, [pc, #8] ; (10017660 ) -10017656: f8d3 30a8 ldr.w r3, [r3, #168] ; 0xa8 -1001765a: b103 cbz r3, 1001765e -1001765c: 4718 bx r3 -1001765e: 4770 bx lr -10017660: 10040390 .word 0x10040390 - -10017664 : -10017664: 4b02 ldr r3, [pc, #8] ; (10017670 ) -10017666: f8d3 30ac ldr.w r3, [r3, #172] ; 0xac -1001766a: b103 cbz r3, 1001766e -1001766c: 4718 bx r3 -1001766e: 4770 bx lr -10017670: 10040390 .word 0x10040390 - -10017674 : -10017674: 4b02 ldr r3, [pc, #8] ; (10017680 ) -10017676: f8d3 30b0 ldr.w r3, [r3, #176] ; 0xb0 -1001767a: b103 cbz r3, 1001767e -1001767c: 4718 bx r3 -1001767e: 4770 bx lr -10017680: 10040390 .word 0x10040390 - -10017684 : -10017684: 4b02 ldr r3, [pc, #8] ; (10017690 ) -10017686: f8d3 30b4 ldr.w r3, [r3, #180] ; 0xb4 -1001768a: b103 cbz r3, 1001768e -1001768c: 4718 bx r3 -1001768e: 4770 bx lr -10017690: 10040390 .word 0x10040390 - -10017694 : -10017694: 4b02 ldr r3, [pc, #8] ; (100176a0 ) -10017696: f8d3 30bc ldr.w r3, [r3, #188] ; 0xbc -1001769a: b103 cbz r3, 1001769e -1001769c: 4718 bx r3 -1001769e: 4770 bx lr -100176a0: 10040390 .word 0x10040390 - -100176a4 : -100176a4: 4b02 ldr r3, [pc, #8] ; (100176b0 ) -100176a6: f8d3 30cc ldr.w r3, [r3, #204] ; 0xcc -100176aa: b103 cbz r3, 100176ae -100176ac: 4718 bx r3 -100176ae: 4770 bx lr -100176b0: 10040390 .word 0x10040390 - -100176b4 : -100176b4: 4b03 ldr r3, [pc, #12] ; (100176c4 ) -100176b6: f8d3 30dc ldr.w r3, [r3, #220] ; 0xdc -100176ba: b103 cbz r3, 100176be -100176bc: 4718 bx r3 -100176be: 4618 mov r0, r3 -100176c0: 4770 bx lr -100176c2: bf00 nop -100176c4: 10040390 .word 0x10040390 - -100176c8 : -100176c8: 4b03 ldr r3, [pc, #12] ; (100176d8 ) -100176ca: f8d3 30e0 ldr.w r3, [r3, #224] ; 0xe0 -100176ce: b103 cbz r3, 100176d2 -100176d0: 4718 bx r3 -100176d2: 4618 mov r0, r3 -100176d4: 4770 bx lr -100176d6: bf00 nop -100176d8: 10040390 .word 0x10040390 - -100176dc : -100176dc: b508 push {r3, lr} -100176de: f7ff fff3 bl 100176c8 -100176e2: fab0 f080 clz r0, r0 -100176e6: 0940 lsrs r0, r0, #5 -100176e8: bd08 pop {r3, pc} - ... - -100176ec : -100176ec: b410 push {r4} -100176ee: 4c05 ldr r4, [pc, #20] ; (10017704 ) -100176f0: f8d4 40e4 ldr.w r4, [r4, #228] ; 0xe4 -100176f4: b114 cbz r4, 100176fc -100176f6: 46a4 mov ip, r4 -100176f8: bc10 pop {r4} -100176fa: 4760 bx ip -100176fc: 2000 movs r0, #0 -100176fe: 2100 movs r1, #0 -10017700: bc10 pop {r4} -10017702: 4770 bx lr -10017704: 10040390 .word 0x10040390 - -10017708 : -10017708: 4b03 ldr r3, [pc, #12] ; (10017718 ) -1001770a: f8d3 30e8 ldr.w r3, [r3, #232] ; 0xe8 -1001770e: b103 cbz r3, 10017712 -10017710: 4718 bx r3 -10017712: 4618 mov r0, r3 -10017714: 4770 bx lr -10017716: bf00 nop -10017718: 10040390 .word 0x10040390 - -1001771c : -1001771c: 4b02 ldr r3, [pc, #8] ; (10017728 ) -1001771e: f8d3 00ec ldr.w r0, [r3, #236] ; 0xec -10017722: b100 cbz r0, 10017726 -10017724: 4700 bx r0 -10017726: 4770 bx lr -10017728: 10040390 .word 0x10040390 - -1001772c : -1001772c: b508 push {r3, lr} -1001772e: f7ff fff5 bl 1001771c -10017732: 4b01 ldr r3, [pc, #4] ; (10017738 ) -10017734: 6018 str r0, [r3, #0] -10017736: bd08 pop {r3, pc} -10017738: 1004b4dc .word 0x1004b4dc - -1001773c : -1001773c: b570 push {r4, r5, r6, lr} -1001773e: 460d mov r5, r1 -10017740: 4614 mov r4, r2 -10017742: f7ff ffeb bl 1001771c -10017746: 4603 mov r3, r0 -10017748: b935 cbnz r5, 10017758 -1001774a: 4622 mov r2, r4 -1001774c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10017750: 4904 ldr r1, [pc, #16] ; (10017764 ) -10017752: 4805 ldr r0, [pc, #20] ; (10017768 ) -10017754: f003 ba04 b.w 1001ab60 -10017758: 4a04 ldr r2, [pc, #16] ; (1001776c ) -1001775a: 6811 ldr r1, [r2, #0] -1001775c: 4288 cmp r0, r1 -1001775e: bfb8 it lt -10017760: 6010 strlt r0, [r2, #0] -10017762: bd70 pop {r4, r5, r6, pc} -10017764: 100404d4 .word 0x100404d4 -10017768: 100404e2 .word 0x100404e2 -1001776c: 1004b4dc .word 0x1004b4dc - -10017770 : -10017770: b537 push {r0, r1, r2, r4, r5, lr} -10017772: 4605 mov r5, r0 -10017774: f7ff fe0c bl 10017390 <_rtw_zvmalloc> -10017778: 2301 movs r3, #1 -1001777a: 9300 str r3, [sp, #0] -1001777c: 2300 movs r3, #0 -1001777e: 4604 mov r4, r0 -10017780: 4601 mov r1, r0 -10017782: 462a mov r2, r5 -10017784: 4618 mov r0, r3 -10017786: f7ff ffd9 bl 1001773c -1001778a: 4620 mov r0, r4 -1001778c: b003 add sp, #12 -1001778e: bd30 pop {r4, r5, pc} - -10017790 : -10017790: b537 push {r0, r1, r2, r4, r5, lr} -10017792: 4605 mov r5, r0 -10017794: f7ff fe1e bl 100173d4 <_rtw_malloc> -10017798: 2301 movs r3, #1 -1001779a: 9300 str r3, [sp, #0] -1001779c: 2300 movs r3, #0 -1001779e: 4604 mov r4, r0 -100177a0: 4601 mov r1, r0 -100177a2: 462a mov r2, r5 -100177a4: 4618 mov r0, r3 -100177a6: f7ff ffc9 bl 1001773c -100177aa: 4620 mov r0, r4 -100177ac: b003 add sp, #12 -100177ae: bd30 pop {r4, r5, pc} - -100177b0 : -100177b0: b537 push {r0, r1, r2, r4, r5, lr} -100177b2: 4605 mov r5, r0 -100177b4: f7ff fe16 bl 100173e4 <_rtw_zmalloc> -100177b8: 2301 movs r3, #1 -100177ba: 9300 str r3, [sp, #0] -100177bc: 2300 movs r3, #0 -100177be: 4604 mov r4, r0 -100177c0: 4601 mov r1, r0 -100177c2: 462a mov r2, r5 -100177c4: 4618 mov r0, r3 -100177c6: f7ff ffb9 bl 1001773c -100177ca: 4620 mov r0, r4 -100177cc: b003 add sp, #12 -100177ce: bd30 pop {r4, r5, pc} - -100177d0 : -100177d0: 2000 movs r0, #0 -100177d2: 4770 bx lr - -100177d4 : -100177d4: 4770 bx lr - -100177d6 : -100177d6: 4770 bx lr - -100177d8 : -100177d8: 4770 bx lr - -100177da : -100177da: 4770 bx lr - -100177dc : -100177dc: 4b02 ldr r3, [pc, #8] ; (100177e8 ) -100177de: f8d3 3134 ldr.w r3, [r3, #308] ; 0x134 -100177e2: b103 cbz r3, 100177e6 -100177e4: 4718 bx r3 -100177e6: 4770 bx lr -100177e8: 10040390 .word 0x10040390 - -100177ec : -100177ec: 4b02 ldr r3, [pc, #8] ; (100177f8 ) -100177ee: f8d3 3138 ldr.w r3, [r3, #312] ; 0x138 -100177f2: b103 cbz r3, 100177f6 -100177f4: 4718 bx r3 -100177f6: 4770 bx lr -100177f8: 10040390 .word 0x10040390 - -100177fc : -100177fc: 4b02 ldr r3, [pc, #8] ; (10017808 ) -100177fe: f8d3 313c ldr.w r3, [r3, #316] ; 0x13c -10017802: b103 cbz r3, 10017806 -10017804: 4718 bx r3 -10017806: 4770 bx lr -10017808: 10040390 .word 0x10040390 - -1001780c : -1001780c: b470 push {r4, r5, r6} -1001780e: 4c05 ldr r4, [pc, #20] ; (10017824 ) -10017810: f8d4 40f0 ldr.w r4, [r4, #240] ; 0xf0 -10017814: b114 cbz r4, 1001781c -10017816: 46a4 mov ip, r4 -10017818: bc70 pop {r4, r5, r6} -1001781a: 4760 bx ip -1001781c: 2001 movs r0, #1 -1001781e: bc70 pop {r4, r5, r6} -10017820: 4770 bx lr -10017822: bf00 nop -10017824: 10040390 .word 0x10040390 - -10017828 : -10017828: 4b02 ldr r3, [pc, #8] ; (10017834 ) -1001782a: f8d3 30f4 ldr.w r3, [r3, #244] ; 0xf4 -1001782e: b103 cbz r3, 10017832 -10017830: 4718 bx r3 -10017832: 4770 bx lr -10017834: 10040390 .word 0x10040390 - -10017838 : -10017838: 4b02 ldr r3, [pc, #8] ; (10017844 ) -1001783a: f8d3 30f8 ldr.w r3, [r3, #248] ; 0xf8 -1001783e: b103 cbz r3, 10017842 -10017840: 4718 bx r3 -10017842: 4770 bx lr -10017844: 10040390 .word 0x10040390 - -10017848 : -10017848: b430 push {r4, r5} -1001784a: 4c05 ldr r4, [pc, #20] ; (10017860 ) -1001784c: f8d4 4104 ldr.w r4, [r4, #260] ; 0x104 -10017850: b114 cbz r4, 10017858 -10017852: 46a4 mov ip, r4 -10017854: bc30 pop {r4, r5} -10017856: 4760 bx ip -10017858: 4620 mov r0, r4 -1001785a: bc30 pop {r4, r5} -1001785c: 4770 bx lr -1001785e: bf00 nop -10017860: 10040390 .word 0x10040390 - -10017864 : -10017864: 4b03 ldr r3, [pc, #12] ; (10017874 ) -10017866: f8d3 3108 ldr.w r3, [r3, #264] ; 0x108 -1001786a: b103 cbz r3, 1001786e -1001786c: 4718 bx r3 -1001786e: 4618 mov r0, r3 -10017870: 4770 bx lr -10017872: bf00 nop -10017874: 10040390 .word 0x10040390 - -10017878 : -10017878: 4b03 ldr r3, [pc, #12] ; (10017888 ) -1001787a: f8d3 310c ldr.w r3, [r3, #268] ; 0x10c -1001787e: b103 cbz r3, 10017882 -10017880: 4718 bx r3 -10017882: 4618 mov r0, r3 -10017884: 4770 bx lr -10017886: bf00 nop -10017888: 10040390 .word 0x10040390 - -1001788c : -1001788c: 4b03 ldr r3, [pc, #12] ; (1001789c ) -1001788e: f8d3 3110 ldr.w r3, [r3, #272] ; 0x110 -10017892: b103 cbz r3, 10017896 -10017894: 4718 bx r3 -10017896: 4618 mov r0, r3 -10017898: 4770 bx lr -1001789a: bf00 nop -1001789c: 10040390 .word 0x10040390 - -100178a0 : -100178a0: 4b03 ldr r3, [pc, #12] ; (100178b0 ) -100178a2: f8d3 3114 ldr.w r3, [r3, #276] ; 0x114 -100178a6: b103 cbz r3, 100178aa -100178a8: 4718 bx r3 -100178aa: 4618 mov r0, r3 -100178ac: 4770 bx lr -100178ae: bf00 nop -100178b0: 10040390 .word 0x10040390 - -100178b4 : -100178b4: 4b02 ldr r3, [pc, #8] ; (100178c0 ) -100178b6: f8d3 30fc ldr.w r3, [r3, #252] ; 0xfc -100178ba: b103 cbz r3, 100178be -100178bc: 4718 bx r3 -100178be: 4770 bx lr -100178c0: 10040390 .word 0x10040390 - -100178c4 : -100178c4: 4b02 ldr r3, [pc, #8] ; (100178d0 ) -100178c6: f8d3 3100 ldr.w r3, [r3, #256] ; 0x100 -100178ca: b103 cbz r3, 100178ce -100178cc: 4718 bx r3 -100178ce: 4770 bx lr -100178d0: 10040390 .word 0x10040390 - -100178d4 : -100178d4: b573 push {r0, r1, r4, r5, r6, lr} -100178d6: 4606 mov r6, r0 -100178d8: 2800 cmp r0, #0 -100178da: d030 beq.n 1001793e -100178dc: f850 4c04 ldr.w r4, [r0, #-4] -100178e0: 1f05 subs r5, r0, #4 -100178e2: a901 add r1, sp, #4 -100178e4: 4819 ldr r0, [pc, #100] ; (1001794c ) -100178e6: f7ff fe2b bl 10017540 -100178ea: 4919 ldr r1, [pc, #100] ; (10017950 ) -100178ec: 1de2 adds r2, r4, #7 -100178ee: 680b ldr r3, [r1, #0] -100178f0: f032 0207 bics.w r2, r2, #7 -100178f4: bf08 it eq -100178f6: 2208 moveq r2, #8 -100178f8: 429d cmp r5, r3 -100178fa: d300 bcc.n 100178fe -100178fc: b933 cbnz r3, 1001790c -100178fe: f846 3c04 str.w r3, [r6, #-4] -10017902: 6032 str r2, [r6, #0] -10017904: 600d str r5, [r1, #0] -10017906: 462b mov r3, r5 -10017908: e00b b.n 10017922 -1001790a: 460b mov r3, r1 -1001790c: 6819 ldr r1, [r3, #0] -1001790e: 428d cmp r5, r1 -10017910: d901 bls.n 10017916 -10017912: 2900 cmp r1, #0 -10017914: d1f9 bne.n 1001790a -10017916: 6858 ldr r0, [r3, #4] -10017918: 181c adds r4, r3, r0 -1001791a: 42a5 cmp r5, r4 -1001791c: d111 bne.n 10017942 -1001791e: 4402 add r2, r0 -10017920: 605a str r2, [r3, #4] -10017922: 685a ldr r2, [r3, #4] -10017924: 6818 ldr r0, [r3, #0] -10017926: 1899 adds r1, r3, r2 -10017928: 4281 cmp r1, r0 -1001792a: d104 bne.n 10017936 -1001792c: 6849 ldr r1, [r1, #4] -1001792e: 4411 add r1, r2 -10017930: 589a ldr r2, [r3, r2] -10017932: 6059 str r1, [r3, #4] -10017934: 601a str r2, [r3, #0] -10017936: a901 add r1, sp, #4 -10017938: 4804 ldr r0, [pc, #16] ; (1001794c ) -1001793a: f7ff fe0b bl 10017554 -1001793e: b002 add sp, #8 -10017940: bd70 pop {r4, r5, r6, pc} -10017942: f846 1c04 str.w r1, [r6, #-4] -10017946: 6032 str r2, [r6, #0] -10017948: 601d str r5, [r3, #0] -1001794a: e7dc b.n 10017906 -1001794c: 1004b4e8 .word 0x1004b4e8 -10017950: 1004b4e4 .word 0x1004b4e4 - -10017954 : -10017954: b508 push {r3, lr} -10017956: 4a0c ldr r2, [pc, #48] ; (10017988 ) -10017958: 4b0c ldr r3, [pc, #48] ; (1001798c ) -1001795a: 480d ldr r0, [pc, #52] ; (10017990 ) -1001795c: 6013 str r3, [r2, #0] -1001795e: 2200 movs r2, #0 -10017960: 601a str r2, [r3, #0] -10017962: 4a0c ldr r2, [pc, #48] ; (10017994 ) -10017964: 1ad2 subs r2, r2, r3 -10017966: f022 0207 bic.w r2, r2, #7 -1001796a: 605a str r2, [r3, #4] -1001796c: 2201 movs r2, #1 -1001796e: 4b0a ldr r3, [pc, #40] ; (10017998 ) -10017970: 601a str r2, [r3, #0] -10017972: f7ff fe0b bl 1001758c -10017976: e8bd 4008 ldmia.w sp!, {r3, lr} -1001797a: 4a08 ldr r2, [pc, #32] ; (1001799c ) -1001797c: f04f 5100 mov.w r1, #536870912 ; 0x20000000 -10017980: 4807 ldr r0, [pc, #28] ; (100179a0 ) -10017982: f7fd bc61 b.w 10015248 -10017986: bf00 nop -10017988: 1004b4e4 .word 0x1004b4e4 -1001798c: 1fff0000 .word 0x1fff0000 -10017990: 1004b4e8 .word 0x1004b4e8 -10017994: 1ffffd07 .word 0x1ffffd07 -10017998: 1004b4e0 .word 0x1004b4e0 -1001799c: 1fff0000 .word 0x1fff0000 -100179a0: 100178d5 .word 0x100178d5 - -100179a4 : -100179a4: b513 push {r0, r1, r4, lr} -100179a6: 480c ldr r0, [pc, #48] ; (100179d8 ) -100179a8: a901 add r1, sp, #4 -100179aa: f7ff fdc9 bl 10017540 -100179ae: 4b0b ldr r3, [pc, #44] ; (100179dc ) -100179b0: 681b ldr r3, [r3, #0] -100179b2: b90b cbnz r3, 100179b8 -100179b4: f7ff ffce bl 10017954 -100179b8: 2400 movs r4, #0 -100179ba: 4b09 ldr r3, [pc, #36] ; (100179e0 ) -100179bc: 681b ldr r3, [r3, #0] -100179be: b933 cbnz r3, 100179ce -100179c0: a901 add r1, sp, #4 -100179c2: 4805 ldr r0, [pc, #20] ; (100179d8 ) -100179c4: f7ff fdc6 bl 10017554 -100179c8: 4620 mov r0, r4 -100179ca: b002 add sp, #8 -100179cc: bd10 pop {r4, pc} -100179ce: 685a ldr r2, [r3, #4] -100179d0: 681b ldr r3, [r3, #0] -100179d2: 4414 add r4, r2 -100179d4: e7f3 b.n 100179be -100179d6: bf00 nop -100179d8: 1004b4e8 .word 0x1004b4e8 -100179dc: 1004b4e0 .word 0x1004b4e0 -100179e0: 1004b4e4 .word 0x1004b4e4 - -100179e4 : -100179e4: b573 push {r0, r1, r4, r5, r6, lr} -100179e6: 4605 mov r5, r0 -100179e8: 1d06 adds r6, r0, #4 -100179ea: a901 add r1, sp, #4 -100179ec: 481d ldr r0, [pc, #116] ; (10017a64 ) -100179ee: f7ff fda7 bl 10017540 -100179f2: 4b1d ldr r3, [pc, #116] ; (10017a68 ) -100179f4: 681b ldr r3, [r3, #0] -100179f6: b90b cbnz r3, 100179fc -100179f8: f7ff ffac bl 10017954 -100179fc: 350b adds r5, #11 -100179fe: f035 0507 bics.w r5, r5, #7 -10017a02: bf08 it eq -10017a04: 2508 moveq r5, #8 -10017a06: 4b19 ldr r3, [pc, #100] ; (10017a6c ) -10017a08: 681c ldr r4, [r3, #0] -10017a0a: b99c cbnz r4, 10017a34 -10017a0c: a901 add r1, sp, #4 -10017a0e: 4815 ldr r0, [pc, #84] ; (10017a64 ) -10017a10: f7ff fda0 bl 10017554 -10017a14: 4b16 ldr r3, [pc, #88] ; (10017a70 ) -10017a16: 681b ldr r3, [r3, #0] -10017a18: 02db lsls r3, r3, #11 -10017a1a: d51a bpl.n 10017a52 -10017a1c: 4c15 ldr r4, [pc, #84] ; (10017a74 ) -10017a1e: 4816 ldr r0, [pc, #88] ; (10017a78 ) -10017a20: 47a0 blx r4 -10017a22: f7ff ffbf bl 100179a4 -10017a26: 4629 mov r1, r5 -10017a28: 4602 mov r2, r0 -10017a2a: 4814 ldr r0, [pc, #80] ; (10017a7c ) -10017a2c: 47a0 blx r4 -10017a2e: 4814 ldr r0, [pc, #80] ; (10017a80 ) -10017a30: 47a0 blx r4 -10017a32: e00e b.n 10017a52 -10017a34: 6862 ldr r2, [r4, #4] -10017a36: 42aa cmp r2, r5 -10017a38: db0d blt.n 10017a56 -10017a3a: bf0d iteet eq -10017a3c: 6822 ldreq r2, [r4, #0] -10017a3e: 1b55 subne r5, r2, r5 -10017a40: 6065 strne r5, [r4, #4] -10017a42: 601a streq r2, [r3, #0] -10017a44: bf18 it ne -10017a46: 1964 addne r4, r4, r5 -10017a48: a901 add r1, sp, #4 -10017a4a: 4806 ldr r0, [pc, #24] ; (10017a64 ) -10017a4c: f7ff fd82 bl 10017554 -10017a50: b924 cbnz r4, 10017a5c -10017a52: 2000 movs r0, #0 -10017a54: e004 b.n 10017a60 -10017a56: 4623 mov r3, r4 -10017a58: 6824 ldr r4, [r4, #0] -10017a5a: e7d6 b.n 10017a0a -10017a5c: 1d20 adds r0, r4, #4 -10017a5e: 6026 str r6, [r4, #0] -10017a60: b002 add sp, #8 -10017a62: bd70 pop {r4, r5, r6, pc} -10017a64: 1004b4e8 .word 0x1004b4e8 -10017a68: 1004b4e0 .word 0x1004b4e0 -10017a6c: 1004b4e4 .word 0x1004b4e4 -10017a70: 1000030c .word 0x1000030c -10017a74: 0000f39d .word 0x0000f39d -10017a78: 100401fb .word 0x100401fb -10017a7c: 1004052d .word 0x1004052d -10017a80: 100407ab .word 0x100407ab - -10017a84 : -10017a84: b538 push {r3, r4, r5, lr} -10017a86: 4605 mov r5, r0 -10017a88: f7ff ffac bl 100179e4 -10017a8c: 4604 mov r4, r0 -10017a8e: b118 cbz r0, 10017a98 -10017a90: 462a mov r2, r5 -10017a92: 2100 movs r1, #0 -10017a94: f003 f890 bl 1001abb8 -10017a98: 4620 mov r0, r4 -10017a9a: bd38 pop {r3, r4, r5, pc} - -10017a9c : -10017a9c: 4a1c ldr r2, [pc, #112] ; (10017b10 ) -10017a9e: b538 push {r3, r4, r5, lr} -10017aa0: 6813 ldr r3, [r2, #0] -10017aa2: 2001 movs r0, #1 -10017aa4: f043 0301 orr.w r3, r3, #1 -10017aa8: 6013 str r3, [r2, #0] -10017aaa: f7ef feb3 bl 10007814 -10017aae: 4604 mov r4, r0 -10017ab0: b1c8 cbz r0, 10017ae6 -10017ab2: 2301 movs r3, #1 -10017ab4: 4a17 ldr r2, [pc, #92] ; (10017b14 ) -10017ab6: 7013 strb r3, [r2, #0] -10017ab8: 2106 movs r1, #6 -10017aba: 4d17 ldr r5, [pc, #92] ; (10017b18 ) -10017abc: 4a17 ldr r2, [pc, #92] ; (10017b1c ) -10017abe: 6814 ldr r4, [r2, #0] -10017ac0: 462a mov r2, r5 -10017ac2: 0924 lsrs r4, r4, #4 -10017ac4: f004 0007 and.w r0, r4, #7 -10017ac8: fb01 0003 mla r0, r1, r3, r0 -10017acc: 4914 ldr r1, [pc, #80] ; (10017b20 ) -10017ace: eb01 01c0 add.w r1, r1, r0, lsl #3 -10017ad2: 6808 ldr r0, [r1, #0] -10017ad4: 6849 ldr r1, [r1, #4] -10017ad6: c203 stmia r2!, {r0, r1} -10017ad8: 78ea ldrb r2, [r5, #3] -10017ada: f364 0243 bfi r2, r4, #1, #3 -10017ade: f363 1205 bfi r2, r3, #4, #2 -10017ae2: 70ea strb r2, [r5, #3] -10017ae4: bd38 pop {r3, r4, r5, pc} -10017ae6: f7ef fe95 bl 10007814 -10017aea: b120 cbz r0, 10017af6 -10017aec: 2201 movs r2, #1 -10017aee: 4b09 ldr r3, [pc, #36] ; (10017b14 ) -10017af0: 701a strb r2, [r3, #0] -10017af2: 4623 mov r3, r4 -10017af4: e7e0 b.n 10017ab8 -10017af6: 4b0b ldr r3, [pc, #44] ; (10017b24 ) -10017af8: 681b ldr r3, [r3, #0] -10017afa: 005b lsls r3, r3, #1 -10017afc: d502 bpl.n 10017b04 -10017afe: 480a ldr r0, [pc, #40] ; (10017b28 ) -10017b00: 4b0a ldr r3, [pc, #40] ; (10017b2c ) -10017b02: 4798 blx r3 -10017b04: 4a0a ldr r2, [pc, #40] ; (10017b30 ) -10017b06: 6813 ldr r3, [r2, #0] -10017b08: f043 030f orr.w r3, r3, #15 -10017b0c: 6013 str r3, [r2, #0] -10017b0e: bd38 pop {r3, r4, r5, pc} -10017b10: 400002c0 .word 0x400002c0 -10017b14: 1004b4f8 .word 0x1004b4f8 -10017b18: 1004b4ec .word 0x1004b4ec -10017b1c: 40000014 .word 0x40000014 -10017b20: 100021ec .word 0x100021ec -10017b24: 10000314 .word 0x10000314 -10017b28: 1004054d .word 0x1004054d -10017b2c: 0000f39d .word 0x0000f39d -10017b30: 400000fc .word 0x400000fc - -10017b34 : -10017b34: 4a03 ldr r2, [pc, #12] ; (10017b44 ) -10017b36: 6813 ldr r3, [r2, #0] -10017b38: f043 0301 orr.w r3, r3, #1 -10017b3c: 6013 str r3, [r2, #0] -10017b3e: 4b02 ldr r3, [pc, #8] ; (10017b48 ) -10017b40: 4718 bx r3 -10017b42: bf00 nop -10017b44: 400002c0 .word 0x400002c0 -10017b48: 00002ea5 .word 0x00002ea5 - -10017b4c : -10017b4c: b510 push {r4, lr} -10017b4e: 460c mov r4, r1 -10017b50: f7ff fff0 bl 10017b34 -10017b54: 4b06 ldr r3, [pc, #24] ; (10017b70 ) -10017b56: 781b ldrb r3, [r3, #0] -10017b58: b913 cbnz r3, 10017b60 -10017b5a: 4806 ldr r0, [pc, #24] ; (10017b74 ) -10017b5c: f7ff ff9e bl 10017a9c -10017b60: f104 4018 add.w r0, r4, #2550136832 ; 0x98000000 -10017b64: f7ef fb95 bl 10007292 -10017b68: e8bd 4010 ldmia.w sp!, {r4, lr} -10017b6c: f7ef bbdc b.w 10007328 -10017b70: 1004b4f8 .word 0x1004b4f8 -10017b74: 1004b4ec .word 0x1004b4ec - -10017b78 : -10017b78: b510 push {r4, lr} -10017b7a: 460c mov r4, r1 -10017b7c: f7ff ffda bl 10017b34 -10017b80: 4b06 ldr r3, [pc, #24] ; (10017b9c ) -10017b82: 781b ldrb r3, [r3, #0] -10017b84: b913 cbnz r3, 10017b8c -10017b86: 4806 ldr r0, [pc, #24] ; (10017ba0 ) -10017b88: f7ff ff88 bl 10017a9c -10017b8c: f104 4018 add.w r0, r4, #2550136832 ; 0x98000000 -10017b90: f7ef fb6e bl 10007270 -10017b94: e8bd 4010 ldmia.w sp!, {r4, lr} -10017b98: f7ef bbc6 b.w 10007328 -10017b9c: 1004b4f8 .word 0x1004b4f8 -10017ba0: 1004b4ec .word 0x1004b4ec - -10017ba4 : -10017ba4: b538 push {r3, r4, r5, lr} -10017ba6: 460c mov r4, r1 -10017ba8: 4615 mov r5, r2 -10017baa: f7ff ffc3 bl 10017b34 -10017bae: 4b09 ldr r3, [pc, #36] ; (10017bd4 ) -10017bb0: 781b ldrb r3, [r3, #0] -10017bb2: b913 cbnz r3, 10017bba -10017bb4: 4808 ldr r0, [pc, #32] ; (10017bd8 ) -10017bb6: f7ff ff71 bl 10017a9c -10017bba: 4b07 ldr r3, [pc, #28] ; (10017bd8 ) -10017bbc: f104 4418 add.w r4, r4, #2550136832 ; 0x98000000 -10017bc0: e893 0003 ldmia.w r3, {r0, r1} -10017bc4: f7ef f8a0 bl 10006d08 -10017bc8: 6823 ldr r3, [r4, #0] -10017bca: 602b str r3, [r5, #0] -10017bcc: f7ef fbac bl 10007328 -10017bd0: 2001 movs r0, #1 -10017bd2: bd38 pop {r3, r4, r5, pc} -10017bd4: 1004b4f8 .word 0x1004b4f8 -10017bd8: 1004b4ec .word 0x1004b4ec - -10017bdc : -10017bdc: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -10017bde: 461d mov r5, r3 -10017be0: 460c mov r4, r1 -10017be2: 4616 mov r6, r2 -10017be4: f7ff ffa6 bl 10017b34 -10017be8: 4b2f ldr r3, [pc, #188] ; (10017ca8 ) -10017bea: 781b ldrb r3, [r3, #0] -10017bec: b913 cbnz r3, 10017bf4 -10017bee: 482f ldr r0, [pc, #188] ; (10017cac ) -10017bf0: f7ff ff54 bl 10017a9c -10017bf4: 4b2d ldr r3, [pc, #180] ; (10017cac ) -10017bf6: e893 0003 ldmia.w r3, {r0, r1} -10017bfa: f7ef f885 bl 10006d08 -10017bfe: f014 0303 ands.w r3, r4, #3 -10017c02: d013 beq.n 10017c2c -10017c04: f104 4218 add.w r2, r4, #2550136832 ; 0x98000000 -10017c08: 1ad2 subs r2, r2, r3 -10017c0a: 6811 ldr r1, [r2, #0] -10017c0c: aa02 add r2, sp, #8 -10017c0e: f842 1d04 str.w r1, [r2, #-4]! -10017c12: 1e59 subs r1, r3, #1 -10017c14: f1c3 0304 rsb r3, r3, #4 -10017c18: 440a add r2, r1 -10017c1a: 442b add r3, r5 -10017c1c: f812 1f01 ldrb.w r1, [r2, #1]! -10017c20: 3e01 subs r6, #1 -10017c22: f805 1b01 strb.w r1, [r5], #1 -10017c26: d001 beq.n 10017c2c -10017c28: 429d cmp r5, r3 -10017c2a: d1f7 bne.n 10017c1c -10017c2c: 3c01 subs r4, #1 -10017c2e: f024 0403 bic.w r4, r4, #3 -10017c32: 3404 adds r4, #4 -10017c34: f104 4118 add.w r1, r4, #2550136832 ; 0x98000000 -10017c38: 07aa lsls r2, r5, #30 -10017c3a: 462b mov r3, r5 -10017c3c: eba1 0105 sub.w r1, r1, r5 -10017c40: d107 bne.n 10017c52 -10017c42: 1af2 subs r2, r6, r3 -10017c44: 442a add r2, r5 -10017c46: 2a03 cmp r2, #3 -10017c48: d908 bls.n 10017c5c -10017c4a: 585a ldr r2, [r3, r1] -10017c4c: f843 2b04 str.w r2, [r3], #4 -10017c50: e7f7 b.n 10017c42 -10017c52: af01 add r7, sp, #4 -10017c54: 1af2 subs r2, r6, r3 -10017c56: 442a add r2, r5 -10017c58: 2a03 cmp r2, #3 -10017c5a: d818 bhi.n 10017c8e -10017c5c: f026 0303 bic.w r3, r6, #3 -10017c60: f006 0603 and.w r6, r6, #3 -10017c64: 441c add r4, r3 -10017c66: 442b add r3, r5 -10017c68: b166 cbz r6, 10017c84 -10017c6a: f104 4418 add.w r4, r4, #2550136832 ; 0x98000000 -10017c6e: 6821 ldr r1, [r4, #0] -10017c70: a802 add r0, sp, #8 -10017c72: f840 1d04 str.w r1, [r0, #-4]! -10017c76: 2100 movs r1, #0 -10017c78: 5c0c ldrb r4, [r1, r0] -10017c7a: 3101 adds r1, #1 -10017c7c: 428e cmp r6, r1 -10017c7e: f803 4b01 strb.w r4, [r3], #1 -10017c82: d1f9 bne.n 10017c78 -10017c84: f7ef fb50 bl 10007328 -10017c88: 2001 movs r0, #1 -10017c8a: b003 add sp, #12 -10017c8c: bdf0 pop {r4, r5, r6, r7, pc} -10017c8e: 585a ldr r2, [r3, r1] -10017c90: 4618 mov r0, r3 -10017c92: 9201 str r2, [sp, #4] -10017c94: 2200 movs r2, #0 -10017c96: f812 e007 ldrb.w lr, [r2, r7] -10017c9a: 3201 adds r2, #1 -10017c9c: 2a04 cmp r2, #4 -10017c9e: f800 eb01 strb.w lr, [r0], #1 -10017ca2: d1f8 bne.n 10017c96 -10017ca4: 3304 adds r3, #4 -10017ca6: e7d5 b.n 10017c54 -10017ca8: 1004b4f8 .word 0x1004b4f8 -10017cac: 1004b4ec .word 0x1004b4ec - -10017cb0 : -10017cb0: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10017cb4: 461f mov r7, r3 -10017cb6: 460d mov r5, r1 -10017cb8: 4690 mov r8, r2 -10017cba: f7ff ff3b bl 10017b34 -10017cbe: 4b4d ldr r3, [pc, #308] ; (10017df4 ) -10017cc0: 781b ldrb r3, [r3, #0] -10017cc2: b913 cbnz r3, 10017cca -10017cc4: 484c ldr r0, [pc, #304] ; (10017df8 ) -10017cc6: f7ff fee9 bl 10017a9c -10017cca: 4c4b ldr r4, [pc, #300] ; (10017df8 ) -10017ccc: f015 0303 ands.w r3, r5, #3 -10017cd0: 79e6 ldrb r6, [r4, #7] -10017cd2: d020 beq.n 10017d16 -10017cd4: f105 4018 add.w r0, r5, #2550136832 ; 0x98000000 -10017cd8: 1ac0 subs r0, r0, r3 -10017cda: 6801 ldr r1, [r0, #0] -10017cdc: aa02 add r2, sp, #8 -10017cde: f842 1d04 str.w r1, [r2, #-4]! -10017ce2: 4639 mov r1, r7 -10017ce4: 1e5f subs r7, r3, #1 -10017ce6: f1c3 0304 rsb r3, r3, #4 -10017cea: 443a add r2, r7 -10017cec: 440b add r3, r1 -10017cee: f811 7b01 ldrb.w r7, [r1], #1 -10017cf2: f1b8 0801 subs.w r8, r8, #1 -10017cf6: f802 7f01 strb.w r7, [r2, #1]! -10017cfa: 460f mov r7, r1 -10017cfc: d001 beq.n 10017d02 -10017cfe: 428b cmp r3, r1 -10017d00: d1f5 bne.n 10017cee -10017d02: 9b01 ldr r3, [sp, #4] -10017d04: 6003 str r3, [r0, #0] -10017d06: 4b3d ldr r3, [pc, #244] ; (10017dfc ) -10017d08: 4798 blx r3 -10017d0a: e894 0003 ldmia.w r4, {r0, r1} -10017d0e: 2e04 cmp r6, #4 -10017d10: d137 bne.n 10017d82 -10017d12: f7ef f8c7 bl 10006ea4 -10017d16: 3d01 subs r5, #1 -10017d18: f025 0503 bic.w r5, r5, #3 -10017d1c: 07bb lsls r3, r7, #30 -10017d1e: f105 0504 add.w r5, r5, #4 -10017d22: d031 beq.n 10017d88 -10017d24: 46b9 mov r9, r7 -10017d26: f105 4a18 add.w sl, r5, #2550136832 ; 0x98000000 -10017d2a: f8df b0d0 ldr.w fp, [pc, #208] ; 10017dfc -10017d2e: ebaa 0a07 sub.w sl, sl, r7 -10017d32: eba8 0309 sub.w r3, r8, r9 -10017d36: 443b add r3, r7 -10017d38: 2b03 cmp r3, #3 -10017d3a: d842 bhi.n 10017dc2 -10017d3c: f028 0303 bic.w r3, r8, #3 -10017d40: f008 0203 and.w r2, r8, #3 -10017d44: 441d add r5, r3 -10017d46: 443b add r3, r7 -10017d48: b1aa cbz r2, 10017d76 -10017d4a: f105 4518 add.w r5, r5, #2550136832 ; 0x98000000 -10017d4e: 6829 ldr r1, [r5, #0] -10017d50: a802 add r0, sp, #8 -10017d52: f840 1d04 str.w r1, [r0, #-4]! -10017d56: 2100 movs r1, #0 -10017d58: 5c5f ldrb r7, [r3, r1] -10017d5a: 540f strb r7, [r1, r0] -10017d5c: 3101 adds r1, #1 -10017d5e: 428a cmp r2, r1 -10017d60: d1fa bne.n 10017d58 -10017d62: 9b01 ldr r3, [sp, #4] -10017d64: 602b str r3, [r5, #0] -10017d66: 4b25 ldr r3, [pc, #148] ; (10017dfc ) -10017d68: 4798 blx r3 -10017d6a: e894 0003 ldmia.w r4, {r0, r1} -10017d6e: 2e04 cmp r6, #4 -10017d70: d13c bne.n 10017dec -10017d72: f7ef f897 bl 10006ea4 -10017d76: f7ef fad7 bl 10007328 -10017d7a: 2001 movs r0, #1 -10017d7c: b003 add sp, #12 -10017d7e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10017d82: f7ee ffc1 bl 10006d08 -10017d86: e7c6 b.n 10017d16 -10017d88: f105 4918 add.w r9, r5, #2550136832 ; 0x98000000 -10017d8c: f109 0904 add.w r9, r9, #4 -10017d90: f1a7 0a04 sub.w sl, r7, #4 -10017d94: eba9 0907 sub.w r9, r9, r7 -10017d98: f1a8 0304 sub.w r3, r8, #4 -10017d9c: eba3 030a sub.w r3, r3, sl -10017da0: 443b add r3, r7 -10017da2: 2b03 cmp r3, #3 -10017da4: d9ca bls.n 10017d3c -10017da6: eb09 030a add.w r3, r9, sl -10017daa: f85a 2f04 ldr.w r2, [sl, #4]! -10017dae: 601a str r2, [r3, #0] -10017db0: 4b12 ldr r3, [pc, #72] ; (10017dfc ) -10017db2: 4798 blx r3 -10017db4: e894 0003 ldmia.w r4, {r0, r1} -10017db8: 2e04 cmp r6, #4 -10017dba: d114 bne.n 10017de6 -10017dbc: f7ef f872 bl 10006ea4 -10017dc0: e7ea b.n 10017d98 -10017dc2: f8d9 3000 ldr.w r3, [r9] -10017dc6: f849 300a str.w r3, [r9, sl] -10017dca: 9301 str r3, [sp, #4] -10017dcc: 47d8 blx fp -10017dce: e894 0003 ldmia.w r4, {r0, r1} -10017dd2: 2e04 cmp r6, #4 -10017dd4: d104 bne.n 10017de0 -10017dd6: f7ef f865 bl 10006ea4 -10017dda: f109 0904 add.w r9, r9, #4 -10017dde: e7a8 b.n 10017d32 -10017de0: f7ee ff92 bl 10006d08 -10017de4: e7f9 b.n 10017dda -10017de6: f7ee ff8f bl 10006d08 -10017dea: e7d5 b.n 10017d98 -10017dec: f7ee ff8c bl 10006d08 -10017df0: e7c1 b.n 10017d76 -10017df2: bf00 nop -10017df4: 1004b4f8 .word 0x1004b4f8 -10017df8: 1004b4ec .word 0x1004b4ec -10017dfc: 00002ea5 .word 0x00002ea5 - -10017e00 : -10017e00: b510 push {r4, lr} -10017e02: 4c0d ldr r4, [pc, #52] ; (10017e38 ) -10017e04: 7823 ldrb r3, [r4, #0] -10017e06: b143 cbz r3, 10017e1a -10017e08: 4b0c ldr r3, [pc, #48] ; (10017e3c ) -10017e0a: 799b ldrb r3, [r3, #6] -10017e0c: f1a3 0212 sub.w r2, r3, #18 -10017e10: 2a0d cmp r2, #13 -10017e12: d90d bls.n 10017e30 -10017e14: f44f 1080 mov.w r0, #1048576 ; 0x100000 -10017e18: bd10 pop {r4, pc} -10017e1a: f7ff fe8b bl 10017b34 -10017e1e: 4807 ldr r0, [pc, #28] ; (10017e3c ) -10017e20: f7ff fe3c bl 10017a9c -10017e24: f7ef fa80 bl 10007328 -10017e28: 7820 ldrb r0, [r4, #0] -10017e2a: 2800 cmp r0, #0 -10017e2c: d1ec bne.n 10017e08 -10017e2e: bd10 pop {r4, pc} -10017e30: 2001 movs r0, #1 -10017e32: 4098 lsls r0, r3 -10017e34: bd10 pop {r4, pc} -10017e36: bf00 nop -10017e38: 1004b4f8 .word 0x1004b4f8 -10017e3c: 1004b4ec .word 0x1004b4ec - -10017e40 : -10017e40: 6882 ldr r2, [r0, #8] -10017e42: 6843 ldr r3, [r0, #4] -10017e44: 2a01 cmp r2, #1 -10017e46: d105 bne.n 10017e54 -10017e48: 2b03 cmp r3, #3 -10017e4a: bf0c ite eq -10017e4c: 2304 moveq r3, #4 -10017e4e: 2303 movne r3, #3 -10017e50: 60c3 str r3, [r0, #12] -10017e52: 4770 bx lr -10017e54: 2b03 cmp r3, #3 -10017e56: bf96 itet ls -10017e58: 4a01 ldrls r2, [pc, #4] ; (10017e60 ) -10017e5a: 2300 movhi r3, #0 -10017e5c: 5cd3 ldrbls r3, [r2, r3] -10017e5e: e7f7 b.n 10017e50 -10017e60: 1004055d .word 0x1004055d - -10017e64 : -10017e64: b538 push {r3, r4, r5, lr} -10017e66: 1c43 adds r3, r0, #1 -10017e68: 4604 mov r4, r0 -10017e6a: d105 bne.n 10017e78 -10017e6c: 236f movs r3, #111 ; 0x6f -10017e6e: 4a07 ldr r2, [pc, #28] ; (10017e8c ) -10017e70: 4907 ldr r1, [pc, #28] ; (10017e90 ) -10017e72: 4808 ldr r0, [pc, #32] ; (10017e94 ) -10017e74: 4d08 ldr r5, [pc, #32] ; (10017e98 ) -10017e76: 47a8 blx r5 -10017e78: 4620 mov r0, r4 -10017e7a: 2100 movs r1, #0 -10017e7c: f000 f864 bl 10017f48 -10017e80: 4620 mov r0, r4 -10017e82: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10017e86: f000 be1f b.w 10018ac8 -10017e8a: bf00 nop -10017e8c: 10040564 .word 0x10040564 -10017e90: 1004056d .word 0x1004056d -10017e94: 100405a8 .word 0x100405a8 -10017e98: 0000f39d .word 0x0000f39d - -10017e9c : -10017e9c: 1c4b adds r3, r1, #1 -10017e9e: b510 push {r4, lr} -10017ea0: 4604 mov r4, r0 -10017ea2: d015 beq.n 10017ed0 -10017ea4: 6001 str r1, [r0, #0] -10017ea6: 4608 mov r0, r1 -10017ea8: f7ff ffdc bl 10017e64 -10017eac: 2300 movs r3, #0 -10017eae: 6120 str r0, [r4, #16] -10017eb0: 60e3 str r3, [r4, #12] -10017eb2: f3c0 1341 ubfx r3, r0, #5, #2 -10017eb6: f000 001f and.w r0, r0, #31 -10017eba: 7560 strb r0, [r4, #21] -10017ebc: 7523 strb r3, [r4, #20] -10017ebe: 4620 mov r0, r4 -10017ec0: f7ff ffbe bl 10017e40 -10017ec4: f104 000c add.w r0, r4, #12 -10017ec8: e8bd 4010 ldmia.w sp!, {r4, lr} -10017ecc: f000 be0c b.w 10018ae8 -10017ed0: bd10 pop {r4, pc} - -10017ed2 : -10017ed2: b510 push {r4, lr} -10017ed4: 6041 str r1, [r0, #4] -10017ed6: f7ff ffb3 bl 10017e40 -10017eda: e8bd 4010 ldmia.w sp!, {r4, lr} -10017ede: 300c adds r0, #12 -10017ee0: f000 be02 b.w 10018ae8 - -10017ee4 : -10017ee4: b510 push {r4, lr} -10017ee6: 6081 str r1, [r0, #8] -10017ee8: f7ff ffaa bl 10017e40 -10017eec: e8bd 4010 ldmia.w sp!, {r4, lr} -10017ef0: 300c adds r0, #12 -10017ef2: f000 bdf9 b.w 10018ae8 - ... - -10017ef8 : -10017ef8: 68c2 ldr r2, [r0, #12] -10017efa: b513 push {r0, r1, r4, lr} -10017efc: 2a04 cmp r2, #4 -10017efe: 460b mov r3, r1 -10017f00: d019 beq.n 10017f36 -10017f02: 7d44 ldrb r4, [r0, #21] -10017f04: 7d02 ldrb r2, [r0, #20] -10017f06: 2001 movs r0, #1 -10017f08: 490d ldr r1, [pc, #52] ; (10017f40 ) -10017f0a: 40a0 lsls r0, r4 -10017f0c: 5c8a ldrb r2, [r1, r2] -10017f0e: f003 0301 and.w r3, r3, #1 -10017f12: f102 4280 add.w r2, r2, #1073741824 ; 0x40000000 -10017f16: f502 5280 add.w r2, r2, #4096 ; 0x1000 -10017f1a: 6811 ldr r1, [r2, #0] -10017f1c: 40a3 lsls r3, r4 -10017f1e: 9101 str r1, [sp, #4] -10017f20: 9901 ldr r1, [sp, #4] -10017f22: ea21 0100 bic.w r1, r1, r0 -10017f26: 9101 str r1, [sp, #4] -10017f28: 9901 ldr r1, [sp, #4] -10017f2a: 430b orrs r3, r1 -10017f2c: 9301 str r3, [sp, #4] -10017f2e: 9b01 ldr r3, [sp, #4] -10017f30: 6013 str r3, [r2, #0] -10017f32: b002 add sp, #8 -10017f34: bd10 pop {r4, pc} -10017f36: 4b03 ldr r3, [pc, #12] ; (10017f44 ) -10017f38: 300c adds r0, #12 -10017f3a: 4798 blx r3 -10017f3c: e7f9 b.n 10017f32 -10017f3e: bf00 nop -10017f40: 10040561 .word 0x10040561 -10017f44: 0000dc91 .word 0x0000dc91 - -10017f48 : -10017f48: 4770 bx lr - ... - -10017f4c : -10017f4c: 4288 cmp r0, r1 -10017f4e: b508 push {r3, lr} -10017f50: d00f beq.n 10017f72 -10017f52: 1c42 adds r2, r0, #1 -10017f54: d00d beq.n 10017f72 -10017f56: 3101 adds r1, #1 -10017f58: d00a beq.n 10017f70 -10017f5a: 4b07 ldr r3, [pc, #28] ; (10017f78 ) -10017f5c: 681b ldr r3, [r3, #0] -10017f5e: 075b lsls r3, r3, #29 -10017f60: d503 bpl.n 10017f6a -10017f62: 4906 ldr r1, [pc, #24] ; (10017f7c ) -10017f64: 4806 ldr r0, [pc, #24] ; (10017f80 ) -10017f66: 4b07 ldr r3, [pc, #28] ; (10017f84 ) -10017f68: 4798 blx r3 -10017f6a: f04f 31ff mov.w r1, #4294967295 -10017f6e: e000 b.n 10017f72 -10017f70: 4601 mov r1, r0 -10017f72: 4608 mov r0, r1 -10017f74: bd08 pop {r3, pc} -10017f76: bf00 nop -10017f78: 10000314 .word 0x10000314 -10017f7c: 100405be .word 0x100405be -10017f80: 100405dd .word 0x100405dd -10017f84: 0000f39d .word 0x0000f39d - -10017f88 : -10017f88: 680b ldr r3, [r1, #0] -10017f8a: 1c5a adds r2, r3, #1 -10017f8c: d101 bne.n 10017f92 -10017f8e: 4618 mov r0, r3 -10017f90: 4770 bx lr -10017f92: 4283 cmp r3, r0 -10017f94: d101 bne.n 10017f9a -10017f96: 6848 ldr r0, [r1, #4] -10017f98: 4770 bx lr -10017f9a: 310c adds r1, #12 -10017f9c: e7f4 b.n 10017f88 - ... - -10017fa0 : -10017fa0: b510 push {r4, lr} -10017fa2: 1c44 adds r4, r0, #1 -10017fa4: d103 bne.n 10017fae -10017fa6: f04f 34ff mov.w r4, #4294967295 -10017faa: 4620 mov r0, r4 -10017fac: bd10 pop {r4, pc} -10017fae: f7ff ffeb bl 10017f88 -10017fb2: 1c42 adds r2, r0, #1 -10017fb4: 4604 mov r4, r0 -10017fb6: d1f8 bne.n 10017faa -10017fb8: 4b04 ldr r3, [pc, #16] ; (10017fcc ) -10017fba: 681b ldr r3, [r3, #0] -10017fbc: 075b lsls r3, r3, #29 -10017fbe: d5f2 bpl.n 10017fa6 -10017fc0: 4903 ldr r1, [pc, #12] ; (10017fd0 ) -10017fc2: 4b04 ldr r3, [pc, #16] ; (10017fd4 ) -10017fc4: 4804 ldr r0, [pc, #16] ; (10017fd8 ) -10017fc6: 4798 blx r3 -10017fc8: e7ef b.n 10017faa -10017fca: bf00 nop -10017fcc: 10000314 .word 0x10000314 -10017fd0: 100405cb .word 0x100405cb -10017fd4: 0000f39d .word 0x0000f39d -10017fd8: 100405fd .word 0x100405fd - -10017fdc : -10017fdc: b2c0 uxtb r0, r0 -10017fde: b909 cbnz r1, 10017fe4 -10017fe0: f000 00fe and.w r0, r0, #254 ; 0xfe -10017fe4: b118 cbz r0, 10017fee -10017fe6: b2db uxtb r3, r3 -10017fe8: b2d2 uxtb r2, r2 -10017fea: f002 bbc9 b.w 1001a780 -10017fee: 4770 bx lr - -10017ff0 : -10017ff0: f010 0301 ands.w r3, r0, #1 -10017ff4: d002 beq.n 10017ffc -10017ff6: 1c0b adds r3, r1, #0 -10017ff8: bf18 it ne -10017ffa: 2301 movne r3, #1 -10017ffc: 0782 lsls r2, r0, #30 -10017ffe: d503 bpl.n 10018008 -10018000: f043 0002 orr.w r0, r3, #2 -10018004: f002 bc36 b.w 1001a874 -10018008: b10b cbz r3, 1001800e -1001800a: 2001 movs r0, #1 -1001800c: e7fa b.n 10018004 -1001800e: 4770 bx lr - -10018010 : -10018010: f8d0 36f8 ldr.w r3, [r0, #1784] ; 0x6f8 -10018014: b11b cbz r3, 1001801e -10018016: 2100 movs r1, #0 -10018018: f8d0 06fc ldr.w r0, [r0, #1788] ; 0x6fc -1001801c: 4718 bx r3 -1001801e: 4770 bx lr - -10018020 : -10018020: f8d0 3620 ldr.w r3, [r0, #1568] ; 0x620 -10018024: 075a lsls r2, r3, #29 -10018026: d50a bpl.n 1001803e -10018028: f023 0304 bic.w r3, r3, #4 -1001802c: f8c0 3620 str.w r3, [r0, #1568] ; 0x620 -10018030: f8d0 3614 ldr.w r3, [r0, #1556] ; 0x614 -10018034: b11b cbz r3, 1001803e -10018036: 2101 movs r1, #1 -10018038: f8d0 0618 ldr.w r0, [r0, #1560] ; 0x618 -1001803c: 4718 bx r3 -1001803e: 4770 bx lr - -10018040 : -10018040: f8d0 3620 ldr.w r3, [r0, #1568] ; 0x620 -10018044: f023 0302 bic.w r3, r3, #2 -10018048: f8c0 3620 str.w r3, [r0, #1568] ; 0x620 -1001804c: f8d0 3614 ldr.w r3, [r0, #1556] ; 0x614 -10018050: b11b cbz r3, 1001805a -10018052: 2100 movs r1, #0 -10018054: f8d0 0618 ldr.w r0, [r0, #1560] ; 0x618 -10018058: 4718 bx r3 -1001805a: 4770 bx lr - -1001805c : -1001805c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10018060: 460e mov r6, r1 -10018062: 4617 mov r7, r2 -10018064: 2100 movs r1, #0 -10018066: f44f 62e0 mov.w r2, #1792 ; 0x700 -1001806a: 461d mov r5, r3 -1001806c: 4b3f ldr r3, [pc, #252] ; (1001816c ) -1001806e: 4604 mov r4, r0 -10018070: 4798 blx r3 -10018072: 2300 movs r3, #0 -10018074: 493e ldr r1, [pc, #248] ; (10018170 ) -10018076: f8c4 3620 str.w r3, [r4, #1568] ; 0x620 -1001807a: 4630 mov r0, r6 -1001807c: f7ff ff90 bl 10017fa0 -10018080: 493c ldr r1, [pc, #240] ; (10018174 ) -10018082: 4606 mov r6, r0 -10018084: 4638 mov r0, r7 -10018086: f7ff ff8b bl 10017fa0 -1001808a: 4601 mov r1, r0 -1001808c: 4630 mov r0, r6 -1001808e: f7ff ff5d bl 10017f4c -10018092: 1c46 adds r6, r0, #1 -10018094: d108 bne.n 100180a8 -10018096: 4b38 ldr r3, [pc, #224] ; (10018178 ) -10018098: 681b ldr r3, [r3, #0] -1001809a: 0519 lsls r1, r3, #20 -1001809c: d564 bpl.n 10018168 -1001809e: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -100180a2: 4836 ldr r0, [pc, #216] ; (1001817c ) -100180a4: 4b36 ldr r3, [pc, #216] ; (10018180 ) -100180a6: 4718 bx r3 -100180a8: 2301 movs r3, #1 -100180aa: f3c0 1603 ubfx r6, r0, #4, #4 -100180ae: f884 5624 strb.w r5, [r4, #1572] ; 0x624 -100180b2: f000 050f and.w r5, r0, #15 -100180b6: f884 308a strb.w r3, [r4, #138] ; 0x8a -100180ba: f504 60b4 add.w r0, r4, #1440 ; 0x5a0 -100180be: f884 6084 strb.w r6, [r4, #132] ; 0x84 -100180c2: f884 5089 strb.w r5, [r4, #137] ; 0x89 -100180c6: f000 fd2f bl 10018b28 -100180ca: f8d4 35c8 ldr.w r3, [r4, #1480] ; 0x5c8 -100180ce: f894 108a ldrb.w r1, [r4, #138] ; 0x8a -100180d2: 4620 mov r0, r4 -100180d4: 4798 blx r3 -100180d6: b936 cbnz r6, 100180e6 -100180d8: 2d01 cmp r5, #1 -100180da: d13b bne.n 10018154 -100180dc: 4a29 ldr r2, [pc, #164] ; (10018184 ) -100180de: 6813 ldr r3, [r2, #0] -100180e0: f023 0310 bic.w r3, r3, #16 -100180e4: 6013 str r3, [r2, #0] -100180e6: 4d28 ldr r5, [pc, #160] ; (10018188 ) -100180e8: f8d4 35c0 ldr.w r3, [r4, #1472] ; 0x5c0 -100180ec: 4629 mov r1, r5 -100180ee: 4620 mov r0, r4 -100180f0: 4798 blx r3 -100180f2: 6aeb ldr r3, [r5, #44] ; 0x2c -100180f4: 4620 mov r0, r4 -100180f6: f884 3093 strb.w r3, [r4, #147] ; 0x93 -100180fa: f000 fe7f bl 10018dfc -100180fe: 4605 mov r5, r0 -10018100: b150 cbz r0, 10018118 -10018102: 4b1d ldr r3, [pc, #116] ; (10018178 ) -10018104: 681b ldr r3, [r3, #0] -10018106: 051b lsls r3, r3, #20 -10018108: d52e bpl.n 10018168 -1001810a: f894 1084 ldrb.w r1, [r4, #132] ; 0x84 -1001810e: 481f ldr r0, [pc, #124] ; (1001818c ) -10018110: 4b1b ldr r3, [pc, #108] ; (10018180 ) -10018112: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -10018116: 4718 bx r3 -10018118: 4b1d ldr r3, [pc, #116] ; (10018190 ) -1001811a: 4e1e ldr r6, [pc, #120] ; (10018194 ) -1001811c: 64e3 str r3, [r4, #76] ; 0x4c -1001811e: 4b1e ldr r3, [pc, #120] ; (10018198 ) -10018120: 6524 str r4, [r4, #80] ; 0x50 -10018122: 6423 str r3, [r4, #64] ; 0x40 -10018124: 4b1d ldr r3, [pc, #116] ; (1001819c ) -10018126: 6464 str r4, [r4, #68] ; 0x44 -10018128: f8c4 3598 str.w r3, [r4, #1432] ; 0x598 -1001812c: f8c4 459c str.w r4, [r4, #1436] ; 0x59c -10018130: 4630 mov r0, r6 -10018132: f000 fc17 bl 10018964 -10018136: f504 63d2 add.w r3, r4, #1680 ; 0x690 -1001813a: 60a3 str r3, [r4, #8] -1001813c: f884 5091 strb.w r5, [r4, #145] ; 0x91 -10018140: f504 63c5 add.w r3, r4, #1576 ; 0x628 -10018144: f884 5092 strb.w r5, [r4, #146] ; 0x92 -10018148: 6026 str r6, [r4, #0] -1001814a: 6063 str r3, [r4, #4] -1001814c: f8c4 561c str.w r5, [r4, #1564] ; 0x61c -10018150: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10018154: 2d00 cmp r5, #0 -10018156: d1c6 bne.n 100180e6 -10018158: 4b11 ldr r3, [pc, #68] ; (100181a0 ) -1001815a: 681b ldr r3, [r3, #0] -1001815c: 051a lsls r2, r3, #20 -1001815e: d5c2 bpl.n 100180e6 -10018160: 4b07 ldr r3, [pc, #28] ; (10018180 ) -10018162: 4810 ldr r0, [pc, #64] ; (100181a4 ) -10018164: 4798 blx r3 -10018166: e7be b.n 100180e6 -10018168: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1001816c: 0000f511 .word 0x0000f511 -10018170: 10040698 .word 0x10040698 -10018174: 1004062c .word 0x1004062c -10018178: 10000314 .word 0x10000314 -1001817c: 10040745 .word 0x10040745 -10018180: 0000f39d .word 0x0000f39d -10018184: 400000a4 .word 0x400000a4 -10018188: 10040928 .word 0x10040928 -1001818c: 100407b0 .word 0x100407b0 -10018190: 10018021 .word 0x10018021 -10018194: 1004b4fc .word 0x1004b4fc -10018198: 10018041 .word 0x10018041 -1001819c: 10018011 .word 0x10018011 -100181a0: 1000030c .word 0x1000030c -100181a4: 1004077b .word 0x1004077b - -100181a8 : -100181a8: 3901 subs r1, #1 -100181aa: b510 push {r4, lr} -100181ac: 4604 mov r4, r0 -100181ae: f880 1082 strb.w r1, [r0, #130] ; 0x82 -100181b2: 2a03 cmp r2, #3 -100181b4: d833 bhi.n 1001821e -100181b6: e8df f002 tbb [pc, r2] -100181ba: 0602 .short 0x0602 -100181bc: 322d .short 0x322d -100181be: 2200 movs r2, #0 -100181c0: f884 208c strb.w r2, [r4, #140] ; 0x8c -100181c4: e003 b.n 100181ce -100181c6: 2200 movs r2, #0 -100181c8: f880 208c strb.w r2, [r0, #140] ; 0x8c -100181cc: 2201 movs r2, #1 -100181ce: 2b01 cmp r3, #1 -100181d0: f884 208b strb.w r2, [r4, #139] ; 0x8b -100181d4: d12c bne.n 10018230 -100181d6: f894 1084 ldrb.w r1, [r4, #132] ; 0x84 -100181da: bb11 cbnz r1, 10018222 -100181dc: 4a17 ldr r2, [pc, #92] ; (1001823c ) -100181de: f884 108a strb.w r1, [r4, #138] ; 0x8a -100181e2: f884 108d strb.w r1, [r4, #141] ; 0x8d -100181e6: 7013 strb r3, [r2, #0] -100181e8: f8d4 35c8 ldr.w r3, [r4, #1480] ; 0x5c8 -100181ec: f894 108a ldrb.w r1, [r4, #138] ; 0x8a -100181f0: 4620 mov r0, r4 -100181f2: 4798 blx r3 -100181f4: f894 308a ldrb.w r3, [r4, #138] ; 0x8a -100181f8: b93b cbnz r3, 1001820a -100181fa: f894 308c ldrb.w r3, [r4, #140] ; 0x8c -100181fe: f894 0624 ldrb.w r0, [r4, #1572] ; 0x624 -10018202: b9cb cbnz r3, 10018238 -10018204: 2102 movs r1, #2 -10018206: f000 fc63 bl 10018ad0 -1001820a: 4620 mov r0, r4 -1001820c: e8bd 4010 ldmia.w sp!, {r4, lr} -10018210: f000 be32 b.w 10018e78 -10018214: 2201 movs r2, #1 -10018216: f880 208c strb.w r2, [r0, #140] ; 0x8c -1001821a: 2200 movs r2, #0 -1001821c: e7d7 b.n 100181ce -1001821e: 2201 movs r2, #1 -10018220: e7ce b.n 100181c0 -10018222: 4b07 ldr r3, [pc, #28] ; (10018240 ) -10018224: 681b ldr r3, [r3, #0] -10018226: 051b lsls r3, r3, #20 -10018228: d502 bpl.n 10018230 -1001822a: 4806 ldr r0, [pc, #24] ; (10018244 ) -1001822c: 4b06 ldr r3, [pc, #24] ; (10018248 ) -1001822e: 4798 blx r3 -10018230: 2301 movs r3, #1 -10018232: f884 308a strb.w r3, [r4, #138] ; 0x8a -10018236: e7d7 b.n 100181e8 -10018238: 2101 movs r1, #1 -1001823a: e7e4 b.n 10018206 -1001823c: 1004b4f9 .word 0x1004b4f9 -10018240: 10000314 .word 0x10000314 -10018244: 10040704 .word 0x10040704 -10018248: 0000f39d .word 0x0000f39d - -1001824c : -1001824c: f001 ba18 b.w 10019680 - -10018250 : -10018250: f8c0 1614 str.w r1, [r0, #1556] ; 0x614 -10018254: f8c0 2618 str.w r2, [r0, #1560] ; 0x618 -10018258: 4770 bx lr - ... - -1001825c : -1001825c: b570 push {r4, r5, r6, lr} -1001825e: 460d mov r5, r1 -10018260: f8d0 1620 ldr.w r1, [r0, #1568] ; 0x620 -10018264: 4604 mov r4, r0 -10018266: 0748 lsls r0, r1, #29 -10018268: 4616 mov r6, r2 -1001826a: d509 bpl.n 10018280 -1001826c: 4b16 ldr r3, [pc, #88] ; (100182c8 ) -1001826e: 681b ldr r3, [r3, #0] -10018270: 051a lsls r2, r3, #20 -10018272: d401 bmi.n 10018278 -10018274: 2001 movs r0, #1 -10018276: bd70 pop {r4, r5, r6, pc} -10018278: 4b14 ldr r3, [pc, #80] ; (100182cc ) -1001827a: 4815 ldr r0, [pc, #84] ; (100182d0 ) -1001827c: 4798 blx r3 -1001827e: e7f9 b.n 10018274 -10018280: f8d4 361c ldr.w r3, [r4, #1564] ; 0x61c -10018284: 079b lsls r3, r3, #30 -10018286: d40c bmi.n 100182a2 -10018288: 4621 mov r1, r4 -1001828a: f504 60b4 add.w r0, r4, #1440 ; 0x5a0 -1001828e: f000 fd09 bl 10018ca4 -10018292: 2800 cmp r0, #0 -10018294: d1ee bne.n 10018274 -10018296: f8d4 361c ldr.w r3, [r4, #1564] ; 0x61c -1001829a: f043 0302 orr.w r3, r3, #2 -1001829e: f8c4 361c str.w r3, [r4, #1564] ; 0x61c -100182a2: f8d4 3620 ldr.w r3, [r4, #1568] ; 0x620 -100182a6: 4632 mov r2, r6 -100182a8: f043 0304 orr.w r3, r3, #4 -100182ac: f8c4 3620 str.w r3, [r4, #1568] ; 0x620 -100182b0: 4629 mov r1, r5 -100182b2: 4620 mov r0, r4 -100182b4: f000 fd5e bl 10018d74 -100182b8: b128 cbz r0, 100182c6 -100182ba: f8d4 3620 ldr.w r3, [r4, #1568] ; 0x620 -100182be: f023 0304 bic.w r3, r3, #4 -100182c2: f8c4 3620 str.w r3, [r4, #1568] ; 0x620 -100182c6: bd70 pop {r4, r5, r6, pc} -100182c8: 1000030c .word 0x1000030c -100182cc: 0000f39d .word 0x0000f39d -100182d0: 100407e3 .word 0x100407e3 - -100182d4 : -100182d4: 2221 movs r2, #33 ; 0x21 -100182d6: b508 push {r3, lr} -100182d8: 4b06 ldr r3, [pc, #24] ; (100182f4 ) -100182da: 4807 ldr r0, [pc, #28] ; (100182f8 ) -100182dc: 601a str r2, [r3, #0] -100182de: 4b07 ldr r3, [pc, #28] ; (100182fc ) -100182e0: 4798 blx r3 -100182e2: 4907 ldr r1, [pc, #28] ; (10018300 ) -100182e4: 4b07 ldr r3, [pc, #28] ; (10018304 ) -100182e6: 680a ldr r2, [r1, #0] -100182e8: f402 62e0 and.w r2, r2, #1792 ; 0x700 -100182ec: 4313 orrs r3, r2 -100182ee: 600b str r3, [r1, #0] -100182f0: bd08 pop {r3, pc} -100182f2: bf00 nop -100182f4: 40000014 .word 0x40000014 -100182f8: 000186a0 .word 0x000186a0 -100182fc: 00000899 .word 0x00000899 -10018300: e000ed0c .word 0xe000ed0c -10018304: 05fa0004 .word 0x05fa0004 - -10018308 : -10018308: b508 push {r3, lr} -1001830a: 4b07 ldr r3, [pc, #28] ; (10018328 ) -1001830c: 2001 movs r0, #1 -1001830e: 689b ldr r3, [r3, #8] -10018310: 4798 blx r3 -10018312: 43c3 mvns r3, r0 -10018314: 4805 ldr r0, [pc, #20] ; (1001832c ) -10018316: f3c3 020b ubfx r2, r3, #0, #12 -1001831a: 4350 muls r0, r2 -1001831c: 4a04 ldr r2, [pc, #16] ; (10018330 ) -1001831e: 0b1b lsrs r3, r3, #12 -10018320: 4353 muls r3, r2 -10018322: eb03 30d0 add.w r0, r3, r0, lsr #15 -10018326: bd08 pop {r3, pc} -10018328: 10000318 .word 0x10000318 -1001832c: 000f4240 .word 0x000f4240 -10018330: 0001e848 .word 0x0001e848 - -10018334 : -10018334: b538 push {r3, r4, r5, lr} -10018336: 1e04 subs r4, r0, #0 -10018338: dd23 ble.n 10018382 -1001833a: f5b4 7fa3 cmp.w r4, #326 ; 0x146 -1001833e: dc18 bgt.n 10018372 -10018340: 4b10 ldr r3, [pc, #64] ; (10018384 ) -10018342: 681a ldr r2, [r3, #0] -10018344: f012 0201 ands.w r2, r2, #1 -10018348: d109 bne.n 1001835e -1001834a: 480f ldr r0, [pc, #60] ; (10018388 ) -1001834c: 68c1 ldr r1, [r0, #12] -1001834e: f041 7180 orr.w r1, r1, #16777216 ; 0x1000000 -10018352: 60c1 str r1, [r0, #12] -10018354: 605a str r2, [r3, #4] -10018356: 681a ldr r2, [r3, #0] -10018358: f042 0201 orr.w r2, r2, #1 -1001835c: 601a str r2, [r3, #0] -1001835e: 22a6 movs r2, #166 ; 0xa6 -10018360: 4b08 ldr r3, [pc, #32] ; (10018384 ) -10018362: 6859 ldr r1, [r3, #4] -10018364: fb02 1404 mla r4, r2, r4, r1 -10018368: 685a ldr r2, [r3, #4] -1001836a: 1aa2 subs r2, r4, r2 -1001836c: 2a00 cmp r2, #0 -1001836e: dcfb bgt.n 10018368 -10018370: bd38 pop {r3, r4, r5, pc} -10018372: f7ff ffc9 bl 10018308 -10018376: 4605 mov r5, r0 -10018378: f7ff ffc6 bl 10018308 -1001837c: 1b40 subs r0, r0, r5 -1001837e: 42a0 cmp r0, r4 -10018380: d3fa bcc.n 10018378 -10018382: bd38 pop {r3, r4, r5, pc} -10018384: e0001000 .word 0xe0001000 -10018388: e000edf0 .word 0xe000edf0 - -1001838c : -1001838c: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1001838e: 1d03 adds r3, r0, #4 -10018390: f600 75fc addw r5, r0, #4092 ; 0xffc -10018394: 2000 movs r0, #0 -10018396: f103 4418 add.w r4, r3, #2550136832 ; 0x98000000 -1001839a: 6824 ldr r4, [r4, #0] -1001839c: 9401 str r4, [sp, #4] -1001839e: 3401 adds r4, #1 -100183a0: d012 beq.n 100183c8 -100183a2: f8bd 4004 ldrh.w r4, [sp, #4] -100183a6: f5b4 7f00 cmp.w r4, #512 ; 0x200 -100183aa: d80f bhi.n 100183cc -100183ac: f8bd 7006 ldrh.w r7, [sp, #6] -100183b0: 884e ldrh r6, [r1, #2] -100183b2: 42b7 cmp r7, r6 -100183b4: d102 bne.n 100183bc -100183b6: b962 cbnz r2, 100183d2 -100183b8: 4618 mov r0, r3 -100183ba: 800c strh r4, [r1, #0] -100183bc: 3407 adds r4, #7 -100183be: f024 0403 bic.w r4, r4, #3 -100183c2: 4423 add r3, r4 -100183c4: 42ab cmp r3, r5 -100183c6: d3e6 bcc.n 10018396 -100183c8: b003 add sp, #12 -100183ca: bdf0 pop {r4, r5, r6, r7, pc} -100183cc: f503 7301 add.w r3, r3, #516 ; 0x204 -100183d0: e7f8 b.n 100183c4 -100183d2: 4618 mov r0, r3 -100183d4: e7f8 b.n 100183c8 - -100183d6 : -100183d6: b084 sub sp, #16 -100183d8: 9101 str r1, [sp, #4] -100183da: b289 uxth r1, r1 -100183dc: 3107 adds r1, #7 -100183de: 1d03 adds r3, r0, #4 -100183e0: f021 0103 bic.w r1, r1, #3 -100183e4: f500 5080 add.w r0, r0, #4096 ; 0x1000 -100183e8: 1a40 subs r0, r0, r1 -100183ea: f103 4218 add.w r2, r3, #2550136832 ; 0x98000000 -100183ee: 6812 ldr r2, [r2, #0] -100183f0: 9203 str r2, [sp, #12] -100183f2: 3201 adds r2, #1 -100183f4: d105 bne.n 10018402 -100183f6: 4283 cmp r3, r0 -100183f8: bf28 it cs -100183fa: 2300 movcs r3, #0 -100183fc: 4618 mov r0, r3 -100183fe: b004 add sp, #16 -10018400: 4770 bx lr -10018402: f8bd 200c ldrh.w r2, [sp, #12] -10018406: f5b2 7f00 cmp.w r2, #512 ; 0x200 -1001840a: bf9d ittte ls -1001840c: 3207 addls r2, #7 -1001840e: f022 0203 bicls.w r2, r2, #3 -10018412: 189b addls r3, r3, r2 -10018414: f503 7301 addhi.w r3, r3, #516 ; 0x204 -10018418: 4283 cmp r3, r0 -1001841a: d3e6 bcc.n 100183ea -1001841c: 2300 movs r3, #0 -1001841e: e7ed b.n 100183fc - -10018420 <_fwrite_word>: -10018420: f100 4018 add.w r0, r0, #2550136832 ; 0x98000000 -10018424: b508 push {r3, lr} -10018426: 6001 str r1, [r0, #0] -10018428: f026 faaa bl 1003e980 <__SpicWaitBusyDoneRtl8195A_veneer> -1001842c: 4b06 ldr r3, [pc, #24] ; (10018448 <_fwrite_word+0x28>) -1001842e: 79da ldrb r2, [r3, #7] -10018430: e893 0003 ldmia.w r3, {r0, r1} -10018434: 2a04 cmp r2, #4 -10018436: d103 bne.n 10018440 <_fwrite_word+0x20> -10018438: e8bd 4008 ldmia.w sp!, {r3, lr} -1001843c: f7ee bd32 b.w 10006ea4 -10018440: e8bd 4008 ldmia.w sp!, {r3, lr} -10018444: f7ee bc60 b.w 10006d08 -10018448: 1004b4ec .word 0x1004b4ec - -1001844c : -1001844c: b508 push {r3, lr} -1001844e: 4b16 ldr r3, [pc, #88] ; (100184a8 ) -10018450: 2800 cmp r0, #0 -10018452: bf0c ite eq -10018454: f04f 32ff moveq.w r2, #4294967295 -10018458: 2200 movne r2, #0 -1001845a: 681b ldr r3, [r3, #0] -1001845c: d10e bne.n 1001847c -1001845e: 4293 cmp r3, r2 -10018460: bf28 it cs -10018462: 4613 movcs r3, r2 -10018464: 4a11 ldr r2, [pc, #68] ; (100184ac ) -10018466: 6812 ldr r2, [r2, #0] -10018468: b170 cbz r0, 10018488 -1001846a: 429a cmp r2, r3 -1001846c: d819 bhi.n 100184a2 -1001846e: 3201 adds r2, #1 -10018470: bf14 ite ne -10018472: f44f 207e movne.w r0, #1040384 ; 0xfe000 -10018476: f44f 207f moveq.w r0, #1044480 ; 0xff000 -1001847a: bd08 pop {r3, pc} -1001847c: 429a cmp r2, r3 -1001847e: d3f1 bcc.n 10018464 -10018480: 1c59 adds r1, r3, #1 -10018482: bf18 it ne -10018484: 4613 movne r3, r2 -10018486: e7ed b.n 10018464 -10018488: 429a cmp r2, r3 -1001848a: d30a bcc.n 100184a2 -1001848c: 3301 adds r3, #1 -1001848e: d105 bne.n 1001849c -10018490: f06f 0101 mvn.w r1, #1 -10018494: f44f 207e mov.w r0, #1040384 ; 0xfe000 -10018498: f7ff ffc2 bl 10018420 <_fwrite_word> -1001849c: f44f 207e mov.w r0, #1040384 ; 0xfe000 -100184a0: bd08 pop {r3, pc} -100184a2: f44f 207f mov.w r0, #1044480 ; 0xff000 -100184a6: bd08 pop {r3, pc} -100184a8: 980fe000 .word 0x980fe000 -100184ac: 980ff000 .word 0x980ff000 - -100184b0 : -100184b0: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -100184b2: f021 0303 bic.w r3, r1, #3 -100184b6: f011 0103 ands.w r1, r1, #3 -100184ba: d020 beq.n 100184fe -100184bc: 681d ldr r5, [r3, #0] -100184be: 1d1c adds r4, r3, #4 -100184c0: ab02 add r3, sp, #8 -100184c2: f843 5d04 str.w r5, [r3, #-4]! -100184c6: 1e4d subs r5, r1, #1 -100184c8: 442b add r3, r5 -100184ca: 1a09 subs r1, r1, r0 -100184cc: b172 cbz r2, 100184ec -100184ce: 3001 adds r0, #1 -100184d0: f810 7c01 ldrb.w r7, [r0, #-1] -100184d4: f813 6f01 ldrb.w r6, [r3, #1]! -100184d8: 3a01 subs r2, #1 -100184da: 42b7 cmp r7, r6 -100184dc: eb00 0501 add.w r5, r0, r1 -100184e0: d002 beq.n 100184e8 -100184e2: 2001 movs r0, #1 -100184e4: b003 add sp, #12 -100184e6: bdf0 pop {r4, r5, r6, r7, pc} -100184e8: 076e lsls r6, r5, #29 -100184ea: d5ef bpl.n 100184cc -100184ec: f022 0303 bic.w r3, r2, #3 -100184f0: 4403 add r3, r0 -100184f2: 4298 cmp r0, r3 -100184f4: d105 bne.n 10018502 -100184f6: 0795 lsls r5, r2, #30 -100184f8: d119 bne.n 1001852e -100184fa: 2000 movs r0, #0 -100184fc: e7f2 b.n 100184e4 -100184fe: 461c mov r4, r3 -10018500: e7f4 b.n 100184ec -10018502: 7801 ldrb r1, [r0, #0] -10018504: 3004 adds r0, #4 -10018506: f88d 1004 strb.w r1, [sp, #4] -1001850a: f810 1c03 ldrb.w r1, [r0, #-3] -1001850e: f854 5b04 ldr.w r5, [r4], #4 -10018512: f88d 1005 strb.w r1, [sp, #5] -10018516: f810 1c02 ldrb.w r1, [r0, #-2] -1001851a: f88d 1006 strb.w r1, [sp, #6] -1001851e: f810 1c01 ldrb.w r1, [r0, #-1] -10018522: f88d 1007 strb.w r1, [sp, #7] -10018526: 9901 ldr r1, [sp, #4] -10018528: 428d cmp r5, r1 -1001852a: d0e2 beq.n 100184f2 -1001852c: e7d9 b.n 100184e2 -1001852e: 6823 ldr r3, [r4, #0] -10018530: 7801 ldrb r1, [r0, #0] -10018532: 9301 str r3, [sp, #4] -10018534: b2db uxtb r3, r3 -10018536: 4299 cmp r1, r3 -10018538: d1d3 bne.n 100184e2 -1001853a: 0791 lsls r1, r2, #30 -1001853c: d5dd bpl.n 100184fa -1001853e: 7841 ldrb r1, [r0, #1] -10018540: f89d 3005 ldrb.w r3, [sp, #5] -10018544: 4299 cmp r1, r3 -10018546: d1cc bne.n 100184e2 -10018548: 07d3 lsls r3, r2, #31 -1001854a: d5d6 bpl.n 100184fa -1001854c: 7880 ldrb r0, [r0, #2] -1001854e: f89d 3006 ldrb.w r3, [sp, #6] -10018552: 1ac0 subs r0, r0, r3 -10018554: bf18 it ne -10018556: 2001 movne r0, #1 -10018558: e7c4 b.n 100184e4 - ... - -1001855c : -1001855c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10018560: f5b2 7f00 cmp.w r2, #512 ; 0x200 -10018564: b089 sub sp, #36 ; 0x24 -10018566: 4683 mov fp, r0 -10018568: 460c mov r4, r1 -1001856a: 4615 mov r5, r2 -1001856c: f200 80fa bhi.w 10018764 -10018570: 2001 movs r0, #1 -10018572: f7fe fb77 bl 10016c64 -10018576: f7ff fadd bl 10017b34 -1001857a: 4b7b ldr r3, [pc, #492] ; (10018768 ) -1001857c: 781b ldrb r3, [r3, #0] -1001857e: b913 cbnz r3, 10018586 -10018580: 487a ldr r0, [pc, #488] ; (1001876c ) -10018582: f7ff fa8b bl 10017a9c -10018586: 2000 movs r0, #0 -10018588: f8ad 4016 strh.w r4, [sp, #22] -1001858c: f8ad 5014 strh.w r5, [sp, #20] -10018590: f7ff ff5c bl 1001844c -10018594: 2804 cmp r0, #4 -10018596: 4604 mov r4, r0 -10018598: d91e bls.n 100185d8 -1001859a: 2200 movs r2, #0 -1001859c: a905 add r1, sp, #20 -1001859e: f7ff fef5 bl 1001838c -100185a2: 2805 cmp r0, #5 -100185a4: d918 bls.n 100185d8 -100185a6: f8bd 3014 ldrh.w r3, [sp, #20] -100185aa: 42ab cmp r3, r5 -100185ac: d114 bne.n 100185d8 -100185ae: b13d cbz r5, 100185c0 -100185b0: f100 4118 add.w r1, r0, #2550136832 ; 0x98000000 -100185b4: 462a mov r2, r5 -100185b6: 3104 adds r1, #4 -100185b8: 4658 mov r0, fp -100185ba: f7ff ff79 bl 100184b0 -100185be: b958 cbnz r0, 100185d8 -100185c0: 43ed mvns r5, r5 -100185c2: f3c5 35c0 ubfx r5, r5, #15, #1 -100185c6: f7ee feaf bl 10007328 -100185ca: 2001 movs r0, #1 -100185cc: f7fe fb64 bl 10016c98 -100185d0: 4628 mov r0, r5 -100185d2: b009 add sp, #36 ; 0x24 -100185d4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -100185d8: f8ad 5014 strh.w r5, [sp, #20] -100185dc: 4620 mov r0, r4 -100185de: 9905 ldr r1, [sp, #20] -100185e0: f7ff fef9 bl 100183d6 -100185e4: 4604 mov r4, r0 -100185e6: 2800 cmp r0, #0 -100185e8: f040 8092 bne.w 10018710 -100185ec: 9b05 ldr r3, [sp, #20] -100185ee: 2001 movs r0, #1 -100185f0: 9306 str r3, [sp, #24] -100185f2: f8bd 3016 ldrh.w r3, [sp, #22] -100185f6: 9301 str r3, [sp, #4] -100185f8: f7ff ff28 bl 1001844c -100185fc: 2804 cmp r0, #4 -100185fe: 4604 mov r4, r0 -10018600: d930 bls.n 10018664 -10018602: 2000 movs r0, #0 -10018604: f7ff ff22 bl 1001844c -10018608: 2804 cmp r0, #4 -1001860a: 4607 mov r7, r0 -1001860c: f240 8082 bls.w 10018714 -10018610: 2081 movs r0, #129 ; 0x81 -10018612: f7fc fd8b bl 1001512c -10018616: 4681 mov r9, r0 -10018618: b940 cbnz r0, 1001862c -1001861a: 4b55 ldr r3, [pc, #340] ; (10018770 ) -1001861c: 681b ldr r3, [r3, #0] -1001861e: 025a lsls r2, r3, #9 -10018620: d502 bpl.n 10018628 -10018622: 4854 ldr r0, [pc, #336] ; (10018774 ) -10018624: 4b54 ldr r3, [pc, #336] ; (10018778 ) -10018626: 4798 blx r3 -10018628: 2405 movs r4, #5 -1001862a: e073 b.n 10018714 -1001862c: 4620 mov r0, r4 -1001862e: f7ee fe30 bl 10007292 -10018632: 1d23 adds r3, r4, #4 -10018634: f107 0a04 add.w sl, r7, #4 -10018638: 9300 str r3, [sp, #0] -1001863a: f10a 4318 add.w r3, sl, #2550136832 ; 0x98000000 -1001863e: 681b ldr r3, [r3, #0] -10018640: 9307 str r3, [sp, #28] -10018642: 3301 adds r3, #1 -10018644: d112 bne.n 1001866c -10018646: 4648 mov r0, r9 -10018648: f107 4718 add.w r7, r7, #2550136832 ; 0x98000000 -1001864c: f7fc fe0a bl 10015264 -10018650: 6839 ldr r1, [r7, #0] -10018652: 4620 mov r0, r4 -10018654: 3901 subs r1, #1 -10018656: f7ff fee3 bl 10018420 <_fwrite_word> -1001865a: 4620 mov r0, r4 -1001865c: 9906 ldr r1, [sp, #24] -1001865e: f7ff feba bl 100183d6 -10018662: 4604 mov r4, r0 -10018664: 2c00 cmp r4, #0 -10018666: d155 bne.n 10018714 -10018668: 2500 movs r5, #0 -1001866a: e7ac b.n 100185c6 -1001866c: f8bd 301c ldrh.w r3, [sp, #28] -10018670: f8bd 201e ldrh.w r2, [sp, #30] -10018674: f5b3 7f00 cmp.w r3, #512 ; 0x200 -10018678: bf98 it ls -1001867a: 1dde addls r6, r3, #7 -1001867c: 9901 ldr r1, [sp, #4] -1001867e: bf9a itte ls -10018680: f026 0603 bicls.w r6, r6, #3 -10018684: b2b6 uxthls r6, r6 -10018686: f44f 7601 movhi.w r6, #516 ; 0x204 -1001868a: 428a cmp r2, r1 -1001868c: d105 bne.n 1001869a -1001868e: 44b2 add sl, r6 -10018690: f607 73f8 addw r3, r7, #4088 ; 0xff8 -10018694: 459a cmp sl, r3 -10018696: d3d0 bcc.n 1001863a -10018698: e7d5 b.n 10018646 -1001869a: f5b3 7f00 cmp.w r3, #512 ; 0x200 -1001869e: d8f6 bhi.n 1001868e -100186a0: 2201 movs r2, #1 -100186a2: a907 add r1, sp, #28 -100186a4: 4620 mov r0, r4 -100186a6: f7ff fe71 bl 1001838c -100186aa: 4602 mov r2, r0 -100186ac: 2800 cmp r0, #0 -100186ae: d1ee bne.n 1001868e -100186b0: a907 add r1, sp, #28 -100186b2: 4638 mov r0, r7 -100186b4: f7ff fe6a bl 1001838c -100186b8: 2804 cmp r0, #4 -100186ba: 4601 mov r1, r0 -100186bc: d926 bls.n 1001870c -100186be: 9b00 ldr r3, [sp, #0] -100186c0: f504 5280 add.w r2, r4, #4096 ; 0x1000 -100186c4: 4433 add r3, r6 -100186c6: 4293 cmp r3, r2 -100186c8: d308 bcc.n 100186dc -100186ca: 4b29 ldr r3, [pc, #164] ; (10018770 ) -100186cc: 681b ldr r3, [r3, #0] -100186ce: 025b lsls r3, r3, #9 -100186d0: d502 bpl.n 100186d8 -100186d2: 482a ldr r0, [pc, #168] ; (1001877c ) -100186d4: 4b28 ldr r3, [pc, #160] ; (10018778 ) -100186d6: 4798 blx r3 -100186d8: 2404 movs r4, #4 -100186da: e01b b.n 10018714 -100186dc: 4b23 ldr r3, [pc, #140] ; (1001876c ) -100186de: 464a mov r2, r9 -100186e0: 78db ldrb r3, [r3, #3] -100186e2: 4630 mov r0, r6 -100186e4: f3c3 1301 ubfx r3, r3, #4, #2 -100186e8: f7ee f9fc bl 10006ae4 -100186ec: 08b3 lsrs r3, r6, #2 -100186ee: f1a9 0204 sub.w r2, r9, #4 -100186f2: 2b00 cmp r3, #0 -100186f4: d0cb beq.n 1001868e -100186f6: f852 1f04 ldr.w r1, [r2, #4]! -100186fa: 9800 ldr r0, [sp, #0] -100186fc: 9303 str r3, [sp, #12] -100186fe: 9202 str r2, [sp, #8] -10018700: f7ff fe8e bl 10018420 <_fwrite_word> -10018704: 9b03 ldr r3, [sp, #12] -10018706: 9a02 ldr r2, [sp, #8] -10018708: 3b01 subs r3, #1 -1001870a: e7f2 b.n 100186f2 -1001870c: 4604 mov r4, r0 -1001870e: e7a9 b.n 10018664 -10018710: 2804 cmp r0, #4 -10018712: d9a9 bls.n 10018668 -10018714: 4620 mov r0, r4 -10018716: 9905 ldr r1, [sp, #20] -10018718: f7ff fe82 bl 10018420 <_fwrite_word> -1001871c: 2700 movs r7, #0 -1001871e: 3503 adds r5, #3 -10018720: 10ad asrs r5, r5, #2 -10018722: f10b 0604 add.w r6, fp, #4 -10018726: eba4 040b sub.w r4, r4, fp -1001872a: 42bd cmp r5, r7 -1001872c: eb04 0006 add.w r0, r4, r6 -10018730: f106 0604 add.w r6, r6, #4 -10018734: d101 bne.n 1001873a -10018736: 2501 movs r5, #1 -10018738: e745 b.n 100185c6 -1001873a: f816 3c08 ldrb.w r3, [r6, #-8] -1001873e: 3701 adds r7, #1 -10018740: f363 0807 bfi r8, r3, #0, #8 -10018744: f816 3c07 ldrb.w r3, [r6, #-7] -10018748: f363 280f bfi r8, r3, #8, #8 -1001874c: f816 3c06 ldrb.w r3, [r6, #-6] -10018750: f363 4817 bfi r8, r3, #16, #8 -10018754: f816 3c05 ldrb.w r3, [r6, #-5] -10018758: f363 681f bfi r8, r3, #24, #8 -1001875c: 4641 mov r1, r8 -1001875e: f7ff fe5f bl 10018420 <_fwrite_word> -10018762: e7e2 b.n 1001872a -10018764: 2500 movs r5, #0 -10018766: e733 b.n 100185d0 -10018768: 1004b4f8 .word 0x1004b4f8 -1001876c: 1004b4ec .word 0x1004b4ec -10018770: 10000314 .word 0x10000314 -10018774: 10040825 .word 0x10040825 -10018778: 0000f39d .word 0x0000f39d -1001877c: 10040843 .word 0x10040843 - -10018780 : -10018780: f5b2 7f00 cmp.w r2, #512 ; 0x200 -10018784: b573 push {r0, r1, r4, r5, r6, lr} -10018786: 4606 mov r6, r0 -10018788: 460c mov r4, r1 -1001878a: 4615 mov r5, r2 -1001878c: d83b bhi.n 10018806 -1001878e: 2001 movs r0, #1 -10018790: f7fe fa68 bl 10016c64 -10018794: 2300 movs r3, #0 -10018796: f8ad 4006 strh.w r4, [sp, #6] -1001879a: f8ad 3004 strh.w r3, [sp, #4] -1001879e: f7ff f9c9 bl 10017b34 -100187a2: 4b1a ldr r3, [pc, #104] ; (1001880c ) -100187a4: 781b ldrb r3, [r3, #0] -100187a6: b913 cbnz r3, 100187ae -100187a8: 4819 ldr r0, [pc, #100] ; (10018810 ) -100187aa: f7ff f977 bl 10017a9c -100187ae: 2000 movs r0, #0 -100187b0: f7ff fe4c bl 1001844c -100187b4: 2804 cmp r0, #4 -100187b6: d923 bls.n 10018800 -100187b8: 2200 movs r2, #0 -100187ba: a901 add r1, sp, #4 -100187bc: f7ff fde6 bl 1001838c -100187c0: 2804 cmp r0, #4 -100187c2: d91a bls.n 100187fa -100187c4: b17d cbz r5, 100187e6 -100187c6: b176 cbz r6, 100187e6 -100187c8: 4b11 ldr r3, [pc, #68] ; (10018810 ) -100187ca: f8bd 4004 ldrh.w r4, [sp, #4] -100187ce: 78db ldrb r3, [r3, #3] -100187d0: 42ac cmp r4, r5 -100187d2: f100 0104 add.w r1, r0, #4 -100187d6: f3c3 1301 ubfx r3, r3, #4, #2 -100187da: 4620 mov r0, r4 -100187dc: 4632 mov r2, r6 -100187de: bf28 it cs -100187e0: 4628 movcs r0, r5 -100187e2: f7ee f8c5 bl 10006970 -100187e6: f9bd 4004 ldrsh.w r4, [sp, #4] -100187ea: f7ee fd9d bl 10007328 -100187ee: 2001 movs r0, #1 -100187f0: f7fe fa52 bl 10016c98 -100187f4: 4620 mov r0, r4 -100187f6: b002 add sp, #8 -100187f8: bd70 pop {r4, r5, r6, pc} -100187fa: 43c0 mvns r0, r0 -100187fc: b204 sxth r4, r0 -100187fe: e7f4 b.n 100187ea -10018800: 43c4 mvns r4, r0 -10018802: b224 sxth r4, r4 -10018804: e7f1 b.n 100187ea -10018806: f06f 0402 mvn.w r4, #2 -1001880a: e7f3 b.n 100187f4 -1001880c: 1004b4f8 .word 0x1004b4f8 -10018810: 1004b4ec .word 0x1004b4ec - -10018814 : -10018814: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10018818: 2600 movs r6, #0 -1001881a: f44f 1888 mov.w r8, #1114112 ; 0x110000 -1001881e: 4c16 ldr r4, [pc, #88] ; (10018878 ) -10018820: 4b16 ldr r3, [pc, #88] ; (1001887c ) -10018822: 4d17 ldr r5, [pc, #92] ; (10018880 ) -10018824: 6026 str r6, [r4, #0] -10018826: 2028 movs r0, #40 ; 0x28 -10018828: 6023 str r3, [r4, #0] -1001882a: 47a8 blx r5 -1001882c: 4b15 ldr r3, [pc, #84] ; (10018884 ) -1001882e: 6026 str r6, [r4, #0] -10018830: 2028 movs r0, #40 ; 0x28 -10018832: 6023 str r3, [r4, #0] -10018834: 47a8 blx r5 -10018836: 4b14 ldr r3, [pc, #80] ; (10018888 ) -10018838: 6026 str r6, [r4, #0] -1001883a: 2028 movs r0, #40 ; 0x28 -1001883c: 6023 str r3, [r4, #0] -1001883e: 47a8 blx r5 -10018840: 4b12 ldr r3, [pc, #72] ; (1001888c ) -10018842: 6026 str r6, [r4, #0] -10018844: 2028 movs r0, #40 ; 0x28 -10018846: 6023 str r3, [r4, #0] -10018848: 47a8 blx r5 -1001884a: 4f11 ldr r7, [pc, #68] ; (10018890 ) -1001884c: 6026 str r6, [r4, #0] -1001884e: 4e11 ldr r6, [pc, #68] ; (10018894 ) -10018850: f8c4 8000 str.w r8, [r4] -10018854: 2028 movs r0, #40 ; 0x28 -10018856: 47a8 blx r5 -10018858: 683b ldr r3, [r7, #0] -1001885a: f413 5f40 tst.w r3, #12288 ; 0x3000 -1001885e: d109 bne.n 10018874 -10018860: 201e movs r0, #30 -10018862: 47a8 blx r5 -10018864: 3e01 subs r6, #1 -10018866: d1f3 bne.n 10018850 -10018868: 490a ldr r1, [pc, #40] ; (10018894 ) -1001886a: 480b ldr r0, [pc, #44] ; (10018898 ) -1001886c: 4b0b ldr r3, [pc, #44] ; (1001889c ) -1001886e: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -10018872: 4718 bx r3 -10018874: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10018878: 40000274 .word 0x40000274 -1001887c: 00811500 .word 0x00811500 -10018880: 00000899 .word 0x00000899 -10018884: 008201c0 .word 0x008201c0 -10018888: 00840100 .word 0x00840100 -1001888c: 0080f980 .word 0x0080f980 -10018890: 40000278 .word 0x40000278 -10018894: 000186a1 .word 0x000186a1 -10018898: 10040865 .word 0x10040865 -1001889c: 0000f39d .word 0x0000f39d - -100188a0 : -100188a0: b5f8 push {r3, r4, r5, r6, r7, lr} -100188a2: 2464 movs r4, #100 ; 0x64 -100188a4: 4b1d ldr r3, [pc, #116] ; (1001891c ) -100188a6: 4601 mov r1, r0 -100188a8: 681b ldr r3, [r3, #0] -100188aa: 4344 muls r4, r0 -100188ac: 005b lsls r3, r3, #1 -100188ae: d502 bpl.n 100188b6 -100188b0: 481b ldr r0, [pc, #108] ; (10018920 ) -100188b2: 4b1c ldr r3, [pc, #112] ; (10018924 ) -100188b4: 4798 blx r3 -100188b6: 2200 movs r2, #0 -100188b8: f04f 37ff mov.w r7, #4294967295 -100188bc: 4615 mov r5, r2 -100188be: 4610 mov r0, r2 -100188c0: f04f 0e01 mov.w lr, #1 -100188c4: 1c56 adds r6, r2, #1 -100188c6: fa0e f306 lsl.w r3, lr, r6 -100188ca: 3b01 subs r3, #1 -100188cc: eb03 0343 add.w r3, r3, r3, lsl #1 -100188d0: fbb4 f1f3 udiv r1, r4, r3 -100188d4: fa1f fc81 uxth.w ip, r1 -100188d8: f1bc 0f00 cmp.w ip, #0 -100188dc: d008 beq.n 100188f0 -100188de: fb0c 3303 mla r3, ip, r3, r3 -100188e2: 429c cmp r4, r3 -100188e4: d204 bcs.n 100188f0 -100188e6: 42bb cmp r3, r7 -100188e8: bf3e ittt cc -100188ea: 4610 movcc r0, r2 -100188ec: 461f movcc r7, r3 -100188ee: 4665 movcc r5, ip -100188f0: 2e0c cmp r6, #12 -100188f2: 4632 mov r2, r6 -100188f4: d1e6 bne.n 100188c4 -100188f6: 2100 movs r1, #0 -100188f8: 4a0b ldr r2, [pc, #44] ; (10018928 ) -100188fa: 78d3 ldrb r3, [r2, #3] -100188fc: 8015 strh r5, [r2, #0] -100188fe: f043 0301 orr.w r3, r3, #1 -10018902: f360 0344 bfi r3, r0, #1, #4 -10018906: b2db uxtb r3, r3 -10018908: f043 0340 orr.w r3, r3, #64 ; 0x40 -1001890c: f361 13c7 bfi r3, r1, #7, #1 -10018910: 70d3 strb r3, [r2, #3] -10018912: 7091 strb r1, [r2, #2] -10018914: 6812 ldr r2, [r2, #0] -10018916: 4b05 ldr r3, [pc, #20] ; (1001892c ) -10018918: 601a str r2, [r3, #0] -1001891a: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001891c: 10000314 .word 0x10000314 -10018920: 1004087c .word 0x1004087c -10018924: 0000f39d .word 0x0000f39d -10018928: 1004b524 .word 0x1004b524 -1001892c: 40002800 .word 0x40002800 - -10018930 : -10018930: 22a5 movs r2, #165 ; 0xa5 -10018932: 4b03 ldr r3, [pc, #12] ; (10018940 ) -10018934: 709a strb r2, [r3, #2] -10018936: 681a ldr r2, [r3, #0] -10018938: 4b02 ldr r3, [pc, #8] ; (10018944 ) -1001893a: 601a str r2, [r3, #0] -1001893c: 4770 bx lr -1001893e: bf00 nop -10018940: 1004b524 .word 0x1004b524 -10018944: 40002800 .word 0x40002800 - -10018948 : -10018948: 4b04 ldr r3, [pc, #16] ; (1001895c ) -1001894a: 78da ldrb r2, [r3, #3] -1001894c: f042 0201 orr.w r2, r2, #1 -10018950: 70da strb r2, [r3, #3] -10018952: 681a ldr r2, [r3, #0] -10018954: 4b02 ldr r3, [pc, #8] ; (10018960 ) -10018956: 601a str r2, [r3, #0] -10018958: 4770 bx lr -1001895a: bf00 nop -1001895c: 1004b524 .word 0x1004b524 -10018960: 40002800 .word 0x40002800 - -10018964 : -10018964: 4b0a ldr r3, [pc, #40] ; (10018990 ) -10018966: 6003 str r3, [r0, #0] -10018968: 4b0a ldr r3, [pc, #40] ; (10018994 ) -1001896a: 6043 str r3, [r0, #4] -1001896c: 4b0a ldr r3, [pc, #40] ; (10018998 ) -1001896e: 6103 str r3, [r0, #16] -10018970: 4b0a ldr r3, [pc, #40] ; (1001899c ) -10018972: 6143 str r3, [r0, #20] -10018974: 4b0a ldr r3, [pc, #40] ; (100189a0 ) -10018976: 6083 str r3, [r0, #8] -10018978: 4b0a ldr r3, [pc, #40] ; (100189a4 ) -1001897a: 60c3 str r3, [r0, #12] -1001897c: 4b0a ldr r3, [pc, #40] ; (100189a8 ) -1001897e: 6183 str r3, [r0, #24] -10018980: 4b0a ldr r3, [pc, #40] ; (100189ac ) -10018982: 61c3 str r3, [r0, #28] -10018984: 4b0a ldr r3, [pc, #40] ; (100189b0 ) -10018986: 6203 str r3, [r0, #32] -10018988: 4b0a ldr r3, [pc, #40] ; (100189b4 ) -1001898a: 6243 str r3, [r0, #36] ; 0x24 -1001898c: 4770 bx lr -1001898e: bf00 nop -10018990: 00005df1 .word 0x00005df1 -10018994: 00005e91 .word 0x00005e91 -10018998: 00005e6d .word 0x00005e6d -1001899c: 00005e51 .word 0x00005e51 -100189a0: 00005ebd .word 0x00005ebd -100189a4: 10019065 .word 0x10019065 -100189a8: 00005e0d .word 0x00005e0d -100189ac: 00006419 .word 0x00006419 -100189b0: 000064a1 .word 0x000064a1 -100189b4: 00006501 .word 0x00006501 - -100189b8 : -100189b8: 2801 cmp r0, #1 -100189ba: b570 push {r4, r5, r6, lr} -100189bc: d81f bhi.n 100189fe -100189be: 2906 cmp r1, #6 -100189c0: d81d bhi.n 100189fe -100189c2: 2301 movs r3, #1 -100189c4: 4c10 ldr r4, [pc, #64] ; (10018a08 ) -100189c6: fa03 f101 lsl.w r1, r3, r1 -100189ca: 5c22 ldrb r2, [r4, r0] -100189cc: 4211 tst r1, r2 -100189ce: d118 bne.n 10018a02 -100189d0: b952 cbnz r2, 100189e8 -100189d2: 4d0e ldr r5, [pc, #56] ; (10018a0c ) -100189d4: 4b0e ldr r3, [pc, #56] ; (10018a10 ) -100189d6: 682e ldr r6, [r5, #0] -100189d8: b950 cbnz r0, 100189f0 -100189da: f446 3680 orr.w r6, r6, #65536 ; 0x10000 -100189de: 602e str r6, [r5, #0] -100189e0: 681d ldr r5, [r3, #0] -100189e2: f445 5500 orr.w r5, r5, #8192 ; 0x2000 -100189e6: 601d str r5, [r3, #0] -100189e8: 430a orrs r2, r1 -100189ea: 5422 strb r2, [r4, r0] -100189ec: 2000 movs r0, #0 -100189ee: bd70 pop {r4, r5, r6, pc} -100189f0: f446 2680 orr.w r6, r6, #262144 ; 0x40000 -100189f4: 602e str r6, [r5, #0] -100189f6: 681d ldr r5, [r3, #0] -100189f8: f445 4580 orr.w r5, r5, #16384 ; 0x4000 -100189fc: e7f3 b.n 100189e6 -100189fe: 2003 movs r0, #3 -10018a00: bd70 pop {r4, r5, r6, pc} -10018a02: 4618 mov r0, r3 -10018a04: bd70 pop {r4, r5, r6, pc} -10018a06: bf00 nop -10018a08: 1004b560 .word 0x1004b560 -10018a0c: 40000230 .word 0x40000230 -10018a10: 40000210 .word 0x40000210 - -10018a14 : -10018a14: 2801 cmp r0, #1 -10018a16: d816 bhi.n 10018a46 -10018a18: 2906 cmp r1, #6 -10018a1a: d814 bhi.n 10018a46 -10018a1c: 2301 movs r3, #1 -10018a1e: 4a0f ldr r2, [pc, #60] ; (10018a5c ) -10018a20: 408b lsls r3, r1 -10018a22: 5c11 ldrb r1, [r2, r0] -10018a24: ea21 0103 bic.w r1, r1, r3 -10018a28: 5411 strb r1, [r2, r0] -10018a2a: b961 cbnz r1, 10018a46 -10018a2c: 4a0c ldr r2, [pc, #48] ; (10018a60 ) -10018a2e: 4b0d ldr r3, [pc, #52] ; (10018a64 ) -10018a30: 6811 ldr r1, [r2, #0] -10018a32: b948 cbnz r0, 10018a48 -10018a34: f421 3180 bic.w r1, r1, #65536 ; 0x10000 -10018a38: 6011 str r1, [r2, #0] -10018a3a: 4a0b ldr r2, [pc, #44] ; (10018a68 ) -10018a3c: 6812 ldr r2, [r2, #0] -10018a3e: 681a ldr r2, [r3, #0] -10018a40: f422 5200 bic.w r2, r2, #8192 ; 0x2000 -10018a44: 601a str r2, [r3, #0] -10018a46: 4770 bx lr -10018a48: f421 2180 bic.w r1, r1, #262144 ; 0x40000 -10018a4c: 6011 str r1, [r2, #0] -10018a4e: 4a07 ldr r2, [pc, #28] ; (10018a6c ) -10018a50: 6812 ldr r2, [r2, #0] -10018a52: 681a ldr r2, [r3, #0] -10018a54: f422 4280 bic.w r2, r2, #16384 ; 0x4000 -10018a58: e7f4 b.n 10018a44 -10018a5a: bf00 nop -10018a5c: 1004b560 .word 0x1004b560 -10018a60: 40000230 .word 0x40000230 -10018a64: 40000210 .word 0x40000210 -10018a68: 40060000 .word 0x40060000 -10018a6c: 40061000 .word 0x40061000 - -10018a70 : -10018a70: b510 push {r4, lr} -10018a72: 4c0a ldr r4, [pc, #40] ; (10018a9c ) -10018a74: 2800 cmp r0, #0 -10018a76: bf18 it ne -10018a78: 4604 movne r4, r0 -10018a7a: 7820 ldrb r0, [r4, #0] -10018a7c: 2801 cmp r0, #1 -10018a7e: d905 bls.n 10018a8c -10018a80: 7823 ldrb r3, [r4, #0] -10018a82: 2b02 cmp r3, #2 -10018a84: bf28 it cs -10018a86: 2400 movcs r4, #0 -10018a88: 4620 mov r0, r4 -10018a8a: bd10 pop {r4, pc} -10018a8c: 7861 ldrb r1, [r4, #1] -10018a8e: f7ff ff93 bl 100189b8 -10018a92: 2800 cmp r0, #0 -10018a94: d0f4 beq.n 10018a80 -10018a96: 3404 adds r4, #4 -10018a98: e7ef b.n 10018a7a -10018a9a: bf00 nop -10018a9c: 1004088f .word 0x1004088f - -10018aa0 : -10018aa0: b51f push {r0, r1, r2, r3, r4, lr} -10018aa2: 4604 mov r4, r0 -10018aa4: 7883 ldrb r3, [r0, #2] -10018aa6: 4668 mov r0, sp -10018aa8: 9301 str r3, [sp, #4] -10018aaa: 4b05 ldr r3, [pc, #20] ; (10018ac0 ) -10018aac: 4798 blx r3 -10018aae: 4b05 ldr r3, [pc, #20] ; (10018ac4 ) -10018ab0: 4668 mov r0, sp -10018ab2: 4798 blx r3 -10018ab4: 7861 ldrb r1, [r4, #1] -10018ab6: 7820 ldrb r0, [r4, #0] -10018ab8: f7ff ffac bl 10018a14 -10018abc: b004 add sp, #16 -10018abe: bd10 pop {r4, pc} -10018ac0: 0000418d .word 0x0000418d -10018ac4: 00004091 .word 0x00004091 - -10018ac8 : -10018ac8: 4b00 ldr r3, [pc, #0] ; (10018acc ) -10018aca: 4718 bx r3 -10018acc: 0000e1c1 .word 0x0000e1c1 - -10018ad0 : -10018ad0: 2901 cmp r1, #1 -10018ad2: d004 beq.n 10018ade -10018ad4: 1e8b subs r3, r1, #2 -10018ad6: 4259 negs r1, r3 -10018ad8: 4159 adcs r1, r3 -10018ada: 4b02 ldr r3, [pc, #8] ; (10018ae4 ) -10018adc: 4718 bx r3 -10018ade: 2102 movs r1, #2 -10018ae0: e7fb b.n 10018ada -10018ae2: bf00 nop -10018ae4: 0000d39d .word 0x0000d39d - -10018ae8 : -10018ae8: 4b0a ldr r3, [pc, #40] ; (10018b14 ) -10018aea: b510 push {r4, lr} -10018aec: 681a ldr r2, [r3, #0] -10018aee: 4604 mov r4, r0 -10018af0: b90a cbnz r2, 10018af6 -10018af2: 4a09 ldr r2, [pc, #36] ; (10018b18 ) -10018af4: 601a str r2, [r3, #0] -10018af6: 6860 ldr r0, [r4, #4] -10018af8: 4b08 ldr r3, [pc, #32] ; (10018b1c ) -10018afa: f000 011f and.w r1, r0, #31 -10018afe: f3c0 1041 ubfx r0, r0, #5, #2 -10018b02: 4798 blx r3 -10018b04: 4b06 ldr r3, [pc, #24] ; (10018b20 ) -10018b06: 2100 movs r1, #0 -10018b08: 4798 blx r3 -10018b0a: 4620 mov r0, r4 -10018b0c: e8bd 4010 ldmia.w sp!, {r4, lr} -10018b10: 4b04 ldr r3, [pc, #16] ; (10018b24 ) -10018b12: 4718 bx r3 -10018b14: 10000354 .word 0x10000354 -10018b18: 1004b564 .word 0x1004b564 -10018b1c: 0000d331 .word 0x0000d331 -10018b20: 0000d39d .word 0x0000d39d -10018b24: 0000d805 .word 0x0000d805 - -10018b28 : -10018b28: 4b1d ldr r3, [pc, #116] ; (10018ba0 ) -10018b2a: 6003 str r3, [r0, #0] -10018b2c: 4b1d ldr r3, [pc, #116] ; (10018ba4 ) -10018b2e: 6043 str r3, [r0, #4] -10018b30: 4b1d ldr r3, [pc, #116] ; (10018ba8 ) -10018b32: 6083 str r3, [r0, #8] -10018b34: 4b1d ldr r3, [pc, #116] ; (10018bac ) -10018b36: 60c3 str r3, [r0, #12] -10018b38: 4b1d ldr r3, [pc, #116] ; (10018bb0 ) -10018b3a: 6103 str r3, [r0, #16] -10018b3c: 4b1d ldr r3, [pc, #116] ; (10018bb4 ) -10018b3e: 6143 str r3, [r0, #20] -10018b40: 4b1d ldr r3, [pc, #116] ; (10018bb8 ) -10018b42: 6183 str r3, [r0, #24] -10018b44: 4b1d ldr r3, [pc, #116] ; (10018bbc ) -10018b46: 61c3 str r3, [r0, #28] -10018b48: 4b1d ldr r3, [pc, #116] ; (10018bc0 ) -10018b4a: 6683 str r3, [r0, #104] ; 0x68 -10018b4c: 4b1d ldr r3, [pc, #116] ; (10018bc4 ) -10018b4e: 6583 str r3, [r0, #88] ; 0x58 -10018b50: 4b1d ldr r3, [pc, #116] ; (10018bc8 ) -10018b52: 65c3 str r3, [r0, #92] ; 0x5c -10018b54: 4b1d ldr r3, [pc, #116] ; (10018bcc ) -10018b56: 6603 str r3, [r0, #96] ; 0x60 -10018b58: 4b1d ldr r3, [pc, #116] ; (10018bd0 ) -10018b5a: 6643 str r3, [r0, #100] ; 0x64 -10018b5c: 4b1d ldr r3, [pc, #116] ; (10018bd4 ) -10018b5e: 6203 str r3, [r0, #32] -10018b60: 4b1d ldr r3, [pc, #116] ; (10018bd8 ) -10018b62: 6243 str r3, [r0, #36] ; 0x24 -10018b64: 4b1d ldr r3, [pc, #116] ; (10018bdc ) -10018b66: 6543 str r3, [r0, #84] ; 0x54 -10018b68: 4b1d ldr r3, [pc, #116] ; (10018be0 ) -10018b6a: 6283 str r3, [r0, #40] ; 0x28 -10018b6c: 4b1d ldr r3, [pc, #116] ; (10018be4 ) -10018b6e: 6503 str r3, [r0, #80] ; 0x50 -10018b70: 4b1d ldr r3, [pc, #116] ; (10018be8 ) -10018b72: 64c3 str r3, [r0, #76] ; 0x4c -10018b74: 4b1d ldr r3, [pc, #116] ; (10018bec ) -10018b76: 6483 str r3, [r0, #72] ; 0x48 -10018b78: 4b1d ldr r3, [pc, #116] ; (10018bf0 ) -10018b7a: 62c3 str r3, [r0, #44] ; 0x2c -10018b7c: 4b1d ldr r3, [pc, #116] ; (10018bf4 ) -10018b7e: 6303 str r3, [r0, #48] ; 0x30 -10018b80: 4b1d ldr r3, [pc, #116] ; (10018bf8 ) -10018b82: 6343 str r3, [r0, #52] ; 0x34 -10018b84: 4b1d ldr r3, [pc, #116] ; (10018bfc ) -10018b86: 6383 str r3, [r0, #56] ; 0x38 -10018b88: 4b1d ldr r3, [pc, #116] ; (10018c00 ) -10018b8a: 63c3 str r3, [r0, #60] ; 0x3c -10018b8c: 4b1d ldr r3, [pc, #116] ; (10018c04 ) -10018b8e: 6403 str r3, [r0, #64] ; 0x40 -10018b90: 4b1d ldr r3, [pc, #116] ; (10018c08 ) -10018b92: 66c3 str r3, [r0, #108] ; 0x6c -10018b94: 4b1d ldr r3, [pc, #116] ; (10018c0c ) -10018b96: 6703 str r3, [r0, #112] ; 0x70 -10018b98: 4b1d ldr r3, [pc, #116] ; (10018c10 ) -10018b9a: 6443 str r3, [r0, #68] ; 0x44 -10018b9c: 4770 bx lr -10018b9e: bf00 nop -10018ba0: 100192e9 .word 0x100192e9 -10018ba4: 10019521 .word 0x10019521 -10018ba8: 00007e45 .word 0x00007e45 -10018bac: 00007ef9 .word 0x00007ef9 -10018bb0: 100193a1 .word 0x100193a1 -10018bb4: 0000863d .word 0x0000863d -10018bb8: 00008715 .word 0x00008715 -10018bbc: 000087e9 .word 0x000087e9 -10018bc0: 000089b9 .word 0x000089b9 -10018bc4: 00008a2d .word 0x00008a2d -10018bc8: 00008aa5 .word 0x00008aa5 -10018bcc: 00008b1d .word 0x00008b1d -10018bd0: 000090d9 .word 0x000090d9 -10018bd4: 00007fad .word 0x00007fad -10018bd8: 00008521 .word 0x00008521 -10018bdc: 000085c9 .word 0x000085c9 -10018be0: 00008861 .word 0x00008861 -10018be4: 00008b91 .word 0x00008b91 -10018be8: 00008c09 .word 0x00008c09 -10018bec: 00008c81 .word 0x00008c81 -10018bf0: 0000914d .word 0x0000914d -10018bf4: 00009299 .word 0x00009299 -10018bf8: 10019745 .word 0x10019745 -10018bfc: 000088c9 .word 0x000088c9 -10018c00: 00008941 .word 0x00008941 -10018c04: 10019a71 .word 0x10019a71 -10018c08: 000093e9 .word 0x000093e9 -10018c0c: 0000945d .word 0x0000945d -10018c10: 00009009 .word 0x00009009 - -10018c14 : -10018c14: b570 push {r4, r5, r6, lr} -10018c16: f890 6091 ldrb.w r6, [r0, #145] ; 0x91 -10018c1a: 4604 mov r4, r0 -10018c1c: 2e00 cmp r6, #0 -10018c1e: d133 bne.n 10018c88 -10018c20: 6845 ldr r5, [r0, #4] -10018c22: f895 1061 ldrb.w r1, [r5, #97] ; 0x61 -10018c26: f895 0062 ldrb.w r0, [r5, #98] ; 0x62 -10018c2a: f7ff fec5 bl 100189b8 -10018c2e: b1e8 cbz r0, 10018c6c -10018c30: f894 3084 ldrb.w r3, [r4, #132] ; 0x84 -10018c34: 2b02 cmp r3, #2 -10018c36: bf0c ite eq -10018c38: 4814 ldreq r0, [pc, #80] ; (10018c8c ) -10018c3a: 4630 movne r0, r6 -10018c3c: f7ff ff18 bl 10018a70 -10018c40: b940 cbnz r0, 10018c54 -10018c42: 4b13 ldr r3, [pc, #76] ; (10018c90 ) -10018c44: 681b ldr r3, [r3, #0] -10018c46: 051b lsls r3, r3, #20 -10018c48: d502 bpl.n 10018c50 -10018c4a: 4812 ldr r0, [pc, #72] ; (10018c94 ) -10018c4c: 4b12 ldr r3, [pc, #72] ; (10018c98 ) -10018c4e: 4798 blx r3 -10018c50: 2001 movs r0, #1 -10018c52: bd70 pop {r4, r5, r6, pc} -10018c54: 7803 ldrb r3, [r0, #0] -10018c56: f885 3062 strb.w r3, [r5, #98] ; 0x62 -10018c5a: f240 1301 movw r3, #257 ; 0x101 -10018c5e: 7842 ldrb r2, [r0, #1] -10018c60: 4093 lsls r3, r2 -10018c62: f885 2061 strb.w r2, [r5, #97] ; 0x61 -10018c66: 60ab str r3, [r5, #8] -10018c68: 7883 ldrb r3, [r0, #2] -10018c6a: 6263 str r3, [r4, #36] ; 0x24 -10018c6c: 2301 movs r3, #1 -10018c6e: f104 0520 add.w r5, r4, #32 -10018c72: f884 3091 strb.w r3, [r4, #145] ; 0x91 -10018c76: 4628 mov r0, r5 -10018c78: 4b08 ldr r3, [pc, #32] ; (10018c9c ) -10018c7a: 4798 blx r3 -10018c7c: 4628 mov r0, r5 -10018c7e: 4b08 ldr r3, [pc, #32] ; (10018ca0 ) -10018c80: 4798 blx r3 -10018c82: 4620 mov r0, r4 -10018c84: f000 ffa8 bl 10019bd8 -10018c88: 2000 movs r0, #0 -10018c8a: bd70 pop {r4, r5, r6, pc} -10018c8c: 10040978 .word 0x10040978 -10018c90: 10000314 .word 0x10000314 -10018c94: 10040904 .word 0x10040904 -10018c98: 0000f39d .word 0x0000f39d -10018c9c: 00004029 .word 0x00004029 -10018ca0: 000040f1 .word 0x000040f1 - -10018ca4 : -10018ca4: b508 push {r3, lr} -10018ca6: b128 cbz r0, 10018cb4 -10018ca8: b121 cbz r1, 10018cb4 -10018caa: 4608 mov r0, r1 -10018cac: f000 ff0a bl 10019ac4 -10018cb0: 2000 movs r0, #0 -10018cb2: bd08 pop {r3, pc} -10018cb4: 2003 movs r0, #3 -10018cb6: bd08 pop {r3, pc} - -10018cb8 : -10018cb8: b513 push {r0, r1, r4, lr} -10018cba: 4604 mov r4, r0 -10018cbc: b188 cbz r0, 10018ce2 -10018cbe: 6843 ldr r3, [r0, #4] -10018cc0: f893 2062 ldrb.w r2, [r3, #98] ; 0x62 -10018cc4: f893 3061 ldrb.w r3, [r3, #97] ; 0x61 -10018cc8: f88d 2004 strb.w r2, [sp, #4] -10018ccc: f88d 3005 strb.w r3, [sp, #5] -10018cd0: 6a43 ldr r3, [r0, #36] ; 0x24 -10018cd2: a801 add r0, sp, #4 -10018cd4: f88d 3006 strb.w r3, [sp, #6] -10018cd8: f7ff fee2 bl 10018aa0 -10018cdc: 2300 movs r3, #0 -10018cde: f884 3091 strb.w r3, [r4, #145] ; 0x91 -10018ce2: b002 add sp, #8 -10018ce4: bd10 pop {r4, pc} - ... - -10018ce8 : -10018ce8: b570 push {r4, r5, r6, lr} -10018cea: f890 3091 ldrb.w r3, [r0, #145] ; 0x91 -10018cee: 4605 mov r5, r0 -10018cf0: 2b01 cmp r3, #1 -10018cf2: 6846 ldr r6, [r0, #4] -10018cf4: d106 bne.n 10018d04 -10018cf6: f896 3061 ldrb.w r3, [r6, #97] ; 0x61 -10018cfa: 3b04 subs r3, #4 -10018cfc: 2b01 cmp r3, #1 -10018cfe: d901 bls.n 10018d04 -10018d00: f7ff ffda bl 10018cb8 -10018d04: f895 4091 ldrb.w r4, [r5, #145] ; 0x91 -10018d08: bb34 cbnz r4, 10018d58 -10018d0a: 4814 ldr r0, [pc, #80] ; (10018d5c ) -10018d0c: f7ff feb0 bl 10018a70 -10018d10: b940 cbnz r0, 10018d24 -10018d12: 4b13 ldr r3, [pc, #76] ; (10018d60 ) -10018d14: 681b ldr r3, [r3, #0] -10018d16: 051b lsls r3, r3, #20 -10018d18: d502 bpl.n 10018d20 -10018d1a: 4812 ldr r0, [pc, #72] ; (10018d64 ) -10018d1c: 4b12 ldr r3, [pc, #72] ; (10018d68 ) -10018d1e: 4798 blx r3 -10018d20: 2001 movs r0, #1 -10018d22: bd70 pop {r4, r5, r6, pc} -10018d24: 7803 ldrb r3, [r0, #0] -10018d26: f886 3062 strb.w r3, [r6, #98] ; 0x62 -10018d2a: f240 1301 movw r3, #257 ; 0x101 -10018d2e: 7842 ldrb r2, [r0, #1] -10018d30: 4093 lsls r3, r2 -10018d32: f886 2061 strb.w r2, [r6, #97] ; 0x61 -10018d36: 60b3 str r3, [r6, #8] -10018d38: 7883 ldrb r3, [r0, #2] -10018d3a: f105 0620 add.w r6, r5, #32 -10018d3e: 626b str r3, [r5, #36] ; 0x24 -10018d40: 2301 movs r3, #1 -10018d42: 4630 mov r0, r6 -10018d44: f885 3091 strb.w r3, [r5, #145] ; 0x91 -10018d48: 4b08 ldr r3, [pc, #32] ; (10018d6c ) -10018d4a: 4798 blx r3 -10018d4c: 4630 mov r0, r6 -10018d4e: 4b08 ldr r3, [pc, #32] ; (10018d70 ) -10018d50: 4798 blx r3 -10018d52: 4628 mov r0, r5 -10018d54: f000 ff40 bl 10019bd8 -10018d58: 2000 movs r0, #0 -10018d5a: bd70 pop {r4, r5, r6, pc} -10018d5c: 10040994 .word 0x10040994 -10018d60: 10000314 .word 0x10000314 -10018d64: 10040904 .word 0x10040904 -10018d68: 0000f39d .word 0x0000f39d -10018d6c: 00004029 .word 0x00004029 -10018d70: 000040f1 .word 0x000040f1 - -10018d74 : -10018d74: b570 push {r4, r5, r6, lr} -10018d76: 6844 ldr r4, [r0, #4] -10018d78: 4605 mov r5, r0 -10018d7a: 460e mov r6, r1 -10018d7c: f000 ffc0 bl 10019d00 -10018d80: f640 73fc movw r3, #4092 ; 0xffc -10018d84: 8d62 ldrh r2, [r4, #42] ; 0x2a -10018d86: 429a cmp r2, r3 -10018d88: d91a bls.n 10018dc0 -10018d8a: 4631 mov r1, r6 -10018d8c: 4628 mov r0, r5 -10018d8e: f001 f801 bl 10019d94 -10018d92: 4628 mov r0, r5 -10018d94: f7ff ffa8 bl 10018ce8 -10018d98: 682d ldr r5, [r5, #0] -10018d9a: 4620 mov r0, r4 -10018d9c: 682b ldr r3, [r5, #0] -10018d9e: 4798 blx r3 -10018da0: 69ab ldr r3, [r5, #24] -10018da2: 4620 mov r0, r4 -10018da4: 4798 blx r3 -10018da6: f894 3063 ldrb.w r3, [r4, #99] ; 0x63 -10018daa: 4620 mov r0, r4 -10018dac: 075b lsls r3, r3, #29 -10018dae: bf4c ite mi -10018db0: 68eb ldrmi r3, [r5, #12] -10018db2: 68ab ldrpl r3, [r5, #8] -10018db4: 4798 blx r3 -10018db6: 4620 mov r0, r4 -10018db8: 696b ldr r3, [r5, #20] -10018dba: 4798 blx r3 -10018dbc: 2000 movs r0, #0 -10018dbe: bd70 pop {r4, r5, r6, pc} -10018dc0: 6026 str r6, [r4, #0] -10018dc2: 4628 mov r0, r5 -10018dc4: f7ff ff26 bl 10018c14 -10018dc8: f894 3063 ldrb.w r3, [r4, #99] ; 0x63 -10018dcc: f003 030f and.w r3, r3, #15 -10018dd0: f36f 0382 bfc r3, #2, #1 -10018dd4: f884 3063 strb.w r3, [r4, #99] ; 0x63 -10018dd8: f894 3028 ldrb.w r3, [r4, #40] ; 0x28 -10018ddc: f003 03ef and.w r3, r3, #239 ; 0xef -10018de0: f36f 03c3 bfc r3, #3, #1 -10018de4: f884 3028 strb.w r3, [r4, #40] ; 0x28 -10018de8: f894 303d ldrb.w r3, [r4, #61] ; 0x3d -10018dec: f003 03fd and.w r3, r3, #253 ; 0xfd -10018df0: f36f 0300 bfc r3, #0, #1 -10018df4: f884 303d strb.w r3, [r4, #61] ; 0x3d -10018df8: e7ce b.n 10018d98 - ... - -10018dfc : -10018dfc: b537 push {r0, r1, r2, r4, r5, lr} -10018dfe: f890 3084 ldrb.w r3, [r0, #132] ; 0x84 -10018e02: 4605 mov r5, r0 -10018e04: 2b01 cmp r3, #1 -10018e06: f890 4089 ldrb.w r4, [r0, #137] ; 0x89 -10018e0a: d00b beq.n 10018e24 -10018e0c: d308 bcc.n 10018e20 -10018e0e: 2b02 cmp r3, #2 -10018e10: d016 beq.n 10018e40 -10018e12: 4b15 ldr r3, [pc, #84] ; (10018e68 ) -10018e14: 681b ldr r3, [r3, #0] -10018e16: 051a lsls r2, r3, #20 -10018e18: d502 bpl.n 10018e20 -10018e1a: 4814 ldr r0, [pc, #80] ; (10018e6c ) -10018e1c: 4b14 ldr r3, [pc, #80] ; (10018e70 ) -10018e1e: 4798 blx r3 -10018e20: 2008 movs r0, #8 -10018e22: e000 b.n 10018e26 -10018e24: 2009 movs r0, #9 -10018e26: 4621 mov r1, r4 -10018e28: f001 fde6 bl 1001a9f8 -10018e2c: b950 cbnz r0, 10018e44 -10018e2e: 4b0e ldr r3, [pc, #56] ; (10018e68 ) -10018e30: 681b ldr r3, [r3, #0] -10018e32: 051b lsls r3, r3, #20 -10018e34: d502 bpl.n 10018e3c -10018e36: 480f ldr r0, [pc, #60] ; (10018e74 ) -10018e38: 4b0d ldr r3, [pc, #52] ; (10018e70 ) -10018e3a: 4798 blx r3 -10018e3c: 2403 movs r4, #3 -10018e3e: e010 b.n 10018e62 -10018e40: 200a movs r0, #10 -10018e42: e7f0 b.n 10018e26 -10018e44: 4628 mov r0, r5 -10018e46: f000 faab bl 100193a0 -10018e4a: 4604 mov r4, r0 -10018e4c: b948 cbnz r0, 10018e62 -10018e4e: f895 3084 ldrb.w r3, [r5, #132] ; 0x84 -10018e52: f88d 0005 strb.w r0, [sp, #5] -10018e56: 3308 adds r3, #8 -10018e58: f88d 3004 strb.w r3, [sp, #4] -10018e5c: 9801 ldr r0, [sp, #4] -10018e5e: f001 fc41 bl 1001a6e4 -10018e62: 4620 mov r0, r4 -10018e64: b003 add sp, #12 -10018e66: bd30 pop {r4, r5, pc} -10018e68: 10000314 .word 0x10000314 -10018e6c: 100408c3 .word 0x100408c3 -10018e70: 0000f39d .word 0x0000f39d -10018e74: 100408e1 .word 0x100408e1 - -10018e78 : -10018e78: f000 bbba b.w 100195f0 - -10018e7c : -10018e7c: 4b07 ldr r3, [pc, #28] ; (10018e9c ) -10018e7e: 6003 str r3, [r0, #0] -10018e80: 4b07 ldr r3, [pc, #28] ; (10018ea0 ) -10018e82: 6043 str r3, [r0, #4] -10018e84: 4b07 ldr r3, [pc, #28] ; (10018ea4 ) -10018e86: 6083 str r3, [r0, #8] -10018e88: 4b07 ldr r3, [pc, #28] ; (10018ea8 ) -10018e8a: 60c3 str r3, [r0, #12] -10018e8c: 4b07 ldr r3, [pc, #28] ; (10018eac ) -10018e8e: 6103 str r3, [r0, #16] -10018e90: 4b07 ldr r3, [pc, #28] ; (10018eb0 ) -10018e92: 6143 str r3, [r0, #20] -10018e94: 4b07 ldr r3, [pc, #28] ; (10018eb4 ) -10018e96: 6183 str r3, [r0, #24] -10018e98: 4770 bx lr -10018e9a: bf00 nop -10018e9c: 0000ef09 .word 0x0000ef09 -10018ea0: 1001a02d .word 0x1001a02d -10018ea4: 10019fe1 .word 0x10019fe1 -10018ea8: 0000f0bd .word 0x0000f0bd -10018eac: 1001a121 .word 0x1001a121 -10018eb0: 1001a10d .word 0x1001a10d -10018eb4: 0000f0d1 .word 0x0000f0d1 - -10018eb8 : -10018eb8: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10018ebc: 4d2e ldr r5, [pc, #184] ; (10018f78 ) -10018ebe: f8df 90cc ldr.w r9, [pc, #204] ; 10018f8c -10018ec2: 2400 movs r4, #0 -10018ec4: 46a8 mov r8, r5 -10018ec6: 464f mov r7, r9 -10018ec8: 6806 ldr r6, [r0, #0] -10018eca: 6004 str r4, [r0, #0] -10018ecc: f8d9 3000 ldr.w r3, [r9] -10018ed0: 429c cmp r4, r3 -10018ed2: d33e bcc.n 10018f52 -10018ed4: f7ff fa18 bl 10018308 -10018ed8: f8df 80b4 ldr.w r8, [pc, #180] ; 10018f90 -10018edc: 4604 mov r4, r0 -10018ede: 4a27 ldr r2, [pc, #156] ; (10018f7c ) -10018ee0: 4827 ldr r0, [pc, #156] ; (10018f80 ) -10018ee2: f8d8 9000 ldr.w r9, [r8] -10018ee6: 2300 movs r3, #0 -10018ee8: 7812 ldrb r2, [r2, #0] -10018eea: 4631 mov r1, r6 -10018eec: 6800 ldr r0, [r0, #0] -10018eee: f7ff f875 bl 10017fdc -10018ef2: f8c8 9000 str.w r9, [r8] -10018ef6: f7ff fa07 bl 10018308 -10018efa: 4284 cmp r4, r0 -10018efc: bf34 ite cc -10018efe: 1b04 subcc r4, r0, r4 -10018f00: f100 33ff addcs.w r3, r0, #4294967295 -10018f04: f44f 707a mov.w r0, #1000 ; 0x3e8 -10018f08: 491e ldr r1, [pc, #120] ; (10018f84 ) -10018f0a: fb00 f206 mul.w r2, r0, r6 -10018f0e: bf28 it cs -10018f10: 1b1c subcs r4, r3, r4 -10018f12: 680b ldr r3, [r1, #0] -10018f14: 4423 add r3, r4 -10018f16: 4293 cmp r3, r2 -10018f18: bf9c itt ls -10018f1a: fbb3 f2f0 udivls r2, r3, r0 -10018f1e: fb00 3212 mlsls r2, r0, r2, r3 -10018f22: f44f 747a mov.w r4, #1000 ; 0x3e8 -10018f26: bf9c itt ls -10018f28: 600a strls r2, [r1, #0] -10018f2a: 461a movls r2, r3 -10018f2c: fbb2 f4f4 udiv r4, r2, r4 -10018f30: bf88 it hi -10018f32: 1a9b subhi r3, r3, r2 -10018f34: 4620 mov r0, r4 -10018f36: bf88 it hi -10018f38: 600b strhi r3, [r1, #0] -10018f3a: f7fd f97f bl 1001623c -10018f3e: 4b12 ldr r3, [pc, #72] ; (10018f88 ) -10018f40: 681a ldr r2, [r3, #0] -10018f42: 4422 add r2, r4 -10018f44: 2400 movs r4, #0 -10018f46: 601a str r2, [r3, #0] -10018f48: 683b ldr r3, [r7, #0] -10018f4a: 429c cmp r4, r3 -10018f4c: d30c bcc.n 10018f68 -10018f4e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -10018f52: f8d8 3004 ldr.w r3, [r8, #4] -10018f56: b11b cbz r3, 10018f60 -10018f58: f8d8 1008 ldr.w r1, [r8, #8] -10018f5c: 4630 mov r0, r6 -10018f5e: 4798 blx r3 -10018f60: 3401 adds r4, #1 -10018f62: f108 0814 add.w r8, r8, #20 -10018f66: e7b1 b.n 10018ecc -10018f68: 68eb ldr r3, [r5, #12] -10018f6a: b113 cbz r3, 10018f72 -10018f6c: 6929 ldr r1, [r5, #16] -10018f6e: 4630 mov r0, r6 -10018f70: 4798 blx r3 -10018f72: 3401 adds r4, #1 -10018f74: 3514 adds r5, #20 -10018f76: e7e7 b.n 10018f48 -10018f78: 1004b798 .word 0x1004b798 -10018f7c: 1004b838 .word 0x1004b838 -10018f80: 10044ebc .word 0x10044ebc -10018f84: 1004b790 .word 0x1004b790 -10018f88: 1004b83c .word 0x1004b83c -10018f8c: 1004b794 .word 0x1004b794 -10018f90: e000e018 .word 0xe000e018 - -10018f94 : -10018f94: f44f 717a mov.w r1, #1000 ; 0x3e8 -10018f98: 4a05 ldr r2, [pc, #20] ; (10018fb0 ) -10018f9a: 4b06 ldr r3, [pc, #24] ; (10018fb4 ) -10018f9c: 6812 ldr r2, [r2, #0] -10018f9e: 681b ldr r3, [r3, #0] -10018fa0: fbb2 f2f1 udiv r2, r2, r1 -10018fa4: fbb3 f3f2 udiv r3, r3, r2 -10018fa8: 3301 adds r3, #1 -10018faa: 6003 str r3, [r0, #0] -10018fac: 4770 bx lr -10018fae: bf00 nop -10018fb0: 10044ce0 .word 0x10044ce0 -10018fb4: e000e018 .word 0xe000e018 - -10018fb8 : -10018fb8: 4b02 ldr r3, [pc, #8] ; (10018fc4 ) -10018fba: 6818 ldr r0, [r3, #0] -10018fbc: fab0 f080 clz r0, r0 -10018fc0: 0940 lsrs r0, r0, #5 -10018fc2: 4770 bx lr -10018fc4: 10044eb8 .word 0x10044eb8 - -10018fc8 : -10018fc8: 4a0c ldr r2, [pc, #48] ; (10018ffc ) -10018fca: b570 push {r4, r5, r6, lr} -10018fcc: 6813 ldr r3, [r2, #0] -10018fce: 4604 mov r4, r0 -10018fd0: 4303 orrs r3, r0 -10018fd2: 6013 str r3, [r2, #0] -10018fd4: f7fc fb2a bl 1001562c -10018fd8: 2300 movs r3, #0 -10018fda: 2201 movs r2, #1 -10018fdc: 4908 ldr r1, [pc, #32] ; (10019000 ) -10018fde: 4d09 ldr r5, [pc, #36] ; (10019004 ) -10018fe0: fa02 f603 lsl.w r6, r2, r3 -10018fe4: 4226 tst r6, r4 -10018fe6: d004 beq.n 10018ff2 -10018fe8: 5c5e ldrb r6, [r3, r1] -10018fea: b916 cbnz r6, 10018ff2 -10018fec: f845 0023 str.w r0, [r5, r3, lsl #2] -10018ff0: 545a strb r2, [r3, r1] -10018ff2: 3301 adds r3, #1 -10018ff4: 2b20 cmp r3, #32 -10018ff6: d1f3 bne.n 10018fe0 -10018ff8: bd70 pop {r4, r5, r6, pc} -10018ffa: bf00 nop -10018ffc: 10044eb8 .word 0x10044eb8 -10019000: 10044e98 .word 0x10044e98 -10019004: 1004b710 .word 0x1004b710 - -10019008 : -10019008: 4a12 ldr r2, [pc, #72] ; (10019054 ) -1001900a: b5f8 push {r3, r4, r5, r6, r7, lr} -1001900c: 6813 ldr r3, [r2, #0] -1001900e: 4604 mov r4, r0 -10019010: ea23 0300 bic.w r3, r3, r0 -10019014: 6013 str r3, [r2, #0] -10019016: f7fc fb09 bl 1001562c -1001901a: 2300 movs r3, #0 -1001901c: f04f 0e01 mov.w lr, #1 -10019020: 469c mov ip, r3 -10019022: 490d ldr r1, [pc, #52] ; (10019058 ) -10019024: 4d0d ldr r5, [pc, #52] ; (1001905c ) -10019026: 4f0e ldr r7, [pc, #56] ; (10019060 ) -10019028: fa0e f203 lsl.w r2, lr, r3 -1001902c: 4222 tst r2, r4 -1001902e: d00c beq.n 1001904a -10019030: 5c5a ldrb r2, [r3, r1] -10019032: 2a01 cmp r2, #1 -10019034: d109 bne.n 1001904a -10019036: f855 2023 ldr.w r2, [r5, r3, lsl #2] -1001903a: f857 6023 ldr.w r6, [r7, r3, lsl #2] -1001903e: 4402 add r2, r0 -10019040: 1b92 subs r2, r2, r6 -10019042: f845 2023 str.w r2, [r5, r3, lsl #2] -10019046: f803 c001 strb.w ip, [r3, r1] -1001904a: 3301 adds r3, #1 -1001904c: 2b20 cmp r3, #32 -1001904e: d1eb bne.n 10019028 -10019050: bdf8 pop {r3, r4, r5, r6, r7, pc} -10019052: bf00 nop -10019054: 10044eb8 .word 0x10044eb8 -10019058: 10044e98 .word 0x10044e98 -1001905c: 1004b690 .word 0x1004b690 -10019060: 1004b710 .word 0x1004b710 - -10019064 : -10019064: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10019068: f890 b062 ldrb.w fp, [r0, #98] ; 0x62 -1001906c: 6d03 ldr r3, [r0, #80] ; 0x50 -1001906e: f50b 2b80 add.w fp, fp, #262144 ; 0x40000 -10019072: f8d3 9000 ldr.w r9, [r3] -10019076: f8d3 8004 ldr.w r8, [r3, #4] -1001907a: f10b 0b60 add.w fp, fp, #96 ; 0x60 -1001907e: 6d43 ldr r3, [r0, #84] ; 0x54 -10019080: b085 sub sp, #20 -10019082: ea4f 350b mov.w r5, fp, lsl #12 -10019086: 6886 ldr r6, [r0, #8] -10019088: 9301 str r3, [sp, #4] -1001908a: f8d5 33a0 ldr.w r3, [r5, #928] ; 0x3a0 -1001908e: 4604 mov r4, r0 -10019090: 421e tst r6, r3 -10019092: f8d0 a04c ldr.w sl, [r0, #76] ; 0x4c -10019096: f890 7061 ldrb.w r7, [r0, #97] ; 0x61 -1001909a: d009 beq.n 100190b0 -1001909c: 4b8b ldr r3, [pc, #556] ; (100192cc ) -1001909e: 681b ldr r3, [r3, #0] -100190a0: 079b lsls r3, r3, #30 -100190a2: d502 bpl.n 100190aa -100190a4: 488a ldr r0, [pc, #552] ; (100192d0 ) -100190a6: 4b8b ldr r3, [pc, #556] ; (100192d4 ) -100190a8: 4798 blx r3 -100190aa: 4620 mov r0, r4 -100190ac: f025 fc48 bl 1003e940 <__HalGdmaChDisRtl8195a_veneer> -100190b0: ea4f 2b4b mov.w fp, fp, lsl #9 -100190b4: f10b 0358 add.w r3, fp, #88 ; 0x58 -100190b8: f10b 0b5d add.w fp, fp, #93 ; 0x5d -100190bc: 00db lsls r3, r3, #3 -100190be: ea4f 0bcb mov.w fp, fp, lsl #3 -100190c2: b2f6 uxtb r6, r6 -100190c4: 681a ldr r2, [r3, #0] -100190c6: 6a99 ldr r1, [r3, #40] ; 0x28 -100190c8: 3308 adds r3, #8 -100190ca: 430a orrs r2, r1 -100190cc: 4232 tst r2, r6 -100190ce: ea06 0001 and.w r0, r6, r1 -100190d2: bf18 it ne -100190d4: 6718 strne r0, [r3, #112] ; 0x70 -100190d6: 459b cmp fp, r3 -100190d8: d1f4 bne.n 100190c4 -100190da: 2258 movs r2, #88 ; 0x58 -100190dc: 437a muls r2, r7 -100190de: 6823 ldr r3, [r4, #0] -100190e0: f102 0108 add.w r1, r2, #8 -100190e4: 50ab str r3, [r5, r2] -100190e6: 6863 ldr r3, [r4, #4] -100190e8: 6960 ldr r0, [r4, #20] -100190ea: 514b str r3, [r1, r5] -100190ec: 6923 ldr r3, [r4, #16] -100190ee: f894 c028 ldrb.w ip, [r4, #40] ; 0x28 -100190f2: 005b lsls r3, r3, #1 -100190f4: 0100 lsls r0, r0, #4 -100190f6: f003 030e and.w r3, r3, #14 -100190fa: f000 0070 and.w r0, r0, #112 ; 0x70 -100190fe: 4318 orrs r0, r3 -10019100: f00c 0301 and.w r3, ip, #1 -10019104: 4303 orrs r3, r0 -10019106: 69a0 ldr r0, [r4, #24] -10019108: f102 0e18 add.w lr, r2, #24 -1001910c: 01c0 lsls r0, r0, #7 -1001910e: f400 70c0 and.w r0, r0, #384 ; 0x180 -10019112: 4318 orrs r0, r3 -10019114: 69e3 ldr r3, [r4, #28] -10019116: f85e 6005 ldr.w r6, [lr, r5] -1001911a: 025b lsls r3, r3, #9 -1001911c: f403 63c0 and.w r3, r3, #1536 ; 0x600 -10019120: 4318 orrs r0, r3 -10019122: 6a23 ldr r3, [r4, #32] -10019124: f102 071c add.w r7, r2, #28 -10019128: 02db lsls r3, r3, #11 -1001912a: f403 5360 and.w r3, r3, #14336 ; 0x3800 -1001912e: 4318 orrs r0, r3 -10019130: 6a63 ldr r3, [r4, #36] ; 0x24 -10019132: 5979 ldr r1, [r7, r5] -10019134: 039b lsls r3, r3, #14 -10019136: f403 33e0 and.w r3, r3, #114688 ; 0x1c000 -1001913a: 4318 orrs r0, r3 -1001913c: 68e3 ldr r3, [r4, #12] -1001913e: f026 56c3 bic.w r6, r6, #408944640 ; 0x18600000 -10019142: 051b lsls r3, r3, #20 -10019144: f403 03e0 and.w r3, r3, #7340032 ; 0x700000 -10019148: 4318 orrs r0, r3 -1001914a: f3cc 03c0 ubfx r3, ip, #3, #1 -1001914e: ea40 60c3 orr.w r0, r0, r3, lsl #27 -10019152: f3cc 1300 ubfx r3, ip, #4, #1 -10019156: ea40 7003 orr.w r0, r0, r3, lsl #28 -1001915a: 9b01 ldr r3, [sp, #4] -1001915c: f426 1680 bic.w r6, r6, #1048576 ; 0x100000 -10019160: 681b ldr r3, [r3, #0] -10019162: 0c76 lsrs r6, r6, #17 -10019164: f3c3 030b ubfx r3, r3, #0, #12 -10019168: f421 51ff bic.w r1, r1, #8160 ; 0x1fe0 -1001916c: f3cc 1c40 ubfx ip, ip, #5, #1 -10019170: ea43 3c0c orr.w ip, r3, ip, lsl #12 -10019174: 0476 lsls r6, r6, #17 -10019176: f021 011f bic.w r1, r1, #31 -1001917a: 4306 orrs r6, r0 -1001917c: ea4c 0101 orr.w r1, ip, r1 -10019180: f84e 6005 str.w r6, [lr, r5] -10019184: 6ae0 ldr r0, [r4, #44] ; 0x2c -10019186: 5179 str r1, [r7, r5] -10019188: 6b67 ldr r7, [r4, #52] ; 0x34 -1001918a: 0140 lsls r0, r0, #5 -1001918c: 033f lsls r7, r7, #12 -1001918e: f407 5740 and.w r7, r7, #12288 ; 0x3000 -10019192: b2c0 uxtb r0, r0 -10019194: 4338 orrs r0, r7 -10019196: 6b27 ldr r7, [r4, #48] ; 0x30 -10019198: f894 c03d ldrb.w ip, [r4, #61] ; 0x3d -1001919c: 03bf lsls r7, r7, #14 -1001919e: f894 b03c ldrb.w fp, [r4, #60] ; 0x3c -100191a2: b2bf uxth r7, r7 -100191a4: 4338 orrs r0, r7 -100191a6: f3cc 0740 ubfx r7, ip, #1, #1 -100191aa: ea40 70c7 orr.w r0, r0, r7, lsl #31 -100191ae: f00b 0701 and.w r7, fp, #1 -100191b2: ea40 2007 orr.w r0, r0, r7, lsl #8 -100191b6: f3cb 0780 ubfx r7, fp, #2, #1 -100191ba: ea40 2087 orr.w r0, r0, r7, lsl #10 -100191be: f3cb 07c0 ubfx r7, fp, #3, #1 -100191c2: f102 0340 add.w r3, r2, #64 ; 0x40 -100191c6: ea40 20c7 orr.w r0, r0, r7, lsl #11 -100191ca: f3cb 1700 ubfx r7, fp, #4, #1 -100191ce: 9302 str r3, [sp, #8] -100191d0: ea40 4007 orr.w r0, r0, r7, lsl #16 -100191d4: 595b ldr r3, [r3, r5] -100191d6: f8df e10c ldr.w lr, [pc, #268] ; 100192e4 -100191da: f3cb 1b40 ubfx fp, fp, #5, #1 -100191de: f00c 0701 and.w r7, ip, #1 -100191e2: ea40 404b orr.w r0, r0, fp, lsl #17 -100191e6: ea03 0e0e and.w lr, r3, lr -100191ea: ea40 7087 orr.w r0, r0, r7, lsl #30 -100191ee: f3cc 07c0 ubfx r7, ip, #3, #1 -100191f2: ea40 000e orr.w r0, r0, lr -100191f6: 017f lsls r7, r7, #5 -100191f8: f3cc 0e80 ubfx lr, ip, #2, #1 -100191fc: ea47 074e orr.w r7, r7, lr, lsl #1 -10019200: f894 e03a ldrb.w lr, [r4, #58] ; 0x3a -10019204: f3cc 1c00 ubfx ip, ip, #4, #1 -10019208: ea4f 1ece mov.w lr, lr, lsl #7 -1001920c: f40e 6ef0 and.w lr, lr, #1920 ; 0x780 -10019210: ea47 178c orr.w r7, r7, ip, lsl #6 -10019214: f102 0344 add.w r3, r2, #68 ; 0x44 -10019218: ea47 070e orr.w r7, r7, lr -1001921c: f894 e03b ldrb.w lr, [r4, #59] ; 0x3b -10019220: 9303 str r3, [sp, #12] -10019222: 595b ldr r3, [r3, r5] -10019224: ea4f 2ece mov.w lr, lr, lsl #11 -10019228: f423 43ff bic.w r3, r3, #32640 ; 0x7f80 -1001922c: f40e 4ef0 and.w lr, lr, #30720 ; 0x7800 -10019230: ea47 070e orr.w r7, r7, lr -10019234: f023 0362 bic.w r3, r3, #98 ; 0x62 -10019238: 433b orrs r3, r7 -1001923a: 9f02 ldr r7, [sp, #8] -1001923c: f019 0f03 tst.w r9, #3 -10019240: 5178 str r0, [r7, r5] -10019242: 9803 ldr r0, [sp, #12] -10019244: 5143 str r3, [r0, r5] -10019246: d00c beq.n 10019262 -10019248: 4b20 ldr r3, [pc, #128] ; (100192cc ) -1001924a: 681b ldr r3, [r3, #0] -1001924c: 0798 lsls r0, r3, #30 -1001924e: d403 bmi.n 10019258 -10019250: 2000 movs r0, #0 -10019252: b005 add sp, #20 -10019254: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10019258: 6da1 ldr r1, [r4, #88] ; 0x58 -1001925a: 4b1e ldr r3, [pc, #120] ; (100192d4 ) -1001925c: 481e ldr r0, [pc, #120] ; (100192d8 ) -1001925e: 4798 blx r3 -10019260: e7f6 b.n 10019250 -10019262: f8d8 3000 ldr.w r3, [r8] -10019266: 3210 adds r2, #16 -10019268: f842 9005 str.w r9, [r2, r5] -1001926c: f8c9 3008 str.w r3, [r9, #8] -10019270: 9b01 ldr r3, [sp, #4] -10019272: f8c9 600c str.w r6, [r9, #12] -10019276: 685b ldr r3, [r3, #4] -10019278: f8c9 1010 str.w r1, [r9, #16] -1001927c: f1ba 0f01 cmp.w sl, #1 -10019280: d801 bhi.n 10019286 -10019282: 2001 movs r0, #1 -10019284: e7e5 b.n 10019252 -10019286: f8d8 5000 ldr.w r5, [r8] -1001928a: f10a 3aff add.w sl, sl, #4294967295 -1001928e: b93d cbnz r5, 100192a0 -10019290: 4b12 ldr r3, [pc, #72] ; (100192dc ) -10019292: 681b ldr r3, [r3, #0] -10019294: 0799 lsls r1, r3, #30 -10019296: d5db bpl.n 10019250 -10019298: 4b0e ldr r3, [pc, #56] ; (100192d4 ) -1001929a: 4811 ldr r0, [pc, #68] ; (100192e0 ) -1001929c: 4798 blx r3 -1001929e: e7d7 b.n 10019250 -100192a0: f1ba 0f01 cmp.w sl, #1 -100192a4: d105 bne.n 100192b2 -100192a6: f894 2063 ldrb.w r2, [r4, #99] ; 0x63 -100192aa: 06d2 lsls r2, r2, #27 -100192ac: bf48 it mi -100192ae: f026 56c0 bicmi.w r6, r6, #402653184 ; 0x18000000 -100192b2: 681a ldr r2, [r3, #0] -100192b4: f8d8 8004 ldr.w r8, [r8, #4] -100192b8: f362 010b bfi r1, r2, #0, #12 -100192bc: f8d8 2000 ldr.w r2, [r8] -100192c0: 685b ldr r3, [r3, #4] -100192c2: 60ee str r6, [r5, #12] -100192c4: 6129 str r1, [r5, #16] -100192c6: 60aa str r2, [r5, #8] -100192c8: e7d8 b.n 1001927c -100192ca: bf00 nop -100192cc: 1000030c .word 0x1000030c -100192d0: 100409a8 .word 0x100409a8 -100192d4: 0000f39d .word 0x0000f39d -100192d8: 100409d6 .word 0x100409d6 -100192dc: 10000314 .word 0x10000314 -100192e0: 10040a07 .word 0x10040a07 -100192e4: 3ffc021f .word 0x3ffc021f - -100192e8 : -100192e8: b507 push {r0, r1, r2, lr} -100192ea: f890 2084 ldrb.w r2, [r0, #132] ; 0x84 -100192ee: f890 1089 ldrb.w r1, [r0, #137] ; 0x89 -100192f2: 2a01 cmp r2, #1 -100192f4: d024 beq.n 10019340 -100192f6: d30b bcc.n 10019310 -100192f8: 2a02 cmp r2, #2 -100192fa: d032 beq.n 10019362 -100192fc: 4b22 ldr r3, [pc, #136] ; (10019388 ) -100192fe: 681b ldr r3, [r3, #0] -10019300: 051b lsls r3, r3, #20 -10019302: d503 bpl.n 1001930c -10019304: 4611 mov r1, r2 -10019306: 4821 ldr r0, [pc, #132] ; (1001938c ) -10019308: 4b21 ldr r3, [pc, #132] ; (10019390 ) -1001930a: 4798 blx r3 -1001930c: 2303 movs r3, #3 -1001930e: e012 b.n 10019336 -10019310: 4b20 ldr r3, [pc, #128] ; (10019394 ) -10019312: 2008 movs r0, #8 -10019314: 681a ldr r2, [r3, #0] -10019316: f442 3280 orr.w r2, r2, #65536 ; 0x10000 -1001931a: 601a str r2, [r3, #0] -1001931c: 681a ldr r2, [r3, #0] -1001931e: f442 3200 orr.w r2, r2, #131072 ; 0x20000 -10019322: 601a str r2, [r3, #0] -10019324: 2201 movs r2, #1 -10019326: 4b1c ldr r3, [pc, #112] ; (10019398 ) -10019328: 4798 blx r3 -1001932a: 4a1c ldr r2, [pc, #112] ; (1001939c ) -1001932c: 6813 ldr r3, [r2, #0] -1001932e: f443 7380 orr.w r3, r3, #256 ; 0x100 -10019332: 6013 str r3, [r2, #0] -10019334: 2300 movs r3, #0 -10019336: 9301 str r3, [sp, #4] -10019338: 9801 ldr r0, [sp, #4] -1001933a: b003 add sp, #12 -1001933c: f85d fb04 ldr.w pc, [sp], #4 -10019340: 4b14 ldr r3, [pc, #80] ; (10019394 ) -10019342: 6818 ldr r0, [r3, #0] -10019344: f440 2080 orr.w r0, r0, #262144 ; 0x40000 -10019348: 6018 str r0, [r3, #0] -1001934a: 6818 ldr r0, [r3, #0] -1001934c: f440 2000 orr.w r0, r0, #524288 ; 0x80000 -10019350: 6018 str r0, [r3, #0] -10019352: 4b11 ldr r3, [pc, #68] ; (10019398 ) -10019354: 2009 movs r0, #9 -10019356: 4798 blx r3 -10019358: 4a10 ldr r2, [pc, #64] ; (1001939c ) -1001935a: 6813 ldr r3, [r2, #0] -1001935c: f443 7300 orr.w r3, r3, #512 ; 0x200 -10019360: e7e7 b.n 10019332 -10019362: 4b0c ldr r3, [pc, #48] ; (10019394 ) -10019364: 200a movs r0, #10 -10019366: 681a ldr r2, [r3, #0] -10019368: f442 1280 orr.w r2, r2, #1048576 ; 0x100000 -1001936c: 601a str r2, [r3, #0] -1001936e: 681a ldr r2, [r3, #0] -10019370: f442 1200 orr.w r2, r2, #2097152 ; 0x200000 -10019374: 601a str r2, [r3, #0] -10019376: 2201 movs r2, #1 -10019378: 4b07 ldr r3, [pc, #28] ; (10019398 ) -1001937a: 4798 blx r3 -1001937c: 4a07 ldr r2, [pc, #28] ; (1001939c ) -1001937e: 6813 ldr r3, [r2, #0] -10019380: f443 6380 orr.w r3, r3, #1024 ; 0x400 -10019384: e7d5 b.n 10019332 -10019386: bf00 nop -10019388: 10000314 .word 0x10000314 -1001938c: 10040b66 .word 0x10040b66 -10019390: 0000f39d .word 0x0000f39d -10019394: 40000234 .word 0x40000234 -10019398: 00002b39 .word 0x00002b39 -1001939c: 40000218 .word 0x40000218 - -100193a0 : -100193a0: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} -100193a4: f890 6084 ldrb.w r6, [r0, #132] ; 0x84 -100193a8: 4604 mov r4, r0 -100193aa: 2e02 cmp r6, #2 -100193ac: d909 bls.n 100193c2 -100193ae: 4b52 ldr r3, [pc, #328] ; (100194f8 ) -100193b0: 681b ldr r3, [r3, #0] -100193b2: 051b lsls r3, r3, #20 -100193b4: d503 bpl.n 100193be -100193b6: 4631 mov r1, r6 -100193b8: 4850 ldr r0, [pc, #320] ; (100194fc ) -100193ba: 4b51 ldr r3, [pc, #324] ; (10019500 ) -100193bc: 4798 blx r3 -100193be: 2003 movs r0, #3 -100193c0: e08f b.n 100194e2 -100193c2: f890 9088 ldrb.w r9, [r0, #136] ; 0x88 -100193c6: f890 a081 ldrb.w sl, [r0, #129] ; 0x81 -100193ca: f890 708e ldrb.w r7, [r0, #142] ; 0x8e -100193ce: f890 808a ldrb.w r8, [r0, #138] ; 0x8a -100193d2: f7ff ff89 bl 100192e8 -100193d6: 4b4b ldr r3, [pc, #300] ; (10019504 ) -100193d8: 4620 mov r0, r4 -100193da: 4798 blx r3 -100193dc: f894 2081 ldrb.w r2, [r4, #129] ; 0x81 -100193e0: f894 308b ldrb.w r3, [r4, #139] ; 0x8b -100193e4: 0112 lsls r2, r2, #4 -100193e6: 019b lsls r3, r3, #6 -100193e8: f003 0340 and.w r3, r3, #64 ; 0x40 -100193ec: f002 0230 and.w r2, r2, #48 ; 0x30 -100193f0: 431a orrs r2, r3 -100193f2: f894 3082 ldrb.w r3, [r4, #130] ; 0x82 -100193f6: f003 030f and.w r3, r3, #15 -100193fa: 431a orrs r2, r3 -100193fc: f894 308c ldrb.w r3, [r4, #140] ; 0x8c -10019400: 01db lsls r3, r3, #7 -10019402: b2db uxtb r3, r3 -10019404: 431a orrs r2, r3 -10019406: f894 308e ldrb.w r3, [r4, #142] ; 0x8e -1001940a: 021b lsls r3, r3, #8 -1001940c: f403 7340 and.w r3, r3, #768 ; 0x300 -10019410: 431a orrs r2, r3 -10019412: f894 3080 ldrb.w r3, [r4, #128] ; 0x80 -10019416: 031b lsls r3, r3, #12 -10019418: b29b uxth r3, r3 -1001941a: 4313 orrs r3, r2 -1001941c: f1b8 0f00 cmp.w r8, #0 -10019420: d105 bne.n 1001942e -10019422: f894 208d ldrb.w r2, [r4, #141] ; 0x8d -10019426: 0292 lsls r2, r2, #10 -10019428: f402 6280 and.w r2, r2, #1024 ; 0x400 -1001942c: 4313 orrs r3, r2 -1001942e: f506 1580 add.w r5, r6, #1048576 ; 0x100000 -10019432: f505 7584 add.w r5, r5, #264 ; 0x108 -10019436: 02ad lsls r5, r5, #10 -10019438: 602b str r3, [r5, #0] -1001943a: 6f63 ldr r3, [r4, #116] ; 0x74 -1001943c: f018 0f01 tst.w r8, #1 -10019440: f003 033f and.w r3, r3, #63 ; 0x3f -10019444: 61ab str r3, [r5, #24] -10019446: 6ee3 ldr r3, [r4, #108] ; 0x6c -10019448: f003 033f and.w r3, r3, #63 ; 0x3f -1001944c: 61eb str r3, [r5, #28] -1001944e: d012 beq.n 10019476 -10019450: 3f02 subs r7, #2 -10019452: 2f01 cmp r7, #1 -10019454: d905 bls.n 10019462 -10019456: f1ba 0f02 cmp.w sl, #2 -1001945a: d105 bne.n 10019468 -1001945c: f1b9 0f01 cmp.w r9, #1 -10019460: d102 bne.n 10019468 -10019462: f8b4 307e ldrh.w r3, [r4, #126] ; 0x7e -10019466: 606b str r3, [r5, #4] -10019468: 4b27 ldr r3, [pc, #156] ; (10019508 ) -1001946a: 6fa1 ldr r1, [r4, #120] ; 0x78 -1001946c: 4620 mov r0, r4 -1001946e: 4798 blx r3 -10019470: f8b4 307c ldrh.w r3, [r4, #124] ; 0x7c -10019474: 616b str r3, [r5, #20] -10019476: f894 3086 ldrb.w r3, [r4, #134] ; 0x86 -1001947a: f894 2087 ldrb.w r2, [r4, #135] ; 0x87 -1001947e: 005b lsls r3, r3, #1 -10019480: 0092 lsls r2, r2, #2 -10019482: f002 0204 and.w r2, r2, #4 -10019486: f003 0302 and.w r3, r3, #2 -1001948a: 4313 orrs r3, r2 -1001948c: f894 2088 ldrb.w r2, [r4, #136] ; 0x88 -10019490: f002 0201 and.w r2, r2, #1 -10019494: 4313 orrs r3, r2 -10019496: 60eb str r3, [r5, #12] -10019498: f894 308f ldrb.w r3, [r4, #143] ; 0x8f -1001949c: 2b01 cmp r3, #1 -1001949e: d11c bne.n 100194da -100194a0: 2e01 cmp r6, #1 -100194a2: d021 beq.n 100194e8 -100194a4: 2e02 cmp r6, #2 -100194a6: d021 beq.n 100194ec -100194a8: 2306 movs r3, #6 -100194aa: 9301 str r3, [sp, #4] -100194ac: f240 33e7 movw r3, #999 ; 0x3e7 -100194b0: 9a01 ldr r2, [sp, #4] -100194b2: 429a cmp r2, r3 -100194b4: d01c beq.n 100194f0 -100194b6: 4b15 ldr r3, [pc, #84] ; (1001950c ) -100194b8: 4620 mov r0, r4 -100194ba: 4798 blx r3 -100194bc: 4b14 ldr r3, [pc, #80] ; (10019510 ) -100194be: f104 0530 add.w r5, r4, #48 ; 0x30 -100194c2: 6323 str r3, [r4, #48] ; 0x30 -100194c4: 9b01 ldr r3, [sp, #4] -100194c6: 63a4 str r4, [r4, #56] ; 0x38 -100194c8: 6363 str r3, [r4, #52] ; 0x34 -100194ca: 6e23 ldr r3, [r4, #96] ; 0x60 -100194cc: 4628 mov r0, r5 -100194ce: 63e3 str r3, [r4, #60] ; 0x3c -100194d0: 4b10 ldr r3, [pc, #64] ; (10019514 ) -100194d2: 4798 blx r3 -100194d4: 4628 mov r0, r5 -100194d6: 4b10 ldr r3, [pc, #64] ; (10019518 ) -100194d8: 4798 blx r3 -100194da: 4620 mov r0, r4 -100194dc: 4b0f ldr r3, [pc, #60] ; (1001951c ) -100194de: 4798 blx r3 -100194e0: 2000 movs r0, #0 -100194e2: b002 add sp, #8 -100194e4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -100194e8: 2348 movs r3, #72 ; 0x48 -100194ea: e7de b.n 100194aa -100194ec: 2349 movs r3, #73 ; 0x49 -100194ee: e7dc b.n 100194aa -100194f0: 2300 movs r3, #0 -100194f2: f884 308f strb.w r3, [r4, #143] ; 0x8f -100194f6: e7f0 b.n 100194da -100194f8: 10000314 .word 0x10000314 -100194fc: 10040af3 .word 0x10040af3 -10019500: 0000f39d .word 0x0000f39d -10019504: 00007ef9 .word 0x00007ef9 -10019508: 00009009 .word 0x00009009 -1001950c: 00008521 .word 0x00008521 -10019510: 10019981 .word 0x10019981 -10019514: 00004029 .word 0x00004029 -10019518: 000040f1 .word 0x000040f1 -1001951c: 00007e45 .word 0x00007e45 - -10019520 : -10019520: b507 push {r0, r1, r2, lr} -10019522: f890 3084 ldrb.w r3, [r0, #132] ; 0x84 -10019526: f890 1089 ldrb.w r1, [r0, #137] ; 0x89 -1001952a: 2b01 cmp r3, #1 -1001952c: d026 beq.n 1001957c -1001952e: d30b bcc.n 10019548 -10019530: 2b02 cmp r3, #2 -10019532: d037 beq.n 100195a4 -10019534: 4a25 ldr r2, [pc, #148] ; (100195cc ) -10019536: 6812 ldr r2, [r2, #0] -10019538: 0512 lsls r2, r2, #20 -1001953a: d503 bpl.n 10019544 -1001953c: 4619 mov r1, r3 -1001953e: 4824 ldr r0, [pc, #144] ; (100195d0 ) -10019540: 4b24 ldr r3, [pc, #144] ; (100195d4 ) -10019542: 4798 blx r3 -10019544: 2303 movs r3, #3 -10019546: e014 b.n 10019572 -10019548: 4b23 ldr r3, [pc, #140] ; (100195d8 ) -1001954a: 2008 movs r0, #8 -1001954c: 681a ldr r2, [r3, #0] -1001954e: f422 3280 bic.w r2, r2, #65536 ; 0x10000 -10019552: 601a str r2, [r3, #0] -10019554: 681a ldr r2, [r3, #0] -10019556: f422 3200 bic.w r2, r2, #131072 ; 0x20000 -1001955a: 601a str r2, [r3, #0] -1001955c: 2200 movs r2, #0 -1001955e: 4b1f ldr r3, [pc, #124] ; (100195dc ) -10019560: 4798 blx r3 -10019562: 4b1f ldr r3, [pc, #124] ; (100195e0 ) -10019564: 4a1f ldr r2, [pc, #124] ; (100195e4 ) -10019566: 681b ldr r3, [r3, #0] -10019568: 6813 ldr r3, [r2, #0] -1001956a: f423 7380 bic.w r3, r3, #256 ; 0x100 -1001956e: 6013 str r3, [r2, #0] -10019570: 2300 movs r3, #0 -10019572: 9301 str r3, [sp, #4] -10019574: 9801 ldr r0, [sp, #4] -10019576: b003 add sp, #12 -10019578: f85d fb04 ldr.w pc, [sp], #4 -1001957c: 4b16 ldr r3, [pc, #88] ; (100195d8 ) -1001957e: 2009 movs r0, #9 -10019580: 681a ldr r2, [r3, #0] -10019582: f422 2280 bic.w r2, r2, #262144 ; 0x40000 -10019586: 601a str r2, [r3, #0] -10019588: 681a ldr r2, [r3, #0] -1001958a: f422 2200 bic.w r2, r2, #524288 ; 0x80000 -1001958e: 601a str r2, [r3, #0] -10019590: 2200 movs r2, #0 -10019592: 4b12 ldr r3, [pc, #72] ; (100195dc ) -10019594: 4798 blx r3 -10019596: 4b14 ldr r3, [pc, #80] ; (100195e8 ) -10019598: 4a12 ldr r2, [pc, #72] ; (100195e4 ) -1001959a: 681b ldr r3, [r3, #0] -1001959c: 6813 ldr r3, [r2, #0] -1001959e: f423 7300 bic.w r3, r3, #512 ; 0x200 -100195a2: e7e4 b.n 1001956e -100195a4: 4b0c ldr r3, [pc, #48] ; (100195d8 ) -100195a6: 200a movs r0, #10 -100195a8: 681a ldr r2, [r3, #0] -100195aa: f422 1280 bic.w r2, r2, #1048576 ; 0x100000 -100195ae: 601a str r2, [r3, #0] -100195b0: 681a ldr r2, [r3, #0] -100195b2: f422 1200 bic.w r2, r2, #2097152 ; 0x200000 -100195b6: 601a str r2, [r3, #0] -100195b8: 2200 movs r2, #0 -100195ba: 4b08 ldr r3, [pc, #32] ; (100195dc ) -100195bc: 4798 blx r3 -100195be: 4b0b ldr r3, [pc, #44] ; (100195ec ) -100195c0: 4a08 ldr r2, [pc, #32] ; (100195e4 ) -100195c2: 681b ldr r3, [r3, #0] -100195c4: 6813 ldr r3, [r2, #0] -100195c6: f423 6380 bic.w r3, r3, #1024 ; 0x400 -100195ca: e7d0 b.n 1001956e -100195cc: 10000314 .word 0x10000314 -100195d0: 10040b66 .word 0x10040b66 -100195d4: 0000f39d .word 0x0000f39d -100195d8: 40000234 .word 0x40000234 -100195dc: 00002b39 .word 0x00002b39 -100195e0: 40042000 .word 0x40042000 -100195e4: 40000218 .word 0x40000218 -100195e8: 40042400 .word 0x40042400 -100195ec: 40042800 .word 0x40042800 - -100195f0 : -100195f0: b570 push {r4, r5, r6, lr} -100195f2: f890 4084 ldrb.w r4, [r0, #132] ; 0x84 -100195f6: 4605 mov r5, r0 -100195f8: 2c02 cmp r4, #2 -100195fa: d909 bls.n 10019610 -100195fc: 4b1b ldr r3, [pc, #108] ; (1001966c ) -100195fe: 681b ldr r3, [r3, #0] -10019600: 051b lsls r3, r3, #20 -10019602: d503 bpl.n 1001960c -10019604: 4621 mov r1, r4 -10019606: 481a ldr r0, [pc, #104] ; (10019670 ) -10019608: 4b1a ldr r3, [pc, #104] ; (10019674 ) -1001960a: 4798 blx r3 -1001960c: 2003 movs r0, #3 -1001960e: bd70 pop {r4, r5, r6, pc} -10019610: 4b19 ldr r3, [pc, #100] ; (10019678 ) -10019612: f890 608a ldrb.w r6, [r0, #138] ; 0x8a -10019616: 4798 blx r3 -10019618: f895 308b ldrb.w r3, [r5, #139] ; 0x8b -1001961c: f895 208c ldrb.w r2, [r5, #140] ; 0x8c -10019620: 019b lsls r3, r3, #6 -10019622: 01d2 lsls r2, r2, #7 -10019624: b2d2 uxtb r2, r2 -10019626: f003 0340 and.w r3, r3, #64 ; 0x40 -1001962a: 4313 orrs r3, r2 -1001962c: f895 2082 ldrb.w r2, [r5, #130] ; 0x82 -10019630: f002 020f and.w r2, r2, #15 -10019634: 4313 orrs r3, r2 -10019636: b92e cbnz r6, 10019644 -10019638: f895 208d ldrb.w r2, [r5, #141] ; 0x8d -1001963c: 0292 lsls r2, r2, #10 -1001963e: f402 6280 and.w r2, r2, #1024 ; 0x400 -10019642: 4313 orrs r3, r2 -10019644: f504 1480 add.w r4, r4, #1048576 ; 0x100000 -10019648: f504 7484 add.w r4, r4, #264 ; 0x108 -1001964c: 02a4 lsls r4, r4, #10 -1001964e: 6023 str r3, [r4, #0] -10019650: 6f6b ldr r3, [r5, #116] ; 0x74 -10019652: 4628 mov r0, r5 -10019654: f003 033f and.w r3, r3, #63 ; 0x3f -10019658: 61a3 str r3, [r4, #24] -1001965a: 6eeb ldr r3, [r5, #108] ; 0x6c -1001965c: f003 033f and.w r3, r3, #63 ; 0x3f -10019660: 61e3 str r3, [r4, #28] -10019662: 4b06 ldr r3, [pc, #24] ; (1001967c ) -10019664: 4798 blx r3 -10019666: 2000 movs r0, #0 -10019668: bd70 pop {r4, r5, r6, pc} -1001966a: bf00 nop -1001966c: 10000314 .word 0x10000314 -10019670: 10040b87 .word 0x10040b87 -10019674: 0000f39d .word 0x0000f39d -10019678: 00007ef9 .word 0x00007ef9 -1001967c: 00007e45 .word 0x00007e45 - -10019680 : -10019680: b570 push {r4, r5, r6, lr} -10019682: 4b2a ldr r3, [pc, #168] ; (1001972c ) -10019684: f890 4084 ldrb.w r4, [r0, #132] ; 0x84 -10019688: 4606 mov r6, r0 -1001968a: 460d mov r5, r1 -1001968c: 4798 blx r3 -1001968e: 2c01 cmp r4, #1 -10019690: ea4f 0290 mov.w r2, r0, lsr #2 -10019694: d11b bne.n 100196ce -10019696: 4926 ldr r1, [pc, #152] ; (10019730 ) -10019698: 42aa cmp r2, r5 -1001969a: 680b ldr r3, [r1, #0] -1001969c: bf39 ittee cc -1001969e: 4825 ldrcc r0, [pc, #148] ; (10019734 ) -100196a0: f443 2380 orrcc.w r3, r3, #262144 ; 0x40000 -100196a4: f423 2380 biccs.w r3, r3, #262144 ; 0x40000 -100196a8: 0840 lsrcs r0, r0, #1 -100196aa: 600b str r3, [r1, #0] -100196ac: f896 308a ldrb.w r3, [r6, #138] ; 0x8a -100196b0: 2b01 cmp r3, #1 -100196b2: d12b bne.n 1001970c -100196b4: 0842 lsrs r2, r0, #1 -100196b6: 4295 cmp r5, r2 -100196b8: d90b bls.n 100196d2 -100196ba: 4b1f ldr r3, [pc, #124] ; (10019738 ) -100196bc: 681b ldr r3, [r3, #0] -100196be: 0519 lsls r1, r3, #20 -100196c0: d503 bpl.n 100196ca -100196c2: 4629 mov r1, r5 -100196c4: 481d ldr r0, [pc, #116] ; (1001973c ) -100196c6: 4b1e ldr r3, [pc, #120] ; (10019740 ) -100196c8: 4798 blx r3 -100196ca: 2202 movs r2, #2 -100196cc: e010 b.n 100196f0 -100196ce: 4610 mov r0, r2 -100196d0: e7ec b.n 100196ac -100196d2: fbb0 f2f5 udiv r2, r0, r5 -100196d6: fb05 0012 mls r0, r5, r2, r0 -100196da: ebb0 0f55 cmp.w r0, r5, lsr #1 -100196de: bf94 ite ls -100196e0: 1c53 addls r3, r2, #1 -100196e2: 1c93 addhi r3, r2, #2 -100196e4: f64f 72fe movw r2, #65534 ; 0xfffe -100196e8: 4293 cmp r3, r2 -100196ea: bf94 ite ls -100196ec: 401a andls r2, r3 -100196ee: 4012 andhi r2, r2 -100196f0: f504 1380 add.w r3, r4, #1048576 ; 0x100000 -100196f4: f503 7384 add.w r3, r3, #264 ; 0x108 -100196f8: 029b lsls r3, r3, #10 -100196fa: 6899 ldr r1, [r3, #8] -100196fc: f8a6 207c strh.w r2, [r6, #124] ; 0x7c -10019700: f021 0001 bic.w r0, r1, #1 -10019704: 6098 str r0, [r3, #8] -10019706: 615a str r2, [r3, #20] -10019708: 6099 str r1, [r3, #8] -1001970a: bd70 pop {r4, r5, r6, pc} -1001970c: 220a movs r2, #10 -1001970e: fbb0 f2f2 udiv r2, r0, r2 -10019712: 4295 cmp r5, r2 -10019714: d909 bls.n 1001972a -10019716: 4b08 ldr r3, [pc, #32] ; (10019738 ) -10019718: 681b ldr r3, [r3, #0] -1001971a: 051b lsls r3, r3, #20 -1001971c: d505 bpl.n 1001972a -1001971e: 4629 mov r1, r5 -10019720: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10019724: 4805 ldr r0, [pc, #20] ; (1001973c ) -10019726: 4b06 ldr r3, [pc, #24] ; (10019740 ) -10019728: 4718 bx r3 -1001972a: bd70 pop {r4, r5, r6, pc} -1001972c: 00000355 .word 0x00000355 -10019730: 40000250 .word 0x40000250 -10019734: 04f790d5 .word 0x04f790d5 -10019738: 10000314 .word 0x10000314 -1001973c: 10040bbf .word 0x10040bbf -10019740: 0000f39d .word 0x0000f39d - -10019744 : -10019744: b570 push {r4, r5, r6, lr} -10019746: 4604 mov r4, r0 -10019748: 460e mov r6, r1 -1001974a: 4615 mov r5, r2 -1001974c: b1e2 cbz r2, 10019788 -1001974e: f890 3093 ldrb.w r3, [r0, #147] ; 0x93 -10019752: 429a cmp r2, r3 -10019754: bf98 it ls -10019756: 2300 movls r3, #0 -10019758: 6ec2 ldr r2, [r0, #108] ; 0x6c -1001975a: 4293 cmp r3, r2 -1001975c: d002 beq.n 10019764 -1001975e: 66c3 str r3, [r0, #108] ; 0x6c -10019760: 4b0a ldr r3, [pc, #40] ; (1001978c ) -10019762: 4798 blx r3 -10019764: f894 3082 ldrb.w r3, [r4, #130] ; 0x82 -10019768: 64a6 str r6, [r4, #72] ; 0x48 -1001976a: 2b07 cmp r3, #7 -1001976c: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 -10019770: bfc8 it gt -10019772: 086d lsrgt r5, r5, #1 -10019774: f043 031c orr.w r3, r3, #28 -10019778: f884 3085 strb.w r3, [r4, #133] ; 0x85 -1001977c: 6665 str r5, [r4, #100] ; 0x64 -1001977e: 4620 mov r0, r4 -10019780: 4b03 ldr r3, [pc, #12] ; (10019790 ) -10019782: 4798 blx r3 -10019784: 2000 movs r0, #0 -10019786: bd70 pop {r4, r5, r6, pc} -10019788: 2003 movs r0, #3 -1001978a: bd70 pop {r4, r5, r6, pc} -1001978c: 000088c9 .word 0x000088c9 -10019790: 00008521 .word 0x00008521 - -10019794 : -10019794: f890 3084 ldrb.w r3, [r0, #132] ; 0x84 -10019798: f001 013f and.w r1, r1, #63 ; 0x3f -1001979c: f503 1380 add.w r3, r3, #1048576 ; 0x100000 -100197a0: f503 7384 add.w r3, r3, #264 ; 0x108 -100197a4: 029b lsls r3, r3, #10 -100197a6: 6199 str r1, [r3, #24] -100197a8: 4770 bx lr - ... - -100197ac <_SsiWriteInterruptRtl8195a>: -100197ac: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -100197ae: 4604 mov r4, r0 -100197b0: 4b40 ldr r3, [pc, #256] ; (100198b4 <_SsiWriteInterruptRtl8195a+0x108>) -100197b2: 4798 blx r3 -100197b4: 6f23 ldr r3, [r4, #112] ; 0x70 -100197b6: f894 5084 ldrb.w r5, [r4, #132] ; 0x84 -100197ba: b9f3 cbnz r3, 100197fa <_SsiWriteInterruptRtl8195a+0x4e> -100197bc: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 -100197c0: 4620 mov r0, r4 -100197c2: f023 0301 bic.w r3, r3, #1 -100197c6: f884 3085 strb.w r3, [r4, #133] ; 0x85 -100197ca: 4b3b ldr r3, [pc, #236] ; (100198b8 <_SsiWriteInterruptRtl8195a+0x10c>) -100197cc: 4798 blx r3 -100197ce: 4a3b ldr r2, [pc, #236] ; (100198bc <_SsiWriteInterruptRtl8195a+0x110>) -100197d0: 02ad lsls r5, r5, #10 -100197d2: 4b3b ldr r3, [pc, #236] ; (100198c0 <_SsiWriteInterruptRtl8195a+0x114>) -100197d4: 442a add r2, r5 -100197d6: 6811 ldr r1, [r2, #0] -100197d8: f001 0101 and.w r1, r1, #1 -100197dc: 9101 str r1, [sp, #4] -100197de: 9901 ldr r1, [sp, #4] -100197e0: b109 cbz r1, 100197e6 <_SsiWriteInterruptRtl8195a+0x3a> -100197e2: 3b01 subs r3, #1 -100197e4: d1f7 bne.n 100197d6 <_SsiWriteInterruptRtl8195a+0x2a> -100197e6: 6d63 ldr r3, [r4, #84] ; 0x54 -100197e8: b12b cbz r3, 100197f6 <_SsiWriteInterruptRtl8195a+0x4a> -100197ea: f8d4 3598 ldr.w r3, [r4, #1432] ; 0x598 -100197ee: b113 cbz r3, 100197f6 <_SsiWriteInterruptRtl8195a+0x4a> -100197f0: f8d4 059c ldr.w r0, [r4, #1436] ; 0x59c -100197f4: 4798 blx r3 -100197f6: b003 add sp, #12 -100197f8: bdf0 pop {r4, r5, r6, r7, pc} -100197fa: 2800 cmp r0, #0 -100197fc: d036 beq.n 1001986c <_SsiWriteInterruptRtl8195a+0xc0> -100197fe: 4b31 ldr r3, [pc, #196] ; (100198c4 <_SsiWriteInterruptRtl8195a+0x118>) -10019800: 4620 mov r0, r4 -10019802: 4798 blx r3 -10019804: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 -10019808: f1c0 0740 rsb r7, r0, #64 ; 0x40 -1001980c: f023 0301 bic.w r3, r3, #1 -10019810: f884 3085 strb.w r3, [r4, #133] ; 0x85 -10019814: 4620 mov r0, r4 -10019816: 4e28 ldr r6, [pc, #160] ; (100198b8 <_SsiWriteInterruptRtl8195a+0x10c>) -10019818: 47b0 blx r6 -1001981a: 6e63 ldr r3, [r4, #100] ; 0x64 -1001981c: b123 cbz r3, 10019828 <_SsiWriteInterruptRtl8195a+0x7c> -1001981e: 6d63 ldr r3, [r4, #84] ; 0x54 -10019820: b113 cbz r3, 10019828 <_SsiWriteInterruptRtl8195a+0x7c> -10019822: 4620 mov r0, r4 -10019824: f000 f852 bl 100198cc <_SsiReadInterruptRtl8195a> -10019828: 4a27 ldr r2, [pc, #156] ; (100198c8 <_SsiWriteInterruptRtl8195a+0x11c>) -1001982a: 02ad lsls r5, r5, #10 -1001982c: 442a add r2, r5 -1001982e: b1af cbz r7, 1001985c <_SsiWriteInterruptRtl8195a+0xb0> -10019830: f894 3082 ldrb.w r3, [r4, #130] ; 0x82 -10019834: 2b07 cmp r3, #7 -10019836: 6d63 ldr r3, [r4, #84] ; 0x54 -10019838: dd2f ble.n 1001989a <_SsiWriteInterruptRtl8195a+0xee> -1001983a: b123 cbz r3, 10019846 <_SsiWriteInterruptRtl8195a+0x9a> -1001983c: f833 1b02 ldrh.w r1, [r3], #2 -10019840: 8011 strh r1, [r2, #0] -10019842: 6563 str r3, [r4, #84] ; 0x54 -10019844: e004 b.n 10019850 <_SsiWriteInterruptRtl8195a+0xa4> -10019846: f894 108a ldrb.w r1, [r4, #138] ; 0x8a -1001984a: 2901 cmp r1, #1 -1001984c: d100 bne.n 10019850 <_SsiWriteInterruptRtl8195a+0xa4> -1001984e: 8013 strh r3, [r2, #0] -10019850: 6f23 ldr r3, [r4, #112] ; 0x70 -10019852: 3f01 subs r7, #1 -10019854: 3b01 subs r3, #1 -10019856: 6723 str r3, [r4, #112] ; 0x70 -10019858: 2b00 cmp r3, #0 -1001985a: d1e8 bne.n 1001982e <_SsiWriteInterruptRtl8195a+0x82> -1001985c: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 -10019860: 4620 mov r0, r4 -10019862: f043 0301 orr.w r3, r3, #1 -10019866: f884 3085 strb.w r3, [r4, #133] ; 0x85 -1001986a: 47b0 blx r6 -1001986c: 6f21 ldr r1, [r4, #112] ; 0x70 -1001986e: 2900 cmp r1, #0 -10019870: d1c1 bne.n 100197f6 <_SsiWriteInterruptRtl8195a+0x4a> -10019872: 4620 mov r0, r4 -10019874: f7ff ff8e bl 10019794 -10019878: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 -1001987c: 4620 mov r0, r4 -1001987e: f023 0302 bic.w r3, r3, #2 -10019882: f884 3085 strb.w r3, [r4, #133] ; 0x85 -10019886: 4b0c ldr r3, [pc, #48] ; (100198b8 <_SsiWriteInterruptRtl8195a+0x10c>) -10019888: 4798 blx r3 -1001988a: 6d63 ldr r3, [r4, #84] ; 0x54 -1001988c: 2b00 cmp r3, #0 -1001988e: d0b2 beq.n 100197f6 <_SsiWriteInterruptRtl8195a+0x4a> -10019890: 6ce3 ldr r3, [r4, #76] ; 0x4c -10019892: 2b00 cmp r3, #0 -10019894: d0af beq.n 100197f6 <_SsiWriteInterruptRtl8195a+0x4a> -10019896: 6d20 ldr r0, [r4, #80] ; 0x50 -10019898: e7ac b.n 100197f4 <_SsiWriteInterruptRtl8195a+0x48> -1001989a: b123 cbz r3, 100198a6 <_SsiWriteInterruptRtl8195a+0xfa> -1001989c: 781b ldrb r3, [r3, #0] -1001989e: 7013 strb r3, [r2, #0] -100198a0: 6d63 ldr r3, [r4, #84] ; 0x54 -100198a2: 3301 adds r3, #1 -100198a4: e7cd b.n 10019842 <_SsiWriteInterruptRtl8195a+0x96> -100198a6: f894 108a ldrb.w r1, [r4, #138] ; 0x8a -100198aa: 2901 cmp r1, #1 -100198ac: bf08 it eq -100198ae: 7013 strbeq r3, [r2, #0] -100198b0: e7ce b.n 10019850 <_SsiWriteInterruptRtl8195a+0xa4> -100198b2: bf00 nop -100198b4: 00008b91 .word 0x00008b91 -100198b8: 00008521 .word 0x00008521 -100198bc: 40042028 .word 0x40042028 -100198c0: 000f4240 .word 0x000f4240 -100198c4: 00008aa5 .word 0x00008aa5 -100198c8: 40042060 .word 0x40042060 - -100198cc <_SsiReadInterruptRtl8195a>: -100198cc: b537 push {r0, r1, r2, r4, r5, lr} -100198ce: 4b27 ldr r3, [pc, #156] ; (1001996c <_SsiReadInterruptRtl8195a+0xa0>) -100198d0: 4604 mov r4, r0 -100198d2: 4798 blx r3 -100198d4: 9001 str r0, [sp, #4] -100198d6: 9b01 ldr r3, [sp, #4] -100198d8: b313 cbz r3, 10019920 <_SsiReadInterruptRtl8195a+0x54> -100198da: f894 5084 ldrb.w r5, [r4, #132] ; 0x84 -100198de: 4620 mov r0, r4 -100198e0: 4b23 ldr r3, [pc, #140] ; (10019970 <_SsiReadInterruptRtl8195a+0xa4>) -100198e2: 4798 blx r3 -100198e4: 4a23 ldr r2, [pc, #140] ; (10019974 <_SsiReadInterruptRtl8195a+0xa8>) -100198e6: 02ad lsls r5, r5, #10 -100198e8: 442a add r2, r5 -100198ea: b1a8 cbz r0, 10019918 <_SsiReadInterruptRtl8195a+0x4c> -100198ec: 6ca3 ldr r3, [r4, #72] ; 0x48 -100198ee: 2b00 cmp r3, #0 -100198f0: d032 beq.n 10019958 <_SsiReadInterruptRtl8195a+0x8c> -100198f2: f894 1082 ldrb.w r1, [r4, #130] ; 0x82 -100198f6: 2907 cmp r1, #7 -100198f8: 6811 ldr r1, [r2, #0] -100198fa: bfdb ittet le -100198fc: 7019 strble r1, [r3, #0] -100198fe: 6ca3 ldrle r3, [r4, #72] ; 0x48 -10019900: f823 1b02 strhgt.w r1, [r3], #2 -10019904: 3301 addle r3, #1 -10019906: 64a3 str r3, [r4, #72] ; 0x48 -10019908: 6e63 ldr r3, [r4, #100] ; 0x64 -1001990a: b10b cbz r3, 10019910 <_SsiReadInterruptRtl8195a+0x44> -1001990c: 3b01 subs r3, #1 -1001990e: 6663 str r3, [r4, #100] ; 0x64 -10019910: 6e63 ldr r3, [r4, #100] ; 0x64 -10019912: 3801 subs r0, #1 -10019914: 2b00 cmp r3, #0 -10019916: d1e8 bne.n 100198ea <_SsiReadInterruptRtl8195a+0x1e> -10019918: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 -1001991c: 07db lsls r3, r3, #31 -1001991e: d41d bmi.n 1001995c <_SsiReadInterruptRtl8195a+0x90> -10019920: 6e62 ldr r2, [r4, #100] ; 0x64 -10019922: b142 cbz r2, 10019936 <_SsiReadInterruptRtl8195a+0x6a> -10019924: 6ee3 ldr r3, [r4, #108] ; 0x6c -10019926: 3301 adds r3, #1 -10019928: 429a cmp r2, r3 -1001992a: d204 bcs.n 10019936 <_SsiReadInterruptRtl8195a+0x6a> -1001992c: 2300 movs r3, #0 -1001992e: 4620 mov r0, r4 -10019930: 66e3 str r3, [r4, #108] ; 0x6c -10019932: 4b11 ldr r3, [pc, #68] ; (10019978 <_SsiReadInterruptRtl8195a+0xac>) -10019934: 4798 blx r3 -10019936: 6e63 ldr r3, [r4, #100] ; 0x64 -10019938: b963 cbnz r3, 10019954 <_SsiReadInterruptRtl8195a+0x88> -1001993a: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 -1001993e: 4620 mov r0, r4 -10019940: f023 031c bic.w r3, r3, #28 -10019944: f884 3085 strb.w r3, [r4, #133] ; 0x85 -10019948: 4b0c ldr r3, [pc, #48] ; (1001997c <_SsiReadInterruptRtl8195a+0xb0>) -1001994a: 4798 blx r3 -1001994c: 6c23 ldr r3, [r4, #64] ; 0x40 -1001994e: b10b cbz r3, 10019954 <_SsiReadInterruptRtl8195a+0x88> -10019950: 6c60 ldr r0, [r4, #68] ; 0x44 -10019952: 4798 blx r3 -10019954: b003 add sp, #12 -10019956: bd30 pop {r4, r5, pc} -10019958: 6813 ldr r3, [r2, #0] -1001995a: e7d5 b.n 10019908 <_SsiReadInterruptRtl8195a+0x3c> -1001995c: 6f23 ldr r3, [r4, #112] ; 0x70 -1001995e: 2b00 cmp r3, #0 -10019960: d0de beq.n 10019920 <_SsiReadInterruptRtl8195a+0x54> -10019962: 4620 mov r0, r4 -10019964: f7ff ff22 bl 100197ac <_SsiWriteInterruptRtl8195a> -10019968: e7da b.n 10019920 <_SsiReadInterruptRtl8195a+0x54> -1001996a: bf00 nop -1001996c: 00008c09 .word 0x00008c09 -10019970: 00008a2d .word 0x00008a2d -10019974: 40042060 .word 0x40042060 -10019978: 000088c9 .word 0x000088c9 -1001997c: 00008521 .word 0x00008521 - -10019980 <_SsiIrqHandleRtl8195a>: -10019980: b570 push {r4, r5, r6, lr} -10019982: 4b24 ldr r3, [pc, #144] ; (10019a14 <_SsiIrqHandleRtl8195a+0x94>) -10019984: 4606 mov r6, r0 -10019986: 4798 blx r3 -10019988: 0783 lsls r3, r0, #30 -1001998a: 4605 mov r5, r0 -1001998c: f896 4084 ldrb.w r4, [r6, #132] ; 0x84 -10019990: d50d bpl.n 100199ae <_SsiIrqHandleRtl8195a+0x2e> -10019992: 4b21 ldr r3, [pc, #132] ; (10019a18 <_SsiIrqHandleRtl8195a+0x98>) -10019994: 681b ldr r3, [r3, #0] -10019996: 0518 lsls r0, r3, #20 -10019998: d503 bpl.n 100199a2 <_SsiIrqHandleRtl8195a+0x22> -1001999a: 4621 mov r1, r4 -1001999c: 481f ldr r0, [pc, #124] ; (10019a1c <_SsiIrqHandleRtl8195a+0x9c>) -1001999e: 4b20 ldr r3, [pc, #128] ; (10019a20 <_SsiIrqHandleRtl8195a+0xa0>) -100199a0: 4798 blx r3 -100199a2: f504 1380 add.w r3, r4, #1048576 ; 0x100000 -100199a6: f503 7384 add.w r3, r3, #264 ; 0x108 -100199aa: 029b lsls r3, r3, #10 -100199ac: 6b9b ldr r3, [r3, #56] ; 0x38 -100199ae: 0769 lsls r1, r5, #29 -100199b0: bf41 itttt mi -100199b2: f504 1380 addmi.w r3, r4, #1048576 ; 0x100000 -100199b6: f503 7384 addmi.w r3, r3, #264 ; 0x108 -100199ba: 029b lslmi r3, r3, #10 -100199bc: 6c1b ldrmi r3, [r3, #64] ; 0x40 -100199be: 072a lsls r2, r5, #28 -100199c0: d50d bpl.n 100199de <_SsiIrqHandleRtl8195a+0x5e> -100199c2: 4b15 ldr r3, [pc, #84] ; (10019a18 <_SsiIrqHandleRtl8195a+0x98>) -100199c4: 681b ldr r3, [r3, #0] -100199c6: 051b lsls r3, r3, #20 -100199c8: d503 bpl.n 100199d2 <_SsiIrqHandleRtl8195a+0x52> -100199ca: 4621 mov r1, r4 -100199cc: 4815 ldr r0, [pc, #84] ; (10019a24 <_SsiIrqHandleRtl8195a+0xa4>) -100199ce: 4b14 ldr r3, [pc, #80] ; (10019a20 <_SsiIrqHandleRtl8195a+0xa0>) -100199d0: 4798 blx r3 -100199d2: f504 1380 add.w r3, r4, #1048576 ; 0x100000 -100199d6: f503 7384 add.w r3, r3, #264 ; 0x108 -100199da: 029b lsls r3, r3, #10 -100199dc: 6bdb ldr r3, [r3, #60] ; 0x3c -100199de: 06a8 lsls r0, r5, #26 -100199e0: bf41 itttt mi -100199e2: f504 1480 addmi.w r4, r4, #1048576 ; 0x100000 -100199e6: f504 7484 addmi.w r4, r4, #264 ; 0x108 -100199ea: 02a4 lslmi r4, r4, #10 -100199ec: 6c63 ldrmi r3, [r4, #68] ; 0x44 -100199ee: 06e9 lsls r1, r5, #27 -100199f0: d502 bpl.n 100199f8 <_SsiIrqHandleRtl8195a+0x78> -100199f2: 4630 mov r0, r6 -100199f4: f7ff ff6a bl 100198cc <_SsiReadInterruptRtl8195a> -100199f8: 07ea lsls r2, r5, #31 -100199fa: d405 bmi.n 10019a08 <_SsiIrqHandleRtl8195a+0x88> -100199fc: f896 3085 ldrb.w r3, [r6, #133] ; 0x85 -10019a00: 07db lsls r3, r3, #31 -10019a02: d504 bpl.n 10019a0e <_SsiIrqHandleRtl8195a+0x8e> -10019a04: 6f33 ldr r3, [r6, #112] ; 0x70 -10019a06: b113 cbz r3, 10019a0e <_SsiIrqHandleRtl8195a+0x8e> -10019a08: 4630 mov r0, r6 -10019a0a: f7ff fecf bl 100197ac <_SsiWriteInterruptRtl8195a> -10019a0e: 2000 movs r0, #0 -10019a10: bd70 pop {r4, r5, r6, pc} -10019a12: bf00 nop -10019a14: 000090d9 .word 0x000090d9 -10019a18: 10000314 .word 0x10000314 -10019a1c: 10040c49 .word 0x10040c49 -10019a20: 0000f39d .word 0x0000f39d -10019a24: 10040c82 .word 0x10040c82 - -10019a28 : -10019a28: b570 push {r4, r5, r6, lr} -10019a2a: 6806 ldr r6, [r0, #0] -10019a2c: 6845 ldr r5, [r0, #4] -10019a2e: 4604 mov r4, r0 -10019a30: 69f3 ldr r3, [r6, #28] -10019a32: 4628 mov r0, r5 -10019a34: 4798 blx r3 -10019a36: 6a73 ldr r3, [r6, #36] ; 0x24 -10019a38: 4628 mov r0, r5 -10019a3a: 4798 blx r3 -10019a3c: 6933 ldr r3, [r6, #16] -10019a3e: 4628 mov r0, r5 -10019a40: 4798 blx r3 -10019a42: 2100 movs r1, #0 -10019a44: 4620 mov r0, r4 -10019a46: 6721 str r1, [r4, #112] ; 0x70 -10019a48: f7ff fea4 bl 10019794 -10019a4c: f894 3085 ldrb.w r3, [r4, #133] ; 0x85 -10019a50: 4620 mov r0, r4 -10019a52: f043 0301 orr.w r3, r3, #1 -10019a56: f884 3085 strb.w r3, [r4, #133] ; 0x85 -10019a5a: 4b04 ldr r3, [pc, #16] ; (10019a6c ) -10019a5c: 4798 blx r3 -10019a5e: 6ce3 ldr r3, [r4, #76] ; 0x4c -10019a60: b11b cbz r3, 10019a6a -10019a62: 6d20 ldr r0, [r4, #80] ; 0x50 -10019a64: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10019a68: 4718 bx r3 -10019a6a: bd70 pop {r4, r5, r6, pc} -10019a6c: 00008521 .word 0x00008521 - -10019a70 : -10019a70: b538 push {r3, r4, r5, lr} -10019a72: 460d mov r5, r1 -10019a74: 4613 mov r3, r2 -10019a76: b942 cbnz r2, 10019a8a -10019a78: 4b0e ldr r3, [pc, #56] ; (10019ab4 ) -10019a7a: 681b ldr r3, [r3, #0] -10019a7c: 051b lsls r3, r3, #20 -10019a7e: d502 bpl.n 10019a86 -10019a80: 480d ldr r0, [pc, #52] ; (10019ab8 ) -10019a82: 4b0e ldr r3, [pc, #56] ; (10019abc ) -10019a84: 4798 blx r3 -10019a86: 2003 movs r0, #3 -10019a88: bd38 pop {r3, r4, r5, pc} -10019a8a: f890 2082 ldrb.w r2, [r0, #130] ; 0x82 -10019a8e: 6f41 ldr r1, [r0, #116] ; 0x74 -10019a90: 2a07 cmp r2, #7 -10019a92: bfc8 it gt -10019a94: 085b lsrgt r3, r3, #1 -10019a96: 6703 str r3, [r0, #112] ; 0x70 -10019a98: f7ff fe7c bl 10019794 -10019a9c: f890 3085 ldrb.w r3, [r0, #133] ; 0x85 -10019aa0: 6545 str r5, [r0, #84] ; 0x54 -10019aa2: f043 0303 orr.w r3, r3, #3 -10019aa6: f880 3085 strb.w r3, [r0, #133] ; 0x85 -10019aaa: 4b05 ldr r3, [pc, #20] ; (10019ac0 ) -10019aac: 4798 blx r3 -10019aae: 2000 movs r0, #0 -10019ab0: bd38 pop {r3, r4, r5, pc} -10019ab2: bf00 nop -10019ab4: 10000314 .word 0x10000314 -10019ab8: 10040b26 .word 0x10040b26 -10019abc: 0000f39d .word 0x0000f39d -10019ac0: 00008521 .word 0x00008521 - -10019ac4 : -10019ac4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10019ac8: 4605 mov r5, r0 -10019aca: 2800 cmp r0, #0 -10019acc: d05d beq.n 10019b8a -10019ace: 6844 ldr r4, [r0, #4] -10019ad0: b944 cbnz r4, 10019ae4 -10019ad2: 4b39 ldr r3, [pc, #228] ; (10019bb8 ) -10019ad4: 681b ldr r3, [r3, #0] -10019ad6: 051b lsls r3, r3, #20 -10019ad8: d557 bpl.n 10019b8a -10019ada: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -10019ade: 4837 ldr r0, [pc, #220] ; (10019bbc ) -10019ae0: 4b37 ldr r3, [pc, #220] ; (10019bc0 ) -10019ae2: 4718 bx r3 -10019ae4: f890 6084 ldrb.w r6, [r0, #132] ; 0x84 -10019ae8: 4b36 ldr r3, [pc, #216] ; (10019bc4 ) -10019aea: 2268 movs r2, #104 ; 0x68 -10019aec: 2100 movs r1, #0 -10019aee: 4620 mov r0, r4 -10019af0: 4798 blx r3 -10019af2: f895 3083 ldrb.w r3, [r5, #131] ; 0x83 -10019af6: f043 0302 orr.w r3, r3, #2 -10019afa: f885 3083 strb.w r3, [r5, #131] ; 0x83 -10019afe: f895 3082 ldrb.w r3, [r5, #130] ; 0x82 -10019b02: 2b07 cmp r3, #7 -10019b04: bfcc ite gt -10019b06: 2330 movgt r3, #48 ; 0x30 -10019b08: 2338 movle r3, #56 ; 0x38 -10019b0a: 2e01 cmp r6, #1 -10019b0c: 65eb str r3, [r5, #92] ; 0x5c -10019b0e: d004 beq.n 10019b1a -10019b10: d348 bcc.n 10019ba4 -10019b12: 2e02 cmp r6, #2 -10019b14: d03b beq.n 10019b8e -10019b16: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10019b1a: 46b6 mov lr, r6 -10019b1c: 221b movs r2, #27 -10019b1e: f240 2702 movw r7, #514 ; 0x202 -10019b22: f04f 0806 mov.w r8, #6 -10019b26: f8df c0a4 ldr.w ip, [pc, #164] ; 10019bcc -10019b2a: 2101 movs r1, #1 -10019b2c: f894 303d ldrb.w r3, [r4, #61] ; 0x3d -10019b30: f884 6062 strb.w r6, [r4, #98] ; 0x62 -10019b34: f043 0302 orr.w r3, r3, #2 -10019b38: 2611 movs r6, #17 -10019b3a: f884 303d strb.w r3, [r4, #61] ; 0x3d -10019b3e: 2300 movs r3, #0 -10019b40: 60e1 str r1, [r4, #12] -10019b42: 64e1 str r1, [r4, #76] ; 0x4c -10019b44: 6221 str r1, [r4, #32] -10019b46: 2102 movs r1, #2 -10019b48: f894 0028 ldrb.w r0, [r4, #40] ; 0x28 -10019b4c: f884 6064 strb.w r6, [r4, #100] ; 0x64 -10019b50: f894 6063 ldrb.w r6, [r4, #99] ; 0x63 -10019b54: 64a3 str r3, [r4, #72] ; 0x48 -10019b56: 6263 str r3, [r4, #36] ; 0x24 -10019b58: 6123 str r3, [r4, #16] -10019b5a: 61e3 str r3, [r4, #28] -10019b5c: 4b1a ldr r3, [pc, #104] ; (10019bc8 ) -10019b5e: f046 0603 orr.w r6, r6, #3 -10019b62: f040 0021 orr.w r0, r0, #33 ; 0x21 -10019b66: f884 803b strb.w r8, [r4, #59] ; 0x3b -10019b6a: f8c4 c004 str.w ip, [r4, #4] -10019b6e: f884 e061 strb.w lr, [r4, #97] ; 0x61 -10019b72: 60a7 str r7, [r4, #8] -10019b74: f884 6063 strb.w r6, [r4, #99] ; 0x63 -10019b78: f884 0028 strb.w r0, [r4, #40] ; 0x28 -10019b7c: 6161 str r1, [r4, #20] -10019b7e: 61a1 str r1, [r4, #24] -10019b80: 622b str r3, [r5, #32] -10019b82: 230a movs r3, #10 -10019b84: 62ad str r5, [r5, #40] ; 0x28 -10019b86: 626a str r2, [r5, #36] ; 0x24 -10019b88: 62eb str r3, [r5, #44] ; 0x2c -10019b8a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10019b8e: 2217 movs r2, #23 -10019b90: f640 0708 movw r7, #2056 ; 0x808 -10019b94: f04f 080f mov.w r8, #15 -10019b98: f04f 0e03 mov.w lr, #3 -10019b9c: 2600 movs r6, #0 -10019b9e: f8df c030 ldr.w ip, [pc, #48] ; 10019bd0 -10019ba2: e7c2 b.n 10019b2a -10019ba4: 2215 movs r2, #21 -10019ba6: f240 2702 movw r7, #514 ; 0x202 -10019baa: f04f 0804 mov.w r8, #4 -10019bae: f04f 0e01 mov.w lr, #1 -10019bb2: f8df c020 ldr.w ip, [pc, #32] ; 10019bd4 -10019bb6: e7b8 b.n 10019b2a -10019bb8: 10000314 .word 0x10000314 -10019bbc: 10040c09 .word 0x10040c09 -10019bc0: 0000f39d .word 0x0000f39d -10019bc4: 0000f511 .word 0x0000f511 -10019bc8: 10019a29 .word 0x10019a29 -10019bcc: 40042460 .word 0x40042460 -10019bd0: 40042860 .word 0x40042860 -10019bd4: 40042060 .word 0x40042060 - -10019bd8 : -10019bd8: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -10019bdc: f890 5084 ldrb.w r5, [r0, #132] ; 0x84 -10019be0: 4604 mov r4, r0 -10019be2: 2d02 cmp r5, #2 -10019be4: bf08 it eq -10019be6: 2600 moveq r6, #0 -10019be8: f8d0 9004 ldr.w r9, [r0, #4] -10019bec: f8d0 8008 ldr.w r8, [r0, #8] -10019bf0: bf1c itt ne -10019bf2: f899 703b ldrbne.w r7, [r9, #59] ; 0x3b -10019bf6: f898 603a ldrbne.w r6, [r8, #58] ; 0x3a -10019bfa: 4b3c ldr r3, [pc, #240] ; (10019cec ) -10019bfc: bf1a itte ne -10019bfe: 3710 addne r7, #16 -10019c00: 3610 addne r6, #16 -10019c02: 4637 moveq r7, r6 -10019c04: 4798 blx r3 -10019c06: f894 2083 ldrb.w r2, [r4, #131] ; 0x83 -10019c0a: 4b39 ldr r3, [pc, #228] ; (10019cf0 ) -10019c0c: 0791 lsls r1, r2, #30 -10019c0e: 681b ldr r3, [r3, #0] -10019c10: d527 bpl.n 10019c62 -10019c12: f899 0062 ldrb.w r0, [r9, #98] ; 0x62 -10019c16: 4937 ldr r1, [pc, #220] ; (10019cf4 ) -10019c18: 4a37 ldr r2, [pc, #220] ; (10019cf8 ) -10019c1a: 2800 cmp r0, #0 -10019c1c: d148 bne.n 10019cb0 -10019c1e: 6808 ldr r0, [r1, #0] -10019c20: f440 3080 orr.w r0, r0, #65536 ; 0x10000 -10019c24: 6008 str r0, [r1, #0] -10019c26: 6811 ldr r1, [r2, #0] -10019c28: f441 5100 orr.w r1, r1, #8192 ; 0x2000 -10019c2c: 6011 str r1, [r2, #0] -10019c2e: b127 cbz r7, 10019c3a -10019c30: 2201 movs r2, #1 -10019c32: fa02 f707 lsl.w r7, r2, r7 -10019c36: ea23 0307 bic.w r3, r3, r7 -10019c3a: 6de2 ldr r2, [r4, #92] ; 0x5c -10019c3c: f002 013f and.w r1, r2, #63 ; 0x3f -10019c40: f505 1280 add.w r2, r5, #1048576 ; 0x100000 -10019c44: f502 7284 add.w r2, r2, #264 ; 0x108 -10019c48: 0292 lsls r2, r2, #10 -10019c4a: 6511 str r1, [r2, #80] ; 0x50 -10019c4c: f894 2084 ldrb.w r2, [r4, #132] ; 0x84 -10019c50: f502 1280 add.w r2, r2, #1048576 ; 0x100000 -10019c54: f502 7284 add.w r2, r2, #264 ; 0x108 -10019c58: 0292 lsls r2, r2, #10 -10019c5a: 6cd1 ldr r1, [r2, #76] ; 0x4c -10019c5c: f041 0102 orr.w r1, r1, #2 -10019c60: 64d1 str r1, [r2, #76] ; 0x4c -10019c62: f894 2083 ldrb.w r2, [r4, #131] ; 0x83 -10019c66: 07d2 lsls r2, r2, #31 -10019c68: d51b bpl.n 10019ca2 -10019c6a: f898 0062 ldrb.w r0, [r8, #98] ; 0x62 -10019c6e: 4921 ldr r1, [pc, #132] ; (10019cf4 ) -10019c70: 4a21 ldr r2, [pc, #132] ; (10019cf8 ) -10019c72: bb60 cbnz r0, 10019cce -10019c74: 6808 ldr r0, [r1, #0] -10019c76: f440 3080 orr.w r0, r0, #65536 ; 0x10000 -10019c7a: 6008 str r0, [r1, #0] -10019c7c: 6811 ldr r1, [r2, #0] -10019c7e: f441 5100 orr.w r1, r1, #8192 ; 0x2000 -10019c82: 6011 str r1, [r2, #0] -10019c84: b126 cbz r6, 10019c90 -10019c86: 2201 movs r2, #1 -10019c88: fa02 f606 lsl.w r6, r2, r6 -10019c8c: ea23 0306 bic.w r3, r3, r6 -10019c90: 6da2 ldr r2, [r4, #88] ; 0x58 -10019c92: f505 1580 add.w r5, r5, #1048576 ; 0x100000 -10019c96: f505 7584 add.w r5, r5, #264 ; 0x108 -10019c9a: f002 023f and.w r2, r2, #63 ; 0x3f -10019c9e: 02ad lsls r5, r5, #10 -10019ca0: 656a str r2, [r5, #84] ; 0x54 -10019ca2: 4a13 ldr r2, [pc, #76] ; (10019cf0 ) -10019ca4: 4620 mov r0, r4 -10019ca6: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -10019caa: 6013 str r3, [r2, #0] -10019cac: 4b13 ldr r3, [pc, #76] ; (10019cfc ) -10019cae: 4718 bx r3 -10019cb0: 6808 ldr r0, [r1, #0] -10019cb2: f440 2080 orr.w r0, r0, #262144 ; 0x40000 -10019cb6: 6008 str r0, [r1, #0] -10019cb8: 6811 ldr r1, [r2, #0] -10019cba: f441 4180 orr.w r1, r1, #16384 ; 0x4000 -10019cbe: 6011 str r1, [r2, #0] -10019cc0: 2f00 cmp r7, #0 -10019cc2: d0ba beq.n 10019c3a -10019cc4: 2201 movs r2, #1 -10019cc6: fa02 f707 lsl.w r7, r2, r7 -10019cca: 433b orrs r3, r7 -10019ccc: e7b5 b.n 10019c3a -10019cce: 6808 ldr r0, [r1, #0] -10019cd0: f440 2080 orr.w r0, r0, #262144 ; 0x40000 -10019cd4: 6008 str r0, [r1, #0] -10019cd6: 6811 ldr r1, [r2, #0] -10019cd8: f441 4180 orr.w r1, r1, #16384 ; 0x4000 -10019cdc: 6011 str r1, [r2, #0] -10019cde: 2e00 cmp r6, #0 -10019ce0: d0d6 beq.n 10019c90 -10019ce2: 2201 movs r2, #1 -10019ce4: fa02 f606 lsl.w r6, r2, r6 -10019ce8: 4333 orrs r3, r6 -10019cea: e7d1 b.n 10019c90 -10019cec: 00007ef9 .word 0x00007ef9 -10019cf0: 40000304 .word 0x40000304 -10019cf4: 40000230 .word 0x40000230 -10019cf8: 40000210 .word 0x40000210 -10019cfc: 00007e45 .word 0x00007e45 - -10019d00 : -10019d00: b538 push {r3, r4, r5, lr} -10019d02: 4614 mov r4, r2 -10019d04: 460d mov r5, r1 -10019d06: b101 cbz r1, 10019d0a -10019d08: b95a cbnz r2, 10019d22 -10019d0a: 4b1e ldr r3, [pc, #120] ; (10019d84 ) -10019d0c: 681b ldr r3, [r3, #0] -10019d0e: 051a lsls r2, r3, #20 -10019d10: d401 bmi.n 10019d16 -10019d12: 2003 movs r0, #3 -10019d14: bd38 pop {r3, r4, r5, pc} -10019d16: 4622 mov r2, r4 -10019d18: 4629 mov r1, r5 -10019d1a: 481b ldr r0, [pc, #108] ; (10019d88 ) -10019d1c: 4b1b ldr r3, [pc, #108] ; (10019d8c ) -10019d1e: 4798 blx r3 -10019d20: e7f7 b.n 10019d12 -10019d22: 6843 ldr r3, [r0, #4] -10019d24: 6702 str r2, [r0, #112] ; 0x70 -10019d26: 6541 str r1, [r0, #84] ; 0x54 -10019d28: f890 0082 ldrb.w r0, [r0, #130] ; 0x82 -10019d2c: 4315 orrs r5, r2 -10019d2e: 2807 cmp r0, #7 -10019d30: dd13 ble.n 10019d5a -10019d32: f015 0003 ands.w r0, r5, #3 -10019d36: d107 bne.n 10019d48 -10019d38: 2201 movs r2, #1 -10019d3a: 40d4 lsrs r4, r2 -10019d3c: 625a str r2, [r3, #36] ; 0x24 -10019d3e: 615a str r2, [r3, #20] -10019d40: 621a str r2, [r3, #32] -10019d42: 611a str r2, [r3, #16] -10019d44: 855c strh r4, [r3, #42] ; 0x2a -10019d46: bd38 pop {r3, r4, r5, pc} -10019d48: f015 0001 ands.w r0, r5, #1 -10019d4c: d0f4 beq.n 10019d38 -10019d4e: 4b0d ldr r3, [pc, #52] ; (10019d84 ) -10019d50: 681b ldr r3, [r3, #0] -10019d52: 051b lsls r3, r3, #20 -10019d54: d5dd bpl.n 10019d12 -10019d56: 480e ldr r0, [pc, #56] ; (10019d90 ) -10019d58: e7e0 b.n 10019d1c -10019d5a: f015 0503 ands.w r5, r5, #3 -10019d5e: bf17 itett ne -10019d60: 2201 movne r2, #1 -10019d62: 2202 moveq r2, #2 -10019d64: 625a strne r2, [r3, #36] ; 0x24 -10019d66: 2200 movne r2, #0 -10019d68: bf06 itte eq -10019d6a: 40d4 lsreq r4, r2 -10019d6c: 615a streq r2, [r3, #20] -10019d6e: 615a strne r2, [r3, #20] -10019d70: f04f 0000 mov.w r0, #0 -10019d74: f04f 0201 mov.w r2, #1 -10019d78: bf08 it eq -10019d7a: 625d streq r5, [r3, #36] ; 0x24 -10019d7c: 855c strh r4, [r3, #42] ; 0x2a -10019d7e: 621a str r2, [r3, #32] -10019d80: 6118 str r0, [r3, #16] -10019d82: bd38 pop {r3, r4, r5, pc} -10019d84: 10000314 .word 0x10000314 -10019d88: 10040a6a .word 0x10040a6a -10019d8c: 0000f39d .word 0x0000f39d -10019d90: 10040aaa .word 0x10040aaa - -10019d94 : -10019d94: f640 73fc movw r3, #4092 ; 0xffc -10019d98: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10019d9c: fbb2 f6f3 udiv r6, r2, r3 -10019da0: fb03 2316 mls r3, r3, r6, r2 -10019da4: b103 cbz r3, 10019da8 -10019da6: 3601 adds r6, #1 -10019da8: 2e10 cmp r6, #16 -10019daa: d908 bls.n 10019dbe -10019dac: 4b2b ldr r3, [pc, #172] ; (10019e5c ) -10019dae: 681b ldr r3, [r3, #0] -10019db0: 051b lsls r3, r3, #20 -10019db2: d502 bpl.n 10019dba -10019db4: 482a ldr r0, [pc, #168] ; (10019e60 ) -10019db6: 4b2b ldr r3, [pc, #172] ; (10019e64 ) -10019db8: 4798 blx r3 -10019dba: 2003 movs r0, #3 -10019dbc: e028 b.n 10019e10 -10019dbe: f640 77fc movw r7, #4092 ; 0xffc -10019dc2: 6844 ldr r4, [r0, #4] -10019dc4: f04f 0a18 mov.w sl, #24 -10019dc8: 6965 ldr r5, [r4, #20] -10019dca: f894 3063 ldrb.w r3, [r4, #99] ; 0x63 -10019dce: fa07 fe05 lsl.w lr, r7, r5 -10019dd2: 2500 movs r5, #0 -10019dd4: 46a8 mov r8, r5 -10019dd6: f003 030b and.w r3, r3, #11 -10019dda: f043 0314 orr.w r3, r3, #20 -10019dde: f884 3063 strb.w r3, [r4, #99] ; 0x63 -10019de2: f894 3028 ldrb.w r3, [r4, #40] ; 0x28 -10019de6: 64e6 str r6, [r4, #76] ; 0x4c -10019de8: f043 0310 orr.w r3, r3, #16 -10019dec: f884 3028 strb.w r3, [r4, #40] ; 0x28 -10019df0: f100 0c94 add.w ip, r0, #148 ; 0x94 -10019df4: f500 7307 add.w r3, r0, #540 ; 0x21c -10019df8: f106 3bff add.w fp, r6, #4294967295 -10019dfc: 9701 str r7, [sp, #4] -10019dfe: 42ae cmp r6, r5 -10019e00: d109 bne.n 10019e16 -10019e02: f500 7325 add.w r3, r0, #660 ; 0x294 -10019e06: f500 7005 add.w r0, r0, #532 ; 0x214 -10019e0a: 6520 str r0, [r4, #80] ; 0x50 -10019e0c: 2000 movs r0, #0 -10019e0e: 6563 str r3, [r4, #84] ; 0x54 -10019e10: b003 add sp, #12 -10019e12: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10019e16: fb0a 0905 mla r9, sl, r5, r0 -10019e1a: 6867 ldr r7, [r4, #4] -10019e1c: 455d cmp r5, fp -10019e1e: f8c9 1094 str.w r1, [r9, #148] ; 0x94 -10019e22: f8c9 7098 str.w r7, [r9, #152] ; 0x98 -10019e26: f843 cc08 str.w ip, [r3, #-8] -10019e2a: d10e bne.n 10019e4a -10019e2c: 9f01 ldr r7, [sp, #4] -10019e2e: f843 8c04 str.w r8, [r3, #-4] -10019e32: fb07 2915 mls r9, r7, r5, r2 -10019e36: f8c3 807c str.w r8, [r3, #124] ; 0x7c -10019e3a: f8c3 9078 str.w r9, [r3, #120] ; 0x78 -10019e3e: 3501 adds r5, #1 -10019e40: 3308 adds r3, #8 -10019e42: 4471 add r1, lr -10019e44: f10c 0c18 add.w ip, ip, #24 -10019e48: e7d9 b.n 10019dfe -10019e4a: 9f01 ldr r7, [sp, #4] -10019e4c: f103 0980 add.w r9, r3, #128 ; 0x80 -10019e50: f843 3c04 str.w r3, [r3, #-4] -10019e54: 679f str r7, [r3, #120] ; 0x78 -10019e56: f8c3 907c str.w r9, [r3, #124] ; 0x7c -10019e5a: e7f0 b.n 10019e3e -10019e5c: 10000314 .word 0x10000314 -10019e60: 10040a26 .word 0x10040a26 -10019e64: 0000f39d .word 0x0000f39d - -10019e68 : -10019e68: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10019e6c: 2400 movs r4, #0 -10019e6e: 2701 movs r7, #1 -10019e70: 4b0e ldr r3, [pc, #56] ; (10019eac ) -10019e72: 4d0f ldr r5, [pc, #60] ; (10019eb0 ) -10019e74: 681e ldr r6, [r3, #0] -10019e76: f8df 803c ldr.w r8, [pc, #60] ; 10019eb4 -10019e7a: f8df 903c ldr.w r9, [pc, #60] ; 10019eb8 -10019e7e: 1ca3 adds r3, r4, #2 -10019e80: fa07 f303 lsl.w r3, r7, r3 -10019e84: 4233 tst r3, r6 -10019e86: d009 beq.n 10019e9c -10019e88: 682b ldr r3, [r5, #0] -10019e8a: 07db lsls r3, r3, #31 -10019e8c: d506 bpl.n 10019e9c -10019e8e: f858 3024 ldr.w r3, [r8, r4, lsl #2] -10019e92: b113 cbz r3, 10019e9a -10019e94: f859 0024 ldr.w r0, [r9, r4, lsl #2] -10019e98: 4798 blx r3 -10019e9a: 686b ldr r3, [r5, #4] -10019e9c: 3401 adds r4, #1 -10019e9e: 2c06 cmp r4, #6 -10019ea0: f105 0514 add.w r5, r5, #20 -10019ea4: d1eb bne.n 10019e7e -10019ea6: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -10019eaa: bf00 nop -10019eac: 400020a0 .word 0x400020a0 -10019eb0: 40002030 .word 0x40002030 -10019eb4: 10000358 .word 0x10000358 -10019eb8: 1004b840 .word 0x1004b840 - -10019ebc : -10019ebc: b51f push {r0, r1, r2, r3, r4, lr} -10019ebe: 7f02 ldrb r2, [r0, #28] -10019ec0: 2a07 cmp r2, #7 -10019ec2: d909 bls.n 10019ed8 -10019ec4: 4b13 ldr r3, [pc, #76] ; (10019f14 ) -10019ec6: 681b ldr r3, [r3, #0] -10019ec8: 071b lsls r3, r3, #28 -10019eca: d503 bpl.n 10019ed4 -10019ecc: 4912 ldr r1, [pc, #72] ; (10019f18 ) -10019ece: 4813 ldr r0, [pc, #76] ; (10019f1c ) -10019ed0: 4b13 ldr r3, [pc, #76] ; (10019f20 ) -10019ed2: 4798 blx r3 -10019ed4: 2003 movs r0, #3 -10019ed6: e013 b.n 10019f00 -10019ed8: 2a01 cmp r2, #1 -10019eda: 68c3 ldr r3, [r0, #12] -10019edc: d913 bls.n 10019f06 -10019ede: 2105 movs r1, #5 -10019ee0: 9101 str r1, [sp, #4] -10019ee2: 4910 ldr r1, [pc, #64] ; (10019f24 ) -10019ee4: 3a02 subs r2, #2 -10019ee6: 9100 str r1, [sp, #0] -10019ee8: 490f ldr r1, [pc, #60] ; (10019f28 ) -10019eea: f841 3022 str.w r3, [r1, r2, lsl #2] -10019eee: 6941 ldr r1, [r0, #20] -10019ef0: 4b0e ldr r3, [pc, #56] ; (10019f2c ) -10019ef2: f843 1022 str.w r1, [r3, r2, lsl #2] -10019ef6: 9002 str r0, [sp, #8] -10019ef8: 4b0d ldr r3, [pc, #52] ; (10019f30 ) -10019efa: 4668 mov r0, sp -10019efc: 4798 blx r3 -10019efe: 2000 movs r0, #0 -10019f00: b005 add sp, #20 -10019f02: f85d fb04 ldr.w pc, [sp], #4 -10019f06: 2a00 cmp r2, #0 -10019f08: bf14 ite ne -10019f0a: 2203 movne r2, #3 -10019f0c: 2202 moveq r2, #2 -10019f0e: 9300 str r3, [sp, #0] -10019f10: 9201 str r2, [sp, #4] -10019f12: e7f0 b.n 10019ef6 -10019f14: 10000314 .word 0x10000314 -10019f18: 10040d91 .word 0x10040d91 -10019f1c: 10040d3f .word 0x10040d3f -10019f20: 0000f39d .word 0x0000f39d -10019f24: 10019e69 .word 0x10019e69 -10019f28: 10000358 .word 0x10000358 -10019f2c: 1004b840 .word 0x1004b840 -10019f30: 00004029 .word 0x00004029 - -10019f34 : -10019f34: b538 push {r3, r4, r5, lr} -10019f36: 7f03 ldrb r3, [r0, #28] -10019f38: 2b07 cmp r3, #7 -10019f3a: d909 bls.n 10019f50 -10019f3c: 4b14 ldr r3, [pc, #80] ; (10019f90 ) -10019f3e: 681b ldr r3, [r3, #0] -10019f40: 071b lsls r3, r3, #28 -10019f42: d503 bpl.n 10019f4c -10019f44: 4913 ldr r1, [pc, #76] ; (10019f94 ) -10019f46: 4814 ldr r0, [pc, #80] ; (10019f98 ) -10019f48: 4b14 ldr r3, [pc, #80] ; (10019f9c ) -10019f4a: 4798 blx r3 -10019f4c: 2003 movs r0, #3 -10019f4e: bd38 pop {r3, r4, r5, pc} -10019f50: 2b01 cmp r3, #1 -10019f52: f100 050c add.w r5, r0, #12 -10019f56: d910 bls.n 10019f7a -10019f58: 2205 movs r2, #5 -10019f5a: 6102 str r2, [r0, #16] -10019f5c: 1e9a subs r2, r3, #2 -10019f5e: 2300 movs r3, #0 -10019f60: 490f ldr r1, [pc, #60] ; (10019fa0 ) -10019f62: f841 3022 str.w r3, [r1, r2, lsl #2] -10019f66: f851 4023 ldr.w r4, [r1, r3, lsl #2] -10019f6a: b974 cbnz r4, 10019f8a -10019f6c: 3301 adds r3, #1 -10019f6e: 2b06 cmp r3, #6 -10019f70: d1f9 bne.n 10019f66 -10019f72: 4628 mov r0, r5 -10019f74: 4b0b ldr r3, [pc, #44] ; (10019fa4 ) -10019f76: 4798 blx r3 -10019f78: e004 b.n 10019f84 -10019f7a: 2b00 cmp r3, #0 -10019f7c: bf14 ite ne -10019f7e: 2303 movne r3, #3 -10019f80: 2302 moveq r3, #2 -10019f82: 6103 str r3, [r0, #16] -10019f84: 4628 mov r0, r5 -10019f86: 4b08 ldr r3, [pc, #32] ; (10019fa8 ) -10019f88: 4798 blx r3 -10019f8a: 2000 movs r0, #0 -10019f8c: bd38 pop {r3, r4, r5, pc} -10019f8e: bf00 nop -10019f90: 10000314 .word 0x10000314 -10019f94: 10040dce .word 0x10040dce -10019f98: 10040d67 .word 0x10040d67 -10019f9c: 0000f39d .word 0x0000f39d -10019fa0: 10000358 .word 0x10000358 -10019fa4: 0000418d .word 0x0000418d -10019fa8: 00004091 .word 0x00004091 - -10019fac : -10019fac: b510 push {r4, lr} -10019fae: 4604 mov r4, r0 -10019fb0: 4b09 ldr r3, [pc, #36] ; (10019fd8 ) -10019fb2: 7f00 ldrb r0, [r0, #28] -10019fb4: 4798 blx r3 -10019fb6: 7f63 ldrb r3, [r4, #29] -10019fb8: b923 cbnz r3, 10019fc4 -10019fba: 68e3 ldr r3, [r4, #12] -10019fbc: b113 cbz r3, 10019fc4 -10019fbe: 4620 mov r0, r4 -10019fc0: f7ff ffb8 bl 10019f34 -10019fc4: 2301 movs r3, #1 -10019fc6: 4905 ldr r1, [pc, #20] ; (10019fdc ) -10019fc8: 7f22 ldrb r2, [r4, #28] -10019fca: fa03 f202 lsl.w r2, r3, r2 -10019fce: 680b ldr r3, [r1, #0] -10019fd0: ea23 0302 bic.w r3, r3, r2 -10019fd4: 600b str r3, [r1, #0] -10019fd6: bd10 pop {r4, pc} -10019fd8: 0000f069 .word 0x0000f069 -10019fdc: 1000034c .word 0x1000034c - -10019fe0 : -10019fe0: 2314 movs r3, #20 -10019fe2: 4343 muls r3, r0 -10019fe4: 4a03 ldr r2, [pc, #12] ; (10019ff4 ) -10019fe6: 5899 ldr r1, [r3, r2] -10019fe8: 5898 ldr r0, [r3, r2] -10019fea: 4281 cmp r1, r0 -10019fec: bf18 it ne -10019fee: 5898 ldrne r0, [r3, r2] -10019ff0: 4770 bx lr -10019ff2: bf00 nop -10019ff4: 40002004 .word 0x40002004 - -10019ff8 : -10019ff8: 4b0a ldr r3, [pc, #40] ; (1001a024 ) -10019ffa: b510 push {r4, lr} -10019ffc: fbb1 f4f3 udiv r4, r1, r3 -1001a000: fb03 1314 mls r3, r3, r4, r1 -1001a004: 4908 ldr r1, [pc, #32] ; (1001a028 ) -1001a006: 03db lsls r3, r3, #15 -1001a008: fbb3 f3f1 udiv r3, r3, r1 -1001a00c: 2214 movs r2, #20 -1001a00e: eb13 3304 adds.w r3, r3, r4, lsl #12 -1001a012: bf08 it eq -1001a014: 2301 moveq r3, #1 -1001a016: 4350 muls r0, r2 -1001a018: f100 4080 add.w r0, r0, #1073741824 ; 0x40000000 -1001a01c: f500 5000 add.w r0, r0, #8192 ; 0x2000 -1001a020: 6003 str r3, [r0, #0] -1001a022: bd10 pop {r4, pc} -1001a024: 0001e848 .word 0x0001e848 -1001a028: 000f4240 .word 0x000f4240 - -1001a02c : -1001a02c: b570 push {r4, r5, r6, lr} -1001a02e: 2501 movs r5, #1 -1001a030: 4e28 ldr r6, [pc, #160] ; (1001a0d4 ) -1001a032: 7f02 ldrb r2, [r0, #28] -1001a034: 6833 ldr r3, [r6, #0] -1001a036: fa05 f102 lsl.w r1, r5, r2 -1001a03a: 4219 tst r1, r3 -1001a03c: 4604 mov r4, r0 -1001a03e: d009 beq.n 1001a054 -1001a040: 4b25 ldr r3, [pc, #148] ; (1001a0d8 ) -1001a042: 681b ldr r3, [r3, #0] -1001a044: 0719 lsls r1, r3, #28 -1001a046: d503 bpl.n 1001a050 -1001a048: 4924 ldr r1, [pc, #144] ; (1001a0dc ) -1001a04a: 4825 ldr r0, [pc, #148] ; (1001a0e0 ) -1001a04c: 4b25 ldr r3, [pc, #148] ; (1001a0e4 ) -1001a04e: 4798 blx r3 -1001a050: 4628 mov r0, r5 -1001a052: bd70 pop {r4, r5, r6, pc} -1001a054: 6885 ldr r5, [r0, #8] -1001a056: 7f43 ldrb r3, [r0, #29] -1001a058: 0069 lsls r1, r5, #1 -1001a05a: ea41 0183 orr.w r1, r1, r3, lsl #2 -1001a05e: 2314 movs r3, #20 -1001a060: 435a muls r2, r3 -1001a062: 4821 ldr r0, [pc, #132] ; (1001a0e8 ) -1001a064: 5011 str r1, [r2, r0] -1001a066: 7f20 ldrb r0, [r4, #28] -1001a068: b19d cbz r5, 1001a092 -1001a06a: 6821 ldr r1, [r4, #0] -1001a06c: f7ff ffc4 bl 10019ff8 -1001a070: 7f63 ldrb r3, [r4, #29] -1001a072: b9db cbnz r3, 1001a0ac -1001a074: 68e3 ldr r3, [r4, #12] -1001a076: b30b cbz r3, 1001a0bc -1001a078: 4620 mov r0, r4 -1001a07a: f7ff ff1f bl 10019ebc -1001a07e: 4605 mov r5, r0 -1001a080: b180 cbz r0, 1001a0a4 -1001a082: 4b15 ldr r3, [pc, #84] ; (1001a0d8 ) -1001a084: 681b ldr r3, [r3, #0] -1001a086: 071a lsls r2, r3, #28 -1001a088: d5e2 bpl.n 1001a050 -1001a08a: 7f22 ldrb r2, [r4, #28] -1001a08c: 4913 ldr r1, [pc, #76] ; (1001a0dc ) -1001a08e: 4817 ldr r0, [pc, #92] ; (1001a0ec ) -1001a090: e7dc b.n 1001a04c -1001a092: 4358 muls r0, r3 -1001a094: f04f 33ff mov.w r3, #4294967295 -1001a098: f100 4080 add.w r0, r0, #1073741824 ; 0x40000000 -1001a09c: f500 5000 add.w r0, r0, #8192 ; 0x2000 -1001a0a0: 6003 str r3, [r0, #0] -1001a0a2: e7e5 b.n 1001a070 -1001a0a4: f104 000c add.w r0, r4, #12 -1001a0a8: 4b11 ldr r3, [pc, #68] ; (1001a0f0 ) -1001a0aa: 4798 blx r3 -1001a0ac: 2301 movs r3, #1 -1001a0ae: 7f22 ldrb r2, [r4, #28] -1001a0b0: 2500 movs r5, #0 -1001a0b2: 4093 lsls r3, r2 -1001a0b4: 6832 ldr r2, [r6, #0] -1001a0b6: 4313 orrs r3, r2 -1001a0b8: 6033 str r3, [r6, #0] -1001a0ba: e7c9 b.n 1001a050 -1001a0bc: 4b06 ldr r3, [pc, #24] ; (1001a0d8 ) -1001a0be: 681b ldr r3, [r3, #0] -1001a0c0: 071b lsls r3, r3, #28 -1001a0c2: d504 bpl.n 1001a0ce -1001a0c4: 7f22 ldrb r2, [r4, #28] -1001a0c6: 4905 ldr r1, [pc, #20] ; (1001a0dc ) -1001a0c8: 480a ldr r0, [pc, #40] ; (1001a0f4 ) -1001a0ca: 4b06 ldr r3, [pc, #24] ; (1001a0e4 ) -1001a0cc: 4798 blx r3 -1001a0ce: 2503 movs r5, #3 -1001a0d0: e7be b.n 1001a050 -1001a0d2: bf00 nop -1001a0d4: 1000034c .word 0x1000034c -1001a0d8: 10000314 .word 0x10000314 -1001a0dc: 10040db3 .word 0x10040db3 -1001a0e0: 10040cba .word 0x10040cba -1001a0e4: 0000f39d .word 0x0000f39d -1001a0e8: 40002008 .word 0x40002008 -1001a0ec: 10040ce6 .word 0x10040ce6 -1001a0f0: 000040f1 .word 0x000040f1 -1001a0f4: 10040d11 .word 0x10040d11 - -1001a0f8 : -1001a0f8: 2314 movs r3, #20 -1001a0fa: 4358 muls r0, r3 -1001a0fc: 4a02 ldr r2, [pc, #8] ; (1001a108 ) -1001a0fe: 5883 ldr r3, [r0, r2] -1001a100: f023 0304 bic.w r3, r3, #4 -1001a104: 5083 str r3, [r0, r2] -1001a106: 4770 bx lr -1001a108: 40002008 .word 0x40002008 - -1001a10c : -1001a10c: 2314 movs r3, #20 -1001a10e: 4358 muls r0, r3 -1001a110: 4a02 ldr r2, [pc, #8] ; (1001a11c ) -1001a112: 5883 ldr r3, [r0, r2] -1001a114: f043 0301 orr.w r3, r3, #1 -1001a118: 5083 str r3, [r0, r2] -1001a11a: 4770 bx lr -1001a11c: 40002008 .word 0x40002008 - -1001a120 : -1001a120: 2314 movs r3, #20 -1001a122: 4358 muls r0, r3 -1001a124: 4a02 ldr r2, [pc, #8] ; (1001a130 ) -1001a126: 5883 ldr r3, [r0, r2] -1001a128: f023 0301 bic.w r3, r3, #1 -1001a12c: 5083 str r3, [r0, r2] -1001a12e: 4770 bx lr -1001a130: 40002008 .word 0x40002008 - -1001a134 : -1001a134: 4b06 ldr r3, [pc, #24] ; (1001a150 ) -1001a136: f8d3 3280 ldr.w r3, [r3, #640] ; 0x280 - -1001a13a : -1001a13a: 4618 mov r0, r3 -1001a13c: c8f0 ldmia r0!, {r4, r5, r6, r7} -1001a13e: e8b0 0f00 ldmia.w r0!, {r8, r9, sl, fp} -1001a142: f380 8809 msr PSP, r0 -1001a146: f04e 0e0d orr.w lr, lr, #13 -1001a14a: 4770 bx lr -1001a14c: 4770 bx lr -1001a14e: bf00 nop -1001a150: 1004b858 .word 0x1004b858 - -1001a154 : -1001a154: b530 push {r4, r5, lr} -1001a156: b085 sub sp, #20 -1001a158: ac04 add r4, sp, #16 -1001a15a: e904 000f stmdb r4, {r0, r1, r2, r3} -1001a15e: 2300 movs r3, #0 -1001a160: 4c1d ldr r4, [pc, #116] ; (1001a1d8 ) -1001a162: 9d02 ldr r5, [sp, #8] -1001a164: 6023 str r3, [r4, #0] -1001a166: 4b1d ldr r3, [pc, #116] ; (1001a1dc ) -1001a168: 4798 blx r3 -1001a16a: 9b00 ldr r3, [sp, #0] -1001a16c: 4a1c ldr r2, [pc, #112] ; (1001a1e0 ) -1001a16e: 015b lsls r3, r3, #5 -1001a170: fbb0 f0f3 udiv r0, r0, r3 -1001a174: f000 0301 and.w r3, r0, #1 -1001a178: eb03 0050 add.w r0, r3, r0, lsr #1 -1001a17c: 2380 movs r3, #128 ; 0x80 -1001a17e: 6013 str r3, [r2, #0] -1001a180: 4b18 ldr r3, [pc, #96] ; (1001a1e4 ) -1001a182: b2c1 uxtb r1, r0 -1001a184: f3c0 2007 ubfx r0, r0, #8, #8 -1001a188: 6019 str r1, [r3, #0] -1001a18a: 6020 str r0, [r4, #0] -1001a18c: f89d 100d ldrb.w r1, [sp, #13] -1001a190: f89d 300c ldrb.w r3, [sp, #12] -1001a194: 430b orrs r3, r1 -1001a196: f89d 100e ldrb.w r1, [sp, #14] -1001a19a: 430b orrs r3, r1 -1001a19c: 6013 str r3, [r2, #0] -1001a19e: 9a01 ldr r2, [sp, #4] -1001a1a0: 4b11 ldr r3, [pc, #68] ; (1001a1e8 ) -1001a1a2: 601a str r2, [r3, #0] -1001a1a4: 6025 str r5, [r4, #0] -1001a1a6: b1a5 cbz r5, 1001a1d2 -1001a1a8: f04f 7280 mov.w r2, #16777216 ; 0x1000000 -1001a1ac: f2a3 73fc subw r3, r3, #2044 ; 0x7fc -1001a1b0: 490e ldr r1, [pc, #56] ; (1001a1ec ) -1001a1b2: 601a str r2, [r3, #0] -1001a1b4: 68ca ldr r2, [r1, #12] -1001a1b6: 4b0e ldr r3, [pc, #56] ; (1001a1f0 ) -1001a1b8: f422 62e0 bic.w r2, r2, #1792 ; 0x700 -1001a1bc: 0412 lsls r2, r2, #16 -1001a1be: 0c12 lsrs r2, r2, #16 -1001a1c0: 4313 orrs r3, r2 -1001a1c2: 22e0 movs r2, #224 ; 0xe0 -1001a1c4: 60cb str r3, [r1, #12] -1001a1c6: 4b0b ldr r3, [pc, #44] ; (1001a1f4 ) -1001a1c8: f883 2313 strb.w r2, [r3, #787] ; 0x313 -1001a1cc: f44f 2200 mov.w r2, #524288 ; 0x80000 -1001a1d0: 601a str r2, [r3, #0] -1001a1d2: 2000 movs r0, #0 -1001a1d4: b005 add sp, #20 -1001a1d6: bd30 pop {r4, r5, pc} -1001a1d8: 40003004 .word 0x40003004 -1001a1dc: 00000355 .word 0x00000355 -1001a1e0: 4000300c .word 0x4000300c -1001a1e4: 40003000 .word 0x40003000 -1001a1e8: 40003008 .word 0x40003008 -1001a1ec: e000ed00 .word 0xe000ed00 -1001a1f0: 05fa0300 .word 0x05fa0300 -1001a1f4: e000e100 .word 0xe000e100 - -1001a1f8 : -1001a1f8: 4b26 ldr r3, [pc, #152] ; (1001a294 ) -1001a1fa: b500 push {lr} -1001a1fc: 681b ldr r3, [r3, #0] -1001a1fe: 4b26 ldr r3, [pc, #152] ; (1001a298 ) -1001a200: b089 sub sp, #36 ; 0x24 -1001a202: 681a ldr r2, [r3, #0] -1001a204: 2100 movs r1, #0 -1001a206: f422 5280 bic.w r2, r2, #4096 ; 0x1000 -1001a20a: 601a str r2, [r3, #0] -1001a20c: 681a ldr r2, [r3, #0] -1001a20e: 20dc movs r0, #220 ; 0xdc -1001a210: f442 5280 orr.w r2, r2, #4096 ; 0x1000 -1001a214: 601a str r2, [r3, #0] -1001a216: 4a21 ldr r2, [pc, #132] ; (1001a29c ) -1001a218: 6813 ldr r3, [r2, #0] -1001a21a: f443 5380 orr.w r3, r3, #4096 ; 0x1000 -1001a21e: 6013 str r3, [r2, #0] -1001a220: 2201 movs r2, #1 -1001a222: 4b1f ldr r3, [pc, #124] ; (1001a2a0 ) -1001a224: 4798 blx r3 -1001a226: 2258 movs r2, #88 ; 0x58 -1001a228: 9201 str r2, [sp, #4] -1001a22a: 4a1e ldr r2, [pc, #120] ; (1001a2a4 ) -1001a22c: 2300 movs r3, #0 -1001a22e: 9200 str r2, [sp, #0] -1001a230: f44f 4216 mov.w r2, #38400 ; 0x9600 -1001a234: 9204 str r2, [sp, #16] -1001a236: 2203 movs r2, #3 -1001a238: f88d 201e strb.w r2, [sp, #30] -1001a23c: 22c1 movs r2, #193 ; 0xc1 -1001a23e: f88d 301c strb.w r3, [sp, #28] -1001a242: f88d 301d strb.w r3, [sp, #29] -1001a246: 9306 str r3, [sp, #24] -1001a248: 9302 str r3, [sp, #8] -1001a24a: 9303 str r3, [sp, #12] -1001a24c: 9205 str r2, [sp, #20] -1001a24e: ab08 add r3, sp, #32 -1001a250: e913 000f ldmdb r3, {r0, r1, r2, r3} -1001a254: f7ff ff7e bl 1001a154 -1001a258: 4668 mov r0, sp -1001a25a: 4b13 ldr r3, [pc, #76] ; (1001a2a8 ) -1001a25c: 4798 blx r3 -1001a25e: 2205 movs r2, #5 -1001a260: 4b12 ldr r3, [pc, #72] ; (1001a2ac ) -1001a262: 4913 ldr r1, [pc, #76] ; (1001a2b0 ) -1001a264: 601a str r2, [r3, #0] -1001a266: f04f 7280 mov.w r2, #16777216 ; 0x1000000 -1001a26a: f5a3 63ff sub.w r3, r3, #2040 ; 0x7f8 -1001a26e: 601a str r2, [r3, #0] -1001a270: 68ca ldr r2, [r1, #12] -1001a272: 4b10 ldr r3, [pc, #64] ; (1001a2b4 ) -1001a274: f422 62e0 bic.w r2, r2, #1792 ; 0x700 -1001a278: 0412 lsls r2, r2, #16 -1001a27a: 0c12 lsrs r2, r2, #16 -1001a27c: 4313 orrs r3, r2 -1001a27e: 22e0 movs r2, #224 ; 0xe0 -1001a280: 60cb str r3, [r1, #12] -1001a282: 4b0d ldr r3, [pc, #52] ; (1001a2b8 ) -1001a284: f883 2313 strb.w r2, [r3, #787] ; 0x313 -1001a288: f44f 2200 mov.w r2, #524288 ; 0x80000 -1001a28c: 601a str r2, [r3, #0] -1001a28e: b009 add sp, #36 ; 0x24 -1001a290: f85d fb04 ldr.w pc, [sp], #4 -1001a294: 40003000 .word 0x40003000 -1001a298: 40000210 .word 0x40000210 -1001a29c: 40000230 .word 0x40000230 -1001a2a0: 00002b39 .word 0x00002b39 -1001a2a4: 10006369 .word 0x10006369 -1001a2a8: 00004029 .word 0x00004029 -1001a2ac: 40003004 .word 0x40003004 -1001a2b0: e000ed00 .word 0xe000ed00 -1001a2b4: 05fa0300 .word 0x05fa0300 -1001a2b8: e000e100 .word 0xe000e100 - -1001a2bc : -1001a2bc: 4a0b ldr r2, [pc, #44] ; (1001a2ec ) -1001a2be: b508 push {r3, lr} -1001a2c0: 6813 ldr r3, [r2, #0] -1001a2c2: 200a movs r0, #10 -1001a2c4: f443 6380 orr.w r3, r3, #1024 ; 0x400 -1001a2c8: 6013 str r3, [r2, #0] -1001a2ca: f8d2 3090 ldr.w r3, [r2, #144] ; 0x90 -1001a2ce: f043 0310 orr.w r3, r3, #16 -1001a2d2: f8c2 3090 str.w r3, [r2, #144] ; 0x90 -1001a2d6: 4b06 ldr r3, [pc, #24] ; (1001a2f0 ) -1001a2d8: 4798 blx r3 -1001a2da: 2203 movs r2, #3 -1001a2dc: 4b05 ldr r3, [pc, #20] ; (1001a2f4 ) -1001a2de: 601a str r2, [r3, #0] -1001a2e0: 4a05 ldr r2, [pc, #20] ; (1001a2f8 ) -1001a2e2: 6813 ldr r3, [r2, #0] -1001a2e4: f023 5380 bic.w r3, r3, #268435456 ; 0x10000000 -1001a2e8: 6013 str r3, [r2, #0] -1001a2ea: bd08 pop {r3, pc} -1001a2ec: 40000230 .word 0x40000230 -1001a2f0: 00000899 .word 0x00000899 -1001a2f4: 40005034 .word 0x40005034 -1001a2f8: 40005010 .word 0x40005010 - -1001a2fc : -1001a2fc: b530 push {r4, r5, lr} -1001a2fe: 2400 movs r4, #0 -1001a300: 4a43 ldr r2, [pc, #268] ; (1001a410 ) -1001a302: b087 sub sp, #28 -1001a304: 6813 ldr r3, [r2, #0] -1001a306: 2501 movs r5, #1 -1001a308: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 -1001a30c: 6013 str r3, [r2, #0] -1001a30e: 4a41 ldr r2, [pc, #260] ; (1001a414 ) -1001a310: 4668 mov r0, sp -1001a312: 6813 ldr r3, [r2, #0] -1001a314: 2161 movs r1, #97 ; 0x61 -1001a316: f423 6380 bic.w r3, r3, #1024 ; 0x400 -1001a31a: 6013 str r3, [r2, #0] -1001a31c: 4b3e ldr r3, [pc, #248] ; (1001a418 ) -1001a31e: 819c strh r4, [r3, #12] -1001a320: 825c strh r4, [r3, #18] -1001a322: f7fd fdbb bl 10017e9c -1001a326: 4668 mov r0, sp -1001a328: 2101 movs r1, #1 -1001a32a: f7fd fdd2 bl 10017ed2 -1001a32e: 4668 mov r0, sp -1001a330: 2101 movs r1, #1 -1001a332: f7fd fdd7 bl 10017ee4 -1001a336: 4668 mov r0, sp -1001a338: 2101 movs r1, #1 -1001a33a: f7fd fddd bl 10017ef8 -1001a33e: 4668 mov r0, sp -1001a340: 2162 movs r1, #98 ; 0x62 -1001a342: f7fd fdab bl 10017e9c -1001a346: 4668 mov r0, sp -1001a348: 2102 movs r1, #2 -1001a34a: f7fd fdc2 bl 10017ed2 -1001a34e: 4668 mov r0, sp -1001a350: 2101 movs r1, #1 -1001a352: f7fd fdc7 bl 10017ee4 -1001a356: 4621 mov r1, r4 -1001a358: 4668 mov r0, sp -1001a35a: f7fd fdcd bl 10017ef8 -1001a35e: 4668 mov r0, sp -1001a360: 2163 movs r1, #99 ; 0x63 -1001a362: f7fd fd9b bl 10017e9c -1001a366: 4668 mov r0, sp -1001a368: 2102 movs r1, #2 -1001a36a: f7fd fdb2 bl 10017ed2 -1001a36e: 4668 mov r0, sp -1001a370: 2101 movs r1, #1 -1001a372: f7fd fdb7 bl 10017ee4 -1001a376: 4621 mov r1, r4 -1001a378: 4668 mov r0, sp -1001a37a: f7fd fdbd bl 10017ef8 -1001a37e: 4668 mov r0, sp -1001a380: 2164 movs r1, #100 ; 0x64 -1001a382: f7fd fd8b bl 10017e9c -1001a386: 4668 mov r0, sp -1001a388: 2102 movs r1, #2 -1001a38a: f7fd fda2 bl 10017ed2 -1001a38e: 4668 mov r0, sp -1001a390: 2101 movs r1, #1 -1001a392: f7fd fda7 bl 10017ee4 -1001a396: 4621 mov r1, r4 -1001a398: 4668 mov r0, sp -1001a39a: f7fd fdad bl 10017ef8 -1001a39e: 4668 mov r0, sp -1001a3a0: 2191 movs r1, #145 ; 0x91 -1001a3a2: f7fd fd7b bl 10017e9c -1001a3a6: 4668 mov r0, sp -1001a3a8: 2102 movs r1, #2 -1001a3aa: f7fd fd92 bl 10017ed2 -1001a3ae: 4668 mov r0, sp -1001a3b0: 2101 movs r1, #1 -1001a3b2: f7fd fd97 bl 10017ee4 -1001a3b6: 4621 mov r1, r4 -1001a3b8: 4668 mov r0, sp -1001a3ba: f7fd fd9d bl 10017ef8 -1001a3be: 4668 mov r0, sp -1001a3c0: 2192 movs r1, #146 ; 0x92 -1001a3c2: f7fd fd6b bl 10017e9c -1001a3c6: 4668 mov r0, sp -1001a3c8: 2102 movs r1, #2 -1001a3ca: f7fd fd82 bl 10017ed2 -1001a3ce: 4668 mov r0, sp -1001a3d0: 2101 movs r1, #1 -1001a3d2: f7fd fd87 bl 10017ee4 -1001a3d6: 4621 mov r1, r4 -1001a3d8: 4668 mov r0, sp -1001a3da: f7fd fd8d bl 10017ef8 -1001a3de: 4a0f ldr r2, [pc, #60] ; (1001a41c ) -1001a3e0: 4668 mov r0, sp -1001a3e2: 6813 ldr r3, [r2, #0] -1001a3e4: 2191 movs r1, #145 ; 0x91 -1001a3e6: f023 0310 bic.w r3, r3, #16 -1001a3ea: 6013 str r3, [r2, #0] -1001a3ec: 4b0c ldr r3, [pc, #48] ; (1001a420 ) -1001a3ee: 601d str r5, [r3, #0] -1001a3f0: f7fd fd54 bl 10017e9c -1001a3f4: 4629 mov r1, r5 -1001a3f6: 4668 mov r0, sp -1001a3f8: f7fd fd6b bl 10017ed2 -1001a3fc: 4629 mov r1, r5 -1001a3fe: 4668 mov r0, sp -1001a400: f7fd fd70 bl 10017ee4 -1001a404: 4621 mov r1, r4 -1001a406: 4668 mov r0, sp -1001a408: f7fd fd76 bl 10017ef8 -1001a40c: b007 add sp, #28 -1001a40e: bd30 pop {r4, r5, pc} -1001a410: 40005010 .word 0x40005010 -1001a414: 40000230 .word 0x40000230 -1001a418: 10000334 .word 0x10000334 -1001a41c: 400002c0 .word 0x400002c0 -1001a420: 40005034 .word 0x40005034 - -1001a424 : -1001a424: b51f push {r0, r1, r2, r3, r4, lr} -1001a426: 2400 movs r4, #0 -1001a428: 4b08 ldr r3, [pc, #32] ; (1001a44c ) -1001a42a: 4668 mov r0, sp -1001a42c: 9302 str r3, [sp, #8] -1001a42e: 4b08 ldr r3, [pc, #32] ; (1001a450 ) -1001a430: 9401 str r4, [sp, #4] -1001a432: 9300 str r3, [sp, #0] -1001a434: 4b07 ldr r3, [pc, #28] ; (1001a454 ) -1001a436: 9403 str r4, [sp, #12] -1001a438: 4798 blx r3 -1001a43a: 4668 mov r0, sp -1001a43c: 4b06 ldr r3, [pc, #24] ; (1001a458 ) -1001a43e: 4798 blx r3 -1001a440: 4b06 ldr r3, [pc, #24] ; (1001a45c ) -1001a442: f8c3 4284 str.w r4, [r3, #644] ; 0x284 -1001a446: b004 add sp, #16 -1001a448: bd10 pop {r4, pc} -1001a44a: bf00 nop -1001a44c: 1004bae4 .word 0x1004bae4 -1001a450: 1001a52d .word 0x1001a52d -1001a454: 00004029 .word 0x00004029 -1001a458: 000040f1 .word 0x000040f1 -1001a45c: 1004b858 .word 0x1004b858 - -1001a460 : -1001a460: f242 03a3 movw r3, #8355 ; 0x20a3 -1001a464: 4298 cmp r0, r3 -1001a466: bf28 it cs -1001a468: 4618 movcs r0, r3 -1001a46a: 237d movs r3, #125 ; 0x7d -1001a46c: 4358 muls r0, r3 -1001a46e: 2318 movs r3, #24 -1001a470: b510 push {r4, lr} -1001a472: 0900 lsrs r0, r0, #4 -1001a474: f020 04ff bic.w r4, r0, #255 ; 0xff -1001a478: b144 cbz r4, 1001a48c -1001a47a: 680c ldr r4, [r1, #0] -1001a47c: 3b01 subs r3, #1 -1001a47e: 3401 adds r4, #1 -1001a480: f013 03ff ands.w r3, r3, #255 ; 0xff -1001a484: 600c str r4, [r1, #0] -1001a486: ea4f 0050 mov.w r0, r0, lsr #1 -1001a48a: d1f3 bne.n 1001a474 -1001a48c: 680b ldr r3, [r1, #0] -1001a48e: 021b lsls r3, r3, #8 -1001a490: 600b str r3, [r1, #0] -1001a492: 6010 str r0, [r2, #0] -1001a494: bd10 pop {r4, pc} - ... - -1001a498 : -1001a498: 2800 cmp r0, #0 -1001a49a: bf14 ite ne -1001a49c: f44f 0101 movne.w r1, #8454144 ; 0x810000 -1001a4a0: f44f 0100 moveq.w r1, #8388608 ; 0x800000 -1001a4a4: 4b0e ldr r3, [pc, #56] ; (1001a4e0 ) -1001a4a6: b510 push {r4, lr} -1001a4a8: 681a ldr r2, [r3, #0] -1001a4aa: f503 5322 add.w r3, r3, #10368 ; 0x2880 -1001a4ae: 330c adds r3, #12 -1001a4b0: f3c2 1202 ubfx r2, r2, #4, #3 -1001a4b4: 6019 str r1, [r3, #0] -1001a4b6: 6819 ldr r1, [r3, #0] -1001a4b8: 0209 lsls r1, r1, #8 -1001a4ba: d4fc bmi.n 1001a4b6 -1001a4bc: 681c ldr r4, [r3, #0] -1001a4be: f3c4 040d ubfx r4, r4, #0, #14 -1001a4c2: 3401 adds r4, #1 -1001a4c4: b920 cbnz r0, 1001a4d0 -1001a4c6: f640 0355 movw r3, #2133 ; 0x855 -1001a4ca: fbb3 f4f4 udiv r4, r3, r4 -1001a4ce: 3c01 subs r4, #1 -1001a4d0: 2a05 cmp r2, #5 -1001a4d2: d102 bne.n 1001a4da -1001a4d4: 4803 ldr r0, [pc, #12] ; (1001a4e4 ) -1001a4d6: 4b04 ldr r3, [pc, #16] ; (1001a4e8 ) -1001a4d8: 4798 blx r3 -1001a4da: 4620 mov r0, r4 -1001a4dc: bd10 pop {r4, pc} -1001a4de: bf00 nop -1001a4e0: 40000014 .word 0x40000014 -1001a4e4: 10040df2 .word 0x10040df2 -1001a4e8: 0000f39d .word 0x0000f39d - -1001a4ec : -1001a4ec: 4905 ldr r1, [pc, #20] ; (1001a504 ) -1001a4ee: 4b06 ldr r3, [pc, #24] ; (1001a508 ) -1001a4f0: 680a ldr r2, [r1, #0] -1001a4f2: 681b ldr r3, [r3, #0] -1001a4f4: f022 020f bic.w r2, r2, #15 -1001a4f8: f3c3 1302 ubfx r3, r3, #4, #3 -1001a4fc: 4313 orrs r3, r2 -1001a4fe: 600b str r3, [r1, #0] -1001a500: 4770 bx lr -1001a502: bf00 nop -1001a504: 400000f0 .word 0x400000f0 -1001a508: 40000014 .word 0x40000014 - -1001a50c : -1001a50c: 4905 ldr r1, [pc, #20] ; (1001a524 ) -1001a50e: 4b06 ldr r3, [pc, #24] ; (1001a528 ) -1001a510: 680a ldr r2, [r1, #0] -1001a512: 681b ldr r3, [r3, #0] -1001a514: f022 0270 bic.w r2, r2, #112 ; 0x70 -1001a518: 011b lsls r3, r3, #4 -1001a51a: f003 0370 and.w r3, r3, #112 ; 0x70 -1001a51e: 4313 orrs r3, r2 -1001a520: 600b str r3, [r1, #0] -1001a522: 4770 bx lr -1001a524: 40000014 .word 0x40000014 -1001a528: 400000f0 .word 0x400000f0 - -1001a52c : -1001a52c: b510 push {r4, lr} -1001a52e: f7ff ffed bl 1001a50c -1001a532: 4b0c ldr r3, [pc, #48] ; (1001a564 ) -1001a534: 2064 movs r0, #100 ; 0x64 -1001a536: 4798 blx r3 -1001a538: 4a0b ldr r2, [pc, #44] ; (1001a568 ) -1001a53a: 4c0c ldr r4, [pc, #48] ; (1001a56c ) -1001a53c: 6813 ldr r3, [r2, #0] -1001a53e: f043 4380 orr.w r3, r3, #1073741824 ; 0x40000000 -1001a542: 6013 str r3, [r2, #0] -1001a544: 7da2 ldrb r2, [r4, #22] -1001a546: b10a cbz r2, 1001a54c -1001a548: f7ff feb8 bl 1001a2bc -1001a54c: 2300 movs r3, #0 -1001a54e: 4a08 ldr r2, [pc, #32] ; (1001a570 ) -1001a550: 6013 str r3, [r2, #0] -1001a552: 6713 str r3, [r2, #112] ; 0x70 -1001a554: 4b07 ldr r3, [pc, #28] ; (1001a574 ) -1001a556: 681a ldr r2, [r3, #0] -1001a558: 601a str r2, [r3, #0] -1001a55a: 2301 movs r3, #1 -1001a55c: f8c4 3284 str.w r3, [r4, #644] ; 0x284 -1001a560: bd10 pop {r4, pc} -1001a562: bf00 nop -1001a564: 00000899 .word 0x00000899 -1001a568: 40000008 .word 0x40000008 -1001a56c: 1004b858 .word 0x1004b858 -1001a570: 40000090 .word 0x40000090 -1001a574: 40000108 .word 0x40000108 - -1001a578 : -1001a578: f240 72ff movw r2, #2047 ; 0x7ff -1001a57c: b508 push {r3, lr} -1001a57e: 4b41 ldr r3, [pc, #260] ; (1001a684 ) -1001a580: 601a str r2, [r3, #0] -1001a582: 4a41 ldr r2, [pc, #260] ; (1001a688 ) -1001a584: 619a str r2, [r3, #24] -1001a586: f7ff ffc1 bl 1001a50c -1001a58a: 4840 ldr r0, [pc, #256] ; (1001a68c ) -1001a58c: 4b40 ldr r3, [pc, #256] ; (1001a690 ) -1001a58e: 4798 blx r3 -1001a590: 4a40 ldr r2, [pc, #256] ; (1001a694 ) -1001a592: 4b41 ldr r3, [pc, #260] ; (1001a698 ) -1001a594: 601a str r2, [r3, #0] -1001a596: f7ff fe2f bl 1001a1f8 -1001a59a: 4a40 ldr r2, [pc, #256] ; (1001a69c ) -1001a59c: 4940 ldr r1, [pc, #256] ; (1001a6a0 ) -1001a59e: 4841 ldr r0, [pc, #260] ; (1001a6a4 ) -1001a5a0: 4b41 ldr r3, [pc, #260] ; (1001a6a8 ) -1001a5a2: 4798 blx r3 -1001a5a4: 4b41 ldr r3, [pc, #260] ; (1001a6ac ) -1001a5a6: f8d3 225c ldr.w r2, [r3, #604] ; 0x25c -1001a5aa: f8d3 1250 ldr.w r1, [r3, #592] ; 0x250 -1001a5ae: f042 7280 orr.w r2, r2, #16777216 ; 0x1000000 -1001a5b2: f8c3 225c str.w r2, [r3, #604] ; 0x25c -1001a5b6: f841 2c04 str.w r2, [r1, #-4] -1001a5ba: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a5be: f8d3 1258 ldr.w r1, [r3, #600] ; 0x258 -1001a5c2: f842 1c08 str.w r1, [r2, #-8] -1001a5c6: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a5ca: f8d3 1254 ldr.w r1, [r3, #596] ; 0x254 -1001a5ce: f842 1c0c str.w r1, [r2, #-12] -1001a5d2: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a5d6: f8d3 124c ldr.w r1, [r3, #588] ; 0x24c -1001a5da: f842 1c10 str.w r1, [r2, #-16] -1001a5de: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a5e2: f8d3 1228 ldr.w r1, [r3, #552] ; 0x228 -1001a5e6: f842 1c14 str.w r1, [r2, #-20] -1001a5ea: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a5ee: f8d3 1224 ldr.w r1, [r3, #548] ; 0x224 -1001a5f2: f842 1c18 str.w r1, [r2, #-24] -1001a5f6: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a5fa: f8d3 1220 ldr.w r1, [r3, #544] ; 0x220 -1001a5fe: f842 1c1c str.w r1, [r2, #-28] -1001a602: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a606: f8d3 121c ldr.w r1, [r3, #540] ; 0x21c -1001a60a: f842 1c20 str.w r1, [r2, #-32] -1001a60e: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a612: f8d3 1248 ldr.w r1, [r3, #584] ; 0x248 -1001a616: f842 1c24 str.w r1, [r2, #-36] -1001a61a: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a61e: f8d3 1244 ldr.w r1, [r3, #580] ; 0x244 -1001a622: f842 1c28 str.w r1, [r2, #-40] -1001a626: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a62a: f8d3 1240 ldr.w r1, [r3, #576] ; 0x240 -1001a62e: f842 1c2c str.w r1, [r2, #-44] -1001a632: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a636: f8d3 123c ldr.w r1, [r3, #572] ; 0x23c -1001a63a: f842 1c30 str.w r1, [r2, #-48] -1001a63e: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a642: f8d3 1238 ldr.w r1, [r3, #568] ; 0x238 -1001a646: f842 1c34 str.w r1, [r2, #-52] -1001a64a: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a64e: f8d3 1234 ldr.w r1, [r3, #564] ; 0x234 -1001a652: f842 1c38 str.w r1, [r2, #-56] -1001a656: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a65a: f8d3 1230 ldr.w r1, [r3, #560] ; 0x230 -1001a65e: f842 1c3c str.w r1, [r2, #-60] -1001a662: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a666: f8d3 122c ldr.w r1, [r3, #556] ; 0x22c -1001a66a: f842 1c40 str.w r1, [r2, #-64] -1001a66e: f8d3 2250 ldr.w r2, [r3, #592] ; 0x250 -1001a672: 3a40 subs r2, #64 ; 0x40 -1001a674: f8c3 2250 str.w r2, [r3, #592] ; 0x250 -1001a678: f8c3 2280 str.w r2, [r3, #640] ; 0x280 -1001a67c: b662 cpsie i -1001a67e: df00 svc 0 -1001a680: bf00 nop -1001a682: bd08 pop {r3, pc} -1001a684: 40000320 .word 0x40000320 -1001a688: 05555556 .word 0x05555556 -1001a68c: 1ffffffc .word 0x1ffffffc -1001a690: 00003de5 .word 0x00003de5 -1001a694: f0f00000 .word 0xf0f00000 -1001a698: e000ed20 .word 0xe000ed20 -1001a69c: 10015465 .word 0x10015465 -1001a6a0: 10015421 .word 0x10015421 -1001a6a4: 1001a135 .word 0x1001a135 -1001a6a8: 00004019 .word 0x00004019 -1001a6ac: 1004b858 .word 0x1004b858 - -1001a6b0 : -1001a6b0: b508 push {r3, lr} -1001a6b2: 2300 movs r3, #0 -1001a6b4: 20ff movs r0, #255 ; 0xff -1001a6b6: 4a08 ldr r2, [pc, #32] ; (1001a6d8 ) -1001a6b8: 7013 strb r3, [r2, #0] -1001a6ba: 7553 strb r3, [r2, #21] -1001a6bc: 18d1 adds r1, r2, r3 -1001a6be: 3302 adds r3, #2 -1001a6c0: 2b12 cmp r3, #18 -1001a6c2: 7048 strb r0, [r1, #1] -1001a6c4: 7088 strb r0, [r1, #2] -1001a6c6: d1f9 bne.n 1001a6bc -1001a6c8: 2300 movs r3, #0 -1001a6ca: 7593 strb r3, [r2, #22] -1001a6cc: f7ff feaa bl 1001a424 -1001a6d0: 4a02 ldr r2, [pc, #8] ; (1001a6dc ) -1001a6d2: 4b03 ldr r3, [pc, #12] ; (1001a6e0 ) -1001a6d4: 605a str r2, [r3, #4] -1001a6d6: bd08 pop {r3, pc} -1001a6d8: 1004b858 .word 0x1004b858 -1001a6dc: 1001a579 .word 0x1001a579 -1001a6e0: 10000bc8 .word 0x10000bc8 - -1001a6e4 : -1001a6e4: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1001a6e6: 2400 movs r4, #0 -1001a6e8: 4b16 ldr r3, [pc, #88] ; (1001a744 ) -1001a6ea: b2c6 uxtb r6, r0 -1001a6ec: 781a ldrb r2, [r3, #0] -1001a6ee: f3c0 2007 ubfx r0, r0, #8, #8 -1001a6f2: b2e1 uxtb r1, r4 -1001a6f4: 4291 cmp r1, r2 -1001a6f6: d307 bcc.n 1001a708 -1001a6f8: 2808 cmp r0, #8 -1001a6fa: d012 beq.n 1001a722 -1001a6fc: eb03 0142 add.w r1, r3, r2, lsl #1 -1001a700: 704e strb r6, [r1, #1] -1001a702: 7088 strb r0, [r1, #2] -1001a704: 3201 adds r2, #1 -1001a706: e01b b.n 1001a740 -1001a708: 4625 mov r5, r4 -1001a70a: 3401 adds r4, #1 -1001a70c: eb03 0744 add.w r7, r3, r4, lsl #1 -1001a710: f817 7c01 ldrb.w r7, [r7, #-1] -1001a714: 42b7 cmp r7, r6 -1001a716: d1ec bne.n 1001a6f2 -1001a718: 2808 cmp r0, #8 -1001a71a: d004 beq.n 1001a726 -1001a71c: eb03 0345 add.w r3, r3, r5, lsl #1 -1001a720: 7098 strb r0, [r3, #2] -1001a722: b003 add sp, #12 -1001a724: bdf0 pop {r4, r5, r6, r7, pc} -1001a726: 1c48 adds r0, r1, #1 -1001a728: eb03 0440 add.w r4, r3, r0, lsl #1 -1001a72c: 7865 ldrb r5, [r4, #1] -1001a72e: 78a4 ldrb r4, [r4, #2] -1001a730: eb03 0141 add.w r1, r3, r1, lsl #1 -1001a734: 704d strb r5, [r1, #1] -1001a736: 708c strb r4, [r1, #2] -1001a738: b2c1 uxtb r1, r0 -1001a73a: 428a cmp r2, r1 -1001a73c: d8f3 bhi.n 1001a726 -1001a73e: 3a01 subs r2, #1 -1001a740: 701a strb r2, [r3, #0] -1001a742: e7ee b.n 1001a722 -1001a744: 1004b858 .word 0x1004b858 - -1001a748 : -1001a748: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1001a74a: 4607 mov r7, r0 -1001a74c: 2000 movs r0, #0 -1001a74e: 4d0b ldr r5, [pc, #44] ; (1001a77c ) -1001a750: ac02 add r4, sp, #8 -1001a752: f844 0d04 str.w r0, [r4, #-4]! -1001a756: 9000 str r0, [sp, #0] -1001a758: 6028 str r0, [r5, #0] -1001a75a: f7ff fe9d bl 1001a498 -1001a75e: 4622 mov r2, r4 -1001a760: 4606 mov r6, r0 -1001a762: 4669 mov r1, sp -1001a764: 4638 mov r0, r7 -1001a766: f7ff fe7b bl 1001a460 -1001a76a: e89d 0009 ldmia.w sp, {r0, r3} -1001a76e: 4318 orrs r0, r3 -1001a770: ea40 4006 orr.w r0, r0, r6, lsl #16 -1001a774: 6028 str r0, [r5, #0] -1001a776: b003 add sp, #12 -1001a778: bdf0 pop {r4, r5, r6, r7, pc} -1001a77a: bf00 nop -1001a77c: 40000090 .word 0x40000090 - -1001a780 : -1001a780: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -1001a784: 4691 mov r9, r2 -1001a786: f04f 32ff mov.w r2, #4294967295 -1001a78a: 461f mov r7, r3 -1001a78c: 4b2e ldr r3, [pc, #184] ; (1001a848 ) -1001a78e: 4605 mov r5, r0 -1001a790: 681c ldr r4, [r3, #0] -1001a792: 4b2e ldr r3, [pc, #184] ; (1001a84c ) -1001a794: 4608 mov r0, r1 -1001a796: f8d3 8000 ldr.w r8, [r3] -1001a79a: f8c3 2080 str.w r2, [r3, #128] ; 0x80 -1001a79e: f7ff fea5 bl 1001a4ec -1001a7a2: 2300 movs r3, #0 -1001a7a4: 4e2a ldr r6, [pc, #168] ; (1001a850 ) -1001a7a6: 492b ldr r1, [pc, #172] ; (1001a854 ) -1001a7a8: f8c6 3284 str.w r3, [r6, #644] ; 0x284 -1001a7ac: 4b2a ldr r3, [pc, #168] ; (1001a858 ) -1001a7ae: 681a ldr r2, [r3, #0] -1001a7b0: 601a str r2, [r3, #0] -1001a7b2: 4b2a ldr r3, [pc, #168] ; (1001a85c ) -1001a7b4: 4a2a ldr r2, [pc, #168] ; (1001a860 ) -1001a7b6: f1b9 0f00 cmp.w r9, #0 -1001a7ba: bf18 it ne -1001a7bc: 4619 movne r1, r3 -1001a7be: 4b29 ldr r3, [pc, #164] ; (1001a864 ) -1001a7c0: 6019 str r1, [r3, #0] -1001a7c2: 6813 ldr r3, [r2, #0] -1001a7c4: 07e9 lsls r1, r5, #31 -1001a7c6: f023 03ff bic.w r3, r3, #255 ; 0xff -1001a7ca: f043 0302 orr.w r3, r3, #2 -1001a7ce: 6013 str r3, [r2, #0] -1001a7d0: d508 bpl.n 1001a7e4 -1001a7d2: f7ff ffb9 bl 1001a748 -1001a7d6: 4a24 ldr r2, [pc, #144] ; (1001a868 ) -1001a7d8: f044 0401 orr.w r4, r4, #1 -1001a7dc: 6813 ldr r3, [r2, #0] -1001a7de: f443 4300 orr.w r3, r3, #32768 ; 0x8000 -1001a7e2: 6013 str r3, [r2, #0] -1001a7e4: 07aa lsls r2, r5, #30 -1001a7e6: bf48 it mi -1001a7e8: f044 0402 orrmi.w r4, r4, #2 -1001a7ec: 076b lsls r3, r5, #29 -1001a7ee: bf48 it mi -1001a7f0: f044 0410 orrmi.w r4, r4, #16 -1001a7f4: 0728 lsls r0, r5, #28 -1001a7f6: bf48 it mi -1001a7f8: f444 7480 orrmi.w r4, r4, #256 ; 0x100 -1001a7fc: 06e9 lsls r1, r5, #27 -1001a7fe: bf48 it mi -1001a800: f044 5480 orrmi.w r4, r4, #268435456 ; 0x10000000 -1001a804: 06aa lsls r2, r5, #26 -1001a806: bf48 it mi -1001a808: f444 4480 orrmi.w r4, r4, #16384 ; 0x4000 -1001a80c: 062b lsls r3, r5, #24 -1001a80e: bf48 it mi -1001a810: f044 5480 orrmi.w r4, r4, #268435456 ; 0x10000000 -1001a814: f000 f8e4 bl 1001a9e0 -1001a818: 4b0b ldr r3, [pc, #44] ; (1001a848 ) -1001a81a: 601c str r4, [r3, #0] -1001a81c: f896 3284 ldrb.w r3, [r6, #644] ; 0x284 -1001a820: 2b01 cmp r3, #1 -1001a822: d00e beq.n 1001a842 -1001a824: 75b7 strb r7, [r6, #22] -1001a826: b10f cbz r7, 1001a82c -1001a828: f7ff fd68 bl 1001a2fc -1001a82c: 2204 movs r2, #4 -1001a82e: 4b0f ldr r3, [pc, #60] ; (1001a86c ) -1001a830: f44f 7096 mov.w r0, #300 ; 0x12c -1001a834: 601a str r2, [r3, #0] -1001a836: 681b ldr r3, [r3, #0] -1001a838: 4b0d ldr r3, [pc, #52] ; (1001a870 ) -1001a83a: 4798 blx r3 -1001a83c: 4b03 ldr r3, [pc, #12] ; (1001a84c ) -1001a83e: f8c3 8000 str.w r8, [r3] -1001a842: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1001a846: bf00 nop -1001a848: 40000100 .word 0x40000100 -1001a84c: e000e100 .word 0xe000e100 -1001a850: 1004b858 .word 0x1004b858 -1001a854: 74000900 .word 0x74000900 -1001a858: 40000108 .word 0x40000108 -1001a85c: 74003b00 .word 0x74003b00 -1001a860: 40000124 .word 0x40000124 -1001a864: 40000120 .word 0x40000120 -1001a868: 40000090 .word 0x40000090 -1001a86c: 40000118 .word 0x40000118 -1001a870: 00000899 .word 0x00000899 - -1001a874 : -1001a874: b538 push {r3, r4, r5, lr} -1001a876: 4604 mov r4, r0 -1001a878: 460d mov r5, r1 -1001a87a: 4b46 ldr r3, [pc, #280] ; (1001a994 ) -1001a87c: 681a ldr r2, [r3, #0] -1001a87e: f042 4200 orr.w r2, r2, #2147483648 ; 0x80000000 -1001a882: 601a str r2, [r3, #0] -1001a884: 681a ldr r2, [r3, #0] -1001a886: 0c12 lsrs r2, r2, #16 -1001a888: 0412 lsls r2, r2, #16 -1001a88a: f442 4253 orr.w r2, r2, #54016 ; 0xd300 -1001a88e: 601a str r2, [r3, #0] -1001a890: 681a ldr r2, [r3, #0] -1001a892: 0412 lsls r2, r2, #16 -1001a894: d4fc bmi.n 1001a890 -1001a896: 4b40 ldr r3, [pc, #256] ; (1001a998 ) -1001a898: 07e0 lsls r0, r4, #31 -1001a89a: 681a ldr r2, [r3, #0] -1001a89c: 601a str r2, [r3, #0] -1001a89e: d421 bmi.n 1001a8e4 -1001a8a0: 07a1 lsls r1, r4, #30 -1001a8a2: d469 bmi.n 1001a978 -1001a8a4: 2400 movs r4, #0 -1001a8a6: 4b3d ldr r3, [pc, #244] ; (1001a99c ) -1001a8a8: 4a3d ldr r2, [pc, #244] ; (1001a9a0 ) -1001a8aa: f8c3 4284 str.w r4, [r3, #644] ; 0x284 -1001a8ae: 6813 ldr r3, [r2, #0] -1001a8b0: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 -1001a8b4: 6013 str r3, [r2, #0] -1001a8b6: f7ec fb13 bl 10006ee0 -1001a8ba: 4b3a ldr r3, [pc, #232] ; (1001a9a4 ) -1001a8bc: 681a ldr r2, [r3, #0] -1001a8be: f022 0202 bic.w r2, r2, #2 -1001a8c2: 601a str r2, [r3, #0] -1001a8c4: 681a ldr r2, [r3, #0] -1001a8c6: f022 0202 bic.w r2, r2, #2 -1001a8ca: 601a str r2, [r3, #0] -1001a8cc: 4a36 ldr r2, [pc, #216] ; (1001a9a8 ) -1001a8ce: f8c3 42e0 str.w r4, [r3, #736] ; 0x2e0 -1001a8d2: 6813 ldr r3, [r2, #0] -1001a8d4: f023 4380 bic.w r3, r3, #1073741824 ; 0x40000000 -1001a8d8: 6013 str r3, [r2, #0] -1001a8da: 2201 movs r2, #1 -1001a8dc: 4b33 ldr r3, [pc, #204] ; (1001a9ac ) -1001a8de: 601a str r2, [r3, #0] -1001a8e0: bf30 wfi -1001a8e2: bd38 pop {r3, r4, r5, pc} -1001a8e4: 2001 movs r0, #1 -1001a8e6: f7ff fdd7 bl 1001a498 -1001a8ea: 4b31 ldr r3, [pc, #196] ; (1001a9b0 ) -1001a8ec: 2219 movs r2, #25 -1001a8ee: fbb3 f3f0 udiv r3, r3, r0 -1001a8f2: 4353 muls r3, r2 -1001a8f4: 42ab cmp r3, r5 -1001a8f6: bf81 itttt hi -1001a8f8: 2103 movhi r1, #3 -1001a8fa: fbb5 f5f1 udivhi r5, r5, r1 -1001a8fe: f44f 71fa movhi.w r1, #500 ; 0x1f4 -1001a902: 4369 mulhi r1, r5 -1001a904: bf84 itt hi -1001a906: fbb1 f0f0 udivhi r0, r1, r0 -1001a90a: 4350 mulhi r0, r2 -1001a90c: 4a21 ldr r2, [pc, #132] ; (1001a994 ) -1001a90e: bf98 it ls -1001a910: 4828 ldrls r0, [pc, #160] ; (1001a9b4 ) -1001a912: 6813 ldr r3, [r2, #0] -1001a914: b2c1 uxtb r1, r0 -1001a916: 0c1b lsrs r3, r3, #16 -1001a918: 041b lsls r3, r3, #16 -1001a91a: f443 4310 orr.w r3, r3, #36864 ; 0x9000 -1001a91e: 430b orrs r3, r1 -1001a920: 6013 str r3, [r2, #0] -1001a922: 4613 mov r3, r2 -1001a924: 681a ldr r2, [r3, #0] -1001a926: 0412 lsls r2, r2, #16 -1001a928: d4fc bmi.n 1001a924 -1001a92a: 681a ldr r2, [r3, #0] -1001a92c: f3c0 2507 ubfx r5, r0, #8, #8 -1001a930: 0c12 lsrs r2, r2, #16 -1001a932: 0412 lsls r2, r2, #16 -1001a934: f442 4211 orr.w r2, r2, #37120 ; 0x9100 -1001a938: 432a orrs r2, r5 -1001a93a: 4916 ldr r1, [pc, #88] ; (1001a994 ) -1001a93c: 601a str r2, [r3, #0] -1001a93e: 680b ldr r3, [r1, #0] -1001a940: 041b lsls r3, r3, #16 -1001a942: d4fc bmi.n 1001a93e -1001a944: 680a ldr r2, [r1, #0] -1001a946: 4b1c ldr r3, [pc, #112] ; (1001a9b8 ) -1001a948: f3c0 4007 ubfx r0, r0, #16, #8 -1001a94c: 401a ands r2, r3 -1001a94e: f442 4212 orr.w r2, r2, #37376 ; 0x9200 -1001a952: 4310 orrs r0, r2 -1001a954: 4a0f ldr r2, [pc, #60] ; (1001a994 ) -1001a956: 6008 str r0, [r1, #0] -1001a958: 4619 mov r1, r3 -1001a95a: 4610 mov r0, r2 -1001a95c: 6813 ldr r3, [r2, #0] -1001a95e: 041d lsls r5, r3, #16 -1001a960: d4fc bmi.n 1001a95c -1001a962: 6813 ldr r3, [r2, #0] -1001a964: 400b ands r3, r1 -1001a966: f443 4353 orr.w r3, r3, #54016 ; 0xd300 -1001a96a: f043 0380 orr.w r3, r3, #128 ; 0x80 -1001a96e: 6013 str r3, [r2, #0] -1001a970: 6803 ldr r3, [r0, #0] -1001a972: 041a lsls r2, r3, #16 -1001a974: d4fc bmi.n 1001a970 -1001a976: e793 b.n 1001a8a0 -1001a978: 4a06 ldr r2, [pc, #24] ; (1001a994 ) -1001a97a: 6813 ldr r3, [r2, #0] -1001a97c: 0c1b lsrs r3, r3, #16 -1001a97e: 041b lsls r3, r3, #16 -1001a980: f443 4314 orr.w r3, r3, #37888 ; 0x9400 -1001a984: f043 0310 orr.w r3, r3, #16 -1001a988: 6013 str r3, [r2, #0] -1001a98a: 6813 ldr r3, [r2, #0] -1001a98c: 041b lsls r3, r3, #16 -1001a98e: d4fc bmi.n 1001a98a -1001a990: e788 b.n 1001a8a4 -1001a992: bf00 nop -1001a994: 40000094 .word 0x40000094 -1001a998: 40000130 .word 0x40000130 -1001a99c: 1004b858 .word 0x1004b858 -1001a9a0: 40000100 .word 0x40000100 -1001a9a4: 40000040 .word 0x40000040 -1001a9a8: 40000008 .word 0x40000008 -1001a9ac: 40000118 .word 0x40000118 -1001a9b0: 53555408 .word 0x53555408 -1001a9b4: 007fffff .word 0x007fffff -1001a9b8: ffff0000 .word 0xffff0000 - -1001a9bc : -1001a9bc: b430 push {r4, r5} -1001a9be: f1a1 05a0 sub.w r5, r1, #160 ; 0xa0 -1001a9c2: 2d33 cmp r5, #51 ; 0x33 -1001a9c4: d903 bls.n 1001a9ce -1001a9c6: 4c04 ldr r4, [pc, #16] ; (1001a9d8 ) -1001a9c8: 46a4 mov ip, r4 -1001a9ca: bc30 pop {r4, r5} -1001a9cc: 4760 bx ip -1001a9ce: 23ff movs r3, #255 ; 0xff -1001a9d0: bc30 pop {r4, r5} -1001a9d2: 2001 movs r0, #1 -1001a9d4: 7013 strb r3, [r2, #0] -1001a9d6: 4770 bx lr -1001a9d8: 000065f9 .word 0x000065f9 - -1001a9dc : -1001a9dc: 2001 movs r0, #1 -1001a9de: 4770 bx lr - -1001a9e0 : -1001a9e0: f244 0301 movw r3, #16385 ; 0x4001 -1001a9e4: 4a03 ldr r2, [pc, #12] ; (1001a9f4 ) -1001a9e6: 7811 ldrb r1, [r2, #0] -1001a9e8: 0649 lsls r1, r1, #25 -1001a9ea: d401 bmi.n 1001a9f0 -1001a9ec: 3b01 subs r3, #1 -1001a9ee: d1fa bne.n 1001a9e6 -1001a9f0: 4770 bx lr -1001a9f2: bf00 nop -1001a9f4: 40003014 .word 0x40003014 - -1001a9f8 : -1001a9f8: 2001 movs r0, #1 -1001a9fa: 4770 bx lr - -1001a9fc : -1001a9fc: 4a17 ldr r2, [pc, #92] ; (1001aa5c ) -1001a9fe: b530 push {r4, r5, lr} -1001aa00: 6813 ldr r3, [r2, #0] -1001aa02: 2401 movs r4, #1 -1001aa04: f043 0301 orr.w r3, r3, #1 -1001aa08: 6013 str r3, [r2, #0] -1001aa0a: f852 3c60 ldr.w r3, [r2, #-96] -1001aa0e: 4d14 ldr r5, [pc, #80] ; (1001aa60 ) -1001aa10: f443 3380 orr.w r3, r3, #65536 ; 0x10000 -1001aa14: f842 3c60 str.w r3, [r2, #-96] -1001aa18: 4b12 ldr r3, [pc, #72] ; (1001aa64 ) -1001aa1a: b089 sub sp, #36 ; 0x24 -1001aa1c: 681a ldr r2, [r3, #0] -1001aa1e: 4628 mov r0, r5 -1001aa20: f442 4280 orr.w r2, r2, #16384 ; 0x4000 -1001aa24: 601a str r2, [r3, #0] -1001aa26: 681a ldr r2, [r3, #0] -1001aa28: f442 4200 orr.w r2, r2, #32768 ; 0x8000 -1001aa2c: 601a str r2, [r3, #0] -1001aa2e: 4a0e ldr r2, [pc, #56] ; (1001aa68 ) -1001aa30: 6813 ldr r3, [r2, #0] -1001aa32: f023 0310 bic.w r3, r3, #16 -1001aa36: 6013 str r3, [r2, #0] -1001aa38: 2300 movs r3, #0 -1001aa3a: f88d 401d strb.w r4, [sp, #29] -1001aa3e: 9301 str r3, [sp, #4] -1001aa40: 9300 str r3, [sp, #0] -1001aa42: 9302 str r3, [sp, #8] -1001aa44: f88d 401c strb.w r4, [sp, #28] -1001aa48: f7fe fa18 bl 10018e7c -1001aa4c: 686b ldr r3, [r5, #4] -1001aa4e: 4668 mov r0, sp -1001aa50: 4798 blx r3 -1001aa52: 696b ldr r3, [r5, #20] -1001aa54: 4620 mov r0, r4 -1001aa56: 4798 blx r3 -1001aa58: b009 add sp, #36 ; 0x24 -1001aa5a: bd30 pop {r4, r5, pc} -1001aa5c: 40000270 .word 0x40000270 -1001aa60: 10000318 .word 0x10000318 -1001aa64: 40000230 .word 0x40000230 -1001aa68: 40000204 .word 0x40000204 - -1001aa6c : -1001aa6c: 23fe movs r3, #254 ; 0xfe -1001aa6e: b513 push {r0, r1, r4, lr} -1001aa70: aa02 add r2, sp, #8 -1001aa72: f802 3d01 strb.w r3, [r2, #-1]! -1001aa76: 4b05 ldr r3, [pc, #20] ; (1001aa8c ) -1001aa78: 21f8 movs r1, #248 ; 0xf8 -1001aa7a: 6818 ldr r0, [r3, #0] -1001aa7c: 4c04 ldr r4, [pc, #16] ; (1001aa90 ) -1001aa7e: 2307 movs r3, #7 -1001aa80: 47a0 blx r4 -1001aa82: f89d 0007 ldrb.w r0, [sp, #7] -1001aa86: b002 add sp, #8 -1001aa88: bd10 pop {r4, pc} -1001aa8a: bf00 nop -1001aa8c: 400000e8 .word 0x400000e8 -1001aa90: 000065f9 .word 0x000065f9 - -1001aa94 <__low_level_init>: -1001aa94: 4770 bx lr - ... - -1001aa98 : -1001aa98: b508 push {r3, lr} -1001aa9a: 4b04 ldr r3, [pc, #16] ; (1001aaac ) -1001aa9c: 4798 blx r3 -1001aa9e: f000 f915 bl 1001accc -1001aaa2: 2201 movs r2, #1 -1001aaa4: 4b02 ldr r3, [pc, #8] ; (1001aab0 ) -1001aaa6: 701a strb r2, [r3, #0] -1001aaa8: bd08 pop {r3, pc} -1001aaaa: bf00 nop -1001aaac: 0002d7d1 .word 0x0002d7d1 -1001aab0: 1004bae5 .word 0x1004bae5 - -1001aab4 : -1001aab4: b40c push {r2, r3} -1001aab6: b570 push {r4, r5, r6, lr} -1001aab8: b09c sub sp, #112 ; 0x70 -1001aaba: ab20 add r3, sp, #128 ; 0x80 -1001aabc: f853 2b04 ldr.w r2, [r3], #4 -1001aac0: 460c mov r4, r1 -1001aac2: 9301 str r3, [sp, #4] -1001aac4: f44f 7302 mov.w r3, #520 ; 0x208 -1001aac8: f8ad 3014 strh.w r3, [sp, #20] -1001aacc: b1e1 cbz r1, 1001ab08 -1001aace: 1e4b subs r3, r1, #1 -1001aad0: 9304 str r3, [sp, #16] -1001aad2: 9307 str r3, [sp, #28] -1001aad4: f64f 73ff movw r3, #65535 ; 0xffff -1001aad8: 4d0c ldr r5, [pc, #48] ; (1001ab0c ) -1001aada: f8ad 3016 strh.w r3, [sp, #22] -1001aade: 9002 str r0, [sp, #8] -1001aae0: 9006 str r0, [sp, #24] -1001aae2: 9b01 ldr r3, [sp, #4] -1001aae4: a902 add r1, sp, #8 -1001aae6: 6828 ldr r0, [r5, #0] -1001aae8: 4e09 ldr r6, [pc, #36] ; (1001ab10 ) -1001aaea: 47b0 blx r6 -1001aaec: 1c43 adds r3, r0, #1 -1001aaee: bfbe ittt lt -1001aaf0: 228b movlt r2, #139 ; 0x8b -1001aaf2: 682b ldrlt r3, [r5, #0] -1001aaf4: 601a strlt r2, [r3, #0] -1001aaf6: b114 cbz r4, 1001aafe -1001aaf8: 2200 movs r2, #0 -1001aafa: 9b02 ldr r3, [sp, #8] -1001aafc: 701a strb r2, [r3, #0] -1001aafe: b01c add sp, #112 ; 0x70 -1001ab00: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1001ab04: b002 add sp, #8 -1001ab06: 4770 bx lr -1001ab08: 460b mov r3, r1 -1001ab0a: e7e1 b.n 1001aad0 -1001ab0c: 10001c60 .word 0x10001c60 -1001ab10: 0002f661 .word 0x0002f661 - -1001ab14 : -1001ab14: b40e push {r1, r2, r3} -1001ab16: f44f 7102 mov.w r1, #520 ; 0x208 -1001ab1a: b510 push {r4, lr} -1001ab1c: b09d sub sp, #116 ; 0x74 -1001ab1e: f8ad 1014 strh.w r1, [sp, #20] -1001ab22: f06f 4100 mvn.w r1, #2147483648 ; 0x80000000 -1001ab26: 9104 str r1, [sp, #16] -1001ab28: 9107 str r1, [sp, #28] -1001ab2a: f64f 71ff movw r1, #65535 ; 0xffff -1001ab2e: ab1f add r3, sp, #124 ; 0x7c -1001ab30: 9002 str r0, [sp, #8] -1001ab32: 9006 str r0, [sp, #24] -1001ab34: 4808 ldr r0, [pc, #32] ; (1001ab58 ) -1001ab36: f853 2b04 ldr.w r2, [r3], #4 -1001ab3a: f8ad 1016 strh.w r1, [sp, #22] -1001ab3e: 4c07 ldr r4, [pc, #28] ; (1001ab5c ) -1001ab40: a902 add r1, sp, #8 -1001ab42: 6800 ldr r0, [r0, #0] -1001ab44: 9301 str r3, [sp, #4] -1001ab46: 47a0 blx r4 -1001ab48: 2200 movs r2, #0 -1001ab4a: 9b02 ldr r3, [sp, #8] -1001ab4c: 701a strb r2, [r3, #0] -1001ab4e: b01d add sp, #116 ; 0x74 -1001ab50: e8bd 4010 ldmia.w sp!, {r4, lr} -1001ab54: b003 add sp, #12 -1001ab56: 4770 bx lr -1001ab58: 10001c60 .word 0x10001c60 -1001ab5c: 0002f661 .word 0x0002f661 - -1001ab60 : -1001ab60: b40f push {r0, r1, r2, r3} -1001ab62: b537 push {r0, r1, r2, r4, r5, lr} -1001ab64: 4b0c ldr r3, [pc, #48] ; (1001ab98 ) -1001ab66: f993 3000 ldrsb.w r3, [r3] -1001ab6a: b993 cbnz r3, 1001ab92 -1001ab6c: 4d0b ldr r5, [pc, #44] ; (1001ab9c ) -1001ab6e: ab07 add r3, sp, #28 -1001ab70: 6828 ldr r0, [r5, #0] -1001ab72: 9301 str r3, [sp, #4] -1001ab74: 6881 ldr r1, [r0, #8] -1001ab76: 4c0a ldr r4, [pc, #40] ; (1001aba0 ) -1001ab78: 9a06 ldr r2, [sp, #24] -1001ab7a: 47a0 blx r4 -1001ab7c: 4604 mov r4, r0 -1001ab7e: 6828 ldr r0, [r5, #0] -1001ab80: 4b08 ldr r3, [pc, #32] ; (1001aba4 ) -1001ab82: 6881 ldr r1, [r0, #8] -1001ab84: 4798 blx r3 -1001ab86: 4620 mov r0, r4 -1001ab88: b003 add sp, #12 -1001ab8a: e8bd 4030 ldmia.w sp!, {r4, r5, lr} -1001ab8e: b004 add sp, #16 -1001ab90: 4770 bx lr -1001ab92: 2400 movs r4, #0 -1001ab94: e7f7 b.n 1001ab86 -1001ab96: bf00 nop -1001ab98: 1004bae6 .word 0x1004bae6 -1001ab9c: 10001c60 .word 0x10001c60 -1001aba0: 0002f661 .word 0x0002f661 -1001aba4: 0002ef8d .word 0x0002ef8d - -1001aba8 : -1001aba8: 4b00 ldr r3, [pc, #0] ; (1001abac ) -1001abaa: 4718 bx r3 -1001abac: 00028ae1 .word 0x00028ae1 - -1001abb0 : -1001abb0: 4b00 ldr r3, [pc, #0] ; (1001abb4 ) -1001abb2: 4718 bx r3 -1001abb4: 00028b49 .word 0x00028b49 - -1001abb8 : -1001abb8: 4b00 ldr r3, [pc, #0] ; (1001abbc ) -1001abba: 4718 bx r3 -1001abbc: 00028cb5 .word 0x00028cb5 - -1001abc0 : -1001abc0: 4b00 ldr r3, [pc, #0] ; (1001abc4 ) -1001abc2: 4718 bx r3 -1001abc4: 00028d91 .word 0x00028d91 - -1001abc8 : -1001abc8: 4b00 ldr r3, [pc, #0] ; (1001abcc ) -1001abca: 4718 bx r3 -1001abcc: 00028e55 .word 0x00028e55 - -1001abd0 : -1001abd0: 4b00 ldr r3, [pc, #0] ; (1001abd4 ) -1001abd2: 4718 bx r3 -1001abd4: 00028ec9 .word 0x00028ec9 - -1001abd8 : -1001abd8: 4b00 ldr r3, [pc, #0] ; (1001abdc ) -1001abda: 4718 bx r3 -1001abdc: 00028f15 .word 0x00028f15 - -1001abe0 : -1001abe0: 4b00 ldr r3, [pc, #0] ; (1001abe4 ) -1001abe2: 4718 bx r3 -1001abe4: 00028fc5 .word 0x00028fc5 - -1001abe8 : -1001abe8: 4b00 ldr r3, [pc, #0] ; (1001abec ) -1001abea: 4718 bx r3 -1001abec: 0002907d .word 0x0002907d - -1001abf0 : -1001abf0: 4b00 ldr r3, [pc, #0] ; (1001abf4 ) -1001abf2: 4718 bx r3 -1001abf4: 0002960d .word 0x0002960d - -1001abf8 : -1001abf8: 2258 movs r2, #88 ; 0x58 -1001abfa: 4b02 ldr r3, [pc, #8] ; (1001ac04 ) -1001abfc: f04f 30ff mov.w r0, #4294967295 -1001ac00: 601a str r2, [r3, #0] -1001ac02: 4770 bx lr -1001ac04: 10000bc4 .word 0x10000bc4 - -1001ac08 : -1001ac08: 2802 cmp r0, #2 -1001ac0a: bf89 itett hi -1001ac0c: 2209 movhi r2, #9 -1001ac0e: f44f 5300 movls.w r3, #8192 ; 0x2000 -1001ac12: 4b04 ldrhi r3, [pc, #16] ; (1001ac24 ) -1001ac14: f04f 30ff movhi.w r0, #4294967295 -1001ac18: bf8e itee hi -1001ac1a: 601a strhi r2, [r3, #0] -1001ac1c: 604b strls r3, [r1, #4] -1001ac1e: 2000 movls r0, #0 -1001ac20: 4770 bx lr -1001ac22: bf00 nop -1001ac24: 10000bc4 .word 0x10000bc4 - -1001ac28 : -1001ac28: 2802 cmp r0, #2 -1001ac2a: bfd4 ite le -1001ac2c: 2001 movle r0, #1 -1001ac2e: f04f 30ff movgt.w r0, #4294967295 -1001ac32: 4770 bx lr - -1001ac34 : -1001ac34: 2258 movs r2, #88 ; 0x58 -1001ac36: 4b02 ldr r3, [pc, #8] ; (1001ac40 ) -1001ac38: f04f 30ff mov.w r0, #4294967295 -1001ac3c: 601a str r2, [r3, #0] -1001ac3e: 4770 bx lr -1001ac40: 10000bc4 .word 0x10000bc4 - -1001ac44 : -1001ac44: 2258 movs r2, #88 ; 0x58 -1001ac46: 4b02 ldr r3, [pc, #8] ; (1001ac50 ) -1001ac48: f04f 30ff mov.w r0, #4294967295 -1001ac4c: 601a str r2, [r3, #0] -1001ac4e: 4770 bx lr -1001ac50: 10000bc4 .word 0x10000bc4 - -1001ac54 : -1001ac54: 4b04 ldr r3, [pc, #16] ; (1001ac68 ) -1001ac56: 4602 mov r2, r0 -1001ac58: 6819 ldr r1, [r3, #0] -1001ac5a: b909 cbnz r1, 1001ac60 -1001ac5c: 4903 ldr r1, [pc, #12] ; (1001ac6c ) -1001ac5e: 6019 str r1, [r3, #0] -1001ac60: 6818 ldr r0, [r3, #0] -1001ac62: 4402 add r2, r0 -1001ac64: 601a str r2, [r3, #0] -1001ac66: 4770 bx lr -1001ac68: 1004bae8 .word 0x1004bae8 -1001ac6c: 10002400 .word 0x10002400 - -1001ac70 : -1001ac70: b5f8 push {r3, r4, r5, r6, r7, lr} -1001ac72: 460e mov r6, r1 -1001ac74: 4615 mov r5, r2 -1001ac76: 460c mov r4, r1 -1001ac78: 4f04 ldr r7, [pc, #16] ; (1001ac8c ) -1001ac7a: 1ba3 subs r3, r4, r6 -1001ac7c: 429d cmp r5, r3 -1001ac7e: dc01 bgt.n 1001ac84 -1001ac80: 4628 mov r0, r5 -1001ac82: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001ac84: f814 0b01 ldrb.w r0, [r4], #1 -1001ac88: 47b8 blx r7 -1001ac8a: e7f6 b.n 1001ac7a -1001ac8c: 000002d9 .word 0x000002d9 - -1001ac90 : -1001ac90: b510 push {r4, lr} -1001ac92: 490b ldr r1, [pc, #44] ; (1001acc0 ) -1001ac94: 4604 mov r4, r0 -1001ac96: f7ff ff97 bl 1001abc8 -1001ac9a: b178 cbz r0, 1001acbc -1001ac9c: 4909 ldr r1, [pc, #36] ; (1001acc4 ) -1001ac9e: 4620 mov r0, r4 -1001aca0: f7ff ff92 bl 1001abc8 -1001aca4: b148 cbz r0, 1001acba -1001aca6: 4908 ldr r1, [pc, #32] ; (1001acc8 ) -1001aca8: 4620 mov r0, r4 -1001acaa: f7ff ff8d bl 1001abc8 -1001acae: 2800 cmp r0, #0 -1001acb0: bf14 ite ne -1001acb2: f04f 30ff movne.w r0, #4294967295 -1001acb6: 2002 moveq r0, #2 -1001acb8: bd10 pop {r4, pc} -1001acba: 2001 movs r0, #1 -1001acbc: bd10 pop {r4, pc} -1001acbe: bf00 nop -1001acc0: 10040e84 .word 0x10040e84 -1001acc4: 10040e8b .word 0x10040e8b -1001acc8: 10040e93 .word 0x10040e93 - -1001accc : -1001accc: 4b08 ldr r3, [pc, #32] ; (1001acf0 ) -1001acce: 4a09 ldr r2, [pc, #36] ; (1001acf4 ) -1001acd0: 601a str r2, [r3, #0] -1001acd2: 4a09 ldr r2, [pc, #36] ; (1001acf8 ) -1001acd4: 605a str r2, [r3, #4] -1001acd6: 4a09 ldr r2, [pc, #36] ; (1001acfc ) -1001acd8: 609a str r2, [r3, #8] -1001acda: 4a09 ldr r2, [pc, #36] ; (1001ad00 ) -1001acdc: 60da str r2, [r3, #12] -1001acde: 4a09 ldr r2, [pc, #36] ; (1001ad04 ) -1001ace0: 611a str r2, [r3, #16] -1001ace2: 4a09 ldr r2, [pc, #36] ; (1001ad08 ) -1001ace4: 615a str r2, [r3, #20] -1001ace6: 4a09 ldr r2, [pc, #36] ; (1001ad0c ) -1001ace8: 619a str r2, [r3, #24] -1001acea: 4a09 ldr r2, [pc, #36] ; (1001ad10 ) -1001acec: 61da str r2, [r3, #28] -1001acee: 4770 bx lr -1001acf0: 10000760 .word 0x10000760 -1001acf4: 1001abf9 .word 0x1001abf9 -1001acf8: 1001ac09 .word 0x1001ac09 -1001acfc: 1001ac29 .word 0x1001ac29 -1001ad00: 1001ac35 .word 0x1001ac35 -1001ad04: 1001ac91 .word 0x1001ac91 -1001ad08: 1001ac45 .word 0x1001ac45 -1001ad0c: 1001ac71 .word 0x1001ac71 -1001ad10: 1001ac55 .word 0x1001ac55 - -1001ad14 : -1001ad14: f8d0 3454 ldr.w r3, [r0, #1108] ; 0x454 -1001ad18: b510 push {r4, lr} -1001ad1a: 2b01 cmp r3, #1 -1001ad1c: d04f beq.n 1001adbe -1001ad1e: f8b0 24c0 ldrh.w r2, [r0, #1216] ; 0x4c0 -1001ad22: f8b0 34ba ldrh.w r3, [r0, #1210] ; 0x4ba -1001ad26: f012 0f04 tst.w r2, #4 -1001ad2a: d103 bne.n 1001ad34 -1001ad2c: b153 cbz r3, 1001ad44 -1001ad2e: f042 0204 orr.w r2, r2, #4 -1001ad32: e002 b.n 1001ad3a -1001ad34: b92b cbnz r3, 1001ad42 -1001ad36: f022 0204 bic.w r2, r2, #4 -1001ad3a: f8a0 24c0 strh.w r2, [r0, #1216] ; 0x4c0 -1001ad3e: 2301 movs r3, #1 -1001ad40: e000 b.n 1001ad44 -1001ad42: 2300 movs r3, #0 -1001ad44: f8b0 14c0 ldrh.w r1, [r0, #1216] ; 0x4c0 -1001ad48: f8b0 2450 ldrh.w r2, [r0, #1104] ; 0x450 -1001ad4c: f011 0f10 tst.w r1, #16 -1001ad50: d109 bne.n 1001ad66 -1001ad52: b912 cbnz r2, 1001ad5a -1001ad54: f890 44be ldrb.w r4, [r0, #1214] ; 0x4be -1001ad58: b184 cbz r4, 1001ad7c -1001ad5a: f041 0110 orr.w r1, r1, #16 -1001ad5e: f8a0 14c0 strh.w r1, [r0, #1216] ; 0x4c0 -1001ad62: 3301 adds r3, #1 -1001ad64: e009 b.n 1001ad7a -1001ad66: b942 cbnz r2, 1001ad7a -1001ad68: f890 24be ldrb.w r2, [r0, #1214] ; 0x4be -1001ad6c: b932 cbnz r2, 1001ad7c -1001ad6e: f021 0110 bic.w r1, r1, #16 -1001ad72: f8a0 14c0 strh.w r1, [r0, #1216] ; 0x4c0 -1001ad76: 3301 adds r3, #1 -1001ad78: e000 b.n 1001ad7c -1001ad7a: b982 cbnz r2, 1001ad9e -1001ad7c: f8b0 24c0 ldrh.w r2, [r0, #1216] ; 0x4c0 -1001ad80: 0751 lsls r1, r2, #29 -1001ad82: d40c bmi.n 1001ad9e -1001ad84: f8b0 2462 ldrh.w r2, [r0, #1122] ; 0x462 -1001ad88: 0792 lsls r2, r2, #30 -1001ad8a: d502 bpl.n 1001ad92 -1001ad8c: f8b0 24bc ldrh.w r2, [r0, #1212] ; 0x4bc -1001ad90: b93a cbnz r2, 1001ada2 -1001ad92: f890 24be ldrb.w r2, [r0, #1214] ; 0x4be -1001ad96: 3200 adds r2, #0 -1001ad98: bf18 it ne -1001ad9a: 2201 movne r2, #1 -1001ad9c: e002 b.n 1001ada4 -1001ad9e: 2203 movs r2, #3 -1001ada0: e000 b.n 1001ada4 -1001ada2: 2202 movs r2, #2 -1001ada4: f8b0 14c0 ldrh.w r1, [r0, #1216] ; 0x4c0 -1001ada8: f001 0403 and.w r4, r1, #3 -1001adac: 4294 cmp r4, r2 -1001adae: d008 beq.n 1001adc2 -1001adb0: f021 0103 bic.w r1, r1, #3 -1001adb4: 430a orrs r2, r1 -1001adb6: f8a0 24c0 strh.w r2, [r0, #1216] ; 0x4c0 -1001adba: 1c58 adds r0, r3, #1 -1001adbc: bd10 pop {r4, pc} -1001adbe: 2000 movs r0, #0 -1001adc0: bd10 pop {r4, pc} -1001adc2: 4618 mov r0, r3 -1001adc4: bd10 pop {r4, pc} - -1001adc6 : -1001adc6: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1001adc8: f600 46d4 addw r6, r0, #3284 ; 0xcd4 -1001adcc: 4604 mov r4, r0 -1001adce: a901 add r1, sp, #4 -1001add0: 4630 mov r0, r6 -1001add2: f7fc fbf9 bl 100175c8 -1001add6: f8d4 5cc4 ldr.w r5, [r4, #3268] ; 0xcc4 -1001adda: f604 47c4 addw r7, r4, #3268 ; 0xcc4 -1001adde: 4638 mov r0, r7 -1001ade0: 4629 mov r1, r5 -1001ade2: f7fc fbce bl 10017582 -1001ade6: b930 cbnz r0, 1001adf6 -1001ade8: f5a5 7107 sub.w r1, r5, #540 ; 0x21c -1001adec: 4620 mov r0, r4 -1001adee: 682d ldr r5, [r5, #0] -1001adf0: f00d fe8a bl 10028b08 -1001adf4: e7f3 b.n 1001adde -1001adf6: 4630 mov r0, r6 -1001adf8: a901 add r1, sp, #4 -1001adfa: f7fc fbef bl 100175dc -1001adfe: b003 add sp, #12 -1001ae00: bdf0 pop {r4, r5, r6, r7, pc} - -1001ae02 : -1001ae02: b570 push {r4, r5, r6, lr} -1001ae04: f500 73c8 add.w r3, r0, #400 ; 0x190 -1001ae08: 4606 mov r6, r0 -1001ae0a: e9f6 456a ldrd r4, r5, [r6, #424]! ; 0x1a8 -1001ae0e: e9d3 2300 ldrd r2, r3, [r3] -1001ae12: f500 71cc add.w r1, r0, #408 ; 0x198 -1001ae16: 429d cmp r5, r3 -1001ae18: bf08 it eq -1001ae1a: 4294 cmpeq r4, r2 -1001ae1c: f500 74c0 add.w r4, r0, #384 ; 0x180 -1001ae20: cc30 ldmia r4, {r4, r5} -1001ae22: e9c1 4500 strd r4, r5, [r1] -1001ae26: f500 74d0 add.w r4, r0, #416 ; 0x1a0 -1001ae2a: f500 70c4 add.w r0, r0, #392 ; 0x188 -1001ae2e: c803 ldmia r0, {r0, r1} -1001ae30: e9c4 0100 strd r0, r1, [r4] -1001ae34: e9c6 2300 strd r2, r3, [r6] -1001ae38: bf0c ite eq -1001ae3a: 2000 moveq r0, #0 -1001ae3c: 2001 movne r0, #1 -1001ae3e: bd70 pop {r4, r5, r6, pc} - -1001ae40 : -1001ae40: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} -1001ae44: 4606 mov r6, r0 -1001ae46: 4690 mov r8, r2 -1001ae48: 460c mov r4, r1 -1001ae4a: 2900 cmp r1, #0 -1001ae4c: d07b beq.n 1001af46 -1001ae4e: f8d1 30f8 ldr.w r3, [r1, #248] ; 0xf8 -1001ae52: 07d9 lsls r1, r3, #31 -1001ae54: d577 bpl.n 1001af46 -1001ae56: 2500 movs r5, #0 -1001ae58: 462f mov r7, r5 -1001ae5a: 19e3 adds r3, r4, r7 -1001ae5c: f893 0158 ldrb.w r0, [r3, #344] ; 0x158 -1001ae60: b120 cbz r0, 1001ae6c -1001ae62: f000 007f and.w r0, r0, #127 ; 0x7f -1001ae66: f023 fcdf bl 1003e828 <__rtw_get_bit_value_from_ieee_value_veneer> -1001ae6a: 4305 orrs r5, r0 -1001ae6c: 3701 adds r7, #1 -1001ae6e: 2f10 cmp r7, #16 -1001ae70: d1f3 bne.n 1001ae5a -1001ae72: f8d4 71f4 ldr.w r7, [r4, #500] ; 0x1f4 -1001ae76: b317 cbz r7, 1001aebe -1001ae78: 2117 movs r1, #23 -1001ae7a: 4630 mov r0, r6 -1001ae7c: f10d 0207 add.w r2, sp, #7 -1001ae80: f017 fb2e bl 100324e0 -1001ae84: f89d 3007 ldrb.w r3, [sp, #7] -1001ae88: 2100 movs r1, #0 -1001ae8a: 2b02 cmp r3, #2 -1001ae8c: bf14 ite ne -1001ae8e: 2308 movne r3, #8 -1001ae90: 2310 moveq r3, #16 -1001ae92: 4299 cmp r1, r3 -1001ae94: da11 bge.n 1001aeba -1001ae96: eb04 02e1 add.w r2, r4, r1, asr #3 -1001ae9a: f892 0205 ldrb.w r0, [r2, #517] ; 0x205 -1001ae9e: f001 0207 and.w r2, r1, #7 -1001aea2: fa20 f202 lsr.w r2, r0, r2 -1001aea6: 07d2 lsls r2, r2, #31 -1001aea8: d505 bpl.n 1001aeb6 -1001aeaa: f101 020c add.w r2, r1, #12 -1001aeae: 2001 movs r0, #1 -1001aeb0: fa00 f202 lsl.w r2, r0, r2 -1001aeb4: 4315 orrs r5, r2 -1001aeb6: 3101 adds r1, #1 -1001aeb8: e7eb b.n 1001ae92 -1001aeba: f894 71fe ldrb.w r7, [r4, #510] ; 0x1fe -1001aebe: f8d6 30e4 ldr.w r3, [r6, #228] ; 0xe4 -1001aec2: 4922 ldr r1, [pc, #136] ; (1001af4c ) -1001aec4: 2b0e cmp r3, #14 -1001aec6: ea05 0101 and.w r1, r5, r1 -1001aeca: d904 bls.n 1001aed6 -1001aecc: 2900 cmp r1, #0 -1001aece: bf0c ite eq -1001aed0: 2104 moveq r1, #4 -1001aed2: 2114 movne r1, #20 -1001aed4: e00c b.n 1001aef0 -1001aed6: b929 cbnz r1, 1001aee4 -1001aed8: f415 6f7f tst.w r5, #4080 ; 0xff0 -1001aedc: bf0c ite eq -1001aede: 2101 moveq r1, #1 -1001aee0: 2103 movne r1, #3 -1001aee2: e000 b.n 1001aee6 -1001aee4: 210b movs r1, #11 -1001aee6: 6873 ldr r3, [r6, #4] -1001aee8: 2b05 cmp r3, #5 -1001aeea: bf08 it eq -1001aeec: f001 01fe andeq.w r1, r1, #254 ; 0xfe -1001aef0: f884 117c strb.w r1, [r4, #380] ; 0x17c -1001aef4: 4630 mov r0, r6 -1001aef6: f00d fa91 bl 1002841c -1001aefa: 4681 mov r9, r0 -1001aefc: f025 4070 bic.w r0, r5, #4026531840 ; 0xf0000000 -1001af00: f00e f819 bl 10028f36 -1001af04: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc -1001af08: 2b04 cmp r3, #4 -1001af0a: d81c bhi.n 1001af46 -1001af0c: f8d4 3100 ldr.w r3, [r4, #256] ; 0x100 -1001af10: 2f01 cmp r7, #1 -1001af12: f003 031f and.w r3, r3, #31 -1001af16: bf14 ite ne -1001af18: f063 037f ornne r3, r3, #127 ; 0x7f -1001af1c: f063 035f orneq r3, r3, #95 ; 0x5f -1001af20: f000 0a3f and.w sl, r0, #63 ; 0x3f -1001af24: f88d 3004 strb.w r3, [sp, #4] -1001af28: 4630 mov r0, r6 -1001af2a: ea45 7109 orr.w r1, r5, r9, lsl #28 -1001af2e: aa01 add r2, sp, #4 -1001af30: 4643 mov r3, r8 -1001af32: f017 fb70 bl 10032616 -1001af36: 2f01 cmp r7, #1 -1001af38: bf08 it eq -1001af3a: f04a 0a40 orreq.w sl, sl, #64 ; 0x40 -1001af3e: f884 9176 strb.w r9, [r4, #374] ; 0x176 -1001af42: f884 a177 strb.w sl, [r4, #375] ; 0x177 -1001af46: b002 add sp, #8 -1001af48: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1001af4c: 0ffff000 .word 0x0ffff000 - -1001af50 : -1001af50: f8d1 30fc ldr.w r3, [r1, #252] ; 0xfc -1001af54: b537 push {r0, r1, r2, r4, r5, lr} -1001af56: 3301 adds r3, #1 -1001af58: 460c mov r4, r1 -1001af5a: 4605 mov r5, r0 -1001af5c: f8c1 3100 str.w r3, [r1, #256] ; 0x100 -1001af60: 4622 mov r2, r4 -1001af62: 2100 movs r1, #0 -1001af64: 2301 movs r3, #1 -1001af66: f017 fad4 bl 10032512 -1001af6a: f8d5 3d08 ldr.w r3, [r5, #3336] ; 0xd08 -1001af6e: 4628 mov r0, r5 -1001af70: 2b02 cmp r3, #2 -1001af72: bf0c ite eq -1001af74: 2301 moveq r3, #1 -1001af76: 2300 movne r3, #0 -1001af78: f8c4 3110 str.w r3, [r4, #272] ; 0x110 -1001af7c: 4621 mov r1, r4 -1001af7e: f00d fdc3 bl 10028b08 -1001af82: f8d4 31f4 ldr.w r3, [r4, #500] ; 0x1f4 -1001af86: b1e3 cbz r3, 1001afc2 -1001af88: f8d5 3458 ldr.w r3, [r5, #1112] ; 0x458 -1001af8c: f8b5 2462 ldrh.w r2, [r5, #1122] ; 0x462 -1001af90: f8c4 31f8 str.w r3, [r4, #504] ; 0x1f8 -1001af94: f8b4 3202 ldrh.w r3, [r4, #514] ; 0x202 -1001af98: 4013 ands r3, r2 -1001af9a: f013 0f60 tst.w r3, #96 ; 0x60 -1001af9e: bf1c itt ne -1001afa0: 2201 movne r2, #1 -1001afa2: f884 21fe strbne.w r2, [r4, #510] ; 0x1fe -1001afa6: 079b lsls r3, r3, #30 -1001afa8: d507 bpl.n 1001afba -1001afaa: f895 351f ldrb.w r3, [r5, #1311] ; 0x51f -1001afae: f884 31fc strb.w r3, [r4, #508] ; 0x1fc -1001afb2: f895 3520 ldrb.w r3, [r5, #1312] ; 0x520 -1001afb6: f884 31fd strb.w r3, [r4, #509] ; 0x1fd -1001afba: 2301 movs r3, #1 -1001afbc: f8c4 3104 str.w r3, [r4, #260] ; 0x104 -1001afc0: e007 b.n 1001afd2 -1001afc2: f8c4 31f8 str.w r3, [r4, #504] ; 0x1f8 -1001afc6: f884 31fe strb.w r3, [r4, #510] ; 0x1fe -1001afca: f884 31fc strb.w r3, [r4, #508] ; 0x1fc -1001afce: f884 31fd strb.w r3, [r4, #509] ; 0x1fd -1001afd2: 2100 movs r1, #0 -1001afd4: 2248 movs r2, #72 ; 0x48 -1001afd6: f884 11ff strb.w r1, [r4, #511] ; 0x1ff -1001afda: f884 1200 strb.w r1, [r4, #512] ; 0x200 -1001afde: f504 70c0 add.w r0, r4, #384 ; 0x180 -1001afe2: f7fc fa25 bl 10017430 -1001afe6: 4620 mov r0, r4 -1001afe8: a901 add r1, sp, #4 -1001afea: f7fc faed bl 100175c8 -1001afee: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 -1001aff2: 4620 mov r0, r4 -1001aff4: f043 0301 orr.w r3, r3, #1 -1001aff8: f8c4 30f8 str.w r3, [r4, #248] ; 0xf8 -1001affc: a901 add r1, sp, #4 -1001affe: f7fc faed bl 100175dc -1001b002: b003 add sp, #12 -1001b004: bd30 pop {r4, r5, pc} - ... - -1001b008 : -1001b008: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001b00c: 460d mov r5, r1 -1001b00e: b087 sub sp, #28 -1001b010: 4616 mov r6, r2 -1001b012: 4604 mov r4, r0 -1001b014: 2800 cmp r0, #0 -1001b016: f000 814c beq.w 1001b2b2 -1001b01a: f890 3858 ldrb.w r3, [r0, #2136] ; 0x858 -1001b01e: 2b00 cmp r3, #0 -1001b020: f000 8147 beq.w 1001b2b2 -1001b024: f200 5804 addw r8, r0, #1284 ; 0x504 -1001b028: 4640 mov r0, r8 -1001b02a: a903 add r1, sp, #12 -1001b02c: f7fc facc bl 100175c8 -1001b030: 2d2a cmp r5, #42 ; 0x2a -1001b032: f000 808a beq.w 1001b14a -1001b036: 2ddd cmp r5, #221 ; 0xdd -1001b038: f000 80b7 beq.w 1001b1aa -1001b03c: 2d05 cmp r5, #5 -1001b03e: f040 8131 bne.w 1001b2a4 -1001b042: f8b4 3cfe ldrh.w r3, [r4, #3326] ; 0xcfe -1001b046: f504 7790 add.w r7, r4, #288 ; 0x120 -1001b04a: f8ad 300a strh.w r3, [sp, #10] -1001b04e: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001b052: 4629 mov r1, r5 -1001b054: 3b0c subs r3, #12 -1001b056: 4638 mov r0, r7 -1001b058: aa05 add r2, sp, #20 -1001b05a: f023 fc25 bl 1003e8a8 <__rtw_get_ie_veneer> -1001b05e: f504 7a8a add.w sl, r4, #276 ; 0x114 -1001b062: 4605 mov r5, r0 -1001b064: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001b068: b148 cbz r0, 1001b07e -1001b06a: 9a05 ldr r2, [sp, #20] -1001b06c: b13a cbz r2, 1001b07e -1001b06e: ebca 0600 rsb r6, sl, r0 -1001b072: 3202 adds r2, #2 -1001b074: 1b9e subs r6, r3, r6 -1001b076: 9205 str r2, [sp, #20] -1001b078: 1887 adds r7, r0, r2 -1001b07a: 1ab6 subs r6, r6, r2 -1001b07c: e017 b.n 1001b0ae -1001b07e: 2200 movs r2, #0 -1001b080: 9205 str r2, [sp, #20] -1001b082: f8d4 50a4 ldr.w r5, [r4, #164] ; 0xa4 -1001b086: 4638 mov r0, r7 -1001b088: 2101 movs r1, #1 -1001b08a: aa04 add r2, sp, #16 -1001b08c: 3b0c subs r3, #12 -1001b08e: 350e adds r5, #14 -1001b090: f023 fc0a bl 1003e8a8 <__rtw_get_ie_veneer> -1001b094: b110 cbz r0, 1001b09c -1001b096: 9b04 ldr r3, [sp, #16] -1001b098: 3302 adds r3, #2 -1001b09a: 441d add r5, r3 -1001b09c: f8d4 6110 ldr.w r6, [r4, #272] ; 0x110 -1001b0a0: 3503 adds r5, #3 -1001b0a2: 9b05 ldr r3, [sp, #20] -1001b0a4: eb0a 0705 add.w r7, sl, r5 -1001b0a8: 1b75 subs r5, r6, r5 -1001b0aa: 1aee subs r6, r5, r3 -1001b0ac: 463d mov r5, r7 -1001b0ae: b916 cbnz r6, 1001b0b6 -1001b0b0: f04f 0b00 mov.w fp, #0 -1001b0b4: e00a b.n 1001b0cc -1001b0b6: 4630 mov r0, r6 -1001b0b8: f7fc fb6a bl 10017790 -1001b0bc: 4683 mov fp, r0 -1001b0be: 2800 cmp r0, #0 -1001b0c0: d0f6 beq.n 1001b0b0 -1001b0c2: b11f cbz r7, 1001b0cc -1001b0c4: 4639 mov r1, r7 -1001b0c6: 4632 mov r2, r6 -1001b0c8: f7fc f9a2 bl 10017410 -1001b0cc: 2305 movs r3, #5 -1001b0ce: 702b strb r3, [r5, #0] -1001b0d0: f8b4 2cfe ldrh.w r2, [r4, #3326] ; 0xcfe -1001b0d4: f412 4f7f tst.w r2, #65280 ; 0xff00 -1001b0d8: d002 beq.n 1001b0e0 -1001b0da: f012 0ffc tst.w r2, #252 ; 0xfc -1001b0de: d100 bne.n 1001b0e2 -1001b0e0: 2304 movs r3, #4 -1001b0e2: 9305 str r3, [sp, #20] -1001b0e4: 9b05 ldr r3, [sp, #20] -1001b0e6: 1d6f adds r7, r5, #5 -1001b0e8: 706b strb r3, [r5, #1] -1001b0ea: 2300 movs r3, #0 -1001b0ec: 70ab strb r3, [r5, #2] -1001b0ee: 2301 movs r3, #1 -1001b0f0: 70eb strb r3, [r5, #3] -1001b0f2: f8b4 2cfe ldrh.w r2, [r4, #3326] ; 0xcfe -1001b0f6: 46b9 mov r9, r7 -1001b0f8: 401a ands r2, r3 -1001b0fa: bf14 ite ne -1001b0fc: 712b strbne r3, [r5, #4] -1001b0fe: 712a strbeq r2, [r5, #4] -1001b100: 9b05 ldr r3, [sp, #20] -1001b102: 2b04 cmp r3, #4 -1001b104: d105 bne.n 1001b112 -1001b106: f89d 300a ldrb.w r3, [sp, #10] -1001b10a: f107 0901 add.w r9, r7, #1 -1001b10e: 703b strb r3, [r7, #0] -1001b110: e009 b.n 1001b126 -1001b112: 2b05 cmp r3, #5 -1001b114: d107 bne.n 1001b126 -1001b116: 4638 mov r0, r7 -1001b118: f10d 010a add.w r1, sp, #10 -1001b11c: 2202 movs r2, #2 -1001b11e: f7fc f977 bl 10017410 -1001b122: f107 0902 add.w r9, r7, #2 -1001b126: f1bb 0f00 cmp.w fp, #0 -1001b12a: d008 beq.n 1001b13e -1001b12c: 4648 mov r0, r9 -1001b12e: 4659 mov r1, fp -1001b130: 4632 mov r2, r6 -1001b132: f7fc f96d bl 10017410 -1001b136: 4658 mov r0, fp -1001b138: 4631 mov r1, r6 -1001b13a: f7fc f966 bl 1001740a -1001b13e: ebca 0909 rsb r9, sl, r9 -1001b142: 444e add r6, r9 -1001b144: f8c4 6110 str.w r6, [r4, #272] ; 0x110 -1001b148: e0ac b.n 1001b2a4 -1001b14a: 2300 movs r3, #0 -1001b14c: 9305 str r3, [sp, #20] -1001b14e: f894 3732 ldrb.w r3, [r4, #1842] ; 0x732 -1001b152: 2b00 cmp r3, #0 -1001b154: f000 80a6 beq.w 1001b2a4 -1001b158: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001b15c: 4629 mov r1, r5 -1001b15e: f504 7090 add.w r0, r4, #288 ; 0x120 -1001b162: aa05 add r2, sp, #20 -1001b164: 3b0c subs r3, #12 -1001b166: f023 fb9f bl 1003e8a8 <__rtw_get_ie_veneer> -1001b16a: 4601 mov r1, r0 -1001b16c: 2800 cmp r0, #0 -1001b16e: f000 8099 beq.w 1001b2a4 -1001b172: 9b05 ldr r3, [sp, #20] -1001b174: 2b00 cmp r3, #0 -1001b176: f000 8095 beq.w 1001b2a4 -1001b17a: f8b4 34b4 ldrh.w r3, [r4, #1204] ; 0x4b4 -1001b17e: 2b01 cmp r3, #1 -1001b180: 7883 ldrb r3, [r0, #2] -1001b182: bf0c ite eq -1001b184: f043 0303 orreq.w r3, r3, #3 -1001b188: f023 0303 bicne.w r3, r3, #3 -1001b18c: 7083 strb r3, [r0, #2] -1001b18e: f8b4 24b8 ldrh.w r2, [r4, #1208] ; 0x4b8 -1001b192: 7883 ldrb r3, [r0, #2] -1001b194: b112 cbz r2, 1001b19c -1001b196: f043 0304 orr.w r3, r3, #4 -1001b19a: e001 b.n 1001b1a0 -1001b19c: f023 0304 bic.w r3, r3, #4 -1001b1a0: 708b strb r3, [r1, #2] -1001b1a2: 4620 mov r0, r4 -1001b1a4: f00d fca2 bl 10028aec -1001b1a8: e07c b.n 1001b2a4 -1001b1aa: 4843 ldr r0, [pc, #268] ; (1001b2b8 ) -1001b1ac: 4631 mov r1, r6 -1001b1ae: 2204 movs r2, #4 -1001b1b0: f7fc f936 bl 10017420 -1001b1b4: 2800 cmp r0, #0 -1001b1b6: d175 bne.n 1001b2a4 -1001b1b8: 4840 ldr r0, [pc, #256] ; (1001b2bc ) -1001b1ba: 4631 mov r1, r6 -1001b1bc: 2204 movs r2, #4 -1001b1be: f7fc f92f bl 10017420 -1001b1c2: 4607 mov r7, r0 -1001b1c4: 2800 cmp r0, #0 -1001b1c6: d16d bne.n 1001b2a4 -1001b1c8: 483d ldr r0, [pc, #244] ; (1001b2c0 ) -1001b1ca: 4631 mov r1, r6 -1001b1cc: 2204 movs r2, #4 -1001b1ce: f7fc f927 bl 10017420 -1001b1d2: 2800 cmp r0, #0 -1001b1d4: d061 beq.n 1001b29a -1001b1d6: ab06 add r3, sp, #24 -1001b1d8: f843 7d04 str.w r7, [r3, #-4]! -1001b1dc: f8d4 5110 ldr.w r5, [r4, #272] ; 0x110 -1001b1e0: f504 7090 add.w r0, r4, #288 ; 0x120 -1001b1e4: f1a5 010c sub.w r1, r5, #12 -1001b1e8: 463a mov r2, r7 -1001b1ea: f023 fb4d bl 1003e888 <__rtw_get_wps_ie_veneer> -1001b1ee: 4681 mov r9, r0 -1001b1f0: 2800 cmp r0, #0 -1001b1f2: d057 beq.n 1001b2a4 -1001b1f4: 9e05 ldr r6, [sp, #20] -1001b1f6: 2e00 cmp r6, #0 -1001b1f8: d054 beq.n 1001b2a4 -1001b1fa: f504 7a8a add.w sl, r4, #276 ; 0x114 -1001b1fe: ebca 0a00 rsb sl, sl, r0 -1001b202: ebca 0505 rsb r5, sl, r5 -1001b206: 1bad subs r5, r5, r6 -1001b208: d00a beq.n 1001b220 -1001b20a: 4628 mov r0, r5 -1001b20c: f7fc fac0 bl 10017790 -1001b210: 4607 mov r7, r0 -1001b212: b130 cbz r0, 1001b222 -1001b214: eb09 0106 add.w r1, r9, r6 -1001b218: 462a mov r2, r5 -1001b21a: f7fc f8f9 bl 10017410 -1001b21e: e000 b.n 1001b222 -1001b220: 2700 movs r7, #0 -1001b222: f8d4 64c4 ldr.w r6, [r4, #1220] ; 0x4c4 -1001b226: 2e00 cmp r6, #0 -1001b228: d03c beq.n 1001b2a4 -1001b22a: 7872 ldrb r2, [r6, #1] -1001b22c: 9205 str r2, [sp, #20] -1001b22e: 3202 adds r2, #2 -1001b230: eb0a 0302 add.w r3, sl, r2 -1001b234: 442b add r3, r5 -1001b236: f5b3 7f40 cmp.w r3, #768 ; 0x300 -1001b23a: d812 bhi.n 1001b262 -1001b23c: 4648 mov r0, r9 -1001b23e: 4631 mov r1, r6 -1001b240: f7fc f8e6 bl 10017410 -1001b244: 9b05 ldr r3, [sp, #20] -1001b246: 3302 adds r3, #2 -1001b248: eb09 0003 add.w r0, r9, r3 -1001b24c: b11f cbz r7, 1001b256 -1001b24e: 4639 mov r1, r7 -1001b250: 462a mov r2, r5 -1001b252: f7fc f8dd bl 10017410 -1001b256: 9b05 ldr r3, [sp, #20] -1001b258: 3302 adds r3, #2 -1001b25a: 449a add sl, r3 -1001b25c: 44aa add sl, r5 -1001b25e: f8c4 a110 str.w sl, [r4, #272] ; 0x110 -1001b262: b11f cbz r7, 1001b26c -1001b264: 4638 mov r0, r7 -1001b266: 4629 mov r1, r5 -1001b268: f7fc f8cf bl 1001740a -1001b26c: 2200 movs r2, #0 -1001b26e: ab06 add r3, sp, #24 -1001b270: f803 2d08 strb.w r2, [r3, #-8]! -1001b274: 7871 ldrb r1, [r6, #1] -1001b276: 4630 mov r0, r6 -1001b278: 9200 str r2, [sp, #0] -1001b27a: 3102 adds r1, #2 -1001b27c: f241 0241 movw r2, #4161 ; 0x1041 -1001b280: f023 fb32 bl 1003e8e8 <__rtw_get_wps_attr_content_veneer> -1001b284: f89d 2010 ldrb.w r2, [sp, #16] -1001b288: 6923 ldr r3, [r4, #16] -1001b28a: b112 cbz r2, 1001b292 -1001b28c: f443 7380 orr.w r3, r3, #256 ; 0x100 -1001b290: e001 b.n 1001b296 -1001b292: f423 7380 bic.w r3, r3, #256 ; 0x100 -1001b296: 6123 str r3, [r4, #16] -1001b298: e004 b.n 1001b2a4 -1001b29a: 480a ldr r0, [pc, #40] ; (1001b2c4 ) -1001b29c: 4631 mov r1, r6 -1001b29e: 2204 movs r2, #4 -1001b2a0: f7fc f8be bl 10017420 -1001b2a4: 2301 movs r3, #1 -1001b2a6: f884 3508 strb.w r3, [r4, #1288] ; 0x508 -1001b2aa: 4640 mov r0, r8 -1001b2ac: a903 add r1, sp, #12 -1001b2ae: f7fc f995 bl 100175dc -1001b2b2: b007 add sp, #28 -1001b2b4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1001b2b8: 100414dc .word 0x100414dc -1001b2bc: 10041501 .word 0x10041501 -1001b2c0: 10041441 .word 0x10041441 -1001b2c4: 1004145f .word 0x1004145f - -1001b2c8 : -1001b2c8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001b2cc: 4b66 ldr r3, [pc, #408] ; (1001b468 ) -1001b2ce: 4604 mov r4, r0 -1001b2d0: 6818 ldr r0, [r3, #0] -1001b2d2: 6923 ldr r3, [r4, #16] -1001b2d4: b091 sub sp, #68 ; 0x44 -1001b2d6: 2600 movs r6, #0 -1001b2d8: 9008 str r0, [sp, #32] -1001b2da: 06d8 lsls r0, r3, #27 -1001b2dc: 460f mov r7, r1 -1001b2de: 9605 str r6, [sp, #20] -1001b2e0: d401 bmi.n 1001b2e6 -1001b2e2: 2000 movs r0, #0 -1001b2e4: e36c b.n 1001b9c0 -1001b2e6: f5b2 7f40 cmp.w r2, #768 ; 0x300 -1001b2ea: dcfa bgt.n 1001b2e2 -1001b2ec: f504 758a add.w r5, r4, #276 ; 0x114 -1001b2f0: f8c4 2110 str.w r2, [r4, #272] ; 0x110 -1001b2f4: 4628 mov r0, r5 -1001b2f6: 4631 mov r1, r6 -1001b2f8: f44f 7240 mov.w r2, #768 ; 0x300 -1001b2fc: f7fc f898 bl 10017430 -1001b300: 4628 mov r0, r5 -1001b302: 4639 mov r1, r7 -1001b304: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 -1001b308: f7fc f882 bl 10017410 -1001b30c: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 -1001b310: 2b04 cmp r3, #4 -1001b312: d1e6 bne.n 1001b2e2 -1001b314: f104 099c add.w r9, r4, #156 ; 0x9c -1001b318: f504 51a4 add.w r1, r4, #5248 ; 0x1480 -1001b31c: 3119 adds r1, #25 -1001b31e: 2206 movs r2, #6 -1001b320: 4648 mov r0, r9 -1001b322: f884 60d0 strb.w r6, [r4, #208] ; 0xd0 -1001b326: f884 60d1 strb.w r6, [r4, #209] ; 0xd1 -1001b32a: f884 60d2 strb.w r6, [r4, #210] ; 0xd2 -1001b32e: f884 60d3 strb.w r6, [r4, #211] ; 0xd3 -1001b332: f7fc f86d bl 10017410 -1001b336: 4628 mov r0, r5 -1001b338: f002 f949 bl 1001d5ce -1001b33c: 7842 ldrb r2, [r0, #1] -1001b33e: 7803 ldrb r3, [r0, #0] -1001b340: 4628 mov r0, r5 -1001b342: ea43 2302 orr.w r3, r3, r2, lsl #8 -1001b346: f8c4 30dc str.w r3, [r4, #220] ; 0xdc -1001b34a: f002 f931 bl 1001d5b0 -1001b34e: 7803 ldrb r3, [r0, #0] -1001b350: 7847 ldrb r7, [r0, #1] -1001b352: f504 7590 add.w r5, r4, #288 ; 0x120 -1001b356: ea43 2707 orr.w r7, r3, r7, lsl #8 -1001b35a: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001b35e: 4628 mov r0, r5 -1001b360: 4631 mov r1, r6 -1001b362: aa05 add r2, sp, #20 -1001b364: 3b0c subs r3, #12 -1001b366: f023 fa9f bl 1003e8a8 <__rtw_get_ie_veneer> -1001b36a: 4680 mov r8, r0 -1001b36c: b188 cbz r0, 1001b392 -1001b36e: 9b05 ldr r3, [sp, #20] -1001b370: b17b cbz r3, 1001b392 -1001b372: f104 00a4 add.w r0, r4, #164 ; 0xa4 -1001b376: 4631 mov r1, r6 -1001b378: 2228 movs r2, #40 ; 0x28 -1001b37a: f7fc f859 bl 10017430 -1001b37e: f104 00a8 add.w r0, r4, #168 ; 0xa8 -1001b382: f108 0102 add.w r1, r8, #2 -1001b386: 9a05 ldr r2, [sp, #20] -1001b388: f7fc f842 bl 10017410 -1001b38c: 9b05 ldr r3, [sp, #20] -1001b38e: f8c4 30a4 str.w r3, [r4, #164] ; 0xa4 -1001b392: 2300 movs r3, #0 -1001b394: f884 30d8 strb.w r3, [r4, #216] ; 0xd8 -1001b398: f884 30d9 strb.w r3, [r4, #217] ; 0xd9 -1001b39c: f884 30da strb.w r3, [r4, #218] ; 0xda -1001b3a0: f884 30db strb.w r3, [r4, #219] ; 0xdb -1001b3a4: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001b3a8: 4628 mov r0, r5 -1001b3aa: 2103 movs r1, #3 -1001b3ac: aa05 add r2, sp, #20 -1001b3ae: 3b0c subs r3, #12 -1001b3b0: f023 fa7a bl 1003e8a8 <__rtw_get_ie_veneer> -1001b3b4: b120 cbz r0, 1001b3c0 -1001b3b6: 9b05 ldr r3, [sp, #20] -1001b3b8: b123 cbz r3, 1001b3c4 -1001b3ba: f890 8002 ldrb.w r8, [r0, #2] -1001b3be: e002 b.n 1001b3c6 -1001b3c0: 4680 mov r8, r0 -1001b3c2: e000 b.n 1001b3c6 -1001b3c4: 4698 mov r8, r3 -1001b3c6: a80c add r0, sp, #48 ; 0x30 -1001b3c8: 2100 movs r1, #0 -1001b3ca: 2210 movs r2, #16 -1001b3cc: f8c4 80e4 str.w r8, [r4, #228] ; 0xe4 -1001b3d0: f7fc f82e bl 10017430 -1001b3d4: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001b3d8: 2101 movs r1, #1 -1001b3da: 4628 mov r0, r5 -1001b3dc: aa05 add r2, sp, #20 -1001b3de: 3b0c subs r3, #12 -1001b3e0: f023 fa62 bl 1003e8a8 <__rtw_get_ie_veneer> -1001b3e4: 4601 mov r1, r0 -1001b3e6: b130 cbz r0, 1001b3f6 -1001b3e8: a80c add r0, sp, #48 ; 0x30 -1001b3ea: 3102 adds r1, #2 -1001b3ec: 9a05 ldr r2, [sp, #20] -1001b3ee: f7fc f80f bl 10017410 -1001b3f2: 9e05 ldr r6, [sp, #20] -1001b3f4: e000 b.n 1001b3f8 -1001b3f6: 4606 mov r6, r0 -1001b3f8: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001b3fc: 2132 movs r1, #50 ; 0x32 -1001b3fe: 4628 mov r0, r5 -1001b400: aa05 add r2, sp, #20 -1001b402: 3b0c subs r3, #12 -1001b404: f023 fa50 bl 1003e8a8 <__rtw_get_ie_veneer> -1001b408: 4601 mov r1, r0 -1001b40a: b138 cbz r0, 1001b41c -1001b40c: a80c add r0, sp, #48 ; 0x30 -1001b40e: 4430 add r0, r6 -1001b410: 3102 adds r1, #2 -1001b412: 9a05 ldr r2, [sp, #20] -1001b414: f7fb fffc bl 10017410 -1001b418: 9b05 ldr r3, [sp, #20] -1001b41a: 441e add r6, r3 -1001b41c: 4642 mov r2, r8 -1001b41e: 4631 mov r1, r6 -1001b420: a80c add r0, sp, #48 ; 0x30 -1001b422: f023 fa91 bl 1003e948 <__rtw_check_network_type_veneer> -1001b426: f104 08fc add.w r8, r4, #252 ; 0xfc -1001b42a: fa5f fa80 uxtb.w sl, r0 -1001b42e: 4651 mov r1, sl -1001b430: 4640 mov r0, r8 -1001b432: f023 fa55 bl 1003e8e0 <__rtw_set_supported_rate_veneer> -1001b436: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001b43a: 212a movs r1, #42 ; 0x2a -1001b43c: 4628 mov r0, r5 -1001b43e: aa05 add r2, sp, #20 -1001b440: 3b0c subs r3, #12 -1001b442: f023 fa31 bl 1003e8a8 <__rtw_get_ie_veneer> -1001b446: 4601 mov r1, r0 -1001b448: b120 cbz r0, 1001b454 -1001b44a: 9b05 ldr r3, [sp, #20] -1001b44c: b113 cbz r3, 1001b454 -1001b44e: 4620 mov r0, r4 -1001b450: f00d fb4c bl 10028aec -1001b454: f007 0310 and.w r3, r7, #16 -1001b458: b29b uxth r3, r3 -1001b45a: b13b cbz r3, 1001b46c -1001b45c: 2201 movs r2, #1 -1001b45e: 2300 movs r3, #0 -1001b460: f884 20cc strb.w r2, [r4, #204] ; 0xcc -1001b464: e004 b.n 1001b470 -1001b466: bf00 nop -1001b468: 10040e9b .word 0x10040e9b -1001b46c: f884 30cc strb.w r3, [r4, #204] ; 0xcc -1001b470: f884 30cd strb.w r3, [r4, #205] ; 0xcd -1001b474: f884 30ce strb.w r3, [r4, #206] ; 0xce -1001b478: f884 30cf strb.w r3, [r4, #207] ; 0xcf -1001b47c: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001b480: 2600 movs r6, #0 -1001b482: f8c4 6e44 str.w r6, [r4, #3652] ; 0xe44 -1001b486: f8c4 6e4c str.w r6, [r4, #3660] ; 0xe4c -1001b48a: f8c4 6e54 str.w r6, [r4, #3668] ; 0xe54 -1001b48e: 4628 mov r0, r5 -1001b490: 2130 movs r1, #48 ; 0x30 -1001b492: aa05 add r2, sp, #20 -1001b494: 3b0c subs r3, #12 -1001b496: 9606 str r6, [sp, #24] -1001b498: 9607 str r6, [sp, #28] -1001b49a: f023 fa05 bl 1003e8a8 <__rtw_get_ie_veneer> -1001b49e: b1d0 cbz r0, 1001b4d6 -1001b4a0: 9905 ldr r1, [sp, #20] -1001b4a2: b1c1 cbz r1, 1001b4d6 -1001b4a4: 9600 str r6, [sp, #0] -1001b4a6: 3102 adds r1, #2 -1001b4a8: aa06 add r2, sp, #24 -1001b4aa: ab07 add r3, sp, #28 -1001b4ac: f023 f9cc bl 1003e848 <__rtw_parse_wpa2_ie_veneer> -1001b4b0: 2801 cmp r0, #1 -1001b4b2: d110 bne.n 1001b4d6 -1001b4b4: 2302 movs r3, #2 -1001b4b6: f8c4 3d08 str.w r3, [r4, #3336] ; 0xd08 -1001b4ba: f8d4 3e44 ldr.w r3, [r4, #3652] ; 0xe44 -1001b4be: f8c4 0e40 str.w r0, [r4, #3648] ; 0xe40 -1001b4c2: f043 0302 orr.w r3, r3, #2 -1001b4c6: f8c4 3e44 str.w r3, [r4, #3652] ; 0xe44 -1001b4ca: 9b06 ldr r3, [sp, #24] -1001b4cc: f8c4 3e4c str.w r3, [r4, #3660] ; 0xe4c -1001b4d0: 9b07 ldr r3, [sp, #28] -1001b4d2: f8c4 3e54 str.w r3, [r4, #3668] ; 0xe54 -1001b4d6: 2300 movs r3, #0 -1001b4d8: 9305 str r3, [sp, #20] -1001b4da: 9306 str r3, [sp, #24] -1001b4dc: 9307 str r3, [sp, #28] -1001b4de: f8c4 3e48 str.w r3, [r4, #3656] ; 0xe48 -1001b4e2: f8c4 3e50 str.w r3, [r4, #3664] ; 0xe50 -1001b4e6: 4628 mov r0, r5 -1001b4e8: f8d4 6110 ldr.w r6, [r4, #272] ; 0x110 -1001b4ec: 9b05 ldr r3, [sp, #20] -1001b4ee: 3e0e subs r6, #14 -1001b4f0: 1af3 subs r3, r6, r3 -1001b4f2: 21dd movs r1, #221 ; 0xdd -1001b4f4: aa05 add r2, sp, #20 -1001b4f6: f023 f9d7 bl 1003e8a8 <__rtw_get_ie_veneer> -1001b4fa: 4606 mov r6, r0 -1001b4fc: b318 cbz r0, 1001b546 -1001b4fe: a908 add r1, sp, #32 -1001b500: 3002 adds r0, #2 -1001b502: 2204 movs r2, #4 -1001b504: f7fb ff8c bl 10017420 -1001b508: 9905 ldr r1, [sp, #20] -1001b50a: 2800 cmp r0, #0 -1001b50c: f000 824b beq.w 1001b9a6 -1001b510: 2300 movs r3, #0 -1001b512: 9300 str r3, [sp, #0] -1001b514: 4630 mov r0, r6 -1001b516: 3102 adds r1, #2 -1001b518: aa06 add r2, sp, #24 -1001b51a: ab07 add r3, sp, #28 -1001b51c: f023 f9a0 bl 1003e860 <__rtw_parse_wpa_ie_veneer> -1001b520: 2801 cmp r0, #1 -1001b522: d110 bne.n 1001b546 -1001b524: 2302 movs r3, #2 -1001b526: f8c4 3d08 str.w r3, [r4, #3336] ; 0xd08 -1001b52a: f8d4 3e44 ldr.w r3, [r4, #3652] ; 0xe44 -1001b52e: f8c4 0e40 str.w r0, [r4, #3648] ; 0xe40 -1001b532: f043 0301 orr.w r3, r3, #1 -1001b536: f8c4 3e44 str.w r3, [r4, #3652] ; 0xe44 -1001b53a: 9b06 ldr r3, [sp, #24] -1001b53c: f8c4 3e48 str.w r3, [r4, #3656] ; 0xe48 -1001b540: 9b07 ldr r3, [sp, #28] -1001b542: f8c4 3e50 str.w r3, [r4, #3664] ; 0xe50 -1001b546: 2300 movs r3, #0 -1001b548: f504 5b9c add.w fp, r4, #4992 ; 0x1380 -1001b54c: f8c4 344c str.w r3, [r4, #1100] ; 0x44c -1001b550: f10b 0b08 add.w fp, fp, #8 -1001b554: 9305 str r3, [sp, #20] -1001b556: f89b 303d ldrb.w r3, [fp, #61] ; 0x3d -1001b55a: b1d3 cbz r3, 1001b592 -1001b55c: 4628 mov r0, r5 -1001b55e: f8d4 6110 ldr.w r6, [r4, #272] ; 0x110 -1001b562: 9b05 ldr r3, [sp, #20] -1001b564: 3e0e subs r6, #14 -1001b566: 1af3 subs r3, r6, r3 -1001b568: 21dd movs r1, #221 ; 0xdd -1001b56a: aa05 add r2, sp, #20 -1001b56c: f023 f99c bl 1003e8a8 <__rtw_get_ie_veneer> -1001b570: 4606 mov r6, r0 -1001b572: b170 cbz r0, 1001b592 -1001b574: 3002 adds r0, #2 -1001b576: 49a1 ldr r1, [pc, #644] ; (1001b7fc ) -1001b578: 2206 movs r2, #6 -1001b57a: f7fb ff51 bl 10017420 -1001b57e: 2800 cmp r0, #0 -1001b580: f000 8217 beq.w 1001b9b2 -1001b584: 2301 movs r3, #1 -1001b586: f8c4 344c str.w r3, [r4, #1100] ; 0x44c -1001b58a: 7a33 ldrb r3, [r6, #8] -1001b58c: f063 037f orn r3, r3, #127 ; 0x7f -1001b590: 7233 strb r3, [r6, #8] -1001b592: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001b596: 4628 mov r0, r5 -1001b598: 212d movs r1, #45 ; 0x2d -1001b59a: aa05 add r2, sp, #20 -1001b59c: 3b0c subs r3, #12 -1001b59e: f023 f983 bl 1003e8a8 <__rtw_get_ie_veneer> -1001b5a2: 4606 mov r6, r0 -1001b5a4: b320 cbz r0, 1001b5f0 -1001b5a6: 9f05 ldr r7, [sp, #20] -1001b5a8: b327 cbz r7, 1001b5f4 -1001b5aa: 2117 movs r1, #23 -1001b5ac: 4620 mov r0, r4 -1001b5ae: aa0b add r2, sp, #44 ; 0x2c -1001b5b0: f016 ff96 bl 100324e0 -1001b5b4: f8d4 3e50 ldr.w r3, [r4, #3664] ; 0xe50 -1001b5b8: f04a 0a08 orr.w sl, sl, #8 -1001b5bc: 06d9 lsls r1, r3, #27 -1001b5be: d403 bmi.n 1001b5c8 -1001b5c0: f8d4 3e54 ldr.w r3, [r4, #3668] ; 0xe54 -1001b5c4: 06da lsls r2, r3, #27 -1001b5c6: d503 bpl.n 1001b5d0 -1001b5c8: 7933 ldrb r3, [r6, #4] -1001b5ca: f043 031c orr.w r3, r3, #28 -1001b5ce: 7133 strb r3, [r6, #4] -1001b5d0: f89d 302c ldrb.w r3, [sp, #44] ; 0x2c -1001b5d4: 2b03 cmp r3, #3 -1001b5d6: d103 bne.n 1001b5e0 -1001b5d8: 23ff movs r3, #255 ; 0xff -1001b5da: 7173 strb r3, [r6, #5] -1001b5dc: 2300 movs r3, #0 -1001b5de: 71b3 strb r3, [r6, #6] -1001b5e0: f204 4062 addw r0, r4, #1122 ; 0x462 -1001b5e4: 1cb1 adds r1, r6, #2 -1001b5e6: 9a05 ldr r2, [sp, #20] -1001b5e8: f7fb ff12 bl 10017410 -1001b5ec: 2701 movs r7, #1 -1001b5ee: e002 b.n 1001b5f6 -1001b5f0: 4607 mov r7, r0 -1001b5f2: e000 b.n 1001b5f6 -1001b5f4: 463e mov r6, r7 -1001b5f6: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001b5fa: aa05 add r2, sp, #20 -1001b5fc: 4628 mov r0, r5 -1001b5fe: 213d movs r1, #61 ; 0x3d -1001b600: 3b0c subs r3, #12 -1001b602: f023 f951 bl 1003e8a8 <__rtw_get_ie_veneer> -1001b606: 4602 mov r2, r0 -1001b608: b118 cbz r0, 1001b612 -1001b60a: 9b05 ldr r3, [sp, #20] -1001b60c: 2b00 cmp r3, #0 -1001b60e: bf08 it eq -1001b610: 2200 moveq r2, #0 -1001b612: f10a 31ff add.w r1, sl, #4294967295 -1001b616: b2c9 uxtb r1, r1 -1001b618: 290a cmp r1, #10 -1001b61a: d817 bhi.n 1001b64c -1001b61c: f04f 0e01 mov.w lr, #1 -1001b620: fa0e f101 lsl.w r1, lr, r1 -1001b624: f240 6306 movw r3, #1542 ; 0x606 -1001b628: 400b ands r3, r1 -1001b62a: b97b cbnz r3, 1001b64c -1001b62c: f011 0008 ands.w r0, r1, #8 -1001b630: d10a bne.n 1001b648 -1001b632: 07cb lsls r3, r1, #31 -1001b634: d50a bpl.n 1001b64c -1001b636: f884 e0d4 strb.w lr, [r4, #212] ; 0xd4 -1001b63a: f884 00d5 strb.w r0, [r4, #213] ; 0xd5 -1001b63e: f884 00d6 strb.w r0, [r4, #214] ; 0xd6 -1001b642: f884 00d7 strb.w r0, [r4, #215] ; 0xd7 -1001b646: e00b b.n 1001b660 -1001b648: 2102 movs r1, #2 -1001b64a: e001 b.n 1001b650 -1001b64c: 2300 movs r3, #0 -1001b64e: 2103 movs r1, #3 -1001b650: f884 10d4 strb.w r1, [r4, #212] ; 0xd4 -1001b654: f884 30d5 strb.w r3, [r4, #213] ; 0xd5 -1001b658: f884 30d6 strb.w r3, [r4, #214] ; 0xd6 -1001b65c: f884 30d7 strb.w r3, [r4, #215] ; 0xd7 -1001b660: 2300 movs r3, #0 -1001b662: f8c4 a084 str.w sl, [r4, #132] ; 0x84 -1001b666: f8c4 3454 str.w r3, [r4, #1108] ; 0x454 -1001b66a: f89b 3044 ldrb.w r3, [fp, #68] ; 0x44 -1001b66e: b1ab cbz r3, 1001b69c -1001b670: 2f01 cmp r7, #1 -1001b672: d113 bne.n 1001b69c -1001b674: f8c4 7454 str.w r7, [r4, #1108] ; 0x454 -1001b678: f8c4 744c str.w r7, [r4, #1100] ; 0x44c -1001b67c: f89b 3045 ldrb.w r3, [fp, #69] ; 0x45 -1001b680: 4620 mov r0, r4 -1001b682: 2b01 cmp r3, #1 -1001b684: 4631 mov r1, r6 -1001b686: bf08 it eq -1001b688: f8c4 7458 streq.w r7, [r4, #1112] ; 0x458 -1001b68c: 9203 str r2, [sp, #12] -1001b68e: f00d f9af bl 100289f0 -1001b692: 9a03 ldr r2, [sp, #12] -1001b694: 4620 mov r0, r4 -1001b696: 4611 mov r1, r2 -1001b698: f00d f9fa bl 10028a90 -1001b69c: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001b6a0: 46a2 mov sl, r4 -1001b6a2: 337c adds r3, #124 ; 0x7c -1001b6a4: f84a 3f98 str.w r3, [sl, #152]! -1001b6a8: f8d4 30dc ldr.w r3, [r4, #220] ; 0xdc -1001b6ac: f8d4 60e4 ldr.w r6, [r4, #228] ; 0xe4 -1001b6b0: f8ad 3012 strh.w r3, [sp, #18] -1001b6b4: f894 3858 ldrb.w r3, [r4, #2136] ; 0x858 -1001b6b8: b2f6 uxtb r6, r6 -1001b6ba: 2b01 cmp r3, #1 -1001b6bc: f8d4 344c ldr.w r3, [r4, #1100] ; 0x44c -1001b6c0: bf1a itte ne -1001b6c2: f04f 0b01 movne.w fp, #1 -1001b6c6: f884 b858 strbne.w fp, [r4, #2136] ; 0x858 -1001b6ca: f04f 0b00 moveq.w fp, #0 -1001b6ce: b113 cbz r3, 1001b6d6 -1001b6d0: 2301 movs r3, #1 -1001b6d2: f884 3731 strb.w r3, [r4, #1841] ; 0x731 -1001b6d6: f8d4 3454 ldr.w r3, [r4, #1108] ; 0x454 -1001b6da: b1ab cbz r3, 1001b708 -1001b6dc: 2301 movs r3, #1 -1001b6de: f884 3731 strb.w r3, [r4, #1841] ; 0x731 -1001b6e2: f884 3734 strb.w r3, [r4, #1844] ; 0x734 -1001b6e6: f894 375c ldrb.w r3, [r4, #1884] ; 0x75c -1001b6ea: aa10 add r2, sp, #64 ; 0x40 -1001b6ec: f3c3 0382 ubfx r3, r3, #2, #3 -1001b6f0: f802 3d14 strb.w r3, [r2, #-20]! -1001b6f4: 4620 mov r0, r4 -1001b6f6: 2125 movs r1, #37 ; 0x25 -1001b6f8: f016 feeb bl 100324d2 -1001b6fc: f8b4 375a ldrh.w r3, [r4, #1882] ; 0x75a -1001b700: f3c3 0381 ubfx r3, r3, #2, #2 -1001b704: f884 373a strb.w r3, [r4, #1850] ; 0x73a -1001b708: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 -1001b70c: 2b01 cmp r3, #1 -1001b70e: d002 beq.n 1001b716 -1001b710: 4620 mov r0, r4 -1001b712: f00d f8c5 bl 100288a0 -1001b716: 4620 mov r0, r4 -1001b718: 2103 movs r1, #3 -1001b71a: f00c ff83 bl 10028624 -1001b71e: 4620 mov r0, r4 -1001b720: 2104 movs r1, #4 -1001b722: 464a mov r2, r9 -1001b724: f016 fed5 bl 100324d2 -1001b728: 4b35 ldr r3, [pc, #212] ; (1001b800 ) -1001b72a: af10 add r7, sp, #64 ; 0x40 -1001b72c: f847 3d1c str.w r3, [r7, #-28]! -1001b730: 4620 mov r0, r4 -1001b732: 2120 movs r1, #32 -1001b734: 463a mov r2, r7 -1001b736: 9303 str r3, [sp, #12] -1001b738: f016 fecb bl 100324d2 -1001b73c: 4a31 ldr r2, [pc, #196] ; (1001b804 ) -1001b73e: 4620 mov r0, r4 -1001b740: 9209 str r2, [sp, #36] ; 0x24 -1001b742: 2121 movs r1, #33 ; 0x21 -1001b744: 463a mov r2, r7 -1001b746: f016 fec4 bl 100324d2 -1001b74a: 9b03 ldr r3, [sp, #12] -1001b74c: 4620 mov r0, r4 -1001b74e: 2122 movs r1, #34 ; 0x22 -1001b750: 463a mov r2, r7 -1001b752: 9309 str r3, [sp, #36] ; 0x24 -1001b754: f016 febd bl 100324d2 -1001b758: f24a 4344 movw r3, #42052 ; 0xa444 -1001b75c: 4620 mov r0, r4 -1001b75e: 2123 movs r1, #35 ; 0x23 -1001b760: 463a mov r2, r7 -1001b762: 9309 str r3, [sp, #36] ; 0x24 -1001b764: f016 feb5 bl 100324d2 -1001b768: f8d4 3d08 ldr.w r3, [r4, #3336] ; 0xd08 -1001b76c: 4620 mov r0, r4 -1001b76e: 2b02 cmp r3, #2 -1001b770: bf14 ite ne -1001b772: 23cf movne r3, #207 ; 0xcf -1001b774: 23cc moveq r3, #204 ; 0xcc -1001b776: f88d 3011 strb.w r3, [sp, #17] -1001b77a: 6863 ldr r3, [r4, #4] -1001b77c: 2114 movs r1, #20 -1001b77e: 2b03 cmp r3, #3 -1001b780: bf08 it eq -1001b782: 232c moveq r3, #44 ; 0x2c -1001b784: f10d 0211 add.w r2, sp, #17 -1001b788: bf08 it eq -1001b78a: f88d 3011 strbeq.w r3, [sp, #17] -1001b78e: f016 fea0 bl 100324d2 -1001b792: f10d 0212 add.w r2, sp, #18 -1001b796: 4620 mov r0, r4 -1001b798: 2110 movs r1, #16 -1001b79a: f016 fe9a bl 100324d2 -1001b79e: 4620 mov r0, r4 -1001b7a0: 4641 mov r1, r8 -1001b7a2: f00c fee8 bl 10028576 -1001b7a6: 4620 mov r0, r4 -1001b7a8: 2106 movs r1, #6 -1001b7aa: 4642 mov r2, r8 -1001b7ac: f016 fe91 bl 100324d2 -1001b7b0: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 -1001b7b4: 2b01 cmp r3, #1 -1001b7b6: d005 beq.n 1001b7c4 -1001b7b8: 4620 mov r0, r4 -1001b7ba: f06f 4170 mvn.w r1, #4026531840 ; 0xf0000000 -1001b7be: 2201 movs r2, #1 -1001b7c0: f00c ff22 bl 10028608 -1001b7c4: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001b7c8: 4628 mov r0, r5 -1001b7ca: 213d movs r1, #61 ; 0x3d -1001b7cc: aa0a add r2, sp, #40 ; 0x28 -1001b7ce: 3b0c subs r3, #12 -1001b7d0: f023 f86a bl 1003e8a8 <__rtw_get_ie_veneer> -1001b7d4: b118 cbz r0, 1001b7de -1001b7d6: 9f0a ldr r7, [sp, #40] ; 0x28 -1001b7d8: b117 cbz r7, 1001b7e0 -1001b7da: 1c87 adds r7, r0, #2 -1001b7dc: e000 b.n 1001b7e0 -1001b7de: 4607 mov r7, r0 -1001b7e0: 4620 mov r0, r4 -1001b7e2: f640 0181 movw r1, #2177 ; 0x881 -1001b7e6: f002 fec1 bl 1001e56c -1001b7ea: 4602 mov r2, r0 -1001b7ec: 4620 mov r0, r4 -1001b7ee: b95a cbnz r2, 1001b808 -1001b7f0: 4631 mov r1, r6 -1001b7f2: 4613 mov r3, r2 -1001b7f4: f00c ff82 bl 100286fc -1001b7f8: e020 b.n 1001b83c -1001b7fa: bf00 nop -1001b7fc: 100414e0 .word 0x100414e0 -1001b800: 005ea42b .word 0x005ea42b -1001b804: 005e4317 .word 0x005e4317 -1001b808: 2101 movs r1, #1 -1001b80a: f002 feaf bl 1001e56c -1001b80e: 2801 cmp r0, #1 -1001b810: d114 bne.n 1001b83c -1001b812: f641 035c movw r3, #6236 ; 0x185c -1001b816: 58e3 ldr r3, [r4, r3] -1001b818: 4628 mov r0, r5 -1001b81a: f893 651e ldrb.w r6, [r3, #1310] ; 0x51e -1001b81e: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001b822: f8c4 60e4 str.w r6, [r4, #228] ; 0xe4 -1001b826: 2103 movs r1, #3 -1001b828: aa0a add r2, sp, #40 ; 0x28 -1001b82a: 3b0c subs r3, #12 -1001b82c: f023 f83c bl 1003e8a8 <__rtw_get_ie_veneer> -1001b830: b110 cbz r0, 1001b838 -1001b832: 9b0a ldr r3, [sp, #40] ; 0x28 -1001b834: b103 cbz r3, 1001b838 -1001b836: 7086 strb r6, [r0, #2] -1001b838: b107 cbz r7, 1001b83c -1001b83a: 703e strb r6, [r7, #0] -1001b83c: f8d4 3084 ldr.w r3, [r4, #132] ; 0x84 -1001b840: 2500 movs r5, #0 -1001b842: f884 3521 strb.w r3, [r4, #1313] ; 0x521 -1001b846: 4620 mov r0, r4 -1001b848: f884 651e strb.w r6, [r4, #1310] ; 0x51e -1001b84c: f884 551f strb.w r5, [r4, #1311] ; 0x51f -1001b850: f884 5520 strb.w r5, [r4, #1312] ; 0x520 -1001b854: f00d fc98 bl 10029188 -1001b858: 4650 mov r0, sl -1001b85a: f001 feab bl 1001d5b4 -1001b85e: 4601 mov r1, r0 -1001b860: 4620 mov r0, r4 -1001b862: f00d fc52 bl 1002910a -1001b866: f1bb 0f00 cmp.w fp, #0 -1001b86a: d005 beq.n 1001b878 -1001b86c: 4620 mov r0, r4 -1001b86e: 2105 movs r1, #5 -1001b870: 462a mov r2, r5 -1001b872: 462b mov r3, r5 -1001b874: f7ff fbc8 bl 1001b008 -1001b878: 4620 mov r0, r4 -1001b87a: f00c fd61 bl 10028340 -1001b87e: 4605 mov r5, r0 -1001b880: 2800 cmp r0, #0 -1001b882: d069 beq.n 1001b958 -1001b884: 2600 movs r6, #0 -1001b886: f04f 0a01 mov.w sl, #1 -1001b88a: f8c0 60fc str.w r6, [r0, #252] ; 0xfc -1001b88e: f8c0 a100 str.w sl, [r0, #256] ; 0x100 -1001b892: f8c0 6104 str.w r6, [r0, #260] ; 0x104 -1001b896: f8c0 61f4 str.w r6, [r0, #500] ; 0x1f4 -1001b89a: f8c0 6110 str.w r6, [r0, #272] ; 0x110 -1001b89e: 4631 mov r1, r6 -1001b8a0: 2248 movs r2, #72 ; 0x48 -1001b8a2: f500 70c0 add.w r0, r0, #384 ; 0x180 -1001b8a6: f7fb fdc3 bl 10017430 -1001b8aa: 4640 mov r0, r8 -1001b8ac: f023 f874 bl 1003e998 <__rtw_get_rateset_len_veneer> -1001b8b0: 4607 mov r7, r0 -1001b8b2: 4639 mov r1, r7 -1001b8b4: 4652 mov r2, sl -1001b8b6: 4640 mov r0, r8 -1001b8b8: f023 f846 bl 1003e948 <__rtw_check_network_type_veneer> -1001b8bc: f505 70ac add.w r0, r5, #344 ; 0x158 -1001b8c0: 4641 mov r1, r8 -1001b8c2: 463a mov r2, r7 -1001b8c4: f7fb fda4 bl 10017410 -1001b8c8: f8c5 7168 str.w r7, [r5, #360] ; 0x168 -1001b8cc: 42be cmp r6, r7 -1001b8ce: da09 bge.n 1001b8e4 -1001b8d0: 19ab adds r3, r5, r6 -1001b8d2: f893 0158 ldrb.w r0, [r3, #344] ; 0x158 -1001b8d6: b118 cbz r0, 1001b8e0 -1001b8d8: f000 007f and.w r0, r0, #127 ; 0x7f -1001b8dc: f022 ffa4 bl 1003e828 <__rtw_get_bit_value_from_ieee_value_veneer> -1001b8e0: 3601 adds r6, #1 -1001b8e2: e7f3 b.n 1001b8cc -1001b8e4: f8d4 30e4 ldr.w r3, [r4, #228] ; 0xe4 -1001b8e8: 4620 mov r0, r4 -1001b8ea: 2b0f cmp r3, #15 -1001b8ec: bf34 ite cc -1001b8ee: 2101 movcc r1, #1 -1001b8f0: 2104 movcs r1, #4 -1001b8f2: bf34 ite cc -1001b8f4: f04f 080f movcc.w r8, #15 -1001b8f8: f44f 78a8 movcs.w r8, #336 ; 0x150 -1001b8fc: f00c fd8e bl 1002841c -1001b900: 4607 mov r7, r0 -1001b902: 4640 mov r0, r8 -1001b904: f00d fb17 bl 10028f36 -1001b908: 2100 movs r1, #0 -1001b90a: 4682 mov sl, r0 -1001b90c: 462a mov r2, r5 -1001b90e: 4620 mov r0, r4 -1001b910: 2301 movs r3, #1 -1001b912: f016 fdfe bl 10032512 -1001b916: f8d5 3100 ldr.w r3, [r5, #256] ; 0x100 -1001b91a: ae10 add r6, sp, #64 ; 0x40 -1001b91c: f003 031f and.w r3, r3, #31 -1001b920: f063 037f orn r3, r3, #127 ; 0x7f -1001b924: f806 3d14 strb.w r3, [r6, #-20]! -1001b928: 4620 mov r0, r4 -1001b92a: 2300 movs r3, #0 -1001b92c: ea48 7107 orr.w r1, r8, r7, lsl #28 -1001b930: 4632 mov r2, r6 -1001b932: f00a 0a3f and.w sl, sl, #63 ; 0x3f -1001b936: f016 fe6e bl 10032616 -1001b93a: 4628 mov r0, r5 -1001b93c: 4631 mov r1, r6 -1001b93e: f885 7176 strb.w r7, [r5, #374] ; 0x176 -1001b942: f885 a177 strb.w sl, [r5, #375] ; 0x177 -1001b946: f7fb fe3f bl 100175c8 -1001b94a: 2301 movs r3, #1 -1001b94c: f8c5 30f8 str.w r3, [r5, #248] ; 0xf8 -1001b950: 4628 mov r0, r5 -1001b952: 4631 mov r1, r6 -1001b954: f7fb fe42 bl 100175dc -1001b958: 6863 ldr r3, [r4, #4] -1001b95a: 2b03 cmp r3, #3 -1001b95c: d108 bne.n 1001b970 -1001b95e: 4620 mov r0, r4 -1001b960: f006 fbc8 bl 100220f4 -1001b964: b120 cbz r0, 1001b970 -1001b966: 4620 mov r0, r4 -1001b968: 2148 movs r1, #72 ; 0x48 -1001b96a: 2200 movs r2, #0 -1001b96c: f016 fdb1 bl 100324d2 -1001b970: f504 6546 add.w r5, r4, #3168 ; 0xc60 -1001b974: 4628 mov r0, r5 -1001b976: 4649 mov r1, r9 -1001b978: f00c fc8c bl 10028294 -1001b97c: b930 cbnz r0, 1001b98c -1001b97e: 4628 mov r0, r5 -1001b980: 4649 mov r1, r9 -1001b982: f00c fb3f bl 10028004 -1001b986: 2800 cmp r0, #0 -1001b988: f43f acab beq.w 1001b2e2 -1001b98c: f8d0 30f8 ldr.w r3, [r0, #248] ; 0xf8 -1001b990: f043 0310 orr.w r3, r3, #16 -1001b994: f8c0 30f8 str.w r3, [r0, #248] ; 0xf8 -1001b998: 4620 mov r0, r4 -1001b99a: f002 f842 bl 1001da22 -1001b99e: 2001 movs r0, #1 -1001b9a0: f8c4 0094 str.w r0, [r4, #148] ; 0x94 -1001b9a4: e00c b.n 1001b9c0 -1001b9a6: 2900 cmp r1, #0 -1001b9a8: f43f adcd beq.w 1001b546 -1001b9ac: 3102 adds r1, #2 -1001b9ae: 1870 adds r0, r6, r1 -1001b9b0: e59a b.n 1001b4e8 -1001b9b2: 9805 ldr r0, [sp, #20] -1001b9b4: 2800 cmp r0, #0 -1001b9b6: f43f adec beq.w 1001b592 -1001b9ba: 3002 adds r0, #2 -1001b9bc: 4430 add r0, r6 -1001b9be: e5ce b.n 1001b55e -1001b9c0: b011 add sp, #68 ; 0x44 -1001b9c2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1001b9c6: bf00 nop - -1001b9c8 : -1001b9c8: 2901 cmp r1, #1 -1001b9ca: d101 bne.n 1001b9d0 -1001b9cc: f7ff b9fb b.w 1001adc6 -1001b9d0: 4770 bx lr - -1001b9d2 : -1001b9d2: b570 push {r4, r5, r6, lr} -1001b9d4: f8d1 32c8 ldr.w r3, [r1, #712] ; 0x2c8 -1001b9d8: 4604 mov r4, r0 -1001b9da: f013 0f80 tst.w r3, #128 ; 0x80 -1001b9de: 460d mov r5, r1 -1001b9e0: f891 3307 ldrb.w r3, [r1, #775] ; 0x307 -1001b9e4: d119 bne.n 1001ba1a -1001b9e6: b10b cbz r3, 1001b9ec -1001b9e8: 2600 movs r6, #0 -1001b9ea: e028 b.n 1001ba3e -1001b9ec: 2301 movs r3, #1 -1001b9ee: f881 3307 strb.w r3, [r1, #775] ; 0x307 -1001b9f2: f8b0 34b8 ldrh.w r3, [r0, #1208] ; 0x4b8 -1001b9f6: f890 2521 ldrb.w r2, [r0, #1313] ; 0x521 -1001b9fa: 3301 adds r3, #1 -1001b9fc: b29b uxth r3, r3 -1001b9fe: 2a01 cmp r2, #1 -1001ba00: f8a0 34b8 strh.w r3, [r0, #1208] ; 0x4b8 -1001ba04: d9f0 bls.n 1001b9e8 -1001ba06: 2b01 cmp r3, #1 -1001ba08: d1ee bne.n 1001b9e8 -1001ba0a: 4620 mov r0, r4 -1001ba0c: 21ff movs r1, #255 ; 0xff -1001ba0e: 2200 movs r2, #0 -1001ba10: 2301 movs r3, #1 -1001ba12: f7ff faf9 bl 1001b008 -1001ba16: 2601 movs r6, #1 -1001ba18: e011 b.n 1001ba3e -1001ba1a: 2b00 cmp r3, #0 -1001ba1c: d0e4 beq.n 1001b9e8 -1001ba1e: 2300 movs r3, #0 -1001ba20: f881 3307 strb.w r3, [r1, #775] ; 0x307 -1001ba24: f8b0 34b8 ldrh.w r3, [r0, #1208] ; 0x4b8 -1001ba28: f890 2521 ldrb.w r2, [r0, #1313] ; 0x521 -1001ba2c: 3b01 subs r3, #1 -1001ba2e: b29b uxth r3, r3 -1001ba30: 2a01 cmp r2, #1 -1001ba32: f8a0 34b8 strh.w r3, [r0, #1208] ; 0x4b8 -1001ba36: d9d7 bls.n 1001b9e8 -1001ba38: 2b00 cmp r3, #0 -1001ba3a: d1d5 bne.n 1001b9e8 -1001ba3c: e7e5 b.n 1001ba0a -1001ba3e: f8d5 32c8 ldr.w r3, [r5, #712] ; 0x2c8 -1001ba42: 2b00 cmp r3, #0 -1001ba44: f895 3305 ldrb.w r3, [r5, #773] ; 0x305 -1001ba48: da13 bge.n 1001ba72 -1001ba4a: b9f3 cbnz r3, 1001ba8a -1001ba4c: 2301 movs r3, #1 -1001ba4e: f885 3305 strb.w r3, [r5, #773] ; 0x305 -1001ba52: f8b4 34b4 ldrh.w r3, [r4, #1204] ; 0x4b4 -1001ba56: 3301 adds r3, #1 -1001ba58: b29b uxth r3, r3 -1001ba5a: 2b01 cmp r3, #1 -1001ba5c: f8a4 34b4 strh.w r3, [r4, #1204] ; 0x4b4 -1001ba60: d113 bne.n 1001ba8a -1001ba62: 4620 mov r0, r4 -1001ba64: 212a movs r1, #42 ; 0x2a -1001ba66: 2200 movs r2, #0 -1001ba68: 2301 movs r3, #1 -1001ba6a: f7ff facd bl 1001b008 -1001ba6e: 2601 movs r6, #1 -1001ba70: e00b b.n 1001ba8a -1001ba72: b153 cbz r3, 1001ba8a -1001ba74: 2300 movs r3, #0 -1001ba76: f885 3305 strb.w r3, [r5, #773] ; 0x305 -1001ba7a: f8b4 34b4 ldrh.w r3, [r4, #1204] ; 0x4b4 -1001ba7e: 3b01 subs r3, #1 -1001ba80: b29b uxth r3, r3 -1001ba82: f8a4 34b4 strh.w r3, [r4, #1204] ; 0x4b4 -1001ba86: 2b00 cmp r3, #0 -1001ba88: d0eb beq.n 1001ba62 -1001ba8a: f8b5 32c4 ldrh.w r3, [r5, #708] ; 0x2c4 -1001ba8e: f413 6f80 tst.w r3, #1024 ; 0x400 -1001ba92: f895 3306 ldrb.w r3, [r5, #774] ; 0x306 -1001ba96: d117 bne.n 1001bac8 -1001ba98: bb33 cbnz r3, 1001bae8 -1001ba9a: 2301 movs r3, #1 -1001ba9c: f885 3306 strb.w r3, [r5, #774] ; 0x306 -1001baa0: f8b4 34b6 ldrh.w r3, [r4, #1206] ; 0x4b6 -1001baa4: f894 2521 ldrb.w r2, [r4, #1313] ; 0x521 -1001baa8: 3301 adds r3, #1 -1001baaa: b29b uxth r3, r3 -1001baac: 2a01 cmp r2, #1 -1001baae: f8a4 34b6 strh.w r3, [r4, #1206] ; 0x4b6 -1001bab2: d919 bls.n 1001bae8 -1001bab4: 2b01 cmp r3, #1 -1001bab6: d117 bne.n 1001bae8 -1001bab8: 4620 mov r0, r4 -1001baba: 21ff movs r1, #255 ; 0xff -1001babc: 2200 movs r2, #0 -1001babe: 2301 movs r3, #1 -1001bac0: f7ff faa2 bl 1001b008 -1001bac4: 2601 movs r6, #1 -1001bac6: e00f b.n 1001bae8 -1001bac8: b173 cbz r3, 1001bae8 -1001baca: 2300 movs r3, #0 -1001bacc: f885 3306 strb.w r3, [r5, #774] ; 0x306 -1001bad0: f8b4 34b6 ldrh.w r3, [r4, #1206] ; 0x4b6 -1001bad4: f894 2521 ldrb.w r2, [r4, #1313] ; 0x521 -1001bad8: 3b01 subs r3, #1 -1001bada: b29b uxth r3, r3 -1001badc: 2a01 cmp r2, #1 -1001bade: f8a4 34b6 strh.w r3, [r4, #1206] ; 0x4b6 -1001bae2: d901 bls.n 1001bae8 -1001bae4: 2b00 cmp r3, #0 -1001bae6: d0e7 beq.n 1001bab8 -1001bae8: f8d5 32c8 ldr.w r3, [r5, #712] ; 0x2c8 -1001baec: f413 6f00 tst.w r3, #2048 ; 0x800 -1001baf0: f895 3309 ldrb.w r3, [r5, #777] ; 0x309 -1001baf4: d025 beq.n 1001bb42 -1001baf6: f8b5 2202 ldrh.w r2, [r5, #514] ; 0x202 -1001bafa: b13b cbz r3, 1001bb0c -1001bafc: 2300 movs r3, #0 -1001bafe: f885 3309 strb.w r3, [r5, #777] ; 0x309 -1001bb02: f8b4 3450 ldrh.w r3, [r4, #1104] ; 0x450 -1001bb06: 3b01 subs r3, #1 -1001bb08: f8a4 3450 strh.w r3, [r4, #1104] ; 0x450 -1001bb0c: 06d1 lsls r1, r2, #27 -1001bb0e: d40a bmi.n 1001bb26 -1001bb10: f895 3308 ldrb.w r3, [r5, #776] ; 0x308 -1001bb14: b93b cbnz r3, 1001bb26 -1001bb16: 2301 movs r3, #1 -1001bb18: f885 3308 strb.w r3, [r5, #776] ; 0x308 -1001bb1c: f8b4 34ba ldrh.w r3, [r4, #1210] ; 0x4ba -1001bb20: 3301 adds r3, #1 -1001bb22: f8a4 34ba strh.w r3, [r4, #1210] ; 0x4ba -1001bb26: 0793 lsls r3, r2, #30 -1001bb28: d414 bmi.n 1001bb54 -1001bb2a: f895 330a ldrb.w r3, [r5, #778] ; 0x30a -1001bb2e: b98b cbnz r3, 1001bb54 -1001bb30: 2301 movs r3, #1 -1001bb32: f885 330a strb.w r3, [r5, #778] ; 0x30a -1001bb36: f8b4 34bc ldrh.w r3, [r4, #1212] ; 0x4bc -1001bb3a: 3301 adds r3, #1 -1001bb3c: f8a4 34bc strh.w r3, [r4, #1212] ; 0x4bc -1001bb40: e008 b.n 1001bb54 -1001bb42: b93b cbnz r3, 1001bb54 -1001bb44: 2301 movs r3, #1 -1001bb46: f885 3309 strb.w r3, [r5, #777] ; 0x309 -1001bb4a: f8b4 3450 ldrh.w r3, [r4, #1104] ; 0x450 -1001bb4e: 3301 adds r3, #1 -1001bb50: f8a4 3450 strh.w r3, [r4, #1104] ; 0x450 -1001bb54: 4620 mov r0, r4 -1001bb56: f7ff f8dd bl 1001ad14 -1001bb5a: 2800 cmp r0, #0 -1001bb5c: dd0b ble.n 1001bb76 -1001bb5e: 2200 movs r2, #0 -1001bb60: 4613 mov r3, r2 -1001bb62: 4620 mov r0, r4 -1001bb64: 212d movs r1, #45 ; 0x2d -1001bb66: f7ff fa4f bl 1001b008 -1001bb6a: 4620 mov r0, r4 -1001bb6c: 213d movs r1, #61 ; 0x3d -1001bb6e: 2200 movs r2, #0 -1001bb70: 2301 movs r3, #1 -1001bb72: f7ff fa49 bl 1001b008 -1001bb76: 4620 mov r0, r4 -1001bb78: 4631 mov r1, r6 -1001bb7a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1001bb7e: f7ff bf23 b.w 1001b9c8 - -1001bb82 : -1001bb82: b570 push {r4, r5, r6, lr} -1001bb84: 4604 mov r4, r0 -1001bb86: 460d mov r5, r1 -1001bb88: 2900 cmp r1, #0 -1001bb8a: d075 beq.n 1001bc78 -1001bb8c: f891 3307 ldrb.w r3, [r1, #775] ; 0x307 -1001bb90: b90b cbnz r3, 1001bb96 -1001bb92: 2600 movs r6, #0 -1001bb94: e013 b.n 1001bbbe -1001bb96: 2300 movs r3, #0 -1001bb98: f881 3307 strb.w r3, [r1, #775] ; 0x307 -1001bb9c: f8b0 24b8 ldrh.w r2, [r0, #1208] ; 0x4b8 -1001bba0: f890 3521 ldrb.w r3, [r0, #1313] ; 0x521 -1001bba4: 3a01 subs r2, #1 -1001bba6: b292 uxth r2, r2 -1001bba8: 2b01 cmp r3, #1 -1001bbaa: f8a0 24b8 strh.w r2, [r0, #1208] ; 0x4b8 -1001bbae: d9f0 bls.n 1001bb92 -1001bbb0: 2a00 cmp r2, #0 -1001bbb2: d1ee bne.n 1001bb92 -1001bbb4: 21ff movs r1, #255 ; 0xff -1001bbb6: 2301 movs r3, #1 -1001bbb8: f7ff fa26 bl 1001b008 -1001bbbc: 2601 movs r6, #1 -1001bbbe: f895 3305 ldrb.w r3, [r5, #773] ; 0x305 -1001bbc2: b17b cbz r3, 1001bbe4 -1001bbc4: 2300 movs r3, #0 -1001bbc6: f885 3305 strb.w r3, [r5, #773] ; 0x305 -1001bbca: f8b4 24b4 ldrh.w r2, [r4, #1204] ; 0x4b4 -1001bbce: 3a01 subs r2, #1 -1001bbd0: b292 uxth r2, r2 -1001bbd2: f8a4 24b4 strh.w r2, [r4, #1204] ; 0x4b4 -1001bbd6: b92a cbnz r2, 1001bbe4 -1001bbd8: 4620 mov r0, r4 -1001bbda: 212a movs r1, #42 ; 0x2a -1001bbdc: 2301 movs r3, #1 -1001bbde: f7ff fa13 bl 1001b008 -1001bbe2: 2601 movs r6, #1 -1001bbe4: f895 3306 ldrb.w r3, [r5, #774] ; 0x306 -1001bbe8: b19b cbz r3, 1001bc12 -1001bbea: 2300 movs r3, #0 -1001bbec: f885 3306 strb.w r3, [r5, #774] ; 0x306 -1001bbf0: f8b4 24b6 ldrh.w r2, [r4, #1206] ; 0x4b6 -1001bbf4: f894 3521 ldrb.w r3, [r4, #1313] ; 0x521 -1001bbf8: 3a01 subs r2, #1 -1001bbfa: b292 uxth r2, r2 -1001bbfc: 2b01 cmp r3, #1 -1001bbfe: f8a4 24b6 strh.w r2, [r4, #1206] ; 0x4b6 -1001bc02: d906 bls.n 1001bc12 -1001bc04: b92a cbnz r2, 1001bc12 -1001bc06: 4620 mov r0, r4 -1001bc08: 21ff movs r1, #255 ; 0xff -1001bc0a: 2301 movs r3, #1 -1001bc0c: f7ff f9fc bl 1001b008 -1001bc10: 2601 movs r6, #1 -1001bc12: f895 3308 ldrb.w r3, [r5, #776] ; 0x308 -1001bc16: b13b cbz r3, 1001bc28 -1001bc18: 2300 movs r3, #0 -1001bc1a: f885 3308 strb.w r3, [r5, #776] ; 0x308 -1001bc1e: f8b4 34ba ldrh.w r3, [r4, #1210] ; 0x4ba -1001bc22: 3b01 subs r3, #1 -1001bc24: f8a4 34ba strh.w r3, [r4, #1210] ; 0x4ba -1001bc28: f895 3309 ldrb.w r3, [r5, #777] ; 0x309 -1001bc2c: b13b cbz r3, 1001bc3e -1001bc2e: 2300 movs r3, #0 -1001bc30: f885 3309 strb.w r3, [r5, #777] ; 0x309 -1001bc34: f8b4 3450 ldrh.w r3, [r4, #1104] ; 0x450 -1001bc38: 3b01 subs r3, #1 -1001bc3a: f8a4 3450 strh.w r3, [r4, #1104] ; 0x450 -1001bc3e: f895 330a ldrb.w r3, [r5, #778] ; 0x30a -1001bc42: b13b cbz r3, 1001bc54 -1001bc44: 2300 movs r3, #0 -1001bc46: f885 330a strb.w r3, [r5, #778] ; 0x30a -1001bc4a: f8b4 34bc ldrh.w r3, [r4, #1212] ; 0x4bc -1001bc4e: 3b01 subs r3, #1 -1001bc50: f8a4 34bc strh.w r3, [r4, #1212] ; 0x4bc -1001bc54: 4620 mov r0, r4 -1001bc56: f7ff f85d bl 1001ad14 -1001bc5a: 2800 cmp r0, #0 -1001bc5c: dd0d ble.n 1001bc7a -1001bc5e: 2200 movs r2, #0 -1001bc60: 4620 mov r0, r4 -1001bc62: 4613 mov r3, r2 -1001bc64: 212d movs r1, #45 ; 0x2d -1001bc66: f7ff f9cf bl 1001b008 -1001bc6a: 4620 mov r0, r4 -1001bc6c: 213d movs r1, #61 ; 0x3d -1001bc6e: 2200 movs r2, #0 -1001bc70: 2301 movs r3, #1 -1001bc72: f7ff f9c9 bl 1001b008 -1001bc76: e000 b.n 1001bc7a -1001bc78: 460e mov r6, r1 -1001bc7a: 4630 mov r0, r6 -1001bc7c: bd70 pop {r4, r5, r6, pc} - -1001bc7e : -1001bc7e: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1001bc80: 2300 movs r3, #0 -1001bc82: 4605 mov r5, r0 -1001bc84: 4617 mov r7, r2 -1001bc86: 460c mov r4, r1 -1001bc88: 2900 cmp r1, #0 -1001bc8a: d046 beq.n 1001bd1a -1001bc8c: f881 31ff strb.w r3, [r1, #511] ; 0x1ff -1001bc90: f881 3200 strb.w r3, [r1, #512] ; 0x200 -1001bc94: 6903 ldr r3, [r0, #16] -1001bc96: f501 7684 add.w r6, r1, #264 ; 0x108 -1001bc9a: f413 7f80 tst.w r3, #256 ; 0x100 -1001bc9e: d107 bne.n 1001bcb0 -1001bca0: f890 3901 ldrb.w r3, [r0, #2305] ; 0x901 -1001bca4: 2b00 cmp r3, #0 -1001bca6: d03a beq.n 1001bd1e -1001bca8: f895 3902 ldrb.w r3, [r5, #2306] ; 0x902 -1001bcac: 2b00 cmp r3, #0 -1001bcae: d036 beq.n 1001bd1e -1001bcb0: f8d4 2100 ldr.w r2, [r4, #256] ; 0x100 -1001bcb4: 2301 movs r3, #1 -1001bcb6: 3203 adds r2, #3 -1001bcb8: b2d2 uxtb r2, r2 -1001bcba: 4621 mov r1, r4 -1001bcbc: 4628 mov r0, r5 -1001bcbe: f000 ff91 bl 1001cbe4 -1001bcc2: 4620 mov r0, r4 -1001bcc4: a901 add r1, sp, #4 -1001bcc6: f7fb fc7f bl 100175c8 -1001bcca: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 -1001bcce: 4620 mov r0, r4 -1001bcd0: f023 0301 bic.w r3, r3, #1 -1001bcd4: f8c4 30f8 str.w r3, [r4, #248] ; 0xf8 -1001bcd8: a901 add r1, sp, #4 -1001bcda: f7fb fc7f bl 100175dc -1001bcde: 4631 mov r1, r6 -1001bce0: 4628 mov r0, r5 -1001bce2: f017 ffa9 bl 10033c38 -1001bce6: 463a mov r2, r7 -1001bce8: 4631 mov r1, r6 -1001bcea: 4628 mov r0, r5 -1001bcec: f005 fc0a bl 10021504 -1001bcf0: 4621 mov r1, r4 -1001bcf2: 4628 mov r0, r5 -1001bcf4: f7ff ff45 bl 1001bb82 -1001bcf8: f605 4678 addw r6, r5, #3192 ; 0xc78 -1001bcfc: 4607 mov r7, r0 -1001bcfe: a901 add r1, sp, #4 -1001bd00: 4630 mov r0, r6 -1001bd02: f7fb fc61 bl 100175c8 -1001bd06: 4621 mov r1, r4 -1001bd08: 4628 mov r0, r5 -1001bd0a: f00c f9e0 bl 100280ce -1001bd0e: 4630 mov r0, r6 -1001bd10: a901 add r1, sp, #4 -1001bd12: f7fb fc63 bl 100175dc -1001bd16: 4638 mov r0, r7 -1001bd18: e007 b.n 1001bd2a -1001bd1a: 4608 mov r0, r1 -1001bd1c: e005 b.n 1001bd2a -1001bd1e: 4628 mov r0, r5 -1001bd20: 4631 mov r1, r6 -1001bd22: 463a mov r2, r7 -1001bd24: f004 fafe bl 10020324 -1001bd28: e7c2 b.n 1001bcb0 -1001bd2a: b003 add sp, #12 -1001bd2c: bdf0 pop {r4, r5, r6, r7, pc} - ... - -1001bd30 : -1001bd30: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1001bd34: f600 46d8 addw r6, r0, #3288 ; 0xcd8 -1001bd38: b086 sub sp, #24 -1001bd3a: 4604 mov r4, r0 -1001bd3c: 2300 movs r3, #0 -1001bd3e: 4630 mov r0, r6 -1001bd40: a905 add r1, sp, #20 -1001bd42: f88d 3013 strb.w r3, [sp, #19] -1001bd46: f7fb fc3f bl 100175c8 -1001bd4a: f8d4 5ccc ldr.w r5, [r4, #3276] ; 0xccc -1001bd4e: f604 48cc addw r8, r4, #3276 ; 0xccc -1001bd52: 4640 mov r0, r8 -1001bd54: 4629 mov r1, r5 -1001bd56: f7fb fc14 bl 10017582 -1001bd5a: bb18 cbnz r0, 1001bda4 -1001bd5c: 68ab ldr r3, [r5, #8] -1001bd5e: f8d5 9000 ldr.w r9, [r5] -1001bd62: f5a5 7709 sub.w r7, r5, #548 ; 0x224 -1001bd66: b1db cbz r3, 1001bda0 -1001bd68: 3b01 subs r3, #1 -1001bd6a: 60ab str r3, [r5, #8] -1001bd6c: b9c3 cbnz r3, 1001bda0 -1001bd6e: 4628 mov r0, r5 -1001bd70: f7fb fb7a bl 10017468 -1001bd74: f604 4578 addw r5, r4, #3192 ; 0xc78 -1001bd78: 4630 mov r0, r6 -1001bd7a: a905 add r1, sp, #20 -1001bd7c: f7fb fc2e bl 100175dc -1001bd80: 4628 mov r0, r5 -1001bd82: a905 add r1, sp, #20 -1001bd84: f7fb fc20 bl 100175c8 -1001bd88: 4639 mov r1, r7 -1001bd8a: 4620 mov r0, r4 -1001bd8c: f00c f99f bl 100280ce -1001bd90: 4628 mov r0, r5 -1001bd92: a905 add r1, sp, #20 -1001bd94: f7fb fc22 bl 100175dc -1001bd98: 4630 mov r0, r6 -1001bd9a: a905 add r1, sp, #20 -1001bd9c: f7fb fc14 bl 100175c8 -1001bda0: 464d mov r5, r9 -1001bda2: e7d6 b.n 1001bd52 -1001bda4: 4630 mov r0, r6 -1001bda6: a905 add r1, sp, #20 -1001bda8: f604 48d4 addw r8, r4, #3284 ; 0xcd4 -1001bdac: f7fb fc16 bl 100175dc -1001bdb0: 4640 mov r0, r8 -1001bdb2: a905 add r1, sp, #20 -1001bdb4: f7fb fc08 bl 100175c8 -1001bdb8: f8d4 6cc4 ldr.w r6, [r4, #3268] ; 0xcc4 -1001bdbc: f604 49c4 addw r9, r4, #3268 ; 0xcc4 -1001bdc0: 2700 movs r7, #0 -1001bdc2: 4648 mov r0, r9 -1001bdc4: 4631 mov r1, r6 -1001bdc6: f7fb fbdc bl 10017582 -1001bdca: 2800 cmp r0, #0 -1001bdcc: d144 bne.n 1001be58 -1001bdce: f5a6 7507 sub.w r5, r6, #540 ; 0x21c -1001bdd2: 4628 mov r0, r5 -1001bdd4: f8d6 a000 ldr.w sl, [r6] -1001bdd8: f7ff f813 bl 1001ae02 -1001bddc: b118 cbz r0, 1001bde6 -1001bdde: f8d4 3ce4 ldr.w r3, [r4, #3300] ; 0xce4 -1001bde2: f8c5 322c str.w r3, [r5, #556] ; 0x22c -1001bde6: f8d5 322c ldr.w r3, [r5, #556] ; 0x22c -1001bdea: 2b00 cmp r3, #0 -1001bdec: d032 beq.n 1001be54 -1001bdee: 3b01 subs r3, #1 -1001bdf0: f8c5 322c str.w r3, [r5, #556] ; 0x22c -1001bdf4: bb1b cbnz r3, 1001be3e -1001bdf6: 4630 mov r0, r6 -1001bdf8: f7fb fb36 bl 10017468 -1001bdfc: 4b31 ldr r3, [pc, #196] ; (1001bec4 ) -1001bdfe: 681b ldr r3, [r3, #0] -1001be00: b1b3 cbz r3, 1001be30 -1001be02: 4831 ldr r0, [pc, #196] ; (1001bec8 ) -1001be04: f7fe feac bl 1001ab60 -1001be08: f895 010b ldrb.w r0, [r5, #267] ; 0x10b -1001be0c: f895 1108 ldrb.w r1, [r5, #264] ; 0x108 -1001be10: f895 2109 ldrb.w r2, [r5, #265] ; 0x109 -1001be14: f895 310a ldrb.w r3, [r5, #266] ; 0x10a -1001be18: 9000 str r0, [sp, #0] -1001be1a: f895 010c ldrb.w r0, [r5, #268] ; 0x10c -1001be1e: 9001 str r0, [sp, #4] -1001be20: f895 010d ldrb.w r0, [r5, #269] ; 0x10d -1001be24: 9002 str r0, [sp, #8] -1001be26: 4829 ldr r0, [pc, #164] ; (1001becc ) -1001be28: f8d0 0118 ldr.w r0, [r0, #280] ; 0x118 -1001be2c: f7fe fe98 bl 1001ab60 -1001be30: 4620 mov r0, r4 -1001be32: 4629 mov r1, r5 -1001be34: 2203 movs r2, #3 -1001be36: f7ff ff22 bl 1001bc7e -1001be3a: 4607 mov r7, r0 -1001be3c: e00a b.n 1001be54 -1001be3e: 4b24 ldr r3, [pc, #144] ; (1001bed0 ) -1001be40: 681a ldr r2, [r3, #0] -1001be42: f8d5 30f4 ldr.w r3, [r5, #244] ; 0xf4 -1001be46: ebb3 0f52 cmp.w r3, r2, lsr #1 -1001be4a: d903 bls.n 1001be54 -1001be4c: 4620 mov r0, r4 -1001be4e: 4629 mov r1, r5 -1001be50: f00e f94f bl 1002a0f2 -1001be54: 4656 mov r6, sl -1001be56: e7b4 b.n 1001bdc2 -1001be58: 4640 mov r0, r8 -1001be5a: a905 add r1, sp, #20 -1001be5c: f7fb fbbe bl 100175dc -1001be60: 4b1c ldr r3, [pc, #112] ; (1001bed4 ) -1001be62: 681b ldr r3, [r3, #0] -1001be64: b10b cbz r3, 1001be6a -1001be66: 4620 mov r0, r4 -1001be68: 4798 blx r3 -1001be6a: 4639 mov r1, r7 -1001be6c: 4620 mov r0, r4 -1001be6e: f7ff fdab bl 1001b9c8 -1001be72: 4620 mov r0, r4 -1001be74: f00c fa64 bl 10028340 -1001be78: 2146 movs r1, #70 ; 0x46 -1001be7a: 4605 mov r5, r0 -1001be7c: f10d 0213 add.w r2, sp, #19 -1001be80: 4620 mov r0, r4 -1001be82: f016 fb2d bl 100324e0 -1001be86: f89d 3013 ldrb.w r3, [sp, #19] -1001be8a: 2b01 cmp r3, #1 -1001be8c: d116 bne.n 1001bebc -1001be8e: b1ad cbz r5, 1001bebc -1001be90: f8d5 20f4 ldr.w r2, [r5, #244] ; 0xf4 -1001be94: b992 cbnz r2, 1001bebc -1001be96: f8b4 3cfe ldrh.w r3, [r4, #3326] ; 0xcfe -1001be9a: 07d9 lsls r1, r3, #31 -1001be9c: d50e bpl.n 1001bebc -1001be9e: f023 0301 bic.w r3, r3, #1 -1001bea2: f8a4 3cfe strh.w r3, [r4, #3326] ; 0xcfe -1001bea6: f8b4 3cfc ldrh.w r3, [r4, #3324] ; 0xcfc -1001beaa: 4620 mov r0, r4 -1001beac: f023 0301 bic.w r3, r3, #1 -1001beb0: f8a4 3cfc strh.w r3, [r4, #3324] ; 0xcfc -1001beb4: 2105 movs r1, #5 -1001beb6: 4613 mov r3, r2 -1001beb8: f7ff f8a6 bl 1001b008 -1001bebc: b006 add sp, #24 -1001bebe: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1001bec2: bf00 nop -1001bec4: 10044ec0 .word 0x10044ec0 -1001bec8: 10042939 .word 0x10042939 -1001becc: 10043a4c .word 0x10043a4c -1001bed0: 10044f40 .word 0x10044f40 -1001bed4: 1004baec .word 0x1004baec - -1001bed8 : -1001bed8: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -1001bedc: 4b1e ldr r3, [pc, #120] ; (1001bf58 ) -1001bede: 4604 mov r4, r0 -1001bee0: 6818 ldr r0, [r3, #0] -1001bee2: 889b ldrh r3, [r3, #4] -1001bee4: b085 sub sp, #20 -1001bee6: f8ad 300c strh.w r3, [sp, #12] -1001beea: 6923 ldr r3, [r4, #16] -1001beec: 9002 str r0, [sp, #8] -1001beee: 06db lsls r3, r3, #27 -1001bef0: d52e bpl.n 1001bf50 -1001bef2: f604 46d4 addw r6, r4, #3284 ; 0xcd4 -1001bef6: 4630 mov r0, r6 -1001bef8: a901 add r1, sp, #4 -1001befa: f7fb fb65 bl 100175c8 -1001befe: f8d4 5cc4 ldr.w r5, [r4, #3268] ; 0xcc4 -1001bf02: f604 47c4 addw r7, r4, #3268 ; 0xcc4 -1001bf06: 4638 mov r0, r7 -1001bf08: 4629 mov r1, r5 -1001bf0a: f7fb fb3a bl 10017582 -1001bf0e: b968 cbnz r0, 1001bf2c -1001bf10: 4628 mov r0, r5 -1001bf12: f8d5 8000 ldr.w r8, [r5] -1001bf16: f5a5 7907 sub.w r9, r5, #540 ; 0x21c -1001bf1a: f7fb faa5 bl 10017468 -1001bf1e: 4620 mov r0, r4 -1001bf20: 4649 mov r1, r9 -1001bf22: 2203 movs r2, #3 -1001bf24: f7ff feab bl 1001bc7e -1001bf28: 4645 mov r5, r8 -1001bf2a: e7ec b.n 1001bf06 -1001bf2c: 4630 mov r0, r6 -1001bf2e: a901 add r1, sp, #4 -1001bf30: f7fb fb54 bl 100175dc -1001bf34: f894 3901 ldrb.w r3, [r4, #2305] ; 0x901 -1001bf38: b113 cbz r3, 1001bf40 -1001bf3a: f894 3902 ldrb.w r3, [r4, #2306] ; 0x902 -1001bf3e: b923 cbnz r3, 1001bf4a -1001bf40: 4620 mov r0, r4 -1001bf42: a902 add r1, sp, #8 -1001bf44: 2203 movs r2, #3 -1001bf46: f004 f9ed bl 10020324 -1001bf4a: 4620 mov r0, r4 -1001bf4c: f7fe ff3b bl 1001adc6 -1001bf50: 2000 movs r0, #0 -1001bf52: b005 add sp, #20 -1001bf54: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -1001bf58: 10040e9f .word 0x10040e9f - -1001bf5c : -1001bf5c: b573 push {r0, r1, r4, r5, r6, lr} -1001bf5e: 2500 movs r5, #0 -1001bf60: 4604 mov r4, r0 -1001bf62: f880 5508 strb.w r5, [r0, #1288] ; 0x508 -1001bf66: f880 5858 strb.w r5, [r0, #2136] ; 0x858 -1001bf6a: f7ff ffb5 bl 1001bed8 -1001bf6e: f8c4 5680 str.w r5, [r4, #1664] ; 0x680 -1001bf72: 4620 mov r0, r4 -1001bf74: f00c f9f6 bl 10028364 -1001bf78: 4620 mov r0, r4 -1001bf7a: f00c f9e1 bl 10028340 -1001bf7e: f604 4578 addw r5, r4, #3192 ; 0xc78 -1001bf82: 4606 mov r6, r0 -1001bf84: a901 add r1, sp, #4 -1001bf86: 4628 mov r0, r5 -1001bf88: f7fb fb1e bl 100175c8 -1001bf8c: 4631 mov r1, r6 -1001bf8e: 4620 mov r0, r4 -1001bf90: f00c f89d bl 100280ce -1001bf94: 4628 mov r0, r5 -1001bf96: a901 add r1, sp, #4 -1001bf98: f7fb fb20 bl 100175dc -1001bf9c: f204 5004 addw r0, r4, #1284 ; 0x504 -1001bfa0: f7fb fb02 bl 100175a8 -1001bfa4: b002 add sp, #8 -1001bfa6: bd70 pop {r4, r5, r6, pc} - -1001bfa8 : -1001bfa8: f8d1 32c8 ldr.w r3, [r1, #712] ; 0x2c8 -1001bfac: f413 7200 ands.w r2, r3, #512 ; 0x200 -1001bfb0: bf18 it ne -1001bfb2: 2201 movne r2, #1 -1001bfb4: f8c1 2104 str.w r2, [r1, #260] ; 0x104 -1001bfb8: f8d0 244c ldr.w r2, [r0, #1100] ; 0x44c -1001bfbc: b90a cbnz r2, 1001bfc2 -1001bfbe: f8c1 2104 str.w r2, [r1, #260] ; 0x104 -1001bfc2: f413 6300 ands.w r3, r3, #2048 ; 0x800 -1001bfc6: bf1d ittte ne -1001bfc8: 2301 movne r3, #1 -1001bfca: f8c1 31f4 strne.w r3, [r1, #500] ; 0x1f4 -1001bfce: f8c1 3104 strne.w r3, [r1, #260] ; 0x104 -1001bfd2: f8c1 31f4 streq.w r3, [r1, #500] ; 0x1f4 -1001bfd6: f8d0 3454 ldr.w r3, [r0, #1108] ; 0x454 -1001bfda: b90b cbnz r3, 1001bfe0 -1001bfdc: f8c1 31f4 str.w r3, [r1, #500] ; 0x1f4 -1001bfe0: f7fe bfb6 b.w 1001af50 - -1001bfe4 : -1001bfe4: b538 push {r3, r4, r5, lr} -1001bfe6: f8d1 30f8 ldr.w r3, [r1, #248] ; 0xf8 -1001bfea: 4605 mov r5, r0 -1001bfec: 07db lsls r3, r3, #31 -1001bfee: 460c mov r4, r1 -1001bff0: d50f bpl.n 1001c012 -1001bff2: f8d1 3100 ldr.w r3, [r1, #256] ; 0x100 -1001bff6: 2200 movs r2, #0 -1001bff8: eb00 1343 add.w r3, r0, r3, lsl #5 -1001bffc: f8c3 1790 str.w r1, [r3, #1936] ; 0x790 -1001c000: f7fe ff1e bl 1001ae40 -1001c004: 4628 mov r0, r5 -1001c006: f8d4 1100 ldr.w r1, [r4, #256] ; 0x100 -1001c00a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1001c00e: f016 bb9c b.w 1003274a -1001c012: bd38 pop {r3, r4, r5, pc} - -1001c014 : -1001c014: 2300 movs r3, #0 -1001c016: f880 3508 strb.w r3, [r0, #1288] ; 0x508 -1001c01a: f880 3858 strb.w r3, [r0, #2136] ; 0x858 -1001c01e: f8a0 34b4 strh.w r3, [r0, #1204] ; 0x4b4 -1001c022: f8a0 34b6 strh.w r3, [r0, #1206] ; 0x4b6 -1001c026: f8a0 34b8 strh.w r3, [r0, #1208] ; 0x4b8 -1001c02a: f8a0 34ba strh.w r3, [r0, #1210] ; 0x4ba -1001c02e: f8a0 3450 strh.w r3, [r0, #1104] ; 0x450 -1001c032: f8a0 34bc strh.w r3, [r0, #1212] ; 0x4bc -1001c036: f880 34be strb.w r3, [r0, #1214] ; 0x4be -1001c03a: f8a0 34c0 strh.w r3, [r0, #1216] ; 0x4c0 -1001c03e: f8c0 3ce8 str.w r3, [r0, #3304] ; 0xce8 -1001c042: f8c0 3cec str.w r3, [r0, #3308] ; 0xcec -1001c046: f8c0 3cf0 str.w r3, [r0, #3312] ; 0xcf0 -1001c04a: f8c0 3cf4 str.w r3, [r0, #3316] ; 0xcf4 -1001c04e: f8c0 3cf8 str.w r3, [r0, #3320] ; 0xcf8 -1001c052: 4770 bx lr - -1001c054 : -1001c054: b510 push {r4, lr} -1001c056: 4604 mov r4, r0 -1001c058: f200 5004 addw r0, r0, #1284 ; 0x504 -1001c05c: f7fb fa96 bl 1001758c -1001c060: 4620 mov r0, r4 -1001c062: e8bd 4010 ldmia.w sp!, {r4, lr} -1001c066: f7ff bfd5 b.w 1001c014 - -1001c06a : -1001c06a: 2300 movs r3, #0 -1001c06c: b573 push {r0, r1, r4, r5, r6, lr} -1001c06e: f880 3508 strb.w r3, [r0, #1288] ; 0x508 -1001c072: f880 3858 strb.w r3, [r0, #2136] ; 0x858 -1001c076: 4604 mov r4, r0 -1001c078: f7ff ff2e bl 1001bed8 -1001c07c: 4620 mov r0, r4 -1001c07e: f00c f971 bl 10028364 -1001c082: 4620 mov r0, r4 -1001c084: f00c f95c bl 10028340 -1001c088: f604 4578 addw r5, r4, #3192 ; 0xc78 -1001c08c: 4606 mov r6, r0 -1001c08e: a901 add r1, sp, #4 -1001c090: 4628 mov r0, r5 -1001c092: f7fb fa99 bl 100175c8 -1001c096: 4631 mov r1, r6 -1001c098: 4620 mov r0, r4 -1001c09a: f00c f818 bl 100280ce -1001c09e: a901 add r1, sp, #4 -1001c0a0: 4628 mov r0, r5 -1001c0a2: f7fb fa9b bl 100175dc -1001c0a6: 4620 mov r0, r4 -1001c0a8: f00c f932 bl 10028310 -1001c0ac: f104 000c add.w r0, r4, #12 -1001c0b0: f001 f973 bl 1001d39a -1001c0b4: b002 add sp, #8 -1001c0b6: bd70 pop {r4, r5, r6, pc} - -1001c0b8 : -1001c0b8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001c0bc: 4605 mov r5, r0 -1001c0be: f505 599c add.w r9, r5, #4992 ; 0x1380 -1001c0c2: f109 0908 add.w r9, r9, #8 -1001c0c6: f8d9 4040 ldr.w r4, [r9, #64] ; 0x40 -1001c0ca: b091 sub sp, #68 ; 0x44 -1001c0cc: 811c strh r4, [r3, #8] -1001c0ce: f8d5 4d0c ldr.w r4, [r5, #3340] ; 0xd0c -1001c0d2: 4618 mov r0, r3 -1001c0d4: 2c00 cmp r4, #0 -1001c0d6: bf0c ite eq -1001c0d8: 2321 moveq r3, #33 ; 0x21 -1001c0da: 2331 movne r3, #49 ; 0x31 -1001c0dc: 8143 strh r3, [r0, #10] -1001c0de: af10 add r7, sp, #64 ; 0x40 -1001c0e0: 230c movs r3, #12 -1001c0e2: 460e mov r6, r1 -1001c0e4: f847 3d38 str.w r3, [r7, #-56]! -1001c0e8: 4418 add r0, r3 -1001c0ea: 2100 movs r1, #0 -1001c0ec: 4633 mov r3, r6 -1001c0ee: 9700 str r7, [sp, #0] -1001c0f0: f022 fbde bl 1003e8b0 <__rtw_set_ie_veneer> -1001c0f4: f899 102d ldrb.w r1, [r9, #45] ; 0x2d -1001c0f8: 4606 mov r6, r0 -1001c0fa: 291f cmp r1, #31 -1001c0fc: d105 bne.n 1001c10a -1001c0fe: f895 351e ldrb.w r3, [r5, #1310] ; 0x51e -1001c102: 2b0f cmp r3, #15 -1001c104: bf34 ite cc -1001c106: 210b movcc r1, #11 -1001c108: 2114 movcs r1, #20 -1001c10a: 686b ldr r3, [r5, #4] -1001c10c: ac05 add r4, sp, #20 -1001c10e: 2b05 cmp r3, #5 -1001c110: bf08 it eq -1001c112: 2102 moveq r1, #2 -1001c114: 4620 mov r0, r4 -1001c116: f022 fbe3 bl 1003e8e0 <__rtw_set_supported_rate_veneer> -1001c11a: 4620 mov r0, r4 -1001c11c: f022 fc3c bl 1003e998 <__rtw_get_rateset_len_veneer> -1001c120: 686b ldr r3, [r5, #4] -1001c122: 4680 mov r8, r0 -1001c124: 2b05 cmp r3, #5 -1001c126: d007 beq.n 1001c138 -1001c128: f1b8 0f08 cmp.w r8, #8 -1001c12c: d915 bls.n 1001c15a -1001c12e: 9700 str r7, [sp, #0] -1001c130: 4630 mov r0, r6 -1001c132: 2101 movs r1, #1 -1001c134: 2208 movs r2, #8 -1001c136: e014 b.n 1001c162 -1001c138: 2300 movs r3, #0 -1001c13a: 4543 cmp r3, r8 -1001c13c: d0f4 beq.n 1001c128 -1001c13e: 5ce1 ldrb r1, [r4, r3] -1001c140: f001 027f and.w r2, r1, #127 ; 0x7f -1001c144: 2a18 cmp r2, #24 -1001c146: d003 beq.n 1001c150 -1001c148: 2a30 cmp r2, #48 ; 0x30 -1001c14a: d001 beq.n 1001c150 -1001c14c: 2a0c cmp r2, #12 -1001c14e: d102 bne.n 1001c156 -1001c150: f061 017f orn r1, r1, #127 ; 0x7f -1001c154: 54e1 strb r1, [r4, r3] -1001c156: 3301 adds r3, #1 -1001c158: e7ef b.n 1001c13a -1001c15a: 9700 str r7, [sp, #0] -1001c15c: 4630 mov r0, r6 -1001c15e: 2101 movs r1, #1 -1001c160: 4642 mov r2, r8 -1001c162: 4623 mov r3, r4 -1001c164: f022 fba4 bl 1003e8b0 <__rtw_set_ie_veneer> -1001c168: 2103 movs r1, #3 -1001c16a: 2201 movs r2, #1 -1001c16c: f205 531e addw r3, r5, #1310 ; 0x51e -1001c170: 9700 str r7, [sp, #0] -1001c172: f022 fb9d bl 1003e8b0 <__rtw_set_ie_veneer> -1001c176: ae10 add r6, sp, #64 ; 0x40 -1001c178: 2300 movs r3, #0 -1001c17a: f806 3d1c strb.w r3, [r6, #-28]! -1001c17e: 4633 mov r3, r6 -1001c180: 9700 str r7, [sp, #0] -1001c182: 212a movs r1, #42 ; 0x2a -1001c184: 2201 movs r2, #1 -1001c186: f022 fb93 bl 1003e8b0 <__rtw_set_ie_veneer> -1001c18a: f241 036c movw r3, #4204 ; 0x106c -1001c18e: 58eb ldr r3, [r5, r3] -1001c190: 4604 mov r4, r0 -1001c192: 2b07 cmp r3, #7 -1001c194: d132 bne.n 1001c1fc -1001c196: 2330 movs r3, #48 ; 0x30 -1001c198: 7003 strb r3, [r0, #0] -1001c19a: 2314 movs r3, #20 -1001c19c: 7043 strb r3, [r0, #1] -1001c19e: 2301 movs r3, #1 -1001c1a0: 7083 strb r3, [r0, #2] -1001c1a2: f8d5 2d64 ldr.w r2, [r5, #3428] ; 0xd64 -1001c1a6: 3004 adds r0, #4 -1001c1a8: 2a04 cmp r2, #4 -1001c1aa: d101 bne.n 1001c1b0 -1001c1ac: 4994 ldr r1, [pc, #592] ; (1001c400 ) -1001c1ae: e003 b.n 1001c1b8 -1001c1b0: 2a02 cmp r2, #2 -1001c1b2: d103 bne.n 1001c1bc -1001c1b4: 4993 ldr r1, [pc, #588] ; (1001c404 ) -1001c1b6: 2204 movs r2, #4 -1001c1b8: f7fb f92a bl 10017410 -1001c1bc: 2301 movs r3, #1 -1001c1be: 7223 strb r3, [r4, #8] -1001c1c0: f8d5 2d0c ldr.w r2, [r5, #3340] ; 0xd0c -1001c1c4: f104 000a add.w r0, r4, #10 -1001c1c8: 2a04 cmp r2, #4 -1001c1ca: d101 bne.n 1001c1d0 -1001c1cc: 498c ldr r1, [pc, #560] ; (1001c400 ) -1001c1ce: e005 b.n 1001c1dc -1001c1d0: f8d5 3d64 ldr.w r3, [r5, #3428] ; 0xd64 -1001c1d4: 2b02 cmp r3, #2 -1001c1d6: d103 bne.n 1001c1e0 -1001c1d8: 498a ldr r1, [pc, #552] ; (1001c404 ) -1001c1da: 2204 movs r2, #4 -1001c1dc: f7fb f918 bl 10017410 -1001c1e0: 2301 movs r3, #1 -1001c1e2: 73a3 strb r3, [r4, #14] -1001c1e4: f104 0010 add.w r0, r4, #16 -1001c1e8: 4987 ldr r1, [pc, #540] ; (1001c408 ) -1001c1ea: 2204 movs r2, #4 -1001c1ec: f7fb f910 bl 10017410 -1001c1f0: 2300 movs r3, #0 -1001c1f2: 7523 strb r3, [r4, #20] -1001c1f4: 9b02 ldr r3, [sp, #8] -1001c1f6: 3416 adds r4, #22 -1001c1f8: 3316 adds r3, #22 -1001c1fa: 9302 str r3, [sp, #8] -1001c1fc: f1b8 0f08 cmp.w r8, #8 -1001c200: d908 bls.n 1001c214 -1001c202: 4620 mov r0, r4 -1001c204: 9700 str r7, [sp, #0] -1001c206: 2132 movs r1, #50 ; 0x32 -1001c208: f1a8 0208 sub.w r2, r8, #8 -1001c20c: ab07 add r3, sp, #28 -1001c20e: f022 fb4f bl 1003e8b0 <__rtw_set_ie_veneer> -1001c212: 4604 mov r4, r0 -1001c214: f899 3044 ldrb.w r3, [r9, #68] ; 0x44 -1001c218: 2b00 cmp r3, #0 -1001c21a: d032 beq.n 1001c282 -1001c21c: 4630 mov r0, r6 -1001c21e: 2100 movs r1, #0 -1001c220: 221a movs r2, #26 -1001c222: f7fb f905 bl 10017430 -1001c226: 2320 movs r3, #32 -1001c228: 210d movs r1, #13 -1001c22a: aa03 add r2, sp, #12 -1001c22c: 4628 mov r0, r5 -1001c22e: f8ad 3024 strh.w r3, [sp, #36] ; 0x24 -1001c232: f016 f965 bl 10032500 -1001c236: f8d5 2d0c ldr.w r2, [r5, #3340] ; 0xd0c -1001c23a: 9b03 ldr r3, [sp, #12] -1001c23c: 2a04 cmp r2, #4 -1001c23e: f003 0303 and.w r3, r3, #3 -1001c242: f88d 3026 strb.w r3, [sp, #38] ; 0x26 -1001c246: bf04 itt eq -1001c248: f043 031c orreq.w r3, r3, #28 -1001c24c: f88d 3026 strbeq.w r3, [sp, #38] ; 0x26 -1001c250: 4620 mov r0, r4 -1001c252: 4633 mov r3, r6 -1001c254: 212d movs r1, #45 ; 0x2d -1001c256: 221a movs r2, #26 -1001c258: 9700 str r7, [sp, #0] -1001c25a: f022 fb29 bl 1003e8b0 <__rtw_set_ie_veneer> -1001c25e: 2100 movs r1, #0 -1001c260: 4604 mov r4, r0 -1001c262: 2216 movs r2, #22 -1001c264: 4630 mov r0, r6 -1001c266: f7fb f8e3 bl 10017430 -1001c26a: f895 351e ldrb.w r3, [r5, #1310] ; 0x51e -1001c26e: 4620 mov r0, r4 -1001c270: f88d 3024 strb.w r3, [sp, #36] ; 0x24 -1001c274: 9700 str r7, [sp, #0] -1001c276: 213d movs r1, #61 ; 0x3d -1001c278: 2216 movs r2, #22 -1001c27a: 4633 mov r3, r6 -1001c27c: f022 fb18 bl 1003e8b0 <__rtw_set_ie_veneer> -1001c280: 4604 mov r4, r0 -1001c282: f241 036c movw r3, #4204 ; 0x106c -1001c286: f855 a003 ldr.w sl, [r5, r3] -1001c28a: 1ca0 adds r0, r4, #2 -1001c28c: f1ba 0f04 cmp.w sl, #4 -1001c290: d132 bne.n 1001c2f8 -1001c292: 23dd movs r3, #221 ; 0xdd -1001c294: 7023 strb r3, [r4, #0] -1001c296: 2316 movs r3, #22 -1001c298: 7063 strb r3, [r4, #1] -1001c29a: 495c ldr r1, [pc, #368] ; (1001c40c ) -1001c29c: 4652 mov r2, sl -1001c29e: f04f 0b01 mov.w fp, #1 -1001c2a2: f7fb f8b5 bl 10017410 -1001c2a6: f884 b006 strb.w fp, [r4, #6] -1001c2aa: f8d5 3d64 ldr.w r3, [r5, #3428] ; 0xd64 -1001c2ae: f104 0808 add.w r8, r4, #8 -1001c2b2: 2b02 cmp r3, #2 -1001c2b4: d108 bne.n 1001c2c8 -1001c2b6: 4640 mov r0, r8 -1001c2b8: 4955 ldr r1, [pc, #340] ; (1001c410 ) -1001c2ba: 4652 mov r2, sl -1001c2bc: f7fb f8a8 bl 10017410 -1001c2c0: f104 080e add.w r8, r4, #14 -1001c2c4: f884 b00c strb.w fp, [r4, #12] -1001c2c8: f8d5 3d0c ldr.w r3, [r5, #3340] ; 0xd0c -1001c2cc: 2b02 cmp r3, #2 -1001c2ce: d109 bne.n 1001c2e4 -1001c2d0: 4640 mov r0, r8 -1001c2d2: 494f ldr r1, [pc, #316] ; (1001c410 ) -1001c2d4: 2204 movs r2, #4 -1001c2d6: f7fb f89b bl 10017410 -1001c2da: 2301 movs r3, #1 -1001c2dc: f888 3004 strb.w r3, [r8, #4] -1001c2e0: f108 0806 add.w r8, r8, #6 -1001c2e4: 4640 mov r0, r8 -1001c2e6: 494a ldr r1, [pc, #296] ; (1001c410 ) -1001c2e8: 2204 movs r2, #4 -1001c2ea: f7fb f891 bl 10017410 -1001c2ee: 9b02 ldr r3, [sp, #8] -1001c2f0: f108 0404 add.w r4, r8, #4 -1001c2f4: 3318 adds r3, #24 -1001c2f6: e00f b.n 1001c318 -1001c2f8: f241 0370 movw r3, #4208 ; 0x1070 -1001c2fc: 58eb ldr r3, [r5, r3] -1001c2fe: b963 cbnz r3, 1001c31a -1001c300: 23dd movs r3, #221 ; 0xdd -1001c302: 2505 movs r5, #5 -1001c304: 7023 strb r3, [r4, #0] -1001c306: 7065 strb r5, [r4, #1] -1001c308: 4940 ldr r1, [pc, #256] ; (1001c40c ) -1001c30a: 2204 movs r2, #4 -1001c30c: f7fb f880 bl 10017410 -1001c310: 9b02 ldr r3, [sp, #8] -1001c312: 7165 strb r5, [r4, #5] -1001c314: 3307 adds r3, #7 -1001c316: 3407 adds r4, #7 -1001c318: 9302 str r3, [sp, #8] -1001c31a: f899 303d ldrb.w r3, [r9, #61] ; 0x3d -1001c31e: b3c3 cbz r3, 1001c392 -1001c320: 23dd movs r3, #221 ; 0xdd -1001c322: 7023 strb r3, [r4, #0] -1001c324: 2318 movs r3, #24 -1001c326: 7063 strb r3, [r4, #1] -1001c328: 1ca0 adds r0, r4, #2 -1001c32a: 493a ldr r1, [pc, #232] ; (1001c414 ) -1001c32c: 2206 movs r2, #6 -1001c32e: f7fb f86f bl 10017410 -1001c332: 2300 movs r3, #0 -1001c334: f88d 3025 strb.w r3, [sp, #37] ; 0x25 -1001c338: f8ad 3028 strh.w r3, [sp, #40] ; 0x28 -1001c33c: f8ad 302c strh.w r3, [sp, #44] ; 0x2c -1001c340: 2342 movs r3, #66 ; 0x42 -1001c342: f88d 302e strb.w r3, [sp, #46] ; 0x2e -1001c346: 2343 movs r3, #67 ; 0x43 -1001c348: f88d 302f strb.w r3, [sp, #47] ; 0x2f -1001c34c: 235e movs r3, #94 ; 0x5e -1001c34e: 2203 movs r2, #3 -1001c350: f8ad 3030 strh.w r3, [sp, #48] ; 0x30 -1001c354: 2362 movs r3, #98 ; 0x62 -1001c356: f88d 2024 strb.w r2, [sp, #36] ; 0x24 -1001c35a: f88d 2026 strb.w r2, [sp, #38] ; 0x26 -1001c35e: 2127 movs r1, #39 ; 0x27 -1001c360: 22a4 movs r2, #164 ; 0xa4 -1001c362: f88d 3032 strb.w r3, [sp, #50] ; 0x32 -1001c366: 2332 movs r3, #50 ; 0x32 -1001c368: f88d 2027 strb.w r2, [sp, #39] ; 0x27 -1001c36c: f88d 102a strb.w r1, [sp, #42] ; 0x2a -1001c370: f88d 202b strb.w r2, [sp, #43] ; 0x2b -1001c374: f88d 3033 strb.w r3, [sp, #51] ; 0x33 -1001c378: f104 0008 add.w r0, r4, #8 -1001c37c: 232f movs r3, #47 ; 0x2f -1001c37e: 4631 mov r1, r6 -1001c380: 2212 movs r2, #18 -1001c382: f8ad 3034 strh.w r3, [sp, #52] ; 0x34 -1001c386: f7fb f843 bl 10017410 -1001c38a: 9b02 ldr r3, [sp, #8] -1001c38c: 341a adds r4, #26 -1001c38e: 331a adds r3, #26 -1001c390: 9302 str r3, [sp, #8] -1001c392: 4d21 ldr r5, [pc, #132] ; (1001c418 ) -1001c394: f04f 08dd mov.w r8, #221 ; 0xdd -1001c398: 792b ldrb r3, [r5, #4] -1001c39a: 6828 ldr r0, [r5, #0] -1001c39c: f88d 3010 strb.w r3, [sp, #16] -1001c3a0: 462b mov r3, r5 -1001c3a2: 9003 str r0, [sp, #12] -1001c3a4: f853 0f05 ldr.w r0, [r3, #5]! -1001c3a8: 491c ldr r1, [pc, #112] ; (1001c41c ) -1001c3aa: 791b ldrb r3, [r3, #4] -1001c3ac: 9009 str r0, [sp, #36] ; 0x24 -1001c3ae: 7133 strb r3, [r6, #4] -1001c3b0: 230e movs r3, #14 -1001c3b2: 7063 strb r3, [r4, #1] -1001c3b4: 1ca0 adds r0, r4, #2 -1001c3b6: f884 8000 strb.w r8, [r4] -1001c3ba: 2204 movs r2, #4 -1001c3bc: f7fb f828 bl 10017410 -1001c3c0: 1da0 adds r0, r4, #6 -1001c3c2: a903 add r1, sp, #12 -1001c3c4: 2205 movs r2, #5 -1001c3c6: f7fb f823 bl 10017410 -1001c3ca: f104 000b add.w r0, r4, #11 -1001c3ce: 4631 mov r1, r6 -1001c3d0: 2205 movs r2, #5 -1001c3d2: f7fb f81d bl 10017410 -1001c3d6: 9b02 ldr r3, [sp, #8] -1001c3d8: f855 0f0a ldr.w r0, [r5, #10]! -1001c3dc: 3310 adds r3, #16 -1001c3de: 9302 str r3, [sp, #8] -1001c3e0: 88ab ldrh r3, [r5, #4] -1001c3e2: 9009 str r0, [sp, #36] ; 0x24 -1001c3e4: 80b3 strh r3, [r6, #4] -1001c3e6: f104 0010 add.w r0, r4, #16 -1001c3ea: 9700 str r7, [sp, #0] -1001c3ec: 4641 mov r1, r8 -1001c3ee: 2206 movs r2, #6 -1001c3f0: 4633 mov r3, r6 -1001c3f2: f022 fa5d bl 1003e8b0 <__rtw_set_ie_veneer> -1001c3f6: 9802 ldr r0, [sp, #8] -1001c3f8: b011 add sp, #68 ; 0x44 -1001c3fa: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1001c3fe: bf00 nop -1001c400: 00035430 .word 0x00035430 -1001c404: 0003542c .word 0x0003542c -1001c408: 00035444 .word 0x00035444 -1001c40c: 0003540c .word 0x0003540c -1001c410: 00035418 .word 0x00035418 -1001c414: 100414e0 .word 0x100414e0 -1001c418: 10040ea5 .word 0x10040ea5 -1001c41c: 10041441 .word 0x10041441 - -1001c420 : -1001c420: b510 push {r4, lr} -1001c422: 2205 movs r2, #5 -1001c424: 460c mov r4, r1 -1001c426: 4910 ldr r1, [pc, #64] ; (1001c468 ) -1001c428: f7fe fbbe bl 1001aba8 -1001c42c: 4b0f ldr r3, [pc, #60] ; (1001c46c ) -1001c42e: 2800 cmp r0, #0 -1001c430: bf14 ite ne -1001c432: 2018 movne r0, #24 -1001c434: 2000 moveq r0, #0 -1001c436: 581b ldr r3, [r3, r0] -1001c438: b923 cbnz r3, 1001c444 -1001c43a: 490d ldr r1, [pc, #52] ; (1001c470 ) -1001c43c: 480d ldr r0, [pc, #52] ; (1001c474 ) -1001c43e: f7fe fb8f bl 1001ab60 -1001c442: e004 b.n 1001c44e -1001c444: 691b ldr r3, [r3, #16] -1001c446: 681b ldr r3, [r3, #0] -1001c448: 691a ldr r2, [r3, #16] -1001c44a: 06d2 lsls r2, r2, #27 -1001c44c: d402 bmi.n 1001c454 -1001c44e: f04f 30ff mov.w r0, #4294967295 -1001c452: bd10 pop {r4, pc} -1001c454: 1e62 subs r2, r4, #1 -1001c456: b2d2 uxtb r2, r2 -1001c458: 2a02 cmp r2, #2 -1001c45a: bf28 it cs -1001c45c: 2400 movcs r4, #0 -1001c45e: f883 4740 strb.w r4, [r3, #1856] ; 0x740 -1001c462: 2000 movs r0, #0 -1001c464: bd10 pop {r4, pc} -1001c466: bf00 nop -1001c468: 1003fb67 .word 0x1003fb67 -1001c46c: 1004df9c .word 0x1004df9c -1001c470: 10040ef6 .word 0x10040ef6 -1001c474: 100401b7 .word 0x100401b7 - -1001c478 : -1001c478: b510 push {r4, lr} -1001c47a: 460c mov r4, r1 -1001c47c: b169 cbz r1, 1001c49a -1001c47e: 680b ldr r3, [r1, #0] -1001c480: 3b02 subs r3, #2 -1001c482: 2b01 cmp r3, #1 -1001c484: d801 bhi.n 1001c48a -1001c486: f007 f995 bl 100237b4 -1001c48a: 68a0 ldr r0, [r4, #8] -1001c48c: b140 cbz r0, 1001c4a0 -1001c48e: 6861 ldr r1, [r4, #4] -1001c490: 2900 cmp r1, #0 -1001c492: dd04 ble.n 1001c49e -1001c494: f7fa ffb9 bl 1001740a -1001c498: e001 b.n 1001c49e -1001c49a: 2004 movs r0, #4 -1001c49c: bd10 pop {r4, pc} -1001c49e: 2000 movs r0, #0 -1001c4a0: bd10 pop {r4, pc} - -1001c4a2 <_rtw_init_evt_priv>: -1001c4a2: b510 push {r4, lr} -1001c4a4: 2100 movs r1, #0 -1001c4a6: 4604 mov r4, r0 -1001c4a8: f7fb f8f4 bl 10017694 -1001c4ac: 2300 movs r3, #0 -1001c4ae: 60e3 str r3, [r4, #12] -1001c4b0: 2001 movs r0, #1 -1001c4b2: bd10 pop {r4, pc} - -1001c4b4 <_rtw_free_cmd_priv>: -1001c4b4: b110 cbz r0, 1001c4bc <_rtw_free_cmd_priv+0x8> -1001c4b6: 3008 adds r0, #8 -1001c4b8: f7fb b876 b.w 100175a8 -1001c4bc: 4770 bx lr - -1001c4be <_rtw_enqueue_cmd>: -1001c4be: b573 push {r0, r1, r4, r5, r6, lr} -1001c4c0: 4605 mov r5, r0 -1001c4c2: 460e mov r6, r1 -1001c4c4: b171 cbz r1, 1001c4e4 <_rtw_enqueue_cmd+0x26> -1001c4c6: f100 0408 add.w r4, r0, #8 -1001c4ca: 4620 mov r0, r4 -1001c4cc: a901 add r1, sp, #4 -1001c4ce: f7fb f837 bl 10017540 -1001c4d2: f106 0018 add.w r0, r6, #24 -1001c4d6: 4629 mov r1, r5 -1001c4d8: f7fa ffc0 bl 1001745c -1001c4dc: 4620 mov r0, r4 -1001c4de: a901 add r1, sp, #4 -1001c4e0: f7fb f838 bl 10017554 -1001c4e4: 2001 movs r0, #1 -1001c4e6: b002 add sp, #8 -1001c4e8: bd70 pop {r4, r5, r6, pc} - -1001c4ea <_rtw_dequeue_cmd>: -1001c4ea: b537 push {r0, r1, r2, r4, r5, lr} -1001c4ec: f100 0508 add.w r5, r0, #8 -1001c4f0: 4604 mov r4, r0 -1001c4f2: a901 add r1, sp, #4 -1001c4f4: 4628 mov r0, r5 -1001c4f6: f7fb f823 bl 10017540 -1001c4fa: 4620 mov r0, r4 -1001c4fc: f7fa ffa3 bl 10017446 -1001c500: b928 cbnz r0, 1001c50e <_rtw_dequeue_cmd+0x24> -1001c502: 6820 ldr r0, [r4, #0] -1001c504: f1a0 0418 sub.w r4, r0, #24 -1001c508: f7fa ffae bl 10017468 -1001c50c: e000 b.n 1001c510 <_rtw_dequeue_cmd+0x26> -1001c50e: 2400 movs r4, #0 -1001c510: 4628 mov r0, r5 -1001c512: a901 add r1, sp, #4 -1001c514: f7fb f81e bl 10017554 -1001c518: 4620 mov r0, r4 -1001c51a: b003 add sp, #12 -1001c51c: bd30 pop {r4, r5, pc} - -1001c51e <_rtw_observequeue_cmd>: -1001c51e: b510 push {r4, lr} -1001c520: 4604 mov r4, r0 -1001c522: f7fa ff90 bl 10017446 -1001c526: b910 cbnz r0, 1001c52e <_rtw_observequeue_cmd+0x10> -1001c528: 6820 ldr r0, [r4, #0] -1001c52a: 3818 subs r0, #24 -1001c52c: bd10 pop {r4, pc} -1001c52e: 2000 movs r0, #0 -1001c530: bd10 pop {r4, pc} - -1001c532 : -1001c532: b508 push {r3, lr} -1001c534: f7fb f832 bl 1001759c -1001c538: 2001 movs r0, #1 -1001c53a: bd08 pop {r3, pc} - -1001c53c : -1001c53c: f7ff bfb1 b.w 1001c4a2 <_rtw_init_evt_priv> - -1001c540 : -1001c540: 4770 bx lr - -1001c542 : -1001c542: f7ff bfb7 b.w 1001c4b4 <_rtw_free_cmd_priv> - -1001c546 : -1001c546: 6903 ldr r3, [r0, #16] -1001c548: 888a ldrh r2, [r1, #4] -1001c54a: f241 71c5 movw r1, #6085 ; 0x17c5 -1001c54e: 5c5b ldrb r3, [r3, r1] -1001c550: b90b cbnz r3, 1001c556 -1001c552: 2a3b cmp r2, #59 ; 0x3b -1001c554: d104 bne.n 1001c560 -1001c556: 7b00 ldrb r0, [r0, #12] -1001c558: 3000 adds r0, #0 -1001c55a: bf18 it ne -1001c55c: 2001 movne r0, #1 -1001c55e: 4770 bx lr -1001c560: 4618 mov r0, r3 -1001c562: 4770 bx lr - -1001c564 : -1001c564: 8883 ldrh r3, [r0, #4] -1001c566: b510 push {r4, lr} -1001c568: 2b10 cmp r3, #16 -1001c56a: 4604 mov r4, r0 -1001c56c: d003 beq.n 1001c576 -1001c56e: 6880 ldr r0, [r0, #8] -1001c570: 68e1 ldr r1, [r4, #12] -1001c572: f7fa ff4a bl 1001740a -1001c576: 6920 ldr r0, [r4, #16] -1001c578: b118 cbz r0, 1001c582 -1001c57a: 6961 ldr r1, [r4, #20] -1001c57c: b109 cbz r1, 1001c582 -1001c57e: f7fa ff44 bl 1001740a -1001c582: 4620 mov r0, r4 -1001c584: 2120 movs r1, #32 -1001c586: e8bd 4010 ldmia.w sp!, {r4, lr} -1001c58a: f7fa bf3e b.w 1001740a - -1001c58e : -1001c58e: b5f8 push {r3, r4, r5, r6, r7, lr} -1001c590: 4607 mov r7, r0 -1001c592: 6905 ldr r5, [r0, #16] -1001c594: 460c mov r4, r1 -1001c596: b311 cbz r1, 1001c5de -1001c598: 600d str r5, [r1, #0] -1001c59a: f641 0369 movw r3, #6249 ; 0x1869 -1001c59e: 5ceb ldrb r3, [r5, r3] -1001c5a0: b133 cbz r3, 1001c5b0 -1001c5a2: f641 035c movw r3, #6236 ; 0x185c -1001c5a6: 58eb ldr r3, [r5, r3] -1001c5a8: b113 cbz r3, 1001c5b0 -1001c5aa: f603 1708 addw r7, r3, #2312 ; 0x908 -1001c5ae: 461d mov r5, r3 -1001c5b0: 4638 mov r0, r7 -1001c5b2: 4621 mov r1, r4 -1001c5b4: f7ff ffc7 bl 1001c546 -1001c5b8: 4606 mov r6, r0 -1001c5ba: b918 cbnz r0, 1001c5c4 -1001c5bc: 4620 mov r0, r4 -1001c5be: f7ff ffd1 bl 1001c564 -1001c5c2: e00d b.n 1001c5e0 -1001c5c4: 4638 mov r0, r7 -1001c5c6: 4621 mov r1, r4 -1001c5c8: f7ff ff79 bl 1001c4be <_rtw_enqueue_cmd> -1001c5cc: 2801 cmp r0, #1 -1001c5ce: 4606 mov r6, r0 -1001c5d0: d106 bne.n 1001c5e0 -1001c5d2: f505 50bf add.w r0, r5, #6112 ; 0x17e0 -1001c5d6: 3004 adds r0, #4 -1001c5d8: f7fb f92e bl 10017838 -1001c5dc: e000 b.n 1001c5e0 -1001c5de: 460e mov r6, r1 -1001c5e0: 4630 mov r0, r6 -1001c5e2: bdf8 pop {r3, r4, r5, r6, r7, pc} - -1001c5e4 : -1001c5e4: b510 push {r4, lr} -1001c5e6: 798b ldrb r3, [r1, #6] -1001c5e8: 460c mov r4, r1 -1001c5ea: b913 cbnz r3, 1001c5f2 -1001c5ec: 6889 ldr r1, [r1, #8] -1001c5ee: f006 ff49 bl 10023484 -1001c5f2: 4620 mov r0, r4 -1001c5f4: e8bd 4010 ldmia.w sp!, {r4, lr} -1001c5f8: f7ff bfb4 b.w 1001c564 - -1001c5fc : -1001c5fc: b510 push {r4, lr} -1001c5fe: 798b ldrb r3, [r1, #6] -1001c600: 460c mov r4, r1 -1001c602: b123 cbz r3, 1001c60e -1001c604: f200 403c addw r0, r0, #1084 ; 0x43c -1001c608: 2101 movs r1, #1 -1001c60a: f01a fc05 bl 10036e18 -1001c60e: 4620 mov r0, r4 -1001c610: e8bd 4010 ldmia.w sp!, {r4, lr} -1001c614: f7ff bfa6 b.w 1001c564 - -1001c618 : -1001c618: b537 push {r0, r1, r2, r4, r5, lr} -1001c61a: 798b ldrb r3, [r1, #6] -1001c61c: 4604 mov r4, r0 -1001c61e: b173 cbz r3, 1001c63e -1001c620: f100 050c add.w r5, r0, #12 -1001c624: 4628 mov r0, r5 -1001c626: a901 add r1, sp, #4 -1001c628: f7fa ffce bl 100175c8 -1001c62c: 6923 ldr r3, [r4, #16] -1001c62e: 4628 mov r0, r5 -1001c630: f043 0301 orr.w r3, r3, #1 -1001c634: 6123 str r3, [r4, #16] -1001c636: a901 add r1, sp, #4 -1001c638: f7fa ffd0 bl 100175dc -1001c63c: e002 b.n 1001c644 -1001c63e: 4608 mov r0, r1 -1001c640: f7ff ff90 bl 1001c564 -1001c644: b003 add sp, #12 -1001c646: bd30 pop {r4, r5, pc} - -1001c648 : -1001c648: b510 push {r4, lr} -1001c64a: 798b ldrb r3, [r1, #6] -1001c64c: 460c mov r4, r1 -1001c64e: b123 cbz r3, 1001c65a -1001c650: f200 402c addw r0, r0, #1068 ; 0x42c -1001c654: 2101 movs r1, #1 -1001c656: f01a fbdf bl 10036e18 -1001c65a: 4620 mov r0, r4 -1001c65c: e8bd 4010 ldmia.w sp!, {r4, lr} -1001c660: f7ff bf80 b.w 1001c564 - -1001c664 : -1001c664: b510 push {r4, lr} -1001c666: f500 6046 add.w r0, r0, #3168 ; 0xc60 -1001c66a: 460c mov r4, r1 -1001c66c: 6909 ldr r1, [r1, #16] -1001c66e: f00b fe11 bl 10028294 -1001c672: 4620 mov r0, r4 -1001c674: e8bd 4010 ldmia.w sp!, {r4, lr} -1001c678: f7ff bf74 b.w 1001c564 - -1001c67c : -1001c67c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001c680: 4605 mov r5, r0 -1001c682: f505 56bf add.w r6, r5, #6112 ; 0x17e0 -1001c686: f600 1708 addw r7, r0, #2312 ; 0x908 -1001c68a: 3604 adds r6, #4 -1001c68c: 484f ldr r0, [pc, #316] ; (1001c7cc ) -1001c68e: f7fb f911 bl 100178b4 -1001c692: f106 0a0c add.w sl, r6, #12 -1001c696: 2301 movs r3, #1 -1001c698: f885 3914 strb.w r3, [r5, #2324] ; 0x914 -1001c69c: 4650 mov r0, sl -1001c69e: f7fa fefb bl 10017498 -1001c6a2: f505 53c2 add.w r3, r5, #6208 ; 0x1840 -1001c6a6: 331c adds r3, #28 -1001c6a8: 681b ldr r3, [r3, #0] -1001c6aa: b11b cbz r3, 1001c6b4 -1001c6ac: f503 53bf add.w r3, r3, #6112 ; 0x17e0 -1001c6b0: 2200 movs r2, #0 -1001c6b2: 619a str r2, [r3, #24] -1001c6b4: 2300 movs r3, #0 -1001c6b6: 6173 str r3, [r6, #20] -1001c6b8: f106 0008 add.w r0, r6, #8 -1001c6bc: f7fa ff04 bl 100174c8 -1001c6c0: 2800 cmp r0, #0 -1001c6c2: d068 beq.n 1001c796 -1001c6c4: 6933 ldr r3, [r6, #16] -1001c6c6: 2b00 cmp r3, #0 -1001c6c8: d165 bne.n 1001c796 -1001c6ca: f505 58bd add.w r8, r5, #6048 ; 0x17a0 -1001c6ce: f108 080c add.w r8, r8, #12 -1001c6d2: f8d8 3000 ldr.w r3, [r8] -1001c6d6: 2b01 cmp r3, #1 -1001c6d8: d05d beq.n 1001c796 -1001c6da: f505 59bd add.w r9, r5, #6048 ; 0x17a0 -1001c6de: f109 0910 add.w r9, r9, #16 -1001c6e2: f8d9 3000 ldr.w r3, [r9] -1001c6e6: 2b01 cmp r3, #1 -1001c6e8: d055 beq.n 1001c796 -1001c6ea: 6933 ldr r3, [r6, #16] -1001c6ec: 2b00 cmp r3, #0 -1001c6ee: d152 bne.n 1001c796 -1001c6f0: f8d8 3000 ldr.w r3, [r8] -1001c6f4: 2b01 cmp r3, #1 -1001c6f6: d04e beq.n 1001c796 -1001c6f8: f8d9 3000 ldr.w r3, [r9] -1001c6fc: 2b01 cmp r3, #1 -1001c6fe: d04a beq.n 1001c796 -1001c700: 4638 mov r0, r7 -1001c702: f7ff ff0c bl 1001c51e <_rtw_observequeue_cmd> -1001c706: b120 cbz r0, 1001c712 -1001c708: 6803 ldr r3, [r0, #0] -1001c70a: 2201 movs r2, #1 -1001c70c: f503 53bf add.w r3, r3, #6112 ; 0x17e0 -1001c710: 619a str r2, [r3, #24] -1001c712: 4638 mov r0, r7 -1001c714: f7ff fee9 bl 1001c4ea <_rtw_dequeue_cmd> -1001c718: 4604 mov r4, r0 -1001c71a: 2800 cmp r0, #0 -1001c71c: d0c1 beq.n 1001c6a2 -1001c71e: f8d0 b000 ldr.w fp, [r0] -1001c722: f8d5 3918 ldr.w r3, [r5, #2328] ; 0x918 -1001c726: 459b cmp fp, r3 -1001c728: d004 beq.n 1001c734 -1001c72a: f503 53c2 add.w r3, r3, #6208 ; 0x1840 -1001c72e: 331c adds r3, #28 -1001c730: 681b ldr r3, [r3, #0] -1001c732: b35b cbz r3, 1001c78c -1001c734: 4638 mov r0, r7 -1001c736: 4621 mov r1, r4 -1001c738: f7ff ff05 bl 1001c546 -1001c73c: b908 cbnz r0, 1001c742 -1001c73e: 2303 movs r3, #3 -1001c740: e016 b.n 1001c770 -1001c742: 68e2 ldr r2, [r4, #12] -1001c744: f012 0303 ands.w r3, r2, #3 -1001c748: bf18 it ne -1001c74a: 2301 movne r3, #1 -1001c74c: eb03 0392 add.w r3, r3, r2, lsr #2 -1001c750: 009b lsls r3, r3, #2 -1001c752: 60e3 str r3, [r4, #12] -1001c754: 88a3 ldrh r3, [r4, #4] -1001c756: 2b40 cmp r3, #64 ; 0x40 -1001c758: d809 bhi.n 1001c76e -1001c75a: 4a1d ldr r2, [pc, #116] ; (1001c7d0 ) -1001c75c: eb02 03c3 add.w r3, r2, r3, lsl #3 -1001c760: 685b ldr r3, [r3, #4] -1001c762: b133 cbz r3, 1001c772 -1001c764: 4658 mov r0, fp -1001c766: 68a1 ldr r1, [r4, #8] -1001c768: 4798 blx r3 -1001c76a: 71a0 strb r0, [r4, #6] -1001c76c: e001 b.n 1001c772 -1001c76e: 2304 movs r3, #4 -1001c770: 71a3 strb r3, [r4, #6] -1001c772: 88a3 ldrh r3, [r4, #4] -1001c774: 2b40 cmp r3, #64 ; 0x40 -1001c776: d808 bhi.n 1001c78a -1001c778: 4a16 ldr r2, [pc, #88] ; (1001c7d4 ) -1001c77a: eb02 03c3 add.w r3, r2, r3, lsl #3 -1001c77e: 685b ldr r3, [r3, #4] -1001c780: b11b cbz r3, 1001c78a -1001c782: 6820 ldr r0, [r4, #0] -1001c784: 4621 mov r1, r4 -1001c786: 4798 blx r3 -1001c788: e002 b.n 1001c790 -1001c78a: 4620 mov r0, r4 -1001c78c: f7ff feea bl 1001c564 -1001c790: f7fb f823 bl 100177da -1001c794: e7a9 b.n 1001c6ea -1001c796: 2300 movs r3, #0 -1001c798: f885 3914 strb.w r3, [r5, #2324] ; 0x914 -1001c79c: 4638 mov r0, r7 -1001c79e: f7ff fea4 bl 1001c4ea <_rtw_dequeue_cmd> -1001c7a2: b110 cbz r0, 1001c7aa -1001c7a4: f7ff fede bl 1001c564 -1001c7a8: e7f8 b.n 1001c79c -1001c7aa: f641 035c movw r3, #6236 ; 0x185c -1001c7ae: 58eb ldr r3, [r5, r3] -1001c7b0: b113 cbz r3, 1001c7b8 -1001c7b2: f241 71f8 movw r1, #6136 ; 0x17f8 -1001c7b6: 5058 str r0, [r3, r1] -1001c7b8: 2300 movs r3, #0 -1001c7ba: 6173 str r3, [r6, #20] -1001c7bc: 4650 mov r0, sl -1001c7be: f7fa fe6b bl 10017498 -1001c7c2: e8bd 4ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001c7c6: f7fb b87d b.w 100178c4 -1001c7ca: bf00 nop -1001c7cc: 10040f06 .word 0x10040f06 -1001c7d0: 10040f18 .word 0x10040f18 -1001c7d4: 10041118 .word 0x10041118 - -1001c7d8 : -1001c7d8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001c7dc: f241 036c movw r3, #4204 ; 0x106c -1001c7e0: 58c3 ldr r3, [r0, r3] -1001c7e2: b085 sub sp, #20 -1001c7e4: 2b04 cmp r3, #4 -1001c7e6: 4604 mov r4, r0 -1001c7e8: 460d mov r5, r1 -1001c7ea: f8d1 807c ldr.w r8, [r1, #124] ; 0x7c -1001c7ee: d001 beq.n 1001c7f4 -1001c7f0: 2b07 cmp r3, #7 -1001c7f2: d15d bne.n 1001c8b0 -1001c7f4: 2300 movs r3, #0 -1001c7f6: f10d 0910 add.w r9, sp, #16 -1001c7fa: f504 5684 add.w r6, r4, #4224 ; 0x1080 -1001c7fe: f829 3d02 strh.w r3, [r9, #-2]! -1001c802: 3610 adds r6, #16 -1001c804: f105 0a98 add.w sl, r5, #152 ; 0x98 -1001c808: af03 add r7, sp, #12 -1001c80a: f8ad 300c strh.w r3, [sp, #12] -1001c80e: 9300 str r3, [sp, #0] -1001c810: 9701 str r7, [sp, #4] -1001c812: 4650 mov r0, sl -1001c814: f8d5 1094 ldr.w r1, [r5, #148] ; 0x94 -1001c818: 4632 mov r2, r6 -1001c81a: 464b mov r3, r9 -1001c81c: f022 f82c bl 1003e878 <__rtw_get_sec_ie_veneer> -1001c820: 2800 cmp r0, #0 -1001c822: d045 beq.n 1001c8b0 -1001c824: f8bd 200e ldrh.w r2, [sp, #14] -1001c828: b1ea cbz r2, 1001c866 -1001c82a: 4611 mov r1, r2 -1001c82c: 4630 mov r0, r6 -1001c82e: f009 fab3 bl 10025d98 -1001c832: f241 0398 movw r3, #4248 ; 0x1098 -1001c836: 5ce1 ldrb r1, [r4, r3] -1001c838: 4602 mov r2, r0 -1001c83a: f8ad 000e strh.w r0, [sp, #14] -1001c83e: 1cc8 adds r0, r1, #3 -1001c840: eb06 0181 add.w r1, r6, r1, lsl #2 -1001c844: 7a8b ldrb r3, [r1, #10] -1001c846: 4403 add r3, r0 -1001c848: f816 1023 ldrb.w r1, [r6, r3, lsl #2] -1001c84c: 4620 mov r0, r4 -1001c84e: f001 013f and.w r1, r1, #63 ; 0x3f -1001c852: f806 1023 strb.w r1, [r6, r3, lsl #2] -1001c856: 4631 mov r1, r6 -1001c858: f017 fa4b bl 10033cf2 -1001c85c: 4620 mov r0, r4 -1001c85e: 4631 mov r1, r6 -1001c860: f8bd 200e ldrh.w r2, [sp, #14] -1001c864: e01a b.n 1001c89c -1001c866: f8bd 300c ldrh.w r3, [sp, #12] -1001c86a: b1cb cbz r3, 1001c8a0 -1001c86c: 464b mov r3, r9 -1001c86e: f8d5 1094 ldr.w r1, [r5, #148] ; 0x94 -1001c872: e88d 00c0 stmia.w sp, {r6, r7} -1001c876: 4650 mov r0, sl -1001c878: f021 fffe bl 1003e878 <__rtw_get_sec_ie_veneer> -1001c87c: f8bd 100c ldrh.w r1, [sp, #12] -1001c880: 4630 mov r0, r6 -1001c882: f009 fac9 bl 10025e18 -1001c886: 4631 mov r1, r6 -1001c888: 4602 mov r2, r0 -1001c88a: f8ad 000c strh.w r0, [sp, #12] -1001c88e: 4620 mov r0, r4 -1001c890: f017 fa2f bl 10033cf2 -1001c894: f8bd 200c ldrh.w r2, [sp, #12] -1001c898: 4620 mov r0, r4 -1001c89a: 4631 mov r1, r6 -1001c89c: f009 fa04 bl 10025ca8 -1001c8a0: f504 519a add.w r1, r4, #4928 ; 0x1340 -1001c8a4: 4620 mov r0, r4 -1001c8a6: 3104 adds r1, #4 -1001c8a8: f105 022c add.w r2, r5, #44 ; 0x2c -1001c8ac: f009 f9a2 bl 10025bf4 -1001c8b0: f7f0 fa3e bl 1000cd30 -1001c8b4: 2800 cmp r0, #0 -1001c8b6: d052 beq.n 1001c95e -1001c8b8: 2300 movs r3, #0 -1001c8ba: f10d 0910 add.w r9, sp, #16 -1001c8be: f504 5684 add.w r6, r4, #4224 ; 0x1080 -1001c8c2: f829 3d02 strh.w r3, [r9, #-2]! -1001c8c6: 3610 adds r6, #16 -1001c8c8: f105 0a98 add.w sl, r5, #152 ; 0x98 -1001c8cc: af03 add r7, sp, #12 -1001c8ce: f8ad 300c strh.w r3, [sp, #12] -1001c8d2: 9300 str r3, [sp, #0] -1001c8d4: 9701 str r7, [sp, #4] -1001c8d6: 4650 mov r0, sl -1001c8d8: f8d5 1094 ldr.w r1, [r5, #148] ; 0x94 -1001c8dc: 4632 mov r2, r6 -1001c8de: 464b mov r3, r9 -1001c8e0: f021 ffca bl 1003e878 <__rtw_get_sec_ie_veneer> -1001c8e4: 2800 cmp r0, #0 -1001c8e6: d03a beq.n 1001c95e -1001c8e8: f8bd 200e ldrh.w r2, [sp, #14] -1001c8ec: b17a cbz r2, 1001c90e -1001c8ee: 4611 mov r1, r2 -1001c8f0: 4630 mov r0, r6 -1001c8f2: f009 fa51 bl 10025d98 -1001c8f6: 4631 mov r1, r6 -1001c8f8: 4602 mov r2, r0 -1001c8fa: f8ad 000e strh.w r0, [sp, #14] -1001c8fe: 4620 mov r0, r4 -1001c900: f017 f9f7 bl 10033cf2 -1001c904: 4620 mov r0, r4 -1001c906: 4631 mov r1, r6 -1001c908: f8bd 200e ldrh.w r2, [sp, #14] -1001c90c: e01a b.n 1001c944 -1001c90e: f8bd 300c ldrh.w r3, [sp, #12] -1001c912: b1cb cbz r3, 1001c948 -1001c914: 464b mov r3, r9 -1001c916: f8d5 1094 ldr.w r1, [r5, #148] ; 0x94 -1001c91a: e88d 00c0 stmia.w sp, {r6, r7} -1001c91e: 4650 mov r0, sl -1001c920: f021 ffaa bl 1003e878 <__rtw_get_sec_ie_veneer> -1001c924: f8bd 100c ldrh.w r1, [sp, #12] -1001c928: 4630 mov r0, r6 -1001c92a: f009 fa75 bl 10025e18 -1001c92e: 4631 mov r1, r6 -1001c930: 4602 mov r2, r0 -1001c932: f8ad 000c strh.w r0, [sp, #12] -1001c936: 4620 mov r0, r4 -1001c938: f017 f9db bl 10033cf2 -1001c93c: f8bd 200c ldrh.w r2, [sp, #12] -1001c940: 4620 mov r0, r4 -1001c942: 4631 mov r1, r6 -1001c944: f009 f9b0 bl 10025ca8 -1001c948: f241 036c movw r3, #4204 ; 0x106c -1001c94c: 58e2 ldr r2, [r4, r3] -1001c94e: 2a04 cmp r2, #4 -1001c950: d101 bne.n 1001c956 -1001c952: 2203 movs r2, #3 -1001c954: e002 b.n 1001c95c -1001c956: 2a07 cmp r2, #7 -1001c958: d101 bne.n 1001c95e -1001c95a: 2206 movs r2, #6 -1001c95c: 50e2 str r2, [r4, r3] -1001c95e: 2020 movs r0, #32 -1001c960: f7fa ff26 bl 100177b0 -1001c964: 4607 mov r7, r0 -1001c966: 2800 cmp r0, #0 -1001c968: f000 8091 beq.w 1001ca8e -1001c96c: 6923 ldr r3, [r4, #16] -1001c96e: f013 0f28 tst.w r3, #40 ; 0x28 -1001c972: d106 bne.n 1001c982 -1001c974: f1b8 0f00 cmp.w r8, #0 -1001c978: f040 808a bne.w 1001ca90 -1001c97c: f043 0320 orr.w r3, r3, #32 -1001c980: 6123 str r3, [r4, #16] -1001c982: f44f 705f mov.w r0, #892 ; 0x37c -1001c986: f7fa ff13 bl 100177b0 -1001c98a: 4606 mov r6, r0 -1001c98c: b928 cbnz r0, 1001c99a -1001c98e: 4638 mov r0, r7 -1001c990: 2120 movs r1, #32 -1001c992: f7fa fd3a bl 1001740a -1001c996: 4630 mov r0, r6 -1001c998: e081 b.n 1001ca9e -1001c99a: 2100 movs r1, #0 -1001c99c: f44f 725f mov.w r2, #892 ; 0x37c -1001c9a0: f7fa fd46 bl 10017430 -1001c9a4: f8d5 2094 ldr.w r2, [r5, #148] ; 0x94 -1001c9a8: 4630 mov r0, r6 -1001c9aa: f105 011c add.w r1, r5, #28 -1001c9ae: 327c adds r2, #124 ; 0x7c -1001c9b0: f7fa fd2e bl 10017410 -1001c9b4: 2300 movs r3, #0 -1001c9b6: f886 3078 strb.w r3, [r6, #120] ; 0x78 -1001c9ba: f886 3079 strb.w r3, [r6, #121] ; 0x79 -1001c9be: f886 307a strb.w r3, [r6, #122] ; 0x7a -1001c9c2: f886 307b strb.w r3, [r6, #123] ; 0x7b -1001c9c6: f894 3438 ldrb.w r3, [r4, #1080] ; 0x438 -1001c9ca: b933 cbnz r3, 1001c9da -1001c9cc: f104 0074 add.w r0, r4, #116 ; 0x74 -1001c9d0: f105 0120 add.w r1, r5, #32 -1001c9d4: 2206 movs r2, #6 -1001c9d6: f7fa fd1b bl 10017410 -1001c9da: f105 0898 add.w r8, r5, #152 ; 0x98 -1001c9de: f106 0a7c add.w sl, r6, #124 ; 0x7c -1001c9e2: f8d5 3094 ldr.w r3, [r5, #148] ; 0x94 -1001c9e6: 4620 mov r0, r4 -1001c9e8: 4641 mov r1, r8 -1001c9ea: 4652 mov r2, sl -1001c9ec: f001 fb86 bl 1001e0fc -1001c9f0: f504 599c add.w r9, r4, #4992 ; 0x1380 -1001c9f4: f04f 0b00 mov.w fp, #0 -1001c9f8: 67b0 str r0, [r6, #120] ; 0x78 -1001c9fa: f109 0908 add.w r9, r9, #8 -1001c9fe: f8c4 b44c str.w fp, [r4, #1100] ; 0x44c -1001ca02: f899 303d ldrb.w r3, [r9, #61] ; 0x3d -1001ca06: b183 cbz r3, 1001ca2a -1001ca08: 9000 str r0, [sp, #0] -1001ca0a: f8d5 3094 ldr.w r3, [r5, #148] ; 0x94 -1001ca0e: 4620 mov r0, r4 -1001ca10: 4641 mov r1, r8 -1001ca12: 4652 mov r2, sl -1001ca14: f001 fb3f bl 1001e096 -1001ca18: 6fb3 ldr r3, [r6, #120] ; 0x78 -1001ca1a: 4283 cmp r3, r0 -1001ca1c: bf1b ittet ne -1001ca1e: 2301 movne r3, #1 -1001ca20: 67b0 strne r0, [r6, #120] ; 0x78 -1001ca22: f8c4 b44c streq.w fp, [r4, #1100] ; 0x44c -1001ca26: f8c4 344c strne.w r3, [r4, #1100] ; 0x44c -1001ca2a: 2300 movs r3, #0 -1001ca2c: f8c4 3454 str.w r3, [r4, #1108] ; 0x454 -1001ca30: f899 3044 ldrb.w r3, [r9, #68] ; 0x44 -1001ca34: b183 cbz r3, 1001ca58 -1001ca36: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c -1001ca3a: 1e5a subs r2, r3, #1 -1001ca3c: 2a01 cmp r2, #1 -1001ca3e: d90b bls.n 1001ca58 -1001ca40: 2b05 cmp r3, #5 -1001ca42: d009 beq.n 1001ca58 -1001ca44: f106 0378 add.w r3, r6, #120 ; 0x78 -1001ca48: 9300 str r3, [sp, #0] -1001ca4a: 4620 mov r0, r4 -1001ca4c: 4641 mov r1, r8 -1001ca4e: 4652 mov r2, sl -1001ca50: f8d5 3094 ldr.w r3, [r5, #148] ; 0x94 -1001ca54: f001 fb92 bl 1001e17c -1001ca58: f8d5 1094 ldr.w r1, [r5, #148] ; 0x94 -1001ca5c: 4640 mov r0, r8 -1001ca5e: f00c faab bl 10028fb8 -1001ca62: f884 072e strb.w r0, [r4, #1838] ; 0x72e -1001ca66: 6fb3 ldr r3, [r6, #120] ; 0x78 -1001ca68: f107 0018 add.w r0, r7, #24 -1001ca6c: 337c adds r3, #124 ; 0x7c -1001ca6e: 60fb str r3, [r7, #12] -1001ca70: f7fa fce6 bl 10017440 -1001ca74: 230e movs r3, #14 -1001ca76: 80bb strh r3, [r7, #4] -1001ca78: 2300 movs r3, #0 -1001ca7a: 60be str r6, [r7, #8] -1001ca7c: 613b str r3, [r7, #16] -1001ca7e: 617b str r3, [r7, #20] -1001ca80: f604 1008 addw r0, r4, #2312 ; 0x908 -1001ca84: 4639 mov r1, r7 -1001ca86: f7ff fd82 bl 1001c58e -1001ca8a: b2c0 uxtb r0, r0 -1001ca8c: e007 b.n 1001ca9e -1001ca8e: e006 b.n 1001ca9e -1001ca90: f1b8 0f01 cmp.w r8, #1 -1001ca94: f47f af75 bne.w 1001c982 -1001ca98: f043 0308 orr.w r3, r3, #8 -1001ca9c: e770 b.n 1001c980 -1001ca9e: b005 add sp, #20 -1001caa0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -1001caa4 : -1001caa4: b570 push {r4, r5, r6, lr} -1001caa6: 4606 mov r6, r0 -1001caa8: 2020 movs r0, #32 -1001caaa: f7fa fe81 bl 100177b0 -1001caae: 4604 mov r4, r0 -1001cab0: b1e8 cbz r0, 1001caee -1001cab2: 2004 movs r0, #4 -1001cab4: f7fa fe7c bl 100177b0 -1001cab8: 4605 mov r5, r0 -1001caba: b928 cbnz r0, 1001cac8 -1001cabc: 4620 mov r0, r4 -1001cabe: 2120 movs r1, #32 -1001cac0: f7fa fca3 bl 1001740a -1001cac4: 4628 mov r0, r5 -1001cac6: bd70 pop {r4, r5, r6, pc} -1001cac8: f104 0018 add.w r0, r4, #24 -1001cacc: f7fa fcb8 bl 10017440 -1001cad0: 230f movs r3, #15 -1001cad2: 80a3 strh r3, [r4, #4] -1001cad4: 2304 movs r3, #4 -1001cad6: 60e3 str r3, [r4, #12] -1001cad8: 2300 movs r3, #0 -1001cada: 60a5 str r5, [r4, #8] -1001cadc: 6123 str r3, [r4, #16] -1001cade: 6163 str r3, [r4, #20] -1001cae0: f606 1008 addw r0, r6, #2312 ; 0x908 -1001cae4: 4621 mov r1, r4 -1001cae6: f7ff fd52 bl 1001c58e -1001caea: b2c0 uxtb r0, r0 -1001caec: bd70 pop {r4, r5, r6, pc} -1001caee: bd70 pop {r4, r5, r6, pc} - -1001caf0 : -1001caf0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -1001caf4: 4606 mov r6, r0 -1001caf6: 2020 movs r0, #32 -1001caf8: 4688 mov r8, r1 -1001cafa: 4691 mov r9, r2 -1001cafc: f7fa fe58 bl 100177b0 -1001cb00: 4604 mov r4, r0 -1001cb02: 2800 cmp r0, #0 -1001cb04: d056 beq.n 1001cbb4 -1001cb06: 2018 movs r0, #24 -1001cb08: f7fa fe52 bl 100177b0 -1001cb0c: 4605 mov r5, r0 -1001cb0e: b930 cbnz r0, 1001cb1e -1001cb10: 4620 mov r0, r4 -1001cb12: 2120 movs r1, #32 -1001cb14: f7fa fc79 bl 1001740a -1001cb18: 4628 mov r0, r5 -1001cb1a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1001cb1e: 2008 movs r0, #8 -1001cb20: f7fa fe46 bl 100177b0 -1001cb24: 4607 mov r7, r0 -1001cb26: b950 cbnz r0, 1001cb3e -1001cb28: 4620 mov r0, r4 -1001cb2a: 2120 movs r1, #32 -1001cb2c: f7fa fc6d bl 1001740a -1001cb30: 4628 mov r0, r5 -1001cb32: 2118 movs r1, #24 -1001cb34: f7fa fc69 bl 1001740a -1001cb38: 4638 mov r0, r7 -1001cb3a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1001cb3e: f104 0018 add.w r0, r4, #24 -1001cb42: f7fa fc7d bl 10017440 -1001cb46: 2315 movs r3, #21 -1001cb48: 80a3 strh r3, [r4, #4] -1001cb4a: 2318 movs r3, #24 -1001cb4c: 60e3 str r3, [r4, #12] -1001cb4e: 2308 movs r3, #8 -1001cb50: 6163 str r3, [r4, #20] -1001cb52: f508 7384 add.w r3, r8, #264 ; 0x108 -1001cb56: 4619 mov r1, r3 -1001cb58: 4638 mov r0, r7 -1001cb5a: 6127 str r7, [r4, #16] -1001cb5c: 2206 movs r2, #6 -1001cb5e: 461f mov r7, r3 -1001cb60: 60a5 str r5, [r4, #8] -1001cb62: f7fa fc55 bl 10017410 -1001cb66: 4628 mov r0, r5 -1001cb68: 4639 mov r1, r7 -1001cb6a: 2206 movs r2, #6 -1001cb6c: f7fa fc50 bl 10017410 -1001cb70: 6933 ldr r3, [r6, #16] -1001cb72: 071b lsls r3, r3, #28 -1001cb74: d520 bpl.n 1001cbb8 -1001cb76: f8d6 3d0c ldr.w r3, [r6, #3340] ; 0xd0c -1001cb7a: 71ab strb r3, [r5, #6] -1001cb7c: f1b9 0f01 cmp.w r9, #1 -1001cb80: bf17 itett ne -1001cb82: f8d6 1d68 ldrne.w r1, [r6, #3432] ; 0xd68 -1001cb86: f508 719c addeq.w r1, r8, #312 ; 0x138 -1001cb8a: eb06 1101 addne.w r1, r6, r1, lsl #4 -1001cb8e: f601 516c addwne r1, r1, #3436 ; 0xd6c -1001cb92: f105 0008 add.w r0, r5, #8 -1001cb96: 2210 movs r2, #16 -1001cb98: f7fa fc3a bl 10017410 -1001cb9c: 2201 movs r2, #1 -1001cb9e: f241 035d movw r3, #4189 ; 0x105d -1001cba2: 54f2 strb r2, [r6, r3] -1001cba4: f606 1008 addw r0, r6, #2312 ; 0x908 -1001cba8: 4621 mov r1, r4 -1001cbaa: f7ff fcf0 bl 1001c58e -1001cbae: b2c0 uxtb r0, r0 -1001cbb0: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1001cbb4: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1001cbb8: f8d6 3d08 ldr.w r3, [r6, #3336] ; 0xd08 -1001cbbc: 2b04 cmp r3, #4 -1001cbbe: d8dd bhi.n 1001cb7c -1001cbc0: a201 add r2, pc, #4 ; (adr r2, 1001cbc8 ) -1001cbc2: f852 f023 ldr.w pc, [r2, r3, lsl #2] -1001cbc6: bf00 nop -1001cbc8: 1001cb77 .word 0x1001cb77 -1001cbcc: 1001cb77 .word 0x1001cb77 -1001cbd0: 1001cbdd .word 0x1001cbdd -1001cbd4: 1001cb77 .word 0x1001cb77 -1001cbd8: 1001cb77 .word 0x1001cb77 -1001cbdc: f8d8 3114 ldr.w r3, [r8, #276] ; 0x114 -1001cbe0: e7cb b.n 1001cb7a -1001cbe2: bf00 nop - -1001cbe4 : -1001cbe4: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -1001cbe8: 4681 mov r9, r0 -1001cbea: 4688 mov r8, r1 -1001cbec: 4617 mov r7, r2 -1001cbee: b92b cbnz r3, 1001cbfc -1001cbf0: 4611 mov r1, r2 -1001cbf2: f00b fe3e bl 10028872 -1001cbf6: 2001 movs r0, #1 -1001cbf8: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1001cbfc: 2020 movs r0, #32 -1001cbfe: f7fa fdd7 bl 100177b0 -1001cc02: 4604 mov r4, r0 -1001cc04: 2800 cmp r0, #0 -1001cc06: d03b beq.n 1001cc80 -1001cc08: 2018 movs r0, #24 -1001cc0a: f7fa fdd1 bl 100177b0 -1001cc0e: 4605 mov r5, r0 -1001cc10: b930 cbnz r0, 1001cc20 -1001cc12: 4620 mov r0, r4 -1001cc14: 2120 movs r1, #32 -1001cc16: f7fa fbf8 bl 1001740a -1001cc1a: 4628 mov r0, r5 -1001cc1c: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1001cc20: 2008 movs r0, #8 -1001cc22: f7fa fdc5 bl 100177b0 -1001cc26: 4606 mov r6, r0 -1001cc28: b950 cbnz r0, 1001cc40 -1001cc2a: 4620 mov r0, r4 -1001cc2c: 2120 movs r1, #32 -1001cc2e: f7fa fbec bl 1001740a -1001cc32: 4628 mov r0, r5 -1001cc34: 2118 movs r1, #24 -1001cc36: f7fa fbe8 bl 1001740a -1001cc3a: 4630 mov r0, r6 -1001cc3c: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1001cc40: f104 0018 add.w r0, r4, #24 -1001cc44: f7fa fbfc bl 10017440 -1001cc48: 2315 movs r3, #21 -1001cc4a: 80a3 strh r3, [r4, #4] -1001cc4c: 2318 movs r3, #24 -1001cc4e: 60e3 str r3, [r4, #12] -1001cc50: 2308 movs r3, #8 -1001cc52: 60a5 str r5, [r4, #8] -1001cc54: 6126 str r6, [r4, #16] -1001cc56: 6163 str r3, [r4, #20] -1001cc58: f1b8 0f00 cmp.w r8, #0 -1001cc5c: d005 beq.n 1001cc6a -1001cc5e: 4628 mov r0, r5 -1001cc60: f508 7184 add.w r1, r8, #264 ; 0x108 -1001cc64: 2206 movs r2, #6 -1001cc66: f7fa fbd3 bl 10017410 -1001cc6a: 2300 movs r3, #0 -1001cc6c: 71ab strb r3, [r5, #6] -1001cc6e: 71ef strb r7, [r5, #7] -1001cc70: f609 1008 addw r0, r9, #2312 ; 0x908 -1001cc74: 4621 mov r1, r4 -1001cc76: f7ff fc8a bl 1001c58e -1001cc7a: b2c0 uxtb r0, r0 -1001cc7c: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1001cc80: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - -1001cc84 : -1001cc84: b5f8 push {r3, r4, r5, r6, r7, lr} -1001cc86: 4607 mov r7, r0 -1001cc88: 2020 movs r0, #32 -1001cc8a: f7fa fd91 bl 100177b0 -1001cc8e: 4604 mov r4, r0 -1001cc90: b308 cbz r0, 1001ccd6 -1001cc92: 2010 movs r0, #16 -1001cc94: f7fa fd8c bl 100177b0 -1001cc98: 2600 movs r6, #0 -1001cc9a: 4605 mov r5, r0 -1001cc9c: b928 cbnz r0, 1001ccaa -1001cc9e: 4620 mov r0, r4 -1001cca0: 2120 movs r1, #32 -1001cca2: f7fa fbb2 bl 1001740a -1001cca6: 4628 mov r0, r5 -1001cca8: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001ccaa: 2301 movs r3, #1 -1001ccac: 6003 str r3, [r0, #0] -1001ccae: 6086 str r6, [r0, #8] -1001ccb0: 60c7 str r7, [r0, #12] -1001ccb2: f104 0018 add.w r0, r4, #24 -1001ccb6: f7fa fbc3 bl 10017440 -1001ccba: 2339 movs r3, #57 ; 0x39 -1001ccbc: 80a3 strh r3, [r4, #4] -1001ccbe: 2310 movs r3, #16 -1001ccc0: 60a5 str r5, [r4, #8] -1001ccc2: 60e3 str r3, [r4, #12] -1001ccc4: 6126 str r6, [r4, #16] -1001ccc6: 6166 str r6, [r4, #20] -1001ccc8: f607 1008 addw r0, r7, #2312 ; 0x908 -1001cccc: 4621 mov r1, r4 -1001ccce: f7ff fc5e bl 1001c58e -1001ccd2: b2c0 uxtb r0, r0 -1001ccd4: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001ccd6: bdf8 pop {r3, r4, r5, r6, r7, pc} - -1001ccd8 : -1001ccd8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1001ccdc: 4607 mov r7, r0 -1001ccde: 2020 movs r0, #32 -1001cce0: 4688 mov r8, r1 -1001cce2: f7fa fd65 bl 100177b0 -1001cce6: 4604 mov r4, r0 -1001cce8: b318 cbz r0, 1001cd32 -1001ccea: 200c movs r0, #12 -1001ccec: f7fa fd60 bl 100177b0 -1001ccf0: 2600 movs r6, #0 -1001ccf2: 4605 mov r5, r0 -1001ccf4: b930 cbnz r0, 1001cd04 -1001ccf6: 4620 mov r0, r4 -1001ccf8: 2120 movs r1, #32 -1001ccfa: f7fa fb86 bl 1001740a -1001ccfe: 4628 mov r0, r5 -1001cd00: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1001cd04: f8c0 8000 str.w r8, [r0] -1001cd08: 6046 str r6, [r0, #4] -1001cd0a: 6087 str r7, [r0, #8] -1001cd0c: f104 0018 add.w r0, r4, #24 -1001cd10: f7fa fb96 bl 10017440 -1001cd14: 233f movs r3, #63 ; 0x3f -1001cd16: 80a3 strh r3, [r4, #4] -1001cd18: 230c movs r3, #12 -1001cd1a: 60a5 str r5, [r4, #8] -1001cd1c: 60e3 str r3, [r4, #12] -1001cd1e: 6126 str r6, [r4, #16] -1001cd20: 6166 str r6, [r4, #20] -1001cd22: f607 1008 addw r0, r7, #2312 ; 0x908 -1001cd26: 4621 mov r1, r4 -1001cd28: f7ff fc31 bl 1001c58e -1001cd2c: b2c0 uxtb r0, r0 -1001cd2e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1001cd32: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1001cd36 : -1001cd36: 2958 cmp r1, #88 ; 0x58 -1001cd38: b5f8 push {r3, r4, r5, r6, r7, lr} -1001cd3a: 4607 mov r7, r0 -1001cd3c: 460e mov r6, r1 -1001cd3e: 4614 mov r4, r2 -1001cd40: d903 bls.n 1001cd4a -1001cd42: 297f cmp r1, #127 ; 0x7f -1001cd44: d001 beq.n 1001cd4a -1001cd46: 2400 movs r4, #0 -1001cd48: e033 b.n 1001cdb2 -1001cd4a: 2001 movs r0, #1 -1001cd4c: f7fa fd30 bl 100177b0 -1001cd50: 4605 mov r5, r0 -1001cd52: 2800 cmp r0, #0 -1001cd54: d0f7 beq.n 1001cd46 -1001cd56: 7006 strb r6, [r0, #0] -1001cd58: b1dc cbz r4, 1001cd92 -1001cd5a: 2020 movs r0, #32 -1001cd5c: f7fa fd28 bl 100177b0 -1001cd60: 4604 mov r4, r0 -1001cd62: b920 cbnz r0, 1001cd6e -1001cd64: 4628 mov r0, r5 -1001cd66: 2101 movs r1, #1 -1001cd68: f7fa fb4f bl 1001740a -1001cd6c: e021 b.n 1001cdb2 -1001cd6e: 3018 adds r0, #24 -1001cd70: f7fa fb66 bl 10017440 -1001cd74: 233b movs r3, #59 ; 0x3b -1001cd76: 80a3 strh r3, [r4, #4] -1001cd78: 2301 movs r3, #1 -1001cd7a: 60e3 str r3, [r4, #12] -1001cd7c: 2300 movs r3, #0 -1001cd7e: 60a5 str r5, [r4, #8] -1001cd80: 6123 str r3, [r4, #16] -1001cd82: 6163 str r3, [r4, #20] -1001cd84: 4621 mov r1, r4 -1001cd86: f607 1008 addw r0, r7, #2312 ; 0x908 -1001cd8a: f7ff fc00 bl 1001c58e -1001cd8e: b2c4 uxtb r4, r0 -1001cd90: e00b b.n 1001cdaa -1001cd92: 4629 mov r1, r5 -1001cd94: 4638 mov r0, r7 -1001cd96: f006 fb75 bl 10023484 -1001cd9a: 2101 movs r1, #1 -1001cd9c: f1d0 0401 rsbs r4, r0, #1 -1001cda0: 4628 mov r0, r5 -1001cda2: bf38 it cc -1001cda4: 2400 movcc r4, #0 -1001cda6: f7fa fb30 bl 1001740a -1001cdaa: 2c01 cmp r4, #1 -1001cdac: bf08 it eq -1001cdae: f887 649e strbeq.w r6, [r7, #1182] ; 0x49e -1001cdb2: 4620 mov r0, r4 -1001cdb4: bdf8 pop {r3, r4, r5, r6, r7, pc} - -1001cdb6 : -1001cdb6: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1001cdba: 4608 mov r0, r1 -1001cdbc: 460c mov r4, r1 -1001cdbe: f005 fa5b bl 10022278 <_linked_info_dump> -1001cdc2: 4620 mov r0, r4 -1001cdc4: f005 faa6 bl 10022314 -1001cdc8: 6925 ldr r5, [r4, #16] -1001cdca: f015 0501 ands.w r5, r5, #1 -1001cdce: d11f bne.n 1001ce10 -1001cdd0: 4620 mov r0, r4 -1001cdd2: f009 fb23 bl 1002641c -1001cdd6: 462e mov r6, r5 -1001cdd8: 46a8 mov r8, r5 -1001cdda: 462f mov r7, r5 -1001cddc: 46aa mov sl, r5 -1001cdde: 46a9 mov r9, r5 -1001cde0: 2300 movs r3, #0 -1001cde2: f8c4 3480 str.w r3, [r4, #1152] ; 0x480 -1001cde6: f8c4 347c str.w r3, [r4, #1148] ; 0x47c -1001cdea: f8c4 3484 str.w r3, [r4, #1156] ; 0x484 -1001cdee: f884 9488 strb.w r9, [r4, #1160] ; 0x488 -1001cdf2: f884 a489 strb.w sl, [r4, #1161] ; 0x489 -1001cdf6: f884 748a strb.w r7, [r4, #1162] ; 0x48a -1001cdfa: f884 848b strb.w r8, [r4, #1163] ; 0x48b -1001cdfe: f884 648c strb.w r6, [r4, #1164] ; 0x48c -1001ce02: f884 548d strb.w r5, [r4, #1165] ; 0x48d -1001ce06: 4620 mov r0, r4 -1001ce08: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1001ce0c: f015 bc82 b.w 10032714 -1001ce10: f8d4 2480 ldr.w r2, [r4, #1152] ; 0x480 -1001ce14: f8d4 347c ldr.w r3, [r4, #1148] ; 0x47c -1001ce18: 2a64 cmp r2, #100 ; 0x64 -1001ce1a: d801 bhi.n 1001ce20 -1001ce1c: 2b64 cmp r3, #100 ; 0x64 -1001ce1e: d90e bls.n 1001ce3e -1001ce20: 429a cmp r2, r3 -1001ce22: bf94 ite ls -1001ce24: 2700 movls r7, #0 -1001ce26: 2701 movhi r7, #1 -1001ce28: bf94 ite ls -1001ce2a: f04f 0a01 movls.w sl, #1 -1001ce2e: f04f 0a00 movhi.w sl, #0 -1001ce32: f5b2 6f7a cmp.w r2, #4000 ; 0xfa0 -1001ce36: f04f 0901 mov.w r9, #1 -1001ce3a: d806 bhi.n 1001ce4a -1001ce3c: e002 b.n 1001ce44 -1001ce3e: 2700 movs r7, #0 -1001ce40: 46ba mov sl, r7 -1001ce42: 46b9 mov r9, r7 -1001ce44: f5b3 6f7a cmp.w r3, #4000 ; 0xfa0 -1001ce48: d905 bls.n 1001ce56 -1001ce4a: 429a cmp r2, r3 -1001ce4c: d905 bls.n 1001ce5a -1001ce4e: 2601 movs r6, #1 -1001ce50: 2500 movs r5, #0 -1001ce52: 46b0 mov r8, r6 -1001ce54: e004 b.n 1001ce60 -1001ce56: 2500 movs r5, #0 -1001ce58: e000 b.n 1001ce5c -1001ce5a: 2501 movs r5, #1 -1001ce5c: 2600 movs r6, #0 -1001ce5e: 46a8 mov r8, r5 -1001ce60: f8d4 2484 ldr.w r2, [r4, #1156] ; 0x484 -1001ce64: 4413 add r3, r2 -1001ce66: 2b08 cmp r3, #8 -1001ce68: d805 bhi.n 1001ce76 -1001ce6a: 2a02 cmp r2, #2 -1001ce6c: d803 bhi.n 1001ce76 -1001ce6e: 4620 mov r0, r4 -1001ce70: f009 fa9e bl 100263b0 -1001ce74: e7b4 b.n 1001cde0 -1001ce76: 4620 mov r0, r4 -1001ce78: f009 fad0 bl 1002641c -1001ce7c: e7b0 b.n 1001cde0 - -1001ce7e : -1001ce7e: b537 push {r0, r1, r2, r4, r5, lr} -1001ce80: 6903 ldr r3, [r0, #16] -1001ce82: 4604 mov r4, r0 -1001ce84: f013 0f60 tst.w r3, #96 ; 0x60 -1001ce88: d12e bne.n 1001cee8 -1001ce8a: 2906 cmp r1, #6 -1001ce8c: d82c bhi.n 1001cee8 -1001ce8e: e8df f001 tbb [pc, r1] -1001ce92: 2804 .short 0x2804 -1001ce94: 281f1207 .word 0x281f1207 -1001ce98: 1f .byte 0x1f -1001ce99: 00 .byte 0x00 -1001ce9a: 07db lsls r3, r3, #31 -1001ce9c: d421 bmi.n 1001cee2 -1001ce9e: e023 b.n 1001cee8 -1001cea0: 2301 movs r3, #1 -1001cea2: aa02 add r2, sp, #8 -1001cea4: 2100 movs r1, #0 -1001cea6: f802 3d01 strb.w r3, [r2, #-1]! -1001ceaa: f241 4342 movw r3, #5186 ; 0x1442 -1001ceae: 54e1 strb r1, [r4, r3] -1001ceb0: 4620 mov r0, r4 -1001ceb2: 212d movs r1, #45 ; 0x2d -1001ceb4: e009 b.n 1001ceca -1001ceb6: ad02 add r5, sp, #8 -1001ceb8: 2300 movs r3, #0 -1001ceba: f805 3d01 strb.w r3, [r5, #-1]! -1001cebe: 4620 mov r0, r4 -1001cec0: f009 faac bl 1002641c -1001cec4: 4620 mov r0, r4 -1001cec6: 212d movs r1, #45 ; 0x2d -1001cec8: 462a mov r2, r5 -1001ceca: f015 fb02 bl 100324d2 -1001cece: e00b b.n 1001cee8 -1001ced0: f44f 707a mov.w r0, #1000 ; 0x3e8 -1001ced4: f7fa fc92 bl 100177fc -1001ced8: f7fa fb82 bl 100175e0 -1001cedc: f504 53a0 add.w r3, r4, #5120 ; 0x1400 -1001cee0: 6498 str r0, [r3, #72] ; 0x48 -1001cee2: 4620 mov r0, r4 -1001cee4: f009 fa9a bl 1002641c -1001cee8: b003 add sp, #12 -1001ceea: bd30 pop {r4, r5, pc} - -1001ceec : -1001ceec: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1001cef0: 4607 mov r7, r0 -1001cef2: 4688 mov r8, r1 -1001cef4: b342 cbz r2, 1001cf48 -1001cef6: 2020 movs r0, #32 -1001cef8: f7fa fc5a bl 100177b0 -1001cefc: 4604 mov r4, r0 -1001cefe: b340 cbz r0, 1001cf52 -1001cf00: 2010 movs r0, #16 -1001cf02: f7fa fc55 bl 100177b0 -1001cf06: 2600 movs r6, #0 -1001cf08: 4605 mov r5, r0 -1001cf0a: b930 cbnz r0, 1001cf1a -1001cf0c: 4620 mov r0, r4 -1001cf0e: 2120 movs r1, #32 -1001cf10: f7fa fa7b bl 1001740a -1001cf14: 4628 mov r0, r5 -1001cf16: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1001cf1a: 2305 movs r3, #5 -1001cf1c: e880 0108 stmia.w r0, {r3, r8} -1001cf20: 60c6 str r6, [r0, #12] -1001cf22: f104 0018 add.w r0, r4, #24 -1001cf26: f7fa fa8b bl 10017440 -1001cf2a: 2339 movs r3, #57 ; 0x39 -1001cf2c: 80a3 strh r3, [r4, #4] -1001cf2e: 2310 movs r3, #16 -1001cf30: 60a5 str r5, [r4, #8] -1001cf32: 60e3 str r3, [r4, #12] -1001cf34: 6126 str r6, [r4, #16] -1001cf36: 6166 str r6, [r4, #20] -1001cf38: f607 1008 addw r0, r7, #2312 ; 0x908 -1001cf3c: 4621 mov r1, r4 -1001cf3e: f7ff fb26 bl 1001c58e -1001cf42: b2c0 uxtb r0, r0 -1001cf44: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1001cf48: f7ff ff99 bl 1001ce7e -1001cf4c: 2001 movs r0, #1 -1001cf4e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1001cf52: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1001cf56 : -1001cf56: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1001cf5a: 460f mov r7, r1 -1001cf5c: 4690 mov r8, r2 -1001cf5e: 2100 movs r1, #0 -1001cf60: 2201 movs r2, #1 -1001cf62: 4604 mov r4, r0 -1001cf64: f7ff ffc2 bl 1001ceec -1001cf68: 2020 movs r0, #32 -1001cf6a: f7fa fc21 bl 100177b0 -1001cf6e: 4605 mov r5, r0 -1001cf70: 2800 cmp r0, #0 -1001cf72: d051 beq.n 1001d018 -1001cf74: 2030 movs r0, #48 ; 0x30 -1001cf76: f7fa fc1b bl 100177b0 -1001cf7a: 4606 mov r6, r0 -1001cf7c: b930 cbnz r0, 1001cf8c -1001cf7e: 4628 mov r0, r5 -1001cf80: 2120 movs r1, #32 -1001cf82: f7fa fa42 bl 1001740a -1001cf86: 4630 mov r0, r6 -1001cf88: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1001cf8c: 2100 movs r1, #0 -1001cf8e: 4620 mov r0, r4 -1001cf90: f000 fb2d bl 1001d5ee -1001cf94: f105 0018 add.w r0, r5, #24 -1001cf98: f7fa fa52 bl 10017440 -1001cf9c: 2312 movs r3, #18 -1001cf9e: 80ab strh r3, [r5, #4] -1001cfa0: 2100 movs r1, #0 -1001cfa2: 2330 movs r3, #48 ; 0x30 -1001cfa4: 60eb str r3, [r5, #12] -1001cfa6: 60ae str r6, [r5, #8] -1001cfa8: 6129 str r1, [r5, #16] -1001cfaa: 6169 str r1, [r5, #20] -1001cfac: 6073 str r3, [r6, #4] -1001cfae: f8d4 34a0 ldr.w r3, [r4, #1184] ; 0x4a0 -1001cfb2: 2228 movs r2, #40 ; 0x28 -1001cfb4: f846 3b08 str.w r3, [r6], #8 -1001cfb8: 4630 mov r0, r6 -1001cfba: f7fa fa39 bl 10017430 -1001cfbe: b14f cbz r7, 1001cfd4 -1001cfc0: f1b8 0f00 cmp.w r8, #0 -1001cfc4: dd06 ble.n 1001cfd4 -1001cfc6: 683b ldr r3, [r7, #0] -1001cfc8: b123 cbz r3, 1001cfd4 -1001cfca: 4630 mov r0, r6 -1001cfcc: 4639 mov r1, r7 -1001cfce: 2228 movs r2, #40 ; 0x28 -1001cfd0: f7fa fa1e bl 10017410 -1001cfd4: 6923 ldr r3, [r4, #16] -1001cfd6: 4629 mov r1, r5 -1001cfd8: f443 6300 orr.w r3, r3, #2048 ; 0x800 -1001cfdc: 6123 str r3, [r4, #16] -1001cfde: 2301 movs r3, #1 -1001cfe0: 7523 strb r3, [r4, #20] -1001cfe2: f604 1008 addw r0, r4, #2312 ; 0x908 -1001cfe6: f7ff fad2 bl 1001c58e -1001cfea: b2c5 uxtb r5, r0 -1001cfec: 2d01 cmp r5, #1 -1001cfee: d10d bne.n 1001d00c -1001cff0: f7fa faf6 bl 100175e0 -1001cff4: f44f 51fa mov.w r1, #8000 ; 0x1f40 -1001cff8: f8c4 0448 str.w r0, [r4, #1096] ; 0x448 -1001cffc: f204 403c addw r0, r4, #1084 ; 0x43c -1001d000: f019 ff0a bl 10036e18 -1001d004: 231e movs r3, #30 -1001d006: f8c4 3428 str.w r3, [r4, #1064] ; 0x428 -1001d00a: e005 b.n 1001d018 -1001d00c: 6923 ldr r3, [r4, #16] -1001d00e: f423 6300 bic.w r3, r3, #2048 ; 0x800 -1001d012: 6123 str r3, [r4, #16] -1001d014: 2300 movs r3, #0 -1001d016: 7523 strb r3, [r4, #20] -1001d018: 4628 mov r0, r5 -1001d01a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1001d01e : -1001d01e: b507 push {r0, r1, r2, lr} -1001d020: aa02 add r2, sp, #8 -1001d022: f822 1d02 strh.w r1, [r2, #-2]! -1001d026: 2143 movs r1, #67 ; 0x43 -1001d028: f015 fa53 bl 100324d2 -1001d02c: b003 add sp, #12 -1001d02e: f85d fb04 ldr.w pc, [sp], #4 - -1001d032 : -1001d032: b5f8 push {r3, r4, r5, r6, r7, lr} -1001d034: f641 0369 movw r3, #6249 ; 0x1869 -1001d038: 5cc6 ldrb r6, [r0, r3] -1001d03a: 4607 mov r7, r0 -1001d03c: bb26 cbnz r6, 1001d088 -1001d03e: 2020 movs r0, #32 -1001d040: f7fa fbb6 bl 100177b0 -1001d044: 4604 mov r4, r0 -1001d046: b308 cbz r0, 1001d08c -1001d048: 2010 movs r0, #16 -1001d04a: f7fa fbb1 bl 100177b0 -1001d04e: 4605 mov r5, r0 -1001d050: b928 cbnz r0, 1001d05e -1001d052: 4620 mov r0, r4 -1001d054: 2120 movs r1, #32 -1001d056: f7fa f9d8 bl 1001740a -1001d05a: 4628 mov r0, r5 -1001d05c: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001d05e: 2304 movs r3, #4 -1001d060: 6003 str r3, [r0, #0] -1001d062: 60c6 str r6, [r0, #12] -1001d064: f104 0018 add.w r0, r4, #24 -1001d068: f7fa f9ea bl 10017440 -1001d06c: 2339 movs r3, #57 ; 0x39 -1001d06e: 80a3 strh r3, [r4, #4] -1001d070: 2310 movs r3, #16 -1001d072: 60a5 str r5, [r4, #8] -1001d074: 60e3 str r3, [r4, #12] -1001d076: 6126 str r6, [r4, #16] -1001d078: 6166 str r6, [r4, #20] -1001d07a: f607 1008 addw r0, r7, #2312 ; 0x908 -1001d07e: 4621 mov r1, r4 -1001d080: f7ff fa85 bl 1001c58e -1001d084: b2c0 uxtb r0, r0 -1001d086: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001d088: 2001 movs r0, #1 -1001d08a: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001d08c: bdf8 pop {r3, r4, r5, r6, r7, pc} - -1001d08e : -1001d08e: b5f8 push {r3, r4, r5, r6, r7, lr} -1001d090: 4607 mov r7, r0 -1001d092: 2020 movs r0, #32 -1001d094: f7fa fb8c bl 100177b0 -1001d098: 4604 mov r4, r0 -1001d09a: b308 cbz r0, 1001d0e0 -1001d09c: 2010 movs r0, #16 -1001d09e: f7fa fb87 bl 100177b0 -1001d0a2: 2600 movs r6, #0 -1001d0a4: 4605 mov r5, r0 -1001d0a6: b928 cbnz r0, 1001d0b4 -1001d0a8: 4620 mov r0, r4 -1001d0aa: 2120 movs r1, #32 -1001d0ac: f7fa f9ad bl 1001740a -1001d0b0: 4628 mov r0, r5 -1001d0b2: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001d0b4: 2308 movs r3, #8 -1001d0b6: e880 0048 stmia.w r0, {r3, r6} -1001d0ba: 60c6 str r6, [r0, #12] -1001d0bc: f104 0018 add.w r0, r4, #24 -1001d0c0: f7fa f9be bl 10017440 -1001d0c4: 2339 movs r3, #57 ; 0x39 -1001d0c6: 80a3 strh r3, [r4, #4] -1001d0c8: 2310 movs r3, #16 -1001d0ca: 60a5 str r5, [r4, #8] -1001d0cc: 60e3 str r3, [r4, #12] -1001d0ce: 6126 str r6, [r4, #16] -1001d0d0: 6166 str r6, [r4, #20] -1001d0d2: f607 1008 addw r0, r7, #2312 ; 0x908 -1001d0d6: 4621 mov r1, r4 -1001d0d8: f7ff fa59 bl 1001c58e -1001d0dc: b2c0 uxtb r0, r0 -1001d0de: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001d0e0: bdf8 pop {r3, r4, r5, r6, r7, pc} - -1001d0e2 : -1001d0e2: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -1001d0e6: 4604 mov r4, r0 -1001d0e8: 460d mov r5, r1 -1001d0ea: 2900 cmp r1, #0 -1001d0ec: d047 beq.n 1001d17e -1001d0ee: 680b ldr r3, [r1, #0] -1001d0f0: 3b01 subs r3, #1 -1001d0f2: 2b0a cmp r3, #10 -1001d0f4: d83b bhi.n 1001d16e -1001d0f6: e8df f003 tbb [pc, r3] -1001d0fa: 3a06 .short 0x3a06 -1001d0fc: 3a0e0b3a .word 0x3a0e0b3a -1001d100: 363a163a .word 0x363a163a -1001d104: 12 .byte 0x12 -1001d105: 00 .byte 0x00 -1001d106: 68c9 ldr r1, [r1, #12] -1001d108: 68aa ldr r2, [r5, #8] -1001d10a: f7ff fe54 bl 1001cdb6 -1001d10e: e02e b.n 1001d16e -1001d110: f009 f88c bl 1002622c -1001d114: e02b b.n 1001d16e -1001d116: 7909 ldrb r1, [r1, #4] -1001d118: f7ff feb1 bl 1001ce7e -1001d11c: e027 b.n 1001d16e -1001d11e: 8889 ldrh r1, [r1, #4] -1001d120: f7ff ff7d bl 1001d01e -1001d124: e023 b.n 1001d16e -1001d126: f00b f90b bl 10028340 -1001d12a: 4607 mov r7, r0 -1001d12c: b1f8 cbz r0, 1001d16e -1001d12e: f8d0 30f4 ldr.w r3, [r0, #244] ; 0xf4 -1001d132: b9e3 cbnz r3, 1001d16e -1001d134: ae02 add r6, sp, #8 -1001d136: f806 3d01 strb.w r3, [r6, #-1]! -1001d13a: 4620 mov r0, r4 -1001d13c: 2146 movs r1, #70 ; 0x46 -1001d13e: 4632 mov r2, r6 -1001d140: f015 f9ce bl 100324e0 -1001d144: f04f 080b mov.w r8, #11 -1001d148: f89d 3007 ldrb.w r3, [sp, #7] -1001d14c: b9db cbnz r3, 1001d186 -1001d14e: 2064 movs r0, #100 ; 0x64 -1001d150: f7fa fa80 bl 10017654 -1001d154: f1b8 0801 subs.w r8, r8, #1 -1001d158: 4620 mov r0, r4 -1001d15a: d02a beq.n 1001d1b2 -1001d15c: 2146 movs r1, #70 ; 0x46 -1001d15e: 4632 mov r2, r6 -1001d160: f015 f9be bl 100324e0 -1001d164: e7f0 b.n 1001d148 -1001d166: 2142 movs r1, #66 ; 0x42 -1001d168: 2200 movs r2, #0 -1001d16a: f015 f9b2 bl 100324d2 -1001d16e: 68e8 ldr r0, [r5, #12] -1001d170: b310 cbz r0, 1001d1b8 -1001d172: 68a9 ldr r1, [r5, #8] -1001d174: 2900 cmp r1, #0 -1001d176: dd04 ble.n 1001d182 -1001d178: f7fa f947 bl 1001740a -1001d17c: e001 b.n 1001d182 -1001d17e: 2004 movs r0, #4 -1001d180: e01a b.n 1001d1b8 -1001d182: 2000 movs r0, #0 -1001d184: e018 b.n 1001d1b8 -1001d186: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 -1001d18a: b95b cbnz r3, 1001d1a4 -1001d18c: f8b4 3cfe ldrh.w r3, [r4, #3326] ; 0xcfe -1001d190: f023 0301 bic.w r3, r3, #1 -1001d194: f8a4 3cfe strh.w r3, [r4, #3326] ; 0xcfe -1001d198: f8b4 3cfc ldrh.w r3, [r4, #3324] ; 0xcfc -1001d19c: f023 0301 bic.w r3, r3, #1 -1001d1a0: f8a4 3cfc strh.w r3, [r4, #3324] ; 0xcfc -1001d1a4: 2200 movs r2, #0 -1001d1a6: 4620 mov r0, r4 -1001d1a8: 2105 movs r1, #5 -1001d1aa: 4613 mov r3, r2 -1001d1ac: f7fd ff2c bl 1001b008 -1001d1b0: e7dd b.n 1001d16e -1001d1b2: f7ff ff6c bl 1001d08e -1001d1b6: e7da b.n 1001d16e -1001d1b8: b002 add sp, #8 -1001d1ba: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1001d1be : -1001d1be: b538 push {r3, r4, r5, lr} -1001d1c0: 4604 mov r4, r0 -1001d1c2: 6800 ldr r0, [r0, #0] -1001d1c4: 460d mov r5, r1 -1001d1c6: b128 cbz r0, 1001d1d4 -1001d1c8: 6809 ldr r1, [r1, #0] -1001d1ca: f7fa f91e bl 1001740a -1001d1ce: 2300 movs r3, #0 -1001d1d0: 602b str r3, [r5, #0] -1001d1d2: 6023 str r3, [r4, #0] -1001d1d4: bd38 pop {r3, r4, r5, pc} - ... - -1001d1d8 : -1001d1d8: b537 push {r0, r1, r2, r4, r5, lr} -1001d1da: 4b10 ldr r3, [pc, #64] ; (1001d21c ) -1001d1dc: 4604 mov r4, r0 -1001d1de: f641 0534 movw r5, #6196 ; 0x1834 -1001d1e2: 9300 str r3, [sp, #0] -1001d1e4: 5961 ldr r1, [r4, r5] -1001d1e6: 4623 mov r3, r4 -1001d1e8: f200 402c addw r0, r0, #1068 ; 0x42c -1001d1ec: 4a0c ldr r2, [pc, #48] ; (1001d220 ) -1001d1ee: f019 fe0f bl 10036e10 -1001d1f2: 4b0c ldr r3, [pc, #48] ; (1001d224 ) -1001d1f4: f204 403c addw r0, r4, #1084 ; 0x43c -1001d1f8: 9300 str r3, [sp, #0] -1001d1fa: 5961 ldr r1, [r4, r5] -1001d1fc: 4623 mov r3, r4 -1001d1fe: 4a0a ldr r2, [pc, #40] ; (1001d228 ) -1001d200: f019 fe06 bl 10036e10 -1001d204: 4b09 ldr r3, [pc, #36] ; (1001d22c ) -1001d206: f504 6092 add.w r0, r4, #1168 ; 0x490 -1001d20a: 9300 str r3, [sp, #0] -1001d20c: 5961 ldr r1, [r4, r5] -1001d20e: 4a08 ldr r2, [pc, #32] ; (1001d230 ) -1001d210: 4623 mov r3, r4 -1001d212: f019 fdfd bl 10036e10 -1001d216: b003 add sp, #12 -1001d218: bd30 pop {r4, r5, pc} -1001d21a: bf00 nop -1001d21c: 1004131f .word 0x1004131f -1001d220: 1001dc55 .word 0x1001dc55 -1001d224: 1004132b .word 0x1004132b -1001d228: 1001dcdd .word 0x1001dcdd -1001d22c: 10041339 .word 0x10041339 -1001d230: 1001dd39 .word 0x1001dd39 - -1001d234 : -1001d234: b510 push {r4, lr} -1001d236: 4604 mov r4, r0 -1001d238: f500 6084 add.w r0, r0, #1056 ; 0x420 -1001d23c: f019 fdf3 bl 10036e26 -1001d240: f504 6086 add.w r0, r4, #1072 ; 0x430 -1001d244: f019 fdef bl 10036e26 -1001d248: f204 4084 addw r0, r4, #1156 ; 0x484 -1001d24c: e8bd 4010 ldmia.w sp!, {r4, lr} -1001d250: f019 bde9 b.w 10036e26 - -1001d254 : -1001d254: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} -1001d258: 6903 ldr r3, [r0, #16] -1001d25a: 4604 mov r4, r0 -1001d25c: f013 0601 ands.w r6, r3, #1 -1001d260: f890 8872 ldrb.w r8, [r0, #2162] ; 0x872 -1001d264: 4f21 ldr r7, [pc, #132] ; (1001d2ec ) -1001d266: d104 bne.n 1001d272 -1001d268: e006 b.n 1001d278 -1001d26a: 4b21 ldr r3, [pc, #132] ; (1001d2f0 ) -1001d26c: 681a ldr r2, [r3, #0] -1001d26e: 469a mov sl, r3 -1001d270: b97a cbnz r2, 1001d292 -1001d272: 2300 movs r3, #0 -1001d274: 703b strb r3, [r7, #0] -1001d276: e035 b.n 1001d2e4 -1001d278: f890 58f8 ldrb.w r5, [r0, #2296] ; 0x8f8 -1001d27c: 2d00 cmp r5, #0 -1001d27e: d0f4 beq.n 1001d26a -1001d280: 481c ldr r0, [pc, #112] ; (1001d2f4 ) -1001d282: f7fd fc6d bl 1001ab60 -1001d286: f894 08f8 ldrb.w r0, [r4, #2296] ; 0x8f8 -1001d28a: f7ef fd55 bl 1000cd38 -1001d28e: 703e strb r6, [r7, #0] -1001d290: e028 b.n 1001d2e4 -1001d292: f1b8 0f01 cmp.w r8, #1 -1001d296: d106 bne.n 1001d2a6 -1001d298: f604 0694 addw r6, r4, #2196 ; 0x894 -1001d29c: f8b4 98b4 ldrh.w r9, [r4, #2228] ; 0x8b4 -1001d2a0: f894 58b6 ldrb.w r5, [r4, #2230] ; 0x8b6 -1001d2a4: e00e b.n 1001d2c4 -1001d2a6: f1b8 0f03 cmp.w r8, #3 -1001d2aa: d108 bne.n 1001d2be -1001d2ac: f604 06b7 addw r6, r4, #2231 ; 0x8b7 -1001d2b0: 4630 mov r0, r6 -1001d2b2: f7fd fc91 bl 1001abd8 -1001d2b6: f8df 8040 ldr.w r8, [pc, #64] ; 1001d2f8 -1001d2ba: 4681 mov r9, r0 -1001d2bc: e002 b.n 1001d2c4 -1001d2be: 46a9 mov r9, r5 -1001d2c0: 462e mov r6, r5 -1001d2c2: 46a8 mov r8, r5 -1001d2c4: f604 0473 addw r4, r4, #2163 ; 0x873 -1001d2c8: 4620 mov r0, r4 -1001d2ca: f8da a000 ldr.w sl, [sl] -1001d2ce: f7fd fc83 bl 1001abd8 -1001d2d2: f8cd 9000 str.w r9, [sp] -1001d2d6: 4602 mov r2, r0 -1001d2d8: 9501 str r5, [sp, #4] -1001d2da: 4640 mov r0, r8 -1001d2dc: 4621 mov r1, r4 -1001d2de: 4633 mov r3, r6 -1001d2e0: 47d0 blx sl -1001d2e2: e7c6 b.n 1001d272 -1001d2e4: b002 add sp, #8 -1001d2e6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1001d2ea: bf00 nop -1001d2ec: 1004baf0 .word 0x1004baf0 -1001d2f0: 1004baf4 .word 0x1004baf4 -1001d2f4: 1004134b .word 0x1004134b -1001d2f8: 00400004 .word 0x00400004 - -1001d2fc <_rtw_init_mlme_priv>: -1001d2fc: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1001d2fe: 2302 movs r3, #2 -1001d300: 4604 mov r4, r0 -1001d302: 61a0 str r0, [r4, #24] -1001d304: 2500 movs r5, #0 -1001d306: f8c0 30f8 str.w r3, [r0, #248] ; 0xf8 -1001d30a: f100 060c add.w r6, r0, #12 -1001d30e: 2301 movs r3, #1 -1001d310: f8c0 34a0 str.w r3, [r0, #1184] ; 0x4a0 -1001d314: 61c5 str r5, [r0, #28] -1001d316: 6105 str r5, [r0, #16] -1001d318: f104 0720 add.w r7, r4, #32 -1001d31c: 4630 mov r0, r6 -1001d31e: f7fa f935 bl 1001758c -1001d322: 4638 mov r0, r7 -1001d324: f7fa f93a bl 1001759c -1001d328: f104 002c add.w r0, r4, #44 ; 0x2c -1001d32c: f7fa f936 bl 1001759c -1001d330: 4630 mov r0, r6 -1001d332: a901 add r1, sp, #4 -1001d334: f7fa f948 bl 100175c8 -1001d338: 4630 mov r0, r6 -1001d33a: a901 add r1, sp, #4 -1001d33c: 87a5 strh r5, [r4, #60] ; 0x3c -1001d33e: f7fa f94d bl 100175dc -1001d342: f104 004c add.w r0, r4, #76 ; 0x4c -1001d346: 4629 mov r1, r5 -1001d348: 2228 movs r2, #40 ; 0x28 -1001d34a: f7fa f871 bl 10017430 -1001d34e: f641 0369 movw r3, #6249 ; 0x1869 -1001d352: 5ce3 ldrb r3, [r4, r3] -1001d354: b963 cbnz r3, 1001d370 <_rtw_init_mlme_priv+0x74> -1001d356: f44f 706b mov.w r0, #940 ; 0x3ac -1001d35a: f7fa fa09 bl 10017770 -1001d35e: 4605 mov r5, r0 -1001d360: b158 cbz r0, 1001d37a <_rtw_init_mlme_priv+0x7e> -1001d362: 63a0 str r0, [r4, #56] ; 0x38 -1001d364: f7fa f86c bl 10017440 -1001d368: 4628 mov r0, r5 -1001d36a: 4639 mov r1, r7 -1001d36c: f7fa f876 bl 1001745c -1001d370: 4620 mov r0, r4 -1001d372: f7ff ff31 bl 1001d1d8 -1001d376: 2001 movs r0, #1 -1001d378: e7ff b.n 1001d37a <_rtw_init_mlme_priv+0x7e> -1001d37a: b003 add sp, #12 -1001d37c: bdf0 pop {r4, r5, r6, r7, pc} - -1001d37e : -1001d37e: b510 push {r4, lr} -1001d380: 4604 mov r4, r0 -1001d382: f7fa f911 bl 100175a8 -1001d386: f104 001c add.w r0, r4, #28 -1001d38a: f7fa f90d bl 100175a8 -1001d38e: f104 0028 add.w r0, r4, #40 ; 0x28 -1001d392: e8bd 4010 ldmia.w sp!, {r4, lr} -1001d396: f7fa b907 b.w 100175a8 - -1001d39a : -1001d39a: b510 push {r4, lr} -1001d39c: 4604 mov r4, r0 -1001d39e: f204 41c4 addw r1, r4, #1220 ; 0x4c4 -1001d3a2: f500 6097 add.w r0, r0, #1208 ; 0x4b8 -1001d3a6: f7ff ff0a bl 1001d1be -1001d3aa: f504 6093 add.w r0, r4, #1176 ; 0x498 -1001d3ae: f204 419c addw r1, r4, #1180 ; 0x49c -1001d3b2: f7ff ff04 bl 1001d1be -1001d3b6: f204 40bc addw r0, r4, #1212 ; 0x4bc -1001d3ba: f504 6199 add.w r1, r4, #1224 ; 0x4c8 -1001d3be: f7ff fefe bl 1001d1be -1001d3c2: f504 6098 add.w r0, r4, #1216 ; 0x4c0 -1001d3c6: f204 41cc addw r1, r4, #1228 ; 0x4cc -1001d3ca: f7ff fef8 bl 1001d1be -1001d3ce: f504 609a add.w r0, r4, #1232 ; 0x4d0 -1001d3d2: f204 41e4 addw r1, r4, #1252 ; 0x4e4 -1001d3d6: f7ff fef2 bl 1001d1be -1001d3da: f204 40d4 addw r0, r4, #1236 ; 0x4d4 -1001d3de: f504 619d add.w r1, r4, #1256 ; 0x4e8 -1001d3e2: f7ff feec bl 1001d1be -1001d3e6: f504 609b add.w r0, r4, #1240 ; 0x4d8 -1001d3ea: f204 41ec addw r1, r4, #1260 ; 0x4ec -1001d3ee: f7ff fee6 bl 1001d1be -1001d3f2: f204 40dc addw r0, r4, #1244 ; 0x4dc -1001d3f6: f504 619e add.w r1, r4, #1264 ; 0x4f0 -1001d3fa: f7ff fee0 bl 1001d1be -1001d3fe: f504 609c add.w r0, r4, #1248 ; 0x4e0 -1001d402: f204 41f4 addw r1, r4, #1268 ; 0x4f4 -1001d406: e8bd 4010 ldmia.w sp!, {r4, lr} -1001d40a: f7ff bed8 b.w 1001d1be - -1001d40e <_rtw_free_mlme_priv>: -1001d40e: b510 push {r4, lr} -1001d410: 4604 mov r4, r0 -1001d412: f7ff ffc2 bl 1001d39a -1001d416: b16c cbz r4, 1001d434 <_rtw_free_mlme_priv+0x26> -1001d418: 4620 mov r0, r4 -1001d41a: f7ff ffb0 bl 1001d37e -1001d41e: 6ae0 ldr r0, [r4, #44] ; 0x2c -1001d420: b118 cbz r0, 1001d42a <_rtw_free_mlme_priv+0x1c> -1001d422: f44f 716b mov.w r1, #940 ; 0x3ac -1001d426: f7f9 ffee bl 10017406 -1001d42a: 4620 mov r0, r4 -1001d42c: e8bd 4010 ldmia.w sp!, {r4, lr} -1001d430: f7ff bf00 b.w 1001d234 -1001d434: bd10 pop {r4, pc} - -1001d436 <_rtw_alloc_network>: -1001d436: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1001d438: f100 071c add.w r7, r0, #28 -1001d43c: f100 0414 add.w r4, r0, #20 -1001d440: a901 add r1, sp, #4 -1001d442: 4605 mov r5, r0 -1001d444: 4638 mov r0, r7 -1001d446: f7fa f8bf bl 100175c8 -1001d44a: 4620 mov r0, r4 -1001d44c: f7fa f894 bl 10017578 -1001d450: 2801 cmp r0, #1 -1001d452: f04f 0600 mov.w r6, #0 -1001d456: d00e beq.n 1001d476 <_rtw_alloc_network+0x40> -1001d458: 696c ldr r4, [r5, #20] -1001d45a: 4620 mov r0, r4 -1001d45c: f7fa f804 bl 10017468 -1001d460: 60a6 str r6, [r4, #8] -1001d462: 60e6 str r6, [r4, #12] -1001d464: f7fa f8bc bl 100175e0 -1001d468: 8e2b ldrh r3, [r5, #48] ; 0x30 -1001d46a: 6120 str r0, [r4, #16] -1001d46c: 3301 adds r3, #1 -1001d46e: 6166 str r6, [r4, #20] -1001d470: 61a6 str r6, [r4, #24] -1001d472: 862b strh r3, [r5, #48] ; 0x30 -1001d474: e000 b.n 1001d478 <_rtw_alloc_network+0x42> -1001d476: 4634 mov r4, r6 -1001d478: 4638 mov r0, r7 -1001d47a: a901 add r1, sp, #4 -1001d47c: f7fa f8ae bl 100175dc -1001d480: 4620 mov r0, r4 -1001d482: b003 add sp, #12 -1001d484: bdf0 pop {r4, r5, r6, r7, pc} - -1001d486 <_rtw_free_network>: -1001d486: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1001d488: 4605 mov r5, r0 -1001d48a: 4616 mov r6, r2 -1001d48c: 460c mov r4, r1 -1001d48e: b341 cbz r1, 1001d4e2 <_rtw_free_network+0x5c> -1001d490: 68cb ldr r3, [r1, #12] -1001d492: 2b01 cmp r3, #1 -1001d494: d025 beq.n 1001d4e2 <_rtw_free_network+0x5c> -1001d496: f7fa f8a3 bl 100175e0 -1001d49a: 686b ldr r3, [r5, #4] -1001d49c: f013 0f60 tst.w r3, #96 ; 0x60 -1001d4a0: bf0c ite eq -1001d4a2: 2714 moveq r7, #20 -1001d4a4: 2701 movne r7, #1 -1001d4a6: b1b6 cbz r6, 1001d4d6 <_rtw_free_network+0x50> -1001d4a8: f105 061c add.w r6, r5, #28 -1001d4ac: a901 add r1, sp, #4 -1001d4ae: 4630 mov r0, r6 -1001d4b0: f7fa f88a bl 100175c8 -1001d4b4: f105 0714 add.w r7, r5, #20 -1001d4b8: 4620 mov r0, r4 -1001d4ba: f7f9 ffd5 bl 10017468 -1001d4be: 4620 mov r0, r4 -1001d4c0: 4639 mov r1, r7 -1001d4c2: f7f9 ffcb bl 1001745c -1001d4c6: 8e2b ldrh r3, [r5, #48] ; 0x30 -1001d4c8: 4630 mov r0, r6 -1001d4ca: 3b01 subs r3, #1 -1001d4cc: 862b strh r3, [r5, #48] ; 0x30 -1001d4ce: a901 add r1, sp, #4 -1001d4d0: f7fa f884 bl 100175dc -1001d4d4: e005 b.n 1001d4e2 <_rtw_free_network+0x5c> -1001d4d6: 6923 ldr r3, [r4, #16] -1001d4d8: 1ac0 subs r0, r0, r3 -1001d4da: f7fa f893 bl 10017604 -1001d4de: 42b8 cmp r0, r7 -1001d4e0: d2e2 bcs.n 1001d4a8 <_rtw_free_network+0x22> -1001d4e2: b003 add sp, #12 -1001d4e4: bdf0 pop {r4, r5, r6, r7, pc} - -1001d4e6 <_rtw_free_network_nolock>: -1001d4e6: b538 push {r3, r4, r5, lr} -1001d4e8: 4605 mov r5, r0 -1001d4ea: 460c mov r4, r1 -1001d4ec: b169 cbz r1, 1001d50a <_rtw_free_network_nolock+0x24> -1001d4ee: 68cb ldr r3, [r1, #12] -1001d4f0: 2b01 cmp r3, #1 -1001d4f2: d00a beq.n 1001d50a <_rtw_free_network_nolock+0x24> -1001d4f4: 4608 mov r0, r1 -1001d4f6: f7f9 ffb7 bl 10017468 -1001d4fa: 4620 mov r0, r4 -1001d4fc: f105 0114 add.w r1, r5, #20 -1001d500: f7f9 ffac bl 1001745c -1001d504: 8e2b ldrh r3, [r5, #48] ; 0x30 -1001d506: 3b01 subs r3, #1 -1001d508: 862b strh r3, [r5, #48] ; 0x30 -1001d50a: bd38 pop {r3, r4, r5, pc} - -1001d50c <_rtw_find_network>: -1001d50c: b573 push {r0, r1, r4, r5, r6, lr} -1001d50e: 2300 movs r3, #0 -1001d510: 4605 mov r5, r0 -1001d512: 2206 movs r2, #6 -1001d514: 4668 mov r0, sp -1001d516: 460e mov r6, r1 -1001d518: 9300 str r3, [sp, #0] -1001d51a: f8ad 3004 strh.w r3, [sp, #4] -1001d51e: f7f9 ff7f bl 10017420 -1001d522: b108 cbz r0, 1001d528 <_rtw_find_network+0x1c> -1001d524: 2400 movs r4, #0 -1001d526: e00c b.n 1001d542 <_rtw_find_network+0x36> -1001d528: 682c ldr r4, [r5, #0] -1001d52a: 42ac cmp r4, r5 -1001d52c: d0fa beq.n 1001d524 <_rtw_find_network+0x18> -1001d52e: 4630 mov r0, r6 -1001d530: f104 0120 add.w r1, r4, #32 -1001d534: 2206 movs r2, #6 -1001d536: f7f9 ff73 bl 10017420 -1001d53a: 2801 cmp r0, #1 -1001d53c: d001 beq.n 1001d542 <_rtw_find_network+0x36> -1001d53e: 6824 ldr r4, [r4, #0] -1001d540: e7f3 b.n 1001d52a <_rtw_find_network+0x1e> -1001d542: 4620 mov r0, r4 -1001d544: b002 add sp, #8 -1001d546: bd70 pop {r4, r5, r6, pc} - -1001d548 <_rtw_free_network_queue>: -1001d548: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -1001d54c: f100 0534 add.w r5, r0, #52 ; 0x34 -1001d550: 4604 mov r4, r0 -1001d552: 4688 mov r8, r1 -1001d554: f100 070c add.w r7, r0, #12 -1001d558: f100 062c add.w r6, r0, #44 ; 0x2c -1001d55c: a901 add r1, sp, #4 -1001d55e: 4628 mov r0, r5 -1001d560: f7fa f832 bl 100175c8 -1001d564: 6ae4 ldr r4, [r4, #44] ; 0x2c -1001d566: 4630 mov r0, r6 -1001d568: 4621 mov r1, r4 -1001d56a: f7fa f80a bl 10017582 -1001d56e: b940 cbnz r0, 1001d582 <_rtw_free_network_queue+0x3a> -1001d570: f8d4 9000 ldr.w r9, [r4] -1001d574: 4621 mov r1, r4 -1001d576: 4638 mov r0, r7 -1001d578: 4642 mov r2, r8 -1001d57a: f7ff ff84 bl 1001d486 <_rtw_free_network> -1001d57e: 464c mov r4, r9 -1001d580: e7f1 b.n 1001d566 <_rtw_free_network_queue+0x1e> -1001d582: 4628 mov r0, r5 -1001d584: a901 add r1, sp, #4 -1001d586: f7fa f829 bl 100175dc -1001d58a: b003 add sp, #12 -1001d58c: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - -1001d590 : -1001d590: f241 73ac movw r3, #6060 ; 0x17ac -1001d594: 58c3 ldr r3, [r0, r3] -1001d596: b93b cbnz r3, 1001d5a8 -1001d598: f241 72b0 movw r2, #6064 ; 0x17b0 -1001d59c: 5882 ldr r2, [r0, r2] -1001d59e: b92a cbnz r2, 1001d5ac -1001d5a0: 6900 ldr r0, [r0, #16] -1001d5a2: f000 0001 and.w r0, r0, #1 -1001d5a6: 4770 bx lr -1001d5a8: 2000 movs r0, #0 -1001d5aa: 4770 bx lr -1001d5ac: 4618 mov r0, r3 -1001d5ae: 4770 bx lr - -1001d5b0 : -1001d5b0: 300a adds r0, #10 -1001d5b2: 4770 bx lr - -1001d5b4 : -1001d5b4: b507 push {r0, r1, r2, lr} -1001d5b6: f100 0186 add.w r1, r0, #134 ; 0x86 -1001d5ba: 2202 movs r2, #2 -1001d5bc: f10d 0006 add.w r0, sp, #6 -1001d5c0: f7f9 ff26 bl 10017410 -1001d5c4: f8bd 0006 ldrh.w r0, [sp, #6] -1001d5c8: b003 add sp, #12 -1001d5ca: f85d fb04 ldr.w pc, [sp], #4 - -1001d5ce : -1001d5ce: 3008 adds r0, #8 -1001d5d0: 4770 bx lr - -1001d5d2 : -1001d5d2: b538 push {r3, r4, r5, lr} -1001d5d4: 4605 mov r5, r0 -1001d5d6: f7ff fe91 bl 1001d2fc <_rtw_init_mlme_priv> -1001d5da: 4604 mov r4, r0 -1001d5dc: b918 cbnz r0, 1001d5e6 -1001d5de: f105 000c add.w r0, r5, #12 -1001d5e2: f7ff ff14 bl 1001d40e <_rtw_free_mlme_priv> -1001d5e6: 4620 mov r0, r4 -1001d5e8: bd38 pop {r3, r4, r5, pc} - -1001d5ea : -1001d5ea: f7ff bf10 b.w 1001d40e <_rtw_free_mlme_priv> - -1001d5ee : -1001d5ee: f7ff bfab b.w 1001d548 <_rtw_free_network_queue> - -1001d5f2 : -1001d5f2: f8d0 3d0c ldr.w r3, [r0, #3340] ; 0xd0c -1001d5f6: 6d08 ldr r0, [r1, #80] ; 0x50 -1001d5f8: b10b cbz r3, 1001d5fe -1001d5fa: 3000 adds r0, #0 -1001d5fc: e001 b.n 1001d602 -1001d5fe: f110 30ff adds.w r0, r0, #4294967295 -1001d602: bf18 it ne -1001d604: 2001 movne r0, #1 -1001d606: 4770 bx lr - -1001d608 : -1001d608: b537 push {r0, r1, r2, r4, r5, lr} -1001d60a: 4604 mov r4, r0 -1001d60c: 460d mov r5, r1 -1001d60e: a801 add r0, sp, #4 -1001d610: f104 0186 add.w r1, r4, #134 ; 0x86 -1001d614: 2202 movs r2, #2 -1001d616: f7f9 fefb bl 10017410 -1001d61a: 2202 movs r2, #2 -1001d61c: f10d 0006 add.w r0, sp, #6 -1001d620: f105 0186 add.w r1, r5, #134 ; 0x86 -1001d624: f7f9 fef4 bl 10017410 -1001d628: 68e2 ldr r2, [r4, #12] -1001d62a: 68eb ldr r3, [r5, #12] -1001d62c: 429a cmp r2, r3 -1001d62e: d001 beq.n 1001d634 -1001d630: 2000 movs r0, #0 -1001d632: e019 b.n 1001d668 -1001d634: 1d20 adds r0, r4, #4 -1001d636: 1d29 adds r1, r5, #4 -1001d638: 2206 movs r2, #6 -1001d63a: f7f9 fef1 bl 10017420 -1001d63e: 2801 cmp r0, #1 -1001d640: d1f6 bne.n 1001d630 -1001d642: f104 0010 add.w r0, r4, #16 -1001d646: f105 0110 add.w r1, r5, #16 -1001d64a: 68e2 ldr r2, [r4, #12] -1001d64c: f7f9 fee8 bl 10017420 -1001d650: 2801 cmp r0, #1 -1001d652: d1ed bne.n 1001d630 -1001d654: f8bd 2006 ldrh.w r2, [sp, #6] -1001d658: f8bd 3004 ldrh.w r3, [sp, #4] -1001d65c: 4053 eors r3, r2 -1001d65e: f013 0f03 tst.w r3, #3 -1001d662: bf14 ite ne -1001d664: 2000 movne r0, #0 -1001d666: 2001 moveq r0, #1 -1001d668: b003 add sp, #12 -1001d66a: bd30 pop {r4, r5, pc} - -1001d66c : -1001d66c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1001d670: 469a mov sl, r3 -1001d672: 6913 ldr r3, [r2, #16] -1001d674: 4604 mov r4, r0 -1001d676: 07db lsls r3, r3, #31 -1001d678: 460d mov r5, r1 -1001d67a: 4616 mov r6, r2 -1001d67c: 6b87 ldr r7, [r0, #56] ; 0x38 -1001d67e: f891 9075 ldrb.w r9, [r1, #117] ; 0x75 -1001d682: d504 bpl.n 1001d68e -1001d684: f102 0098 add.w r0, r2, #152 ; 0x98 -1001d688: f7ff ffbe bl 1001d608 -1001d68c: bb60 cbnz r0, 1001d6e8 -1001d68e: f1b9 0f65 cmp.w r9, #101 ; 0x65 -1001d692: 6ba7 ldr r7, [r4, #56] ; 0x38 -1001d694: f894 8074 ldrb.w r8, [r4, #116] ; 0x74 -1001d698: f894 6075 ldrb.w r6, [r4, #117] ; 0x75 -1001d69c: d014 beq.n 1001d6c8 -1001d69e: f895 3074 ldrb.w r3, [r5, #116] ; 0x74 -1001d6a2: 2205 movs r2, #5 -1001d6a4: eb03 0888 add.w r8, r3, r8, lsl #2 -1001d6a8: f895 3075 ldrb.w r3, [r5, #117] ; 0x75 -1001d6ac: fbb8 f8f2 udiv r8, r8, r2 -1001d6b0: eb03 0686 add.w r6, r3, r6, lsl #2 -1001d6b4: 6bab ldr r3, [r5, #56] ; 0x38 -1001d6b6: fbb6 f6f2 udiv r6, r6, r2 -1001d6ba: eb03 0787 add.w r7, r3, r7, lsl #2 -1001d6be: fa5f f888 uxtb.w r8, r8 -1001d6c2: b2f6 uxtb r6, r6 -1001d6c4: fb97 f7f2 sdiv r7, r7, r2 -1001d6c8: f1ba 0f00 cmp.w sl, #0 -1001d6cc: d005 beq.n 1001d6da -1001d6ce: 6faa ldr r2, [r5, #120] ; 0x78 -1001d6d0: 4620 mov r0, r4 -1001d6d2: 4629 mov r1, r5 -1001d6d4: 327c adds r2, #124 ; 0x7c -1001d6d6: f7f9 fe9b bl 10017410 -1001d6da: f884 8074 strb.w r8, [r4, #116] ; 0x74 -1001d6de: f884 6075 strb.w r6, [r4, #117] ; 0x75 -1001d6e2: 63a7 str r7, [r4, #56] ; 0x38 -1001d6e4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1001d6e8: f1b9 0f65 cmp.w r9, #101 ; 0x65 -1001d6ec: f896 8c06 ldrb.w r8, [r6, #3078] ; 0xc06 -1001d6f0: f896 6c07 ldrb.w r6, [r6, #3079] ; 0xc07 -1001d6f4: d0e8 beq.n 1001d6c8 -1001d6f6: 6bab ldr r3, [r5, #56] ; 0x38 -1001d6f8: 6ba7 ldr r7, [r4, #56] ; 0x38 -1001d6fa: eb03 0787 add.w r7, r3, r7, lsl #2 -1001d6fe: 2305 movs r3, #5 -1001d700: fb97 f7f3 sdiv r7, r7, r3 -1001d704: e7e0 b.n 1001d6c8 - -1001d706 : -1001d706: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} -1001d70a: f100 0934 add.w r9, r0, #52 ; 0x34 -1001d70e: 2400 movs r4, #0 -1001d710: 4607 mov r7, r0 -1001d712: 460d mov r5, r1 -1001d714: f100 0a2c add.w sl, r0, #44 ; 0x2c -1001d718: a903 add r1, sp, #12 -1001d71a: 4648 mov r0, r9 -1001d71c: f8ad 4008 strh.w r4, [sp, #8] -1001d720: f8ad 400a strh.w r4, [sp, #10] -1001d724: f7f9 ff50 bl 100175c8 -1001d728: 6afe ldr r6, [r7, #44] ; 0x2c -1001d72a: 46a0 mov r8, r4 -1001d72c: 4650 mov r0, sl -1001d72e: 4631 mov r1, r6 -1001d730: f7f9 ff27 bl 10017582 -1001d734: 2801 cmp r0, #1 -1001d736: d013 beq.n 1001d760 -1001d738: f106 001c add.w r0, r6, #28 -1001d73c: 4629 mov r1, r5 -1001d73e: f7ff ff63 bl 1001d608 -1001d742: b960 cbnz r0, 1001d75e -1001d744: b13c cbz r4, 1001d756 -1001d746: 6923 ldr r3, [r4, #16] -1001d748: 6932 ldr r2, [r6, #16] -1001d74a: 1ad3 subs r3, r2, r3 -1001d74c: ea34 0423 bics.w r4, r4, r3, asr #32 -1001d750: bf28 it cs -1001d752: 4634 movcs r4, r6 -1001d754: e000 b.n 1001d758 -1001d756: 4634 mov r4, r6 -1001d758: 46b0 mov r8, r6 -1001d75a: 6836 ldr r6, [r6, #0] -1001d75c: e7e6 b.n 1001d72c -1001d75e: 46b0 mov r8, r6 -1001d760: 4650 mov r0, sl -1001d762: 4631 mov r1, r6 -1001d764: f7f9 ff0d bl 10017582 -1001d768: 2801 cmp r0, #1 -1001d76a: d14c bne.n 1001d806 -1001d76c: f107 0020 add.w r0, r7, #32 -1001d770: f7f9 ff02 bl 10017578 -1001d774: 2801 cmp r0, #1 -1001d776: f107 060c add.w r6, r7, #12 -1001d77a: d129 bne.n 1001d7d0 -1001d77c: f8d7 3d0c ldr.w r3, [r7, #3340] ; 0xd0c -1001d780: 2b02 cmp r3, #2 -1001d782: d001 beq.n 1001d788 -1001d784: 2b04 cmp r3, #4 -1001d786: d11e bne.n 1001d7c6 -1001d788: 2600 movs r6, #0 -1001d78a: 6fa9 ldr r1, [r5, #120] ; 0x78 -1001d78c: 4632 mov r2, r6 -1001d78e: ab02 add r3, sp, #8 -1001d790: 9600 str r6, [sp, #0] -1001d792: 9601 str r6, [sp, #4] -1001d794: f105 007c add.w r0, r5, #124 ; 0x7c -1001d798: f021 f86e bl 1003e878 <__rtw_get_sec_ie_veneer> -1001d79c: 9600 str r6, [sp, #0] -1001d79e: 9601 str r6, [sp, #4] -1001d7a0: 4632 mov r2, r6 -1001d7a2: f10d 030a add.w r3, sp, #10 -1001d7a6: f104 0098 add.w r0, r4, #152 ; 0x98 -1001d7aa: f8d4 1094 ldr.w r1, [r4, #148] ; 0x94 -1001d7ae: f021 f863 bl 1003e878 <__rtw_get_sec_ie_veneer> -1001d7b2: f8bd 2008 ldrh.w r2, [sp, #8] -1001d7b6: f8bd 300a ldrh.w r3, [sp, #10] -1001d7ba: b112 cbz r2, 1001d7c2 -1001d7bc: 2b00 cmp r3, #0 -1001d7be: d03f beq.n 1001d840 -1001d7c0: e001 b.n 1001d7c6 -1001d7c2: 2b00 cmp r3, #0 -1001d7c4: d135 bne.n 1001d832 -1001d7c6: 6baa ldr r2, [r5, #56] ; 0x38 -1001d7c8: 6d63 ldr r3, [r4, #84] ; 0x54 -1001d7ca: 4293 cmp r3, r2 -1001d7cc: db38 blt.n 1001d840 -1001d7ce: e030 b.n 1001d832 -1001d7d0: 4630 mov r0, r6 -1001d7d2: f7ff fe30 bl 1001d436 <_rtw_alloc_network> -1001d7d6: 4604 mov r4, r0 -1001d7d8: b358 cbz r0, 1001d832 -1001d7da: 6faa ldr r2, [r5, #120] ; 0x78 -1001d7dc: 4629 mov r1, r5 -1001d7de: 327c adds r2, #124 ; 0x7c -1001d7e0: 602a str r2, [r5, #0] -1001d7e2: 301c adds r0, #28 -1001d7e4: f7f9 fe14 bl 10017410 -1001d7e8: f7f9 fefa bl 100175e0 -1001d7ec: f894 3091 ldrb.w r3, [r4, #145] ; 0x91 -1001d7f0: 6120 str r0, [r4, #16] -1001d7f2: 2b65 cmp r3, #101 ; 0x65 -1001d7f4: bf04 itt eq -1001d7f6: 2300 moveq r3, #0 -1001d7f8: f884 3091 strbeq.w r3, [r4, #145] ; 0x91 -1001d7fc: 4620 mov r0, r4 -1001d7fe: 4651 mov r1, sl -1001d800: f7f9 fe2c bl 1001745c -1001d804: e015 b.n 1001d832 -1001d806: f7f9 feeb bl 100175e0 -1001d80a: f8c8 0010 str.w r0, [r8, #16] -1001d80e: 6faa ldr r2, [r5, #120] ; 0x78 -1001d810: f8d8 3094 ldr.w r3, [r8, #148] ; 0x94 -1001d814: 4293 cmp r3, r2 -1001d816: d905 bls.n 1001d824 -1001d818: 7aab ldrb r3, [r5, #10] -1001d81a: f113 33ff adds.w r3, r3, #4294967295 -1001d81e: bf18 it ne -1001d820: 2301 movne r3, #1 -1001d822: e000 b.n 1001d826 -1001d824: 2301 movs r3, #1 -1001d826: f108 001c add.w r0, r8, #28 -1001d82a: 4629 mov r1, r5 -1001d82c: 463a mov r2, r7 -1001d82e: f7ff ff1d bl 1001d66c -1001d832: 4648 mov r0, r9 -1001d834: a903 add r1, sp, #12 -1001d836: f7f9 fed1 bl 100175dc -1001d83a: b004 add sp, #16 -1001d83c: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1001d840: 6faa ldr r2, [r5, #120] ; 0x78 -1001d842: 4629 mov r1, r5 -1001d844: f104 001c add.w r0, r4, #28 -1001d848: 2500 movs r5, #0 -1001d84a: 327c adds r2, #124 ; 0x7c -1001d84c: f7f9 fde0 bl 10017410 -1001d850: 60e5 str r5, [r4, #12] -1001d852: f7f9 fec5 bl 100175e0 -1001d856: f894 3091 ldrb.w r3, [r4, #145] ; 0x91 -1001d85a: 6120 str r0, [r4, #16] -1001d85c: 2b65 cmp r3, #101 ; 0x65 -1001d85e: 60a5 str r5, [r4, #8] -1001d860: 6165 str r5, [r4, #20] -1001d862: 61a5 str r5, [r4, #24] -1001d864: d1e5 bne.n 1001d832 -1001d866: f884 5091 strb.w r5, [r4, #145] ; 0x91 -1001d86a: e7e2 b.n 1001d832 - -1001d86c : -1001d86c: b570 push {r4, r5, r6, lr} -1001d86e: 6903 ldr r3, [r0, #16] -1001d870: 4604 mov r4, r0 -1001d872: 07db lsls r3, r3, #31 -1001d874: 460d mov r5, r1 -1001d876: d512 bpl.n 1001d89e -1001d878: f100 0698 add.w r6, r0, #152 ; 0x98 -1001d87c: 4630 mov r0, r6 -1001d87e: f7ff fec3 bl 1001d608 -1001d882: b160 cbz r0, 1001d89e -1001d884: 4630 mov r0, r6 -1001d886: 4629 mov r1, r5 -1001d888: 4622 mov r2, r4 -1001d88a: 2301 movs r3, #1 -1001d88c: f7ff feee bl 1001d66c -1001d890: 4620 mov r0, r4 -1001d892: f504 7190 add.w r1, r4, #288 ; 0x120 -1001d896: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 -1001d89a: f00b ffe1 bl 10029860 -1001d89e: 4620 mov r0, r4 -1001d8a0: 4629 mov r1, r5 -1001d8a2: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1001d8a6: f7ff bf2e b.w 1001d706 - -1001d8aa : -1001d8aa: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -1001d8ae: 6f8b ldr r3, [r1, #120] ; 0x78 -1001d8b0: 4605 mov r5, r0 -1001d8b2: 337c adds r3, #124 ; 0x7c -1001d8b4: f5b3 7f5f cmp.w r3, #892 ; 0x37c -1001d8b8: 460c mov r4, r1 -1001d8ba: d849 bhi.n 1001d950 -1001d8bc: f100 070c add.w r7, r0, #12 -1001d8c0: 4638 mov r0, r7 -1001d8c2: 4669 mov r1, sp -1001d8c4: f7f9 fe80 bl 100175c8 -1001d8c8: 692b ldr r3, [r5, #16] -1001d8ca: 065a lsls r2, r3, #25 -1001d8cc: d408 bmi.n 1001d8e0 -1001d8ce: e003 b.n 1001d8d8 -1001d8d0: 4630 mov r0, r6 -1001d8d2: a901 add r1, sp, #4 -1001d8d4: f7f9 fe82 bl 100175dc -1001d8d8: 692b ldr r3, [r5, #16] -1001d8da: 061b lsls r3, r3, #24 -1001d8dc: d428 bmi.n 1001d930 -1001d8de: e02c b.n 1001d93a -1001d8e0: f104 0804 add.w r8, r4, #4 -1001d8e4: f105 009c add.w r0, r5, #156 ; 0x9c -1001d8e8: 4641 mov r1, r8 -1001d8ea: 2206 movs r2, #6 -1001d8ec: f7f9 fd98 bl 10017420 -1001d8f0: 2800 cmp r0, #0 -1001d8f2: d0f1 beq.n 1001d8d8 -1001d8f4: f104 097c add.w r9, r4, #124 ; 0x7c -1001d8f8: f505 708a add.w r0, r5, #276 ; 0x114 -1001d8fc: 4649 mov r1, r9 -1001d8fe: 2208 movs r2, #8 -1001d900: f105 0634 add.w r6, r5, #52 ; 0x34 -1001d904: f7f9 fd84 bl 10017410 -1001d908: 4630 mov r0, r6 -1001d90a: a901 add r1, sp, #4 -1001d90c: f7f9 fe5c bl 100175c8 -1001d910: f105 002c add.w r0, r5, #44 ; 0x2c -1001d914: 4641 mov r1, r8 -1001d916: f7ff fdf9 bl 1001d50c <_rtw_find_network> -1001d91a: 2800 cmp r0, #0 -1001d91c: d0d8 beq.n 1001d8d0 -1001d91e: 3098 adds r0, #152 ; 0x98 -1001d920: 4649 mov r1, r9 -1001d922: 2208 movs r2, #8 -1001d924: f7f9 fd74 bl 10017410 -1001d928: 4630 mov r0, r6 -1001d92a: a901 add r1, sp, #4 -1001d92c: f7f9 fe56 bl 100175dc -1001d930: 4638 mov r0, r7 -1001d932: 4669 mov r1, sp -1001d934: f7f9 fe52 bl 100175dc -1001d938: e00a b.n 1001d950 -1001d93a: 7c23 ldrb r3, [r4, #16] -1001d93c: b91b cbnz r3, 1001d946 -1001d93e: 7323 strb r3, [r4, #12] -1001d940: 7363 strb r3, [r4, #13] -1001d942: 73a3 strb r3, [r4, #14] -1001d944: 73e3 strb r3, [r4, #15] -1001d946: 4628 mov r0, r5 -1001d948: 4621 mov r1, r4 -1001d94a: f7ff ff8f bl 1001d86c -1001d94e: e7ef b.n 1001d930 -1001d950: b003 add sp, #12 -1001d952: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - -1001d956 : -1001d956: 4770 bx lr - -1001d958 : -1001d958: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -1001d95c: 6903 ldr r3, [r0, #16] -1001d95e: 4604 mov r4, r0 -1001d960: f013 0f18 tst.w r3, #24 -1001d964: 460d mov r5, r1 -1001d966: f100 069c add.w r6, r0, #156 ; 0x9c -1001d96a: d127 bne.n 1001d9bc -1001d96c: 6923 ldr r3, [r4, #16] -1001d96e: f013 0f70 tst.w r3, #112 ; 0x70 -1001d972: d138 bne.n 1001d9e6 -1001d974: b125 cbz r5, 1001d980 -1001d976: f104 0034 add.w r0, r4, #52 ; 0x34 -1001d97a: a901 add r1, sp, #4 -1001d97c: f7f9 fe24 bl 100175c8 -1001d980: 4631 mov r1, r6 -1001d982: f104 002c add.w r0, r4, #44 ; 0x2c -1001d986: f7ff fdc1 bl 1001d50c <_rtw_find_network> -1001d98a: 4601 mov r1, r0 -1001d98c: b108 cbz r0, 1001d992 -1001d98e: 2200 movs r2, #0 -1001d990: 60c2 str r2, [r0, #12] -1001d992: 6922 ldr r2, [r4, #16] -1001d994: 0650 lsls r0, r2, #25 -1001d996: d43f bmi.n 1001da18 -1001d998: 0713 lsls r3, r2, #28 -1001d99a: d503 bpl.n 1001d9a4 -1001d99c: f104 000c add.w r0, r4, #12 -1001d9a0: f7ff fda1 bl 1001d4e6 <_rtw_free_network_nolock> -1001d9a4: b125 cbz r5, 1001d9b0 -1001d9a6: f104 0034 add.w r0, r4, #52 ; 0x34 -1001d9aa: a901 add r1, sp, #4 -1001d9ac: f7f9 fe16 bl 100175dc -1001d9b0: 2300 movs r3, #0 -1001d9b2: f884 349c strb.w r3, [r4, #1180] ; 0x49c -1001d9b6: b002 add sp, #8 -1001d9b8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1001d9bc: 4631 mov r1, r6 -1001d9be: f500 6046 add.w r0, r0, #3168 ; 0xc60 -1001d9c2: f00a fc67 bl 10028294 -1001d9c6: f604 4778 addw r7, r4, #3192 ; 0xc78 -1001d9ca: 4680 mov r8, r0 -1001d9cc: a901 add r1, sp, #4 -1001d9ce: 4638 mov r0, r7 -1001d9d0: f7f9 fdfa bl 100175c8 -1001d9d4: 4641 mov r1, r8 -1001d9d6: 4620 mov r0, r4 -1001d9d8: f00a fb79 bl 100280ce -1001d9dc: 4638 mov r0, r7 -1001d9de: a901 add r1, sp, #4 -1001d9e0: f7f9 fdfc bl 100175dc -1001d9e4: e7c2 b.n 1001d96c -1001d9e6: 4620 mov r0, r4 -1001d9e8: f00a fcbc bl 10028364 -1001d9ec: 4620 mov r0, r4 -1001d9ee: f00a fca7 bl 10028340 -1001d9f2: f604 4778 addw r7, r4, #3192 ; 0xc78 -1001d9f6: 4680 mov r8, r0 -1001d9f8: a901 add r1, sp, #4 -1001d9fa: 4638 mov r0, r7 -1001d9fc: f7f9 fde4 bl 100175c8 -1001da00: 4641 mov r1, r8 -1001da02: 4620 mov r0, r4 -1001da04: f00a fb63 bl 100280ce -1001da08: 4638 mov r0, r7 -1001da0a: a901 add r1, sp, #4 -1001da0c: f7f9 fde6 bl 100175dc -1001da10: 4620 mov r0, r4 -1001da12: f00a fc7d bl 10028310 -1001da16: e7ad b.n 1001d974 -1001da18: f8d4 3ca4 ldr.w r3, [r4, #3236] ; 0xca4 -1001da1c: 2b01 cmp r3, #1 -1001da1e: d1bb bne.n 1001d998 -1001da20: e7bc b.n 1001d99c - -1001da22 : -1001da22: 2200 movs r2, #0 -1001da24: 7542 strb r2, [r0, #21] -1001da26: 6902 ldr r2, [r0, #16] -1001da28: f042 0201 orr.w r2, r2, #1 -1001da2c: 6102 str r2, [r0, #16] -1001da2e: f014 bf54 b.w 100328da - -1001da32 : -1001da32: b510 push {r4, lr} -1001da34: 6903 ldr r3, [r0, #16] -1001da36: 4604 mov r4, r0 -1001da38: f423 73c0 bic.w r3, r3, #384 ; 0x180 -1001da3c: f023 0301 bic.w r3, r3, #1 -1001da40: 6103 str r3, [r0, #16] -1001da42: f014 ffd0 bl 100329e6 -1001da46: 4620 mov r0, r4 -1001da48: 2103 movs r1, #3 -1001da4a: 2201 movs r2, #1 -1001da4c: e8bd 4010 ldmia.w sp!, {r4, lr} -1001da50: f7ff ba4c b.w 1001ceec - -1001da54 : -1001da54: f014 bf43 b.w 100328de - -1001da58 : -1001da58: b510 push {r4, lr} -1001da5a: 6809 ldr r1, [r1, #0] -1001da5c: 4604 mov r4, r0 -1001da5e: f005 fc65 bl 1002332c -1001da62: 4620 mov r0, r4 -1001da64: f018 ff4f bl 10036906 -1001da68: f641 035c movw r3, #6236 ; 0x185c -1001da6c: 58e0 ldr r0, [r4, r3] -1001da6e: e8bd 4010 ldmia.w sp!, {r4, lr} -1001da72: f018 bf48 b.w 10036906 - -1001da76 : -1001da76: 6903 ldr r3, [r0, #16] -1001da78: 06db lsls r3, r3, #27 -1001da7a: d412 bmi.n 1001daa2 -1001da7c: f8d0 3814 ldr.w r3, [r0, #2068] ; 0x814 -1001da80: 2b01 cmp r3, #1 -1001da82: d00a beq.n 1001da9a -1001da84: f8d0 37f4 ldr.w r3, [r0, #2036] ; 0x7f4 -1001da88: 2b01 cmp r3, #1 -1001da8a: d008 beq.n 1001da9e -1001da8c: f8d0 37d4 ldr.w r3, [r0, #2004] ; 0x7d4 -1001da90: 2b01 cmp r3, #1 -1001da92: bf14 ite ne -1001da94: 2001 movne r0, #1 -1001da96: 2002 moveq r0, #2 -1001da98: 4770 bx lr -1001da9a: 2004 movs r0, #4 -1001da9c: 4770 bx lr -1001da9e: 2003 movs r0, #3 -1001daa0: 4770 bx lr -1001daa2: f890 3d00 ldrb.w r3, [r0, #3328] ; 0xd00 -1001daa6: b13b cbz r3, 1001dab8 -1001daa8: eb00 0283 add.w r2, r0, r3, lsl #2 -1001daac: f8d2 2ce4 ldr.w r2, [r2, #3300] ; 0xce4 -1001dab0: b912 cbnz r2, 1001dab8 -1001dab2: 3b01 subs r3, #1 -1001dab4: b2db uxtb r3, r3 -1001dab6: e7f6 b.n 1001daa6 -1001dab8: 3301 adds r3, #1 -1001daba: b2d8 uxtb r0, r3 -1001dabc: 4770 bx lr - -1001dabe : -1001dabe: b573 push {r0, r1, r4, r5, r6, lr} -1001dac0: 4605 mov r5, r0 -1001dac2: 460e mov r6, r1 -1001dac4: b1a9 cbz r1, 1001daf2 -1001dac6: f7ff ffd6 bl 1001da76 -1001daca: ac02 add r4, sp, #8 -1001dacc: f804 0d02 strb.w r0, [r4, #-2]! -1001dad0: 2144 movs r1, #68 ; 0x44 -1001dad2: 4628 mov r0, r5 -1001dad4: 4622 mov r2, r4 -1001dad6: f014 fcfc bl 100324d2 -1001dada: f8d6 3100 ldr.w r3, [r6, #256] ; 0x100 -1001dade: 4628 mov r0, r5 -1001dae0: 021b lsls r3, r3, #8 -1001dae2: f043 0301 orr.w r3, r3, #1 -1001dae6: 2145 movs r1, #69 ; 0x45 -1001dae8: 4622 mov r2, r4 -1001daea: f8ad 3006 strh.w r3, [sp, #6] -1001daee: f014 fcf0 bl 100324d2 -1001daf2: b002 add sp, #8 -1001daf4: bd70 pop {r4, r5, r6, pc} - -1001daf6 : -1001daf6: b538 push {r3, r4, r5, lr} -1001daf8: 6903 ldr r3, [r0, #16] -1001dafa: 4604 mov r4, r0 -1001dafc: 06db lsls r3, r3, #27 -1001dafe: d400 bmi.n 1001db02 -1001db00: bd38 pop {r3, r4, r5, pc} -1001db02: f500 6046 add.w r0, r0, #3168 ; 0xc60 -1001db06: f00a fbc5 bl 10028294 -1001db0a: 4605 mov r5, r0 -1001db0c: b148 cbz r0, 1001db22 -1001db0e: 4620 mov r0, r4 -1001db10: 4629 mov r1, r5 -1001db12: f7fe fa67 bl 1001bfe4 -1001db16: 4620 mov r0, r4 -1001db18: 4629 mov r1, r5 -1001db1a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1001db1e: f7ff bfce b.w 1001dabe -1001db22: bd38 pop {r3, r4, r5, pc} - -1001db24 : -1001db24: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -1001db28: 4604 mov r4, r0 -1001db2a: f500 6046 add.w r0, r0, #3168 ; 0xc60 -1001db2e: 460d mov r5, r1 -1001db30: f00a fbb0 bl 10028294 -1001db34: b110 cbz r0, 1001db3c -1001db36: f8d0 3100 ldr.w r3, [r0, #256] ; 0x100 -1001db3a: e000 b.n 1001db3e -1001db3c: 68ab ldr r3, [r5, #8] -1001db3e: 021b lsls r3, r3, #8 -1001db40: ad02 add r5, sp, #8 -1001db42: f825 3d04 strh.w r3, [r5, #-4]! -1001db46: 4620 mov r0, r4 -1001db48: 2145 movs r1, #69 ; 0x45 -1001db4a: 462a mov r2, r5 -1001db4c: f014 fcc1 bl 100324d2 -1001db50: 6923 ldr r3, [r4, #16] -1001db52: f013 0810 ands.w r8, r3, #16 -1001db56: d135 bne.n 1001dbc4 -1001db58: 4620 mov r0, r4 -1001db5a: f104 060c add.w r6, r4, #12 -1001db5e: f004 fb4b bl 100221f8 -1001db62: 4630 mov r0, r6 -1001db64: 4629 mov r1, r5 -1001db66: f7f9 fd2f bl 100175c8 -1001db6a: 6923 ldr r3, [r4, #16] -1001db6c: 071b lsls r3, r3, #28 -1001db6e: d404 bmi.n 1001db7a -1001db70: 4630 mov r0, r6 -1001db72: 4629 mov r1, r5 -1001db74: f7f9 fd32 bl 100175dc -1001db78: e024 b.n 1001dbc4 -1001db7a: 4620 mov r0, r4 -1001db7c: f008 ff63 bl 10026a46 -1001db80: 4620 mov r0, r4 -1001db82: f008 ff8c bl 10026a9e -1001db86: 2101 movs r1, #1 -1001db88: 4620 mov r0, r4 -1001db8a: f7ff fee5 bl 1001d958 -1001db8e: f104 0734 add.w r7, r4, #52 ; 0x34 -1001db92: 4620 mov r0, r4 -1001db94: f7ff ff4d bl 1001da32 -1001db98: 4638 mov r0, r7 -1001db9a: 4669 mov r1, sp -1001db9c: f7f9 fd14 bl 100175c8 -1001dba0: f104 019c add.w r1, r4, #156 ; 0x9c -1001dba4: f104 002c add.w r0, r4, #44 ; 0x2c -1001dba8: f7ff fcb0 bl 1001d50c <_rtw_find_network> -1001dbac: 4601 mov r1, r0 -1001dbae: b120 cbz r0, 1001dbba -1001dbb0: f8c1 800c str.w r8, [r1, #12] -1001dbb4: 4630 mov r0, r6 -1001dbb6: f7ff fc96 bl 1001d4e6 <_rtw_free_network_nolock> -1001dbba: 4638 mov r0, r7 -1001dbbc: 4669 mov r1, sp -1001dbbe: f7f9 fd0d bl 100175dc -1001dbc2: e7d5 b.n 1001db70 -1001dbc4: b002 add sp, #8 -1001dbc6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1001dbca <_rtw_join_timeout_handler>: -1001dbca: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} -1001dbce: f241 73ac movw r3, #6060 ; 0x17ac -1001dbd2: 58c3 ldr r3, [r0, r3] -1001dbd4: 4604 mov r4, r0 -1001dbd6: 2b00 cmp r3, #0 -1001dbd8: d139 bne.n 1001dc4e <_rtw_join_timeout_handler+0x84> -1001dbda: f241 73b0 movw r3, #6064 ; 0x17b0 -1001dbde: 58c3 ldr r3, [r0, r3] -1001dbe0: 2b00 cmp r3, #0 -1001dbe2: d134 bne.n 1001dc4e <_rtw_join_timeout_handler+0x84> -1001dbe4: f100 060c add.w r6, r0, #12 -1001dbe8: a901 add r1, sp, #4 -1001dbea: 4630 mov r0, r6 -1001dbec: f7f9 fcec bl 100175c8 -1001dbf0: f104 0734 add.w r7, r4, #52 ; 0x34 -1001dbf4: 4620 mov r0, r4 -1001dbf6: f7ff ff1c bl 1001da32 -1001dbfa: f104 0828 add.w r8, r4, #40 ; 0x28 -1001dbfe: 4638 mov r0, r7 -1001dc00: a903 add r1, sp, #12 -1001dc02: f7f9 fce1 bl 100175c8 -1001dc06: 4640 mov r0, r8 -1001dc08: a902 add r1, sp, #8 -1001dc0a: f7f9 fcdd bl 100175c8 -1001dc0e: 6ae5 ldr r5, [r4, #44] ; 0x2c -1001dc10: f104 092c add.w r9, r4, #44 ; 0x2c -1001dc14: 454d cmp r5, r9 -1001dc16: d00e beq.n 1001dc36 <_rtw_join_timeout_handler+0x6c> -1001dc18: 4628 mov r0, r5 -1001dc1a: f8d5 a000 ldr.w sl, [r5] -1001dc1e: f7f9 fc23 bl 10017468 -1001dc22: 4628 mov r0, r5 -1001dc24: f104 0120 add.w r1, r4, #32 -1001dc28: f7f9 fc18 bl 1001745c -1001dc2c: 8fa3 ldrh r3, [r4, #60] ; 0x3c -1001dc2e: 4655 mov r5, sl -1001dc30: 3b01 subs r3, #1 -1001dc32: 87a3 strh r3, [r4, #60] ; 0x3c -1001dc34: e7ee b.n 1001dc14 <_rtw_join_timeout_handler+0x4a> -1001dc36: 4640 mov r0, r8 -1001dc38: a902 add r1, sp, #8 -1001dc3a: f7f9 fccf bl 100175dc -1001dc3e: 4638 mov r0, r7 -1001dc40: a903 add r1, sp, #12 -1001dc42: f7f9 fccb bl 100175dc -1001dc46: 4630 mov r0, r6 -1001dc48: a901 add r1, sp, #4 -1001dc4a: f7f9 fcc7 bl 100175dc -1001dc4e: b004 add sp, #16 -1001dc50: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - -1001dc54 : -1001dc54: b510 push {r4, lr} -1001dc56: 4604 mov r4, r0 -1001dc58: f7ff ffb7 bl 1001dbca <_rtw_join_timeout_handler> -1001dc5c: f894 38f9 ldrb.w r3, [r4, #2297] ; 0x8f9 -1001dc60: b1fb cbz r3, 1001dca2 -1001dc62: f894 286e ldrb.w r2, [r4, #2158] ; 0x86e -1001dc66: f894 386d ldrb.w r3, [r4, #2157] ; 0x86d -1001dc6a: 429a cmp r2, r3 -1001dc6c: d213 bcs.n 1001dc96 -1001dc6e: 4b0d ldr r3, [pc, #52] ; (1001dca4 ) -1001dc70: 781a ldrb r2, [r3, #0] -1001dc72: b9b2 cbnz r2, 1001dca2 -1001dc74: 2201 movs r2, #1 -1001dc76: 701a strb r2, [r3, #0] -1001dc78: f8b4 3870 ldrh.w r3, [r4, #2160] ; 0x870 -1001dc7c: f44f 717a mov.w r1, #1000 ; 0x3e8 -1001dc80: 4359 muls r1, r3 -1001dc82: f504 6006 add.w r0, r4, #2144 ; 0x860 -1001dc86: f019 f8c7 bl 10036e18 -1001dc8a: f894 386e ldrb.w r3, [r4, #2158] ; 0x86e -1001dc8e: 3301 adds r3, #1 -1001dc90: f884 386e strb.w r3, [r4, #2158] ; 0x86e -1001dc94: bd10 pop {r4, pc} -1001dc96: 4620 mov r0, r4 -1001dc98: 4903 ldr r1, [pc, #12] ; (1001dca8 ) -1001dc9a: e8bd 4010 ldmia.w sp!, {r4, lr} -1001dc9e: f015 bf4c b.w 10033b3a -1001dca2: bd10 pop {r4, pc} -1001dca4: 1004baf0 .word 0x1004baf0 -1001dca8: 1003fc3d .word 0x1003fc3d - -1001dcac : -1001dcac: b537 push {r0, r1, r2, r4, r5, lr} -1001dcae: f100 050c add.w r5, r0, #12 -1001dcb2: 4604 mov r4, r0 -1001dcb4: a901 add r1, sp, #4 -1001dcb6: 4628 mov r0, r5 -1001dcb8: f7f9 fc86 bl 100175c8 -1001dcbc: 6923 ldr r3, [r4, #16] -1001dcbe: 4628 mov r0, r5 -1001dcc0: f423 6300 bic.w r3, r3, #2048 ; 0x800 -1001dcc4: 6123 str r3, [r4, #16] -1001dcc6: 2300 movs r3, #0 -1001dcc8: 7523 strb r3, [r4, #20] -1001dcca: a901 add r1, sp, #4 -1001dccc: f7f9 fc86 bl 100175dc -1001dcd0: 4620 mov r0, r4 -1001dcd2: 2101 movs r1, #1 -1001dcd4: f014 fe03 bl 100328de -1001dcd8: b003 add sp, #12 -1001dcda: bd30 pop {r4, r5, pc} - -1001dcdc <_rtw_scan_timeout_handler>: -1001dcdc: f7ff bfe6 b.w 1001dcac - -1001dce0 : -1001dce0: b510 push {r4, lr} -1001dce2: f641 035c movw r3, #6236 ; 0x185c -1001dce6: 58c2 ldr r2, [r0, r3] -1001dce8: f241 73c5 movw r3, #6085 ; 0x17c5 -1001dcec: 5cc3 ldrb r3, [r0, r3] -1001dcee: 4604 mov r4, r0 -1001dcf0: b30b cbz r3, 1001dd36 -1001dcf2: f241 73ac movw r3, #6060 ; 0x17ac -1001dcf6: 58c3 ldr r3, [r0, r3] -1001dcf8: 2b01 cmp r3, #1 -1001dcfa: d01c beq.n 1001dd36 -1001dcfc: f241 73b0 movw r3, #6064 ; 0x17b0 -1001dd00: 58c3 ldr r3, [r0, r3] -1001dd02: 2b01 cmp r3, #1 -1001dd04: d017 beq.n 1001dd36 -1001dd06: f641 0358 movw r3, #6232 ; 0x1858 -1001dd0a: b132 cbz r2, 1001dd1a -1001dd0c: 5cc1 ldrb r1, [r0, r3] -1001dd0e: 2901 cmp r1, #1 -1001dd10: d106 bne.n 1001dd20 -1001dd12: 5cd3 ldrb r3, [r2, r3] -1001dd14: 2b01 cmp r3, #1 -1001dd16: d103 bne.n 1001dd20 -1001dd18: bd10 pop {r4, pc} -1001dd1a: 5cc3 ldrb r3, [r0, r3] -1001dd1c: 2b01 cmp r3, #1 -1001dd1e: d00a beq.n 1001dd36 -1001dd20: 4620 mov r0, r4 -1001dd22: f7fe ffaf bl 1001cc84 -1001dd26: 6923 ldr r3, [r4, #16] -1001dd28: 06db lsls r3, r3, #27 -1001dd2a: d504 bpl.n 1001dd36 -1001dd2c: 4620 mov r0, r4 -1001dd2e: e8bd 4010 ldmia.w sp!, {r4, lr} -1001dd32: f7fd bffd b.w 1001bd30 -1001dd36: bd10 pop {r4, pc} - -1001dd38 <_dynamic_check_timer_handlder>: -1001dd38: b538 push {r3, r4, r5, lr} -1001dd3a: 4604 mov r4, r0 -1001dd3c: f018 fc1a bl 10036574 -1001dd40: 4605 mov r5, r0 -1001dd42: b148 cbz r0, 1001dd58 <_dynamic_check_timer_handlder+0x20> -1001dd44: 4b0d ldr r3, [pc, #52] ; (1001dd7c <_dynamic_check_timer_handlder+0x44>) -1001dd46: 681b ldr r3, [r3, #0] -1001dd48: b133 cbz r3, 1001dd58 <_dynamic_check_timer_handlder+0x20> -1001dd4a: 480d ldr r0, [pc, #52] ; (1001dd80 <_dynamic_check_timer_handlder+0x48>) -1001dd4c: f7fc ff08 bl 1001ab60 -1001dd50: 480c ldr r0, [pc, #48] ; (1001dd84 <_dynamic_check_timer_handlder+0x4c>) -1001dd52: 4629 mov r1, r5 -1001dd54: f7fc ff04 bl 1001ab60 -1001dd58: f641 035c movw r3, #6236 ; 0x185c -1001dd5c: 58e0 ldr r0, [r4, r3] -1001dd5e: b108 cbz r0, 1001dd64 <_dynamic_check_timer_handlder+0x2c> -1001dd60: f7ff ffbe bl 1001dce0 -1001dd64: 4620 mov r0, r4 -1001dd66: f7ff ffbb bl 1001dce0 -1001dd6a: f504 6092 add.w r0, r4, #1168 ; 0x490 -1001dd6e: f44f 61fa mov.w r1, #2000 ; 0x7d0 -1001dd72: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1001dd76: f019 b84f b.w 10036e18 -1001dd7a: bf00 nop -1001dd7c: 10044ec0 .word 0x10044ec0 -1001dd80: 10042939 .word 0x10042939 -1001dd84: 10041361 .word 0x10041361 - -1001dd88 : -1001dd88: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -1001dd8c: f100 0828 add.w r8, r0, #40 ; 0x28 -1001dd90: 4604 mov r4, r0 -1001dd92: a901 add r1, sp, #4 -1001dd94: 4640 mov r0, r8 -1001dd96: f7f9 fc17 bl 100175c8 -1001dd9a: 6a23 ldr r3, [r4, #32] -1001dd9c: 68e7 ldr r7, [r4, #12] -1001dd9e: f104 0920 add.w r9, r4, #32 -1001dda2: 6123 str r3, [r4, #16] -1001dda4: 2600 movs r6, #0 -1001dda6: 4648 mov r0, r9 -1001dda8: 6921 ldr r1, [r4, #16] -1001ddaa: f7f9 fbea bl 10017582 -1001ddae: 4602 mov r2, r0 -1001ddb0: 2800 cmp r0, #0 -1001ddb2: d130 bne.n 1001de16 -1001ddb4: 6925 ldr r5, [r4, #16] -1001ddb6: 2d00 cmp r5, #0 -1001ddb8: d048 beq.n 1001de4c -1001ddba: 682b ldr r3, [r5, #0] -1001ddbc: f504 60a3 add.w r0, r4, #1304 ; 0x518 -1001ddc0: 6123 str r3, [r4, #16] -1001ddc2: 6ea9 ldr r1, [r5, #104] ; 0x68 -1001ddc4: f000 fc24 bl 1001e610 -1001ddc8: 2800 cmp r0, #0 -1001ddca: d0ec beq.n 1001dda6 -1001ddcc: f894 342c ldrb.w r3, [r4, #1068] ; 0x42c -1001ddd0: 2b01 cmp r3, #1 -1001ddd2: d002 beq.n 1001ddda -1001ddd4: 6c23 ldr r3, [r4, #64] ; 0x40 -1001ddd6: b953 cbnz r3, 1001ddee -1001ddd8: e014 b.n 1001de04 -1001ddda: f105 0020 add.w r0, r5, #32 -1001ddde: f104 0168 add.w r1, r4, #104 ; 0x68 -1001dde2: 2206 movs r2, #6 -1001dde4: f7f9 fb1c bl 10017420 -1001dde8: 2800 cmp r0, #0 -1001ddea: d1f3 bne.n 1001ddd4 -1001ddec: e7db b.n 1001dda6 -1001ddee: 6aaa ldr r2, [r5, #40] ; 0x28 -1001ddf0: 429a cmp r2, r3 -1001ddf2: d1d8 bne.n 1001dda6 -1001ddf4: f105 002c add.w r0, r5, #44 ; 0x2c -1001ddf8: f104 0144 add.w r1, r4, #68 ; 0x44 -1001ddfc: f7f9 fb10 bl 10017420 -1001de00: 2800 cmp r0, #0 -1001de02: d0d0 beq.n 1001dda6 -1001de04: b12e cbz r6, 1001de12 -1001de06: 6d72 ldr r2, [r6, #84] ; 0x54 -1001de08: 6d6b ldr r3, [r5, #84] ; 0x54 -1001de0a: 429a cmp r2, r3 -1001de0c: bfb8 it lt -1001de0e: 462e movlt r6, r5 -1001de10: e7c9 b.n 1001dda6 -1001de12: 462e mov r6, r5 -1001de14: e7c7 b.n 1001dda6 -1001de16: b146 cbz r6, 1001de2a -1001de18: 6863 ldr r3, [r4, #4] -1001de1a: 07db lsls r3, r3, #31 -1001de1c: d407 bmi.n 1001de2e -1001de1e: 4638 mov r0, r7 -1001de20: 4631 mov r1, r6 -1001de22: f7fe fcd9 bl 1001c7d8 -1001de26: 4605 mov r5, r0 -1001de28: e010 b.n 1001de4c -1001de2a: 4635 mov r5, r6 -1001de2c: e00e b.n 1001de4c -1001de2e: 4638 mov r0, r7 -1001de30: f7fe fe38 bl 1001caa4 -1001de34: 4638 mov r0, r7 -1001de36: f7ff fdfc bl 1001da32 -1001de3a: 4638 mov r0, r7 -1001de3c: 2100 movs r1, #0 -1001de3e: f7ff fd8b bl 1001d958 -1001de42: 6863 ldr r3, [r4, #4] -1001de44: f043 0380 orr.w r3, r3, #128 ; 0x80 -1001de48: 6063 str r3, [r4, #4] -1001de4a: e7e8 b.n 1001de1e -1001de4c: 4640 mov r0, r8 -1001de4e: a901 add r1, sp, #4 -1001de50: f7f9 fbc4 bl 100175dc -1001de54: 4628 mov r0, r5 -1001de56: b003 add sp, #12 -1001de58: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - -1001de5c : -1001de5c: b573 push {r0, r1, r4, r5, r6, lr} -1001de5e: f100 050c add.w r5, r0, #12 -1001de62: 4604 mov r4, r0 -1001de64: a901 add r1, sp, #4 -1001de66: 4628 mov r0, r5 -1001de68: f7f9 fbae bl 100175c8 -1001de6c: f8d4 04a4 ldr.w r0, [r4, #1188] ; 0x4a4 -1001de70: b140 cbz r0, 1001de84 -1001de72: 2600 movs r6, #0 -1001de74: f8d4 14a8 ldr.w r1, [r4, #1192] ; 0x4a8 -1001de78: f8c4 64a8 str.w r6, [r4, #1192] ; 0x4a8 -1001de7c: f7f9 fac5 bl 1001740a -1001de80: f8c4 64a4 str.w r6, [r4, #1188] ; 0x4a4 -1001de84: 6923 ldr r3, [r4, #16] -1001de86: 051b lsls r3, r3, #20 -1001de88: d434 bmi.n 1001def4 -1001de8a: f604 401c addw r0, r4, #3100 ; 0xc1c -1001de8e: f8d4 1c28 ldr.w r1, [r4, #3112] ; 0xc28 -1001de92: f018 ffc1 bl 10036e18 -1001de96: 7d66 ldrb r6, [r4, #21] -1001de98: 2e01 cmp r6, #1 -1001de9a: d112 bne.n 1001dec2 -1001de9c: 6923 ldr r3, [r4, #16] -1001de9e: f013 0220 ands.w r2, r3, #32 -1001dea2: d10e bne.n 1001dec2 -1001dea4: f043 0380 orr.w r3, r3, #128 ; 0x80 -1001dea8: 6123 str r3, [r4, #16] -1001deaa: 7562 strb r2, [r4, #21] -1001deac: 4628 mov r0, r5 -1001deae: f7ff ff6b bl 1001dd88 -1001deb2: 2801 cmp r0, #1 -1001deb4: d129 bne.n 1001df0a -1001deb6: f204 402c addw r0, r4, #1068 ; 0x42c -1001deba: f641 1164 movw r1, #6500 ; 0x1964 -1001debe: f018 ffab bl 10036e18 -1001dec2: 6863 ldr r3, [r4, #4] -1001dec4: 2b05 cmp r3, #5 -1001dec6: d103 bne.n 1001ded0 -1001dec8: f8b4 361a ldrh.w r3, [r4, #1562] ; 0x61a -1001decc: 2b02 cmp r3, #2 -1001dece: d003 beq.n 1001ded8 -1001ded0: 4620 mov r0, r4 -1001ded2: 2100 movs r1, #0 -1001ded4: f014 fd03 bl 100328de -1001ded8: a901 add r1, sp, #4 -1001deda: 4628 mov r0, r5 -1001dedc: f7f9 fb7e bl 100175dc -1001dee0: 4620 mov r0, r4 -1001dee2: f018 fd10 bl 10036906 -1001dee6: f641 035c movw r3, #6236 ; 0x185c -1001deea: 58e0 ldr r0, [r4, r3] -1001deec: f018 fd0b bl 10036906 -1001def0: b002 add sp, #8 -1001def2: bd70 pop {r4, r5, r6, pc} -1001def4: f204 403c addw r0, r4, #1084 ; 0x43c -1001def8: f018 ff90 bl 10036e1c -1001defc: 6923 ldr r3, [r4, #16] -1001defe: f423 6300 bic.w r3, r3, #2048 ; 0x800 -1001df02: 6123 str r3, [r4, #16] -1001df04: 2300 movs r3, #0 -1001df06: 7523 strb r3, [r4, #20] -1001df08: e7bf b.n 1001de8a -1001df0a: 2802 cmp r0, #2 -1001df0c: d107 bne.n 1001df1e -1001df0e: 6923 ldr r3, [r4, #16] -1001df10: 4620 mov r0, r4 -1001df12: f023 0380 bic.w r3, r3, #128 ; 0x80 -1001df16: 6123 str r3, [r4, #16] -1001df18: f7ff fd83 bl 1001da22 -1001df1c: e7d1 b.n 1001dec2 -1001df1e: 4620 mov r0, r4 -1001df20: 4915 ldr r1, [pc, #84] ; (1001df78 ) -1001df22: f015 fe0a bl 10033b3a -1001df26: 4620 mov r0, r4 -1001df28: f014 fd5d bl 100329e6 -1001df2c: f894 38f9 ldrb.w r3, [r4, #2297] ; 0x8f9 -1001df30: b1e3 cbz r3, 1001df6c -1001df32: f894 286e ldrb.w r2, [r4, #2158] ; 0x86e -1001df36: f894 386d ldrb.w r3, [r4, #2157] ; 0x86d -1001df3a: 429a cmp r2, r3 -1001df3c: d212 bcs.n 1001df64 -1001df3e: 4b0f ldr r3, [pc, #60] ; (1001df7c ) -1001df40: 781a ldrb r2, [r3, #0] -1001df42: b99a cbnz r2, 1001df6c -1001df44: 701e strb r6, [r3, #0] -1001df46: f8b4 3870 ldrh.w r3, [r4, #2160] ; 0x870 -1001df4a: f44f 717a mov.w r1, #1000 ; 0x3e8 -1001df4e: 4359 muls r1, r3 -1001df50: f504 6006 add.w r0, r4, #2144 ; 0x860 -1001df54: f018 ff60 bl 10036e18 -1001df58: f894 386e ldrb.w r3, [r4, #2158] ; 0x86e -1001df5c: 3301 adds r3, #1 -1001df5e: f884 386e strb.w r3, [r4, #2158] ; 0x86e -1001df62: e003 b.n 1001df6c -1001df64: 4620 mov r0, r4 -1001df66: 4906 ldr r1, [pc, #24] ; (1001df80 ) -1001df68: f015 fde7 bl 10033b3a -1001df6c: 6923 ldr r3, [r4, #16] -1001df6e: f023 0380 bic.w r3, r3, #128 ; 0x80 -1001df72: 6123 str r3, [r4, #16] -1001df74: e7a5 b.n 1001dec2 -1001df76: bf00 nop -1001df78: 1003fc52 .word 0x1003fc52 -1001df7c: 1004baf0 .word 0x1004baf0 -1001df80: 1003fc3d .word 0x1003fc3d - -1001df84 : -1001df84: b570 push {r4, r5, r6, lr} -1001df86: 4605 mov r5, r0 -1001df88: 2020 movs r0, #32 -1001df8a: 460e mov r6, r1 -1001df8c: f7f9 fc10 bl 100177b0 -1001df90: 4604 mov r4, r0 -1001df92: b1e8 cbz r0, 1001dfd0 -1001df94: 2004 movs r0, #4 -1001df96: f7f9 fc0b bl 100177b0 -1001df9a: b920 cbnz r0, 1001dfa6 -1001df9c: 4620 mov r0, r4 -1001df9e: 2120 movs r1, #32 -1001dfa0: f7f9 fa33 bl 1001740a -1001dfa4: e014 b.n 1001dfd0 -1001dfa6: 6832 ldr r2, [r6, #0] -1001dfa8: 2304 movs r3, #4 -1001dfaa: 7002 strb r2, [r0, #0] -1001dfac: 60e3 str r3, [r4, #12] -1001dfae: 2213 movs r2, #19 -1001dfb0: 2300 movs r3, #0 -1001dfb2: 60a0 str r0, [r4, #8] -1001dfb4: 80a2 strh r2, [r4, #4] -1001dfb6: f104 0018 add.w r0, r4, #24 -1001dfba: 6123 str r3, [r4, #16] -1001dfbc: 6163 str r3, [r4, #20] -1001dfbe: f7f9 fa3f bl 10017440 -1001dfc2: f605 1008 addw r0, r5, #2312 ; 0x908 -1001dfc6: 4621 mov r1, r4 -1001dfc8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1001dfcc: f7fe badf b.w 1001c58e -1001dfd0: 2000 movs r0, #0 -1001dfd2: bd70 pop {r4, r5, r6, pc} - -1001dfd4 : -1001dfd4: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -1001dfd8: 4680 mov r8, r0 -1001dfda: 2020 movs r0, #32 -1001dfdc: 460e mov r6, r1 -1001dfde: 4617 mov r7, r2 -1001dfe0: 4699 mov r9, r3 -1001dfe2: f7f9 fbe5 bl 100177b0 -1001dfe6: 4605 mov r5, r0 -1001dfe8: 2800 cmp r0, #0 -1001dfea: d051 beq.n 1001e090 -1001dfec: 2014 movs r0, #20 -1001dfee: f7f9 fbdf bl 100177b0 -1001dff2: 4604 mov r4, r0 -1001dff4: b920 cbnz r0, 1001e000 -1001dff6: 4628 mov r0, r5 -1001dff8: 2120 movs r1, #32 -1001dffa: f7f9 fa06 bl 1001740a -1001dffe: e047 b.n 1001e090 -1001e000: 2214 movs r2, #20 -1001e002: 2100 movs r1, #0 -1001e004: f7f9 fa14 bl 10017430 -1001e008: 6833 ldr r3, [r6, #0] -1001e00a: 2201 movs r2, #1 -1001e00c: 2b02 cmp r3, #2 -1001e00e: bf0c ite eq -1001e010: 6df3 ldreq r3, [r6, #92] ; 0x5c -1001e012: 6873 ldrne r3, [r6, #4] -1001e014: 7067 strb r7, [r4, #1] -1001e016: 7023 strb r3, [r4, #0] -1001e018: b2fb uxtb r3, r7 -1001e01a: fa02 f303 lsl.w r3, r2, r3 -1001e01e: f884 9003 strb.w r9, [r4, #3] -1001e022: f898 249c ldrb.w r2, [r8, #1180] ; 0x49c -1001e026: 4313 orrs r3, r2 -1001e028: f888 349c strb.w r3, [r8, #1180] ; 0x49c -1001e02c: 7823 ldrb r3, [r4, #0] -1001e02e: 3b01 subs r3, #1 -1001e030: 2b04 cmp r3, #4 -1001e032: d82d bhi.n 1001e090 -1001e034: e8df f003 tbb [pc, r3] -1001e038: 112c1103 .word 0x112c1103 -1001e03c: 09 .byte 0x09 -1001e03d: 00 .byte 0x00 -1001e03e: eb06 1107 add.w r1, r6, r7, lsl #4 -1001e042: 1d20 adds r0, r4, #4 -1001e044: 310c adds r1, #12 -1001e046: 2205 movs r2, #5 -1001e048: e004 b.n 1001e054 -1001e04a: eb06 1107 add.w r1, r6, r7, lsl #4 -1001e04e: 1d20 adds r0, r4, #4 -1001e050: 310c adds r1, #12 -1001e052: 220d movs r2, #13 -1001e054: f7f9 f9dc bl 10017410 -1001e058: e008 b.n 1001e06c -1001e05a: eb06 1107 add.w r1, r6, r7, lsl #4 -1001e05e: 1d20 adds r0, r4, #4 -1001e060: 3164 adds r1, #100 ; 0x64 -1001e062: 2210 movs r2, #16 -1001e064: f7f9 f9d4 bl 10017410 -1001e068: 2301 movs r3, #1 -1001e06a: 70a3 strb r3, [r4, #2] -1001e06c: 2314 movs r3, #20 -1001e06e: 80ab strh r3, [r5, #4] -1001e070: 60eb str r3, [r5, #12] -1001e072: 2300 movs r3, #0 -1001e074: f105 0018 add.w r0, r5, #24 -1001e078: 60ac str r4, [r5, #8] -1001e07a: 612b str r3, [r5, #16] -1001e07c: 616b str r3, [r5, #20] -1001e07e: f7f9 f9df bl 10017440 -1001e082: f608 1008 addw r0, r8, #2312 ; 0x908 -1001e086: 4629 mov r1, r5 -1001e088: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -1001e08c: f7fe ba7f b.w 1001c58e -1001e090: 2000 movs r0, #0 -1001e092: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - -1001e096 : -1001e096: b5f0 push {r4, r5, r6, r7, lr} -1001e098: 9d05 ldr r5, [sp, #20] -1001e09a: 240c movs r4, #12 -1001e09c: 2000 movs r0, #0 -1001e09e: 429c cmp r4, r3 -1001e0a0: d22b bcs.n 1001e0fa -1001e0a2: 5d08 ldrb r0, [r1, r4] -1001e0a4: 28dd cmp r0, #221 ; 0xdd -1001e0a6: eb01 0004 add.w r0, r1, r4 -1001e0aa: d121 bne.n 1001e0f0 -1001e0ac: 7886 ldrb r6, [r0, #2] -1001e0ae: b9fe cbnz r6, 1001e0f0 -1001e0b0: 78c6 ldrb r6, [r0, #3] -1001e0b2: 2e50 cmp r6, #80 ; 0x50 -1001e0b4: d11c bne.n 1001e0f0 -1001e0b6: 7906 ldrb r6, [r0, #4] -1001e0b8: 2ef2 cmp r6, #242 ; 0xf2 -1001e0ba: d119 bne.n 1001e0f0 -1001e0bc: 1d66 adds r6, r4, #5 -1001e0be: 5d8f ldrb r7, [r1, r6] -1001e0c0: 2f02 cmp r7, #2 -1001e0c2: d115 bne.n 1001e0f0 -1001e0c4: 429e cmp r6, r3 -1001e0c6: d213 bcs.n 1001e0f0 -1001e0c8: 4623 mov r3, r4 -1001e0ca: f103 0709 add.w r7, r3, #9 -1001e0ce: 1aee subs r6, r5, r3 -1001e0d0: 42bc cmp r4, r7 -1001e0d2: eb06 0004 add.w r0, r6, r4 -1001e0d6: d204 bcs.n 1001e0e2 -1001e0d8: 5d08 ldrb r0, [r1, r4] -1001e0da: 4416 add r6, r2 -1001e0dc: 5530 strb r0, [r6, r4] -1001e0de: 3401 adds r4, #1 -1001e0e0: e7f3 b.n 1001e0ca -1001e0e2: 4415 add r5, r2 -1001e0e4: 2307 movs r3, #7 -1001e0e6: 706b strb r3, [r5, #1] -1001e0e8: 2300 movs r3, #0 -1001e0ea: 71ab strb r3, [r5, #6] -1001e0ec: 722b strb r3, [r5, #8] -1001e0ee: bdf0 pop {r4, r5, r6, r7, pc} -1001e0f0: 7840 ldrb r0, [r0, #1] -1001e0f2: 3002 adds r0, #2 -1001e0f4: 4404 add r4, r0 -1001e0f6: 4628 mov r0, r5 -1001e0f8: e7d1 b.n 1001e09e -1001e0fa: bdf0 pop {r4, r5, r6, r7, pc} - -1001e0fc : -1001e0fc: b5f8 push {r3, r4, r5, r6, r7, lr} -1001e0fe: f241 036c movw r3, #4204 ; 0x106c -1001e102: 58c7 ldr r7, [r0, r3] -1001e104: 4604 mov r4, r0 -1001e106: 4616 mov r6, r2 -1001e108: 4610 mov r0, r2 -1001e10a: 220c movs r2, #12 -1001e10c: f7f9 f980 bl 10017410 -1001e110: 1efb subs r3, r7, #3 -1001e112: 2b02 cmp r3, #2 -1001e114: f1a7 0706 sub.w r7, r7, #6 -1001e118: 6923 ldr r3, [r4, #16] -1001e11a: bf34 ite cc -1001e11c: 25dd movcc r5, #221 ; 0xdd -1001e11e: 2500 movcs r5, #0 -1001e120: 2f01 cmp r7, #1 -1001e122: bf98 it ls -1001e124: 2530 movls r5, #48 ; 0x30 -1001e126: 05db lsls r3, r3, #23 -1001e128: d50b bpl.n 1001e142 -1001e12a: f241 0558 movw r5, #4184 ; 0x1058 -1001e12e: f106 000c add.w r0, r6, #12 -1001e132: f604 6158 addw r1, r4, #3672 ; 0xe58 -1001e136: 5962 ldr r2, [r4, r5] -1001e138: f7f9 f96a bl 10017410 -1001e13c: 5960 ldr r0, [r4, r5] -1001e13e: 300c adds r0, #12 -1001e140: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001e142: 2ddd cmp r5, #221 ; 0xdd -1001e144: d001 beq.n 1001e14a -1001e146: 2d30 cmp r5, #48 ; 0x30 -1001e148: d10e bne.n 1001e168 -1001e14a: f241 0791 movw r7, #4241 ; 0x1091 -1001e14e: 5de2 ldrb r2, [r4, r7] -1001e150: f504 5184 add.w r1, r4, #4224 ; 0x1080 -1001e154: f106 000c add.w r0, r6, #12 -1001e158: 3110 adds r1, #16 -1001e15a: 3202 adds r2, #2 -1001e15c: f7f9 f958 bl 10017410 -1001e160: 7335 strb r5, [r6, #12] -1001e162: 5de0 ldrb r0, [r4, r7] -1001e164: 300e adds r0, #14 -1001e166: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001e168: 200c movs r0, #12 -1001e16a: bdf8 pop {r3, r4, r5, r6, r7, pc} - -1001e16c : -1001e16c: 2300 movs r3, #0 -1001e16e: f8a0 3452 strh.w r3, [r0, #1106] ; 0x452 -1001e172: f8a0 3450 strh.w r3, [r0, #1104] ; 0x450 -1001e176: f8c0 3458 str.w r3, [r0, #1112] ; 0x458 -1001e17a: 4770 bx lr - -1001e17c : -1001e17c: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -1001e180: 4616 mov r6, r2 -1001e182: 4a35 ldr r2, [pc, #212] ; (1001e258 ) -1001e184: 4604 mov r4, r0 -1001e186: 6810 ldr r0, [r2, #0] -1001e188: b08f sub sp, #60 ; 0x3c -1001e18a: 9005 str r0, [sp, #20] -1001e18c: 8890 ldrh r0, [r2, #4] -1001e18e: 7992 ldrb r2, [r2, #6] -1001e190: f101 080c add.w r8, r1, #12 -1001e194: f88d 201a strb.w r2, [sp, #26] -1001e198: f1a3 070c sub.w r7, r3, #12 -1001e19c: 2200 movs r2, #0 -1001e19e: f8ad 0018 strh.w r0, [sp, #24] -1001e1a2: f8c4 2454 str.w r2, [r4, #1108] ; 0x454 -1001e1a6: 4640 mov r0, r8 -1001e1a8: 212d movs r1, #45 ; 0x2d -1001e1aa: aa03 add r2, sp, #12 -1001e1ac: 463b mov r3, r7 -1001e1ae: 9d16 ldr r5, [sp, #88] ; 0x58 -1001e1b0: f020 fb7a bl 1003e8a8 <__rtw_get_ie_veneer> -1001e1b4: 2800 cmp r0, #0 -1001e1b6: d04a beq.n 1001e24e -1001e1b8: 9b03 ldr r3, [sp, #12] -1001e1ba: 2b00 cmp r3, #0 -1001e1bc: d047 beq.n 1001e24e -1001e1be: f8d4 344c ldr.w r3, [r4, #1100] ; 0x44c -1001e1c2: b953 cbnz r3, 1001e1da -1001e1c4: 6828 ldr r0, [r5, #0] -1001e1c6: ab05 add r3, sp, #20 -1001e1c8: 9500 str r5, [sp, #0] -1001e1ca: 4430 add r0, r6 -1001e1cc: 21dd movs r1, #221 ; 0xdd -1001e1ce: 2207 movs r2, #7 -1001e1d0: f020 fb6e bl 1003e8b0 <__rtw_set_ie_veneer> -1001e1d4: 2301 movs r3, #1 -1001e1d6: f8c4 344c str.w r3, [r4, #1100] ; 0x44c -1001e1da: a807 add r0, sp, #28 -1001e1dc: 2100 movs r1, #0 -1001e1de: 221a movs r2, #26 -1001e1e0: f8d5 9000 ldr.w r9, [r5] -1001e1e4: f7f9 f924 bl 10017430 -1001e1e8: f241 0362 movw r3, #4194 ; 0x1062 -1001e1ec: 210d movs r1, #13 -1001e1ee: aa04 add r2, sp, #16 -1001e1f0: 4620 mov r0, r4 -1001e1f2: f8ad 301c strh.w r3, [sp, #28] -1001e1f6: f014 f983 bl 10032500 -1001e1fa: f8d4 2d0c ldr.w r2, [r4, #3340] ; 0xd0c -1001e1fe: 9b04 ldr r3, [sp, #16] -1001e200: 2a04 cmp r2, #4 -1001e202: f003 0303 and.w r3, r3, #3 -1001e206: f88d 301e strb.w r3, [sp, #30] -1001e20a: bf04 itt eq -1001e20c: f043 031c orreq.w r3, r3, #28 -1001e210: f88d 301e strbeq.w r3, [sp, #30] -1001e214: 212d movs r1, #45 ; 0x2d -1001e216: 221a movs r2, #26 -1001e218: ab07 add r3, sp, #28 -1001e21a: 9500 str r5, [sp, #0] -1001e21c: eb06 0009 add.w r0, r6, r9 -1001e220: f020 fb46 bl 1003e8b0 <__rtw_set_ie_veneer> -1001e224: 2301 movs r3, #1 -1001e226: f8c4 3454 str.w r3, [r4, #1108] ; 0x454 -1001e22a: 4640 mov r0, r8 -1001e22c: 463b mov r3, r7 -1001e22e: 213d movs r1, #61 ; 0x3d -1001e230: aa03 add r2, sp, #12 -1001e232: f020 fb39 bl 1003e8a8 <__rtw_get_ie_veneer> -1001e236: 4603 mov r3, r0 -1001e238: b148 cbz r0, 1001e24e -1001e23a: 9a03 ldr r2, [sp, #12] -1001e23c: 2a16 cmp r2, #22 -1001e23e: d106 bne.n 1001e24e -1001e240: 6828 ldr r0, [r5, #0] -1001e242: 213d movs r1, #61 ; 0x3d -1001e244: 9500 str r5, [sp, #0] -1001e246: 4430 add r0, r6 -1001e248: 3302 adds r3, #2 -1001e24a: f020 fb31 bl 1003e8b0 <__rtw_set_ie_veneer> -1001e24e: f8d4 0454 ldr.w r0, [r4, #1108] ; 0x454 -1001e252: b00f add sp, #60 ; 0x3c -1001e254: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -1001e258: 10041318 .word 0x10041318 - -1001e25c : -1001e25c: f8d0 3454 ldr.w r3, [r0, #1108] ; 0x454 -1001e260: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -1001e264: 4604 mov r4, r0 -1001e266: 2b00 cmp r3, #0 -1001e268: d03a beq.n 1001e2e0 -1001e26a: f890 3736 ldrb.w r3, [r0, #1846] ; 0x736 -1001e26e: b3bb cbz r3, 1001e2e0 -1001e270: f890 3735 ldrb.w r3, [r0, #1845] ; 0x735 -1001e274: b3a3 cbz r3, 1001e2e0 -1001e276: f8d0 3458 ldr.w r3, [r0, #1112] ; 0x458 -1001e27a: f500 559c add.w r5, r0, #4992 ; 0x1380 -1001e27e: 3508 adds r5, #8 -1001e280: b93b cbnz r3, 1001e292 -1001e282: f895 3045 ldrb.w r3, [r5, #69] ; 0x45 -1001e286: 2b01 cmp r3, #1 -1001e288: d103 bne.n 1001e292 -1001e28a: 2301 movs r3, #1 -1001e28c: f8c4 3458 str.w r3, [r4, #1112] ; 0x458 -1001e290: e003 b.n 1001e29a -1001e292: f895 3045 ldrb.w r3, [r5, #69] ; 0x45 -1001e296: 2b02 cmp r3, #2 -1001e298: d0f7 beq.n 1001e28a -1001e29a: ad02 add r5, sp, #8 -1001e29c: f04f 0800 mov.w r8, #0 -1001e2a0: f845 8d04 str.w r8, [r5, #-4]! -1001e2a4: f101 070c add.w r7, r1, #12 -1001e2a8: f1a2 060c sub.w r6, r2, #12 -1001e2ac: 212d movs r1, #45 ; 0x2d -1001e2ae: 462a mov r2, r5 -1001e2b0: 4633 mov r3, r6 -1001e2b2: 4638 mov r0, r7 -1001e2b4: f020 faf8 bl 1003e8a8 <__rtw_get_ie_veneer> -1001e2b8: 4633 mov r3, r6 -1001e2ba: 4638 mov r0, r7 -1001e2bc: 213d movs r1, #61 ; 0x3d -1001e2be: 462a mov r2, r5 -1001e2c0: f8cd 8004 str.w r8, [sp, #4] -1001e2c4: f020 faf0 bl 1003e8a8 <__rtw_get_ie_veneer> -1001e2c8: f8b4 375a ldrh.w r3, [r4, #1882] ; 0x75a -1001e2cc: f3c3 0381 ubfx r3, r3, #2, #2 -1001e2d0: f884 373a strb.w r3, [r4, #1850] ; 0x73a -1001e2d4: f894 377c ldrb.w r3, [r4, #1916] ; 0x77c -1001e2d8: f003 0303 and.w r3, r3, #3 -1001e2dc: f884 3737 strb.w r3, [r4, #1847] ; 0x737 -1001e2e0: b002 add sp, #8 -1001e2e2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1001e2e6 : -1001e2e6: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001e2ea: f8d1 3094 ldr.w r3, [r1, #148] ; 0x94 -1001e2ee: 4604 mov r4, r0 -1001e2f0: 337c adds r3, #124 ; 0x7c -1001e2f2: f5b3 7f5f cmp.w r3, #892 ; 0x37c -1001e2f6: 460e mov r6, r1 -1001e2f8: 61cb str r3, [r1, #28] -1001e2fa: f100 090c add.w r9, r0, #12 -1001e2fe: d827 bhi.n 1001e350 -1001e300: 4648 mov r0, r9 -1001e302: a901 add r1, sp, #4 -1001e304: f7f9 f960 bl 100175c8 -1001e308: 69b3 ldr r3, [r6, #24] -1001e30a: 2b00 cmp r3, #0 -1001e30c: dd09 ble.n 1001e322 -1001e30e: f104 0734 add.w r7, r4, #52 ; 0x34 -1001e312: 4638 mov r0, r7 -1001e314: a901 add r1, sp, #4 -1001e316: f7f9 f957 bl 100175c8 -1001e31a: 6923 ldr r3, [r4, #16] -1001e31c: 061d lsls r5, r3, #24 -1001e31e: d41e bmi.n 1001e35e -1001e320: e0f1 b.n 1001e506 -1001e322: 3304 adds r3, #4 -1001e324: f204 452c addw r5, r4, #1068 ; 0x42c -1001e328: d10a bne.n 1001e340 -1001e32a: 4620 mov r0, r4 -1001e32c: f014 fad9 bl 100328e2 -1001e330: 4628 mov r0, r5 -1001e332: 2101 movs r1, #1 -1001e334: f018 fd70 bl 10036e18 -1001e338: 6923 ldr r3, [r4, #16] -1001e33a: 061a lsls r2, r3, #24 -1001e33c: d405 bmi.n 1001e34a -1001e33e: e007 b.n 1001e350 -1001e340: 4628 mov r0, r5 -1001e342: 2101 movs r1, #1 -1001e344: f018 fd68 bl 10036e18 -1001e348: 6923 ldr r3, [r4, #16] -1001e34a: f023 0380 bic.w r3, r3, #128 ; 0x80 -1001e34e: 6123 str r3, [r4, #16] -1001e350: 4648 mov r0, r9 -1001e352: a901 add r1, sp, #4 -1001e354: f7f9 f942 bl 100175dc -1001e358: b003 add sp, #12 -1001e35a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1001e35e: f106 0820 add.w r8, r6, #32 -1001e362: f104 002c add.w r0, r4, #44 ; 0x2c -1001e366: 4641 mov r1, r8 -1001e368: f7ff f8d0 bl 1001d50c <_rtw_find_network> -1001e36c: 6923 ldr r3, [r4, #16] -1001e36e: 4605 mov r5, r0 -1001e370: 071b lsls r3, r3, #28 -1001e372: f100 80c4 bmi.w 1001e4fe -1001e376: 2d00 cmp r5, #0 -1001e378: f000 80c5 beq.w 1001e506 -1001e37c: f104 0098 add.w r0, r4, #152 ; 0x98 -1001e380: f105 011c add.w r1, r5, #28 -1001e384: 69ea ldr r2, [r5, #28] -1001e386: f7f9 f843 bl 10017410 -1001e38a: f8d5 3094 ldr.w r3, [r5, #148] ; 0x94 -1001e38e: f504 7a8a add.w sl, r4, #276 ; 0x114 -1001e392: f44f 7240 mov.w r2, #768 ; 0x300 -1001e396: f8c4 3110 str.w r3, [r4, #272] ; 0x110 -1001e39a: 4650 mov r0, sl -1001e39c: f105 0198 add.w r1, r5, #152 ; 0x98 -1001e3a0: f7f9 f836 bl 10017410 -1001e3a4: 69b3 ldr r3, [r6, #24] -1001e3a6: f604 4b1c addw fp, r4, #3100 ; 0xc1c -1001e3aa: f8c4 3090 str.w r3, [r4, #144] ; 0x90 -1001e3ae: 4658 mov r0, fp -1001e3b0: f8d4 1c28 ldr.w r1, [r4, #3112] ; 0xc28 -1001e3b4: f018 fd30 bl 10036e18 -1001e3b8: f895 3090 ldrb.w r3, [r5, #144] ; 0x90 -1001e3bc: 4658 mov r0, fp -1001e3be: f884 3c06 strb.w r3, [r4, #3078] ; 0xc06 -1001e3c2: f895 3091 ldrb.w r3, [r5, #145] ; 0x91 -1001e3c6: f8d4 1c28 ldr.w r1, [r4, #3112] ; 0xc28 -1001e3ca: f884 3c07 strb.w r3, [r4, #3079] ; 0xc07 -1001e3ce: f895 3090 ldrb.w r3, [r5, #144] ; 0x90 -1001e3d2: 3b64 subs r3, #100 ; 0x64 -1001e3d4: f884 3c04 strb.w r3, [r4, #3076] ; 0xc04 -1001e3d8: f018 fd1e bl 10036e18 -1001e3dc: 6ff3 ldr r3, [r6, #124] ; 0x7c -1001e3de: b11b cbz r3, 1001e3e8 -1001e3e0: 2b01 cmp r3, #1 -1001e3e2: d103 bne.n 1001e3ec -1001e3e4: 2308 movs r3, #8 -1001e3e6: e002 b.n 1001e3ee -1001e3e8: 2320 movs r3, #32 -1001e3ea: e000 b.n 1001e3ee -1001e3ec: 2300 movs r3, #0 -1001e3ee: 6123 str r3, [r4, #16] -1001e3f0: 4620 mov r0, r4 -1001e3f2: f504 7190 add.w r1, r4, #288 ; 0x120 -1001e3f6: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 -1001e3fa: f00b fa31 bl 10029860 -1001e3fe: 4620 mov r0, r4 -1001e400: 4651 mov r1, sl -1001e402: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 -1001e406: f7ff ff29 bl 1001e25c -1001e40a: 4620 mov r0, r4 -1001e40c: f104 01fc add.w r1, r4, #252 ; 0xfc -1001e410: f00a f8b1 bl 10028576 -1001e414: 6923 ldr r3, [r4, #16] -1001e416: 0718 lsls r0, r3, #28 -1001e418: d561 bpl.n 1001e4de -1001e41a: f504 6a46 add.w sl, r4, #3168 ; 0xc60 -1001e41e: 4650 mov r0, sl -1001e420: 4641 mov r1, r8 -1001e422: f009 ff37 bl 10028294 -1001e426: 4605 mov r5, r0 -1001e428: b930 cbnz r0, 1001e438 -1001e42a: 4650 mov r0, sl -1001e42c: 4641 mov r1, r8 -1001e42e: f009 fde9 bl 10028004 -1001e432: 4605 mov r5, r0 -1001e434: 2800 cmp r0, #0 -1001e436: d066 beq.n 1001e506 -1001e438: 69b3 ldr r3, [r6, #24] -1001e43a: f8c5 30fc str.w r3, [r5, #252] ; 0xfc -1001e43e: f641 0369 movw r3, #6249 ; 0x1869 -1001e442: 5ce3 ldrb r3, [r4, r3] -1001e444: b103 cbz r3, 1001e448 -1001e446: 2302 movs r3, #2 -1001e448: f8c5 3100 str.w r3, [r5, #256] ; 0x100 -1001e44c: 4620 mov r0, r4 -1001e44e: 2301 movs r3, #1 -1001e450: 2100 movs r1, #0 -1001e452: 462a mov r2, r5 -1001e454: f014 f85d bl 10032512 -1001e458: f8d4 3d08 ldr.w r3, [r4, #3336] ; 0xd08 -1001e45c: 2b02 cmp r3, #2 -1001e45e: d131 bne.n 1001e4c4 -1001e460: 2600 movs r6, #0 -1001e462: f241 035c movw r3, #4188 ; 0x105c -1001e466: 54e6 strb r6, [r4, r3] -1001e468: f241 035d movw r3, #4189 ; 0x105d -1001e46c: 54e6 strb r6, [r4, r3] -1001e46e: f241 035f movw r3, #4191 ; 0x105f -1001e472: 54e6 strb r6, [r4, r3] -1001e474: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c -1001e478: f04f 0801 mov.w r8, #1 -1001e47c: f8c5 3114 str.w r3, [r5, #276] ; 0x114 -1001e480: f505 709c add.w r0, r5, #312 ; 0x138 -1001e484: 4631 mov r1, r6 -1001e486: 2210 movs r2, #16 -1001e488: f8c5 8110 str.w r8, [r5, #272] ; 0x110 -1001e48c: f7f8 ffd0 bl 10017430 -1001e490: f505 7094 add.w r0, r5, #296 ; 0x128 -1001e494: 4631 mov r1, r6 -1001e496: 2210 movs r2, #16 -1001e498: f7f8 ffca bl 10017430 -1001e49c: f505 708c add.w r0, r5, #280 ; 0x118 -1001e4a0: 4631 mov r1, r6 -1001e4a2: 2210 movs r2, #16 -1001e4a4: f7f8 ffc4 bl 10017430 -1001e4a8: f505 70a4 add.w r0, r5, #328 ; 0x148 -1001e4ac: 4631 mov r1, r6 -1001e4ae: 2208 movs r2, #8 -1001e4b0: f7f8 ffbe bl 10017430 -1001e4b4: f505 70a8 add.w r0, r5, #336 ; 0x150 -1001e4b8: 4631 mov r1, r6 -1001e4ba: 2208 movs r2, #8 -1001e4bc: f7f8 ffb8 bl 10017430 -1001e4c0: f885 8148 strb.w r8, [r5, #328] ; 0x148 -1001e4c4: f241 0358 movw r3, #4184 ; 0x1058 -1001e4c8: 58e2 ldr r2, [r4, r3] -1001e4ca: b122 cbz r2, 1001e4d6 -1001e4cc: 2201 movs r2, #1 -1001e4ce: f8c5 2110 str.w r2, [r5, #272] ; 0x110 -1001e4d2: 2200 movs r2, #0 -1001e4d4: 50e2 str r2, [r4, r3] -1001e4d6: 4620 mov r0, r4 -1001e4d8: 4629 mov r1, r5 -1001e4da: f003 fe4d bl 10022178 -1001e4de: 6923 ldr r3, [r4, #16] -1001e4e0: 0719 lsls r1, r3, #28 -1001e4e2: d415 bmi.n 1001e510 -1001e4e4: f204 402c addw r0, r4, #1068 ; 0x42c -1001e4e8: f018 fc98 bl 10036e1c -1001e4ec: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c -1001e4f0: b94b cbnz r3, 1001e506 -1001e4f2: f894 28f9 ldrb.w r2, [r4, #2297] ; 0x8f9 -1001e4f6: b132 cbz r2, 1001e506 -1001e4f8: f884 386e strb.w r3, [r4, #2158] ; 0x86e -1001e4fc: e003 b.n 1001e506 -1001e4fe: b110 cbz r0, 1001e506 -1001e500: 2301 movs r3, #1 -1001e502: 60eb str r3, [r5, #12] -1001e504: e73a b.n 1001e37c -1001e506: 4638 mov r0, r7 -1001e508: a901 add r1, sp, #4 -1001e50a: f7f9 f867 bl 100175dc -1001e50e: e71f b.n 1001e350 -1001e510: 4620 mov r0, r4 -1001e512: f7ff fa86 bl 1001da22 -1001e516: e7e5 b.n 1001e4e4 - -1001e518 : -1001e518: 6903 ldr r3, [r0, #16] -1001e51a: f013 0f70 tst.w r3, #112 ; 0x70 -1001e51e: d006 beq.n 1001e52e -1001e520: f8d0 0ca4 ldr.w r0, [r0, #3236] ; 0xca4 -1001e524: 2802 cmp r0, #2 -1001e526: bfd4 ite le -1001e528: 2000 movle r0, #0 -1001e52a: 2001 movgt r0, #1 -1001e52c: 4770 bx lr -1001e52e: f003 0001 and.w r0, r3, #1 -1001e532: 4770 bx lr - -1001e534 : -1001e534: b1c8 cbz r0, 1001e56a -1001e536: f641 035c movw r3, #6236 ; 0x185c -1001e53a: 58c3 ldr r3, [r0, r3] -1001e53c: b193 cbz r3, 1001e564 -1001e53e: f241 72ac movw r2, #6060 ; 0x17ac -1001e542: 5898 ldr r0, [r3, r2] -1001e544: b980 cbnz r0, 1001e568 -1001e546: f241 72b0 movw r2, #6064 ; 0x17b0 -1001e54a: 589a ldr r2, [r3, r2] -1001e54c: b96a cbnz r2, 1001e56a -1001e54e: f641 0238 movw r2, #6200 ; 0x1838 -1001e552: 5898 ldr r0, [r3, r2] -1001e554: b148 cbz r0, 1001e56a -1001e556: f241 72c5 movw r2, #6085 ; 0x17c5 -1001e55a: 5c98 ldrb r0, [r3, r2] -1001e55c: 3000 adds r0, #0 -1001e55e: bf18 it ne -1001e560: 2001 movne r0, #1 -1001e562: 4770 bx lr -1001e564: 4618 mov r0, r3 -1001e566: 4770 bx lr -1001e568: 2000 movs r0, #0 -1001e56a: 4770 bx lr - -1001e56c : -1001e56c: b160 cbz r0, 1001e588 -1001e56e: f641 035c movw r3, #6236 ; 0x185c -1001e572: 58c0 ldr r0, [r0, r3] -1001e574: b140 cbz r0, 1001e588 -1001e576: 6903 ldr r3, [r0, #16] -1001e578: b901 cbnz r1, 1001e57c -1001e57a: b123 cbz r3, 1001e586 -1001e57c: 4219 tst r1, r3 -1001e57e: bf0c ite eq -1001e580: 2000 moveq r0, #0 -1001e582: 2001 movne r0, #1 -1001e584: 4770 bx lr -1001e586: 2001 movs r0, #1 -1001e588: 4770 bx lr - -1001e58a : -1001e58a: 8803 ldrh r3, [r0, #0] -1001e58c: f413 7f80 tst.w r3, #256 ; 0x100 -1001e590: bf0c ite eq -1001e592: 2200 moveq r2, #0 -1001e594: 2202 movne r2, #2 -1001e596: f3c3 2340 ubfx r3, r3, #9, #1 -1001e59a: 4313 orrs r3, r2 -1001e59c: 2b01 cmp r3, #1 -1001e59e: d002 beq.n 1001e5a6 -1001e5a0: d301 bcc.n 1001e5a6 -1001e5a2: 3010 adds r0, #16 -1001e5a4: 4770 bx lr -1001e5a6: 3004 adds r0, #4 -1001e5a8: 4770 bx lr - -1001e5aa : -1001e5aa: 8802 ldrh r2, [r0, #0] -1001e5ac: f412 7f80 tst.w r2, #256 ; 0x100 -1001e5b0: bf0c ite eq -1001e5b2: 2300 moveq r3, #0 -1001e5b4: 2302 movne r3, #2 -1001e5b6: f3c2 2240 ubfx r2, r2, #9, #1 -1001e5ba: 4313 orrs r3, r2 -1001e5bc: 2b01 cmp r3, #1 -1001e5be: d003 beq.n 1001e5c8 -1001e5c0: d304 bcc.n 1001e5cc -1001e5c2: 2b02 cmp r3, #2 -1001e5c4: d002 beq.n 1001e5cc -1001e5c6: e003 b.n 1001e5d0 -1001e5c8: 3010 adds r0, #16 -1001e5ca: 4770 bx lr -1001e5cc: 300a adds r0, #10 -1001e5ce: 4770 bx lr -1001e5d0: 3018 adds r0, #24 -1001e5d2: 4770 bx lr - -1001e5d4 : -1001e5d4: 2001 movs r0, #1 -1001e5d6: 4770 bx lr - -1001e5d8 : -1001e5d8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1001e5dc: 6f8b ldr r3, [r1, #120] ; 0x78 -1001e5de: 4c0a ldr r4, [pc, #40] ; (1001e608 ) -1001e5e0: 7e1f ldrb r7, [r3, #24] -1001e5e2: 4680 mov r8, r0 -1001e5e4: 460d mov r5, r1 -1001e5e6: f104 0618 add.w r6, r4, #24 -1001e5ea: 42b4 cmp r4, r6 -1001e5ec: d008 beq.n 1001e600 -1001e5ee: 6823 ldr r3, [r4, #0] -1001e5f0: 429f cmp r7, r3 -1001e5f2: d103 bne.n 1001e5fc -1001e5f4: 6863 ldr r3, [r4, #4] -1001e5f6: 4640 mov r0, r8 -1001e5f8: 4629 mov r1, r5 -1001e5fa: 4798 blx r3 -1001e5fc: 3408 adds r4, #8 -1001e5fe: e7f4 b.n 1001e5ea -1001e600: 2001 movs r0, #1 -1001e602: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1001e606: bf00 nop -1001e608: 100414c4 .word 0x100414c4 - -1001e60c : -1001e60c: 2001 movs r0, #1 -1001e60e: 4770 bx lr - -1001e610 : -1001e610: b510 push {r4, lr} -1001e612: 2300 movs r3, #0 -1001e614: 240c movs r4, #12 -1001e616: 435c muls r4, r3 -1001e618: 5d04 ldrb r4, [r0, r4] -1001e61a: b134 cbz r4, 1001e62a -1001e61c: 42a1 cmp r1, r4 -1001e61e: d102 bne.n 1001e626 -1001e620: b12a cbz r2, 1001e62e -1001e622: 6013 str r3, [r2, #0] -1001e624: e003 b.n 1001e62e -1001e626: 3301 adds r3, #1 -1001e628: e7f4 b.n 1001e614 -1001e62a: 4620 mov r0, r4 -1001e62c: bd10 pop {r4, pc} -1001e62e: 2001 movs r0, #1 -1001e630: bd10 pop {r4, pc} - -1001e632 : -1001e632: b508 push {r3, lr} -1001e634: f890 151e ldrb.w r1, [r0, #1310] ; 0x51e -1001e638: f890 2520 ldrb.w r2, [r0, #1312] ; 0x520 -1001e63c: f890 351f ldrb.w r3, [r0, #1311] ; 0x51f -1001e640: f00a f85c bl 100286fc -1001e644: 2001 movs r0, #1 -1001e646: bd08 pop {r3, pc} - -1001e648 : -1001e648: b5f8 push {r3, r4, r5, r6, r7, lr} -1001e64a: f241 63c8 movw r3, #5832 ; 0x16c8 -1001e64e: 460c mov r4, r1 -1001e650: 58c6 ldr r6, [r0, r3] -1001e652: 4607 mov r7, r0 -1001e654: 4615 mov r5, r2 -1001e656: 4610 mov r0, r2 -1001e658: 2100 movs r1, #0 -1001e65a: 22a8 movs r2, #168 ; 0xa8 -1001e65c: f7f8 fee8 bl 10017430 -1001e660: 2c58 cmp r4, #88 ; 0x58 -1001e662: d903 bls.n 1001e66c -1001e664: 2c7f cmp r4, #127 ; 0x7f -1001e666: d001 beq.n 1001e66c -1001e668: 2000 movs r0, #0 -1001e66a: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001e66c: f241 33b5 movw r3, #5045 ; 0x13b5 -1001e670: 5cf8 ldrb r0, [r7, r3] -1001e672: 2303 movs r3, #3 -1001e674: f886 3045 strb.w r3, [r6, #69] ; 0x45 -1001e678: f000 000b and.w r0, r0, #11 -1001e67c: 2300 movs r3, #0 -1001e67e: 4917 ldr r1, [pc, #92] ; (1001e6dc ) -1001e680: eb03 0243 add.w r2, r3, r3, lsl #1 -1001e684: 5c57 ldrb r7, [r2, r1] -1001e686: 42a7 cmp r7, r4 -1001e688: d105 bne.n 1001e696 -1001e68a: 440a add r2, r1 -1001e68c: 7853 ldrb r3, [r2, #1] -1001e68e: 7892 ldrb r2, [r2, #2] -1001e690: f886 2045 strb.w r2, [r6, #69] ; 0x45 -1001e694: e003 b.n 1001e69e -1001e696: 3301 adds r3, #1 -1001e698: 2b09 cmp r3, #9 -1001e69a: d1f0 bne.n 1001e67e -1001e69c: 2308 movs r3, #8 -1001e69e: 2800 cmp r0, #0 -1001e6a0: d0e2 beq.n 1001e668 -1001e6a2: 4e0f ldr r6, [pc, #60] ; (1001e6e0 ) -1001e6a4: ebc3 1203 rsb r2, r3, r3, lsl #4 -1001e6a8: 4416 add r6, r2 -1001e6aa: 2100 movs r1, #0 -1001e6ac: 7bb0 ldrb r0, [r6, #14] -1001e6ae: 460c mov r4, r1 -1001e6b0: b2e2 uxtb r2, r4 -1001e6b2: 4282 cmp r2, r0 -1001e6b4: d211 bcs.n 1001e6da -1001e6b6: 5d37 ldrb r7, [r6, r4] -1001e6b8: 186a adds r2, r5, r1 -1001e6ba: 546f strb r7, [r5, r1] -1001e6bc: b123 cbz r3, 1001e6c8 -1001e6be: f1a3 0c07 sub.w ip, r3, #7 -1001e6c2: f1bc 0f01 cmp.w ip, #1 -1001e6c6: d803 bhi.n 1001e6d0 -1001e6c8: 2f0b cmp r7, #11 -1001e6ca: d901 bls.n 1001e6d0 -1001e6cc: 2700 movs r7, #0 -1001e6ce: e000 b.n 1001e6d2 -1001e6d0: 2701 movs r7, #1 -1001e6d2: 6057 str r7, [r2, #4] -1001e6d4: 3401 adds r4, #1 -1001e6d6: 310c adds r1, #12 -1001e6d8: e7ea b.n 1001e6b0 -1001e6da: bdf8 pop {r3, r4, r5, r6, r7, pc} -1001e6dc: 100414e6 .word 0x100414e6 -1001e6e0: 100413ac .word 0x100413ac - -1001e6e4 : -1001e6e4: b538 push {r3, r4, r5, lr} -1001e6e6: 6804 ldr r4, [r0, #0] -1001e6e8: 4605 mov r5, r0 -1001e6ea: b18c cbz r4, 1001e710 -1001e6ec: f241 73ac movw r3, #6060 ; 0x17ac -1001e6f0: 58e3 ldr r3, [r4, r3] -1001e6f2: 2b01 cmp r3, #1 -1001e6f4: d10c bne.n 1001e710 -1001e6f6: f500 7048 add.w r0, r0, #800 ; 0x320 -1001e6fa: f018 fb94 bl 10036e26 -1001e6fe: f505 704b add.w r0, r5, #812 ; 0x32c -1001e702: f018 fb90 bl 10036e26 -1001e706: 4620 mov r0, r4 -1001e708: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1001e70c: f005 b90e b.w 1002392c -1001e710: bd38 pop {r3, r4, r5, pc} - -1001e712 : -1001e712: b510 push {r4, lr} -1001e714: 8d04 ldrh r4, [r0, #40] ; 0x28 -1001e716: f890 202a ldrb.w r2, [r0, #42] ; 0x2a -1001e71a: 6903 ldr r3, [r0, #16] -1001e71c: 6f80 ldr r0, [r0, #120] ; 0x78 -1001e71e: f002 020f and.w r2, r2, #15 -1001e722: 8800 ldrh r0, [r0, #0] -1001e724: ea42 1204 orr.w r2, r2, r4, lsl #4 -1001e728: 0500 lsls r0, r0, #20 -1001e72a: b292 uxth r2, r2 -1001e72c: d50b bpl.n 1001e746 -1001e72e: 2900 cmp r1, #0 -1001e730: f8b3 085a ldrh.w r0, [r3, #2138] ; 0x85a -1001e734: db05 blt.n 1001e742 -1001e736: 4290 cmp r0, r2 -1001e738: d105 bne.n 1001e746 -1001e73a: f893 085c ldrb.w r0, [r3, #2140] ; 0x85c -1001e73e: 4281 cmp r1, r0 -1001e740: e000 b.n 1001e744 -1001e742: 4290 cmp r0, r2 -1001e744: d006 beq.n 1001e754 -1001e746: 2900 cmp r1, #0 -1001e748: f8a3 285a strh.w r2, [r3, #2138] ; 0x85a -1001e74c: db04 blt.n 1001e758 -1001e74e: f883 185c strb.w r1, [r3, #2140] ; 0x85c -1001e752: e001 b.n 1001e758 -1001e754: 2000 movs r0, #0 -1001e756: bd10 pop {r4, pc} -1001e758: 2001 movs r0, #1 -1001e75a: bd10 pop {r4, pc} - -1001e75c : -1001e75c: b570 push {r4, r5, r6, lr} -1001e75e: 6f84 ldr r4, [r0, #120] ; 0x78 -1001e760: 6905 ldr r5, [r0, #16] -1001e762: 7fe1 ldrb r1, [r4, #31] -1001e764: 6f06 ldr r6, [r0, #112] ; 0x70 -1001e766: f7ff ffd4 bl 1001e712 -1001e76a: b158 cbz r0, 1001e784 -1001e76c: f241 63a8 movw r3, #5800 ; 0x16a8 -1001e770: 58eb ldr r3, [r5, r3] -1001e772: b133 cbz r3, 1001e782 -1001e774: 4628 mov r0, r5 -1001e776: 4621 mov r1, r4 -1001e778: b2b2 uxth r2, r6 -1001e77a: f895 351e ldrb.w r3, [r5, #1310] ; 0x51e -1001e77e: f004 ffdc bl 1002373a -1001e782: 2001 movs r0, #1 -1001e784: bd70 pop {r4, r5, r6, pc} - ... - -1001e788 : -1001e788: b538 push {r3, r4, r5, lr} -1001e78a: 6f8c ldr r4, [r1, #120] ; 0x78 -1001e78c: f500 50a4 add.w r0, r0, #5248 ; 0x1480 -1001e790: 460d mov r5, r1 -1001e792: 3019 adds r0, #25 -1001e794: 1d21 adds r1, r4, #4 -1001e796: 2206 movs r2, #6 -1001e798: f7f8 fe42 bl 10017420 -1001e79c: b188 cbz r0, 1001e7c2 -1001e79e: 7e22 ldrb r2, [r4, #24] -1001e7a0: 2a04 cmp r2, #4 -1001e7a2: d10e bne.n 1001e7c2 -1001e7a4: 7e63 ldrb r3, [r4, #25] -1001e7a6: 2b09 cmp r3, #9 -1001e7a8: d10b bne.n 1001e7c2 -1001e7aa: f104 001a add.w r0, r4, #26 -1001e7ae: 4906 ldr r1, [pc, #24] ; (1001e7c8 ) -1001e7b0: f7f8 fe36 bl 10017420 -1001e7b4: 2801 cmp r0, #1 -1001e7b6: d104 bne.n 1001e7c2 -1001e7b8: 4628 mov r0, r5 -1001e7ba: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1001e7be: f7ff bfcd b.w 1001e75c -1001e7c2: 2000 movs r0, #0 -1001e7c4: bd38 pop {r3, r4, r5, pc} -1001e7c6: bf00 nop -1001e7c8: 1004145f .word 0x1004145f - -1001e7cc : -1001e7cc: b570 push {r4, r5, r6, lr} -1001e7ce: 4606 mov r6, r0 -1001e7d0: f00b f8b2 bl 10029938 -1001e7d4: 4604 mov r4, r0 -1001e7d6: b198 cbz r0, 1001e800 -1001e7d8: 4630 mov r0, r6 -1001e7da: 2100 movs r1, #0 -1001e7dc: f00c f872 bl 1002a8c4 -1001e7e0: 4605 mov r5, r0 -1001e7e2: b928 cbnz r0, 1001e7f0 -1001e7e4: 4630 mov r0, r6 -1001e7e6: 4621 mov r1, r4 -1001e7e8: f00b f8d2 bl 10029990 -1001e7ec: 4628 mov r0, r5 -1001e7ee: bd70 pop {r4, r5, r6, pc} -1001e7f0: 2303 movs r3, #3 -1001e7f2: 67a3 str r3, [r4, #120] ; 0x78 -1001e7f4: 6903 ldr r3, [r0, #16] -1001e7f6: f8c4 0084 str.w r0, [r4, #132] ; 0x84 -1001e7fa: f8c4 3080 str.w r3, [r4, #128] ; 0x80 -1001e7fe: 6144 str r4, [r0, #20] -1001e800: 4620 mov r0, r4 -1001e802: bd70 pop {r4, r5, r6, pc} - -1001e804 : -1001e804: f880 184b strb.w r1, [r0, #2123] ; 0x84b -1001e808: 4770 bx lr - -1001e80a : -1001e80a: b538 push {r3, r4, r5, lr} -1001e80c: 226c movs r2, #108 ; 0x6c -1001e80e: 460c mov r4, r1 -1001e810: 4605 mov r5, r0 -1001e812: 4608 mov r0, r1 -1001e814: 2100 movs r1, #0 -1001e816: f7f8 fe0b bl 10017430 -1001e81a: 2318 movs r3, #24 -1001e81c: 2207 movs r2, #7 -1001e81e: 8163 strh r3, [r4, #10] -1001e820: 2112 movs r1, #18 -1001e822: 2300 movs r3, #0 -1001e824: f884 2039 strb.w r2, [r4, #57] ; 0x39 -1001e828: f884 303b strb.w r3, [r4, #59] ; 0x3b -1001e82c: f884 1060 strb.w r1, [r4, #96] ; 0x60 -1001e830: 60e3 str r3, [r4, #12] -1001e832: f895 1521 ldrb.w r1, [r5, #1313] ; 0x521 -1001e836: 7523 strb r3, [r4, #20] -1001e838: 07c9 lsls r1, r1, #31 -1001e83a: bf48 it mi -1001e83c: 2208 movmi r2, #8 -1001e83e: f884 2058 strb.w r2, [r4, #88] ; 0x58 -1001e842: 70a3 strb r3, [r4, #2] -1001e844: f884 3056 strb.w r3, [r4, #86] ; 0x56 -1001e848: f884 3057 strb.w r3, [r4, #87] ; 0x57 -1001e84c: f884 3059 strb.w r3, [r4, #89] ; 0x59 -1001e850: f884 305a strb.w r3, [r4, #90] ; 0x5a -1001e854: f884 305b strb.w r3, [r4, #91] ; 0x5b -1001e858: f8b5 351c ldrh.w r3, [r5, #1308] ; 0x51c -1001e85c: 80e3 strh r3, [r4, #6] -1001e85e: 2301 movs r3, #1 -1001e860: f884 3064 strb.w r3, [r4, #100] ; 0x64 -1001e864: bd38 pop {r3, r4, r5, pc} - -1001e866 : -1001e866: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1001e86a: 4605 mov r5, r0 -1001e86c: f600 1058 addw r0, r0, #2392 ; 0x958 -1001e870: 4688 mov r8, r1 -1001e872: 4616 mov r6, r2 -1001e874: f7ff ffaa bl 1001e7cc -1001e878: 4604 mov r4, r0 -1001e87a: b318 cbz r0, 1001e8c4 -1001e87c: 4628 mov r0, r5 -1001e87e: f104 0108 add.w r1, r4, #8 -1001e882: f7ff ffc2 bl 1001e80a -1001e886: 2100 movs r1, #0 -1001e888: f884 106c strb.w r1, [r4, #108] ; 0x6c -1001e88c: f8d4 0080 ldr.w r0, [r4, #128] ; 0x80 -1001e890: 2268 movs r2, #104 ; 0x68 -1001e892: f7f8 fdcd bl 10017430 -1001e896: f8d4 7080 ldr.w r7, [r4, #128] ; 0x80 -1001e89a: 4632 mov r2, r6 -1001e89c: f107 0028 add.w r0, r7, #40 ; 0x28 -1001e8a0: 4641 mov r1, r8 -1001e8a2: f7f8 fdb5 bl 10017410 -1001e8a6: 8ffb ldrh r3, [r7, #62] ; 0x3e -1001e8a8: f8b5 251c ldrh.w r2, [r5, #1308] ; 0x51c -1001e8ac: f003 030f and.w r3, r3, #15 -1001e8b0: ea43 1302 orr.w r3, r3, r2, lsl #4 -1001e8b4: 6166 str r6, [r4, #20] -1001e8b6: 87fb strh r3, [r7, #62] ; 0x3e -1001e8b8: f8b5 351c ldrh.w r3, [r5, #1308] ; 0x51c -1001e8bc: 3301 adds r3, #1 -1001e8be: f8a5 351c strh.w r3, [r5, #1308] ; 0x51c -1001e8c2: 61a6 str r6, [r4, #24] -1001e8c4: 4620 mov r0, r4 -1001e8c6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1001e8ca : -1001e8ca: f241 72b0 movw r2, #6064 ; 0x17b0 -1001e8ce: 5882 ldr r2, [r0, r2] -1001e8d0: 2a01 cmp r2, #1 -1001e8d2: d006 beq.n 1001e8e2 -1001e8d4: f241 72ac movw r2, #6060 ; 0x17ac -1001e8d8: 5883 ldr r3, [r0, r2] -1001e8da: 2b01 cmp r3, #1 -1001e8dc: d001 beq.n 1001e8e2 -1001e8de: f00b bdd3 b.w 1002a488 -1001e8e2: 4770 bx lr - -1001e8e4 : -1001e8e4: b570 push {r4, r5, r6, lr} -1001e8e6: 4606 mov r6, r0 -1001e8e8: 461c mov r4, r3 -1001e8ea: f7ff ffbc bl 1001e866 -1001e8ee: 4605 mov r5, r0 -1001e8f0: b370 cbz r0, 1001e950 -1001e8f2: f014 0401 ands.w r4, r4, #1 -1001e8f6: d025 beq.n 1001e944 -1001e8f8: f506 54b5 add.w r4, r6, #5792 ; 0x16a0 -1001e8fc: 3408 adds r4, #8 -1001e8fe: 6921 ldr r1, [r4, #16] -1001e900: b161 cbz r1, 1001e91c -1001e902: f606 1658 addw r6, r6, #2392 ; 0x958 -1001e906: 4630 mov r0, r6 -1001e908: f00b f842 bl 10029990 -1001e90c: 6923 ldr r3, [r4, #16] -1001e90e: 4630 mov r0, r6 -1001e910: f8d3 1084 ldr.w r1, [r3, #132] ; 0x84 -1001e914: 2300 movs r3, #0 -1001e916: 614b str r3, [r1, #20] -1001e918: f00b ff9b bl 1002a852 -1001e91c: f8d5 1080 ldr.w r1, [r5, #128] ; 0x80 -1001e920: f104 0009 add.w r0, r4, #9 -1001e924: 2206 movs r2, #6 -1001e926: 312c adds r1, #44 ; 0x2c -1001e928: f7f8 fd72 bl 10017410 -1001e92c: 2101 movs r1, #1 -1001e92e: 4b0a ldr r3, [pc, #40] ; (1001e958 ) -1001e930: 6125 str r5, [r4, #16] -1001e932: f104 0014 add.w r0, r4, #20 -1001e936: 2500 movs r5, #0 -1001e938: 7221 strb r1, [r4, #8] -1001e93a: 601d str r5, [r3, #0] -1001e93c: f018 fa6c bl 10036e18 -1001e940: 4628 mov r0, r5 -1001e942: bd70 pop {r4, r5, r6, pc} -1001e944: 4630 mov r0, r6 -1001e946: 4629 mov r1, r5 -1001e948: f7ff ffbf bl 1001e8ca -1001e94c: 4620 mov r0, r4 -1001e94e: bd70 pop {r4, r5, r6, pc} -1001e950: f04f 30ff mov.w r0, #4294967295 -1001e954: bd70 pop {r4, r5, r6, pc} -1001e956: bf00 nop -1001e958: 1004bb08 .word 0x1004bb08 - -1001e95c : -1001e95c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001e960: b0ab sub sp, #172 ; 0xac -1001e962: 4604 mov r4, r0 -1001e964: 2100 movs r1, #0 -1001e966: a808 add r0, sp, #32 -1001e968: 2210 movs r2, #16 -1001e96a: f01f f94b bl 1003dc04 -1001e96e: f8b4 3452 ldrh.w r3, [r4, #1106] ; 0x452 -1001e972: 2b00 cmp r3, #0 -1001e974: f000 80f3 beq.w 1001eb5e -1001e978: f8b4 3450 ldrh.w r3, [r4, #1104] ; 0x450 -1001e97c: 2b00 cmp r3, #0 -1001e97e: f000 80ee beq.w 1001eb5e -1001e982: f894 373f ldrb.w r3, [r4, #1855] ; 0x73f -1001e986: 2b01 cmp r3, #1 -1001e988: f000 80e9 beq.w 1001eb5e -1001e98c: f04f 0a04 mov.w sl, #4 -1001e990: 2700 movs r7, #0 -1001e992: f604 1058 addw r0, r4, #2392 ; 0x958 -1001e996: f88d a016 strb.w sl, [sp, #22] -1001e99a: f88d 7017 strb.w r7, [sp, #23] -1001e99e: f7ff ff15 bl 1001e7cc -1001e9a2: 4606 mov r6, r0 -1001e9a4: 2800 cmp r0, #0 -1001e9a6: f000 80da beq.w 1001eb5e -1001e9aa: 4620 mov r0, r4 -1001e9ac: f106 0108 add.w r1, r6, #8 -1001e9b0: f7ff ff2b bl 1001e80a -1001e9b4: 4639 mov r1, r7 -1001e9b6: 2268 movs r2, #104 ; 0x68 -1001e9b8: f8d6 0080 ldr.w r0, [r6, #128] ; 0x80 -1001e9bc: f7f8 fd38 bl 10017430 -1001e9c0: f8d6 5080 ldr.w r5, [r6, #128] ; 0x80 -1001e9c4: f104 0898 add.w r8, r4, #152 ; 0x98 -1001e9c8: f885 7028 strb.w r7, [r5, #40] ; 0x28 -1001e9cc: f885 7029 strb.w r7, [r5, #41] ; 0x29 -1001e9d0: 4640 mov r0, r8 -1001e9d2: f009 fec5 bl 10028760 -1001e9d6: 2206 movs r2, #6 -1001e9d8: 4601 mov r1, r0 -1001e9da: f105 002c add.w r0, r5, #44 ; 0x2c -1001e9de: f7f8 fd17 bl 10017410 -1001e9e2: f504 51a4 add.w r1, r4, #5248 ; 0x1480 -1001e9e6: 3119 adds r1, #25 -1001e9e8: 2206 movs r2, #6 -1001e9ea: f105 0032 add.w r0, r5, #50 ; 0x32 -1001e9ee: f7f8 fd0f bl 10017410 -1001e9f2: 4640 mov r0, r8 -1001e9f4: f009 feb4 bl 10028760 -1001e9f8: 2206 movs r2, #6 -1001e9fa: 4601 mov r1, r0 -1001e9fc: f105 0038 add.w r0, r5, #56 ; 0x38 -1001ea00: f7f8 fd06 bl 10017410 -1001ea04: 8feb ldrh r3, [r5, #62] ; 0x3e -1001ea06: f8b4 251c ldrh.w r2, [r4, #1308] ; 0x51c -1001ea0a: f003 030f and.w r3, r3, #15 -1001ea0e: ea43 1302 orr.w r3, r3, r2, lsl #4 -1001ea12: 87eb strh r3, [r5, #62] ; 0x3e -1001ea14: f8b4 351c ldrh.w r3, [r4, #1308] ; 0x51c -1001ea18: 4637 mov r7, r6 -1001ea1a: 3301 adds r3, #1 -1001ea1c: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c -1001ea20: 8d2b ldrh r3, [r5, #40] ; 0x28 -1001ea22: 2101 movs r1, #1 -1001ea24: f023 03fc bic.w r3, r3, #252 ; 0xfc -1001ea28: f043 03d0 orr.w r3, r3, #208 ; 0xd0 -1001ea2c: 852b strh r3, [r5, #40] ; 0x28 -1001ea2e: 2318 movs r3, #24 -1001ea30: f847 3f14 str.w r3, [r7, #20]! -1001ea34: f10d 0216 add.w r2, sp, #22 -1001ea38: 463b mov r3, r7 -1001ea3a: f105 0040 add.w r0, r5, #64 ; 0x40 -1001ea3e: f01f ff5f bl 1003e900 <__rtw_set_fixed_ie_veneer> -1001ea42: 463b mov r3, r7 -1001ea44: 2101 movs r1, #1 -1001ea46: f10d 0217 add.w r2, sp, #23 -1001ea4a: f01f ff59 bl 1003e900 <__rtw_set_fixed_ie_veneer> -1001ea4e: f8b4 3452 ldrh.w r3, [r4, #1106] ; 0x452 -1001ea52: 4681 mov r9, r0 -1001ea54: f10d 0830 add.w r8, sp, #48 ; 0x30 -1001ea58: b143 cbz r3, 1001ea6c -1001ea5a: 9700 str r7, [sp, #0] -1001ea5c: 2148 movs r1, #72 ; 0x48 -1001ea5e: 2201 movs r2, #1 -1001ea60: 4643 mov r3, r8 -1001ea62: f88d a030 strb.w sl, [sp, #48] ; 0x30 -1001ea66: f01f ff23 bl 1003e8b0 <__rtw_set_ie_veneer> -1001ea6a: 4681 mov r9, r0 -1001ea6c: 4640 mov r0, r8 -1001ea6e: 2100 movs r1, #0 -1001ea70: 2278 movs r2, #120 ; 0x78 -1001ea72: f7f8 fcdd bl 10017430 -1001ea76: f8b4 3450 ldrh.w r3, [r4, #1104] ; 0x450 -1001ea7a: b93b cbnz r3, 1001ea8c -1001ea7c: 6973 ldr r3, [r6, #20] -1001ea7e: f240 6252 movw r2, #1618 ; 0x652 -1001ea82: 61b3 str r3, [r6, #24] -1001ea84: 3328 adds r3, #40 ; 0x28 -1001ea86: 4293 cmp r3, r2 -1001ea88: d85a bhi.n 1001eb40 -1001ea8a: e064 b.n 1001eb56 -1001ea8c: f104 0534 add.w r5, r4, #52 ; 0x34 -1001ea90: 4628 mov r0, r5 -1001ea92: a906 add r1, sp, #24 -1001ea94: f7f8 fd98 bl 100175c8 -1001ea98: f8d4 b02c ldr.w fp, [r4, #44] ; 0x2c -1001ea9c: f104 0a2c add.w sl, r4, #44 ; 0x2c -1001eaa0: 4650 mov r0, sl -1001eaa2: 4659 mov r1, fp -1001eaa4: f7f8 fd6d bl 10017582 -1001eaa8: 2801 cmp r0, #1 -1001eaaa: d021 beq.n 1001eaf0 -1001eaac: 4658 mov r0, fp -1001eaae: f850 3ba4 ldr.w r3, [r0], #164 -1001eab2: 212d movs r1, #45 ; 0x2d -1001eab4: 9303 str r3, [sp, #12] -1001eab6: f8db 3094 ldr.w r3, [fp, #148] ; 0x94 -1001eaba: aa07 add r2, sp, #28 -1001eabc: 3b0c subs r3, #12 -1001eabe: f01f fef3 bl 1003e8a8 <__rtw_get_ie_veneer> -1001eac2: b120 cbz r0, 1001eace -1001eac4: 9b07 ldr r3, [sp, #28] -1001eac6: b113 cbz r3, 1001eace -1001eac8: f8dd b00c ldr.w fp, [sp, #12] -1001eacc: e7e8 b.n 1001eaa0 -1001eace: f8db 3068 ldr.w r3, [fp, #104] ; 0x68 -1001ead2: 1e5a subs r2, r3, #1 -1001ead4: 2a0d cmp r2, #13 -1001ead6: d8f7 bhi.n 1001eac8 -1001ead8: aa2a add r2, sp, #168 ; 0xa8 -1001eada: 441a add r2, r3 -1001eadc: 2301 movs r3, #1 -1001eade: f802 3c78 strb.w r3, [r2, #-120] -1001eae2: f89d 2030 ldrb.w r2, [sp, #48] ; 0x30 -1001eae6: 2a00 cmp r2, #0 -1001eae8: d1ee bne.n 1001eac8 -1001eaea: f88d 3030 strb.w r3, [sp, #48] ; 0x30 -1001eaee: e7eb b.n 1001eac8 -1001eaf0: 4628 mov r0, r5 -1001eaf2: a906 add r1, sp, #24 -1001eaf4: f7f8 fd72 bl 100175dc -1001eaf8: 2500 movs r5, #0 -1001eafa: ebc5 1305 rsb r3, r5, r5, lsl #4 -1001eafe: f818 2003 ldrb.w r2, [r8, r3] -1001eb02: 2a01 cmp r2, #1 -1001eb04: d118 bne.n 1001eb38 -1001eb06: eb08 0103 add.w r1, r8, r3 -1001eb0a: f88d 5020 strb.w r5, [sp, #32] -1001eb0e: 4613 mov r3, r2 -1001eb10: 5cc8 ldrb r0, [r1, r3] -1001eb12: 2801 cmp r0, #1 -1001eb14: d106 bne.n 1001eb24 -1001eb16: 2a0f cmp r2, #15 -1001eb18: dc04 bgt.n 1001eb24 -1001eb1a: a82a add r0, sp, #168 ; 0xa8 -1001eb1c: 4410 add r0, r2 -1001eb1e: f800 3c88 strb.w r3, [r0, #-136] -1001eb22: 3201 adds r2, #1 -1001eb24: 3301 adds r3, #1 -1001eb26: 2b0f cmp r3, #15 -1001eb28: d1f2 bne.n 1001eb10 -1001eb2a: 4648 mov r0, r9 -1001eb2c: 9700 str r7, [sp, #0] -1001eb2e: 2149 movs r1, #73 ; 0x49 -1001eb30: ab08 add r3, sp, #32 -1001eb32: f01f febd bl 1003e8b0 <__rtw_set_ie_veneer> -1001eb36: 4681 mov r9, r0 -1001eb38: 3501 adds r5, #1 -1001eb3a: 2d08 cmp r5, #8 -1001eb3c: d1dd bne.n 1001eafa -1001eb3e: e79d b.n 1001ea7c -1001eb40: 4b08 ldr r3, [pc, #32] ; (1001eb64 ) -1001eb42: 681b ldr r3, [r3, #0] -1001eb44: b13b cbz r3, 1001eb56 -1001eb46: 4808 ldr r0, [pc, #32] ; (1001eb68 ) -1001eb48: f7fc f80a bl 1001ab60 -1001eb4c: 4b07 ldr r3, [pc, #28] ; (1001eb6c ) -1001eb4e: f8d3 0178 ldr.w r0, [r3, #376] ; 0x178 -1001eb52: f7fc f805 bl 1001ab60 -1001eb56: 4620 mov r0, r4 -1001eb58: 4631 mov r1, r6 -1001eb5a: f7ff feb6 bl 1001e8ca -1001eb5e: b02b add sp, #172 ; 0xac -1001eb60: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1001eb64: 10044ec0 .word 0x10044ec0 -1001eb68: 10042939 .word 0x10042939 -1001eb6c: 10043a4c .word 0x10043a4c - -1001eb70 : -1001eb70: b51f push {r0, r1, r2, r3, r4, lr} -1001eb72: f8ad 3006 strh.w r3, [sp, #6] -1001eb76: f641 0334 movw r3, #6196 ; 0x1834 -1001eb7a: 9100 str r1, [sp, #0] -1001eb7c: f8ad 2004 strh.w r2, [sp, #4] -1001eb80: 58c0 ldr r0, [r0, r3] -1001eb82: f648 4110 movw r1, #35856 ; 0x8c10 -1001eb86: 466a mov r2, sp -1001eb88: 2300 movs r3, #0 -1001eb8a: f014 ffd1 bl 10033b30 -1001eb8e: b005 add sp, #20 -1001eb90: f85d fb04 ldr.w pc, [sp], #4 - -1001eb94 <_mgt_dispatcher.isra.4>: -1001eb94: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1001eb96: 4b17 ldr r3, [pc, #92] ; (1001ebf4 <_mgt_dispatcher.isra.4+0x60>) -1001eb98: 4604 mov r4, r0 -1001eb9a: 6818 ldr r0, [r3, #0] -1001eb9c: 889b ldrh r3, [r3, #4] -1001eb9e: 460e mov r6, r1 -1001eba0: f8ad 3004 strh.w r3, [sp, #4] -1001eba4: 680b ldr r3, [r1, #0] -1001eba6: 4615 mov r5, r2 -1001eba8: 9000 str r0, [sp, #0] -1001ebaa: b303 cbz r3, 1001ebee <_mgt_dispatcher.isra.4+0x5a> -1001ebac: 4b12 ldr r3, [pc, #72] ; (1001ebf8 <_mgt_dispatcher.isra.4+0x64>) -1001ebae: 6f97 ldr r7, [r2, #120] ; 0x78 -1001ebb0: 681b ldr r3, [r3, #0] -1001ebb2: 6f12 ldr r2, [r2, #112] ; 0x70 -1001ebb4: b133 cbz r3, 1001ebc4 <_mgt_dispatcher.isra.4+0x30> -1001ebb6: 4620 mov r0, r4 -1001ebb8: 4639 mov r1, r7 -1001ebba: b292 uxth r2, r2 -1001ebbc: f894 351e ldrb.w r3, [r4, #1310] ; 0x51e -1001ebc0: f7ff ffd6 bl 1001eb70 -1001ebc4: 3704 adds r7, #4 -1001ebc6: f504 51a4 add.w r1, r4, #5248 ; 0x1480 -1001ebca: 4638 mov r0, r7 -1001ebcc: 3119 adds r1, #25 -1001ebce: 2206 movs r2, #6 -1001ebd0: f7f8 fc26 bl 10017420 -1001ebd4: b120 cbz r0, 1001ebe0 <_mgt_dispatcher.isra.4+0x4c> -1001ebd6: 6833 ldr r3, [r6, #0] -1001ebd8: 4620 mov r0, r4 -1001ebda: 4629 mov r1, r5 -1001ebdc: 4798 blx r3 -1001ebde: e006 b.n 1001ebee <_mgt_dispatcher.isra.4+0x5a> -1001ebe0: 4638 mov r0, r7 -1001ebe2: 4669 mov r1, sp -1001ebe4: 2206 movs r2, #6 -1001ebe6: f7f8 fc1b bl 10017420 -1001ebea: 2800 cmp r0, #0 -1001ebec: d1f3 bne.n 1001ebd6 <_mgt_dispatcher.isra.4+0x42> -1001ebee: b003 add sp, #12 -1001ebf0: bdf0 pop {r4, r5, r6, r7, pc} -1001ebf2: bf00 nop -1001ebf4: 10041399 .word 0x10041399 -1001ebf8: 1004bb00 .word 0x1004bb00 - -1001ebfc : -1001ebfc: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1001ebfe: 4b1d ldr r3, [pc, #116] ; (1001ec74 ) -1001ec00: 4604 mov r4, r0 -1001ec02: 6818 ldr r0, [r3, #0] -1001ec04: 889b ldrh r3, [r3, #4] -1001ec06: 6f8e ldr r6, [r1, #120] ; 0x78 -1001ec08: 9000 str r0, [sp, #0] -1001ec0a: f8ad 3004 strh.w r3, [sp, #4] -1001ec0e: 8833 ldrh r3, [r6, #0] -1001ec10: 460d mov r5, r1 -1001ec12: f003 030c and.w r3, r3, #12 -1001ec16: bb5b cbnz r3, 1001ec70 -1001ec18: 1d37 adds r7, r6, #4 -1001ec1a: f504 51a4 add.w r1, r4, #5248 ; 0x1480 -1001ec1e: 4638 mov r0, r7 -1001ec20: 3119 adds r1, #25 -1001ec22: 2206 movs r2, #6 -1001ec24: f7f8 fbfc bl 10017420 -1001ec28: b130 cbz r0, 1001ec38 -1001ec2a: 8833 ldrh r3, [r6, #0] -1001ec2c: f003 03fc and.w r3, r3, #252 ; 0xfc -1001ec30: 091a lsrs r2, r3, #4 -1001ec32: 2a0d cmp r2, #13 -1001ec34: dc1c bgt.n 1001ec70 -1001ec36: e006 b.n 1001ec46 -1001ec38: 4638 mov r0, r7 -1001ec3a: 4669 mov r1, sp -1001ec3c: 2206 movs r2, #6 -1001ec3e: f7f8 fbef bl 10017420 -1001ec42: b1a8 cbz r0, 1001ec70 -1001ec44: e7f1 b.n 1001ec2a -1001ec46: 490c ldr r1, [pc, #48] ; (1001ec78 ) -1001ec48: 2b40 cmp r3, #64 ; 0x40 -1001ec4a: eb01 02c2 add.w r2, r1, r2, lsl #3 -1001ec4e: f102 0104 add.w r1, r2, #4 -1001ec52: d009 beq.n 1001ec68 -1001ec54: d908 bls.n 1001ec68 -1001ec56: 2bb0 cmp r3, #176 ; 0xb0 -1001ec58: d106 bne.n 1001ec68 -1001ec5a: 6923 ldr r3, [r4, #16] -1001ec5c: 06db lsls r3, r3, #27 -1001ec5e: d501 bpl.n 1001ec64 -1001ec60: 4b06 ldr r3, [pc, #24] ; (1001ec7c ) -1001ec62: e000 b.n 1001ec66 -1001ec64: 4b06 ldr r3, [pc, #24] ; (1001ec80 ) -1001ec66: 6053 str r3, [r2, #4] -1001ec68: 4620 mov r0, r4 -1001ec6a: 462a mov r2, r5 -1001ec6c: f7ff ff92 bl 1001eb94 <_mgt_dispatcher.isra.4> -1001ec70: b003 add sp, #12 -1001ec72: bdf0 pop {r4, r5, r6, r7, pc} -1001ec74: 10041399 .word 0x10041399 -1001ec78: 10044ec4 .word 0x10044ec4 -1001ec7c: 1001f815 .word 0x1001f815 -1001ec80: 10020a89 .word 0x10020a89 - -1001ec84 : -1001ec84: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -1001ec88: 460e mov r6, r1 -1001ec8a: 4617 mov r7, r2 -1001ec8c: 2100 movs r1, #0 -1001ec8e: aa01 add r2, sp, #4 -1001ec90: 4633 mov r3, r6 -1001ec92: 4680 mov r8, r0 -1001ec94: f01f fe08 bl 1003e8a8 <__rtw_get_ie_veneer> -1001ec98: b1d8 cbz r0, 1001ecd2 -1001ec9a: 9a01 ldr r2, [sp, #4] -1001ec9c: b1b2 cbz r2, 1001eccc -1001ec9e: 2f01 cmp r7, #1 -1001eca0: f04f 0400 mov.w r4, #0 -1001eca4: d006 beq.n 1001ecb4 -1001eca6: 2f02 cmp r7, #2 -1001eca8: d112 bne.n 1001ecd0 -1001ecaa: 3002 adds r0, #2 -1001ecac: 4621 mov r1, r4 -1001ecae: f7f8 fbbf bl 10017430 -1001ecb2: e00d b.n 1001ecd0 -1001ecb4: 1c95 adds r5, r2, #2 -1001ecb6: 1941 adds r1, r0, r5 -1001ecb8: ebc1 0208 rsb r2, r1, r8 -1001ecbc: 7044 strb r4, [r0, #1] -1001ecbe: 4432 add r2, r6 -1001ecc0: 3002 adds r0, #2 -1001ecc2: f7f8 fba5 bl 10017410 -1001ecc6: 9801 ldr r0, [sp, #4] -1001ecc8: 4240 negs r0, r0 -1001ecca: e002 b.n 1001ecd2 -1001eccc: 4610 mov r0, r2 -1001ecce: e000 b.n 1001ecd2 -1001ecd0: 4620 mov r0, r4 -1001ecd2: b002 add sp, #8 -1001ecd4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1001ecd8 : -1001ecd8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001ecdc: 4b8d ldr r3, [pc, #564] ; (1001ef14 ) -1001ecde: 4604 mov r4, r0 -1001ece0: 6818 ldr r0, [r3, #0] -1001ece2: b089 sub sp, #36 ; 0x24 -1001ece4: 889b ldrh r3, [r3, #4] -1001ece6: 9006 str r0, [sp, #24] -1001ece8: f604 1058 addw r0, r4, #2392 ; 0x958 -1001ecec: f8ad 301c strh.w r3, [sp, #28] -1001ecf0: f7ff fd6c bl 1001e7cc -1001ecf4: 4605 mov r5, r0 -1001ecf6: 2800 cmp r0, #0 -1001ecf8: f000 8109 beq.w 1001ef0e -1001ecfc: f204 5804 addw r8, r4, #1284 ; 0x504 -1001ed00: 4640 mov r0, r8 -1001ed02: a904 add r1, sp, #16 -1001ed04: f7f8 fc60 bl 100175c8 -1001ed08: 4620 mov r0, r4 -1001ed0a: f105 0108 add.w r1, r5, #8 -1001ed0e: f7ff fd7c bl 1001e80a -1001ed12: 2310 movs r3, #16 -1001ed14: f885 3068 strb.w r3, [r5, #104] ; 0x68 -1001ed18: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 -1001ed1c: 2100 movs r1, #0 -1001ed1e: 2268 movs r2, #104 ; 0x68 -1001ed20: f7f8 fb86 bl 10017430 -1001ed24: f8d5 6080 ldr.w r6, [r5, #128] ; 0x80 -1001ed28: 2700 movs r7, #0 -1001ed2a: f106 002c add.w r0, r6, #44 ; 0x2c -1001ed2e: a906 add r1, sp, #24 -1001ed30: 2206 movs r2, #6 -1001ed32: f886 7028 strb.w r7, [r6, #40] ; 0x28 -1001ed36: f886 7029 strb.w r7, [r6, #41] ; 0x29 -1001ed3a: f7f8 fb69 bl 10017410 -1001ed3e: f504 51a4 add.w r1, r4, #5248 ; 0x1480 -1001ed42: 3119 adds r1, #25 -1001ed44: 2206 movs r2, #6 -1001ed46: f106 0032 add.w r0, r6, #50 ; 0x32 -1001ed4a: f7f8 fb61 bl 10017410 -1001ed4e: f104 0098 add.w r0, r4, #152 ; 0x98 -1001ed52: f009 fd05 bl 10028760 -1001ed56: 2206 movs r2, #6 -1001ed58: 4601 mov r1, r0 -1001ed5a: f106 0038 add.w r0, r6, #56 ; 0x38 -1001ed5e: f7f8 fb57 bl 10017410 -1001ed62: 8ff3 ldrh r3, [r6, #62] ; 0x3e -1001ed64: f504 798a add.w r9, r4, #276 ; 0x114 -1001ed68: f003 030f and.w r3, r3, #15 -1001ed6c: 87f3 strh r3, [r6, #62] ; 0x3e -1001ed6e: 8d33 ldrh r3, [r6, #40] ; 0x28 -1001ed70: f106 0a4c add.w sl, r6, #76 ; 0x4c -1001ed74: f023 03fc bic.w r3, r3, #252 ; 0xfc -1001ed78: f043 0380 orr.w r3, r3, #128 ; 0x80 -1001ed7c: 8533 strh r3, [r6, #40] ; 0x28 -1001ed7e: 2318 movs r3, #24 -1001ed80: 616b str r3, [r5, #20] -1001ed82: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -1001ed86: f003 0303 and.w r3, r3, #3 -1001ed8a: 2b03 cmp r3, #3 -1001ed8c: d149 bne.n 1001ee22 -1001ed8e: 3640 adds r6, #64 ; 0x40 -1001ed90: 4630 mov r0, r6 -1001ed92: 4649 mov r1, r9 -1001ed94: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 -1001ed98: f7f8 fb3a bl 10017410 -1001ed9c: f8d4 1110 ldr.w r1, [r4, #272] ; 0x110 -1001eda0: 4650 mov r0, sl -1001eda2: 390c subs r1, #12 -1001eda4: f894 2740 ldrb.w r2, [r4, #1856] ; 0x740 -1001eda8: f7ff ff6c bl 1001ec84 -1001edac: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001edb0: 4418 add r0, r3 -1001edb2: 696b ldr r3, [r5, #20] -1001edb4: 4406 add r6, r0 -1001edb6: 4418 add r0, r3 -1001edb8: 6863 ldr r3, [r4, #4] -1001edba: 6168 str r0, [r5, #20] -1001edbc: 2b05 cmp r3, #5 -1001edbe: d112 bne.n 1001ede6 -1001edc0: f241 63a8 movw r3, #5800 ; 0x16a8 -1001edc4: 58e3 ldr r3, [r4, r3] -1001edc6: 2b03 cmp r3, #3 -1001edc8: d10d bne.n 1001ede6 -1001edca: f8d4 14dc ldr.w r1, [r4, #1244] ; 0x4dc -1001edce: f8d4 74f0 ldr.w r7, [r4, #1264] ; 0x4f0 -1001edd2: b121 cbz r1, 1001edde -1001edd4: b11f cbz r7, 1001edde -1001edd6: 4630 mov r0, r6 -1001edd8: 463a mov r2, r7 -1001edda: f7f8 fb19 bl 10017410 -1001edde: 696b ldr r3, [r5, #20] -1001ede0: 443e add r6, r7 -1001ede2: 441f add r7, r3 -1001ede4: 616f str r7, [r5, #20] -1001ede6: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 -1001edea: 2b00 cmp r3, #0 -1001edec: d073 beq.n 1001eed6 -1001edee: 2700 movs r7, #0 -1001edf0: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 -1001edf4: 429f cmp r7, r3 -1001edf6: dc6e bgt.n 1001eed6 -1001edf8: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc -1001edfc: eb03 02c7 add.w r2, r3, r7, lsl #3 -1001ee00: 7912 ldrb r2, [r2, #4] -1001ee02: 0752 lsls r2, r2, #29 -1001ee04: d50b bpl.n 1001ee1e -1001ee06: f853 3037 ldr.w r3, [r3, r7, lsl #3] -1001ee0a: f105 0014 add.w r0, r5, #20 -1001ee0e: 7819 ldrb r1, [r3, #0] -1001ee10: 785a ldrb r2, [r3, #1] -1001ee12: 9000 str r0, [sp, #0] -1001ee14: 3302 adds r3, #2 -1001ee16: 4630 mov r0, r6 -1001ee18: f01f fd4a bl 1003e8b0 <__rtw_set_ie_veneer> -1001ee1c: 4606 mov r6, r0 -1001ee1e: 3701 adds r7, #1 -1001ee20: e7e6 b.n 1001edf0 -1001ee22: 2320 movs r3, #32 -1001ee24: 616b str r3, [r5, #20] -1001ee26: 4648 mov r0, r9 -1001ee28: f7fe fbd1 bl 1001d5ce -1001ee2c: 2202 movs r2, #2 -1001ee2e: 4601 mov r1, r0 -1001ee30: f106 0048 add.w r0, r6, #72 ; 0x48 -1001ee34: f7f8 faec bl 10017410 -1001ee38: 696b ldr r3, [r5, #20] -1001ee3a: 4648 mov r0, r9 -1001ee3c: 3302 adds r3, #2 -1001ee3e: 616b str r3, [r5, #20] -1001ee40: f7fe fbb6 bl 1001d5b0 -1001ee44: 2202 movs r2, #2 -1001ee46: 4601 mov r1, r0 -1001ee48: f106 004a add.w r0, r6, #74 ; 0x4a -1001ee4c: f7f8 fae0 bl 10017410 -1001ee50: 696b ldr r3, [r5, #20] -1001ee52: 462e mov r6, r5 -1001ee54: 3302 adds r3, #2 -1001ee56: f846 3f14 str.w r3, [r6, #20]! -1001ee5a: f8d4 20a4 ldr.w r2, [r4, #164] ; 0xa4 -1001ee5e: 4639 mov r1, r7 -1001ee60: f104 03a8 add.w r3, r4, #168 ; 0xa8 -1001ee64: 4650 mov r0, sl -1001ee66: 9600 str r6, [sp, #0] -1001ee68: f01f fd22 bl 1003e8b0 <__rtw_set_ie_veneer> -1001ee6c: f104 0afc add.w sl, r4, #252 ; 0xfc -1001ee70: 4683 mov fp, r0 -1001ee72: 4650 mov r0, sl -1001ee74: f01f fd90 bl 1003e998 <__rtw_get_rateset_len_veneer> -1001ee78: 4681 mov r9, r0 -1001ee7a: f1b9 0f08 cmp.w r9, #8 -1001ee7e: bf34 ite cc -1001ee80: 464a movcc r2, r9 -1001ee82: 2208 movcs r2, #8 -1001ee84: 2101 movs r1, #1 -1001ee86: 4653 mov r3, sl -1001ee88: 9600 str r6, [sp, #0] -1001ee8a: 4658 mov r0, fp -1001ee8c: f01f fd10 bl 1003e8b0 <__rtw_set_ie_veneer> -1001ee90: 2103 movs r1, #3 -1001ee92: 2201 movs r2, #1 -1001ee94: f104 03e4 add.w r3, r4, #228 ; 0xe4 -1001ee98: 9600 str r6, [sp, #0] -1001ee9a: f01f fd09 bl 1003e8b0 <__rtw_set_ie_veneer> -1001ee9e: ab08 add r3, sp, #32 -1001eea0: f843 7d0c str.w r7, [r3, #-12]! -1001eea4: 2106 movs r1, #6 -1001eea6: 2202 movs r2, #2 -1001eea8: 9600 str r6, [sp, #0] -1001eeaa: f88d 700f strb.w r7, [sp, #15] -1001eeae: f01f fcff bl 1003e8b0 <__rtw_set_ie_veneer> -1001eeb2: 9600 str r6, [sp, #0] -1001eeb4: 212a movs r1, #42 ; 0x2a -1001eeb6: 2201 movs r2, #1 -1001eeb8: f10d 030f add.w r3, sp, #15 -1001eebc: f01f fcf8 bl 1003e8b0 <__rtw_set_ie_veneer> -1001eec0: f1b9 0f08 cmp.w r9, #8 -1001eec4: d907 bls.n 1001eed6 -1001eec6: 9600 str r6, [sp, #0] -1001eec8: 2132 movs r1, #50 ; 0x32 -1001eeca: f1a9 0208 sub.w r2, r9, #8 -1001eece: f504 7382 add.w r3, r4, #260 ; 0x104 -1001eed2: f01f fced bl 1003e8b0 <__rtw_set_ie_veneer> -1001eed6: a904 add r1, sp, #16 -1001eed8: 4640 mov r0, r8 -1001eeda: f7f8 fb7f bl 100175dc -1001eede: 696b ldr r3, [r5, #20] -1001eee0: f240 6252 movw r2, #1618 ; 0x652 -1001eee4: f103 0128 add.w r1, r3, #40 ; 0x28 -1001eee8: 4291 cmp r1, r2 -1001eeea: d90b bls.n 1001ef04 -1001eeec: 4b0a ldr r3, [pc, #40] ; (1001ef18 ) -1001eeee: 681b ldr r3, [r3, #0] -1001eef0: b16b cbz r3, 1001ef0e -1001eef2: 480a ldr r0, [pc, #40] ; (1001ef1c ) -1001eef4: f7fb fe34 bl 1001ab60 -1001eef8: 4b09 ldr r3, [pc, #36] ; (1001ef20 ) -1001eefa: f8d3 0150 ldr.w r0, [r3, #336] ; 0x150 -1001eefe: f7fb fe2f bl 1001ab60 -1001ef02: e004 b.n 1001ef0e -1001ef04: 61ab str r3, [r5, #24] -1001ef06: 4620 mov r0, r4 -1001ef08: 4629 mov r1, r5 -1001ef0a: f7ff fcde bl 1001e8ca -1001ef0e: b009 add sp, #36 ; 0x24 -1001ef10: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1001ef14: 10041399 .word 0x10041399 -1001ef18: 10044ec0 .word 0x10044ec0 -1001ef1c: 10042939 .word 0x10042939 -1001ef20: 10043a4c .word 0x10043a4c - -1001ef24 : -1001ef24: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001ef28: 4604 mov r4, r0 -1001ef2a: b089 sub sp, #36 ; 0x24 -1001ef2c: f600 1058 addw r0, r0, #2392 ; 0x958 -1001ef30: 460f mov r7, r1 -1001ef32: 9205 str r2, [sp, #20] -1001ef34: f7ff fc4a bl 1001e7cc -1001ef38: 4605 mov r5, r0 -1001ef3a: 2800 cmp r0, #0 -1001ef3c: f000 81a4 beq.w 1001f288 -1001ef40: 4620 mov r0, r4 -1001ef42: f105 0108 add.w r1, r5, #8 -1001ef46: f7ff fc60 bl 1001e80a -1001ef4a: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 -1001ef4e: 2100 movs r1, #0 -1001ef50: 2268 movs r2, #104 ; 0x68 -1001ef52: f7f8 fa6d bl 10017430 -1001ef56: f8d5 6080 ldr.w r6, [r5, #128] ; 0x80 -1001ef5a: f04f 0800 mov.w r8, #0 -1001ef5e: f106 002c add.w r0, r6, #44 ; 0x2c -1001ef62: 4639 mov r1, r7 -1001ef64: 2206 movs r2, #6 -1001ef66: f886 8028 strb.w r8, [r6, #40] ; 0x28 -1001ef6a: f886 8029 strb.w r8, [r6, #41] ; 0x29 -1001ef6e: f7f8 fa4f bl 10017410 -1001ef72: f504 51a4 add.w r1, r4, #5248 ; 0x1480 -1001ef76: f106 0032 add.w r0, r6, #50 ; 0x32 -1001ef7a: 3119 adds r1, #25 -1001ef7c: 2206 movs r2, #6 -1001ef7e: f7f8 fa47 bl 10017410 -1001ef82: f104 019c add.w r1, r4, #156 ; 0x9c -1001ef86: 2206 movs r2, #6 -1001ef88: f106 0038 add.w r0, r6, #56 ; 0x38 -1001ef8c: f7f8 fa40 bl 10017410 -1001ef90: 8ff3 ldrh r3, [r6, #62] ; 0x3e -1001ef92: f8b4 251c ldrh.w r2, [r4, #1308] ; 0x51c -1001ef96: f003 030f and.w r3, r3, #15 -1001ef9a: ea43 1302 orr.w r3, r3, r2, lsl #4 -1001ef9e: 87f3 strh r3, [r6, #62] ; 0x3e -1001efa0: f8b4 351c ldrh.w r3, [r4, #1308] ; 0x51c -1001efa4: 3301 adds r3, #1 -1001efa6: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c -1001efaa: 8d33 ldrh r3, [r6, #40] ; 0x28 -1001efac: f023 03fc bic.w r3, r3, #252 ; 0xfc -1001efb0: f043 0350 orr.w r3, r3, #80 ; 0x50 -1001efb4: 8533 strh r3, [r6, #40] ; 0x28 -1001efb6: 2318 movs r3, #24 -1001efb8: 826b strh r3, [r5, #18] -1001efba: 616b str r3, [r5, #20] -1001efbc: f8d4 1110 ldr.w r1, [r4, #272] ; 0x110 -1001efc0: f5b1 7f40 cmp.w r1, #768 ; 0x300 -1001efc4: f200 8160 bhi.w 1001f288 -1001efc8: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -1001efcc: f504 778a add.w r7, r4, #276 ; 0x114 -1001efd0: f003 0303 and.w r3, r3, #3 -1001efd4: 2b03 cmp r3, #3 -1001efd6: f040 80c5 bne.w 1001f164 -1001efda: f504 7c90 add.w ip, r4, #288 ; 0x120 -1001efde: 4660 mov r0, ip -1001efe0: 4642 mov r2, r8 -1001efe2: ab06 add r3, sp, #24 -1001efe4: 390c subs r1, #12 -1001efe6: f8cd c00c str.w ip, [sp, #12] -1001efea: f01f fc4d bl 1003e888 <__rtw_get_wps_ie_veneer> -1001efee: f8d4 24c8 ldr.w r2, [r4, #1224] ; 0x4c8 -1001eff2: 3640 adds r6, #64 ; 0x40 -1001eff4: 4682 mov sl, r0 -1001eff6: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001effa: f8dd c00c ldr.w ip, [sp, #12] -1001effe: 2a00 cmp r2, #0 -1001f000: d062 beq.n 1001f0c8 -1001f002: 2800 cmp r0, #0 -1001f004: d060 beq.n 1001f0c8 -1001f006: f8dd b018 ldr.w fp, [sp, #24] -1001f00a: f1bb 0f00 cmp.w fp, #0 -1001f00e: d05b beq.n 1001f0c8 -1001f010: ebc7 0800 rsb r8, r7, r0 -1001f014: ebc8 0903 rsb r9, r8, r3 -1001f018: 4660 mov r0, ip -1001f01a: 3b0c subs r3, #12 -1001f01c: 2105 movs r1, #5 -1001f01e: aa07 add r2, sp, #28 -1001f020: f01f fc42 bl 1003e8a8 <__rtw_get_ie_veneer> -1001f024: ebcb 0909 rsb r9, fp, r9 -1001f028: 4603 mov r3, r0 -1001f02a: b1f8 cbz r0, 1001f06c -1001f02c: 9a07 ldr r2, [sp, #28] -1001f02e: b1ea cbz r2, 1001f06c -1001f030: ebc7 0c00 rsb ip, r7, r0 -1001f034: 3202 adds r2, #2 -1001f036: 4630 mov r0, r6 -1001f038: 9207 str r2, [sp, #28] -1001f03a: 4639 mov r1, r7 -1001f03c: 4662 mov r2, ip -1001f03e: 9304 str r3, [sp, #16] -1001f040: f8cd c00c str.w ip, [sp, #12] -1001f044: f7f8 f9e4 bl 10017410 -1001f048: 9b04 ldr r3, [sp, #16] -1001f04a: 9907 ldr r1, [sp, #28] -1001f04c: f8dd c00c ldr.w ip, [sp, #12] -1001f050: 4419 add r1, r3 -1001f052: eb06 000c add.w r0, r6, ip -1001f056: ebc1 020a rsb r2, r1, sl -1001f05a: f7f8 f9d9 bl 10017410 -1001f05e: 9b07 ldr r3, [sp, #28] -1001f060: 696a ldr r2, [r5, #20] -1001f062: ebc3 0308 rsb r3, r3, r8 -1001f066: 441e add r6, r3 -1001f068: 4413 add r3, r2 -1001f06a: e007 b.n 1001f07c -1001f06c: 4630 mov r0, r6 -1001f06e: 4639 mov r1, r7 -1001f070: 4642 mov r2, r8 -1001f072: f7f8 f9cd bl 10017410 -1001f076: 696b ldr r3, [r5, #20] -1001f078: 4446 add r6, r8 -1001f07a: 4443 add r3, r8 -1001f07c: f8d4 14c8 ldr.w r1, [r4, #1224] ; 0x4c8 -1001f080: 616b str r3, [r5, #20] -1001f082: 784a ldrb r2, [r1, #1] -1001f084: 9206 str r2, [sp, #24] -1001f086: 3202 adds r2, #2 -1001f088: eb08 0302 add.w r3, r8, r2 -1001f08c: f5b3 7f40 cmp.w r3, #768 ; 0x300 -1001f090: d809 bhi.n 1001f0a6 -1001f092: 4630 mov r0, r6 -1001f094: f7f8 f9bc bl 10017410 -1001f098: 9b06 ldr r3, [sp, #24] -1001f09a: 1c9a adds r2, r3, #2 -1001f09c: 4416 add r6, r2 -1001f09e: 696a ldr r2, [r5, #20] -1001f0a0: 4413 add r3, r2 -1001f0a2: 3302 adds r3, #2 -1001f0a4: 616b str r3, [r5, #20] -1001f0a6: 9b06 ldr r3, [sp, #24] -1001f0a8: 3302 adds r3, #2 -1001f0aa: 4498 add r8, r3 -1001f0ac: 44c8 add r8, r9 -1001f0ae: f5b8 7f40 cmp.w r8, #768 ; 0x300 -1001f0b2: d839 bhi.n 1001f128 -1001f0b4: 4630 mov r0, r6 -1001f0b6: eb0a 010b add.w r1, sl, fp -1001f0ba: 464a mov r2, r9 -1001f0bc: f7f8 f9a8 bl 10017410 -1001f0c0: 696b ldr r3, [r5, #20] -1001f0c2: 444e add r6, r9 -1001f0c4: 444b add r3, r9 -1001f0c6: e02e b.n 1001f126 -1001f0c8: 4660 mov r0, ip -1001f0ca: 2105 movs r1, #5 -1001f0cc: aa07 add r2, sp, #28 -1001f0ce: 3b0c subs r3, #12 -1001f0d0: f01f fbea bl 1003e8a8 <__rtw_get_ie_veneer> -1001f0d4: 4680 mov r8, r0 -1001f0d6: b1d8 cbz r0, 1001f110 -1001f0d8: 9b07 ldr r3, [sp, #28] -1001f0da: b1cb cbz r3, 1001f110 -1001f0dc: ebc7 0900 rsb r9, r7, r0 -1001f0e0: 3302 adds r3, #2 -1001f0e2: 4639 mov r1, r7 -1001f0e4: 4630 mov r0, r6 -1001f0e6: 464a mov r2, r9 -1001f0e8: 9307 str r3, [sp, #28] -1001f0ea: f7f8 f991 bl 10017410 -1001f0ee: 9907 ldr r1, [sp, #28] -1001f0f0: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 -1001f0f4: ebc8 0707 rsb r7, r8, r7 -1001f0f8: 1a52 subs r2, r2, r1 -1001f0fa: 443a add r2, r7 -1001f0fc: eb06 0009 add.w r0, r6, r9 -1001f100: 4441 add r1, r8 -1001f102: f7f8 f985 bl 10017410 -1001f106: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 -1001f10a: 9b07 ldr r3, [sp, #28] -1001f10c: 1ad3 subs r3, r2, r3 -1001f10e: e007 b.n 1001f120 -1001f110: 4630 mov r0, r6 -1001f112: 4639 mov r1, r7 -1001f114: f8d4 2110 ldr.w r2, [r4, #272] ; 0x110 -1001f118: f7f8 f97a bl 10017410 -1001f11c: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001f120: 696a ldr r2, [r5, #20] -1001f122: 441e add r6, r3 -1001f124: 4413 add r3, r2 -1001f126: 616b str r3, [r5, #20] -1001f128: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 -1001f12c: 2b00 cmp r3, #0 -1001f12e: d07e beq.n 1001f22e -1001f130: 2700 movs r7, #0 -1001f132: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 -1001f136: 429f cmp r7, r3 -1001f138: dc79 bgt.n 1001f22e -1001f13a: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc -1001f13e: eb03 02c7 add.w r2, r3, r7, lsl #3 -1001f142: 7912 ldrb r2, [r2, #4] -1001f144: 0792 lsls r2, r2, #30 -1001f146: d50b bpl.n 1001f160 -1001f148: f853 3037 ldr.w r3, [r3, r7, lsl #3] -1001f14c: f105 0014 add.w r0, r5, #20 -1001f150: 7819 ldrb r1, [r3, #0] -1001f152: 785a ldrb r2, [r3, #1] -1001f154: 9000 str r0, [sp, #0] -1001f156: 3302 adds r3, #2 -1001f158: 4630 mov r0, r6 -1001f15a: f01f fba9 bl 1003e8b0 <__rtw_set_ie_veneer> -1001f15e: 4606 mov r6, r0 -1001f160: 3701 adds r7, #1 -1001f162: e7e6 b.n 1001f132 -1001f164: 2320 movs r3, #32 -1001f166: 616b str r3, [r5, #20] -1001f168: 4638 mov r0, r7 -1001f16a: f7fe fa30 bl 1001d5ce -1001f16e: 2202 movs r2, #2 -1001f170: 4601 mov r1, r0 -1001f172: f106 0048 add.w r0, r6, #72 ; 0x48 -1001f176: f7f8 f94b bl 10017410 -1001f17a: 696b ldr r3, [r5, #20] -1001f17c: 4638 mov r0, r7 -1001f17e: 3302 adds r3, #2 -1001f180: 616b str r3, [r5, #20] -1001f182: f7fe fa15 bl 1001d5b0 -1001f186: 2202 movs r2, #2 -1001f188: 4601 mov r1, r0 -1001f18a: f106 004a add.w r0, r6, #74 ; 0x4a -1001f18e: f7f8 f93f bl 10017410 -1001f192: 696b ldr r3, [r5, #20] -1001f194: 462f mov r7, r5 -1001f196: 3302 adds r3, #2 -1001f198: f847 3f14 str.w r3, [r7, #20]! -1001f19c: f8d4 20a4 ldr.w r2, [r4, #164] ; 0xa4 -1001f1a0: 4641 mov r1, r8 -1001f1a2: f104 03a8 add.w r3, r4, #168 ; 0xa8 -1001f1a6: f106 004c add.w r0, r6, #76 ; 0x4c -1001f1aa: 9700 str r7, [sp, #0] -1001f1ac: f01f fb80 bl 1003e8b0 <__rtw_set_ie_veneer> -1001f1b0: f104 06fc add.w r6, r4, #252 ; 0xfc -1001f1b4: 4682 mov sl, r0 -1001f1b6: 4630 mov r0, r6 -1001f1b8: f01f fbee bl 1003e998 <__rtw_get_rateset_len_veneer> -1001f1bc: 4681 mov r9, r0 -1001f1be: f1b9 0f08 cmp.w r9, #8 -1001f1c2: bf34 ite cc -1001f1c4: 464a movcc r2, r9 -1001f1c6: 2208 movcs r2, #8 -1001f1c8: 4633 mov r3, r6 -1001f1ca: 4650 mov r0, sl -1001f1cc: 2101 movs r1, #1 -1001f1ce: 9700 str r7, [sp, #0] -1001f1d0: f01f fb6e bl 1003e8b0 <__rtw_set_ie_veneer> -1001f1d4: f104 03e4 add.w r3, r4, #228 ; 0xe4 -1001f1d8: 9700 str r7, [sp, #0] -1001f1da: 2103 movs r1, #3 -1001f1dc: 2201 movs r2, #1 -1001f1de: f01f fb67 bl 1003e8b0 <__rtw_set_ie_veneer> -1001f1e2: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -1001f1e6: 4606 mov r6, r0 -1001f1e8: f003 0a03 and.w sl, r3, #3 -1001f1ec: f1ba 0f01 cmp.w sl, #1 -1001f1f0: d110 bne.n 1001f214 -1001f1f2: ab08 add r3, sp, #32 -1001f1f4: f843 8d04 str.w r8, [r3, #-4]! -1001f1f8: 2106 movs r1, #6 -1001f1fa: 2202 movs r2, #2 -1001f1fc: 9700 str r7, [sp, #0] -1001f1fe: f88d 8018 strb.w r8, [sp, #24] -1001f202: f01f fb55 bl 1003e8b0 <__rtw_set_ie_veneer> -1001f206: 9700 str r7, [sp, #0] -1001f208: 212a movs r1, #42 ; 0x2a -1001f20a: 4652 mov r2, sl -1001f20c: ab06 add r3, sp, #24 -1001f20e: f01f fb4f bl 1003e8b0 <__rtw_set_ie_veneer> -1001f212: 4606 mov r6, r0 -1001f214: f1b9 0f08 cmp.w r9, #8 -1001f218: d909 bls.n 1001f22e -1001f21a: 4630 mov r0, r6 -1001f21c: 9700 str r7, [sp, #0] -1001f21e: 2132 movs r1, #50 ; 0x32 -1001f220: f1a9 0208 sub.w r2, r9, #8 -1001f224: f504 7382 add.w r3, r4, #260 ; 0x104 -1001f228: f01f fb42 bl 1003e8b0 <__rtw_set_ie_veneer> -1001f22c: 4606 mov r6, r0 -1001f22e: 6863 ldr r3, [r4, #4] -1001f230: 2b05 cmp r3, #5 -1001f232: d113 bne.n 1001f25c -1001f234: f241 63a8 movw r3, #5800 ; 0x16a8 -1001f238: 58e3 ldr r3, [r4, r3] -1001f23a: 2b03 cmp r3, #3 -1001f23c: d10e bne.n 1001f25c -1001f23e: 9b05 ldr r3, [sp, #20] -1001f240: b163 cbz r3, 1001f25c -1001f242: f8d4 14e4 ldr.w r1, [r4, #1252] ; 0x4e4 -1001f246: f8d4 74f8 ldr.w r7, [r4, #1272] ; 0x4f8 -1001f24a: b121 cbz r1, 1001f256 -1001f24c: b11f cbz r7, 1001f256 -1001f24e: 4630 mov r0, r6 -1001f250: 463a mov r2, r7 -1001f252: f7f8 f8dd bl 10017410 -1001f256: 696b ldr r3, [r5, #20] -1001f258: 441f add r7, r3 -1001f25a: 616f str r7, [r5, #20] -1001f25c: 696b ldr r3, [r5, #20] -1001f25e: f240 6252 movw r2, #1618 ; 0x652 -1001f262: 61ab str r3, [r5, #24] -1001f264: 3328 adds r3, #40 ; 0x28 -1001f266: 4293 cmp r3, r2 -1001f268: d90a bls.n 1001f280 -1001f26a: 4b09 ldr r3, [pc, #36] ; (1001f290 ) -1001f26c: 681b ldr r3, [r3, #0] -1001f26e: b13b cbz r3, 1001f280 -1001f270: 4808 ldr r0, [pc, #32] ; (1001f294 ) -1001f272: f7fb fc75 bl 1001ab60 -1001f276: 4b08 ldr r3, [pc, #32] ; (1001f298 ) -1001f278: f8d3 0154 ldr.w r0, [r3, #340] ; 0x154 -1001f27c: f7fb fc70 bl 1001ab60 -1001f280: 4620 mov r0, r4 -1001f282: 4629 mov r1, r5 -1001f284: f7ff fb21 bl 1001e8ca -1001f288: b009 add sp, #36 ; 0x24 -1001f28a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1001f28e: bf00 nop -1001f290: 10044ec0 .word 0x10044ec0 -1001f294: 10042939 .word 0x10042939 -1001f298: 10043a4c .word 0x10043a4c - -1001f29c : -1001f29c: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -1001f2a0: 4b42 ldr r3, [pc, #264] ; (1001f3ac ) -1001f2a2: 4604 mov r4, r0 -1001f2a4: 681b ldr r3, [r3, #0] -1001f2a6: 4688 mov r8, r1 -1001f2a8: 6f8d ldr r5, [r1, #120] ; 0x78 -1001f2aa: 6f0f ldr r7, [r1, #112] ; 0x70 -1001f2ac: b133 cbz r3, 1001f2bc -1001f2ae: f1a7 0118 sub.w r1, r7, #24 -1001f2b2: f105 0018 add.w r0, r5, #24 -1001f2b6: b289 uxth r1, r1 -1001f2b8: 2240 movs r2, #64 ; 0x40 -1001f2ba: 4798 blx r3 -1001f2bc: 6863 ldr r3, [r4, #4] -1001f2be: 2b05 cmp r3, #5 -1001f2c0: d11f bne.n 1001f302 -1001f2c2: f241 63ac movw r3, #5804 ; 0x16ac -1001f2c6: 58e3 ldr r3, [r4, r3] -1001f2c8: 2b02 cmp r3, #2 -1001f2ca: d001 beq.n 1001f2d0 -1001f2cc: 2b04 cmp r3, #4 -1001f2ce: d107 bne.n 1001f2e0 -1001f2d0: 4620 mov r0, r4 -1001f2d2: 4629 mov r1, r5 -1001f2d4: b2ba uxth r2, r7 -1001f2d6: f894 351e ldrb.w r3, [r4, #1310] ; 0x51e -1001f2da: f004 fa2e bl 1002373a -1001f2de: e060 b.n 1001f3a2 -1001f2e0: f241 63a8 movw r3, #5800 ; 0x16a8 -1001f2e4: 58e3 ldr r3, [r4, r3] -1001f2e6: 2b03 cmp r3, #3 -1001f2e8: d10b bne.n 1001f302 -1001f2ea: f105 0018 add.w r0, r5, #24 -1001f2ee: f1a7 0118 sub.w r1, r7, #24 -1001f2f2: 2200 movs r2, #0 -1001f2f4: ab01 add r3, sp, #4 -1001f2f6: f018 f9fb bl 100376f0 -1001f2fa: 1c06 adds r6, r0, #0 -1001f2fc: bf18 it ne -1001f2fe: 2601 movne r6, #1 -1001f300: e000 b.n 1001f304 -1001f302: 2600 movs r6, #0 -1001f304: 6923 ldr r3, [r4, #16] -1001f306: 071a lsls r2, r3, #28 -1001f308: d44b bmi.n 1001f3a2 -1001f30a: f013 0f51 tst.w r3, #81 ; 0x51 -1001f30e: d048 beq.n 1001f3a2 -1001f310: 4b27 ldr r3, [pc, #156] ; (1001f3b0 ) -1001f312: f8d3 9000 ldr.w r9, [r3] -1001f316: f1b9 0f00 cmp.w r9, #0 -1001f31a: d005 beq.n 1001f328 -1001f31c: 4628 mov r0, r5 -1001f31e: f7ff f944 bl 1001e5aa -1001f322: f998 106c ldrsb.w r1, [r8, #108] ; 0x6c -1001f326: 47c8 blx r9 -1001f328: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -1001f32c: f003 0303 and.w r3, r3, #3 -1001f330: 2b03 cmp r3, #3 -1001f332: d009 beq.n 1001f348 -1001f334: f105 0018 add.w r0, r5, #24 -1001f338: 2100 movs r1, #0 -1001f33a: aa01 add r2, sp, #4 -1001f33c: f1a7 0318 sub.w r3, r7, #24 -1001f340: f01f fab2 bl 1003e8a8 <__rtw_get_ie_veneer> -1001f344: b940 cbnz r0, 1001f358 -1001f346: e02c b.n 1001f3a2 -1001f348: 4620 mov r0, r4 -1001f34a: f44f 6108 mov.w r1, #2176 ; 0x880 -1001f34e: f7ff f90d bl 1001e56c -1001f352: 2800 cmp r0, #0 -1001f354: d0ee beq.n 1001f334 -1001f356: e024 b.n 1001f3a2 -1001f358: b11e cbz r6, 1001f362 -1001f35a: 6923 ldr r3, [r4, #16] -1001f35c: 07db lsls r3, r3, #31 -1001f35e: d414 bmi.n 1001f38a -1001f360: e01f b.n 1001f3a2 -1001f362: 9b01 ldr r3, [sp, #4] -1001f364: b913 cbnz r3, 1001f36c -1001f366: 9b01 ldr r3, [sp, #4] -1001f368: b153 cbz r3, 1001f380 -1001f36a: e7f6 b.n 1001f35a -1001f36c: 3002 adds r0, #2 -1001f36e: f104 01a8 add.w r1, r4, #168 ; 0xa8 -1001f372: f8d4 20a4 ldr.w r2, [r4, #164] ; 0xa4 -1001f376: f7f8 f853 bl 10017420 -1001f37a: 2800 cmp r0, #0 -1001f37c: d1f3 bne.n 1001f366 -1001f37e: e010 b.n 1001f3a2 -1001f380: f894 3740 ldrb.w r3, [r4, #1856] ; 0x740 -1001f384: 2b00 cmp r3, #0 -1001f386: d0e8 beq.n 1001f35a -1001f388: e00b b.n 1001f3a2 -1001f38a: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 -1001f38e: 2b01 cmp r3, #1 -1001f390: d107 bne.n 1001f3a2 -1001f392: 4628 mov r0, r5 -1001f394: f7ff f909 bl 1001e5aa -1001f398: 4632 mov r2, r6 -1001f39a: 4601 mov r1, r0 -1001f39c: 4620 mov r0, r4 -1001f39e: f7ff fdc1 bl 1001ef24 -1001f3a2: 2001 movs r0, #1 -1001f3a4: b003 add sp, #12 -1001f3a6: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -1001f3aa: bf00 nop -1001f3ac: 1004dd74 .word 0x1004dd74 -1001f3b0: 1004baf8 .word 0x1004baf8 - -1001f3b4 : -1001f3b4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001f3b8: 4b76 ldr r3, [pc, #472] ; (1001f594 ) -1001f3ba: 4604 mov r4, r0 -1001f3bc: 6818 ldr r0, [r3, #0] -1001f3be: b08d sub sp, #52 ; 0x34 -1001f3c0: 889b ldrh r3, [r3, #4] -1001f3c2: 9006 str r0, [sp, #24] -1001f3c4: 2700 movs r7, #0 -1001f3c6: f604 1058 addw r0, r4, #2392 ; 0x958 -1001f3ca: 4688 mov r8, r1 -1001f3cc: 4693 mov fp, r2 -1001f3ce: 9705 str r7, [sp, #20] -1001f3d0: f8ad 301c strh.w r3, [sp, #28] -1001f3d4: f7ff f9fa bl 1001e7cc -1001f3d8: 4605 mov r5, r0 -1001f3da: 2800 cmp r0, #0 -1001f3dc: f000 80d7 beq.w 1001f58e -1001f3e0: 4620 mov r0, r4 -1001f3e2: f105 0108 add.w r1, r5, #8 -1001f3e6: f7ff fa10 bl 1001e80a -1001f3ea: 4639 mov r1, r7 -1001f3ec: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 -1001f3f0: 2268 movs r2, #104 ; 0x68 -1001f3f2: f7f8 f81d bl 10017430 -1001f3f6: f8d5 6080 ldr.w r6, [r5, #128] ; 0x80 -1001f3fa: f504 59a4 add.w r9, r4, #5248 ; 0x1480 -1001f3fe: f886 7028 strb.w r7, [r6, #40] ; 0x28 -1001f402: f886 7029 strb.w r7, [r6, #41] ; 0x29 -1001f406: f106 0a28 add.w sl, r6, #40 ; 0x28 -1001f40a: f109 0919 add.w r9, r9, #25 -1001f40e: f106 032c add.w r3, r6, #44 ; 0x2c -1001f412: f106 0738 add.w r7, r6, #56 ; 0x38 -1001f416: f1bb 0f00 cmp.w fp, #0 -1001f41a: d111 bne.n 1001f440 -1001f41c: f104 0b98 add.w fp, r4, #152 ; 0x98 -1001f420: 4658 mov r0, fp -1001f422: 9303 str r3, [sp, #12] -1001f424: f009 f99c bl 10028760 -1001f428: 9b03 ldr r3, [sp, #12] -1001f42a: 4601 mov r1, r0 -1001f42c: 2206 movs r2, #6 -1001f42e: 4618 mov r0, r3 -1001f430: f7f7 ffee bl 10017410 -1001f434: 4658 mov r0, fp -1001f436: f009 f993 bl 10028760 -1001f43a: 4601 mov r1, r0 -1001f43c: 4638 mov r0, r7 -1001f43e: e006 b.n 1001f44e -1001f440: 4618 mov r0, r3 -1001f442: a906 add r1, sp, #24 -1001f444: 2206 movs r2, #6 -1001f446: f7f7 ffe3 bl 10017410 -1001f44a: 4638 mov r0, r7 -1001f44c: a906 add r1, sp, #24 -1001f44e: 2206 movs r2, #6 -1001f450: f7f7 ffde bl 10017410 -1001f454: f106 0032 add.w r0, r6, #50 ; 0x32 -1001f458: 2206 movs r2, #6 -1001f45a: 4649 mov r1, r9 -1001f45c: f7f7 ffd8 bl 10017410 -1001f460: f8ba 3016 ldrh.w r3, [sl, #22] -1001f464: f8b4 251c ldrh.w r2, [r4, #1308] ; 0x51c -1001f468: f003 030f and.w r3, r3, #15 -1001f46c: ea43 1302 orr.w r3, r3, r2, lsl #4 -1001f470: f8aa 3016 strh.w r3, [sl, #22] -1001f474: f8b4 351c ldrh.w r3, [r4, #1308] ; 0x51c -1001f478: 462f mov r7, r5 -1001f47a: 3301 adds r3, #1 -1001f47c: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c -1001f480: 8d33 ldrh r3, [r6, #40] ; 0x28 -1001f482: f106 0040 add.w r0, r6, #64 ; 0x40 -1001f486: f023 03fc bic.w r3, r3, #252 ; 0xfc -1001f48a: f043 0340 orr.w r3, r3, #64 ; 0x40 -1001f48e: 8533 strh r3, [r6, #40] ; 0x28 -1001f490: 2318 movs r3, #24 -1001f492: f847 3f14 str.w r3, [r7, #20]! -1001f496: 9700 str r7, [sp, #0] -1001f498: f1b8 0f00 cmp.w r8, #0 -1001f49c: d005 beq.n 1001f4aa -1001f49e: 2100 movs r1, #0 -1001f4a0: f8d8 2000 ldr.w r2, [r8] -1001f4a4: f108 0304 add.w r3, r8, #4 -1001f4a8: e002 b.n 1001f4b0 -1001f4aa: 4641 mov r1, r8 -1001f4ac: 4642 mov r2, r8 -1001f4ae: 4643 mov r3, r8 -1001f4b0: f01f f9fe bl 1003e8b0 <__rtw_set_ie_veneer> -1001f4b4: a908 add r1, sp, #32 -1001f4b6: 4606 mov r6, r0 -1001f4b8: aa05 add r2, sp, #20 -1001f4ba: 4620 mov r0, r4 -1001f4bc: f009 f846 bl 1002854c -1001f4c0: 9a05 ldr r2, [sp, #20] -1001f4c2: 9700 str r7, [sp, #0] -1001f4c4: 2a08 cmp r2, #8 -1001f4c6: 4630 mov r0, r6 -1001f4c8: f04f 0101 mov.w r1, #1 -1001f4cc: dd09 ble.n 1001f4e2 -1001f4ce: 2208 movs r2, #8 -1001f4d0: ab08 add r3, sp, #32 -1001f4d2: f01f f9ed bl 1003e8b0 <__rtw_set_ie_veneer> -1001f4d6: 9a05 ldr r2, [sp, #20] -1001f4d8: 9700 str r7, [sp, #0] -1001f4da: 2132 movs r1, #50 ; 0x32 -1001f4dc: 3a08 subs r2, #8 -1001f4de: ab0a add r3, sp, #40 ; 0x28 -1001f4e0: e000 b.n 1001f4e4 -1001f4e2: ab08 add r3, sp, #32 -1001f4e4: f01f f9e4 bl 1003e8b0 <__rtw_set_ie_veneer> -1001f4e8: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 -1001f4ec: 4606 mov r6, r0 -1001f4ee: b1cb cbz r3, 1001f524 -1001f4f0: f04f 0800 mov.w r8, #0 -1001f4f4: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 -1001f4f8: 4598 cmp r8, r3 -1001f4fa: dc13 bgt.n 1001f524 -1001f4fc: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc -1001f500: eb03 02c8 add.w r2, r3, r8, lsl #3 -1001f504: 7912 ldrb r2, [r2, #4] -1001f506: 07d2 lsls r2, r2, #31 -1001f508: d509 bpl.n 1001f51e -1001f50a: f853 3038 ldr.w r3, [r3, r8, lsl #3] -1001f50e: 4630 mov r0, r6 -1001f510: 7819 ldrb r1, [r3, #0] -1001f512: 785a ldrb r2, [r3, #1] -1001f514: 9700 str r7, [sp, #0] -1001f516: 3302 adds r3, #2 -1001f518: f01f f9ca bl 1003e8b0 <__rtw_set_ie_veneer> -1001f51c: 4606 mov r6, r0 -1001f51e: f108 0801 add.w r8, r8, #1 -1001f522: e7e7 b.n 1001f4f4 -1001f524: f8d4 24a8 ldr.w r2, [r4, #1192] ; 0x4a8 -1001f528: b15a cbz r2, 1001f542 -1001f52a: f8d4 14a4 ldr.w r1, [r4, #1188] ; 0x4a4 -1001f52e: b141 cbz r1, 1001f542 -1001f530: 4630 mov r0, r6 -1001f532: f7f7 ff6d bl 10017410 -1001f536: f8d4 34a8 ldr.w r3, [r4, #1192] ; 0x4a8 -1001f53a: 696a ldr r2, [r5, #20] -1001f53c: 441e add r6, r3 -1001f53e: 4413 add r3, r2 -1001f540: 616b str r3, [r5, #20] -1001f542: 6863 ldr r3, [r4, #4] -1001f544: 2b05 cmp r3, #5 -1001f546: d10c bne.n 1001f562 -1001f548: f8d4 14e0 ldr.w r1, [r4, #1248] ; 0x4e0 -1001f54c: b149 cbz r1, 1001f562 -1001f54e: f8d4 24f4 ldr.w r2, [r4, #1268] ; 0x4f4 -1001f552: 4630 mov r0, r6 -1001f554: f7f7 ff5c bl 10017410 -1001f558: 696a ldr r2, [r5, #20] -1001f55a: f8d4 34f4 ldr.w r3, [r4, #1268] ; 0x4f4 -1001f55e: 4413 add r3, r2 -1001f560: 616b str r3, [r5, #20] -1001f562: 696b ldr r3, [r5, #20] -1001f564: f240 6252 movw r2, #1618 ; 0x652 -1001f568: 61ab str r3, [r5, #24] -1001f56a: 3328 adds r3, #40 ; 0x28 -1001f56c: 4293 cmp r3, r2 -1001f56e: d90a bls.n 1001f586 -1001f570: 4b09 ldr r3, [pc, #36] ; (1001f598 ) -1001f572: 681b ldr r3, [r3, #0] -1001f574: b13b cbz r3, 1001f586 -1001f576: 4809 ldr r0, [pc, #36] ; (1001f59c ) -1001f578: f7fb faf2 bl 1001ab60 -1001f57c: 4b08 ldr r3, [pc, #32] ; (1001f5a0 ) -1001f57e: f8d3 0158 ldr.w r0, [r3, #344] ; 0x158 -1001f582: f7fb faed bl 1001ab60 -1001f586: 4620 mov r0, r4 -1001f588: 4629 mov r1, r5 -1001f58a: f7ff f99e bl 1001e8ca -1001f58e: b00d add sp, #52 ; 0x34 -1001f590: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1001f594: 10041399 .word 0x10041399 -1001f598: 10044ec0 .word 0x10044ec0 -1001f59c: 10042939 .word 0x10042939 -1001f5a0: 10043a4c .word 0x10043a4c - -1001f5a4 : -1001f5a4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001f5a8: 4604 mov r4, r0 -1001f5aa: b089 sub sp, #36 ; 0x24 -1001f5ac: f600 1058 addw r0, r0, #2392 ; 0x958 -1001f5b0: 4688 mov r8, r1 -1001f5b2: 4691 mov r9, r2 -1001f5b4: f7ff f90a bl 1001e7cc -1001f5b8: 4605 mov r5, r0 -1001f5ba: 2800 cmp r0, #0 -1001f5bc: f000 8121 beq.w 1001f802 -1001f5c0: 4620 mov r0, r4 -1001f5c2: f105 0108 add.w r1, r5, #8 -1001f5c6: f7ff f920 bl 1001e80a -1001f5ca: 2268 movs r2, #104 ; 0x68 -1001f5cc: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 -1001f5d0: 2100 movs r1, #0 -1001f5d2: f7f7 ff2d bl 10017430 -1001f5d6: f8d5 6080 ldr.w r6, [r5, #128] ; 0x80 -1001f5da: 2300 movs r3, #0 -1001f5dc: f886 3028 strb.w r3, [r6, #40] ; 0x28 -1001f5e0: f886 3029 strb.w r3, [r6, #41] ; 0x29 -1001f5e4: 8ff3 ldrh r3, [r6, #62] ; 0x3e -1001f5e6: f8b4 251c ldrh.w r2, [r4, #1308] ; 0x51c -1001f5ea: f003 030f and.w r3, r3, #15 -1001f5ee: ea43 1302 orr.w r3, r3, r2, lsl #4 -1001f5f2: 87f3 strh r3, [r6, #62] ; 0x3e -1001f5f4: f8b4 351c ldrh.w r3, [r4, #1308] ; 0x51c -1001f5f8: 2218 movs r2, #24 -1001f5fa: 3301 adds r3, #1 -1001f5fc: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c -1001f600: 8d33 ldrh r3, [r6, #40] ; 0x28 -1001f602: 462f mov r7, r5 -1001f604: f023 03fc bic.w r3, r3, #252 ; 0xfc -1001f608: f043 03b0 orr.w r3, r3, #176 ; 0xb0 -1001f60c: 8533 strh r3, [r6, #40] ; 0x28 -1001f60e: f106 0332 add.w r3, r6, #50 ; 0x32 -1001f612: f504 5aa4 add.w sl, r4, #5248 ; 0x1480 -1001f616: 9304 str r3, [sp, #16] -1001f618: f106 0338 add.w r3, r6, #56 ; 0x38 -1001f61c: f847 2f14 str.w r2, [r7, #20]! -1001f620: f106 0b40 add.w fp, r6, #64 ; 0x40 -1001f624: f106 022c add.w r2, r6, #44 ; 0x2c -1001f628: f10a 0a18 add.w sl, sl, #24 -1001f62c: 9305 str r3, [sp, #20] -1001f62e: f1b8 0f00 cmp.w r8, #0 -1001f632: d048 beq.n 1001f6c6 -1001f634: f10a 0601 add.w r6, sl, #1 -1001f638: 4610 mov r0, r2 -1001f63a: f508 7184 add.w r1, r8, #264 ; 0x108 -1001f63e: 2206 movs r2, #6 -1001f640: f7f7 fee6 bl 10017410 -1001f644: 4631 mov r1, r6 -1001f646: 9804 ldr r0, [sp, #16] -1001f648: 2206 movs r2, #6 -1001f64a: f7f7 fee1 bl 10017410 -1001f64e: 4631 mov r1, r6 -1001f650: 9805 ldr r0, [sp, #20] -1001f652: 2206 movs r2, #6 -1001f654: f7f7 fedc bl 10017410 -1001f658: f8d8 2240 ldr.w r2, [r8, #576] ; 0x240 -1001f65c: f1b9 0f00 cmp.w r9, #0 -1001f660: bf18 it ne -1001f662: 2200 movne r2, #0 -1001f664: ae08 add r6, sp, #32 -1001f666: f826 2d06 strh.w r2, [r6, #-6]! -1001f66a: 2102 movs r1, #2 -1001f66c: 463b mov r3, r7 -1001f66e: fa1f fa82 uxth.w sl, r2 -1001f672: 4658 mov r0, fp -1001f674: 4632 mov r2, r6 -1001f676: f01f f943 bl 1003e900 <__rtw_set_fixed_ie_veneer> -1001f67a: f8d8 323c ldr.w r3, [r8, #572] ; 0x23c -1001f67e: 2102 movs r1, #2 -1001f680: f8ad 301a strh.w r3, [sp, #26] -1001f684: 4632 mov r2, r6 -1001f686: 463b mov r3, r7 -1001f688: f01f f93a bl 1003e900 <__rtw_set_fixed_ie_veneer> -1001f68c: 463b mov r3, r7 -1001f68e: 2102 movs r1, #2 -1001f690: 4632 mov r2, r6 -1001f692: f8ad 901a strh.w r9, [sp, #26] -1001f696: f01f f933 bl 1003e900 <__rtw_set_fixed_ie_veneer> -1001f69a: f8d8 323c ldr.w r3, [r8, #572] ; 0x23c -1001f69e: 2b02 cmp r3, #2 -1001f6a0: f040 808b bne.w 1001f7ba -1001f6a4: f8d8 30f8 ldr.w r3, [r8, #248] ; 0xf8 -1001f6a8: 059e lsls r6, r3, #22 -1001f6aa: f140 8086 bpl.w 1001f7ba -1001f6ae: f1ba 0f00 cmp.w sl, #0 -1001f6b2: f000 8082 beq.w 1001f7ba -1001f6b6: 9700 str r7, [sp, #0] -1001f6b8: 2110 movs r1, #16 -1001f6ba: 2280 movs r2, #128 ; 0x80 -1001f6bc: f508 7311 add.w r3, r8, #580 ; 0x244 -1001f6c0: f01f f8f6 bl 1003e8b0 <__rtw_set_ie_veneer> -1001f6c4: e079 b.n 1001f7ba -1001f6c6: f104 0898 add.w r8, r4, #152 ; 0x98 -1001f6ca: 4640 mov r0, r8 -1001f6cc: 9203 str r2, [sp, #12] -1001f6ce: f009 f847 bl 10028760 -1001f6d2: 9a03 ldr r2, [sp, #12] -1001f6d4: 4601 mov r1, r0 -1001f6d6: 4610 mov r0, r2 -1001f6d8: 2206 movs r2, #6 -1001f6da: f7f7 fe99 bl 10017410 -1001f6de: f10a 0101 add.w r1, sl, #1 -1001f6e2: 2206 movs r2, #6 -1001f6e4: 9804 ldr r0, [sp, #16] -1001f6e6: f7f7 fe93 bl 10017410 -1001f6ea: 4640 mov r0, r8 -1001f6ec: f009 f838 bl 10028760 -1001f6f0: 2206 movs r2, #6 -1001f6f2: 4601 mov r1, r0 -1001f6f4: 9805 ldr r0, [sp, #20] -1001f6f6: f7f7 fe8b bl 10017410 -1001f6fa: f8d4 2694 ldr.w r2, [r4, #1684] ; 0x694 -1001f6fe: 1e51 subs r1, r2, #1 -1001f700: f8d4 2690 ldr.w r2, [r4, #1680] ; 0x690 -1001f704: f1d1 0800 rsbs r8, r1, #0 -1001f708: eb58 0801 adcs.w r8, r8, r1 -1001f70c: 2a03 cmp r2, #3 -1001f70e: f8ad 801a strh.w r8, [sp, #26] -1001f712: d11a bne.n 1001f74a -1001f714: f8d4 2680 ldr.w r2, [r4, #1664] ; 0x680 -1001f718: 0592 lsls r2, r2, #22 -1001f71a: d516 bpl.n 1001f74a -1001f71c: f1b8 0f00 cmp.w r8, #0 -1001f720: d013 beq.n 1001f74a -1001f722: f8d4 26a4 ldr.w r2, [r4, #1700] ; 0x6a4 -1001f726: 4658 mov r0, fp -1001f728: 1c51 adds r1, r2, #1 -1001f72a: f8c4 16a4 str.w r1, [r4, #1700] ; 0x6a4 -1001f72e: f8d4 16a0 ldr.w r1, [r4, #1696] ; 0x6a0 -1001f732: 463b mov r3, r7 -1001f734: ea42 7181 orr.w r1, r2, r1, lsl #30 -1001f738: aa08 add r2, sp, #32 -1001f73a: f842 1d04 str.w r1, [r2, #-4]! -1001f73e: 2104 movs r1, #4 -1001f740: f01f f8de bl 1003e900 <__rtw_set_fixed_ie_veneer> -1001f744: 2204 movs r2, #4 -1001f746: 4683 mov fp, r0 -1001f748: 776a strb r2, [r5, #29] -1001f74a: 2102 movs r1, #2 -1001f74c: f10d 021a add.w r2, sp, #26 -1001f750: 463b mov r3, r7 -1001f752: 4658 mov r0, fp -1001f754: f01f f8d4 bl 1003e900 <__rtw_set_fixed_ie_veneer> -1001f758: f8d4 3690 ldr.w r3, [r4, #1680] ; 0x690 -1001f75c: 2102 movs r1, #2 -1001f75e: f8ad 301a strh.w r3, [sp, #26] -1001f762: f10d 021a add.w r2, sp, #26 -1001f766: 463b mov r3, r7 -1001f768: f01f f8ca bl 1003e900 <__rtw_set_fixed_ie_veneer> -1001f76c: 463b mov r3, r7 -1001f76e: 2102 movs r1, #2 -1001f770: f10d 021a add.w r2, sp, #26 -1001f774: f8ad 901a strh.w r9, [sp, #26] -1001f778: f01f f8c2 bl 1003e900 <__rtw_set_fixed_ie_veneer> -1001f77c: f8d4 3690 ldr.w r3, [r4, #1680] ; 0x690 -1001f780: 2b03 cmp r3, #3 -1001f782: d11a bne.n 1001f7ba -1001f784: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -1001f788: 059b lsls r3, r3, #22 -1001f78a: d516 bpl.n 1001f7ba -1001f78c: f1b8 0f00 cmp.w r8, #0 -1001f790: d013 beq.n 1001f7ba -1001f792: f504 63d5 add.w r3, r4, #1704 ; 0x6a8 -1001f796: 9700 str r7, [sp, #0] -1001f798: 2110 movs r1, #16 -1001f79a: 2280 movs r2, #128 ; 0x80 -1001f79c: f01f f888 bl 1003e8b0 <__rtw_set_ie_veneer> -1001f7a0: 8d33 ldrh r3, [r6, #40] ; 0x28 -1001f7a2: f443 4380 orr.w r3, r3, #16384 ; 0x4000 -1001f7a6: 8533 strh r3, [r6, #40] ; 0x28 -1001f7a8: 2318 movs r3, #24 -1001f7aa: 826b strh r3, [r5, #18] -1001f7ac: 2304 movs r3, #4 -1001f7ae: 77ab strb r3, [r5, #30] -1001f7b0: 696b ldr r3, [r5, #20] -1001f7b2: f885 801c strb.w r8, [r5, #28] -1001f7b6: 3304 adds r3, #4 -1001f7b8: 616b str r3, [r5, #20] -1001f7ba: 696b ldr r3, [r5, #20] -1001f7bc: f240 6252 movw r2, #1618 ; 0x652 -1001f7c0: 61ab str r3, [r5, #24] -1001f7c2: 3328 adds r3, #40 ; 0x28 -1001f7c4: 4293 cmp r3, r2 -1001f7c6: d90a bls.n 1001f7de -1001f7c8: 4b0f ldr r3, [pc, #60] ; (1001f808 ) -1001f7ca: 681b ldr r3, [r3, #0] -1001f7cc: b13b cbz r3, 1001f7de -1001f7ce: 480f ldr r0, [pc, #60] ; (1001f80c ) -1001f7d0: f7fb f9c6 bl 1001ab60 -1001f7d4: 4b0e ldr r3, [pc, #56] ; (1001f810 ) -1001f7d6: f8d3 015c ldr.w r0, [r3, #348] ; 0x15c -1001f7da: f7fb f9c1 bl 1001ab60 -1001f7de: 4620 mov r0, r4 -1001f7e0: 4629 mov r1, r5 -1001f7e2: f008 f971 bl 10027ac8 -1001f7e6: f8d4 30d0 ldr.w r3, [r4, #208] ; 0xd0 -1001f7ea: aa08 add r2, sp, #32 -1001f7ec: 336e adds r3, #110 ; 0x6e -1001f7ee: 4620 mov r0, r4 -1001f7f0: 2134 movs r1, #52 ; 0x34 -1001f7f2: f802 3d07 strb.w r3, [r2, #-7]! -1001f7f6: f012 fe6c bl 100324d2 -1001f7fa: 4620 mov r0, r4 -1001f7fc: 4629 mov r1, r5 -1001f7fe: f7ff f864 bl 1001e8ca -1001f802: b009 add sp, #36 ; 0x24 -1001f804: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1001f808: 10044ec0 .word 0x10044ec0 -1001f80c: 10042939 .word 0x10042939 -1001f810: 10043a4c .word 0x10043a4c - -1001f814 : -1001f814: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001f818: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 -1001f81c: f8d1 b078 ldr.w fp, [r1, #120] ; 0x78 -1001f820: f003 0303 and.w r3, r3, #3 -1001f824: 6f09 ldr r1, [r1, #112] ; 0x70 -1001f826: b089 sub sp, #36 ; 0x24 -1001f828: 2b03 cmp r3, #3 -1001f82a: 4604 mov r4, r0 -1001f82c: 9105 str r1, [sp, #20] -1001f82e: d007 beq.n 1001f840 -1001f830: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -1001f834: f003 0303 and.w r3, r3, #3 -1001f838: 2b03 cmp r3, #3 -1001f83a: f040 8133 bne.w 1001faa4 -1001f83e: e006 b.n 1001f84e -1001f840: f44f 6108 mov.w r1, #2176 ; 0x880 -1001f844: f7fe fe92 bl 1001e56c -1001f848: 2800 cmp r0, #0 -1001f84a: d0f1 beq.n 1001f830 -1001f84c: e10b b.n 1001fa66 -1001f84e: 4a9a ldr r2, [pc, #616] ; (1001fab8 ) -1001f850: f10b 050a add.w r5, fp, #10 -1001f854: 6813 ldr r3, [r2, #0] -1001f856: 4617 mov r7, r2 -1001f858: b9ab cbnz r3, 1001f886 -1001f85a: 4b98 ldr r3, [pc, #608] ; (1001fabc ) -1001f85c: 681a ldr r2, [r3, #0] -1001f85e: b30a cbz r2, 1001f8a4 -1001f860: 4897 ldr r0, [pc, #604] ; (1001fac0 ) -1001f862: f7fb f97d bl 1001ab60 -1001f866: 78e8 ldrb r0, [r5, #3] -1001f868: f89b 100a ldrb.w r1, [fp, #10] -1001f86c: 786a ldrb r2, [r5, #1] -1001f86e: 78ab ldrb r3, [r5, #2] -1001f870: 9000 str r0, [sp, #0] -1001f872: 7928 ldrb r0, [r5, #4] -1001f874: 9001 str r0, [sp, #4] -1001f876: 7968 ldrb r0, [r5, #5] -1001f878: 9002 str r0, [sp, #8] -1001f87a: 4892 ldr r0, [pc, #584] ; (1001fac4 ) -1001f87c: f8d0 012c ldr.w r0, [r0, #300] ; 0x12c -1001f880: f7fb f96e bl 1001ab60 -1001f884: e00e b.n 1001f8a4 -1001f886: 681e ldr r6, [r3, #0] -1001f888: 683b ldr r3, [r7, #0] -1001f88a: 429e cmp r6, r3 -1001f88c: d0e5 beq.n 1001f85a -1001f88e: f106 0008 add.w r0, r6, #8 -1001f892: 4629 mov r1, r5 -1001f894: 2206 movs r2, #6 -1001f896: f7fb f987 bl 1001aba8 -1001f89a: 2800 cmp r0, #0 -1001f89c: f000 8104 beq.w 1001faa8 -1001f8a0: 6836 ldr r6, [r6, #0] -1001f8a2: e7f1 b.n 1001f888 -1001f8a4: f8d4 6d08 ldr.w r6, [r4, #3336] ; 0xd08 -1001f8a8: f8bb a01a ldrh.w sl, [fp, #26] -1001f8ac: 2e02 cmp r6, #2 -1001f8ae: f8bb 8018 ldrh.w r8, [fp, #24] -1001f8b2: d10a bne.n 1001f8ca -1001f8b4: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c -1001f8b8: f023 0304 bic.w r3, r3, #4 -1001f8bc: 2b01 cmp r3, #1 -1001f8be: bf18 it ne -1001f8c0: 2600 movne r6, #0 -1001f8c2: f1b8 0f00 cmp.w r8, #0 -1001f8c6: d103 bne.n 1001f8d0 -1001f8c8: e009 b.n 1001f8de -1001f8ca: f1b8 0f00 cmp.w r8, #0 -1001f8ce: d003 beq.n 1001f8d8 -1001f8d0: 2e00 cmp r6, #0 -1001f8d2: f000 80eb beq.w 1001faac -1001f8d6: e002 b.n 1001f8de -1001f8d8: 2e01 cmp r6, #1 -1001f8da: f000 80e7 beq.w 1001faac -1001f8de: 4a7a ldr r2, [pc, #488] ; (1001fac8 ) -1001f8e0: f504 6946 add.w r9, r4, #3168 ; 0xc60 -1001f8e4: 7811 ldrb r1, [r2, #0] -1001f8e6: f8d4 2ca4 ldr.w r2, [r4, #3236] ; 0xca4 -1001f8ea: 428a cmp r2, r1 -1001f8ec: da06 bge.n 1001f8fc -1001f8ee: 4648 mov r0, r9 -1001f8f0: 4629 mov r1, r5 -1001f8f2: f008 fccf bl 10028294 -1001f8f6: 4607 mov r7, r0 -1001f8f8: bb20 cbnz r0, 1001f944 -1001f8fa: e006 b.n 1001f90a -1001f8fc: 4648 mov r0, r9 -1001f8fe: 4629 mov r1, r5 -1001f900: f008 fcc8 bl 10028294 -1001f904: 2800 cmp r0, #0 -1001f906: d1f2 bne.n 1001f8ee -1001f908: e0ce b.n 1001faa8 -1001f90a: 4648 mov r0, r9 -1001f90c: 4629 mov r1, r5 -1001f90e: f008 fb79 bl 10028004 -1001f912: 4607 mov r7, r0 -1001f914: b970 cbnz r0, 1001f934 -1001f916: 4a69 ldr r2, [pc, #420] ; (1001fabc ) -1001f918: 6813 ldr r3, [r2, #0] -1001f91a: 2b00 cmp r3, #0 -1001f91c: f000 80c4 beq.w 1001faa8 -1001f920: 4867 ldr r0, [pc, #412] ; (1001fac0 ) -1001f922: f7fb f91d bl 1001ab60 -1001f926: 4b67 ldr r3, [pc, #412] ; (1001fac4 ) -1001f928: 2103 movs r1, #3 -1001f92a: f8d3 0130 ldr.w r0, [r3, #304] ; 0x130 -1001f92e: f7fb f917 bl 1001ab60 -1001f932: e0b9 b.n 1001faa8 -1001f934: f44f 7380 mov.w r3, #256 ; 0x100 -1001f938: f8c0 30f8 str.w r3, [r0, #248] ; 0xf8 -1001f93c: 2300 movs r3, #0 -1001f93e: f8c0 323c str.w r3, [r0, #572] ; 0x23c -1001f942: e014 b.n 1001f96e -1001f944: f604 49d4 addw r9, r4, #3284 ; 0xcd4 -1001f948: 4648 mov r0, r9 -1001f94a: a906 add r1, sp, #24 -1001f94c: f7f7 fe3c bl 100175c8 -1001f950: f507 7307 add.w r3, r7, #540 ; 0x21c -1001f954: 4618 mov r0, r3 -1001f956: 9304 str r3, [sp, #16] -1001f958: f7f7 fd75 bl 10017446 -1001f95c: 9b04 ldr r3, [sp, #16] -1001f95e: b910 cbnz r0, 1001f966 -1001f960: 4618 mov r0, r3 -1001f962: f7f7 fd81 bl 10017468 -1001f966: 4648 mov r0, r9 -1001f968: a906 add r1, sp, #24 -1001f96a: f7f7 fe37 bl 100175dc -1001f96e: f604 49d8 addw r9, r4, #3288 ; 0xcd8 -1001f972: 4648 mov r0, r9 -1001f974: a906 add r1, sp, #24 -1001f976: f7f7 fe27 bl 100175c8 -1001f97a: f507 7309 add.w r3, r7, #548 ; 0x224 -1001f97e: 4618 mov r0, r3 -1001f980: 9304 str r3, [sp, #16] -1001f982: f7f7 fd60 bl 10017446 -1001f986: 9b04 ldr r3, [sp, #16] -1001f988: b120 cbz r0, 1001f994 -1001f98a: 4618 mov r0, r3 -1001f98c: f604 41cc addw r1, r4, #3276 ; 0xccc -1001f990: f7f7 fd64 bl 1001745c -1001f994: 4648 mov r0, r9 -1001f996: a906 add r1, sp, #24 -1001f998: f7f7 fe20 bl 100175dc -1001f99c: f8d7 923c ldr.w r9, [r7, #572] ; 0x23c -1001f9a0: f1b9 0f00 cmp.w r9, #0 -1001f9a4: d103 bne.n 1001f9ae -1001f9a6: f8d4 3cdc ldr.w r3, [r4, #3292] ; 0xcdc -1001f9aa: f8c7 322c str.w r3, [r7, #556] ; 0x22c -1001f9ae: f109 0301 add.w r3, r9, #1 -1001f9b2: 4553 cmp r3, sl -1001f9b4: d159 bne.n 1001fa6a -1001f9b6: f1b8 0f00 cmp.w r8, #0 -1001f9ba: d112 bne.n 1001f9e2 -1001f9bc: f036 0202 bics.w r2, r6, #2 -1001f9c0: d10f bne.n 1001f9e2 -1001f9c2: f1ba 0f01 cmp.w sl, #1 -1001f9c6: d150 bne.n 1001fa6a -1001f9c8: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 -1001f9cc: f423 7380 bic.w r3, r3, #256 ; 0x100 -1001f9d0: f443 6380 orr.w r3, r3, #1024 ; 0x400 -1001f9d4: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 -1001f9d8: f8d4 3ce0 ldr.w r3, [r4, #3296] ; 0xce0 -1001f9dc: f8c7 322c str.w r3, [r7, #556] ; 0x22c -1001f9e0: e009 b.n 1001f9f6 -1001f9e2: 2b01 cmp r3, #1 -1001f9e4: d10a bne.n 1001f9fc -1001f9e6: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 -1001f9ea: f423 7380 bic.w r3, r3, #256 ; 0x100 -1001f9ee: f443 7300 orr.w r3, r3, #512 ; 0x200 -1001f9f2: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 -1001f9f6: f8c7 8240 str.w r8, [r7, #576] ; 0x240 -1001f9fa: e024 b.n 1001fa46 -1001f9fc: 2b03 cmp r3, #3 -1001f9fe: d134 bne.n 1001fa6a -1001fa00: 9e05 ldr r6, [sp, #20] -1001fa02: f10b 0022 add.w r0, fp, #34 ; 0x22 -1001fa06: 2110 movs r1, #16 -1001fa08: aa07 add r2, sp, #28 -1001fa0a: f1a6 0322 sub.w r3, r6, #34 ; 0x22 -1001fa0e: f01e ff4b bl 1003e8a8 <__rtw_get_ie_veneer> -1001fa12: b908 cbnz r0, 1001fa18 -1001fa14: 260f movs r6, #15 -1001fa16: e029 b.n 1001fa6c -1001fa18: 9b07 ldr r3, [sp, #28] -1001fa1a: 2b00 cmp r3, #0 -1001fa1c: d0fa beq.n 1001fa14 -1001fa1e: 3002 adds r0, #2 -1001fa20: f507 7111 add.w r1, r7, #580 ; 0x244 -1001fa24: 2280 movs r2, #128 ; 0x80 -1001fa26: f7f7 fcfb bl 10017420 -1001fa2a: 2800 cmp r0, #0 -1001fa2c: d0f2 beq.n 1001fa14 -1001fa2e: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 -1001fa32: f423 7300 bic.w r3, r3, #512 ; 0x200 -1001fa36: f443 6380 orr.w r3, r3, #1024 ; 0x400 -1001fa3a: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 -1001fa3e: f8d4 3ce0 ldr.w r3, [r4, #3296] ; 0xce0 -1001fa42: f8c7 322c str.w r3, [r7, #556] ; 0x22c -1001fa46: f109 0302 add.w r3, r9, #2 -1001fa4a: f8c7 323c str.w r3, [r7, #572] ; 0x23c -1001fa4e: 4620 mov r0, r4 -1001fa50: 4639 mov r1, r7 -1001fa52: 2200 movs r2, #0 -1001fa54: f7ff fda6 bl 1001f5a4 -1001fa58: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 -1001fa5c: 055b lsls r3, r3, #21 -1001fa5e: bf44 itt mi -1001fa60: 2300 movmi r3, #0 -1001fa62: f8c7 323c strmi.w r3, [r7, #572] ; 0x23c -1001fa66: 2001 movs r0, #1 -1001fa68: e022 b.n 1001fab0 -1001fa6a: 260e movs r6, #14 -1001fa6c: 4620 mov r0, r4 -1001fa6e: 4639 mov r1, r7 -1001fa70: f008 fb2d bl 100280ce -1001fa74: f44f 7054 mov.w r0, #848 ; 0x350 -1001fa78: f7f7 fe9a bl 100177b0 -1001fa7c: 4607 mov r7, r0 -1001fa7e: b188 cbz r0, 1001faa4 -1001fa80: 2302 movs r3, #2 -1001fa82: f8c0 323c str.w r3, [r0, #572] ; 0x23c -1001fa86: 4629 mov r1, r5 -1001fa88: f500 7084 add.w r0, r0, #264 ; 0x108 -1001fa8c: 2206 movs r2, #6 -1001fa8e: f7f7 fcbf bl 10017410 -1001fa92: 4620 mov r0, r4 -1001fa94: 4639 mov r1, r7 -1001fa96: 4632 mov r2, r6 -1001fa98: f7ff fd84 bl 1001f5a4 -1001fa9c: 4638 mov r0, r7 -1001fa9e: 2100 movs r1, #0 -1001faa0: f7f7 fcb3 bl 1001740a -1001faa4: 2000 movs r0, #0 -1001faa6: e003 b.n 1001fab0 -1001faa8: 2611 movs r6, #17 -1001faaa: e7e3 b.n 1001fa74 -1001faac: 260d movs r6, #13 -1001faae: e7e1 b.n 1001fa74 -1001fab0: b009 add sp, #36 ; 0x24 -1001fab2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1001fab6: bf00 nop -1001fab8: 1004bafc .word 0x1004bafc -1001fabc: 10044ec0 .word 0x10044ec0 -1001fac0: 10042939 .word 0x10042939 -1001fac4: 10043a4c .word 0x10043a4c -1001fac8: 10044f45 .word 0x10044f45 - -1001facc : -1001facc: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1001fad0: 4604 mov r4, r0 -1001fad2: b086 sub sp, #24 -1001fad4: f600 1058 addw r0, r0, #2392 ; 0x958 -1001fad8: 4690 mov r8, r2 -1001fada: 461f mov r7, r3 -1001fadc: f8ad 100e strh.w r1, [sp, #14] -1001fae0: f7fe fe74 bl 1001e7cc -1001fae4: 4605 mov r5, r0 -1001fae6: 2800 cmp r0, #0 -1001fae8: f000 8138 beq.w 1001fd5c -1001faec: 4620 mov r0, r4 -1001faee: f105 0108 add.w r1, r5, #8 -1001faf2: f7fe fe8a bl 1001e80a -1001faf6: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 -1001fafa: 2100 movs r1, #0 -1001fafc: 2268 movs r2, #104 ; 0x68 -1001fafe: f7f7 fc97 bl 10017430 -1001fb02: f8d5 6080 ldr.w r6, [r5, #128] ; 0x80 -1001fb06: 2300 movs r3, #0 -1001fb08: f886 3028 strb.w r3, [r6, #40] ; 0x28 -1001fb0c: f886 3029 strb.w r3, [r6, #41] ; 0x29 -1001fb10: f106 002c add.w r0, r6, #44 ; 0x2c -1001fb14: f508 7184 add.w r1, r8, #264 ; 0x108 -1001fb18: 2206 movs r2, #6 -1001fb1a: f7f7 fc79 bl 10017410 -1001fb1e: f504 51a4 add.w r1, r4, #5248 ; 0x1480 -1001fb22: 3119 adds r1, #25 -1001fb24: 2206 movs r2, #6 -1001fb26: f106 0032 add.w r0, r6, #50 ; 0x32 -1001fb2a: f7f7 fc71 bl 10017410 -1001fb2e: f104 0098 add.w r0, r4, #152 ; 0x98 -1001fb32: f008 fe15 bl 10028760 -1001fb36: 2206 movs r2, #6 -1001fb38: 4601 mov r1, r0 -1001fb3a: f106 0038 add.w r0, r6, #56 ; 0x38 -1001fb3e: f7f7 fc67 bl 10017410 -1001fb42: 8ff3 ldrh r3, [r6, #62] ; 0x3e -1001fb44: f8b4 251c ldrh.w r2, [r4, #1308] ; 0x51c -1001fb48: f003 030f and.w r3, r3, #15 -1001fb4c: ea43 1302 orr.w r3, r3, r2, lsl #4 -1001fb50: 87f3 strh r3, [r6, #62] ; 0x3e -1001fb52: f8b4 351c ldrh.w r3, [r4, #1308] ; 0x51c -1001fb56: 3301 adds r3, #1 -1001fb58: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c -1001fb5c: f027 0320 bic.w r3, r7, #32 -1001fb60: 2b10 cmp r3, #16 -1001fb62: f040 80fb bne.w 1001fd5c -1001fb66: 8d33 ldrh r3, [r6, #40] ; 0x28 -1001fb68: f504 708a add.w r0, r4, #276 ; 0x114 -1001fb6c: f023 03fc bic.w r3, r3, #252 ; 0xfc -1001fb70: 431f orrs r7, r3 -1001fb72: 2318 movs r3, #24 -1001fb74: 8537 strh r7, [r6, #40] ; 0x28 -1001fb76: 826b strh r3, [r5, #18] -1001fb78: 696b ldr r3, [r5, #20] -1001fb7a: 462f mov r7, r5 -1001fb7c: 3318 adds r3, #24 -1001fb7e: f847 3f14 str.w r3, [r7, #20]! -1001fb82: f7fd fd15 bl 1001d5b0 -1001fb86: 8803 ldrh r3, [r0, #0] -1001fb88: f106 0940 add.w r9, r6, #64 ; 0x40 -1001fb8c: ae06 add r6, sp, #24 -1001fb8e: f826 3d06 strh.w r3, [r6, #-6]! -1001fb92: 2102 movs r1, #2 -1001fb94: 4632 mov r2, r6 -1001fb96: 463b mov r3, r7 -1001fb98: 4648 mov r0, r9 -1001fb9a: f01e feb1 bl 1003e900 <__rtw_set_fixed_ie_veneer> -1001fb9e: 2102 movs r1, #2 -1001fba0: f10d 020e add.w r2, sp, #14 -1001fba4: 463b mov r3, r7 -1001fba6: f01e feab bl 1003e900 <__rtw_set_fixed_ie_veneer> -1001fbaa: f8d8 30fc ldr.w r3, [r8, #252] ; 0xfc -1001fbae: 2102 movs r1, #2 -1001fbb0: ea6f 4383 mvn.w r3, r3, lsl #18 -1001fbb4: ea6f 4393 mvn.w r3, r3, lsr #18 -1001fbb8: f8ad 3012 strh.w r3, [sp, #18] -1001fbbc: 4632 mov r2, r6 -1001fbbe: 463b mov r3, r7 -1001fbc0: f01e fe9e bl 1003e900 <__rtw_set_fixed_ie_veneer> -1001fbc4: f8d8 2168 ldr.w r2, [r8, #360] ; 0x168 -1001fbc8: 2101 movs r1, #1 -1001fbca: 2a08 cmp r2, #8 -1001fbcc: 9700 str r7, [sp, #0] -1001fbce: f508 73ac add.w r3, r8, #344 ; 0x158 -1001fbd2: d909 bls.n 1001fbe8 -1001fbd4: 2208 movs r2, #8 -1001fbd6: f01e fe6b bl 1003e8b0 <__rtw_set_ie_veneer> -1001fbda: f8d8 2168 ldr.w r2, [r8, #360] ; 0x168 -1001fbde: 2132 movs r1, #50 ; 0x32 -1001fbe0: 9700 str r7, [sp, #0] -1001fbe2: 3a08 subs r2, #8 -1001fbe4: f508 73b0 add.w r3, r8, #352 ; 0x160 -1001fbe8: f01e fe62 bl 1003e8b0 <__rtw_set_ie_veneer> -1001fbec: f8d8 32c8 ldr.w r3, [r8, #712] ; 0x2c8 -1001fbf0: 4606 mov r6, r0 -1001fbf2: 051a lsls r2, r3, #20 -1001fbf4: d538 bpl.n 1001fc68 -1001fbf6: f8d4 3454 ldr.w r3, [r4, #1108] ; 0x454 -1001fbfa: 2b00 cmp r3, #0 -1001fbfc: d034 beq.n 1001fc68 -1001fbfe: f10d 0918 add.w r9, sp, #24 -1001fc02: 2300 movs r3, #0 -1001fc04: f849 3d04 str.w r3, [r9, #-4]! -1001fc08: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001fc0c: f504 7a90 add.w sl, r4, #288 ; 0x120 -1001fc10: 212d movs r1, #45 ; 0x2d -1001fc12: 4650 mov r0, sl -1001fc14: 464a mov r2, r9 -1001fc16: 3b0c subs r3, #12 -1001fc18: f01e fe46 bl 1003e8a8 <__rtw_get_ie_veneer> -1001fc1c: 4601 mov r1, r0 -1001fc1e: b160 cbz r0, 1001fc3a -1001fc20: 9a05 ldr r2, [sp, #20] -1001fc22: b152 cbz r2, 1001fc3a -1001fc24: 4630 mov r0, r6 -1001fc26: 3202 adds r2, #2 -1001fc28: f7f7 fbf2 bl 10017410 -1001fc2c: 9b05 ldr r3, [sp, #20] -1001fc2e: 1c9a adds r2, r3, #2 -1001fc30: 4416 add r6, r2 -1001fc32: 696a ldr r2, [r5, #20] -1001fc34: 4413 add r3, r2 -1001fc36: 3302 adds r3, #2 -1001fc38: 616b str r3, [r5, #20] -1001fc3a: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001fc3e: 213d movs r1, #61 ; 0x3d -1001fc40: 4650 mov r0, sl -1001fc42: 464a mov r2, r9 -1001fc44: 3b0c subs r3, #12 -1001fc46: f01e fe2f bl 1003e8a8 <__rtw_get_ie_veneer> -1001fc4a: 4601 mov r1, r0 -1001fc4c: b160 cbz r0, 1001fc68 -1001fc4e: 9a05 ldr r2, [sp, #20] -1001fc50: b152 cbz r2, 1001fc68 -1001fc52: 4630 mov r0, r6 -1001fc54: 3202 adds r2, #2 -1001fc56: f7f7 fbdb bl 10017410 -1001fc5a: 9b05 ldr r3, [sp, #20] -1001fc5c: 1c9a adds r2, r3, #2 -1001fc5e: 4416 add r6, r2 -1001fc60: 696a ldr r2, [r5, #20] -1001fc62: 4413 add r3, r2 -1001fc64: 3302 adds r3, #2 -1001fc66: 616b str r3, [r5, #20] -1001fc68: f8d8 32c8 ldr.w r3, [r8, #712] ; 0x2c8 -1001fc6c: 059b lsls r3, r3, #22 -1001fc6e: d527 bpl.n 1001fcc0 -1001fc70: f8d4 344c ldr.w r3, [r4, #1100] ; 0x44c -1001fc74: b323 cbz r3, 1001fcc0 -1001fc76: 2300 movs r3, #0 -1001fc78: 9305 str r3, [sp, #20] -1001fc7a: f504 7090 add.w r0, r4, #288 ; 0x120 -1001fc7e: f8d4 e110 ldr.w lr, [r4, #272] ; 0x110 -1001fc82: 9b05 ldr r3, [sp, #20] -1001fc84: f1ae 0e0e sub.w lr, lr, #14 -1001fc88: 21dd movs r1, #221 ; 0xdd -1001fc8a: aa05 add r2, sp, #20 -1001fc8c: ebc3 030e rsb r3, r3, lr -1001fc90: f01e fe0a bl 1003e8a8 <__rtw_get_ie_veneer> -1001fc94: 4680 mov r8, r0 -1001fc96: b198 cbz r0, 1001fcc0 -1001fc98: 2206 movs r2, #6 -1001fc9a: 3002 adds r0, #2 -1001fc9c: 4931 ldr r1, [pc, #196] ; (1001fd64 ) -1001fc9e: f7f7 fbbf bl 10017420 -1001fca2: 9a05 ldr r2, [sp, #20] -1001fca4: 2800 cmp r0, #0 -1001fca6: d053 beq.n 1001fd50 -1001fca8: 4630 mov r0, r6 -1001fcaa: 3202 adds r2, #2 -1001fcac: 4641 mov r1, r8 -1001fcae: f7f7 fbaf bl 10017410 -1001fcb2: 9b05 ldr r3, [sp, #20] -1001fcb4: 1c9a adds r2, r3, #2 -1001fcb6: 4416 add r6, r2 -1001fcb8: 696a ldr r2, [r5, #20] -1001fcba: 4413 add r3, r2 -1001fcbc: 3302 adds r3, #2 -1001fcbe: 616b str r3, [r5, #20] -1001fcc0: f894 372e ldrb.w r3, [r4, #1838] ; 0x72e -1001fcc4: 2b01 cmp r3, #1 -1001fcc6: d107 bne.n 1001fcd8 -1001fcc8: 4630 mov r0, r6 -1001fcca: 9700 str r7, [sp, #0] -1001fccc: 21dd movs r1, #221 ; 0xdd -1001fcce: 2206 movs r2, #6 -1001fcd0: 4b25 ldr r3, [pc, #148] ; (1001fd68 ) -1001fcd2: f01e fded bl 1003e8b0 <__rtw_set_ie_veneer> -1001fcd6: 4606 mov r6, r0 -1001fcd8: f8d4 14cc ldr.w r1, [r4, #1228] ; 0x4cc -1001fcdc: b159 cbz r1, 1001fcf6 -1001fcde: f8d4 24d8 ldr.w r2, [r4, #1240] ; 0x4d8 -1001fce2: b142 cbz r2, 1001fcf6 -1001fce4: 4630 mov r0, r6 -1001fce6: f7f7 fb93 bl 10017410 -1001fcea: f8d4 34d8 ldr.w r3, [r4, #1240] ; 0x4d8 -1001fcee: 696a ldr r2, [r5, #20] -1001fcf0: 441e add r6, r3 -1001fcf2: 4413 add r3, r2 -1001fcf4: 616b str r3, [r5, #20] -1001fcf6: 6863 ldr r3, [r4, #4] -1001fcf8: 2b05 cmp r3, #5 -1001fcfa: d112 bne.n 1001fd22 -1001fcfc: f241 63a8 movw r3, #5800 ; 0x16a8 -1001fd00: 58e3 ldr r3, [r4, r3] -1001fd02: 2b03 cmp r3, #3 -1001fd04: d10d bne.n 1001fd22 -1001fd06: f8d4 14ec ldr.w r1, [r4, #1260] ; 0x4ec -1001fd0a: b151 cbz r1, 1001fd22 -1001fd0c: f8d4 2500 ldr.w r2, [r4, #1280] ; 0x500 -1001fd10: b13a cbz r2, 1001fd22 -1001fd12: 4630 mov r0, r6 -1001fd14: f7f7 fb7c bl 10017410 -1001fd18: 696a ldr r2, [r5, #20] -1001fd1a: f8d4 3500 ldr.w r3, [r4, #1280] ; 0x500 -1001fd1e: 4413 add r3, r2 -1001fd20: 616b str r3, [r5, #20] -1001fd22: 696b ldr r3, [r5, #20] -1001fd24: f240 6252 movw r2, #1618 ; 0x652 -1001fd28: 61ab str r3, [r5, #24] -1001fd2a: 3328 adds r3, #40 ; 0x28 -1001fd2c: 4293 cmp r3, r2 -1001fd2e: d90a bls.n 1001fd46 -1001fd30: 4b0e ldr r3, [pc, #56] ; (1001fd6c ) -1001fd32: 681b ldr r3, [r3, #0] -1001fd34: b13b cbz r3, 1001fd46 -1001fd36: 480e ldr r0, [pc, #56] ; (1001fd70 ) -1001fd38: f7fa ff12 bl 1001ab60 -1001fd3c: 4b0d ldr r3, [pc, #52] ; (1001fd74 ) -1001fd3e: f8d3 0160 ldr.w r0, [r3, #352] ; 0x160 -1001fd42: f7fa ff0d bl 1001ab60 -1001fd46: 4620 mov r0, r4 -1001fd48: 4629 mov r1, r5 -1001fd4a: f7fe fdbe bl 1001e8ca -1001fd4e: e005 b.n 1001fd5c -1001fd50: 2a00 cmp r2, #0 -1001fd52: d0b5 beq.n 1001fcc0 -1001fd54: 3202 adds r2, #2 -1001fd56: eb08 0002 add.w r0, r8, r2 -1001fd5a: e790 b.n 1001fc7e -1001fd5c: b006 add sp, #24 -1001fd5e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1001fd62: bf00 nop -1001fd64: 100414e0 .word 0x100414e0 -1001fd68: 100416ca .word 0x100416ca -1001fd6c: 10044ec0 .word 0x10044ec0 -1001fd70: 10042939 .word 0x10042939 -1001fd74: 10043a4c .word 0x10043a4c - -1001fd78 : -1001fd78: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1001fd7c: f600 1a58 addw sl, r0, #2392 ; 0x958 -1001fd80: b08f sub sp, #60 ; 0x3c -1001fd82: 4604 mov r4, r0 -1001fd84: f100 0998 add.w r9, r0, #152 ; 0x98 -1001fd88: f04f 0800 mov.w r8, #0 -1001fd8c: 4650 mov r0, sl -1001fd8e: f8cd 8014 str.w r8, [sp, #20] -1001fd92: f7fe fd1b bl 1001e7cc -1001fd96: 4605 mov r5, r0 -1001fd98: 2800 cmp r0, #0 -1001fd9a: f000 818f beq.w 100200bc -1001fd9e: 4620 mov r0, r4 -1001fda0: f105 0108 add.w r1, r5, #8 -1001fda4: f7fe fd31 bl 1001e80a -1001fda8: 4641 mov r1, r8 -1001fdaa: 2268 movs r2, #104 ; 0x68 -1001fdac: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 -1001fdb0: f7f7 fb3e bl 10017430 -1001fdb4: f8d5 6080 ldr.w r6, [r5, #128] ; 0x80 -1001fdb8: 4648 mov r0, r9 -1001fdba: f886 8028 strb.w r8, [r6, #40] ; 0x28 -1001fdbe: f886 8029 strb.w r8, [r6, #41] ; 0x29 -1001fdc2: f008 fccd bl 10028760 -1001fdc6: 2206 movs r2, #6 -1001fdc8: 4601 mov r1, r0 -1001fdca: f106 002c add.w r0, r6, #44 ; 0x2c -1001fdce: f7f7 fb1f bl 10017410 -1001fdd2: f504 51a4 add.w r1, r4, #5248 ; 0x1480 -1001fdd6: f106 0032 add.w r0, r6, #50 ; 0x32 -1001fdda: 3119 adds r1, #25 -1001fddc: 2206 movs r2, #6 -1001fdde: f7f7 fb17 bl 10017410 -1001fde2: 4648 mov r0, r9 -1001fde4: f008 fcbc bl 10028760 -1001fde8: 2206 movs r2, #6 -1001fdea: 4601 mov r1, r0 -1001fdec: f106 0038 add.w r0, r6, #56 ; 0x38 -1001fdf0: f7f7 fb0e bl 10017410 -1001fdf4: 8ff3 ldrh r3, [r6, #62] ; 0x3e -1001fdf6: f8b4 251c ldrh.w r2, [r4, #1308] ; 0x51c -1001fdfa: f003 030f and.w r3, r3, #15 -1001fdfe: ea43 1302 orr.w r3, r3, r2, lsl #4 -1001fe02: 87f3 strh r3, [r6, #62] ; 0x3e -1001fe04: f8b4 351c ldrh.w r3, [r4, #1308] ; 0x51c -1001fe08: f504 708a add.w r0, r4, #276 ; 0x114 -1001fe0c: 3301 adds r3, #1 -1001fe0e: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c -1001fe12: 8d33 ldrh r3, [r6, #40] ; 0x28 -1001fe14: 462f mov r7, r5 -1001fe16: f023 03fc bic.w r3, r3, #252 ; 0xfc -1001fe1a: 8533 strh r3, [r6, #40] ; 0x28 -1001fe1c: 2318 movs r3, #24 -1001fe1e: 616b str r3, [r5, #20] -1001fe20: f7fd fbc6 bl 1001d5b0 -1001fe24: 2202 movs r2, #2 -1001fe26: 4601 mov r1, r0 -1001fe28: f106 0040 add.w r0, r6, #64 ; 0x40 -1001fe2c: f7f7 faf0 bl 10017410 -1001fe30: 696b ldr r3, [r5, #20] -1001fe32: a90e add r1, sp, #56 ; 0x38 -1001fe34: 3302 adds r3, #2 -1001fe36: 616b str r3, [r5, #20] -1001fe38: 2303 movs r3, #3 -1001fe3a: f821 3d2a strh.w r3, [r1, #-42]! -1001fe3e: f106 0042 add.w r0, r6, #66 ; 0x42 -1001fe42: 2202 movs r2, #2 -1001fe44: f7f7 fae4 bl 10017410 -1001fe48: 696b ldr r3, [r5, #20] -1001fe4a: 4641 mov r1, r8 -1001fe4c: 3302 adds r3, #2 -1001fe4e: f847 3f14 str.w r3, [r7, #20]! -1001fe52: f8d4 20a4 ldr.w r2, [r4, #164] ; 0xa4 -1001fe56: f104 03a8 add.w r3, r4, #168 ; 0xa8 -1001fe5a: f106 0044 add.w r0, r6, #68 ; 0x44 -1001fe5e: 9700 str r7, [sp, #0] -1001fe60: f01e fd26 bl 1003e8b0 <__rtw_set_ie_veneer> -1001fe64: f10d 0b28 add.w fp, sp, #40 ; 0x28 -1001fe68: 4680 mov r8, r0 -1001fe6a: 4659 mov r1, fp -1001fe6c: 4620 mov r0, r4 -1001fe6e: aa05 add r2, sp, #20 -1001fe70: f008 fb6c bl 1002854c -1001fe74: f894 351e ldrb.w r3, [r4, #1310] ; 0x51e -1001fe78: 2600 movs r6, #0 -1001fe7a: 2b0e cmp r3, #14 -1001fe7c: bf04 itt eq -1001fe7e: 2304 moveq r3, #4 -1001fe80: 9305 streq r3, [sp, #20] -1001fe82: 9805 ldr r0, [sp, #20] -1001fe84: 4633 mov r3, r6 -1001fe86: eb09 0203 add.w r2, r9, r3 -1001fe8a: f892 1064 ldrb.w r1, [r2, #100] ; 0x64 -1001fe8e: b1a1 cbz r1, 1001feba -1001fe90: 2200 movs r2, #0 -1001fe92: 4282 cmp r2, r0 -1001fe94: d00e beq.n 1001feb4 -1001fe96: f81b e002 ldrb.w lr, [fp, r2] -1001fe9a: f041 0c80 orr.w ip, r1, #128 ; 0x80 -1001fe9e: f04e 0e80 orr.w lr, lr, #128 ; 0x80 -1001fea2: 45f4 cmp ip, lr -1001fea4: d001 beq.n 1001feaa -1001fea6: 3201 adds r2, #1 -1001fea8: e7f3 b.n 1001fe92 -1001feaa: aa0e add r2, sp, #56 ; 0x38 -1001feac: 4432 add r2, r6 -1001feae: f802 1c20 strb.w r1, [r2, #-32] -1001feb2: 3601 adds r6, #1 -1001feb4: 3301 adds r3, #1 -1001feb6: 2b10 cmp r3, #16 -1001feb8: d1e5 bne.n 1001fe86 -1001feba: b94e cbnz r6, 1001fed0 -1001febc: f8d5 1084 ldr.w r1, [r5, #132] ; 0x84 -1001fec0: 4650 mov r0, sl -1001fec2: f00a fcc6 bl 1002a852 -1001fec6: 4650 mov r0, sl -1001fec8: 4629 mov r1, r5 -1001feca: f009 fd61 bl 10029990 -1001fece: e0f5 b.n 100200bc -1001fed0: 2e08 cmp r6, #8 -1001fed2: 9700 str r7, [sp, #0] -1001fed4: 4640 mov r0, r8 -1001fed6: f04f 0101 mov.w r1, #1 -1001feda: dd09 ble.n 1001fef0 -1001fedc: 2208 movs r2, #8 -1001fede: ab06 add r3, sp, #24 -1001fee0: f01e fce6 bl 1003e8b0 <__rtw_set_ie_veneer> -1001fee4: 9700 str r7, [sp, #0] -1001fee6: 2132 movs r1, #50 ; 0x32 -1001fee8: f1a6 0208 sub.w r2, r6, #8 -1001feec: ab08 add r3, sp, #32 -1001feee: e001 b.n 1001fef4 -1001fef0: 4632 mov r2, r6 -1001fef2: ab06 add r3, sp, #24 -1001fef4: f01e fcdc bl 1003e8b0 <__rtw_set_ie_veneer> -1001fef8: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001fefc: f504 7890 add.w r8, r4, #288 ; 0x120 -1001ff00: 3b0c subs r3, #12 -1001ff02: 4606 mov r6, r0 -1001ff04: 2130 movs r1, #48 ; 0x30 -1001ff06: 4640 mov r0, r8 -1001ff08: aa04 add r2, sp, #16 -1001ff0a: f01e fccd bl 1003e8a8 <__rtw_get_ie_veneer> -1001ff0e: 4603 mov r3, r0 -1001ff10: b138 cbz r0, 1001ff22 -1001ff12: 4630 mov r0, r6 -1001ff14: 9700 str r7, [sp, #0] -1001ff16: 2130 movs r1, #48 ; 0x30 -1001ff18: 9a04 ldr r2, [sp, #16] -1001ff1a: 3302 adds r3, #2 -1001ff1c: f01e fcc8 bl 1003e8b0 <__rtw_set_ie_veneer> -1001ff20: 4606 mov r6, r0 -1001ff22: f8d4 3454 ldr.w r3, [r4, #1108] ; 0x454 -1001ff26: 2b01 cmp r3, #1 -1001ff28: d140 bne.n 1001ffac -1001ff2a: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001ff2e: 4640 mov r0, r8 -1001ff30: 212d movs r1, #45 ; 0x2d -1001ff32: aa04 add r2, sp, #16 -1001ff34: 3b0c subs r3, #12 -1001ff36: f01e fcb7 bl 1003e8a8 <__rtw_get_ie_veneer> -1001ff3a: 4682 mov sl, r0 -1001ff3c: b3b0 cbz r0, 1001ffac -1001ff3e: 4620 mov r0, r4 -1001ff40: f008 ff3e bl 10028dc0 -1001ff44: bb90 cbnz r0, 1001ffac -1001ff46: f204 785a addw r8, r4, #1882 ; 0x75a -1001ff4a: 4640 mov r0, r8 -1001ff4c: f10a 0102 add.w r1, sl, #2 -1001ff50: 2220 movs r2, #32 -1001ff52: f7f7 fa5d bl 10017410 -1001ff56: f8b4 375a ldrh.w r3, [r4, #1882] ; 0x75a -1001ff5a: 4620 mov r0, r4 -1001ff5c: f023 0342 bic.w r3, r3, #66 ; 0x42 -1001ff60: f043 030c orr.w r3, r3, #12 -1001ff64: f8a4 375a strh.w r3, [r4, #1882] ; 0x75a -1001ff68: 2117 movs r1, #23 -1001ff6a: f10d 020d add.w r2, sp, #13 -1001ff6e: f012 fab7 bl 100324e0 -1001ff72: f89d 300d ldrb.w r3, [sp, #13] -1001ff76: 2b03 cmp r3, #3 -1001ff78: d110 bne.n 1001ff9c -1001ff7a: f504 529c add.w r2, r4, #4992 ; 0x1380 -1001ff7e: f892 304e ldrb.w r3, [r2, #78] ; 0x4e -1001ff82: b12b cbz r3, 1001ff90 -1001ff84: f8b4 375a ldrh.w r3, [r4, #1882] ; 0x75a -1001ff88: f443 7380 orr.w r3, r3, #256 ; 0x100 -1001ff8c: f8a4 375a strh.w r3, [r4, #1882] ; 0x75a -1001ff90: f204 705d addw r0, r4, #1885 ; 0x75d -1001ff94: 494b ldr r1, [pc, #300] ; (100200c4 ) -1001ff96: 2210 movs r2, #16 -1001ff98: f7f7 fa3a bl 10017410 -1001ff9c: 4630 mov r0, r6 -1001ff9e: 9700 str r7, [sp, #0] -1001ffa0: 212d movs r1, #45 ; 0x2d -1001ffa2: 9a04 ldr r2, [sp, #16] -1001ffa4: 4643 mov r3, r8 -1001ffa6: f01e fc83 bl 1003e8b0 <__rtw_set_ie_veneer> -1001ffaa: 4606 mov r6, r0 -1001ffac: f04f 0a0c mov.w sl, #12 -1001ffb0: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -1001ffb4: 459a cmp sl, r3 -1001ffb6: d23b bcs.n 10020030 -1001ffb8: f10a 0378 add.w r3, sl, #120 ; 0x78 -1001ffbc: 444b add r3, r9 -1001ffbe: 791a ldrb r2, [r3, #4] -1001ffc0: f103 0b04 add.w fp, r3, #4 -1001ffc4: 2add cmp r2, #221 ; 0xdd -1001ffc6: d12e bne.n 10020026 -1001ffc8: f103 0806 add.w r8, r3, #6 -1001ffcc: 4640 mov r0, r8 -1001ffce: 493e ldr r1, [pc, #248] ; (100200c8 ) -1001ffd0: 2204 movs r2, #4 -1001ffd2: f7f7 fa25 bl 10017420 -1001ffd6: b148 cbz r0, 1001ffec -1001ffd8: 4640 mov r0, r8 -1001ffda: 493c ldr r1, [pc, #240] ; (100200cc ) -1001ffdc: 2204 movs r2, #4 -1001ffde: f7f7 fa1f bl 10017420 -1001ffe2: b1b8 cbz r0, 10020014 -1001ffe4: 230e movs r3, #14 -1001ffe6: f88b 3001 strb.w r3, [fp, #1] -1001ffea: e013 b.n 10020014 -1001ffec: 4640 mov r0, r8 -1001ffee: 4938 ldr r1, [pc, #224] ; (100200d0 ) -1001fff0: 2204 movs r2, #4 -1001fff2: f7f7 fa15 bl 10017420 -1001fff6: 2800 cmp r0, #0 -1001fff8: d1ee bne.n 1001ffd8 -1001fffa: 4640 mov r0, r8 -1001fffc: 4933 ldr r1, [pc, #204] ; (100200cc ) -1001fffe: 2204 movs r2, #4 -10020000: f7f7 fa0e bl 10017420 -10020004: b178 cbz r0, 10020026 -10020006: f504 539c add.w r3, r4, #4992 ; 0x1380 -1002000a: 3305 adds r3, #5 -1002000c: 781b ldrb r3, [r3, #0] -1002000e: 2b00 cmp r3, #0 -10020010: d1e2 bne.n 1001ffd8 -10020012: e008 b.n 10020026 -10020014: f89b 2001 ldrb.w r2, [fp, #1] -10020018: 4630 mov r0, r6 -1002001a: 9700 str r7, [sp, #0] -1002001c: 21dd movs r1, #221 ; 0xdd -1002001e: 4643 mov r3, r8 -10020020: f01e fc46 bl 1003e8b0 <__rtw_set_ie_veneer> -10020024: 4606 mov r6, r0 -10020026: f89b 3001 ldrb.w r3, [fp, #1] -1002002a: 3302 adds r3, #2 -1002002c: 449a add sl, r3 -1002002e: e7bf b.n 1001ffb0 -10020030: f894 372e ldrb.w r3, [r4, #1838] ; 0x72e -10020034: 2b01 cmp r3, #1 -10020036: d107 bne.n 10020048 -10020038: 4630 mov r0, r6 -1002003a: 9700 str r7, [sp, #0] -1002003c: 21dd movs r1, #221 ; 0xdd -1002003e: 2206 movs r2, #6 -10020040: 4b24 ldr r3, [pc, #144] ; (100200d4 ) -10020042: f01e fc35 bl 1003e8b0 <__rtw_set_ie_veneer> -10020046: 4606 mov r6, r0 -10020048: f241 3385 movw r3, #4997 ; 0x1385 -1002004c: 5ce3 ldrb r3, [r4, r3] -1002004e: b173 cbz r3, 1002006e -10020050: f8d4 14ac ldr.w r1, [r4, #1196] ; 0x4ac -10020054: b159 cbz r1, 1002006e -10020056: f8d4 24b0 ldr.w r2, [r4, #1200] ; 0x4b0 -1002005a: b142 cbz r2, 1002006e -1002005c: 4630 mov r0, r6 -1002005e: f7f7 f9d7 bl 10017410 -10020062: f8d4 34b0 ldr.w r3, [r4, #1200] ; 0x4b0 -10020066: 696a ldr r2, [r5, #20] -10020068: 441e add r6, r3 -1002006a: 4413 add r3, r2 -1002006c: 616b str r3, [r5, #20] -1002006e: 6863 ldr r3, [r4, #4] -10020070: 2b05 cmp r3, #5 -10020072: d10d bne.n 10020090 -10020074: f8d4 14e8 ldr.w r1, [r4, #1256] ; 0x4e8 -10020078: b151 cbz r1, 10020090 -1002007a: f8d4 24fc ldr.w r2, [r4, #1276] ; 0x4fc -1002007e: b13a cbz r2, 10020090 -10020080: 4630 mov r0, r6 -10020082: f7f7 f9c5 bl 10017410 -10020086: 696a ldr r2, [r5, #20] -10020088: f8d4 34fc ldr.w r3, [r4, #1276] ; 0x4fc -1002008c: 4413 add r3, r2 -1002008e: 616b str r3, [r5, #20] -10020090: 696b ldr r3, [r5, #20] -10020092: f240 6252 movw r2, #1618 ; 0x652 -10020096: 61ab str r3, [r5, #24] -10020098: 3328 adds r3, #40 ; 0x28 -1002009a: 4293 cmp r3, r2 -1002009c: d90a bls.n 100200b4 -1002009e: 4b0e ldr r3, [pc, #56] ; (100200d8 ) -100200a0: 681b ldr r3, [r3, #0] -100200a2: b13b cbz r3, 100200b4 -100200a4: 480d ldr r0, [pc, #52] ; (100200dc ) -100200a6: f7fa fd5b bl 1001ab60 -100200aa: 4b0d ldr r3, [pc, #52] ; (100200e0 ) -100200ac: f8d3 0164 ldr.w r0, [r3, #356] ; 0x164 -100200b0: f7fa fd56 bl 1001ab60 -100200b4: 4620 mov r0, r4 -100200b6: 4629 mov r1, r5 -100200b8: f7fe fc07 bl 1001e8ca -100200bc: b00f add sp, #60 ; 0x3c -100200be: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -100200c2: bf00 nop -100200c4: 1004144f .word 0x1004144f -100200c8: 100414dc .word 0x100414dc -100200cc: 10041441 .word 0x10041441 -100200d0: 10041501 .word 0x10041501 -100200d4: 100416ca .word 0x100416ca -100200d8: 10044ec0 .word 0x10044ec0 -100200dc: 10042939 .word 0x10042939 -100200e0: 10043a4c .word 0x10043a4c - -100200e4 : -100200e4: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -100200e8: 468a mov sl, r1 -100200ea: 4605 mov r5, r0 -100200ec: 2800 cmp r0, #0 -100200ee: d06c beq.n 100201ca -100200f0: f100 0898 add.w r8, r0, #152 ; 0x98 -100200f4: f600 1058 addw r0, r0, #2392 ; 0x958 -100200f8: f7fe fb68 bl 1001e7cc -100200fc: 4606 mov r6, r0 -100200fe: 2800 cmp r0, #0 -10020100: d063 beq.n 100201ca -10020102: 2700 movs r7, #0 -10020104: 4628 mov r0, r5 -10020106: f106 0108 add.w r1, r6, #8 -1002010a: f7fe fb7e bl 1001e80a -1002010e: f886 706c strb.w r7, [r6, #108] ; 0x6c -10020112: f8d6 0080 ldr.w r0, [r6, #128] ; 0x80 -10020116: 4639 mov r1, r7 -10020118: 2268 movs r2, #104 ; 0x68 -1002011a: f7f7 f989 bl 10017430 -1002011e: f8d5 3680 ldr.w r3, [r5, #1664] ; 0x680 -10020122: f8d6 4080 ldr.w r4, [r6, #128] ; 0x80 -10020126: f003 0303 and.w r3, r3, #3 -1002012a: 2b03 cmp r3, #3 -1002012c: f104 0928 add.w r9, r4, #40 ; 0x28 -10020130: f884 7028 strb.w r7, [r4, #40] ; 0x28 -10020134: f884 7029 strb.w r7, [r4, #41] ; 0x29 -10020138: d101 bne.n 1002013e -1002013a: 2302 movs r3, #2 -1002013c: e004 b.n 10020148 -1002013e: 2b02 cmp r3, #2 -10020140: d104 bne.n 1002014c -10020142: f884 7028 strb.w r7, [r4, #40] ; 0x28 -10020146: 2301 movs r3, #1 -10020148: f884 3029 strb.w r3, [r4, #41] ; 0x29 -1002014c: f1ba 0f00 cmp.w sl, #0 -10020150: d003 beq.n 1002015a -10020152: 8d23 ldrh r3, [r4, #40] ; 0x28 -10020154: f443 5380 orr.w r3, r3, #4096 ; 0x1000 -10020158: 8523 strh r3, [r4, #40] ; 0x28 -1002015a: 4640 mov r0, r8 -1002015c: f008 fb00 bl 10028760 -10020160: 2206 movs r2, #6 -10020162: 4601 mov r1, r0 -10020164: f104 002c add.w r0, r4, #44 ; 0x2c -10020168: f7f7 f952 bl 10017410 -1002016c: f505 51a4 add.w r1, r5, #5248 ; 0x1480 -10020170: f104 0032 add.w r0, r4, #50 ; 0x32 -10020174: 3119 adds r1, #25 -10020176: 2206 movs r2, #6 -10020178: f7f7 f94a bl 10017410 -1002017c: 4640 mov r0, r8 -1002017e: f008 faef bl 10028760 -10020182: 2206 movs r2, #6 -10020184: 4601 mov r1, r0 -10020186: f104 0038 add.w r0, r4, #56 ; 0x38 -1002018a: f7f7 f941 bl 10017410 -1002018e: f8b9 3016 ldrh.w r3, [r9, #22] -10020192: f8b5 251c ldrh.w r2, [r5, #1308] ; 0x51c -10020196: f003 030f and.w r3, r3, #15 -1002019a: ea43 1302 orr.w r3, r3, r2, lsl #4 -1002019e: f8a9 3016 strh.w r3, [r9, #22] -100201a2: f8b5 351c ldrh.w r3, [r5, #1308] ; 0x51c -100201a6: 4628 mov r0, r5 -100201a8: 3301 adds r3, #1 -100201aa: f8a5 351c strh.w r3, [r5, #1308] ; 0x51c -100201ae: 8d23 ldrh r3, [r4, #40] ; 0x28 -100201b0: 4631 mov r1, r6 -100201b2: f023 03fc bic.w r3, r3, #252 ; 0xfc -100201b6: f043 0348 orr.w r3, r3, #72 ; 0x48 -100201ba: 8523 strh r3, [r4, #40] ; 0x28 -100201bc: 2318 movs r3, #24 -100201be: 6173 str r3, [r6, #20] -100201c0: 61b3 str r3, [r6, #24] -100201c2: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -100201c6: f7fe bb80 b.w 1001e8ca -100201ca: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - -100201ce : -100201ce: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -100201d2: 4606 mov r6, r0 -100201d4: f500 6546 add.w r5, r0, #3168 ; 0xc60 -100201d8: f100 0a98 add.w sl, r0, #152 ; 0x98 -100201dc: f600 1058 addw r0, r0, #2392 ; 0x958 -100201e0: 4689 mov r9, r1 -100201e2: 4693 mov fp, r2 -100201e4: f7fe faf2 bl 1001e7cc -100201e8: 4604 mov r4, r0 -100201ea: 2800 cmp r0, #0 -100201ec: f000 8097 beq.w 1002031e -100201f0: 4628 mov r0, r5 -100201f2: 4649 mov r1, r9 -100201f4: f008 f84e bl 10028294 -100201f8: f104 0108 add.w r1, r4, #8 -100201fc: 4605 mov r5, r0 -100201fe: 4630 mov r0, r6 -10020200: f7fe fb03 bl 1001e80a -10020204: 8a63 ldrh r3, [r4, #18] -10020206: 2700 movs r7, #0 -10020208: 3302 adds r3, #2 -1002020a: 8263 strh r3, [r4, #18] -1002020c: 2301 movs r3, #1 -1002020e: f884 305e strb.w r3, [r4, #94] ; 0x5e -10020212: f884 3069 strb.w r3, [r4, #105] ; 0x69 -10020216: f884 7042 strb.w r7, [r4, #66] ; 0x42 -1002021a: f884 7065 strb.w r7, [r4, #101] ; 0x65 -1002021e: f8d5 2100 ldr.w r2, [r5, #256] ; 0x100 -10020222: f104 0057 add.w r0, r4, #87 ; 0x57 -10020226: f884 2043 strb.w r2, [r4, #67] ; 0x43 -1002022a: 6725 str r5, [r4, #112] ; 0x70 -1002022c: 4649 mov r1, r9 -1002022e: 2206 movs r2, #6 -10020230: 9301 str r3, [sp, #4] -10020232: f7f7 f8ed bl 10017410 -10020236: 2268 movs r2, #104 ; 0x68 -10020238: f8d4 0080 ldr.w r0, [r4, #128] ; 0x80 -1002023c: 4639 mov r1, r7 -1002023e: f7f7 f8f7 bl 10017430 -10020242: f8d6 2680 ldr.w r2, [r6, #1664] ; 0x680 -10020246: f8d4 5080 ldr.w r5, [r4, #128] ; 0x80 -1002024a: f002 0203 and.w r2, r2, #3 -1002024e: 2a03 cmp r2, #3 -10020250: f105 0828 add.w r8, r5, #40 ; 0x28 -10020254: f885 7028 strb.w r7, [r5, #40] ; 0x28 -10020258: f885 7029 strb.w r7, [r5, #41] ; 0x29 -1002025c: 9b01 ldr r3, [sp, #4] -1002025e: d101 bne.n 10020264 -10020260: 2302 movs r3, #2 -10020262: e003 b.n 1002026c -10020264: 2a02 cmp r2, #2 -10020266: d103 bne.n 10020270 -10020268: f885 7028 strb.w r7, [r5, #40] ; 0x28 -1002026c: f885 3029 strb.w r3, [r5, #41] ; 0x29 -10020270: f894 3065 ldrb.w r3, [r4, #101] ; 0x65 -10020274: b11b cbz r3, 1002027e -10020276: 8d2b ldrh r3, [r5, #40] ; 0x28 -10020278: f443 5300 orr.w r3, r3, #8192 ; 0x2000 -1002027c: 852b strh r3, [r5, #40] ; 0x28 -1002027e: 8a63 ldrh r3, [r4, #18] -10020280: f00b 0b0f and.w fp, fp, #15 -10020284: 3b02 subs r3, #2 -10020286: f838 2003 ldrh.w r2, [r8, r3] -1002028a: f105 002c add.w r0, r5, #44 ; 0x2c -1002028e: ea4b 0b02 orr.w fp, fp, r2 -10020292: f828 b003 strh.w fp, [r8, r3] -10020296: f894 2069 ldrb.w r2, [r4, #105] ; 0x69 -1002029a: 4649 mov r1, r9 -1002029c: f002 0201 and.w r2, r2, #1 -100202a0: ea4b 1b02 orr.w fp, fp, r2, lsl #4 -100202a4: f828 b003 strh.w fp, [r8, r3] -100202a8: f894 2042 ldrb.w r2, [r4, #66] ; 0x42 -100202ac: f002 0203 and.w r2, r2, #3 -100202b0: ea4b 1b42 orr.w fp, fp, r2, lsl #5 -100202b4: f828 b003 strh.w fp, [r8, r3] -100202b8: 2206 movs r2, #6 -100202ba: f7f7 f8a9 bl 10017410 -100202be: f506 51a4 add.w r1, r6, #5248 ; 0x1480 -100202c2: f105 0032 add.w r0, r5, #50 ; 0x32 -100202c6: 3119 adds r1, #25 -100202c8: 2206 movs r2, #6 -100202ca: f7f7 f8a1 bl 10017410 -100202ce: 4650 mov r0, sl -100202d0: f008 fa46 bl 10028760 -100202d4: 2206 movs r2, #6 -100202d6: 4601 mov r1, r0 -100202d8: f105 0038 add.w r0, r5, #56 ; 0x38 -100202dc: f7f7 f898 bl 10017410 -100202e0: f8b8 3016 ldrh.w r3, [r8, #22] -100202e4: f8b6 251c ldrh.w r2, [r6, #1308] ; 0x51c -100202e8: f003 030f and.w r3, r3, #15 -100202ec: ea43 1302 orr.w r3, r3, r2, lsl #4 -100202f0: f8a8 3016 strh.w r3, [r8, #22] -100202f4: f8b6 351c ldrh.w r3, [r6, #1308] ; 0x51c -100202f8: 4630 mov r0, r6 -100202fa: 3301 adds r3, #1 -100202fc: f8a6 351c strh.w r3, [r6, #1308] ; 0x51c -10020300: 8d2b ldrh r3, [r5, #40] ; 0x28 -10020302: 4621 mov r1, r4 -10020304: f023 03fc bic.w r3, r3, #252 ; 0xfc -10020308: f043 03c8 orr.w r3, r3, #200 ; 0xc8 -1002030c: 852b strh r3, [r5, #40] ; 0x28 -1002030e: 231a movs r3, #26 -10020310: 6163 str r3, [r4, #20] -10020312: 61a3 str r3, [r4, #24] -10020314: b003 add sp, #12 -10020316: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002031a: f00a b8b7 b.w 1002a48c -1002031e: b003 add sp, #12 -10020320: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -10020324 : -10020324: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -10020328: 4606 mov r6, r0 -1002032a: f100 0898 add.w r8, r0, #152 ; 0x98 -1002032e: f600 1058 addw r0, r0, #2392 ; 0x958 -10020332: 4689 mov r9, r1 -10020334: 9201 str r2, [sp, #4] -10020336: f7fe fa49 bl 1001e7cc -1002033a: 4605 mov r5, r0 -1002033c: 2800 cmp r0, #0 -1002033e: d061 beq.n 10020404 -10020340: 2700 movs r7, #0 -10020342: 4630 mov r0, r6 -10020344: f105 0108 add.w r1, r5, #8 -10020348: f7fe fa5f bl 1001e80a -1002034c: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 -10020350: 4639 mov r1, r7 -10020352: 2268 movs r2, #104 ; 0x68 -10020354: f885 706c strb.w r7, [r5, #108] ; 0x6c -10020358: f7f7 f86a bl 10017430 -1002035c: f8d5 4080 ldr.w r4, [r5, #128] ; 0x80 -10020360: 4649 mov r1, r9 -10020362: f104 002c add.w r0, r4, #44 ; 0x2c -10020366: 2206 movs r2, #6 -10020368: f884 7028 strb.w r7, [r4, #40] ; 0x28 -1002036c: f884 7029 strb.w r7, [r4, #41] ; 0x29 -10020370: f7f7 f84e bl 10017410 -10020374: f506 51a4 add.w r1, r6, #5248 ; 0x1480 -10020378: 3119 adds r1, #25 -1002037a: 2206 movs r2, #6 -1002037c: f104 0032 add.w r0, r4, #50 ; 0x32 -10020380: f7f7 f846 bl 10017410 -10020384: 4640 mov r0, r8 -10020386: f008 f9eb bl 10028760 -1002038a: 2206 movs r2, #6 -1002038c: 4601 mov r1, r0 -1002038e: f104 0038 add.w r0, r4, #56 ; 0x38 -10020392: f7f7 f83d bl 10017410 -10020396: 8fe3 ldrh r3, [r4, #62] ; 0x3e -10020398: f8b6 251c ldrh.w r2, [r6, #1308] ; 0x51c -1002039c: f003 030f and.w r3, r3, #15 -100203a0: ea43 1302 orr.w r3, r3, r2, lsl #4 -100203a4: 87e3 strh r3, [r4, #62] ; 0x3e -100203a6: f8b6 351c ldrh.w r3, [r6, #1308] ; 0x51c -100203aa: f8bd 1004 ldrh.w r1, [sp, #4] -100203ae: 3301 adds r3, #1 -100203b0: f8a6 351c strh.w r3, [r6, #1308] ; 0x51c -100203b4: 8d23 ldrh r3, [r4, #40] ; 0x28 -100203b6: 2218 movs r2, #24 -100203b8: f023 03fc bic.w r3, r3, #252 ; 0xfc -100203bc: f043 03c0 orr.w r3, r3, #192 ; 0xc0 -100203c0: 8523 strh r3, [r4, #40] ; 0x28 -100203c2: 462b mov r3, r5 -100203c4: f843 2f14 str.w r2, [r3, #20]! -100203c8: aa02 add r2, sp, #8 -100203ca: f842 1d04 str.w r1, [r2, #-4]! -100203ce: f104 0040 add.w r0, r4, #64 ; 0x40 -100203d2: 2102 movs r1, #2 -100203d4: f01e fa94 bl 1003e900 <__rtw_set_fixed_ie_veneer> -100203d8: 696b ldr r3, [r5, #20] -100203da: f240 6252 movw r2, #1618 ; 0x652 -100203de: 61ab str r3, [r5, #24] -100203e0: 3328 adds r3, #40 ; 0x28 -100203e2: 4293 cmp r3, r2 -100203e4: d90a bls.n 100203fc -100203e6: 4b09 ldr r3, [pc, #36] ; (1002040c ) -100203e8: 681b ldr r3, [r3, #0] -100203ea: b13b cbz r3, 100203fc -100203ec: 4808 ldr r0, [pc, #32] ; (10020410 ) -100203ee: f7fa fbb7 bl 1001ab60 -100203f2: 4b08 ldr r3, [pc, #32] ; (10020414 ) -100203f4: f8d3 0170 ldr.w r0, [r3, #368] ; 0x170 -100203f8: f7fa fbb2 bl 1001ab60 -100203fc: 4630 mov r0, r6 -100203fe: 4629 mov r1, r5 -10020400: f7fe fa63 bl 1001e8ca -10020404: b003 add sp, #12 -10020406: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -1002040a: bf00 nop -1002040c: 10044ec0 .word 0x10044ec0 -10020410: 10042939 .word 0x10042939 -10020414: 10043a4c .word 0x10043a4c - -10020418 : -10020418: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -1002041c: b087 sub sp, #28 -1002041e: f8ad 3004 strh.w r3, [sp, #4] -10020422: 4604 mov r4, r0 -10020424: 2303 movs r3, #3 -10020426: f600 1058 addw r0, r0, #2392 ; 0x958 -1002042a: 4689 mov r9, r1 -1002042c: f88d 2007 strb.w r2, [sp, #7] -10020430: f88d 3009 strb.w r3, [sp, #9] -10020434: f7fe f9ca bl 1001e7cc -10020438: 4607 mov r7, r0 -1002043a: 2800 cmp r0, #0 -1002043c: f000 8126 beq.w 1002068c -10020440: 4620 mov r0, r4 -10020442: f107 0108 add.w r1, r7, #8 -10020446: f7fe f9e0 bl 1001e80a -1002044a: f8d7 0080 ldr.w r0, [r7, #128] ; 0x80 -1002044e: 2100 movs r1, #0 -10020450: 2268 movs r2, #104 ; 0x68 -10020452: f7f6 ffed bl 10017430 -10020456: f8d7 6080 ldr.w r6, [r7, #128] ; 0x80 -1002045a: 2300 movs r3, #0 -1002045c: f886 3028 strb.w r3, [r6, #40] ; 0x28 -10020460: f886 3029 strb.w r3, [r6, #41] ; 0x29 -10020464: f106 002c add.w r0, r6, #44 ; 0x2c -10020468: 4649 mov r1, r9 -1002046a: 2206 movs r2, #6 -1002046c: f7f6 ffd0 bl 10017410 -10020470: f504 51a4 add.w r1, r4, #5248 ; 0x1480 -10020474: 3119 adds r1, #25 -10020476: 2206 movs r2, #6 -10020478: f106 0032 add.w r0, r6, #50 ; 0x32 -1002047c: f7f6 ffc8 bl 10017410 -10020480: f104 0098 add.w r0, r4, #152 ; 0x98 -10020484: f008 f96c bl 10028760 -10020488: 2206 movs r2, #6 -1002048a: 4601 mov r1, r0 -1002048c: f106 0038 add.w r0, r6, #56 ; 0x38 -10020490: f7f6 ffbe bl 10017410 -10020494: 8ff3 ldrh r3, [r6, #62] ; 0x3e -10020496: f8b4 251c ldrh.w r2, [r4, #1308] ; 0x51c -1002049a: f003 030f and.w r3, r3, #15 -1002049e: ea43 1302 orr.w r3, r3, r2, lsl #4 -100204a2: 87f3 strh r3, [r6, #62] ; 0x3e -100204a4: f8b4 351c ldrh.w r3, [r4, #1308] ; 0x51c -100204a8: 463d mov r5, r7 -100204aa: 3301 adds r3, #1 -100204ac: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c -100204b0: 8d33 ldrh r3, [r6, #40] ; 0x28 -100204b2: 2101 movs r1, #1 -100204b4: f023 03fc bic.w r3, r3, #252 ; 0xfc -100204b8: f043 03d0 orr.w r3, r3, #208 ; 0xd0 -100204bc: 8533 strh r3, [r6, #40] ; 0x28 -100204be: 2318 movs r3, #24 -100204c0: f845 3f14 str.w r3, [r5, #20]! -100204c4: f10d 0209 add.w r2, sp, #9 -100204c8: 462b mov r3, r5 -100204ca: f106 0040 add.w r0, r6, #64 ; 0x40 -100204ce: f01e fa17 bl 1003e900 <__rtw_set_fixed_ie_veneer> -100204d2: 2101 movs r1, #1 -100204d4: f10d 0207 add.w r2, sp, #7 -100204d8: 462b mov r3, r5 -100204da: f01e fa11 bl 1003e900 <__rtw_set_fixed_ie_veneer> -100204de: f89d 1009 ldrb.w r1, [sp, #9] -100204e2: 4602 mov r2, r0 -100204e4: 2903 cmp r1, #3 -100204e6: f8bd 3004 ldrh.w r3, [sp, #4] -100204ea: f040 80b1 bne.w 10020650 -100204ee: f89d 8007 ldrb.w r8, [sp, #7] -100204f2: f1b8 0f01 cmp.w r8, #1 -100204f6: d057 beq.n 100205a8 -100204f8: d312 bcc.n 10020520 -100204fa: f1b8 0f02 cmp.w r8, #2 -100204fe: f040 80a7 bne.w 10020650 -10020502: 00db lsls r3, r3, #3 -10020504: aa06 add r2, sp, #24 -10020506: b2db uxtb r3, r3 -10020508: f822 3d0e strh.w r3, [r2, #-14]! -1002050c: 4641 mov r1, r8 -1002050e: 462b mov r3, r5 -10020510: f01e f9f6 bl 1003e900 <__rtw_set_fixed_ie_veneer> -10020514: aa06 add r2, sp, #24 -10020516: 2325 movs r3, #37 ; 0x25 -10020518: f822 3d0c strh.w r3, [r2, #-12]! -1002051c: 4641 mov r1, r8 -1002051e: e094 b.n 1002064a -10020520: f894 373e ldrb.w r3, [r4, #1854] ; 0x73e -10020524: 3301 adds r3, #1 -10020526: f013 03ff ands.w r3, r3, #255 ; 0xff -1002052a: d0fb beq.n 10020524 -1002052c: f884 373e strb.w r3, [r4, #1854] ; 0x73e -10020530: 4610 mov r0, r2 -10020532: 2101 movs r1, #1 -10020534: f204 723e addw r2, r4, #1854 ; 0x73e -10020538: 462b mov r3, r5 -1002053a: f01e f9e1 bl 1003e900 <__rtw_set_fixed_ie_veneer> -1002053e: f8bd 3004 ldrh.w r3, [sp, #4] -10020542: aa06 add r2, sp, #24 -10020544: f003 030f and.w r3, r3, #15 -10020548: 009b lsls r3, r3, #2 -1002054a: f443 5380 orr.w r3, r3, #4096 ; 0x1000 -1002054e: f043 0302 orr.w r3, r3, #2 -10020552: f822 3d0e strh.w r3, [r2, #-14]! -10020556: 2102 movs r1, #2 -10020558: 462b mov r3, r5 -1002055a: f01e f9d1 bl 1003e900 <__rtw_set_fixed_ie_veneer> -1002055e: aa06 add r2, sp, #24 -10020560: f241 3388 movw r3, #5000 ; 0x1388 -10020564: f822 3d0a strh.w r3, [r2, #-10]! -10020568: 2102 movs r1, #2 -1002056a: 462b mov r3, r5 -1002056c: f01e f9c8 bl 1003e900 <__rtw_set_fixed_ie_veneer> -10020570: 4649 mov r1, r9 -10020572: 4680 mov r8, r0 -10020574: f504 6046 add.w r0, r4, #3168 ; 0xc60 -10020578: f007 fe8c bl 10028294 -1002057c: b178 cbz r0, 1002059e -1002057e: f8bd 2004 ldrh.w r2, [sp, #4] -10020582: f002 0207 and.w r2, r2, #7 -10020586: eb00 0242 add.w r2, r0, r2, lsl #1 -1002058a: f8b2 3094 ldrh.w r3, [r2, #148] ; 0x94 -1002058e: f3c3 030b ubfx r3, r3, #0, #12 -10020592: 3301 adds r3, #1 -10020594: f8a2 31d4 strh.w r3, [r2, #468] ; 0x1d4 -10020598: 011b lsls r3, r3, #4 -1002059a: f8ad 3012 strh.w r3, [sp, #18] -1002059e: 4640 mov r0, r8 -100205a0: 2102 movs r1, #2 -100205a2: f10d 0212 add.w r2, sp, #18 -100205a6: e050 b.n 1002064a -100205a8: 4641 mov r1, r8 -100205aa: f204 7241 addw r2, r4, #1857 ; 0x741 -100205ae: 462b mov r3, r5 -100205b0: f01e f9a6 bl 1003e900 <__rtw_set_fixed_ie_veneer> -100205b4: 462b mov r3, r5 -100205b6: 2102 movs r1, #2 -100205b8: aa01 add r2, sp, #4 -100205ba: f01e f9a1 bl 1003e900 <__rtw_set_fixed_ie_veneer> -100205be: aa05 add r2, sp, #20 -100205c0: 4680 mov r8, r0 -100205c2: 210d movs r1, #13 -100205c4: 4620 mov r0, r4 -100205c6: f011 ff9b bl 10032500 -100205ca: 9a05 ldr r2, [sp, #20] -100205cc: f8b4 3742 ldrh.w r3, [r4, #1858] ; 0x742 -100205d0: 2a03 cmp r2, #3 -100205d2: d104 bne.n 100205de -100205d4: f003 033f and.w r3, r3, #63 ; 0x3f -100205d8: f443 5380 orr.w r3, r3, #4096 ; 0x1000 -100205dc: e013 b.n 10020606 -100205de: 2a02 cmp r2, #2 -100205e0: d104 bne.n 100205ec -100205e2: f003 033f and.w r3, r3, #63 ; 0x3f -100205e6: f443 6300 orr.w r3, r3, #2048 ; 0x800 -100205ea: e00c b.n 10020606 -100205ec: 2a01 cmp r2, #1 -100205ee: d104 bne.n 100205fa -100205f0: f003 033f and.w r3, r3, #63 ; 0x3f -100205f4: f443 6380 orr.w r3, r3, #1024 ; 0x400 -100205f8: e005 b.n 10020606 -100205fa: 2a00 cmp r2, #0 -100205fc: d1ea bne.n 100205d4 -100205fe: f003 033f and.w r3, r3, #63 ; 0x3f -10020602: f443 7300 orr.w r3, r3, #512 ; 0x200 -10020606: f8ad 300a strh.w r3, [sp, #10] -1002060a: f504 539c add.w r3, r4, #4992 ; 0x1380 -1002060e: 3308 adds r3, #8 -10020610: f893 3047 ldrb.w r3, [r3, #71] ; 0x47 -10020614: b923 cbnz r3, 10020620 -10020616: f8bd 300a ldrh.w r3, [sp, #10] -1002061a: f023 0301 bic.w r3, r3, #1 -1002061e: e005 b.n 1002062c -10020620: 2b01 cmp r3, #1 -10020622: d105 bne.n 10020630 -10020624: f8bd 300a ldrh.w r3, [sp, #10] -10020628: f043 0301 orr.w r3, r3, #1 -1002062c: f8ad 300a strh.w r3, [sp, #10] -10020630: 2102 movs r1, #2 -10020632: f10d 020a add.w r2, sp, #10 -10020636: 462b mov r3, r5 -10020638: 4640 mov r0, r8 -1002063a: f01e f961 bl 1003e900 <__rtw_set_fixed_ie_veneer> -1002063e: f8b4 3744 ldrh.w r3, [r4, #1860] ; 0x744 -10020642: aa06 add r2, sp, #24 -10020644: f822 3d08 strh.w r3, [r2, #-8]! -10020648: 2102 movs r1, #2 -1002064a: 462b mov r3, r5 -1002064c: f01e f958 bl 1003e900 <__rtw_set_fixed_ie_veneer> -10020650: 697b ldr r3, [r7, #20] -10020652: f240 6252 movw r2, #1618 ; 0x652 -10020656: 61bb str r3, [r7, #24] -10020658: 3328 adds r3, #40 ; 0x28 -1002065a: 4293 cmp r3, r2 -1002065c: d90a bls.n 10020674 -1002065e: 4b0d ldr r3, [pc, #52] ; (10020694 ) -10020660: 681b ldr r3, [r3, #0] -10020662: b13b cbz r3, 10020674 -10020664: 480c ldr r0, [pc, #48] ; (10020698 ) -10020666: f7fa fa7b bl 1001ab60 -1002066a: 4b0c ldr r3, [pc, #48] ; (1002069c ) -1002066c: f8d3 0174 ldr.w r0, [r3, #372] ; 0x174 -10020670: f7fa fa76 bl 1001ab60 -10020674: f241 4318 movw r3, #5144 ; 0x1418 -10020678: 5ce3 ldrb r3, [r4, r3] -1002067a: b11b cbz r3, 10020684 -1002067c: 8d33 ldrh r3, [r6, #40] ; 0x28 -1002067e: f443 5380 orr.w r3, r3, #4096 ; 0x1000 -10020682: 8533 strh r3, [r6, #40] ; 0x28 -10020684: 4620 mov r0, r4 -10020686: 4639 mov r1, r7 -10020688: f7fe f91f bl 1001e8ca -1002068c: b007 add sp, #28 -1002068e: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -10020692: bf00 nop -10020694: 10044ec0 .word 0x10044ec0 -10020698: 10042939 .word 0x10042939 -1002069c: 10043a4c .word 0x10043a4c - -100206a0 : -100206a0: b570 push {r4, r5, r6, lr} -100206a2: 6f8c ldr r4, [r1, #120] ; 0x78 -100206a4: 4605 mov r5, r0 -100206a6: f500 50a4 add.w r0, r0, #5248 ; 0x1480 -100206aa: 3019 adds r0, #25 -100206ac: 1d21 adds r1, r4, #4 -100206ae: 2206 movs r2, #6 -100206b0: f7f6 feb6 bl 10017420 -100206b4: 2800 cmp r0, #0 -100206b6: d058 beq.n 1002076a -100206b8: f8d5 3680 ldr.w r3, [r5, #1664] ; 0x680 -100206bc: f003 0203 and.w r2, r3, #3 -100206c0: 2a03 cmp r2, #3 -100206c2: d001 beq.n 100206c8 -100206c4: 0458 lsls r0, r3, #17 -100206c6: d550 bpl.n 1002076a -100206c8: f104 060a add.w r6, r4, #10 -100206cc: f505 6046 add.w r0, r5, #3168 ; 0xc60 -100206d0: 4631 mov r1, r6 -100206d2: f007 fddf bl 10028294 -100206d6: 4603 mov r3, r0 -100206d8: 2800 cmp r0, #0 -100206da: d046 beq.n 1002076a -100206dc: 7e22 ldrb r2, [r4, #24] -100206de: 2a03 cmp r2, #3 -100206e0: d143 bne.n 1002076a -100206e2: f895 2734 ldrb.w r2, [r5, #1844] ; 0x734 -100206e6: 2a00 cmp r2, #0 -100206e8: d03f beq.n 1002076a -100206ea: 7e60 ldrb r0, [r4, #25] -100206ec: 2801 cmp r0, #1 -100206ee: d011 beq.n 10020714 -100206f0: d302 bcc.n 100206f8 -100206f2: 2802 cmp r0, #2 -100206f4: d023 beq.n 1002073e -100206f6: e038 b.n 1002076a -100206f8: f205 7041 addw r0, r5, #1857 ; 0x741 -100206fc: f104 011a add.w r1, r4, #26 -10020700: 2207 movs r2, #7 -10020702: f7f6 fe85 bl 10017410 -10020706: 4628 mov r0, r5 -10020708: 4631 mov r1, r6 -1002070a: 2201 movs r2, #1 -1002070c: 2325 movs r3, #37 ; 0x25 -1002070e: f7ff fe83 bl 10020418 -10020712: e02a b.n 1002076a -10020714: 7ee1 ldrb r1, [r4, #27] -10020716: 7f62 ldrb r2, [r4, #29] -10020718: 7f25 ldrb r5, [r4, #28] -1002071a: f3c2 0282 ubfx r2, r2, #2, #3 -1002071e: ea51 2105 orrs.w r1, r1, r5, lsl #8 -10020722: fa00 f202 lsl.w r2, r0, r2 -10020726: f893 11ff ldrb.w r1, [r3, #511] ; 0x1ff -1002072a: d103 bne.n 10020734 -1002072c: 4311 orrs r1, r2 -1002072e: f883 11ff strb.w r1, [r3, #511] ; 0x1ff -10020732: e014 b.n 1002075e -10020734: ea21 0202 bic.w r2, r1, r2 -10020738: f883 21ff strb.w r2, [r3, #511] ; 0x1ff -1002073c: e015 b.n 1002076a -1002073e: 7ee2 ldrb r2, [r4, #27] -10020740: 0711 lsls r1, r2, #28 -10020742: d412 bmi.n 1002076a -10020744: 0911 lsrs r1, r2, #4 -10020746: 2201 movs r2, #1 -10020748: fa02 f101 lsl.w r1, r2, r1 -1002074c: f893 01ff ldrb.w r0, [r3, #511] ; 0x1ff -10020750: ea20 0101 bic.w r1, r0, r1 -10020754: f883 11ff strb.w r1, [r3, #511] ; 0x1ff -10020758: 7ee1 ldrb r1, [r4, #27] -1002075a: 0909 lsrs r1, r1, #4 -1002075c: 408a lsls r2, r1 -1002075e: f893 1200 ldrb.w r1, [r3, #512] ; 0x200 -10020762: ea21 0202 bic.w r2, r1, r2 -10020766: f883 2200 strb.w r2, [r3, #512] ; 0x200 -1002076a: 2001 movs r0, #1 -1002076c: bd70 pop {r4, r5, r6, pc} - -1002076e : -1002076e: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10020772: 6f0b ldr r3, [r1, #112] ; 0x70 -10020774: 4680 mov r8, r0 -10020776: 3b18 subs r3, #24 -10020778: f5b3 7f40 cmp.w r3, #768 ; 0x300 -1002077c: 460d mov r5, r1 -1002077e: 4614 mov r4, r2 -10020780: f8d1 9078 ldr.w r9, [r1, #120] ; 0x78 -10020784: 9301 str r3, [sp, #4] -10020786: d901 bls.n 1002078c -10020788: 2000 movs r0, #0 -1002078a: e111 b.n 100209b0 -1002078c: 4610 mov r0, r2 -1002078e: 2100 movs r1, #0 -10020790: f44f 725f mov.w r2, #892 ; 0x37c -10020794: f7f6 fe4c bl 10017430 -10020798: f8b9 3000 ldrh.w r3, [r9] -1002079c: ae02 add r6, sp, #8 -1002079e: f003 03fc and.w r3, r3, #252 ; 0xfc -100207a2: 2b80 cmp r3, #128 ; 0x80 -100207a4: f856 2d04 ldr.w r2, [r6, #-4]! -100207a8: bf0c ite eq -100207aa: 2301 moveq r3, #1 -100207ac: 2300 movne r3, #0 -100207ae: 72a3 strb r3, [r4, #10] -100207b0: f104 0a7c add.w sl, r4, #124 ; 0x7c -100207b4: f102 037c add.w r3, r2, #124 ; 0x7c -100207b8: 6023 str r3, [r4, #0] -100207ba: 67a2 str r2, [r4, #120] ; 0x78 -100207bc: 4650 mov r0, sl -100207be: f109 0118 add.w r1, r9, #24 -100207c2: f7f6 fe25 bl 10017410 -100207c6: f995 306c ldrsb.w r3, [r5, #108] ; 0x6c -100207ca: f104 0788 add.w r7, r4, #136 ; 0x88 -100207ce: 63a3 str r3, [r4, #56] ; 0x38 -100207d0: f895 306a ldrb.w r3, [r5, #106] ; 0x6a -100207d4: 4638 mov r0, r7 -100207d6: f884 3075 strb.w r3, [r4, #117] ; 0x75 -100207da: f895 306d ldrb.w r3, [r5, #109] ; 0x6d -100207de: 2100 movs r1, #0 -100207e0: f884 3074 strb.w r3, [r4, #116] ; 0x74 -100207e4: 6fa3 ldr r3, [r4, #120] ; 0x78 -100207e6: 4632 mov r2, r6 -100207e8: 3b0c subs r3, #12 -100207ea: f01e f85d bl 1003e8a8 <__rtw_get_ie_veneer> -100207ee: 4605 mov r5, r0 -100207f0: 2800 cmp r0, #0 -100207f2: d0c9 beq.n 10020788 -100207f4: 7842 ldrb r2, [r0, #1] -100207f6: b152 cbz r2, 1002080e -100207f8: 9b01 ldr r3, [sp, #4] -100207fa: 2b20 cmp r3, #32 -100207fc: d8c4 bhi.n 10020788 -100207fe: f104 0010 add.w r0, r4, #16 -10020802: 1ca9 adds r1, r5, #2 -10020804: f7f6 fe04 bl 10017410 -10020808: 786b ldrb r3, [r5, #1] -1002080a: 60e3 str r3, [r4, #12] -1002080c: e003 b.n 10020816 -1002080e: 7322 strb r2, [r4, #12] -10020810: 7362 strb r2, [r4, #13] -10020812: 73a2 strb r2, [r4, #14] -10020814: 73e2 strb r2, [r4, #15] -10020816: f104 0b64 add.w fp, r4, #100 ; 0x64 -1002081a: 4658 mov r0, fp -1002081c: 2100 movs r1, #0 -1002081e: 2210 movs r2, #16 -10020820: f7f6 fe06 bl 10017430 -10020824: 6fa3 ldr r3, [r4, #120] ; 0x78 -10020826: 2101 movs r1, #1 -10020828: 4638 mov r0, r7 -1002082a: 4632 mov r2, r6 -1002082c: 3b0c subs r3, #12 -1002082e: f01e f83b bl 1003e8a8 <__rtw_get_ie_veneer> -10020832: 4601 mov r1, r0 -10020834: b140 cbz r0, 10020848 -10020836: 9a01 ldr r2, [sp, #4] -10020838: 2a08 cmp r2, #8 -1002083a: d8a5 bhi.n 10020788 -1002083c: 4658 mov r0, fp -1002083e: 3102 adds r1, #2 -10020840: f7f6 fde6 bl 10017410 -10020844: 9d01 ldr r5, [sp, #4] -10020846: e000 b.n 1002084a -10020848: 4605 mov r5, r0 -1002084a: 6fa3 ldr r3, [r4, #120] ; 0x78 -1002084c: 2132 movs r1, #50 ; 0x32 -1002084e: 4638 mov r0, r7 -10020850: 4632 mov r2, r6 -10020852: 3b0c subs r3, #12 -10020854: f01e f828 bl 1003e8a8 <__rtw_get_ie_veneer> -10020858: 4601 mov r1, r0 -1002085a: b148 cbz r0, 10020870 -1002085c: 9a01 ldr r2, [sp, #4] -1002085e: f1c5 0310 rsb r3, r5, #16 -10020862: 429a cmp r2, r3 -10020864: d890 bhi.n 10020788 -10020866: 1960 adds r0, r4, r5 -10020868: 3064 adds r0, #100 ; 0x64 -1002086a: 3102 adds r1, #2 -1002086c: f7f6 fdd0 bl 10017410 -10020870: 6fa3 ldr r3, [r4, #120] ; 0x78 -10020872: 2500 movs r5, #0 -10020874: 2103 movs r1, #3 -10020876: f884 103c strb.w r1, [r4, #60] ; 0x3c -1002087a: f884 503d strb.w r5, [r4, #61] ; 0x3d -1002087e: f884 503e strb.w r5, [r4, #62] ; 0x3e -10020882: f884 503f strb.w r5, [r4, #63] ; 0x3f -10020886: 4638 mov r0, r7 -10020888: 4632 mov r2, r6 -1002088a: 3b0c subs r3, #12 -1002088c: f01e f80c bl 1003e8a8 <__rtw_get_ie_veneer> -10020890: f884 504c strb.w r5, [r4, #76] ; 0x4c -10020894: f884 504d strb.w r5, [r4, #77] ; 0x4d -10020898: f884 504e strb.w r5, [r4, #78] ; 0x4e -1002089c: f884 504f strb.w r5, [r4, #79] ; 0x4f -100208a0: f884 5040 strb.w r5, [r4, #64] ; 0x40 -100208a4: f884 5041 strb.w r5, [r4, #65] ; 0x41 -100208a8: f884 5042 strb.w r5, [r4, #66] ; 0x42 -100208ac: f884 5043 strb.w r5, [r4, #67] ; 0x43 -100208b0: b938 cbnz r0, 100208c2 -100208b2: 6fa3 ldr r3, [r4, #120] ; 0x78 -100208b4: 4638 mov r0, r7 -100208b6: 213d movs r1, #61 ; 0x3d -100208b8: 4632 mov r2, r6 -100208ba: 3b0c subs r3, #12 -100208bc: f01d fff4 bl 1003e8a8 <__rtw_get_ie_veneer> -100208c0: b108 cbz r0, 100208c6 -100208c2: 7883 ldrb r3, [r0, #2] -100208c4: e00d b.n 100208e2 -100208c6: f8d8 3648 ldr.w r3, [r8, #1608] ; 0x648 -100208ca: 2b03 cmp r3, #3 -100208cc: d107 bne.n 100208de -100208ce: f8d8 3650 ldr.w r3, [r8, #1616] ; 0x650 -100208d2: 220c movs r2, #12 -100208d4: fb02 8303 mla r3, r2, r3, r8 -100208d8: f893 3524 ldrb.w r3, [r3, #1316] ; 0x524 -100208dc: e001 b.n 100208e2 -100208de: f898 351e ldrb.w r3, [r8, #1310] ; 0x51e -100208e2: 64e3 str r3, [r4, #76] ; 0x4c -100208e4: 4650 mov r0, sl -100208e6: f7fc fe72 bl 1001d5ce -100208ea: 2202 movs r2, #2 -100208ec: 4601 mov r1, r0 -100208ee: f104 0044 add.w r0, r4, #68 ; 0x44 -100208f2: f7f6 fd8d bl 10017410 -100208f6: 4620 mov r0, r4 -100208f8: f7fc fe5c bl 1001d5b4 -100208fc: f010 0301 ands.w r3, r0, #1 -10020900: 4605 mov r5, r0 -10020902: f104 0004 add.w r0, r4, #4 -10020906: d00c beq.n 10020922 -10020908: 2300 movs r3, #0 -1002090a: 2201 movs r2, #1 -1002090c: f884 2060 strb.w r2, [r4, #96] ; 0x60 -10020910: f884 3061 strb.w r3, [r4, #97] ; 0x61 -10020914: f884 3062 strb.w r3, [r4, #98] ; 0x62 -10020918: f884 3063 strb.w r3, [r4, #99] ; 0x63 -1002091c: f109 010a add.w r1, r9, #10 -10020920: e009 b.n 10020936 -10020922: f884 3060 strb.w r3, [r4, #96] ; 0x60 -10020926: f884 3061 strb.w r3, [r4, #97] ; 0x61 -1002092a: f884 3062 strb.w r3, [r4, #98] ; 0x62 -1002092e: f884 3063 strb.w r3, [r4, #99] ; 0x63 -10020932: f109 0110 add.w r1, r9, #16 -10020936: 2206 movs r2, #6 -10020938: f7f6 fd6a bl 10017410 -1002093c: f005 0010 and.w r0, r5, #16 -10020940: b280 uxth r0, r0 -10020942: b150 cbz r0, 1002095a -10020944: 2300 movs r3, #0 -10020946: 2201 movs r2, #1 -10020948: f884 2034 strb.w r2, [r4, #52] ; 0x34 -1002094c: f884 3035 strb.w r3, [r4, #53] ; 0x35 -10020950: f884 3036 strb.w r3, [r4, #54] ; 0x36 -10020954: f884 3037 strb.w r3, [r4, #55] ; 0x37 -10020958: e007 b.n 1002096a -1002095a: f884 0034 strb.w r0, [r4, #52] ; 0x34 -1002095e: f884 0035 strb.w r0, [r4, #53] ; 0x35 -10020962: f884 0036 strb.w r0, [r4, #54] ; 0x36 -10020966: f884 0037 strb.w r0, [r4, #55] ; 0x37 -1002096a: 2300 movs r3, #0 -1002096c: f884 3048 strb.w r3, [r4, #72] ; 0x48 -10020970: f884 3049 strb.w r3, [r4, #73] ; 0x49 -10020974: f884 304a strb.w r3, [r4, #74] ; 0x4a -10020978: f884 304b strb.w r3, [r4, #75] ; 0x4b -1002097c: f8d8 3650 ldr.w r3, [r8, #1616] ; 0x650 -10020980: 210c movs r1, #12 -10020982: fb01 8303 mla r3, r1, r3, r8 -10020986: 6ce2 ldr r2, [r4, #76] ; 0x4c -10020988: f893 3524 ldrb.w r3, [r3, #1316] ; 0x524 -1002098c: 6fa1 ldr r1, [r4, #120] ; 0x78 -1002098e: 429a cmp r2, r3 -10020990: bf18 it ne -10020992: 2365 movne r3, #101 ; 0x65 -10020994: f04f 0200 mov.w r2, #0 -10020998: bf18 it ne -1002099a: f884 3075 strbne.w r3, [r4, #117] ; 0x75 -1002099e: 4638 mov r0, r7 -100209a0: 4613 mov r3, r2 -100209a2: 390c subs r1, #12 -100209a4: f016 fea4 bl 100376f0 -100209a8: 2301 movs r3, #1 -100209aa: b100 cbz r0, 100209ae -100209ac: 72e3 strb r3, [r4, #11] -100209ae: 4618 mov r0, r3 -100209b0: b003 add sp, #12 -100209b2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - ... - -100209b8 : -100209b8: b530 push {r4, r5, lr} -100209ba: f600 053c addw r5, r0, #2108 ; 0x83c -100209be: 4604 mov r4, r0 -100209c0: b085 sub sp, #20 -100209c2: 4628 mov r0, r5 -100209c4: f016 fa2a bl 10036e1c -100209c8: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -100209cc: 4620 mov r0, r4 -100209ce: f423 7380 bic.w r3, r3, #256 ; 0x100 -100209d2: f443 7300 orr.w r3, r3, #512 ; 0x200 -100209d6: f8c4 3680 str.w r3, [r4, #1664] ; 0x680 -100209da: 2301 movs r3, #1 -100209dc: f8c4 3690 str.w r3, [r4, #1680] ; 0x690 -100209e0: 2300 movs r3, #0 -100209e2: f8c4 3684 str.w r3, [r4, #1668] ; 0x684 -100209e6: f8c4 3688 str.w r3, [r4, #1672] ; 0x688 -100209ea: f8c4 368c str.w r3, [r4, #1676] ; 0x68c -100209ee: f104 019c add.w r1, r4, #156 ; 0x9c -100209f2: 2203 movs r2, #3 -100209f4: f7ff fc96 bl 10020324 -100209f8: 4b13 ldr r3, [pc, #76] ; (10020a48 ) -100209fa: 681b ldr r3, [r3, #0] -100209fc: b1b3 cbz r3, 10020a2c -100209fe: 4813 ldr r0, [pc, #76] ; (10020a4c ) -10020a00: f7fa f8ae bl 1001ab60 -10020a04: f894 009f ldrb.w r0, [r4, #159] ; 0x9f -10020a08: f894 109c ldrb.w r1, [r4, #156] ; 0x9c -10020a0c: 9000 str r0, [sp, #0] -10020a0e: f894 00a0 ldrb.w r0, [r4, #160] ; 0xa0 -10020a12: f894 209d ldrb.w r2, [r4, #157] ; 0x9d -10020a16: 9001 str r0, [sp, #4] -10020a18: f894 00a1 ldrb.w r0, [r4, #161] ; 0xa1 -10020a1c: f894 309e ldrb.w r3, [r4, #158] ; 0x9e -10020a20: 9002 str r0, [sp, #8] -10020a22: 480b ldr r0, [pc, #44] ; (10020a50 ) -10020a24: f8d0 017c ldr.w r0, [r0, #380] ; 0x17c -10020a28: f7fa f89a bl 1001ab60 -10020a2c: 2100 movs r1, #0 -10020a2e: 4620 mov r0, r4 -10020a30: 460a mov r2, r1 -10020a32: f7fe fdb7 bl 1001f5a4 -10020a36: 4628 mov r0, r5 -10020a38: f44f 7196 mov.w r1, #300 ; 0x12c -10020a3c: b005 add sp, #20 -10020a3e: e8bd 4030 ldmia.w sp!, {r4, r5, lr} -10020a42: f016 b9e9 b.w 10036e18 -10020a46: bf00 nop -10020a48: 10044ec0 .word 0x10044ec0 -10020a4c: 10042939 .word 0x10042939 -10020a50: 10043a4c .word 0x10043a4c - -10020a54 : -10020a54: b538 push {r3, r4, r5, lr} -10020a56: f600 053c addw r5, r0, #2108 ; 0x83c -10020a5a: 4604 mov r4, r0 -10020a5c: 4628 mov r0, r5 -10020a5e: f016 f9dd bl 10036e1c -10020a62: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -10020a66: 4620 mov r0, r4 -10020a68: f423 7340 bic.w r3, r3, #768 ; 0x300 -10020a6c: f443 5310 orr.w r3, r3, #9216 ; 0x2400 -10020a70: f8c4 3680 str.w r3, [r4, #1664] ; 0x680 -10020a74: f7ff f980 bl 1001fd78 -10020a78: 4628 mov r0, r5 -10020a7a: f44f 7196 mov.w r1, #300 ; 0x12c -10020a7e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10020a82: f016 b9c9 b.w 10036e18 - ... - -10020a88 : -10020a88: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -10020a8c: 6f8d ldr r5, [r1, #120] ; 0x78 -10020a8e: 4604 mov r4, r0 -10020a90: 4628 mov r0, r5 -10020a92: f8d1 8070 ldr.w r8, [r1, #112] ; 0x70 -10020a96: f7fd fd78 bl 1001e58a -10020a9a: 4601 mov r1, r0 -10020a9c: f504 50a4 add.w r0, r4, #5248 ; 0x1480 -10020aa0: 3019 adds r0, #25 -10020aa2: 2206 movs r2, #6 -10020aa4: f7f6 fcbc bl 10017420 -10020aa8: 2800 cmp r0, #0 -10020aaa: d058 beq.n 10020b5e -10020aac: f8d4 2680 ldr.w r2, [r4, #1664] ; 0x680 -10020ab0: 0593 lsls r3, r2, #22 -10020ab2: d554 bpl.n 10020b5e -10020ab4: 882b ldrh r3, [r5, #0] -10020ab6: f413 4f80 tst.w r3, #16384 ; 0x4000 -10020aba: bf0c ite eq -10020abc: 2100 moveq r1, #0 -10020abe: 2104 movne r1, #4 -10020ac0: 4429 add r1, r5 -10020ac2: 8b8e ldrh r6, [r1, #28] -10020ac4: 8b4a ldrh r2, [r1, #26] -10020ac6: b17e cbz r6, 10020ae8 -10020ac8: 2e0d cmp r6, #13 -10020aca: d107 bne.n 10020adc -10020acc: f8d4 3694 ldr.w r3, [r4, #1684] ; 0x694 -10020ad0: 2b01 cmp r3, #1 -10020ad2: bf0c ite eq -10020ad4: 2300 moveq r3, #0 -10020ad6: 2301 movne r3, #1 -10020ad8: f8c4 3694 str.w r3, [r4, #1684] ; 0x694 -10020adc: f604 003c addw r0, r4, #2108 ; 0x83c -10020ae0: 2101 movs r1, #1 -10020ae2: f016 f999 bl 10036e18 -10020ae6: e00f b.n 10020b08 -10020ae8: 2a02 cmp r2, #2 -10020aea: d124 bne.n 10020b36 -10020aec: f8d4 7694 ldr.w r7, [r4, #1684] ; 0x694 -10020af0: 2f01 cmp r7, #1 -10020af2: d126 bne.n 10020b42 -10020af4: 2110 movs r1, #16 -10020af6: f105 001e add.w r0, r5, #30 -10020afa: aa01 add r2, sp, #4 -10020afc: f1a8 031e sub.w r3, r8, #30 -10020b00: f01d fed2 bl 1003e8a8 <__rtw_get_ie_veneer> -10020b04: 4601 mov r1, r0 -10020b06: b908 cbnz r0, 10020b0c -10020b08: 2000 movs r0, #0 -10020b0a: e029 b.n 10020b60 -10020b0c: f504 60d5 add.w r0, r4, #1704 ; 0x6a8 -10020b10: 9a01 ldr r2, [sp, #4] -10020b12: 3102 adds r1, #2 -10020b14: f7f6 fc7c bl 10017410 -10020b18: 2303 movs r3, #3 -10020b1a: 4620 mov r0, r4 -10020b1c: 4631 mov r1, r6 -10020b1e: f8c4 3690 str.w r3, [r4, #1680] ; 0x690 -10020b22: 4632 mov r2, r6 -10020b24: f7fe fd3e bl 1001f5a4 -10020b28: f604 003c addw r0, r4, #2108 ; 0x83c -10020b2c: f44f 7196 mov.w r1, #300 ; 0x12c -10020b30: f016 f972 bl 10036e18 -10020b34: e013 b.n 10020b5e -10020b36: 2a04 cmp r2, #4 -10020b38: d1e6 bne.n 10020b08 -10020b3a: f8d4 3694 ldr.w r3, [r4, #1684] ; 0x694 -10020b3e: 2b01 cmp r3, #1 -10020b40: d1e2 bne.n 10020b08 -10020b42: 4b09 ldr r3, [pc, #36] ; (10020b68 ) -10020b44: 681b ldr r3, [r3, #0] -10020b46: b13b cbz r3, 10020b58 -10020b48: 4808 ldr r0, [pc, #32] ; (10020b6c ) -10020b4a: f7fa f809 bl 1001ab60 -10020b4e: 4b08 ldr r3, [pc, #32] ; (10020b70 ) -10020b50: f8d3 0134 ldr.w r0, [r3, #308] ; 0x134 -10020b54: f7fa f804 bl 1001ab60 -10020b58: 4620 mov r0, r4 -10020b5a: f7ff ff7b bl 10020a54 -10020b5e: 2001 movs r0, #1 -10020b60: b002 add sp, #8 -10020b62: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10020b66: bf00 nop -10020b68: 10044ec0 .word 0x10044ec0 -10020b6c: 10042939 .word 0x10042939 -10020b70: 10043a4c .word 0x10043a4c - -10020b74 : -10020b74: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10020b78: f5ad 7d19 sub.w sp, sp, #612 ; 0x264 -10020b7c: 2600 movs r6, #0 -10020b7e: ac08 add r4, sp, #32 -10020b80: f10d 0810 add.w r8, sp, #16 -10020b84: ab05 add r3, sp, #20 -10020b86: 9405 str r4, [sp, #20] -10020b88: f8a8 6000 strh.w r6, [r8] -10020b8c: f8ad 6012 strh.w r6, [sp, #18] -10020b90: f8d1 a034 ldr.w sl, [r1, #52] ; 0x34 -10020b94: 6403 str r3, [r0, #64] ; 0x40 -10020b96: 233e movs r3, #62 ; 0x3e -10020b98: 6443 str r3, [r0, #68] ; 0x44 -10020b9a: f8b0 3048 ldrh.w r3, [r0, #72] ; 0x48 -10020b9e: 4607 mov r7, r0 -10020ba0: 3301 adds r3, #1 -10020ba2: f8a0 3048 strh.w r3, [r0, #72] ; 0x48 -10020ba6: 460d mov r5, r1 -10020ba8: f200 5024 addw r0, r0, #1316 ; 0x524 -10020bac: 6cc9 ldr r1, [r1, #76] ; 0x4c -10020bae: 4632 mov r2, r6 -10020bb0: fa5f fa8a uxtb.w sl, sl -10020bb4: f7fd fd2c bl 1001e610 -10020bb8: 2800 cmp r0, #0 -10020bba: f000 80c1 beq.w 10020d40 -10020bbe: f10d 0042 add.w r0, sp, #66 ; 0x42 -10020bc2: 1d29 adds r1, r5, #4 -10020bc4: 2206 movs r2, #6 -10020bc6: f7f6 fc23 bl 10017410 -10020bca: 6bab ldr r3, [r5, #56] ; 0x38 -10020bcc: f105 0988 add.w r9, r5, #136 ; 0x88 -10020bd0: 8523 strh r3, [r4, #40] ; 0x28 -10020bd2: f1ba 0f00 cmp.w sl, #0 -10020bd6: d104 bne.n 10020be2 -10020bd8: f8a4 a02e strh.w sl, [r4, #46] ; 0x2e -10020bdc: f8a4 a030 strh.w sl, [r4, #48] ; 0x30 -10020be0: e052 b.n 10020c88 -10020be2: 6fa9 ldr r1, [r5, #120] ; 0x78 -10020be4: e88d 0140 stmia.w sp, {r6, r8} -10020be8: f105 007c add.w r0, r5, #124 ; 0x7c -10020bec: 4632 mov r2, r6 -10020bee: f10d 0312 add.w r3, sp, #18 -10020bf2: f01d fe41 bl 1003e878 <__rtw_get_sec_ie_veneer> -10020bf6: 2800 cmp r0, #0 -10020bf8: dd43 ble.n 10020c82 -10020bfa: f8b8 b000 ldrh.w fp, [r8] -10020bfe: 9606 str r6, [sp, #24] -10020c00: 9607 str r6, [sp, #28] -10020c02: f8bd a012 ldrh.w sl, [sp, #18] -10020c06: f1bb 0f00 cmp.w fp, #0 -10020c0a: d01b beq.n 10020c44 -10020c0c: f1ba 0f00 cmp.w sl, #0 -10020c10: d002 beq.n 10020c18 -10020c12: 85e6 strh r6, [r4, #46] ; 0x2e -10020c14: 2360 movs r3, #96 ; 0x60 -10020c16: e030 b.n 10020c7a -10020c18: 6faa ldr r2, [r5, #120] ; 0x78 -10020c1a: 4648 mov r0, r9 -10020c1c: a918 add r1, sp, #96 ; 0x60 -10020c1e: 3a0c subs r2, #12 -10020c20: f01d fe2e bl 1003e880 <__rtw_get_wpa_ie_veneer> -10020c24: b148 cbz r0, 10020c3a -10020c26: 9b18 ldr r3, [sp, #96] ; 0x60 -10020c28: b13b cbz r3, 10020c3a -10020c2a: f8b8 1000 ldrh.w r1, [r8] -10020c2e: aa06 add r2, sp, #24 -10020c30: f8cd a000 str.w sl, [sp] -10020c34: ab07 add r3, sp, #28 -10020c36: f01d fe13 bl 1003e860 <__rtw_parse_wpa_ie_veneer> -10020c3a: 9b06 ldr r3, [sp, #24] -10020c3c: 2b08 cmp r3, #8 -10020c3e: f04f 0320 mov.w r3, #32 -10020c42: e017 b.n 10020c74 -10020c44: f1ba 0f00 cmp.w sl, #0 -10020c48: d01e beq.n 10020c88 -10020c4a: 6faa ldr r2, [r5, #120] ; 0x78 -10020c4c: 4648 mov r0, r9 -10020c4e: a918 add r1, sp, #96 ; 0x60 -10020c50: 3a0c subs r2, #12 -10020c52: f01d fe21 bl 1003e898 <__rtw_get_wpa2_ie_veneer> -10020c56: b148 cbz r0, 10020c6c -10020c58: 9b18 ldr r3, [sp, #96] ; 0x60 -10020c5a: b13b cbz r3, 10020c6c -10020c5c: f8bd 1012 ldrh.w r1, [sp, #18] -10020c60: f8cd b000 str.w fp, [sp] -10020c64: aa06 add r2, sp, #24 -10020c66: ab07 add r3, sp, #28 -10020c68: f01d fdee bl 1003e848 <__rtw_parse_wpa2_ie_veneer> -10020c6c: 9b06 ldr r3, [sp, #24] -10020c6e: 2b08 cmp r3, #8 -10020c70: f04f 0340 mov.w r3, #64 ; 0x40 -10020c74: d103 bne.n 10020c7e -10020c76: 2202 movs r2, #2 -10020c78: 85e2 strh r2, [r4, #46] ; 0x2e -10020c7a: 8623 strh r3, [r4, #48] ; 0x30 -10020c7c: e004 b.n 10020c88 -10020c7e: 2204 movs r2, #4 -10020c80: e7fa b.n 10020c78 -10020c82: 2301 movs r3, #1 -10020c84: 85e3 strh r3, [r4, #46] ; 0x2e -10020c86: 8626 strh r6, [r4, #48] ; 0x30 -10020c88: a818 add r0, sp, #96 ; 0x60 -10020c8a: 2100 movs r1, #0 -10020c8c: f44f 7200 mov.w r2, #512 ; 0x200 -10020c90: f7f6 fbce bl 10017430 -10020c94: 4648 mov r0, r9 -10020c96: 6fa9 ldr r1, [r5, #120] ; 0x78 -10020c98: aa18 add r2, sp, #96 ; 0x60 -10020c9a: ab07 add r3, sp, #28 -10020c9c: f01d fdf4 bl 1003e888 <__rtw_get_wps_ie_veneer> -10020ca0: b918 cbnz r0, 10020caa -10020ca2: 2306 movs r3, #6 -10020ca4: 8663 strh r3, [r4, #50] ; 0x32 -10020ca6: 86a0 strh r0, [r4, #52] ; 0x34 -10020ca8: e03a b.n 10020d20 -10020caa: f89d 9061 ldrb.w r9, [sp, #97] ; 0x61 -10020cae: ab18 add r3, sp, #96 ; 0x60 -10020cb0: 4499 add r9, r3 -10020cb2: f64f 7aff movw sl, #65535 ; 0xffff -10020cb6: f04f 0800 mov.w r8, #0 -10020cba: f10d 0666 add.w r6, sp, #102 ; 0x66 -10020cbe: 454e cmp r6, r9 -10020cc0: d203 bcs.n 10020cca -10020cc2: ebc6 0309 rsb r3, r6, r9 -10020cc6: 2b03 cmp r3, #3 -10020cc8: dc07 bgt.n 10020cda -10020cca: f1b8 0f01 cmp.w r8, #1 -10020cce: d123 bne.n 10020d18 -10020cd0: fa5f fa8a uxtb.w sl, sl -10020cd4: f8c4 a032 str.w sl, [r4, #50] ; 0x32 -10020cd8: e022 b.n 10020d20 -10020cda: 8830 ldrh r0, [r6, #0] -10020cdc: f7f6 fb52 bl 10017384 <_htons> -10020ce0: 4683 mov fp, r0 -10020ce2: 8870 ldrh r0, [r6, #2] -10020ce4: f7f6 fb4e bl 10017384 <_htons> -10020ce8: f241 0141 movw r1, #4161 ; 0x1041 -10020cec: 458b cmp fp, r1 -10020cee: 4603 mov r3, r0 -10020cf0: f106 0204 add.w r2, r6, #4 -10020cf4: d102 bne.n 10020cfc -10020cf6: f896 8004 ldrb.w r8, [r6, #4] -10020cfa: e00b b.n 10020d14 -10020cfc: f241 0112 movw r1, #4114 ; 0x1012 -10020d00: 458b cmp fp, r1 -10020d02: d107 bne.n 10020d14 -10020d04: 88b0 ldrh r0, [r6, #4] -10020d06: 9202 str r2, [sp, #8] -10020d08: 9303 str r3, [sp, #12] -10020d0a: f7f6 fb3b bl 10017384 <_htons> -10020d0e: 9b03 ldr r3, [sp, #12] -10020d10: 9a02 ldr r2, [sp, #8] -10020d12: 4682 mov sl, r0 -10020d14: 18d6 adds r6, r2, r3 -10020d16: e7d2 b.n 10020cbe -10020d18: 2307 movs r3, #7 -10020d1a: 8663 strh r3, [r4, #50] ; 0x32 -10020d1c: 2300 movs r3, #0 -10020d1e: 86a3 strh r3, [r4, #52] ; 0x34 -10020d20: 68ea ldr r2, [r5, #12] -10020d22: f10d 0021 add.w r0, sp, #33 ; 0x21 -10020d26: f105 0110 add.w r1, r5, #16 -10020d2a: 7022 strb r2, [r4, #0] -10020d2c: f7f6 fb70 bl 10017410 -10020d30: 6ceb ldr r3, [r5, #76] ; 0x4c -10020d32: 4638 mov r0, r7 -10020d34: f8c4 3036 str.w r3, [r4, #54] ; 0x36 -10020d38: f012 ff2d bl 10033b96 -10020d3c: 2000 movs r0, #0 -10020d3e: e001 b.n 10020d44 -10020d40: f04f 30ff mov.w r0, #4294967295 -10020d44: f50d 7d19 add.w sp, sp, #612 ; 0x264 -10020d48: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -10020d4c : -10020d4c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10020d50: 460c mov r4, r1 -10020d52: 6b62 ldr r2, [r4, #52] ; 0x34 -10020d54: 6c41 ldr r1, [r0, #68] ; 0x44 -10020d56: f5ad 7d0b sub.w sp, sp, #556 ; 0x22c -10020d5a: f04f 0900 mov.w r9, #0 -10020d5e: 9004 str r0, [sp, #16] -10020d60: 6c06 ldr r6, [r0, #64] ; 0x40 -10020d62: 9106 str r1, [sp, #24] -10020d64: 9207 str r2, [sp, #28] -10020d66: a80a add r0, sp, #40 ; 0x28 -10020d68: 4649 mov r1, r9 -10020d6a: f44f 7200 mov.w r2, #512 ; 0x200 -10020d6e: f8ad 9020 strh.w r9, [sp, #32] -10020d72: f8ad 9022 strh.w r9, [sp, #34] ; 0x22 -10020d76: f7f6 fb5b bl 10017430 -10020d7a: 6fa1 ldr r1, [r4, #120] ; 0x78 -10020d7c: f104 0088 add.w r0, r4, #136 ; 0x88 -10020d80: 390c subs r1, #12 -10020d82: aa0a add r2, sp, #40 ; 0x28 -10020d84: ab09 add r3, sp, #36 ; 0x24 -10020d86: f01d fd7f bl 1003e888 <__rtw_get_wps_ie_veneer> -10020d8a: b948 cbnz r0, 10020da0 -10020d8c: 23ff movs r3, #255 ; 0xff -10020d8e: 7333 strb r3, [r6, #12] -10020d90: f64f 73ff movw r3, #65535 ; 0xffff -10020d94: 4607 mov r7, r0 -10020d96: 9305 str r3, [sp, #20] -10020d98: 4681 mov r9, r0 -10020d9a: 4680 mov r8, r0 -10020d9c: 4683 mov fp, r0 -10020d9e: e037 b.n 10020e10 -10020da0: f89d 5029 ldrb.w r5, [sp, #41] ; 0x29 -10020da4: a90a add r1, sp, #40 ; 0x28 -10020da6: f64f 72ff movw r2, #65535 ; 0xffff -10020daa: 440d add r5, r1 -10020dac: 9205 str r2, [sp, #20] -10020dae: f10d 072e add.w r7, sp, #46 ; 0x2e -10020db2: 46c8 mov r8, r9 -10020db4: 46cb mov fp, r9 -10020db6: 42af cmp r7, r5 -10020db8: d229 bcs.n 10020e0e -10020dba: 1beb subs r3, r5, r7 -10020dbc: 2b03 cmp r3, #3 -10020dbe: dd26 ble.n 10020e0e -10020dc0: 8838 ldrh r0, [r7, #0] -10020dc2: f7f6 fadf bl 10017384 <_htons> -10020dc6: 4682 mov sl, r0 -10020dc8: 8878 ldrh r0, [r7, #2] -10020dca: f7f6 fadb bl 10017384 <_htons> -10020dce: f241 0141 movw r1, #4161 ; 0x1041 -10020dd2: 458a cmp sl, r1 -10020dd4: 4603 mov r3, r0 -10020dd6: f107 0204 add.w r2, r7, #4 -10020dda: d102 bne.n 10020de2 -10020ddc: f897 9004 ldrb.w r9, [r7, #4] -10020de0: e013 b.n 10020e0a -10020de2: f241 0112 movw r1, #4114 ; 0x1012 -10020de6: 458a cmp sl, r1 -10020de8: d108 bne.n 10020dfc -10020dea: 88b8 ldrh r0, [r7, #4] -10020dec: 9203 str r2, [sp, #12] -10020dee: 9302 str r3, [sp, #8] -10020df0: f7f6 fac8 bl 10017384 <_htons> -10020df4: 9a03 ldr r2, [sp, #12] -10020df6: 9005 str r0, [sp, #20] -10020df8: 9b02 ldr r3, [sp, #8] -10020dfa: e006 b.n 10020e0a -10020dfc: f241 0111 movw r1, #4113 ; 0x1011 -10020e00: 458a cmp sl, r1 -10020e02: bf08 it eq -10020e04: 4680 moveq r8, r0 -10020e06: bf08 it eq -10020e08: 4693 moveq fp, r2 -10020e0a: 18d7 adds r7, r2, r3 -10020e0c: e7d3 b.n 10020db6 -10020e0e: 2701 movs r7, #1 -10020e10: 7ae3 ldrb r3, [r4, #11] -10020e12: 2b01 cmp r3, #1 -10020e14: f04f 0300 mov.w r3, #0 -10020e18: d10d bne.n 10020e36 -10020e1a: 6fa1 ldr r1, [r4, #120] ; 0x78 -10020e1c: 9300 str r3, [sp, #0] -10020e1e: f104 007c add.w r0, r4, #124 ; 0x7c -10020e22: 220e movs r2, #14 -10020e24: f016 fc98 bl 10037758 -10020e28: 2800 cmp r0, #0 -10020e2a: bf0c ite eq -10020e2c: f04f 0a01 moveq.w sl, #1 -10020e30: f04f 0a03 movne.w sl, #3 -10020e34: e000 b.n 10020e38 -10020e36: 469a mov sl, r3 -10020e38: 2500 movs r5, #0 -10020e3a: 9b06 ldr r3, [sp, #24] -10020e3c: 429d cmp r5, r3 -10020e3e: d22b bcs.n 10020e98 -10020e40: 5d73 ldrb r3, [r6, r5] -10020e42: eb06 0c05 add.w ip, r6, r5 -10020e46: b1b3 cbz r3, 10020e76 -10020e48: 1c68 adds r0, r5, #1 -10020e4a: 4430 add r0, r6 -10020e4c: 1d21 adds r1, r4, #4 -10020e4e: 2206 movs r2, #6 -10020e50: 9302 str r3, [sp, #8] -10020e52: f7f6 fae5 bl 10017420 -10020e56: 9b02 ldr r3, [sp, #8] -10020e58: b158 cbz r0, 10020e72 -10020e5a: 2b0e cmp r3, #14 -10020e5c: d006 beq.n 10020e6c -10020e5e: 3507 adds r5, #7 -10020e60: 6ba3 ldr r3, [r4, #56] ; 0x38 -10020e62: 5972 ldr r2, [r6, r5] -10020e64: 429a cmp r2, r3 -10020e66: d217 bcs.n 10020e98 -10020e68: 5173 str r3, [r6, r5] -10020e6a: e015 b.n 10020e98 -10020e6c: 68e2 ldr r2, [r4, #12] -10020e6e: 2a00 cmp r2, #0 -10020e70: d0f5 beq.n 10020e5e -10020e72: 441d add r5, r3 -10020e74: e7e1 b.n 10020e3a -10020e76: 9a04 ldr r2, [sp, #16] -10020e78: f1ba 0f01 cmp.w sl, #1 -10020e7c: f8b2 3048 ldrh.w r3, [r2, #72] ; 0x48 -10020e80: f103 0301 add.w r3, r3, #1 -10020e84: f8a2 3048 strh.w r3, [r2, #72] ; 0x48 -10020e88: d108 bne.n 10020e9c -10020e8a: f108 030f add.w r3, r8, #15 -10020e8e: b2db uxtb r3, r3 -10020e90: 9906 ldr r1, [sp, #24] -10020e92: 18ea adds r2, r5, r3 -10020e94: 428a cmp r2, r1 -10020e96: d904 bls.n 10020ea2 -10020e98: 2000 movs r0, #0 -10020e9a: e049 b.n 10020f30 -10020e9c: 68e3 ldr r3, [r4, #12] -10020e9e: 330f adds r3, #15 -10020ea0: e7f5 b.n 10020e8e -10020ea2: 1c68 adds r0, r5, #1 -10020ea4: f88c 3000 strb.w r3, [ip] -10020ea8: 2206 movs r2, #6 -10020eaa: 4430 add r0, r6 -10020eac: 1d21 adds r1, r4, #4 -10020eae: f8cd c00c str.w ip, [sp, #12] -10020eb2: f7f6 faad bl 10017410 -10020eb6: 6ba3 ldr r3, [r4, #56] ; 0x38 -10020eb8: 9a07 ldr r2, [sp, #28] -10020eba: f8dd c00c ldr.w ip, [sp, #12] -10020ebe: f8cc 3007 str.w r3, [ip, #7] -10020ec2: f012 03ff ands.w r3, r2, #255 ; 0xff -10020ec6: f04f 0200 mov.w r2, #0 -10020eca: d012 beq.n 10020ef2 -10020ecc: ab08 add r3, sp, #32 -10020ece: 9200 str r2, [sp, #0] -10020ed0: 9301 str r3, [sp, #4] -10020ed2: 6fa1 ldr r1, [r4, #120] ; 0x78 -10020ed4: f104 007c add.w r0, r4, #124 ; 0x7c -10020ed8: f10d 0322 add.w r3, sp, #34 ; 0x22 -10020edc: f8cd c00c str.w ip, [sp, #12] -10020ee0: f01d fcca bl 1003e878 <__rtw_get_sec_ie_veneer> -10020ee4: 2800 cmp r0, #0 -10020ee6: bfd4 ite le -10020ee8: 2201 movle r2, #1 -10020eea: 2203 movgt r2, #3 -10020eec: f8dd c00c ldr.w ip, [sp, #12] -10020ef0: e000 b.n 10020ef4 -10020ef2: 461a mov r2, r3 -10020ef4: 1973 adds r3, r6, r5 -10020ef6: 72da strb r2, [r3, #11] -10020ef8: b12f cbz r7, 10020f06 -10020efa: f1b9 0f01 cmp.w r9, #1 -10020efe: d102 bne.n 10020f06 -10020f00: 9905 ldr r1, [sp, #20] -10020f02: 7319 strb r1, [r3, #12] -10020f04: e001 b.n 10020f0a -10020f06: 22ff movs r2, #255 ; 0xff -10020f08: 731a strb r2, [r3, #12] -10020f0a: f88c a00d strb.w sl, [ip, #13] -10020f0e: 6ce3 ldr r3, [r4, #76] ; 0x4c -10020f10: f1ba 0f01 cmp.w sl, #1 -10020f14: f88c 300e strb.w r3, [ip, #14] -10020f18: f105 000f add.w r0, r5, #15 -10020f1c: 4430 add r0, r6 -10020f1e: bf07 ittee eq -10020f20: 4659 moveq r1, fp -10020f22: 4642 moveq r2, r8 -10020f24: f104 0110 addne.w r1, r4, #16 -10020f28: 68e2 ldrne r2, [r4, #12] -10020f2a: f7f6 fa71 bl 10017410 -10020f2e: 2001 movs r0, #1 -10020f30: f50d 7d0b add.w sp, sp, #556 ; 0x22c -10020f34: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -10020f38 : -10020f38: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -10020f3c: 4688 mov r8, r1 -10020f3e: b085 sub sp, #20 -10020f40: 4604 mov r4, r0 -10020f42: 2800 cmp r0, #0 -10020f44: f000 8122 beq.w 1002118c -10020f48: 2020 movs r0, #32 -10020f4a: f7f6 fc31 bl 100177b0 -10020f4e: 4606 mov r6, r0 -10020f50: 2800 cmp r0, #0 -10020f52: f000 811b beq.w 1002118c -10020f56: f44f 7061 mov.w r0, #900 ; 0x384 -10020f5a: f7f6 fc29 bl 100177b0 -10020f5e: 4605 mov r5, r0 -10020f60: b910 cbnz r0, 10020f68 -10020f62: 4630 mov r0, r6 -10020f64: 2120 movs r1, #32 -10020f66: e0a0 b.n 100210aa -10020f68: f106 0018 add.w r0, r6, #24 -10020f6c: f7f6 fa68 bl 10017440 -10020f70: 2338 movs r3, #56 ; 0x38 -10020f72: 80b3 strh r3, [r6, #4] -10020f74: 2300 movs r3, #0 -10020f76: 6133 str r3, [r6, #16] -10020f78: 6173 str r3, [r6, #20] -10020f7a: f44f 7961 mov.w r9, #900 ; 0x384 -10020f7e: f44f 735f mov.w r3, #892 ; 0x37c -10020f82: f8c6 900c str.w r9, [r6, #12] -10020f86: 60b5 str r5, [r6, #8] -10020f88: 802b strh r3, [r5, #0] -10020f8a: 2308 movs r3, #8 -10020f8c: 70ab strb r3, [r5, #2] -10020f8e: f504 60a3 add.w r0, r4, #1304 ; 0x518 -10020f92: f7f6 fb8f bl 100176b4 -10020f96: f105 0708 add.w r7, r5, #8 -10020f9a: 70e8 strb r0, [r5, #3] -10020f9c: 4641 mov r1, r8 -10020f9e: 4620 mov r0, r4 -10020fa0: 463a mov r2, r7 -10020fa2: f7ff fbe4 bl 1002076e -10020fa6: b930 cbnz r0, 10020fb6 -10020fa8: 4630 mov r0, r6 -10020faa: 2120 movs r1, #32 -10020fac: f7f6 fa2d bl 1001740a -10020fb0: 4628 mov r0, r5 -10020fb2: 4649 mov r1, r9 -10020fb4: e079 b.n 100210aa -10020fb6: f8d4 350c ldr.w r3, [r4, #1292] ; 0x50c -10020fba: bb93 cbnz r3, 10021022 -10020fbc: 7d63 ldrb r3, [r4, #21] -10020fbe: 2b01 cmp r3, #1 -10020fc0: d12f bne.n 10021022 -10020fc2: f994 3050 ldrsb.w r3, [r4, #80] ; 0x50 -10020fc6: 2b00 cmp r3, #0 -10020fc8: dd2b ble.n 10021022 -10020fca: f105 0018 add.w r0, r5, #24 -10020fce: f104 0150 add.w r1, r4, #80 ; 0x50 -10020fd2: f7f9 fdf9 bl 1001abc8 -10020fd6: bb20 cbnz r0, 10021022 -10020fd8: f8d4 3650 ldr.w r3, [r4, #1616] ; 0x650 -10020fdc: 220c movs r2, #12 -10020fde: fb02 4303 mla r3, r2, r3, r4 -10020fe2: f893 252c ldrb.w r2, [r3, #1324] ; 0x52c -10020fe6: 208c movs r0, #140 ; 0x8c -10020fe8: f062 027f orn r2, r2, #127 ; 0x7f -10020fec: f883 252c strb.w r2, [r3, #1324] ; 0x52c -10020ff0: f7f6 fbce bl 10017790 -10020ff4: f8c4 050c str.w r0, [r4, #1292] ; 0x50c -10020ff8: 4681 mov r9, r0 -10020ffa: f8d8 0070 ldr.w r0, [r8, #112] ; 0x70 -10020ffe: f7f6 fbc7 bl 10017790 -10021002: f8c9 0078 str.w r0, [r9, #120] ; 0x78 -10021006: f8d4 350c ldr.w r3, [r4, #1292] ; 0x50c -1002100a: f8d8 2070 ldr.w r2, [r8, #112] ; 0x70 -1002100e: 6f98 ldr r0, [r3, #120] ; 0x78 -10021010: f8d8 1078 ldr.w r1, [r8, #120] ; 0x78 -10021014: f7f6 f9fc bl 10017410 -10021018: f8d4 350c ldr.w r3, [r4, #1292] ; 0x50c -1002101c: f8d8 2070 ldr.w r2, [r8, #112] ; 0x70 -10021020: 671a str r2, [r3, #112] ; 0x70 -10021022: f8b4 304a ldrh.w r3, [r4, #74] ; 0x4a -10021026: f5b3 7f04 cmp.w r3, #528 ; 0x210 -1002102a: d111 bne.n 10021050 -1002102c: f8d4 2658 ldr.w r2, [r4, #1624] ; 0x658 -10021030: b14a cbz r2, 10021046 -10021032: 696b ldr r3, [r5, #20] -10021034: 429a cmp r2, r3 -10021036: d131 bne.n 1002109c -10021038: f105 0018 add.w r0, r5, #24 -1002103c: f204 615c addw r1, r4, #1628 ; 0x65c -10021040: f7f9 fdce bl 1001abe0 -10021044: bb50 cbnz r0, 1002109c -10021046: 4620 mov r0, r4 -10021048: 4639 mov r1, r7 -1002104a: f7ff fd93 bl 10020b74 -1002104e: e016 b.n 1002107e -10021050: 6c23 ldr r3, [r4, #64] ; 0x40 -10021052: b36b cbz r3, 100210b0 -10021054: f8b4 361a ldrh.w r3, [r4, #1562] ; 0x61a -10021058: 2b02 cmp r3, #2 -1002105a: d016 beq.n 1002108a -1002105c: f8d4 2658 ldr.w r2, [r4, #1624] ; 0x658 -10021060: b14a cbz r2, 10021076 -10021062: 696b ldr r3, [r5, #20] -10021064: 429a cmp r2, r3 -10021066: d119 bne.n 1002109c -10021068: f105 0018 add.w r0, r5, #24 -1002106c: f204 615c addw r1, r4, #1628 ; 0x65c -10021070: f7f9 fdb6 bl 1001abe0 -10021074: b990 cbnz r0, 1002109c -10021076: 4620 mov r0, r4 -10021078: 4639 mov r1, r7 -1002107a: f7ff fe67 bl 10020d4c -1002107e: f8d4 364c ldr.w r3, [r4, #1612] ; 0x64c -10021082: 3301 adds r3, #1 -10021084: f8c4 364c str.w r3, [r4, #1612] ; 0x64c -10021088: e008 b.n 1002109c -1002108a: f105 000c add.w r0, r5, #12 -1002108e: f204 6114 addw r1, r4, #1556 ; 0x614 -10021092: 2206 movs r2, #6 -10021094: f7f6 f9c4 bl 10017420 -10021098: 2800 cmp r0, #0 -1002109a: d163 bne.n 10021164 -1002109c: 4630 mov r0, r6 -1002109e: 2120 movs r1, #32 -100210a0: f7f6 f9b3 bl 1001740a -100210a4: 4628 mov r0, r5 -100210a6: f44f 7161 mov.w r1, #900 ; 0x384 -100210aa: f7f6 f9ae bl 1001740a -100210ae: e06d b.n 1002118c -100210b0: f894 3438 ldrb.w r3, [r4, #1080] ; 0x438 -100210b4: 2b01 cmp r3, #1 -100210b6: d112 bne.n 100210de -100210b8: f105 000c add.w r0, r5, #12 -100210bc: f104 0174 add.w r1, r4, #116 ; 0x74 -100210c0: 2206 movs r2, #6 -100210c2: f7f6 f9ad bl 10017420 -100210c6: 2800 cmp r0, #0 -100210c8: d052 beq.n 10021170 -100210ca: 6ce3 ldr r3, [r4, #76] ; 0x4c -100210cc: 2b00 cmp r3, #0 -100210ce: d049 beq.n 10021164 -100210d0: f105 0018 add.w r0, r5, #24 -100210d4: f104 0150 add.w r1, r4, #80 ; 0x50 -100210d8: f7f9 fd76 bl 1001abc8 -100210dc: e02d b.n 1002113a -100210de: f105 0018 add.w r0, r5, #24 -100210e2: f104 0150 add.w r1, r4, #80 ; 0x50 -100210e6: f7f9 fd6f bl 1001abc8 -100210ea: 2800 cmp r0, #0 -100210ec: d140 bne.n 10021170 -100210ee: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c -100210f2: f8ad 000c strh.w r0, [sp, #12] -100210f6: f8ad 000e strh.w r0, [sp, #14] -100210fa: b953 cbnz r3, 10021112 -100210fc: f241 3385 movw r3, #4997 ; 0x1385 -10021100: 5ce3 ldrb r3, [r4, r3] -10021102: b933 cbnz r3, 10021112 -10021104: f7eb fe14 bl 1000cd30 -10021108: b918 cbnz r0, 10021112 -1002110a: 6beb ldr r3, [r5, #60] ; 0x3c -1002110c: 2b01 cmp r3, #1 -1002110e: d129 bne.n 10021164 -10021110: e02e b.n 10021170 -10021112: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c -10021116: f023 0204 bic.w r2, r3, #4 -1002111a: 2a01 cmp r2, #1 -1002111c: d10f bne.n 1002113e -1002111e: 6beb ldr r3, [r5, #60] ; 0x3c -10021120: b333 cbz r3, 10021170 -10021122: ab03 add r3, sp, #12 -10021124: 2200 movs r2, #0 -10021126: f8d5 1080 ldr.w r1, [r5, #128] ; 0x80 -1002112a: f105 0084 add.w r0, r5, #132 ; 0x84 -1002112e: 9301 str r3, [sp, #4] -10021130: 9200 str r2, [sp, #0] -10021132: f10d 030e add.w r3, sp, #14 -10021136: f01d fb9f bl 1003e878 <__rtw_get_sec_ie_veneer> -1002113a: b198 cbz r0, 10021164 -1002113c: e018 b.n 10021170 -1002113e: 2b02 cmp r3, #2 -10021140: d001 beq.n 10021146 -10021142: 2b04 cmp r3, #4 -10021144: d10e bne.n 10021164 -10021146: 6beb ldr r3, [r5, #60] ; 0x3c -10021148: b193 cbz r3, 10021170 -1002114a: ab03 add r3, sp, #12 -1002114c: 2200 movs r2, #0 -1002114e: f8d5 1080 ldr.w r1, [r5, #128] ; 0x80 -10021152: f105 0084 add.w r0, r5, #132 ; 0x84 -10021156: 9301 str r3, [sp, #4] -10021158: 9200 str r2, [sp, #0] -1002115a: f10d 030e add.w r3, sp, #14 -1002115e: f01d fb8b bl 1003e878 <__rtw_get_sec_ie_veneer> -10021162: b128 cbz r0, 10021170 -10021164: f604 1008 addw r0, r4, #2312 ; 0x908 -10021168: 4631 mov r1, r6 -1002116a: f7fb fa10 bl 1001c58e -1002116e: e008 b.n 10021182 -10021170: 4630 mov r0, r6 -10021172: 2120 movs r1, #32 -10021174: f7f6 f949 bl 1001740a -10021178: 4628 mov r0, r5 -1002117a: f44f 7161 mov.w r1, #900 ; 0x384 -1002117e: f7f6 f944 bl 1001740a -10021182: f8d4 364c ldr.w r3, [r4, #1612] ; 0x64c -10021186: 3301 adds r3, #1 -10021188: f8c4 364c str.w r3, [r4, #1612] ; 0x64c -1002118c: b005 add sp, #20 -1002118e: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - ... - -10021194 : -10021194: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -10021198: 2301 movs r3, #1 -1002119a: f88d 3007 strb.w r3, [sp, #7] -1002119e: 6843 ldr r3, [r0, #4] -100211a0: 4605 mov r5, r0 -100211a2: 2b05 cmp r3, #5 -100211a4: 460f mov r7, r1 -100211a6: f8d1 8078 ldr.w r8, [r1, #120] ; 0x78 -100211aa: d128 bne.n 100211fe -100211ac: f500 54b5 add.w r4, r0, #5792 ; 0x16a0 -100211b0: 3408 adds r4, #8 -100211b2: 7a23 ldrb r3, [r4, #8] -100211b4: b31b cbz r3, 100211fe -100211b6: f104 0909 add.w r9, r4, #9 -100211ba: 4648 mov r0, r9 -100211bc: f108 010a add.w r1, r8, #10 -100211c0: 2206 movs r2, #6 -100211c2: f7f6 f92d bl 10017420 -100211c6: b1d0 cbz r0, 100211fe -100211c8: 210a movs r1, #10 -100211ca: 4628 mov r0, r5 -100211cc: f10d 0207 add.w r2, sp, #7 -100211d0: f011 f97f bl 100324d2 -100211d4: 6921 ldr r1, [r4, #16] -100211d6: b111 cbz r1, 100211de -100211d8: 4628 mov r0, r5 -100211da: f7fd fb76 bl 1001e8ca -100211de: 2600 movs r6, #0 -100211e0: 4631 mov r1, r6 -100211e2: 4648 mov r0, r9 -100211e4: 2206 movs r2, #6 -100211e6: 7226 strb r6, [r4, #8] -100211e8: 6126 str r6, [r4, #16] -100211ea: f7f6 f921 bl 10017430 -100211ee: f104 0014 add.w r0, r4, #20 -100211f2: f015 fe13 bl 10036e1c -100211f6: 4628 mov r0, r5 -100211f8: 4631 mov r1, r6 -100211fa: f002 fab1 bl 10023760 -100211fe: 4b0b ldr r3, [pc, #44] ; (1002122c ) -10021200: 6f39 ldr r1, [r7, #112] ; 0x70 -10021202: 681b ldr r3, [r3, #0] -10021204: b12b cbz r3, 10021212 -10021206: 3924 subs r1, #36 ; 0x24 -10021208: f108 0024 add.w r0, r8, #36 ; 0x24 -1002120c: b289 uxth r1, r1 -1002120e: 2250 movs r2, #80 ; 0x50 -10021210: 4798 blx r3 -10021212: f8d5 3648 ldr.w r3, [r5, #1608] ; 0x648 -10021216: 2b03 cmp r3, #3 -10021218: d103 bne.n 10021222 -1002121a: 4628 mov r0, r5 -1002121c: 4639 mov r1, r7 -1002121e: f7ff fe8b bl 10020f38 -10021222: 2001 movs r0, #1 -10021224: b003 add sp, #12 -10021226: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -1002122a: bf00 nop -1002122c: 1004dd74 .word 0x1004dd74 - -10021230 : -10021230: b570 push {r4, r5, r6, lr} -10021232: 4606 mov r6, r0 -10021234: 2020 movs r0, #32 -10021236: f7f6 fabb bl 100177b0 -1002123a: 4604 mov r4, r0 -1002123c: b348 cbz r0, 10021292 -1002123e: 200c movs r0, #12 -10021240: f7f6 fab6 bl 100177b0 -10021244: 4605 mov r5, r0 -10021246: b928 cbnz r0, 10021254 -10021248: 4620 mov r0, r4 -1002124a: 2120 movs r1, #32 -1002124c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10021250: f7f6 b8db b.w 1001740a -10021254: f104 0018 add.w r0, r4, #24 -10021258: f7f6 f8f2 bl 10017440 -1002125c: 2338 movs r3, #56 ; 0x38 -1002125e: 80a3 strh r3, [r4, #4] -10021260: 230c movs r3, #12 -10021262: 60e3 str r3, [r4, #12] -10021264: 2300 movs r3, #0 -10021266: 6123 str r3, [r4, #16] -10021268: 6163 str r3, [r4, #20] -1002126a: 2304 movs r3, #4 -1002126c: 60a5 str r5, [r4, #8] -1002126e: 802b strh r3, [r5, #0] -10021270: 2309 movs r3, #9 -10021272: 70ab strb r3, [r5, #2] -10021274: f506 60a3 add.w r0, r6, #1304 ; 0x518 -10021278: f7f6 fa1c bl 100176b4 -1002127c: f8d6 364c ldr.w r3, [r6, #1612] ; 0x64c -10021280: 70e8 strb r0, [r5, #3] -10021282: 60ab str r3, [r5, #8] -10021284: f606 1008 addw r0, r6, #2312 ; 0x908 -10021288: 4621 mov r1, r4 -1002128a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1002128e: f7fb b97e b.w 1001c58e -10021292: bd70 pop {r4, r5, r6, pc} - -10021294 : -10021294: b5f8 push {r3, r4, r5, r6, r7, lr} -10021296: 4606 mov r6, r0 -10021298: 2020 movs r0, #32 -1002129a: 460f mov r7, r1 -1002129c: f7f6 fa88 bl 100177b0 -100212a0: 4604 mov r4, r0 -100212a2: b370 cbz r0, 10021302 -100212a4: 200c movs r0, #12 -100212a6: f7f6 fa83 bl 100177b0 -100212aa: 4605 mov r5, r0 -100212ac: b928 cbnz r0, 100212ba -100212ae: 4620 mov r0, r4 -100212b0: 2120 movs r1, #32 -100212b2: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -100212b6: f7f6 b8a8 b.w 1001740a -100212ba: f104 0018 add.w r0, r4, #24 -100212be: f7f6 f8bf bl 10017440 -100212c2: 2338 movs r3, #56 ; 0x38 -100212c4: 80a3 strh r3, [r4, #4] -100212c6: 230c movs r3, #12 -100212c8: 60e3 str r3, [r4, #12] -100212ca: 2300 movs r3, #0 -100212cc: 6123 str r3, [r4, #16] -100212ce: 6163 str r3, [r4, #20] -100212d0: 2304 movs r3, #4 -100212d2: 60a5 str r5, [r4, #8] -100212d4: 802b strh r3, [r5, #0] -100212d6: 230a movs r3, #10 -100212d8: 70ab strb r3, [r5, #2] -100212da: f506 60a3 add.w r0, r6, #1304 ; 0x518 -100212de: f7f6 f9e9 bl 100176b4 -100212e2: f106 017c add.w r1, r6, #124 ; 0x7c -100212e6: 70e8 strb r0, [r5, #3] -100212e8: f8c6 7094 str.w r7, [r6, #148] ; 0x94 -100212ec: 4630 mov r0, r6 -100212ee: 60af str r7, [r5, #8] -100212f0: f7fc fff9 bl 1001e2e6 -100212f4: f606 1008 addw r0, r6, #2312 ; 0x908 -100212f8: 4621 mov r1, r4 -100212fa: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -100212fe: f7fb b946 b.w 1001c58e -10021302: bdf8 pop {r3, r4, r5, r6, r7, pc} - -10021304 : -10021304: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10021308: 6f8e ldr r6, [r1, #120] ; 0x78 -1002130a: 4604 mov r4, r0 -1002130c: 4630 mov r0, r6 -1002130e: f8d1 b070 ldr.w fp, [r1, #112] ; 0x70 -10021312: f7fd f93a bl 1001e58a -10021316: 4601 mov r1, r0 -10021318: f504 50a4 add.w r0, r4, #5248 ; 0x1480 -1002131c: 3019 adds r0, #25 -1002131e: 2206 movs r2, #6 -10021320: f7f6 f87e bl 10017420 -10021324: 2800 cmp r0, #0 -10021326: f000 80dd beq.w 100214e4 -1002132a: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -1002132e: f413 5f10 tst.w r3, #9216 ; 0x2400 -10021332: f000 80d7 beq.w 100214e4 -10021336: f413 4580 ands.w r5, r3, #16384 ; 0x4000 -1002133a: f040 80d3 bne.w 100214e4 -1002133e: f604 003c addw r0, r4, #2108 ; 0x83c -10021342: f015 fd6b bl 10036e1c -10021346: 8b73 ldrh r3, [r6, #26] -10021348: b123 cbz r3, 10021354 -1002134a: f8c4 5680 str.w r5, [r4, #1664] ; 0x680 -1002134e: f06f 0a03 mvn.w sl, #3 -10021352: e08d b.n 10021470 -10021354: 8b33 ldrh r3, [r6, #24] -10021356: f04f 081e mov.w r8, #30 -1002135a: f413 6f80 tst.w r3, #1024 ; 0x400 -1002135e: f8a4 372c strh.w r3, [r4, #1836] ; 0x72c -10021362: bf0c ite eq -10021364: 2314 moveq r3, #20 -10021366: 2309 movne r3, #9 -10021368: f884 372f strb.w r3, [r4, #1839] ; 0x72f -1002136c: f8b6 901c ldrh.w r9, [r6, #28] -10021370: f3c9 090d ubfx r9, r9, #0, #14 -10021374: f8a4 9728 strh.w r9, [r4, #1832] ; 0x728 -10021378: 46ca mov sl, r9 -1002137a: 45d8 cmp r8, fp -1002137c: d264 bcs.n 10021448 -1002137e: f816 3008 ldrb.w r3, [r6, r8] -10021382: eb06 0508 add.w r5, r6, r8 -10021386: 2b2d cmp r3, #45 ; 0x2d -10021388: d051 beq.n 1002142e -1002138a: d806 bhi.n 1002139a -1002138c: 2b2a cmp r3, #42 ; 0x2a -1002138e: d157 bne.n 10021440 -10021390: 4620 mov r0, r4 -10021392: 4629 mov r1, r5 -10021394: f007 fbaa bl 10028aec -10021398: e052 b.n 10021440 -1002139a: 2b3d cmp r3, #61 ; 0x3d -1002139c: d04c beq.n 10021438 -1002139e: 2bdd cmp r3, #221 ; 0xdd -100213a0: d14e bne.n 10021440 -100213a2: 1caf adds r7, r5, #2 -100213a4: 4638 mov r0, r7 -100213a6: 4951 ldr r1, [pc, #324] ; (100214ec ) -100213a8: 2206 movs r2, #6 -100213aa: f7f6 f839 bl 10017420 -100213ae: b120 cbz r0, 100213ba -100213b0: 4620 mov r0, r4 -100213b2: 4629 mov r1, r5 -100213b4: f007 faa3 bl 100288fe -100213b8: e042 b.n 10021440 -100213ba: 4638 mov r0, r7 -100213bc: 494c ldr r1, [pc, #304] ; (100214f0 ) -100213be: 2204 movs r2, #4 -100213c0: f7f6 f82e bl 10017420 -100213c4: b1a8 cbz r0, 100213f2 -100213c6: 7868 ldrb r0, [r5, #1] -100213c8: 3802 subs r0, #2 -100213ca: f7f3 feaf bl 1001512c -100213ce: 4607 mov r7, r0 -100213d0: 2800 cmp r0, #0 -100213d2: d035 beq.n 10021440 -100213d4: 786a ldrb r2, [r5, #1] -100213d6: 232d movs r3, #45 ; 0x2d -100213d8: 3a04 subs r2, #4 -100213da: b2d2 uxtb r2, r2 -100213dc: 7003 strb r3, [r0, #0] -100213de: 7042 strb r2, [r0, #1] -100213e0: 1da9 adds r1, r5, #6 -100213e2: 3002 adds r0, #2 -100213e4: f7f9 fbe4 bl 1001abb0 -100213e8: 4620 mov r0, r4 -100213ea: 4639 mov r1, r7 -100213ec: f007 fb00 bl 100289f0 -100213f0: e019 b.n 10021426 -100213f2: 4638 mov r0, r7 -100213f4: 493f ldr r1, [pc, #252] ; (100214f4 ) -100213f6: 2204 movs r2, #4 -100213f8: f7f6 f812 bl 10017420 -100213fc: b300 cbz r0, 10021440 -100213fe: 7868 ldrb r0, [r5, #1] -10021400: 3802 subs r0, #2 -10021402: f7f3 fe93 bl 1001512c -10021406: 4607 mov r7, r0 -10021408: b1d0 cbz r0, 10021440 -1002140a: 786a ldrb r2, [r5, #1] -1002140c: 233d movs r3, #61 ; 0x3d -1002140e: 3a04 subs r2, #4 -10021410: b2d2 uxtb r2, r2 -10021412: 7003 strb r3, [r0, #0] -10021414: 7042 strb r2, [r0, #1] -10021416: 1da9 adds r1, r5, #6 -10021418: 3002 adds r0, #2 -1002141a: f7f9 fbc9 bl 1001abb0 -1002141e: 4620 mov r0, r4 -10021420: 4639 mov r1, r7 -10021422: f007 fb35 bl 10028a90 -10021426: 4638 mov r0, r7 -10021428: f7f3 ff1c bl 10015264 -1002142c: e008 b.n 10021440 -1002142e: 4620 mov r0, r4 -10021430: 4629 mov r1, r5 -10021432: f007 fadd bl 100289f0 -10021436: e003 b.n 10021440 -10021438: 4620 mov r0, r4 -1002143a: 4629 mov r1, r5 -1002143c: f007 fb28 bl 10028a90 -10021440: 786b ldrb r3, [r5, #1] -10021442: 3302 adds r3, #2 -10021444: 4498 add r8, r3 -10021446: e798 b.n 1002137a -10021448: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -1002144c: f423 5300 bic.w r3, r3, #8192 ; 0x2000 -10021450: f443 4380 orr.w r3, r3, #16384 ; 0x4000 -10021454: f8c4 3680 str.w r3, [r4, #1664] ; 0x680 -10021458: 4b27 ldr r3, [pc, #156] ; (100214f8 ) -1002145a: 681b ldr r3, [r3, #0] -1002145c: b143 cbz r3, 10021470 -1002145e: 4827 ldr r0, [pc, #156] ; (100214fc ) -10021460: f7f9 fb7e bl 1001ab60 -10021464: 4b26 ldr r3, [pc, #152] ; (10021500 ) -10021466: 4649 mov r1, r9 -10021468: f8d3 013c ldr.w r0, [r3, #316] ; 0x13c -1002146c: f7f9 fb78 bl 1001ab60 -10021470: f8d4 30d0 ldr.w r3, [r4, #208] ; 0xd0 -10021474: aa02 add r2, sp, #8 -10021476: 336e adds r3, #110 ; 0x6e -10021478: f802 3d01 strb.w r3, [r2, #-1]! -1002147c: 4620 mov r0, r4 -1002147e: 2134 movs r1, #52 ; 0x34 -10021480: f011 f827 bl 100324d2 -10021484: f7eb fc54 bl 1000cd30 -10021488: b140 cbz r0, 1002149c -1002148a: 4630 mov r0, r6 -1002148c: f7fd f88d bl 1001e5aa -10021490: 2206 movs r2, #6 -10021492: 4601 mov r1, r0 -10021494: 2300 movs r3, #0 -10021496: 200c movs r0, #12 -10021498: f7ec f86c bl 1000d574 -1002149c: 4620 mov r0, r4 -1002149e: 4651 mov r1, sl -100214a0: f7ff fef8 bl 10021294 -100214a4: f241 3385 movw r3, #4997 ; 0x1385 -100214a8: 5ce3 ldrb r3, [r4, r3] -100214aa: b143 cbz r3, 100214be -100214ac: 4630 mov r0, r6 -100214ae: f7fd f87c bl 1001e5aa -100214b2: 2206 movs r2, #6 -100214b4: 4601 mov r1, r0 -100214b6: 2300 movs r3, #0 -100214b8: 200a movs r0, #10 -100214ba: f7ec f85b bl 1000d574 -100214be: f241 036c movw r3, #4204 ; 0x106c -100214c2: 58e3 ldr r3, [r4, r3] -100214c4: 2b04 cmp r3, #4 -100214c6: d001 beq.n 100214cc -100214c8: 2b07 cmp r3, #7 -100214ca: d10b bne.n 100214e4 -100214cc: 4630 mov r0, r6 -100214ce: f7fd f86c bl 1001e5aa -100214d2: 4601 mov r1, r0 -100214d4: f504 6046 add.w r0, r4, #3168 ; 0xc60 -100214d8: f006 fedc bl 10028294 -100214dc: 4601 mov r1, r0 -100214de: 4620 mov r0, r4 -100214e0: f003 fa6c bl 100249bc -100214e4: 2001 movs r0, #1 -100214e6: b003 add sp, #12 -100214e8: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -100214ec: 100414e0 .word 0x100414e0 -100214f0: 10041445 .word 0x10041445 -100214f4: 10041433 .word 0x10041433 -100214f8: 10044ec0 .word 0x10044ec0 -100214fc: 10042939 .word 0x10042939 -10021500: 10043a4c .word 0x10043a4c - -10021504 : -10021504: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -10021506: 4606 mov r6, r0 -10021508: 2020 movs r0, #32 -1002150a: 460f mov r7, r1 -1002150c: f8ad 2006 strh.w r2, [sp, #6] -10021510: f7f6 f94e bl 100177b0 -10021514: 4604 mov r4, r0 -10021516: 2800 cmp r0, #0 -10021518: d03b beq.n 10021592 -1002151a: 2014 movs r0, #20 -1002151c: f7f6 f948 bl 100177b0 -10021520: 4605 mov r5, r0 -10021522: b920 cbnz r0, 1002152e -10021524: 4620 mov r0, r4 -10021526: 2120 movs r1, #32 -10021528: f7f5 ff6f bl 1001740a -1002152c: e031 b.n 10021592 -1002152e: f104 0018 add.w r0, r4, #24 -10021532: f7f5 ff85 bl 10017440 -10021536: 2338 movs r3, #56 ; 0x38 -10021538: 80a3 strh r3, [r4, #4] -1002153a: 2314 movs r3, #20 -1002153c: 60e3 str r3, [r4, #12] -1002153e: 2300 movs r3, #0 -10021540: 6123 str r3, [r4, #16] -10021542: 6163 str r3, [r4, #20] -10021544: 230c movs r3, #12 -10021546: 60a5 str r5, [r4, #8] -10021548: f506 60a3 add.w r0, r6, #1304 ; 0x518 -1002154c: 802b strh r3, [r5, #0] -1002154e: 70ab strb r3, [r5, #2] -10021550: f7f6 f8b0 bl 100176b4 -10021554: 4639 mov r1, r7 -10021556: 70e8 strb r0, [r5, #3] -10021558: 2206 movs r2, #6 -1002155a: f105 0008 add.w r0, r5, #8 -1002155e: f7f5 ff57 bl 10017410 -10021562: f105 000e add.w r0, r5, #14 -10021566: f10d 0106 add.w r1, sp, #6 -1002156a: 2202 movs r2, #2 -1002156c: f7f5 ff50 bl 10017410 -10021570: f506 6046 add.w r0, r6, #3168 ; 0xc60 -10021574: 4639 mov r1, r7 -10021576: f006 fe8d bl 10028294 -1002157a: b110 cbz r0, 10021582 -1002157c: f8d0 3100 ldr.w r3, [r0, #256] ; 0x100 -10021580: e001 b.n 10021586 -10021582: f04f 33ff mov.w r3, #4294967295 -10021586: 612b str r3, [r5, #16] -10021588: f606 1008 addw r0, r6, #2312 ; 0x908 -1002158c: 4621 mov r1, r4 -1002158e: f7fa fffe bl 1001c58e -10021592: b003 add sp, #12 -10021594: bdf0 pop {r4, r5, r6, r7, pc} - -10021596 : -10021596: b570 push {r4, r5, r6, lr} -10021598: 4604 mov r4, r0 -1002159a: 3098 adds r0, #152 ; 0x98 -1002159c: 460d mov r5, r1 -1002159e: 4616 mov r6, r2 -100215a0: f007 f8de bl 10028760 -100215a4: 2206 movs r2, #6 -100215a6: 4601 mov r1, r0 -100215a8: 4628 mov r0, r5 -100215aa: f7f5 ff39 bl 10017420 -100215ae: b1d8 cbz r0, 100215e8 -100215b0: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -100215b4: f003 0203 and.w r2, r3, #3 -100215b8: 2a02 cmp r2, #2 -100215ba: d115 bne.n 100215e8 -100215bc: f413 4280 ands.w r2, r3, #16384 ; 0x4000 -100215c0: d008 beq.n 100215d4 -100215c2: 2300 movs r3, #0 -100215c4: f8c4 3680 str.w r3, [r4, #1664] ; 0x680 -100215c8: 4620 mov r0, r4 -100215ca: 4629 mov r1, r5 -100215cc: 4632 mov r2, r6 -100215ce: f7ff ff99 bl 10021504 -100215d2: e009 b.n 100215e8 -100215d4: f413 5f1c tst.w r3, #9984 ; 0x2700 -100215d8: d006 beq.n 100215e8 -100215da: f8c4 2680 str.w r2, [r4, #1664] ; 0x680 -100215de: 4620 mov r0, r4 -100215e0: f06f 0101 mvn.w r1, #1 -100215e4: f7ff fe56 bl 10021294 -100215e8: 2001 movs r0, #1 -100215ea: bd70 pop {r4, r5, r6, pc} - -100215ec : -100215ec: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -100215f0: 4b63 ldr r3, [pc, #396] ; (10021780 ) -100215f2: 4680 mov r8, r0 -100215f4: 681b ldr r3, [r3, #0] -100215f6: 460c mov r4, r1 -100215f8: f8d1 9078 ldr.w r9, [r1, #120] ; 0x78 -100215fc: f8d1 b070 ldr.w fp, [r1, #112] ; 0x70 -10021600: f100 0598 add.w r5, r0, #152 ; 0x98 -10021604: b133 cbz r3, 10021614 -10021606: f1ab 0124 sub.w r1, fp, #36 ; 0x24 -1002160a: f109 0024 add.w r0, r9, #36 ; 0x24 -1002160e: b289 uxth r1, r1 -10021610: 2280 movs r2, #128 ; 0x80 -10021612: 4798 blx r3 -10021614: f8d8 3648 ldr.w r3, [r8, #1608] ; 0x648 -10021618: 2b03 cmp r3, #3 -1002161a: d104 bne.n 10021626 -1002161c: 4640 mov r0, r8 -1002161e: 4621 mov r1, r4 -10021620: f7ff fc8a bl 10020f38 -10021624: e0a8 b.n 10021778 -10021626: 4628 mov r0, r5 -10021628: f007 f89a bl 10028760 -1002162c: 2206 movs r2, #6 -1002162e: 4601 mov r1, r0 -10021630: f109 0010 add.w r0, r9, #16 -10021634: f7f5 fef4 bl 10017420 -10021638: 2800 cmp r0, #0 -1002163a: f000 809d beq.w 10021778 -1002163e: f8d8 2680 ldr.w r2, [r8, #1664] ; 0x680 -10021642: 05d3 lsls r3, r2, #23 -10021644: d511 bpl.n 1002166a -10021646: f1ab 0118 sub.w r1, fp, #24 -1002164a: f109 0018 add.w r0, r9, #24 -1002164e: f007 fcb3 bl 10028fb8 -10021652: 4649 mov r1, r9 -10021654: f888 072e strb.w r0, [r8, #1838] ; 0x72e -10021658: 465a mov r2, fp -1002165a: f508 60a2 add.w r0, r8, #1296 ; 0x510 -1002165e: f007 fdf7 bl 10029250 -10021662: 4640 mov r0, r8 -10021664: f7ff f9a8 bl 100209b8 -10021668: e086 b.n 10021778 -1002166a: f244 0303 movw r3, #16387 ; 0x4003 -1002166e: 4013 ands r3, r2 -10021670: f244 0202 movw r2, #16386 ; 0x4002 -10021674: 4293 cmp r3, r2 -10021676: d17f bne.n 10021778 -10021678: f508 6046 add.w r0, r8, #3168 ; 0xc60 -1002167c: f109 010a add.w r1, r9, #10 -10021680: f006 fe08 bl 10028294 -10021684: 4682 mov sl, r0 -10021686: 2800 cmp r0, #0 -10021688: d076 beq.n 10021778 -1002168a: 4649 mov r1, r9 -1002168c: 465a mov r2, fp -1002168e: 4640 mov r0, r8 -10021690: f007 fa63 bl 10028b5a -10021694: 4b3b ldr r3, [pc, #236] ; (10021784 ) -10021696: 7819 ldrb r1, [r3, #0] -10021698: 461a mov r2, r3 -1002169a: b919 cbnz r1, 100216a4 -1002169c: b910 cbnz r0, 100216a4 -1002169e: 2201 movs r2, #1 -100216a0: 701a strb r2, [r3, #0] -100216a2: e069 b.n 10021778 -100216a4: 2300 movs r3, #0 -100216a6: 7013 strb r3, [r2, #0] -100216a8: 2800 cmp r0, #0 -100216aa: d135 bne.n 10021718 -100216ac: 4b36 ldr r3, [pc, #216] ; (10021788 ) -100216ae: 681b ldr r3, [r3, #0] -100216b0: b13b cbz r3, 100216c2 -100216b2: 4836 ldr r0, [pc, #216] ; (1002178c ) -100216b4: f7f9 fa54 bl 1001ab60 -100216b8: 4b35 ldr r3, [pc, #212] ; (10021790 ) -100216ba: f8d3 0128 ldr.w r0, [r3, #296] ; 0x128 -100216be: f7f9 fa4f bl 1001ab60 -100216c2: 4640 mov r0, r8 -100216c4: f108 019c add.w r1, r8, #156 ; 0x9c -100216c8: f64f 72ff movw r2, #65535 ; 0xffff -100216cc: f7ff ff63 bl 10021596 -100216d0: f898 38f9 ldrb.w r3, [r8, #2297] ; 0x8f9 -100216d4: 2b00 cmp r3, #0 -100216d6: d04f beq.n 10021778 -100216d8: f898 286e ldrb.w r2, [r8, #2158] ; 0x86e -100216dc: f898 386d ldrb.w r3, [r8, #2157] ; 0x86d -100216e0: 429a cmp r2, r3 -100216e2: d214 bcs.n 1002170e -100216e4: 4b2b ldr r3, [pc, #172] ; (10021794 ) -100216e6: 781a ldrb r2, [r3, #0] -100216e8: 2a00 cmp r2, #0 -100216ea: d145 bne.n 10021778 -100216ec: 2201 movs r2, #1 -100216ee: 701a strb r2, [r3, #0] -100216f0: f8b8 3870 ldrh.w r3, [r8, #2160] ; 0x870 -100216f4: f44f 717a mov.w r1, #1000 ; 0x3e8 -100216f8: 4359 muls r1, r3 -100216fa: f508 6006 add.w r0, r8, #2144 ; 0x860 -100216fe: f015 fb8b bl 10036e18 -10021702: f898 386e ldrb.w r3, [r8, #2158] ; 0x86e -10021706: 3301 adds r3, #1 -10021708: f888 386e strb.w r3, [r8, #2158] ; 0x86e -1002170c: e034 b.n 10021778 -1002170e: 4640 mov r0, r8 -10021710: 4921 ldr r1, [pc, #132] ; (10021798 ) -10021712: f012 fa12 bl 10033b3a -10021716: e02f b.n 10021778 -10021718: f241 036c movw r3, #4204 ; 0x106c -1002171c: f858 3003 ldr.w r3, [r8, r3] -10021720: 2b04 cmp r3, #4 -10021722: d001 beq.n 10021728 -10021724: 2b07 cmp r3, #7 -10021726: d102 bne.n 1002172e -10021728: f015 fd70 bl 1003720c -1002172c: b128 cbz r0, 1002173a -1002172e: 2100 movs r1, #0 -10021730: 200f movs r0, #15 -10021732: 460a mov r2, r1 -10021734: 460b mov r3, r1 -10021736: f7eb ff1d bl 1000d574 -1002173a: f50a 72c4 add.w r2, sl, #392 ; 0x188 -1002173e: f50a 73c0 add.w r3, sl, #384 ; 0x180 -10021742: e9d2 4500 ldrd r4, r5, [r2] -10021746: e9d3 2300 ldrd r2, r3, [r3] -1002174a: 18a4 adds r4, r4, r2 -1002174c: eb45 0503 adc.w r5, r5, r3 -10021750: f50a 73c8 add.w r3, sl, #400 ; 0x190 -10021754: e9d3 2300 ldrd r2, r3, [r3] -10021758: 18a4 adds r4, r4, r2 -1002175a: eb45 0503 adc.w r5, r5, r3 -1002175e: 260f movs r6, #15 -10021760: 2700 movs r7, #0 -10021762: 4034 ands r4, r6 -10021764: 403d ands r5, r7 -10021766: ea54 0305 orrs.w r3, r4, r5 -1002176a: d105 bne.n 10021778 -1002176c: 4640 mov r0, r8 -1002176e: 4649 mov r1, r9 -10021770: 465a mov r2, fp -10021772: 4653 mov r3, sl -10021774: f007 faf9 bl 10028d6a -10021778: 2001 movs r0, #1 -1002177a: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -1002177e: bf00 nop -10021780: 1004dd74 .word 0x1004dd74 -10021784: 1004bb05 .word 0x1004bb05 -10021788: 10044ec0 .word 0x10044ec0 -1002178c: 10042939 .word 0x10042939 -10021790: 10043a4c .word 0x10043a4c -10021794: 1004baf0 .word 0x1004baf0 -10021798: 1003fc3d .word 0x1003fc3d - -1002179c : -1002179c: b5f0 push {r4, r5, r6, r7, lr} -1002179e: 4604 mov r4, r0 -100217a0: b087 sub sp, #28 -100217a2: 3098 adds r0, #152 ; 0x98 -100217a4: 6f8d ldr r5, [r1, #120] ; 0x78 -100217a6: f006 ffdb bl 10028760 -100217aa: f105 0710 add.w r7, r5, #16 -100217ae: 4601 mov r1, r0 -100217b0: 2206 movs r2, #6 -100217b2: 4638 mov r0, r7 -100217b4: f7f5 fe34 bl 10017420 -100217b8: 2800 cmp r0, #0 -100217ba: f000 8093 beq.w 100218e4 -100217be: 6923 ldr r3, [r4, #16] -100217c0: 8b2e ldrh r6, [r5, #24] -100217c2: f013 0f10 tst.w r3, #16 -100217c6: 4b49 ldr r3, [pc, #292] ; (100218ec ) -100217c8: d150 bne.n 1002186c -100217ca: 681b ldr r3, [r3, #0] -100217cc: b193 cbz r3, 100217f4 -100217ce: 4848 ldr r0, [pc, #288] ; (100218f0 ) -100217d0: f7f9 f9c6 bl 1001ab60 -100217d4: 7ca9 ldrb r1, [r5, #18] -100217d6: 7c2a ldrb r2, [r5, #16] -100217d8: 7c6b ldrb r3, [r5, #17] -100217da: 9100 str r1, [sp, #0] -100217dc: 7ce9 ldrb r1, [r5, #19] -100217de: 9101 str r1, [sp, #4] -100217e0: 7d29 ldrb r1, [r5, #20] -100217e2: 9102 str r1, [sp, #8] -100217e4: 7d69 ldrb r1, [r5, #21] -100217e6: 9103 str r1, [sp, #12] -100217e8: 4942 ldr r1, [pc, #264] ; (100218f4 ) -100217ea: f8d1 0144 ldr.w r0, [r1, #324] ; 0x144 -100217ee: 4631 mov r1, r6 -100217f0: f7f9 f9b6 bl 1001ab60 -100217f4: 4620 mov r0, r4 -100217f6: 4639 mov r1, r7 -100217f8: 4632 mov r2, r6 -100217fa: f7ff fecc bl 10021596 -100217fe: 2300 movs r3, #0 -10021800: f884 3488 strb.w r3, [r4, #1160] ; 0x488 -10021804: f894 38f9 ldrb.w r3, [r4, #2297] ; 0x8f9 -10021808: b323 cbz r3, 10021854 -1002180a: f894 286e ldrb.w r2, [r4, #2158] ; 0x86e -1002180e: f894 386d ldrb.w r3, [r4, #2157] ; 0x86d -10021812: 429a cmp r2, r3 -10021814: d21a bcs.n 1002184c -10021816: f894 386c ldrb.w r3, [r4, #2156] ; 0x86c -1002181a: b9bb cbnz r3, 1002184c -1002181c: f241 3385 movw r3, #4997 ; 0x1385 -10021820: 5ce3 ldrb r3, [r4, r3] -10021822: b99b cbnz r3, 1002184c -10021824: 4b34 ldr r3, [pc, #208] ; (100218f8 ) -10021826: 781a ldrb r2, [r3, #0] -10021828: b9a2 cbnz r2, 10021854 -1002182a: 2201 movs r2, #1 -1002182c: 701a strb r2, [r3, #0] -1002182e: f8b4 3870 ldrh.w r3, [r4, #2160] ; 0x870 -10021832: f44f 717a mov.w r1, #1000 ; 0x3e8 -10021836: 4359 muls r1, r3 -10021838: f504 6006 add.w r0, r4, #2144 ; 0x860 -1002183c: f015 faec bl 10036e18 -10021840: f894 386e ldrb.w r3, [r4, #2158] ; 0x86e -10021844: 3301 adds r3, #1 -10021846: f884 386e strb.w r3, [r4, #2158] ; 0x86e -1002184a: e003 b.n 10021854 -1002184c: 4620 mov r0, r4 -1002184e: 492b ldr r1, [pc, #172] ; (100218fc ) -10021850: f012 f973 bl 10033b3a -10021854: f241 3385 movw r3, #4997 ; 0x1385 -10021858: 5ce3 ldrb r3, [r4, r3] -1002185a: 2b00 cmp r3, #0 -1002185c: d042 beq.n 100218e4 -1002185e: 2100 movs r1, #0 -10021860: 460a mov r2, r1 -10021862: 460b mov r3, r1 -10021864: 200b movs r0, #11 -10021866: f7eb fe85 bl 1000d574 -1002186a: e03b b.n 100218e4 -1002186c: 681b ldr r3, [r3, #0] -1002186e: b193 cbz r3, 10021896 -10021870: 481f ldr r0, [pc, #124] ; (100218f0 ) -10021872: f7f9 f975 bl 1001ab60 -10021876: 7b29 ldrb r1, [r5, #12] -10021878: 7aaa ldrb r2, [r5, #10] -1002187a: 7aeb ldrb r3, [r5, #11] -1002187c: 9100 str r1, [sp, #0] -1002187e: 7b69 ldrb r1, [r5, #13] -10021880: 9101 str r1, [sp, #4] -10021882: 7ba9 ldrb r1, [r5, #14] -10021884: 9102 str r1, [sp, #8] -10021886: 7be9 ldrb r1, [r5, #15] -10021888: 9103 str r1, [sp, #12] -1002188a: 491a ldr r1, [pc, #104] ; (100218f4 ) -1002188c: f8d1 0140 ldr.w r0, [r1, #320] ; 0x140 -10021890: 4631 mov r1, r6 -10021892: f7f9 f965 bl 1001ab60 -10021896: f105 010a add.w r1, r5, #10 -1002189a: f504 6046 add.w r0, r4, #3168 ; 0xc60 -1002189e: f006 fcf9 bl 10028294 -100218a2: 4605 mov r5, r0 -100218a4: b1f0 cbz r0, 100218e4 -100218a6: f604 46d4 addw r6, r4, #3284 ; 0xcd4 -100218aa: 4630 mov r0, r6 -100218ac: a905 add r1, sp, #20 -100218ae: f505 7707 add.w r7, r5, #540 ; 0x21c -100218b2: f7f5 fe89 bl 100175c8 -100218b6: 4638 mov r0, r7 -100218b8: f7f5 fdc5 bl 10017446 -100218bc: b948 cbnz r0, 100218d2 -100218be: 4638 mov r0, r7 -100218c0: f7f5 fdd2 bl 10017468 -100218c4: 4629 mov r1, r5 -100218c6: 4620 mov r0, r4 -100218c8: 2203 movs r2, #3 -100218ca: f7fa f9d8 bl 1001bc7e -100218ce: 4605 mov r5, r0 -100218d0: e000 b.n 100218d4 -100218d2: 2500 movs r5, #0 -100218d4: 4630 mov r0, r6 -100218d6: a905 add r1, sp, #20 -100218d8: f7f5 fe80 bl 100175dc -100218dc: 4620 mov r0, r4 -100218de: 4629 mov r1, r5 -100218e0: f7fa f872 bl 1001b9c8 -100218e4: 2001 movs r0, #1 -100218e6: b007 add sp, #28 -100218e8: bdf0 pop {r4, r5, r6, r7, pc} -100218ea: bf00 nop -100218ec: 10044ec0 .word 0x10044ec0 -100218f0: 10042939 .word 0x10042939 -100218f4: 10043a4c .word 0x10043a4c -100218f8: 1004baf0 .word 0x1004baf0 -100218fc: 1003fc3d .word 0x1003fc3d - -10021900 : -10021900: b5f0 push {r4, r5, r6, r7, lr} -10021902: 4604 mov r4, r0 -10021904: b087 sub sp, #28 -10021906: 3098 adds r0, #152 ; 0x98 -10021908: 6f8d ldr r5, [r1, #120] ; 0x78 -1002190a: f006 ff29 bl 10028760 -1002190e: f105 0710 add.w r7, r5, #16 -10021912: 4601 mov r1, r0 -10021914: 2206 movs r2, #6 -10021916: 4638 mov r0, r7 -10021918: f7f5 fd82 bl 10017420 -1002191c: 2800 cmp r0, #0 -1002191e: f000 809f beq.w 10021a60 -10021922: 6923 ldr r3, [r4, #16] -10021924: 8b2e ldrh r6, [r5, #24] -10021926: f013 0f10 tst.w r3, #16 -1002192a: 4b4f ldr r3, [pc, #316] ; (10021a68 ) -1002192c: d150 bne.n 100219d0 -1002192e: 681b ldr r3, [r3, #0] -10021930: b193 cbz r3, 10021958 -10021932: 484e ldr r0, [pc, #312] ; (10021a6c ) -10021934: f7f9 f914 bl 1001ab60 -10021938: 7ca9 ldrb r1, [r5, #18] -1002193a: 7c2a ldrb r2, [r5, #16] -1002193c: 7c6b ldrb r3, [r5, #17] -1002193e: 9100 str r1, [sp, #0] -10021940: 7ce9 ldrb r1, [r5, #19] -10021942: 9101 str r1, [sp, #4] -10021944: 7d29 ldrb r1, [r5, #20] -10021946: 9102 str r1, [sp, #8] -10021948: 7d69 ldrb r1, [r5, #21] -1002194a: 9103 str r1, [sp, #12] -1002194c: 4948 ldr r1, [pc, #288] ; (10021a70 ) -1002194e: f8d1 014c ldr.w r0, [r1, #332] ; 0x14c -10021952: 4631 mov r1, r6 -10021954: f7f9 f904 bl 1001ab60 -10021958: 4620 mov r0, r4 -1002195a: 4639 mov r1, r7 -1002195c: 4632 mov r2, r6 -1002195e: f7ff fe1a bl 10021596 -10021962: 2300 movs r3, #0 -10021964: f884 3488 strb.w r3, [r4, #1160] ; 0x488 -10021968: f894 38f9 ldrb.w r3, [r4, #2297] ; 0x8f9 -1002196c: b323 cbz r3, 100219b8 -1002196e: f894 286e ldrb.w r2, [r4, #2158] ; 0x86e -10021972: f894 386d ldrb.w r3, [r4, #2157] ; 0x86d -10021976: 429a cmp r2, r3 -10021978: d21a bcs.n 100219b0 -1002197a: f894 386c ldrb.w r3, [r4, #2156] ; 0x86c -1002197e: b9bb cbnz r3, 100219b0 -10021980: f241 3385 movw r3, #4997 ; 0x1385 -10021984: 5ce3 ldrb r3, [r4, r3] -10021986: b99b cbnz r3, 100219b0 -10021988: 4b3a ldr r3, [pc, #232] ; (10021a74 ) -1002198a: 781a ldrb r2, [r3, #0] -1002198c: b9a2 cbnz r2, 100219b8 -1002198e: 2201 movs r2, #1 -10021990: 701a strb r2, [r3, #0] -10021992: f8b4 3870 ldrh.w r3, [r4, #2160] ; 0x870 -10021996: f44f 717a mov.w r1, #1000 ; 0x3e8 -1002199a: 4359 muls r1, r3 -1002199c: f504 6006 add.w r0, r4, #2144 ; 0x860 -100219a0: f015 fa3a bl 10036e18 -100219a4: f894 386e ldrb.w r3, [r4, #2158] ; 0x86e -100219a8: 3301 adds r3, #1 -100219aa: f884 386e strb.w r3, [r4, #2158] ; 0x86e -100219ae: e003 b.n 100219b8 -100219b0: 4620 mov r0, r4 -100219b2: 4931 ldr r1, [pc, #196] ; (10021a78 ) -100219b4: f012 f8c1 bl 10033b3a -100219b8: f241 3385 movw r3, #4997 ; 0x1385 -100219bc: 5ce3 ldrb r3, [r4, r3] -100219be: 2b00 cmp r3, #0 -100219c0: d04e beq.n 10021a60 -100219c2: 2100 movs r1, #0 -100219c4: 460a mov r2, r1 -100219c6: 460b mov r3, r1 -100219c8: 200b movs r0, #11 -100219ca: f7eb fdd3 bl 1000d574 -100219ce: e047 b.n 10021a60 -100219d0: 681b ldr r3, [r3, #0] -100219d2: b193 cbz r3, 100219fa -100219d4: 4825 ldr r0, [pc, #148] ; (10021a6c ) -100219d6: f7f9 f8c3 bl 1001ab60 -100219da: 7b29 ldrb r1, [r5, #12] -100219dc: 7aaa ldrb r2, [r5, #10] -100219de: 7aeb ldrb r3, [r5, #11] -100219e0: 9100 str r1, [sp, #0] -100219e2: 7b69 ldrb r1, [r5, #13] -100219e4: 9101 str r1, [sp, #4] -100219e6: 7ba9 ldrb r1, [r5, #14] -100219e8: 9102 str r1, [sp, #8] -100219ea: 7be9 ldrb r1, [r5, #15] -100219ec: 9103 str r1, [sp, #12] -100219ee: 4920 ldr r1, [pc, #128] ; (10021a70 ) -100219f0: f8d1 0148 ldr.w r0, [r1, #328] ; 0x148 -100219f4: 4631 mov r1, r6 -100219f6: f7f9 f8b3 bl 1001ab60 -100219fa: f105 010a add.w r1, r5, #10 -100219fe: f504 6046 add.w r0, r4, #3168 ; 0xc60 -10021a02: f006 fc47 bl 10028294 -10021a06: 4605 mov r5, r0 -10021a08: b1f0 cbz r0, 10021a48 -10021a0a: f604 46d4 addw r6, r4, #3284 ; 0xcd4 -10021a0e: 4630 mov r0, r6 -10021a10: a905 add r1, sp, #20 -10021a12: f505 7707 add.w r7, r5, #540 ; 0x21c -10021a16: f7f5 fdd7 bl 100175c8 -10021a1a: 4638 mov r0, r7 -10021a1c: f7f5 fd13 bl 10017446 -10021a20: b948 cbnz r0, 10021a36 -10021a22: 4638 mov r0, r7 -10021a24: f7f5 fd20 bl 10017468 -10021a28: 4629 mov r1, r5 -10021a2a: 4620 mov r0, r4 -10021a2c: 2203 movs r2, #3 -10021a2e: f7fa f926 bl 1001bc7e -10021a32: 4605 mov r5, r0 -10021a34: e000 b.n 10021a38 -10021a36: 2500 movs r5, #0 -10021a38: 4630 mov r0, r6 -10021a3a: a905 add r1, sp, #20 -10021a3c: f7f5 fdce bl 100175dc -10021a40: 4620 mov r0, r4 -10021a42: 4629 mov r1, r5 -10021a44: f7f9 ffc0 bl 1001b9c8 -10021a48: f241 3585 movw r5, #4997 ; 0x1385 -10021a4c: 5d63 ldrb r3, [r4, r5] -10021a4e: b13b cbz r3, 10021a60 -10021a50: 2100 movs r1, #0 -10021a52: 460b mov r3, r1 -10021a54: 200b movs r0, #11 -10021a56: 460a mov r2, r1 -10021a58: f7eb fd8c bl 1000d574 -10021a5c: 2300 movs r3, #0 -10021a5e: 5563 strb r3, [r4, r5] -10021a60: 2001 movs r0, #1 -10021a62: b007 add sp, #28 -10021a64: bdf0 pop {r4, r5, r6, r7, pc} -10021a66: bf00 nop -10021a68: 10044ec0 .word 0x10044ec0 -10021a6c: 10042939 .word 0x10042939 -10021a70: 10043a4c .word 0x10043a4c -10021a74: 1004baf0 .word 0x1004baf0 -10021a78: 1003fc3d .word 0x1003fc3d - -10021a7c : -10021a7c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10021a80: 4606 mov r6, r0 -10021a82: 2020 movs r0, #32 -10021a84: 4688 mov r8, r1 -10021a86: 4617 mov r7, r2 -10021a88: f7f5 fe92 bl 100177b0 -10021a8c: 4604 mov r4, r0 -10021a8e: b368 cbz r0, 10021aec -10021a90: 2014 movs r0, #20 -10021a92: f7f5 fe8d bl 100177b0 -10021a96: 4605 mov r5, r0 -10021a98: b928 cbnz r0, 10021aa6 -10021a9a: 4620 mov r0, r4 -10021a9c: 2120 movs r1, #32 -10021a9e: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -10021aa2: f7f5 bcb2 b.w 1001740a -10021aa6: f104 0018 add.w r0, r4, #24 -10021aaa: f7f5 fcc9 bl 10017440 -10021aae: 2338 movs r3, #56 ; 0x38 -10021ab0: 80a3 strh r3, [r4, #4] -10021ab2: 2314 movs r3, #20 -10021ab4: 60e3 str r3, [r4, #12] -10021ab6: 2300 movs r3, #0 -10021ab8: 6123 str r3, [r4, #16] -10021aba: 6163 str r3, [r4, #20] -10021abc: 230c movs r3, #12 -10021abe: 60a5 str r5, [r4, #8] -10021ac0: 802b strh r3, [r5, #0] -10021ac2: 230b movs r3, #11 -10021ac4: 70ab strb r3, [r5, #2] -10021ac6: f506 60a3 add.w r0, r6, #1304 ; 0x518 -10021aca: f7f5 fdf3 bl 100176b4 -10021ace: 4641 mov r1, r8 -10021ad0: 70e8 strb r0, [r5, #3] -10021ad2: 2206 movs r2, #6 -10021ad4: f105 0008 add.w r0, r5, #8 -10021ad8: f7f5 fc9a bl 10017410 -10021adc: 612f str r7, [r5, #16] -10021ade: f606 1008 addw r0, r6, #2312 ; 0x908 -10021ae2: 4621 mov r1, r4 -10021ae4: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -10021ae8: f7fa bd51 b.w 1001c58e -10021aec: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -10021af0 : -10021af0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10021af4: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 -10021af8: 6f8f ldr r7, [r1, #120] ; 0x78 -10021afa: f003 0303 and.w r3, r3, #3 -10021afe: 6f09 ldr r1, [r1, #112] ; 0x70 -10021b00: b0bd sub sp, #244 ; 0xf4 -10021b02: 2b03 cmp r3, #3 -10021b04: 4605 mov r5, r0 -10021b06: 9104 str r1, [sp, #16] -10021b08: d007 beq.n 10021b1a -10021b0a: f8d5 3680 ldr.w r3, [r5, #1664] ; 0x680 -10021b0e: f003 0303 and.w r3, r3, #3 -10021b12: 2b03 cmp r3, #3 -10021b14: f040 82e5 bne.w 100220e2 -10021b18: e006 b.n 10021b28 -10021b1a: f44f 6108 mov.w r1, #2176 ; 0x880 -10021b1e: f7fc fd25 bl 1001e56c -10021b22: 2800 cmp r0, #0 -10021b24: d0f1 beq.n 10021b0a -10021b26: e2c4 b.n 100220b2 -10021b28: f8b7 a000 ldrh.w sl, [r7] -10021b2c: 9a04 ldr r2, [sp, #16] -10021b2e: f01a 0afc ands.w sl, sl, #252 ; 0xfc -10021b32: bf14 ite ne -10021b34: f04f 090a movne.w r9, #10 -10021b38: f04f 0904 moveq.w r9, #4 -10021b3c: f109 0818 add.w r8, r9, #24 -10021b40: 4542 cmp r2, r8 -10021b42: f0c0 82ce bcc.w 100220e2 -10021b46: f107 060a add.w r6, r7, #10 -10021b4a: f505 6046 add.w r0, r5, #3168 ; 0xc60 -10021b4e: 4631 mov r1, r6 -10021b50: f006 fba0 bl 10028294 -10021b54: 4604 mov r4, r0 -10021b56: 2800 cmp r0, #0 -10021b58: f000 82ad beq.w 100220b6 -10021b5c: 7e3b ldrb r3, [r7, #24] -10021b5e: 7e79 ldrb r1, [r7, #25] -10021b60: 9a04 ldr r2, [sp, #16] -10021b62: ea43 2101 orr.w r1, r3, r1, lsl #8 -10021b66: f1a2 0318 sub.w r3, r2, #24 -10021b6a: ebc9 0903 rsb r9, r9, r3 -10021b6e: 4b9a ldr r3, [pc, #616] ; (10021dd8 ) -10021b70: eb07 0b08 add.w fp, r7, r8 -10021b74: 681b ldr r3, [r3, #0] -10021b76: b14b cbz r3, 10021b8c -10021b78: 4898 ldr r0, [pc, #608] ; (10021ddc ) -10021b7a: 9103 str r1, [sp, #12] -10021b7c: f7f8 fff0 bl 1001ab60 -10021b80: 4b97 ldr r3, [pc, #604] ; (10021de0 ) -10021b82: f8d3 0138 ldr.w r0, [r3, #312] ; 0x138 -10021b86: f7f8 ffeb bl 1001ab60 -10021b8a: 9903 ldr r1, [sp, #12] -10021b8c: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 -10021b90: 0558 lsls r0, r3, #21 -10021b92: d405 bmi.n 10021ba0 -10021b94: 045a lsls r2, r3, #17 -10021b96: f140 828e bpl.w 100220b6 -10021b9a: f423 4380 bic.w r3, r3, #16384 ; 0x4000 -10021b9e: e001 b.n 10021ba4 -10021ba0: f423 6380 bic.w r3, r3, #1024 ; 0x400 -10021ba4: f443 5300 orr.w r3, r3, #8192 ; 0x2000 -10021ba8: f8c4 30f8 str.w r3, [r4, #248] ; 0xf8 -10021bac: f8a4 12c4 strh.w r1, [r4, #708] ; 0x2c4 -10021bb0: 4658 mov r0, fp -10021bb2: 4649 mov r1, r9 -10021bb4: aa0e add r2, sp, #56 ; 0x38 -10021bb6: 2301 movs r3, #1 -10021bb8: f01c fe56 bl 1003e868 <__rtw_ieee802_11_parse_elems_veneer> -10021bbc: 3001 adds r0, #1 -10021bbe: f000 8292 beq.w 100220e6 -10021bc2: 9b0e ldr r3, [sp, #56] ; 0x38 -10021bc4: 2b00 cmp r3, #0 -10021bc6: f000 828e beq.w 100220e6 -10021bca: 44b8 add r8, r7 -10021bcc: 464b mov r3, r9 -10021bce: 4640 mov r0, r8 -10021bd0: 2100 movs r1, #0 -10021bd2: aa07 add r2, sp, #28 -10021bd4: f01c fe68 bl 1003e8a8 <__rtw_get_ie_veneer> -10021bd8: 9b07 ldr r3, [sp, #28] -10021bda: 4606 mov r6, r0 -10021bdc: 2b00 cmp r3, #0 -10021bde: f000 8282 beq.w 100220e6 -10021be2: 3002 adds r0, #2 -10021be4: f105 01a8 add.w r1, r5, #168 ; 0xa8 -10021be8: f8d5 20a4 ldr.w r2, [r5, #164] ; 0xa4 -10021bec: f7f5 fc18 bl 10017420 -10021bf0: b120 cbz r0, 10021bfc -10021bf2: f1d6 0101 rsbs r1, r6, #1 -10021bf6: bf38 it cc -10021bf8: 2100 movcc r1, #0 -10021bfa: e000 b.n 10021bfe -10021bfc: 2101 movs r1, #1 -10021bfe: f8d5 20a4 ldr.w r2, [r5, #164] ; 0xa4 -10021c02: 9b07 ldr r3, [sp, #28] -10021c04: 4293 cmp r3, r2 -10021c06: f040 826e bne.w 100220e6 -10021c0a: 2900 cmp r1, #0 -10021c0c: f040 826b bne.w 100220e6 -10021c10: 2101 movs r1, #1 -10021c12: 4640 mov r0, r8 -10021c14: aa07 add r2, sp, #28 -10021c16: 464b mov r3, r9 -10021c18: f01c fe46 bl 1003e8a8 <__rtw_get_ie_veneer> -10021c1c: 4601 mov r1, r0 -10021c1e: a80a add r0, sp, #40 ; 0x28 -10021c20: b931 cbnz r1, 10021c30 -10021c22: f105 01fc add.w r1, r5, #252 ; 0xfc -10021c26: 2210 movs r2, #16 -10021c28: f7f5 fbf2 bl 10017410 -10021c2c: 2610 movs r6, #16 -10021c2e: e016 b.n 10021c5e -10021c30: 3102 adds r1, #2 -10021c32: 9a07 ldr r2, [sp, #28] -10021c34: f7f5 fbec bl 10017410 -10021c38: 2132 movs r1, #50 ; 0x32 -10021c3a: 4640 mov r0, r8 -10021c3c: aa07 add r2, sp, #28 -10021c3e: 464b mov r3, r9 -10021c40: 9e07 ldr r6, [sp, #28] -10021c42: f01c fe31 bl 1003e8a8 <__rtw_get_ie_veneer> -10021c46: 4601 mov r1, r0 -10021c48: b148 cbz r0, 10021c5e -10021c4a: 2e10 cmp r6, #16 -10021c4c: d807 bhi.n 10021c5e -10021c4e: a80a add r0, sp, #40 ; 0x28 -10021c50: 4430 add r0, r6 -10021c52: 3102 adds r1, #2 -10021c54: 9a07 ldr r2, [sp, #28] -10021c56: f7f5 fbdb bl 10017410 -10021c5a: 9b07 ldr r3, [sp, #28] -10021c5c: 441e add r6, r3 -10021c5e: f504 7bac add.w fp, r4, #344 ; 0x158 -10021c62: 4632 mov r2, r6 -10021c64: 4658 mov r0, fp -10021c66: a90a add r1, sp, #40 ; 0x28 -10021c68: f8c4 6168 str.w r6, [r4, #360] ; 0x168 -10021c6c: f7f5 fbd0 bl 10017410 -10021c70: 4658 mov r0, fp -10021c72: f8d4 1168 ldr.w r1, [r4, #360] ; 0x168 -10021c76: f006 fc97 bl 100285a8 -10021c7a: 2300 movs r3, #0 -10021c7c: f204 22e5 addw r2, r4, #741 ; 0x2e5 -10021c80: f8c4 32cc str.w r3, [r4, #716] ; 0x2cc -10021c84: f8c4 32d0 str.w r3, [r4, #720] ; 0x2d0 -10021c88: f8c4 32d4 str.w r3, [r4, #724] ; 0x2d4 -10021c8c: f8c4 32d8 str.w r3, [r4, #728] ; 0x2d8 -10021c90: f8c4 32dc str.w r3, [r4, #732] ; 0x2dc -10021c94: f8c4 32e0 str.w r3, [r4, #736] ; 0x2e0 -10021c98: 9205 str r2, [sp, #20] -10021c9a: 4610 mov r0, r2 -10021c9c: 4619 mov r1, r3 -10021c9e: 2220 movs r2, #32 -10021ca0: 9303 str r3, [sp, #12] -10021ca2: f7f5 fbc5 bl 10017430 -10021ca6: f8d5 2e44 ldr.w r2, [r5, #3652] ; 0xe44 -10021caa: 9b03 ldr r3, [sp, #12] -10021cac: f012 0f02 tst.w r2, #2 -10021cb0: d025 beq.n 10021cfe -10021cb2: 9e24 ldr r6, [sp, #144] ; 0x90 -10021cb4: b31e cbz r6, 10021cfe -10021cb6: f89d b094 ldrb.w fp, [sp, #148] ; 0x94 -10021cba: 9308 str r3, [sp, #32] -10021cbc: 9309 str r3, [sp, #36] ; 0x24 -10021cbe: 9300 str r3, [sp, #0] -10021cc0: 1eb0 subs r0, r6, #2 -10021cc2: f10b 0102 add.w r1, fp, #2 -10021cc6: aa08 add r2, sp, #32 -10021cc8: ab09 add r3, sp, #36 ; 0x24 -10021cca: f01c fdbd bl 1003e848 <__rtw_parse_wpa2_ie_veneer> -10021cce: 2801 cmp r0, #1 -10021cd0: f040 81f7 bne.w 100220c2 -10021cd4: f8d4 32d0 ldr.w r3, [r4, #720] ; 0x2d0 -10021cd8: f8c4 02cc str.w r0, [r4, #716] ; 0x2cc -10021cdc: f043 0302 orr.w r3, r3, #2 -10021ce0: f8c4 32d0 str.w r3, [r4, #720] ; 0x2d0 -10021ce4: 9a08 ldr r2, [sp, #32] -10021ce6: f8d5 3e4c ldr.w r3, [r5, #3660] ; 0xe4c -10021cea: 401a ands r2, r3 -10021cec: f8c4 22d8 str.w r2, [r4, #728] ; 0x2d8 -10021cf0: f8d5 3e54 ldr.w r3, [r5, #3668] ; 0xe54 -10021cf4: 9909 ldr r1, [sp, #36] ; 0x24 -10021cf6: 400b ands r3, r1 -10021cf8: f8c4 32e0 str.w r3, [r4, #736] ; 0x2e0 -10021cfc: e029 b.n 10021d52 -10021cfe: f012 0c01 ands.w ip, r2, #1 -10021d02: f04f 0300 mov.w r3, #0 -10021d06: d02f beq.n 10021d68 -10021d08: 9e22 ldr r6, [sp, #136] ; 0x88 -10021d0a: b386 cbz r6, 10021d6e -10021d0c: f89d b08c ldrb.w fp, [sp, #140] ; 0x8c -10021d10: 9308 str r3, [sp, #32] -10021d12: 9309 str r3, [sp, #36] ; 0x24 -10021d14: 9300 str r3, [sp, #0] -10021d16: 1eb0 subs r0, r6, #2 -10021d18: f10b 0102 add.w r1, fp, #2 -10021d1c: aa08 add r2, sp, #32 -10021d1e: ab09 add r3, sp, #36 ; 0x24 -10021d20: f01c fd9e bl 1003e860 <__rtw_parse_wpa_ie_veneer> -10021d24: 2801 cmp r0, #1 -10021d26: f040 81cc bne.w 100220c2 -10021d2a: f8d4 32d0 ldr.w r3, [r4, #720] ; 0x2d0 -10021d2e: f8c4 02cc str.w r0, [r4, #716] ; 0x2cc -10021d32: f043 0301 orr.w r3, r3, #1 -10021d36: f8c4 32d0 str.w r3, [r4, #720] ; 0x2d0 -10021d3a: 9a08 ldr r2, [sp, #32] -10021d3c: f8d5 3e48 ldr.w r3, [r5, #3656] ; 0xe48 -10021d40: 401a ands r2, r3 -10021d42: f8c4 22d4 str.w r2, [r4, #724] ; 0x2d4 -10021d46: f8d5 3e50 ldr.w r3, [r5, #3664] ; 0xe50 -10021d4a: 9909 ldr r1, [sp, #36] ; 0x24 -10021d4c: 400b ands r3, r1 -10021d4e: f8c4 32dc str.w r3, [r4, #732] ; 0x2dc -10021d52: 2a00 cmp r2, #0 -10021d54: bf14 ite ne -10021d56: 2100 movne r1, #0 -10021d58: 2129 moveq r1, #41 ; 0x29 -10021d5a: b90b cbnz r3, 10021d60 -10021d5c: 212a movs r1, #42 ; 0x2a -10021d5e: e1b3 b.n 100220c8 -10021d60: 2900 cmp r1, #0 -10021d62: f040 81b1 bne.w 100220c8 -10021d66: e003 b.n 10021d70 -10021d68: 46e3 mov fp, ip -10021d6a: 4666 mov r6, ip -10021d6c: e000 b.n 10021d70 -10021d6e: 46b3 mov fp, r6 -10021d70: f8d4 32c8 ldr.w r3, [r4, #712] ; 0x2c8 -10021d74: f8d5 2e44 ldr.w r2, [r5, #3652] ; 0xe44 -10021d78: f423 5340 bic.w r3, r3, #12288 ; 0x3000 -10021d7c: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 -10021d80: bb06 cbnz r6, 10021dc4 -10021d82: 992a ldr r1, [sp, #168] ; 0xa8 -10021d84: b111 cbz r1, 10021d8c -10021d86: f443 5380 orr.w r3, r3, #4096 ; 0x1000 -10021d8a: e001 b.n 10021d90 -10021d8c: f443 5300 orr.w r3, r3, #8192 ; 0x2000 -10021d90: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 -10021d94: b37a cbz r2, 10021df6 -10021d96: f8d4 32c8 ldr.w r3, [r4, #712] ; 0x2c8 -10021d9a: f413 5f40 tst.w r3, #12288 ; 0x3000 -10021d9e: d02a beq.n 10021df6 -10021da0: f8d5 04c4 ldr.w r0, [r5, #1220] ; 0x4c4 -10021da4: b338 cbz r0, 10021df6 -10021da6: 2200 movs r2, #0 -10021da8: ab3c add r3, sp, #240 ; 0xf0 -10021daa: f803 2dcc strb.w r2, [r3, #-204]! -10021dae: f8d5 14d0 ldr.w r1, [r5, #1232] ; 0x4d0 -10021db2: 9200 str r2, [sp, #0] -10021db4: f241 0241 movw r2, #4161 ; 0x1041 -10021db8: f01c fd96 bl 1003e8e8 <__rtw_get_wps_attr_content_veneer> -10021dbc: f89d 3024 ldrb.w r3, [sp, #36] ; 0x24 -10021dc0: b9cb cbnz r3, 10021df6 -10021dc2: e180 b.n 100220c6 -10021dc4: 2a00 cmp r2, #0 -10021dc6: f000 817c beq.w 100220c2 -10021dca: 9a2a ldr r2, [sp, #168] ; 0xa8 -10021dcc: b152 cbz r2, 10021de4 -10021dce: f443 5380 orr.w r3, r3, #4096 ; 0x1000 -10021dd2: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 -10021dd6: e00e b.n 10021df6 -10021dd8: 10044ec0 .word 0x10044ec0 -10021ddc: 10042939 .word 0x10042939 -10021de0: 10043a4c .word 0x10043a4c -10021de4: f10b 0202 add.w r2, fp, #2 -10021de8: 9805 ldr r0, [sp, #20] -10021dea: 1eb1 subs r1, r6, #2 -10021dec: 2a20 cmp r2, #32 -10021dee: bf28 it cs -10021df0: 2220 movcs r2, #32 -10021df2: f7f5 fb0d bl 10017410 -10021df6: f8d4 32c8 ldr.w r3, [r4, #712] ; 0x2c8 -10021dfa: 2201 movs r2, #1 -10021dfc: f423 7300 bic.w r3, r3, #512 ; 0x200 -10021e00: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 -10021e04: 2300 movs r3, #0 -10021e06: f884 3310 strb.w r3, [r4, #784] ; 0x310 -10021e0a: f884 2316 strb.w r2, [r4, #790] ; 0x316 -10021e0e: f884 3315 strb.w r3, [r4, #789] ; 0x315 -10021e12: f884 3314 strb.w r3, [r4, #788] ; 0x314 -10021e16: f884 3313 strb.w r3, [r4, #787] ; 0x313 -10021e1a: f884 3312 strb.w r3, [r4, #786] ; 0x312 -10021e1e: f8d5 244c ldr.w r2, [r5, #1100] ; 0x44c -10021e22: f8c4 3104 str.w r3, [r4, #260] ; 0x104 -10021e26: 2a00 cmp r2, #0 -10021e28: d058 beq.n 10021edc -10021e2a: 9307 str r3, [sp, #28] -10021e2c: 4640 mov r0, r8 -10021e2e: 21dd movs r1, #221 ; 0xdd -10021e30: aa07 add r2, sp, #28 -10021e32: 464b mov r3, r9 -10021e34: f01c fd38 bl 1003e8a8 <__rtw_get_ie_veneer> -10021e38: 4606 mov r6, r0 -10021e3a: 2800 cmp r0, #0 -10021e3c: d04e beq.n 10021edc -10021e3e: 3002 adds r0, #2 -10021e40: 49ab ldr r1, [pc, #684] ; (100220f0 ) -10021e42: 2206 movs r2, #6 -10021e44: f7f5 faec bl 10017420 -10021e48: 2800 cmp r0, #0 -10021e4a: d042 beq.n 10021ed2 -10021e4c: f8d4 32c8 ldr.w r3, [r4, #712] ; 0x2c8 -10021e50: 2101 movs r1, #1 -10021e52: f443 7300 orr.w r3, r3, #512 ; 0x200 -10021e56: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 -10021e5a: f8c4 1104 str.w r1, [r4, #260] ; 0x104 -10021e5e: 7a33 ldrb r3, [r6, #8] -10021e60: f3c3 1241 ubfx r2, r3, #5, #2 -10021e64: f884 2311 strb.w r2, [r4, #785] ; 0x311 -10021e68: f003 020f and.w r2, r3, #15 -10021e6c: 2a0f cmp r2, #15 -10021e6e: f884 3310 strb.w r3, [r4, #784] ; 0x310 -10021e72: d003 beq.n 10021e7c -10021e74: f884 1316 strb.w r1, [r4, #790] ; 0x316 -10021e78: b382 cbz r2, 10021edc -10021e7a: e002 b.n 10021e82 -10021e7c: 2200 movs r2, #0 -10021e7e: f884 2316 strb.w r2, [r4, #790] ; 0x316 -10021e82: f013 0201 ands.w r2, r3, #1 -10021e86: bf18 it ne -10021e88: 2203 movne r2, #3 -10021e8a: f884 2315 strb.w r2, [r4, #789] ; 0x315 -10021e8e: f003 0202 and.w r2, r3, #2 -10021e92: f002 01ff and.w r1, r2, #255 ; 0xff -10021e96: b11a cbz r2, 10021ea0 -10021e98: 2203 movs r2, #3 -10021e9a: f884 2314 strb.w r2, [r4, #788] ; 0x314 -10021e9e: e001 b.n 10021ea4 -10021ea0: f884 1314 strb.w r1, [r4, #788] ; 0x314 -10021ea4: f003 0204 and.w r2, r3, #4 -10021ea8: f002 01ff and.w r1, r2, #255 ; 0xff -10021eac: b11a cbz r2, 10021eb6 -10021eae: 2203 movs r2, #3 -10021eb0: f884 2312 strb.w r2, [r4, #786] ; 0x312 -10021eb4: e001 b.n 10021eba -10021eb6: f884 1312 strb.w r1, [r4, #786] ; 0x312 -10021eba: f003 0308 and.w r3, r3, #8 -10021ebe: f003 02ff and.w r2, r3, #255 ; 0xff -10021ec2: b11b cbz r3, 10021ecc -10021ec4: 2303 movs r3, #3 -10021ec6: f884 3313 strb.w r3, [r4, #787] ; 0x313 -10021eca: e007 b.n 10021edc -10021ecc: f884 2313 strb.w r2, [r4, #787] ; 0x313 -10021ed0: e004 b.n 10021edc -10021ed2: 9b07 ldr r3, [sp, #28] -10021ed4: 3302 adds r3, #2 -10021ed6: eb06 0803 add.w r8, r6, r3 -10021eda: e7a7 b.n 10021e2c -10021edc: f204 2602 addw r6, r4, #514 ; 0x202 -10021ee0: 2100 movs r1, #0 -10021ee2: 4630 mov r0, r6 -10021ee4: 221a movs r2, #26 -10021ee6: f7f5 faa3 bl 10017430 -10021eea: 9936 ldr r1, [sp, #216] ; 0xd8 -10021eec: f8d4 32c8 ldr.w r3, [r4, #712] ; 0x2c8 -10021ef0: b161 cbz r1, 10021f0c -10021ef2: f89d 20dc ldrb.w r2, [sp, #220] ; 0xdc -10021ef6: 2a19 cmp r2, #25 -10021ef8: d908 bls.n 10021f0c -10021efa: f443 6320 orr.w r3, r3, #2560 ; 0xa00 -10021efe: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 -10021f02: 4630 mov r0, r6 -10021f04: 221a movs r2, #26 -10021f06: f7f5 fa83 bl 10017410 -10021f0a: e003 b.n 10021f14 -10021f0c: f423 6300 bic.w r3, r3, #2048 ; 0x800 -10021f10: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 -10021f14: f8d5 3454 ldr.w r3, [r5, #1108] ; 0x454 -10021f18: f8d4 22c8 ldr.w r2, [r4, #712] ; 0x2c8 -10021f1c: b913 cbnz r3, 10021f24 -10021f1e: 0510 lsls r0, r2, #20 -10021f20: f100 80e1 bmi.w 100220e6 -10021f24: f8d4 1168 ldr.w r1, [r4, #360] ; 0x168 -10021f28: f042 4300 orr.w r3, r2, #2147483648 ; 0x80000000 -10021f2c: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 -10021f30: 4421 add r1, r4 -10021f32: 4623 mov r3, r4 -10021f34: 428b cmp r3, r1 -10021f36: d00a beq.n 10021f4e -10021f38: f893 0158 ldrb.w r0, [r3, #344] ; 0x158 -10021f3c: 3301 adds r3, #1 -10021f3e: f000 007f and.w r0, r0, #127 ; 0x7f -10021f42: 2816 cmp r0, #22 -10021f44: ddf6 ble.n 10021f34 -10021f46: f022 4200 bic.w r2, r2, #2147483648 ; 0x80000000 -10021f4a: f8c4 22c8 str.w r2, [r4, #712] ; 0x2c8 -10021f4e: f8b4 32c4 ldrh.w r3, [r4, #708] ; 0x2c4 -10021f52: f013 0f20 tst.w r3, #32 -10021f56: f8d4 32c8 ldr.w r3, [r4, #712] ; 0x2c8 -10021f5a: bf14 ite ne -10021f5c: f043 0380 orrne.w r3, r3, #128 ; 0x80 -10021f60: f023 0380 biceq.w r3, r3, #128 ; 0x80 -10021f64: f8c4 32c8 str.w r3, [r4, #712] ; 0x2c8 -10021f68: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc -10021f6c: b9bb cbnz r3, 10021f9e -10021f6e: 2301 movs r3, #1 -10021f70: f8c4 30fc str.w r3, [r4, #252] ; 0xfc -10021f74: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc -10021f78: 2b05 cmp r3, #5 -10021f7a: d804 bhi.n 10021f86 -10021f7c: eb05 0283 add.w r2, r5, r3, lsl #2 -10021f80: f8d2 2ce4 ldr.w r2, [r2, #3300] ; 0xce4 -10021f84: b94a cbnz r2, 10021f9a -10021f86: f8b5 2d00 ldrh.w r2, [r5, #3328] ; 0xd00 -10021f8a: 4293 cmp r3, r2 -10021f8c: f200 809b bhi.w 100220c6 -10021f90: eb05 0383 add.w r3, r5, r3, lsl #2 -10021f94: f8c3 4ce4 str.w r4, [r3, #3300] ; 0xce4 -10021f98: e001 b.n 10021f9e -10021f9a: 3301 adds r3, #1 -10021f9c: e7e8 b.n 10021f70 -10021f9e: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 -10021fa2: f605 46d8 addw r6, r5, #3288 ; 0xcd8 -10021fa6: f423 5300 bic.w r3, r3, #8192 ; 0x2000 -10021faa: f443 4380 orr.w r3, r3, #16384 ; 0x4000 -10021fae: 4630 mov r0, r6 -10021fb0: f8c4 30f8 str.w r3, [r4, #248] ; 0xf8 -10021fb4: a909 add r1, sp, #36 ; 0x24 -10021fb6: f504 7809 add.w r8, r4, #548 ; 0x224 -10021fba: f7f5 fb05 bl 100175c8 -10021fbe: 4640 mov r0, r8 -10021fc0: f7f5 fa41 bl 10017446 -10021fc4: b910 cbnz r0, 10021fcc -10021fc6: 4640 mov r0, r8 -10021fc8: f7f5 fa4e bl 10017468 -10021fcc: 4630 mov r0, r6 -10021fce: a909 add r1, sp, #36 ; 0x24 -10021fd0: f605 46d4 addw r6, r5, #3284 ; 0xcd4 -10021fd4: f7f5 fb02 bl 100175dc -10021fd8: f504 7807 add.w r8, r4, #540 ; 0x21c -10021fdc: 4630 mov r0, r6 -10021fde: a909 add r1, sp, #36 ; 0x24 -10021fe0: f7f5 faf2 bl 100175c8 -10021fe4: 4640 mov r0, r8 -10021fe6: f7f5 fa2e bl 10017446 -10021fea: b140 cbz r0, 10021ffe -10021fec: f8d5 3ce4 ldr.w r3, [r5, #3300] ; 0xce4 -10021ff0: 4640 mov r0, r8 -10021ff2: f8c4 322c str.w r3, [r4, #556] ; 0x22c -10021ff6: f605 41c4 addw r1, r5, #3268 ; 0xcc4 -10021ffa: f7f5 fa2f bl 1001745c -10021ffe: a909 add r1, sp, #36 ; 0x24 -10022000: 4630 mov r0, r6 -10022002: f7f5 faeb bl 100175dc -10022006: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 -1002200a: 0459 lsls r1, r3, #17 -1002200c: d551 bpl.n 100220b2 -1002200e: 4628 mov r0, r5 -10022010: 4621 mov r1, r4 -10022012: f7f9 fcde bl 1001b9d2 -10022016: 4628 mov r0, r5 -10022018: 4621 mov r1, r4 -1002201a: f7f9 ffc5 bl 1001bfa8 -1002201e: f241 3385 movw r3, #4997 ; 0x1385 -10022022: 5ceb ldrb r3, [r5, r3] -10022024: f504 7684 add.w r6, r4, #264 ; 0x108 -10022028: b933 cbnz r3, 10022038 -1002202a: 463a mov r2, r7 -1002202c: 9f04 ldr r7, [sp, #16] -1002202e: 4628 mov r0, r5 -10022030: 4631 mov r1, r6 -10022032: b2bb uxth r3, r7 -10022034: f011 fdd8 bl 10033be8 -10022038: 4628 mov r0, r5 -1002203a: 4631 mov r1, r6 -1002203c: f8d4 20fc ldr.w r2, [r4, #252] ; 0xfc -10022040: f7ff fd1c bl 10021a7c -10022044: 4628 mov r0, r5 -10022046: f1ba 0f00 cmp.w sl, #0 -1002204a: d103 bne.n 10022054 -1002204c: 4651 mov r1, sl -1002204e: 4622 mov r2, r4 -10022050: 2310 movs r3, #16 -10022052: e002 b.n 1002205a -10022054: 2100 movs r1, #0 -10022056: 4622 mov r2, r4 -10022058: 2330 movs r3, #48 ; 0x30 -1002205a: f7fd fd37 bl 1001facc -1002205e: f8d4 32d0 ldr.w r3, [r4, #720] ; 0x2d0 -10022062: b333 cbz r3, 100220b2 -10022064: f241 3385 movw r3, #4997 ; 0x1385 -10022068: 5ceb ldrb r3, [r5, r3] -1002206a: bb13 cbnz r3, 100220b2 -1002206c: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc -10022070: f203 138b addw r3, r3, #395 ; 0x18b -10022074: eb05 0383 add.w r3, r5, r3, lsl #2 -10022078: f8d3 6d08 ldr.w r6, [r3, #3336] ; 0xd08 -1002207c: 6833 ldr r3, [r6, #0] -1002207e: b9c3 cbnz r3, 100220b2 -10022080: 4628 mov r0, r5 -10022082: 4621 mov r1, r4 -10022084: f002 fc24 bl 100248d0 -10022088: f8d4 32d0 ldr.w r3, [r4, #720] ; 0x2d0 -1002208c: 079a lsls r2, r3, #30 -1002208e: d504 bpl.n 1002209a -10022090: f8d5 3d64 ldr.w r3, [r5, #3428] ; 0xd64 -10022094: 7433 strb r3, [r6, #16] -10022096: 2302 movs r3, #2 -10022098: e005 b.n 100220a6 -1002209a: 07db lsls r3, r3, #31 -1002209c: d504 bpl.n 100220a8 -1002209e: f8d5 3d64 ldr.w r3, [r5, #3428] ; 0xd64 -100220a2: 7433 strb r3, [r6, #16] -100220a4: 2301 movs r3, #1 -100220a6: 60b3 str r3, [r6, #8] -100220a8: 4628 mov r0, r5 -100220aa: 4621 mov r1, r4 -100220ac: 2200 movs r2, #0 -100220ae: f002 fcb3 bl 10024a18 -100220b2: 2001 movs r0, #1 -100220b4: e019 b.n 100220ea -100220b6: 4628 mov r0, r5 -100220b8: 4631 mov r1, r6 -100220ba: 2206 movs r2, #6 -100220bc: f7fe f932 bl 10020324 -100220c0: e00f b.n 100220e2 -100220c2: 2128 movs r1, #40 ; 0x28 -100220c4: e000 b.n 100220c8 -100220c6: 2111 movs r1, #17 -100220c8: 2600 movs r6, #0 -100220ca: f8c4 60fc str.w r6, [r4, #252] ; 0xfc -100220ce: 4628 mov r0, r5 -100220d0: 4622 mov r2, r4 -100220d2: f1ba 0f00 cmp.w sl, #0 -100220d6: d101 bne.n 100220dc -100220d8: 2310 movs r3, #16 -100220da: e000 b.n 100220de -100220dc: 2330 movs r3, #48 ; 0x30 -100220de: f7fd fcf5 bl 1001facc -100220e2: 2000 movs r0, #0 -100220e4: e001 b.n 100220ea -100220e6: 2101 movs r1, #1 -100220e8: e7ee b.n 100220c8 -100220ea: b03d add sp, #244 ; 0xf4 -100220ec: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -100220f0: 10041437 .word 0x10041437 - -100220f4 : -100220f4: b5f0 push {r4, r5, r6, r7, lr} -100220f6: 6887 ldr r7, [r0, #8] -100220f8: 2300 movs r3, #0 -100220fa: f897 c010 ldrb.w ip, [r7, #16] -100220fe: 461e mov r6, r3 -10022100: 461d mov r5, r3 -10022102: 4619 mov r1, r3 -10022104: 4618 mov r0, r3 -10022106: 4563 cmp r3, ip -10022108: da13 bge.n 10022132 -1002210a: eb07 0283 add.w r2, r7, r3, lsl #2 -1002210e: 6892 ldr r2, [r2, #8] -10022110: b16a cbz r2, 1002212e -10022112: f502 54c3 add.w r4, r2, #6240 ; 0x1860 -10022116: 340a adds r4, #10 -10022118: 7824 ldrb r4, [r4, #0] -1002211a: b91c cbnz r4, 10022124 -1002211c: f502 65d0 add.w r5, r2, #1664 ; 0x680 -10022120: 4610 mov r0, r2 -10022122: e004 b.n 1002212e -10022124: 2c01 cmp r4, #1 -10022126: bf04 itt eq -10022128: f502 66d0 addeq.w r6, r2, #1664 ; 0x680 -1002212c: 4611 moveq r1, r2 -1002212e: 3301 adds r3, #1 -10022130: e7e9 b.n 10022106 -10022132: b300 cbz r0, 10022176 -10022134: b1d1 cbz r1, 1002216c -10022136: 6830 ldr r0, [r6, #0] -10022138: f000 0303 and.w r3, r0, #3 -1002213c: 2b03 cmp r3, #3 -1002213e: d017 beq.n 10022170 -10022140: f244 0303 movw r3, #16387 ; 0x4003 -10022144: 4003 ands r3, r0 -10022146: f244 0202 movw r2, #16386 ; 0x4002 -1002214a: 4293 cmp r3, r2 -1002214c: d102 bne.n 10022154 -1002214e: 690b ldr r3, [r1, #16] -10022150: 05da lsls r2, r3, #23 -10022152: d50d bpl.n 10022170 -10022154: f410 4080 ands.w r0, r0, #16384 ; 0x4000 -10022158: d00d beq.n 10022176 -1002215a: 6828 ldr r0, [r5, #0] -1002215c: 0443 lsls r3, r0, #17 -1002215e: d409 bmi.n 10022174 -10022160: f000 0003 and.w r0, r0, #3 -10022164: 3803 subs r0, #3 -10022166: bf18 it ne -10022168: 2001 movne r0, #1 -1002216a: bdf0 pop {r4, r5, r6, r7, pc} -1002216c: 4608 mov r0, r1 -1002216e: bdf0 pop {r4, r5, r6, r7, pc} -10022170: 2001 movs r0, #1 -10022172: bdf0 pop {r4, r5, r6, r7, pc} -10022174: 2000 movs r0, #0 -10022176: bdf0 pop {r4, r5, r6, r7, pc} - -10022178 : -10022178: b5f8 push {r3, r4, r5, r6, r7, lr} -1002217a: 4605 mov r5, r0 -1002217c: 460c mov r4, r1 -1002217e: f006 fcc3 bl 10028b08 -10022182: f8d5 3454 ldr.w r3, [r5, #1108] ; 0x454 -10022186: f205 765a addw r6, r5, #1882 ; 0x75a -1002218a: b183 cbz r3, 100221ae -1002218c: f8d5 3458 ldr.w r3, [r5, #1112] ; 0x458 -10022190: 2701 movs r7, #1 -10022192: f8c4 71f4 str.w r7, [r4, #500] ; 0x1f4 -10022196: f8c4 31f8 str.w r3, [r4, #504] ; 0x1f8 -1002219a: 4628 mov r0, r5 -1002219c: 4631 mov r1, r6 -1002219e: f006 feb3 bl 10028f08 -100221a2: b108 cbz r0, 100221a8 -100221a4: f884 71fe strb.w r7, [r4, #510] ; 0x1fe -100221a8: f8c4 7104 str.w r7, [r4, #260] ; 0x104 -100221ac: e007 b.n 100221be -100221ae: f8c4 31f4 str.w r3, [r4, #500] ; 0x1f4 -100221b2: f8c4 31f8 str.w r3, [r4, #504] ; 0x1f8 -100221b6: f884 31fe strb.w r3, [r4, #510] ; 0x1fe -100221ba: f8c4 3104 str.w r3, [r4, #260] ; 0x104 -100221be: f895 351f ldrb.w r3, [r5, #1311] ; 0x51f -100221c2: f884 31fc strb.w r3, [r4, #508] ; 0x1fc -100221c6: f895 3520 ldrb.w r3, [r5, #1312] ; 0x520 -100221ca: f884 31fd strb.w r3, [r4, #509] ; 0x1fd -100221ce: 2300 movs r3, #0 -100221d0: f884 31ff strb.w r3, [r4, #511] ; 0x1ff -100221d4: f884 3200 strb.w r3, [r4, #512] ; 0x200 -100221d8: f8d5 344c ldr.w r3, [r5, #1100] ; 0x44c -100221dc: b113 cbz r3, 100221e4 -100221de: 2301 movs r3, #1 -100221e0: f8c4 3104 str.w r3, [r4, #260] ; 0x104 -100221e4: f204 2002 addw r0, r4, #514 ; 0x202 -100221e8: 4631 mov r1, r6 -100221ea: 221a movs r2, #26 -100221ec: f7f5 f910 bl 10017410 -100221f0: 2301 movs r3, #1 -100221f2: f8c4 30f8 str.w r3, [r4, #248] ; 0xf8 -100221f6: bdf8 pop {r3, r4, r5, r6, r7, pc} - -100221f8 : -100221f8: b510 push {r4, lr} -100221fa: 4604 mov r4, r0 -100221fc: f006 fac1 bl 10028782 -10022200: b308 cbz r0, 10022246 -10022202: 4620 mov r0, r4 -10022204: 210b movs r1, #11 -10022206: 2200 movs r2, #0 -10022208: f010 f963 bl 100324d2 -1002220c: 4a19 ldr r2, [pc, #100] ; (10022274 ) -1002220e: 4620 mov r0, r4 -10022210: 2104 movs r1, #4 -10022212: f010 f95e bl 100324d2 -10022216: f241 33b5 movw r3, #5045 ; 0x13b5 -1002221a: 5ce1 ldrb r1, [r4, r3] -1002221c: 4620 mov r0, r4 -1002221e: f006 fe9f bl 10028f60 -10022222: 4620 mov r0, r4 -10022224: 2101 movs r1, #1 -10022226: f7fc f9a1 bl 1001e56c -1002222a: 2801 cmp r0, #1 -1002222c: d011 beq.n 10022252 -1002222e: 2200 movs r2, #0 -10022230: f884 251f strb.w r2, [r4, #1311] ; 0x51f -10022234: f884 2520 strb.w r2, [r4, #1312] ; 0x520 -10022238: 4620 mov r0, r4 -1002223a: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e -1002223e: 4613 mov r3, r2 -10022240: f006 fa5c bl 100286fc -10022244: e005 b.n 10022252 -10022246: 4620 mov r0, r4 -10022248: f006 fab5 bl 100287b6 -1002224c: 2800 cmp r0, #0 -1002224e: d1d8 bne.n 10022202 -10022250: bd10 pop {r4, pc} -10022252: 4620 mov r0, r4 -10022254: f006 fb24 bl 100288a0 -10022258: 2300 movs r3, #0 -1002225a: 4620 mov r0, r4 -1002225c: f8c4 3680 str.w r3, [r4, #1664] ; 0x680 -10022260: 2102 movs r1, #2 -10022262: f006 f9df bl 10028624 -10022266: f604 003c addw r0, r4, #2108 ; 0x83c -1002226a: e8bd 4010 ldmia.w sp!, {r4, lr} -1002226e: f014 bdd5 b.w 10036e1c -10022272: bf00 nop -10022274: 10041449 .word 0x10041449 - -10022278 <_linked_info_dump>: -10022278: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1002227a: f641 035a movw r3, #6234 ; 0x185a -1002227e: 5cc3 ldrb r3, [r0, r3] -10022280: 2100 movs r1, #0 -10022282: 4604 mov r4, r0 -10022284: 9100 str r1, [sp, #0] -10022286: b333 cbz r3, 100222d6 <_linked_info_dump+0x5e> -10022288: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 -1002228c: f003 0303 and.w r3, r3, #3 -10022290: 2b02 cmp r3, #2 -10022292: d103 bne.n 1002229c <_linked_info_dump+0x24> -10022294: 466a mov r2, sp -10022296: f010 f933 bl 10032500 -1002229a: e016 b.n 100222ca <_linked_info_dump+0x52> -1002229c: 2b03 cmp r3, #3 -1002229e: d114 bne.n 100222ca <_linked_info_dump+0x52> -100222a0: f600 46d4 addw r6, r0, #3284 ; 0xcd4 -100222a4: 4630 mov r0, r6 -100222a6: a901 add r1, sp, #4 -100222a8: f7f5 f98e bl 100175c8 -100222ac: f8d4 5cc4 ldr.w r5, [r4, #3268] ; 0xcc4 -100222b0: f604 47c4 addw r7, r4, #3268 ; 0xcc4 -100222b4: 4638 mov r0, r7 -100222b6: 4629 mov r1, r5 -100222b8: f7f5 f963 bl 10017582 -100222bc: b908 cbnz r0, 100222c2 <_linked_info_dump+0x4a> -100222be: 682d ldr r5, [r5, #0] -100222c0: e7f8 b.n 100222b4 <_linked_info_dump+0x3c> -100222c2: 4630 mov r0, r6 -100222c4: a901 add r1, sp, #4 -100222c6: f7f5 f989 bl 100175dc -100222ca: 2200 movs r2, #0 -100222cc: 4620 mov r0, r4 -100222ce: 2102 movs r1, #2 -100222d0: 4613 mov r3, r2 -100222d2: f010 f91e bl 10032512 -100222d6: b003 add sp, #12 -100222d8: bdf0 pop {r4, r5, r6, r7, pc} - -100222da <_linked_rx_signal_strehgth_display>: -100222da: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 -100222de: b513 push {r0, r1, r4, lr} -100222e0: f003 0303 and.w r3, r3, #3 -100222e4: 2b02 cmp r3, #2 -100222e6: 4604 mov r4, r0 -100222e8: d101 bne.n 100222ee <_linked_rx_signal_strehgth_display+0x14> -100222ea: 2300 movs r3, #0 -100222ec: e002 b.n 100222f4 <_linked_rx_signal_strehgth_display+0x1a> -100222ee: 2b03 cmp r3, #3 -100222f0: d102 bne.n 100222f8 <_linked_rx_signal_strehgth_display+0x1e> -100222f2: 2302 movs r3, #2 -100222f4: f88d 3003 strb.w r3, [sp, #3] -100222f8: f10d 0203 add.w r2, sp, #3 -100222fc: 4620 mov r0, r4 -100222fe: 210e movs r1, #14 -10022300: f010 f8fe bl 10032500 -10022304: 4620 mov r0, r4 -10022306: 2100 movs r1, #0 -10022308: aa01 add r2, sp, #4 -1002230a: f010 f8f9 bl 10032500 -1002230e: b002 add sp, #8 -10022310: bd10 pop {r4, pc} - ... - -10022314 : -10022314: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10022318: f641 035b movw r3, #6235 ; 0x185b -1002231c: 5cc3 ldrb r3, [r0, r3] -1002231e: b08b sub sp, #44 ; 0x2c -10022320: 4606 mov r6, r0 -10022322: b10b cbz r3, 10022328 -10022324: f7ff ffd9 bl 100222da <_linked_rx_signal_strehgth_display> -10022328: 4630 mov r0, r6 -1002232a: f006 fa2a bl 10028782 -1002232e: 2800 cmp r0, #0 -10022330: f000 80ed beq.w 1002250e -10022334: f106 0a9c add.w sl, r6, #156 ; 0x9c -10022338: f506 6046 add.w r0, r6, #3168 ; 0xc60 -1002233c: 4651 mov r1, sl -1002233e: f005 ffa9 bl 10028294 -10022342: 4680 mov r8, r0 -10022344: 2800 cmp r0, #0 -10022346: f000 8142 beq.w 100225ce -1002234a: 4630 mov r0, r6 -1002234c: f00e fe9a bl 10031084 -10022350: 4647 mov r7, r8 -10022352: 4641 mov r1, r8 -10022354: e9f7 2366 ldrd r2, r3, [r7, #408]! ; 0x198 -10022358: e9f1 4568 ldrd r4, r5, [r1, #416]! ; 0x1a0 -1002235c: 4683 mov fp, r0 -1002235e: 18a4 adds r4, r4, r2 -10022360: 4640 mov r0, r8 -10022362: eb45 0503 adc.w r5, r5, r3 -10022366: e9f0 236a ldrd r2, r3, [r0, #424]! ; 0x1a8 -1002236a: 1912 adds r2, r2, r4 -1002236c: eb43 0305 adc.w r3, r3, r5 -10022370: 46c4 mov ip, r8 -10022372: 9000 str r0, [sp, #0] -10022374: 4640 mov r0, r8 -10022376: e9f0 4562 ldrd r4, r5, [r0, #392]! ; 0x188 -1002237a: e9cd 2306 strd r2, r3, [sp, #24] -1002237e: e9fc 2360 ldrd r2, r3, [ip, #384]! ; 0x180 -10022382: 1912 adds r2, r2, r4 -10022384: 4644 mov r4, r8 -10022386: eb43 0305 adc.w r3, r3, r5 -1002238a: e9f4 8964 ldrd r8, r9, [r4, #400]! ; 0x190 -1002238e: eb18 0802 adds.w r8, r8, r2 -10022392: eb49 0903 adc.w r9, r9, r3 -10022396: e9dd 2306 ldrd r2, r3, [sp, #24] -1002239a: 454b cmp r3, r9 -1002239c: bf08 it eq -1002239e: 4542 cmpeq r2, r8 -100223a0: f040 8089 bne.w 100224b6 -100223a4: f1bb 0f00 cmp.w fp, #0 -100223a8: f040 8085 bne.w 100224b6 -100223ac: f896 484c ldrb.w r4, [r6, #2124] ; 0x84c -100223b0: 2c07 cmp r4, #7 -100223b2: d83e bhi.n 10022432 -100223b4: b984 cbnz r4, 100223d8 -100223b6: f106 05a4 add.w r5, r6, #164 ; 0xa4 -100223ba: 4630 mov r0, r6 -100223bc: 4629 mov r1, r5 -100223be: 4622 mov r2, r4 -100223c0: f7fc fff8 bl 1001f3b4 -100223c4: 4630 mov r0, r6 -100223c6: 4629 mov r1, r5 -100223c8: 4622 mov r2, r4 -100223ca: f7fc fff3 bl 1001f3b4 -100223ce: 4630 mov r0, r6 -100223d0: 4629 mov r1, r5 -100223d2: 4622 mov r2, r4 -100223d4: f7fc ffee bl 1001f3b4 -100223d8: f896 384c ldrb.w r3, [r6, #2124] ; 0x84c -100223dc: 2b04 cmp r3, #4 -100223de: d904 bls.n 100223ea -100223e0: 4630 mov r0, r6 -100223e2: 2106 movs r1, #6 -100223e4: 2201 movs r2, #1 -100223e6: f7fa fd81 bl 1001ceec -100223ea: 4b7a ldr r3, [pc, #488] ; (100225d4 ) -100223ec: f896 484c ldrb.w r4, [r6, #2124] ; 0x84c -100223f0: e9d3 0102 ldrd r0, r1, [r3, #8] -100223f4: 2201 movs r2, #1 -100223f6: 2300 movs r3, #0 -100223f8: 3401 adds r4, #1 -100223fa: 4002 ands r2, r0 -100223fc: 400b ands r3, r1 -100223fe: b2e4 uxtb r4, r4 -10022400: ea52 0803 orrs.w r8, r2, r3 -10022404: f886 484c strb.w r4, [r6, #2124] ; 0x84c -10022408: d065 beq.n 100224d6 -1002240a: 4630 mov r0, r6 -1002240c: f44f 6145 mov.w r1, #3152 ; 0xc50 -10022410: 22ff movs r2, #255 ; 0xff -10022412: f010 f91c bl 1003264e -10022416: f640 210a movw r1, #2570 ; 0xa0a -1002241a: 4605 mov r5, r0 -1002241c: 22ff movs r2, #255 ; 0xff -1002241e: 4630 mov r0, r6 -10022420: f010 f915 bl 1003264e -10022424: 0061 lsls r1, r4, #1 -10022426: 4603 mov r3, r0 -10022428: 462a mov r2, r5 -1002242a: 486b ldr r0, [pc, #428] ; (100225d8 ) -1002242c: f7f8 fb98 bl 1001ab60 -10022430: e051 b.n 100224d6 -10022432: 4b6a ldr r3, [pc, #424] ; (100225dc ) -10022434: f886 b84c strb.w fp, [r6, #2124] ; 0x84c -10022438: 681b ldr r3, [r3, #0] -1002243a: b15b cbz r3, 10022454 -1002243c: 4868 ldr r0, [pc, #416] ; (100225e0 ) -1002243e: f7f8 fb8f bl 1001ab60 -10022442: 4b68 ldr r3, [pc, #416] ; (100225e4 ) -10022444: f8d3 4180 ldr.w r4, [r3, #384] ; 0x180 -10022448: f7f5 f8ca bl 100175e0 -1002244c: 4601 mov r1, r0 -1002244e: 4620 mov r0, r4 -10022450: f7f8 fb86 bl 1001ab60 -10022454: 4630 mov r0, r6 -10022456: 4651 mov r1, sl -10022458: f64f 72ff movw r2, #65535 ; 0xffff -1002245c: f7ff f89b bl 10021596 -10022460: 2300 movs r3, #0 -10022462: f8c6 368c str.w r3, [r6, #1676] ; 0x68c -10022466: f896 38f9 ldrb.w r3, [r6, #2297] ; 0x8f9 -1002246a: 2b00 cmp r3, #0 -1002246c: f000 80af beq.w 100225ce -10022470: f896 286e ldrb.w r2, [r6, #2158] ; 0x86e -10022474: f896 386d ldrb.w r3, [r6, #2157] ; 0x86d -10022478: 429a cmp r2, r3 -1002247a: d215 bcs.n 100224a8 -1002247c: 4b5a ldr r3, [pc, #360] ; (100225e8 ) -1002247e: 781a ldrb r2, [r3, #0] -10022480: 2a00 cmp r2, #0 -10022482: f040 80a4 bne.w 100225ce -10022486: 2201 movs r2, #1 -10022488: 701a strb r2, [r3, #0] -1002248a: f8b6 3870 ldrh.w r3, [r6, #2160] ; 0x870 -1002248e: f44f 717a mov.w r1, #1000 ; 0x3e8 -10022492: 4359 muls r1, r3 -10022494: f506 6006 add.w r0, r6, #2144 ; 0x860 -10022498: f014 fcbe bl 10036e18 -1002249c: f896 386e ldrb.w r3, [r6, #2158] ; 0x86e -100224a0: 3301 adds r3, #1 -100224a2: f886 386e strb.w r3, [r6, #2158] ; 0x86e -100224a6: e092 b.n 100225ce -100224a8: 4950 ldr r1, [pc, #320] ; (100225ec ) -100224aa: 4630 mov r0, r6 -100224ac: b00b add sp, #44 ; 0x2c -100224ae: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100224b2: f011 bb42 b.w 10033b3a -100224b6: 2300 movs r3, #0 -100224b8: f886 384c strb.w r3, [r6, #2124] ; 0x84c -100224bc: e9dc 2300 ldrd r2, r3, [ip] -100224c0: e9c7 2300 strd r2, r3, [r7] -100224c4: e9d0 2300 ldrd r2, r3, [r0] -100224c8: 9800 ldr r0, [sp, #0] -100224ca: e9c1 2300 strd r2, r3, [r1] -100224ce: e9d4 2300 ldrd r2, r3, [r4] -100224d2: e9c0 2300 strd r2, r3, [r0] -100224d6: f606 1458 addw r4, r6, #2392 ; 0x958 -100224da: e9d4 231a ldrd r2, r3, [r4, #104] ; 0x68 -100224de: e9d4 0120 ldrd r0, r1, [r4, #128] ; 0x80 -100224e2: 4299 cmp r1, r3 -100224e4: bf08 it eq -100224e6: 4290 cmpeq r0, r2 -100224e8: d10b bne.n 10022502 -100224ea: f8d6 368c ldr.w r3, [r6, #1676] ; 0x68c -100224ee: 1c5a adds r2, r3, #1 -100224f0: 2b0f cmp r3, #15 -100224f2: f8c6 268c str.w r2, [r6, #1676] ; 0x68c -100224f6: d16a bne.n 100225ce -100224f8: 4630 mov r0, r6 -100224fa: 2100 movs r1, #0 -100224fc: f7fd fdf2 bl 100200e4 -10022500: e001 b.n 10022506 -10022502: e9c4 2320 strd r2, r3, [r4, #128] ; 0x80 -10022506: 2300 movs r3, #0 -10022508: f8c6 368c str.w r3, [r6, #1676] ; 0x68c -1002250c: e05f b.n 100225ce -1002250e: 4630 mov r0, r6 -10022510: f006 f943 bl 1002879a -10022514: 2800 cmp r0, #0 -10022516: d05a beq.n 100225ce -10022518: f506 67d0 add.w r7, r6, #1664 ; 0x680 -1002251c: f206 74d4 addw r4, r6, #2004 ; 0x7d4 -10022520: f506 6cdc add.w ip, r6, #1760 ; 0x6e0 -10022524: 463d mov r5, r7 -10022526: 1bab subs r3, r5, r6 -10022528: 443b add r3, r7 -1002252a: f2a3 502c subw r0, r3, #1324 ; 0x52c -1002252e: 6802 ldr r2, [r0, #0] -10022530: 2a01 cmp r2, #1 -10022532: d147 bne.n 100225c4 -10022534: f5a3 63a6 sub.w r3, r3, #1328 ; 0x530 -10022538: 6819 ldr r1, [r3, #0] -1002253a: 2900 cmp r1, #0 -1002253c: d042 beq.n 100225c4 -1002253e: f501 73c0 add.w r3, r1, #384 ; 0x180 -10022542: e9d3 8900 ldrd r8, r9, [r3] -10022546: f501 73c4 add.w r3, r1, #392 ; 0x188 -1002254a: e9d3 ab00 ldrd sl, fp, [r3] -1002254e: 6862 ldr r2, [r4, #4] -10022550: f501 73c8 add.w r3, r1, #400 ; 0x190 -10022554: e9cd 8900 strd r8, r9, [sp] -10022558: e9cd ab06 strd sl, fp, [sp, #24] -1002255c: e9d3 ab00 ldrd sl, fp, [r3] -10022560: e9dd 8906 ldrd r8, r9, [sp, #24] -10022564: 2300 movs r3, #0 -10022566: e9cd 2308 strd r2, r3, [sp, #32] -1002256a: e9dd 2300 ldrd r2, r3, [sp] -1002256e: eb18 0802 adds.w r8, r8, r2 -10022572: eb49 0903 adc.w r9, r9, r3 -10022576: eb18 020a adds.w r2, r8, sl -1002257a: eb49 030b adc.w r3, r9, fp -1002257e: e9dd 8908 ldrd r8, r9, [sp, #32] -10022582: 4599 cmp r9, r3 -10022584: bf08 it eq -10022586: 4590 cmpeq r8, r2 -10022588: d114 bne.n 100225b4 -1002258a: 68a3 ldr r3, [r4, #8] -1002258c: 2b02 cmp r3, #2 -1002258e: d802 bhi.n 10022596 -10022590: 3301 adds r3, #1 -10022592: 60a3 str r3, [r4, #8] -10022594: e016 b.n 100225c4 -10022596: 2300 movs r3, #0 -10022598: 60a3 str r3, [r4, #8] -1002259a: f501 7184 add.w r1, r1, #264 ; 0x108 -1002259e: 6003 str r3, [r0, #0] -100225a0: f64f 72ff movw r2, #65535 ; 0xffff -100225a4: 4630 mov r0, r6 -100225a6: f8cd c014 str.w ip, [sp, #20] -100225aa: f7fe ffab bl 10021504 -100225ae: f8dd c014 ldr.w ip, [sp, #20] -100225b2: e007 b.n 100225c4 -100225b4: 2300 movs r3, #0 -100225b6: 60a3 str r3, [r4, #8] -100225b8: f8dd 9000 ldr.w r9, [sp] -100225bc: 9b06 ldr r3, [sp, #24] -100225be: 444b add r3, r9 -100225c0: 4453 add r3, sl -100225c2: 6063 str r3, [r4, #4] -100225c4: 3520 adds r5, #32 -100225c6: 4565 cmp r5, ip -100225c8: f104 0420 add.w r4, r4, #32 -100225cc: d1ab bne.n 10022526 -100225ce: b00b add sp, #44 ; 0x2c -100225d0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -100225d4: 10000720 .word 0x10000720 -100225d8: 10041463 .word 0x10041463 -100225dc: 10044ec0 .word 0x10044ec0 -100225e0: 10042939 .word 0x10042939 -100225e4: 10043a4c .word 0x10043a4c -100225e8: 1004baf0 .word 0x1004baf0 -100225ec: 1003fc3d .word 0x1003fc3d - -100225f0 : -100225f0: f8d0 3648 ldr.w r3, [r0, #1608] ; 0x648 -100225f4: b573 push {r0, r1, r4, r5, r6, lr} -100225f6: 2b01 cmp r3, #1 -100225f8: 4604 mov r4, r0 -100225fa: dd65 ble.n 100226c8 -100225fc: 2b03 cmp r3, #3 -100225fe: d138 bne.n 10022672 -10022600: f8d0 3650 ldr.w r3, [r0, #1616] ; 0x650 -10022604: 220c movs r2, #12 -10022606: fb02 0203 mla r2, r2, r3, r0 -1002260a: f892 252c ldrb.w r2, [r2, #1324] ; 0x52c -1002260e: f012 0f06 tst.w r2, #6 -10022612: d02b beq.n 1002266c -10022614: 4d2d ldr r5, [pc, #180] ; (100226cc ) -10022616: f012 0f04 tst.w r2, #4 -1002261a: 7829 ldrb r1, [r5, #0] -1002261c: bf0c ite eq -1002261e: 2607 moveq r6, #7 -10022620: 261c movne r6, #28 -10022622: 42b1 cmp r1, r6 -10022624: 462e mov r6, r5 -10022626: d201 bcs.n 1002262c -10022628: 0612 lsls r2, r2, #24 -1002262a: d510 bpl.n 1002264e -1002262c: 3301 adds r3, #1 -1002262e: 210c movs r1, #12 -10022630: f8c4 3650 str.w r3, [r4, #1616] ; 0x650 -10022634: fb01 4303 mla r3, r1, r3, r4 -10022638: f893 152c ldrb.w r1, [r3, #1324] ; 0x52c -1002263c: 2200 movs r2, #0 -1002263e: f001 017e and.w r1, r1, #126 ; 0x7e -10022642: f883 152c strb.w r1, [r3, #1324] ; 0x52c -10022646: 7032 strb r2, [r6, #0] -10022648: f884 28fa strb.w r2, [r4, #2298] ; 0x8fa -1002264c: e011 b.n 10022672 -1002264e: f011 0f01 tst.w r1, #1 -10022652: bf0c ite eq -10022654: 2330 moveq r3, #48 ; 0x30 -10022656: 231e movne r3, #30 -10022658: aa02 add r2, sp, #8 -1002265a: f802 3d01 strb.w r3, [r2, #-1]! -1002265e: 2134 movs r1, #52 ; 0x34 -10022660: f00f ff37 bl 100324d2 -10022664: 782b ldrb r3, [r5, #0] -10022666: 3301 adds r3, #1 -10022668: 702b strb r3, [r5, #0] -1002266a: e002 b.n 10022672 -1002266c: 3301 adds r3, #1 -1002266e: f8c0 3650 str.w r3, [r0, #1616] ; 0x650 -10022672: f894 384a ldrb.w r3, [r4, #2122] ; 0x84a -10022676: 2b01 cmp r3, #1 -10022678: d106 bne.n 10022688 -1002267a: f894 3522 ldrb.w r3, [r4, #1314] ; 0x522 -1002267e: f8c4 3650 str.w r3, [r4, #1616] ; 0x650 -10022682: 2300 movs r3, #0 -10022684: f884 384a strb.w r3, [r4, #2122] ; 0x84a -10022688: 2020 movs r0, #32 -1002268a: f7f5 f891 bl 100177b0 -1002268e: 4605 mov r5, r0 -10022690: b1d0 cbz r0, 100226c8 -10022692: 2030 movs r0, #48 ; 0x30 -10022694: f7f5 f88c bl 100177b0 -10022698: 4606 mov r6, r0 -1002269a: b920 cbnz r0, 100226a6 -1002269c: 4628 mov r0, r5 -1002269e: 2120 movs r1, #32 -100226a0: f7f4 feb3 bl 1001740a -100226a4: e010 b.n 100226c8 -100226a6: f105 0018 add.w r0, r5, #24 -100226aa: f7f4 fec9 bl 10017440 -100226ae: 2312 movs r3, #18 -100226b0: 80ab strh r3, [r5, #4] -100226b2: 2330 movs r3, #48 ; 0x30 -100226b4: 60eb str r3, [r5, #12] -100226b6: 2300 movs r3, #0 -100226b8: 60ae str r6, [r5, #8] -100226ba: 612b str r3, [r5, #16] -100226bc: 616b str r3, [r5, #20] -100226be: f604 1008 addw r0, r4, #2312 ; 0x908 -100226c2: 4629 mov r1, r5 -100226c4: f7f9 ff63 bl 1001c58e -100226c8: b002 add sp, #8 -100226ca: bd70 pop {r4, r5, r6, pc} -100226cc: 1004bb04 .word 0x1004bb04 - -100226d0 <_survey_timer_hdl>: -100226d0: f7ff bf8e b.w 100225f0 - -100226d4 : -100226d4: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 -100226d8: b510 push {r4, lr} -100226da: f413 7180 ands.w r1, r3, #256 ; 0x100 -100226de: 4604 mov r4, r0 -100226e0: d005 beq.n 100226ee -100226e2: 2300 movs r3, #0 -100226e4: f8c0 3680 str.w r3, [r0, #1664] ; 0x680 -100226e8: f06f 0102 mvn.w r1, #2 -100226ec: e00d b.n 1002270a -100226ee: f413 7200 ands.w r2, r3, #512 ; 0x200 -100226f2: d015 beq.n 10022720 -100226f4: f8d0 3684 ldr.w r3, [r0, #1668] ; 0x684 -100226f8: 3301 adds r3, #1 -100226fa: 2b04 cmp r3, #4 -100226fc: f8c0 3684 str.w r3, [r0, #1668] ; 0x684 -10022700: d907 bls.n 10022712 -10022702: f8c0 1680 str.w r1, [r0, #1664] ; 0x680 -10022706: f04f 31ff mov.w r1, #4294967295 -1002270a: e8bd 4010 ldmia.w sp!, {r4, lr} -1002270e: f7fe bdc1 b.w 10021294 -10022712: 2301 movs r3, #1 -10022714: f8c0 3690 str.w r3, [r0, #1680] ; 0x690 -10022718: 460a mov r2, r1 -1002271a: f7fc ff43 bl 1001f5a4 -1002271e: e00f b.n 10022740 -10022720: 049b lsls r3, r3, #18 -10022722: d515 bpl.n 10022750 -10022724: f8d0 3688 ldr.w r3, [r0, #1672] ; 0x688 -10022728: 3301 adds r3, #1 -1002272a: 2b04 cmp r3, #4 -1002272c: f8c0 3688 str.w r3, [r0, #1672] ; 0x688 -10022730: d904 bls.n 1002273c -10022732: f8c0 2680 str.w r2, [r0, #1664] ; 0x680 -10022736: f06f 0101 mvn.w r1, #1 -1002273a: e7e6 b.n 1002270a -1002273c: f7fd fb1c bl 1001fd78 -10022740: f604 003c addw r0, r4, #2108 ; 0x83c -10022744: f44f 7196 mov.w r1, #300 ; 0x12c -10022748: e8bd 4010 ldmia.w sp!, {r4, lr} -1002274c: f014 bb64 b.w 10036e18 -10022750: bd10 pop {r4, pc} - -10022752 <_link_timer_hdl>: -10022752: f7ff bfbf b.w 100226d4 - -10022756 : -10022756: b168 cbz r0, 10022774 -10022758: f8d0 31f4 ldr.w r3, [r0, #500] ; 0x1f4 -1002275c: 2b01 cmp r3, #1 -1002275e: d109 bne.n 10022774 -10022760: f8d0 31f8 ldr.w r3, [r0, #504] ; 0x1f8 -10022764: 2b01 cmp r3, #1 -10022766: d105 bne.n 10022774 -10022768: f890 3200 ldrb.w r3, [r0, #512] ; 0x200 -1002276c: b113 cbz r3, 10022774 -1002276e: 2300 movs r3, #0 -10022770: f880 3200 strb.w r3, [r0, #512] ; 0x200 -10022774: 4770 bx lr - -10022776 : -10022776: 2000 movs r0, #0 -10022778: 4770 bx lr - -1002277a : -1002277a: b507 push {r0, r1, r2, lr} -1002277c: 780b ldrb r3, [r1, #0] -1002277e: 2b04 cmp r3, #4 -10022780: d103 bne.n 1002278a -10022782: 2303 movs r3, #3 -10022784: f8c0 3680 str.w r3, [r0, #1664] ; 0x680 -10022788: e00f b.n 100227aa -1002278a: 2b01 cmp r3, #1 -1002278c: d109 bne.n 100227a2 -1002278e: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 -10022792: f023 0303 bic.w r3, r3, #3 -10022796: f043 0302 orr.w r3, r3, #2 -1002279a: f8c0 3680 str.w r3, [r0, #1664] ; 0x680 -1002279e: 2302 movs r3, #2 -100227a0: e003 b.n 100227aa -100227a2: b90b cbnz r3, 100227a8 -100227a4: 2301 movs r3, #1 -100227a6: e000 b.n 100227aa -100227a8: 2300 movs r3, #0 -100227aa: 2102 movs r1, #2 -100227ac: f10d 0207 add.w r2, sp, #7 -100227b0: f88d 3007 strb.w r3, [sp, #7] -100227b4: f00f fe8d bl 100324d2 -100227b8: 2000 movs r0, #0 -100227ba: b003 add sp, #12 -100227bc: f85d fb04 ldr.w pc, [sp], #4 - -100227c0 : -100227c0: b537 push {r0, r1, r2, r4, r5, lr} -100227c2: 4604 mov r4, r0 -100227c4: f005 ffdd bl 10028782 -100227c8: b128 cbz r0, 100227d6 -100227ca: 4620 mov r0, r4 -100227cc: f104 019c add.w r1, r4, #156 ; 0x9c -100227d0: 2203 movs r2, #3 -100227d2: f7fd fda7 bl 10020324 -100227d6: 4620 mov r0, r4 -100227d8: 210b movs r1, #11 -100227da: 2200 movs r2, #0 -100227dc: f00f fe79 bl 100324d2 -100227e0: 4620 mov r0, r4 -100227e2: 2104 movs r1, #4 -100227e4: 4a20 ldr r2, [pc, #128] ; (10022868 ) -100227e6: f00f fe74 bl 100324d2 -100227ea: f241 33b5 movw r3, #5045 ; 0x13b5 -100227ee: 5ce1 ldrb r1, [r4, r3] -100227f0: 4620 mov r0, r4 -100227f2: f006 fbb5 bl 10028f60 -100227f6: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -100227fa: 07db lsls r3, r3, #31 -100227fc: d507 bpl.n 1002280e -100227fe: aa02 add r2, sp, #8 -10022800: 2300 movs r3, #0 -10022802: f802 3d01 strb.w r3, [r2, #-1]! -10022806: 4620 mov r0, r4 -10022808: 2108 movs r1, #8 -1002280a: f00f fe62 bl 100324d2 -1002280e: 4620 mov r0, r4 -10022810: 2102 movs r1, #2 -10022812: 2500 movs r5, #0 -10022814: f005 ff06 bl 10028624 -10022818: f8c4 5680 str.w r5, [r4, #1664] ; 0x680 -1002281c: 4620 mov r0, r4 -1002281e: 2101 movs r1, #1 -10022820: f7fb fea4 bl 1001e56c -10022824: 2801 cmp r0, #1 -10022826: d00a beq.n 1002283e -10022828: f884 551f strb.w r5, [r4, #1311] ; 0x51f -1002282c: f884 5520 strb.w r5, [r4, #1312] ; 0x520 -10022830: 4620 mov r0, r4 -10022832: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e -10022836: 462a mov r2, r5 -10022838: 462b mov r3, r5 -1002283a: f005 ff5f bl 100286fc -1002283e: 4620 mov r0, r4 -10022840: f006 f82e bl 100288a0 -10022844: f604 003c addw r0, r4, #2108 ; 0x83c -10022848: f014 fae8 bl 10036e1c -1002284c: f204 402c addw r0, r4, #1068 ; 0x42c -10022850: f014 fae4 bl 10036e1c -10022854: 4620 mov r0, r4 -10022856: f004 f8f6 bl 10026a46 -1002285a: 4620 mov r0, r4 -1002285c: f004 f91f bl 10026a9e -10022860: 2000 movs r0, #0 -10022862: b003 add sp, #12 -10022864: bd30 pop {r4, r5, pc} -10022866: bf00 nop -10022868: 10041449 .word 0x10041449 - -1002286c : -1002286c: 780b ldrb r3, [r1, #0] -1002286e: 2b03 cmp r3, #3 -10022870: bf98 it ls -10022872: f8c0 3694 strls.w r3, [r0, #1684] ; 0x694 -10022876: 2000 movs r0, #0 -10022878: 4770 bx lr - ... - -1002287c : -1002287c: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -1002287e: 2300 movs r3, #0 -10022880: 9302 str r3, [sp, #8] -10022882: f8ad 300c strh.w r3, [sp, #12] -10022886: 78cb ldrb r3, [r1, #3] -10022888: 4605 mov r5, r0 -1002288a: 460c mov r4, r1 -1002288c: b113 cbz r3, 10022894 -1002288e: 784b ldrb r3, [r1, #1] -10022890: f8c0 36a0 str.w r3, [r0, #1696] ; 0x6a0 -10022894: 7863 ldrb r3, [r4, #1] -10022896: 7826 ldrb r6, [r4, #0] -10022898: ea43 0686 orr.w r6, r3, r6, lsl #2 -1002289c: 4b0c ldr r3, [pc, #48] ; (100228d0 ) -1002289e: f446 4600 orr.w r6, r6, #32768 ; 0x8000 -100228a2: 681b ldr r3, [r3, #0] -100228a4: b14b cbz r3, 100228ba -100228a6: 480b ldr r0, [pc, #44] ; (100228d4 ) -100228a8: f7f8 f95a bl 1001ab60 -100228ac: 4b0a ldr r3, [pc, #40] ; (100228d8 ) -100228ae: 7821 ldrb r1, [r4, #0] -100228b0: f8d3 0184 ldr.w r0, [r3, #388] ; 0x184 -100228b4: 7862 ldrb r2, [r4, #1] -100228b6: f7f8 f953 bl 1001ab60 -100228ba: 7861 ldrb r1, [r4, #1] -100228bc: 3404 adds r4, #4 -100228be: 4628 mov r0, r5 -100228c0: 9400 str r4, [sp, #0] -100228c2: 4632 mov r2, r6 -100228c4: ab02 add r3, sp, #8 -100228c6: f005 ff99 bl 100287fc -100228ca: 2000 movs r0, #0 -100228cc: b004 add sp, #16 -100228ce: bd70 pop {r4, r5, r6, pc} -100228d0: 10044ec0 .word 0x10044ec0 -100228d4: 10042939 .word 0x10042939 -100228d8: 10043a4c .word 0x10043a4c - -100228dc : -100228dc: b5f0 push {r4, r5, r6, r7, lr} -100228de: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 -100228e2: b085 sub sp, #20 -100228e4: f003 0303 and.w r3, r3, #3 -100228e8: 2b02 cmp r3, #2 -100228ea: 4605 mov r5, r0 -100228ec: 460c mov r4, r1 -100228ee: d10e bne.n 1002290e -100228f0: f500 6046 add.w r0, r0, #3168 ; 0xc60 -100228f4: f105 019c add.w r1, r5, #156 ; 0x9c -100228f8: f005 fccc bl 10028294 -100228fc: b130 cbz r0, 1002290c -100228fe: f8d0 3100 ldr.w r3, [r0, #256] ; 0x100 -10022902: 2b02 cmp r3, #2 -10022904: bf0c ite eq -10022906: 2705 moveq r7, #5 -10022908: 2704 movne r7, #4 -1002290a: e000 b.n 1002290e -1002290c: 2704 movs r7, #4 -1002290e: f8d5 3680 ldr.w r3, [r5, #1664] ; 0x680 -10022912: f003 0303 and.w r3, r3, #3 -10022916: 2b02 cmp r3, #2 -10022918: d10b bne.n 10022932 -1002291a: 4b32 ldr r3, [pc, #200] ; (100229e4 ) -1002291c: 681b ldr r3, [r3, #0] -1002291e: b143 cbz r3, 10022932 -10022920: 4831 ldr r0, [pc, #196] ; (100229e8 ) -10022922: f7f8 f91d bl 1001ab60 -10022926: 4b31 ldr r3, [pc, #196] ; (100229ec ) -10022928: 79a1 ldrb r1, [r4, #6] -1002292a: f8d3 0188 ldr.w r0, [r3, #392] ; 0x188 -1002292e: f7f8 f917 bl 1001ab60 -10022932: f8d5 3680 ldr.w r3, [r5, #1664] ; 0x680 -10022936: 79a6 ldrb r6, [r4, #6] -10022938: f003 0303 and.w r3, r3, #3 -1002293c: 2b03 cmp r3, #3 -1002293e: d136 bne.n 100229ae -10022940: b926 cbnz r6, 1002294c -10022942: 4628 mov r0, r5 -10022944: 79e1 ldrb r1, [r4, #7] -10022946: f005 ff94 bl 10028872 -1002294a: e02e b.n 100229aa -1002294c: f505 6046 add.w r0, r5, #3168 ; 0xc60 -10022950: 4621 mov r1, r4 -10022952: f005 fc9f bl 10028294 -10022956: 2800 cmp r0, #0 -10022958: d03f beq.n 100229da -1002295a: 79a3 ldrb r3, [r4, #6] -1002295c: f8d0 7100 ldr.w r7, [r0, #256] ; 0x100 -10022960: 009e lsls r6, r3, #2 -10022962: 3703 adds r7, #3 -10022964: f446 4600 orr.w r6, r6, #32768 ; 0x8000 -10022968: b2ff uxtb r7, r7 -1002296a: b1ab cbz r3, 10022998 -1002296c: 4b1d ldr r3, [pc, #116] ; (100229e4 ) -1002296e: 681b ldr r3, [r3, #0] -10022970: b193 cbz r3, 10022998 -10022972: 481d ldr r0, [pc, #116] ; (100229e8 ) -10022974: f7f8 f8f4 bl 1001ab60 -10022978: 78a0 ldrb r0, [r4, #2] -1002297a: 79a1 ldrb r1, [r4, #6] -1002297c: 9000 str r0, [sp, #0] -1002297e: 78e0 ldrb r0, [r4, #3] -10022980: 7822 ldrb r2, [r4, #0] -10022982: 9001 str r0, [sp, #4] -10022984: 7920 ldrb r0, [r4, #4] -10022986: 7863 ldrb r3, [r4, #1] -10022988: 9002 str r0, [sp, #8] -1002298a: 7960 ldrb r0, [r4, #5] -1002298c: 9003 str r0, [sp, #12] -1002298e: 4817 ldr r0, [pc, #92] ; (100229ec ) -10022990: f8d0 018c ldr.w r0, [r0, #396] ; 0x18c -10022994: f7f8 f8e4 bl 1001ab60 -10022998: f104 0308 add.w r3, r4, #8 -1002299c: 9300 str r3, [sp, #0] -1002299e: 4628 mov r0, r5 -100229a0: 4639 mov r1, r7 -100229a2: 4632 mov r2, r6 -100229a4: 4623 mov r3, r4 -100229a6: f005 ff29 bl 100287fc -100229aa: 2601 movs r6, #1 -100229ac: e016 b.n 100229dc -100229ae: b926 cbnz r6, 100229ba -100229b0: 4628 mov r0, r5 -100229b2: 79e1 ldrb r1, [r4, #7] -100229b4: f005 ff5d bl 10028872 -100229b8: e010 b.n 100229dc -100229ba: 00b2 lsls r2, r6, #2 -100229bc: f104 0308 add.w r3, r4, #8 -100229c0: 9300 str r3, [sp, #0] -100229c2: 4628 mov r0, r5 -100229c4: 4623 mov r3, r4 -100229c6: 4639 mov r1, r7 -100229c8: f442 4200 orr.w r2, r2, #32768 ; 0x8000 -100229cc: f005 ff16 bl 100287fc -100229d0: 79a3 ldrb r3, [r4, #6] -100229d2: 2600 movs r6, #0 -100229d4: f8c5 369c str.w r3, [r5, #1692] ; 0x69c -100229d8: e000 b.n 100229dc -100229da: 2605 movs r6, #5 -100229dc: 4630 mov r0, r6 -100229de: b005 add sp, #20 -100229e0: bdf0 pop {r4, r5, r6, r7, pc} -100229e2: bf00 nop -100229e4: 10044ec0 .word 0x10044ec0 -100229e8: 10042939 .word 0x10042939 -100229ec: 10043a4c .word 0x10043a4c - -100229f0 : -100229f0: b5f8 push {r3, r4, r5, r6, r7, lr} -100229f2: 4606 mov r6, r0 -100229f4: 2020 movs r0, #32 -100229f6: f7f4 fedb bl 100177b0 -100229fa: 4604 mov r4, r0 -100229fc: b390 cbz r0, 10022a64 -100229fe: f44f 705f mov.w r0, #892 ; 0x37c -10022a02: f7f4 fed5 bl 100177b0 -10022a06: 4605 mov r5, r0 -10022a08: b928 cbnz r0, 10022a16 -10022a0a: 4620 mov r0, r4 -10022a0c: 2120 movs r1, #32 -10022a0e: f7f4 fcfc bl 1001740a -10022a12: 4628 mov r0, r5 -10022a14: bdf8 pop {r3, r4, r5, r6, r7, pc} -10022a16: f106 0198 add.w r1, r6, #152 ; 0x98 -10022a1a: f44f 725f mov.w r2, #892 ; 0x37c -10022a1e: f7f4 fcf7 bl 10017410 -10022a22: 6fa9 ldr r1, [r5, #120] ; 0x78 -10022a24: f896 2740 ldrb.w r2, [r6, #1856] ; 0x740 -10022a28: 390c subs r1, #12 -10022a2a: f105 0088 add.w r0, r5, #136 ; 0x88 -10022a2e: f7fc f929 bl 1001ec84 -10022a32: 6fab ldr r3, [r5, #120] ; 0x78 -10022a34: 2700 movs r7, #0 -10022a36: 4418 add r0, r3 -10022a38: 67a8 str r0, [r5, #120] ; 0x78 -10022a3a: f104 0018 add.w r0, r4, #24 -10022a3e: f7f4 fcff bl 10017440 -10022a42: 2337 movs r3, #55 ; 0x37 -10022a44: 80a3 strh r3, [r4, #4] -10022a46: f44f 735f mov.w r3, #892 ; 0x37c -10022a4a: 60a5 str r5, [r4, #8] -10022a4c: 60e3 str r3, [r4, #12] -10022a4e: 6127 str r7, [r4, #16] -10022a50: 6167 str r7, [r4, #20] -10022a52: f606 1008 addw r0, r6, #2312 ; 0x908 -10022a56: 4621 mov r1, r4 -10022a58: f7f9 fd99 bl 1001c58e -10022a5c: f886 7508 strb.w r7, [r6, #1288] ; 0x508 -10022a60: b2c0 uxtb r0, r0 -10022a62: bdf8 pop {r3, r4, r5, r6, r7, pc} -10022a64: bdf8 pop {r3, r4, r5, r6, r7, pc} - ... - -10022a68 : -10022a68: 680a ldr r2, [r1, #0] -10022a6a: b5f8 push {r3, r4, r5, r6, r7, lr} -10022a6c: f3c2 4507 ubfx r5, r2, #16, #8 -10022a70: 2d18 cmp r5, #24 -10022a72: 4604 mov r4, r0 -10022a74: 460e mov r6, r1 -10022a76: d819 bhi.n 10022aac -10022a78: 490d ldr r1, [pc, #52] ; (10022ab0 ) -10022a7a: f851 3035 ldr.w r3, [r1, r5, lsl #3] -10022a7e: 460f mov r7, r1 -10022a80: b113 cbz r3, 10022a88 -10022a82: b292 uxth r2, r2 -10022a84: 4293 cmp r3, r2 -10022a86: d111 bne.n 10022aac -10022a88: f604 101c addw r0, r4, #2332 ; 0x91c -10022a8c: f7f4 fe0a bl 100176a4 -10022a90: f116 0108 adds.w r1, r6, #8 -10022a94: d00a beq.n 10022aac -10022a96: eb07 05c5 add.w r5, r7, r5, lsl #3 -10022a9a: 686b ldr r3, [r5, #4] -10022a9c: b10b cbz r3, 10022aa2 -10022a9e: 4620 mov r0, r4 -10022aa0: 4798 blx r3 -10022aa2: f8d4 3928 ldr.w r3, [r4, #2344] ; 0x928 -10022aa6: 3301 adds r3, #1 -10022aa8: f8c4 3928 str.w r3, [r4, #2344] ; 0x928 -10022aac: 2000 movs r0, #0 -10022aae: bdf8 pop {r3, r4, r5, r6, r7, pc} -10022ab0: 10041508 .word 0x10041508 - -10022ab4 : -10022ab4: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -10022ab8: 4607 mov r7, r0 -10022aba: f7fc f90d bl 1001ecd8 -10022abe: 4638 mov r0, r7 -10022ac0: f005 fc3e bl 10028340 -10022ac4: 4604 mov r4, r0 -10022ac6: 2800 cmp r0, #0 -10022ac8: d04d beq.n 10022b66 -10022aca: f8b7 3cfe ldrh.w r3, [r7, #3326] ; 0xcfe -10022ace: 07db lsls r3, r3, #31 -10022ad0: d549 bpl.n 10022b66 -10022ad2: f8d0 30f4 ldr.w r3, [r0, #244] ; 0xf4 -10022ad6: 2b00 cmp r3, #0 -10022ad8: d045 beq.n 10022b66 -10022ada: 200a movs r0, #10 -10022adc: f104 06f0 add.w r6, r4, #240 ; 0xf0 -10022ae0: f7f4 fdb8 bl 10017654 -10022ae4: 4630 mov r0, r6 -10022ae6: a901 add r1, sp, #4 -10022ae8: f7f4 fd6e bl 100175c8 -10022aec: f104 09e8 add.w r9, r4, #232 ; 0xe8 -10022af0: f8d4 50e8 ldr.w r5, [r4, #232] ; 0xe8 -10022af4: 4648 mov r0, r9 -10022af6: 4629 mov r1, r5 -10022af8: f7f4 fd43 bl 10017582 -10022afc: bb78 cbnz r0, 10022b5e -10022afe: 4628 mov r0, r5 -10022b00: f7f4 fcb2 bl 10017468 -10022b04: f8d4 30f4 ldr.w r3, [r4, #244] ; 0xf4 -10022b08: 4630 mov r0, r6 -10022b0a: 3b01 subs r3, #1 -10022b0c: 2b00 cmp r3, #0 -10022b0e: f8c4 30f4 str.w r3, [r4, #244] ; 0xf4 -10022b12: bf18 it ne -10022b14: 2301 movne r3, #1 -10022b16: f885 3065 strb.w r3, [r5, #101] ; 0x65 -10022b1a: 2301 movs r3, #1 -10022b1c: f885 3067 strb.w r3, [r5, #103] ; 0x67 -10022b20: 2311 movs r3, #17 -10022b22: f885 3068 strb.w r3, [r5, #104] ; 0x68 -10022b26: a901 add r1, sp, #4 -10022b28: f607 1858 addw r8, r7, #2392 ; 0x958 -10022b2c: f7f4 fd56 bl 100175dc -10022b30: 4640 mov r0, r8 -10022b32: a901 add r1, sp, #4 -10022b34: f7f4 fd48 bl 100175c8 -10022b38: 4638 mov r0, r7 -10022b3a: 4629 mov r1, r5 -10022b3c: f006 ffc3 bl 10029ac6 -10022b40: 2801 cmp r0, #1 -10022b42: d003 beq.n 10022b4c -10022b44: 4640 mov r0, r8 -10022b46: 4629 mov r1, r5 -10022b48: f006 ff22 bl 10029990 -10022b4c: 4640 mov r0, r8 -10022b4e: a901 add r1, sp, #4 -10022b50: f7f4 fd44 bl 100175dc -10022b54: 4630 mov r0, r6 -10022b56: a901 add r1, sp, #4 -10022b58: f7f4 fd36 bl 100175c8 -10022b5c: e7c8 b.n 10022af0 -10022b5e: 4630 mov r0, r6 -10022b60: a901 add r1, sp, #4 -10022b62: f7f4 fd3b bl 100175dc -10022b66: 2000 movs r0, #0 -10022b68: b003 add sp, #12 -10022b6a: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - -10022b6e : -10022b6e: b150 cbz r0, 10022b86 -10022b70: f641 035c movw r3, #6236 ; 0x185c -10022b74: 58c0 ldr r0, [r0, r3] -10022b76: b130 cbz r0, 10022b86 -10022b78: f8d0 0680 ldr.w r0, [r0, #1664] ; 0x680 -10022b7c: f000 0003 and.w r0, r0, #3 -10022b80: 1a43 subs r3, r0, r1 -10022b82: 4258 negs r0, r3 -10022b84: 4158 adcs r0, r3 -10022b86: 4770 bx lr - -10022b88 : -10022b88: b5f0 push {r4, r5, r6, r7, lr} -10022b8a: 2300 movs r3, #0 -10022b8c: b08d sub sp, #52 ; 0x34 -10022b8e: 9301 str r3, [sp, #4] -10022b90: f641 035c movw r3, #6236 ; 0x185c -10022b94: 58c7 ldr r7, [r0, r3] -10022b96: 4604 mov r4, r0 -10022b98: b10f cbz r7, 10022b9e -10022b9a: f507 67a2 add.w r7, r7, #1296 ; 0x510 -10022b9e: f8b4 161a ldrh.w r1, [r4, #1562] ; 0x61a -10022ba2: f8b4 6848 ldrh.w r6, [r4, #2120] ; 0x848 -10022ba6: 2901 cmp r1, #1 -10022ba8: f8d4 3650 ldr.w r3, [r4, #1616] ; 0x650 -10022bac: f04f 020c mov.w r2, #12 -10022bb0: d104 bne.n 10022bbc -10022bb2: fb02 4303 mla r3, r2, r3, r4 -10022bb6: f893 15cc ldrb.w r1, [r3, #1484] ; 0x5cc -10022bba: e042 b.n 10022c42 -10022bbc: 2902 cmp r1, #2 -10022bbe: d104 bne.n 10022bca -10022bc0: fb02 4303 mla r3, r2, r3, r4 -10022bc4: f893 15fc ldrb.w r1, [r3, #1532] ; 0x5fc -10022bc8: e03b b.n 10022c42 -10022bca: f894 18fa ldrb.w r1, [r4, #2298] ; 0x8fa -10022bce: b921 cbnz r1, 10022bda -10022bd0: fb02 4303 mla r3, r2, r3, r4 -10022bd4: f893 1524 ldrb.w r1, [r3, #1316] ; 0x524 -10022bd8: e024 b.n 10022c24 -10022bda: fb02 4103 mla r1, r2, r3, r4 -10022bde: f891 252c ldrb.w r2, [r1, #1324] ; 0x52c -10022be2: f501 60a5 add.w r0, r1, #1320 ; 0x528 -10022be6: f012 0501 ands.w r5, r2, #1 -10022bea: d00f beq.n 10022c0c -10022bec: f012 0506 ands.w r5, r2, #6 -10022bf0: f891 1524 ldrb.w r1, [r1, #1316] ; 0x524 -10022bf4: d115 bne.n 10022c22 -10022bf6: f022 0201 bic.w r2, r2, #1 -10022bfa: 7102 strb r2, [r0, #4] -10022bfc: f894 2522 ldrb.w r2, [r4, #1314] ; 0x522 -10022c00: 3301 adds r3, #1 -10022c02: 4293 cmp r3, r2 -10022c04: d10e bne.n 10022c24 -10022c06: f884 58fa strb.w r5, [r4, #2298] ; 0x8fa -10022c0a: e00b b.n 10022c24 -10022c0c: f894 2522 ldrb.w r2, [r4, #1314] ; 0x522 -10022c10: 4293 cmp r3, r2 -10022c12: da03 bge.n 10022c1c -10022c14: f504 6003 add.w r0, r4, #2096 ; 0x830 -10022c18: 2101 movs r1, #1 -10022c1a: e062 b.n 10022ce2 -10022c1c: f884 58fa strb.w r5, [r4, #2298] ; 0x8fa -10022c20: e001 b.n 10022c26 -10022c22: 2619 movs r6, #25 -10022c24: b969 cbnz r1, 10022c42 -10022c26: f894 3522 ldrb.w r3, [r4, #1314] ; 0x522 -10022c2a: 2b01 cmp r3, #1 -10022c2c: d108 bne.n 10022c40 -10022c2e: 4620 mov r0, r4 -10022c30: f894 149e ldrb.w r1, [r4, #1182] ; 0x49e -10022c34: f204 5224 addw r2, r4, #1316 ; 0x524 -10022c38: f7fb fd06 bl 1001e648 -10022c3c: f884 0522 strb.w r0, [r4, #1314] ; 0x522 -10022c40: 2100 movs r1, #0 -10022c42: f8d4 3650 ldr.w r3, [r4, #1616] ; 0x650 -10022c46: 220c movs r2, #12 -10022c48: fb02 4203 mla r2, r2, r3, r4 -10022c4c: f8d2 5528 ldr.w r5, [r2, #1320] ; 0x528 -10022c50: 2900 cmp r1, #0 -10022c52: d049 beq.n 10022ce8 -10022c54: 4620 mov r0, r4 -10022c56: b11b cbz r3, 10022c60 -10022c58: f894 38fa ldrb.w r3, [r4, #2298] ; 0x8fa -10022c5c: 2b01 cmp r3, #1 -10022c5e: d104 bne.n 10022c6a -10022c60: 2200 movs r2, #0 -10022c62: 4613 mov r3, r2 -10022c64: f005 fd4a bl 100286fc -10022c68: e001 b.n 10022c6e -10022c6a: f005 fd0f bl 1002868c -10022c6e: 2d01 cmp r5, #1 -10022c70: d12a bne.n 10022cc8 -10022c72: 6863 ldr r3, [r4, #4] -10022c74: 2b05 cmp r3, #5 -10022c76: d005 beq.n 10022c84 -10022c78: f8d4 7658 ldr.w r7, [r4, #1624] ; 0x658 -10022c7c: b1b7 cbz r7, 10022cac -10022c7e: f504 67cb add.w r7, r4, #1624 ; 0x658 -10022c82: e017 b.n 10022cb4 -10022c84: a802 add r0, sp, #8 -10022c86: 2100 movs r1, #0 -10022c88: 2228 movs r2, #40 ; 0x28 -10022c8a: f7f4 fbd1 bl 10017430 -10022c8e: a803 add r0, sp, #12 -10022c90: 494c ldr r1, [pc, #304] ; (10022dc4 ) -10022c92: 2207 movs r2, #7 -10022c94: f7f4 fbbc bl 10017410 -10022c98: 2307 movs r3, #7 -10022c9a: 4620 mov r0, r4 -10022c9c: a902 add r1, sp, #8 -10022c9e: 462a mov r2, r5 -10022ca0: 9302 str r3, [sp, #8] -10022ca2: f7fc fb87 bl 1001f3b4 -10022ca6: 4620 mov r0, r4 -10022ca8: a902 add r1, sp, #8 -10022caa: e00a b.n 10022cc2 -10022cac: f8d4 3654 ldr.w r3, [r4, #1620] ; 0x654 -10022cb0: 2b01 cmp r3, #1 -10022cb2: d109 bne.n 10022cc8 -10022cb4: 4620 mov r0, r4 -10022cb6: 4639 mov r1, r7 -10022cb8: 462a mov r2, r5 -10022cba: f7fc fb7b bl 1001f3b4 -10022cbe: 4620 mov r0, r4 -10022cc0: 4639 mov r1, r7 -10022cc2: 462a mov r2, r5 -10022cc4: f7fc fb76 bl 1001f3b4 -10022cc8: f8b4 361a ldrh.w r3, [r4, #1562] ; 0x61a -10022ccc: 2b02 cmp r3, #2 -10022cce: d003 beq.n 10022cd8 -10022cd0: 2b01 cmp r3, #1 -10022cd2: bf08 it eq -10022cd4: 2621 moveq r6, #33 ; 0x21 -10022cd6: e001 b.n 10022cdc -10022cd8: f44f 76c8 mov.w r6, #400 ; 0x190 -10022cdc: f504 6003 add.w r0, r4, #2096 ; 0x830 -10022ce0: 4631 mov r1, r6 -10022ce2: f014 f899 bl 10036e18 -10022ce6: e06a b.n 10022dbe -10022ce8: 6923 ldr r3, [r4, #16] -10022cea: 07db lsls r3, r3, #31 -10022cec: d55d bpl.n 10022daa -10022cee: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e -10022cf2: f894 351f ldrb.w r3, [r4, #1311] ; 0x51f -10022cf6: f894 2520 ldrb.w r2, [r4, #1312] ; 0x520 -10022cfa: 2004 movs r0, #4 -10022cfc: f8c4 0648 str.w r0, [r4, #1608] ; 0x648 -10022d00: 4620 mov r0, r4 -10022d02: f005 fcfb bl 100286fc -10022d06: f8d4 1680 ldr.w r1, [r4, #1664] ; 0x680 -10022d0a: 4620 mov r0, r4 -10022d0c: f001 0103 and.w r1, r1, #3 -10022d10: f005 fc88 bl 10028624 -10022d14: aa0c add r2, sp, #48 ; 0x30 -10022d16: 23ff movs r3, #255 ; 0xff -10022d18: f842 3d2c str.w r3, [r2, #-44]! -10022d1c: 2134 movs r1, #52 ; 0x34 -10022d1e: 4620 mov r0, r4 -10022d20: f00f fbd7 bl 100324d2 -10022d24: 4620 mov r0, r4 -10022d26: f005 fc64 bl 100285f2 -10022d2a: 4620 mov r0, r4 -10022d2c: f005 fd29 bl 10028782 -10022d30: 2801 cmp r0, #1 -10022d32: f641 055c movw r5, #6236 ; 0x185c -10022d36: d103 bne.n 10022d40 -10022d38: 4620 mov r0, r4 -10022d3a: 2100 movs r1, #0 -10022d3c: f7fd f9d2 bl 100200e4 -10022d40: 5960 ldr r0, [r4, r5] -10022d42: f005 fd1e bl 10028782 -10022d46: 2801 cmp r0, #1 -10022d48: d103 bne.n 10022d52 -10022d4a: 5960 ldr r0, [r4, r5] -10022d4c: 2100 movs r1, #0 -10022d4e: f7fd f9c9 bl 100200e4 -10022d52: aa0c add r2, sp, #48 ; 0x30 -10022d54: 2500 movs r5, #0 -10022d56: 210c movs r1, #12 -10022d58: f802 5d28 strb.w r5, [r2, #-40]! -10022d5c: 4620 mov r0, r4 -10022d5e: f00f fbb8 bl 100324d2 -10022d62: 4620 mov r0, r4 -10022d64: f7fe fa64 bl 10021230 -10022d68: 2364 movs r3, #100 ; 0x64 -10022d6a: f8a4 3848 strh.w r3, [r4, #2120] ; 0x848 -10022d6e: 4620 mov r0, r4 -10022d70: f8c4 5648 str.w r5, [r4, #1608] ; 0x648 -10022d74: f7fb fdf2 bl 1001e95c -10022d78: 4620 mov r0, r4 -10022d7a: f7fb fdef bl 1001e95c -10022d7e: 4620 mov r0, r4 -10022d80: f7fb fdec bl 1001e95c -10022d84: 4620 mov r0, r4 -10022d86: 2103 movs r1, #3 -10022d88: f7ff fef1 bl 10022b6e -10022d8c: b1b8 cbz r0, 10022dbe -10022d8e: 4620 mov r0, r4 -10022d90: 2101 movs r1, #1 -10022d92: f7fb fbeb bl 1001e56c -10022d96: b190 cbz r0, 10022dbe -10022d98: f641 035c movw r3, #6236 ; 0x185c -10022d9c: 58e0 ldr r0, [r4, r3] -10022d9e: 4629 mov r1, r5 -10022da0: 462a mov r2, r5 -10022da2: 2301 movs r3, #1 -10022da4: f7f8 f930 bl 1001b008 -10022da8: e009 b.n 10022dbe -10022daa: 4620 mov r0, r4 -10022dac: 2101 movs r1, #1 -10022dae: f7fb fbdd bl 1001e56c -10022db2: 2800 cmp r0, #0 -10022db4: d09b beq.n 10022cee -10022db6: 7bb9 ldrb r1, [r7, #14] -10022db8: 7bfb ldrb r3, [r7, #15] -10022dba: 7c3a ldrb r2, [r7, #16] -10022dbc: e79d b.n 10022cfa -10022dbe: b00d add sp, #52 ; 0x34 -10022dc0: bdf0 pop {r4, r5, r6, r7, pc} -10022dc2: bf00 nop -10022dc4: 10041492 .word 0x10041492 - -10022dc8 : -10022dc8: b573 push {r0, r1, r4, r5, r6, lr} -10022dca: f8d0 6648 ldr.w r6, [r0, #1608] ; 0x648 -10022dce: 4604 mov r4, r0 -10022dd0: 460d mov r5, r1 -10022dd2: 2e00 cmp r6, #0 -10022dd4: d147 bne.n 10022e66 -10022dd6: 213f movs r1, #63 ; 0x3f -10022dd8: 4632 mov r2, r6 -10022dda: f00f fb7a bl 100324d2 -10022dde: 2301 movs r3, #1 -10022de0: f8c4 3648 str.w r3, [r4, #1608] ; 0x648 -10022de4: 68ab ldr r3, [r5, #8] -10022de6: f8c4 664c str.w r6, [r4, #1612] ; 0x64c -10022dea: f8c4 6650 str.w r6, [r4, #1616] ; 0x650 -10022dee: b13b cbz r3, 10022e00 -10022df0: f204 605c addw r0, r4, #1628 ; 0x65c -10022df4: f105 010c add.w r1, r5, #12 -10022df8: 2220 movs r2, #32 -10022dfa: f7f4 fb09 bl 10017410 -10022dfe: 68ab ldr r3, [r5, #8] -10022e00: f8c4 3658 str.w r3, [r4, #1624] ; 0x658 -10022e04: 682b ldr r3, [r5, #0] -10022e06: 4620 mov r0, r4 -10022e08: f8c4 3654 str.w r3, [r4, #1620] ; 0x654 -10022e0c: f005 fcb9 bl 10028782 -10022e10: 2801 cmp r0, #1 -10022e12: 4605 mov r5, r0 -10022e14: d113 bne.n 10022e3e -10022e16: 2302 movs r3, #2 -10022e18: f8c4 3648 str.w r3, [r4, #1608] ; 0x648 -10022e1c: 4629 mov r1, r5 -10022e1e: 4620 mov r0, r4 -10022e20: f7fd f960 bl 100200e4 -10022e24: f641 065c movw r6, #6236 ; 0x185c -10022e28: 4629 mov r1, r5 -10022e2a: 4620 mov r0, r4 -10022e2c: f7fd f95a bl 100200e4 -10022e30: 59a0 ldr r0, [r4, r6] -10022e32: f005 fca6 bl 10028782 -10022e36: 2801 cmp r0, #1 -10022e38: 4605 mov r5, r0 -10022e3a: d144 bne.n 10022ec6 -10022e3c: e00a b.n 10022e54 -10022e3e: f641 065c movw r6, #6236 ; 0x185c -10022e42: 59a0 ldr r0, [r4, r6] -10022e44: f005 fc9d bl 10028782 -10022e48: 2801 cmp r0, #1 -10022e4a: 4605 mov r5, r0 -10022e4c: d10b bne.n 10022e66 -10022e4e: 2302 movs r3, #2 -10022e50: f8c4 3648 str.w r3, [r4, #1608] ; 0x648 -10022e54: 59a0 ldr r0, [r4, r6] -10022e56: 4629 mov r1, r5 -10022e58: f7fd f944 bl 100200e4 -10022e5c: 59a0 ldr r0, [r4, r6] -10022e5e: 4629 mov r1, r5 -10022e60: f7fd f940 bl 100200e4 -10022e64: e02f b.n 10022ec6 -10022e66: f8d4 3648 ldr.w r3, [r4, #1608] ; 0x648 -10022e6a: 3b01 subs r3, #1 -10022e6c: 2b01 cmp r3, #1 -10022e6e: d826 bhi.n 10022ebe -10022e70: 4620 mov r0, r4 -10022e72: f005 fbb3 bl 100285dc -10022e76: f241 33f9 movw r3, #5113 ; 0x13f9 -10022e7a: 5ce3 ldrb r3, [r4, r3] -10022e7c: 4620 mov r0, r4 -10022e7e: 2b01 cmp r3, #1 -10022e80: bf19 ittee ne -10022e82: 2100 movne r1, #0 -10022e84: 460a movne r2, r1 -10022e86: f44f 5100 moveq.w r1, #8192 ; 0x2000 -10022e8a: 2200 moveq r2, #0 -10022e8c: f005 fbbc bl 10028608 -10022e90: aa02 add r2, sp, #8 -10022e92: 231e movs r3, #30 -10022e94: f842 3d04 str.w r3, [r2, #-4]! -10022e98: 4620 mov r0, r4 -10022e9a: 2134 movs r1, #52 ; 0x34 -10022e9c: f00f fb19 bl 100324d2 -10022ea0: 4620 mov r0, r4 -10022ea2: 2100 movs r1, #0 -10022ea4: f005 fbbe bl 10028624 -10022ea8: 2301 movs r3, #1 -10022eaa: aa02 add r2, sp, #8 -10022eac: f802 3d05 strb.w r3, [r2, #-5]! -10022eb0: 4620 mov r0, r4 -10022eb2: 210c movs r1, #12 -10022eb4: f00f fb0d bl 100324d2 -10022eb8: 2303 movs r3, #3 -10022eba: f8c4 3648 str.w r3, [r4, #1608] ; 0x648 -10022ebe: 4620 mov r0, r4 -10022ec0: f7ff fe62 bl 10022b88 -10022ec4: e004 b.n 10022ed0 -10022ec6: f504 6003 add.w r0, r4, #2096 ; 0x830 -10022eca: 2132 movs r1, #50 ; 0x32 -10022ecc: f013 ffa4 bl 10036e18 -10022ed0: 2000 movs r0, #0 -10022ed2: b002 add sp, #8 -10022ed4: bd70 pop {r4, r5, r6, pc} - -10022ed6 : -10022ed6: b570 push {r4, r5, r6, lr} -10022ed8: 4605 mov r5, r0 -10022eda: f7fb fb2b bl 1001e534 -10022ede: b388 cbz r0, 10022f44 -10022ee0: f641 035c movw r3, #6236 ; 0x185c -10022ee4: 58ec ldr r4, [r5, r3] -10022ee6: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -10022eea: f003 0303 and.w r3, r3, #3 -10022eee: 2b03 cmp r3, #3 -10022ef0: d119 bne.n 10022f26 -10022ef2: f8b5 251e ldrh.w r2, [r5, #1310] ; 0x51e -10022ef6: f8b4 351e ldrh.w r3, [r4, #1310] ; 0x51e -10022efa: 429a cmp r2, r3 -10022efc: d105 bne.n 10022f0a -10022efe: f895 2520 ldrb.w r2, [r5, #1312] ; 0x520 -10022f02: f894 3520 ldrb.w r3, [r4, #1312] ; 0x520 -10022f06: 429a cmp r2, r3 -10022f08: d00d beq.n 10022f26 -10022f0a: 2601 movs r6, #1 -10022f0c: f884 6902 strb.w r6, [r4, #2306] ; 0x902 -10022f10: 4620 mov r0, r4 -10022f12: f7f8 ffe1 bl 1001bed8 -10022f16: 2200 movs r2, #0 -10022f18: f884 2902 strb.w r2, [r4, #2306] ; 0x902 -10022f1c: 4628 mov r0, r5 -10022f1e: 213f movs r1, #63 ; 0x3f -10022f20: f00f fad7 bl 100324d2 -10022f24: e00e b.n 10022f44 -10022f26: 6923 ldr r3, [r4, #16] -10022f28: f003 0309 and.w r3, r3, #9 -10022f2c: 2b09 cmp r3, #9 -10022f2e: d109 bne.n 10022f44 -10022f30: f895 251e ldrb.w r2, [r5, #1310] ; 0x51e -10022f34: f894 351e ldrb.w r3, [r4, #1310] ; 0x51e -10022f38: 429a cmp r2, r3 -10022f3a: d105 bne.n 10022f48 -10022f3c: f895 351f ldrb.w r3, [r5, #1311] ; 0x51f -10022f40: 2b01 cmp r3, #1 -10022f42: d008 beq.n 10022f56 -10022f44: 2001 movs r0, #1 -10022f46: bd70 pop {r4, r5, r6, pc} -10022f48: 4628 mov r0, r5 -10022f4a: f06f 0103 mvn.w r1, #3 -10022f4e: f7fe f9a1 bl 10021294 -10022f52: 2000 movs r0, #0 -10022f54: bd70 pop {r4, r5, r6, pc} -10022f56: f894 051f ldrb.w r0, [r4, #1311] ; 0x51f -10022f5a: 2801 cmp r0, #1 -10022f5c: d1f2 bne.n 10022f44 -10022f5e: f895 2520 ldrb.w r2, [r5, #1312] ; 0x520 -10022f62: f894 3520 ldrb.w r3, [r4, #1312] ; 0x520 -10022f66: 429a cmp r2, r3 -10022f68: d1ee bne.n 10022f48 -10022f6a: bd70 pop {r4, r5, r6, pc} - -10022f6c : -10022f6c: b537 push {r0, r1, r2, r4, r5, lr} -10022f6e: f8d0 30e4 ldr.w r3, [r0, #228] ; 0xe4 -10022f72: f100 0598 add.w r5, r0, #152 ; 0x98 -10022f76: f880 351e strb.w r3, [r0, #1310] ; 0x51e -10022f7a: 4604 mov r4, r0 -10022f7c: 4628 mov r0, r5 -10022f7e: f005 fbf1 bl 10028764 -10022f82: f8a4 072a strh.w r0, [r4, #1834] ; 0x72a -10022f86: 4620 mov r0, r4 -10022f88: f006 f8fe bl 10029188 -10022f8c: 4628 mov r0, r5 -10022f8e: f7fa fb11 bl 1001d5b4 -10022f92: 4605 mov r5, r0 -10022f94: 4629 mov r1, r5 -10022f96: 4620 mov r0, r4 -10022f98: f006 f8b7 bl 1002910a -10022f9c: 07eb lsls r3, r5, #31 -10022f9e: d54c bpl.n 1002303a -10022fa0: 4620 mov r0, r4 -10022fa2: f7ff ff98 bl 10022ed6 -10022fa6: 2800 cmp r0, #0 -10022fa8: d047 beq.n 1002303a -10022faa: 4620 mov r0, r4 -10022fac: 2102 movs r1, #2 -10022fae: f005 fb39 bl 10028624 -10022fb2: f8d4 3694 ldr.w r3, [r4, #1684] ; 0x694 -10022fb6: 4620 mov r0, r4 -10022fb8: 2b02 cmp r3, #2 -10022fba: bf14 ite ne -10022fbc: 23cf movne r3, #207 ; 0xcf -10022fbe: 23cc moveq r3, #204 ; 0xcc -10022fc0: f88d 3007 strb.w r3, [sp, #7] -10022fc4: 6863 ldr r3, [r4, #4] -10022fc6: 2114 movs r1, #20 -10022fc8: 2b03 cmp r3, #3 -10022fca: bf08 it eq -10022fcc: 232c moveq r3, #44 ; 0x2c -10022fce: f10d 0207 add.w r2, sp, #7 -10022fd2: bf08 it eq -10022fd4: f88d 3007 strbeq.w r3, [sp, #7] -10022fd8: f00f fa7b bl 100324d2 -10022fdc: f894 351f ldrb.w r3, [r4, #1311] ; 0x51f -10022fe0: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e -10022fe4: f894 2520 ldrb.w r2, [r4, #1312] ; 0x520 -10022fe8: 4620 mov r0, r4 -10022fea: f005 fb87 bl 100286fc -10022fee: f8b4 072a ldrh.w r0, [r4, #1834] ; 0x72a -10022ff2: f005 fbf1 bl 100287d8 -10022ff6: 4601 mov r1, r0 -10022ff8: f604 003c addw r0, r4, #2108 ; 0x83c -10022ffc: f013 ff0c bl 10036e18 -10023000: f8d4 150c ldr.w r1, [r4, #1292] ; 0x50c -10023004: f44f 7381 mov.w r3, #258 ; 0x102 -10023008: f8c4 3680 str.w r3, [r4, #1664] ; 0x680 -1002300c: b1a9 cbz r1, 1002303a -1002300e: 6f8b ldr r3, [r1, #120] ; 0x78 -10023010: b19b cbz r3, 1002303a -10023012: 4620 mov r0, r4 -10023014: f7fe faea bl 100215ec -10023018: f8d4 350c ldr.w r3, [r4, #1292] ; 0x50c -1002301c: 2100 movs r1, #0 -1002301e: 6f98 ldr r0, [r3, #120] ; 0x78 -10023020: f7f4 f9f3 bl 1001740a -10023024: f8d4 050c ldr.w r0, [r4, #1292] ; 0x50c -10023028: 2100 movs r1, #0 -1002302a: f7f4 f9ee bl 1001740a -1002302e: f8d4 250c ldr.w r2, [r4, #1292] ; 0x50c -10023032: 2300 movs r3, #0 -10023034: 6793 str r3, [r2, #120] ; 0x78 -10023036: f8c4 350c str.w r3, [r4, #1292] ; 0x50c -1002303a: b003 add sp, #12 -1002303c: bd30 pop {r4, r5, pc} - ... - -10023040 : -10023040: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 -10023044: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -10023046: 045a lsls r2, r3, #17 -10023048: 4604 mov r4, r0 -1002304a: 460d mov r5, r1 -1002304c: f100 0698 add.w r6, r0, #152 ; 0x98 -10023050: d519 bpl.n 10023086 -10023052: 079b lsls r3, r3, #30 -10023054: d504 bpl.n 10023060 -10023056: f100 019c add.w r1, r0, #156 ; 0x9c -1002305a: 2203 movs r2, #3 -1002305c: f7fd f962 bl 10020324 -10023060: 2700 movs r7, #0 -10023062: 4620 mov r0, r4 -10023064: f8c4 7680 str.w r7, [r4, #1664] ; 0x680 -10023068: f005 fc1a bl 100288a0 -1002306c: f604 003c addw r0, r4, #2108 ; 0x83c -10023070: f013 fed4 bl 10036e1c -10023074: 4620 mov r0, r4 -10023076: 2102 movs r1, #2 -10023078: f005 fad4 bl 10028624 -1002307c: 4620 mov r0, r4 -1002307e: 210b movs r1, #11 -10023080: 463a mov r2, r7 -10023082: f00f fa26 bl 100324d2 -10023086: 4620 mov r0, r4 -10023088: f7fb f870 bl 1001e16c -1002308c: 2300 movs r3, #0 -1002308e: 2278 movs r2, #120 ; 0x78 -10023090: f884 351f strb.w r3, [r4, #1311] ; 0x51f -10023094: f884 3520 strb.w r3, [r4, #1312] ; 0x520 -10023098: f884 3732 strb.w r3, [r4, #1842] ; 0x732 -1002309c: f884 3731 strb.w r3, [r4, #1841] ; 0x731 -100230a0: f884 3734 strb.w r3, [r4, #1844] ; 0x734 -100230a4: f884 3735 strb.w r3, [r4, #1845] ; 0x735 -100230a8: f884 3736 strb.w r3, [r4, #1846] ; 0x736 -100230ac: f884 373b strb.w r3, [r4, #1851] ; 0x73b -100230b0: f884 373d strb.w r3, [r4, #1853] ; 0x73d -100230b4: f884 373f strb.w r3, [r4, #1855] ; 0x73f -100230b8: 4630 mov r0, r6 -100230ba: 4629 mov r1, r5 -100230bc: f7f4 f9a8 bl 10017410 -100230c0: 6faa ldr r2, [r5, #120] ; 0x78 -100230c2: f5b2 7f40 cmp.w r2, #768 ; 0x300 -100230c6: f8c4 2110 str.w r2, [r4, #272] ; 0x110 -100230ca: d845 bhi.n 10023158 -100230cc: f105 017c add.w r1, r5, #124 ; 0x7c -100230d0: f504 708a add.w r0, r4, #276 ; 0x114 -100230d4: f7f4 f99c bl 10017410 -100230d8: 250c movs r5, #12 -100230da: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -100230de: 429d cmp r5, r3 -100230e0: d21f bcs.n 10023122 -100230e2: f105 0378 add.w r3, r5, #120 ; 0x78 -100230e6: 18f0 adds r0, r6, r3 -100230e8: 7902 ldrb r2, [r0, #4] -100230ea: 1d07 adds r7, r0, #4 -100230ec: 2a3d cmp r2, #61 ; 0x3d -100230ee: d011 beq.n 10023114 -100230f0: 2add cmp r2, #221 ; 0xdd -100230f2: d005 beq.n 10023100 -100230f4: 2a2d cmp r2, #45 ; 0x2d -100230f6: d110 bne.n 1002311a -100230f8: 2301 movs r3, #1 -100230fa: f884 3735 strb.w r3, [r4, #1845] ; 0x735 -100230fe: e00c b.n 1002311a -10023100: 3006 adds r0, #6 -10023102: 4917 ldr r1, [pc, #92] ; (10023160 ) -10023104: 2204 movs r2, #4 -10023106: f7f4 f98b bl 10017420 -1002310a: b130 cbz r0, 1002311a -1002310c: 2301 movs r3, #1 -1002310e: f884 3731 strb.w r3, [r4, #1841] ; 0x731 -10023112: e002 b.n 1002311a -10023114: 2301 movs r3, #1 -10023116: f884 3736 strb.w r3, [r4, #1846] ; 0x736 -1002311a: 787b ldrb r3, [r7, #1] -1002311c: 3302 adds r3, #2 -1002311e: 441d add r5, r3 -10023120: e7db b.n 100230da -10023122: f104 007c add.w r0, r4, #124 ; 0x7c -10023126: f014 fb8e bl 10037846 -1002312a: 4620 mov r0, r4 -1002312c: 2104 movs r1, #4 -1002312e: f104 029c add.w r2, r4, #156 ; 0x9c -10023132: f00f f9ce bl 100324d2 -10023136: 2500 movs r5, #0 -10023138: aa02 add r2, sp, #8 -1002313a: f802 5d01 strb.w r5, [r2, #-1]! -1002313e: 210d movs r1, #13 -10023140: 4620 mov r0, r4 -10023142: f00f f9c6 bl 100324d2 -10023146: f604 003c addw r0, r4, #2108 ; 0x83c -1002314a: f013 fe67 bl 10036e1c -1002314e: 4620 mov r0, r4 -10023150: f7ff ff0c bl 10022f6c -10023154: 4628 mov r0, r5 -10023156: e000 b.n 1002315a -10023158: 2004 movs r0, #4 -1002315a: b003 add sp, #12 -1002315c: bdf0 pop {r4, r5, r6, r7, pc} -1002315e: bf00 nop -10023160: 10041501 .word 0x10041501 - -10023164 : -10023164: b573 push {r0, r1, r4, r5, r6, lr} -10023166: 4605 mov r5, r0 -10023168: 460e mov r6, r1 -1002316a: f7fb f9e3 bl 1001e534 -1002316e: 2800 cmp r0, #0 -10023170: f000 80d9 beq.w 10023326 -10023174: f641 035c movw r3, #6236 ; 0x185c -10023178: 58ec ldr r4, [r5, r3] -1002317a: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -1002317e: f003 0303 and.w r3, r3, #3 -10023182: 2b03 cmp r3, #3 -10023184: f040 80cf bne.w 10023326 -10023188: 6923 ldr r3, [r4, #16] -1002318a: 07db lsls r3, r3, #31 -1002318c: f140 80cb bpl.w 10023326 -10023190: 2e00 cmp r6, #0 -10023192: f894 351f ldrb.w r3, [r4, #1311] ; 0x51f -10023196: f2c0 80b9 blt.w 1002330c -1002319a: f895 251e ldrb.w r2, [r5, #1310] ; 0x51e -1002319e: 2b01 cmp r3, #1 -100231a0: f884 251e strb.w r2, [r4, #1310] ; 0x51e -100231a4: f504 7690 add.w r6, r4, #288 ; 0x120 -100231a8: f040 808e bne.w 100232c8 -100231ac: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -100231b0: 4630 mov r0, r6 -100231b2: 213d movs r1, #61 ; 0x3d -100231b4: aa01 add r2, sp, #4 -100231b6: 3b0c subs r3, #12 -100231b8: f01b fb76 bl 1003e8a8 <__rtw_get_ie_veneer> -100231bc: b138 cbz r0, 100231ce -100231be: 9a01 ldr r2, [sp, #4] -100231c0: b132 cbz r2, 100231d0 -100231c2: 78c1 ldrb r1, [r0, #3] -100231c4: 1c82 adds r2, r0, #2 -100231c6: f021 0103 bic.w r1, r1, #3 -100231ca: 70c1 strb r1, [r0, #3] -100231cc: e000 b.n 100231d0 -100231ce: 4602 mov r2, r0 -100231d0: f895 351f ldrb.w r3, [r5, #1311] ; 0x51f -100231d4: 2b01 cmp r3, #1 -100231d6: d114 bne.n 10023202 -100231d8: f895 3520 ldrb.w r3, [r5, #1312] ; 0x520 -100231dc: f884 3520 strb.w r3, [r4, #1312] ; 0x520 -100231e0: 2a00 cmp r2, #0 -100231e2: d068 beq.n 100232b6 -100231e4: f895 3520 ldrb.w r3, [r5, #1312] ; 0x520 -100231e8: 2b01 cmp r3, #1 -100231ea: d005 beq.n 100231f8 -100231ec: 2b02 cmp r3, #2 -100231ee: d162 bne.n 100232b6 -100231f0: 7853 ldrb r3, [r2, #1] -100231f2: f043 0303 orr.w r3, r3, #3 -100231f6: e002 b.n 100231fe -100231f8: 7853 ldrb r3, [r2, #1] -100231fa: f043 0301 orr.w r3, r3, #1 -100231fe: 7053 strb r3, [r2, #1] -10023200: e059 b.n 100232b6 -10023202: 2b00 cmp r3, #0 -10023204: d157 bne.n 100232b6 -10023206: f895 351e ldrb.w r3, [r5, #1310] ; 0x51e -1002320a: 1e59 subs r1, r3, #1 -1002320c: 2903 cmp r1, #3 -1002320e: d937 bls.n 10023280 -10023210: 1f59 subs r1, r3, #5 -10023212: 2909 cmp r1, #9 -10023214: d93b bls.n 1002328e -10023216: 2b6c cmp r3, #108 ; 0x6c -10023218: d032 beq.n 10023280 -1002321a: d816 bhi.n 1002324a -1002321c: 2b34 cmp r3, #52 ; 0x34 -1002321e: d02f beq.n 10023280 -10023220: d808 bhi.n 10023234 -10023222: 2b28 cmp r3, #40 ; 0x28 -10023224: d033 beq.n 1002328e -10023226: d801 bhi.n 1002322c -10023228: 2b24 cmp r3, #36 ; 0x24 -1002322a: e022 b.n 10023272 -1002322c: 2b2c cmp r3, #44 ; 0x2c -1002322e: d027 beq.n 10023280 -10023230: 2b30 cmp r3, #48 ; 0x30 -10023232: e023 b.n 1002327c -10023234: 2b40 cmp r3, #64 ; 0x40 -10023236: d02a beq.n 1002328e -10023238: d803 bhi.n 10023242 -1002323a: 2b38 cmp r3, #56 ; 0x38 -1002323c: d027 beq.n 1002328e -1002323e: 2b3c cmp r3, #60 ; 0x3c -10023240: e017 b.n 10023272 -10023242: 2b64 cmp r3, #100 ; 0x64 -10023244: d01c beq.n 10023280 -10023246: 2b68 cmp r3, #104 ; 0x68 -10023248: e018 b.n 1002327c -1002324a: 2b84 cmp r3, #132 ; 0x84 -1002324c: d018 beq.n 10023280 -1002324e: d80a bhi.n 10023266 -10023250: 2b78 cmp r3, #120 ; 0x78 -10023252: d01c beq.n 1002328e -10023254: d803 bhi.n 1002325e -10023256: 2b70 cmp r3, #112 ; 0x70 -10023258: d019 beq.n 1002328e -1002325a: 2b74 cmp r3, #116 ; 0x74 -1002325c: e009 b.n 10023272 -1002325e: 2b7c cmp r3, #124 ; 0x7c -10023260: d00e beq.n 10023280 -10023262: 2b80 cmp r3, #128 ; 0x80 -10023264: e00a b.n 1002327c -10023266: 2b99 cmp r3, #153 ; 0x99 -10023268: d011 beq.n 1002328e -1002326a: d804 bhi.n 10023276 -1002326c: 2b88 cmp r3, #136 ; 0x88 -1002326e: d00e beq.n 1002328e -10023270: 2b95 cmp r3, #149 ; 0x95 -10023272: d116 bne.n 100232a2 -10023274: e004 b.n 10023280 -10023276: 2b9d cmp r3, #157 ; 0x9d -10023278: d002 beq.n 10023280 -1002327a: 2ba1 cmp r3, #161 ; 0xa1 -1002327c: d111 bne.n 100232a2 -1002327e: e006 b.n 1002328e -10023280: b11a cbz r2, 1002328a -10023282: 7853 ldrb r3, [r2, #1] -10023284: f043 0301 orr.w r3, r3, #1 -10023288: 7053 strb r3, [r2, #1] -1002328a: 2301 movs r3, #1 -1002328c: e00f b.n 100232ae -1002328e: b11a cbz r2, 10023298 -10023290: 7853 ldrb r3, [r2, #1] -10023292: f043 0303 orr.w r3, r3, #3 -10023296: 7053 strb r3, [r2, #1] -10023298: 2301 movs r3, #1 -1002329a: f884 351f strb.w r3, [r4, #1311] ; 0x51f -1002329e: 2302 movs r3, #2 -100232a0: e007 b.n 100232b2 -100232a2: b11a cbz r2, 100232ac -100232a4: 7853 ldrb r3, [r2, #1] -100232a6: f023 0303 bic.w r3, r3, #3 -100232aa: 7053 strb r3, [r2, #1] -100232ac: 2300 movs r3, #0 -100232ae: f884 351f strb.w r3, [r4, #1311] ; 0x51f -100232b2: f884 3520 strb.w r3, [r4, #1312] ; 0x520 -100232b6: 4628 mov r0, r5 -100232b8: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e -100232bc: f894 2520 ldrb.w r2, [r4, #1312] ; 0x520 -100232c0: f894 351f ldrb.w r3, [r4, #1311] ; 0x51f -100232c4: f005 fa1a bl 100286fc -100232c8: f895 351e ldrb.w r3, [r5, #1310] ; 0x51e -100232cc: 4630 mov r0, r6 -100232ce: f8c4 30e4 str.w r3, [r4, #228] ; 0xe4 -100232d2: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -100232d6: 2103 movs r1, #3 -100232d8: aa01 add r2, sp, #4 -100232da: 3b0c subs r3, #12 -100232dc: f01b fae4 bl 1003e8a8 <__rtw_get_ie_veneer> -100232e0: b128 cbz r0, 100232ee -100232e2: 9b01 ldr r3, [sp, #4] -100232e4: 2b00 cmp r3, #0 -100232e6: bfc4 itt gt -100232e8: f895 351e ldrbgt.w r3, [r5, #1310] ; 0x51e -100232ec: 7083 strbgt r3, [r0, #2] -100232ee: f8d4 3110 ldr.w r3, [r4, #272] ; 0x110 -100232f2: 4630 mov r0, r6 -100232f4: 213d movs r1, #61 ; 0x3d -100232f6: aa01 add r2, sp, #4 -100232f8: 3b0c subs r3, #12 -100232fa: f01b fad5 bl 1003e8a8 <__rtw_get_ie_veneer> -100232fe: b160 cbz r0, 1002331a -10023300: 9b01 ldr r3, [sp, #4] -10023302: b153 cbz r3, 1002331a -10023304: f895 351e ldrb.w r3, [r5, #1310] ; 0x51e -10023308: 7083 strb r3, [r0, #2] -1002330a: e006 b.n 1002331a -1002330c: 4628 mov r0, r5 -1002330e: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e -10023312: f894 2520 ldrb.w r2, [r4, #1312] ; 0x520 -10023316: f005 f9f1 bl 100286fc -1002331a: 2100 movs r1, #0 -1002331c: 4620 mov r0, r4 -1002331e: 460a mov r2, r1 -10023320: 2301 movs r3, #1 -10023322: f7f7 fe71 bl 1001b008 -10023326: b002 add sp, #8 -10023328: bd70 pop {r4, r5, r6, pc} - ... - -1002332c : -1002332c: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1002332e: 1e0e subs r6, r1, #0 -10023330: 4604 mov r4, r0 -10023332: f500 6746 add.w r7, r0, #3168 ; 0xc60 -10023336: da12 bge.n 1002335e -10023338: 2301 movs r3, #1 -1002333a: aa01 add r2, sp, #4 -1002333c: 210d movs r1, #13 -1002333e: f88d 3004 strb.w r3, [sp, #4] -10023342: f00f f8c6 bl 100324d2 -10023346: 4620 mov r0, r4 -10023348: 2104 movs r1, #4 -1002334a: 4a4d ldr r2, [pc, #308] ; (10023480 ) -1002334c: f00f f8c1 bl 100324d2 -10023350: f241 33b5 movw r3, #5045 ; 0x13b5 -10023354: 4620 mov r0, r4 -10023356: 5ce1 ldrb r1, [r4, r3] -10023358: f005 fe02 bl 10028f60 -1002335c: e089 b.n 10023472 -1002335e: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 -10023362: f003 0303 and.w r3, r3, #3 -10023366: 2b01 cmp r3, #1 -10023368: d110 bne.n 1002338c -1002336a: f004 ffe9 bl 10028340 -1002336e: 4605 mov r5, r0 -10023370: b160 cbz r0, 1002338c -10023372: f8d0 1100 ldr.w r1, [r0, #256] ; 0x100 -10023376: eb04 1241 add.w r2, r4, r1, lsl #5 -1002337a: f8c2 0790 str.w r0, [r2, #1936] ; 0x790 -1002337e: 4620 mov r0, r4 -10023380: f005 ff52 bl 10029228 -10023384: 4620 mov r0, r4 -10023386: 4629 mov r1, r5 -10023388: f005 fde2 bl 10028f50 -1002338c: f06f 4170 mvn.w r1, #4026531840 ; 0xf0000000 -10023390: 2201 movs r2, #1 -10023392: 4620 mov r0, r4 -10023394: f005 f938 bl 10028608 -10023398: 4620 mov r0, r4 -1002339a: f005 fe87 bl 100290ac -1002339e: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c -100233a2: 4620 mov r0, r4 -100233a4: f023 0304 bic.w r3, r3, #4 -100233a8: 2b01 cmp r3, #1 -100233aa: bf18 it ne -100233ac: 2300 movne r3, #0 -100233ae: 2152 movs r1, #82 ; 0x52 -100233b0: f10d 0205 add.w r2, sp, #5 -100233b4: f88d 3005 strb.w r3, [sp, #5] -100233b8: f00f f88b bl 100324d2 -100233bc: 4620 mov r0, r4 -100233be: 2106 movs r1, #6 -100233c0: f104 02fc add.w r2, r4, #252 ; 0xfc -100233c4: f00f f885 bl 100324d2 -100233c8: f204 722a addw r2, r4, #1834 ; 0x72a -100233cc: 4620 mov r0, r4 -100233ce: 2110 movs r1, #16 -100233d0: f00f f87f bl 100324d2 -100233d4: f8b4 172c ldrh.w r1, [r4, #1836] ; 0x72c -100233d8: 4620 mov r0, r4 -100233da: f005 fe96 bl 1002910a -100233de: 4620 mov r0, r4 -100233e0: f005 faa0 bl 10028924 -100233e4: 4620 mov r0, r4 -100233e6: f005 fb65 bl 10028ab4 -100233ea: 4638 mov r0, r7 -100233ec: f104 019c add.w r1, r4, #156 ; 0x9c -100233f0: f004 ff50 bl 10028294 -100233f4: 4605 mov r5, r0 -100233f6: b320 cbz r0, 10023442 -100233f8: f8d0 3100 ldr.w r3, [r0, #256] ; 0x100 -100233fc: 4629 mov r1, r5 -100233fe: eb04 1343 add.w r3, r4, r3, lsl #5 -10023402: f8c3 0790 str.w r0, [r3, #1936] ; 0x790 -10023406: f894 3521 ldrb.w r3, [r4, #1313] ; 0x521 -1002340a: f880 317c strb.w r3, [r0, #380] ; 0x17c -1002340e: 4620 mov r0, r4 -10023410: f005 fda2 bl 10028f58 -10023414: 4620 mov r0, r4 -10023416: 2144 movs r1, #68 ; 0x44 -10023418: f505 7280 add.w r2, r5, #256 ; 0x100 -1002341c: f00f f859 bl 100324d2 -10023420: f8d5 3100 ldr.w r3, [r5, #256] ; 0x100 -10023424: aa02 add r2, sp, #8 -10023426: 021b lsls r3, r3, #8 -10023428: f043 0301 orr.w r3, r3, #1 -1002342c: 4620 mov r0, r4 -1002342e: 2145 movs r1, #69 ; 0x45 -10023430: f822 3d02 strh.w r3, [r2, #-2]! -10023434: f00f f84d bl 100324d2 -10023438: 4620 mov r0, r4 -1002343a: f8d5 1100 ldr.w r1, [r5, #256] ; 0x100 -1002343e: f00f f984 bl 1003274a -10023442: 2302 movs r3, #2 -10023444: 4620 mov r0, r4 -10023446: 210d movs r1, #13 -10023448: aa01 add r2, sp, #4 -1002344a: f88d 3004 strb.w r3, [sp, #4] -1002344e: f00f f840 bl 100324d2 -10023452: f8d4 3680 ldr.w r3, [r4, #1664] ; 0x680 -10023456: f003 0303 and.w r3, r3, #3 -1002345a: 2b02 cmp r3, #2 -1002345c: d104 bne.n 10023468 -1002345e: 4620 mov r0, r4 -10023460: f504 61a2 add.w r1, r4, #1296 ; 0x510 -10023464: f005 fefd bl 10029262 -10023468: 4620 mov r0, r4 -1002346a: 2102 movs r1, #2 -1002346c: 2200 movs r2, #0 -1002346e: f7f9 fd3d bl 1001ceec -10023472: 4620 mov r0, r4 -10023474: 4631 mov r1, r6 -10023476: f7ff fe75 bl 10023164 -1002347a: b003 add sp, #12 -1002347c: bdf0 pop {r4, r5, r6, r7, pc} -1002347e: bf00 nop -10023480: 10041449 .word 0x10041449 - -10023484 : -10023484: b510 push {r4, lr} -10023486: 4604 mov r4, r0 -10023488: b141 cbz r1, 1002349c -1002348a: 7809 ldrb r1, [r1, #0] -1002348c: f200 5224 addw r2, r0, #1316 ; 0x524 -10023490: f7fb f8da bl 1001e648 -10023494: f884 0522 strb.w r0, [r4, #1314] ; 0x522 -10023498: 2000 movs r0, #0 -1002349a: bd10 pop {r4, pc} -1002349c: 2004 movs r0, #4 -1002349e: bd10 pop {r4, pc} - -100234a0 : -100234a0: b537 push {r0, r1, r2, r4, r5, lr} -100234a2: 4b10 ldr r3, [pc, #64] ; (100234e4 ) -100234a4: 4604 mov r4, r0 -100234a6: f641 0534 movw r5, #6196 ; 0x1834 -100234aa: 9300 str r3, [sp, #0] -100234ac: 5961 ldr r1, [r4, r5] -100234ae: 4623 mov r3, r4 -100234b0: f500 6003 add.w r0, r0, #2096 ; 0x830 -100234b4: 4a0c ldr r2, [pc, #48] ; (100234e8 ) -100234b6: f013 fcab bl 10036e10 -100234ba: 4b0c ldr r3, [pc, #48] ; (100234ec ) -100234bc: f604 003c addw r0, r4, #2108 ; 0x83c -100234c0: 9300 str r3, [sp, #0] -100234c2: 5961 ldr r1, [r4, r5] -100234c4: 4623 mov r3, r4 -100234c6: 4a0a ldr r2, [pc, #40] ; (100234f0 ) -100234c8: f013 fca2 bl 10036e10 -100234cc: 4b09 ldr r3, [pc, #36] ; (100234f4 ) -100234ce: f504 6006 add.w r0, r4, #2144 ; 0x860 -100234d2: 9300 str r3, [sp, #0] -100234d4: 5961 ldr r1, [r4, r5] -100234d6: 4a08 ldr r2, [pc, #32] ; (100234f8 ) -100234d8: 4623 mov r3, r4 -100234da: f013 fc99 bl 10036e10 -100234de: b003 add sp, #12 -100234e0: bd30 pop {r4, r5, pc} -100234e2: bf00 nop -100234e4: 1004149a .word 0x1004149a -100234e8: 100226d1 .word 0x100226d1 -100234ec: 100414a7 .word 0x100414a7 -100234f0: 10022753 .word 0x10022753 -100234f4: 100414b2 .word 0x100414b2 -100234f8: 1001d255 .word 0x1001d255 - -100234fc : -100234fc: b5f0 push {r4, r5, r6, r7, lr} -100234fe: 4b53 ldr r3, [pc, #332] ; (1002364c ) -10023500: b089 sub sp, #36 ; 0x24 -10023502: 4604 mov r4, r0 -10023504: f8c4 0510 str.w r0, [r4, #1296] ; 0x510 -10023508: 466a mov r2, sp -1002350a: f103 0708 add.w r7, r3, #8 -1002350e: 6818 ldr r0, [r3, #0] -10023510: 6859 ldr r1, [r3, #4] -10023512: 4615 mov r5, r2 -10023514: c503 stmia r5!, {r0, r1} -10023516: 3308 adds r3, #8 -10023518: 42bb cmp r3, r7 -1002351a: 462a mov r2, r5 -1002351c: d1f7 bne.n 1002350e -1002351e: 6818 ldr r0, [r3, #0] -10023520: 791b ldrb r3, [r3, #4] -10023522: 6028 str r0, [r5, #0] -10023524: 712b strb r3, [r5, #4] -10023526: 220d movs r2, #13 -10023528: a804 add r0, sp, #16 -1002352a: 2100 movs r1, #0 -1002352c: f01a fb6a bl 1003dc04 -10023530: 2301 movs r3, #1 -10023532: f88d 3011 strb.w r3, [sp, #17] -10023536: 2303 movs r3, #3 -10023538: f88d 3013 strb.w r3, [sp, #19] -1002353c: 2304 movs r3, #4 -1002353e: f88d 3014 strb.w r3, [sp, #20] -10023542: 2306 movs r3, #6 -10023544: f88d 3015 strb.w r3, [sp, #21] -10023548: 2308 movs r3, #8 -1002354a: 2502 movs r5, #2 -1002354c: f88d 3016 strb.w r3, [sp, #22] -10023550: f504 60a3 add.w r0, r4, #1304 ; 0x518 -10023554: 23ff movs r3, #255 ; 0xff -10023556: 2100 movs r1, #0 -10023558: f88d 5012 strb.w r5, [sp, #18] -1002355c: f88d 3017 strb.w r3, [sp, #23] -10023560: f7f4 f898 bl 10017694 -10023564: 2300 movs r3, #0 -10023566: f8a4 351c strh.w r3, [r4, #1308] ; 0x51c -1002356a: f241 32b4 movw r2, #5044 ; 0x13b4 -1002356e: 5ca2 ldrb r2, [r4, r2] -10023570: f884 351f strb.w r3, [r4, #1311] ; 0x51f -10023574: f884 251e strb.w r2, [r4, #1310] ; 0x51e -10023578: f884 3520 strb.w r3, [r4, #1312] ; 0x520 -1002357c: f884 384c strb.w r3, [r4, #2124] ; 0x84c -10023580: f241 33b5 movw r3, #5045 ; 0x13b5 -10023584: 5ce3 ldrb r3, [r4, r3] -10023586: f204 6039 addw r0, r4, #1593 ; 0x639 -1002358a: f884 3521 strb.w r3, [r4, #1313] ; 0x521 -1002358e: 4669 mov r1, sp -10023590: 220d movs r2, #13 -10023592: f7f3 ff3d bl 10017410 -10023596: f204 602c addw r0, r4, #1580 ; 0x62c -1002359a: a904 add r1, sp, #16 -1002359c: 220d movs r2, #13 -1002359e: f7f3 ff37 bl 10017410 -100235a2: f894 351e ldrb.w r3, [r4, #1310] ; 0x51e -100235a6: 2280 movs r2, #128 ; 0x80 -100235a8: 2b0e cmp r3, #14 -100235aa: bf84 itt hi -100235ac: 230c movhi r3, #12 -100235ae: f884 384b strbhi.w r3, [r4, #2123] ; 0x84b -100235b2: 6863 ldr r3, [r4, #4] -100235b4: bf98 it ls -100235b6: f884 584b strbls.w r5, [r4, #2123] ; 0x84b -100235ba: 2b05 cmp r3, #5 -100235bc: f04f 0500 mov.w r5, #0 -100235c0: bf04 itt eq -100235c2: 230c moveq r3, #12 -100235c4: f884 384b strbeq.w r3, [r4, #2123] ; 0x84b -100235c8: 4629 mov r1, r5 -100235ca: f504 60d5 add.w r0, r4, #1704 ; 0x6a8 -100235ce: f8c4 5648 str.w r5, [r4, #1608] ; 0x648 -100235d2: f8c4 5650 str.w r5, [r4, #1616] ; 0x650 -100235d6: f8c4 564c str.w r5, [r4, #1612] ; 0x64c -100235da: f884 584a strb.w r5, [r4, #2122] ; 0x84a -100235de: f8c4 5680 str.w r5, [r4, #1664] ; 0x680 -100235e2: f8c4 5684 str.w r5, [r4, #1668] ; 0x684 -100235e6: f8c4 5688 str.w r5, [r4, #1672] ; 0x688 -100235ea: f8c4 568c str.w r5, [r4, #1676] ; 0x68c -100235ee: f8c4 5690 str.w r5, [r4, #1680] ; 0x690 -100235f2: f8c4 5694 str.w r5, [r4, #1684] ; 0x694 -100235f6: f8c4 56a0 str.w r5, [r4, #1696] ; 0x6a0 -100235fa: f8c4 56a4 str.w r5, [r4, #1700] ; 0x6a4 -100235fe: f8c4 569c str.w r5, [r4, #1692] ; 0x69c -10023602: f8c4 5698 str.w r5, [r4, #1688] ; 0x698 -10023606: f7f3 ff13 bl 10017430 -1002360a: 2309 movs r3, #9 -1002360c: f884 372f strb.w r3, [r4, #1839] ; 0x72f -10023610: 2302 movs r3, #2 -10023612: f884 3730 strb.w r3, [r4, #1840] ; 0x730 -10023616: 4620 mov r0, r4 -10023618: f884 573e strb.w r5, [r4, #1854] ; 0x73e -1002361c: f7ff ff40 bl 100234a0 -10023620: 4620 mov r0, r4 -10023622: f7f8 fd17 bl 1001c054 -10023626: f894 149e ldrb.w r1, [r4, #1182] ; 0x49e -1002362a: f204 5224 addw r2, r4, #1316 ; 0x524 -1002362e: 4620 mov r0, r4 -10023630: f7fb f80a bl 1001e648 -10023634: f884 0522 strb.w r0, [r4, #1314] ; 0x522 -10023638: 4620 mov r0, r4 -1002363a: f000 f94b bl 100238d4 -1002363e: 2364 movs r3, #100 ; 0x64 -10023640: 2001 movs r0, #1 -10023642: f8a4 3848 strh.w r3, [r4, #2120] ; 0x848 -10023646: b009 add sp, #36 ; 0x24 -10023648: bdf0 pop {r4, r5, r6, r7, pc} -1002364a: bf00 nop -1002364c: 1004139f .word 0x1004139f - -10023650 : -10023650: 2100 movs r1, #0 -10023652: f880 161c strb.w r1, [r0, #1564] ; 0x61c -10023656: f241 62a8 movw r2, #5800 ; 0x16a8 -1002365a: 5883 ldr r3, [r0, r2] -1002365c: 2b02 cmp r3, #2 -1002365e: d101 bne.n 10023664 -10023660: f7fc bd40 b.w 100200e4 -10023664: 4770 bx lr - -10023666 : -10023666: 2103 movs r1, #3 -10023668: f7f9 bb36 b.w 1001ccd8 - -1002366c : -1002366c: b570 push {r4, r5, r6, lr} -1002366e: f241 63a8 movw r3, #5800 ; 0x16a8 -10023672: 58c3 ldr r3, [r0, r3] -10023674: 4604 mov r4, r0 -10023676: 2b03 cmp r3, #3 -10023678: 460d mov r5, r1 -1002367a: 4616 mov r6, r2 -1002367c: d030 beq.n 100236e0 -1002367e: 2b02 cmp r3, #2 -10023680: d114 bne.n 100236ac -10023682: f890 351e ldrb.w r3, [r0, #1310] ; 0x51e -10023686: 428b cmp r3, r1 -10023688: d020 beq.n 100236cc -1002368a: 2101 movs r1, #1 -1002368c: f7fc fd2a bl 100200e4 -10023690: 4620 mov r0, r4 -10023692: 2101 movs r1, #1 -10023694: f7fc fd26 bl 100200e4 -10023698: 2200 movs r2, #0 -1002369a: f884 551e strb.w r5, [r4, #1310] ; 0x51e -1002369e: f884 251f strb.w r2, [r4, #1311] ; 0x51f -100236a2: f884 2520 strb.w r2, [r4, #1312] ; 0x520 -100236a6: 4620 mov r0, r4 -100236a8: 4629 mov r1, r5 -100236aa: e00c b.n 100236c6 -100236ac: 2b01 cmp r3, #1 -100236ae: d117 bne.n 100236e0 -100236b0: f890 351e ldrb.w r3, [r0, #1310] ; 0x51e -100236b4: 428b cmp r3, r1 -100236b6: d009 beq.n 100236cc -100236b8: 2200 movs r2, #0 -100236ba: f884 151e strb.w r1, [r4, #1310] ; 0x51e -100236be: f880 251f strb.w r2, [r0, #1311] ; 0x51f -100236c2: f880 2520 strb.w r2, [r0, #1312] ; 0x520 -100236c6: 4613 mov r3, r2 -100236c8: f005 f818 bl 100286fc -100236cc: 2301 movs r3, #1 -100236ce: f884 361c strb.w r3, [r4, #1564] ; 0x61c -100236d2: f504 60c4 add.w r0, r4, #1568 ; 0x620 -100236d6: 4631 mov r1, r6 -100236d8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -100236dc: f013 bb9c b.w 10036e18 -100236e0: bd70 pop {r4, r5, r6, pc} - -100236e2 : -100236e2: b510 push {r4, lr} -100236e4: 4604 mov r4, r0 -100236e6: f500 60c4 add.w r0, r0, #1568 ; 0x620 -100236ea: f013 fb97 bl 10036e1c -100236ee: 2100 movs r1, #0 -100236f0: f884 161c strb.w r1, [r4, #1564] ; 0x61c -100236f4: f241 63a8 movw r3, #5800 ; 0x16a8 -100236f8: 58e3 ldr r3, [r4, r3] -100236fa: 2b02 cmp r3, #2 -100236fc: d104 bne.n 10023708 -100236fe: 4620 mov r0, r4 -10023700: e8bd 4010 ldmia.w sp!, {r4, lr} -10023704: f7fc bcee b.w 100200e4 -10023708: bd10 pop {r4, pc} - -1002370a : -1002370a: 2301 movs r3, #1 -1002370c: f8c0 3600 str.w r3, [r0, #1536] ; 0x600 -10023710: 2300 movs r3, #0 -10023712: f880 15fc strb.w r1, [r0, #1532] ; 0x5fc -10023716: f880 3608 strb.w r3, [r0, #1544] ; 0x608 -1002371a: b12a cbz r2, 10023728 -1002371c: 4611 mov r1, r2 -1002371e: f200 6014 addw r0, r0, #1556 ; 0x614 -10023722: 2206 movs r2, #6 -10023724: f7f3 be74 b.w 10017410 -10023728: 4770 bx lr - -1002372a : -1002372a: f241 63a8 movw r3, #5800 ; 0x16a8 -1002372e: 50c1 str r1, [r0, r3] -10023730: 4770 bx lr - -10023732 : -10023732: f241 63ac movw r3, #5804 ; 0x16ac -10023736: 50c1 str r1, [r0, r3] -10023738: 4770 bx lr - -1002373a : -1002373a: b51f push {r0, r1, r2, r3, r4, lr} -1002373c: f8ad 3006 strh.w r3, [sp, #6] -10023740: f641 0334 movw r3, #6196 ; 0x1834 -10023744: 9100 str r1, [sp, #0] -10023746: f8ad 2004 strh.w r2, [sp, #4] -1002374a: 58c0 ldr r0, [r0, r3] -1002374c: f648 4110 movw r1, #35856 ; 0x8c10 -10023750: 466a mov r2, sp -10023752: 2300 movs r3, #0 -10023754: f010 f9ec bl 10033b30 -10023758: b005 add sp, #20 -1002375a: f85d fb04 ldr.w pc, [sp], #4 - ... - -10023760 : -10023760: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -10023762: 4605 mov r5, r0 -10023764: f240 1001 movw r0, #257 ; 0x101 -10023768: 460e mov r6, r1 -1002376a: f7f4 f821 bl 100177b0 -1002376e: 4604 mov r4, r0 -10023770: b1e0 cbz r0, 100237ac -10023772: 480f ldr r0, [pc, #60] ; (100237b0 ) -10023774: f7f7 fa30 bl 1001abd8 -10023778: 490d ldr r1, [pc, #52] ; (100237b0 ) -1002377a: 4602 mov r2, r0 -1002377c: 4620 mov r0, r4 -1002377e: f7f3 fe47 bl 10017410 -10023782: 4668 mov r0, sp -10023784: 2100 movs r1, #0 -10023786: 2210 movs r2, #16 -10023788: f7f3 fe52 bl 10017430 -1002378c: f641 0334 movw r3, #6196 ; 0x1834 -10023790: 58e8 ldr r0, [r5, r3] -10023792: f648 4102 movw r1, #35842 ; 0x8c02 -10023796: 466a mov r2, sp -10023798: 4623 mov r3, r4 -1002379a: f8ad 6006 strh.w r6, [sp, #6] -1002379e: f010 f9c7 bl 10033b30 -100237a2: 4620 mov r0, r4 -100237a4: f240 1101 movw r1, #257 ; 0x101 -100237a8: f7f3 fe2f bl 1001740a -100237ac: b004 add sp, #16 -100237ae: bd70 pop {r4, r5, r6, pc} -100237b0: 1003fc8a .word 0x1003fc8a - -100237b4 : -100237b4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -100237b8: b08c sub sp, #48 ; 0x30 -100237ba: 2700 movs r7, #0 -100237bc: ae0c add r6, sp, #48 ; 0x30 -100237be: 4c29 ldr r4, [pc, #164] ; (10023864 ) -100237c0: f806 7d29 strb.w r7, [r6, #-41]! -100237c4: 210a movs r1, #10 -100237c6: 4632 mov r2, r6 -100237c8: 4605 mov r5, r0 -100237ca: f00e fe82 bl 100324d2 -100237ce: 6823 ldr r3, [r4, #0] -100237d0: a802 add r0, sp, #8 -100237d2: 3301 adds r3, #1 -100237d4: 4639 mov r1, r7 -100237d6: 2228 movs r2, #40 ; 0x28 -100237d8: 6023 str r3, [r4, #0] -100237da: f7f3 fe29 bl 10017430 -100237de: a803 add r0, sp, #12 -100237e0: 4921 ldr r1, [pc, #132] ; (10023868 ) -100237e2: 2207 movs r2, #7 -100237e4: f7f3 fe14 bl 10017410 -100237e8: 2307 movs r3, #7 -100237ea: 4628 mov r0, r5 -100237ec: a902 add r1, sp, #8 -100237ee: 2201 movs r2, #1 -100237f0: 9302 str r3, [sp, #8] -100237f2: f7fb fddf bl 1001f3b4 -100237f6: 4628 mov r0, r5 -100237f8: a902 add r1, sp, #8 -100237fa: 2201 movs r2, #1 -100237fc: f7fb fdda bl 1001f3b4 -10023800: 6823 ldr r3, [r4, #0] -10023802: f505 54b5 add.w r4, r5, #5792 ; 0x16a0 -10023806: 2b3b cmp r3, #59 ; 0x3b -10023808: f104 0408 add.w r4, r4, #8 -1002380c: d805 bhi.n 1002381a -1002380e: f104 0014 add.w r0, r4, #20 -10023812: 214b movs r1, #75 ; 0x4b -10023814: f013 fb00 bl 10036e18 -10023818: e020 b.n 1002385c -1002381a: 6921 ldr r1, [r4, #16] -1002381c: b159 cbz r1, 10023836 -1002381e: f605 1858 addw r8, r5, #2392 ; 0x958 -10023822: 4640 mov r0, r8 -10023824: f006 f8b4 bl 10029990 -10023828: 6923 ldr r3, [r4, #16] -1002382a: 4640 mov r0, r8 -1002382c: f8d3 1084 ldr.w r1, [r3, #132] ; 0x84 -10023830: 614f str r7, [r1, #20] -10023832: f007 f80e bl 1002a852 -10023836: 2100 movs r1, #0 -10023838: 2206 movs r2, #6 -1002383a: 7221 strb r1, [r4, #8] -1002383c: f104 0009 add.w r0, r4, #9 -10023840: f7f3 fdf6 bl 10017430 -10023844: 4628 mov r0, r5 -10023846: 2102 movs r1, #2 -10023848: f7ff ff8a bl 10023760 -1002384c: 2301 movs r3, #1 -1002384e: 4628 mov r0, r5 -10023850: 210a movs r1, #10 -10023852: 4632 mov r2, r6 -10023854: f88d 3007 strb.w r3, [sp, #7] -10023858: f00e fe3b bl 100324d2 -1002385c: b00c add sp, #48 ; 0x30 -1002385e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10023862: bf00 nop -10023864: 1004bb08 .word 0x1004bb08 -10023868: 10041492 .word 0x10041492 - -1002386c : -1002386c: b510 push {r4, lr} -1002386e: 2230 movs r2, #48 ; 0x30 -10023870: 2100 movs r1, #0 -10023872: 4604 mov r4, r0 -10023874: f7f3 fddc bl 10017430 -10023878: 2206 movs r2, #6 -1002387a: 7322 strb r2, [r4, #12] -1002387c: 220b movs r2, #11 -1002387e: 2301 movs r3, #1 -10023880: 7622 strb r2, [r4, #24] -10023882: 2200 movs r2, #0 -10023884: 7023 strb r3, [r4, #0] -10023886: f884 2024 strb.w r2, [r4, #36] ; 0x24 -1002388a: 6063 str r3, [r4, #4] -1002388c: 6123 str r3, [r4, #16] -1002388e: 61e3 str r3, [r4, #28] -10023890: 62a3 str r3, [r4, #40] ; 0x28 -10023892: bd10 pop {r4, pc} - -10023894 : -10023894: b537 push {r0, r1, r2, r4, r5, lr} -10023896: f500 54b5 add.w r4, r0, #5792 ; 0x16a0 -1002389a: 3408 adds r4, #8 -1002389c: 4605 mov r5, r0 -1002389e: 2100 movs r1, #0 -100238a0: 4620 mov r0, r4 -100238a2: 2220 movs r2, #32 -100238a4: f7f3 fdc4 bl 10017430 -100238a8: 4b05 ldr r3, [pc, #20] ; (100238c0 ) -100238aa: f104 0014 add.w r0, r4, #20 -100238ae: 9300 str r3, [sp, #0] -100238b0: 4629 mov r1, r5 -100238b2: 4a04 ldr r2, [pc, #16] ; (100238c4 ) -100238b4: 462b mov r3, r5 -100238b6: f013 faab bl 10036e10 -100238ba: 2001 movs r0, #1 -100238bc: b003 add sp, #12 -100238be: bd30 pop {r4, r5, pc} -100238c0: 100415c8 .word 0x100415c8 -100238c4: 10023667 .word 0x10023667 - -100238c8 : -100238c8: f500 50b5 add.w r0, r0, #5792 ; 0x16a0 -100238cc: 301c adds r0, #28 -100238ce: f013 baaa b.w 10036e26 - ... - -100238d4 : -100238d4: b537 push {r0, r1, r2, r4, r5, lr} -100238d6: f200 55cc addw r5, r0, #1484 ; 0x5cc -100238da: 4604 mov r4, r0 -100238dc: 2100 movs r1, #0 -100238de: 4628 mov r0, r5 -100238e0: 2230 movs r2, #48 ; 0x30 -100238e2: f7f3 fda5 bl 10017430 -100238e6: 4628 mov r0, r5 -100238e8: f7ff ffc0 bl 1002386c -100238ec: f204 50fc addw r0, r4, #1532 ; 0x5fc -100238f0: 2100 movs r1, #0 -100238f2: 2218 movs r2, #24 -100238f4: f7f3 fd9c bl 10017430 -100238f8: f204 6014 addw r0, r4, #1556 ; 0x614 -100238fc: 2100 movs r1, #0 -100238fe: 2206 movs r2, #6 -10023900: f7f3 fd96 bl 10017430 -10023904: 4b07 ldr r3, [pc, #28] ; (10023924 ) -10023906: 2500 movs r5, #0 -10023908: 9300 str r3, [sp, #0] -1002390a: f504 60c4 add.w r0, r4, #1568 ; 0x620 -1002390e: f884 561c strb.w r5, [r4, #1564] ; 0x61c -10023912: 4621 mov r1, r4 -10023914: 4a04 ldr r2, [pc, #16] ; (10023928 ) -10023916: 4623 mov r3, r4 -10023918: f013 fa7a bl 10036e10 -1002391c: 4628 mov r0, r5 -1002391e: b003 add sp, #12 -10023920: bd30 pop {r4, r5, pc} -10023922: bf00 nop -10023924: 100415da .word 0x100415da -10023928: 10023651 .word 0x10023651 - -1002392c : -1002392c: f500 60c4 add.w r0, r0, #1568 ; 0x620 -10023930: f013 ba79 b.w 10036e26 - -10023934 : -10023934: 8802 ldrh r2, [r0, #0] -10023936: f412 7f80 tst.w r2, #256 ; 0x100 -1002393a: bf0c ite eq -1002393c: 2300 moveq r3, #0 -1002393e: 2302 movne r3, #2 -10023940: f3c2 2240 ubfx r2, r2, #9, #1 -10023944: 4313 orrs r3, r2 -10023946: 2b02 cmp r3, #2 -10023948: d006 beq.n 10023958 -1002394a: 2b03 cmp r3, #3 -1002394c: d004 beq.n 10023958 -1002394e: 2b01 cmp r3, #1 -10023950: bf14 ite ne -10023952: 3010 addne r0, #16 -10023954: 300a addeq r0, #10 -10023956: 4770 bx lr -10023958: 3004 adds r0, #4 -1002395a: 4770 bx lr - -1002395c : -1002395c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10023960: 4b1e ldr r3, [pc, #120] ; (100239dc ) -10023962: 2600 movs r6, #0 -10023964: 4635 mov r5, r6 -10023966: 781a ldrb r2, [r3, #0] -10023968: b1fa cbz r2, 100239aa -1002396a: f833 2c10 ldrh.w r2, [r3, #-16] -1002396e: f833 7c0e ldrh.w r7, [r3, #-14] -10023972: 3601 adds r6, #1 -10023974: 19d4 adds r4, r2, r7 -10023976: 428c cmp r4, r1 -10023978: dc17 bgt.n 100239aa -1002397a: eb00 0c02 add.w ip, r0, r2 -1002397e: 2200 movs r2, #0 -10023980: 4614 mov r4, r2 -10023982: 42ba cmp r2, r7 -10023984: da10 bge.n 100239a8 -10023986: f853 4c08 ldr.w r4, [r3, #-8] -1002398a: f814 8002 ldrb.w r8, [r4, r2] -1002398e: f81c 4002 ldrb.w r4, [ip, r2] -10023992: ea88 0804 eor.w r8, r8, r4 -10023996: f853 4c0c ldr.w r4, [r3, #-12] -1002399a: 5ca4 ldrb r4, [r4, r2] -1002399c: ea18 0f04 tst.w r8, r4 -100239a0: d103 bne.n 100239aa -100239a2: 3201 adds r2, #1 -100239a4: 2401 movs r4, #1 -100239a6: e7ec b.n 10023982 -100239a8: b934 cbnz r4, 100239b8 -100239aa: 3501 adds r5, #1 -100239ac: 2d05 cmp r5, #5 -100239ae: f103 0318 add.w r3, r3, #24 -100239b2: d1d8 bne.n 10023966 -100239b4: b15e cbz r6, 100239ce -100239b6: 2400 movs r4, #0 -100239b8: 4b09 ldr r3, [pc, #36] ; (100239e0 ) -100239ba: 2218 movs r2, #24 -100239bc: fb02 3505 mla r5, r2, r5, r3 -100239c0: 692b ldr r3, [r5, #16] -100239c2: 2b01 cmp r3, #1 -100239c4: d106 bne.n 100239d4 -100239c6: f084 0001 eor.w r0, r4, #1 -100239ca: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100239ce: 2001 movs r0, #1 -100239d0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100239d4: 4620 mov r0, r4 -100239d6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100239da: bf00 nop -100239dc: 1004a91c .word 0x1004a91c -100239e0: 1004a908 .word 0x1004a908 - -100239e4 : -100239e4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -100239e8: f500 6645 add.w r6, r0, #3152 ; 0xc50 -100239ec: 4605 mov r5, r0 -100239ee: 4688 mov r8, r1 -100239f0: 4630 mov r0, r6 -100239f2: 2100 movs r1, #0 -100239f4: f7f3 fda4 bl 10017540 -100239f8: f8d5 4c48 ldr.w r4, [r5, #3144] ; 0xc48 -100239fc: f605 4748 addw r7, r5, #3144 ; 0xc48 -10023a00: 4638 mov r0, r7 -10023a02: 4621 mov r1, r4 -10023a04: f7f3 fdbd bl 10017582 -10023a08: b950 cbnz r0, 10023a20 -10023a0a: f104 0008 add.w r0, r4, #8 -10023a0e: 4641 mov r1, r8 -10023a10: 2206 movs r2, #6 -10023a12: f7f3 fd05 bl 10017420 -10023a16: b108 cbz r0, 10023a1c -10023a18: 7ba5 ldrb r5, [r4, #14] -10023a1a: e002 b.n 10023a22 -10023a1c: 6824 ldr r4, [r4, #0] -10023a1e: e7ed b.n 100239fc -10023a20: 2500 movs r5, #0 -10023a22: 4630 mov r0, r6 -10023a24: 42bc cmp r4, r7 -10023a26: bf08 it eq -10023a28: 25ff moveq r5, #255 ; 0xff -10023a2a: 2100 movs r1, #0 -10023a2c: f7f3 fd92 bl 10017554 -10023a30: 4628 mov r0, r5 -10023a32: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -10023a36 : -10023a36: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10023a3a: 4683 mov fp, r0 -10023a3c: 4614 mov r4, r2 -10023a3e: 460e mov r6, r1 -10023a40: b109 cbz r1, 10023a46 -10023a42: 6f8d ldr r5, [r1, #120] ; 0x78 -10023a44: e000 b.n 10023a48 -10023a46: 460d mov r5, r1 -10023a48: 4628 mov r0, r5 -10023a4a: f7ff ff73 bl 10023934 -10023a4e: 882b ldrh r3, [r5, #0] -10023a50: 1d27 adds r7, r4, #4 -10023a52: 8023 strh r3, [r4, #0] -10023a54: 8aeb ldrh r3, [r5, #22] -10023a56: 4682 mov sl, r0 -10023a58: 091b lsrs r3, r3, #4 -10023a5a: 82e3 strh r3, [r4, #22] -10023a5c: 886b ldrh r3, [r5, #2] -10023a5e: 4638 mov r0, r7 -10023a60: 8063 strh r3, [r4, #2] -10023a62: 1d29 adds r1, r5, #4 -10023a64: 2206 movs r2, #6 -10023a66: f104 080a add.w r8, r4, #10 -10023a6a: f7f3 fcd1 bl 10017410 -10023a6e: f104 0910 add.w r9, r4, #16 -10023a72: 4640 mov r0, r8 -10023a74: f105 010a add.w r1, r5, #10 -10023a78: 2206 movs r2, #6 -10023a7a: f7f3 fcc9 bl 10017410 -10023a7e: 2206 movs r2, #6 -10023a80: 4648 mov r0, r9 -10023a82: f105 0110 add.w r1, r5, #16 -10023a86: f7f3 fcc3 bl 10017410 -10023a8a: 4658 mov r0, fp -10023a8c: 4651 mov r1, sl -10023a8e: f7ff ffa9 bl 100239e4 -10023a92: 77a0 strb r0, [r4, #30] -10023a94: f896 306c ldrb.w r3, [r6, #108] ; 0x6c -10023a98: f104 0018 add.w r0, r4, #24 -10023a9c: 77e3 strb r3, [r4, #31] -10023a9e: 882a ldrh r2, [r5, #0] -10023aa0: f412 7f80 tst.w r2, #256 ; 0x100 -10023aa4: bf0c ite eq -10023aa6: 2300 moveq r3, #0 -10023aa8: 2302 movne r3, #2 -10023aaa: f3c2 2240 ubfx r2, r2, #9, #1 -10023aae: 4313 orrs r3, r2 -10023ab0: 2b01 cmp r3, #1 -10023ab2: d004 beq.n 10023abe -10023ab4: 2b02 cmp r3, #2 -10023ab6: d008 beq.n 10023aca -10023ab8: b94b cbnz r3, 10023ace -10023aba: 4649 mov r1, r9 -10023abc: e000 b.n 10023ac0 -10023abe: 4641 mov r1, r8 -10023ac0: 2206 movs r2, #6 -10023ac2: e8bd 4ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10023ac6: f7f3 bca3 b.w 10017410 -10023aca: 4639 mov r1, r7 -10023acc: e7f8 b.n 10023ac0 -10023ace: 2100 movs r1, #0 -10023ad0: 2206 movs r2, #6 -10023ad2: e8bd 4ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10023ad6: f7f3 bcab b.w 10017430 - -10023ada : -10023ada: b5f0 push {r4, r5, r6, r7, lr} -10023adc: 2330 movs r3, #48 ; 0x30 -10023ade: b085 sub sp, #20 -10023ae0: 460d mov r5, r1 -10023ae2: f88d 1007 strb.w r1, [sp, #7] -10023ae6: 4604 mov r4, r0 -10023ae8: 4617 mov r7, r2 -10023aea: 9303 str r3, [sp, #12] -10023aec: f890 1c44 ldrb.w r1, [r0, #3140] ; 0xc44 -10023af0: 2d00 cmp r5, #0 -10023af2: d036 beq.n 10023b62 -10023af4: 2900 cmp r1, #0 -10023af6: d151 bne.n 10023b9c -10023af8: 2501 movs r5, #1 -10023afa: f500 6645 add.w r6, r0, #3152 ; 0xc50 -10023afe: f880 551f strb.w r5, [r0, #1311] ; 0x51f -10023b02: f880 5520 strb.w r5, [r0, #1312] ; 0x520 -10023b06: 4630 mov r0, r6 -10023b08: f7f3 fd1a bl 10017540 -10023b0c: f894 3c44 ldrb.w r3, [r4, #3140] ; 0xc44 -10023b10: b93b cbnz r3, 10023b22 -10023b12: f604 4048 addw r0, r4, #3144 ; 0xc48 -10023b16: f7f3 fc93 bl 10017440 -10023b1a: f884 5c44 strb.w r5, [r4, #3140] ; 0xc44 -10023b1e: f884 7c45 strb.w r7, [r4, #3141] ; 0xc45 -10023b22: 4630 mov r0, r6 -10023b24: 2100 movs r1, #0 -10023b26: f7f3 fd15 bl 10017554 -10023b2a: 2100 movs r1, #0 -10023b2c: 4620 mov r0, r4 -10023b2e: f002 fd9b bl 10026668 -10023b32: 4620 mov r0, r4 -10023b34: f002 fc8f bl 10026456 -10023b38: 4620 mov r0, r4 -10023b3a: f10d 0207 add.w r2, sp, #7 -10023b3e: 2151 movs r1, #81 ; 0x51 -10023b40: f00e fcc7 bl 100324d2 -10023b44: aa03 add r2, sp, #12 -10023b46: 4620 mov r0, r4 -10023b48: 2134 movs r1, #52 ; 0x34 -10023b4a: f00e fcc2 bl 100324d2 -10023b4e: 4620 mov r0, r4 -10023b50: f004 fd44 bl 100285dc -10023b54: 4620 mov r0, r4 -10023b56: f06f 0101 mvn.w r1, #1 -10023b5a: 2200 movs r2, #0 -10023b5c: f004 fd54 bl 10028608 -10023b60: e01c b.n 10023b9c -10023b62: b1d9 cbz r1, 10023b9c -10023b64: f7e9 fd78 bl 1000d658 -10023b68: 4620 mov r0, r4 -10023b6a: 2151 movs r1, #81 ; 0x51 -10023b6c: f10d 0207 add.w r2, sp, #7 -10023b70: f00e fcaf bl 100324d2 -10023b74: 4620 mov r0, r4 -10023b76: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e -10023b7a: 462a mov r2, r5 -10023b7c: 462b mov r3, r5 -10023b7e: f884 551f strb.w r5, [r4, #1311] ; 0x51f -10023b82: f884 5520 strb.w r5, [r4, #1312] ; 0x520 -10023b86: f004 fdb9 bl 100286fc -10023b8a: f241 33bf movw r3, #5055 ; 0x13bf -10023b8e: 4620 mov r0, r4 -10023b90: 5ce1 ldrb r1, [r4, r3] -10023b92: f002 fd69 bl 10026668 -10023b96: 4620 mov r0, r4 -10023b98: f004 fd2b bl 100285f2 -10023b9c: b005 add sp, #20 -10023b9e: bdf0 pop {r4, r5, r6, r7, pc} - -10023ba0 <_promisc_deinit>: -10023ba0: b570 push {r4, r5, r6, lr} -10023ba2: f500 6545 add.w r5, r0, #3152 ; 0xc50 -10023ba6: 4604 mov r4, r0 -10023ba8: 2100 movs r1, #0 -10023baa: 4628 mov r0, r5 -10023bac: f7f3 fcc8 bl 10017540 -10023bb0: f894 3c44 ldrb.w r3, [r4, #3140] ; 0xc44 -10023bb4: b92b cbnz r3, 10023bc2 <_promisc_deinit+0x22> -10023bb6: 4628 mov r0, r5 -10023bb8: 2100 movs r1, #0 -10023bba: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10023bbe: f7f3 bcc9 b.w 10017554 -10023bc2: 2300 movs r3, #0 -10023bc4: f884 3c44 strb.w r3, [r4, #3140] ; 0xc44 -10023bc8: f884 3c45 strb.w r3, [r4, #3141] ; 0xc45 -10023bcc: f604 4048 addw r0, r4, #3144 ; 0xc48 -10023bd0: f8d4 1c48 ldr.w r1, [r4, #3144] ; 0xc48 -10023bd4: f7f3 fcd5 bl 10017582 -10023bd8: 2800 cmp r0, #0 -10023bda: d1ec bne.n 10023bb6 <_promisc_deinit+0x16> -10023bdc: f8d4 6c48 ldr.w r6, [r4, #3144] ; 0xc48 -10023be0: 4630 mov r0, r6 -10023be2: f7f3 fc41 bl 10017468 -10023be6: 4630 mov r0, r6 -10023be8: 2134 movs r1, #52 ; 0x34 -10023bea: f7f3 fc0e bl 1001740a -10023bee: e7ed b.n 10023bcc <_promisc_deinit+0x2c> - -10023bf0 <_promisc_recv_func>: -10023bf0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10023bf4: 460c mov r4, r1 -10023bf6: 6fa5 ldr r5, [r4, #120] ; 0x78 -10023bf8: b09b sub sp, #108 ; 0x6c -10023bfa: 882a ldrh r2, [r5, #0] -10023bfc: f600 3154 addw r1, r0, #2900 ; 0xb54 -10023c00: b2d3 uxtb r3, r2 -10023c02: f412 7f80 tst.w r2, #256 ; 0x100 -10023c06: 9109 str r1, [sp, #36] ; 0x24 -10023c08: f003 01fc and.w r1, r3, #252 ; 0xfc -10023c0c: 9105 str r1, [sp, #20] -10023c0e: f3c2 2240 ubfx r2, r2, #9, #1 -10023c12: bf0c ite eq -10023c14: 2100 moveq r1, #0 -10023c16: 2102 movne r1, #2 -10023c18: 430a orrs r2, r1 -10023c1a: f884 2022 strb.w r2, [r4, #34] ; 0x22 -10023c1e: 882a ldrh r2, [r5, #0] -10023c20: f013 030c ands.w r3, r3, #12 -10023c24: f3c2 3280 ubfx r2, r2, #14, #1 -10023c28: f884 202d strb.w r2, [r4, #45] ; 0x2d -10023c2c: 882a ldrh r2, [r5, #0] -10023c2e: 4606 mov r6, r0 -10023c30: ea4f 32d2 mov.w r2, r2, lsr #15 -10023c34: f884 202c strb.w r2, [r4, #44] ; 0x2c -10023c38: d003 beq.n 10023c42 <_promisc_recv_func+0x52> -10023c3a: 2b08 cmp r3, #8 -10023c3c: f000 815b beq.w 10023ef6 <_promisc_recv_func+0x306> -10023c40: e228 b.n 10024094 <_promisc_recv_func+0x4a4> -10023c42: 9a05 ldr r2, [sp, #20] -10023c44: 2a80 cmp r2, #128 ; 0x80 -10023c46: d002 beq.n 10023c4e <_promisc_recv_func+0x5e> -10023c48: 2a50 cmp r2, #80 ; 0x50 -10023c4a: f040 813f bne.w 10023ecc <_promisc_recv_func+0x2dc> -10023c4e: f896 3c45 ldrb.w r3, [r6, #3141] ; 0xc45 -10023c52: 2b00 cmp r3, #0 -10023c54: f000 813a beq.w 10023ecc <_promisc_recv_func+0x2dc> -10023c58: f894 306c ldrb.w r3, [r4, #108] ; 0x6c -10023c5c: 2100 movs r1, #0 -10023c5e: 2220 movs r2, #32 -10023c60: a812 add r0, sp, #72 ; 0x48 -10023c62: f105 0b18 add.w fp, r5, #24 -10023c66: 9307 str r3, [sp, #28] -10023c68: f8ad 102a strh.w r1, [sp, #42] ; 0x2a -10023c6c: f8ad 102c strh.w r1, [sp, #44] ; 0x2c -10023c70: f8ad 102e strh.w r1, [sp, #46] ; 0x2e -10023c74: 910f str r1, [sp, #60] ; 0x3c -10023c76: 9110 str r1, [sp, #64] ; 0x40 -10023c78: f8d4 a070 ldr.w sl, [r4, #112] ; 0x70 -10023c7c: f7f3 fbd8 bl 10017430 -10023c80: 4658 mov r0, fp -10023c82: f7f9 fc95 bl 1001d5b0 -10023c86: 2202 movs r2, #2 -10023c88: 4601 mov r1, r0 -10023c8a: f10d 002a add.w r0, sp, #42 ; 0x2a -10023c8e: f7f3 fbbf bl 10017410 -10023c92: f8bd 102a ldrh.w r1, [sp, #42] ; 0x2a -10023c96: f105 0824 add.w r8, r5, #36 ; 0x24 -10023c9a: f1aa 0724 sub.w r7, sl, #36 ; 0x24 -10023c9e: 9108 str r1, [sp, #32] -10023ca0: 4640 mov r0, r8 -10023ca2: 2103 movs r1, #3 -10023ca4: aa0c add r2, sp, #48 ; 0x30 -10023ca6: 463b mov r3, r7 -10023ca8: f01a fdfe bl 1003e8a8 <__rtw_get_ie_veneer> -10023cac: b110 cbz r0, 10023cb4 <_promisc_recv_func+0xc4> -10023cae: 9b0c ldr r3, [sp, #48] ; 0x30 -10023cb0: b113 cbz r3, 10023cb8 <_promisc_recv_func+0xc8> -10023cb2: 7880 ldrb r0, [r0, #2] -10023cb4: 9006 str r0, [sp, #24] -10023cb6: e000 b.n 10023cba <_promisc_recv_func+0xca> -10023cb8: 9306 str r3, [sp, #24] -10023cba: 2100 movs r1, #0 -10023cbc: 4640 mov r0, r8 -10023cbe: aa0e add r2, sp, #56 ; 0x38 -10023cc0: 463b mov r3, r7 -10023cc2: f01a fdf1 bl 1003e8a8 <__rtw_get_ie_veneer> -10023cc6: 4601 mov r1, r0 -10023cc8: 2800 cmp r0, #0 -10023cca: f000 80ff beq.w 10023ecc <_promisc_recv_func+0x2dc> -10023cce: 7843 ldrb r3, [r0, #1] -10023cd0: b13b cbz r3, 10023ce2 <_promisc_recv_func+0xf2> -10023cd2: 9a0e ldr r2, [sp, #56] ; 0x38 -10023cd4: 2a20 cmp r2, #32 -10023cd6: f200 80f9 bhi.w 10023ecc <_promisc_recv_func+0x2dc> -10023cda: a812 add r0, sp, #72 ; 0x48 -10023cdc: 3102 adds r1, #2 -10023cde: f7f3 fb97 bl 10017410 -10023ce2: 4640 mov r0, r8 -10023ce4: 213d movs r1, #61 ; 0x3d -10023ce6: aa0d add r2, sp, #52 ; 0x34 -10023ce8: 463b mov r3, r7 -10023cea: f01a fddd bl 1003e8a8 <__rtw_get_ie_veneer> -10023cee: b150 cbz r0, 10023d06 <_promisc_recv_func+0x116> -10023cf0: 9b0d ldr r3, [sp, #52] ; 0x34 -10023cf2: b153 cbz r3, 10023d0a <_promisc_recv_func+0x11a> -10023cf4: 78c3 ldrb r3, [r0, #3] -10023cf6: f003 0204 and.w r2, r3, #4 -10023cfa: f002 01ff and.w r1, r2, #255 ; 0xff -10023cfe: b132 cbz r2, 10023d0e <_promisc_recv_func+0x11e> -10023d00: f003 0303 and.w r3, r3, #3 -10023d04: e001 b.n 10023d0a <_promisc_recv_func+0x11a> -10023d06: 9004 str r0, [sp, #16] -10023d08: e002 b.n 10023d10 <_promisc_recv_func+0x120> -10023d0a: 9304 str r3, [sp, #16] -10023d0c: e000 b.n 10023d10 <_promisc_recv_func+0x120> -10023d0e: 9104 str r1, [sp, #16] -10023d10: f04f 0900 mov.w r9, #0 -10023d14: ab0b add r3, sp, #44 ; 0x2c -10023d16: 9301 str r3, [sp, #4] -10023d18: f1aa 0118 sub.w r1, sl, #24 -10023d1c: f8cd 9000 str.w r9, [sp] -10023d20: 4658 mov r0, fp -10023d22: 464a mov r2, r9 -10023d24: f10d 032e add.w r3, sp, #46 ; 0x2e -10023d28: f01a fda6 bl 1003e878 <__rtw_get_sec_ie_veneer> -10023d2c: f8bd a02c ldrh.w sl, [sp, #44] ; 0x2c -10023d30: f1ba 0f00 cmp.w sl, #0 -10023d34: d010 beq.n 10023d58 <_promisc_recv_func+0x168> -10023d36: 4640 mov r0, r8 -10023d38: a911 add r1, sp, #68 ; 0x44 -10023d3a: 463a mov r2, r7 -10023d3c: f01a fda0 bl 1003e880 <__rtw_get_wpa_ie_veneer> -10023d40: b320 cbz r0, 10023d8c <_promisc_recv_func+0x19c> -10023d42: 9b11 ldr r3, [sp, #68] ; 0x44 -10023d44: b313 cbz r3, 10023d8c <_promisc_recv_func+0x19c> -10023d46: f8bd 102c ldrh.w r1, [sp, #44] ; 0x2c -10023d4a: f8cd 9000 str.w r9, [sp] -10023d4e: aa0f add r2, sp, #60 ; 0x3c -10023d50: ab10 add r3, sp, #64 ; 0x40 -10023d52: f01a fd85 bl 1003e860 <__rtw_parse_wpa_ie_veneer> -10023d56: e019 b.n 10023d8c <_promisc_recv_func+0x19c> -10023d58: f8bd 302e ldrh.w r3, [sp, #46] ; 0x2e -10023d5c: b183 cbz r3, 10023d80 <_promisc_recv_func+0x190> -10023d5e: 4640 mov r0, r8 -10023d60: a911 add r1, sp, #68 ; 0x44 -10023d62: 463a mov r2, r7 -10023d64: f01a fd98 bl 1003e898 <__rtw_get_wpa2_ie_veneer> -10023d68: b180 cbz r0, 10023d8c <_promisc_recv_func+0x19c> -10023d6a: 9b11 ldr r3, [sp, #68] ; 0x44 -10023d6c: b173 cbz r3, 10023d8c <_promisc_recv_func+0x19c> -10023d6e: f8bd 102e ldrh.w r1, [sp, #46] ; 0x2e -10023d72: f8cd a000 str.w sl, [sp] -10023d76: aa0f add r2, sp, #60 ; 0x3c -10023d78: ab10 add r3, sp, #64 ; 0x40 -10023d7a: f01a fd65 bl 1003e848 <__rtw_parse_wpa2_ie_veneer> -10023d7e: e005 b.n 10023d8c <_promisc_recv_func+0x19c> -10023d80: 9a08 ldr r2, [sp, #32] -10023d82: 06d3 lsls r3, r2, #27 -10023d84: bf4c ite mi -10023d86: 2302 movmi r3, #2 -10023d88: 2301 movpl r3, #1 -10023d8a: 930f str r3, [sp, #60] ; 0x3c -10023d8c: 9f0f ldr r7, [sp, #60] ; 0x3c -10023d8e: 2f04 cmp r7, #4 -10023d90: d01d beq.n 10023dce <_promisc_recv_func+0x1de> -10023d92: dc02 bgt.n 10023d9a <_promisc_recv_func+0x1aa> -10023d94: 2f02 cmp r7, #2 -10023d96: d01f beq.n 10023dd8 <_promisc_recv_func+0x1e8> -10023d98: e003 b.n 10023da2 <_promisc_recv_func+0x1b2> -10023d9a: 2f08 cmp r7, #8 -10023d9c: d003 beq.n 10023da6 <_promisc_recv_func+0x1b6> -10023d9e: 2f10 cmp r7, #16 -10023da0: d00b beq.n 10023dba <_promisc_recv_func+0x1ca> -10023da2: 2701 movs r7, #1 -10023da4: e018 b.n 10023dd8 <_promisc_recv_func+0x1e8> -10023da6: f8bd 302e ldrh.w r3, [sp, #46] ; 0x2e -10023daa: b993 cbnz r3, 10023dd2 <_promisc_recv_func+0x1e2> -10023dac: f8bd 302c ldrh.w r3, [sp, #44] ; 0x2c -10023db0: 2b00 cmp r3, #0 -10023db2: bf14 ite ne -10023db4: 2703 movne r7, #3 -10023db6: 2701 moveq r7, #1 -10023db8: e00e b.n 10023dd8 <_promisc_recv_func+0x1e8> -10023dba: f8bd 302e ldrh.w r3, [sp, #46] ; 0x2e -10023dbe: b953 cbnz r3, 10023dd6 <_promisc_recv_func+0x1e6> -10023dc0: f8bd 302c ldrh.w r3, [sp, #44] ; 0x2c -10023dc4: 2b00 cmp r3, #0 -10023dc6: bf14 ite ne -10023dc8: 2704 movne r7, #4 -10023dca: 2701 moveq r7, #1 -10023dcc: e004 b.n 10023dd8 <_promisc_recv_func+0x1e8> -10023dce: 2709 movs r7, #9 -10023dd0: e002 b.n 10023dd8 <_promisc_recv_func+0x1e8> -10023dd2: 2705 movs r7, #5 -10023dd4: e000 b.n 10023dd8 <_promisc_recv_func+0x1e8> -10023dd6: 2706 movs r7, #6 -10023dd8: f896 3c44 ldrb.w r3, [r6, #3140] ; 0xc44 -10023ddc: f8dd 8038 ldr.w r8, [sp, #56] ; 0x38 -10023de0: 2b00 cmp r3, #0 -10023de2: d073 beq.n 10023ecc <_promisc_recv_func+0x2dc> -10023de4: f105 0910 add.w r9, r5, #16 -10023de8: 49a9 ldr r1, [pc, #676] ; (10024090 <_promisc_recv_func+0x4a0>) -10023dea: 4648 mov r0, r9 -10023dec: 2206 movs r2, #6 -10023dee: f7f3 fb17 bl 10017420 -10023df2: 4601 mov r1, r0 -10023df4: 2800 cmp r0, #0 -10023df6: d169 bne.n 10023ecc <_promisc_recv_func+0x2dc> -10023df8: f506 6345 add.w r3, r6, #3152 ; 0xc50 -10023dfc: 4618 mov r0, r3 -10023dfe: 9308 str r3, [sp, #32] -10023e00: f7f3 fb9e bl 10017540 -10023e04: f8d6 bc48 ldr.w fp, [r6, #3144] ; 0xc48 -10023e08: f606 4a48 addw sl, r6, #3144 ; 0xc48 -10023e0c: 4650 mov r0, sl -10023e0e: 4659 mov r1, fp -10023e10: f7f3 fbb7 bl 10017582 -10023e14: b9d0 cbnz r0, 10023e4c <_promisc_recv_func+0x25c> -10023e16: f10b 0008 add.w r0, fp, #8 -10023e1a: 4649 mov r1, r9 -10023e1c: 2206 movs r2, #6 -10023e1e: f7f3 faff bl 10017420 -10023e22: b180 cbz r0, 10023e46 <_promisc_recv_func+0x256> -10023e24: 9906 ldr r1, [sp, #24] -10023e26: 9a04 ldr r2, [sp, #16] -10023e28: f88b 100f strb.w r1, [fp, #15] -10023e2c: f88b 2031 strb.w r2, [fp, #49] ; 0x31 -10023e30: f88b 700e strb.w r7, [fp, #14] -10023e34: f88b 8030 strb.w r8, [fp, #48] ; 0x30 -10023e38: f10b 0010 add.w r0, fp, #16 -10023e3c: a912 add r1, sp, #72 ; 0x48 -10023e3e: 4642 mov r2, r8 -10023e40: f7f3 fae6 bl 10017410 -10023e44: e002 b.n 10023e4c <_promisc_recv_func+0x25c> -10023e46: f8db b000 ldr.w fp, [fp] -10023e4a: e7dd b.n 10023e08 <_promisc_recv_func+0x218> -10023e4c: 45d3 cmp fp, sl -10023e4e: d139 bne.n 10023ec4 <_promisc_recv_func+0x2d4> -10023e50: 9b07 ldr r3, [sp, #28] -10023e52: fa4f fa83 sxtb.w sl, r3 -10023e56: fa1f fa8a uxth.w sl, sl -10023e5a: f8cd a01c str.w sl, [sp, #28] -10023e5e: f8d6 ac48 ldr.w sl, [r6, #3144] ; 0xc48 -10023e62: 4658 mov r0, fp -10023e64: 4651 mov r1, sl -10023e66: f7f3 fb8c bl 10017582 -10023e6a: b928 cbnz r0, 10023e78 <_promisc_recv_func+0x288> -10023e6c: 9b07 ldr r3, [sp, #28] -10023e6e: f9ba 1032 ldrsh.w r1, [sl, #50] ; 0x32 -10023e72: b21a sxth r2, r3 -10023e74: 4291 cmp r1, r2 -10023e76: dc22 bgt.n 10023ebe <_promisc_recv_func+0x2ce> -10023e78: 2034 movs r0, #52 ; 0x34 -10023e7a: f7f3 fc99 bl 100177b0 -10023e7e: 4603 mov r3, r0 -10023e80: b300 cbz r0, 10023ec4 <_promisc_recv_func+0x2d4> -10023e82: 4649 mov r1, r9 -10023e84: 3008 adds r0, #8 -10023e86: 2206 movs r2, #6 -10023e88: 9303 str r3, [sp, #12] -10023e8a: f7f3 fac1 bl 10017410 -10023e8e: 9b03 ldr r3, [sp, #12] -10023e90: 9906 ldr r1, [sp, #24] -10023e92: 9a04 ldr r2, [sp, #16] -10023e94: 739f strb r7, [r3, #14] -10023e96: 73d9 strb r1, [r3, #15] -10023e98: f883 8030 strb.w r8, [r3, #48] ; 0x30 -10023e9c: f883 2031 strb.w r2, [r3, #49] ; 0x31 -10023ea0: f103 0010 add.w r0, r3, #16 -10023ea4: a912 add r1, sp, #72 ; 0x48 -10023ea6: 4642 mov r2, r8 -10023ea8: 9303 str r3, [sp, #12] -10023eaa: f7f3 fab1 bl 10017410 -10023eae: 9b03 ldr r3, [sp, #12] -10023eb0: 9907 ldr r1, [sp, #28] -10023eb2: 4618 mov r0, r3 -10023eb4: 8659 strh r1, [r3, #50] ; 0x32 -10023eb6: 4651 mov r1, sl -10023eb8: f7f3 fad0 bl 1001745c -10023ebc: e002 b.n 10023ec4 <_promisc_recv_func+0x2d4> -10023ebe: f8da a000 ldr.w sl, [sl] -10023ec2: e7ce b.n 10023e62 <_promisc_recv_func+0x272> -10023ec4: 9808 ldr r0, [sp, #32] -10023ec6: 2100 movs r1, #0 -10023ec8: f7f3 fb44 bl 10017554 -10023ecc: f8d6 3680 ldr.w r3, [r6, #1664] ; 0x680 -10023ed0: f003 0303 and.w r3, r3, #3 -10023ed4: 2b03 cmp r3, #3 -10023ed6: f040 80dd bne.w 10024094 <_promisc_recv_func+0x4a4> -10023eda: f896 7c5a ldrb.w r7, [r6, #3162] ; 0xc5a -10023ede: 2f00 cmp r7, #0 -10023ee0: f000 80d9 beq.w 10024096 <_promisc_recv_func+0x4a6> -10023ee4: 9a05 ldr r2, [sp, #20] -10023ee6: 2a40 cmp r2, #64 ; 0x40 -10023ee8: f040 80d4 bne.w 10024094 <_promisc_recv_func+0x4a4> -10023eec: 4630 mov r0, r6 -10023eee: 4621 mov r1, r4 -10023ef0: f7fb f9d4 bl 1001f29c -10023ef4: e0ce b.n 10024094 <_promisc_recv_func+0x4a4> -10023ef6: 9905 ldr r1, [sp, #20] -10023ef8: 09cb lsrs r3, r1, #7 -10023efa: f884 3024 strb.w r3, [r4, #36] ; 0x24 -10023efe: 882b ldrh r3, [r5, #0] -10023f00: f403 7280 and.w r2, r3, #256 ; 0x100 -10023f04: b292 uxth r2, r2 -10023f06: 2a00 cmp r2, #0 -10023f08: bf0c ite eq -10023f0a: 2100 moveq r1, #0 -10023f0c: 2102 movne r1, #2 -10023f0e: f3c3 2340 ubfx r3, r3, #9, #1 -10023f12: 4319 orrs r1, r3 -10023f14: 2901 cmp r1, #1 -10023f16: d003 beq.n 10023f20 <_promisc_recv_func+0x330> -10023f18: d302 bcc.n 10023f20 <_promisc_recv_func+0x330> -10023f1a: f105 0810 add.w r8, r5, #16 -10023f1e: e001 b.n 10023f24 <_promisc_recv_func+0x334> -10023f20: f105 0804 add.w r8, r5, #4 -10023f24: 2a00 cmp r2, #0 -10023f26: bf0c ite eq -10023f28: 2200 moveq r2, #0 -10023f2a: 2202 movne r2, #2 -10023f2c: 4313 orrs r3, r2 -10023f2e: 2b01 cmp r3, #1 -10023f30: d003 beq.n 10023f3a <_promisc_recv_func+0x34a> -10023f32: d305 bcc.n 10023f40 <_promisc_recv_func+0x350> -10023f34: 2b02 cmp r3, #2 -10023f36: d003 beq.n 10023f40 <_promisc_recv_func+0x350> -10023f38: e005 b.n 10023f46 <_promisc_recv_func+0x356> -10023f3a: f105 0710 add.w r7, r5, #16 -10023f3e: e004 b.n 10023f4a <_promisc_recv_func+0x35a> -10023f40: f105 070a add.w r7, r5, #10 -10023f44: e001 b.n 10023f4a <_promisc_recv_func+0x35a> -10023f46: f105 0718 add.w r7, r5, #24 -10023f4a: 4628 mov r0, r5 -10023f4c: f7ff fcf2 bl 10023934 -10023f50: 4641 mov r1, r8 -10023f52: 2206 movs r2, #6 -10023f54: 4681 mov r9, r0 -10023f56: f104 0036 add.w r0, r4, #54 ; 0x36 -10023f5a: f7f3 fa59 bl 10017410 -10023f5e: f104 003c add.w r0, r4, #60 ; 0x3c -10023f62: 4639 mov r1, r7 -10023f64: 2206 movs r2, #6 -10023f66: f7f3 fa53 bl 10017410 -10023f6a: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10023f6e: 2b03 cmp r3, #3 -10023f70: f200 8090 bhi.w 10024094 <_promisc_recv_func+0x4a4> -10023f74: e8df f003 tbb [pc, r3] -10023f78: 27100602 .word 0x27100602 -10023f7c: f104 0048 add.w r0, r4, #72 ; 0x48 -10023f80: 4641 mov r1, r8 -10023f82: e00c b.n 10023f9e <_promisc_recv_func+0x3ae> -10023f84: f104 0048 add.w r0, r4, #72 ; 0x48 -10023f88: 4641 mov r1, r8 -10023f8a: 2206 movs r2, #6 -10023f8c: f7f3 fa40 bl 10017410 -10023f90: f104 0042 add.w r0, r4, #66 ; 0x42 -10023f94: 4649 mov r1, r9 -10023f96: e008 b.n 10023faa <_promisc_recv_func+0x3ba> -10023f98: f104 0048 add.w r0, r4, #72 ; 0x48 -10023f9c: 4649 mov r1, r9 -10023f9e: 2206 movs r2, #6 -10023fa0: f7f3 fa36 bl 10017410 -10023fa4: f104 0042 add.w r0, r4, #66 ; 0x42 -10023fa8: 4639 mov r1, r7 -10023faa: 2206 movs r2, #6 -10023fac: f7f3 fa30 bl 10017410 -10023fb0: f894 3024 ldrb.w r3, [r4, #36] ; 0x24 -10023fb4: 2b01 cmp r3, #1 -10023fb6: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -10023fba: d112 bne.n 10023fe2 <_promisc_recv_func+0x3f2> -10023fbc: 2b03 cmp r3, #3 -10023fbe: bf14 ite ne -10023fc0: 231a movne r3, #26 -10023fc2: 2320 moveq r3, #32 -10023fc4: e011 b.n 10023fea <_promisc_recv_func+0x3fa> -10023fc6: f104 0048 add.w r0, r4, #72 ; 0x48 -10023fca: 1d29 adds r1, r5, #4 -10023fcc: 2206 movs r2, #6 -10023fce: f7f3 fa1f bl 10017410 -10023fd2: f104 0042 add.w r0, r4, #66 ; 0x42 -10023fd6: f105 010a add.w r1, r5, #10 -10023fda: 2206 movs r2, #6 -10023fdc: f7f3 fa18 bl 10017410 -10023fe0: e058 b.n 10024094 <_promisc_recv_func+0x4a4> -10023fe2: 2b03 cmp r3, #3 -10023fe4: bf14 ite ne -10023fe6: 2318 movne r3, #24 -10023fe8: 231e moveq r3, #30 -10023fea: f884 3021 strb.w r3, [r4, #33] ; 0x21 -10023fee: f894 302c ldrb.w r3, [r4, #44] ; 0x2c -10023ff2: b123 cbz r3, 10023ffe <_promisc_recv_func+0x40e> -10023ff4: f894 3021 ldrb.w r3, [r4, #33] ; 0x21 -10023ff8: 3304 adds r3, #4 -10023ffa: f884 3021 strb.w r3, [r4, #33] ; 0x21 -10023ffe: 4630 mov r0, r6 -10024000: 4649 mov r1, r9 -10024002: f7ff fcef bl 100239e4 -10024006: 28ff cmp r0, #255 ; 0xff -10024008: d044 beq.n 10024094 <_promisc_recv_func+0x4a4> -1002400a: f894 302d ldrb.w r3, [r4, #45] ; 0x2d -1002400e: 2b00 cmp r3, #0 -10024010: d035 beq.n 1002407e <_promisc_recv_func+0x48e> -10024012: f896 3c45 ldrb.w r3, [r6, #3141] ; 0xc45 -10024016: b393 cbz r3, 1002407e <_promisc_recv_func+0x48e> -10024018: 3801 subs r0, #1 -1002401a: 2808 cmp r0, #8 -1002401c: d80e bhi.n 1002403c <_promisc_recv_func+0x44c> -1002401e: e8df f000 tbb [pc, r0] -10024022: 050d .short 0x050d -10024024: 09070907 .word 0x09070907 -10024028: 0d09 .short 0x0d09 -1002402a: 0b .byte 0x0b -1002402b: 00 .byte 0x00 -1002402c: 2301 movs r3, #1 -1002402e: e006 b.n 1002403e <_promisc_recv_func+0x44e> -10024030: 2302 movs r3, #2 -10024032: e004 b.n 1002403e <_promisc_recv_func+0x44e> -10024034: 2304 movs r3, #4 -10024036: e002 b.n 1002403e <_promisc_recv_func+0x44e> -10024038: 2305 movs r3, #5 -1002403a: e000 b.n 1002403e <_promisc_recv_func+0x44e> -1002403c: 2300 movs r3, #0 -1002403e: f884 302f strb.w r3, [r4, #47] ; 0x2f -10024042: f894 302f ldrb.w r3, [r4, #47] ; 0x2f -10024046: 3b01 subs r3, #1 -10024048: 2b05 cmp r3, #5 -1002404a: d812 bhi.n 10024072 <_promisc_recv_func+0x482> -1002404c: e8df f003 tbb [pc, r3] -10024050: 0a110503 .word 0x0a110503 -10024054: 0c03 .short 0x0c03 -10024056: 2304 movs r3, #4 -10024058: e00c b.n 10024074 <_promisc_recv_func+0x484> -1002405a: 2308 movs r3, #8 -1002405c: f884 3030 strb.w r3, [r4, #48] ; 0x30 -10024060: 2304 movs r3, #4 -10024062: e009 b.n 10024078 <_promisc_recv_func+0x488> -10024064: 2308 movs r3, #8 -10024066: e005 b.n 10024074 <_promisc_recv_func+0x484> -10024068: 2312 movs r3, #18 -1002406a: f884 3030 strb.w r3, [r4, #48] ; 0x30 -1002406e: 2310 movs r3, #16 -10024070: e002 b.n 10024078 <_promisc_recv_func+0x488> -10024072: 2300 movs r3, #0 -10024074: f884 3030 strb.w r3, [r4, #48] ; 0x30 -10024078: f884 3031 strb.w r3, [r4, #49] ; 0x31 -1002407c: e006 b.n 1002408c <_promisc_recv_func+0x49c> -1002407e: 2300 movs r3, #0 -10024080: f884 302f strb.w r3, [r4, #47] ; 0x2f -10024084: f884 3031 strb.w r3, [r4, #49] ; 0x31 -10024088: f884 3030 strb.w r3, [r4, #48] ; 0x30 -1002408c: 2701 movs r7, #1 -1002408e: e002 b.n 10024096 <_promisc_recv_func+0x4a6> -10024090: 100415e9 .word 0x100415e9 -10024094: 2700 movs r7, #0 -10024096: f8df 80dc ldr.w r8, [pc, #220] ; 10024174 <_promisc_recv_func+0x584> -1002409a: 4834 ldr r0, [pc, #208] ; (1002416c <_promisc_recv_func+0x57c>) -1002409c: f7f3 fa14 bl 100174c8 -100240a0: f8d8 3000 ldr.w r3, [r8] -100240a4: b1ab cbz r3, 100240d2 <_promisc_recv_func+0x4e2> -100240a6: 4630 mov r0, r6 -100240a8: 4621 mov r1, r4 -100240aa: aa12 add r2, sp, #72 ; 0x48 -100240ac: f7ff fcc3 bl 10023a36 -100240b0: 6f27 ldr r7, [r4, #112] ; 0x70 -100240b2: 4628 mov r0, r5 -100240b4: b239 sxth r1, r7 -100240b6: f7ff fc51 bl 1002395c -100240ba: b128 cbz r0, 100240c8 <_promisc_recv_func+0x4d8> -100240bc: f8d8 3000 ldr.w r3, [r8] -100240c0: 4628 mov r0, r5 -100240c2: 4639 mov r1, r7 -100240c4: aa12 add r2, sp, #72 ; 0x48 -100240c6: 4798 blx r3 -100240c8: 4828 ldr r0, [pc, #160] ; (1002416c <_promisc_recv_func+0x57c>) -100240ca: f7f3 f9e5 bl 10017498 -100240ce: 2700 movs r7, #0 -100240d0: e01a b.n 10024108 <_promisc_recv_func+0x518> -100240d2: 4826 ldr r0, [pc, #152] ; (1002416c <_promisc_recv_func+0x57c>) -100240d4: f7f3 f9e0 bl 10017498 -100240d8: 2f01 cmp r7, #1 -100240da: d115 bne.n 10024108 <_promisc_recv_func+0x518> -100240dc: 4630 mov r0, r6 -100240de: 4621 mov r1, r4 -100240e0: aa12 add r2, sp, #72 ; 0x48 -100240e2: f7ff fca8 bl 10023a36 -100240e6: f894 302f ldrb.w r3, [r4, #47] ; 0x2f -100240ea: 2b02 cmp r3, #2 -100240ec: d113 bne.n 10024116 <_promisc_recv_func+0x526> -100240ee: 6fe3 ldr r3, [r4, #124] ; 0x7c -100240f0: 6fa1 ldr r1, [r4, #120] ; 0x78 -100240f2: f1a3 0208 sub.w r2, r3, #8 -100240f6: 428a cmp r2, r1 -100240f8: bf28 it cs -100240fa: 6f23 ldrcs r3, [r4, #112] ; 0x70 -100240fc: 67e2 str r2, [r4, #124] ; 0x7c -100240fe: bf2a itet cs -10024100: 3b08 subcs r3, #8 -10024102: 67e3 strcc r3, [r4, #124] ; 0x7c -10024104: 6723 strcs r3, [r4, #112] ; 0x70 -10024106: e006 b.n 10024116 <_promisc_recv_func+0x526> -10024108: 4620 mov r0, r4 -1002410a: 9909 ldr r1, [sp, #36] ; 0x24 -1002410c: f002 fc02 bl 10026914 -10024110: 2f01 cmp r7, #1 -10024112: d127 bne.n 10024164 <_promisc_recv_func+0x574> -10024114: e7e2 b.n 100240dc <_promisc_recv_func+0x4ec> -10024116: 4620 mov r0, r4 -10024118: f003 f9f6 bl 10027508 -1002411c: 68a5 ldr r5, [r4, #8] -1002411e: 4607 mov r7, r0 -10024120: b1e5 cbz r5, 1002415c <_promisc_recv_func+0x56c> -10024122: 6fa3 ldr r3, [r4, #120] ; 0x78 -10024124: 4628 mov r0, r5 -10024126: 612b str r3, [r5, #16] -10024128: 6f21 ldr r1, [r4, #112] ; 0x70 -1002412a: f012 fb8e bl 1003684a -1002412e: 6f23 ldr r3, [r4, #112] ; 0x70 -10024130: 480e ldr r0, [pc, #56] ; (1002416c <_promisc_recv_func+0x57c>) -10024132: 622b str r3, [r5, #32] -10024134: f7f3 f9c8 bl 100174c8 -10024138: 4b0d ldr r3, [pc, #52] ; (10024170 <_promisc_recv_func+0x580>) -1002413a: 681e ldr r6, [r3, #0] -1002413c: b15e cbz r6, 10024156 <_promisc_recv_func+0x566> -1002413e: f8d5 8010 ldr.w r8, [r5, #16] -10024142: 6a2d ldr r5, [r5, #32] -10024144: 4640 mov r0, r8 -10024146: b229 sxth r1, r5 -10024148: f7ff fc08 bl 1002395c -1002414c: b118 cbz r0, 10024156 <_promisc_recv_func+0x566> -1002414e: 4640 mov r0, r8 -10024150: 4629 mov r1, r5 -10024152: aa12 add r2, sp, #72 ; 0x48 -10024154: 47b0 blx r6 -10024156: 4805 ldr r0, [pc, #20] ; (1002416c <_promisc_recv_func+0x57c>) -10024158: f7f3 f99e bl 10017498 -1002415c: 4620 mov r0, r4 -1002415e: 9909 ldr r1, [sp, #36] ; 0x24 -10024160: f002 fbd8 bl 10026914 -10024164: 4638 mov r0, r7 -10024166: b01b add sp, #108 ; 0x6c -10024168: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1002416c: 1004bb10 .word 0x1004bb10 -10024170: 1004bb14 .word 0x1004bb14 -10024174: 1004bb0c .word 0x1004bb0c - -10024178 <_promisc_set>: -10024178: b5f8 push {r3, r4, r5, r6, r7, lr} -1002417a: 4605 mov r5, r0 -1002417c: 481e ldr r0, [pc, #120] ; (100241f8 <_promisc_set+0x80>) -1002417e: 460e mov r6, r1 -10024180: 6803 ldr r3, [r0, #0] -10024182: 4617 mov r7, r2 -10024184: b913 cbnz r3, 1002418c <_promisc_set+0x14> -10024186: 2101 movs r1, #1 -10024188: f7f3 f976 bl 10017478 -1002418c: 4b1b ldr r3, [pc, #108] ; (100241fc <_promisc_set+0x84>) -1002418e: 7c1a ldrb r2, [r3, #16] -10024190: 2a00 cmp r2, #0 -10024192: d02d beq.n 100241f0 <_promisc_set+0x78> -10024194: 681b ldr r3, [r3, #0] -10024196: 4818 ldr r0, [pc, #96] ; (100241f8 <_promisc_set+0x80>) -10024198: 691b ldr r3, [r3, #16] -1002419a: 681c ldr r4, [r3, #0] -1002419c: f7f3 f994 bl 100174c8 -100241a0: 2d04 cmp r5, #4 -100241a2: d820 bhi.n 100241e6 <_promisc_set+0x6e> -100241a4: e8df f005 tbb [pc, r5] -100241a8: 130e0e03 .word 0x130e0e03 -100241ac: 18 .byte 0x18 -100241ad: 00 .byte 0x00 -100241ae: 2100 movs r1, #0 -100241b0: 460a mov r2, r1 -100241b2: 4620 mov r0, r4 -100241b4: f7ff fc91 bl 10023ada -100241b8: 4a11 ldr r2, [pc, #68] ; (10024200 <_promisc_set+0x88>) -100241ba: 2300 movs r3, #0 -100241bc: 6013 str r3, [r2, #0] -100241be: 4a11 ldr r2, [pc, #68] ; (10024204 <_promisc_set+0x8c>) -100241c0: 6013 str r3, [r2, #0] -100241c2: e010 b.n 100241e6 <_promisc_set+0x6e> -100241c4: 4b0e ldr r3, [pc, #56] ; (10024200 <_promisc_set+0x88>) -100241c6: 4620 mov r0, r4 -100241c8: 601e str r6, [r3, #0] -100241ca: b2e9 uxtb r1, r5 -100241cc: e008 b.n 100241e0 <_promisc_set+0x68> -100241ce: 4b0d ldr r3, [pc, #52] ; (10024204 <_promisc_set+0x8c>) -100241d0: 4620 mov r0, r4 -100241d2: 601e str r6, [r3, #0] -100241d4: 2103 movs r1, #3 -100241d6: e003 b.n 100241e0 <_promisc_set+0x68> -100241d8: 4b0a ldr r3, [pc, #40] ; (10024204 <_promisc_set+0x8c>) -100241da: 4620 mov r0, r4 -100241dc: 601e str r6, [r3, #0] -100241de: 2104 movs r1, #4 -100241e0: 463a mov r2, r7 -100241e2: f7ff fc7a bl 10023ada -100241e6: 4804 ldr r0, [pc, #16] ; (100241f8 <_promisc_set+0x80>) -100241e8: f7f3 f956 bl 10017498 -100241ec: 2000 movs r0, #0 -100241ee: bdf8 pop {r3, r4, r5, r6, r7, pc} -100241f0: f04f 30ff mov.w r0, #4294967295 -100241f4: bdf8 pop {r3, r4, r5, r6, r7, pc} -100241f6: bf00 nop -100241f8: 1004bb10 .word 0x1004bb10 -100241fc: 1004df9c .word 0x1004df9c -10024200: 1004bb14 .word 0x1004bb14 -10024204: 1004bb0c .word 0x1004bb0c - -10024208 <_is_promisc_enabled>: -10024208: 4b04 ldr r3, [pc, #16] ; (1002421c <_is_promisc_enabled+0x14>) -1002420a: 7c18 ldrb r0, [r3, #16] -1002420c: b120 cbz r0, 10024218 <_is_promisc_enabled+0x10> -1002420e: 681b ldr r3, [r3, #0] -10024210: 691b ldr r3, [r3, #16] -10024212: 681b ldr r3, [r3, #0] -10024214: f893 0c44 ldrb.w r0, [r3, #3140] ; 0xc44 -10024218: 4770 bx lr -1002421a: bf00 nop -1002421c: 1004df9c .word 0x1004df9c - -10024220 : -10024220: b082 sub sp, #8 -10024222: b530 push {r4, r5, lr} -10024224: b085 sub sp, #20 -10024226: ac04 add r4, sp, #16 -10024228: f844 2d04 str.w r2, [r4, #-4]! -1002422c: e88d 0003 stmia.w sp, {r0, r1} -10024230: a908 add r1, sp, #32 -10024232: e881 000c stmia.w r1, {r2, r3} -10024236: 4621 mov r1, r4 -10024238: 2204 movs r2, #4 -1002423a: 4605 mov r5, r0 -1002423c: f7f6 fcb8 bl 1001abb0 -10024240: 9b09 ldr r3, [sp, #36] ; 0x24 -10024242: 4621 mov r1, r4 -10024244: 2204 movs r2, #4 -10024246: 1d28 adds r0, r5, #4 -10024248: 9303 str r3, [sp, #12] -1002424a: f7f6 fcb1 bl 1001abb0 -1002424e: 9b0a ldr r3, [sp, #40] ; 0x28 -10024250: 4621 mov r1, r4 -10024252: 2204 movs r2, #4 -10024254: f105 0008 add.w r0, r5, #8 -10024258: 9303 str r3, [sp, #12] -1002425a: f7f6 fca9 bl 1001abb0 -1002425e: 9b0b ldr r3, [sp, #44] ; 0x2c -10024260: f105 000c add.w r0, r5, #12 -10024264: 4621 mov r1, r4 -10024266: 2204 movs r2, #4 -10024268: 9303 str r3, [sp, #12] -1002426a: f7f6 fca1 bl 1001abb0 -1002426e: 9b01 ldr r3, [sp, #4] -10024270: 2b10 cmp r3, #16 -10024272: d01f beq.n 100242b4 -10024274: 9b0c ldr r3, [sp, #48] ; 0x30 -10024276: 4621 mov r1, r4 -10024278: 2204 movs r2, #4 -1002427a: f105 0010 add.w r0, r5, #16 -1002427e: 9303 str r3, [sp, #12] -10024280: f7f6 fc96 bl 1001abb0 -10024284: 9b0d ldr r3, [sp, #52] ; 0x34 -10024286: 4621 mov r1, r4 -10024288: 2204 movs r2, #4 -1002428a: f105 0014 add.w r0, r5, #20 -1002428e: 9303 str r3, [sp, #12] -10024290: f7f6 fc8e bl 1001abb0 -10024294: 9b0e ldr r3, [sp, #56] ; 0x38 -10024296: 4621 mov r1, r4 -10024298: 2204 movs r2, #4 -1002429a: f105 0018 add.w r0, r5, #24 -1002429e: 9303 str r3, [sp, #12] -100242a0: f7f6 fc86 bl 1001abb0 -100242a4: 9b0f ldr r3, [sp, #60] ; 0x3c -100242a6: f105 001c add.w r0, r5, #28 -100242aa: 4621 mov r1, r4 -100242ac: 2204 movs r2, #4 -100242ae: 9303 str r3, [sp, #12] -100242b0: f7f6 fc7e bl 1001abb0 -100242b4: b005 add sp, #20 -100242b6: e8bd 4030 ldmia.w sp!, {r4, r5, lr} -100242ba: b002 add sp, #8 -100242bc: 4770 bx lr - ... - -100242c0 : -100242c0: b538 push {r3, r4, r5, lr} -100242c2: f241 3338 movw r3, #4920 ; 0x1338 -100242c6: 4604 mov r4, r0 -100242c8: 58c5 ldr r5, [r0, r3] -100242ca: f7f8 fbeb bl 1001caa4 -100242ce: 4620 mov r0, r4 -100242d0: f7f9 fbaf bl 1001da32 -100242d4: 4620 mov r0, r4 -100242d6: 2101 movs r1, #1 -100242d8: f7f9 fb3e bl 1001d958 -100242dc: f894 38f9 ldrb.w r3, [r4, #2297] ; 0x8f9 -100242e0: b1fb cbz r3, 10024322 -100242e2: f894 286e ldrb.w r2, [r4, #2158] ; 0x86e -100242e6: f894 386d ldrb.w r3, [r4, #2157] ; 0x86d -100242ea: 429a cmp r2, r3 -100242ec: d215 bcs.n 1002431a -100242ee: 4b10 ldr r3, [pc, #64] ; (10024330 ) -100242f0: 781a ldrb r2, [r3, #0] -100242f2: b9b2 cbnz r2, 10024322 -100242f4: 2201 movs r2, #1 -100242f6: 701a strb r2, [r3, #0] -100242f8: f8b4 3870 ldrh.w r3, [r4, #2160] ; 0x870 -100242fc: f44f 717a mov.w r1, #1000 ; 0x3e8 -10024300: 4359 muls r1, r3 -10024302: f884 286c strb.w r2, [r4, #2156] ; 0x86c -10024306: f504 6006 add.w r0, r4, #2144 ; 0x860 -1002430a: f012 fd85 bl 10036e18 -1002430e: f894 386e ldrb.w r3, [r4, #2158] ; 0x86e -10024312: 3301 adds r3, #1 -10024314: f884 386e strb.w r3, [r4, #2158] ; 0x86e -10024318: e003 b.n 10024322 -1002431a: 4620 mov r0, r4 -1002431c: 4905 ldr r1, [pc, #20] ; (10024334 ) -1002431e: f00f fc0c bl 10033b3a -10024322: f505 7041 add.w r0, r5, #772 ; 0x304 -10024326: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1002432a: f012 bd7c b.w 10036e26 -1002432e: bf00 nop -10024330: 1004baf0 .word 0x1004baf0 -10024334: 1003fc3d .word 0x1003fc3d - -10024338 : -10024338: b570 push {r4, r5, r6, lr} -1002433a: 6903 ldr r3, [r0, #16] -1002433c: 4606 mov r6, r0 -1002433e: 06d8 lsls r0, r3, #27 -10024340: 460d mov r5, r1 -10024342: d538 bpl.n 100243b6 -10024344: f8d1 30fc ldr.w r3, [r1, #252] ; 0xfc -10024348: f203 138b addw r3, r3, #395 ; 0x18b -1002434c: eb06 0383 add.w r3, r6, r3, lsl #2 -10024350: f8d3 4d08 ldr.w r4, [r3, #3336] ; 0xd08 -10024354: 2c00 cmp r4, #0 -10024356: d043 beq.n 100243e0 -10024358: 7c23 ldrb r3, [r4, #16] -1002435a: f505 709c add.w r0, r5, #312 ; 0x138 -1002435e: f8c5 3114 str.w r3, [r5, #276] ; 0x114 -10024362: f104 01b4 add.w r1, r4, #180 ; 0xb4 -10024366: 2210 movs r2, #16 -10024368: f7f6 fc22 bl 1001abb0 -1002436c: 7c23 ldrb r3, [r4, #16] -1002436e: 2b02 cmp r3, #2 -10024370: d114 bne.n 1002439c -10024372: 6933 ldr r3, [r6, #16] -10024374: 06d9 lsls r1, r3, #27 -10024376: d50b bpl.n 10024390 -10024378: f104 01c4 add.w r1, r4, #196 ; 0xc4 -1002437c: f505 708c add.w r0, r5, #280 ; 0x118 -10024380: 2208 movs r2, #8 -10024382: f7f6 fc15 bl 1001abb0 -10024386: f505 7094 add.w r0, r5, #296 ; 0x128 -1002438a: f104 01cc add.w r1, r4, #204 ; 0xcc -1002438e: e023 b.n 100243d8 -10024390: 071b lsls r3, r3, #28 -10024392: d416 bmi.n 100243c2 -10024394: 2200 movs r2, #0 -10024396: f241 035d movw r3, #4189 ; 0x105d -1002439a: 54f2 strb r2, [r6, r3] -1002439c: 4630 mov r0, r6 -1002439e: 4629 mov r1, r5 -100243a0: 2201 movs r2, #1 -100243a2: f7f8 fba5 bl 1001caf0 -100243a6: 4630 mov r0, r6 -100243a8: f003 ffca bl 10028340 -100243ac: b1c0 cbz r0, 100243e0 -100243ae: 7c23 ldrb r3, [r4, #16] -100243b0: f8c0 3114 str.w r3, [r0, #276] ; 0x114 -100243b4: bd70 pop {r4, r5, r6, pc} -100243b6: 071a lsls r2, r3, #28 -100243b8: d512 bpl.n 100243e0 -100243ba: f241 3338 movw r3, #4920 ; 0x1338 -100243be: 58f4 ldr r4, [r6, r3] -100243c0: e7c8 b.n 10024354 -100243c2: f104 01cc add.w r1, r4, #204 ; 0xcc -100243c6: f505 708c add.w r0, r5, #280 ; 0x118 -100243ca: 2208 movs r2, #8 -100243cc: f7f6 fbf0 bl 1001abb0 -100243d0: f505 7094 add.w r0, r5, #296 ; 0x128 -100243d4: f104 01c4 add.w r1, r4, #196 ; 0xc4 -100243d8: 2208 movs r2, #8 -100243da: f7f6 fbe9 bl 1001abb0 -100243de: e7d9 b.n 10024394 -100243e0: bd70 pop {r4, r5, r6, pc} - -100243e2 : -100243e2: 7983 ldrb r3, [r0, #6] -100243e4: 79c2 ldrb r2, [r0, #7] -100243e6: 041b lsls r3, r3, #16 -100243e8: eb03 2302 add.w r3, r3, r2, lsl #8 -100243ec: 7a02 ldrb r2, [r0, #8] -100243ee: 4413 add r3, r2 -100243f0: 7942 ldrb r2, [r0, #5] -100243f2: eb03 6302 add.w r3, r3, r2, lsl #24 -100243f6: 600b str r3, [r1, #0] -100243f8: 7a83 ldrb r3, [r0, #10] -100243fa: 7ac2 ldrb r2, [r0, #11] -100243fc: 041b lsls r3, r3, #16 -100243fe: eb03 2302 add.w r3, r3, r2, lsl #8 -10024402: 7b02 ldrb r2, [r0, #12] -10024404: 4413 add r3, r2 -10024406: 7a42 ldrb r2, [r0, #9] -10024408: eb03 6302 add.w r3, r3, r2, lsl #24 -1002440c: 604b str r3, [r1, #4] -1002440e: 4770 bx lr - -10024410 : -10024410: b530 push {r4, r5, lr} -10024412: b085 sub sp, #20 -10024414: e88d 0003 stmia.w sp, {r0, r1} -10024418: 4605 mov r5, r0 -1002441a: 460c mov r4, r1 -1002441c: 4610 mov r0, r2 -1002441e: a902 add r1, sp, #8 -10024420: f7ff ffdf bl 100243e2 -10024424: 9b02 ldr r3, [sp, #8] -10024426: 42ab cmp r3, r5 -10024428: d806 bhi.n 10024438 -1002442a: d307 bcc.n 1002443c -1002442c: 9b03 ldr r3, [sp, #12] -1002442e: 42a3 cmp r3, r4 -10024430: bf8c ite hi -10024432: 2000 movhi r0, #0 -10024434: 2001 movls r0, #1 -10024436: e002 b.n 1002443e -10024438: 2000 movs r0, #0 -1002443a: e000 b.n 1002443e -1002443c: 2001 movs r0, #1 -1002443e: b005 add sp, #20 -10024440: bd30 pop {r4, r5, pc} - -10024442 : -10024442: 0e0b lsrs r3, r1, #24 -10024444: 7143 strb r3, [r0, #5] -10024446: 0c0b lsrs r3, r1, #16 -10024448: 7183 strb r3, [r0, #6] -1002444a: 0a0b lsrs r3, r1, #8 -1002444c: 71c3 strb r3, [r0, #7] -1002444e: 0e13 lsrs r3, r2, #24 -10024450: 7243 strb r3, [r0, #9] -10024452: 0c13 lsrs r3, r2, #16 -10024454: 7283 strb r3, [r0, #10] -10024456: 0a13 lsrs r3, r2, #8 -10024458: 7201 strb r1, [r0, #8] -1002445a: 72c3 strb r3, [r0, #11] -1002445c: 7302 strb r2, [r0, #12] -1002445e: 4770 bx lr - -10024460 : -10024460: 6843 ldr r3, [r0, #4] -10024462: 1c5a adds r2, r3, #1 -10024464: d109 bne.n 1002447a -10024466: 6802 ldr r2, [r0, #0] -10024468: 1c53 adds r3, r2, #1 -1002446a: bf18 it ne -1002446c: 3201 addne r2, #1 -1002446e: f04f 0300 mov.w r3, #0 -10024472: bf0c ite eq -10024474: 6003 streq r3, [r0, #0] -10024476: 6002 strne r2, [r0, #0] -10024478: e000 b.n 1002447c -1002447a: 3301 adds r3, #1 -1002447c: 6043 str r3, [r0, #4] -1002447e: 4770 bx lr - -10024480 : -10024480: b510 push {r4, lr} -10024482: 4604 mov r4, r0 -10024484: f854 2f08 ldr.w r2, [r4, #8]! -10024488: 4603 mov r3, r0 -1002448a: 3201 adds r2, #1 -1002448c: d117 bne.n 100244be -1002448e: 68c2 ldr r2, [r0, #12] -10024490: 3201 adds r2, #1 -10024492: d114 bne.n 100244be -10024494: 6802 ldr r2, [r0, #0] -10024496: 3201 adds r2, #1 -10024498: d107 bne.n 100244aa -1002449a: 6842 ldr r2, [r0, #4] -1002449c: 3201 adds r2, #1 -1002449e: d104 bne.n 100244aa -100244a0: 2100 movs r1, #0 -100244a2: 2208 movs r2, #8 -100244a4: f7f6 fb88 bl 1001abb8 -100244a8: e002 b.n 100244b0 -100244aa: 4618 mov r0, r3 -100244ac: f7ff ffd8 bl 10024460 -100244b0: 4620 mov r0, r4 -100244b2: 2100 movs r1, #0 -100244b4: 2208 movs r2, #8 -100244b6: e8bd 4010 ldmia.w sp!, {r4, lr} -100244ba: f7f6 bb7d b.w 1001abb8 -100244be: 4620 mov r0, r4 -100244c0: e8bd 4010 ldmia.w sp!, {r4, lr} -100244c4: f7ff bfcc b.w 10024460 - -100244c8 : -100244c8: b538 push {r3, r4, r5, lr} -100244ca: 4605 mov r5, r0 -100244cc: f855 3f10 ldr.w r3, [r5, #16]! -100244d0: 4604 mov r4, r0 -100244d2: 3301 adds r3, #1 -100244d4: d122 bne.n 1002451c -100244d6: 6943 ldr r3, [r0, #20] -100244d8: 3301 adds r3, #1 -100244da: d11f bne.n 1002451c -100244dc: 6983 ldr r3, [r0, #24] -100244de: 3301 adds r3, #1 -100244e0: d11c bne.n 1002451c -100244e2: 69c3 ldr r3, [r0, #28] -100244e4: 3301 adds r3, #1 -100244e6: d119 bne.n 1002451c -100244e8: 6803 ldr r3, [r0, #0] -100244ea: 3301 adds r3, #1 -100244ec: d10d bne.n 1002450a -100244ee: 6843 ldr r3, [r0, #4] -100244f0: 3301 adds r3, #1 -100244f2: d10a bne.n 1002450a -100244f4: 6883 ldr r3, [r0, #8] -100244f6: 3301 adds r3, #1 -100244f8: d107 bne.n 1002450a -100244fa: 68c3 ldr r3, [r0, #12] -100244fc: 3301 adds r3, #1 -100244fe: d104 bne.n 1002450a -10024500: 2100 movs r1, #0 -10024502: 2210 movs r2, #16 -10024504: f7f6 fb58 bl 1001abb8 -10024508: e002 b.n 10024510 -1002450a: 4620 mov r0, r4 -1002450c: f7ff ffb8 bl 10024480 -10024510: 4628 mov r0, r5 -10024512: 2100 movs r1, #0 -10024514: 2210 movs r2, #16 -10024516: f7f6 fb4f bl 1001abb8 -1002451a: e002 b.n 10024522 -1002451c: 4628 mov r0, r5 -1002451e: f7ff ffaf bl 10024480 -10024522: 4620 mov r0, r4 -10024524: bd38 pop {r3, r4, r5, pc} - ... - -10024528 : -10024528: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -1002452c: 6903 ldr r3, [r0, #16] -1002452e: 4604 mov r4, r0 -10024530: f013 0908 ands.w r9, r3, #8 -10024534: 460d mov r5, r1 -10024536: 4617 mov r7, r2 -10024538: d102 bne.n 10024540 -1002453a: 06db lsls r3, r3, #27 -1002453c: d42e bmi.n 1002459c -1002453e: e04d b.n 100245dc -10024540: f501 7184 add.w r1, r1, #264 ; 0x108 -10024544: b292 uxth r2, r2 -10024546: f7fd f826 bl 10021596 -1002454a: f894 38f9 ldrb.w r3, [r4, #2297] ; 0x8f9 -1002454e: 2b00 cmp r3, #0 -10024550: d044 beq.n 100245dc -10024552: f894 286e ldrb.w r2, [r4, #2158] ; 0x86e -10024556: f894 386d ldrb.w r3, [r4, #2157] ; 0x86d -1002455a: 429a cmp r2, r3 -1002455c: d216 bcs.n 1002458c -1002455e: 4b21 ldr r3, [pc, #132] ; (100245e4 ) -10024560: 781a ldrb r2, [r3, #0] -10024562: 2a00 cmp r2, #0 -10024564: d13a bne.n 100245dc -10024566: 2201 movs r2, #1 -10024568: 701a strb r2, [r3, #0] -1002456a: f8b4 3870 ldrh.w r3, [r4, #2160] ; 0x870 -1002456e: f44f 717a mov.w r1, #1000 ; 0x3e8 -10024572: 4359 muls r1, r3 -10024574: f884 286c strb.w r2, [r4, #2156] ; 0x86c -10024578: f504 6006 add.w r0, r4, #2144 ; 0x860 -1002457c: f012 fc4c bl 10036e18 -10024580: f894 386e ldrb.w r3, [r4, #2158] ; 0x86e -10024584: 3301 adds r3, #1 -10024586: f884 386e strb.w r3, [r4, #2158] ; 0x86e -1002458a: e027 b.n 100245dc -1002458c: 4620 mov r0, r4 -1002458e: f00e fa2a bl 100329e6 -10024592: 4620 mov r0, r4 -10024594: 4914 ldr r1, [pc, #80] ; (100245e8 ) -10024596: f00f fad0 bl 10033b3a -1002459a: e01f b.n 100245dc -1002459c: f600 46d4 addw r6, r0, #3284 ; 0xcd4 -100245a0: 4630 mov r0, r6 -100245a2: a901 add r1, sp, #4 -100245a4: f505 7807 add.w r8, r5, #540 ; 0x21c -100245a8: f7f3 f80e bl 100175c8 -100245ac: 4640 mov r0, r8 -100245ae: f7f2 ff4a bl 10017446 -100245b2: b988 cbnz r0, 100245d8 -100245b4: 4640 mov r0, r8 -100245b6: f7f2 ff57 bl 10017468 -100245ba: 4629 mov r1, r5 -100245bc: 4620 mov r0, r4 -100245be: b2ba uxth r2, r7 -100245c0: f7f7 fb5d bl 1001bc7e -100245c4: 4605 mov r5, r0 -100245c6: 4630 mov r0, r6 -100245c8: a901 add r1, sp, #4 -100245ca: f7f3 f807 bl 100175dc -100245ce: 4620 mov r0, r4 -100245d0: 4629 mov r1, r5 -100245d2: f7f7 f9f9 bl 1001b9c8 -100245d6: e001 b.n 100245dc -100245d8: 464d mov r5, r9 -100245da: e7f4 b.n 100245c6 -100245dc: b003 add sp, #12 -100245de: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -100245e2: bf00 nop -100245e4: 1004baf0 .word 0x1004baf0 -100245e8: 1003fc3d .word 0x1003fc3d - -100245ec : -100245ec: b5f0 push {r4, r5, r6, r7, lr} -100245ee: f5ad 7d0b sub.w sp, sp, #556 ; 0x22c -100245f2: ab02 add r3, sp, #8 -100245f4: e883 0003 stmia.w r3, {r0, r1} -100245f8: 4604 mov r4, r0 -100245fa: 7d07 ldrb r7, [r0, #20] -100245fc: 4621 mov r1, r4 -100245fe: 4616 mov r6, r2 -10024600: a80a add r0, sp, #40 ; 0x28 -10024602: 685a ldr r2, [r3, #4] -10024604: f10d 0587 add.w r5, sp, #135 ; 0x87 -10024608: f7f6 fad2 bl 1001abb0 -1002460c: 2100 movs r1, #0 -1002460e: 2210 movs r2, #16 -10024610: 4628 mov r0, r5 -10024612: f7f6 fad1 bl 1001abb8 -10024616: f8bd 0038 ldrh.w r0, [sp, #56] ; 0x38 -1002461a: f7f2 feb6 bl 1001738a <_ntohs> -1002461e: f007 0707 and.w r7, r7, #7 -10024622: 3004 adds r0, #4 -10024624: 2f01 cmp r7, #1 -10024626: b281 uxth r1, r0 -10024628: d107 bne.n 1002463a -1002462a: 9500 str r5, [sp, #0] -1002462c: f10d 0036 add.w r0, sp, #54 ; 0x36 -10024630: 4632 mov r2, r6 -10024632: 2310 movs r3, #16 -10024634: f01a f960 bl 1003e8f8 <__rt_md5_hmac_veneer> -10024638: e009 b.n 1002464e -1002463a: 2f02 cmp r7, #2 -1002463c: d112 bne.n 10024664 -1002463e: ad05 add r5, sp, #20 -10024640: 9500 str r5, [sp, #0] -10024642: f10d 0036 add.w r0, sp, #54 ; 0x36 -10024646: 4632 mov r2, r6 -10024648: 2310 movs r3, #16 -1002464a: f01a f981 bl 1003e950 <__rt_hmac_sha1_veneer> -1002464e: 4628 mov r0, r5 -10024650: f104 015f add.w r1, r4, #95 ; 0x5f -10024654: 2210 movs r2, #16 -10024656: f7f6 faa7 bl 1001aba8 -1002465a: f1d0 0001 rsbs r0, r0, #1 -1002465e: bf38 it cc -10024660: 2000 movcc r0, #0 -10024662: e000 b.n 10024666 -10024664: 2000 movs r0, #0 -10024666: f50d 7d0b add.w sp, sp, #556 ; 0x22c -1002466a: bdf0 pop {r4, r5, r6, r7, pc} - -1002466c : -1002466c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10024670: b08a sub sp, #40 ; 0x28 -10024672: ac02 add r4, sp, #8 -10024674: e884 0003 stmia.w r4, {r0, r1} -10024678: f100 045f add.w r4, r0, #95 ; 0x5f -1002467c: 4615 mov r5, r2 -1002467e: f100 080e add.w r8, r0, #14 -10024682: 2100 movs r1, #0 -10024684: 4620 mov r0, r4 -10024686: 2210 movs r2, #16 -10024688: 461e mov r6, r3 -1002468a: 9f03 ldr r7, [sp, #12] -1002468c: f7f6 fa94 bl 1001abb8 -10024690: 2d01 cmp r5, #1 -10024692: d108 bne.n 100246a6 -10024694: 9400 str r4, [sp, #0] -10024696: 4640 mov r0, r8 -10024698: f1a7 010e sub.w r1, r7, #14 -1002469c: 4632 mov r2, r6 -1002469e: 2310 movs r3, #16 -100246a0: f01a f92a bl 1003e8f8 <__rt_md5_hmac_veneer> -100246a4: e00f b.n 100246c6 -100246a6: 2d02 cmp r5, #2 -100246a8: d10d bne.n 100246c6 -100246aa: ad05 add r5, sp, #20 -100246ac: 4640 mov r0, r8 -100246ae: f1a7 010e sub.w r1, r7, #14 -100246b2: 4632 mov r2, r6 -100246b4: 9500 str r5, [sp, #0] -100246b6: 2310 movs r3, #16 -100246b8: f01a f94a bl 1003e950 <__rt_hmac_sha1_veneer> -100246bc: 4620 mov r0, r4 -100246be: 4629 mov r1, r5 -100246c0: 2210 movs r2, #16 -100246c2: f7f6 fa75 bl 1001abb0 -100246c6: b00a add sp, #40 ; 0x28 -100246c8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -100246cc : -100246cc: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -100246d0: 469a mov sl, r3 -100246d2: 4b2a ldr r3, [pc, #168] ; (1002477c ) -100246d4: f5ad 7d48 sub.w sp, sp, #800 ; 0x320 -100246d8: 4607 mov r7, r0 -100246da: 468e mov lr, r1 -100246dc: 6818 ldr r0, [r3, #0] -100246de: 6859 ldr r1, [r3, #4] -100246e0: ac02 add r4, sp, #8 -100246e2: c403 stmia r4!, {r0, r1} -100246e4: f8d7 30e4 ldr.w r3, [r7, #228] ; 0xe4 -100246e8: 4615 mov r5, r2 -100246ea: f893 9002 ldrb.w r9, [r3, #2] -100246ee: 9ed0 ldr r6, [sp, #832] ; 0x340 -100246f0: f009 0907 and.w r9, r9, #7 -100246f4: f1b9 0f01 cmp.w r9, #1 -100246f8: f8dd 8344 ldr.w r8, [sp, #836] ; 0x344 -100246fc: f8d7 10d4 ldr.w r1, [r7, #212] ; 0xd4 -10024700: ac04 add r4, sp, #16 -10024702: d121 bne.n 10024748 -10024704: 313f adds r1, #63 ; 0x3f -10024706: 2210 movs r2, #16 -10024708: a845 add r0, sp, #276 ; 0x114 -1002470a: f7f6 fa51 bl 1001abb0 -1002470e: 4651 mov r1, sl -10024710: 4632 mov r2, r6 -10024712: a849 add r0, sp, #292 ; 0x124 -10024714: f7f6 fa4c bl 1001abb0 -10024718: a886 add r0, sp, #536 ; 0x218 -1002471a: a945 add r1, sp, #276 ; 0x114 -1002471c: f106 0210 add.w r2, r6, #16 -10024720: f01a f91e bl 1003e960 <__rt_arc4_init_veneer> -10024724: a886 add r0, sp, #536 ; 0x218 -10024726: 4621 mov r1, r4 -10024728: aa45 add r2, sp, #276 ; 0x114 -1002472a: f44f 7380 mov.w r3, #256 ; 0x100 -1002472e: f01a f903 bl 1003e938 <__rt_arc4_crypt_veneer> -10024732: f8d7 20e4 ldr.w r2, [r7, #228] ; 0xe4 -10024736: a886 add r0, sp, #536 ; 0x218 -10024738: 4621 mov r1, r4 -1002473a: 325f adds r2, #95 ; 0x5f -1002473c: 462b mov r3, r5 -1002473e: f01a f8fb bl 1003e938 <__rt_arc4_crypt_veneer> -10024742: 4640 mov r0, r8 -10024744: 4621 mov r1, r4 -10024746: e00e b.n 10024766 -10024748: 4611 mov r1, r2 -1002474a: 4670 mov r0, lr -1002474c: 4652 mov r2, sl -1002474e: 9400 str r4, [sp, #0] -10024750: 4633 mov r3, r6 -10024752: f01a f919 bl 1003e988 <__AES_UnWRAP_veneer> -10024756: 4620 mov r0, r4 -10024758: a902 add r1, sp, #8 -1002475a: 2208 movs r2, #8 -1002475c: f7f6 fa24 bl 1001aba8 -10024760: b930 cbnz r0, 10024770 -10024762: 4640 mov r0, r8 -10024764: a906 add r1, sp, #24 -10024766: 462a mov r2, r5 -10024768: f7f6 fa22 bl 1001abb0 -1002476c: 2001 movs r0, #1 -1002476e: e000 b.n 10024772 -10024770: 2000 movs r0, #0 -10024772: f50d 7d48 add.w sp, sp, #800 ; 0x320 -10024776: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1002477a: bf00 nop -1002477c: 100415ef .word 0x100415ef - -10024780 : -10024780: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -10024784: f5ad 7d4b sub.w sp, sp, #812 ; 0x32c -10024788: ac02 add r4, sp, #8 -1002478a: e884 0003 stmia.w r4, {r0, r1} -1002478e: 492a ldr r1, [pc, #168] ; (10024838 ) -10024790: 4604 mov r4, r0 -10024792: 6808 ldr r0, [r1, #0] -10024794: 6849 ldr r1, [r1, #4] -10024796: ad04 add r5, sp, #16 -10024798: c503 stmia r5!, {r0, r1} -1002479a: 7d25 ldrb r5, [r4, #20] -1002479c: 4691 mov r9, r2 -1002479e: f005 0507 and.w r5, r5, #7 -100247a2: 2d01 cmp r5, #1 -100247a4: 4698 mov r8, r3 -100247a6: 9fd2 ldr r7, [sp, #840] ; 0x348 -100247a8: 9ed3 ldr r6, [sp, #844] ; 0x34c -100247aa: d122 bne.n 100247f2 -100247ac: f104 013f add.w r1, r4, #63 ; 0x3f -100247b0: 2210 movs r2, #16 -100247b2: a847 add r0, sp, #284 ; 0x11c -100247b4: f7f6 f9fc bl 1001abb0 -100247b8: 4649 mov r1, r9 -100247ba: 4642 mov r2, r8 -100247bc: a84b add r0, sp, #300 ; 0x12c -100247be: f7f6 f9f7 bl 1001abb0 -100247c2: a888 add r0, sp, #544 ; 0x220 -100247c4: a947 add r1, sp, #284 ; 0x11c -100247c6: f108 0210 add.w r2, r8, #16 -100247ca: f01a f8c9 bl 1003e960 <__rt_arc4_init_veneer> -100247ce: a888 add r0, sp, #544 ; 0x220 -100247d0: a906 add r1, sp, #24 -100247d2: aa47 add r2, sp, #284 ; 0x11c -100247d4: f44f 7380 mov.w r3, #256 ; 0x100 -100247d8: f01a f8ae bl 1003e938 <__rt_arc4_crypt_veneer> -100247dc: a888 add r0, sp, #544 ; 0x220 -100247de: a906 add r1, sp, #24 -100247e0: f104 0271 add.w r2, r4, #113 ; 0x71 -100247e4: 463b mov r3, r7 -100247e6: f01a f8a7 bl 1003e938 <__rt_arc4_crypt_veneer> -100247ea: 4630 mov r0, r6 -100247ec: a906 add r1, sp, #24 -100247ee: 463a mov r2, r7 -100247f0: e01a b.n 10024828 -100247f2: 2d02 cmp r5, #2 -100247f4: d001 beq.n 100247fa -100247f6: 2000 movs r0, #0 -100247f8: e019 b.n 1002482e -100247fa: f894 1070 ldrb.w r1, [r4, #112] ; 0x70 -100247fe: f894 506f ldrb.w r5, [r4, #111] ; 0x6f -10024802: af06 add r7, sp, #24 -10024804: eb01 2505 add.w r5, r1, r5, lsl #8 -10024808: f104 0071 add.w r0, r4, #113 ; 0x71 -1002480c: 4629 mov r1, r5 -1002480e: 9700 str r7, [sp, #0] -10024810: f01a f8ba bl 1003e988 <__AES_UnWRAP_veneer> -10024814: 4638 mov r0, r7 -10024816: a904 add r1, sp, #16 -10024818: 2208 movs r2, #8 -1002481a: f7f6 f9c5 bl 1001aba8 -1002481e: 2800 cmp r0, #0 -10024820: d1e9 bne.n 100247f6 -10024822: 4630 mov r0, r6 -10024824: a908 add r1, sp, #32 -10024826: 462a mov r2, r5 -10024828: f7f6 f9c2 bl 1001abb0 -1002482c: 2001 movs r0, #1 -1002482e: f50d 7d4b add.w sp, sp, #812 ; 0x32c -10024832: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -10024836: bf00 nop -10024838: 100415ef .word 0x100415ef - -1002483c : -1002483c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10024840: f500 588c add.w r8, r0, #4480 ; 0x1180 -10024844: f8d8 41a4 ldr.w r4, [r8, #420] ; 0x1a4 -10024848: f108 081c add.w r8, r8, #28 -1002484c: f600 5508 addw r5, r0, #3336 ; 0xd08 -10024850: eb08 1744 add.w r7, r8, r4, lsl #5 -10024854: 4606 mov r6, r0 -10024856: 37e8 adds r7, #232 ; 0xe8 -10024858: eb05 1004 add.w r0, r5, r4, lsl #4 -1002485c: 3064 adds r0, #100 ; 0x64 -1002485e: 4639 mov r1, r7 -10024860: 2210 movs r2, #16 -10024862: f7f6 f9a5 bl 1001abb0 -10024866: f898 30bc ldrb.w r3, [r8, #188] ; 0xbc -1002486a: 2b02 cmp r3, #2 -1002486c: d112 bne.n 10024894 -1002486e: 6933 ldr r3, [r6, #16] -10024870: 06da lsls r2, r3, #27 -10024872: d51c bpl.n 100248ae -10024874: eb05 1004 add.w r0, r5, r4, lsl #4 -10024878: f107 0110 add.w r1, r7, #16 -1002487c: 30a4 adds r0, #164 ; 0xa4 -1002487e: 2208 movs r2, #8 -10024880: f7f6 f996 bl 1001abb0 -10024884: eb05 1004 add.w r0, r5, r4, lsl #4 -10024888: 30e4 adds r0, #228 ; 0xe4 -1002488a: f107 0118 add.w r1, r7, #24 -1002488e: 2208 movs r2, #8 -10024890: f7f6 f98e bl 1001abb0 -10024894: f241 025c movw r2, #4188 ; 0x105c -10024898: 2301 movs r3, #1 -1002489a: 54b3 strb r3, [r6, r2] -1002489c: 4630 mov r0, r6 -1002489e: f8c6 4d68 str.w r4, [r6, #3432] ; 0xd68 -100248a2: 4629 mov r1, r5 -100248a4: 4622 mov r2, r4 -100248a6: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -100248aa: f7f9 bb93 b.w 1001dfd4 -100248ae: 071b lsls r3, r3, #28 -100248b0: d5f0 bpl.n 10024894 -100248b2: eb05 1004 add.w r0, r5, r4, lsl #4 -100248b6: f107 0118 add.w r1, r7, #24 -100248ba: 30a4 adds r0, #164 ; 0xa4 -100248bc: 2208 movs r2, #8 -100248be: f7f6 f977 bl 1001abb0 -100248c2: eb05 1004 add.w r0, r5, r4, lsl #4 -100248c6: 30e4 adds r0, #228 ; 0xe4 -100248c8: f107 0110 add.w r1, r7, #16 -100248cc: e7df b.n 1002488e - ... - -100248d0 : -100248d0: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -100248d4: f641 0369 movw r3, #6249 ; 0x1869 -100248d8: f810 9003 ldrb.w r9, [r0, r3] -100248dc: 6903 ldr r3, [r0, #16] -100248de: f119 0900 adds.w r9, r9, #0 -100248e2: 4605 mov r5, r0 -100248e4: bf18 it ne -100248e6: f04f 0901 movne.w r9, #1 -100248ea: 06d8 lsls r0, r3, #27 -100248ec: 460e mov r6, r1 -100248ee: d53f bpl.n 10024970 -100248f0: f8d1 30fc ldr.w r3, [r1, #252] ; 0xfc -100248f4: f203 138b addw r3, r3, #395 ; 0x18b -100248f8: eb05 0383 add.w r3, r5, r3, lsl #2 -100248fc: f8d3 4d08 ldr.w r4, [r3, #3336] ; 0xd08 -10024900: 2c00 cmp r4, #0 -10024902: d052 beq.n 100249aa -10024904: f504 783d add.w r8, r4, #756 ; 0x2f4 -10024908: 4640 mov r0, r8 -1002490a: f012 fa8c bl 10036e26 -1002490e: 692b ldr r3, [r5, #16] -10024910: 06d9 lsls r1, r3, #27 -10024912: d433 bmi.n 1002497c -10024914: 2100 movs r1, #0 -10024916: f44f 7249 mov.w r2, #804 ; 0x324 -1002491a: 4620 mov r0, r4 -1002491c: f7f6 f94c bl 1001abb8 -10024920: f104 0334 add.w r3, r4, #52 ; 0x34 -10024924: 6263 str r3, [r4, #36] ; 0x24 -10024926: f104 0354 add.w r3, r4, #84 ; 0x54 -1002492a: 62e3 str r3, [r4, #44] ; 0x2c -1002492c: f104 03f4 add.w r3, r4, #244 ; 0xf4 -10024930: f8c4 30dc str.w r3, [r4, #220] ; 0xdc -10024934: 4b1e ldr r3, [pc, #120] ; (100249b0 ) -10024936: 2720 movs r7, #32 -10024938: 62a7 str r7, [r4, #40] ; 0x28 -1002493a: 6327 str r7, [r4, #48] ; 0x30 -1002493c: 9300 str r3, [sp, #0] -1002493e: f641 0334 movw r3, #6196 ; 0x1834 -10024942: 58e9 ldr r1, [r5, r3] -10024944: 4640 mov r0, r8 -10024946: 4a1b ldr r2, [pc, #108] ; (100249b4 ) -10024948: 4633 mov r3, r6 -1002494a: f012 fa61 bl 10036e10 -1002494e: 4b1a ldr r3, [pc, #104] ; (100249b8 ) -10024950: 2128 movs r1, #40 ; 0x28 -10024952: fb01 3109 mla r1, r1, r9, r3 -10024956: 463a mov r2, r7 -10024958: 6175 str r5, [r6, #20] -1002495a: f104 0074 add.w r0, r4, #116 ; 0x74 -1002495e: f7f6 f927 bl 1001abb0 -10024962: 692b ldr r3, [r5, #16] -10024964: f013 0210 ands.w r2, r3, #16 -10024968: d015 beq.n 10024996 -1002496a: 2301 movs r3, #1 -1002496c: 6023 str r3, [r4, #0] -1002496e: e01c b.n 100249aa -10024970: 071a lsls r2, r3, #28 -10024972: d51a bpl.n 100249aa -10024974: f241 3338 movw r3, #4920 ; 0x1338 -10024978: 58ec ldr r4, [r5, r3] -1002497a: e7c1 b.n 10024900 -1002497c: f8d6 2100 ldr.w r2, [r6, #256] ; 0x100 -10024980: 2301 movs r3, #1 -10024982: 3203 adds r2, #3 -10024984: 4628 mov r0, r5 -10024986: 4631 mov r1, r6 -10024988: b2d2 uxtb r2, r2 -1002498a: f7f8 f92b bl 1001cbe4 -1002498e: 2301 movs r3, #1 -10024990: f8c6 3110 str.w r3, [r6, #272] ; 0x110 -10024994: e7be b.n 10024914 -10024996: 071b lsls r3, r3, #28 -10024998: d507 bpl.n 100249aa -1002499a: f04f 33ff mov.w r3, #4294967295 -1002499e: f8c4 2310 str.w r2, [r4, #784] ; 0x310 -100249a2: f8c4 2314 str.w r2, [r4, #788] ; 0x314 -100249a6: 6163 str r3, [r4, #20] -100249a8: 61a3 str r3, [r4, #24] -100249aa: b003 add sp, #12 -100249ac: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -100249b0: 10041607 .word 0x10041607 -100249b4: 100255cf .word 0x100255cf -100249b8: 1004bc23 .word 0x1004bc23 - -100249bc : -100249bc: b537 push {r0, r1, r2, r4, r5, lr} -100249be: f241 3338 movw r3, #4920 ; 0x1338 -100249c2: 58c5 ldr r5, [r0, r3] -100249c4: 6903 ldr r3, [r0, #16] -100249c6: 4604 mov r4, r0 -100249c8: 071b lsls r3, r3, #28 -100249ca: d51e bpl.n 10024a0a -100249cc: f8d5 3310 ldr.w r3, [r5, #784] ; 0x310 -100249d0: b9db cbnz r3, 10024a0a -100249d2: f8d5 3314 ldr.w r3, [r5, #788] ; 0x314 -100249d6: b9c3 cbnz r3, 10024a0a -100249d8: f505 7541 add.w r5, r5, #772 ; 0x304 -100249dc: f7ff ff78 bl 100248d0 -100249e0: 4628 mov r0, r5 -100249e2: f012 fa20 bl 10036e26 -100249e6: 4b0a ldr r3, [pc, #40] ; (10024a10 ) -100249e8: 4628 mov r0, r5 -100249ea: 9300 str r3, [sp, #0] -100249ec: f641 0334 movw r3, #6196 ; 0x1834 -100249f0: 58e1 ldr r1, [r4, r3] -100249f2: 4a08 ldr r2, [pc, #32] ; (10024a14 ) -100249f4: 4623 mov r3, r4 -100249f6: f012 fa0b bl 10036e10 -100249fa: 4628 mov r0, r5 -100249fc: f241 3188 movw r1, #5000 ; 0x1388 -10024a00: b003 add sp, #12 -10024a02: e8bd 4030 ldmia.w sp!, {r4, r5, lr} -10024a06: f012 ba07 b.w 10036e18 -10024a0a: b003 add sp, #12 -10024a0c: bd30 pop {r4, r5, pc} -10024a0e: bf00 nop -10024a10: 10041613 .word 0x10041613 -10024a14: 100242c1 .word 0x100242c1 - -10024a18 : -10024a18: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10024a1c: f600 5508 addw r5, r0, #3336 ; 0xd08 -10024a20: b0d9 sub sp, #356 ; 0x164 -10024a22: 4607 mov r7, r0 -10024a24: 460e mov r6, r1 -10024a26: 4692 mov sl, r2 -10024a28: 2d00 cmp r5, #0 -10024a2a: f000 8355 beq.w 100250d8 -10024a2e: 2900 cmp r1, #0 -10024a30: f000 8352 beq.w 100250d8 -10024a34: f8d1 30fc ldr.w r3, [r1, #252] ; 0xfc -10024a38: f203 138b addw r3, r3, #395 ; 0x18b -10024a3c: eb00 0383 add.w r3, r0, r3, lsl #2 -10024a40: f8d3 4d08 ldr.w r4, [r3, #3336] ; 0xd08 -10024a44: 6823 ldr r3, [r4, #0] -10024a46: 2b00 cmp r3, #0 -10024a48: f000 8346 beq.w 100250d8 -10024a4c: a80c add r0, sp, #48 ; 0x30 -10024a4e: 2100 movs r1, #0 -10024a50: 2208 movs r2, #8 -10024a52: f7f6 f8b1 bl 1001abb8 -10024a56: f8d4 80dc ldr.w r8, [r4, #220] ; 0xdc -10024a5a: f507 5b8c add.w fp, r7, #4480 ; 0x1180 -10024a5e: f108 0012 add.w r0, r8, #18 -10024a62: f8c4 00ec str.w r0, [r4, #236] ; 0xec -10024a66: f10b 0b1c add.w fp, fp, #28 -10024a6a: f89b 30bc ldrb.w r3, [fp, #188] ; 0xbc -10024a6e: 900c str r0, [sp, #48] ; 0x30 -10024a70: 2b04 cmp r3, #4 -10024a72: d007 beq.n 10024a84 -10024a74: 7c23 ldrb r3, [r4, #16] -10024a76: 2b04 cmp r3, #4 -10024a78: bf14 ite ne -10024a7a: f04f 0901 movne.w r9, #1 -10024a7e: f04f 0902 moveq.w r9, #2 -10024a82: e001 b.n 10024a88 -10024a84: f04f 0902 mov.w r9, #2 -10024a88: f1ba 0f00 cmp.w sl, #0 -10024a8c: d00f beq.n 10024aae -10024a8e: f8d4 30f0 ldr.w r3, [r4, #240] ; 0xf0 -10024a92: 6961 ldr r1, [r4, #20] -10024a94: 69a2 ldr r2, [r4, #24] -10024a96: 930d str r3, [sp, #52] ; 0x34 -10024a98: f8d4 50e0 ldr.w r5, [r4, #224] ; 0xe0 -10024a9c: f7ff fcd1 bl 10024442 -10024aa0: f104 0014 add.w r0, r4, #20 -10024aa4: f7ff fcdc bl 10024460 -10024aa8: f04f 0a01 mov.w sl, #1 -10024aac: e2ca b.n 10025044 -10024aae: 6823 ldr r3, [r4, #0] -10024ab0: f205 4594 addw r5, r5, #1172 ; 0x494 -10024ab4: 2b01 cmp r3, #1 -10024ab6: d003 beq.n 10024ac0 -10024ab8: 2b02 cmp r3, #2 -10024aba: f000 80dd beq.w 10024c78 -10024abe: e30b b.n 100250d8 -10024ac0: 4b69 ldr r3, [pc, #420] ; (10024c68 ) -10024ac2: 681b ldr r3, [r3, #0] -10024ac4: b13b cbz r3, 10024ad6 -10024ac6: 4869 ldr r0, [pc, #420] ; (10024c6c ) -10024ac8: f7f6 f84a bl 1001ab60 -10024acc: 4b68 ldr r3, [pc, #416] ; (10024c70 ) -10024ace: f8d3 0194 ldr.w r0, [r3, #404] ; 0x194 -10024ad2: f7f6 f845 bl 1001ab60 -10024ad6: f44f 72f7 mov.w r2, #494 ; 0x1ee -10024ada: 2100 movs r1, #0 -10024adc: 980c ldr r0, [sp, #48] ; 0x30 -10024ade: f7f6 f86b bl 1001abb8 -10024ae2: 68a3 ldr r3, [r4, #8] -10024ae4: f04f 0a00 mov.w sl, #0 -10024ae8: f013 0f02 tst.w r3, #2 -10024aec: 9b0c ldr r3, [sp, #48] ; 0x30 -10024aee: bf14 ite ne -10024af0: 2202 movne r2, #2 -10024af2: 22fe moveq r2, #254 ; 0xfe -10024af4: 701a strb r2, [r3, #0] -10024af6: 9b0c ldr r3, [sp, #48] ; 0x30 -10024af8: f104 0b14 add.w fp, r4, #20 -10024afc: 789a ldrb r2, [r3, #2] -10024afe: f022 0207 bic.w r2, r2, #7 -10024b02: 709a strb r2, [r3, #2] -10024b04: 9b0c ldr r3, [sp, #48] ; 0x30 -10024b06: 789a ldrb r2, [r3, #2] -10024b08: ea49 0202 orr.w r2, r9, r2 -10024b0c: 709a strb r2, [r3, #2] -10024b0e: 9b0c ldr r3, [sp, #48] ; 0x30 -10024b10: 789a ldrb r2, [r3, #2] -10024b12: f042 0208 orr.w r2, r2, #8 -10024b16: 709a strb r2, [r3, #2] -10024b18: 9b0c ldr r3, [sp, #48] ; 0x30 -10024b1a: 789a ldrb r2, [r3, #2] -10024b1c: f022 0230 bic.w r2, r2, #48 ; 0x30 -10024b20: 709a strb r2, [r3, #2] -10024b22: 9b0c ldr r3, [sp, #48] ; 0x30 -10024b24: 789a ldrb r2, [r3, #2] -10024b26: f022 0240 bic.w r2, r2, #64 ; 0x40 -10024b2a: 709a strb r2, [r3, #2] -10024b2c: 9b0c ldr r3, [sp, #48] ; 0x30 -10024b2e: 789a ldrb r2, [r3, #2] -10024b30: f062 027f orn r2, r2, #127 ; 0x7f -10024b34: 709a strb r2, [r3, #2] -10024b36: 9b0c ldr r3, [sp, #48] ; 0x30 -10024b38: 785a ldrb r2, [r3, #1] -10024b3a: f022 0201 bic.w r2, r2, #1 -10024b3e: 705a strb r2, [r3, #1] -10024b40: 9b0c ldr r3, [sp, #48] ; 0x30 -10024b42: 785a ldrb r2, [r3, #1] -10024b44: f022 0202 bic.w r2, r2, #2 -10024b48: 705a strb r2, [r3, #1] -10024b4a: 9b0c ldr r3, [sp, #48] ; 0x30 -10024b4c: 785a ldrb r2, [r3, #1] -10024b4e: f022 0204 bic.w r2, r2, #4 -10024b52: 705a strb r2, [r3, #1] -10024b54: 9b0c ldr r3, [sp, #48] ; 0x30 -10024b56: 785a ldrb r2, [r3, #1] -10024b58: f022 0208 bic.w r2, r2, #8 -10024b5c: 705a strb r2, [r3, #1] -10024b5e: 9b0c ldr r3, [sp, #48] ; 0x30 -10024b60: f883 a003 strb.w sl, [r3, #3] -10024b64: 7c23 ldrb r3, [r4, #16] -10024b66: 980c ldr r0, [sp, #48] ; 0x30 -10024b68: 2b02 cmp r3, #2 -10024b6a: bf14 ite ne -10024b6c: 2310 movne r3, #16 -10024b6e: 2320 moveq r3, #32 -10024b70: 7103 strb r3, [r0, #4] -10024b72: 6961 ldr r1, [r4, #20] -10024b74: 69a2 ldr r2, [r4, #24] -10024b76: f7ff fc64 bl 10024442 -10024b7a: 4659 mov r1, fp -10024b7c: 2208 movs r2, #8 -10024b7e: f104 001c add.w r0, r4, #28 -10024b82: f7f6 f815 bl 1001abb0 -10024b86: 4658 mov r0, fp -10024b88: f7ff fc6a bl 10024460 -10024b8c: 4628 mov r0, r5 -10024b8e: f7ff fc9b bl 100244c8 -10024b92: 46ee mov lr, sp -10024b94: f105 0c08 add.w ip, r5, #8 -10024b98: e8bc 000f ldmia.w ip!, {r0, r1, r2, r3} -10024b9c: e8ae 000f stmia.w lr!, {r0, r1, r2, r3} -10024ba0: e89c 0003 ldmia.w ip, {r0, r1} -10024ba4: e88e 0003 stmia.w lr, {r0, r1} -10024ba8: f104 0124 add.w r1, r4, #36 ; 0x24 -10024bac: e895 000c ldmia.w r5, {r2, r3} -10024bb0: c903 ldmia r1, {r0, r1} -10024bb2: f7ff fb35 bl 10024220 -10024bb6: 980c ldr r0, [sp, #48] ; 0x30 -10024bb8: 6a61 ldr r1, [r4, #36] ; 0x24 -10024bba: 6aa2 ldr r2, [r4, #40] ; 0x28 -10024bbc: 300d adds r0, #13 -10024bbe: f7f5 fff7 bl 1001abb0 -10024bc2: 4651 mov r1, sl -10024bc4: 2210 movs r2, #16 -10024bc6: a814 add r0, sp, #80 ; 0x50 -10024bc8: f7f5 fff6 bl 1001abb8 -10024bcc: 980c ldr r0, [sp, #48] ; 0x30 -10024bce: a914 add r1, sp, #80 ; 0x50 -10024bd0: 2210 movs r2, #16 -10024bd2: 302d adds r0, #45 ; 0x2d -10024bd4: f7f5 ffec bl 1001abb0 -10024bd8: 4651 mov r1, sl -10024bda: 2208 movs r2, #8 -10024bdc: a80e add r0, sp, #56 ; 0x38 -10024bde: f7f5 ffeb bl 1001abb8 -10024be2: 980c ldr r0, [sp, #48] ; 0x30 -10024be4: a90e add r1, sp, #56 ; 0x38 -10024be6: 2208 movs r2, #8 -10024be8: 303d adds r0, #61 ; 0x3d -10024bea: f7f5 ffe1 bl 1001abb0 -10024bee: 4651 mov r1, sl -10024bf0: 2208 movs r2, #8 -10024bf2: a812 add r0, sp, #72 ; 0x48 -10024bf4: f7f5 ffe0 bl 1001abb8 -10024bf8: 980c ldr r0, [sp, #48] ; 0x30 -10024bfa: a912 add r1, sp, #72 ; 0x48 -10024bfc: 3045 adds r0, #69 ; 0x45 -10024bfe: 2208 movs r2, #8 -10024c00: f7f5 ffd6 bl 1001abb0 -10024c04: 68a3 ldr r3, [r4, #8] -10024c06: 980c ldr r0, [sp, #48] ; 0x30 -10024c08: f013 0302 ands.w r3, r3, #2 -10024c0c: d00a beq.n 10024c24 -10024c0e: 2316 movs r3, #22 -10024c10: f880 a05d strb.w sl, [r0, #93] ; 0x5d -10024c14: f880 305e strb.w r3, [r0, #94] ; 0x5e -10024c18: 4916 ldr r1, [pc, #88] ; (10024c74 ) -10024c1a: 2206 movs r2, #6 -10024c1c: 305f adds r0, #95 ; 0x5f -10024c1e: f7f5 ffc7 bl 1001abb0 -10024c22: e003 b.n 10024c2c -10024c24: f880 305d strb.w r3, [r0, #93] ; 0x5d -10024c28: f880 305e strb.w r3, [r0, #94] ; 0x5e -10024c2c: 2100 movs r1, #0 -10024c2e: 2210 movs r2, #16 -10024c30: a838 add r0, sp, #224 ; 0xe0 -10024c32: f7f5 ffc1 bl 1001abb8 -10024c36: 980c ldr r0, [sp, #48] ; 0x30 -10024c38: a938 add r1, sp, #224 ; 0xe0 -10024c3a: 304d adds r0, #77 ; 0x4d -10024c3c: 2210 movs r2, #16 -10024c3e: f7f5 ffb7 bl 1001abb0 -10024c42: 68a3 ldr r3, [r4, #8] -10024c44: 079b lsls r3, r3, #30 -10024c46: d508 bpl.n 10024c5a -10024c48: 9b0c ldr r3, [sp, #48] ; 0x30 -10024c4a: f893 205d ldrb.w r2, [r3, #93] ; 0x5d -10024c4e: f893 305e ldrb.w r3, [r3, #94] ; 0x5e -10024c52: eb03 2302 add.w r3, r3, r2, lsl #8 -10024c56: 335f adds r3, #95 ; 0x5f -10024c58: e000 b.n 10024c5c -10024c5a: 235f movs r3, #95 ; 0x5f -10024c5c: 930d str r3, [sp, #52] ; 0x34 -10024c5e: 9d0d ldr r5, [sp, #52] ; 0x34 -10024c60: f04f 0a00 mov.w sl, #0 -10024c64: 3512 adds r5, #18 -10024c66: e1e8 b.n 1002503a -10024c68: 10044ec0 .word 0x10044ec0 -10024c6c: 10042939 .word 0x10042939 -10024c70: 10043a4c .word 0x10043a4c -10024c74: 10044f34 .word 0x10044f34 -10024c78: 4b9e ldr r3, [pc, #632] ; (10024ef4 ) -10024c7a: 681b ldr r3, [r3, #0] -10024c7c: b13b cbz r3, 10024c8e -10024c7e: 489e ldr r0, [pc, #632] ; (10024ef8 ) -10024c80: f7f5 ff6e bl 1001ab60 -10024c84: 4b9d ldr r3, [pc, #628] ; (10024efc ) -10024c86: f8d3 0198 ldr.w r0, [r3, #408] ; 0x198 -10024c8a: f7f5 ff69 bl 1001ab60 -10024c8e: 68a3 ldr r3, [r4, #8] -10024c90: f10d 0a50 add.w sl, sp, #80 ; 0x50 -10024c94: f013 0f02 tst.w r3, #2 -10024c98: 9b0c ldr r3, [sp, #48] ; 0x30 -10024c9a: bf14 ite ne -10024c9c: 2202 movne r2, #2 -10024c9e: 22fe moveq r2, #254 ; 0xfe -10024ca0: 701a strb r2, [r3, #0] -10024ca2: 9b0c ldr r3, [sp, #48] ; 0x30 -10024ca4: 789a ldrb r2, [r3, #2] -10024ca6: f022 0207 bic.w r2, r2, #7 -10024caa: 709a strb r2, [r3, #2] -10024cac: f8d4 20e4 ldr.w r2, [r4, #228] ; 0xe4 -10024cb0: 9b0c ldr r3, [sp, #48] ; 0x30 -10024cb2: 7892 ldrb r2, [r2, #2] -10024cb4: 7899 ldrb r1, [r3, #2] -10024cb6: f002 0207 and.w r2, r2, #7 -10024cba: 430a orrs r2, r1 -10024cbc: 709a strb r2, [r3, #2] -10024cbe: 9b0c ldr r3, [sp, #48] ; 0x30 -10024cc0: f8d4 20e4 ldr.w r2, [r4, #228] ; 0xe4 -10024cc4: 7891 ldrb r1, [r2, #2] -10024cc6: 789a ldrb r2, [r3, #2] -10024cc8: f001 0108 and.w r1, r1, #8 -10024ccc: f022 0208 bic.w r2, r2, #8 -10024cd0: 430a orrs r2, r1 -10024cd2: 709a strb r2, [r3, #2] -10024cd4: 9b0c ldr r3, [sp, #48] ; 0x30 -10024cd6: 789a ldrb r2, [r3, #2] -10024cd8: f022 0230 bic.w r2, r2, #48 ; 0x30 -10024cdc: 709a strb r2, [r3, #2] -10024cde: 9b0c ldr r3, [sp, #48] ; 0x30 -10024ce0: 789a ldrb r2, [r3, #2] -10024ce2: f042 0240 orr.w r2, r2, #64 ; 0x40 -10024ce6: 709a strb r2, [r3, #2] -10024ce8: 9b0c ldr r3, [sp, #48] ; 0x30 -10024cea: 789a ldrb r2, [r3, #2] -10024cec: f062 027f orn r2, r2, #127 ; 0x7f -10024cf0: 709a strb r2, [r3, #2] -10024cf2: 9b0c ldr r3, [sp, #48] ; 0x30 -10024cf4: 785a ldrb r2, [r3, #1] -10024cf6: f042 0201 orr.w r2, r2, #1 -10024cfa: 705a strb r2, [r3, #1] -10024cfc: 9b0c ldr r3, [sp, #48] ; 0x30 -10024cfe: 785a ldrb r2, [r3, #1] -10024d00: f022 0202 bic.w r2, r2, #2 -10024d04: 705a strb r2, [r3, #1] -10024d06: 9b0c ldr r3, [sp, #48] ; 0x30 -10024d08: 785a ldrb r2, [r3, #1] -10024d0a: f022 0204 bic.w r2, r2, #4 -10024d0e: 705a strb r2, [r3, #1] -10024d10: 9b0c ldr r3, [sp, #48] ; 0x30 -10024d12: 785a ldrb r2, [r3, #1] -10024d14: f022 0208 bic.w r2, r2, #8 -10024d18: 705a strb r2, [r3, #1] -10024d1a: 9a0c ldr r2, [sp, #48] ; 0x30 -10024d1c: 2300 movs r3, #0 -10024d1e: 70d3 strb r3, [r2, #3] -10024d20: 7c22 ldrb r2, [r4, #16] -10024d22: 980c ldr r0, [sp, #48] ; 0x30 -10024d24: 2a02 cmp r2, #2 -10024d26: bf14 ite ne -10024d28: 2210 movne r2, #16 -10024d2a: 2220 moveq r2, #32 -10024d2c: 7102 strb r2, [r0, #4] -10024d2e: 6961 ldr r1, [r4, #20] -10024d30: 69a2 ldr r2, [r4, #24] -10024d32: 9307 str r3, [sp, #28] -10024d34: f7ff fb85 bl 10024442 -10024d38: f104 0014 add.w r0, r4, #20 -10024d3c: f7ff fb90 bl 10024460 -10024d40: 980c ldr r0, [sp, #48] ; 0x30 -10024d42: 6a61 ldr r1, [r4, #36] ; 0x24 -10024d44: 6aa2 ldr r2, [r4, #40] ; 0x28 -10024d46: 300d adds r0, #13 -10024d48: f7f5 ff32 bl 1001abb0 -10024d4c: 9b07 ldr r3, [sp, #28] -10024d4e: 2210 movs r2, #16 -10024d50: 4619 mov r1, r3 -10024d52: 4650 mov r0, sl -10024d54: f7f5 ff30 bl 1001abb8 -10024d58: 980c ldr r0, [sp, #48] ; 0x30 -10024d5a: 4651 mov r1, sl -10024d5c: 302d adds r0, #45 ; 0x2d -10024d5e: 2210 movs r2, #16 -10024d60: f7f5 ff26 bl 1001abb0 -10024d64: 68a3 ldr r3, [r4, #8] -10024d66: f013 0302 ands.w r3, r3, #2 -10024d6a: f000 812f beq.w 10024fcc -10024d6e: 4a64 ldr r2, [pc, #400] ; (10024f00 ) -10024d70: ab10 add r3, sp, #64 ; 0x40 -10024d72: 6810 ldr r0, [r2, #0] -10024d74: 6851 ldr r1, [r2, #4] -10024d76: f1b9 0f02 cmp.w r9, #2 -10024d7a: c303 stmia r3!, {r0, r1} -10024d7c: 9b0c ldr r3, [sp, #48] ; 0x30 -10024d7e: f04f 0213 mov.w r2, #19 -10024d82: 705a strb r2, [r3, #1] -10024d84: d11f bne.n 10024dc6 -10024d86: 4628 mov r0, r5 -10024d88: f7ff fb9e bl 100244c8 -10024d8c: 2310 movs r3, #16 -10024d8e: 46ee mov lr, sp -10024d90: f105 0c08 add.w ip, r5, #8 -10024d94: 930b str r3, [sp, #44] ; 0x2c -10024d96: f8cd a028 str.w sl, [sp, #40] ; 0x28 -10024d9a: e8bc 000f ldmia.w ip!, {r0, r1, r2, r3} -10024d9e: e8ae 000f stmia.w lr!, {r0, r1, r2, r3} -10024da2: e89c 0003 ldmia.w ip, {r0, r1} -10024da6: e88e 0003 stmia.w lr, {r0, r1} -10024daa: f10d 0b28 add.w fp, sp, #40 ; 0x28 -10024dae: e89b 0003 ldmia.w fp, {r0, r1} -10024db2: e895 000c ldmia.w r5, {r2, r3} -10024db6: f7ff fa33 bl 10024220 -10024dba: 980c ldr r0, [sp, #48] ; 0x30 -10024dbc: 4651 mov r1, sl -10024dbe: 302d adds r0, #45 ; 0x2d -10024dc0: 2210 movs r2, #16 -10024dc2: f7f5 fef5 bl 1001abb0 -10024dc6: f507 5a8c add.w sl, r7, #4480 ; 0x1180 -10024dca: f10a 0a1c add.w sl, sl, #28 -10024dce: f8da 1034 ldr.w r1, [sl, #52] ; 0x34 -10024dd2: 780b ldrb r3, [r1, #0] -10024dd4: 2b30 cmp r3, #48 ; 0x30 -10024dd6: d10e bne.n 10024df6 -10024dd8: f891 b001 ldrb.w fp, [r1, #1] -10024ddc: f10b 0b02 add.w fp, fp, #2 -10024de0: f1bb 0f64 cmp.w fp, #100 ; 0x64 -10024de4: f300 8178 bgt.w 100250d8 -10024de8: 465a mov r2, fp -10024dea: a838 add r0, sp, #224 ; 0xe0 -10024dec: f7f5 fee0 bl 1001abb0 -10024df0: ab38 add r3, sp, #224 ; 0xe0 -10024df2: 449b add fp, r3 -10024df4: e001 b.n 10024dfa -10024df6: f10d 0be0 add.w fp, sp, #224 ; 0xe0 -10024dfa: 4658 mov r0, fp -10024dfc: a910 add r1, sp, #64 ; 0x40 -10024dfe: 2208 movs r2, #8 -10024e00: f7f5 fed6 bl 1001abb0 -10024e04: f89a 30bc ldrb.w r3, [sl, #188] ; 0xbc -10024e08: f10b 0b08 add.w fp, fp, #8 -10024e0c: 2b02 cmp r3, #2 -10024e0e: bf14 ite ne -10024e10: 2316 movne r3, #22 -10024e12: 2326 moveq r3, #38 ; 0x26 -10024e14: f80b 3c07 strb.w r3, [fp, #-7] -10024e18: f8da 3020 ldr.w r3, [sl, #32] -10024e1c: b3bb cbz r3, 10024e8e -10024e1e: f8da 3190 ldr.w r3, [sl, #400] ; 0x190 -10024e22: b913 cbnz r3, 10024e2a -10024e24: f8da 3028 ldr.w r3, [sl, #40] ; 0x28 -10024e28: b38b cbz r3, 10024e8e -10024e2a: f8da 2028 ldr.w r2, [sl, #40] ; 0x28 -10024e2e: 2300 movs r3, #0 -10024e30: b10a cbz r2, 10024e36 -10024e32: f8ca 302c str.w r3, [sl, #44] ; 0x2c -10024e36: f8ca 3190 str.w r3, [sl, #400] ; 0x190 -10024e3a: f8ca 3028 str.w r3, [sl, #40] ; 0x28 -10024e3e: f8ca 3030 str.w r3, [sl, #48] ; 0x30 -10024e42: 4628 mov r0, r5 -10024e44: f7ff fb40 bl 100244c8 -10024e48: f105 0c08 add.w ip, r5, #8 -10024e4c: 46ee mov lr, sp -10024e4e: e8bc 000f ldmia.w ip!, {r0, r1, r2, r3} -10024e52: e8ae 000f stmia.w lr!, {r0, r1, r2, r3} -10024e56: e89c 0003 ldmia.w ip, {r0, r1} -10024e5a: e88e 0003 stmia.w lr, {r0, r1} -10024e5e: e895 000c ldmia.w r5, {r2, r3} -10024e62: 35c0 adds r5, #192 ; 0xc0 -10024e64: e895 0003 ldmia.w r5, {r0, r1} -10024e68: f7ff f9da bl 10024220 -10024e6c: f8da 3188 ldr.w r3, [sl, #392] ; 0x188 -10024e70: f507 50a4 add.w r0, r7, #5248 ; 0x1480 -10024e74: eb0a 1343 add.w r3, sl, r3, lsl #5 -10024e78: 33e8 adds r3, #232 ; 0xe8 -10024e7a: 9300 str r3, [sp, #0] -10024e7c: 2320 movs r3, #32 -10024e7e: 9301 str r3, [sp, #4] -10024e80: 3019 adds r0, #25 -10024e82: f8da 10c0 ldr.w r1, [sl, #192] ; 0xc0 -10024e86: f50a 72b4 add.w r2, sl, #360 ; 0x168 -10024e8a: f019 fd65 bl 1003e958 <__rom_psk_CalcGTK_veneer> -10024e8e: f507 558c add.w r5, r7, #4480 ; 0x1180 -10024e92: f8d5 11a4 ldr.w r1, [r5, #420] ; 0x1a4 -10024e96: 351c adds r5, #28 -10024e98: f895 30bc ldrb.w r3, [r5, #188] ; 0xbc -10024e9c: eb05 1141 add.w r1, r5, r1, lsl #5 -10024ea0: 2b02 cmp r3, #2 -10024ea2: bf14 ite ne -10024ea4: 2210 movne r2, #16 -10024ea6: 2220 moveq r2, #32 -10024ea8: 4658 mov r0, fp -10024eaa: 31e8 adds r1, #232 ; 0xe8 -10024eac: f7f5 fe80 bl 1001abb0 -10024eb0: f895 30bc ldrb.w r3, [r5, #188] ; 0xbc -10024eb4: ad38 add r5, sp, #224 ; 0xe0 -10024eb6: 2b02 cmp r3, #2 -10024eb8: bf14 ite ne -10024eba: 2310 movne r3, #16 -10024ebc: 2320 moveq r3, #32 -10024ebe: 449b add fp, r3 -10024ec0: 4b10 ldr r3, [pc, #64] ; (10024f04 ) -10024ec2: ebc5 020b rsb r2, r5, fp -10024ec6: 4013 ands r3, r2 -10024ec8: 2b00 cmp r3, #0 -10024eca: da03 bge.n 10024ed4 -10024ecc: 3b01 subs r3, #1 -10024ece: f063 0307 orn r3, r3, #7 -10024ed2: 3301 adds r3, #1 -10024ed4: b1db cbz r3, 10024f0e -10024ed6: 22dd movs r2, #221 ; 0xdd -10024ed8: 4659 mov r1, fp -10024eda: f801 2b01 strb.w r2, [r1], #1 -10024ede: 1c5a adds r2, r3, #1 -10024ee0: 2a08 cmp r2, #8 -10024ee2: d011 beq.n 10024f08 -10024ee4: ebc3 000b rsb r0, r3, fp -10024ee8: f04f 0e00 mov.w lr, #0 -10024eec: f800 e002 strb.w lr, [r0, r2] -10024ef0: 3201 adds r2, #1 -10024ef2: e7f5 b.n 10024ee0 -10024ef4: 10044ec0 .word 0x10044ec0 -10024ef8: 10042939 .word 0x10042939 -10024efc: 10043a4c .word 0x10043a4c -10024f00: 100415f7 .word 0x100415f7 -10024f04: 80000007 .word 0x80000007 -10024f08: f1c3 0b07 rsb fp, r3, #7 -10024f0c: 448b add fp, r1 -10024f0e: 4974 ldr r1, [pc, #464] ; (100250e0 ) -10024f10: f8d6 30fc ldr.w r3, [r6, #252] ; 0xfc -10024f14: 6808 ldr r0, [r1, #0] -10024f16: 6849 ldr r1, [r1, #4] -10024f18: aa12 add r2, sp, #72 ; 0x48 -10024f1a: f203 138b addw r3, r3, #395 ; 0x18b -10024f1e: c203 stmia r2!, {r0, r1} -10024f20: eb07 0383 add.w r3, r7, r3, lsl #2 -10024f24: f8d3 3d08 ldr.w r3, [r3, #3336] ; 0xd08 -10024f28: f10d 0a60 add.w sl, sp, #96 ; 0x60 -10024f2c: f8d3 30ec ldr.w r3, [r3, #236] ; 0xec -10024f30: f10d 0c26 add.w ip, sp, #38 ; 0x26 -10024f34: 789b ldrb r3, [r3, #2] -10024f36: f003 0307 and.w r3, r3, #7 -10024f3a: 2b01 cmp r3, #1 -10024f3c: d013 beq.n 10024f66 -10024f3e: f104 03a4 add.w r3, r4, #164 ; 0xa4 -10024f42: 9300 str r3, [sp, #0] -10024f44: 2310 movs r3, #16 -10024f46: 9301 str r3, [sp, #4] -10024f48: f8cd c00c str.w ip, [sp, #12] -10024f4c: f8cd a008 str.w sl, [sp, #8] -10024f50: 4628 mov r0, r5 -10024f52: ebc5 010b rsb r1, r5, fp -10024f56: aa12 add r2, sp, #72 ; 0x48 -10024f58: 2308 movs r3, #8 -10024f5a: f8cd c01c str.w ip, [sp, #28] -10024f5e: f019 fcab bl 1003e8b8 <__AES_WRAP_veneer> -10024f62: f8dd c01c ldr.w ip, [sp, #28] -10024f66: f8bc 5000 ldrh.w r5, [ip] -10024f6a: 980c ldr r0, [sp, #48] ; 0x30 -10024f6c: 4651 mov r1, sl -10024f6e: 462a mov r2, r5 -10024f70: 305f adds r0, #95 ; 0x5f -10024f72: f7f5 fe1d bl 1001abb0 -10024f76: 980c ldr r0, [sp, #48] ; 0x30 -10024f78: 0a2b lsrs r3, r5, #8 -10024f7a: f880 505e strb.w r5, [r0, #94] ; 0x5e -10024f7e: f880 305d strb.w r3, [r0, #93] ; 0x5d -10024f82: f896 3148 ldrb.w r3, [r6, #328] ; 0x148 -10024f86: 355f adds r5, #95 ; 0x5f -10024f88: f88d 3038 strb.w r3, [sp, #56] ; 0x38 -10024f8c: f896 3149 ldrb.w r3, [r6, #329] ; 0x149 -10024f90: a90e add r1, sp, #56 ; 0x38 -10024f92: f88d 3039 strb.w r3, [sp, #57] ; 0x39 -10024f96: f896 314a ldrb.w r3, [r6, #330] ; 0x14a -10024f9a: 2208 movs r2, #8 -10024f9c: f88d 303a strb.w r3, [sp, #58] ; 0x3a -10024fa0: f896 314b ldrb.w r3, [r6, #331] ; 0x14b -10024fa4: 303d adds r0, #61 ; 0x3d -10024fa6: f88d 303b strb.w r3, [sp, #59] ; 0x3b -10024faa: f896 314c ldrb.w r3, [r6, #332] ; 0x14c -10024fae: 950d str r5, [sp, #52] ; 0x34 -10024fb0: f88d 303c strb.w r3, [sp, #60] ; 0x3c -10024fb4: f896 314d ldrb.w r3, [r6, #333] ; 0x14d -10024fb8: f88d 303d strb.w r3, [sp, #61] ; 0x3d -10024fbc: 2300 movs r3, #0 -10024fbe: f88d 303e strb.w r3, [sp, #62] ; 0x3e -10024fc2: f88d 303f strb.w r3, [sp, #63] ; 0x3f -10024fc6: f7f5 fdf3 bl 1001abb0 -10024fca: e032 b.n 10025032 -10024fcc: 4619 mov r1, r3 -10024fce: 2208 movs r2, #8 -10024fd0: a80e add r0, sp, #56 ; 0x38 -10024fd2: 9307 str r3, [sp, #28] -10024fd4: f7f5 fdf0 bl 1001abb8 -10024fd8: 980c ldr r0, [sp, #48] ; 0x30 -10024fda: a90e add r1, sp, #56 ; 0x38 -10024fdc: 2208 movs r2, #8 -10024fde: 303d adds r0, #61 ; 0x3d -10024fe0: f7f5 fde6 bl 1001abb0 -10024fe4: 9b07 ldr r3, [sp, #28] -10024fe6: 2208 movs r2, #8 -10024fe8: 4619 mov r1, r3 -10024fea: a812 add r0, sp, #72 ; 0x48 -10024fec: f7f5 fde4 bl 1001abb8 -10024ff0: 980c ldr r0, [sp, #48] ; 0x30 -10024ff2: a912 add r1, sp, #72 ; 0x48 -10024ff4: 2208 movs r2, #8 -10024ff6: 3045 adds r0, #69 ; 0x45 -10024ff8: f7f5 fdda bl 1001abb0 -10024ffc: f8db 1034 ldr.w r1, [fp, #52] ; 0x34 -10025000: 9b07 ldr r3, [sp, #28] -10025002: 780a ldrb r2, [r1, #0] -10025004: 2add cmp r2, #221 ; 0xdd -10025006: d106 bne.n 10025016 -10025008: 784d ldrb r5, [r1, #1] -1002500a: a818 add r0, sp, #96 ; 0x60 -1002500c: 3502 adds r5, #2 -1002500e: 462a mov r2, r5 -10025010: f7f5 fdce bl 1001abb0 -10025014: e000 b.n 10025018 -10025016: 461d mov r5, r3 -10025018: 980c ldr r0, [sp, #48] ; 0x30 -1002501a: 0a2b lsrs r3, r5, #8 -1002501c: f880 505e strb.w r5, [r0, #94] ; 0x5e -10025020: f880 305d strb.w r3, [r0, #93] ; 0x5d -10025024: 462a mov r2, r5 -10025026: 305f adds r0, #95 ; 0x5f -10025028: a918 add r1, sp, #96 ; 0x60 -1002502a: 355f adds r5, #95 ; 0x5f -1002502c: f7f5 fdc0 bl 1001abb0 -10025030: 950d str r5, [sp, #52] ; 0x34 -10025032: 9d0d ldr r5, [sp, #52] ; 0x34 -10025034: f04f 0a01 mov.w sl, #1 -10025038: 3512 adds r5, #18 -1002503a: 9b0d ldr r3, [sp, #52] ; 0x34 -1002503c: f8c4 50e0 str.w r5, [r4, #224] ; 0xe0 -10025040: f8c4 30f0 str.w r3, [r4, #240] ; 0xf0 -10025044: f506 7184 add.w r1, r6, #264 ; 0x108 -10025048: 2206 movs r2, #6 -1002504a: 4640 mov r0, r8 -1002504c: f7f5 fdb0 bl 1001abb0 -10025050: f507 51a4 add.w r1, r7, #5248 ; 0x1480 -10025054: 3119 adds r1, #25 -10025056: 2206 movs r2, #6 -10025058: f108 0006 add.w r0, r8, #6 -1002505c: f7f5 fda8 bl 1001abb0 -10025060: f648 008e movw r0, #34958 ; 0x888e -10025064: f7f2 f98e bl 10017384 <_htons> -10025068: 2301 movs r3, #1 -1002506a: f888 300e strb.w r3, [r8, #14] -1002506e: 2303 movs r3, #3 -10025070: f8a8 000c strh.w r0, [r8, #12] -10025074: f888 300f strb.w r3, [r8, #15] -10025078: f8bd 0034 ldrh.w r0, [sp, #52] ; 0x34 -1002507c: f7f2 f982 bl 10017384 <_htons> -10025080: f8a8 0010 strh.w r0, [r8, #16] -10025084: f1ba 0f00 cmp.w sl, #0 -10025088: d00a beq.n 100250a0 -1002508a: ab10 add r3, sp, #64 ; 0x40 -1002508c: f8cd 8040 str.w r8, [sp, #64] ; 0x40 -10025090: 9511 str r5, [sp, #68] ; 0x44 -10025092: e893 0003 ldmia.w r3, {r0, r1} -10025096: 464a mov r2, r9 -10025098: f104 0394 add.w r3, r4, #148 ; 0x94 -1002509c: f7ff fae6 bl 1002466c -100250a0: f44f 7000 mov.w r0, #512 ; 0x200 -100250a4: 214a movs r1, #74 ; 0x4a -100250a6: f011 fbc0 bl 1003682a -100250aa: 4606 mov r6, r0 -100250ac: b1a0 cbz r0, 100250d8 -100250ae: 462a mov r2, r5 -100250b0: 4641 mov r1, r8 -100250b2: 6900 ldr r0, [r0, #16] -100250b4: f7f5 fd7c bl 1001abb0 -100250b8: 4629 mov r1, r5 -100250ba: 4630 mov r0, r6 -100250bc: f011 fb94 bl 100367e8 -100250c0: f641 0334 movw r3, #6196 ; 0x1834 -100250c4: 58f9 ldr r1, [r7, r3] -100250c6: 4630 mov r0, r6 -100250c8: 6a8b ldr r3, [r1, #40] ; 0x28 -100250ca: 4798 blx r3 -100250cc: f504 703d add.w r0, r4, #756 ; 0x2f4 -100250d0: f44f 717a mov.w r1, #1000 ; 0x3e8 -100250d4: f011 fea0 bl 10036e18 -100250d8: b059 add sp, #356 ; 0x164 -100250da: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -100250de: bf00 nop -100250e0: 100415ef .word 0x100415ef - -100250e4 : -100250e4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100250e8: f600 5308 addw r3, r0, #3336 ; 0xd08 -100250ec: b095 sub sp, #84 ; 0x54 -100250ee: 4680 mov r8, r0 -100250f0: 468a mov sl, r1 -100250f2: 4616 mov r6, r2 -100250f4: 2b00 cmp r3, #0 -100250f6: f000 8267 beq.w 100255c8 -100250fa: 2900 cmp r1, #0 -100250fc: f000 8264 beq.w 100255c8 -10025100: f241 3338 movw r3, #4920 ; 0x1338 -10025104: 58c5 ldr r5, [r0, r3] -10025106: f8d5 40dc ldr.w r4, [r5, #220] ; 0xdc -1002510a: f104 0312 add.w r3, r4, #18 -1002510e: f8c5 30ec str.w r3, [r5, #236] ; 0xec -10025112: b17a cbz r2, 10025134 -10025114: f8d5 70e0 ldr.w r7, [r5, #224] ; 0xe0 -10025118: f8d5 b0f0 ldr.w fp, [r5, #240] ; 0xf0 -1002511c: 2f00 cmp r7, #0 -1002511e: f000 8253 beq.w 100255c8 -10025122: f1bb 0f00 cmp.w fp, #0 -10025126: f000 824f beq.w 100255c8 -1002512a: f04f 0c00 mov.w ip, #0 -1002512e: f04f 0901 mov.w r9, #1 -10025132: e1f4 b.n 1002551e -10025134: f8d5 2314 ldr.w r2, [r5, #788] ; 0x314 -10025138: f104 0b3f add.w fp, r4, #63 ; 0x3f -1002513c: f104 074f add.w r7, r4, #79 ; 0x4f -10025140: 2a00 cmp r2, #0 -10025142: f040 8107 bne.w 10025354 -10025146: f8d5 2310 ldr.w r2, [r5, #784] ; 0x310 -1002514a: f04f 0901 mov.w r9, #1 -1002514e: 2a00 cmp r2, #0 -10025150: f040 8095 bne.w 1002527e -10025154: 4618 mov r0, r3 -10025156: 4631 mov r1, r6 -10025158: f44f 72f7 mov.w r2, #494 ; 0x1ee -1002515c: f8c5 9310 str.w r9, [r5, #784] ; 0x310 -10025160: f7f5 fd2a bl 1001abb8 -10025164: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 -10025168: 7d21 ldrb r1, [r4, #20] -1002516a: 781b ldrb r3, [r3, #0] -1002516c: f001 01f8 and.w r1, r1, #248 ; 0xf8 -10025170: 7521 strb r1, [r4, #20] -10025172: 74a3 strb r3, [r4, #18] -10025174: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 -10025178: f104 0017 add.w r0, r4, #23 -1002517c: 789a ldrb r2, [r3, #2] -1002517e: f002 0207 and.w r2, r2, #7 -10025182: 430a orrs r2, r1 -10025184: 7522 strb r2, [r4, #20] -10025186: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 -1002518a: f002 02c7 and.w r2, r2, #199 ; 0xc7 -1002518e: 789b ldrb r3, [r3, #2] -10025190: f003 0308 and.w r3, r3, #8 -10025194: 4313 orrs r3, r2 -10025196: 7523 strb r3, [r4, #20] -10025198: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 -1002519c: f003 030f and.w r3, r3, #15 -100251a0: 7892 ldrb r2, [r2, #2] -100251a2: f012 0f30 tst.w r2, #48 ; 0x30 -100251a6: bf0c ite eq -100251a8: 2200 moveq r2, #0 -100251aa: 2240 movne r2, #64 ; 0x40 -100251ac: 4313 orrs r3, r2 -100251ae: 7523 strb r3, [r4, #20] -100251b0: 7ce3 ldrb r3, [r4, #19] -100251b2: ea43 0309 orr.w r3, r3, r9 -100251b6: 74e3 strb r3, [r4, #19] -100251b8: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 -100251bc: f023 0302 bic.w r3, r3, #2 -100251c0: 7852 ldrb r2, [r2, #1] -100251c2: f002 0202 and.w r2, r2, #2 -100251c6: 4313 orrs r3, r2 -100251c8: 74e3 strb r3, [r4, #19] -100251ca: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 -100251ce: f023 0304 bic.w r3, r3, #4 -100251d2: 7852 ldrb r2, [r2, #1] -100251d4: f002 0204 and.w r2, r2, #4 -100251d8: 4313 orrs r3, r2 -100251da: 74e3 strb r3, [r4, #19] -100251dc: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 -100251e0: f023 0308 bic.w r3, r3, #8 -100251e4: 7852 ldrb r2, [r2, #1] -100251e6: f002 0208 and.w r2, r2, #8 -100251ea: 4313 orrs r3, r2 -100251ec: 74e3 strb r3, [r4, #19] -100251ee: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 -100251f2: 2208 movs r2, #8 -100251f4: 78db ldrb r3, [r3, #3] -100251f6: 7563 strb r3, [r4, #21] -100251f8: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 -100251fc: 791b ldrb r3, [r3, #4] -100251fe: 75a3 strb r3, [r4, #22] -10025200: f8d5 10e4 ldr.w r1, [r5, #228] ; 0xe4 -10025204: 3105 adds r1, #5 -10025206: f7f5 fcd3 bl 1001abb0 -1002520a: 6ae9 ldr r1, [r5, #44] ; 0x2c -1002520c: 6b2a ldr r2, [r5, #48] ; 0x30 -1002520e: f104 001f add.w r0, r4, #31 -10025212: f7f5 fccd bl 1001abb0 -10025216: 4631 mov r1, r6 -10025218: 2210 movs r2, #16 -1002521a: a808 add r0, sp, #32 -1002521c: f7f5 fccc bl 1001abb8 -10025220: 4658 mov r0, fp -10025222: a908 add r1, sp, #32 -10025224: 2210 movs r2, #16 -10025226: f7f5 fcc3 bl 1001abb0 -1002522a: 4631 mov r1, r6 -1002522c: 2208 movs r2, #8 -1002522e: a804 add r0, sp, #16 -10025230: f7f5 fcc2 bl 1001abb8 -10025234: 4638 mov r0, r7 -10025236: a904 add r1, sp, #16 -10025238: 2208 movs r2, #8 -1002523a: f7f5 fcb9 bl 1001abb0 -1002523e: 4631 mov r1, r6 -10025240: 2208 movs r2, #8 -10025242: a806 add r0, sp, #24 -10025244: f7f5 fcb8 bl 1001abb8 -10025248: f508 578c add.w r7, r8, #4480 ; 0x1180 -1002524c: a906 add r1, sp, #24 -1002524e: 2208 movs r2, #8 -10025250: f104 0057 add.w r0, r4, #87 ; 0x57 -10025254: f7f5 fcac bl 1001abb0 -10025258: f897 3055 ldrb.w r3, [r7, #85] ; 0x55 -1002525c: f104 0071 add.w r0, r4, #113 ; 0x71 -10025260: f884 306f strb.w r3, [r4, #111] ; 0x6f -10025264: 6d7b ldr r3, [r7, #84] ; 0x54 -10025266: 371c adds r7, #28 -10025268: f884 3070 strb.w r3, [r4, #112] ; 0x70 -1002526c: 6b79 ldr r1, [r7, #52] ; 0x34 -1002526e: 6bba ldr r2, [r7, #56] ; 0x38 -10025270: f7f5 fc9e bl 1001abb0 -10025274: 6bbf ldr r7, [r7, #56] ; 0x38 -10025276: f107 0b5f add.w fp, r7, #95 ; 0x5f -1002527a: 3771 adds r7, #113 ; 0x71 -1002527c: e068 b.n 10025350 -1002527e: 4618 mov r0, r3 -10025280: 4631 mov r1, r6 -10025282: f44f 72f7 mov.w r2, #494 ; 0x1ee -10025286: f8c5 9314 str.w r9, [r5, #788] ; 0x314 -1002528a: f8c5 6310 str.w r6, [r5, #784] ; 0x310 -1002528e: f7f5 fc93 bl 1001abb8 -10025292: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 -10025296: 7d22 ldrb r2, [r4, #20] -10025298: 781b ldrb r3, [r3, #0] -1002529a: f002 02f8 and.w r2, r2, #248 ; 0xf8 -1002529e: 7522 strb r2, [r4, #20] -100252a0: 74a3 strb r3, [r4, #18] -100252a2: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 -100252a6: f104 0017 add.w r0, r4, #23 -100252aa: 789b ldrb r3, [r3, #2] -100252ac: f003 0307 and.w r3, r3, #7 -100252b0: 4313 orrs r3, r2 -100252b2: 7523 strb r3, [r4, #20] -100252b4: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 -100252b8: f003 0307 and.w r3, r3, #7 -100252bc: 7892 ldrb r2, [r2, #2] -100252be: f002 0208 and.w r2, r2, #8 -100252c2: 4313 orrs r3, r2 -100252c4: 7523 strb r3, [r4, #20] -100252c6: 7ce3 ldrb r3, [r4, #19] -100252c8: f043 0301 orr.w r3, r3, #1 -100252cc: 74e3 strb r3, [r4, #19] -100252ce: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 -100252d2: f003 03f1 and.w r3, r3, #241 ; 0xf1 -100252d6: 7852 ldrb r2, [r2, #1] -100252d8: f002 0202 and.w r2, r2, #2 -100252dc: 4313 orrs r3, r2 -100252de: 74e3 strb r3, [r4, #19] -100252e0: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 -100252e4: 2208 movs r2, #8 -100252e6: 78db ldrb r3, [r3, #3] -100252e8: 7563 strb r3, [r4, #21] -100252ea: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 -100252ee: 791b ldrb r3, [r3, #4] -100252f0: 75a3 strb r3, [r4, #22] -100252f2: f8d5 10e4 ldr.w r1, [r5, #228] ; 0xe4 -100252f6: 3105 adds r1, #5 -100252f8: f7f5 fc5a bl 1001abb0 -100252fc: 4631 mov r1, r6 -100252fe: 2210 movs r2, #16 -10025300: a808 add r0, sp, #32 -10025302: f7f5 fc59 bl 1001abb8 -10025306: 4658 mov r0, fp -10025308: a908 add r1, sp, #32 -1002530a: 2210 movs r2, #16 -1002530c: f7f5 fc50 bl 1001abb0 -10025310: 4631 mov r1, r6 -10025312: 2208 movs r2, #8 -10025314: a804 add r0, sp, #16 -10025316: f7f5 fc4f bl 1001abb8 -1002531a: 4638 mov r0, r7 -1002531c: a904 add r1, sp, #16 -1002531e: 2208 movs r2, #8 -10025320: f7f5 fc46 bl 1001abb0 -10025324: 4631 mov r1, r6 -10025326: 2208 movs r2, #8 -10025328: a806 add r0, sp, #24 -1002532a: f7f5 fc45 bl 1001abb8 -1002532e: f104 0057 add.w r0, r4, #87 ; 0x57 -10025332: a906 add r1, sp, #24 -10025334: 2208 movs r2, #8 -10025336: f7f5 fc3b bl 1001abb0 -1002533a: f04f 0b5f mov.w fp, #95 ; 0x5f -1002533e: f884 606f strb.w r6, [r4, #111] ; 0x6f -10025342: f884 6070 strb.w r6, [r4, #112] ; 0x70 -10025346: 2771 movs r7, #113 ; 0x71 -10025348: f8c5 631c str.w r6, [r5, #796] ; 0x31c -1002534c: f8c5 6320 str.w r6, [r5, #800] ; 0x320 -10025350: 46b4 mov ip, r6 -10025352: e0e0 b.n 10025516 -10025354: f8d5 2318 ldr.w r2, [r5, #792] ; 0x318 -10025358: 4618 mov r0, r3 -1002535a: 4631 mov r1, r6 -1002535c: 2a00 cmp r2, #0 -1002535e: d074 beq.n 1002544a -10025360: f44f 72f7 mov.w r2, #494 ; 0x1ee -10025364: f7f5 fc28 bl 1001abb8 -10025368: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 -1002536c: 7d21 ldrb r1, [r4, #20] -1002536e: 781b ldrb r3, [r3, #0] -10025370: f001 01f8 and.w r1, r1, #248 ; 0xf8 -10025374: 7521 strb r1, [r4, #20] -10025376: 74a3 strb r3, [r4, #18] -10025378: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 -1002537c: f104 0017 add.w r0, r4, #23 -10025380: 789b ldrb r3, [r3, #2] -10025382: f04f 0901 mov.w r9, #1 -10025386: f003 0307 and.w r3, r3, #7 -1002538a: 430b orrs r3, r1 -1002538c: 7523 strb r3, [r4, #20] -1002538e: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 -10025392: f003 03c7 and.w r3, r3, #199 ; 0xc7 -10025396: 7892 ldrb r2, [r2, #2] -10025398: f002 0208 and.w r2, r2, #8 -1002539c: 431a orrs r2, r3 -1002539e: f508 538c add.w r3, r8, #4480 ; 0x1180 -100253a2: 7522 strb r2, [r4, #20] -100253a4: 331c adds r3, #28 -100253a6: f8d3 3188 ldr.w r3, [r3, #392] ; 0x188 -100253aa: 011b lsls r3, r3, #4 -100253ac: f003 0330 and.w r3, r3, #48 ; 0x30 -100253b0: 431a orrs r2, r3 -100253b2: 7ce3 ldrb r3, [r4, #19] -100253b4: f002 023f and.w r2, r2, #63 ; 0x3f -100253b8: f023 030c bic.w r3, r3, #12 -100253bc: f043 0303 orr.w r3, r3, #3 -100253c0: 7522 strb r2, [r4, #20] -100253c2: 74e3 strb r3, [r4, #19] -100253c4: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 -100253c8: 2208 movs r2, #8 -100253ca: 78db ldrb r3, [r3, #3] -100253cc: 7563 strb r3, [r4, #21] -100253ce: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 -100253d2: 791b ldrb r3, [r3, #4] -100253d4: 75a3 strb r3, [r4, #22] -100253d6: f8d5 10e4 ldr.w r1, [r5, #228] ; 0xe4 -100253da: 3105 adds r1, #5 -100253dc: f7f5 fbe8 bl 1001abb0 -100253e0: 4631 mov r1, r6 -100253e2: 2220 movs r2, #32 -100253e4: a80c add r0, sp, #48 ; 0x30 -100253e6: f7f5 fbe7 bl 1001abb8 -100253ea: a90c add r1, sp, #48 ; 0x30 -100253ec: 2220 movs r2, #32 -100253ee: f104 001f add.w r0, r4, #31 -100253f2: f7f5 fbdd bl 1001abb0 -100253f6: 4631 mov r1, r6 -100253f8: 2210 movs r2, #16 -100253fa: a808 add r0, sp, #32 -100253fc: f7f5 fbdc bl 1001abb8 -10025400: 4658 mov r0, fp -10025402: a908 add r1, sp, #32 -10025404: 2210 movs r2, #16 -10025406: f7f5 fbd3 bl 1001abb0 -1002540a: 4631 mov r1, r6 -1002540c: 2208 movs r2, #8 -1002540e: a804 add r0, sp, #16 -10025410: f7f5 fbd2 bl 1001abb8 -10025414: 4638 mov r0, r7 -10025416: a904 add r1, sp, #16 -10025418: 2208 movs r2, #8 -1002541a: f7f5 fbc9 bl 1001abb0 -1002541e: 4631 mov r1, r6 -10025420: 2208 movs r2, #8 -10025422: a806 add r0, sp, #24 -10025424: f7f5 fbc8 bl 1001abb8 -10025428: f104 0057 add.w r0, r4, #87 ; 0x57 -1002542c: a906 add r1, sp, #24 -1002542e: 2208 movs r2, #8 -10025430: f7f5 fbbe bl 1001abb0 -10025434: f04f 0b5f mov.w fp, #95 ; 0x5f -10025438: f884 606f strb.w r6, [r4, #111] ; 0x6f -1002543c: f884 6070 strb.w r6, [r4, #112] ; 0x70 -10025440: 2771 movs r7, #113 ; 0x71 -10025442: f8c5 6318 str.w r6, [r5, #792] ; 0x318 -10025446: 46b4 mov ip, r6 -10025448: e065 b.n 10025516 -1002544a: f44f 72f7 mov.w r2, #494 ; 0x1ee -1002544e: 9301 str r3, [sp, #4] -10025450: f7f5 fbb2 bl 1001abb8 -10025454: 68aa ldr r2, [r5, #8] -10025456: 9b01 ldr r3, [sp, #4] -10025458: f012 0f02 tst.w r2, #2 -1002545c: bf14 ite ne -1002545e: 2202 movne r2, #2 -10025460: 22fe moveq r2, #254 ; 0xfe -10025462: 74a2 strb r2, [r4, #18] -10025464: f508 528c add.w r2, r8, #4480 ; 0x1180 -10025468: 321c adds r2, #28 -1002546a: f892 20bc ldrb.w r2, [r2, #188] ; 0xbc -1002546e: 2a04 cmp r2, #4 -10025470: d007 beq.n 10025482 -10025472: 7c2a ldrb r2, [r5, #16] -10025474: 2a04 cmp r2, #4 -10025476: bf14 ite ne -10025478: f04f 0901 movne.w r9, #1 -1002547c: f04f 0902 moveq.w r9, #2 -10025480: e001 b.n 10025486 -10025482: f04f 0902 mov.w r9, #2 -10025486: 7ce2 ldrb r2, [r4, #19] -10025488: 2700 movs r7, #0 -1002548a: f042 020f orr.w r2, r2, #15 -1002548e: 7567 strb r7, [r4, #21] -10025490: 75a7 strb r7, [r4, #22] -10025492: f884 9014 strb.w r9, [r4, #20] -10025496: 74e2 strb r2, [r4, #19] -10025498: 4618 mov r0, r3 -1002549a: f8d5 131c ldr.w r1, [r5, #796] ; 0x31c -1002549e: f8d5 2320 ldr.w r2, [r5, #800] ; 0x320 -100254a2: f7fe ffce bl 10024442 -100254a6: f505 7047 add.w r0, r5, #796 ; 0x31c -100254aa: f7fe ffd9 bl 10024460 -100254ae: 4639 mov r1, r7 -100254b0: 2220 movs r2, #32 -100254b2: a80c add r0, sp, #48 ; 0x30 -100254b4: f7f5 fb80 bl 1001abb8 -100254b8: a90c add r1, sp, #48 ; 0x30 -100254ba: 2220 movs r2, #32 -100254bc: f104 001f add.w r0, r4, #31 -100254c0: f7f5 fb76 bl 1001abb0 -100254c4: 4639 mov r1, r7 -100254c6: 2210 movs r2, #16 -100254c8: a808 add r0, sp, #32 -100254ca: f7f5 fb75 bl 1001abb8 -100254ce: 4658 mov r0, fp -100254d0: a908 add r1, sp, #32 -100254d2: 2210 movs r2, #16 -100254d4: f7f5 fb6c bl 1001abb0 -100254d8: 4639 mov r1, r7 -100254da: 2208 movs r2, #8 -100254dc: a804 add r0, sp, #16 -100254de: f7f5 fb6b bl 1001abb8 -100254e2: a904 add r1, sp, #16 -100254e4: 2208 movs r2, #8 -100254e6: f104 004f add.w r0, r4, #79 ; 0x4f -100254ea: f7f5 fb61 bl 1001abb0 -100254ee: 4639 mov r1, r7 -100254f0: 2208 movs r2, #8 -100254f2: a806 add r0, sp, #24 -100254f4: f7f5 fb60 bl 1001abb8 -100254f8: f104 0057 add.w r0, r4, #87 ; 0x57 -100254fc: a906 add r1, sp, #24 -100254fe: 2208 movs r2, #8 -10025500: f7f5 fb56 bl 1001abb0 -10025504: f04f 0b5f mov.w fp, #95 ; 0x5f -10025508: f884 706f strb.w r7, [r4, #111] ; 0x6f -1002550c: f884 7070 strb.w r7, [r4, #112] ; 0x70 -10025510: f04f 0c01 mov.w ip, #1 -10025514: 2771 movs r7, #113 ; 0x71 -10025516: f8c5 70e0 str.w r7, [r5, #224] ; 0xe0 -1002551a: f8c5 b0f0 str.w fp, [r5, #240] ; 0xf0 -1002551e: f50a 7184 add.w r1, sl, #264 ; 0x108 -10025522: 2206 movs r2, #6 -10025524: 4620 mov r0, r4 -10025526: f8cd c004 str.w ip, [sp, #4] -1002552a: f7f5 fb41 bl 1001abb0 -1002552e: f508 51a4 add.w r1, r8, #5248 ; 0x1480 -10025532: 3119 adds r1, #25 -10025534: 2206 movs r2, #6 -10025536: 1da0 adds r0, r4, #6 -10025538: f7f5 fb3a bl 1001abb0 -1002553c: f648 008e movw r0, #34958 ; 0x888e -10025540: f7f1 ff20 bl 10017384 <_htons> -10025544: 2301 movs r3, #1 -10025546: 73a3 strb r3, [r4, #14] -10025548: 2303 movs r3, #3 -1002554a: 81a0 strh r0, [r4, #12] -1002554c: 73e3 strb r3, [r4, #15] -1002554e: fa1f f08b uxth.w r0, fp -10025552: f7f1 ff17 bl 10017384 <_htons> -10025556: f8dd c004 ldr.w ip, [sp, #4] -1002555a: 8220 strh r0, [r4, #16] -1002555c: b9a6 cbnz r6, 10025588 -1002555e: f105 0394 add.w r3, r5, #148 ; 0x94 -10025562: a902 add r1, sp, #8 -10025564: f1bc 0f00 cmp.w ip, #0 -10025568: d004 beq.n 10025574 -1002556a: 9402 str r4, [sp, #8] -1002556c: 9703 str r7, [sp, #12] -1002556e: c903 ldmia r1, {r0, r1} -10025570: 464a mov r2, r9 -10025572: e007 b.n 10025584 -10025574: f8d5 20e4 ldr.w r2, [r5, #228] ; 0xe4 -10025578: 9402 str r4, [sp, #8] -1002557a: 7892 ldrb r2, [r2, #2] -1002557c: 9703 str r7, [sp, #12] -1002557e: f002 0207 and.w r2, r2, #7 -10025582: c903 ldmia r1, {r0, r1} -10025584: f7ff f872 bl 1002466c -10025588: f44f 7000 mov.w r0, #512 ; 0x200 -1002558c: 214a movs r1, #74 ; 0x4a -1002558e: f011 f94c bl 1003682a -10025592: 4606 mov r6, r0 -10025594: b1c0 cbz r0, 100255c8 -10025596: 463a mov r2, r7 -10025598: 4621 mov r1, r4 -1002559a: 6900 ldr r0, [r0, #16] -1002559c: f7f5 fb08 bl 1001abb0 -100255a0: 4639 mov r1, r7 -100255a2: 4630 mov r0, r6 -100255a4: f011 f920 bl 100367e8 -100255a8: f641 0334 movw r3, #6196 ; 0x1834 -100255ac: f858 1003 ldr.w r1, [r8, r3] -100255b0: 4630 mov r0, r6 -100255b2: 6a8b ldr r3, [r1, #40] ; 0x28 -100255b4: 4798 blx r3 -100255b6: f8d5 3314 ldr.w r3, [r5, #788] ; 0x314 -100255ba: b92b cbnz r3, 100255c8 -100255bc: f505 703d add.w r0, r5, #756 ; 0x2f4 -100255c0: f44f 717a mov.w r1, #1000 ; 0x3e8 -100255c4: f011 fc28 bl 10036e18 -100255c8: b015 add sp, #84 ; 0x54 -100255ca: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -100255ce : -100255ce: b573 push {r0, r1, r4, r5, r6, lr} -100255d0: 4605 mov r5, r0 -100255d2: 2800 cmp r0, #0 -100255d4: d03c beq.n 10025650 -100255d6: 6944 ldr r4, [r0, #20] -100255d8: a901 add r1, sp, #4 -100255da: f104 060c add.w r6, r4, #12 -100255de: 4630 mov r0, r6 -100255e0: f7f1 fff2 bl 100175c8 -100255e4: 682b ldr r3, [r5, #0] -100255e6: b303 cbz r3, 1002562a -100255e8: 6923 ldr r3, [r4, #16] -100255ea: 06d8 lsls r0, r3, #27 -100255ec: d522 bpl.n 10025634 -100255ee: f8d5 30fc ldr.w r3, [r5, #252] ; 0xfc -100255f2: f203 138b addw r3, r3, #395 ; 0x18b -100255f6: eb04 0383 add.w r3, r4, r3, lsl #2 -100255fa: f8d3 3d08 ldr.w r3, [r3, #3336] ; 0xd08 -100255fe: b1a3 cbz r3, 1002562a -10025600: f8d3 2300 ldr.w r2, [r3, #768] ; 0x300 -10025604: 3201 adds r2, #1 -10025606: 2a05 cmp r2, #5 -10025608: f8c3 2300 str.w r2, [r3, #768] ; 0x300 -1002560c: dd05 ble.n 1002561a -1002560e: 4620 mov r0, r4 -10025610: 4629 mov r1, r5 -10025612: 220f movs r2, #15 -10025614: f7fe ff88 bl 10024528 -10025618: e007 b.n 1002562a -1002561a: 6923 ldr r3, [r4, #16] -1002561c: 06d9 lsls r1, r3, #27 -1002561e: d50f bpl.n 10025640 -10025620: 4620 mov r0, r4 -10025622: 4629 mov r1, r5 -10025624: 2201 movs r2, #1 -10025626: f7ff f9f7 bl 10024a18 -1002562a: 4630 mov r0, r6 -1002562c: a901 add r1, sp, #4 -1002562e: f7f1 ffd5 bl 100175dc -10025632: e00d b.n 10025650 -10025634: 071a lsls r2, r3, #28 -10025636: d5f8 bpl.n 1002562a -10025638: f241 3338 movw r3, #4920 ; 0x1338 -1002563c: 58e3 ldr r3, [r4, r3] -1002563e: e7de b.n 100255fe -10025640: 071b lsls r3, r3, #28 -10025642: d5f2 bpl.n 1002562a -10025644: 4620 mov r0, r4 -10025646: 4629 mov r1, r5 -10025648: 2201 movs r2, #1 -1002564a: f7ff fd4b bl 100250e4 -1002564e: e7ec b.n 1002562a -10025650: b002 add sp, #8 -10025652: bd70 pop {r4, r5, r6, pc} - -10025654 : -10025654: f8d1 30fc ldr.w r3, [r1, #252] ; 0xfc -10025658: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1002565c: f203 138b addw r3, r3, #395 ; 0x18b -10025660: eb00 0383 add.w r3, r0, r3, lsl #2 -10025664: f8d3 4d08 ldr.w r4, [r3, #3336] ; 0xd08 -10025668: b086 sub sp, #24 -1002566a: f8d4 30d4 ldr.w r3, [r4, #212] ; 0xd4 -1002566e: 4605 mov r5, r0 -10025670: 7bda ldrb r2, [r3, #15] -10025672: 460e mov r6, r1 -10025674: 2a03 cmp r2, #3 -10025676: f040 80a8 bne.w 100257ca -1002567a: f103 0212 add.w r2, r3, #18 -1002567e: f8c4 20e4 str.w r2, [r4, #228] ; 0xe4 -10025682: 7cda ldrb r2, [r3, #19] -10025684: f002 0105 and.w r1, r2, #5 -10025688: 2905 cmp r1, #5 -1002568a: d102 bne.n 10025692 -1002568c: 0711 lsls r1, r2, #28 -1002568e: f100 809c bmi.w 100257ca -10025692: 7d1b ldrb r3, [r3, #20] -10025694: 071a lsls r2, r3, #28 -10025696: f140 8098 bpl.w 100257ca -1002569a: 6823 ldr r3, [r4, #0] -1002569c: 2b01 cmp r3, #1 -1002569e: d002 beq.n 100256a6 -100256a0: 2b02 cmp r3, #2 -100256a2: d04b beq.n 1002573c -100256a4: e091 b.n 100257ca -100256a6: 4b4a ldr r3, [pc, #296] ; (100257d0 ) -100256a8: 681b ldr r3, [r3, #0] -100256aa: b13b cbz r3, 100256bc -100256ac: 4849 ldr r0, [pc, #292] ; (100257d4 ) -100256ae: f7f5 fa57 bl 1001ab60 -100256b2: 4b49 ldr r3, [pc, #292] ; (100257d8 ) -100256b4: f8d3 01a0 ldr.w r0, [r3, #416] ; 0x1a0 -100256b8: f7f5 fa52 bl 1001ab60 -100256bc: f8d4 00e4 ldr.w r0, [r4, #228] ; 0xe4 -100256c0: a904 add r1, sp, #16 -100256c2: f7fe fe8e bl 100243e2 -100256c6: a804 add r0, sp, #16 -100256c8: f7fe feca bl 10024460 -100256cc: 6962 ldr r2, [r4, #20] -100256ce: 9b04 ldr r3, [sp, #16] -100256d0: 429a cmp r2, r3 -100256d2: d17a bne.n 100257ca -100256d4: 69a2 ldr r2, [r4, #24] -100256d6: 9b05 ldr r3, [sp, #20] -100256d8: 429a cmp r2, r3 -100256da: d176 bne.n 100257ca -100256dc: f504 703d add.w r0, r4, #756 ; 0x2f4 -100256e0: f011 fb9c bl 10036e1c -100256e4: f8d4 10e4 ldr.w r1, [r4, #228] ; 0xe4 -100256e8: 6ae0 ldr r0, [r4, #44] ; 0x2c -100256ea: 310d adds r1, #13 -100256ec: 2220 movs r2, #32 -100256ee: f7f1 fe8f bl 10017410 -100256f2: f104 0374 add.w r3, r4, #116 ; 0x74 -100256f6: f8d4 00d4 ldr.w r0, [r4, #212] ; 0xd4 -100256fa: 9300 str r3, [sp, #0] -100256fc: 2320 movs r3, #32 -100256fe: 9301 str r3, [sp, #4] -10025700: f104 0794 add.w r7, r4, #148 ; 0x94 -10025704: 2340 movs r3, #64 ; 0x40 -10025706: 9702 str r7, [sp, #8] -10025708: 9303 str r3, [sp, #12] -1002570a: 1d81 adds r1, r0, #6 -1002570c: 6a62 ldr r2, [r4, #36] ; 0x24 -1002570e: 6ae3 ldr r3, [r4, #44] ; 0x2c -10025710: f019 f8fa bl 1003e908 <__rom_psk_CalcPTK_veneer> -10025714: f104 03d4 add.w r3, r4, #212 ; 0xd4 -10025718: 463a mov r2, r7 -1002571a: e893 0003 ldmia.w r3, {r0, r1} -1002571e: f7fe ff65 bl 100245ec -10025722: 4607 mov r7, r0 -10025724: 2800 cmp r0, #0 -10025726: d034 beq.n 10025792 -10025728: 2200 movs r2, #0 -1002572a: 2302 movs r3, #2 -1002572c: f8c4 2300 str.w r2, [r4, #768] ; 0x300 -10025730: 6023 str r3, [r4, #0] -10025732: 4628 mov r0, r5 -10025734: 4631 mov r1, r6 -10025736: f7ff f96f bl 10024a18 -1002573a: e046 b.n 100257ca -1002573c: 4b24 ldr r3, [pc, #144] ; (100257d0 ) -1002573e: 681b ldr r3, [r3, #0] -10025740: b13b cbz r3, 10025752 -10025742: 4824 ldr r0, [pc, #144] ; (100257d4 ) -10025744: f7f5 fa0c bl 1001ab60 -10025748: 4b23 ldr r3, [pc, #140] ; (100257d8 ) -1002574a: f8d3 01a4 ldr.w r0, [r3, #420] ; 0x1a4 -1002574e: f7f5 fa07 bl 1001ab60 -10025752: f8d4 00e4 ldr.w r0, [r4, #228] ; 0xe4 -10025756: a904 add r1, sp, #16 -10025758: f8d4 801c ldr.w r8, [r4, #28] -1002575c: 6a27 ldr r7, [r4, #32] -1002575e: f7fe fe40 bl 100243e2 -10025762: 9b04 ldr r3, [sp, #16] -10025764: 4598 cmp r8, r3 -10025766: d106 bne.n 10025776 -10025768: 9b05 ldr r3, [sp, #20] -1002576a: 1afb subs r3, r7, r3 -1002576c: 425f negs r7, r3 -1002576e: 415f adcs r7, r3 -10025770: 2f00 cmp r7, #0 -10025772: d1b3 bne.n 100256dc -10025774: e000 b.n 10025778 -10025776: 2700 movs r7, #0 -10025778: f504 703d add.w r0, r4, #756 ; 0x2f4 -1002577c: f011 fb4e bl 10036e1c -10025780: f104 03d4 add.w r3, r4, #212 ; 0xd4 -10025784: e893 0003 ldmia.w r3, {r0, r1} -10025788: f104 0294 add.w r2, r4, #148 ; 0x94 -1002578c: f7fe ff2e bl 100245ec -10025790: b930 cbnz r0, 100257a0 -10025792: 4628 mov r0, r5 -10025794: 4631 mov r1, r6 -10025796: 220e movs r2, #14 -10025798: f7fe fec6 bl 10024528 -1002579c: 6027 str r7, [r4, #0] -1002579e: e014 b.n 100257ca -100257a0: 4631 mov r1, r6 -100257a2: 4628 mov r0, r5 -100257a4: f7fe fdc8 bl 10024338 -100257a8: f8c6 7110 str.w r7, [r6, #272] ; 0x110 -100257ac: 2303 movs r3, #3 -100257ae: 2601 movs r6, #1 -100257b0: e884 0048 stmia.w r4, {r3, r6} -100257b4: f505 548c add.w r4, r5, #4480 ; 0x1180 -100257b8: 6c23 ldr r3, [r4, #64] ; 0x40 -100257ba: 341c adds r4, #28 -100257bc: b92b cbnz r3, 100257ca -100257be: 6b23 ldr r3, [r4, #48] ; 0x30 -100257c0: b91b cbnz r3, 100257ca -100257c2: 4628 mov r0, r5 -100257c4: f7ff f83a bl 1002483c -100257c8: 6326 str r6, [r4, #48] ; 0x30 -100257ca: b006 add sp, #24 -100257cc: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100257d0: 10044ec0 .word 0x10044ec0 -100257d4: 10042939 .word 0x10042939 -100257d8: 10043a4c .word 0x10043a4c - -100257dc : -100257dc: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -100257e0: f100 090c add.w r9, r0, #12 -100257e4: b0cc sub sp, #304 ; 0x130 -100257e6: 4688 mov r8, r1 -100257e8: 4605 mov r5, r0 -100257ea: a907 add r1, sp, #28 -100257ec: 4648 mov r0, r9 -100257ee: f7f1 feeb bl 100175c8 -100257f2: f8d8 3000 ldr.w r3, [r8] -100257f6: 2b00 cmp r3, #0 -100257f8: f000 81ec beq.w 10025bd4 -100257fc: f241 3338 movw r3, #4920 ; 0x1338 -10025800: 58ec ldr r4, [r5, r3] -10025802: f8d4 30d4 ldr.w r3, [r4, #212] ; 0xd4 -10025806: 7bda ldrb r2, [r3, #15] -10025808: 2a03 cmp r2, #3 -1002580a: f040 81e3 bne.w 10025bd4 -1002580e: f103 0212 add.w r2, r3, #18 -10025812: f8c4 20e4 str.w r2, [r4, #228] ; 0xe4 -10025816: 7d1a ldrb r2, [r3, #20] -10025818: f002 0208 and.w r2, r2, #8 -1002581c: f002 07ff and.w r7, r2, #255 ; 0xff -10025820: 2a00 cmp r2, #0 -10025822: f000 8149 beq.w 10025ab8 -10025826: 7cdb ldrb r3, [r3, #19] -10025828: 07db lsls r3, r3, #31 -1002582a: d463 bmi.n 100258f4 -1002582c: f504 7641 add.w r6, r4, #772 ; 0x304 -10025830: 4630 mov r0, r6 -10025832: f011 faf3 bl 10036e1c -10025836: 4630 mov r0, r6 -10025838: f011 faf5 bl 10036e26 -1002583c: f8d4 3314 ldr.w r3, [r4, #788] ; 0x314 -10025840: b913 cbnz r3, 10025848 -10025842: f8d4 3310 ldr.w r3, [r4, #784] ; 0x310 -10025846: b15b cbz r3, 10025860 -10025848: f04f 33ff mov.w r3, #4294967295 -1002584c: 2200 movs r2, #0 -1002584e: 6163 str r3, [r4, #20] -10025850: 61a3 str r3, [r4, #24] -10025852: f505 538c add.w r3, r5, #4480 ; 0x1180 -10025856: f8c4 2310 str.w r2, [r4, #784] ; 0x310 -1002585a: f8c4 2314 str.w r2, [r4, #788] ; 0x314 -1002585e: 64da str r2, [r3, #76] ; 0x4c -10025860: 6963 ldr r3, [r4, #20] -10025862: 3301 adds r3, #1 -10025864: d13a bne.n 100258dc -10025866: 69a3 ldr r3, [r4, #24] -10025868: 3301 adds r3, #1 -1002586a: d137 bne.n 100258dc -1002586c: f8d5 3d0c ldr.w r3, [r5, #3340] ; 0xd0c -10025870: f605 5708 addw r7, r5, #3336 ; 0xd08 -10025874: f207 4a94 addw sl, r7, #1172 ; 0x494 -10025878: 7423 strb r3, [r4, #16] -1002587a: 4650 mov r0, sl -1002587c: 466e mov r6, sp -1002587e: f207 479c addw r7, r7, #1180 ; 0x49c -10025882: f7fe fe21 bl 100244c8 -10025886: cf0f ldmia r7!, {r0, r1, r2, r3} -10025888: c60f stmia r6!, {r0, r1, r2, r3} -1002588a: e897 0003 ldmia.w r7, {r0, r1} -1002588e: e886 0003 stmia.w r6, {r0, r1} -10025892: f104 012c add.w r1, r4, #44 ; 0x2c -10025896: e89a 000c ldmia.w sl, {r2, r3} -1002589a: c903 ldmia r1, {r0, r1} -1002589c: f7fe fcc0 bl 10024220 -100258a0: f8d4 10e4 ldr.w r1, [r4, #228] ; 0xe4 -100258a4: 6a60 ldr r0, [r4, #36] ; 0x24 -100258a6: 310d adds r1, #13 -100258a8: 2220 movs r2, #32 -100258aa: f7f1 fdb1 bl 10017410 -100258ae: f104 0374 add.w r3, r4, #116 ; 0x74 -100258b2: f8d4 00d4 ldr.w r0, [r4, #212] ; 0xd4 -100258b6: 9300 str r3, [sp, #0] -100258b8: 2320 movs r3, #32 -100258ba: 9301 str r3, [sp, #4] -100258bc: f104 0394 add.w r3, r4, #148 ; 0x94 -100258c0: 9302 str r3, [sp, #8] -100258c2: 2340 movs r3, #64 ; 0x40 -100258c4: 9303 str r3, [sp, #12] -100258c6: 1d81 adds r1, r0, #6 -100258c8: 6a62 ldr r2, [r4, #36] ; 0x24 -100258ca: 6ae3 ldr r3, [r4, #44] ; 0x2c -100258cc: f019 f81c bl 1003e908 <__rom_psk_CalcPTK_veneer> -100258d0: 4628 mov r0, r5 -100258d2: 4641 mov r1, r8 -100258d4: 2200 movs r2, #0 -100258d6: f7ff fc05 bl 100250e4 -100258da: e17b b.n 10025bd4 -100258dc: f104 0314 add.w r3, r4, #20 -100258e0: e893 0003 ldmia.w r3, {r0, r1} -100258e4: f8d4 20e4 ldr.w r2, [r4, #228] ; 0xe4 -100258e8: f7fe fd92 bl 10024410 -100258ec: 2800 cmp r0, #0 -100258ee: f040 8171 bne.w 10025bd4 -100258f2: e7bb b.n 1002586c -100258f4: 2300 movs r3, #0 -100258f6: f8c4 3300 str.w r3, [r4, #768] ; 0x300 -100258fa: f8d4 3310 ldr.w r3, [r4, #784] ; 0x310 -100258fe: 2b00 cmp r3, #0 -10025900: f000 8168 beq.w 10025bd4 -10025904: f504 703d add.w r0, r4, #756 ; 0x2f4 -10025908: f011 fa88 bl 10036e1c -1002590c: f8d4 00e4 ldr.w r0, [r4, #228] ; 0xe4 -10025910: a90a add r1, sp, #40 ; 0x28 -10025912: f7fe fd66 bl 100243e2 -10025916: 6963 ldr r3, [r4, #20] -10025918: 3301 adds r3, #1 -1002591a: d10e bne.n 1002593a -1002591c: 69a3 ldr r3, [r4, #24] -1002591e: 3301 adds r3, #1 -10025920: d10b bne.n 1002593a -10025922: f8d4 00e4 ldr.w r0, [r4, #228] ; 0xe4 -10025926: 6a61 ldr r1, [r4, #36] ; 0x24 -10025928: 300d adds r0, #13 -1002592a: 2220 movs r2, #32 -1002592c: f7f5 f93c bl 1001aba8 -10025930: 4606 mov r6, r0 -10025932: 2800 cmp r0, #0 -10025934: f040 814e bne.w 10025bd4 -10025938: e00a b.n 10025950 -1002593a: f104 0314 add.w r3, r4, #20 -1002593e: e893 0003 ldmia.w r3, {r0, r1} -10025942: f8d4 20e4 ldr.w r2, [r4, #228] ; 0xe4 -10025946: f7fe fd63 bl 10024410 -1002594a: 2800 cmp r0, #0 -1002594c: d0e9 beq.n 10025922 -1002594e: e141 b.n 10025bd4 -10025950: f104 03d4 add.w r3, r4, #212 ; 0xd4 -10025954: e893 0003 ldmia.w r3, {r0, r1} -10025958: f104 0294 add.w r2, r4, #148 ; 0x94 -1002595c: f7fe fe46 bl 100245ec -10025960: 2800 cmp r0, #0 -10025962: f000 8137 beq.w 10025bd4 -10025966: 9b0a ldr r3, [sp, #40] ; 0x28 -10025968: f8d4 10e4 ldr.w r1, [r4, #228] ; 0xe4 -1002596c: 6163 str r3, [r4, #20] -1002596e: 9b0b ldr r3, [sp, #44] ; 0x2c -10025970: 61a3 str r3, [r4, #24] -10025972: 780b ldrb r3, [r1, #0] -10025974: 2b02 cmp r3, #2 -10025976: d159 bne.n 10025a2c -10025978: 4b9a ldr r3, [pc, #616] ; (10025be4 ) -1002597a: af0c add r7, sp, #48 ; 0x30 -1002597c: f853 0b04 ldr.w r0, [r3], #4 -10025980: 315f adds r1, #95 ; 0x5f -10025982: 9008 str r0, [sp, #32] -10025984: 6818 ldr r0, [r3, #0] -10025986: 9009 str r0, [sp, #36] ; 0x24 -10025988: f811 3c01 ldrb.w r3, [r1, #-1] -1002598c: f811 2c02 ldrb.w r2, [r1, #-2] -10025990: 4620 mov r0, r4 -10025992: eb03 2202 add.w r2, r3, r2, lsl #8 -10025996: 2310 movs r3, #16 -10025998: 9300 str r3, [sp, #0] -1002599a: 9701 str r7, [sp, #4] -1002599c: b292 uxth r2, r2 -1002599e: f104 03a4 add.w r3, r4, #164 ; 0xa4 -100259a2: f7fe fe93 bl 100246cc -100259a6: 2800 cmp r0, #0 -100259a8: f000 8114 beq.w 10025bd4 -100259ac: 783b ldrb r3, [r7, #0] -100259ae: 2b30 cmp r3, #48 ; 0x30 -100259b0: d157 bne.n 10025a62 -100259b2: 787e ldrb r6, [r7, #1] -100259b4: 3602 adds r6, #2 -100259b6: 5dbb ldrb r3, [r7, r6] -100259b8: 2b30 cmp r3, #48 ; 0x30 -100259ba: f000 810b beq.w 10025bd4 -100259be: 2bdd cmp r3, #221 ; 0xdd -100259c0: d001 beq.n 100259c6 -100259c2: 2600 movs r6, #0 -100259c4: e026 b.n 10025a14 -100259c6: 443e add r6, r7 -100259c8: 1cb0 adds r0, r6, #2 -100259ca: a909 add r1, sp, #36 ; 0x24 -100259cc: 2204 movs r2, #4 -100259ce: f7f5 f8eb bl 1001aba8 -100259d2: b910 cbnz r0, 100259da -100259d4: 7873 ldrb r3, [r6, #1] -100259d6: 3302 adds r3, #2 -100259d8: 441e add r6, r3 -100259da: 1cb0 adds r0, r6, #2 -100259dc: a908 add r1, sp, #32 -100259de: 2204 movs r2, #4 -100259e0: f7f5 f8e2 bl 1001aba8 -100259e4: 2800 cmp r0, #0 -100259e6: d1ec bne.n 100259c2 -100259e8: 79b0 ldrb r0, [r6, #6] -100259ea: 7872 ldrb r2, [r6, #1] -100259ec: f505 5a8c add.w sl, r5, #4480 ; 0x1180 -100259f0: f000 0003 and.w r0, r0, #3 -100259f4: f8ca 01a4 str.w r0, [sl, #420] ; 0x1a4 -100259f8: f10a 0a1c add.w sl, sl, #28 -100259fc: 3a06 subs r2, #6 -100259fe: eb0a 1040 add.w r0, sl, r0, lsl #5 -10025a02: f106 0108 add.w r1, r6, #8 -10025a06: 30e8 adds r0, #232 ; 0xe8 -10025a08: b2d2 uxtb r2, r2 -10025a0a: 2601 movs r6, #1 -10025a0c: f7f5 f8d0 bl 1001abb0 -10025a10: f8ca 6030 str.w r6, [sl, #48] ; 0x30 -10025a14: 79fb ldrb r3, [r7, #7] -10025a16: 2b02 cmp r3, #2 -10025a18: d001 beq.n 10025a1e -10025a1a: 2b04 cmp r3, #4 -10025a1c: d121 bne.n 10025a62 -10025a1e: f505 528c add.w r2, r5, #4480 ; 0x1180 -10025a22: f882 30d8 strb.w r3, [r2, #216] ; 0xd8 -10025a26: f8c5 3d64 str.w r3, [r5, #3428] ; 0xd64 -10025a2a: e01a b.n 10025a62 -10025a2c: 2bfe cmp r3, #254 ; 0xfe -10025a2e: d118 bne.n 10025a62 -10025a30: 4631 mov r1, r6 -10025a32: 22ff movs r2, #255 ; 0xff -10025a34: a80c add r0, sp, #48 ; 0x30 -10025a36: f7f5 f8bf bl 1001abb8 -10025a3a: f8d4 10e4 ldr.w r1, [r4, #228] ; 0xe4 -10025a3e: a80c add r0, sp, #48 ; 0x30 -10025a40: 315f adds r1, #95 ; 0x5f -10025a42: 22ff movs r2, #255 ; 0xff -10025a44: f7f5 f8b4 bl 1001abb0 -10025a48: f89d 303b ldrb.w r3, [sp, #59] ; 0x3b -10025a4c: 2b02 cmp r3, #2 -10025a4e: d001 beq.n 10025a54 -10025a50: 2b04 cmp r3, #4 -10025a52: d105 bne.n 10025a60 -10025a54: f505 528c add.w r2, r5, #4480 ; 0x1180 -10025a58: f882 30d8 strb.w r3, [r2, #216] ; 0xd8 -10025a5c: f8c5 3d64 str.w r3, [r5, #3428] ; 0xd64 -10025a60: 2600 movs r6, #0 -10025a62: 4628 mov r0, r5 -10025a64: 4641 mov r1, r8 -10025a66: 2200 movs r2, #0 -10025a68: f7ff fb3c bl 100250e4 -10025a6c: 4628 mov r0, r5 -10025a6e: 4641 mov r1, r8 -10025a70: f7fe fc62 bl 10024338 -10025a74: 2300 movs r3, #0 -10025a76: f8c8 3110 str.w r3, [r8, #272] ; 0x110 -10025a7a: b146 cbz r6, 10025a8e -10025a7c: f895 28f9 ldrb.w r2, [r5, #2297] ; 0x8f9 -10025a80: b10a cbz r2, 10025a86 -10025a82: f885 386e strb.w r3, [r5, #2158] ; 0x86e -10025a86: 4628 mov r0, r5 -10025a88: f7fe fed8 bl 1002483c -10025a8c: e09e b.n 10025bcc -10025a8e: f504 7441 add.w r4, r4, #772 ; 0x304 -10025a92: 4620 mov r0, r4 -10025a94: f011 f9c7 bl 10036e26 -10025a98: 4b53 ldr r3, [pc, #332] ; (10025be8 ) -10025a9a: 4620 mov r0, r4 -10025a9c: 9300 str r3, [sp, #0] -10025a9e: f641 0334 movw r3, #6196 ; 0x1834 -10025aa2: 58e9 ldr r1, [r5, r3] -10025aa4: 4a51 ldr r2, [pc, #324] ; (10025bec ) -10025aa6: 462b mov r3, r5 -10025aa8: f011 f9b2 bl 10036e10 -10025aac: 4620 mov r0, r4 -10025aae: f241 3188 movw r1, #5000 ; 0x1388 -10025ab2: f011 f9b1 bl 10036e18 -10025ab6: e08d b.n 10025bd4 -10025ab8: 4b4a ldr r3, [pc, #296] ; (10025be4 ) -10025aba: f504 7641 add.w r6, r4, #772 ; 0x304 -10025abe: 6818 ldr r0, [r3, #0] -10025ac0: 9009 str r0, [sp, #36] ; 0x24 -10025ac2: 4630 mov r0, r6 -10025ac4: f011 f9aa bl 10036e1c -10025ac8: 4630 mov r0, r6 -10025aca: f011 f9ac bl 10036e26 -10025ace: f8d4 00e4 ldr.w r0, [r4, #228] ; 0xe4 -10025ad2: a90a add r1, sp, #40 ; 0x28 -10025ad4: f8c4 7300 str.w r7, [r4, #768] ; 0x300 -10025ad8: f7fe fc83 bl 100243e2 -10025adc: f104 0314 add.w r3, r4, #20 -10025ae0: e893 0003 ldmia.w r3, {r0, r1} -10025ae4: f8d4 20e4 ldr.w r2, [r4, #228] ; 0xe4 -10025ae8: f7fe fc92 bl 10024410 -10025aec: 2800 cmp r0, #0 -10025aee: d171 bne.n 10025bd4 -10025af0: f104 07d4 add.w r7, r4, #212 ; 0xd4 -10025af4: e897 0003 ldmia.w r7, {r0, r1} -10025af8: f104 0294 add.w r2, r4, #148 ; 0x94 -10025afc: f7fe fd76 bl 100245ec -10025b00: 2800 cmp r0, #0 -10025b02: d067 beq.n 10025bd4 -10025b04: f505 568c add.w r6, r5, #4480 ; 0x1180 -10025b08: 361c adds r6, #28 -10025b0a: f896 30bc ldrb.w r3, [r6, #188] ; 0xbc -10025b0e: f104 02a4 add.w r2, r4, #164 ; 0xa4 -10025b12: 2b02 cmp r3, #2 -10025b14: bf14 ite ne -10025b16: 2310 movne r3, #16 -10025b18: 2320 moveq r3, #32 -10025b1a: 9300 str r3, [sp, #0] -10025b1c: f8d4 30e4 ldr.w r3, [r4, #228] ; 0xe4 -10025b20: 789b ldrb r3, [r3, #2] -10025b22: f3c3 1301 ubfx r3, r3, #4, #2 -10025b26: eb06 1343 add.w r3, r6, r3, lsl #5 -10025b2a: 33e8 adds r3, #232 ; 0xe8 -10025b2c: 9301 str r3, [sp, #4] -10025b2e: e897 0003 ldmia.w r7, {r0, r1} -10025b32: 2310 movs r3, #16 -10025b34: f7fe fe24 bl 10024780 -10025b38: 2800 cmp r0, #0 -10025b3a: d04b beq.n 10025bd4 -10025b3c: f8d4 30e4 ldr.w r3, [r4, #228] ; 0xe4 -10025b40: 781a ldrb r2, [r3, #0] -10025b42: 7899 ldrb r1, [r3, #2] -10025b44: 2a02 cmp r2, #2 -10025b46: f3c1 1101 ubfx r1, r1, #4, #2 -10025b4a: d127 bne.n 10025b9c -10025b4c: f893 205d ldrb.w r2, [r3, #93] ; 0x5d -10025b50: f893 305e ldrb.w r3, [r3, #94] ; 0x5e -10025b54: eb06 1141 add.w r1, r6, r1, lsl #5 -10025b58: eb03 2202 add.w r2, r3, r2, lsl #8 -10025b5c: a80c add r0, sp, #48 ; 0x30 -10025b5e: 31e8 adds r1, #232 ; 0xe8 -10025b60: f7f5 f826 bl 1001abb0 -10025b64: f89d 3030 ldrb.w r3, [sp, #48] ; 0x30 -10025b68: 2bdd cmp r3, #221 ; 0xdd -10025b6a: d119 bne.n 10025ba0 -10025b6c: f10d 0032 add.w r0, sp, #50 ; 0x32 -10025b70: a909 add r1, sp, #36 ; 0x24 -10025b72: 2204 movs r2, #4 -10025b74: f7f5 f818 bl 1001aba8 -10025b78: b990 cbnz r0, 10025ba0 -10025b7a: f89d 0036 ldrb.w r0, [sp, #54] ; 0x36 -10025b7e: f89d 2031 ldrb.w r2, [sp, #49] ; 0x31 -10025b82: f000 0003 and.w r0, r0, #3 -10025b86: f8c6 0188 str.w r0, [r6, #392] ; 0x188 -10025b8a: 3a06 subs r2, #6 -10025b8c: eb06 1040 add.w r0, r6, r0, lsl #5 -10025b90: a90e add r1, sp, #56 ; 0x38 -10025b92: b2d2 uxtb r2, r2 -10025b94: 30e8 adds r0, #232 ; 0xe8 -10025b96: f7f5 f80b bl 1001abb0 -10025b9a: e001 b.n 10025ba0 -10025b9c: f8c6 1188 str.w r1, [r6, #392] ; 0x188 -10025ba0: 9b0a ldr r3, [sp, #40] ; 0x28 -10025ba2: 4628 mov r0, r5 -10025ba4: 6163 str r3, [r4, #20] -10025ba6: 9b0b ldr r3, [sp, #44] ; 0x2c -10025ba8: 61a3 str r3, [r4, #24] -10025baa: 2301 movs r3, #1 -10025bac: f8c4 3318 str.w r3, [r4, #792] ; 0x318 -10025bb0: 6333 str r3, [r6, #48] ; 0x30 -10025bb2: f7fe fe43 bl 1002483c -10025bb6: 4628 mov r0, r5 -10025bb8: 4641 mov r1, r8 -10025bba: 2200 movs r2, #0 -10025bbc: f7ff fa92 bl 100250e4 -10025bc0: f895 38f9 ldrb.w r3, [r5, #2297] ; 0x8f9 -10025bc4: b113 cbz r3, 10025bcc -10025bc6: 2300 movs r3, #0 -10025bc8: f885 386e strb.w r3, [r5, #2158] ; 0x86e -10025bcc: 4628 mov r0, r5 -10025bce: 4908 ldr r1, [pc, #32] ; (10025bf0 ) -10025bd0: f00d ffb3 bl 10033b3a -10025bd4: 4648 mov r0, r9 -10025bd6: a907 add r1, sp, #28 -10025bd8: f7f1 fd00 bl 100175dc -10025bdc: b04c add sp, #304 ; 0x130 -10025bde: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10025be2: bf00 nop -10025be4: 100415ff .word 0x100415ff -10025be8: 10041613 .word 0x10041613 -10025bec: 100242c1 .word 0x100242c1 -10025bf0: 1003fc25 .word 0x1003fc25 - -10025bf4 : -10025bf4: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} -10025bf8: f641 0369 movw r3, #6249 ; 0x1869 -10025bfc: 5cc4 ldrb r4, [r0, r3] -10025bfe: 460d mov r5, r1 -10025c00: 3400 adds r4, #0 -10025c02: 7809 ldrb r1, [r1, #0] -10025c04: bf18 it ne -10025c06: 2401 movne r4, #1 -10025c08: 4616 mov r6, r2 -10025c0a: 4824 ldr r0, [pc, #144] ; (10025c9c ) -10025c0c: ea4f 1884 mov.w r8, r4, lsl #6 -10025c10: b939 cbnz r1, 10025c22 -10025c12: 4444 add r4, r8 -10025c14: 4420 add r0, r4 -10025c16: 2241 movs r2, #65 ; 0x41 -10025c18: b002 add sp, #8 -10025c1a: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -10025c1e: f7f4 bfcb b.w 1001abb8 -10025c22: 44a0 add r8, r4 -10025c24: 4480 add r8, r0 -10025c26: 4641 mov r1, r8 -10025c28: 4628 mov r0, r5 -10025c2a: f7f4 ffcd bl 1001abc8 -10025c2e: 4f1c ldr r7, [pc, #112] ; (10025ca0 ) -10025c30: b1e8 cbz r0, 10025c6e -10025c32: 4628 mov r0, r5 -10025c34: f7f4 ffd0 bl 1001abd8 -10025c38: 4682 mov sl, r0 -10025c3a: 4630 mov r0, r6 -10025c3c: f7f4 ffcc bl 1001abd8 -10025c40: 4629 mov r1, r5 -10025c42: 4681 mov r9, r0 -10025c44: 4640 mov r0, r8 -10025c46: f7f4 ffc3 bl 1001abd0 -10025c4a: 2024 movs r0, #36 ; 0x24 -10025c4c: fb00 7004 mla r0, r0, r4, r7 -10025c50: 4631 mov r1, r6 -10025c52: f7f4 ffbd bl 1001abd0 -10025c56: 4b13 ldr r3, [pc, #76] ; (10025ca4 ) -10025c58: 2228 movs r2, #40 ; 0x28 -10025c5a: fb02 3404 mla r4, r2, r4, r3 -10025c5e: 2100 movs r1, #0 -10025c60: 4620 mov r0, r4 -10025c62: f7f4 ffa9 bl 1001abb8 -10025c66: f1ba 0f3f cmp.w sl, #63 ; 0x3f -10025c6a: dd09 ble.n 10025c80 -10025c6c: e012 b.n 10025c94 -10025c6e: 2124 movs r1, #36 ; 0x24 -10025c70: 4630 mov r0, r6 -10025c72: fb01 7104 mla r1, r1, r4, r7 -10025c76: f7f4 ffa7 bl 1001abc8 -10025c7a: 2800 cmp r0, #0 -10025c7c: d1d9 bne.n 10025c32 -10025c7e: e009 b.n 10025c94 -10025c80: f1b9 0f20 cmp.w r9, #32 -10025c84: dc06 bgt.n 10025c94 -10025c86: 9400 str r4, [sp, #0] -10025c88: 4628 mov r0, r5 -10025c8a: 4651 mov r1, sl -10025c8c: 4632 mov r2, r6 -10025c8e: 464b mov r3, r9 -10025c90: f018 fe7e bl 1003e990 <__rom_psk_PasswordHash_veneer> -10025c94: b002 add sp, #8 -10025c96: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10025c9a: bf00 nop -10025c9c: 1004bb60 .word 0x1004bb60 -10025ca0: 1004bb18 .word 0x1004bb18 -10025ca4: 1004bc23 .word 0x1004bc23 - -10025ca8 : -10025ca8: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -10025cac: f500 568c add.w r6, r0, #4480 ; 0x1180 -10025cb0: 361c adds r6, #28 -10025cb2: b093 sub sp, #76 ; 0x4c -10025cb4: 4605 mov r5, r0 -10025cb6: 4688 mov r8, r1 -10025cb8: 4617 mov r7, r2 -10025cba: 2100 movs r1, #0 -10025cbc: f44f 72ca mov.w r2, #404 ; 0x194 -10025cc0: 4630 mov r0, r6 -10025cc2: f7f4 ff79 bl 1001abb8 -10025cc6: f241 3330 movw r3, #4912 ; 0x1330 -10025cca: 58e8 ldr r0, [r5, r3] -10025ccc: f241 3334 movw r3, #4916 ; 0x1334 -10025cd0: 58ea ldr r2, [r5, r3] -10025cd2: 2100 movs r1, #0 -10025cd4: f10d 090c add.w r9, sp, #12 -10025cd8: f7f4 ff6e bl 1001abb8 -10025cdc: ac0a add r4, sp, #40 ; 0x28 -10025cde: 2108 movs r1, #8 -10025ce0: 4648 mov r0, r9 -10025ce2: f7f1 fd11 bl 10017708 -10025ce6: 4620 mov r0, r4 -10025ce8: 4649 mov r1, r9 -10025cea: 2208 movs r2, #8 -10025cec: f7f1 fb90 bl 10017410 -10025cf0: 2300 movs r3, #0 -10025cf2: f819 1003 ldrb.w r1, [r9, r3] -10025cf6: 18e2 adds r2, r4, r3 -10025cf8: 43c9 mvns r1, r1 -10025cfa: 7211 strb r1, [r2, #8] -10025cfc: ebc3 0109 rsb r1, r3, r9 -10025d00: 79c9 ldrb r1, [r1, #7] -10025d02: 3301 adds r3, #1 -10025d04: 7411 strb r1, [r2, #16] -10025d06: 2b08 cmp r3, #8 -10025d08: ea6f 0101 mvn.w r1, r1 -10025d0c: 7611 strb r1, [r2, #24] -10025d0e: d1f0 bne.n 10025cf2 -10025d10: f10d 0914 add.w r9, sp, #20 -10025d14: 2310 movs r3, #16 -10025d16: f8cd 9000 str.w r9, [sp] -10025d1a: 4620 mov r0, r4 -10025d1c: 2120 movs r1, #32 -10025d1e: aa0c add r2, sp, #48 ; 0x30 -10025d20: f018 fe16 bl 1003e950 <__rt_hmac_sha1_veneer> -10025d24: 2300 movs r3, #0 -10025d26: f819 2003 ldrb.w r2, [r9, r3] -10025d2a: ebc3 0109 rsb r1, r3, r9 -10025d2e: 54e2 strb r2, [r4, r3] -10025d30: 7cc9 ldrb r1, [r1, #19] -10025d32: 18e2 adds r2, r4, r3 -10025d34: 3301 adds r3, #1 -10025d36: 2b10 cmp r3, #16 -10025d38: 7411 strb r1, [r2, #16] -10025d3a: d1f4 bne.n 10025d26 -10025d3c: 4621 mov r1, r4 -10025d3e: 4630 mov r0, r6 -10025d40: 2220 movs r2, #32 -10025d42: f7f1 fb65 bl 10017410 -10025d46: 692b ldr r3, [r5, #16] -10025d48: f505 548c add.w r4, r5, #4480 ; 0x1180 -10025d4c: f013 0f10 tst.w r3, #16 -10025d50: f104 041c add.w r4, r4, #28 -10025d54: d10b bne.n 10025d6e -10025d56: f104 053c add.w r5, r4, #60 ; 0x3c -10025d5a: 4628 mov r0, r5 -10025d5c: 4641 mov r1, r8 -10025d5e: 463a mov r2, r7 -10025d60: f7f1 fb56 bl 10017410 -10025d64: 6365 str r5, [r4, #52] ; 0x34 -10025d66: 63a7 str r7, [r4, #56] ; 0x38 -10025d68: b013 add sp, #76 ; 0x4c -10025d6a: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -10025d6e: f104 03c8 add.w r3, r4, #200 ; 0xc8 -10025d72: f8c4 30c0 str.w r3, [r4, #192] ; 0xc0 -10025d76: 2320 movs r3, #32 -10025d78: f8c4 30c4 str.w r3, [r4, #196] ; 0xc4 -10025d7c: 2301 movs r3, #1 -10025d7e: 6223 str r3, [r4, #32] -10025d80: f8c4 3188 str.w r3, [r4, #392] ; 0x188 -10025d84: 62a3 str r3, [r4, #40] ; 0x28 -10025d86: f8d5 3d64 ldr.w r3, [r5, #3428] ; 0xd64 -10025d8a: 2202 movs r2, #2 -10025d8c: f8c4 218c str.w r2, [r4, #396] ; 0x18c -10025d90: f884 30bc strb.w r3, [r4, #188] ; 0xbc -10025d94: e7df b.n 10025d56 - ... - -10025d98 : -10025d98: b5f0 push {r4, r5, r6, r7, lr} -10025d9a: 7a46 ldrb r6, [r0, #9] -10025d9c: 7a02 ldrb r2, [r0, #8] -10025d9e: b085 sub sp, #20 -10025da0: ea42 2606 orr.w r6, r2, r6, lsl #8 -10025da4: 2300 movs r3, #0 -10025da6: 2e01 cmp r6, #1 -10025da8: 4604 mov r4, r0 -10025daa: 460d mov r5, r1 -10025dac: 9302 str r3, [sp, #8] -10025dae: 9303 str r3, [sp, #12] -10025db0: d92b bls.n 10025e0a -10025db2: 9300 str r3, [sp, #0] -10025db4: aa02 add r2, sp, #8 -10025db6: ab03 add r3, sp, #12 -10025db8: f018 fd46 bl 1003e848 <__rtw_parse_wpa2_ie_veneer> -10025dbc: 9b03 ldr r3, [sp, #12] -10025dbe: 06da lsls r2, r3, #27 -10025dc0: d50c bpl.n 10025ddc -10025dc2: 4913 ldr r1, [pc, #76] ; (10025e10 ) -10025dc4: f104 000a add.w r0, r4, #10 -10025dc8: 2204 movs r2, #4 -10025dca: f7f1 fb21 bl 10017410 -10025dce: f1a5 020a sub.w r2, r5, #10 -10025dd2: eba2 0286 sub.w r2, r2, r6, lsl #2 -10025dd6: 00b1 lsls r1, r6, #2 -10025dd8: 2300 movs r3, #0 -10025dda: e005 b.n 10025de8 -10025ddc: 071b lsls r3, r3, #28 -10025dde: d5f6 bpl.n 10025dce -10025de0: f104 000a add.w r0, r4, #10 -10025de4: 490b ldr r1, [pc, #44] ; (10025e14 ) -10025de6: e7ef b.n 10025dc8 -10025de8: 4293 cmp r3, r2 -10025dea: da06 bge.n 10025dfa -10025dec: 1860 adds r0, r4, r1 -10025dee: 4418 add r0, r3 -10025df0: 7a87 ldrb r7, [r0, #10] -10025df2: 18e0 adds r0, r4, r3 -10025df4: 7387 strb r7, [r0, #14] -10025df6: 3301 adds r3, #1 -10025df8: e7f6 b.n 10025de8 -10025dfa: 2301 movs r3, #1 -10025dfc: 1b9e subs r6, r3, r6 -10025dfe: eb05 0586 add.w r5, r5, r6, lsl #2 -10025e02: b2ad uxth r5, r5 -10025e04: 7223 strb r3, [r4, #8] -10025e06: 1eab subs r3, r5, #2 -10025e08: 7063 strb r3, [r4, #1] -10025e0a: 4628 mov r0, r5 -10025e0c: b005 add sp, #20 -10025e0e: bdf0 pop {r4, r5, r6, r7, pc} -10025e10: 00035430 .word 0x00035430 -10025e14: 0003542c .word 0x0003542c - -10025e18 : -10025e18: b5f0 push {r4, r5, r6, r7, lr} -10025e1a: 7b46 ldrb r6, [r0, #13] -10025e1c: 7b02 ldrb r2, [r0, #12] -10025e1e: b085 sub sp, #20 -10025e20: ea42 2606 orr.w r6, r2, r6, lsl #8 -10025e24: 2300 movs r3, #0 -10025e26: 2e01 cmp r6, #1 -10025e28: 4604 mov r4, r0 -10025e2a: 460d mov r5, r1 -10025e2c: 9302 str r3, [sp, #8] -10025e2e: 9303 str r3, [sp, #12] -10025e30: d92b bls.n 10025e8a -10025e32: 9300 str r3, [sp, #0] -10025e34: aa02 add r2, sp, #8 -10025e36: ab03 add r3, sp, #12 -10025e38: f018 fd12 bl 1003e860 <__rtw_parse_wpa_ie_veneer> -10025e3c: 9b03 ldr r3, [sp, #12] -10025e3e: 06da lsls r2, r3, #27 -10025e40: d50c bpl.n 10025e5c -10025e42: 4913 ldr r1, [pc, #76] ; (10025e90 ) -10025e44: f104 000e add.w r0, r4, #14 -10025e48: 2204 movs r2, #4 -10025e4a: f7f1 fae1 bl 10017410 -10025e4e: f1a5 020e sub.w r2, r5, #14 -10025e52: eba2 0286 sub.w r2, r2, r6, lsl #2 -10025e56: 00b1 lsls r1, r6, #2 -10025e58: 2300 movs r3, #0 -10025e5a: e005 b.n 10025e68 -10025e5c: 071b lsls r3, r3, #28 -10025e5e: d5f6 bpl.n 10025e4e -10025e60: f104 000e add.w r0, r4, #14 -10025e64: 490b ldr r1, [pc, #44] ; (10025e94 ) -10025e66: e7ef b.n 10025e48 -10025e68: 4293 cmp r3, r2 -10025e6a: da06 bge.n 10025e7a -10025e6c: 1860 adds r0, r4, r1 -10025e6e: 4418 add r0, r3 -10025e70: 7b87 ldrb r7, [r0, #14] -10025e72: 18e0 adds r0, r4, r3 -10025e74: 7487 strb r7, [r0, #18] -10025e76: 3301 adds r3, #1 -10025e78: e7f6 b.n 10025e68 -10025e7a: 2301 movs r3, #1 -10025e7c: 1b9e subs r6, r3, r6 -10025e7e: eb05 0586 add.w r5, r5, r6, lsl #2 -10025e82: b2ad uxth r5, r5 -10025e84: 7323 strb r3, [r4, #12] -10025e86: 1eab subs r3, r5, #2 -10025e88: 7063 strb r3, [r4, #1] -10025e8a: 4628 mov r0, r5 -10025e8c: b005 add sp, #20 -10025e8e: bdf0 pop {r4, r5, r6, r7, pc} -10025e90: 0003541c .word 0x0003541c -10025e94: 00035418 .word 0x00035418 - -10025e98 : -10025e98: f241 3338 movw r3, #4920 ; 0x1338 -10025e9c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10025ea0: 58c5 ldr r5, [r0, r3] -10025ea2: 4607 mov r7, r0 -10025ea4: f8d5 40dc ldr.w r4, [r5, #220] ; 0xdc -10025ea8: b093 sub sp, #76 ; 0x4c -10025eaa: f104 0812 add.w r8, r4, #18 -10025eae: f100 0a98 add.w sl, r0, #152 ; 0x98 -10025eb2: f8c5 80ec str.w r8, [r5, #236] ; 0xec -10025eb6: 4640 mov r0, r8 -10025eb8: 2100 movs r1, #0 -10025eba: f44f 72f7 mov.w r2, #494 ; 0x1ee -10025ebe: f7f4 fe7b bl 1001abb8 -10025ec2: 68ab ldr r3, [r5, #8] -10025ec4: 079b lsls r3, r3, #30 -10025ec6: bf4c ite mi -10025ec8: 2302 movmi r3, #2 -10025eca: 23fe movpl r3, #254 ; 0xfe -10025ecc: 74a3 strb r3, [r4, #18] -10025ece: f507 538c add.w r3, r7, #4480 ; 0x1180 -10025ed2: 331c adds r3, #28 -10025ed4: f893 30bc ldrb.w r3, [r3, #188] ; 0xbc -10025ed8: 2b04 cmp r3, #4 -10025eda: d007 beq.n 10025eec -10025edc: 7c2b ldrb r3, [r5, #16] -10025ede: 2b04 cmp r3, #4 -10025ee0: bf14 ite ne -10025ee2: f04f 0901 movne.w r9, #1 -10025ee6: f04f 0902 moveq.w r9, #2 -10025eea: e001 b.n 10025ef0 -10025eec: f04f 0902 mov.w r9, #2 -10025ef0: 7ce3 ldrb r3, [r4, #19] -10025ef2: 2600 movs r6, #0 -10025ef4: f043 030f orr.w r3, r3, #15 -10025ef8: 74e3 strb r3, [r4, #19] -10025efa: f884 9014 strb.w r9, [r4, #20] -10025efe: 7566 strb r6, [r4, #21] -10025f00: 75a6 strb r6, [r4, #22] -10025f02: f8d5 131c ldr.w r1, [r5, #796] ; 0x31c -10025f06: f8d5 2320 ldr.w r2, [r5, #800] ; 0x320 -10025f0a: 4640 mov r0, r8 -10025f0c: f7fe fa99 bl 10024442 -10025f10: f505 7047 add.w r0, r5, #796 ; 0x31c -10025f14: f7fe faa4 bl 10024460 -10025f18: 4631 mov r1, r6 -10025f1a: 2220 movs r2, #32 -10025f1c: a80a add r0, sp, #40 ; 0x28 -10025f1e: f7f4 fe4b bl 1001abb8 -10025f22: a90a add r1, sp, #40 ; 0x28 -10025f24: 2220 movs r2, #32 -10025f26: f104 001f add.w r0, r4, #31 -10025f2a: f7f4 fe41 bl 1001abb0 -10025f2e: 4631 mov r1, r6 -10025f30: 2210 movs r2, #16 -10025f32: a806 add r0, sp, #24 -10025f34: f7f4 fe40 bl 1001abb8 -10025f38: a906 add r1, sp, #24 -10025f3a: 2210 movs r2, #16 -10025f3c: f104 003f add.w r0, r4, #63 ; 0x3f -10025f40: f7f4 fe36 bl 1001abb0 -10025f44: 4631 mov r1, r6 -10025f46: 2208 movs r2, #8 -10025f48: a802 add r0, sp, #8 -10025f4a: f7f4 fe35 bl 1001abb8 -10025f4e: a902 add r1, sp, #8 -10025f50: 2208 movs r2, #8 -10025f52: f104 004f add.w r0, r4, #79 ; 0x4f -10025f56: f7f4 fe2b bl 1001abb0 -10025f5a: 4631 mov r1, r6 -10025f5c: 2208 movs r2, #8 -10025f5e: a804 add r0, sp, #16 -10025f60: f7f4 fe2a bl 1001abb8 -10025f64: f04f 0871 mov.w r8, #113 ; 0x71 -10025f68: a904 add r1, sp, #16 -10025f6a: 2208 movs r2, #8 -10025f6c: f04f 0b5f mov.w fp, #95 ; 0x5f -10025f70: f104 0057 add.w r0, r4, #87 ; 0x57 -10025f74: f7f4 fe1c bl 1001abb0 -10025f78: f884 606f strb.w r6, [r4, #111] ; 0x6f -10025f7c: f884 6070 strb.w r6, [r4, #112] ; 0x70 -10025f80: 4650 mov r0, sl -10025f82: f8c5 80e0 str.w r8, [r5, #224] ; 0xe0 -10025f86: f8c5 b0f0 str.w fp, [r5, #240] ; 0xf0 -10025f8a: f002 fbe9 bl 10028760 -10025f8e: 2206 movs r2, #6 -10025f90: 4601 mov r1, r0 -10025f92: 4620 mov r0, r4 -10025f94: f7f4 fe0c bl 1001abb0 -10025f98: f507 51a4 add.w r1, r7, #5248 ; 0x1480 -10025f9c: 3119 adds r1, #25 -10025f9e: 2206 movs r2, #6 -10025fa0: 1da0 adds r0, r4, #6 -10025fa2: f7f4 fe05 bl 1001abb0 -10025fa6: f648 008e movw r0, #34958 ; 0x888e -10025faa: f7f1 f9eb bl 10017384 <_htons> -10025fae: 2301 movs r3, #1 -10025fb0: 73a3 strb r3, [r4, #14] -10025fb2: 2303 movs r3, #3 -10025fb4: 81a0 strh r0, [r4, #12] -10025fb6: 73e3 strb r3, [r4, #15] -10025fb8: 4658 mov r0, fp -10025fba: f7f1 f9e3 bl 10017384 <_htons> -10025fbe: e88d 0110 stmia.w sp, {r4, r8} -10025fc2: f105 0394 add.w r3, r5, #148 ; 0x94 -10025fc6: 8220 strh r0, [r4, #16] -10025fc8: 464a mov r2, r9 -10025fca: e89d 0003 ldmia.w sp, {r0, r1} -10025fce: f7fe fb4d bl 1002466c -10025fd2: f44f 7000 mov.w r0, #512 ; 0x200 -10025fd6: 214a movs r1, #74 ; 0x4a -10025fd8: f010 fc27 bl 1003682a -10025fdc: 4605 mov r5, r0 -10025fde: b180 cbz r0, 10026002 -10025fe0: 4642 mov r2, r8 -10025fe2: 4621 mov r1, r4 -10025fe4: 6900 ldr r0, [r0, #16] -10025fe6: f7f4 fde3 bl 1001abb0 -10025fea: 4641 mov r1, r8 -10025fec: 4628 mov r0, r5 -10025fee: f010 fbfb bl 100367e8 -10025ff2: f641 0334 movw r3, #6196 ; 0x1834 -10025ff6: 58f9 ldr r1, [r7, r3] -10025ff8: 4628 mov r0, r5 -10025ffa: 6a8b ldr r3, [r1, #40] ; 0x28 -10025ffc: 4798 blx r3 -10025ffe: 4630 mov r0, r6 -10026000: e001 b.n 10026006 -10026002: f04f 30ff mov.w r0, #4294967295 -10026006: b013 add sp, #76 ; 0x4c -10026008: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -1002600c : -1002600c: f7f7 b811 b.w 1001d032 - -10026010 : -10026010: b570 push {r4, r5, r6, lr} -10026012: f500 54a0 add.w r4, r0, #5120 ; 0x1400 -10026016: 4605 mov r5, r0 -10026018: 4620 mov r0, r4 -1002601a: f7f1 fa55 bl 100174c8 -1002601e: f894 3037 ldrb.w r3, [r4, #55] ; 0x37 -10026022: 2601 movs r6, #1 -10026024: f884 3035 strb.w r3, [r4, #53] ; 0x35 -10026028: 6ae3 ldr r3, [r4, #44] ; 0x2c -1002602a: 63a6 str r6, [r4, #56] ; 0x38 -1002602c: 4433 add r3, r6 -1002602e: 62e3 str r3, [r4, #44] ; 0x2c -10026030: 6f63 ldr r3, [r4, #116] ; 0x74 -10026032: 2b02 cmp r3, #2 -10026034: d136 bne.n 100260a4 -10026036: f7f1 fbd1 bl 100177dc -1002603a: f894 3035 ldrb.w r3, [r4, #53] ; 0x35 -1002603e: 7626 strb r6, [r4, #24] -10026040: 2b02 cmp r3, #2 -10026042: bf08 it eq -10026044: f884 607b strbeq.w r6, [r4, #123] ; 0x7b -10026048: 2600 movs r6, #0 -1002604a: f884 6068 strb.w r6, [r4, #104] ; 0x68 -1002604e: f7f1 fac7 bl 100175e0 -10026052: 2301 movs r3, #1 -10026054: f241 72b4 movw r2, #6068 ; 0x17b4 -10026058: 50ab str r3, [r5, r2] -1002605a: f641 0258 movw r2, #6232 ; 0x1858 -1002605e: 54ab strb r3, [r5, r2] -10026060: 4628 mov r0, r5 -10026062: 213c movs r1, #60 ; 0x3c -10026064: 4632 mov r2, r6 -10026066: f00c fa34 bl 100324d2 -1002606a: f641 0330 movw r3, #6192 ; 0x1830 -1002606e: 58eb ldr r3, [r5, r3] -10026070: b10b cbz r3, 10026076 -10026072: 4628 mov r0, r5 -10026074: 4798 blx r3 -10026076: f241 73b0 movw r3, #6064 ; 0x17b0 -1002607a: 58eb ldr r3, [r5, r3] -1002607c: b913 cbnz r3, 10026084 -1002607e: 4628 mov r0, r5 -10026080: f00c fa1a bl 100324b8 -10026084: 2200 movs r2, #0 -10026086: f241 73b4 movw r3, #6068 ; 0x17b4 -1002608a: 50ea str r2, [r5, r3] -1002608c: 2302 movs r3, #2 -1002608e: 6723 str r3, [r4, #112] ; 0x70 -10026090: 4b08 ldr r3, [pc, #32] ; (100260b4 ) -10026092: 605a str r2, [r3, #4] -10026094: 4a08 ldr r2, [pc, #32] ; (100260b8 ) -10026096: 60da str r2, [r3, #12] -10026098: 4a08 ldr r2, [pc, #32] ; (100260bc ) -1002609a: 611a str r2, [r3, #16] -1002609c: 2205 movs r2, #5 -1002609e: 605a str r2, [r3, #4] -100260a0: f7f1 fba4 bl 100177ec -100260a4: 2300 movs r3, #0 -100260a6: 63a3 str r3, [r4, #56] ; 0x38 -100260a8: 4620 mov r0, r4 -100260aa: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -100260ae: f7f1 b9f3 b.w 10017498 -100260b2: bf00 nop -100260b4: e000ed90 .word 0xe000ed90 -100260b8: 40080017 .word 0x40080017 -100260bc: 00040023 .word 0x00040023 - -100260c0 : -100260c0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -100260c4: f500 55a0 add.w r5, r0, #5120 ; 0x1400 -100260c8: 4604 mov r4, r0 -100260ca: 4628 mov r0, r5 -100260cc: f7f1 f9fc bl 100174c8 -100260d0: 6f2b ldr r3, [r5, #112] ; 0x70 -100260d2: 2b02 cmp r3, #2 -100260d4: d177 bne.n 100261c6 -100260d6: 6bae ldr r6, [r5, #56] ; 0x38 -100260d8: 2e00 cmp r6, #0 -100260da: d174 bne.n 100261c6 -100260dc: f7f1 fb7e bl 100177dc -100260e0: 4b3c ldr r3, [pc, #240] ; (100261d4 ) -100260e2: 2217 movs r2, #23 -100260e4: 605e str r6, [r3, #4] -100260e6: 60da str r2, [r3, #12] -100260e8: 2205 movs r2, #5 -100260ea: 611e str r6, [r3, #16] -100260ec: 605a str r2, [r3, #4] -100260ee: 6b2b ldr r3, [r5, #48] ; 0x30 -100260f0: 2701 movs r7, #1 -100260f2: 443b add r3, r7 -100260f4: 632b str r3, [r5, #48] ; 0x30 -100260f6: 676e str r6, [r5, #116] ; 0x74 -100260f8: 63af str r7, [r5, #56] ; 0x38 -100260fa: f7f1 fa71 bl 100175e0 -100260fe: 4620 mov r0, r4 -10026100: f011 fccb bl 10037a9a -10026104: f641 0358 movw r3, #6232 ; 0x1858 -10026108: 54e6 strb r6, [r4, r3] -1002610a: f241 73ac movw r3, #6060 ; 0x17ac -1002610e: 50e6 str r6, [r4, r3] -10026110: f241 73b0 movw r3, #6064 ; 0x17b0 -10026114: 50e6 str r6, [r4, r3] -10026116: f241 73b4 movw r3, #6068 ; 0x17b4 -1002611a: 50e6 str r6, [r4, r3] -1002611c: f641 0638 movw r6, #6200 ; 0x1838 -10026120: 51a7 str r7, [r4, r6] -10026122: 4620 mov r0, r4 -10026124: f00c f9b3 bl 1003248e -10026128: b1c8 cbz r0, 1002615e -1002612a: f641 032c movw r3, #6188 ; 0x182c -1002612e: 58e3 ldr r3, [r4, r3] -10026130: b10b cbz r3, 10026136 -10026132: 4620 mov r0, r4 -10026134: 4798 blx r3 -10026136: f241 4364 movw r3, #5220 ; 0x1464 -1002613a: f504 50a2 add.w r0, r4, #5184 ; 0x1440 -1002613e: 58e1 ldr r1, [r4, r3] -10026140: 3018 adds r0, #24 -10026142: f010 fe69 bl 10036e18 -10026146: f504 6092 add.w r0, r4, #1168 ; 0x490 -1002614a: f241 3188 movw r1, #5000 ; 0x1388 -1002614e: f010 fe63 bl 10036e18 -10026152: f7ee fb79 bl 10014848 -10026156: 2300 movs r3, #0 -10026158: 672b str r3, [r5, #112] ; 0x70 -1002615a: 2701 movs r7, #1 -1002615c: e001 b.n 10026162 -1002615e: 51a0 str r0, [r4, r6] -10026160: 4607 mov r7, r0 -10026162: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c -10026166: f023 0304 bic.w r3, r3, #4 -1002616a: 2b01 cmp r3, #1 -1002616c: d11d bne.n 100261aa -1002616e: 2200 movs r2, #0 -10026170: 4620 mov r0, r4 -10026172: f894 151e ldrb.w r1, [r4, #1310] ; 0x51e -10026176: 4613 mov r3, r2 -10026178: f002 fac0 bl 100286fc -1002617c: f604 5808 addw r8, r4, #3336 ; 0xd08 -10026180: 2600 movs r6, #0 -10026182: f894 349c ldrb.w r3, [r4, #1180] ; 0x49c -10026186: 40f3 lsrs r3, r6 -10026188: 07db lsls r3, r3, #31 -1002618a: d50b bpl.n 100261a4 -1002618c: f8d4 3d10 ldr.w r3, [r4, #3344] ; 0xd10 -10026190: 4620 mov r0, r4 -10026192: 429e cmp r6, r3 -10026194: 4641 mov r1, r8 -10026196: 4632 mov r2, r6 -10026198: bf0c ite eq -1002619a: 2301 moveq r3, #1 -1002619c: 2300 movne r3, #0 -1002619e: f7f7 ff19 bl 1001dfd4 -100261a2: 4607 mov r7, r0 -100261a4: 3601 adds r6, #1 -100261a6: 2e04 cmp r6, #4 -100261a8: d1eb bne.n 10026182 -100261aa: 4620 mov r0, r4 -100261ac: f240 5122 movw r1, #1314 ; 0x522 -100261b0: 2200 movs r2, #0 -100261b2: f011 fd77 bl 10037ca4 -100261b6: 2300 movs r3, #0 -100261b8: 63ab str r3, [r5, #56] ; 0x38 -100261ba: f885 307b strb.w r3, [r5, #123] ; 0x7b -100261be: 762b strb r3, [r5, #24] -100261c0: f7f1 fb14 bl 100177ec -100261c4: e000 b.n 100261c8 -100261c6: 2701 movs r7, #1 -100261c8: 4628 mov r0, r5 -100261ca: f7f1 f965 bl 10017498 -100261ce: 4638 mov r0, r7 -100261d0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100261d4: e000ed90 .word 0xe000ed90 - -100261d8 : -100261d8: f641 035c movw r3, #6236 ; 0x185c -100261dc: b570 push {r4, r5, r6, lr} -100261de: 58c5 ldr r5, [r0, r3] -100261e0: f241 433c movw r3, #5180 ; 0x143c -100261e4: 58c6 ldr r6, [r0, r3] -100261e6: 4604 mov r4, r0 -100261e8: f7f1 f9fa bl 100175e0 -100261ec: 4286 cmp r6, r0 -100261ee: d207 bcs.n 10026200 -100261f0: 6920 ldr r0, [r4, #16] -100261f2: f640 0381 movw r3, #2177 ; 0x881 -100261f6: 4003 ands r3, r0 -100261f8: b913 cbnz r3, 10026200 -100261fa: f010 0070 ands.w r0, r0, #112 ; 0x70 -100261fe: d001 beq.n 10026204 -10026200: 2000 movs r0, #0 -10026202: bd70 pop {r4, r5, r6, pc} -10026204: f241 63a8 movw r3, #5800 ; 0x16a8 -10026208: 58e1 ldr r1, [r4, r3] -1002620a: b971 cbnz r1, 1002622a -1002620c: b15d cbz r5, 10026226 -1002620e: 692a ldr r2, [r5, #16] -10026210: f640 0391 movw r3, #2193 ; 0x891 -10026214: 4013 ands r3, r2 -10026216: 2b00 cmp r3, #0 -10026218: d1f2 bne.n 10026200 -1002621a: f012 0f60 tst.w r2, #96 ; 0x60 -1002621e: bf14 ite ne -10026220: 2000 movne r0, #0 -10026222: 2001 moveq r0, #1 -10026224: bd70 pop {r4, r5, r6, pc} -10026226: 2001 movs r0, #1 -10026228: bd70 pop {r4, r5, r6, pc} -1002622a: bd70 pop {r4, r5, r6, pc} - -1002622c : -1002622c: b538 push {r3, r4, r5, lr} -1002622e: f500 54a0 add.w r4, r0, #5120 ; 0x1400 -10026232: 2301 movs r3, #1 -10026234: f884 3040 strb.w r3, [r4, #64] ; 0x40 -10026238: f894 3037 ldrb.w r3, [r4, #55] ; 0x37 -1002623c: 4605 mov r5, r0 -1002623e: b1a3 cbz r3, 1002626a -10026240: f7ff ffca bl 100261d8 -10026244: b188 cbz r0, 1002626a -10026246: f894 3068 ldrb.w r3, [r4, #104] ; 0x68 -1002624a: 6f22 ldr r2, [r4, #112] ; 0x70 -1002624c: 3301 adds r3, #1 -1002624e: b2db uxtb r3, r3 -10026250: f884 3068 strb.w r3, [r4, #104] ; 0x68 -10026254: b94a cbnz r2, 1002626a -10026256: 2b03 cmp r3, #3 -10026258: d907 bls.n 1002626a -1002625a: 2302 movs r3, #2 -1002625c: 6763 str r3, [r4, #116] ; 0x74 -1002625e: f895 386e ldrb.w r3, [r5, #2158] ; 0x86e -10026262: b913 cbnz r3, 1002626a -10026264: 4628 mov r0, r5 -10026266: f7ff fed3 bl 10026010 -1002626a: f241 4364 movw r3, #5220 ; 0x1464 -1002626e: f505 50a2 add.w r0, r5, #5184 ; 0x1440 -10026272: 58e9 ldr r1, [r5, r3] -10026274: 3018 adds r0, #24 -10026276: f010 fdcf bl 10036e18 -1002627a: 2300 movs r3, #0 -1002627c: f884 3040 strb.w r3, [r4, #64] ; 0x40 -10026280: bd38 pop {r3, r4, r5, pc} - -10026282 : -10026282: b570 push {r4, r5, r6, lr} -10026284: 6903 ldr r3, [r0, #16] -10026286: 4605 mov r5, r0 -10026288: 07da lsls r2, r3, #31 -1002628a: d504 bpl.n 10026296 -1002628c: f413 6401 ands.w r4, r3, #2064 ; 0x810 -10026290: d007 beq.n 100262a2 -10026292: 2400 movs r4, #0 -10026294: e027 b.n 100262e6 -10026296: f641 0269 movw r2, #6249 ; 0x1869 -1002629a: 5c84 ldrb r4, [r0, r2] -1002629c: 2c00 cmp r4, #0 -1002629e: d1f5 bne.n 1002628c -100262a0: e021 b.n 100262e6 -100262a2: f013 0f60 tst.w r3, #96 ; 0x60 -100262a6: d11e bne.n 100262e6 -100262a8: f8d5 3d08 ldr.w r3, [r5, #3336] ; 0xd08 -100262ac: 2b02 cmp r3, #2 -100262ae: d103 bne.n 100262b8 -100262b0: f241 035c movw r3, #4188 ; 0x105c -100262b4: 5cec ldrb r4, [r5, r3] -100262b6: b1b4 cbz r4, 100262e6 -100262b8: f641 0369 movw r3, #6249 ; 0x1869 -100262bc: 5cec ldrb r4, [r5, r3] -100262be: b98c cbnz r4, 100262e4 -100262c0: f7f1 f98e bl 100175e0 -100262c4: f505 55a0 add.w r5, r5, #5120 ; 0x1400 -100262c8: 6cab ldr r3, [r5, #72] ; 0x48 -100262ca: 1ac6 subs r6, r0, r3 -100262cc: 2001 movs r0, #1 -100262ce: f7f1 f9ad bl 1001762c -100262d2: 4286 cmp r6, r0 -100262d4: d307 bcc.n 100262e6 -100262d6: f895 4056 ldrb.w r4, [r5, #86] ; 0x56 -100262da: f114 34ff adds.w r4, r4, #4294967295 -100262de: bf18 it ne -100262e0: 2401 movne r4, #1 -100262e2: e000 b.n 100262e6 -100262e4: 2401 movs r4, #1 -100262e6: 4620 mov r0, r4 -100262e8: bd70 pop {r4, r5, r6, pc} - -100262ea : -100262ea: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -100262ee: 290a cmp r1, #10 -100262f0: 4606 mov r6, r0 -100262f2: 4617 mov r7, r2 -100262f4: 4698 mov r8, r3 -100262f6: f88d 1007 strb.w r1, [sp, #7] -100262fa: 460d mov r5, r1 -100262fc: d82a bhi.n 10026354 -100262fe: f500 54a0 add.w r4, r0, #5120 ; 0x1400 -10026302: 7a23 ldrb r3, [r4, #8] -10026304: 428b cmp r3, r1 -10026306: d107 bne.n 10026318 -10026308: b323 cbz r3, 10026354 -1002630a: 7a63 ldrb r3, [r4, #9] -1002630c: 4293 cmp r3, r2 -1002630e: d10e bne.n 1002632e -10026310: 7aa3 ldrb r3, [r4, #10] -10026312: 4543 cmp r3, r8 -10026314: d10b bne.n 1002632e -10026316: e01d b.n 10026354 -10026318: b949 cbnz r1, 1002632e -1002631a: 7221 strb r1, [r4, #8] -1002631c: f10d 0207 add.w r2, sp, #7 -10026320: 212b movs r1, #43 ; 0x2b -10026322: f00c f8d6 bl 100324d2 -10026326: f884 5045 strb.w r5, [r4, #69] ; 0x45 -1002632a: 7625 strb r5, [r4, #24] -1002632c: e012 b.n 10026354 -1002632e: 4630 mov r0, r6 -10026330: f7ff ffa7 bl 10026282 -10026334: b170 cbz r0, 10026354 -10026336: aa02 add r2, sp, #8 -10026338: f812 1d01 ldrb.w r1, [r2, #-1]! -1002633c: 2301 movs r3, #1 -1002633e: 7221 strb r1, [r4, #8] -10026340: f884 3045 strb.w r3, [r4, #69] ; 0x45 -10026344: 7267 strb r7, [r4, #9] -10026346: f884 800a strb.w r8, [r4, #10] -1002634a: 7623 strb r3, [r4, #24] -1002634c: 4630 mov r0, r6 -1002634e: 212b movs r1, #43 ; 0x2b -10026350: f00c f8bf bl 100324d2 -10026354: b002 add sp, #8 -10026356: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1002635a : -1002635a: b573 push {r0, r1, r4, r5, r6, lr} -1002635c: 2300 movs r3, #0 -1002635e: 4604 mov r4, r0 -10026360: 460e mov r6, r1 -10026362: f88d 3007 strb.w r3, [sp, #7] -10026366: f7f1 f93b bl 100175e0 -1002636a: 4605 mov r5, r0 -1002636c: 4620 mov r0, r4 -1002636e: 212e movs r1, #46 ; 0x2e -10026370: f10d 0207 add.w r2, sp, #7 -10026374: f00c f8b4 bl 100324e0 -10026378: f89d 3007 ldrb.w r3, [sp, #7] -1002637c: 2b01 cmp r3, #1 -1002637e: d00e beq.n 1002639e -10026380: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -10026384: 3310 adds r3, #16 -10026386: 681b ldr r3, [r3, #0] -10026388: 2b01 cmp r3, #1 -1002638a: d00a beq.n 100263a2 -1002638c: 4628 mov r0, r5 -1002638e: f7f1 f957 bl 10017640 -10026392: 42b0 cmp r0, r6 -10026394: d808 bhi.n 100263a8 -10026396: 2064 movs r0, #100 ; 0x64 -10026398: f7f1 f964 bl 10017664 -1002639c: e7e6 b.n 1002636c -1002639e: 2000 movs r0, #0 -100263a0: e004 b.n 100263ac -100263a2: f06f 0001 mvn.w r0, #1 -100263a6: e001 b.n 100263ac -100263a8: f04f 30ff mov.w r0, #4294967295 -100263ac: b002 add sp, #8 -100263ae: bd70 pop {r4, r5, r6, pc} - -100263b0 : -100263b0: b570 push {r4, r5, r6, lr} -100263b2: f500 54a0 add.w r4, r0, #5120 ; 0x1400 -100263b6: f894 3034 ldrb.w r3, [r4, #52] ; 0x34 -100263ba: 4605 mov r5, r0 -100263bc: b36b cbz r3, 1002641a -100263be: f641 0369 movw r3, #6249 ; 0x1869 -100263c2: 5cc3 ldrb r3, [r0, r3] -100263c4: bb4b cbnz r3, 1002641a -100263c6: f7ff ff5c bl 10026282 -100263ca: b330 cbz r0, 1002641a -100263cc: f641 035c movw r3, #6236 ; 0x185c -100263d0: 58e8 ldr r0, [r5, r3] -100263d2: b918 cbnz r0, 100263dc -100263d4: f894 3041 ldrb.w r3, [r4, #65] ; 0x41 -100263d8: b92b cbnz r3, 100263e6 -100263da: bd70 pop {r4, r5, r6, pc} -100263dc: f7ff ff51 bl 10026282 -100263e0: 2800 cmp r0, #0 -100263e2: d1f7 bne.n 100263d4 -100263e4: bd70 pop {r4, r5, r6, pc} -100263e6: f894 3042 ldrb.w r3, [r4, #66] ; 0x42 -100263ea: 2b01 cmp r3, #1 -100263ec: d912 bls.n 10026414 -100263ee: 7a26 ldrb r6, [r4, #8] -100263f0: b99e cbnz r6, 1002641a -100263f2: 4628 mov r0, r5 -100263f4: 2101 movs r1, #1 -100263f6: f00a fbab bl 10030b50 -100263fa: 2301 movs r3, #1 -100263fc: 7623 strb r3, [r4, #24] -100263fe: f505 539e add.w r3, r5, #5056 ; 0x13c0 -10026402: 4628 mov r0, r5 -10026404: f894 1043 ldrb.w r1, [r4, #67] ; 0x43 -10026408: 781a ldrb r2, [r3, #0] -1002640a: 4633 mov r3, r6 -1002640c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10026410: f7ff bf6b b.w 100262ea -10026414: 3301 adds r3, #1 -10026416: f884 3042 strb.w r3, [r4, #66] ; 0x42 -1002641a: bd70 pop {r4, r5, r6, pc} - -1002641c : -1002641c: b570 push {r4, r5, r6, lr} -1002641e: f641 0369 movw r3, #6249 ; 0x1869 -10026422: 5cc6 ldrb r6, [r0, r3] -10026424: 4604 mov r4, r0 -10026426: b9ae cbnz r6, 10026454 -10026428: f500 55a0 add.w r5, r0, #5120 ; 0x1400 -1002642c: f895 3041 ldrb.w r3, [r5, #65] ; 0x41 -10026430: b173 cbz r3, 10026450 -10026432: 7a2b ldrb r3, [r5, #8] -10026434: b163 cbz r3, 10026450 -10026436: 4631 mov r1, r6 -10026438: f00a fb8a bl 10030b50 -1002643c: 4620 mov r0, r4 -1002643e: 4631 mov r1, r6 -10026440: 4632 mov r2, r6 -10026442: 4633 mov r3, r6 -10026444: f7ff ff51 bl 100262ea -10026448: 4620 mov r0, r4 -1002644a: 2164 movs r1, #100 ; 0x64 -1002644c: f7ff ff85 bl 1002635a -10026450: 2300 movs r3, #0 -10026452: 762b strb r3, [r5, #24] -10026454: bd70 pop {r4, r5, r6, pc} - -10026456 : -10026456: 6903 ldr r3, [r0, #16] -10026458: 07db lsls r3, r3, #31 -1002645a: d503 bpl.n 10026464 -1002645c: 2105 movs r1, #5 -1002645e: 2200 movs r2, #0 -10026460: f7f6 bd44 b.w 1001ceec -10026464: 4770 bx lr - ... - -10026468 : -10026468: b573 push {r0, r1, r4, r5, r6, lr} -1002646a: f641 0369 movw r3, #6249 ; 0x1869 -1002646e: 5cc5 ldrb r5, [r0, r3] -10026470: 4606 mov r6, r0 -10026472: 2d00 cmp r5, #0 -10026474: d15a bne.n 1002652c -10026476: f500 54a0 add.w r4, r0, #5120 ; 0x1400 -1002647a: 4620 mov r0, r4 -1002647c: 2101 movs r1, #1 -1002647e: f7f0 fffb bl 10017478 -10026482: 6725 str r5, [r4, #112] ; 0x70 -10026484: 62e5 str r5, [r4, #44] ; 0x2c -10026486: 6325 str r5, [r4, #48] ; 0x30 -10026488: 63a5 str r5, [r4, #56] ; 0x38 -1002648a: f241 33bf movw r3, #5055 ; 0x13bf -1002648e: 5cf3 ldrb r3, [r6, r3] -10026490: f104 0058 add.w r0, r4, #88 ; 0x58 -10026494: f884 3035 strb.w r3, [r4, #53] ; 0x35 -10026498: f884 3037 strb.w r3, [r4, #55] ; 0x37 -1002649c: f241 33be movw r3, #5054 ; 0x13be -100264a0: 5cf3 ldrb r3, [r6, r3] -100264a2: f884 5068 strb.w r5, [r4, #104] ; 0x68 -100264a6: f884 3034 strb.w r3, [r4, #52] ; 0x34 -100264aa: f44f 63fa mov.w r3, #2000 ; 0x7d0 -100264ae: f884 5055 strb.w r5, [r4, #85] ; 0x55 -100264b2: f884 5056 strb.w r5, [r4, #86] ; 0x56 -100264b6: f884 507b strb.w r5, [r4, #123] ; 0x7b -100264ba: f884 5042 strb.w r5, [r4, #66] ; 0x42 -100264be: 6663 str r3, [r4, #100] ; 0x64 -100264c0: f241 33c1 movw r3, #5057 ; 0x13c1 -100264c4: 5cf3 ldrb r3, [r6, r3] -100264c6: 4a1a ldr r2, [pc, #104] ; (10026530 ) -100264c8: 2b01 cmp r3, #1 -100264ca: bf1b ittet ne -100264cc: f241 33bd movwne r3, #5053 ; 0x13bd -100264d0: 5cf3 ldrbne r3, [r6, r3] -100264d2: f884 5043 strbeq.w r5, [r4, #67] ; 0x43 -100264d6: f884 3043 strbne.w r3, [r4, #67] ; 0x43 -100264da: f894 3043 ldrb.w r3, [r4, #67] ; 0x43 -100264de: 2500 movs r5, #0 -100264e0: 3300 adds r3, #0 -100264e2: bf18 it ne -100264e4: 2301 movne r3, #1 -100264e6: f884 3041 strb.w r3, [r4, #65] ; 0x41 -100264ea: 230c movs r3, #12 -100264ec: 7125 strb r5, [r4, #4] -100264ee: f884 5045 strb.w r5, [r4, #69] ; 0x45 -100264f2: 7163 strb r3, [r4, #5] -100264f4: 7225 strb r5, [r4, #8] -100264f6: f506 539e add.w r3, r6, #5056 ; 0x13c0 -100264fa: 781b ldrb r3, [r3, #0] -100264fc: 72a5 strb r5, [r4, #10] -100264fe: 7263 strb r3, [r4, #9] -10026500: 2380 movs r3, #128 ; 0x80 -10026502: 71a3 strb r3, [r4, #6] -10026504: 4b0b ldr r3, [pc, #44] ; (10026534 ) -10026506: 9300 str r3, [sp, #0] -10026508: f641 0334 movw r3, #6196 ; 0x1834 -1002650c: 58f1 ldr r1, [r6, r3] -1002650e: 4633 mov r3, r6 -10026510: f010 fc7e bl 10036e10 -10026514: 2332 movs r3, #50 ; 0x32 -10026516: f884 3090 strb.w r3, [r4, #144] ; 0x90 -1002651a: 230a movs r3, #10 -1002651c: f884 3091 strb.w r3, [r4, #145] ; 0x91 -10026520: f884 3092 strb.w r3, [r4, #146] ; 0x92 -10026524: f884 5093 strb.w r5, [r4, #147] ; 0x93 -10026528: f884 5094 strb.w r5, [r4, #148] ; 0x94 -1002652c: b002 add sp, #8 -1002652e: bd70 pop {r4, r5, r6, pc} -10026530: 1002600d .word 0x1002600d -10026534: 1004162c .word 0x1004162c - -10026538 : -10026538: f641 0369 movw r3, #6249 ; 0x1869 -1002653c: 5cc3 ldrb r3, [r0, r3] -1002653e: b91b cbnz r3, 10026548 -10026540: f500 50a0 add.w r0, r0, #5120 ; 0x1400 -10026544: f7f0 bfa0 b.w 10017488 -10026548: 4770 bx lr - -1002654a <_rtw_pwr_wakeup>: -1002654a: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1002654e: f641 0368 movw r3, #6248 ; 0x1868 -10026552: 5cc3 ldrb r3, [r0, r3] -10026554: 4604 mov r4, r0 -10026556: 460e mov r6, r1 -10026558: f500 55a0 add.w r5, r0, #5120 ; 0x1400 -1002655c: f100 070c add.w r7, r0, #12 -10026560: b943 cbnz r3, 10026574 <_rtw_pwr_wakeup+0x2a> -10026562: f641 035c movw r3, #6236 ; 0x185c -10026566: 58c3 ldr r3, [r0, r3] -10026568: b123 cbz r3, 10026574 <_rtw_pwr_wakeup+0x2a> -1002656a: f503 55a0 add.w r5, r3, #5120 ; 0x1400 -1002656e: f103 070c add.w r7, r3, #12 -10026572: 461c mov r4, r3 -10026574: f7f1 f834 bl 100175e0 -10026578: 4680 mov r8, r0 -1002657a: 4630 mov r0, r6 -1002657c: f7f1 f84c bl 10017618 -10026580: 4440 add r0, r8 -10026582: 63e8 str r0, [r5, #60] ; 0x3c -10026584: f7f1 f82c bl 100175e0 -10026588: f895 3040 ldrb.w r3, [r5, #64] ; 0x40 -1002658c: 4680 mov r8, r0 -1002658e: b993 cbnz r3, 100265b6 <_rtw_pwr_wakeup+0x6c> -10026590: 6d6b ldr r3, [r5, #84] ; 0x54 -10026592: f023 437f bic.w r3, r3, #4278190080 ; 0xff000000 -10026596: f023 03ff bic.w r3, r3, #255 ; 0xff -1002659a: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 -1002659e: d10f bne.n 100265c0 <_rtw_pwr_wakeup+0x76> -100265a0: e023 b.n 100265ea <_rtw_pwr_wakeup+0xa0> -100265a2: 4640 mov r0, r8 -100265a4: f7f1 f84c bl 10017640 -100265a8: f640 33b8 movw r3, #3000 ; 0xbb8 -100265ac: 4298 cmp r0, r3 -100265ae: dcef bgt.n 10026590 <_rtw_pwr_wakeup+0x46> -100265b0: 200a movs r0, #10 -100265b2: f7f1 f84f bl 10017654 -100265b6: f895 3040 ldrb.w r3, [r5, #64] ; 0x40 -100265ba: 2b00 cmp r3, #0 -100265bc: d1f1 bne.n 100265a2 <_rtw_pwr_wakeup+0x58> -100265be: e7e7 b.n 10026590 <_rtw_pwr_wakeup+0x46> -100265c0: f895 3055 ldrb.w r3, [r5, #85] ; 0x55 -100265c4: 2b01 cmp r3, #1 -100265c6: d104 bne.n 100265d2 <_rtw_pwr_wakeup+0x88> -100265c8: f641 0358 movw r3, #6232 ; 0x1858 -100265cc: 5ce3 ldrb r3, [r4, r3] -100265ce: 2b01 cmp r3, #1 -100265d0: d00b beq.n 100265ea <_rtw_pwr_wakeup+0xa0> -100265d2: 687b ldr r3, [r7, #4] -100265d4: 07db lsls r3, r3, #31 -100265d6: d501 bpl.n 100265dc <_rtw_pwr_wakeup+0x92> -100265d8: 2401 movs r4, #1 -100265da: e017 b.n 1002660c <_rtw_pwr_wakeup+0xc2> -100265dc: 6f2b ldr r3, [r5, #112] ; 0x70 -100265de: 2b02 cmp r3, #2 -100265e0: d105 bne.n 100265ee <_rtw_pwr_wakeup+0xa4> -100265e2: 4620 mov r0, r4 -100265e4: f7ff fd6c bl 100260c0 -100265e8: b908 cbnz r0, 100265ee <_rtw_pwr_wakeup+0xa4> -100265ea: 2400 movs r4, #0 -100265ec: e00e b.n 1002660c <_rtw_pwr_wakeup+0xc2> -100265ee: f241 73ac movw r3, #6060 ; 0x17ac -100265f2: 58e3 ldr r3, [r4, r3] -100265f4: 2b00 cmp r3, #0 -100265f6: d1f8 bne.n 100265ea <_rtw_pwr_wakeup+0xa0> -100265f8: f641 0338 movw r3, #6200 ; 0x1838 -100265fc: 58e3 ldr r3, [r4, r3] -100265fe: 2b00 cmp r3, #0 -10026600: d0f3 beq.n 100265ea <_rtw_pwr_wakeup+0xa0> -10026602: f241 73c5 movw r3, #6085 ; 0x17c5 -10026606: 5ce4 ldrb r4, [r4, r3] -10026608: 2c00 cmp r4, #0 -1002660a: d1e5 bne.n 100265d8 <_rtw_pwr_wakeup+0x8e> -1002660c: f7f0 ffe8 bl 100175e0 -10026610: 4607 mov r7, r0 -10026612: 4630 mov r0, r6 -10026614: f7f1 f800 bl 10017618 -10026618: 4438 add r0, r7 -1002661a: 63e8 str r0, [r5, #60] ; 0x3c -1002661c: 4620 mov r0, r4 -1002661e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -10026622 : -10026622: b538 push {r3, r4, r5, lr} -10026624: f500 55a0 add.w r5, r0, #5120 ; 0x1400 -10026628: f895 3034 ldrb.w r3, [r5, #52] ; 0x34 -1002662c: 460c mov r4, r1 -1002662e: b90b cbnz r3, 10026634 -10026630: b111 cbz r1, 10026638 -10026632: e017 b.n 10026664 -10026634: 290a cmp r1, #10 -10026636: d812 bhi.n 1002665e -10026638: f895 3043 ldrb.w r3, [r5, #67] ; 0x43 -1002663c: 42a3 cmp r3, r4 -1002663e: d011 beq.n 10026664 -10026640: b914 cbnz r4, 10026648 -10026642: f7ff ff08 bl 10026456 -10026646: e002 b.n 1002664e -10026648: 2302 movs r3, #2 -1002664a: f885 3042 strb.w r3, [r5, #66] ; 0x42 -1002664e: f885 4043 strb.w r4, [r5, #67] ; 0x43 -10026652: 3400 adds r4, #0 -10026654: bf18 it ne -10026656: 2401 movne r4, #1 -10026658: f885 4041 strb.w r4, [r5, #65] ; 0x41 -1002665c: e002 b.n 10026664 -1002665e: f06f 0015 mvn.w r0, #21 -10026662: bd38 pop {r3, r4, r5, pc} -10026664: 2000 movs r0, #0 -10026666: bd38 pop {r3, r4, r5, pc} - -10026668 : -10026668: b508 push {r3, lr} -1002666a: f500 53a0 add.w r3, r0, #5120 ; 0x1400 -1002666e: f893 2034 ldrb.w r2, [r3, #52] ; 0x34 -10026672: b902 cbnz r2, 10026676 -10026674: b921 cbnz r1, 10026680 -10026676: 1e4a subs r2, r1, #1 -10026678: 2a01 cmp r2, #1 -1002667a: d803 bhi.n 10026684 -1002667c: f883 1037 strb.w r1, [r3, #55] ; 0x37 -10026680: 2000 movs r0, #0 -10026682: bd08 pop {r3, pc} -10026684: b961 cbnz r1, 100266a0 -10026686: f883 1037 strb.w r1, [r3, #55] ; 0x37 -1002668a: 4a07 ldr r2, [pc, #28] ; (100266a8 ) -1002668c: f44f 61fa mov.w r1, #2000 ; 0x7d0 -10026690: f7ff ff5b bl 1002654a <_rtw_pwr_wakeup> -10026694: 2800 cmp r0, #0 -10026696: bf14 ite ne -10026698: 2000 movne r0, #0 -1002669a: f06f 000d mvneq.w r0, #13 -1002669e: bd08 pop {r3, pc} -100266a0: f06f 0015 mvn.w r0, #21 -100266a4: bd08 pop {r3, pc} -100266a6: bf00 nop -100266a8: 1004161d .word 0x1004161d - -100266ac : -100266ac: f500 50a0 add.w r0, r0, #5120 ; 0x1400 -100266b0: f880 3092 strb.w r3, [r0, #146] ; 0x92 -100266b4: f89d 3000 ldrb.w r3, [sp] -100266b8: f880 1090 strb.w r1, [r0, #144] ; 0x90 -100266bc: f880 2091 strb.w r2, [r0, #145] ; 0x91 -100266c0: f880 3093 strb.w r3, [r0, #147] ; 0x93 -100266c4: 2000 movs r0, #0 -100266c6: 4770 bx lr - -100266c8 : -100266c8: f500 50a0 add.w r0, r0, #5120 ; 0x1400 -100266cc: f880 1094 strb.w r1, [r0, #148] ; 0x94 -100266d0: 2000 movs r0, #0 -100266d2: 4770 bx lr - -100266d4 : -100266d4: f500 50a0 add.w r0, r0, #5120 ; 0x1400 -100266d8: f890 0094 ldrb.w r0, [r0, #148] ; 0x94 -100266dc: 4770 bx lr - -100266de : -100266de: 4603 mov r3, r0 -100266e0: b168 cbz r0, 100266fe -100266e2: 6f80 ldr r0, [r0, #120] ; 0x78 -100266e4: 6fda ldr r2, [r3, #124] ; 0x7c -100266e6: 4408 add r0, r1 -100266e8: 4290 cmp r0, r2 -100266ea: 6798 str r0, [r3, #120] ; 0x78 -100266ec: d903 bls.n 100266f6 -100266ee: 1a40 subs r0, r0, r1 -100266f0: 6798 str r0, [r3, #120] ; 0x78 -100266f2: 2000 movs r0, #0 -100266f4: 4770 bx lr -100266f6: 6f1a ldr r2, [r3, #112] ; 0x70 -100266f8: 1a51 subs r1, r2, r1 -100266fa: 6719 str r1, [r3, #112] ; 0x70 -100266fc: 4770 bx lr -100266fe: 4770 bx lr - -10026700 : -10026700: 4603 mov r3, r0 -10026702: b168 cbz r0, 10026720 -10026704: 6fc0 ldr r0, [r0, #124] ; 0x7c -10026706: 6f9a ldr r2, [r3, #120] ; 0x78 -10026708: 1a40 subs r0, r0, r1 -1002670a: 4290 cmp r0, r2 -1002670c: 67d8 str r0, [r3, #124] ; 0x7c -1002670e: d203 bcs.n 10026718 -10026710: 4408 add r0, r1 -10026712: 67d8 str r0, [r3, #124] ; 0x7c -10026714: 2000 movs r0, #0 -10026716: 4770 bx lr -10026718: 6f1a ldr r2, [r3, #112] ; 0x70 -1002671a: 1a51 subs r1, r2, r1 -1002671c: 6719 str r1, [r3, #112] ; 0x70 -1002671e: 4770 bx lr -10026720: 4770 bx lr - -10026722 : -10026722: b510 push {r4, lr} -10026724: 4603 mov r3, r0 -10026726: f890 0c02 ldrb.w r0, [r0, #3074] ; 0xc02 -1002672a: b138 cbz r0, 1002673c -1002672c: f893 2c03 ldrb.w r2, [r3, #3075] ; 0xc03 -10026730: f883 2c06 strb.w r2, [r3, #3078] ; 0xc06 -10026734: 3a64 subs r2, #100 ; 0x64 -10026736: f883 2c04 strb.w r2, [r3, #3076] ; 0xc04 -1002673a: e039 b.n 100267b0 -1002673c: f893 2c38 ldrb.w r2, [r3, #3128] ; 0xc38 -10026740: b922 cbnz r2, 1002674c -10026742: 2201 movs r2, #1 -10026744: f893 0c39 ldrb.w r0, [r3, #3129] ; 0xc39 -10026748: f883 2c38 strb.w r2, [r3, #3128] ; 0xc38 -1002674c: f893 2c2c ldrb.w r2, [r3, #3116] ; 0xc2c -10026750: b92a cbnz r2, 1002675e -10026752: 2201 movs r2, #1 -10026754: f893 1c2d ldrb.w r1, [r3, #3117] ; 0xc2d -10026758: f883 2c2c strb.w r2, [r3, #3116] ; 0xc2c -1002675c: e000 b.n 10026760 -1002675e: 2100 movs r1, #0 -10026760: 691a ldr r2, [r3, #16] -10026762: 0512 lsls r2, r2, #20 -10026764: d424 bmi.n 100267b0 -10026766: f893 2c06 ldrb.w r2, [r3, #3078] ; 0xc06 -1002676a: eb00 0042 add.w r0, r0, r2, lsl #1 -1002676e: 2203 movs r2, #3 -10026770: fbb0 f2f2 udiv r2, r0, r2 -10026774: eb02 0442 add.w r4, r2, r2, lsl #1 -10026778: 42a0 cmp r0, r4 -1002677a: d000 beq.n 1002677e -1002677c: 3201 adds r2, #1 -1002677e: f893 0c07 ldrb.w r0, [r3, #3079] ; 0xc07 -10026782: 2a64 cmp r2, #100 ; 0x64 -10026784: bf28 it cs -10026786: 2264 movcs r2, #100 ; 0x64 -10026788: eb01 0040 add.w r0, r1, r0, lsl #1 -1002678c: 2103 movs r1, #3 -1002678e: fbb0 f1f1 udiv r1, r0, r1 -10026792: eb01 0441 add.w r4, r1, r1, lsl #1 -10026796: 42a0 cmp r0, r4 -10026798: bf18 it ne -1002679a: 3101 addne r1, #1 -1002679c: f883 2c06 strb.w r2, [r3, #3078] ; 0xc06 -100267a0: 2964 cmp r1, #100 ; 0x64 -100267a2: bf28 it cs -100267a4: 2164 movcs r1, #100 ; 0x64 -100267a6: 3a64 subs r2, #100 ; 0x64 -100267a8: f883 2c04 strb.w r2, [r3, #3076] ; 0xc04 -100267ac: f883 1c07 strb.w r1, [r3, #3079] ; 0xc07 -100267b0: f603 401c addw r0, r3, #3100 ; 0xc1c -100267b4: f8d3 1c28 ldr.w r1, [r3, #3112] ; 0xc28 -100267b8: e8bd 4010 ldmia.w sp!, {r4, lr} -100267bc: f010 bb2c b.w 10036e18 - -100267c0 <_rtw_init_sta_recv_priv>: -100267c0: b510 push {r4, lr} -100267c2: 2100 movs r1, #0 -100267c4: 4604 mov r4, r0 -100267c6: 2234 movs r2, #52 ; 0x34 -100267c8: f7f0 fe32 bl 10017430 -100267cc: 4620 mov r0, r4 -100267ce: f7f0 fedd bl 1001758c -100267d2: f104 0008 add.w r0, r4, #8 -100267d6: e8bd 4010 ldmia.w sp!, {r4, lr} -100267da: f7f0 bedf b.w 1001759c - ... - -100267e0 <_rtw_init_recv_priv>: -100267e0: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -100267e4: 4604 mov r4, r0 -100267e6: 460e mov r6, r1 -100267e8: 1d27 adds r7, r4, #4 -100267ea: f7f0 fecf bl 1001758c -100267ee: f504 7080 add.w r0, r4, #256 ; 0x100 -100267f2: f7f0 fecb bl 1001758c -100267f6: 4638 mov r0, r7 -100267f8: f7f0 fed0 bl 1001759c -100267fc: f104 0010 add.w r0, r4, #16 -10026800: f7f0 fecc bl 1001759c -10026804: f104 001c add.w r0, r4, #28 -10026808: f7f0 fec8 bl 1001759c -1002680c: 2308 movs r3, #8 -1002680e: 6323 str r3, [r4, #48] ; 0x30 -10026810: 4631 mov r1, r6 -10026812: 6366 str r6, [r4, #52] ; 0x34 -10026814: 4620 mov r0, r4 -10026816: f00f fcd5 bl 100361c4 -1002681a: f44f 60ac mov.w r0, #1376 ; 0x560 -1002681e: f7f0 ffa7 bl 10017770 -10026822: 62a0 str r0, [r4, #40] ; 0x28 -10026824: b330 cbz r0, 10026874 <_rtw_init_recv_priv+0x94> -10026826: f100 05ff add.w r5, r0, #255 ; 0xff -1002682a: f025 05ff bic.w r5, r5, #255 ; 0xff -1002682e: 62e5 str r5, [r4, #44] ; 0x2c -10026830: f505 698c add.w r9, r5, #1120 ; 0x460 -10026834: 4628 mov r0, r5 -10026836: f7f0 fe03 bl 10017440 -1002683a: 4628 mov r0, r5 -1002683c: 4639 mov r1, r7 -1002683e: f7f0 fe0d bl 1001745c -10026842: 4629 mov r1, r5 -10026844: 4630 mov r0, r6 -10026846: f00f fcbf bl 100361c8 -1002684a: 2300 movs r3, #0 -1002684c: 672b str r3, [r5, #112] ; 0x70 -1002684e: 612e str r6, [r5, #16] -10026850: 358c adds r5, #140 ; 0x8c -10026852: 454d cmp r5, r9 -10026854: 4680 mov r8, r0 -10026856: d1ed bne.n 10026834 <_rtw_init_recv_priv+0x54> -10026858: 4b09 ldr r3, [pc, #36] ; (10026880 <_rtw_init_recv_priv+0xa0>) -1002685a: f104 00cc add.w r0, r4, #204 ; 0xcc -1002685e: 9300 str r3, [sp, #0] -10026860: 4631 mov r1, r6 -10026862: 4633 mov r3, r6 -10026864: 4a07 ldr r2, [pc, #28] ; (10026884 <_rtw_init_recv_priv+0xa4>) -10026866: f010 fad3 bl 10036e10 -1002686a: f44f 737a mov.w r3, #1000 ; 0x3e8 -1002686e: f8c4 30d8 str.w r3, [r4, #216] ; 0xd8 -10026872: e000 b.n 10026876 <_rtw_init_recv_priv+0x96> -10026874: 4680 mov r8, r0 -10026876: 4640 mov r0, r8 -10026878: b003 add sp, #12 -1002687a: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -1002687e: bf00 nop -10026880: 10041663 .word 0x10041663 -10026884: 10026723 .word 0x10026723 - -10026888 : -10026888: b510 push {r4, lr} -1002688a: 4604 mov r4, r0 -1002688c: f7f0 fe8c bl 100175a8 -10026890: f504 7080 add.w r0, r4, #256 ; 0x100 -10026894: f7f0 fe88 bl 100175a8 -10026898: f104 000c add.w r0, r4, #12 -1002689c: f7f0 fe84 bl 100175a8 -100268a0: f104 0018 add.w r0, r4, #24 -100268a4: f7f0 fe80 bl 100175a8 -100268a8: f104 0024 add.w r0, r4, #36 ; 0x24 -100268ac: f7f0 fe7c bl 100175a8 -100268b0: f104 0088 add.w r0, r4, #136 ; 0x88 -100268b4: e8bd 4010 ldmia.w sp!, {r4, lr} -100268b8: f7f0 be76 b.w 100175a8 - -100268bc <_rtw_alloc_recvframe>: -100268bc: b538 push {r3, r4, r5, lr} -100268be: 4605 mov r5, r0 -100268c0: f7f0 fe5a bl 10017578 -100268c4: 2801 cmp r0, #1 -100268c6: d00f beq.n 100268e8 <_rtw_alloc_recvframe+0x2c> -100268c8: 682c ldr r4, [r5, #0] -100268ca: 4620 mov r0, r4 -100268cc: f7f0 fdcc bl 10017468 -100268d0: 6923 ldr r3, [r4, #16] -100268d2: b153 cbz r3, 100268ea <_rtw_alloc_recvframe+0x2e> -100268d4: f603 3254 addw r2, r3, #2900 ; 0xb54 -100268d8: 4295 cmp r5, r2 -100268da: d106 bne.n 100268ea <_rtw_alloc_recvframe+0x2e> -100268dc: f8d3 2b80 ldr.w r2, [r3, #2944] ; 0xb80 -100268e0: 3a01 subs r2, #1 -100268e2: f8c3 2b80 str.w r2, [r3, #2944] ; 0xb80 -100268e6: e000 b.n 100268ea <_rtw_alloc_recvframe+0x2e> -100268e8: 2400 movs r4, #0 -100268ea: 4620 mov r0, r4 -100268ec: bd38 pop {r3, r4, r5, pc} - -100268ee : -100268ee: b537 push {r0, r1, r2, r4, r5, lr} -100268f0: f100 0408 add.w r4, r0, #8 -100268f4: a901 add r1, sp, #4 -100268f6: 4605 mov r5, r0 -100268f8: 4620 mov r0, r4 -100268fa: f7f0 fe65 bl 100175c8 -100268fe: 4628 mov r0, r5 -10026900: f7ff ffdc bl 100268bc <_rtw_alloc_recvframe> -10026904: a901 add r1, sp, #4 -10026906: 4605 mov r5, r0 -10026908: 4620 mov r0, r4 -1002690a: f7f0 fe67 bl 100175dc -1002690e: 4628 mov r0, r5 -10026910: b003 add sp, #12 -10026912: bd30 pop {r4, r5, pc} - -10026914 : -10026914: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -10026918: 6904 ldr r4, [r0, #16] -1002691a: f641 0369 movw r3, #6249 ; 0x1869 -1002691e: 5ce3 ldrb r3, [r4, r3] -10026920: 4605 mov r5, r0 -10026922: 460f mov r7, r1 -10026924: b913 cbnz r3, 1002692c -10026926: f504 6635 add.w r6, r4, #2896 ; 0xb50 -1002692a: e007 b.n 1002693c -1002692c: f641 035c movw r3, #6236 ; 0x185c -10026930: 58e4 ldr r4, [r4, r3] -10026932: f504 6635 add.w r6, r4, #2896 ; 0xb50 -10026936: f604 3754 addw r7, r4, #2900 ; 0xb54 -1002693a: 6104 str r4, [r0, #16] -1002693c: 68a8 ldr r0, [r5, #8] -1002693e: b120 cbz r0, 1002694a -10026940: 69c1 ldr r1, [r0, #28] -10026942: f00f ff4f bl 100367e4 -10026946: 2300 movs r3, #0 -10026948: 60ab str r3, [r5, #8] -1002694a: f107 0808 add.w r8, r7, #8 -1002694e: a901 add r1, sp, #4 -10026950: 4640 mov r0, r8 -10026952: f7f0 fe39 bl 100175c8 -10026956: 4628 mov r0, r5 -10026958: f7f0 fd86 bl 10017468 -1002695c: 2300 movs r3, #0 -1002695e: 672b str r3, [r5, #112] ; 0x70 -10026960: 4628 mov r0, r5 -10026962: 4639 mov r1, r7 -10026964: f7f0 fd7a bl 1001745c -10026968: b12c cbz r4, 10026976 -1002696a: 1d33 adds r3, r6, #4 -1002696c: 429f cmp r7, r3 -1002696e: d102 bne.n 10026976 -10026970: 6b33 ldr r3, [r6, #48] ; 0x30 -10026972: 3301 adds r3, #1 -10026974: 6333 str r3, [r6, #48] ; 0x30 -10026976: 6b33 ldr r3, [r6, #48] ; 0x30 -10026978: 2b08 cmp r3, #8 -1002697a: d90d bls.n 10026998 -1002697c: 4b0a ldr r3, [pc, #40] ; (100269a8 ) -1002697e: 681b ldr r3, [r3, #0] -10026980: b153 cbz r3, 10026998 -10026982: 480a ldr r0, [pc, #40] ; (100269ac ) -10026984: f7f4 f8ec bl 1001ab60 -10026988: 4b09 ldr r3, [pc, #36] ; (100269b0 ) -1002698a: 490a ldr r1, [pc, #40] ; (100269b4 ) -1002698c: f8d3 01ac ldr.w r0, [r3, #428] ; 0x1ac -10026990: 6b32 ldr r2, [r6, #48] ; 0x30 -10026992: 2308 movs r3, #8 -10026994: f7f4 f8e4 bl 1001ab60 -10026998: 4640 mov r0, r8 -1002699a: a901 add r1, sp, #4 -1002699c: f7f0 fe1e bl 100175dc -100269a0: 2001 movs r0, #1 -100269a2: b002 add sp, #8 -100269a4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100269a8: 10044ec0 .word 0x10044ec0 -100269ac: 10042939 .word 0x10042939 -100269b0: 10043a4c .word 0x10043a4c -100269b4: 10041646 .word 0x10041646 - -100269b8 <_rtw_enqueue_recvframe>: -100269b8: b570 push {r4, r5, r6, lr} -100269ba: 4606 mov r6, r0 -100269bc: 6904 ldr r4, [r0, #16] -100269be: 460d mov r5, r1 -100269c0: f7f0 fd52 bl 10017468 -100269c4: 4630 mov r0, r6 -100269c6: 4629 mov r1, r5 -100269c8: f7f0 fd48 bl 1001745c -100269cc: b144 cbz r4, 100269e0 <_rtw_enqueue_recvframe+0x28> -100269ce: f604 3354 addw r3, r4, #2900 ; 0xb54 -100269d2: 429d cmp r5, r3 -100269d4: d104 bne.n 100269e0 <_rtw_enqueue_recvframe+0x28> -100269d6: f8d4 3b80 ldr.w r3, [r4, #2944] ; 0xb80 -100269da: 3301 adds r3, #1 -100269dc: f8c4 3b80 str.w r3, [r4, #2944] ; 0xb80 -100269e0: 2001 movs r0, #1 -100269e2: bd70 pop {r4, r5, r6, pc} - -100269e4 : -100269e4: b573 push {r0, r1, r4, r5, r6, lr} -100269e6: f101 0408 add.w r4, r1, #8 -100269ea: 4606 mov r6, r0 -100269ec: 460d mov r5, r1 -100269ee: 4620 mov r0, r4 -100269f0: a901 add r1, sp, #4 -100269f2: f7f0 fde9 bl 100175c8 -100269f6: 4629 mov r1, r5 -100269f8: 4630 mov r0, r6 -100269fa: f7ff ffdd bl 100269b8 <_rtw_enqueue_recvframe> -100269fe: a901 add r1, sp, #4 -10026a00: 4605 mov r5, r0 -10026a02: 4620 mov r0, r4 -10026a04: f7f0 fdea bl 100175dc -10026a08: 4628 mov r0, r5 -10026a0a: b002 add sp, #8 -10026a0c: bd70 pop {r4, r5, r6, pc} - -10026a0e : -10026a0e: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10026a12: f100 0608 add.w r6, r0, #8 -10026a16: 4605 mov r5, r0 -10026a18: 4630 mov r0, r6 -10026a1a: 460f mov r7, r1 -10026a1c: f7f0 fdcc bl 100175b8 -10026a20: 682c ldr r4, [r5, #0] -10026a22: 4628 mov r0, r5 -10026a24: 4621 mov r1, r4 -10026a26: f7f0 fdac bl 10017582 -10026a2a: b938 cbnz r0, 10026a3c -10026a2c: f8d4 8000 ldr.w r8, [r4] -10026a30: 4620 mov r0, r4 -10026a32: 4639 mov r1, r7 -10026a34: f7ff ff6e bl 10026914 -10026a38: 4644 mov r4, r8 -10026a3a: e7f2 b.n 10026a22 -10026a3c: 4630 mov r0, r6 -10026a3e: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -10026a42: f7f0 bdc3 b.w 100175cc - -10026a46 : -10026a46: b570 push {r4, r5, r6, lr} -10026a48: f600 356c addw r5, r0, #2924 ; 0xb6c -10026a4c: 4606 mov r6, r0 -10026a4e: 4628 mov r0, r5 -10026a50: f7ff ff4d bl 100268ee -10026a54: 2400 movs r4, #0 -10026a56: b140 cbz r0, 10026a6a -10026a58: f606 3154 addw r1, r6, #2900 ; 0xb54 -10026a5c: f7ff ff5a bl 10026914 -10026a60: 4628 mov r0, r5 -10026a62: 3401 adds r4, #1 -10026a64: f7ff ff43 bl 100268ee -10026a68: e7f5 b.n 10026a56 -10026a6a: 4620 mov r0, r4 -10026a6c: bd70 pop {r4, r5, r6, pc} - -10026a6e <_rtw_free_recv_priv>: -10026a6e: b538 push {r3, r4, r5, lr} -10026a70: 6b45 ldr r5, [r0, #52] ; 0x34 -10026a72: 4604 mov r4, r0 -10026a74: 4628 mov r0, r5 -10026a76: f7e6 fdef bl 1000d658 -10026a7a: 4628 mov r0, r5 -10026a7c: f7ff ffe3 bl 10026a46 -10026a80: 4620 mov r0, r4 -10026a82: f7ff ff01 bl 10026888 -10026a86: 4620 mov r0, r4 -10026a88: f00f fba3 bl 100361d2 -10026a8c: 6aa0 ldr r0, [r4, #40] ; 0x28 -10026a8e: b128 cbz r0, 10026a9c <_rtw_free_recv_priv+0x2e> -10026a90: f44f 61ac mov.w r1, #1376 ; 0x560 -10026a94: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10026a98: f7f0 bcb5 b.w 10017406 -10026a9c: bd38 pop {r3, r4, r5, pc} - -10026a9e : -10026a9e: 2000 movs r0, #0 -10026aa0: 4770 bx lr - -10026aa2 : -10026aa2: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} -10026aa6: 460c mov r4, r1 -10026aa8: 4605 mov r5, r0 -10026aaa: 3142 adds r1, #66 ; 0x42 -10026aac: f500 6046 add.w r0, r0, #3168 ; 0xc60 -10026ab0: f001 fbf0 bl 10028294 -10026ab4: f894 302f ldrb.w r3, [r4, #47] ; 0x2f -10026ab8: 2b02 cmp r3, #2 -10026aba: d117 bne.n 10026aec -10026abc: b908 cbnz r0, 10026ac2 -10026abe: 2501 movs r5, #1 -10026ac0: e00f b.n 10026ae2 -10026ac2: f894 3048 ldrb.w r3, [r4, #72] ; 0x48 -10026ac6: 07de lsls r6, r3, #31 -10026ac8: d412 bmi.n 10026af0 -10026aca: e05b b.n 10026b84 -10026acc: f894 1048 ldrb.w r1, [r4, #72] ; 0x48 -10026ad0: f011 0101 ands.w r1, r1, #1 -10026ad4: d159 bne.n 10026b8a -10026ad6: 2301 movs r3, #1 -10026ad8: f894 202e ldrb.w r2, [r4, #46] ; 0x2e -10026adc: 2a01 cmp r2, #1 -10026ade: d03d beq.n 10026b5c -10026ae0: 2500 movs r5, #0 -10026ae2: 4620 mov r0, r4 -10026ae4: 2108 movs r1, #8 -10026ae6: f7ff fe0b bl 10026700 -10026aea: e056 b.n 10026b9a -10026aec: 2501 movs r5, #1 -10026aee: e054 b.n 10026b9a -10026af0: f241 035c movw r3, #4188 ; 0x105c -10026af4: 5ceb ldrb r3, [r5, r3] -10026af6: f894 0058 ldrb.w r0, [r4, #88] ; 0x58 -10026afa: 2b00 cmp r3, #0 -10026afc: d040 beq.n 10026b80 -10026afe: eb05 1000 add.w r0, r5, r0, lsl #4 -10026b02: f600 50ec addw r0, r0, #3564 ; 0xdec -10026b06: f894 3021 ldrb.w r3, [r4, #33] ; 0x21 -10026b0a: 6f27 ldr r7, [r4, #112] ; 0x70 -10026b0c: f894 2031 ldrb.w r2, [r4, #49] ; 0x31 -10026b10: 1aff subs r7, r7, r3 -10026b12: f894 8030 ldrb.w r8, [r4, #48] ; 0x30 -10026b16: 1abf subs r7, r7, r2 -10026b18: 6fa1 ldr r1, [r4, #120] ; 0x78 -10026b1a: 3f08 subs r7, #8 -10026b1c: ebc8 0707 rsb r7, r8, r7 -10026b20: 4498 add r8, r3 -10026b22: f894 3025 ldrb.w r3, [r4, #37] ; 0x25 -10026b26: 4488 add r8, r1 -10026b28: ae02 add r6, sp, #8 -10026b2a: 9301 str r3, [sp, #4] -10026b2c: 9600 str r6, [sp, #0] -10026b2e: 463b mov r3, r7 -10026b30: 4642 mov r2, r8 -10026b32: f017 fe85 bl 1003e840 <__rtw_seccalctkipmic_veneer> -10026b36: 2000 movs r0, #0 -10026b38: 4447 add r7, r8 -10026b3a: 4601 mov r1, r0 -10026b3c: 5c72 ldrb r2, [r6, r1] -10026b3e: 5c7b ldrb r3, [r7, r1] -10026b40: 3101 adds r1, #1 -10026b42: 429a cmp r2, r3 -10026b44: bf18 it ne -10026b46: 2001 movne r0, #1 -10026b48: 2908 cmp r1, #8 -10026b4a: d1f7 bne.n 10026b3c -10026b4c: 2801 cmp r0, #1 -10026b4e: d10b bne.n 10026b68 -10026b50: 6f22 ldr r2, [r4, #112] ; 0x70 -10026b52: 2300 movs r3, #0 -10026b54: 4293 cmp r3, r2 -10026b56: d2b9 bcs.n 10026acc -10026b58: 3308 adds r3, #8 -10026b5a: e7fb b.n 10026b54 -10026b5c: 2b00 cmp r3, #0 -10026b5e: d0bf beq.n 10026ae0 -10026b60: 4628 mov r0, r5 -10026b62: f00f fb87 bl 10036274 -10026b66: e7bb b.n 10026ae0 -10026b68: f241 025e movw r2, #4190 ; 0x105e -10026b6c: 5cab ldrb r3, [r5, r2] -10026b6e: 2b00 cmp r3, #0 -10026b70: d1a5 bne.n 10026abe -10026b72: f894 3048 ldrb.w r3, [r4, #72] ; 0x48 -10026b76: 07d9 lsls r1, r3, #31 -10026b78: d5a1 bpl.n 10026abe -10026b7a: 2301 movs r3, #1 -10026b7c: 54ab strb r3, [r5, r2] -10026b7e: e79e b.n 10026abe -10026b80: 461d mov r5, r3 -10026b82: e00a b.n 10026b9a -10026b84: f500 7094 add.w r0, r0, #296 ; 0x128 -10026b88: e7bd b.n 10026b06 -10026b8a: f8d5 36a0 ldr.w r3, [r5, #1696] ; 0x6a0 -10026b8e: f894 2058 ldrb.w r2, [r4, #88] ; 0x58 -10026b92: 1ad2 subs r2, r2, r3 -10026b94: 4253 negs r3, r2 -10026b96: 4153 adcs r3, r2 -10026b98: e79e b.n 10026ad8 -10026b9a: 4628 mov r0, r5 -10026b9c: b004 add sp, #16 -10026b9e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -10026ba2 : -10026ba2: b570 push {r4, r5, r6, lr} -10026ba4: f891 302f ldrb.w r3, [r1, #47] ; 0x2f -10026ba8: 4605 mov r5, r0 -10026baa: 460c mov r4, r1 -10026bac: f891 202e ldrb.w r2, [r1, #46] ; 0x2e -10026bb0: 2b00 cmp r3, #0 -10026bb2: d033 beq.n 10026c1c -10026bb4: f891 0021 ldrb.w r0, [r1, #33] ; 0x21 -10026bb8: 6f89 ldr r1, [r1, #120] ; 0x78 -10026bba: 4401 add r1, r0 -10026bbc: 78c9 ldrb r1, [r1, #3] -10026bbe: 0989 lsrs r1, r1, #6 -10026bc0: f884 1058 strb.w r1, [r4, #88] ; 0x58 -10026bc4: b122 cbz r2, 10026bd0 -10026bc6: f241 0164 movw r1, #4196 ; 0x1064 -10026bca: 5869 ldr r1, [r5, r1] -10026bcc: 2901 cmp r1, #1 -10026bce: d125 bne.n 10026c1c -10026bd0: f894 3048 ldrb.w r3, [r4, #72] ; 0x48 -10026bd4: f013 0301 ands.w r3, r3, #1 -10026bd8: d02f beq.n 10026c3a -10026bda: f894 302f ldrb.w r3, [r4, #47] ; 0x2f -10026bde: 3b01 subs r3, #1 -10026be0: 2b04 cmp r3, #4 -10026be2: d82e bhi.n 10026c42 -10026be4: e8df f003 tbb [pc, r3] -10026be8: 0d2d0803 .word 0x0d2d0803 -10026bec: 03 .byte 0x03 -10026bed: 00 .byte 0x00 -10026bee: 4628 mov r0, r5 -10026bf0: 4621 mov r1, r4 -10026bf2: f000 ff8c bl 10027b0e -10026bf6: e024 b.n 10026c42 -10026bf8: 4628 mov r0, r5 -10026bfa: 4621 mov r1, r4 -10026bfc: f000 ffe0 bl 10027bc0 -10026c00: e003 b.n 10026c0a -10026c02: 4628 mov r0, r5 -10026c04: 4621 mov r1, r4 -10026c06: f001 f848 bl 10027c9a -10026c0a: 4606 mov r6, r0 -10026c0c: b9c8 cbnz r0, 10026c42 -10026c0e: 4620 mov r0, r4 -10026c10: f605 3154 addw r1, r5, #2900 ; 0xb54 -10026c14: f7ff fe7e bl 10026914 -10026c18: 4634 mov r4, r6 -10026c1a: e012 b.n 10026c42 -10026c1c: 2a01 cmp r2, #1 -10026c1e: d110 bne.n 10026c42 -10026c20: b17b cbz r3, 10026c42 -10026c22: f241 025d movw r2, #4189 ; 0x105d -10026c26: 5caa ldrb r2, [r5, r2] -10026c28: 2a01 cmp r2, #1 -10026c2a: d001 beq.n 10026c30 -10026c2c: 2b02 cmp r3, #2 -10026c2e: d008 beq.n 10026c42 -10026c30: 2201 movs r2, #1 -10026c32: f241 0368 movw r3, #4200 ; 0x1068 -10026c36: 50ea str r2, [r5, r3] -10026c38: e003 b.n 10026c42 -10026c3a: f241 0268 movw r2, #4200 ; 0x1068 -10026c3e: 50ab str r3, [r5, r2] -10026c40: e7cb b.n 10026bda -10026c42: 4620 mov r0, r4 -10026c44: bd70 pop {r4, r5, r6, pc} - -10026c46 : -10026c46: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -10026c4a: 2300 movs r3, #0 -10026c4c: 4605 mov r5, r0 -10026c4e: f8ad 3006 strh.w r3, [sp, #6] -10026c52: f500 6046 add.w r0, r0, #3168 ; 0xc60 -10026c56: f8d5 8d08 ldr.w r8, [r5, #3336] ; 0xd08 -10026c5a: 460c mov r4, r1 -10026c5c: b109 cbz r1, 10026c62 -10026c5e: 6f8f ldr r7, [r1, #120] ; 0x78 -10026c60: e000 b.n 10026c64 -10026c62: 460f mov r7, r1 -10026c64: f104 0142 add.w r1, r4, #66 ; 0x42 -10026c68: f001 fb14 bl 10028294 -10026c6c: f894 3030 ldrb.w r3, [r4, #48] ; 0x30 -10026c70: f894 1021 ldrb.w r1, [r4, #33] ; 0x21 -10026c74: 2202 movs r2, #2 -10026c76: 4419 add r1, r3 -10026c78: 3106 adds r1, #6 -10026c7a: 4439 add r1, r7 -10026c7c: 4606 mov r6, r0 -10026c7e: f10d 0006 add.w r0, sp, #6 -10026c82: f7f0 fbc5 bl 10017410 -10026c86: f8bd 0006 ldrh.w r0, [sp, #6] -10026c8a: f7f0 fb7b bl 10017384 <_htons> -10026c8e: f1b8 0f02 cmp.w r8, #2 -10026c92: f8ad 0006 strh.w r0, [sp, #6] -10026c96: d10d bne.n 10026cb4 -10026c98: b166 cbz r6, 10026cb4 -10026c9a: f8d6 3110 ldr.w r3, [r6, #272] ; 0x110 -10026c9e: b14b cbz r3, 10026cb4 -10026ca0: f648 038e movw r3, #34958 ; 0x888e -10026ca4: 4298 cmp r0, r3 -10026ca6: d005 beq.n 10026cb4 -10026ca8: 4620 mov r0, r4 -10026caa: f605 3154 addw r1, r5, #2900 ; 0xb54 -10026cae: f7ff fe31 bl 10026914 -10026cb2: 2400 movs r4, #0 -10026cb4: 4620 mov r0, r4 -10026cb6: b002 add sp, #8 -10026cb8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -10026cbc : -10026cbc: b510 push {r4, lr} -10026cbe: f890 3025 ldrb.w r3, [r0, #37] ; 0x25 -10026cc2: 8d04 ldrh r4, [r0, #40] ; 0x28 -10026cc4: 2b0f cmp r3, #15 -10026cc6: f890 102a ldrb.w r1, [r0, #42] ; 0x2a -10026cca: dc0c bgt.n 10026ce6 -10026ccc: f001 010f and.w r1, r1, #15 -10026cd0: ea41 1104 orr.w r1, r1, r4, lsl #4 -10026cd4: f832 0013 ldrh.w r0, [r2, r3, lsl #1] -10026cd8: b289 uxth r1, r1 -10026cda: 4288 cmp r0, r1 -10026cdc: d003 beq.n 10026ce6 -10026cde: f822 1013 strh.w r1, [r2, r3, lsl #1] -10026ce2: 2001 movs r0, #1 -10026ce4: bd10 pop {r4, pc} -10026ce6: 2000 movs r0, #0 -10026ce8: bd10 pop {r4, pc} - -10026cea : -10026cea: b538 push {r3, r4, r5, lr} -10026cec: 313c adds r1, #60 ; 0x3c -10026cee: 6bcd ldr r5, [r1, #60] ; 0x3c -10026cf0: 4604 mov r4, r0 -10026cf2: f500 6046 add.w r0, r0, #3168 ; 0xc60 -10026cf6: f001 facd bl 10028294 -10026cfa: 882a ldrh r2, [r5, #0] -10026cfc: 4601 mov r1, r0 -10026cfe: f402 5280 and.w r2, r2, #4096 ; 0x1000 -10026d02: b292 uxth r2, r2 -10026d04: b180 cbz r0, 10026d28 -10026d06: f8d0 30f8 ldr.w r3, [r0, #248] ; 0xf8 -10026d0a: b132 cbz r2, 10026d1a -10026d0c: 075a lsls r2, r3, #29 -10026d0e: d40b bmi.n 10026d28 -10026d10: 4620 mov r0, r4 -10026d12: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10026d16: f003 b978 b.w 1002a00a -10026d1a: 075b lsls r3, r3, #29 -10026d1c: d504 bpl.n 10026d28 -10026d1e: 4620 mov r0, r4 -10026d20: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10026d24: f003 b9e5 b.w 1002a0f2 -10026d28: bd38 pop {r3, r4, r5, pc} - -10026d2a : -10026d2a: b538 push {r3, r4, r5, lr} -10026d2c: 4604 mov r4, r0 -10026d2e: 460d mov r5, r1 -10026d30: f500 6046 add.w r0, r0, #3168 ; 0xc60 -10026d34: 313c adds r1, #60 ; 0x3c -10026d36: f001 faad bl 10028294 -10026d3a: 4601 mov r1, r0 -10026d3c: b3c0 cbz r0, 10026db0 -10026d3e: f8d0 3104 ldr.w r3, [r0, #260] ; 0x104 -10026d42: b3ab cbz r3, 10026db0 -10026d44: f890 3310 ldrb.w r3, [r0, #784] ; 0x310 -10026d48: 0718 lsls r0, r3, #28 -10026d4a: d031 beq.n 10026db0 -10026d4c: f8d1 30f8 ldr.w r3, [r1, #248] ; 0xf8 -10026d50: 075a lsls r2, r3, #29 -10026d52: d52d bpl.n 10026db0 -10026d54: f895 2025 ldrb.w r2, [r5, #37] ; 0x25 -10026d58: 1e53 subs r3, r2, #1 -10026d5a: b2db uxtb r3, r3 -10026d5c: 2b06 cmp r3, #6 -10026d5e: d813 bhi.n 10026d88 -10026d60: 2001 movs r0, #1 -10026d62: fa00 f303 lsl.w r3, r0, r3 -10026d66: f013 0f60 tst.w r3, #96 ; 0x60 -10026d6a: d10a bne.n 10026d82 -10026d6c: f013 0f18 tst.w r3, #24 -10026d70: d104 bne.n 10026d7c -10026d72: 079b lsls r3, r3, #30 -10026d74: d008 beq.n 10026d88 -10026d76: f891 3312 ldrb.w r3, [r1, #786] ; 0x312 -10026d7a: e007 b.n 10026d8c -10026d7c: f891 3314 ldrb.w r3, [r1, #788] ; 0x314 -10026d80: e004 b.n 10026d8c -10026d82: f891 3315 ldrb.w r3, [r1, #789] ; 0x315 -10026d86: e001 b.n 10026d8c -10026d88: f891 3313 ldrb.w r3, [r1, #787] ; 0x313 -10026d8c: f003 0302 and.w r3, r3, #2 -10026d90: b2db uxtb r3, r3 -10026d92: b16b cbz r3, 10026db0 -10026d94: f8d1 3318 ldr.w r3, [r1, #792] ; 0x318 -10026d98: 4620 mov r0, r4 -10026d9a: b11b cbz r3, 10026da4 -10026d9c: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10026da0: f003 babb b.w 1002a31a -10026da4: f501 7184 add.w r1, r1, #264 ; 0x108 -10026da8: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10026dac: f7f9 ba0f b.w 100201ce -10026db0: bd38 pop {r3, r4, r5, pc} - -10026db2 : -10026db2: b5f0 push {r4, r5, r6, r7, lr} -10026db4: 6f0c ldr r4, [r1, #112] ; 0x70 -10026db6: f500 6335 add.w r3, r0, #2896 ; 0xb50 -10026dba: e9d3 6710 ldrd r6, r7, [r3, #64] ; 0x40 -10026dbe: 17e5 asrs r5, r4, #31 -10026dc0: 1936 adds r6, r6, r4 -10026dc2: eb47 0705 adc.w r7, r7, r5 -10026dc6: e9c3 6710 strd r6, r7, [r3, #64] ; 0x40 -10026dca: f8d0 3480 ldr.w r3, [r0, #1152] ; 0x480 -10026dce: 3301 adds r3, #1 -10026dd0: f8c0 3480 str.w r3, [r0, #1152] ; 0x480 -10026dd4: 8ece ldrh r6, [r1, #54] ; 0x36 -10026dd6: f64f 73ff movw r3, #65535 ; 0xffff -10026dda: 429e cmp r6, r3 -10026ddc: d102 bne.n 10026de4 -10026dde: 6b8b ldr r3, [r1, #56] ; 0x38 -10026de0: 3301 adds r3, #1 -10026de2: d003 beq.n 10026dec -10026de4: f891 3036 ldrb.w r3, [r1, #54] ; 0x36 -10026de8: 07db lsls r3, r3, #31 -10026dea: d514 bpl.n 10026e16 -10026dec: b912 cbnz r2, 10026df4 -10026dee: f8d1 2088 ldr.w r2, [r1, #136] ; 0x88 -10026df2: b1b2 cbz r2, 10026e22 -10026df4: f502 72c0 add.w r2, r2, #384 ; 0x180 -10026df8: e9d2 0104 ldrd r0, r1, [r2, #16] -10026dfc: 3001 adds r0, #1 -10026dfe: f141 0100 adc.w r1, r1, #0 -10026e02: e9c2 0104 strd r0, r1, [r2, #16] -10026e06: e9d2 010c ldrd r0, r1, [r2, #48] ; 0x30 -10026e0a: 1824 adds r4, r4, r0 -10026e0c: eb45 0501 adc.w r5, r5, r1 -10026e10: e9c2 450c strd r4, r5, [r2, #48] ; 0x30 -10026e14: bdf0 pop {r4, r5, r6, r7, pc} -10026e16: f8d0 3484 ldr.w r3, [r0, #1156] ; 0x484 -10026e1a: 3301 adds r3, #1 -10026e1c: f8c0 3484 str.w r3, [r0, #1156] ; 0x484 -10026e20: e7e4 b.n 10026dec -10026e22: bdf0 pop {r4, r5, r6, r7, pc} - -10026e24 : -10026e24: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10026e28: 6905 ldr r5, [r0, #16] -10026e2a: f891 8036 ldrb.w r8, [r1, #54] ; 0x36 -10026e2e: f015 0f60 tst.w r5, #96 ; 0x60 -10026e32: 4606 mov r6, r0 -10026e34: 460c mov r4, r1 -10026e36: 4691 mov r9, r2 -10026e38: 6f8f ldr r7, [r1, #120] ; 0x78 -10026e3a: f100 0a9c add.w sl, r0, #156 ; 0x9c -10026e3e: f008 0801 and.w r8, r8, #1 -10026e42: d028 beq.n 10026e96 -10026e44: f500 57a4 add.w r7, r0, #5248 ; 0x1480 -10026e48: 3719 adds r7, #25 -10026e4a: f101 053c add.w r5, r1, #60 ; 0x3c -10026e4e: 4638 mov r0, r7 -10026e50: 4629 mov r1, r5 -10026e52: 2206 movs r2, #6 -10026e54: f7f0 fae4 bl 10017420 -10026e58: b108 cbz r0, 10026e5e -10026e5a: 2400 movs r4, #0 -10026e5c: e07b b.n 10026f56 -10026e5e: 4638 mov r0, r7 -10026e60: f104 0136 add.w r1, r4, #54 ; 0x36 -10026e64: 2206 movs r2, #6 -10026e66: f7f0 fadb bl 10017420 -10026e6a: b910 cbnz r0, 10026e72 -10026e6c: f1b8 0f00 cmp.w r8, #0 -10026e70: d0f3 beq.n 10026e5a -10026e72: 344e adds r4, #78 ; 0x4e -10026e74: 4620 mov r0, r4 -10026e76: 4939 ldr r1, [pc, #228] ; (10026f5c ) -10026e78: 2206 movs r2, #6 -10026e7a: f7f0 fad1 bl 10017420 -10026e7e: 2800 cmp r0, #0 -10026e80: d1eb bne.n 10026e5a -10026e82: 4650 mov r0, sl -10026e84: 4935 ldr r1, [pc, #212] ; (10026f5c ) -10026e86: 2206 movs r2, #6 -10026e88: f7f0 faca bl 10017420 -10026e8c: 2800 cmp r0, #0 -10026e8e: d1e4 bne.n 10026e5a -10026e90: 4620 mov r0, r4 -10026e92: 4651 mov r1, sl -10026e94: e005 b.n 10026ea2 -10026e96: 072a lsls r2, r5, #28 -10026e98: d509 bpl.n 10026eae -10026e9a: f101 054e add.w r5, r1, #78 ; 0x4e -10026e9e: 4628 mov r0, r5 -10026ea0: 313c adds r1, #60 ; 0x3c -10026ea2: 2206 movs r2, #6 -10026ea4: f7f0 fabc bl 10017420 -10026ea8: 2800 cmp r0, #0 -10026eaa: d152 bne.n 10026f52 -10026eac: e7d5 b.n 10026e5a -10026eae: 06eb lsls r3, r5, #27 -10026eb0: d407 bmi.n 10026ec2 -10026eb2: f415 3580 ands.w r5, r5, #65536 ; 0x10000 -10026eb6: d129 bne.n 10026f0c -10026eb8: 462c mov r4, r5 -10026eba: f1b8 0f00 cmp.w r8, #0 -10026ebe: d018 beq.n 10026ef2 -10026ec0: e007 b.n 10026ed2 -10026ec2: f1b8 0f00 cmp.w r8, #0 -10026ec6: d008 beq.n 10026eda -10026ec8: f894 304e ldrb.w r3, [r4, #78] ; 0x4e -10026ecc: 07d9 lsls r1, r3, #31 -10026ece: d5c4 bpl.n 10026e5a -10026ed0: 2401 movs r4, #1 -10026ed2: 4630 mov r0, r6 -10026ed4: f001 fa34 bl 10028340 -10026ed8: e010 b.n 10026efc -10026eda: f104 004e add.w r0, r4, #78 ; 0x4e -10026ede: f104 0136 add.w r1, r4, #54 ; 0x36 -10026ee2: 2206 movs r2, #6 -10026ee4: f7f0 fa9c bl 10017420 -10026ee8: 2800 cmp r0, #0 -10026eea: d0b6 beq.n 10026e5a -10026eec: f104 053c add.w r5, r4, #60 ; 0x3c -10026ef0: 2401 movs r4, #1 -10026ef2: f506 6046 add.w r0, r6, #3168 ; 0xc60 -10026ef6: 4629 mov r1, r5 -10026ef8: f001 f9cc bl 10028294 -10026efc: f8c9 0000 str.w r0, [r9] -10026f00: f8d9 3000 ldr.w r3, [r9] -10026f04: 2b00 cmp r3, #0 -10026f06: bf08 it eq -10026f08: 2400 moveq r4, #0 -10026f0a: e024 b.n 10026f56 -10026f0c: f101 0b36 add.w fp, r1, #54 ; 0x36 -10026f10: f104 053c add.w r5, r4, #60 ; 0x3c -10026f14: 4658 mov r0, fp -10026f16: 1d39 adds r1, r7, #4 -10026f18: 2206 movs r2, #6 -10026f1a: f7f0 fa79 bl 10017410 -10026f1e: 4628 mov r0, r5 -10026f20: f107 010a add.w r1, r7, #10 -10026f24: 2206 movs r2, #6 -10026f26: f7f0 fa73 bl 10017410 -10026f2a: f104 004e add.w r0, r4, #78 ; 0x4e -10026f2e: f107 0110 add.w r1, r7, #16 -10026f32: 2206 movs r2, #6 -10026f34: f7f0 fa6c bl 10017410 -10026f38: f104 0048 add.w r0, r4, #72 ; 0x48 -10026f3c: 4659 mov r1, fp -10026f3e: 2206 movs r2, #6 -10026f40: f7f0 fa66 bl 10017410 -10026f44: 4629 mov r1, r5 -10026f46: f104 0042 add.w r0, r4, #66 ; 0x42 -10026f4a: 2206 movs r2, #6 -10026f4c: f7f0 fa60 bl 10017410 -10026f50: 4655 mov r5, sl -10026f52: 2401 movs r4, #1 -10026f54: e7b1 b.n 10026eba -10026f56: 4620 mov r0, r4 -10026f58: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -10026f5c: 1004163f .word 0x1004163f - -10026f60 : -10026f60: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10026f64: 6903 ldr r3, [r0, #16] -10026f66: 4616 mov r6, r2 -10026f68: 071a lsls r2, r3, #28 -10026f6a: 4605 mov r5, r0 -10026f6c: 460c mov r4, r1 -10026f6e: 6f8f ldr r7, [r1, #120] ; 0x78 -10026f70: f500 6946 add.w r9, r0, #3168 ; 0xc60 -10026f74: f100 089c add.w r8, r0, #156 ; 0x9c -10026f78: f891 a036 ldrb.w sl, [r1, #54] ; 0x36 -10026f7c: d502 bpl.n 10026f84 -10026f7e: f013 0f81 tst.w r3, #129 ; 0x81 -10026f82: d107 bne.n 10026f94 -10026f84: f003 1301 and.w r3, r3, #65537 ; 0x10001 -10026f88: f1b3 1f01 cmp.w r3, #65537 ; 0x10001 -10026f8c: d049 beq.n 10027022 -10026f8e: 2000 movs r0, #0 -10026f90: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -10026f94: 883b ldrh r3, [r7, #0] -10026f96: f003 02fc and.w r2, r3, #252 ; 0xfc -10026f9a: 2a48 cmp r2, #72 ; 0x48 -10026f9c: d0f7 beq.n 10026f8e -10026f9e: f003 0288 and.w r2, r3, #136 ; 0x88 -10026fa2: 2a88 cmp r2, #136 ; 0x88 -10026fa4: d102 bne.n 10026fac -10026fa6: f013 0f70 tst.w r3, #112 ; 0x70 -10026faa: d1f0 bne.n 10026f8e -10026fac: f505 57a4 add.w r7, r5, #5248 ; 0x1480 -10026fb0: 3719 adds r7, #25 -10026fb2: 4638 mov r0, r7 -10026fb4: f104 013c add.w r1, r4, #60 ; 0x3c -10026fb8: 2206 movs r2, #6 -10026fba: f7f0 fa31 bl 10017420 -10026fbe: 2800 cmp r0, #0 -10026fc0: d1e5 bne.n 10026f8e -10026fc2: 4638 mov r0, r7 -10026fc4: f104 0136 add.w r1, r4, #54 ; 0x36 -10026fc8: 2206 movs r2, #6 -10026fca: f00a 0a01 and.w sl, sl, #1 -10026fce: f7f0 fa27 bl 10017420 -10026fd2: b910 cbnz r0, 10026fda -10026fd4: f1ba 0f00 cmp.w sl, #0 -10026fd8: d0d9 beq.n 10026f8e -10026fda: 344e adds r4, #78 ; 0x4e -10026fdc: 4620 mov r0, r4 -10026fde: 492a ldr r1, [pc, #168] ; (10027088 ) -10026fe0: 2206 movs r2, #6 -10026fe2: f7f0 fa1d bl 10017420 -10026fe6: 2800 cmp r0, #0 -10026fe8: d1d1 bne.n 10026f8e -10026fea: 4640 mov r0, r8 -10026fec: 4926 ldr r1, [pc, #152] ; (10027088 ) -10026fee: 2206 movs r2, #6 -10026ff0: f7f0 fa16 bl 10017420 -10026ff4: 2800 cmp r0, #0 -10026ff6: d1ca bne.n 10026f8e -10026ff8: 4620 mov r0, r4 -10026ffa: 4641 mov r1, r8 -10026ffc: 2206 movs r2, #6 -10026ffe: f7f0 fa0f bl 10017420 -10027002: 2800 cmp r0, #0 -10027004: d0c3 beq.n 10026f8e -10027006: f1ba 0f00 cmp.w sl, #0 -1002700a: d003 beq.n 10027014 -1002700c: 4628 mov r0, r5 -1002700e: f001 f997 bl 10028340 -10027012: e003 b.n 1002701c -10027014: 4648 mov r0, r9 -10027016: 4621 mov r1, r4 -10027018: f001 f93c bl 10028294 -1002701c: 6030 str r0, [r6, #0] -1002701e: 6830 ldr r0, [r6, #0] -10027020: e02c b.n 1002707c -10027022: f104 0b36 add.w fp, r4, #54 ; 0x36 -10027026: 4658 mov r0, fp -10027028: 1d39 adds r1, r7, #4 -1002702a: 2206 movs r2, #6 -1002702c: f104 0a3c add.w sl, r4, #60 ; 0x3c -10027030: f7f0 f9ee bl 10017410 -10027034: f104 054e add.w r5, r4, #78 ; 0x4e -10027038: 4650 mov r0, sl -1002703a: f107 010a add.w r1, r7, #10 -1002703e: 2206 movs r2, #6 -10027040: f7f0 f9e6 bl 10017410 -10027044: 4628 mov r0, r5 -10027046: f107 0110 add.w r1, r7, #16 -1002704a: 2206 movs r2, #6 -1002704c: f7f0 f9e0 bl 10017410 -10027050: f104 0048 add.w r0, r4, #72 ; 0x48 -10027054: 4659 mov r1, fp -10027056: 2206 movs r2, #6 -10027058: f7f0 f9da bl 10017410 -1002705c: f104 0042 add.w r0, r4, #66 ; 0x42 -10027060: 4651 mov r1, sl -10027062: 2206 movs r2, #6 -10027064: f7f0 f9d4 bl 10017410 -10027068: 4628 mov r0, r5 -1002706a: 4641 mov r1, r8 -1002706c: 2206 movs r2, #6 -1002706e: f7f0 f9cf bl 10017410 -10027072: 4648 mov r0, r9 -10027074: 4629 mov r1, r5 -10027076: f001 f90d bl 10028294 -1002707a: 6030 str r0, [r6, #0] -1002707c: 3000 adds r0, #0 -1002707e: bf18 it ne -10027080: 2001 movne r0, #1 -10027082: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -10027086: bf00 nop -10027088: 1004163f .word 0x1004163f - -1002708c : -1002708c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10027090: 6903 ldr r3, [r0, #16] -10027092: 4604 mov r4, r0 -10027094: 06db lsls r3, r3, #27 -10027096: 460d mov r5, r1 -10027098: 4616 mov r6, r2 -1002709a: f8d1 8078 ldr.w r8, [r1, #120] ; 0x78 -1002709e: d51e bpl.n 100270de -100270a0: f101 004e add.w r0, r1, #78 ; 0x4e -100270a4: 2206 movs r2, #6 -100270a6: f104 019c add.w r1, r4, #156 ; 0x9c -100270aa: f7f0 f9b9 bl 10017420 -100270ae: b338 cbz r0, 10027100 -100270b0: f105 073c add.w r7, r5, #60 ; 0x3c -100270b4: f504 6046 add.w r0, r4, #3168 ; 0xc60 -100270b8: 4639 mov r1, r7 -100270ba: f001 f8eb bl 10028294 -100270be: 6030 str r0, [r6, #0] -100270c0: b180 cbz r0, 100270e4 -100270c2: 4620 mov r0, r4 -100270c4: 4629 mov r1, r5 -100270c6: f7ff fe10 bl 10026cea -100270ca: f8b8 2000 ldrh.w r2, [r8] -100270ce: f002 03fc and.w r3, r2, #252 ; 0xfc -100270d2: 2b48 cmp r3, #72 ; 0x48 -100270d4: d00f beq.n 100270f6 -100270d6: f002 0288 and.w r2, r2, #136 ; 0x88 -100270da: 2a88 cmp r2, #136 ; 0x88 -100270dc: d013 beq.n 10027106 -100270de: 2001 movs r0, #1 -100270e0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100270e4: f894 5901 ldrb.w r5, [r4, #2305] ; 0x901 -100270e8: b955 cbnz r5, 10027100 -100270ea: 4620 mov r0, r4 -100270ec: 4639 mov r1, r7 -100270ee: 2207 movs r2, #7 -100270f0: f7f9 f918 bl 10020324 -100270f4: e004 b.n 10027100 -100270f6: 4620 mov r0, r4 -100270f8: 4629 mov r1, r5 -100270fa: 6832 ldr r2, [r6, #0] -100270fc: f7ff fe59 bl 10026db2 -10027100: 2000 movs r0, #0 -10027102: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10027106: 2bc8 cmp r3, #200 ; 0xc8 -10027108: d0f5 beq.n 100270f6 -1002710a: 4620 mov r0, r4 -1002710c: 4629 mov r1, r5 -1002710e: f7ff fe0c bl 10026d2a -10027112: e7e4 b.n 100270de - -10027114 : -10027114: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -10027118: 6f8c ldr r4, [r1, #120] ; 0x78 -1002711a: 4605 mov r5, r0 -1002711c: 8823 ldrh r3, [r4, #0] -1002711e: 460e mov r6, r1 -10027120: f003 030c and.w r3, r3, #12 -10027124: 2b04 cmp r3, #4 -10027126: f040 80be bne.w 100272a6 -1002712a: f505 51a4 add.w r1, r5, #5248 ; 0x1480 -1002712e: 1d20 adds r0, r4, #4 -10027130: 3119 adds r1, #25 -10027132: 2206 movs r2, #6 -10027134: f7f0 f974 bl 10017420 -10027138: 2800 cmp r0, #0 -1002713a: f000 80b4 beq.w 100272a6 -1002713e: 8823 ldrh r3, [r4, #0] -10027140: f003 03fc and.w r3, r3, #252 ; 0xfc -10027144: 2ba4 cmp r3, #164 ; 0xa4 -10027146: f040 80ae bne.w 100272a6 -1002714a: f104 010a add.w r1, r4, #10 -1002714e: f505 6046 add.w r0, r5, #3168 ; 0xc60 -10027152: 8867 ldrh r7, [r4, #2] -10027154: f001 f89e bl 10028294 -10027158: f3c7 070d ubfx r7, r7, #0, #14 -1002715c: 4604 mov r4, r0 -1002715e: 2800 cmp r0, #0 -10027160: f000 80a1 beq.w 100272a6 -10027164: f8d0 00fc ldr.w r0, [r0, #252] ; 0xfc -10027168: 42b8 cmp r0, r7 -1002716a: f040 809c bne.w 100272a6 -1002716e: 4621 mov r1, r4 -10027170: e9f1 2362 ldrd r2, r3, [r1, #392]! ; 0x188 -10027174: 3201 adds r2, #1 -10027176: f143 0300 adc.w r3, r3, #0 -1002717a: e9c1 2300 strd r2, r3, [r1] -1002717e: f896 3025 ldrb.w r3, [r6, #37] ; 0x25 -10027182: 3b01 subs r3, #1 -10027184: b2db uxtb r3, r3 -10027186: 2b06 cmp r3, #6 -10027188: d814 bhi.n 100271b4 -1002718a: 2201 movs r2, #1 -1002718c: fa02 f303 lsl.w r3, r2, r3 -10027190: f013 0f60 tst.w r3, #96 ; 0x60 -10027194: d10b bne.n 100271ae -10027196: f013 0f18 tst.w r3, #24 -1002719a: d105 bne.n 100271a8 -1002719c: 079f lsls r7, r3, #30 -1002719e: d009 beq.n 100271b4 -100271a0: f894 7312 ldrb.w r7, [r4, #786] ; 0x312 -100271a4: 4017 ands r7, r2 -100271a6: e009 b.n 100271bc -100271a8: f894 7314 ldrb.w r7, [r4, #788] ; 0x314 -100271ac: e004 b.n 100271b8 -100271ae: f894 7315 ldrb.w r7, [r4, #789] ; 0x315 -100271b2: e001 b.n 100271b8 -100271b4: f894 7313 ldrb.w r7, [r4, #787] ; 0x313 -100271b8: f007 0701 and.w r7, r7, #1 -100271bc: 2f00 cmp r7, #0 -100271be: d172 bne.n 100272a6 -100271c0: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 -100271c4: 075e lsls r6, r3, #29 -100271c6: d56e bpl.n 100272a6 -100271c8: f8b5 3cfc ldrh.w r3, [r5, #3324] ; 0xcfc -100271cc: fa23 f000 lsr.w r0, r3, r0 -100271d0: 07c0 lsls r0, r0, #31 -100271d2: d568 bpl.n 100272a6 -100271d4: f104 08f0 add.w r8, r4, #240 ; 0xf0 -100271d8: 4640 mov r0, r8 -100271da: a901 add r1, sp, #4 -100271dc: f7f0 f9f4 bl 100175c8 -100271e0: 4620 mov r0, r4 -100271e2: f850 6fe8 ldr.w r6, [r0, #232]! -100271e6: 4631 mov r1, r6 -100271e8: f7f0 f9cb bl 10017582 -100271ec: 2800 cmp r0, #0 -100271ee: d13c bne.n 1002726a -100271f0: 4630 mov r0, r6 -100271f2: f7f0 f939 bl 10017468 -100271f6: f8d4 30f4 ldr.w r3, [r4, #244] ; 0xf4 -100271fa: 4640 mov r0, r8 -100271fc: 3b01 subs r3, #1 -100271fe: f8c4 30f4 str.w r3, [r4, #244] ; 0xf4 -10027202: 3300 adds r3, #0 -10027204: bf18 it ne -10027206: 2301 movne r3, #1 -10027208: f886 3065 strb.w r3, [r6, #101] ; 0x65 -1002720c: 2301 movs r3, #1 -1002720e: f886 3067 strb.w r3, [r6, #103] ; 0x67 -10027212: a901 add r1, sp, #4 -10027214: f605 1758 addw r7, r5, #2392 ; 0x958 -10027218: f7f0 f9e0 bl 100175dc -1002721c: 4638 mov r0, r7 -1002721e: a901 add r1, sp, #4 -10027220: f7f0 f9d2 bl 100175c8 -10027224: 4628 mov r0, r5 -10027226: 4631 mov r1, r6 -10027228: f002 fc4d bl 10029ac6 -1002722c: 2801 cmp r0, #1 -1002722e: d003 beq.n 10027238 -10027230: 4638 mov r0, r7 -10027232: 4631 mov r1, r6 -10027234: f002 fbac bl 10029990 -10027238: 4638 mov r0, r7 -1002723a: a901 add r1, sp, #4 -1002723c: f7f0 f9ce bl 100175dc -10027240: 4640 mov r0, r8 -10027242: a901 add r1, sp, #4 -10027244: f7f0 f9c0 bl 100175c8 -10027248: f8d4 20f4 ldr.w r2, [r4, #244] ; 0xf4 -1002724c: bb3a cbnz r2, 1002729e -1002724e: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc -10027252: 2101 movs r1, #1 -10027254: fa01 f303 lsl.w r3, r1, r3 -10027258: f8b5 1cfe ldrh.w r1, [r5, #3326] ; 0xcfe -1002725c: 4628 mov r0, r5 -1002725e: ea21 0303 bic.w r3, r1, r3 -10027262: f8a5 3cfe strh.w r3, [r5, #3326] ; 0xcfe -10027266: 2105 movs r1, #5 -10027268: e016 b.n 10027298 -1002726a: f8b5 3cfe ldrh.w r3, [r5, #3326] ; 0xcfe -1002726e: f8d4 20fc ldr.w r2, [r4, #252] ; 0xfc -10027272: fa23 f102 lsr.w r1, r3, r2 -10027276: 07c9 lsls r1, r1, #31 -10027278: d511 bpl.n 1002729e -1002727a: f8d4 10f4 ldr.w r1, [r4, #244] ; 0xf4 -1002727e: b109 cbz r1, 10027284 -10027280: f8c4 70f4 str.w r7, [r4, #244] ; 0xf4 -10027284: 2101 movs r1, #1 -10027286: fa01 f202 lsl.w r2, r1, r2 -1002728a: ea23 0302 bic.w r3, r3, r2 -1002728e: f8a5 3cfe strh.w r3, [r5, #3326] ; 0xcfe -10027292: 4628 mov r0, r5 -10027294: 2105 movs r1, #5 -10027296: 2200 movs r2, #0 -10027298: 4613 mov r3, r2 -1002729a: f7f3 feb5 bl 1001b008 -1002729e: 4640 mov r0, r8 -100272a0: a901 add r1, sp, #4 -100272a2: f7f0 f99b bl 100175dc -100272a6: 2000 movs r0, #0 -100272a8: b002 add sp, #8 -100272aa: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -100272ae : -100272ae: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} -100272b2: 6f8d ldr r5, [r1, #120] ; 0x78 -100272b4: 2300 movs r3, #0 -100272b6: f8b5 a000 ldrh.w sl, [r5] -100272ba: 460c mov r4, r1 -100272bc: f40a 7280 and.w r2, sl, #256 ; 0x100 -100272c0: b292 uxth r2, r2 -100272c2: 429a cmp r2, r3 -100272c4: bf0c ite eq -100272c6: 4619 moveq r1, r3 -100272c8: 2102 movne r1, #2 -100272ca: 9301 str r3, [sp, #4] -100272cc: f3ca 2340 ubfx r3, sl, #9, #1 -100272d0: 4319 orrs r1, r3 -100272d2: 2901 cmp r1, #1 -100272d4: 4606 mov r6, r0 -100272d6: d003 beq.n 100272e0 -100272d8: d302 bcc.n 100272e0 -100272da: f105 0910 add.w r9, r5, #16 -100272de: e001 b.n 100272e4 -100272e0: f105 0904 add.w r9, r5, #4 -100272e4: 2a00 cmp r2, #0 -100272e6: bf0c ite eq -100272e8: 2100 moveq r1, #0 -100272ea: 2102 movne r1, #2 -100272ec: 4319 orrs r1, r3 -100272ee: 2901 cmp r1, #1 -100272f0: d003 beq.n 100272fa -100272f2: d305 bcc.n 10027300 -100272f4: 2902 cmp r1, #2 -100272f6: d003 beq.n 10027300 -100272f8: e005 b.n 10027306 -100272fa: f105 0810 add.w r8, r5, #16 -100272fe: e004 b.n 1002730a -10027300: f105 080a add.w r8, r5, #10 -10027304: e001 b.n 1002730a -10027306: f105 0818 add.w r8, r5, #24 -1002730a: 2a00 cmp r2, #0 -1002730c: bf0c ite eq -1002730e: 2200 moveq r2, #0 -10027310: 2202 movne r2, #2 -10027312: 4313 orrs r3, r2 -10027314: 2b02 cmp r3, #2 -10027316: d008 beq.n 1002732a -10027318: 2b03 cmp r3, #3 -1002731a: d006 beq.n 1002732a -1002731c: 2b01 cmp r3, #1 -1002731e: bf14 ite ne -10027320: f105 0710 addne.w r7, r5, #16 -10027324: f105 070a addeq.w r7, r5, #10 -10027328: e000 b.n 1002732c -1002732a: 1d2f adds r7, r5, #4 -1002732c: 2f00 cmp r7, #0 -1002732e: f000 80e1 beq.w 100274f4 -10027332: f104 0036 add.w r0, r4, #54 ; 0x36 -10027336: 4649 mov r1, r9 -10027338: 2206 movs r2, #6 -1002733a: f7f0 f869 bl 10017410 -1002733e: f104 003c add.w r0, r4, #60 ; 0x3c -10027342: 4641 mov r1, r8 -10027344: 2206 movs r2, #6 -10027346: f7f0 f863 bl 10017410 -1002734a: f104 004e add.w r0, r4, #78 ; 0x4e -1002734e: 4639 mov r1, r7 -10027350: 2206 movs r2, #6 -10027352: f7f0 f85d bl 10017410 -10027356: f894 3022 ldrb.w r3, [r4, #34] ; 0x22 -1002735a: 2b03 cmp r3, #3 -1002735c: f200 80ca bhi.w 100274f4 -10027360: e8df f003 tbb [pc, r3] -10027364: 38261402 .word 0x38261402 -10027368: f104 0048 add.w r0, r4, #72 ; 0x48 -1002736c: 4649 mov r1, r9 -1002736e: 2206 movs r2, #6 -10027370: f7f0 f84e bl 10017410 -10027374: f104 0042 add.w r0, r4, #66 ; 0x42 -10027378: 4641 mov r1, r8 -1002737a: 2206 movs r2, #6 -1002737c: f7f0 f848 bl 10017410 -10027380: 4630 mov r0, r6 -10027382: 4621 mov r1, r4 -10027384: aa01 add r2, sp, #4 -10027386: f7ff fd4d bl 10026e24 -1002738a: e031 b.n 100273f0 -1002738c: f104 0048 add.w r0, r4, #72 ; 0x48 -10027390: 4649 mov r1, r9 -10027392: 2206 movs r2, #6 -10027394: f7f0 f83c bl 10017410 -10027398: f104 0042 add.w r0, r4, #66 ; 0x42 -1002739c: 4639 mov r1, r7 -1002739e: 2206 movs r2, #6 -100273a0: f7f0 f836 bl 10017410 -100273a4: 4630 mov r0, r6 -100273a6: 4621 mov r1, r4 -100273a8: aa01 add r2, sp, #4 -100273aa: f7ff fdd9 bl 10026f60 -100273ae: e01f b.n 100273f0 -100273b0: f104 0048 add.w r0, r4, #72 ; 0x48 -100273b4: 4639 mov r1, r7 -100273b6: 2206 movs r2, #6 -100273b8: f7f0 f82a bl 10017410 -100273bc: f104 0042 add.w r0, r4, #66 ; 0x42 -100273c0: 4641 mov r1, r8 -100273c2: 2206 movs r2, #6 -100273c4: f7f0 f824 bl 10017410 -100273c8: 4630 mov r0, r6 -100273ca: 4621 mov r1, r4 -100273cc: aa01 add r2, sp, #4 -100273ce: f7ff fe5d bl 1002708c -100273d2: e00d b.n 100273f0 -100273d4: f104 0048 add.w r0, r4, #72 ; 0x48 -100273d8: 1d29 adds r1, r5, #4 -100273da: 2206 movs r2, #6 -100273dc: f7f0 f818 bl 10017410 -100273e0: f104 0042 add.w r0, r4, #66 ; 0x42 -100273e4: f105 010a add.w r1, r5, #10 -100273e8: 2206 movs r2, #6 -100273ea: f7f0 f811 bl 10017410 -100273ee: e081 b.n 100274f4 -100273f0: 2800 cmp r0, #0 -100273f2: d07f beq.n 100274f4 -100273f4: 9a01 ldr r2, [sp, #4] -100273f6: 2a00 cmp r2, #0 -100273f8: d07c beq.n 100274f4 -100273fa: f894 0024 ldrb.w r0, [r4, #36] ; 0x24 -100273fe: 2300 movs r3, #0 -10027400: 2801 cmp r0, #1 -10027402: f8c4 2088 str.w r2, [r4, #136] ; 0x88 -10027406: f884 3023 strb.w r3, [r4, #35] ; 0x23 -1002740a: f884 3054 strb.w r3, [r4, #84] ; 0x54 -1002740e: f894 1022 ldrb.w r1, [r4, #34] ; 0x22 -10027412: d11a bne.n 1002744a -10027414: 7e2b ldrb r3, [r5, #24] -10027416: 2903 cmp r1, #3 -10027418: f003 030f and.w r3, r3, #15 -1002741c: f884 3025 strb.w r3, [r4, #37] ; 0x25 -10027420: 8b2f ldrh r7, [r5, #24] -10027422: bf14 ite ne -10027424: 211a movne r1, #26 -10027426: 2120 moveq r1, #32 -10027428: f3c7 1741 ubfx r7, r7, #5, #2 -1002742c: f884 7054 strb.w r7, [r4, #84] ; 0x54 -10027430: 8b2d ldrh r5, [r5, #24] -10027432: f884 1021 strb.w r1, [r4, #33] ; 0x21 -10027436: f3c5 15c0 ubfx r5, r5, #7, #1 -1002743a: f884 5023 strb.w r5, [r4, #35] ; 0x23 -1002743e: b163 cbz r3, 1002745a -10027440: 2b03 cmp r3, #3 -10027442: d00a beq.n 1002745a -10027444: f8c6 0b88 str.w r0, [r6, #2952] ; 0xb88 -10027448: e007 b.n 1002745a -1002744a: 2903 cmp r1, #3 -1002744c: f884 3025 strb.w r3, [r4, #37] ; 0x25 -10027450: bf14 ite ne -10027452: 2318 movne r3, #24 -10027454: 231e moveq r3, #30 -10027456: f884 3021 strb.w r3, [r4, #33] ; 0x21 -1002745a: f894 302c ldrb.w r3, [r4, #44] ; 0x2c -1002745e: b123 cbz r3, 1002746a -10027460: f894 3021 ldrb.w r3, [r4, #33] ; 0x21 -10027464: 3304 adds r3, #4 -10027466: f884 3021 strb.w r3, [r4, #33] ; 0x21 -1002746a: 4620 mov r0, r4 -1002746c: f3ca 21c0 ubfx r1, sl, #11, #1 -10027470: 32c8 adds r2, #200 ; 0xc8 -10027472: f7ff fc23 bl 10026cbc -10027476: 2800 cmp r0, #0 -10027478: d03c beq.n 100274f4 -1002747a: f894 302d ldrb.w r3, [r4, #45] ; 0x2d -1002747e: b38b cbz r3, 100274e4 -10027480: f8d6 3d08 ldr.w r3, [r6, #3336] ; 0xd08 -10027484: 2b04 cmp r3, #4 -10027486: d80f bhi.n 100274a8 -10027488: e8df f003 tbb [pc, r3] -1002748c: 0a030a0a .word 0x0a030a0a -10027490: 0a .byte 0x0a -10027491: 00 .byte 0x00 -10027492: f894 3048 ldrb.w r3, [r4, #72] ; 0x48 -10027496: 07db lsls r3, r3, #31 -10027498: d52e bpl.n 100274f8 -1002749a: f8d6 3d64 ldr.w r3, [r6, #3428] ; 0xd64 -1002749e: e001 b.n 100274a4 -100274a0: f8d6 3d0c ldr.w r3, [r6, #3340] ; 0xd0c -100274a4: f884 302f strb.w r3, [r4, #47] ; 0x2f -100274a8: f894 302f ldrb.w r3, [r4, #47] ; 0x2f -100274ac: 3b01 subs r3, #1 -100274ae: 2b05 cmp r3, #5 -100274b0: d812 bhi.n 100274d8 -100274b2: e8df f003 tbb [pc, r3] -100274b6: 0503 .short 0x0503 -100274b8: 0c030a11 .word 0x0c030a11 -100274bc: 2304 movs r3, #4 -100274be: e00c b.n 100274da -100274c0: 2308 movs r3, #8 -100274c2: f884 3030 strb.w r3, [r4, #48] ; 0x30 -100274c6: 2304 movs r3, #4 -100274c8: e009 b.n 100274de -100274ca: 2308 movs r3, #8 -100274cc: e005 b.n 100274da -100274ce: 2312 movs r3, #18 -100274d0: f884 3030 strb.w r3, [r4, #48] ; 0x30 -100274d4: 2310 movs r3, #16 -100274d6: e002 b.n 100274de -100274d8: 2300 movs r3, #0 -100274da: f884 3030 strb.w r3, [r4, #48] ; 0x30 -100274de: f884 3031 strb.w r3, [r4, #49] ; 0x31 -100274e2: e005 b.n 100274f0 -100274e4: f884 302f strb.w r3, [r4, #47] ; 0x2f -100274e8: f884 3031 strb.w r3, [r4, #49] ; 0x31 -100274ec: f884 3030 strb.w r3, [r4, #48] ; 0x30 -100274f0: 2001 movs r0, #1 -100274f2: e005 b.n 10027500 -100274f4: 2000 movs r0, #0 -100274f6: e003 b.n 10027500 -100274f8: 9b01 ldr r3, [sp, #4] -100274fa: f8d3 3114 ldr.w r3, [r3, #276] ; 0x114 -100274fe: e7d1 b.n 100274a4 -10027500: b002 add sp, #8 -10027502: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - ... - -10027508 : -10027508: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -1002750c: f890 302f ldrb.w r3, [r0, #47] ; 0x2f -10027510: 4604 mov r4, r0 -10027512: f8d0 8010 ldr.w r8, [r0, #16] -10027516: 6f87 ldr r7, [r0, #120] ; 0x78 -10027518: b11b cbz r3, 10027522 -1002751a: f890 1031 ldrb.w r1, [r0, #49] ; 0x31 -1002751e: f7ff f8ef bl 10026700 -10027522: f894 6030 ldrb.w r6, [r4, #48] ; 0x30 -10027526: f894 3021 ldrb.w r3, [r4, #33] ; 0x21 -1002752a: 4942 ldr r1, [pc, #264] ; (10027634 ) -1002752c: 441e add r6, r3 -1002752e: 19bd adds r5, r7, r6 -10027530: 4628 mov r0, r5 -10027532: 2206 movs r2, #6 -10027534: f7ef ff74 bl 10017420 -10027538: b940 cbnz r0, 1002754c -1002753a: 4628 mov r0, r5 -1002753c: 493e ldr r1, [pc, #248] ; (10027638 ) -1002753e: 2206 movs r2, #6 -10027540: f7ef ff6e bl 10017420 -10027544: 1c05 adds r5, r0, #0 -10027546: bf18 it ne -10027548: 2501 movne r5, #1 -1002754a: e010 b.n 1002756e -1002754c: 3606 adds r6, #6 -1002754e: 443e add r6, r7 -10027550: 4630 mov r0, r6 -10027552: 493a ldr r1, [pc, #232] ; (1002763c ) -10027554: 2202 movs r2, #2 -10027556: f7ef ff63 bl 10017420 -1002755a: 2800 cmp r0, #0 -1002755c: d1ed bne.n 1002753a -1002755e: 4630 mov r0, r6 -10027560: 4937 ldr r1, [pc, #220] ; (10027640 ) -10027562: 2202 movs r2, #2 -10027564: f7ef ff5c bl 10017420 -10027568: 2800 cmp r0, #0 -1002756a: d1e6 bne.n 1002753a -1002756c: 2501 movs r5, #1 -1002756e: f898 3c44 ldrb.w r3, [r8, #3140] ; 0xc44 -10027572: f894 6021 ldrb.w r6, [r4, #33] ; 0x21 -10027576: 2b00 cmp r3, #0 -10027578: bf18 it ne -1002757a: 2501 movne r5, #1 -1002757c: f894 3030 ldrb.w r3, [r4, #48] ; 0x30 -10027580: 2d00 cmp r5, #0 -10027582: 441e add r6, r3 -10027584: bf0c ite eq -10027586: 2300 moveq r3, #0 -10027588: 2306 movne r3, #6 -1002758a: 441e add r6, r3 -1002758c: 6f23 ldr r3, [r4, #112] ; 0x70 -1002758e: eb07 0906 add.w r9, r7, r6 -10027592: 1b9b subs r3, r3, r6 -10027594: a801 add r0, sp, #4 -10027596: 4649 mov r1, r9 -10027598: 2202 movs r2, #2 -1002759a: f8ad 3006 strh.w r3, [sp, #6] -1002759e: f7ef ff37 bl 10017410 -100275a2: f8bd 0004 ldrh.w r0, [sp, #4] -100275a6: f7ef feed bl 10017384 <_htons> -100275aa: 86a0 strh r0, [r4, #52] ; 0x34 -100275ac: f8d8 3010 ldr.w r3, [r8, #16] -100275b0: f8ad 0004 strh.w r0, [sp, #4] -100275b4: 03db lsls r3, r3, #15 -100275b6: d424 bmi.n 10027602 -100275b8: 2d00 cmp r5, #0 -100275ba: bf14 ite ne -100275bc: 2302 movne r3, #2 -100275be: 2300 moveq r3, #0 -100275c0: f1a6 010e sub.w r1, r6, #14 -100275c4: 4620 mov r0, r4 -100275c6: 4419 add r1, r3 -100275c8: f7ff f889 bl 100266de -100275cc: 4606 mov r6, r0 -100275ce: 4630 mov r0, r6 -100275d0: f104 0136 add.w r1, r4, #54 ; 0x36 -100275d4: 2206 movs r2, #6 -100275d6: f7ef ff1b bl 10017410 -100275da: 1db0 adds r0, r6, #6 -100275dc: f104 013c add.w r1, r4, #60 ; 0x3c -100275e0: 2206 movs r2, #6 -100275e2: f7ef ff15 bl 10017410 -100275e6: bb0d cbnz r5, 1002762c -100275e8: f8bd 0006 ldrh.w r0, [sp, #6] -100275ec: f7ef feca bl 10017384 <_htons> -100275f0: a902 add r1, sp, #8 -100275f2: f821 0d02 strh.w r0, [r1, #-2]! -100275f6: 2202 movs r2, #2 -100275f8: f106 000c add.w r0, r6, #12 -100275fc: f7ef ff08 bl 10017410 -10027600: e014 b.n 1002762c -10027602: 2387 movs r3, #135 ; 0x87 -10027604: 55bb strb r3, [r7, r6] -10027606: 2312 movs r3, #18 -10027608: f889 3001 strb.w r3, [r9, #1] -1002760c: f1a6 0124 sub.w r1, r6, #36 ; 0x24 -10027610: f248 7312 movw r3, #34578 ; 0x8712 -10027614: 4620 mov r0, r4 -10027616: f8ad 3004 strh.w r3, [sp, #4] -1002761a: f7ff f860 bl 100266de -1002761e: 6f61 ldr r1, [r4, #116] ; 0x74 -10027620: 4606 mov r6, r0 -10027622: 2218 movs r2, #24 -10027624: f7ef fef4 bl 10017410 -10027628: 3618 adds r6, #24 -1002762a: e7d0 b.n 100275ce -1002762c: 2001 movs r0, #1 -1002762e: b003 add sp, #12 -10027630: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -10027634: 10041684 .word 0x10041684 -10027638: 1004165d .word 0x1004165d -1002763c: 1004165b .word 0x1004165b -10027640: 10041659 .word 0x10041659 - -10027644 : -10027644: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10027648: 680c ldr r4, [r1, #0] -1002764a: f600 3754 addw r7, r0, #2900 ; 0xb54 -1002764e: 4620 mov r0, r4 -10027650: 460e mov r6, r1 -10027652: f7ef ff09 bl 10017468 -10027656: f894 302a ldrb.w r3, [r4, #42] ; 0x2a -1002765a: b153 cbz r3, 10027672 -1002765c: 4639 mov r1, r7 -1002765e: 4620 mov r0, r4 -10027660: f7ff f958 bl 10026914 -10027664: 4630 mov r0, r6 -10027666: 4639 mov r1, r7 -10027668: f7ff f9d1 bl 10026a0e -1002766c: 2000 movs r0, #0 -1002766e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -10027672: 6835 ldr r5, [r6, #0] -10027674: f04f 0801 mov.w r8, #1 -10027678: 4630 mov r0, r6 -1002767a: 4629 mov r1, r5 -1002767c: f7ef ff81 bl 10017582 -10027680: bb70 cbnz r0, 100276e0 -10027682: f895 302a ldrb.w r3, [r5, #42] ; 0x2a -10027686: 4543 cmp r3, r8 -10027688: d1e8 bne.n 1002765c -1002768a: f895 3021 ldrb.w r3, [r5, #33] ; 0x21 -1002768e: f895 1030 ldrb.w r1, [r5, #48] ; 0x30 -10027692: 4628 mov r0, r5 -10027694: 4419 add r1, r3 -10027696: b2c9 uxtb r1, r1 -10027698: f7ff f821 bl 100266de -1002769c: f894 1031 ldrb.w r1, [r4, #49] ; 0x31 -100276a0: 4620 mov r0, r4 -100276a2: f7ff f82d bl 10026700 -100276a6: 6fa9 ldr r1, [r5, #120] ; 0x78 -100276a8: 6f2a ldr r2, [r5, #112] ; 0x70 -100276aa: 6fe0 ldr r0, [r4, #124] ; 0x7c -100276ac: f7ef feb0 bl 10017410 -100276b0: 6f2b ldr r3, [r5, #112] ; 0x70 -100276b2: 6fe2 ldr r2, [r4, #124] ; 0x7c -100276b4: f8d4 1080 ldr.w r1, [r4, #128] ; 0x80 -100276b8: 441a add r2, r3 -100276ba: f108 0801 add.w r8, r8, #1 -100276be: 428a cmp r2, r1 -100276c0: fa5f f888 uxtb.w r8, r8 -100276c4: 67e2 str r2, [r4, #124] ; 0x7c -100276c6: d902 bls.n 100276ce -100276c8: 1ad3 subs r3, r2, r3 -100276ca: 67e3 str r3, [r4, #124] ; 0x7c -100276cc: e002 b.n 100276d4 -100276ce: 6f22 ldr r2, [r4, #112] ; 0x70 -100276d0: 4413 add r3, r2 -100276d2: 6723 str r3, [r4, #112] ; 0x70 -100276d4: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 -100276d8: f884 3031 strb.w r3, [r4, #49] ; 0x31 -100276dc: 682d ldr r5, [r5, #0] -100276de: e7cb b.n 10027678 -100276e0: 4630 mov r0, r6 -100276e2: 4639 mov r1, r7 -100276e4: f7ff f993 bl 10026a0e -100276e8: 4620 mov r0, r4 -100276ea: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - -100276ee : -100276ee: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -100276f2: 4606 mov r6, r0 -100276f4: 460c mov r4, r1 -100276f6: f600 3754 addw r7, r0, #2900 ; 0xb54 -100276fa: f891 902b ldrb.w r9, [r1, #43] ; 0x2b -100276fe: f891 802a ldrb.w r8, [r1, #42] ; 0x2a -10027702: f500 6046 add.w r0, r0, #3168 ; 0xc60 -10027706: 3142 adds r1, #66 ; 0x42 -10027708: f000 fdc4 bl 10028294 -1002770c: b940 cbnz r0, 10027720 -1002770e: 6fa3 ldr r3, [r4, #120] ; 0x78 -10027710: 781b ldrb r3, [r3, #0] -10027712: f003 030c and.w r3, r3, #12 -10027716: 2b08 cmp r3, #8 -10027718: d005 beq.n 10027726 -1002771a: 4630 mov r0, r6 -1002771c: f000 fe10 bl 10028340 -10027720: f100 05bc add.w r5, r0, #188 ; 0xbc -10027724: e000 b.n 10027728 -10027726: 4605 mov r5, r0 -10027728: f1b9 0f00 cmp.w r9, #0 -1002772c: d103 bne.n 10027736 -1002772e: f1b8 0f00 cmp.w r8, #0 -10027732: d023 beq.n 1002777c -10027734: e018 b.n 10027768 -10027736: f1b9 0f01 cmp.w r9, #1 -1002773a: d12f bne.n 1002779c -1002773c: b17d cbz r5, 1002775e -1002773e: f1b8 0f00 cmp.w r8, #0 -10027742: d107 bne.n 10027754 -10027744: 4628 mov r0, r5 -10027746: f7ef ff17 bl 10017578 -1002774a: b918 cbnz r0, 10027754 -1002774c: 4628 mov r0, r5 -1002774e: 4639 mov r1, r7 -10027750: f7ff f95d bl 10026a0e -10027754: 4620 mov r0, r4 -10027756: 4629 mov r1, r5 -10027758: f7ef fe80 bl 1001745c -1002775c: e01e b.n 1002779c -1002775e: 4620 mov r0, r4 -10027760: 4639 mov r1, r7 -10027762: f7ff f8d7 bl 10026914 -10027766: e019 b.n 1002779c -10027768: b195 cbz r5, 10027790 -1002776a: 4620 mov r0, r4 -1002776c: 4629 mov r1, r5 -1002776e: f7ef fe75 bl 1001745c -10027772: 4630 mov r0, r6 -10027774: 4629 mov r1, r5 -10027776: f7ff ff65 bl 10027644 -1002777a: 4604 mov r4, r0 -1002777c: b17c cbz r4, 1002779e -1002777e: f894 302d ldrb.w r3, [r4, #45] ; 0x2d -10027782: b163 cbz r3, 1002779e -10027784: 4630 mov r0, r6 -10027786: 4621 mov r1, r4 -10027788: f7ff f98b bl 10026aa2 -1002778c: 4605 mov r5, r0 -1002778e: b930 cbnz r0, 1002779e -10027790: 4620 mov r0, r4 -10027792: 4639 mov r1, r7 -10027794: f7ff f8be bl 10026914 -10027798: 462c mov r4, r5 -1002779a: e000 b.n 1002779e -1002779c: 2400 movs r4, #0 -1002779e: 4620 mov r0, r4 -100277a0: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - -100277a4 : -100277a4: b570 push {r4, r5, r6, lr} -100277a6: 680e ldr r6, [r1, #0] -100277a8: 460d mov r5, r1 -100277aa: 6fb1 ldr r1, [r6, #120] ; 0x78 -100277ac: 4604 mov r4, r0 -100277ae: 310a adds r1, #10 -100277b0: f500 6046 add.w r0, r0, #3168 ; 0xc60 -100277b4: f000 fd6e bl 10028294 -100277b8: b130 cbz r0, 100277c8 -100277ba: e9f0 2360 ldrd r2, r3, [r0, #384]! ; 0x180 -100277be: 3201 adds r2, #1 -100277c0: f143 0300 adc.w r3, r3, #0 -100277c4: e9c0 2300 strd r2, r3, [r0] -100277c8: 4631 mov r1, r6 -100277ca: 4620 mov r0, r4 -100277cc: f7ff ff8f bl 100276ee -100277d0: 4601 mov r1, r0 -100277d2: 6028 str r0, [r5, #0] -100277d4: b110 cbz r0, 100277dc -100277d6: 4620 mov r0, r4 -100277d8: f7f7 fa10 bl 1001ebfc -100277dc: 2001 movs r0, #1 -100277de: bd70 pop {r4, r5, r6, pc} - -100277e0 : -100277e0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -100277e4: 680b ldr r3, [r1, #0] -100277e6: 4680 mov r8, r0 -100277e8: 6f9a ldr r2, [r3, #120] ; 0x78 -100277ea: 7817 ldrb r7, [r2, #0] -100277ec: f017 0703 ands.w r7, r7, #3 -100277f0: d154 bne.n 1002789c -100277f2: 8816 ldrh r6, [r2, #0] -100277f4: f416 7f80 tst.w r6, #256 ; 0x100 -100277f8: fa5f fc86 uxtb.w ip, r6 -100277fc: bf0c ite eq -100277fe: f04f 0900 moveq.w r9, #0 -10027802: f04f 0902 movne.w r9, #2 -10027806: f3c6 2640 ubfx r6, r6, #9, #1 -1002780a: ea49 0606 orr.w r6, r9, r6 -1002780e: f883 6022 strb.w r6, [r3, #34] ; 0x22 -10027812: 7d96 ldrb r6, [r2, #22] -10027814: f00c 040c and.w r4, ip, #12 -10027818: f006 060f and.w r6, r6, #15 -1002781c: f883 602a strb.w r6, [r3, #42] ; 0x2a -10027820: 8ad6 ldrh r6, [r2, #22] -10027822: 2c04 cmp r4, #4 -10027824: ea4f 1616 mov.w r6, r6, lsr #4 -10027828: 851e strh r6, [r3, #40] ; 0x28 -1002782a: 8816 ldrh r6, [r2, #0] -1002782c: f3c6 3600 ubfx r6, r6, #12, #1 -10027830: f883 6026 strb.w r6, [r3, #38] ; 0x26 -10027834: 8816 ldrh r6, [r2, #0] -10027836: f3c6 2680 ubfx r6, r6, #10, #1 -1002783a: f883 602b strb.w r6, [r3, #43] ; 0x2b -1002783e: 8816 ldrh r6, [r2, #0] -10027840: f3c6 3640 ubfx r6, r6, #13, #1 -10027844: f883 6027 strb.w r6, [r3, #39] ; 0x27 -10027848: 8816 ldrh r6, [r2, #0] -1002784a: f3c6 3680 ubfx r6, r6, #14, #1 -1002784e: f883 602d strb.w r6, [r3, #45] ; 0x2d -10027852: 8812 ldrh r2, [r2, #0] -10027854: ea4f 32d2 mov.w r2, r2, lsr #15 -10027858: f883 202c strb.w r2, [r3, #44] ; 0x2c -1002785c: d007 beq.n 1002786e -1002785e: 2c08 cmp r4, #8 -10027860: d009 beq.n 10027876 -10027862: b9f4 cbnz r4, 100278a2 -10027864: f7ff ff9e bl 100277a4 -10027868: 4620 mov r0, r4 -1002786a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1002786e: 6809 ldr r1, [r1, #0] -10027870: f7ff fc50 bl 10027114 -10027874: e015 b.n 100278a2 -10027876: ea4f 1cdc mov.w ip, ip, lsr #7 -1002787a: f883 c024 strb.w ip, [r3, #36] ; 0x24 -1002787e: 6809 ldr r1, [r1, #0] -10027880: f7ff fd15 bl 100272ae -10027884: b970 cbnz r0, 100278a4 -10027886: f508 6135 add.w r1, r8, #2896 ; 0xb50 -1002788a: e9d1 2314 ldrd r2, r3, [r1, #80] ; 0x50 -1002788e: 3201 adds r2, #1 -10027890: f143 0300 adc.w r3, r3, #0 -10027894: e9c1 2314 strd r2, r3, [r1, #80] ; 0x50 -10027898: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1002789c: 2000 movs r0, #0 -1002789e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -100278a2: 4638 mov r0, r7 -100278a4: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - -100278a8 : -100278a8: b538 push {r3, r4, r5, lr} -100278aa: f891 3023 ldrb.w r3, [r1, #35] ; 0x23 -100278ae: 4605 mov r5, r0 -100278b0: 460c mov r4, r1 -100278b2: b943 cbnz r3, 100278c6 -100278b4: 4608 mov r0, r1 -100278b6: f7ff fe27 bl 10027508 -100278ba: 4628 mov r0, r5 -100278bc: 4621 mov r1, r4 -100278be: f00e fd2d bl 1003631c -100278c2: 2001 movs r0, #1 -100278c4: bd38 pop {r3, r4, r5, pc} -100278c6: 2000 movs r0, #0 -100278c8: bd38 pop {r3, r4, r5, pc} - -100278ca : -100278ca: b570 push {r4, r5, r6, lr} -100278cc: f8d0 5454 ldr.w r5, [r0, #1108] ; 0x454 -100278d0: 4604 mov r4, r0 -100278d2: 2d01 cmp r5, #1 -100278d4: 460e mov r6, r1 -100278d6: d10e bne.n 100278f6 -100278d8: f7ff ffe6 bl 100278a8 -100278dc: 2801 cmp r0, #1 -100278de: d01f beq.n 10027920 -100278e0: f241 73ac movw r3, #6060 ; 0x17ac -100278e4: 58e3 ldr r3, [r4, r3] -100278e6: b9c3 cbnz r3, 1002791a -100278e8: f241 73b0 movw r3, #6064 ; 0x17b0 -100278ec: 58e0 ldr r0, [r4, r3] -100278ee: 3000 adds r0, #0 -100278f0: bf18 it ne -100278f2: 2001 movne r0, #1 -100278f4: bd70 pop {r4, r5, r6, pc} -100278f6: 4608 mov r0, r1 -100278f8: f7ff fe06 bl 10027508 -100278fc: 2801 cmp r0, #1 -100278fe: 4605 mov r5, r0 -10027900: d10b bne.n 1002791a -10027902: f241 73ac movw r3, #6060 ; 0x17ac -10027906: 58e0 ldr r0, [r4, r3] -10027908: b948 cbnz r0, 1002791e -1002790a: f241 73b0 movw r3, #6064 ; 0x17b0 -1002790e: 58e3 ldr r3, [r4, r3] -10027910: b933 cbnz r3, 10027920 -10027912: 4620 mov r0, r4 -10027914: 4631 mov r1, r6 -10027916: f00e fd01 bl 1003631c -1002791a: 4628 mov r0, r5 -1002791c: bd70 pop {r4, r5, r6, pc} -1002791e: 2000 movs r0, #0 -10027920: bd70 pop {r4, r5, r6, pc} - -10027922 : -10027922: b537 push {r0, r1, r2, r4, r5, lr} -10027924: ab02 add r3, sp, #8 -10027926: f843 1d04 str.w r1, [r3, #-4]! -1002792a: 4619 mov r1, r3 -1002792c: 4605 mov r5, r0 -1002792e: f7ff ff57 bl 100277e0 -10027932: 2801 cmp r0, #1 -10027934: 4604 mov r4, r0 -10027936: d005 beq.n 10027944 -10027938: 9801 ldr r0, [sp, #4] -1002793a: b118 cbz r0, 10027944 -1002793c: f605 3154 addw r1, r5, #2900 ; 0xb54 -10027940: f7fe ffe8 bl 10026914 -10027944: 4620 mov r0, r4 -10027946: b003 add sp, #12 -10027948: bd30 pop {r4, r5, pc} - -1002794a : -1002794a: b570 push {r4, r5, r6, lr} -1002794c: 460e mov r6, r1 -1002794e: 4604 mov r4, r0 -10027950: f7ff f927 bl 10026ba2 -10027954: 4601 mov r1, r0 -10027956: b908 cbnz r0, 1002795c -10027958: 2500 movs r5, #0 -1002795a: e01d b.n 10027998 -1002795c: 4620 mov r0, r4 -1002795e: f7ff fec6 bl 100276ee -10027962: 4601 mov r1, r0 -10027964: b1b8 cbz r0, 10027996 -10027966: 4620 mov r0, r4 -10027968: f7ff f96d bl 10026c46 -1002796c: 4605 mov r5, r0 -1002796e: 2800 cmp r0, #0 -10027970: d0f2 beq.n 10027958 -10027972: 4629 mov r1, r5 -10027974: 4620 mov r0, r4 -10027976: 2200 movs r2, #0 -10027978: f7ff fa1b bl 10026db2 -1002797c: 4629 mov r1, r5 -1002797e: 4620 mov r0, r4 -10027980: f7ff ffa3 bl 100278ca -10027984: 2801 cmp r0, #1 -10027986: 4605 mov r5, r0 -10027988: d006 beq.n 10027998 -1002798a: 4630 mov r0, r6 -1002798c: f604 3154 addw r1, r4, #2900 ; 0xb54 -10027990: f7fe ffc0 bl 10026914 -10027994: e000 b.n 10027998 -10027996: 2501 movs r5, #1 -10027998: f504 6435 add.w r4, r4, #2896 ; 0xb50 -1002799c: e9d4 2314 ldrd r2, r3, [r4, #80] ; 0x50 -100279a0: 3201 adds r2, #1 -100279a2: f143 0300 adc.w r3, r3, #0 -100279a6: e9c4 2314 strd r2, r3, [r4, #80] ; 0x50 -100279aa: 4628 mov r0, r5 -100279ac: bd70 pop {r4, r5, r6, pc} - -100279ae : -100279ae: b570 push {r4, r5, r6, lr} -100279b0: 6903 ldr r3, [r0, #16] -100279b2: 460d mov r5, r1 -100279b4: 0719 lsls r1, r3, #28 -100279b6: 4604 mov r4, r0 -100279b8: d41e bmi.n 100279f8 -100279ba: 4620 mov r0, r4 -100279bc: 4629 mov r1, r5 -100279be: f7ff ffb0 bl 10027922 -100279c2: 2801 cmp r0, #1 -100279c4: 4606 mov r6, r0 -100279c6: d138 bne.n 10027a3a -100279c8: 6923 ldr r3, [r4, #16] -100279ca: 071a lsls r2, r3, #28 -100279cc: d50e bpl.n 100279ec -100279ce: f895 3048 ldrb.w r3, [r5, #72] ; 0x48 -100279d2: 07db lsls r3, r3, #31 -100279d4: d40a bmi.n 100279ec -100279d6: f895 302f ldrb.w r3, [r5, #47] ; 0x2f -100279da: b13b cbz r3, 100279ec -100279dc: f895 302e ldrb.w r3, [r5, #46] ; 0x2e -100279e0: b1db cbz r3, 10027a1a -100279e2: f241 0364 movw r3, #4196 ; 0x1064 -100279e6: 58e3 ldr r3, [r4, r3] -100279e8: 2b01 cmp r3, #1 -100279ea: d016 beq.n 10027a1a -100279ec: 4620 mov r0, r4 -100279ee: 4629 mov r1, r5 -100279f0: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -100279f4: f7ff bfa9 b.w 1002794a -100279f8: f241 035d movw r3, #4189 ; 0x105d -100279fc: 5cc3 ldrb r3, [r0, r3] -100279fe: 2b00 cmp r3, #0 -10027a00: d0db beq.n 100279ba -10027a02: f604 366c addw r6, r4, #2924 ; 0xb6c -10027a06: 4630 mov r0, r6 -10027a08: f7fe ff71 bl 100268ee -10027a0c: 4601 mov r1, r0 -10027a0e: 2800 cmp r0, #0 -10027a10: d0d3 beq.n 100279ba -10027a12: 4620 mov r0, r4 -10027a14: f7ff ff99 bl 1002794a -10027a18: e7f5 b.n 10027a06 -10027a1a: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c -10027a1e: f023 0304 bic.w r3, r3, #4 -10027a22: 2b01 cmp r3, #1 -10027a24: d0e2 beq.n 100279ec -10027a26: f241 035d movw r3, #4189 ; 0x105d -10027a2a: 5ce3 ldrb r3, [r4, r3] -10027a2c: 2b00 cmp r3, #0 -10027a2e: d1dd bne.n 100279ec -10027a30: 4628 mov r0, r5 -10027a32: f604 316c addw r1, r4, #2924 ; 0xb6c -10027a36: f7fe ffd5 bl 100269e4 -10027a3a: 4630 mov r0, r6 -10027a3c: bd70 pop {r4, r5, r6, pc} - -10027a3e : -10027a3e: b510 push {r4, lr} -10027a40: 6904 ldr r4, [r0, #16] -10027a42: 4601 mov r1, r0 -10027a44: f894 3c44 ldrb.w r3, [r4, #3140] ; 0xc44 -10027a48: 4620 mov r0, r4 -10027a4a: b11b cbz r3, 10027a54 -10027a4c: e8bd 4010 ldmia.w sp!, {r4, lr} -10027a50: f7e5 be04 b.w 1000d65c -10027a54: f7ff ffab bl 100279ae -10027a58: b140 cbz r0, 10027a6c -10027a5a: f504 6435 add.w r4, r4, #2896 ; 0xb50 -10027a5e: e9d4 2312 ldrd r2, r3, [r4, #72] ; 0x48 -10027a62: 3201 adds r2, #1 -10027a64: f143 0300 adc.w r3, r3, #0 -10027a68: e9c4 2312 strd r2, r3, [r4, #72] ; 0x48 -10027a6c: bd10 pop {r4, pc} - ... - -10027a70 : -10027a70: b510 push {r4, lr} -10027a72: 4604 mov r4, r0 -10027a74: 4813 ldr r0, [pc, #76] ; (10027ac4 ) -10027a76: f7ef ff1d bl 100178b4 -10027a7a: f504 50c0 add.w r0, r4, #6144 ; 0x1800 -10027a7e: 3004 adds r0, #4 -10027a80: f7ef fd22 bl 100174c8 -10027a84: b1a0 cbz r0, 10027ab0 -10027a86: f504 53c0 add.w r3, r4, #6144 ; 0x1800 -10027a8a: 330c adds r3, #12 -10027a8c: 681b ldr r3, [r3, #0] -10027a8e: b97b cbnz r3, 10027ab0 -10027a90: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -10027a94: 330c adds r3, #12 -10027a96: 681b ldr r3, [r3, #0] -10027a98: 2b01 cmp r3, #1 -10027a9a: d009 beq.n 10027ab0 -10027a9c: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -10027aa0: 3310 adds r3, #16 -10027aa2: 681b ldr r3, [r3, #0] -10027aa4: 2b01 cmp r3, #1 -10027aa6: d003 beq.n 10027ab0 -10027aa8: 4620 mov r0, r4 -10027aaa: f003 fc09 bl 1002b2c0 -10027aae: e7e4 b.n 10027a7a -10027ab0: f504 50c0 add.w r0, r4, #6144 ; 0x1800 -10027ab4: 3008 adds r0, #8 -10027ab6: f7ef fcef bl 10017498 -10027aba: e8bd 4010 ldmia.w sp!, {r4, lr} -10027abe: f7ef bf01 b.w 100178c4 -10027ac2: bf00 nop -10027ac4: 10041673 .word 0x10041673 - -10027ac8 : -10027ac8: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -10027aca: f8d1 5080 ldr.w r5, [r1, #128] ; 0x80 -10027ace: b1e5 cbz r5, 10027b0a -10027ad0: 7f0b ldrb r3, [r1, #28] -10027ad2: f003 03fb and.w r3, r3, #251 ; 0xfb -10027ad6: 2b01 cmp r3, #1 -10027ad8: d117 bne.n 10027b0a -10027ada: f8d0 6d10 ldr.w r6, [r0, #3344] ; 0xd10 -10027ade: 8a4c ldrh r4, [r1, #18] -10027ae0: 7f4a ldrb r2, [r1, #29] -10027ae2: 698b ldr r3, [r1, #24] -10027ae4: 7f8f ldrb r7, [r1, #30] -10027ae6: eb00 1106 add.w r1, r0, r6, lsl #4 -10027aea: f601 5114 addw r1, r1, #3348 ; 0xd14 -10027aee: eb00 0086 add.w r0, r0, r6, lsl #2 -10027af2: 9100 str r1, [sp, #0] -10027af4: f8d0 1d54 ldr.w r1, [r0, #3412] ; 0xd54 -10027af8: 1b1b subs r3, r3, r4 -10027afa: 1a9b subs r3, r3, r2 -10027afc: 9101 str r1, [sp, #4] -10027afe: f105 0028 add.w r0, r5, #40 ; 0x28 -10027b02: 4621 mov r1, r4 -10027b04: 1bdb subs r3, r3, r7 -10027b06: f016 fea3 bl 1003e850 <__wep_80211_encrypt_veneer> -10027b0a: b003 add sp, #12 -10027b0c: bdf0 pop {r4, r5, r6, r7, pc} - -10027b0e : -10027b0e: b570 push {r4, r5, r6, lr} -10027b10: f891 302f ldrb.w r3, [r1, #47] ; 0x2f -10027b14: b086 sub sp, #24 -10027b16: f003 03fb and.w r3, r3, #251 ; 0xfb -10027b1a: 2b01 cmp r3, #1 -10027b1c: d118 bne.n 10027b50 -10027b1e: f891 5058 ldrb.w r5, [r1, #88] ; 0x58 -10027b22: f891 4021 ldrb.w r4, [r1, #33] ; 0x21 -10027b26: eb00 1605 add.w r6, r0, r5, lsl #4 -10027b2a: f606 5614 addw r6, r6, #3348 ; 0xd14 -10027b2e: f891 2030 ldrb.w r2, [r1, #48] ; 0x30 -10027b32: 6f0b ldr r3, [r1, #112] ; 0x70 -10027b34: eb00 0085 add.w r0, r0, r5, lsl #2 -10027b38: 9600 str r6, [sp, #0] -10027b3a: f8d0 0d54 ldr.w r0, [r0, #3412] ; 0xd54 -10027b3e: 1b1b subs r3, r3, r4 -10027b40: 9001 str r0, [sp, #4] -10027b42: a805 add r0, sp, #20 -10027b44: 9002 str r0, [sp, #8] -10027b46: 6f88 ldr r0, [r1, #120] ; 0x78 -10027b48: 1a9b subs r3, r3, r2 -10027b4a: 4621 mov r1, r4 -10027b4c: f016 feec bl 1003e928 <__wep_80211_decrypt_veneer> -10027b50: b006 add sp, #24 -10027b52: bd70 pop {r4, r5, r6, pc} - -10027b54 : -10027b54: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -10027b56: f8d1 3080 ldr.w r3, [r1, #128] ; 0x80 -10027b5a: 4605 mov r5, r0 -10027b5c: 460c mov r4, r1 -10027b5e: b90b cbnz r3, 10027b64 -10027b60: 2000 movs r0, #0 -10027b62: e02b b.n 10027bbc -10027b64: 7f0b ldrb r3, [r1, #28] -10027b66: 2b02 cmp r3, #2 -10027b68: d1fa bne.n 10027b60 -10027b6a: 6f08 ldr r0, [r1, #112] ; 0x70 -10027b6c: b920 cbnz r0, 10027b78 -10027b6e: f505 6046 add.w r0, r5, #3168 ; 0xc60 -10027b72: 3157 adds r1, #87 ; 0x57 -10027b74: f000 fb8e bl 10028294 -10027b78: f894 2057 ldrb.w r2, [r4, #87] ; 0x57 -10027b7c: 07d3 lsls r3, r2, #31 -10027b7e: d51a bpl.n 10027bb6 -10027b80: f8d5 2d68 ldr.w r2, [r5, #3432] ; 0xd68 -10027b84: eb05 1502 add.w r5, r5, r2, lsl #4 -10027b88: f605 556c addw r5, r5, #3436 ; 0xd6c -10027b8c: 2800 cmp r0, #0 -10027b8e: d0e7 beq.n 10027b60 -10027b90: 8a61 ldrh r1, [r4, #18] -10027b92: 69a3 ldr r3, [r4, #24] -10027b94: 7f62 ldrb r2, [r4, #29] -10027b96: f8d4 0080 ldr.w r0, [r4, #128] ; 0x80 -10027b9a: 7fa6 ldrb r6, [r4, #30] -10027b9c: 1a5b subs r3, r3, r1 -10027b9e: 1a9b subs r3, r3, r2 -10027ba0: 9500 str r5, [sp, #0] -10027ba2: 3451 adds r4, #81 ; 0x51 -10027ba4: 2510 movs r5, #16 -10027ba6: 3028 adds r0, #40 ; 0x28 -10027ba8: 9501 str r5, [sp, #4] -10027baa: 9402 str r4, [sp, #8] -10027bac: 1b9b subs r3, r3, r6 -10027bae: f016 feb3 bl 1003e918 <__tkip_80211_encrypt_veneer> -10027bb2: 2001 movs r0, #1 -10027bb4: e002 b.n 10027bbc -10027bb6: f500 759c add.w r5, r0, #312 ; 0x138 -10027bba: e7e7 b.n 10027b8c -10027bbc: b004 add sp, #16 -10027bbe: bd70 pop {r4, r5, r6, pc} - -10027bc0 : -10027bc0: b570 push {r4, r5, r6, lr} -10027bc2: f891 302f ldrb.w r3, [r1, #47] ; 0x2f -10027bc6: b086 sub sp, #24 -10027bc8: 2b02 cmp r3, #2 -10027bca: 4605 mov r5, r0 -10027bcc: 460c mov r4, r1 -10027bce: d001 beq.n 10027bd4 -10027bd0: 2000 movs r0, #0 -10027bd2: e02a b.n 10027c2a -10027bd4: f101 0642 add.w r6, r1, #66 ; 0x42 -10027bd8: f500 6046 add.w r0, r0, #3168 ; 0xc60 -10027bdc: 4631 mov r1, r6 -10027bde: f000 fb59 bl 10028294 -10027be2: b310 cbz r0, 10027c2a -10027be4: f894 3048 ldrb.w r3, [r4, #72] ; 0x48 -10027be8: 07db lsls r3, r3, #31 -10027bea: d51b bpl.n 10027c24 -10027bec: f241 035c movw r3, #4188 ; 0x105c -10027bf0: 5ceb ldrb r3, [r5, r3] -10027bf2: 2b00 cmp r3, #0 -10027bf4: d0ec beq.n 10027bd0 -10027bf6: f894 0058 ldrb.w r0, [r4, #88] ; 0x58 -10027bfa: eb05 1000 add.w r0, r5, r0, lsl #4 -10027bfe: f600 506c addw r0, r0, #3436 ; 0xd6c -10027c02: f894 1021 ldrb.w r1, [r4, #33] ; 0x21 -10027c06: 6f23 ldr r3, [r4, #112] ; 0x70 -10027c08: f894 2030 ldrb.w r2, [r4, #48] ; 0x30 -10027c0c: 9000 str r0, [sp, #0] -10027c0e: 2010 movs r0, #16 -10027c10: 1a5b subs r3, r3, r1 -10027c12: 9001 str r0, [sp, #4] -10027c14: a805 add r0, sp, #20 -10027c16: 9003 str r0, [sp, #12] -10027c18: 9602 str r6, [sp, #8] -10027c1a: 6fa0 ldr r0, [r4, #120] ; 0x78 -10027c1c: 1a9b subs r3, r3, r2 -10027c1e: f016 fea7 bl 1003e970 <__tkip_80211_decrypt_veneer> -10027c22: e002 b.n 10027c2a -10027c24: f500 709c add.w r0, r0, #312 ; 0x138 -10027c28: e7eb b.n 10027c02 -10027c2a: b006 add sp, #24 -10027c2c: bd70 pop {r4, r5, r6, pc} - -10027c2e : -10027c2e: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -10027c30: f8d1 5080 ldr.w r5, [r1, #128] ; 0x80 -10027c34: 4606 mov r6, r0 -10027c36: 460c mov r4, r1 -10027c38: b90d cbnz r5, 10027c3e -10027c3a: 2000 movs r0, #0 -10027c3c: e02b b.n 10027c96 -10027c3e: 7f0b ldrb r3, [r1, #28] -10027c40: 2b04 cmp r3, #4 -10027c42: d123 bne.n 10027c8c -10027c44: 6f08 ldr r0, [r1, #112] ; 0x70 -10027c46: b930 cbnz r0, 10027c56 -10027c48: f506 6046 add.w r0, r6, #3168 ; 0xc60 -10027c4c: 3157 adds r1, #87 ; 0x57 -10027c4e: f000 fb21 bl 10028294 -10027c52: 2800 cmp r0, #0 -10027c54: d0f1 beq.n 10027c3a -10027c56: f894 2057 ldrb.w r2, [r4, #87] ; 0x57 -10027c5a: 07d3 lsls r3, r2, #31 -10027c5c: d518 bpl.n 10027c90 -10027c5e: f8d6 3d68 ldr.w r3, [r6, #3432] ; 0xd68 -10027c62: eb06 1303 add.w r3, r6, r3, lsl #4 -10027c66: f603 536c addw r3, r3, #3436 ; 0xd6c -10027c6a: 8a61 ldrh r1, [r4, #18] -10027c6c: 69a2 ldr r2, [r4, #24] -10027c6e: 7f60 ldrb r0, [r4, #29] -10027c70: 1a52 subs r2, r2, r1 -10027c72: 1a12 subs r2, r2, r0 -10027c74: 8d28 ldrh r0, [r5, #40] ; 0x28 -10027c76: 7fa4 ldrb r4, [r4, #30] -10027c78: f000 000c and.w r0, r0, #12 -10027c7c: 9000 str r0, [sp, #0] -10027c7e: a802 add r0, sp, #8 -10027c80: 9001 str r0, [sp, #4] -10027c82: 1b12 subs r2, r2, r4 -10027c84: f105 0028 add.w r0, r5, #40 ; 0x28 -10027c88: f016 fe42 bl 1003e910 <__aes_80211_encrypt_veneer> -10027c8c: 2001 movs r0, #1 -10027c8e: e002 b.n 10027c96 -10027c90: f500 739c add.w r3, r0, #312 ; 0x138 -10027c94: e7e9 b.n 10027c6a -10027c96: b004 add sp, #16 -10027c98: bd70 pop {r4, r5, r6, pc} - -10027c9a : -10027c9a: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -10027c9c: f891 302f ldrb.w r3, [r1, #47] ; 0x2f -10027ca0: 4605 mov r5, r0 -10027ca2: 2b04 cmp r3, #4 -10027ca4: 460c mov r4, r1 -10027ca6: 6f8e ldr r6, [r1, #120] ; 0x78 -10027ca8: d123 bne.n 10027cf2 -10027caa: f500 6046 add.w r0, r0, #3168 ; 0xc60 -10027cae: 3142 adds r1, #66 ; 0x42 -10027cb0: f000 faf0 bl 10028294 -10027cb4: b310 cbz r0, 10027cfc -10027cb6: f894 3048 ldrb.w r3, [r4, #72] ; 0x48 -10027cba: 07db lsls r3, r3, #31 -10027cbc: d51b bpl.n 10027cf6 -10027cbe: f241 035c movw r3, #4188 ; 0x105c -10027cc2: 5ce8 ldrb r0, [r5, r3] -10027cc4: b1d0 cbz r0, 10027cfc -10027cc6: f894 3058 ldrb.w r3, [r4, #88] ; 0x58 -10027cca: eb05 1503 add.w r5, r5, r3, lsl #4 -10027cce: f605 536c addw r3, r5, #3436 ; 0xd6c -10027cd2: 8830 ldrh r0, [r6, #0] -10027cd4: f894 1021 ldrb.w r1, [r4, #33] ; 0x21 -10027cd8: 6f22 ldr r2, [r4, #112] ; 0x70 -10027cda: f000 000c and.w r0, r0, #12 -10027cde: f894 4030 ldrb.w r4, [r4, #48] ; 0x30 -10027ce2: 1a52 subs r2, r2, r1 -10027ce4: 9000 str r0, [sp, #0] -10027ce6: a802 add r0, sp, #8 -10027ce8: 9001 str r0, [sp, #4] -10027cea: 1b12 subs r2, r2, r4 -10027cec: 4630 mov r0, r6 -10027cee: f016 fe17 bl 1003e920 <__aes_80211_decrypt_veneer> -10027cf2: 2001 movs r0, #1 -10027cf4: e002 b.n 10027cfc -10027cf6: f500 739c add.w r3, r0, #312 ; 0x138 -10027cfa: e7ea b.n 10027cd2 -10027cfc: b004 add sp, #16 -10027cfe: bd70 pop {r4, r5, r6, pc} - -10027d00 : -10027d00: b538 push {r3, r4, r5, lr} -10027d02: 6845 ldr r5, [r0, #4] -10027d04: 4604 mov r4, r0 -10027d06: 2d01 cmp r5, #1 -10027d08: d010 beq.n 10027d2c -10027d0a: 2d02 cmp r5, #2 -10027d0c: d00b beq.n 10027d26 -10027d0e: 2d05 cmp r5, #5 -10027d10: d009 beq.n 10027d26 -10027d12: 2d03 cmp r5, #3 -10027d14: d109 bne.n 10027d2a -10027d16: f641 0369 movw r3, #6249 ; 0x1869 -10027d1a: 5cc3 ldrb r3, [r0, r3] -10027d1c: 2b00 cmp r3, #0 -10027d1e: bf14 ite ne -10027d20: 2503 movne r5, #3 -10027d22: 2501 moveq r5, #1 -10027d24: e002 b.n 10027d2c -10027d26: 2503 movs r5, #3 -10027d28: e000 b.n 10027d2c -10027d2a: 2501 movs r5, #1 -10027d2c: f44f 7049 mov.w r0, #804 ; 0x324 -10027d30: 4368 muls r0, r5 -10027d32: f241 3334 movw r3, #4916 ; 0x1334 -10027d36: 3004 adds r0, #4 -10027d38: 50e0 str r0, [r4, r3] -10027d3a: f7ef fd19 bl 10017770 -10027d3e: f241 3330 movw r3, #4912 ; 0x1330 -10027d42: 50e0 str r0, [r4, r3] -10027d44: b1a0 cbz r0, 10027d70 -10027d46: f020 0003 bic.w r0, r0, #3 -10027d4a: 3004 adds r0, #4 -10027d4c: f241 3338 movw r3, #4920 ; 0x1338 -10027d50: 2d01 cmp r5, #1 -10027d52: 50e0 str r0, [r4, r3] -10027d54: d00b beq.n 10027d6e -10027d56: f500 7249 add.w r2, r0, #804 ; 0x324 -10027d5a: f241 333c movw r3, #4924 ; 0x133c -10027d5e: 2d03 cmp r5, #3 -10027d60: 50e2 str r2, [r4, r3] -10027d62: d104 bne.n 10027d6e -10027d64: f504 549a add.w r4, r4, #4928 ; 0x1340 -10027d68: f500 60c9 add.w r0, r0, #1608 ; 0x648 -10027d6c: 6020 str r0, [r4, #0] -10027d6e: 2001 movs r0, #1 -10027d70: bd38 pop {r3, r4, r5, pc} - -10027d72 : -10027d72: b510 push {r4, lr} -10027d74: 4604 mov r4, r0 -10027d76: f8d0 0628 ldr.w r0, [r0, #1576] ; 0x628 -10027d7a: b148 cbz r0, 10027d90 -10027d7c: f8d4 162c ldr.w r1, [r4, #1580] ; 0x62c -10027d80: b131 cbz r1, 10027d90 -10027d82: f7ef fb40 bl 10017406 -10027d86: 2300 movs r3, #0 -10027d88: f8c4 3628 str.w r3, [r4, #1576] ; 0x628 -10027d8c: f8c4 362c str.w r3, [r4, #1580] ; 0x62c -10027d90: bd10 pop {r4, pc} - -10027d92 : -10027d92: 7843 ldrb r3, [r0, #1] -10027d94: 7802 ldrb r2, [r0, #0] -10027d96: ea83 0282 eor.w r2, r3, r2, lsl #2 -10027d9a: 7883 ldrb r3, [r0, #2] -10027d9c: ea83 0282 eor.w r2, r3, r2, lsl #2 -10027da0: 78c3 ldrb r3, [r0, #3] -10027da2: ea83 0282 eor.w r2, r3, r2, lsl #2 -10027da6: 7903 ldrb r3, [r0, #4] -10027da8: ea83 0282 eor.w r2, r3, r2, lsl #2 -10027dac: 7943 ldrb r3, [r0, #5] -10027dae: ea83 0082 eor.w r0, r3, r2, lsl #2 -10027db2: ea80 2010 eor.w r0, r0, r0, lsr #8 -10027db6: f000 0004 and.w r0, r0, #4 -10027dba: 4770 bx lr - -10027dbc <_addba_timer_hdl>: -10027dbc: f7fa bccb b.w 10022756 - -10027dc0 <_rtw_init_stainfo>: -10027dc0: b538 push {r3, r4, r5, lr} -10027dc2: 2100 movs r1, #0 -10027dc4: 4604 mov r4, r0 -10027dc6: f44f 7254 mov.w r2, #848 ; 0x350 -10027dca: f7ef fb31 bl 10017430 -10027dce: 4620 mov r0, r4 -10027dd0: f7ef fbdc bl 1001758c -10027dd4: 1d20 adds r0, r4, #4 -10027dd6: f7ef fb33 bl 10017440 -10027dda: f104 000c add.w r0, r4, #12 -10027dde: 2500 movs r5, #0 -10027de0: f7ef fb2e bl 10017440 -10027de4: f104 00e8 add.w r0, r4, #232 ; 0xe8 -10027de8: f7ef fbd8 bl 1001759c -10027dec: f104 0018 add.w r0, r4, #24 -10027df0: f8c4 50f4 str.w r5, [r4, #244] ; 0xf4 -10027df4: f001 fa6c bl 100292d0 <_rtw_init_sta_xmit_priv> -10027df8: f104 00b4 add.w r0, r4, #180 ; 0xb4 -10027dfc: f7fe fce0 bl 100267c0 <_rtw_init_sta_recv_priv> -10027e00: f504 7007 add.w r0, r4, #540 ; 0x21c -10027e04: f7ef fb1c bl 10017440 -10027e08: f504 7009 add.w r0, r4, #548 ; 0x224 -10027e0c: f7ef fb18 bl 10017440 -10027e10: f884 52e4 strb.w r5, [r4, #740] ; 0x2e4 -10027e14: f884 5305 strb.w r5, [r4, #773] ; 0x305 -10027e18: f884 5306 strb.w r5, [r4, #774] ; 0x306 -10027e1c: f884 5307 strb.w r5, [r4, #775] ; 0x307 -10027e20: f884 5308 strb.w r5, [r4, #776] ; 0x308 -10027e24: f884 5309 strb.w r5, [r4, #777] ; 0x309 -10027e28: f884 530a strb.w r5, [r4, #778] ; 0x30a -10027e2c: f8c4 522c str.w r5, [r4, #556] ; 0x22c -10027e30: f8c4 52c8 str.w r5, [r4, #712] ; 0x2c8 -10027e34: f8a4 52c4 strh.w r5, [r4, #708] ; 0x2c4 -10027e38: f8c4 5230 str.w r5, [r4, #560] ; 0x230 -10027e3c: f8c4 5234 str.w r5, [r4, #564] ; 0x234 -10027e40: f8c4 5238 str.w r5, [r4, #568] ; 0x238 -10027e44: bd38 pop {r3, r4, r5, pc} - -10027e46 <_rtw_init_sta_priv>: -10027e46: 6843 ldr r3, [r0, #4] -10027e48: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10027e4c: 2b01 cmp r3, #1 -10027e4e: 4604 mov r4, r0 -10027e50: d00b beq.n 10027e6a <_rtw_init_sta_priv+0x24> -10027e52: 2b04 cmp r3, #4 -10027e54: d009 beq.n 10027e6a <_rtw_init_sta_priv+0x24> -10027e56: 2b03 cmp r3, #3 -10027e58: d109 bne.n 10027e6e <_rtw_init_sta_priv+0x28> -10027e5a: f641 0369 movw r3, #6249 ; 0x1869 -10027e5e: 5cc3 ldrb r3, [r0, r3] -10027e60: 2b00 cmp r3, #0 -10027e62: bf14 ite ne -10027e64: 2505 movne r5, #5 -10027e66: 2502 moveq r5, #2 -10027e68: e002 b.n 10027e70 <_rtw_init_sta_priv+0x2a> -10027e6a: 2502 movs r5, #2 -10027e6c: e000 b.n 10027e70 <_rtw_init_sta_priv+0x2a> -10027e6e: 2505 movs r5, #5 -10027e70: f44f 7054 mov.w r0, #848 ; 0x350 -10027e74: 4368 muls r0, r5 -10027e76: 3004 adds r0, #4 -10027e78: f8c4 0c64 str.w r0, [r4, #3172] ; 0xc64 -10027e7c: f7ef fc78 bl 10017770 -10027e80: f8c4 0c60 str.w r0, [r4, #3168] ; 0xc60 -10027e84: 2800 cmp r0, #0 -10027e86: d050 beq.n 10027f2a <_rtw_init_sta_priv+0xe4> -10027e88: f020 0003 bic.w r0, r0, #3 -10027e8c: 3004 adds r0, #4 -10027e8e: f604 486c addw r8, r4, #3180 ; 0xc6c -10027e92: f8c4 0c68 str.w r0, [r4, #3176] ; 0xc68 -10027e96: 4640 mov r0, r8 -10027e98: f7ef fb80 bl 1001759c -10027e9c: 2700 movs r7, #0 -10027e9e: f604 4078 addw r0, r4, #3192 ; 0xc78 -10027ea2: f7ef fb73 bl 1001758c -10027ea6: f604 40a8 addw r0, r4, #3240 ; 0xca8 -10027eaa: f8c4 7ca4 str.w r7, [r4, #3236] ; 0xca4 -10027eae: f7ef fb75 bl 1001759c -10027eb2: f604 40b4 addw r0, r4, #3252 ; 0xcb4 -10027eb6: f7ef fb71 bl 1001759c -10027eba: f8d4 6c68 ldr.w r6, [r4, #3176] ; 0xc68 -10027ebe: 3604 adds r6, #4 -10027ec0: 4630 mov r0, r6 -10027ec2: f7ef fabd bl 10017440 -10027ec6: 3701 adds r7, #1 -10027ec8: 4630 mov r0, r6 -10027eca: 4641 mov r1, r8 -10027ecc: f7ef fac6 bl 1001745c -10027ed0: 42af cmp r7, r5 -10027ed2: f506 7654 add.w r6, r6, #848 ; 0x350 -10027ed6: d1f3 bne.n 10027ec0 <_rtw_init_sta_priv+0x7a> -10027ed8: 2600 movs r6, #0 -10027eda: f604 407c addw r0, r4, #3196 ; 0xc7c -10027ede: 4430 add r0, r6 -10027ee0: 3608 adds r6, #8 -10027ee2: f7ef faad bl 10017440 -10027ee6: 2e28 cmp r6, #40 ; 0x28 -10027ee8: d1f7 bne.n 10027eda <_rtw_init_sta_priv+0x94> -10027eea: 2300 movs r3, #0 -10027eec: f8a4 3cfc strh.w r3, [r4, #3324] ; 0xcfc -10027ef0: f8a4 3cfe strh.w r3, [r4, #3326] ; 0xcfe -10027ef4: f604 40c4 addw r0, r4, #3268 ; 0xcc4 -10027ef8: f7ef faa2 bl 10017440 -10027efc: f604 40cc addw r0, r4, #3276 ; 0xccc -10027f00: f7ef fa9e bl 10017440 -10027f04: f604 40d4 addw r0, r4, #3284 ; 0xcd4 -10027f08: f7ef fb40 bl 1001758c -10027f0c: f604 40d8 addw r0, r4, #3288 ; 0xcd8 -10027f10: f7ef fb3c bl 1001758c -10027f14: 2303 movs r3, #3 -10027f16: f8c4 3cdc str.w r3, [r4, #3292] ; 0xcdc -10027f1a: f8c4 3ce0 str.w r3, [r4, #3296] ; 0xce0 -10027f1e: 233c movs r3, #60 ; 0x3c -10027f20: f8c4 3ce4 str.w r3, [r4, #3300] ; 0xce4 -10027f24: f8a4 5d00 strh.w r5, [r4, #3328] ; 0xd00 -10027f28: 2001 movs r0, #1 -10027f2a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -10027f2e <_rtw_free_sta_xmit_priv_lock>: -10027f2e: b510 push {r4, lr} -10027f30: 4604 mov r4, r0 -10027f32: f7ef fb39 bl 100175a8 -10027f36: f104 001c add.w r0, r4, #28 -10027f3a: f7ef fb35 bl 100175a8 -10027f3e: f104 0034 add.w r0, r4, #52 ; 0x34 -10027f42: f7ef fb31 bl 100175a8 -10027f46: f104 004c add.w r0, r4, #76 ; 0x4c -10027f4a: f7ef fb2d bl 100175a8 -10027f4e: f104 0064 add.w r0, r4, #100 ; 0x64 -10027f52: e8bd 4010 ldmia.w sp!, {r4, lr} -10027f56: f7ef bb27 b.w 100175a8 - -10027f5a : -10027f5a: b510 push {r4, lr} -10027f5c: 4604 mov r4, r0 -10027f5e: f7ef fb23 bl 100175a8 -10027f62: f104 0018 add.w r0, r4, #24 -10027f66: f7ff ffe2 bl 10027f2e <_rtw_free_sta_xmit_priv_lock> -10027f6a: f104 00b4 add.w r0, r4, #180 ; 0xb4 -10027f6e: f7ef fb1b bl 100175a8 -10027f72: f104 00c4 add.w r0, r4, #196 ; 0xc4 -10027f76: f7ef fb17 bl 100175a8 -10027f7a: f104 00f0 add.w r0, r4, #240 ; 0xf0 -10027f7e: e8bd 4010 ldmia.w sp!, {r4, lr} -10027f82: f7ef bb11 b.w 100175a8 - -10027f86 : -10027f86: b510 push {r4, lr} -10027f88: 4604 mov r4, r0 -10027f8a: 3014 adds r0, #20 -10027f8c: f7ef fb0c bl 100175a8 -10027f90: f104 0018 add.w r0, r4, #24 -10027f94: f7ef fb08 bl 100175a8 -10027f98: f104 005c add.w r0, r4, #92 ; 0x5c -10027f9c: f7ef fb04 bl 100175a8 -10027fa0: f104 0050 add.w r0, r4, #80 ; 0x50 -10027fa4: f7ef fb00 bl 100175a8 -10027fa8: f104 0074 add.w r0, r4, #116 ; 0x74 -10027fac: f7ef fafc bl 100175a8 -10027fb0: f104 0078 add.w r0, r4, #120 ; 0x78 -10027fb4: e8bd 4010 ldmia.w sp!, {r4, lr} -10027fb8: f7ef baf6 b.w 100175a8 - -10027fbc <_rtw_free_sta_priv>: -10027fbc: b510 push {r4, lr} -10027fbe: 4604 mov r4, r0 -10027fc0: b150 cbz r0, 10027fd8 <_rtw_free_sta_priv+0x1c> -10027fc2: f7ff ffe0 bl 10027f86 -10027fc6: 6820 ldr r0, [r4, #0] -10027fc8: b130 cbz r0, 10027fd8 <_rtw_free_sta_priv+0x1c> -10027fca: 6861 ldr r1, [r4, #4] -10027fcc: b121 cbz r1, 10027fd8 <_rtw_free_sta_priv+0x1c> -10027fce: f7ef fa1a bl 10017406 -10027fd2: 2300 movs r3, #0 -10027fd4: 6023 str r3, [r4, #0] -10027fd6: 6063 str r3, [r4, #4] -10027fd8: 2001 movs r0, #1 -10027fda: bd10 pop {r4, pc} - -10027fdc : -10027fdc: b507 push {r0, r1, r2, lr} -10027fde: 460b mov r3, r1 -10027fe0: 4906 ldr r1, [pc, #24] ; (10027ffc ) -10027fe2: 4602 mov r2, r0 -10027fe4: 9100 str r1, [sp, #0] -10027fe6: f641 0134 movw r1, #6196 ; 0x1834 -10027fea: 5851 ldr r1, [r2, r1] -10027fec: f503 70e4 add.w r0, r3, #456 ; 0x1c8 -10027ff0: 4a03 ldr r2, [pc, #12] ; (10028000 ) -10027ff2: f00e ff0d bl 10036e10 -10027ff6: b003 add sp, #12 -10027ff8: f85d fb04 ldr.w pc, [sp], #4 -10027ffc: 10041690 .word 0x10041690 -10028000: 10027dbd .word 0x10027dbd - -10028004 : -10028004: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} -10028008: f100 0714 add.w r7, r0, #20 -1002800c: f64f 73ff movw r3, #65535 ; 0xffff -10028010: f100 040c add.w r4, r0, #12 -10028014: 4605 mov r5, r0 -10028016: 4688 mov r8, r1 -10028018: 4638 mov r0, r7 -1002801a: a902 add r1, sp, #8 -1002801c: f8ad 3006 strh.w r3, [sp, #6] -10028020: f7ef fad2 bl 100175c8 -10028024: 4620 mov r0, r4 -10028026: f7ef faa7 bl 10017578 -1002802a: 2801 cmp r0, #1 -1002802c: d104 bne.n 10028038 -1002802e: 4638 mov r0, r7 -10028030: a902 add r1, sp, #8 -10028032: f7ef fad3 bl 100175dc -10028036: e045 b.n 100280c4 -10028038: 68ee ldr r6, [r5, #12] -1002803a: 4630 mov r0, r6 -1002803c: f7ef fa14 bl 10017468 -10028040: 1f34 subs r4, r6, #4 -10028042: a902 add r1, sp, #8 -10028044: 4638 mov r0, r7 -10028046: f7ef fac9 bl 100175dc -1002804a: 4620 mov r0, r4 -1002804c: f7ff feb8 bl 10027dc0 <_rtw_init_stainfo> -10028050: 6e2b ldr r3, [r5, #96] ; 0x60 -10028052: f506 7082 add.w r0, r6, #260 ; 0x104 -10028056: 6163 str r3, [r4, #20] -10028058: 4641 mov r1, r8 -1002805a: 2206 movs r2, #6 -1002805c: f7ef f9d8 bl 10017410 -10028060: 4640 mov r0, r8 -10028062: f7ff fe96 bl 10027d92 -10028066: 2804 cmp r0, #4 -10028068: dc2c bgt.n 100280c4 -1002806a: eb05 00c0 add.w r0, r5, r0, lsl #3 -1002806e: f105 0718 add.w r7, r5, #24 -10028072: f100 081c add.w r8, r0, #28 -10028076: a903 add r1, sp, #12 -10028078: 4638 mov r0, r7 -1002807a: f7ef faa5 bl 100175c8 -1002807e: f106 0008 add.w r0, r6, #8 -10028082: 4641 mov r1, r8 -10028084: f7ef f9ea bl 1001745c -10028088: 6c6b ldr r3, [r5, #68] ; 0x44 -1002808a: 4638 mov r0, r7 -1002808c: 3301 adds r3, #1 -1002808e: 646b str r3, [r5, #68] ; 0x44 -10028090: a903 add r1, sp, #12 -10028092: f7ef faa3 bl 100175dc -10028096: 2600 movs r6, #0 -10028098: f104 00c8 add.w r0, r4, #200 ; 0xc8 -1002809c: 4430 add r0, r6 -1002809e: f10d 0106 add.w r1, sp, #6 -100280a2: 2202 movs r2, #2 -100280a4: 3602 adds r6, #2 -100280a6: f7ef f9b3 bl 10017410 -100280aa: 2e20 cmp r6, #32 -100280ac: d1f4 bne.n 10028098 -100280ae: 6e28 ldr r0, [r5, #96] ; 0x60 -100280b0: 4621 mov r1, r4 -100280b2: f7ff ff93 bl 10027fdc -100280b6: f04f 33ff mov.w r3, #4294967295 -100280ba: f8c4 3320 str.w r3, [r4, #800] ; 0x320 -100280be: f8c4 3324 str.w r3, [r4, #804] ; 0x324 -100280c2: e000 b.n 100280c6 -100280c4: 2400 movs r4, #0 -100280c6: 4620 mov r0, r4 -100280c8: b004 add sp, #16 -100280ca: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -100280ce : -100280ce: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -100280d0: 4605 mov r5, r0 -100280d2: f600 1658 addw r6, r0, #2392 ; 0x958 -100280d6: 460c mov r4, r1 -100280d8: 2900 cmp r1, #0 -100280da: f000 80d7 beq.w 1002828c -100280de: 4630 mov r0, r6 -100280e0: a901 add r1, sp, #4 -100280e2: f7ef fa71 bl 100175c8 -100280e6: 2700 movs r7, #0 -100280e8: 4630 mov r0, r6 -100280ea: f104 01e8 add.w r1, r4, #232 ; 0xe8 -100280ee: f001 fc78 bl 100299e2 -100280f2: 4630 mov r0, r6 -100280f4: f104 0174 add.w r1, r4, #116 ; 0x74 -100280f8: f8c4 70f4 str.w r7, [r4, #244] ; 0xf4 -100280fc: f001 fc71 bl 100299e2 -10028100: f104 006c add.w r0, r4, #108 ; 0x6c -10028104: f7ef f9b0 bl 10017468 -10028108: 4630 mov r0, r6 -1002810a: f104 015c add.w r1, r4, #92 ; 0x5c -1002810e: f001 fc68 bl 100299e2 -10028112: f104 0054 add.w r0, r4, #84 ; 0x54 -10028116: f7ef f9a7 bl 10017468 -1002811a: 4630 mov r0, r6 -1002811c: f104 0144 add.w r1, r4, #68 ; 0x44 -10028120: f001 fc5f bl 100299e2 -10028124: f104 003c add.w r0, r4, #60 ; 0x3c -10028128: f7ef f99e bl 10017468 -1002812c: 4630 mov r0, r6 -1002812e: f104 012c add.w r1, r4, #44 ; 0x2c -10028132: f001 fc56 bl 100299e2 -10028136: f104 0024 add.w r0, r4, #36 ; 0x24 -1002813a: f7ef f995 bl 10017468 -1002813e: a901 add r1, sp, #4 -10028140: 4630 mov r0, r6 -10028142: f7ef fa4b bl 100175dc -10028146: f104 000c add.w r0, r4, #12 -1002814a: f7ef f98d bl 10017468 -1002814e: f8d5 3ca4 ldr.w r3, [r5, #3236] ; 0xca4 -10028152: f504 70e4 add.w r0, r4, #456 ; 0x1c8 -10028156: 3b01 subs r3, #1 -10028158: f8c5 3ca4 str.w r3, [r5, #3236] ; 0xca4 -1002815c: f00e fe63 bl 10036e26 -10028160: f504 7607 add.w r6, r4, #540 ; 0x21c -10028164: 4628 mov r0, r5 -10028166: 4639 mov r1, r7 -10028168: 4622 mov r2, r4 -1002816a: 463b mov r3, r7 -1002816c: f00a f9d1 bl 10032512 -10028170: 4630 mov r0, r6 -10028172: f7ef f968 bl 10017446 -10028176: b960 cbnz r0, 10028192 -10028178: f605 47d4 addw r7, r5, #3284 ; 0xcd4 -1002817c: a901 add r1, sp, #4 -1002817e: 4638 mov r0, r7 -10028180: f7ef fa22 bl 100175c8 -10028184: 4630 mov r0, r6 -10028186: f7ef f96f bl 10017468 -1002818a: 4638 mov r0, r7 -1002818c: a901 add r1, sp, #4 -1002818e: f7ef fa25 bl 100175dc -10028192: f504 7609 add.w r6, r4, #548 ; 0x224 -10028196: 4630 mov r0, r6 -10028198: f7ef f955 bl 10017446 -1002819c: b960 cbnz r0, 100281b8 -1002819e: f605 47d8 addw r7, r5, #3288 ; 0xcd8 -100281a2: a901 add r1, sp, #4 -100281a4: 4638 mov r0, r7 -100281a6: f7ef fa0f bl 100175c8 -100281aa: 4630 mov r0, r6 -100281ac: f7ef f95c bl 10017468 -100281b0: 4638 mov r0, r7 -100281b2: a901 add r1, sp, #4 -100281b4: f7ef fa12 bl 100175dc -100281b8: 692a ldr r2, [r5, #16] -100281ba: 06d1 lsls r1, r2, #27 -100281bc: d44e bmi.n 1002825c -100281be: 0713 lsls r3, r2, #28 -100281c0: d457 bmi.n 10028272 -100281c2: f8d4 20fc ldr.w r2, [r4, #252] ; 0xfc -100281c6: 2101 movs r1, #1 -100281c8: 4091 lsls r1, r2 -100281ca: 2300 movs r3, #0 -100281cc: f884 3310 strb.w r3, [r4, #784] ; 0x310 -100281d0: f884 3311 strb.w r3, [r4, #785] ; 0x311 -100281d4: f884 3312 strb.w r3, [r4, #786] ; 0x312 -100281d8: f884 3313 strb.w r3, [r4, #787] ; 0x313 -100281dc: f884 3314 strb.w r3, [r4, #788] ; 0x314 -100281e0: f884 3315 strb.w r3, [r4, #789] ; 0x315 -100281e4: f884 3316 strb.w r3, [r4, #790] ; 0x316 -100281e8: f8b5 0cfc ldrh.w r0, [r5, #3324] ; 0xcfc -100281ec: 43c9 mvns r1, r1 -100281ee: b289 uxth r1, r1 -100281f0: 4008 ands r0, r1 -100281f2: f8c4 3230 str.w r3, [r4, #560] ; 0x230 -100281f6: f8c4 3234 str.w r3, [r4, #564] ; 0x234 -100281fa: f8c4 3238 str.w r3, [r4, #568] ; 0x238 -100281fe: f8c4 322c str.w r3, [r4, #556] ; 0x22c -10028202: f8c4 3318 str.w r3, [r4, #792] ; 0x318 -10028206: f8a5 0cfc strh.w r0, [r5, #3324] ; 0xcfc -1002820a: f8b5 0cfe ldrh.w r0, [r5, #3326] ; 0xcfe -1002820e: 4001 ands r1, r0 -10028210: f8a5 1cfe strh.w r1, [r5, #3326] ; 0xcfe -10028214: b172 cbz r2, 10028234 -10028216: 3a01 subs r2, #1 -10028218: eb05 0282 add.w r2, r5, r2, lsl #2 -1002821c: f8d2 1ce8 ldr.w r1, [r2, #3304] ; 0xce8 -10028220: 42a1 cmp r1, r4 -10028222: d107 bne.n 10028234 -10028224: f241 3138 movw r1, #4920 ; 0x1338 -10028228: 5851 ldr r1, [r2, r1] -1002822a: 600b str r3, [r1, #0] -1002822c: f8c2 3ce8 str.w r3, [r2, #3304] ; 0xce8 -10028230: f8c4 30fc str.w r3, [r4, #252] ; 0xfc -10028234: f605 466c addw r6, r5, #3180 ; 0xc6c -10028238: f605 4574 addw r5, r5, #3188 ; 0xc74 -1002823c: 4628 mov r0, r5 -1002823e: a901 add r1, sp, #4 -10028240: f7ef f9c2 bl 100175c8 -10028244: 1d20 adds r0, r4, #4 -10028246: 4631 mov r1, r6 -10028248: f7ef f908 bl 1001745c -1002824c: 4628 mov r0, r5 -1002824e: a901 add r1, sp, #4 -10028250: f7ef f9c4 bl 100175dc -10028254: 4620 mov r0, r4 -10028256: f7ff fe80 bl 10027f5a -1002825a: e017 b.n 1002828c -1002825c: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc -10028260: 2b00 cmp r3, #0 -10028262: d0ac beq.n 100281be -10028264: f203 43cd addw r3, r3, #1229 ; 0x4cd -10028268: f855 0023 ldr.w r0, [r5, r3, lsl #2] -1002826c: f500 703d add.w r0, r0, #756 ; 0x2f4 -10028270: e009 b.n 10028286 -10028272: f241 3638 movw r6, #4920 ; 0x1338 -10028276: 59a8 ldr r0, [r5, r6] -10028278: f500 703d add.w r0, r0, #756 ; 0x2f4 -1002827c: f00e fdd3 bl 10036e26 -10028280: 59a8 ldr r0, [r5, r6] -10028282: f500 7041 add.w r0, r0, #772 ; 0x304 -10028286: f00e fdce bl 10036e26 -1002828a: e79a b.n 100281c2 -1002828c: 2001 movs r0, #1 -1002828e: b003 add sp, #12 -10028290: bdf0 pop {r4, r5, r6, r7, pc} - ... - -10028294 : -10028294: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} -10028298: 4a1c ldr r2, [pc, #112] ; (1002830c ) -1002829a: 4605 mov r5, r0 -1002829c: 6810 ldr r0, [r2, #0] -1002829e: 8892 ldrh r2, [r2, #4] -100282a0: ab02 add r3, sp, #8 -100282a2: 9002 str r0, [sp, #8] -100282a4: f8ad 200c strh.w r2, [sp, #12] -100282a8: 460c mov r4, r1 -100282aa: b359 cbz r1, 10028304 -100282ac: 780a ldrb r2, [r1, #0] -100282ae: f105 0618 add.w r6, r5, #24 -100282b2: f012 0f01 tst.w r2, #1 -100282b6: bf18 it ne -100282b8: 461c movne r4, r3 -100282ba: 4620 mov r0, r4 -100282bc: f7ff fd69 bl 10027d92 -100282c0: 4607 mov r7, r0 -100282c2: 3703 adds r7, #3 -100282c4: eb05 05c7 add.w r5, r5, r7, lsl #3 -100282c8: 4630 mov r0, r6 -100282ca: a901 add r1, sp, #4 -100282cc: f7ef f97c bl 100175c8 -100282d0: 1d2f adds r7, r5, #4 -100282d2: 686d ldr r5, [r5, #4] -100282d4: 4638 mov r0, r7 -100282d6: 4629 mov r1, r5 -100282d8: f7ef f953 bl 10017582 -100282dc: b968 cbnz r0, 100282fa -100282de: f105 00fc add.w r0, r5, #252 ; 0xfc -100282e2: 4621 mov r1, r4 -100282e4: 2206 movs r2, #6 -100282e6: f7ef f89b bl 10017420 -100282ea: 2801 cmp r0, #1 -100282ec: f1a5 080c sub.w r8, r5, #12 -100282f0: d101 bne.n 100282f6 -100282f2: 4644 mov r4, r8 -100282f4: e002 b.n 100282fc -100282f6: 682d ldr r5, [r5, #0] -100282f8: e7ec b.n 100282d4 -100282fa: 2400 movs r4, #0 -100282fc: 4630 mov r0, r6 -100282fe: a901 add r1, sp, #4 -10028300: f7ef f96c bl 100175dc -10028304: 4620 mov r0, r4 -10028306: b004 add sp, #16 -10028308: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1002830c: 1004168a .word 0x1004168a - -10028310 : -10028310: b507 push {r0, r1, r2, lr} -10028312: 4b0a ldr r3, [pc, #40] ; (1002833c ) -10028314: 4602 mov r2, r0 -10028316: 6818 ldr r0, [r3, #0] -10028318: 889b ldrh r3, [r3, #4] -1002831a: 9000 str r0, [sp, #0] -1002831c: 4669 mov r1, sp -1002831e: f502 6046 add.w r0, r2, #3168 ; 0xc60 -10028322: f8ad 3004 strh.w r3, [sp, #4] -10028326: f7ff fe6d bl 10028004 -1002832a: b110 cbz r0, 10028332 -1002832c: 2301 movs r3, #1 -1002832e: f8c0 3100 str.w r3, [r0, #256] ; 0x100 -10028332: 2001 movs r0, #1 -10028334: b003 add sp, #12 -10028336: f85d fb04 ldr.w pc, [sp], #4 -1002833a: bf00 nop -1002833c: 1004168a .word 0x1004168a - -10028340 : -10028340: b507 push {r0, r1, r2, lr} -10028342: 4b07 ldr r3, [pc, #28] ; (10028360 ) -10028344: 4602 mov r2, r0 -10028346: 6818 ldr r0, [r3, #0] -10028348: 889b ldrh r3, [r3, #4] -1002834a: 9000 str r0, [sp, #0] -1002834c: 4669 mov r1, sp -1002834e: f502 6046 add.w r0, r2, #3168 ; 0xc60 -10028352: f8ad 3004 strh.w r3, [sp, #4] -10028356: f7ff ff9d bl 10028294 -1002835a: b003 add sp, #12 -1002835c: f85d fb04 ldr.w pc, [sp], #4 -10028360: 1004168a .word 0x1004168a - -10028364 : -10028364: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} -10028368: 4604 mov r4, r0 -1002836a: f7ff ffe9 bl 10028340 -1002836e: f8d4 3ca4 ldr.w r3, [r4, #3236] ; 0xca4 -10028372: 4682 mov sl, r0 -10028374: 2b01 cmp r3, #1 -10028376: d026 beq.n 100283c6 -10028378: f604 4778 addw r7, r4, #3192 ; 0xc78 -1002837c: 4638 mov r0, r7 -1002837e: a901 add r1, sp, #4 -10028380: f7ef f922 bl 100175c8 -10028384: f604 457c addw r5, r4, #3196 ; 0xc7c -10028388: f604 49a4 addw r9, r4, #3236 ; 0xca4 -1002838c: 682e ldr r6, [r5, #0] -1002838e: 4628 mov r0, r5 -10028390: 4631 mov r1, r6 -10028392: f7ef f8f6 bl 10017582 -10028396: b978 cbnz r0, 100283b8 -10028398: 4631 mov r1, r6 -1002839a: f1a6 080c sub.w r8, r6, #12 -1002839e: 4620 mov r0, r4 -100283a0: f851 6bfc ldr.w r6, [r1], #252 -100283a4: 2203 movs r2, #3 -100283a6: f7f7 ffbd bl 10020324 -100283aa: 45c2 cmp sl, r8 -100283ac: d0ef beq.n 1002838e -100283ae: 4620 mov r0, r4 -100283b0: 4641 mov r1, r8 -100283b2: f7ff fe8c bl 100280ce -100283b6: e7ea b.n 1002838e -100283b8: 3508 adds r5, #8 -100283ba: 454d cmp r5, r9 -100283bc: d1e6 bne.n 1002838c -100283be: 4638 mov r0, r7 -100283c0: a901 add r1, sp, #4 -100283c2: f7ef f90b bl 100175dc -100283c6: b002 add sp, #8 -100283c8: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - -100283cc : -100283cc: 2300 movs r3, #0 -100283ce: 428b cmp r3, r1 -100283d0: da0c bge.n 100283ec -100283d2: 5cc2 ldrb r2, [r0, r3] -100283d4: f002 027f and.w r2, r2, #127 ; 0x7f -100283d8: 2a02 cmp r2, #2 -100283da: d009 beq.n 100283f0 -100283dc: 2a04 cmp r2, #4 -100283de: d007 beq.n 100283f0 -100283e0: 2a0b cmp r2, #11 -100283e2: d005 beq.n 100283f0 -100283e4: 2a16 cmp r2, #22 -100283e6: d003 beq.n 100283f0 -100283e8: 3301 adds r3, #1 -100283ea: e7f0 b.n 100283ce -100283ec: 2000 movs r0, #0 -100283ee: 4770 bx lr -100283f0: 2001 movs r0, #1 -100283f2: 4770 bx lr - -100283f4 : -100283f4: 2300 movs r3, #0 -100283f6: 428b cmp r3, r1 -100283f8: da0c bge.n 10028414 -100283fa: 5cc2 ldrb r2, [r0, r3] -100283fc: f002 027f and.w r2, r2, #127 ; 0x7f -10028400: 2a02 cmp r2, #2 -10028402: d005 beq.n 10028410 -10028404: 2a04 cmp r2, #4 -10028406: d003 beq.n 10028410 -10028408: 2a0b cmp r2, #11 -1002840a: d001 beq.n 10028410 -1002840c: 2a16 cmp r2, #22 -1002840e: d103 bne.n 10028418 -10028410: 3301 adds r3, #1 -10028412: e7f0 b.n 100283f6 -10028414: 2001 movs r0, #1 -10028416: 4770 bx lr -10028418: 2000 movs r0, #0 -1002841a: 4770 bx lr - -1002841c : -1002841c: f241 63c8 movw r3, #5832 ; 0x16c8 -10028420: 3901 subs r1, #1 -10028422: 58c3 ldr r3, [r0, r3] -10028424: 2913 cmp r1, #19 -10028426: d824 bhi.n 10028472 -10028428: e8df f001 tbb [pc, r1] -1002842c: 250c250a .word 0x250c250a -10028430: 0e232323 .word 0x0e232323 -10028434: 23150e23 .word 0x23150e23 -10028438: 0e232323 .word 0x0e232323 -1002843c: 0e232323 .word 0x0e232323 -10028440: 2008 movs r0, #8 -10028442: 4770 bx lr -10028444: 2006 movs r0, #6 -10028446: 4770 bx lr -10028448: f893 303c ldrb.w r3, [r3, #60] ; 0x3c -1002844c: 2b02 cmp r3, #2 -1002844e: bf14 ite ne -10028450: 2005 movne r0, #5 -10028452: 2004 moveq r0, #4 -10028454: 4770 bx lr -10028456: f890 251f ldrb.w r2, [r0, #1311] ; 0x51f -1002845a: f893 003c ldrb.w r0, [r3, #60] ; 0x3c -1002845e: b922 cbnz r2, 1002846a -10028460: 2802 cmp r0, #2 -10028462: bf14 ite ne -10028464: 2003 movne r0, #3 -10028466: 2002 moveq r0, #2 -10028468: 4770 bx lr -1002846a: 3802 subs r0, #2 -1002846c: bf18 it ne -1002846e: 2001 movne r0, #1 -10028470: 4770 bx lr -10028472: 2000 movs r0, #0 -10028474: 4770 bx lr -10028476: 2007 movs r0, #7 -10028478: 4770 bx lr - -1002847a : -1002847a: b570 push {r4, r5, r6, lr} -1002847c: f890 351e ldrb.w r3, [r0, #1310] ; 0x51e -10028480: 460d mov r5, r1 -10028482: 2b0e cmp r3, #14 -10028484: 4616 mov r6, r2 -10028486: f890 3734 ldrb.w r3, [r0, #1844] ; 0x734 -1002848a: d904 bls.n 10028496 -1002848c: 2b00 cmp r3, #0 -1002848e: bf14 ite ne -10028490: 2014 movne r0, #20 -10028492: 2004 moveq r0, #4 -10028494: bd70 pop {r4, r5, r6, pc} -10028496: 2b00 cmp r3, #0 -10028498: 4608 mov r0, r1 -1002849a: 4611 mov r1, r2 -1002849c: bf14 ite ne -1002849e: 2408 movne r4, #8 -100284a0: 2400 moveq r4, #0 -100284a2: f7ff ffa7 bl 100283f4 -100284a6: 2801 cmp r0, #1 -100284a8: d102 bne.n 100284b0 -100284aa: f044 0001 orr.w r0, r4, #1 -100284ae: e009 b.n 100284c4 -100284b0: 4628 mov r0, r5 -100284b2: 4631 mov r1, r6 -100284b4: f7ff ff8a bl 100283cc -100284b8: 2801 cmp r0, #1 -100284ba: bf0c ite eq -100284bc: f044 0003 orreq.w r0, r4, #3 -100284c0: f044 0002 orrne.w r0, r4, #2 -100284c4: b2c0 uxtb r0, r0 -100284c6: bd70 pop {r4, r5, r6, pc} - -100284c8 : -100284c8: f000 007f and.w r0, r0, #127 ; 0x7f -100284cc: 280b cmp r0, #11 -100284ce: bf9a itte ls -100284d0: 4b01 ldrls r3, [pc, #4] ; (100284d8 ) -100284d2: 5c18 ldrbls r0, [r3, r0] -100284d4: 2000 movhi r0, #0 -100284d6: 4770 bx lr -100284d8: 100416a2 .word 0x100416a2 - -100284dc : -100284dc: b570 push {r4, r5, r6, lr} -100284de: 4605 mov r5, r0 -100284e0: 460e mov r6, r1 -100284e2: 2400 movs r4, #0 -100284e4: 192b adds r3, r5, r4 -100284e6: f893 062c ldrb.w r0, [r3, #1580] ; 0x62c -100284ea: 1c82 adds r2, r0, #2 -100284ec: b2d2 uxtb r2, r2 -100284ee: 2a01 cmp r2, #1 -100284f0: d903 bls.n 100284fa -100284f2: f7ff ffe9 bl 100284c8 -100284f6: 4286 cmp r6, r0 -100284f8: d004 beq.n 10028504 -100284fa: 3401 adds r4, #1 -100284fc: 2c0d cmp r4, #13 -100284fe: d1f1 bne.n 100284e4 -10028500: 2000 movs r0, #0 -10028502: bd70 pop {r4, r5, r6, pc} -10028504: 2001 movs r0, #1 -10028506: bd70 pop {r4, r5, r6, pc} - -10028508 : -10028508: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1002850c: 2400 movs r4, #0 -1002850e: 4607 mov r7, r0 -10028510: 4688 mov r8, r1 -10028512: 4625 mov r5, r4 -10028514: 197b adds r3, r7, r5 -10028516: f893 0639 ldrb.w r0, [r3, #1593] ; 0x639 -1002851a: 28fe cmp r0, #254 ; 0xfe -1002851c: d010 beq.n 10028540 -1002851e: 28ff cmp r0, #255 ; 0xff -10028520: d011 beq.n 10028546 -10028522: f7ff ffd1 bl 100284c8 -10028526: 4606 mov r6, r0 -10028528: 4631 mov r1, r6 -1002852a: 4638 mov r0, r7 -1002852c: f7ff ffd6 bl 100284dc -10028530: 2801 cmp r0, #1 -10028532: bf04 itt eq -10028534: f066 067f orneq r6, r6, #127 ; 0x7f -10028538: b2f6 uxtbeq r6, r6 -1002853a: f808 6004 strb.w r6, [r8, r4] -1002853e: 3401 adds r4, #1 -10028540: 3501 adds r5, #1 -10028542: 2d0d cmp r5, #13 -10028544: d1e6 bne.n 10028514 -10028546: 4620 mov r0, r4 -10028548: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1002854c : -1002854c: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -1002854e: 4606 mov r6, r0 -10028550: 460d mov r5, r1 -10028552: 4614 mov r4, r2 -10028554: 4668 mov r0, sp -10028556: 220d movs r2, #13 -10028558: 2100 movs r1, #0 -1002855a: f7ee ff69 bl 10017430 -1002855e: 4669 mov r1, sp -10028560: 4630 mov r0, r6 -10028562: f7ff ffd1 bl 10028508 -10028566: 4669 mov r1, sp -10028568: 4602 mov r2, r0 -1002856a: 6020 str r0, [r4, #0] -1002856c: 4628 mov r0, r5 -1002856e: f7ee ff4f bl 10017410 -10028572: b004 add sp, #16 -10028574: bd70 pop {r4, r5, r6, pc} - -10028576 : -10028576: 2200 movs r2, #0 -10028578: 5c88 ldrb r0, [r1, r2] -1002857a: f000 037f and.w r3, r0, #127 ; 0x7f -1002857e: 2b0c cmp r3, #12 -10028580: d805 bhi.n 1002858e -10028582: 2b0b cmp r3, #11 -10028584: d209 bcs.n 1002859a -10028586: 2b02 cmp r3, #2 -10028588: d007 beq.n 1002859a -1002858a: 2b04 cmp r3, #4 -1002858c: e004 b.n 10028598 -1002858e: 2b18 cmp r3, #24 -10028590: d003 beq.n 1002859a -10028592: 2b30 cmp r3, #48 ; 0x30 -10028594: d001 beq.n 1002859a -10028596: 2b16 cmp r3, #22 -10028598: d102 bne.n 100285a0 -1002859a: f060 007f orn r0, r0, #127 ; 0x7f -1002859e: 5488 strb r0, [r1, r2] -100285a0: 3201 adds r2, #1 -100285a2: 2a10 cmp r2, #16 -100285a4: d1e8 bne.n 10028578 -100285a6: 4770 bx lr - -100285a8 : -100285a8: b570 push {r4, r5, r6, lr} -100285aa: 2200 movs r2, #0 -100285ac: b2d3 uxtb r3, r2 -100285ae: 428b cmp r3, r1 -100285b0: d210 bcs.n 100285d4 -100285b2: 5cc5 ldrb r5, [r0, r3] -100285b4: f005 047f and.w r4, r5, #127 ; 0x7f -100285b8: 3c02 subs r4, #2 -100285ba: b2e4 uxtb r4, r4 -100285bc: 2c14 cmp r4, #20 -100285be: d807 bhi.n 100285d0 -100285c0: 2601 movs r6, #1 -100285c2: 40a6 lsls r6, r4 -100285c4: 4c04 ldr r4, [pc, #16] ; (100285d8 ) -100285c6: 4034 ands r4, r6 -100285c8: b114 cbz r4, 100285d0 -100285ca: f065 057f orn r5, r5, #127 ; 0x7f -100285ce: 54c5 strb r5, [r0, r3] -100285d0: 3201 adds r2, #1 -100285d2: e7eb b.n 100285ac -100285d4: bd70 pop {r4, r5, r6, pc} -100285d6: bf00 nop -100285d8: 00100205 .word 0x00100205 - -100285dc : -100285dc: b507 push {r0, r1, r2, lr} -100285de: 2301 movs r3, #1 -100285e0: aa02 add r2, sp, #8 -100285e2: f802 3d01 strb.w r3, [r2, #-1]! -100285e6: 2119 movs r1, #25 -100285e8: f009 ff73 bl 100324d2 -100285ec: b003 add sp, #12 -100285ee: f85d fb04 ldr.w pc, [sp], #4 - -100285f2 : -100285f2: b507 push {r0, r1, r2, lr} -100285f4: 2300 movs r3, #0 -100285f6: aa02 add r2, sp, #8 -100285f8: f802 3d01 strb.w r3, [r2, #-1]! -100285fc: 2119 movs r1, #25 -100285fe: f009 ff68 bl 100324d2 -10028602: b003 add sp, #12 -10028604: f85d fb04 ldr.w pc, [sp], #4 - -10028608 : -10028608: b507 push {r0, r1, r2, lr} -1002860a: ab02 add r3, sp, #8 -1002860c: f843 1d04 str.w r1, [r3, #-4]! -10028610: 2a01 cmp r2, #1 -10028612: bf0c ite eq -10028614: 211a moveq r1, #26 -10028616: 211b movne r1, #27 -10028618: 461a mov r2, r3 -1002861a: f009 ff5a bl 100324d2 -1002861e: b003 add sp, #12 -10028620: f85d fb04 ldr.w pc, [sp], #4 - -10028624 : -10028624: b507 push {r0, r1, r2, lr} -10028626: f641 026a movw r2, #6250 ; 0x186a -1002862a: 460b mov r3, r1 -1002862c: 5c81 ldrb r1, [r0, r2] -1002862e: aa02 add r2, sp, #8 -10028630: 2901 cmp r1, #1 -10028632: bf0e itee eq -10028634: f802 3d02 strbeq.w r3, [r2, #-2]! -10028638: f802 3d01 strbne.w r3, [r2, #-1]! -1002863c: 2100 movne r1, #0 -1002863e: f009 ff48 bl 100324d2 -10028642: b003 add sp, #12 -10028644: f85d fb04 ldr.w pc, [sp], #4 - -10028648 : -10028648: 2904 cmp r1, #4 -1002864a: b507 push {r0, r1, r2, lr} -1002864c: d103 bne.n 10028656 -1002864e: 2303 movs r3, #3 -10028650: f8c0 3680 str.w r3, [r0, #1664] ; 0x680 -10028654: e00f b.n 10028676 -10028656: 2901 cmp r1, #1 -10028658: d109 bne.n 1002866e -1002865a: f8d0 3680 ldr.w r3, [r0, #1664] ; 0x680 -1002865e: f023 0303 bic.w r3, r3, #3 -10028662: f043 0302 orr.w r3, r3, #2 -10028666: f8c0 3680 str.w r3, [r0, #1664] ; 0x680 -1002866a: 2302 movs r3, #2 -1002866c: e003 b.n 10028676 -1002866e: b909 cbnz r1, 10028674 -10028670: 2301 movs r3, #1 -10028672: e000 b.n 10028676 -10028674: 2300 movs r3, #0 -10028676: 2102 movs r1, #2 -10028678: f10d 0207 add.w r2, sp, #7 -1002867c: f88d 3007 strb.w r3, [sp, #7] -10028680: f009 ff27 bl 100324d2 -10028684: 2000 movs r0, #0 -10028686: b003 add sp, #12 -10028688: f85d fb04 ldr.w pc, [sp], #4 - -1002868c : -1002868c: b538 push {r3, r4, r5, lr} -1002868e: f641 036c movw r3, #6252 ; 0x186c -10028692: 4604 mov r4, r0 -10028694: 460d mov r5, r1 -10028696: 58c0 ldr r0, [r0, r3] -10028698: 2100 movs r1, #0 -1002869a: f7ee ff5d bl 10017558 -1002869e: f641 0374 movw r3, #6260 ; 0x1874 -100286a2: 58e3 ldr r3, [r4, r3] -100286a4: b103 cbz r3, 100286a8 -100286a6: 701d strb r5, [r3, #0] -100286a8: 4620 mov r0, r4 -100286aa: 4629 mov r1, r5 -100286ac: f00a f820 bl 100326f0 -100286b0: f641 036c movw r3, #6252 ; 0x186c -100286b4: 58e0 ldr r0, [r4, r3] -100286b6: 2100 movs r1, #0 -100286b8: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -100286bc: f7ee bf54 b.w 10017568 - -100286c0 : -100286c0: f641 0370 movw r3, #6256 ; 0x1870 -100286c4: b570 push {r4, r5, r6, lr} -100286c6: 4604 mov r4, r0 -100286c8: 460d mov r5, r1 -100286ca: 58c0 ldr r0, [r0, r3] -100286cc: 2100 movs r1, #0 -100286ce: 4616 mov r6, r2 -100286d0: f7ee ff42 bl 10017558 -100286d4: f641 0374 movw r3, #6260 ; 0x1874 -100286d8: 58e2 ldr r2, [r4, r3] -100286da: b112 cbz r2, 100286e2 -100286dc: 7055 strb r5, [r2, #1] -100286de: 58e3 ldr r3, [r4, r3] -100286e0: 709e strb r6, [r3, #2] -100286e2: 4620 mov r0, r4 -100286e4: 4629 mov r1, r5 -100286e6: 4632 mov r2, r6 -100286e8: f009 fffb bl 100326e2 -100286ec: f641 0370 movw r3, #6256 ; 0x1870 -100286f0: 58e0 ldr r0, [r4, r3] -100286f2: 2100 movs r1, #0 -100286f4: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -100286f8: f7ee bf36 b.w 10017568 - -100286fc : -100286fc: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10028700: 4698 mov r8, r3 -10028702: f890 361c ldrb.w r3, [r0, #1564] ; 0x61c -10028706: 4604 mov r4, r0 -10028708: 460d mov r5, r1 -1002870a: 4617 mov r7, r2 -1002870c: bb33 cbnz r3, 1002875c -1002870e: f1b8 0f00 cmp.w r8, #0 -10028712: d006 beq.n 10028722 -10028714: b12a cbz r2, 10028722 -10028716: 2a01 cmp r2, #1 -10028718: bf0c ite eq -1002871a: 1c8e addeq r6, r1, #2 -1002871c: 1e8e subne r6, r1, #2 -1002871e: b2f6 uxtb r6, r6 -10028720: e000 b.n 10028724 -10028722: 462e mov r6, r5 -10028724: f641 036c movw r3, #6252 ; 0x186c -10028728: 58e0 ldr r0, [r4, r3] -1002872a: 2100 movs r1, #0 -1002872c: f7ee ff14 bl 10017558 -10028730: f641 0374 movw r3, #6260 ; 0x1874 -10028734: 58e3 ldr r3, [r4, r3] -10028736: b103 cbz r3, 1002873a -10028738: 701d strb r5, [r3, #0] -1002873a: 4620 mov r0, r4 -1002873c: 4631 mov r1, r6 -1002873e: f009 ffd7 bl 100326f0 -10028742: f641 036c movw r3, #6252 ; 0x186c -10028746: 58e0 ldr r0, [r4, r3] -10028748: 2100 movs r1, #0 -1002874a: f7ee ff0d bl 10017568 -1002874e: 4620 mov r0, r4 -10028750: 4641 mov r1, r8 -10028752: 463a mov r2, r7 -10028754: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -10028758: f7ff bfb2 b.w 100286c0 -1002875c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -10028760 : -10028760: 3004 adds r0, #4 -10028762: 4770 bx lr - -10028764 : -10028764: b507 push {r0, r1, r2, lr} -10028766: 307c adds r0, #124 ; 0x7c -10028768: f7f4 ff31 bl 1001d5ce -1002876c: 2202 movs r2, #2 -1002876e: 4601 mov r1, r0 -10028770: f10d 0006 add.w r0, sp, #6 -10028774: f7ee fe4c bl 10017410 -10028778: f8bd 0006 ldrh.w r0, [sp, #6] -1002877c: b003 add sp, #12 -1002877e: f85d fb04 ldr.w pc, [sp], #4 - -10028782 : -10028782: b148 cbz r0, 10028798 -10028784: f8d0 2680 ldr.w r2, [r0, #1664] ; 0x680 -10028788: f244 0303 movw r3, #16387 ; 0x4003 -1002878c: f244 0002 movw r0, #16386 ; 0x4002 -10028790: 4013 ands r3, r2 -10028792: 1a1b subs r3, r3, r0 -10028794: 4258 negs r0, r3 -10028796: 4158 adcs r0, r3 -10028798: 4770 bx lr - -1002879a : -1002879a: f8d0 0680 ldr.w r0, [r0, #1664] ; 0x680 -1002879e: f244 0301 movw r3, #16385 ; 0x4001 -100287a2: f420 507f bic.w r0, r0, #16320 ; 0x3fc0 -100287a6: f020 003c bic.w r0, r0, #60 ; 0x3c -100287aa: 0440 lsls r0, r0, #17 -100287ac: 0c40 lsrs r0, r0, #17 -100287ae: 1ac3 subs r3, r0, r3 -100287b0: 4258 negs r0, r3 -100287b2: 4158 adcs r0, r3 -100287b4: 4770 bx lr - -100287b6 : -100287b6: f8d0 37d4 ldr.w r3, [r0, #2004] ; 0x7d4 -100287ba: 2b01 cmp r3, #1 -100287bc: d00a beq.n 100287d4 -100287be: f8d0 37f4 ldr.w r3, [r0, #2036] ; 0x7f4 -100287c2: 2b01 cmp r3, #1 -100287c4: d006 beq.n 100287d4 -100287c6: f8d0 0814 ldr.w r0, [r0, #2068] ; 0x814 -100287ca: f110 30ff adds.w r0, r0, #4294967295 -100287ce: bf18 it ne -100287d0: 2001 movne r0, #1 -100287d2: 4770 bx lr -100287d4: 2000 movs r0, #0 -100287d6: 4770 bx lr - -100287d8 : -100287d8: 0080 lsls r0, r0, #2 -100287da: f241 736f movw r3, #5999 ; 0x176f -100287de: 4298 cmp r0, r3 -100287e0: d905 bls.n 100287ee -100287e2: f644 6320 movw r3, #20000 ; 0x4e20 -100287e6: 4298 cmp r0, r3 -100287e8: bf28 it cs -100287ea: 4618 movcs r0, r3 -100287ec: 4770 bx lr -100287ee: f241 7070 movw r0, #6000 ; 0x1770 -100287f2: 4770 bx lr - -100287f4 : -100287f4: 211d movs r1, #29 -100287f6: 2200 movs r2, #0 -100287f8: f009 be6b b.w 100324d2 - -100287fc : -100287fc: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} -10028800: 9f0a ldr r7, [sp, #40] ; 0x28 -10028802: 4680 mov r8, r0 -10028804: 4691 mov r9, r2 -10028806: 461d mov r5, r3 -10028808: ea4f 0ac1 mov.w sl, r1, lsl #3 -1002880c: 2405 movs r4, #5 -1002880e: b154 cbz r4, 10028826 -10028810: 2c01 cmp r4, #1 -10028812: d110 bne.n 10028836 -10028814: 792b ldrb r3, [r5, #4] -10028816: 78ea ldrb r2, [r5, #3] -10028818: 041b lsls r3, r3, #16 -1002881a: ea43 2302 orr.w r3, r3, r2, lsl #8 -1002881e: 78aa ldrb r2, [r5, #2] -10028820: 4313 orrs r3, r2 -10028822: 796a ldrb r2, [r5, #5] -10028824: e014 b.n 10028850 -10028826: 786b ldrb r3, [r5, #1] -10028828: 782a ldrb r2, [r5, #0] -1002882a: 061b lsls r3, r3, #24 -1002882c: ea43 4302 orr.w r3, r3, r2, lsl #16 -10028830: ea43 0309 orr.w r3, r3, r9 -10028834: e00e b.n 10028854 -10028836: f1a4 0e02 sub.w lr, r4, #2 -1002883a: eb07 068e add.w r6, r7, lr, lsl #2 -1002883e: 78b3 ldrb r3, [r6, #2] -10028840: 7872 ldrb r2, [r6, #1] -10028842: 041b lsls r3, r3, #16 -10028844: ea43 2302 orr.w r3, r3, r2, lsl #8 -10028848: f817 202e ldrb.w r2, [r7, lr, lsl #2] -1002884c: 4313 orrs r3, r2 -1002884e: 78f2 ldrb r2, [r6, #3] -10028850: ea43 6302 orr.w r3, r3, r2, lsl #24 -10028854: 9300 str r3, [sp, #0] -10028856: 4640 mov r0, r8 -10028858: eb04 030a add.w r3, r4, sl -1002885c: 211e movs r1, #30 -1002885e: 466a mov r2, sp -10028860: 9301 str r3, [sp, #4] -10028862: f009 fe36 bl 100324d2 -10028866: f114 34ff adds.w r4, r4, #4294967295 -1002886a: d2d0 bcs.n 1002880e -1002886c: b002 add sp, #8 -1002886e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - -10028872 : -10028872: b5f0 push {r4, r5, r6, r7, lr} -10028874: b089 sub sp, #36 ; 0x24 -10028876: 2400 movs r4, #0 -10028878: ad04 add r5, sp, #16 -1002887a: 4607 mov r7, r0 -1002887c: 460e mov r6, r1 -1002887e: 4628 mov r0, r5 -10028880: 4621 mov r1, r4 -10028882: 2210 movs r2, #16 -10028884: 9402 str r4, [sp, #8] -10028886: f8ad 400c strh.w r4, [sp, #12] -1002888a: f015 f9bb bl 1003dc04 -1002888e: 9500 str r5, [sp, #0] -10028890: 4638 mov r0, r7 -10028892: 4631 mov r1, r6 -10028894: 4622 mov r2, r4 -10028896: ab02 add r3, sp, #8 -10028898: f7ff ffb0 bl 100287fc -1002889c: b009 add sp, #36 ; 0x24 -1002889e: bdf0 pop {r4, r5, r6, r7, pc} - -100288a0 : -100288a0: b510 push {r4, lr} -100288a2: 2101 movs r1, #1 -100288a4: 4604 mov r4, r0 -100288a6: f7f5 fe61 bl 1001e56c -100288aa: 4602 mov r2, r0 -100288ac: b920 cbnz r0, 100288b8 -100288ae: 4620 mov r0, r4 -100288b0: 211d movs r1, #29 -100288b2: f009 fe0e bl 100324d2 -100288b6: e018 b.n 100288ea -100288b8: 6923 ldr r3, [r4, #16] -100288ba: 071a lsls r2, r3, #28 -100288bc: d515 bpl.n 100288ea -100288be: f104 019c add.w r1, r4, #156 ; 0x9c -100288c2: f504 6046 add.w r0, r4, #3168 ; 0xc60 -100288c6: f7ff fce5 bl 10028294 -100288ca: 4601 mov r1, r0 -100288cc: b168 cbz r0, 100288ea -100288ce: f8d1 30f8 ldr.w r3, [r1, #248] ; 0xf8 -100288d2: 06db lsls r3, r3, #27 -100288d4: d411 bmi.n 100288fa -100288d6: f8d1 3100 ldr.w r3, [r1, #256] ; 0x100 -100288da: 2b02 cmp r3, #2 -100288dc: bf14 ite ne -100288de: 2204 movne r2, #4 -100288e0: 2205 moveq r2, #5 -100288e2: 4620 mov r0, r4 -100288e4: 2300 movs r3, #0 -100288e6: f7f4 f97d bl 1001cbe4 -100288ea: f504 60f2 add.w r0, r4, #1936 ; 0x790 -100288ee: 2100 movs r1, #0 -100288f0: 22a0 movs r2, #160 ; 0xa0 -100288f2: e8bd 4010 ldmia.w sp!, {r4, lr} -100288f6: f7ee bd9b b.w 10017430 -100288fa: 2200 movs r2, #0 -100288fc: e7f1 b.n 100288e2 - -100288fe : -100288fe: f8d0 344c ldr.w r3, [r0, #1100] ; 0x44c -10028902: b510 push {r4, lr} -10028904: b91b cbnz r3, 1002890e -10028906: f880 3731 strb.w r3, [r0, #1841] ; 0x731 -1002890a: 4618 mov r0, r3 -1002890c: bd10 pop {r4, pc} -1002890e: 2401 movs r4, #1 -10028910: f880 4731 strb.w r4, [r0, #1841] ; 0x731 -10028914: 3108 adds r1, #8 -10028916: f500 60e9 add.w r0, r0, #1864 ; 0x748 -1002891a: 2212 movs r2, #18 -1002891c: f7ee fd78 bl 10017410 -10028920: 4620 mov r0, r4 -10028922: bd10 pop {r4, pc} - -10028924 : -10028924: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -10028928: f890 3731 ldrb.w r3, [r0, #1841] ; 0x731 -1002892c: 4604 mov r4, r0 -1002892e: 2b00 cmp r3, #0 -10028930: d059 beq.n 100289e6 -10028932: f890 3521 ldrb.w r3, [r0, #1313] ; 0x521 -10028936: 2600 movs r6, #0 -10028938: 2b01 cmp r3, #1 -1002893a: f88d 6003 strb.w r6, [sp, #3] -1002893e: bf14 ite ne -10028940: f04f 0810 movne.w r8, #16 -10028944: f04f 080a moveq.w r8, #10 -10028948: f200 754a addw r5, r0, #1866 ; 0x74a -1002894c: 8869 ldrh r1, [r5, #2] -1002894e: 786a ldrb r2, [r5, #1] -10028950: 782b ldrb r3, [r5, #0] -10028952: 0409 lsls r1, r1, #16 -10028954: ea41 2102 orr.w r1, r1, r2, lsl #8 -10028958: f894 272f ldrb.w r2, [r4, #1839] ; 0x72f -1002895c: f003 000f and.w r0, r3, #15 -10028960: fb00 8202 mla r2, r0, r2, r8 -10028964: f3c3 1700 ubfx r7, r3, #4, #1 -10028968: b2d2 uxtb r2, r2 -1002896a: f3c3 1341 ubfx r3, r3, #5, #2 -1002896e: 4311 orrs r1, r2 -10028970: 2b02 cmp r3, #2 -10028972: aa02 add r2, sp, #8 -10028974: f842 1d04 str.w r1, [r2, #-4]! -10028978: 4620 mov r0, r4 -1002897a: d00f beq.n 1002899c -1002897c: 2b03 cmp r3, #3 -1002897e: d015 beq.n 100289ac -10028980: 2b01 cmp r3, #1 -10028982: d007 beq.n 10028994 -10028984: 2122 movs r1, #34 ; 0x22 -10028986: f009 fda4 bl 100324d2 -1002898a: f89d 3003 ldrb.w r3, [sp, #3] -1002898e: ea43 0747 orr.w r7, r3, r7, lsl #1 -10028992: e012 b.n 100289ba -10028994: 2123 movs r1, #35 ; 0x23 -10028996: f009 fd9c bl 100324d2 -1002899a: e010 b.n 100289be -1002899c: 2121 movs r1, #33 ; 0x21 -1002899e: f009 fd98 bl 100324d2 -100289a2: f89d 3003 ldrb.w r3, [sp, #3] -100289a6: ea43 0787 orr.w r7, r3, r7, lsl #2 -100289aa: e006 b.n 100289ba -100289ac: 2120 movs r1, #32 -100289ae: f009 fd90 bl 100324d2 -100289b2: f89d 3003 ldrb.w r3, [sp, #3] -100289b6: ea43 07c7 orr.w r7, r3, r7, lsl #3 -100289ba: f88d 7003 strb.w r7, [sp, #3] -100289be: 3601 adds r6, #1 -100289c0: 2e04 cmp r6, #4 -100289c2: f105 0504 add.w r5, r5, #4 -100289c6: d1c1 bne.n 1002894c -100289c8: f241 33c4 movw r3, #5060 ; 0x13c4 -100289cc: 5ce3 ldrb r3, [r4, r3] -100289ce: 2b01 cmp r3, #1 -100289d0: bf18 it ne -100289d2: f89d 3003 ldrbne.w r3, [sp, #3] -100289d6: d106 bne.n 100289e6 -100289d8: 4620 mov r0, r4 -100289da: 2124 movs r1, #36 ; 0x24 -100289dc: f10d 0203 add.w r2, sp, #3 -100289e0: f009 fd77 bl 100324d2 -100289e4: e001 b.n 100289ea -100289e6: f884 349d strb.w r3, [r4, #1181] ; 0x49d -100289ea: b002 add sp, #8 -100289ec: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -100289f0 : -100289f0: b573 push {r0, r1, r4, r5, r6, lr} -100289f2: 4604 mov r4, r0 -100289f4: 2900 cmp r1, #0 -100289f6: d046 beq.n 10028a86 -100289f8: f8d0 3454 ldr.w r3, [r0, #1108] ; 0x454 -100289fc: 2b00 cmp r3, #0 -100289fe: d042 beq.n 10028a86 -10028a00: 2301 movs r3, #1 -10028a02: f880 3735 strb.w r3, [r0, #1845] ; 0x735 -10028a06: 2300 movs r3, #0 -10028a08: 784a ldrb r2, [r1, #1] -10028a0a: 4293 cmp r3, r2 -10028a0c: d222 bcs.n 10028a54 -10028a0e: 2b02 cmp r3, #2 -10028a10: d00a beq.n 10028a28 -10028a12: f504 62d0 add.w r2, r4, #1664 ; 0x680 -10028a16: 441a add r2, r3 -10028a18: 18c8 adds r0, r1, r3 -10028a1a: 7885 ldrb r5, [r0, #2] -10028a1c: f892 00da ldrb.w r0, [r2, #218] ; 0xda -10028a20: 4028 ands r0, r5 -10028a22: f882 00da strb.w r0, [r2, #218] ; 0xda -10028a26: e013 b.n 10028a50 -10028a28: f894 075c ldrb.w r0, [r4, #1884] ; 0x75c -10028a2c: 790a ldrb r2, [r1, #4] -10028a2e: f000 0603 and.w r6, r0, #3 -10028a32: f002 0503 and.w r5, r2, #3 -10028a36: f000 001c and.w r0, r0, #28 -10028a3a: f002 021c and.w r2, r2, #28 -10028a3e: 4282 cmp r2, r0 -10028a40: bfb8 it lt -10028a42: 4602 movlt r2, r0 -10028a44: 42ae cmp r6, r5 -10028a46: bfd4 ite le -10028a48: 4332 orrle r2, r6 -10028a4a: 432a orrgt r2, r5 -10028a4c: f884 275c strb.w r2, [r4, #1884] ; 0x75c -10028a50: 3301 adds r3, #1 -10028a52: e7d9 b.n 10028a08 -10028a54: f10d 0207 add.w r2, sp, #7 -10028a58: 4620 mov r0, r4 -10028a5a: 2117 movs r1, #23 -10028a5c: f009 fd40 bl 100324e0 -10028a60: f89d 2007 ldrb.w r2, [sp, #7] -10028a64: 2300 movs r3, #0 -10028a66: 2a03 cmp r2, #3 -10028a68: d000 beq.n 10028a6c -10028a6a: b94a cbnz r2, 10028a80 -10028a6c: f504 61d0 add.w r1, r4, #1664 ; 0x680 -10028a70: 4806 ldr r0, [pc, #24] ; (10028a8c ) -10028a72: 4419 add r1, r3 -10028a74: f891 50dd ldrb.w r5, [r1, #221] ; 0xdd -10028a78: 5c18 ldrb r0, [r3, r0] -10028a7a: 4028 ands r0, r5 -10028a7c: f881 00dd strb.w r0, [r1, #221] ; 0xdd -10028a80: 3301 adds r3, #1 -10028a82: 2b10 cmp r3, #16 -10028a84: d1ef bne.n 10028a66 -10028a86: b002 add sp, #8 -10028a88: bd70 pop {r4, r5, r6, pc} -10028a8a: bf00 nop -10028a8c: 1004144f .word 0x1004144f - -10028a90 : -10028a90: 460b mov r3, r1 -10028a92: b171 cbz r1, 10028ab2 -10028a94: f8d0 2454 ldr.w r2, [r0, #1108] ; 0x454 -10028a98: b15a cbz r2, 10028ab2 -10028a9a: 784a ldrb r2, [r1, #1] -10028a9c: 2a16 cmp r2, #22 -10028a9e: d808 bhi.n 10028ab2 -10028aa0: 2201 movs r2, #1 -10028aa2: f880 2736 strb.w r2, [r0, #1846] ; 0x736 -10028aa6: 3102 adds r1, #2 -10028aa8: f200 707a addw r0, r0, #1914 ; 0x77a -10028aac: 785a ldrb r2, [r3, #1] -10028aae: f7ee bcaf b.w 10017410 -10028ab2: 4770 bx lr - -10028ab4 : -10028ab4: b507 push {r0, r1, r2, lr} -10028ab6: f890 2736 ldrb.w r2, [r0, #1846] ; 0x736 -10028aba: 4603 mov r3, r0 -10028abc: b182 cbz r2, 10028ae0 -10028abe: f890 2735 ldrb.w r2, [r0, #1845] ; 0x735 -10028ac2: b16a cbz r2, 10028ae0 -10028ac4: f890 375c ldrb.w r3, [r0, #1884] ; 0x75c -10028ac8: 2201 movs r2, #1 -10028aca: f880 2734 strb.w r2, [r0, #1844] ; 0x734 -10028ace: f3c3 0382 ubfx r3, r3, #2, #3 -10028ad2: aa02 add r2, sp, #8 -10028ad4: f802 3d01 strb.w r3, [r2, #-1]! -10028ad8: 2125 movs r1, #37 ; 0x25 -10028ada: f009 fcfa bl 100324d2 -10028ade: e002 b.n 10028ae6 -10028ae0: 2200 movs r2, #0 -10028ae2: f883 2734 strb.w r2, [r3, #1844] ; 0x734 -10028ae6: b003 add sp, #12 -10028ae8: f85d fb04 ldr.w pc, [sp], #4 - -10028aec : -10028aec: 784a ldrb r2, [r1, #1] -10028aee: 460b mov r3, r1 -10028af0: 2a01 cmp r2, #1 -10028af2: d808 bhi.n 10028b06 -10028af4: 2201 movs r2, #1 -10028af6: f880 2732 strb.w r2, [r0, #1842] ; 0x732 -10028afa: 3102 adds r1, #2 -10028afc: f200 7033 addw r0, r0, #1843 ; 0x733 -10028b00: 785a ldrb r2, [r3, #1] -10028b02: f7ee bc85 b.w 10017410 -10028b06: 4770 bx lr - -10028b08 : -10028b08: f500 539c add.w r3, r0, #4992 ; 0x1380 -10028b0c: 3308 adds r3, #8 -10028b0e: f893 202f ldrb.w r2, [r3, #47] ; 0x2f -10028b12: b112 cbz r2, 10028b1a -10028b14: 2a01 cmp r2, #1 -10028b16: d00c beq.n 10028b32 -10028b18: e004 b.n 10028b24 -10028b1a: f881 2175 strb.w r2, [r1, #373] ; 0x175 -10028b1e: f881 2174 strb.w r2, [r1, #372] ; 0x174 -10028b22: 4770 bx lr -10028b24: f890 2732 ldrb.w r2, [r0, #1842] ; 0x732 -10028b28: b18a cbz r2, 10028b4e -10028b2a: f890 2733 ldrb.w r2, [r0, #1843] ; 0x733 -10028b2e: 0792 lsls r2, r2, #30 -10028b30: d50d bpl.n 10028b4e -10028b32: f893 3030 ldrb.w r3, [r3, #48] ; 0x30 -10028b36: 2b01 cmp r3, #1 -10028b38: d104 bne.n 10028b44 -10028b3a: 2301 movs r3, #1 -10028b3c: f881 3175 strb.w r3, [r1, #373] ; 0x175 -10028b40: 2300 movs r3, #0 -10028b42: e007 b.n 10028b54 -10028b44: 2300 movs r3, #0 -10028b46: f881 3175 strb.w r3, [r1, #373] ; 0x175 -10028b4a: 2301 movs r3, #1 -10028b4c: e002 b.n 10028b54 -10028b4e: 2300 movs r3, #0 -10028b50: f881 3175 strb.w r3, [r1, #373] ; 0x175 -10028b54: f881 3174 strb.w r3, [r1, #372] ; 0x174 -10028b58: 4770 bx lr - -10028b5a : -10028b5a: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10028b5e: b093 sub sp, #76 ; 0x4c -10028b60: 4604 mov r4, r0 -10028b62: 4689 mov r9, r1 -10028b64: 4615 mov r5, r2 -10028b66: 2100 movs r1, #0 -10028b68: a80a add r0, sp, #40 ; 0x28 -10028b6a: 2220 movs r2, #32 -10028b6c: f8ad 1010 strh.w r1, [sp, #16] -10028b70: f8ad 1012 strh.w r1, [sp, #18] -10028b74: 9106 str r1, [sp, #24] -10028b76: 9107 str r1, [sp, #28] -10028b78: 9108 str r1, [sp, #32] -10028b7a: 9109 str r1, [sp, #36] ; 0x24 -10028b7c: f015 f842 bl 1003dc04 -10028b80: 4620 mov r0, r4 -10028b82: f7ff fdfe bl 10028782 -10028b86: b908 cbnz r0, 10028b8c -10028b88: 2001 movs r0, #1 -10028b8a: e0eb b.n 10028d64 -10028b8c: f241 3385 movw r3, #4997 ; 0x1385 -10028b90: 5ce3 ldrb r3, [r4, r3] -10028b92: 2b00 cmp r3, #0 -10028b94: d1f8 bne.n 10028b88 -10028b96: f1a5 0218 sub.w r2, r5, #24 -10028b9a: f5b2 7f40 cmp.w r2, #768 ; 0x300 -10028b9e: 9205 str r2, [sp, #20] -10028ba0: d901 bls.n 10028ba6 -10028ba2: 2000 movs r0, #0 -10028ba4: e0de b.n 10028d64 -10028ba6: f104 009c add.w r0, r4, #156 ; 0x9c -10028baa: f109 0110 add.w r1, r9, #16 -10028bae: 2206 movs r2, #6 -10028bb0: f7ee fc36 bl 10017420 -10028bb4: 2800 cmp r0, #0 -10028bb6: d0e7 beq.n 10028b88 -10028bb8: af12 add r7, sp, #72 ; 0x48 -10028bba: f857 ad34 ldr.w sl, [r7, #-52]! -10028bbe: f109 0524 add.w r5, r9, #36 ; 0x24 -10028bc2: f1aa 060c sub.w r6, sl, #12 -10028bc6: 4628 mov r0, r5 -10028bc8: 212d movs r1, #45 ; 0x2d -10028bca: 463a mov r2, r7 -10028bcc: 4633 mov r3, r6 -10028bce: f015 fe6b bl 1003e8a8 <__rtw_get_ie_veneer> -10028bd2: b120 cbz r0, 10028bde -10028bd4: 9b05 ldr r3, [sp, #20] -10028bd6: b123 cbz r3, 10028be2 -10028bd8: f8b0 b002 ldrh.w fp, [r0, #2] -10028bdc: e002 b.n 10028be4 -10028bde: 4683 mov fp, r0 -10028be0: e000 b.n 10028be4 -10028be2: 469b mov fp, r3 -10028be4: 4628 mov r0, r5 -10028be6: 213d movs r1, #61 ; 0x3d -10028be8: 463a mov r2, r7 -10028bea: 4633 mov r3, r6 -10028bec: f015 fe5c bl 1003e8a8 <__rtw_get_ie_veneer> -10028bf0: b128 cbz r0, 10028bfe -10028bf2: 9b05 ldr r3, [sp, #20] -10028bf4: b123 cbz r3, 10028c00 -10028bf6: f100 0802 add.w r8, r0, #2 -10028bfa: 78c3 ldrb r3, [r0, #3] -10028bfc: e001 b.n 10028c02 -10028bfe: 4603 mov r3, r0 -10028c00: 4698 mov r8, r3 -10028c02: f8b4 2424 ldrh.w r2, [r4, #1060] ; 0x424 -10028c06: 455a cmp r2, fp -10028c08: d104 bne.n 10028c14 -10028c0a: f894 2426 ldrb.w r2, [r4, #1062] ; 0x426 -10028c0e: 405a eors r2, r3 -10028c10: 0792 lsls r2, r2, #30 -10028c12: d003 beq.n 10028c1c -10028c14: f8a4 b424 strh.w fp, [r4, #1060] ; 0x424 -10028c18: f884 3426 strb.w r3, [r4, #1062] ; 0x426 -10028c1c: 4628 mov r0, r5 -10028c1e: 2103 movs r1, #3 -10028c20: 463a mov r2, r7 -10028c22: 4633 mov r3, r6 -10028c24: f015 fe40 bl 1003e8a8 <__rtw_get_ie_veneer> -10028c28: b108 cbz r0, 10028c2e -10028c2a: 7883 ldrb r3, [r0, #2] -10028c2c: e00d b.n 10028c4a -10028c2e: 4628 mov r0, r5 -10028c30: 213d movs r1, #61 ; 0x3d -10028c32: 463a mov r2, r7 -10028c34: 4633 mov r3, r6 -10028c36: f015 fe37 bl 1003e8a8 <__rtw_get_ie_veneer> -10028c3a: f1b8 0f00 cmp.w r8, #0 -10028c3e: d002 beq.n 10028c46 -10028c40: f898 3000 ldrb.w r3, [r8] -10028c44: e001 b.n 10028c4a -10028c46: f894 351e ldrb.w r3, [r4, #1310] ; 0x51e -10028c4a: f894 251e ldrb.w r2, [r4, #1310] ; 0x51e -10028c4e: 4293 cmp r3, r2 -10028c50: d1a7 bne.n 10028ba2 -10028c52: 463a mov r2, r7 -10028c54: 4628 mov r0, r5 -10028c56: 2100 movs r1, #0 -10028c58: 4633 mov r3, r6 -10028c5a: f015 fe25 bl 1003e8a8 <__rtw_get_ie_veneer> -10028c5e: 4607 mov r7, r0 -10028c60: 2800 cmp r0, #0 -10028c62: d176 bne.n 10028d52 -10028c64: 2700 movs r7, #0 -10028c66: f88d 7028 strb.w r7, [sp, #40] ; 0x28 -10028c6a: a80a add r0, sp, #40 ; 0x28 -10028c6c: f104 01a8 add.w r1, r4, #168 ; 0xa8 -10028c70: 2220 movs r2, #32 -10028c72: f7ee fbd5 bl 10017420 -10028c76: b118 cbz r0, 10028c80 -10028c78: f8d4 30a4 ldr.w r3, [r4, #164] ; 0xa4 -10028c7c: 429f cmp r7, r3 -10028c7e: d004 beq.n 10028c8a -10028c80: f89d 3028 ldrb.w r3, [sp, #40] ; 0x28 -10028c84: b10b cbz r3, 10028c8a -10028c86: 2f00 cmp r7, #0 -10028c88: d18b bne.n 10028ba2 -10028c8a: f109 0918 add.w r9, r9, #24 -10028c8e: 4648 mov r0, r9 -10028c90: f7f4 fc8e bl 1001d5b0 -10028c94: 2202 movs r2, #2 -10028c96: 4601 mov r1, r0 -10028c98: f10d 000e add.w r0, sp, #14 -10028c9c: f7ee fbb8 bl 10017410 -10028ca0: f8bd 300e ldrh.w r3, [sp, #14] -10028ca4: f8d4 70cc ldr.w r7, [r4, #204] ; 0xcc -10028ca8: f3c3 1300 ubfx r3, r3, #4, #1 -10028cac: 429f cmp r7, r3 -10028cae: f47f af78 bne.w 10028ba2 -10028cb2: 2200 movs r2, #0 -10028cb4: ab04 add r3, sp, #16 -10028cb6: 9301 str r3, [sp, #4] -10028cb8: 9200 str r2, [sp, #0] -10028cba: f10d 0312 add.w r3, sp, #18 -10028cbe: 4648 mov r0, r9 -10028cc0: 4651 mov r1, sl -10028cc2: f015 fdd9 bl 1003e878 <__rtw_get_sec_ie_veneer> -10028cc6: f8bd 3012 ldrh.w r3, [sp, #18] -10028cca: b923 cbnz r3, 10028cd6 -10028ccc: f8bd 3010 ldrh.w r3, [sp, #16] -10028cd0: b91b cbnz r3, 10028cda -10028cd2: b2fb uxtb r3, r7 -10028cd4: e002 b.n 10028cdc -10028cd6: 2303 movs r3, #3 -10028cd8: e000 b.n 10028cdc -10028cda: 2302 movs r3, #2 -10028cdc: f894 2414 ldrb.w r2, [r4, #1044] ; 0x414 -10028ce0: 429a cmp r2, r3 -10028ce2: f47f af5e bne.w 10028ba2 -10028ce6: 3b02 subs r3, #2 -10028ce8: 2b01 cmp r3, #1 -10028cea: f63f af4d bhi.w 10028b88 -10028cee: 4628 mov r0, r5 -10028cf0: a909 add r1, sp, #36 ; 0x24 -10028cf2: 4632 mov r2, r6 -10028cf4: f015 fdd0 bl 1003e898 <__rtw_get_wpa2_ie_veneer> -10028cf8: b148 cbz r0, 10028d0e -10028cfa: 9909 ldr r1, [sp, #36] ; 0x24 -10028cfc: b139 cbz r1, 10028d0e -10028cfe: ab08 add r3, sp, #32 -10028d00: 9300 str r3, [sp, #0] -10028d02: 3102 adds r1, #2 -10028d04: aa06 add r2, sp, #24 -10028d06: ab07 add r3, sp, #28 -10028d08: f015 fd9e bl 1003e848 <__rtw_parse_wpa2_ie_veneer> -10028d0c: e00e b.n 10028d2c -10028d0e: 4628 mov r0, r5 -10028d10: a909 add r1, sp, #36 ; 0x24 -10028d12: 4632 mov r2, r6 -10028d14: f015 fdb4 bl 1003e880 <__rtw_get_wpa_ie_veneer> -10028d18: b140 cbz r0, 10028d2c -10028d1a: 9909 ldr r1, [sp, #36] ; 0x24 -10028d1c: b131 cbz r1, 10028d2c -10028d1e: ab08 add r3, sp, #32 -10028d20: 9300 str r3, [sp, #0] -10028d22: 3102 adds r1, #2 -10028d24: aa06 add r2, sp, #24 -10028d26: ab07 add r3, sp, #28 -10028d28: f015 fd9a bl 1003e860 <__rtw_parse_wpa_ie_veneer> -10028d2c: f8d4 241c ldr.w r2, [r4, #1052] ; 0x41c -10028d30: 9b07 ldr r3, [sp, #28] -10028d32: 421a tst r2, r3 -10028d34: f43f af35 beq.w 10028ba2 -10028d38: f8d4 2418 ldr.w r2, [r4, #1048] ; 0x418 -10028d3c: 9b06 ldr r3, [sp, #24] -10028d3e: 421a tst r2, r3 -10028d40: f43f af2f beq.w 10028ba2 -10028d44: f8d4 0420 ldr.w r0, [r4, #1056] ; 0x420 -10028d48: 9b08 ldr r3, [sp, #32] -10028d4a: 1a1b subs r3, r3, r0 -10028d4c: 4258 negs r0, r3 -10028d4e: 4158 adcs r0, r3 -10028d50: e008 b.n 10028d64 -10028d52: 7842 ldrb r2, [r0, #1] -10028d54: 2a00 cmp r2, #0 -10028d56: d085 beq.n 10028c64 -10028d58: 1cb9 adds r1, r7, #2 -10028d5a: a80a add r0, sp, #40 ; 0x28 -10028d5c: f7ee fb58 bl 10017410 -10028d60: 787f ldrb r7, [r7, #1] -10028d62: e782 b.n 10028c6a -10028d64: b013 add sp, #76 ; 0x4c -10028d66: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -10028d6a : -10028d6a: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10028d6e: 4604 mov r4, r0 -10028d70: 460f mov r7, r1 -10028d72: 4698 mov r8, r3 -10028d74: f1a2 0924 sub.w r9, r2, #36 ; 0x24 -10028d78: 2500 movs r5, #0 -10028d7a: 454d cmp r5, r9 -10028d7c: d21d bcs.n 10028dba -10028d7e: f105 0024 add.w r0, r5, #36 ; 0x24 -10028d82: 183e adds r6, r7, r0 -10028d84: 5c38 ldrb r0, [r7, r0] -10028d86: 282a cmp r0, #42 ; 0x2a -10028d88: d00b beq.n 10028da2 -10028d8a: 283d cmp r0, #61 ; 0x3d -10028d8c: d111 bne.n 10028db2 -10028d8e: f8d4 3454 ldr.w r3, [r4, #1108] ; 0x454 -10028d92: b173 cbz r3, 10028db2 -10028d94: 7873 ldrb r3, [r6, #1] -10028d96: 2b16 cmp r3, #22 -10028d98: d80b bhi.n 10028db2 -10028d9a: 2300 movs r3, #0 -10028d9c: f884 373f strb.w r3, [r4, #1855] ; 0x73f -10028da0: e007 b.n 10028db2 -10028da2: 4620 mov r0, r4 -10028da4: 4631 mov r1, r6 -10028da6: f7ff fea1 bl 10028aec -10028daa: 4620 mov r0, r4 -10028dac: 4641 mov r1, r8 -10028dae: f7ff feab bl 10028b08 -10028db2: 7873 ldrb r3, [r6, #1] -10028db4: 3302 adds r3, #2 -10028db6: 441d add r5, r3 -10028db8: e7df b.n 10028d7a -10028dba: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - ... - -10028dc0 : -10028dc0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10028dc4: f100 0798 add.w r7, r0, #152 ; 0x98 -10028dc8: 4606 mov r6, r0 -10028dca: 4638 mov r0, r7 -10028dcc: f7f4 fbf2 bl 1001d5b4 -10028dd0: 06c3 lsls r3, r0, #27 -10028dd2: d402 bmi.n 10028dda -10028dd4: 2000 movs r0, #0 -10028dd6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10028dda: 250c movs r5, #12 -10028ddc: f8d6 3110 ldr.w r3, [r6, #272] ; 0x110 -10028de0: 429d cmp r5, r3 -10028de2: d2f7 bcs.n 10028dd4 -10028de4: f105 0478 add.w r4, r5, #120 ; 0x78 -10028de8: 443c add r4, r7 -10028dea: 7923 ldrb r3, [r4, #4] -10028dec: f104 0804 add.w r8, r4, #4 -10028df0: 2b30 cmp r3, #48 ; 0x30 -10028df2: d011 beq.n 10028e18 -10028df4: 2bdd cmp r3, #221 ; 0xdd -10028df6: d113 bne.n 10028e20 -10028df8: 1da0 adds r0, r4, #6 -10028dfa: 490c ldr r1, [pc, #48] ; (10028e2c ) -10028dfc: 2204 movs r2, #4 -10028dfe: f7ee fb0f bl 10017420 -10028e02: b168 cbz r0, 10028e20 -10028e04: 490a ldr r1, [pc, #40] ; (10028e30 ) -10028e06: f104 0012 add.w r0, r4, #18 -10028e0a: 2204 movs r2, #4 -10028e0c: f7ee fb08 bl 10017420 -10028e10: b130 cbz r0, 10028e20 -10028e12: 2001 movs r0, #1 -10028e14: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10028e18: f104 000e add.w r0, r4, #14 -10028e1c: 4905 ldr r1, [pc, #20] ; (10028e34 ) -10028e1e: e7f4 b.n 10028e0a -10028e20: f898 3001 ldrb.w r3, [r8, #1] -10028e24: 3302 adds r3, #2 -10028e26: 441d add r5, r3 -10028e28: e7d8 b.n 10028ddc -10028e2a: bf00 nop -10028e2c: 100414dc .word 0x100414dc -10028e30: 00035418 .word 0x00035418 -10028e34: 1004143d .word 0x1004143d - -10028e38 : -10028e38: f000 007f and.w r0, r0, #127 ; 0x7f -10028e3c: 2818 cmp r0, #24 -10028e3e: d023 beq.n 10028e88 -10028e40: d80c bhi.n 10028e5c -10028e42: 280c cmp r0, #12 -10028e44: d024 beq.n 10028e90 -10028e46: d804 bhi.n 10028e52 -10028e48: 2804 cmp r0, #4 -10028e4a: d027 beq.n 10028e9c -10028e4c: 280b cmp r0, #11 -10028e4e: d023 beq.n 10028e98 -10028e50: e010 b.n 10028e74 -10028e52: 2812 cmp r0, #18 -10028e54: d01a beq.n 10028e8c -10028e56: 2816 cmp r0, #22 -10028e58: d01c beq.n 10028e94 -10028e5a: e00b b.n 10028e74 -10028e5c: 2848 cmp r0, #72 ; 0x48 -10028e5e: d00d beq.n 10028e7c -10028e60: d804 bhi.n 10028e6c -10028e62: 2824 cmp r0, #36 ; 0x24 -10028e64: d00e beq.n 10028e84 -10028e66: 2830 cmp r0, #48 ; 0x30 -10028e68: d00a beq.n 10028e80 -10028e6a: e003 b.n 10028e74 -10028e6c: 2860 cmp r0, #96 ; 0x60 -10028e6e: d003 beq.n 10028e78 -10028e70: 286c cmp r0, #108 ; 0x6c -10028e72: d015 beq.n 10028ea0 -10028e74: 2000 movs r0, #0 -10028e76: 4770 bx lr -10028e78: 200a movs r0, #10 -10028e7a: 4770 bx lr -10028e7c: 2009 movs r0, #9 -10028e7e: 4770 bx lr -10028e80: 2008 movs r0, #8 -10028e82: 4770 bx lr -10028e84: 2007 movs r0, #7 -10028e86: 4770 bx lr -10028e88: 2006 movs r0, #6 -10028e8a: 4770 bx lr -10028e8c: 2005 movs r0, #5 -10028e8e: 4770 bx lr -10028e90: 2004 movs r0, #4 -10028e92: 4770 bx lr -10028e94: 2003 movs r0, #3 -10028e96: 4770 bx lr -10028e98: 2002 movs r0, #2 -10028e9a: 4770 bx lr -10028e9c: 2001 movs r0, #1 -10028e9e: 4770 bx lr -10028ea0: 200b movs r0, #11 -10028ea2: 4770 bx lr - -10028ea4 : -10028ea4: b5f8 push {r3, r4, r5, r6, r7, lr} -10028ea6: 2400 movs r4, #0 -10028ea8: 4606 mov r6, r0 -10028eaa: 290d cmp r1, #13 -10028eac: bf34 ite cc -10028eae: 460f movcc r7, r1 -10028eb0: 270d movcs r7, #13 -10028eb2: 4625 mov r5, r4 -10028eb4: 42bd cmp r5, r7 -10028eb6: d00a beq.n 10028ece -10028eb8: 5d70 ldrb r0, [r6, r5] -10028eba: 0603 lsls r3, r0, #24 -10028ebc: d505 bpl.n 10028eca -10028ebe: f7ff ffbb bl 10028e38 -10028ec2: 2301 movs r3, #1 -10028ec4: fa03 f000 lsl.w r0, r3, r0 -10028ec8: 4304 orrs r4, r0 -10028eca: 3501 adds r5, #1 -10028ecc: e7f2 b.n 10028eb4 -10028ece: 4620 mov r0, r4 -10028ed0: bdf8 pop {r3, r4, r5, r6, r7, pc} - -10028ed2 : -10028ed2: b5f8 push {r3, r4, r5, r6, r7, lr} -10028ed4: 2400 movs r4, #0 -10028ed6: 4606 mov r6, r0 -10028ed8: 290d cmp r1, #13 -10028eda: bf34 ite cc -10028edc: 460f movcc r7, r1 -10028ede: 270d movcs r7, #13 -10028ee0: 4625 mov r5, r4 -10028ee2: 42bd cmp r5, r7 -10028ee4: d008 beq.n 10028ef8 -10028ee6: 5d70 ldrb r0, [r6, r5] -10028ee8: f7ff ffa6 bl 10028e38 -10028eec: 2301 movs r3, #1 -10028eee: fa03 f000 lsl.w r0, r3, r0 -10028ef2: 441d add r5, r3 -10028ef4: 4304 orrs r4, r0 -10028ef6: e7f4 b.n 10028ee2 -10028ef8: 4620 mov r0, r4 -10028efa: bdf8 pop {r3, r4, r5, r6, r7, pc} - -10028efc : -10028efc: 78c3 ldrb r3, [r0, #3] -10028efe: 7902 ldrb r2, [r0, #4] -10028f00: 0318 lsls r0, r3, #12 -10028f02: ea40 5002 orr.w r0, r0, r2, lsl #20 -10028f06: 4770 bx lr - -10028f08 : -10028f08: f890 3734 ldrb.w r3, [r0, #1844] ; 0x734 -10028f0c: b17b cbz r3, 10028f2e -10028f0e: f890 372e ldrb.w r3, [r0, #1838] ; 0x72e -10028f12: 2b04 cmp r3, #4 -10028f14: d00d beq.n 10028f32 -10028f16: f890 351f ldrb.w r3, [r0, #1311] ; 0x51f -10028f1a: 8808 ldrh r0, [r1, #0] -10028f1c: f013 0f01 tst.w r3, #1 -10028f20: bf0c ite eq -10028f22: 2305 moveq r3, #5 -10028f24: 2306 movne r3, #6 -10028f26: 4118 asrs r0, r3 -10028f28: f000 0001 and.w r0, r0, #1 -10028f2c: 4770 bx lr -10028f2e: 4618 mov r0, r3 -10028f30: 4770 bx lr -10028f32: 2000 movs r0, #0 -10028f34: 4770 bx lr - -10028f36 : -10028f36: 231b movs r3, #27 -10028f38: fa20 f203 lsr.w r2, r0, r3 -10028f3c: f012 0201 ands.w r2, r2, #1 -10028f40: d001 beq.n 10028f46 -10028f42: b2d8 uxtb r0, r3 -10028f44: 4770 bx lr -10028f46: f113 33ff adds.w r3, r3, #4294967295 -10028f4a: d2f5 bcs.n 10028f38 -10028f4c: 4610 mov r0, r2 -10028f4e: 4770 bx lr - -10028f50 : -10028f50: 4608 mov r0, r1 -10028f52: 2100 movs r1, #0 -10028f54: f009 bb48 b.w 100325e8 - -10028f58 : -10028f58: 4608 mov r0, r1 -10028f5a: 2100 movs r1, #0 -10028f5c: f009 bb44 b.w 100325e8 - -10028f60 : -10028f60: b530 push {r4, r5, lr} -10028f62: b085 sub sp, #20 -10028f64: 460d mov r5, r1 -10028f66: 4604 mov r4, r0 -10028f68: 2100 movs r1, #0 -10028f6a: 4668 mov r0, sp -10028f6c: 2210 movs r2, #16 -10028f6e: f7ee fa5f bl 10017430 -10028f72: 07eb lsls r3, r5, #31 -10028f74: 4668 mov r0, sp -10028f76: d50a bpl.n 10028f8e -10028f78: 2d01 cmp r5, #1 -10028f7a: bf0b itete eq -10028f7c: 490b ldreq r1, [pc, #44] ; (10028fac ) -10028f7e: 490c ldrne r1, [pc, #48] ; (10028fb0 ) -10028f80: 2204 moveq r2, #4 -10028f82: 2207 movne r2, #7 -10028f84: f7ee fa44 bl 10017410 -10028f88: 4620 mov r0, r4 -10028f8a: 2102 movs r1, #2 -10028f8c: e005 b.n 10028f9a -10028f8e: 4909 ldr r1, [pc, #36] ; (10028fb4 ) -10028f90: 2203 movs r2, #3 -10028f92: f7ee fa3d bl 10017410 -10028f96: 4620 mov r0, r4 -10028f98: 210c movs r1, #12 -10028f9a: f7f5 fc33 bl 1001e804 -10028f9e: 4620 mov r0, r4 -10028fa0: 2106 movs r1, #6 -10028fa2: 466a mov r2, sp -10028fa4: f009 fa95 bl 100324d2 -10028fa8: b005 add sp, #20 -10028faa: bd30 pop {r4, r5, pc} -10028fac: 100416c0 .word 0x100416c0 -10028fb0: 100416d0 .word 0x100416d0 -10028fb4: 100416d7 .word 0x100416d7 - -10028fb8 : -10028fb8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10028fbc: 4606 mov r6, r0 -10028fbe: 4688 mov r8, r1 -10028fc0: 250c movs r5, #12 -10028fc2: 4545 cmp r5, r8 -10028fc4: d24d bcs.n 10029062 -10028fc6: 5d73 ldrb r3, [r6, r5] -10028fc8: 1977 adds r7, r6, r5 -10028fca: 2bdd cmp r3, #221 ; 0xdd -10028fcc: d145 bne.n 1002905a -10028fce: 1cbc adds r4, r7, #2 -10028fd0: 4620 mov r0, r4 -10028fd2: 492d ldr r1, [pc, #180] ; (10029088 ) -10028fd4: 2203 movs r2, #3 -10028fd6: f7ee fa23 bl 10017420 -10028fda: b110 cbz r0, 10028fe2 -10028fdc: 2005 movs r0, #5 -10028fde: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10028fe2: 4620 mov r0, r4 -10028fe4: 4929 ldr r1, [pc, #164] ; (1002908c ) -10028fe6: 2203 movs r2, #3 -10028fe8: f7ee fa1a bl 10017420 -10028fec: 2800 cmp r0, #0 -10028fee: d1f5 bne.n 10028fdc -10028ff0: 4620 mov r0, r4 -10028ff2: 4927 ldr r1, [pc, #156] ; (10029090 ) -10028ff4: 2203 movs r2, #3 -10028ff6: f7ee fa13 bl 10017420 -10028ffa: b110 cbz r0, 10029002 -10028ffc: 2003 movs r0, #3 -10028ffe: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10029002: 4620 mov r0, r4 -10029004: 4923 ldr r1, [pc, #140] ; (10029094 ) -10029006: 2203 movs r2, #3 -10029008: f7ee fa0a bl 10017420 -1002900c: 2800 cmp r0, #0 -1002900e: d1f5 bne.n 10028ffc -10029010: 4620 mov r0, r4 -10029012: 4920 ldr r1, [pc, #128] ; (10029094 ) -10029014: 2203 movs r2, #3 -10029016: f7ee fa03 bl 10017420 -1002901a: 2800 cmp r0, #0 -1002901c: d1ee bne.n 10028ffc -1002901e: 4620 mov r0, r4 -10029020: 491d ldr r1, [pc, #116] ; (10029098 ) -10029022: 2203 movs r2, #3 -10029024: f7ee f9fc bl 10017420 -10029028: b9f0 cbnz r0, 10029068 -1002902a: 4620 mov r0, r4 -1002902c: 491b ldr r1, [pc, #108] ; (1002909c ) -1002902e: 2203 movs r2, #3 -10029030: f7ee f9f6 bl 10017420 -10029034: b9d8 cbnz r0, 1002906e -10029036: 4620 mov r0, r4 -10029038: 4919 ldr r1, [pc, #100] ; (100290a0 ) -1002903a: 2203 movs r2, #3 -1002903c: f7ee f9f0 bl 10017420 -10029040: b9c0 cbnz r0, 10029074 -10029042: 4620 mov r0, r4 -10029044: 4917 ldr r1, [pc, #92] ; (100290a4 ) -10029046: 2203 movs r2, #3 -10029048: f7ee f9ea bl 10017420 -1002904c: b9a8 cbnz r0, 1002907a -1002904e: 4620 mov r0, r4 -10029050: 4915 ldr r1, [pc, #84] ; (100290a8 ) -10029052: 2203 movs r2, #3 -10029054: f7ee f9e4 bl 10017420 -10029058: b990 cbnz r0, 10029080 -1002905a: 787b ldrb r3, [r7, #1] -1002905c: 3302 adds r3, #2 -1002905e: 441d add r5, r3 -10029060: e7af b.n 10028fc2 -10029062: 2000 movs r0, #0 -10029064: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10029068: 2008 movs r0, #8 -1002906a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1002906e: 2004 movs r0, #4 -10029070: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10029074: 2006 movs r0, #6 -10029076: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1002907a: 2001 movs r0, #1 -1002907c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10029080: 200b movs r0, #11 -10029082: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10029086: bf00 nop -10029088: 100416ae .word 0x100416ae -1002908c: 100416b1 .word 0x100416b1 -10029090: 100416c4 .word 0x100416c4 -10029094: 100416c7 .word 0x100416c7 -10029098: 100416ba .word 0x100416ba -1002909c: 100416b7 .word 0x100416b7 -100290a0: 100416bd .word 0x100416bd -100290a4: 100416b4 .word 0x100416b4 -100290a8: 100416da .word 0x100416da - -100290ac : -100290ac: b507 push {r0, r1, r2, lr} -100290ae: f890 272e ldrb.w r2, [r0, #1838] ; 0x72e -100290b2: 4603 mov r3, r0 -100290b4: 2a04 cmp r2, #4 -100290b6: d00f beq.n 100290d8 -100290b8: 2a08 cmp r2, #8 -100290ba: d008 beq.n 100290ce -100290bc: 2a01 cmp r2, #1 -100290be: d11b bne.n 100290f8 -100290c0: aa02 add r2, sp, #8 -100290c2: f06f 0304 mvn.w r3, #4 -100290c6: f842 3d04 str.w r3, [r2, #-4]! -100290ca: 211b movs r1, #27 -100290cc: e011 b.n 100290f2 -100290ce: 2201 movs r2, #1 -100290d0: f880 2738 strb.w r2, [r0, #1848] ; 0x738 -100290d4: 2200 movs r2, #0 -100290d6: e013 b.n 10029100 -100290d8: 2200 movs r2, #0 -100290da: f880 2738 strb.w r2, [r0, #1848] ; 0x738 -100290de: 2201 movs r2, #1 -100290e0: f880 2739 strb.w r2, [r0, #1849] ; 0x739 -100290e4: f06f 0304 mvn.w r3, #4 -100290e8: aa02 add r2, sp, #8 -100290ea: f842 3d08 str.w r3, [r2, #-8]! -100290ee: 211b movs r1, #27 -100290f0: 466a mov r2, sp -100290f2: f009 f9ee bl 100324d2 -100290f6: e005 b.n 10029104 -100290f8: 2200 movs r2, #0 -100290fa: f880 2738 strb.w r2, [r0, #1848] ; 0x738 -100290fe: 2201 movs r2, #1 -10029100: f883 2739 strb.w r2, [r3, #1849] ; 0x739 -10029104: b003 add sp, #12 -10029106: f85d fb04 ldr.w pc, [sp], #4 - -1002910a : -1002910a: b537 push {r0, r1, r2, r4, r5, lr} -1002910c: f001 0320 and.w r3, r1, #32 -10029110: b29b uxth r3, r3 -10029112: 4604 mov r4, r0 -10029114: 460d mov r5, r1 -10029116: f890 2730 ldrb.w r2, [r0, #1840] ; 0x730 -1002911a: b13b cbz r3, 1002912c -1002911c: 2a03 cmp r2, #3 -1002911e: d010 beq.n 10029142 -10029120: 2301 movs r3, #1 -10029122: aa02 add r2, sp, #8 -10029124: f802 3d01 strb.w r3, [r2, #-1]! -10029128: 2303 movs r3, #3 -1002912a: e005 b.n 10029138 -1002912c: 2a01 cmp r2, #1 -1002912e: d008 beq.n 10029142 -10029130: aa02 add r2, sp, #8 -10029132: f802 3d01 strb.w r3, [r2, #-1]! -10029136: 2301 movs r3, #1 -10029138: f884 3730 strb.w r3, [r4, #1840] ; 0x730 -1002913c: 2113 movs r1, #19 -1002913e: f009 f9c8 bl 100324d2 -10029142: 07ab lsls r3, r5, #30 -10029144: d501 bpl.n 1002914a -10029146: 2314 movs r3, #20 -10029148: e00c b.n 10029164 -1002914a: f894 3521 ldrb.w r3, [r4, #1313] ; 0x521 -1002914e: f013 0f0a tst.w r3, #10 -10029152: d00d beq.n 10029170 -10029154: f415 6f80 tst.w r5, #1024 ; 0x400 -10029158: f894 372f ldrb.w r3, [r4, #1839] ; 0x72f -1002915c: d005 beq.n 1002916a -1002915e: 2b09 cmp r3, #9 -10029160: d00a beq.n 10029178 -10029162: 2309 movs r3, #9 -10029164: f884 372f strb.w r3, [r4, #1839] ; 0x72f -10029168: e006 b.n 10029178 -1002916a: 2b14 cmp r3, #20 -1002916c: d1eb bne.n 10029146 -1002916e: e003 b.n 10029178 -10029170: f013 0f14 tst.w r3, #20 -10029174: d0e7 beq.n 10029146 -10029176: e7f4 b.n 10029162 -10029178: 4620 mov r0, r4 -1002917a: 2111 movs r1, #17 -1002917c: f204 722f addw r2, r4, #1839 ; 0x72f -10029180: f009 f9a7 bl 100324d2 -10029184: b003 add sp, #12 -10029186: bd30 pop {r4, r5, pc} - -10029188 : -10029188: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1002918a: f100 06fc add.w r6, r0, #252 ; 0xfc -1002918e: 4604 mov r4, r0 -10029190: 4630 mov r0, r6 -10029192: f015 fc01 bl 1003e998 <__rtw_get_rateset_len_veneer> -10029196: f894 3736 ldrb.w r3, [r4, #1846] ; 0x736 -1002919a: 4607 mov r7, r0 -1002919c: b12b cbz r3, 100291aa -1002919e: f894 3735 ldrb.w r3, [r4, #1845] ; 0x735 -100291a2: b113 cbz r3, 100291aa -100291a4: 2301 movs r3, #1 -100291a6: f884 3734 strb.w r3, [r4, #1844] ; 0x734 -100291aa: f894 351e ldrb.w r3, [r4, #1310] ; 0x51e -100291ae: 2b0e cmp r3, #14 -100291b0: f894 3734 ldrb.w r3, [r4, #1844] ; 0x734 -100291b4: d904 bls.n 100291c0 -100291b6: 2b00 cmp r3, #0 -100291b8: bf14 ite ne -100291ba: 2314 movne r3, #20 -100291bc: 2304 moveq r3, #4 -100291be: e016 b.n 100291ee -100291c0: 2b00 cmp r3, #0 -100291c2: 4630 mov r0, r6 -100291c4: 4639 mov r1, r7 -100291c6: bf14 ite ne -100291c8: 2508 movne r5, #8 -100291ca: 2500 moveq r5, #0 -100291cc: f7ff f912 bl 100283f4 -100291d0: 2801 cmp r0, #1 -100291d2: d102 bne.n 100291da -100291d4: f045 0301 orr.w r3, r5, #1 -100291d8: e009 b.n 100291ee -100291da: 4630 mov r0, r6 -100291dc: 4639 mov r1, r7 -100291de: f7ff f8f5 bl 100283cc -100291e2: 2801 cmp r0, #1 -100291e4: bf0c ite eq -100291e6: f045 0303 orreq.w r3, r5, #3 -100291ea: f045 0302 orrne.w r3, r5, #2 -100291ee: f241 32b5 movw r2, #5045 ; 0x13b5 -100291f2: 5ca2 ldrb r2, [r4, r2] -100291f4: 2112 movs r1, #18 -100291f6: 4013 ands r3, r2 -100291f8: f884 3521 strb.w r3, [r4, #1313] ; 0x521 -100291fc: 4b09 ldr r3, [pc, #36] ; (10029224 ) -100291fe: aa02 add r2, sp, #8 -10029200: f842 3d04 str.w r3, [r2, #-4]! -10029204: f504 53ba add.w r3, r4, #5952 ; 0x1740 -10029208: 4620 mov r0, r4 -1002920a: 681b ldr r3, [r3, #0] -1002920c: 4798 blx r3 -1002920e: f894 3521 ldrb.w r3, [r4, #1313] ; 0x521 -10029212: 4620 mov r0, r4 -10029214: 07db lsls r3, r3, #31 -10029216: bf4c ite mi -10029218: 2102 movmi r1, #2 -1002921a: 210c movpl r1, #12 -1002921c: f7f5 faf2 bl 1001e804 -10029220: b003 add sp, #12 -10029222: bdf0 pop {r4, r5, r6, r7, pc} -10029224: 0a0a0808 .word 0x0a0a0808 - -10029228 : -10029228: f890 3521 ldrb.w r3, [r0, #1313] ; 0x521 -1002922c: 3109 adds r1, #9 -1002922e: f013 0f01 tst.w r3, #1 -10029232: f500 60d0 add.w r0, r0, #1664 ; 0x680 -10029236: eb00 1041 add.w r0, r0, r1, lsl #5 -1002923a: f04f 0204 mov.w r2, #4 -1002923e: bf14 ite ne -10029240: 4901 ldrne r1, [pc, #4] ; (10029248 ) -10029242: 4902 ldreq r1, [pc, #8] ; (1002924c ) -10029244: f7ee b8e4 b.w 10017410 -10029248: 100416c0 .word 0x100416c0 -1002924c: 100416d7 .word 0x100416d7 - -10029250 : -10029250: 69cb ldr r3, [r1, #28] -10029252: 6989 ldr r1, [r1, #24] -10029254: 2200 movs r2, #0 -10029256: f500 7050 add.w r0, r0, #832 ; 0x340 -1002925a: 430a orrs r2, r1 -1002925c: e9c0 2300 strd r2, r3, [r0] -10029260: 4770 bx lr - -10029262 : -10029262: 2109 movs r1, #9 -10029264: 2200 movs r2, #0 -10029266: f009 b934 b.w 100324d2 - -1002926a <_init_txservq>: -1002926a: b510 push {r4, lr} -1002926c: 4604 mov r4, r0 -1002926e: f7ee f8e7 bl 10017440 -10029272: f104 0008 add.w r0, r4, #8 -10029276: f7ee f991 bl 1001759c -1002927a: 2300 movs r3, #0 -1002927c: 6163 str r3, [r4, #20] -1002927e: bd10 pop {r4, pc} - -10029280 : -10029280: b530 push {r4, r5, lr} -10029282: 4605 mov r5, r0 -10029284: b08b sub sp, #44 ; 0x2c -10029286: 460c mov r4, r1 -10029288: 6800 ldr r0, [r0, #0] -1002928a: 4629 mov r1, r5 -1002928c: f00d fb07 bl 1003689e <_rtw_open_pktfile> -10029290: 4628 mov r0, r5 -10029292: a901 add r1, sp, #4 -10029294: 220e movs r2, #14 -10029296: f00d fb0b bl 100368b0 <_rtw_pktfile_read> -1002929a: 88a3 ldrh r3, [r4, #4] -1002929c: f5b3 6f00 cmp.w r3, #2048 ; 0x800 -100292a0: d108 bne.n 100292b4 -100292a2: 4628 mov r0, r5 -100292a4: a905 add r1, sp, #20 -100292a6: 2214 movs r2, #20 -100292a8: f00d fb02 bl 100368b0 <_rtw_pktfile_read> -100292ac: f89d 3015 ldrb.w r3, [sp, #21] -100292b0: 095b lsrs r3, r3, #5 -100292b2: e005 b.n 100292c0 -100292b4: f648 028e movw r2, #34958 ; 0x888e -100292b8: 4293 cmp r3, r2 -100292ba: bf0c ite eq -100292bc: 2307 moveq r3, #7 -100292be: 2300 movne r3, #0 -100292c0: f884 3039 strb.w r3, [r4, #57] ; 0x39 -100292c4: 231a movs r3, #26 -100292c6: 8163 strh r3, [r4, #10] -100292c8: 2388 movs r3, #136 ; 0x88 -100292ca: 7063 strb r3, [r4, #1] -100292cc: b00b add sp, #44 ; 0x2c -100292ce: bd30 pop {r4, r5, pc} - -100292d0 <_rtw_init_sta_xmit_priv>: -100292d0: b510 push {r4, lr} -100292d2: 2100 movs r1, #0 -100292d4: 4604 mov r4, r0 -100292d6: 229c movs r2, #156 ; 0x9c -100292d8: f7ee f8aa bl 10017430 -100292dc: 4620 mov r0, r4 -100292de: f7ee f955 bl 1001758c -100292e2: f104 000c add.w r0, r4, #12 -100292e6: f7ff ffc0 bl 1002926a <_init_txservq> -100292ea: f104 0024 add.w r0, r4, #36 ; 0x24 -100292ee: f7ff ffbc bl 1002926a <_init_txservq> -100292f2: f104 003c add.w r0, r4, #60 ; 0x3c -100292f6: f7ff ffb8 bl 1002926a <_init_txservq> -100292fa: f104 0054 add.w r0, r4, #84 ; 0x54 -100292fe: f7ff ffb4 bl 1002926a <_init_txservq> -10029302: f104 006c add.w r0, r4, #108 ; 0x6c -10029306: f7ee f89b bl 10017440 -1002930a: f104 0074 add.w r0, r4, #116 ; 0x74 -1002930e: e8bd 4010 ldmia.w sp!, {r4, lr} -10029312: f7ee b895 b.w 10017440 - -10029316 : -10029316: b510 push {r4, lr} -10029318: 4604 mov r4, r0 -1002931a: f7ee f945 bl 100175a8 -1002931e: f104 000c add.w r0, r4, #12 -10029322: f7ee f941 bl 100175a8 -10029326: f104 0018 add.w r0, r4, #24 -1002932a: f7ee f93d bl 100175a8 -1002932e: f104 0024 add.w r0, r4, #36 ; 0x24 -10029332: f7ee f939 bl 100175a8 -10029336: f104 0030 add.w r0, r4, #48 ; 0x30 -1002933a: f7ee f935 bl 100175a8 -1002933e: f104 003c add.w r0, r4, #60 ; 0x3c -10029342: f7ee f931 bl 100175a8 -10029346: f104 0054 add.w r0, r4, #84 ; 0x54 -1002934a: f7ee f92d bl 100175a8 -1002934e: f504 70de add.w r0, r4, #444 ; 0x1bc -10029352: f7ee f929 bl 100175a8 -10029356: f504 70e4 add.w r0, r4, #456 ; 0x1c8 -1002935a: e8bd 4010 ldmia.w sp!, {r4, lr} -1002935e: f7ee b923 b.w 100175a8 - -10029362 : -10029362: 2907 cmp r1, #7 -10029364: d818 bhi.n 10029398 -10029366: 2301 movs r3, #1 -10029368: 408b lsls r3, r1 -1002936a: f013 0f09 tst.w r3, #9 -1002936e: d10a bne.n 10029386 -10029370: f013 0fc0 tst.w r3, #192 ; 0xc0 -10029374: d10c bne.n 10029390 -10029376: f013 0f30 tst.w r3, #48 ; 0x30 -1002937a: d00d beq.n 10029398 -1002937c: f010 0f04 tst.w r0, #4 -10029380: bf18 it ne -10029382: 2100 movne r1, #0 -10029384: e008 b.n 10029398 -10029386: f010 0f02 tst.w r0, #2 -1002938a: bf18 it ne -1002938c: 2101 movne r1, #1 -1002938e: e003 b.n 10029398 -10029390: f010 0f08 tst.w r0, #8 -10029394: bf18 it ne -10029396: 2105 movne r1, #5 -10029398: 4608 mov r0, r1 -1002939a: 4770 bx lr - -1002939c : -1002939c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -100293a0: 6f0f ldr r7, [r1, #112] ; 0x70 -100293a2: b090 sub sp, #64 ; 0x40 -100293a4: 2300 movs r3, #0 -100293a6: 4606 mov r6, r0 -100293a8: 460c mov r4, r1 -100293aa: 9301 str r3, [sp, #4] -100293ac: f891 8057 ldrb.w r8, [r1, #87] ; 0x57 -100293b0: b92f cbnz r7, 100293be -100293b2: f500 6046 add.w r0, r0, #3168 ; 0xc60 -100293b6: 3157 adds r1, #87 ; 0x57 -100293b8: f7fe ff6c bl 10028294 -100293bc: 4607 mov r7, r0 -100293be: 7f23 ldrb r3, [r4, #28] -100293c0: 2b02 cmp r3, #2 -100293c2: f040 8096 bne.w 100294f2 -100293c6: 2f00 cmp r7, #0 -100293c8: f000 8093 beq.w 100294f2 -100293cc: a806 add r0, sp, #24 -100293ce: 2100 movs r1, #0 -100293d0: 2210 movs r2, #16 -100293d2: f014 fc17 bl 1003dc04 -100293d6: f018 0f01 tst.w r8, #1 -100293da: f8d4 5080 ldr.w r5, [r4, #128] ; 0x80 -100293de: d013 beq.n 10029408 -100293e0: f8d6 0d68 ldr.w r0, [r6, #3432] ; 0xd68 -100293e4: f606 5708 addw r7, r6, #3336 ; 0xd08 -100293e8: eb07 1000 add.w r0, r7, r0, lsl #4 -100293ec: 30a4 adds r0, #164 ; 0xa4 -100293ee: a906 add r1, sp, #24 -100293f0: 2210 movs r2, #16 -100293f2: f7ee f815 bl 10017420 -100293f6: 2801 cmp r0, #1 -100293f8: d079 beq.n 100294ee -100293fa: f8d6 3d68 ldr.w r3, [r6, #3432] ; 0xd68 -100293fe: a80a add r0, sp, #40 ; 0x28 -10029400: eb07 1103 add.w r1, r7, r3, lsl #4 -10029404: 31a4 adds r1, #164 ; 0xa4 -10029406: e00a b.n 1002941e -10029408: f507 778c add.w r7, r7, #280 ; 0x118 -1002940c: 4638 mov r0, r7 -1002940e: a906 add r1, sp, #24 -10029410: 2210 movs r2, #16 -10029412: f7ee f805 bl 10017420 -10029416: 2801 cmp r0, #1 -10029418: d069 beq.n 100294ee -1002941a: a80a add r0, sp, #40 ; 0x28 -1002941c: 4639 mov r1, r7 -1002941e: f015 fa57 bl 1003e8d0 <__rtw_secmicsetkey_veneer> -10029422: f895 3029 ldrb.w r3, [r5, #41] ; 0x29 -10029426: a80a add r0, sp, #40 ; 0x28 -10029428: 07d9 lsls r1, r3, #31 -1002942a: d50c bpl.n 10029446 -1002942c: 2206 movs r2, #6 -1002942e: f105 0138 add.w r1, r5, #56 ; 0x38 -10029432: f015 fa51 bl 1003e8d8 <__rtw_secmicappend_veneer> -10029436: f895 3029 ldrb.w r3, [r5, #41] ; 0x29 -1002943a: a80a add r0, sp, #40 ; 0x28 -1002943c: 079a lsls r2, r3, #30 -1002943e: d50f bpl.n 10029460 -10029440: f105 0140 add.w r1, r5, #64 ; 0x40 -10029444: e00e b.n 10029464 -10029446: f105 012c add.w r1, r5, #44 ; 0x2c -1002944a: 2206 movs r2, #6 -1002944c: f015 fa44 bl 1003e8d8 <__rtw_secmicappend_veneer> -10029450: f895 3029 ldrb.w r3, [r5, #41] ; 0x29 -10029454: a80a add r0, sp, #40 ; 0x28 -10029456: 079b lsls r3, r3, #30 -10029458: d502 bpl.n 10029460 -1002945a: f105 0138 add.w r1, r5, #56 ; 0x38 -1002945e: e001 b.n 10029464 -10029460: f105 0132 add.w r1, r5, #50 ; 0x32 -10029464: 2206 movs r2, #6 -10029466: f015 fa37 bl 1003e8d8 <__rtw_secmicappend_veneer> -1002946a: f894 305e ldrb.w r3, [r4, #94] ; 0x5e -1002946e: b11b cbz r3, 10029478 -10029470: f894 3041 ldrb.w r3, [r4, #65] ; 0x41 -10029474: f88d 3004 strb.w r3, [sp, #4] -10029478: a901 add r1, sp, #4 -1002947a: 2204 movs r2, #4 -1002947c: a80a add r0, sp, #40 ; 0x28 -1002947e: f015 fa2b bl 1003e8d8 <__rtw_secmicappend_veneer> -10029482: 8a62 ldrh r2, [r4, #18] -10029484: 69a6 ldr r6, [r4, #24] -10029486: 7f63 ldrb r3, [r4, #29] -10029488: 1ab6 subs r6, r6, r2 -1002948a: 1899 adds r1, r3, r2 -1002948c: 1af3 subs r3, r6, r3 -1002948e: 7aa6 ldrb r6, [r4, #10] -10029490: 3528 adds r5, #40 ; 0x28 -10029492: 440d add r5, r1 -10029494: b106 cbz r6, 10029498 -10029496: 7fa6 ldrb r6, [r4, #30] -10029498: 1b9e subs r6, r3, r6 -1002949a: 4629 mov r1, r5 -1002949c: a80a add r0, sp, #40 ; 0x28 -1002949e: 4632 mov r2, r6 -100294a0: f015 fa1a bl 1003e8d8 <__rtw_secmicappend_veneer> -100294a4: a80a add r0, sp, #40 ; 0x28 -100294a6: a902 add r1, sp, #8 -100294a8: f015 fa22 bl 1003e8f0 <__rtw_secgetmic_veneer> -100294ac: 7aa3 ldrb r3, [r4, #10] -100294ae: 4435 add r5, r6 -100294b0: b15b cbz r3, 100294ca -100294b2: 7fa3 ldrb r3, [r4, #30] -100294b4: b14b cbz r3, 100294ca -100294b6: a804 add r0, sp, #16 -100294b8: 2100 movs r1, #0 -100294ba: 2208 movs r2, #8 -100294bc: f7ed ffb8 bl 10017430 -100294c0: a804 add r0, sp, #16 -100294c2: 4629 mov r1, r5 -100294c4: 7fa2 ldrb r2, [r4, #30] -100294c6: f7ed ffa3 bl 10017410 -100294ca: 4628 mov r0, r5 -100294cc: a902 add r1, sp, #8 -100294ce: 2208 movs r2, #8 -100294d0: f7ed ff9e bl 10017410 -100294d4: 69a3 ldr r3, [r4, #24] -100294d6: 3308 adds r3, #8 -100294d8: 61a3 str r3, [r4, #24] -100294da: 7aa3 ldrb r3, [r4, #10] -100294dc: b14b cbz r3, 100294f2 -100294de: 7fa2 ldrb r2, [r4, #30] -100294e0: b13a cbz r2, 100294f2 -100294e2: f105 0008 add.w r0, r5, #8 -100294e6: a904 add r1, sp, #16 -100294e8: f7ed ff92 bl 10017410 -100294ec: e001 b.n 100294f2 -100294ee: 2000 movs r0, #0 -100294f0: e000 b.n 100294f4 -100294f2: 2001 movs r0, #1 -100294f4: b010 add sp, #64 ; 0x40 -100294f6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -100294fa : -100294fa: b508 push {r3, lr} -100294fc: 7a8b ldrb r3, [r1, #10] -100294fe: b183 cbz r3, 10029522 -10029500: 7f0b ldrb r3, [r1, #28] -10029502: 3b01 subs r3, #1 -10029504: 2b04 cmp r3, #4 -10029506: d80c bhi.n 10029522 -10029508: e8df f003 tbb [pc, r3] -1002950c: 090b0603 .word 0x090b0603 -10029510: 03 .byte 0x03 -10029511: 00 .byte 0x00 -10029512: f7fe fad9 bl 10027ac8 -10029516: e004 b.n 10029522 -10029518: f7fe fb1c bl 10027b54 -1002951c: e001 b.n 10029522 -1002951e: f7fe fb86 bl 10027c2e -10029522: 2001 movs r0, #1 -10029524: bd08 pop {r3, pc} - -10029526 : -10029526: b5f8 push {r3, r4, r5, r6, r7, lr} -10029528: 6e96 ldr r6, [r2, #104] ; 0x68 -1002952a: 4607 mov r7, r0 -1002952c: 460d mov r5, r1 -1002952e: 4614 mov r4, r2 -10029530: f892 304f ldrb.w r3, [r2, #79] ; 0x4f -10029534: b95e cbnz r6, 1002954e -10029536: 07de lsls r6, r3, #31 -10029538: d502 bpl.n 10029540 -1002953a: f7fe ff01 bl 10028340 -1002953e: e005 b.n 1002954c -10029540: f500 6046 add.w r0, r0, #3168 ; 0xc60 -10029544: f102 014f add.w r1, r2, #79 ; 0x4f -10029548: f7fe fea4 bl 10028294 -1002954c: 4606 mov r6, r0 -1002954e: 2100 movs r1, #0 -10029550: 221e movs r2, #30 -10029552: 4628 mov r0, r5 -10029554: f7ed ff6c bl 10017430 -10029558: 882b ldrh r3, [r5, #0] -1002955a: 7862 ldrb r2, [r4, #1] -1002955c: f023 03fc bic.w r3, r3, #252 ; 0xfc -10029560: 4313 orrs r3, r2 -10029562: 802b strh r3, [r5, #0] -10029564: 7862 ldrb r2, [r4, #1] -10029566: 0711 lsls r1, r2, #28 -10029568: d401 bmi.n 1002956e -1002956a: 2001 movs r0, #1 -1002956c: bdf8 pop {r3, r4, r5, r6, r7, pc} -1002956e: 6938 ldr r0, [r7, #16] -10029570: 0702 lsls r2, r0, #28 -10029572: f100 8097 bmi.w 100296a4 -10029576: 06c2 lsls r2, r0, #27 -10029578: f140 80af bpl.w 100296da -1002957c: f443 7300 orr.w r3, r3, #512 ; 0x200 -10029580: 4628 mov r0, r5 -10029582: f820 3b04 strh.w r3, [r0], #4 -10029586: f104 013d add.w r1, r4, #61 ; 0x3d -1002958a: 2206 movs r2, #6 -1002958c: f7ed ff40 bl 10017410 -10029590: f105 000a add.w r0, r5, #10 -10029594: f107 019c add.w r1, r7, #156 ; 0x9c -10029598: 2206 movs r2, #6 -1002959a: f7ed ff39 bl 10017410 -1002959e: f105 0010 add.w r0, r5, #16 -100295a2: f104 0143 add.w r1, r4, #67 ; 0x43 -100295a6: 2206 movs r2, #6 -100295a8: f7ed ff32 bl 10017410 -100295ac: f8d6 3104 ldr.w r3, [r6, #260] ; 0x104 -100295b0: f894 205d ldrb.w r2, [r4, #93] ; 0x5d -100295b4: 3300 adds r3, #0 -100295b6: bf18 it ne -100295b8: 2301 movne r3, #1 -100295ba: b11a cbz r2, 100295c4 -100295bc: 882a ldrh r2, [r5, #0] -100295be: f442 5200 orr.w r2, r2, #8192 ; 0x2000 -100295c2: 802a strh r2, [r5, #0] -100295c4: 7d22 ldrb r2, [r4, #20] -100295c6: b11a cbz r2, 100295d0 -100295c8: 882a ldrh r2, [r5, #0] -100295ca: f442 4280 orr.w r2, r2, #16384 ; 0x4000 -100295ce: 802a strh r2, [r5, #0] -100295d0: b1c3 cbz r3, 10029604 -100295d2: 8963 ldrh r3, [r4, #10] -100295d4: f894 2039 ldrb.w r2, [r4, #57] ; 0x39 -100295d8: 3b02 subs r3, #2 -100295da: b122 cbz r2, 100295e6 -100295dc: 5ae9 ldrh r1, [r5, r3] -100295de: f002 020f and.w r2, r2, #15 -100295e2: 430a orrs r2, r1 -100295e4: 52ea strh r2, [r5, r3] -100295e6: f894 2061 ldrb.w r2, [r4, #97] ; 0x61 -100295ea: 5ae9 ldrh r1, [r5, r3] -100295ec: f002 0201 and.w r2, r2, #1 -100295f0: ea41 1202 orr.w r2, r1, r2, lsl #4 -100295f4: 52ea strh r2, [r5, r3] -100295f6: f894 103a ldrb.w r1, [r4, #58] ; 0x3a -100295fa: f001 0103 and.w r1, r1, #3 -100295fe: ea42 1241 orr.w r2, r2, r1, lsl #5 -10029602: 52ea strh r2, [r5, r3] -10029604: 2e00 cmp r6, #0 -10029606: d0b0 beq.n 1002956a -10029608: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 -1002960c: eb06 0343 add.w r3, r6, r3, lsl #1 -10029610: f8b3 2094 ldrh.w r2, [r3, #148] ; 0x94 -10029614: 3201 adds r2, #1 -10029616: f8a3 2094 strh.w r2, [r3, #148] ; 0x94 -1002961a: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 -1002961e: eb06 0343 add.w r3, r6, r3, lsl #1 -10029622: f8b3 2094 ldrh.w r2, [r3, #148] ; 0x94 -10029626: f3c2 020b ubfx r2, r2, #0, #12 -1002962a: f8a3 2094 strh.w r2, [r3, #148] ; 0x94 -1002962e: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 -10029632: eb06 0343 add.w r3, r6, r3, lsl #1 -10029636: f8b3 3094 ldrh.w r3, [r3, #148] ; 0x94 -1002963a: 80e3 strh r3, [r4, #6] -1002963c: 8aea ldrh r2, [r5, #22] -1002963e: f002 020f and.w r2, r2, #15 -10029642: ea42 1303 orr.w r3, r2, r3, lsl #4 -10029646: 82eb strh r3, [r5, #22] -10029648: f894 3057 ldrb.w r3, [r4, #87] ; 0x57 -1002964c: b16b cbz r3, 1002966a -1002964e: f8d6 31f8 ldr.w r3, [r6, #504] ; 0x1f8 -10029652: b153 cbz r3, 1002966a -10029654: f896 21ff ldrb.w r2, [r6, #511] ; 0x1ff -10029658: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 -1002965c: fa22 f303 lsr.w r3, r2, r3 -10029660: 07d8 lsls r0, r3, #31 -10029662: bf44 itt mi -10029664: 2301 movmi r3, #1 -10029666: f884 305c strbmi.w r3, [r4, #92] ; 0x5c -1002966a: f894 005c ldrb.w r0, [r4, #92] ; 0x5c -1002966e: 2801 cmp r0, #1 -10029670: f47f af7b bne.w 1002956a -10029674: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 -10029678: f003 030f and.w r3, r3, #15 -1002967c: eb06 0643 add.w r6, r6, r3, lsl #1 -10029680: f8b6 21d4 ldrh.w r2, [r6, #468] ; 0x1d4 -10029684: 88e3 ldrh r3, [r4, #6] -10029686: 1a99 subs r1, r3, r2 -10029688: 0509 lsls r1, r1, #20 -1002968a: d503 bpl.n 10029694 -1002968c: 2300 movs r3, #0 -1002968e: f884 305c strb.w r3, [r4, #92] ; 0x5c -10029692: bdf8 pop {r3, r4, r5, r6, r7, pc} -10029694: 3301 adds r3, #1 -10029696: f3c3 030b ubfx r3, r3, #0, #12 -1002969a: f8a6 31d4 strh.w r3, [r6, #468] ; 0x1d4 -1002969e: f884 005c strb.w r0, [r4, #92] ; 0x5c -100296a2: bdf8 pop {r3, r4, r5, r6, r7, pc} -100296a4: f443 7380 orr.w r3, r3, #256 ; 0x100 -100296a8: 4628 mov r0, r5 -100296aa: f820 3b04 strh.w r3, [r0], #4 -100296ae: f107 019c add.w r1, r7, #156 ; 0x9c -100296b2: 2206 movs r2, #6 -100296b4: f7ed feac bl 10017410 -100296b8: f105 000a add.w r0, r5, #10 -100296bc: f104 0143 add.w r1, r4, #67 ; 0x43 -100296c0: 2206 movs r2, #6 -100296c2: f7ed fea5 bl 10017410 -100296c6: f105 0010 add.w r0, r5, #16 -100296ca: f104 013d add.w r1, r4, #61 ; 0x3d -100296ce: 2206 movs r2, #6 -100296d0: f7ed fe9e bl 10017410 -100296d4: f8d7 344c ldr.w r3, [r7, #1100] ; 0x44c -100296d8: e76a b.n 100295b0 -100296da: f010 0060 ands.w r0, r0, #96 ; 0x60 -100296de: d011 beq.n 10029704 -100296e0: 1d28 adds r0, r5, #4 -100296e2: f104 013d add.w r1, r4, #61 ; 0x3d -100296e6: 2206 movs r2, #6 -100296e8: f7ed fe92 bl 10017410 -100296ec: f105 000a add.w r0, r5, #10 -100296f0: f104 0143 add.w r1, r4, #67 ; 0x43 -100296f4: 2206 movs r2, #6 -100296f6: f7ed fe8b bl 10017410 -100296fa: f105 0010 add.w r0, r5, #16 -100296fe: f107 019c add.w r1, r7, #156 ; 0x9c -10029702: e750 b.n 100295a6 -10029704: bdf8 pop {r3, r4, r5, r6, r7, pc} - -10029706 : -10029706: b510 push {r4, lr} -10029708: 4604 mov r4, r0 -1002970a: f600 105c addw r0, r0, #2396 ; 0x95c -1002970e: f7ed ff33 bl 10017578 -10029712: b908 cbnz r0, 10029718 -10029714: 2001 movs r0, #1 -10029716: bd10 pop {r4, pc} -10029718: f604 1068 addw r0, r4, #2408 ; 0x968 -1002971c: f7ed ff2c bl 10017578 -10029720: 2800 cmp r0, #0 -10029722: d0f7 beq.n 10029714 -10029724: f604 1074 addw r0, r4, #2420 ; 0x974 -10029728: f7ed ff26 bl 10017578 -1002972c: 2800 cmp r0, #0 -1002972e: d0f1 beq.n 10029714 -10029730: f504 6018 add.w r0, r4, #2432 ; 0x980 -10029734: f7ed ff20 bl 10017578 -10029738: f1d0 0001 rsbs r0, r0, #1 -1002973c: bf38 it cc -1002973e: 2000 movcc r0, #0 -10029740: bd10 pop {r4, pc} - -10029742 : -10029742: f891 2039 ldrb.w r2, [r1, #57] ; 0x39 -10029746: 6e8b ldr r3, [r1, #104] ; 0x68 -10029748: 3a01 subs r2, #1 -1002974a: b2d2 uxtb r2, r2 -1002974c: 2a06 cmp r2, #6 -1002974e: d810 bhi.n 10029772 -10029750: 2101 movs r1, #1 -10029752: fa01 f202 lsl.w r2, r1, r2 -10029756: f012 0f60 tst.w r2, #96 ; 0x60 -1002975a: d108 bne.n 1002976e -1002975c: f012 0f18 tst.w r2, #24 -10029760: d103 bne.n 1002976a -10029762: 0792 lsls r2, r2, #30 -10029764: d005 beq.n 10029772 -10029766: 333c adds r3, #60 ; 0x3c -10029768: e004 b.n 10029774 -1002976a: 3354 adds r3, #84 ; 0x54 -1002976c: e002 b.n 10029774 -1002976e: 336c adds r3, #108 ; 0x6c -10029770: e000 b.n 10029774 -10029772: 3324 adds r3, #36 ; 0x24 -10029774: 6958 ldr r0, [r3, #20] -10029776: 4770 bx lr - -10029778 : -10029778: b510 push {r4, lr} -1002977a: f890 4521 ldrb.w r4, [r0, #1313] ; 0x521 -1002977e: 6f0b ldr r3, [r1, #112] ; 0x70 -10029780: 2c07 cmp r4, #7 -10029782: 698a ldr r2, [r1, #24] -10029784: d903 bls.n 1002978e -10029786: f241 34d2 movw r4, #5074 ; 0x13d2 -1002978a: 5d04 ldrb r4, [r0, r4] -1002978c: b17c cbz r4, 100297ae -1002978e: f241 34ba movw r4, #5050 ; 0x13ba -10029792: 5b00 ldrh r0, [r0, r4] -10029794: 4282 cmp r2, r0 -10029796: d901 bls.n 1002979c -10029798: 2301 movs r3, #1 -1002979a: e01c b.n 100297d6 -1002979c: f893 2175 ldrb.w r2, [r3, #373] ; 0x175 -100297a0: 2a00 cmp r2, #0 -100297a2: d1f9 bne.n 10029798 -100297a4: f893 3174 ldrb.w r3, [r3, #372] ; 0x174 -100297a8: b1a3 cbz r3, 100297d4 -100297aa: 2302 movs r3, #2 -100297ac: e013 b.n 100297d6 -100297ae: f890 472e ldrb.w r4, [r0, #1838] ; 0x72e -100297b2: 2c05 cmp r4, #5 -100297b4: d012 beq.n 100297dc -100297b6: f8b3 4174 ldrh.w r4, [r3, #372] ; 0x174 -100297ba: b9c4 cbnz r4, 100297ee -100297bc: f891 305f ldrb.w r3, [r1, #95] ; 0x5f -100297c0: b9f3 cbnz r3, 10029800 -100297c2: f241 33ba movw r3, #5050 ; 0x13ba -100297c6: 5ac3 ldrh r3, [r0, r3] -100297c8: 429a cmp r2, r3 -100297ca: d8e5 bhi.n 10029798 -100297cc: f891 3064 ldrb.w r3, [r1, #100] ; 0x64 -100297d0: 2b01 cmp r3, #1 -100297d2: d0e1 beq.n 10029798 -100297d4: 2300 movs r3, #0 -100297d6: f881 3044 strb.w r3, [r1, #68] ; 0x44 -100297da: bd10 pop {r4, pc} -100297dc: f891 4064 ldrb.w r4, [r1, #100] ; 0x64 -100297e0: 2c01 cmp r4, #1 -100297e2: d1e8 bne.n 100297b6 -100297e4: f8d0 4d0c ldr.w r4, [r0, #3340] ; 0xd0c -100297e8: 2c04 cmp r4, #4 -100297ea: d1e4 bne.n 100297b6 -100297ec: e7dd b.n 100297aa -100297ee: f893 2175 ldrb.w r2, [r3, #373] ; 0x175 -100297f2: 2a00 cmp r2, #0 -100297f4: d1d0 bne.n 10029798 -100297f6: f893 3174 ldrb.w r3, [r3, #372] ; 0x174 -100297fa: 2b00 cmp r3, #0 -100297fc: d1d5 bne.n 100297aa -100297fe: bd10 pop {r4, pc} -10029800: f890 451f ldrb.w r4, [r0, #1311] ; 0x51f -10029804: f890 3737 ldrb.w r3, [r0, #1847] ; 0x737 -10029808: b11c cbz r4, 10029812 -1002980a: 3b02 subs r3, #2 -1002980c: 2b01 cmp r3, #1 -1002980e: d8d8 bhi.n 100297c2 -10029810: e7c2 b.n 10029798 -10029812: 2b03 cmp r3, #3 -10029814: d1d5 bne.n 100297c2 -10029816: e7bf b.n 10029798 - -10029818 : -10029818: 23aa movs r3, #170 ; 0xaa -1002981a: b510 push {r4, lr} -1002981c: 7003 strb r3, [r0, #0] -1002981e: 7043 strb r3, [r0, #1] -10029820: 2303 movs r3, #3 -10029822: 7083 strb r3, [r0, #2] -10029824: f248 1337 movw r3, #33079 ; 0x8137 -10029828: 4299 cmp r1, r3 -1002982a: 4604 mov r4, r0 -1002982c: d007 beq.n 1002983e -1002982e: 4a0a ldr r2, [pc, #40] ; (10029858 ) -10029830: 4b0a ldr r3, [pc, #40] ; (1002985c ) -10029832: f248 00f3 movw r0, #33011 ; 0x80f3 -10029836: 4281 cmp r1, r0 -10029838: bf18 it ne -1002983a: 4613 movne r3, r2 -1002983c: e000 b.n 10029840 -1002983e: 4b07 ldr r3, [pc, #28] ; (1002985c ) -10029840: 2200 movs r2, #0 -10029842: 70e2 strb r2, [r4, #3] -10029844: 785a ldrb r2, [r3, #1] -10029846: 4608 mov r0, r1 -10029848: 7122 strb r2, [r4, #4] -1002984a: 789b ldrb r3, [r3, #2] -1002984c: 7163 strb r3, [r4, #5] -1002984e: f7ed fd99 bl 10017384 <_htons> -10029852: 80e0 strh r0, [r4, #6] -10029854: 2008 movs r0, #8 -10029856: bd10 pop {r4, pc} -10029858: 10041703 .word 0x10041703 -1002985c: 10041700 .word 0x10041700 - -10029860 : -10029860: b537 push {r0, r1, r2, r4, r5, lr} -10029862: f890 59b4 ldrb.w r5, [r0, #2484] ; 0x9b4 -10029866: 4604 mov r4, r0 -10029868: 4613 mov r3, r2 -1002986a: b115 cbz r5, 10029872 -1002986c: 2d01 cmp r5, #1 -1002986e: d018 beq.n 100298a2 -10029870: e002 b.n 10029878 -10029872: f880 59b5 strb.w r5, [r0, #2485] ; 0x9b5 -10029876: e014 b.n 100298a2 -10029878: 4608 mov r0, r1 -1002987a: aa01 add r2, sp, #4 -1002987c: 212a movs r1, #42 ; 0x2a -1002987e: f015 f813 bl 1003e8a8 <__rtw_get_ie_veneer> -10029882: b908 cbnz r0, 10029888 -10029884: 2300 movs r3, #0 -10029886: e00a b.n 1002989e -10029888: 7883 ldrb r3, [r0, #2] -1002988a: 079b lsls r3, r3, #30 -1002988c: d5fa bpl.n 10029884 -1002988e: f504 539c add.w r3, r4, #4992 ; 0x1380 -10029892: 3308 adds r3, #8 -10029894: f893 3030 ldrb.w r3, [r3, #48] ; 0x30 -10029898: 2b01 cmp r3, #1 -1002989a: bf18 it ne -1002989c: 2302 movne r3, #2 -1002989e: f884 39b5 strb.w r3, [r4, #2485] ; 0x9b5 -100298a2: b003 add sp, #12 -100298a4: bd30 pop {r4, r5, pc} - -100298a6 : -100298a6: 6f8b ldr r3, [r1, #120] ; 0x78 -100298a8: b570 push {r4, r5, r6, lr} -100298aa: f003 030f and.w r3, r3, #15 -100298ae: 2b01 cmp r3, #1 -100298b0: d120 bne.n 100298f4 -100298b2: f600 1658 addw r6, r0, #2392 ; 0x958 -100298b6: e9d6 4518 ldrd r4, r5, [r6, #96] ; 0x60 -100298ba: 17d3 asrs r3, r2, #31 -100298bc: 18a4 adds r4, r4, r2 -100298be: eb45 0503 adc.w r5, r5, r3 -100298c2: e9c6 4518 strd r4, r5, [r6, #96] ; 0x60 -100298c6: f8d0 447c ldr.w r4, [r0, #1148] ; 0x47c -100298ca: 3401 adds r4, #1 -100298cc: f8c0 447c str.w r4, [r0, #1148] ; 0x47c -100298d0: 6f0c ldr r4, [r1, #112] ; 0x70 -100298d2: b17c cbz r4, 100298f4 -100298d4: f504 74c0 add.w r4, r4, #384 ; 0x180 -100298d8: e9d4 010e ldrd r0, r1, [r4, #56] ; 0x38 -100298dc: 3001 adds r0, #1 -100298de: f141 0100 adc.w r1, r1, #0 -100298e2: e9c4 010e strd r0, r1, [r4, #56] ; 0x38 -100298e6: e9d4 0110 ldrd r0, r1, [r4, #64] ; 0x40 -100298ea: 1812 adds r2, r2, r0 -100298ec: eb43 0301 adc.w r3, r3, r1 -100298f0: e9c4 2310 strd r2, r3, [r4, #64] ; 0x40 -100298f4: bd70 pop {r4, r5, r6, pc} - -100298f6 : -100298f6: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -100298f8: 4605 mov r5, r0 -100298fa: 460c mov r4, r1 -100298fc: b1c9 cbz r1, 10029932 -100298fe: f500 76f0 add.w r6, r0, #480 ; 0x1e0 -10029902: a901 add r1, sp, #4 -10029904: f500 77ec add.w r7, r0, #472 ; 0x1d8 -10029908: 4630 mov r0, r6 -1002990a: f7ed fe19 bl 10017540 -1002990e: 4620 mov r0, r4 -10029910: f7ed fdaa bl 10017468 -10029914: 4620 mov r0, r4 -10029916: 4639 mov r1, r7 -10029918: f7ed fda0 bl 1001745c -1002991c: f8d5 31ec ldr.w r3, [r5, #492] ; 0x1ec -10029920: 4630 mov r0, r6 -10029922: 3301 adds r3, #1 -10029924: f8c5 31ec str.w r3, [r5, #492] ; 0x1ec -10029928: a901 add r1, sp, #4 -1002992a: f7ed fe13 bl 10017554 -1002992e: 2001 movs r0, #1 -10029930: e000 b.n 10029934 -10029932: 4608 mov r0, r1 -10029934: b003 add sp, #12 -10029936: bdf0 pop {r4, r5, r6, r7, pc} - -10029938 : -10029938: b573 push {r0, r1, r4, r5, r6, lr} -1002993a: f100 0654 add.w r6, r0, #84 ; 0x54 -1002993e: f100 044c add.w r4, r0, #76 ; 0x4c -10029942: a901 add r1, sp, #4 -10029944: 4605 mov r5, r0 -10029946: 4630 mov r0, r6 -10029948: f7ed fe3e bl 100175c8 -1002994c: 4620 mov r0, r4 -1002994e: f7ed fe13 bl 10017578 -10029952: 2801 cmp r0, #1 -10029954: d014 beq.n 10029980 -10029956: 6cec ldr r4, [r5, #76] ; 0x4c -10029958: 4620 mov r0, r4 -1002995a: f7ed fd85 bl 10017468 -1002995e: b184 cbz r4, 10029982 -10029960: 6cab ldr r3, [r5, #72] ; 0x48 -10029962: 2100 movs r1, #0 -10029964: 3b01 subs r3, #1 -10029966: 64ab str r3, [r5, #72] ; 0x48 -10029968: f104 0008 add.w r0, r4, #8 -1002996c: f8c4 1080 str.w r1, [r4, #128] ; 0x80 -10029970: f8c4 1084 str.w r1, [r4, #132] ; 0x84 -10029974: 226c movs r2, #108 ; 0x6c -10029976: f7ed fd5b bl 10017430 -1002997a: 2301 movs r3, #1 -1002997c: 67a3 str r3, [r4, #120] ; 0x78 -1002997e: e000 b.n 10029982 -10029980: 2400 movs r4, #0 -10029982: 4630 mov r0, r6 -10029984: a901 add r1, sp, #4 -10029986: f7ed fe29 bl 100175dc -1002998a: 4620 mov r0, r4 -1002998c: b002 add sp, #8 -1002998e: bd70 pop {r4, r5, r6, pc} - -10029990 : -10029990: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -10029994: 4604 mov r4, r0 -10029996: f8d0 8058 ldr.w r8, [r0, #88] ; 0x58 -1002999a: 460d mov r5, r1 -1002999c: b1e9 cbz r1, 100299da -1002999e: f100 0754 add.w r7, r0, #84 ; 0x54 -100299a2: 4638 mov r0, r7 -100299a4: a901 add r1, sp, #4 -100299a6: f7ed fe0f bl 100175c8 -100299aa: 4628 mov r0, r5 -100299ac: f7ed fd5c bl 10017468 -100299b0: 6f6e ldr r6, [r5, #116] ; 0x74 -100299b2: b10e cbz r6, 100299b8 -100299b4: 2300 movs r3, #0 -100299b6: 676b str r3, [r5, #116] ; 0x74 -100299b8: 4628 mov r0, r5 -100299ba: f104 014c add.w r1, r4, #76 ; 0x4c -100299be: f7ed fd4d bl 1001745c -100299c2: 6ca3 ldr r3, [r4, #72] ; 0x48 -100299c4: 4638 mov r0, r7 -100299c6: 3301 adds r3, #1 -100299c8: 64a3 str r3, [r4, #72] ; 0x48 -100299ca: a901 add r1, sp, #4 -100299cc: f7ed fe06 bl 100175dc -100299d0: b11e cbz r6, 100299da -100299d2: 4640 mov r0, r8 -100299d4: 4631 mov r1, r6 -100299d6: f00c ff89 bl 100368ec -100299da: 2001 movs r0, #1 -100299dc: b002 add sp, #8 -100299de: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -100299e2 : -100299e2: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -100299e6: f101 0608 add.w r6, r1, #8 -100299ea: 460d mov r5, r1 -100299ec: 4607 mov r7, r0 -100299ee: a901 add r1, sp, #4 -100299f0: 4630 mov r0, r6 -100299f2: f7ed fde9 bl 100175c8 -100299f6: 682c ldr r4, [r5, #0] -100299f8: 4628 mov r0, r5 -100299fa: 4621 mov r1, r4 -100299fc: f7ed fdc1 bl 10017582 -10029a00: b938 cbnz r0, 10029a12 -10029a02: f8d4 8000 ldr.w r8, [r4] -10029a06: 4621 mov r1, r4 -10029a08: 4638 mov r0, r7 -10029a0a: f7ff ffc1 bl 10029990 -10029a0e: 4644 mov r4, r8 -10029a10: e7f2 b.n 100299f8 -10029a12: 4630 mov r0, r6 -10029a14: a901 add r1, sp, #4 -10029a16: f7ed fde1 bl 100175dc -10029a1a: b002 add sp, #8 -10029a1c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -10029a20 : -10029a20: 3a01 subs r2, #1 -10029a22: 2a06 cmp r2, #6 -10029a24: b510 push {r4, lr} -10029a26: d816 bhi.n 10029a56 -10029a28: 2401 movs r4, #1 -10029a2a: fa04 f202 lsl.w r2, r4, r2 -10029a2e: f012 0f60 tst.w r2, #96 ; 0x60 -10029a32: d10c bne.n 10029a4e -10029a34: f012 0f18 tst.w r2, #24 -10029a38: d105 bne.n 10029a46 -10029a3a: 0792 lsls r2, r2, #30 -10029a3c: d00b beq.n 10029a56 -10029a3e: f101 003c add.w r0, r1, #60 ; 0x3c -10029a42: 2203 movs r2, #3 -10029a44: e00a b.n 10029a5c -10029a46: f101 0054 add.w r0, r1, #84 ; 0x54 -10029a4a: 701c strb r4, [r3, #0] -10029a4c: bd10 pop {r4, pc} -10029a4e: f101 006c add.w r0, r1, #108 ; 0x6c -10029a52: 2200 movs r2, #0 -10029a54: e002 b.n 10029a5c -10029a56: f101 0024 add.w r0, r1, #36 ; 0x24 -10029a5a: 2202 movs r2, #2 -10029a5c: 701a strb r2, [r3, #0] -10029a5e: bd10 pop {r4, pc} - -10029a60 : -10029a60: b573 push {r0, r1, r4, r5, r6, lr} -10029a62: 460c mov r4, r1 -10029a64: 6f09 ldr r1, [r1, #112] ; 0x70 -10029a66: 4605 mov r5, r0 -10029a68: f8d0 69e0 ldr.w r6, [r0, #2528] ; 0x9e0 -10029a6c: b939 cbnz r1, 10029a7e -10029a6e: f104 0157 add.w r1, r4, #87 ; 0x57 -10029a72: f500 6046 add.w r0, r0, #3168 ; 0xc60 -10029a76: f7fe fc0d bl 10028294 -10029a7a: 4601 mov r1, r0 -10029a7c: b309 cbz r1, 10029ac2 -10029a7e: 4628 mov r0, r5 -10029a80: f894 2041 ldrb.w r2, [r4, #65] ; 0x41 -10029a84: f10d 0307 add.w r3, sp, #7 -10029a88: f7ff ffca bl 10029a20 -10029a8c: 4605 mov r5, r0 -10029a8e: f7ed fcda bl 10017446 -10029a92: b130 cbz r0, 10029aa2 -10029a94: f89d 3007 ldrb.w r3, [sp, #7] -10029a98: 4628 mov r0, r5 -10029a9a: f856 1033 ldr.w r1, [r6, r3, lsl #3] -10029a9e: f7ed fcdd bl 1001745c -10029aa2: 4620 mov r0, r4 -10029aa4: f105 0108 add.w r1, r5, #8 -10029aa8: f7ed fcd8 bl 1001745c -10029aac: 696b ldr r3, [r5, #20] -10029aae: 2001 movs r0, #1 -10029ab0: 3301 adds r3, #1 -10029ab2: 616b str r3, [r5, #20] -10029ab4: f89d 3007 ldrb.w r3, [sp, #7] -10029ab8: eb06 06c3 add.w r6, r6, r3, lsl #3 -10029abc: 6873 ldr r3, [r6, #4] -10029abe: 3301 adds r3, #1 -10029ac0: 6073 str r3, [r6, #4] -10029ac2: b002 add sp, #8 -10029ac4: bd70 pop {r4, r5, r6, pc} - -10029ac6 : -10029ac6: b508 push {r3, lr} -10029ac8: f7ff ffca bl 10029a60 -10029acc: 3000 adds r0, #0 -10029ace: bf18 it ne -10029ad0: 2001 movne r0, #1 -10029ad2: bd08 pop {r3, pc} - -10029ad4 : -10029ad4: 2304 movs r3, #4 -10029ad6: b510 push {r4, lr} -10029ad8: 4604 mov r4, r0 -10029ada: f880 39e4 strb.w r3, [r0, #2532] ; 0x9e4 -10029ade: 2020 movs r0, #32 -10029ae0: f7ed fe66 bl 100177b0 -10029ae4: f894 39e4 ldrb.w r3, [r4, #2532] ; 0x9e4 -10029ae8: f8c4 09e0 str.w r0, [r4, #2528] ; 0x9e0 -10029aec: 2b05 cmp r3, #5 -10029aee: d10f bne.n 10029b10 -10029af0: f604 138c addw r3, r4, #2444 ; 0x98c -10029af4: 6003 str r3, [r0, #0] -10029af6: f504 6318 add.w r3, r4, #2432 ; 0x980 -10029afa: 6083 str r3, [r0, #8] -10029afc: f604 1374 addw r3, r4, #2420 ; 0x974 -10029b00: 6103 str r3, [r0, #16] -10029b02: f604 1368 addw r3, r4, #2408 ; 0x968 -10029b06: f604 145c addw r4, r4, #2396 ; 0x95c -10029b0a: 6183 str r3, [r0, #24] -10029b0c: 6204 str r4, [r0, #32] -10029b0e: bd10 pop {r4, pc} -10029b10: 2b04 cmp r3, #4 -10029b12: d10b bne.n 10029b2c -10029b14: f504 6318 add.w r3, r4, #2432 ; 0x980 -10029b18: 6003 str r3, [r0, #0] -10029b1a: f604 1374 addw r3, r4, #2420 ; 0x974 -10029b1e: 6083 str r3, [r0, #8] -10029b20: f604 135c addw r3, r4, #2396 ; 0x95c -10029b24: f604 1468 addw r4, r4, #2408 ; 0x968 -10029b28: 6103 str r3, [r0, #16] -10029b2a: 6184 str r4, [r0, #24] -10029b2c: bd10 pop {r4, pc} - -10029b2e : -10029b2e: f8d0 39e0 ldr.w r3, [r0, #2528] ; 0x9e0 -10029b32: b12b cbz r3, 10029b40 -10029b34: f890 19e4 ldrb.w r1, [r0, #2532] ; 0x9e4 -10029b38: 4618 mov r0, r3 -10029b3a: 00c9 lsls r1, r1, #3 -10029b3c: f7ed bc65 b.w 1001740a -10029b40: 4770 bx lr - ... - -10029b44 <_rtw_free_xmit_priv>: -10029b44: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10029b48: 6d85 ldr r5, [r0, #88] ; 0x58 -10029b4a: 4604 mov r4, r0 -10029b4c: f8d0 9044 ldr.w r9, [r0, #68] ; 0x44 -10029b50: f8d0 71d0 ldr.w r7, [r0, #464] ; 0x1d0 -10029b54: 4628 mov r0, r5 -10029b56: f008 fd40 bl 100325da -10029b5a: 4620 mov r0, r4 -10029b5c: f7ff fbdb bl 10029316 -10029b60: 6c63 ldr r3, [r4, #68] ; 0x44 -10029b62: 2b00 cmp r3, #0 -10029b64: d04e beq.n 10029c04 <_rtw_free_xmit_priv+0xc0> -10029b66: 2600 movs r6, #0 -10029b68: 4b27 ldr r3, [pc, #156] ; (10029c08 <_rtw_free_xmit_priv+0xc4>) -10029b6a: 21d4 movs r1, #212 ; 0xd4 -10029b6c: 681a ldr r2, [r3, #0] -10029b6e: fb01 9106 mla r1, r1, r6, r9 -10029b72: 4296 cmp r6, r2 -10029b74: 4698 mov r8, r3 -10029b76: d204 bcs.n 10029b82 <_rtw_free_xmit_priv+0x3e> -10029b78: 4628 mov r0, r5 -10029b7a: f00c febb bl 100368f4 -10029b7e: 3601 adds r6, #1 -10029b80: e7f2 b.n 10029b68 <_rtw_free_xmit_priv+0x24> -10029b82: 2600 movs r6, #0 -10029b84: 4b21 ldr r3, [pc, #132] ; (10029c0c <_rtw_free_xmit_priv+0xc8>) -10029b86: 215c movs r1, #92 ; 0x5c -10029b88: 681a ldr r2, [r3, #0] -10029b8a: fb01 7106 mla r1, r1, r6, r7 -10029b8e: 4296 cmp r6, r2 -10029b90: 4699 mov r9, r3 -10029b92: d206 bcs.n 10029ba2 <_rtw_free_xmit_priv+0x5e> -10029b94: 4628 mov r0, r5 -10029b96: f240 6256 movw r2, #1622 ; 0x656 -10029b9a: f00c fea6 bl 100368ea -10029b9e: 3601 adds r6, #1 -10029ba0: e7f0 b.n 10029b84 <_rtw_free_xmit_priv+0x40> -10029ba2: 6c20 ldr r0, [r4, #64] ; 0x40 -10029ba4: b130 cbz r0, 10029bb4 <_rtw_free_xmit_priv+0x70> -10029ba6: f8d8 3000 ldr.w r3, [r8] -10029baa: 21d4 movs r1, #212 ; 0xd4 -10029bac: 4359 muls r1, r3 -10029bae: 3104 adds r1, #4 -10029bb0: f7ed fc29 bl 10017406 -10029bb4: f8d4 01cc ldr.w r0, [r4, #460] ; 0x1cc -10029bb8: b130 cbz r0, 10029bc8 <_rtw_free_xmit_priv+0x84> -10029bba: f8d9 3000 ldr.w r3, [r9] -10029bbe: 215c movs r1, #92 ; 0x5c -10029bc0: 4359 muls r1, r3 -10029bc2: 3104 adds r1, #4 -10029bc4: f7ed fc1f bl 10017406 -10029bc8: f504 70f0 add.w r0, r4, #480 ; 0x1e0 -10029bcc: f7ed fcec bl 100175a8 -10029bd0: f8d4 61e8 ldr.w r6, [r4, #488] ; 0x1e8 -10029bd4: f506 7738 add.w r7, r6, #736 ; 0x2e0 -10029bd8: 42be cmp r6, r7 -10029bda: d007 beq.n 10029bec <_rtw_free_xmit_priv+0xa8> -10029bdc: 4631 mov r1, r6 -10029bde: 4628 mov r0, r5 -10029be0: f240 6204 movw r2, #1540 ; 0x604 -10029be4: f00c fe81 bl 100368ea -10029be8: 365c adds r6, #92 ; 0x5c -10029bea: e7f5 b.n 10029bd8 <_rtw_free_xmit_priv+0x94> -10029bec: f8d4 01e4 ldr.w r0, [r4, #484] ; 0x1e4 -10029bf0: b118 cbz r0, 10029bfa <_rtw_free_xmit_priv+0xb6> -10029bf2: f44f 7139 mov.w r1, #740 ; 0x2e4 -10029bf6: f7ed fc06 bl 10017406 -10029bfa: 4628 mov r0, r5 -10029bfc: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10029c00: f7ff bf95 b.w 10029b2e -10029c04: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -10029c08: 10044f40 .word 0x10044f40 -10029c0c: 10044f3c .word 0x10044f3c - -10029c10 : -10029c10: b510 push {r4, lr} -10029c12: 2300 movs r3, #0 -10029c14: 428b cmp r3, r1 -10029c16: da05 bge.n 10029c24 -10029c18: eb00 02c3 add.w r2, r0, r3, lsl #3 -10029c1c: 2400 movs r4, #0 -10029c1e: 6054 str r4, [r2, #4] -10029c20: 3301 adds r3, #1 -10029c22: e7f7 b.n 10029c14 -10029c24: bd10 pop {r4, pc} - ... - -10029c28 <_rtw_init_xmit_priv>: -10029c28: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -10029c2c: 4604 mov r4, r0 -10029c2e: 460d mov r5, r1 -10029c30: f7ed fcac bl 1001758c -10029c34: 1d20 adds r0, r4, #4 -10029c36: 65a5 str r5, [r4, #88] ; 0x58 -10029c38: f7ed fcb0 bl 1001759c -10029c3c: f104 0010 add.w r0, r4, #16 -10029c40: f7ed fcac bl 1001759c -10029c44: f104 001c add.w r0, r4, #28 -10029c48: f7ed fca8 bl 1001759c -10029c4c: f104 0028 add.w r0, r4, #40 ; 0x28 -10029c50: f7ed fca4 bl 1001759c -10029c54: 4e60 ldr r6, [pc, #384] ; (10029dd8 <_rtw_init_xmit_priv+0x1b0>) -10029c56: f104 0034 add.w r0, r4, #52 ; 0x34 -10029c5a: f104 084c add.w r8, r4, #76 ; 0x4c -10029c5e: f7ed fc9d bl 1001759c -10029c62: 4640 mov r0, r8 -10029c64: f7ed fc9a bl 1001759c -10029c68: 6833 ldr r3, [r6, #0] -10029c6a: 22d4 movs r2, #212 ; 0xd4 -10029c6c: fb02 f003 mul.w r0, r2, r3 -10029c70: 3004 adds r0, #4 -10029c72: f7ed fd7d bl 10017770 -10029c76: 46b1 mov r9, r6 -10029c78: 6420 str r0, [r4, #64] ; 0x40 -10029c7a: b908 cbnz r0, 10029c80 <_rtw_init_xmit_priv+0x58> -10029c7c: 6460 str r0, [r4, #68] ; 0x44 -10029c7e: e030 b.n 10029ce2 <_rtw_init_xmit_priv+0xba> -10029c80: 1cc7 adds r7, r0, #3 -10029c82: f027 0603 bic.w r6, r7, #3 -10029c86: 6466 str r6, [r4, #68] ; 0x44 -10029c88: 2700 movs r7, #0 -10029c8a: f8d9 3000 ldr.w r3, [r9] -10029c8e: 429f cmp r7, r3 -10029c90: d211 bcs.n 10029cb6 <_rtw_init_xmit_priv+0x8e> -10029c92: 4630 mov r0, r6 -10029c94: f7ed fbd4 bl 10017440 -10029c98: 2300 movs r3, #0 -10029c9a: 67f5 str r5, [r6, #124] ; 0x7c -10029c9c: 67b3 str r3, [r6, #120] ; 0x78 -10029c9e: 6773 str r3, [r6, #116] ; 0x74 -10029ca0: f8c6 3080 str.w r3, [r6, #128] ; 0x80 -10029ca4: f8c6 3084 str.w r3, [r6, #132] ; 0x84 -10029ca8: 4630 mov r0, r6 -10029caa: 4641 mov r1, r8 -10029cac: f7ed fbd6 bl 1001745c -10029cb0: 36d4 adds r6, #212 ; 0xd4 -10029cb2: 3701 adds r7, #1 -10029cb4: e7e9 b.n 10029c8a <_rtw_init_xmit_priv+0x62> -10029cb6: f504 79da add.w r9, r4, #436 ; 0x1b4 -10029cba: 64a3 str r3, [r4, #72] ; 0x48 -10029cbc: 4648 mov r0, r9 -10029cbe: 4e47 ldr r6, [pc, #284] ; (10029ddc <_rtw_init_xmit_priv+0x1b4>) -10029cc0: f7ed fc6c bl 1001759c -10029cc4: f504 70e0 add.w r0, r4, #448 ; 0x1c0 -10029cc8: f7ed fc68 bl 1001759c -10029ccc: 6833 ldr r3, [r6, #0] -10029cce: 225c movs r2, #92 ; 0x5c -10029cd0: fb02 f003 mul.w r0, r2, r3 -10029cd4: 3004 adds r0, #4 -10029cd6: f7ed fd4b bl 10017770 -10029cda: 46b2 mov sl, r6 -10029cdc: f8c4 01cc str.w r0, [r4, #460] ; 0x1cc -10029ce0: b908 cbnz r0, 10029ce6 <_rtw_init_xmit_priv+0xbe> -10029ce2: 2700 movs r7, #0 -10029ce4: e075 b.n 10029dd2 <_rtw_init_xmit_priv+0x1aa> -10029ce6: 1cc6 adds r6, r0, #3 -10029ce8: f026 0603 bic.w r6, r6, #3 -10029cec: f8c4 61d0 str.w r6, [r4, #464] ; 0x1d0 -10029cf0: 2701 movs r7, #1 -10029cf2: f04f 0800 mov.w r8, #0 -10029cf6: f8da 3000 ldr.w r3, [sl] -10029cfa: 4598 cmp r8, r3 -10029cfc: d224 bcs.n 10029d48 <_rtw_init_xmit_priv+0x120> -10029cfe: 4630 mov r0, r6 -10029d00: f7ed fb9e bl 10017440 -10029d04: 2300 movs r3, #0 -10029d06: 6173 str r3, [r6, #20] -10029d08: 60b5 str r5, [r6, #8] -10029d0a: 8333 strh r3, [r6, #24] -10029d0c: 4628 mov r0, r5 -10029d0e: 4631 mov r1, r6 -10029d10: f240 6256 movw r2, #1622 ; 0x656 -10029d14: f00c fde4 bl 100368e0 -10029d18: 4607 mov r7, r0 -10029d1a: b958 cbnz r0, 10029d34 <_rtw_init_xmit_priv+0x10c> -10029d1c: 200a movs r0, #10 -10029d1e: f7ed fc99 bl 10017654 -10029d22: 4628 mov r0, r5 -10029d24: 4631 mov r1, r6 -10029d26: f240 6256 movw r2, #1622 ; 0x656 -10029d2a: f00c fdd9 bl 100368e0 -10029d2e: 4607 mov r7, r0 -10029d30: 2800 cmp r0, #0 -10029d32: d0d6 beq.n 10029ce2 <_rtw_init_xmit_priv+0xba> -10029d34: 2300 movs r3, #0 -10029d36: 8373 strh r3, [r6, #26] -10029d38: 4630 mov r0, r6 -10029d3a: 4649 mov r1, r9 -10029d3c: f7ed fb8e bl 1001745c -10029d40: 365c adds r6, #92 ; 0x5c -10029d42: f108 0801 add.w r8, r8, #1 -10029d46: e7d6 b.n 10029cf6 <_rtw_init_xmit_priv+0xce> -10029d48: f504 78ec add.w r8, r4, #472 ; 0x1d8 -10029d4c: f8c4 31d4 str.w r3, [r4, #468] ; 0x1d4 -10029d50: 4640 mov r0, r8 -10029d52: f7ed fc23 bl 1001759c -10029d56: f44f 7039 mov.w r0, #740 ; 0x2e4 -10029d5a: f7ed fd09 bl 10017770 -10029d5e: f8c4 01e4 str.w r0, [r4, #484] ; 0x1e4 -10029d62: 2800 cmp r0, #0 -10029d64: d0bd beq.n 10029ce2 <_rtw_init_xmit_priv+0xba> -10029d66: 1cc6 adds r6, r0, #3 -10029d68: f026 0603 bic.w r6, r6, #3 -10029d6c: f8c4 61e8 str.w r6, [r4, #488] ; 0x1e8 -10029d70: f506 7938 add.w r9, r6, #736 ; 0x2e0 -10029d74: 454e cmp r6, r9 -10029d76: d016 beq.n 10029da6 <_rtw_init_xmit_priv+0x17e> -10029d78: 4630 mov r0, r6 -10029d7a: f7ed fb61 bl 10017440 -10029d7e: 2300 movs r3, #0 -10029d80: 6173 str r3, [r6, #20] -10029d82: 2301 movs r3, #1 -10029d84: 60b5 str r5, [r6, #8] -10029d86: 8333 strh r3, [r6, #24] -10029d88: 4628 mov r0, r5 -10029d8a: 4631 mov r1, r6 -10029d8c: f240 6204 movw r2, #1540 ; 0x604 -10029d90: f00c fda6 bl 100368e0 -10029d94: 4607 mov r7, r0 -10029d96: 2800 cmp r0, #0 -10029d98: d0a3 beq.n 10029ce2 <_rtw_init_xmit_priv+0xba> -10029d9a: 4630 mov r0, r6 -10029d9c: 4641 mov r1, r8 -10029d9e: f7ed fb5d bl 1001745c -10029da2: 365c adds r6, #92 ; 0x5c -10029da4: e7e6 b.n 10029d74 <_rtw_init_xmit_priv+0x14c> -10029da6: 2308 movs r3, #8 -10029da8: f8c4 31ec str.w r3, [r4, #492] ; 0x1ec -10029dac: 4628 mov r0, r5 -10029dae: f7ff fe91 bl 10029ad4 -10029db2: f8d4 0088 ldr.w r0, [r4, #136] ; 0x88 -10029db6: f894 108c ldrb.w r1, [r4, #140] ; 0x8c -10029dba: f7ff ff29 bl 10029c10 -10029dbe: 686b ldr r3, [r5, #4] -10029dc0: 2b03 cmp r3, #3 -10029dc2: d103 bne.n 10029dcc <_rtw_init_xmit_priv+0x1a4> -10029dc4: f641 0369 movw r3, #6249 ; 0x1869 -10029dc8: 5ceb ldrb r3, [r5, r3] -10029dca: b913 cbnz r3, 10029dd2 <_rtw_init_xmit_priv+0x1aa> -10029dcc: 4628 mov r0, r5 -10029dce: f008 fbfb bl 100325c8 -10029dd2: 4638 mov r0, r7 -10029dd4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10029dd8: 10044f40 .word 0x10044f40 -10029ddc: 10044f3c .word 0x10044f3c - -10029de0 : -10029de0: f890 3068 ldrb.w r3, [r0, #104] ; 0x68 -10029de4: 2b11 cmp r3, #17 -10029de6: bf9a itte ls -10029de8: 4a01 ldrls r2, [pc, #4] ; (10029df0 ) -10029dea: 5cd0 ldrbls r0, [r2, r3] -10029dec: 2005 movhi r0, #5 -10029dee: 4770 bx lr -10029df0: 100416ee .word 0x100416ee - -10029df4 : -10029df4: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -10029df8: 6902 ldr r2, [r0, #16] -10029dfa: 4605 mov r5, r0 -10029dfc: 06d2 lsls r2, r2, #27 -10029dfe: 460e mov r6, r1 -10029e00: f891 7057 ldrb.w r7, [r1, #87] ; 0x57 -10029e04: d509 bpl.n 10029e1a -10029e06: 6f0c ldr r4, [r1, #112] ; 0x70 -10029e08: b94c cbnz r4, 10029e1e -10029e0a: f505 6046 add.w r0, r5, #3168 ; 0xc60 -10029e0e: f106 0157 add.w r1, r6, #87 ; 0x57 -10029e12: f7fe fa3f bl 10028294 -10029e16: 4604 mov r4, r0 -10029e18: b908 cbnz r0, 10029e1e -10029e1a: 2000 movs r0, #0 -10029e1c: e0ba b.n 10029f94 -10029e1e: 4a5f ldr r2, [pc, #380] ; (10029f9c ) -10029e20: f8d5 19a0 ldr.w r1, [r5, #2464] ; 0x9a0 -10029e24: 6810 ldr r0, [r2, #0] -10029e26: 2203 movs r2, #3 -10029e28: fbb0 f0f2 udiv r0, r0, r2 -10029e2c: 4281 cmp r1, r0 -10029e2e: f007 0301 and.w r3, r7, #1 -10029e32: d919 bls.n 10029e68 -10029e34: 495a ldr r1, [pc, #360] ; (10029fa0 ) -10029e36: 6809 ldr r1, [r1, #0] -10029e38: fbb1 f2f2 udiv r2, r1, r2 -10029e3c: f8d5 1b2c ldr.w r1, [r5, #2860] ; 0xb2c -10029e40: 4291 cmp r1, r2 -10029e42: d911 bls.n 10029e68 -10029e44: f8d5 2b44 ldr.w r2, [r5, #2884] ; 0xb44 -10029e48: 2a02 cmp r2, #2 -10029e4a: d90d bls.n 10029e68 -10029e4c: 4a55 ldr r2, [pc, #340] ; (10029fa4 ) -10029e4e: 6811 ldr r1, [r2, #0] -10029e50: 4a55 ldr r2, [pc, #340] ; (10029fa8 ) -10029e52: 3902 subs r1, #2 -10029e54: 6812 ldr r2, [r2, #0] -10029e56: 4291 cmp r1, r2 -10029e58: dd06 ble.n 10029e68 -10029e5a: 4a54 ldr r2, [pc, #336] ; (10029fac ) -10029e5c: 6811 ldr r1, [r2, #0] -10029e5e: 4a54 ldr r2, [pc, #336] ; (10029fb0 ) -10029e60: 3905 subs r1, #5 -10029e62: 6812 ldr r2, [r2, #0] -10029e64: 4291 cmp r1, r2 -10029e66: dc05 bgt.n 10029e74 -10029e68: 2b00 cmp r3, #0 -10029e6a: d0d6 beq.n 10029e1a -10029e6c: 2311 movs r3, #17 -10029e6e: f886 3068 strb.w r3, [r6, #104] ; 0x68 -10029e72: e7d2 b.n 10029e1a -10029e74: f896 2067 ldrb.w r2, [r6, #103] ; 0x67 -10029e78: 2a01 cmp r2, #1 -10029e7a: d0f5 beq.n 10029e68 -10029e7c: f104 07f0 add.w r7, r4, #240 ; 0xf0 -10029e80: 4638 mov r0, r7 -10029e82: a901 add r1, sp, #4 -10029e84: b303 cbz r3, 10029ec8 -10029e86: f7ed fb9f bl 100175c8 -10029e8a: f8b5 0cfc ldrh.w r0, [r5, #3324] ; 0xcfc -10029e8e: b1c8 cbz r0, 10029ec4 -10029e90: 4630 mov r0, r6 -10029e92: f7ed fae9 bl 10017468 -10029e96: 4630 mov r0, r6 -10029e98: f104 01e8 add.w r1, r4, #232 ; 0xe8 -10029e9c: f7ed fade bl 1001745c -10029ea0: f8d4 30f4 ldr.w r3, [r4, #244] ; 0xf4 -10029ea4: 3301 adds r3, #1 -10029ea6: f8c4 30f4 str.w r3, [r4, #244] ; 0xf4 -10029eaa: f8b5 3cfe ldrh.w r3, [r5, #3326] ; 0xcfe -10029eae: f043 0301 orr.w r3, r3, #1 -10029eb2: f8a5 3cfe strh.w r3, [r5, #3326] ; 0xcfe -10029eb6: f8b5 3cfc ldrh.w r3, [r5, #3324] ; 0xcfc -10029eba: f043 0301 orr.w r3, r3, #1 -10029ebe: f8a5 3cfc strh.w r3, [r5, #3324] ; 0xcfc -10029ec2: e05a b.n 10029f7a -10029ec4: 4604 mov r4, r0 -10029ec6: e060 b.n 10029f8a -10029ec8: f7ed fb7e bl 100175c8 -10029ecc: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 -10029ed0: f013 0304 ands.w r3, r3, #4 -10029ed4: d058 beq.n 10029f88 -10029ed6: f8b5 2cfc ldrh.w r2, [r5, #3324] ; 0xcfc -10029eda: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc -10029ede: fa22 f303 lsr.w r3, r2, r3 -10029ee2: f013 0301 ands.w r3, r3, #1 -10029ee6: d04f beq.n 10029f88 -10029ee8: 4630 mov r0, r6 -10029eea: f7ed fabd bl 10017468 -10029eee: 4630 mov r0, r6 -10029ef0: f104 01e8 add.w r1, r4, #232 ; 0xe8 -10029ef4: f7ed fab2 bl 1001745c -10029ef8: f8d4 30f4 ldr.w r3, [r4, #244] ; 0xf4 -10029efc: f103 0801 add.w r8, r3, #1 -10029f00: f8c4 80f4 str.w r8, [r4, #244] ; 0xf4 -10029f04: f896 3041 ldrb.w r3, [r6, #65] ; 0x41 -10029f08: 3b01 subs r3, #1 -10029f0a: b2db uxtb r3, r3 -10029f0c: 2b06 cmp r3, #6 -10029f0e: d814 bhi.n 10029f3a -10029f10: 2201 movs r2, #1 -10029f12: fa02 f303 lsl.w r3, r2, r3 -10029f16: f013 0f60 tst.w r3, #96 ; 0x60 -10029f1a: d10b bne.n 10029f34 -10029f1c: f013 0f18 tst.w r3, #24 -10029f20: d105 bne.n 10029f2e -10029f22: 079b lsls r3, r3, #30 -10029f24: d009 beq.n 10029f3a -10029f26: f894 3312 ldrb.w r3, [r4, #786] ; 0x312 -10029f2a: 4013 ands r3, r2 -10029f2c: e009 b.n 10029f42 -10029f2e: f894 3314 ldrb.w r3, [r4, #788] ; 0x314 -10029f32: e004 b.n 10029f3e -10029f34: f894 3315 ldrb.w r3, [r4, #789] ; 0x315 -10029f38: e001 b.n 10029f3e -10029f3a: f894 3313 ldrb.w r3, [r4, #787] ; 0x313 -10029f3e: f003 0301 and.w r3, r3, #1 -10029f42: b123 cbz r3, 10029f4e -10029f44: f8d4 2318 ldr.w r2, [r4, #792] ; 0x318 -10029f48: 3201 adds r2, #1 -10029f4a: f8c4 2318 str.w r2, [r4, #792] ; 0x318 -10029f4e: f894 2316 ldrb.w r2, [r4, #790] ; 0x316 -10029f52: b112 cbz r2, 10029f5a -10029f54: b11b cbz r3, 10029f5e -10029f56: 2401 movs r4, #1 -10029f58: e017 b.n 10029f8a -10029f5a: 2b00 cmp r3, #0 -10029f5c: d0fb beq.n 10029f56 -10029f5e: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc -10029f62: 2201 movs r2, #1 -10029f64: fa02 f303 lsl.w r3, r2, r3 -10029f68: f8b5 2cfe ldrh.w r2, [r5, #3326] ; 0xcfe -10029f6c: f1b8 0f01 cmp.w r8, #1 -10029f70: ea43 0302 orr.w r3, r3, r2 -10029f74: f8a5 3cfe strh.w r3, [r5, #3326] ; 0xcfe -10029f78: d1ed bne.n 10029f56 -10029f7a: 2200 movs r2, #0 -10029f7c: 4628 mov r0, r5 -10029f7e: 2105 movs r1, #5 -10029f80: 4613 mov r3, r2 -10029f82: f7f1 f841 bl 1001b008 -10029f86: e7e6 b.n 10029f56 -10029f88: 461c mov r4, r3 -10029f8a: 4638 mov r0, r7 -10029f8c: a901 add r1, sp, #4 -10029f8e: f7ed fb25 bl 100175dc -10029f92: 4620 mov r0, r4 -10029f94: b002 add sp, #8 -10029f96: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10029f9a: bf00 nop -10029f9c: 10044f40 .word 0x10044f40 -10029fa0: 10044f3c .word 0x10044f3c -10029fa4: 10044f48 .word 0x10044f48 -10029fa8: 1004dd98 .word 0x1004dd98 -10029fac: 10044f4c .word 0x10044f4c -10029fb0: 1004df7c .word 0x1004df7c - -10029fb4 : -10029fb4: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -10029fb8: f8d0 79e0 ldr.w r7, [r0, #2528] ; 0x9e0 -10029fbc: 6814 ldr r4, [r2, #0] -10029fbe: 4605 mov r5, r0 -10029fc0: 4688 mov r8, r1 -10029fc2: 4616 mov r6, r2 -10029fc4: 4630 mov r0, r6 -10029fc6: 4621 mov r1, r4 -10029fc8: f7ed fadb bl 10017582 -10029fcc: b9d0 cbnz r0, 1002a004 -10029fce: 4628 mov r0, r5 -10029fd0: 4621 mov r1, r4 -10029fd2: f8d4 9000 ldr.w r9, [r4] -10029fd6: f7ff ff0d bl 10029df4 -10029fda: b198 cbz r0, 1002a004 -10029fdc: f894 2041 ldrb.w r2, [r4, #65] ; 0x41 -10029fe0: f10d 0307 add.w r3, sp, #7 -10029fe4: 4628 mov r0, r5 -10029fe6: 4641 mov r1, r8 -10029fe8: f7ff fd1a bl 10029a20 -10029fec: 6943 ldr r3, [r0, #20] -10029fee: 464c mov r4, r9 -10029ff0: 3b01 subs r3, #1 -10029ff2: 6143 str r3, [r0, #20] -10029ff4: f89d 3007 ldrb.w r3, [sp, #7] -10029ff8: eb07 03c3 add.w r3, r7, r3, lsl #3 -10029ffc: 685a ldr r2, [r3, #4] -10029ffe: 3a01 subs r2, #1 -1002a000: 605a str r2, [r3, #4] -1002a002: e7df b.n 10029fc4 -1002a004: b003 add sp, #12 -1002a006: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - -1002a00a : -1002a00a: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -1002a00e: 460c mov r4, r1 -1002a010: 4605 mov r5, r0 -1002a012: f7fe f995 bl 10028340 -1002a016: f605 1758 addw r7, r5, #2392 ; 0x958 -1002a01a: a901 add r1, sp, #4 -1002a01c: 4606 mov r6, r0 -1002a01e: 4638 mov r0, r7 -1002a020: f7ed fad2 bl 100175c8 -1002a024: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 -1002a028: f8d4 1100 ldr.w r1, [r4, #256] ; 0x100 -1002a02c: f043 0304 orr.w r3, r3, #4 -1002a030: f8c4 30f8 str.w r3, [r4, #248] ; 0xf8 -1002a034: 4628 mov r0, r5 -1002a036: f008 fb78 bl 1003272a -1002a03a: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc -1002a03e: 2201 movs r2, #1 -1002a040: fa02 f303 lsl.w r3, r2, r3 -1002a044: f8b5 2cfc ldrh.w r2, [r5, #3324] ; 0xcfc -1002a048: f104 0874 add.w r8, r4, #116 ; 0x74 -1002a04c: 4313 orrs r3, r2 -1002a04e: 4628 mov r0, r5 -1002a050: f8a5 3cfc strh.w r3, [r5, #3324] ; 0xcfc -1002a054: 4621 mov r1, r4 -1002a056: 4642 mov r2, r8 -1002a058: f7ff ffac bl 10029fb4 -1002a05c: 4640 mov r0, r8 -1002a05e: f7ed fa8b bl 10017578 -1002a062: b118 cbz r0, 1002a06c -1002a064: f104 006c add.w r0, r4, #108 ; 0x6c -1002a068: f7ed f9fe bl 10017468 -1002a06c: f104 085c add.w r8, r4, #92 ; 0x5c -1002a070: 4628 mov r0, r5 -1002a072: 4621 mov r1, r4 -1002a074: 4642 mov r2, r8 -1002a076: f7ff ff9d bl 10029fb4 -1002a07a: 4640 mov r0, r8 -1002a07c: f7ed fa7c bl 10017578 -1002a080: b118 cbz r0, 1002a08a -1002a082: f104 0054 add.w r0, r4, #84 ; 0x54 -1002a086: f7ed f9ef bl 10017468 -1002a08a: f104 082c add.w r8, r4, #44 ; 0x2c -1002a08e: 4628 mov r0, r5 -1002a090: 4621 mov r1, r4 -1002a092: 4642 mov r2, r8 -1002a094: f7ff ff8e bl 10029fb4 -1002a098: 4640 mov r0, r8 -1002a09a: f7ed fa6d bl 10017578 -1002a09e: b118 cbz r0, 1002a0a8 -1002a0a0: f104 0024 add.w r0, r4, #36 ; 0x24 -1002a0a4: f7ed f9e0 bl 10017468 -1002a0a8: f104 0844 add.w r8, r4, #68 ; 0x44 -1002a0ac: 4628 mov r0, r5 -1002a0ae: 4621 mov r1, r4 -1002a0b0: 4642 mov r2, r8 -1002a0b2: f7ff ff7f bl 10029fb4 -1002a0b6: 4640 mov r0, r8 -1002a0b8: f7ed fa5e bl 10017578 -1002a0bc: b118 cbz r0, 1002a0c6 -1002a0be: f104 003c add.w r0, r4, #60 ; 0x3c -1002a0c2: f7ed f9d1 bl 10017468 -1002a0c6: f106 042c add.w r4, r6, #44 ; 0x2c -1002a0ca: 4628 mov r0, r5 -1002a0cc: 4631 mov r1, r6 -1002a0ce: 4622 mov r2, r4 -1002a0d0: f7ff ff70 bl 10029fb4 -1002a0d4: 4620 mov r0, r4 -1002a0d6: f7ed fa4f bl 10017578 -1002a0da: b118 cbz r0, 1002a0e4 -1002a0dc: f106 0024 add.w r0, r6, #36 ; 0x24 -1002a0e0: f7ed f9c2 bl 10017468 -1002a0e4: 4638 mov r0, r7 -1002a0e6: a901 add r1, sp, #4 -1002a0e8: f7ed fa78 bl 100175dc -1002a0ec: b002 add sp, #8 -1002a0ee: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1002a0f2 : -1002a0f2: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} -1002a0f6: f101 08f0 add.w r8, r1, #240 ; 0xf0 -1002a0fa: 460d mov r5, r1 -1002a0fc: 4604 mov r4, r0 -1002a0fe: a901 add r1, sp, #4 -1002a100: 4640 mov r0, r8 -1002a102: f7ed fa61 bl 100175c8 -1002a106: f8d5 60e8 ldr.w r6, [r5, #232] ; 0xe8 -1002a10a: f105 0ae8 add.w sl, r5, #232 ; 0xe8 -1002a10e: 2700 movs r7, #0 -1002a110: 4650 mov r0, sl -1002a112: 4631 mov r1, r6 -1002a114: f7ed fa35 bl 10017582 -1002a118: 2800 cmp r0, #0 -1002a11a: d16d bne.n 1002a1f8 -1002a11c: 4630 mov r0, r6 -1002a11e: f7ed f9a3 bl 10017468 -1002a122: f896 3041 ldrb.w r3, [r6, #65] ; 0x41 -1002a126: 3b01 subs r3, #1 -1002a128: b2db uxtb r3, r3 -1002a12a: 2b06 cmp r3, #6 -1002a12c: d813 bhi.n 1002a156 -1002a12e: 2201 movs r2, #1 -1002a130: fa02 f303 lsl.w r3, r2, r3 -1002a134: f013 0f60 tst.w r3, #96 ; 0x60 -1002a138: d10a bne.n 1002a150 -1002a13a: f013 0f18 tst.w r3, #24 -1002a13e: d104 bne.n 1002a14a -1002a140: 0799 lsls r1, r3, #30 -1002a142: d008 beq.n 1002a156 -1002a144: f895 3312 ldrb.w r3, [r5, #786] ; 0x312 -1002a148: e007 b.n 1002a15a -1002a14a: f895 3314 ldrb.w r3, [r5, #788] ; 0x314 -1002a14e: e004 b.n 1002a15a -1002a150: f895 3315 ldrb.w r3, [r5, #789] ; 0x315 -1002a154: e001 b.n 1002a15a -1002a156: f895 3313 ldrb.w r3, [r5, #787] ; 0x313 -1002a15a: f8d5 20f4 ldr.w r2, [r5, #244] ; 0xf4 -1002a15e: f003 0302 and.w r3, r3, #2 -1002a162: 3a01 subs r2, #1 -1002a164: b2db uxtb r3, r3 -1002a166: f8c5 20f4 str.w r2, [r5, #244] ; 0xf4 -1002a16a: b102 cbz r2, 1002a16e -1002a16c: 2201 movs r2, #1 -1002a16e: f886 2065 strb.w r2, [r6, #101] ; 0x65 -1002a172: b183 cbz r3, 1002a196 -1002a174: f8d5 3318 ldr.w r3, [r5, #792] ; 0x318 -1002a178: 2201 movs r2, #1 -1002a17a: 3b01 subs r3, #1 -1002a17c: f8c5 3318 str.w r3, [r5, #792] ; 0x318 -1002a180: b12b cbz r3, 1002a18e -1002a182: 2300 movs r3, #0 -1002a184: f886 2065 strb.w r2, [r6, #101] ; 0x65 -1002a188: f886 3069 strb.w r3, [r6, #105] ; 0x69 -1002a18c: e003 b.n 1002a196 -1002a18e: f886 3065 strb.w r3, [r6, #101] ; 0x65 -1002a192: f886 2069 strb.w r2, [r6, #105] ; 0x69 -1002a196: 2301 movs r3, #1 -1002a198: f886 3067 strb.w r3, [r6, #103] ; 0x67 -1002a19c: 4640 mov r0, r8 -1002a19e: a901 add r1, sp, #4 -1002a1a0: f604 1958 addw r9, r4, #2392 ; 0x958 -1002a1a4: f7ed fa1a bl 100175dc -1002a1a8: 4648 mov r0, r9 -1002a1aa: a901 add r1, sp, #4 -1002a1ac: f7ed fa0c bl 100175c8 -1002a1b0: 4620 mov r0, r4 -1002a1b2: 4631 mov r1, r6 -1002a1b4: f7ff fc87 bl 10029ac6 -1002a1b8: 2801 cmp r0, #1 -1002a1ba: d003 beq.n 1002a1c4 -1002a1bc: 4648 mov r0, r9 -1002a1be: 4631 mov r1, r6 -1002a1c0: f7ff fbe6 bl 10029990 -1002a1c4: 4648 mov r0, r9 -1002a1c6: a901 add r1, sp, #4 -1002a1c8: f7ed fa08 bl 100175dc -1002a1cc: 4640 mov r0, r8 -1002a1ce: a901 add r1, sp, #4 -1002a1d0: f7ed f9fa bl 100175c8 -1002a1d4: f8d5 30f4 ldr.w r3, [r5, #244] ; 0xf4 -1002a1d8: f8d5 60e8 ldr.w r6, [r5, #232] ; 0xe8 -1002a1dc: 2b00 cmp r3, #0 -1002a1de: d197 bne.n 1002a110 -1002a1e0: f8d5 30fc ldr.w r3, [r5, #252] ; 0xfc -1002a1e4: 2701 movs r7, #1 -1002a1e6: fa07 f303 lsl.w r3, r7, r3 -1002a1ea: f8b4 2cfe ldrh.w r2, [r4, #3326] ; 0xcfe -1002a1ee: ea22 0303 bic.w r3, r2, r3 -1002a1f2: f8a4 3cfe strh.w r3, [r4, #3326] ; 0xcfe -1002a1f6: e78b b.n 1002a110 -1002a1f8: f8d5 30f8 ldr.w r3, [r5, #248] ; 0xf8 -1002a1fc: f8d5 1100 ldr.w r1, [r5, #256] ; 0x100 -1002a200: 075a lsls r2, r3, #29 -1002a202: bf44 itt mi -1002a204: f083 0304 eormi.w r3, r3, #4 -1002a208: f8c5 30f8 strmi.w r3, [r5, #248] ; 0xf8 -1002a20c: 4620 mov r0, r4 -1002a20e: f008 fa9c bl 1003274a -1002a212: f8d5 30fc ldr.w r3, [r5, #252] ; 0xfc -1002a216: 2201 movs r2, #1 -1002a218: fa02 f303 lsl.w r3, r2, r3 -1002a21c: f8b4 2cfc ldrh.w r2, [r4, #3324] ; 0xcfc -1002a220: 4640 mov r0, r8 -1002a222: ea22 0303 bic.w r3, r2, r3 -1002a226: f8a4 3cfc strh.w r3, [r4, #3324] ; 0xcfc -1002a22a: a901 add r1, sp, #4 -1002a22c: f7ed f9d6 bl 100175dc -1002a230: 4620 mov r0, r4 -1002a232: f7fe f885 bl 10028340 -1002a236: 4605 mov r5, r0 -1002a238: 2800 cmp r0, #0 -1002a23a: d06b beq.n 1002a314 -1002a23c: f8b4 3cfc ldrh.w r3, [r4, #3324] ; 0xcfc -1002a240: f023 0301 bic.w r3, r3, #1 -1002a244: b29b uxth r3, r3 -1002a246: 2b00 cmp r3, #0 -1002a248: d154 bne.n 1002a2f4 -1002a24a: f100 08f0 add.w r8, r0, #240 ; 0xf0 -1002a24e: 4640 mov r0, r8 -1002a250: a901 add r1, sp, #4 -1002a252: f7ed f9b9 bl 100175c8 -1002a256: f8d5 60e8 ldr.w r6, [r5, #232] ; 0xe8 -1002a25a: f105 0ae8 add.w sl, r5, #232 ; 0xe8 -1002a25e: 4650 mov r0, sl -1002a260: 4631 mov r1, r6 -1002a262: f7ed f98e bl 10017582 -1002a266: 2800 cmp r0, #0 -1002a268: d13a bne.n 1002a2e0 -1002a26a: 4630 mov r0, r6 -1002a26c: f7ed f8fc bl 10017468 -1002a270: f8d5 30f4 ldr.w r3, [r5, #244] ; 0xf4 -1002a274: 4640 mov r0, r8 -1002a276: 3b01 subs r3, #1 -1002a278: 2b00 cmp r3, #0 -1002a27a: f8c5 30f4 str.w r3, [r5, #244] ; 0xf4 -1002a27e: bf18 it ne -1002a280: 2301 movne r3, #1 -1002a282: f886 3065 strb.w r3, [r6, #101] ; 0x65 -1002a286: 2301 movs r3, #1 -1002a288: f886 3067 strb.w r3, [r6, #103] ; 0x67 -1002a28c: a901 add r1, sp, #4 -1002a28e: f604 1958 addw r9, r4, #2392 ; 0x958 -1002a292: f7ed f9a3 bl 100175dc -1002a296: 4648 mov r0, r9 -1002a298: a901 add r1, sp, #4 -1002a29a: f7ed f995 bl 100175c8 -1002a29e: 4620 mov r0, r4 -1002a2a0: 4631 mov r1, r6 -1002a2a2: f7ff fc10 bl 10029ac6 -1002a2a6: 2801 cmp r0, #1 -1002a2a8: d003 beq.n 1002a2b2 -1002a2aa: 4648 mov r0, r9 -1002a2ac: 4631 mov r1, r6 -1002a2ae: f7ff fb6f bl 10029990 -1002a2b2: 4648 mov r0, r9 -1002a2b4: a901 add r1, sp, #4 -1002a2b6: f7ed f991 bl 100175dc -1002a2ba: 4640 mov r0, r8 -1002a2bc: a901 add r1, sp, #4 -1002a2be: f7ed f983 bl 100175c8 -1002a2c2: f8d5 30f4 ldr.w r3, [r5, #244] ; 0xf4 -1002a2c6: f8d5 60e8 ldr.w r6, [r5, #232] ; 0xe8 -1002a2ca: 2b00 cmp r3, #0 -1002a2cc: d1c7 bne.n 1002a25e -1002a2ce: f8b4 3cfe ldrh.w r3, [r4, #3326] ; 0xcfe -1002a2d2: f047 0702 orr.w r7, r7, #2 -1002a2d6: f023 0301 bic.w r3, r3, #1 -1002a2da: f8a4 3cfe strh.w r3, [r4, #3326] ; 0xcfe -1002a2de: e7be b.n 1002a25e -1002a2e0: f8b4 3cfc ldrh.w r3, [r4, #3324] ; 0xcfc -1002a2e4: 4640 mov r0, r8 -1002a2e6: f023 0301 bic.w r3, r3, #1 -1002a2ea: f8a4 3cfc strh.w r3, [r4, #3324] ; 0xcfc -1002a2ee: a901 add r1, sp, #4 -1002a2f0: f7ed f974 bl 100175dc -1002a2f4: b12f cbz r7, 1002a302 -1002a2f6: 2200 movs r2, #0 -1002a2f8: 4620 mov r0, r4 -1002a2fa: 2105 movs r1, #5 -1002a2fc: 4613 mov r3, r2 -1002a2fe: f7f0 fe83 bl 1001b008 -1002a302: 4620 mov r0, r4 -1002a304: f7ff f9ff bl 10029706 -1002a308: b120 cbz r0, 1002a314 -1002a30a: f504 50c0 add.w r0, r4, #6144 ; 0x1800 -1002a30e: 301c adds r0, #28 -1002a310: f7ed f8c2 bl 10017498 -1002a314: b002 add sp, #8 -1002a316: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - -1002a31a : -1002a31a: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -1002a31e: f101 07f0 add.w r7, r1, #240 ; 0xf0 -1002a322: 460c mov r4, r1 -1002a324: 4606 mov r6, r0 -1002a326: a901 add r1, sp, #4 -1002a328: 4638 mov r0, r7 -1002a32a: f7ed f94d bl 100175c8 -1002a32e: f104 09e8 add.w r9, r4, #232 ; 0xe8 -1002a332: f8d4 50e8 ldr.w r5, [r4, #232] ; 0xe8 -1002a336: 4648 mov r0, r9 -1002a338: 4629 mov r1, r5 -1002a33a: f7ed f922 bl 10017582 -1002a33e: 2800 cmp r0, #0 -1002a340: d171 bne.n 1002a426 -1002a342: f895 3041 ldrb.w r3, [r5, #65] ; 0x41 -1002a346: 3b01 subs r3, #1 -1002a348: b2db uxtb r3, r3 -1002a34a: 2b06 cmp r3, #6 -1002a34c: d813 bhi.n 1002a376 -1002a34e: 2201 movs r2, #1 -1002a350: fa02 f303 lsl.w r3, r2, r3 -1002a354: f013 0f60 tst.w r3, #96 ; 0x60 -1002a358: d10a bne.n 1002a370 -1002a35a: f013 0f18 tst.w r3, #24 -1002a35e: d104 bne.n 1002a36a -1002a360: 079b lsls r3, r3, #30 -1002a362: d008 beq.n 1002a376 -1002a364: f894 3312 ldrb.w r3, [r4, #786] ; 0x312 -1002a368: e007 b.n 1002a37a -1002a36a: f894 3314 ldrb.w r3, [r4, #788] ; 0x314 -1002a36e: e004 b.n 1002a37a -1002a370: f894 3315 ldrb.w r3, [r4, #789] ; 0x315 -1002a374: e001 b.n 1002a37a -1002a376: f894 3313 ldrb.w r3, [r4, #787] ; 0x313 -1002a37a: f003 0302 and.w r3, r3, #2 -1002a37e: b2db uxtb r3, r3 -1002a380: 2b00 cmp r3, #0 -1002a382: d0d8 beq.n 1002a336 -1002a384: 4628 mov r0, r5 -1002a386: f7ed f86f bl 10017468 -1002a38a: f8d4 30f4 ldr.w r3, [r4, #244] ; 0xf4 -1002a38e: 2201 movs r2, #1 -1002a390: 3b01 subs r3, #1 -1002a392: f8c4 30f4 str.w r3, [r4, #244] ; 0xf4 -1002a396: f8d4 3318 ldr.w r3, [r4, #792] ; 0x318 -1002a39a: 3b01 subs r3, #1 -1002a39c: f8c4 3318 str.w r3, [r4, #792] ; 0x318 -1002a3a0: b12b cbz r3, 1002a3ae -1002a3a2: 2300 movs r3, #0 -1002a3a4: f885 2065 strb.w r2, [r5, #101] ; 0x65 -1002a3a8: f885 3069 strb.w r3, [r5, #105] ; 0x69 -1002a3ac: e003 b.n 1002a3b6 -1002a3ae: f885 3065 strb.w r3, [r5, #101] ; 0x65 -1002a3b2: f885 2069 strb.w r2, [r5, #105] ; 0x69 -1002a3b6: 2301 movs r3, #1 -1002a3b8: f885 3067 strb.w r3, [r5, #103] ; 0x67 -1002a3bc: 4638 mov r0, r7 -1002a3be: a901 add r1, sp, #4 -1002a3c0: f606 1858 addw r8, r6, #2392 ; 0x958 -1002a3c4: f7ed f90a bl 100175dc -1002a3c8: 4640 mov r0, r8 -1002a3ca: a901 add r1, sp, #4 -1002a3cc: f7ed f8fc bl 100175c8 -1002a3d0: 4630 mov r0, r6 -1002a3d2: 4629 mov r1, r5 -1002a3d4: f7ff fb77 bl 10029ac6 -1002a3d8: 2801 cmp r0, #1 -1002a3da: d003 beq.n 1002a3e4 -1002a3dc: 4640 mov r0, r8 -1002a3de: 4629 mov r1, r5 -1002a3e0: f7ff fad6 bl 10029990 -1002a3e4: 4640 mov r0, r8 -1002a3e6: a901 add r1, sp, #4 -1002a3e8: f7ed f8f8 bl 100175dc -1002a3ec: 4638 mov r0, r7 -1002a3ee: a901 add r1, sp, #4 -1002a3f0: f7ed f8ea bl 100175c8 -1002a3f4: f8d4 3318 ldr.w r3, [r4, #792] ; 0x318 -1002a3f8: 2b00 cmp r3, #0 -1002a3fa: d19a bne.n 1002a332 -1002a3fc: f894 2316 ldrb.w r2, [r4, #790] ; 0x316 -1002a400: 2a00 cmp r2, #0 -1002a402: d196 bne.n 1002a332 -1002a404: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc -1002a408: 2101 movs r1, #1 -1002a40a: fa01 f303 lsl.w r3, r1, r3 -1002a40e: f8b6 1cfe ldrh.w r1, [r6, #3326] ; 0xcfe -1002a412: 4630 mov r0, r6 -1002a414: ea21 0303 bic.w r3, r1, r3 -1002a418: f8a6 3cfe strh.w r3, [r6, #3326] ; 0xcfe -1002a41c: 2105 movs r1, #5 -1002a41e: 4613 mov r3, r2 -1002a420: f7f0 fdf2 bl 1001b008 -1002a424: e785 b.n 1002a332 -1002a426: 4638 mov r0, r7 -1002a428: a901 add r1, sp, #4 -1002a42a: f7ed f8d7 bl 100175dc -1002a42e: b003 add sp, #12 -1002a430: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - -1002a434 : -1002a434: b510 push {r4, lr} -1002a436: 4604 mov r4, r0 -1002a438: 4812 ldr r0, [pc, #72] ; (1002a484 ) -1002a43a: f7ed fa3b bl 100178b4 -1002a43e: f504 50c0 add.w r0, r4, #6144 ; 0x1800 -1002a442: 301c adds r0, #28 -1002a444: f7ed f840 bl 100174c8 -1002a448: b1a0 cbz r0, 1002a474 -1002a44a: f504 53c1 add.w r3, r4, #6176 ; 0x1820 -1002a44e: 3304 adds r3, #4 -1002a450: 681b ldr r3, [r3, #0] -1002a452: b97b cbnz r3, 1002a474 -1002a454: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -1002a458: 330c adds r3, #12 -1002a45a: 681b ldr r3, [r3, #0] -1002a45c: 2b01 cmp r3, #1 -1002a45e: d009 beq.n 1002a474 -1002a460: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -1002a464: 3310 adds r3, #16 -1002a466: 681b ldr r3, [r3, #0] -1002a468: 2b01 cmp r3, #1 -1002a46a: d003 beq.n 1002a474 -1002a46c: 4620 mov r0, r4 -1002a46e: f001 fa31 bl 1002b8d4 -1002a472: e7e4 b.n 1002a43e -1002a474: f504 50c1 add.w r0, r4, #6176 ; 0x1820 -1002a478: f7ed f80e bl 10017498 -1002a47c: e8bd 4010 ldmia.w sp!, {r4, lr} -1002a480: f7ed ba20 b.w 100178c4 -1002a484: 100416dd .word 0x100416dd - -1002a488 : -1002a488: f008 b895 b.w 100325b6 - -1002a48c : -1002a48c: f008 b88a b.w 100325a4 - -1002a490 : -1002a490: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002a494: f600 1958 addw r9, r0, #2392 ; 0x958 -1002a498: b095 sub sp, #84 ; 0x54 -1002a49a: 4605 mov r5, r0 -1002a49c: 4648 mov r0, r9 -1002a49e: 468a mov sl, r1 -1002a4a0: f7ff fa4a bl 10029938 -1002a4a4: 4604 mov r4, r0 -1002a4a6: 2800 cmp r0, #0 -1002a4a8: f000 80c3 beq.w 1002a632 -1002a4ac: f8da b000 ldr.w fp, [sl] -1002a4b0: 2300 movs r3, #0 -1002a4b2: a908 add r1, sp, #32 -1002a4b4: f100 0808 add.w r8, r0, #8 -1002a4b8: 4658 mov r0, fp -1002a4ba: f88d 300f strb.w r3, [sp, #15] -1002a4be: 9301 str r3, [sp, #4] -1002a4c0: f00c f9ed bl 1003689e <_rtw_open_pktfile> -1002a4c4: a904 add r1, sp, #16 -1002a4c6: 220e movs r2, #14 -1002a4c8: a808 add r0, sp, #32 -1002a4ca: f00c f9f1 bl 100368b0 <_rtw_pktfile_read> -1002a4ce: f8bd 001c ldrh.w r0, [sp, #28] -1002a4d2: f7ec ff57 bl 10017384 <_htons> -1002a4d6: f104 0745 add.w r7, r4, #69 ; 0x45 -1002a4da: 81a0 strh r0, [r4, #12] -1002a4dc: a904 add r1, sp, #16 -1002a4de: 4638 mov r0, r7 -1002a4e0: 2206 movs r2, #6 -1002a4e2: f104 064b add.w r6, r4, #75 ; 0x4b -1002a4e6: f7ec ff93 bl 10017410 -1002a4ea: 4630 mov r0, r6 -1002a4ec: f10d 0116 add.w r1, sp, #22 -1002a4f0: 2206 movs r2, #6 -1002a4f2: f7ec ff8d bl 10017410 -1002a4f6: 9b01 ldr r3, [sp, #4] -1002a4f8: f884 3066 strb.w r3, [r4, #102] ; 0x66 -1002a4fc: 692b ldr r3, [r5, #16] -1002a4fe: f013 0f60 tst.w r3, #96 ; 0x60 -1002a502: f000 8099 beq.w 1002a638 -1002a506: f104 0057 add.w r0, r4, #87 ; 0x57 -1002a50a: 4639 mov r1, r7 -1002a50c: 2206 movs r2, #6 -1002a50e: f7ec ff7f bl 10017410 -1002a512: f104 0051 add.w r0, r4, #81 ; 0x51 -1002a516: 4631 mov r1, r6 -1002a518: 2206 movs r2, #6 -1002a51a: f7ec ff79 bl 10017410 -1002a51e: 9b09 ldr r3, [sp, #36] ; 0x24 -1002a520: 6163 str r3, [r4, #20] -1002a522: 89a3 ldrh r3, [r4, #12] -1002a524: f5b3 6f00 cmp.w r3, #2048 ; 0x800 -1002a528: d11e bne.n 1002a568 -1002a52a: a808 add r0, sp, #32 -1002a52c: a90e add r1, sp, #56 ; 0x38 -1002a52e: 2218 movs r2, #24 -1002a530: f00c f9be bl 100368b0 <_rtw_pktfile_read> -1002a534: 2300 movs r3, #0 -1002a536: 72e3 strb r3, [r4, #11] -1002a538: 9b09 ldr r3, [sp, #36] ; 0x24 -1002a53a: f5b3 7f8d cmp.w r3, #282 ; 0x11a -1002a53e: d913 bls.n 1002a568 -1002a540: 89a3 ldrh r3, [r4, #12] -1002a542: f5b3 6f00 cmp.w r3, #2048 ; 0x800 -1002a546: d10f bne.n 1002a568 -1002a548: f89d 304d ldrb.w r3, [sp, #77] ; 0x4d -1002a54c: 2b44 cmp r3, #68 ; 0x44 -1002a54e: d103 bne.n 1002a558 -1002a550: f89d 304f ldrb.w r3, [sp, #79] ; 0x4f -1002a554: 2b43 cmp r3, #67 ; 0x43 -1002a556: e004 b.n 1002a562 -1002a558: 2b43 cmp r3, #67 ; 0x43 -1002a55a: d105 bne.n 1002a568 -1002a55c: f89d 304f ldrb.w r3, [sp, #79] ; 0x4f -1002a560: 2b44 cmp r3, #68 ; 0x44 -1002a562: bf04 itt eq -1002a564: 2301 moveq r3, #1 -1002a566: 72e3 strbeq r3, [r4, #11] -1002a568: 89a2 ldrh r2, [r4, #12] -1002a56a: f640 0306 movw r3, #2054 ; 0x806 -1002a56e: 429a cmp r2, r3 -1002a570: d10a bne.n 1002a588 -1002a572: 2100 movs r1, #0 -1002a574: 2207 movs r2, #7 -1002a576: a808 add r0, sp, #32 -1002a578: f00c f99a bl 100368b0 <_rtw_pktfile_read> -1002a57c: a808 add r0, sp, #32 -1002a57e: f10d 010f add.w r1, sp, #15 -1002a582: 2201 movs r2, #1 -1002a584: f00c f994 bl 100368b0 <_rtw_pktfile_read> -1002a588: 89a3 ldrh r3, [r4, #12] -1002a58a: f640 0206 movw r2, #2054 ; 0x806 -1002a58e: 4293 cmp r3, r2 -1002a590: d103 bne.n 1002a59a -1002a592: f89d 300f ldrb.w r3, [sp, #15] -1002a596: 2b01 cmp r3, #1 -1002a598: e002 b.n 1002a5a0 -1002a59a: f648 028e movw r2, #34958 ; 0x888e -1002a59e: 4293 cmp r3, r2 -1002a5a0: d002 beq.n 1002a5a8 -1002a5a2: 7ae3 ldrb r3, [r4, #11] -1002a5a4: 2b01 cmp r3, #1 -1002a5a6: d104 bne.n 1002a5b2 -1002a5a8: 4628 mov r0, r5 -1002a5aa: 2104 movs r1, #4 -1002a5ac: 2201 movs r2, #1 -1002a5ae: f7f2 fc9d bl 1001ceec -1002a5b2: f894 3057 ldrb.w r3, [r4, #87] ; 0x57 -1002a5b6: f013 0301 ands.w r3, r3, #1 -1002a5ba: d152 bne.n 1002a662 -1002a5bc: f505 6046 add.w r0, r5, #3168 ; 0xc60 -1002a5c0: f104 0157 add.w r1, r4, #87 ; 0x57 -1002a5c4: 9301 str r3, [sp, #4] -1002a5c6: f7fd fe65 bl 10028294 -1002a5ca: 9b01 ldr r3, [sp, #4] -1002a5cc: 4606 mov r6, r0 -1002a5ce: b360 cbz r0, 1002a62a -1002a5d0: 692f ldr r7, [r5, #16] -1002a5d2: f017 0710 ands.w r7, r7, #16 -1002a5d6: d14c bne.n 1002a672 -1002a5d8: f8d6 3100 ldr.w r3, [r6, #256] ; 0x100 -1002a5dc: 220e movs r2, #14 -1002a5de: 8222 strh r2, [r4, #16] -1002a5e0: 2218 movs r2, #24 -1002a5e2: f884 3043 strb.w r3, [r4, #67] ; 0x43 -1002a5e6: 8262 strh r2, [r4, #18] -1002a5e8: 2300 movs r3, #0 -1002a5ea: 2208 movs r2, #8 -1002a5ec: 6726 str r6, [r4, #112] ; 0x70 -1002a5ee: f884 3042 strb.w r3, [r4, #66] ; 0x42 -1002a5f2: 7262 strb r2, [r4, #9] -1002a5f4: f884 3041 strb.w r3, [r4, #65] ; 0x41 -1002a5f8: 692b ldr r3, [r5, #16] -1002a5fa: f013 0f70 tst.w r3, #112 ; 0x70 -1002a5fe: d03e beq.n 1002a67e -1002a600: f8d6 3104 ldr.w r3, [r6, #260] ; 0x104 -1002a604: b11b cbz r3, 1002a60e -1002a606: a808 add r0, sp, #32 -1002a608: 4641 mov r1, r8 -1002a60a: f7fe fe39 bl 10029280 -1002a60e: f8d6 3110 ldr.w r3, [r6, #272] ; 0x110 -1002a612: 2b01 cmp r3, #1 -1002a614: d146 bne.n 1002a6a4 -1002a616: 2300 movs r3, #0 -1002a618: 89a2 ldrh r2, [r4, #12] -1002a61a: 7723 strb r3, [r4, #28] -1002a61c: f648 038e movw r3, #34958 ; 0x888e -1002a620: 429a cmp r2, r3 -1002a622: d067 beq.n 1002a6f4 -1002a624: 692b ldr r3, [r5, #16] -1002a626: 03db lsls r3, r3, #15 -1002a628: d464 bmi.n 1002a6f4 -1002a62a: 4648 mov r0, r9 -1002a62c: 4621 mov r1, r4 -1002a62e: f7ff f9af bl 10029990 -1002a632: f04f 30ff mov.w r0, #4294967295 -1002a636: e0d6 b.n 1002a7e6 -1002a638: 0718 lsls r0, r3, #28 -1002a63a: d40d bmi.n 1002a658 -1002a63c: 06d9 lsls r1, r3, #27 -1002a63e: f57f af6e bpl.w 1002a51e -1002a642: f104 0057 add.w r0, r4, #87 ; 0x57 -1002a646: 4639 mov r1, r7 -1002a648: 2206 movs r2, #6 -1002a64a: f7ec fee1 bl 10017410 -1002a64e: f104 0051 add.w r0, r4, #81 ; 0x51 -1002a652: f105 019c add.w r1, r5, #156 ; 0x9c -1002a656: e75f b.n 1002a518 -1002a658: f104 0057 add.w r0, r4, #87 ; 0x57 -1002a65c: f105 019c add.w r1, r5, #156 ; 0x9c -1002a660: e754 b.n 1002a50c -1002a662: 4628 mov r0, r5 -1002a664: f7fd fe6c bl 10028340 -1002a668: 4606 mov r6, r0 -1002a66a: 2800 cmp r0, #0 -1002a66c: d0dd beq.n 1002a62a -1002a66e: 2701 movs r7, #1 -1002a670: e7b2 b.n 1002a5d8 -1002a672: f8d6 20f8 ldr.w r2, [r6, #248] ; 0xf8 -1002a676: 07d2 lsls r2, r2, #31 -1002a678: d5d7 bpl.n 1002a62a -1002a67a: 461f mov r7, r3 -1002a67c: e7ac b.n 1002a5d8 -1002a67e: f8d5 344c ldr.w r3, [r5, #1100] ; 0x44c -1002a682: 2b00 cmp r3, #0 -1002a684: d0c3 beq.n 1002a60e -1002a686: a808 add r0, sp, #32 -1002a688: 4641 mov r1, r8 -1002a68a: f7fe fdf9 bl 10029280 -1002a68e: f895 049d ldrb.w r0, [r5, #1181] ; 0x49d -1002a692: 2800 cmp r0, #0 -1002a694: d0bb beq.n 1002a60e -1002a696: f894 1041 ldrb.w r1, [r4, #65] ; 0x41 -1002a69a: f7fe fe62 bl 10029362 -1002a69e: f884 0041 strb.w r0, [r4, #65] ; 0x41 -1002a6a2: e7b4 b.n 1002a60e -1002a6a4: f8d5 3d08 ldr.w r3, [r5, #3336] ; 0xd08 -1002a6a8: 2b04 cmp r3, #4 -1002a6aa: d80e bhi.n 1002a6ca -1002a6ac: e8df f003 tbb [pc, r3] -1002a6b0: 0a030a0a .word 0x0a030a0a -1002a6b4: 0a .byte 0x0a -1002a6b5: 00 .byte 0x00 -1002a6b6: b117 cbz r7, 1002a6be -1002a6b8: f8d5 3d64 ldr.w r3, [r5, #3428] ; 0xd64 -1002a6bc: e004 b.n 1002a6c8 -1002a6be: f8d6 3114 ldr.w r3, [r6, #276] ; 0x114 -1002a6c2: e001 b.n 1002a6c8 -1002a6c4: f8d5 3d0c ldr.w r3, [r5, #3340] ; 0xd0c -1002a6c8: 7723 strb r3, [r4, #28] -1002a6ca: f8d5 3d08 ldr.w r3, [r5, #3336] ; 0xd08 -1002a6ce: 2b03 cmp r3, #3 -1002a6d0: d80d bhi.n 1002a6ee -1002a6d2: e8df f003 tbb [pc, r3] -1002a6d6: 0202 .short 0x0202 -1002a6d8: 0205 .short 0x0205 -1002a6da: f8d5 3d10 ldr.w r3, [r5, #3344] ; 0xd10 -1002a6de: e007 b.n 1002a6f0 -1002a6e0: b117 cbz r7, 1002a6e8 -1002a6e2: f8d5 3d68 ldr.w r3, [r5, #3432] ; 0xd68 -1002a6e6: e003 b.n 1002a6f0 -1002a6e8: f884 705d strb.w r7, [r4, #93] ; 0x5d -1002a6ec: e002 b.n 1002a6f4 -1002a6ee: 2300 movs r3, #0 -1002a6f0: f884 305d strb.w r3, [r4, #93] ; 0x5d -1002a6f4: 7f23 ldrb r3, [r4, #28] -1002a6f6: 1e5a subs r2, r3, #1 -1002a6f8: 2a04 cmp r2, #4 -1002a6fa: d813 bhi.n 1002a724 -1002a6fc: e8df f002 tbb [pc, r2] -1002a700: 0e120503 .word 0x0e120503 -1002a704: 03 .byte 0x03 -1002a705: 00 .byte 0x00 -1002a706: 2204 movs r2, #4 -1002a708: e009 b.n 1002a71e -1002a70a: 2208 movs r2, #8 -1002a70c: 7762 strb r2, [r4, #29] -1002a70e: 2204 movs r2, #4 -1002a710: 77a2 strb r2, [r4, #30] -1002a712: f241 025d movw r2, #4189 ; 0x105d -1002a716: 5caa ldrb r2, [r5, r2] -1002a718: b942 cbnz r2, 1002a72c -1002a71a: e786 b.n 1002a62a -1002a71c: 2208 movs r2, #8 -1002a71e: 7762 strb r2, [r4, #29] -1002a720: 77a2 strb r2, [r4, #30] -1002a722: e003 b.n 1002a72c -1002a724: 2200 movs r2, #0 -1002a726: 7762 strb r2, [r4, #29] -1002a728: 77a2 strb r2, [r4, #30] -1002a72a: b153 cbz r3, 1002a742 -1002a72c: f505 5283 add.w r2, r5, #4192 ; 0x1060 -1002a730: 6812 ldr r2, [r2, #0] -1002a732: 2a01 cmp r2, #1 -1002a734: d003 beq.n 1002a73e -1002a736: f241 0268 movw r2, #4200 ; 0x1068 -1002a73a: 58aa ldr r2, [r5, r2] -1002a73c: b90a cbnz r2, 1002a742 -1002a73e: 2201 movs r2, #1 -1002a740: e000 b.n 1002a744 -1002a742: 2200 movs r2, #0 -1002a744: 72a2 strb r2, [r4, #10] -1002a746: 686a ldr r2, [r5, #4] -1002a748: 2a03 cmp r2, #3 -1002a74a: d107 bne.n 1002a75c -1002a74c: b133 cbz r3, 1002a75c -1002a74e: b91f cbnz r7, 1002a758 -1002a750: f003 03fb and.w r3, r3, #251 ; 0xfb -1002a754: 2b01 cmp r3, #1 -1002a756: d101 bne.n 1002a75c -1002a758: 2301 movs r3, #1 -1002a75a: 72a3 strb r3, [r4, #10] -1002a75c: 4658 mov r0, fp -1002a75e: 4641 mov r1, r8 -1002a760: f00c f8bd bl 100368de -1002a764: 2300 movs r3, #0 -1002a766: f884 3065 strb.w r3, [r4, #101] ; 0x65 -1002a76a: f884 3069 strb.w r3, [r4, #105] ; 0x69 -1002a76e: f884 3067 strb.w r3, [r4, #103] ; 0x67 -1002a772: f8d6 2104 ldr.w r2, [r6, #260] ; 0x104 -1002a776: f884 205e strb.w r2, [r4, #94] ; 0x5e -1002a77a: f896 2176 ldrb.w r2, [r6, #374] ; 0x176 -1002a77e: f884 2060 strb.w r2, [r4, #96] ; 0x60 -1002a782: f8d6 21f4 ldr.w r2, [r6, #500] ; 0x1f4 -1002a786: f884 205f strb.w r2, [r4, #95] ; 0x5f -1002a78a: f896 21fc ldrb.w r2, [r6, #508] ; 0x1fc -1002a78e: f884 2061 strb.w r2, [r4, #97] ; 0x61 -1002a792: f896 21fd ldrb.w r2, [r6, #509] ; 0x1fd -1002a796: f884 2062 strb.w r2, [r4, #98] ; 0x62 -1002a79a: f896 21fe ldrb.w r2, [r6, #510] ; 0x1fe -1002a79e: f884 3064 strb.w r3, [r4, #100] ; 0x64 -1002a7a2: f884 2063 strb.w r2, [r4, #99] ; 0x63 -1002a7a6: f884 306c strb.w r3, [r4, #108] ; 0x6c -1002a7aa: f8da 3000 ldr.w r3, [sl] -1002a7ae: 6763 str r3, [r4, #116] ; 0x74 -1002a7b0: 692a ldr r2, [r5, #16] -1002a7b2: f894 3041 ldrb.w r3, [r4, #65] ; 0x41 -1002a7b6: 06d6 lsls r6, r2, #27 -1002a7b8: d508 bpl.n 1002a7cc -1002a7ba: 89a1 ldrh r1, [r4, #12] -1002a7bc: f648 028e movw r2, #34958 ; 0x888e -1002a7c0: 4291 cmp r1, r2 -1002a7c2: d00e beq.n 1002a7e2 -1002a7c4: 7ae2 ldrb r2, [r4, #11] -1002a7c6: 2a01 cmp r2, #1 -1002a7c8: bf08 it eq -1002a7ca: 2307 moveq r3, #7 -1002a7cc: f884 3068 strb.w r3, [r4, #104] ; 0x68 -1002a7d0: 4628 mov r0, r5 -1002a7d2: 4621 mov r1, r4 -1002a7d4: f007 fee6 bl 100325a4 -1002a7d8: f1d0 0001 rsbs r0, r0, #1 -1002a7dc: bf38 it cc -1002a7de: 2000 movcc r0, #0 -1002a7e0: e001 b.n 1002a7e6 -1002a7e2: 2307 movs r3, #7 -1002a7e4: e7f2 b.n 1002a7cc -1002a7e6: b015 add sp, #84 ; 0x54 -1002a7e8: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -1002a7ec : -1002a7ec: 6803 ldr r3, [r0, #0] -1002a7ee: b113 cbz r3, 1002a7f6 -1002a7f0: 6099 str r1, [r3, #8] -1002a7f2: 2300 movs r3, #0 -1002a7f4: 6003 str r3, [r0, #0] -1002a7f6: 4770 bx lr - -1002a7f8 : -1002a7f8: b573 push {r0, r1, r4, r5, r6, lr} -1002a7fa: f500 76de add.w r6, r0, #444 ; 0x1bc -1002a7fe: f500 74da add.w r4, r0, #436 ; 0x1b4 -1002a802: a901 add r1, sp, #4 -1002a804: 4605 mov r5, r0 -1002a806: 4630 mov r0, r6 -1002a808: f7ec fe9a bl 10017540 -1002a80c: 4620 mov r0, r4 -1002a80e: f7ec feb3 bl 10017578 -1002a812: 2801 cmp r0, #1 -1002a814: d015 beq.n 1002a842 -1002a816: f8d5 41b4 ldr.w r4, [r5, #436] ; 0x1b4 -1002a81a: 4620 mov r0, r4 -1002a81c: f7ec fe24 bl 10017468 -1002a820: b184 cbz r4, 1002a844 -1002a822: f8d5 31d4 ldr.w r3, [r5, #468] ; 0x1d4 -1002a826: 3b01 subs r3, #1 -1002a828: f8c5 31d4 str.w r3, [r5, #468] ; 0x1d4 -1002a82c: 2300 movs r3, #0 -1002a82e: 6163 str r3, [r4, #20] -1002a830: 6223 str r3, [r4, #32] -1002a832: 6a63 ldr r3, [r4, #36] ; 0x24 -1002a834: b133 cbz r3, 1002a844 -1002a836: f104 0024 add.w r0, r4, #36 ; 0x24 -1002a83a: 2102 movs r1, #2 -1002a83c: f7ff ffd6 bl 1002a7ec -1002a840: e000 b.n 1002a844 -1002a842: 2400 movs r4, #0 -1002a844: 4630 mov r0, r6 -1002a846: a901 add r1, sp, #4 -1002a848: f7ec fe84 bl 10017554 -1002a84c: 4620 mov r0, r4 -1002a84e: b002 add sp, #8 -1002a850: bd70 pop {r4, r5, r6, pc} - -1002a852 : -1002a852: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1002a854: 4605 mov r5, r0 -1002a856: 460c mov r4, r1 -1002a858: b379 cbz r1, 1002a8ba -1002a85a: 68c8 ldr r0, [r1, #12] -1002a85c: b120 cbz r0, 1002a868 -1002a85e: 69c1 ldr r1, [r0, #28] -1002a860: f00b ffc0 bl 100367e4 -1002a864: 2300 movs r3, #0 -1002a866: 60e3 str r3, [r4, #12] -1002a868: 6a63 ldr r3, [r4, #36] ; 0x24 -1002a86a: b123 cbz r3, 1002a876 -1002a86c: f104 0024 add.w r0, r4, #36 ; 0x24 -1002a870: 2103 movs r1, #3 -1002a872: f7ff ffbb bl 1002a7ec -1002a876: 8b26 ldrh r6, [r4, #24] -1002a878: 2e01 cmp r6, #1 -1002a87a: d104 bne.n 1002a886 -1002a87c: 4628 mov r0, r5 -1002a87e: 4621 mov r1, r4 -1002a880: f7ff f839 bl 100298f6 -1002a884: e01b b.n 1002a8be -1002a886: b9d6 cbnz r6, 1002a8be -1002a888: f505 76de add.w r6, r5, #444 ; 0x1bc -1002a88c: a901 add r1, sp, #4 -1002a88e: 4630 mov r0, r6 -1002a890: f7ec fe56 bl 10017540 -1002a894: f505 77da add.w r7, r5, #436 ; 0x1b4 -1002a898: 4620 mov r0, r4 -1002a89a: f7ec fde5 bl 10017468 -1002a89e: 4620 mov r0, r4 -1002a8a0: 4639 mov r1, r7 -1002a8a2: f7ec fddb bl 1001745c -1002a8a6: f8d5 31d4 ldr.w r3, [r5, #468] ; 0x1d4 -1002a8aa: 4630 mov r0, r6 -1002a8ac: 3301 adds r3, #1 -1002a8ae: f8c5 31d4 str.w r3, [r5, #468] ; 0x1d4 -1002a8b2: a901 add r1, sp, #4 -1002a8b4: f7ec fe4e bl 10017554 -1002a8b8: e001 b.n 1002a8be -1002a8ba: 4608 mov r0, r1 -1002a8bc: e000 b.n 1002a8c0 -1002a8be: 2001 movs r0, #1 -1002a8c0: b003 add sp, #12 -1002a8c2: bdf0 pop {r4, r5, r6, r7, pc} - -1002a8c4 : -1002a8c4: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1002a8c6: f500 76f0 add.w r6, r0, #480 ; 0x1e0 -1002a8ca: f500 74ec add.w r4, r0, #472 ; 0x1d8 -1002a8ce: 4605 mov r5, r0 -1002a8d0: 460f mov r7, r1 -1002a8d2: 4630 mov r0, r6 -1002a8d4: a901 add r1, sp, #4 -1002a8d6: f7ec fe33 bl 10017540 -1002a8da: 4620 mov r0, r4 -1002a8dc: f7ec fe4c bl 10017578 -1002a8e0: 2801 cmp r0, #1 -1002a8e2: d022 beq.n 1002a92a -1002a8e4: f8d5 41d8 ldr.w r4, [r5, #472] ; 0x1d8 -1002a8e8: 4620 mov r0, r4 -1002a8ea: f7ec fdbd bl 10017468 -1002a8ee: b1ec cbz r4, 1002a92c -1002a8f0: f8d5 31ec ldr.w r3, [r5, #492] ; 0x1ec -1002a8f4: 3b01 subs r3, #1 -1002a8f6: f8c5 31ec str.w r3, [r5, #492] ; 0x1ec -1002a8fa: 2300 movs r3, #0 -1002a8fc: 6163 str r3, [r4, #20] -1002a8fe: 6a63 ldr r3, [r4, #36] ; 0x24 -1002a900: b123 cbz r3, 1002a90c -1002a902: f104 0024 add.w r0, r4, #36 ; 0x24 -1002a906: 2102 movs r1, #2 -1002a908: f7ff ff70 bl 1002a7ec -1002a90c: f240 6052 movw r0, #1618 ; 0x652 -1002a910: 2f00 cmp r7, #0 -1002a912: bf18 it ne -1002a914: 4638 movne r0, r7 -1002a916: 2100 movs r1, #0 -1002a918: f00b ff87 bl 1003682a -1002a91c: 60e0 str r0, [r4, #12] -1002a91e: b128 cbz r0, 1002a92c -1002a920: 6903 ldr r3, [r0, #16] -1002a922: 2200 movs r2, #0 -1002a924: 6222 str r2, [r4, #32] -1002a926: 6123 str r3, [r4, #16] -1002a928: e000 b.n 1002a92c -1002a92a: 2400 movs r4, #0 -1002a92c: 4630 mov r0, r6 -1002a92e: a901 add r1, sp, #4 -1002a930: f7ec fe10 bl 10017554 -1002a934: b134 cbz r4, 1002a944 -1002a936: 68e6 ldr r6, [r4, #12] -1002a938: b926 cbnz r6, 1002a944 -1002a93a: 4621 mov r1, r4 -1002a93c: 4628 mov r0, r5 -1002a93e: f7ff ff88 bl 1002a852 -1002a942: 4634 mov r4, r6 -1002a944: 4620 mov r0, r4 -1002a946: b003 add sp, #12 -1002a948: bdf0 pop {r4, r5, r6, r7, pc} - -1002a94a : -1002a94a: 2100 movs r1, #0 -1002a94c: f7ff bf4e b.w 1002a7ec - -1002a950 : -1002a950: f8d0 1bfc ldr.w r1, [r0, #3068] ; 0xbfc -1002a954: f8d0 0be0 ldr.w r0, [r0, #3040] ; 0xbe0 -1002a958: 00c9 lsls r1, r1, #3 -1002a95a: f7ec bd56 b.w 1001740a - -1002a95e : -1002a95e: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1002a960: 6805 ldr r5, [r0, #0] -1002a962: f641 035c movw r3, #6236 ; 0x185c -1002a966: 58eb ldr r3, [r5, r3] -1002a968: 460f mov r7, r1 -1002a96a: 689c ldr r4, [r3, #8] -1002a96c: a901 add r1, sp, #4 -1002a96e: 3420 adds r4, #32 -1002a970: 4620 mov r0, r4 -1002a972: 4616 mov r6, r2 -1002a974: f7ec fde4 bl 10017540 -1002a978: f505 53a0 add.w r3, r5, #5120 ; 0x1400 -1002a97c: f893 2035 ldrb.w r2, [r3, #53] ; 0x35 -1002a980: b112 cbz r2, 1002a988 -1002a982: 6f1b ldr r3, [r3, #112] ; 0x70 -1002a984: 2b02 cmp r3, #2 -1002a986: d005 beq.n 1002a994 -1002a988: f241 63c8 movw r3, #5832 ; 0x16c8 -1002a98c: 58eb ldr r3, [r5, r3] -1002a98e: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 -1002a992: b12b cbz r3, 1002a9a0 -1002a994: 4620 mov r0, r4 -1002a996: a901 add r1, sp, #4 -1002a998: f7ec fddc bl 10017554 -1002a99c: 2000 movs r0, #0 -1002a99e: e009 b.n 1002a9b4 -1002a9a0: f107 4180 add.w r1, r7, #1073741824 ; 0x40000000 -1002a9a4: f501 2100 add.w r1, r1, #524288 ; 0x80000 -1002a9a8: 600e str r6, [r1, #0] -1002a9aa: 4620 mov r0, r4 -1002a9ac: a901 add r1, sp, #4 -1002a9ae: f7ec fdd1 bl 10017554 -1002a9b2: 2004 movs r0, #4 -1002a9b4: b003 add sp, #12 -1002a9b6: bdf0 pop {r4, r5, r6, r7, pc} - -1002a9b8 : -1002a9b8: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1002a9ba: 6805 ldr r5, [r0, #0] -1002a9bc: f641 035c movw r3, #6236 ; 0x185c -1002a9c0: 58eb ldr r3, [r5, r3] -1002a9c2: 460e mov r6, r1 -1002a9c4: 689c ldr r4, [r3, #8] -1002a9c6: a901 add r1, sp, #4 -1002a9c8: 3420 adds r4, #32 -1002a9ca: 4620 mov r0, r4 -1002a9cc: 4617 mov r7, r2 -1002a9ce: f7ec fdb7 bl 10017540 -1002a9d2: f505 53a0 add.w r3, r5, #5120 ; 0x1400 -1002a9d6: f893 2035 ldrb.w r2, [r3, #53] ; 0x35 -1002a9da: b112 cbz r2, 1002a9e2 -1002a9dc: 6f1b ldr r3, [r3, #112] ; 0x70 -1002a9de: 2b02 cmp r3, #2 -1002a9e0: d005 beq.n 1002a9ee -1002a9e2: f241 63c8 movw r3, #5832 ; 0x16c8 -1002a9e6: 58eb ldr r3, [r5, r3] -1002a9e8: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 -1002a9ec: b12b cbz r3, 1002a9fa -1002a9ee: 4620 mov r0, r4 -1002a9f0: a901 add r1, sp, #4 -1002a9f2: f7ec fdaf bl 10017554 -1002a9f6: 2000 movs r0, #0 -1002a9f8: e009 b.n 1002aa0e -1002a9fa: f106 4180 add.w r1, r6, #1073741824 ; 0x40000000 -1002a9fe: f501 2100 add.w r1, r1, #524288 ; 0x80000 -1002aa02: 800f strh r7, [r1, #0] -1002aa04: 4620 mov r0, r4 -1002aa06: a901 add r1, sp, #4 -1002aa08: f7ec fda4 bl 10017554 -1002aa0c: 2002 movs r0, #2 -1002aa0e: b003 add sp, #12 -1002aa10: bdf0 pop {r4, r5, r6, r7, pc} - -1002aa12 : -1002aa12: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1002aa14: 6805 ldr r5, [r0, #0] -1002aa16: f641 035c movw r3, #6236 ; 0x185c -1002aa1a: 58eb ldr r3, [r5, r3] -1002aa1c: 460e mov r6, r1 -1002aa1e: 689c ldr r4, [r3, #8] -1002aa20: a901 add r1, sp, #4 -1002aa22: 3420 adds r4, #32 -1002aa24: 4620 mov r0, r4 -1002aa26: 4617 mov r7, r2 -1002aa28: f7ec fd8a bl 10017540 -1002aa2c: f505 53a0 add.w r3, r5, #5120 ; 0x1400 -1002aa30: f893 2035 ldrb.w r2, [r3, #53] ; 0x35 -1002aa34: b112 cbz r2, 1002aa3c -1002aa36: 6f1b ldr r3, [r3, #112] ; 0x70 -1002aa38: 2b02 cmp r3, #2 -1002aa3a: d005 beq.n 1002aa48 -1002aa3c: f241 63c8 movw r3, #5832 ; 0x16c8 -1002aa40: 58eb ldr r3, [r5, r3] -1002aa42: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 -1002aa46: b12b cbz r3, 1002aa54 -1002aa48: 4620 mov r0, r4 -1002aa4a: a901 add r1, sp, #4 -1002aa4c: f7ec fd82 bl 10017554 -1002aa50: 2000 movs r0, #0 -1002aa52: e009 b.n 1002aa68 -1002aa54: f106 4180 add.w r1, r6, #1073741824 ; 0x40000000 -1002aa58: f501 2100 add.w r1, r1, #524288 ; 0x80000 -1002aa5c: 700f strb r7, [r1, #0] -1002aa5e: 4620 mov r0, r4 -1002aa60: a901 add r1, sp, #4 -1002aa62: f7ec fd77 bl 10017554 -1002aa66: 2001 movs r0, #1 -1002aa68: b003 add sp, #12 -1002aa6a: bdf0 pop {r4, r5, r6, r7, pc} - -1002aa6c : -1002aa6c: b573 push {r0, r1, r4, r5, r6, lr} -1002aa6e: 6805 ldr r5, [r0, #0] -1002aa70: f641 035c movw r3, #6236 ; 0x185c -1002aa74: 58eb ldr r3, [r5, r3] -1002aa76: 460e mov r6, r1 -1002aa78: 689c ldr r4, [r3, #8] -1002aa7a: a901 add r1, sp, #4 -1002aa7c: 3420 adds r4, #32 -1002aa7e: 4620 mov r0, r4 -1002aa80: f7ec fd5e bl 10017540 -1002aa84: f505 53a0 add.w r3, r5, #5120 ; 0x1400 -1002aa88: f893 2035 ldrb.w r2, [r3, #53] ; 0x35 -1002aa8c: b112 cbz r2, 1002aa94 -1002aa8e: 6f1b ldr r3, [r3, #112] ; 0x70 -1002aa90: 2b02 cmp r3, #2 -1002aa92: d005 beq.n 1002aaa0 -1002aa94: f241 63c8 movw r3, #5832 ; 0x16c8 -1002aa98: 58eb ldr r3, [r5, r3] -1002aa9a: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 -1002aa9e: b12b cbz r3, 1002aaac -1002aaa0: 4620 mov r0, r4 -1002aaa2: a901 add r1, sp, #4 -1002aaa4: f7ec fd56 bl 10017554 -1002aaa8: 2000 movs r0, #0 -1002aaaa: e009 b.n 1002aac0 -1002aaac: f106 4180 add.w r1, r6, #1073741824 ; 0x40000000 -1002aab0: f501 2100 add.w r1, r1, #524288 ; 0x80000 -1002aab4: 680d ldr r5, [r1, #0] -1002aab6: 4620 mov r0, r4 -1002aab8: a901 add r1, sp, #4 -1002aaba: f7ec fd4b bl 10017554 -1002aabe: 4628 mov r0, r5 -1002aac0: b002 add sp, #8 -1002aac2: bd70 pop {r4, r5, r6, pc} - -1002aac4 : -1002aac4: b573 push {r0, r1, r4, r5, r6, lr} -1002aac6: 6805 ldr r5, [r0, #0] -1002aac8: f641 035c movw r3, #6236 ; 0x185c -1002aacc: 58eb ldr r3, [r5, r3] -1002aace: 460e mov r6, r1 -1002aad0: 689c ldr r4, [r3, #8] -1002aad2: a901 add r1, sp, #4 -1002aad4: 3420 adds r4, #32 -1002aad6: 4620 mov r0, r4 -1002aad8: f7ec fd32 bl 10017540 -1002aadc: f505 53a0 add.w r3, r5, #5120 ; 0x1400 -1002aae0: f893 2035 ldrb.w r2, [r3, #53] ; 0x35 -1002aae4: b112 cbz r2, 1002aaec -1002aae6: 6f1b ldr r3, [r3, #112] ; 0x70 -1002aae8: 2b02 cmp r3, #2 -1002aaea: d005 beq.n 1002aaf8 -1002aaec: f241 63c8 movw r3, #5832 ; 0x16c8 -1002aaf0: 58eb ldr r3, [r5, r3] -1002aaf2: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 -1002aaf6: b12b cbz r3, 1002ab04 -1002aaf8: 4620 mov r0, r4 -1002aafa: a901 add r1, sp, #4 -1002aafc: f7ec fd2a bl 10017554 -1002ab00: 2000 movs r0, #0 -1002ab02: e00a b.n 1002ab1a -1002ab04: f106 4180 add.w r1, r6, #1073741824 ; 0x40000000 -1002ab08: f501 2100 add.w r1, r1, #524288 ; 0x80000 -1002ab0c: 880d ldrh r5, [r1, #0] -1002ab0e: 4620 mov r0, r4 -1002ab10: b2ad uxth r5, r5 -1002ab12: a901 add r1, sp, #4 -1002ab14: f7ec fd1e bl 10017554 -1002ab18: 4628 mov r0, r5 -1002ab1a: b002 add sp, #8 -1002ab1c: bd70 pop {r4, r5, r6, pc} - -1002ab1e : -1002ab1e: b573 push {r0, r1, r4, r5, r6, lr} -1002ab20: 6805 ldr r5, [r0, #0] -1002ab22: f641 035c movw r3, #6236 ; 0x185c -1002ab26: 58eb ldr r3, [r5, r3] -1002ab28: 460e mov r6, r1 -1002ab2a: 689c ldr r4, [r3, #8] -1002ab2c: a901 add r1, sp, #4 -1002ab2e: 3420 adds r4, #32 -1002ab30: 4620 mov r0, r4 -1002ab32: f7ec fd05 bl 10017540 -1002ab36: f505 53a0 add.w r3, r5, #5120 ; 0x1400 -1002ab3a: f893 2035 ldrb.w r2, [r3, #53] ; 0x35 -1002ab3e: b112 cbz r2, 1002ab46 -1002ab40: 6f1b ldr r3, [r3, #112] ; 0x70 -1002ab42: 2b02 cmp r3, #2 -1002ab44: d005 beq.n 1002ab52 -1002ab46: f241 63c8 movw r3, #5832 ; 0x16c8 -1002ab4a: 58eb ldr r3, [r5, r3] -1002ab4c: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 -1002ab50: b12b cbz r3, 1002ab5e -1002ab52: 4620 mov r0, r4 -1002ab54: a901 add r1, sp, #4 -1002ab56: f7ec fcfd bl 10017554 -1002ab5a: 2000 movs r0, #0 -1002ab5c: e00a b.n 1002ab74 -1002ab5e: f106 4180 add.w r1, r6, #1073741824 ; 0x40000000 -1002ab62: f501 2100 add.w r1, r1, #524288 ; 0x80000 -1002ab66: 780d ldrb r5, [r1, #0] -1002ab68: 4620 mov r0, r4 -1002ab6a: b2ed uxtb r5, r5 -1002ab6c: a901 add r1, sp, #4 -1002ab6e: f7ec fcf1 bl 10017554 -1002ab72: 4628 mov r0, r5 -1002ab74: b002 add sp, #8 -1002ab76: bd70 pop {r4, r5, r6, pc} - -1002ab78 : -1002ab78: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -1002ab7c: 014f lsls r7, r1, #5 -1002ab7e: f600 1558 addw r5, r0, #2392 ; 0x958 -1002ab82: 4438 add r0, r7 -1002ab84: f107 0890 add.w r8, r7, #144 ; 0x90 -1002ab88: f8d0 99ec ldr.w r9, [r0, #2540] ; 0x9ec -1002ab8c: 460e mov r6, r1 -1002ab8e: eb05 0408 add.w r4, r5, r8 -1002ab92: 69e3 ldr r3, [r4, #28] -1002ab94: b1a3 cbz r3, 1002abc0 -1002ab96: 68a2 ldr r2, [r4, #8] -1002ab98: 6820 ldr r0, [r4, #0] -1002ab9a: 0153 lsls r3, r2, #5 -1002ab9c: 58c1 ldr r1, [r0, r3] -1002ab9e: 2e04 cmp r6, #4 -1002aba0: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000 -1002aba4: 50c1 str r1, [r0, r3] -1002aba6: d006 beq.n 1002abb6 -1002aba8: 68e3 ldr r3, [r4, #12] -1002abaa: 3201 adds r2, #1 -1002abac: fbb2 f1f3 udiv r1, r2, r3 -1002abb0: fb03 2311 mls r3, r3, r1, r2 -1002abb4: 60a3 str r3, [r4, #8] -1002abb6: 4620 mov r0, r4 -1002abb8: f000 ff51 bl 1002ba5e -1002abbc: 4601 mov r1, r0 -1002abbe: b908 cbnz r0, 1002abc4 -1002abc0: 2600 movs r6, #0 -1002abc2: e00a b.n 1002abda -1002abc4: 4628 mov r0, r5 -1002abc6: f7ff fe44 bl 1002a852 -1002abca: e7e2 b.n 1002ab92 -1002abcc: f859 0026 ldr.w r0, [r9, r6, lsl #2] -1002abd0: b1b8 cbz r0, 1002ac02 -1002abd2: 2168 movs r1, #104 ; 0x68 -1002abd4: f7ec fc19 bl 1001740a -1002abd8: 3601 adds r6, #1 -1002abda: 68e1 ldr r1, [r4, #12] -1002abdc: 428e cmp r6, r1 -1002abde: d3f5 bcc.n 1002abcc -1002abe0: 6860 ldr r0, [r4, #4] -1002abe2: 0089 lsls r1, r1, #2 -1002abe4: f7ec fc11 bl 1001740a -1002abe8: 68e1 ldr r1, [r4, #12] -1002abea: f855 0008 ldr.w r0, [r5, r8] -1002abee: 0149 lsls r1, r1, #5 -1002abf0: f7ec fc0b bl 1001740a -1002abf4: f107 00a8 add.w r0, r7, #168 ; 0xa8 -1002abf8: 4428 add r0, r5 -1002abfa: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -1002abfe: f7ec bcd3 b.w 100175a8 -1002ac02: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - ... - -1002ac08 : -1002ac08: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002ac0c: 2202 movs r2, #2 -1002ac0e: 2304 movs r3, #4 -1002ac10: f8c0 2af8 str.w r2, [r0, #2808] ; 0xaf8 -1002ac14: f8c0 2b00 str.w r2, [r0, #2816] ; 0xb00 -1002ac18: f640 0238 movw r2, #2104 ; 0x838 -1002ac1c: 4604 mov r4, r0 -1002ac1e: f8c0 3ae8 str.w r3, [r0, #2792] ; 0xae8 -1002ac22: f8c0 3aec str.w r3, [r0, #2796] ; 0xaec -1002ac26: f8c0 3af0 str.w r3, [r0, #2800] ; 0xaf0 -1002ac2a: f8c0 3af4 str.w r3, [r0, #2804] ; 0xaf4 -1002ac2e: f8c0 3afc str.w r3, [r0, #2812] ; 0xafc -1002ac32: f8a0 2c00 strh.w r2, [r0, #3072] ; 0xc00 -1002ac36: f8c0 3bfc str.w r3, [r0, #3068] ; 0xbfc -1002ac3a: 2020 movs r0, #32 -1002ac3c: f7ec fdb8 bl 100177b0 -1002ac40: f8c4 0be0 str.w r0, [r4, #3040] ; 0xbe0 -1002ac44: b908 cbnz r0, 1002ac4a -1002ac46: 2000 movs r0, #0 -1002ac48: e078 b.n 1002ad3c -1002ac4a: 2200 movs r2, #0 -1002ac4c: f8d4 6bfc ldr.w r6, [r4, #3068] ; 0xbfc -1002ac50: 4b3c ldr r3, [pc, #240] ; (1002ad44 ) -1002ac52: f8c4 2be8 str.w r2, [r4, #3048] ; 0xbe8 -1002ac56: 42b2 cmp r2, r6 -1002ac58: f100 0008 add.w r0, r0, #8 -1002ac5c: da11 bge.n 1002ac82 -1002ac5e: eb04 0182 add.w r1, r4, r2, lsl #2 -1002ac62: f8c1 3bec str.w r3, [r1, #3052] ; 0xbec -1002ac66: f8b4 1c00 ldrh.w r1, [r4, #3072] ; 0xc00 -1002ac6a: f830 5c06 ldrh.w r5, [r0, #-6] -1002ac6e: f3c1 010d ubfx r1, r1, #0, #14 -1002ac72: ea41 4105 orr.w r1, r1, r5, lsl #16 -1002ac76: e900 000a stmdb r0, {r1, r3} -1002ac7a: 3201 adds r2, #1 -1002ac7c: f603 0338 addw r3, r3, #2104 ; 0x838 -1002ac80: e7e9 b.n 1002ac56 -1002ac82: f604 2504 addw r5, r4, #2564 ; 0xa04 -1002ac86: f04f 0800 mov.w r8, #0 -1002ac8a: f604 1a58 addw sl, r4, #2392 ; 0x958 -1002ac8e: eb0a 0308 add.w r3, sl, r8 -1002ac92: f8d3 9190 ldr.w r9, [r3, #400] ; 0x190 -1002ac96: f1b9 0f00 cmp.w r9, #0 -1002ac9a: d035 beq.n 1002ad08 -1002ac9c: ea4f 1049 mov.w r0, r9, lsl #5 -1002aca0: f7ec fd86 bl 100177b0 -1002aca4: 4683 mov fp, r0 -1002aca6: b3c0 cbz r0, 1002ad1a -1002aca8: ea4f 0089 mov.w r0, r9, lsl #2 -1002acac: f7ec fd80 bl 100177b0 -1002acb0: 465f mov r7, fp -1002acb2: 4602 mov r2, r0 -1002acb4: 2600 movs r6, #0 -1002acb6: 454e cmp r6, r9 -1002acb8: d013 beq.n 1002ace2 -1002acba: 2068 movs r0, #104 ; 0x68 -1002acbc: 9201 str r2, [sp, #4] -1002acbe: f7ec fd77 bl 100177b0 -1002acc2: 9a01 ldr r2, [sp, #4] -1002acc4: 3720 adds r7, #32 -1002acc6: f842 0026 str.w r0, [r2, r6, lsl #2] -1002acca: b330 cbz r0, 1002ad1a -1002accc: f837 3c1e ldrh.w r3, [r7, #-30] -1002acd0: f847 0c1c str.w r0, [r7, #-28] -1002acd4: 041b lsls r3, r3, #16 -1002acd6: f043 0366 orr.w r3, r3, #102 ; 0x66 -1002acda: f847 3c20 str.w r3, [r7, #-32] -1002acde: 3601 adds r6, #1 -1002ace0: e7e9 b.n 1002acb6 -1002ace2: f5ca 6a14 rsb sl, sl, #2368 ; 0x940 -1002ace6: f10a 0a0c add.w sl, sl, #12 -1002acea: 2700 movs r7, #0 -1002acec: eb04 000a add.w r0, r4, sl -1002acf0: f845 bc1c str.w fp, [r5, #-28] -1002acf4: f845 2c18 str.w r2, [r5, #-24] -1002acf8: f845 7c14 str.w r7, [r5, #-20] -1002acfc: f845 6c10 str.w r6, [r5, #-16] -1002ad00: 4428 add r0, r5 -1002ad02: f7ec fc4b bl 1001759c -1002ad06: 602f str r7, [r5, #0] -1002ad08: f108 0804 add.w r8, r8, #4 -1002ad0c: f1b8 0f20 cmp.w r8, #32 -1002ad10: f105 0520 add.w r5, r5, #32 -1002ad14: d1b9 bne.n 1002ac8a -1002ad16: 2001 movs r0, #1 -1002ad18: e010 b.n 1002ad3c -1002ad1a: 4620 mov r0, r4 -1002ad1c: f7ff fe18 bl 1002a950 -1002ad20: 2500 movs r5, #0 -1002ad22: eb0a 1345 add.w r3, sl, r5, lsl #5 -1002ad26: f8d3 3090 ldr.w r3, [r3, #144] ; 0x90 -1002ad2a: b11b cbz r3, 1002ad34 -1002ad2c: 4620 mov r0, r4 -1002ad2e: 4629 mov r1, r5 -1002ad30: f7ff ff22 bl 1002ab78 -1002ad34: 3501 adds r5, #1 -1002ad36: 2d08 cmp r5, #8 -1002ad38: d1f3 bne.n 1002ad22 -1002ad3a: e784 b.n 1002ac46 -1002ad3c: b003 add sp, #12 -1002ad3e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1002ad42: bf00 nop -1002ad44: 1004bc74 .word 0x1004bc74 - -1002ad48 : -1002ad48: b538 push {r3, r4, r5, lr} -1002ad4a: 4605 mov r5, r0 -1002ad4c: f7ff fe00 bl 1002a950 -1002ad50: 2400 movs r4, #0 -1002ad52: 4621 mov r1, r4 -1002ad54: 4628 mov r0, r5 -1002ad56: 3401 adds r4, #1 -1002ad58: f7ff ff0e bl 1002ab78 -1002ad5c: 2c08 cmp r4, #8 -1002ad5e: d1f8 bne.n 1002ad52 -1002ad60: 2001 movs r0, #1 -1002ad62: bd38 pop {r3, r4, r5, pc} - -1002ad64 : -1002ad64: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -1002ad68: f8d0 2be0 ldr.w r2, [r0, #3040] ; 0xbe0 -1002ad6c: 2300 movs r3, #0 -1002ad6e: 4605 mov r5, r0 -1002ad70: 9301 str r3, [sp, #4] -1002ad72: f600 1858 addw r8, r0, #2392 ; 0x958 -1002ad76: 6887 ldr r7, [r0, #8] -1002ad78: b10a cbz r2, 1002ad7e -1002ad7a: f8c0 3be8 str.w r3, [r0, #3048] ; 0xbe8 -1002ad7e: 3720 adds r7, #32 -1002ad80: 4638 mov r0, r7 -1002ad82: a901 add r1, sp, #4 -1002ad84: f7ec fbdc bl 10017540 -1002ad88: 462c mov r4, r5 -1002ad8a: 2600 movs r6, #0 -1002ad8c: 1b63 subs r3, r4, r5 -1002ad8e: 4443 add r3, r8 -1002ad90: f8d3 3090 ldr.w r3, [r3, #144] ; 0x90 -1002ad94: b32b cbz r3, 1002ade2 -1002ad96: f604 19e8 addw r9, r4, #2536 ; 0x9e8 -1002ad9a: f8d4 3a04 ldr.w r3, [r4, #2564] ; 0xa04 -1002ad9e: b1c3 cbz r3, 1002add2 -1002ada0: f8d4 29f0 ldr.w r2, [r4, #2544] ; 0x9f0 -1002ada4: f8d4 09e8 ldr.w r0, [r4, #2536] ; 0x9e8 -1002ada8: 0151 lsls r1, r2, #5 -1002adaa: 5843 ldr r3, [r0, r1] -1002adac: 2e04 cmp r6, #4 -1002adae: f023 4300 bic.w r3, r3, #2147483648 ; 0x80000000 -1002adb2: 5043 str r3, [r0, r1] -1002adb4: d008 beq.n 1002adc8 -1002adb6: f8d4 39f4 ldr.w r3, [r4, #2548] ; 0x9f4 -1002adba: 3201 adds r2, #1 -1002adbc: fbb2 f1f3 udiv r1, r2, r3 -1002adc0: fb03 2311 mls r3, r3, r1, r2 -1002adc4: f8c4 39f0 str.w r3, [r4, #2544] ; 0x9f0 -1002adc8: 4648 mov r0, r9 -1002adca: f000 fe48 bl 1002ba5e -1002adce: 4601 mov r1, r0 -1002add0: b918 cbnz r0, 1002adda -1002add2: 2300 movs r3, #0 -1002add4: f8c4 39f0 str.w r3, [r4, #2544] ; 0x9f0 -1002add8: e003 b.n 1002ade2 -1002adda: 4640 mov r0, r8 -1002addc: f7ff fd39 bl 1002a852 -1002ade0: e7db b.n 1002ad9a -1002ade2: 3601 adds r6, #1 -1002ade4: 2e08 cmp r6, #8 -1002ade6: f104 0420 add.w r4, r4, #32 -1002adea: d1cf bne.n 1002ad8c -1002adec: 4638 mov r0, r7 -1002adee: a901 add r1, sp, #4 -1002adf0: f7ec fbb0 bl 10017554 -1002adf4: b003 add sp, #12 -1002adf6: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - -1002adfa : -1002adfa: b510 push {r4, lr} -1002adfc: f44f 7140 mov.w r1, #768 ; 0x300 -1002ae00: 4604 mov r4, r0 -1002ae02: f00c ff48 bl 10037c96 -1002ae06: f44f 7140 mov.w r1, #768 ; 0x300 -1002ae0a: f420 7280 bic.w r2, r0, #256 ; 0x100 -1002ae0e: 4620 mov r0, r4 -1002ae10: f00c ff56 bl 10037cc0 -1002ae14: 4620 mov r0, r4 -1002ae16: f44f 717a mov.w r1, #1000 ; 0x3e8 -1002ae1a: f06f 427f mvn.w r2, #4278190080 ; 0xff000000 -1002ae1e: f00c ff4f bl 10037cc0 -1002ae22: 4620 mov r0, r4 -1002ae24: f44f 7160 mov.w r1, #896 ; 0x380 -1002ae28: f241 0204 movw r2, #4100 ; 0x1004 -1002ae2c: f00c ff41 bl 10037cb2 -1002ae30: 4620 mov r0, r4 -1002ae32: f240 3182 movw r1, #898 ; 0x382 -1002ae36: f242 0204 movw r2, #8196 ; 0x2004 -1002ae3a: f00c ff3a bl 10037cb2 -1002ae3e: 4620 mov r0, r4 -1002ae40: f44f 7161 mov.w r1, #900 ; 0x384 -1002ae44: f241 0204 movw r2, #4100 ; 0x1004 -1002ae48: f00c ff33 bl 10037cb2 -1002ae4c: 4620 mov r0, r4 -1002ae4e: f240 3186 movw r1, #902 ; 0x386 -1002ae52: f241 0204 movw r2, #4100 ; 0x1004 -1002ae56: f00c ff2c bl 10037cb2 -1002ae5a: 4620 mov r0, r4 -1002ae5c: f44f 7162 mov.w r1, #904 ; 0x388 -1002ae60: f241 0204 movw r2, #4100 ; 0x1004 -1002ae64: f00c ff25 bl 10037cb2 -1002ae68: 4620 mov r0, r4 -1002ae6a: f240 318a movw r1, #906 ; 0x38a -1002ae6e: f241 0204 movw r2, #4100 ; 0x1004 -1002ae72: f00c ff1e bl 10037cb2 -1002ae76: 4620 mov r0, r4 -1002ae78: f44f 7163 mov.w r1, #908 ; 0x38c -1002ae7c: f241 0202 movw r2, #4098 ; 0x1002 -1002ae80: f00c ff17 bl 10037cb2 -1002ae84: 4620 mov r0, r4 -1002ae86: f240 318e movw r1, #910 ; 0x38e -1002ae8a: f241 0202 movw r2, #4098 ; 0x1002 -1002ae8e: f00c ff10 bl 10037cb2 -1002ae92: 4620 mov r0, r4 -1002ae94: f44f 7164 mov.w r1, #912 ; 0x390 -1002ae98: f241 0202 movw r2, #4098 ; 0x1002 -1002ae9c: f00c ff09 bl 10037cb2 -1002aea0: 4620 mov r0, r4 -1002aea2: f240 3192 movw r1, #914 ; 0x392 -1002aea6: f241 0202 movw r2, #4098 ; 0x1002 -1002aeaa: f00c ff02 bl 10037cb2 -1002aeae: 4620 mov r0, r4 -1002aeb0: f44f 7165 mov.w r1, #916 ; 0x394 -1002aeb4: f241 0202 movw r2, #4098 ; 0x1002 -1002aeb8: f00c fefb bl 10037cb2 -1002aebc: 4620 mov r0, r4 -1002aebe: f240 3196 movw r1, #918 ; 0x396 -1002aec2: f241 0202 movw r2, #4098 ; 0x1002 -1002aec6: f00c fef4 bl 10037cb2 -1002aeca: 4620 mov r0, r4 -1002aecc: f44f 7166 mov.w r1, #920 ; 0x398 -1002aed0: f241 0202 movw r2, #4098 ; 0x1002 -1002aed4: f00c feed bl 10037cb2 -1002aed8: 4620 mov r0, r4 -1002aeda: f240 319a movw r1, #922 ; 0x39a -1002aede: f241 0202 movw r2, #4098 ; 0x1002 -1002aee2: f00c fee6 bl 10037cb2 -1002aee6: f8d4 29e8 ldr.w r2, [r4, #2536] ; 0x9e8 -1002aeea: 4620 mov r0, r4 -1002aeec: f44f 7146 mov.w r1, #792 ; 0x318 -1002aef0: f00c fee6 bl 10037cc0 -1002aef4: f8d4 2a08 ldr.w r2, [r4, #2568] ; 0xa08 -1002aef8: 4620 mov r0, r4 -1002aefa: f44f 7148 mov.w r1, #800 ; 0x320 -1002aefe: f00c fedf bl 10037cc0 -1002af02: f8d4 2a28 ldr.w r2, [r4, #2600] ; 0xa28 -1002af06: 4620 mov r0, r4 -1002af08: f44f 714a mov.w r1, #808 ; 0x328 -1002af0c: f00c fed8 bl 10037cc0 -1002af10: f8d4 2a48 ldr.w r2, [r4, #2632] ; 0xa48 -1002af14: 4620 mov r0, r4 -1002af16: f44f 714c mov.w r1, #816 ; 0x330 -1002af1a: f00c fed1 bl 10037cc0 -1002af1e: f8d4 2a68 ldr.w r2, [r4, #2664] ; 0xa68 -1002af22: 4620 mov r0, r4 -1002af24: f44f 7142 mov.w r1, #776 ; 0x308 -1002af28: f00c feca bl 10037cc0 -1002af2c: f8d4 2a88 ldr.w r2, [r4, #2696] ; 0xa88 -1002af30: 4620 mov r0, r4 -1002af32: f44f 7144 mov.w r1, #784 ; 0x310 -1002af36: f00c fec3 bl 10037cc0 -1002af3a: f8d4 2aa8 ldr.w r2, [r4, #2728] ; 0xaa8 -1002af3e: 4620 mov r0, r4 -1002af40: f44f 7150 mov.w r1, #832 ; 0x340 -1002af44: f00c febc bl 10037cc0 -1002af48: 4620 mov r0, r4 -1002af4a: f8d4 2be0 ldr.w r2, [r4, #3040] ; 0xbe0 -1002af4e: f44f 714e mov.w r1, #824 ; 0x338 -1002af52: e8bd 4010 ldmia.w sp!, {r4, lr} -1002af56: f00c beb3 b.w 10037cc0 - ... - -1002af5c : -1002af5c: 2904 cmp r1, #4 -1002af5e: b538 push {r3, r4, r5, lr} -1002af60: 460d mov r5, r1 -1002af62: 4614 mov r4, r2 -1002af64: d02f beq.n 1002afc6 -1002af66: f241 73ac movw r3, #6060 ; 0x17ac -1002af6a: 58c3 ldr r3, [r0, r3] -1002af6c: bb5b cbnz r3, 1002afc6 -1002af6e: f241 73b0 movw r3, #6064 ; 0x17b0 -1002af72: 58c3 ldr r3, [r0, r3] -1002af74: bb3b cbnz r3, 1002afc6 -1002af76: b28b uxth r3, r1 -1002af78: 2b07 cmp r3, #7 -1002af7a: bf96 itet ls -1002af7c: 4a13 ldrls r2, [pc, #76] ; (1002afcc ) -1002af7e: f44f 716a movhi.w r1, #936 ; 0x3a8 -1002af82: f832 1013 ldrhls.w r1, [r2, r3, lsl #1] -1002af86: f00c fe86 bl 10037c96 -1002af8a: f3c0 430a ubfx r3, r0, #16, #11 -1002af8e: f3c0 000a ubfx r0, r0, #0, #11 -1002af92: 4298 cmp r0, r3 -1002af94: d902 bls.n 1002af9c -1002af96: 4284 cmp r4, r0 -1002af98: d210 bcs.n 1002afbc -1002af9a: e002 b.n 1002afa2 -1002af9c: d204 bcs.n 1002afa8 -1002af9e: 4284 cmp r4, r0 -1002afa0: d304 bcc.n 1002afac -1002afa2: 429c cmp r4, r3 -1002afa4: d30a bcc.n 1002afbc -1002afa6: e001 b.n 1002afac -1002afa8: 429c cmp r4, r3 -1002afaa: d107 bne.n 1002afbc -1002afac: 2d03 cmp r5, #3 -1002afae: d803 bhi.n 1002afb8 -1002afb0: 4b07 ldr r3, [pc, #28] ; (1002afd0 ) -1002afb2: 781a ldrb r2, [r3, #0] -1002afb4: 3201 adds r2, #1 -1002afb6: 701a strb r2, [r3, #0] -1002afb8: 2000 movs r0, #0 -1002afba: bd38 pop {r3, r4, r5, pc} -1002afbc: 2d03 cmp r5, #3 -1002afbe: d802 bhi.n 1002afc6 -1002afc0: 4b03 ldr r3, [pc, #12] ; (1002afd0 ) -1002afc2: 2200 movs r2, #0 -1002afc4: 701a strb r2, [r3, #0] -1002afc6: 2001 movs r0, #1 -1002afc8: bd38 pop {r3, r4, r5, pc} -1002afca: bf00 nop -1002afcc: 1004170c .word 0x1004170c -1002afd0: 1004dd54 .word 0x1004dd54 - -1002afd4 : -1002afd4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1002afd8: ea4f 1841 mov.w r8, r1, lsl #5 -1002afdc: f600 1558 addw r5, r0, #2392 ; 0x958 -1002afe0: f108 0890 add.w r8, r8, #144 ; 0x90 -1002afe4: f641 035c movw r3, #6236 ; 0x185c -1002afe8: 4604 mov r4, r0 -1002afea: 460f mov r7, r1 -1002afec: 4445 add r5, r8 -1002afee: 58c6 ldr r6, [r0, r3] -1002aff0: f7f3 faa0 bl 1001e534 -1002aff4: b340 cbz r0, 1002b048 -1002aff6: f641 0369 movw r3, #6249 ; 0x1869 -1002affa: 5ce3 ldrb r3, [r4, r3] -1002affc: b323 cbz r3, 1002b048 -1002affe: f606 1558 addw r5, r6, #2392 ; 0x958 -1002b002: 4445 add r5, r8 -1002b004: e020 b.n 1002b048 -1002b006: 2f04 cmp r7, #4 -1002b008: 682b ldr r3, [r5, #0] -1002b00a: 68aa ldr r2, [r5, #8] -1002b00c: d020 beq.n 1002b050 -1002b00e: 4620 mov r0, r4 -1002b010: 4639 mov r1, r7 -1002b012: f7ff ffa3 bl 1002af5c -1002b016: 2800 cmp r0, #0 -1002b018: d04c beq.n 1002b0b4 -1002b01a: 68aa ldr r2, [r5, #8] -1002b01c: 68eb ldr r3, [r5, #12] -1002b01e: 3201 adds r2, #1 -1002b020: fbb2 f1f3 udiv r1, r2, r3 -1002b024: fb03 2311 mls r3, r3, r1, r2 -1002b028: 60ab str r3, [r5, #8] -1002b02a: 4628 mov r0, r5 -1002b02c: f000 fd17 bl 1002ba5e -1002b030: 4680 mov r8, r0 -1002b032: b148 cbz r0, 1002b048 -1002b034: 3024 adds r0, #36 ; 0x24 -1002b036: f7ff fc88 bl 1002a94a -1002b03a: f8d8 0008 ldr.w r0, [r8, #8] -1002b03e: 4641 mov r1, r8 -1002b040: f600 1058 addw r0, r0, #2392 ; 0x958 -1002b044: f7ff fc05 bl 1002a852 -1002b048: 69eb ldr r3, [r5, #28] -1002b04a: 2b00 cmp r3, #0 -1002b04c: d1db bne.n 1002b006 -1002b04e: e005 b.n 1002b05c -1002b050: 0152 lsls r2, r2, #5 -1002b052: 5899 ldr r1, [r3, r2] -1002b054: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000 -1002b058: 5099 str r1, [r3, r2] -1002b05a: e7e6 b.n 1002b02a -1002b05c: 2f04 cmp r7, #4 -1002b05e: d029 beq.n 1002b0b4 -1002b060: 4620 mov r0, r4 -1002b062: 4639 mov r1, r7 -1002b064: f000 fe55 bl 1002bd12 -1002b068: b320 cbz r0, 1002b0b4 -1002b06a: 6923 ldr r3, [r4, #16] -1002b06c: 051b lsls r3, r3, #20 -1002b06e: d408 bmi.n 1002b082 -1002b070: 4620 mov r0, r4 -1002b072: f7fe fb48 bl 10029706 -1002b076: b120 cbz r0, 1002b082 -1002b078: f504 50c0 add.w r0, r4, #6144 ; 0x1800 -1002b07c: 301c adds r0, #28 -1002b07e: f7ec fa0b bl 10017498 -1002b082: b1be cbz r6, 1002b0b4 -1002b084: 4620 mov r0, r4 -1002b086: f44f 6100 mov.w r1, #2048 ; 0x800 -1002b08a: f7f3 fa6f bl 1001e56c -1002b08e: 2801 cmp r0, #1 -1002b090: d010 beq.n 1002b0b4 -1002b092: 4630 mov r0, r6 -1002b094: f7fe fb37 bl 10029706 -1002b098: b160 cbz r0, 1002b0b4 -1002b09a: f641 0369 movw r3, #6249 ; 0x1869 -1002b09e: 5cf3 ldrb r3, [r6, r3] -1002b0a0: 2b00 cmp r3, #0 -1002b0a2: bf08 it eq -1002b0a4: 4634 moveq r4, r6 -1002b0a6: f504 50c0 add.w r0, r4, #6144 ; 0x1800 -1002b0aa: 301c adds r0, #28 -1002b0ac: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -1002b0b0: f7ec b9f2 b.w 10017498 -1002b0b4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1002b0b8 : -1002b0b8: f641 0168 movw r1, #6248 ; 0x1868 -1002b0bc: 5c41 ldrb r1, [r0, r1] -1002b0be: f241 62c8 movw r2, #5832 ; 0x16c8 -1002b0c2: 5883 ldr r3, [r0, r2] -1002b0c4: b921 cbnz r1, 1002b0d0 -1002b0c6: f641 015c movw r1, #6236 ; 0x185c -1002b0ca: 5841 ldr r1, [r0, r1] -1002b0cc: b101 cbz r1, 1002b0d0 -1002b0ce: 588b ldr r3, [r1, r2] -1002b0d0: 4a1c ldr r2, [pc, #112] ; (1002b144 ) -1002b0d2: f8d3 1e0c ldr.w r1, [r3, #3596] ; 0xe0c -1002b0d6: 6810 ldr r0, [r2, #0] -1002b0d8: 3ab0 subs r2, #176 ; 0xb0 -1002b0da: 4301 orrs r1, r0 -1002b0dc: f8d3 0e18 ldr.w r0, [r3, #3608] ; 0xe18 -1002b0e0: 4001 ands r1, r0 -1002b0e2: f8c3 1e0c str.w r1, [r3, #3596] ; 0xe0c -1002b0e6: f8c2 10b0 str.w r1, [r2, #176] ; 0xb0 -1002b0ea: f8d2 0364 ldr.w r0, [r2, #868] ; 0x364 -1002b0ee: f8d3 1e10 ldr.w r1, [r3, #3600] ; 0xe10 -1002b0f2: 4301 orrs r1, r0 -1002b0f4: f8d3 0e1c ldr.w r0, [r3, #3612] ; 0xe1c -1002b0f8: 4001 ands r1, r0 -1002b0fa: f8c3 1e10 str.w r1, [r3, #3600] ; 0xe10 -1002b0fe: f8c2 1364 str.w r1, [r2, #868] ; 0x364 -1002b102: 6810 ldr r0, [r2, #0] -1002b104: f8d3 1e14 ldr.w r1, [r3, #3604] ; 0xe14 -1002b108: 4301 orrs r1, r0 -1002b10a: f8d3 0e20 ldr.w r0, [r3, #3616] ; 0xe20 -1002b10e: 4001 ands r1, r0 -1002b110: f8c3 1e14 str.w r1, [r3, #3604] ; 0xe14 -1002b114: 6011 str r1, [r2, #0] -1002b116: f8d3 1e18 ldr.w r1, [r3, #3608] ; 0xe18 -1002b11a: f8d3 2e0c ldr.w r2, [r3, #3596] ; 0xe0c -1002b11e: 4211 tst r1, r2 -1002b120: d10e bne.n 1002b140 -1002b122: f8d3 1e1c ldr.w r1, [r3, #3612] ; 0xe1c -1002b126: f8d3 2e10 ldr.w r2, [r3, #3600] ; 0xe10 -1002b12a: 4211 tst r1, r2 -1002b12c: d108 bne.n 1002b140 -1002b12e: f8d3 2e20 ldr.w r2, [r3, #3616] ; 0xe20 -1002b132: f8d3 3e14 ldr.w r3, [r3, #3604] ; 0xe14 -1002b136: 421a tst r2, r3 -1002b138: bf0c ite eq -1002b13a: 2000 moveq r0, #0 -1002b13c: 2001 movne r0, #1 -1002b13e: 4770 bx lr -1002b140: 2001 movs r0, #1 -1002b142: 4770 bx lr -1002b144: 40080134 .word 0x40080134 - -1002b148 : -1002b148: f241 63c8 movw r3, #5832 ; 0x16c8 -1002b14c: 58c3 ldr r3, [r0, r3] -1002b14e: 2230 movs r2, #48 ; 0x30 -1002b150: f8c3 2e18 str.w r2, [r3, #3608] ; 0xe18 -1002b154: f240 127d movw r2, #381 ; 0x17d -1002b158: f8c3 2e1c str.w r2, [r3, #3612] ; 0xe1c -1002b15c: 4a01 ldr r2, [pc, #4] ; (1002b164 ) -1002b15e: f8c3 2e20 str.w r2, [r3, #3616] ; 0xe20 -1002b162: 4770 bx lr -1002b164: 80000040 .word 0x80000040 - -1002b168 : -1002b168: f641 0368 movw r3, #6248 ; 0x1868 -1002b16c: 5cc3 ldrb r3, [r0, r3] -1002b16e: b92b cbnz r3, 1002b17c -1002b170: f641 035c movw r3, #6236 ; 0x185c -1002b174: 58c3 ldr r3, [r0, r3] -1002b176: 2b00 cmp r3, #0 -1002b178: bf18 it ne -1002b17a: 4618 movne r0, r3 -1002b17c: f241 63c8 movw r3, #5832 ; 0x16c8 -1002b180: 58c3 ldr r3, [r0, r3] -1002b182: f8d3 2e1c ldr.w r2, [r3, #3612] ; 0xe1c -1002b186: 4b01 ldr r3, [pc, #4] ; (1002b18c ) -1002b188: 601a str r2, [r3, #0] -1002b18a: 4770 bx lr -1002b18c: 400803ec .word 0x400803ec - -1002b190 : -1002b190: f641 0368 movw r3, #6248 ; 0x1868 -1002b194: 5cc3 ldrb r3, [r0, r3] -1002b196: b92b cbnz r3, 1002b1a4 -1002b198: f641 035c movw r3, #6236 ; 0x185c -1002b19c: 58c3 ldr r3, [r0, r3] -1002b19e: 2b00 cmp r3, #0 -1002b1a0: bf18 it ne -1002b1a2: 4618 movne r0, r3 -1002b1a4: f241 63c8 movw r3, #5832 ; 0x16c8 -1002b1a8: 58c3 ldr r3, [r0, r3] -1002b1aa: 4907 ldr r1, [pc, #28] ; (1002b1c8 ) -1002b1ac: f8d3 2e1c ldr.w r2, [r3, #3612] ; 0xe1c -1002b1b0: f5a1 712f sub.w r1, r1, #700 ; 0x2bc -1002b1b4: f8c1 22bc str.w r2, [r1, #700] ; 0x2bc -1002b1b8: f8d3 2e18 ldr.w r2, [r3, #3608] ; 0xe18 -1002b1bc: 600a str r2, [r1, #0] -1002b1be: f8d3 2e20 ldr.w r2, [r3, #3616] ; 0xe20 -1002b1c2: 4b02 ldr r3, [pc, #8] ; (1002b1cc ) -1002b1c4: 601a str r2, [r3, #0] -1002b1c6: 4770 bx lr -1002b1c8: 400803ec .word 0x400803ec -1002b1cc: 40080080 .word 0x40080080 - -1002b1d0 : -1002b1d0: 4b01 ldr r3, [pc, #4] ; (1002b1d8 ) -1002b1d2: 2200 movs r2, #0 -1002b1d4: 601a str r2, [r3, #0] -1002b1d6: 4770 bx lr -1002b1d8: 400803ec .word 0x400803ec - -1002b1dc : -1002b1dc: 4a04 ldr r2, [pc, #16] ; (1002b1f0 ) -1002b1de: 2300 movs r3, #0 -1002b1e0: 6013 str r3, [r2, #0] -1002b1e2: f5a2 722f sub.w r2, r2, #700 ; 0x2bc -1002b1e6: 6013 str r3, [r2, #0] -1002b1e8: f842 3cb0 str.w r3, [r2, #-176] -1002b1ec: 4770 bx lr -1002b1ee: bf00 nop -1002b1f0: 400803ec .word 0x400803ec - -1002b1f4 : -1002b1f4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1002b1f8: 4690 mov r8, r2 -1002b1fa: f641 0268 movw r2, #6248 ; 0x1868 -1002b1fe: 5c82 ldrb r2, [r0, r2] -1002b200: f241 63c8 movw r3, #5832 ; 0x16c8 -1002b204: 4604 mov r4, r0 -1002b206: 460f mov r7, r1 -1002b208: 58c5 ldr r5, [r0, r3] -1002b20a: b92a cbnz r2, 1002b218 -1002b20c: f641 025c movw r2, #6236 ; 0x185c -1002b210: 5880 ldr r0, [r0, r2] -1002b212: b108 cbz r0, 1002b218 -1002b214: 58c5 ldr r5, [r0, r3] -1002b216: 4604 mov r4, r0 -1002b218: 4620 mov r0, r4 -1002b21a: f7ff ffdf bl 1002b1dc -1002b21e: 462b mov r3, r5 -1002b220: 2000 movs r0, #0 -1002b222: 583d ldr r5, [r7, r0] -1002b224: b125 cbz r5, 1002b230 -1002b226: f8d3 6e18 ldr.w r6, [r3, #3608] ; 0xe18 -1002b22a: 4335 orrs r5, r6 -1002b22c: f8c3 5e18 str.w r5, [r3, #3608] ; 0xe18 -1002b230: f858 5000 ldr.w r5, [r8, r0] -1002b234: b12d cbz r5, 1002b242 -1002b236: f8d3 6e18 ldr.w r6, [r3, #3608] ; 0xe18 -1002b23a: ea26 0505 bic.w r5, r6, r5 -1002b23e: f8c3 5e18 str.w r5, [r3, #3608] ; 0xe18 -1002b242: 3004 adds r0, #4 -1002b244: 280c cmp r0, #12 -1002b246: f103 0304 add.w r3, r3, #4 -1002b24a: d1ea bne.n 1002b222 -1002b24c: 4620 mov r0, r4 -1002b24e: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -1002b252: f7ff bf9d b.w 1002b190 - -1002b256 : -1002b256: f241 63c8 movw r3, #5832 ; 0x16c8 -1002b25a: b510 push {r4, lr} -1002b25c: 58c2 ldr r2, [r0, r3] -1002b25e: b909 cbnz r1, 1002b264 -1002b260: 2000 movs r0, #0 -1002b262: bd10 pop {r4, pc} -1002b264: 8848 ldrh r0, [r1, #2] -1002b266: f242 7311 movw r3, #10001 ; 0x2711 -1002b26a: f3c0 000c ubfx r0, r0, #0, #13 -1002b26e: 1c44 adds r4, r0, #1 -1002b270: f3c4 040c ubfx r4, r4, #0, #13 -1002b274: f8b2 1e24 ldrh.w r1, [r2, #3620] ; 0xe24 -1002b278: 4281 cmp r1, r0 -1002b27a: bf06 itte eq -1002b27c: f8a2 4e24 strheq.w r4, [r2, #3620] ; 0xe24 -1002b280: 2101 moveq r1, #1 -1002b282: 2100 movne r1, #0 -1002b284: 3b01 subs r3, #1 -1002b286: d0eb beq.n 1002b260 -1002b288: 2900 cmp r1, #0 -1002b28a: d0f3 beq.n 1002b274 -1002b28c: 2001 movs r0, #1 -1002b28e: bd10 pop {r4, pc} - -1002b290 : -1002b290: b510 push {r4, lr} -1002b292: f44f 716d mov.w r1, #948 ; 0x3b4 -1002b296: 4604 mov r4, r0 -1002b298: f00c fcfd bl 10037c96 -1002b29c: f3c0 420a ubfx r2, r0, #16, #11 -1002b2a0: f3c0 030a ubfx r3, r0, #0, #11 -1002b2a4: 4293 cmp r3, r2 -1002b2a6: d008 beq.n 1002b2ba -1002b2a8: ebc3 0302 rsb r3, r3, r2 -1002b2ac: bf31 iteee cc -1002b2ae: b298 uxthcc r0, r3 -1002b2b0: f8d4 0bfc ldrcs.w r0, [r4, #3068] ; 0xbfc -1002b2b4: 18c0 addcs r0, r0, r3 -1002b2b6: b280 uxthcs r0, r0 -1002b2b8: bd10 pop {r4, pc} -1002b2ba: 2000 movs r0, #0 -1002b2bc: bd10 pop {r4, pc} - ... - -1002b2c0 : -1002b2c0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002b2c4: f241 63c8 movw r3, #5832 ; 0x16c8 -1002b2c8: 2400 movs r4, #0 -1002b2ca: 6882 ldr r2, [r0, #8] -1002b2cc: b08b sub sp, #44 ; 0x2c -1002b2ce: 58c7 ldr r7, [r0, r3] -1002b2d0: 4621 mov r1, r4 -1002b2d2: f641 035c movw r3, #6236 ; 0x185c -1002b2d6: 4605 mov r5, r0 -1002b2d8: 9408 str r4, [sp, #32] -1002b2da: 9207 str r2, [sp, #28] -1002b2dc: f600 3654 addw r6, r0, #2900 ; 0xb54 -1002b2e0: f850 8003 ldr.w r8, [r0, r3] -1002b2e4: f7ff ffd4 bl 1002b290 -1002b2e8: 9404 str r4, [sp, #16] -1002b2ea: 9005 str r0, [sp, #20] -1002b2ec: 9b05 ldr r3, [sp, #20] -1002b2ee: b193 cbz r3, 1002b316 -1002b2f0: f8d5 3be0 ldr.w r3, [r5, #3040] ; 0xbe0 -1002b2f4: f8d5 9be8 ldr.w r9, [r5, #3048] ; 0xbe8 -1002b2f8: 9306 str r3, [sp, #24] -1002b2fa: 9a06 ldr r2, [sp, #24] -1002b2fc: eb05 0389 add.w r3, r5, r9, lsl #2 -1002b300: f8d3 3bec ldr.w r3, [r3, #3052] ; 0xbec -1002b304: eb02 01c9 add.w r1, r2, r9, lsl #3 -1002b308: 4628 mov r0, r5 -1002b30a: 2200 movs r2, #0 -1002b30c: 9303 str r3, [sp, #12] -1002b30e: f7ff ffa2 bl 1002b256 -1002b312: 2801 cmp r0, #1 -1002b314: d027 beq.n 1002b366 -1002b316: 9b07 ldr r3, [sp, #28] -1002b318: a908 add r1, sp, #32 -1002b31a: f103 0420 add.w r4, r3, #32 -1002b31e: 4620 mov r0, r4 -1002b320: f7ec f90e bl 10017540 -1002b324: 2100 movs r1, #0 -1002b326: 4628 mov r0, r5 -1002b328: f005 fc12 bl 10030b50 -1002b32c: f8d7 3e1c ldr.w r3, [r7, #3612] ; 0xe1c -1002b330: f8d7 2e18 ldr.w r2, [r7, #3608] ; 0xe18 -1002b334: f043 0301 orr.w r3, r3, #1 -1002b338: f042 0210 orr.w r2, r2, #16 -1002b33c: f8c7 3e1c str.w r3, [r7, #3612] ; 0xe1c -1002b340: f8c7 2e18 str.w r2, [r7, #3608] ; 0xe18 -1002b344: f44f 7198 mov.w r1, #304 ; 0x130 -1002b348: 4628 mov r0, r5 -1002b34a: f00c fcb9 bl 10037cc0 -1002b34e: f44f 717b mov.w r1, #1004 ; 0x3ec -1002b352: 4628 mov r0, r5 -1002b354: f8d7 2e1c ldr.w r2, [r7, #3612] ; 0xe1c -1002b358: f00c fcb2 bl 10037cc0 -1002b35c: 692b ldr r3, [r5, #16] -1002b35e: 07d9 lsls r1, r3, #31 -1002b360: f100 8103 bmi.w 1002b56a -1002b364: e105 b.n 1002b572 -1002b366: 2100 movs r1, #0 -1002b368: 4628 mov r0, r5 -1002b36a: f005 fbf1 bl 10030b50 -1002b36e: 4630 mov r0, r6 -1002b370: f7fb fabd bl 100268ee -1002b374: 4604 mov r4, r0 -1002b376: 2800 cmp r0, #0 -1002b378: f000 80c4 beq.w 1002b504 -1002b37c: f7ec f860 bl 10017440 -1002b380: 2300 movs r3, #0 -1002b382: 6723 str r3, [r4, #112] ; 0x70 -1002b384: 9903 ldr r1, [sp, #12] -1002b386: 4620 mov r0, r4 -1002b388: f006 f817 bl 100313ba -1002b38c: 8ba3 ldrh r3, [r4, #28] -1002b38e: f240 6229 movw r2, #1577 ; 0x629 -1002b392: 1e59 subs r1, r3, #1 -1002b394: b289 uxth r1, r1 -1002b396: 4291 cmp r1, r2 -1002b398: d911 bls.n 1002b3be -1002b39a: 4aa4 ldr r2, [pc, #656] ; (1002b62c ) -1002b39c: 6812 ldr r2, [r2, #0] -1002b39e: 2a00 cmp r2, #0 -1002b3a0: f000 80ac beq.w 1002b4fc -1002b3a4: f240 602a movw r0, #1578 ; 0x62a -1002b3a8: f894 1032 ldrb.w r1, [r4, #50] ; 0x32 -1002b3ac: f894 2033 ldrb.w r2, [r4, #51] ; 0x33 -1002b3b0: 9000 str r0, [sp, #0] -1002b3b2: 489f ldr r0, [pc, #636] ; (1002b630 ) -1002b3b4: f8d0 0114 ldr.w r0, [r0, #276] ; 0x114 -1002b3b8: f7ef fbd2 bl 1001ab60 -1002b3bc: e09e b.n 1002b4fc -1002b3be: f894 3032 ldrb.w r3, [r4, #50] ; 0x32 -1002b3c2: 2b00 cmp r3, #0 -1002b3c4: f040 809a bne.w 1002b4fc -1002b3c8: f894 3033 ldrb.w r3, [r4, #51] ; 0x33 -1002b3cc: b1d3 cbz r3, 1002b404 -1002b3ce: f105 0b0c add.w fp, r5, #12 -1002b3d2: a909 add r1, sp, #36 ; 0x24 -1002b3d4: 4658 mov r0, fp -1002b3d6: f7ec f8f7 bl 100175c8 -1002b3da: f8d5 1d0c ldr.w r1, [r5, #3340] ; 0xd0c -1002b3de: f021 0a04 bic.w sl, r1, #4 -1002b3e2: f1ba 0f01 cmp.w sl, #1 -1002b3e6: d109 bne.n 1002b3fc -1002b3e8: 4628 mov r0, r5 -1002b3ea: f7f1 fb5b bl 1001caa4 -1002b3ee: 4628 mov r0, r5 -1002b3f0: f7f2 fb1f bl 1001da32 -1002b3f4: 4628 mov r0, r5 -1002b3f6: 4651 mov r1, sl -1002b3f8: f7f2 faae bl 1001d958 -1002b3fc: 4658 mov r0, fp -1002b3fe: a909 add r1, sp, #36 ; 0x24 -1002b400: f7ec f8ec bl 100175dc -1002b404: 7fa3 ldrb r3, [r4, #30] -1002b406: b113 cbz r3, 1002b40e -1002b408: 9b03 ldr r3, [sp, #12] -1002b40a: 3318 adds r3, #24 -1002b40c: 9304 str r3, [sp, #16] -1002b40e: f894 2024 ldrb.w r2, [r4, #36] ; 0x24 -1002b412: 8d61 ldrh r1, [r4, #42] ; 0x2a -1002b414: 2a00 cmp r2, #0 -1002b416: bf0c ite eq -1002b418: 2200 moveq r2, #0 -1002b41a: 2206 movne r2, #6 -1002b41c: f5b1 7f80 cmp.w r1, #256 ; 0x100 -1002b420: f8b4 a01c ldrh.w sl, [r4, #28] -1002b424: d103 bne.n 1002b42e -1002b426: f240 6172 movw r1, #1650 ; 0x672 -1002b42a: 458a cmp sl, r1 -1002b42c: d902 bls.n 1002b434 -1002b42e: f10a 000e add.w r0, sl, #14 -1002b432: e001 b.n 1002b438 -1002b434: f44f 60d0 mov.w r0, #1664 ; 0x680 -1002b438: 2100 movs r1, #0 -1002b43a: 9202 str r2, [sp, #8] -1002b43c: f00b f9f5 bl 1003682a -1002b440: 9a02 ldr r2, [sp, #8] -1002b442: 4683 mov fp, r0 -1002b444: 2800 cmp r0, #0 -1002b446: d059 beq.n 1002b4fc -1002b448: f505 51c1 add.w r1, r5, #6176 ; 0x1820 -1002b44c: 3114 adds r1, #20 -1002b44e: 6809 ldr r1, [r1, #0] -1002b450: f8c0 a020 str.w sl, [r0, #32] -1002b454: 61c1 str r1, [r0, #28] -1002b456: 4611 mov r1, r2 -1002b458: 60a0 str r0, [r4, #8] -1002b45a: f00b f9df bl 1003681c -1002b45e: f894 2020 ldrb.w r2, [r4, #32] -1002b462: 7fe1 ldrb r1, [r4, #31] -1002b464: 9b03 ldr r3, [sp, #12] -1002b466: 4411 add r1, r2 -1002b468: 3118 adds r1, #24 -1002b46a: f8db 0010 ldr.w r0, [fp, #16] -1002b46e: 4419 add r1, r3 -1002b470: 4652 mov r2, sl -1002b472: f7eb ffcd bl 10017410 -1002b476: f8db 200c ldr.w r2, [fp, #12] -1002b47a: 4658 mov r0, fp -1002b47c: 6762 str r2, [r4, #116] ; 0x74 -1002b47e: f8db 2010 ldr.w r2, [fp, #16] -1002b482: 67e2 str r2, [r4, #124] ; 0x7c -1002b484: 67a2 str r2, [r4, #120] ; 0x78 -1002b486: f00b f9de bl 10036846 -1002b48a: 6fe2 ldr r2, [r4, #124] ; 0x7c -1002b48c: f8c4 0080 str.w r0, [r4, #128] ; 0x80 -1002b490: 4452 add r2, sl -1002b492: 4282 cmp r2, r0 -1002b494: 67e2 str r2, [r4, #124] ; 0x7c -1002b496: d903 bls.n 1002b4a0 -1002b498: ebca 0302 rsb r3, sl, r2 -1002b49c: 67e3 str r3, [r4, #124] ; 0x7c -1002b49e: e003 b.n 1002b4a8 -1002b4a0: 6f22 ldr r2, [r4, #112] ; 0x70 -1002b4a2: eb02 030a add.w r3, r2, sl -1002b4a6: 6723 str r3, [r4, #112] ; 0x70 -1002b4a8: 4628 mov r0, r5 -1002b4aa: f7f3 f843 bl 1001e534 -1002b4ae: b1c0 cbz r0, 1002b4e2 -1002b4b0: f894 a05c ldrb.w sl, [r4, #92] ; 0x5c -1002b4b4: f1ba 0f00 cmp.w sl, #0 -1002b4b8: d113 bne.n 1002b4e2 -1002b4ba: 6fa3 ldr r3, [r4, #120] ; 0x78 -1002b4bc: 1d18 adds r0, r3, #4 -1002b4be: 791b ldrb r3, [r3, #4] -1002b4c0: 07da lsls r2, r3, #31 -1002b4c2: d45d bmi.n 1002b580 -1002b4c4: f508 51a4 add.w r1, r8, #5248 ; 0x1480 -1002b4c8: 3119 adds r1, #25 -1002b4ca: 2206 movs r2, #6 -1002b4cc: f7eb ffa8 bl 10017420 -1002b4d0: b138 cbz r0, 1002b4e2 -1002b4d2: f508 53c1 add.w r3, r8, #6176 ; 0x1820 -1002b4d6: 3314 adds r3, #20 -1002b4d8: 681b ldr r3, [r3, #0] -1002b4da: f8cb 301c str.w r3, [fp, #28] -1002b4de: f8c4 8010 str.w r8, [r4, #16] -1002b4e2: f894 305c ldrb.w r3, [r4, #92] ; 0x5c -1002b4e6: b94b cbnz r3, 1002b4fc -1002b4e8: 7fa3 ldrb r3, [r4, #30] -1002b4ea: b11b cbz r3, 1002b4f4 -1002b4ec: 4620 mov r0, r4 -1002b4ee: 9904 ldr r1, [sp, #16] -1002b4f0: f005 ffbb bl 1003146a -1002b4f4: 4620 mov r0, r4 -1002b4f6: f7fc faa2 bl 10027a3e -1002b4fa: e003 b.n 1002b504 -1002b4fc: 4620 mov r0, r4 -1002b4fe: 4631 mov r1, r6 -1002b500: f7fb fa08 bl 10026914 -1002b504: 9a06 ldr r2, [sp, #24] -1002b506: f852 3039 ldr.w r3, [r2, r9, lsl #3] -1002b50a: f8b5 2c00 ldrh.w r2, [r5, #3072] ; 0xc00 -1002b50e: f423 537f bic.w r3, r3, #16320 ; 0x3fc0 -1002b512: f3c2 020d ubfx r2, r2, #0, #14 -1002b516: f023 033f bic.w r3, r3, #63 ; 0x3f -1002b51a: 4313 orrs r3, r2 -1002b51c: 9a06 ldr r2, [sp, #24] -1002b51e: f842 3039 str.w r3, [r2, r9, lsl #3] -1002b522: f8d5 2be8 ldr.w r2, [r5, #3048] ; 0xbe8 -1002b526: f8d5 3bfc ldr.w r3, [r5, #3068] ; 0xbfc -1002b52a: 3201 adds r2, #1 -1002b52c: fbb2 f1f3 udiv r1, r2, r3 -1002b530: fb03 2311 mls r3, r3, r1, r2 -1002b534: f8c5 3be8 str.w r3, [r5, #3048] ; 0xbe8 -1002b538: 4628 mov r0, r5 -1002b53a: f44f 716d mov.w r1, #948 ; 0x3b4 -1002b53e: f8b5 2be8 ldrh.w r2, [r5, #3048] ; 0xbe8 -1002b542: f00c fbb6 bl 10037cb2 -1002b546: b918 cbnz r0, 1002b550 -1002b548: 2001 movs r0, #1 -1002b54a: f7ec f883 bl 10017654 -1002b54e: e7f3 b.n 1002b538 -1002b550: 9a05 ldr r2, [sp, #20] -1002b552: 1e53 subs r3, r2, #1 -1002b554: b29b uxth r3, r3 -1002b556: 9305 str r3, [sp, #20] -1002b558: 692b ldr r3, [r5, #16] -1002b55a: 07db lsls r3, r3, #31 -1002b55c: f57f aec6 bpl.w 1002b2ec -1002b560: 4628 mov r0, r5 -1002b562: 2101 movs r1, #1 -1002b564: f005 faf4 bl 10030b50 -1002b568: e6c0 b.n 1002b2ec -1002b56a: 4628 mov r0, r5 -1002b56c: 2101 movs r1, #1 -1002b56e: f005 faef bl 10030b50 -1002b572: 4620 mov r0, r4 -1002b574: a908 add r1, sp, #32 -1002b576: f7eb ffed bl 10017554 -1002b57a: b00b add sp, #44 ; 0x2c -1002b57c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1002b580: 4630 mov r0, r6 -1002b582: f7fb f9b4 bl 100268ee -1002b586: 4683 mov fp, r0 -1002b588: 2800 cmp r0, #0 -1002b58a: d0bb beq.n 1002b504 -1002b58c: 68a0 ldr r0, [r4, #8] -1002b58e: 2101 movs r1, #1 -1002b590: 4652 mov r2, sl -1002b592: f00b f96a bl 1003686a -1002b596: 4603 mov r3, r0 -1002b598: b908 cbnz r0, 1002b59e -1002b59a: 4658 mov r0, fp -1002b59c: e7af b.n 1002b4fe -1002b59e: f8cb 8010 str.w r8, [fp, #16] -1002b5a2: 4658 mov r0, fp -1002b5a4: 9302 str r3, [sp, #8] -1002b5a6: f7eb ff4b bl 10017440 -1002b5aa: f10b 001c add.w r0, fp, #28 -1002b5ae: f104 011c add.w r1, r4, #28 -1002b5b2: 2254 movs r2, #84 ; 0x54 -1002b5b4: f8cb a084 str.w sl, [fp, #132] ; 0x84 -1002b5b8: f8cb a070 str.w sl, [fp, #112] ; 0x70 -1002b5bc: f7eb ff28 bl 10017410 -1002b5c0: f508 52c1 add.w r2, r8, #6176 ; 0x1820 -1002b5c4: 3214 adds r2, #20 -1002b5c6: 9b02 ldr r3, [sp, #8] -1002b5c8: 6812 ldr r2, [r2, #0] -1002b5ca: 4618 mov r0, r3 -1002b5cc: 61da str r2, [r3, #28] -1002b5ce: f8cb 3008 str.w r3, [fp, #8] -1002b5d2: 68da ldr r2, [r3, #12] -1002b5d4: f8cb 2074 str.w r2, [fp, #116] ; 0x74 -1002b5d8: 691a ldr r2, [r3, #16] -1002b5da: f8cb 207c str.w r2, [fp, #124] ; 0x7c -1002b5de: f8cb 2078 str.w r2, [fp, #120] ; 0x78 -1002b5e2: 9302 str r3, [sp, #8] -1002b5e4: f00b f92f bl 10036846 -1002b5e8: f8cb 0080 str.w r0, [fp, #128] ; 0x80 -1002b5ec: 9b02 ldr r3, [sp, #8] -1002b5ee: f8db 207c ldr.w r2, [fp, #124] ; 0x7c -1002b5f2: 6a1b ldr r3, [r3, #32] -1002b5f4: 441a add r2, r3 -1002b5f6: 4282 cmp r2, r0 -1002b5f8: f8cb 207c str.w r2, [fp, #124] ; 0x7c -1002b5fc: d903 bls.n 1002b606 -1002b5fe: 1ad3 subs r3, r2, r3 -1002b600: f8cb 307c str.w r3, [fp, #124] ; 0x7c -1002b604: e004 b.n 1002b610 -1002b606: f8db 2070 ldr.w r2, [fp, #112] ; 0x70 -1002b60a: 4413 add r3, r2 -1002b60c: f8cb 3070 str.w r3, [fp, #112] ; 0x70 -1002b610: f89b 301e ldrb.w r3, [fp, #30] -1002b614: b133 cbz r3, 1002b624 -1002b616: f89b 305c ldrb.w r3, [fp, #92] ; 0x5c -1002b61a: b91b cbnz r3, 1002b624 -1002b61c: 4658 mov r0, fp -1002b61e: 9904 ldr r1, [sp, #16] -1002b620: f005 ff23 bl 1003146a -1002b624: 4658 mov r0, fp -1002b626: f7fc fa0a bl 10027a3e -1002b62a: e75a b.n 1002b4e2 -1002b62c: 10044ec0 .word 0x10044ec0 -1002b630: 10043a4c .word 0x10043a4c - -1002b634 : -1002b634: b537 push {r0, r1, r2, r4, r5, lr} -1002b636: 4b09 ldr r3, [pc, #36] ; (1002b65c ) -1002b638: 4605 mov r5, r0 -1002b63a: 6818 ldr r0, [r3, #0] -1002b63c: 889b ldrh r3, [r3, #4] -1002b63e: 9000 str r0, [sp, #0] -1002b640: f8ad 3004 strh.w r3, [sp, #4] -1002b644: 2400 movs r4, #0 -1002b646: f81d 1004 ldrb.w r1, [sp, r4] -1002b64a: 4628 mov r0, r5 -1002b64c: 3401 adds r4, #1 -1002b64e: f7ff fcc1 bl 1002afd4 -1002b652: 2c06 cmp r4, #6 -1002b654: d1f7 bne.n 1002b646 -1002b656: b003 add sp, #12 -1002b658: bd30 pop {r4, r5, pc} -1002b65a: bf00 nop -1002b65c: 10041706 .word 0x10041706 - -1002b660 : -1002b660: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1002b662: 2300 movs r3, #0 -1002b664: 9301 str r3, [sp, #4] -1002b666: f241 63c8 movw r3, #5832 ; 0x16c8 -1002b66a: 58c6 ldr r6, [r0, r3] -1002b66c: f641 035c movw r3, #6236 ; 0x185c -1002b670: 58c7 ldr r7, [r0, r3] -1002b672: 4604 mov r4, r0 -1002b674: 6885 ldr r5, [r0, #8] -1002b676: b12f cbz r7, 1002b684 -1002b678: 693b ldr r3, [r7, #16] -1002b67a: f013 0f10 tst.w r3, #16 -1002b67e: bf08 it eq -1002b680: 4607 moveq r7, r0 -1002b682: e000 b.n 1002b686 -1002b684: 4607 mov r7, r0 -1002b686: 3520 adds r5, #32 -1002b688: 4628 mov r0, r5 -1002b68a: a901 add r1, sp, #4 -1002b68c: f7eb ff58 bl 10017540 -1002b690: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c -1002b694: f013 7fc0 tst.w r3, #25165824 ; 0x1800000 -1002b698: d02e beq.n 1002b6f8 -1002b69a: 6923 ldr r3, [r4, #16] -1002b69c: 06d8 lsls r0, r3, #27 -1002b69e: d510 bpl.n 1002b6c2 -1002b6a0: f894 3508 ldrb.w r3, [r4, #1288] ; 0x508 -1002b6a4: 2b01 cmp r3, #1 -1002b6a6: d10c bne.n 1002b6c2 -1002b6a8: f897 3b08 ldrb.w r3, [r7, #2824] ; 0xb08 -1002b6ac: b133 cbz r3, 1002b6bc -1002b6ae: 2300 movs r3, #0 -1002b6b0: f887 3b08 strb.w r3, [r7, #2824] ; 0xb08 -1002b6b4: 4638 mov r0, r7 -1002b6b6: 2104 movs r1, #4 -1002b6b8: f7ff fc8c bl 1002afd4 -1002b6bc: 4620 mov r0, r4 -1002b6be: f7f7 f997 bl 100229f0 -1002b6c2: 4620 mov r0, r4 -1002b6c4: 2110 movs r1, #16 -1002b6c6: f7f2 ff51 bl 1001e56c -1002b6ca: b1a8 cbz r0, 1002b6f8 -1002b6cc: f641 035c movw r3, #6236 ; 0x185c -1002b6d0: 58e3 ldr r3, [r4, r3] -1002b6d2: f893 3508 ldrb.w r3, [r3, #1288] ; 0x508 -1002b6d6: 2b01 cmp r3, #1 -1002b6d8: d10e bne.n 1002b6f8 -1002b6da: f897 3b08 ldrb.w r3, [r7, #2824] ; 0xb08 -1002b6de: b133 cbz r3, 1002b6ee -1002b6e0: 2300 movs r3, #0 -1002b6e2: f887 3b08 strb.w r3, [r7, #2824] ; 0xb08 -1002b6e6: 4638 mov r0, r7 -1002b6e8: 2104 movs r1, #4 -1002b6ea: f7ff fc73 bl 1002afd4 -1002b6ee: f641 035c movw r3, #6236 ; 0x185c -1002b6f2: 58e0 ldr r0, [r4, r3] -1002b6f4: f7f7 f97c bl 100229f0 -1002b6f8: f8d6 3e10 ldr.w r3, [r6, #3600] ; 0xe10 -1002b6fc: 0659 lsls r1, r3, #25 -1002b6fe: d503 bpl.n 1002b708 -1002b700: 4620 mov r0, r4 -1002b702: 2105 movs r1, #5 -1002b704: f7ff fc66 bl 1002afd4 -1002b708: f8d6 3e10 ldr.w r3, [r6, #3600] ; 0xe10 -1002b70c: 05da lsls r2, r3, #23 -1002b70e: d503 bpl.n 1002b718 -1002b710: 4620 mov r0, r4 -1002b712: 2106 movs r1, #6 -1002b714: f7ff fc5e bl 1002afd4 -1002b718: f8d6 3e10 ldr.w r3, [r6, #3600] ; 0xe10 -1002b71c: 075b lsls r3, r3, #29 -1002b71e: d503 bpl.n 1002b728 -1002b720: 4620 mov r0, r4 -1002b722: 2100 movs r1, #0 -1002b724: f7ff fc56 bl 1002afd4 -1002b728: f8d6 3e10 ldr.w r3, [r6, #3600] ; 0xe10 -1002b72c: 03d8 lsls r0, r3, #15 -1002b72e: d509 bpl.n 1002b744 -1002b730: f897 3b08 ldrb.w r3, [r7, #2824] ; 0xb08 -1002b734: b133 cbz r3, 1002b744 -1002b736: 2300 movs r3, #0 -1002b738: f887 3b08 strb.w r3, [r7, #2824] ; 0xb08 -1002b73c: 4638 mov r0, r7 -1002b73e: 2104 movs r1, #4 -1002b740: f7ff fc48 bl 1002afd4 -1002b744: f8d6 3e10 ldr.w r3, [r6, #3600] ; 0xe10 -1002b748: 0799 lsls r1, r3, #30 -1002b74a: d105 bne.n 1002b758 -1002b74c: f8d6 2e0c ldr.w r2, [r6, #3596] ; 0xe0c -1002b750: 4b5d ldr r3, [pc, #372] ; (1002b8c8 ) -1002b752: 4013 ands r3, r2 -1002b754: 2b00 cmp r3, #0 -1002b756: d041 beq.n 1002b7dc -1002b758: f8d6 2e1c ldr.w r2, [r6, #3612] ; 0xe1c -1002b75c: f8d6 3e18 ldr.w r3, [r6, #3608] ; 0xe18 -1002b760: f022 0203 bic.w r2, r2, #3 -1002b764: f023 0310 bic.w r3, r3, #16 -1002b768: f8c6 2e1c str.w r2, [r6, #3612] ; 0xe1c -1002b76c: f8c6 3e18 str.w r3, [r6, #3608] ; 0xe18 -1002b770: f44f 717b mov.w r1, #1004 ; 0x3ec -1002b774: 4620 mov r0, r4 -1002b776: f00c faa3 bl 10037cc0 -1002b77a: 4620 mov r0, r4 -1002b77c: f44f 7198 mov.w r1, #304 ; 0x130 -1002b780: f8d6 2e18 ldr.w r2, [r6, #3608] ; 0xe18 -1002b784: f00c fa9c bl 10037cc0 -1002b788: f8d6 7e10 ldr.w r7, [r6, #3600] ; 0xe10 -1002b78c: f017 0702 ands.w r7, r7, #2 -1002b790: d103 bne.n 1002b79a -1002b792: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c -1002b796: 06da lsls r2, r3, #27 -1002b798: d51b bpl.n 1002b7d2 -1002b79a: f504 6135 add.w r1, r4, #2896 ; 0xb50 -1002b79e: e9d1 2316 ldrd r2, r3, [r1, #88] ; 0x58 -1002b7a2: 3201 adds r2, #1 -1002b7a4: f143 0300 adc.w r3, r3, #0 -1002b7a8: e9c1 2316 strd r2, r3, [r1, #88] ; 0x58 -1002b7ac: 4b47 ldr r3, [pc, #284] ; (1002b8cc ) -1002b7ae: f04f 4280 mov.w r2, #1073741824 ; 0x40000000 -1002b7b2: e9d3 0102 ldrd r0, r1, [r3, #8] -1002b7b6: 2300 movs r3, #0 -1002b7b8: 4002 ands r2, r0 -1002b7ba: 400b ands r3, r1 -1002b7bc: ea52 0103 orrs.w r1, r2, r3 -1002b7c0: d007 beq.n 1002b7d2 -1002b7c2: f8d6 2e0c ldr.w r2, [r6, #3596] ; 0xe0c -1002b7c6: 4842 ldr r0, [pc, #264] ; (1002b8d0 ) -1002b7c8: 4639 mov r1, r7 -1002b7ca: f002 0210 and.w r2, r2, #16 -1002b7ce: f7ef f9c7 bl 1001ab60 -1002b7d2: f504 50c0 add.w r0, r4, #6144 ; 0x1800 -1002b7d6: 3004 adds r0, #4 -1002b7d8: f7eb fe5e bl 10017498 -1002b7dc: 4620 mov r0, r4 -1002b7de: f7ff ff29 bl 1002b634 -1002b7e2: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c -1002b7e6: 039b lsls r3, r3, #14 -1002b7e8: d50f bpl.n 1002b80a -1002b7ea: 4620 mov r0, r4 -1002b7ec: f005 fc58 bl 100310a0 -1002b7f0: f896 3e54 ldrb.w r3, [r6, #3668] ; 0xe54 -1002b7f4: b14b cbz r3, 1002b80a -1002b7f6: f8d6 3e40 ldr.w r3, [r6, #3648] ; 0xe40 -1002b7fa: f506 6063 add.w r0, r6, #3632 ; 0xe30 -1002b7fe: f043 0301 orr.w r3, r3, #1 -1002b802: f8c6 3e40 str.w r3, [r6, #3648] ; 0xe40 -1002b806: f7eb fe47 bl 10017498 -1002b80a: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c -1002b80e: 009f lsls r7, r3, #2 -1002b810: d50c bpl.n 1002b82c -1002b812: f896 3e54 ldrb.w r3, [r6, #3668] ; 0xe54 -1002b816: b14b cbz r3, 1002b82c -1002b818: f8d6 3e40 ldr.w r3, [r6, #3648] ; 0xe40 -1002b81c: f506 6063 add.w r0, r6, #3632 ; 0xe30 -1002b820: f043 0308 orr.w r3, r3, #8 -1002b824: f8c6 3e40 str.w r3, [r6, #3648] ; 0xe40 -1002b828: f7eb fe36 bl 10017498 -1002b82c: f8d6 3e14 ldr.w r3, [r6, #3604] ; 0xe14 -1002b830: 07d8 lsls r0, r3, #31 -1002b832: d502 bpl.n 1002b83a -1002b834: 4620 mov r0, r4 -1002b836: f005 fa8b bl 10030d50 -1002b83a: f8d6 3e14 ldr.w r3, [r6, #3604] ; 0xe14 -1002b83e: 0799 lsls r1, r3, #30 -1002b840: d502 bpl.n 1002b848 -1002b842: 4620 mov r0, r4 -1002b844: f005 fab8 bl 10030db8 -1002b848: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c -1002b84c: 035a lsls r2, r3, #13 -1002b84e: d502 bpl.n 1002b856 -1002b850: 4620 mov r0, r4 -1002b852: f005 fac9 bl 10030de8 -1002b856: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c -1002b85a: 031b lsls r3, r3, #12 -1002b85c: d502 bpl.n 1002b864 -1002b85e: 4620 mov r0, r4 -1002b860: f005 fad0 bl 10030e04 -1002b864: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c -1002b868: 02df lsls r7, r3, #11 -1002b86a: d502 bpl.n 1002b872 -1002b86c: 4620 mov r0, r4 -1002b86e: f005 fae1 bl 10030e34 -1002b872: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c -1002b876: 0298 lsls r0, r3, #10 -1002b878: d502 bpl.n 1002b880 -1002b87a: 4620 mov r0, r4 -1002b87c: f005 fb04 bl 10030e88 -1002b880: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c -1002b884: 0259 lsls r1, r3, #9 -1002b886: d502 bpl.n 1002b88e -1002b888: 4620 mov r0, r4 -1002b88a: f005 fb1c bl 10030ec6 -1002b88e: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c -1002b892: 019a lsls r2, r3, #6 -1002b894: d502 bpl.n 1002b89c -1002b896: 4620 mov r0, r4 -1002b898: f005 fb33 bl 10030f02 -1002b89c: f8d6 3e0c ldr.w r3, [r6, #3596] ; 0xe0c -1002b8a0: 079b lsls r3, r3, #30 -1002b8a2: d502 bpl.n 1002b8aa -1002b8a4: 4620 mov r0, r4 -1002b8a6: f005 fb35 bl 10030f14 -1002b8aa: 2300 movs r3, #0 -1002b8ac: 4628 mov r0, r5 -1002b8ae: f8c6 3e0c str.w r3, [r6, #3596] ; 0xe0c -1002b8b2: f8c6 3e10 str.w r3, [r6, #3600] ; 0xe10 -1002b8b6: f8c6 3e14 str.w r3, [r6, #3604] ; 0xe14 -1002b8ba: a901 add r1, sp, #4 -1002b8bc: f7eb fe4a bl 10017554 -1002b8c0: 2001 movs r0, #1 -1002b8c2: b003 add sp, #12 -1002b8c4: bdf0 pop {r4, r5, r6, r7, pc} -1002b8c6: bf00 nop -1002b8c8: 00040010 .word 0x00040010 -1002b8cc: 10000720 .word 0x10000720 -1002b8d0: 1004171c .word 0x1004171c - -1002b8d4 : -1002b8d4: b510 push {r4, lr} -1002b8d6: 4604 mov r4, r0 -1002b8d8: f000 fbdc bl 1002c094 -1002b8dc: f641 0369 movw r3, #6249 ; 0x1869 -1002b8e0: 5ce3 ldrb r3, [r4, r3] -1002b8e2: b953 cbnz r3, 1002b8fa -1002b8e4: 4620 mov r0, r4 -1002b8e6: f7f2 fe25 bl 1001e534 -1002b8ea: b130 cbz r0, 1002b8fa -1002b8ec: f641 035c movw r3, #6236 ; 0x185c -1002b8f0: 58e0 ldr r0, [r4, r3] -1002b8f2: e8bd 4010 ldmia.w sp!, {r4, lr} -1002b8f6: f000 bbcd b.w 1002c094 -1002b8fa: bd10 pop {r4, pc} - -1002b8fc : -1002b8fc: b510 push {r4, lr} -1002b8fe: 2100 movs r1, #0 -1002b900: 2228 movs r2, #40 ; 0x28 -1002b902: 4604 mov r4, r0 -1002b904: f7eb fd94 bl 10017430 -1002b908: 4b06 ldr r3, [pc, #24] ; (1002b924 ) -1002b90a: 60a3 str r3, [r4, #8] -1002b90c: 4b06 ldr r3, [pc, #24] ; (1002b928 ) -1002b90e: 60e3 str r3, [r4, #12] -1002b910: 4b06 ldr r3, [pc, #24] ; (1002b92c ) -1002b912: 6123 str r3, [r4, #16] -1002b914: 4b06 ldr r3, [pc, #24] ; (1002b930 ) -1002b916: 6163 str r3, [r4, #20] -1002b918: 4b06 ldr r3, [pc, #24] ; (1002b934 ) -1002b91a: 61a3 str r3, [r4, #24] -1002b91c: 4b06 ldr r3, [pc, #24] ; (1002b938 ) -1002b91e: 61e3 str r3, [r4, #28] -1002b920: bd10 pop {r4, pc} -1002b922: bf00 nop -1002b924: 1002ab1f .word 0x1002ab1f -1002b928: 1002aac5 .word 0x1002aac5 -1002b92c: 1002aa6d .word 0x1002aa6d -1002b930: 1002aa13 .word 0x1002aa13 -1002b934: 1002a9b9 .word 0x1002a9b9 -1002b938: 1002a95f .word 0x1002a95f - -1002b93c : -1002b93c: b570 push {r4, r5, r6, lr} -1002b93e: 4604 mov r4, r0 -1002b940: 460d mov r5, r1 -1002b942: f600 1658 addw r6, r0, #2392 ; 0x958 -1002b946: f7f2 fdf5 bl 1001e534 -1002b94a: b140 cbz r0, 1002b95e -1002b94c: f641 0369 movw r3, #6249 ; 0x1869 -1002b950: 5ce3 ldrb r3, [r4, r3] -1002b952: b123 cbz r3, 1002b95e -1002b954: f641 035c movw r3, #6236 ; 0x185c -1002b958: 58e6 ldr r6, [r4, r3] -1002b95a: f606 1658 addw r6, r6, #2392 ; 0x958 -1002b95e: eb06 1345 add.w r3, r6, r5, lsl #5 -1002b962: 2d04 cmp r5, #4 -1002b964: f103 0390 add.w r3, r3, #144 ; 0x90 -1002b968: d008 beq.n 1002b97c -1002b96a: 69d9 ldr r1, [r3, #28] -1002b96c: 689a ldr r2, [r3, #8] -1002b96e: 440a add r2, r1 -1002b970: 68d9 ldr r1, [r3, #12] -1002b972: fbb2 f0f1 udiv r0, r2, r1 -1002b976: fb01 2210 mls r2, r1, r0, r2 -1002b97a: e000 b.n 1002b97e -1002b97c: 2200 movs r2, #0 -1002b97e: 6818 ldr r0, [r3, #0] -1002b980: eb00 1042 add.w r0, r0, r2, lsl #5 -1002b984: bd70 pop {r4, r5, r6, pc} - -1002b986 : -1002b986: f890 20d0 ldrb.w r2, [r0, #208] ; 0xd0 -1002b98a: f8d0 3084 ldr.w r3, [r0, #132] ; 0x84 -1002b98e: b112 cbz r2, 1002b996 -1002b990: 2240 movs r2, #64 ; 0x40 -1002b992: 631a str r2, [r3, #48] ; 0x30 -1002b994: 4770 bx lr -1002b996: 2228 movs r2, #40 ; 0x28 -1002b998: 631a str r2, [r3, #48] ; 0x30 -1002b99a: 6982 ldr r2, [r0, #24] -1002b99c: 63da str r2, [r3, #60] ; 0x3c -1002b99e: 691a ldr r2, [r3, #16] -1002b9a0: 3228 adds r2, #40 ; 0x28 -1002b9a2: 639a str r2, [r3, #56] ; 0x38 -1002b9a4: 2202 movs r2, #2 -1002b9a6: 659a str r2, [r3, #88] ; 0x58 -1002b9a8: f8d0 20b4 ldr.w r2, [r0, #180] ; 0xb4 -1002b9ac: f8d0 30a8 ldr.w r3, [r0, #168] ; 0xa8 -1002b9b0: 4413 add r3, r2 -1002b9b2: f8c0 3098 str.w r3, [r0, #152] ; 0x98 -1002b9b6: 4770 bx lr - -1002b9b8 : -1002b9b8: b570 push {r4, r5, r6, lr} -1002b9ba: 4604 mov r4, r0 -1002b9bc: 460e mov r6, r1 -1002b9be: f600 1558 addw r5, r0, #2392 ; 0x958 -1002b9c2: f7f2 fdb7 bl 1001e534 -1002b9c6: b140 cbz r0, 1002b9da -1002b9c8: f641 0369 movw r3, #6249 ; 0x1869 -1002b9cc: 5ce3 ldrb r3, [r4, r3] -1002b9ce: b123 cbz r3, 1002b9da -1002b9d0: f641 035c movw r3, #6236 ; 0x185c -1002b9d4: 58e5 ldr r5, [r4, r3] -1002b9d6: f605 1558 addw r5, r5, #2392 ; 0x958 -1002b9da: 7833 ldrb r3, [r6, #0] -1002b9dc: 3b01 subs r3, #1 -1002b9de: b2db uxtb r3, r3 -1002b9e0: 2b11 cmp r3, #17 -1002b9e2: bf96 itet ls -1002b9e4: 4a07 ldrls r2, [pc, #28] ; (1002ba04 ) -1002b9e6: 2302 movhi r3, #2 -1002b9e8: 5cd3 ldrbls r3, [r2, r3] -1002b9ea: eb05 1543 add.w r5, r5, r3, lsl #5 -1002b9ee: f8d5 009c ldr.w r0, [r5, #156] ; 0x9c -1002b9f2: f8d5 30ac ldr.w r3, [r5, #172] ; 0xac -1002b9f6: 1ac0 subs r0, r0, r3 -1002b9f8: 2801 cmp r0, #1 -1002b9fa: bf94 ite ls -1002b9fc: 2000 movls r0, #0 -1002b9fe: 2001 movhi r0, #1 -1002ba00: bd70 pop {r4, r5, r6, pc} -1002ba02: bf00 nop -1002ba04: 1004174e .word 0x1004174e - -1002ba08 : -1002ba08: b508 push {r3, lr} -1002ba0a: 6880 ldr r0, [r0, #8] -1002ba0c: 3020 adds r0, #32 -1002ba0e: f7eb fdbd bl 1001758c -1002ba12: 2001 movs r0, #1 -1002ba14: bd08 pop {r3, pc} - -1002ba16 : -1002ba16: 6880 ldr r0, [r0, #8] -1002ba18: 3020 adds r0, #32 -1002ba1a: f7eb bdc5 b.w 100175a8 - -1002ba1e : -1002ba1e: 2806 cmp r0, #6 -1002ba20: d809 bhi.n 1002ba36 -1002ba22: e8df f000 tbb [pc, r0] -1002ba26: 0909 .short 0x0909 -1002ba28: 06040909 .word 0x06040909 -1002ba2c: 09 .byte 0x09 -1002ba2d: 00 .byte 0x00 -1002ba2e: 200e movs r0, #14 -1002ba30: 4770 bx lr -1002ba32: 2004 movs r0, #4 -1002ba34: 4770 bx lr -1002ba36: 2010 movs r0, #16 -1002ba38: 4770 bx lr - -1002ba3a : -1002ba3a: b538 push {r3, r4, r5, lr} -1002ba3c: 4605 mov r5, r0 -1002ba3e: 460c mov r4, r1 -1002ba40: 4608 mov r0, r1 -1002ba42: b159 cbz r1, 1002ba5c -1002ba44: f7eb fd10 bl 10017468 -1002ba48: 4620 mov r0, r4 -1002ba4a: f105 0110 add.w r1, r5, #16 -1002ba4e: f7eb fd05 bl 1001745c -1002ba52: 69eb ldr r3, [r5, #28] -1002ba54: 2001 movs r0, #1 -1002ba56: 3301 adds r3, #1 -1002ba58: 61eb str r3, [r5, #28] -1002ba5a: bd38 pop {r3, r4, r5, pc} -1002ba5c: bd38 pop {r3, r4, r5, pc} - -1002ba5e : -1002ba5e: b538 push {r3, r4, r5, lr} -1002ba60: 4604 mov r4, r0 -1002ba62: 3010 adds r0, #16 -1002ba64: f7eb fd88 bl 10017578 -1002ba68: 2801 cmp r0, #1 -1002ba6a: d007 beq.n 1002ba7c -1002ba6c: 6925 ldr r5, [r4, #16] -1002ba6e: 4628 mov r0, r5 -1002ba70: f7eb fcfa bl 10017468 -1002ba74: 69e3 ldr r3, [r4, #28] -1002ba76: 3b01 subs r3, #1 -1002ba78: 61e3 str r3, [r4, #28] -1002ba7a: e000 b.n 1002ba7e -1002ba7c: 2500 movs r5, #0 -1002ba7e: 4628 mov r0, r5 -1002ba80: bd38 pop {r3, r4, r5, pc} - -1002ba82 : -1002ba82: f8d1 3084 ldr.w r3, [r1, #132] ; 0x84 -1002ba86: b530 push {r4, r5, lr} -1002ba88: 6d99 ldr r1, [r3, #88] ; 0x58 -1002ba8a: 250c movs r5, #12 -1002ba8c: fb05 3101 mla r1, r5, r1, r3 -1002ba90: 4618 mov r0, r3 -1002ba92: 194d adds r5, r1, r5 -1002ba94: 2100 movs r1, #0 -1002ba96: 300c adds r0, #12 -1002ba98: 42a8 cmp r0, r5 -1002ba9a: d002 beq.n 1002baa2 -1002ba9c: 6a44 ldr r4, [r0, #36] ; 0x24 -1002ba9e: 4421 add r1, r4 -1002baa0: e7f9 b.n 1002ba96 -1002baa2: f011 007f ands.w r0, r1, #127 ; 0x7f -1002baa6: bf18 it ne -1002baa8: 2001 movne r0, #1 -1002baaa: 6814 ldr r4, [r2, #0] -1002baac: eb00 11d1 add.w r1, r0, r1, lsr #7 -1002bab0: b2c9 uxtb r1, r1 -1002bab2: f424 047f bic.w r4, r4, #16711680 ; 0xff0000 -1002bab6: ea44 4101 orr.w r1, r4, r1, lsl #16 -1002baba: 6011 str r1, [r2, #0] -1002babc: 8e18 ldrh r0, [r3, #48] ; 0x30 -1002babe: 0c09 lsrs r1, r1, #16 -1002bac0: 0409 lsls r1, r1, #16 -1002bac2: 4301 orrs r1, r0 -1002bac4: 6011 str r1, [r2, #0] -1002bac6: 6ad9 ldr r1, [r3, #44] ; 0x2c -1002bac8: 6051 str r1, [r2, #4] -1002baca: 6d99 ldr r1, [r3, #88] ; 0x58 -1002bacc: 2904 cmp r1, #4 -1002bace: d816 bhi.n 1002bafe -1002bad0: 3208 adds r2, #8 -1002bad2: 4619 mov r1, r3 -1002bad4: 2001 movs r0, #1 -1002bad6: 6d9c ldr r4, [r3, #88] ; 0x58 -1002bad8: 3208 adds r2, #8 -1002bada: 42a0 cmp r0, r4 -1002badc: f101 010c add.w r1, r1, #12 -1002bae0: d20d bcs.n 1002bafe -1002bae2: 8e0c ldrh r4, [r1, #48] ; 0x30 -1002bae4: f832 5c06 ldrh.w r5, [r2, #-6] -1002bae8: 3001 adds r0, #1 -1002baea: ea44 4405 orr.w r4, r4, r5, lsl #16 -1002baee: f024 4400 bic.w r4, r4, #2147483648 ; 0x80000000 -1002baf2: f842 4c08 str.w r4, [r2, #-8] -1002baf6: 6acc ldr r4, [r1, #44] ; 0x2c -1002baf8: f842 4c04 str.w r4, [r2, #-4] -1002bafc: e7eb b.n 1002bad6 -1002bafe: 2001 movs r0, #1 -1002bb00: bd30 pop {r4, r5, pc} - -1002bb02 : -1002bb02: b570 push {r4, r5, r6, lr} -1002bb04: eb00 1441 add.w r4, r0, r1, lsl #5 -1002bb08: 4605 mov r5, r0 -1002bb0a: 4608 mov r0, r1 -1002bb0c: f7ff ff87 bl 1002ba1e -1002bb10: f8d4 39f0 ldr.w r3, [r4, #2544] ; 0x9f0 -1002bb14: f8d4 2a04 ldr.w r2, [r4, #2564] ; 0xa04 -1002bb18: 30e8 adds r0, #232 ; 0xe8 -1002bb1a: 441a add r2, r3 -1002bb1c: f8d4 39f4 ldr.w r3, [r4, #2548] ; 0x9f4 -1002bb20: 0086 lsls r6, r0, #2 -1002bb22: fbb2 f4f3 udiv r4, r2, r3 -1002bb26: fb03 2414 mls r4, r3, r4, r2 -1002bb2a: 4628 mov r0, r5 -1002bb2c: 4631 mov r1, r6 -1002bb2e: 4622 mov r2, r4 -1002bb30: f00c f8c6 bl 10037cc0 -1002bb34: b918 cbnz r0, 1002bb3e -1002bb36: 2001 movs r0, #1 -1002bb38: f7eb fd8c bl 10017654 -1002bb3c: e7f5 b.n 1002bb2a -1002bb3e: bd70 pop {r4, r5, r6, pc} - -1002bb40 : -1002bb40: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002bb44: 6883 ldr r3, [r0, #8] -1002bb46: b087 sub sp, #28 -1002bb48: 4605 mov r5, r0 -1002bb4a: f600 1a58 addw sl, r0, #2392 ; 0x958 -1002bb4e: 4608 mov r0, r1 -1002bb50: 460c mov r4, r1 -1002bb52: 9302 str r3, [sp, #8] -1002bb54: f8d1 7084 ldr.w r7, [r1, #132] ; 0x84 -1002bb58: f7fe f942 bl 10029de0 -1002bb5c: 2100 movs r1, #0 -1002bb5e: 4606 mov r6, r0 -1002bb60: 4628 mov r0, r5 -1002bb62: f004 fff5 bl 10030b50 -1002bb66: 69a3 ldr r3, [r4, #24] -1002bb68: 4628 mov r0, r5 -1002bb6a: 9303 str r3, [sp, #12] -1002bb6c: f7f2 fce2 bl 1001e534 -1002bb70: 2800 cmp r0, #0 -1002bb72: d05d beq.n 1002bc30 -1002bb74: f641 0369 movw r3, #6249 ; 0x1869 -1002bb78: 5ceb ldrb r3, [r5, r3] -1002bb7a: 2b00 cmp r3, #0 -1002bb7c: d058 beq.n 1002bc30 -1002bb7e: f641 035c movw r3, #6236 ; 0x185c -1002bb82: f855 8003 ldr.w r8, [r5, r3] -1002bb86: a905 add r1, sp, #20 -1002bb88: f8d8 3008 ldr.w r3, [r8, #8] -1002bb8c: f103 0b20 add.w fp, r3, #32 -1002bb90: 4658 mov r0, fp -1002bb92: f7eb fcd5 bl 10017540 -1002bb96: 2e04 cmp r6, #4 -1002bb98: d009 beq.n 1002bbae -1002bb9a: 4640 mov r0, r8 -1002bb9c: f104 0168 add.w r1, r4, #104 ; 0x68 -1002bba0: f7ff ff0a bl 1002b9b8 -1002bba4: 4681 mov r9, r0 -1002bba6: 4658 mov r0, fp -1002bba8: f1b9 0f00 cmp.w r9, #0 -1002bbac: d051 beq.n 1002bc52 -1002bbae: b2f1 uxtb r1, r6 -1002bbb0: 4640 mov r0, r8 -1002bbb2: f7ff fec3 bl 1002b93c -1002bbb6: 4681 mov r9, r0 -1002bbb8: 4620 mov r0, r4 -1002bbba: f7ff fee4 bl 1002b986 -1002bbbe: f8d9 3004 ldr.w r3, [r9, #4] -1002bbc2: 2e04 cmp r6, #4 -1002bbc4: bf08 it eq -1002bbc6: 2201 moveq r2, #1 -1002bbc8: 62fb str r3, [r7, #44] ; 0x2c -1002bbca: bf08 it eq -1002bbcc: f885 2b08 strbeq.w r2, [r5, #2824] ; 0xb08 -1002bbd0: b93b cbnz r3, 1002bbe2 -1002bbd2: 4658 mov r0, fp -1002bbd4: a905 add r1, sp, #20 -1002bbd6: 9301 str r3, [sp, #4] -1002bbd8: f7eb fcbc bl 10017554 -1002bbdc: 9b01 ldr r3, [sp, #4] -1002bbde: 461e mov r6, r3 -1002bbe0: e080 b.n 1002bce4 -1002bbe2: 4619 mov r1, r3 -1002bbe4: 4620 mov r0, r4 -1002bbe6: f001 fe97 bl 1002d918 -1002bbea: 4640 mov r0, r8 -1002bbec: 4621 mov r1, r4 -1002bbee: 464a mov r2, r9 -1002bbf0: f7ff ff47 bl 1002ba82 -1002bbf4: 8b3b ldrh r3, [r7, #24] -1002bbf6: 2b02 cmp r3, #2 -1002bbf8: d006 beq.n 1002bc08 -1002bbfa: eb08 1046 add.w r0, r8, r6, lsl #5 -1002bbfe: f600 10e8 addw r0, r0, #2536 ; 0x9e8 -1002bc02: 4639 mov r1, r7 -1002bc04: f7ff ff19 bl 1002ba3a -1002bc08: 9b02 ldr r3, [sp, #8] -1002bc0a: a905 add r1, sp, #20 -1002bc0c: f103 0020 add.w r0, r3, #32 -1002bc10: f7eb fca0 bl 10017554 -1002bc14: 2e04 cmp r6, #4 -1002bc16: d106 bne.n 1002bc26 -1002bc18: f8d9 3000 ldr.w r3, [r9] -1002bc1c: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000 -1002bc20: f8c9 3000 str.w r3, [r9] -1002bc24: e058 b.n 1002bcd8 -1002bc26: 4640 mov r0, r8 -1002bc28: 4631 mov r1, r6 -1002bc2a: f7ff ff6a bl 1002bb02 -1002bc2e: e053 b.n 1002bcd8 -1002bc30: 9b02 ldr r3, [sp, #8] -1002bc32: a905 add r1, sp, #20 -1002bc34: f103 0820 add.w r8, r3, #32 -1002bc38: 4640 mov r0, r8 -1002bc3a: f7eb fc81 bl 10017540 -1002bc3e: 2e04 cmp r6, #4 -1002bc40: d00c beq.n 1002bc5c -1002bc42: 4628 mov r0, r5 -1002bc44: f104 0168 add.w r1, r4, #104 ; 0x68 -1002bc48: f7ff feb6 bl 1002b9b8 -1002bc4c: 4681 mov r9, r0 -1002bc4e: b928 cbnz r0, 1002bc5c -1002bc50: 4640 mov r0, r8 -1002bc52: a905 add r1, sp, #20 -1002bc54: f7eb fc7e bl 10017554 -1002bc58: 464e mov r6, r9 -1002bc5a: e043 b.n 1002bce4 -1002bc5c: b2f1 uxtb r1, r6 -1002bc5e: 6fe0 ldr r0, [r4, #124] ; 0x7c -1002bc60: f7ff fe6c bl 1002b93c -1002bc64: 4681 mov r9, r0 -1002bc66: 4620 mov r0, r4 -1002bc68: f7ff fe8d bl 1002b986 -1002bc6c: f8d9 b004 ldr.w fp, [r9, #4] -1002bc70: 2e04 cmp r6, #4 -1002bc72: bf08 it eq -1002bc74: 2301 moveq r3, #1 -1002bc76: f8c7 b02c str.w fp, [r7, #44] ; 0x2c -1002bc7a: bf08 it eq -1002bc7c: f885 3b08 strbeq.w r3, [r5, #2824] ; 0xb08 -1002bc80: f1bb 0f00 cmp.w fp, #0 -1002bc84: d105 bne.n 1002bc92 -1002bc86: 4640 mov r0, r8 -1002bc88: a905 add r1, sp, #20 -1002bc8a: f7eb fc63 bl 10017554 -1002bc8e: 465e mov r6, fp -1002bc90: e028 b.n 1002bce4 -1002bc92: 4620 mov r0, r4 -1002bc94: 4659 mov r1, fp -1002bc96: f001 fe3f bl 1002d918 -1002bc9a: 4628 mov r0, r5 -1002bc9c: 4621 mov r1, r4 -1002bc9e: 464a mov r2, r9 -1002bca0: f7ff feef bl 1002ba82 -1002bca4: 8b3b ldrh r3, [r7, #24] -1002bca6: 2b02 cmp r3, #2 -1002bca8: d005 beq.n 1002bcb6 -1002bcaa: eb0a 1046 add.w r0, sl, r6, lsl #5 -1002bcae: 3090 adds r0, #144 ; 0x90 -1002bcb0: 4639 mov r1, r7 -1002bcb2: f7ff fec2 bl 1002ba3a -1002bcb6: 2e04 cmp r6, #4 -1002bcb8: d106 bne.n 1002bcc8 -1002bcba: f8d9 3000 ldr.w r3, [r9] -1002bcbe: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000 -1002bcc2: f8c9 3000 str.w r3, [r9] -1002bcc6: e003 b.n 1002bcd0 -1002bcc8: 4628 mov r0, r5 -1002bcca: 4631 mov r1, r6 -1002bccc: f7ff ff19 bl 1002bb02 -1002bcd0: 4640 mov r0, r8 -1002bcd2: a905 add r1, sp, #20 -1002bcd4: f7eb fc3e bl 10017554 -1002bcd8: 4628 mov r0, r5 -1002bcda: 4621 mov r1, r4 -1002bcdc: 9a03 ldr r2, [sp, #12] -1002bcde: f7fd fde2 bl 100298a6 -1002bce2: 2601 movs r6, #1 -1002bce4: 4628 mov r0, r5 -1002bce6: 2101 movs r1, #1 -1002bce8: f004 ff32 bl 10030b50 -1002bcec: 2e01 cmp r6, #1 -1002bcee: d008 beq.n 1002bd02 -1002bcf0: 4639 mov r1, r7 -1002bcf2: 4650 mov r0, sl -1002bcf4: f7fe fdad bl 1002a852 -1002bcf8: f107 0024 add.w r0, r7, #36 ; 0x24 -1002bcfc: 2101 movs r1, #1 -1002bcfe: f7fe fd75 bl 1002a7ec -1002bd02: 4650 mov r0, sl -1002bd04: 4621 mov r1, r4 -1002bd06: f7fd fe43 bl 10029990 -1002bd0a: b2f0 uxtb r0, r6 -1002bd0c: b007 add sp, #28 -1002bd0e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -1002bd12 : -1002bd12: b570 push {r4, r5, r6, lr} -1002bd14: 4604 mov r4, r0 -1002bd16: 460e mov r6, r1 -1002bd18: f600 1558 addw r5, r0, #2392 ; 0x958 -1002bd1c: f7f2 fc0a bl 1001e534 -1002bd20: b140 cbz r0, 1002bd34 -1002bd22: f641 0369 movw r3, #6249 ; 0x1869 -1002bd26: 5ce3 ldrb r3, [r4, r3] -1002bd28: b123 cbz r3, 1002bd34 -1002bd2a: f641 035c movw r3, #6236 ; 0x185c -1002bd2e: 58e5 ldr r5, [r4, r3] -1002bd30: f605 1558 addw r5, r5, #2392 ; 0x958 -1002bd34: eb05 1546 add.w r5, r5, r6, lsl #5 -1002bd38: f8d5 009c ldr.w r0, [r5, #156] ; 0x9c -1002bd3c: f8d5 30ac ldr.w r3, [r5, #172] ; 0xac -1002bd40: 1ac0 subs r0, r0, r3 -1002bd42: 2801 cmp r0, #1 -1002bd44: bf94 ite ls -1002bd46: 2000 movls r0, #0 -1002bd48: 2001 movhi r0, #1 -1002bd4a: bd70 pop {r4, r5, r6, pc} - -1002bd4c : -1002bd4c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002bd50: 2301 movs r3, #1 -1002bd52: b089 sub sp, #36 ; 0x24 -1002bd54: 9305 str r3, [sp, #20] -1002bd56: 2302 movs r3, #2 -1002bd58: 9101 str r1, [sp, #4] -1002bd5a: 2500 movs r5, #0 -1002bd5c: 9306 str r3, [sp, #24] -1002bd5e: a903 add r1, sp, #12 -1002bd60: 2303 movs r3, #3 -1002bd62: 4682 mov sl, r0 -1002bd64: 4693 mov fp, r2 -1002bd66: 9504 str r5, [sp, #16] -1002bd68: 9307 str r3, [sp, #28] -1002bd6a: f7eb fc2d bl 100175c8 -1002bd6e: 455d cmp r5, fp -1002bd70: da2d bge.n 1002bdce -1002bd72: ab04 add r3, sp, #16 -1002bd74: f853 3025 ldr.w r3, [r3, r5, lsl #2] -1002bd78: 9a01 ldr r2, [sp, #4] -1002bd7a: f852 7033 ldr.w r7, [r2, r3, lsl #3] -1002bd7e: eb02 08c3 add.w r8, r2, r3, lsl #3 -1002bd82: 683e ldr r6, [r7, #0] -1002bd84: 4638 mov r0, r7 -1002bd86: 4631 mov r1, r6 -1002bd88: f7eb fbfb bl 10017582 -1002bd8c: b9e8 cbnz r0, 1002bdca -1002bd8e: 68b4 ldr r4, [r6, #8] -1002bd90: f106 0908 add.w r9, r6, #8 -1002bd94: 4648 mov r0, r9 -1002bd96: 4621 mov r1, r4 -1002bd98: f7eb fbf3 bl 10017582 -1002bd9c: b998 cbnz r0, 1002bdc6 -1002bd9e: 4620 mov r0, r4 -1002bda0: f7eb fb62 bl 10017468 -1002bda4: 6972 ldr r2, [r6, #20] -1002bda6: 3a01 subs r2, #1 -1002bda8: 6172 str r2, [r6, #20] -1002bdaa: b164 cbz r4, 1002bdc6 -1002bdac: f8d8 2004 ldr.w r2, [r8, #4] -1002bdb0: 4648 mov r0, r9 -1002bdb2: 3a01 subs r2, #1 -1002bdb4: f8c8 2004 str.w r2, [r8, #4] -1002bdb8: f7eb fbde bl 10017578 -1002bdbc: b140 cbz r0, 1002bdd0 -1002bdbe: 4630 mov r0, r6 -1002bdc0: f7eb fb52 bl 10017468 -1002bdc4: e004 b.n 1002bdd0 -1002bdc6: 6836 ldr r6, [r6, #0] -1002bdc8: e7dc b.n 1002bd84 -1002bdca: 3501 adds r5, #1 -1002bdcc: e7cf b.n 1002bd6e -1002bdce: 2400 movs r4, #0 -1002bdd0: 4650 mov r0, sl -1002bdd2: a903 add r1, sp, #12 -1002bdd4: f7eb fc02 bl 100175dc -1002bdd8: 4620 mov r0, r4 -1002bdda: b009 add sp, #36 ; 0x24 -1002bddc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -1002bde0 : -1002bde0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002bde4: 468a mov sl, r1 -1002bde6: 4611 mov r1, r2 -1002bde8: b095 sub sp, #84 ; 0x54 -1002bdea: 4680 mov r8, r0 -1002bdec: f811 bf57 ldrb.w fp, [r1, #87]! -1002bdf0: f500 6046 add.w r0, r0, #3168 ; 0xc60 -1002bdf4: 4616 mov r6, r2 -1002bdf6: f102 0508 add.w r5, r2, #8 -1002bdfa: f7fc fa4b bl 10028294 -1002bdfe: 4604 mov r4, r0 -1002be00: 2800 cmp r0, #0 -1002be02: f000 8143 beq.w 1002c08c -1002be06: af08 add r7, sp, #32 -1002be08: 4640 mov r0, r8 -1002be0a: 4639 mov r1, r7 -1002be0c: 462a mov r2, r5 -1002be0e: f7fd fb8a bl 10029526 -1002be12: 2800 cmp r0, #0 -1002be14: f000 813a beq.w 1002c08c -1002be18: 4650 mov r0, sl -1002be1a: a902 add r1, sp, #8 -1002be1c: f00a fd3f bl 1003689e <_rtw_open_pktfile> -1002be20: a802 add r0, sp, #8 -1002be22: 2100 movs r1, #0 -1002be24: 8a32 ldrh r2, [r6, #16] -1002be26: f00a fd43 bl 100368b0 <_rtw_pktfile_read> -1002be2a: f8bd 3020 ldrh.w r3, [sp, #32] -1002be2e: f8b6 9012 ldrh.w r9, [r6, #18] -1002be32: f443 6380 orr.w r3, r3, #1024 ; 0x400 -1002be36: f8ad 3020 strh.w r3, [sp, #32] -1002be3a: 7f73 ldrb r3, [r6, #29] -1002be3c: f00b 0b01 and.w fp, fp, #1 -1002be40: 44b9 add r9, r7 -1002be42: 2b00 cmp r3, #0 -1002be44: f000 80d5 beq.w 1002bff2 -1002be48: 7f33 ldrb r3, [r6, #28] -1002be4a: 3b01 subs r3, #1 -1002be4c: 2b04 cmp r3, #4 -1002be4e: f200 80c8 bhi.w 1002bfe2 -1002be52: e8df f003 tbb [pc, r3] -1002be56: 2603 .short 0x2603 -1002be58: 8ac6 .short 0x8ac6 -1002be5a: 03 .byte 0x03 -1002be5b: 00 .byte 0x00 -1002be5c: f894 3148 ldrb.w r3, [r4, #328] ; 0x148 -1002be60: 4621 mov r1, r4 -1002be62: 77f3 strb r3, [r6, #31] -1002be64: f894 3149 ldrb.w r3, [r4, #329] ; 0x149 -1002be68: 2500 movs r5, #0 -1002be6a: f886 3020 strb.w r3, [r6, #32] -1002be6e: f894 314a ldrb.w r3, [r4, #330] ; 0x14a -1002be72: f06f 447f mvn.w r4, #4278190080 ; 0xff000000 -1002be76: f886 3021 strb.w r3, [r6, #33] ; 0x21 -1002be7a: f896 305d ldrb.w r3, [r6, #93] ; 0x5d -1002be7e: 019b lsls r3, r3, #6 -1002be80: f886 3022 strb.w r3, [r6, #34] ; 0x22 -1002be84: e9f1 2352 ldrd r2, r3, [r1, #328]! ; 0x148 -1002be88: 42ab cmp r3, r5 -1002be8a: bf08 it eq -1002be8c: 42a2 cmpeq r2, r4 -1002be8e: d003 beq.n 1002be98 -1002be90: 3201 adds r2, #1 -1002be92: f143 0300 adc.w r3, r3, #0 -1002be96: e001 b.n 1002be9c -1002be98: 2200 movs r2, #0 -1002be9a: 2300 movs r3, #0 -1002be9c: e9c1 2300 strd r2, r3, [r1] -1002bea0: e09f b.n 1002bfe2 -1002bea2: f894 3149 ldrb.w r3, [r4, #329] ; 0x149 -1002bea6: f504 7ea4 add.w lr, r4, #328 ; 0x148 -1002beaa: 77f3 strb r3, [r6, #31] -1002beac: f894 3149 ldrb.w r3, [r4, #329] ; 0x149 -1002beb0: f003 035f and.w r3, r3, #95 ; 0x5f -1002beb4: f043 0320 orr.w r3, r3, #32 -1002beb8: f886 3020 strb.w r3, [r6, #32] -1002bebc: f894 3148 ldrb.w r3, [r4, #328] ; 0x148 -1002bec0: f886 3021 strb.w r3, [r6, #33] ; 0x21 -1002bec4: f1bb 0f00 cmp.w fp, #0 -1002bec8: d029 beq.n 1002bf1e -1002beca: f896 305d ldrb.w r3, [r6, #93] ; 0x5d -1002bece: f04f 30ff mov.w r0, #4294967295 -1002bed2: 019b lsls r3, r3, #6 -1002bed4: f043 0320 orr.w r3, r3, #32 -1002bed8: f886 3022 strb.w r3, [r6, #34] ; 0x22 -1002bedc: f894 314a ldrb.w r3, [r4, #330] ; 0x14a -1002bee0: f64f 71ff movw r1, #65535 ; 0xffff -1002bee4: f886 3023 strb.w r3, [r6, #35] ; 0x23 -1002bee8: f894 314b ldrb.w r3, [r4, #331] ; 0x14b -1002beec: f886 3024 strb.w r3, [r6, #36] ; 0x24 -1002bef0: f894 314c ldrb.w r3, [r4, #332] ; 0x14c -1002bef4: f886 3025 strb.w r3, [r6, #37] ; 0x25 -1002bef8: f894 314d ldrb.w r3, [r4, #333] ; 0x14d -1002befc: f886 3026 strb.w r3, [r6, #38] ; 0x26 -1002bf00: e9de 2300 ldrd r2, r3, [lr] -1002bf04: 428b cmp r3, r1 -1002bf06: bf08 it eq -1002bf08: 4282 cmpeq r2, r0 -1002bf0a: d003 beq.n 1002bf14 -1002bf0c: 3201 adds r2, #1 -1002bf0e: f143 0300 adc.w r3, r3, #0 -1002bf12: e001 b.n 1002bf18 -1002bf14: 2200 movs r2, #0 -1002bf16: 2300 movs r3, #0 -1002bf18: e9ce 2300 strd r2, r3, [lr] -1002bf1c: e061 b.n 1002bfe2 -1002bf1e: 2320 movs r3, #32 -1002bf20: f886 3022 strb.w r3, [r6, #34] ; 0x22 -1002bf24: f894 314a ldrb.w r3, [r4, #330] ; 0x14a -1002bf28: f04f 32ff mov.w r2, #4294967295 -1002bf2c: f886 3023 strb.w r3, [r6, #35] ; 0x23 -1002bf30: f894 314b ldrb.w r3, [r4, #331] ; 0x14b -1002bf34: f886 3024 strb.w r3, [r6, #36] ; 0x24 -1002bf38: f894 314c ldrb.w r3, [r4, #332] ; 0x14c -1002bf3c: f886 3025 strb.w r3, [r6, #37] ; 0x25 -1002bf40: f894 314d ldrb.w r3, [r4, #333] ; 0x14d -1002bf44: f886 3026 strb.w r3, [r6, #38] ; 0x26 -1002bf48: f64f 73ff movw r3, #65535 ; 0xffff -1002bf4c: e9de 4500 ldrd r4, r5, [lr] -1002bf50: 429d cmp r5, r3 -1002bf52: bf08 it eq -1002bf54: 4294 cmpeq r4, r2 -1002bf56: d003 beq.n 1002bf60 -1002bf58: 3401 adds r4, #1 -1002bf5a: f145 0500 adc.w r5, r5, #0 -1002bf5e: e001 b.n 1002bf64 -1002bf60: 2400 movs r4, #0 -1002bf62: 2500 movs r5, #0 -1002bf64: e9ce 4500 strd r4, r5, [lr] -1002bf68: e03b b.n 1002bfe2 -1002bf6a: f894 3148 ldrb.w r3, [r4, #328] ; 0x148 -1002bf6e: f504 71a4 add.w r1, r4, #328 ; 0x148 -1002bf72: 77f3 strb r3, [r6, #31] -1002bf74: f894 3149 ldrb.w r3, [r4, #329] ; 0x149 -1002bf78: f886 3020 strb.w r3, [r6, #32] -1002bf7c: f1bb 0f00 cmp.w fp, #0 -1002bf80: d008 beq.n 1002bf94 -1002bf82: 2300 movs r3, #0 -1002bf84: f886 3021 strb.w r3, [r6, #33] ; 0x21 -1002bf88: f896 305d ldrb.w r3, [r6, #93] ; 0x5d -1002bf8c: 019b lsls r3, r3, #6 -1002bf8e: f043 0320 orr.w r3, r3, #32 -1002bf92: e002 b.n 1002bf9a -1002bf94: f886 b021 strb.w fp, [r6, #33] ; 0x21 -1002bf98: 2320 movs r3, #32 -1002bf9a: f886 3022 strb.w r3, [r6, #34] ; 0x22 -1002bf9e: f894 314a ldrb.w r3, [r4, #330] ; 0x14a -1002bfa2: f04f 32ff mov.w r2, #4294967295 -1002bfa6: f886 3023 strb.w r3, [r6, #35] ; 0x23 -1002bfaa: f894 314b ldrb.w r3, [r4, #331] ; 0x14b -1002bfae: f886 3024 strb.w r3, [r6, #36] ; 0x24 -1002bfb2: f894 314c ldrb.w r3, [r4, #332] ; 0x14c -1002bfb6: f886 3025 strb.w r3, [r6, #37] ; 0x25 -1002bfba: f894 314d ldrb.w r3, [r4, #333] ; 0x14d -1002bfbe: f886 3026 strb.w r3, [r6, #38] ; 0x26 -1002bfc2: f64f 73ff movw r3, #65535 ; 0xffff -1002bfc6: e9d1 4500 ldrd r4, r5, [r1] -1002bfca: 429d cmp r5, r3 -1002bfcc: bf08 it eq -1002bfce: 4294 cmpeq r4, r2 -1002bfd0: d003 beq.n 1002bfda -1002bfd2: 3401 adds r4, #1 -1002bfd4: f145 0500 adc.w r5, r5, #0 -1002bfd8: e001 b.n 1002bfde -1002bfda: 2400 movs r4, #0 -1002bfdc: 2500 movs r5, #0 -1002bfde: e9c1 4500 strd r4, r5, [r1] -1002bfe2: 4648 mov r0, r9 -1002bfe4: f106 011f add.w r1, r6, #31 -1002bfe8: 7f72 ldrb r2, [r6, #29] -1002bfea: f7eb fa11 bl 10017410 -1002bfee: 7f73 ldrb r3, [r6, #29] -1002bff0: 4499 add r9, r3 -1002bff2: 4648 mov r0, r9 -1002bff4: 89b1 ldrh r1, [r6, #12] -1002bff6: f7fd fc0f bl 10029818 -1002bffa: 8a32 ldrh r2, [r6, #16] -1002bffc: f8da 3010 ldr.w r3, [sl, #16] -1002c000: 4481 add r9, r0 -1002c002: 4413 add r3, r2 -1002c004: ebc7 0209 rsb r2, r7, r9 -1002c008: 1a9c subs r4, r3, r2 -1002c00a: 4639 mov r1, r7 -1002c00c: 4605 mov r5, r0 -1002c00e: 4620 mov r0, r4 -1002c010: 9301 str r3, [sp, #4] -1002c012: f7eb f9fd bl 10017410 -1002c016: f8d6 1084 ldr.w r1, [r6, #132] ; 0x84 -1002c01a: f1a4 0228 sub.w r2, r4, #40 ; 0x28 -1002c01e: 6977 ldr r7, [r6, #20] -1002c020: 610a str r2, [r1, #16] -1002c022: f8c6 2080 str.w r2, [r6, #128] ; 0x80 -1002c026: 7fb2 ldrb r2, [r6, #30] -1002c028: 9b01 ldr r3, [sp, #4] -1002c02a: b132 cbz r2, 1002c03a -1002c02c: 7ab1 ldrb r1, [r6, #10] -1002c02e: b121 cbz r1, 1002c03a -1002c030: 19d8 adds r0, r3, r7 -1002c032: f106 0131 add.w r1, r6, #49 ; 0x31 -1002c036: f7eb f9eb bl 10017410 -1002c03a: 8a72 ldrh r2, [r6, #18] -1002c03c: 7f73 ldrb r3, [r6, #29] -1002c03e: 4413 add r3, r2 -1002c040: 441d add r5, r3 -1002c042: 7ab3 ldrb r3, [r6, #10] -1002c044: b103 cbz r3, 1002c048 -1002c046: 7fb3 ldrb r3, [r6, #30] -1002c048: 442b add r3, r5 -1002c04a: 441f add r7, r3 -1002c04c: 8823 ldrh r3, [r4, #0] -1002c04e: 61b7 str r7, [r6, #24] -1002c050: f423 6380 bic.w r3, r3, #1024 ; 0x400 -1002c054: 8023 strh r3, [r4, #0] -1002c056: 4640 mov r0, r8 -1002c058: 4631 mov r1, r6 -1002c05a: f7fd f99f bl 1002939c -1002c05e: b1a8 cbz r0, 1002c08c -1002c060: 4640 mov r0, r8 -1002c062: 4631 mov r1, r6 -1002c064: f7fd fa49 bl 100294fa -1002c068: 2400 movs r4, #0 -1002c06a: f1bb 0f00 cmp.w fp, #0 -1002c06e: d104 bne.n 1002c07a -1002c070: 4640 mov r0, r8 -1002c072: 4631 mov r1, r6 -1002c074: f7fd fb80 bl 10029778 -1002c078: e001 b.n 1002c07e -1002c07a: f886 4044 strb.w r4, [r6, #68] ; 0x44 -1002c07e: f8d6 3084 ldr.w r3, [r6, #132] ; 0x84 -1002c082: 6774 str r4, [r6, #116] ; 0x74 -1002c084: 2001 movs r0, #1 -1002c086: f8c3 a00c str.w sl, [r3, #12] -1002c08a: e000 b.n 1002c08e -1002c08c: 2000 movs r0, #0 -1002c08e: b015 add sp, #84 ; 0x54 -1002c090: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -1002c094 : -1002c094: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1002c098: 4604 mov r4, r0 -1002c09a: f600 1758 addw r7, r0, #2392 ; 0x958 -1002c09e: f04f 0801 mov.w r8, #1 -1002c0a2: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -1002c0a6: 330c adds r3, #12 -1002c0a8: 681b ldr r3, [r3, #0] -1002c0aa: 2b01 cmp r3, #1 -1002c0ac: d072 beq.n 1002c194 -1002c0ae: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -1002c0b2: 3310 adds r3, #16 -1002c0b4: 681b ldr r3, [r3, #0] -1002c0b6: 2b01 cmp r3, #1 -1002c0b8: d06c beq.n 1002c194 -1002c0ba: 4620 mov r0, r4 -1002c0bc: 2101 movs r1, #1 -1002c0be: f7ff fe28 bl 1002bd12 -1002c0c2: b908 cbnz r0, 1002c0c8 -1002c0c4: 2000 movs r0, #0 -1002c0c6: e01e b.n 1002c106 -1002c0c8: 4620 mov r0, r4 -1002c0ca: 2100 movs r1, #0 -1002c0cc: f7ff fe21 bl 1002bd12 -1002c0d0: 2800 cmp r0, #0 -1002c0d2: d0f7 beq.n 1002c0c4 -1002c0d4: 4620 mov r0, r4 -1002c0d6: 2102 movs r1, #2 -1002c0d8: f7ff fe1b bl 1002bd12 -1002c0dc: 2800 cmp r0, #0 -1002c0de: d0f1 beq.n 1002c0c4 -1002c0e0: 4620 mov r0, r4 -1002c0e2: 2103 movs r1, #3 -1002c0e4: f7ff fe15 bl 1002bd12 -1002c0e8: 2800 cmp r0, #0 -1002c0ea: d0eb beq.n 1002c0c4 -1002c0ec: 4620 mov r0, r4 -1002c0ee: 2105 movs r1, #5 -1002c0f0: f7ff fe0f bl 1002bd12 -1002c0f4: 2800 cmp r0, #0 -1002c0f6: d0e5 beq.n 1002c0c4 -1002c0f8: 4620 mov r0, r4 -1002c0fa: 2106 movs r1, #6 -1002c0fc: f7ff fe09 bl 1002bd12 -1002c100: 3000 adds r0, #0 -1002c102: bf18 it ne -1002c104: 2001 movne r0, #1 -1002c106: 2800 cmp r0, #0 -1002c108: d044 beq.n 1002c194 -1002c10a: 4638 mov r0, r7 -1002c10c: f7fe fb74 bl 1002a7f8 -1002c110: 4606 mov r6, r0 -1002c112: 2800 cmp r0, #0 -1002c114: d03e beq.n 1002c194 -1002c116: 4638 mov r0, r7 -1002c118: f8d4 19e0 ldr.w r1, [r4, #2528] ; 0x9e0 -1002c11c: f894 29e4 ldrb.w r2, [r4, #2532] ; 0x9e4 -1002c120: f7ff fe14 bl 1002bd4c -1002c124: 4605 mov r5, r0 -1002c126: b378 cbz r0, 1002c188 -1002c128: 6f83 ldr r3, [r0, #120] ; 0x78 -1002c12a: 2b03 cmp r3, #3 -1002c12c: d104 bne.n 1002c138 -1002c12e: 4638 mov r0, r7 -1002c130: 4631 mov r1, r6 -1002c132: f7fe fb8e bl 1002a852 -1002c136: e019 b.n 1002c16c -1002c138: 6932 ldr r2, [r6, #16] -1002c13a: f003 030f and.w r3, r3, #15 -1002c13e: 2b01 cmp r3, #1 -1002c140: f8c0 6084 str.w r6, [r0, #132] ; 0x84 -1002c144: f8c0 2080 str.w r2, [r0, #128] ; 0x80 -1002c148: 6170 str r0, [r6, #20] -1002c14a: d10c bne.n 1002c166 -1002c14c: f890 3041 ldrb.w r3, [r0, #65] ; 0x41 -1002c150: 2b0f cmp r3, #15 -1002c152: d808 bhi.n 1002c166 -1002c154: 4620 mov r0, r4 -1002c156: 6f69 ldr r1, [r5, #116] ; 0x74 -1002c158: 462a mov r2, r5 -1002c15a: f7ff fe41 bl 1002bde0 -1002c15e: 2300 movs r3, #0 -1002c160: 4680 mov r8, r0 -1002c162: f885 30d0 strb.w r3, [r5, #208] ; 0xd0 -1002c166: f1b8 0f01 cmp.w r8, #1 -1002c16a: d104 bne.n 1002c176 -1002c16c: 4620 mov r0, r4 -1002c16e: 4629 mov r1, r5 -1002c170: f7ff fce6 bl 1002bb40 -1002c174: e795 b.n 1002c0a2 -1002c176: 4631 mov r1, r6 -1002c178: 4638 mov r0, r7 -1002c17a: f7fe fb6a bl 1002a852 -1002c17e: 4638 mov r0, r7 -1002c180: 4629 mov r1, r5 -1002c182: f7fd fc05 bl 10029990 -1002c186: e78c b.n 1002c0a2 -1002c188: 4638 mov r0, r7 -1002c18a: 4631 mov r1, r6 -1002c18c: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -1002c190: f7fe bb5f b.w 1002a852 -1002c194: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1002c198 : -1002c198: b5f8 push {r3, r4, r5, r6, r7, lr} -1002c19a: f8d1 7084 ldr.w r7, [r1, #132] ; 0x84 -1002c19e: 460c mov r4, r1 -1002c1a0: 3168 adds r1, #104 ; 0x68 -1002c1a2: 4605 mov r5, r0 -1002c1a4: f7ff fc08 bl 1002b9b8 -1002c1a8: 4606 mov r6, r0 -1002c1aa: b958 cbnz r0, 1002c1c4 -1002c1ac: f605 1558 addw r5, r5, #2392 ; 0x958 -1002c1b0: 4639 mov r1, r7 -1002c1b2: 4628 mov r0, r5 -1002c1b4: f7fe fb4d bl 1002a852 -1002c1b8: 4628 mov r0, r5 -1002c1ba: 4621 mov r1, r4 -1002c1bc: f7fd fbe8 bl 10029990 -1002c1c0: 4630 mov r0, r6 -1002c1c2: bdf8 pop {r3, r4, r5, r6, r7, pc} -1002c1c4: 2300 movs r3, #0 -1002c1c6: f884 30d0 strb.w r3, [r4, #208] ; 0xd0 -1002c1ca: 4628 mov r0, r5 -1002c1cc: 4621 mov r1, r4 -1002c1ce: f7ff fcb7 bl 1002bb40 -1002c1d2: bdf8 pop {r3, r4, r5, r6, r7, pc} - -1002c1d4 : -1002c1d4: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -1002c1d8: f600 1458 addw r4, r0, #2392 ; 0x958 -1002c1dc: 460d mov r5, r1 -1002c1de: 4606 mov r6, r0 -1002c1e0: f101 0808 add.w r8, r1, #8 -1002c1e4: 4620 mov r0, r4 -1002c1e6: a901 add r1, sp, #4 -1002c1e8: f7eb f9ee bl 100175c8 -1002c1ec: f895 3068 ldrb.w r3, [r5, #104] ; 0x68 -1002c1f0: 2b11 cmp r3, #17 -1002c1f2: d00a beq.n 1002c20a -1002c1f4: 4630 mov r0, r6 -1002c1f6: 4629 mov r1, r5 -1002c1f8: f7fd fdfc bl 10029df4 -1002c1fc: 2801 cmp r0, #1 -1002c1fe: d104 bne.n 1002c20a -1002c200: 4620 mov r0, r4 -1002c202: a901 add r1, sp, #4 -1002c204: f7eb f9ea bl 100175dc -1002c208: e06f b.n 1002c2ea -1002c20a: 4630 mov r0, r6 -1002c20c: 4641 mov r1, r8 -1002c20e: f7fd fa98 bl 10029742 -1002c212: 2800 cmp r0, #0 -1002c214: dd04 ble.n 1002c220 -1002c216: f895 3068 ldrb.w r3, [r5, #104] ; 0x68 -1002c21a: 2b11 cmp r3, #17 -1002c21c: d115 bne.n 1002c24a -1002c21e: e006 b.n 1002c22e -1002c220: 4630 mov r0, r6 -1002c222: f105 0168 add.w r1, r5, #104 ; 0x68 -1002c226: f7ff fbc7 bl 1002b9b8 -1002c22a: 2800 cmp r0, #0 -1002c22c: d0f3 beq.n 1002c216 -1002c22e: 6933 ldr r3, [r6, #16] -1002c230: f413 6f08 tst.w r3, #2176 ; 0x880 -1002c234: d109 bne.n 1002c24a -1002c236: 4630 mov r0, r6 -1002c238: f44f 6108 mov.w r1, #2176 ; 0x880 -1002c23c: f7f2 f996 bl 1001e56c -1002c240: 2801 cmp r0, #1 -1002c242: d002 beq.n 1002c24a -1002c244: 6fab ldr r3, [r5, #120] ; 0x78 -1002c246: 2b03 cmp r3, #3 -1002c248: d125 bne.n 1002c296 -1002c24a: 4629 mov r1, r5 -1002c24c: 4630 mov r0, r6 -1002c24e: f7fd fc3a bl 10029ac6 -1002c252: a901 add r1, sp, #4 -1002c254: 4607 mov r7, r0 -1002c256: 4620 mov r0, r4 -1002c258: f7eb f9c0 bl 100175dc -1002c25c: 2f01 cmp r7, #1 -1002c25e: d013 beq.n 1002c288 -1002c260: 4620 mov r0, r4 -1002c262: 4629 mov r1, r5 -1002c264: f7fd fb94 bl 10029990 -1002c268: e9d4 231a ldrd r2, r3, [r4, #104] ; 0x68 -1002c26c: f112 32ff adds.w r2, r2, #4294967295 -1002c270: f143 33ff adc.w r3, r3, #4294967295 -1002c274: e9c4 231a strd r2, r3, [r4, #104] ; 0x68 -1002c278: e9d4 231c ldrd r2, r3, [r4, #112] ; 0x70 -1002c27c: 3201 adds r2, #1 -1002c27e: f143 0300 adc.w r3, r3, #0 -1002c282: e9c4 231c strd r2, r3, [r4, #112] ; 0x70 -1002c286: e030 b.n 1002c2ea -1002c288: f506 50c0 add.w r0, r6, #6144 ; 0x1800 -1002c28c: 301c adds r0, #28 -1002c28e: f7eb f903 bl 10017498 -1002c292: 2000 movs r0, #0 -1002c294: e02a b.n 1002c2ec -1002c296: 4620 mov r0, r4 -1002c298: f7fe faae bl 1002a7f8 -1002c29c: 4607 mov r7, r0 -1002c29e: 2800 cmp r0, #0 -1002c2a0: d0d3 beq.n 1002c24a -1002c2a2: 4620 mov r0, r4 -1002c2a4: a901 add r1, sp, #4 -1002c2a6: f7eb f999 bl 100175dc -1002c2aa: 6fab ldr r3, [r5, #120] ; 0x78 -1002c2ac: 2b03 cmp r3, #3 -1002c2ae: d005 beq.n 1002c2bc -1002c2b0: 693b ldr r3, [r7, #16] -1002c2b2: f8c5 7084 str.w r7, [r5, #132] ; 0x84 -1002c2b6: f8c5 3080 str.w r3, [r5, #128] ; 0x80 -1002c2ba: 617d str r5, [r7, #20] -1002c2bc: 2300 movs r3, #0 -1002c2be: f885 30d0 strb.w r3, [r5, #208] ; 0xd0 -1002c2c2: 4630 mov r0, r6 -1002c2c4: 6f69 ldr r1, [r5, #116] ; 0x74 -1002c2c6: 462a mov r2, r5 -1002c2c8: f7ff fd8a bl 1002bde0 -1002c2cc: 2801 cmp r0, #1 -1002c2ce: d104 bne.n 1002c2da -1002c2d0: 4630 mov r0, r6 -1002c2d2: 4629 mov r1, r5 -1002c2d4: f7ff fc34 bl 1002bb40 -1002c2d8: e007 b.n 1002c2ea -1002c2da: 4639 mov r1, r7 -1002c2dc: 4620 mov r0, r4 -1002c2de: f7fe fab8 bl 1002a852 -1002c2e2: 4620 mov r0, r4 -1002c2e4: 4629 mov r1, r5 -1002c2e6: f7fd fb53 bl 10029990 -1002c2ea: 2001 movs r0, #1 -1002c2ec: b002 add sp, #8 -1002c2ee: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1002c2f2 : -1002c2f2: 2a06 cmp r2, #6 -1002c2f4: d812 bhi.n 1002c31c -1002c2f6: e8df f002 tbb [pc, r2] -1002c2fa: 0604 .short 0x0604 -1002c2fc: 0f0b0909 .word 0x0f0b0909 -1002c300: 06 .byte 0x06 -1002c301: 00 .byte 0x00 -1002c302: 2240 movs r2, #64 ; 0x40 -1002c304: e00b b.n 1002c31e -1002c306: f44f 7280 mov.w r2, #256 ; 0x100 -1002c30a: e003 b.n 1002c314 -1002c30c: 2280 movs r2, #128 ; 0x80 -1002c30e: e001 b.n 1002c314 -1002c310: f44f 7200 mov.w r2, #512 ; 0x200 -1002c314: 801a strh r2, [r3, #0] -1002c316: 4770 bx lr -1002c318: 2280 movs r2, #128 ; 0x80 -1002c31a: e000 b.n 1002c31e -1002c31c: 2200 movs r2, #0 -1002c31e: 701a strb r2, [r3, #0] -1002c320: 4770 bx lr - -1002c322 : -1002c322: b538 push {r3, r4, r5, lr} -1002c324: f241 63c8 movw r3, #5832 ; 0x16c8 -1002c328: 58c4 ldr r4, [r0, r3] -1002c32a: 4605 mov r5, r0 -1002c32c: f894 21a5 ldrb.w r2, [r4, #421] ; 0x1a5 -1002c330: f240 4122 movw r1, #1058 ; 0x422 -1002c334: f042 0240 orr.w r2, r2, #64 ; 0x40 -1002c338: f884 21a5 strb.w r2, [r4, #421] ; 0x1a5 -1002c33c: f00b fcb2 bl 10037ca4 -1002c340: 4628 mov r0, r5 -1002c342: f240 5141 movw r1, #1345 ; 0x541 -1002c346: 22ff movs r2, #255 ; 0xff -1002c348: f00b fcac bl 10037ca4 -1002c34c: f894 21a6 ldrb.w r2, [r4, #422] ; 0x1a6 -1002c350: 4628 mov r0, r5 -1002c352: f042 0201 orr.w r2, r2, #1 -1002c356: f884 21a6 strb.w r2, [r4, #422] ; 0x1a6 -1002c35a: f240 5142 movw r1, #1346 ; 0x542 -1002c35e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1002c362: f00b bc9f b.w 10037ca4 - ... - -1002c368 : -1002c368: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002c36c: f241 64c8 movw r4, #5832 ; 0x16c8 -1002c370: b087 sub sp, #28 -1002c372: 4680 mov r8, r0 -1002c374: 468a mov sl, r1 -1002c376: 9205 str r2, [sp, #20] -1002c378: 5905 ldr r5, [r0, r4] -1002c37a: f7f2 f8db bl 1001e534 -1002c37e: b150 cbz r0, 1002c396 -1002c380: f641 0369 movw r3, #6249 ; 0x1869 -1002c384: f818 3003 ldrb.w r3, [r8, r3] -1002c388: b12b cbz r3, 1002c396 -1002c38a: f641 035c movw r3, #6236 ; 0x185c -1002c38e: f858 3003 ldr.w r3, [r8, r3] -1002c392: 591c ldr r4, [r3, r4] -1002c394: e000 b.n 1002c398 -1002c396: 462c mov r4, r5 -1002c398: f1ba 0f04 cmp.w sl, #4 -1002c39c: f200 80c3 bhi.w 1002c526 -1002c3a0: eb08 134a add.w r3, r8, sl, lsl #5 -1002c3a4: f8d3 6790 ldr.w r6, [r3, #1936] ; 0x790 -1002c3a8: 2e00 cmp r6, #0 -1002c3aa: f000 80bc beq.w 1002c526 -1002c3ae: f1ba 0f01 cmp.w sl, #1 -1002c3b2: f108 07fc add.w r7, r8, #252 ; 0xfc -1002c3b6: d02c beq.n 1002c412 -1002c3b8: d302 bcc.n 1002c3c0 -1002c3ba: f1ba 0f02 cmp.w sl, #2 -1002c3be: d13e bne.n 1002c43e -1002c3c0: 4638 mov r0, r7 -1002c3c2: f012 fae9 bl 1003e998 <__rtw_get_rateset_len_veneer> -1002c3c6: 4683 mov fp, r0 -1002c3c8: 465a mov r2, fp -1002c3ca: 4639 mov r1, r7 -1002c3cc: 4640 mov r0, r8 -1002c3ce: f7fc f854 bl 1002847a -1002c3d2: f000 010f and.w r1, r0, #15 -1002c3d6: 4640 mov r0, r8 -1002c3d8: f7fc f820 bl 1002841c -1002c3dc: 4659 mov r1, fp -1002c3de: fa5f f980 uxtb.w r9, r0 -1002c3e2: 4638 mov r0, r7 -1002c3e4: f7fc fd75 bl 10028ed2 -1002c3e8: f898 3734 ldrb.w r3, [r8, #1844] ; 0x734 -1002c3ec: 4683 mov fp, r0 -1002c3ee: f208 775a addw r7, r8, #1882 ; 0x75a -1002c3f2: b11b cbz r3, 1002c3fc -1002c3f4: 4638 mov r0, r7 -1002c3f6: f7fc fd81 bl 10028efc -1002c3fa: e000 b.n 1002c3fe -1002c3fc: 4618 mov r0, r3 -1002c3fe: 4639 mov r1, r7 -1002c400: ea40 0b0b orr.w fp, r0, fp -1002c404: 4640 mov r0, r8 -1002c406: f7fc fd7f bl 10028f08 -1002c40a: 1c07 adds r7, r0, #0 -1002c40c: bf18 it ne -1002c40e: 2701 movne r7, #1 -1002c410: e02f b.n 1002c472 -1002c412: f508 60f8 add.w r0, r8, #1984 ; 0x7c0 -1002c416: f012 fabf bl 1003e998 <__rtw_get_rateset_len_veneer> -1002c41a: f898 2521 ldrb.w r2, [r8, #1313] ; 0x521 -1002c41e: 4683 mov fp, r0 -1002c420: f012 0f01 tst.w r2, #1 -1002c424: bf0c ite eq -1002c426: 2102 moveq r1, #2 -1002c428: 2101 movne r1, #1 -1002c42a: 4640 mov r0, r8 -1002c42c: f7fb fff6 bl 1002841c -1002c430: 4659 mov r1, fp -1002c432: fa5f f980 uxtb.w r9, r0 -1002c436: 4638 mov r0, r7 -1002c438: f7fc fd34 bl 10028ea4 -1002c43c: e017 b.n 1002c46e -1002c43e: eb08 194a add.w r9, r8, sl, lsl #5 -1002c442: f509 69f4 add.w r9, r9, #1952 ; 0x7a0 -1002c446: 4648 mov r0, r9 -1002c448: f012 faa6 bl 1003e998 <__rtw_get_rateset_len_veneer> -1002c44c: 4683 mov fp, r0 -1002c44e: 4649 mov r1, r9 -1002c450: 465a mov r2, fp -1002c452: 4640 mov r0, r8 -1002c454: f7fc f811 bl 1002847a -1002c458: f000 010f and.w r1, r0, #15 -1002c45c: 4640 mov r0, r8 -1002c45e: f7fb ffdd bl 1002841c -1002c462: 4659 mov r1, fp -1002c464: fa5f f980 uxtb.w r9, r0 -1002c468: 4638 mov r0, r7 -1002c46a: f7fc fd32 bl 10028ed2 -1002c46e: 4683 mov fp, r0 -1002c470: 2700 movs r7, #0 -1002c472: f641 0379 movw r3, #6265 ; 0x1879 -1002c476: f818 3003 ldrb.w r3, [r8, r3] -1002c47a: b1a3 cbz r3, 1002c4a6 -1002c47c: f641 037c movw r3, #6268 ; 0x187c -1002c480: f858 3003 ldr.w r3, [r8, r3] -1002c484: f413 2f7f tst.w r3, #1044480 ; 0xff000 -1002c488: d108 bne.n 1002c49c -1002c48a: f413 6f7f tst.w r3, #4080 ; 0xff0 -1002c48e: d108 bne.n 1002c4a2 -1002c490: f013 0f0f tst.w r3, #15 -1002c494: bf18 it ne -1002c496: f04f 0908 movne.w r9, #8 -1002c49a: e004 b.n 1002c4a6 -1002c49c: f04f 0901 mov.w r9, #1 -1002c4a0: e001 b.n 1002c4a6 -1002c4a2: f04f 0906 mov.w r9, #6 -1002c4a6: 465a mov r2, fp -1002c4a8: 9b05 ldr r3, [sp, #20] -1002c4aa: 4651 mov r1, sl -1002c4ac: f504 7000 add.w r0, r4, #512 ; 0x200 -1002c4b0: f00d fffc bl 1003a4ac -1002c4b4: ea00 0b0b and.w fp, r0, fp -1002c4b8: 4658 mov r0, fp -1002c4ba: f7fc fd3c bl 10028f36 -1002c4be: f894 31a4 ldrb.w r3, [r4, #420] ; 0x1a4 -1002c4c2: f000 0c3f and.w ip, r0, #63 ; 0x3f -1002c4c6: 2b01 cmp r3, #1 -1002c4c8: d10d bne.n 1002c4e6 -1002c4ca: f898 351f ldrb.w r3, [r8, #1311] ; 0x51f -1002c4ce: e88d 0880 stmia.w sp, {r7, fp} -1002c4d2: 4640 mov r0, r8 -1002c4d4: fa5f f18a uxtb.w r1, sl -1002c4d8: 464a mov r2, r9 -1002c4da: f8cd c010 str.w ip, [sp, #16] -1002c4de: f00e fcbf bl 1003ae60 -1002c4e2: f8dd c010 ldr.w ip, [sp, #16] -1002c4e6: 4455 add r5, sl -1002c4e8: 4b10 ldr r3, [pc, #64] ; (1002c52c ) -1002c4ea: f886 9176 strb.w r9, [r6, #374] ; 0x176 -1002c4ee: f886 c177 strb.w ip, [r6, #375] ; 0x177 -1002c4f2: f44f 7400 mov.w r4, #512 ; 0x200 -1002c4f6: f885 c1e0 strb.w ip, [r5, #480] ; 0x1e0 -1002c4fa: 2500 movs r5, #0 -1002c4fc: e9d3 6702 ldrd r6, r7, [r3, #8] -1002c500: 4034 ands r4, r6 -1002c502: 403d ands r5, r7 -1002c504: ea54 0305 orrs.w r3, r4, r5 -1002c508: d00d beq.n 1002c526 -1002c50a: 4b09 ldr r3, [pc, #36] ; (1002c530 ) -1002c50c: 681b ldr r3, [r3, #0] -1002c50e: b153 cbz r3, 1002c526 -1002c510: f898 351f ldrb.w r3, [r8, #1311] ; 0x51f -1002c514: 4907 ldr r1, [pc, #28] ; (1002c534 ) -1002c516: e88d 1808 stmia.w sp, {r3, fp, ip} -1002c51a: 4b07 ldr r3, [pc, #28] ; (1002c538 ) -1002c51c: 4652 mov r2, sl -1002c51e: 69d8 ldr r0, [r3, #28] -1002c520: 464b mov r3, r9 -1002c522: f7ee fb1d bl 1001ab60 -1002c526: b007 add sp, #28 -1002c528: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1002c52c: 10000720 .word 0x10000720 -1002c530: 10044ec0 .word 0x10044ec0 -1002c534: 10041770 .word 0x10041770 -1002c538: 10043a4c .word 0x10043a4c - -1002c53c : -1002c53c: b538 push {r3, r4, r5, lr} -1002c53e: 4604 mov r4, r0 -1002c540: 4813 ldr r0, [pc, #76] ; (1002c590 ) -1002c542: f7eb f9b7 bl 100178b4 -1002c546: f241 63c8 movw r3, #5832 ; 0x16c8 -1002c54a: 4620 mov r0, r4 -1002c54c: 58e5 ldr r5, [r4, r3] -1002c54e: f004 fdeb bl 10031128 -1002c552: f505 6063 add.w r0, r5, #3632 ; 0xe30 -1002c556: f7ea ffb7 bl 100174c8 -1002c55a: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -1002c55e: 330c adds r3, #12 -1002c560: 681b ldr r3, [r3, #0] -1002c562: 4620 mov r0, r4 -1002c564: 2b01 cmp r3, #1 -1002c566: d008 beq.n 1002c57a -1002c568: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -1002c56c: 3310 adds r3, #16 -1002c56e: 681b ldr r3, [r3, #0] -1002c570: 2b01 cmp r3, #1 -1002c572: d002 beq.n 1002c57a -1002c574: f004 fe02 bl 1003117c -1002c578: e7eb b.n 1002c552 -1002c57a: f004 fdfd bl 10031178 -1002c57e: f605 6034 addw r0, r5, #3636 ; 0xe34 -1002c582: f7ea ff89 bl 10017498 -1002c586: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1002c58a: f7eb b99b b.w 100178c4 -1002c58e: bf00 nop -1002c590: 1004178e .word 0x1004178e - -1002c594 : -1002c594: b538 push {r3, r4, r5, lr} -1002c596: 4604 mov r4, r0 -1002c598: 4810 ldr r0, [pc, #64] ; (1002c5dc ) -1002c59a: f7eb f98b bl 100178b4 -1002c59e: f241 63c8 movw r3, #5832 ; 0x16c8 -1002c5a2: 58e5 ldr r5, [r4, r3] -1002c5a4: f505 6066 add.w r0, r5, #3680 ; 0xe60 -1002c5a8: f7ea ff8e bl 100174c8 -1002c5ac: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -1002c5b0: 330c adds r3, #12 -1002c5b2: 681b ldr r3, [r3, #0] -1002c5b4: 2b01 cmp r3, #1 -1002c5b6: d009 beq.n 1002c5cc -1002c5b8: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -1002c5bc: 3310 adds r3, #16 -1002c5be: 681b ldr r3, [r3, #0] -1002c5c0: 2b01 cmp r3, #1 -1002c5c2: d003 beq.n 1002c5cc -1002c5c4: 4620 mov r0, r4 -1002c5c6: f004 fd3b bl 10031040 -1002c5ca: e7eb b.n 1002c5a4 -1002c5cc: f605 6064 addw r0, r5, #3684 ; 0xe64 -1002c5d0: f7ea ff62 bl 10017498 -1002c5d4: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1002c5d8: f7eb b974 b.w 100178c4 -1002c5dc: 100417a3 .word 0x100417a3 - -1002c5e0 : -1002c5e0: b538 push {r3, r4, r5, lr} -1002c5e2: 4604 mov r4, r0 -1002c5e4: 4810 ldr r0, [pc, #64] ; (1002c628 ) -1002c5e6: f7eb f965 bl 100178b4 -1002c5ea: f241 63c8 movw r3, #5832 ; 0x16c8 -1002c5ee: 58e5 ldr r5, [r4, r3] -1002c5f0: f605 6078 addw r0, r5, #3704 ; 0xe78 -1002c5f4: f7ea ff68 bl 100174c8 -1002c5f8: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -1002c5fc: 330c adds r3, #12 -1002c5fe: 681b ldr r3, [r3, #0] -1002c600: 2b01 cmp r3, #1 -1002c602: d009 beq.n 1002c618 -1002c604: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -1002c608: 3310 adds r3, #16 -1002c60a: 681b ldr r3, [r3, #0] -1002c60c: 2b01 cmp r3, #1 -1002c60e: d003 beq.n 1002c618 -1002c610: 4620 mov r0, r4 -1002c612: f003 ffbb bl 1003058c -1002c616: e7eb b.n 1002c5f0 -1002c618: f605 607c addw r0, r5, #3708 ; 0xe7c -1002c61c: f7ea ff3c bl 10017498 -1002c620: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1002c624: f7eb b94e b.w 100178c4 -1002c628: 100417a3 .word 0x100417a3 - -1002c62c : -1002c62c: b570 push {r4, r5, r6, lr} -1002c62e: f241 63c8 movw r3, #5832 ; 0x16c8 -1002c632: 58c6 ldr r6, [r0, r3] -1002c634: 4b18 ldr r3, [pc, #96] ; (1002c698 ) -1002c636: b086 sub sp, #24 -1002c638: 681c ldr r4, [r3, #0] -1002c63a: 4668 mov r0, sp -1002c63c: 2100 movs r1, #0 -1002c63e: 2218 movs r2, #24 -1002c640: f7ea fef6 bl 10017430 -1002c644: 230a movs r3, #10 -1002c646: 9300 str r3, [sp, #0] -1002c648: f484 3380 eor.w r3, r4, #65536 ; 0x10000 -1002c64c: f3c3 4300 ubfx r3, r3, #16, #1 -1002c650: 9301 str r3, [sp, #4] -1002c652: 2300 movs r3, #0 -1002c654: 9304 str r3, [sp, #16] -1002c656: f3c4 2301 ubfx r3, r4, #8, #2 -1002c65a: b133 cbz r3, 1002c66a -1002c65c: 2b01 cmp r3, #1 -1002c65e: d101 bne.n 1002c664 -1002c660: 2302 movs r3, #2 -1002c662: e002 b.n 1002c66a -1002c664: 2b02 cmp r3, #2 -1002c666: d101 bne.n 1002c66c -1002c668: 2301 movs r3, #1 -1002c66a: 9303 str r3, [sp, #12] -1002c66c: 4b0b ldr r3, [pc, #44] ; (1002c69c ) -1002c66e: f3c4 1403 ubfx r4, r4, #4, #4 -1002c672: 681b ldr r3, [r3, #0] -1002c674: 9402 str r4, [sp, #8] -1002c676: f3c3 6340 ubfx r3, r3, #25, #1 -1002c67a: 4634 mov r4, r6 -1002c67c: 466d mov r5, sp -1002c67e: 61b3 str r3, [r6, #24] -1002c680: cd0f ldmia r5!, {r0, r1, r2, r3} -1002c682: c40f stmia r4!, {r0, r1, r2, r3} -1002c684: e895 0003 ldmia.w r5, {r0, r1} -1002c688: 2303 movs r3, #3 -1002c68a: e884 0003 stmia.w r4, {r0, r1} -1002c68e: f886 303c strb.w r3, [r6, #60] ; 0x3c -1002c692: b006 add sp, #24 -1002c694: bd70 pop {r4, r5, r6, pc} -1002c696: bf00 nop -1002c698: 400001f0 .word 0x400001f0 -1002c69c: 400001f4 .word 0x400001f4 - -1002c6a0 : -1002c6a0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002c6a4: b085 sub sp, #20 -1002c6a6: 4692 mov sl, r2 -1002c6a8: 4604 mov r4, r0 -1002c6aa: 460f mov r7, r1 -1002c6ac: a802 add r0, sp, #8 -1002c6ae: 21ff movs r1, #255 ; 0xff -1002c6b0: 2208 movs r2, #8 -1002c6b2: 461d mov r5, r3 -1002c6b4: f89d 6038 ldrb.w r6, [sp, #56] ; 0x38 -1002c6b8: f7ea feba bl 10017430 -1002c6bc: f01a 0b01 ands.w fp, sl, #1 -1002c6c0: d13b bne.n 1002c73a -1002c6c2: f107 0801 add.w r8, r7, #1 -1002c6c6: fa1f f888 uxth.w r8, r8 -1002c6ca: 4639 mov r1, r7 -1002c6cc: 782a ldrb r2, [r5, #0] -1002c6ce: 4633 mov r3, r6 -1002c6d0: 4620 mov r0, r4 -1002c6d2: f00a fe5f bl 10037394 -1002c6d6: 4641 mov r1, r8 -1002c6d8: 786a ldrb r2, [r5, #1] -1002c6da: 4633 mov r3, r6 -1002c6dc: 4620 mov r0, r4 -1002c6de: f00a fe59 bl 10037394 -1002c6e2: 4620 mov r0, r4 -1002c6e4: 21ec movs r1, #236 ; 0xec -1002c6e6: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1002c6ea: 465b mov r3, fp -1002c6ec: f002 fa6b bl 1002ebc6 -1002c6f0: 4639 mov r1, r7 -1002c6f2: aa02 add r2, sp, #8 -1002c6f4: 4633 mov r3, r6 -1002c6f6: 4620 mov r0, r4 -1002c6f8: f00a fe32 bl 10037360 -1002c6fc: 4641 mov r1, r8 -1002c6fe: f10d 0209 add.w r2, sp, #9 -1002c702: 4633 mov r3, r6 -1002c704: 4620 mov r0, r4 -1002c706: f00a fe2b bl 10037360 -1002c70a: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1002c70e: 2301 movs r3, #1 -1002c710: 4620 mov r0, r4 -1002c712: 21ec movs r1, #236 ; 0xec -1002c714: f002 fa57 bl 1002ebc6 -1002c718: 782a ldrb r2, [r5, #0] -1002c71a: f89d 3008 ldrb.w r3, [sp, #8] -1002c71e: f107 0902 add.w r9, r7, #2 -1002c722: 429a cmp r2, r3 -1002c724: fa1f f989 uxth.w r9, r9 -1002c728: d10a bne.n 1002c740 -1002c72a: 786f ldrb r7, [r5, #1] -1002c72c: f89d 3009 ldrb.w r3, [sp, #9] -1002c730: 429f cmp r7, r3 -1002c732: bf0c ite eq -1002c734: 270f moveq r7, #15 -1002c736: 270e movne r7, #14 -1002c738: e003 b.n 1002c742 -1002c73a: 46b9 mov r9, r7 -1002c73c: 270f movs r7, #15 -1002c73e: e000 b.n 1002c742 -1002c740: 270e movs r7, #14 -1002c742: f00a 0302 and.w r3, sl, #2 -1002c746: f003 0cff and.w ip, r3, #255 ; 0xff -1002c74a: 2b00 cmp r3, #0 -1002c74c: d140 bne.n 1002c7d0 -1002c74e: f109 0b01 add.w fp, r9, #1 -1002c752: fa1f fb8b uxth.w fp, fp -1002c756: 4649 mov r1, r9 -1002c758: 78aa ldrb r2, [r5, #2] -1002c75a: 4633 mov r3, r6 -1002c75c: 4620 mov r0, r4 -1002c75e: f8cd c004 str.w ip, [sp, #4] -1002c762: f00a fe17 bl 10037394 -1002c766: 4659 mov r1, fp -1002c768: 78ea ldrb r2, [r5, #3] -1002c76a: 4633 mov r3, r6 -1002c76c: 4620 mov r0, r4 -1002c76e: f00a fe11 bl 10037394 -1002c772: f8dd c004 ldr.w ip, [sp, #4] -1002c776: 4620 mov r0, r4 -1002c778: 4663 mov r3, ip -1002c77a: 21ec movs r1, #236 ; 0xec -1002c77c: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1002c780: f002 fa21 bl 1002ebc6 -1002c784: 4649 mov r1, r9 -1002c786: f10d 020a add.w r2, sp, #10 -1002c78a: 4633 mov r3, r6 -1002c78c: 4620 mov r0, r4 -1002c78e: f00a fde7 bl 10037360 -1002c792: 4659 mov r1, fp -1002c794: f10d 020b add.w r2, sp, #11 -1002c798: 4633 mov r3, r6 -1002c79a: 4620 mov r0, r4 -1002c79c: f00a fde0 bl 10037360 -1002c7a0: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1002c7a4: 2301 movs r3, #1 -1002c7a6: 4620 mov r0, r4 -1002c7a8: 21ec movs r1, #236 ; 0xec -1002c7aa: f002 fa0c bl 1002ebc6 -1002c7ae: 78aa ldrb r2, [r5, #2] -1002c7b0: f89d 300a ldrb.w r3, [sp, #10] -1002c7b4: f109 0802 add.w r8, r9, #2 -1002c7b8: 429a cmp r2, r3 -1002c7ba: fa1f f888 uxth.w r8, r8 -1002c7be: d104 bne.n 1002c7ca -1002c7c0: 78ea ldrb r2, [r5, #3] -1002c7c2: f89d 300b ldrb.w r3, [sp, #11] -1002c7c6: 429a cmp r2, r3 -1002c7c8: d003 beq.n 1002c7d2 -1002c7ca: f007 07fd and.w r7, r7, #253 ; 0xfd -1002c7ce: e000 b.n 1002c7d2 -1002c7d0: 46c8 mov r8, r9 -1002c7d2: f00a 0304 and.w r3, sl, #4 -1002c7d6: f003 0cff and.w ip, r3, #255 ; 0xff -1002c7da: 2b00 cmp r3, #0 -1002c7dc: d13f bne.n 1002c85e -1002c7de: f108 0b01 add.w fp, r8, #1 -1002c7e2: fa1f fb8b uxth.w fp, fp -1002c7e6: 4641 mov r1, r8 -1002c7e8: 792a ldrb r2, [r5, #4] -1002c7ea: 4633 mov r3, r6 -1002c7ec: 4620 mov r0, r4 -1002c7ee: f8cd c004 str.w ip, [sp, #4] -1002c7f2: f00a fdcf bl 10037394 -1002c7f6: 4659 mov r1, fp -1002c7f8: 796a ldrb r2, [r5, #5] -1002c7fa: 4633 mov r3, r6 -1002c7fc: 4620 mov r0, r4 -1002c7fe: f00a fdc9 bl 10037394 -1002c802: f8dd c004 ldr.w ip, [sp, #4] -1002c806: 4620 mov r0, r4 -1002c808: 4663 mov r3, ip -1002c80a: 21ec movs r1, #236 ; 0xec -1002c80c: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1002c810: f002 f9d9 bl 1002ebc6 -1002c814: 4641 mov r1, r8 -1002c816: aa03 add r2, sp, #12 -1002c818: 4633 mov r3, r6 -1002c81a: 4620 mov r0, r4 -1002c81c: f00a fda0 bl 10037360 -1002c820: 4659 mov r1, fp -1002c822: f10d 020d add.w r2, sp, #13 -1002c826: 4633 mov r3, r6 -1002c828: 4620 mov r0, r4 -1002c82a: f00a fd99 bl 10037360 -1002c82e: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1002c832: 2301 movs r3, #1 -1002c834: 4620 mov r0, r4 -1002c836: 21ec movs r1, #236 ; 0xec -1002c838: f002 f9c5 bl 1002ebc6 -1002c83c: 792a ldrb r2, [r5, #4] -1002c83e: f89d 300c ldrb.w r3, [sp, #12] -1002c842: f108 0902 add.w r9, r8, #2 -1002c846: 429a cmp r2, r3 -1002c848: fa1f f989 uxth.w r9, r9 -1002c84c: d104 bne.n 1002c858 -1002c84e: 796a ldrb r2, [r5, #5] -1002c850: f89d 300d ldrb.w r3, [sp, #13] -1002c854: 429a cmp r2, r3 -1002c856: d003 beq.n 1002c860 -1002c858: f007 07fb and.w r7, r7, #251 ; 0xfb -1002c85c: e000 b.n 1002c860 -1002c85e: 46c1 mov r9, r8 -1002c860: f00a 0208 and.w r2, sl, #8 -1002c864: f002 0aff and.w sl, r2, #255 ; 0xff -1002c868: 2a00 cmp r2, #0 -1002c86a: d137 bne.n 1002c8dc -1002c86c: f109 0801 add.w r8, r9, #1 -1002c870: fa1f f888 uxth.w r8, r8 -1002c874: 4649 mov r1, r9 -1002c876: 79aa ldrb r2, [r5, #6] -1002c878: 4633 mov r3, r6 -1002c87a: 4620 mov r0, r4 -1002c87c: f00a fd8a bl 10037394 -1002c880: 4641 mov r1, r8 -1002c882: 79ea ldrb r2, [r5, #7] -1002c884: 4633 mov r3, r6 -1002c886: 4620 mov r0, r4 -1002c888: f00a fd84 bl 10037394 -1002c88c: 4620 mov r0, r4 -1002c88e: 21ec movs r1, #236 ; 0xec -1002c890: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1002c894: 4653 mov r3, sl -1002c896: f002 f996 bl 1002ebc6 -1002c89a: 4649 mov r1, r9 -1002c89c: f10d 020e add.w r2, sp, #14 -1002c8a0: 4633 mov r3, r6 -1002c8a2: 4620 mov r0, r4 -1002c8a4: f00a fd5c bl 10037360 -1002c8a8: 4641 mov r1, r8 -1002c8aa: f10d 020f add.w r2, sp, #15 -1002c8ae: 4633 mov r3, r6 -1002c8b0: 4620 mov r0, r4 -1002c8b2: f00a fd55 bl 10037360 -1002c8b6: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1002c8ba: 2301 movs r3, #1 -1002c8bc: 4620 mov r0, r4 -1002c8be: 21ec movs r1, #236 ; 0xec -1002c8c0: f002 f981 bl 1002ebc6 -1002c8c4: 79aa ldrb r2, [r5, #6] -1002c8c6: f89d 300e ldrb.w r3, [sp, #14] -1002c8ca: 429a cmp r2, r3 -1002c8cc: d104 bne.n 1002c8d8 -1002c8ce: 79ea ldrb r2, [r5, #7] -1002c8d0: f89d 300f ldrb.w r3, [sp, #15] -1002c8d4: 429a cmp r2, r3 -1002c8d6: d001 beq.n 1002c8dc -1002c8d8: f007 07f7 and.w r7, r7, #247 ; 0xf7 -1002c8dc: 4638 mov r0, r7 -1002c8de: b005 add sp, #20 -1002c8e0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -1002c8e4 : -1002c8e4: b508 push {r3, lr} -1002c8e6: 4608 mov r0, r1 -1002c8e8: 4b02 ldr r3, [pc, #8] ; (1002c8f4 ) -1002c8ea: 4611 mov r1, r2 -1002c8ec: 2207 movs r2, #7 -1002c8ee: 4798 blx r3 -1002c8f0: bd08 pop {r3, pc} -1002c8f2: bf00 nop -1002c8f4: 00006561 .word 0x00006561 - -1002c8f8 : -1002c8f8: b538 push {r3, r4, r5, lr} -1002c8fa: f241 64c8 movw r4, #5832 ; 0x16c8 -1002c8fe: 4605 mov r5, r0 -1002c900: 5900 ldr r0, [r0, r4] -1002c902: b128 cbz r0, 1002c910 -1002c904: f640 61b8 movw r1, #3768 ; 0xeb8 -1002c908: f7ea fd7d bl 10017406 -1002c90c: 2300 movs r3, #0 -1002c90e: 512b str r3, [r5, r4] -1002c910: bd38 pop {r3, r4, r5, pc} - -1002c912 : -1002c912: b538 push {r3, r4, r5, lr} -1002c914: f241 63c8 movw r3, #5832 ; 0x16c8 -1002c918: 58c5 ldr r5, [r0, r3] -1002c91a: 4604 mov r4, r0 -1002c91c: f895 21a5 ldrb.w r2, [r5, #421] ; 0x1a5 -1002c920: f240 4122 movw r1, #1058 ; 0x422 -1002c924: f002 02bf and.w r2, r2, #191 ; 0xbf -1002c928: f885 21a5 strb.w r2, [r5, #421] ; 0x1a5 -1002c92c: f00b f9ba bl 10037ca4 -1002c930: 4620 mov r0, r4 -1002c932: f240 5141 movw r1, #1345 ; 0x541 -1002c936: 2264 movs r2, #100 ; 0x64 -1002c938: f00b f9b4 bl 10037ca4 -1002c93c: f895 21a6 ldrb.w r2, [r5, #422] ; 0x1a6 -1002c940: 4620 mov r0, r4 -1002c942: f002 02fe and.w r2, r2, #254 ; 0xfe -1002c946: f885 21a6 strb.w r2, [r5, #422] ; 0x1a6 -1002c94a: f240 5142 movw r1, #1346 ; 0x542 -1002c94e: f00b f9a9 bl 10037ca4 -1002c952: 4620 mov r0, r4 -1002c954: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1002c958: f00e ba6a b.w 1003ae30 - -1002c95c : -1002c95c: b570 push {r4, r5, r6, lr} -1002c95e: 4616 mov r6, r2 -1002c960: f241 62c8 movw r2, #5832 ; 0x16c8 -1002c964: 5884 ldr r4, [r0, r2] -1002c966: 2901 cmp r1, #1 -1002c968: f504 7500 add.w r5, r4, #512 ; 0x200 -1002c96c: d020 beq.n 1002c9b0 -1002c96e: d302 bcc.n 1002c976 -1002c970: 2902 cmp r1, #2 -1002c972: d025 beq.n 1002c9c0 -1002c974: bd70 pop {r4, r5, r6, pc} -1002c976: f641 0169 movw r1, #6249 ; 0x1869 -1002c97a: 5c41 ldrb r1, [r0, r1] -1002c97c: b131 cbz r1, 1002c98c -1002c97e: f641 015c movw r1, #6236 ; 0x185c -1002c982: 5841 ldr r1, [r0, r1] -1002c984: b111 cbz r1, 1002c98c -1002c986: 588d ldr r5, [r1, r2] -1002c988: f505 7500 add.w r5, r5, #512 ; 0x200 -1002c98c: f8d6 2100 ldr.w r2, [r6, #256] ; 0x100 -1002c990: 4628 mov r0, r5 -1002c992: 2149 movs r1, #73 ; 0x49 -1002c994: b292 uxth r2, r2 -1002c996: b13b cbz r3, 1002c9a8 -1002c998: 4633 mov r3, r6 -1002c99a: f00c fadd bl 10038f58 -1002c99e: 4628 mov r0, r5 -1002c9a0: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1002c9a4: f00d bc95 b.w 1003a2d2 -1002c9a8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1002c9ac: f00c bad4 b.w 10038f58 -1002c9b0: 4628 mov r0, r5 -1002c9b2: e9d6 2300 ldrd r2, r3, [r6] -1002c9b6: 213d movs r1, #61 ; 0x3d -1002c9b8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1002c9bc: f00c bad4 b.w 10038f68 -1002c9c0: 4628 mov r0, r5 -1002c9c2: 2100 movs r1, #0 -1002c9c4: f00c fbba bl 1003913c -1002c9c8: 4d17 ldr r5, [pc, #92] ; (1002ca28 ) -1002c9ca: 4606 mov r6, r0 -1002c9cc: 682b ldr r3, [r5, #0] -1002c9ce: b11b cbz r3, 1002c9d8 -1002c9d0: 4b16 ldr r3, [pc, #88] ; (1002ca2c ) -1002c9d2: 6898 ldr r0, [r3, #8] -1002c9d4: f7ee f8c4 bl 1001ab60 -1002c9d8: 682b ldr r3, [r5, #0] -1002c9da: b14b cbz r3, 1002c9f0 -1002c9dc: 4b13 ldr r3, [pc, #76] ; (1002ca2c ) -1002c9de: f894 12b7 ldrb.w r1, [r4, #695] ; 0x2b7 -1002c9e2: 68d8 ldr r0, [r3, #12] -1002c9e4: f894 22b9 ldrb.w r2, [r4, #697] ; 0x2b9 -1002c9e8: f894 379c ldrb.w r3, [r4, #1948] ; 0x79c -1002c9ec: f7ee f8b8 bl 1001ab60 -1002c9f0: 682b ldr r3, [r5, #0] -1002c9f2: b133 cbz r3, 1002ca02 -1002c9f4: 4b0d ldr r3, [pc, #52] ; (1002ca2c ) -1002c9f6: 69b1 ldr r1, [r6, #24] -1002c9f8: 6918 ldr r0, [r3, #16] -1002c9fa: 6932 ldr r2, [r6, #16] -1002c9fc: 69f3 ldr r3, [r6, #28] -1002c9fe: f7ee f8af bl 1001ab60 -1002ca02: f894 32b7 ldrb.w r3, [r4, #695] ; 0x2b7 -1002ca06: b16b cbz r3, 1002ca24 -1002ca08: 682b ldr r3, [r5, #0] -1002ca0a: b15b cbz r3, 1002ca24 -1002ca0c: 4b07 ldr r3, [pc, #28] ; (1002ca2c ) -1002ca0e: f894 12ea ldrb.w r1, [r4, #746] ; 0x2ea -1002ca12: 6958 ldr r0, [r3, #20] -1002ca14: f894 22c3 ldrb.w r2, [r4, #707] ; 0x2c3 -1002ca18: f894 32c4 ldrb.w r3, [r4, #708] ; 0x2c4 -1002ca1c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1002ca20: f7ee b89e b.w 1001ab60 -1002ca24: bd70 pop {r4, r5, r6, pc} -1002ca26: bf00 nop -1002ca28: 10044ec0 .word 0x10044ec0 -1002ca2c: 10043a4c .word 0x10043a4c - -1002ca30 : -1002ca30: b537 push {r0, r1, r2, r4, r5, lr} -1002ca32: f241 63c8 movw r3, #5832 ; 0x16c8 -1002ca36: 58c5 ldr r5, [r0, r3] -1002ca38: 4b11 ldr r3, [pc, #68] ; (1002ca80 ) -1002ca3a: 4604 mov r4, r0 -1002ca3c: e88d 0018 stmia.w sp, {r3, r4} -1002ca40: f605 6028 addw r0, r5, #3624 ; 0xe28 -1002ca44: 490f ldr r1, [pc, #60] ; (1002ca84 ) -1002ca46: f44f 7200 mov.w r2, #512 ; 0x200 -1002ca4a: 2306 movs r3, #6 -1002ca4c: f7ea fede bl 1001780c -1002ca50: 4b0d ldr r3, [pc, #52] ; (1002ca88 ) -1002ca52: f605 6058 addw r0, r5, #3672 ; 0xe58 -1002ca56: e88d 0018 stmia.w sp, {r3, r4} -1002ca5a: 490c ldr r1, [pc, #48] ; (1002ca8c ) -1002ca5c: f44f 7280 mov.w r2, #256 ; 0x100 -1002ca60: 2301 movs r3, #1 -1002ca62: f7ea fed3 bl 1001780c -1002ca66: 4b0a ldr r3, [pc, #40] ; (1002ca90 ) -1002ca68: f505 6067 add.w r0, r5, #3696 ; 0xe70 -1002ca6c: e88d 0018 stmia.w sp, {r3, r4} -1002ca70: 4908 ldr r1, [pc, #32] ; (1002ca94 ) -1002ca72: f44f 7280 mov.w r2, #256 ; 0x100 -1002ca76: 2303 movs r3, #3 -1002ca78: f7ea fec8 bl 1001780c -1002ca7c: b003 add sp, #12 -1002ca7e: bd30 pop {r4, r5, pc} -1002ca80: 1002c53d .word 0x1002c53d -1002ca84: 100417b9 .word 0x100417b9 -1002ca88: 1002c595 .word 0x1002c595 -1002ca8c: 100417d4 .word 0x100417d4 -1002ca90: 1002c5e1 .word 0x1002c5e1 -1002ca94: 100417f2 .word 0x100417f2 - -1002ca98 : -1002ca98: b510 push {r4, lr} -1002ca9a: f241 63c8 movw r3, #5832 ; 0x16c8 -1002ca9e: 58c4 ldr r4, [r0, r3] -1002caa0: f604 6028 addw r0, r4, #3624 ; 0xe28 -1002caa4: f7ea fec0 bl 10017828 -1002caa8: f604 6058 addw r0, r4, #3672 ; 0xe58 -1002caac: f7ea febc bl 10017828 -1002cab0: f504 6067 add.w r0, r4, #3696 ; 0xe70 -1002cab4: e8bd 4010 ldmia.w sp!, {r4, lr} -1002cab8: f7ea beb6 b.w 10017828 - -1002cabc : -1002cabc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002cac0: 461f mov r7, r3 -1002cac2: 18d3 adds r3, r2, r3 -1002cac4: b089 sub sp, #36 ; 0x24 -1002cac6: f5b3 7f00 cmp.w r3, #512 ; 0x200 -1002caca: 4606 mov r6, r0 -1002cacc: 4693 mov fp, r2 -1002cace: f89d 504c ldrb.w r5, [sp, #76] ; 0x4c -1002cad2: f300 80a6 bgt.w 1002cc22 -1002cad6: f44f 7000 mov.w r0, #512 ; 0x200 -1002cada: f7ea fe59 bl 10017790 -1002cade: 4681 mov r9, r0 -1002cae0: 2800 cmp r0, #0 -1002cae2: f000 809e beq.w 1002cc22 -1002cae6: 21ff movs r1, #255 ; 0xff -1002cae8: f44f 7200 mov.w r2, #512 ; 0x200 -1002caec: f7ea fca0 bl 10017430 -1002caf0: b925 cbnz r5, 1002cafc -1002caf2: 4b4d ldr r3, [pc, #308] ; (1002cc28 ) -1002caf4: 681a ldr r2, [r3, #0] -1002caf6: f422 7240 bic.w r2, r2, #768 ; 0x300 -1002cafa: 601a str r2, [r3, #0] -1002cafc: 2400 movs r4, #0 -1002cafe: 4630 mov r0, r6 -1002cb00: 4621 mov r1, r4 -1002cb02: f10d 0219 add.w r2, sp, #25 -1002cb06: 462b mov r3, r5 -1002cb08: f00a fc2a bl 10037360 -1002cb0c: f89d 8019 ldrb.w r8, [sp, #25] -1002cb10: f104 0a01 add.w sl, r4, #1 -1002cb14: f1b8 0fff cmp.w r8, #255 ; 0xff -1002cb18: fa1f fa8a uxth.w sl, sl -1002cb1c: d05f beq.n 1002cbde -1002cb1e: f008 031f and.w r3, r8, #31 -1002cb22: 2b0f cmp r3, #15 -1002cb24: d118 bne.n 1002cb58 -1002cb26: 462b mov r3, r5 -1002cb28: 4630 mov r0, r6 -1002cb2a: 4651 mov r1, sl -1002cb2c: f10d 021a add.w r2, sp, #26 -1002cb30: f00a fc16 bl 10037360 -1002cb34: f89d 301a ldrb.w r3, [sp, #26] -1002cb38: 3402 adds r4, #2 -1002cb3a: f003 0c0f and.w ip, r3, #15 -1002cb3e: f1bc 0f0f cmp.w ip, #15 -1002cb42: b2a4 uxth r4, r4 -1002cb44: d048 beq.n 1002cbd8 -1002cb46: f003 03f0 and.w r3, r3, #240 ; 0xf0 -1002cb4a: ea4f 1858 mov.w r8, r8, lsr #5 -1002cb4e: ea48 0353 orr.w r3, r8, r3, lsr #1 -1002cb52: 2b3f cmp r3, #63 ; 0x3f -1002cb54: d83a bhi.n 1002cbcc -1002cb56: e004 b.n 1002cb62 -1002cb58: ea4f 1318 mov.w r3, r8, lsr #4 -1002cb5c: f008 0c0f and.w ip, r8, #15 -1002cb60: 4654 mov r4, sl -1002cb62: 00db lsls r3, r3, #3 -1002cb64: 9305 str r3, [sp, #20] -1002cb66: f04f 0800 mov.w r8, #0 -1002cb6a: 9905 ldr r1, [sp, #20] -1002cb6c: eb01 0348 add.w r3, r1, r8, lsl #1 -1002cb70: b29b uxth r3, r3 -1002cb72: 9304 str r3, [sp, #16] -1002cb74: fa4c f308 asr.w r3, ip, r8 -1002cb78: 07db lsls r3, r3, #31 -1002cb7a: d421 bmi.n 1002cbc0 -1002cb7c: 4621 mov r1, r4 -1002cb7e: f10d 021b add.w r2, sp, #27 -1002cb82: 462b mov r3, r5 -1002cb84: 4630 mov r0, r6 -1002cb86: f8cd c00c str.w ip, [sp, #12] -1002cb8a: f104 0a01 add.w sl, r4, #1 -1002cb8e: f00a fbe7 bl 10037360 -1002cb92: f89d 301b ldrb.w r3, [sp, #27] -1002cb96: 9a04 ldr r2, [sp, #16] -1002cb98: fa1f fa8a uxth.w sl, sl -1002cb9c: f809 3002 strb.w r3, [r9, r2] -1002cba0: 4630 mov r0, r6 -1002cba2: f10d 021b add.w r2, sp, #27 -1002cba6: 462b mov r3, r5 -1002cba8: 4651 mov r1, sl -1002cbaa: f00a fbd9 bl 10037360 -1002cbae: 9b04 ldr r3, [sp, #16] -1002cbb0: f89d 201b ldrb.w r2, [sp, #27] -1002cbb4: 444b add r3, r9 -1002cbb6: 705a strb r2, [r3, #1] -1002cbb8: 3402 adds r4, #2 -1002cbba: f8dd c00c ldr.w ip, [sp, #12] -1002cbbe: b2a4 uxth r4, r4 -1002cbc0: f108 0801 add.w r8, r8, #1 -1002cbc4: f1b8 0f04 cmp.w r8, #4 -1002cbc8: d1cf bne.n 1002cb6a -1002cbca: e005 b.n 1002cbd8 -1002cbcc: 4660 mov r0, ip -1002cbce: f00a fbab bl 10037328 -1002cbd2: eb04 0040 add.w r0, r4, r0, lsl #1 -1002cbd6: b284 uxth r4, r0 -1002cbd8: 2cff cmp r4, #255 ; 0xff -1002cbda: d990 bls.n 1002cafe -1002cbdc: 46a2 mov sl, r4 -1002cbde: 2300 movs r3, #0 -1002cbe0: b29a uxth r2, r3 -1002cbe2: 42ba cmp r2, r7 -1002cbe4: d206 bcs.n 1002cbf4 -1002cbe6: eb09 020b add.w r2, r9, fp -1002cbea: 5cd2 ldrb r2, [r2, r3] -1002cbec: 9912 ldr r1, [sp, #72] ; 0x48 -1002cbee: 54ca strb r2, [r1, r3] -1002cbf0: 3301 adds r3, #1 -1002cbf2: e7f5 b.n 1002cbe0 -1002cbf4: 9500 str r5, [sp, #0] -1002cbf6: 4630 mov r0, r6 -1002cbf8: 2100 movs r1, #0 -1002cbfa: 2203 movs r2, #3 -1002cbfc: ab07 add r3, sp, #28 -1002cbfe: f10a 3aff add.w sl, sl, #4294967295 -1002cc02: f00a fba3 bl 1003734c -1002cc06: f8ad a01e strh.w sl, [sp, #30] -1002cc0a: b92d cbnz r5, 1002cc18 -1002cc0c: 4630 mov r0, r6 -1002cc0e: 213b movs r1, #59 ; 0x3b -1002cc10: f10d 021e add.w r2, sp, #30 -1002cc14: f005 fc5d bl 100324d2 -1002cc18: 4648 mov r0, r9 -1002cc1a: f44f 7100 mov.w r1, #512 ; 0x200 -1002cc1e: f7ea fbf4 bl 1001740a -1002cc22: b009 add sp, #36 ; 0x24 -1002cc24: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1002cc28: 400000ec .word 0x400000ec - -1002cc2c : -1002cc2c: 2901 cmp r1, #1 -1002cc2e: d104 bne.n 1002cc3a -1002cc30: 4b02 ldr r3, [pc, #8] ; (1002cc3c ) -1002cc32: e9d3 0102 ldrd r0, r1, [r3, #8] -1002cc36: e9c2 0100 strd r0, r1, [r2] -1002cc3a: 4770 bx lr -1002cc3c: 10000720 .word 0x10000720 - -1002cc40 : -1002cc40: b570 push {r4, r5, r6, lr} -1002cc42: 4606 mov r6, r0 -1002cc44: b086 sub sp, #24 -1002cc46: 2001 movs r0, #1 -1002cc48: f7ea f80c bl 10016c64 -1002cc4c: 2202 movs r2, #2 -1002cc4e: f10d 0306 add.w r3, sp, #6 -1002cc52: a803 add r0, sp, #12 -1002cc54: f44f 4120 mov.w r1, #40960 ; 0xa000 -1002cc58: f7ea ffc0 bl 10017bdc -1002cc5c: f8bd 2006 ldrh.w r2, [sp, #6] -1002cc60: f248 1395 movw r3, #33173 ; 0x8195 -1002cc64: 429a cmp r2, r3 -1002cc66: d004 beq.n 1002cc72 -1002cc68: 2001 movs r0, #1 -1002cc6a: f7ea f815 bl 10016c98 -1002cc6e: 2000 movs r0, #0 -1002cc70: e034 b.n 1002ccdc -1002cc72: 2402 movs r4, #2 -1002cc74: ab02 add r3, sp, #8 -1002cc76: a803 add r0, sp, #12 -1002cc78: f504 4120 add.w r1, r4, #40960 ; 0xa000 -1002cc7c: 2202 movs r2, #2 -1002cc7e: f7ea ffad bl 10017bdc -1002cc82: f8bd 3008 ldrh.w r3, [sp, #8] -1002cc86: f64f 75ff movw r5, #65535 ; 0xffff -1002cc8a: 42ab cmp r3, r5 -1002cc8c: d104 bne.n 1002cc98 -1002cc8e: 2001 movs r0, #1 -1002cc90: f7ea f802 bl 10016c98 -1002cc94: 2001 movs r0, #1 -1002cc96: e021 b.n 1002ccdc -1002cc98: f504 4120 add.w r1, r4, #40960 ; 0xa000 -1002cc9c: 2202 movs r2, #2 -1002cc9e: a803 add r0, sp, #12 -1002cca0: 3102 adds r1, #2 -1002cca2: f10d 030a add.w r3, sp, #10 -1002cca6: f7ea ff99 bl 10017bdc -1002ccaa: f8bd 200a ldrh.w r2, [sp, #10] -1002ccae: 42aa cmp r2, r5 -1002ccb0: d0ed beq.n 1002cc8e -1002ccb2: f8bd 3008 ldrh.w r3, [sp, #8] -1002ccb6: 1899 adds r1, r3, r2 -1002ccb8: f5b1 5f80 cmp.w r1, #4096 ; 0x1000 -1002ccbc: dcd4 bgt.n 1002cc68 -1002ccbe: f504 4120 add.w r1, r4, #40960 ; 0xa000 -1002ccc2: 4433 add r3, r6 -1002ccc4: a803 add r0, sp, #12 -1002ccc6: 3104 adds r1, #4 -1002ccc8: f7ea ff88 bl 10017bdc -1002cccc: f8bd 300a ldrh.w r3, [sp, #10] -1002ccd0: 3304 adds r3, #4 -1002ccd2: 441c add r4, r3 -1002ccd4: f5b4 5f80 cmp.w r4, #4096 ; 0x1000 -1002ccd8: d3cc bcc.n 1002cc74 -1002ccda: e7d8 b.n 1002cc8e -1002ccdc: b006 add sp, #24 -1002ccde: bd70 pop {r4, r5, r6, pc} - -1002cce0 : -1002cce0: b51f push {r0, r1, r2, r3, r4, lr} -1002cce2: f241 63c8 movw r3, #5832 ; 0x16c8 -1002cce6: 58c3 ldr r3, [r0, r3] -1002cce8: f893 303e ldrb.w r3, [r3, #62] ; 0x3e -1002ccec: 2bfb cmp r3, #251 ; 0xfb -1002ccee: d015 beq.n 1002cd1c -1002ccf0: 2001 movs r0, #1 -1002ccf2: f7e9 ffb7 bl 10016c64 -1002ccf6: a801 add r0, sp, #4 -1002ccf8: f44f 4120 mov.w r1, #40960 ; 0xa000 -1002ccfc: f7ea ff26 bl 10017b4c -1002cd00: ab04 add r3, sp, #16 -1002cd02: f248 1295 movw r2, #33173 ; 0x8195 -1002cd06: f823 2d0e strh.w r2, [r3, #-14]! -1002cd0a: a801 add r0, sp, #4 -1002cd0c: f44f 4120 mov.w r1, #40960 ; 0xa000 -1002cd10: 2202 movs r2, #2 -1002cd12: f7ea ffcd bl 10017cb0 -1002cd16: 2001 movs r0, #1 -1002cd18: f7e9 ffbe bl 10016c98 -1002cd1c: b005 add sp, #20 -1002cd1e: f85d fb04 ldr.w pc, [sp], #4 - ... - -1002cd24 : -1002cd24: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1002cd28: b088 sub sp, #32 -1002cd2a: f89d 5040 ldrb.w r5, [sp, #64] ; 0x40 -1002cd2e: 2700 movs r7, #0 -1002cd30: 4699 mov r9, r3 -1002cd32: ab08 add r3, sp, #32 -1002cd34: f823 7d0c strh.w r7, [r3, #-12]! -1002cd38: 4604 mov r4, r0 -1002cd3a: 4690 mov r8, r2 -1002cd3c: 468a mov sl, r1 -1002cd3e: 2203 movs r2, #3 -1002cd40: 4639 mov r1, r7 -1002cd42: 9500 str r5, [sp, #0] -1002cd44: f00a fb02 bl 1003734c -1002cd48: 4620 mov r0, r4 -1002cd4a: 4639 mov r1, r7 -1002cd4c: 462a mov r2, r5 -1002cd4e: f00a fae5 bl 1003731c -1002cd52: 2604 movs r6, #4 -1002cd54: 4643 mov r3, r8 -1002cd56: 07da lsls r2, r3, #31 -1002cd58: f106 36ff add.w r6, r6, #4294967295 -1002cd5c: bf58 it pl -1002cd5e: 3702 addpl r7, #2 -1002cd60: b2b6 uxth r6, r6 -1002cd62: bf58 it pl -1002cd64: b2bf uxthpl r7, r7 -1002cd66: 085b lsrs r3, r3, #1 -1002cd68: 2e00 cmp r6, #0 -1002cd6a: d1f4 bne.n 1002cd56 -1002cd6c: 3702 adds r7, #2 -1002cd6e: b2bf uxth r7, r7 -1002cd70: f8bd 3014 ldrh.w r3, [sp, #20] -1002cd74: 4438 add r0, r7 -1002cd76: 4298 cmp r0, r3 -1002cd78: db03 blt.n 1002cd82 -1002cd7a: 4888 ldr r0, [pc, #544] ; (1002cf9c ) -1002cd7c: f7ed fef0 bl 1001ab60 -1002cd80: e042 b.n 1002ce08 -1002cd82: f10d 0016 add.w r0, sp, #22 -1002cd86: 21ff movs r1, #255 ; 0xff -1002cd88: 2208 movs r2, #8 -1002cd8a: f7ea fb51 bl 10017430 -1002cd8e: 4649 mov r1, r9 -1002cd90: f10d 0216 add.w r2, sp, #22 -1002cd94: 4640 mov r0, r8 -1002cd96: f88d a014 strb.w sl, [sp, #20] -1002cd9a: f88d 8015 strb.w r8, [sp, #21] -1002cd9e: f00a fb1d bl 100373dc -1002cda2: f89d 0015 ldrb.w r0, [sp, #21] -1002cda6: f00a fabf bl 10037328 -1002cdaa: 4631 mov r1, r6 -1002cdac: f88d 001e strb.w r0, [sp, #30] -1002cdb0: 2203 movs r2, #3 -1002cdb2: 4620 mov r0, r4 -1002cdb4: ab04 add r3, sp, #16 -1002cdb6: 9500 str r5, [sp, #0] -1002cdb8: f8ad 600e strh.w r6, [sp, #14] -1002cdbc: f8ad 6010 strh.w r6, [sp, #16] -1002cdc0: f8ad 6012 strh.w r6, [sp, #18] -1002cdc4: f88d 600d strb.w r6, [sp, #13] -1002cdc8: f00a fac0 bl 1003734c -1002cdcc: 9500 str r5, [sp, #0] -1002cdce: 4620 mov r0, r4 -1002cdd0: 4631 mov r1, r6 -1002cdd2: 2206 movs r2, #6 -1002cdd4: f10d 0312 add.w r3, sp, #18 -1002cdd8: f00a fab8 bl 1003734c -1002cddc: b92d cbnz r5, 1002cdea -1002cdde: 4620 mov r0, r4 -1002cde0: 213b movs r1, #59 ; 0x3b -1002cde2: f10d 020e add.w r2, sp, #14 -1002cde6: f005 fb7b bl 100324e0 -1002cdea: f8bd 200e ldrh.w r2, [sp, #14] -1002cdee: f8bd 3012 ldrh.w r3, [sp, #18] -1002cdf2: fbb2 f1f3 udiv r1, r2, r3 -1002cdf6: fb03 2111 mls r1, r3, r1, r2 -1002cdfa: f8bd 3010 ldrh.w r3, [sp, #16] -1002cdfe: b289 uxth r1, r1 -1002ce00: 428b cmp r3, r1 -1002ce02: f8ad 100e strh.w r1, [sp, #14] -1002ce06: d801 bhi.n 1002ce0c -1002ce08: 2000 movs r0, #0 -1002ce0a: e0c4 b.n 1002cf96 -1002ce0c: 4620 mov r0, r4 -1002ce0e: f10d 020d add.w r2, sp, #13 -1002ce12: 462b mov r3, r5 -1002ce14: f00a faa4 bl 10037360 -1002ce18: b118 cbz r0, 1002ce22 -1002ce1a: f89d 300d ldrb.w r3, [sp, #13] -1002ce1e: 2bff cmp r3, #255 ; 0xff -1002ce20: d1f2 bne.n 1002ce08 -1002ce22: f89d 3014 ldrb.w r3, [sp, #20] -1002ce26: f8bd 600e ldrh.w r6, [sp, #14] -1002ce2a: 2b0f cmp r3, #15 -1002ce2c: f04f 0700 mov.w r7, #0 -1002ce30: d96b bls.n 1002cf0a -1002ce32: f10d 0312 add.w r3, sp, #18 -1002ce36: 9500 str r5, [sp, #0] -1002ce38: 4620 mov r0, r4 -1002ce3a: 4639 mov r1, r7 -1002ce3c: 2202 movs r2, #2 -1002ce3e: f8ad 7012 strh.w r7, [sp, #18] -1002ce42: f88d 7010 strb.w r7, [sp, #16] -1002ce46: f00a fa81 bl 1003734c -1002ce4a: f8bd 3012 ldrh.w r3, [sp, #18] -1002ce4e: 42b3 cmp r3, r6 -1002ce50: d9da bls.n 1002ce08 -1002ce52: f89d 9014 ldrb.w r9, [sp, #20] -1002ce56: ea4f 1949 mov.w r9, r9, lsl #5 -1002ce5a: f049 090f orr.w r9, r9, #15 -1002ce5e: fa5f f989 uxtb.w r9, r9 -1002ce62: 4631 mov r1, r6 -1002ce64: 464a mov r2, r9 -1002ce66: 462b mov r3, r5 -1002ce68: 4620 mov r0, r4 -1002ce6a: f00a fa93 bl 10037394 -1002ce6e: 4620 mov r0, r4 -1002ce70: 21ec movs r1, #236 ; 0xec -1002ce72: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1002ce76: 2300 movs r3, #0 -1002ce78: f001 fea5 bl 1002ebc6 -1002ce7c: 4631 mov r1, r6 -1002ce7e: aa04 add r2, sp, #16 -1002ce80: 462b mov r3, r5 -1002ce82: 4620 mov r0, r4 -1002ce84: f00a fa6c bl 10037360 -1002ce88: 2301 movs r3, #1 -1002ce8a: 4620 mov r0, r4 -1002ce8c: 21ec movs r1, #236 ; 0xec -1002ce8e: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1002ce92: f001 fe98 bl 1002ebc6 -1002ce96: f89d 3010 ldrb.w r3, [sp, #16] -1002ce9a: fa5f f887 uxtb.w r8, r7 -1002ce9e: 454b cmp r3, r9 -1002cea0: d003 beq.n 1002ceaa -1002cea2: 3701 adds r7, #1 -1002cea4: 2f05 cmp r7, #5 -1002cea6: d1dc bne.n 1002ce62 -1002cea8: e7ae b.n 1002ce08 -1002ceaa: f89d 7014 ldrb.w r7, [sp, #20] -1002ceae: f89d 3015 ldrb.w r3, [sp, #21] -1002ceb2: 3601 adds r6, #1 -1002ceb4: f007 0778 and.w r7, r7, #120 ; 0x78 -1002ceb8: b2b6 uxth r6, r6 -1002ceba: ea43 0747 orr.w r7, r3, r7, lsl #1 -1002cebe: 4631 mov r1, r6 -1002cec0: 463a mov r2, r7 -1002cec2: 462b mov r3, r5 -1002cec4: 4620 mov r0, r4 -1002cec6: f00a fa65 bl 10037394 -1002ceca: 4620 mov r0, r4 -1002cecc: 21ec movs r1, #236 ; 0xec -1002cece: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1002ced2: 2300 movs r3, #0 -1002ced4: f001 fe77 bl 1002ebc6 -1002ced8: 4631 mov r1, r6 -1002ceda: aa04 add r2, sp, #16 -1002cedc: 462b mov r3, r5 -1002cede: 4620 mov r0, r4 -1002cee0: f00a fa3e bl 10037360 -1002cee4: 2301 movs r3, #1 -1002cee6: 4620 mov r0, r4 -1002cee8: 21ec movs r1, #236 ; 0xec -1002ceea: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1002ceee: f001 fe6a bl 1002ebc6 -1002cef2: f89d 3010 ldrb.w r3, [sp, #16] -1002cef6: 42bb cmp r3, r7 -1002cef8: d034 beq.n 1002cf64 -1002cefa: f108 0301 add.w r3, r8, #1 -1002cefe: f1b8 0f03 cmp.w r8, #3 -1002cf02: b2db uxtb r3, r3 -1002cf04: d880 bhi.n 1002ce08 -1002cf06: 4698 mov r8, r3 -1002cf08: e7d9 b.n 1002cebe -1002cf0a: f89d 8015 ldrb.w r8, [sp, #21] -1002cf0e: f88d 7012 strb.w r7, [sp, #18] -1002cf12: ea48 1803 orr.w r8, r8, r3, lsl #4 -1002cf16: fa5f f888 uxtb.w r8, r8 -1002cf1a: 2705 movs r7, #5 -1002cf1c: 4631 mov r1, r6 -1002cf1e: 4642 mov r2, r8 -1002cf20: 462b mov r3, r5 -1002cf22: 4620 mov r0, r4 -1002cf24: f00a fa36 bl 10037394 -1002cf28: 4620 mov r0, r4 -1002cf2a: 21ec movs r1, #236 ; 0xec -1002cf2c: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1002cf30: 2300 movs r3, #0 -1002cf32: f001 fe48 bl 1002ebc6 -1002cf36: 4631 mov r1, r6 -1002cf38: f10d 0212 add.w r2, sp, #18 -1002cf3c: 462b mov r3, r5 -1002cf3e: 4620 mov r0, r4 -1002cf40: f00a fa0e bl 10037360 -1002cf44: 2301 movs r3, #1 -1002cf46: 4620 mov r0, r4 -1002cf48: 21ec movs r1, #236 ; 0xec -1002cf4a: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1002cf4e: f001 fe3a bl 1002ebc6 -1002cf52: f89d 3012 ldrb.w r3, [sp, #18] -1002cf56: 4543 cmp r3, r8 -1002cf58: d004 beq.n 1002cf64 -1002cf5a: 3f01 subs r7, #1 -1002cf5c: f017 07ff ands.w r7, r7, #255 ; 0xff -1002cf60: d1dc bne.n 1002cf1c -1002cf62: e751 b.n 1002ce08 -1002cf64: 1c71 adds r1, r6, #1 -1002cf66: f89d 2015 ldrb.w r2, [sp, #21] -1002cf6a: 9500 str r5, [sp, #0] -1002cf6c: 4620 mov r0, r4 -1002cf6e: b289 uxth r1, r1 -1002cf70: f10d 0316 add.w r3, sp, #22 -1002cf74: f00a fa4b bl 1003740e -1002cf78: 280f cmp r0, #15 -1002cf7a: 4602 mov r2, r0 -1002cf7c: d00a beq.n 1002cf94 -1002cf7e: f89d 1014 ldrb.w r1, [sp, #20] -1002cf82: 9500 str r5, [sp, #0] -1002cf84: 4620 mov r0, r4 -1002cf86: f10d 0316 add.w r3, sp, #22 -1002cf8a: f00a fa1d bl 100373c8 -1002cf8e: 2800 cmp r0, #0 -1002cf90: f43f af3a beq.w 1002ce08 -1002cf94: 2001 movs r0, #1 -1002cf96: b008 add sp, #32 -1002cf98: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1002cf9c: 1004180f .word 0x1004180f - -1002cfa0 : -1002cfa0: b5f0 push {r4, r5, r6, r7, lr} -1002cfa2: 2300 movs r3, #0 -1002cfa4: b085 sub sp, #20 -1002cfa6: 4605 mov r5, r0 -1002cfa8: f8ad 300e strh.w r3, [sp, #14] -1002cfac: 4614 mov r4, r2 -1002cfae: b922 cbnz r2, 1002cfba -1002cfb0: 213b movs r1, #59 ; 0x3b -1002cfb2: f10d 020e add.w r2, sp, #14 -1002cfb6: f005 fa93 bl 100324e0 -1002cfba: f8bd 600e ldrh.w r6, [sp, #14] -1002cfbe: b924 cbnz r4, 1002cfca -1002cfc0: 4b2e ldr r3, [pc, #184] ; (1002d07c ) -1002cfc2: 681a ldr r2, [r3, #0] -1002cfc4: f422 7240 bic.w r2, r2, #768 ; 0x300 -1002cfc8: 601a str r2, [r3, #0] -1002cfca: 2700 movs r7, #0 -1002cfcc: f8bd 100e ldrh.w r1, [sp, #14] -1002cfd0: 29ff cmp r1, #255 ; 0xff -1002cfd2: d80b bhi.n 1002cfec -1002cfd4: 4628 mov r0, r5 -1002cfd6: f10d 020d add.w r2, sp, #13 -1002cfda: 4623 mov r3, r4 -1002cfdc: f00a f9c0 bl 10037360 -1002cfe0: 2800 cmp r0, #0 -1002cfe2: d03f beq.n 1002d064 -1002cfe4: f89d 000d ldrb.w r0, [sp, #13] -1002cfe8: 28ff cmp r0, #255 ; 0xff -1002cfea: d108 bne.n 1002cffe -1002cfec: 2c00 cmp r4, #0 -1002cfee: d141 bne.n 1002d074 -1002cff0: 4628 mov r0, r5 -1002cff2: 213b movs r1, #59 ; 0x3b -1002cff4: f10d 020e add.w r2, sp, #14 -1002cff8: f005 fa6b bl 100324d2 -1002cffc: e03a b.n 1002d074 -1002cffe: b176 cbz r6, 1002d01e -1002d000: f8bd 300e ldrh.w r3, [sp, #14] -1002d004: 42b3 cmp r3, r6 -1002d006: d10a bne.n 1002d01e -1002d008: 3701 adds r7, #1 -1002d00a: 23ff movs r3, #255 ; 0xff -1002d00c: 2f03 cmp r7, #3 -1002d00e: f88d 300d strb.w r3, [sp, #13] -1002d012: d827 bhi.n 1002d064 -1002d014: d1da bne.n 1002cfcc -1002d016: 2600 movs r6, #0 -1002d018: f8ad 600e strh.w r6, [sp, #14] -1002d01c: e7d6 b.n 1002cfcc -1002d01e: f000 031f and.w r3, r0, #31 -1002d022: 2b0f cmp r3, #15 -1002d024: d112 bne.n 1002d04c -1002d026: f8bd 100e ldrh.w r1, [sp, #14] -1002d02a: 4628 mov r0, r5 -1002d02c: 3101 adds r1, #1 -1002d02e: b289 uxth r1, r1 -1002d030: f10d 020d add.w r2, sp, #13 -1002d034: 4623 mov r3, r4 -1002d036: f8ad 100e strh.w r1, [sp, #14] -1002d03a: f00a f991 bl 10037360 -1002d03e: f89d 000d ldrb.w r0, [sp, #13] -1002d042: f000 000f and.w r0, r0, #15 -1002d046: 280f cmp r0, #15 -1002d048: d102 bne.n 1002d050 -1002d04a: e7bf b.n 1002cfcc -1002d04c: f000 000f and.w r0, r0, #15 -1002d050: f00a f96a bl 10037328 -1002d054: f8bd 300e ldrh.w r3, [sp, #14] -1002d058: 3301 adds r3, #1 -1002d05a: eb03 0040 add.w r0, r3, r0, lsl #1 -1002d05e: f8ad 000e strh.w r0, [sp, #14] -1002d062: e7b3 b.n 1002cfcc -1002d064: 9400 str r4, [sp, #0] -1002d066: 4628 mov r0, r5 -1002d068: 2100 movs r1, #0 -1002d06a: 2203 movs r2, #3 -1002d06c: f10d 030e add.w r3, sp, #14 -1002d070: f00a f96c bl 1003734c -1002d074: f8bd 000e ldrh.w r0, [sp, #14] -1002d078: b005 add sp, #20 -1002d07a: bdf0 pop {r4, r5, r6, r7, pc} -1002d07c: 400000ec .word 0x400000ec - -1002d080 : -1002d080: b5f0 push {r4, r5, r6, r7, lr} -1002d082: 461f mov r7, r3 -1002d084: f241 63c8 movw r3, #5832 ; 0x16c8 -1002d088: 58c3 ldr r3, [r0, r3] -1002d08a: b089 sub sp, #36 ; 0x24 -1002d08c: f893 303e ldrb.w r3, [r3, #62] ; 0x3e -1002d090: 4605 mov r5, r0 -1002d092: 2bfb cmp r3, #251 ; 0xfb -1002d094: f8ad 1006 strh.w r1, [sp, #6] -1002d098: f8ad 2004 strh.w r2, [sp, #4] -1002d09c: d101 bne.n 1002d0a2 -1002d09e: 2000 movs r0, #0 -1002d0a0: e0d3 b.n 1002d24a -1002d0a2: f8bd 2006 ldrh.w r2, [sp, #6] -1002d0a6: f8bd 3004 ldrh.w r3, [sp, #4] -1002d0aa: 4413 add r3, r2 -1002d0ac: f5b3 5f80 cmp.w r3, #4096 ; 0x1000 -1002d0b0: dcf5 bgt.n 1002d09e -1002d0b2: 2001 movs r0, #1 -1002d0b4: f7e9 fdd6 bl 10016c64 -1002d0b8: 2202 movs r2, #2 -1002d0ba: f10d 030e add.w r3, sp, #14 -1002d0be: f44f 4120 mov.w r1, #40960 ; 0xa000 -1002d0c2: a805 add r0, sp, #20 -1002d0c4: f7ea fd8a bl 10017bdc -1002d0c8: 2001 movs r0, #1 -1002d0ca: f7e9 fde5 bl 10016c98 -1002d0ce: f8bd 200e ldrh.w r2, [sp, #14] -1002d0d2: f248 1395 movw r3, #33173 ; 0x8195 -1002d0d6: 429a cmp r2, r3 -1002d0d8: d002 beq.n 1002d0e0 -1002d0da: 4628 mov r0, r5 -1002d0dc: f7ff fe00 bl 1002cce0 -1002d0e0: 2001 movs r0, #1 -1002d0e2: f7e9 fdbf bl 10016c64 -1002d0e6: 2202 movs r2, #2 -1002d0e8: ab04 add r3, sp, #16 -1002d0ea: a805 add r0, sp, #20 -1002d0ec: f24a 0102 movw r1, #40962 ; 0xa002 -1002d0f0: f7ea fd74 bl 10017bdc -1002d0f4: f8bd 2010 ldrh.w r2, [sp, #16] -1002d0f8: f64f 73ff movw r3, #65535 ; 0xffff -1002d0fc: 429a cmp r2, r3 -1002d0fe: f04f 0402 mov.w r4, #2 -1002d102: d013 beq.n 1002d12c -1002d104: f504 4120 add.w r1, r4, #40960 ; 0xa000 -1002d108: 2202 movs r2, #2 -1002d10a: f10d 0312 add.w r3, sp, #18 -1002d10e: a805 add r0, sp, #20 -1002d110: 3102 adds r1, #2 -1002d112: f7ea fd63 bl 10017bdc -1002d116: f8bd 2012 ldrh.w r2, [sp, #18] -1002d11a: f64f 73ff movw r3, #65535 ; 0xffff -1002d11e: 429a cmp r2, r3 -1002d120: d004 beq.n 1002d12c -1002d122: 3204 adds r2, #4 -1002d124: 4414 add r4, r2 -1002d126: f5b4 5f80 cmp.w r4, #4096 ; 0x1000 -1002d12a: d3eb bcc.n 1002d104 -1002d12c: 2001 movs r0, #1 -1002d12e: f7e9 fdb3 bl 10016c98 -1002d132: f8bd 3004 ldrh.w r3, [sp, #4] -1002d136: 3304 adds r3, #4 -1002d138: 4423 add r3, r4 -1002d13a: f5b3 5f80 cmp.w r3, #4096 ; 0x1000 -1002d13e: d964 bls.n 1002d20a -1002d140: f44f 7000 mov.w r0, #512 ; 0x200 -1002d144: f7ea fb34 bl 100177b0 -1002d148: 21ff movs r1, #255 ; 0xff -1002d14a: 4606 mov r6, r0 -1002d14c: f44f 7200 mov.w r2, #512 ; 0x200 -1002d150: f7ea f96e bl 10017430 -1002d154: 2e00 cmp r6, #0 -1002d156: d0a2 beq.n 1002d09e -1002d158: f241 63c8 movw r3, #5832 ; 0x16c8 -1002d15c: 58eb ldr r3, [r5, r3] -1002d15e: f893 303e ldrb.w r3, [r3, #62] ; 0x3e -1002d162: 2bfb cmp r3, #251 ; 0xfb -1002d164: d104 bne.n 1002d170 -1002d166: 4628 mov r0, r5 -1002d168: f7ff fdba bl 1002cce0 -1002d16c: 2402 movs r4, #2 -1002d16e: e047 b.n 1002d200 -1002d170: 4630 mov r0, r6 -1002d172: f7ff fd65 bl 1002cc40 -1002d176: 2800 cmp r0, #0 -1002d178: d0f5 beq.n 1002d166 -1002d17a: 4628 mov r0, r5 -1002d17c: f7ff fdb0 bl 1002cce0 -1002d180: 2402 movs r4, #2 -1002d182: 2500 movs r5, #0 -1002d184: 5d73 ldrb r3, [r6, r5] -1002d186: 2bff cmp r3, #255 ; 0xff -1002d188: d035 beq.n 1002d1f6 -1002d18a: 2301 movs r3, #1 -1002d18c: f8ad 5010 strh.w r5, [sp, #16] -1002d190: f8ad 3012 strh.w r3, [sp, #18] -1002d194: 1c6a adds r2, r5, #1 -1002d196: b292 uxth r2, r2 -1002d198: 5cb3 ldrb r3, [r6, r2] -1002d19a: 2bff cmp r3, #255 ; 0xff -1002d19c: d006 beq.n 1002d1ac -1002d19e: f8bd 3012 ldrh.w r3, [sp, #18] -1002d1a2: 4615 mov r5, r2 -1002d1a4: 3301 adds r3, #1 -1002d1a6: f8ad 3012 strh.w r3, [sp, #18] -1002d1aa: e7f3 b.n 1002d194 -1002d1ac: 2001 movs r0, #1 -1002d1ae: f7e9 fd59 bl 10016c64 -1002d1b2: f504 4120 add.w r1, r4, #40960 ; 0xa000 -1002d1b6: 2202 movs r2, #2 -1002d1b8: ab04 add r3, sp, #16 -1002d1ba: a805 add r0, sp, #20 -1002d1bc: f7ea fd78 bl 10017cb0 -1002d1c0: f504 4120 add.w r1, r4, #40960 ; 0xa000 -1002d1c4: 3102 adds r1, #2 -1002d1c6: 2202 movs r2, #2 -1002d1c8: f10d 0312 add.w r3, sp, #18 -1002d1cc: a805 add r0, sp, #20 -1002d1ce: f7ea fd6f bl 10017cb0 -1002d1d2: f8bd 3010 ldrh.w r3, [sp, #16] -1002d1d6: f504 4120 add.w r1, r4, #40960 ; 0xa000 -1002d1da: 4433 add r3, r6 -1002d1dc: 3104 adds r1, #4 -1002d1de: f8bd 2012 ldrh.w r2, [sp, #18] -1002d1e2: a805 add r0, sp, #20 -1002d1e4: f7ea fd64 bl 10017cb0 -1002d1e8: 2001 movs r0, #1 -1002d1ea: f7e9 fd55 bl 10016c98 -1002d1ee: f8bd 3012 ldrh.w r3, [sp, #18] -1002d1f2: 3304 adds r3, #4 -1002d1f4: 441c add r4, r3 -1002d1f6: 3501 adds r5, #1 -1002d1f8: b2ad uxth r5, r5 -1002d1fa: f5b5 7f00 cmp.w r5, #512 ; 0x200 -1002d1fe: d3c1 bcc.n 1002d184 -1002d200: 4630 mov r0, r6 -1002d202: f44f 7100 mov.w r1, #512 ; 0x200 -1002d206: f7ea f900 bl 1001740a -1002d20a: 2001 movs r0, #1 -1002d20c: f7e9 fd2a bl 10016c64 -1002d210: f504 4120 add.w r1, r4, #40960 ; 0xa000 -1002d214: 2202 movs r2, #2 -1002d216: f10d 0306 add.w r3, sp, #6 -1002d21a: a805 add r0, sp, #20 -1002d21c: f7ea fd48 bl 10017cb0 -1002d220: f504 4120 add.w r1, r4, #40960 ; 0xa000 -1002d224: 3102 adds r1, #2 -1002d226: 2202 movs r2, #2 -1002d228: ab01 add r3, sp, #4 -1002d22a: a805 add r0, sp, #20 -1002d22c: f7ea fd40 bl 10017cb0 -1002d230: f504 4120 add.w r1, r4, #40960 ; 0xa000 -1002d234: 3104 adds r1, #4 -1002d236: f8bd 2004 ldrh.w r2, [sp, #4] -1002d23a: 463b mov r3, r7 -1002d23c: a805 add r0, sp, #20 -1002d23e: f7ea fd37 bl 10017cb0 -1002d242: 2001 movs r0, #1 -1002d244: f7e9 fd28 bl 10016c98 -1002d248: 2001 movs r0, #1 -1002d24a: b009 add sp, #36 ; 0x24 -1002d24c: bdf0 pop {r4, r5, r6, r7, pc} - -1002d24e : -1002d24e: b538 push {r3, r4, r5, lr} -1002d250: f44f 61aa mov.w r1, #1360 ; 0x550 -1002d254: f241 63c8 movw r3, #5832 ; 0x16c8 -1002d258: 4604 mov r4, r0 -1002d25a: f241 0210 movw r2, #4112 ; 0x1010 -1002d25e: 58c5 ldr r5, [r0, r3] -1002d260: f00a fd27 bl 10037cb2 -1002d264: 4620 mov r0, r4 -1002d266: f44f 61a8 mov.w r1, #1344 ; 0x540 -1002d26a: f246 4204 movw r2, #25604 ; 0x6404 -1002d26e: f00a fd20 bl 10037cb2 -1002d272: 6923 ldr r3, [r4, #16] -1002d274: 071b lsls r3, r3, #28 -1002d276: d51b bpl.n 1002d2b0 -1002d278: f240 5159 movw r1, #1369 ; 0x559 -1002d27c: 2202 movs r2, #2 -1002d27e: 4620 mov r0, r4 -1002d280: f00a fd10 bl 10037ca4 -1002d284: f246 620f movw r2, #26127 ; 0x660f -1002d288: f44f 61a2 mov.w r1, #1296 ; 0x510 -1002d28c: 4620 mov r0, r4 -1002d28e: f00a fd10 bl 10037cb2 -1002d292: f240 4122 movw r1, #1058 ; 0x422 -1002d296: 4620 mov r0, r4 -1002d298: f00a fcef bl 10037c7a -1002d29c: f240 5142 movw r1, #1346 ; 0x542 -1002d2a0: f885 01a5 strb.w r0, [r5, #421] ; 0x1a5 -1002d2a4: 4620 mov r0, r4 -1002d2a6: f00a fce8 bl 10037c7a -1002d2aa: f885 01a6 strb.w r0, [r5, #422] ; 0x1a6 -1002d2ae: bd38 pop {r3, r4, r5, pc} -1002d2b0: 4620 mov r0, r4 -1002d2b2: f44f 61ab mov.w r1, #1368 ; 0x558 -1002d2b6: 2205 movs r2, #5 -1002d2b8: f00a fcf4 bl 10037ca4 -1002d2bc: e7dc b.n 1002d278 - -1002d2be <_InitBurstPktLen_8195AB>: -1002d2be: f240 610c movw r1, #1548 ; 0x60c -1002d2c2: 2204 movs r2, #4 -1002d2c4: f00a bcee b.w 10037ca4 - -1002d2c8 : -1002d2c8: 4b20 ldr r3, [pc, #128] ; (1002d34c ) -1002d2ca: 60c3 str r3, [r0, #12] -1002d2cc: 4b20 ldr r3, [pc, #128] ; (1002d350 ) -1002d2ce: 6383 str r3, [r0, #56] ; 0x38 -1002d2d0: 4b20 ldr r3, [pc, #128] ; (1002d354 ) -1002d2d2: 63c3 str r3, [r0, #60] ; 0x3c -1002d2d4: 4b20 ldr r3, [pc, #128] ; (1002d358 ) -1002d2d6: 66c3 str r3, [r0, #108] ; 0x6c -1002d2d8: 4b20 ldr r3, [pc, #128] ; (1002d35c ) -1002d2da: f8c0 308c str.w r3, [r0, #140] ; 0x8c -1002d2de: 4b20 ldr r3, [pc, #128] ; (1002d360 ) -1002d2e0: 6403 str r3, [r0, #64] ; 0x40 -1002d2e2: 4b20 ldr r3, [pc, #128] ; (1002d364 ) -1002d2e4: f8c0 3088 str.w r3, [r0, #136] ; 0x88 -1002d2e8: 4b1f ldr r3, [pc, #124] ; (1002d368 ) -1002d2ea: 6603 str r3, [r0, #96] ; 0x60 -1002d2ec: 4b1f ldr r3, [pc, #124] ; (1002d36c ) -1002d2ee: 6643 str r3, [r0, #100] ; 0x64 -1002d2f0: 4b1f ldr r3, [pc, #124] ; (1002d370 ) -1002d2f2: 6683 str r3, [r0, #104] ; 0x68 -1002d2f4: 4b1f ldr r3, [pc, #124] ; (1002d374 ) -1002d2f6: f8c0 30a4 str.w r3, [r0, #164] ; 0xa4 -1002d2fa: 4b1f ldr r3, [pc, #124] ; (1002d378 ) -1002d2fc: f8c0 30a8 str.w r3, [r0, #168] ; 0xa8 -1002d300: 4b1e ldr r3, [pc, #120] ; (1002d37c ) -1002d302: f8c0 30ac str.w r3, [r0, #172] ; 0xac -1002d306: 4b1e ldr r3, [pc, #120] ; (1002d380 ) -1002d308: f8c0 30b0 str.w r3, [r0, #176] ; 0xb0 -1002d30c: 4b1d ldr r3, [pc, #116] ; (1002d384 ) -1002d30e: f8c0 3094 str.w r3, [r0, #148] ; 0x94 -1002d312: 4b1d ldr r3, [pc, #116] ; (1002d388 ) -1002d314: f8c0 3098 str.w r3, [r0, #152] ; 0x98 -1002d318: 4b1c ldr r3, [pc, #112] ; (1002d38c ) -1002d31a: f8c0 30b4 str.w r3, [r0, #180] ; 0xb4 -1002d31e: 4b1c ldr r3, [pc, #112] ; (1002d390 ) -1002d320: f8c0 30b8 str.w r3, [r0, #184] ; 0xb8 -1002d324: 4b1b ldr r3, [pc, #108] ; (1002d394 ) -1002d326: f8c0 30bc str.w r3, [r0, #188] ; 0xbc -1002d32a: 4b1b ldr r3, [pc, #108] ; (1002d398 ) -1002d32c: f8c0 30c0 str.w r3, [r0, #192] ; 0xc0 -1002d330: 4b1a ldr r3, [pc, #104] ; (1002d39c ) -1002d332: f8c0 30c4 str.w r3, [r0, #196] ; 0xc4 -1002d336: 4b1a ldr r3, [pc, #104] ; (1002d3a0 ) -1002d338: f8c0 30c8 str.w r3, [r0, #200] ; 0xc8 -1002d33c: 4b19 ldr r3, [pc, #100] ; (1002d3a4 ) -1002d33e: f8c0 3080 str.w r3, [r0, #128] ; 0x80 -1002d342: 4b19 ldr r3, [pc, #100] ; (1002d3a8 ) -1002d344: f8c0 3084 str.w r3, [r0, #132] ; 0x84 -1002d348: 4770 bx lr -1002d34a: bf00 nop -1002d34c: 1002c8f9 .word 0x1002c8f9 -1002d350: 1003b78d .word 0x1003b78d -1002d354: 1003b865 .word 0x1003b865 -1002d358: 1003b69d .word 0x1003b69d -1002d35c: 1003b2b3 .word 0x1003b2b3 -1002d360: 1002c62d .word 0x1002c62d -1002d364: 1002c369 .word 0x1002c369 -1002d368: 1002f6f9 .word 0x1002f6f9 -1002d36c: 1002f71b .word 0x1002f71b -1002d370: 1002f735 .word 0x1002f735 -1002d374: 00018279 .word 0x00018279 -1002d378: 00018239 .word 0x00018239 -1002d37c: 1002eca5 .word 0x1002eca5 -1002d380: 1002ecbd .word 0x1002ecbd -1002d384: 1002ca31 .word 0x1002ca31 -1002d388: 1002ca99 .word 0x1002ca99 -1002d38c: 1002c8e5 .word 0x1002c8e5 -1002d390: 1002cabd .word 0x1002cabd -1002d394: 1002c2f3 .word 0x1002c2f3 -1002d398: 1002cfa1 .word 0x1002cfa1 -1002d39c: 1002cd25 .word 0x1002cd25 -1002d3a0: 1002c6a1 .word 0x1002c6a1 -1002d3a4: 1002cc2d .word 0x1002cc2d -1002d3a8: 1002c95d .word 0x1002c95d - -1002d3ac : -1002d3ac: 4770 bx lr - -1002d3ae : -1002d3ae: b538 push {r3, r4, r5, lr} -1002d3b0: f44f 7109 mov.w r1, #548 ; 0x224 -1002d3b4: 4604 mov r4, r0 -1002d3b6: f00a fc6e bl 10037c96 -1002d3ba: f44f 7109 mov.w r1, #548 ; 0x224 -1002d3be: f440 3280 orr.w r2, r0, #65536 ; 0x10000 -1002d3c2: 4620 mov r0, r4 -1002d3c4: f00a fc7c bl 10037cc0 -1002d3c8: f7ea f90a bl 100175e0 -1002d3cc: 4605 mov r5, r0 -1002d3ce: 4620 mov r0, r4 -1002d3d0: f44f 7109 mov.w r1, #548 ; 0x224 -1002d3d4: f00a fc5f bl 10037c96 -1002d3d8: 03c3 lsls r3, r0, #15 -1002d3da: d509 bpl.n 1002d3f0 -1002d3dc: 4628 mov r0, r5 -1002d3de: f7ea f92f bl 10017640 -1002d3e2: f5b0 7f7a cmp.w r0, #1000 ; 0x3e8 -1002d3e6: d805 bhi.n 1002d3f4 -1002d3e8: 2002 movs r0, #2 -1002d3ea: f7ea f93b bl 10017664 -1002d3ee: e7ee b.n 1002d3ce -1002d3f0: 2001 movs r0, #1 -1002d3f2: bd38 pop {r3, r4, r5, pc} -1002d3f4: 2000 movs r0, #0 -1002d3f6: bd38 pop {r3, r4, r5, pc} - -1002d3f8 : -1002d3f8: 280e cmp r0, #14 -1002d3fa: d819 bhi.n 1002d430 -1002d3fc: 1e43 subs r3, r0, #1 -1002d3fe: 2b01 cmp r3, #1 -1002d400: d801 bhi.n 1002d406 -1002d402: 2300 movs r3, #0 -1002d404: e013 b.n 1002d42e -1002d406: 1ec3 subs r3, r0, #3 -1002d408: 2b02 cmp r3, #2 -1002d40a: d801 bhi.n 1002d410 -1002d40c: 2301 movs r3, #1 -1002d40e: e00e b.n 1002d42e -1002d410: 1f83 subs r3, r0, #6 -1002d412: 2b02 cmp r3, #2 -1002d414: d801 bhi.n 1002d41a -1002d416: 2302 movs r3, #2 -1002d418: e009 b.n 1002d42e -1002d41a: f1a0 0309 sub.w r3, r0, #9 -1002d41e: 2b02 cmp r3, #2 -1002d420: d801 bhi.n 1002d426 -1002d422: 2303 movs r3, #3 -1002d424: e003 b.n 1002d42e -1002d426: 380c subs r0, #12 -1002d428: 2802 cmp r0, #2 -1002d42a: d801 bhi.n 1002d430 -1002d42c: 2304 movs r3, #4 -1002d42e: 700b strb r3, [r1, #0] -1002d430: 2001 movs r0, #1 -1002d432: 4770 bx lr - -1002d434 : -1002d434: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002d438: f241 69c8 movw r9, #5832 ; 0x16c8 -1002d43c: f850 b009 ldr.w fp, [r0, r9] -1002d440: 4680 mov r8, r0 -1002d442: f44f 7000 mov.w r0, #512 ; 0x200 -1002d446: 468a mov sl, r1 -1002d448: 4616 mov r6, r2 -1002d44a: 461f mov r7, r3 -1002d44c: f7ea f9b0 bl 100177b0 -1002d450: 4604 mov r4, r0 -1002d452: b930 cbnz r0, 1002d462 -1002d454: 4638 mov r0, r7 -1002d456: 21ff movs r1, #255 ; 0xff -1002d458: 4632 mov r2, r6 -1002d45a: f7e9 ffe9 bl 10017430 -1002d45e: 4625 mov r5, r4 -1002d460: e059 b.n 1002d516 -1002d462: 4640 mov r0, r8 -1002d464: 2100 movs r1, #0 -1002d466: f44f 7200 mov.w r2, #512 ; 0x200 -1002d46a: 4623 mov r3, r4 -1002d46c: f009 ffed bl 1003744a -1002d470: 4605 mov r5, r0 -1002d472: b950 cbnz r0, 1002d48a -1002d474: 4620 mov r0, r4 -1002d476: f44f 7100 mov.w r1, #512 ; 0x200 -1002d47a: f7e9 ffc6 bl 1001740a -1002d47e: 4638 mov r0, r7 -1002d480: 21ff movs r1, #255 ; 0xff -1002d482: 4632 mov r2, r6 -1002d484: f7e9 ffd4 bl 10017430 -1002d488: e045 b.n 1002d516 -1002d48a: f504 758d add.w r5, r4, #282 ; 0x11a -1002d48e: 4668 mov r0, sp -1002d490: 4629 mov r1, r5 -1002d492: 2206 movs r2, #6 -1002d494: f7e9 ffbc bl 10017410 -1002d498: f89b 303e ldrb.w r3, [fp, #62] ; 0x3e -1002d49c: 2bfb cmp r3, #251 ; 0xfb -1002d49e: d00b beq.n 1002d4b8 -1002d4a0: f89d 3030 ldrb.w r3, [sp, #48] ; 0x30 -1002d4a4: b943 cbnz r3, 1002d4b8 -1002d4a6: f858 3009 ldr.w r3, [r8, r9] -1002d4aa: f893 303e ldrb.w r3, [r3, #62] ; 0x3e -1002d4ae: 2bfb cmp r3, #251 ; 0xfb -1002d4b0: d002 beq.n 1002d4b8 -1002d4b2: 4620 mov r0, r4 -1002d4b4: f7ff fbc4 bl 1002cc40 -1002d4b8: f89d 3000 ldrb.w r3, [sp] -1002d4bc: 2bff cmp r3, #255 ; 0xff -1002d4be: d113 bne.n 1002d4e8 -1002d4c0: f89d 3001 ldrb.w r3, [sp, #1] -1002d4c4: 2bff cmp r3, #255 ; 0xff -1002d4c6: d10f bne.n 1002d4e8 -1002d4c8: f89d 3002 ldrb.w r3, [sp, #2] -1002d4cc: 2bff cmp r3, #255 ; 0xff -1002d4ce: d10b bne.n 1002d4e8 -1002d4d0: f89d 3003 ldrb.w r3, [sp, #3] -1002d4d4: 2bff cmp r3, #255 ; 0xff -1002d4d6: d107 bne.n 1002d4e8 -1002d4d8: f89d 3004 ldrb.w r3, [sp, #4] -1002d4dc: 2bff cmp r3, #255 ; 0xff -1002d4de: d103 bne.n 1002d4e8 -1002d4e0: f89d 3005 ldrb.w r3, [sp, #5] -1002d4e4: 2bff cmp r3, #255 ; 0xff -1002d4e6: d004 beq.n 1002d4f2 -1002d4e8: 4628 mov r0, r5 -1002d4ea: 4669 mov r1, sp -1002d4ec: 2206 movs r2, #6 -1002d4ee: f7e9 ff8f bl 10017410 -1002d4f2: f504 70b0 add.w r0, r4, #352 ; 0x160 -1002d4f6: 21ff movs r1, #255 ; 0xff -1002d4f8: 2260 movs r2, #96 ; 0x60 -1002d4fa: f7e9 ff99 bl 10017430 -1002d4fe: 4638 mov r0, r7 -1002d500: eb04 010a add.w r1, r4, sl -1002d504: 4632 mov r2, r6 -1002d506: f7e9 ff83 bl 10017410 -1002d50a: 4620 mov r0, r4 -1002d50c: f44f 7100 mov.w r1, #512 ; 0x200 -1002d510: f7e9 ff7b bl 1001740a -1002d514: 2501 movs r5, #1 -1002d516: 4628 mov r0, r5 -1002d518: b003 add sp, #12 -1002d51a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - ... - -1002d520 : -1002d520: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002d524: 469c mov ip, r3 -1002d526: f241 63c8 movw r3, #5832 ; 0x16c8 -1002d52a: 58c3 ldr r3, [r0, r3] -1002d52c: 4682 mov sl, r0 -1002d52e: f893 303e ldrb.w r3, [r3, #62] ; 0x3e -1002d532: 460e mov r6, r1 -1002d534: 2bfb cmp r3, #251 ; 0xfb -1002d536: d011 beq.n 1002d55c -1002d538: f89d 3030 ldrb.w r3, [sp, #48] ; 0x30 -1002d53c: 491f ldr r1, [pc, #124] ; (1002d5bc ) -1002d53e: 2b00 cmp r3, #0 -1002d540: 4b1f ldr r3, [pc, #124] ; (1002d5c0 ) -1002d542: 4c20 ldr r4, [pc, #128] ; (1002d5c4 ) -1002d544: bf0c ite eq -1002d546: 4688 moveq r8, r1 -1002d548: 4698 movne r8, r3 -1002d54a: 4b1f ldr r3, [pc, #124] ; (1002d5c8 ) -1002d54c: bf0c ite eq -1002d54e: f04f 0b02 moveq.w fp, #2 -1002d552: f04f 0b04 movne.w fp, #4 -1002d556: bf18 it ne -1002d558: 461c movne r4, r3 -1002d55a: e004 b.n 1002d566 -1002d55c: f8df 8060 ldr.w r8, [pc, #96] ; 1002d5c0 -1002d560: 4c19 ldr r4, [pc, #100] ; (1002d5c8 ) -1002d562: f04f 0b04 mov.w fp, #4 -1002d566: f102 39ff add.w r9, r2, #4294967295 -1002d56a: 44b1 add r9, r6 -1002d56c: fa1f f989 uxth.w r9, r9 -1002d570: eb04 0b8b add.w fp, r4, fp, lsl #2 -1002d574: 4635 mov r5, r6 -1002d576: 455c cmp r4, fp -1002d578: d01b beq.n 1002d5b2 -1002d57a: 8821 ldrh r1, [r4, #0] -1002d57c: 8867 ldrh r7, [r4, #2] -1002d57e: 42a9 cmp r1, r5 -1002d580: bf38 it cc -1002d582: 4629 movcc r1, r5 -1002d584: 454f cmp r7, r9 -1002d586: bf28 it cs -1002d588: 464f movcs r7, r9 -1002d58a: 428f cmp r7, r1 -1002d58c: d30d bcc.n 1002d5aa -1002d58e: 1c7d adds r5, r7, #1 -1002d590: b2ad uxth r5, r5 -1002d592: 1a6a subs r2, r5, r1 -1002d594: 1b8b subs r3, r1, r6 -1002d596: 4463 add r3, ip -1002d598: f8cd c004 str.w ip, [sp, #4] -1002d59c: 4650 mov r0, sl -1002d59e: b292 uxth r2, r2 -1002d5a0: 47c0 blx r8 -1002d5a2: 2801 cmp r0, #1 -1002d5a4: f8dd c004 ldr.w ip, [sp, #4] -1002d5a8: d104 bne.n 1002d5b4 -1002d5aa: 454f cmp r7, r9 -1002d5ac: f104 0404 add.w r4, r4, #4 -1002d5b0: d1e1 bne.n 1002d576 -1002d5b2: 2001 movs r0, #1 -1002d5b4: b003 add sp, #12 -1002d5b6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1002d5ba: bf00 nop -1002d5bc: 1002d081 .word 0x1002d081 -1002d5c0: 100374ad .word 0x100374ad -1002d5c4: 10041786 .word 0x10041786 -1002d5c8: 10041760 .word 0x10041760 - -1002d5cc : -1002d5cc: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -1002d5ce: f241 4298 movw r2, #5272 ; 0x1498 -1002d5d2: f500 54a4 add.w r4, r0, #5248 ; 0x1480 -1002d5d6: 5c85 ldrb r5, [r0, r2] -1002d5d8: 3418 adds r4, #24 -1002d5da: 460e mov r6, r1 -1002d5dc: 7aa1 ldrb r1, [r4, #10] -1002d5de: b965 cbnz r5, 1002d5fa -1002d5e0: 2901 cmp r1, #1 -1002d5e2: d020 beq.n 1002d626 -1002d5e4: 340b adds r4, #11 -1002d5e6: 4629 mov r1, r5 -1002d5e8: 9500 str r5, [sp, #0] -1002d5ea: f44f 7200 mov.w r2, #512 ; 0x200 -1002d5ee: 4623 mov r3, r4 -1002d5f0: f7ff ff20 bl 1002d434 -1002d5f4: 4630 mov r0, r6 -1002d5f6: 4621 mov r1, r4 -1002d5f8: e011 b.n 1002d61e -1002d5fa: b969 cbnz r1, 1002d618 -1002d5fc: ab04 add r3, sp, #16 -1002d5fe: f823 1d02 strh.w r1, [r3, #-2]! -1002d602: 2204 movs r2, #4 -1002d604: 9100 str r1, [sp, #0] -1002d606: f009 fea1 bl 1003734c -1002d60a: f104 000b add.w r0, r4, #11 -1002d60e: 21ff movs r1, #255 ; 0xff -1002d610: f8bd 200e ldrh.w r2, [sp, #14] -1002d614: f7e9 ff0c bl 10017430 -1002d618: 4630 mov r0, r6 -1002d61a: f104 010b add.w r1, r4, #11 -1002d61e: f44f 7200 mov.w r2, #512 ; 0x200 -1002d622: f7e9 fef5 bl 10017410 -1002d626: b004 add sp, #16 -1002d628: bd70 pop {r4, r5, r6, pc} - -1002d62a : -1002d62a: 880a ldrh r2, [r1, #0] -1002d62c: f248 1395 movw r3, #33173 ; 0x8195 -1002d630: 429a cmp r2, r3 -1002d632: bf18 it ne -1002d634: 2201 movne r2, #1 -1002d636: f241 4398 movw r3, #5272 ; 0x1498 -1002d63a: bf08 it eq -1002d63c: 2200 moveq r2, #0 -1002d63e: 54c2 strb r2, [r0, r3] -1002d640: 4770 bx lr - -1002d642 : -1002d642: b570 push {r4, r5, r6, lr} -1002d644: 4608 mov r0, r1 -1002d646: 4615 mov r5, r2 -1002d648: 460c mov r4, r1 -1002d64a: 220e movs r2, #14 -1002d64c: 2100 movs r1, #0 -1002d64e: 461e mov r6, r3 -1002d650: f7e9 feee bl 10017430 -1002d654: f895 3021 ldrb.w r3, [r5, #33] ; 0x21 -1002d658: 2bff cmp r3, #255 ; 0xff -1002d65a: d101 bne.n 1002d660 -1002d65c: 2300 movs r3, #0 -1002d65e: e003 b.n 1002d668 -1002d660: 2e00 cmp r6, #0 -1002d662: d1fb bne.n 1002d65c -1002d664: 4633 mov r3, r6 -1002d666: e009 b.n 1002d67c -1002d668: 2220 movs r2, #32 -1002d66a: 54e2 strb r2, [r4, r3] -1002d66c: 18e1 adds r1, r4, r3 -1002d66e: 3301 adds r3, #1 -1002d670: 2b06 cmp r3, #6 -1002d672: 718a strb r2, [r1, #6] -1002d674: d1f8 bne.n 1002d668 -1002d676: 2300 movs r3, #0 -1002d678: 7363 strb r3, [r4, #13] -1002d67a: e027 b.n 1002d6cc -1002d67c: 18ea adds r2, r5, r3 -1002d67e: f892 2020 ldrb.w r2, [r2, #32] -1002d682: 2aff cmp r2, #255 ; 0xff -1002d684: bf08 it eq -1002d686: 2220 moveq r2, #32 -1002d688: 54e2 strb r2, [r4, r3] -1002d68a: 3301 adds r3, #1 -1002d68c: 2b06 cmp r3, #6 -1002d68e: d1f5 bne.n 1002d67c -1002d690: 2300 movs r3, #0 -1002d692: 18ea adds r2, r5, r3 -1002d694: f892 1026 ldrb.w r1, [r2, #38] ; 0x26 -1002d698: 18e2 adds r2, r4, r3 -1002d69a: 29ff cmp r1, #255 ; 0xff -1002d69c: f103 0301 add.w r3, r3, #1 -1002d6a0: bf08 it eq -1002d6a2: 2120 moveq r1, #32 -1002d6a4: 2b05 cmp r3, #5 -1002d6a6: 7191 strb r1, [r2, #6] -1002d6a8: d1f3 bne.n 1002d692 -1002d6aa: f895 202b ldrb.w r2, [r5, #43] ; 0x2b -1002d6ae: 2aff cmp r2, #255 ; 0xff -1002d6b0: d101 bne.n 1002d6b6 -1002d6b2: 2300 movs r3, #0 -1002d6b4: e005 b.n 1002d6c2 -1002d6b6: 0912 lsrs r2, r2, #4 -1002d6b8: b2d3 uxtb r3, r2 -1002d6ba: 0711 lsls r1, r2, #28 -1002d6bc: bf48 it mi -1002d6be: f063 030f ornmi r3, r3, #15 -1002d6c2: 7363 strb r3, [r4, #13] -1002d6c4: f895 302b ldrb.w r3, [r5, #43] ; 0x2b -1002d6c8: 2bff cmp r3, #255 ; 0xff -1002d6ca: d101 bne.n 1002d6d0 -1002d6cc: 2302 movs r3, #2 -1002d6ce: e005 b.n 1002d6dc -1002d6d0: f003 030f and.w r3, r3, #15 -1002d6d4: 071a lsls r2, r3, #28 -1002d6d6: bf48 it mi -1002d6d8: f063 030f ornmi r3, r3, #15 -1002d6dc: 7323 strb r3, [r4, #12] -1002d6de: bd70 pop {r4, r5, r6, pc} - -1002d6e0 : -1002d6e0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1002d6e4: f241 63c8 movw r3, #5832 ; 0x16c8 -1002d6e8: b086 sub sp, #24 -1002d6ea: 460f mov r7, r1 -1002d6ec: 4690 mov r8, r2 -1002d6ee: 58c4 ldr r4, [r0, r3] -1002d6f0: a902 add r1, sp, #8 -1002d6f2: 463a mov r2, r7 -1002d6f4: 4643 mov r3, r8 -1002d6f6: f7ff ffa4 bl 1002d642 -1002d6fa: 4625 mov r5, r4 -1002d6fc: 2600 movs r6, #0 -1002d6fe: 3601 adds r6, #1 -1002d700: b2f6 uxtb r6, r6 -1002d702: 4630 mov r0, r6 -1002d704: f10d 0107 add.w r1, sp, #7 -1002d708: f7ff fe76 bl 1002d3f8 -1002d70c: 2e0e cmp r6, #14 -1002d70e: f89d 3007 ldrb.w r3, [sp, #7] -1002d712: d115 bne.n 1002d740 -1002d714: f89d 200d ldrb.w r2, [sp, #13] -1002d718: f884 2067 strb.w r2, [r4, #103] ; 0x67 -1002d71c: aa06 add r2, sp, #24 -1002d71e: 4413 add r3, r2 -1002d720: f813 3c0a ldrb.w r3, [r3, #-10] -1002d724: f884 3075 strb.w r3, [r4, #117] ; 0x75 -1002d728: f89d 3014 ldrb.w r3, [sp, #20] -1002d72c: f884 3076 strb.w r3, [r4, #118] ; 0x76 -1002d730: f89d 3015 ldrb.w r3, [sp, #21] -1002d734: f884 3077 strb.w r3, [r4, #119] ; 0x77 -1002d738: f1b8 0f00 cmp.w r8, #0 -1002d73c: d00c beq.n 1002d758 -1002d73e: e015 b.n 1002d76c -1002d740: aa06 add r2, sp, #24 -1002d742: 4413 add r3, r2 -1002d744: f813 2c10 ldrb.w r2, [r3, #-16] -1002d748: 3501 adds r5, #1 -1002d74a: f885 2059 strb.w r2, [r5, #89] ; 0x59 -1002d74e: f813 3c0a ldrb.w r3, [r3, #-10] -1002d752: f885 3067 strb.w r3, [r5, #103] ; 0x67 -1002d756: e7d2 b.n 1002d6fe -1002d758: f897 3131 ldrb.w r3, [r7, #305] ; 0x131 -1002d75c: f003 0307 and.w r3, r3, #7 -1002d760: f884 3043 strb.w r3, [r4, #67] ; 0x43 -1002d764: f897 3131 ldrb.w r3, [r7, #305] ; 0x131 -1002d768: 2bff cmp r3, #255 ; 0xff -1002d76a: d102 bne.n 1002d772 -1002d76c: 2301 movs r3, #1 -1002d76e: f884 3043 strb.w r3, [r4, #67] ; 0x43 -1002d772: b006 add sp, #24 -1002d774: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1002d778 : -1002d778: f241 63c8 movw r3, #5832 ; 0x16c8 -1002d77c: 58c3 ldr r3, [r0, r3] -1002d77e: b912 cbnz r2, 1002d786 -1002d780: f891 2134 ldrb.w r2, [r1, #308] ; 0x134 -1002d784: e000 b.n 1002d788 -1002d786: 2201 movs r2, #1 -1002d788: f883 2042 strb.w r2, [r3, #66] ; 0x42 -1002d78c: 4770 bx lr - -1002d78e : -1002d78e: b537 push {r0, r1, r2, r4, r5, lr} -1002d790: f241 63c8 movw r3, #5832 ; 0x16c8 -1002d794: 4605 mov r5, r0 -1002d796: 2100 movs r1, #0 -1002d798: 2201 movs r2, #1 -1002d79a: 58c4 ldr r4, [r0, r3] -1002d79c: f009 fdb8 bl 10037310 -1002d7a0: 2300 movs r3, #0 -1002d7a2: 21f8 movs r1, #248 ; 0xf8 -1002d7a4: f10d 0207 add.w r2, sp, #7 -1002d7a8: 4628 mov r0, r5 -1002d7aa: f009 fdd9 bl 10037360 -1002d7ae: 2100 movs r1, #0 -1002d7b0: 4628 mov r0, r5 -1002d7b2: 460a mov r2, r1 -1002d7b4: f009 fdac bl 10037310 -1002d7b8: f89d 3007 ldrb.w r3, [sp, #7] -1002d7bc: f884 303e strb.w r3, [r4, #62] ; 0x3e -1002d7c0: 330f adds r3, #15 -1002d7c2: b2db uxtb r3, r3 -1002d7c4: 2b0e cmp r3, #14 -1002d7c6: d813 bhi.n 1002d7f0 -1002d7c8: 2101 movs r1, #1 -1002d7ca: fa01 f303 lsl.w r3, r1, r3 -1002d7ce: f242 12c1 movw r2, #8641 ; 0x21c1 -1002d7d2: 401a ands r2, r3 -1002d7d4: b952 cbnz r2, 1002d7ec -1002d7d6: f413 4f84 tst.w r3, #16896 ; 0x4200 -1002d7da: d104 bne.n 1002d7e6 -1002d7dc: f413 5fe0 tst.w r3, #7168 ; 0x1c00 -1002d7e0: d006 beq.n 1002d7f0 -1002d7e2: 2302 movs r3, #2 -1002d7e4: e005 b.n 1002d7f2 -1002d7e6: f884 103d strb.w r1, [r4, #61] ; 0x3d -1002d7ea: e004 b.n 1002d7f6 -1002d7ec: 2303 movs r3, #3 -1002d7ee: e000 b.n 1002d7f2 -1002d7f0: 2300 movs r3, #0 -1002d7f2: f884 303d strb.w r3, [r4, #61] ; 0x3d -1002d7f6: b003 add sp, #12 -1002d7f8: bd30 pop {r4, r5, pc} - -1002d7fa : -1002d7fa: b513 push {r0, r1, r4, lr} -1002d7fc: 4613 mov r3, r2 -1002d7fe: 4604 mov r4, r0 -1002d800: b129 cbz r1, 1002d80e -1002d802: f891 10c8 ldrb.w r1, [r1, #200] ; 0xc8 -1002d806: 29ff cmp r1, #255 ; 0xff -1002d808: bf08 it eq -1002d80a: 2301 moveq r3, #1 -1002d80c: e001 b.n 1002d812 -1002d80e: 2301 movs r3, #1 -1002d810: 21ff movs r1, #255 ; 0xff -1002d812: f241 32d3 movw r2, #5075 ; 0x13d3 -1002d816: 9300 str r3, [sp, #0] -1002d818: 5ca2 ldrb r2, [r4, r2] -1002d81a: 4620 mov r0, r4 -1002d81c: 2320 movs r3, #32 -1002d81e: f003 fed0 bl 100315c2 -1002d822: f884 049e strb.w r0, [r4, #1182] ; 0x49e -1002d826: b002 add sp, #8 -1002d828: bd10 pop {r4, pc} - -1002d82a : -1002d82a: f241 63c8 movw r3, #5832 ; 0x16c8 -1002d82e: 58c3 ldr r3, [r0, r3] -1002d830: b912 cbnz r2, 1002d838 -1002d832: f891 2135 ldrb.w r2, [r1, #309] ; 0x135 -1002d836: e000 b.n 1002d83a -1002d838: 2200 movs r2, #0 -1002d83a: f883 2041 strb.w r2, [r3, #65] ; 0x41 -1002d83e: 4770 bx lr - -1002d840 : -1002d840: f241 63c8 movw r3, #5832 ; 0x16c8 -1002d844: 58c3 ldr r3, [r0, r3] -1002d846: b91a cbnz r2, 1002d850 -1002d848: f891 20c9 ldrb.w r2, [r1, #201] ; 0xc9 -1002d84c: 2aff cmp r2, #255 ; 0xff -1002d84e: d100 bne.n 1002d852 -1002d850: 2220 movs r2, #32 -1002d852: f883 217b strb.w r2, [r3, #379] ; 0x17b -1002d856: 4770 bx lr - -1002d858 : -1002d858: f241 63c8 movw r3, #5832 ; 0x16c8 -1002d85c: 58c3 ldr r3, [r0, r3] -1002d85e: b912 cbnz r2, 1002d866 -1002d860: f891 10ca ldrb.w r1, [r1, #202] ; 0xca -1002d864: e000 b.n 1002d868 -1002d866: 211a movs r1, #26 -1002d868: f883 1044 strb.w r1, [r3, #68] ; 0x44 -1002d86c: f893 1044 ldrb.w r1, [r3, #68] ; 0x44 -1002d870: 29ff cmp r1, #255 ; 0xff -1002d872: d001 beq.n 1002d878 -1002d874: 2a01 cmp r2, #1 -1002d876: d102 bne.n 1002d87e -1002d878: 221a movs r2, #26 -1002d87a: f883 2044 strb.w r2, [r3, #68] ; 0x44 -1002d87e: 4770 bx lr - -1002d880 : -1002d880: b537 push {r0, r1, r2, r4, r5, lr} -1002d882: 4613 mov r3, r2 -1002d884: 4604 mov r4, r0 -1002d886: 460d mov r5, r1 -1002d888: b98a cbnz r2, 1002d8ae -1002d88a: 21ee movs r1, #238 ; 0xee -1002d88c: f10d 0207 add.w r2, sp, #7 -1002d890: f009 fd66 bl 10037360 -1002d894: f241 33f6 movw r3, #5110 ; 0x13f6 -1002d898: 5ce3 ldrb r3, [r4, r3] -1002d89a: b933 cbnz r3, 1002d8aa -1002d89c: f895 3138 ldrb.w r3, [r5, #312] ; 0x138 -1002d8a0: 2bff cmp r3, #255 ; 0xff -1002d8a2: d004 beq.n 1002d8ae -1002d8a4: 06db lsls r3, r3, #27 -1002d8a6: d405 bmi.n 1002d8b4 -1002d8a8: e001 b.n 1002d8ae -1002d8aa: 2b02 cmp r3, #2 -1002d8ac: d102 bne.n 1002d8b4 -1002d8ae: 23ff movs r3, #255 ; 0xff -1002d8b0: f88d 3007 strb.w r3, [sp, #7] -1002d8b4: f89d 3007 ldrb.w r3, [sp, #7] -1002d8b8: f241 61a3 movw r1, #5795 ; 0x16a3 -1002d8bc: 2bff cmp r3, #255 ; 0xff -1002d8be: f241 62a4 movw r2, #5796 ; 0x16a4 -1002d8c2: bf14 ite ne -1002d8c4: 2001 movne r0, #1 -1002d8c6: 2000 moveq r0, #0 -1002d8c8: 5460 strb r0, [r4, r1] -1002d8ca: 54a3 strb r3, [r4, r2] -1002d8cc: b003 add sp, #12 -1002d8ce: bd30 pop {r4, r5, pc} - -1002d8d0 : -1002d8d0: f241 63c8 movw r3, #5832 ; 0x16c8 -1002d8d4: 58c3 ldr r3, [r0, r3] -1002d8d6: 6adb ldr r3, [r3, #44] ; 0x2c -1002d8d8: 2b01 cmp r3, #1 -1002d8da: d107 bne.n 1002d8ec -1002d8dc: f891 0059 ldrb.w r0, [r1, #89] ; 0x59 -1002d8e0: 3801 subs r0, #1 -1002d8e2: 2801 cmp r0, #1 -1002d8e4: bf8c ite hi -1002d8e6: 2000 movhi r0, #0 -1002d8e8: 2001 movls r0, #1 -1002d8ea: 4770 bx lr -1002d8ec: 2000 movs r0, #0 -1002d8ee: 4770 bx lr - -1002d8f0 : -1002d8f0: f241 63c8 movw r3, #5832 ; 0x16c8 -1002d8f4: 58c3 ldr r3, [r0, r3] -1002d8f6: 6ad8 ldr r0, [r3, #44] ; 0x2c -1002d8f8: 2801 cmp r0, #1 -1002d8fa: d10b bne.n 1002d914 -1002d8fc: f891 2059 ldrb.w r2, [r1, #89] ; 0x59 -1002d900: b942 cbnz r2, 1002d914 -1002d902: f893 3035 ldrb.w r3, [r3, #53] ; 0x35 -1002d906: 2b02 cmp r3, #2 -1002d908: d005 beq.n 1002d916 -1002d90a: 2b01 cmp r3, #1 -1002d90c: bf14 ite ne -1002d90e: 2000 movne r0, #0 -1002d910: 2002 moveq r0, #2 -1002d912: 4770 bx lr -1002d914: 2000 movs r0, #0 -1002d916: 4770 bx lr - -1002d918 : -1002d918: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1002d91c: 2228 movs r2, #40 ; 0x28 -1002d91e: 4605 mov r5, r0 -1002d920: f8d0 8080 ldr.w r8, [r0, #128] ; 0x80 -1002d924: 460c mov r4, r1 -1002d926: 4608 mov r0, r1 -1002d928: 2100 movs r1, #0 -1002d92a: f7e9 fd81 bl 10017430 -1002d92e: 6fee ldr r6, [r5, #124] ; 0x7c -1002d930: f895 9057 ldrb.w r9, [r5, #87] ; 0x57 -1002d934: f241 6ac8 movw sl, #5832 ; 0x16c8 -1002d938: 4630 mov r0, r6 -1002d93a: f856 700a ldr.w r7, [r6, sl] -1002d93e: f009 0901 and.w r9, r9, #1 -1002d942: f7f0 fdf7 bl 1001e534 -1002d946: b140 cbz r0, 1002d95a -1002d948: f641 0369 movw r3, #6249 ; 0x1869 -1002d94c: 5cf3 ldrb r3, [r6, r3] -1002d94e: b123 cbz r3, 1002d95a -1002d950: f641 035c movw r3, #6236 ; 0x185c -1002d954: 58f3 ldr r3, [r6, r3] -1002d956: f853 700a ldr.w r7, [r3, sl] -1002d95a: 6fab ldr r3, [r5, #120] ; 0x78 -1002d95c: 2b01 cmp r3, #1 -1002d95e: f040 80df bne.w 1002db20 -1002d962: f895 2043 ldrb.w r2, [r5, #67] ; 0x43 -1002d966: 7923 ldrb r3, [r4, #4] -1002d968: f362 0306 bfi r3, r2, #0, #7 -1002d96c: 7123 strb r3, [r4, #4] -1002d96e: f895 2060 ldrb.w r2, [r5, #96] ; 0x60 -1002d972: 79a3 ldrb r3, [r4, #6] -1002d974: f362 0304 bfi r3, r2, #0, #5 -1002d978: 71a3 strb r3, [r4, #6] -1002d97a: f895 2068 ldrb.w r2, [r5, #104] ; 0x68 -1002d97e: 7963 ldrb r3, [r4, #5] -1002d980: f362 0304 bfi r3, r2, #0, #5 -1002d984: 7163 strb r3, [r4, #5] -1002d986: 89ea ldrh r2, [r5, #14] -1002d988: 6a63 ldr r3, [r4, #36] ; 0x24 -1002d98a: f362 3317 bfi r3, r2, #12, #12 -1002d98e: 6263 str r3, [r4, #36] ; 0x24 -1002d990: 7f2b ldrb r3, [r5, #28] -1002d992: 7aaa ldrb r2, [r5, #10] -1002d994: b16b cbz r3, 1002d9b2 -1002d996: b94a cbnz r2, 1002d9ac -1002d998: 3b01 subs r3, #1 -1002d99a: 2b04 cmp r3, #4 -1002d99c: d806 bhi.n 1002d9ac -1002d99e: e8df f003 tbb [pc, r3] -1002d9a2: 0707 .short 0x0707 -1002d9a4: 0307 .short 0x0307 -1002d9a6: 07 .byte 0x07 -1002d9a7: 00 .byte 0x00 -1002d9a8: 2303 movs r3, #3 -1002d9aa: e002 b.n 1002d9b2 -1002d9ac: 2300 movs r3, #0 -1002d9ae: e000 b.n 1002d9b2 -1002d9b0: 2301 movs r3, #1 -1002d9b2: 79a2 ldrb r2, [r4, #6] -1002d9b4: f105 0808 add.w r8, r5, #8 -1002d9b8: f363 1287 bfi r2, r3, #6, #2 -1002d9bc: 71a2 strb r2, [r4, #6] -1002d9be: f895 3044 ldrb.w r3, [r5, #68] ; 0x44 -1002d9c2: b33b cbz r3, 1002da14 -1002d9c4: 2b01 cmp r3, #1 -1002d9c6: d005 beq.n 1002d9d4 -1002d9c8: 2b02 cmp r3, #2 -1002d9ca: d107 bne.n 1002d9dc -1002d9cc: 7b63 ldrb r3, [r4, #13] -1002d9ce: f043 0308 orr.w r3, r3, #8 -1002d9d2: e002 b.n 1002d9da -1002d9d4: 7b63 ldrb r3, [r4, #13] -1002d9d6: f043 0330 orr.w r3, r3, #48 ; 0x30 -1002d9da: 7363 strb r3, [r4, #13] -1002d9dc: 7ce3 ldrb r3, [r4, #19] -1002d9de: 2208 movs r2, #8 -1002d9e0: f362 0304 bfi r3, r2, #0, #5 -1002d9e4: 74e3 strb r3, [r4, #19] -1002d9e6: 6923 ldr r3, [r4, #16] -1002d9e8: f443 33f0 orr.w r3, r3, #122880 ; 0x1e000 -1002d9ec: 6123 str r3, [r4, #16] -1002d9ee: f896 3730 ldrb.w r3, [r6, #1840] ; 0x730 -1002d9f2: 2b03 cmp r3, #3 -1002d9f4: d103 bne.n 1002d9fe -1002d9f6: 7d63 ldrb r3, [r4, #21] -1002d9f8: f043 0310 orr.w r3, r3, #16 -1002d9fc: 7563 strb r3, [r4, #21] -1002d9fe: f895 305f ldrb.w r3, [r5, #95] ; 0x5f -1002da02: b13b cbz r3, 1002da14 -1002da04: 4630 mov r0, r6 -1002da06: 4641 mov r1, r8 -1002da08: f7ff ff72 bl 1002d8f0 -1002da0c: 6963 ldr r3, [r4, #20] -1002da0e: f360 3350 bfi r3, r0, #13, #4 -1002da12: 6163 str r3, [r4, #20] -1002da14: 89ab ldrh r3, [r5, #12] -1002da16: f648 028e movw r2, #34958 ; 0x888e -1002da1a: 4293 cmp r3, r2 -1002da1c: d06f beq.n 1002dafe -1002da1e: f640 0206 movw r2, #2054 ; 0x806 -1002da22: 4293 cmp r3, r2 -1002da24: d06b beq.n 1002dafe -1002da26: f648 02b4 movw r2, #34996 ; 0x88b4 -1002da2a: 4293 cmp r3, r2 -1002da2c: d067 beq.n 1002dafe -1002da2e: 7aeb ldrb r3, [r5, #11] -1002da30: 2b01 cmp r3, #1 -1002da32: d064 beq.n 1002dafe -1002da34: f895 3064 ldrb.w r3, [r5, #100] ; 0x64 -1002da38: 2b01 cmp r3, #1 -1002da3a: d10d bne.n 1002da58 -1002da3c: 7a63 ldrb r3, [r4, #9] -1002da3e: f043 0310 orr.w r3, r3, #16 -1002da42: 7263 strb r3, [r4, #9] -1002da44: 7ba3 ldrb r3, [r4, #14] -1002da46: f043 033e orr.w r3, r3, #62 ; 0x3e -1002da4a: 73a3 strb r3, [r4, #14] -1002da4c: f897 2e08 ldrb.w r2, [r7, #3592] ; 0xe08 -1002da50: 7aa3 ldrb r3, [r4, #10] -1002da52: f362 1306 bfi r3, r2, #4, #3 -1002da56: e002 b.n 1002da5e -1002da58: 7aa3 ldrb r3, [r4, #10] -1002da5a: f043 0301 orr.w r3, r3, #1 -1002da5e: 72a3 strb r3, [r4, #10] -1002da60: f895 305f ldrb.w r3, [r5, #95] ; 0x5f -1002da64: b17b cbz r3, 1002da86 -1002da66: 4641 mov r1, r8 -1002da68: 4630 mov r0, r6 -1002da6a: f7ff ff31 bl 1002d8d0 -1002da6e: 7d23 ldrb r3, [r4, #20] -1002da70: 4641 mov r1, r8 -1002da72: f360 1346 bfi r3, r0, #5, #2 -1002da76: 7523 strb r3, [r4, #20] -1002da78: 4630 mov r0, r6 -1002da7a: f7ff ff39 bl 1002d8f0 -1002da7e: 7d23 ldrb r3, [r4, #20] -1002da80: f360 0303 bfi r3, r0, #0, #4 -1002da84: 7523 strb r3, [r4, #20] -1002da86: 7c63 ldrb r3, [r4, #17] -1002da88: f043 031f orr.w r3, r3, #31 -1002da8c: 7463 strb r3, [r4, #17] -1002da8e: f897 31a4 ldrb.w r3, [r7, #420] ; 0x1a4 -1002da92: b9bb cbnz r3, 1002dac4 -1002da94: 7b63 ldrb r3, [r4, #13] -1002da96: f043 0301 orr.w r3, r3, #1 -1002da9a: 7363 strb r3, [r4, #13] -1002da9c: f895 3043 ldrb.w r3, [r5, #67] ; 0x43 -1002daa0: 443b add r3, r7 -1002daa2: f993 31e0 ldrsb.w r3, [r3, #480] ; 0x1e0 -1002daa6: 2b00 cmp r3, #0 -1002daa8: da03 bge.n 1002dab2 -1002daaa: 7d23 ldrb r3, [r4, #20] -1002daac: f043 0310 orr.w r3, r3, #16 -1002dab0: 7523 strb r3, [r4, #20] -1002dab2: f895 3043 ldrb.w r3, [r5, #67] ; 0x43 -1002dab6: 441f add r7, r3 -1002dab8: f897 21e0 ldrb.w r2, [r7, #480] ; 0x1e0 -1002dabc: 7c23 ldrb r3, [r4, #16] -1002dabe: f362 0306 bfi r3, r2, #0, #7 -1002dac2: 7423 strb r3, [r4, #16] -1002dac4: f641 0378 movw r3, #6264 ; 0x1878 -1002dac8: 5cf2 ldrb r2, [r6, r3] -1002daca: 2aff cmp r2, #255 ; 0xff -1002dacc: f000 80a9 beq.w 1002dc22 -1002dad0: 7b62 ldrb r2, [r4, #13] -1002dad2: f042 0201 orr.w r2, r2, #1 -1002dad6: 7362 strb r2, [r4, #13] -1002dad8: 56f3 ldrsb r3, [r6, r3] -1002dada: 2b00 cmp r3, #0 -1002dadc: da03 bge.n 1002dae6 -1002dade: 7d23 ldrb r3, [r4, #20] -1002dae0: f043 0310 orr.w r3, r3, #16 -1002dae4: 7523 strb r3, [r4, #20] -1002dae6: f641 0278 movw r2, #6264 ; 0x1878 -1002daea: 5cb2 ldrb r2, [r6, r2] -1002daec: 7c23 ldrb r3, [r4, #16] -1002daee: f362 0306 bfi r3, r2, #0, #7 -1002daf2: 7423 strb r3, [r4, #16] -1002daf4: 7b63 ldrb r3, [r4, #13] -1002daf6: f043 0304 orr.w r3, r3, #4 -1002dafa: 7363 strb r3, [r4, #13] -1002dafc: e091 b.n 1002dc22 -1002dafe: 7aa3 ldrb r3, [r4, #10] -1002db00: f043 0301 orr.w r3, r3, #1 -1002db04: 72a3 strb r3, [r4, #10] -1002db06: 7b63 ldrb r3, [r4, #13] -1002db08: f043 0301 orr.w r3, r3, #1 -1002db0c: 7363 strb r3, [r4, #13] -1002db0e: f896 3730 ldrb.w r3, [r6, #1840] ; 0x730 -1002db12: 2b03 cmp r3, #3 -1002db14: d17d bne.n 1002dc12 -1002db16: 7d23 ldrb r3, [r4, #20] -1002db18: f043 0310 orr.w r3, r3, #16 -1002db1c: 7523 strb r3, [r4, #20] -1002db1e: e078 b.n 1002dc12 -1002db20: 2b03 cmp r3, #3 -1002db22: d159 bne.n 1002dbd8 -1002db24: f895 2043 ldrb.w r2, [r5, #67] ; 0x43 -1002db28: 7923 ldrb r3, [r4, #4] -1002db2a: f362 0306 bfi r3, r2, #0, #7 -1002db2e: 7123 strb r3, [r4, #4] -1002db30: f895 2068 ldrb.w r2, [r5, #104] ; 0x68 -1002db34: 7963 ldrb r3, [r4, #5] -1002db36: f362 0304 bfi r3, r2, #0, #5 -1002db3a: 7163 strb r3, [r4, #5] -1002db3c: f895 2060 ldrb.w r2, [r5, #96] ; 0x60 -1002db40: 79a3 ldrb r3, [r4, #6] -1002db42: f362 0304 bfi r3, r2, #0, #5 -1002db46: 71a3 strb r3, [r4, #6] -1002db48: 89ea ldrh r2, [r5, #14] -1002db4a: 6a63 ldr r3, [r4, #36] ; 0x24 -1002db4c: f362 3317 bfi r3, r2, #12, #12 -1002db50: 6263 str r3, [r4, #36] ; 0x24 -1002db52: 7b63 ldrb r3, [r4, #13] -1002db54: f043 0301 orr.w r3, r3, #1 -1002db58: 7363 strb r3, [r4, #13] -1002db5a: 7ca3 ldrb r3, [r4, #18] -1002db5c: f043 0302 orr.w r3, r3, #2 -1002db60: 74a3 strb r3, [r4, #18] -1002db62: f895 306c ldrb.w r3, [r5, #108] ; 0x6c -1002db66: 2b01 cmp r3, #1 -1002db68: 7ca3 ldrb r3, [r4, #18] -1002db6a: bf0c ite eq -1002db6c: 2206 moveq r2, #6 -1002db6e: 220c movne r2, #12 -1002db70: f362 0387 bfi r3, r2, #2, #6 -1002db74: 74a3 strb r3, [r4, #18] -1002db76: f896 084b ldrb.w r0, [r6, #2123] ; 0x84b -1002db7a: f003 fd4b bl 10031614 -1002db7e: 7c23 ldrb r3, [r4, #16] -1002db80: f8b8 2028 ldrh.w r2, [r8, #40] ; 0x28 -1002db84: f360 0306 bfi r3, r0, #0, #7 -1002db88: 7423 strb r3, [r4, #16] -1002db8a: f002 03c8 and.w r3, r2, #200 ; 0xc8 -1002db8e: 2bc8 cmp r3, #200 ; 0xc8 -1002db90: d147 bne.n 1002dc22 -1002db92: 7aa3 ldrb r3, [r4, #10] -1002db94: f402 5280 and.w r2, r2, #4096 ; 0x1000 -1002db98: f043 0308 orr.w r3, r3, #8 -1002db9c: 72a3 strb r3, [r4, #10] -1002db9e: f895 1043 ldrb.w r1, [r5, #67] ; 0x43 -1002dba2: 8b23 ldrh r3, [r4, #24] -1002dba4: b292 uxth r2, r2 -1002dba6: f361 030b bfi r3, r1, #0, #12 -1002dbaa: 8323 strh r3, [r4, #24] -1002dbac: 7a63 ldrb r3, [r4, #9] -1002dbae: b122 cbz r2, 1002dbba -1002dbb0: f003 03bf and.w r3, r3, #191 ; 0xbf -1002dbb4: f043 0380 orr.w r3, r3, #128 ; 0x80 -1002dbb8: e003 b.n 1002dbc2 -1002dbba: f043 0340 orr.w r3, r3, #64 ; 0x40 -1002dbbe: f362 13c7 bfi r3, r2, #7, #1 -1002dbc2: 7263 strb r3, [r4, #9] -1002dbc4: 7c63 ldrb r3, [r4, #17] -1002dbc6: 2207 movs r2, #7 -1002dbc8: f043 031f orr.w r3, r3, #31 -1002dbcc: 7463 strb r3, [r4, #17] -1002dbce: 6923 ldr r3, [r4, #16] -1002dbd0: f362 3350 bfi r3, r2, #13, #4 -1002dbd4: 6123 str r3, [r4, #16] -1002dbd6: e024 b.n 1002dc22 -1002dbd8: 2b08 cmp r3, #8 -1002dbda: d022 beq.n 1002dc22 -1002dbdc: f895 2043 ldrb.w r2, [r5, #67] ; 0x43 -1002dbe0: 7923 ldrb r3, [r4, #4] -1002dbe2: f362 0306 bfi r3, r2, #0, #7 -1002dbe6: 7123 strb r3, [r4, #4] -1002dbe8: f895 2060 ldrb.w r2, [r5, #96] ; 0x60 -1002dbec: 79a3 ldrb r3, [r4, #6] -1002dbee: f362 0304 bfi r3, r2, #0, #5 -1002dbf2: 71a3 strb r3, [r4, #6] -1002dbf4: f895 2068 ldrb.w r2, [r5, #104] ; 0x68 -1002dbf8: 7963 ldrb r3, [r4, #5] -1002dbfa: f362 0304 bfi r3, r2, #0, #5 -1002dbfe: 7163 strb r3, [r4, #5] -1002dc00: 89ea ldrh r2, [r5, #14] -1002dc02: 6a63 ldr r3, [r4, #36] ; 0x24 -1002dc04: f362 3317 bfi r3, r2, #12, #12 -1002dc08: 6263 str r3, [r4, #36] ; 0x24 -1002dc0a: 7b63 ldrb r3, [r4, #13] -1002dc0c: f043 0301 orr.w r3, r3, #1 -1002dc10: 7363 strb r3, [r4, #13] -1002dc12: f896 084b ldrb.w r0, [r6, #2123] ; 0x84b -1002dc16: f003 fcfd bl 10031614 -1002dc1a: 7c23 ldrb r3, [r4, #16] -1002dc1c: f360 0306 bfi r3, r0, #0, #7 -1002dc20: 7423 strb r3, [r4, #16] -1002dc22: 8b2b ldrh r3, [r5, #24] -1002dc24: 8023 strh r3, [r4, #0] -1002dc26: 2328 movs r3, #40 ; 0x28 -1002dc28: 70a3 strb r3, [r4, #2] -1002dc2a: f1b9 0f00 cmp.w r9, #0 -1002dc2e: d003 beq.n 1002dc38 -1002dc30: 78e3 ldrb r3, [r4, #3] -1002dc32: f043 0301 orr.w r3, r3, #1 -1002dc36: 70e3 strb r3, [r4, #3] -1002dc38: f895 305e ldrb.w r3, [r5, #94] ; 0x5e -1002dc3c: b92b cbnz r3, 1002dc4a -1002dc3e: f894 3021 ldrb.w r3, [r4, #33] ; 0x21 -1002dc42: f043 0380 orr.w r3, r3, #128 ; 0x80 -1002dc46: f884 3021 strb.w r3, [r4, #33] ; 0x21 -1002dc4a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - -1002dc4e : -1002dc4e: b5f8 push {r3, r4, r5, r6, r7, lr} -1002dc50: 460c mov r4, r1 -1002dc52: 4616 mov r6, r2 -1002dc54: 4605 mov r5, r0 -1002dc56: 2228 movs r2, #40 ; 0x28 -1002dc58: 4608 mov r0, r1 -1002dc5a: 2100 movs r1, #0 -1002dc5c: 461f mov r7, r3 -1002dc5e: f7e9 fbe7 bl 10017430 -1002dc62: 6821 ldr r1, [r4, #0] -1002dc64: b2b2 uxth r2, r6 -1002dc66: f042 6242 orr.w r2, r2, #203423744 ; 0xc200000 -1002dc6a: f001 417f and.w r1, r1, #4278190080 ; 0xff000000 -1002dc6e: f442 2200 orr.w r2, r2, #524288 ; 0x80000 -1002dc72: 430a orrs r2, r1 -1002dc74: 6861 ldr r1, [r4, #4] -1002dc76: 2f01 cmp r7, #1 -1002dc78: f421 51f8 bic.w r1, r1, #7936 ; 0x1f00 -1002dc7c: f441 5190 orr.w r1, r1, #4608 ; 0x1200 -1002dc80: 6022 str r2, [r4, #0] -1002dc82: 6061 str r1, [r4, #4] -1002dc84: 68e3 ldr r3, [r4, #12] -1002dc86: d103 bne.n 1002dc90 -1002dc88: f443 4300 orr.w r3, r3, #32768 ; 0x8000 -1002dc8c: 60e3 str r3, [r4, #12] -1002dc8e: e00a b.n 1002dca6 -1002dc90: f023 03c0 bic.w r3, r3, #192 ; 0xc0 -1002dc94: 6a21 ldr r1, [r4, #32] -1002dc96: 60e3 str r3, [r4, #12] -1002dc98: 68a3 ldr r3, [r4, #8] -1002dc9a: f441 4100 orr.w r1, r1, #32768 ; 0x8000 -1002dc9e: f443 2300 orr.w r3, r3, #524288 ; 0x80000 -1002dca2: 6221 str r1, [r4, #32] -1002dca4: 60a3 str r3, [r4, #8] -1002dca6: f89d 3018 ldrb.w r3, [sp, #24] -1002dcaa: 2b01 cmp r3, #1 -1002dcac: d103 bne.n 1002dcb6 -1002dcae: 68a3 ldr r3, [r4, #8] -1002dcb0: f443 0300 orr.w r3, r3, #8388608 ; 0x800000 -1002dcb4: 60a3 str r3, [r4, #8] -1002dcb6: 68e3 ldr r3, [r4, #12] -1002dcb8: f042 4200 orr.w r2, r2, #2147483648 ; 0x80000000 -1002dcbc: f443 7380 orr.w r3, r3, #256 ; 0x100 -1002dcc0: 60e3 str r3, [r4, #12] -1002dcc2: 6923 ldr r3, [r4, #16] -1002dcc4: 6022 str r2, [r4, #0] -1002dcc6: f023 037f bic.w r3, r3, #127 ; 0x7f -1002dcca: 6123 str r3, [r4, #16] -1002dccc: f89d 301c ldrb.w r3, [sp, #28] -1002dcd0: 2b01 cmp r3, #1 -1002dcd2: d11a bne.n 1002dd0a -1002dcd4: f8d5 2d0c ldr.w r2, [r5, #3340] ; 0xd0c -1002dcd8: 6863 ldr r3, [r4, #4] -1002dcda: 2a06 cmp r2, #6 -1002dcdc: d812 bhi.n 1002dd04 -1002dcde: e8df f002 tbb [pc, r2] -1002dce2: 0411 .short 0x0411 -1002dce4: 040e1104 .word 0x040e1104 -1002dce8: 09 .byte 0x09 -1002dce9: 00 .byte 0x00 -1002dcea: f423 0340 bic.w r3, r3, #12582912 ; 0xc00000 -1002dcee: f443 0380 orr.w r3, r3, #4194304 ; 0x400000 -1002dcf2: e009 b.n 1002dd08 -1002dcf4: f423 0340 bic.w r3, r3, #12582912 ; 0xc00000 -1002dcf8: f443 0300 orr.w r3, r3, #8388608 ; 0x800000 -1002dcfc: e004 b.n 1002dd08 -1002dcfe: f443 0340 orr.w r3, r3, #12582912 ; 0xc00000 -1002dd02: e001 b.n 1002dd08 -1002dd04: f423 0340 bic.w r3, r3, #12582912 ; 0xc00000 -1002dd08: 6063 str r3, [r4, #4] -1002dd0a: bdf8 pop {r3, r4, r5, r6, r7, pc} - -1002dd0c : -1002dd0c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1002dd10: f241 63c8 movw r3, #5832 ; 0x16c8 -1002dd14: b086 sub sp, #24 -1002dd16: 4680 mov r8, r0 -1002dd18: 4614 mov r4, r2 -1002dd1a: 58c5 ldr r5, [r0, r3] -1002dd1c: 2952 cmp r1, #82 ; 0x52 -1002dd1e: f200 8635 bhi.w 1002e98c -1002dd22: e8df f011 tbh [pc, r1, lsl #1] -1002dd26: 0053 .short 0x0053 -1002dd28: 0070005f .word 0x0070005f -1002dd2c: 01ff01eb .word 0x01ff01eb -1002dd30: 02270633 .word 0x02270633 -1002dd34: 02560633 .word 0x02560633 -1002dd38: 033c026b .word 0x033c026b -1002dd3c: 03840348 .word 0x03840348 -1002dd40: 063303f5 .word 0x063303f5 -1002dd44: 04870633 .word 0x04870633 -1002dd48: 048e048b .word 0x048e048b -1002dd4c: 04ae04a5 .word 0x04ae04a5 -1002dd50: 06330633 .word 0x06330633 -1002dd54: 04b90633 .word 0x04b90633 -1002dd58: 04c504bb .word 0x04c504bb -1002dd5c: 063304d5 .word 0x063304d5 -1002dd60: 04e104dc .word 0x04e104dc -1002dd64: 04ef0633 .word 0x04ef0633 -1002dd68: 04f504f2 .word 0x04f504f2 -1002dd6c: 04ff04fb .word 0x04ff04fb -1002dd70: 06330515 .word 0x06330515 -1002dd74: 06330633 .word 0x06330633 -1002dd78: 06330633 .word 0x06330633 -1002dd7c: 06330519 .word 0x06330519 -1002dd80: 0633051d .word 0x0633051d -1002dd84: 06330633 .word 0x06330633 -1002dd88: 06330633 .word 0x06330633 -1002dd8c: 05210633 .word 0x05210633 -1002dd90: 06330633 .word 0x06330633 -1002dd94: 06330633 .word 0x06330633 -1002dd98: 06330633 .word 0x06330633 -1002dd9c: 05340530 .word 0x05340530 -1002dda0: 06330633 .word 0x06330633 -1002dda4: 05910570 .word 0x05910570 -1002dda8: 066b0595 .word 0x066b0595 -1002ddac: 06330633 .word 0x06330633 -1002ddb0: 063305a1 .word 0x063305a1 -1002ddb4: 06330633 .word 0x06330633 -1002ddb8: 06330633 .word 0x06330633 -1002ddbc: 066b0633 .word 0x066b0633 -1002ddc0: 05bc05a7 .word 0x05bc05a7 -1002ddc4: 06330633 .word 0x06330633 -1002ddc8: 062205d2 .word 0x062205d2 -1002ddcc: f44f 7181 mov.w r1, #258 ; 0x102 -1002ddd0: f009 ff53 bl 10037c7a -1002ddd4: 7823 ldrb r3, [r4, #0] -1002ddd6: f000 020c and.w r2, r0, #12 -1002ddda: f44f 7181 mov.w r1, #258 ; 0x102 -1002ddde: 4640 mov r0, r8 -1002dde0: 431a orrs r2, r3 -1002dde2: e00c b.n 1002ddfe -1002dde4: f44f 7181 mov.w r1, #258 ; 0x102 -1002dde8: f009 ff47 bl 10037c7a -1002ddec: 7822 ldrb r2, [r4, #0] -1002ddee: f000 0003 and.w r0, r0, #3 -1002ddf2: ea40 0282 orr.w r2, r0, r2, lsl #2 -1002ddf6: f44f 7181 mov.w r1, #258 ; 0x102 -1002ddfa: 4640 mov r0, r8 -1002ddfc: b2d2 uxtb r2, r2 -1002ddfe: f009 ff51 bl 10037ca4 -1002de02: f000 bdfb b.w 1002e9fc -1002de06: f641 036a movw r3, #6250 ; 0x186a -1002de0a: 5cc3 ldrb r3, [r0, r3] -1002de0c: 7824 ldrb r4, [r4, #0] -1002de0e: 2b01 cmp r3, #1 -1002de10: f024 0502 bic.w r5, r4, #2 -1002de14: f040 80b8 bne.w 1002df88 -1002de18: f240 5151 movw r1, #1361 ; 0x551 -1002de1c: f009 ff2d bl 10037c7a -1002de20: f040 0210 orr.w r2, r0, #16 -1002de24: b2d2 uxtb r2, r2 -1002de26: f240 5151 movw r1, #1361 ; 0x551 -1002de2a: 4640 mov r0, r8 -1002de2c: f009 ff3a bl 10037ca4 -1002de30: f44f 7181 mov.w r1, #258 ; 0x102 -1002de34: 4640 mov r0, r8 -1002de36: f009 ff20 bl 10037c7a -1002de3a: f000 0003 and.w r0, r0, #3 -1002de3e: ea40 0284 orr.w r2, r0, r4, lsl #2 -1002de42: f44f 7181 mov.w r1, #258 ; 0x102 -1002de46: 4640 mov r0, r8 -1002de48: b2d2 uxtb r2, r2 -1002de4a: f009 ff2b bl 10037ca4 -1002de4e: b9d5 cbnz r5, 1002de86 -1002de50: 4640 mov r0, r8 -1002de52: 2103 movs r1, #3 -1002de54: f7f4 fe8b bl 10022b6e -1002de58: 4604 mov r4, r0 -1002de5a: b978 cbnz r0, 1002de7c -1002de5c: 4640 mov r0, r8 -1002de5e: f7fe fd58 bl 1002c912 -1002de62: 4bbb ldr r3, [pc, #748] ; (1002e150 ) -1002de64: 4640 mov r0, r8 -1002de66: 9303 str r3, [sp, #12] -1002de68: 4bba ldr r3, [pc, #744] ; (1002e154 ) -1002de6a: 4669 mov r1, sp -1002de6c: aa03 add r2, sp, #12 -1002de6e: 9400 str r4, [sp, #0] -1002de70: 9401 str r4, [sp, #4] -1002de72: 9402 str r4, [sp, #8] -1002de74: 9304 str r3, [sp, #16] -1002de76: 9405 str r4, [sp, #20] -1002de78: f7fd f9bc bl 1002b1f4 -1002de7c: 4640 mov r0, r8 -1002de7e: f240 5151 movw r1, #1361 ; 0x551 -1002de82: 2211 movs r2, #17 -1002de84: e7bb b.n 1002ddfe -1002de86: 2c01 cmp r4, #1 -1002de88: d106 bne.n 1002de98 -1002de8a: 4640 mov r0, r8 -1002de8c: f7fe fa49 bl 1002c322 -1002de90: 4640 mov r0, r8 -1002de92: f240 5151 movw r1, #1361 ; 0x551 -1002de96: e0b4 b.n 1002e002 -1002de98: 2c03 cmp r4, #3 -1002de9a: f040 85af bne.w 1002e9fc -1002de9e: 4bad ldr r3, [pc, #692] ; (1002e154 ) -1002dea0: 48ad ldr r0, [pc, #692] ; (1002e158 ) -1002dea2: 2400 movs r4, #0 -1002dea4: e88d 0019 stmia.w sp, {r0, r3, r4} -1002dea8: 4669 mov r1, sp -1002deaa: 4640 mov r0, r8 -1002deac: aa03 add r2, sp, #12 -1002deae: 9403 str r4, [sp, #12] -1002deb0: 9404 str r4, [sp, #16] -1002deb2: 9405 str r4, [sp, #20] -1002deb4: f7fd f99e bl 1002b1f4 -1002deb8: f240 4121 movw r1, #1057 ; 0x421 -1002debc: 22ff movs r2, #255 ; 0xff -1002debe: 4640 mov r0, r8 -1002dec0: f009 fef0 bl 10037ca4 -1002dec4: 4640 mov r0, r8 -1002dec6: f7fe fa2c bl 1002c322 -1002deca: f240 5151 movw r1, #1361 ; 0x551 -1002dece: 2212 movs r2, #18 -1002ded0: 4640 mov r0, r8 -1002ded2: f009 fee7 bl 10037ca4 -1002ded6: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002deda: 4aa0 ldr r2, [pc, #640] ; (1002e15c ) -1002dedc: 4640 mov r0, r8 -1002dede: f009 feef bl 10037cc0 -1002dee2: f240 61a4 movw r1, #1700 ; 0x6a4 -1002dee6: f64f 72ff movw r2, #65535 ; 0xffff -1002deea: 4640 mov r0, r8 -1002deec: f009 fee1 bl 10037cb2 -1002def0: f240 61a2 movw r1, #1698 ; 0x6a2 -1002def4: f44f 6280 mov.w r2, #1024 ; 0x400 -1002def8: 4640 mov r0, r8 -1002defa: f009 feda bl 10037cb2 -1002defe: f240 5159 movw r1, #1369 ; 0x559 -1002df02: 2202 movs r2, #2 -1002df04: 4640 mov r0, r8 -1002df06: f009 fecd bl 10037ca4 -1002df0a: f44f 61ae mov.w r1, #1392 ; 0x570 -1002df0e: 220a movs r2, #10 -1002df10: 4640 mov r0, r8 -1002df12: f009 fec7 bl 10037ca4 -1002df16: f44f 61a2 mov.w r1, #1296 ; 0x510 -1002df1a: 4622 mov r2, r4 -1002df1c: 4640 mov r0, r8 -1002df1e: f009 fec8 bl 10037cb2 -1002df22: f44f 61a8 mov.w r1, #1344 ; 0x540 -1002df26: f64f 7204 movw r2, #65284 ; 0xff04 -1002df2a: 4640 mov r0, r8 -1002df2c: f009 fec1 bl 10037cb2 -1002df30: f44f 61a3 mov.w r1, #1304 ; 0x518 -1002df34: f647 72ff movw r2, #32767 ; 0x7fff -1002df38: 4640 mov r0, r8 -1002df3a: f009 feba bl 10037cb2 -1002df3e: f240 5153 movw r1, #1363 ; 0x553 -1002df42: 2202 movs r2, #2 -1002df44: 4640 mov r0, r8 -1002df46: f009 fead bl 10037ca4 -1002df4a: f240 5151 movw r1, #1361 ; 0x551 -1002df4e: 4640 mov r0, r8 -1002df50: 221e movs r2, #30 -1002df52: f009 fea7 bl 10037ca4 -1002df56: 4640 mov r0, r8 -1002df58: 4621 mov r1, r4 -1002df5a: f7f0 fb07 bl 1001e56c -1002df5e: b158 cbz r0, 1002df78 -1002df60: f44f 61aa mov.w r1, #1360 ; 0x550 -1002df64: 4640 mov r0, r8 -1002df66: f009 fe88 bl 10037c7a -1002df6a: f44f 61aa mov.w r1, #1360 ; 0x550 -1002df6e: f000 02f7 and.w r2, r0, #247 ; 0xf7 -1002df72: 4640 mov r0, r8 -1002df74: f009 fe96 bl 10037ca4 -1002df78: 4640 mov r0, r8 -1002df7a: f44f 61aa mov.w r1, #1360 ; 0x550 -1002df7e: f009 fe7c bl 10037c7a -1002df82: f040 0201 orr.w r2, r0, #1 -1002df86: e24e b.n 1002e426 -1002df88: f44f 61aa mov.w r1, #1360 ; 0x550 -1002df8c: f009 fe75 bl 10037c7a -1002df90: f040 0210 orr.w r2, r0, #16 -1002df94: b2d2 uxtb r2, r2 -1002df96: f44f 61aa mov.w r1, #1360 ; 0x550 -1002df9a: 4640 mov r0, r8 -1002df9c: f009 fe82 bl 10037ca4 -1002dfa0: f44f 7181 mov.w r1, #258 ; 0x102 -1002dfa4: 4640 mov r0, r8 -1002dfa6: f009 fe68 bl 10037c7a -1002dfaa: f000 020c and.w r2, r0, #12 -1002dfae: f44f 7181 mov.w r1, #258 ; 0x102 -1002dfb2: 4640 mov r0, r8 -1002dfb4: 4322 orrs r2, r4 -1002dfb6: f009 fe75 bl 10037ca4 -1002dfba: b9d5 cbnz r5, 1002dff2 -1002dfbc: 4640 mov r0, r8 -1002dfbe: 2103 movs r1, #3 -1002dfc0: f7f4 fdd5 bl 10022b6e -1002dfc4: 4604 mov r4, r0 -1002dfc6: b978 cbnz r0, 1002dfe8 -1002dfc8: 4640 mov r0, r8 -1002dfca: f7fe fca2 bl 1002c912 -1002dfce: 4b60 ldr r3, [pc, #384] ; (1002e150 ) -1002dfd0: 4640 mov r0, r8 -1002dfd2: 9303 str r3, [sp, #12] -1002dfd4: 4b5f ldr r3, [pc, #380] ; (1002e154 ) -1002dfd6: 4669 mov r1, sp -1002dfd8: aa03 add r2, sp, #12 -1002dfda: 9400 str r4, [sp, #0] -1002dfdc: 9401 str r4, [sp, #4] -1002dfde: 9402 str r4, [sp, #8] -1002dfe0: 9304 str r3, [sp, #16] -1002dfe2: 9405 str r4, [sp, #20] -1002dfe4: f7fd f906 bl 1002b1f4 -1002dfe8: 4640 mov r0, r8 -1002dfea: f44f 61aa mov.w r1, #1360 ; 0x550 -1002dfee: 2219 movs r2, #25 -1002dff0: e705 b.n 1002ddfe -1002dff2: 2c01 cmp r4, #1 -1002dff4: d107 bne.n 1002e006 -1002dff6: 4640 mov r0, r8 -1002dff8: f7fe f993 bl 1002c322 -1002dffc: 4640 mov r0, r8 -1002dffe: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e002: 221a movs r2, #26 -1002e004: e6fb b.n 1002ddfe -1002e006: 2c03 cmp r4, #3 -1002e008: f040 84f8 bne.w 1002e9fc -1002e00c: 4b51 ldr r3, [pc, #324] ; (1002e154 ) -1002e00e: 4952 ldr r1, [pc, #328] ; (1002e158 ) -1002e010: 2400 movs r4, #0 -1002e012: e88d 001a stmia.w sp, {r1, r3, r4} -1002e016: 4640 mov r0, r8 -1002e018: 4669 mov r1, sp -1002e01a: aa03 add r2, sp, #12 -1002e01c: 9403 str r4, [sp, #12] -1002e01e: 9404 str r4, [sp, #16] -1002e020: 9405 str r4, [sp, #20] -1002e022: f7fd f8e7 bl 1002b1f4 -1002e026: f240 4121 movw r1, #1057 ; 0x421 -1002e02a: 22ff movs r2, #255 ; 0xff -1002e02c: 4640 mov r0, r8 -1002e02e: f009 fe39 bl 10037ca4 -1002e032: 4640 mov r0, r8 -1002e034: f7fe f975 bl 1002c322 -1002e038: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e03c: 2212 movs r2, #18 -1002e03e: 4640 mov r0, r8 -1002e040: f009 fe30 bl 10037ca4 -1002e044: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e048: 4a44 ldr r2, [pc, #272] ; (1002e15c ) -1002e04a: 4640 mov r0, r8 -1002e04c: f009 fe38 bl 10037cc0 -1002e050: f240 61a4 movw r1, #1700 ; 0x6a4 -1002e054: f64f 72ff movw r2, #65535 ; 0xffff -1002e058: 4640 mov r0, r8 -1002e05a: f009 fe2a bl 10037cb2 -1002e05e: f240 61a2 movw r1, #1698 ; 0x6a2 -1002e062: f44f 6280 mov.w r2, #1024 ; 0x400 -1002e066: 4640 mov r0, r8 -1002e068: f009 fe23 bl 10037cb2 -1002e06c: f240 5159 movw r1, #1369 ; 0x559 -1002e070: 2202 movs r2, #2 -1002e072: 4640 mov r0, r8 -1002e074: f009 fe16 bl 10037ca4 -1002e078: f240 515a movw r1, #1370 ; 0x55a -1002e07c: 220a movs r2, #10 -1002e07e: 4640 mov r0, r8 -1002e080: f009 fe10 bl 10037ca4 -1002e084: f44f 61a2 mov.w r1, #1296 ; 0x510 -1002e088: 4622 mov r2, r4 -1002e08a: 4640 mov r0, r8 -1002e08c: f009 fe11 bl 10037cb2 -1002e090: f44f 61a8 mov.w r1, #1344 ; 0x540 -1002e094: f64f 7204 movw r2, #65284 ; 0xff04 -1002e098: 4640 mov r0, r8 -1002e09a: f009 fe0a bl 10037cb2 -1002e09e: f44f 61a3 mov.w r1, #1304 ; 0x518 -1002e0a2: f647 72ff movw r2, #32767 ; 0x7fff -1002e0a6: 4640 mov r0, r8 -1002e0a8: f009 fe03 bl 10037cb2 -1002e0ac: f240 5153 movw r1, #1363 ; 0x553 -1002e0b0: 2201 movs r2, #1 -1002e0b2: 4640 mov r0, r8 -1002e0b4: f009 fdf6 bl 10037ca4 -1002e0b8: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e0bc: 4640 mov r0, r8 -1002e0be: 221e movs r2, #30 -1002e0c0: f009 fdf0 bl 10037ca4 -1002e0c4: 4640 mov r0, r8 -1002e0c6: 4621 mov r1, r4 -1002e0c8: f7f0 fa50 bl 1001e56c -1002e0cc: b158 cbz r0, 1002e0e6 -1002e0ce: f240 5151 movw r1, #1361 ; 0x551 -1002e0d2: 4640 mov r0, r8 -1002e0d4: f009 fdd1 bl 10037c7a -1002e0d8: f240 5151 movw r1, #1361 ; 0x551 -1002e0dc: f000 02f7 and.w r2, r0, #247 ; 0xf7 -1002e0e0: 4640 mov r0, r8 -1002e0e2: f009 fddf bl 10037ca4 -1002e0e6: f240 5151 movw r1, #1361 ; 0x551 -1002e0ea: 4640 mov r0, r8 -1002e0ec: f009 fdc5 bl 10037c7a -1002e0f0: f240 5151 movw r1, #1361 ; 0x551 -1002e0f4: f040 0201 orr.w r2, r0, #1 -1002e0f8: 4640 mov r0, r8 -1002e0fa: e67f b.n 1002ddfc -1002e0fc: f641 036a movw r3, #6250 ; 0x186a -1002e100: 5cc3 ldrb r3, [r0, r3] -1002e102: 2500 movs r5, #0 -1002e104: 2b01 cmp r3, #1 -1002e106: bf14 ite ne -1002e108: f44f 66c2 movne.w r6, #1552 ; 0x610 -1002e10c: f44f 66e0 moveq.w r6, #1792 ; 0x700 -1002e110: 19a9 adds r1, r5, r6 -1002e112: 5d62 ldrb r2, [r4, r5] -1002e114: 4640 mov r0, r8 -1002e116: 3501 adds r5, #1 -1002e118: f009 fdc4 bl 10037ca4 -1002e11c: 2d06 cmp r5, #6 -1002e11e: d1f7 bne.n 1002e110 -1002e120: f000 bc6c b.w 1002e9fc -1002e124: f641 036a movw r3, #6250 ; 0x186a -1002e128: 5cc3 ldrb r3, [r0, r3] -1002e12a: 2b01 cmp r3, #1 -1002e12c: 7823 ldrb r3, [r4, #0] -1002e12e: bf14 ite ne -1002e130: f44f 66c3 movne.w r6, #1560 ; 0x618 -1002e134: f44f 66e1 moveq.w r6, #1800 ; 0x708 -1002e138: b10b cbz r3, 1002e13e -1002e13a: 2500 movs r5, #0 -1002e13c: e010 b.n 1002e160 -1002e13e: 7863 ldrb r3, [r4, #1] -1002e140: 2b00 cmp r3, #0 -1002e142: d1fa bne.n 1002e13a -1002e144: 78a3 ldrb r3, [r4, #2] -1002e146: 2b00 cmp r3, #0 -1002e148: d1f7 bne.n 1002e13a -1002e14a: f000 bc57 b.w 1002e9fc -1002e14e: bf00 nop -1002e150: 01800100 .word 0x01800100 -1002e154: 01010000 .word 0x01010000 -1002e158: 01800102 .word 0x01800102 -1002e15c: 7000208e .word 0x7000208e -1002e160: 19a9 adds r1, r5, r6 -1002e162: 5d62 ldrb r2, [r4, r5] -1002e164: 4640 mov r0, r8 -1002e166: 3501 adds r5, #1 -1002e168: f009 fd9c bl 10037ca4 -1002e16c: 2d06 cmp r5, #6 -1002e16e: d1f7 bne.n 1002e160 -1002e170: f000 bc44 b.w 1002e9fc -1002e174: aa06 add r2, sp, #24 -1002e176: 2600 movs r6, #0 -1002e178: f822 6d0c strh.w r6, [r2, #-12]! -1002e17c: 4621 mov r1, r4 -1002e17e: f003 fa5d bl 1003163c -1002e182: f8bd 200c ldrh.w r2, [sp, #12] -1002e186: f44f 6188 mov.w r1, #1088 ; 0x440 -1002e18a: f402 72a8 and.w r2, r2, #336 ; 0x150 -1002e18e: f042 020d orr.w r2, r2, #13 -1002e192: f8ad 200c strh.w r2, [sp, #12] -1002e196: 4640 mov r0, r8 -1002e198: 872a strh r2, [r5, #56] ; 0x38 -1002e19a: f002 025d and.w r2, r2, #93 ; 0x5d -1002e19e: f009 fd81 bl 10037ca4 -1002e1a2: f8bd 200c ldrh.w r2, [sp, #12] -1002e1a6: f240 4141 movw r1, #1089 ; 0x441 -1002e1aa: 4640 mov r0, r8 -1002e1ac: 0a12 lsrs r2, r2, #8 -1002e1ae: f009 fd79 bl 10037ca4 -1002e1b2: f8bd 300c ldrh.w r3, [sp, #12] -1002e1b6: 4631 mov r1, r6 -1002e1b8: 2b01 cmp r3, #1 -1002e1ba: b2ca uxtb r2, r1 -1002e1bc: f101 0101 add.w r1, r1, #1 -1002e1c0: d901 bls.n 1002e1c6 -1002e1c2: 085b lsrs r3, r3, #1 -1002e1c4: e7f8 b.n 1002e1b8 -1002e1c6: f8ad 300c strh.w r3, [sp, #12] -1002e1ca: 4640 mov r0, r8 -1002e1cc: f44f 6190 mov.w r1, #1152 ; 0x480 -1002e1d0: e615 b.n 1002ddfe -1002e1d2: f641 026a movw r2, #6250 ; 0x186a -1002e1d6: 5c82 ldrb r2, [r0, r2] -1002e1d8: 7823 ldrb r3, [r4, #0] -1002e1da: 2a01 cmp r2, #1 -1002e1dc: f240 5451 movw r4, #1361 ; 0x551 -1002e1e0: bf18 it ne -1002e1e2: f44f 64aa movne.w r4, #1360 ; 0x550 -1002e1e6: 4621 mov r1, r4 -1002e1e8: b10b cbz r3, 1002e1ee -1002e1ea: 220c movs r2, #12 -1002e1ec: e607 b.n 1002ddfe -1002e1ee: f009 fd44 bl 10037c7a -1002e1f2: 4621 mov r1, r4 -1002e1f4: f000 02f3 and.w r2, r0, #243 ; 0xf3 -1002e1f8: 4640 mov r0, r8 -1002e1fa: e600 b.n 1002ddfe -1002e1fc: f8b0 272a ldrh.w r2, [r0, #1834] ; 0x72a -1002e200: f500 6305 add.w r3, r0, #2128 ; 0x850 -1002e204: 0292 lsls r2, r2, #10 -1002e206: e9d3 4500 ldrd r4, r5, [r3] -1002e20a: 17d3 asrs r3, r2, #31 -1002e20c: 4620 mov r0, r4 -1002e20e: 4629 mov r1, r5 -1002e210: f7e9 fa6c bl 100176ec -1002e214: f5b4 6480 subs.w r4, r4, #1024 ; 0x400 -1002e218: f8d8 3680 ldr.w r3, [r8, #1664] ; 0x680 -1002e21c: f145 35ff adc.w r5, r5, #4294967295 -1002e220: 1a24 subs r4, r4, r0 -1002e222: eb65 0501 sbc.w r5, r5, r1 -1002e226: 07da lsls r2, r3, #31 -1002e228: d502 bpl.n 1002e230 -1002e22a: 4640 mov r0, r8 -1002e22c: f7fe fb71 bl 1002c912 -1002e230: f641 036a movw r3, #6250 ; 0x186a -1002e234: f818 3003 ldrb.w r3, [r8, r3] -1002e238: 4640 mov r0, r8 -1002e23a: 2b01 cmp r3, #1 -1002e23c: d152 bne.n 1002e2e4 -1002e23e: f240 5151 movw r1, #1361 ; 0x551 -1002e242: f009 fd1a bl 10037c7a -1002e246: f240 5151 movw r1, #1361 ; 0x551 -1002e24a: f000 02f7 and.w r2, r0, #247 ; 0xf7 -1002e24e: 4640 mov r0, r8 -1002e250: f009 fd28 bl 10037ca4 -1002e254: f44f 61ad mov.w r1, #1384 ; 0x568 -1002e258: 4622 mov r2, r4 -1002e25a: 4640 mov r0, r8 -1002e25c: f009 fd30 bl 10037cc0 -1002e260: 462a mov r2, r5 -1002e262: f240 516c movw r1, #1388 ; 0x56c -1002e266: 4640 mov r0, r8 -1002e268: f009 fd2a bl 10037cc0 -1002e26c: f240 5151 movw r1, #1361 ; 0x551 -1002e270: 4640 mov r0, r8 -1002e272: f009 fd02 bl 10037c7a -1002e276: f040 0208 orr.w r2, r0, #8 -1002e27a: f240 5151 movw r1, #1361 ; 0x551 -1002e27e: 4640 mov r0, r8 -1002e280: b2d2 uxtb r2, r2 -1002e282: f009 fd0f bl 10037ca4 -1002e286: f8d8 3680 ldr.w r3, [r8, #1664] ; 0x680 -1002e28a: f003 0303 and.w r3, r3, #3 -1002e28e: 2b02 cmp r3, #2 -1002e290: d17c bne.n 1002e38c -1002e292: 4640 mov r0, r8 -1002e294: 2110 movs r1, #16 -1002e296: f7f0 f969 bl 1001e56c -1002e29a: 2800 cmp r0, #0 -1002e29c: d076 beq.n 1002e38c -1002e29e: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e2a2: 4640 mov r0, r8 -1002e2a4: f009 fce9 bl 10037c7a -1002e2a8: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e2ac: f000 02f7 and.w r2, r0, #247 ; 0xf7 -1002e2b0: 4640 mov r0, r8 -1002e2b2: f009 fcf7 bl 10037ca4 -1002e2b6: f44f 61ac mov.w r1, #1376 ; 0x560 -1002e2ba: 4622 mov r2, r4 -1002e2bc: 4640 mov r0, r8 -1002e2be: f009 fcff bl 10037cc0 -1002e2c2: 462a mov r2, r5 -1002e2c4: f240 5164 movw r1, #1380 ; 0x564 -1002e2c8: 4640 mov r0, r8 -1002e2ca: f009 fcf9 bl 10037cc0 -1002e2ce: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e2d2: 4640 mov r0, r8 -1002e2d4: f009 fcd1 bl 10037c7a -1002e2d8: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e2dc: f040 0208 orr.w r2, r0, #8 -1002e2e0: 4640 mov r0, r8 -1002e2e2: e050 b.n 1002e386 -1002e2e4: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e2e8: f009 fcc7 bl 10037c7a -1002e2ec: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e2f0: f000 02f7 and.w r2, r0, #247 ; 0xf7 -1002e2f4: 4640 mov r0, r8 -1002e2f6: f009 fcd5 bl 10037ca4 -1002e2fa: f44f 61ac mov.w r1, #1376 ; 0x560 -1002e2fe: 4622 mov r2, r4 -1002e300: 4640 mov r0, r8 -1002e302: f009 fcdd bl 10037cc0 -1002e306: 462a mov r2, r5 -1002e308: f240 5164 movw r1, #1380 ; 0x564 -1002e30c: 4640 mov r0, r8 -1002e30e: f009 fcd7 bl 10037cc0 -1002e312: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e316: 4640 mov r0, r8 -1002e318: f009 fcaf bl 10037c7a -1002e31c: f040 0208 orr.w r2, r0, #8 -1002e320: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e324: 4640 mov r0, r8 -1002e326: b2d2 uxtb r2, r2 -1002e328: f009 fcbc bl 10037ca4 -1002e32c: f8d8 3680 ldr.w r3, [r8, #1664] ; 0x680 -1002e330: f003 0303 and.w r3, r3, #3 -1002e334: 2b02 cmp r3, #2 -1002e336: d129 bne.n 1002e38c -1002e338: 4640 mov r0, r8 -1002e33a: 2110 movs r1, #16 -1002e33c: f7f0 f916 bl 1001e56c -1002e340: b320 cbz r0, 1002e38c -1002e342: f240 5151 movw r1, #1361 ; 0x551 -1002e346: 4640 mov r0, r8 -1002e348: f009 fc97 bl 10037c7a -1002e34c: f240 5151 movw r1, #1361 ; 0x551 -1002e350: f000 02f7 and.w r2, r0, #247 ; 0xf7 -1002e354: 4640 mov r0, r8 -1002e356: f009 fca5 bl 10037ca4 -1002e35a: f44f 61ad mov.w r1, #1384 ; 0x568 -1002e35e: 4622 mov r2, r4 -1002e360: 4640 mov r0, r8 -1002e362: f009 fcad bl 10037cc0 -1002e366: 462a mov r2, r5 -1002e368: f240 516c movw r1, #1388 ; 0x56c -1002e36c: 4640 mov r0, r8 -1002e36e: f009 fca7 bl 10037cc0 -1002e372: f240 5151 movw r1, #1361 ; 0x551 -1002e376: 4640 mov r0, r8 -1002e378: f009 fc7f bl 10037c7a -1002e37c: f240 5151 movw r1, #1361 ; 0x551 -1002e380: f040 0208 orr.w r2, r0, #8 -1002e384: 4640 mov r0, r8 -1002e386: b2d2 uxtb r2, r2 -1002e388: f009 fc8c bl 10037ca4 -1002e38c: f8d8 3680 ldr.w r3, [r8, #1664] ; 0x680 -1002e390: 07db lsls r3, r3, #31 -1002e392: f140 8333 bpl.w 1002e9fc -1002e396: 4640 mov r0, r8 -1002e398: f7fd ffc3 bl 1002c322 -1002e39c: e32e b.n 1002e9fc -1002e39e: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e3a2: f009 fc78 bl 10037c96 -1002e3a6: 7823 ldrb r3, [r4, #0] -1002e3a8: b113 cbz r3, 1002e3b0 -1002e3aa: f040 02c0 orr.w r2, r0, #192 ; 0xc0 -1002e3ae: e2e7 b.n 1002e980 -1002e3b0: f020 02c0 bic.w r2, r0, #192 ; 0xc0 -1002e3b4: e2e4 b.n 1002e980 -1002e3b6: 2100 movs r1, #0 -1002e3b8: f7f4 fbd9 bl 10022b6e -1002e3bc: b128 cbz r0, 1002e3ca -1002e3be: 4640 mov r0, r8 -1002e3c0: f240 61a4 movw r1, #1700 ; 0x6a4 -1002e3c4: 2200 movs r2, #0 -1002e3c6: f009 fc74 bl 10037cb2 -1002e3ca: f641 036a movw r3, #6250 ; 0x186a -1002e3ce: f818 3003 ldrb.w r3, [r8, r3] -1002e3d2: 4640 mov r0, r8 -1002e3d4: 2b01 cmp r3, #1 -1002e3d6: f240 5153 movw r1, #1363 ; 0x553 -1002e3da: d11a bne.n 1002e412 -1002e3dc: 2202 movs r2, #2 -1002e3de: f009 fc61 bl 10037ca4 -1002e3e2: f240 5151 movw r1, #1361 ; 0x551 -1002e3e6: 4640 mov r0, r8 -1002e3e8: f009 fc47 bl 10037c7a -1002e3ec: f040 0210 orr.w r2, r0, #16 -1002e3f0: b2d2 uxtb r2, r2 -1002e3f2: f240 5151 movw r1, #1361 ; 0x551 -1002e3f6: 4640 mov r0, r8 -1002e3f8: f009 fc54 bl 10037ca4 -1002e3fc: f240 5151 movw r1, #1361 ; 0x551 -1002e400: 4640 mov r0, r8 -1002e402: f009 fc3a bl 10037c7a -1002e406: f240 5151 movw r1, #1361 ; 0x551 -1002e40a: f000 02f7 and.w r2, r0, #247 ; 0xf7 -1002e40e: 4640 mov r0, r8 -1002e410: e4f5 b.n 1002ddfe -1002e412: 2201 movs r2, #1 -1002e414: f009 fc46 bl 10037ca4 -1002e418: 4640 mov r0, r8 -1002e41a: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e41e: f009 fc2c bl 10037c7a -1002e422: f040 0210 orr.w r2, r0, #16 -1002e426: 4640 mov r0, r8 -1002e428: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e42c: e4e6 b.n 1002ddfc -1002e42e: f641 036a movw r3, #6250 ; 0x186a -1002e432: 5cc3 ldrb r3, [r0, r3] -1002e434: f240 5651 movw r6, #1361 ; 0x551 -1002e438: 2b01 cmp r3, #1 -1002e43a: 6903 ldr r3, [r0, #16] -1002e43c: bf18 it ne -1002e43e: f44f 66aa movne.w r6, #1360 ; 0x550 -1002e442: 06df lsls r7, r3, #27 -1002e444: f140 82a6 bpl.w 1002e994 -1002e448: 4640 mov r0, r8 -1002e44a: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e44e: f009 fc22 bl 10037c96 -1002e452: 7823 ldrb r3, [r4, #0] -1002e454: 4607 mov r7, r0 -1002e456: b35b cbz r3, 1002e4b0 -1002e458: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e45c: f027 0280 bic.w r2, r7, #128 ; 0x80 -1002e460: 4640 mov r0, r8 -1002e462: f009 fc2d bl 10037cc0 -1002e466: 4640 mov r0, r8 -1002e468: f240 61a4 movw r1, #1700 ; 0x6a4 -1002e46c: 2200 movs r2, #0 -1002e46e: f009 fc20 bl 10037cb2 -1002e472: f8d8 3010 ldr.w r3, [r8, #16] -1002e476: f013 0f68 tst.w r3, #104 ; 0x68 -1002e47a: f040 828f bne.w 1002e99c -1002e47e: f44f 6188 mov.w r1, #1088 ; 0x440 -1002e482: 4640 mov r0, r8 -1002e484: f009 fc00 bl 10037c88 -1002e488: 2103 movs r1, #3 -1002e48a: f8a5 01a8 strh.w r0, [r5, #424] ; 0x1a8 -1002e48e: 4640 mov r0, r8 -1002e490: f7f4 fb6d bl 10022b6e -1002e494: 2800 cmp r0, #0 -1002e496: f000 82b1 beq.w 1002e9fc -1002e49a: 4640 mov r0, r8 -1002e49c: 2101 movs r1, #1 -1002e49e: f7f0 f865 bl 1001e56c -1002e4a2: 2800 cmp r0, #0 -1002e4a4: f000 82aa beq.w 1002e9fc -1002e4a8: 4640 mov r0, r8 -1002e4aa: f7fe fa32 bl 1002c912 -1002e4ae: e2a5 b.n 1002e9fc -1002e4b0: f8d8 3010 ldr.w r3, [r8, #16] -1002e4b4: f013 0f11 tst.w r3, #17 -1002e4b8: f000 827c beq.w 1002e9b4 -1002e4bc: 4640 mov r0, r8 -1002e4be: f240 61a4 movw r1, #1700 ; 0x6a4 -1002e4c2: f64f 72ff movw r2, #65535 ; 0xffff -1002e4c6: f009 fbf4 bl 10037cb2 -1002e4ca: f8d8 3010 ldr.w r3, [r8, #16] -1002e4ce: f013 0f68 tst.w r3, #104 ; 0x68 -1002e4d2: f040 8277 bne.w 1002e9c4 -1002e4d6: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e4da: f047 0280 orr.w r2, r7, #128 ; 0x80 -1002e4de: 4640 mov r0, r8 -1002e4e0: f009 fbee bl 10037cc0 -1002e4e4: f44f 6188 mov.w r1, #1088 ; 0x440 -1002e4e8: 4640 mov r0, r8 -1002e4ea: f8b5 21a8 ldrh.w r2, [r5, #424] ; 0x1a8 -1002e4ee: f009 fbe0 bl 10037cb2 -1002e4f2: 4640 mov r0, r8 -1002e4f4: 2103 movs r1, #3 -1002e4f6: f7f4 fb3a bl 10022b6e -1002e4fa: 2800 cmp r0, #0 -1002e4fc: f000 827e beq.w 1002e9fc -1002e500: 4640 mov r0, r8 -1002e502: 2101 movs r1, #1 -1002e504: f7f0 f832 bl 1001e56c -1002e508: 2800 cmp r0, #0 -1002e50a: f000 8277 beq.w 1002e9fc -1002e50e: e742 b.n 1002e396 -1002e510: 7823 ldrb r3, [r4, #0] -1002e512: bb93 cbnz r3, 1002e57a -1002e514: 2103 movs r1, #3 -1002e516: f7f4 fb2a bl 10022b6e -1002e51a: b138 cbz r0, 1002e52c -1002e51c: 4640 mov r0, r8 -1002e51e: 2101 movs r1, #1 -1002e520: f7f0 f824 bl 1001e56c -1002e524: b110 cbz r0, 1002e52c -1002e526: 4640 mov r0, r8 -1002e528: f7fe f9f3 bl 1002c912 -1002e52c: f240 61a4 movw r1, #1700 ; 0x6a4 -1002e530: 4640 mov r0, r8 -1002e532: f64f 72ff movw r2, #65535 ; 0xffff -1002e536: f009 fbbc bl 10037cb2 -1002e53a: 4640 mov r0, r8 -1002e53c: 2103 movs r1, #3 -1002e53e: f7f4 fb16 bl 10022b6e -1002e542: b138 cbz r0, 1002e554 -1002e544: 4640 mov r0, r8 -1002e546: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e54a: f009 fba4 bl 10037c96 -1002e54e: f040 0280 orr.w r2, r0, #128 ; 0x80 -1002e552: e006 b.n 1002e562 -1002e554: 4640 mov r0, r8 -1002e556: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e55a: f009 fb9c bl 10037c96 -1002e55e: f040 02c0 orr.w r2, r0, #192 ; 0xc0 -1002e562: 4640 mov r0, r8 -1002e564: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e568: f009 fbaa bl 10037cc0 -1002e56c: f8d8 3010 ldr.w r3, [r8, #16] -1002e570: 071e lsls r6, r3, #28 -1002e572: f100 8232 bmi.w 1002e9da -1002e576: 2407 movs r4, #7 -1002e578: e056 b.n 1002e628 -1002e57a: 2b01 cmp r3, #1 -1002e57c: d11e bne.n 1002e5bc -1002e57e: 2100 movs r1, #0 -1002e580: f7f4 faf5 bl 10022b6e -1002e584: b128 cbz r0, 1002e592 -1002e586: 4640 mov r0, r8 -1002e588: f240 61a4 movw r1, #1700 ; 0x6a4 -1002e58c: 2200 movs r2, #0 -1002e58e: f009 fb90 bl 10037cb2 -1002e592: 4640 mov r0, r8 -1002e594: 2103 movs r1, #3 -1002e596: f7f4 faea bl 10022b6e -1002e59a: b168 cbz r0, 1002e5b8 -1002e59c: 4640 mov r0, r8 -1002e59e: 2101 movs r1, #1 -1002e5a0: f7ef ffe4 bl 1001e56c -1002e5a4: b140 cbz r0, 1002e5b8 -1002e5a6: 4640 mov r0, r8 -1002e5a8: f7fd febb bl 1002c322 -1002e5ac: 4640 mov r0, r8 -1002e5ae: f240 5153 movw r1, #1363 ; 0x553 -1002e5b2: 2203 movs r2, #3 -1002e5b4: f009 fb76 bl 10037ca4 -1002e5b8: 2430 movs r4, #48 ; 0x30 -1002e5ba: e035 b.n 1002e628 -1002e5bc: 2b02 cmp r3, #2 -1002e5be: d1fb bne.n 1002e5b8 -1002e5c0: f641 036a movw r3, #6250 ; 0x186a -1002e5c4: 5cc3 ldrb r3, [r0, r3] -1002e5c6: 2b01 cmp r3, #1 -1002e5c8: d109 bne.n 1002e5de -1002e5ca: f240 5151 movw r1, #1361 ; 0x551 -1002e5ce: f009 fb54 bl 10037c7a -1002e5d2: f240 5151 movw r1, #1361 ; 0x551 -1002e5d6: f000 02ef and.w r2, r0, #239 ; 0xef -1002e5da: 4640 mov r0, r8 -1002e5dc: e008 b.n 1002e5f0 -1002e5de: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e5e2: f009 fb4a bl 10037c7a -1002e5e6: f44f 61aa mov.w r1, #1360 ; 0x550 -1002e5ea: f000 02ef and.w r2, r0, #239 ; 0xef -1002e5ee: 4640 mov r0, r8 -1002e5f0: f009 fb58 bl 10037ca4 -1002e5f4: f8d8 3010 ldr.w r3, [r8, #16] -1002e5f8: f013 0f60 tst.w r3, #96 ; 0x60 -1002e5fc: f040 81f6 bne.w 1002e9ec -1002e600: 2430 movs r4, #48 ; 0x30 -1002e602: 4640 mov r0, r8 -1002e604: 2103 movs r1, #3 -1002e606: f7f4 fab2 bl 10022b6e -1002e60a: b168 cbz r0, 1002e628 -1002e60c: 4640 mov r0, r8 -1002e60e: 2101 movs r1, #1 -1002e610: f7ef ffac bl 1001e56c -1002e614: b140 cbz r0, 1002e628 -1002e616: 4640 mov r0, r8 -1002e618: f7fd fe83 bl 1002c322 -1002e61c: 4640 mov r0, r8 -1002e61e: f240 5153 movw r1, #1363 ; 0x553 -1002e622: 2203 movs r2, #3 -1002e624: f009 fb3e bl 10037ca4 -1002e628: 4640 mov r0, r8 -1002e62a: f240 412a movw r1, #1066 ; 0x42a -1002e62e: ea44 2204 orr.w r2, r4, r4, lsl #8 -1002e632: e197 b.n 1002e964 -1002e634: f240 5154 movw r1, #1364 ; 0x554 -1002e638: 8822 ldrh r2, [r4, #0] -1002e63a: e193 b.n 1002e964 -1002e63c: f240 511b movw r1, #1307 ; 0x51b -1002e640: e027 b.n 1002e692 -1002e642: f240 613c movw r1, #1596 ; 0x63c -1002e646: 7822 ldrb r2, [r4, #0] -1002e648: f009 fb2c bl 10037ca4 -1002e64c: f240 613d movw r1, #1597 ; 0x63d -1002e650: 7862 ldrb r2, [r4, #1] -1002e652: 4640 mov r0, r8 -1002e654: f009 fb26 bl 10037ca4 -1002e658: f240 613e movw r1, #1598 ; 0x63e -1002e65c: 78a2 ldrb r2, [r4, #2] -1002e65e: 4640 mov r0, r8 -1002e660: f009 fb20 bl 10037ca4 -1002e664: 4640 mov r0, r8 -1002e666: f240 613f movw r1, #1599 ; 0x63f -1002e66a: 78e2 ldrb r2, [r4, #3] -1002e66c: f7ff bbc7 b.w 1002ddfe -1002e670: 7823 ldrb r3, [r4, #0] -1002e672: f240 4142 movw r1, #1090 ; 0x442 -1002e676: 2b00 cmp r3, #0 -1002e678: bf14 ite ne -1002e67a: 2280 movne r2, #128 ; 0x80 -1002e67c: 2200 moveq r2, #0 -1002e67e: f7ff bbbe b.w 1002ddfe -1002e682: 6843 ldr r3, [r0, #4] -1002e684: f44f 61d0 mov.w r1, #1664 ; 0x680 -1002e688: 2b03 cmp r3, #3 -1002e68a: d102 bne.n 1002e692 -1002e68c: 222c movs r2, #44 ; 0x2c -1002e68e: f7ff bbb6 b.w 1002ddfe -1002e692: 7822 ldrb r2, [r4, #0] -1002e694: f7ff bbb3 b.w 1002ddfe -1002e698: 6823 ldr r3, [r4, #0] -1002e69a: e01d b.n 1002e6d8 -1002e69c: 7823 ldrb r3, [r4, #0] -1002e69e: b123 cbz r3, 1002e6aa -1002e6a0: f8d5 3224 ldr.w r3, [r5, #548] ; 0x224 -1002e6a4: f8c5 3244 str.w r3, [r5, #580] ; 0x244 -1002e6a8: e1a8 b.n 1002e9fc -1002e6aa: f8d5 3244 ldr.w r3, [r5, #580] ; 0x244 -1002e6ae: e013 b.n 1002e6d8 -1002e6b0: 6823 ldr r3, [r4, #0] -1002e6b2: f06f 4270 mvn.w r2, #4026531840 ; 0xf0000000 -1002e6b6: 4293 cmp r3, r2 -1002e6b8: d106 bne.n 1002e6c8 -1002e6ba: f895 31ae ldrb.w r3, [r5, #430] ; 0x1ae -1002e6be: f885 31ad strb.w r3, [r5, #429] ; 0x1ad -1002e6c2: f8d5 31b0 ldr.w r3, [r5, #432] ; 0x1b0 -1002e6c6: e007 b.n 1002e6d8 -1002e6c8: f8d5 2224 ldr.w r2, [r5, #548] ; 0x224 -1002e6cc: 4313 orrs r3, r2 -1002e6ce: e003 b.n 1002e6d8 -1002e6d0: f8d5 3224 ldr.w r3, [r5, #548] ; 0x224 -1002e6d4: 6822 ldr r2, [r4, #0] -1002e6d6: 4013 ands r3, r2 -1002e6d8: f8c5 3224 str.w r3, [r5, #548] ; 0x224 -1002e6dc: e18e b.n 1002e9fc -1002e6de: f44f 61ce mov.w r1, #1648 ; 0x670 -1002e6e2: f04f 4240 mov.w r2, #3221225472 ; 0xc0000000 -1002e6e6: e14e b.n 1002e986 -1002e6e8: f240 6174 movw r1, #1652 ; 0x674 -1002e6ec: 6822 ldr r2, [r4, #0] -1002e6ee: f009 fae7 bl 10037cc0 -1002e6f2: 6862 ldr r2, [r4, #4] -1002e6f4: 4640 mov r0, r8 -1002e6f6: f042 4200 orr.w r2, r2, #2147483648 ; 0x80000000 -1002e6fa: f44f 61ce mov.w r1, #1648 ; 0x670 -1002e6fe: f442 3280 orr.w r2, r2, #65536 ; 0x10000 -1002e702: e140 b.n 1002e986 -1002e704: f44f 61a0 mov.w r1, #1280 ; 0x500 -1002e708: e00a b.n 1002e720 -1002e70a: f240 5104 movw r1, #1284 ; 0x504 -1002e70e: e007 b.n 1002e720 -1002e710: 6823 ldr r3, [r4, #0] -1002e712: f44f 61a1 mov.w r1, #1288 ; 0x508 -1002e716: f8c5 3180 str.w r3, [r5, #384] ; 0x180 -1002e71a: e001 b.n 1002e720 -1002e71c: f240 510c movw r1, #1292 ; 0x50c -1002e720: 6822 ldr r2, [r4, #0] -1002e722: e130 b.n 1002e986 -1002e724: 7823 ldrb r3, [r4, #0] -1002e726: b16b cbz r3, 1002e744 -1002e728: f013 0f02 tst.w r3, #2 -1002e72c: bf14 ite ne -1002e72e: 2203 movne r2, #3 -1002e730: 2201 moveq r2, #1 -1002e732: 075d lsls r5, r3, #29 -1002e734: bf48 it mi -1002e736: f042 0204 orrmi.w r2, r2, #4 -1002e73a: 071c lsls r4, r3, #28 -1002e73c: d503 bpl.n 1002e746 -1002e73e: f042 0208 orr.w r2, r2, #8 -1002e742: e000 b.n 1002e746 -1002e744: 461a mov r2, r3 -1002e746: 4640 mov r0, r8 -1002e748: f44f 61b8 mov.w r1, #1472 ; 0x5c0 -1002e74c: f7ff bb57 b.w 1002ddfe -1002e750: 7823 ldrb r3, [r4, #0] -1002e752: f885 3e08 strb.w r3, [r5, #3592] ; 0xe08 -1002e756: e151 b.n 1002e9fc -1002e758: 7821 ldrb r1, [r4, #0] -1002e75a: f00c fbdf bl 1003af1c -1002e75e: e14d b.n 1002e9fc -1002e760: 7821 ldrb r1, [r4, #0] -1002e762: f00c fda1 bl 1003b2a8 -1002e766: e149 b.n 1002e9fc -1002e768: 6821 ldr r1, [r4, #0] -1002e76a: f505 7000 add.w r0, r5, #512 ; 0x200 -1002e76e: 29ff cmp r1, #255 ; 0xff -1002e770: bf17 itett ne -1002e772: f895 379c ldrbne.w r3, [r5, #1948] ; 0x79c -1002e776: f895 179d ldrbeq.w r1, [r5, #1949] ; 0x79d -1002e77a: f885 379d strbne.w r3, [r5, #1949] ; 0x79d -1002e77e: b2c9 uxtbne r1, r1 -1002e780: f00a ff3e bl 10039600 -1002e784: e13a b.n 1002e9fc -1002e786: 8823 ldrh r3, [r4, #0] -1002e788: f8a5 3e06 strh.w r3, [r5, #3590] ; 0xe06 -1002e78c: e136 b.n 1002e9fc -1002e78e: f240 5122 movw r1, #1314 ; 0x522 -1002e792: 22ff movs r2, #255 ; 0xff -1002e794: f009 fa86 bl 10037ca4 -1002e798: 4640 mov r0, r8 -1002e79a: f240 41dc movw r1, #1244 ; 0x4dc -1002e79e: f009 fa73 bl 10037c88 -1002e7a2: f508 53a0 add.w r3, r8, #5120 ; 0x1400 -1002e7a6: f8a8 0b48 strh.w r0, [r8, #2888] ; 0xb48 -1002e7aa: f893 307b ldrb.w r3, [r3, #123] ; 0x7b -1002e7ae: 2b01 cmp r3, #1 -1002e7b0: f000 8124 beq.w 1002e9fc -1002e7b4: f44f 7121 mov.w r1, #644 ; 0x284 -1002e7b8: 4640 mov r0, r8 -1002e7ba: f009 fa6c bl 10037c96 -1002e7be: f44f 7121 mov.w r1, #644 ; 0x284 -1002e7c2: f440 2280 orr.w r2, r0, #262144 ; 0x40000 -1002e7c6: 4640 mov r0, r8 -1002e7c8: f009 fa7a bl 10037cc0 -1002e7cc: 2464 movs r4, #100 ; 0x64 -1002e7ce: 4640 mov r0, r8 -1002e7d0: f44f 7121 mov.w r1, #644 ; 0x284 -1002e7d4: f009 fa5f bl 10037c96 -1002e7d8: 0380 lsls r0, r0, #14 -1002e7da: d403 bmi.n 1002e7e4 -1002e7dc: 3c01 subs r4, #1 -1002e7de: f014 04ff ands.w r4, r4, #255 ; 0xff -1002e7e2: d1f4 bne.n 1002e7ce -1002e7e4: 4640 mov r0, r8 -1002e7e6: f44f 7105 mov.w r1, #532 ; 0x214 -1002e7ea: 2200 movs r2, #0 -1002e7ec: f009 fa61 bl 10037cb2 -1002e7f0: 4640 mov r0, r8 -1002e7f2: f44f 7100 mov.w r1, #512 ; 0x200 -1002e7f6: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 -1002e7fa: f009 fa61 bl 10037cc0 -1002e7fe: 2002 movs r0, #2 -1002e800: f7e8 ff38 bl 10017674 -1002e804: e0fa b.n 1002e9fc -1002e806: f240 412a movw r1, #1066 ; 0x42a -1002e80a: f240 1201 movw r2, #257 ; 0x101 -1002e80e: f009 fa50 bl 10037cb2 -1002e812: f44f 747a mov.w r4, #1000 ; 0x3e8 -1002e816: f44f 7100 mov.w r1, #512 ; 0x200 -1002e81a: 4640 mov r0, r8 -1002e81c: f009 fa3b bl 10037c96 -1002e820: f44f 7101 mov.w r1, #516 ; 0x204 -1002e824: 4605 mov r5, r0 -1002e826: 4640 mov r0, r8 -1002e828: f009 fa35 bl 10037c96 -1002e82c: 4285 cmp r5, r0 -1002e82e: d105 bne.n 1002e83c -1002e830: 4640 mov r0, r8 -1002e832: f240 412a movw r1, #1066 ; 0x42a -1002e836: f243 0230 movw r2, #12336 ; 0x3030 -1002e83a: e093 b.n 1002e964 -1002e83c: 200a movs r0, #10 -1002e83e: f7e8 ff09 bl 10017654 -1002e842: 3c01 subs r4, #1 -1002e844: d1e7 bne.n 1002e816 -1002e846: e7f3 b.n 1002e830 -1002e848: 7823 ldrb r3, [r4, #0] -1002e84a: f885 3e09 strb.w r3, [r5, #3593] ; 0xe09 -1002e84e: e0d5 b.n 1002e9fc -1002e850: 6822 ldr r2, [r4, #0] -1002e852: f5b2 4fff cmp.w r2, #32640 ; 0x7f80 -1002e856: f200 80d1 bhi.w 1002e9fc -1002e85a: 327f adds r2, #127 ; 0x7f -1002e85c: f240 6152 movw r1, #1618 ; 0x652 -1002e860: f3c2 12c7 ubfx r2, r2, #7, #8 -1002e864: f7ff bacb b.w 1002ddfe -1002e868: 8822 ldrh r2, [r4, #0] -1002e86a: b2d1 uxtb r1, r2 -1002e86c: 0a12 lsrs r2, r2, #8 -1002e86e: f00c fae5 bl 1003ae3c -1002e872: e0c3 b.n 1002e9fc -1002e874: 7824 ldrb r4, [r4, #0] -1002e876: 2c1f cmp r4, #31 -1002e878: f200 80c0 bhi.w 1002e9fc -1002e87c: f240 41d4 movw r1, #1236 ; 0x4d4 -1002e880: f009 fa09 bl 10037c96 -1002e884: fa20 f204 lsr.w r2, r0, r4 -1002e888: 07d1 lsls r1, r2, #31 -1002e88a: 4603 mov r3, r0 -1002e88c: f100 80b6 bmi.w 1002e9fc -1002e890: 2201 movs r2, #1 -1002e892: 40a2 lsls r2, r4 -1002e894: 4640 mov r0, r8 -1002e896: f240 41d4 movw r1, #1236 ; 0x4d4 -1002e89a: 431a orrs r2, r3 -1002e89c: e073 b.n 1002e986 -1002e89e: 7824 ldrb r4, [r4, #0] -1002e8a0: 2c1f cmp r4, #31 -1002e8a2: f200 80ab bhi.w 1002e9fc -1002e8a6: f240 41d4 movw r1, #1236 ; 0x4d4 -1002e8aa: f009 f9f4 bl 10037c96 -1002e8ae: fa20 f204 lsr.w r2, r0, r4 -1002e8b2: 07d2 lsls r2, r2, #31 -1002e8b4: 4603 mov r3, r0 -1002e8b6: f140 80a1 bpl.w 1002e9fc -1002e8ba: 2201 movs r2, #1 -1002e8bc: 40a2 lsls r2, r4 -1002e8be: 4640 mov r0, r8 -1002e8c0: f240 41d4 movw r1, #1236 ; 0x4d4 -1002e8c4: ea23 0202 bic.w r2, r3, r2 -1002e8c8: e05d b.n 1002e986 -1002e8ca: 7823 ldrb r3, [r4, #0] -1002e8cc: 2b04 cmp r3, #4 -1002e8ce: f200 8095 bhi.w 1002e9fc -1002e8d2: e8df f003 tbb [pc, r3] -1002e8d6: 0f03 .short 0x0f03 -1002e8d8: 0f29 .short 0x0f29 -1002e8da: 29 .byte 0x29 -1002e8db: 00 .byte 0x00 -1002e8dc: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e8e0: f8d8 2c54 ldr.w r2, [r8, #3156] ; 0xc54 -1002e8e4: f009 f9ec bl 10037cc0 -1002e8e8: 4640 mov r0, r8 -1002e8ea: f240 61a4 movw r1, #1700 ; 0x6a4 -1002e8ee: f8b0 2c58 ldrh.w r2, [r0, #3160] ; 0xc58 -1002e8f2: e037 b.n 1002e964 -1002e8f4: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e8f8: f009 f9cd bl 10037c96 -1002e8fc: f240 61a4 movw r1, #1700 ; 0x6a4 -1002e900: f8c8 0c54 str.w r0, [r8, #3156] ; 0xc54 -1002e904: 4640 mov r0, r8 -1002e906: f009 f9bf bl 10037c88 -1002e90a: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e90e: f8a8 0c58 strh.w r0, [r8, #3160] ; 0xc58 -1002e912: 4640 mov r0, r8 -1002e914: f009 f9bf bl 10037c96 -1002e918: f020 02c1 bic.w r2, r0, #193 ; 0xc1 -1002e91c: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e920: 4640 mov r0, r8 -1002e922: f042 0201 orr.w r2, r2, #1 -1002e926: e016 b.n 1002e956 -1002e928: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e92c: f009 f9b3 bl 10037c96 -1002e930: f240 61a4 movw r1, #1700 ; 0x6a4 -1002e934: f8c8 0c54 str.w r0, [r8, #3156] ; 0xc54 -1002e938: 4640 mov r0, r8 -1002e93a: f009 f9a5 bl 10037c88 -1002e93e: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e942: f8a8 0c58 strh.w r0, [r8, #3160] ; 0xc58 -1002e946: 4640 mov r0, r8 -1002e948: f009 f9a5 bl 10037c96 -1002e94c: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e950: f020 02c0 bic.w r2, r0, #192 ; 0xc0 -1002e954: 4640 mov r0, r8 -1002e956: f009 f9b3 bl 10037cc0 -1002e95a: 4640 mov r0, r8 -1002e95c: f240 61a4 movw r1, #1700 ; 0x6a4 -1002e960: f64f 72ff movw r2, #65535 ; 0xffff -1002e964: f009 f9a5 bl 10037cb2 -1002e968: e048 b.n 1002e9fc -1002e96a: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e96e: f009 f992 bl 10037c96 -1002e972: 7823 ldrb r3, [r4, #0] -1002e974: b113 cbz r3, 1002e97c -1002e976: f440 7200 orr.w r2, r0, #512 ; 0x200 -1002e97a: e001 b.n 1002e980 -1002e97c: f420 7200 bic.w r2, r0, #512 ; 0x200 -1002e980: 4640 mov r0, r8 -1002e982: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002e986: f009 f99b bl 10037cc0 -1002e98a: e037 b.n 1002e9fc -1002e98c: 4622 mov r2, r4 -1002e98e: f003 f81d bl 100319cc -1002e992: e033 b.n 1002e9fc -1002e994: 2110 movs r1, #16 -1002e996: f7ef fde9 bl 1001e56c -1002e99a: e555 b.n 1002e448 -1002e99c: 4631 mov r1, r6 -1002e99e: 4640 mov r0, r8 -1002e9a0: f009 f96b bl 10037c7a -1002e9a4: f040 0210 orr.w r2, r0, #16 -1002e9a8: 4631 mov r1, r6 -1002e9aa: 4640 mov r0, r8 -1002e9ac: b2d2 uxtb r2, r2 -1002e9ae: f009 f979 bl 10037ca4 -1002e9b2: e564 b.n 1002e47e -1002e9b4: 4640 mov r0, r8 -1002e9b6: 2111 movs r1, #17 -1002e9b8: f7ef fdd8 bl 1001e56c -1002e9bc: 2800 cmp r0, #0 -1002e9be: f47f ad7d bne.w 1002e4bc -1002e9c2: e582 b.n 1002e4ca -1002e9c4: 4631 mov r1, r6 -1002e9c6: 4640 mov r0, r8 -1002e9c8: f009 f957 bl 10037c7a -1002e9cc: 4631 mov r1, r6 -1002e9ce: f000 02ef and.w r2, r0, #239 ; 0xef -1002e9d2: 4640 mov r0, r8 -1002e9d4: f009 f966 bl 10037ca4 -1002e9d8: e57d b.n 1002e4d6 -1002e9da: f508 53a4 add.w r3, r8, #5248 ; 0x1480 -1002e9de: 3318 adds r3, #24 -1002e9e0: 891b ldrh r3, [r3, #8] -1002e9e2: 2b12 cmp r3, #18 -1002e9e4: bf14 ite ne -1002e9e6: 2430 movne r4, #48 ; 0x30 -1002e9e8: 2407 moveq r4, #7 -1002e9ea: e61d b.n 1002e628 -1002e9ec: 4640 mov r0, r8 -1002e9ee: f240 5142 movw r1, #1346 ; 0x542 -1002e9f2: 2202 movs r2, #2 -1002e9f4: f009 f956 bl 10037ca4 -1002e9f8: 2407 movs r4, #7 -1002e9fa: e602 b.n 1002e602 -1002e9fc: b006 add sp, #24 -1002e9fe: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1002ea02: bf00 nop - -1002ea04 : -1002ea04: b538 push {r3, r4, r5, lr} -1002ea06: 292e cmp r1, #46 ; 0x2e -1002ea08: f241 63c8 movw r3, #5832 ; 0x16c8 -1002ea0c: 4605 mov r5, r0 -1002ea0e: 4614 mov r4, r2 -1002ea10: 58c3 ldr r3, [r0, r3] -1002ea12: d018 beq.n 1002ea46 -1002ea14: d807 bhi.n 1002ea26 -1002ea16: 2917 cmp r1, #23 -1002ea18: d00e beq.n 1002ea38 -1002ea1a: 2918 cmp r1, #24 -1002ea1c: d00f beq.n 1002ea3e -1002ea1e: 2906 cmp r1, #6 -1002ea20: d134 bne.n 1002ea8c -1002ea22: 8f1b ldrh r3, [r3, #56] ; 0x38 -1002ea24: e024 b.n 1002ea70 -1002ea26: 2940 cmp r1, #64 ; 0x40 -1002ea28: d024 beq.n 1002ea74 -1002ea2a: 2946 cmp r1, #70 ; 0x46 -1002ea2c: d026 beq.n 1002ea7c -1002ea2e: 293b cmp r1, #59 ; 0x3b -1002ea30: d12c bne.n 1002ea8c -1002ea32: f8b3 3e06 ldrh.w r3, [r3, #3590] ; 0xe06 -1002ea36: e01b b.n 1002ea70 -1002ea38: f893 303c ldrb.w r3, [r3, #60] ; 0x3c -1002ea3c: e01c b.n 1002ea78 -1002ea3e: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 -1002ea42: 6013 str r3, [r2, #0] -1002ea44: bd38 pop {r3, r4, r5, pc} -1002ea46: f241 73b0 movw r3, #6064 ; 0x17b0 -1002ea4a: 58c3 ldr r3, [r0, r3] -1002ea4c: 2b01 cmp r3, #1 -1002ea4e: d00d beq.n 1002ea6c -1002ea50: f241 4370 movw r3, #5232 ; 0x1470 -1002ea54: 58c3 ldr r3, [r0, r3] -1002ea56: 2b02 cmp r3, #2 -1002ea58: d008 beq.n 1002ea6c -1002ea5a: f44f 61c1 mov.w r1, #1544 ; 0x608 -1002ea5e: f009 f91a bl 10037c96 -1002ea62: f410 2fe0 tst.w r0, #458752 ; 0x70000 -1002ea66: d001 beq.n 1002ea6c -1002ea68: 2300 movs r3, #0 -1002ea6a: e005 b.n 1002ea78 -1002ea6c: 2301 movs r3, #1 -1002ea6e: e003 b.n 1002ea78 -1002ea70: 8023 strh r3, [r4, #0] -1002ea72: bd38 pop {r3, r4, r5, pc} -1002ea74: f893 3e09 ldrb.w r3, [r3, #3593] ; 0xe09 -1002ea78: 7023 strb r3, [r4, #0] -1002ea7a: bd38 pop {r3, r4, r5, pc} -1002ea7c: f240 411a movw r1, #1050 ; 0x41a -1002ea80: f009 f902 bl 10037c88 -1002ea84: f3c0 2080 ubfx r0, r0, #10, #1 -1002ea88: 7020 strb r0, [r4, #0] -1002ea8a: bd38 pop {r3, r4, r5, pc} -1002ea8c: 4628 mov r0, r5 -1002ea8e: 4622 mov r2, r4 -1002ea90: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1002ea94: f002 bf9f b.w 100319d6 - -1002ea98 : -1002ea98: f241 63c8 movw r3, #5832 ; 0x16c8 -1002ea9c: 2909 cmp r1, #9 -1002ea9e: b570 push {r4, r5, r6, lr} -1002eaa0: 4606 mov r6, r0 -1002eaa2: 58c4 ldr r4, [r0, r3] -1002eaa4: d163 bne.n 1002eb6e -1002eaa6: 7813 ldrb r3, [r2, #0] -1002eaa8: b16b cbz r3, 1002eac6 -1002eaaa: 2b01 cmp r3, #1 -1002eaac: d10e bne.n 1002eacc -1002eaae: f8d4 3224 ldr.w r3, [r4, #548] ; 0x224 -1002eab2: 07db lsls r3, r3, #31 -1002eab4: d405 bmi.n 1002eac2 -1002eab6: f44f 6145 mov.w r1, #3152 ; 0xc50 -1002eaba: f009 f8de bl 10037c7a -1002eabe: f884 079c strb.w r0, [r4, #1948] ; 0x79c -1002eac2: f06f 4370 mvn.w r3, #4026531840 ; 0xf0000000 -1002eac6: f8c4 3224 str.w r3, [r4, #548] ; 0x224 -1002eaca: e050 b.n 1002eb6e -1002eacc: 2b02 cmp r3, #2 -1002eace: d104 bne.n 1002eada -1002ead0: f8d4 3224 ldr.w r3, [r4, #548] ; 0x224 -1002ead4: f023 0301 bic.w r3, r3, #1 -1002ead8: e7f5 b.n 1002eac6 -1002eada: 2b03 cmp r3, #3 -1002eadc: d104 bne.n 1002eae8 -1002eade: f8d4 3224 ldr.w r3, [r4, #548] ; 0x224 -1002eae2: f043 0301 orr.w r3, r3, #1 -1002eae6: e7ee b.n 1002eac6 -1002eae8: 2b04 cmp r3, #4 -1002eaea: d107 bne.n 1002eafc -1002eaec: f8d4 3224 ldr.w r3, [r4, #548] ; 0x224 -1002eaf0: f023 7380 bic.w r3, r3, #16777216 ; 0x1000000 -1002eaf4: f8c4 3224 str.w r3, [r4, #548] ; 0x224 -1002eaf8: 2300 movs r3, #0 -1002eafa: e008 b.n 1002eb0e -1002eafc: 2b05 cmp r3, #5 -1002eafe: d109 bne.n 1002eb14 -1002eb00: f8d4 3224 ldr.w r3, [r4, #548] ; 0x224 -1002eb04: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000 -1002eb08: f8c4 3224 str.w r3, [r4, #548] ; 0x224 -1002eb0c: 2301 movs r3, #1 -1002eb0e: f884 399f strb.w r3, [r4, #2463] ; 0x99f -1002eb12: e02c b.n 1002eb6e -1002eb14: 2b06 cmp r3, #6 -1002eb16: f504 7500 add.w r5, r4, #512 ; 0x200 -1002eb1a: d111 bne.n 1002eb40 -1002eb1c: 217f movs r1, #127 ; 0x7f -1002eb1e: 460a mov r2, r1 -1002eb20: 4628 mov r0, r5 -1002eb22: f00a fbcc bl 100392be -1002eb26: f8d4 21b0 ldr.w r2, [r4, #432] ; 0x1b0 -1002eb2a: 2300 movs r3, #0 -1002eb2c: f422 5200 bic.w r2, r2, #8192 ; 0x2000 -1002eb30: f8c4 21b0 str.w r2, [r4, #432] ; 0x1b0 -1002eb34: 4628 mov r0, r5 -1002eb36: 2101 movs r1, #1 -1002eb38: f00a fa16 bl 10038f68 -1002eb3c: 2300 movs r3, #0 -1002eb3e: e010 b.n 1002eb62 -1002eb40: 2b07 cmp r3, #7 -1002eb42: d114 bne.n 1002eb6e -1002eb44: 4628 mov r0, r5 -1002eb46: f00a fbf5 bl 10039334 -1002eb4a: f8d4 21b0 ldr.w r2, [r4, #432] ; 0x1b0 -1002eb4e: 2300 movs r3, #0 -1002eb50: f442 5200 orr.w r2, r2, #8192 ; 0x2000 -1002eb54: f8c4 21b0 str.w r2, [r4, #432] ; 0x1b0 -1002eb58: 4628 mov r0, r5 -1002eb5a: 2101 movs r1, #1 -1002eb5c: f00a fa04 bl 10038f68 -1002eb60: 2301 movs r3, #1 -1002eb62: 4a04 ldr r2, [pc, #16] ; (1002eb74 ) -1002eb64: f506 569c add.w r6, r6, #4992 ; 0x1380 -1002eb68: 7013 strb r3, [r2, #0] -1002eb6a: f886 3079 strb.w r3, [r6, #121] ; 0x79 -1002eb6e: 2001 movs r0, #1 -1002eb70: bd70 pop {r4, r5, r6, pc} -1002eb72: bf00 nop -1002eb74: 1004dd70 .word 0x1004dd70 - -1002eb78 : -1002eb78: f241 63c8 movw r3, #5832 ; 0x16c8 -1002eb7c: 2909 cmp r1, #9 -1002eb7e: 58c3 ldr r3, [r0, r3] -1002eb80: d005 beq.n 1002eb8e -1002eb82: 290d cmp r1, #13 -1002eb84: d006 beq.n 1002eb94 -1002eb86: b939 cbnz r1, 1002eb98 -1002eb88: f8d3 31b4 ldr.w r3, [r3, #436] ; 0x1b4 -1002eb8c: e003 b.n 1002eb96 -1002eb8e: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 -1002eb92: e000 b.n 1002eb96 -1002eb94: 2301 movs r3, #1 -1002eb96: 6013 str r3, [r2, #0] -1002eb98: 2001 movs r0, #1 -1002eb9a: 4770 bx lr - -1002eb9c : -1002eb9c: b510 push {r4, lr} -1002eb9e: f500 53a0 add.w r3, r0, #5120 ; 0x1400 -1002eba2: f893 4035 ldrb.w r4, [r3, #53] ; 0x35 -1002eba6: b114 cbz r4, 1002ebae -1002eba8: 6f1b ldr r3, [r3, #112] ; 0x70 -1002ebaa: 2b02 cmp r3, #2 -1002ebac: d009 beq.n 1002ebc2 -1002ebae: f241 63c8 movw r3, #5832 ; 0x16c8 -1002ebb2: 58c3 ldr r3, [r0, r3] -1002ebb4: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 -1002ebb8: b91b cbnz r3, 1002ebc2 -1002ebba: e8bd 4010 ldmia.w sp!, {r4, lr} -1002ebbe: f00f be7f b.w 1003e8c0 <__PHY_QueryBBReg_8195A_veneer> -1002ebc2: 2000 movs r0, #0 -1002ebc4: bd10 pop {r4, pc} - -1002ebc6 : -1002ebc6: b530 push {r4, r5, lr} -1002ebc8: f500 54a0 add.w r4, r0, #5120 ; 0x1400 -1002ebcc: f894 5035 ldrb.w r5, [r4, #53] ; 0x35 -1002ebd0: b115 cbz r5, 1002ebd8 -1002ebd2: 6f24 ldr r4, [r4, #112] ; 0x70 -1002ebd4: 2c02 cmp r4, #2 -1002ebd6: d009 beq.n 1002ebec -1002ebd8: f241 64c8 movw r4, #5832 ; 0x16c8 -1002ebdc: 5904 ldr r4, [r0, r4] -1002ebde: f894 4e94 ldrb.w r4, [r4, #3732] ; 0xe94 -1002ebe2: b91c cbnz r4, 1002ebec -1002ebe4: e8bd 4030 ldmia.w sp!, {r4, r5, lr} -1002ebe8: f00f be26 b.w 1003e838 <__PHY_SetBBReg_8195A_veneer> -1002ebec: bd30 pop {r4, r5, pc} - ... - -1002ebf0 : -1002ebf0: f241 63c8 movw r3, #5832 ; 0x16c8 -1002ebf4: 58c3 ldr r3, [r0, r3] -1002ebf6: b570 push {r4, r5, r6, lr} -1002ebf8: 251c movs r5, #28 -1002ebfa: fb05 3101 mla r1, r5, r1, r3 -1002ebfe: 4616 mov r6, r2 -1002ec00: f501 75c2 add.w r5, r1, #388 ; 0x184 -1002ec04: f04f 32ff mov.w r2, #4294967295 -1002ec08: f640 0124 movw r1, #2084 ; 0x824 -1002ec0c: 4604 mov r4, r0 -1002ec0e: f7ff ffc5 bl 1002eb9c -1002ec12: b2f6 uxtb r6, r6 -1002ec14: f020 40ff bic.w r0, r0, #2139095040 ; 0x7f800000 -1002ec18: ea40 53c6 orr.w r3, r0, r6, lsl #23 -1002ec1c: f023 4300 bic.w r3, r3, #2147483648 ; 0x80000000 -1002ec20: 4620 mov r0, r4 -1002ec22: f640 0124 movw r1, #2084 ; 0x824 -1002ec26: f04f 32ff mov.w r2, #4294967295 -1002ec2a: f7ff ffcc bl 1002ebc6 -1002ec2e: 4620 mov r0, r4 -1002ec30: f640 0124 movw r1, #2084 ; 0x824 -1002ec34: f04f 32ff mov.w r2, #4294967295 -1002ec38: f7ff ffb0 bl 1002eb9c -1002ec3c: 4606 mov r6, r0 -1002ec3e: f026 4300 bic.w r3, r6, #2147483648 ; 0x80000000 -1002ec42: 4620 mov r0, r4 -1002ec44: f640 0124 movw r1, #2084 ; 0x824 -1002ec48: f04f 32ff mov.w r2, #4294967295 -1002ec4c: f7ff ffbb bl 1002ebc6 -1002ec50: f046 4300 orr.w r3, r6, #2147483648 ; 0x80000000 -1002ec54: f640 0124 movw r1, #2084 ; 0x824 -1002ec58: f04f 32ff mov.w r2, #4294967295 -1002ec5c: 4620 mov r0, r4 -1002ec5e: f7ff ffb2 bl 1002ebc6 -1002ec62: 200a movs r0, #10 -1002ec64: f7e8 fd0e bl 10017684 -1002ec68: 2032 movs r0, #50 ; 0x32 -1002ec6a: f7e8 fd0b bl 10017684 -1002ec6e: 2032 movs r0, #50 ; 0x32 -1002ec70: f7e8 fd08 bl 10017684 -1002ec74: 200a movs r0, #10 -1002ec76: f7e8 fd05 bl 10017684 -1002ec7a: f44f 6102 mov.w r1, #2080 ; 0x820 -1002ec7e: 4620 mov r0, r4 -1002ec80: f44f 7280 mov.w r2, #256 ; 0x100 -1002ec84: f7ff ff8a bl 1002eb9c -1002ec88: f010 0fff tst.w r0, #255 ; 0xff -1002ec8c: bf18 it ne -1002ec8e: 69a9 ldrne r1, [r5, #24] -1002ec90: 4620 mov r0, r4 -1002ec92: bf08 it eq -1002ec94: 6969 ldreq r1, [r5, #20] -1002ec96: 4a02 ldr r2, [pc, #8] ; (1002eca0 ) -1002ec98: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1002ec9c: f7ff bf7e b.w 1002eb9c -1002eca0: 000fffff .word 0x000fffff - -1002eca4 : -1002eca4: b538 push {r3, r4, r5, lr} -1002eca6: 461c mov r4, r3 -1002eca8: f7ff ffa2 bl 1002ebf0 -1002ecac: 4605 mov r5, r0 -1002ecae: 4620 mov r0, r4 -1002ecb0: f00f fdbe bl 1003e830 <__phy_CalculateBitShift_veneer> -1002ecb4: 402c ands r4, r5 -1002ecb6: fa24 f000 lsr.w r0, r4, r0 -1002ecba: bd38 pop {r3, r4, r5, pc} - -1002ecbc : -1002ecbc: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1002ecc0: 461d mov r5, r3 -1002ecc2: 4b13 ldr r3, [pc, #76] ; (1002ed10 ) -1002ecc4: 4606 mov r6, r0 -1002ecc6: 429d cmp r5, r3 -1002ecc8: 4688 mov r8, r1 -1002ecca: 4617 mov r7, r2 -1002eccc: 9c08 ldr r4, [sp, #32] -1002ecce: d00b beq.n 1002ece8 -1002ecd0: f7ff ff8e bl 1002ebf0 -1002ecd4: 4681 mov r9, r0 -1002ecd6: 4628 mov r0, r5 -1002ecd8: f00f fdaa bl 1003e830 <__phy_CalculateBitShift_veneer> -1002ecdc: fa04 f000 lsl.w r0, r4, r0 -1002ece0: ea29 0505 bic.w r5, r9, r5 -1002ece4: ea40 0405 orr.w r4, r0, r5 -1002ece8: f241 63c8 movw r3, #5832 ; 0x16c8 -1002ecec: 58f3 ldr r3, [r6, r3] -1002ecee: 221c movs r2, #28 -1002ecf0: fb02 3208 mla r2, r2, r8, r3 -1002ecf4: f3c4 0413 ubfx r4, r4, #0, #20 -1002ecf8: b2fb uxtb r3, r7 -1002ecfa: 4630 mov r0, r6 -1002ecfc: f8d2 1190 ldr.w r1, [r2, #400] ; 0x190 -1002ed00: ea44 5303 orr.w r3, r4, r3, lsl #20 -1002ed04: f04f 32ff mov.w r2, #4294967295 -1002ed08: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1002ed0c: f7ff bf5b b.w 1002ebc6 -1002ed10: 000fffff .word 0x000fffff - -1002ed14 : -1002ed14: b508 push {r3, lr} -1002ed16: f241 63c8 movw r3, #5832 ; 0x16c8 -1002ed1a: 58c0 ldr r0, [r0, r3] -1002ed1c: f500 7000 add.w r0, r0, #512 ; 0x200 -1002ed20: f00b f9f7 bl 1003a112 -1002ed24: f110 30ff adds.w r0, r0, #4294967295 -1002ed28: bf18 it ne -1002ed2a: 2001 movne r0, #1 -1002ed2c: bd08 pop {r3, pc} - -1002ed2e : -1002ed2e: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -1002ed32: f241 66c8 movw r6, #5832 ; 0x16c8 -1002ed36: 5985 ldr r5, [r0, r6] -1002ed38: f44f 6307 mov.w r3, #2160 ; 0x870 -1002ed3c: f8c5 3184 str.w r3, [r5, #388] ; 0x184 -1002ed40: f44f 6306 mov.w r3, #2144 ; 0x860 -1002ed44: f8c5 3188 str.w r3, [r5, #392] ; 0x188 -1002ed48: f8c5 318c str.w r3, [r5, #396] ; 0x18c -1002ed4c: f44f 6304 mov.w r3, #2112 ; 0x840 -1002ed50: f8c5 3190 str.w r3, [r5, #400] ; 0x190 -1002ed54: f640 0324 movw r3, #2084 ; 0x824 -1002ed58: f8c5 3194 str.w r3, [r5, #404] ; 0x194 -1002ed5c: f44f 630a mov.w r3, #2208 ; 0x8a0 -1002ed60: f8c5 3198 str.w r3, [r5, #408] ; 0x198 -1002ed64: f640 03b8 movw r3, #2232 ; 0x8b8 -1002ed68: f8c5 319c str.w r3, [r5, #412] ; 0x19c -1002ed6c: 2104 movs r1, #4 -1002ed6e: 4604 mov r4, r0 -1002ed70: f008 ff91 bl 10037c96 -1002ed74: 2104 movs r1, #4 -1002ed76: f440 3240 orr.w r2, r0, #196608 ; 0x30000 -1002ed7a: 4620 mov r0, r4 -1002ed7c: f008 ffa0 bl 10037cc0 -1002ed80: 2107 movs r1, #7 -1002ed82: 460a mov r2, r1 -1002ed84: 4620 mov r0, r4 -1002ed86: f008 ff8d bl 10037ca4 -1002ed8a: 2150 movs r1, #80 ; 0x50 -1002ed8c: 2200 movs r2, #0 -1002ed8e: 4620 mov r0, r4 -1002ed90: f008 ff88 bl 10037ca4 -1002ed94: 4620 mov r0, r4 -1002ed96: 59a7 ldr r7, [r4, r6] -1002ed98: f003 fac2 bl 10032320 -1002ed9c: f241 33f4 movw r3, #5108 ; 0x13f4 -1002eda0: 5ce3 ldrb r3, [r4, r3] -1002eda2: f505 7900 add.w r9, r5, #512 ; 0x200 -1002eda6: 2b01 cmp r3, #1 -1002eda8: f507 7800 add.w r8, r7, #512 ; 0x200 -1002edac: d00b beq.n 1002edc6 -1002edae: 2b02 cmp r3, #2 -1002edb0: d005 beq.n 1002edbe -1002edb2: 4640 mov r0, r8 -1002edb4: 2100 movs r1, #0 -1002edb6: f00b f998 bl 1003a0ea -1002edba: b958 cbnz r0, 1002edd4 -1002edbc: e00c b.n 1002edd8 -1002edbe: f897 3043 ldrb.w r3, [r7, #67] ; 0x43 -1002edc2: 2b01 cmp r3, #1 -1002edc4: d1f5 bne.n 1002edb2 -1002edc6: 4640 mov r0, r8 -1002edc8: 2101 movs r1, #1 -1002edca: 2200 movs r2, #0 -1002edcc: f00b f965 bl 1003a09a -1002edd0: 2800 cmp r0, #0 -1002edd2: d0ee beq.n 1002edb2 -1002edd4: 2600 movs r6, #0 -1002edd6: e033 b.n 1002ee40 -1002edd8: 4620 mov r0, r4 -1002edda: f002 ff5d bl 10031c98 -1002edde: f241 33f5 movw r3, #5109 ; 0x13f5 -1002ede2: 5ce3 ldrb r3, [r4, r3] -1002ede4: 2b01 cmp r3, #1 -1002ede6: d005 beq.n 1002edf4 -1002ede8: 2b02 cmp r3, #2 -1002edea: d121 bne.n 1002ee30 -1002edec: f897 3043 ldrb.w r3, [r7, #67] ; 0x43 -1002edf0: 2b02 cmp r3, #2 -1002edf2: d01d beq.n 1002ee30 -1002edf4: 4640 mov r0, r8 -1002edf6: 2104 movs r1, #4 -1002edf8: f00b f977 bl 1003a0ea -1002edfc: f8d7 3208 ldr.w r3, [r7, #520] ; 0x208 -1002ee00: f1d0 0601 rsbs r6, r0, #1 -1002ee04: bf38 it cc -1002ee06: 2600 movcc r6, #0 -1002ee08: 2b01 cmp r3, #1 -1002ee0a: d102 bne.n 1002ee12 -1002ee0c: 4620 mov r0, r4 -1002ee0e: f003 f8bf bl 10031f90 -1002ee12: f241 33f4 movw r3, #5108 ; 0x13f4 -1002ee16: 5ce3 ldrb r3, [r4, r3] -1002ee18: 2b01 cmp r3, #1 -1002ee1a: d005 beq.n 1002ee28 -1002ee1c: 2b02 cmp r3, #2 -1002ee1e: d108 bne.n 1002ee32 -1002ee20: f897 3043 ldrb.w r3, [r7, #67] ; 0x43 -1002ee24: 2b01 cmp r3, #1 -1002ee26: d104 bne.n 1002ee32 -1002ee28: 4620 mov r0, r4 -1002ee2a: f003 f9d1 bl 100321d0 -1002ee2e: e000 b.n 1002ee32 -1002ee30: 2601 movs r6, #1 -1002ee32: 4640 mov r0, r8 -1002ee34: 2101 movs r1, #1 -1002ee36: f00b f958 bl 1003a0ea -1002ee3a: 2800 cmp r0, #0 -1002ee3c: bf18 it ne -1002ee3e: 2600 movne r6, #0 -1002ee40: f895 117b ldrb.w r1, [r5, #379] ; 0x17b -1002ee44: 4648 mov r0, r9 -1002ee46: f001 013f and.w r1, r1, #63 ; 0x3f -1002ee4a: f00f fd3d bl 1003e8c8 <__ROM_odm_SetCrystalCap_veneer> -1002ee4e: 4630 mov r0, r6 -1002ee50: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - -1002ee54 : -1002ee54: f002 ba3a b.w 100312cc - -1002ee58 : -1002ee58: b510 push {r4, lr} -1002ee5a: 460c mov r4, r1 -1002ee5c: 2a00 cmp r2, #0 -1002ee5e: d17f bne.n 1002ef60 -1002ee60: 2b48 cmp r3, #72 ; 0x48 -1002ee62: d05f beq.n 1002ef24 -1002ee64: d824 bhi.n 1002eeb0 -1002ee66: 2b12 cmp r3, #18 -1002ee68: d051 beq.n 1002ef0e -1002ee6a: d810 bhi.n 1002ee8e -1002ee6c: 2b04 cmp r3, #4 -1002ee6e: d046 beq.n 1002eefe -1002ee70: d805 bhi.n 1002ee7e -1002ee72: 2b02 cmp r3, #2 -1002ee74: bf08 it eq -1002ee76: f640 6108 movweq r1, #3592 ; 0xe08 -1002ee7a: d042 beq.n 1002ef02 -1002ee7c: bd10 pop {r4, pc} -1002ee7e: 2b0b cmp r3, #11 -1002ee80: d042 beq.n 1002ef08 -1002ee82: 2b0c cmp r3, #12 -1002ee84: bf08 it eq -1002ee86: f44f 6160 moveq.w r1, #3584 ; 0xe00 -1002ee8a: d05a beq.n 1002ef42 -1002ee8c: bd10 pop {r4, pc} -1002ee8e: 2b18 cmp r3, #24 -1002ee90: d040 beq.n 1002ef14 -1002ee92: d805 bhi.n 1002eea0 -1002ee94: 2b16 cmp r3, #22 -1002ee96: bf08 it eq -1002ee98: f640 016c movweq r1, #2156 ; 0x86c -1002ee9c: d059 beq.n 1002ef52 -1002ee9e: bd10 pop {r4, pc} -1002eea0: 2b24 cmp r3, #36 ; 0x24 -1002eea2: d03c beq.n 1002ef1e -1002eea4: 2b30 cmp r3, #48 ; 0x30 -1002eea6: bf08 it eq -1002eea8: f640 6104 movweq r1, #3588 ; 0xe04 -1002eeac: d049 beq.n 1002ef42 -1002eeae: bd10 pop {r4, pc} -1002eeb0: 2b82 cmp r3, #130 ; 0x82 -1002eeb2: d040 beq.n 1002ef36 -1002eeb4: d810 bhi.n 1002eed8 -1002eeb6: 2b6c cmp r3, #108 ; 0x6c -1002eeb8: d037 beq.n 1002ef2a -1002eeba: d805 bhi.n 1002eec8 -1002eebc: 2b60 cmp r3, #96 ; 0x60 -1002eebe: bf08 it eq -1002eec0: f640 6104 movweq r1, #3588 ; 0xe04 -1002eec4: d028 beq.n 1002ef18 -1002eec6: bd10 pop {r4, pc} -1002eec8: 2b80 cmp r3, #128 ; 0x80 -1002eeca: d031 beq.n 1002ef30 -1002eecc: 2b81 cmp r3, #129 ; 0x81 -1002eece: bf08 it eq -1002eed0: f44f 6161 moveq.w r1, #3600 ; 0xe10 -1002eed4: d015 beq.n 1002ef02 -1002eed6: bd10 pop {r4, pc} -1002eed8: 2b85 cmp r3, #133 ; 0x85 -1002eeda: d034 beq.n 1002ef46 -1002eedc: d807 bhi.n 1002eeee -1002eede: 2b83 cmp r3, #131 ; 0x83 -1002eee0: d02c beq.n 1002ef3c -1002eee2: 2b84 cmp r3, #132 ; 0x84 -1002eee4: bf08 it eq -1002eee6: f640 6114 movweq r1, #3604 ; 0xe14 -1002eeea: d02a beq.n 1002ef42 -1002eeec: bd10 pop {r4, pc} -1002eeee: 2b86 cmp r3, #134 ; 0x86 -1002eef0: d02c beq.n 1002ef4c -1002eef2: 2b87 cmp r3, #135 ; 0x87 -1002eef4: bf08 it eq -1002eef6: f640 6114 movweq r1, #3604 ; 0xe14 -1002eefa: d02a beq.n 1002ef52 -1002eefc: bd10 pop {r4, pc} -1002eefe: f640 016c movw r1, #2156 ; 0x86c -1002ef02: f44f 427f mov.w r2, #65280 ; 0xff00 -1002ef06: e026 b.n 1002ef56 -1002ef08: f640 016c movw r1, #2156 ; 0x86c -1002ef0c: e004 b.n 1002ef18 -1002ef0e: f44f 6160 mov.w r1, #3584 ; 0xe00 -1002ef12: e7f6 b.n 1002ef02 -1002ef14: f44f 6160 mov.w r1, #3584 ; 0xe00 -1002ef18: f44f 027f mov.w r2, #16711680 ; 0xff0000 -1002ef1c: e01b b.n 1002ef56 -1002ef1e: f44f 6160 mov.w r1, #3584 ; 0xe00 -1002ef22: e016 b.n 1002ef52 -1002ef24: f640 6104 movw r1, #3588 ; 0xe04 -1002ef28: e7eb b.n 1002ef02 -1002ef2a: f640 6104 movw r1, #3588 ; 0xe04 -1002ef2e: e010 b.n 1002ef52 -1002ef30: f44f 6161 mov.w r1, #3600 ; 0xe10 -1002ef34: e005 b.n 1002ef42 -1002ef36: f44f 6161 mov.w r1, #3600 ; 0xe10 -1002ef3a: e7ed b.n 1002ef18 -1002ef3c: f44f 6161 mov.w r1, #3600 ; 0xe10 -1002ef40: e007 b.n 1002ef52 -1002ef42: 22ff movs r2, #255 ; 0xff -1002ef44: e007 b.n 1002ef56 -1002ef46: f640 6114 movw r1, #3604 ; 0xe14 -1002ef4a: e7da b.n 1002ef02 -1002ef4c: f640 6114 movw r1, #3604 ; 0xe14 -1002ef50: e7e2 b.n 1002ef18 -1002ef52: f04f 427f mov.w r2, #4278190080 ; 0xff000000 -1002ef56: 4623 mov r3, r4 -1002ef58: e8bd 4010 ldmia.w sp!, {r4, lr} -1002ef5c: f7ff be33 b.w 1002ebc6 -1002ef60: bd10 pop {r4, pc} - -1002ef62 : -1002ef62: 780a ldrb r2, [r1, #0] -1002ef64: f500 509c add.w r0, r0, #4992 ; 0x1380 -1002ef68: f890 3051 ldrb.w r3, [r0, #81] ; 0x51 -1002ef6c: 2a3f cmp r2, #63 ; 0x3f -1002ef6e: bf88 it hi -1002ef70: 223f movhi r2, #63 ; 0x3f -1002ef72: f103 33ff add.w r3, r3, #4294967295 -1002ef76: bf88 it hi -1002ef78: 700a strbhi r2, [r1, #0] -1002ef7a: 2b03 cmp r3, #3 -1002ef7c: d80f bhi.n 1002ef9e -1002ef7e: e8df f003 tbb [pc, r3] -1002ef82: 0502 .short 0x0502 -1002ef84: 0b08 .short 0x0b08 -1002ef86: 780b ldrb r3, [r1, #0] -1002ef88: 3b03 subs r3, #3 -1002ef8a: e007 b.n 1002ef9c -1002ef8c: 780b ldrb r3, [r1, #0] -1002ef8e: 3b06 subs r3, #6 -1002ef90: e004 b.n 1002ef9c -1002ef92: 780b ldrb r3, [r1, #0] -1002ef94: 3b0c subs r3, #12 -1002ef96: e001 b.n 1002ef9c -1002ef98: 780b ldrb r3, [r1, #0] -1002ef9a: 3b12 subs r3, #18 -1002ef9c: 700b strb r3, [r1, #0] -1002ef9e: 4770 bx lr - -1002efa0 : -1002efa0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002efa4: f241 66c8 movw r6, #5832 ; 0x16c8 -1002efa8: b089 sub sp, #36 ; 0x24 -1002efaa: f10d 0e20 add.w lr, sp, #32 -1002efae: 5987 ldr r7, [r0, r6] -1002efb0: f89d b048 ldrb.w fp, [sp, #72] ; 0x48 -1002efb4: 2600 movs r6, #0 -1002efb6: f80e 6d01 strb.w r6, [lr, #-1]! -1002efba: e88d 4800 stmia.w sp, {fp, lr} -1002efbe: 4604 mov r4, r0 -1002efc0: 460d mov r5, r1 -1002efc2: 4690 mov r8, r2 -1002efc4: 9305 str r3, [sp, #20] -1002efc6: f88d 601e strb.w r6, [sp, #30] -1002efca: f002 fe7d bl 10031cc8 -1002efce: 4631 mov r1, r6 -1002efd0: 4632 mov r2, r6 -1002efd2: 4633 mov r3, r6 -1002efd4: 4682 mov sl, r0 -1002efd6: f8cd 8000 str.w r8, [sp] -1002efda: 4620 mov r0, r4 -1002efdc: f002 fee4 bl 10031da8 -1002efe0: f241 33f8 movw r3, #5112 ; 0x13f8 -1002efe4: 5ce1 ldrb r1, [r4, r3] -1002efe6: e88d 0120 stmia.w sp, {r5, r8} -1002efea: f89d 201f ldrb.w r2, [sp, #31] -1002efee: f897 3034 ldrb.w r3, [r7, #52] ; 0x34 -1002eff2: 4681 mov r9, r0 -1002eff4: 9302 str r3, [sp, #8] -1002eff6: 1b93 subs r3, r2, r6 -1002eff8: 425a negs r2, r3 -1002effa: 415a adcs r2, r3 -1002effc: 4620 mov r0, r4 -1002effe: 6afb ldr r3, [r7, #44] ; 0x2c -1002f000: f003 f851 bl 100320a6 -1002f004: 4629 mov r1, r5 -1002f006: 4548 cmp r0, r9 -1002f008: bfd4 ite le -1002f00a: eb0a 0300 addle.w r3, sl, r0 -1002f00e: eb0a 0309 addgt.w r3, sl, r9 -1002f012: 4642 mov r2, r8 -1002f014: 4606 mov r6, r0 -1002f016: 4620 mov r0, r4 -1002f018: f88d 301e strb.w r3, [sp, #30] -1002f01c: f002 fea4 bl 10031d68 -1002f020: f89d 301e ldrb.w r3, [sp, #30] -1002f024: a908 add r1, sp, #32 -1002f026: 4403 add r3, r0 -1002f028: f801 3d02 strb.w r3, [r1, #-2]! -1002f02c: 4607 mov r7, r0 -1002f02e: 4620 mov r0, r4 -1002f030: f7ff ff97 bl 1002ef62 -1002f034: f99d 301e ldrsb.w r3, [sp, #30] -1002f038: f04f 4480 mov.w r4, #1073741824 ; 0x40000000 -1002f03c: 2b3f cmp r3, #63 ; 0x3f -1002f03e: bfc4 itt gt -1002f040: 233f movgt r3, #63 ; 0x3f -1002f042: f88d 301e strbgt.w r3, [sp, #30] -1002f046: f99d 301e ldrsb.w r3, [sp, #30] -1002f04a: 2500 movs r5, #0 -1002f04c: 2b00 cmp r3, #0 -1002f04e: bfbc itt lt -1002f050: 2300 movlt r3, #0 -1002f052: f88d 301e strblt.w r3, [sp, #30] -1002f056: 4b13 ldr r3, [pc, #76] ; (1002f0a4 ) -1002f058: e9d3 2302 ldrd r2, r3, [r3, #8] -1002f05c: 4014 ands r4, r2 -1002f05e: 401d ands r5, r3 -1002f060: ea54 0305 orrs.w r3, r4, r5 -1002f064: d018 beq.n 1002f098 -1002f066: 4b10 ldr r3, [pc, #64] ; (1002f0a8 ) -1002f068: 681a ldr r2, [r3, #0] -1002f06a: 461c mov r4, r3 -1002f06c: b132 cbz r2, 1002f07c -1002f06e: 4b0f ldr r3, [pc, #60] ; (1002f0ac ) -1002f070: 9905 ldr r1, [sp, #20] -1002f072: 6818 ldr r0, [r3, #0] -1002f074: 4642 mov r2, r8 -1002f076: 465b mov r3, fp -1002f078: f7eb fd72 bl 1001ab60 -1002f07c: 6823 ldr r3, [r4, #0] -1002f07e: b15b cbz r3, 1002f098 -1002f080: f99d 301e ldrsb.w r3, [sp, #30] -1002f084: 9700 str r7, [sp, #0] -1002f086: 9301 str r3, [sp, #4] -1002f088: 4b08 ldr r3, [pc, #32] ; (1002f0ac ) -1002f08a: fa4f f18a sxtb.w r1, sl -1002f08e: 6858 ldr r0, [r3, #4] -1002f090: 464a mov r2, r9 -1002f092: 4633 mov r3, r6 -1002f094: f7eb fd64 bl 1001ab60 -1002f098: f89d 001e ldrb.w r0, [sp, #30] -1002f09c: b009 add sp, #36 ; 0x24 -1002f09e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1002f0a2: bf00 nop -1002f0a4: 10000720 .word 0x10000720 -1002f0a8: 10044ec0 .word 0x10044ec0 -1002f0ac: 10043a4c .word 0x10043a4c - -1002f0b0 : -1002f0b0: 2200 movs r2, #0 -1002f0b2: f002 bfc7 b.w 10032044 - -1002f0b6 : -1002f0b6: f241 63c8 movw r3, #5832 ; 0x16c8 -1002f0ba: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1002f0be: 58c5 ldr r5, [r0, r3] -1002f0c0: 4606 mov r6, r0 -1002f0c2: 6aef ldr r7, [r5, #44] ; 0x2c -1002f0c4: f505 7400 add.w r4, r5, #512 ; 0x200 -1002f0c8: b9d7 cbnz r7, 1002f100 -1002f0ca: f895 3034 ldrb.w r3, [r5, #52] ; 0x34 -1002f0ce: 3b0d subs r3, #13 -1002f0d0: 2b01 cmp r3, #1 -1002f0d2: d815 bhi.n 1002f100 -1002f0d4: f44f 6100 mov.w r1, #2048 ; 0x800 -1002f0d8: f44f 62e0 mov.w r2, #1792 ; 0x700 -1002f0dc: 2306 movs r3, #6 -1002f0de: f7ff fd72 bl 1002ebc6 -1002f0e2: 4630 mov r0, r6 -1002f0e4: f44f 6141 mov.w r1, #3088 ; 0xc10 -1002f0e8: f04f 5240 mov.w r2, #805306368 ; 0x30000000 -1002f0ec: 463b mov r3, r7 -1002f0ee: f7ff fd6a bl 1002ebc6 -1002f0f2: 4630 mov r0, r6 -1002f0f4: f640 41e4 movw r1, #3300 ; 0xce4 -1002f0f8: f04f 5240 mov.w r2, #805306368 ; 0x30000000 -1002f0fc: 463b mov r3, r7 -1002f0fe: e015 b.n 1002f12c -1002f100: 4630 mov r0, r6 -1002f102: f44f 6100 mov.w r1, #2048 ; 0x800 -1002f106: f44f 62e0 mov.w r2, #1792 ; 0x700 -1002f10a: 2307 movs r3, #7 -1002f10c: f7ff fd5b bl 1002ebc6 -1002f110: 4630 mov r0, r6 -1002f112: f44f 6141 mov.w r1, #3088 ; 0xc10 -1002f116: f04f 5240 mov.w r2, #805306368 ; 0x30000000 -1002f11a: 2301 movs r3, #1 -1002f11c: f7ff fd53 bl 1002ebc6 -1002f120: 4630 mov r0, r6 -1002f122: f640 41e4 movw r1, #3300 ; 0xce4 -1002f126: f04f 5240 mov.w r2, #805306368 ; 0x30000000 -1002f12a: 2301 movs r3, #1 -1002f12c: f7ff fd4b bl 1002ebc6 -1002f130: 4620 mov r0, r4 -1002f132: f44f 6144 mov.w r1, #3136 ; 0xc40 -1002f136: f04f 52f8 mov.w r2, #520093696 ; 0x1f000000 -1002f13a: 231f movs r3, #31 -1002f13c: f00b f804 bl 1003a148 -1002f140: 4620 mov r0, r4 -1002f142: f44f 6144 mov.w r1, #3136 ; 0xc40 -1002f146: f44f 7200 mov.w r2, #512 ; 0x200 -1002f14a: 2300 movs r3, #0 -1002f14c: f00a fffc bl 1003a148 -1002f150: 4620 mov r0, r4 -1002f152: f44f 6154 mov.w r1, #3392 ; 0xd40 -1002f156: f04f 32ff mov.w r2, #4294967295 -1002f15a: 2300 movs r3, #0 -1002f15c: f00a fff4 bl 1003a148 -1002f160: 4620 mov r0, r4 -1002f162: f640 5144 movw r1, #3396 ; 0xd44 -1002f166: f04f 32ff mov.w r2, #4294967295 -1002f16a: 2300 movs r3, #0 -1002f16c: f00a ffec bl 1003a148 -1002f170: 4620 mov r0, r4 -1002f172: f640 514c movw r1, #3404 ; 0xd4c -1002f176: f04f 32ff mov.w r2, #4294967295 -1002f17a: 2300 movs r3, #0 -1002f17c: f00a ffe4 bl 1003a148 -1002f180: 4620 mov r0, r4 -1002f182: f640 512c movw r1, #3372 ; 0xd2c -1002f186: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -1002f18a: 2300 movs r3, #0 -1002f18c: f00a ffdc bl 1003a148 -1002f190: 4620 mov r0, r4 -1002f192: f640 1154 movw r1, #2388 ; 0x954 -1002f196: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 -1002f19a: 2303 movs r3, #3 -1002f19c: f00a ffd4 bl 1003a148 -1002f1a0: 4620 mov r0, r4 -1002f1a2: f44f 6143 mov.w r1, #3120 ; 0xc30 -1002f1a6: 220f movs r2, #15 -1002f1a8: 230a movs r3, #10 -1002f1aa: f00a ffcd bl 1003a148 -1002f1ae: 2300 movs r3, #0 -1002f1b0: 4620 mov r0, r4 -1002f1b2: f640 413c movw r1, #3132 ; 0xc3c -1002f1b6: 2210 movs r2, #16 -1002f1b8: f00a ffc6 bl 1003a148 -1002f1bc: f895 3034 ldrb.w r3, [r5, #52] ; 0x34 -1002f1c0: 3b01 subs r3, #1 -1002f1c2: 2b0d cmp r3, #13 -1002f1c4: f200 80db bhi.w 1002f37e -1002f1c8: e8df f003 tbb [pc, r3] -1002f1cc: d9453907 .word 0xd9453907 -1002f1d0: d9d9d9d9 .word 0xd9d9d9d9 -1002f1d4: d977d9d9 .word 0xd977d9d9 -1002f1d8: a58a .short 0xa58a -1002f1da: 6aeb ldr r3, [r5, #44] ; 0x2c -1002f1dc: 2b00 cmp r3, #0 -1002f1de: f040 80ce bne.w 1002f37e -1002f1e2: 4620 mov r0, r4 -1002f1e4: f44f 6144 mov.w r1, #3136 ; 0xc40 -1002f1e8: f04f 52f8 mov.w r2, #520093696 ; 0x1f000000 -1002f1ec: 2305 movs r3, #5 -1002f1ee: f00a ffab bl 1003a148 -1002f1f2: 4620 mov r0, r4 -1002f1f4: f44f 6144 mov.w r1, #3136 ; 0xc40 -1002f1f8: f44f 7200 mov.w r2, #512 ; 0x200 -1002f1fc: 2301 movs r3, #1 -1002f1fe: f00a ffa3 bl 1003a148 -1002f202: 4620 mov r0, r4 -1002f204: f640 1154 movw r1, #2388 ; 0x954 -1002f208: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 -1002f20c: 2301 movs r3, #1 -1002f20e: f00a ff9b bl 1003a148 -1002f212: 4620 mov r0, r4 -1002f214: f44f 6143 mov.w r1, #3120 ; 0xc30 -1002f218: 220f movs r2, #15 -1002f21a: 2307 movs r3, #7 -1002f21c: f00a ff94 bl 1003a148 -1002f220: 4620 mov r0, r4 -1002f222: f640 413c movw r1, #3132 ; 0xc3c -1002f226: 2210 movs r2, #16 -1002f228: 2301 movs r3, #1 -1002f22a: f00a ff8d bl 1003a148 -1002f22e: 4620 mov r0, r4 -1002f230: f44f 6154 mov.w r1, #3392 ; 0xd40 -1002f234: f04f 32ff mov.w r2, #4294967295 -1002f238: f44f 4340 mov.w r3, #49152 ; 0xc000 -1002f23c: e093 b.n 1002f366 -1002f23e: 6aeb ldr r3, [r5, #44] ; 0x2c -1002f240: 2b00 cmp r3, #0 -1002f242: f040 809c bne.w 1002f37e -1002f246: 4620 mov r0, r4 -1002f248: f640 514c movw r1, #3404 ; 0xd4c -1002f24c: f04f 32ff mov.w r2, #4294967295 -1002f250: f04f 4340 mov.w r3, #3221225472 ; 0xc0000000 -1002f254: e087 b.n 1002f366 -1002f256: 6aeb ldr r3, [r5, #44] ; 0x2c -1002f258: 2b00 cmp r3, #0 -1002f25a: f040 8090 bne.w 1002f37e -1002f25e: 4620 mov r0, r4 -1002f260: f44f 6144 mov.w r1, #3136 ; 0xc40 -1002f264: f04f 52f8 mov.w r2, #520093696 ; 0x1f000000 -1002f268: 2308 movs r3, #8 -1002f26a: f00a ff6d bl 1003a148 -1002f26e: 4620 mov r0, r4 -1002f270: f44f 6144 mov.w r1, #3136 ; 0xc40 -1002f274: f44f 7200 mov.w r2, #512 ; 0x200 -1002f278: 2301 movs r3, #1 -1002f27a: f00a ff65 bl 1003a148 -1002f27e: 4620 mov r0, r4 -1002f280: f640 1154 movw r1, #2388 ; 0x954 -1002f284: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 -1002f288: 2301 movs r3, #1 -1002f28a: f00a ff5d bl 1003a148 -1002f28e: 4620 mov r0, r4 -1002f290: f44f 6143 mov.w r1, #3120 ; 0xc30 -1002f294: 220f movs r2, #15 -1002f296: 2307 movs r3, #7 -1002f298: f00a ff56 bl 1003a148 -1002f29c: 4620 mov r0, r4 -1002f29e: f640 413c movw r1, #3132 ; 0xc3c -1002f2a2: 2210 movs r2, #16 -1002f2a4: 2301 movs r3, #1 -1002f2a6: f00a ff4f bl 1003a148 -1002f2aa: 4620 mov r0, r4 -1002f2ac: f640 514c movw r1, #3404 ; 0xd4c -1002f2b0: f04f 32ff mov.w r2, #4294967295 -1002f2b4: f44f 4300 mov.w r3, #32768 ; 0x8000 -1002f2b8: e055 b.n 1002f366 -1002f2ba: 6aed ldr r5, [r5, #44] ; 0x2c -1002f2bc: 2d01 cmp r5, #1 -1002f2be: d15e bne.n 1002f37e -1002f2c0: 4620 mov r0, r4 -1002f2c2: f640 5144 movw r1, #3396 ; 0xd44 -1002f2c6: f04f 32ff mov.w r2, #4294967295 -1002f2ca: f04f 63c0 mov.w r3, #100663296 ; 0x6000000 -1002f2ce: f00a ff3b bl 1003a148 -1002f2d2: 4620 mov r0, r4 -1002f2d4: f640 512c movw r1, #3372 ; 0xd2c -1002f2d8: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -1002f2dc: 462b mov r3, r5 -1002f2de: e04a b.n 1002f376 -1002f2e0: 6aeb ldr r3, [r5, #44] ; 0x2c -1002f2e2: 2b00 cmp r3, #0 -1002f2e4: d14b bne.n 1002f37e -1002f2e6: 4620 mov r0, r4 -1002f2e8: f44f 6144 mov.w r1, #3136 ; 0xc40 -1002f2ec: f04f 52f8 mov.w r2, #520093696 ; 0x1f000000 -1002f2f0: 230b movs r3, #11 -1002f2f2: f00a ff29 bl 1003a148 -1002f2f6: 4620 mov r0, r4 -1002f2f8: f44f 6144 mov.w r1, #3136 ; 0xc40 -1002f2fc: f44f 7200 mov.w r2, #512 ; 0x200 -1002f300: 2301 movs r3, #1 -1002f302: f00a ff21 bl 1003a148 -1002f306: 4620 mov r0, r4 -1002f308: f44f 6154 mov.w r1, #3392 ; 0xd40 -1002f30c: f04f 32ff mov.w r2, #4294967295 -1002f310: f04f 6380 mov.w r3, #67108864 ; 0x4000000 -1002f314: e027 b.n 1002f366 -1002f316: 6aeb ldr r3, [r5, #44] ; 0x2c -1002f318: bb8b cbnz r3, 1002f37e -1002f31a: 4620 mov r0, r4 -1002f31c: f44f 6144 mov.w r1, #3136 ; 0xc40 -1002f320: f04f 52f8 mov.w r2, #520093696 ; 0x1f000000 -1002f324: 2304 movs r3, #4 -1002f326: f00a ff0f bl 1003a148 -1002f32a: 4620 mov r0, r4 -1002f32c: f44f 6144 mov.w r1, #3136 ; 0xc40 -1002f330: f44f 7200 mov.w r2, #512 ; 0x200 -1002f334: 2301 movs r3, #1 -1002f336: f00a ff07 bl 1003a148 -1002f33a: 4620 mov r0, r4 -1002f33c: f640 1154 movw r1, #2388 ; 0x954 -1002f340: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 -1002f344: 2301 movs r3, #1 -1002f346: f00a feff bl 1003a148 -1002f34a: 4620 mov r0, r4 -1002f34c: f44f 6143 mov.w r1, #3120 ; 0xc30 -1002f350: 220f movs r2, #15 -1002f352: 2307 movs r3, #7 -1002f354: f00a fef8 bl 1003a148 -1002f358: 4620 mov r0, r4 -1002f35a: f640 514c movw r1, #3404 ; 0xd4c -1002f35e: f04f 32ff mov.w r2, #4294967295 -1002f362: f44f 2300 mov.w r3, #524288 ; 0x80000 -1002f366: f00a feef bl 1003a148 -1002f36a: 4620 mov r0, r4 -1002f36c: f640 512c movw r1, #3372 ; 0xd2c -1002f370: f04f 5280 mov.w r2, #268435456 ; 0x10000000 -1002f374: 2301 movs r3, #1 -1002f376: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -1002f37a: f00a bee5 b.w 1003a148 -1002f37e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1002f382 : -1002f382: b570 push {r4, r5, r6, lr} -1002f384: 460e mov r6, r1 -1002f386: f44f 61cd mov.w r1, #1640 ; 0x668 -1002f38a: 4605 mov r5, r0 -1002f38c: f008 fc7c bl 10037c88 -1002f390: 4604 mov r4, r0 -1002f392: b116 cbz r6, 1002f39a -1002f394: 2e01 cmp r6, #1 -1002f396: d007 beq.n 1002f3a8 -1002f398: bd70 pop {r4, r5, r6, pc} -1002f39a: f64f 627f movw r2, #65151 ; 0xfe7f -1002f39e: 4628 mov r0, r5 -1002f3a0: f44f 61cd mov.w r1, #1640 ; 0x668 -1002f3a4: 4022 ands r2, r4 -1002f3a6: e007 b.n 1002f3b8 -1002f3a8: f64f 627f movw r2, #65151 ; 0xfe7f -1002f3ac: 4002 ands r2, r0 -1002f3ae: f44f 61cd mov.w r1, #1640 ; 0x668 -1002f3b2: 4628 mov r0, r5 -1002f3b4: f042 0280 orr.w r2, r2, #128 ; 0x80 -1002f3b8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1002f3bc: f008 bc79 b.w 10037cb2 - -1002f3c0 : -1002f3c0: f241 63c8 movw r3, #5832 ; 0x16c8 -1002f3c4: 58c3 ldr r3, [r0, r3] -1002f3c6: 6ad8 ldr r0, [r3, #44] ; 0x2c -1002f3c8: 2801 cmp r0, #1 -1002f3ca: d108 bne.n 1002f3de -1002f3cc: f893 3035 ldrb.w r3, [r3, #53] ; 0x35 -1002f3d0: 2b02 cmp r3, #2 -1002f3d2: d005 beq.n 1002f3e0 -1002f3d4: 2b01 cmp r3, #1 -1002f3d6: bf0c ite eq -1002f3d8: 2002 moveq r0, #2 -1002f3da: 2000 movne r0, #0 -1002f3dc: 4770 bx lr -1002f3de: 2000 movs r0, #0 -1002f3e0: 4770 bx lr - -1002f3e2 : -1002f3e2: f241 63c8 movw r3, #5832 ; 0x16c8 -1002f3e6: b570 push {r4, r5, r6, lr} -1002f3e8: 58c6 ldr r6, [r0, r3] -1002f3ea: 4604 mov r4, r0 -1002f3ec: 6af1 ldr r1, [r6, #44] ; 0x2c -1002f3ee: f7ff ffc8 bl 1002f382 -1002f3f2: 4620 mov r0, r4 -1002f3f4: f7ff ffe4 bl 1002f3c0 -1002f3f8: f240 4183 movw r1, #1155 ; 0x483 -1002f3fc: 4602 mov r2, r0 -1002f3fe: 4620 mov r0, r4 -1002f400: f008 fc50 bl 10037ca4 -1002f404: 6af5 ldr r5, [r6, #44] ; 0x2c -1002f406: 2d00 cmp r5, #0 -1002f408: d056 beq.n 1002f4b8 -1002f40a: 2d01 cmp r5, #1 -1002f40c: f040 8099 bne.w 1002f542 -1002f410: 4620 mov r0, r4 -1002f412: f44f 6100 mov.w r1, #2048 ; 0x800 -1002f416: 462a mov r2, r5 -1002f418: 462b mov r3, r5 -1002f41a: f7ff fbd4 bl 1002ebc6 -1002f41e: 4620 mov r0, r4 -1002f420: f44f 6110 mov.w r1, #2304 ; 0x900 -1002f424: 462a mov r2, r5 -1002f426: 462b mov r3, r5 -1002f428: f7ff fbcd bl 1002ebc6 -1002f42c: f896 3035 ldrb.w r3, [r6, #53] ; 0x35 -1002f430: 4620 mov r0, r4 -1002f432: f44f 6120 mov.w r1, #2560 ; 0xa00 -1002f436: 2210 movs r2, #16 -1002f438: 085b lsrs r3, r3, #1 -1002f43a: f7ff fbc4 bl 1002ebc6 -1002f43e: 4620 mov r0, r4 -1002f440: f44f 6150 mov.w r1, #3328 ; 0xd00 -1002f444: f44f 6240 mov.w r2, #3072 ; 0xc00 -1002f448: f896 3035 ldrb.w r3, [r6, #53] ; 0x35 -1002f44c: f7ff fbbb bl 1002ebc6 -1002f450: f896 3035 ldrb.w r3, [r6, #53] ; 0x35 -1002f454: 4620 mov r0, r4 -1002f456: 2b01 cmp r3, #1 -1002f458: bf14 ite ne -1002f45a: 2301 movne r3, #1 -1002f45c: 2302 moveq r3, #2 -1002f45e: f640 0118 movw r1, #2072 ; 0x818 -1002f462: f04f 6240 mov.w r2, #201326592 ; 0xc000000 -1002f466: f7ff fbae bl 1002ebc6 -1002f46a: 4620 mov r0, r4 -1002f46c: f44f 6100 mov.w r1, #2048 ; 0x800 -1002f470: f44f 7240 mov.w r2, #768 ; 0x300 -1002f474: 2303 movs r3, #3 -1002f476: f7ff fba6 bl 1002ebc6 -1002f47a: 4620 mov r0, r4 -1002f47c: f640 41e4 movw r1, #3300 ; 0xce4 -1002f480: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 -1002f484: 462b mov r3, r5 -1002f486: f7ff fb9e bl 1002ebc6 -1002f48a: 4620 mov r0, r4 -1002f48c: f44f 6141 mov.w r1, #3088 ; 0xc10 -1002f490: f04f 5240 mov.w r2, #805306368 ; 0x30000000 -1002f494: 462b mov r3, r5 -1002f496: f7ff fb96 bl 1002ebc6 -1002f49a: 4620 mov r0, r4 -1002f49c: f640 1154 movw r1, #2388 ; 0x954 -1002f4a0: f04f 627f mov.w r2, #267386880 ; 0xff00000 -1002f4a4: 2306 movs r3, #6 -1002f4a6: f7ff fb8e bl 1002ebc6 -1002f4aa: 4620 mov r0, r4 -1002f4ac: f640 1154 movw r1, #2388 ; 0x954 -1002f4b0: f44f 2200 mov.w r2, #524288 ; 0x80000 -1002f4b4: 2300 movs r3, #0 -1002f4b6: e042 b.n 1002f53e -1002f4b8: 4620 mov r0, r4 -1002f4ba: f44f 6100 mov.w r1, #2048 ; 0x800 -1002f4be: 2201 movs r2, #1 -1002f4c0: 462b mov r3, r5 -1002f4c2: f7ff fb80 bl 1002ebc6 -1002f4c6: 4620 mov r0, r4 -1002f4c8: f44f 6110 mov.w r1, #2304 ; 0x900 -1002f4cc: 2201 movs r2, #1 -1002f4ce: 462b mov r3, r5 -1002f4d0: f7ff fb79 bl 1002ebc6 -1002f4d4: 4620 mov r0, r4 -1002f4d6: f44f 6100 mov.w r1, #2048 ; 0x800 -1002f4da: f44f 7240 mov.w r2, #768 ; 0x300 -1002f4de: 2303 movs r3, #3 -1002f4e0: f7ff fb71 bl 1002ebc6 -1002f4e4: 4620 mov r0, r4 -1002f4e6: f640 41e4 movw r1, #3300 ; 0xce4 -1002f4ea: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 -1002f4ee: 2301 movs r3, #1 -1002f4f0: f7ff fb69 bl 1002ebc6 -1002f4f4: 4620 mov r0, r4 -1002f4f6: f44f 6141 mov.w r1, #3088 ; 0xc10 -1002f4fa: f04f 5240 mov.w r2, #805306368 ; 0x30000000 -1002f4fe: 2301 movs r3, #1 -1002f500: f7ff fb61 bl 1002ebc6 -1002f504: f896 3034 ldrb.w r3, [r6, #52] ; 0x34 -1002f508: 4620 mov r0, r4 -1002f50a: 3b0d subs r3, #13 -1002f50c: 2b01 cmp r3, #1 -1002f50e: f640 1154 movw r1, #2388 ; 0x954 -1002f512: f04f 627f mov.w r2, #267386880 ; 0xff00000 -1002f516: d809 bhi.n 1002f52c -1002f518: 230b movs r3, #11 -1002f51a: f7ff fb54 bl 1002ebc6 -1002f51e: 4620 mov r0, r4 -1002f520: f640 1154 movw r1, #2388 ; 0x954 -1002f524: f44f 2200 mov.w r2, #524288 ; 0x80000 -1002f528: 462b mov r3, r5 -1002f52a: e008 b.n 1002f53e -1002f52c: 23a8 movs r3, #168 ; 0xa8 -1002f52e: f7ff fb4a bl 1002ebc6 -1002f532: 4620 mov r0, r4 -1002f534: f640 1154 movw r1, #2388 ; 0x954 -1002f538: f44f 2200 mov.w r2, #524288 ; 0x80000 -1002f53c: 2301 movs r3, #1 -1002f53e: f7ff fb42 bl 1002ebc6 -1002f542: 4620 mov r0, r4 -1002f544: 6af1 ldr r1, [r6, #44] ; 0x2c -1002f546: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1002f54a: f001 be9d b.w 10031288 - ... - -1002f550 : -1002f550: b570 push {r4, r5, r6, lr} -1002f552: f241 63c8 movw r3, #5832 ; 0x16c8 -1002f556: 58c5 ldr r5, [r0, r3] -1002f558: 4604 mov r4, r0 -1002f55a: f895 303b ldrb.w r3, [r5, #59] ; 0x3b -1002f55e: f895 1034 ldrb.w r1, [r5, #52] ; 0x34 -1002f562: 2b05 cmp r3, #5 -1002f564: d044 beq.n 1002f5f0 -1002f566: f8d5 21a0 ldr.w r2, [r5, #416] ; 0x1a0 -1002f56a: 4b22 ldr r3, [pc, #136] ; (1002f5f4 ) -1002f56c: 4013 ands r3, r2 -1002f56e: 430b orrs r3, r1 -1002f570: f8c5 31a0 str.w r3, [r5, #416] ; 0x1a0 -1002f574: f3c3 0313 ubfx r3, r3, #0, #20 -1002f578: f8d5 1190 ldr.w r1, [r5, #400] ; 0x190 -1002f57c: f04f 32ff mov.w r2, #4294967295 -1002f580: f043 73c0 orr.w r3, r3, #25165824 ; 0x1800000 -1002f584: f7ff fb1f bl 1002ebc6 -1002f588: 6aee ldr r6, [r5, #44] ; 0x2c -1002f58a: b9ee cbnz r6, 1002f5c8 -1002f58c: f895 3034 ldrb.w r3, [r5, #52] ; 0x34 -1002f590: 4620 mov r0, r4 -1002f592: 3b0d subs r3, #13 -1002f594: 2b01 cmp r3, #1 -1002f596: f640 1154 movw r1, #2388 ; 0x954 -1002f59a: f04f 627f mov.w r2, #267386880 ; 0xff00000 -1002f59e: d809 bhi.n 1002f5b4 -1002f5a0: 230b movs r3, #11 -1002f5a2: f7ff fb10 bl 1002ebc6 -1002f5a6: 4620 mov r0, r4 -1002f5a8: f640 1154 movw r1, #2388 ; 0x954 -1002f5ac: f44f 2200 mov.w r2, #524288 ; 0x80000 -1002f5b0: 4633 mov r3, r6 -1002f5b2: e019 b.n 1002f5e8 -1002f5b4: 23a8 movs r3, #168 ; 0xa8 -1002f5b6: f7ff fb06 bl 1002ebc6 -1002f5ba: 4620 mov r0, r4 -1002f5bc: f640 1154 movw r1, #2388 ; 0x954 -1002f5c0: f44f 2200 mov.w r2, #524288 ; 0x80000 -1002f5c4: 2301 movs r3, #1 -1002f5c6: e00f b.n 1002f5e8 -1002f5c8: 2e01 cmp r6, #1 -1002f5ca: d111 bne.n 1002f5f0 -1002f5cc: 4620 mov r0, r4 -1002f5ce: f640 1154 movw r1, #2388 ; 0x954 -1002f5d2: f04f 627f mov.w r2, #267386880 ; 0xff00000 -1002f5d6: 2306 movs r3, #6 -1002f5d8: f7ff faf5 bl 1002ebc6 -1002f5dc: 4620 mov r0, r4 -1002f5de: f640 1154 movw r1, #2388 ; 0x954 -1002f5e2: f44f 2200 mov.w r2, #524288 ; 0x80000 -1002f5e6: 2300 movs r3, #0 -1002f5e8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1002f5ec: f7ff baeb b.w 1002ebc6 -1002f5f0: bd70 pop {r4, r5, r6, pc} -1002f5f2: bf00 nop -1002f5f4: 0ffffc00 .word 0x0ffffc00 - -1002f5f8 : -1002f5f8: f241 63c8 movw r3, #5832 ; 0x16c8 -1002f5fc: b570 push {r4, r5, r6, lr} -1002f5fe: 58c5 ldr r5, [r0, r3] -1002f600: f241 73ac movw r3, #6060 ; 0x17ac -1002f604: 58c3 ldr r3, [r0, r3] -1002f606: 4604 mov r4, r0 -1002f608: b9eb cbnz r3, 1002f646 -1002f60a: f241 73b0 movw r3, #6064 ; 0x17b0 -1002f60e: 58c6 ldr r6, [r0, r3] -1002f610: b9ce cbnz r6, 1002f646 -1002f612: f895 317c ldrb.w r3, [r5, #380] ; 0x17c -1002f616: b11b cbz r3, 1002f620 -1002f618: f7ff ff9a bl 1002f550 -1002f61c: f885 617c strb.w r6, [r5, #380] ; 0x17c -1002f620: f895 317d ldrb.w r3, [r5, #381] ; 0x17d -1002f624: b12b cbz r3, 1002f632 -1002f626: 4620 mov r0, r4 -1002f628: f7ff fedb bl 1002f3e2 -1002f62c: 2300 movs r3, #0 -1002f62e: f885 317d strb.w r3, [r5, #381] ; 0x17d -1002f632: 4620 mov r0, r4 -1002f634: f7ff fd3f bl 1002f0b6 -1002f638: 4620 mov r0, r4 -1002f63a: f895 1034 ldrb.w r1, [r5, #52] ; 0x34 -1002f63e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1002f642: f7ff bd35 b.w 1002f0b0 -1002f646: bd70 pop {r4, r5, r6, pc} - -1002f648 : -1002f648: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002f64c: b085 sub sp, #20 -1002f64e: 461e mov r6, r3 -1002f650: 9b0e ldr r3, [sp, #56] ; 0x38 -1002f652: 4617 mov r7, r2 -1002f654: 9303 str r3, [sp, #12] -1002f656: f241 63c8 movw r3, #5832 ; 0x16c8 -1002f65a: 58c4 ldr r4, [r0, r3] -1002f65c: 4605 mov r5, r0 -1002f65e: 9a0f ldr r2, [sp, #60] ; 0x3c -1002f660: f89d a044 ldrb.w sl, [sp, #68] ; 0x44 -1002f664: f894 8034 ldrb.w r8, [r4, #52] ; 0x34 -1002f668: 6ae3 ldr r3, [r4, #44] ; 0x2c -1002f66a: f894 b035 ldrb.w fp, [r4, #53] ; 0x35 -1002f66e: f894 9036 ldrb.w r9, [r4, #54] ; 0x36 -1002f672: b929 cbnz r1, 1002f680 -1002f674: 2f00 cmp r7, #0 -1002f676: d03c beq.n 1002f6f2 -1002f678: 2101 movs r1, #1 -1002f67a: f884 117d strb.w r1, [r4, #381] ; 0x17d -1002f67e: e00c b.n 1002f69a -1002f680: 4631 mov r1, r6 -1002f682: 9201 str r2, [sp, #4] -1002f684: 9302 str r3, [sp, #8] -1002f686: f001 ffb6 bl 100315f6 -1002f68a: 9a01 ldr r2, [sp, #4] -1002f68c: 9b02 ldr r3, [sp, #8] -1002f68e: b110 cbz r0, 1002f696 -1002f690: 2101 movs r1, #1 -1002f692: f884 117c strb.w r1, [r4, #380] ; 0x17c -1002f696: 2f00 cmp r7, #0 -1002f698: d1ee bne.n 1002f678 -1002f69a: f8b4 117c ldrh.w r1, [r4, #380] ; 0x17c -1002f69e: b341 cbz r1, 1002f6f2 -1002f6a0: f894 017c ldrb.w r0, [r4, #380] ; 0x17c -1002f6a4: b118 cbz r0, 1002f6ae -1002f6a6: f884 6034 strb.w r6, [r4, #52] ; 0x34 -1002f6aa: f884 6036 strb.w r6, [r4, #54] ; 0x36 -1002f6ae: f894 117d ldrb.w r1, [r4, #381] ; 0x17d -1002f6b2: b129 cbz r1, 1002f6c0 -1002f6b4: 9e03 ldr r6, [sp, #12] -1002f6b6: f884 2035 strb.w r2, [r4, #53] ; 0x35 -1002f6ba: 62e6 str r6, [r4, #44] ; 0x2c -1002f6bc: f884 a036 strb.w sl, [r4, #54] ; 0x36 -1002f6c0: f241 76ac movw r6, #6060 ; 0x17ac -1002f6c4: 59ae ldr r6, [r5, r6] -1002f6c6: b94e cbnz r6, 1002f6dc -1002f6c8: f241 76b0 movw r6, #6064 ; 0x17b0 -1002f6cc: 59ae ldr r6, [r5, r6] -1002f6ce: b92e cbnz r6, 1002f6dc -1002f6d0: 4628 mov r0, r5 -1002f6d2: b005 add sp, #20 -1002f6d4: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002f6d8: f7ff bf8e b.w 1002f5f8 -1002f6dc: b118 cbz r0, 1002f6e6 -1002f6de: f884 8034 strb.w r8, [r4, #52] ; 0x34 -1002f6e2: f884 8036 strb.w r8, [r4, #54] ; 0x36 -1002f6e6: b121 cbz r1, 1002f6f2 -1002f6e8: 62e3 str r3, [r4, #44] ; 0x2c -1002f6ea: f884 b035 strb.w fp, [r4, #53] ; 0x35 -1002f6ee: f884 9036 strb.w r9, [r4, #54] ; 0x36 -1002f6f2: b005 add sp, #20 -1002f6f4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -1002f6f8 : -1002f6f8: b51f push {r0, r1, r2, r3, r4, lr} -1002f6fa: f241 63c8 movw r3, #5832 ; 0x16c8 -1002f6fe: 58c3 ldr r3, [r0, r3] -1002f700: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 -1002f704: e88d 0006 stmia.w sp, {r1, r2} -1002f708: 9202 str r2, [sp, #8] -1002f70a: 9303 str r3, [sp, #12] -1002f70c: 2100 movs r1, #0 -1002f70e: 2201 movs r2, #1 -1002f710: f7ff ff9a bl 1002f648 -1002f714: b005 add sp, #20 -1002f716: f85d fb04 ldr.w pc, [sp], #4 - -1002f71a : -1002f71a: b51f push {r0, r1, r2, r3, r4, lr} -1002f71c: 2200 movs r2, #0 -1002f71e: 460b mov r3, r1 -1002f720: 9103 str r1, [sp, #12] -1002f722: 9200 str r2, [sp, #0] -1002f724: 9201 str r2, [sp, #4] -1002f726: 9202 str r2, [sp, #8] -1002f728: 2101 movs r1, #1 -1002f72a: f7ff ff8d bl 1002f648 -1002f72e: b005 add sp, #20 -1002f730: f85d fb04 ldr.w pc, [sp], #4 - -1002f734 : -1002f734: b51f push {r0, r1, r2, r3, r4, lr} -1002f736: e88d 000c stmia.w sp, {r2, r3} -1002f73a: f89d 3018 ldrb.w r3, [sp, #24] -1002f73e: 460c mov r4, r1 -1002f740: 9103 str r1, [sp, #12] -1002f742: 2101 movs r1, #1 -1002f744: 9302 str r3, [sp, #8] -1002f746: 460a mov r2, r1 -1002f748: 4623 mov r3, r4 -1002f74a: f7ff ff7d bl 1002f648 -1002f74e: b004 add sp, #16 -1002f750: bd10 pop {r4, pc} - -1002f752 : -1002f752: b510 push {r4, lr} -1002f754: 4604 mov r4, r0 -1002f756: f7ea fccf bl 1001a0f8 -1002f75a: 4620 mov r0, r4 -1002f75c: e8bd 4010 ldmia.w sp!, {r4, lr} -1002f760: f7ea bcd4 b.w 1001a10c - -1002f764 : -1002f764: b538 push {r3, r4, r5, lr} -1002f766: 4c08 ldr r4, [pc, #32] ; (1002f788 ) -1002f768: 4605 mov r5, r0 -1002f76a: 6923 ldr r3, [r4, #16] -1002f76c: 2007 movs r0, #7 -1002f76e: 4798 blx r3 -1002f770: 68e3 ldr r3, [r4, #12] -1002f772: 2007 movs r0, #7 -1002f774: 4798 blx r3 -1002f776: 2007 movs r0, #7 -1002f778: 02a9 lsls r1, r5, #10 -1002f77a: f7ea fc3d bl 10019ff8 -1002f77e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1002f782: 2007 movs r0, #7 -1002f784: f7ff bfe5 b.w 1002f752 -1002f788: 10000318 .word 0x10000318 - -1002f78c : -1002f78c: f241 63c8 movw r3, #5832 ; 0x16c8 -1002f790: 58c0 ldr r0, [r0, r3] -1002f792: f600 6078 addw r0, r0, #3704 ; 0xe78 -1002f796: f7e7 be87 b.w 100174a8 - ... - -1002f79c : -1002f79c: f241 63c8 movw r3, #5832 ; 0x16c8 -1002f7a0: 58c0 ldr r0, [r0, r3] -1002f7a2: 4b0a ldr r3, [pc, #40] ; (1002f7cc ) -1002f7a4: b510 push {r4, lr} -1002f7a6: 6819 ldr r1, [r3, #0] -1002f7a8: f3c1 0113 ubfx r1, r1, #0, #20 -1002f7ac: b151 cbz r1, 1002f7c4 -1002f7ae: 2300 movs r3, #0 -1002f7b0: fa21 f403 lsr.w r4, r1, r3 -1002f7b4: 07e4 lsls r4, r4, #31 -1002f7b6: b2da uxtb r2, r3 -1002f7b8: d405 bmi.n 1002f7c6 -1002f7ba: 3301 adds r3, #1 -1002f7bc: 2b14 cmp r3, #20 -1002f7be: d1f7 bne.n 1002f7b0 -1002f7c0: 461a mov r2, r3 -1002f7c2: e000 b.n 1002f7c6 -1002f7c4: 460a mov r2, r1 -1002f7c6: f880 2ea4 strb.w r2, [r0, #3748] ; 0xea4 -1002f7ca: bd10 pop {r4, pc} -1002f7cc: 40080440 .word 0x40080440 - -1002f7d0 : -1002f7d0: f241 63c8 movw r3, #5832 ; 0x16c8 -1002f7d4: 58c0 ldr r0, [r0, r3] -1002f7d6: f500 6066 add.w r0, r0, #3680 ; 0xe60 -1002f7da: f7e7 be65 b.w 100174a8 - ... - -1002f7e0 : -1002f7e0: b510 push {r4, lr} -1002f7e2: 4c09 ldr r4, [pc, #36] ; (1002f808 ) -1002f7e4: 2006 movs r0, #6 -1002f7e6: 6923 ldr r3, [r4, #16] -1002f7e8: 4798 blx r3 -1002f7ea: 68e3 ldr r3, [r4, #12] -1002f7ec: 2006 movs r0, #6 -1002f7ee: 4798 blx r3 -1002f7f0: 2006 movs r0, #6 -1002f7f2: f44f 717a mov.w r1, #1000 ; 0x3e8 -1002f7f6: f7ea fbff bl 10019ff8 -1002f7fa: 2006 movs r0, #6 -1002f7fc: f7ff ffa9 bl 1002f752 -1002f800: 4b02 ldr r3, [pc, #8] ; (1002f80c ) -1002f802: 2201 movs r2, #1 -1002f804: 701a strb r2, [r3, #0] -1002f806: bd10 pop {r4, pc} -1002f808: 10000318 .word 0x10000318 -1002f80c: 1004dd60 .word 0x1004dd60 - -1002f810 : -1002f810: b500 push {lr} -1002f812: 2a06 cmp r2, #6 -1002f814: b089 sub sp, #36 ; 0x24 -1002f816: f88d 101d strb.w r1, [sp, #29] -1002f81a: d101 bne.n 1002f820 -1002f81c: 490c ldr r1, [pc, #48] ; (1002f850 ) -1002f81e: e002 b.n 1002f826 -1002f820: 2a07 cmp r2, #7 -1002f822: d101 bne.n 1002f828 -1002f824: 490b ldr r1, [pc, #44] ; (1002f854 ) -1002f826: 9103 str r1, [sp, #12] -1002f828: 029b lsls r3, r3, #10 -1002f82a: 9300 str r3, [sp, #0] -1002f82c: 2301 movs r3, #1 -1002f82e: 9302 str r3, [sp, #8] -1002f830: 2105 movs r1, #5 -1002f832: 4b09 ldr r3, [pc, #36] ; (1002f858 ) -1002f834: 9104 str r1, [sp, #16] -1002f836: 210e movs r1, #14 -1002f838: 9005 str r0, [sp, #20] -1002f83a: 9106 str r1, [sp, #24] -1002f83c: f88d 201c strb.w r2, [sp, #28] -1002f840: 9101 str r1, [sp, #4] -1002f842: 685b ldr r3, [r3, #4] -1002f844: 4668 mov r0, sp -1002f846: 4798 blx r3 -1002f848: b009 add sp, #36 ; 0x24 -1002f84a: f85d fb04 ldr.w pc, [sp], #4 -1002f84e: bf00 nop -1002f850: 10030b05 .word 0x10030b05 -1002f854: 10030615 .word 0x10030615 -1002f858: 10000318 .word 0x10000318 - -1002f85c : -1002f85c: b500 push {lr} -1002f85e: 2301 movs r3, #1 -1002f860: b089 sub sp, #36 ; 0x24 -1002f862: 2906 cmp r1, #6 -1002f864: f88d 301d strb.w r3, [sp, #29] -1002f868: d101 bne.n 1002f86e -1002f86a: 4b0c ldr r3, [pc, #48] ; (1002f89c ) -1002f86c: e002 b.n 1002f874 -1002f86e: 2907 cmp r1, #7 -1002f870: d101 bne.n 1002f876 -1002f872: 4b0b ldr r3, [pc, #44] ; (1002f8a0 ) -1002f874: 9303 str r3, [sp, #12] -1002f876: 2305 movs r3, #5 -1002f878: 9304 str r3, [sp, #16] -1002f87a: 230e movs r3, #14 -1002f87c: 9306 str r3, [sp, #24] -1002f87e: 9301 str r3, [sp, #4] -1002f880: 2300 movs r3, #0 -1002f882: 9005 str r0, [sp, #20] -1002f884: 9300 str r3, [sp, #0] -1002f886: 4668 mov r0, sp -1002f888: 2301 movs r3, #1 -1002f88a: f88d 101c strb.w r1, [sp, #28] -1002f88e: 9302 str r3, [sp, #8] -1002f890: f7ea fb8c bl 10019fac -1002f894: b009 add sp, #36 ; 0x24 -1002f896: f85d fb04 ldr.w pc, [sp], #4 -1002f89a: bf00 nop -1002f89c: 10030b05 .word 0x10030b05 -1002f8a0: 10030615 .word 0x10030615 - -1002f8a4 : -1002f8a4: 4b0d ldr r3, [pc, #52] ; (1002f8dc ) -1002f8a6: 5cc2 ldrb r2, [r0, r3] -1002f8a8: f002 02fa and.w r2, r2, #250 ; 0xfa -1002f8ac: f042 0201 orr.w r2, r2, #1 -1002f8b0: 54c2 strb r2, [r0, r3] -1002f8b2: 3304 adds r3, #4 -1002f8b4: 5cc2 ldrb r2, [r0, r3] -1002f8b6: f042 021f orr.w r2, r2, #31 -1002f8ba: 54c2 strb r2, [r0, r3] -1002f8bc: 3b0b subs r3, #11 -1002f8be: 5cc2 ldrb r2, [r0, r3] -1002f8c0: f042 020e orr.w r2, r2, #14 -1002f8c4: 54c2 strb r2, [r0, r3] -1002f8c6: f64f 72fd movw r2, #65533 ; 0xfffd -1002f8ca: f8c3 249e str.w r2, [r3, #1182] ; 0x49e -1002f8ce: 330a adds r3, #10 -1002f8d0: 5cc2 ldrb r2, [r0, r3] -1002f8d2: f002 0280 and.w r2, r2, #128 ; 0x80 -1002f8d6: 4311 orrs r1, r2 -1002f8d8: 54c1 strb r1, [r0, r3] -1002f8da: 4770 bx lr -1002f8dc: 4008000d .word 0x4008000d - -1002f8e0 : -1002f8e0: b530 push {r4, r5, lr} -1002f8e2: 4b1b ldr r3, [pc, #108] ; (1002f950 ) -1002f8e4: 4c1b ldr r4, [pc, #108] ; (1002f954 ) -1002f8e6: 5cd0 ldrb r0, [r2, r3] -1002f8e8: f102 4580 add.w r5, r2, #1073741824 ; 0x40000000 -1002f8ec: f000 003f and.w r0, r0, #63 ; 0x3f -1002f8f0: 54d0 strb r0, [r2, r3] -1002f8f2: 4819 ldr r0, [pc, #100] ; (1002f958 ) -1002f8f4: b1a9 cbz r1, 1002f922 -1002f8f6: 5d11 ldrb r1, [r2, r4] -1002f8f8: f105 1508 add.w r5, r5, #524296 ; 0x80008 -1002f8fc: f041 0110 orr.w r1, r1, #16 -1002f900: 5511 strb r1, [r2, r4] -1002f902: 5cd1 ldrb r1, [r2, r3] -1002f904: f041 0180 orr.w r1, r1, #128 ; 0x80 -1002f908: 54d1 strb r1, [r2, r3] -1002f90a: 5a13 ldrh r3, [r2, r0] -1002f90c: f403 4370 and.w r3, r3, #61440 ; 0xf000 -1002f910: f443 7348 orr.w r3, r3, #800 ; 0x320 -1002f914: f043 0301 orr.w r3, r3, #1 -1002f918: 5213 strh r3, [r2, r0] -1002f91a: 682b ldr r3, [r5, #0] -1002f91c: f443 2300 orr.w r3, r3, #524288 ; 0x80000 -1002f920: e014 b.n 1002f94c -1002f922: 5d11 ldrb r1, [r2, r4] -1002f924: f105 1508 add.w r5, r5, #524296 ; 0x80008 -1002f928: f001 01ef and.w r1, r1, #239 ; 0xef -1002f92c: 5511 strb r1, [r2, r4] -1002f92e: 5cd1 ldrb r1, [r2, r3] -1002f930: f041 0140 orr.w r1, r1, #64 ; 0x40 -1002f934: 54d1 strb r1, [r2, r3] -1002f936: 5a13 ldrh r3, [r2, r0] -1002f938: f403 4370 and.w r3, r3, #61440 ; 0xf000 -1002f93c: f443 7391 orr.w r3, r3, #290 ; 0x122 -1002f940: f043 0301 orr.w r3, r3, #1 -1002f944: 5213 strh r3, [r2, r0] -1002f946: 682b ldr r3, [r5, #0] -1002f948: f423 2300 bic.w r3, r3, #524288 ; 0x80000 -1002f94c: 602b str r3, [r5, #0] -1002f94e: bd30 pop {r4, r5, pc} -1002f950: 40080009 .word 0x40080009 -1002f954: 40080029 .word 0x40080029 -1002f958: 40080018 .word 0x40080018 - -1002f95c : -1002f95c: 4b14 ldr r3, [pc, #80] ; (1002f9b0 ) -1002f95e: 4a15 ldr r2, [pc, #84] ; (1002f9b4 ) -1002f960: 781b ldrb r3, [r3, #0] -1002f962: 7812 ldrb r2, [r2, #0] -1002f964: 3303 adds r3, #3 -1002f966: 429a cmp r2, r3 -1002f968: d120 bne.n 1002f9ac -1002f96a: 7d03 ldrb r3, [r0, #20] -1002f96c: 2b0e cmp r3, #14 -1002f96e: d10b bne.n 1002f988 -1002f970: b9e1 cbnz r1, 1002f9ac -1002f972: 4b11 ldr r3, [pc, #68] ; (1002f9b8 ) -1002f974: 71c1 strb r1, [r0, #7] -1002f976: 781a ldrb r2, [r3, #0] -1002f978: f002 027f and.w r2, r2, #127 ; 0x7f -1002f97c: 701a strb r2, [r3, #0] -1002f97e: 230c movs r3, #12 -1002f980: 7503 strb r3, [r0, #20] -1002f982: 4b0e ldr r3, [pc, #56] ; (1002f9bc ) -1002f984: 7019 strb r1, [r3, #0] -1002f986: 4770 bx lr -1002f988: 2b06 cmp r3, #6 -1002f98a: d10f bne.n 1002f9ac -1002f98c: b171 cbz r1, 1002f9ac -1002f98e: 4b0a ldr r3, [pc, #40] ; (1002f9b8 ) -1002f990: 2200 movs r2, #0 -1002f992: 7182 strb r2, [r0, #6] -1002f994: 7819 ldrb r1, [r3, #0] -1002f996: f041 0140 orr.w r1, r1, #64 ; 0x40 -1002f99a: 7019 strb r1, [r3, #0] -1002f99c: 7819 ldrb r1, [r3, #0] -1002f99e: f041 0180 orr.w r1, r1, #128 ; 0x80 -1002f9a2: 7019 strb r1, [r3, #0] -1002f9a4: 2304 movs r3, #4 -1002f9a6: 7503 strb r3, [r0, #20] -1002f9a8: 4b04 ldr r3, [pc, #16] ; (1002f9bc ) -1002f9aa: 701a strb r2, [r3, #0] -1002f9ac: 4770 bx lr -1002f9ae: bf00 nop -1002f9b0: 40080424 .word 0x40080424 -1002f9b4: 4008041c .word 0x4008041c -1002f9b8: 40080604 .word 0x40080604 -1002f9bc: 40080522 .word 0x40080522 - -1002f9c0 : -1002f9c0: 4818 ldr r0, [pc, #96] ; (1002fa24 ) -1002f9c2: b510 push {r4, lr} -1002f9c4: 7001 strb r1, [r0, #0] -1002f9c6: 01c9 lsls r1, r1, #7 -1002f9c8: f501 01f0 add.w r1, r1, #7864320 ; 0x780000 -1002f9cc: f46f 7c39 mvn.w ip, #740 ; 0x2e4 -1002f9d0: 0b0c lsrs r4, r1, #12 -1002f9d2: 4460 add r0, ip -1002f9d4: f3c1 010b ubfx r1, r1, #0, #12 -1002f9d8: 8004 strh r4, [r0, #0] -1002f9da: f441 4000 orr.w r0, r1, #32768 ; 0x8000 -1002f9de: b122 cbz r2, 1002f9ea -1002f9e0: 4a11 ldr r2, [pc, #68] ; (1002fa28 ) -1002f9e2: 5c81 ldrb r1, [r0, r2] -1002f9e4: f041 0180 orr.w r1, r1, #128 ; 0x80 -1002f9e8: 5481 strb r1, [r0, r2] -1002f9ea: 4910 ldr r1, [pc, #64] ; (1002fa2c ) -1002f9ec: 009b lsls r3, r3, #2 -1002f9ee: 5a42 ldrh r2, [r0, r1] -1002f9f0: f043 0302 orr.w r3, r3, #2 -1002f9f4: f422 527c bic.w r2, r2, #16128 ; 0x3f00 -1002f9f8: f022 023f bic.w r2, r2, #63 ; 0x3f -1002f9fc: 0412 lsls r2, r2, #16 -1002f9fe: 0c12 lsrs r2, r2, #16 -1002fa00: 5242 strh r2, [r0, r1] -1002fa02: 4a0b ldr r2, [pc, #44] ; (1002fa30 ) -1002fa04: 5c81 ldrb r1, [r0, r2] -1002fa06: f001 0101 and.w r1, r1, #1 -1002fa0a: 430b orrs r3, r1 -1002fa0c: b2db uxtb r3, r3 -1002fa0e: 5483 strb r3, [r0, r2] -1002fa10: 4b08 ldr r3, [pc, #32] ; (1002fa34 ) -1002fa12: 22ff movs r2, #255 ; 0xff -1002fa14: 54c2 strb r2, [r0, r3] -1002fa16: 3318 adds r3, #24 -1002fa18: 5cc2 ldrb r2, [r0, r3] -1002fa1a: f002 02f7 and.w r2, r2, #247 ; 0xf7 -1002fa1e: 54c2 strb r2, [r0, r3] -1002fa20: bd10 pop {r4, pc} -1002fa22: bf00 nop -1002fa24: 40080425 .word 0x40080425 -1002fa28: 40080021 .word 0x40080021 -1002fa2c: 40080020 .word 0x40080020 -1002fa30: 40080012 .word 0x40080012 -1002fa34: 40080011 .word 0x40080011 - -1002fa38 : -1002fa38: b508 push {r3, lr} -1002fa3a: 4b08 ldr r3, [pc, #32] ; (1002fa5c ) -1002fa3c: 7819 ldrb r1, [r3, #0] -1002fa3e: 3b07 subs r3, #7 -1002fa40: 781b ldrb r3, [r3, #0] -1002fa42: b2c9 uxtb r1, r1 -1002fa44: f003 02ff and.w r2, r3, #255 ; 0xff -1002fa48: b93b cbnz r3, 1002fa5a -1002fa4a: 3102 adds r1, #2 -1002fa4c: 2318 movs r3, #24 -1002fa4e: b2c9 uxtb r1, r1 -1002fa50: f7ff ffb6 bl 1002f9c0 -1002fa54: 4b02 ldr r3, [pc, #8] ; (1002fa60 ) -1002fa56: 2220 movs r2, #32 -1002fa58: 701a strb r2, [r3, #0] -1002fa5a: bd08 pop {r3, pc} -1002fa5c: 40080424 .word 0x40080424 -1002fa60: 4008041f .word 0x4008041f - -1002fa64 : -1002fa64: b510 push {r4, lr} -1002fa66: f240 34ea movw r4, #1002 ; 0x3ea -1002fa6a: 4b0d ldr r3, [pc, #52] ; (1002faa0 ) -1002fa6c: 681b ldr r3, [r3, #0] -1002fa6e: b19b cbz r3, 1002fa98 -1002fa70: 3c01 subs r4, #1 -1002fa72: b2a4 uxth r4, r4 -1002fa74: b964 cbnz r4, 1002fa90 -1002fa76: 4b0b ldr r3, [pc, #44] ; (1002faa4 ) -1002fa78: 781a ldrb r2, [r3, #0] -1002fa7a: f042 0220 orr.w r2, r2, #32 -1002fa7e: 701a strb r2, [r3, #0] -1002fa80: 4b09 ldr r3, [pc, #36] ; (1002faa8 ) -1002fa82: 681b ldr r3, [r3, #0] -1002fa84: 005b lsls r3, r3, #1 -1002fa86: d509 bpl.n 1002fa9c -1002fa88: 4b08 ldr r3, [pc, #32] ; (1002faac ) -1002fa8a: 4809 ldr r0, [pc, #36] ; (1002fab0 ) -1002fa8c: 4798 blx r3 -1002fa8e: e005 b.n 1002fa9c -1002fa90: 4b08 ldr r3, [pc, #32] ; (1002fab4 ) -1002fa92: 2032 movs r0, #50 ; 0x32 -1002fa94: 4798 blx r3 -1002fa96: e7e8 b.n 1002fa6a -1002fa98: 2001 movs r0, #1 -1002fa9a: bd10 pop {r4, pc} -1002fa9c: 4620 mov r0, r4 -1002fa9e: bd10 pop {r4, pc} -1002faa0: 400805f8 .word 0x400805f8 -1002faa4: 400801c0 .word 0x400801c0 -1002faa8: 10000314 .word 0x10000314 -1002faac: 0000f39d .word 0x0000f39d -1002fab0: 10041868 .word 0x10041868 -1002fab4: 00000899 .word 0x00000899 - -1002fab8 : -1002fab8: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -1002fabc: f241 63c8 movw r3, #5832 ; 0x16c8 -1002fac0: 58c5 ldr r5, [r0, r3] -1002fac2: 4b26 ldr r3, [pc, #152] ; (1002fb5c ) -1002fac4: 4604 mov r4, r0 -1002fac6: f893 9000 ldrb.w r9, [r3] -1002faca: 3b07 subs r3, #7 -1002facc: 781b ldrb r3, [r3, #0] -1002face: 460e mov r6, r1 -1002fad0: 4690 mov r8, r2 -1002fad2: f605 6a88 addw sl, r5, #3720 ; 0xe88 -1002fad6: f109 0903 add.w r9, r9, #3 -1002fada: b31b cbz r3, 1002fb24 -1002fadc: 4f20 ldr r7, [pc, #128] ; (1002fb60 ) -1002fade: 23ff movs r3, #255 ; 0xff -1002fae0: f897 b000 ldrb.w fp, [r7] -1002fae4: 703b strb r3, [r7, #0] -1002fae6: f7ff ffbd bl 1002fa64 -1002faea: 2801 cmp r0, #1 -1002faec: fa5f fb8b uxtb.w fp, fp -1002faf0: 4602 mov r2, r0 -1002faf2: d110 bne.n 1002fb16 -1002faf4: 4643 mov r3, r8 -1002faf6: fa5f f189 uxtb.w r1, r9 -1002fafa: 4620 mov r0, r4 -1002fafc: f7ff ff60 bl 1002f9c0 -1002fb00: 4680 mov r8, r0 -1002fb02: 4631 mov r1, r6 -1002fb04: 4620 mov r0, r4 -1002fb06: 4642 mov r2, r8 -1002fb08: f7ff feea bl 1002f8e0 -1002fb0c: 4640 mov r0, r8 -1002fb0e: f895 1ea4 ldrb.w r1, [r5, #3748] ; 0xea4 -1002fb12: f7ff fec7 bl 1002f8a4 -1002fb16: f887 b000 strb.w fp, [r7] -1002fb1a: 4650 mov r0, sl -1002fb1c: 4631 mov r1, r6 -1002fb1e: f7ff ff1d bl 1002f95c -1002fb22: e014 b.n 1002fb4e -1002fb24: 4650 mov r0, sl -1002fb26: f7ff ff19 bl 1002f95c -1002fb2a: fa5f f189 uxtb.w r1, r9 -1002fb2e: 2201 movs r2, #1 -1002fb30: 4643 mov r3, r8 -1002fb32: 4620 mov r0, r4 -1002fb34: f7ff ff44 bl 1002f9c0 -1002fb38: 4607 mov r7, r0 -1002fb3a: 4631 mov r1, r6 -1002fb3c: 4620 mov r0, r4 -1002fb3e: 463a mov r2, r7 -1002fb40: f7ff fece bl 1002f8e0 -1002fb44: 4638 mov r0, r7 -1002fb46: f895 1ea4 ldrb.w r1, [r5, #3748] ; 0xea4 -1002fb4a: f7ff feab bl 1002f8a4 -1002fb4e: 4b05 ldr r3, [pc, #20] ; (1002fb64 ) -1002fb50: 2220 movs r2, #32 -1002fb52: 701a strb r2, [r3, #0] -1002fb54: 2001 movs r0, #1 -1002fb56: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -1002fb5a: bf00 nop -1002fb5c: 40080424 .word 0x40080424 -1002fb60: 40080522 .word 0x40080522 -1002fb64: 4008041f .word 0x4008041f - -1002fb68 : -1002fb68: b508 push {r3, lr} -1002fb6a: f7ff ff7b bl 1002fa64 -1002fb6e: 4b0a ldr r3, [pc, #40] ; (1002fb98 ) -1002fb70: 681a ldr r2, [r3, #0] -1002fb72: f422 3200 bic.w r2, r2, #131072 ; 0x20000 -1002fb76: 601a str r2, [r3, #0] -1002fb78: 223f movs r2, #63 ; 0x3f -1002fb7a: f883 20fc strb.w r2, [r3, #252] ; 0xfc -1002fb7e: f893 20fd ldrb.w r2, [r3, #253] ; 0xfd -1002fb82: f002 02fd and.w r2, r2, #253 ; 0xfd -1002fb86: f883 20fd strb.w r2, [r3, #253] ; 0xfd -1002fb8a: f893 254f ldrb.w r2, [r3, #1359] ; 0x54f -1002fb8e: f042 0220 orr.w r2, r2, #32 -1002fb92: f883 254f strb.w r2, [r3, #1359] ; 0x54f -1002fb96: bd08 pop {r3, pc} -1002fb98: 40080004 .word 0x40080004 - -1002fb9c : -1002fb9c: 4b0a ldr r3, [pc, #40] ; (1002fbc8 ) -1002fb9e: 781a ldrb r2, [r3, #0] -1002fba0: 3bfd subs r3, #253 ; 0xfd -1002fba2: f042 0202 orr.w r2, r2, #2 -1002fba6: f883 20fd strb.w r2, [r3, #253] ; 0xfd -1002fbaa: 22ff movs r2, #255 ; 0xff -1002fbac: f883 20fc strb.w r2, [r3, #252] ; 0xfc -1002fbb0: 2209 movs r2, #9 -1002fbb2: f883 26b3 strb.w r2, [r3, #1715] ; 0x6b3 -1002fbb6: 2286 movs r2, #134 ; 0x86 -1002fbb8: f883 26b0 strb.w r2, [r3, #1712] ; 0x6b0 -1002fbbc: 681a ldr r2, [r3, #0] -1002fbbe: f442 3200 orr.w r2, r2, #131072 ; 0x20000 -1002fbc2: 601a str r2, [r3, #0] -1002fbc4: 4770 bx lr -1002fbc6: bf00 nop -1002fbc8: 40080101 .word 0x40080101 - -1002fbcc : -1002fbcc: 4b04 ldr r3, [pc, #16] ; (1002fbe0 ) -1002fbce: 8818 ldrh r0, [r3, #0] -1002fbd0: f240 73ff movw r3, #2047 ; 0x7ff -1002fbd4: f3c0 000a ubfx r0, r0, #0, #11 -1002fbd8: 1ac3 subs r3, r0, r3 -1002fbda: 4258 negs r0, r3 -1002fbdc: 4158 adcs r0, r3 -1002fbde: 4770 bx lr -1002fbe0: 4008041a .word 0x4008041a - -1002fbe4 : -1002fbe4: b538 push {r3, r4, r5, lr} -1002fbe6: f241 63c8 movw r3, #5832 ; 0x16c8 -1002fbea: 58c4 ldr r4, [r0, r3] -1002fbec: 4b17 ldr r3, [pc, #92] ; (1002fc4c ) -1002fbee: 2500 movs r5, #0 -1002fbf0: 2217 movs r2, #23 -1002fbf2: 605d str r5, [r3, #4] -1002fbf4: 60da str r2, [r3, #12] -1002fbf6: 2205 movs r2, #5 -1002fbf8: 611d str r5, [r3, #16] -1002fbfa: f604 6088 addw r0, r4, #3720 ; 0xe88 -1002fbfe: 605a str r2, [r3, #4] -1002fc00: 4629 mov r1, r5 -1002fc02: 222c movs r2, #44 ; 0x2c -1002fc04: f7ea ffd8 bl 1001abb8 -1002fc08: 2302 movs r3, #2 -1002fc0a: f884 3e98 strb.w r3, [r4, #3736] ; 0xe98 -1002fc0e: f8a4 3ea6 strh.w r3, [r4, #3750] ; 0xea6 -1002fc12: 2201 movs r2, #1 -1002fc14: 230c movs r3, #12 -1002fc16: f884 2e9f strb.w r2, [r4, #3743] ; 0xe9f -1002fc1a: f884 2ea0 strb.w r2, [r4, #3744] ; 0xea0 -1002fc1e: f884 3e9b strb.w r3, [r4, #3739] ; 0xe9b -1002fc22: f884 3e9c strb.w r3, [r4, #3740] ; 0xe9c -1002fc26: 2204 movs r2, #4 -1002fc28: 4b09 ldr r3, [pc, #36] ; (1002fc50 ) -1002fc2a: f884 2ea1 strb.w r2, [r4, #3745] ; 0xea1 -1002fc2e: f884 5e88 strb.w r5, [r4, #3720] ; 0xe88 -1002fc32: 781a ldrb r2, [r3, #0] -1002fc34: f002 027f and.w r2, r2, #127 ; 0x7f -1002fc38: 701a strb r2, [r3, #0] -1002fc3a: 685a ldr r2, [r3, #4] -1002fc3c: f422 22e0 bic.w r2, r2, #458752 ; 0x70000 -1002fc40: 605a str r2, [r3, #4] -1002fc42: f803 5ce2 strb.w r5, [r3, #-226] -1002fc46: f884 5eb4 strb.w r5, [r4, #3764] ; 0xeb4 -1002fc4a: bd38 pop {r3, r4, r5, pc} -1002fc4c: e000ed90 .word 0xe000ed90 -1002fc50: 40080604 .word 0x40080604 - -1002fc54 : -1002fc54: 2901 cmp r1, #1 -1002fc56: d002 beq.n 1002fc5e -1002fc58: 2902 cmp r1, #2 -1002fc5a: d002 beq.n 1002fc62 -1002fc5c: 4770 bx lr -1002fc5e: 72c1 strb r1, [r0, #11] -1002fc60: 4770 bx lr -1002fc62: b912 cbnz r2, 1002fc6a -1002fc64: 2307 movs r3, #7 -1002fc66: 75c3 strb r3, [r0, #23] -1002fc68: e001 b.n 1002fc6e -1002fc6a: 3a01 subs r2, #1 -1002fc6c: 75c2 strb r2, [r0, #23] -1002fc6e: 7dc3 ldrb r3, [r0, #23] -1002fc70: 7603 strb r3, [r0, #24] -1002fc72: 2301 movs r3, #1 -1002fc74: 72c3 strb r3, [r0, #11] -1002fc76: 4770 bx lr - -1002fc78 : -1002fc78: f241 63c8 movw r3, #5832 ; 0x16c8 -1002fc7c: b510 push {r4, lr} -1002fc7e: 58c4 ldr r4, [r0, r3] -1002fc80: f7ff ffa4 bl 1002fbcc -1002fc84: 2801 cmp r0, #1 -1002fc86: 4603 mov r3, r0 -1002fc88: d111 bne.n 1002fcae -1002fc8a: f894 0e8b ldrb.w r0, [r4, #3723] ; 0xe8b -1002fc8e: b970 cbnz r0, 1002fcae -1002fc90: f894 2e9b ldrb.w r2, [r4, #3739] ; 0xe9b -1002fc94: 2a04 cmp r2, #4 -1002fc96: d80d bhi.n 1002fcb4 -1002fc98: f894 2e99 ldrb.w r2, [r4, #3737] ; 0xe99 -1002fc9c: 2a03 cmp r2, #3 -1002fc9e: d108 bne.n 1002fcb2 -1002fca0: f894 0eb1 ldrb.w r0, [r4, #3761] ; 0xeb1 -1002fca4: f1d0 0001 rsbs r0, r0, #1 -1002fca8: bf38 it cc -1002fcaa: 2000 movcc r0, #0 -1002fcac: bd10 pop {r4, pc} -1002fcae: 2000 movs r0, #0 -1002fcb0: bd10 pop {r4, pc} -1002fcb2: 4618 mov r0, r3 -1002fcb4: bd10 pop {r4, pc} - ... - -1002fcb8 : -1002fcb8: b510 push {r4, lr} -1002fcba: f241 63c8 movw r3, #5832 ; 0x16c8 -1002fcbe: 58c4 ldr r4, [r0, r3] -1002fcc0: f7ff ff84 bl 1002fbcc -1002fcc4: 2801 cmp r0, #1 -1002fcc6: d12a bne.n 1002fd1e -1002fcc8: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d -1002fccc: f013 0003 ands.w r0, r3, #3 -1002fcd0: d125 bne.n 1002fd1e -1002fcd2: f894 2e9b ldrb.w r2, [r4, #3739] ; 0xe9b -1002fcd6: bb4a cbnz r2, 1002fd2c -1002fcd8: f013 0314 ands.w r3, r3, #20 -1002fcdc: d126 bne.n 1002fd2c -1002fcde: f894 0e92 ldrb.w r0, [r4, #3730] ; 0xe92 -1002fce2: b318 cbz r0, 1002fd2c -1002fce4: f894 2eb4 ldrb.w r2, [r4, #3764] ; 0xeb4 -1002fce8: b9da cbnz r2, 1002fd22 -1002fcea: 4b11 ldr r3, [pc, #68] ; (1002fd30 ) -1002fcec: 7819 ldrb r1, [r3, #0] -1002fcee: f001 0102 and.w r1, r1, #2 -1002fcf2: f001 00ff and.w r0, r1, #255 ; 0xff -1002fcf6: b9b1 cbnz r1, 1002fd26 -1002fcf8: 781a ldrb r2, [r3, #0] -1002fcfa: 07d2 lsls r2, r2, #31 -1002fcfc: d504 bpl.n 1002fd08 -1002fcfe: 781b ldrb r3, [r3, #0] -1002fd00: f003 03fc and.w r3, r3, #252 ; 0xfc -1002fd04: 2b80 cmp r3, #128 ; 0x80 -1002fd06: d011 beq.n 1002fd2c -1002fd08: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 -1002fd0c: 2b03 cmp r3, #3 -1002fd0e: d10c bne.n 1002fd2a -1002fd10: f894 0eb1 ldrb.w r0, [r4, #3761] ; 0xeb1 -1002fd14: f1d0 0001 rsbs r0, r0, #1 -1002fd18: bf38 it cc -1002fd1a: 2000 movcc r0, #0 -1002fd1c: bd10 pop {r4, pc} -1002fd1e: 2000 movs r0, #0 -1002fd20: bd10 pop {r4, pc} -1002fd22: 4618 mov r0, r3 -1002fd24: bd10 pop {r4, pc} -1002fd26: 4610 mov r0, r2 -1002fd28: bd10 pop {r4, pc} -1002fd2a: 2001 movs r0, #1 -1002fd2c: bd10 pop {r4, pc} -1002fd2e: bf00 nop -1002fd30: 40080662 .word 0x40080662 - -1002fd34 : -1002fd34: 4b0b ldr r3, [pc, #44] ; (1002fd64 ) -1002fd36: 781b ldrb r3, [r3, #0] -1002fd38: f003 00ff and.w r0, r3, #255 ; 0xff -1002fd3c: b983 cbnz r3, 1002fd60 -1002fd3e: 4b0a ldr r3, [pc, #40] ; (1002fd68 ) -1002fd40: 781b ldrb r3, [r3, #0] -1002fd42: 2b3f cmp r3, #63 ; 0x3f -1002fd44: d10d bne.n 1002fd62 -1002fd46: 4b09 ldr r3, [pc, #36] ; (1002fd6c ) -1002fd48: 781a ldrb r2, [r3, #0] -1002fd4a: f002 0202 and.w r2, r2, #2 -1002fd4e: f002 00ff and.w r0, r2, #255 ; 0xff -1002fd52: b132 cbz r2, 1002fd62 -1002fd54: 7818 ldrb r0, [r3, #0] -1002fd56: f080 0008 eor.w r0, r0, #8 -1002fd5a: f3c0 00c0 ubfx r0, r0, #3, #1 -1002fd5e: 4770 bx lr -1002fd60: 2000 movs r0, #0 -1002fd62: 4770 bx lr -1002fd64: 40080287 .word 0x40080287 -1002fd68: 40080100 .word 0x40080100 -1002fd6c: 40080286 .word 0x40080286 - -1002fd70 : -1002fd70: b538 push {r3, r4, r5, lr} -1002fd72: f241 63c8 movw r3, #5832 ; 0x16c8 -1002fd76: 4605 mov r5, r0 -1002fd78: 58c4 ldr r4, [r0, r3] -1002fd7a: b319 cbz r1, 1002fdc4 -1002fd7c: 2100 movs r1, #0 -1002fd7e: f00b fb86 bl 1003b48e -1002fd82: 2801 cmp r0, #1 -1002fd84: d11e bne.n 1002fdc4 -1002fd86: 4b10 ldr r3, [pc, #64] ; (1002fdc8 ) -1002fd88: 2100 movs r1, #0 -1002fd8a: 220f movs r2, #15 -1002fd8c: f884 1e90 strb.w r1, [r4, #3728] ; 0xe90 -1002fd90: 701a strb r2, [r3, #0] -1002fd92: f893 20e2 ldrb.w r2, [r3, #226] ; 0xe2 -1002fd96: 4628 mov r0, r5 -1002fd98: f002 02bf and.w r2, r2, #191 ; 0xbf -1002fd9c: f883 20e2 strb.w r2, [r3, #226] ; 0xe2 -1002fda0: 2208 movs r2, #8 -1002fda2: f7ff fe89 bl 1002fab8 -1002fda6: 2801 cmp r0, #1 -1002fda8: d105 bne.n 1002fdb6 -1002fdaa: 2306 movs r3, #6 -1002fdac: f884 0e8e strb.w r0, [r4, #3726] ; 0xe8e -1002fdb0: f884 3e9c strb.w r3, [r4, #3740] ; 0xe9c -1002fdb4: bd38 pop {r3, r4, r5, pc} -1002fdb6: 4b05 ldr r3, [pc, #20] ; (1002fdcc ) -1002fdb8: 681b ldr r3, [r3, #0] -1002fdba: 005b lsls r3, r3, #1 -1002fdbc: d502 bpl.n 1002fdc4 -1002fdbe: 4804 ldr r0, [pc, #16] ; (1002fdd0 ) -1002fdc0: 4b04 ldr r3, [pc, #16] ; (1002fdd4 ) -1002fdc2: 4798 blx r3 -1002fdc4: bd38 pop {r3, r4, r5, pc} -1002fdc6: bf00 nop -1002fdc8: 40080522 .word 0x40080522 -1002fdcc: 10000314 .word 0x10000314 -1002fdd0: 10041892 .word 0x10041892 -1002fdd4: 0000f39d .word 0x0000f39d - -1002fdd8 : -1002fdd8: 4b05 ldr r3, [pc, #20] ; (1002fdf0 ) -1002fdda: 781a ldrb r2, [r3, #0] -1002fddc: f002 027f and.w r2, r2, #127 ; 0x7f -1002fde0: 701a strb r2, [r3, #0] -1002fde2: 2200 movs r2, #0 -1002fde4: f803 2ce2 strb.w r2, [r3, #-226] -1002fde8: 230c movs r3, #12 -1002fdea: 7503 strb r3, [r0, #20] -1002fdec: 4770 bx lr -1002fdee: bf00 nop -1002fdf0: 40080604 .word 0x40080604 - -1002fdf4 : -1002fdf4: 7a02 ldrb r2, [r0, #8] -1002fdf6: 4b09 ldr r3, [pc, #36] ; (1002fe1c ) -1002fdf8: b92a cbnz r2, 1002fe06 -1002fdfa: 781a ldrb r2, [r3, #0] -1002fdfc: f042 0240 orr.w r2, r2, #64 ; 0x40 -1002fe00: 701a strb r2, [r3, #0] -1002fe02: 2304 movs r3, #4 -1002fe04: e004 b.n 1002fe10 -1002fe06: 781a ldrb r2, [r3, #0] -1002fe08: f002 027f and.w r2, r2, #127 ; 0x7f -1002fe0c: 701a strb r2, [r3, #0] -1002fe0e: 230c movs r3, #12 -1002fe10: 7503 strb r3, [r0, #20] -1002fe12: 4b03 ldr r3, [pc, #12] ; (1002fe20 ) -1002fe14: 2200 movs r2, #0 -1002fe16: 701a strb r2, [r3, #0] -1002fe18: 4770 bx lr -1002fe1a: bf00 nop -1002fe1c: 40080604 .word 0x40080604 -1002fe20: 40080522 .word 0x40080522 - -1002fe24 : -1002fe24: b538 push {r3, r4, r5, lr} -1002fe26: 2100 movs r1, #0 -1002fe28: f241 63c8 movw r3, #5832 ; 0x16c8 -1002fe2c: 4605 mov r5, r0 -1002fe2e: 58c4 ldr r4, [r0, r3] -1002fe30: f00b fb2d bl 1003b48e -1002fe34: 2801 cmp r0, #1 -1002fe36: 4601 mov r1, r0 -1002fe38: d118 bne.n 1002fe6c -1002fe3a: 2300 movs r3, #0 -1002fe3c: f884 3e91 strb.w r3, [r4, #3729] ; 0xe91 -1002fe40: 4b0b ldr r3, [pc, #44] ; (1002fe70 ) -1002fe42: 226f movs r2, #111 ; 0x6f -1002fe44: 701a strb r2, [r3, #0] -1002fe46: 4628 mov r0, r5 -1002fe48: 2208 movs r2, #8 -1002fe4a: f7ff fe35 bl 1002fab8 -1002fe4e: 2801 cmp r0, #1 -1002fe50: d105 bne.n 1002fe5e -1002fe52: 230e movs r3, #14 -1002fe54: f884 0e8f strb.w r0, [r4, #3727] ; 0xe8f -1002fe58: f884 3e9c strb.w r3, [r4, #3740] ; 0xe9c -1002fe5c: bd38 pop {r3, r4, r5, pc} -1002fe5e: 4b05 ldr r3, [pc, #20] ; (1002fe74 ) -1002fe60: 681b ldr r3, [r3, #0] -1002fe62: 005b lsls r3, r3, #1 -1002fe64: d502 bpl.n 1002fe6c -1002fe66: 4804 ldr r0, [pc, #16] ; (1002fe78 ) -1002fe68: 4b04 ldr r3, [pc, #16] ; (1002fe7c ) -1002fe6a: 4798 blx r3 -1002fe6c: bd38 pop {r3, r4, r5, pc} -1002fe6e: bf00 nop -1002fe70: 40080522 .word 0x40080522 -1002fe74: 10000314 .word 0x10000314 -1002fe78: 100418e3 .word 0x100418e3 -1002fe7c: 0000f39d .word 0x0000f39d - -1002fe80 : -1002fe80: 7a43 ldrb r3, [r0, #9] -1002fe82: b90b cbnz r3, 1002fe88 -1002fe84: 230c movs r3, #12 -1002fe86: e009 b.n 1002fe9c -1002fe88: 4b07 ldr r3, [pc, #28] ; (1002fea8 ) -1002fe8a: 781a ldrb r2, [r3, #0] -1002fe8c: f042 0240 orr.w r2, r2, #64 ; 0x40 -1002fe90: 701a strb r2, [r3, #0] -1002fe92: 781a ldrb r2, [r3, #0] -1002fe94: f042 0280 orr.w r2, r2, #128 ; 0x80 -1002fe98: 701a strb r2, [r3, #0] -1002fe9a: 2304 movs r3, #4 -1002fe9c: 7503 strb r3, [r0, #20] -1002fe9e: 4b03 ldr r3, [pc, #12] ; (1002feac ) -1002fea0: 2200 movs r2, #0 -1002fea2: 701a strb r2, [r3, #0] -1002fea4: 4770 bx lr -1002fea6: bf00 nop -1002fea8: 40080604 .word 0x40080604 -1002feac: 40080522 .word 0x40080522 - -1002feb0 : -1002feb0: b570 push {r4, r5, r6, lr} -1002feb2: f241 63c8 movw r3, #5832 ; 0x16c8 -1002feb6: 58c6 ldr r6, [r0, r3] -1002feb8: 4b0e ldr r3, [pc, #56] ; (1002fef4 ) -1002feba: 22ff movs r2, #255 ; 0xff -1002febc: b086 sub sp, #24 -1002febe: 701a strb r2, [r3, #0] -1002fec0: 4605 mov r5, r0 -1002fec2: f7ff fdcf bl 1002fa64 -1002fec6: 4a0c ldr r2, [pc, #48] ; (1002fef8 ) -1002fec8: f04f 7300 mov.w r3, #33554432 ; 0x2000000 -1002fecc: 6013 str r3, [r2, #0] -1002fece: 2400 movs r4, #0 -1002fed0: 4628 mov r0, r5 -1002fed2: 4669 mov r1, sp -1002fed4: aa03 add r2, sp, #12 -1002fed6: 9300 str r3, [sp, #0] -1002fed8: 9401 str r4, [sp, #4] -1002feda: 9402 str r4, [sp, #8] -1002fedc: 9403 str r4, [sp, #12] -1002fede: 9404 str r4, [sp, #16] -1002fee0: 9405 str r4, [sp, #20] -1002fee2: f7fb f987 bl 1002b1f4 -1002fee6: 4628 mov r0, r5 -1002fee8: f7ff fe3e bl 1002fb68 -1002feec: f886 4e9c strb.w r4, [r6, #3740] ; 0xe9c -1002fef0: b006 add sp, #24 -1002fef2: bd70 pop {r4, r5, r6, pc} -1002fef4: 40080522 .word 0x40080522 -1002fef8: 40080134 .word 0x40080134 - -1002fefc : -1002fefc: f241 63c8 movw r3, #5832 ; 0x16c8 -1002ff00: b510 push {r4, lr} -1002ff02: 58c4 ldr r4, [r0, r3] -1002ff04: 4b04 ldr r3, [pc, #16] ; (1002ff18 ) -1002ff06: 22ff movs r2, #255 ; 0xff -1002ff08: 701a strb r2, [r3, #0] -1002ff0a: f7ff fe2d bl 1002fb68 -1002ff0e: 2308 movs r3, #8 -1002ff10: f884 3e9c strb.w r3, [r4, #3740] ; 0xe9c -1002ff14: bd10 pop {r4, pc} -1002ff16: bf00 nop -1002ff18: 40080522 .word 0x40080522 - -1002ff1c : -1002ff1c: f241 63c8 movw r3, #5832 ; 0x16c8 -1002ff20: b510 push {r4, lr} -1002ff22: 58c4 ldr r4, [r0, r3] -1002ff24: f7ff fe3a bl 1002fb9c -1002ff28: 4b03 ldr r3, [pc, #12] ; (1002ff38 ) -1002ff2a: 2200 movs r2, #0 -1002ff2c: 701a strb r2, [r3, #0] -1002ff2e: 230c movs r3, #12 -1002ff30: f884 3e9c strb.w r3, [r4, #3740] ; 0xe9c -1002ff34: bd10 pop {r4, pc} -1002ff36: bf00 nop -1002ff38: 40080522 .word 0x40080522 - -1002ff3c : -1002ff3c: b538 push {r3, r4, r5, lr} -1002ff3e: 4605 mov r5, r0 -1002ff40: 2433 movs r4, #51 ; 0x33 -1002ff42: 4a0d ldr r2, [pc, #52] ; (1002ff78 ) -1002ff44: 8813 ldrh r3, [r2, #0] -1002ff46: f403 7380 and.w r3, r3, #256 ; 0x100 -1002ff4a: b29b uxth r3, r3 -1002ff4c: b113 cbz r3, 1002ff54 -1002ff4e: 8813 ldrh r3, [r2, #0] -1002ff50: f3c3 2340 ubfx r3, r3, #9, #1 -1002ff54: 429d cmp r5, r3 -1002ff56: d00e beq.n 1002ff76 -1002ff58: 3c01 subs r4, #1 -1002ff5a: 2014 movs r0, #20 -1002ff5c: 4b07 ldr r3, [pc, #28] ; (1002ff7c ) -1002ff5e: b2a4 uxth r4, r4 -1002ff60: 4798 blx r3 -1002ff62: 2c00 cmp r4, #0 -1002ff64: d1ed bne.n 1002ff42 -1002ff66: 4b06 ldr r3, [pc, #24] ; (1002ff80 ) -1002ff68: 681b ldr r3, [r3, #0] -1002ff6a: 005b lsls r3, r3, #1 -1002ff6c: d503 bpl.n 1002ff76 -1002ff6e: 4b05 ldr r3, [pc, #20] ; (1002ff84 ) -1002ff70: 4805 ldr r0, [pc, #20] ; (1002ff88 ) -1002ff72: 4798 blx r3 -1002ff74: bd38 pop {r3, r4, r5, pc} -1002ff76: bd38 pop {r3, r4, r5, pc} -1002ff78: 400800f0 .word 0x400800f0 -1002ff7c: 00000899 .word 0x00000899 -1002ff80: 10000314 .word 0x10000314 -1002ff84: 0000f39d .word 0x0000f39d -1002ff88: 10041934 .word 0x10041934 - -1002ff8c : -1002ff8c: 4b02 ldr r3, [pc, #8] ; (1002ff98 ) -1002ff8e: 781b ldrb r3, [r3, #0] -1002ff90: 07db lsls r3, r3, #31 -1002ff92: d4fb bmi.n 1002ff8c -1002ff94: 4770 bx lr -1002ff96: bf00 nop -1002ff98: 40080020 .word 0x40080020 - -1002ff9c : -1002ff9c: f241 63c8 movw r3, #5832 ; 0x16c8 -1002ffa0: 58c2 ldr r2, [r0, r3] -1002ffa2: 2301 movs r3, #1 -1002ffa4: b510 push {r4, lr} -1002ffa6: f882 3e94 strb.w r3, [r2, #3732] ; 0xe94 -1002ffaa: 4b15 ldr r3, [pc, #84] ; (10030000 ) -1002ffac: 6819 ldr r1, [r3, #0] -1002ffae: 461c mov r4, r3 -1002ffb0: f441 3140 orr.w r1, r1, #196608 ; 0x30000 -1002ffb4: 6019 str r1, [r3, #0] -1002ffb6: f892 2e9a ldrb.w r2, [r2, #3738] ; 0xe9a -1002ffba: b13a cbz r2, 1002ffcc -1002ffbc: f203 130f addw r3, r3, #271 ; 0x10f -1002ffc0: 781a ldrb r2, [r3, #0] -1002ffc2: 0612 lsls r2, r2, #24 -1002ffc4: bf4c ite mi -1002ffc6: 2210 movmi r2, #16 -1002ffc8: 2290 movpl r2, #144 ; 0x90 -1002ffca: 701a strb r2, [r3, #0] -1002ffcc: 4b0d ldr r3, [pc, #52] ; (10030004 ) -1002ffce: 2001 movs r0, #1 -1002ffd0: 881a ldrh r2, [r3, #0] -1002ffd2: b292 uxth r2, r2 -1002ffd4: f442 7240 orr.w r2, r2, #768 ; 0x300 -1002ffd8: 801a strh r2, [r3, #0] -1002ffda: f7ff ffaf bl 1002ff3c -1002ffde: 7823 ldrb r3, [r4, #0] -1002ffe0: 2200 movs r2, #0 -1002ffe2: f043 0304 orr.w r3, r3, #4 -1002ffe6: 7023 strb r3, [r4, #0] -1002ffe8: 4b07 ldr r3, [pc, #28] ; (10030008 ) -1002ffea: e8bd 4010 ldmia.w sp!, {r4, lr} -1002ffee: 605a str r2, [r3, #4] -1002fff0: 4a06 ldr r2, [pc, #24] ; (1003000c ) -1002fff2: 60da str r2, [r3, #12] -1002fff4: 4a06 ldr r2, [pc, #24] ; (10030010 ) -1002fff6: 611a str r2, [r3, #16] -1002fff8: 2205 movs r2, #5 -1002fffa: 605a str r2, [r3, #4] -1002fffc: f7e7 bbf6 b.w 100177ec -10030000: 40080020 .word 0x40080020 -10030004: 40080002 .word 0x40080002 -10030008: e000ed90 .word 0xe000ed90 -1003000c: 40080017 .word 0x40080017 -10030010: 00040023 .word 0x00040023 - -10030014 : -10030014: b538 push {r3, r4, r5, lr} -10030016: f241 63c8 movw r3, #5832 ; 0x16c8 -1003001a: 58c5 ldr r5, [r0, r3] -1003001c: 4b0f ldr r3, [pc, #60] ; (1003005c ) -1003001e: 2400 movs r4, #0 -10030020: 2217 movs r2, #23 -10030022: 605c str r4, [r3, #4] -10030024: 60da str r2, [r3, #12] -10030026: 2205 movs r2, #5 -10030028: 611c str r4, [r3, #16] -1003002a: 605a str r2, [r3, #4] -1003002c: 4b0c ldr r3, [pc, #48] ; (10030060 ) -1003002e: 781a ldrb r2, [r3, #0] -10030030: f042 0201 orr.w r2, r2, #1 -10030034: 701a strb r2, [r3, #0] -10030036: f7ff ffa9 bl 1002ff8c -1003003a: 4a0a ldr r2, [pc, #40] ; (10030064 ) -1003003c: 4620 mov r0, r4 -1003003e: 8813 ldrh r3, [r2, #0] -10030040: f423 7340 bic.w r3, r3, #768 ; 0x300 -10030044: 041b lsls r3, r3, #16 -10030046: 0c1b lsrs r3, r3, #16 -10030048: 8013 strh r3, [r2, #0] -1003004a: f7ff ff77 bl 1002ff3c -1003004e: f885 4e94 strb.w r4, [r5, #3732] ; 0xe94 -10030052: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10030056: f7e7 bbc1 b.w 100177dc -1003005a: bf00 nop -1003005c: e000ed90 .word 0xe000ed90 -10030060: 40080020 .word 0x40080020 -10030064: 40080002 .word 0x40080002 - -10030068 : -10030068: b570 push {r4, r5, r6, lr} -1003006a: f241 63c8 movw r3, #5832 ; 0x16c8 -1003006e: 58c4 ldr r4, [r0, r3] -10030070: 2300 movs r3, #0 -10030072: f894 2e94 ldrb.w r2, [r4, #3732] ; 0xe94 -10030076: b086 sub sp, #24 -10030078: 4606 mov r6, r0 -1003007a: f884 3e8a strb.w r3, [r4, #3722] ; 0xe8a -1003007e: f884 3ea2 strb.w r3, [r4, #3746] ; 0xea2 -10030082: f884 3ea3 strb.w r3, [r4, #3747] ; 0xea3 -10030086: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d -1003008a: f8c4 3ea8 str.w r3, [r4, #3752] ; 0xea8 -1003008e: f884 3e93 strb.w r3, [r4, #3731] ; 0xe93 -10030092: f884 3e96 strb.w r3, [r4, #3734] ; 0xe96 -10030096: f884 3ea4 strb.w r3, [r4, #3748] ; 0xea4 -1003009a: 461d mov r5, r3 -1003009c: b10a cbz r2, 100300a2 -1003009e: f7ff ffb9 bl 10030014 -100300a2: 4a0c ldr r2, [pc, #48] ; (100300d4 ) -100300a4: 2301 movs r3, #1 -100300a6: f44f 3100 mov.w r1, #131072 ; 0x20000 -100300aa: f884 5eb0 strb.w r5, [r4, #3760] ; 0xeb0 -100300ae: f884 5eb1 strb.w r5, [r4, #3761] ; 0xeb1 -100300b2: 4630 mov r0, r6 -100300b4: 6013 str r3, [r2, #0] -100300b6: f8c2 10b0 str.w r1, [r2, #176] ; 0xb0 -100300ba: 9302 str r3, [sp, #8] -100300bc: 4669 mov r1, sp -100300be: 2302 movs r3, #2 -100300c0: aa03 add r2, sp, #12 -100300c2: 9500 str r5, [sp, #0] -100300c4: 9501 str r5, [sp, #4] -100300c6: 9503 str r5, [sp, #12] -100300c8: 9504 str r5, [sp, #16] -100300ca: 9305 str r3, [sp, #20] -100300cc: f7fb f892 bl 1002b1f4 -100300d0: b006 add sp, #24 -100300d2: bd70 pop {r4, r5, r6, pc} -100300d4: 40080084 .word 0x40080084 - -100300d8 : -100300d8: b570 push {r4, r5, r6, lr} -100300da: f241 63c8 movw r3, #5832 ; 0x16c8 -100300de: 58c4 ldr r4, [r0, r3] -100300e0: 4605 mov r5, r0 -100300e2: f894 3e94 ldrb.w r3, [r4, #3732] ; 0xe94 -100300e6: 460e mov r6, r1 -100300e8: b10b cbz r3, 100300ee -100300ea: f7ff ff93 bl 10030014 -100300ee: 4628 mov r0, r5 -100300f0: f7ff fd54 bl 1002fb9c -100300f4: b116 cbz r6, 100300fc -100300f6: 4b03 ldr r3, [pc, #12] ; (10030104 ) -100300f8: 2200 movs r2, #0 -100300fa: 701a strb r2, [r3, #0] -100300fc: 2304 movs r3, #4 -100300fe: f884 3e9c strb.w r3, [r4, #3740] ; 0xe9c -10030102: bd70 pop {r4, r5, r6, pc} -10030104: 40080522 .word 0x40080522 - -10030108 : -10030108: b538 push {r3, r4, r5, lr} -1003010a: f241 63c8 movw r3, #5832 ; 0x16c8 -1003010e: 58c3 ldr r3, [r0, r3] -10030110: 4604 mov r4, r0 -10030112: f893 2e88 ldrb.w r2, [r3, #3720] ; 0xe88 -10030116: 2a01 cmp r2, #1 -10030118: d11b bne.n 10030152 -1003011a: f893 2e94 ldrb.w r2, [r3, #3732] ; 0xe94 -1003011e: b9c2 cbnz r2, 10030152 -10030120: f893 3e9c ldrb.w r3, [r3, #3740] ; 0xe9c -10030124: f013 0ff7 tst.w r3, #247 ; 0xf7 -10030128: d10f bne.n 1003014a -1003012a: f7ff fe03 bl 1002fd34 -1003012e: 2801 cmp r0, #1 -10030130: d10b bne.n 1003014a -10030132: 4d10 ldr r5, [pc, #64] ; (10030174 ) -10030134: 2006 movs r0, #6 -10030136: 692b ldr r3, [r5, #16] -10030138: 4798 blx r3 -1003013a: 68eb ldr r3, [r5, #12] -1003013c: 2006 movs r0, #6 -1003013e: 4798 blx r3 -10030140: 4620 mov r0, r4 -10030142: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10030146: f7ff bf29 b.w 1002ff9c -1003014a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1003014e: f7ff bb47 b.w 1002f7e0 -10030152: f893 2e99 ldrb.w r2, [r3, #3737] ; 0xe99 -10030156: b162 cbz r2, 10030172 -10030158: f893 2e9b ldrb.w r2, [r3, #3739] ; 0xe9b -1003015c: f893 3e9c ldrb.w r3, [r3, #3740] ; 0xe9c -10030160: 429a cmp r2, r3 -10030162: d1f2 bne.n 1003014a -10030164: 4c03 ldr r4, [pc, #12] ; (10030174 ) -10030166: 2006 movs r0, #6 -10030168: 6923 ldr r3, [r4, #16] -1003016a: 4798 blx r3 -1003016c: 68e3 ldr r3, [r4, #12] -1003016e: 2006 movs r0, #6 -10030170: 4798 blx r3 -10030172: bd38 pop {r3, r4, r5, pc} -10030174: 10000318 .word 0x10000318 - -10030178 : -10030178: b5f8 push {r3, r4, r5, r6, r7, lr} -1003017a: f241 63c8 movw r3, #5832 ; 0x16c8 -1003017e: 4605 mov r5, r0 -10030180: 4617 mov r7, r2 -10030182: 58c4 ldr r4, [r0, r3] -10030184: b672 cpsid i -10030186: f894 3e8e ldrb.w r3, [r4, #3726] ; 0xe8e -1003018a: 2b01 cmp r3, #1 -1003018c: f000 80c3 beq.w 10030316 -10030190: f894 3e8f ldrb.w r3, [r4, #3727] ; 0xe8f -10030194: 2b01 cmp r3, #1 -10030196: f000 80be beq.w 10030316 -1003019a: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -1003019e: 428b cmp r3, r1 -100301a0: f000 80b9 beq.w 10030316 -100301a4: f604 6688 addw r6, r4, #3720 ; 0xe88 -100301a8: 290c cmp r1, #12 -100301aa: f200 80b4 bhi.w 10030316 -100301ae: e8df f001 tbb [pc, r1] -100301b2: b254 .short 0xb254 -100301b4: b230b27d .word 0xb230b27d -100301b8: b2abb2b2 .word 0xb2abb2b2 -100301bc: b2b2 .short 0xb2b2 -100301be: 07 .byte 0x07 -100301bf: 00 .byte 0x00 -100301c0: 2b0e cmp r3, #14 -100301c2: d102 bne.n 100301ca -100301c4: 4630 mov r0, r6 -100301c6: f7ff fe5b bl 1002fe80 -100301ca: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -100301ce: b91b cbnz r3, 100301d8 -100301d0: 4628 mov r0, r5 -100301d2: 2101 movs r1, #1 -100301d4: f7ff ff80 bl 100300d8 -100301d8: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -100301dc: 2b06 cmp r3, #6 -100301de: d102 bne.n 100301e6 -100301e0: 4630 mov r0, r6 -100301e2: f7ff fe07 bl 1002fdf4 -100301e6: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -100301ea: 2b04 cmp r3, #4 -100301ec: d108 bne.n 10030200 -100301ee: b127 cbz r7, 100301fa -100301f0: 4628 mov r0, r5 -100301f2: 4639 mov r1, r7 -100301f4: f7ff fdbc bl 1002fd70 -100301f8: e002 b.n 10030200 -100301fa: 4630 mov r0, r6 -100301fc: f7ff fdec bl 1002fdd8 -10030200: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -10030204: 2b08 cmp r3, #8 -10030206: f040 8086 bne.w 10030316 -1003020a: 4628 mov r0, r5 -1003020c: f7ff fe86 bl 1002ff1c -10030210: e081 b.n 10030316 -10030212: b913 cbnz r3, 1003021a -10030214: 2101 movs r1, #1 -10030216: f7ff ff5f bl 100300d8 -1003021a: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -1003021e: 2b06 cmp r3, #6 -10030220: d102 bne.n 10030228 -10030222: 4630 mov r0, r6 -10030224: f7ff fde6 bl 1002fdf4 -10030228: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -1003022c: 2b0e cmp r3, #14 -1003022e: d107 bne.n 10030240 -10030230: 4628 mov r0, r5 -10030232: f7ff fd21 bl 1002fc78 -10030236: 2801 cmp r0, #1 -10030238: d102 bne.n 10030240 -1003023a: 4630 mov r0, r6 -1003023c: f7ff fe20 bl 1002fe80 -10030240: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -10030244: 2b0c cmp r3, #12 -10030246: d166 bne.n 10030316 -10030248: 4628 mov r0, r5 -1003024a: f7ff fd15 bl 1002fc78 -1003024e: 2801 cmp r0, #1 -10030250: d161 bne.n 10030316 -10030252: 4628 mov r0, r5 -10030254: f7ff fde6 bl 1002fe24 -10030258: e05d b.n 10030316 -1003025a: 2b0e cmp r3, #14 -1003025c: d106 bne.n 1003026c -1003025e: f7ff fd0b bl 1002fc78 -10030262: 2801 cmp r0, #1 -10030264: d102 bne.n 1003026c -10030266: 4630 mov r0, r6 -10030268: f7ff fe0a bl 1002fe80 -1003026c: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -10030270: 2b06 cmp r3, #6 -10030272: d102 bne.n 1003027a -10030274: 4630 mov r0, r6 -10030276: f7ff fdbd bl 1002fdf4 -1003027a: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -1003027e: 2b0c cmp r3, #12 -10030280: d107 bne.n 10030292 -10030282: 4628 mov r0, r5 -10030284: f7ff fcf8 bl 1002fc78 -10030288: 2801 cmp r0, #1 -1003028a: d102 bne.n 10030292 -1003028c: 4628 mov r0, r5 -1003028e: f7ff fdc9 bl 1002fe24 -10030292: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -10030296: 2b04 cmp r3, #4 -10030298: d13d bne.n 10030316 -1003029a: 4628 mov r0, r5 -1003029c: f7ff fd0c bl 1002fcb8 -100302a0: 2801 cmp r0, #1 -100302a2: d138 bne.n 10030316 -100302a4: 4628 mov r0, r5 -100302a6: f7ff fe03 bl 1002feb0 -100302aa: e034 b.n 10030316 -100302ac: 2b0e cmp r3, #14 -100302ae: d106 bne.n 100302be -100302b0: f7ff fce2 bl 1002fc78 -100302b4: 2801 cmp r0, #1 -100302b6: d102 bne.n 100302be -100302b8: 4630 mov r0, r6 -100302ba: f7ff fde1 bl 1002fe80 -100302be: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -100302c2: 2b06 cmp r3, #6 -100302c4: d102 bne.n 100302cc -100302c6: 4630 mov r0, r6 -100302c8: f7ff fd94 bl 1002fdf4 -100302cc: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -100302d0: 2b0c cmp r3, #12 -100302d2: d107 bne.n 100302e4 -100302d4: 4628 mov r0, r5 -100302d6: f7ff fccf bl 1002fc78 -100302da: 2801 cmp r0, #1 -100302dc: d102 bne.n 100302e4 -100302de: 4628 mov r0, r5 -100302e0: f7ff fda0 bl 1002fe24 -100302e4: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -100302e8: b91b cbnz r3, 100302f2 -100302ea: 4628 mov r0, r5 -100302ec: 2101 movs r1, #1 -100302ee: f7ff fef3 bl 100300d8 -100302f2: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -100302f6: 2b04 cmp r3, #4 -100302f8: d10d bne.n 10030316 -100302fa: 4b08 ldr r3, [pc, #32] ; (1003031c ) -100302fc: 226f movs r2, #111 ; 0x6f -100302fe: 701a strb r2, [r3, #0] -10030300: 2302 movs r3, #2 -10030302: f884 3e9c strb.w r3, [r4, #3740] ; 0xe9c -10030306: e006 b.n 10030316 -10030308: 2b0c cmp r3, #12 -1003030a: d104 bne.n 10030316 -1003030c: f894 3e92 ldrb.w r3, [r4, #3730] ; 0xe92 -10030310: b10b cbz r3, 10030316 -10030312: f7ff fdf3 bl 1002fefc -10030316: b662 cpsie i -10030318: bdf8 pop {r3, r4, r5, r6, r7, pc} -1003031a: bf00 nop -1003031c: 40080522 .word 0x40080522 - -10030320 : -10030320: b570 push {r4, r5, r6, lr} -10030322: f241 63c8 movw r3, #5832 ; 0x16c8 -10030326: 4a19 ldr r2, [pc, #100] ; (1003038c ) -10030328: b086 sub sp, #24 -1003032a: 58c5 ldr r5, [r0, r3] -1003032c: f04f 731e mov.w r3, #41418752 ; 0x2780000 -10030330: 6013 str r3, [r2, #0] -10030332: 2400 movs r4, #0 -10030334: 4669 mov r1, sp -10030336: aa03 add r2, sp, #12 -10030338: 4606 mov r6, r0 -1003033a: 9300 str r3, [sp, #0] -1003033c: 9401 str r4, [sp, #4] -1003033e: 9402 str r4, [sp, #8] -10030340: 9403 str r4, [sp, #12] -10030342: 9404 str r4, [sp, #16] -10030344: 9405 str r4, [sp, #20] -10030346: f7fa ff55 bl 1002b1f4 -1003034a: 4b11 ldr r3, [pc, #68] ; (10030390 ) -1003034c: 4630 mov r0, r6 -1003034e: 681a ldr r2, [r3, #0] -10030350: 4621 mov r1, r4 -10030352: f442 22e0 orr.w r2, r2, #458752 ; 0x70000 -10030356: 601a str r2, [r3, #0] -10030358: f895 2ea6 ldrb.w r2, [r5, #3750] ; 0xea6 -1003035c: f803 2cb0 strb.w r2, [r3, #-176] -10030360: f00b f895 bl 1003b48e -10030364: 2801 cmp r0, #1 -10030366: 4602 mov r2, r0 -10030368: d10a bne.n 10030380 -1003036a: f895 3e9c ldrb.w r3, [r5, #3740] ; 0xe9c -1003036e: f885 4e92 strb.w r4, [r5, #3730] ; 0xe92 -10030372: 075b lsls r3, r3, #29 -10030374: d407 bmi.n 10030386 -10030376: 4630 mov r0, r6 -10030378: 2104 movs r1, #4 -1003037a: f7ff fefd bl 10030178 -1003037e: e002 b.n 10030386 -10030380: 2301 movs r3, #1 -10030382: f885 3e92 strb.w r3, [r5, #3730] ; 0xe92 -10030386: b006 add sp, #24 -10030388: bd70 pop {r4, r5, r6, pc} -1003038a: bf00 nop -1003038c: 40080134 .word 0x40080134 -10030390: 40080608 .word 0x40080608 - -10030394 : -10030394: b5f0 push {r4, r5, r6, r7, lr} -10030396: f241 63c8 movw r3, #5832 ; 0x16c8 -1003039a: b087 sub sp, #28 -1003039c: 4606 mov r6, r0 -1003039e: 58c5 ldr r5, [r0, r3] -100303a0: 460c mov r4, r1 -100303a2: 2900 cmp r1, #0 -100303a4: d13a bne.n 1003041c -100303a6: 4f1f ldr r7, [pc, #124] ; (10030424 ) -100303a8: aa03 add r2, sp, #12 -100303aa: f04f 731e mov.w r3, #41418752 ; 0x2780000 -100303ae: 9100 str r1, [sp, #0] -100303b0: 9101 str r1, [sp, #4] -100303b2: 9102 str r1, [sp, #8] -100303b4: 9104 str r1, [sp, #16] -100303b6: 9105 str r1, [sp, #20] -100303b8: 4669 mov r1, sp -100303ba: 9303 str r3, [sp, #12] -100303bc: f7fa ff1a bl 1002b1f4 -100303c0: 693b ldr r3, [r7, #16] -100303c2: 2006 movs r0, #6 -100303c4: 4798 blx r3 -100303c6: 68fb ldr r3, [r7, #12] -100303c8: 2006 movs r0, #6 -100303ca: 4798 blx r3 -100303cc: 4630 mov r0, r6 -100303ce: 4621 mov r1, r4 -100303d0: f00b f85d bl 1003b48e -100303d4: 4607 mov r7, r0 -100303d6: 4630 mov r0, r6 -100303d8: b957 cbnz r7, 100303f0 -100303da: f7ff fbdf bl 1002fb9c -100303de: f605 6088 addw r0, r5, #3720 ; 0xe88 -100303e2: f7ff fcf9 bl 1002fdd8 -100303e6: f885 7e8e strb.w r7, [r5, #3726] ; 0xe8e -100303ea: f885 7e8f strb.w r7, [r5, #3727] ; 0xe8f -100303ee: e00a b.n 10030406 -100303f0: 210c movs r1, #12 -100303f2: 4622 mov r2, r4 -100303f4: f7ff fec0 bl 10030178 -100303f8: 4b0b ldr r3, [pc, #44] ; (10030428 ) -100303fa: 4630 mov r0, r6 -100303fc: 701c strb r4, [r3, #0] -100303fe: 4621 mov r1, r4 -10030400: 2218 movs r2, #24 -10030402: f7ff fb59 bl 1002fab8 -10030406: 2300 movs r3, #0 -10030408: f885 3e8b strb.w r3, [r5, #3723] ; 0xe8b -1003040c: f885 3eb1 strb.w r3, [r5, #3761] ; 0xeb1 -10030410: 4b06 ldr r3, [pc, #24] ; (1003042c ) -10030412: 681a ldr r2, [r3, #0] -10030414: f422 22e0 bic.w r2, r2, #458752 ; 0x70000 -10030418: 601a str r2, [r3, #0] -1003041a: e001 b.n 10030420 -1003041c: f7ff ff80 bl 10030320 -10030420: b007 add sp, #28 -10030422: bdf0 pop {r4, r5, r6, r7, pc} -10030424: 10000318 .word 0x10000318 -10030428: 40080522 .word 0x40080522 -1003042c: 40080608 .word 0x40080608 - -10030430 : -10030430: b510 push {r4, lr} -10030432: f241 63c8 movw r3, #5832 ; 0x16c8 -10030436: 58c3 ldr r3, [r0, r3] -10030438: 4604 mov r4, r0 -1003043a: f893 2e99 ldrb.w r2, [r3, #3737] ; 0xe99 -1003043e: 2a03 cmp r2, #3 -10030440: d10b bne.n 1003045a -10030442: f893 2eb1 ldrb.w r2, [r3, #3761] ; 0xeb1 -10030446: 2a01 cmp r2, #1 -10030448: d107 bne.n 1003045a -1003044a: 4c09 ldr r4, [pc, #36] ; (10030470 ) -1003044c: 2006 movs r0, #6 -1003044e: 6923 ldr r3, [r4, #16] -10030450: 4798 blx r3 -10030452: 68e3 ldr r3, [r4, #12] -10030454: 2006 movs r0, #6 -10030456: 4798 blx r3 -10030458: bd10 pop {r4, pc} -1003045a: 4620 mov r0, r4 -1003045c: f893 1e9b ldrb.w r1, [r3, #3739] ; 0xe9b -10030460: 2201 movs r2, #1 -10030462: f7ff fe89 bl 10030178 -10030466: 4620 mov r0, r4 -10030468: e8bd 4010 ldmia.w sp!, {r4, lr} -1003046c: f7ff b9b0 b.w 1002f7d0 -10030470: 10000318 .word 0x10000318 - -10030474 : -10030474: b570 push {r4, r5, r6, lr} -10030476: f241 63c8 movw r3, #5832 ; 0x16c8 -1003047a: 58c4 ldr r4, [r0, r3] -1003047c: 4606 mov r6, r0 -1003047e: f894 3e88 ldrb.w r3, [r4, #3720] ; 0xe88 -10030482: b123 cbz r3, 1003048e -10030484: f894 3e94 ldrb.w r3, [r4, #3732] ; 0xe94 -10030488: b10b cbz r3, 1003048e -1003048a: f7ff fdc3 bl 10030014 -1003048e: f894 1eb1 ldrb.w r1, [r4, #3761] ; 0xeb1 -10030492: f894 3eb0 ldrb.w r3, [r4, #3760] ; 0xeb0 -10030496: 2901 cmp r1, #1 -10030498: d135 bne.n 10030506 -1003049a: 2200 movs r2, #0 -1003049c: 2b02 cmp r3, #2 -1003049e: f884 2eb1 strb.w r2, [r4, #3761] ; 0xeb1 -100304a2: d82b bhi.n 100304fc -100304a4: 2b01 cmp r3, #1 -100304a6: d002 beq.n 100304ae -100304a8: 2b02 cmp r3, #2 -100304aa: d015 beq.n 100304d8 -100304ac: e01e b.n 100304ec -100304ae: f894 5eac ldrb.w r5, [r4, #3756] ; 0xeac -100304b2: 2d31 cmp r5, #49 ; 0x31 -100304b4: d806 bhi.n 100304c4 -100304b6: f894 2ead ldrb.w r2, [r4, #3757] ; 0xead -100304ba: f1c5 0532 rsb r5, r5, #50 ; 0x32 -100304be: ebc2 0545 rsb r5, r2, r5, lsl #1 -100304c2: e006 b.n 100304d2 -100304c4: 2d63 cmp r5, #99 ; 0x63 -100304c6: d811 bhi.n 100304ec -100304c8: f894 2ead ldrb.w r2, [r4, #3757] ; 0xead -100304cc: 4415 add r5, r2 -100304ce: f1c5 0564 rsb r5, r5, #100 ; 0x64 -100304d2: b2ed uxtb r5, r5 -100304d4: 461c mov r4, r3 -100304d6: e00b b.n 100304f0 -100304d8: f894 3eac ldrb.w r3, [r4, #3756] ; 0xeac -100304dc: 2b31 cmp r3, #49 ; 0x31 -100304de: d805 bhi.n 100304ec -100304e0: f894 5eae ldrb.w r5, [r4, #3758] ; 0xeae -100304e4: 460c mov r4, r1 -100304e6: 1b5d subs r5, r3, r5 -100304e8: b2ed uxtb r5, r5 -100304ea: e001 b.n 100304f0 -100304ec: 4614 mov r4, r2 -100304ee: 4615 mov r5, r2 -100304f0: 4630 mov r0, r6 -100304f2: f7ff ff9d bl 10030430 -100304f6: 2c01 cmp r4, #1 -100304f8: d145 bne.n 10030586 -100304fa: e03f b.n 1003057c -100304fc: 4630 mov r0, r6 -100304fe: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10030502: f7ff bf95 b.w 10030430 -10030506: 2201 movs r2, #1 -10030508: 2b02 cmp r3, #2 -1003050a: f884 2eb1 strb.w r2, [r4, #3761] ; 0xeb1 -1003050e: d83a bhi.n 10030586 -10030510: 4413 add r3, r2 -10030512: b2db uxtb r3, r3 -10030514: 2b02 cmp r3, #2 -10030516: f884 3eb0 strb.w r3, [r4, #3760] ; 0xeb0 -1003051a: d004 beq.n 10030526 -1003051c: 2b03 cmp r3, #3 -1003051e: d005 beq.n 1003052c -10030520: f894 5ead ldrb.w r5, [r4, #3757] ; 0xead -10030524: e004 b.n 10030530 -10030526: f894 5eae ldrb.w r5, [r4, #3758] ; 0xeae -1003052a: e001 b.n 10030530 -1003052c: f894 5eaf ldrb.w r5, [r4, #3759] ; 0xeaf -10030530: b9c5 cbnz r5, 10030564 -10030532: f884 5eb1 strb.w r5, [r4, #3761] ; 0xeb1 -10030536: 4630 mov r0, r6 -10030538: f894 5eac ldrb.w r5, [r4, #3756] ; 0xeac -1003053c: f7ff ff78 bl 10030430 -10030540: f894 3eac ldrb.w r3, [r4, #3756] ; 0xeac -10030544: 2b64 cmp r3, #100 ; 0x64 -10030546: d01e beq.n 10030586 -10030548: 2b31 cmp r3, #49 ; 0x31 -1003054a: d804 bhi.n 10030556 -1003054c: f894 3eb0 ldrb.w r3, [r4, #3760] ; 0xeb0 -10030550: 2b03 cmp r3, #3 -10030552: d102 bne.n 1003055a -10030554: bd70 pop {r4, r5, r6, pc} -10030556: 2b63 cmp r3, #99 ; 0x63 -10030558: d810 bhi.n 1003057c -1003055a: f894 3eb0 ldrb.w r3, [r4, #3760] ; 0xeb0 -1003055e: 2b02 cmp r3, #2 -10030560: d10c bne.n 1003057c -10030562: bd70 pop {r4, r5, r6, pc} -10030564: 4630 mov r0, r6 -10030566: 210c movs r1, #12 -10030568: 2200 movs r2, #0 -1003056a: f7ff fe05 bl 10030178 -1003056e: 4b06 ldr r3, [pc, #24] ; (10030588 ) -10030570: 2100 movs r1, #0 -10030572: 7019 strb r1, [r3, #0] -10030574: 4630 mov r0, r6 -10030576: 2218 movs r2, #24 -10030578: f7ff fa9e bl 1002fab8 -1003057c: 4628 mov r0, r5 -1003057e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10030582: f7ff b8ef b.w 1002f764 -10030586: bd70 pop {r4, r5, r6, pc} -10030588: 40080522 .word 0x40080522 - -1003058c : -1003058c: b573 push {r0, r1, r4, r5, r6, lr} -1003058e: 6885 ldr r5, [r0, #8] -10030590: 2300 movs r3, #0 -10030592: ac02 add r4, sp, #8 -10030594: f844 3d04 str.w r3, [r4, #-4]! -10030598: 3520 adds r5, #32 -1003059a: 4621 mov r1, r4 -1003059c: 4606 mov r6, r0 -1003059e: 4628 mov r0, r5 -100305a0: f7e6 ffce bl 10017540 -100305a4: 4630 mov r0, r6 -100305a6: f7ff ff65 bl 10030474 -100305aa: 4628 mov r0, r5 -100305ac: 4621 mov r1, r4 -100305ae: f7e6 ffd1 bl 10017554 -100305b2: b002 add sp, #8 -100305b4: bd70 pop {r4, r5, r6, pc} - -100305b6 : -100305b6: f241 63c8 movw r3, #5832 ; 0x16c8 -100305ba: 58c3 ldr r3, [r0, r3] -100305bc: f893 2e99 ldrb.w r2, [r3, #3737] ; 0xe99 -100305c0: b14a cbz r2, 100305d6 -100305c2: 2a03 cmp r2, #3 -100305c4: d007 beq.n 100305d6 -100305c6: f893 2e9b ldrb.w r2, [r3, #3739] ; 0xe9b -100305ca: f893 3e9c ldrb.w r3, [r3, #3740] ; 0xe9c -100305ce: 429a cmp r2, r3 -100305d0: d001 beq.n 100305d6 -100305d2: f7ff bf2d b.w 10030430 -100305d6: 4770 bx lr - -100305d8 : -100305d8: b538 push {r3, r4, r5, lr} -100305da: 4c0c ldr r4, [pc, #48] ; (1003060c ) -100305dc: f241 63c8 movw r3, #5832 ; 0x16c8 -100305e0: 58c5 ldr r5, [r0, r3] -100305e2: 6923 ldr r3, [r4, #16] -100305e4: 2007 movs r0, #7 -100305e6: 4798 blx r3 -100305e8: 68e3 ldr r3, [r4, #12] -100305ea: 2007 movs r0, #7 -100305ec: 4798 blx r3 -100305ee: 4b08 ldr r3, [pc, #32] ; (10030610 ) -100305f0: 2202 movs r2, #2 -100305f2: 701a strb r2, [r3, #0] -100305f4: 2007 movs r0, #7 -100305f6: f44f 5170 mov.w r1, #15360 ; 0x3c00 -100305fa: f7e9 fcfd bl 10019ff8 -100305fe: 2007 movs r0, #7 -10030600: f7ff f8a7 bl 1002f752 -10030604: 2301 movs r3, #1 -10030606: f885 3e8b strb.w r3, [r5, #3723] ; 0xe8b -1003060a: bd38 pop {r3, r4, r5, pc} -1003060c: 10000318 .word 0x10000318 -10030610: 40080692 .word 0x40080692 - -10030614 : -10030614: b538 push {r3, r4, r5, lr} -10030616: 4d14 ldr r5, [pc, #80] ; (10030668 ) -10030618: 4604 mov r4, r0 -1003061a: 68eb ldr r3, [r5, #12] -1003061c: 2007 movs r0, #7 -1003061e: 4798 blx r3 -10030620: 692b ldr r3, [r5, #16] -10030622: 2007 movs r0, #7 -10030624: 4798 blx r3 -10030626: f241 63c8 movw r3, #5832 ; 0x16c8 -1003062a: 58e3 ldr r3, [r4, r3] -1003062c: f893 2e99 ldrb.w r2, [r3, #3737] ; 0xe99 -10030630: b1ca cbz r2, 10030666 -10030632: 2a03 cmp r2, #3 -10030634: d104 bne.n 10030640 -10030636: 4620 mov r0, r4 -10030638: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1003063c: f7ff b8a6 b.w 1002f78c -10030640: 4a0a ldr r2, [pc, #40] ; (1003066c ) -10030642: 7812 ldrb r2, [r2, #0] -10030644: f002 0202 and.w r2, r2, #2 -10030648: f002 01ff and.w r1, r2, #255 ; 0xff -1003064c: b122 cbz r2, 10030658 -1003064e: 4620 mov r0, r4 -10030650: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10030654: f7ff bfc0 b.w 100305d8 -10030658: f883 1e8b strb.w r1, [r3, #3723] ; 0xe8b -1003065c: 4620 mov r0, r4 -1003065e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10030662: f7ff bee5 b.w 10030430 -10030666: bd38 pop {r3, r4, r5, pc} -10030668: 10000318 .word 0x10000318 -1003066c: 40080692 .word 0x40080692 - -10030670 : -10030670: b538 push {r3, r4, r5, lr} -10030672: f241 63c8 movw r3, #5832 ; 0x16c8 -10030676: 58c5 ldr r5, [r0, r3] -10030678: 4604 mov r4, r0 -1003067a: f7ff ffad bl 100305d8 -1003067e: f895 3e9c ldrb.w r3, [r5, #3740] ; 0xe9c -10030682: 2b0c cmp r3, #12 -10030684: d00d beq.n 100306a2 -10030686: 4620 mov r0, r4 -10030688: 210c movs r1, #12 -1003068a: 2200 movs r2, #0 -1003068c: f7ff fd74 bl 10030178 -10030690: 4b04 ldr r3, [pc, #16] ; (100306a4 ) -10030692: 2100 movs r1, #0 -10030694: 7019 strb r1, [r3, #0] -10030696: 4620 mov r0, r4 -10030698: 2208 movs r2, #8 -1003069a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1003069e: f7ff ba0b b.w 1002fab8 -100306a2: bd38 pop {r3, r4, r5, pc} -100306a4: 40080522 .word 0x40080522 - -100306a8 : -100306a8: b538 push {r3, r4, r5, lr} -100306aa: f241 63c8 movw r3, #5832 ; 0x16c8 -100306ae: 58c4 ldr r4, [r0, r3] -100306b0: 4b26 ldr r3, [pc, #152] ; (1003074c ) -100306b2: 881d ldrh r5, [r3, #0] -100306b4: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d -100306b8: b2ad uxth r5, r5 -100306ba: f415 4f40 tst.w r5, #49152 ; 0xc000 -100306be: d107 bne.n 100306d0 -100306c0: f023 0303 bic.w r3, r3, #3 -100306c4: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d -100306c8: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -100306cc: f7ff beb0 b.w 10030430 -100306d0: 046a lsls r2, r5, #17 -100306d2: d513 bpl.n 100306fc -100306d4: f894 2e99 ldrb.w r2, [r4, #3737] ; 0xe99 -100306d8: 2a01 cmp r2, #1 -100306da: d113 bne.n 10030704 -100306dc: f043 0301 orr.w r3, r3, #1 -100306e0: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d -100306e4: f894 3e97 ldrb.w r3, [r4, #3735] ; 0xe97 -100306e8: f003 030f and.w r3, r3, #15 -100306ec: 2b02 cmp r3, #2 -100306ee: d002 beq.n 100306f6 -100306f0: f7ff f9a2 bl 1002fa38 -100306f4: e006 b.n 10030704 -100306f6: f7ff ffbb bl 10030670 -100306fa: e003 b.n 10030704 -100306fc: f023 0301 bic.w r3, r3, #1 -10030700: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d -10030704: f415 4f00 tst.w r5, #32768 ; 0x8000 -10030708: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d -1003070c: d019 beq.n 10030742 -1003070e: 4d10 ldr r5, [pc, #64] ; (10030750 ) -10030710: f043 0302 orr.w r3, r3, #2 -10030714: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d -10030718: 2006 movs r0, #6 -1003071a: 692b ldr r3, [r5, #16] -1003071c: 4798 blx r3 -1003071e: 68eb ldr r3, [r5, #12] -10030720: 2006 movs r0, #6 -10030722: 4798 blx r3 -10030724: 2006 movs r0, #6 -10030726: f44f 5170 mov.w r1, #15360 ; 0x3c00 -1003072a: f7e9 fc65 bl 10019ff8 -1003072e: 2006 movs r0, #6 -10030730: f7ff f80f bl 1002f752 -10030734: 4b07 ldr r3, [pc, #28] ; (10030754 ) -10030736: 2200 movs r2, #0 -10030738: 701a strb r2, [r3, #0] -1003073a: 2301 movs r3, #1 -1003073c: f884 3e8a strb.w r3, [r4, #3722] ; 0xe8a -10030740: bd38 pop {r3, r4, r5, pc} -10030742: f023 0302 bic.w r3, r3, #2 -10030746: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d -1003074a: bd38 pop {r3, r4, r5, pc} -1003074c: 400806a8 .word 0x400806a8 -10030750: 10000318 .word 0x10000318 -10030754: 1004dd60 .word 0x1004dd60 - -10030758 : -10030758: b5f8 push {r3, r4, r5, r6, r7, lr} -1003075a: f241 63c8 movw r3, #5832 ; 0x16c8 -1003075e: 58c4 ldr r4, [r0, r3] -10030760: 4606 mov r6, r0 -10030762: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 -10030766: 2b00 cmp r3, #0 -10030768: d04e beq.n 10030808 -1003076a: 2100 movs r1, #0 -1003076c: f00a fe8f bl 1003b48e -10030770: 2801 cmp r0, #1 -10030772: d149 bne.n 10030808 -10030774: f894 3e97 ldrb.w r3, [r4, #3735] ; 0xe97 -10030778: 091b lsrs r3, r3, #4 -1003077a: d010 beq.n 1003079e -1003077c: 2b02 cmp r3, #2 -1003077e: dc43 bgt.n 10030808 -10030780: f894 3ea0 ldrb.w r3, [r4, #3744] ; 0xea0 -10030784: 3b01 subs r3, #1 -10030786: b2db uxtb r3, r3 -10030788: f884 3ea0 strb.w r3, [r4, #3744] ; 0xea0 -1003078c: b11b cbz r3, 10030796 -1003078e: f894 3ea2 ldrb.w r3, [r4, #3746] ; 0xea2 -10030792: b923 cbnz r3, 1003079e -10030794: bdf8 pop {r3, r4, r5, r6, r7, pc} -10030796: f894 3e9f ldrb.w r3, [r4, #3743] ; 0xe9f -1003079a: f884 3ea0 strb.w r3, [r4, #3744] ; 0xea0 -1003079e: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d -100307a2: 4d1a ldr r5, [pc, #104] ; (1003080c ) -100307a4: f043 0310 orr.w r3, r3, #16 -100307a8: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d -100307ac: f894 3ea2 ldrb.w r3, [r4, #3746] ; 0xea2 -100307b0: 4f17 ldr r7, [pc, #92] ; (10030810 ) -100307b2: 2b01 cmp r3, #1 -100307b4: d809 bhi.n 100307ca -100307b6: 692b ldr r3, [r5, #16] -100307b8: 2006 movs r0, #6 -100307ba: 4798 blx r3 -100307bc: 68eb ldr r3, [r5, #12] -100307be: 2006 movs r0, #6 -100307c0: 4798 blx r3 -100307c2: f894 1ea2 ldrb.w r1, [r4, #3746] ; 0xea2 -100307c6: 3104 adds r1, #4 -100307c8: e00a b.n 100307e0 -100307ca: 692b ldr r3, [r5, #16] -100307cc: 2006 movs r0, #6 -100307ce: 4798 blx r3 -100307d0: 68eb ldr r3, [r5, #12] -100307d2: 2006 movs r0, #6 -100307d4: 4798 blx r3 -100307d6: f894 3ea2 ldrb.w r3, [r4, #3746] ; 0xea2 -100307da: eb03 0343 add.w r3, r3, r3, lsl #1 -100307de: 1c99 adds r1, r3, #2 -100307e0: 2006 movs r0, #6 -100307e2: 0289 lsls r1, r1, #10 -100307e4: f7e9 fc08 bl 10019ff8 -100307e8: 2006 movs r0, #6 -100307ea: f7fe ffb2 bl 1002f752 -100307ee: 2300 movs r3, #0 -100307f0: 703b strb r3, [r7, #0] -100307f2: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -100307f6: 075b lsls r3, r3, #29 -100307f8: d406 bmi.n 10030808 -100307fa: 4630 mov r0, r6 -100307fc: 2104 movs r1, #4 -100307fe: 2201 movs r2, #1 -10030800: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -10030804: f7ff bcb8 b.w 10030178 -10030808: bdf8 pop {r3, r4, r5, r6, r7, pc} -1003080a: bf00 nop -1003080c: 10000318 .word 0x10000318 -10030810: 1004dd60 .word 0x1004dd60 - -10030814 : -10030814: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10030818: f241 63c8 movw r3, #5832 ; 0x16c8 -1003081c: 58c4 ldr r4, [r0, r3] -1003081e: b086 sub sp, #24 -10030820: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 -10030824: 4605 mov r5, r0 -10030826: b37b cbz r3, 10030888 -10030828: 2100 movs r1, #0 -1003082a: f00a fe30 bl 1003b48e -1003082e: 2801 cmp r0, #1 -10030830: 4606 mov r6, r0 -10030832: d129 bne.n 10030888 -10030834: f894 2e9f ldrb.w r2, [r4, #3743] ; 0xe9f -10030838: 4b1d ldr r3, [pc, #116] ; (100308b0 ) -1003083a: f8df 8080 ldr.w r8, [pc, #128] ; 100308bc -1003083e: 701a strb r2, [r3, #0] -10030840: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d -10030844: 2700 movs r7, #0 -10030846: f043 0310 orr.w r3, r3, #16 -1003084a: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d -1003084e: 2006 movs r0, #6 -10030850: f8d8 3010 ldr.w r3, [r8, #16] -10030854: f884 7ea0 strb.w r7, [r4, #3744] ; 0xea0 -10030858: 4798 blx r3 -1003085a: f8d8 300c ldr.w r3, [r8, #12] -1003085e: 2006 movs r0, #6 -10030860: 4798 blx r3 -10030862: 2006 movs r0, #6 -10030864: f44f 5180 mov.w r1, #4096 ; 0x1000 -10030868: f7e9 fbc6 bl 10019ff8 -1003086c: 2006 movs r0, #6 -1003086e: f7fe ff70 bl 1002f752 -10030872: 4b10 ldr r3, [pc, #64] ; (100308b4 ) -10030874: 701f strb r7, [r3, #0] -10030876: f894 3e9c ldrb.w r3, [r4, #3740] ; 0xe9c -1003087a: 075b lsls r3, r3, #29 -1003087c: d404 bmi.n 10030888 -1003087e: 4628 mov r0, r5 -10030880: 2104 movs r1, #4 -10030882: 4632 mov r2, r6 -10030884: f7ff fc78 bl 10030178 -10030888: 4a0b ldr r2, [pc, #44] ; (100308b8 ) -1003088a: f44f 3300 mov.w r3, #131072 ; 0x20000 -1003088e: 6013 str r3, [r2, #0] -10030890: 4628 mov r0, r5 -10030892: 9300 str r3, [sp, #0] -10030894: 4669 mov r1, sp -10030896: 2300 movs r3, #0 -10030898: aa03 add r2, sp, #12 -1003089a: 9301 str r3, [sp, #4] -1003089c: 9302 str r3, [sp, #8] -1003089e: 9303 str r3, [sp, #12] -100308a0: 9304 str r3, [sp, #16] -100308a2: 9305 str r3, [sp, #20] -100308a4: f7fa fca6 bl 1002b1f4 -100308a8: b006 add sp, #24 -100308aa: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100308ae: bf00 nop -100308b0: 40080573 .word 0x40080573 -100308b4: 1004dd60 .word 0x1004dd60 -100308b8: 40080134 .word 0x40080134 -100308bc: 10000318 .word 0x10000318 - -100308c0 : -100308c0: b570 push {r4, r5, r6, lr} -100308c2: f241 63c8 movw r3, #5832 ; 0x16c8 -100308c6: 58c4 ldr r4, [r0, r3] -100308c8: b086 sub sp, #24 -100308ca: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 -100308ce: 4605 mov r5, r0 -100308d0: 2b00 cmp r3, #0 -100308d2: f000 808d beq.w 100309f0 -100308d6: 2100 movs r1, #0 -100308d8: f00a fdd9 bl 1003b48e -100308dc: 2801 cmp r0, #1 -100308de: f040 8087 bne.w 100309f0 -100308e2: f894 3e94 ldrb.w r3, [r4, #3732] ; 0xe94 -100308e6: b113 cbz r3, 100308ee -100308e8: 4628 mov r0, r5 -100308ea: f7ff fb93 bl 10030014 -100308ee: f894 3e97 ldrb.w r3, [r4, #3735] ; 0xe97 -100308f2: 091b lsrs r3, r3, #4 -100308f4: 2b01 cmp r3, #1 -100308f6: d10a bne.n 1003090e -100308f8: 4b3e ldr r3, [pc, #248] ; (100309f4 ) -100308fa: 681b ldr r3, [r3, #0] -100308fc: f3c3 4207 ubfx r2, r3, #16, #8 -10030900: 0e1b lsrs r3, r3, #24 -10030902: f884 2e9f strb.w r2, [r4, #3743] ; 0xe9f -10030906: bf18 it ne -10030908: 461a movne r2, r3 -1003090a: f884 2ea0 strb.w r2, [r4, #3744] ; 0xea0 -1003090e: 2300 movs r3, #0 -10030910: f884 3ea2 strb.w r3, [r4, #3746] ; 0xea2 -10030914: f884 3ea3 strb.w r3, [r4, #3747] ; 0xea3 -10030918: f894 2ea6 ldrb.w r2, [r4, #3750] ; 0xea6 -1003091c: 4b36 ldr r3, [pc, #216] ; (100309f8 ) -1003091e: 4e37 ldr r6, [pc, #220] ; (100309fc ) -10030920: 701a strb r2, [r3, #0] -10030922: 6933 ldr r3, [r6, #16] -10030924: 2006 movs r0, #6 -10030926: 4798 blx r3 -10030928: 68f3 ldr r3, [r6, #12] -1003092a: 2006 movs r0, #6 -1003092c: 4798 blx r3 -1003092e: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d -10030932: f023 0312 bic.w r3, r3, #18 -10030936: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d -1003093a: f894 3e97 ldrb.w r3, [r4, #3735] ; 0xe97 -1003093e: 2b2f cmp r3, #47 ; 0x2f -10030940: d802 bhi.n 10030948 -10030942: 4628 mov r0, r5 -10030944: f7ff feb0 bl 100306a8 -10030948: f894 3e93 ldrb.w r3, [r4, #3731] ; 0xe93 -1003094c: 2b00 cmp r3, #0 -1003094e: d04c beq.n 100309ea -10030950: f894 3e96 ldrb.w r3, [r4, #3734] ; 0xe96 -10030954: bb13 cbnz r3, 1003099c -10030956: f894 1ea0 ldrb.w r1, [r4, #3744] ; 0xea0 -1003095a: f894 2e9f ldrb.w r2, [r4, #3743] ; 0xe9f -1003095e: 428a cmp r2, r1 -10030960: d143 bne.n 100309ea -10030962: 4827 ldr r0, [pc, #156] ; (10030a00 ) -10030964: 2101 movs r1, #1 -10030966: f884 1e96 strb.w r1, [r4, #3734] ; 0xe96 -1003096a: f2a0 40ef subw r0, r0, #1263 ; 0x4ef -1003096e: f880 24ef strb.w r2, [r0, #1263] ; 0x4ef -10030972: 2202 movs r2, #2 -10030974: 6002 str r2, [r0, #0] -10030976: 9202 str r2, [sp, #8] -10030978: f44f 3200 mov.w r2, #131072 ; 0x20000 -1003097c: 9203 str r2, [sp, #12] -1003097e: 9105 str r1, [sp, #20] -10030980: 4628 mov r0, r5 -10030982: 4669 mov r1, sp -10030984: aa03 add r2, sp, #12 -10030986: 9300 str r3, [sp, #0] -10030988: 9301 str r3, [sp, #4] -1003098a: 9304 str r3, [sp, #16] -1003098c: f7fa fc32 bl 1002b1f4 -10030990: f894 3ea0 ldrb.w r3, [r4, #3744] ; 0xea0 -10030994: 3b01 subs r3, #1 -10030996: f884 3ea0 strb.w r3, [r4, #3744] ; 0xea0 -1003099a: e026 b.n 100309ea -1003099c: f894 2e97 ldrb.w r2, [r4, #3735] ; 0xe97 -100309a0: 0912 lsrs r2, r2, #4 -100309a2: 2a01 cmp r2, #1 -100309a4: d121 bne.n 100309ea -100309a6: f894 3ea0 ldrb.w r3, [r4, #3744] ; 0xea0 -100309aa: f894 1e9f ldrb.w r1, [r4, #3743] ; 0xe9f -100309ae: 4299 cmp r1, r3 -100309b0: d01b beq.n 100309ea -100309b2: 4913 ldr r1, [pc, #76] ; (10030a00 ) -100309b4: 7809 ldrb r1, [r1, #0] -100309b6: 428b cmp r3, r1 -100309b8: d017 beq.n 100309ea -100309ba: f894 3e92 ldrb.w r3, [r4, #3730] ; 0xe92 -100309be: b1a3 cbz r3, 100309ea -100309c0: 4910 ldr r1, [pc, #64] ; (10030a04 ) -100309c2: 2300 movs r3, #0 -100309c4: 4810 ldr r0, [pc, #64] ; (10030a08 ) -100309c6: f884 3e96 strb.w r3, [r4, #3734] ; 0xe96 -100309ca: 600a str r2, [r1, #0] -100309cc: f44f 3100 mov.w r1, #131072 ; 0x20000 -100309d0: 6001 str r1, [r0, #0] -100309d2: e88d 000a stmia.w sp, {r1, r3} -100309d6: 9202 str r2, [sp, #8] -100309d8: 9303 str r3, [sp, #12] -100309da: 9304 str r3, [sp, #16] -100309dc: 4628 mov r0, r5 -100309de: 2302 movs r3, #2 -100309e0: 4669 mov r1, sp -100309e2: aa03 add r2, sp, #12 -100309e4: 9305 str r3, [sp, #20] -100309e6: f7fa fc05 bl 1002b1f4 -100309ea: 2301 movs r3, #1 -100309ec: f884 3e92 strb.w r3, [r4, #3730] ; 0xe92 -100309f0: b006 add sp, #24 -100309f2: bd70 pop {r4, r5, r6, pc} -100309f4: 400806a8 .word 0x400806a8 -100309f8: 40080558 .word 0x40080558 -100309fc: 10000318 .word 0x10000318 -10030a00: 40080573 .word 0x40080573 -10030a04: 40080084 .word 0x40080084 -10030a08: 40080134 .word 0x40080134 - -10030a0c : -10030a0c: b510 push {r4, lr} -10030a0e: f241 63c8 movw r3, #5832 ; 0x16c8 -10030a12: 58c3 ldr r3, [r0, r3] -10030a14: 4604 mov r4, r0 -10030a16: f893 2e99 ldrb.w r2, [r3, #3737] ; 0xe99 -10030a1a: 2a01 cmp r2, #1 -10030a1c: d114 bne.n 10030a48 -10030a1e: f893 1e97 ldrb.w r1, [r3, #3735] ; 0xe97 -10030a22: 0709 lsls r1, r1, #28 -10030a24: d008 beq.n 10030a38 -10030a26: 210c movs r1, #12 -10030a28: 2200 movs r2, #0 -10030a2a: f7ff fba5 bl 10030178 -10030a2e: 4620 mov r0, r4 -10030a30: e8bd 4010 ldmia.w sp!, {r4, lr} -10030a34: f7ff bdd0 b.w 100305d8 -10030a38: f893 3e9c ldrb.w r3, [r3, #3740] ; 0xe9c -10030a3c: b923 cbnz r3, 10030a48 -10030a3e: 2104 movs r1, #4 -10030a40: e8bd 4010 ldmia.w sp!, {r4, lr} -10030a44: f7ff bb98 b.w 10030178 -10030a48: bd10 pop {r4, pc} - -10030a4a : -10030a4a: b570 push {r4, r5, r6, lr} -10030a4c: f241 63c8 movw r3, #5832 ; 0x16c8 -10030a50: 58c4 ldr r4, [r0, r3] -10030a52: b086 sub sp, #24 -10030a54: f894 3e93 ldrb.w r3, [r4, #3731] ; 0xe93 -10030a58: 4605 mov r5, r0 -10030a5a: b183 cbz r3, 10030a7e -10030a5c: f894 3e96 ldrb.w r3, [r4, #3734] ; 0xe96 -10030a60: 2b01 cmp r3, #1 -10030a62: d10c bne.n 10030a7e -10030a64: f44f 3200 mov.w r2, #131072 ; 0x20000 -10030a68: 2300 movs r3, #0 -10030a6a: 9203 str r2, [sp, #12] -10030a6c: 4669 mov r1, sp -10030a6e: aa03 add r2, sp, #12 -10030a70: 9300 str r3, [sp, #0] -10030a72: 9301 str r3, [sp, #4] -10030a74: 9302 str r3, [sp, #8] -10030a76: 9304 str r3, [sp, #16] -10030a78: 9305 str r3, [sp, #20] -10030a7a: f7fa fbbb bl 1002b1f4 -10030a7e: f894 6e8a ldrb.w r6, [r4, #3722] ; 0xe8a -10030a82: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d -10030a86: b16e cbz r6, 10030aa4 -10030a88: 2200 movs r2, #0 -10030a8a: f884 2e8a strb.w r2, [r4, #3722] ; 0xe8a -10030a8e: f013 0f05 tst.w r3, #5 -10030a92: f023 0202 bic.w r2, r3, #2 -10030a96: f884 2e9d strb.w r2, [r4, #3741] ; 0xe9d -10030a9a: d131 bne.n 10030b00 -10030a9c: 4628 mov r0, r5 -10030a9e: f7ff fcc7 bl 10030430 -10030aa2: e02d b.n 10030b00 -10030aa4: f894 2ea2 ldrb.w r2, [r4, #3746] ; 0xea2 -10030aa8: f023 0310 bic.w r3, r3, #16 -10030aac: 3201 adds r2, #1 -10030aae: b2d2 uxtb r2, r2 -10030ab0: 2a02 cmp r2, #2 -10030ab2: f884 2ea2 strb.w r2, [r4, #3746] ; 0xea2 -10030ab6: f884 3e9d strb.w r3, [r4, #3741] ; 0xe9d -10030aba: d9ef bls.n 10030a9c -10030abc: 4628 mov r0, r5 -10030abe: 4631 mov r1, r6 -10030ac0: f00a fce5 bl 1003b48e -10030ac4: 2801 cmp r0, #1 -10030ac6: d118 bne.n 10030afa -10030ac8: f894 3e97 ldrb.w r3, [r4, #3735] ; 0xe97 -10030acc: f3c3 0203 ubfx r2, r3, #0, #4 -10030ad0: 071b lsls r3, r3, #28 -10030ad2: d102 bne.n 10030ada -10030ad4: f884 2e92 strb.w r2, [r4, #3730] ; 0xe92 -10030ad8: e00f b.n 10030afa -10030ada: f894 3ea3 ldrb.w r3, [r4, #3747] ; 0xea3 -10030ade: 3301 adds r3, #1 -10030ae0: b2db uxtb r3, r3 -10030ae2: 2b02 cmp r3, #2 -10030ae4: f884 3ea3 strb.w r3, [r4, #3747] ; 0xea3 -10030ae8: d904 bls.n 10030af4 -10030aea: f884 6e92 strb.w r6, [r4, #3730] ; 0xe92 -10030aee: f884 6ea3 strb.w r6, [r4, #3747] ; 0xea3 -10030af2: e002 b.n 10030afa -10030af4: 4628 mov r0, r5 -10030af6: f7ff fdbb bl 10030670 -10030afa: 2300 movs r3, #0 -10030afc: f884 3ea2 strb.w r3, [r4, #3746] ; 0xea2 -10030b00: b006 add sp, #24 -10030b02: bd70 pop {r4, r5, r6, pc} - -10030b04 : -10030b04: b538 push {r3, r4, r5, lr} -10030b06: 4d10 ldr r5, [pc, #64] ; (10030b48 ) -10030b08: 4604 mov r4, r0 -10030b0a: 68eb ldr r3, [r5, #12] -10030b0c: 2006 movs r0, #6 -10030b0e: 4798 blx r3 -10030b10: 692b ldr r3, [r5, #16] -10030b12: 2006 movs r0, #6 -10030b14: 4798 blx r3 -10030b16: f241 4208 movw r2, #5128 ; 0x1408 -10030b1a: 5ca2 ldrb r2, [r4, r2] -10030b1c: f241 63c8 movw r3, #5832 ; 0x16c8 -10030b20: 58e3 ldr r3, [r4, r3] -10030b22: b17a cbz r2, 10030b44 -10030b24: 4a09 ldr r2, [pc, #36] ; (10030b4c ) -10030b26: 7812 ldrb r2, [r2, #0] -10030b28: b93a cbnz r2, 10030b3a -10030b2a: f893 3e99 ldrb.w r3, [r3, #3737] ; 0xe99 -10030b2e: b14b cbz r3, 10030b44 -10030b30: 4620 mov r0, r4 -10030b32: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10030b36: f7ff bf88 b.w 10030a4a -10030b3a: 4620 mov r0, r4 -10030b3c: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10030b40: f7fe be46 b.w 1002f7d0 -10030b44: bd38 pop {r3, r4, r5, pc} -10030b46: bf00 nop -10030b48: 10000318 .word 0x10000318 -10030b4c: 1004dd60 .word 0x1004dd60 - -10030b50 : -10030b50: f241 62c8 movw r2, #5832 ; 0x16c8 -10030b54: b538 push {r3, r4, r5, lr} -10030b56: 5884 ldr r4, [r0, r2] -10030b58: b151 cbz r1, 10030b70 -10030b5a: f241 4208 movw r2, #5128 ; 0x1408 -10030b5e: 5c80 ldrb r0, [r0, r2] -10030b60: b180 cbz r0, 10030b84 -10030b62: 2501 movs r5, #1 -10030b64: f884 5e88 strb.w r5, [r4, #3720] ; 0xe88 -10030b68: f7fe fe3a bl 1002f7e0 -10030b6c: 4628 mov r0, r5 -10030b6e: bd38 pop {r3, r4, r5, pc} -10030b70: f894 3e94 ldrb.w r3, [r4, #3732] ; 0xe94 -10030b74: 2b01 cmp r3, #1 -10030b76: d101 bne.n 10030b7c -10030b78: f7ff fa4c bl 10030014 -10030b7c: 2300 movs r3, #0 -10030b7e: f884 3e88 strb.w r3, [r4, #3720] ; 0xe88 -10030b82: 2001 movs r0, #1 -10030b84: bd38 pop {r3, r4, r5, pc} - ... - -10030b88 : -10030b88: b5f0 push {r4, r5, r6, r7, lr} -10030b8a: b087 sub sp, #28 -10030b8c: 4604 mov r4, r0 -10030b8e: 460d mov r5, r1 -10030b90: 220c movs r2, #12 -10030b92: 2100 movs r1, #0 -10030b94: 4668 mov r0, sp -10030b96: f00d f835 bl 1003dc04 -10030b9a: 2100 movs r1, #0 -10030b9c: 220c movs r2, #12 -10030b9e: a803 add r0, sp, #12 -10030ba0: f00d f830 bl 1003dc04 -10030ba4: f241 63c8 movw r3, #5832 ; 0x16c8 -10030ba8: 4620 mov r0, r4 -10030baa: 58e7 ldr r7, [r4, r3] -10030bac: f7ff fa5c bl 10030068 -10030bb0: 7829 ldrb r1, [r5, #0] -10030bb2: 4e12 ldr r6, [pc, #72] ; (10030bfc ) -10030bb4: f011 017f ands.w r1, r1, #127 ; 0x7f -10030bb8: d107 bne.n 10030bca -10030bba: 4620 mov r0, r4 -10030bbc: f7ff ffc8 bl 10030b50 -10030bc0: 233f movs r3, #63 ; 0x3f -10030bc2: 7033 strb r3, [r6, #0] -10030bc4: 2302 movs r3, #2 -10030bc6: 9303 str r3, [sp, #12] -10030bc8: e00b b.n 10030be2 -10030bca: 7869 ldrb r1, [r5, #1] -10030bcc: f607 6088 addw r0, r7, #3720 ; 0xe88 -10030bd0: f001 010f and.w r1, r1, #15 -10030bd4: 78aa ldrb r2, [r5, #2] -10030bd6: f7ff f83d bl 1002fc54 -10030bda: 23ff movs r3, #255 ; 0xff -10030bdc: 7033 strb r3, [r6, #0] -10030bde: 2302 movs r3, #2 -10030be0: 9300 str r3, [sp, #0] -10030be2: 4620 mov r0, r4 -10030be4: 4669 mov r1, sp -10030be6: aa03 add r2, sp, #12 -10030be8: f7fa fb04 bl 1002b1f4 -10030bec: 7829 ldrb r1, [r5, #0] -10030bee: 4620 mov r0, r4 -10030bf0: f001 017f and.w r1, r1, #127 ; 0x7f -10030bf4: f7ff fbce bl 10030394 -10030bf8: b007 add sp, #28 -10030bfa: bdf0 pop {r4, r5, r6, r7, pc} -10030bfc: 40080421 .word 0x40080421 - -10030c00 : -10030c00: b5f8 push {r3, r4, r5, r6, r7, lr} -10030c02: f641 025c movw r2, #6236 ; 0x185c -10030c06: f241 63c8 movw r3, #5832 ; 0x16c8 -10030c0a: 4604 mov r4, r0 -10030c0c: 58c3 ldr r3, [r0, r3] -10030c0e: 5880 ldr r0, [r0, r2] -10030c10: b128 cbz r0, 10030c1e -10030c12: 6902 ldr r2, [r0, #16] -10030c14: f012 0f10 tst.w r2, #16 -10030c18: bf08 it eq -10030c1a: 4620 moveq r0, r4 -10030c1c: e000 b.n 10030c20 -10030c1e: 4620 mov r0, r4 -10030c20: 4a41 ldr r2, [pc, #260] ; (10030d28 ) -10030c22: 4e42 ldr r6, [pc, #264] ; (10030d2c ) -10030c24: 7812 ldrb r2, [r2, #0] -10030c26: 7835 ldrb r5, [r6, #0] -10030c28: b2ed uxtb r5, r5 -10030c2a: 4295 cmp r5, r2 -10030c2c: d07b beq.n 10030d26 -10030c2e: 4940 ldr r1, [pc, #256] ; (10030d30 ) -10030c30: 3501 adds r5, #1 -10030c32: f44f 67cc mov.w r7, #1632 ; 0x660 -10030c36: f005 050f and.w r5, r5, #15 -10030c3a: 800f strh r7, [r1, #0] -10030c3c: 00ea lsls r2, r5, #3 -10030c3e: f8d0 7680 ldr.w r7, [r0, #1664] ; 0x680 -10030c42: f442 4200 orr.w r2, r2, #32768 ; 0x8000 -10030c46: f5a1 719d sub.w r1, r1, #314 ; 0x13a -10030c4a: 5a51 ldrh r1, [r2, r1] -10030c4c: f007 0703 and.w r7, r7, #3 -10030c50: 2f03 cmp r7, #3 -10030c52: f3c1 010b ubfx r1, r1, #0, #12 -10030c56: d105 bne.n 10030c64 -10030c58: 4b36 ldr r3, [pc, #216] ; (10030d34 ) -10030c5a: 681b ldr r3, [r3, #0] -10030c5c: 2b00 cmp r3, #0 -10030c5e: d05e beq.n 10030d1e -10030c60: 4798 blx r3 -10030c62: e05c b.n 10030d1e -10030c64: f240 3021 movw r0, #801 ; 0x321 -10030c68: 4281 cmp r1, r0 -10030c6a: d132 bne.n 10030cd2 -10030c6c: f893 0e8f ldrb.w r0, [r3, #3727] ; 0xe8f -10030c70: 2801 cmp r0, #1 -10030c72: d154 bne.n 10030d1e -10030c74: 2100 movs r1, #0 -10030c76: f102 4280 add.w r2, r2, #1073741824 ; 0x40000000 -10030c7a: f883 1e8f strb.w r1, [r3, #3727] ; 0xe8f -10030c7e: f502 2200 add.w r2, r2, #524288 ; 0x80000 -10030c82: 7812 ldrb r2, [r2, #0] -10030c84: 0612 lsls r2, r2, #24 -10030c86: d502 bpl.n 10030c8e -10030c88: f883 1e91 strb.w r1, [r3, #3729] ; 0xe91 -10030c8c: e016 b.n 10030cbc -10030c8e: f8d3 2ea8 ldr.w r2, [r3, #3752] ; 0xea8 -10030c92: f883 0e91 strb.w r0, [r3, #3729] ; 0xe91 -10030c96: 1c57 adds r7, r2, #1 -10030c98: d010 beq.n 10030cbc -10030c9a: 3201 adds r2, #1 -10030c9c: 0550 lsls r0, r2, #21 -10030c9e: d402 bmi.n 10030ca6 -10030ca0: f8c3 2ea8 str.w r2, [r3, #3752] ; 0xea8 -10030ca4: e00a b.n 10030cbc -10030ca6: f8c3 1ea8 str.w r1, [r3, #3752] ; 0xea8 -10030caa: 4b23 ldr r3, [pc, #140] ; (10030d38 ) -10030cac: 681b ldr r3, [r3, #0] -10030cae: 005a lsls r2, r3, #1 -10030cb0: d504 bpl.n 10030cbc -10030cb2: 4b22 ldr r3, [pc, #136] ; (10030d3c ) -10030cb4: 4822 ldr r0, [pc, #136] ; (10030d40 ) -10030cb6: 6819 ldr r1, [r3, #0] -10030cb8: 4b22 ldr r3, [pc, #136] ; (10030d44 ) -10030cba: 4798 blx r3 -10030cbc: 4620 mov r0, r4 -10030cbe: f7ff fbb7 bl 10030430 -10030cc2: 4b21 ldr r3, [pc, #132] ; (10030d48 ) -10030cc4: 781b ldrb r3, [r3, #0] -10030cc6: 2bff cmp r3, #255 ; 0xff -10030cc8: d029 beq.n 10030d1e -10030cca: 4620 mov r0, r4 -10030ccc: f7ff fe9e bl 10030a0c -10030cd0: e025 b.n 10030d1e -10030cd2: f240 1023 movw r0, #291 ; 0x123 -10030cd6: 4281 cmp r1, r0 -10030cd8: d11a bne.n 10030d10 -10030cda: f893 1e8e ldrb.w r1, [r3, #3726] ; 0xe8e -10030cde: 2901 cmp r1, #1 -10030ce0: d11d bne.n 10030d1e -10030ce2: 2100 movs r1, #0 -10030ce4: f102 4280 add.w r2, r2, #1073741824 ; 0x40000000 -10030ce8: f883 1e8e strb.w r1, [r3, #3726] ; 0xe8e -10030cec: f502 2200 add.w r2, r2, #524288 ; 0x80000 -10030cf0: 7812 ldrb r2, [r2, #0] -10030cf2: f012 0f80 tst.w r2, #128 ; 0x80 -10030cf6: bf14 ite ne -10030cf8: 2200 movne r2, #0 -10030cfa: 2201 moveq r2, #1 -10030cfc: f883 2e90 strb.w r2, [r3, #3728] ; 0xe90 -10030d00: f893 3e99 ldrb.w r3, [r3, #3737] ; 0xe99 -10030d04: 2b03 cmp r3, #3 -10030d06: d00a beq.n 10030d1e -10030d08: 4620 mov r0, r4 -10030d0a: f7ff fb91 bl 10030430 -10030d0e: e006 b.n 10030d1e -10030d10: 4b09 ldr r3, [pc, #36] ; (10030d38 ) -10030d12: 681b ldr r3, [r3, #0] -10030d14: 005b lsls r3, r3, #1 -10030d16: d502 bpl.n 10030d1e -10030d18: 480c ldr r0, [pc, #48] ; (10030d4c ) -10030d1a: 4b0a ldr r3, [pc, #40] ; (10030d44 ) -10030d1c: 4798 blx r3 -10030d1e: 2d0f cmp r5, #15 -10030d20: bf08 it eq -10030d22: 2500 moveq r5, #0 -10030d24: 7035 strb r5, [r6, #0] -10030d26: bdf8 pop {r3, r4, r5, r6, r7, pc} -10030d28: 4008047e .word 0x4008047e -10030d2c: 4008047f .word 0x4008047f -10030d30: 40080140 .word 0x40080140 -10030d34: 1004dd58 .word 0x1004dd58 -10030d38: 10000314 .word 0x10000314 -10030d3c: 40080560 .word 0x40080560 -10030d40: 10041965 .word 0x10041965 -10030d44: 0000f39d .word 0x0000f39d -10030d48: 4008041a .word 0x4008041a -10030d4c: 10041975 .word 0x10041975 - -10030d50 : -10030d50: b570 push {r4, r5, r6, lr} -10030d52: f241 63c8 movw r3, #5832 ; 0x16c8 -10030d56: 58c4 ldr r4, [r0, r3] -10030d58: 4606 mov r6, r0 -10030d5a: f894 3e88 ldrb.w r3, [r4, #3720] ; 0xe88 -10030d5e: 2b01 cmp r3, #1 -10030d60: d104 bne.n 10030d6c -10030d62: f894 3e94 ldrb.w r3, [r4, #3732] ; 0xe94 -10030d66: b10b cbz r3, 10030d6c -10030d68: f7ff f954 bl 10030014 -10030d6c: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 -10030d70: 2b03 cmp r3, #3 -10030d72: d119 bne.n 10030da8 -10030d74: 4d0f ldr r5, [pc, #60] ; (10030db4 ) -10030d76: 2007 movs r0, #7 -10030d78: 68eb ldr r3, [r5, #12] -10030d7a: 4798 blx r3 -10030d7c: 692b ldr r3, [r5, #16] -10030d7e: 2007 movs r0, #7 -10030d80: 4798 blx r3 -10030d82: 68eb ldr r3, [r5, #12] -10030d84: 2006 movs r0, #6 -10030d86: 4798 blx r3 -10030d88: 692b ldr r3, [r5, #16] -10030d8a: 2006 movs r0, #6 -10030d8c: 4798 blx r3 -10030d8e: 2300 movs r3, #0 -10030d90: f884 3eb0 strb.w r3, [r4, #3760] ; 0xeb0 -10030d94: f884 3eb1 strb.w r3, [r4, #3761] ; 0xeb1 -10030d98: 2301 movs r3, #1 -10030d9a: f884 3e92 strb.w r3, [r4, #3730] ; 0xe92 -10030d9e: 4630 mov r0, r6 -10030da0: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10030da4: f7fe bcf2 b.w 1002f78c -10030da8: 4630 mov r0, r6 -10030daa: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10030dae: f7ff bcd3 b.w 10030758 -10030db2: bf00 nop -10030db4: 10000318 .word 0x10000318 - -10030db8 : -10030db8: b538 push {r3, r4, r5, lr} -10030dba: f241 63c8 movw r3, #5832 ; 0x16c8 -10030dbe: 58c4 ldr r4, [r0, r3] -10030dc0: 4605 mov r5, r0 -10030dc2: f894 3e88 ldrb.w r3, [r4, #3720] ; 0xe88 -10030dc6: 2b01 cmp r3, #1 -10030dc8: d104 bne.n 10030dd4 -10030dca: f894 3e94 ldrb.w r3, [r4, #3732] ; 0xe94 -10030dce: b10b cbz r3, 10030dd4 -10030dd0: f7ff f920 bl 10030014 -10030dd4: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 -10030dd8: 2b03 cmp r3, #3 -10030dda: d004 beq.n 10030de6 -10030ddc: 4628 mov r0, r5 -10030dde: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10030de2: f7ff bd17 b.w 10030814 -10030de6: bd38 pop {r3, r4, r5, pc} - -10030de8 : -10030de8: f241 63c8 movw r3, #5832 ; 0x16c8 -10030dec: 58c3 ldr r3, [r0, r3] -10030dee: f893 2e9c ldrb.w r2, [r3, #3740] ; 0xe9c -10030df2: 2a02 cmp r2, #2 -10030df4: d005 beq.n 10030e02 -10030df6: f893 3e99 ldrb.w r3, [r3, #3737] ; 0xe99 -10030dfa: 2b03 cmp r3, #3 -10030dfc: d001 beq.n 10030e02 -10030dfe: f7ff bd5f b.w 100308c0 -10030e02: 4770 bx lr - -10030e04 : -10030e04: b510 push {r4, lr} -10030e06: f241 63c8 movw r3, #5832 ; 0x16c8 -10030e0a: 2100 movs r1, #0 -10030e0c: 58c4 ldr r4, [r0, r3] -10030e0e: f00a fb3e bl 1003b48e -10030e12: 2801 cmp r0, #1 -10030e14: d10b bne.n 10030e2e -10030e16: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 -10030e1a: b143 cbz r3, 10030e2e -10030e1c: 2b03 cmp r3, #3 -10030e1e: d006 beq.n 10030e2e -10030e20: 4c03 ldr r4, [pc, #12] ; (10030e30 ) -10030e22: 2006 movs r0, #6 -10030e24: 6923 ldr r3, [r4, #16] -10030e26: 4798 blx r3 -10030e28: 68e3 ldr r3, [r4, #12] -10030e2a: 2006 movs r0, #6 -10030e2c: 4798 blx r3 -10030e2e: bd10 pop {r4, pc} -10030e30: 10000318 .word 0x10000318 - -10030e34 : -10030e34: b570 push {r4, r5, r6, lr} -10030e36: f241 63c8 movw r3, #5832 ; 0x16c8 -10030e3a: 2100 movs r1, #0 -10030e3c: 4605 mov r5, r0 -10030e3e: 58c4 ldr r4, [r0, r3] -10030e40: f00a fb25 bl 1003b48e -10030e44: 2801 cmp r0, #1 -10030e46: d11c bne.n 10030e82 -10030e48: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 -10030e4c: b1cb cbz r3, 10030e82 -10030e4e: 2b03 cmp r3, #3 -10030e50: d017 beq.n 10030e82 -10030e52: 4e0c ldr r6, [pc, #48] ; (10030e84 ) -10030e54: 2006 movs r0, #6 -10030e56: 6933 ldr r3, [r6, #16] -10030e58: 4798 blx r3 -10030e5a: 68f3 ldr r3, [r6, #12] -10030e5c: 2006 movs r0, #6 -10030e5e: 4798 blx r3 -10030e60: 2300 movs r3, #0 -10030e62: f884 3e8a strb.w r3, [r4, #3722] ; 0xe8a -10030e66: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d -10030e6a: f023 0202 bic.w r2, r3, #2 -10030e6e: f013 0f05 tst.w r3, #5 -10030e72: f884 2e9d strb.w r2, [r4, #3741] ; 0xe9d -10030e76: d104 bne.n 10030e82 -10030e78: 4628 mov r0, r5 -10030e7a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10030e7e: f7ff bad7 b.w 10030430 -10030e82: bd70 pop {r4, r5, r6, pc} -10030e84: 10000318 .word 0x10000318 - -10030e88 : -10030e88: b538 push {r3, r4, r5, lr} -10030e8a: 2100 movs r1, #0 -10030e8c: f241 63c8 movw r3, #5832 ; 0x16c8 -10030e90: 4604 mov r4, r0 -10030e92: 58c5 ldr r5, [r0, r3] -10030e94: f00a fafb bl 1003b48e -10030e98: 2801 cmp r0, #1 -10030e9a: d113 bne.n 10030ec4 -10030e9c: f895 3e99 ldrb.w r3, [r5, #3737] ; 0xe99 -10030ea0: b183 cbz r3, 10030ec4 -10030ea2: 2b03 cmp r3, #3 -10030ea4: d00e beq.n 10030ec4 -10030ea6: f895 3e97 ldrb.w r3, [r5, #3735] ; 0xe97 -10030eaa: 4620 mov r0, r4 -10030eac: f003 030f and.w r3, r3, #15 -10030eb0: 2b02 cmp r3, #2 -10030eb2: d003 beq.n 10030ebc -10030eb4: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10030eb8: f7fe bdbe b.w 1002fa38 -10030ebc: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10030ec0: f7ff bbd6 b.w 10030670 -10030ec4: bd38 pop {r3, r4, r5, pc} - -10030ec6 : -10030ec6: b538 push {r3, r4, r5, lr} -10030ec8: 2100 movs r1, #0 -10030eca: f241 63c8 movw r3, #5832 ; 0x16c8 -10030ece: 4605 mov r5, r0 -10030ed0: 58c4 ldr r4, [r0, r3] -10030ed2: f00a fadc bl 1003b48e -10030ed6: 2801 cmp r0, #1 -10030ed8: d112 bne.n 10030f00 -10030eda: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 -10030ede: b17b cbz r3, 10030f00 -10030ee0: 2b03 cmp r3, #3 -10030ee2: d00d beq.n 10030f00 -10030ee4: f894 3e9d ldrb.w r3, [r4, #3741] ; 0xe9d -10030ee8: f023 0201 bic.w r2, r3, #1 -10030eec: f013 0f06 tst.w r3, #6 -10030ef0: f884 2e9d strb.w r2, [r4, #3741] ; 0xe9d -10030ef4: d104 bne.n 10030f00 -10030ef6: 4628 mov r0, r5 -10030ef8: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10030efc: f7ff ba98 b.w 10030430 -10030f00: bd38 pop {r3, r4, r5, pc} - -10030f02 : -10030f02: f241 63c8 movw r3, #5832 ; 0x16c8 -10030f06: 58c3 ldr r3, [r0, r3] -10030f08: f893 3e99 ldrb.w r3, [r3, #3737] ; 0xe99 -10030f0c: b10b cbz r3, 10030f12 -10030f0e: f7ff bd7d b.w 10030a0c -10030f12: 4770 bx lr - -10030f14 : -10030f14: f7ff be74 b.w 10030c00 - -10030f18 : -10030f18: b5f8 push {r3, r4, r5, r6, r7, lr} -10030f1a: f241 63c8 movw r3, #5832 ; 0x16c8 -10030f1e: 58c4 ldr r4, [r0, r3] -10030f20: 780b ldrb r3, [r1, #0] -10030f22: 4605 mov r5, r0 -10030f24: f3c3 0306 ubfx r3, r3, #0, #7 -10030f28: f884 3e99 strb.w r3, [r4, #3737] ; 0xe99 -10030f2c: b2da uxtb r2, r3 -10030f2e: 780b ldrb r3, [r1, #0] -10030f30: 2a03 cmp r2, #3 -10030f32: f3c3 13c0 ubfx r3, r3, #7, #1 -10030f36: f884 3e9a strb.w r3, [r4, #3738] ; 0xe9a -10030f3a: 7848 ldrb r0, [r1, #1] -10030f3c: f894 3e97 ldrb.w r3, [r4, #3735] ; 0xe97 -10030f40: ea4f 1010 mov.w r0, r0, lsr #4 -10030f44: f360 0303 bfi r3, r0, #0, #4 -10030f48: f884 3e97 strb.w r3, [r4, #3735] ; 0xe97 -10030f4c: 78cb ldrb r3, [r1, #3] -10030f4e: f3c3 0300 ubfx r3, r3, #0, #1 -10030f52: f884 3e89 strb.w r3, [r4, #3721] ; 0xe89 -10030f56: 7848 ldrb r0, [r1, #1] -10030f58: f894 3e97 ldrb.w r3, [r4, #3735] ; 0xe97 -10030f5c: f360 1307 bfi r3, r0, #4, #4 -10030f60: f884 3e97 strb.w r3, [r4, #3735] ; 0xe97 -10030f64: 788b ldrb r3, [r1, #2] -10030f66: f884 3e98 strb.w r3, [r4, #3736] ; 0xe98 -10030f6a: d117 bne.n 10030f9c -10030f6c: 79cb ldrb r3, [r1, #7] -10030f6e: f884 3eac strb.w r3, [r4, #3756] ; 0xeac -10030f72: 7a0a ldrb r2, [r1, #8] -10030f74: 79cb ldrb r3, [r1, #7] -10030f76: 429a cmp r2, r3 -10030f78: bf38 it cc -10030f7a: 4613 movcc r3, r2 -10030f7c: f884 3ead strb.w r3, [r4, #3757] ; 0xead -10030f80: 7a4a ldrb r2, [r1, #9] -10030f82: 79cb ldrb r3, [r1, #7] -10030f84: 429a cmp r2, r3 -10030f86: bf38 it cc -10030f88: 4613 movcc r3, r2 -10030f8a: f884 3eae strb.w r3, [r4, #3758] ; 0xeae -10030f8e: 7a8a ldrb r2, [r1, #10] -10030f90: 79cb ldrb r3, [r1, #7] -10030f92: 429a cmp r2, r3 -10030f94: bf38 it cc -10030f96: 4613 movcc r3, r2 -10030f98: f884 3eaf strb.w r3, [r4, #3759] ; 0xeaf -10030f9c: 790b ldrb r3, [r1, #4] -10030f9e: 4628 mov r0, r5 -10030fa0: f884 3e9b strb.w r3, [r4, #3739] ; 0xe9b -10030fa4: f7ff fdf0 bl 10030b88 -10030fa8: 4628 mov r0, r5 -10030faa: f7fe fbf7 bl 1002f79c -10030fae: f894 2e99 ldrb.w r2, [r4, #3737] ; 0xe99 -10030fb2: 4b1f ldr r3, [pc, #124] ; (10031030 ) -10030fb4: 1e51 subs r1, r2, #1 -10030fb6: 2600 movs r6, #0 -10030fb8: 2901 cmp r1, #1 -10030fba: 681f ldr r7, [r3, #0] -10030fbc: 4628 mov r0, r5 -10030fbe: 601e str r6, [r3, #0] -10030fc0: 461c mov r4, r3 -10030fc2: d809 bhi.n 10030fd8 -10030fc4: 4631 mov r1, r6 -10030fc6: 2206 movs r2, #6 -10030fc8: 2304 movs r3, #4 -10030fca: f7fe fc21 bl 1002f810 -10030fce: 4628 mov r0, r5 -10030fd0: 4631 mov r1, r6 -10030fd2: 2207 movs r2, #7 -10030fd4: 230f movs r3, #15 -10030fd6: e00a b.n 10030fee -10030fd8: 2a03 cmp r2, #3 -10030fda: d10b bne.n 10030ff4 -10030fdc: 4631 mov r1, r6 -10030fde: 2206 movs r2, #6 -10030fe0: 4633 mov r3, r6 -10030fe2: f7fe fc15 bl 1002f810 -10030fe6: 4628 mov r0, r5 -10030fe8: 4631 mov r1, r6 -10030fea: 2207 movs r2, #7 -10030fec: 4633 mov r3, r6 -10030fee: f7fe fc0f bl 1002f810 -10030ff2: e006 b.n 10031002 -10030ff4: 2106 movs r1, #6 -10030ff6: f7fe fc31 bl 1002f85c -10030ffa: 4628 mov r0, r5 -10030ffc: 2107 movs r1, #7 -10030ffe: f7fe fc2d bl 1002f85c -10031002: 4b0c ldr r3, [pc, #48] ; (10031034 ) -10031004: 22ff movs r2, #255 ; 0xff -10031006: 6027 str r7, [r4, #0] -10031008: 4628 mov r0, r5 -1003100a: 701a strb r2, [r3, #0] -1003100c: f7ff fad3 bl 100305b6 -10031010: 6823 ldr r3, [r4, #0] -10031012: f023 0308 bic.w r3, r3, #8 -10031016: 6023 str r3, [r4, #0] -10031018: 4b07 ldr r3, [pc, #28] ; (10031038 ) -1003101a: 681a ldr r2, [r3, #0] -1003101c: f022 0208 bic.w r2, r2, #8 -10031020: 601a str r2, [r3, #0] -10031022: 4b06 ldr r3, [pc, #24] ; (1003103c ) -10031024: 681a ldr r2, [r3, #0] -10031026: f022 0208 bic.w r2, r2, #8 -1003102a: 601a str r2, [r3, #0] -1003102c: bdf8 pop {r3, r4, r5, r6, r7, pc} -1003102e: bf00 nop -10031030: 10000314 .word 0x10000314 -10031034: 400804c8 .word 0x400804c8 -10031038: 10000310 .word 0x10000310 -1003103c: 1000030c .word 0x1000030c - -10031040 : -10031040: b537 push {r0, r1, r2, r4, r5, lr} -10031042: 2300 movs r3, #0 -10031044: 9301 str r3, [sp, #4] -10031046: f241 63c8 movw r3, #5832 ; 0x16c8 -1003104a: 58c3 ldr r3, [r0, r3] -1003104c: 4604 mov r4, r0 -1003104e: f893 2e99 ldrb.w r2, [r3, #3737] ; 0xe99 -10031052: 6885 ldr r5, [r0, #8] -10031054: b142 cbz r2, 10031068 -10031056: f893 1e9b ldrb.w r1, [r3, #3739] ; 0xe9b -1003105a: f893 3e9c ldrb.w r3, [r3, #3740] ; 0xe9c -1003105e: 428b cmp r3, r1 -10031060: d002 beq.n 10031068 -10031062: 2201 movs r2, #1 -10031064: f7ff f888 bl 10030178 -10031068: 3520 adds r5, #32 -1003106a: a901 add r1, sp, #4 -1003106c: 4628 mov r0, r5 -1003106e: f7e6 fa67 bl 10017540 -10031072: 4620 mov r0, r4 -10031074: f7ff f848 bl 10030108 -10031078: 4628 mov r0, r5 -1003107a: a901 add r1, sp, #4 -1003107c: f7e6 fa6a bl 10017554 -10031080: b003 add sp, #12 -10031082: bd30 pop {r4, r5, pc} - -10031084 : -10031084: f241 63c8 movw r3, #5832 ; 0x16c8 -10031088: 58c3 ldr r3, [r0, r3] -1003108a: b082 sub sp, #8 -1003108c: f8d3 1ea8 ldr.w r1, [r3, #3752] ; 0xea8 -10031090: 2200 movs r2, #0 -10031092: 9201 str r2, [sp, #4] -10031094: 9101 str r1, [sp, #4] -10031096: 9801 ldr r0, [sp, #4] -10031098: f8c3 2ea8 str.w r2, [r3, #3752] ; 0xea8 -1003109c: b002 add sp, #8 -1003109e: 4770 bx lr - -100310a0 : -100310a0: b530 push {r4, r5, lr} -100310a2: f241 63c8 movw r3, #5832 ; 0x16c8 -100310a6: b087 sub sp, #28 -100310a8: 58c4 ldr r4, [r0, r3] -100310aa: 2100 movs r1, #0 -100310ac: 220c movs r2, #12 -100310ae: 4605 mov r5, r0 -100310b0: 4668 mov r0, sp -100310b2: f00c fda7 bl 1003dc04 -100310b6: a803 add r0, sp, #12 -100310b8: 2100 movs r1, #0 -100310ba: 220c movs r2, #12 -100310bc: f00c fda2 bl 1003dc04 -100310c0: f894 3e99 ldrb.w r3, [r4, #3737] ; 0xe99 -100310c4: b183 cbz r3, 100310e8 -100310c6: f894 3e93 ldrb.w r3, [r4, #3731] ; 0xe93 -100310ca: b16b cbz r3, 100310e8 -100310cc: 4b0f ldr r3, [pc, #60] ; (1003110c ) -100310ce: 681b ldr r3, [r3, #0] -100310d0: 079b lsls r3, r3, #30 -100310d2: d509 bpl.n 100310e8 -100310d4: f44f 3300 mov.w r3, #131072 ; 0x20000 -100310d8: 9303 str r3, [sp, #12] -100310da: 4628 mov r0, r5 -100310dc: 2301 movs r3, #1 -100310de: 4669 mov r1, sp -100310e0: aa03 add r2, sp, #12 -100310e2: 9305 str r3, [sp, #20] -100310e4: f7fa f886 bl 1002b1f4 -100310e8: 4b09 ldr r3, [pc, #36] ; (10031110 ) -100310ea: 781b ldrb r3, [r3, #0] -100310ec: f003 0303 and.w r3, r3, #3 -100310f0: 2b03 cmp r3, #3 -100310f2: d108 bne.n 10031106 -100310f4: f894 3e55 ldrb.w r3, [r4, #3669] ; 0xe55 -100310f8: 2b01 cmp r3, #1 -100310fa: d104 bne.n 10031106 -100310fc: 4b05 ldr r3, [pc, #20] ; (10031114 ) -100310fe: 781a ldrb r2, [r3, #0] -10031100: f042 0280 orr.w r2, r2, #128 ; 0x80 -10031104: 701a strb r2, [r3, #0] -10031106: b007 add sp, #28 -10031108: bd30 pop {r4, r5, pc} -1003110a: bf00 nop -1003110c: 40080080 .word 0x40080080 -10031110: 40080102 .word 0x40080102 -10031114: 40080521 .word 0x40080521 - -10031118 : -10031118: f241 63c8 movw r3, #5832 ; 0x16c8 -1003111c: 58c3 ldr r3, [r0, r3] -1003111e: 780a ldrb r2, [r1, #0] -10031120: f883 2e55 strb.w r2, [r3, #3669] ; 0xe55 -10031124: 4770 bx lr - ... - -10031128 : -10031128: f241 63c8 movw r3, #5832 ; 0x16c8 -1003112c: b530 push {r4, r5, lr} -1003112e: 58c5 ldr r5, [r0, r3] -10031130: 4b0e ldr r3, [pc, #56] ; (1003116c ) -10031132: b087 sub sp, #28 -10031134: 681a ldr r2, [r3, #0] -10031136: 4604 mov r4, r0 -10031138: f442 6200 orr.w r2, r2, #2048 ; 0x800 -1003113c: 601a str r2, [r3, #0] -1003113e: 4b0c ldr r3, [pc, #48] ; (10031170 ) -10031140: aa03 add r2, sp, #12 -10031142: 9300 str r3, [sp, #0] -10031144: 4669 mov r1, sp -10031146: 2300 movs r3, #0 -10031148: 9301 str r3, [sp, #4] -1003114a: 9302 str r3, [sp, #8] -1003114c: 9303 str r3, [sp, #12] -1003114e: 9304 str r3, [sp, #16] -10031150: 9305 str r3, [sp, #20] -10031152: f7fa f84f bl 1002b1f4 -10031156: 4620 mov r0, r4 -10031158: f7fe fd44 bl 1002fbe4 -1003115c: 2301 movs r3, #1 -1003115e: f885 3e55 strb.w r3, [r5, #3669] ; 0xe55 -10031162: 4b04 ldr r3, [pc, #16] ; (10031174 ) -10031164: 2228 movs r2, #40 ; 0x28 -10031166: 701a strb r2, [r3, #0] -10031168: b007 add sp, #28 -1003116a: bd30 pop {r4, r5, pc} -1003116c: 40080100 .word 0x40080100 -10031170: 20060000 .word 0x20060000 -10031174: 4008055c .word 0x4008055c - -10031178 : -10031178: 4770 bx lr - ... - -1003117c : -1003117c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10031180: f241 63c8 movw r3, #5832 ; 0x16c8 -10031184: 58c6 ldr r6, [r0, r3] -10031186: f8df 80fc ldr.w r8, [pc, #252] ; 10031284 -1003118a: 6883 ldr r3, [r0, #8] -1003118c: b085 sub sp, #20 -1003118e: ac04 add r4, sp, #16 -10031190: f8d6 1e40 ldr.w r1, [r6, #3648] ; 0xe40 -10031194: f8d8 2000 ldr.w r2, [r8] -10031198: f04f 0a00 mov.w sl, #0 -1003119c: f844 ad04 str.w sl, [r4, #-4]! -100311a0: f103 0920 add.w r9, r3, #32 -100311a4: 430a orrs r2, r1 -100311a6: 4605 mov r5, r0 -100311a8: 4621 mov r1, r4 -100311aa: 4648 mov r0, r9 -100311ac: f8c8 2000 str.w r2, [r8] -100311b0: f7e6 f9c6 bl 10017540 -100311b4: f8c6 ae40 str.w sl, [r6, #3648] ; 0xe40 -100311b8: 4648 mov r0, r9 -100311ba: 4621 mov r1, r4 -100311bc: f506 7700 add.w r7, r6, #512 ; 0x200 -100311c0: f7e6 f9c8 bl 10017554 -100311c4: f8d8 3000 ldr.w r3, [r8] -100311c8: 4c2e ldr r4, [pc, #184] ; (10031284 ) -100311ca: 2b00 cmp r3, #0 -100311cc: d056 beq.n 1003127c -100311ce: 4628 mov r0, r5 -100311d0: f00a f941 bl 1003b456 -100311d4: fa5f fb80 uxtb.w fp, r0 -100311d8: f1bb 0f00 cmp.w fp, #0 -100311dc: d103 bne.n 100311e6 -100311de: 6823 ldr r3, [r4, #0] -100311e0: f023 0309 bic.w r3, r3, #9 -100311e4: 6023 str r3, [r4, #0] -100311e6: f506 745b add.w r4, r6, #876 ; 0x36c -100311ea: f04f 0900 mov.w r9, #0 -100311ee: fa5f fa89 uxtb.w sl, r9 -100311f2: 45da cmp sl, fp -100311f4: d2e6 bcs.n 100311c4 -100311f6: 4628 mov r0, r5 -100311f8: 4651 mov r1, sl -100311fa: f00a f948 bl 1003b48e -100311fe: 2800 cmp r0, #0 -10031200: d038 beq.n 10031274 -10031202: f894 3038 ldrb.w r3, [r4, #56] ; 0x38 -10031206: 2b01 cmp r3, #1 -10031208: d034 beq.n 10031274 -1003120a: f8d8 3000 ldr.w r3, [r8] -1003120e: f884 a03b strb.w sl, [r4, #59] ; 0x3b -10031212: 0719 lsls r1, r3, #28 -10031214: d507 bpl.n 10031226 -10031216: 4a1b ldr r2, [pc, #108] ; (10031284 ) -10031218: f023 0308 bic.w r3, r3, #8 -1003121c: 4638 mov r0, r7 -1003121e: 4621 mov r1, r4 -10031220: 6013 str r3, [r2, #0] -10031222: f007 f95d bl 100384e0 -10031226: f8d8 3000 ldr.w r3, [r8] -1003122a: 07da lsls r2, r3, #31 -1003122c: d522 bpl.n 10031274 -1003122e: 4a15 ldr r2, [pc, #84] ; (10031284 ) -10031230: f023 0301 bic.w r3, r3, #1 -10031234: 6013 str r3, [r2, #0] -10031236: 4628 mov r0, r5 -10031238: f894 103b ldrb.w r1, [r4, #59] ; 0x3b -1003123c: 2203 movs r2, #3 -1003123e: f00a f8d7 bl 1003b3f0 -10031242: 0603 lsls r3, r0, #24 -10031244: d41a bmi.n 1003127c -10031246: 2200 movs r2, #0 -10031248: 4638 mov r0, r7 -1003124a: 4621 mov r1, r4 -1003124c: f00a f92c bl 1003b4a8 -10031250: f505 53c3 add.w r3, r5, #6240 ; 0x1860 -10031254: 7e1a ldrb r2, [r3, #24] -10031256: 2aff cmp r2, #255 ; 0xff -10031258: d104 bne.n 10031264 -1003125a: 4638 mov r0, r7 -1003125c: 4621 mov r1, r4 -1003125e: f007 f9e1 bl 10038624 -10031262: e007 b.n 10031274 -10031264: f894 3036 ldrb.w r3, [r4, #54] ; 0x36 -10031268: 4638 mov r0, r7 -1003126a: 9300 str r3, [sp, #0] -1003126c: 4621 mov r1, r4 -1003126e: 2300 movs r3, #0 -10031270: f006 ffe0 bl 10038234 -10031274: f109 0901 add.w r9, r9, #1 -10031278: 3458 adds r4, #88 ; 0x58 -1003127a: e7b8 b.n 100311ee -1003127c: b005 add sp, #20 -1003127e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10031282: bf00 nop -10031284: 1004dd5c .word 0x1004dd5c - -10031288 : -10031288: f241 63c8 movw r3, #5832 ; 0x16c8 -1003128c: b507 push {r0, r1, r2, lr} -1003128e: 58c3 ldr r3, [r0, r3] -10031290: b161 cbz r1, 100312ac -10031292: 2901 cmp r1, #1 -10031294: d115 bne.n 100312c2 -10031296: f8d3 21a0 ldr.w r2, [r3, #416] ; 0x1a0 -1003129a: 2100 movs r1, #0 -1003129c: f422 6240 bic.w r2, r2, #3072 ; 0xc00 -100312a0: f442 6280 orr.w r2, r2, #1024 ; 0x400 -100312a4: f8c3 21a0 str.w r2, [r3, #416] ; 0x1a0 -100312a8: 9200 str r2, [sp, #0] -100312aa: e006 b.n 100312ba -100312ac: f8d3 21a0 ldr.w r2, [r3, #416] ; 0x1a0 -100312b0: f442 6240 orr.w r2, r2, #3072 ; 0xc00 -100312b4: f8c3 21a0 str.w r2, [r3, #416] ; 0x1a0 -100312b8: 9200 str r2, [sp, #0] -100312ba: 2218 movs r2, #24 -100312bc: 4b02 ldr r3, [pc, #8] ; (100312c8 ) -100312be: f7fd fcfd bl 1002ecbc -100312c2: b003 add sp, #12 -100312c4: f85d fb04 ldr.w pc, [sp], #4 -100312c8: 000fffff .word 0x000fffff - -100312cc : -100312cc: f241 63c8 movw r3, #5832 ; 0x16c8 -100312d0: 58c2 ldr r2, [r0, r3] -100312d2: 2101 movs r1, #1 -100312d4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -100312d8: f882 103f strb.w r1, [r2, #63] ; 0x3f -100312dc: 58c6 ldr r6, [r0, r3] -100312de: 4604 mov r4, r0 -100312e0: f04f 0800 mov.w r8, #0 -100312e4: f896 303f ldrb.w r3, [r6, #63] ; 0x3f -100312e8: fa5f f588 uxtb.w r5, r8 -100312ec: 42ab cmp r3, r5 -100312ee: d93f bls.n 10031370 -100312f0: 231c movs r3, #28 -100312f2: fb03 6305 mla r3, r3, r5, r6 -100312f6: f503 77c2 add.w r7, r3, #388 ; 0x184 -100312fa: f503 73c0 add.w r3, r3, #384 ; 0x180 -100312fe: b925 cbnz r5, 1003130a -10031300: 4620 mov r0, r4 -10031302: 6859 ldr r1, [r3, #4] -10031304: 2210 movs r2, #16 -10031306: f7fd fc49 bl 1002eb9c -1003130a: 68b9 ldr r1, [r7, #8] -1003130c: f44f 1280 mov.w r2, #1048576 ; 0x100000 -10031310: 2301 movs r3, #1 -10031312: 4620 mov r0, r4 -10031314: f7fd fc57 bl 1002ebc6 -10031318: 2001 movs r0, #1 -1003131a: f7e6 f9b3 bl 10017684 -1003131e: 6879 ldr r1, [r7, #4] -10031320: 2210 movs r2, #16 -10031322: 2301 movs r3, #1 -10031324: 4620 mov r0, r4 -10031326: f7fd fc4e bl 1002ebc6 -1003132a: 2001 movs r0, #1 -1003132c: f7e6 f9aa bl 10017684 -10031330: 6939 ldr r1, [r7, #16] -10031332: f44f 6280 mov.w r2, #1024 ; 0x400 -10031336: 2300 movs r3, #0 -10031338: 4620 mov r0, r4 -1003133a: f7fd fc44 bl 1002ebc6 -1003133e: 2001 movs r0, #1 -10031340: f7e6 f9a0 bl 10017684 -10031344: 4620 mov r0, r4 -10031346: 6939 ldr r1, [r7, #16] -10031348: f44f 6200 mov.w r2, #2048 ; 0x800 -1003134c: 2300 movs r3, #0 -1003134e: f7fd fc3a bl 1002ebc6 -10031352: 2001 movs r0, #1 -10031354: f7e6 f996 bl 10017684 -10031358: b93d cbnz r5, 1003136a -1003135a: f506 7000 add.w r0, r6, #512 ; 0x200 -1003135e: 4629 mov r1, r5 -10031360: 462a mov r2, r5 -10031362: f008 fe9a bl 1003a09a -10031366: 2801 cmp r0, #1 -10031368: d009 beq.n 1003137e -1003136a: f108 0801 add.w r8, r8, #1 -1003136e: e7b9 b.n 100312e4 -10031370: f506 7000 add.w r0, r6, #512 ; 0x200 -10031374: f008 fea0 bl 1003a0b8 -10031378: 2001 movs r0, #1 -1003137a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1003137e: 4628 mov r0, r5 -10031380: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -10031384 : -10031384: f890 3c38 ldrb.w r3, [r0, #3128] ; 0xc38 -10031388: b133 cbz r3, 10031398 -1003138a: 2300 movs r3, #0 -1003138c: f8c0 3c3c str.w r3, [r0, #3132] ; 0xc3c -10031390: f8c0 3c40 str.w r3, [r0, #3136] ; 0xc40 -10031394: f880 3c38 strb.w r3, [r0, #3128] ; 0xc38 -10031398: f8d0 3c3c ldr.w r3, [r0, #3132] ; 0xc3c -1003139c: f8d0 2c40 ldr.w r2, [r0, #3136] ; 0xc40 -100313a0: 3301 adds r3, #1 -100313a2: f8c0 3c3c str.w r3, [r0, #3132] ; 0xc3c -100313a6: f891 106d ldrb.w r1, [r1, #109] ; 0x6d -100313aa: 440a add r2, r1 -100313ac: fbb2 f3f3 udiv r3, r2, r3 -100313b0: f8c0 2c40 str.w r2, [r0, #3136] ; 0xc40 -100313b4: f880 3c39 strb.w r3, [r0, #3129] ; 0xc39 -100313b8: 4770 bx lr - -100313ba : -100313ba: b538 push {r3, r4, r5, lr} -100313bc: 2254 movs r2, #84 ; 0x54 -100313be: 4604 mov r4, r0 -100313c0: 460d mov r5, r1 -100313c2: 301c adds r0, #28 -100313c4: 2100 movs r1, #0 -100313c6: f7e6 f833 bl 10017430 -100313ca: 682b ldr r3, [r5, #0] -100313cc: f3c3 020d ubfx r2, r3, #0, #14 -100313d0: f3c3 3380 ubfx r3, r3, #14, #1 -100313d4: f884 3032 strb.w r3, [r4, #50] ; 0x32 -100313d8: 682b ldr r3, [r5, #0] -100313da: 83a2 strh r2, [r4, #28] -100313dc: f3c3 33c0 ubfx r3, r3, #15, #1 -100313e0: f884 3033 strb.w r3, [r4, #51] ; 0x33 -100313e4: 886b ldrh r3, [r5, #2] -100313e6: f003 030f and.w r3, r3, #15 -100313ea: 00db lsls r3, r3, #3 -100313ec: 77e3 strb r3, [r4, #31] -100313ee: 682b ldr r3, [r5, #0] -100313f0: f3c3 5302 ubfx r3, r3, #20, #3 -100313f4: f884 302f strb.w r3, [r4, #47] ; 0x2f -100313f8: 682b ldr r3, [r5, #0] -100313fa: f3c3 53c0 ubfx r3, r3, #23, #1 -100313fe: f884 3024 strb.w r3, [r4, #36] ; 0x24 -10031402: 78eb ldrb r3, [r5, #3] -10031404: f003 0303 and.w r3, r3, #3 -10031408: f884 3020 strb.w r3, [r4, #32] -1003140c: 682b ldr r3, [r5, #0] -1003140e: f3c3 6380 ubfx r3, r3, #26, #1 -10031412: 77a3 strb r3, [r4, #30] -10031414: 682b ldr r3, [r5, #0] -10031416: f083 6300 eor.w r3, r3, #134217728 ; 0x8000000 -1003141a: f3c3 63c0 ubfx r3, r3, #27, #1 -1003141e: f884 302e strb.w r3, [r4, #46] ; 0x2e -10031422: 686b ldr r3, [r5, #4] -10031424: f3c3 2303 ubfx r3, r3, #8, #4 -10031428: f884 3025 strb.w r3, [r4, #37] ; 0x25 -1003142c: 686b ldr r3, [r5, #4] -1003142e: f3c3 6380 ubfx r3, r3, #26, #1 -10031432: f884 3027 strb.w r3, [r4, #39] ; 0x27 -10031436: 686b ldr r3, [r5, #4] -10031438: f3c3 63c0 ubfx r3, r3, #27, #1 -1003143c: f884 302b strb.w r3, [r4, #43] ; 0x2b -10031440: 68ab ldr r3, [r5, #8] -10031442: f3c3 020b ubfx r2, r3, #0, #12 -10031446: f3c3 3303 ubfx r3, r3, #12, #4 -1003144a: f884 302a strb.w r3, [r4, #42] ; 0x2a -1003144e: 68ab ldr r3, [r5, #8] -10031450: 8522 strh r2, [r4, #40] ; 0x28 -10031452: f013 5380 ands.w r3, r3, #268435456 ; 0x10000000 -10031456: bf18 it ne -10031458: 2304 movne r3, #4 -1003145a: f884 305c strb.w r3, [r4, #92] ; 0x5c -1003145e: 68eb ldr r3, [r5, #12] -10031460: f003 037f and.w r3, r3, #127 ; 0x7f -10031464: f884 3068 strb.w r3, [r4, #104] ; 0x68 -10031468: bd38 pop {r3, r4, r5, pc} - -1003146a : -1003146a: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -1003146e: 6905 ldr r5, [r0, #16] -10031470: f241 63c8 movw r3, #5832 ; 0x16c8 -10031474: 58ef ldr r7, [r5, r3] -10031476: 6f84 ldr r4, [r0, #120] ; 0x78 -10031478: 2300 movs r3, #0 -1003147a: f88d 3002 strb.w r3, [sp, #2] -1003147e: f88d 3003 strb.w r3, [sp, #3] -10031482: f88d 3004 strb.w r3, [sp, #4] -10031486: 8822 ldrh r2, [r4, #0] -10031488: 4689 mov r9, r1 -1003148a: f002 010c and.w r1, r2, #12 -1003148e: 2904 cmp r1, #4 -10031490: 4606 mov r6, r0 -10031492: f100 0869 add.w r8, r0, #105 ; 0x69 -10031496: d002 beq.n 1003149e -10031498: 8e41 ldrh r1, [r0, #50] ; 0x32 -1003149a: 2900 cmp r1, #0 -1003149c: d06b beq.n 10031576 -1003149e: 4618 mov r0, r3 -100314a0: b2c3 uxtb r3, r0 -100314a2: f88d 3002 strb.w r3, [sp, #2] -100314a6: b1cb cbz r3, 100314dc -100314a8: 8823 ldrh r3, [r4, #0] -100314aa: f413 7f80 tst.w r3, #256 ; 0x100 -100314ae: bf0c ite eq -100314b0: 2200 moveq r2, #0 -100314b2: 2202 movne r2, #2 -100314b4: f3c3 2340 ubfx r3, r3, #9, #1 -100314b8: 4313 orrs r3, r2 -100314ba: 2b01 cmp r3, #1 -100314bc: d003 beq.n 100314c6 -100314be: d302 bcc.n 100314c6 -100314c0: f104 0010 add.w r0, r4, #16 -100314c4: e000 b.n 100314c8 -100314c6: 1d20 adds r0, r4, #4 -100314c8: f505 51a4 add.w r1, r5, #5248 ; 0x1480 -100314cc: 3119 adds r1, #25 -100314ce: 2206 movs r2, #6 -100314d0: f7e5 ffa6 bl 10017420 -100314d4: 3000 adds r0, #0 -100314d6: bf18 it ne -100314d8: 2001 movne r0, #1 -100314da: e000 b.n 100314de -100314dc: 4618 mov r0, r3 -100314de: f89d 3002 ldrb.w r3, [sp, #2] -100314e2: f88d 0003 strb.w r0, [sp, #3] -100314e6: b133 cbz r3, 100314f6 -100314e8: 8823 ldrh r3, [r4, #0] -100314ea: f003 03fc and.w r3, r3, #252 ; 0xfc -100314ee: f1b3 0280 subs.w r2, r3, #128 ; 0x80 -100314f2: 4253 negs r3, r2 -100314f4: 4153 adcs r3, r2 -100314f6: b2db uxtb r3, r3 -100314f8: f88d 3004 strb.w r3, [sp, #4] -100314fc: b123 cbz r3, 10031508 -100314fe: 6929 ldr r1, [r5, #16] -10031500: f011 0108 ands.w r1, r1, #8 -10031504: d154 bne.n 100315b0 -10031506: e001 b.n 1003150c -10031508: f104 010a add.w r1, r4, #10 -1003150c: 23ff movs r3, #255 ; 0xff -1003150e: f505 6046 add.w r0, r5, #3168 ; 0xc60 -10031512: f88d 3001 strb.w r3, [sp, #1] -10031516: f7f6 febd bl 10028294 -1003151a: 4604 mov r4, r0 -1003151c: b118 cbz r0, 10031526 -1003151e: f8d0 3100 ldr.w r3, [r0, #256] ; 0x100 -10031522: f88d 3001 strb.w r3, [sp, #1] -10031526: f896 2068 ldrb.w r2, [r6, #104] ; 0x68 -1003152a: ab02 add r3, sp, #8 -1003152c: f803 2d08 strb.w r2, [r3, #-8]! -10031530: f507 7000 add.w r0, r7, #512 ; 0x200 -10031534: 466b mov r3, sp -10031536: 4641 mov r1, r8 -10031538: 464a mov r2, r9 -1003153a: f008 fdac bl 1003a096 -1003153e: 2300 movs r3, #0 -10031540: f8c6 3088 str.w r3, [r6, #136] ; 0x88 -10031544: f89d 3002 ldrb.w r3, [sp, #2] -10031548: b113 cbz r3, 10031550 -1003154a: 692b ldr r3, [r5, #16] -1003154c: 06db lsls r3, r3, #27 -1003154e: d40a bmi.n 10031566 -10031550: f89d 3003 ldrb.w r3, [sp, #3] -10031554: b913 cbnz r3, 1003155c -10031556: f89d 3004 ldrb.w r3, [sp, #4] -1003155a: b37b cbz r3, 100315bc -1003155c: 692b ldr r3, [r5, #16] -1003155e: f013 0f60 tst.w r3, #96 ; 0x60 -10031562: d128 bne.n 100315b6 -10031564: e002 b.n 1003156c -10031566: b34c cbz r4, 100315bc -10031568: f8c6 4088 str.w r4, [r6, #136] ; 0x88 -1003156c: 4628 mov r0, r5 -1003156e: 4631 mov r1, r6 -10031570: f7ff ff08 bl 10031384 -10031574: e022 b.n 100315bc -10031576: f412 7f80 tst.w r2, #256 ; 0x100 -1003157a: bf0c ite eq -1003157c: 2300 moveq r3, #0 -1003157e: 2302 movne r3, #2 -10031580: f3c2 2240 ubfx r2, r2, #9, #1 -10031584: 431a orrs r2, r3 -10031586: 2a02 cmp r2, #2 -10031588: d008 beq.n 1003159c -1003158a: 2a03 cmp r2, #3 -1003158c: d006 beq.n 1003159c -1003158e: 2a01 cmp r2, #1 -10031590: bf14 ite ne -10031592: f104 0010 addne.w r0, r4, #16 -10031596: f104 000a addeq.w r0, r4, #10 -1003159a: e000 b.n 1003159e -1003159c: 1d20 adds r0, r4, #4 -1003159e: f105 019c add.w r1, r5, #156 ; 0x9c -100315a2: 2206 movs r2, #6 -100315a4: f7e5 ff3c bl 10017420 -100315a8: 3000 adds r0, #0 -100315aa: bf18 it ne -100315ac: 2001 movne r0, #1 -100315ae: e777 b.n 100314a0 -100315b0: f105 019c add.w r1, r5, #156 ; 0x9c -100315b4: e7aa b.n 1003150c -100315b6: 2c00 cmp r4, #0 -100315b8: d1d6 bne.n 10031568 -100315ba: e7d7 b.n 1003156c -100315bc: b003 add sp, #12 -100315be: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - -100315c2 : -100315c2: f89d 0000 ldrb.w r0, [sp] -100315c6: b978 cbnz r0, 100315e8 -100315c8: 2a58 cmp r2, #88 ; 0x58 -100315ca: d906 bls.n 100315da -100315cc: f1b2 0c7f subs.w ip, r2, #127 ; 0x7f -100315d0: f1dc 0000 rsbs r0, ip, #0 -100315d4: eb50 000c adcs.w r0, r0, ip -100315d8: e000 b.n 100315dc -100315da: 2001 movs r0, #1 -100315dc: f011 0f80 tst.w r1, #128 ; 0x80 -100315e0: d100 bne.n 100315e4 -100315e2: b908 cbnz r0, 100315e8 -100315e4: f001 027f and.w r2, r1, #127 ; 0x7f -100315e8: 2a58 cmp r2, #88 ; 0x58 -100315ea: d902 bls.n 100315f2 -100315ec: 2a7f cmp r2, #127 ; 0x7f -100315ee: bf18 it ne -100315f0: 461a movne r2, r3 -100315f2: 4610 mov r0, r2 -100315f4: 4770 bx lr - -100315f6 : -100315f6: 3901 subs r1, #1 -100315f8: 290d cmp r1, #13 -100315fa: d808 bhi.n 1003160e -100315fc: f241 33b5 movw r3, #5045 ; 0x13b5 -10031600: 5cc3 ldrb r3, [r0, r3] -10031602: f013 0f0b tst.w r3, #11 -10031606: bf0c ite eq -10031608: 2000 moveq r0, #0 -1003160a: 2001 movne r0, #1 -1003160c: 4770 bx lr -1003160e: 2000 movs r0, #0 -10031610: 4770 bx lr - ... - -10031614 : -10031614: 3804 subs r0, #4 -10031616: b2c0 uxtb r0, r0 -10031618: 2883 cmp r0, #131 ; 0x83 -1003161a: bf9a itte ls -1003161c: 4b01 ldrls r3, [pc, #4] ; (10031624 ) -1003161e: 5c18 ldrbls r0, [r3, r0] -10031620: 2000 movhi r0, #0 -10031622: 4770 bx lr -10031624: 10041b53 .word 0x10041b53 - -10031628 : -10031628: 3801 subs r0, #1 -1003162a: b2c0 uxtb r0, r0 -1003162c: 2812 cmp r0, #18 -1003162e: bf9a itte ls -10031630: 4b01 ldrls r3, [pc, #4] ; (10031638 ) -10031632: 5c18 ldrbls r0, [r3, r0] -10031634: 2002 movhi r0, #2 -10031636: 4770 bx lr -10031638: 10041bd7 .word 0x10041bd7 - -1003163c : -1003163c: 2000 movs r0, #0 -1003163e: 5c0b ldrb r3, [r1, r0] -10031640: f013 0f80 tst.w r3, #128 ; 0x80 -10031644: d04c beq.n 100316e0 -10031646: f003 037f and.w r3, r3, #127 ; 0x7f -1003164a: 2b16 cmp r3, #22 -1003164c: d030 beq.n 100316b0 -1003164e: d812 bhi.n 10031676 -10031650: 2b0b cmp r3, #11 -10031652: d029 beq.n 100316a8 -10031654: d807 bhi.n 10031666 -10031656: 2b02 cmp r3, #2 -10031658: d022 beq.n 100316a0 -1003165a: 2b04 cmp r3, #4 -1003165c: d140 bne.n 100316e0 -1003165e: 8813 ldrh r3, [r2, #0] -10031660: f043 0302 orr.w r3, r3, #2 -10031664: e03b b.n 100316de -10031666: 2b0c cmp r3, #12 -10031668: d026 beq.n 100316b8 -1003166a: 2b12 cmp r3, #18 -1003166c: d138 bne.n 100316e0 -1003166e: 8813 ldrh r3, [r2, #0] -10031670: f043 0320 orr.w r3, r3, #32 -10031674: e033 b.n 100316de -10031676: 2b30 cmp r3, #48 ; 0x30 -10031678: d026 beq.n 100316c8 -1003167a: d807 bhi.n 1003168c -1003167c: 2b18 cmp r3, #24 -1003167e: d01f beq.n 100316c0 -10031680: 2b24 cmp r3, #36 ; 0x24 -10031682: d12d bne.n 100316e0 -10031684: 8813 ldrh r3, [r2, #0] -10031686: f043 0380 orr.w r3, r3, #128 ; 0x80 -1003168a: e028 b.n 100316de -1003168c: 2b60 cmp r3, #96 ; 0x60 -1003168e: d01f beq.n 100316d0 -10031690: 2b6c cmp r3, #108 ; 0x6c -10031692: d021 beq.n 100316d8 -10031694: 2b48 cmp r3, #72 ; 0x48 -10031696: d123 bne.n 100316e0 -10031698: 8813 ldrh r3, [r2, #0] -1003169a: f443 7300 orr.w r3, r3, #512 ; 0x200 -1003169e: e01e b.n 100316de -100316a0: 8813 ldrh r3, [r2, #0] -100316a2: f043 0301 orr.w r3, r3, #1 -100316a6: e01a b.n 100316de -100316a8: 8813 ldrh r3, [r2, #0] -100316aa: f043 0304 orr.w r3, r3, #4 -100316ae: e016 b.n 100316de -100316b0: 8813 ldrh r3, [r2, #0] -100316b2: f043 0308 orr.w r3, r3, #8 -100316b6: e012 b.n 100316de -100316b8: 8813 ldrh r3, [r2, #0] -100316ba: f043 0310 orr.w r3, r3, #16 -100316be: e00e b.n 100316de -100316c0: 8813 ldrh r3, [r2, #0] -100316c2: f043 0340 orr.w r3, r3, #64 ; 0x40 -100316c6: e00a b.n 100316de -100316c8: 8813 ldrh r3, [r2, #0] -100316ca: f443 7380 orr.w r3, r3, #256 ; 0x100 -100316ce: e006 b.n 100316de -100316d0: 8813 ldrh r3, [r2, #0] -100316d2: f443 6380 orr.w r3, r3, #1024 ; 0x400 -100316d6: e002 b.n 100316de -100316d8: 8813 ldrh r3, [r2, #0] -100316da: f443 6300 orr.w r3, r3, #2048 ; 0x800 -100316de: 8013 strh r3, [r2, #0] -100316e0: 3001 adds r0, #1 -100316e2: 2810 cmp r0, #16 -100316e4: d1ab bne.n 1003163e -100316e6: 4770 bx lr - -100316e8 : -100316e8: 6883 ldr r3, [r0, #8] -100316ea: 2001 movs r0, #1 -100316ec: 7c99 ldrb r1, [r3, #18] -100316ee: 7c5a ldrb r2, [r3, #17] -100316f0: 7559 strb r1, [r3, #21] -100316f2: 7cd9 ldrb r1, [r3, #19] -100316f4: 751a strb r2, [r3, #20] -100316f6: 7599 strb r1, [r3, #22] -100316f8: 75d9 strb r1, [r3, #23] -100316fa: 761a strb r2, [r3, #24] -100316fc: 765a strb r2, [r3, #25] -100316fe: 769a strb r2, [r3, #26] -10031700: 76da strb r2, [r3, #27] -10031702: 4770 bx lr - -10031704 : -10031704: f500 52a4 add.w r2, r0, #5248 ; 0x1480 -10031708: b510 push {r4, lr} -1003170a: 2103 movs r1, #3 -1003170c: 3219 adds r2, #25 -1003170e: 4604 mov r4, r0 -10031710: f000 fedf bl 100324d2 -10031714: f641 035c movw r3, #6236 ; 0x185c -10031718: 58e0 ldr r0, [r4, r3] -1003171a: b138 cbz r0, 1003172c -1003171c: f500 52a4 add.w r2, r0, #5248 ; 0x1480 -10031720: 2103 movs r1, #3 -10031722: 3219 adds r2, #25 -10031724: e8bd 4010 ldmia.w sp!, {r4, lr} -10031728: f000 bed3 b.w 100324d2 -1003172c: bd10 pop {r4, pc} - ... - -10031730 : -10031730: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10031734: f44f 7181 mov.w r1, #258 ; 0x102 -10031738: b091 sub sp, #68 ; 0x44 -1003173a: 4604 mov r4, r0 -1003173c: f006 fa9d bl 10037c7a -10031740: f44f 61aa mov.w r1, #1360 ; 0x550 -10031744: 4607 mov r7, r0 -10031746: 4620 mov r0, r4 -10031748: f006 fa97 bl 10037c7a -1003174c: f240 5151 movw r1, #1361 ; 0x551 -10031750: 4605 mov r5, r0 -10031752: 4620 mov r0, r4 -10031754: f006 fa91 bl 10037c7a -10031758: f240 515a movw r1, #1370 ; 0x55a -1003175c: 4606 mov r6, r0 -1003175e: 4620 mov r0, r4 -10031760: f006 fa8b bl 10037c7a -10031764: f240 515b movw r1, #1371 ; 0x55b -10031768: 9002 str r0, [sp, #8] -1003176a: 4620 mov r0, r4 -1003176c: f006 fa85 bl 10037c7a -10031770: f44f 61ae mov.w r1, #1392 ; 0x570 -10031774: 9003 str r0, [sp, #12] -10031776: 4620 mov r0, r4 -10031778: f006 fa7f bl 10037c7a -1003177c: f240 5171 movw r1, #1393 ; 0x571 -10031780: 4683 mov fp, r0 -10031782: 4620 mov r0, r4 -10031784: f006 fa79 bl 10037c7a -10031788: f04f 0900 mov.w r9, #0 -1003178c: 4682 mov sl, r0 -1003178e: f509 61ac add.w r1, r9, #1376 ; 0x560 -10031792: 4620 mov r0, r4 -10031794: f006 fa71 bl 10037c7a -10031798: f10d 0830 add.w r8, sp, #48 ; 0x30 -1003179c: f808 0009 strb.w r0, [r8, r9] -100317a0: f109 0901 add.w r9, r9, #1 -100317a4: f1b9 0f08 cmp.w r9, #8 -100317a8: d1f1 bne.n 1003178e -100317aa: 2300 movs r3, #0 -100317ac: f503 61ad add.w r1, r3, #1384 ; 0x568 -100317b0: 4620 mov r0, r4 -100317b2: 9301 str r3, [sp, #4] -100317b4: f006 fa61 bl 10037c7a -100317b8: 9b01 ldr r3, [sp, #4] -100317ba: f10d 0938 add.w r9, sp, #56 ; 0x38 -100317be: f809 0003 strb.w r0, [r9, r3] -100317c2: 3301 adds r3, #1 -100317c4: 2b08 cmp r3, #8 -100317c6: d1f1 bne.n 100317ac -100317c8: 2300 movs r3, #0 -100317ca: f503 61c2 add.w r1, r3, #1552 ; 0x610 -100317ce: 4620 mov r0, r4 -100317d0: 9301 str r3, [sp, #4] -100317d2: f006 fa52 bl 10037c7a -100317d6: 9b01 ldr r3, [sp, #4] -100317d8: aa04 add r2, sp, #16 -100317da: 54d0 strb r0, [r2, r3] -100317dc: 3301 adds r3, #1 -100317de: 2b06 cmp r3, #6 -100317e0: d1f3 bne.n 100317ca -100317e2: 2300 movs r3, #0 -100317e4: f503 61c3 add.w r1, r3, #1560 ; 0x618 -100317e8: 4620 mov r0, r4 -100317ea: 9301 str r3, [sp, #4] -100317ec: f006 fa45 bl 10037c7a -100317f0: 9b01 ldr r3, [sp, #4] -100317f2: aa06 add r2, sp, #24 -100317f4: 54d0 strb r0, [r2, r3] -100317f6: 3301 adds r3, #1 -100317f8: 2b06 cmp r3, #6 -100317fa: d1f3 bne.n 100317e4 -100317fc: 2300 movs r3, #0 -100317fe: f503 61e0 add.w r1, r3, #1792 ; 0x700 -10031802: 4620 mov r0, r4 -10031804: 9301 str r3, [sp, #4] -10031806: f006 fa38 bl 10037c7a -1003180a: 9b01 ldr r3, [sp, #4] -1003180c: aa08 add r2, sp, #32 -1003180e: 54d0 strb r0, [r2, r3] -10031810: 3301 adds r3, #1 -10031812: 2b06 cmp r3, #6 -10031814: d1f3 bne.n 100317fe -10031816: 2300 movs r3, #0 -10031818: f503 61e1 add.w r1, r3, #1800 ; 0x708 -1003181c: 4620 mov r0, r4 -1003181e: 9301 str r3, [sp, #4] -10031820: f006 fa2b bl 10037c7a -10031824: 9b01 ldr r3, [sp, #4] -10031826: aa0a add r2, sp, #40 ; 0x28 -10031828: 54d0 strb r0, [r2, r3] -1003182a: 3301 adds r3, #1 -1003182c: 2b06 cmp r3, #6 -1003182e: d1f3 bne.n 10031818 -10031830: f005 02e7 and.w r2, r5, #231 ; 0xe7 -10031834: f44f 61aa mov.w r1, #1360 ; 0x550 -10031838: f042 0210 orr.w r2, r2, #16 -1003183c: 4620 mov r0, r4 -1003183e: f006 fa31 bl 10037ca4 -10031842: f006 02e7 and.w r2, r6, #231 ; 0xe7 -10031846: f240 5151 movw r1, #1361 ; 0x551 -1003184a: f042 0210 orr.w r2, r2, #16 -1003184e: 4620 mov r0, r4 -10031850: f006 fa28 bl 10037ca4 -10031854: f007 0203 and.w r2, r7, #3 -10031858: f3c7 0381 ubfx r3, r7, #2, #2 -1003185c: ea43 0382 orr.w r3, r3, r2, lsl #2 -10031860: f007 02f0 and.w r2, r7, #240 ; 0xf0 -10031864: 431a orrs r2, r3 -10031866: f44f 7181 mov.w r1, #258 ; 0x102 -1003186a: 4620 mov r0, r4 -1003186c: f006 fa1a bl 10037ca4 -10031870: f44f 61aa mov.w r1, #1360 ; 0x550 -10031874: f006 02f7 and.w r2, r6, #247 ; 0xf7 -10031878: 4620 mov r0, r4 -1003187a: f006 fa13 bl 10037ca4 -1003187e: f240 515a movw r1, #1370 ; 0x55a -10031882: 465a mov r2, fp -10031884: 4620 mov r0, r4 -10031886: f006 fa0d bl 10037ca4 -1003188a: 4620 mov r0, r4 -1003188c: f240 515b movw r1, #1371 ; 0x55b -10031890: 4652 mov r2, sl -10031892: f006 fa07 bl 10037ca4 -10031896: 2700 movs r7, #0 -10031898: f507 61ac add.w r1, r7, #1376 ; 0x560 -1003189c: f819 2007 ldrb.w r2, [r9, r7] -100318a0: 4620 mov r0, r4 -100318a2: 3701 adds r7, #1 -100318a4: f006 f9fe bl 10037ca4 -100318a8: 2f08 cmp r7, #8 -100318aa: d1f5 bne.n 10031898 -100318ac: 2700 movs r7, #0 -100318ae: ab08 add r3, sp, #32 -100318b0: f507 61c2 add.w r1, r7, #1552 ; 0x610 -100318b4: 5dda ldrb r2, [r3, r7] -100318b6: 4620 mov r0, r4 -100318b8: 3701 adds r7, #1 -100318ba: f006 f9f3 bl 10037ca4 -100318be: 2f06 cmp r7, #6 -100318c0: d1f5 bne.n 100318ae -100318c2: 2700 movs r7, #0 -100318c4: ab0a add r3, sp, #40 ; 0x28 -100318c6: f507 61c3 add.w r1, r7, #1560 ; 0x618 -100318ca: 5dda ldrb r2, [r3, r7] -100318cc: 4620 mov r0, r4 -100318ce: 3701 adds r7, #1 -100318d0: f006 f9e8 bl 10037ca4 -100318d4: 2f06 cmp r7, #6 -100318d6: d1f5 bne.n 100318c4 -100318d8: f240 5151 movw r1, #1361 ; 0x551 -100318dc: f005 02f7 and.w r2, r5, #247 ; 0xf7 -100318e0: 4620 mov r0, r4 -100318e2: f006 f9df bl 10037ca4 -100318e6: f240 5171 movw r1, #1393 ; 0x571 -100318ea: 9a02 ldr r2, [sp, #8] -100318ec: 4620 mov r0, r4 -100318ee: f006 f9d9 bl 10037ca4 -100318f2: 4620 mov r0, r4 -100318f4: f240 5171 movw r1, #1393 ; 0x571 -100318f8: 9a03 ldr r2, [sp, #12] -100318fa: f006 f9d3 bl 10037ca4 -100318fe: 2700 movs r7, #0 -10031900: f507 61ad add.w r1, r7, #1384 ; 0x568 -10031904: f818 2007 ldrb.w r2, [r8, r7] -10031908: 4620 mov r0, r4 -1003190a: 3701 adds r7, #1 -1003190c: f006 f9ca bl 10037ca4 -10031910: 2f08 cmp r7, #8 -10031912: d1f5 bne.n 10031900 -10031914: 2700 movs r7, #0 -10031916: ab04 add r3, sp, #16 -10031918: f507 61e0 add.w r1, r7, #1792 ; 0x700 -1003191c: 5dda ldrb r2, [r3, r7] -1003191e: 4620 mov r0, r4 -10031920: 3701 adds r7, #1 -10031922: f006 f9bf bl 10037ca4 -10031926: 2f06 cmp r7, #6 -10031928: d1f5 bne.n 10031916 -1003192a: 2700 movs r7, #0 -1003192c: ab06 add r3, sp, #24 -1003192e: f507 61e1 add.w r1, r7, #1800 ; 0x708 -10031932: 5dda ldrb r2, [r3, r7] -10031934: 4620 mov r0, r4 -10031936: 3701 adds r7, #1 -10031938: f006 f9b4 bl 10037ca4 -1003193c: 2f06 cmp r7, #6 -1003193e: d1f5 bne.n 1003192c -10031940: f44f 61aa mov.w r1, #1360 ; 0x550 -10031944: 4632 mov r2, r6 -10031946: 4620 mov r0, r4 -10031948: f006 f9ac bl 10037ca4 -1003194c: 462a mov r2, r5 -1003194e: f240 5151 movw r1, #1361 ; 0x551 -10031952: 4620 mov r0, r4 -10031954: f006 f9a6 bl 10037ca4 -10031958: f641 036a movw r3, #6250 ; 0x186a -1003195c: 5ce1 ldrb r1, [r4, r3] -1003195e: f641 055c movw r5, #6236 ; 0x185c -10031962: 4a17 ldr r2, [pc, #92] ; (100319c0 ) -10031964: b989 cbnz r1, 1003198a -10031966: 2001 movs r0, #1 -10031968: 54e0 strb r0, [r4, r3] -1003196a: 5960 ldr r0, [r4, r5] -1003196c: 54c1 strb r1, [r0, r3] -1003196e: 6813 ldr r3, [r2, #0] -10031970: b313 cbz r3, 100319b8 -10031972: 4814 ldr r0, [pc, #80] ; (100319c4 ) -10031974: f7e9 f8f4 bl 1001ab60 -10031978: 5962 ldr r2, [r4, r5] -1003197a: 4913 ldr r1, [pc, #76] ; (100319c8 ) -1003197c: f641 0334 movw r3, #6196 ; 0x1834 -10031980: f8d1 01b0 ldr.w r0, [r1, #432] ; 0x1b0 -10031984: 58d1 ldr r1, [r2, r3] -10031986: 58e2 ldr r2, [r4, r3] -10031988: e011 b.n 100319ae -1003198a: 2100 movs r1, #0 -1003198c: 54e1 strb r1, [r4, r3] -1003198e: 5961 ldr r1, [r4, r5] -10031990: 2001 movs r0, #1 -10031992: 54c8 strb r0, [r1, r3] -10031994: 6813 ldr r3, [r2, #0] -10031996: b17b cbz r3, 100319b8 -10031998: 480a ldr r0, [pc, #40] ; (100319c4 ) -1003199a: f7e9 f8e1 bl 1001ab60 -1003199e: 490a ldr r1, [pc, #40] ; (100319c8 ) -100319a0: 5962 ldr r2, [r4, r5] -100319a2: f641 0334 movw r3, #6196 ; 0x1834 -100319a6: f8d1 01b4 ldr.w r0, [r1, #436] ; 0x1b4 -100319aa: 58d2 ldr r2, [r2, r3] -100319ac: 58e1 ldr r1, [r4, r3] -100319ae: b011 add sp, #68 ; 0x44 -100319b0: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100319b4: f7e9 b8d4 b.w 1001ab60 -100319b8: b011 add sp, #68 ; 0x44 -100319ba: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -100319be: bf00 nop -100319c0: 10044ec0 .word 0x10044ec0 -100319c4: 10042939 .word 0x10042939 -100319c8: 10043a4c .word 0x10043a4c - -100319cc : -100319cc: 2948 cmp r1, #72 ; 0x48 -100319ce: d101 bne.n 100319d4 -100319d0: f7ff beae b.w 10031730 -100319d4: 4770 bx lr - -100319d6 : -100319d6: 4770 bx lr - -100319d8 : -100319d8: b570 push {r4, r5, r6, lr} -100319da: 4605 mov r5, r0 -100319dc: 460e mov r6, r1 -100319de: f500 54a0 add.w r4, r0, #5120 ; 0x1400 -100319e2: b151 cbz r1, 100319fa -100319e4: f894 1036 ldrb.w r1, [r4, #54] ; 0x36 -100319e8: f7f4 fe3e bl 10026668 -100319ec: 4628 mov r0, r5 -100319ee: f894 1044 ldrb.w r1, [r4, #68] ; 0x44 -100319f2: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -100319f6: f7f4 be14 b.w 10026622 -100319fa: f894 3043 ldrb.w r3, [r4, #67] ; 0x43 -100319fe: f884 3044 strb.w r3, [r4, #68] ; 0x44 -10031a02: f7f4 fe0e bl 10026622 -10031a06: f894 3035 ldrb.w r3, [r4, #53] ; 0x35 -10031a0a: 4628 mov r0, r5 -10031a0c: f884 3036 strb.w r3, [r4, #54] ; 0x36 -10031a10: 4631 mov r1, r6 -10031a12: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10031a16: f7f4 be27 b.w 10026668 - ... - -10031a1c : -10031a1c: b537 push {r0, r1, r2, r4, r5, lr} -10031a1e: f241 63a3 movw r3, #5795 ; 0x16a3 -10031a22: 5cc3 ldrb r3, [r0, r3] -10031a24: 4604 mov r4, r0 -10031a26: 2b01 cmp r3, #1 -10031a28: d118 bne.n 10031a5c -10031a2a: f241 65a4 movw r5, #5796 ; 0x16a4 -10031a2e: 5d43 ldrb r3, [r0, r5] -10031a30: 2bff cmp r3, #255 ; 0xff -10031a32: d013 beq.n 10031a5c -10031a34: 2100 movs r1, #0 -10031a36: 2255 movs r2, #85 ; 0x55 -10031a38: f04f 33ff mov.w r3, #4294967295 -10031a3c: f000 fe35 bl 100326aa -10031a40: 5d63 ldrb r3, [r4, r5] -10031a42: f420 2078 bic.w r0, r0, #1015808 ; 0xf8000 -10031a46: f003 030f and.w r3, r3, #15 -10031a4a: ea40 30c3 orr.w r0, r0, r3, lsl #15 -10031a4e: 9000 str r0, [sp, #0] -10031a50: 2100 movs r1, #0 -10031a52: 4620 mov r0, r4 -10031a54: 2255 movs r2, #85 ; 0x55 -10031a56: 4b02 ldr r3, [pc, #8] ; (10031a60 ) -10031a58: f000 fe30 bl 100326bc -10031a5c: b003 add sp, #12 -10031a5e: bd30 pop {r4, r5, pc} -10031a60: 000fffff .word 0x000fffff - -10031a64 : -10031a64: b570 push {r4, r5, r6, lr} -10031a66: f640 6604 movw r6, #3588 ; 0xe04 -10031a6a: 42b1 cmp r1, r6 -10031a6c: 9804 ldr r0, [sp, #16] -10031a6e: 9d05 ldr r5, [sp, #20] -10031a70: 9c06 ldr r4, [sp, #24] -10031a72: d03b beq.n 10031aec -10031a74: d807 bhi.n 10031a86 -10031a76: f640 066c movw r6, #2156 ; 0x86c -10031a7a: 42b1 cmp r1, r6 -10031a7c: d053 beq.n 10031b26 -10031a7e: f5b1 6f60 cmp.w r1, #3584 ; 0xe00 -10031a82: d016 beq.n 10031ab2 -10031a84: bd70 pop {r4, r5, r6, pc} -10031a86: f5b1 6f61 cmp.w r1, #3600 ; 0xe10 -10031a8a: d07a beq.n 10031b82 -10031a8c: f640 6214 movw r2, #3604 ; 0xe14 -10031a90: 4291 cmp r1, r2 -10031a92: f000 8093 beq.w 10031bbc -10031a96: f640 6208 movw r2, #3592 ; 0xe08 -10031a9a: 4291 cmp r1, r2 -10031a9c: f040 80ac bne.w 10031bf8 -10031aa0: 2200 movs r2, #0 -10031aa2: 7002 strb r2, [r0, #0] -10031aa4: f3c3 3203 ubfx r2, r3, #12, #4 -10031aa8: eb02 0282 add.w r2, r2, r2, lsl #2 -10031aac: f3c3 2303 ubfx r3, r3, #8, #4 -10031ab0: e062 b.n 10031b78 -10031ab2: 2204 movs r2, #4 -10031ab4: 7002 strb r2, [r0, #0] -10031ab6: 2205 movs r2, #5 -10031ab8: 7042 strb r2, [r0, #1] -10031aba: 2206 movs r2, #6 -10031abc: 7082 strb r2, [r0, #2] -10031abe: 2207 movs r2, #7 -10031ac0: 70c2 strb r2, [r0, #3] -10031ac2: 3d01 subs r5, #1 -10031ac4: 2200 movs r2, #0 -10031ac6: 1d11 adds r1, r2, #4 -10031ac8: fa23 f101 lsr.w r1, r3, r1 -10031acc: fa23 f002 lsr.w r0, r3, r2 -10031ad0: f001 010f and.w r1, r1, #15 -10031ad4: eb01 0181 add.w r1, r1, r1, lsl #2 -10031ad8: f000 000f and.w r0, r0, #15 -10031adc: 3208 adds r2, #8 -10031ade: eb00 0141 add.w r1, r0, r1, lsl #1 -10031ae2: 2a20 cmp r2, #32 -10031ae4: f805 1f01 strb.w r1, [r5, #1]! -10031ae8: d1ed bne.n 10031ac6 -10031aea: e083 b.n 10031bf4 -10031aec: 2208 movs r2, #8 -10031aee: 7002 strb r2, [r0, #0] -10031af0: 2209 movs r2, #9 -10031af2: 7042 strb r2, [r0, #1] -10031af4: 220a movs r2, #10 -10031af6: 7082 strb r2, [r0, #2] -10031af8: 220b movs r2, #11 -10031afa: 70c2 strb r2, [r0, #3] -10031afc: 3d01 subs r5, #1 -10031afe: 2200 movs r2, #0 -10031b00: 1d11 adds r1, r2, #4 -10031b02: fa23 f101 lsr.w r1, r3, r1 -10031b06: fa23 f002 lsr.w r0, r3, r2 -10031b0a: f001 010f and.w r1, r1, #15 -10031b0e: eb01 0181 add.w r1, r1, r1, lsl #2 -10031b12: f000 000f and.w r0, r0, #15 -10031b16: 3208 adds r2, #8 -10031b18: eb00 0141 add.w r1, r0, r1, lsl #1 -10031b1c: 2a20 cmp r2, #32 -10031b1e: f805 1f01 strb.w r1, [r5, #1]! -10031b22: d1ed bne.n 10031b00 -10031b24: e066 b.n 10031bf4 -10031b26: f512 7f80 cmn.w r2, #256 ; 0x100 -10031b2a: d11b bne.n 10031b64 -10031b2c: 2201 movs r2, #1 -10031b2e: 7002 strb r2, [r0, #0] -10031b30: 2202 movs r2, #2 -10031b32: 7042 strb r2, [r0, #1] -10031b34: 2203 movs r2, #3 -10031b36: 7082 strb r2, [r0, #2] -10031b38: 3d01 subs r5, #1 -10031b3a: 220c movs r2, #12 -10031b3c: 1f10 subs r0, r2, #4 -10031b3e: fa23 f102 lsr.w r1, r3, r2 -10031b42: fa23 f000 lsr.w r0, r3, r0 -10031b46: f001 010f and.w r1, r1, #15 -10031b4a: f000 000f and.w r0, r0, #15 -10031b4e: eb01 0181 add.w r1, r1, r1, lsl #2 -10031b52: 3208 adds r2, #8 -10031b54: eb00 0141 add.w r1, r0, r1, lsl #1 -10031b58: 2a24 cmp r2, #36 ; 0x24 -10031b5a: f805 1f01 strb.w r1, [r5, #1]! -10031b5e: d1ed bne.n 10031b3c -10031b60: 2303 movs r3, #3 -10031b62: e048 b.n 10031bf6 -10031b64: 2aff cmp r2, #255 ; 0xff -10031b66: d147 bne.n 10031bf8 -10031b68: 2203 movs r2, #3 -10031b6a: 7002 strb r2, [r0, #0] -10031b6c: f3c3 1203 ubfx r2, r3, #4, #4 -10031b70: eb02 0282 add.w r2, r2, r2, lsl #2 -10031b74: f003 030f and.w r3, r3, #15 -10031b78: eb03 0242 add.w r2, r3, r2, lsl #1 -10031b7c: 702a strb r2, [r5, #0] -10031b7e: 2301 movs r3, #1 -10031b80: e039 b.n 10031bf6 -10031b82: 220c movs r2, #12 -10031b84: 7002 strb r2, [r0, #0] -10031b86: 220d movs r2, #13 -10031b88: 7042 strb r2, [r0, #1] -10031b8a: 220e movs r2, #14 -10031b8c: 7082 strb r2, [r0, #2] -10031b8e: 220f movs r2, #15 -10031b90: 70c2 strb r2, [r0, #3] -10031b92: 3d01 subs r5, #1 -10031b94: 2200 movs r2, #0 -10031b96: 1d11 adds r1, r2, #4 -10031b98: fa23 f101 lsr.w r1, r3, r1 -10031b9c: fa23 f002 lsr.w r0, r3, r2 -10031ba0: f001 010f and.w r1, r1, #15 -10031ba4: eb01 0181 add.w r1, r1, r1, lsl #2 -10031ba8: f000 000f and.w r0, r0, #15 -10031bac: 3208 adds r2, #8 -10031bae: eb00 0141 add.w r1, r0, r1, lsl #1 -10031bb2: 2a20 cmp r2, #32 -10031bb4: f805 1f01 strb.w r1, [r5, #1]! -10031bb8: d1ed bne.n 10031b96 -10031bba: e01b b.n 10031bf4 -10031bbc: 2210 movs r2, #16 -10031bbe: 7002 strb r2, [r0, #0] -10031bc0: 2211 movs r2, #17 -10031bc2: 7042 strb r2, [r0, #1] -10031bc4: 2212 movs r2, #18 -10031bc6: 7082 strb r2, [r0, #2] -10031bc8: 2213 movs r2, #19 -10031bca: 70c2 strb r2, [r0, #3] -10031bcc: 3d01 subs r5, #1 -10031bce: 2200 movs r2, #0 -10031bd0: 1d11 adds r1, r2, #4 -10031bd2: fa23 f101 lsr.w r1, r3, r1 -10031bd6: fa23 f002 lsr.w r0, r3, r2 -10031bda: f001 010f and.w r1, r1, #15 -10031bde: eb01 0181 add.w r1, r1, r1, lsl #2 -10031be2: f000 000f and.w r0, r0, #15 -10031be6: 3208 adds r2, #8 -10031be8: eb00 0141 add.w r1, r0, r1, lsl #1 -10031bec: 2a20 cmp r2, #32 -10031bee: f805 1f01 strb.w r1, [r5, #1]! -10031bf2: d1ed bne.n 10031bd0 -10031bf4: 2304 movs r3, #4 -10031bf6: 7023 strb r3, [r4, #0] -10031bf8: bd70 pop {r4, r5, r6, pc} - ... - -10031bfc : -10031bfc: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -10031c00: 461e mov r6, r3 -10031c02: b088 sub sp, #32 -10031c04: f241 63c8 movw r3, #5832 ; 0x16c8 -10031c08: f850 a003 ldr.w sl, [r0, r3] -10031c0c: ab06 add r3, sp, #24 -10031c0e: 9300 str r3, [sp, #0] -10031c10: ab07 add r3, sp, #28 -10031c12: 9301 str r3, [sp, #4] -10031c14: f10d 0317 add.w r3, sp, #23 -10031c18: 460c mov r4, r1 -10031c1a: 9302 str r3, [sp, #8] -10031c1c: a910 add r1, sp, #64 ; 0x40 -10031c1e: 2700 movs r7, #0 -10031c20: 4615 mov r5, r2 -10031c22: c90e ldmia r1, {r1, r2, r3} -10031c24: 9706 str r7, [sp, #24] -10031c26: f88d 7017 strb.w r7, [sp, #23] -10031c2a: 9707 str r7, [sp, #28] -10031c2c: f7ff ff1a bl 10031a64 -10031c30: 2c01 cmp r4, #1 -10031c32: d82a bhi.n 10031c8a -10031c34: 2d03 cmp r5, #3 -10031c36: d828 bhi.n 10031c8a -10031c38: 2e03 cmp r6, #3 -10031c3a: d826 bhi.n 10031c8a -10031c3c: f89d 2017 ldrb.w r2, [sp, #23] -10031c40: b2fb uxtb r3, r7 -10031c42: 429a cmp r2, r3 -10031c44: d921 bls.n 10031c8a -10031c46: 1961 adds r1, r4, r5 -10031c48: 2014 movs r0, #20 -10031c4a: 4431 add r1, r6 -10031c4c: fb00 a101 mla r1, r0, r1, sl -10031c50: aa08 add r2, sp, #32 -10031c52: 441a add r2, r3 -10031c54: f812 3c08 ldrb.w r3, [r2, #-8] -10031c58: f812 2c04 ldrb.w r2, [r2, #-4] -10031c5c: 4419 add r1, r3 -10031c5e: f881 2046 strb.w r2, [r1, #70] ; 0x46 -10031c62: 490b ldr r1, [pc, #44] ; (10031c90 ) -10031c64: f04f 4080 mov.w r0, #1073741824 ; 0x40000000 -10031c68: e9d1 8902 ldrd r8, r9, [r1, #8] -10031c6c: 2100 movs r1, #0 -10031c6e: ea00 0008 and.w r0, r0, r8 -10031c72: ea01 0109 and.w r1, r1, r9 -10031c76: ea50 0c01 orrs.w ip, r0, r1 -10031c7a: d004 beq.n 10031c86 -10031c7c: 4805 ldr r0, [pc, #20] ; (10031c94 ) -10031c7e: 4619 mov r1, r3 -10031c80: b252 sxtb r2, r2 -10031c82: f7e8 ff6d bl 1001ab60 -10031c86: 3701 adds r7, #1 -10031c88: e7d8 b.n 10031c3c -10031c8a: b008 add sp, #32 -10031c8c: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10031c90: 10000720 .word 0x10000720 -10031c94: 10041bfe .word 0x10041bfe - -10031c98 : -10031c98: f241 63c8 movw r3, #5832 ; 0x16c8 -10031c9c: 58c0 ldr r0, [r0, r3] -10031c9e: 2300 movs r3, #0 -10031ca0: 18c2 adds r2, r0, r3 -10031ca2: 3301 adds r3, #1 -10031ca4: 2100 movs r1, #0 -10031ca6: 2b14 cmp r3, #20 -10031ca8: f882 1046 strb.w r1, [r2, #70] ; 0x46 -10031cac: d1f8 bne.n 10031ca0 -10031cae: 4770 bx lr - -10031cb0 : -10031cb0: b5f0 push {r4, r5, r6, r7, lr} -10031cb2: f241 67c8 movw r7, #5832 ; 0x16c8 -10031cb6: 59c7 ldr r7, [r0, r7] -10031cb8: f897 720c ldrb.w r7, [r7, #524] ; 0x20c -10031cbc: b11f cbz r7, 10031cc6 -10031cbe: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} -10031cc2: f7ff bf9b b.w 10031bfc -10031cc6: bdf0 pop {r4, r5, r6, r7, pc} - -10031cc8 : -10031cc8: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10031ccc: f89d 8020 ldrb.w r8, [sp, #32] -10031cd0: 460e mov r6, r1 -10031cd2: 4699 mov r9, r3 -10031cd4: 4641 mov r1, r8 -10031cd6: f241 63c8 movw r3, #5832 ; 0x16c8 -10031cda: 4614 mov r4, r2 -10031cdc: 58c7 ldr r7, [r0, r3] -10031cde: f7ff fc8a bl 100315f6 -10031ce2: f108 35ff add.w r5, r8, #4294967295 -10031ce6: 2800 cmp r0, #0 -10031ce8: b2ed uxtb r5, r5 -10031cea: bf14 ite ne -10031cec: 462b movne r3, r5 -10031cee: 2300 moveq r3, #0 -10031cf0: 9a09 ldr r2, [sp, #36] ; 0x24 -10031cf2: f1b8 0f0f cmp.w r8, #15 -10031cf6: bf34 ite cc -10031cf8: 2001 movcc r0, #1 -10031cfa: 2000 movcs r0, #0 -10031cfc: bf28 it cs -10031cfe: 461d movcs r5, r3 -10031d00: 7010 strb r0, [r2, #0] -10031d02: b378 cbz r0, 10031d64 -10031d04: 2c02 cmp r4, #2 -10031d06: d005 beq.n 10031d14 -10031d08: 2c04 cmp r4, #4 -10031d0a: d003 beq.n 10031d14 -10031d0c: 2c0b cmp r4, #11 -10031d0e: d001 beq.n 10031d14 -10031d10: 2c16 cmp r4, #22 -10031d12: d106 bne.n 10031d22 -10031d14: 230e movs r3, #14 -10031d16: fb03 7306 mla r3, r3, r6, r7 -10031d1a: 441d add r5, r3 -10031d1c: f895 005a ldrb.w r0, [r5, #90] ; 0x5a -10031d20: e009 b.n 10031d36 -10031d22: 2c0b cmp r4, #11 -10031d24: d906 bls.n 10031d34 -10031d26: 230e movs r3, #14 -10031d28: fb03 7306 mla r3, r3, r6, r7 -10031d2c: 441d add r5, r3 -10031d2e: f895 0068 ldrb.w r0, [r5, #104] ; 0x68 -10031d32: e000 b.n 10031d36 -10031d34: 2000 movs r0, #0 -10031d36: f1a4 030c sub.w r3, r4, #12 -10031d3a: 2b60 cmp r3, #96 ; 0x60 -10031d3c: d806 bhi.n 10031d4c -10031d3e: 2c16 cmp r4, #22 -10031d40: d004 beq.n 10031d4c -10031d42: 19bb adds r3, r7, r6 -10031d44: f893 3076 ldrb.w r3, [r3, #118] ; 0x76 -10031d48: 4418 add r0, r3 -10031d4a: b2c0 uxtb r0, r0 -10031d4c: f1b9 0f00 cmp.w r9, #0 -10031d50: d108 bne.n 10031d64 -10031d52: f084 0480 eor.w r4, r4, #128 ; 0x80 -10031d56: 2c47 cmp r4, #71 ; 0x47 -10031d58: d804 bhi.n 10031d64 -10031d5a: 443e add r6, r7 -10031d5c: f896 3077 ldrb.w r3, [r6, #119] ; 0x77 -10031d60: 4418 add r0, r3 -10031d62: b2c0 uxtb r0, r0 -10031d64: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - -10031d68 : -10031d68: f241 63c8 movw r3, #5832 ; 0x16c8 -10031d6c: 58c3 ldr r3, [r0, r3] -10031d6e: f893 099f ldrb.w r0, [r3, #2463] ; 0x99f -10031d72: b168 cbz r0, 10031d90 -10031d74: 2a02 cmp r2, #2 -10031d76: 4419 add r1, r3 -10031d78: d005 beq.n 10031d86 -10031d7a: 2a04 cmp r2, #4 -10031d7c: d003 beq.n 10031d86 -10031d7e: 2a0b cmp r2, #11 -10031d80: d001 beq.n 10031d86 -10031d82: 2a16 cmp r2, #22 -10031d84: d102 bne.n 10031d8c -10031d86: f891 0df5 ldrb.w r0, [r1, #3573] ; 0xdf5 -10031d8a: e001 b.n 10031d90 -10031d8c: f891 0df4 ldrb.w r0, [r1, #3572] ; 0xdf4 -10031d90: b240 sxtb r0, r0 -10031d92: 4770 bx lr - -10031d94 : -10031d94: 3804 subs r0, #4 -10031d96: b2c0 uxtb r0, r0 -10031d98: 2883 cmp r0, #131 ; 0x83 -10031d9a: bf9a itte ls -10031d9c: 4b01 ldrls r3, [pc, #4] ; (10031da4 ) -10031d9e: 5c18 ldrbls r0, [r3, r0] -10031da0: 2000 movhi r0, #0 -10031da2: 4770 bx lr -10031da4: 10041c46 .word 0x10041c46 - -10031da8 : -10031da8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10031dac: 4698 mov r8, r3 -10031dae: f241 63c8 movw r3, #5832 ; 0x16c8 -10031db2: 58c7 ldr r7, [r0, r3] -10031db4: 4604 mov r4, r0 -10031db6: f89d 0018 ldrb.w r0, [sp, #24] -10031dba: 460d mov r5, r1 -10031dbc: 4616 mov r6, r2 -10031dbe: f7ff ffe9 bl 10031d94 -10031dc2: f241 33f5 movw r3, #5109 ; 0x13f5 -10031dc6: 5ce4 ldrb r4, [r4, r3] -10031dc8: 2c02 cmp r4, #2 -10031dca: d104 bne.n 10031dd6 -10031dcc: f897 3043 ldrb.w r3, [r7, #67] ; 0x43 -10031dd0: 2b02 cmp r3, #2 -10031dd2: d101 bne.n 10031dd8 -10031dd4: e014 b.n 10031e00 -10031dd6: b18c cbz r4, 10031dfc -10031dd8: 2d01 cmp r5, #1 -10031dda: d811 bhi.n 10031e00 -10031ddc: 2e03 cmp r6, #3 -10031dde: d80f bhi.n 10031e00 -10031de0: f1b8 0f03 cmp.w r8, #3 -10031de4: d80c bhi.n 10031e00 -10031de6: 2813 cmp r0, #19 -10031de8: d80a bhi.n 10031e00 -10031dea: 4435 add r5, r6 -10031dec: 44a8 add r8, r5 -10031dee: 2514 movs r5, #20 -10031df0: fb05 7708 mla r7, r5, r8, r7 -10031df4: 4438 add r0, r7 -10031df6: f890 0046 ldrb.w r0, [r0, #70] ; 0x46 -10031dfa: e002 b.n 10031e02 -10031dfc: 4620 mov r0, r4 -10031dfe: e000 b.n 10031e02 -10031e00: 2000 movs r0, #0 -10031e02: b240 sxtb r0, r0 -10031e04: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -10031e08 : -10031e08: b537 push {r0, r1, r2, r4, r5, lr} -10031e0a: 2316 movs r3, #22 -10031e0c: 2100 movs r1, #0 -10031e0e: 9300 str r3, [sp, #0] -10031e10: 460a mov r2, r1 -10031e12: 460b mov r3, r1 -10031e14: 4604 mov r4, r0 -10031e16: f7ff ffc7 bl 10031da8 -10031e1a: f241 65c8 movw r5, #5832 ; 0x16c8 -10031e1e: 5963 ldr r3, [r4, r5] -10031e20: 2100 movs r1, #0 -10031e22: f883 0174 strb.w r0, [r3, #372] ; 0x174 -10031e26: 236c movs r3, #108 ; 0x6c -10031e28: 9300 str r3, [sp, #0] -10031e2a: 460a mov r2, r1 -10031e2c: 460b mov r3, r1 -10031e2e: 4620 mov r0, r4 -10031e30: f7ff ffba bl 10031da8 -10031e34: 5963 ldr r3, [r4, r5] -10031e36: 2100 movs r1, #0 -10031e38: f883 0175 strb.w r0, [r3, #373] ; 0x175 -10031e3c: 2387 movs r3, #135 ; 0x87 -10031e3e: 9300 str r3, [sp, #0] -10031e40: 4620 mov r0, r4 -10031e42: 460b mov r3, r1 -10031e44: 460a mov r2, r1 -10031e46: f7ff ffaf bl 10031da8 -10031e4a: 5963 ldr r3, [r4, r5] -10031e4c: f883 0176 strb.w r0, [r3, #374] ; 0x176 -10031e50: b003 add sp, #12 -10031e52: bd30 pop {r4, r5, pc} - -10031e54 : -10031e54: b5f8 push {r3, r4, r5, r6, r7, lr} -10031e56: 461e mov r6, r3 -10031e58: f241 63c8 movw r3, #5832 ; 0x16c8 -10031e5c: 460c mov r4, r1 -10031e5e: 58c7 ldr r7, [r0, r3] -10031e60: f89d 0018 ldrb.w r0, [sp, #24] -10031e64: 4615 mov r5, r2 -10031e66: f7ff ff95 bl 10031d94 -10031e6a: 2c01 cmp r4, #1 -10031e6c: d80f bhi.n 10031e8e -10031e6e: 2d03 cmp r5, #3 -10031e70: d80d bhi.n 10031e8e -10031e72: 2e03 cmp r6, #3 -10031e74: d80b bhi.n 10031e8e -10031e76: 2813 cmp r0, #19 -10031e78: d809 bhi.n 10031e8e -10031e7a: 442c add r4, r5 -10031e7c: 4426 add r6, r4 -10031e7e: 2414 movs r4, #20 -10031e80: fb04 7706 mla r7, r4, r6, r7 -10031e84: f99d 301c ldrsb.w r3, [sp, #28] -10031e88: 4438 add r0, r7 -10031e8a: f880 3046 strb.w r3, [r0, #70] ; 0x46 -10031e8e: bdf8 pop {r3, r4, r5, r6, r7, pc} - -10031e90 : -10031e90: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -10031e94: 4a3d ldr r2, [pc, #244] ; (10031f8c ) -10031e96: 4604 mov r4, r0 -10031e98: 6810 ldr r0, [r2, #0] -10031e9a: b089 sub sp, #36 ; 0x24 -10031e9c: 4611 mov r1, r2 -10031e9e: 9003 str r0, [sp, #12] -10031ea0: f851 0f04 ldr.w r0, [r1, #4]! -10031ea4: ab04 add r3, sp, #16 -10031ea6: 6849 ldr r1, [r1, #4] -10031ea8: 2500 movs r5, #0 -10031eaa: c303 stmia r3!, {r0, r1} -10031eac: f852 0f0c ldr.w r0, [r2, #12]! -10031eb0: ab06 add r3, sp, #24 -10031eb2: 6851 ldr r1, [r2, #4] -10031eb4: f10d 0910 add.w r9, sp, #16 -10031eb8: c303 stmia r3!, {r0, r1} -10031eba: 2100 movs r1, #0 -10031ebc: 2316 movs r3, #22 -10031ebe: 9300 str r3, [sp, #0] -10031ec0: 4620 mov r0, r4 -10031ec2: 460a mov r2, r1 -10031ec4: 460b mov r3, r1 -10031ec6: f7ff ff6f bl 10031da8 -10031eca: af06 add r7, sp, #24 -10031ecc: fa5f f880 uxtb.w r8, r0 -10031ed0: ab03 add r3, sp, #12 -10031ed2: 5cee ldrb r6, [r5, r3] -10031ed4: 2100 movs r1, #0 -10031ed6: 460a mov r2, r1 -10031ed8: 460b mov r3, r1 -10031eda: 9600 str r6, [sp, #0] -10031edc: 4620 mov r0, r4 -10031ede: f7ff ff63 bl 10031da8 -10031ee2: ebc8 0000 rsb r0, r8, r0 -10031ee6: 2100 movs r1, #0 -10031ee8: b240 sxtb r0, r0 -10031eea: 9001 str r0, [sp, #4] -10031eec: 9600 str r6, [sp, #0] -10031eee: 4620 mov r0, r4 -10031ef0: 460a mov r2, r1 -10031ef2: 460b mov r3, r1 -10031ef4: 3501 adds r5, #1 -10031ef6: f7ff ffad bl 10031e54 -10031efa: 2d04 cmp r5, #4 -10031efc: d1e8 bne.n 10031ed0 -10031efe: 2100 movs r1, #0 -10031f00: 236c movs r3, #108 ; 0x6c -10031f02: 9300 str r3, [sp, #0] -10031f04: 4620 mov r0, r4 -10031f06: 460a mov r2, r1 -10031f08: 460b mov r3, r1 -10031f0a: f7ff ff4d bl 10031da8 -10031f0e: 2500 movs r5, #0 -10031f10: fa5f f880 uxtb.w r8, r0 -10031f14: f819 6005 ldrb.w r6, [r9, r5] -10031f18: 2100 movs r1, #0 -10031f1a: 460a mov r2, r1 -10031f1c: 460b mov r3, r1 -10031f1e: 9600 str r6, [sp, #0] -10031f20: 4620 mov r0, r4 -10031f22: f7ff ff41 bl 10031da8 -10031f26: ebc8 0000 rsb r0, r8, r0 -10031f2a: 2100 movs r1, #0 -10031f2c: b240 sxtb r0, r0 -10031f2e: 9001 str r0, [sp, #4] -10031f30: 9600 str r6, [sp, #0] -10031f32: 4620 mov r0, r4 -10031f34: 460a mov r2, r1 -10031f36: 460b mov r3, r1 -10031f38: 3501 adds r5, #1 -10031f3a: f7ff ff8b bl 10031e54 -10031f3e: 2d08 cmp r5, #8 -10031f40: d1e8 bne.n 10031f14 -10031f42: 2100 movs r1, #0 -10031f44: 2387 movs r3, #135 ; 0x87 -10031f46: 9300 str r3, [sp, #0] -10031f48: 4620 mov r0, r4 -10031f4a: 460a mov r2, r1 -10031f4c: 460b mov r3, r1 -10031f4e: f7ff ff2b bl 10031da8 -10031f52: 2500 movs r5, #0 -10031f54: fa5f f880 uxtb.w r8, r0 -10031f58: 5d7e ldrb r6, [r7, r5] -10031f5a: 2100 movs r1, #0 -10031f5c: 460a mov r2, r1 -10031f5e: 460b mov r3, r1 -10031f60: 9600 str r6, [sp, #0] -10031f62: 4620 mov r0, r4 -10031f64: f7ff ff20 bl 10031da8 -10031f68: ebc8 0000 rsb r0, r8, r0 -10031f6c: 2100 movs r1, #0 -10031f6e: b240 sxtb r0, r0 -10031f70: 9001 str r0, [sp, #4] -10031f72: 9600 str r6, [sp, #0] -10031f74: 4620 mov r0, r4 -10031f76: 460a mov r2, r1 -10031f78: 460b mov r3, r1 -10031f7a: 3501 adds r5, #1 -10031f7c: f7ff ff6a bl 10031e54 -10031f80: 2d08 cmp r5, #8 -10031f82: d1e9 bne.n 10031f58 -10031f84: b009 add sp, #36 ; 0x24 -10031f86: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -10031f8a: bf00 nop -10031f8c: 10041bea .word 0x10041bea - -10031f90 : -10031f90: b510 push {r4, lr} -10031f92: 4604 mov r4, r0 -10031f94: f7ff ff38 bl 10031e08 -10031f98: 4620 mov r0, r4 -10031f9a: e8bd 4010 ldmia.w sp!, {r4, lr} -10031f9e: f7ff bf77 b.w 10031e90 - -10031fa2 : -10031fa2: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} -10031fa6: 9f0a ldr r7, [sp, #40] ; 0x28 -10031fa8: f89d 902c ldrb.w r9, [sp, #44] ; 0x2c -10031fac: 4605 mov r5, r0 -10031fae: 460e mov r6, r1 -10031fb0: 4692 mov sl, r2 -10031fb2: 4698 mov r8, r3 -10031fb4: 2400 movs r4, #0 -10031fb6: 454c cmp r4, r9 -10031fb8: da0f bge.n 10031fda -10031fba: 5d3a ldrb r2, [r7, r4] -10031fbc: 4631 mov r1, r6 -10031fbe: 4653 mov r3, sl -10031fc0: f8cd 8000 str.w r8, [sp] -10031fc4: 4628 mov r0, r5 -10031fc6: f7fc ffeb bl 1002efa0 -10031fca: 5d3b ldrb r3, [r7, r4] -10031fcc: 4601 mov r1, r0 -10031fce: 4632 mov r2, r6 -10031fd0: 4628 mov r0, r5 -10031fd2: f7fc ff41 bl 1002ee58 -10031fd6: 3401 adds r4, #1 -10031fd8: e7ed b.n 10031fb6 -10031fda: b002 add sp, #8 -10031fdc: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - -10031fe0 : -10031fe0: b5f0 push {r4, r5, r6, r7, lr} -10031fe2: 4617 mov r7, r2 -10031fe4: f241 62c8 movw r2, #5832 ; 0x16c8 -10031fe8: b085 sub sp, #20 -10031fea: 4604 mov r4, r0 -10031fec: 468c mov ip, r1 -10031fee: 5885 ldr r5, [r0, r2] -10031ff0: b953 cbnz r3, 10032008 -10031ff2: 4b11 ldr r3, [pc, #68] ; (10032038 ) -10031ff4: 6818 ldr r0, [r3, #0] -10031ff6: 9002 str r0, [sp, #8] -10031ff8: 6b2b ldr r3, [r5, #48] ; 0x30 -10031ffa: b9db cbnz r3, 10032034 -10031ffc: ab02 add r3, sp, #8 -10031ffe: 9300 str r3, [sp, #0] -10032000: 2304 movs r3, #4 -10032002: 9301 str r3, [sp, #4] -10032004: 4620 mov r0, r4 -10032006: e011 b.n 1003202c -10032008: 2b01 cmp r3, #1 -1003200a: d102 bne.n 10032012 -1003200c: ae02 add r6, sp, #8 -1003200e: 4b0b ldr r3, [pc, #44] ; (1003203c ) -10032010: e003 b.n 1003201a -10032012: 2b02 cmp r3, #2 -10032014: d10e bne.n 10032034 -10032016: 4b0a ldr r3, [pc, #40] ; (10032040 ) -10032018: ae02 add r6, sp, #8 -1003201a: 6818 ldr r0, [r3, #0] -1003201c: 6859 ldr r1, [r3, #4] -1003201e: ab02 add r3, sp, #8 -10032020: c603 stmia r6!, {r0, r1} -10032022: 9300 str r3, [sp, #0] -10032024: 2308 movs r3, #8 -10032026: 9301 str r3, [sp, #4] -10032028: 4620 mov r0, r4 -1003202a: 4661 mov r1, ip -1003202c: 6aea ldr r2, [r5, #44] ; 0x2c -1003202e: 463b mov r3, r7 -10032030: f7ff ffb7 bl 10031fa2 -10032034: b005 add sp, #20 -10032036: bdf0 pop {r4, r5, r6, r7, pc} -10032038: 10041bea .word 0x10041bea -1003203c: 10041bee .word 0x10041bee -10032040: 10041bf6 .word 0x10041bf6 - -10032044 : -10032044: f241 63c8 movw r3, #5832 ; 0x16c8 -10032048: 58c3 ldr r3, [r0, r3] -1003204a: b570 push {r4, r5, r6, lr} -1003204c: 6b1b ldr r3, [r3, #48] ; 0x30 -1003204e: 4606 mov r6, r0 -10032050: 460c mov r4, r1 -10032052: 4615 mov r5, r2 -10032054: b91b cbnz r3, 1003205e -10032056: 4611 mov r1, r2 -10032058: 4622 mov r2, r4 -1003205a: f7ff ffc1 bl 10031fe0 -1003205e: 4630 mov r0, r6 -10032060: 4629 mov r1, r5 -10032062: 4622 mov r2, r4 -10032064: 2301 movs r3, #1 -10032066: f7ff ffbb bl 10031fe0 -1003206a: 4630 mov r0, r6 -1003206c: 4629 mov r1, r5 -1003206e: 4622 mov r2, r4 -10032070: 2302 movs r3, #2 -10032072: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10032076: f7ff bfb3 b.w 10031fe0 - -1003207a : -1003207a: 2903 cmp r1, #3 -1003207c: d006 beq.n 1003208c -1003207e: f990 3000 ldrsb.w r3, [r0] -10032082: 2b3f cmp r3, #63 ; 0x3f -10032084: bfa8 it ge -10032086: 233f movge r3, #63 ; 0x3f -10032088: b2db uxtb r3, r3 -1003208a: e000 b.n 1003208e -1003208c: 233f movs r3, #63 ; 0x3f -1003208e: f990 2001 ldrsb.w r2, [r0, #1] -10032092: b25b sxtb r3, r3 -10032094: f990 0002 ldrsb.w r0, [r0, #2] -10032098: 4293 cmp r3, r2 -1003209a: bfa8 it ge -1003209c: 4613 movge r3, r2 -1003209e: 4283 cmp r3, r0 -100320a0: bfb8 it lt -100320a2: 4618 movlt r0, r3 -100320a4: 4770 bx lr - -100320a6 : -100320a6: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -100320aa: f241 61c8 movw r1, #5832 ; 0x16c8 -100320ae: 5845 ldr r5, [r0, r1] -100320b0: f241 31f4 movw r1, #5108 ; 0x13f4 -100320b4: 5c41 ldrb r1, [r0, r1] -100320b6: b085 sub sp, #20 -100320b8: 2902 cmp r1, #2 -100320ba: f89d 7030 ldrb.w r7, [sp, #48] ; 0x30 -100320be: f89d 4034 ldrb.w r4, [sp, #52] ; 0x34 -100320c2: d104 bne.n 100320ce -100320c4: f895 1043 ldrb.w r1, [r5, #67] ; 0x43 -100320c8: 2901 cmp r1, #1 -100320ca: d17b bne.n 100321c4 -100320cc: e001 b.n 100320d2 -100320ce: 2900 cmp r1, #0 -100320d0: d078 beq.n 100321c4 -100320d2: f895 6045 ldrb.w r6, [r5, #69] ; 0x45 -100320d6: b123 cbz r3, 100320e2 -100320d8: 2b01 cmp r3, #1 -100320da: f64f 73ff movw r3, #65535 ; 0xffff -100320de: bf08 it eq -100320e0: 2301 moveq r3, #1 -100320e2: 2c18 cmp r4, #24 -100320e4: d023 beq.n 1003212e -100320e6: d80d bhi.n 10032104 -100320e8: 2c0b cmp r4, #11 -100320ea: d023 beq.n 10032134 -100320ec: d804 bhi.n 100320f8 -100320ee: 2c02 cmp r4, #2 -100320f0: d020 beq.n 10032134 -100320f2: 2c04 cmp r4, #4 -100320f4: d01e beq.n 10032134 -100320f6: e017 b.n 10032128 -100320f8: 2c12 cmp r4, #18 -100320fa: d018 beq.n 1003212e -100320fc: 2c16 cmp r4, #22 -100320fe: d019 beq.n 10032134 -10032100: 2c0c cmp r4, #12 -10032102: e007 b.n 10032114 -10032104: 2c60 cmp r4, #96 ; 0x60 -10032106: d012 beq.n 1003212e -10032108: d806 bhi.n 10032118 -1003210a: 2c30 cmp r4, #48 ; 0x30 -1003210c: d00f beq.n 1003212e -1003210e: 2c48 cmp r4, #72 ; 0x48 -10032110: d00d beq.n 1003212e -10032112: 2c24 cmp r4, #36 ; 0x24 -10032114: d108 bne.n 10032128 -10032116: e00a b.n 1003212e -10032118: 2c6c cmp r4, #108 ; 0x6c -1003211a: d008 beq.n 1003212e -1003211c: d304 bcc.n 10032128 -1003211e: 3c80 subs r4, #128 ; 0x80 -10032120: 2c07 cmp r4, #7 -10032122: bf98 it ls -10032124: 2002 movls r0, #2 -10032126: d907 bls.n 10032138 -10032128: f64f 70ff movw r0, #65535 ; 0xffff -1003212c: e004 b.n 10032138 -1003212e: 2001 movs r0, #1 -10032130: 2300 movs r3, #0 -10032132: e001 b.n 10032138 -10032134: 2000 movs r0, #0 -10032136: 4603 mov r3, r0 -10032138: b92a cbnz r2, 10032146 -1003213a: f89d 4038 ldrb.w r4, [sp, #56] ; 0x38 -1003213e: 3c01 subs r4, #1 -10032140: b264 sxtb r4, r4 -10032142: b2a4 uxth r4, r4 -10032144: e001 b.n 1003214a -10032146: f64f 74ff movw r4, #65535 ; 0xffff -1003214a: fa0f f983 sxth.w r9, r3 -1003214e: f1b9 3fff cmp.w r9, #4294967295 -10032152: d037 beq.n 100321c4 -10032154: fa0f f880 sxth.w r8, r0 -10032158: f1b8 3fff cmp.w r8, #4294967295 -1003215c: d032 beq.n 100321c4 -1003215e: b224 sxth r4, r4 -10032160: 1c63 adds r3, r4, #1 -10032162: d02f beq.n 100321c4 -10032164: bb72 cbnz r2, 100321c4 -10032166: 4611 mov r1, r2 -10032168: a801 add r0, sp, #4 -1003216a: 220a movs r2, #10 -1003216c: f00b fd4a bl 1003dc04 -10032170: 232a movs r3, #42 ; 0x2a -10032172: 200e movs r0, #14 -10032174: fb03 f909 mul.w r9, r3, r9 -10032178: fb00 f808 mul.w r8, r0, r8 -1003217c: eb09 0208 add.w r2, r9, r8 -10032180: 442a add r2, r5 -10032182: 4422 add r2, r4 -10032184: 443a add r2, r7 -10032186: f892 3078 ldrb.w r3, [r2, #120] ; 0x78 -1003218a: f88d 3004 strb.w r3, [sp, #4] -1003218e: f892 30cc ldrb.w r3, [r2, #204] ; 0xcc -10032192: f88d 3005 strb.w r3, [sp, #5] -10032196: f892 3120 ldrb.w r3, [r2, #288] ; 0x120 -1003219a: f88d 3006 strb.w r3, [sp, #6] -1003219e: 1ef3 subs r3, r6, #3 -100321a0: 2b01 cmp r3, #1 -100321a2: d805 bhi.n 100321b0 -100321a4: a801 add r0, sp, #4 -100321a6: 4631 mov r1, r6 -100321a8: 4622 mov r2, r4 -100321aa: f7ff ff66 bl 1003207a -100321ae: e00a b.n 100321c6 -100321b0: 2354 movs r3, #84 ; 0x54 -100321b2: fb03 9906 mla r9, r3, r6, r9 -100321b6: 44c8 add r8, r9 -100321b8: 4445 add r5, r8 -100321ba: 442c add r4, r5 -100321bc: 4427 add r7, r4 -100321be: f897 0078 ldrb.w r0, [r7, #120] ; 0x78 -100321c2: e000 b.n 100321c6 -100321c4: 203f movs r0, #63 ; 0x3f -100321c6: b240 sxtb r0, r0 -100321c8: b005 add sp, #20 -100321ca: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - ... - -100321d0 : -100321d0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100321d4: f241 63c8 movw r3, #5832 ; 0x16c8 -100321d8: b08d sub sp, #52 ; 0x34 -100321da: 58c4 ldr r4, [r0, r3] -100321dc: 9009 str r0, [sp, #36] ; 0x24 -100321de: 2700 movs r7, #0 -100321e0: f04f 0c2a mov.w ip, #42 ; 0x2a -100321e4: fb0c 4507 mla r5, ip, r7, r4 -100321e8: 2600 movs r6, #0 -100321ea: f105 0bcc add.w fp, r5, #204 ; 0xcc -100321ee: f04f 0800 mov.w r8, #0 -100321f2: f04f 0900 mov.w r9, #0 -100321f6: eb08 0305 add.w r3, r8, r5 -100321fa: 2254 movs r2, #84 ; 0x54 -100321fc: fb02 3209 mla r2, r2, r9, r3 -10032200: 9208 str r2, [sp, #32] -10032202: f892 1078 ldrb.w r1, [r2, #120] ; 0x78 -10032206: f8d4 2208 ldr.w r2, [r4, #520] ; 0x208 -1003220a: 2a01 cmp r2, #1 -1003220c: d112 bne.n 10032234 -1003220e: f8dd c024 ldr.w ip, [sp, #36] ; 0x24 -10032212: b2f0 uxtb r0, r6 -10032214: f50c 52b6 add.w r2, ip, #5824 ; 0x16c0 -10032218: 3208 adds r2, #8 -1003221a: 6812 ldr r2, [r2, #0] -1003221c: 2802 cmp r0, #2 -1003221e: bf08 it eq -10032220: f892 a176 ldrbeq.w sl, [r2, #374] ; 0x176 -10032224: d010 beq.n 10032248 -10032226: 2801 cmp r0, #1 -10032228: bf0c ite eq -1003222a: f892 a175 ldrbeq.w sl, [r2, #373] ; 0x175 -1003222e: f892 a174 ldrbne.w sl, [r2, #372] ; 0x174 -10032232: e009 b.n 10032248 -10032234: f8dd c024 ldr.w ip, [sp, #36] ; 0x24 -10032238: f50c 529f add.w r2, ip, #5088 ; 0x13e0 -1003223c: f892 a017 ldrb.w sl, [r2, #23] -10032240: ea4f 0a4a mov.w sl, sl, lsl #1 -10032244: fa5f fa8a uxtb.w sl, sl -10032248: b248 sxtb r0, r1 -1003224a: 283f cmp r0, #63 ; 0x3f -1003224c: 9005 str r0, [sp, #20] -1003224e: d004 beq.n 1003225a -10032250: 9a08 ldr r2, [sp, #32] -10032252: ebca 0101 rsb r1, sl, r1 -10032256: f882 1078 strb.w r1, [r2, #120] ; 0x78 -1003225a: f8df c0c0 ldr.w ip, [pc, #192] ; 1003231c -1003225e: f04f 4280 mov.w r2, #1073741824 ; 0x40000000 -10032262: 2300 movs r3, #0 -10032264: e9dc 0102 ldrd r0, r1, [ip, #8] -10032268: 4002 ands r2, r0 -1003226a: 400b ands r3, r1 -1003226c: 4313 orrs r3, r2 -1003226e: d039 beq.n 100322e4 -10032270: 9905 ldr r1, [sp, #20] -10032272: f108 0001 add.w r0, r8, #1 -10032276: 9a08 ldr r2, [sp, #32] -10032278: 9000 str r0, [sp, #0] -1003227a: 9101 str r1, [sp, #4] -1003227c: f8cd a008 str.w sl, [sp, #8] -10032280: f992 3078 ldrsb.w r3, [r2, #120] ; 0x78 -10032284: 9006 str r0, [sp, #24] -10032286: 9303 str r3, [sp, #12] -10032288: 4823 ldr r0, [pc, #140] ; (10032318 ) -1003228a: 4633 mov r3, r6 -1003228c: 4649 mov r1, r9 -1003228e: 463a mov r2, r7 -10032290: f7e8 fc66 bl 1001ab60 -10032294: fa5f f389 uxtb.w r3, r9 -10032298: 2b02 cmp r3, #2 -1003229a: d123 bne.n 100322e4 -1003229c: 2300 movs r3, #0 -1003229e: f8ad 302c strh.w r3, [sp, #44] ; 0x2c -100322a2: f88d 302e strb.w r3, [sp, #46] ; 0x2e -100322a6: f81b 3c54 ldrb.w r3, [fp, #-84] -100322aa: 2104 movs r1, #4 -100322ac: f88d 302c strb.w r3, [sp, #44] ; 0x2c -100322b0: f89b 3000 ldrb.w r3, [fp] -100322b4: fa0f f288 sxth.w r2, r8 -100322b8: f88d 302d strb.w r3, [sp, #45] ; 0x2d -100322bc: f89b 3054 ldrb.w r3, [fp, #84] ; 0x54 -100322c0: a80b add r0, sp, #44 ; 0x2c -100322c2: f88d 302e strb.w r3, [sp, #46] ; 0x2e -100322c6: f7ff fed8 bl 1003207a -100322ca: 9b06 ldr r3, [sp, #24] -100322cc: 9003 str r0, [sp, #12] -100322ce: 9300 str r3, [sp, #0] -100322d0: 233f movs r3, #63 ; 0x3f -100322d2: 9301 str r3, [sp, #4] -100322d4: f8cd a008 str.w sl, [sp, #8] -100322d8: 480f ldr r0, [pc, #60] ; (10032318 ) -100322da: 2103 movs r1, #3 -100322dc: 463a mov r2, r7 -100322de: 4633 mov r3, r6 -100322e0: f7e8 fc3e bl 1001ab60 -100322e4: f109 0901 add.w r9, r9, #1 -100322e8: f1b9 0f03 cmp.w r9, #3 -100322ec: d183 bne.n 100321f6 -100322ee: f108 0801 add.w r8, r8, #1 -100322f2: f1b8 0f0e cmp.w r8, #14 -100322f6: f10b 0b01 add.w fp, fp, #1 -100322fa: f47f af7a bne.w 100321f2 -100322fe: 3601 adds r6, #1 -10032300: 2e03 cmp r6, #3 -10032302: f105 050e add.w r5, r5, #14 -10032306: f47f af70 bne.w 100321ea -1003230a: 3701 adds r7, #1 -1003230c: 2f02 cmp r7, #2 -1003230e: f47f af67 bne.w 100321e0 -10032312: b00d add sp, #52 ; 0x34 -10032314: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10032318: 10041c10 .word 0x10041c10 -1003231c: 10000720 .word 0x10000720 - -10032320 : -10032320: b530 push {r4, r5, lr} -10032322: f241 63c8 movw r3, #5832 ; 0x16c8 -10032326: 58c3 ldr r3, [r0, r3] -10032328: f103 00fc add.w r0, r3, #252 ; 0xfc -1003232c: 2200 movs r2, #0 -1003232e: 2100 movs r1, #0 -10032330: 18d4 adds r4, r2, r3 -10032332: 440c add r4, r1 -10032334: 3101 adds r1, #1 -10032336: 253f movs r5, #63 ; 0x3f -10032338: 290e cmp r1, #14 -1003233a: f884 5078 strb.w r5, [r4, #120] ; 0x78 -1003233e: d1f7 bne.n 10032330 -10032340: 320e adds r2, #14 -10032342: 2a2a cmp r2, #42 ; 0x2a -10032344: d1f3 bne.n 1003232e -10032346: 2200 movs r2, #0 -10032348: 2100 movs r1, #0 -1003234a: 18d4 adds r4, r2, r3 -1003234c: 440c add r4, r1 -1003234e: 3101 adds r1, #1 -10032350: 253f movs r5, #63 ; 0x3f -10032352: 290e cmp r1, #14 -10032354: f884 50a2 strb.w r5, [r4, #162] ; 0xa2 -10032358: d1f7 bne.n 1003234a -1003235a: 320e adds r2, #14 -1003235c: 2a2a cmp r2, #42 ; 0x2a -1003235e: d1f3 bne.n 10032348 -10032360: 3354 adds r3, #84 ; 0x54 -10032362: 4283 cmp r3, r0 -10032364: d1e2 bne.n 1003232c -10032366: bd30 pop {r4, r5, pc} - -10032368 : -10032368: b570 push {r4, r5, r6, lr} -1003236a: 2902 cmp r1, #2 -1003236c: f241 66c8 movw r6, #5832 ; 0x16c8 -10032370: f89d 5010 ldrb.w r5, [sp, #16] -10032374: f89d 4014 ldrb.w r4, [sp, #20] -10032378: 5986 ldr r6, [r0, r6] -1003237a: d002 beq.n 10032382 -1003237c: 1ec8 subs r0, r1, #3 -1003237e: 4241 negs r1, r0 -10032380: 4141 adcs r1, r0 -10032382: 2d01 cmp r5, #1 -10032384: d103 bne.n 1003238e -10032386: 2c01 cmp r4, #1 -10032388: d12b bne.n 100323e2 -1003238a: 2400 movs r4, #0 -1003238c: e009 b.n 100323a2 -1003238e: 2d02 cmp r5, #2 -10032390: d102 bne.n 10032398 -10032392: 2c01 cmp r4, #1 -10032394: d125 bne.n 100323e2 -10032396: e004 b.n 100323a2 -10032398: 2d03 cmp r5, #3 -1003239a: d122 bne.n 100323e2 -1003239c: 2c01 cmp r4, #1 -1003239e: d120 bne.n 100323e2 -100323a0: 2402 movs r4, #2 -100323a2: 2a01 cmp r2, #1 -100323a4: d11d bne.n 100323e2 -100323a6: f89d 0018 ldrb.w r0, [sp, #24] -100323aa: 3801 subs r0, #1 -100323ac: b240 sxtb r0, r0 -100323ae: 1c42 adds r2, r0, #1 -100323b0: d017 beq.n 100323e2 -100323b2: f89d 201c ldrb.w r2, [sp, #28] -100323b6: 2a3f cmp r2, #63 ; 0x3f -100323b8: bf28 it cs -100323ba: 223f movcs r2, #63 ; 0x3f -100323bc: 1e9d subs r5, r3, #2 -100323be: 426b negs r3, r5 -100323c0: 416b adcs r3, r5 -100323c2: 2554 movs r5, #84 ; 0x54 -100323c4: 4369 muls r1, r5 -100323c6: 252a movs r5, #42 ; 0x2a -100323c8: fb05 1103 mla r1, r5, r3, r1 -100323cc: 230e movs r3, #14 -100323ce: fb03 1404 mla r4, r3, r4, r1 -100323d2: 4434 add r4, r6 -100323d4: 4404 add r4, r0 -100323d6: f994 3078 ldrsb.w r3, [r4, #120] ; 0x78 -100323da: 429a cmp r2, r3 -100323dc: bfb8 it lt -100323de: f884 2078 strblt.w r2, [r4, #120] ; 0x78 -100323e2: bd70 pop {r4, r5, r6, pc} - -100323e4 : -100323e4: b510 push {r4, lr} -100323e6: f89d 4008 ldrb.w r4, [sp, #8] -100323ea: 9402 str r4, [sp, #8] -100323ec: e8bd 4010 ldmia.w sp!, {r4, lr} -100323f0: f7fc bdd6 b.w 1002efa0 - -100323f4 : -100323f4: f641 0269 movw r2, #6249 ; 0x1869 -100323f8: 5c82 ldrb r2, [r0, r2] -100323fa: b508 push {r3, lr} -100323fc: b922 cbnz r2, 10032408 -100323fe: f241 7218 movw r2, #5912 ; 0x1718 -10032402: 5883 ldr r3, [r0, r2] -10032404: b103 cbz r3, 10032408 -10032406: 4798 blx r3 -10032408: bd08 pop {r3, pc} - -1003240a : -1003240a: f641 0269 movw r2, #6249 ; 0x1869 -1003240e: 5c82 ldrb r2, [r0, r2] -10032410: b508 push {r3, lr} -10032412: b922 cbnz r2, 1003241e -10032414: f241 721c movw r2, #5916 ; 0x171c -10032418: 5883 ldr r3, [r0, r2] -1003241a: b103 cbz r3, 1003241e -1003241c: 4798 blx r3 -1003241e: bd08 pop {r3, pc} - -10032420 : -10032420: f641 0269 movw r2, #6249 ; 0x1869 -10032424: 5c82 ldrb r2, [r0, r2] -10032426: b508 push {r3, lr} -10032428: b922 cbnz r2, 10032434 -1003242a: f241 7210 movw r2, #5904 ; 0x1710 -1003242e: 5883 ldr r3, [r0, r2] -10032430: b103 cbz r3, 10032434 -10032432: 4798 blx r3 -10032434: bd08 pop {r3, pc} - -10032436 : -10032436: f641 0269 movw r2, #6249 ; 0x1869 -1003243a: 5c82 ldrb r2, [r0, r2] -1003243c: b508 push {r3, lr} -1003243e: b922 cbnz r2, 1003244a -10032440: f241 7214 movw r2, #5908 ; 0x1714 -10032444: 5883 ldr r3, [r0, r2] -10032446: b103 cbz r3, 1003244a -10032448: 4798 blx r3 -1003244a: bd08 pop {r3, pc} - -1003244c : -1003244c: f641 0269 movw r2, #6249 ; 0x1869 -10032450: 5c82 ldrb r2, [r0, r2] -10032452: b508 push {r3, lr} -10032454: b922 cbnz r2, 10032460 -10032456: f241 62dc movw r2, #5852 ; 0x16dc -1003245a: 5883 ldr r3, [r0, r2] -1003245c: b103 cbz r3, 10032460 -1003245e: 4798 blx r3 -10032460: bd08 pop {r3, pc} - -10032462 : -10032462: f641 0269 movw r2, #6249 ; 0x1869 -10032466: 5c82 ldrb r2, [r0, r2] -10032468: b508 push {r3, lr} -1003246a: b922 cbnz r2, 10032476 -1003246c: f241 7208 movw r2, #5896 ; 0x1708 -10032470: 5883 ldr r3, [r0, r2] -10032472: b103 cbz r3, 10032476 -10032474: 4798 blx r3 -10032476: bd08 pop {r3, pc} - -10032478 : -10032478: f641 0269 movw r2, #6249 ; 0x1869 -1003247c: 5c82 ldrb r2, [r0, r2] -1003247e: b508 push {r3, lr} -10032480: b922 cbnz r2, 1003248c -10032482: f241 720c movw r2, #5900 ; 0x170c -10032486: 5883 ldr r3, [r0, r2] -10032488: b103 cbz r3, 1003248c -1003248a: 4798 blx r3 -1003248c: bd08 pop {r3, pc} - -1003248e : -1003248e: b5f8 push {r3, r4, r5, r6, r7, lr} -10032490: f241 76c5 movw r6, #6085 ; 0x17c5 -10032494: 2700 movs r7, #0 -10032496: f241 63d4 movw r3, #5844 ; 0x16d4 -1003249a: 5587 strb r7, [r0, r6] -1003249c: 58c3 ldr r3, [r0, r3] -1003249e: 4604 mov r4, r0 -100324a0: 4798 blx r3 -100324a2: 2801 cmp r0, #1 -100324a4: 4605 mov r5, r0 -100324a6: bf18 it ne -100324a8: 55a7 strbne r7, [r4, r6] -100324aa: d103 bne.n 100324b4 -100324ac: 55a0 strb r0, [r4, r6] -100324ae: 4620 mov r0, r4 -100324b0: f7ff fab4 bl 10031a1c -100324b4: 4628 mov r0, r5 -100324b6: bdf8 pop {r3, r4, r5, r6, r7, pc} - -100324b8 : -100324b8: f241 63d8 movw r3, #5848 ; 0x16d8 -100324bc: b510 push {r4, lr} -100324be: 58c3 ldr r3, [r0, r3] -100324c0: 4604 mov r4, r0 -100324c2: 4798 blx r3 -100324c4: 2801 cmp r0, #1 -100324c6: d103 bne.n 100324d0 -100324c8: 2200 movs r2, #0 -100324ca: f241 73c5 movw r3, #6085 ; 0x17c5 -100324ce: 54e2 strb r2, [r4, r3] -100324d0: bd10 pop {r4, pc} - -100324d2 : -100324d2: b508 push {r3, lr} -100324d4: f500 53ba add.w r3, r0, #5952 ; 0x1740 -100324d8: 681b ldr r3, [r3, #0] -100324da: b103 cbz r3, 100324de -100324dc: 4798 blx r3 -100324de: bd08 pop {r3, pc} - -100324e0 : -100324e0: b508 push {r3, lr} -100324e2: f241 7344 movw r3, #5956 ; 0x1744 -100324e6: 58c3 ldr r3, [r0, r3] -100324e8: b103 cbz r3, 100324ec -100324ea: 4798 blx r3 -100324ec: bd08 pop {r3, pc} - -100324ee : -100324ee: b508 push {r3, lr} -100324f0: f241 734c movw r3, #5964 ; 0x174c -100324f4: 58c3 ldr r3, [r0, r3] -100324f6: b10b cbz r3, 100324fc -100324f8: 4798 blx r3 -100324fa: bd08 pop {r3, pc} -100324fc: 4618 mov r0, r3 -100324fe: bd08 pop {r3, pc} - -10032500 : -10032500: b508 push {r3, lr} -10032502: f241 7348 movw r3, #5960 ; 0x1748 -10032506: 58c3 ldr r3, [r0, r3] -10032508: b10b cbz r3, 1003250e -1003250a: 4798 blx r3 -1003250c: bd08 pop {r3, pc} -1003250e: 4618 mov r0, r3 -10032510: bd08 pop {r3, pc} - -10032512 : -10032512: b510 push {r4, lr} -10032514: f241 7454 movw r4, #5972 ; 0x1754 -10032518: 5904 ldr r4, [r0, r4] -1003251a: b104 cbz r4, 1003251e -1003251c: 47a0 blx r4 -1003251e: bd10 pop {r4, pc} - -10032520 : -10032520: b510 push {r4, lr} -10032522: f241 7450 movw r4, #5968 ; 0x1750 -10032526: 5904 ldr r4, [r0, r4] -10032528: b104 cbz r4, 1003252c -1003252a: 47a0 blx r4 -1003252c: bd10 pop {r4, pc} - -1003252e : -1003252e: b508 push {r3, lr} -10032530: f641 0369 movw r3, #6249 ; 0x1869 -10032534: 5cc3 ldrb r3, [r0, r3] -10032536: b12b cbz r3, 10032544 -10032538: f641 035c movw r3, #6236 ; 0x185c -1003253c: 58c3 ldr r3, [r0, r3] -1003253e: 2b00 cmp r3, #0 -10032540: bf18 it ne -10032542: 4618 movne r0, r3 -10032544: f500 53b9 add.w r3, r0, #5920 ; 0x1720 -10032548: 681b ldr r3, [r3, #0] -1003254a: b103 cbz r3, 1003254e -1003254c: 4798 blx r3 -1003254e: bd08 pop {r3, pc} - -10032550 : -10032550: b508 push {r3, lr} -10032552: f641 0369 movw r3, #6249 ; 0x1869 -10032556: 5cc3 ldrb r3, [r0, r3] -10032558: b12b cbz r3, 10032566 -1003255a: f641 035c movw r3, #6236 ; 0x185c -1003255e: 58c3 ldr r3, [r0, r3] -10032560: 2b00 cmp r3, #0 -10032562: bf18 it ne -10032564: 4618 movne r0, r3 -10032566: f241 7324 movw r3, #5924 ; 0x1724 -1003256a: 58c3 ldr r3, [r0, r3] -1003256c: b103 cbz r3, 10032570 -1003256e: 4798 blx r3 -10032570: bd08 pop {r3, pc} - -10032572 : -10032572: b508 push {r3, lr} -10032574: f500 53b7 add.w r3, r0, #5856 ; 0x16e0 -10032578: 681b ldr r3, [r3, #0] -1003257a: b10b cbz r3, 10032580 -1003257c: 4798 blx r3 -1003257e: bd08 pop {r3, pc} -10032580: 4618 mov r0, r3 -10032582: bd08 pop {r3, pc} - -10032584 : -10032584: b508 push {r3, lr} -10032586: f241 63e4 movw r3, #5860 ; 0x16e4 -1003258a: 58c3 ldr r3, [r0, r3] -1003258c: b10b cbz r3, 10032592 -1003258e: 4798 blx r3 -10032590: bd08 pop {r3, pc} -10032592: 4618 mov r0, r3 -10032594: bd08 pop {r3, pc} - -10032596 : -10032596: b508 push {r3, lr} -10032598: f241 63e8 movw r3, #5864 ; 0x16e8 -1003259c: 58c3 ldr r3, [r0, r3] -1003259e: b103 cbz r3, 100325a2 -100325a0: 4798 blx r3 -100325a2: bd08 pop {r3, pc} - -100325a4 : -100325a4: b508 push {r3, lr} -100325a6: f241 736c movw r3, #5996 ; 0x176c -100325aa: 58c3 ldr r3, [r0, r3] -100325ac: b10b cbz r3, 100325b2 -100325ae: 4798 blx r3 -100325b0: bd08 pop {r3, pc} -100325b2: 4618 mov r0, r3 -100325b4: bd08 pop {r3, pc} - -100325b6 : -100325b6: b508 push {r3, lr} -100325b8: f241 7370 movw r3, #6000 ; 0x1770 -100325bc: 58c3 ldr r3, [r0, r3] -100325be: b10b cbz r3, 100325c4 -100325c0: 4798 blx r3 -100325c2: bd08 pop {r3, pc} -100325c4: 4618 mov r0, r3 -100325c6: bd08 pop {r3, pc} - -100325c8 : -100325c8: b508 push {r3, lr} -100325ca: f241 63ec movw r3, #5868 ; 0x16ec -100325ce: 58c3 ldr r3, [r0, r3] -100325d0: b10b cbz r3, 100325d6 -100325d2: 4798 blx r3 -100325d4: bd08 pop {r3, pc} -100325d6: 4618 mov r0, r3 -100325d8: bd08 pop {r3, pc} - -100325da : -100325da: b508 push {r3, lr} -100325dc: f241 63f0 movw r3, #5872 ; 0x16f0 -100325e0: 58c3 ldr r3, [r0, r3] -100325e2: b103 cbz r3, 100325e6 -100325e4: 4798 blx r3 -100325e6: bd08 pop {r3, pc} - -100325e8 : -100325e8: b510 push {r4, lr} -100325ea: 460a mov r2, r1 -100325ec: 4603 mov r3, r0 -100325ee: b188 cbz r0, 10032614 -100325f0: 6940 ldr r0, [r0, #20] -100325f2: 6901 ldr r1, [r0, #16] -100325f4: 06c9 lsls r1, r1, #27 -100325f6: d408 bmi.n 1003260a -100325f8: f241 7158 movw r1, #5976 ; 0x1758 -100325fc: 5844 ldr r4, [r0, r1] -100325fe: b11c cbz r4, 10032608 -10032600: f8d3 1100 ldr.w r1, [r3, #256] ; 0x100 -10032604: 47a0 blx r4 -10032606: bd10 pop {r4, pc} -10032608: bd10 pop {r4, pc} -1003260a: 4619 mov r1, r3 -1003260c: e8bd 4010 ldmia.w sp!, {r4, lr} -10032610: f7e8 bc16 b.w 1001ae40 -10032614: bd10 pop {r4, pc} - -10032616 : -10032616: b510 push {r4, lr} -10032618: f241 745c movw r4, #5980 ; 0x175c -1003261c: 5904 ldr r4, [r0, r4] -1003261e: b104 cbz r4, 10032622 -10032620: 47a0 blx r4 -10032622: bd10 pop {r4, pc} - -10032624 : -10032624: b508 push {r3, lr} -10032626: f500 53bb add.w r3, r0, #5984 ; 0x1760 -1003262a: 681b ldr r3, [r3, #0] -1003262c: b103 cbz r3, 10032630 -1003262e: 4798 blx r3 -10032630: bd08 pop {r3, pc} - -10032632 : -10032632: b508 push {r3, lr} -10032634: f241 7364 movw r3, #5988 ; 0x1764 -10032638: 58c3 ldr r3, [r0, r3] -1003263a: b103 cbz r3, 1003263e -1003263c: 4798 blx r3 -1003263e: bd08 pop {r3, pc} - -10032640 : -10032640: b508 push {r3, lr} -10032642: f241 7368 movw r3, #5992 ; 0x1768 -10032646: 58c3 ldr r3, [r0, r3] -10032648: b103 cbz r3, 1003264c -1003264a: 4798 blx r3 -1003264c: bd08 pop {r3, pc} - -1003264e : -1003264e: b510 push {r4, lr} -10032650: f500 53a0 add.w r3, r0, #5120 ; 0x1400 -10032654: f893 4035 ldrb.w r4, [r3, #53] ; 0x35 -10032658: b114 cbz r4, 10032660 -1003265a: 6f1b ldr r3, [r3, #112] ; 0x70 -1003265c: 2b02 cmp r3, #2 -1003265e: d00b beq.n 10032678 -10032660: f241 63c8 movw r3, #5832 ; 0x16c8 -10032664: 58c3 ldr r3, [r0, r3] -10032666: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 -1003266a: b92b cbnz r3, 10032678 -1003266c: f241 7374 movw r3, #6004 ; 0x1774 -10032670: 58c3 ldr r3, [r0, r3] -10032672: b11b cbz r3, 1003267c -10032674: 4798 blx r3 -10032676: bd10 pop {r4, pc} -10032678: 2000 movs r0, #0 -1003267a: bd10 pop {r4, pc} -1003267c: 4618 mov r0, r3 -1003267e: bd10 pop {r4, pc} - -10032680 : -10032680: b538 push {r3, r4, r5, lr} -10032682: f500 54a0 add.w r4, r0, #5120 ; 0x1400 -10032686: f894 5035 ldrb.w r5, [r4, #53] ; 0x35 -1003268a: b115 cbz r5, 10032692 -1003268c: 6f24 ldr r4, [r4, #112] ; 0x70 -1003268e: 2c02 cmp r4, #2 -10032690: d00a beq.n 100326a8 -10032692: f241 64c8 movw r4, #5832 ; 0x16c8 -10032696: 5904 ldr r4, [r0, r4] -10032698: f894 4e94 ldrb.w r4, [r4, #3732] ; 0xe94 -1003269c: b924 cbnz r4, 100326a8 -1003269e: f241 7478 movw r4, #6008 ; 0x1778 -100326a2: 5904 ldr r4, [r0, r4] -100326a4: b104 cbz r4, 100326a8 -100326a6: 47a0 blx r4 -100326a8: bd38 pop {r3, r4, r5, pc} - -100326aa : -100326aa: b510 push {r4, lr} -100326ac: f241 747c movw r4, #6012 ; 0x177c -100326b0: 5904 ldr r4, [r0, r4] -100326b2: b10c cbz r4, 100326b8 -100326b4: 47a0 blx r4 -100326b6: bd10 pop {r4, pc} -100326b8: 4620 mov r0, r4 -100326ba: bd10 pop {r4, pc} - -100326bc : -100326bc: b537 push {r0, r1, r2, r4, r5, lr} -100326be: f500 54bc add.w r4, r0, #6016 ; 0x1780 -100326c2: 6824 ldr r4, [r4, #0] -100326c4: b114 cbz r4, 100326cc -100326c6: 9d06 ldr r5, [sp, #24] -100326c8: 9500 str r5, [sp, #0] -100326ca: 47a0 blx r4 -100326cc: b003 add sp, #12 -100326ce: bd30 pop {r4, r5, pc} - -100326d0 : -100326d0: b508 push {r3, lr} -100326d2: f241 7328 movw r3, #5928 ; 0x1728 -100326d6: 58c3 ldr r3, [r0, r3] -100326d8: b10b cbz r3, 100326de -100326da: 4798 blx r3 -100326dc: bd08 pop {r3, pc} -100326de: 4618 mov r0, r3 -100326e0: bd08 pop {r3, pc} - -100326e2 : -100326e2: b508 push {r3, lr} -100326e4: f241 7330 movw r3, #5936 ; 0x1730 -100326e8: 58c3 ldr r3, [r0, r3] -100326ea: b103 cbz r3, 100326ee -100326ec: 4798 blx r3 -100326ee: bd08 pop {r3, pc} - -100326f0 : -100326f0: b508 push {r3, lr} -100326f2: f241 7334 movw r3, #5940 ; 0x1734 -100326f6: 58c3 ldr r3, [r0, r3] -100326f8: b103 cbz r3, 100326fc -100326fa: 4798 blx r3 -100326fc: bd08 pop {r3, pc} - -100326fe : -100326fe: b537 push {r0, r1, r2, r4, r5, lr} -10032700: f241 7438 movw r4, #5944 ; 0x1738 -10032704: 5904 ldr r4, [r0, r4] -10032706: b11c cbz r4, 10032710 -10032708: f89d 5018 ldrb.w r5, [sp, #24] -1003270c: 9500 str r5, [sp, #0] -1003270e: 47a0 blx r4 -10032710: b003 add sp, #12 -10032712: bd30 pop {r4, r5, pc} - -10032714 : -10032714: f641 0269 movw r2, #6249 ; 0x1869 -10032718: 5c82 ldrb r2, [r0, r2] -1003271a: b508 push {r3, lr} -1003271c: b922 cbnz r2, 10032728 -1003271e: f241 723c movw r2, #5948 ; 0x173c -10032722: 5883 ldr r3, [r0, r2] -10032724: b103 cbz r3, 10032728 -10032726: 4798 blx r3 -10032728: bd08 pop {r3, pc} - -1003272a : -1003272a: b507 push {r0, r1, r2, lr} -1003272c: 2904 cmp r1, #4 -1003272e: f88d 1007 strb.w r1, [sp, #7] -10032732: d806 bhi.n 10032742 -10032734: 214d movs r1, #77 ; 0x4d -10032736: f10d 0207 add.w r2, sp, #7 -1003273a: f7ff feca bl 100324d2 -1003273e: 2001 movs r0, #1 -10032740: e000 b.n 10032744 -10032742: 2000 movs r0, #0 -10032744: b003 add sp, #12 -10032746: f85d fb04 ldr.w pc, [sp], #4 - -1003274a : -1003274a: b507 push {r0, r1, r2, lr} -1003274c: 2904 cmp r1, #4 -1003274e: f88d 1007 strb.w r1, [sp, #7] -10032752: d806 bhi.n 10032762 -10032754: 214e movs r1, #78 ; 0x4e -10032756: f10d 0207 add.w r2, sp, #7 -1003275a: f7ff feba bl 100324d2 -1003275e: 2001 movs r0, #1 -10032760: e000 b.n 10032764 -10032762: 2000 movs r0, #0 -10032764: b003 add sp, #12 -10032766: f85d fb04 ldr.w pc, [sp], #4 - -1003276a : -1003276a: 231f movs r3, #31 -1003276c: 8003 strh r3, [r0, #0] -1003276e: 4770 bx lr - -10032770 : -10032770: 6903 ldr r3, [r0, #16] -10032772: b530 push {r4, r5, lr} -10032774: 681b ldr r3, [r3, #0] -10032776: f641 0548 movw r5, #6216 ; 0x1848 -1003277a: f8d3 29c0 ldr.w r2, [r3, #2496] ; 0x9c0 -1003277e: f8d3 4b98 ldr.w r4, [r3, #2968] ; 0xb98 -10032782: f503 50c2 add.w r0, r3, #6208 ; 0x1840 -10032786: 6002 str r2, [r0, #0] -10032788: f641 003c movw r0, #6204 ; 0x183c -1003278c: 501c str r4, [r3, r0] -1003278e: f8d3 49c8 ldr.w r4, [r3, #2504] ; 0x9c8 -10032792: f641 0150 movw r1, #6224 ; 0x1850 -10032796: 515c str r4, [r3, r5] -10032798: f8d3 4ba0 ldr.w r4, [r3, #2976] ; 0xba0 -1003279c: f641 0544 movw r5, #6212 ; 0x1844 -100327a0: 515c str r4, [r3, r5] -100327a2: f8d3 49b8 ldr.w r4, [r3, #2488] ; 0x9b8 -100327a6: f641 0254 movw r2, #6228 ; 0x1854 -100327aa: 505c str r4, [r3, r1] -100327ac: f8d3 1b90 ldr.w r1, [r3, #2960] ; 0xb90 -100327b0: f641 044c movw r4, #6220 ; 0x184c -100327b4: 5119 str r1, [r3, r4] -100327b6: f8d3 1ba8 ldr.w r1, [r3, #2984] ; 0xba8 -100327ba: 4418 add r0, r3 -100327bc: 5099 str r1, [r3, r2] -100327be: bd30 pop {r4, r5, pc} - -100327c0 : -100327c0: 6903 ldr r3, [r0, #16] -100327c2: 2101 movs r1, #1 -100327c4: 681a ldr r2, [r3, #0] -100327c6: f641 0358 movw r3, #6232 ; 0x1858 -100327ca: b510 push {r4, lr} -100327cc: 54d1 strb r1, [r2, r3] -100327ce: 4604 mov r4, r0 -100327d0: f7e4 fffe bl 100177d0 -100327d4: b910 cbnz r0, 100327dc -100327d6: 4620 mov r0, r4 -100327d8: f7e4 fffe bl 100177d8 -100327dc: 2000 movs r0, #0 -100327de: bd10 pop {r4, pc} - -100327e0 : -100327e0: b538 push {r3, r4, r5, lr} -100327e2: 6903 ldr r3, [r0, #16] -100327e4: 4605 mov r5, r0 -100327e6: 681c ldr r4, [r3, #0] -100327e8: f241 4355 movw r3, #5205 ; 0x1455 -100327ec: 5ce3 ldrb r3, [r4, r3] -100327ee: 2b01 cmp r3, #1 -100327f0: d107 bne.n 10032802 -100327f2: f241 4270 movw r2, #5232 ; 0x1470 -100327f6: 58a2 ldr r2, [r4, r2] -100327f8: 2a02 cmp r2, #2 -100327fa: bf04 itt eq -100327fc: f241 426c movweq r2, #5228 ; 0x146c -10032800: 50a3 streq r3, [r4, r2] -10032802: f641 0358 movw r3, #6232 ; 0x1858 -10032806: 2201 movs r2, #1 -10032808: 54e2 strb r2, [r4, r3] -1003280a: f241 4370 movw r3, #5232 ; 0x1470 -1003280e: 58e3 ldr r3, [r4, r3] -10032810: b9a3 cbnz r3, 1003283c -10032812: 4628 mov r0, r5 -10032814: f7e4 ffdc bl 100177d0 -10032818: b910 cbnz r0, 10032820 -1003281a: 4628 mov r0, r5 -1003281c: f7e4 ffdc bl 100177d8 -10032820: 4620 mov r0, r4 -10032822: f7ea f93f bl 1001caa4 -10032826: 4620 mov r0, r4 -10032828: f7eb f903 bl 1001da32 -1003282c: 4620 mov r0, r4 -1003282e: 2101 movs r1, #1 -10032830: f7eb f892 bl 1001d958 -10032834: 4620 mov r0, r4 -10032836: 2101 movs r1, #1 -10032838: f7ea fed9 bl 1001d5ee -1003283c: 2000 movs r0, #0 -1003283e: bd38 pop {r3, r4, r5, pc} - -10032840 : -10032840: b570 push {r4, r5, r6, lr} -10032842: f641 0334 movw r3, #6196 ; 0x1834 -10032846: 58c5 ldr r5, [r0, r3] -10032848: 6903 ldr r3, [r0, #16] -1003284a: 4604 mov r4, r0 -1003284c: 07da lsls r2, r3, #31 -1003284e: d439 bmi.n 100328c4 -10032850: 6923 ldr r3, [r4, #16] -10032852: 051b lsls r3, r3, #20 -10032854: d43a bmi.n 100328cc -10032856: 4620 mov r0, r4 -10032858: f7e9 fb80 bl 1001bf5c -1003285c: 6a6b ldr r3, [r5, #36] ; 0x24 -1003285e: 4628 mov r0, r5 -10032860: 4798 blx r3 -10032862: 4620 mov r0, r4 -10032864: f005 f896 bl 10037994 -10032868: 2201 movs r2, #1 -1003286a: f241 73ac movw r3, #6060 ; 0x17ac -1003286e: 50e2 str r2, [r4, r3] -10032870: f641 0338 movw r3, #6200 ; 0x1838 -10032874: 58e3 ldr r3, [r4, r3] -10032876: 4293 cmp r3, r2 -10032878: d119 bne.n 100328ae -1003287a: f641 0330 movw r3, #6192 ; 0x1830 -1003287e: 58e3 ldr r3, [r4, r3] -10032880: b10b cbz r3, 10032886 -10032882: 4620 mov r0, r4 -10032884: 4798 blx r3 -10032886: f241 4355 movw r3, #5205 ; 0x1455 -1003288a: 5ce3 ldrb r3, [r4, r3] -1003288c: b913 cbnz r3, 10032894 -1003288e: 4620 mov r0, r4 -10032890: f005 f9d8 bl 10037c44 -10032894: f241 76b0 movw r6, #6064 ; 0x17b0 -10032898: 59a3 ldr r3, [r4, r6] -1003289a: b923 cbnz r3, 100328a6 -1003289c: 4620 mov r0, r4 -1003289e: f7ff fe0b bl 100324b8 -100328a2: 2301 movs r3, #1 -100328a4: 51a3 str r3, [r4, r6] -100328a6: 2200 movs r2, #0 -100328a8: f641 0338 movw r3, #6200 ; 0x1838 -100328ac: 50e2 str r2, [r4, r3] -100328ae: 4620 mov r0, r4 -100328b0: f7ff fe68 bl 10032584 -100328b4: 4620 mov r0, r4 -100328b6: f005 f8b3 bl 10037a20 -100328ba: 4628 mov r0, r5 -100328bc: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -100328c0: f004 b887 b.w 100369d2 -100328c4: 2100 movs r1, #0 -100328c6: f7ef ff7b bl 100227c0 -100328ca: e7c1 b.n 10032850 -100328cc: 2100 movs r1, #0 -100328ce: 460a mov r2, r1 -100328d0: 460b mov r3, r1 -100328d2: 2004 movs r0, #4 -100328d4: f7da fe4e bl 1000d574 -100328d8: e7bd b.n 10032856 - -100328da : -100328da: f001 b9d9 b.w 10033c90 - -100328de : -100328de: f001 b96e b.w 10033bbe - -100328e2 : -100328e2: f8d0 3d08 ldr.w r3, [r0, #3336] ; 0xd08 -100328e6: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -100328ea: 2b02 cmp r3, #2 -100328ec: 4604 mov r4, r0 -100328ee: d15b bne.n 100329a8 -100328f0: f241 1394 movw r3, #4500 ; 0x1194 -100328f4: f810 8003 ldrb.w r8, [r0, r3] -100328f8: f241 1398 movw r3, #4504 ; 0x1198 -100328fc: f850 9003 ldr.w r9, [r0, r3] -10032900: 6903 ldr r3, [r0, #16] -10032902: f241 3538 movw r5, #4920 ; 0x1338 -10032906: f013 0f10 tst.w r3, #16 -1003290a: d061 beq.n 100329d0 -1003290c: 5940 ldr r0, [r0, r5] -1003290e: f500 703d add.w r0, r0, #756 ; 0x2f4 -10032912: f004 fa88 bl 10036e26 -10032916: f241 333c movw r3, #4924 ; 0x133c -1003291a: 58e0 ldr r0, [r4, r3] -1003291c: f500 703d add.w r0, r0, #756 ; 0x2f4 -10032920: f004 fa81 bl 10036e26 -10032924: f504 539a add.w r3, r4, #4928 ; 0x1340 -10032928: 6818 ldr r0, [r3, #0] -1003292a: f500 703d add.w r0, r0, #756 ; 0x2f4 -1003292e: f004 fa7a bl 10036e26 -10032932: f241 3a30 movw sl, #4912 ; 0x1330 -10032936: f241 3734 movw r7, #4916 ; 0x1334 -1003293a: f854 600a ldr.w r6, [r4, sl] -1003293e: 59e5 ldr r5, [r4, r7] -10032940: f604 5008 addw r0, r4, #3336 ; 0xd08 -10032944: 2100 movs r1, #0 -10032946: f44f 62d0 mov.w r2, #1664 ; 0x680 -1003294a: f7e4 fd71 bl 10017430 -1003294e: f844 600a str.w r6, [r4, sl] -10032952: 4630 mov r0, r6 -10032954: 51e5 str r5, [r4, r7] -10032956: 2100 movs r1, #0 -10032958: 462a mov r2, r5 -1003295a: f026 0603 bic.w r6, r6, #3 -1003295e: f7e4 fd67 bl 10017430 -10032962: 3604 adds r6, #4 -10032964: f241 3338 movw r3, #4920 ; 0x1338 -10032968: f5b5 6fc9 cmp.w r5, #1608 ; 0x648 -1003296c: 50e6 str r6, [r4, r3] -1003296e: d30d bcc.n 1003298c -10032970: f241 333c movw r3, #4924 ; 0x133c -10032974: f506 7249 add.w r2, r6, #804 ; 0x324 -10032978: 50e2 str r2, [r4, r3] -1003297a: f640 136b movw r3, #2411 ; 0x96b -1003297e: 429d cmp r5, r3 -10032980: d904 bls.n 1003298c -10032982: f504 539a add.w r3, r4, #4928 ; 0x1340 -10032986: f506 66c9 add.w r6, r6, #1608 ; 0x648 -1003298a: 601e str r6, [r3, #0] -1003298c: f241 1394 movw r3, #4500 ; 0x1194 -10032990: f804 8003 strb.w r8, [r4, r3] -10032994: f241 1398 movw r3, #4504 ; 0x1198 -10032998: f844 9003 str.w r9, [r4, r3] -1003299c: 2200 movs r2, #0 -1003299e: f241 036c movw r3, #4204 ; 0x106c -100329a2: 50e2 str r2, [r4, r3] -100329a4: 2201 movs r2, #1 -100329a6: e00e b.n 100329c6 -100329a8: 2300 movs r3, #0 -100329aa: 2201 movs r2, #1 -100329ac: f241 016c movw r1, #4204 ; 0x106c -100329b0: f8c0 3d08 str.w r3, [r0, #3336] ; 0xd08 -100329b4: f8c0 3d0c str.w r3, [r0, #3340] ; 0xd0c -100329b8: f8c0 3d10 str.w r3, [r0, #3344] ; 0xd10 -100329bc: f8c0 3d64 str.w r3, [r0, #3428] ; 0xd64 -100329c0: f8c0 2d68 str.w r2, [r0, #3432] ; 0xd68 -100329c4: 5043 str r3, [r0, r1] -100329c6: f241 0370 movw r3, #4208 ; 0x1070 -100329ca: 50e2 str r2, [r4, r3] -100329cc: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -100329d0: 071b lsls r3, r3, #28 -100329d2: d5ae bpl.n 10032932 -100329d4: 5940 ldr r0, [r0, r5] -100329d6: f500 703d add.w r0, r0, #756 ; 0x2f4 -100329da: f004 fa24 bl 10036e26 -100329de: 5960 ldr r0, [r4, r5] -100329e0: f500 7041 add.w r0, r0, #772 ; 0x304 -100329e4: e7a3 b.n 1003292e - -100329e6 : -100329e6: b510 push {r4, lr} -100329e8: 4604 mov r4, r0 -100329ea: f001 f96a bl 10033cc2 -100329ee: f8d4 2d10 ldr.w r2, [r4, #3344] ; 0xd10 -100329f2: 2a03 cmp r2, #3 -100329f4: d817 bhi.n 10032a26 -100329f6: 2100 movs r1, #0 -100329f8: 460b mov r3, r1 -100329fa: b2d2 uxtb r2, r2 -100329fc: 4620 mov r0, r4 -100329fe: f7ea f8f1 bl 1001cbe4 -10032a02: f8d4 0d10 ldr.w r0, [r4, #3344] ; 0xd10 -10032a06: 2210 movs r2, #16 -10032a08: eb04 1000 add.w r0, r4, r0, lsl #4 -10032a0c: f600 5014 addw r0, r0, #3348 ; 0xd14 -10032a10: 2100 movs r1, #0 -10032a12: f7e4 fd0d bl 10017430 -10032a16: f8d4 3d10 ldr.w r3, [r4, #3344] ; 0xd10 -10032a1a: 2200 movs r2, #0 -10032a1c: f503 7355 add.w r3, r3, #852 ; 0x354 -10032a20: eb04 0383 add.w r3, r4, r3, lsl #2 -10032a24: 605a str r2, [r3, #4] -10032a26: 4620 mov r0, r4 -10032a28: e8bd 4010 ldmia.w sp!, {r4, lr} -10032a2c: f7ff bf59 b.w 100328e2 - -10032a30 : -10032a30: 4601 mov r1, r0 -10032a32: b5f8 push {r3, r4, r5, r6, r7, lr} -10032a34: f641 0088 movw r0, #6280 ; 0x1888 -10032a38: b111 cbz r1, 10032a40 -10032a3a: f003 ffa9 bl 10036990 -10032a3e: e001 b.n 10032a44 -10032a40: f003 ffb1 bl 100369a6 -10032a44: 4606 mov r6, r0 -10032a46: 2800 cmp r0, #0 -10032a48: d07f beq.n 10032b4a -10032a4a: 6903 ldr r3, [r0, #16] -10032a4c: f641 0234 movw r2, #6196 ; 0x1834 -10032a50: 681b ldr r3, [r3, #0] -10032a52: 2500 movs r5, #0 -10032a54: 5098 str r0, [r3, r2] -10032a56: 4a3e ldr r2, [pc, #248] ; (10032b50 ) -10032a58: f503 549c add.w r4, r3, #4992 ; 0x1380 -10032a5c: 6202 str r2, [r0, #32] -10032a5e: 4a3d ldr r2, [pc, #244] ; (10032b54 ) -10032a60: 3408 adds r4, #8 -10032a62: 6242 str r2, [r0, #36] ; 0x24 -10032a64: 4a3c ldr r2, [pc, #240] ; (10032b58 ) -10032a66: 493d ldr r1, [pc, #244] ; (10032b5c ) -10032a68: 6282 str r2, [r0, #40] ; 0x28 -10032a6a: 4a3d ldr r2, [pc, #244] ; (10032b60 ) -10032a6c: 2702 movs r7, #2 -10032a6e: 6302 str r2, [r0, #48] ; 0x30 -10032a70: 4a3c ldr r2, [pc, #240] ; (10032b64 ) -10032a72: 62c2 str r2, [r0, #44] ; 0x2c -10032a74: f241 3288 movw r2, #5000 ; 0x1388 -10032a78: 549d strb r5, [r3, r2] -10032a7a: f104 0008 add.w r0, r4, #8 -10032a7e: 2203 movs r2, #3 -10032a80: f7e4 fcc6 bl 10017410 -10032a84: 2303 movs r3, #3 -10032a86: 6063 str r3, [r4, #4] -10032a88: 2301 movs r3, #1 -10032a8a: f884 302c strb.w r3, [r4, #44] ; 0x2c -10032a8e: f884 3030 strb.w r3, [r4, #48] ; 0x30 -10032a92: f884 302e strb.w r3, [r4, #46] ; 0x2e -10032a96: f884 3035 strb.w r3, [r4, #53] ; 0x35 -10032a9a: f884 3037 strb.w r3, [r4, #55] ; 0x37 -10032a9e: f884 3036 strb.w r3, [r4, #54] ; 0x36 -10032aa2: f884 303d strb.w r3, [r4, #61] ; 0x3d -10032aa6: f884 3044 strb.w r3, [r4, #68] ; 0x44 -10032aaa: f884 3045 strb.w r3, [r4, #69] ; 0x45 -10032aae: 2305 movs r3, #5 -10032ab0: f884 3048 strb.w r3, [r4, #72] ; 0x48 -10032ab4: 4b2c ldr r3, [pc, #176] ; (10032b68 ) -10032ab6: 220b movs r2, #11 -10032ab8: 781b ldrb r3, [r3, #0] -10032aba: f884 202d strb.w r2, [r4, #45] ; 0x2d -10032abe: f640 122b movw r2, #2347 ; 0x92b -10032ac2: 8662 strh r2, [r4, #50] ; 0x32 -10032ac4: f884 3049 strb.w r3, [r4, #73] ; 0x49 -10032ac8: 2264 movs r2, #100 ; 0x64 -10032aca: 2359 movs r3, #89 ; 0x59 -10032acc: f884 304b strb.w r3, [r4, #75] ; 0x4b -10032ad0: 6422 str r2, [r4, #64] ; 0x40 -10032ad2: 2110 movs r1, #16 -10032ad4: 4a25 ldr r2, [pc, #148] ; (10032b6c ) -10032ad6: f884 702f strb.w r7, [r4, #47] ; 0x2f -10032ada: f884 5034 strb.w r5, [r4, #52] ; 0x34 -10032ade: f884 7038 strb.w r7, [r4, #56] ; 0x38 -10032ae2: f884 5039 strb.w r5, [r4, #57] ; 0x39 -10032ae6: f884 503a strb.w r5, [r4, #58] ; 0x3a -10032aea: f884 503b strb.w r5, [r4, #59] ; 0x3b -10032aee: f884 503c strb.w r5, [r4, #60] ; 0x3c -10032af2: f884 503e strb.w r5, [r4, #62] ; 0x3e -10032af6: f884 5046 strb.w r5, [r4, #70] ; 0x46 -10032afa: f884 5047 strb.w r5, [r4, #71] ; 0x47 -10032afe: f884 504a strb.w r5, [r4, #74] ; 0x4a -10032b02: f104 004c add.w r0, r4, #76 ; 0x4c -10032b06: f7e7 ffd5 bl 1001aab4 -10032b0a: f104 005c add.w r0, r4, #92 ; 0x5c -10032b0e: 2110 movs r1, #16 -10032b10: 4a17 ldr r2, [pc, #92] ; (10032b70 ) -10032b12: f7e7 ffcf bl 1001aab4 -10032b16: 230e movs r3, #14 -10032b18: f884 306f strb.w r3, [r4, #111] ; 0x6f -10032b1c: 4b15 ldr r3, [pc, #84] ; (10032b74 ) -10032b1e: f884 706c strb.w r7, [r4, #108] ; 0x6c -10032b22: 781b ldrb r3, [r3, #0] -10032b24: f884 706d strb.w r7, [r4, #109] ; 0x6d -10032b28: f884 3071 strb.w r3, [r4, #113] ; 0x71 -10032b2c: 4b12 ldr r3, [pc, #72] ; (10032b78 ) -10032b2e: f884 506e strb.w r5, [r4, #110] ; 0x6e -10032b32: 781b ldrb r3, [r3, #0] -10032b34: f884 5073 strb.w r5, [r4, #115] ; 0x73 -10032b38: f884 3072 strb.w r3, [r4, #114] ; 0x72 -10032b3c: 2304 movs r3, #4 -10032b3e: f884 3074 strb.w r3, [r4, #116] ; 0x74 -10032b42: 4b0e ldr r3, [pc, #56] ; (10032b7c ) -10032b44: 781b ldrb r3, [r3, #0] -10032b46: f884 3075 strb.w r3, [r4, #117] ; 0x75 -10032b4a: 4630 mov r0, r6 -10032b4c: bdf8 pop {r3, r4, r5, r6, r7, pc} -10032b4e: bf00 nop -10032b50: 10033039 .word 0x10033039 -10032b54: 100327e1 .word 0x100327e1 -10032b58: 10036945 .word 0x10036945 -10032b5c: 10041cca .word 0x10041cca -10032b60: 10032771 .word 0x10032771 -10032b64: 10034d59 .word 0x10034d59 -10032b68: 1004dd68 .word 0x1004dd68 -10032b6c: 1003fbe2 .word 0x1003fbe2 -10032b70: 10041cce .word 0x10041cce -10032b74: 1004dd70 .word 0x1004dd70 -10032b78: 10044f44 .word 0x10044f44 -10032b7c: 1004dd80 .word 0x1004dd80 - -10032b80 : -10032b80: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -10032b84: 4605 mov r5, r0 -10032b86: 2000 movs r0, #0 -10032b88: 460f mov r7, r1 -10032b8a: f7ff ff51 bl 10032a30 -10032b8e: 4606 mov r6, r0 -10032b90: 2800 cmp r0, #0 -10032b92: f000 80e6 beq.w 10032d62 -10032b96: 4b7a ldr r3, [pc, #488] ; (10032d80 ) -10032b98: 4629 mov r1, r5 -10032b9a: 6203 str r3, [r0, #32] -10032b9c: 4b79 ldr r3, [pc, #484] ; (10032d84 ) -10032b9e: f641 0288 movw r2, #6280 ; 0x1888 -10032ba2: 6243 str r3, [r0, #36] ; 0x24 -10032ba4: 6903 ldr r3, [r0, #16] -10032ba6: f04f 0800 mov.w r8, #0 -10032baa: 681c ldr r4, [r3, #0] -10032bac: 4620 mov r0, r4 -10032bae: f7e4 fc2f bl 10017410 -10032bb2: f104 000c add.w r0, r4, #12 -10032bb6: 2100 movs r1, #0 -10032bb8: f240 5204 movw r2, #1284 ; 0x504 -10032bbc: f7e4 fc38 bl 10017430 -10032bc0: f895 349e ldrb.w r3, [r5, #1182] ; 0x49e -10032bc4: f504 60a2 add.w r0, r4, #1296 ; 0x510 -10032bc8: f884 349e strb.w r3, [r4, #1182] ; 0x49e -10032bcc: 2100 movs r1, #0 -10032bce: f44f 727e mov.w r2, #1016 ; 0x3f8 -10032bd2: f7e4 fc2d bl 10017430 -10032bd6: f504 6046 add.w r0, r4, #3168 ; 0xc60 -10032bda: 2100 movs r1, #0 -10032bdc: 22a4 movs r2, #164 ; 0xa4 -10032bde: f7e4 fc27 bl 10017430 -10032be2: f641 0364 movw r3, #6244 ; 0x1864 -10032be6: 58ea ldr r2, [r5, r3] -10032be8: 4620 mov r0, r4 -10032bea: 50e2 str r2, [r4, r3] -10032bec: f641 036c movw r3, #6252 ; 0x186c -10032bf0: 58ea ldr r2, [r5, r3] -10032bf2: 50e2 str r2, [r4, r3] -10032bf4: f641 0370 movw r3, #6256 ; 0x1870 -10032bf8: 58ea ldr r2, [r5, r3] -10032bfa: 50e2 str r2, [r4, r3] -10032bfc: f505 53c3 add.w r3, r5, #6240 ; 0x1860 -10032c00: 681a ldr r2, [r3, #0] -10032c02: f504 53c3 add.w r3, r4, #6240 ; 0x1860 -10032c06: 601a str r2, [r3, #0] -10032c08: f641 0338 movw r3, #6200 ; 0x1838 -10032c0c: f844 8003 str.w r8, [r4, r3] -10032c10: f641 0258 movw r2, #6232 ; 0x1858 -10032c14: 2301 movs r3, #1 -10032c16: 54a3 strb r3, [r4, r2] -10032c18: f241 72c5 movw r2, #6085 ; 0x17c5 -10032c1c: f804 8002 strb.w r8, [r4, r2] -10032c20: f641 0268 movw r2, #6248 ; 0x1868 -10032c24: f804 8002 strb.w r8, [r4, r2] -10032c28: f641 0269 movw r2, #6249 ; 0x1869 -10032c2c: 54a3 strb r3, [r4, r2] -10032c2e: f641 025c movw r2, #6236 ; 0x185c -10032c32: 50a5 str r5, [r4, r2] -10032c34: f641 026a movw r2, #6250 ; 0x186a -10032c38: 54a3 strb r3, [r4, r2] -10032c3a: f641 0334 movw r3, #6196 ; 0x1834 -10032c3e: 50e6 str r6, [r4, r3] -10032c40: 68a3 ldr r3, [r4, #8] -10032c42: 7c1a ldrb r2, [r3, #16] -10032c44: 605c str r4, [r3, #4] -10032c46: 1c51 adds r1, r2, #1 -10032c48: 7419 strb r1, [r3, #16] -10032c4a: 3202 adds r2, #2 -10032c4c: f843 4022 str.w r4, [r3, r2, lsl #2] -10032c50: 886b ldrh r3, [r5, #2] -10032c52: 8063 strh r3, [r4, #2] -10032c54: 882b ldrh r3, [r5, #0] -10032c56: 8023 strh r3, [r4, #0] -10032c58: f008 f82e bl 1003acb8 -10032c5c: f504 53b7 add.w r3, r4, #5856 ; 0x16e0 -10032c60: f8c3 8000 str.w r8, [r3] -10032c64: f241 63e4 movw r3, #5860 ; 0x16e4 -10032c68: f844 8003 str.w r8, [r4, r3] -10032c6c: f641 032c movw r3, #6188 ; 0x182c -10032c70: 58ea ldr r2, [r5, r3] -10032c72: 4620 mov r0, r4 -10032c74: 50e2 str r2, [r4, r3] -10032c76: f641 0330 movw r3, #6192 ; 0x1830 -10032c7a: 58ea ldr r2, [r5, r3] -10032c7c: 50e2 str r2, [r4, r3] -10032c7e: f7ff fbcf bl 10032420 -10032c82: 4620 mov r0, r4 -10032c84: f7ff fbb6 bl 100323f4 -10032c88: 4620 mov r0, r4 -10032c8a: f004 ff33 bl 10037af4 -10032c8e: 2801 cmp r0, #1 -10032c90: d168 bne.n 10032d64 -10032c92: b917 cbnz r7, 10032c9a -10032c94: f504 579f add.w r7, r4, #5088 ; 0x13e0 -10032c98: 3704 adds r7, #4 -10032c9a: 4639 mov r1, r7 -10032c9c: 4630 mov r0, r6 -10032c9e: f003 ff5a bl 10036b56 -10032ca2: f505 51a4 add.w r1, r5, #5248 ; 0x1480 -10032ca6: 2206 movs r2, #6 -10032ca8: 4668 mov r0, sp -10032caa: 3119 adds r1, #25 -10032cac: f7e4 fbb0 bl 10017410 -10032cb0: f89d 2000 ldrb.w r2, [sp] -10032cb4: f89d 3005 ldrb.w r3, [sp, #5] -10032cb8: 2aff cmp r2, #255 ; 0xff -10032cba: d112 bne.n 10032ce2 -10032cbc: f89d 2001 ldrb.w r2, [sp, #1] -10032cc0: 2aff cmp r2, #255 ; 0xff -10032cc2: d12d bne.n 10032d20 -10032cc4: f89d 2002 ldrb.w r2, [sp, #2] -10032cc8: 2aff cmp r2, #255 ; 0xff -10032cca: d129 bne.n 10032d20 -10032ccc: f89d 2003 ldrb.w r2, [sp, #3] -10032cd0: 2aff cmp r2, #255 ; 0xff -10032cd2: d125 bne.n 10032d20 -10032cd4: f89d 2004 ldrb.w r2, [sp, #4] -10032cd8: 2aff cmp r2, #255 ; 0xff -10032cda: d121 bne.n 10032d20 -10032cdc: 2bff cmp r3, #255 ; 0xff -10032cde: d11f bne.n 10032d20 -10032ce0: e00d b.n 10032cfe -10032ce2: b9ea cbnz r2, 10032d20 -10032ce4: f89d 2001 ldrb.w r2, [sp, #1] -10032ce8: b9d2 cbnz r2, 10032d20 -10032cea: f89d 2002 ldrb.w r2, [sp, #2] -10032cee: b9ba cbnz r2, 10032d20 -10032cf0: f89d 2003 ldrb.w r2, [sp, #3] -10032cf4: b9a2 cbnz r2, 10032d20 -10032cf6: f89d 2004 ldrb.w r2, [sp, #4] -10032cfa: b98a cbnz r2, 10032d20 -10032cfc: b983 cbnz r3, 10032d20 -10032cfe: 2300 movs r3, #0 -10032d00: f88d 3000 strb.w r3, [sp] -10032d04: 23e0 movs r3, #224 ; 0xe0 -10032d06: f88d 3001 strb.w r3, [sp, #1] -10032d0a: 234c movs r3, #76 ; 0x4c -10032d0c: f88d 3002 strb.w r3, [sp, #2] -10032d10: 2387 movs r3, #135 ; 0x87 -10032d12: f88d 3003 strb.w r3, [sp, #3] -10032d16: 2311 movs r3, #17 -10032d18: f88d 3004 strb.w r3, [sp, #4] -10032d1c: 2322 movs r3, #34 ; 0x22 -10032d1e: e000 b.n 10032d22 -10032d20: 3301 adds r3, #1 -10032d22: f504 50a4 add.w r0, r4, #5248 ; 0x1480 -10032d26: 3019 adds r0, #25 -10032d28: 4669 mov r1, sp -10032d2a: 2206 movs r2, #6 -10032d2c: f88d 3005 strb.w r3, [sp, #5] -10032d30: f641 0774 movw r7, #6260 ; 0x1874 -10032d34: f7e4 fb6c bl 10017410 -10032d38: f106 0014 add.w r0, r6, #20 -10032d3c: 4669 mov r1, sp -10032d3e: 2206 movs r2, #6 -10032d40: f7e4 fb66 bl 10017410 -10032d44: 59ee ldr r6, [r5, r7] -10032d46: f641 035c movw r3, #6236 ; 0x185c -10032d4a: 50ec str r4, [r5, r3] -10032d4c: b99e cbnz r6, 10032d76 -10032d4e: 2004 movs r0, #4 -10032d50: f7e4 fd0e bl 10017770 -10032d54: 2301 movs r3, #1 -10032d56: 51e8 str r0, [r5, r7] -10032d58: 51e0 str r0, [r4, r7] -10032d5a: 7003 strb r3, [r0, #0] -10032d5c: 7046 strb r6, [r0, #1] -10032d5e: 7086 strb r6, [r0, #2] -10032d60: e009 b.n 10032d76 -10032d62: 4604 mov r4, r0 -10032d64: 4620 mov r0, r4 -10032d66: f004 fe5b bl 10037a20 -10032d6a: 4630 mov r0, r6 -10032d6c: b126 cbz r6, 10032d78 -10032d6e: f003 fe30 bl 100369d2 -10032d72: 2000 movs r0, #0 -10032d74: e000 b.n 10032d78 -10032d76: 4620 mov r0, r4 -10032d78: b002 add sp, #8 -10032d7a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10032d7e: bf00 nop -10032d80: 10033011 .word 0x10033011 -10032d84: 100327c1 .word 0x100327c1 - -10032d88 : -10032d88: b510 push {r4, lr} -10032d8a: 4604 mov r4, r0 -10032d8c: b330 cbz r0, 10032ddc -10032d8e: f004 fe01 bl 10037994 -10032d92: f641 0338 movw r3, #6200 ; 0x1838 -10032d96: 58e3 ldr r3, [r4, r3] -10032d98: 2b01 cmp r3, #1 -10032d9a: d11f bne.n 10032ddc -10032d9c: f241 72ac movw r2, #6060 ; 0x17ac -10032da0: 50a3 str r3, [r4, r2] -10032da2: f504 53bf add.w r3, r4, #6112 ; 0x17e0 -10032da6: 3318 adds r3, #24 -10032da8: 681b ldr r3, [r3, #0] -10032daa: 2b01 cmp r3, #1 -10032dac: d103 bne.n 10032db6 -10032dae: 2001 movs r0, #1 -10032db0: f7e4 fc60 bl 10017674 -10032db4: e7f5 b.n 10032da2 -10032db6: f504 53c2 add.w r3, r4, #6208 ; 0x1840 -10032dba: 69d8 ldr r0, [r3, #28] -10032dbc: f600 1008 addw r0, r0, #2312 ; 0x908 -10032dc0: f7e4 fb41 bl 10017446 -10032dc4: 2800 cmp r0, #0 -10032dc6: d0f2 beq.n 10032dae -10032dc8: f641 0330 movw r3, #6192 ; 0x1830 -10032dcc: 58e3 ldr r3, [r4, r3] -10032dce: b10b cbz r3, 10032dd4 -10032dd0: 4620 mov r0, r4 -10032dd2: 4798 blx r3 -10032dd4: 2200 movs r2, #0 -10032dd6: f641 0338 movw r3, #6200 ; 0x1838 -10032dda: 50e2 str r2, [r4, r3] -10032ddc: bd10 pop {r4, pc} - -10032dde : -10032dde: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10032de2: 4604 mov r4, r0 -10032de4: b1f0 cbz r0, 10032e24 -10032de6: f641 0369 movw r3, #6249 ; 0x1869 -10032dea: 5cc6 ldrb r6, [r0, r3] -10032dec: b9d6 cbnz r6, 10032e24 -10032dee: f641 075c movw r7, #6236 ; 0x185c -10032df2: 59c5 ldr r5, [r0, r7] -10032df4: b1b5 cbz r5, 10032e24 -10032df6: f641 0334 movw r3, #6196 ; 0x1834 -10032dfa: 4628 mov r0, r5 -10032dfc: f855 8003 ldr.w r8, [r5, r3] -10032e00: f7e9 f8ac bl 1001bf5c -10032e04: 51e6 str r6, [r4, r7] -10032e06: f641 0774 movw r7, #6260 ; 0x1874 -10032e0a: 51ee str r6, [r5, r7] -10032e0c: 4628 mov r0, r5 -10032e0e: f004 fe07 bl 10037a20 -10032e12: 4640 mov r0, r8 -10032e14: f003 fddd bl 100369d2 -10032e18: 59e0 ldr r0, [r4, r7] -10032e1a: b118 cbz r0, 10032e24 -10032e1c: 2104 movs r1, #4 -10032e1e: f7e4 faf2 bl 10017406 -10032e22: 51e6 str r6, [r4, r7] -10032e24: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -10032e28 <_netdev_open>: -10032e28: 6903 ldr r3, [r0, #16] -10032e2a: b570 push {r4, r5, r6, lr} -10032e2c: 681c ldr r4, [r3, #0] -10032e2e: 4605 mov r5, r0 -10032e30: f504 53a0 add.w r3, r4, #5120 ; 0x1400 -10032e34: 6edb ldr r3, [r3, #108] ; 0x6c -10032e36: 2b01 cmp r3, #1 -10032e38: d104 bne.n 10032e44 <_netdev_open+0x1c> -10032e3a: 2200 movs r2, #0 -10032e3c: f641 0358 movw r3, #6232 ; 0x1858 -10032e40: 54e2 strb r2, [r4, r3] -10032e42: e04e b.n 10032ee2 <_netdev_open+0xba> -10032e44: f641 0338 movw r3, #6200 ; 0x1838 -10032e48: 58e3 ldr r3, [r4, r3] -10032e4a: bb23 cbnz r3, 10032e96 <_netdev_open+0x6e> -10032e4c: f241 72ac movw r2, #6060 ; 0x17ac -10032e50: 50a3 str r3, [r4, r2] -10032e52: f241 72b0 movw r2, #6064 ; 0x17b0 -10032e56: 50a3 str r3, [r4, r2] -10032e58: f241 72b4 movw r2, #6068 ; 0x17b4 -10032e5c: 50a3 str r3, [r4, r2] -10032e5e: f241 72c8 movw r2, #6088 ; 0x17c8 -10032e62: 54a3 strb r3, [r4, r2] -10032e64: 4620 mov r0, r4 -10032e66: f7ff fb12 bl 1003248e -10032e6a: 2800 cmp r0, #0 -10032e6c: d060 beq.n 10032f30 <_netdev_open+0x108> -10032e6e: 4620 mov r0, r4 -10032e70: f004 fe8a bl 10037b88 -10032e74: 2800 cmp r0, #0 -10032e76: d05b beq.n 10032f30 <_netdev_open+0x108> -10032e78: 4620 mov r0, r4 -10032e7a: f7eb fbda bl 1001e632 -10032e7e: 2800 cmp r0, #0 -10032e80: d056 beq.n 10032f30 <_netdev_open+0x108> -10032e82: f641 032c movw r3, #6188 ; 0x182c -10032e86: 58e3 ldr r3, [r4, r3] -10032e88: b10b cbz r3, 10032e8e <_netdev_open+0x66> -10032e8a: 4620 mov r0, r4 -10032e8c: 4798 blx r3 -10032e8e: 2201 movs r2, #1 -10032e90: f641 0338 movw r3, #6200 ; 0x1838 -10032e94: 50e2 str r2, [r4, r3] -10032e96: f641 0358 movw r3, #6232 ; 0x1858 -10032e9a: 2600 movs r6, #0 -10032e9c: 54e6 strb r6, [r4, r3] -10032e9e: f604 401c addw r0, r4, #3100 ; 0xc1c -10032ea2: f8d4 1c28 ldr.w r1, [r4, #3112] ; 0xc28 -10032ea6: f003 ffb7 bl 10036e18 -10032eaa: f504 6092 add.w r0, r4, #1168 ; 0x490 -10032eae: f44f 61fa mov.w r1, #2000 ; 0x7d0 -10032eb2: f003 ffb1 bl 10036e18 -10032eb6: f241 4338 movw r3, #5176 ; 0x1438 -10032eba: 50e6 str r6, [r4, r3] -10032ebc: f504 50a2 add.w r0, r4, #5184 ; 0x1440 -10032ec0: f241 4364 movw r3, #5220 ; 0x1464 -10032ec4: 3018 adds r0, #24 -10032ec6: 58e1 ldr r1, [r4, r3] -10032ec8: f003 ffa6 bl 10036e18 -10032ecc: 4628 mov r0, r5 -10032ece: f7e4 fc7f bl 100177d0 -10032ed2: b918 cbnz r0, 10032edc <_netdev_open+0xb4> -10032ed4: 4628 mov r0, r5 -10032ed6: f7e4 fc7e bl 100177d6 -10032eda: e002 b.n 10032ee2 <_netdev_open+0xba> -10032edc: 4628 mov r0, r5 -10032ede: f7e4 fc79 bl 100177d4 -10032ee2: f641 035c movw r3, #6236 ; 0x185c -10032ee6: 58e3 ldr r3, [r4, r3] -10032ee8: b163 cbz r3, 10032f04 <_netdev_open+0xdc> -10032eea: f641 0238 movw r2, #6200 ; 0x1838 -10032eee: 589a ldr r2, [r3, r2] -10032ef0: b11a cbz r2, 10032efa <_netdev_open+0xd2> -10032ef2: f241 72c5 movw r2, #6085 ; 0x17c5 -10032ef6: 5c9a ldrb r2, [r3, r2] -10032ef8: b922 cbnz r2, 10032f04 <_netdev_open+0xdc> -10032efa: f641 0234 movw r2, #6196 ; 0x1834 -10032efe: 5898 ldr r0, [r3, r2] -10032f00: f000 f828 bl 10032f54 <_netdev_if2_open> -10032f04: 4b10 ldr r3, [pc, #64] ; (10032f48 <_netdev_open+0x120>) -10032f06: 681b ldr r3, [r3, #0] -10032f08: b11b cbz r3, 10032f12 <_netdev_open+0xea> -10032f0a: 6862 ldr r2, [r4, #4] -10032f0c: 2a01 cmp r2, #1 -10032f0e: d100 bne.n 10032f12 <_netdev_open+0xea> -10032f10: 4798 blx r3 -10032f12: 4b0e ldr r3, [pc, #56] ; (10032f4c <_netdev_open+0x124>) -10032f14: 681b ldr r3, [r3, #0] -10032f16: b11b cbz r3, 10032f20 <_netdev_open+0xf8> -10032f18: 6862 ldr r2, [r4, #4] -10032f1a: 2a01 cmp r2, #1 -10032f1c: d100 bne.n 10032f20 <_netdev_open+0xf8> -10032f1e: 4798 blx r3 -10032f20: 4b0b ldr r3, [pc, #44] ; (10032f50 <_netdev_open+0x128>) -10032f22: 6818 ldr r0, [r3, #0] -10032f24: b178 cbz r0, 10032f46 <_netdev_open+0x11e> -10032f26: 6863 ldr r3, [r4, #4] -10032f28: 2b01 cmp r3, #1 -10032f2a: d10b bne.n 10032f44 <_netdev_open+0x11c> -10032f2c: 4780 blx r0 -10032f2e: e009 b.n 10032f44 <_netdev_open+0x11c> -10032f30: 2200 movs r2, #0 -10032f32: f641 0338 movw r3, #6200 ; 0x1838 -10032f36: 4628 mov r0, r5 -10032f38: 50e2 str r2, [r4, r3] -10032f3a: f7e4 fc4d bl 100177d8 -10032f3e: f04f 30ff mov.w r0, #4294967295 -10032f42: bd70 pop {r4, r5, r6, pc} -10032f44: 2000 movs r0, #0 -10032f46: bd70 pop {r4, r5, r6, pc} -10032f48: 1004dd78 .word 0x1004dd78 -10032f4c: 1004dd64 .word 0x1004dd64 -10032f50: 1004dd6c .word 0x1004dd6c - -10032f54 <_netdev_if2_open>: -10032f54: b5f8 push {r3, r4, r5, r6, r7, lr} -10032f56: 6903 ldr r3, [r0, #16] -10032f58: 4606 mov r6, r0 -10032f5a: 681c ldr r4, [r3, #0] -10032f5c: f641 035c movw r3, #6236 ; 0x185c -10032f60: 58e5 ldr r5, [r4, r3] -10032f62: f641 0338 movw r3, #6200 ; 0x1838 -10032f66: 58eb ldr r3, [r5, r3] -10032f68: b11b cbz r3, 10032f72 <_netdev_if2_open+0x1e> -10032f6a: f241 73c5 movw r3, #6085 ; 0x17c5 -10032f6e: 5ceb ldrb r3, [r5, r3] -10032f70: b923 cbnz r3, 10032f7c <_netdev_if2_open+0x28> -10032f72: f641 0334 movw r3, #6196 ; 0x1834 -10032f76: 58e8 ldr r0, [r5, r3] -10032f78: f7ff ff56 bl 10032e28 <_netdev_open> -10032f7c: f641 0238 movw r2, #6200 ; 0x1838 -10032f80: 58a3 ldr r3, [r4, r2] -10032f82: 2b00 cmp r3, #0 -10032f84: d133 bne.n 10032fee <_netdev_if2_open+0x9a> -10032f86: 58aa ldr r2, [r5, r2] -10032f88: 2a01 cmp r2, #1 -10032f8a: d130 bne.n 10032fee <_netdev_if2_open+0x9a> -10032f8c: f241 72c5 movw r2, #6085 ; 0x17c5 -10032f90: 5caa ldrb r2, [r5, r2] -10032f92: 2a01 cmp r2, #1 -10032f94: d12b bne.n 10032fee <_netdev_if2_open+0x9a> -10032f96: f241 72ac movw r2, #6060 ; 0x17ac -10032f9a: 50a3 str r3, [r4, r2] -10032f9c: f241 72b0 movw r2, #6064 ; 0x17b0 -10032fa0: 50a3 str r3, [r4, r2] -10032fa2: f106 0714 add.w r7, r6, #20 -10032fa6: f241 72b4 movw r2, #6068 ; 0x17b4 -10032faa: f504 51a4 add.w r1, r4, #5248 ; 0x1480 -10032fae: 50a3 str r3, [r4, r2] -10032fb0: 4638 mov r0, r7 -10032fb2: 2206 movs r2, #6 -10032fb4: 3119 adds r1, #25 -10032fb6: f7e4 fa2b bl 10017410 -10032fba: 4620 mov r0, r4 -10032fbc: 4629 mov r1, r5 -10032fbe: f7ff fb31 bl 10032624 -10032fc2: f641 0359 movw r3, #6233 ; 0x1859 -10032fc6: 5cea ldrb r2, [r5, r3] -10032fc8: 4620 mov r0, r4 -10032fca: 54e2 strb r2, [r4, r3] -10032fcc: 2103 movs r1, #3 -10032fce: 463a mov r2, r7 -10032fd0: f7ff fa7f bl 100324d2 -10032fd4: f641 032c movw r3, #6188 ; 0x182c -10032fd8: 58e3 ldr r3, [r4, r3] -10032fda: b10b cbz r3, 10032fe0 <_netdev_if2_open+0x8c> -10032fdc: 4620 mov r0, r4 -10032fde: 4798 blx r3 -10032fe0: 2301 movs r3, #1 -10032fe2: f241 72c5 movw r2, #6085 ; 0x17c5 -10032fe6: 54a3 strb r3, [r4, r2] -10032fe8: f641 0238 movw r2, #6200 ; 0x1838 -10032fec: 50a3 str r3, [r4, r2] -10032fee: 2200 movs r2, #0 -10032ff0: f641 0358 movw r3, #6232 ; 0x1858 -10032ff4: 54e2 strb r2, [r4, r3] -10032ff6: 4630 mov r0, r6 -10032ff8: f7e4 fbea bl 100177d0 -10032ffc: b918 cbnz r0, 10033006 <_netdev_if2_open+0xb2> -10032ffe: 4630 mov r0, r6 -10033000: f7e4 fbe9 bl 100177d6 -10033004: e002 b.n 1003300c <_netdev_if2_open+0xb8> -10033006: 4630 mov r0, r6 -10033008: f7e4 fbe4 bl 100177d4 -1003300c: 2000 movs r0, #0 -1003300e: bdf8 pop {r3, r4, r5, r6, r7, pc} - -10033010 : -10033010: b538 push {r3, r4, r5, lr} -10033012: 6903 ldr r3, [r0, #16] -10033014: 4605 mov r5, r0 -10033016: 681c ldr r4, [r3, #0] -10033018: 2100 movs r1, #0 -1003301a: f504 54c3 add.w r4, r4, #6240 ; 0x1860 -1003301e: 6820 ldr r0, [r4, #0] -10033020: f7e4 fa9a bl 10017558 -10033024: 4628 mov r0, r5 -10033026: f7ff ff95 bl 10032f54 <_netdev_if2_open> -1003302a: 2100 movs r1, #0 -1003302c: 4605 mov r5, r0 -1003302e: 6820 ldr r0, [r4, #0] -10033030: f7e4 fa9a bl 10017568 -10033034: 4628 mov r0, r5 -10033036: bd38 pop {r3, r4, r5, pc} - -10033038 : -10033038: b538 push {r3, r4, r5, lr} -1003303a: 6903 ldr r3, [r0, #16] -1003303c: 4605 mov r5, r0 -1003303e: 681c ldr r4, [r3, #0] -10033040: 2100 movs r1, #0 -10033042: f504 54c3 add.w r4, r4, #6240 ; 0x1860 -10033046: 6820 ldr r0, [r4, #0] -10033048: f7e4 fa86 bl 10017558 -1003304c: 4628 mov r0, r5 -1003304e: f7ff feeb bl 10032e28 <_netdev_open> -10033052: 2100 movs r1, #0 -10033054: 4605 mov r5, r0 -10033056: 6820 ldr r0, [r4, #0] -10033058: f7e4 fa86 bl 10017568 -1003305c: 4628 mov r0, r5 -1003305e: bd38 pop {r3, r4, r5, pc} - -10033060 : -10033060: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10033064: 4689 mov r9, r1 -10033066: 4606 mov r6, r0 -10033068: b188 cbz r0, 1003308e -1003306a: 6903 ldr r3, [r0, #16] -1003306c: 2200 movs r2, #0 -1003306e: 681c ldr r4, [r3, #0] -10033070: f504 519f add.w r1, r4, #5088 ; 0x13e0 -10033074: 4620 mov r0, r4 -10033076: 3104 adds r1, #4 -10033078: 68a5 ldr r5, [r4, #8] -1003307a: f7ff fd81 bl 10032b80 -1003307e: 2800 cmp r0, #0 -10033080: f000 8095 beq.w 100331ae -10033084: f641 0334 movw r3, #6196 ; 0x1834 -10033088: 58c0 ldr r0, [r0, r3] -1003308a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1003308e: f008 fd3b bl 1003bb08 -10033092: 4605 mov r5, r0 -10033094: 2800 cmp r0, #0 -10033096: f000 8090 beq.w 100331ba -1003309a: f641 0088 movw r0, #6280 ; 0x1888 -1003309e: f7e4 fb67 bl 10017770 -100330a2: 4604 mov r4, r0 -100330a4: 2800 cmp r0, #0 -100330a6: f000 8085 beq.w 100331b4 -100330aa: 4b4a ldr r3, [pc, #296] ; (100331d4 ) -100330ac: f500 52c3 add.w r2, r0, #6240 ; 0x1860 -100330b0: 2701 movs r7, #1 -100330b2: f241 78ac movw r8, #6060 ; 0x17ac -100330b6: 6085 str r5, [r0, #8] -100330b8: 1d19 adds r1, r3, #4 -100330ba: 6028 str r0, [r5, #0] -100330bc: f840 7008 str.w r7, [r0, r8] -100330c0: 6013 str r3, [r2, #0] -100330c2: f641 0264 movw r2, #6244 ; 0x1864 -100330c6: 5081 str r1, [r0, r2] -100330c8: f103 0108 add.w r1, r3, #8 -100330cc: f641 026c movw r2, #6252 ; 0x186c -100330d0: 5081 str r1, [r0, r2] -100330d2: 330c adds r3, #12 -100330d4: f641 0270 movw r2, #6256 ; 0x1870 -100330d8: 5083 str r3, [r0, r2] -100330da: f641 0368 movw r3, #6248 ; 0x1868 -100330de: 54c7 strb r7, [r0, r3] -100330e0: f641 0369 movw r3, #6249 ; 0x1869 -100330e4: 54c6 strb r6, [r0, r3] -100330e6: 7c2b ldrb r3, [r5, #16] -100330e8: 19da adds r2, r3, r7 -100330ea: 3302 adds r3, #2 -100330ec: 742a strb r2, [r5, #16] -100330ee: f845 0023 str.w r0, [r5, r3, lsl #2] -100330f2: f641 036a movw r3, #6250 ; 0x186a -100330f6: 54c6 strb r6, [r0, r3] -100330f8: 2310 movs r3, #16 -100330fa: 8043 strh r3, [r0, #2] -100330fc: f8c0 9004 str.w r9, [r0, #4] -10033100: f7ff fb33 bl 1003276a -10033104: 4620 mov r0, r4 -10033106: f7ff fc93 bl 10032a30 -1003310a: 4606 mov r6, r0 -1003310c: 2800 cmp r0, #0 -1003310e: d05b beq.n 100331c8 -10033110: f604 102c addw r0, r4, #2348 ; 0x92c -10033114: f7f8 fbf2 bl 1002b8fc -10033118: 4620 mov r0, r4 -1003311a: f007 fdcd bl 1003acb8 -1003311e: 2800 cmp r0, #0 -10033120: d03d beq.n 1003319e -10033122: 4620 mov r0, r4 -10033124: f7ff f966 bl 100323f4 -10033128: 4620 mov r0, r4 -1003312a: f7ff f979 bl 10032420 -1003312e: 4620 mov r0, r4 -10033130: f7ff f96b bl 1003240a -10033134: 4a28 ldr r2, [pc, #160] ; (100331d8 ) -10033136: f641 032c movw r3, #6188 ; 0x182c -1003313a: 50e2 str r2, [r4, r3] -1003313c: 4a27 ldr r2, [pc, #156] ; (100331dc ) -1003313e: f641 0330 movw r3, #6192 ; 0x1830 -10033142: 50e2 str r2, [r4, r3] -10033144: 4620 mov r0, r4 -10033146: f7ff fa14 bl 10032572 -1003314a: b340 cbz r0, 1003319e -1003314c: 4620 mov r0, r4 -1003314e: f7ff f9ff bl 10032550 -10033152: 4620 mov r0, r4 -10033154: f004 fcce bl 10037af4 -10033158: b1c8 cbz r0, 1003318e -1003315a: f504 519e add.w r1, r4, #5056 ; 0x13c0 -1003315e: f504 57a4 add.w r7, r4, #5248 ; 0x1480 -10033162: 3114 adds r1, #20 -10033164: 3719 adds r7, #25 -10033166: 4630 mov r0, r6 -10033168: f003 fcf5 bl 10036b56 -1003316c: 4638 mov r0, r7 -1003316e: f004 fa5d bl 1003762c -10033172: f106 0014 add.w r0, r6, #20 -10033176: 4639 mov r1, r7 -10033178: 2206 movs r2, #6 -1003317a: f7e4 f949 bl 10017410 -1003317e: 4628 mov r0, r5 -10033180: f008 fcd2 bl 1003bb28 -10033184: f641 0334 movw r3, #6196 ; 0x1834 -10033188: 58e0 ldr r0, [r4, r3] -1003318a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1003318e: f241 73b0 movw r3, #6064 ; 0x17b0 -10033192: f844 7008 str.w r7, [r4, r8] -10033196: 4620 mov r0, r4 -10033198: 50e7 str r7, [r4, r3] -1003319a: f004 fc41 bl 10037a20 -1003319e: f241 63c8 movw r3, #5832 ; 0x16c8 -100331a2: 58e0 ldr r0, [r4, r3] -100331a4: b160 cbz r0, 100331c0 -100331a6: 2104 movs r1, #4 -100331a8: f7e4 f92f bl 1001740a -100331ac: e008 b.n 100331c0 -100331ae: 4620 mov r0, r4 -100331b0: f7ff fb46 bl 10032840 -100331b4: 4628 mov r0, r5 -100331b6: f008 fcaf bl 1003bb18 -100331ba: 2000 movs r0, #0 -100331bc: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -100331c0: 4630 mov r0, r6 -100331c2: f003 fc06 bl 100369d2 -100331c6: e7f5 b.n 100331b4 -100331c8: 4620 mov r0, r4 -100331ca: f641 0188 movw r1, #6280 ; 0x1888 -100331ce: f7e4 f91a bl 10017406 -100331d2: e7ef b.n 100331b4 -100331d4: 1004dd88 .word 0x1004dd88 -100331d8: 1003252f .word 0x1003252f -100331dc: 1003bc71 .word 0x1003bc71 - -100331e0 : -100331e0: b538 push {r3, r4, r5, lr} -100331e2: 6903 ldr r3, [r0, #16] -100331e4: 681c ldr r4, [r3, #0] -100331e6: 68a5 ldr r5, [r4, #8] -100331e8: 4628 mov r0, r5 -100331ea: f008 fca5 bl 1003bb38 -100331ee: 4620 mov r0, r4 -100331f0: 2100 movs r1, #0 -100331f2: f7f3 fa39 bl 10026668 -100331f6: 2100 movs r1, #0 -100331f8: 4620 mov r0, r4 -100331fa: f7f3 fa12 bl 10026622 -100331fe: 4620 mov r0, r4 -10033200: f7f3 f929 bl 10026456 -10033204: f641 035c movw r3, #6236 ; 0x185c -10033208: 58e0 ldr r0, [r4, r3] -1003320a: f7ff fdbd bl 10032d88 -1003320e: 4620 mov r0, r4 -10033210: f7ff fde5 bl 10032dde -10033214: 4620 mov r0, r4 -10033216: f7ff fb13 bl 10032840 -1003321a: 4628 mov r0, r5 -1003321c: f008 fc7c bl 1003bb18 -10033220: 2000 movs r0, #0 -10033222: bd38 pop {r3, r4, r5, pc} - -10033224 : -10033224: b510 push {r4, lr} -10033226: 4c09 ldr r4, [pc, #36] ; (1003324c ) -10033228: 1d20 adds r0, r4, #4 -1003322a: f7e4 f957 bl 100174dc -1003322e: f104 0008 add.w r0, r4, #8 -10033232: f7e4 f953 bl 100174dc -10033236: f104 000c add.w r0, r4, #12 -1003323a: f7e4 f94f bl 100174dc -1003323e: f104 0010 add.w r0, r4, #16 -10033242: f7e4 f94b bl 100174dc -10033246: 2301 movs r3, #1 -10033248: 6023 str r3, [r4, #0] -1003324a: bd10 pop {r4, pc} -1003324c: 1004dd84 .word 0x1004dd84 - -10033250 : -10033250: b510 push {r4, lr} -10033252: 4c0a ldr r4, [pc, #40] ; (1003327c ) -10033254: 2300 movs r3, #0 -10033256: 4620 mov r0, r4 -10033258: f840 3b04 str.w r3, [r0], #4 -1003325c: f7e4 f946 bl 100174ec -10033260: f104 0008 add.w r0, r4, #8 -10033264: f7e4 f942 bl 100174ec -10033268: f104 000c add.w r0, r4, #12 -1003326c: f7e4 f93e bl 100174ec -10033270: f104 0010 add.w r0, r4, #16 -10033274: e8bd 4010 ldmia.w sp!, {r4, lr} -10033278: f7e4 b938 b.w 100174ec -1003327c: 1004dd84 .word 0x1004dd84 - -10033280 : -10033280: 6903 ldr r3, [r0, #16] -10033282: 6810 ldr r0, [r2, #0] -10033284: 681b ldr r3, [r3, #0] -10033286: 7801 ldrb r1, [r0, #0] -10033288: 7840 ldrb r0, [r0, #1] -1003328a: f883 086d strb.w r0, [r3, #2157] ; 0x86d -1003328e: 6812 ldr r2, [r2, #0] -10033290: 7892 ldrb r2, [r2, #2] -10033292: f8a3 2870 strh.w r2, [r3, #2160] ; 0x870 -10033296: 2200 movs r2, #0 -10033298: f883 286e strb.w r2, [r3, #2158] ; 0x86e -1003329c: b119 cbz r1, 100332a6 -1003329e: 2201 movs r2, #1 -100332a0: f883 28f9 strb.w r2, [r3, #2297] ; 0x8f9 -100332a4: e001 b.n 100332aa -100332a6: f883 18f9 strb.w r1, [r3, #2297] ; 0x8f9 -100332aa: 2000 movs r0, #0 -100332ac: 4770 bx lr - -100332ae : -100332ae: 6902 ldr r2, [r0, #16] -100332b0: 2000 movs r0, #0 -100332b2: 6812 ldr r2, [r2, #0] -100332b4: f892 28f9 ldrb.w r2, [r2, #2297] ; 0x8f9 -100332b8: 701a strb r2, [r3, #0] -100332ba: 4770 bx lr - -100332bc : -100332bc: 6812 ldr r2, [r2, #0] -100332be: 6903 ldr r3, [r0, #16] -100332c0: f992 2000 ldrsb.w r2, [r2] -100332c4: 681b ldr r3, [r3, #0] -100332c6: 2a31 cmp r2, #49 ; 0x31 -100332c8: d101 bne.n 100332ce -100332ca: 2100 movs r1, #0 -100332cc: e002 b.n 100332d4 -100332ce: 2a30 cmp r2, #48 ; 0x30 -100332d0: d103 bne.n 100332da -100332d2: 2101 movs r1, #1 -100332d4: f241 72c9 movw r2, #6089 ; 0x17c9 -100332d8: 5499 strb r1, [r3, r2] -100332da: 2000 movs r0, #0 -100332dc: 4770 bx lr - -100332de : -100332de: 6812 ldr r2, [r2, #0] -100332e0: 6903 ldr r3, [r0, #16] -100332e2: f992 2000 ldrsb.w r2, [r2] -100332e6: 681b ldr r3, [r3, #0] -100332e8: 2a31 cmp r2, #49 ; 0x31 -100332ea: d101 bne.n 100332f0 -100332ec: 2200 movs r2, #0 -100332ee: e002 b.n 100332f6 -100332f0: 2a30 cmp r2, #48 ; 0x30 -100332f2: d102 bne.n 100332fa -100332f4: 2201 movs r2, #1 -100332f6: f883 2901 strb.w r2, [r3, #2305] ; 0x901 -100332fa: 2000 movs r0, #0 -100332fc: 4770 bx lr - -100332fe : -100332fe: 2000 movs r0, #0 -10033300: 4770 bx lr - ... - -10033304 : -10033304: 4a03 ldr r2, [pc, #12] ; (10033314 ) -10033306: f3c0 030a ubfx r3, r0, #0, #11 -1003330a: f3c0 3002 ubfx r0, r0, #12, #3 -1003330e: 5610 ldrsb r0, [r2, r0] -10033310: 4358 muls r0, r3 -10033312: 4770 bx lr -10033314: 100422e9 .word 0x100422e9 - -10033318 : -10033318: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -1003331c: 6903 ldr r3, [r0, #16] -1003331e: 4617 mov r7, r2 -10033320: 681c ldr r4, [r3, #0] -10033322: 6813 ldr r3, [r2, #0] -10033324: 781d ldrb r5, [r3, #0] -10033326: 2d01 cmp r5, #1 -10033328: d112 bne.n 10033350 -1003332a: f204 5024 addw r0, r4, #1316 ; 0x524 -1003332e: 7859 ldrb r1, [r3, #1] -10033330: aa01 add r2, sp, #4 -10033332: f7eb f96d bl 1001e610 -10033336: 2801 cmp r0, #1 -10033338: d10a bne.n 10033350 -1003333a: f884 5522 strb.w r5, [r4, #1314] ; 0x522 -1003333e: 683b ldr r3, [r7, #0] -10033340: 785b ldrb r3, [r3, #1] -10033342: f8c4 5528 str.w r5, [r4, #1320] ; 0x528 -10033346: f884 3524 strb.w r3, [r4, #1316] ; 0x524 -1003334a: 2300 movs r3, #0 -1003334c: f884 3530 strb.w r3, [r4, #1328] ; 0x530 -10033350: 2601 movs r6, #1 -10033352: f04f 0800 mov.w r8, #0 -10033356: 1e73 subs r3, r6, #1 -10033358: 42ab cmp r3, r5 -1003335a: da14 bge.n 10033386 -1003335c: 683b ldr r3, [r7, #0] -1003335e: f204 5024 addw r0, r4, #1316 ; 0x524 -10033362: 5d99 ldrb r1, [r3, r6] -10033364: aa01 add r2, sp, #4 -10033366: f7eb f953 bl 1001e610 -1003336a: 2801 cmp r0, #1 -1003336c: d109 bne.n 10033382 -1003336e: 683b ldr r3, [r7, #0] -10033370: 210c movs r1, #12 -10033372: 442b add r3, r5 -10033374: 5d9a ldrb r2, [r3, r6] -10033376: 9b01 ldr r3, [sp, #4] -10033378: 4680 mov r8, r0 -1003337a: fb01 4303 mla r3, r1, r3, r4 -1003337e: f883 252c strb.w r2, [r3, #1324] ; 0x52c -10033382: 3601 adds r6, #1 -10033384: e7e7 b.n 10033356 -10033386: f1b8 0f00 cmp.w r8, #0 -1003338a: d004 beq.n 10033396 -1003338c: 2301 movs r3, #1 -1003338e: f884 38fa strb.w r3, [r4, #2298] ; 0x8fa -10033392: 2000 movs r0, #0 -10033394: e001 b.n 1003339a -10033396: f06f 0015 mvn.w r0, #21 -1003339a: b002 add sp, #8 -1003339c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -100333a0 : -100333a0: b5f8 push {r3, r4, r5, r6, r7, lr} -100333a2: 6903 ldr r3, [r0, #16] -100333a4: 681c ldr r4, [r3, #0] -100333a6: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc -100333aa: b373 cbz r3, 1003340a -100333ac: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 -100333b0: b35b cbz r3, 1003340a -100333b2: 2600 movs r6, #0 -100333b4: 4635 mov r5, r6 -100333b6: f894 1900 ldrb.w r1, [r4, #2304] ; 0x900 -100333ba: 428d cmp r5, r1 -100333bc: da12 bge.n 100333e4 -100333be: f8d4 28fc ldr.w r2, [r4, #2300] ; 0x8fc -100333c2: 00ef lsls r7, r5, #3 -100333c4: f852 0035 ldr.w r0, [r2, r5, lsl #3] -100333c8: 3501 adds r5, #1 -100333ca: 7841 ldrb r1, [r0, #1] -100333cc: 3102 adds r1, #2 -100333ce: f7e4 f81c bl 1001740a -100333d2: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc -100333d6: 443b add r3, r7 -100333d8: 791b ldrb r3, [r3, #4] -100333da: f013 0f04 tst.w r3, #4 -100333de: bf18 it ne -100333e0: 2601 movne r6, #1 -100333e2: e7e8 b.n 100333b6 -100333e4: 2500 movs r5, #0 -100333e6: f8d4 08fc ldr.w r0, [r4, #2300] ; 0x8fc -100333ea: 00c9 lsls r1, r1, #3 -100333ec: f7e4 f80d bl 1001740a -100333f0: f8c4 58fc str.w r5, [r4, #2300] ; 0x8fc -100333f4: f884 5900 strb.w r5, [r4, #2304] ; 0x900 -100333f8: b156 cbz r6, 10033410 -100333fa: 4620 mov r0, r4 -100333fc: 4629 mov r1, r5 -100333fe: 462a mov r2, r5 -10033400: 2301 movs r3, #1 -10033402: f7e7 fe01 bl 1001b008 -10033406: 4628 mov r0, r5 -10033408: bdf8 pop {r3, r4, r5, r6, r7, pc} -1003340a: f04f 30ff mov.w r0, #4294967295 -1003340e: bdf8 pop {r3, r4, r5, r6, r7, pc} -10033410: 4630 mov r0, r6 -10033412: bdf8 pop {r3, r4, r5, r6, r7, pc} - -10033414 : -10033414: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10033418: 6903 ldr r3, [r0, #16] -1003341a: 681c ldr r4, [r3, #0] -1003341c: 6813 ldr r3, [r2, #0] -1003341e: f894 2900 ldrb.w r2, [r4, #2304] ; 0x900 -10033422: 791d ldrb r5, [r3, #4] -10033424: 681e ldr r6, [r3, #0] -10033426: 42aa cmp r2, r5 -10033428: d338 bcc.n 1003349c -1003342a: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc -1003342e: f105 5500 add.w r5, r5, #536870912 ; 0x20000000 -10033432: 3d01 subs r5, #1 -10033434: 6831 ldr r1, [r6, #0] -10033436: f853 0035 ldr.w r0, [r3, r5, lsl #3] -1003343a: 784a ldrb r2, [r1, #1] -1003343c: 7843 ldrb r3, [r0, #1] -1003343e: 00ef lsls r7, r5, #3 -10033440: 429a cmp r2, r3 -10033442: d011 beq.n 10033468 -10033444: 1c99 adds r1, r3, #2 -10033446: f7e3 ffe0 bl 1001740a -1003344a: 6833 ldr r3, [r6, #0] -1003344c: f8d4 88fc ldr.w r8, [r4, #2300] ; 0x8fc -10033450: 7858 ldrb r0, [r3, #1] -10033452: 3002 adds r0, #2 -10033454: f7e4 f99c bl 10017790 -10033458: f848 0035 str.w r0, [r8, r5, lsl #3] -1003345c: 6831 ldr r1, [r6, #0] -1003345e: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc -10033462: 784a ldrb r2, [r1, #1] -10033464: f853 0035 ldr.w r0, [r3, r5, lsl #3] -10033468: 3202 adds r2, #2 -1003346a: f7e7 fba1 bl 1001abb0 -1003346e: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc -10033472: 7932 ldrb r2, [r6, #4] -10033474: 443b add r3, r7 -10033476: 711a strb r2, [r3, #4] -10033478: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc -1003347c: 441f add r7, r3 -1003347e: 793b ldrb r3, [r7, #4] -10033480: f003 0304 and.w r3, r3, #4 -10033484: f003 00ff and.w r0, r3, #255 ; 0xff -10033488: b153 cbz r3, 100334a0 -1003348a: 2100 movs r1, #0 -1003348c: 4620 mov r0, r4 -1003348e: 460a mov r2, r1 -10033490: 2301 movs r3, #1 -10033492: f7e7 fdb9 bl 1001b008 -10033496: 2000 movs r0, #0 -10033498: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1003349c: f04f 30ff mov.w r0, #4294967295 -100334a0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -100334a4 : -100334a4: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -100334a8: 6903 ldr r3, [r0, #16] -100334aa: 681c ldr r4, [r3, #0] -100334ac: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc -100334b0: 2b00 cmp r3, #0 -100334b2: d149 bne.n 10033548 -100334b4: f894 7900 ldrb.w r7, [r4, #2304] ; 0x900 -100334b8: 2f00 cmp r7, #0 -100334ba: d145 bne.n 10033548 -100334bc: 6813 ldr r3, [r2, #0] -100334be: 681e ldr r6, [r3, #0] -100334c0: 2e00 cmp r6, #0 -100334c2: d03e beq.n 10033542 -100334c4: 6858 ldr r0, [r3, #4] -100334c6: 463d mov r5, r7 -100334c8: f884 0900 strb.w r0, [r4, #2304] ; 0x900 -100334cc: b2c0 uxtb r0, r0 -100334ce: 00c0 lsls r0, r0, #3 -100334d0: f7e4 f95e bl 10017790 -100334d4: f894 2900 ldrb.w r2, [r4, #2304] ; 0x900 -100334d8: f8c4 08fc str.w r0, [r4, #2300] ; 0x8fc -100334dc: 4639 mov r1, r7 -100334de: 00d2 lsls r2, r2, #3 -100334e0: f7e7 fb6a bl 1001abb8 -100334e4: f894 3900 ldrb.w r3, [r4, #2304] ; 0x900 -100334e8: 429d cmp r5, r3 -100334ea: da23 bge.n 10033534 -100334ec: 6833 ldr r3, [r6, #0] -100334ee: f8d4 98fc ldr.w r9, [r4, #2300] ; 0x8fc -100334f2: 7858 ldrb r0, [r3, #1] -100334f4: ea4f 08c5 mov.w r8, r5, lsl #3 -100334f8: 3002 adds r0, #2 -100334fa: f7e4 f949 bl 10017790 -100334fe: f849 0035 str.w r0, [r9, r5, lsl #3] -10033502: 6831 ldr r1, [r6, #0] -10033504: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc -10033508: 784a ldrb r2, [r1, #1] -1003350a: f853 0035 ldr.w r0, [r3, r5, lsl #3] -1003350e: 3202 adds r2, #2 -10033510: f7e7 fb4e bl 1001abb0 -10033514: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc -10033518: 7932 ldrb r2, [r6, #4] -1003351a: 4443 add r3, r8 -1003351c: 711a strb r2, [r3, #4] -1003351e: f8d4 38fc ldr.w r3, [r4, #2300] ; 0x8fc -10033522: 3501 adds r5, #1 -10033524: 4443 add r3, r8 -10033526: 791b ldrb r3, [r3, #4] -10033528: 3608 adds r6, #8 -1003352a: f013 0f04 tst.w r3, #4 -1003352e: bf18 it ne -10033530: 2701 movne r7, #1 -10033532: e7d7 b.n 100334e4 -10033534: b12f cbz r7, 10033542 -10033536: 2100 movs r1, #0 -10033538: 4620 mov r0, r4 -1003353a: 460a mov r2, r1 -1003353c: 2301 movs r3, #1 -1003353e: f7e7 fd63 bl 1001b008 -10033542: 2000 movs r0, #0 -10033544: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -10033548: f04f 30ff mov.w r0, #4294967295 -1003354c: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - -10033550 : -10033550: b508 push {r3, lr} -10033552: 6903 ldr r3, [r0, #16] -10033554: f44f 61a1 mov.w r1, #1288 ; 0x508 -10033558: 6818 ldr r0, [r3, #0] -1003355a: 6813 ldr r3, [r2, #0] -1003355c: 681a ldr r2, [r3, #0] -1003355e: f241 63c8 movw r3, #5832 ; 0x16c8 -10033562: 58c3 ldr r3, [r0, r3] -10033564: f8c3 2180 str.w r2, [r3, #384] ; 0x180 -10033568: f004 fbaa bl 10037cc0 -1003356c: 2000 movs r0, #0 -1003356e: bd08 pop {r3, pc} - -10033570 : -10033570: b538 push {r3, r4, r5, lr} -10033572: 461c mov r4, r3 -10033574: 6903 ldr r3, [r0, #16] -10033576: f640 6108 movw r1, #3592 ; 0xe08 -1003357a: 681d ldr r5, [r3, #0] -1003357c: f44f 427f mov.w r2, #65280 ; 0xff00 -10033580: 4628 mov r0, r5 -10033582: f7ff f864 bl 1003264e -10033586: f640 016c movw r1, #2156 ; 0x86c -1003358a: 7020 strb r0, [r4, #0] -1003358c: f44f 427f mov.w r2, #65280 ; 0xff00 -10033590: 4628 mov r0, r5 -10033592: f7ff f85c bl 1003264e -10033596: f640 016c movw r1, #2156 ; 0x86c -1003359a: 7060 strb r0, [r4, #1] -1003359c: f44f 027f mov.w r2, #16711680 ; 0xff0000 -100335a0: 4628 mov r0, r5 -100335a2: f7ff f854 bl 1003264e -100335a6: f640 016c movw r1, #2156 ; 0x86c -100335aa: 70a0 strb r0, [r4, #2] -100335ac: f04f 427f mov.w r2, #4278190080 ; 0xff000000 -100335b0: 4628 mov r0, r5 -100335b2: f7ff f84c bl 1003264e -100335b6: f44f 6160 mov.w r1, #3584 ; 0xe00 -100335ba: 70e0 strb r0, [r4, #3] -100335bc: 22ff movs r2, #255 ; 0xff -100335be: 4628 mov r0, r5 -100335c0: f7ff f845 bl 1003264e -100335c4: f44f 6160 mov.w r1, #3584 ; 0xe00 -100335c8: 7120 strb r0, [r4, #4] -100335ca: f44f 427f mov.w r2, #65280 ; 0xff00 -100335ce: 4628 mov r0, r5 -100335d0: f7ff f83d bl 1003264e -100335d4: f44f 6160 mov.w r1, #3584 ; 0xe00 -100335d8: 7160 strb r0, [r4, #5] -100335da: f44f 027f mov.w r2, #16711680 ; 0xff0000 -100335de: 4628 mov r0, r5 -100335e0: f7ff f835 bl 1003264e -100335e4: f44f 6160 mov.w r1, #3584 ; 0xe00 -100335e8: 71a0 strb r0, [r4, #6] -100335ea: f04f 427f mov.w r2, #4278190080 ; 0xff000000 -100335ee: 4628 mov r0, r5 -100335f0: f7ff f82d bl 1003264e -100335f4: f640 6104 movw r1, #3588 ; 0xe04 -100335f8: 71e0 strb r0, [r4, #7] -100335fa: 22ff movs r2, #255 ; 0xff -100335fc: 4628 mov r0, r5 -100335fe: f7ff f826 bl 1003264e -10033602: f640 6104 movw r1, #3588 ; 0xe04 -10033606: 7220 strb r0, [r4, #8] -10033608: f44f 427f mov.w r2, #65280 ; 0xff00 -1003360c: 4628 mov r0, r5 -1003360e: f7ff f81e bl 1003264e -10033612: f640 6104 movw r1, #3588 ; 0xe04 -10033616: 7260 strb r0, [r4, #9] -10033618: f44f 027f mov.w r2, #16711680 ; 0xff0000 -1003361c: 4628 mov r0, r5 -1003361e: f7ff f816 bl 1003264e -10033622: f640 6104 movw r1, #3588 ; 0xe04 -10033626: 72a0 strb r0, [r4, #10] -10033628: f04f 427f mov.w r2, #4278190080 ; 0xff000000 -1003362c: 4628 mov r0, r5 -1003362e: f7ff f80e bl 1003264e -10033632: f44f 6161 mov.w r1, #3600 ; 0xe10 -10033636: 72e0 strb r0, [r4, #11] -10033638: 22ff movs r2, #255 ; 0xff -1003363a: 4628 mov r0, r5 -1003363c: f7ff f807 bl 1003264e -10033640: f44f 6161 mov.w r1, #3600 ; 0xe10 -10033644: 7320 strb r0, [r4, #12] -10033646: f44f 427f mov.w r2, #65280 ; 0xff00 -1003364a: 4628 mov r0, r5 -1003364c: f7fe ffff bl 1003264e -10033650: f44f 6161 mov.w r1, #3600 ; 0xe10 -10033654: 7360 strb r0, [r4, #13] -10033656: f44f 027f mov.w r2, #16711680 ; 0xff0000 -1003365a: 4628 mov r0, r5 -1003365c: f7fe fff7 bl 1003264e -10033660: f44f 6161 mov.w r1, #3600 ; 0xe10 -10033664: 73a0 strb r0, [r4, #14] -10033666: f04f 427f mov.w r2, #4278190080 ; 0xff000000 -1003366a: 4628 mov r0, r5 -1003366c: f7fe ffef bl 1003264e -10033670: f640 6114 movw r1, #3604 ; 0xe14 -10033674: 73e0 strb r0, [r4, #15] -10033676: 22ff movs r2, #255 ; 0xff -10033678: 4628 mov r0, r5 -1003367a: f7fe ffe8 bl 1003264e -1003367e: f640 6114 movw r1, #3604 ; 0xe14 -10033682: 7420 strb r0, [r4, #16] -10033684: f44f 427f mov.w r2, #65280 ; 0xff00 -10033688: 4628 mov r0, r5 -1003368a: f7fe ffe0 bl 1003264e -1003368e: f640 6114 movw r1, #3604 ; 0xe14 -10033692: 7460 strb r0, [r4, #17] -10033694: f44f 027f mov.w r2, #16711680 ; 0xff0000 -10033698: 4628 mov r0, r5 -1003369a: f7fe ffd8 bl 1003264e -1003369e: f640 6114 movw r1, #3604 ; 0xe14 -100336a2: 74a0 strb r0, [r4, #18] -100336a4: f04f 427f mov.w r2, #4278190080 ; 0xff000000 -100336a8: 4628 mov r0, r5 -100336aa: f7fe ffd0 bl 1003264e -100336ae: 74e0 strb r0, [r4, #19] -100336b0: 2000 movs r0, #0 -100336b2: bd38 pop {r3, r4, r5, pc} - -100336b4 : -100336b4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -100336b8: 6903 ldr r3, [r0, #16] -100336ba: 8897 ldrh r7, [r2, #4] -100336bc: 681e ldr r6, [r3, #0] -100336be: 6815 ldr r5, [r2, #0] -100336c0: 2400 movs r4, #0 -100336c2: 4623 mov r3, r4 -100336c4: 42bb cmp r3, r7 -100336c6: d214 bcs.n 100336f2 -100336c8: 5ce9 ldrb r1, [r5, r3] -100336ca: 1c5a adds r2, r3, #1 -100336cc: 2903 cmp r1, #3 -100336ce: b292 uxth r2, r2 -100336d0: d001 beq.n 100336d6 -100336d2: 4613 mov r3, r2 -100336d4: e7f6 b.n 100336c4 -100336d6: 5caa ldrb r2, [r5, r2] -100336d8: 1c9c adds r4, r3, #2 -100336da: 2a01 cmp r2, #1 -100336dc: b2a4 uxth r4, r4 -100336de: d1f0 bne.n 100336c2 -100336e0: 3303 adds r3, #3 -100336e2: 4630 mov r0, r6 -100336e4: fa1f f883 uxth.w r8, r3 -100336e8: f7f2 fff4 bl 100266d4 -100336ec: 5528 strb r0, [r5, r4] -100336ee: 4644 mov r4, r8 -100336f0: e7e7 b.n 100336c2 -100336f2: 2000 movs r0, #0 -100336f4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -100336f8 : -100336f8: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -100336fc: 6903 ldr r3, [r0, #16] -100336fe: f8b2 8004 ldrh.w r8, [r2, #4] -10033702: 681f ldr r7, [r3, #0] -10033704: 6815 ldr r5, [r2, #0] -10033706: 2400 movs r4, #0 -10033708: 4544 cmp r4, r8 -1003370a: d24a bcs.n 100337a2 -1003370c: 5d2a ldrb r2, [r5, r4] -1003370e: 1c63 adds r3, r4, #1 -10033710: b29b uxth r3, r3 -10033712: 2a03 cmp r2, #3 -10033714: d803 bhi.n 1003371e -10033716: e8df f002 tbb [pc, r2] -1003371a: 1004 .short 0x1004 -1003371c: 3620 .short 0x3620 -1003371e: 461c mov r4, r3 -10033720: e7f2 b.n 10033708 -10033722: 5ceb ldrb r3, [r5, r3] -10033724: 1ca6 adds r6, r4, #2 -10033726: 2b01 cmp r3, #1 -10033728: b2b6 uxth r6, r6 -1003372a: d138 bne.n 1003379e -1003372c: 3403 adds r4, #3 -1003372e: 4638 mov r0, r7 -10033730: 5da9 ldrb r1, [r5, r6] -10033732: b2a4 uxth r4, r4 -10033734: f7f2 ff98 bl 10026668 -10033738: e030 b.n 1003379c -1003373a: 5ceb ldrb r3, [r5, r3] -1003373c: 1ca6 adds r6, r4, #2 -1003373e: 2b01 cmp r3, #1 -10033740: b2b6 uxth r6, r6 -10033742: d12c bne.n 1003379e -10033744: 5dae ldrb r6, [r5, r6] -10033746: 4638 mov r0, r7 -10033748: f7f2 fe85 bl 10026456 -1003374c: 3403 adds r4, #3 -1003374e: 4638 mov r0, r7 -10033750: 4631 mov r1, r6 -10033752: b2a4 uxth r4, r4 -10033754: f7f2 ff65 bl 10026622 -10033758: e020 b.n 1003379c -1003375a: 5ceb ldrb r3, [r5, r3] -1003375c: 1ca6 adds r6, r4, #2 -1003375e: 2b04 cmp r3, #4 -10033760: b2b6 uxth r6, r6 -10033762: d11c bne.n 1003379e -10033764: 1ce3 adds r3, r4, #3 -10033766: b29b uxth r3, r3 -10033768: 5da9 ldrb r1, [r5, r6] -1003376a: 5cea ldrb r2, [r5, r3] -1003376c: 1da6 adds r6, r4, #6 -1003376e: 1d23 adds r3, r4, #4 -10033770: 3405 adds r4, #5 -10033772: b2a4 uxth r4, r4 -10033774: 5d28 ldrb r0, [r5, r4] -10033776: b29b uxth r3, r3 -10033778: 5ceb ldrb r3, [r5, r3] -1003377a: 9000 str r0, [sp, #0] -1003377c: 4638 mov r0, r7 -1003377e: b2b6 uxth r6, r6 -10033780: f7f2 ff94 bl 100266ac -10033784: e00b b.n 1003379e -10033786: 5ceb ldrb r3, [r5, r3] -10033788: 1ca6 adds r6, r4, #2 -1003378a: 2b01 cmp r3, #1 -1003378c: b2b6 uxth r6, r6 -1003378e: d106 bne.n 1003379e -10033790: 3403 adds r4, #3 -10033792: 4638 mov r0, r7 -10033794: 5da9 ldrb r1, [r5, r6] -10033796: b2a4 uxth r4, r4 -10033798: f7f2 ff96 bl 100266c8 -1003379c: 4626 mov r6, r4 -1003379e: 4634 mov r4, r6 -100337a0: e7b2 b.n 10033708 -100337a2: 2000 movs r0, #0 -100337a4: b002 add sp, #8 -100337a6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - ... - -100337ac : -100337ac: b5f0 push {r4, r5, r6, r7, lr} -100337ae: 461c mov r4, r3 -100337b0: 6903 ldr r3, [r0, #16] -100337b2: b091 sub sp, #68 ; 0x44 -100337b4: 4620 mov r0, r4 -100337b6: 4937 ldr r1, [pc, #220] ; (10033894 ) -100337b8: 2212 movs r2, #18 -100337ba: 681d ldr r5, [r3, #0] -100337bc: f7e3 fe30 bl 10017420 -100337c0: b170 cbz r0, 100337e0 -100337c2: aa08 add r2, sp, #32 -100337c4: f104 0012 add.w r0, r4, #18 -100337c8: 4933 ldr r1, [pc, #204] ; (10033898 ) -100337ca: ab0a add r3, sp, #40 ; 0x28 -100337cc: f00a fadc bl 1003dd88 -100337d0: 4628 mov r0, r5 -100337d2: f89d 1020 ldrb.w r1, [sp, #32] -100337d6: f89d 2028 ldrb.w r2, [sp, #40] ; 0x28 -100337da: f7ef ff47 bl 1002366c -100337de: e055 b.n 1003388c -100337e0: 4620 mov r0, r4 -100337e2: 492e ldr r1, [pc, #184] ; (1003389c ) -100337e4: 2218 movs r2, #24 -100337e6: f7e3 fe1b bl 10017420 -100337ea: 4606 mov r6, r0 -100337ec: b118 cbz r0, 100337f6 -100337ee: 4628 mov r0, r5 -100337f0: f7ef ff77 bl 100236e2 -100337f4: e04a b.n 1003388c -100337f6: 4620 mov r0, r4 -100337f8: 4929 ldr r1, [pc, #164] ; (100338a0 ) -100337fa: 2213 movs r2, #19 -100337fc: f7e3 fe10 bl 10017420 -10033800: 4607 mov r7, r0 -10033802: b1f8 cbz r0, 10033844 -10033804: ab0b add r3, sp, #44 ; 0x2c -10033806: 9300 str r3, [sp, #0] -10033808: ab0c add r3, sp, #48 ; 0x30 -1003380a: 9301 str r3, [sp, #4] -1003380c: ab0d add r3, sp, #52 ; 0x34 -1003380e: 9302 str r3, [sp, #8] -10033810: ab0e add r3, sp, #56 ; 0x38 -10033812: 9303 str r3, [sp, #12] -10033814: af0a add r7, sp, #40 ; 0x28 -10033816: ab0f add r3, sp, #60 ; 0x3c -10033818: 9304 str r3, [sp, #16] -1003381a: f104 0013 add.w r0, r4, #19 -1003381e: 4921 ldr r1, [pc, #132] ; (100338a4 ) -10033820: aa07 add r2, sp, #28 -10033822: 463b mov r3, r7 -10033824: f00a fab0 bl 1003dd88 -10033828: 4630 mov r0, r6 -1003382a: f857 3020 ldr.w r3, [r7, r0, lsl #2] -1003382e: aa08 add r2, sp, #32 -10033830: 5483 strb r3, [r0, r2] -10033832: 3001 adds r0, #1 -10033834: 2806 cmp r0, #6 -10033836: d1f8 bne.n 1003382a -10033838: 4628 mov r0, r5 -1003383a: f89d 101c ldrb.w r1, [sp, #28] -1003383e: f7ef ff64 bl 1002370a -10033842: e023 b.n 1003388c -10033844: 4620 mov r0, r4 -10033846: 4918 ldr r1, [pc, #96] ; (100338a8 ) -10033848: 2205 movs r2, #5 -1003384a: f7e3 fde9 bl 10017420 -1003384e: 4606 mov r6, r0 -10033850: b158 cbz r0, 1003386a -10033852: aa10 add r2, sp, #64 ; 0x40 -10033854: f842 7d18 str.w r7, [r2, #-24]! -10033858: 4620 mov r0, r4 -1003385a: 4914 ldr r1, [pc, #80] ; (100338ac ) -1003385c: f00a fa94 bl 1003dd88 -10033860: 4628 mov r0, r5 -10033862: 990a ldr r1, [sp, #40] ; 0x28 -10033864: f7ef ff61 bl 1002372a -10033868: e010 b.n 1003388c -1003386a: 4620 mov r0, r4 -1003386c: 4910 ldr r1, [pc, #64] ; (100338b0 ) -1003386e: 2206 movs r2, #6 -10033870: f7e3 fdd6 bl 10017420 -10033874: b150 cbz r0, 1003388c -10033876: aa10 add r2, sp, #64 ; 0x40 -10033878: 490e ldr r1, [pc, #56] ; (100338b4 ) -1003387a: f842 6d18 str.w r6, [r2, #-24]! -1003387e: 4620 mov r0, r4 -10033880: f00a fa82 bl 1003dd88 -10033884: 4628 mov r0, r5 -10033886: 990a ldr r1, [sp, #40] ; 0x28 -10033888: f7ef ff53 bl 10023732 -1003388c: 2000 movs r0, #0 -1003388e: b011 add sp, #68 ; 0x44 -10033890: bdf0 pop {r4, r5, r6, r7, pc} -10033892: bf00 nop -10033894: 10041fec .word 0x10041fec -10033898: 10041fff .word 0x10041fff -1003389c: 1004200a .word 0x1004200a -100338a0: 10042023 .word 0x10042023 -100338a4: 10042037 .word 0x10042037 -100338a8: 10042053 .word 0x10042053 -100338ac: 10042059 .word 0x10042059 -100338b0: 10042061 .word 0x10042061 -100338b4: 10042068 .word 0x10042068 - -100338b8 : -100338b8: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -100338bc: 8894 ldrh r4, [r2, #4] -100338be: 461e mov r6, r3 -100338c0: 6903 ldr r3, [r0, #16] -100338c2: 4620 mov r0, r4 -100338c4: 4690 mov r8, r2 -100338c6: 681f ldr r7, [r3, #0] -100338c8: f7e3 ff62 bl 10017790 -100338cc: 4605 mov r5, r0 -100338ce: 2800 cmp r0, #0 -100338d0: d03a beq.n 10033948 -100338d2: f8d8 1000 ldr.w r1, [r8] -100338d6: 4622 mov r2, r4 -100338d8: f7e3 fd9a bl 10017410 -100338dc: 2300 movs r3, #0 -100338de: 9301 str r3, [sp, #4] -100338e0: 9300 str r3, [sp, #0] -100338e2: 4628 mov r0, r5 -100338e4: 466b mov r3, sp -100338e6: 491b ldr r1, [pc, #108] ; (10033954 ) -100338e8: aa01 add r2, sp, #4 -100338ea: f00a fa4d bl 1003dd88 -100338ee: 9b01 ldr r3, [sp, #4] -100338f0: 2b02 cmp r3, #2 -100338f2: d00b beq.n 1003390c -100338f4: 2b04 cmp r3, #4 -100338f6: d011 beq.n 1003391c -100338f8: 2b01 cmp r3, #1 -100338fa: d11e bne.n 1003393a -100338fc: 9900 ldr r1, [sp, #0] -100338fe: 4638 mov r0, r7 -10033900: f004 f9bb bl 10037c7a -10033904: 4914 ldr r1, [pc, #80] ; (10033958 ) -10033906: 4602 mov r2, r0 -10033908: 4630 mov r0, r6 -1003390a: e00e b.n 1003392a -1003390c: 9900 ldr r1, [sp, #0] -1003390e: 4638 mov r0, r7 -10033910: f004 f9ba bl 10037c88 -10033914: 4911 ldr r1, [pc, #68] ; (1003395c ) -10033916: 4602 mov r2, r0 -10033918: 4630 mov r0, r6 -1003391a: e006 b.n 1003392a -1003391c: 9900 ldr r1, [sp, #0] -1003391e: 4638 mov r0, r7 -10033920: f004 f9b9 bl 10037c96 -10033924: 490e ldr r1, [pc, #56] ; (10033960 ) -10033926: 4602 mov r2, r0 -10033928: 4630 mov r0, r6 -1003392a: f7e7 f8f3 bl 1001ab14 -1003392e: 4628 mov r0, r5 -10033930: 4621 mov r1, r4 -10033932: f7e3 fd6a bl 1001740a -10033936: 2000 movs r0, #0 -10033938: e008 b.n 1003394c -1003393a: 4628 mov r0, r5 -1003393c: 4621 mov r1, r4 -1003393e: f7e3 fd64 bl 1001740a -10033942: f06f 0015 mvn.w r0, #21 -10033946: e001 b.n 1003394c -10033948: f06f 000b mvn.w r0, #11 -1003394c: b002 add sp, #8 -1003394e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10033952: bf00 nop -10033954: 10042071 .word 0x10042071 -10033958: 10042077 .word 0x10042077 -1003395c: 1004207e .word 0x1004207e -10033960: 10042085 .word 0x10042085 - -10033964 : -10033964: b530 push {r4, r5, lr} -10033966: 6902 ldr r2, [r0, #16] -10033968: b087 sub sp, #28 -1003396a: 6815 ldr r5, [r2, #0] -1003396c: aa04 add r2, sp, #16 -1003396e: 2400 movs r4, #0 -10033970: 9200 str r2, [sp, #0] -10033972: 4618 mov r0, r3 -10033974: 4913 ldr r1, [pc, #76] ; (100339c4 ) -10033976: ab03 add r3, sp, #12 -10033978: aa05 add r2, sp, #20 -1003397a: 9405 str r4, [sp, #20] -1003397c: 9403 str r4, [sp, #12] -1003397e: 9404 str r4, [sp, #16] -10033980: f00a fa02 bl 1003dd88 -10033984: 9b05 ldr r3, [sp, #20] -10033986: 2b02 cmp r3, #2 -10033988: d00a beq.n 100339a0 -1003398a: 2b04 cmp r3, #4 -1003398c: d010 beq.n 100339b0 -1003398e: 2b01 cmp r3, #1 -10033990: d114 bne.n 100339bc -10033992: 4628 mov r0, r5 -10033994: 9903 ldr r1, [sp, #12] -10033996: f89d 2010 ldrb.w r2, [sp, #16] -1003399a: f004 f983 bl 10037ca4 -1003399e: e005 b.n 100339ac -100339a0: 4628 mov r0, r5 -100339a2: 9903 ldr r1, [sp, #12] -100339a4: f8bd 2010 ldrh.w r2, [sp, #16] -100339a8: f004 f983 bl 10037cb2 -100339ac: 4620 mov r0, r4 -100339ae: e007 b.n 100339c0 -100339b0: 4628 mov r0, r5 -100339b2: 9903 ldr r1, [sp, #12] -100339b4: 9a04 ldr r2, [sp, #16] -100339b6: f004 f983 bl 10037cc0 -100339ba: e7f7 b.n 100339ac -100339bc: f06f 0015 mvn.w r0, #21 -100339c0: b007 add sp, #28 -100339c2: bd30 pop {r4, r5, pc} -100339c4: 1004208c .word 0x1004208c - -100339c8 : -100339c8: b538 push {r3, r4, r5, lr} -100339ca: 6804 ldr r4, [r0, #0] -100339cc: f641 0369 movw r3, #6249 ; 0x1869 -100339d0: 5ce3 ldrb r3, [r4, r3] -100339d2: 460d mov r5, r1 -100339d4: b153 cbz r3, 100339ec -100339d6: 4620 mov r0, r4 -100339d8: f44f 6100 mov.w r1, #2048 ; 0x800 -100339dc: f7ea fdc6 bl 1001e56c -100339e0: 2801 cmp r0, #1 -100339e2: d103 bne.n 100339ec -100339e4: f44f 707a mov.w r0, #1000 ; 0x3e8 -100339e8: f7e3 fe34 bl 10017654 -100339ec: f641 0369 movw r3, #6249 ; 0x1869 -100339f0: 5ce3 ldrb r3, [r4, r3] -100339f2: b1ab cbz r3, 10033a20 -100339f4: 4620 mov r0, r4 -100339f6: 2181 movs r1, #129 ; 0x81 -100339f8: f7ea fdb8 bl 1001e56c -100339fc: 2801 cmp r0, #1 -100339fe: d10f bne.n 10033a20 -10033a00: f641 035c movw r3, #6236 ; 0x185c -10033a04: 58e3 ldr r3, [r4, r3] -10033a06: f893 251e ldrb.w r2, [r3, #1310] ; 0x51e -10033a0a: f884 251e strb.w r2, [r4, #1310] ; 0x51e -10033a0e: f893 2520 ldrb.w r2, [r3, #1312] ; 0x520 -10033a12: f893 351f ldrb.w r3, [r3, #1311] ; 0x51f -10033a16: f884 2520 strb.w r2, [r4, #1312] ; 0x520 -10033a1a: f884 351f strb.w r3, [r4, #1311] ; 0x51f -10033a1e: e022 b.n 10033a66 -10033a20: f204 5024 addw r0, r4, #1316 ; 0x524 -10033a24: 4629 mov r1, r5 -10033a26: 2200 movs r2, #0 -10033a28: f7ea fdf2 bl 1001e610 -10033a2c: 2801 cmp r0, #1 -10033a2e: d11c bne.n 10033a6a -10033a30: f894 351f ldrb.w r3, [r4, #1311] ; 0x51f -10033a34: f884 551e strb.w r5, [r4, #1310] ; 0x51e -10033a38: 2b01 cmp r3, #1 -10033a3a: d10e bne.n 10033a5a -10033a3c: f1a5 020a sub.w r2, r5, #10 -10033a40: 2a03 cmp r2, #3 -10033a42: d803 bhi.n 10033a4c -10033a44: 4620 mov r0, r4 -10033a46: 4629 mov r1, r5 -10033a48: 2202 movs r2, #2 -10033a4a: e00a b.n 10033a62 -10033a4c: 1e6a subs r2, r5, #1 -10033a4e: 2a03 cmp r2, #3 -10033a50: 4620 mov r0, r4 -10033a52: 4629 mov r1, r5 -10033a54: d803 bhi.n 10033a5e -10033a56: 461a mov r2, r3 -10033a58: e003 b.n 10033a62 -10033a5a: 4620 mov r0, r4 -10033a5c: 4629 mov r1, r5 -10033a5e: f890 2520 ldrb.w r2, [r0, #1312] ; 0x520 -10033a62: f7f4 fe4b bl 100286fc -10033a66: 2000 movs r0, #0 -10033a68: bd38 pop {r3, r4, r5, pc} -10033a6a: f06f 0015 mvn.w r0, #21 -10033a6e: bd38 pop {r3, r4, r5, pc} - -10033a70 : -10033a70: b5f0 push {r4, r5, r6, r7, lr} -10033a72: 461d mov r5, r3 -10033a74: 6903 ldr r3, [r0, #16] -10033a76: b085 sub sp, #20 -10033a78: 681e ldr r6, [r3, #0] -10033a7a: 88d4 ldrh r4, [r2, #6] -10033a7c: 2e00 cmp r6, #0 -10033a7e: d047 beq.n 10033b10 -10033a80: b91d cbnz r5, 10033a8a -10033a82: 8095 strh r5, [r2, #4] -10033a84: f06f 0004 mvn.w r0, #4 -10033a88: e046 b.n 10033b18 -10033a8a: b114 cbz r4, 10033a92 -10033a8c: 2c01 cmp r4, #1 -10033a8e: d029 beq.n 10033ae4 -10033a90: e041 b.n 10033b16 -10033a92: 4628 mov r0, r5 -10033a94: f7e7 f8a0 bl 1001abd8 -10033a98: 280c cmp r0, #12 -10033a9a: d001 beq.n 10033aa0 -10033a9c: 481f ldr r0, [pc, #124] ; (10033b1c ) -10033a9e: e032 b.n 10033b06 -10033aa0: 7828 ldrb r0, [r5, #0] -10033aa2: 7869 ldrb r1, [r5, #1] -10033aa4: f00a ff68 bl 1003e978 <__key_2char2num_veneer> -10033aa8: af02 add r7, sp, #8 -10033aaa: 5538 strb r0, [r7, r4] -10033aac: 3401 adds r4, #1 -10033aae: 2c06 cmp r4, #6 -10033ab0: f105 0502 add.w r5, r5, #2 -10033ab4: d1f4 bne.n 10033aa0 -10033ab6: 2500 movs r5, #0 -10033ab8: 9500 str r5, [sp, #0] -10033aba: 4630 mov r0, r6 -10033abc: f44f 718d mov.w r1, #282 ; 0x11a -10033ac0: 4622 mov r2, r4 -10033ac2: 463b mov r3, r7 -10033ac4: f7f9 fd2c bl 1002d520 -10033ac8: b908 cbnz r0, 10033ace -10033aca: 4815 ldr r0, [pc, #84] ; (10033b20 ) -10033acc: e01b b.n 10033b06 -10033ace: f506 50a4 add.w r0, r6, #5248 ; 0x1480 -10033ad2: 4639 mov r1, r7 -10033ad4: 4622 mov r2, r4 -10033ad6: 3019 adds r0, #25 -10033ad8: f7e7 f86a bl 1001abb0 -10033adc: 4811 ldr r0, [pc, #68] ; (10033b24 ) -10033ade: f7e7 f83f bl 1001ab60 -10033ae2: e018 b.n 10033b16 -10033ae4: 4628 mov r0, r5 -10033ae6: 2100 movs r1, #0 -10033ae8: 2210 movs r2, #16 -10033aea: 4b0f ldr r3, [pc, #60] ; (10033b28 ) -10033aec: 4798 blx r3 -10033aee: 2500 movs r5, #0 -10033af0: ab04 add r3, sp, #16 -10033af2: f803 0d08 strb.w r0, [r3, #-8]! -10033af6: 21c8 movs r1, #200 ; 0xc8 -10033af8: 9500 str r5, [sp, #0] -10033afa: 4630 mov r0, r6 -10033afc: 4622 mov r2, r4 -10033afe: f7f9 fd0f bl 1002d520 -10033b02: b940 cbnz r0, 10033b16 -10033b04: 4809 ldr r0, [pc, #36] ; (10033b2c ) -10033b06: f7e7 f82b bl 1001ab60 -10033b0a: f04f 30ff mov.w r0, #4294967295 -10033b0e: e003 b.n 10033b18 -10033b10: f06f 0063 mvn.w r0, #99 ; 0x63 -10033b14: e000 b.n 10033b18 -10033b16: 2000 movs r0, #0 -10033b18: b005 add sp, #20 -10033b1a: bdf0 pop {r4, r5, r6, r7, pc} -10033b1c: 10042095 .word 0x10042095 -10033b20: 100420b1 .word 0x100420b1 -10033b24: 100420cc .word 0x100420cc -10033b28: 0000f965 .word 0x0000f965 -10033b2c: 10042106 .word 0x10042106 - -10033b30 : -10033b30: 4608 mov r0, r1 -10033b32: 4611 mov r1, r2 -10033b34: 461a mov r2, r3 -10033b36: f7d9 bf27 b.w 1000d988 - -10033b3a : -10033b3a: b530 push {r4, r5, lr} -10033b3c: 4608 mov r0, r1 -10033b3e: b085 sub sp, #20 -10033b40: 460d mov r5, r1 -10033b42: f7e7 f849 bl 1001abd8 -10033b46: f5b0 7f80 cmp.w r0, #256 ; 0x100 -10033b4a: d822 bhi.n 10033b92 -10033b4c: f240 1001 movw r0, #257 ; 0x101 -10033b50: f7e3 fe2e bl 100177b0 -10033b54: 4604 mov r4, r0 -10033b56: b1e0 cbz r0, 10033b92 -10033b58: 4628 mov r0, r5 -10033b5a: f7e7 f83d bl 1001abd8 -10033b5e: 4629 mov r1, r5 -10033b60: 4602 mov r2, r0 -10033b62: 4620 mov r0, r4 -10033b64: f7e3 fc54 bl 10017410 -10033b68: 2100 movs r1, #0 -10033b6a: 2210 movs r2, #16 -10033b6c: 4668 mov r0, sp -10033b6e: f7e3 fc5f bl 10017430 -10033b72: 4628 mov r0, r5 -10033b74: f7e7 f830 bl 1001abd8 -10033b78: 4669 mov r1, sp -10033b7a: f8ad 0004 strh.w r0, [sp, #4] -10033b7e: 4622 mov r2, r4 -10033b80: f648 4002 movw r0, #35842 ; 0x8c02 -10033b84: f7d9 ff00 bl 1000d988 -10033b88: 4620 mov r0, r4 -10033b8a: f240 1101 movw r1, #257 ; 0x101 -10033b8e: f7e3 fc3c bl 1001740a -10033b92: b005 add sp, #20 -10033b94: bd30 pop {r4, r5, pc} - -10033b96 : -10033b96: b51f push {r0, r1, r2, r3, r4, lr} -10033b98: 4604 mov r4, r0 -10033b9a: 2100 movs r1, #0 -10033b9c: 4668 mov r0, sp -10033b9e: 2210 movs r2, #16 -10033ba0: f7e3 fc46 bl 10017430 -10033ba4: 6c23 ldr r3, [r4, #64] ; 0x40 -10033ba6: f648 3019 movw r0, #35609 ; 0x8b19 -10033baa: 9300 str r3, [sp, #0] -10033bac: 6c63 ldr r3, [r4, #68] ; 0x44 -10033bae: 4669 mov r1, sp -10033bb0: 2200 movs r2, #0 -10033bb2: f8ad 3004 strh.w r3, [sp, #4] -10033bb6: f7d9 fee7 bl 1000d988 -10033bba: b004 add sp, #16 -10033bbc: bd10 pop {r4, pc} - -10033bbe : -10033bbe: b51f push {r0, r1, r2, r3, r4, lr} -10033bc0: 4604 mov r4, r0 -10033bc2: 2100 movs r1, #0 -10033bc4: 4668 mov r0, sp -10033bc6: 2210 movs r2, #16 -10033bc8: f7e3 fc32 bl 10017430 -10033bcc: 2200 movs r2, #0 -10033bce: 6422 str r2, [r4, #64] ; 0x40 -10033bd0: 6462 str r2, [r4, #68] ; 0x44 -10033bd2: f8a4 204a strh.w r2, [r4, #74] ; 0x4a -10033bd6: f648 3019 movw r0, #35609 ; 0x8b19 -10033bda: 4669 mov r1, sp -10033bdc: f8ad 2006 strh.w r2, [sp, #6] -10033be0: f7d9 fed2 bl 1000d988 -10033be4: b004 add sp, #16 -10033be6: bd10 pop {r4, pc} - -10033be8 : -10033be8: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -10033bea: f240 1001 movw r0, #257 ; 0x101 -10033bee: 4616 mov r6, r2 -10033bf0: 461d mov r5, r3 -10033bf2: f7e3 fddd bl 100177b0 -10033bf6: 4604 mov r4, r0 -10033bf8: b1d0 cbz r0, 10033c30 -10033bfa: 480e ldr r0, [pc, #56] ; (10033c34 ) -10033bfc: f7e6 ffec bl 1001abd8 -10033c00: 490c ldr r1, [pc, #48] ; (10033c34 ) -10033c02: 4602 mov r2, r0 -10033c04: 4620 mov r0, r4 -10033c06: f7e3 fc03 bl 10017410 -10033c0a: 4668 mov r0, sp -10033c0c: 2100 movs r1, #0 -10033c0e: 2210 movs r2, #16 -10033c10: f7e3 fc0e bl 10017430 -10033c14: f648 4002 movw r0, #35842 ; 0x8c02 -10033c18: 4669 mov r1, sp -10033c1a: 4622 mov r2, r4 -10033c1c: 9600 str r6, [sp, #0] -10033c1e: f8ad 5004 strh.w r5, [sp, #4] -10033c22: f7d9 feb1 bl 1000d988 -10033c26: 4620 mov r0, r4 -10033c28: f240 1101 movw r1, #257 ; 0x101 -10033c2c: f7e3 fbed bl 1001740a -10033c30: b004 add sp, #16 -10033c32: bd70 pop {r4, r5, r6, pc} -10033c34: 1003fc73 .word 0x1003fc73 - -10033c38 : -10033c38: b530 push {r4, r5, lr} -10033c3a: f240 1001 movw r0, #257 ; 0x101 -10033c3e: b085 sub sp, #20 -10033c40: 460d mov r5, r1 -10033c42: f7e3 fdb5 bl 100177b0 -10033c46: 4604 mov r4, r0 -10033c48: b1e8 cbz r0, 10033c86 -10033c4a: 4810 ldr r0, [pc, #64] ; (10033c8c ) -10033c4c: f7e6 ffc4 bl 1001abd8 -10033c50: 490e ldr r1, [pc, #56] ; (10033c8c ) -10033c52: 4602 mov r2, r0 -10033c54: 4620 mov r0, r4 -10033c56: f7e3 fbdb bl 10017410 -10033c5a: 4668 mov r0, sp -10033c5c: 2100 movs r1, #0 -10033c5e: 2210 movs r2, #16 -10033c60: f7e3 fbe6 bl 10017430 -10033c64: f10d 0002 add.w r0, sp, #2 -10033c68: 4629 mov r1, r5 -10033c6a: 2206 movs r2, #6 -10033c6c: f7e3 fbd0 bl 10017410 -10033c70: f648 4002 movw r0, #35842 ; 0x8c02 -10033c74: 4669 mov r1, sp -10033c76: 4622 mov r2, r4 -10033c78: f7d9 fe86 bl 1000d988 -10033c7c: 4620 mov r0, r4 -10033c7e: f240 1101 movw r1, #257 ; 0x101 -10033c82: f7e3 fbc2 bl 1001740a -10033c86: b005 add sp, #20 -10033c88: bd30 pop {r4, r5, pc} -10033c8a: bf00 nop -10033c8c: 1003fc7d .word 0x1003fc7d - -10033c90 : -10033c90: b51f push {r0, r1, r2, r3, r4, lr} -10033c92: 4604 mov r4, r0 -10033c94: 2100 movs r1, #0 -10033c96: 4668 mov r0, sp -10033c98: 2210 movs r2, #16 -10033c9a: f7e3 fbc9 bl 10017430 -10033c9e: 2301 movs r3, #1 -10033ca0: f10d 0002 add.w r0, sp, #2 -10033ca4: f104 019c add.w r1, r4, #156 ; 0x9c -10033ca8: 2206 movs r2, #6 -10033caa: f88d 3001 strb.w r3, [sp, #1] -10033cae: f7e3 fbaf bl 10017410 -10033cb2: f648 3015 movw r0, #35605 ; 0x8b15 -10033cb6: 4669 mov r1, sp -10033cb8: 2200 movs r2, #0 -10033cba: f7d9 fe65 bl 1000d988 -10033cbe: b004 add sp, #16 -10033cc0: bd10 pop {r4, pc} - -10033cc2 : -10033cc2: b51f push {r0, r1, r2, r3, r4, lr} -10033cc4: 2100 movs r1, #0 -10033cc6: 4668 mov r0, sp -10033cc8: 2210 movs r2, #16 -10033cca: f7e3 fbb1 bl 10017430 -10033cce: 2301 movs r3, #1 -10033cd0: f10d 0002 add.w r0, sp, #2 -10033cd4: 2100 movs r1, #0 -10033cd6: 2206 movs r2, #6 -10033cd8: f88d 3001 strb.w r3, [sp, #1] -10033cdc: f7e3 fba8 bl 10017430 -10033ce0: f648 3015 movw r0, #35605 ; 0x8b15 -10033ce4: 4669 mov r1, sp -10033ce6: 2200 movs r2, #0 -10033ce8: f7d9 fe4e bl 1000d988 -10033cec: b005 add sp, #20 -10033cee: f85d fb04 ldr.w pc, [sp], #4 - -10033cf2 : -10033cf2: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -10033cf4: 2300 movs r3, #0 -10033cf6: 4604 mov r4, r0 -10033cf8: 4616 mov r6, r2 -10033cfa: 9302 str r3, [sp, #8] -10033cfc: 9303 str r3, [sp, #12] -10033cfe: 460d mov r5, r1 -10033d00: b111 cbz r1, 10033d08 -10033d02: 3a04 subs r2, #4 -10033d04: 2afc cmp r2, #252 ; 0xfc -10033d06: d909 bls.n 10033d1c -10033d08: 6923 ldr r3, [r4, #16] -10033d0a: 2d00 cmp r5, #0 -10033d0c: f423 7380 bic.w r3, r3, #256 ; 0x100 -10033d10: 6123 str r3, [r4, #16] -10033d12: bf14 ite ne -10033d14: f06f 0015 mvnne.w r0, #21 -10033d18: 2000 moveq r0, #0 -10033d1a: e07f b.n 10033e1c -10033d1c: 9300 str r3, [sp, #0] -10033d1e: 4608 mov r0, r1 -10033d20: aa02 add r2, sp, #8 -10033d22: 4631 mov r1, r6 -10033d24: ab03 add r3, sp, #12 -10033d26: f00a fd9b bl 1003e860 <__rtw_parse_wpa_ie_veneer> -10033d2a: 2801 cmp r0, #1 -10033d2c: d10d bne.n 10033d4a -10033d2e: 2302 movs r3, #2 -10033d30: f8c4 3d08 str.w r3, [r4, #3336] ; 0xd08 -10033d34: 2204 movs r2, #4 -10033d36: f241 036c movw r3, #4204 ; 0x106c -10033d3a: f504 5084 add.w r0, r4, #4224 ; 0x1080 -10033d3e: 50e2 str r2, [r4, r3] -10033d40: 3010 adds r0, #16 -10033d42: 4629 mov r1, r5 -10033d44: 4632 mov r2, r6 -10033d46: f7e3 fb63 bl 10017410 -10033d4a: 2300 movs r3, #0 -10033d4c: 9300 str r3, [sp, #0] -10033d4e: 4628 mov r0, r5 -10033d50: 4631 mov r1, r6 -10033d52: aa02 add r2, sp, #8 -10033d54: ab03 add r3, sp, #12 -10033d56: f00a fd77 bl 1003e848 <__rtw_parse_wpa2_ie_veneer> -10033d5a: 2801 cmp r0, #1 -10033d5c: d10d bne.n 10033d7a -10033d5e: 2302 movs r3, #2 -10033d60: f8c4 3d08 str.w r3, [r4, #3336] ; 0xd08 -10033d64: 2207 movs r2, #7 -10033d66: f241 036c movw r3, #4204 ; 0x106c -10033d6a: f504 5084 add.w r0, r4, #4224 ; 0x1080 -10033d6e: 50e2 str r2, [r4, r3] -10033d70: 3010 adds r0, #16 -10033d72: 4629 mov r1, r5 -10033d74: 4632 mov r2, r6 -10033d76: f7e3 fb4b bl 10017410 -10033d7a: 9a02 ldr r2, [sp, #8] -10033d7c: 2300 movs r3, #0 -10033d7e: 3a01 subs r2, #1 -10033d80: 2a0f cmp r2, #15 -10033d82: d822 bhi.n 10033dca -10033d84: e8df f002 tbb [pc, r2] -10033d88: 1b210c08 .word 0x1b210c08 -10033d8c: 0e212121 .word 0x0e212121 -10033d90: 21212121 .word 0x21212121 -10033d94: 16212121 .word 0x16212121 -10033d98: f8c4 3d64 str.w r3, [r4, #3428] ; 0xd64 -10033d9c: 2201 movs r2, #1 -10033d9e: e005 b.n 10033dac -10033da0: 2201 movs r2, #1 -10033da2: e00d b.n 10033dc0 -10033da4: 2302 movs r3, #2 -10033da6: f8c4 3d64 str.w r3, [r4, #3428] ; 0xd64 -10033daa: 2204 movs r2, #4 -10033dac: f241 0370 movw r3, #4208 ; 0x1070 -10033db0: 50e2 str r2, [r4, r3] -10033db2: e00a b.n 10033dca -10033db4: 2304 movs r3, #4 -10033db6: f8c4 3d64 str.w r3, [r4, #3428] ; 0xd64 -10033dba: 2206 movs r2, #6 -10033dbc: e7f6 b.n 10033dac -10033dbe: 2205 movs r2, #5 -10033dc0: f8c4 2d64 str.w r2, [r4, #3428] ; 0xd64 -10033dc4: f241 0270 movw r2, #4208 ; 0x1070 -10033dc8: 50a3 str r3, [r4, r2] -10033dca: 9a03 ldr r2, [sp, #12] -10033dcc: 2300 movs r3, #0 -10033dce: 3a01 subs r2, #1 -10033dd0: 2a0f cmp r2, #15 -10033dd2: d822 bhi.n 10033e1a -10033dd4: e8df f002 tbb [pc, r2] -10033dd8: 1b210c08 .word 0x1b210c08 -10033ddc: 0e212121 .word 0x0e212121 -10033de0: 21212121 .word 0x21212121 -10033de4: 13212121 .word 0x13212121 -10033de8: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c -10033dec: 2201 movs r2, #1 -10033dee: e00a b.n 10033e06 -10033df0: 2201 movs r2, #1 -10033df2: e00d b.n 10033e10 -10033df4: 2302 movs r3, #2 -10033df6: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c -10033dfa: 2204 movs r2, #4 -10033dfc: e003 b.n 10033e06 -10033dfe: 2304 movs r3, #4 -10033e00: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c -10033e04: 2206 movs r2, #6 -10033e06: f241 0370 movw r3, #4208 ; 0x1070 -10033e0a: 50e2 str r2, [r4, r3] -10033e0c: e005 b.n 10033e1a -10033e0e: 2205 movs r2, #5 -10033e10: f8c4 2d0c str.w r2, [r4, #3340] ; 0xd0c -10033e14: f241 0270 movw r2, #4208 ; 0x1070 -10033e18: 50a3 str r3, [r4, r2] -10033e1a: 2000 movs r0, #0 -10033e1c: b004 add sp, #16 -10033e1e: bd70 pop {r4, r5, r6, pc} - -10033e20 : -10033e20: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10033e24: b378 cbz r0, 10033e86 -10033e26: b371 cbz r1, 10033e86 -10033e28: 3101 adds r1, #1 -10033e2a: 2300 movs r3, #0 -10033e2c: 4293 cmp r3, r2 -10033e2e: da2a bge.n 10033e86 -10033e30: f811 4c01 ldrb.w r4, [r1, #-1] -10033e34: 2c60 cmp r4, #96 ; 0x60 -10033e36: d804 bhi.n 10033e42 -10033e38: 2c41 cmp r4, #65 ; 0x41 -10033e3a: bf34 ite cc -10033e3c: 2630 movcc r6, #48 ; 0x30 -10033e3e: 2641 movcs r6, #65 ; 0x41 -10033e40: e000 b.n 10033e44 -10033e42: 2661 movs r6, #97 ; 0x61 -10033e44: 780d ldrb r5, [r1, #0] -10033e46: 2d60 cmp r5, #96 ; 0x60 -10033e48: d804 bhi.n 10033e54 -10033e4a: 2d41 cmp r5, #65 ; 0x41 -10033e4c: bf34 ite cc -10033e4e: 2730 movcc r7, #48 ; 0x30 -10033e50: 2741 movcs r7, #65 ; 0x41 -10033e52: e000 b.n 10033e56 -10033e54: 2761 movs r7, #97 ; 0x61 -10033e56: 2c41 cmp r4, #65 ; 0x41 -10033e58: bf34 ite cc -10033e5a: f04f 0800 movcc.w r8, #0 -10033e5e: f04f 080a movcs.w r8, #10 -10033e62: 1ba4 subs r4, r4, r6 -10033e64: 2d41 cmp r5, #65 ; 0x41 -10033e66: ebc7 0705 rsb r7, r7, r5 -10033e6a: eb08 0504 add.w r5, r8, r4 -10033e6e: bf34 ite cc -10033e70: f04f 0c00 movcc.w ip, #0 -10033e74: f04f 0c0a movcs.w ip, #10 -10033e78: eb07 1505 add.w r5, r7, r5, lsl #4 -10033e7c: 4465 add r5, ip -10033e7e: 54c5 strb r5, [r0, r3] -10033e80: 3102 adds r1, #2 -10033e82: 3301 adds r3, #1 -10033e84: e7d2 b.n 10033e2c -10033e86: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - ... - -10033e8c : -10033e8c: b570 push {r4, r5, r6, lr} -10033e8e: 461d mov r5, r3 -10033e90: 6903 ldr r3, [r0, #16] -10033e92: 4616 mov r6, r2 -10033e94: 681c ldr r4, [r3, #0] -10033e96: f504 549a add.w r4, r4, #4928 ; 0x1340 -10033e9a: 3404 adds r4, #4 -10033e9c: 4620 mov r0, r4 -10033e9e: f7e6 fe9b bl 1001abd8 -10033ea2: b282 uxth r2, r0 -10033ea4: 1e53 subs r3, r2, #1 -10033ea6: 2b3e cmp r3, #62 ; 0x3e -10033ea8: 80b2 strh r2, [r6, #4] -10033eaa: d802 bhi.n 10033eb2 -10033eac: 4628 mov r0, r5 -10033eae: 4621 mov r1, r4 -10033eb0: e00c b.n 10033ecc -10033eb2: 4808 ldr r0, [pc, #32] ; (10033ed4 ) -10033eb4: f7e6 fe90 bl 1001abd8 -10033eb8: 2840 cmp r0, #64 ; 0x40 -10033eba: d109 bne.n 10033ed0 -10033ebc: 4805 ldr r0, [pc, #20] ; (10033ed4 ) -10033ebe: f7e6 fe8b bl 1001abd8 -10033ec2: 4904 ldr r1, [pc, #16] ; (10033ed4 ) -10033ec4: 4602 mov r2, r0 -10033ec6: 80b0 strh r0, [r6, #4] -10033ec8: b292 uxth r2, r2 -10033eca: 4628 mov r0, r5 -10033ecc: f7e3 faa0 bl 10017410 -10033ed0: 2000 movs r0, #0 -10033ed2: bd70 pop {r4, r5, r6, pc} -10033ed4: 1004bbe2 .word 0x1004bbe2 - -10033ed8 : -10033ed8: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -10033edc: 461d mov r5, r3 -10033ede: 6903 ldr r3, [r0, #16] -10033ee0: 4680 mov r8, r0 -10033ee2: f44f 7040 mov.w r0, #768 ; 0x300 -10033ee6: 4617 mov r7, r2 -10033ee8: 681c ldr r4, [r3, #0] -10033eea: f7e3 fc51 bl 10017790 -10033eee: 2100 movs r1, #0 -10033ef0: 4606 mov r6, r0 -10033ef2: f44f 7240 mov.w r2, #768 ; 0x300 -10033ef6: f7e3 fa9b bl 10017430 -10033efa: 88ba ldrh r2, [r7, #4] -10033efc: 4620 mov r0, r4 -10033efe: 4629 mov r1, r5 -10033f00: 4633 mov r3, r6 -10033f02: f7e8 f8d9 bl 1001c0b8 -10033f06: f5b0 7f40 cmp.w r0, #768 ; 0x300 -10033f0a: 4607 mov r7, r0 -10033f0c: dc4a bgt.n 10033fa4 -10033f0e: f241 036c movw r3, #4204 ; 0x106c -10033f12: 58e3 ldr r3, [r4, r3] -10033f14: 2b04 cmp r3, #4 -10033f16: d001 beq.n 10033f1c -10033f18: 2b07 cmp r3, #7 -10033f1a: d112 bne.n 10033f42 -10033f1c: 2130 movs r1, #48 ; 0x30 -10033f1e: aa01 add r2, sp, #4 -10033f20: 463b mov r3, r7 -10033f22: 4630 mov r0, r6 -10033f24: f00a fcc0 bl 1003e8a8 <__rtw_get_ie_veneer> -10033f28: f8bd 2004 ldrh.w r2, [sp, #4] -10033f2c: 4601 mov r1, r0 -10033f2e: 4620 mov r0, r4 -10033f30: f7f1 feba bl 10025ca8 -10033f34: f504 519a add.w r1, r4, #4928 ; 0x1340 -10033f38: 4620 mov r0, r4 -10033f3a: 3104 adds r1, #4 -10033f3c: 462a mov r2, r5 -10033f3e: f7f1 fe59 bl 10025bf4 -10033f42: f107 050e add.w r5, r7, #14 -10033f46: 4628 mov r0, r5 -10033f48: f7e3 fc22 bl 10017790 -10033f4c: 4604 mov r4, r0 -10033f4e: 2100 movs r1, #0 -10033f50: 462a mov r2, r5 -10033f52: f104 090e add.w r9, r4, #14 -10033f56: f7e3 fa6b bl 10017430 -10033f5a: 4648 mov r0, r9 -10033f5c: 4631 mov r1, r6 -10033f5e: 463a mov r2, r7 -10033f60: f7e3 fa56 bl 10017410 -10033f64: f8d8 3010 ldr.w r3, [r8, #16] -10033f68: f8d3 8000 ldr.w r8, [r3] -10033f6c: f8d8 3010 ldr.w r3, [r8, #16] -10033f70: f013 0310 ands.w r3, r3, #16 -10033f74: d014 beq.n 10033fa0 -10033f76: f508 6050 add.w r0, r8, #3328 ; 0xd00 -10033f7a: f104 010c add.w r1, r4, #12 -10033f7e: 2202 movs r2, #2 -10033f80: f7e3 fa46 bl 10017410 -10033f84: f8b8 3d00 ldrh.w r3, [r8, #3328] ; 0xd00 -10033f88: 3b01 subs r3, #1 -10033f8a: b29b uxth r3, r3 -10033f8c: 2b04 cmp r3, #4 -10033f8e: d902 bls.n 10033f96 -10033f90: 2305 movs r3, #5 -10033f92: f8a8 3d00 strh.w r3, [r8, #3328] ; 0xd00 -10033f96: 4640 mov r0, r8 -10033f98: 4649 mov r1, r9 -10033f9a: 463a mov r2, r7 -10033f9c: f7e7 f994 bl 1001b2c8 -10033fa0: 2700 movs r7, #0 -10033fa2: e003 b.n 10033fac -10033fa4: 2500 movs r5, #0 -10033fa6: 462c mov r4, r5 -10033fa8: f04f 37ff mov.w r7, #4294967295 -10033fac: b126 cbz r6, 10033fb8 -10033fae: 4630 mov r0, r6 -10033fb0: f44f 7140 mov.w r1, #768 ; 0x300 -10033fb4: f7e3 fa29 bl 1001740a -10033fb8: b11c cbz r4, 10033fc2 -10033fba: 4620 mov r0, r4 -10033fbc: 4629 mov r1, r5 -10033fbe: f7e3 fa24 bl 1001740a -10033fc2: 4638 mov r0, r7 -10033fc4: b003 add sp, #12 -10033fc6: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - ... - -10033fcc : -10033fcc: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10033fd0: 4c31 ldr r4, [pc, #196] ; (10034098 ) -10033fd2: 4607 mov r7, r0 -10033fd4: 6823 ldr r3, [r4, #0] -10033fd6: b11b cbz r3, 10033fe0 -10033fd8: 4b30 ldr r3, [pc, #192] ; (1003409c ) -10033fda: 6f18 ldr r0, [r3, #112] ; 0x70 -10033fdc: f7e6 fdc0 bl 1001ab60 -10033fe0: 2601 movs r6, #1 -10033fe2: 2500 movs r5, #0 -10033fe4: f006 0803 and.w r8, r6, #3 -10033fe8: f1b8 0f01 cmp.w r8, #1 -10033fec: d107 bne.n 10033ffe -10033fee: 6823 ldr r3, [r4, #0] -10033ff0: b12b cbz r3, 10033ffe -10033ff2: 4b2a ldr r3, [pc, #168] ; (1003409c ) -10033ff4: 4629 mov r1, r5 -10033ff6: f8d3 0080 ldr.w r0, [r3, #128] ; 0x80 -10033ffa: f7e6 fdb1 bl 1001ab60 -10033ffe: 6823 ldr r3, [r4, #0] -10034000: b153 cbz r3, 10034018 -10034002: 4b26 ldr r3, [pc, #152] ; (1003409c ) -10034004: 4629 mov r1, r5 -10034006: 4638 mov r0, r7 -10034008: f8d3 9084 ldr.w r9, [r3, #132] ; 0x84 -1003400c: f003 fe43 bl 10037c96 -10034010: 4601 mov r1, r0 -10034012: 4648 mov r0, r9 -10034014: f7e6 fda4 bl 1001ab60 -10034018: f1b8 0f00 cmp.w r8, #0 -1003401c: d106 bne.n 1003402c -1003401e: 6823 ldr r3, [r4, #0] -10034020: b123 cbz r3, 1003402c -10034022: 4b1e ldr r3, [pc, #120] ; (1003409c ) -10034024: f8d3 0088 ldr.w r0, [r3, #136] ; 0x88 -10034028: f7e6 fd9a bl 1001ab60 -1003402c: 3504 adds r5, #4 -1003402e: f5b5 7f40 cmp.w r5, #768 ; 0x300 -10034032: f106 0601 add.w r6, r6, #1 -10034036: d1d5 bne.n 10033fe4 -10034038: 26c1 movs r6, #193 ; 0xc1 -1003403a: f44f 6580 mov.w r5, #1024 ; 0x400 -1003403e: f006 0803 and.w r8, r6, #3 -10034042: f1b8 0f01 cmp.w r8, #1 -10034046: d107 bne.n 10034058 -10034048: 6823 ldr r3, [r4, #0] -1003404a: b12b cbz r3, 10034058 -1003404c: 4b13 ldr r3, [pc, #76] ; (1003409c ) -1003404e: 4629 mov r1, r5 -10034050: f8d3 0080 ldr.w r0, [r3, #128] ; 0x80 -10034054: f7e6 fd84 bl 1001ab60 -10034058: 6823 ldr r3, [r4, #0] -1003405a: b153 cbz r3, 10034072 -1003405c: 4b0f ldr r3, [pc, #60] ; (1003409c ) -1003405e: 4629 mov r1, r5 -10034060: 4638 mov r0, r7 -10034062: f8d3 9084 ldr.w r9, [r3, #132] ; 0x84 -10034066: f003 fe16 bl 10037c96 -1003406a: 4601 mov r1, r0 -1003406c: 4648 mov r0, r9 -1003406e: f7e6 fd77 bl 1001ab60 -10034072: f1b8 0f00 cmp.w r8, #0 -10034076: d106 bne.n 10034086 -10034078: 6823 ldr r3, [r4, #0] -1003407a: b123 cbz r3, 10034086 -1003407c: 4b07 ldr r3, [pc, #28] ; (1003409c ) -1003407e: f8d3 0088 ldr.w r0, [r3, #136] ; 0x88 -10034082: f7e6 fd6d bl 1001ab60 -10034086: 3504 adds r5, #4 -10034088: f5b5 6f00 cmp.w r5, #2048 ; 0x800 -1003408c: f106 0601 add.w r6, r6, #1 -10034090: d1d5 bne.n 1003403e -10034092: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -10034096: bf00 nop -10034098: 10044ec0 .word 0x10044ec0 -1003409c: 10043a4c .word 0x10043a4c - -100340a0 : -100340a0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -100340a4: 4e19 ldr r6, [pc, #100] ; (1003410c ) -100340a6: 4680 mov r8, r0 -100340a8: 6833 ldr r3, [r6, #0] -100340aa: b11b cbz r3, 100340b4 -100340ac: 4b18 ldr r3, [pc, #96] ; (10034110 ) -100340ae: 6f58 ldr r0, [r3, #116] ; 0x74 -100340b0: f7e6 fd56 bl 1001ab60 -100340b4: 2501 movs r5, #1 -100340b6: f44f 6400 mov.w r4, #2048 ; 0x800 -100340ba: f005 0703 and.w r7, r5, #3 -100340be: 2f01 cmp r7, #1 -100340c0: d107 bne.n 100340d2 -100340c2: 6833 ldr r3, [r6, #0] -100340c4: b12b cbz r3, 100340d2 -100340c6: 4b12 ldr r3, [pc, #72] ; (10034110 ) -100340c8: 4621 mov r1, r4 -100340ca: f8d3 0080 ldr.w r0, [r3, #128] ; 0x80 -100340ce: f7e6 fd47 bl 1001ab60 -100340d2: 6833 ldr r3, [r6, #0] -100340d4: b153 cbz r3, 100340ec -100340d6: 4b0e ldr r3, [pc, #56] ; (10034110 ) -100340d8: 4621 mov r1, r4 -100340da: 4640 mov r0, r8 -100340dc: f8d3 9084 ldr.w r9, [r3, #132] ; 0x84 -100340e0: f003 fdd9 bl 10037c96 -100340e4: 4601 mov r1, r0 -100340e6: 4648 mov r0, r9 -100340e8: f7e6 fd3a bl 1001ab60 -100340ec: b937 cbnz r7, 100340fc -100340ee: 6833 ldr r3, [r6, #0] -100340f0: b123 cbz r3, 100340fc -100340f2: 4b07 ldr r3, [pc, #28] ; (10034110 ) -100340f4: f8d3 0088 ldr.w r0, [r3, #136] ; 0x88 -100340f8: f7e6 fd32 bl 1001ab60 -100340fc: 3404 adds r4, #4 -100340fe: f5b4 5f80 cmp.w r4, #4096 ; 0x1000 -10034102: f105 0501 add.w r5, r5, #1 -10034106: d1d8 bne.n 100340ba -10034108: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1003410c: 10044ec0 .word 0x10044ec0 -10034110: 10043a4c .word 0x10043a4c - -10034114 : -10034114: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -10034118: 4d22 ldr r5, [pc, #136] ; (100341a4 ) -1003411a: 2117 movs r1, #23 -1003411c: f10d 0207 add.w r2, sp, #7 -10034120: 4680 mov r8, r0 -10034122: f7fe f9dd bl 100324e0 -10034126: 682b ldr r3, [r5, #0] -10034128: b11b cbz r3, 10034132 -1003412a: 4b1f ldr r3, [pc, #124] ; (100341a8 ) -1003412c: 6f98 ldr r0, [r3, #120] ; 0x78 -1003412e: f7e6 fd17 bl 1001ab60 -10034132: 682b ldr r3, [r5, #0] -10034134: b123 cbz r3, 10034140 -10034136: 4b1c ldr r3, [pc, #112] ; (100341a8 ) -10034138: 2100 movs r1, #0 -1003413a: 6f98 ldr r0, [r3, #120] ; 0x78 -1003413c: f7e6 fd10 bl 1001ab60 -10034140: 2400 movs r4, #0 -10034142: 4640 mov r0, r8 -10034144: 2100 movs r1, #0 -10034146: 4622 mov r2, r4 -10034148: f04f 33ff mov.w r3, #4294967295 -1003414c: f7fe faad bl 100326aa -10034150: 1c66 adds r6, r4, #1 -10034152: f006 0703 and.w r7, r6, #3 -10034156: 2f01 cmp r7, #1 -10034158: 4681 mov r9, r0 -1003415a: d019 beq.n 10034190 -1003415c: 682b ldr r3, [r5, #0] -1003415e: b983 cbnz r3, 10034182 -10034160: b137 cbz r7, 10034170 -10034162: f5b6 7f80 cmp.w r6, #256 ; 0x100 -10034166: 4634 mov r4, r6 -10034168: d1eb bne.n 10034142 -1003416a: b003 add sp, #12 -1003416c: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -10034170: 682b ldr r3, [r5, #0] -10034172: 2b00 cmp r3, #0 -10034174: d0f5 beq.n 10034162 -10034176: 4b0c ldr r3, [pc, #48] ; (100341a8 ) -10034178: f8d3 0088 ldr.w r0, [r3, #136] ; 0x88 -1003417c: f7e6 fcf0 bl 1001ab60 -10034180: e7ef b.n 10034162 -10034182: 4b09 ldr r3, [pc, #36] ; (100341a8 ) -10034184: 4649 mov r1, r9 -10034186: f8d3 0084 ldr.w r0, [r3, #132] ; 0x84 -1003418a: f7e6 fce9 bl 1001ab60 -1003418e: e7e7 b.n 10034160 -10034190: 682b ldr r3, [r5, #0] -10034192: 2b00 cmp r3, #0 -10034194: d0e2 beq.n 1003415c -10034196: 4b04 ldr r3, [pc, #16] ; (100341a8 ) -10034198: 4621 mov r1, r4 -1003419a: f8d3 0080 ldr.w r0, [r3, #128] ; 0x80 -1003419e: f7e6 fcdf bl 1001ab60 -100341a2: e7db b.n 1003415c -100341a4: 10044ec0 .word 0x10044ec0 -100341a8: 10043a4c .word 0x10043a4c - -100341ac : -100341ac: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100341b0: 6903 ldr r3, [r0, #16] -100341b2: 8894 ldrh r4, [r2, #4] -100341b4: f8d3 8000 ldr.w r8, [r3] -100341b8: b087 sub sp, #28 -100341ba: 2300 movs r3, #0 -100341bc: 42a3 cmp r3, r4 -100341be: 6811 ldr r1, [r2, #0] -100341c0: f103 0001 add.w r0, r3, #1 -100341c4: da02 bge.n 100341cc -100341c6: 56cb ldrsb r3, [r1, r3] -100341c8: 2b20 cmp r3, #32 -100341ca: d125 bne.n 10034218 -100341cc: 180d adds r5, r1, r0 -100341ce: 2210 movs r2, #16 -100341d0: 4608 mov r0, r1 -100341d2: 2100 movs r1, #0 -100341d4: f00a fbc8 bl 1003e968 <__Strtoul_veneer> -100341d8: 2100 movs r1, #0 -100341da: 4604 mov r4, r0 -100341dc: 2210 movs r2, #16 -100341de: 4628 mov r0, r5 -100341e0: f00a fbc2 bl 1003e968 <__Strtoul_veneer> -100341e4: 0e23 lsrs r3, r4, #24 -100341e6: 3b70 subs r3, #112 ; 0x70 -100341e8: 4682 mov sl, r0 -100341ea: 9004 str r0, [sp, #16] -100341ec: 0c21 lsrs r1, r4, #16 -100341ee: 2b0f cmp r3, #15 -100341f0: f200 83e2 bhi.w 100349b8 -100341f4: e8df f013 tbh [pc, r3, lsl #1] -100341f8: 00380012 .word 0x00380012 -100341fc: 008a0080 .word 0x008a0080 -10034200: 00ac00a1 .word 0x00ac00a1 -10034204: 00d900cc .word 0x00d900cc -10034208: 00fc00e9 .word 0x00fc00e9 -1003420c: 03e003e0 .word 0x03e003e0 -10034210: 03e003e0 .word 0x03e003e0 -10034214: 010b03e0 .word 0x010b03e0 -10034218: 4603 mov r3, r0 -1003421a: e7cf b.n 100341bc -1003421c: b2c9 uxtb r1, r1 -1003421e: 2902 cmp r1, #2 -10034220: d00e beq.n 10034240 -10034222: 2904 cmp r1, #4 -10034224: d016 beq.n 10034254 -10034226: 2901 cmp r1, #1 -10034228: f040 83c6 bne.w 100349b8 -1003422c: 4ba7 ldr r3, [pc, #668] ; (100344cc ) -1003422e: 681b ldr r3, [r3, #0] -10034230: 2b00 cmp r3, #0 -10034232: f000 83c1 beq.w 100349b8 -10034236: 4ba6 ldr r3, [pc, #664] ; (100344d0 ) -10034238: b2a4 uxth r4, r4 -1003423a: f8d3 508c ldr.w r5, [r3, #140] ; 0x8c -1003423e: e02a b.n 10034296 -10034240: 4ba2 ldr r3, [pc, #648] ; (100344cc ) -10034242: 681b ldr r3, [r3, #0] -10034244: 2b00 cmp r3, #0 -10034246: f000 83b7 beq.w 100349b8 -1003424a: 4ba1 ldr r3, [pc, #644] ; (100344d0 ) -1003424c: b2a4 uxth r4, r4 -1003424e: f8d3 5090 ldr.w r5, [r3, #144] ; 0x90 -10034252: e034 b.n 100342be -10034254: 4b9d ldr r3, [pc, #628] ; (100344cc ) -10034256: 681b ldr r3, [r3, #0] -10034258: 2b00 cmp r3, #0 -1003425a: f000 83ad beq.w 100349b8 -1003425e: 4b9c ldr r3, [pc, #624] ; (100344d0 ) -10034260: b2a4 uxth r4, r4 -10034262: f8d3 5094 ldr.w r5, [r3, #148] ; 0x94 -10034266: e03d b.n 100342e4 -10034268: b2c9 uxtb r1, r1 -1003426a: 2902 cmp r1, #2 -1003426c: d018 beq.n 100342a0 -1003426e: 2904 cmp r1, #4 -10034270: d02a beq.n 100342c8 -10034272: 2901 cmp r1, #1 -10034274: f040 83a0 bne.w 100349b8 -10034278: b2a4 uxth r4, r4 -1003427a: 4640 mov r0, r8 -1003427c: 4621 mov r1, r4 -1003427e: fa5f f28a uxtb.w r2, sl -10034282: f003 fd0f bl 10037ca4 -10034286: 4b91 ldr r3, [pc, #580] ; (100344cc ) -10034288: 681b ldr r3, [r3, #0] -1003428a: 2b00 cmp r3, #0 -1003428c: f000 8394 beq.w 100349b8 -10034290: 4b8f ldr r3, [pc, #572] ; (100344d0 ) -10034292: f8d3 5098 ldr.w r5, [r3, #152] ; 0x98 -10034296: 4640 mov r0, r8 -10034298: 4621 mov r1, r4 -1003429a: f003 fcee bl 10037c7a -1003429e: e025 b.n 100342ec -100342a0: b2a4 uxth r4, r4 -100342a2: 4640 mov r0, r8 -100342a4: 4621 mov r1, r4 -100342a6: fa1f f28a uxth.w r2, sl -100342aa: f003 fd02 bl 10037cb2 -100342ae: 4b87 ldr r3, [pc, #540] ; (100344cc ) -100342b0: 681b ldr r3, [r3, #0] -100342b2: 2b00 cmp r3, #0 -100342b4: f000 8380 beq.w 100349b8 -100342b8: 4b85 ldr r3, [pc, #532] ; (100344d0 ) -100342ba: f8d3 509c ldr.w r5, [r3, #156] ; 0x9c -100342be: 4640 mov r0, r8 -100342c0: 4621 mov r1, r4 -100342c2: f003 fce1 bl 10037c88 -100342c6: e011 b.n 100342ec -100342c8: b2a4 uxth r4, r4 -100342ca: 4640 mov r0, r8 -100342cc: 4621 mov r1, r4 -100342ce: 4652 mov r2, sl -100342d0: f003 fcf6 bl 10037cc0 -100342d4: 4b7d ldr r3, [pc, #500] ; (100344cc ) -100342d6: 681b ldr r3, [r3, #0] -100342d8: 2b00 cmp r3, #0 -100342da: f000 836d beq.w 100349b8 -100342de: 4b7c ldr r3, [pc, #496] ; (100344d0 ) -100342e0: f8d3 50a0 ldr.w r5, [r3, #160] ; 0xa0 -100342e4: 4640 mov r0, r8 -100342e6: 4621 mov r1, r4 -100342e8: f003 fcd5 bl 10037c96 -100342ec: 4602 mov r2, r0 -100342ee: 4621 mov r1, r4 -100342f0: 4628 mov r0, r5 -100342f2: f7e6 fc35 bl 1001ab60 -100342f6: e35f b.n 100349b8 -100342f8: 4b74 ldr r3, [pc, #464] ; (100344cc ) -100342fa: 681b ldr r3, [r3, #0] -100342fc: 2b00 cmp r3, #0 -100342fe: f000 835b beq.w 100349b8 -10034302: 4b73 ldr r3, [pc, #460] ; (100344d0 ) -10034304: b2a4 uxth r4, r4 -10034306: f8d3 50a4 ldr.w r5, [r3, #164] ; 0xa4 -1003430a: e00f b.n 1003432c -1003430c: b2a4 uxth r4, r4 -1003430e: 4653 mov r3, sl -10034310: 4640 mov r0, r8 -10034312: 4621 mov r1, r4 -10034314: f04f 32ff mov.w r2, #4294967295 -10034318: f7fe f9b2 bl 10032680 -1003431c: 4b6b ldr r3, [pc, #428] ; (100344cc ) -1003431e: 681b ldr r3, [r3, #0] -10034320: 2b00 cmp r3, #0 -10034322: f000 8349 beq.w 100349b8 -10034326: 4b6a ldr r3, [pc, #424] ; (100344d0 ) -10034328: f8d3 50a8 ldr.w r5, [r3, #168] ; 0xa8 -1003432c: 4640 mov r0, r8 -1003432e: 4621 mov r1, r4 -10034330: f04f 32ff mov.w r2, #4294967295 -10034334: f7fe f98b bl 1003264e -10034338: e7d8 b.n 100342ec -1003433a: 4b64 ldr r3, [pc, #400] ; (100344cc ) -1003433c: 681b ldr r3, [r3, #0] -1003433e: 2b00 cmp r3, #0 -10034340: f000 833a beq.w 100349b8 -10034344: 4b62 ldr r3, [pc, #392] ; (100344d0 ) -10034346: b2cd uxtb r5, r1 -10034348: f8d3 60ac ldr.w r6, [r3, #172] ; 0xac -1003434c: b2a4 uxth r4, r4 -1003434e: e011 b.n 10034374 -10034350: b2cd uxtb r5, r1 -10034352: b2a4 uxth r4, r4 -10034354: 9000 str r0, [sp, #0] -10034356: f04f 33ff mov.w r3, #4294967295 -1003435a: 4640 mov r0, r8 -1003435c: 4629 mov r1, r5 -1003435e: 4622 mov r2, r4 -10034360: f7fe f9ac bl 100326bc -10034364: 4b59 ldr r3, [pc, #356] ; (100344cc ) -10034366: 681b ldr r3, [r3, #0] -10034368: 2b00 cmp r3, #0 -1003436a: f000 8325 beq.w 100349b8 -1003436e: 4b58 ldr r3, [pc, #352] ; (100344d0 ) -10034370: f8d3 60b0 ldr.w r6, [r3, #176] ; 0xb0 -10034374: 4629 mov r1, r5 -10034376: 4622 mov r2, r4 -10034378: 4640 mov r0, r8 -1003437a: f04f 33ff mov.w r3, #4294967295 -1003437e: f7fe f994 bl 100326aa -10034382: 4629 mov r1, r5 -10034384: 4603 mov r3, r0 -10034386: 4622 mov r2, r4 -10034388: 4630 mov r0, r6 -1003438a: f7e6 fbe9 bl 1001ab60 -1003438e: e313 b.n 100349b8 -10034390: 4b4e ldr r3, [pc, #312] ; (100344cc ) -10034392: 681b ldr r3, [r3, #0] -10034394: 2b00 cmp r3, #0 -10034396: f000 830f beq.w 100349b8 -1003439a: f024 417f bic.w r1, r4, #4278190080 ; 0xff000000 -1003439e: f101 4380 add.w r3, r1, #1073741824 ; 0x40000000 -100343a2: 681a ldr r2, [r3, #0] -100343a4: 4b4b ldr r3, [pc, #300] ; (100344d4 ) -100343a6: 6958 ldr r0, [r3, #20] -100343a8: e00c b.n 100343c4 -100343aa: f024 417f bic.w r1, r4, #4278190080 ; 0xff000000 -100343ae: f101 4380 add.w r3, r1, #1073741824 ; 0x40000000 -100343b2: 4a46 ldr r2, [pc, #280] ; (100344cc ) -100343b4: 6018 str r0, [r3, #0] -100343b6: 6812 ldr r2, [r2, #0] -100343b8: 2a00 cmp r2, #0 -100343ba: f000 82fd beq.w 100349b8 -100343be: 681a ldr r2, [r3, #0] -100343c0: 4b44 ldr r3, [pc, #272] ; (100344d4 ) -100343c2: 6998 ldr r0, [r3, #24] -100343c4: f041 4180 orr.w r1, r1, #1073741824 ; 0x40000000 -100343c8: e793 b.n 100342f2 -100343ca: f011 01ff ands.w r1, r1, #255 ; 0xff -100343ce: d00c beq.n 100343ea -100343d0: 2901 cmp r1, #1 -100343d2: f040 82f1 bne.w 100349b8 -100343d6: f1ba 0f64 cmp.w sl, #100 ; 0x64 -100343da: bf28 it cs -100343dc: f04f 0a64 movcs.w sl, #100 ; 0x64 -100343e0: f888 1c02 strb.w r1, [r8, #3074] ; 0xc02 -100343e4: f888 ac03 strb.w sl, [r8, #3075] ; 0xc03 -100343e8: e2e6 b.n 100349b8 -100343ea: f888 1c02 strb.w r1, [r8, #3074] ; 0xc02 -100343ee: e2e3 b.n 100349b8 -100343f0: f000 020f and.w r2, r0, #15 -100343f4: f011 0fff tst.w r1, #255 ; 0xff -100343f8: bf18 it ne -100343fa: f042 0210 orrne.w r2, r2, #16 -100343fe: 4640 mov r0, r8 -10034400: f240 61d9 movw r1, #1753 ; 0x6d9 -10034404: ea42 1242 orr.w r2, r2, r2, lsl #5 -10034408: f003 fc53 bl 10037cb2 -1003440c: e2d4 b.n 100349b8 -1003440e: b2c9 uxtb r1, r1 -10034410: 2922 cmp r1, #34 ; 0x22 -10034412: f000 80c4 beq.w 1003459e -10034416: dc17 bgt.n 10034448 -10034418: 2911 cmp r1, #17 -1003441a: d07c beq.n 10034516 -1003441c: dc0d bgt.n 1003443a -1003441e: 2906 cmp r1, #6 -10034420: d046 beq.n 100344b0 -10034422: 2909 cmp r1, #9 -10034424: d05a beq.n 100344dc -10034426: 2905 cmp r1, #5 -10034428: f040 82c6 bne.w 100349b8 -1003442c: f508 6046 add.w r0, r8, #3168 ; 0xc60 -10034430: f108 019c add.w r1, r8, #156 ; 0x9c -10034434: f7f3 ff2e bl 10028294 -10034438: e2be b.n 100349b8 -1003443a: 2913 cmp r1, #19 -1003443c: d07c beq.n 10034538 -1003443e: db6f blt.n 10034520 -10034440: 2917 cmp r1, #23 -10034442: f000 8085 beq.w 10034550 -10034446: e2b7 b.n 100349b8 -10034448: 29cc cmp r1, #204 ; 0xcc -1003444a: f000 80f6 beq.w 1003463a -1003444e: dc09 bgt.n 10034464 -10034450: 29c0 cmp r1, #192 ; 0xc0 -10034452: f000 80cd beq.w 100345f0 -10034456: 29c1 cmp r1, #193 ; 0xc1 -10034458: f000 80d9 beq.w 1003460e -1003445c: 29aa cmp r1, #170 ; 0xaa -1003445e: f040 82ab bne.w 100349b8 -10034462: e0af b.n 100345c4 -10034464: 29dd cmp r1, #221 ; 0xdd -10034466: f000 814d beq.w 10034704 -1003446a: dc03 bgt.n 10034474 -1003446c: 29cd cmp r1, #205 ; 0xcd -1003446e: f000 8114 beq.w 1003469a -10034472: e2a1 b.n 100349b8 -10034474: 29ee cmp r1, #238 ; 0xee -10034476: f000 823e beq.w 100348f6 -1003447a: 29fd cmp r1, #253 ; 0xfd -1003447c: f040 829c bne.w 100349b8 -10034480: f241 63c8 movw r3, #5832 ; 0x16c8 -10034484: fa5f f28a uxtb.w r2, sl -10034488: f44f 6145 mov.w r1, #3152 ; 0xc50 -1003448c: 4640 mov r0, r8 -1003448e: f858 4003 ldr.w r4, [r8, r3] -10034492: f003 fc07 bl 10037ca4 -10034496: f44f 6145 mov.w r1, #3152 ; 0xc50 -1003449a: 4640 mov r0, r8 -1003449c: f003 fbed bl 10037c7a -100344a0: 4601 mov r1, r0 -100344a2: 480d ldr r0, [pc, #52] ; (100344d8 ) -100344a4: f7e6 fb5c bl 1001ab60 -100344a8: 9b04 ldr r3, [sp, #16] -100344aa: f884 379c strb.w r3, [r4, #1948] ; 0x79c -100344ae: e283 b.n 100349b8 -100344b0: 4640 mov r0, r8 -100344b2: aa05 add r2, sp, #20 -100344b4: 2118 movs r1, #24 -100344b6: f7fe f813 bl 100324e0 -100344ba: f004 040f and.w r4, r4, #15 -100344be: 4640 mov r0, r8 -100344c0: 2118 movs r1, #24 -100344c2: aa05 add r2, sp, #20 -100344c4: 9405 str r4, [sp, #20] -100344c6: f7fe f804 bl 100324d2 -100344ca: e275 b.n 100349b8 -100344cc: 10044ec0 .word 0x10044ec0 -100344d0: 10043a4c .word 0x10043a4c -100344d4: 10043c08 .word 0x10043c08 -100344d8: 100421c1 .word 0x100421c1 -100344dc: f608 4678 addw r6, r8, #3192 ; 0xc78 -100344e0: 4630 mov r0, r6 -100344e2: a905 add r1, sp, #20 -100344e4: f7e3 f870 bl 100175c8 -100344e8: 2400 movs r4, #0 -100344ea: eb08 0304 add.w r3, r8, r4 -100344ee: f608 477c addw r7, r8, #3196 ; 0xc7c -100344f2: f8d3 5c7c ldr.w r5, [r3, #3196] ; 0xc7c -100344f6: 4427 add r7, r4 -100344f8: 4638 mov r0, r7 -100344fa: 4629 mov r1, r5 -100344fc: f7e3 f841 bl 10017582 -10034500: b908 cbnz r0, 10034506 -10034502: 682d ldr r5, [r5, #0] -10034504: e7f8 b.n 100344f8 -10034506: 3408 adds r4, #8 -10034508: 2c28 cmp r4, #40 ; 0x28 -1003450a: d1ee bne.n 100344ea -1003450c: 4630 mov r0, r6 -1003450e: a905 add r1, sp, #20 -10034510: f7e3 f864 bl 100175dc -10034514: e250 b.n 100349b8 -10034516: f641 035a movw r3, #6234 ; 0x185a -1003451a: f808 0003 strb.w r0, [r8, r3] -1003451e: e24b b.n 100349b8 -10034520: f508 539c add.w r3, r8, #4992 ; 0x1380 -10034524: 3308 adds r3, #8 -10034526: 2b00 cmp r3, #0 -10034528: f000 8246 beq.w 100349b8 -1003452c: 2803 cmp r0, #3 -1003452e: f200 8243 bhi.w 100349b8 -10034532: f883 0046 strb.w r0, [r3, #70] ; 0x46 -10034536: e23f b.n 100349b8 -10034538: f508 539c add.w r3, r8, #4992 ; 0x1380 -1003453c: 3308 adds r3, #8 -1003453e: 2b00 cmp r3, #0 -10034540: f000 823a beq.w 100349b8 -10034544: 2802 cmp r0, #2 -10034546: f200 8237 bhi.w 100349b8 -1003454a: f883 0045 strb.w r0, [r3, #69] ; 0x45 -1003454e: e233 b.n 100349b8 -10034550: 4b75 ldr r3, [pc, #468] ; (10034728 ) -10034552: 681a ldr r2, [r3, #0] -10034554: 461c mov r4, r3 -10034556: b12a cbz r2, 10034564 -10034558: 4b74 ldr r3, [pc, #464] ; (1003472c ) -1003455a: 4651 mov r1, sl -1003455c: f8d3 00b4 ldr.w r0, [r3, #180] ; 0xb4 -10034560: f7e6 fafe bl 1001ab60 -10034564: f208 5024 addw r0, r8, #1316 ; 0x524 -10034568: 9904 ldr r1, [sp, #16] -1003456a: 2200 movs r2, #0 -1003456c: f7ea f850 bl 1001e610 -10034570: 2801 cmp r0, #1 -10034572: d10b bne.n 1003458c -10034574: f89d 1010 ldrb.w r1, [sp, #16] -10034578: 4640 mov r0, r8 -1003457a: f888 151e strb.w r1, [r8, #1310] ; 0x51e -1003457e: f890 2520 ldrb.w r2, [r0, #1312] ; 0x520 -10034582: f890 351f ldrb.w r3, [r0, #1311] ; 0x51f -10034586: f7f4 f8b9 bl 100286fc -1003458a: e215 b.n 100349b8 -1003458c: 6823 ldr r3, [r4, #0] -1003458e: 2b00 cmp r3, #0 -10034590: f000 8212 beq.w 100349b8 -10034594: 4b65 ldr r3, [pc, #404] ; (1003472c ) -10034596: 9904 ldr r1, [sp, #16] -10034598: f8d3 00b8 ldr.w r0, [r3, #184] ; 0xb8 -1003459c: e20a b.n 100349b4 -1003459e: 4b62 ldr r3, [pc, #392] ; (10034728 ) -100345a0: 681b ldr r3, [r3, #0] -100345a2: b153 cbz r3, 100345ba -100345a4: 4b61 ldr r3, [pc, #388] ; (1003472c ) -100345a6: 4962 ldr r1, [pc, #392] ; (10034730 ) -100345a8: f8d3 00bc ldr.w r0, [r3, #188] ; 0xbc -100345ac: 4b61 ldr r3, [pc, #388] ; (10034734 ) -100345ae: f1ba 0f00 cmp.w sl, #0 -100345b2: bf18 it ne -100345b4: 4619 movne r1, r3 -100345b6: f7e6 fad3 bl 1001ab60 -100345ba: 4640 mov r0, r8 -100345bc: 9904 ldr r1, [sp, #16] -100345be: f7fd fa0b bl 100319d8 -100345c2: e1f9 b.n 100349b8 -100345c4: f000 0a7f and.w sl, r0, #127 ; 0x7f -100345c8: f1ba 0f3f cmp.w sl, #63 ; 0x3f -100345cc: bf84 itt hi -100345ce: 23ff movhi r3, #255 ; 0xff -100345d0: 9304 strhi r3, [sp, #16] -100345d2: 4b55 ldr r3, [pc, #340] ; (10034728 ) -100345d4: 681b ldr r3, [r3, #0] -100345d6: b12b cbz r3, 100345e4 -100345d8: 4b54 ldr r3, [pc, #336] ; (1003472c ) -100345da: 9904 ldr r1, [sp, #16] -100345dc: f8d3 00c0 ldr.w r0, [r3, #192] ; 0xc0 -100345e0: f7e6 fabe bl 1001ab60 -100345e4: 9b04 ldr r3, [sp, #16] -100345e6: f641 0278 movw r2, #6264 ; 0x1878 -100345ea: f808 3002 strb.w r3, [r8, r2] -100345ee: e1e3 b.n 100349b8 -100345f0: 2300 movs r3, #0 -100345f2: 4640 mov r0, r8 -100345f4: 2101 movs r1, #1 -100345f6: aa05 add r2, sp, #20 -100345f8: f7fd ff92 bl 10032520 -100345fc: 4b4a ldr r3, [pc, #296] ; (10034728 ) -100345fe: 681b ldr r3, [r3, #0] -10034600: 2b00 cmp r3, #0 -10034602: f000 81d9 beq.w 100349b8 -10034606: 4b49 ldr r3, [pc, #292] ; (1003472c ) -10034608: f8d3 00c4 ldr.w r0, [r3, #196] ; 0xc4 -1003460c: e013 b.n 10034636 -1003460e: 4640 mov r0, r8 -10034610: 2101 movs r1, #1 -10034612: aa04 add r2, sp, #16 -10034614: 2300 movs r3, #0 -10034616: f7fd ff7c bl 10032512 -1003461a: 2300 movs r3, #0 -1003461c: 4640 mov r0, r8 -1003461e: 2101 movs r1, #1 -10034620: aa05 add r2, sp, #20 -10034622: f7fd ff7d bl 10032520 -10034626: 4b40 ldr r3, [pc, #256] ; (10034728 ) -10034628: 681b ldr r3, [r3, #0] -1003462a: 2b00 cmp r3, #0 -1003462c: f000 81c4 beq.w 100349b8 -10034630: 4b3e ldr r3, [pc, #248] ; (1003472c ) -10034632: f8d3 00c8 ldr.w r0, [r3, #200] ; 0xc8 -10034636: 9905 ldr r1, [sp, #20] -10034638: e1bc b.n 100349b4 -1003463a: 2800 cmp r0, #0 -1003463c: f040 81bc bne.w 100349b8 -10034640: 493d ldr r1, [pc, #244] ; (10034738 ) -10034642: f241 63c8 movw r3, #5832 ; 0x16c8 -10034646: f858 6003 ldr.w r6, [r8, r3] -1003464a: f04f 4280 mov.w r2, #1073741824 ; 0x40000000 -1003464e: 2300 movs r3, #0 -10034650: e9d1 4502 ldrd r4, r5, [r1, #8] -10034654: 432b orrs r3, r5 -10034656: 4322 orrs r2, r4 -10034658: e9c1 2302 strd r2, r3, [r1, #8] -1003465c: 4b32 ldr r3, [pc, #200] ; (10034728 ) -1003465e: 460f mov r7, r1 -10034660: 681b ldr r3, [r3, #0] -10034662: b143 cbz r3, 10034676 -10034664: 4b31 ldr r3, [pc, #196] ; (1003472c ) -10034666: f8d3 00cc ldr.w r0, [r3, #204] ; 0xcc -1003466a: f641 0378 movw r3, #6264 ; 0x1878 -1003466e: f818 1003 ldrb.w r1, [r8, r3] -10034672: f7e6 fa75 bl 1001ab60 -10034676: f641 0378 movw r3, #6264 ; 0x1878 -1003467a: f818 0003 ldrb.w r0, [r8, r3] -1003467e: f7fc ffd3 bl 10031628 -10034682: f896 3034 ldrb.w r3, [r6, #52] ; 0x34 -10034686: b2c2 uxtb r2, r0 -10034688: 9300 str r3, [sp, #0] -1003468a: 4640 mov r0, r8 -1003468c: 2100 movs r1, #0 -1003468e: 6af3 ldr r3, [r6, #44] ; 0x2c -10034690: f7fd fea8 bl 100323e4 -10034694: e9c7 4502 strd r4, r5, [r7, #8] -10034698: e18e b.n 100349b8 -1003469a: 2800 cmp r0, #0 -1003469c: f040 818c bne.w 100349b8 -100346a0: f241 63c8 movw r3, #5832 ; 0x16c8 -100346a4: f858 9003 ldr.w r9, [r8, r3] -100346a8: f8df b08c ldr.w fp, [pc, #140] ; 10034738 -100346ac: f04f 7680 mov.w r6, #16777216 ; 0x1000000 -100346b0: 2700 movs r7, #0 -100346b2: e9db 4502 ldrd r4, r5, [fp, #8] -100346b6: f899 1034 ldrb.w r1, [r9, #52] ; 0x34 -100346ba: 4326 orrs r6, r4 -100346bc: f8d9 202c ldr.w r2, [r9, #44] ; 0x2c -100346c0: 432f orrs r7, r5 -100346c2: 481e ldr r0, [pc, #120] ; (1003473c ) -100346c4: e9cb 6702 strd r6, r7, [fp, #8] -100346c8: f7e6 fa4a bl 1001ab60 -100346cc: 481c ldr r0, [pc, #112] ; (10034740 ) -100346ce: f7e6 fa47 bl 1001ab60 -100346d2: 465e mov r6, fp -100346d4: 4650 mov r0, sl -100346d6: f7fc ffa7 bl 10031628 -100346da: f899 3034 ldrb.w r3, [r9, #52] ; 0x34 -100346de: b2c2 uxtb r2, r0 -100346e0: 9300 str r3, [sp, #0] -100346e2: 4640 mov r0, r8 -100346e4: 2100 movs r1, #0 -100346e6: f8d9 302c ldr.w r3, [r9, #44] ; 0x2c -100346ea: f10a 0a01 add.w sl, sl, #1 -100346ee: f7fd fe79 bl 100323e4 -100346f2: f1ba 0f14 cmp.w sl, #20 -100346f6: d1ed bne.n 100346d4 -100346f8: 4812 ldr r0, [pc, #72] ; (10034744 ) -100346fa: f7e6 fa31 bl 1001ab60 -100346fe: e9c6 4502 strd r4, r5, [r6, #8] -10034702: e159 b.n 100349b8 -10034704: b918 cbnz r0, 1003470e -10034706: 4640 mov r0, r8 -10034708: f7ff fc60 bl 10033fcc -1003470c: e154 b.n 100349b8 -1003470e: 2801 cmp r0, #1 -10034710: d103 bne.n 1003471a -10034712: 4640 mov r0, r8 -10034714: f7ff fcc4 bl 100340a0 -10034718: e14e b.n 100349b8 -1003471a: 2802 cmp r0, #2 -1003471c: d114 bne.n 10034748 -1003471e: 4640 mov r0, r8 -10034720: f7ff fcf8 bl 10034114 -10034724: e148 b.n 100349b8 -10034726: bf00 nop -10034728: 10044ec0 .word 0x10044ec0 -1003472c: 10043a4c .word 0x10043a4c -10034730: 10042122 .word 0x10042122 -10034734: 1003f80c .word 0x1003f80c -10034738: 10000720 .word 0x10000720 -1003473c: 1004212a .word 0x1004212a -10034740: 1004215a .word 0x1004215a -10034744: 10042939 .word 0x10042939 -10034748: 2803 cmp r0, #3 -1003474a: d17d bne.n 10034848 -1003474c: 4c9c ldr r4, [pc, #624] ; (100349c0 ) -1003474e: f241 63c8 movw r3, #5832 ; 0x16c8 -10034752: f858 5003 ldr.w r5, [r8, r3] -10034756: 6823 ldr r3, [r4, #0] -10034758: b123 cbz r3, 10034764 -1003475a: 4b9a ldr r3, [pc, #616] ; (100349c4 ) -1003475c: f8d3 00d0 ldr.w r0, [r3, #208] ; 0xd0 -10034760: f7e6 f9fe bl 1001ab60 -10034764: 6823 ldr r3, [r4, #0] -10034766: b16b cbz r3, 10034784 -10034768: 4b96 ldr r3, [pc, #600] ; (100349c4 ) -1003476a: f640 6108 movw r1, #3592 ; 0xe08 -1003476e: 4640 mov r0, r8 -10034770: f44f 427f mov.w r2, #65280 ; 0xff00 -10034774: f8d3 60d4 ldr.w r6, [r3, #212] ; 0xd4 -10034778: f7fd ff69 bl 1003264e -1003477c: 4601 mov r1, r0 -1003477e: 4630 mov r0, r6 -10034780: f7e6 f9ee bl 1001ab60 -10034784: 6823 ldr r3, [r4, #0] -10034786: b16b cbz r3, 100347a4 -10034788: 4b8e ldr r3, [pc, #568] ; (100349c4 ) -1003478a: f640 016c movw r1, #2156 ; 0x86c -1003478e: 4640 mov r0, r8 -10034790: f06f 02ff mvn.w r2, #255 ; 0xff -10034794: f8d3 60d8 ldr.w r6, [r3, #216] ; 0xd8 -10034798: f7fd ff59 bl 1003264e -1003479c: 4601 mov r1, r0 -1003479e: 4630 mov r0, r6 -100347a0: f7e6 f9de bl 1001ab60 -100347a4: 6823 ldr r3, [r4, #0] -100347a6: b16b cbz r3, 100347c4 -100347a8: 4b86 ldr r3, [pc, #536] ; (100349c4 ) -100347aa: f44f 6160 mov.w r1, #3584 ; 0xe00 -100347ae: 4640 mov r0, r8 -100347b0: f04f 32ff mov.w r2, #4294967295 -100347b4: f8d3 60dc ldr.w r6, [r3, #220] ; 0xdc -100347b8: f7fd ff49 bl 1003264e -100347bc: 4601 mov r1, r0 -100347be: 4630 mov r0, r6 -100347c0: f7e6 f9ce bl 1001ab60 -100347c4: 6823 ldr r3, [r4, #0] -100347c6: b16b cbz r3, 100347e4 -100347c8: 4b7e ldr r3, [pc, #504] ; (100349c4 ) -100347ca: f640 6104 movw r1, #3588 ; 0xe04 -100347ce: 4640 mov r0, r8 -100347d0: f04f 32ff mov.w r2, #4294967295 -100347d4: f8d3 60e0 ldr.w r6, [r3, #224] ; 0xe0 -100347d8: f7fd ff39 bl 1003264e -100347dc: 4601 mov r1, r0 -100347de: 4630 mov r0, r6 -100347e0: f7e6 f9be bl 1001ab60 -100347e4: 6823 ldr r3, [r4, #0] -100347e6: b16b cbz r3, 10034804 -100347e8: 4b76 ldr r3, [pc, #472] ; (100349c4 ) -100347ea: f44f 6161 mov.w r1, #3600 ; 0xe10 -100347ee: 4640 mov r0, r8 -100347f0: f04f 32ff mov.w r2, #4294967295 -100347f4: f8d3 60e4 ldr.w r6, [r3, #228] ; 0xe4 -100347f8: f7fd ff29 bl 1003264e -100347fc: 4601 mov r1, r0 -100347fe: 4630 mov r0, r6 -10034800: f7e6 f9ae bl 1001ab60 -10034804: 6823 ldr r3, [r4, #0] -10034806: b16b cbz r3, 10034824 -10034808: 4b6e ldr r3, [pc, #440] ; (100349c4 ) -1003480a: f640 6114 movw r1, #3604 ; 0xe14 -1003480e: 4640 mov r0, r8 -10034810: f04f 32ff mov.w r2, #4294967295 -10034814: f8d3 60e8 ldr.w r6, [r3, #232] ; 0xe8 -10034818: f7fd ff19 bl 1003264e -1003481c: 4601 mov r1, r0 -1003481e: 4630 mov r0, r6 -10034820: f7e6 f99e bl 1001ab60 -10034824: 6823 ldr r3, [r4, #0] -10034826: b133 cbz r3, 10034836 -10034828: 4b66 ldr r3, [pc, #408] ; (100349c4 ) -1003482a: f898 149e ldrb.w r1, [r8, #1182] ; 0x49e -1003482e: f8d3 00ec ldr.w r0, [r3, #236] ; 0xec -10034832: f7e6 f995 bl 1001ab60 -10034836: 6823 ldr r3, [r4, #0] -10034838: 2b00 cmp r3, #0 -1003483a: f000 80bd beq.w 100349b8 -1003483e: 4b62 ldr r3, [pc, #392] ; (100349c8 ) -10034840: f895 103e ldrb.w r1, [r5, #62] ; 0x3e -10034844: 69d8 ldr r0, [r3, #28] -10034846: e0b5 b.n 100349b4 -10034848: 2804 cmp r0, #4 -1003484a: d13a bne.n 100348c2 -1003484c: f44f 7000 mov.w r0, #512 ; 0x200 -10034850: f7e2 ffae bl 100177b0 -10034854: 4606 mov r6, r0 -10034856: 2800 cmp r0, #0 -10034858: f000 80ae beq.w 100349b8 -1003485c: 2500 movs r5, #0 -1003485e: 9500 str r5, [sp, #0] -10034860: 4640 mov r0, r8 -10034862: 4629 mov r1, r5 -10034864: f44f 7200 mov.w r2, #512 ; 0x200 -10034868: 4633 mov r3, r6 -1003486a: f7f8 fde3 bl 1002d434 -1003486e: 2801 cmp r0, #1 -10034870: d005 beq.n 1003487e -10034872: 4630 mov r0, r6 -10034874: f44f 7100 mov.w r1, #512 ; 0x200 -10034878: f7e2 fdc7 bl 1001740a -1003487c: e09c b.n 100349b8 -1003487e: 4853 ldr r0, [pc, #332] ; (100349cc ) -10034880: f7e6 f96e bl 1001ab60 -10034884: 4852 ldr r0, [pc, #328] ; (100349d0 ) -10034886: 4629 mov r1, r5 -10034888: f7e6 f96a bl 1001ab60 -1003488c: 2400 movs r4, #0 -1003488e: 1977 adds r7, r6, r5 -10034890: 5d39 ldrb r1, [r7, r4] -10034892: 4850 ldr r0, [pc, #320] ; (100349d4 ) -10034894: 3401 adds r4, #1 -10034896: f7e6 f963 bl 1001ab60 -1003489a: 2c08 cmp r4, #8 -1003489c: d1f7 bne.n 1003488e -1003489e: 484e ldr r0, [pc, #312] ; (100349d8 ) -100348a0: f7e6 f95e bl 1001ab60 -100348a4: 5d39 ldrb r1, [r7, r4] -100348a6: 484b ldr r0, [pc, #300] ; (100349d4 ) -100348a8: 3401 adds r4, #1 -100348aa: f7e6 f959 bl 1001ab60 -100348ae: 2c10 cmp r4, #16 -100348b0: d1f8 bne.n 100348a4 -100348b2: 4846 ldr r0, [pc, #280] ; (100349cc ) -100348b4: 3510 adds r5, #16 -100348b6: f7e6 f953 bl 1001ab60 -100348ba: f5b5 7f00 cmp.w r5, #512 ; 0x200 -100348be: d1e1 bne.n 10034884 -100348c0: e7d7 b.n 10034872 -100348c2: 2805 cmp r0, #5 -100348c4: d178 bne.n 100349b8 -100348c6: 2400 movs r4, #0 -100348c8: f10d 010e add.w r1, sp, #14 -100348cc: 4640 mov r0, r8 -100348ce: f8ad 400e strh.w r4, [sp, #14] -100348d2: f8ad 4014 strh.w r4, [sp, #20] -100348d6: f002 fda4 bl 10037422 -100348da: 4640 mov r0, r8 -100348dc: 4621 mov r1, r4 -100348de: ab05 add r3, sp, #20 -100348e0: 9400 str r4, [sp, #0] -100348e2: 2203 movs r2, #3 -100348e4: f002 fd32 bl 1003734c -100348e8: f8bd 1014 ldrh.w r1, [sp, #20] -100348ec: f8bd 300e ldrh.w r3, [sp, #14] -100348f0: 483a ldr r0, [pc, #232] ; (100349dc ) -100348f2: 1ac9 subs r1, r1, r3 -100348f4: e05e b.n 100349b4 -100348f6: 280f cmp r0, #15 -100348f8: 4c31 ldr r4, [pc, #196] ; (100349c0 ) -100348fa: d145 bne.n 10034988 -100348fc: 4640 mov r0, r8 -100348fe: 2109 movs r1, #9 -10034900: aa05 add r2, sp, #20 -10034902: f7fd fdfd bl 10032500 -10034906: 6823 ldr r3, [r4, #0] -10034908: b12b cbz r3, 10034916 -1003490a: 4b2e ldr r3, [pc, #184] ; (100349c4 ) -1003490c: 9905 ldr r1, [sp, #20] -1003490e: f8d3 00f0 ldr.w r0, [r3, #240] ; 0xf0 -10034912: f7e6 f925 bl 1001ab60 -10034916: 6823 ldr r3, [r4, #0] -10034918: b123 cbz r3, 10034924 -1003491a: 4b2a ldr r3, [pc, #168] ; (100349c4 ) -1003491c: f8d3 00f4 ldr.w r0, [r3, #244] ; 0xf4 -10034920: f7e6 f91e bl 1001ab60 -10034924: 6823 ldr r3, [r4, #0] -10034926: b123 cbz r3, 10034932 -10034928: 4b26 ldr r3, [pc, #152] ; (100349c4 ) -1003492a: f8d3 00f8 ldr.w r0, [r3, #248] ; 0xf8 -1003492e: f7e6 f917 bl 1001ab60 -10034932: 6823 ldr r3, [r4, #0] -10034934: b123 cbz r3, 10034940 -10034936: 4b23 ldr r3, [pc, #140] ; (100349c4 ) -10034938: f8d3 00fc ldr.w r0, [r3, #252] ; 0xfc -1003493c: f7e6 f910 bl 1001ab60 -10034940: 6823 ldr r3, [r4, #0] -10034942: b123 cbz r3, 1003494e -10034944: 4b1f ldr r3, [pc, #124] ; (100349c4 ) -10034946: f8d3 0100 ldr.w r0, [r3, #256] ; 0x100 -1003494a: f7e6 f909 bl 1001ab60 -1003494e: 6823 ldr r3, [r4, #0] -10034950: b123 cbz r3, 1003495c -10034952: 4b1c ldr r3, [pc, #112] ; (100349c4 ) -10034954: f8d3 0104 ldr.w r0, [r3, #260] ; 0x104 -10034958: f7e6 f902 bl 1001ab60 -1003495c: 6823 ldr r3, [r4, #0] -1003495e: b123 cbz r3, 1003496a -10034960: 4b18 ldr r3, [pc, #96] ; (100349c4 ) -10034962: f8d3 0108 ldr.w r0, [r3, #264] ; 0x108 -10034966: f7e6 f8fb bl 1001ab60 -1003496a: 6823 ldr r3, [r4, #0] -1003496c: b123 cbz r3, 10034978 -1003496e: 4b15 ldr r3, [pc, #84] ; (100349c4 ) -10034970: f8d3 010c ldr.w r0, [r3, #268] ; 0x10c -10034974: f7e6 f8f4 bl 1001ab60 -10034978: 6823 ldr r3, [r4, #0] -1003497a: b1eb cbz r3, 100349b8 -1003497c: 4b11 ldr r3, [pc, #68] ; (100349c4 ) -1003497e: f8d3 0110 ldr.w r0, [r3, #272] ; 0x110 -10034982: f7e6 f8ed bl 1001ab60 -10034986: e017 b.n 100349b8 -10034988: f241 63c8 movw r3, #5832 ; 0x16c8 -1003498c: 2109 movs r1, #9 -1003498e: aa04 add r2, sp, #16 -10034990: 4640 mov r0, r8 -10034992: f858 5003 ldr.w r5, [r8, r3] -10034996: f7fd fdaa bl 100324ee -1003499a: 2109 movs r1, #9 -1003499c: 4640 mov r0, r8 -1003499e: aa05 add r2, sp, #20 -100349a0: f7fd fdae bl 10032500 -100349a4: 9905 ldr r1, [sp, #20] -100349a6: 6823 ldr r3, [r4, #0] -100349a8: f8c5 11b0 str.w r1, [r5, #432] ; 0x1b0 -100349ac: b123 cbz r3, 100349b8 -100349ae: 4b05 ldr r3, [pc, #20] ; (100349c4 ) -100349b0: f8d3 00f0 ldr.w r0, [r3, #240] ; 0xf0 -100349b4: f7e6 f8d4 bl 1001ab60 -100349b8: 2000 movs r0, #0 -100349ba: b007 add sp, #28 -100349bc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -100349c0: 10044ec0 .word 0x10044ec0 -100349c4: 10043a4c .word 0x10043a4c -100349c8: 10043c08 .word 0x10043c08 -100349cc: 10042939 .word 0x10042939 -100349d0: 10042193 .word 0x10042193 -100349d4: 1004219b .word 0x1004219b -100349d8: 10042199 .word 0x10042199 -100349dc: 100421a1 .word 0x100421a1 - -100349e0 : -100349e0: 1e43 subs r3, r0, #1 -100349e2: 2b02 cmp r3, #2 -100349e4: d804 bhi.n 100349f0 -100349e6: 4b04 ldr r3, [pc, #16] ; (100349f8 ) -100349e8: 3002 adds r0, #2 -100349ea: 7018 strb r0, [r3, #0] -100349ec: 2000 movs r0, #0 -100349ee: 4770 bx lr -100349f0: f04f 30ff mov.w r0, #4294967295 -100349f4: 4770 bx lr -100349f6: bf00 nop -100349f8: 10044f45 .word 0x10044f45 - -100349fc : -100349fc: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} -10034a00: 4698 mov r8, r3 -10034a02: 6903 ldr r3, [r0, #16] -10034a04: 6810 ldr r0, [r2, #0] -10034a06: 681c ldr r4, [r3, #0] -10034a08: 2300 movs r3, #0 -10034a0a: 9303 str r3, [sp, #12] -10034a0c: f241 73c8 movw r3, #6088 ; 0x17c8 -10034a10: 5ce5 ldrb r5, [r4, r3] -10034a12: f504 569c add.w r6, r4, #4992 ; 0x1380 -10034a16: 1e6b subs r3, r5, #1 -10034a18: 425d negs r5, r3 -10034a1a: f106 0608 add.w r6, r6, #8 -10034a1e: 415d adcs r5, r3 -10034a20: f896 306e ldrb.w r3, [r6, #110] ; 0x6e -10034a24: b10b cbz r3, 10034a2a -10034a26: f045 0502 orr.w r5, r5, #2 -10034a2a: 491e ldr r1, [pc, #120] ; (10034aa4 ) -10034a2c: aa03 add r2, sp, #12 -10034a2e: f009 f9ab bl 1003dd88 -10034a32: 9f03 ldr r7, [sp, #12] -10034a34: bb87 cbnz r7, 10034a98 -10034a36: f241 63c8 movw r3, #5832 ; 0x16c8 -10034a3a: f854 9003 ldr.w r9, [r4, r3] -10034a3e: f004 f8eb bl 10038c18 -10034a42: f241 73c8 movw r3, #6088 ; 0x17c8 -10034a46: 5ce1 ldrb r1, [r4, r3] -10034a48: 4682 mov sl, r0 -10034a4a: 4817 ldr r0, [pc, #92] ; (10034aa8 ) -10034a4c: f7e6 f888 bl 1001ab60 -10034a50: f241 63a4 movw r3, #5796 ; 0x16a4 -10034a54: 5ce2 ldrb r2, [r4, r3] -10034a56: f896 106e ldrb.w r1, [r6, #110] ; 0x6e -10034a5a: 4814 ldr r0, [pc, #80] ; (10034aac ) -10034a5c: f7e6 f880 bl 1001ab60 -10034a60: fa5f f18a uxtb.w r1, sl -10034a64: 4812 ldr r0, [pc, #72] ; (10034ab0 ) -10034a66: f7e6 f87b bl 1001ab60 -10034a6a: f10d 030b add.w r3, sp, #11 -10034a6e: 9700 str r7, [sp, #0] -10034a70: 4620 mov r0, r4 -10034a72: 21c8 movs r1, #200 ; 0xc8 -10034a74: 2201 movs r2, #1 -10034a76: f7f8 fcdd bl 1002d434 -10034a7a: f894 149e ldrb.w r1, [r4, #1182] ; 0x49e -10034a7e: f89d 200b ldrb.w r2, [sp, #11] -10034a82: f899 3045 ldrb.w r3, [r9, #69] ; 0x45 -10034a86: 480b ldr r0, [pc, #44] ; (10034ab4 ) -10034a88: f7e6 f86a bl 1001ab60 -10034a8c: 4640 mov r0, r8 -10034a8e: 490a ldr r1, [pc, #40] ; (10034ab8 ) -10034a90: 462a mov r2, r5 -10034a92: f7e6 f83f bl 1001ab14 -10034a96: e000 b.n 10034a9a -10034a98: 603d str r5, [r7, #0] -10034a9a: 2000 movs r0, #0 -10034a9c: b004 add sp, #16 -10034a9e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10034aa2: bf00 nop -10034aa4: 10042074 .word 0x10042074 -10034aa8: 100421d1 .word 0x100421d1 -10034aac: 100421e0 .word 0x100421e0 -10034ab0: 100421f3 .word 0x100421f3 -10034ab4: 10042204 .word 0x10042204 -10034ab8: 10042085 .word 0x10042085 - -10034abc : -10034abc: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -10034ac0: 4615 mov r5, r2 -10034ac2: 461e mov r6, r3 -10034ac4: 88d3 ldrh r3, [r2, #6] -10034ac6: 6902 ldr r2, [r0, #16] -10034ac8: b087 sub sp, #28 -10034aca: 6814 ldr r4, [r2, #0] -10034acc: 2c00 cmp r4, #0 -10034ace: f000 80af beq.w 10034c30 -10034ad2: b91e cbnz r6, 10034adc -10034ad4: 80ae strh r6, [r5, #4] -10034ad6: f06f 0004 mvn.w r0, #4 -10034ada: e126 b.n 10034d2a -10034adc: 3b02 subs r3, #2 -10034ade: 2b07 cmp r3, #7 -10034ae0: f200 80a0 bhi.w 10034c24 -10034ae4: e8df f003 tbb [pc, r3] -10034ae8: 524d0430 .word 0x524d0430 -10034aec: 615b9e57 .word 0x615b9e57 -10034af0: 88ac ldrh r4, [r5, #4] -10034af2: 2300 movs r3, #0 -10034af4: 4620 mov r0, r4 -10034af6: 9304 str r3, [sp, #16] -10034af8: 9305 str r3, [sp, #20] -10034afa: f7e2 fe49 bl 10017790 -10034afe: 4607 mov r7, r0 -10034b00: b1f8 cbz r0, 10034b42 -10034b02: 6829 ldr r1, [r5, #0] -10034b04: 88aa ldrh r2, [r5, #4] -10034b06: f7e2 fc83 bl 10017410 -10034b0a: 4638 mov r0, r7 -10034b0c: 4988 ldr r1, [pc, #544] ; (10034d30 ) -10034b0e: aa04 add r2, sp, #16 -10034b10: ab05 add r3, sp, #20 -10034b12: f009 f939 bl 1003dd88 -10034b16: 3001 adds r0, #1 -10034b18: 4630 mov r0, r6 -10034b1a: d103 bne.n 10034b24 -10034b1c: 4985 ldr r1, [pc, #532] ; (10034d34 ) -10034b1e: 220c movs r2, #12 -10034b20: 2322 movs r3, #34 ; 0x22 -10034b22: e002 b.n 10034b2a -10034b24: 4984 ldr r1, [pc, #528] ; (10034d38 ) -10034b26: 9a04 ldr r2, [sp, #16] -10034b28: 9b05 ldr r3, [sp, #20] -10034b2a: f7e5 fff3 bl 1001ab14 -10034b2e: 4630 mov r0, r6 -10034b30: f7e6 f852 bl 1001abd8 -10034b34: 3001 adds r0, #1 -10034b36: 80a8 strh r0, [r5, #4] -10034b38: 4621 mov r1, r4 -10034b3a: 4638 mov r0, r7 -10034b3c: f7e2 fc65 bl 1001740a -10034b40: e070 b.n 10034c24 -10034b42: f06f 040b mvn.w r4, #11 -10034b46: e06e b.n 10034c26 -10034b48: f241 419b movw r1, #5275 ; 0x149b -10034b4c: 5c61 ldrb r1, [r4, r1] -10034b4e: f241 4399 movw r3, #5273 ; 0x1499 -10034b52: 5ce2 ldrb r2, [r4, r3] -10034b54: f241 439a movw r3, #5274 ; 0x149a -10034b58: 5ce3 ldrb r3, [r4, r3] -10034b5a: 9100 str r1, [sp, #0] -10034b5c: f241 419c movw r1, #5276 ; 0x149c -10034b60: 5c61 ldrb r1, [r4, r1] -10034b62: 4630 mov r0, r6 -10034b64: 9101 str r1, [sp, #4] -10034b66: f241 419d movw r1, #5277 ; 0x149d -10034b6a: 5c61 ldrb r1, [r4, r1] -10034b6c: 9102 str r1, [sp, #8] -10034b6e: f241 419e movw r1, #5278 ; 0x149e -10034b72: 5c61 ldrb r1, [r4, r1] -10034b74: 9103 str r1, [sp, #12] -10034b76: 4971 ldr r1, [pc, #452] ; (10034d3c ) -10034b78: f7e5 ffcc bl 1001ab14 -10034b7c: 2312 movs r3, #18 -10034b7e: 80ab strh r3, [r5, #4] -10034b80: e050 b.n 10034c24 -10034b82: 6923 ldr r3, [r4, #16] -10034b84: 6828 ldr r0, [r5, #0] -10034b86: 06de lsls r6, r3, #27 -10034b88: d455 bmi.n 10034c36 -10034b8a: e035 b.n 10034bf8 -10034b8c: 6923 ldr r3, [r4, #16] -10034b8e: 6828 ldr r0, [r5, #0] -10034b90: 06d9 lsls r1, r3, #27 -10034b92: d426 bmi.n 10034be2 -10034b94: e030 b.n 10034bf8 -10034b96: 6923 ldr r3, [r4, #16] -10034b98: 06db lsls r3, r3, #27 -10034b9a: d430 bmi.n 10034bfe -10034b9c: e02c b.n 10034bf8 -10034b9e: 462a mov r2, r5 -10034ba0: 4633 mov r3, r6 -10034ba2: f7ff ff2b bl 100349fc -10034ba6: 4604 mov r4, r0 -10034ba8: e03d b.n 10034c26 -10034baa: 2100 movs r1, #0 -10034bac: 2210 movs r2, #16 -10034bae: 4b64 ldr r3, [pc, #400] ; (10034d40 ) -10034bb0: 4630 mov r0, r6 -10034bb2: 4798 blx r3 -10034bb4: 2700 movs r7, #0 -10034bb6: ab06 add r3, sp, #24 -10034bb8: f803 0d04 strb.w r0, [r3, #-4]! -10034bbc: 21c8 movs r1, #200 ; 0xc8 -10034bbe: 9700 str r7, [sp, #0] -10034bc0: 4620 mov r0, r4 -10034bc2: 2201 movs r2, #1 -10034bc4: f7f8 fc36 bl 1002d434 -10034bc8: b1b0 cbz r0, 10034bf8 -10034bca: 495e ldr r1, [pc, #376] ; (10034d44 ) -10034bcc: f89d 2014 ldrb.w r2, [sp, #20] -10034bd0: 4630 mov r0, r6 -10034bd2: f7e5 ff9f bl 1001ab14 -10034bd6: 4630 mov r0, r6 -10034bd8: f7e5 fffe bl 1001abd8 -10034bdc: 463c mov r4, r7 -10034bde: 80a8 strh r0, [r5, #4] -10034be0: e021 b.n 10034c26 -10034be2: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 -10034be6: 2b04 cmp r3, #4 -10034be8: d106 bne.n 10034bf8 -10034bea: 4957 ldr r1, [pc, #348] ; (10034d48 ) -10034bec: aa05 add r2, sp, #20 -10034bee: f009 f8cb bl 1003dd88 -10034bf2: 9805 ldr r0, [sp, #20] -10034bf4: 2800 cmp r0, #0 -10034bf6: d152 bne.n 10034c9e -10034bf8: f04f 34ff mov.w r4, #4294967295 -10034bfc: e013 b.n 10034c26 -10034bfe: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 -10034c02: 2b04 cmp r3, #4 -10034c04: d1f8 bne.n 10034bf8 -10034c06: f241 036c movw r3, #4204 ; 0x106c -10034c0a: 58e3 ldr r3, [r4, r3] -10034c0c: 4a4f ldr r2, [pc, #316] ; (10034d4c ) -10034c0e: 2b07 cmp r3, #7 -10034c10: 494f ldr r1, [pc, #316] ; (10034d50 ) -10034c12: bf18 it ne -10034c14: 2200 movne r2, #0 -10034c16: 4630 mov r0, r6 -10034c18: f7e5 ff7c bl 1001ab14 -10034c1c: 4630 mov r0, r6 -10034c1e: f7e5 ffdb bl 1001abd8 -10034c22: 80a8 strh r0, [r5, #4] -10034c24: 2400 movs r4, #0 -10034c26: 200a movs r0, #10 -10034c28: f7e2 fd14 bl 10017654 -10034c2c: 4620 mov r0, r4 -10034c2e: e07c b.n 10034d2a -10034c30: f06f 0063 mvn.w r0, #99 ; 0x63 -10034c34: e079 b.n 10034d2a -10034c36: 4947 ldr r1, [pc, #284] ; (10034d54 ) -10034c38: aa04 add r2, sp, #16 -10034c3a: f009 f8a5 bl 1003dd88 -10034c3e: 9b04 ldr r3, [sp, #16] -10034c40: 2b00 cmp r3, #0 -10034c42: d0d9 beq.n 10034bf8 -10034c44: f604 48d4 addw r8, r4, #3284 ; 0xcd4 -10034c48: 4640 mov r0, r8 -10034c4a: a905 add r1, sp, #20 -10034c4c: f7e2 fcbc bl 100175c8 -10034c50: f604 49c4 addw r9, r4, #3268 ; 0xcc4 -10034c54: f8d4 6cc4 ldr.w r6, [r4, #3268] ; 0xcc4 -10034c58: 2400 movs r4, #0 -10034c5a: 4648 mov r0, r9 -10034c5c: 4631 mov r1, r6 -10034c5e: f7e2 fc90 bl 10017582 -10034c62: b988 cbnz r0, 10034c88 -10034c64: 9804 ldr r0, [sp, #16] -10034c66: 2206 movs r2, #6 -10034c68: fb02 0004 mla r0, r2, r4, r0 -10034c6c: f5a6 718a sub.w r1, r6, #276 ; 0x114 -10034c70: 3004 adds r0, #4 -10034c72: f7e2 fbcd bl 10017410 -10034c76: 9b04 ldr r3, [sp, #16] -10034c78: 1c67 adds r7, r4, #1 -10034c7a: 681b ldr r3, [r3, #0] -10034c7c: 429f cmp r7, r3 -10034c7e: d202 bcs.n 10034c86 -10034c80: 6836 ldr r6, [r6, #0] -10034c82: 463c mov r4, r7 -10034c84: e7e9 b.n 10034c5a -10034c86: 463c mov r4, r7 -10034c88: 4640 mov r0, r8 -10034c8a: a905 add r1, sp, #20 -10034c8c: f7e2 fca6 bl 100175dc -10034c90: 9b04 ldr r3, [sp, #16] -10034c92: 681a ldr r2, [r3, #0] -10034c94: 42a2 cmp r2, r4 -10034c96: bf94 ite ls -10034c98: 601a strls r2, [r3, #0] -10034c9a: 601c strhi r4, [r3, #0] -10034c9c: e03b b.n 10034d16 -10034c9e: 2300 movs r3, #0 -10034ca0: 2264 movs r2, #100 ; 0x64 -10034ca2: f504 51a4 add.w r1, r4, #5248 ; 0x1480 -10034ca6: e880 000c stmia.w r0, {r2, r3} -10034caa: 3119 adds r1, #25 -10034cac: 2206 movs r2, #6 -10034cae: 3008 adds r0, #8 -10034cb0: f7e2 fbae bl 10017410 -10034cb4: 9e05 ldr r6, [sp, #20] -10034cb6: f8d4 30dc ldr.w r3, [r4, #220] ; 0xdc -10034cba: f504 708a add.w r0, r4, #276 ; 0x114 -10034cbe: 81f3 strh r3, [r6, #14] -10034cc0: f7e8 fc76 bl 1001d5b0 -10034cc4: 8803 ldrh r3, [r0, #0] -10034cc6: 9805 ldr r0, [sp, #20] -10034cc8: 8233 strh r3, [r6, #16] -10034cca: f8d4 30e0 ldr.w r3, [r4, #224] ; 0xe0 -10034cce: 3013 adds r0, #19 -10034cd0: f8a0 3021 strh.w r3, [r0, #33] ; 0x21 -10034cd4: f104 01a8 add.w r1, r4, #168 ; 0xa8 -10034cd8: f8d4 20a4 ldr.w r2, [r4, #164] ; 0xa4 -10034cdc: f7e2 fb98 bl 10017410 -10034ce0: 9b05 ldr r3, [sp, #20] -10034ce2: f8d4 20a4 ldr.w r2, [r4, #164] ; 0xa4 -10034ce6: f103 0040 add.w r0, r3, #64 ; 0x40 -10034cea: 749a strb r2, [r3, #18] -10034cec: f8d4 20e4 ldr.w r2, [r4, #228] ; 0xe4 -10034cf0: f883 2033 strb.w r2, [r3, #51] ; 0x33 -10034cf4: f8d4 20d0 ldr.w r2, [r4, #208] ; 0xd0 -10034cf8: f8b4 1462 ldrh.w r1, [r4, #1122] ; 0x462 -10034cfc: 871a strh r2, [r3, #56] ; 0x38 -10034cfe: b169 cbz r1, 10034d1c -10034d00: 2201 movs r2, #1 -10034d02: f883 203a strb.w r2, [r3, #58] ; 0x3a -10034d06: f8b4 2462 ldrh.w r2, [r4, #1122] ; 0x462 -10034d0a: f204 4165 addw r1, r4, #1125 ; 0x465 -10034d0e: 63da str r2, [r3, #60] ; 0x3c -10034d10: 2210 movs r2, #16 -10034d12: f7e2 fb7d bl 10017410 -10034d16: 2400 movs r4, #0 -10034d18: 80ac strh r4, [r5, #4] -10034d1a: e784 b.n 10034c26 -10034d1c: f883 103a strb.w r1, [r3, #58] ; 0x3a -10034d20: 63d9 str r1, [r3, #60] ; 0x3c -10034d22: 2210 movs r2, #16 -10034d24: f7e2 fb84 bl 10017430 -10034d28: e7f5 b.n 10034d16 -10034d2a: b007 add sp, #28 -10034d2c: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -10034d30: 1004222c .word 0x1004222c -10034d34: 1004223e .word 0x1004223e -10034d38: 10042244 .word 0x10042244 -10034d3c: 1003f930 .word 0x1003f930 -10034d40: 0000f965 .word 0x0000f965 -10034d44: 10042861 .word 0x10042861 -10034d48: 10042074 .word 0x10042074 -10034d4c: 00400004 .word 0x00400004 -10034d50: 1004052a .word 0x1004052a -10034d54: 1003f79b .word 0x1003f79b - -10034d58 : -10034d58: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10034d5c: 6903 ldr r3, [r0, #16] -10034d5e: 460c mov r4, r1 -10034d60: f648 311b movw r1, #35611 ; 0x8b1b -10034d64: 428a cmp r2, r1 -10034d66: b09d sub sp, #116 ; 0x74 -10034d68: 4680 mov r8, r0 -10034d6a: 681d ldr r5, [r3, #0] -10034d6c: f000 81be beq.w 100350ec -10034d70: dc44 bgt.n 10034dfc -10034d72: f648 3109 movw r1, #35593 ; 0x8b09 -10034d76: 428a cmp r2, r1 -10034d78: f000 8412 beq.w 100355a0 -10034d7c: dc21 bgt.n 10034dc2 -10034d7e: f648 3105 movw r1, #35589 ; 0x8b05 -10034d82: 428a cmp r2, r1 -10034d84: f000 8456 beq.w 10035634 -10034d88: dc0f bgt.n 10034daa -10034d8a: f648 11f0 movw r1, #35312 ; 0x89f0 -10034d8e: 428a cmp r2, r1 -10034d90: f000 8703 beq.w 10035b9a -10034d94: f648 3104 movw r1, #35588 ; 0x8b04 -10034d98: 428a cmp r2, r1 -10034d9a: f040 8756 bne.w 10035c4a -10034d9e: 4618 mov r0, r3 -10034da0: 7da1 ldrb r1, [r4, #22] -10034da2: f7fe fe11 bl 100339c8 -10034da6: f000 bcf2 b.w 1003578e -10034daa: f648 3306 movw r3, #35590 ; 0x8b06 -10034dae: 429a cmp r2, r3 -10034db0: f000 83ae beq.w 10035510 -10034db4: f648 3307 movw r3, #35591 ; 0x8b07 -10034db8: 429a cmp r2, r3 -10034dba: f000 83e4 beq.w 10035586 -10034dbe: f000 bf44 b.w 10035c4a -10034dc2: f648 3318 movw r3, #35608 ; 0x8b18 -10034dc6: 429a cmp r2, r3 -10034dc8: f000 843d beq.w 10035646 -10034dcc: dc0a bgt.n 10034de4 -10034dce: f648 3314 movw r3, #35604 ; 0x8b14 -10034dd2: 429a cmp r2, r3 -10034dd4: d060 beq.n 10034e98 -10034dd6: f648 3315 movw r3, #35605 ; 0x8b15 -10034dda: 429a cmp r2, r3 -10034ddc: f000 80d9 beq.w 10034f92 -10034de0: f000 bf33 b.w 10035c4a -10034de4: f648 3319 movw r3, #35609 ; 0x8b19 -10034de8: 429a cmp r2, r3 -10034dea: f000 8455 beq.w 10035698 -10034dee: f648 331a movw r3, #35610 ; 0x8b1a -10034df2: 429a cmp r2, r3 -10034df4: f000 80de beq.w 10034fb4 -10034df8: f000 bf27 b.w 10035c4a -10034dfc: f648 3338 movw r3, #35640 ; 0x8b38 -10034e00: 429a cmp r2, r3 -10034e02: f000 868e beq.w 10035b22 -10034e06: dc23 bgt.n 10034e50 -10034e08: f648 3334 movw r3, #35636 ; 0x8b34 -10034e0c: 429a cmp r2, r3 -10034e0e: f000 81f6 beq.w 100351fe -10034e12: dc0b bgt.n 10034e2c -10034e14: f648 3330 movw r3, #35632 ; 0x8b30 -10034e18: 429a cmp r2, r3 -10034e1a: f000 84bb beq.w 10035794 -10034e1e: f648 3332 movw r3, #35634 ; 0x8b32 -10034e22: 429a cmp r2, r3 -10034e24: f000 8172 beq.w 1003510c -10034e28: f000 bf0f b.w 10035c4a -10034e2c: f648 3335 movw r3, #35637 ; 0x8b35 -10034e30: 429a cmp r2, r3 -10034e32: f000 82fe beq.w 10035432 -10034e36: f648 3337 movw r3, #35639 ; 0x8b37 -10034e3a: 429a cmp r2, r3 -10034e3c: f040 8705 bne.w 10035c4a -10034e40: 4628 mov r0, r5 -10034e42: 6921 ldr r1, [r4, #16] -10034e44: 8aa2 ldrh r2, [r4, #20] -10034e46: 8ae3 ldrh r3, [r4, #22] -10034e48: f7e9 fd4c bl 1001e8e4 -10034e4c: f000 bc9f b.w 1003578e -10034e50: f648 33fd movw r3, #35837 ; 0x8bfd -10034e54: 429a cmp r2, r3 -10034e56: f000 83af beq.w 100355b8 -10034e5a: dc11 bgt.n 10034e80 -10034e5c: f648 33fb movw r3, #35835 ; 0x8bfb -10034e60: 429a cmp r2, r3 -10034e62: f000 868d beq.w 10035b80 -10034e66: f648 33fc movw r3, #35836 ; 0x8bfc -10034e6a: 429a cmp r2, r3 -10034e6c: f040 86ed bne.w 10035c4a -10034e70: 2100 movs r1, #0 -10034e72: f104 0210 add.w r2, r4, #16 -10034e76: 6923 ldr r3, [r4, #16] -10034e78: f7ff f808 bl 10033e8c -10034e7c: f000 bc87 b.w 1003578e -10034e80: f648 33fe movw r3, #35838 ; 0x8bfe -10034e84: 429a cmp r2, r3 -10034e86: f000 8384 beq.w 10035592 -10034e8a: f648 33ff movw r3, #35839 ; 0x8bff -10034e8e: 429a cmp r2, r3 -10034e90: f000 8302 beq.w 10035498 -10034e94: f000 bed9 b.w 10035c4a -10034e98: 2300 movs r3, #0 -10034e9a: f885 386c strb.w r3, [r5, #2156] ; 0x86c -10034e9e: 4628 mov r0, r5 -10034ea0: f44f 6108 mov.w r1, #2176 ; 0x880 -10034ea4: f7e9 fb62 bl 1001e56c -10034ea8: 2801 cmp r0, #1 -10034eaa: f000 846c beq.w 10035786 -10034eae: 4628 mov r0, r5 -10034eb0: f44f 61fa mov.w r1, #2000 ; 0x7d0 -10034eb4: 4ab0 ldr r2, [pc, #704] ; (10035178 ) -10034eb6: f7f1 fb48 bl 1002654a <_rtw_pwr_wakeup> -10034eba: 2800 cmp r0, #0 -10034ebc: f000 80fa beq.w 100350b4 -10034ec0: f641 0338 movw r3, #6200 ; 0x1838 -10034ec4: 58eb ldr r3, [r5, r3] -10034ec6: 2b00 cmp r3, #0 -10034ec8: f000 80f4 beq.w 100350b4 -10034ecc: 7c63 ldrb r3, [r4, #17] -10034ece: 2b01 cmp r3, #1 -10034ed0: f040 8459 bne.w 10035786 -10034ed4: f994 3012 ldrsb.w r3, [r4, #18] -10034ed8: bb1b cbnz r3, 10034f22 -10034eda: f994 3013 ldrsb.w r3, [r4, #19] -10034ede: bb03 cbnz r3, 10034f22 -10034ee0: f994 3014 ldrsb.w r3, [r4, #20] -10034ee4: b9eb cbnz r3, 10034f22 -10034ee6: f994 3015 ldrsb.w r3, [r4, #21] -10034eea: b9d3 cbnz r3, 10034f22 -10034eec: f994 7016 ldrsb.w r7, [r4, #22] -10034ef0: b9bf cbnz r7, 10034f22 -10034ef2: f994 6017 ldrsb.w r6, [r4, #23] -10034ef6: 2e01 cmp r6, #1 -10034ef8: d113 bne.n 10034f22 -10034efa: 692a ldr r2, [r5, #16] -10034efc: f012 0301 ands.w r3, r2, #1 -10034f00: f000 86e6 beq.w 10035cd0 -10034f04: f885 686c strb.w r6, [r5, #2156] ; 0x86c -10034f08: 4628 mov r0, r5 -10034f0a: f7e7 fdcb bl 1001caa4 -10034f0e: 4628 mov r0, r5 -10034f10: f7e8 fd8f bl 1001da32 -10034f14: 4628 mov r0, r5 -10034f16: 4631 mov r1, r6 -10034f18: f7e8 fd1e bl 1001d958 -10034f1c: 46ba mov sl, r7 -10034f1e: f001 b93c b.w 1003619a -10034f22: f105 0634 add.w r6, r5, #52 ; 0x34 -10034f26: f241 036c movw r3, #4204 ; 0x106c -10034f2a: 4630 mov r0, r6 -10034f2c: a912 add r1, sp, #72 ; 0x48 -10034f2e: f855 9003 ldr.w r9, [r5, r3] -10034f32: f7e2 fb49 bl 100175c8 -10034f36: 6aeb ldr r3, [r5, #44] ; 0x2c -10034f38: f105 0a2c add.w sl, r5, #44 ; 0x2c -10034f3c: 61eb str r3, [r5, #28] -10034f3e: 4650 mov r0, sl -10034f40: 69e9 ldr r1, [r5, #28] -10034f42: f7e2 fb1e bl 10017582 -10034f46: 2801 cmp r0, #1 -10034f48: f104 0712 add.w r7, r4, #18 -10034f4c: d014 beq.n 10034f78 -10034f4e: f8d5 801c ldr.w r8, [r5, #28] -10034f52: 4639 mov r1, r7 -10034f54: 4640 mov r0, r8 -10034f56: f850 3b20 ldr.w r3, [r0], #32 -10034f5a: 2206 movs r2, #6 -10034f5c: 61eb str r3, [r5, #28] -10034f5e: f7e2 fa5f bl 10017420 -10034f62: 2801 cmp r0, #1 -10034f64: d1eb bne.n 10034f3e -10034f66: 4628 mov r0, r5 -10034f68: f8d8 107c ldr.w r1, [r8, #124] ; 0x7c -10034f6c: f003 f854 bl 10038018 -10034f70: b910 cbnz r0, 10034f78 -10034f72: 4630 mov r0, r6 -10034f74: a912 add r1, sp, #72 ; 0x48 -10034f76: e09b b.n 100350b0 -10034f78: 4630 mov r0, r6 -10034f7a: a912 add r1, sp, #72 ; 0x48 -10034f7c: f7e2 fb2e bl 100175dc -10034f80: 4649 mov r1, r9 -10034f82: 4628 mov r0, r5 -10034f84: f003 f8c1 bl 1003810a -10034f88: 4628 mov r0, r5 -10034f8a: 4639 mov r1, r7 -10034f8c: f002 fef0 bl 10037d70 -10034f90: e0a0 b.n 100350d4 -10034f92: 2301 movs r3, #1 -10034f94: 7463 strb r3, [r4, #17] -10034f96: 3412 adds r4, #18 -10034f98: 4620 mov r0, r4 -10034f9a: 2206 movs r2, #6 -10034f9c: 2100 movs r1, #0 -10034f9e: f7e2 fa47 bl 10017430 -10034fa2: 692b ldr r3, [r5, #16] -10034fa4: 4620 mov r0, r4 -10034fa6: 07da lsls r2, r3, #31 -10034fa8: f140 8652 bpl.w 10035c50 -10034fac: f105 019c add.w r1, r5, #156 ; 0x9c -10034fb0: 2206 movs r2, #6 -10034fb2: e2aa b.n 1003550a -10034fb4: 8aa2 ldrh r2, [r4, #20] -10034fb6: f605 0073 addw r0, r5, #2163 ; 0x873 -10034fba: 6921 ldr r1, [r4, #16] -10034fbc: f7e2 fa28 bl 10017410 -10034fc0: 8aa3 ldrh r3, [r4, #20] -10034fc2: 2200 movs r2, #0 -10034fc4: 442b add r3, r5 -10034fc6: f883 2873 strb.w r2, [r3, #2163] ; 0x873 -10034fca: f7d7 feb1 bl 1000cd30 -10034fce: b908 cbnz r0, 10034fd4 -10034fd0: f885 08f8 strb.w r0, [r5, #2296] ; 0x8f8 -10034fd4: f8d8 3010 ldr.w r3, [r8, #16] -10034fd8: 6926 ldr r6, [r4, #16] -10034fda: 681d ldr r5, [r3, #0] -10034fdc: 2300 movs r3, #0 -10034fde: f885 386c strb.w r3, [r5, #2156] ; 0x86c -10034fe2: 4628 mov r0, r5 -10034fe4: f44f 6108 mov.w r1, #2176 ; 0x880 -10034fe8: f7e9 fac0 bl 1001e56c -10034fec: 2801 cmp r0, #1 -10034fee: f000 83ca beq.w 10035786 -10034ff2: 4628 mov r0, r5 -10034ff4: f44f 61fa mov.w r1, #2000 ; 0x7d0 -10034ff8: 4a60 ldr r2, [pc, #384] ; (1003517c ) -10034ffa: f7f1 faa6 bl 1002654a <_rtw_pwr_wakeup> -10034ffe: 2800 cmp r0, #0 -10035000: d058 beq.n 100350b4 -10035002: f641 0338 movw r3, #6200 ; 0x1838 -10035006: 58eb ldr r3, [r5, r3] -10035008: 2b00 cmp r3, #0 -1003500a: d053 beq.n 100350b4 -1003500c: 8aa3 ldrh r3, [r4, #20] -1003500e: 2b20 cmp r3, #32 -10035010: d868 bhi.n 100350e4 -10035012: 692b ldr r3, [r5, #16] -10035014: f013 0810 ands.w r8, r3, #16 -10035018: d14c bne.n 100350b4 -1003501a: 4b59 ldr r3, [pc, #356] ; (10035180 ) -1003501c: f505 6006 add.w r0, r5, #2144 ; 0x860 -10035020: f883 8000 strb.w r8, [r3] -10035024: f001 fefa bl 10036e1c -10035028: f241 036c movw r3, #4204 ; 0x106c -1003502c: 58ef ldr r7, [r5, r3] -1003502e: 8ae3 ldrh r3, [r4, #22] -10035030: 2b00 cmp r3, #0 -10035032: f000 864d beq.w 10035cd0 -10035036: 8aa3 ldrh r3, [r4, #20] -10035038: 2b00 cmp r3, #0 -1003503a: f000 8649 beq.w 10035cd0 -1003503e: 2b1f cmp r3, #31 -10035040: bf94 ite ls -10035042: 461c movls r4, r3 -10035044: 2420 movhi r4, #32 -10035046: 4641 mov r1, r8 -10035048: a812 add r0, sp, #72 ; 0x48 -1003504a: 2228 movs r2, #40 ; 0x28 -1003504c: f7e2 f9f0 bl 10017430 -10035050: 4631 mov r1, r6 -10035052: a813 add r0, sp, #76 ; 0x4c -10035054: 4622 mov r2, r4 -10035056: f105 0634 add.w r6, r5, #52 ; 0x34 -1003505a: 9412 str r4, [sp, #72] ; 0x48 -1003505c: f7e2 f9d8 bl 10017410 -10035060: 4630 mov r0, r6 -10035062: a90d add r1, sp, #52 ; 0x34 -10035064: f7e2 fab0 bl 100175c8 -10035068: 6aeb ldr r3, [r5, #44] ; 0x2c -1003506a: f105 082c add.w r8, r5, #44 ; 0x2c -1003506e: 61eb str r3, [r5, #28] -10035070: 4640 mov r0, r8 -10035072: 69e9 ldr r1, [r5, #28] -10035074: f7e2 fa85 bl 10017582 -10035078: 2801 cmp r0, #1 -1003507a: d01f beq.n 100350bc -1003507c: 69ec ldr r4, [r5, #28] -1003507e: a913 add r1, sp, #76 ; 0x4c -10035080: 4620 mov r0, r4 -10035082: f850 3b2c ldr.w r3, [r0], #44 -10035086: 9a12 ldr r2, [sp, #72] ; 0x48 -10035088: 61eb str r3, [r5, #28] -1003508a: f7e2 f9c9 bl 10017420 -1003508e: 2801 cmp r0, #1 -10035090: d1ee bne.n 10035070 -10035092: 6aa2 ldr r2, [r4, #40] ; 0x28 -10035094: 9b12 ldr r3, [sp, #72] ; 0x48 -10035096: 429a cmp r2, r3 -10035098: d1ea bne.n 10035070 -1003509a: 692b ldr r3, [r5, #16] -1003509c: 069b lsls r3, r3, #26 -1003509e: f100 85e0 bmi.w 10035c62 -100350a2: 4628 mov r0, r5 -100350a4: 6fe1 ldr r1, [r4, #124] ; 0x7c -100350a6: f002 ffb7 bl 10038018 -100350aa: b938 cbnz r0, 100350bc -100350ac: 4630 mov r0, r6 -100350ae: a90d add r1, sp, #52 ; 0x34 -100350b0: f7e2 fa94 bl 100175dc -100350b4: f04f 3aff mov.w sl, #4294967295 -100350b8: f001 b86f b.w 1003619a -100350bc: 4630 mov r0, r6 -100350be: a90d add r1, sp, #52 ; 0x34 -100350c0: f7e2 fa8c bl 100175dc -100350c4: 4639 mov r1, r7 -100350c6: 4628 mov r0, r5 -100350c8: f003 f81f bl 1003810a -100350cc: 4628 mov r0, r5 -100350ce: a912 add r1, sp, #72 ; 0x48 -100350d0: f002 ff1a bl 10037f08 -100350d4: f1d0 0001 rsbs r0, r0, #1 -100350d8: bf38 it cc -100350da: 2000 movcc r0, #0 -100350dc: f1c0 0a00 rsb sl, r0, #0 -100350e0: f001 b85b b.w 1003619a -100350e4: f06f 0a06 mvn.w sl, #6 -100350e8: f001 b857 b.w 1003619a -100350ec: 692b ldr r3, [r5, #16] -100350ee: 6920 ldr r0, [r4, #16] -100350f0: f013 0f41 tst.w r3, #65 ; 0x41 -100350f4: d0de beq.n 100350b4 -100350f6: f8d5 20a4 ldr.w r2, [r5, #164] ; 0xa4 -100350fa: f105 01a8 add.w r1, r5, #168 ; 0xa8 -100350fe: 82a2 strh r2, [r4, #20] -10035100: f7e2 f986 bl 10017410 -10035104: 2301 movs r3, #1 -10035106: 82e3 strh r3, [r4, #22] -10035108: f000 bdf8 b.w 10035cfc -1003510c: 8ae3 ldrh r3, [r4, #22] -1003510e: f3c3 030b ubfx r3, r3, #0, #12 -10035112: 2b0a cmp r3, #10 -10035114: f200 8599 bhi.w 10035c4a -10035118: e8df f013 tbh [pc, r3, lsl #1] -1003511c: 05f005f0 .word 0x05f005f0 -10035120: 05f005f0 .word 0x05f005f0 -10035124: 0016000b .word 0x0016000b -10035128: 05f00034 .word 0x05f00034 -1003512c: 059705f0 .word 0x059705f0 -10035130: 05f0 .short 0x05f0 -10035132: 6923 ldr r3, [r4, #16] -10035134: f241 1294 movw r2, #4500 ; 0x1194 -10035138: b11b cbz r3, 10035142 -1003513a: 2301 movs r3, #1 -1003513c: 54ab strb r3, [r5, r2] -1003513e: f000 bddd b.w 10035cfc -10035142: 54ab strb r3, [r5, r2] -10035144: f000 bdc4 b.w 10035cd0 -10035148: f241 0270 movw r2, #4208 ; 0x1070 -1003514c: 58ab ldr r3, [r5, r2] -1003514e: 2b00 cmp r3, #0 -10035150: f000 85be beq.w 10035cd0 -10035154: 6923 ldr r3, [r4, #16] -10035156: 2b00 cmp r3, #0 -10035158: f000 85ba beq.w 10035cd0 -1003515c: 2301 movs r3, #1 -1003515e: 50ab str r3, [r5, r2] -10035160: 2300 movs r3, #0 -10035162: f241 026c movw r2, #4204 ; 0x106c -10035166: f8c5 3d0c str.w r3, [r5, #3340] ; 0xd0c -1003516a: f8c5 3d64 str.w r3, [r5, #3428] ; 0xd64 -1003516e: f8c5 3d08 str.w r3, [r5, #3336] ; 0xd08 -10035172: 50ab str r3, [r5, r2] -10035174: f000 bdac b.w 10035cd0 -10035178: 100422c9 .word 0x100422c9 -1003517c: 100422d8 .word 0x100422d8 -10035180: 1004baf0 .word 0x1004baf0 -10035184: 692b ldr r3, [r5, #16] -10035186: 07de lsls r6, r3, #31 -10035188: f100 8573 bmi.w 10035c72 -1003518c: 6921 ldr r1, [r4, #16] -1003518e: f8d8 3010 ldr.w r3, [r8, #16] -10035192: f001 0003 and.w r0, r1, #3 -10035196: 2803 cmp r0, #3 -10035198: 681a ldr r2, [r3, #0] -1003519a: d10b bne.n 100351b4 -1003519c: f241 0170 movw r1, #4208 ; 0x1070 -100351a0: 2300 movs r3, #0 -100351a2: 5053 str r3, [r2, r1] -100351a4: 2402 movs r4, #2 -100351a6: f241 016c movw r1, #4204 ; 0x106c -100351aa: 5054 str r4, [r2, r1] -100351ac: f8c2 0d08 str.w r0, [r2, #3336] ; 0xd08 -100351b0: f000 bd8e b.w 10035cd0 -100351b4: f011 0302 ands.w r3, r1, #2 -100351b8: d00b beq.n 100351d2 -100351ba: f241 0170 movw r1, #4208 ; 0x1070 -100351be: 2300 movs r3, #0 -100351c0: 5053 str r3, [r2, r1] -100351c2: f241 006c movw r0, #4204 ; 0x106c -100351c6: 2101 movs r1, #1 -100351c8: 5011 str r1, [r2, r0] -100351ca: f8c2 1d08 str.w r1, [r2, #3336] ; 0xd08 -100351ce: f000 bd7f b.w 10035cd0 -100351d2: 07c8 lsls r0, r1, #31 -100351d4: d50a bpl.n 100351ec -100351d6: f241 016c movw r1, #4204 ; 0x106c -100351da: 5850 ldr r0, [r2, r1] -100351dc: 2803 cmp r0, #3 -100351de: f200 8577 bhi.w 10035cd0 -100351e2: 5053 str r3, [r2, r1] -100351e4: f8c2 3d08 str.w r3, [r2, #3336] ; 0xd08 -100351e8: f000 bd72 b.w 10035cd0 -100351ec: f011 0f04 tst.w r1, #4 -100351f0: bf0c ite eq -100351f2: f06f 0a15 mvneq.w sl, #21 -100351f6: f04f 0a00 movne.w sl, #0 -100351fa: f000 bfce b.w 1003619a -100351fe: 6923 ldr r3, [r4, #16] -10035200: f605 0094 addw r0, r5, #2196 ; 0x894 -10035204: 8c9b ldrh r3, [r3, #36] ; 0x24 -10035206: f885 3872 strb.w r3, [r5, #2162] ; 0x872 -1003520a: 6923 ldr r3, [r4, #16] -1003520c: 8cda ldrh r2, [r3, #38] ; 0x26 -1003520e: f8a5 28b4 strh.w r2, [r5, #2228] ; 0x8b4 -10035212: 6921 ldr r1, [r4, #16] -10035214: 3128 adds r1, #40 ; 0x28 -10035216: f7e2 f8fb bl 10017410 -1003521a: 7da3 ldrb r3, [r4, #22] -1003521c: 3b01 subs r3, #1 -1003521e: f885 38b6 strb.w r3, [r5, #2230] ; 0x8b6 -10035222: 6926 ldr r6, [r4, #16] -10035224: 8cf7 ldrh r7, [r6, #38] ; 0x26 -10035226: 3740 adds r7, #64 ; 0x40 -10035228: 4638 mov r0, r7 -1003522a: f7e2 fab1 bl 10017790 -1003522e: 4605 mov r5, r0 -10035230: 2800 cmp r0, #0 -10035232: f43f af3f beq.w 100350b4 -10035236: 2100 movs r1, #0 -10035238: 463a mov r2, r7 -1003523a: f7e2 f8f9 bl 10017430 -1003523e: 2303 movs r3, #3 -10035240: 4628 mov r0, r5 -10035242: f840 3b04 str.w r3, [r0], #4 -10035246: 21ff movs r1, #255 ; 0xff -10035248: 2206 movs r2, #6 -1003524a: f7e2 f8f1 bl 10017430 -1003524e: 8cb3 ldrh r3, [r6, #36] ; 0x24 -10035250: 2b03 cmp r3, #3 -10035252: f63f af2f bhi.w 100350b4 -10035256: e8df f003 tbb [pc, r3] -1003525a: 0802 .short 0x0802 -1003525c: 0604 .short 0x0604 -1003525e: 49ba ldr r1, [pc, #744] ; (10035548 ) -10035260: e004 b.n 1003526c -10035262: 49ba ldr r1, [pc, #744] ; (1003554c ) -10035264: e002 b.n 1003526c -10035266: 49ba ldr r1, [pc, #744] ; (10035550 ) -10035268: e000 b.n 1003526c -1003526a: 49ba ldr r1, [pc, #744] ; (10035554 ) -1003526c: f105 090c add.w r9, r5, #12 -10035270: 4648 mov r0, r9 -10035272: 2210 movs r2, #16 -10035274: f7e5 fcb8 bl 1001abe8 -10035278: 6833 ldr r3, [r6, #0] -1003527a: 0719 lsls r1, r3, #28 -1003527c: bf44 itt mi -1003527e: 2301 movmi r3, #1 -10035280: 772b strbmi r3, [r5, #28] -10035282: 8cb3 ldrh r3, [r6, #36] ; 0x24 -10035284: 2b01 cmp r3, #1 -10035286: d004 beq.n 10035292 -10035288: 6833 ldr r3, [r6, #0] -1003528a: 075a lsls r2, r3, #29 -1003528c: bf44 itt mi -1003528e: 2300 movmi r3, #0 -10035290: 772b strbmi r3, [r5, #28] -10035292: 7da3 ldrb r3, [r4, #22] -10035294: 3b01 subs r3, #1 -10035296: f885 3024 strb.w r3, [r5, #36] ; 0x24 -1003529a: 6833 ldr r3, [r6, #0] -1003529c: 079b lsls r3, r3, #30 -1003529e: d506 bpl.n 100352ae -100352a0: f105 0025 add.w r0, r5, #37 ; 0x25 -100352a4: f106 010c add.w r1, r6, #12 -100352a8: 2208 movs r2, #8 -100352aa: f7e2 f8b1 bl 10017410 -100352ae: 8cf3 ldrh r3, [r6, #38] ; 0x26 -100352b0: b13b cbz r3, 100352c2 -100352b2: 85eb strh r3, [r5, #46] ; 0x2e -100352b4: f105 0030 add.w r0, r5, #48 ; 0x30 -100352b8: f106 0128 add.w r1, r6, #40 ; 0x28 -100352bc: 8cf2 ldrh r2, [r6, #38] ; 0x26 -100352be: f7e2 f8a7 bl 10017410 -100352c2: f8d8 3010 ldr.w r3, [r8, #16] -100352c6: 681c ldr r4, [r3, #0] -100352c8: 2300 movs r3, #0 -100352ca: 622b str r3, [r5, #32] -100352cc: 76eb strb r3, [r5, #27] -100352ce: 8deb ldrh r3, [r5, #46] ; 0x2e -100352d0: 3330 adds r3, #48 ; 0x30 -100352d2: 429f cmp r7, r3 -100352d4: f0c0 84d9 bcc.w 10035c8a -100352d8: 686b ldr r3, [r5, #4] -100352da: 3301 adds r3, #1 -100352dc: f040 84d5 bne.w 10035c8a -100352e0: 892a ldrh r2, [r5, #8] -100352e2: f64f 73ff movw r3, #65535 ; 0xffff -100352e6: 429a cmp r2, r3 -100352e8: f040 84cf bne.w 10035c8a -100352ec: f895 3024 ldrb.w r3, [r5, #36] ; 0x24 -100352f0: 2b03 cmp r3, #3 -100352f2: f200 84ca bhi.w 10035c8a -100352f6: 4648 mov r0, r9 -100352f8: 4996 ldr r1, [pc, #600] ; (10035554 ) -100352fa: f7e5 fc65 bl 1001abc8 -100352fe: 4683 mov fp, r0 -10035300: 2800 cmp r0, #0 -10035302: d172 bne.n 100353ea -10035304: f241 0370 movw r3, #4208 ; 0x1070 -10035308: 50e0 str r0, [r4, r3] -1003530a: 2301 movs r3, #1 -1003530c: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c -10035310: f8c4 3d64 str.w r3, [r4, #3428] ; 0xd64 -10035314: f895 8024 ldrb.w r8, [r5, #36] ; 0x24 -10035318: 8deb ldrh r3, [r5, #46] ; 0x2e -1003531a: f1b8 0f04 cmp.w r8, #4 -1003531e: f200 8082 bhi.w 10035426 -10035322: 2b00 cmp r3, #0 -10035324: f000 84b1 beq.w 10035c8a -10035328: 2b05 cmp r3, #5 -1003532a: bf8c ite hi -1003532c: f04f 0a0d movhi.w sl, #13 -10035330: f04f 0a05 movls.w sl, #5 -10035334: f10a 090c add.w r9, sl, #12 -10035338: 4648 mov r0, r9 -1003533a: f7e2 fa29 bl 10017790 -1003533e: 4606 mov r6, r0 -10035340: b910 cbnz r0, 10035348 -10035342: 2300 movs r3, #0 -10035344: f000 bca3 b.w 10035c8e -10035348: 4659 mov r1, fp -1003534a: 464a mov r2, r9 -1003534c: f7e2 f870 bl 10017430 -10035350: f1ba 0f0d cmp.w sl, #13 -10035354: f8c6 a008 str.w sl, [r6, #8] -10035358: f8c6 9000 str.w r9, [r6] -1003535c: d104 bne.n 10035368 -1003535e: 2305 movs r3, #5 -10035360: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c -10035364: f8c4 3d64 str.w r3, [r4, #3428] ; 0xd64 -10035368: f048 4300 orr.w r3, r8, #2147483648 ; 0x80000000 -1003536c: 6073 str r3, [r6, #4] -1003536e: f106 030c add.w r3, r6, #12 -10035372: 4618 mov r0, r3 -10035374: f105 0130 add.w r1, r5, #48 ; 0x30 -10035378: 4652 mov r2, sl -1003537a: 9300 str r3, [sp, #0] -1003537c: f7e2 f848 bl 10017410 -10035380: 4620 mov r0, r4 -10035382: f44f 61fa mov.w r1, #2000 ; 0x7d0 -10035386: 4a74 ldr r2, [pc, #464] ; (10035558 ) -10035388: f7f1 f8df bl 1002654a <_rtw_pwr_wakeup> -1003538c: 9b00 ldr r3, [sp, #0] -1003538e: 2800 cmp r0, #0 -10035390: f000 8480 beq.w 10035c94 -10035394: f895 a01c ldrb.w sl, [r5, #28] -10035398: f1ba 0f00 cmp.w sl, #0 -1003539c: d00a beq.n 100353b4 -1003539e: 4620 mov r0, r4 -100353a0: 4631 mov r1, r6 -100353a2: f002 fec4 bl 1003812e -100353a6: 2800 cmp r0, #0 -100353a8: bf0c ite eq -100353aa: f06f 045e mvneq.w r4, #94 ; 0x5e -100353ae: 2400 movne r4, #0 -100353b0: f000 bc72 b.w 10035c98 -100353b4: f1b8 0f04 cmp.w r8, #4 -100353b8: f000 846c beq.w 10035c94 -100353bc: f604 5b08 addw fp, r4, #3336 ; 0xd08 -100353c0: eb0b 1008 add.w r0, fp, r8, lsl #4 -100353c4: 4619 mov r1, r3 -100353c6: 300c adds r0, #12 -100353c8: 68b2 ldr r2, [r6, #8] -100353ca: f7e2 f821 bl 10017410 -100353ce: 68b3 ldr r3, [r6, #8] -100353d0: eb04 0288 add.w r2, r4, r8, lsl #2 -100353d4: f8c2 3d54 str.w r3, [r2, #3412] ; 0xd54 -100353d8: 4620 mov r0, r4 -100353da: 4659 mov r1, fp -100353dc: 4642 mov r2, r8 -100353de: 4653 mov r3, sl -100353e0: f7e8 fdf8 bl 1001dfd4 -100353e4: 4654 mov r4, sl -100353e6: f000 bc57 b.w 10035c98 -100353ea: 4648 mov r0, r9 -100353ec: 4957 ldr r1, [pc, #348] ; (1003554c ) -100353ee: f7e5 fbeb bl 1001abc8 -100353f2: b940 cbnz r0, 10035406 -100353f4: f241 036c movw r3, #4204 ; 0x106c -100353f8: 2207 movs r2, #7 -100353fa: 50e2 str r2, [r4, r3] -100353fc: 2302 movs r3, #2 -100353fe: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c -10035402: f8c4 3d64 str.w r3, [r4, #3428] ; 0xd64 -10035406: 4648 mov r0, r9 -10035408: 4951 ldr r1, [pc, #324] ; (10035550 ) -1003540a: f7e5 fbdd bl 1001abc8 -1003540e: 2800 cmp r0, #0 -10035410: d197 bne.n 10035342 -10035412: f241 036c movw r3, #4204 ; 0x106c -10035416: 2207 movs r2, #7 -10035418: 50e2 str r2, [r4, r3] -1003541a: 2304 movs r3, #4 -1003541c: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c -10035420: f8c4 3d64 str.w r3, [r4, #3428] ; 0xd64 -10035424: e78d b.n 10035342 -10035426: f06f 0a15 mvn.w sl, #21 -1003542a: 4628 mov r0, r5 -1003542c: 4639 mov r1, r7 -1003542e: f000 bc06 b.w 10035c3e -10035432: f8d5 3d0c ldr.w r3, [r5, #3340] ; 0xd0c -10035436: 2200 movs r2, #0 -10035438: 6926 ldr r6, [r4, #16] -1003543a: 82e2 strh r2, [r4, #22] -1003543c: 2b05 cmp r3, #5 -1003543e: f63f ae39 bhi.w 100350b4 -10035442: a101 add r1, pc, #4 ; (adr r1, 10035448 ) -10035444: f851 f023 ldr.w pc, [r1, r3, lsl #2] -10035448: 10035461 .word 0x10035461 -1003544c: 10035467 .word 0x10035467 -10035450: 1003548d .word 0x1003548d -10035454: 100350b5 .word 0x100350b5 -10035458: 10035491 .word 0x10035491 -1003545c: 10035467 .word 0x10035467 -10035460: 84b2 strh r2, [r6, #36] ; 0x24 -10035462: f000 bc4b b.w 10035cfc -10035466: 2301 movs r3, #1 -10035468: 84b3 strh r3, [r6, #36] ; 0x24 -1003546a: f8d5 3d10 ldr.w r3, [r5, #3344] ; 0xd10 -1003546e: f106 0028 add.w r0, r6, #40 ; 0x28 -10035472: 82e3 strh r3, [r4, #22] -10035474: b29b uxth r3, r3 -10035476: eb05 1103 add.w r1, r5, r3, lsl #4 -1003547a: f601 5114 addw r1, r1, #3348 ; 0xd14 -1003547e: 2210 movs r2, #16 -10035480: f7e1 ffc6 bl 10017410 -10035484: 2310 movs r3, #16 -10035486: 84f3 strh r3, [r6, #38] ; 0x26 -10035488: f000 bc38 b.w 10035cfc -1003548c: 2302 movs r3, #2 -1003548e: e000 b.n 10035492 -10035490: 2303 movs r3, #3 -10035492: 84b3 strh r3, [r6, #36] ; 0x24 -10035494: f000 bc32 b.w 10035cfc -10035498: f895 38f9 ldrb.w r3, [r5, #2297] ; 0x8f9 -1003549c: b153 cbz r3, 100354b4 -1003549e: f605 00b7 addw r0, r5, #2231 ; 0x8b7 -100354a2: 6921 ldr r1, [r4, #16] -100354a4: 8aa2 ldrh r2, [r4, #20] -100354a6: f7e1 ffb3 bl 10017410 -100354aa: 8aa3 ldrh r3, [r4, #20] -100354ac: 441d add r5, r3 -100354ae: 2300 movs r3, #0 -100354b0: f885 38b7 strb.w r3, [r5, #2231] ; 0x8b7 -100354b4: f8d8 3010 ldr.w r3, [r8, #16] -100354b8: 6925 ldr r5, [r4, #16] -100354ba: 681e ldr r6, [r3, #0] -100354bc: f641 0369 movw r3, #6249 ; 0x1869 -100354c0: 5cf0 ldrb r0, [r6, r3] -100354c2: 8aa3 ldrh r3, [r4, #20] -100354c4: 1e5a subs r2, r3, #1 -100354c6: 2a3e cmp r2, #62 ; 0x3e -100354c8: d808 bhi.n 100354dc -100354ca: 4824 ldr r0, [pc, #144] ; (1003555c ) -100354cc: 2100 movs r1, #0 -100354ce: 2241 movs r2, #65 ; 0x41 -100354d0: f7e1 ffae bl 10017430 -100354d4: f506 509a add.w r0, r6, #4928 ; 0x1340 -100354d8: 3004 adds r0, #4 -100354da: e014 b.n 10035506 -100354dc: 2b40 cmp r3, #64 ; 0x40 -100354de: f47f ade9 bne.w 100350b4 -100354e2: 4b1f ldr r3, [pc, #124] ; (10035560 ) -100354e4: 2800 cmp r0, #0 -100354e6: bf14 ite ne -100354e8: 2028 movne r0, #40 ; 0x28 -100354ea: 2000 moveq r0, #0 -100354ec: 4418 add r0, r3 -100354ee: 4629 mov r1, r5 -100354f0: 2220 movs r2, #32 -100354f2: f7fe fc95 bl 10033e20 -100354f6: f506 509a add.w r0, r6, #4928 ; 0x1340 -100354fa: 3004 adds r0, #4 -100354fc: 2100 movs r1, #0 -100354fe: 2241 movs r2, #65 ; 0x41 -10035500: f7e1 ff96 bl 10017430 -10035504: 4815 ldr r0, [pc, #84] ; (1003555c ) -10035506: 8aa2 ldrh r2, [r4, #20] -10035508: 4629 mov r1, r5 -1003550a: f7e1 ff81 bl 10017410 -1003550e: e3f5 b.n 10035cfc -10035510: 4628 mov r0, r5 -10035512: f44f 61fa mov.w r1, #2000 ; 0x7d0 -10035516: 4a13 ldr r2, [pc, #76] ; (10035564 ) -10035518: f7f1 f817 bl 1002654a <_rtw_pwr_wakeup> -1003551c: 2800 cmp r0, #0 -1003551e: f43f adc9 beq.w 100350b4 -10035522: f241 73c5 movw r3, #6085 ; 0x17c5 -10035526: 5ceb ldrb r3, [r5, r3] -10035528: 2b00 cmp r3, #0 -1003552a: f43f adc3 beq.w 100350b4 -1003552e: 6923 ldr r3, [r4, #16] -10035530: 2b03 cmp r3, #3 -10035532: f200 8128 bhi.w 10035786 -10035536: e8df f003 tbb [pc, r3] -1003553a: 1902 .short 0x1902 -1003553c: 0417 .short 0x0417 -1003553e: 2402 movs r4, #2 -10035540: e015 b.n 1003556e -10035542: 2404 movs r4, #4 -10035544: e013 b.n 1003556e -10035546: bf00 nop -10035548: 10042268 .word 0x10042268 -1003554c: 10042271 .word 0x10042271 -10035550: 10042276 .word 0x10042276 -10035554: 1004226d .word 0x1004226d -10035558: 10041ceb .word 0x10041ceb -1003555c: 1004bbe2 .word 0x1004bbe2 -10035560: 1004bc23 .word 0x1004bc23 -10035564: 100422b9 .word 0x100422b9 -10035568: 2401 movs r4, #1 -1003556a: e000 b.n 1003556e -1003556c: 2400 movs r4, #0 -1003556e: 4628 mov r0, r5 -10035570: 4621 mov r1, r4 -10035572: f002 fd51 bl 10038018 -10035576: 2800 cmp r0, #0 -10035578: f43f ad9c beq.w 100350b4 -1003557c: 4628 mov r0, r5 -1003557e: 4621 mov r1, r4 -10035580: f7f3 f862 bl 10028648 -10035584: e3ba b.n 10035cfc -10035586: 692b ldr r3, [r5, #16] -10035588: 071d lsls r5, r3, #28 -1003558a: f140 838c bpl.w 10035ca6 -1003558e: 2302 movs r3, #2 -10035590: e392 b.n 10035cb8 -10035592: 2100 movs r1, #0 -10035594: f104 0210 add.w r2, r4, #16 -10035598: 6923 ldr r3, [r4, #16] -1003559a: f7fe fc9d bl 10033ed8 -1003559e: e0f6 b.n 1003578e -100355a0: 692b ldr r3, [r5, #16] -100355a2: f013 0301 ands.w r3, r3, #1 -100355a6: f000 838b beq.w 10035cc0 -100355aa: f995 3c04 ldrsb.w r3, [r5, #3076] ; 0xc04 -100355ae: 425b negs r3, r3 -100355b0: 6123 str r3, [r4, #16] -100355b2: 2300 movs r3, #0 -100355b4: 7523 strb r3, [r4, #20] -100355b6: e38b b.n 10035cd0 -100355b8: 7c23 ldrb r3, [r4, #16] -100355ba: b34b cbz r3, 10035610 -100355bc: 2b01 cmp r3, #1 -100355be: d029 beq.n 10035614 -100355c0: 2b02 cmp r3, #2 -100355c2: d01b beq.n 100355fc -100355c4: 2b03 cmp r3, #3 -100355c6: d027 beq.n 10035618 -100355c8: 2b04 cmp r3, #4 -100355ca: d019 beq.n 10035600 -100355cc: 2b05 cmp r3, #5 -100355ce: d025 beq.n 1003561c -100355d0: 2b06 cmp r3, #6 -100355d2: d017 beq.n 10035604 -100355d4: 2b07 cmp r3, #7 -100355d6: d017 beq.n 10035608 -100355d8: 2b08 cmp r3, #8 -100355da: d017 beq.n 1003560c -100355dc: 2b09 cmp r3, #9 -100355de: d017 beq.n 10035610 -100355e0: 2b0a cmp r3, #10 -100355e2: d017 beq.n 10035614 -100355e4: 2b0b cmp r3, #11 -100355e6: d017 beq.n 10035618 -100355e8: f1a3 020c sub.w r2, r3, #12 -100355ec: 2a12 cmp r2, #18 -100355ee: d915 bls.n 1003561c -100355f0: 3b1f subs r3, #31 -100355f2: 2b98 cmp r3, #152 ; 0x98 -100355f4: bf94 ite ls -100355f6: 2121 movls r1, #33 ; 0x21 -100355f8: 2120 movhi r1, #32 -100355fa: e010 b.n 1003561e -100355fc: 2122 movs r1, #34 ; 0x22 -100355fe: e00e b.n 1003561e -10035600: 2124 movs r1, #36 ; 0x24 -10035602: e00c b.n 1003561e -10035604: 2147 movs r1, #71 ; 0x47 -10035606: e00a b.n 1003561e -10035608: 2158 movs r1, #88 ; 0x58 -1003560a: e008 b.n 1003561e -1003560c: 2141 movs r1, #65 ; 0x41 -1003560e: e006 b.n 1003561e -10035610: 2120 movs r1, #32 -10035612: e004 b.n 1003561e -10035614: 2121 movs r1, #33 ; 0x21 -10035616: e002 b.n 1003561e -10035618: 2123 movs r1, #35 ; 0x23 -1003561a: e000 b.n 1003561e -1003561c: 212a movs r1, #42 ; 0x2a -1003561e: 4628 mov r0, r5 -10035620: 2201 movs r2, #1 -10035622: f7e7 fb88 bl 1001cd36 -10035626: f1b0 0a01 subs.w sl, r0, #1 -1003562a: bf18 it ne -1003562c: f06f 0a00 mvnne.w sl, #0 -10035630: f000 bdb3 b.w 1003619a -10035634: 692b ldr r3, [r5, #16] -10035636: f013 0301 ands.w r3, r3, #1 -1003563a: f000 8346 beq.w 10035cca -1003563e: f8d5 30e4 ldr.w r3, [r5, #228] ; 0xe4 -10035642: 75a3 strb r3, [r4, #22] -10035644: e35a b.n 10035cfc -10035646: 2300 movs r3, #0 -10035648: 4628 mov r0, r5 -1003564a: f44f 61fa mov.w r1, #2000 ; 0x7d0 -1003564e: 4a8c ldr r2, [pc, #560] ; (10035880 ) -10035650: 6926 ldr r6, [r4, #16] -10035652: 930d str r3, [sp, #52] ; 0x34 -10035654: f7f0 ff79 bl 1002654a <_rtw_pwr_wakeup> -10035658: 2800 cmp r0, #0 -1003565a: f43f ad2b beq.w 100350b4 -1003565e: f241 73ac movw r3, #6060 ; 0x17ac -10035662: 58eb ldr r3, [r5, r3] -10035664: 2b00 cmp r3, #0 -10035666: f47f ad25 bne.w 100350b4 -1003566a: f641 0338 movw r3, #6200 ; 0x1838 -1003566e: 58eb ldr r3, [r5, r3] -10035670: 2b00 cmp r3, #0 -10035672: f43f ad1f beq.w 100350b4 -10035676: f241 73c5 movw r3, #6085 ; 0x17c5 -1003567a: 5ceb ldrb r3, [r5, r3] -1003567c: 2b00 cmp r3, #0 -1003567e: f43f ad19 beq.w 100350b4 -10035682: f895 3488 ldrb.w r3, [r5, #1160] ; 0x488 -10035686: 2b01 cmp r3, #1 -10035688: f000 8334 beq.w 10035cf4 -1003568c: 692f ldr r7, [r5, #16] -1003568e: f417 6708 ands.w r7, r7, #2176 ; 0x880 -10035692: f040 832f bne.w 10035cf4 -10035696: e31d b.n 10035cd4 -10035698: 8aa3 ldrh r3, [r4, #20] -1003569a: f8d4 8010 ldr.w r8, [r4, #16] -1003569e: 9301 str r3, [sp, #4] -100356a0: f241 437c movw r3, #5244 ; 0x147c -100356a4: 5ceb ldrb r3, [r5, r3] -100356a6: b123 cbz r3, 100356b2 -100356a8: f241 73ac movw r3, #6060 ; 0x17ac -100356ac: 58eb ldr r3, [r5, r3] -100356ae: 2b00 cmp r3, #0 -100356b0: d169 bne.n 10035786 -100356b2: 26c9 movs r6, #201 ; 0xc9 -100356b4: 692b ldr r3, [r5, #16] -100356b6: f413 6f08 tst.w r3, #2176 ; 0x880 -100356ba: f040 8353 bne.w 10035d64 -100356be: f8b5 3048 ldrh.w r3, [r5, #72] ; 0x48 -100356c2: 82e3 strh r3, [r4, #22] -100356c4: f8b5 261a ldrh.w r2, [r5, #1562] ; 0x61a -100356c8: 2300 movs r3, #0 -100356ca: 2a02 cmp r2, #2 -100356cc: 642b str r3, [r5, #64] ; 0x40 -100356ce: f8a5 3048 strh.w r3, [r5, #72] ; 0x48 -100356d2: f040 82fd bne.w 10035cd0 -100356d6: f105 0934 add.w r9, r5, #52 ; 0x34 -100356da: 4648 mov r0, r9 -100356dc: a912 add r1, sp, #72 ; 0x48 -100356de: f7e1 ff73 bl 100175c8 -100356e2: 6aee ldr r6, [r5, #44] ; 0x2c -100356e4: f105 0b2c add.w fp, r5, #44 ; 0x2c -100356e8: 4647 mov r7, r8 -100356ea: 4658 mov r0, fp -100356ec: 4631 mov r1, r6 -100356ee: f7e1 ff48 bl 10017582 -100356f2: 2801 cmp r0, #1 -100356f4: d037 beq.n 10035766 -100356f6: 9b01 ldr r3, [sp, #4] -100356f8: 4443 add r3, r8 -100356fa: 1bdb subs r3, r3, r7 -100356fc: f5b3 7f40 cmp.w r3, #768 ; 0x300 -10035700: db34 blt.n 1003576c -10035702: f205 50fc addw r0, r5, #1532 ; 0x5fc -10035706: 6eb1 ldr r1, [r6, #104] ; 0x68 -10035708: 2200 movs r2, #0 -1003570a: f7e8 ff81 bl 1001e610 -1003570e: 2801 cmp r0, #1 -10035710: d127 bne.n 10035762 -10035712: f106 0a20 add.w sl, r6, #32 -10035716: f205 6014 addw r0, r5, #1556 ; 0x614 -1003571a: 4651 mov r1, sl -1003571c: 2206 movs r2, #6 -1003571e: f7e1 fe7f bl 10017420 -10035722: b1f0 cbz r0, 10035762 -10035724: 4638 mov r0, r7 -10035726: 4651 mov r1, sl -10035728: 2206 movs r2, #6 -1003572a: f7e1 fe71 bl 10017410 -1003572e: 6eb3 ldr r3, [r6, #104] ; 0x68 -10035730: 3713 adds r7, #19 -10035732: f807 3c0d strb.w r3, [r7, #-13] -10035736: 6933 ldr r3, [r6, #16] -10035738: f106 01a4 add.w r1, r6, #164 ; 0xa4 -1003573c: f847 3c0c str.w r3, [r7, #-12] -10035740: 6d73 ldr r3, [r6, #84] ; 0x54 -10035742: f847 3c08 str.w r3, [r7, #-8] -10035746: f8d6 3094 ldr.w r3, [r6, #148] ; 0x94 -1003574a: f847 3c04 str.w r3, [r7, #-4] -1003574e: f8d6 2094 ldr.w r2, [r6, #148] ; 0x94 -10035752: 4638 mov r0, r7 -10035754: 3a0c subs r2, #12 -10035756: f7e1 fe5b bl 10017410 -1003575a: f8d6 3094 ldr.w r3, [r6, #148] ; 0x94 -1003575e: 3b0c subs r3, #12 -10035760: 441f add r7, r3 -10035762: 6836 ldr r6, [r6, #0] -10035764: e7c1 b.n 100356ea -10035766: f04f 0a00 mov.w sl, #0 -1003576a: e001 b.n 10035770 -1003576c: f06f 0a06 mvn.w sl, #6 -10035770: ebc8 0707 rsb r7, r8, r7 -10035774: b2bf uxth r7, r7 -10035776: 4648 mov r0, r9 -10035778: a912 add r1, sp, #72 ; 0x48 -1003577a: f7e1 ff2f bl 100175dc -1003577e: 82a7 strh r7, [r4, #20] -10035780: 82e7 strh r7, [r4, #22] -10035782: f000 bd0a b.w 1003619a -10035786: f06f 0a15 mvn.w sl, #21 -1003578a: f000 bd06 b.w 1003619a -1003578e: 4682 mov sl, r0 -10035790: f000 bd03 b.w 1003619a -10035794: 6927 ldr r7, [r4, #16] -10035796: 8aa6 ldrh r6, [r4, #20] -10035798: 2200 movs r2, #0 -1003579a: 4638 mov r0, r7 -1003579c: 4631 mov r1, r6 -1003579e: ab07 add r3, sp, #28 -100357a0: 8ae4 ldrh r4, [r4, #22] -100357a2: 9207 str r2, [sp, #28] -100357a4: 9208 str r2, [sp, #32] -100357a6: f009 f86f bl 1003e888 <__rtw_get_wps_ie_veneer> -100357aa: b160 cbz r0, 100357c6 -100357ac: 9b07 ldr r3, [sp, #28] -100357ae: b153 cbz r3, 100357c6 -100357b0: 2300 movs r3, #0 -100357b2: 2c04 cmp r4, #4 -100357b4: f200 82a2 bhi.w 10035cfc -100357b8: e8df f014 tbh [pc, r4, lsl #1] -100357bc: 00640012 .word 0x00640012 -100357c0: 011700b4 .word 0x011700b4 -100357c4: 0165 .short 0x0165 -100357c6: 4638 mov r0, r7 -100357c8: 4631 mov r1, r6 -100357ca: 2200 movs r2, #0 -100357cc: ab08 add r3, sp, #32 -100357ce: f001 ff8f bl 100376f0 -100357d2: 2800 cmp r0, #0 -100357d4: f000 8292 beq.w 10035cfc -100357d8: 9b08 ldr r3, [sp, #32] -100357da: 2b00 cmp r3, #0 -100357dc: d1e8 bne.n 100357b0 -100357de: e28d b.n 10035cfc -100357e0: 2400 movs r4, #0 -100357e2: 930d str r3, [sp, #52] ; 0x34 -100357e4: 9312 str r3, [sp, #72] ; 0x48 -100357e6: 2e00 cmp r6, #0 -100357e8: f000 8288 beq.w 10035cfc -100357ec: 4638 mov r0, r7 -100357ee: 4631 mov r1, r6 -100357f0: 4622 mov r2, r4 -100357f2: ab0d add r3, sp, #52 ; 0x34 -100357f4: f009 f848 bl 1003e888 <__rtw_get_wps_ie_veneer> -100357f8: 4680 mov r8, r0 -100357fa: b1c8 cbz r0, 10035830 -100357fc: f8d5 04a4 ldr.w r0, [r5, #1188] ; 0x4a4 -10035800: b138 cbz r0, 10035812 -10035802: f8d5 14a8 ldr.w r1, [r5, #1192] ; 0x4a8 -10035806: f8c5 44a8 str.w r4, [r5, #1192] ; 0x4a8 -1003580a: f7e1 fdfe bl 1001740a -1003580e: f8c5 44a4 str.w r4, [r5, #1188] ; 0x4a4 -10035812: 980d ldr r0, [sp, #52] ; 0x34 -10035814: f7e1 ffbc bl 10017790 -10035818: f8c5 04a4 str.w r0, [r5, #1188] ; 0x4a4 -1003581c: 2800 cmp r0, #0 -1003581e: f000 826d beq.w 10035cfc -10035822: 4641 mov r1, r8 -10035824: 9a0d ldr r2, [sp, #52] ; 0x34 -10035826: f7e1 fdf3 bl 10017410 -1003582a: 9b0d ldr r3, [sp, #52] ; 0x34 -1003582c: f8c5 34a8 str.w r3, [r5, #1192] ; 0x4a8 -10035830: 980d ldr r0, [sp, #52] ; 0x34 -10035832: 2200 movs r2, #0 -10035834: 1a31 subs r1, r6, r0 -10035836: b289 uxth r1, r1 -10035838: 4438 add r0, r7 -1003583a: ab12 add r3, sp, #72 ; 0x48 -1003583c: f001 ff58 bl 100376f0 -10035840: 4604 mov r4, r0 -10035842: 2800 cmp r0, #0 -10035844: f000 825a beq.w 10035cfc -10035848: f8d5 04e0 ldr.w r0, [r5, #1248] ; 0x4e0 -1003584c: b140 cbz r0, 10035860 -1003584e: 2600 movs r6, #0 -10035850: f8d5 14f4 ldr.w r1, [r5, #1268] ; 0x4f4 -10035854: f8c5 64f4 str.w r6, [r5, #1268] ; 0x4f4 -10035858: f7e1 fdd7 bl 1001740a -1003585c: f8c5 64e0 str.w r6, [r5, #1248] ; 0x4e0 -10035860: 9812 ldr r0, [sp, #72] ; 0x48 -10035862: f7e1 ff95 bl 10017790 -10035866: f8c5 04e0 str.w r0, [r5, #1248] ; 0x4e0 -1003586a: 2800 cmp r0, #0 -1003586c: f000 8246 beq.w 10035cfc -10035870: 4621 mov r1, r4 -10035872: 9a12 ldr r2, [sp, #72] ; 0x48 -10035874: f7e1 fdcc bl 10017410 -10035878: 9b12 ldr r3, [sp, #72] ; 0x48 -1003587a: f8c5 34f4 str.w r3, [r5, #1268] ; 0x4f4 -1003587e: e23d b.n 10035cfc -10035880: 10041cdb .word 0x10041cdb -10035884: 2400 movs r4, #0 -10035886: 930d str r3, [sp, #52] ; 0x34 -10035888: 9312 str r3, [sp, #72] ; 0x48 -1003588a: 2e00 cmp r6, #0 -1003588c: f000 8236 beq.w 10035cfc -10035890: 4638 mov r0, r7 -10035892: 4631 mov r1, r6 -10035894: 4622 mov r2, r4 -10035896: ab0d add r3, sp, #52 ; 0x34 -10035898: f008 fff6 bl 1003e888 <__rtw_get_wps_ie_veneer> -1003589c: 4680 mov r8, r0 -1003589e: b1c8 cbz r0, 100358d4 -100358a0: f8d5 04c8 ldr.w r0, [r5, #1224] ; 0x4c8 -100358a4: b138 cbz r0, 100358b6 -100358a6: f8d5 14d4 ldr.w r1, [r5, #1236] ; 0x4d4 -100358aa: f8c5 44d4 str.w r4, [r5, #1236] ; 0x4d4 -100358ae: f7e1 fdac bl 1001740a -100358b2: f8c5 44c8 str.w r4, [r5, #1224] ; 0x4c8 -100358b6: 980d ldr r0, [sp, #52] ; 0x34 -100358b8: f7e1 ff6a bl 10017790 -100358bc: f8c5 04c8 str.w r0, [r5, #1224] ; 0x4c8 -100358c0: 2800 cmp r0, #0 -100358c2: f000 821b beq.w 10035cfc -100358c6: 4641 mov r1, r8 -100358c8: 9a0d ldr r2, [sp, #52] ; 0x34 -100358ca: f7e1 fda1 bl 10017410 -100358ce: 9b0d ldr r3, [sp, #52] ; 0x34 -100358d0: f8c5 34d4 str.w r3, [r5, #1236] ; 0x4d4 -100358d4: 980d ldr r0, [sp, #52] ; 0x34 -100358d6: 2200 movs r2, #0 -100358d8: 1a31 subs r1, r6, r0 -100358da: b289 uxth r1, r1 -100358dc: 4438 add r0, r7 -100358de: ab12 add r3, sp, #72 ; 0x48 -100358e0: f001 ff06 bl 100376f0 -100358e4: 4604 mov r4, r0 -100358e6: 2800 cmp r0, #0 -100358e8: f000 8208 beq.w 10035cfc -100358ec: f8d5 04e4 ldr.w r0, [r5, #1252] ; 0x4e4 -100358f0: b140 cbz r0, 10035904 -100358f2: 2600 movs r6, #0 -100358f4: f8d5 14f8 ldr.w r1, [r5, #1272] ; 0x4f8 -100358f8: f8c5 64f8 str.w r6, [r5, #1272] ; 0x4f8 -100358fc: f7e1 fd85 bl 1001740a -10035900: f8c5 64e4 str.w r6, [r5, #1252] ; 0x4e4 -10035904: 9812 ldr r0, [sp, #72] ; 0x48 -10035906: f7e1 ff43 bl 10017790 -1003590a: f8c5 04e4 str.w r0, [r5, #1252] ; 0x4e4 -1003590e: 2800 cmp r0, #0 -10035910: f000 81f4 beq.w 10035cfc -10035914: 4621 mov r1, r4 -10035916: 9a12 ldr r2, [sp, #72] ; 0x48 -10035918: f7e1 fd7a bl 10017410 -1003591c: 9b12 ldr r3, [sp, #72] ; 0x48 -1003591e: f8c5 34f8 str.w r3, [r5, #1272] ; 0x4f8 -10035922: e1eb b.n 10035cfc -10035924: 2250 movs r2, #80 ; 0x50 -10035926: 9312 str r3, [sp, #72] ; 0x48 -10035928: f88d 2049 strb.w r2, [sp, #73] ; 0x49 -1003592c: 22f2 movs r2, #242 ; 0xf2 -1003592e: f88d 204a strb.w r2, [sp, #74] ; 0x4a -10035932: 2204 movs r2, #4 -10035934: 2400 movs r4, #0 -10035936: 9309 str r3, [sp, #36] ; 0x24 -10035938: 9313 str r3, [sp, #76] ; 0x4c -1003593a: f88d 204b strb.w r2, [sp, #75] ; 0x4b -1003593e: 930d str r3, [sp, #52] ; 0x34 -10035940: 2e00 cmp r6, #0 -10035942: f000 81db beq.w 10035cfc -10035946: 4638 mov r0, r7 -10035948: 4631 mov r1, r6 -1003594a: 4622 mov r2, r4 -1003594c: ab09 add r3, sp, #36 ; 0x24 -1003594e: f008 ff9b bl 1003e888 <__rtw_get_wps_ie_veneer> -10035952: 4680 mov r8, r0 -10035954: b308 cbz r0, 1003599a -10035956: f8d5 04c4 ldr.w r0, [r5, #1220] ; 0x4c4 -1003595a: b138 cbz r0, 1003596c -1003595c: f8d5 14d0 ldr.w r1, [r5, #1232] ; 0x4d0 -10035960: f8c5 44d0 str.w r4, [r5, #1232] ; 0x4d0 -10035964: f7e1 fd51 bl 1001740a -10035968: f8c5 44c4 str.w r4, [r5, #1220] ; 0x4c4 -1003596c: 9809 ldr r0, [sp, #36] ; 0x24 -1003596e: f7e1 ff0f bl 10017790 -10035972: f8c5 04c4 str.w r0, [r5, #1220] ; 0x4c4 -10035976: 2800 cmp r0, #0 -10035978: f000 81c0 beq.w 10035cfc -1003597c: 4641 mov r1, r8 -1003597e: 9a09 ldr r2, [sp, #36] ; 0x24 -10035980: f7e1 fd46 bl 10017410 -10035984: 2301 movs r3, #1 -10035986: f885 3858 strb.w r3, [r5, #2136] ; 0x858 -1003598a: 9a09 ldr r2, [sp, #36] ; 0x24 -1003598c: 4628 mov r0, r5 -1003598e: f8c5 24d0 str.w r2, [r5, #1232] ; 0x4d0 -10035992: 21dd movs r1, #221 ; 0xdd -10035994: aa12 add r2, sp, #72 ; 0x48 -10035996: f7e5 fb37 bl 1001b008 -1003599a: 9809 ldr r0, [sp, #36] ; 0x24 -1003599c: 2200 movs r2, #0 -1003599e: 1a31 subs r1, r6, r0 -100359a0: b289 uxth r1, r1 -100359a2: 4438 add r0, r7 -100359a4: ab0d add r3, sp, #52 ; 0x34 -100359a6: f001 fea3 bl 100376f0 -100359aa: 4604 mov r4, r0 -100359ac: 2800 cmp r0, #0 -100359ae: f000 81a5 beq.w 10035cfc -100359b2: f8d5 04dc ldr.w r0, [r5, #1244] ; 0x4dc -100359b6: b140 cbz r0, 100359ca -100359b8: 2600 movs r6, #0 -100359ba: f8d5 14f0 ldr.w r1, [r5, #1264] ; 0x4f0 -100359be: f8c5 64f0 str.w r6, [r5, #1264] ; 0x4f0 -100359c2: f7e1 fd22 bl 1001740a -100359c6: f8c5 64dc str.w r6, [r5, #1244] ; 0x4dc -100359ca: 980d ldr r0, [sp, #52] ; 0x34 -100359cc: f7e1 fee0 bl 10017790 -100359d0: f8c5 04dc str.w r0, [r5, #1244] ; 0x4dc -100359d4: 2800 cmp r0, #0 -100359d6: f000 8191 beq.w 10035cfc -100359da: 4621 mov r1, r4 -100359dc: 9a0d ldr r2, [sp, #52] ; 0x34 -100359de: f7e1 fd17 bl 10017410 -100359e2: 9b0d ldr r3, [sp, #52] ; 0x34 -100359e4: f8c5 34f0 str.w r3, [r5, #1264] ; 0x4f0 -100359e8: e188 b.n 10035cfc -100359ea: 2400 movs r4, #0 -100359ec: 930d str r3, [sp, #52] ; 0x34 -100359ee: 9312 str r3, [sp, #72] ; 0x48 -100359f0: 2e00 cmp r6, #0 -100359f2: f000 8183 beq.w 10035cfc -100359f6: 4638 mov r0, r7 -100359f8: 4631 mov r1, r6 -100359fa: 4622 mov r2, r4 -100359fc: ab0d add r3, sp, #52 ; 0x34 -100359fe: f008 ff43 bl 1003e888 <__rtw_get_wps_ie_veneer> -10035a02: b1c0 cbz r0, 10035a36 -10035a04: f8d5 04ac ldr.w r0, [r5, #1196] ; 0x4ac -10035a08: b138 cbz r0, 10035a1a -10035a0a: f8d5 14b0 ldr.w r1, [r5, #1200] ; 0x4b0 -10035a0e: f8c5 44b0 str.w r4, [r5, #1200] ; 0x4b0 -10035a12: f7e1 fcfa bl 1001740a -10035a16: f8c5 44ac str.w r4, [r5, #1196] ; 0x4ac -10035a1a: 4630 mov r0, r6 -10035a1c: f7e1 feb8 bl 10017790 -10035a20: f8c5 04ac str.w r0, [r5, #1196] ; 0x4ac -10035a24: 2800 cmp r0, #0 -10035a26: f000 8169 beq.w 10035cfc -10035a2a: 4639 mov r1, r7 -10035a2c: 4632 mov r2, r6 -10035a2e: f7e1 fcef bl 10017410 -10035a32: f8c5 64b0 str.w r6, [r5, #1200] ; 0x4b0 -10035a36: 980d ldr r0, [sp, #52] ; 0x34 -10035a38: 2200 movs r2, #0 -10035a3a: 1a31 subs r1, r6, r0 -10035a3c: b289 uxth r1, r1 -10035a3e: 4438 add r0, r7 -10035a40: ab12 add r3, sp, #72 ; 0x48 -10035a42: f001 fe55 bl 100376f0 -10035a46: 4604 mov r4, r0 -10035a48: 2800 cmp r0, #0 -10035a4a: f000 8157 beq.w 10035cfc -10035a4e: f8d5 04e8 ldr.w r0, [r5, #1256] ; 0x4e8 -10035a52: b140 cbz r0, 10035a66 -10035a54: 2600 movs r6, #0 -10035a56: f8d5 14fc ldr.w r1, [r5, #1276] ; 0x4fc -10035a5a: f8c5 64fc str.w r6, [r5, #1276] ; 0x4fc -10035a5e: f7e1 fcd4 bl 1001740a -10035a62: f8c5 64e8 str.w r6, [r5, #1256] ; 0x4e8 -10035a66: 9812 ldr r0, [sp, #72] ; 0x48 -10035a68: f7e1 fe92 bl 10017790 -10035a6c: f8c5 04e8 str.w r0, [r5, #1256] ; 0x4e8 -10035a70: 2800 cmp r0, #0 -10035a72: f000 8143 beq.w 10035cfc -10035a76: 4621 mov r1, r4 -10035a78: 9a12 ldr r2, [sp, #72] ; 0x48 -10035a7a: f7e1 fcc9 bl 10017410 -10035a7e: 9b12 ldr r3, [sp, #72] ; 0x48 -10035a80: f8c5 34fc str.w r3, [r5, #1276] ; 0x4fc -10035a84: e13a b.n 10035cfc -10035a86: 2400 movs r4, #0 -10035a88: 930d str r3, [sp, #52] ; 0x34 -10035a8a: 9312 str r3, [sp, #72] ; 0x48 -10035a8c: 2e00 cmp r6, #0 -10035a8e: f000 8135 beq.w 10035cfc -10035a92: 4638 mov r0, r7 -10035a94: 4631 mov r1, r6 -10035a96: 4622 mov r2, r4 -10035a98: ab0d add r3, sp, #52 ; 0x34 -10035a9a: f008 fef5 bl 1003e888 <__rtw_get_wps_ie_veneer> -10035a9e: b1c0 cbz r0, 10035ad2 -10035aa0: f8d5 04cc ldr.w r0, [r5, #1228] ; 0x4cc -10035aa4: b138 cbz r0, 10035ab6 -10035aa6: f8d5 14d8 ldr.w r1, [r5, #1240] ; 0x4d8 -10035aaa: f8c5 44d8 str.w r4, [r5, #1240] ; 0x4d8 -10035aae: f7e1 fcac bl 1001740a -10035ab2: f8c5 44cc str.w r4, [r5, #1228] ; 0x4cc -10035ab6: 4630 mov r0, r6 -10035ab8: f7e1 fe6a bl 10017790 -10035abc: f8c5 04cc str.w r0, [r5, #1228] ; 0x4cc -10035ac0: 2800 cmp r0, #0 -10035ac2: f000 811b beq.w 10035cfc -10035ac6: 4639 mov r1, r7 -10035ac8: 4632 mov r2, r6 -10035aca: f7e1 fca1 bl 10017410 -10035ace: f8c5 64d8 str.w r6, [r5, #1240] ; 0x4d8 -10035ad2: 980d ldr r0, [sp, #52] ; 0x34 -10035ad4: 2200 movs r2, #0 -10035ad6: 1a31 subs r1, r6, r0 -10035ad8: b289 uxth r1, r1 -10035ada: 4438 add r0, r7 -10035adc: ab12 add r3, sp, #72 ; 0x48 -10035ade: f001 fe07 bl 100376f0 -10035ae2: 4604 mov r4, r0 -10035ae4: 2800 cmp r0, #0 -10035ae6: f000 8109 beq.w 10035cfc -10035aea: f8d5 04ec ldr.w r0, [r5, #1260] ; 0x4ec -10035aee: b140 cbz r0, 10035b02 -10035af0: 2600 movs r6, #0 -10035af2: f8d5 1500 ldr.w r1, [r5, #1280] ; 0x500 -10035af6: f8c5 6500 str.w r6, [r5, #1280] ; 0x500 -10035afa: f7e1 fc86 bl 1001740a -10035afe: f8c5 64ec str.w r6, [r5, #1260] ; 0x4ec -10035b02: 9812 ldr r0, [sp, #72] ; 0x48 -10035b04: f7e1 fe44 bl 10017790 -10035b08: f8c5 04ec str.w r0, [r5, #1260] ; 0x4ec -10035b0c: 2800 cmp r0, #0 -10035b0e: f000 80f5 beq.w 10035cfc -10035b12: 4621 mov r1, r4 -10035b14: 9a12 ldr r2, [sp, #72] ; 0x48 -10035b16: f7e1 fc7b bl 10017410 -10035b1a: 9b12 ldr r3, [sp, #72] ; 0x48 -10035b1c: f8c5 3500 str.w r3, [r5, #1280] ; 0x500 -10035b20: e0ec b.n 10035cfc -10035b22: f7d7 f905 bl 1000cd30 -10035b26: b118 cbz r0, 10035b30 -10035b28: f7d7 f904 bl 1000cd34 -10035b2c: f885 08f8 strb.w r0, [r5, #2296] ; 0x8f8 -10035b30: 8aa5 ldrh r5, [r4, #20] -10035b32: 6926 ldr r6, [r4, #16] -10035b34: f7e1 fc19 bl 1001736a -10035b38: 2000 movs r0, #0 -10035b3a: f001 fa49 bl 10036fd0 -10035b3e: f7e1 fc16 bl 1001736e -10035b42: 4628 mov r0, r5 -10035b44: f001 fa60 bl 10037008 -10035b48: 4604 mov r4, r0 -10035b4a: b178 cbz r0, 10035b6c -10035b4c: 462a mov r2, r5 -10035b4e: 6940 ldr r0, [r0, #20] -10035b50: 4631 mov r1, r6 -10035b52: f7e1 fc5d bl 10017410 -10035b56: 4629 mov r1, r5 -10035b58: 4620 mov r0, r4 -10035b5a: f000 fe45 bl 100367e8 -10035b5e: 2000 movs r0, #0 -10035b60: 4621 mov r1, r4 -10035b62: f001 fa71 bl 10037048 -10035b66: f04f 0a00 mov.w sl, #0 -10035b6a: e001 b.n 10035b70 -10035b6c: f04f 3aff mov.w sl, #4294967295 -10035b70: f7e1 fbfb bl 1001736a -10035b74: 2000 movs r0, #0 -10035b76: f001 fa35 bl 10036fe4 -10035b7a: f7e1 fbf8 bl 1001736e -10035b7e: e30c b.n 1003619a -10035b80: 7c23 ldrb r3, [r4, #16] -10035b82: b10b cbz r3, 10035b88 -10035b84: 2307 movs r3, #7 -10035b86: e000 b.n 10035b8a -10035b88: 2306 movs r3, #6 -10035b8a: 4628 mov r0, r5 -10035b8c: 2109 movs r1, #9 -10035b8e: aa12 add r2, sp, #72 ; 0x48 -10035b90: f88d 3048 strb.w r3, [sp, #72] ; 0x48 -10035b94: f7fc fcab bl 100324ee -10035b98: e0b0 b.n 10035cfc -10035b9a: 2320 movs r3, #32 -10035b9c: 2100 movs r1, #0 -10035b9e: 2211 movs r2, #17 -10035ba0: a80d add r0, sp, #52 ; 0x34 -10035ba2: f8ad 3018 strh.w r3, [sp, #24] -10035ba6: 9107 str r1, [sp, #28] -10035ba8: f008 f82c bl 1003dc04 -10035bac: a809 add r0, sp, #36 ; 0x24 -10035bae: f104 0110 add.w r1, r4, #16 -10035bb2: 2210 movs r2, #16 -10035bb4: f7e1 fc2c bl 10017410 -10035bb8: f8bd 9028 ldrh.w r9, [sp, #40] ; 0x28 -10035bbc: f109 0001 add.w r0, r9, #1 -10035bc0: f7e1 fdf6 bl 100177b0 -10035bc4: 9002 str r0, [sp, #8] -10035bc6: 2800 cmp r0, #0 -10035bc8: d03c beq.n 10035c44 -10035bca: 9909 ldr r1, [sp, #36] ; 0x24 -10035bcc: 464a mov r2, r9 -10035bce: f7e1 fc1f bl 10017410 -10035bd2: 9b02 ldr r3, [sp, #8] -10035bd4: 49b4 ldr r1, [pc, #720] ; (10035ea8 ) -10035bd6: 4618 mov r0, r3 -10035bd8: aa0d add r2, sp, #52 ; 0x34 -10035bda: 9307 str r3, [sp, #28] -10035bdc: f008 f8d4 bl 1003dd88 -10035be0: a80d add r0, sp, #52 ; 0x34 -10035be2: f7e4 fff9 bl 1001abd8 -10035be6: 4607 mov r7, r0 -10035be8: b100 cbz r0, 10035bec -10035bea: 1c47 adds r7, r0, #1 -10035bec: 9b07 ldr r3, [sp, #28] -10035bee: 4daf ldr r5, [pc, #700] ; (10035eac ) -10035bf0: 443b add r3, r7 -10035bf2: 9307 str r3, [sp, #28] -10035bf4: f04f 36ff mov.w r6, #4294967295 -10035bf8: 3601 adds r6, #1 -10035bfa: 2e1c cmp r6, #28 -10035bfc: d009 beq.n 10035c12 -10035bfe: 4628 mov r0, r5 -10035c00: a90d add r1, sp, #52 ; 0x34 -10035c02: f7e4 ffe1 bl 1001abc8 -10035c06: f1a5 0a08 sub.w sl, r5, #8 -10035c0a: 3518 adds r5, #24 -10035c0c: 2800 cmp r0, #0 -10035c0e: d1f3 bne.n 10035bf8 -10035c10: e0af b.n 10035d72 -10035c12: 2100 movs r1, #0 -10035c14: 9101 str r1, [sp, #4] -10035c16: 460d mov r5, r1 -10035c18: f06f 0a5e mvn.w sl, #94 ; 0x5e -10035c1c: 9802 ldr r0, [sp, #8] -10035c1e: 4649 mov r1, r9 -10035c20: f7e1 fbf3 bl 1001740a -10035c24: f04f 0800 mov.w r8, #0 -10035c28: 4646 mov r6, r8 -10035c2a: b11d cbz r5, 10035c34 -10035c2c: 4628 mov r0, r5 -10035c2e: 9901 ldr r1, [sp, #4] -10035c30: f7e1 fbeb bl 1001740a -10035c34: 2e00 cmp r6, #0 -10035c36: f000 82b0 beq.w 1003619a -10035c3a: 4630 mov r0, r6 -10035c3c: 4641 mov r1, r8 -10035c3e: f7e1 fbe4 bl 1001740a -10035c42: e2aa b.n 1003619a -10035c44: f06f 0a0b mvn.w sl, #11 -10035c48: e2a7 b.n 1003619a -10035c4a: f06f 0a5e mvn.w sl, #94 ; 0x5e -10035c4e: e2a4 b.n 1003619a -10035c50: f013 0f50 tst.w r3, #80 ; 0x50 -10035c54: f47f a9aa bne.w 10034fac -10035c58: 2100 movs r1, #0 -10035c5a: 2206 movs r2, #6 -10035c5c: f7e1 fbe8 bl 10017430 -10035c60: e04c b.n 10035cfc -10035c62: 6fe2 ldr r2, [r4, #124] ; 0x7c -10035c64: f8d5 30f8 ldr.w r3, [r5, #248] ; 0xf8 -10035c68: 429a cmp r2, r3 -10035c6a: f47f aa01 bne.w 10035070 -10035c6e: f7ff ba18 b.w 100350a2 -10035c72: 4628 mov r0, r5 -10035c74: f7e6 ff16 bl 1001caa4 -10035c78: 4628 mov r0, r5 -10035c7a: f7e7 feda bl 1001da32 -10035c7e: 4628 mov r0, r5 -10035c80: 2101 movs r1, #1 -10035c82: f7e7 fe69 bl 1001d958 -10035c86: f7ff ba81 b.w 1003518c -10035c8a: f06f 0315 mvn.w r3, #21 -10035c8e: 469a mov sl, r3 -10035c90: f7ff bbcb b.w 1003542a -10035c94: f06f 045e mvn.w r4, #94 ; 0x5e -10035c98: 4630 mov r0, r6 -10035c9a: 4649 mov r1, r9 -10035c9c: f7e1 fbb5 bl 1001740a -10035ca0: 46a2 mov sl, r4 -10035ca2: f7ff bbc2 b.w 1003542a -10035ca6: f013 0f60 tst.w r3, #96 ; 0x60 -10035caa: d001 beq.n 10035cb0 -10035cac: 2301 movs r3, #1 -10035cae: e003 b.n 10035cb8 -10035cb0: f013 0310 ands.w r3, r3, #16 -10035cb4: d002 beq.n 10035cbc -10035cb6: 2303 movs r3, #3 -10035cb8: 6123 str r3, [r4, #16] -10035cba: e01f b.n 10035cfc -10035cbc: 6123 str r3, [r4, #16] -10035cbe: e007 b.n 10035cd0 -10035cc0: 2201 movs r2, #1 -10035cc2: 6123 str r3, [r4, #16] -10035cc4: 7523 strb r3, [r4, #20] -10035cc6: 7562 strb r2, [r4, #21] -10035cc8: e002 b.n 10035cd0 -10035cca: f895 251e ldrb.w r2, [r5, #1310] ; 0x51e -10035cce: 75a2 strb r2, [r4, #22] -10035cd0: 469a mov sl, r3 -10035cd2: e262 b.n 1003619a -10035cd4: 4628 mov r0, r5 -10035cd6: f44f 6118 mov.w r1, #2432 ; 0x980 -10035cda: f7e8 fc47 bl 1001e56c -10035cde: 2801 cmp r0, #1 -10035ce0: 4680 mov r8, r0 -10035ce2: d10e bne.n 10035d02 -10035ce4: 4628 mov r0, r5 -10035ce6: f44f 6100 mov.w r1, #2048 ; 0x800 -10035cea: f7e8 fc3f bl 1001e56c -10035cee: b108 cbz r0, 10035cf4 -10035cf0: f885 8509 strb.w r8, [r5, #1289] ; 0x509 -10035cf4: 4628 mov r0, r5 -10035cf6: 2101 movs r1, #1 -10035cf8: f7e7 feac bl 1001da54 -10035cfc: f04f 0a00 mov.w sl, #0 -10035d00: e24b b.n 1003619a -10035d02: 8ae3 ldrh r3, [r4, #22] -10035d04: 642e str r6, [r5, #64] ; 0x40 -10035d06: 0b1b lsrs r3, r3, #12 -10035d08: f8a5 361a strh.w r3, [r5, #1562] ; 0x61a -10035d0c: 8ae3 ldrh r3, [r4, #22] -10035d0e: f3c3 030b ubfx r3, r3, #0, #12 -10035d12: f8a5 304a strh.w r3, [r5, #74] ; 0x4a -10035d16: 8aa3 ldrh r3, [r4, #20] -10035d18: f8a5 7048 strh.w r7, [r5, #72] ; 0x48 -10035d1c: 646b str r3, [r5, #68] ; 0x44 -10035d1e: 8aa3 ldrh r3, [r4, #20] -10035d20: b90b cbnz r3, 10035d26 -10035d22: 2100 movs r1, #0 -10035d24: e018 b.n 10035d58 -10035d26: 2e00 cmp r6, #0 -10035d28: d0fb beq.n 10035d22 -10035d2a: 2204 movs r2, #4 -10035d2c: a80d add r0, sp, #52 ; 0x34 -10035d2e: 4631 mov r1, r6 -10035d30: f7e4 ff3e bl 1001abb0 -10035d34: 9a0d ldr r2, [sp, #52] ; 0x34 -10035d36: 1e53 subs r3, r2, #1 -10035d38: 2b1f cmp r3, #31 -10035d3a: d8f2 bhi.n 10035d22 -10035d3c: ac1c add r4, sp, #112 ; 0x70 -10035d3e: 1d31 adds r1, r6, #4 -10035d40: a813 add r0, sp, #76 ; 0x4c -10035d42: f844 2d28 str.w r2, [r4, #-40]! -10035d46: f7e4 ff33 bl 1001abb0 -10035d4a: 9a0d ldr r2, [sp, #52] ; 0x34 -10035d4c: 4639 mov r1, r7 -10035d4e: 4630 mov r0, r6 -10035d50: 3204 adds r2, #4 -10035d52: f7e4 ff31 bl 1001abb8 -10035d56: 4621 mov r1, r4 -10035d58: 4628 mov r0, r5 -10035d5a: 2201 movs r2, #1 -10035d5c: f002 f9ad bl 100380ba -10035d60: f7ff b9b8 b.w 100350d4 -10035d64: 201e movs r0, #30 -10035d66: f7e1 fc75 bl 10017654 -10035d6a: 3e01 subs r6, #1 -10035d6c: f47f aca2 bne.w 100356b4 -10035d70: e4a5 b.n 100356be -10035d72: f8da 5000 ldr.w r5, [sl] -10035d76: f648 13ef movw r3, #35311 ; 0x89ef -10035d7a: 429d cmp r5, r3 -10035d7c: f240 81ea bls.w 10036154 -10035d80: 4682 mov sl, r0 -10035d82: 9004 str r0, [sp, #16] -10035d84: a80d add r0, sp, #52 ; 0x34 -10035d86: 494a ldr r1, [pc, #296] ; (10035eb0 ) -10035d88: f7e4 ff1e bl 1001abc8 -10035d8c: b918 cbnz r0, 10035d96 -10035d8e: f640 2128 movw r1, #2600 ; 0xa28 -10035d92: 9101 str r1, [sp, #4] -10035d94: e01c b.n 10035dd0 -10035d96: a80d add r0, sp, #52 ; 0x34 -10035d98: 4946 ldr r1, [pc, #280] ; (10035eb4 ) -10035d9a: f7e4 ff15 bl 1001abc8 -10035d9e: 2800 cmp r0, #0 -10035da0: d0f5 beq.n 10035d8e -10035da2: a80d add r0, sp, #52 ; 0x34 -10035da4: 4944 ldr r1, [pc, #272] ; (10035eb8 ) -10035da6: f7e4 ff0f bl 1001abc8 -10035daa: 2800 cmp r0, #0 -10035dac: d0ef beq.n 10035d8e -10035dae: a80d add r0, sp, #52 ; 0x34 -10035db0: 4942 ldr r1, [pc, #264] ; (10035ebc ) -10035db2: f7e4 ff09 bl 1001abc8 -10035db6: 2800 cmp r0, #0 -10035db8: d0e9 beq.n 10035d8e -10035dba: a80d add r0, sp, #52 ; 0x34 -10035dbc: 4940 ldr r1, [pc, #256] ; (10035ec0 ) -10035dbe: f7e4 ff03 bl 1001abc8 -10035dc2: f640 2328 movw r3, #2600 ; 0xa28 -10035dc6: 2800 cmp r0, #0 -10035dc8: bf18 it ne -10035dca: f44f 6380 movne.w r3, #1024 ; 0x400 -10035dce: 9301 str r3, [sp, #4] -10035dd0: 9801 ldr r0, [sp, #4] -10035dd2: f7e1 fced bl 100177b0 -10035dd6: 4605 mov r5, r0 -10035dd8: 2800 cmp r0, #0 -10035dda: f000 81d3 beq.w 10036184 -10035dde: 2318 movs r3, #24 -10035de0: 4373 muls r3, r6 -10035de2: ebc7 0709 rsb r7, r7, r9 -10035de6: 9703 str r7, [sp, #12] -10035de8: 4f36 ldr r7, [pc, #216] ; (10035ec4 ) -10035dea: 9305 str r3, [sp, #20] -10035dec: 441f add r7, r3 -10035dee: 88ba ldrh r2, [r7, #4] -10035df0: f412 43e0 ands.w r3, r2, #28672 ; 0x7000 -10035df4: f000 808d beq.w 10035f12 -10035df8: f3c2 020a ubfx r2, r2, #0, #11 -10035dfc: 2a00 cmp r2, #0 -10035dfe: f000 8088 beq.w 10035f12 -10035e02: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 -10035e06: d061 beq.n 10035ecc -10035e08: d806 bhi.n 10035e18 -10035e0a: f5b3 5f80 cmp.w r3, #4096 ; 0x1000 -10035e0e: f040 81bc bne.w 1003618a -10035e12: f04f 0b00 mov.w fp, #0 -10035e16: e009 b.n 10035e2c -10035e18: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 -10035e1c: d01e beq.n 10035e5c -10035e1e: f5b3 4fc0 cmp.w r3, #24576 ; 0x6000 -10035e22: f040 81b2 bne.w 1003618a -10035e26: f04f 0b00 mov.w fp, #0 -10035e2a: e067 b.n 10035efc -10035e2c: a807 add r0, sp, #28 -10035e2e: a906 add r1, sp, #24 -10035e30: f7e4 fede bl 1001abf0 -10035e34: b148 cbz r0, 10035e4a -10035e36: aa08 add r2, sp, #32 -10035e38: 4923 ldr r1, [pc, #140] ; (10035ec8 ) -10035e3a: f007 ffa5 bl 1003dd88 -10035e3e: 9a08 ldr r2, [sp, #32] -10035e40: f805 200b strb.w r2, [r5, fp] -10035e44: f10b 0b01 add.w fp, fp, #1 -10035e48: e7f0 b.n 10035e2c -10035e4a: 88ba ldrh r2, [r7, #4] -10035e4c: fa1f f18b uxth.w r1, fp -10035e50: f3c2 020a ubfx r2, r2, #0, #11 -10035e54: f8ad b028 strh.w fp, [sp, #40] ; 0x28 -10035e58: 4291 cmp r1, r2 -10035e5a: e020 b.n 10035e9e -10035e5c: f04f 0c00 mov.w ip, #0 -10035e60: a807 add r0, sp, #28 -10035e62: a906 add r1, sp, #24 -10035e64: f8cd c000 str.w ip, [sp] -10035e68: f7e4 fec2 bl 1001abf0 -10035e6c: f8dd c000 ldr.w ip, [sp] -10035e70: b158 cbz r0, 10035e8a -10035e72: 4915 ldr r1, [pc, #84] ; (10035ec8 ) -10035e74: aa08 add r2, sp, #32 -10035e76: f007 ff87 bl 1003dd88 -10035e7a: f8dd c000 ldr.w ip, [sp] -10035e7e: 9b08 ldr r3, [sp, #32] -10035e80: f845 302c str.w r3, [r5, ip, lsl #2] -10035e84: f10c 0c01 add.w ip, ip, #1 -10035e88: e7ea b.n 10035e60 -10035e8a: 88ba ldrh r2, [r7, #4] -10035e8c: ea4f 0b8c mov.w fp, ip, lsl #2 -10035e90: f8ad c028 strh.w ip, [sp, #40] ; 0x28 -10035e94: f3c2 020a ubfx r2, r2, #0, #11 -10035e98: fa1f fc8c uxth.w ip, ip -10035e9c: 4594 cmp ip, r2 -10035e9e: dd2d ble.n 10035efc -10035ea0: f8ad 2028 strh.w r2, [sp, #40] ; 0x28 -10035ea4: e02a b.n 10035efc -10035ea6: bf00 nop -10035ea8: 1004227b .word 0x1004227b -10035eac: 10041d54 .word 0x10041d54 -10035eb0: 10042280 .word 0x10042280 -10035eb4: 1004228b .word 0x1004228b -10035eb8: 10042296 .word 0x10042296 -10035ebc: 100422a0 .word 0x100422a0 -10035ec0: 100422aa .word 0x100422aa -10035ec4: 10041d4c .word 0x10041d4c -10035ec8: 100422b1 .word 0x100422b1 -10035ecc: 9b03 ldr r3, [sp, #12] -10035ece: 2b00 cmp r3, #0 -10035ed0: dd0d ble.n 10035eee -10035ed2: b29b uxth r3, r3 -10035ed4: 4293 cmp r3, r2 -10035ed6: bfd6 itet le -10035ed8: 9b03 ldrle r3, [sp, #12] -10035eda: f8ad 2028 strhgt.w r2, [sp, #40] ; 0x28 -10035ede: f8ad 3028 strhle.w r3, [sp, #40] ; 0x28 -10035ee2: 9907 ldr r1, [sp, #28] -10035ee4: f8bd 2028 ldrh.w r2, [sp, #40] ; 0x28 -10035ee8: f7e1 fa92 bl 10017410 -10035eec: e004 b.n 10035ef8 -10035eee: 2301 movs r3, #1 -10035ef0: f8ad 3028 strh.w r3, [sp, #40] ; 0x28 -10035ef4: 2300 movs r3, #0 -10035ef6: 7003 strb r3, [r0, #0] -10035ef8: f8bd b028 ldrh.w fp, [sp, #40] ; 0x28 -10035efc: 88ba ldrh r2, [r7, #4] -10035efe: 0510 lsls r0, r2, #20 -10035f00: d50b bpl.n 10035f1a -10035f02: f8bd 1028 ldrh.w r1, [sp, #40] ; 0x28 -10035f06: f3c2 020a ubfx r2, r2, #0, #11 -10035f0a: 4291 cmp r1, r2 -10035f0c: f040 8140 bne.w 10036190 -10035f10: e003 b.n 10035f1a -10035f12: 2300 movs r3, #0 -10035f14: f8ad 3028 strh.w r3, [sp, #40] ; 0x28 -10035f18: 469b mov fp, r3 -10035f1a: 88ba ldrh r2, [r7, #4] -10035f1c: 0511 lsls r1, r2, #20 -10035f1e: d512 bpl.n 10035f46 -10035f20: 4610 mov r0, r2 -10035f22: 9200 str r2, [sp, #0] -10035f24: f7fd f9ee bl 10033304 -10035f28: 4450 add r0, sl -10035f2a: 2810 cmp r0, #16 -10035f2c: 9a00 ldr r2, [sp, #0] -10035f2e: dc0a bgt.n 10035f46 -10035f30: f1ba 0f00 cmp.w sl, #0 -10035f34: d001 beq.n 10035f3a -10035f36: 9b04 ldr r3, [sp, #16] -10035f38: 9309 str r3, [sp, #36] ; 0x24 -10035f3a: a809 add r0, sp, #36 ; 0x24 -10035f3c: 4450 add r0, sl -10035f3e: 4629 mov r1, r5 -10035f40: f1ca 0210 rsb r2, sl, #16 -10035f44: e007 b.n 10035f56 -10035f46: f402 41c0 and.w r1, r2, #24576 ; 0x6000 -10035f4a: f5b1 4fc0 cmp.w r1, #24576 ; 0x6000 -10035f4e: d105 bne.n 10035f5c -10035f50: 9809 ldr r0, [sp, #36] ; 0x24 -10035f52: 9907 ldr r1, [sp, #28] -10035f54: 9a03 ldr r2, [sp, #12] -10035f56: f7e1 fa5b bl 10017410 -10035f5a: e019 b.n 10035f90 -10035f5c: b962 cbnz r2, 10035f78 -10035f5e: 88f8 ldrh r0, [r7, #6] -10035f60: 0502 lsls r2, r0, #20 -10035f62: d509 bpl.n 10035f78 -10035f64: f7fd f9ce bl 10033304 -10035f68: 2810 cmp r0, #16 -10035f6a: dc05 bgt.n 10035f78 -10035f6c: f1ba 0f00 cmp.w sl, #0 -10035f70: d00e beq.n 10035f90 -10035f72: 9b04 ldr r3, [sp, #16] -10035f74: 9309 str r3, [sp, #36] ; 0x24 -10035f76: e00b b.n 10035f90 -10035f78: 45cb cmp fp, r9 -10035f7a: 9809 ldr r0, [sp, #36] ; 0x24 -10035f7c: 4629 mov r1, r5 -10035f7e: bf8c ite hi -10035f80: f109 32ff addhi.w r2, r9, #4294967295 -10035f84: 465a movls r2, fp -10035f86: f7e1 fa43 bl 10017410 -10035f8a: 9b04 ldr r3, [sp, #16] -10035f8c: f8ad 302a strh.w r3, [sp, #42] ; 0x2a -10035f90: 4649 mov r1, r9 -10035f92: 9802 ldr r0, [sp, #8] -10035f94: f7e1 fa39 bl 1001740a -10035f98: 4a82 ldr r2, [pc, #520] ; (100361a4 ) -10035f9a: 9905 ldr r1, [sp, #20] -10035f9c: 5853 ldr r3, [r2, r1] -10035f9e: 07db lsls r3, r3, #31 -10035fa0: d40d bmi.n 10035fbe -10035fa2: f8b7 b004 ldrh.w fp, [r7, #4] -10035fa6: 4658 mov r0, fp -10035fa8: f7fd f9ac bl 10033304 -10035fac: f41b 6f00 tst.w fp, #2048 ; 0x800 -10035fb0: 4603 mov r3, r0 -10035fb2: d010 beq.n 10035fd6 -10035fb4: 4482 add sl, r0 -10035fb6: f1ba 0f10 cmp.w sl, #16 -10035fba: d90d bls.n 10035fd8 -10035fbc: e00b b.n 10035fd6 -10035fbe: f8b7 a006 ldrh.w sl, [r7, #6] -10035fc2: 4650 mov r0, sl -10035fc4: f7fd f99e bl 10033304 -10035fc8: f41a 6f00 tst.w sl, #2048 ; 0x800 -10035fcc: 4603 mov r3, r0 -10035fce: d002 beq.n 10035fd6 -10035fd0: 2810 cmp r0, #16 -10035fd2: d901 bls.n 10035fd8 -10035fd4: e008 b.n 10035fe8 -10035fd6: b93b cbnz r3, 10035fe8 -10035fd8: 4628 mov r0, r5 -10035fda: 9901 ldr r1, [sp, #4] -10035fdc: f7e1 fa15 bl 1001740a -10035fe0: 2300 movs r3, #0 -10035fe2: ad09 add r5, sp, #36 ; 0x24 -10035fe4: 9302 str r3, [sp, #8] -10035fe6: e000 b.n 10035fea -10035fe8: 9502 str r5, [sp, #8] -10035fea: 4b6f ldr r3, [pc, #444] ; (100361a8 ) -10035fec: 4640 mov r0, r8 -10035fee: f853 6026 ldr.w r6, [r3, r6, lsl #2] -10035ff2: 2100 movs r1, #0 -10035ff4: aa09 add r2, sp, #36 ; 0x24 -10035ff6: 462b mov r3, r5 -10035ff8: 47b0 blx r6 -10035ffa: f8b7 8006 ldrh.w r8, [r7, #6] -10035ffe: 4682 mov sl, r0 -10036000: f418 4fe0 tst.w r8, #28672 ; 0x7000 -10036004: f000 80a0 beq.w 10036148 -10036008: f3c8 060a ubfx r6, r8, #0, #11 -1003600c: 2e00 cmp r6, #0 -1003600e: f000 809b beq.w 10036148 -10036012: a812 add r0, sp, #72 ; 0x48 -10036014: 2100 movs r1, #0 -10036016: 2214 movs r2, #20 -10036018: f007 fdf4 bl 1003dc04 -1003601c: f418 6f00 tst.w r8, #2048 ; 0x800 -10036020: d006 beq.n 10036030 -10036022: 4640 mov r0, r8 -10036024: f7fd f96e bl 10033304 -10036028: 2810 cmp r0, #16 -1003602a: dc01 bgt.n 10036030 -1003602c: 46b3 mov fp, r6 -1003602e: e001 b.n 10036034 -10036030: f8bd b028 ldrh.w fp, [sp, #40] ; 0x28 -10036034: a80d add r0, sp, #52 ; 0x34 -10036036: 495d ldr r1, [pc, #372] ; (100361ac ) -10036038: f7e4 fdc6 bl 1001abc8 -1003603c: b910 cbnz r0, 10036044 -1003603e: f640 2828 movw r8, #2600 ; 0xa28 -10036042: e01b b.n 1003607c -10036044: a80d add r0, sp, #52 ; 0x34 -10036046: 495a ldr r1, [pc, #360] ; (100361b0 ) -10036048: f7e4 fdbe bl 1001abc8 -1003604c: 2800 cmp r0, #0 -1003604e: d0f6 beq.n 1003603e -10036050: a80d add r0, sp, #52 ; 0x34 -10036052: 4958 ldr r1, [pc, #352] ; (100361b4 ) -10036054: f7e4 fdb8 bl 1001abc8 -10036058: 2800 cmp r0, #0 -1003605a: d0f0 beq.n 1003603e -1003605c: a80d add r0, sp, #52 ; 0x34 -1003605e: 4956 ldr r1, [pc, #344] ; (100361b8 ) -10036060: f7e4 fdb2 bl 1001abc8 -10036064: 2800 cmp r0, #0 -10036066: d0ea beq.n 1003603e -10036068: a80d add r0, sp, #52 ; 0x34 -1003606a: 4954 ldr r1, [pc, #336] ; (100361bc ) -1003606c: f7e4 fdac bl 1001abc8 -10036070: f640 2828 movw r8, #2600 ; 0xa28 -10036074: 2800 cmp r0, #0 -10036076: bf18 it ne -10036078: f44f 6880 movne.w r8, #1024 ; 0x400 -1003607c: 4640 mov r0, r8 -1003607e: f7e1 fb97 bl 100177b0 -10036082: 4606 mov r6, r0 -10036084: 2800 cmp r0, #0 -10036086: d059 beq.n 1003613c -10036088: 88fa ldrh r2, [r7, #6] -1003608a: f402 42e0 and.w r2, r2, #28672 ; 0x7000 -1003608e: f5b2 5f00 cmp.w r2, #8192 ; 0x2000 -10036092: d041 beq.n 10036118 -10036094: f5b2 4f80 cmp.w r2, #16384 ; 0x4000 -10036098: d004 beq.n 100360a4 -1003609a: f5b2 5f80 cmp.w r2, #4096 ; 0x1000 -1003609e: d150 bne.n 10036142 -100360a0: 2700 movs r7, #0 -100360a2: e018 b.n 100360d6 -100360a4: 2700 movs r7, #0 -100360a6: e034 b.n 10036112 -100360a8: 4945 ldr r1, [pc, #276] ; (100361c0 ) -100360aa: 5dea ldrb r2, [r5, r7] -100360ac: a812 add r0, sp, #72 ; 0x48 -100360ae: f7e4 fd31 bl 1001ab14 -100360b2: a812 add r0, sp, #72 ; 0x48 -100360b4: f7e4 fd90 bl 1001abd8 -100360b8: 4602 mov r2, r0 -100360ba: 4630 mov r0, r6 -100360bc: 9200 str r2, [sp, #0] -100360be: f7e4 fd8b bl 1001abd8 -100360c2: 9a00 ldr r2, [sp, #0] -100360c4: 1811 adds r1, r2, r0 -100360c6: 3101 adds r1, #1 -100360c8: 4541 cmp r1, r8 -100360ca: d807 bhi.n 100360dc -100360cc: 4430 add r0, r6 -100360ce: a912 add r1, sp, #72 ; 0x48 -100360d0: f7e1 f99e bl 10017410 -100360d4: 3701 adds r7, #1 -100360d6: 455f cmp r7, fp -100360d8: dbe6 blt.n 100360a8 -100360da: e021 b.n 10036120 -100360dc: f06f 0a06 mvn.w sl, #6 -100360e0: e059 b.n 10036196 -100360e2: 4937 ldr r1, [pc, #220] ; (100361c0 ) -100360e4: f855 2027 ldr.w r2, [r5, r7, lsl #2] -100360e8: a812 add r0, sp, #72 ; 0x48 -100360ea: f7e4 fd13 bl 1001ab14 -100360ee: a812 add r0, sp, #72 ; 0x48 -100360f0: f7e4 fd72 bl 1001abd8 -100360f4: 4602 mov r2, r0 -100360f6: 4630 mov r0, r6 -100360f8: 9200 str r2, [sp, #0] -100360fa: f7e4 fd6d bl 1001abd8 -100360fe: 9a00 ldr r2, [sp, #0] -10036100: 1811 adds r1, r2, r0 -10036102: 3101 adds r1, #1 -10036104: 4541 cmp r1, r8 -10036106: d8e9 bhi.n 100360dc -10036108: 4430 add r0, r6 -1003610a: a912 add r1, sp, #72 ; 0x48 -1003610c: f7e1 f980 bl 10017410 -10036110: 3701 adds r7, #1 -10036112: 455f cmp r7, fp -10036114: dbe5 blt.n 100360e2 -10036116: e003 b.n 10036120 -10036118: 4629 mov r1, r5 -1003611a: 465a mov r2, fp -1003611c: f7e1 f978 bl 10017410 -10036120: 4630 mov r0, r6 -10036122: f7e4 fd59 bl 1001abd8 -10036126: 1c42 adds r2, r0, #1 -10036128: 454a cmp r2, r9 -1003612a: 82a2 strh r2, [r4, #20] -1003612c: 6920 ldr r0, [r4, #16] -1003612e: 4631 mov r1, r6 -10036130: bf88 it hi -10036132: f109 32ff addhi.w r2, r9, #4294967295 -10036136: f7e1 f96b bl 10017410 -1003613a: e02c b.n 10036196 -1003613c: f06f 0a0b mvn.w sl, #11 -10036140: e029 b.n 10036196 -10036142: f04f 3aff mov.w sl, #4294967295 -10036146: e026 b.n 10036196 -10036148: f04f 0800 mov.w r8, #0 -1003614c: f8a4 8014 strh.w r8, [r4, #20] -10036150: 4646 mov r6, r8 -10036152: e020 b.n 10036196 -10036154: 4b13 ldr r3, [pc, #76] ; (100361a4 ) -10036156: f04f 36ff mov.w r6, #4294967295 -1003615a: 3601 adds r6, #1 -1003615c: 2e1c cmp r6, #28 -1003615e: d00d beq.n 1003617c -10036160: f993 2008 ldrsb.w r2, [r3, #8] -10036164: b10a cbz r2, 1003616a -10036166: 3318 adds r3, #24 -10036168: e7f7 b.n 1003615a -1003616a: 6859 ldr r1, [r3, #4] -1003616c: f8da 2004 ldr.w r2, [sl, #4] -10036170: 4291 cmp r1, r2 -10036172: d1f8 bne.n 10036166 -10036174: 9504 str r5, [sp, #16] -10036176: f04f 0a04 mov.w sl, #4 -1003617a: e603 b.n 10035d84 -1003617c: 2200 movs r2, #0 -1003617e: 9201 str r2, [sp, #4] -10036180: 4615 mov r5, r2 -10036182: e005 b.n 10036190 -10036184: f06f 0a0b mvn.w sl, #11 -10036188: e548 b.n 10035c1c -1003618a: f04f 3aff mov.w sl, #4294967295 -1003618e: e545 b.n 10035c1c -10036190: f06f 0a15 mvn.w sl, #21 -10036194: e542 b.n 10035c1c -10036196: 9d02 ldr r5, [sp, #8] -10036198: e547 b.n 10035c2a -1003619a: 4650 mov r0, sl -1003619c: b01d add sp, #116 ; 0x74 -1003619e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -100361a2: bf00 nop -100361a4: 10041d4c .word 0x10041d4c -100361a8: 10041d00 .word 0x10041d00 -100361ac: 10042280 .word 0x10042280 -100361b0: 1004228b .word 0x1004228b -100361b4: 10042296 .word 0x10042296 -100361b8: 100422a0 .word 0x100422a0 -100361bc: 100422aa .word 0x100422aa -100361c0: 100422b4 .word 0x100422b4 - -100361c4 : -100361c4: 2001 movs r0, #1 -100361c6: 4770 bx lr - -100361c8 : -100361c8: 2300 movs r3, #0 -100361ca: 608b str r3, [r1, #8] -100361cc: 60cb str r3, [r1, #12] -100361ce: 2001 movs r0, #1 -100361d0: 4770 bx lr - -100361d2 : -100361d2: 4770 bx lr - -100361d4 : -100361d4: b570 push {r4, r5, r6, lr} -100361d6: b08a sub sp, #40 ; 0x28 -100361d8: 2100 movs r1, #0 -100361da: 2601 movs r6, #1 -100361dc: 2220 movs r2, #32 -100361de: 4604 mov r4, r0 -100361e0: a802 add r0, sp, #8 -100361e2: f88d 1000 strb.w r1, [sp] -100361e6: f88d 1001 strb.w r1, [sp, #1] -100361ea: f88d 1002 strb.w r1, [sp, #2] -100361ee: f88d 1003 strb.w r1, [sp, #3] -100361f2: f88d 1004 strb.w r1, [sp, #4] -100361f6: f88d 6005 strb.w r6, [sp, #5] -100361fa: f7e4 fcdd bl 1001abb8 -100361fe: f10d 001a add.w r0, sp, #26 -10036202: 4669 mov r1, sp -10036204: 2206 movs r2, #6 -10036206: f88d 6019 strb.w r6, [sp, #25] -1003620a: f7e4 fcd1 bl 1001abb0 -1003620e: 4b16 ldr r3, [pc, #88] ; (10036268 ) -10036210: 6818 ldr r0, [r3, #0] -10036212: b318 cbz r0, 1003625c -10036214: a902 add r1, sp, #8 -10036216: f648 3214 movw r2, #35604 ; 0x8b14 -1003621a: f7fe fd9d bl 10034d58 -1003621e: f894 38f9 ldrb.w r3, [r4, #2297] ; 0x8f9 -10036222: 4605 mov r5, r0 -10036224: b1eb cbz r3, 10036262 -10036226: f894 286e ldrb.w r2, [r4, #2158] ; 0x86e -1003622a: f894 386d ldrb.w r3, [r4, #2157] ; 0x86d -1003622e: 429a cmp r2, r3 -10036230: d20f bcs.n 10036252 -10036232: 4b0e ldr r3, [pc, #56] ; (1003626c ) -10036234: 781a ldrb r2, [r3, #0] -10036236: b9a2 cbnz r2, 10036262 -10036238: f504 6006 add.w r0, r4, #2144 ; 0x860 -1003623c: f64e 2160 movw r1, #60000 ; 0xea60 -10036240: 701e strb r6, [r3, #0] -10036242: f000 fde9 bl 10036e18 -10036246: f894 386e ldrb.w r3, [r4, #2158] ; 0x86e -1003624a: 4433 add r3, r6 -1003624c: f884 386e strb.w r3, [r4, #2158] ; 0x86e -10036250: e007 b.n 10036262 -10036252: 4620 mov r0, r4 -10036254: 4906 ldr r1, [pc, #24] ; (10036270 ) -10036256: f7fd fc70 bl 10033b3a -1003625a: e002 b.n 10036262 -1003625c: f04f 30ff mov.w r0, #4294967295 -10036260: e000 b.n 10036264 -10036262: 4628 mov r0, r5 -10036264: b00a add sp, #40 ; 0x28 -10036266: bd70 pop {r4, r5, r6, pc} -10036268: 1004df9c .word 0x1004df9c -1003626c: 1004baf0 .word 0x1004baf0 -10036270: 1003fc3d .word 0x1003fc3d - -10036274 : -10036274: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10036278: b08c sub sp, #48 ; 0x30 -1003627a: 4604 mov r4, r0 -1003627c: 460f mov r7, r1 -1003627e: f241 1590 movw r5, #4496 ; 0x1190 -10036282: f7ef fe09 bl 10025e98 -10036286: 2064 movs r0, #100 ; 0x64 -10036288: f7e1 f9e4 bl 10017654 -1003628c: 5963 ldr r3, [r4, r5] -1003628e: b1bb cbz r3, 100362c0 -10036290: f7e1 f9a6 bl 100175e0 -10036294: 5963 ldr r3, [r4, r5] -10036296: 4606 mov r6, r0 -10036298: ebc3 0800 rsb r8, r3, r0 -1003629c: 203c movs r0, #60 ; 0x3c -1003629e: f7e1 f9c5 bl 1001762c -100362a2: 4580 cmp r8, r0 -100362a4: d20c bcs.n 100362c0 -100362a6: 2201 movs r2, #1 -100362a8: f241 1394 movw r3, #4500 ; 0x1194 -100362ac: 54e2 strb r2, [r4, r3] -100362ae: 2300 movs r3, #0 -100362b0: 5163 str r3, [r4, r5] -100362b2: f241 1398 movw r3, #4504 ; 0x1198 -100362b6: 50e6 str r6, [r4, r3] -100362b8: 4620 mov r0, r4 -100362ba: f7ff ff8b bl 100361d4 -100362be: e002 b.n 100362c6 -100362c0: f7e1 f98e bl 100175e0 -100362c4: 5160 str r0, [r4, r5] -100362c6: a805 add r0, sp, #20 -100362c8: 2100 movs r1, #0 -100362ca: 221c movs r2, #28 -100362cc: f7e1 f8b0 bl 10017430 -100362d0: 9b05 ldr r3, [sp, #20] -100362d2: b117 cbz r7, 100362da -100362d4: f043 0304 orr.w r3, r3, #4 -100362d8: e001 b.n 100362de -100362da: f043 0308 orr.w r3, r3, #8 -100362de: 9305 str r3, [sp, #20] -100362e0: f10d 001a add.w r0, sp, #26 -100362e4: 2301 movs r3, #1 -100362e6: f104 0174 add.w r1, r4, #116 ; 0x74 -100362ea: 2206 movs r2, #6 -100362ec: f88d 3019 strb.w r3, [sp, #25] -100362f0: f7e1 f88e bl 10017410 -100362f4: a801 add r0, sp, #4 -100362f6: 2100 movs r1, #0 -100362f8: 2210 movs r2, #16 -100362fa: f7e1 f899 bl 10017430 -100362fe: 231c movs r3, #28 -10036300: f8ad 3008 strh.w r3, [sp, #8] -10036304: f641 0334 movw r3, #6196 ; 0x1834 -10036308: 58e0 ldr r0, [r4, r3] -1003630a: f648 4106 movw r1, #35846 ; 0x8c06 -1003630e: aa01 add r2, sp, #4 -10036310: ab05 add r3, sp, #20 -10036312: f7fd fc0d bl 10033b30 -10036316: b00c add sp, #48 ; 0x30 -10036318: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1003631c : -1003631c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -10036320: 688d ldr r5, [r1, #8] -10036322: 4604 mov r4, r0 -10036324: 460e mov r6, r1 -10036326: f600 3954 addw r9, r0, #2900 ; 0xb54 -1003632a: 2d00 cmp r5, #0 -1003632c: f000 80d6 beq.w 100364dc -10036330: 6f8b ldr r3, [r1, #120] ; 0x78 -10036332: 4628 mov r0, r5 -10036334: 612b str r3, [r5, #16] -10036336: 6f09 ldr r1, [r1, #112] ; 0x70 -10036338: f000 fa87 bl 1003684a -1003633c: 6f33 ldr r3, [r6, #112] ; 0x70 -1003633e: 622b str r3, [r5, #32] -10036340: 6923 ldr r3, [r4, #16] -10036342: 06d9 lsls r1, r3, #27 -10036344: d515 bpl.n 10036372 -10036346: 46b0 mov r8, r6 -10036348: f818 7f36 ldrb.w r7, [r8, #54]! -1003634c: f504 51a4 add.w r1, r4, #5248 ; 0x1480 -10036350: 4640 mov r0, r8 -10036352: 3119 adds r1, #25 -10036354: 2206 movs r2, #6 -10036356: f7e1 f863 bl 10017420 -1003635a: b950 cbnz r0, 10036372 -1003635c: f241 73c9 movw r3, #6089 ; 0x17c9 -10036360: 5ce3 ldrb r3, [r4, r3] -10036362: f007 0701 and.w r7, r7, #1 -10036366: 2b00 cmp r3, #0 -10036368: f000 80bf beq.w 100364ea -1003636c: 2f00 cmp r7, #0 -1003636e: f000 80b5 beq.w 100364dc -10036372: f641 0334 movw r3, #6196 ; 0x1834 -10036376: 58e3 ldr r3, [r4, r3] -10036378: 61eb str r3, [r5, #28] -1003637a: 692b ldr r3, [r5, #16] -1003637c: 8998 ldrh r0, [r3, #12] -1003637e: f7e1 f801 bl 10017384 <_htons> -10036382: f648 038e movw r3, #34958 ; 0x888e -10036386: 4298 cmp r0, r3 -10036388: 692b ldr r3, [r5, #16] -1003638a: d116 bne.n 100363ba -1003638c: f241 3285 movw r2, #4997 ; 0x1385 -10036390: 5ca2 ldrb r2, [r4, r2] -10036392: b192 cbz r2, 100363ba -10036394: 7bda ldrb r2, [r3, #15] -10036396: 2a03 cmp r2, #3 -10036398: d00f beq.n 100363ba -1003639a: f504 6046 add.w r0, r4, #3168 ; 0xc60 -1003639e: f106 0142 add.w r1, r6, #66 ; 0x42 -100363a2: f7f1 ff77 bl 10028294 -100363a6: 2800 cmp r0, #0 -100363a8: f000 8098 beq.w 100364dc -100363ac: 6929 ldr r1, [r5, #16] -100363ae: 6a2a ldr r2, [r5, #32] -100363b0: 2300 movs r3, #0 -100363b2: 200d movs r0, #13 -100363b4: f7d7 f8de bl 1000d574 -100363b8: e090 b.n 100364dc -100363ba: 8998 ldrh r0, [r3, #12] -100363bc: f7e0 ffe2 bl 10017384 <_htons> -100363c0: f648 038e movw r3, #34958 ; 0x888e -100363c4: 4298 cmp r0, r3 -100363c6: d148 bne.n 1003645a -100363c8: f241 036c movw r3, #4204 ; 0x106c -100363cc: 58e3 ldr r3, [r4, r3] -100363ce: 2b03 cmp r3, #3 -100363d0: d001 beq.n 100363d6 -100363d2: 2b06 cmp r3, #6 -100363d4: d141 bne.n 1003645a -100363d6: f504 6046 add.w r0, r4, #3168 ; 0xc60 -100363da: f106 0142 add.w r1, r6, #66 ; 0x42 -100363de: f8d5 a010 ldr.w sl, [r5, #16] -100363e2: f7f1 ff57 bl 10028294 -100363e6: 4680 mov r8, r0 -100363e8: 2800 cmp r0, #0 -100363ea: d077 beq.n 100364dc -100363ec: 6923 ldr r3, [r4, #16] -100363ee: 06da lsls r2, r3, #27 -100363f0: f140 80a5 bpl.w 1003653e -100363f4: f8d0 20fc ldr.w r2, [r0, #252] ; 0xfc -100363f8: f202 128b addw r2, r2, #395 ; 0x18b -100363fc: eb04 0282 add.w r2, r4, r2, lsl #2 -10036400: f8d2 7d08 ldr.w r7, [r2, #3336] ; 0xd08 -10036404: 2f00 cmp r7, #0 -10036406: d069 beq.n 100364dc -10036408: f89a 200f ldrb.w r2, [sl, #15] -1003640c: 2a03 cmp r2, #3 -1003640e: d00b beq.n 10036428 -10036410: 2300 movs r3, #0 -10036412: 200d movs r0, #13 -10036414: 6929 ldr r1, [r5, #16] -10036416: 6a2a ldr r2, [r5, #32] -10036418: f7d7 f8ac bl 1000d574 -1003641c: 2300 movs r3, #0 -1003641e: f8c7 3310 str.w r3, [r7, #784] ; 0x310 -10036422: f8c7 3314 str.w r3, [r7, #788] ; 0x314 -10036426: e059 b.n 100364dc -10036428: 071b lsls r3, r3, #28 -1003642a: d50d bpl.n 10036448 -1003642c: f8d7 3310 ldr.w r3, [r7, #784] ; 0x310 -10036430: b953 cbnz r3, 10036448 -10036432: f8d7 3314 ldr.w r3, [r7, #788] ; 0x314 -10036436: b93b cbnz r3, 10036448 -10036438: f44f 70fa mov.w r0, #500 ; 0x1f4 -1003643c: f7e1 f90a bl 10017654 -10036440: 4620 mov r0, r4 -10036442: 4641 mov r1, r8 -10036444: f7ee fa44 bl 100248d0 -10036448: 692b ldr r3, [r5, #16] -1003644a: 4620 mov r0, r4 -1003644c: f8c7 30d4 str.w r3, [r7, #212] ; 0xd4 -10036450: 6a2b ldr r3, [r5, #32] -10036452: 4641 mov r1, r8 -10036454: f8c7 30d8 str.w r3, [r7, #216] ; 0xd8 -10036458: e03e b.n 100364d8 -1003645a: f241 036c movw r3, #4204 ; 0x106c -1003645e: 58e3 ldr r3, [r4, r3] -10036460: 2b04 cmp r3, #4 -10036462: d001 beq.n 10036468 -10036464: 2b07 cmp r3, #7 -10036466: d128 bne.n 100364ba -10036468: 692b ldr r3, [r5, #16] -1003646a: 8998 ldrh r0, [r3, #12] -1003646c: f7e0 ff8a bl 10017384 <_htons> -10036470: f648 038e movw r3, #34958 ; 0x888e -10036474: 4298 cmp r0, r3 -10036476: d120 bne.n 100364ba -10036478: f106 0142 add.w r1, r6, #66 ; 0x42 -1003647c: f504 6046 add.w r0, r4, #3168 ; 0xc60 -10036480: f7f1 ff08 bl 10028294 -10036484: 4601 mov r1, r0 -10036486: b348 cbz r0, 100364dc -10036488: 6923 ldr r3, [r4, #16] -1003648a: 06df lsls r7, r3, #27 -1003648c: d55d bpl.n 1003654a -1003648e: f8d0 30fc ldr.w r3, [r0, #252] ; 0xfc -10036492: f203 138b addw r3, r3, #395 ; 0x18b -10036496: eb04 0383 add.w r3, r4, r3, lsl #2 -1003649a: f8d3 3d08 ldr.w r3, [r3, #3336] ; 0xd08 -1003649e: b1eb cbz r3, 100364dc -100364a0: 692a ldr r2, [r5, #16] -100364a2: f8c3 20d4 str.w r2, [r3, #212] ; 0xd4 -100364a6: 6a2a ldr r2, [r5, #32] -100364a8: f8c3 20d8 str.w r2, [r3, #216] ; 0xd8 -100364ac: 6923 ldr r3, [r4, #16] -100364ae: 06d8 lsls r0, r3, #27 -100364b0: d50f bpl.n 100364d2 -100364b2: 4620 mov r0, r4 -100364b4: f7ef f8ce bl 10025654 -100364b8: e010 b.n 100364dc -100364ba: 4628 mov r0, r5 -100364bc: f000 fdde bl 1003707c -100364c0: 2300 movs r3, #0 -100364c2: 60b3 str r3, [r6, #8] -100364c4: 4630 mov r0, r6 -100364c6: 4649 mov r1, r9 -100364c8: f7f0 fa24 bl 10026914 -100364cc: 2001 movs r0, #1 -100364ce: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -100364d2: 071b lsls r3, r3, #28 -100364d4: d502 bpl.n 100364dc -100364d6: 4620 mov r0, r4 -100364d8: f7ef f980 bl 100257dc -100364dc: 4630 mov r0, r6 -100364de: 4649 mov r1, r9 -100364e0: f7f0 fa18 bl 10026914 -100364e4: 2000 movs r0, #0 -100364e6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -100364ea: f8d4 3ca4 ldr.w r3, [r4, #3236] ; 0xca4 -100364ee: 2b03 cmp r3, #3 -100364f0: f77f af3c ble.w 1003636c -100364f4: b167 cbz r7, 10036510 -100364f6: 4620 mov r0, r4 -100364f8: f7f1 ff22 bl 10028340 -100364fc: 2800 cmp r0, #0 -100364fe: f43f af38 beq.w 10036372 -10036502: 4628 mov r0, r5 -10036504: 2101 movs r1, #1 -10036506: 224a movs r2, #74 ; 0x4a -10036508: f000 f9af bl 1003686a -1003650c: 4680 mov r8, r0 -1003650e: e008 b.n 10036522 -10036510: f504 6046 add.w r0, r4, #3168 ; 0xc60 -10036514: 4641 mov r1, r8 -10036516: f7f1 febd bl 10028294 -1003651a: 2800 cmp r0, #0 -1003651c: f43f af29 beq.w 10036372 -10036520: 46b8 mov r8, r7 -10036522: f641 0334 movw r3, #6196 ; 0x1834 -10036526: 58e1 ldr r1, [r4, r3] -10036528: 4628 mov r0, r5 -1003652a: 61e9 str r1, [r5, #28] -1003652c: f000 fa0a bl 10036944 -10036530: 2f00 cmp r7, #0 -10036532: d0c5 beq.n 100364c0 -10036534: f1b8 0f00 cmp.w r8, #0 -10036538: d0c2 beq.n 100364c0 -1003653a: 4645 mov r5, r8 -1003653c: e719 b.n 10036372 -1003653e: 0719 lsls r1, r3, #28 -10036540: d5cc bpl.n 100364dc -10036542: f241 3238 movw r2, #4920 ; 0x1338 -10036546: 58a7 ldr r7, [r4, r2] -10036548: e75c b.n 10036404 -1003654a: 071a lsls r2, r3, #28 -1003654c: d5c6 bpl.n 100364dc -1003654e: f241 3338 movw r3, #4920 ; 0x1338 -10036552: 58e3 ldr r3, [r4, r3] -10036554: e7a3 b.n 1003649e - ... - -10036558 : -10036558: b508 push {r3, lr} -1003655a: f7e0 ff06 bl 1001736a -1003655e: 4b04 ldr r3, [pc, #16] ; (10036570 ) -10036560: 681a ldr r2, [r3, #0] -10036562: 3201 adds r2, #1 -10036564: 601a str r2, [r3, #0] -10036566: e8bd 4008 ldmia.w sp!, {r3, lr} -1003656a: f7e0 bf00 b.w 1001736e -1003656e: bf00 nop -10036570: 1004df90 .word 0x1004df90 - -10036574 : -10036574: b510 push {r4, lr} -10036576: f7e0 fef8 bl 1001736a -1003657a: 4b04 ldr r3, [pc, #16] ; (1003658c ) -1003657c: 2200 movs r2, #0 -1003657e: 681c ldr r4, [r3, #0] -10036580: 601a str r2, [r3, #0] -10036582: f7e0 fef4 bl 1001736e -10036586: 4620 mov r0, r4 -10036588: bd10 pop {r4, pc} -1003658a: bf00 nop -1003658c: 1004df90 .word 0x1004df90 - -10036590 : -10036590: b538 push {r3, r4, r5, lr} -10036592: 4c11 ldr r4, [pc, #68] ; (100365d8 ) -10036594: 2230 movs r2, #48 ; 0x30 -10036596: 6823 ldr r3, [r4, #0] -10036598: 2100 movs r1, #0 -1003659a: 435a muls r2, r3 -1003659c: 480f ldr r0, [pc, #60] ; (100365dc ) -1003659e: f7e4 fb0b bl 1001abb8 -100365a2: 4b0f ldr r3, [pc, #60] ; (100365e0 ) -100365a4: 4a0d ldr r2, [pc, #52] ; (100365dc ) -100365a6: 6825 ldr r5, [r4, #0] -100365a8: 601b str r3, [r3, #0] -100365aa: 2100 movs r1, #0 -100365ac: 461c mov r4, r3 -100365ae: 42a9 cmp r1, r5 -100365b0: f102 0030 add.w r0, r2, #48 ; 0x30 -100365b4: da08 bge.n 100365c8 -100365b6: f840 3c2c str.w r3, [r0, #-44] -100365ba: f840 4c30 str.w r4, [r0, #-48] -100365be: 3101 adds r1, #1 -100365c0: 601a str r2, [r3, #0] -100365c2: 4613 mov r3, r2 -100365c4: 4602 mov r2, r0 -100365c6: e7f2 b.n 100365ae -100365c8: 4a06 ldr r2, [pc, #24] ; (100365e4 ) -100365ca: 6063 str r3, [r4, #4] -100365cc: 2300 movs r3, #0 -100365ce: 6013 str r3, [r2, #0] -100365d0: 4a05 ldr r2, [pc, #20] ; (100365e8 ) -100365d2: 6013 str r3, [r2, #0] -100365d4: bd38 pop {r3, r4, r5, pc} -100365d6: bf00 nop -100365d8: 10044f48 .word 0x10044f48 -100365dc: 1004dd9c .word 0x1004dd9c -100365e0: 1004df80 .word 0x1004df80 -100365e4: 1004dd98 .word 0x1004dd98 -100365e8: 1004df8c .word 0x1004df8c - -100365ec : -100365ec: b570 push {r4, r5, r6, lr} -100365ee: 4c11 ldr r4, [pc, #68] ; (10036634 ) -100365f0: f44f 62d0 mov.w r2, #1664 ; 0x680 -100365f4: 6823 ldr r3, [r4, #0] -100365f6: 2100 movs r1, #0 -100365f8: 435a muls r2, r3 -100365fa: 480f ldr r0, [pc, #60] ; (10036638 ) -100365fc: f7e4 fadc bl 1001abb8 -10036600: 4b0e ldr r3, [pc, #56] ; (1003663c ) -10036602: 2200 movs r2, #0 -10036604: 6826 ldr r6, [r4, #0] -10036606: 601b str r3, [r3, #0] -10036608: 4611 mov r1, r2 -1003660a: 461c mov r4, r3 -1003660c: 42b1 cmp r1, r6 -1003660e: da09 bge.n 10036624 -10036610: 4d09 ldr r5, [pc, #36] ; (10036638 ) -10036612: 3101 adds r1, #1 -10036614: 1950 adds r0, r2, r5 -10036616: 5154 str r4, [r2, r5] -10036618: 6043 str r3, [r0, #4] -1003661a: f502 62d0 add.w r2, r2, #1664 ; 0x680 -1003661e: 6018 str r0, [r3, #0] -10036620: 4603 mov r3, r0 -10036622: e7f3 b.n 1003660c -10036624: 4a06 ldr r2, [pc, #24] ; (10036640 ) -10036626: 6063 str r3, [r4, #4] -10036628: 2300 movs r3, #0 -1003662a: 6013 str r3, [r2, #0] -1003662c: 4a05 ldr r2, [pc, #20] ; (10036644 ) -1003662e: 6013 str r3, [r2, #0] -10036630: bd70 pop {r4, r5, r6, pc} -10036632: bf00 nop -10036634: 10044f4c .word 0x10044f4c -10036638: 10046688 .word 0x10046688 -1003663c: 10046680 .word 0x10046680 -10036640: 1004df7c .word 0x1004df7c -10036644: 1004df88 .word 0x1004df88 - -10036648 : -10036648: 4770 bx lr - ... - -1003664c : -1003664c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10036650: 4606 mov r6, r0 -10036652: f7e0 fe8a bl 1001736a -10036656: 4b3c ldr r3, [pc, #240] ; (10036748 ) -10036658: 681c ldr r4, [r3, #0] -1003665a: 4698 mov r8, r3 -1003665c: 429c cmp r4, r3 -1003665e: d00b beq.n 10036678 -10036660: e894 000c ldmia.w r4, {r2, r3} -10036664: 6053 str r3, [r2, #4] -10036666: 601a str r2, [r3, #0] -10036668: 4b38 ldr r3, [pc, #224] ; (1003674c ) -1003666a: 6024 str r4, [r4, #0] -1003666c: 681a ldr r2, [r3, #0] -1003666e: 6064 str r4, [r4, #4] -10036670: 3201 adds r2, #1 -10036672: 601a str r2, [r3, #0] -10036674: 3408 adds r4, #8 -10036676: e000 b.n 1003667a -10036678: 2400 movs r4, #0 -1003667a: f7e0 fe78 bl 1001736e -1003667e: b924 cbnz r4, 1003668a -10036680: 4933 ldr r1, [pc, #204] ; (10036750 ) -10036682: 4834 ldr r0, [pc, #208] ; (10036754 ) -10036684: f7e4 fa6c bl 1001ab60 -10036688: e05a b.n 10036740 -1003668a: 4620 mov r0, r4 -1003668c: 2100 movs r1, #0 -1003668e: 2228 movs r2, #40 ; 0x28 -10036690: f7e4 fa92 bl 1001abb8 -10036694: f240 6372 movw r3, #1650 ; 0x672 -10036698: 429e cmp r6, r3 -1003669a: 4f2c ldr r7, [pc, #176] ; (1003674c ) -1003669c: dd1f ble.n 100366de -1003669e: 4630 mov r0, r6 -100366a0: f7e1 f886 bl 100177b0 -100366a4: 2301 movs r3, #1 -100366a6: 4605 mov r5, r0 -100366a8: 2800 cmp r0, #0 -100366aa: d130 bne.n 1003670e -100366ac: 4928 ldr r1, [pc, #160] ; (10036750 ) -100366ae: 482a ldr r0, [pc, #168] ; (10036758 ) -100366b0: f7e4 fa56 bl 1001ab60 -100366b4: f7e0 fe59 bl 1001736a -100366b8: f8d8 2004 ldr.w r2, [r8, #4] -100366bc: f1a4 0308 sub.w r3, r4, #8 -100366c0: f8c8 3004 str.w r3, [r8, #4] -100366c4: f844 8c08 str.w r8, [r4, #-8] -100366c8: f844 2c04 str.w r2, [r4, #-4] -100366cc: 6013 str r3, [r2, #0] -100366ce: 683b ldr r3, [r7, #0] -100366d0: 3b01 subs r3, #1 -100366d2: 603b str r3, [r7, #0] -100366d4: f7e0 fe4b bl 1001736e -100366d8: 2000 movs r0, #0 -100366da: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -100366de: f7e0 fe44 bl 1001736a -100366e2: 4b1e ldr r3, [pc, #120] ; (1003675c ) -100366e4: 681d ldr r5, [r3, #0] -100366e6: 429d cmp r5, r3 -100366e8: d00b beq.n 10036702 -100366ea: e895 000c ldmia.w r5, {r2, r3} -100366ee: 6053 str r3, [r2, #4] -100366f0: 601a str r2, [r3, #0] -100366f2: 4b1b ldr r3, [pc, #108] ; (10036760 ) -100366f4: 602d str r5, [r5, #0] -100366f6: 681a ldr r2, [r3, #0] -100366f8: 606d str r5, [r5, #4] -100366fa: 3201 adds r2, #1 -100366fc: 3508 adds r5, #8 -100366fe: 601a str r2, [r3, #0] -10036700: e000 b.n 10036704 -10036702: 2500 movs r5, #0 -10036704: f7e0 fe33 bl 1001736e -10036708: 2300 movs r3, #0 -1003670a: 2d00 cmp r5, #0 -1003670c: d0ce beq.n 100366ac -1003670e: 6263 str r3, [r4, #36] ; 0x24 -10036710: 4b14 ldr r3, [pc, #80] ; (10036764 ) -10036712: 683a ldr r2, [r7, #0] -10036714: 6819 ldr r1, [r3, #0] -10036716: 3603 adds r6, #3 -10036718: 428a cmp r2, r1 -1003671a: bfc8 it gt -1003671c: 601a strgt r2, [r3, #0] -1003671e: 4b10 ldr r3, [pc, #64] ; (10036760 ) -10036720: f026 0603 bic.w r6, r6, #3 -10036724: 681a ldr r2, [r3, #0] -10036726: 4b10 ldr r3, [pc, #64] ; (10036768 ) -10036728: 442e add r6, r5 -1003672a: 6819 ldr r1, [r3, #0] -1003672c: 60e5 str r5, [r4, #12] -1003672e: 428a cmp r2, r1 -10036730: bfc8 it gt -10036732: 601a strgt r2, [r3, #0] -10036734: 2301 movs r3, #1 -10036736: 6125 str r5, [r4, #16] -10036738: 6165 str r5, [r4, #20] -1003673a: 61a6 str r6, [r4, #24] -1003673c: f8c5 3674 str.w r3, [r5, #1652] ; 0x674 -10036740: 4620 mov r0, r4 -10036742: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10036746: bf00 nop -10036748: 1004df80 .word 0x1004df80 -1003674c: 1004dd98 .word 0x1004dd98 -10036750: 100422fe .word 0x100422fe -10036754: 10042308 .word 0x10042308 -10036758: 1004231f .word 0x1004231f -1003675c: 10046680 .word 0x10046680 -10036760: 1004df7c .word 0x1004df7c -10036764: 1004df8c .word 0x1004df8c -10036768: 1004df88 .word 0x1004df88 - -1003676c : -1003676c: b510 push {r4, lr} -1003676e: 4604 mov r4, r0 -10036770: f7e0 fdfb bl 1001736a -10036774: 6a63 ldr r3, [r4, #36] ; 0x24 -10036776: 2b01 cmp r3, #1 -10036778: d105 bne.n 10036786 -1003677a: 2100 movs r1, #0 -1003677c: 6261 str r1, [r4, #36] ; 0x24 -1003677e: 68e0 ldr r0, [r4, #12] -10036780: f7e0 fe43 bl 1001740a -10036784: e014 b.n 100367b0 -10036786: 68e0 ldr r0, [r4, #12] -10036788: f200 6074 addw r0, r0, #1652 ; 0x674 -1003678c: f7e0 ffa6 bl 100176dc -10036790: b170 cbz r0, 100367b0 -10036792: 4a10 ldr r2, [pc, #64] ; (100367d4 ) -10036794: 68e0 ldr r0, [r4, #12] -10036796: 6851 ldr r1, [r2, #4] -10036798: f1a0 0308 sub.w r3, r0, #8 -1003679c: 6053 str r3, [r2, #4] -1003679e: f840 2c08 str.w r2, [r0, #-8] -100367a2: f840 1c04 str.w r1, [r0, #-4] -100367a6: 600b str r3, [r1, #0] -100367a8: 4b0b ldr r3, [pc, #44] ; (100367d8 ) -100367aa: 681a ldr r2, [r3, #0] -100367ac: 3a01 subs r2, #1 -100367ae: 601a str r2, [r3, #0] -100367b0: 4a0a ldr r2, [pc, #40] ; (100367dc ) -100367b2: f1a4 0308 sub.w r3, r4, #8 -100367b6: 6851 ldr r1, [r2, #4] -100367b8: 6053 str r3, [r2, #4] -100367ba: f844 2c08 str.w r2, [r4, #-8] -100367be: f844 1c04 str.w r1, [r4, #-4] -100367c2: 600b str r3, [r1, #0] -100367c4: 4b06 ldr r3, [pc, #24] ; (100367e0 ) -100367c6: e8bd 4010 ldmia.w sp!, {r4, lr} -100367ca: 681a ldr r2, [r3, #0] -100367cc: 3a01 subs r2, #1 -100367ce: 601a str r2, [r3, #0] -100367d0: f7e0 bdcd b.w 1001736e -100367d4: 10046680 .word 0x10046680 -100367d8: 1004df7c .word 0x1004df7c -100367dc: 1004df80 .word 0x1004df80 -100367e0: 1004dd98 .word 0x1004dd98 - -100367e4 : -100367e4: f7ff bfc2 b.w 1003676c - -100367e8 : -100367e8: 4603 mov r3, r0 -100367ea: b510 push {r4, lr} -100367ec: 6940 ldr r0, [r0, #20] -100367ee: 6a1c ldr r4, [r3, #32] -100367f0: 1842 adds r2, r0, r1 -100367f2: 4421 add r1, r4 -100367f4: 615a str r2, [r3, #20] -100367f6: 6219 str r1, [r3, #32] -100367f8: 699b ldr r3, [r3, #24] -100367fa: 429a cmp r2, r3 -100367fc: d908 bls.n 10036810 -100367fe: f240 217d movw r1, #637 ; 0x27d -10036802: 4a04 ldr r2, [pc, #16] ; (10036814 ) -10036804: 4804 ldr r0, [pc, #16] ; (10036818 ) -10036806: f7e4 f9ab bl 1001ab60 -1003680a: f7e0 fdb2 bl 10017372 -1003680e: e7fe b.n 1003680e -10036810: bd10 pop {r4, pc} -10036812: bf00 nop -10036814: 10042361 .word 0x10042361 -10036818: 10042338 .word 0x10042338 - -1003681c : -1003681c: 6903 ldr r3, [r0, #16] -1003681e: 440b add r3, r1 -10036820: 6103 str r3, [r0, #16] -10036822: 6943 ldr r3, [r0, #20] -10036824: 4419 add r1, r3 -10036826: 6141 str r1, [r0, #20] -10036828: 4770 bx lr - -1003682a : -1003682a: 3103 adds r1, #3 -1003682c: b538 push {r3, r4, r5, lr} -1003682e: f021 0403 bic.w r4, r1, #3 -10036832: 4420 add r0, r4 -10036834: f7ff ff0a bl 1003664c -10036838: 4605 mov r5, r0 -1003683a: b110 cbz r0, 10036842 -1003683c: 4621 mov r1, r4 -1003683e: f7ff ffed bl 1003681c -10036842: 4628 mov r0, r5 -10036844: bd38 pop {r3, r4, r5, pc} - -10036846 : -10036846: 6980 ldr r0, [r0, #24] -10036848: 4770 bx lr - -1003684a : -1003684a: 6903 ldr r3, [r0, #16] -1003684c: 4419 add r1, r3 -1003684e: 6141 str r1, [r0, #20] -10036850: 4770 bx lr - -10036852 : -10036852: 6a02 ldr r2, [r0, #32] -10036854: 4603 mov r3, r0 -10036856: 4291 cmp r1, r2 -10036858: d805 bhi.n 10036866 -1003685a: 1a52 subs r2, r2, r1 -1003685c: 6202 str r2, [r0, #32] -1003685e: 6900 ldr r0, [r0, #16] -10036860: 4408 add r0, r1 -10036862: 6118 str r0, [r3, #16] -10036864: 4770 bx lr -10036866: 2000 movs r0, #0 -10036868: 4770 bx lr - -1003686a : -1003686a: b538 push {r3, r4, r5, lr} -1003686c: 4611 mov r1, r2 -1003686e: 4604 mov r4, r0 -10036870: 6a00 ldr r0, [r0, #32] -10036872: f7ff ffda bl 1003682a -10036876: 4605 mov r5, r0 -10036878: b148 cbz r0, 1003688e -1003687a: 6a21 ldr r1, [r4, #32] -1003687c: f7ff ffb4 bl 100367e8 -10036880: 6928 ldr r0, [r5, #16] -10036882: 6921 ldr r1, [r4, #16] -10036884: 6a22 ldr r2, [r4, #32] -10036886: f7e4 f993 bl 1001abb0 -1003688a: 69e3 ldr r3, [r4, #28] -1003688c: 61eb str r3, [r5, #28] -1003688e: 4628 mov r0, r5 -10036890: bd38 pop {r3, r4, r5, pc} - -10036892 : -10036892: 68c2 ldr r2, [r0, #12] -10036894: 6943 ldr r3, [r0, #20] -10036896: 6900 ldr r0, [r0, #16] -10036898: 4413 add r3, r2 -1003689a: 1a18 subs r0, r3, r0 -1003689c: 4770 bx lr - -1003689e <_rtw_open_pktfile>: -1003689e: 6903 ldr r3, [r0, #16] -100368a0: 6a02 ldr r2, [r0, #32] -100368a2: 6008 str r0, [r1, #0] -100368a4: 60cb str r3, [r1, #12] -100368a6: 610b str r3, [r1, #16] -100368a8: 614a str r2, [r1, #20] -100368aa: 604a str r2, [r1, #4] -100368ac: 608b str r3, [r1, #8] -100368ae: 4770 bx lr - -100368b0 <_rtw_pktfile_read>: -100368b0: b570 push {r4, r5, r6, lr} -100368b2: 4615 mov r5, r2 -100368b4: 4604 mov r4, r0 -100368b6: 460e mov r6, r1 -100368b8: f7ff ffeb bl 10036892 -100368bc: 42a8 cmp r0, r5 -100368be: bf38 it cc -100368c0: 4605 movcc r5, r0 -100368c2: b126 cbz r6, 100368ce <_rtw_pktfile_read+0x1e> -100368c4: 4630 mov r0, r6 -100368c6: 6921 ldr r1, [r4, #16] -100368c8: 462a mov r2, r5 -100368ca: f7e0 fda1 bl 10017410 -100368ce: 6923 ldr r3, [r4, #16] -100368d0: 4628 mov r0, r5 -100368d2: 442b add r3, r5 -100368d4: 6123 str r3, [r4, #16] -100368d6: 6863 ldr r3, [r4, #4] -100368d8: 1b5b subs r3, r3, r5 -100368da: 6063 str r3, [r4, #4] -100368dc: bd70 pop {r4, r5, r6, pc} - -100368de : -100368de: 4770 bx lr - -100368e0 : -100368e0: 2300 movs r3, #0 -100368e2: 60cb str r3, [r1, #12] -100368e4: 610b str r3, [r1, #16] -100368e6: 2001 movs r0, #1 -100368e8: 4770 bx lr - -100368ea : -100368ea: 4770 bx lr - -100368ec : -100368ec: 4608 mov r0, r1 -100368ee: 69c9 ldr r1, [r1, #28] -100368f0: f7ff bf78 b.w 100367e4 - -100368f4 : -100368f4: b510 push {r4, lr} -100368f6: 460c mov r4, r1 -100368f8: 6f49 ldr r1, [r1, #116] ; 0x74 -100368fa: b109 cbz r1, 10036900 -100368fc: f7ff fff6 bl 100368ec -10036900: 2300 movs r3, #0 -10036902: 6763 str r3, [r4, #116] ; 0x74 -10036904: bd10 pop {r4, pc} - -10036906 : -10036906: b537 push {r0, r1, r2, r4, r5, lr} -10036908: 4604 mov r4, r0 -1003690a: b1c8 cbz r0, 10036940 -1003690c: f641 0369 movw r3, #6249 ; 0x1869 -10036910: 5cc3 ldrb r3, [r0, r3] -10036912: b113 cbz r3, 1003691a -10036914: f641 035c movw r3, #6236 ; 0x185c -10036918: 58c4 ldr r4, [r0, r3] -1003691a: f604 1558 addw r5, r4, #2392 ; 0x958 -1003691e: 4628 mov r0, r5 -10036920: a901 add r1, sp, #4 -10036922: f7e0 fe51 bl 100175c8 -10036926: 4620 mov r0, r4 -10036928: f7f2 feed bl 10029706 -1003692c: b120 cbz r0, 10036938 -1003692e: f504 50c0 add.w r0, r4, #6144 ; 0x1800 -10036932: 3014 adds r0, #20 -10036934: f7e0 ff80 bl 10017838 -10036938: 4628 mov r0, r5 -1003693a: a901 add r1, sp, #4 -1003693c: f7e0 fe4e bl 100175dc -10036940: b003 add sp, #12 -10036942: bd30 pop {r4, r5, pc} - -10036944 : -10036944: b537 push {r0, r1, r2, r4, r5, lr} -10036946: 690b ldr r3, [r1, #16] -10036948: 9001 str r0, [sp, #4] -1003694a: 681d ldr r5, [r3, #0] -1003694c: 4628 mov r0, r5 -1003694e: f7e6 fe1f bl 1001d590 -10036952: f605 1458 addw r4, r5, #2392 ; 0x958 -10036956: b168 cbz r0, 10036974 -10036958: 4628 mov r0, r5 -1003695a: a901 add r1, sp, #4 -1003695c: f7f3 fd98 bl 1002a490 -10036960: 2800 cmp r0, #0 -10036962: db07 blt.n 10036974 -10036964: e9d4 231a ldrd r2, r3, [r4, #104] ; 0x68 -10036968: 3201 adds r2, #1 -1003696a: f143 0300 adc.w r3, r3, #0 -1003696e: e9c4 231a strd r2, r3, [r4, #104] ; 0x68 -10036972: e00a b.n 1003698a -10036974: e9d4 231c ldrd r2, r3, [r4, #112] ; 0x70 -10036978: 9801 ldr r0, [sp, #4] -1003697a: 3201 adds r2, #1 -1003697c: f143 0300 adc.w r3, r3, #0 -10036980: e9c4 231c strd r2, r3, [r4, #112] ; 0x70 -10036984: 69c1 ldr r1, [r0, #28] -10036986: f7ff ff2d bl 100367e4 -1003698a: 2000 movs r0, #0 -1003698c: b003 add sp, #12 -1003698e: bd30 pop {r4, r5, pc} - -10036990 : -10036990: b538 push {r3, r4, r5, lr} -10036992: 4604 mov r4, r0 -10036994: 2008 movs r0, #8 -10036996: 460d mov r5, r1 -10036998: f000 f8a2 bl 10036ae0 -1003699c: b110 cbz r0, 100369a4 -1003699e: 6903 ldr r3, [r0, #16] -100369a0: 601d str r5, [r3, #0] -100369a2: 605c str r4, [r3, #4] -100369a4: bd38 pop {r3, r4, r5, pc} - -100369a6 : -100369a6: b5f8 push {r3, r4, r5, r6, r7, lr} -100369a8: 4606 mov r6, r0 -100369aa: 2008 movs r0, #8 -100369ac: f000 f898 bl 10036ae0 -100369b0: 4604 mov r4, r0 -100369b2: b160 cbz r0, 100369ce -100369b4: 6907 ldr r7, [r0, #16] -100369b6: 4630 mov r0, r6 -100369b8: f7e0 feda bl 10017770 -100369bc: 4605 mov r5, r0 -100369be: 6038 str r0, [r7, #0] -100369c0: b920 cbnz r0, 100369cc -100369c2: 4620 mov r0, r4 -100369c4: f000 f8ba bl 10036b3c -100369c8: 462c mov r4, r5 -100369ca: e000 b.n 100369ce -100369cc: 607e str r6, [r7, #4] -100369ce: 4620 mov r0, r4 -100369d0: bdf8 pop {r3, r4, r5, r6, r7, pc} - -100369d2 : -100369d2: b510 push {r4, lr} -100369d4: 4604 mov r4, r0 -100369d6: b150 cbz r0, 100369ee -100369d8: 6903 ldr r3, [r0, #16] -100369da: 6818 ldr r0, [r3, #0] -100369dc: b138 cbz r0, 100369ee -100369de: 6859 ldr r1, [r3, #4] -100369e0: f7e0 fd11 bl 10017406 -100369e4: 4620 mov r0, r4 -100369e6: e8bd 4010 ldmia.w sp!, {r4, lr} -100369ea: f000 b8a7 b.w 10036b3c -100369ee: bd10 pop {r4, pc} - -100369f0 : -100369f0: b510 push {r4, lr} -100369f2: 491d ldr r1, [pc, #116] ; (10036a68 ) -100369f4: 4604 mov r4, r0 -100369f6: f7e4 f8e7 bl 1001abc8 -100369fa: b908 cbnz r0, 10036a00 -100369fc: 2000 movs r0, #0 -100369fe: bd10 pop {r4, pc} -10036a00: 4620 mov r0, r4 -10036a02: 491a ldr r1, [pc, #104] ; (10036a6c ) -10036a04: f7e4 f8e0 bl 1001abc8 -10036a08: 2800 cmp r0, #0 -10036a0a: d0f7 beq.n 100369fc -10036a0c: 4620 mov r0, r4 -10036a0e: 4918 ldr r1, [pc, #96] ; (10036a70 ) -10036a10: f7e4 f8da bl 1001abc8 -10036a14: 2800 cmp r0, #0 -10036a16: d0f1 beq.n 100369fc -10036a18: 4620 mov r0, r4 -10036a1a: 4916 ldr r1, [pc, #88] ; (10036a74 ) -10036a1c: f7e4 f8d4 bl 1001abc8 -10036a20: 2800 cmp r0, #0 -10036a22: d0eb beq.n 100369fc -10036a24: 4620 mov r0, r4 -10036a26: 4914 ldr r1, [pc, #80] ; (10036a78 ) -10036a28: f7e4 f8ce bl 1001abc8 -10036a2c: 2800 cmp r0, #0 -10036a2e: d0e5 beq.n 100369fc -10036a30: 4620 mov r0, r4 -10036a32: 4912 ldr r1, [pc, #72] ; (10036a7c ) -10036a34: f7e4 f8c8 bl 1001abc8 -10036a38: 2800 cmp r0, #0 -10036a3a: d0df beq.n 100369fc -10036a3c: 4620 mov r0, r4 -10036a3e: 4910 ldr r1, [pc, #64] ; (10036a80 ) -10036a40: f7e4 f8c2 bl 1001abc8 -10036a44: 2800 cmp r0, #0 -10036a46: d0d9 beq.n 100369fc -10036a48: 4620 mov r0, r4 -10036a4a: 490e ldr r1, [pc, #56] ; (10036a84 ) -10036a4c: f7e4 f8bc bl 1001abc8 -10036a50: 2800 cmp r0, #0 -10036a52: d0d3 beq.n 100369fc -10036a54: 4620 mov r0, r4 -10036a56: 490c ldr r1, [pc, #48] ; (10036a88 ) -10036a58: f7e4 f8b6 bl 1001abc8 -10036a5c: 3000 adds r0, #0 -10036a5e: bf18 it ne -10036a60: 2001 movne r0, #1 -10036a62: 4240 negs r0, r0 -10036a64: bd10 pop {r4, pc} -10036a66: bf00 nop -10036a68: 100417b9 .word 0x100417b9 -10036a6c: 100417d4 .word 0x100417d4 -10036a70: 100417f2 .word 0x100417f2 -10036a74: 100423d1 .word 0x100423d1 -10036a78: 100423dd .word 0x100423dd -10036a7c: 100423e9 .word 0x100423e9 -10036a80: 100423fa .word 0x100423fa -10036a84: 1004240b .word 0x1004240b -10036a88: 10042420 .word 0x10042420 - -10036a8c : -10036a8c: b5f8 push {r3, r4, r5, r6, r7, lr} -10036a8e: 4607 mov r7, r0 -10036a90: f7e0 fc6b bl 1001736a -10036a94: 4b0f ldr r3, [pc, #60] ; (10036ad4 ) -10036a96: 2500 movs r5, #0 -10036a98: 681c ldr r4, [r3, #0] -10036a9a: 461e mov r6, r3 -10036a9c: 480d ldr r0, [pc, #52] ; (10036ad4 ) -10036a9e: 4621 mov r1, r4 -10036aa0: f7e0 fd6f bl 10017582 -10036aa4: b930 cbnz r0, 10036ab4 -10036aa6: 68a3 ldr r3, [r4, #8] -10036aa8: 4625 mov r5, r4 -10036aaa: 681b ldr r3, [r3, #0] -10036aac: 42bb cmp r3, r7 -10036aae: d001 beq.n 10036ab4 -10036ab0: 6824 ldr r4, [r4, #0] -10036ab2: e7f3 b.n 10036a9c -10036ab4: f7e0 fc5b bl 1001736e -10036ab8: 42b4 cmp r4, r6 -10036aba: d105 bne.n 10036ac8 -10036abc: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -10036ac0: 4805 ldr r0, [pc, #20] ; (10036ad8 ) -10036ac2: 4906 ldr r1, [pc, #24] ; (10036adc ) -10036ac4: f7e4 b84c b.w 1001ab60 -10036ac8: 68ab ldr r3, [r5, #8] -10036aca: 689a ldr r2, [r3, #8] -10036acc: 6858 ldr r0, [r3, #4] -10036ace: 4790 blx r2 -10036ad0: bdf8 pop {r3, r4, r5, r6, r7, pc} -10036ad2: bf00 nop -10036ad4: 1004df94 .word 0x1004df94 -10036ad8: 10042499 .word 0x10042499 -10036adc: 100428aa .word 0x100428aa - -10036ae0 : -10036ae0: b570 push {r4, r5, r6, lr} -10036ae2: 4605 mov r5, r0 -10036ae4: 2034 movs r0, #52 ; 0x34 -10036ae6: f7e0 fe53 bl 10017790 -10036aea: 4604 mov r4, r0 -10036aec: b920 cbnz r0, 10036af8 -10036aee: 4910 ldr r1, [pc, #64] ; (10036b30 ) -10036af0: 4810 ldr r0, [pc, #64] ; (10036b34 ) -10036af2: f7e4 f835 bl 1001ab60 -10036af6: e019 b.n 10036b2c -10036af8: 2100 movs r1, #0 -10036afa: 2234 movs r2, #52 ; 0x34 -10036afc: f7e4 f85c bl 1001abb8 -10036b00: 2d00 cmp r5, #0 -10036b02: dd13 ble.n 10036b2c -10036b04: 4628 mov r0, r5 -10036b06: f7e0 fe43 bl 10017790 -10036b0a: 4606 mov r6, r0 -10036b0c: 6120 str r0, [r4, #16] -10036b0e: b948 cbnz r0, 10036b24 -10036b10: 4907 ldr r1, [pc, #28] ; (10036b30 ) -10036b12: 4809 ldr r0, [pc, #36] ; (10036b38 ) -10036b14: f7e4 f824 bl 1001ab60 -10036b18: 4620 mov r0, r4 -10036b1a: 2134 movs r1, #52 ; 0x34 -10036b1c: f7e0 fc75 bl 1001740a -10036b20: 4630 mov r0, r6 -10036b22: bd70 pop {r4, r5, r6, pc} -10036b24: 2100 movs r1, #0 -10036b26: 462a mov r2, r5 -10036b28: f7e4 f846 bl 1001abb8 -10036b2c: 4620 mov r0, r4 -10036b2e: bd70 pop {r4, r5, r6, pc} -10036b30: 10042437 .word 0x10042437 -10036b34: 100424cc .word 0x100424cc -10036b38: 100424ef .word 0x100424ef - -10036b3c : -10036b3c: b510 push {r4, lr} -10036b3e: 4604 mov r4, r0 -10036b40: 6900 ldr r0, [r0, #16] -10036b42: b110 cbz r0, 10036b4a -10036b44: 2100 movs r1, #0 -10036b46: f7e0 fc60 bl 1001740a -10036b4a: 4620 mov r0, r4 -10036b4c: 2100 movs r1, #0 -10036b4e: e8bd 4010 ldmia.w sp!, {r4, lr} -10036b52: f7e0 bc5a b.w 1001740a - -10036b56 : -10036b56: b508 push {r3, lr} -10036b58: f7e4 f83a bl 1001abd0 -10036b5c: 2000 movs r0, #0 -10036b5e: bd08 pop {r3, pc} - -10036b60 : -10036b60: b508 push {r3, lr} -10036b62: 4804 ldr r0, [pc, #16] ; (10036b74 ) -10036b64: f7e0 fc6c bl 10017440 -10036b68: 4a03 ldr r2, [pc, #12] ; (10036b78 ) -10036b6a: 2300 movs r3, #0 -10036b6c: 6013 str r3, [r2, #0] -10036b6e: 4a03 ldr r2, [pc, #12] ; (10036b7c ) -10036b70: 6013 str r3, [r2, #0] -10036b72: bd08 pop {r3, pc} -10036b74: 1004df94 .word 0x1004df94 -10036b78: 1004dfcc .word 0x1004dfcc -10036b7c: 1004dfd0 .word 0x1004dfd0 - -10036b80 : -10036b80: 4b0e ldr r3, [pc, #56] ; (10036bbc ) -10036b82: b510 push {r4, lr} -10036b84: 681a ldr r2, [r3, #0] -10036b86: 2a00 cmp r2, #0 -10036b88: dd03 ble.n 10036b92 -10036b8a: 480d ldr r0, [pc, #52] ; (10036bc0 ) -10036b8c: 490d ldr r1, [pc, #52] ; (10036bc4 ) -10036b8e: f7e3 ffe7 bl 1001ab60 -10036b92: f7e0 fbea bl 1001736a -10036b96: 4c0c ldr r4, [pc, #48] ; (10036bc8 ) -10036b98: 4620 mov r0, r4 -10036b9a: 6821 ldr r1, [r4, #0] -10036b9c: f7e0 fcf1 bl 10017582 -10036ba0: b940 cbnz r0, 10036bb4 -10036ba2: 6824 ldr r4, [r4, #0] -10036ba4: 4620 mov r0, r4 -10036ba6: f7e0 fc5f bl 10017468 -10036baa: 4620 mov r0, r4 -10036bac: 210c movs r1, #12 -10036bae: f7e0 fc2c bl 1001740a -10036bb2: e7f0 b.n 10036b96 -10036bb4: e8bd 4010 ldmia.w sp!, {r4, lr} -10036bb8: f7e0 bbd9 b.w 1001736e -10036bbc: 1004dfcc .word 0x1004dfcc -10036bc0: 10042513 .word 0x10042513 -10036bc4: 10042446 .word 0x10042446 -10036bc8: 1004df94 .word 0x1004df94 - -10036bcc : -10036bcc: 6883 ldr r3, [r0, #8] -10036bce: b537 push {r0, r1, r2, r4, r5, lr} -10036bd0: 4604 mov r4, r0 -10036bd2: 2b00 cmp r3, #0 -10036bd4: d043 beq.n 10036c5e -10036bd6: 6802 ldr r2, [r0, #0] -10036bd8: 2a00 cmp r2, #0 -10036bda: d133 bne.n 10036c44 -10036bdc: 4b21 ldr r3, [pc, #132] ; (10036c64 ) -10036bde: 4822 ldr r0, [pc, #136] ; (10036c68 ) -10036be0: 9300 str r3, [sp, #0] -10036be2: f04f 31ff mov.w r1, #4294967295 -10036be6: 4613 mov r3, r2 -10036be8: f7e0 fe2e bl 10017848 -10036bec: 6020 str r0, [r4, #0] -10036bee: b930 cbnz r0, 10036bfe -10036bf0: 481e ldr r0, [pc, #120] ; (10036c6c ) -10036bf2: 491f ldr r1, [pc, #124] ; (10036c70 ) -10036bf4: b003 add sp, #12 -10036bf6: e8bd 4030 ldmia.w sp!, {r4, r5, lr} -10036bfa: f7e3 bfb1 b.w 1001ab60 -10036bfe: 200c movs r0, #12 -10036c00: f7e0 fdd6 bl 100177b0 -10036c04: 4605 mov r5, r0 -10036c06: b950 cbnz r0, 10036c1e -10036c08: 4919 ldr r1, [pc, #100] ; (10036c70 ) -10036c0a: 481a ldr r0, [pc, #104] ; (10036c74 ) -10036c0c: f7e3 ffa8 bl 1001ab60 -10036c10: 6820 ldr r0, [r4, #0] -10036c12: f04f 31ff mov.w r1, #4294967295 -10036c16: f7e0 fe25 bl 10017864 -10036c1a: 6025 str r5, [r4, #0] -10036c1c: e01f b.n 10036c5e -10036c1e: 6084 str r4, [r0, #8] -10036c20: f7e0 fba3 bl 1001736a -10036c24: 4914 ldr r1, [pc, #80] ; (10036c78 ) -10036c26: 4628 mov r0, r5 -10036c28: f7e0 fc12 bl 10017450 -10036c2c: f7e0 fb9f bl 1001736e -10036c30: 4a12 ldr r2, [pc, #72] ; (10036c7c ) -10036c32: 6813 ldr r3, [r2, #0] -10036c34: 3301 adds r3, #1 -10036c36: 6013 str r3, [r2, #0] -10036c38: 4a11 ldr r2, [pc, #68] ; (10036c80 ) -10036c3a: 6811 ldr r1, [r2, #0] -10036c3c: 428b cmp r3, r1 -10036c3e: dd0e ble.n 10036c5e -10036c40: 6013 str r3, [r2, #0] -10036c42: e00c b.n 10036c5e -10036c44: 4610 mov r0, r2 -10036c46: f7e0 fe17 bl 10017878 -10036c4a: 2801 cmp r0, #1 -10036c4c: d107 bne.n 10036c5e -10036c4e: 6820 ldr r0, [r4, #0] -10036c50: f04f 31ff mov.w r1, #4294967295 -10036c54: b003 add sp, #12 -10036c56: e8bd 4030 ldmia.w sp!, {r4, r5, lr} -10036c5a: f7e0 be17 b.w 1001788c -10036c5e: b003 add sp, #12 -10036c60: bd30 pop {r4, r5, pc} -10036c62: bf00 nop -10036c64: 10036a8d .word 0x10036a8d -10036c68: 1004160d .word 0x1004160d -10036c6c: 10042538 .word 0x10042538 -10036c70: 1004288d .word 0x1004288d -10036c74: 10042552 .word 0x10042552 -10036c78: 1004df94 .word 0x1004df94 -10036c7c: 1004dfcc .word 0x1004dfcc -10036c80: 1004dfd0 .word 0x1004dfd0 - -10036c84 : -10036c84: b573 push {r0, r1, r4, r5, r6, lr} -10036c86: 4b2d ldr r3, [pc, #180] ; (10036d3c ) -10036c88: 4604 mov r4, r0 -10036c8a: 7c1b ldrb r3, [r3, #16] -10036c8c: 460e mov r6, r1 -10036c8e: 2b00 cmp r3, #0 -10036c90: d051 beq.n 10036d36 -10036c92: 6802 ldr r2, [r0, #0] -10036c94: 2a00 cmp r2, #0 -10036c96: d131 bne.n 10036cfc -10036c98: 4b29 ldr r3, [pc, #164] ; (10036d40 ) -10036c9a: 482a ldr r0, [pc, #168] ; (10036d44 ) -10036c9c: 9300 str r3, [sp, #0] -10036c9e: f04f 31ff mov.w r1, #4294967295 -10036ca2: 4613 mov r3, r2 -10036ca4: f7e0 fdd0 bl 10017848 -10036ca8: 6020 str r0, [r4, #0] -10036caa: b920 cbnz r0, 10036cb6 -10036cac: 4926 ldr r1, [pc, #152] ; (10036d48 ) -10036cae: 4827 ldr r0, [pc, #156] ; (10036d4c ) -10036cb0: f7e3 ff56 bl 1001ab60 -10036cb4: e02c b.n 10036d10 -10036cb6: 200c movs r0, #12 -10036cb8: f7e0 fd7a bl 100177b0 -10036cbc: 4605 mov r5, r0 -10036cbe: b950 cbnz r0, 10036cd6 -10036cc0: 4921 ldr r1, [pc, #132] ; (10036d48 ) -10036cc2: 4823 ldr r0, [pc, #140] ; (10036d50 ) -10036cc4: f7e3 ff4c bl 1001ab60 -10036cc8: 6820 ldr r0, [r4, #0] -10036cca: f04f 31ff mov.w r1, #4294967295 -10036cce: f7e0 fdc9 bl 10017864 -10036cd2: 6025 str r5, [r4, #0] -10036cd4: e02f b.n 10036d36 -10036cd6: 6084 str r4, [r0, #8] -10036cd8: f7e0 fb47 bl 1001736a -10036cdc: 491d ldr r1, [pc, #116] ; (10036d54 ) -10036cde: 4628 mov r0, r5 -10036ce0: f7e0 fbb6 bl 10017450 -10036ce4: f7e0 fb43 bl 1001736e -10036ce8: 4a1b ldr r2, [pc, #108] ; (10036d58 ) -10036cea: 6813 ldr r3, [r2, #0] -10036cec: 3301 adds r3, #1 -10036cee: 6013 str r3, [r2, #0] -10036cf0: 4a1a ldr r2, [pc, #104] ; (10036d5c ) -10036cf2: 6811 ldr r1, [r2, #0] -10036cf4: 428b cmp r3, r1 -10036cf6: dd0b ble.n 10036d10 -10036cf8: 6013 str r3, [r2, #0] -10036cfa: e009 b.n 10036d10 -10036cfc: 4610 mov r0, r2 -10036cfe: f7e0 fdbb bl 10017878 -10036d02: 2801 cmp r0, #1 -10036d04: d104 bne.n 10036d10 -10036d06: 6820 ldr r0, [r4, #0] -10036d08: f04f 31ff mov.w r1, #4294967295 -10036d0c: f7e0 fdbe bl 1001788c -10036d10: 6824 ldr r4, [r4, #0] -10036d12: b184 cbz r4, 10036d36 -10036d14: 4630 mov r0, r6 -10036d16: f7e0 fc7f bl 10017618 -10036d1a: f04f 32ff mov.w r2, #4294967295 -10036d1e: 4601 mov r1, r0 -10036d20: 4620 mov r0, r4 -10036d22: f7e0 fdbd bl 100178a0 -10036d26: b930 cbnz r0, 10036d36 -10036d28: 480d ldr r0, [pc, #52] ; (10036d60 ) -10036d2a: 4907 ldr r1, [pc, #28] ; (10036d48 ) -10036d2c: b002 add sp, #8 -10036d2e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10036d32: f7e3 bf15 b.w 1001ab60 -10036d36: b002 add sp, #8 -10036d38: bd70 pop {r4, r5, r6, pc} -10036d3a: bf00 nop -10036d3c: 1004df9c .word 0x1004df9c -10036d40: 10036a8d .word 0x10036a8d -10036d44: 1004160d .word 0x1004160d -10036d48: 1004248f .word 0x1004248f -10036d4c: 10042538 .word 0x10042538 -10036d50: 10042552 .word 0x10042552 -10036d54: 1004df94 .word 0x1004df94 -10036d58: 1004dfcc .word 0x1004dfcc -10036d5c: 1004dfd0 .word 0x1004dfd0 -10036d60: 10042573 .word 0x10042573 - -10036d64 : -10036d64: 6803 ldr r3, [r0, #0] -10036d66: b570 push {r4, r5, r6, lr} -10036d68: 4605 mov r5, r0 -10036d6a: b1e3 cbz r3, 10036da6 -10036d6c: f7e0 fafd bl 1001736a -10036d70: 4b0d ldr r3, [pc, #52] ; (10036da8 ) -10036d72: 681c ldr r4, [r3, #0] -10036d74: 461e mov r6, r3 -10036d76: 480c ldr r0, [pc, #48] ; (10036da8 ) -10036d78: 4621 mov r1, r4 -10036d7a: f7e0 fc02 bl 10017582 -10036d7e: b920 cbnz r0, 10036d8a -10036d80: 68a3 ldr r3, [r4, #8] -10036d82: 681a ldr r2, [r3, #0] -10036d84: 682b ldr r3, [r5, #0] -10036d86: 429a cmp r2, r3 -10036d88: d104 bne.n 10036d94 -10036d8a: f7e0 faf0 bl 1001736e -10036d8e: 42b4 cmp r4, r6 -10036d90: d102 bne.n 10036d98 -10036d92: bd70 pop {r4, r5, r6, pc} -10036d94: 6824 ldr r4, [r4, #0] -10036d96: e7ee b.n 10036d76 -10036d98: 6828 ldr r0, [r5, #0] -10036d9a: f04f 31ff mov.w r1, #4294967295 -10036d9e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10036da2: f7e0 bd73 b.w 1001788c -10036da6: bd70 pop {r4, r5, r6, pc} -10036da8: 1004df94 .word 0x1004df94 - -10036dac : -10036dac: 6803 ldr r3, [r0, #0] -10036dae: b570 push {r4, r5, r6, lr} -10036db0: 4605 mov r5, r0 -10036db2: b33b cbz r3, 10036e04 -10036db4: f7e0 fad9 bl 1001736a -10036db8: 4b13 ldr r3, [pc, #76] ; (10036e08 ) -10036dba: 681c ldr r4, [r3, #0] -10036dbc: 461e mov r6, r3 -10036dbe: 4812 ldr r0, [pc, #72] ; (10036e08 ) -10036dc0: 4621 mov r1, r4 -10036dc2: f7e0 fbde bl 10017582 -10036dc6: b970 cbnz r0, 10036de6 -10036dc8: 68a3 ldr r3, [r4, #8] -10036dca: 681a ldr r2, [r3, #0] -10036dcc: 682b ldr r3, [r5, #0] -10036dce: 429a cmp r2, r3 -10036dd0: d107 bne.n 10036de2 -10036dd2: 4620 mov r0, r4 -10036dd4: f7e0 fb48 bl 10017468 -10036dd8: 4620 mov r0, r4 -10036dda: 210c movs r1, #12 -10036ddc: f7e0 fb15 bl 1001740a -10036de0: e001 b.n 10036de6 -10036de2: 6824 ldr r4, [r4, #0] -10036de4: e7eb b.n 10036dbe -10036de6: f7e0 fac2 bl 1001736e -10036dea: 42b4 cmp r4, r6 -10036dec: d00a beq.n 10036e04 -10036dee: 6828 ldr r0, [r5, #0] -10036df0: f04f 31ff mov.w r1, #4294967295 -10036df4: f7e0 fd36 bl 10017864 -10036df8: 2300 movs r3, #0 -10036dfa: 602b str r3, [r5, #0] -10036dfc: 4b03 ldr r3, [pc, #12] ; (10036e0c ) -10036dfe: 681a ldr r2, [r3, #0] -10036e00: 3a01 subs r2, #1 -10036e02: 601a str r2, [r3, #0] -10036e04: bd70 pop {r4, r5, r6, pc} -10036e06: bf00 nop -10036e08: 1004df94 .word 0x1004df94 -10036e0c: 1004dfcc .word 0x1004dfcc - -10036e10 : -10036e10: 6082 str r2, [r0, #8] -10036e12: 6043 str r3, [r0, #4] -10036e14: f7ff beda b.w 10036bcc - -10036e18 : -10036e18: f7ff bf34 b.w 10036c84 - -10036e1c : -10036e1c: b508 push {r3, lr} -10036e1e: f7ff ffa1 bl 10036d64 -10036e22: 2000 movs r0, #0 -10036e24: bd08 pop {r3, pc} - -10036e26 : -10036e26: f7ff bfc1 b.w 10036dac - ... - -10036e2c : -10036e2c: 4b02 ldr r3, [pc, #8] ; (10036e38 ) -10036e2e: 681b ldr r3, [r3, #0] -10036e30: 1a18 subs r0, r3, r0 -10036e32: bf18 it ne -10036e34: 2001 movne r0, #1 -10036e36: 4770 bx lr -10036e38: 1004df9c .word 0x1004df9c - -10036e3c : -10036e3c: b570 push {r4, r5, r6, lr} -10036e3e: 460c mov r4, r1 -10036e40: 4606 mov r6, r0 -10036e42: b970 cbnz r0, 10036e62 -10036e44: 4601 mov r1, r0 -10036e46: f7e0 fc71 bl 1001772c -10036e4a: f7ff fba1 bl 10036590 -10036e4e: f7ff fbcd bl 100365ec -10036e52: f7ff fb8f bl 10036574 -10036e56: f7ff fe83 bl 10036b60 -10036e5a: f7fc f9e3 bl 10033224 -10036e5e: 4630 mov r0, r6 -10036e60: e007 b.n 10036e72 -10036e62: 2801 cmp r0, #1 -10036e64: d103 bne.n 10036e6e -10036e66: 4b13 ldr r3, [pc, #76] ; (10036eb4 ) -10036e68: 6818 ldr r0, [r3, #0] -10036e6a: b910 cbnz r0, 10036e72 -10036e6c: e01f b.n 10036eae -10036e6e: 4812 ldr r0, [pc, #72] ; (10036eb8 ) -10036e70: e01a b.n 10036ea8 -10036e72: 4621 mov r1, r4 -10036e74: f7fc f8f4 bl 10033060 -10036e78: 4601 mov r1, r0 -10036e7a: b190 cbz r0, 10036ea2 -10036e7c: 2318 movs r3, #24 -10036e7e: 4373 muls r3, r6 -10036e80: 4a0c ldr r2, [pc, #48] ; (10036eb4 ) -10036e82: 2400 movs r4, #0 -10036e84: 18d5 adds r5, r2, r3 -10036e86: 606c str r4, [r5, #4] -10036e88: 60ac str r4, [r5, #8] -10036e8a: 60ec str r4, [r5, #12] -10036e8c: 742c strb r4, [r5, #16] -10036e8e: 50d0 str r0, [r2, r3] -10036e90: 4630 mov r0, r6 -10036e92: f101 0214 add.w r2, r1, #20 -10036e96: f7dd fc13 bl 100146c0 -10036e9a: 2301 movs r3, #1 -10036e9c: 742b strb r3, [r5, #16] -10036e9e: 4620 mov r0, r4 -10036ea0: bd70 pop {r4, r5, r6, pc} -10036ea2: f7fc f9d5 bl 10033250 -10036ea6: 4805 ldr r0, [pc, #20] ; (10036ebc ) -10036ea8: 4905 ldr r1, [pc, #20] ; (10036ec0 ) -10036eaa: f7e3 fe59 bl 1001ab60 -10036eae: f04f 30ff mov.w r0, #4294967295 -10036eb2: bd70 pop {r4, r5, r6, pc} -10036eb4: 1004df9c .word 0x1004df9c -10036eb8: 10042593 .word 0x10042593 -10036ebc: 100425ae .word 0x100425ae -10036ec0: 100428b8 .word 0x100428b8 - -10036ec4 : -10036ec4: b5f8 push {r3, r4, r5, r6, r7, lr} -10036ec6: 4c2d ldr r4, [pc, #180] ; (10036f7c ) -10036ec8: 7c23 ldrb r3, [r4, #16] -10036eca: 6826 ldr r6, [r4, #0] -10036ecc: 2b00 cmp r3, #0 -10036ece: d053 beq.n 10036f78 -10036ed0: 6933 ldr r3, [r6, #16] -10036ed2: 2201 movs r2, #1 -10036ed4: 681d ldr r5, [r3, #0] -10036ed6: f241 73b8 movw r3, #6072 ; 0x17b8 -10036eda: f505 50be add.w r0, r5, #6080 ; 0x17c0 -10036ede: 54ea strb r2, [r5, r3] -10036ee0: 300c adds r0, #12 -10036ee2: f7e0 fca9 bl 10017838 -10036ee6: f7e0 fa40 bl 1001736a -10036eea: 2300 movs r3, #0 -10036eec: 68a2 ldr r2, [r4, #8] -10036eee: 68e7 ldr r7, [r4, #12] -10036ef0: 7423 strb r3, [r4, #16] -10036ef2: f884 3028 strb.w r3, [r4, #40] ; 0x28 -10036ef6: 6a23 ldr r3, [r4, #32] -10036ef8: 4417 add r7, r2 -10036efa: 441f add r7, r3 -10036efc: 6a63 ldr r3, [r4, #36] ; 0x24 -10036efe: 441f add r7, r3 -10036f00: f7e0 fa35 bl 1001736e -10036f04: b14f cbz r7, 10036f1a -10036f06: 491e ldr r1, [pc, #120] ; (10036f80 ) -10036f08: 463a mov r2, r7 -10036f0a: 481e ldr r0, [pc, #120] ; (10036f84 ) -10036f0c: f7e3 fe28 bl 1001ab60 -10036f10: f44f 707a mov.w r0, #1000 ; 0x3e8 -10036f14: f7e0 fbae bl 10017674 -10036f18: e7e5 b.n 10036ee6 -10036f1a: 2064 movs r0, #100 ; 0x64 -10036f1c: f7e0 fbaa bl 10017674 -10036f20: f505 53be add.w r3, r5, #6080 ; 0x17c0 -10036f24: 3310 adds r3, #16 -10036f26: 681b ldr r3, [r3, #0] -10036f28: b163 cbz r3, 10036f44 -10036f2a: f505 53bd add.w r3, r5, #6048 ; 0x17a0 -10036f2e: 3318 adds r3, #24 -10036f30: 781b ldrb r3, [r3, #0] -10036f32: 2b02 cmp r3, #2 -10036f34: d006 beq.n 10036f44 -10036f36: 4814 ldr r0, [pc, #80] ; (10036f88 ) -10036f38: 4911 ldr r1, [pc, #68] ; (10036f80 ) -10036f3a: f7e3 fe11 bl 1001ab60 -10036f3e: f44f 707a mov.w r0, #1000 ; 0x3e8 -10036f42: e7eb b.n 10036f1c -10036f44: 4630 mov r0, r6 -10036f46: f7fc f94b bl 100331e0 -10036f4a: f7fc f981 bl 10033250 -10036f4e: f7ff fe17 bl 10036b80 -10036f52: 2000 movs r0, #0 -10036f54: 6020 str r0, [r4, #0] -10036f56: 6060 str r0, [r4, #4] -10036f58: 60a0 str r0, [r4, #8] -10036f5a: 60e0 str r0, [r4, #12] -10036f5c: 7420 strb r0, [r4, #16] -10036f5e: 61a0 str r0, [r4, #24] -10036f60: 61e0 str r0, [r4, #28] -10036f62: 6220 str r0, [r4, #32] -10036f64: 6260 str r0, [r4, #36] ; 0x24 -10036f66: f884 0028 strb.w r0, [r4, #40] ; 0x28 -10036f6a: 4601 mov r1, r0 -10036f6c: f7e0 fa4a bl 10017404 -10036f70: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -10036f74: f7ff bb68 b.w 10036648 -10036f78: bdf8 pop {r3, r4, r5, r6, r7, pc} -10036f7a: bf00 nop -10036f7c: 1004df9c .word 0x1004df9c -10036f80: 1004246e .word 0x1004246e -10036f84: 100425cf .word 0x100425cf -10036f88: 100425ef .word 0x100425ef - -10036f8c : -10036f8c: 2218 movs r2, #24 -10036f8e: b508 push {r3, lr} -10036f90: 4350 muls r0, r2 -10036f92: 4b08 ldr r3, [pc, #32] ; (10036fb4 ) -10036f94: 181a adds r2, r3, r0 -10036f96: 5818 ldr r0, [r3, r0] -10036f98: 7c13 ldrb r3, [r2, #16] -10036f9a: b143 cbz r3, 10036fae -10036f9c: b920 cbnz r0, 10036fa8 -10036f9e: 4906 ldr r1, [pc, #24] ; (10036fb8 ) -10036fa0: 4806 ldr r0, [pc, #24] ; (10036fbc ) -10036fa2: f7e3 fddd bl 1001ab60 -10036fa6: e002 b.n 10036fae -10036fa8: 6a03 ldr r3, [r0, #32] -10036faa: 4798 blx r3 -10036fac: bd08 pop {r3, pc} -10036fae: f04f 30ff mov.w r0, #4294967295 -10036fb2: bd08 pop {r3, pc} -10036fb4: 1004df9c .word 0x1004df9c -10036fb8: 1004247f .word 0x1004247f -10036fbc: 10042606 .word 0x10042606 - -10036fc0 : -10036fc0: 4b02 ldr r3, [pc, #8] ; (10036fcc ) -10036fc2: 2218 movs r2, #24 -10036fc4: fb02 3000 mla r0, r2, r0, r3 -10036fc8: 7c00 ldrb r0, [r0, #16] -10036fca: 4770 bx lr -10036fcc: 1004df9c .word 0x1004df9c - -10036fd0 : -10036fd0: 4b03 ldr r3, [pc, #12] ; (10036fe0 ) -10036fd2: 2218 movs r2, #24 -10036fd4: fb02 3000 mla r0, r2, r0, r3 -10036fd8: 6883 ldr r3, [r0, #8] -10036fda: 3301 adds r3, #1 -10036fdc: 6083 str r3, [r0, #8] -10036fde: 4770 bx lr -10036fe0: 1004df9c .word 0x1004df9c - -10036fe4 : -10036fe4: 4b03 ldr r3, [pc, #12] ; (10036ff4 ) -10036fe6: 2218 movs r2, #24 -10036fe8: fb02 3000 mla r0, r2, r0, r3 -10036fec: 6883 ldr r3, [r0, #8] -10036fee: 3b01 subs r3, #1 -10036ff0: 6083 str r3, [r0, #8] -10036ff2: 4770 bx lr -10036ff4: 1004df9c .word 0x1004df9c - -10036ff8 : -10036ff8: 4b02 ldr r3, [pc, #8] ; (10037004 ) -10036ffa: 2218 movs r2, #24 -10036ffc: fb02 3000 mla r0, r2, r0, r3 -10037000: 6840 ldr r0, [r0, #4] -10037002: 4770 bx lr -10037004: 1004df9c .word 0x1004df9c - -10037008 : -10037008: b508 push {r3, lr} -1003700a: 4b0b ldr r3, [pc, #44] ; (10037038 ) -1003700c: 681a ldr r2, [r3, #0] -1003700e: 4b0b ldr r3, [pc, #44] ; (1003703c ) -10037010: 3a02 subs r2, #2 -10037012: 681b ldr r3, [r3, #0] -10037014: 429a cmp r2, r3 -10037016: dd0b ble.n 10037030 -10037018: 4b09 ldr r3, [pc, #36] ; (10037040 ) -1003701a: 681a ldr r2, [r3, #0] -1003701c: 4b09 ldr r3, [pc, #36] ; (10037044 ) -1003701e: 3a02 subs r2, #2 -10037020: 681b ldr r3, [r3, #0] -10037022: 429a cmp r2, r3 -10037024: dd04 ble.n 10037030 -10037026: e8bd 4008 ldmia.w sp!, {r3, lr} -1003702a: 214a movs r1, #74 ; 0x4a -1003702c: f7ff bbfd b.w 1003682a -10037030: f7ff fa92 bl 10036558 -10037034: 2000 movs r0, #0 -10037036: bd08 pop {r3, pc} -10037038: 10044f48 .word 0x10044f48 -1003703c: 1004dd98 .word 0x1004dd98 -10037040: 10044f4c .word 0x10044f4c -10037044: 1004df7c .word 0x1004df7c - -10037048 : -10037048: b508 push {r3, lr} -1003704a: 1c43 adds r3, r0, #1 -1003704c: d105 bne.n 1003705a -1003704e: e8bd 4008 ldmia.w sp!, {r3, lr} -10037052: 4807 ldr r0, [pc, #28] ; (10037070 ) -10037054: 4907 ldr r1, [pc, #28] ; (10037074 ) -10037056: f7e3 bd83 b.w 1001ab60 -1003705a: 2218 movs r2, #24 -1003705c: fb02 f300 mul.w r3, r2, r0 -10037060: 4a05 ldr r2, [pc, #20] ; (10037078 ) -10037062: 4608 mov r0, r1 -10037064: 58d3 ldr r3, [r2, r3] -10037066: 61cb str r3, [r1, #28] -10037068: 6a9a ldr r2, [r3, #40] ; 0x28 -1003706a: 4619 mov r1, r3 -1003706c: 4790 blx r2 -1003706e: bd08 pop {r3, pc} -10037070: 100401b7 .word 0x100401b7 -10037074: 1004245b .word 0x1004245b -10037078: 1004df9c .word 0x1004df9c - -1003707c : -1003707c: b570 push {r4, r5, r6, lr} -1003707e: 4604 mov r4, r0 -10037080: b928 cbnz r0, 1003708e -10037082: 4825 ldr r0, [pc, #148] ; (10037118 ) -10037084: 4925 ldr r1, [pc, #148] ; (1003711c ) -10037086: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1003708a: f7e3 bd69 b.w 1001ab60 -1003708e: 69c0 ldr r0, [r0, #28] -10037090: f7ff fecc bl 10036e2c -10037094: 1c43 adds r3, r0, #1 -10037096: 4605 mov r5, r0 -10037098: d0f3 beq.n 10037082 -1003709a: 4e21 ldr r6, [pc, #132] ; (10037120 ) -1003709c: f7e0 f965 bl 1001736a -100370a0: 2318 movs r3, #24 -100370a2: fb03 6305 mla r3, r3, r5, r6 -100370a6: 7c1a ldrb r2, [r3, #16] -100370a8: b18a cbz r2, 100370ce -100370aa: 68da ldr r2, [r3, #12] -100370ac: 3201 adds r2, #1 -100370ae: 60da str r2, [r3, #12] -100370b0: f7e0 f95d bl 1001736e -100370b4: 6921 ldr r1, [r4, #16] -100370b6: 7b0b ldrb r3, [r1, #12] -100370b8: 2b08 cmp r3, #8 -100370ba: d011 beq.n 100370e0 -100370bc: 2318 movs r3, #24 -100370be: fb03 6305 mla r3, r3, r5, r6 -100370c2: 4628 mov r0, r5 -100370c4: 605c str r4, [r3, #4] -100370c6: 6a21 ldr r1, [r4, #32] -100370c8: f7dd fbb6 bl 10014838 -100370cc: e011 b.n 100370f2 -100370ce: 4620 mov r0, r4 -100370d0: 69e1 ldr r1, [r4, #28] -100370d2: f7ff fb87 bl 100367e4 -100370d6: 4911 ldr r1, [pc, #68] ; (1003711c ) -100370d8: 4812 ldr r0, [pc, #72] ; (10037124 ) -100370da: f7e3 fd41 bl 1001ab60 -100370de: e017 b.n 10037110 -100370e0: 7b4b ldrb r3, [r1, #13] -100370e2: 2b00 cmp r3, #0 -100370e4: d1ea bne.n 100370bc -100370e6: 4628 mov r0, r5 -100370e8: 311e adds r1, #30 -100370ea: f7dd fb7b bl 100147e4 -100370ee: 2800 cmp r0, #0 -100370f0: d1e4 bne.n 100370bc -100370f2: 4620 mov r0, r4 -100370f4: 69e1 ldr r1, [r4, #28] -100370f6: f7ff fb75 bl 100367e4 -100370fa: 2318 movs r3, #24 -100370fc: fb03 6505 mla r5, r3, r5, r6 -10037100: 2300 movs r3, #0 -10037102: 606b str r3, [r5, #4] -10037104: 3508 adds r5, #8 -10037106: f7e0 f930 bl 1001736a -1003710a: 686b ldr r3, [r5, #4] -1003710c: 3b01 subs r3, #1 -1003710e: 606b str r3, [r5, #4] -10037110: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10037114: f7e0 b92b b.w 1001736e -10037118: 10040122 .word 0x10040122 -1003711c: 10042866 .word 0x10042866 -10037120: 1004df9c .word 0x1004df9c -10037124: 100401b7 .word 0x100401b7 - -10037128 : -10037128: f7fd bc5a b.w 100349e0 - -1003712c : -1003712c: 4b0a ldr r3, [pc, #40] ; (10037158 ) -1003712e: 4a0b ldr r2, [pc, #44] ; (1003715c ) -10037130: b2c0 uxtb r0, r0 -10037132: 7018 strb r0, [r3, #0] -10037134: 6813 ldr r3, [r2, #0] -10037136: b12b cbz r3, 10037144 -10037138: 691b ldr r3, [r3, #16] -1003713a: 681b ldr r3, [r3, #0] -1003713c: f503 539c add.w r3, r3, #4992 ; 0x1380 -10037140: f883 0051 strb.w r0, [r3, #81] ; 0x51 -10037144: 6993 ldr r3, [r2, #24] -10037146: b12b cbz r3, 10037154 -10037148: 691b ldr r3, [r3, #16] -1003714a: 681b ldr r3, [r3, #0] -1003714c: f503 539c add.w r3, r3, #4992 ; 0x1380 -10037150: f883 0051 strb.w r0, [r3, #81] ; 0x51 -10037154: 2000 movs r0, #0 -10037156: 4770 bx lr -10037158: 1004dd68 .word 0x1004dd68 -1003715c: 1004df9c .word 0x1004df9c - -10037160 : -10037160: b538 push {r3, r4, r5, lr} -10037162: 2205 movs r2, #5 -10037164: 4604 mov r4, r0 -10037166: 460d mov r5, r1 -10037168: 4608 mov r0, r1 -1003716a: 491e ldr r1, [pc, #120] ; (100371e4 ) -1003716c: f7e3 fd1c bl 1001aba8 -10037170: 4b1d ldr r3, [pc, #116] ; (100371e8 ) -10037172: 2800 cmp r0, #0 -10037174: bf14 ite ne -10037176: 2018 movne r0, #24 -10037178: 2000 moveq r0, #0 -1003717a: 5818 ldr r0, [r3, r0] -1003717c: b350 cbz r0, 100371d4 -1003717e: 6903 ldr r3, [r0, #16] -10037180: f641 0268 movw r2, #6248 ; 0x1868 -10037184: 681b ldr r3, [r3, #0] -10037186: 5c9a ldrb r2, [r3, r2] -10037188: b912 cbnz r2, 10037190 -1003718a: f641 025c movw r2, #6236 ; 0x185c -1003718e: 589b ldr r3, [r3, r2] -10037190: f503 53a0 add.w r3, r3, #5120 ; 0x1400 -10037194: 69db ldr r3, [r3, #28] -10037196: f1b3 4f00 cmp.w r3, #2147483648 ; 0x80000000 -1003719a: d10d bne.n 100371b8 -1003719c: f648 3306 movw r3, #35590 ; 0x8b06 -100371a0: 429c cmp r4, r3 -100371a2: d01b beq.n 100371dc -100371a4: f648 3314 movw r3, #35604 ; 0x8b14 -100371a8: 429c cmp r4, r3 -100371aa: d017 beq.n 100371dc -100371ac: f024 0202 bic.w r2, r4, #2 -100371b0: f648 3318 movw r3, #35608 ; 0x8b18 -100371b4: 429a cmp r2, r3 -100371b6: d011 beq.n 100371dc -100371b8: f5a4 4309 sub.w r3, r4, #35072 ; 0x8900 -100371bc: 3bf0 subs r3, #240 ; 0xf0 -100371be: 2b0f cmp r3, #15 -100371c0: d903 bls.n 100371ca -100371c2: f5a4 430b sub.w r3, r4, #35584 ; 0x8b00 -100371c6: 2bff cmp r3, #255 ; 0xff -100371c8: d808 bhi.n 100371dc -100371ca: 6ac3 ldr r3, [r0, #44] ; 0x2c -100371cc: 4629 mov r1, r5 -100371ce: 4622 mov r2, r4 -100371d0: 4798 blx r3 -100371d2: bd38 pop {r3, r4, r5, pc} -100371d4: 4805 ldr r0, [pc, #20] ; (100371ec ) -100371d6: 4906 ldr r1, [pc, #24] ; (100371f0 ) -100371d8: f7e3 fcc2 bl 1001ab60 -100371dc: f04f 30ff mov.w r0, #4294967295 -100371e0: bd38 pop {r3, r4, r5, pc} -100371e2: bf00 nop -100371e4: 1003fb67 .word 0x1003fb67 -100371e8: 1004df9c .word 0x1004df9c -100371ec: 100401b7 .word 0x100401b7 -100371f0: 10042898 .word 0x10042898 - -100371f4 : -100371f4: 2801 cmp r0, #1 -100371f6: d805 bhi.n 10037204 -100371f8: 4b03 ldr r3, [pc, #12] ; (10037208 ) -100371fa: 2218 movs r2, #24 -100371fc: fb02 3000 mla r0, r2, r0, r3 -10037200: 7c00 ldrb r0, [r0, #16] -10037202: 4770 bx lr -10037204: 2000 movs r0, #0 -10037206: 4770 bx lr -10037208: 1004df9c .word 0x1004df9c - -1003720c : -1003720c: b510 push {r4, lr} -1003720e: 4b09 ldr r3, [pc, #36] ; (10037234 ) -10037210: 7c1c ldrb r4, [r3, #16] -10037212: b144 cbz r4, 10037226 -10037214: 681b ldr r3, [r3, #0] -10037216: 691b ldr r3, [r3, #16] -10037218: 681a ldr r2, [r3, #0] -1003721a: f241 3338 movw r3, #4920 ; 0x1338 -1003721e: 58d3 ldr r3, [r2, r3] -10037220: f8d3 0314 ldr.w r0, [r3, #788] ; 0x314 -10037224: bd10 pop {r4, pc} -10037226: 4904 ldr r1, [pc, #16] ; (10037238 ) -10037228: 4804 ldr r0, [pc, #16] ; (1003723c ) -1003722a: f7e3 fc99 bl 1001ab60 -1003722e: 4620 mov r0, r4 -10037230: bd10 pop {r4, pc} -10037232: bf00 nop -10037234: 1004df9c .word 0x1004df9c -10037238: 10042874 .word 0x10042874 -1003723c: 100401b7 .word 0x100401b7 - -10037240 : -10037240: b5f0 push {r4, r5, r6, r7, lr} -10037242: 4c20 ldr r4, [pc, #128] ; (100372c4 ) -10037244: b085 sub sp, #20 -10037246: 7c23 ldrb r3, [r4, #16] -10037248: 4605 mov r5, r0 -1003724a: 2b00 cmp r3, #0 -1003724c: d036 beq.n 100372bc -1003724e: 4a1e ldr r2, [pc, #120] ; (100372c8 ) -10037250: ab02 add r3, sp, #8 -10037252: 6810 ldr r0, [r2, #0] -10037254: 9001 str r0, [sp, #4] -10037256: f852 0f04 ldr.w r0, [r2, #4]! -1003725a: 6851 ldr r1, [r2, #4] -1003725c: 220d movs r2, #13 -1003725e: c303 stmia r3!, {r0, r1} -10037260: 6823 ldr r3, [r4, #0] -10037262: 2100 movs r1, #0 -10037264: 691b ldr r3, [r3, #16] -10037266: 681c ldr r4, [r3, #0] -10037268: f204 6739 addw r7, r4, #1593 ; 0x639 -1003726c: 4638 mov r0, r7 -1003726e: f7e0 f8df bl 10017430 -10037272: f015 0601 ands.w r6, r5, #1 -10037276: d005 beq.n 10037284 -10037278: 4638 mov r0, r7 -1003727a: a901 add r1, sp, #4 -1003727c: 2204 movs r2, #4 -1003727e: f7e0 f8c7 bl 10017410 -10037282: 2604 movs r6, #4 -10037284: 07ab lsls r3, r5, #30 -10037286: d507 bpl.n 10037298 -10037288: 19a0 adds r0, r4, r6 -1003728a: f200 6039 addw r0, r0, #1593 ; 0x639 -1003728e: a902 add r1, sp, #8 -10037290: 2208 movs r2, #8 -10037292: f7e0 f8bd bl 10017410 -10037296: 3608 adds r6, #8 -10037298: 23ff movs r3, #255 ; 0xff -1003729a: 4426 add r6, r4 -1003729c: f886 3639 strb.w r3, [r6, #1593] ; 0x639 -100372a0: f241 33b5 movw r3, #5045 ; 0x13b5 -100372a4: 54e5 strb r5, [r4, r3] -100372a6: f005 0508 and.w r5, r5, #8 -100372aa: f005 02ff and.w r2, r5, #255 ; 0xff -100372ae: f241 33cc movw r3, #5068 ; 0x13cc -100372b2: b105 cbz r5, 100372b6 -100372b4: 2201 movs r2, #1 -100372b6: 54e2 strb r2, [r4, r3] -100372b8: 2000 movs r0, #0 -100372ba: e001 b.n 100372c0 -100372bc: f04f 30ff mov.w r0, #4294967295 -100372c0: b005 add sp, #20 -100372c2: bdf0 pop {r4, r5, r6, r7, pc} -100372c4: 1004df9c .word 0x1004df9c -100372c8: 1004242b .word 0x1004242b - -100372cc : -100372cc: 4b0f ldr r3, [pc, #60] ; (1003730c ) -100372ce: b510 push {r4, lr} -100372d0: 681b ldr r3, [r3, #0] -100372d2: b10b cbz r3, 100372d8 -100372d4: 691b ldr r3, [r3, #16] -100372d6: 681c ldr r4, [r3, #0] -100372d8: 6920 ldr r0, [r4, #16] -100372da: 06c3 lsls r3, r0, #27 -100372dc: d501 bpl.n 100372e2 -100372de: 2000 movs r0, #0 -100372e0: bd10 pop {r4, pc} -100372e2: f8d4 3d0c ldr.w r3, [r4, #3340] ; 0xd0c -100372e6: 2b01 cmp r3, #1 -100372e8: d906 bls.n 100372f8 -100372ea: 2b05 cmp r3, #5 -100372ec: d004 beq.n 100372f8 -100372ee: f7ff ff8d bl 1003720c -100372f2: 2801 cmp r0, #1 -100372f4: d106 bne.n 10037304 -100372f6: 6920 ldr r0, [r4, #16] -100372f8: f000 0001 and.w r0, r0, #1 -100372fc: f080 0001 eor.w r0, r0, #1 -10037300: 4240 negs r0, r0 -10037302: bd10 pop {r4, pc} -10037304: f04f 30ff mov.w r0, #4294967295 -10037308: bd10 pop {r4, pc} -1003730a: bf00 nop -1003730c: 1004df9c .word 0x1004df9c - -10037310 : -10037310: b508 push {r3, lr} -10037312: f241 7384 movw r3, #6020 ; 0x1784 -10037316: 58c3 ldr r3, [r0, r3] -10037318: 4798 blx r3 -1003731a: bd08 pop {r3, pc} - -1003731c : -1003731c: b508 push {r3, lr} -1003731e: f241 7390 movw r3, #6032 ; 0x1790 -10037322: 58c3 ldr r3, [r0, r3] -10037324: 4798 blx r3 -10037326: bd08 pop {r3, pc} - -10037328 : -10037328: 4603 mov r3, r0 -1003732a: f000 0001 and.w r0, r0, #1 -1003732e: f080 0001 eor.w r0, r0, #1 -10037332: 0799 lsls r1, r3, #30 -10037334: bf5c itt pl -10037336: 3001 addpl r0, #1 -10037338: b2c0 uxtbpl r0, r0 -1003733a: 075a lsls r2, r3, #29 -1003733c: bf5c itt pl -1003733e: 3001 addpl r0, #1 -10037340: b2c0 uxtbpl r0, r0 -10037342: 071b lsls r3, r3, #28 -10037344: bf5c itt pl -10037346: 3001 addpl r0, #1 -10037348: b2c0 uxtbpl r0, r0 -1003734a: 4770 bx lr - -1003734c : -1003734c: b513 push {r0, r1, r4, lr} -1003734e: f89d 4010 ldrb.w r4, [sp, #16] -10037352: 9400 str r4, [sp, #0] -10037354: f241 748c movw r4, #6028 ; 0x178c -10037358: 5904 ldr r4, [r0, r4] -1003735a: 47a0 blx r4 -1003735c: b002 add sp, #8 -1003735e: bd10 pop {r4, pc} - -10037360 : -10037360: b5f8 push {r3, r4, r5, r6, r7, lr} -10037362: 460e mov r6, r1 -10037364: 4615 mov r5, r2 -10037366: 461c mov r4, r3 -10037368: b983 cbnz r3, 1003738c -1003736a: 4b09 ldr r3, [pc, #36] ; (10037390 ) -1003736c: 4620 mov r0, r4 -1003736e: 681f ldr r7, [r3, #0] -10037370: f7df fc78 bl 10016c64 -10037374: 462a mov r2, r5 -10037376: 4631 mov r1, r6 -10037378: 2307 movs r3, #7 -1003737a: 4638 mov r0, r7 -1003737c: f7e3 fb1e bl 1001a9bc -10037380: b2c5 uxtb r5, r0 -10037382: 4620 mov r0, r4 -10037384: f7df fc88 bl 10016c98 -10037388: 4628 mov r0, r5 -1003738a: bdf8 pop {r3, r4, r5, r6, r7, pc} -1003738c: 2000 movs r0, #0 -1003738e: bdf8 pop {r3, r4, r5, r6, r7, pc} -10037390: 400000e8 .word 0x400000e8 - -10037394 : -10037394: b5f8 push {r3, r4, r5, r6, r7, lr} -10037396: 460e mov r6, r1 -10037398: 4615 mov r5, r2 -1003739a: 461c mov r4, r3 -1003739c: b983 cbnz r3, 100373c0 -1003739e: 4b09 ldr r3, [pc, #36] ; (100373c4 ) -100373a0: 4620 mov r0, r4 -100373a2: 681f ldr r7, [r3, #0] -100373a4: f7df fc5e bl 10016c64 -100373a8: 462a mov r2, r5 -100373aa: 4631 mov r1, r6 -100373ac: 2307 movs r3, #7 -100373ae: 4638 mov r0, r7 -100373b0: f7e3 fb14 bl 1001a9dc -100373b4: b2c5 uxtb r5, r0 -100373b6: 4620 mov r0, r4 -100373b8: f7df fc6e bl 10016c98 -100373bc: 4628 mov r0, r5 -100373be: bdf8 pop {r3, r4, r5, r6, r7, pc} -100373c0: 2000 movs r0, #0 -100373c2: bdf8 pop {r3, r4, r5, r6, r7, pc} -100373c4: 400000e8 .word 0x400000e8 - -100373c8 : -100373c8: b513 push {r0, r1, r4, lr} -100373ca: f89d 4010 ldrb.w r4, [sp, #16] -100373ce: 9400 str r4, [sp, #0] -100373d0: f241 7494 movw r4, #6036 ; 0x1794 -100373d4: 5904 ldr r4, [r0, r4] -100373d6: 47a0 blx r4 -100373d8: b002 add sp, #8 -100373da: bd10 pop {r4, pc} - -100373dc : -100373dc: 07c3 lsls r3, r0, #31 -100373de: d403 bmi.n 100373e8 -100373e0: 780b ldrb r3, [r1, #0] -100373e2: 7013 strb r3, [r2, #0] -100373e4: 784b ldrb r3, [r1, #1] -100373e6: 7053 strb r3, [r2, #1] -100373e8: 0783 lsls r3, r0, #30 -100373ea: d403 bmi.n 100373f4 -100373ec: 788b ldrb r3, [r1, #2] -100373ee: 7093 strb r3, [r2, #2] -100373f0: 78cb ldrb r3, [r1, #3] -100373f2: 70d3 strb r3, [r2, #3] -100373f4: 0743 lsls r3, r0, #29 -100373f6: d403 bmi.n 10037400 -100373f8: 790b ldrb r3, [r1, #4] -100373fa: 7113 strb r3, [r2, #4] -100373fc: 794b ldrb r3, [r1, #5] -100373fe: 7153 strb r3, [r2, #5] -10037400: 0703 lsls r3, r0, #28 -10037402: d403 bmi.n 1003740c -10037404: 798b ldrb r3, [r1, #6] -10037406: 7193 strb r3, [r2, #6] -10037408: 79cb ldrb r3, [r1, #7] -1003740a: 71d3 strb r3, [r2, #7] -1003740c: 4770 bx lr - -1003740e : -1003740e: b513 push {r0, r1, r4, lr} -10037410: f89d 4010 ldrb.w r4, [sp, #16] -10037414: 9400 str r4, [sp, #0] -10037416: f241 7498 movw r4, #6040 ; 0x1798 -1003741a: 5904 ldr r4, [r0, r4] -1003741c: 47a0 blx r4 -1003741e: b002 add sp, #8 -10037420: bd10 pop {r4, pc} - -10037422 : -10037422: b538 push {r3, r4, r5, lr} -10037424: 2201 movs r2, #1 -10037426: 460d mov r5, r1 -10037428: 2100 movs r1, #0 -1003742a: 4604 mov r4, r0 -1003742c: f7ff ff70 bl 10037310 -10037430: 2100 movs r1, #0 -10037432: 460a mov r2, r1 -10037434: 4620 mov r0, r4 -10037436: f7ff ff71 bl 1003731c -1003743a: 2100 movs r1, #0 -1003743c: 8028 strh r0, [r5, #0] -1003743e: 460a mov r2, r1 -10037440: 4620 mov r0, r4 -10037442: f7ff ff65 bl 10037310 -10037446: 2001 movs r0, #1 -10037448: bd38 pop {r3, r4, r5, pc} - -1003744a : -1003744a: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -1003744e: b085 sub sp, #20 -10037450: 2400 movs r4, #0 -10037452: 4699 mov r9, r3 -10037454: ab04 add r3, sp, #16 -10037456: f823 4d02 strh.w r4, [r3, #-2]! -1003745a: 4688 mov r8, r1 -1003745c: 4617 mov r7, r2 -1003745e: 9400 str r4, [sp, #0] -10037460: 2204 movs r2, #4 -10037462: 4621 mov r1, r4 -10037464: 4605 mov r5, r0 -10037466: f7ff ff71 bl 1003734c -1003746a: f8bd 300e ldrh.w r3, [sp, #14] -1003746e: eb08 0207 add.w r2, r8, r7 -10037472: 429a cmp r2, r3 -10037474: dc16 bgt.n 100374a4 -10037476: 4628 mov r0, r5 -10037478: 4621 mov r1, r4 -1003747a: 2201 movs r2, #1 -1003747c: f7ff ff48 bl 10037310 -10037480: f241 7388 movw r3, #6024 ; 0x1788 -10037484: 58ee ldr r6, [r5, r3] -10037486: 4628 mov r0, r5 -10037488: 4621 mov r1, r4 -1003748a: 4642 mov r2, r8 -1003748c: 463b mov r3, r7 -1003748e: f8cd 9000 str.w r9, [sp] -10037492: 9401 str r4, [sp, #4] -10037494: 47b0 blx r6 -10037496: 4628 mov r0, r5 -10037498: 4621 mov r1, r4 -1003749a: 4622 mov r2, r4 -1003749c: f7ff ff38 bl 10037310 -100374a0: 2001 movs r0, #1 -100374a2: e000 b.n 100374a6 -100374a4: 4620 mov r0, r4 -100374a6: b005 add sp, #20 -100374a8: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - -100374ac : -100374ac: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100374b0: b087 sub sp, #28 -100374b2: 2400 movs r4, #0 -100374b4: 4698 mov r8, r3 -100374b6: ab06 add r3, sp, #24 -100374b8: f823 4d0a strh.w r4, [r3, #-10]! -100374bc: 460e mov r6, r1 -100374be: 4617 mov r7, r2 -100374c0: 9400 str r4, [sp, #0] -100374c2: 4621 mov r1, r4 -100374c4: 2204 movs r2, #4 -100374c6: 4682 mov sl, r0 -100374c8: f7ff ff40 bl 1003734c -100374cc: f8bd 000e ldrh.w r0, [sp, #14] -100374d0: 19f3 adds r3, r6, r7 -100374d2: 4283 cmp r3, r0 -100374d4: dd01 ble.n 100374da -100374d6: 2000 movs r0, #0 -100374d8: e0a5 b.n 10037626 -100374da: f7e0 f969 bl 100177b0 -100374de: 4605 mov r5, r0 -100374e0: 2800 cmp r0, #0 -100374e2: d0f8 beq.n 100374d6 -100374e4: 4650 mov r0, sl -100374e6: 4621 mov r1, r4 -100374e8: f8bd 200e ldrh.w r2, [sp, #14] -100374ec: 462b mov r3, r5 -100374ee: f7ff ffac bl 1003744a -100374f2: 4681 mov r9, r0 -100374f4: 2800 cmp r0, #0 -100374f6: f000 8090 beq.w 1003761a -100374fa: 2101 movs r1, #1 -100374fc: 460a mov r2, r1 -100374fe: 4650 mov r0, sl -10037500: f7ff ff06 bl 10037310 -10037504: a804 add r0, sp, #16 -10037506: 21ff movs r1, #255 ; 0xff -10037508: 2208 movs r2, #8 -1003750a: f7df ff91 bl 10017430 -1003750e: f016 0401 ands.w r4, r6, #1 -10037512: f3c6 0bc7 ubfx fp, r6, #3, #8 -10037516: f006 0307 and.w r3, r6, #7 -1003751a: d019 beq.n 10037550 -1003751c: f898 0000 ldrb.w r0, [r8] -10037520: 5daa ldrb r2, [r5, r6] -10037522: 4282 cmp r2, r0 -10037524: d010 beq.n 10037548 -10037526: 2101 movs r1, #1 -10037528: 105a asrs r2, r3, #1 -1003752a: fa01 f202 lsl.w r2, r1, r2 -1003752e: 19a9 adds r1, r5, r6 -10037530: f811 4c01 ldrb.w r4, [r1, #-1] -10037534: a906 add r1, sp, #24 -10037536: 4419 add r1, r3 -10037538: 43d2 mvns r2, r2 -1003753a: f002 020f and.w r2, r2, #15 -1003753e: f801 4c09 strb.w r4, [r1, #-9] -10037542: f801 0c08 strb.w r0, [r1, #-8] -10037546: e000 b.n 1003754a -10037548: 220f movs r2, #15 -1003754a: 3301 adds r3, #1 -1003754c: 2401 movs r4, #1 -1003754e: e03f b.n 100375d0 -10037550: 220f movs r2, #15 -10037552: e03d b.n 100375d0 -10037554: f815 c001 ldrb.w ip, [r5, r1] -10037558: 4584 cmp ip, r0 -1003755a: d00e beq.n 1003757a -1003755c: ea4f 0c63 mov.w ip, r3, asr #1 -10037560: fa0e fe0c lsl.w lr, lr, ip -10037564: ea22 020e bic.w r2, r2, lr -10037568: f10d 0e18 add.w lr, sp, #24 -1003756c: 4473 add r3, lr -1003756e: f803 0c08 strb.w r0, [r3, #-8] -10037572: 4429 add r1, r5 -10037574: 7849 ldrb r1, [r1, #1] -10037576: f803 1c07 strb.w r1, [r3, #-7] -1003757a: 3401 adds r4, #1 -1003757c: 2a0f cmp r2, #15 -1003757e: d13b bne.n 100375f8 -10037580: 42bc cmp r4, r7 -10037582: d045 beq.n 10037610 -10037584: 2208 movs r2, #8 -10037586: f10b 0b01 add.w fp, fp, #1 -1003758a: a804 add r0, sp, #16 -1003758c: 21ff movs r1, #255 ; 0xff -1003758e: f7df ff4f bl 10017430 -10037592: fa5f fb8b uxtb.w fp, fp -10037596: 2300 movs r3, #0 -10037598: 220f movs r2, #15 -1003759a: 42a7 cmp r7, r4 -1003759c: d0ee beq.n 1003757c -1003759e: ebc4 0e07 rsb lr, r4, r7 -100375a2: f1be 0f01 cmp.w lr, #1 -100375a6: f818 0004 ldrb.w r0, [r8, r4] -100375aa: eb06 0104 add.w r1, r6, r4 -100375ae: d0d1 beq.n 10037554 -100375b0: f815 e001 ldrb.w lr, [r5, r1] -100375b4: 4586 cmp lr, r0 -100375b6: d10e bne.n 100375d6 -100375b8: eb08 0e04 add.w lr, r8, r4 -100375bc: 4429 add r1, r5 -100375be: f89e e001 ldrb.w lr, [lr, #1] -100375c2: 7849 ldrb r1, [r1, #1] -100375c4: 458e cmp lr, r1 -100375c6: d106 bne.n 100375d6 -100375c8: 3402 adds r4, #2 -100375ca: 42bc cmp r4, r7 -100375cc: d0d6 beq.n 1003757c -100375ce: 3302 adds r3, #2 -100375d0: 2b07 cmp r3, #7 -100375d2: dde2 ble.n 1003759a -100375d4: e7d2 b.n 1003757c -100375d6: 1059 asrs r1, r3, #1 -100375d8: f04f 0e01 mov.w lr, #1 -100375dc: fa0e f101 lsl.w r1, lr, r1 -100375e0: ea22 0201 bic.w r2, r2, r1 -100375e4: a906 add r1, sp, #24 -100375e6: 4419 add r1, r3 -100375e8: f801 0c08 strb.w r0, [r1, #-8] -100375ec: eb08 0004 add.w r0, r8, r4 -100375f0: 7840 ldrb r0, [r0, #1] -100375f2: f801 0c07 strb.w r0, [r1, #-7] -100375f6: e7e7 b.n 100375c8 -100375f8: 2300 movs r3, #0 -100375fa: 9300 str r3, [sp, #0] -100375fc: 4650 mov r0, sl -100375fe: 4659 mov r1, fp -10037600: ab04 add r3, sp, #16 -10037602: f7ff fee1 bl 100373c8 -10037606: fa5f f980 uxtb.w r9, r0 -1003760a: f1b9 0f00 cmp.w r9, #0 -1003760e: d1b7 bne.n 10037580 -10037610: 4650 mov r0, sl -10037612: 2101 movs r1, #1 -10037614: 2200 movs r2, #0 -10037616: f7ff fe7b bl 10037310 -1003761a: 4628 mov r0, r5 -1003761c: f8bd 100e ldrh.w r1, [sp, #14] -10037620: f7df fef3 bl 1001740a -10037624: 4648 mov r0, r9 -10037626: b007 add sp, #28 -10037628: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -1003762c : -1003762c: b573 push {r0, r1, r4, r5, r6, lr} -1003762e: 4605 mov r5, r0 -10037630: 2800 cmp r0, #0 -10037632: d058 beq.n 100376e6 -10037634: 4b2d ldr r3, [pc, #180] ; (100376ec ) -10037636: 681a ldr r2, [r3, #0] -10037638: 461e mov r6, r3 -1003763a: b18a cbz r2, 10037660 -1003763c: 2400 movs r4, #0 -1003763e: 6832 ldr r2, [r6, #0] -10037640: eb04 0344 add.w r3, r4, r4, lsl #1 -10037644: 18d1 adds r1, r2, r3 -10037646: 5cd0 ldrb r0, [r2, r3] -10037648: 7849 ldrb r1, [r1, #1] -1003764a: f007 f995 bl 1003e978 <__key_2char2num_veneer> -1003764e: f80d 0004 strb.w r0, [sp, r4] -10037652: 3401 adds r4, #1 -10037654: 2c06 cmp r4, #6 -10037656: d1f2 bne.n 1003763e -10037658: 4628 mov r0, r5 -1003765a: 4669 mov r1, sp -1003765c: 4622 mov r2, r4 -1003765e: e002 b.n 10037666 -10037660: 4668 mov r0, sp -10037662: 4629 mov r1, r5 -10037664: 2206 movs r2, #6 -10037666: f7df fed3 bl 10017410 -1003766a: f89d 3000 ldrb.w r3, [sp] -1003766e: 2bff cmp r3, #255 ; 0xff -10037670: d114 bne.n 1003769c -10037672: f89d 3001 ldrb.w r3, [sp, #1] -10037676: 2bff cmp r3, #255 ; 0xff -10037678: d135 bne.n 100376e6 -1003767a: f89d 3002 ldrb.w r3, [sp, #2] -1003767e: 2bff cmp r3, #255 ; 0xff -10037680: d131 bne.n 100376e6 -10037682: f89d 3003 ldrb.w r3, [sp, #3] -10037686: 2bff cmp r3, #255 ; 0xff -10037688: d12d bne.n 100376e6 -1003768a: f89d 3004 ldrb.w r3, [sp, #4] -1003768e: 2bff cmp r3, #255 ; 0xff -10037690: d129 bne.n 100376e6 -10037692: f89d 3005 ldrb.w r3, [sp, #5] -10037696: 2bff cmp r3, #255 ; 0xff -10037698: d125 bne.n 100376e6 -1003769a: e00f b.n 100376bc -1003769c: bb1b cbnz r3, 100376e6 -1003769e: f89d 3001 ldrb.w r3, [sp, #1] -100376a2: bb03 cbnz r3, 100376e6 -100376a4: f89d 3002 ldrb.w r3, [sp, #2] -100376a8: b9eb cbnz r3, 100376e6 -100376aa: f89d 3003 ldrb.w r3, [sp, #3] -100376ae: b9d3 cbnz r3, 100376e6 -100376b0: f89d 3004 ldrb.w r3, [sp, #4] -100376b4: b9bb cbnz r3, 100376e6 -100376b6: f89d 3005 ldrb.w r3, [sp, #5] -100376ba: b9a3 cbnz r3, 100376e6 -100376bc: 22e0 movs r2, #224 ; 0xe0 -100376be: f88d 2001 strb.w r2, [sp, #1] -100376c2: 224c movs r2, #76 ; 0x4c -100376c4: f88d 2002 strb.w r2, [sp, #2] -100376c8: 2287 movs r2, #135 ; 0x87 -100376ca: 2300 movs r3, #0 -100376cc: f88d 2003 strb.w r2, [sp, #3] -100376d0: 4628 mov r0, r5 -100376d2: 4669 mov r1, sp -100376d4: 2206 movs r2, #6 -100376d6: f88d 3000 strb.w r3, [sp] -100376da: f88d 3004 strb.w r3, [sp, #4] -100376de: f88d 3005 strb.w r3, [sp, #5] -100376e2: f7df fe95 bl 10017410 -100376e6: b002 add sp, #8 -100376e8: bd70 pop {r4, r5, r6, pc} -100376ea: bf00 nop -100376ec: 1004dd7c .word 0x1004dd7c - -100376f0 : -100376f0: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -100376f4: 4690 mov r8, r2 -100376f6: 4a17 ldr r2, [pc, #92] ; (10037754 ) -100376f8: 4607 mov r7, r0 -100376fa: 6810 ldr r0, [r2, #0] -100376fc: 4689 mov r9, r1 -100376fe: 9001 str r0, [sp, #4] -10037700: 461e mov r6, r3 -10037702: b10b cbz r3, 10037708 -10037704: 2300 movs r3, #0 -10037706: 6033 str r3, [r6, #0] -10037708: 2500 movs r5, #0 -1003770a: 454d cmp r5, r9 -1003770c: d21d bcs.n 1003774a -1003770e: 5d7b ldrb r3, [r7, r5] -10037710: 197c adds r4, r7, r5 -10037712: 2bdd cmp r3, #221 ; 0xdd -10037714: d115 bne.n 10037742 -10037716: 1ca8 adds r0, r5, #2 -10037718: 4438 add r0, r7 -1003771a: a901 add r1, sp, #4 -1003771c: 2204 movs r2, #4 -1003771e: f7df fe7f bl 10017420 -10037722: 2801 cmp r0, #1 -10037724: d10d bne.n 10037742 -10037726: f1b8 0f00 cmp.w r8, #0 -1003772a: d005 beq.n 10037738 -1003772c: 7862 ldrb r2, [r4, #1] -1003772e: 4640 mov r0, r8 -10037730: 4621 mov r1, r4 -10037732: 3202 adds r2, #2 -10037734: f7df fe6c bl 10017410 -10037738: b146 cbz r6, 1003774c -1003773a: 7863 ldrb r3, [r4, #1] -1003773c: 3302 adds r3, #2 -1003773e: 6033 str r3, [r6, #0] -10037740: e004 b.n 1003774c -10037742: 7863 ldrb r3, [r4, #1] -10037744: 3302 adds r3, #2 -10037746: 441d add r5, r3 -10037748: e7df b.n 1003770a -1003774a: 2400 movs r4, #0 -1003774c: 4620 mov r0, r4 -1003774e: b003 add sp, #12 -10037750: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -10037754: 10043d7f .word 0x10043d7f - -10037758 : -10037758: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} -1003775c: 4698 mov r8, r3 -1003775e: 4b1a ldr r3, [pc, #104] ; (100377c8 ) -10037760: 4606 mov r6, r0 -10037762: 9d0a ldr r5, [sp, #40] ; 0x28 -10037764: 6818 ldr r0, [r3, #0] -10037766: 4689 mov r9, r1 -10037768: 4692 mov sl, r2 -1003776a: 9001 str r0, [sp, #4] -1003776c: b10d cbz r5, 10037772 -1003776e: 2300 movs r3, #0 -10037770: 602b str r3, [r5, #0] -10037772: 7833 ldrb r3, [r6, #0] -10037774: 2bdd cmp r3, #221 ; 0xdd -10037776: d001 beq.n 1003777c -10037778: 2000 movs r0, #0 -1003777a: e021 b.n 100377c0 -1003777c: 1cb0 adds r0, r6, #2 -1003777e: a901 add r1, sp, #4 -10037780: 2204 movs r2, #4 -10037782: f7df fe4d bl 10017420 -10037786: 2801 cmp r0, #1 -10037788: d1f6 bne.n 10037778 -1003778a: 1db4 adds r4, r6, #6 -1003778c: 1ba3 subs r3, r4, r6 -1003778e: 454b cmp r3, r9 -10037790: d2f2 bcs.n 10037778 -10037792: 7863 ldrb r3, [r4, #1] -10037794: 78a7 ldrb r7, [r4, #2] -10037796: ea43 2707 orr.w r7, r3, r7, lsl #8 -1003779a: 7823 ldrb r3, [r4, #0] -1003779c: 3703 adds r7, #3 -1003779e: 4553 cmp r3, sl -100377a0: b2bf uxth r7, r7 -100377a2: d10a bne.n 100377ba -100377a4: f1b8 0f00 cmp.w r8, #0 -100377a8: d004 beq.n 100377b4 -100377aa: 4640 mov r0, r8 -100377ac: 4621 mov r1, r4 -100377ae: 463a mov r2, r7 -100377b0: f7df fe2e bl 10017410 -100377b4: b11d cbz r5, 100377be -100377b6: 602f str r7, [r5, #0] -100377b8: e001 b.n 100377be -100377ba: 443c add r4, r7 -100377bc: e7e6 b.n 1003778c -100377be: 4620 mov r0, r4 -100377c0: b002 add sp, #8 -100377c2: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -100377c6: bf00 nop -100377c8: 10043d7f .word 0x10043d7f - -100377cc : -100377cc: b530 push {r4, r5, lr} -100377ce: f8d0 2094 ldr.w r2, [r0, #148] ; 0x94 -100377d2: b087 sub sp, #28 -100377d4: f100 05a4 add.w r5, r0, #164 ; 0xa4 -100377d8: 2300 movs r3, #0 -100377da: 4604 mov r4, r0 -100377dc: a902 add r1, sp, #8 -100377de: 4628 mov r0, r5 -100377e0: 3a0c subs r2, #12 -100377e2: 9303 str r3, [sp, #12] -100377e4: 9304 str r3, [sp, #16] -100377e6: 9305 str r3, [sp, #20] -100377e8: f007 f84a bl 1003e880 <__rtw_get_wpa_ie_veneer> -100377ec: b160 cbz r0, 10037808 -100377ee: 9902 ldr r1, [sp, #8] -100377f0: b151 cbz r1, 10037808 -100377f2: ab05 add r3, sp, #20 -100377f4: 9300 str r3, [sp, #0] -100377f6: 3102 adds r1, #2 -100377f8: aa03 add r2, sp, #12 -100377fa: ab04 add r3, sp, #16 -100377fc: f007 f830 bl 1003e860 <__rtw_parse_wpa_ie_veneer> -10037800: 2801 cmp r0, #1 -10037802: d015 beq.n 10037830 -10037804: 2000 movs r0, #0 -10037806: e01c b.n 10037842 -10037808: f8d4 2094 ldr.w r2, [r4, #148] ; 0x94 -1003780c: 4628 mov r0, r5 -1003780e: a902 add r1, sp, #8 -10037810: 3a0c subs r2, #12 -10037812: f007 f841 bl 1003e898 <__rtw_get_wpa2_ie_veneer> -10037816: 2800 cmp r0, #0 -10037818: d0f4 beq.n 10037804 -1003781a: 9902 ldr r1, [sp, #8] -1003781c: 2900 cmp r1, #0 -1003781e: d0f1 beq.n 10037804 -10037820: ab05 add r3, sp, #20 -10037822: 9300 str r3, [sp, #0] -10037824: 3102 adds r1, #2 -10037826: aa03 add r2, sp, #12 -10037828: ab04 add r3, sp, #16 -1003782a: f007 f80d bl 1003e848 <__rtw_parse_wpa2_ie_veneer> -1003782e: e7e7 b.n 10037800 -10037830: 9b04 ldr r3, [sp, #16] -10037832: f8c4 33a0 str.w r3, [r4, #928] ; 0x3a0 -10037836: 9b03 ldr r3, [sp, #12] -10037838: f8c4 339c str.w r3, [r4, #924] ; 0x39c -1003783c: 9b05 ldr r3, [sp, #20] -1003783e: f8c4 33a4 str.w r3, [r4, #932] ; 0x3a4 -10037842: b007 add sp, #28 -10037844: bd30 pop {r4, r5, pc} - -10037846 : -10037846: b570 push {r4, r5, r6, lr} -10037848: f100 0598 add.w r5, r0, #152 ; 0x98 -1003784c: b086 sub sp, #24 -1003784e: 2300 movs r3, #0 -10037850: 4604 mov r4, r0 -10037852: 4628 mov r0, r5 -10037854: f8ad 300a strh.w r3, [sp, #10] -10037858: 9303 str r3, [sp, #12] -1003785a: 9304 str r3, [sp, #16] -1003785c: f7e5 fea8 bl 1001d5b0 -10037860: 2202 movs r2, #2 -10037862: 4601 mov r1, r0 -10037864: f10d 000a add.w r0, sp, #10 -10037868: f7df fdd2 bl 10017410 -1003786c: f8bd 300a ldrh.w r3, [sp, #10] -10037870: f003 0310 and.w r3, r3, #16 -10037874: b29b uxth r3, r3 -10037876: b113 cbz r3, 1003787e -10037878: 2601 movs r6, #1 -1003787a: 6526 str r6, [r4, #80] ; 0x50 -1003787c: e002 b.n 10037884 -1003787e: f884 3398 strb.w r3, [r4, #920] ; 0x398 -10037882: 461e mov r6, r3 -10037884: 2200 movs r2, #0 -10037886: ab03 add r3, sp, #12 -10037888: 9200 str r2, [sp, #0] -1003788a: 9301 str r3, [sp, #4] -1003788c: 4628 mov r0, r5 -1003788e: f8d4 1094 ldr.w r1, [r4, #148] ; 0x94 -10037892: ab04 add r3, sp, #16 -10037894: f006 fff0 bl 1003e878 <__rtw_get_sec_ie_veneer> -10037898: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 -1003789c: f104 05a4 add.w r5, r4, #164 ; 0xa4 -100378a0: 3b0c subs r3, #12 -100378a2: 4628 mov r0, r5 -100378a4: 2130 movs r1, #48 ; 0x30 -100378a6: aa04 add r2, sp, #16 -100378a8: f006 fffe bl 1003e8a8 <__rtw_get_ie_veneer> -100378ac: 9b04 ldr r3, [sp, #16] -100378ae: b903 cbnz r3, 100378b2 -100378b0: b108 cbz r0, 100378b6 -100378b2: 2303 movs r3, #3 -100378b4: e005 b.n 100378c2 -100378b6: 9b03 ldr r3, [sp, #12] -100378b8: b10b cbz r3, 100378be -100378ba: 2302 movs r3, #2 -100378bc: e001 b.n 100378c2 -100378be: b116 cbz r6, 100378c6 -100378c0: 2301 movs r3, #1 -100378c2: f884 3398 strb.w r3, [r4, #920] ; 0x398 -100378c6: 4620 mov r0, r4 -100378c8: f7ff ff80 bl 100377cc -100378cc: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 -100378d0: 4628 mov r0, r5 -100378d2: 212d movs r1, #45 ; 0x2d -100378d4: aa05 add r2, sp, #20 -100378d6: 3b0c subs r3, #12 -100378d8: f006 ffe6 bl 1003e8a8 <__rtw_get_ie_veneer> -100378dc: b130 cbz r0, 100378ec -100378de: 9b05 ldr r3, [sp, #20] -100378e0: b123 cbz r3, 100378ec -100378e2: 7883 ldrb r3, [r0, #2] -100378e4: 78c2 ldrb r2, [r0, #3] -100378e6: ea43 2302 orr.w r3, r3, r2, lsl #8 -100378ea: e000 b.n 100378ee -100378ec: 2300 movs r3, #0 -100378ee: f8a4 33a8 strh.w r3, [r4, #936] ; 0x3a8 -100378f2: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 -100378f6: 4628 mov r0, r5 -100378f8: 213d movs r1, #61 ; 0x3d -100378fa: aa05 add r2, sp, #20 -100378fc: 3b0c subs r3, #12 -100378fe: f006 ffd3 bl 1003e8a8 <__rtw_get_ie_veneer> -10037902: b118 cbz r0, 1003790c -10037904: 9b05 ldr r3, [sp, #20] -10037906: b10b cbz r3, 1003790c -10037908: 78c3 ldrb r3, [r0, #3] -1003790a: e000 b.n 1003790e -1003790c: 2300 movs r3, #0 -1003790e: f884 33aa strb.w r3, [r4, #938] ; 0x3aa -10037912: b006 add sp, #24 -10037914: bd70 pop {r4, r5, r6, pc} - -10037916 : -10037916: b570 push {r4, r5, r6, lr} -10037918: f500 539c add.w r3, r0, #4992 ; 0x1380 -1003791c: f893 2037 ldrb.w r2, [r3, #55] ; 0x37 -10037920: 2500 movs r5, #0 -10037922: f880 29b4 strb.w r2, [r0, #2484] ; 0x9b4 -10037926: f893 2038 ldrb.w r2, [r3, #56] ; 0x38 -1003792a: 2601 movs r6, #1 -1003792c: f880 29b5 strb.w r2, [r0, #2485] ; 0x9b5 -10037930: f880 29b6 strb.w r2, [r0, #2486] ; 0x9b6 -10037934: 221e movs r2, #30 -10037936: f8c0 2428 str.w r2, [r0, #1064] ; 0x428 -1003793a: f241 025c movw r2, #4188 ; 0x105c -1003793e: f8c0 64a0 str.w r6, [r0, #1184] ; 0x4a0 -10037942: f8c0 5458 str.w r5, [r0, #1112] ; 0x458 -10037946: 5485 strb r5, [r0, r2] -10037948: f893 1042 ldrb.w r1, [r3, #66] ; 0x42 -1003794c: f500 5283 add.w r2, r0, #4192 ; 0x1060 -10037950: 6011 str r1, [r2, #0] -10037952: f893 2043 ldrb.w r2, [r3, #67] ; 0x43 -10037956: f241 0364 movw r3, #4196 ; 0x1064 -1003795a: 50c2 str r2, [r0, r3] -1003795c: f241 036c movw r3, #4204 ; 0x106c -10037960: f8c0 5d08 str.w r5, [r0, #3336] ; 0xd08 -10037964: f8c0 5d0c str.w r5, [r0, #3340] ; 0xd0c -10037968: f8c0 5d10 str.w r5, [r0, #3344] ; 0xd10 -1003796c: f8c0 5d64 str.w r5, [r0, #3428] ; 0xd64 -10037970: f8c0 6d68 str.w r6, [r0, #3432] ; 0xd68 -10037974: 50c5 str r5, [r0, r3] -10037976: f241 0370 movw r3, #4208 ; 0x1070 -1003797a: 50c6 str r6, [r0, r3] -1003797c: 4604 mov r4, r0 -1003797e: f7fa fd5a bl 10032436 -10037982: f641 035b movw r3, #6235 ; 0x185b -10037986: 54e5 strb r5, [r4, r3] -10037988: 22ff movs r2, #255 ; 0xff -1003798a: f641 0378 movw r3, #6264 ; 0x1878 -1003798e: 54e2 strb r2, [r4, r3] -10037990: 4630 mov r0, r6 -10037992: bd70 pop {r4, r5, r6, pc} - -10037994 : -10037994: b538 push {r3, r4, r5, lr} -10037996: f641 0369 movw r3, #6249 ; 0x1869 -1003799a: 5cc3 ldrb r3, [r0, r3] -1003799c: 4604 mov r4, r0 -1003799e: b923 cbnz r3, 100379aa -100379a0: f500 50a2 add.w r0, r0, #5184 ; 0x1440 -100379a4: 3018 adds r0, #24 -100379a6: f7ff fa3e bl 10036e26 -100379aa: f504 6006 add.w r0, r4, #2144 ; 0x860 -100379ae: f7ff fa3a bl 10036e26 -100379b2: 6923 ldr r3, [r4, #16] -100379b4: 06da lsls r2, r3, #27 -100379b6: d526 bpl.n 10037a06 -100379b8: f241 3338 movw r3, #4920 ; 0x1338 -100379bc: 58e0 ldr r0, [r4, r3] -100379be: f500 703d add.w r0, r0, #756 ; 0x2f4 -100379c2: f7ff fa30 bl 10036e26 -100379c6: f241 333c movw r3, #4924 ; 0x133c -100379ca: 58e0 ldr r0, [r4, r3] -100379cc: f500 703d add.w r0, r0, #756 ; 0x2f4 -100379d0: f7ff fa29 bl 10036e26 -100379d4: f504 539a add.w r3, r4, #4928 ; 0x1340 -100379d8: 6818 ldr r0, [r3, #0] -100379da: f500 703d add.w r0, r0, #756 ; 0x2f4 -100379de: f7ff fa22 bl 10036e26 -100379e2: f504 50b5 add.w r0, r4, #5792 ; 0x16a0 -100379e6: 301c adds r0, #28 -100379e8: f7ff fa1d bl 10036e26 -100379ec: f504 60c4 add.w r0, r4, #1568 ; 0x620 -100379f0: f7ff fa19 bl 10036e26 -100379f4: f604 401c addw r0, r4, #3100 ; 0xc1c -100379f8: f7ff fa15 bl 10036e26 -100379fc: 4620 mov r0, r4 -100379fe: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -10037a02: f7fa bd39 b.w 10032478 -10037a06: 071b lsls r3, r3, #28 -10037a08: d5eb bpl.n 100379e2 -10037a0a: f241 3538 movw r5, #4920 ; 0x1338 -10037a0e: 5960 ldr r0, [r4, r5] -10037a10: f500 703d add.w r0, r0, #756 ; 0x2f4 -10037a14: f7ff fa07 bl 10036e26 -10037a18: 5960 ldr r0, [r4, r5] -10037a1a: f500 7041 add.w r0, r0, #772 ; 0x304 -10037a1e: e7de b.n 100379de - -10037a20 : -10037a20: b510 push {r4, lr} -10037a22: 4604 mov r4, r0 -10037a24: f7eb ff50 bl 100238c8 -10037a28: f504 60a2 add.w r0, r4, #1296 ; 0x510 -10037a2c: f7e6 fe5a bl 1001e6e4 -10037a30: f604 1008 addw r0, r4, #2312 ; 0x908 -10037a34: f7e4 fd85 bl 1001c542 -10037a38: f604 101c addw r0, r4, #2332 ; 0x91c -10037a3c: f7e4 fd80 bl 1001c540 -10037a40: f104 000c add.w r0, r4, #12 -10037a44: f7e5 fdd1 bl 1001d5ea -10037a48: f8d4 3c60 ldr.w r3, [r4, #3168] ; 0xc60 -10037a4c: b13b cbz r3, 10037a5e -10037a4e: 4620 mov r0, r4 -10037a50: f7f0 fc76 bl 10028340 -10037a54: 4601 mov r1, r0 -10037a56: b110 cbz r0, 10037a5e -10037a58: 4620 mov r0, r4 -10037a5a: f7f0 fb38 bl 100280ce -10037a5e: f604 1058 addw r0, r4, #2392 ; 0x958 -10037a62: f7f2 f86f bl 10029b44 <_rtw_free_xmit_priv> -10037a66: f504 6046 add.w r0, r4, #3168 ; 0xc60 -10037a6a: f7f0 faa7 bl 10027fbc <_rtw_free_sta_priv> -10037a6e: f504 6035 add.w r0, r4, #2896 ; 0xb50 -10037a72: f7ee fffc bl 10026a6e <_rtw_free_recv_priv> -10037a76: 4620 mov r0, r4 -10037a78: f7ee fd5e bl 10026538 -10037a7c: f604 5008 addw r0, r4, #3336 ; 0xd08 -10037a80: f7f0 f977 bl 10027d72 -10037a84: 4620 mov r0, r4 -10037a86: f7fa fce1 bl 1003244c -10037a8a: f641 035c movw r3, #6236 ; 0x185c -10037a8e: 58e2 ldr r2, [r4, r3] -10037a90: b10a cbz r2, 10037a96 -10037a92: 2100 movs r1, #0 -10037a94: 50d1 str r1, [r2, r3] -10037a96: 2001 movs r0, #1 -10037a98: bd10 pop {r4, pc} - -10037a9a : -10037a9a: b538 push {r3, r4, r5, lr} -10037a9c: 4604 mov r4, r0 -10037a9e: f7fa fcca bl 10032436 -10037aa2: 2100 movs r1, #0 -10037aa4: f641 035b movw r3, #6235 ; 0x185b -10037aa8: 54e1 strb r1, [r4, r3] -10037aaa: 231e movs r3, #30 -10037aac: f8c4 3428 str.w r3, [r4, #1064] ; 0x428 -10037ab0: f504 50a0 add.w r0, r4, #5120 ; 0x1400 -10037ab4: 2200 movs r2, #0 -10037ab6: f504 651c add.w r5, r4, #2496 ; 0x9c0 -10037aba: 2300 movs r3, #0 -10037abc: f880 1056 strb.w r1, [r0, #86] ; 0x56 -10037ac0: 6381 str r1, [r0, #56] ; 0x38 -10037ac2: 6701 str r1, [r0, #112] ; 0x70 -10037ac4: e9c5 2300 strd r2, r3, [r5] -10037ac8: f604 3598 addw r5, r4, #2968 ; 0xb98 -10037acc: e9c5 2300 strd r2, r3, [r5] -10037ad0: 6923 ldr r3, [r4, #16] -10037ad2: f884 1488 strb.w r1, [r4, #1160] ; 0x488 -10037ad6: f423 6308 bic.w r3, r3, #2176 ; 0x880 -10037ada: 6123 str r3, [r4, #16] -10037adc: f880 1068 strb.w r1, [r0, #104] ; 0x68 -10037ae0: f8c4 1648 str.w r1, [r4, #1608] ; 0x648 -10037ae4: f604 401c addw r0, r4, #3100 ; 0xc1c -10037ae8: f8d4 1c28 ldr.w r1, [r4, #3112] ; 0xc28 -10037aec: f7ff f994 bl 10036e18 -10037af0: 2001 movs r0, #1 -10037af2: bd38 pop {r3, r4, r5, pc} - -10037af4 : -10037af4: b538 push {r3, r4, r5, lr} -10037af6: 4604 mov r4, r0 -10037af8: f600 1008 addw r0, r0, #2312 ; 0x908 -10037afc: f7e4 fd19 bl 1001c532 -10037b00: b908 cbnz r0, 10037b06 -10037b02: 2500 movs r5, #0 -10037b04: e03d b.n 10037b82 -10037b06: f8c4 4918 str.w r4, [r4, #2328] ; 0x918 -10037b0a: f604 101c addw r0, r4, #2332 ; 0x91c -10037b0e: f7e4 fd15 bl 1001c53c -10037b12: 2800 cmp r0, #0 -10037b14: d0f5 beq.n 10037b02 -10037b16: 4620 mov r0, r4 -10037b18: f7f0 f8f2 bl 10027d00 -10037b1c: 2800 cmp r0, #0 -10037b1e: d0f0 beq.n 10037b02 -10037b20: 4620 mov r0, r4 -10037b22: f7e5 fd56 bl 1001d5d2 -10037b26: 2800 cmp r0, #0 -10037b28: d0eb beq.n 10037b02 -10037b2a: 4620 mov r0, r4 -10037b2c: f7eb feb2 bl 10023894 -10037b30: 2800 cmp r0, #0 -10037b32: d0e6 beq.n 10037b02 -10037b34: 4620 mov r0, r4 -10037b36: f7eb fce1 bl 100234fc -10037b3a: 2800 cmp r0, #0 -10037b3c: d0e1 beq.n 10037b02 -10037b3e: f604 1058 addw r0, r4, #2392 ; 0x958 -10037b42: 4621 mov r1, r4 -10037b44: f7f2 f870 bl 10029c28 <_rtw_init_xmit_priv> -10037b48: 2800 cmp r0, #0 -10037b4a: d0da beq.n 10037b02 -10037b4c: f504 6035 add.w r0, r4, #2896 ; 0xb50 -10037b50: 4621 mov r1, r4 -10037b52: f7ee fe45 bl 100267e0 <_rtw_init_recv_priv> -10037b56: 2800 cmp r0, #0 -10037b58: d0d3 beq.n 10037b02 -10037b5a: 4620 mov r0, r4 -10037b5c: f7f0 f973 bl 10027e46 <_rtw_init_sta_priv> -10037b60: 2800 cmp r0, #0 -10037b62: d0ce beq.n 10037b02 -10037b64: f8c4 4cc0 str.w r4, [r4, #3264] ; 0xcc0 -10037b68: 4620 mov r0, r4 -10037b6a: f7f0 fbd1 bl 10028310 -10037b6e: 4620 mov r0, r4 -10037b70: f7ee fc7a bl 10026468 -10037b74: 4620 mov r0, r4 -10037b76: f7ff fece bl 10037916 -10037b7a: 4605 mov r5, r0 -10037b7c: 4620 mov r0, r4 -10037b7e: f7fa fc70 bl 10032462 -10037b82: 4628 mov r0, r5 -10037b84: bd38 pop {r3, r4, r5, pc} - ... - -10037b88 : -10037b88: b537 push {r0, r1, r2, r4, r5, lr} -10037b8a: 4b26 ldr r3, [pc, #152] ; (10037c24 ) -10037b8c: 4604 mov r4, r0 -10037b8e: f500 50bf add.w r0, r0, #6112 ; 0x17e0 -10037b92: e88d 0018 stmia.w sp, {r3, r4} -10037b96: 4924 ldr r1, [pc, #144] ; (10037c28 ) -10037b98: f44f 62b8 mov.w r2, #1472 ; 0x5c0 -10037b9c: 2301 movs r3, #1 -10037b9e: 301c adds r0, #28 -10037ba0: f7df fe34 bl 1001780c -10037ba4: 4b21 ldr r3, [pc, #132] ; (10037c2c ) -10037ba6: 4605 mov r5, r0 -10037ba8: f504 50c0 add.w r0, r4, #6144 ; 0x1800 -10037bac: e88d 0018 stmia.w sp, {r3, r4} -10037bb0: 3014 adds r0, #20 -10037bb2: 491f ldr r1, [pc, #124] ; (10037c30 ) -10037bb4: f44f 7280 mov.w r2, #256 ; 0x100 -10037bb8: 2301 movs r3, #1 -10037bba: f7df fe27 bl 1001780c -10037bbe: 2801 cmp r0, #1 -10037bc0: d103 bne.n 10037bca -10037bc2: 1e6b subs r3, r5, #1 -10037bc4: 425d negs r5, r3 -10037bc6: 415d adcs r5, r3 -10037bc8: e000 b.n 10037bcc -10037bca: 2500 movs r5, #0 -10037bcc: 4b19 ldr r3, [pc, #100] ; (10037c34 ) -10037bce: f504 50be add.w r0, r4, #6080 ; 0x17c0 -10037bd2: e88d 0018 stmia.w sp, {r3, r4} -10037bd6: 4918 ldr r1, [pc, #96] ; (10037c38 ) -10037bd8: f44f 7280 mov.w r2, #256 ; 0x100 -10037bdc: 2302 movs r3, #2 -10037bde: 300c adds r0, #12 -10037be0: f7df fe14 bl 1001780c -10037be4: 4b15 ldr r3, [pc, #84] ; (10037c3c ) -10037be6: 2801 cmp r0, #1 -10037be8: f504 50bf add.w r0, r4, #6112 ; 0x17e0 -10037bec: e88d 0018 stmia.w sp, {r3, r4} -10037bf0: f100 0004 add.w r0, r0, #4 -10037bf4: 4912 ldr r1, [pc, #72] ; (10037c40 ) -10037bf6: f44f 7200 mov.w r2, #512 ; 0x200 -10037bfa: f04f 0302 mov.w r3, #2 -10037bfe: bf18 it ne -10037c00: 2500 movne r5, #0 -10037c02: f7df fe03 bl 1001780c -10037c06: 2801 cmp r0, #1 -10037c08: d105 bne.n 10037c16 -10037c0a: f504 50bf add.w r0, r4, #6112 ; 0x17e0 -10037c0e: 3010 adds r0, #16 -10037c10: f7df fc5a bl 100174c8 -10037c14: e000 b.n 10037c18 -10037c16: 2500 movs r5, #0 -10037c18: 4620 mov r0, r4 -10037c1a: f7fa fd0a bl 10032632 -10037c1e: 4628 mov r0, r5 -10037c20: b003 add sp, #12 -10037c22: bd30 pop {r4, r5, pc} -10037c24: 10027a71 .word 0x10027a71 -10037c28: 100423e9 .word 0x100423e9 -10037c2c: 1002a435 .word 0x1002a435 -10037c30: 100423fa .word 0x100423fa -10037c34: 1003bca9 .word 0x1003bca9 -10037c38: 1004240b .word 0x1004240b -10037c3c: 1001c67d .word 0x1001c67d -10037c40: 10042420 .word 0x10042420 - -10037c44 : -10037c44: b510 push {r4, lr} -10037c46: 4604 mov r4, r0 -10037c48: f500 50bf add.w r0, r0, #6112 ; 0x17e0 -10037c4c: 3004 adds r0, #4 -10037c4e: f7df fdeb bl 10017828 -10037c52: f504 50be add.w r0, r4, #6080 ; 0x17c0 -10037c56: 300c adds r0, #12 -10037c58: f7df fde6 bl 10017828 -10037c5c: f504 50bf add.w r0, r4, #6112 ; 0x17e0 -10037c60: 301c adds r0, #28 -10037c62: f7df fde1 bl 10017828 -10037c66: f504 50c0 add.w r0, r4, #6144 ; 0x1800 -10037c6a: 3014 adds r0, #20 -10037c6c: f7df fddc bl 10017828 -10037c70: 4620 mov r0, r4 -10037c72: e8bd 4010 ldmia.w sp!, {r4, lr} -10037c76: f7fa bce3 b.w 10032640 - -10037c7a : -10037c7a: b508 push {r3, lr} -10037c7c: 2200 movs r2, #0 -10037c7e: f8d0 3934 ldr.w r3, [r0, #2356] ; 0x934 -10037c82: 6880 ldr r0, [r0, #8] -10037c84: 4798 blx r3 -10037c86: bd08 pop {r3, pc} - -10037c88 : -10037c88: b508 push {r3, lr} -10037c8a: 2200 movs r2, #0 -10037c8c: f8d0 3938 ldr.w r3, [r0, #2360] ; 0x938 -10037c90: 6880 ldr r0, [r0, #8] -10037c92: 4798 blx r3 -10037c94: bd08 pop {r3, pc} - -10037c96 : -10037c96: b508 push {r3, lr} -10037c98: 2200 movs r2, #0 -10037c9a: f8d0 393c ldr.w r3, [r0, #2364] ; 0x93c -10037c9e: 6880 ldr r0, [r0, #8] -10037ca0: 4798 blx r3 -10037ca2: bd08 pop {r3, pc} - -10037ca4 : -10037ca4: b510 push {r4, lr} -10037ca6: 2300 movs r3, #0 -10037ca8: f8d0 4940 ldr.w r4, [r0, #2368] ; 0x940 -10037cac: 6880 ldr r0, [r0, #8] -10037cae: 47a0 blx r4 -10037cb0: bd10 pop {r4, pc} - -10037cb2 : -10037cb2: b510 push {r4, lr} -10037cb4: 2300 movs r3, #0 -10037cb6: f8d0 4944 ldr.w r4, [r0, #2372] ; 0x944 -10037cba: 6880 ldr r0, [r0, #8] -10037cbc: 47a0 blx r4 -10037cbe: bd10 pop {r4, pc} - -10037cc0 : -10037cc0: b510 push {r4, lr} -10037cc2: 2300 movs r3, #0 -10037cc4: f8d0 4948 ldr.w r4, [r0, #2376] ; 0x948 -10037cc8: 6880 ldr r0, [r0, #8] -10037cca: 47a0 blx r4 -10037ccc: bd10 pop {r4, pc} - -10037cce : -10037cce: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -10037cd2: f100 0534 add.w r5, r0, #52 ; 0x34 -10037cd6: 4604 mov r4, r0 -10037cd8: a901 add r1, sp, #4 -10037cda: f100 080c add.w r8, r0, #12 -10037cde: 4628 mov r0, r5 -10037ce0: f7df fc72 bl 100175c8 -10037ce4: f06f 0201 mvn.w r2, #1 -10037ce8: f8c4 2094 str.w r2, [r4, #148] ; 0x94 -10037cec: 6922 ldr r2, [r4, #16] -10037cee: 6ae3 ldr r3, [r4, #44] ; 0x2c -10037cf0: f042 0280 orr.w r2, r2, #128 ; 0x80 -10037cf4: 2601 movs r6, #1 -10037cf6: 6122 str r2, [r4, #16] -10037cf8: 61e3 str r3, [r4, #28] -10037cfa: 7566 strb r6, [r4, #21] -10037cfc: f104 002c add.w r0, r4, #44 ; 0x2c -10037d00: f7df fc3a bl 10017578 -10037d04: 4607 mov r7, r0 -10037d06: 42b7 cmp r7, r6 -10037d08: 4628 mov r0, r5 -10037d0a: a901 add r1, sp, #4 -10037d0c: d10f bne.n 10037d2e -10037d0e: f7df fc65 bl 100175dc -10037d12: 6923 ldr r3, [r4, #16] -10037d14: f023 0380 bic.w r3, r3, #128 ; 0x80 -10037d18: 6123 str r3, [r4, #16] -10037d1a: f894 3488 ldrb.w r3, [r4, #1160] ; 0x488 -10037d1e: b10b cbz r3, 10037d24 -10037d20: 2001 movs r0, #1 -10037d22: e022 b.n 10037d6a -10037d24: 4620 mov r0, r4 -10037d26: f104 014c add.w r1, r4, #76 ; 0x4c -10037d2a: 463a mov r2, r7 -10037d2c: e01b b.n 10037d66 -10037d2e: f7df fc55 bl 100175dc -10037d32: 4640 mov r0, r8 -10037d34: f7e6 f828 bl 1001dd88 -10037d38: 2801 cmp r0, #1 -10037d3a: d108 bne.n 10037d4e -10037d3c: 2300 movs r3, #0 -10037d3e: 7563 strb r3, [r4, #21] -10037d40: f204 402c addw r0, r4, #1068 ; 0x42c -10037d44: f641 1164 movw r1, #6500 ; 0x1964 -10037d48: f7ff f866 bl 10036e18 -10037d4c: e7e8 b.n 10037d20 -10037d4e: 6923 ldr r3, [r4, #16] -10037d50: f023 0380 bic.w r3, r3, #128 ; 0x80 -10037d54: 6123 str r3, [r4, #16] -10037d56: f894 3488 ldrb.w r3, [r4, #1160] ; 0x488 -10037d5a: 2b00 cmp r3, #0 -10037d5c: d1e0 bne.n 10037d20 -10037d5e: 4620 mov r0, r4 -10037d60: f104 014c add.w r1, r4, #76 ; 0x4c -10037d64: 4632 mov r2, r6 -10037d66: f7e5 f8f6 bl 1001cf56 -10037d6a: b002 add sp, #8 -10037d6c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -10037d70 : -10037d70: b5f0 push {r4, r5, r6, r7, lr} -10037d72: 2600 movs r6, #0 -10037d74: b091 sub sp, #68 ; 0x44 -10037d76: 460c mov r4, r1 -10037d78: 4605 mov r5, r0 -10037d7a: 4631 mov r1, r6 -10037d7c: a806 add r0, sp, #24 -10037d7e: 2228 movs r2, #40 ; 0x28 -10037d80: 9605 str r6, [sp, #20] -10037d82: f7df fb55 bl 10017430 -10037d86: 7823 ldrb r3, [r4, #0] -10037d88: b953 cbnz r3, 10037da0 -10037d8a: 7863 ldrb r3, [r4, #1] -10037d8c: b9cb cbnz r3, 10037dc2 -10037d8e: 78a3 ldrb r3, [r4, #2] -10037d90: b9bb cbnz r3, 10037dc2 -10037d92: 78e3 ldrb r3, [r4, #3] -10037d94: b9ab cbnz r3, 10037dc2 -10037d96: 7923 ldrb r3, [r4, #4] -10037d98: b99b cbnz r3, 10037dc2 -10037d9a: 7963 ldrb r3, [r4, #5] -10037d9c: b98b cbnz r3, 10037dc2 -10037d9e: e087 b.n 10037eb0 -10037da0: 2bff cmp r3, #255 ; 0xff -10037da2: d10e bne.n 10037dc2 -10037da4: 7863 ldrb r3, [r4, #1] -10037da6: 2bff cmp r3, #255 ; 0xff -10037da8: d10b bne.n 10037dc2 -10037daa: 78a3 ldrb r3, [r4, #2] -10037dac: 2bff cmp r3, #255 ; 0xff -10037dae: d108 bne.n 10037dc2 -10037db0: 78e3 ldrb r3, [r4, #3] -10037db2: 2bff cmp r3, #255 ; 0xff -10037db4: d105 bne.n 10037dc2 -10037db6: 7923 ldrb r3, [r4, #4] -10037db8: 2bff cmp r3, #255 ; 0xff -10037dba: d102 bne.n 10037dc2 -10037dbc: 7963 ldrb r3, [r4, #5] -10037dbe: 2bff cmp r3, #255 ; 0xff -10037dc0: d078 beq.n 10037eb4 -10037dc2: 4b4e ldr r3, [pc, #312] ; (10037efc ) -10037dc4: 681a ldr r2, [r3, #0] -10037dc6: 461f mov r7, r3 -10037dc8: b182 cbz r2, 10037dec -10037dca: 484d ldr r0, [pc, #308] ; (10037f00 ) -10037dcc: f7e2 fec8 bl 1001ab60 -10037dd0: 78e0 ldrb r0, [r4, #3] -10037dd2: 7821 ldrb r1, [r4, #0] -10037dd4: 7862 ldrb r2, [r4, #1] -10037dd6: 78a3 ldrb r3, [r4, #2] -10037dd8: 9000 str r0, [sp, #0] -10037dda: 7920 ldrb r0, [r4, #4] -10037ddc: 9001 str r0, [sp, #4] -10037dde: 7960 ldrb r0, [r4, #5] -10037de0: 9002 str r0, [sp, #8] -10037de2: 4848 ldr r0, [pc, #288] ; (10037f04 ) -10037de4: f8d0 0120 ldr.w r0, [r0, #288] ; 0x120 -10037de8: f7e2 feba bl 1001ab60 -10037dec: f105 060c add.w r6, r5, #12 -10037df0: a904 add r1, sp, #16 -10037df2: 4630 mov r0, r6 -10037df4: f7df fbe8 bl 100175c8 -10037df8: 692b ldr r3, [r5, #16] -10037dfa: 0519 lsls r1, r3, #20 -10037dfc: d40f bmi.n 10037e1e -10037dfe: 061a lsls r2, r3, #24 -10037e00: d45a bmi.n 10037eb8 -10037e02: f013 0f41 tst.w r3, #65 ; 0x41 -10037e06: d00a beq.n 10037e1e -10037e08: f105 009c add.w r0, r5, #156 ; 0x9c -10037e0c: 4621 mov r1, r4 -10037e0e: 2206 movs r2, #6 -10037e10: f7df fb06 bl 10017420 -10037e14: 2801 cmp r0, #1 -10037e16: d151 bne.n 10037ebc -10037e18: 692b ldr r3, [r5, #16] -10037e1a: 071a lsls r2, r3, #28 -10037e1c: d54c bpl.n 10037eb8 -10037e1e: 79a3 ldrb r3, [r4, #6] -10037e20: 2b23 cmp r3, #35 ; 0x23 -10037e22: d12d bne.n 10037e80 -10037e24: 79e3 ldrb r3, [r4, #7] -10037e26: 2b40 cmp r3, #64 ; 0x40 -10037e28: d12a bne.n 10037e80 -10037e2a: a805 add r0, sp, #20 -10037e2c: f104 0108 add.w r1, r4, #8 -10037e30: 2204 movs r2, #4 -10037e32: f7df faed bl 10017410 -10037e36: 9b05 ldr r3, [sp, #20] -10037e38: b313 cbz r3, 10037e80 -10037e3a: 683b ldr r3, [r7, #0] -10037e3c: b14b cbz r3, 10037e52 -10037e3e: 4830 ldr r0, [pc, #192] ; (10037f00 ) -10037e40: f7e2 fe8e bl 1001ab60 -10037e44: 4b2f ldr r3, [pc, #188] ; (10037f04 ) -10037e46: 9905 ldr r1, [sp, #20] -10037e48: f8d3 0124 ldr.w r0, [r3, #292] ; 0x124 -10037e4c: 3101 adds r1, #1 -10037e4e: f7e2 fe87 bl 1001ab60 -10037e52: 9905 ldr r1, [sp, #20] -10037e54: a807 add r0, sp, #28 -10037e56: f811 2b01 ldrb.w r2, [r1], #1 -10037e5a: 9206 str r2, [sp, #24] -10037e5c: f7df fad8 bl 10017410 -10037e60: f895 38f9 ldrb.w r3, [r5, #2297] ; 0x8f9 -10037e64: b163 cbz r3, 10037e80 -10037e66: 9b05 ldr r3, [sp, #20] -10037e68: f605 0073 addw r0, r5, #2163 ; 0x873 -10037e6c: 781a ldrb r2, [r3, #0] -10037e6e: 1c59 adds r1, r3, #1 -10037e70: f7df face bl 10017410 -10037e74: 9b05 ldr r3, [sp, #20] -10037e76: 2200 movs r2, #0 -10037e78: 781b ldrb r3, [r3, #0] -10037e7a: 442b add r3, r5 -10037e7c: f883 2873 strb.w r2, [r3, #2163] ; 0x873 -10037e80: f105 004c add.w r0, r5, #76 ; 0x4c -10037e84: a906 add r1, sp, #24 -10037e86: 2228 movs r2, #40 ; 0x28 -10037e88: f7df fac2 bl 10017410 -10037e8c: 4621 mov r1, r4 -10037e8e: f105 0074 add.w r0, r5, #116 ; 0x74 -10037e92: 2206 movs r2, #6 -10037e94: f7df fabc bl 10017410 -10037e98: 692b ldr r3, [r5, #16] -10037e9a: 2401 movs r4, #1 -10037e9c: 0519 lsls r1, r3, #20 -10037e9e: f885 4438 strb.w r4, [r5, #1080] ; 0x438 -10037ea2: d522 bpl.n 10037eea -10037ea4: 756c strb r4, [r5, #21] -10037ea6: 4630 mov r0, r6 -10037ea8: a904 add r1, sp, #16 -10037eaa: f7df fb97 bl 100175dc -10037eae: e021 b.n 10037ef4 -10037eb0: 461c mov r4, r3 -10037eb2: e01f b.n 10037ef4 -10037eb4: 4634 mov r4, r6 -10037eb6: e01d b.n 10037ef4 -10037eb8: 2401 movs r4, #1 -10037eba: e7f4 b.n 10037ea6 -10037ebc: 4628 mov r0, r5 -10037ebe: f7e4 fdf1 bl 1001caa4 -10037ec2: 692b ldr r3, [r5, #16] -10037ec4: 07db lsls r3, r3, #31 -10037ec6: d40c bmi.n 10037ee2 -10037ec8: 4628 mov r0, r5 -10037eca: 2101 movs r1, #1 -10037ecc: f7e5 fd44 bl 1001d958 -10037ed0: 692b ldr r3, [r5, #16] -10037ed2: 0658 lsls r0, r3, #25 -10037ed4: d5a3 bpl.n 10037e1e -10037ed6: f023 0340 bic.w r3, r3, #64 ; 0x40 -10037eda: f043 0320 orr.w r3, r3, #32 -10037ede: 612b str r3, [r5, #16] -10037ee0: e79d b.n 10037e1e -10037ee2: 4628 mov r0, r5 -10037ee4: f7e5 fda5 bl 1001da32 -10037ee8: e7ee b.n 10037ec8 -10037eea: 4628 mov r0, r5 -10037eec: f7ff feef bl 10037cce -10037ef0: 4604 mov r4, r0 -10037ef2: e7d8 b.n 10037ea6 -10037ef4: 4620 mov r0, r4 -10037ef6: b011 add sp, #68 ; 0x44 -10037ef8: bdf0 pop {r4, r5, r6, r7, pc} -10037efa: bf00 nop -10037efc: 10044ec0 .word 0x10044ec0 -10037f00: 10042939 .word 0x10042939 -10037f04: 10043a4c .word 0x10043a4c - -10037f08 : -10037f08: 4b40 ldr r3, [pc, #256] ; (1003800c ) -10037f0a: b573 push {r0, r1, r4, r5, r6, lr} -10037f0c: 681b ldr r3, [r3, #0] -10037f0e: 4604 mov r4, r0 -10037f10: 460d mov r5, r1 -10037f12: b143 cbz r3, 10037f26 -10037f14: 483e ldr r0, [pc, #248] ; (10038010 ) -10037f16: f7e2 fe23 bl 1001ab60 -10037f1a: 4b3e ldr r3, [pc, #248] ; (10038014 ) -10037f1c: 1d29 adds r1, r5, #4 -10037f1e: f8d3 0124 ldr.w r0, [r3, #292] ; 0x124 -10037f22: f7e2 fe1d bl 1001ab60 -10037f26: f241 73c5 movw r3, #6085 ; 0x17c5 -10037f2a: 5ce3 ldrb r3, [r4, r3] -10037f2c: b333 cbz r3, 10037f7c -10037f2e: f104 060c add.w r6, r4, #12 -10037f32: a901 add r1, sp, #4 -10037f34: 4630 mov r0, r6 -10037f36: f7df fb47 bl 100175c8 -10037f3a: 6923 ldr r3, [r4, #16] -10037f3c: 0519 lsls r1, r3, #20 -10037f3e: d409 bmi.n 10037f54 -10037f40: 061a lsls r2, r3, #24 -10037f42: d415 bmi.n 10037f70 -10037f44: f003 0309 and.w r3, r3, #9 -10037f48: 2b09 cmp r3, #9 -10037f4a: d019 beq.n 10037f80 -10037f4c: 6923 ldr r3, [r4, #16] -10037f4e: f013 0f41 tst.w r3, #65 ; 0x41 -10037f52: d120 bne.n 10037f96 -10037f54: 4629 mov r1, r5 -10037f56: f104 004c add.w r0, r4, #76 ; 0x4c -10037f5a: 2228 movs r2, #40 ; 0x28 -10037f5c: f7df fa58 bl 10017410 -10037f60: 2300 movs r3, #0 -10037f62: f884 3438 strb.w r3, [r4, #1080] ; 0x438 -10037f66: 6923 ldr r3, [r4, #16] -10037f68: 0519 lsls r1, r3, #20 -10037f6a: d546 bpl.n 10037ffa -10037f6c: 2301 movs r3, #1 -10037f6e: 7563 strb r3, [r4, #21] -10037f70: 2401 movs r4, #1 -10037f72: 4630 mov r0, r6 -10037f74: a901 add r1, sp, #4 -10037f76: f7df fb31 bl 100175dc -10037f7a: e043 b.n 10038004 -10037f7c: 461c mov r4, r3 -10037f7e: e041 b.n 10038004 -10037f80: 4620 mov r0, r4 -10037f82: f7e4 fd8f bl 1001caa4 -10037f86: 4620 mov r0, r4 -10037f88: f7e5 fd53 bl 1001da32 -10037f8c: 4620 mov r0, r4 -10037f8e: 2101 movs r1, #1 -10037f90: f7e5 fce2 bl 1001d958 -10037f94: e7da b.n 10037f4c -10037f96: 6ce2 ldr r2, [r4, #76] ; 0x4c -10037f98: 682b ldr r3, [r5, #0] -10037f9a: 429a cmp r2, r3 -10037f9c: d116 bne.n 10037fcc -10037f9e: 1d29 adds r1, r5, #4 -10037fa0: f104 0050 add.w r0, r4, #80 ; 0x50 -10037fa4: f7df fa3c bl 10017420 -10037fa8: 2801 cmp r0, #1 -10037faa: 4601 mov r1, r0 -10037fac: d10e bne.n 10037fcc -10037fae: 6923 ldr r3, [r4, #16] -10037fb0: 071a lsls r2, r3, #28 -10037fb2: d504 bpl.n 10037fbe -10037fb4: 4620 mov r0, r4 -10037fb6: 460a mov r2, r1 -10037fb8: f7e4 ff98 bl 1001ceec -10037fbc: e7ca b.n 10037f54 -10037fbe: 4620 mov r0, r4 -10037fc0: f104 017c add.w r1, r4, #124 ; 0x7c -10037fc4: f7e5 fb15 bl 1001d5f2 -10037fc8: 2800 cmp r0, #0 -10037fca: d1d1 bne.n 10037f70 -10037fcc: 4620 mov r0, r4 -10037fce: f7e4 fd69 bl 1001caa4 -10037fd2: 6923 ldr r3, [r4, #16] -10037fd4: 07db lsls r3, r3, #31 -10037fd6: d40c bmi.n 10037ff2 -10037fd8: 4620 mov r0, r4 -10037fda: 2101 movs r1, #1 -10037fdc: f7e5 fcbc bl 1001d958 -10037fe0: 6923 ldr r3, [r4, #16] -10037fe2: 0658 lsls r0, r3, #25 -10037fe4: d5b6 bpl.n 10037f54 -10037fe6: f023 0340 bic.w r3, r3, #64 ; 0x40 -10037fea: f043 0320 orr.w r3, r3, #32 -10037fee: 6123 str r3, [r4, #16] -10037ff0: e7b0 b.n 10037f54 -10037ff2: 4620 mov r0, r4 -10037ff4: f7e5 fd1d bl 1001da32 -10037ff8: e7ee b.n 10037fd8 -10037ffa: 4620 mov r0, r4 -10037ffc: f7ff fe67 bl 10037cce -10038000: 4604 mov r4, r0 -10038002: e7b6 b.n 10037f72 -10038004: 4620 mov r0, r4 -10038006: b002 add sp, #8 -10038008: bd70 pop {r4, r5, r6, pc} -1003800a: bf00 nop -1003800c: 10044ec0 .word 0x10044ec0 -10038010: 10042939 .word 0x10042939 -10038014: 10043a4c .word 0x10043a4c - -10038018 : -10038018: f8d0 30f8 ldr.w r3, [r0, #248] ; 0xf8 -1003801c: b573 push {r0, r1, r4, r5, r6, lr} -1003801e: 428b cmp r3, r1 -10038020: 4604 mov r4, r0 -10038022: 460d mov r5, r1 -10038024: d046 beq.n 100380b4 -10038026: f100 060c add.w r6, r0, #12 -1003802a: 4630 mov r0, r6 -1003802c: a901 add r1, sp, #4 -1003802e: f7df facb bl 100175c8 -10038032: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 -10038036: 2b04 cmp r3, #4 -10038038: d106 bne.n 10038048 -1003803a: f04f 33ff mov.w r3, #4294967295 -1003803e: f8c4 3094 str.w r3, [r4, #148] ; 0x94 -10038042: 4620 mov r0, r4 -10038044: f7e4 f811 bl 1001c06a -10038048: 6923 ldr r3, [r4, #16] -1003804a: 07da lsls r2, r3, #31 -1003804c: d528 bpl.n 100380a0 -1003804e: 4620 mov r0, r4 -10038050: f7e4 fd28 bl 1001caa4 -10038054: 6923 ldr r3, [r4, #16] -10038056: f013 0f41 tst.w r3, #65 ; 0x41 -1003805a: d003 beq.n 10038064 -1003805c: 4620 mov r0, r4 -1003805e: 2101 movs r1, #1 -10038060: f7e5 fc7a bl 1001d958 -10038064: 6923 ldr r3, [r4, #16] -10038066: 07db lsls r3, r3, #31 -10038068: d51f bpl.n 100380aa -1003806a: 4620 mov r0, r4 -1003806c: f7e5 fce1 bl 1001da32 -10038070: 2d01 cmp r5, #1 -10038072: f8c4 50f8 str.w r5, [r4, #248] ; 0xf8 -10038076: d007 beq.n 10038088 -10038078: d303 bcc.n 10038082 -1003807a: 2d04 cmp r5, #4 -1003807c: d006 beq.n 1003808c -1003807e: 2300 movs r3, #0 -10038080: e000 b.n 10038084 -10038082: 2320 movs r3, #32 -10038084: 6123 str r3, [r4, #16] -10038086: e006 b.n 10038096 -10038088: 2308 movs r3, #8 -1003808a: e7fb b.n 10038084 -1003808c: 2310 movs r3, #16 -1003808e: 6123 str r3, [r4, #16] -10038090: 4620 mov r0, r4 -10038092: f7e3 ffbf bl 1001c014 -10038096: 4630 mov r0, r6 -10038098: a901 add r1, sp, #4 -1003809a: f7df fa9f bl 100175dc -1003809e: e009 b.n 100380b4 -100380a0: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 -100380a4: 2b00 cmp r3, #0 -100380a6: d0d2 beq.n 1003804e -100380a8: e7d4 b.n 10038054 -100380aa: f8d4 30f8 ldr.w r3, [r4, #248] ; 0xf8 -100380ae: 2b01 cmp r3, #1 -100380b0: d9db bls.n 1003806a -100380b2: e7dd b.n 10038070 -100380b4: 2001 movs r0, #1 -100380b6: b002 add sp, #8 -100380b8: bd70 pop {r4, r5, r6, pc} - -100380ba : -100380ba: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -100380bc: 460e mov r6, r1 -100380be: 4617 mov r7, r2 -100380c0: 4604 mov r4, r0 -100380c2: b1f8 cbz r0, 10038104 -100380c4: f241 73c5 movw r3, #6085 ; 0x17c5 -100380c8: 5cc3 ldrb r3, [r0, r3] -100380ca: b12b cbz r3, 100380d8 -100380cc: 6903 ldr r3, [r0, #16] -100380ce: f413 6f08 tst.w r3, #2176 ; 0x880 -100380d2: d003 beq.n 100380dc -100380d4: 2401 movs r4, #1 -100380d6: e015 b.n 10038104 -100380d8: 461c mov r4, r3 -100380da: e013 b.n 10038104 -100380dc: f890 3488 ldrb.w r3, [r0, #1160] ; 0x488 -100380e0: 2b01 cmp r3, #1 -100380e2: d0f9 beq.n 100380d8 -100380e4: f104 050c add.w r5, r4, #12 -100380e8: 4628 mov r0, r5 -100380ea: a901 add r1, sp, #4 -100380ec: f7df fa6c bl 100175c8 -100380f0: 4620 mov r0, r4 -100380f2: 4631 mov r1, r6 -100380f4: 463a mov r2, r7 -100380f6: f7e4 ff2e bl 1001cf56 -100380fa: a901 add r1, sp, #4 -100380fc: 4604 mov r4, r0 -100380fe: 4628 mov r0, r5 -10038100: f7df fa6c bl 100175dc -10038104: 4620 mov r0, r4 -10038106: b003 add sp, #12 -10038108: bdf0 pop {r4, r5, r6, r7, pc} - -1003810a : -1003810a: b508 push {r3, lr} -1003810c: 460b mov r3, r1 -1003810e: 2b03 cmp r3, #3 -10038110: f241 026c movw r2, #4204 ; 0x106c -10038114: 5083 str r3, [r0, r2] -10038116: bf84 itt hi -10038118: 2302 movhi r3, #2 -1003811a: f8c0 3d08 strhi.w r3, [r0, #3336] ; 0xd08 -1003811e: f600 5108 addw r1, r0, #3336 ; 0xd08 -10038122: f7e5 ff2f bl 1001df84 -10038126: 1e43 subs r3, r0, #1 -10038128: 4258 negs r0, r3 -1003812a: 4158 adcs r0, r3 -1003812c: bd08 pop {r3, pc} - -1003812e : -1003812e: b5f8 push {r3, r4, r5, r6, r7, lr} -10038130: 684d ldr r5, [r1, #4] -10038132: 4604 mov r4, r0 -10038134: f025 4540 bic.w r5, r5, #3221225472 ; 0xc0000000 -10038138: 2d04 cmp r5, #4 -1003813a: 460e mov r6, r1 -1003813c: dc25 bgt.n 1003818a -1003813e: 688a ldr r2, [r1, #8] -10038140: 2a05 cmp r2, #5 -10038142: d003 beq.n 1003814c -10038144: 2a0d cmp r2, #13 -10038146: d103 bne.n 10038150 -10038148: 2305 movs r3, #5 -1003814a: e002 b.n 10038152 -1003814c: 2301 movs r3, #1 -1003814e: e000 b.n 10038152 -10038150: 2300 movs r3, #0 -10038152: f604 5708 addw r7, r4, #3336 ; 0xd08 -10038156: eb07 1005 add.w r0, r7, r5, lsl #4 -1003815a: f8c4 3d0c str.w r3, [r4, #3340] ; 0xd0c -1003815e: f106 010c add.w r1, r6, #12 -10038162: 300c adds r0, #12 -10038164: f7df f954 bl 10017410 -10038168: 68b3 ldr r3, [r6, #8] -1003816a: eb04 0285 add.w r2, r4, r5, lsl #2 -1003816e: f8c2 3d54 str.w r3, [r2, #3412] ; 0xd54 -10038172: 4620 mov r0, r4 -10038174: f8c4 5d10 str.w r5, [r4, #3344] ; 0xd10 -10038178: 4639 mov r1, r7 -1003817a: 462a mov r2, r5 -1003817c: 2301 movs r3, #1 -1003817e: f7e5 ff29 bl 1001dfd4 -10038182: 3000 adds r0, #0 -10038184: bf18 it ne -10038186: 2001 movne r0, #1 -10038188: bdf8 pop {r3, r4, r5, r6, r7, pc} -1003818a: 2000 movs r0, #0 -1003818c: bdf8 pop {r3, r4, r5, r6, r7, pc} - -1003818e : -1003818e: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10038192: 6807 ldr r7, [r0, #0] -10038194: 4604 mov r4, r0 -10038196: 2600 movs r6, #0 -10038198: 2e80 cmp r6, #128 ; 0x80 -1003819a: fa5f f886 uxtb.w r8, r6 -1003819e: f04f 0500 mov.w r5, #0 -100381a2: d013 beq.n 100381cc -100381a4: b2ea uxtb r2, r5 -100381a6: 2a03 cmp r2, #3 -100381a8: bf0c ite eq -100381aa: 2380 moveq r3, #128 ; 0x80 -100381ac: 2300 movne r3, #0 -100381ae: 4638 mov r0, r7 -100381b0: 4641 mov r1, r8 -100381b2: f003 f922 bl 1003b3fa -100381b6: 462a mov r2, r5 -100381b8: 4638 mov r0, r7 -100381ba: 4631 mov r1, r6 -100381bc: 2300 movs r3, #0 -100381be: 3501 adds r5, #1 -100381c0: f003 f914 bl 1003b3ec -100381c4: 2d10 cmp r5, #16 -100381c6: d1ed bne.n 100381a4 -100381c8: 3601 adds r6, #1 -100381ca: e7e5 b.n 10038198 -100381cc: 2313 movs r3, #19 -100381ce: 2200 movs r2, #0 -100381d0: f884 317e strb.w r3, [r4, #382] ; 0x17e -100381d4: 4629 mov r1, r5 -100381d6: 2301 movs r3, #1 -100381d8: 3501 adds r5, #1 -100381da: f884 317b strb.w r3, [r4, #379] ; 0x17b -100381de: f884 31a3 strb.w r3, [r4, #419] ; 0x1a3 -100381e2: f8a4 2188 strh.w r2, [r4, #392] ; 0x188 -100381e6: f8a4 218a strh.w r2, [r4, #394] ; 0x18a -100381ea: f8a4 218c strh.w r2, [r4, #396] ; 0x18c -100381ee: f8a4 218e strh.w r2, [r4, #398] ; 0x18e -100381f2: f8a4 2190 strh.w r2, [r4, #400] ; 0x190 -100381f6: f8c4 2194 str.w r2, [r4, #404] ; 0x194 -100381fa: f8c4 21b0 str.w r2, [r4, #432] ; 0x1b0 -100381fe: f8a4 2198 strh.w r2, [r4, #408] ; 0x198 -10038202: f884 21b4 strb.w r2, [r4, #436] ; 0x1b4 -10038206: f884 217f strb.w r2, [r4, #383] ; 0x17f -1003820a: f884 216c strb.w r2, [r4, #364] ; 0x16c -1003820e: f884 21a2 strb.w r2, [r4, #418] ; 0x1a2 -10038212: f884 21a1 strb.w r2, [r4, #417] ; 0x1a1 -10038216: f884 21a4 strb.w r2, [r4, #420] ; 0x1a4 -1003821a: 4638 mov r0, r7 -1003821c: 4613 mov r3, r2 -1003821e: b2ed uxtb r5, r5 -10038220: f003 f8eb bl 1003b3fa -10038224: 2d80 cmp r5, #128 ; 0x80 -10038226: d1d1 bne.n 100381cc -10038228: 23ff movs r3, #255 ; 0xff -1003822a: f884 317d strb.w r3, [r4, #381] ; 0x17d -1003822e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - ... - -10038234 : -10038234: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -10038238: 4614 mov r4, r2 -1003823a: f8d0 9000 ldr.w r9, [r0] -1003823e: f89d 2030 ldrb.w r2, [sp, #48] ; 0x30 -10038242: 4688 mov r8, r1 -10038244: 9201 str r2, [sp, #4] -10038246: 4605 mov r5, r0 -10038248: 2201 movs r2, #1 -1003824a: 4648 mov r0, r9 -1003824c: f891 103b ldrb.w r1, [r1, #59] ; 0x3b -10038250: 461e mov r6, r3 -10038252: f003 f8cd bl 1003b3f0 -10038256: f898 3012 ldrb.w r3, [r8, #18] -1003825a: f004 027f and.w r2, r4, #127 ; 0x7f -1003825e: 429a cmp r2, r3 -10038260: d904 bls.n 1003826c -10038262: f024 0b7f bic.w fp, r4, #127 ; 0x7f -10038266: ea4b 0b03 orr.w fp, fp, r3 -1003826a: e004 b.n 10038276 -1003826c: f898 b013 ldrb.w fp, [r8, #19] -10038270: 455a cmp r2, fp -10038272: bf28 it cs -10038274: 46a3 movcs fp, r4 -10038276: 4c35 ldr r4, [pc, #212] ; (1003834c ) -10038278: b98e cbnz r6, 1003829e -1003827a: f000 0a7f and.w sl, r0, #127 ; 0x7f -1003827e: 2100 movs r1, #0 -10038280: f44f 7000 mov.w r0, #512 ; 0x200 -10038284: e9d4 2302 ldrd r2, r3, [r4, #8] -10038288: 4010 ands r0, r2 -1003828a: 4019 ands r1, r3 -1003828c: ea50 0301 orrs.w r3, r0, r1 -10038290: d031 beq.n 100382f6 -10038292: 4b2f ldr r3, [pc, #188] ; (10038350 ) -10038294: 681b ldr r3, [r3, #0] -10038296: b373 cbz r3, 100382f6 -10038298: 4b2e ldr r3, [pc, #184] ; (10038354 ) -1003829a: 6998 ldr r0, [r3, #24] -1003829c: e028 b.n 100382f0 -1003829e: 2201 movs r2, #1 -100382a0: 4648 mov r0, r9 -100382a2: f898 103b ldrb.w r1, [r8, #59] ; 0x3b -100382a6: f003 f8a3 bl 1003b3f0 -100382aa: 4a2b ldr r2, [pc, #172] ; (10038358 ) -100382ac: f00b 037f and.w r3, fp, #127 ; 0x7f -100382b0: f812 a003 ldrb.w sl, [r2, r3] -100382b4: f000 0007 and.w r0, r0, #7 -100382b8: f509 53c4 add.w r3, r9, #6272 ; 0x1880 -100382bc: ea40 0aca orr.w sl, r0, sl, lsl #3 -100382c0: 781b ldrb r3, [r3, #0] -100382c2: f06a 0a7f orn sl, sl, #127 ; 0x7f -100382c6: fa5f fa8a uxtb.w sl, sl -100382ca: b933 cbnz r3, 100382da -100382cc: 4628 mov r0, r5 -100382ce: f44f 6186 mov.w r1, #1072 ; 0x430 -100382d2: f04f 3201 mov.w r2, #16843009 ; 0x1010101 -100382d6: f001 ff31 bl 1003a13c -100382da: e9d4 6702 ldrd r6, r7, [r4, #8] -100382de: 2500 movs r5, #0 -100382e0: f44f 7400 mov.w r4, #512 ; 0x200 -100382e4: 4034 ands r4, r6 -100382e6: 403d ands r5, r7 -100382e8: ea54 0205 orrs.w r2, r4, r5 -100382ec: d003 beq.n 100382f6 -100382ee: 481b ldr r0, [pc, #108] ; (1003835c ) -100382f0: 4659 mov r1, fp -100382f2: f7e2 fc35 bl 1001ab60 -100382f6: 4648 mov r0, r9 -100382f8: f898 103b ldrb.w r1, [r8, #59] ; 0x3b -100382fc: 465b mov r3, fp -100382fe: 2200 movs r2, #0 -10038300: f003 f87b bl 1003b3fa -10038304: 4653 mov r3, sl -10038306: 4648 mov r0, r9 -10038308: f898 103b ldrb.w r1, [r8, #59] ; 0x3b -1003830c: 2201 movs r2, #1 -1003830e: f003 f874 bl 1003b3fa -10038312: f898 403b ldrb.w r4, [r8, #59] ; 0x3b -10038316: 4648 mov r0, r9 -10038318: 4621 mov r1, r4 -1003831a: 2205 movs r2, #5 -1003831c: f003 f868 bl 1003b3f0 -10038320: 9a01 ldr r2, [sp, #4] -10038322: f000 05fc and.w r5, r0, #252 ; 0xfc -10038326: f002 0303 and.w r3, r2, #3 -1003832a: 4648 mov r0, r9 -1003832c: 4621 mov r1, r4 -1003832e: 432b orrs r3, r5 -10038330: 2205 movs r2, #5 -10038332: f003 f862 bl 1003b3fa -10038336: 4641 mov r1, r8 -10038338: f891 203b ldrb.w r2, [r1, #59] ; 0x3b -1003833c: 4648 mov r0, r9 -1003833e: 2301 movs r3, #1 -10038340: b003 add sp, #12 -10038342: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10038346: f003 b85a b.w 1003b3fe -1003834a: bf00 nop -1003834c: 10000720 .word 0x10000720 -10038350: 10044ec0 .word 0x10044ec0 -10038354: 10043a4c .word 0x10043a4c -10038358: 10044f8f .word 0x10044f8f -1003835c: 10043d83 .word 0x10043d83 - -10038360 : -10038360: b570 push {r4, r5, r6, lr} -10038362: 3201 adds r2, #1 -10038364: 6806 ldr r6, [r0, #0] -10038366: 460d mov r5, r1 -10038368: b2d4 uxtb r4, r2 -1003836a: 7cab ldrb r3, [r5, #18] -1003836c: 42a3 cmp r3, r4 -1003836e: d30d bcc.n 1003838c -10038370: 4630 mov r0, r6 -10038372: f895 103b ldrb.w r1, [r5, #59] ; 0x3b -10038376: 08e2 lsrs r2, r4, #3 -10038378: f003 f833 bl 1003b3e2 -1003837c: f004 0307 and.w r3, r4, #7 -10038380: 40d8 lsrs r0, r3 -10038382: 07c3 lsls r3, r0, #31 -10038384: d403 bmi.n 1003838e -10038386: 3401 adds r4, #1 -10038388: b2e4 uxtb r4, r4 -1003838a: e7ee b.n 1003836a -1003838c: 2400 movs r4, #0 -1003838e: 4620 mov r0, r4 -10038390: bd70 pop {r4, r5, r6, pc} - -10038392 : -10038392: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10038396: 3a01 subs r2, #1 -10038398: 2500 movs r5, #0 -1003839a: f8d0 8000 ldr.w r8, [r0] -1003839e: 460c mov r4, r1 -100383a0: 4699 mov r9, r3 -100383a2: b2d6 uxtb r6, r2 -100383a4: 462f mov r7, r5 -100383a6: 7ce3 ldrb r3, [r4, #19] -100383a8: b272 sxtb r2, r6 -100383aa: 429a cmp r2, r3 -100383ac: db16 blt.n 100383dc -100383ae: 10d2 asrs r2, r2, #3 -100383b0: 4640 mov r0, r8 -100383b2: f894 103b ldrb.w r1, [r4, #59] ; 0x3b -100383b6: f003 f814 bl 1003b3e2 -100383ba: b2f2 uxtb r2, r6 -100383bc: f002 0307 and.w r3, r2, #7 -100383c0: 40d8 lsrs r0, r3 -100383c2: 07c3 lsls r3, r0, #31 -100383c4: d507 bpl.n 100383d6 -100383c6: 3701 adds r7, #1 -100383c8: b2ff uxtb r7, r7 -100383ca: 454f cmp r7, r9 -100383cc: d007 beq.n 100383de -100383ce: 7ce3 ldrb r3, [r4, #19] -100383d0: 4293 cmp r3, r2 -100383d2: d204 bcs.n 100383de -100383d4: 4615 mov r5, r2 -100383d6: 3a01 subs r2, #1 -100383d8: b2d6 uxtb r6, r2 -100383da: e7e4 b.n 100383a6 -100383dc: 462a mov r2, r5 -100383de: 4610 mov r0, r2 -100383e0: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - -100383e4 : -100383e4: 7b4a ldrb r2, [r1, #13] -100383e6: b513 push {r0, r1, r4, lr} -100383e8: 2a2d cmp r2, #45 ; 0x2d -100383ea: f891 4036 ldrb.w r4, [r1, #54] ; 0x36 -100383ee: d902 bls.n 100383f6 -100383f0: f891 2040 ldrb.w r2, [r1, #64] ; 0x40 -100383f4: e005 b.n 10038402 -100383f6: 2a19 cmp r2, #25 -100383f8: bf8c ite hi -100383fa: f891 2041 ldrbhi.w r2, [r1, #65] ; 0x41 -100383fe: f891 2042 ldrbls.w r2, [r1, #66] ; 0x42 -10038402: 9400 str r4, [sp, #0] -10038404: 2300 movs r3, #0 -10038406: f7ff ff15 bl 10038234 -1003840a: b002 add sp, #8 -1003840c: bd10 pop {r4, pc} - -1003840e : -1003840e: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -10038412: 6807 ldr r7, [r0, #0] -10038414: 460c mov r4, r1 -10038416: 2200 movs r2, #0 -10038418: f891 103b ldrb.w r1, [r1, #59] ; 0x3b -1003841c: 4606 mov r6, r0 -1003841e: 4638 mov r0, r7 -10038420: f002 ffe6 bl 1003b3f0 -10038424: f894 103b ldrb.w r1, [r4, #59] ; 0x3b -10038428: f000 057f and.w r5, r0, #127 ; 0x7f -1003842c: f020 087f bic.w r8, r0, #127 ; 0x7f -10038430: 7460 strb r0, [r4, #17] -10038432: 2205 movs r2, #5 -10038434: 4638 mov r0, r7 -10038436: f002 ffdb bl 1003b3f0 -1003843a: 7ca3 ldrb r3, [r4, #18] -1003843c: f000 0703 and.w r7, r0, #3 -10038440: 429d cmp r5, r3 -10038442: fa5f f888 uxtb.w r8, r8 -10038446: f884 703a strb.w r7, [r4, #58] ; 0x3a -1003844a: d108 bne.n 1003845e -1003844c: 7be2 ldrb r2, [r4, #15] -1003844e: 2a01 cmp r2, #1 -10038450: d124 bne.n 1003849c -10038452: f1b8 0f00 cmp.w r8, #0 -10038456: d121 bne.n 1003849c -10038458: f043 0380 orr.w r3, r3, #128 ; 0x80 -1003845c: e010 b.n 10038480 -1003845e: f1a5 0211 sub.w r2, r5, #17 -10038462: 2a02 cmp r2, #2 -10038464: d802 bhi.n 1003846c -10038466: 7be2 ldrb r2, [r4, #15] -10038468: 2a01 cmp r2, #1 -1003846a: d011 beq.n 10038490 -1003846c: 429d cmp r5, r3 -1003846e: d206 bcs.n 1003847e -10038470: 4630 mov r0, r6 -10038472: 4621 mov r1, r4 -10038474: 462a mov r2, r5 -10038476: f7ff ff73 bl 10038360 -1003847a: 4603 mov r3, r0 -1003847c: e000 b.n 10038480 -1003847e: 7463 strb r3, [r4, #17] -10038480: 461a mov r2, r3 -10038482: 9700 str r7, [sp, #0] -10038484: 4630 mov r0, r6 -10038486: 4621 mov r1, r4 -10038488: 2301 movs r3, #1 -1003848a: f7ff fed3 bl 10038234 -1003848e: e005 b.n 1003849c -10038490: f1b8 0f00 cmp.w r8, #0 -10038494: d1ec bne.n 10038470 -10038496: f045 0380 orr.w r3, r5, #128 ; 0x80 -1003849a: e7f1 b.n 10038480 -1003849c: b002 add sp, #8 -1003849e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -100384a2 : -100384a2: b573 push {r0, r1, r4, r5, r6, lr} -100384a4: 2205 movs r2, #5 -100384a6: 460c mov r4, r1 -100384a8: 4605 mov r5, r0 -100384aa: f891 103b ldrb.w r1, [r1, #59] ; 0x3b -100384ae: 6800 ldr r0, [r0, #0] -100384b0: f002 ff9e bl 1003b3f0 -100384b4: 7c63 ldrb r3, [r4, #17] -100384b6: 7ca2 ldrb r2, [r4, #18] -100384b8: f003 067f and.w r6, r3, #127 ; 0x7f -100384bc: f000 0003 and.w r0, r0, #3 -100384c0: f023 037f bic.w r3, r3, #127 ; 0x7f -100384c4: 9000 str r0, [sp, #0] -100384c6: 4296 cmp r6, r2 -100384c8: bf94 ite ls -100384ca: ea43 0206 orrls.w r2, r3, r6 -100384ce: 431a orrhi r2, r3 -100384d0: 4628 mov r0, r5 -100384d2: 4621 mov r1, r4 -100384d4: 2300 movs r3, #0 -100384d6: f7ff fead bl 10038234 -100384da: b002 add sp, #8 -100384dc: bd70 pop {r4, r5, r6, pc} - ... - -100384e0 : -100384e0: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -100384e4: 6806 ldr r6, [r0, #0] -100384e6: f891 703b ldrb.w r7, [r1, #59] ; 0x3b -100384ea: 2201 movs r2, #1 -100384ec: 4605 mov r5, r0 -100384ee: 460c mov r4, r1 -100384f0: 4630 mov r0, r6 -100384f2: 4639 mov r1, r7 -100384f4: f002 ff7c bl 1003b3f0 -100384f8: 0602 lsls r2, r0, #24 -100384fa: d53e bpl.n 1003857a -100384fc: 4630 mov r0, r6 -100384fe: 4639 mov r1, r7 -10038500: 2202 movs r2, #2 -10038502: f002 ff75 bl 1003b3f0 -10038506: 0603 lsls r3, r0, #24 -10038508: d537 bpl.n 1003857a -1003850a: f010 0f40 tst.w r0, #64 ; 0x40 -1003850e: f506 58c4 add.w r8, r6, #6272 ; 0x1880 -10038512: d01d beq.n 10038550 -10038514: f898 3000 ldrb.w r3, [r8] -10038518: b92b cbnz r3, 10038526 -1003851a: 4628 mov r0, r5 -1003851c: f44f 6186 mov.w r1, #1072 ; 0x430 -10038520: 4a17 ldr r2, [pc, #92] ; (10038580 ) -10038522: f001 fe0b bl 1003a13c -10038526: 4639 mov r1, r7 -10038528: 4630 mov r0, r6 -1003852a: 2200 movs r2, #0 -1003852c: f002 ff60 bl 1003b3f0 -10038530: 4639 mov r1, r7 -10038532: 4680 mov r8, r0 -10038534: 2205 movs r2, #5 -10038536: 4630 mov r0, r6 -10038538: f002 ff5a bl 1003b3f0 -1003853c: f000 0003 and.w r0, r0, #3 -10038540: 9000 str r0, [sp, #0] -10038542: 4621 mov r1, r4 -10038544: 4628 mov r0, r5 -10038546: 4642 mov r2, r8 -10038548: 2300 movs r3, #0 -1003854a: f7ff fe73 bl 10038234 -1003854e: e014 b.n 1003857a -10038550: f894 303d ldrb.w r3, [r4, #61] ; 0x3d -10038554: 4628 mov r0, r5 -10038556: 3301 adds r3, #1 -10038558: f884 303d strb.w r3, [r4, #61] ; 0x3d -1003855c: 4621 mov r1, r4 -1003855e: f7ff ffa0 bl 100384a2 -10038562: f898 3000 ldrb.w r3, [r8] -10038566: b92b cbnz r3, 10038574 -10038568: 4628 mov r0, r5 -1003856a: f44f 6186 mov.w r1, #1072 ; 0x430 -1003856e: 4a04 ldr r2, [pc, #16] ; (10038580 ) -10038570: f001 fde4 bl 1003a13c -10038574: 2300 movs r3, #0 -10038576: f884 303d strb.w r3, [r4, #61] ; 0x3d -1003857a: b002 add sp, #8 -1003857c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10038580: 01010000 .word 0x01010000 - -10038584 : -10038584: e92d 4fe3 stmdb sp!, {r0, r1, r5, r6, r7, r8, r9, sl, fp, lr} -10038588: 460d mov r5, r1 -1003858a: 4693 mov fp, r2 -1003858c: 4680 mov r8, r0 -1003858e: 2200 movs r2, #0 -10038590: 6800 ldr r0, [r0, #0] -10038592: f891 103b ldrb.w r1, [r1, #59] ; 0x3b -10038596: f002 ff2b bl 1003b3f0 -1003859a: 7caa ldrb r2, [r5, #18] -1003859c: f000 067f and.w r6, r0, #127 ; 0x7f -100385a0: f895 a036 ldrb.w sl, [r5, #54] ; 0x36 -100385a4: 4296 cmp r6, r2 -100385a6: 746e strb r6, [r5, #17] -100385a8: f885 a03a strb.w sl, [r5, #58] ; 0x3a -100385ac: bf94 ite ls -100385ae: 4602 movls r2, r0 -100385b0: 4616 movhi r6, r2 -100385b2: 465f mov r7, fp -100385b4: f04f 0900 mov.w r9, #0 -100385b8: fa5f f389 uxtb.w r3, r9 -100385bc: 455b cmp r3, fp -100385be: d20b bcs.n 100385d8 -100385c0: 0613 lsls r3, r2, #24 -100385c2: d503 bpl.n 100385cc -100385c4: 3f01 subs r7, #1 -100385c6: f017 07ff ands.w r7, r7, #255 ; 0xff -100385ca: d004 beq.n 100385d6 -100385cc: f1a6 0312 sub.w r3, r6, #18 -100385d0: 2b01 cmp r3, #1 -100385d2: d81b bhi.n 1003860c -100385d4: e00a b.n 100385ec -100385d6: 4632 mov r2, r6 -100385d8: f8cd a000 str.w sl, [sp] -100385dc: 4640 mov r0, r8 -100385de: 4629 mov r1, r5 -100385e0: 2300 movs r3, #0 -100385e2: f7ff fe27 bl 10038234 -100385e6: b002 add sp, #8 -100385e8: e8bd 8fe0 ldmia.w sp!, {r5, r6, r7, r8, r9, sl, fp, pc} -100385ec: 4632 mov r2, r6 -100385ee: 4640 mov r0, r8 -100385f0: 4629 mov r1, r5 -100385f2: 2301 movs r3, #1 -100385f4: f7ff fecd bl 10038392 -100385f8: 3f01 subs r7, #1 -100385fa: f060 007f orn r0, r0, #127 ; 0x7f -100385fe: f017 07ff ands.w r7, r7, #255 ; 0xff -10038602: b2c2 uxtb r2, r0 -10038604: f109 0901 add.w r9, r9, #1 -10038608: d1d6 bne.n 100385b8 -1003860a: e7e5 b.n 100385d8 -1003860c: 7cea ldrb r2, [r5, #19] -1003860e: 4296 cmp r6, r2 -10038610: d9e2 bls.n 100385d8 -10038612: 4632 mov r2, r6 -10038614: 4640 mov r0, r8 -10038616: 4629 mov r1, r5 -10038618: 463b mov r3, r7 -1003861a: f7ff feba bl 10038392 -1003861e: 4602 mov r2, r0 -10038620: e7da b.n 100385d8 - ... - -10038624 : -10038624: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -10038628: 4605 mov r5, r0 -1003862a: f895 30b7 ldrb.w r3, [r5, #183] ; 0xb7 -1003862e: 460c mov r4, r1 -10038630: 6800 ldr r0, [r0, #0] -10038632: 2b00 cmp r3, #0 -10038634: d065 beq.n 10038702 -10038636: f8d1 8028 ldr.w r8, [r1, #40] ; 0x28 -1003863a: f1b8 0f00 cmp.w r8, #0 -1003863e: d060 beq.n 10038702 -10038640: 8fcb ldrh r3, [r1, #62] ; 0x3e -10038642: f8b1 902c ldrh.w r9, [r1, #44] ; 0x2c -10038646: 3301 adds r3, #1 -10038648: 87cb strh r3, [r1, #62] ; 0x3e -1003864a: 7c8e ldrb r6, [r1, #18] -1003864c: 2200 movs r2, #0 -1003864e: f891 103b ldrb.w r1, [r1, #59] ; 0x3b -10038652: f002 fecd bl 1003b3f0 -10038656: 6aa3 ldr r3, [r4, #40] ; 0x28 -10038658: 2164 movs r1, #100 ; 0x64 -1003865a: 4359 muls r1, r3 -1003865c: 6c63 ldr r3, [r4, #68] ; 0x44 -1003865e: f8b4 c022 ldrh.w ip, [r4, #34] ; 0x22 -10038662: fbb1 f3f3 udiv r3, r1, r3 -10038666: f1c3 0164 rsb r1, r3, #100 ; 0x64 -1003866a: f894 3048 ldrb.w r3, [r4, #72] ; 0x48 -1003866e: f3c1 01c4 ubfx r1, r1, #3, #5 -10038672: ebc3 03c3 rsb r3, r3, r3, lsl #3 -10038676: eb01 01e3 add.w r1, r1, r3, asr #3 -1003867a: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 -1003867e: b2c9 uxtb r1, r1 -10038680: 2b04 cmp r3, #4 -10038682: f884 1048 strb.w r1, [r4, #72] ; 0x48 -10038686: 8ca7 ldrh r7, [r4, #36] ; 0x24 -10038688: d83b bhi.n 10038702 -1003868a: f000 027f and.w r2, r0, #127 ; 0x7f -1003868e: 42b2 cmp r2, r6 -10038690: d903 bls.n 1003869a -10038692: f000 0080 and.w r0, r0, #128 ; 0x80 -10038696: 4330 orrs r0, r6 -10038698: 4632 mov r2, r6 -1003869a: 4b1b ldr r3, [pc, #108] ; (10038708 ) -1003869c: 5c1b ldrb r3, [r3, r0] -1003869e: 454b cmp r3, r9 -100386a0: d206 bcs.n 100386b0 -100386a2: 4628 mov r0, r5 -100386a4: 4621 mov r1, r4 -100386a6: 2201 movs r2, #1 -100386a8: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -100386ac: f7ff bf6a b.w 10038584 -100386b0: fa1f f388 uxth.w r3, r8 -100386b4: 2b0e cmp r3, #14 -100386b6: d80e bhi.n 100386d6 -100386b8: 085a lsrs r2, r3, #1 -100386ba: 4467 add r7, ip -100386bc: 4297 cmp r7, r2 -100386be: dcf0 bgt.n 100386a2 -100386c0: 8ba1 ldrh r1, [r4, #28] -100386c2: eb02 0393 add.w r3, r2, r3, lsr #2 -100386c6: 4299 cmp r1, r3 -100386c8: dd1b ble.n 10038702 -100386ca: 4628 mov r0, r5 -100386cc: 4621 mov r1, r4 -100386ce: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -100386d2: f7ff be9c b.w 1003840e -100386d6: f894 003b ldrb.w r0, [r4, #59] ; 0x3b -100386da: b950 cbnz r0, 100386f2 -100386dc: 085e lsrs r6, r3, #1 -100386de: 42b7 cmp r7, r6 -100386e0: d201 bcs.n 100386e6 -100386e2: 2001 movs r0, #1 -100386e4: e003 b.n 100386ee -100386e6: eb06 03d3 add.w r3, r6, r3, lsr #3 -100386ea: 429f cmp r7, r3 -100386ec: dd01 ble.n 100386f2 -100386ee: 4b07 ldr r3, [pc, #28] ; (1003870c ) -100386f0: 7018 strb r0, [r3, #0] -100386f2: 4b07 ldr r3, [pc, #28] ; (10038710 ) -100386f4: 5c9b ldrb r3, [r3, r2] -100386f6: 428b cmp r3, r1 -100386f8: d8e7 bhi.n 100386ca -100386fa: 4b06 ldr r3, [pc, #24] ; (10038714 ) -100386fc: 5c9b ldrb r3, [r3, r2] -100386fe: 428b cmp r3, r1 -10038700: d3cf bcc.n 100386a2 -10038702: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -10038706: bf00 nop -10038708: 10044fa3 .word 0x10044fa3 -1003870c: 1004dfd4 .word 0x1004dfd4 -10038710: 10044fb7 .word 0x10044fb7 -10038714: 10044fcb .word 0x10044fcb - -10038718 : -10038718: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1003871c: 780e ldrb r6, [r1, #0] -1003871e: 4a80 ldr r2, [pc, #512] ; (10038920 ) -10038720: ebc6 03c6 rsb r3, r6, r6, lsl #3 -10038724: f8d0 9000 ldr.w r9, [r0] -10038728: b085 sub sp, #20 -1003872a: 4682 mov sl, r0 -1003872c: 4688 mov r8, r1 -1003872e: eb02 0b03 add.w fp, r2, r3 -10038732: 2400 movs r4, #0 -10038734: 4648 mov r0, r9 -10038736: f898 103b ldrb.w r1, [r8, #59] ; 0x3b -1003873a: 4622 mov r2, r4 -1003873c: f002 fe51 bl 1003b3e2 -10038740: f898 3035 ldrb.w r3, [r8, #53] ; 0x35 -10038744: f81b 7004 ldrb.w r7, [fp, r4] -10038748: 2b02 cmp r3, #2 -1003874a: ea07 0700 and.w r7, r7, r0 -1003874e: d104 bne.n 1003875a -10038750: f014 0fff tst.w r4, #255 ; 0xff -10038754: bf08 it eq -10038756: f007 07f0 andeq.w r7, r7, #240 ; 0xf0 -1003875a: 4d72 ldr r5, [pc, #456] ; (10038924 ) -1003875c: 2100 movs r1, #0 -1003875e: f44f 7000 mov.w r0, #512 ; 0x200 -10038762: e9d5 2302 ldrd r2, r3, [r5, #8] -10038766: 4002 ands r2, r0 -10038768: 400b ands r3, r1 -1003876a: ea52 0103 orrs.w r1, r2, r3 -1003876e: d012 beq.n 10038796 -10038770: 4b6d ldr r3, [pc, #436] ; (10038928 ) -10038772: 681b ldr r3, [r3, #0] -10038774: b17b cbz r3, 10038796 -10038776: 4b6d ldr r3, [pc, #436] ; (1003892c ) -10038778: f898 103b ldrb.w r1, [r8, #59] ; 0x3b -1003877c: 6a1b ldr r3, [r3, #32] -1003877e: 4622 mov r2, r4 -10038780: 4648 mov r0, r9 -10038782: 9303 str r3, [sp, #12] -10038784: f002 fe2d bl 1003b3e2 -10038788: 9b03 ldr r3, [sp, #12] -1003878a: 4601 mov r1, r0 -1003878c: 4622 mov r2, r4 -1003878e: 4618 mov r0, r3 -10038790: 463b mov r3, r7 -10038792: f7e2 f9e5 bl 1001ab60 -10038796: 4622 mov r2, r4 -10038798: 4648 mov r0, r9 -1003879a: f898 103b ldrb.w r1, [r8, #59] ; 0x3b -1003879e: 463b mov r3, r7 -100387a0: 3401 adds r4, #1 -100387a2: f002 fe23 bl 1003b3ec -100387a6: 2c07 cmp r4, #7 -100387a8: d1c4 bne.n 10038734 -100387aa: 2e08 cmp r6, #8 -100387ac: d80f bhi.n 100387ce -100387ae: e8df f006 tbb [pc, r6] -100387b2: 1005 .short 0x1005 -100387b4: 10051005 .word 0x10051005 -100387b8: 1818 .short 0x1818 -100387ba: 20 .byte 0x20 -100387bb: 00 .byte 0x00 -100387bc: 231b movs r3, #27 -100387be: f888 3040 strb.w r3, [r8, #64] ; 0x40 -100387c2: 2317 movs r3, #23 -100387c4: f888 3041 strb.w r3, [r8, #65] ; 0x41 -100387c8: 2314 movs r3, #20 -100387ca: f888 3042 strb.w r3, [r8, #66] ; 0x42 -100387ce: 2406 movs r4, #6 -100387d0: e01e b.n 10038810 -100387d2: 2313 movs r3, #19 -100387d4: f888 3040 strb.w r3, [r8, #64] ; 0x40 -100387d8: 230f movs r3, #15 -100387da: f888 3041 strb.w r3, [r8, #65] ; 0x41 -100387de: 230c movs r3, #12 -100387e0: e7f3 b.n 100387ca -100387e2: 230b movs r3, #11 -100387e4: f888 3040 strb.w r3, [r8, #64] ; 0x40 -100387e8: 2307 movs r3, #7 -100387ea: f888 3041 strb.w r3, [r8, #65] ; 0x41 -100387ee: 2304 movs r3, #4 -100387f0: e7eb b.n 100387ca -100387f2: 2303 movs r3, #3 -100387f4: f888 3040 strb.w r3, [r8, #64] ; 0x40 -100387f8: 2302 movs r3, #2 -100387fa: f888 3041 strb.w r3, [r8, #65] ; 0x41 -100387fe: 2300 movs r3, #0 -10038800: e7e3 b.n 100387ca -10038802: f002 fdee bl 1003b3e2 -10038806: f010 000f ands.w r0, r0, #15 -1003880a: d10b bne.n 10038824 -1003880c: 3c01 subs r4, #1 -1003880e: b2e4 uxtb r4, r4 -10038810: 2c06 cmp r4, #6 -10038812: 4648 mov r0, r9 -10038814: 4622 mov r2, r4 -10038816: f898 103b ldrb.w r1, [r8, #59] ; 0x3b -1003881a: d0f2 beq.n 10038802 -1003881c: f002 fde1 bl 1003b3e2 -10038820: b2c0 uxtb r0, r0 -10038822: b178 cbz r0, 10038844 -10038824: f04f 0c07 mov.w ip, #7 -10038828: fa20 f30c lsr.w r3, r0, ip -1003882c: 07d9 lsls r1, r3, #31 -1003882e: d504 bpl.n 1003883a -10038830: eb0c 0cc4 add.w ip, ip, r4, lsl #3 -10038834: fa5f f78c uxtb.w r7, ip -10038838: e007 b.n 1003884a -1003883a: f10c 3cff add.w ip, ip, #4294967295 -1003883e: fa5f fc8c uxtb.w ip, ip -10038842: e7f1 b.n 10038828 -10038844: 2c00 cmp r4, #0 -10038846: d1e1 bne.n 1003880c -10038848: 4627 mov r7, r4 -1003884a: 2400 movs r4, #0 -1003884c: b2e6 uxtb r6, r4 -1003884e: 2e06 cmp r6, #6 -10038850: 4648 mov r0, r9 -10038852: f898 103b ldrb.w r1, [r8, #59] ; 0x3b -10038856: d105 bne.n 10038864 -10038858: 4632 mov r2, r6 -1003885a: f002 fdc2 bl 1003b3e2 -1003885e: f000 000f and.w r0, r0, #15 -10038862: e003 b.n 1003886c -10038864: 4622 mov r2, r4 -10038866: f002 fdbc bl 1003b3e2 -1003886a: b2c0 uxtb r0, r0 -1003886c: b160 cbz r0, 10038888 -1003886e: 2100 movs r1, #0 -10038870: fa20 f201 lsr.w r2, r0, r1 -10038874: 07d2 lsls r2, r2, #31 -10038876: b2cb uxtb r3, r1 -10038878: d503 bpl.n 10038882 -1003887a: eb03 03c6 add.w r3, r3, r6, lsl #3 -1003887e: b2db uxtb r3, r3 -10038880: e006 b.n 10038890 -10038882: 3101 adds r1, #1 -10038884: 2908 cmp r1, #8 -10038886: d1f3 bne.n 10038870 -10038888: 3401 adds r4, #1 -1003888a: 2c07 cmp r4, #7 -1003888c: d1de bne.n 1003884c -1003888e: 2300 movs r3, #0 -10038890: f888 3013 strb.w r3, [r8, #19] -10038894: f898 103b ldrb.w r1, [r8, #59] ; 0x3b -10038898: 2200 movs r2, #0 -1003889a: f888 7012 strb.w r7, [r8, #18] -1003889e: 4648 mov r0, r9 -100388a0: 9303 str r3, [sp, #12] -100388a2: f002 fda5 bl 1003b3f0 -100388a6: f898 103b ldrb.w r1, [r8, #59] ; 0x3b -100388aa: f000 0b7f and.w fp, r0, #127 ; 0x7f -100388ae: 2200 movs r2, #0 -100388b0: 4648 mov r0, r9 -100388b2: f002 fd9d bl 1003b3f0 -100388b6: 45bb cmp fp, r7 -100388b8: f020 007f bic.w r0, r0, #127 ; 0x7f -100388bc: b2c0 uxtb r0, r0 -100388be: 9b03 ldr r3, [sp, #12] -100388c0: d904 bls.n 100388cc -100388c2: ea40 0b07 orr.w fp, r0, r7 -100388c6: fa5f fb8b uxtb.w fp, fp -100388ca: e003 b.n 100388d4 -100388cc: 459b cmp fp, r3 -100388ce: bf38 it cc -100388d0: ea40 0b03 orrcc.w fp, r0, r3 -100388d4: e9d5 0102 ldrd r0, r1, [r5, #8] -100388d8: f44f 7400 mov.w r4, #512 ; 0x200 -100388dc: 2500 movs r5, #0 -100388de: 4004 ands r4, r0 -100388e0: 400d ands r5, r1 -100388e2: ea54 0105 orrs.w r1, r4, r5 -100388e6: d008 beq.n 100388fa -100388e8: 4a0f ldr r2, [pc, #60] ; (10038928 ) -100388ea: 6812 ldr r2, [r2, #0] -100388ec: b12a cbz r2, 100388fa -100388ee: 4a0f ldr r2, [pc, #60] ; (1003892c ) -100388f0: 4659 mov r1, fp -100388f2: 6a50 ldr r0, [r2, #36] ; 0x24 -100388f4: 463a mov r2, r7 -100388f6: f7e2 f933 bl 1001ab60 -100388fa: f898 3036 ldrb.w r3, [r8, #54] ; 0x36 -100388fe: 4650 mov r0, sl -10038900: 9300 str r3, [sp, #0] -10038902: 4641 mov r1, r8 -10038904: 465a mov r2, fp -10038906: 2300 movs r3, #0 -10038908: f7ff fc94 bl 10038234 -1003890c: f898 103b ldrb.w r1, [r8, #59] ; 0x3b -10038910: 4648 mov r0, r9 -10038912: 2203 movs r2, #3 -10038914: 2300 movs r3, #0 -10038916: b005 add sp, #20 -10038918: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1003891c: f002 bd6d b.w 1003b3fa -10038920: 10044f50 .word 0x10044f50 -10038924: 10000720 .word 0x10000720 -10038928: 10044ec0 .word 0x10044ec0 -1003892c: 10043a4c .word 0x10043a4c - -10038930 : -10038930: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10038934: f891 9000 ldrb.w r9, [r1] -10038938: b085 sub sp, #20 -1003893a: f009 097f and.w r9, r9, #127 ; 0x7f -1003893e: f1b9 0f06 cmp.w r9, #6 -10038942: 4682 mov sl, r0 -10038944: 460e mov r6, r1 -10038946: 6805 ldr r5, [r0, #0] -10038948: 784a ldrb r2, [r1, #1] -1003894a: f891 b002 ldrb.w fp, [r1, #2] -1003894e: d84d bhi.n 100389ec -10038950: 2358 movs r3, #88 ; 0x58 -10038952: fb03 0309 mla r3, r3, r9, r0 -10038956: ea4f 11db mov.w r1, fp, lsr #7 -1003895a: f503 78b6 add.w r8, r3, #364 ; 0x16c -1003895e: f888 1038 strb.w r1, [r8, #56] ; 0x38 -10038962: f3cb 04c0 ubfx r4, fp, #3, #1 -10038966: f3cb 1180 ubfx r1, fp, #6, #1 -1003896a: f503 73b4 add.w r3, r3, #360 ; 0x168 -1003896e: f888 903b strb.w r9, [r8, #59] ; 0x3b -10038972: f888 1037 strb.w r1, [r8, #55] ; 0x37 -10038976: 2c00 cmp r4, #0 -10038978: d138 bne.n 100389ec -1003897a: f00b 0b03 and.w fp, fp, #3 -1003897e: f002 0c1f and.w ip, r2, #31 -10038982: 09d7 lsrs r7, r2, #7 -10038984: f883 c004 strb.w ip, [r3, #4] -10038988: f888 b035 strb.w fp, [r8, #53] ; 0x35 -1003898c: f888 b036 strb.w fp, [r8, #54] ; 0x36 -10038990: f888 700f strb.w r7, [r8, #15] -10038994: 1933 adds r3, r6, r4 -10038996: 4622 mov r2, r4 -10038998: 78db ldrb r3, [r3, #3] -1003899a: 4628 mov r0, r5 -1003899c: 4649 mov r1, r9 -1003899e: 3401 adds r4, #1 -100389a0: f8cd c00c str.w ip, [sp, #12] -100389a4: f002 fd22 bl 1003b3ec -100389a8: 2c04 cmp r4, #4 -100389aa: f8dd c00c ldr.w ip, [sp, #12] -100389ae: d1f1 bne.n 10038994 -100389b0: 4b10 ldr r3, [pc, #64] ; (100389f4 ) -100389b2: f44f 7400 mov.w r4, #512 ; 0x200 -100389b6: 2500 movs r5, #0 -100389b8: e9d3 2302 ldrd r2, r3, [r3, #8] -100389bc: 4014 ands r4, r2 -100389be: 401d ands r5, r3 -100389c0: ea54 0305 orrs.w r3, r4, r5 -100389c4: d00b beq.n 100389de -100389c6: 4b0c ldr r3, [pc, #48] ; (100389f8 ) -100389c8: 681b ldr r3, [r3, #0] -100389ca: b143 cbz r3, 100389de -100389cc: 4b0b ldr r3, [pc, #44] ; (100389fc ) -100389ce: f8cd b000 str.w fp, [sp] -100389d2: 6a98 ldr r0, [r3, #40] ; 0x28 -100389d4: 4649 mov r1, r9 -100389d6: 4662 mov r2, ip -100389d8: 463b mov r3, r7 -100389da: f7e2 f8c1 bl 1001ab60 -100389de: 4650 mov r0, sl -100389e0: 4641 mov r1, r8 -100389e2: b005 add sp, #20 -100389e4: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -100389e8: f7ff be96 b.w 10038718 -100389ec: b005 add sp, #20 -100389ee: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -100389f2: bf00 nop -100389f4: 10000720 .word 0x10000720 -100389f8: 10044ec0 .word 0x10044ec0 -100389fc: 10043a4c .word 0x10043a4c - -10038a00 : -10038a00: b510 push {r4, lr} -10038a02: 460b mov r3, r1 -10038a04: 4604 mov r4, r0 -10038a06: b188 cbz r0, 10038a2c -10038a08: 2906 cmp r1, #6 -10038a0a: d80f bhi.n 10038a2c -10038a0c: 2158 movs r1, #88 ; 0x58 -10038a0e: fb01 0103 mla r1, r1, r3, r0 -10038a12: f501 71b6 add.w r1, r1, #364 ; 0x16c -10038a16: 734a strb r2, [r1, #13] -10038a18: f881 303b strb.w r3, [r1, #59] ; 0x3b -10038a1c: f890 3123 ldrb.w r3, [r0, #291] ; 0x123 -10038a20: b123 cbz r3, 10038a2c -10038a22: f7ff fcdf bl 100383e4 -10038a26: 2300 movs r3, #0 -10038a28: f884 3123 strb.w r3, [r4, #291] ; 0x123 -10038a2c: bd10 pop {r4, pc} - -10038a2e : -10038a2e: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -10038a32: f890 4034 ldrb.w r4, [r0, #52] ; 0x34 -10038a36: f890 7028 ldrb.w r7, [r0, #40] ; 0x28 -10038a3a: f3c4 1500 ubfx r5, r4, #4, #1 -10038a3e: ea4f 1cd4 mov.w ip, r4, lsr #7 -10038a42: ea45 0c8c orr.w ip, r5, ip, lsl #2 -10038a46: f3c4 05c0 ubfx r5, r4, #3, #1 -10038a4a: f3c4 1680 ubfx r6, r4, #6, #1 -10038a4e: ea4c 0c45 orr.w ip, ip, r5, lsl #1 -10038a52: ea4c 0cc6 orr.w ip, ip, r6, lsl #3 -10038a56: f3c4 0480 ubfx r4, r4, #2, #1 -10038a5a: ea4c 1c04 orr.w ip, ip, r4, lsl #4 -10038a5e: f007 04f0 and.w r4, r7, #240 ; 0xf0 -10038a62: f007 070f and.w r7, r7, #15 -10038a66: 023f lsls r7, r7, #8 -10038a68: f890 6030 ldrb.w r6, [r0, #48] ; 0x30 -10038a6c: ea47 4404 orr.w r4, r7, r4, lsl #16 -10038a70: f890 7021 ldrb.w r7, [r0, #33] ; 0x21 -10038a74: f890 5035 ldrb.w r5, [r0, #53] ; 0x35 -10038a78: 2e00 cmp r6, #0 -10038a7a: ea44 4407 orr.w r4, r4, r7, lsl #16 -10038a7e: ea44 040c orr.w r4, r4, ip -10038a82: bf08 it eq -10038a84: 260f moveq r6, #15 -10038a86: 2d00 cmp r5, #0 -10038a88: bf08 it eq -10038a8a: 250f moveq r5, #15 -10038a8c: ea44 6606 orr.w r6, r4, r6, lsl #24 -10038a90: f411 4f70 tst.w r1, #61440 ; 0xf000 -10038a94: ea46 3505 orr.w r5, r6, r5, lsl #12 -10038a98: f890 7036 ldrb.w r7, [r0, #54] ; 0x36 -10038a9c: f890 c037 ldrb.w ip, [r0, #55] ; 0x37 -10038aa0: f890 8038 ldrb.w r8, [r0, #56] ; 0x38 -10038aa4: f890 4039 ldrb.w r4, [r0, #57] ; 0x39 -10038aa8: d004 beq.n 10038ab4 -10038aaa: ea85 0001 eor.w r0, r5, r1 -10038aae: f410 4f70 tst.w r0, #61440 ; 0xf000 -10038ab2: d135 bne.n 10038b20 -10038ab4: f011 6f70 tst.w r1, #251658240 ; 0xf000000 -10038ab8: d004 beq.n 10038ac4 -10038aba: ea85 0001 eor.w r0, r5, r1 -10038abe: f010 6f70 tst.w r0, #251658240 ; 0xf000000 -10038ac2: d12d bne.n 10038b20 -10038ac4: f021 407f bic.w r0, r1, #4278190080 ; 0xff000000 -10038ac8: f420 4070 bic.w r0, r0, #61440 ; 0xf000 -10038acc: 4005 ands r5, r0 -10038ace: 4285 cmp r5, r0 -10038ad0: d126 bne.n 10038b20 -10038ad2: 0708 lsls r0, r1, #28 -10038ad4: d021 beq.n 10038b1a -10038ad6: f011 0f01 tst.w r1, #1 -10038ada: bf14 ite ne -10038adc: 20ff movne r0, #255 ; 0xff -10038ade: 2000 moveq r0, #0 -10038ae0: 078e lsls r6, r1, #30 -10038ae2: bf48 it mi -10038ae4: f440 407f orrmi.w r0, r0, #65280 ; 0xff00 -10038ae8: 074d lsls r5, r1, #29 -10038aea: bf48 it mi -10038aec: f440 007f orrmi.w r0, r0, #16711680 ; 0xff0000 -10038af0: 0709 lsls r1, r1, #28 -10038af2: ea4f 4108 mov.w r1, r8, lsl #16 -10038af6: ea41 210c orr.w r1, r1, ip, lsl #8 -10038afa: ea41 0107 orr.w r1, r1, r7 -10038afe: ea41 6104 orr.w r1, r1, r4, lsl #24 -10038b02: bf48 it mi -10038b04: f040 407f orrmi.w r0, r0, #4278190080 ; 0xff000000 -10038b08: 404a eors r2, r1 -10038b0a: 4210 tst r0, r2 -10038b0c: d108 bne.n 10038b20 -10038b0e: 4218 tst r0, r3 -10038b10: bf14 ite ne -10038b12: 2000 movne r0, #0 -10038b14: 2001 moveq r0, #1 -10038b16: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10038b1a: 2001 movs r0, #1 -10038b1c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -10038b20: 2000 movs r0, #0 -10038b22: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - ... - -10038b28 : -10038b28: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -10038b2c: 4d1b ldr r5, [pc, #108] ; (10038b9c ) -10038b2e: 2700 movs r7, #0 -10038b30: 4681 mov r9, r0 -10038b32: f505 7a04 add.w sl, r5, #528 ; 0x210 -10038b36: 46b8 mov r8, r7 -10038b38: 463e mov r6, r7 -10038b3a: 2401 movs r4, #1 -10038b3c: 4555 cmp r5, sl -10038b3e: d02b beq.n 10038b98 -10038b40: f855 1c04 ldr.w r1, [r5, #-4] -10038b44: 682b ldr r3, [r5, #0] -10038b46: f011 4f40 tst.w r1, #3221225472 ; 0xc0000000 -10038b4a: d013 beq.n 10038b74 -10038b4c: 2900 cmp r1, #0 -10038b4e: da08 bge.n 10038b62 -10038b50: f3c1 7201 ubfx r2, r1, #28, #2 -10038b54: 2a03 cmp r2, #3 -10038b56: d014 beq.n 10038b82 -10038b58: 2a02 cmp r2, #2 -10038b5a: d115 bne.n 10038b88 -10038b5c: f086 0401 eor.w r4, r6, #1 -10038b60: e018 b.n 10038b94 -10038b62: b9a6 cbnz r6, 10038b8e -10038b64: 4648 mov r0, r9 -10038b66: 4641 mov r1, r8 -10038b68: 463a mov r2, r7 -10038b6a: f7ff ff60 bl 10038a2e -10038b6e: b180 cbz r0, 10038b92 -10038b70: 2601 movs r6, #1 -10038b72: e00e b.n 10038b92 -10038b74: b174 cbz r4, 10038b94 -10038b76: 4648 mov r0, r9 -10038b78: f04f 32ff mov.w r2, #4294967295 -10038b7c: f000 f88e bl 10038c9c -10038b80: e000 b.n 10038b84 -10038b82: 2600 movs r6, #0 -10038b84: 2401 movs r4, #1 -10038b86: e005 b.n 10038b94 -10038b88: 461f mov r7, r3 -10038b8a: 4688 mov r8, r1 -10038b8c: e002 b.n 10038b94 -10038b8e: 2400 movs r4, #0 -10038b90: e000 b.n 10038b94 -10038b92: 4634 mov r4, r6 -10038b94: 3508 adds r5, #8 -10038b96: e7d1 b.n 10038b3c -10038b98: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10038b9c: 10045074 .word 0x10045074 - -10038ba0 : -10038ba0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -10038ba4: 4d1b ldr r5, [pc, #108] ; (10038c14 ) -10038ba6: 2700 movs r7, #0 -10038ba8: 4681 mov r9, r0 -10038baa: f505 6acf add.w sl, r5, #1656 ; 0x678 -10038bae: 46b8 mov r8, r7 -10038bb0: 463e mov r6, r7 -10038bb2: 2401 movs r4, #1 -10038bb4: 4555 cmp r5, sl -10038bb6: d02b beq.n 10038c10 -10038bb8: f855 1c04 ldr.w r1, [r5, #-4] -10038bbc: 682b ldr r3, [r5, #0] -10038bbe: f011 4f40 tst.w r1, #3221225472 ; 0xc0000000 -10038bc2: d013 beq.n 10038bec -10038bc4: 2900 cmp r1, #0 -10038bc6: da08 bge.n 10038bda -10038bc8: f3c1 7201 ubfx r2, r1, #28, #2 -10038bcc: 2a03 cmp r2, #3 -10038bce: d014 beq.n 10038bfa -10038bd0: 2a02 cmp r2, #2 -10038bd2: d115 bne.n 10038c00 -10038bd4: f086 0401 eor.w r4, r6, #1 -10038bd8: e018 b.n 10038c0c -10038bda: b9a6 cbnz r6, 10038c06 -10038bdc: 4648 mov r0, r9 -10038bde: 4641 mov r1, r8 -10038be0: 463a mov r2, r7 -10038be2: f7ff ff24 bl 10038a2e -10038be6: b180 cbz r0, 10038c0a -10038be8: 2601 movs r6, #1 -10038bea: e00e b.n 10038c0a -10038bec: b174 cbz r4, 10038c0c -10038bee: 4648 mov r0, r9 -10038bf0: f04f 32ff mov.w r2, #4294967295 -10038bf4: f000 f871 bl 10038cda -10038bf8: e000 b.n 10038bfc -10038bfa: 2600 movs r6, #0 -10038bfc: 2401 movs r4, #1 -10038bfe: e005 b.n 10038c0c -10038c00: 461f mov r7, r3 -10038c02: 4688 mov r8, r1 -10038c04: e002 b.n 10038c0c -10038c06: 2400 movs r4, #0 -10038c08: e000 b.n 10038c0c -10038c0a: 4634 mov r4, r6 -10038c0c: 3508 adds r5, #8 -10038c0e: e7d1 b.n 10038bb4 -10038c10: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10038c14: 10045284 .word 0x10045284 - -10038c18 : -10038c18: 201b movs r0, #27 -10038c1a: 4770 bx lr - -10038c1c : -10038c1c: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -10038c1e: 4c0b ldr r4, [pc, #44] ; (10038c4c ) -10038c20: 2301 movs r3, #1 -10038c22: 4605 mov r5, r0 -10038c24: 7303 strb r3, [r0, #12] -10038c26: 6083 str r3, [r0, #8] -10038c28: f104 0690 add.w r6, r4, #144 ; 0x90 -10038c2c: 68a3 ldr r3, [r4, #8] -10038c2e: 1f21 subs r1, r4, #4 -10038c30: 9300 str r3, [sp, #0] -10038c32: 68e3 ldr r3, [r4, #12] -10038c34: 4628 mov r0, r5 -10038c36: 9301 str r3, [sp, #4] -10038c38: 6923 ldr r3, [r4, #16] -10038c3a: 3418 adds r4, #24 -10038c3c: 9302 str r3, [sp, #8] -10038c3e: c90e ldmia r1, {r1, r2, r3} -10038c40: f000 f834 bl 10038cac -10038c44: 42b4 cmp r4, r6 -10038c46: d1f1 bne.n 10038c2c -10038c48: b004 add sp, #16 -10038c4a: bd70 pop {r4, r5, r6, pc} -10038c4c: 10044fe4 .word 0x10044fe4 - -10038c50 : -10038c50: b537 push {r0, r1, r2, r4, r5, lr} -10038c52: 29fe cmp r1, #254 ; 0xfe -10038c54: 4614 mov r4, r2 -10038c56: 9a06 ldr r2, [sp, #24] -10038c58: d003 beq.n 10038c62 -10038c5a: f640 75fe movw r5, #4094 ; 0xffe -10038c5e: 42a9 cmp r1, r5 -10038c60: d105 bne.n 10038c6e -10038c62: 201e movs r0, #30 -10038c64: b003 add sp, #12 -10038c66: e8bd 4030 ldmia.w sp!, {r4, r5, lr} -10038c6a: f001 ba7e b.w 1003a16a -10038c6e: 4619 mov r1, r3 -10038c70: 9400 str r4, [sp, #0] -10038c72: 4b04 ldr r3, [pc, #16] ; (10038c84 ) -10038c74: f001 fa6e bl 1003a154 -10038c78: 2001 movs r0, #1 -10038c7a: b003 add sp, #12 -10038c7c: e8bd 4030 ldmia.w sp!, {r4, r5, lr} -10038c80: f001 ba75 b.w 1003a16e -10038c84: 000fffff .word 0x000fffff - -10038c88 : -10038c88: b507 push {r0, r1, r2, lr} -10038c8a: 2300 movs r3, #0 -10038c8c: 9100 str r1, [sp, #0] -10038c8e: f7ff ffdf bl 10038c50 -10038c92: b003 add sp, #12 -10038c94: f85d fb04 ldr.w pc, [sp], #4 - -10038c98 : -10038c98: f001 ba4a b.w 1003a130 - -10038c9c : -10038c9c: b508 push {r3, lr} -10038c9e: f001 fa53 bl 1003a148 -10038ca2: e8bd 4008 ldmia.w sp!, {r3, lr} -10038ca6: 2001 movs r0, #1 -10038ca8: f001 ba61 b.w 1003a16e - -10038cac : -10038cac: b5f0 push {r4, r5, r6, r7, lr} -10038cae: 9c05 ldr r4, [sp, #20] -10038cb0: 9e06 ldr r6, [sp, #24] -10038cb2: 2cfe cmp r4, #254 ; 0xfe -10038cb4: 9d07 ldr r5, [sp, #28] -10038cb6: d003 beq.n 10038cc0 -10038cb8: f640 77fe movw r7, #4094 ; 0xffe -10038cbc: 42bc cmp r4, r7 -10038cbe: d104 bne.n 10038cca -10038cc0: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} -10038cc4: 2032 movs r0, #50 ; 0x32 -10038cc6: f001 ba50 b.w 1003a16a -10038cca: 9405 str r4, [sp, #20] -10038ccc: 9606 str r6, [sp, #24] -10038cce: 9507 str r5, [sp, #28] -10038cd0: 6800 ldr r0, [r0, #0] -10038cd2: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} -10038cd6: f7f8 bfeb b.w 10031cb0 - -10038cda : -10038cda: 29fe cmp r1, #254 ; 0xfe -10038cdc: b510 push {r4, lr} -10038cde: bf08 it eq -10038ce0: 2032 moveq r0, #50 ; 0x32 -10038ce2: d002 beq.n 10038cea -10038ce4: 29fd cmp r1, #253 ; 0xfd -10038ce6: d103 bne.n 10038cf0 -10038ce8: 2005 movs r0, #5 -10038cea: f001 fa3e bl 1003a16a -10038cee: e013 b.n 10038d18 -10038cf0: 29fc cmp r1, #252 ; 0xfc -10038cf2: bf08 it eq -10038cf4: 2001 moveq r0, #1 -10038cf6: d0f8 beq.n 10038cea -10038cf8: 29fb cmp r1, #251 ; 0xfb -10038cfa: bf08 it eq -10038cfc: 2032 moveq r0, #50 ; 0x32 -10038cfe: d006 beq.n 10038d0e -10038d00: 29fa cmp r1, #250 ; 0xfa -10038d02: bf08 it eq -10038d04: 2005 moveq r0, #5 -10038d06: d002 beq.n 10038d0e -10038d08: 29f9 cmp r1, #249 ; 0xf9 -10038d0a: d103 bne.n 10038d14 -10038d0c: 2001 movs r0, #1 -10038d0e: f001 fa2e bl 1003a16e -10038d12: e001 b.n 10038d18 -10038d14: f001 fa18 bl 1003a148 -10038d18: e8bd 4010 ldmia.w sp!, {r4, lr} -10038d1c: 2001 movs r0, #1 -10038d1e: f001 ba26 b.w 1003a16e - -10038d22 : -10038d22: b5f0 push {r4, r5, r6, r7, lr} -10038d24: f89d 7014 ldrb.w r7, [sp, #20] -10038d28: f89d 6018 ldrb.w r6, [sp, #24] -10038d2c: f89d 501c ldrb.w r5, [sp, #28] -10038d30: f89d 4020 ldrb.w r4, [sp, #32] -10038d34: 9705 str r7, [sp, #20] -10038d36: 9606 str r6, [sp, #24] -10038d38: 9507 str r5, [sp, #28] -10038d3a: 9408 str r4, [sp, #32] -10038d3c: 6800 ldr r0, [r0, #0] -10038d3e: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} -10038d42: f7f9 bb11 b.w 10032368 - -10038d46 : -10038d46: 6ac3 ldr r3, [r0, #44] ; 0x2c -10038d48: f413 4fc0 tst.w r3, #24576 ; 0x6000 -10038d4c: d004 beq.n 10038d58 -10038d4e: 2301 movs r3, #1 -10038d50: f880 30e9 strb.w r3, [r0, #233] ; 0xe9 -10038d54: f880 30e8 strb.w r3, [r0, #232] ; 0xe8 -10038d58: 4770 bx lr - -10038d5a : -10038d5a: 6ac2 ldr r2, [r0, #44] ; 0x2c -10038d5c: f246 139f movw r3, #24991 ; 0x619f -10038d60: 4013 ands r3, r2 -10038d62: 2b00 cmp r3, #0 -10038d64: f640 0124 movw r1, #2084 ; 0x824 -10038d68: f640 0304 movw r3, #2052 ; 0x804 -10038d6c: bf08 it eq -10038d6e: 4619 moveq r1, r3 -10038d70: b510 push {r4, lr} -10038d72: bf14 ite ne -10038d74: f44f 7200 movne.w r2, #512 ; 0x200 -10038d78: f44f 3280 moveq.w r2, #65536 ; 0x10000 -10038d7c: 4604 mov r4, r0 -10038d7e: f001 f9e6 bl 1003a14e -10038d82: 6ae3 ldr r3, [r4, #44] ; 0x2c -10038d84: 77a0 strb r0, [r4, #30] -10038d86: f413 4380 ands.w r3, r3, #16384 ; 0x4000 -10038d8a: d00c beq.n 10038da6 -10038d8c: 4620 mov r0, r4 -10038d8e: f640 219c movw r1, #2716 ; 0xa9c -10038d92: f44f 3200 mov.w r2, #131072 ; 0x20000 -10038d96: f001 f9da bl 1003a14e -10038d9a: 3000 adds r0, #0 -10038d9c: bf18 it ne -10038d9e: 2001 movne r0, #1 -10038da0: f884 004b strb.w r0, [r4, #75] ; 0x4b -10038da4: bd10 pop {r4, pc} -10038da6: f884 304b strb.w r3, [r4, #75] ; 0x4b -10038daa: bd10 pop {r4, pc} - -10038dac : -10038dac: 2941 cmp r1, #65 ; 0x41 -10038dae: d875 bhi.n 10038e9c -10038db0: e8df f001 tbb [pc, r1] -10038db4: 2c292126 .word 0x2c292126 -10038db8: 2334312f .word 0x2334312f -10038dbc: 43403d37 .word 0x43403d37 -10038dc0: 4f4c4946 .word 0x4f4c4946 -10038dc4: 5b585552 .word 0x5b585552 -10038dc8: 6764615e .word 0x6764615e -10038dcc: 726f6d6a .word 0x726f6d6a -10038dd0: 74747474 .word 0x74747474 -10038dd4: 74747474 .word 0x74747474 -10038dd8: 74747474 .word 0x74747474 -10038ddc: 74747474 .word 0x74747474 -10038de0: 74747474 .word 0x74747474 -10038de4: 74747474 .word 0x74747474 -10038de8: 74747474 .word 0x74747474 -10038dec: 74747474 .word 0x74747474 -10038df0: 74747474 .word 0x74747474 -10038df4: 3a74 .short 0x3a74 -10038df6: 6242 str r2, [r0, #36] ; 0x24 -10038df8: 4770 bx lr -10038dfa: f880 2032 strb.w r2, [r0, #50] ; 0x32 -10038dfe: 4770 bx lr -10038e00: f880 2021 strb.w r2, [r0, #33] ; 0x21 -10038e04: 4770 bx lr -10038e06: f880 2028 strb.w r2, [r0, #40] ; 0x28 -10038e0a: 4770 bx lr -10038e0c: f880 20bb strb.w r2, [r0, #187] ; 0xbb -10038e10: 4770 bx lr -10038e12: 62c2 str r2, [r0, #44] ; 0x2c -10038e14: 4770 bx lr -10038e16: f880 2030 strb.w r2, [r0, #48] ; 0x30 -10038e1a: 4770 bx lr -10038e1c: f880 2031 strb.w r2, [r0, #49] ; 0x31 -10038e20: 4770 bx lr -10038e22: f880 2033 strb.w r2, [r0, #51] ; 0x33 -10038e26: 4770 bx lr -10038e28: f880 2048 strb.w r2, [r0, #72] ; 0x48 -10038e2c: 4770 bx lr -10038e2e: f880 2034 strb.w r2, [r0, #52] ; 0x34 -10038e32: 4770 bx lr -10038e34: f880 2035 strb.w r2, [r0, #53] ; 0x35 -10038e38: 4770 bx lr -10038e3a: f880 203a strb.w r2, [r0, #58] ; 0x3a -10038e3e: 4770 bx lr -10038e40: f880 203b strb.w r2, [r0, #59] ; 0x3b -10038e44: 4770 bx lr -10038e46: f880 203c strb.w r2, [r0, #60] ; 0x3c -10038e4a: 4770 bx lr -10038e4c: f880 203d strb.w r2, [r0, #61] ; 0x3d -10038e50: 4770 bx lr -10038e52: f880 2037 strb.w r2, [r0, #55] ; 0x37 -10038e56: 4770 bx lr -10038e58: f880 2039 strb.w r2, [r0, #57] ; 0x39 -10038e5c: 4770 bx lr -10038e5e: f880 2036 strb.w r2, [r0, #54] ; 0x36 -10038e62: 4770 bx lr -10038e64: f880 2038 strb.w r2, [r0, #56] ; 0x38 -10038e68: 4770 bx lr -10038e6a: f880 203e strb.w r2, [r0, #62] ; 0x3e -10038e6e: 4770 bx lr -10038e70: f880 203f strb.w r2, [r0, #63] ; 0x3f -10038e74: 4770 bx lr -10038e76: f880 2040 strb.w r2, [r0, #64] ; 0x40 -10038e7a: 4770 bx lr -10038e7c: f880 2041 strb.w r2, [r0, #65] ; 0x41 -10038e80: 4770 bx lr -10038e82: f880 2042 strb.w r2, [r0, #66] ; 0x42 -10038e86: 4770 bx lr -10038e88: f880 2049 strb.w r2, [r0, #73] ; 0x49 -10038e8c: 4770 bx lr -10038e8e: f880 204a strb.w r2, [r0, #74] ; 0x4a -10038e92: 4b03 ldr r3, [pc, #12] ; (10038ea0 ) -10038e94: 701a strb r2, [r3, #0] -10038e96: 4770 bx lr -10038e98: 4b01 ldr r3, [pc, #4] ; (10038ea0 ) -10038e9a: 705a strb r2, [r3, #1] -10038e9c: 4770 bx lr -10038e9e: bf00 nop -10038ea0: 10000720 .word 0x10000720 - -10038ea4 : -10038ea4: 391c subs r1, #28 -10038ea6: 291a cmp r1, #26 -10038ea8: d855 bhi.n 10038f56 -10038eaa: e8df f001 tbb [pc, r1] -10038eae: 100e .short 0x100e -10038eb0: 18161412 .word 0x18161412 -10038eb4: 401e1c1a .word 0x401e1c1a -10038eb8: 28252220 .word 0x28252220 -10038ebc: 34312e2b .word 0x34312e2b -10038ec0: 463d3a37 .word 0x463d3a37 -10038ec4: 49524f43 .word 0x49524f43 -10038ec8: 4c .byte 0x4c -10038ec9: 00 .byte 0x00 -10038eca: 6542 str r2, [r0, #84] ; 0x54 -10038ecc: 4770 bx lr -10038ece: 6582 str r2, [r0, #88] ; 0x58 -10038ed0: 4770 bx lr -10038ed2: 65c2 str r2, [r0, #92] ; 0x5c -10038ed4: 4770 bx lr -10038ed6: 6602 str r2, [r0, #96] ; 0x60 -10038ed8: 4770 bx lr -10038eda: 6642 str r2, [r0, #100] ; 0x64 -10038edc: 4770 bx lr -10038ede: 6682 str r2, [r0, #104] ; 0x68 -10038ee0: 4770 bx lr -10038ee2: 66c2 str r2, [r0, #108] ; 0x6c -10038ee4: 4770 bx lr -10038ee6: 6702 str r2, [r0, #112] ; 0x70 -10038ee8: 4770 bx lr -10038eea: 6742 str r2, [r0, #116] ; 0x74 -10038eec: 4770 bx lr -10038eee: 67c2 str r2, [r0, #124] ; 0x7c -10038ef0: 4770 bx lr -10038ef2: f8c0 2080 str.w r2, [r0, #128] ; 0x80 -10038ef6: 4770 bx lr -10038ef8: f8c0 2084 str.w r2, [r0, #132] ; 0x84 -10038efc: 4770 bx lr -10038efe: f8c0 2088 str.w r2, [r0, #136] ; 0x88 -10038f02: 4770 bx lr -10038f04: f8c0 208c str.w r2, [r0, #140] ; 0x8c -10038f08: 4770 bx lr -10038f0a: f8c0 2090 str.w r2, [r0, #144] ; 0x90 -10038f0e: 4770 bx lr -10038f10: f8c0 2760 str.w r2, [r0, #1888] ; 0x760 -10038f14: 4770 bx lr -10038f16: f8c0 2764 str.w r2, [r0, #1892] ; 0x764 -10038f1a: 4770 bx lr -10038f1c: f8c0 2768 str.w r2, [r0, #1896] ; 0x768 -10038f20: 4770 bx lr -10038f22: f8c0 2094 str.w r2, [r0, #148] ; 0x94 -10038f26: 4770 bx lr -10038f28: f8c0 2098 str.w r2, [r0, #152] ; 0x98 -10038f2c: 4770 bx lr -10038f2e: f8c0 20b0 str.w r2, [r0, #176] ; 0xb0 -10038f32: 4770 bx lr -10038f34: f8c0 20a0 str.w r2, [r0, #160] ; 0xa0 -10038f38: 4770 bx lr -10038f3a: f8c0 209c str.w r2, [r0, #156] ; 0x9c -10038f3e: 4770 bx lr -10038f40: f8c0 20a8 str.w r2, [r0, #168] ; 0xa8 -10038f44: 4770 bx lr -10038f46: f8c0 20ac str.w r2, [r0, #172] ; 0xac -10038f4a: 4770 bx lr -10038f4c: f8c0 25c0 str.w r2, [r0, #1472] ; 0x5c0 -10038f50: 4770 bx lr -10038f52: f8c0 20a4 str.w r2, [r0, #164] ; 0xa4 -10038f56: 4770 bx lr - -10038f58 : -10038f58: 2949 cmp r1, #73 ; 0x49 -10038f5a: bf04 itt eq -10038f5c: eb00 0082 addeq.w r0, r0, r2, lsl #2 -10038f60: f8c0 314c streq.w r3, [r0, #332] ; 0x14c -10038f64: 4770 bx lr - ... - -10038f68 : -10038f68: 293e cmp r1, #62 ; 0x3e -10038f6a: d044 beq.n 10038ff6 -10038f6c: d815 bhi.n 10038f9a -10038f6e: 2939 cmp r1, #57 ; 0x39 -10038f70: d026 beq.n 10038fc0 -10038f72: d80a bhi.n 10038f8a -10038f74: 2907 cmp r1, #7 -10038f76: d028 beq.n 10038fca -10038f78: d802 bhi.n 10038f80 -10038f7a: 2901 cmp r1, #1 -10038f7c: d023 beq.n 10038fc6 -10038f7e: 4770 bx lr -10038f80: 2937 cmp r1, #55 ; 0x37 -10038f82: d025 beq.n 10038fd0 -10038f84: 2938 cmp r1, #56 ; 0x38 -10038f86: d026 beq.n 10038fd6 -10038f88: 4770 bx lr -10038f8a: 293b cmp r1, #59 ; 0x3b -10038f8c: d029 beq.n 10038fe2 -10038f8e: d325 bcc.n 10038fdc -10038f90: 293c cmp r1, #60 ; 0x3c -10038f92: d029 beq.n 10038fe8 -10038f94: 293d cmp r1, #61 ; 0x3d -10038f96: d02a beq.n 10038fee -10038f98: 4770 bx lr -10038f9a: 2944 cmp r1, #68 ; 0x44 -10038f9c: d03a beq.n 10039014 -10038f9e: d807 bhi.n 10038fb0 -10038fa0: 2940 cmp r1, #64 ; 0x40 -10038fa2: d02e beq.n 10039002 -10038fa4: d32a bcc.n 10038ffc -10038fa6: 2942 cmp r1, #66 ; 0x42 -10038fa8: d02e beq.n 10039008 -10038faa: 2943 cmp r1, #67 ; 0x43 -10038fac: d02f beq.n 1003900e -10038fae: 4770 bx lr -10038fb0: 2946 cmp r1, #70 ; 0x46 -10038fb2: d035 beq.n 10039020 -10038fb4: d331 bcc.n 1003901a -10038fb6: 2947 cmp r1, #71 ; 0x47 -10038fb8: d035 beq.n 10039026 -10038fba: 2948 cmp r1, #72 ; 0x48 -10038fbc: d036 beq.n 1003902c -10038fbe: 4770 bx lr -10038fc0: f880 20b4 strb.w r2, [r0, #180] ; 0xb4 -10038fc4: 4770 bx lr -10038fc6: 6242 str r2, [r0, #36] ; 0x24 -10038fc8: 4770 bx lr -10038fca: f880 2032 strb.w r2, [r0, #50] ; 0x32 -10038fce: 4770 bx lr -10038fd0: f880 20b5 strb.w r2, [r0, #181] ; 0xb5 -10038fd4: 4770 bx lr -10038fd6: f880 20b6 strb.w r2, [r0, #182] ; 0xb6 -10038fda: 4770 bx lr -10038fdc: f880 20b7 strb.w r2, [r0, #183] ; 0xb7 -10038fe0: 4770 bx lr -10038fe2: f880 20b8 strb.w r2, [r0, #184] ; 0xb8 -10038fe6: 4770 bx lr -10038fe8: f880 20b9 strb.w r2, [r0, #185] ; 0xb9 -10038fec: 4770 bx lr -10038fee: 4911 ldr r1, [pc, #68] ; (10039034 ) -10038ff0: e9c1 2302 strd r2, r3, [r1, #8] -10038ff4: 4770 bx lr -10038ff6: 4b0f ldr r3, [pc, #60] ; (10039034 ) -10038ff8: 611a str r2, [r3, #16] -10038ffa: 4770 bx lr -10038ffc: f880 276e strb.w r2, [r0, #1902] ; 0x76e -10039000: 4770 bx lr -10039002: f880 276f strb.w r2, [r0, #1903] ; 0x76f -10039006: 4770 bx lr -10039008: f880 20bd strb.w r2, [r0, #189] ; 0xbd -1003900c: 4770 bx lr -1003900e: f880 20be strb.w r2, [r0, #190] ; 0xbe -10039012: 4770 bx lr -10039014: f880 20bf strb.w r2, [r0, #191] ; 0xbf -10039018: 4770 bx lr -1003901a: f880 20c0 strb.w r2, [r0, #192] ; 0xc0 -1003901e: 4770 bx lr -10039020: f880 20c2 strb.w r2, [r0, #194] ; 0xc2 -10039024: 4770 bx lr -10039026: f880 20c1 strb.w r2, [r0, #193] ; 0xc1 -1003902a: 4770 bx lr -1003902c: f880 2759 strb.w r2, [r0, #1881] ; 0x759 -10039030: 4770 bx lr -10039032: bf00 nop -10039034: 10000720 .word 0x10000720 - -10039038 : -10039038: b510 push {r4, lr} -1003903a: 4604 mov r4, r0 -1003903c: f7ff fe8d bl 10038d5a -10039040: 6ae2 ldr r2, [r4, #44] ; 0x2c -10039042: f246 139f movw r3, #24991 ; 0x619f -10039046: 4013 ands r3, r2 -10039048: 2b00 cmp r3, #0 -1003904a: f640 0124 movw r1, #2084 ; 0x824 -1003904e: f640 0304 movw r3, #2052 ; 0x804 -10039052: bf08 it eq -10039054: 4619 moveq r1, r3 -10039056: bf14 ite ne -10039058: f44f 7200 movne.w r2, #512 ; 0x200 -1003905c: f44f 3280 moveq.w r2, #65536 ; 0x10000 -10039060: 4620 mov r0, r4 -10039062: f001 f874 bl 1003a14e -10039066: 6ae2 ldr r2, [r4, #44] ; 0x2c -10039068: f246 139f movw r3, #24991 ; 0x619f -1003906c: 4013 ands r3, r2 -1003906e: f640 0108 movw r1, #2056 ; 0x808 -10039072: f640 4204 movw r2, #3076 ; 0xc04 -10039076: 2b00 cmp r3, #0 -10039078: bf18 it ne -1003907a: 4611 movne r1, r2 -1003907c: 77a0 strb r0, [r4, #30] -1003907e: 220f movs r2, #15 -10039080: 4620 mov r0, r4 -10039082: f001 f864 bl 1003a14e -10039086: 77e0 strb r0, [r4, #31] -10039088: 4620 mov r0, r4 -1003908a: f000 faaf bl 100395ec -1003908e: 4620 mov r0, r4 -10039090: f7ff fe59 bl 10038d46 -10039094: 23ff movs r3, #255 ; 0xff -10039096: f884 30ec strb.w r3, [r4, #236] ; 0xec -1003909a: bd10 pop {r4, pc} - -1003909c : -1003909c: b510 push {r4, lr} -1003909e: 4604 mov r4, r0 -100390a0: f7ff ffca bl 10039038 -100390a4: 4620 mov r0, r4 -100390a6: f000 fc42 bl 1003992e -100390aa: 4620 mov r0, r4 -100390ac: f000 f8cc bl 10039248 -100390b0: 4620 mov r0, r4 -100390b2: f000 f93f bl 10039334 -100390b6: 4620 mov r0, r4 -100390b8: f001 f985 bl 1003a3c6 -100390bc: 4620 mov r0, r4 -100390be: f000 fa53 bl 10039568 -100390c2: 4620 mov r0, r4 -100390c4: f001 f901 bl 1003a2ca -100390c8: 4620 mov r0, r4 -100390ca: f001 f8db bl 1003a284 -100390ce: 6ae2 ldr r2, [r4, #44] ; 0x2c -100390d0: f246 139f movw r3, #24991 ; 0x619f -100390d4: 4013 ands r3, r2 -100390d6: b13b cbz r3, 100390e8 -100390d8: f5b2 5f00 cmp.w r2, #8192 ; 0x2000 -100390dc: d104 bne.n 100390e8 -100390de: 4620 mov r0, r4 -100390e0: e8bd 4010 ldmia.w sp!, {r4, lr} -100390e4: f7ff b853 b.w 1003818e -100390e8: bd10 pop {r4, pc} - -100390ea : -100390ea: 6f03 ldr r3, [r0, #112] ; 0x70 -100390ec: 781b ldrb r3, [r3, #0] -100390ee: 2b01 cmp r3, #1 -100390f0: d10d bne.n 1003910e -100390f2: 6e83 ldr r3, [r0, #104] ; 0x68 -100390f4: 781b ldrb r3, [r3, #0] -100390f6: 2b01 cmp r3, #1 -100390f8: d103 bne.n 10039102 -100390fa: 6f43 ldr r3, [r0, #116] ; 0x74 -100390fc: 781b ldrb r3, [r3, #0] -100390fe: 3b02 subs r3, #2 -10039100: e007 b.n 10039112 -10039102: 2b02 cmp r3, #2 -10039104: d107 bne.n 10039116 -10039106: 6f43 ldr r3, [r0, #116] ; 0x74 -10039108: 781b ldrb r3, [r3, #0] -1003910a: 3302 adds r3, #2 -1003910c: e001 b.n 10039112 -1003910e: 6f43 ldr r3, [r0, #116] ; 0x74 -10039110: 781b ldrb r3, [r3, #0] -10039112: f880 3020 strb.w r3, [r0, #32] -10039116: 2300 movs r3, #0 -10039118: 461a mov r2, r3 -1003911a: 18c1 adds r1, r0, r3 -1003911c: f8d1 114c ldr.w r1, [r1, #332] ; 0x14c -10039120: b109 cbz r1, 10039126 -10039122: 3201 adds r2, #1 -10039124: b2d2 uxtb r2, r2 -10039126: 3304 adds r3, #4 -10039128: 2b1c cmp r3, #28 -1003912a: d1f6 bne.n 1003911a -1003912c: 2a01 cmp r2, #1 -1003912e: bf16 itet ne -10039130: 2300 movne r3, #0 -10039132: f880 20bc strbeq.w r2, [r0, #188] ; 0xbc -10039136: f880 30bc strbne.w r3, [r0, #188] ; 0xbc -1003913a: 4770 bx lr - -1003913c : -1003913c: 2901 cmp r1, #1 -1003913e: d004 beq.n 1003914a -10039140: d308 bcc.n 10039154 -10039142: 2902 cmp r1, #2 -10039144: d003 beq.n 1003914e -10039146: 2000 movs r0, #0 -10039148: 4770 bx lr -1003914a: 4803 ldr r0, [pc, #12] ; (10039158 ) -1003914c: 4770 bx lr -1003914e: f500 7099 add.w r0, r0, #306 ; 0x132 -10039152: 4770 bx lr -10039154: 4801 ldr r0, [pc, #4] ; (1003915c ) -10039156: 4770 bx lr -10039158: 10000738 .word 0x10000738 -1003915c: 100006e0 .word 0x100006e0 - -10039160 : -10039160: f8d0 366c ldr.w r3, [r0, #1644] ; 0x66c -10039164: f8d0 2680 ldr.w r2, [r0, #1664] ; 0x680 -10039168: b530 push {r4, r5, lr} -1003916a: 0111 lsls r1, r2, #4 -1003916c: 011d lsls r5, r3, #4 -1003916e: 2310 movs r3, #16 -10039170: 428d cmp r5, r1 -10039172: d205 bcs.n 10039180 -10039174: 1a89 subs r1, r1, r2 -10039176: 1e5c subs r4, r3, #1 -10039178: b10b cbz r3, 1003917e -1003917a: 4623 mov r3, r4 -1003917c: e7f8 b.n 10039170 -1003917e: 2300 movs r3, #0 -10039180: f8d0 1148 ldr.w r1, [r0, #328] ; 0x148 -10039184: f5b2 7f96 cmp.w r2, #300 ; 0x12c -10039188: ea4f 0151 mov.w r1, r1, lsr #1 -1003918c: eb01 0383 add.w r3, r1, r3, lsl #2 -10039190: f8c0 3148 str.w r3, [r0, #328] ; 0x148 -10039194: bf26 itte cs -10039196: 3303 addcs r3, #3 -10039198: 08db lsrcs r3, r3, #3 -1003919a: 2300 movcc r3, #0 -1003919c: 2b02 cmp r3, #2 -1003919e: bf94 ite ls -100391a0: 2300 movls r3, #0 -100391a2: 2301 movhi r3, #1 -100391a4: f880 3144 strb.w r3, [r0, #324] ; 0x144 -100391a8: bd30 pop {r4, r5, pc} - -100391aa : -100391aa: b510 push {r4, lr} -100391ac: 4604 mov r4, r0 -100391ae: f7ff ff9c bl 100390ea -100391b2: 4620 mov r0, r4 -100391b4: f000 fde0 bl 10039d78 -100391b8: 4620 mov r0, r4 -100391ba: f7ff ffd1 bl 10039160 -100391be: 4620 mov r0, r4 -100391c0: f001 f8f7 bl 1003a3b2 -100391c4: f8d4 308c ldr.w r3, [r4, #140] ; 0x8c -100391c8: 4620 mov r0, r4 -100391ca: 781b ldrb r3, [r3, #0] -100391cc: 2b01 cmp r3, #1 -100391ce: d10a bne.n 100391e6 -100391d0: f000 fc0c bl 100399ec -100391d4: 4620 mov r0, r4 -100391d6: f894 159c ldrb.w r1, [r4, #1436] ; 0x59c -100391da: f000 f91f bl 1003941c -100391de: 4620 mov r0, r4 -100391e0: f000 fddf bl 10039da2 -100391e4: e015 b.n 10039212 -100391e6: f000 f818 bl 1003921a -100391ea: 4620 mov r0, r4 -100391ec: f000 fc7c bl 10039ae8 -100391f0: f894 159c ldrb.w r1, [r4, #1436] ; 0x59c -100391f4: 4620 mov r0, r4 -100391f6: f000 f911 bl 1003941c -100391fa: 4620 mov r0, r4 -100391fc: f000 fdd1 bl 10039da2 -10039200: 4620 mov r0, r4 -10039202: f001 f949 bl 1003a498 -10039206: 4620 mov r0, r4 -10039208: f000 f9c3 bl 10039592 -1003920c: 4620 mov r0, r4 -1003920e: f001 f855 bl 1003a2bc -10039212: 2300 movs r3, #0 -10039214: f884 33e8 strb.w r3, [r4, #1000] ; 0x3e8 -10039218: bd10 pop {r4, pc} - -1003921a : -1003921a: b510 push {r4, lr} -1003921c: 2102 movs r1, #2 -1003921e: 4604 mov r4, r0 -10039220: f7ff ff8c bl 1003913c -10039224: 6a63 ldr r3, [r4, #36] ; 0x24 -10039226: f413 5300 ands.w r3, r3, #8192 ; 0x2000 -1003922a: d008 beq.n 1003923e -1003922c: 6ae2 ldr r2, [r4, #44] ; 0x2c -1003922e: 2301 movs r3, #1 -10039230: f412 4fc4 tst.w r2, #25088 ; 0x6200 -10039234: f884 312f strb.w r3, [r4, #303] ; 0x12f -10039238: d003 beq.n 10039242 -1003923a: 2300 movs r3, #0 -1003923c: e001 b.n 10039242 -1003923e: f884 312f strb.w r3, [r4, #303] ; 0x12f -10039242: f884 312d strb.w r3, [r4, #301] ; 0x12d -10039246: bd10 pop {r4, pc} - -10039248 : -10039248: 6ac2 ldr r2, [r0, #44] ; 0x2c -1003924a: f246 139f movw r3, #24991 ; 0x619f -1003924e: 4013 ands r3, r2 -10039250: b510 push {r4, lr} -10039252: 4604 mov r4, r0 -10039254: b393 cbz r3, 100392bc -10039256: f640 0196 movw r1, #2198 ; 0x896 -1003925a: f24c 3250 movw r2, #50000 ; 0xc350 -1003925e: f000 ff6a bl 1003a136 -10039262: 4620 mov r0, r4 -10039264: f640 0192 movw r1, #2194 ; 0x892 -10039268: f64f 72ff movw r2, #65535 ; 0xffff -1003926c: f000 ff63 bl 1003a136 -10039270: 4620 mov r0, r4 -10039272: f640 0198 movw r1, #2200 ; 0x898 -10039276: f06f 02af mvn.w r2, #175 ; 0xaf -1003927a: f000 ff5f bl 1003a13c -1003927e: 4620 mov r0, r4 -10039280: f640 019c movw r1, #2204 ; 0x89c -10039284: f04f 32ff mov.w r2, #4294967295 -10039288: f000 ff58 bl 1003a13c -1003928c: 22ff movs r2, #255 ; 0xff -1003928e: 4620 mov r0, r4 -10039290: 4613 mov r3, r2 -10039292: f640 6128 movw r1, #3624 ; 0xe28 -10039296: f000 ff57 bl 1003a148 -1003929a: 4620 mov r0, r4 -1003929c: f44f 6109 mov.w r1, #2192 ; 0x890 -100392a0: f44f 62e0 mov.w r2, #1792 ; 0x700 -100392a4: 2301 movs r3, #1 -100392a6: f000 ff4f bl 1003a148 -100392aa: 4620 mov r0, r4 -100392ac: f640 410c movw r1, #3084 ; 0xc0c -100392b0: 2280 movs r2, #128 ; 0x80 -100392b2: 2301 movs r3, #1 -100392b4: e8bd 4010 ldmia.w sp!, {r4, lr} -100392b8: f000 bf46 b.w 1003a148 -100392bc: bd10 pop {r4, pc} - -100392be : -100392be: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -100392c2: 6ac6 ldr r6, [r0, #44] ; 0x2c -100392c4: f246 149f movw r4, #24991 ; 0x619f -100392c8: 4034 ands r4, r6 -100392ca: 4605 mov r5, r0 -100392cc: 460f mov r7, r1 -100392ce: 4613 mov r3, r2 -100392d0: b17c cbz r4, 100392f2 -100392d2: f640 414c movw r1, #3148 ; 0xc4c -100392d6: 22ff movs r2, #255 ; 0xff -100392d8: b2db uxtb r3, r3 -100392da: f000 ff35 bl 1003a148 -100392de: 4628 mov r0, r5 -100392e0: b2fb uxtb r3, r7 -100392e2: f640 414c movw r1, #3148 ; 0xc4c -100392e6: f44f 027f mov.w r2, #16711680 ; 0xff0000 -100392ea: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -100392ee: f000 bf2b b.w 1003a148 -100392f2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -100392f6 : -100392f6: b570 push {r4, r5, r6, lr} -100392f8: 460d mov r5, r1 -100392fa: 4604 mov r4, r0 -100392fc: f44f 61a4 mov.w r1, #1312 ; 0x520 -10039300: f44f 4200 mov.w r2, #32768 ; 0x8000 -10039304: b94d cbnz r5, 1003931a -10039306: 2301 movs r3, #1 -10039308: f000 ff1b bl 1003a142 -1003930c: 4620 mov r0, r4 -1003930e: f240 5124 movw r1, #1316 ; 0x524 -10039312: f44f 6200 mov.w r2, #2048 ; 0x800 -10039316: 462b mov r3, r5 -10039318: e008 b.n 1003932c -1003931a: 2300 movs r3, #0 -1003931c: f000 ff11 bl 1003a142 -10039320: 4620 mov r0, r4 -10039322: f240 5124 movw r1, #1316 ; 0x524 -10039326: f44f 6200 mov.w r2, #2048 ; 0x800 -1003932a: 2301 movs r3, #1 -1003932c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10039330: f000 bf07 b.w 1003a142 - -10039334 : -10039334: b538 push {r3, r4, r5, lr} -10039336: 2102 movs r1, #2 -10039338: 4604 mov r4, r0 -1003933a: f7ff feff bl 1003913c -1003933e: 2301 movs r3, #1 -10039340: f884 3131 strb.w r3, [r4, #305] ; 0x131 -10039344: 6823 ldr r3, [r4, #0] -10039346: f241 32fa movw r2, #5114 ; 0x13fa -1003934a: 5c9a ldrb r2, [r3, r2] -1003934c: 4605 mov r5, r0 -1003934e: 3200 adds r2, #0 -10039350: bf18 it ne -10039352: 2201 movne r2, #1 -10039354: f884 212b strb.w r2, [r4, #299] ; 0x12b -10039358: f241 32fc movw r2, #5116 ; 0x13fc -1003935c: 5c9a ldrb r2, [r3, r2] -1003935e: f884 212e strb.w r2, [r4, #302] ; 0x12e -10039362: f241 32fb movw r2, #5115 ; 0x13fb -10039366: 5c9b ldrb r3, [r3, r2] -10039368: 3300 adds r3, #0 -1003936a: bf18 it ne -1003936c: 2301 movne r3, #1 -1003936e: 7283 strb r3, [r0, #10] -10039370: f894 312b ldrb.w r3, [r4, #299] ; 0x12b -10039374: b9ab cbnz r3, 100393a2 -10039376: 6823 ldr r3, [r4, #0] -10039378: f241 32fd movw r2, #5117 ; 0x13fd -1003937c: 5c9b ldrb r3, [r3, r2] -1003937e: b903 cbnz r3, 10039382 -10039380: 23f5 movs r3, #245 ; 0xf5 -10039382: 6ae2 ldr r2, [r4, #44] ; 0x2c -10039384: f884 3128 strb.w r3, [r4, #296] ; 0x128 -10039388: f246 139f movw r3, #24991 ; 0x619f -1003938c: 4013 ands r3, r2 -1003938e: b15b cbz r3, 100393a8 -10039390: 4620 mov r0, r4 -10039392: f640 414c movw r1, #3148 ; 0xc4c -10039396: f44f 7240 mov.w r2, #768 ; 0x300 -1003939a: 2303 movs r3, #3 -1003939c: f000 fed4 bl 1003a148 -100393a0: e002 b.n 100393a8 -100393a2: 230a movs r3, #10 -100393a4: f884 3128 strb.w r3, [r4, #296] ; 0x128 -100393a8: 2307 movs r3, #7 -100393aa: f884 3129 strb.w r3, [r4, #297] ; 0x129 -100393ae: 2214 movs r2, #20 -100393b0: 2300 movs r3, #0 -100393b2: f884 312c strb.w r3, [r4, #300] ; 0x12c -100393b6: f884 312f strb.w r3, [r4, #303] ; 0x12f -100393ba: 702a strb r2, [r5, #0] -100393bc: 2208 movs r2, #8 -100393be: 706a strb r2, [r5, #1] -100393c0: 2232 movs r2, #50 ; 0x32 -100393c2: 70ea strb r2, [r5, #3] -100393c4: 2101 movs r1, #1 -100393c6: 221c movs r2, #28 -100393c8: 712a strb r2, [r5, #4] -100393ca: 71ab strb r3, [r5, #6] -100393cc: 71eb strb r3, [r5, #7] -100393ce: 716b strb r3, [r5, #5] -100393d0: 726b strb r3, [r5, #9] -100393d2: 732b strb r3, [r5, #12] -100393d4: 736b strb r3, [r5, #13] -100393d6: 7229 strb r1, [r5, #8] -100393d8: 4620 mov r0, r4 -100393da: f7ff ff8c bl 100392f6 -100393de: 6ae2 ldr r2, [r4, #44] ; 0x2c -100393e0: f246 139f movw r3, #24991 ; 0x619f -100393e4: 4013 ands r3, r2 -100393e6: b143 cbz r3, 100393fa -100393e8: 4620 mov r0, r4 -100393ea: f640 1108 movw r1, #2312 ; 0x908 -100393ee: f04f 32ff mov.w r2, #4294967295 -100393f2: f44f 7302 mov.w r3, #520 ; 0x208 -100393f6: f000 fea7 bl 1003a148 -100393fa: 6ae3 ldr r3, [r4, #44] ; 0x2c -100393fc: f413 4fc0 tst.w r3, #24576 ; 0x6000 -10039400: d007 beq.n 10039412 -10039402: 4620 mov r0, r4 -10039404: f640 6124 movw r1, #3620 ; 0xe24 -10039408: f44f 1240 mov.w r2, #3145728 ; 0x300000 -1003940c: 2301 movs r3, #1 -1003940e: f000 fe9b bl 1003a148 -10039412: f894 3128 ldrb.w r3, [r4, #296] ; 0x128 -10039416: 3330 adds r3, #48 ; 0x30 -10039418: 732b strb r3, [r5, #12] -1003941a: bd38 pop {r3, r4, r5, pc} - -1003941c : -1003941c: e92d 4f70 stmdb sp!, {r4, r5, r6, r8, r9, sl, fp, lr} -10039420: 4689 mov r9, r1 -10039422: 2102 movs r1, #2 -10039424: 4605 mov r5, r0 -10039426: f7ff fe89 bl 1003913c -1003942a: f895 3131 ldrb.w r3, [r5, #305] ; 0x131 -1003942e: 4606 mov r6, r0 -10039430: 2b00 cmp r3, #0 -10039432: f000 8090 beq.w 10039556 -10039436: 7b43 ldrb r3, [r0, #13] -10039438: 2b01 cmp r3, #1 -1003943a: f000 808c beq.w 10039556 -1003943e: 6a6b ldr r3, [r5, #36] ; 0x24 -10039440: 049b lsls r3, r3, #18 -10039442: d405 bmi.n 10039450 -10039444: 7803 ldrb r3, [r0, #0] -10039446: f885 3128 strb.w r3, [r5, #296] ; 0x128 -1003944a: 7843 ldrb r3, [r0, #1] -1003944c: f885 3129 strb.w r3, [r5, #297] ; 0x129 -10039450: 4c42 ldr r4, [pc, #264] ; (1003955c ) -10039452: 2100 movs r1, #0 -10039454: f44f 3000 mov.w r0, #131072 ; 0x20000 -10039458: e9d4 2302 ldrd r2, r3, [r4, #8] -1003945c: 4002 ands r2, r0 -1003945e: 400b ands r3, r1 -10039460: ea52 0103 orrs.w r1, r2, r3 -10039464: d00c beq.n 10039480 -10039466: 4b3e ldr r3, [pc, #248] ; (10039560 ) -10039468: 681b ldr r3, [r3, #0] -1003946a: b14b cbz r3, 10039480 -1003946c: 4b3d ldr r3, [pc, #244] ; (10039564 ) -1003946e: f996 1003 ldrsb.w r1, [r6, #3] -10039472: 6e58 ldr r0, [r3, #100] ; 0x64 -10039474: f995 2128 ldrsb.w r2, [r5, #296] ; 0x128 -10039478: f995 3129 ldrsb.w r3, [r5, #297] ; 0x129 -1003947c: f7e1 fb70 bl 1001ab60 -10039480: 6f2b ldr r3, [r5, #112] ; 0x70 -10039482: 781a ldrb r2, [r3, #0] -10039484: 78f3 ldrb r3, [r6, #3] -10039486: b11a cbz r2, 10039490 -10039488: 2a01 cmp r2, #1 -1003948a: bf04 itt eq -1003948c: 3302 addeq r3, #2 -1003948e: b2db uxtbeq r3, r3 -10039490: fa5f fa83 uxtb.w sl, r3 -10039494: f886 a004 strb.w sl, [r6, #4] -10039498: f44f 3200 mov.w r2, #131072 ; 0x20000 -1003949c: 2300 movs r3, #0 -1003949e: e9d4 0102 ldrd r0, r1, [r4, #8] -100394a2: 4002 ands r2, r0 -100394a4: 400b ands r3, r1 -100394a6: ea52 0103 orrs.w r1, r2, r3 -100394aa: d009 beq.n 100394c0 -100394ac: 4a2c ldr r2, [pc, #176] ; (10039560 ) -100394ae: 6812 ldr r2, [r2, #0] -100394b0: b132 cbz r2, 100394c0 -100394b2: 4a2c ldr r2, [pc, #176] ; (10039564 ) -100394b4: 7ab1 ldrb r1, [r6, #10] -100394b6: 6e90 ldr r0, [r2, #104] ; 0x68 -100394b8: f895 212f ldrb.w r2, [r5, #303] ; 0x12f -100394bc: f7e1 fb50 bl 1001ab60 -100394c0: 7ab2 ldrb r2, [r6, #10] -100394c2: 2a01 cmp r2, #1 -100394c4: d10b bne.n 100394de -100394c6: f895 10b7 ldrb.w r1, [r5, #183] ; 0xb7 -100394ca: f895 212f ldrb.w r2, [r5, #303] ; 0x12f -100394ce: b921 cbnz r1, 100394da -100394d0: b91a cbnz r2, 100394da -100394d2: 217f movs r1, #127 ; 0x7f -100394d4: 4628 mov r0, r5 -100394d6: 460a mov r2, r1 -100394d8: e039 b.n 1003954e -100394da: 2a00 cmp r2, #0 -100394dc: d0f9 beq.n 100394d2 -100394de: 6aea ldr r2, [r5, #44] ; 0x2c -100394e0: f412 4fc4 tst.w r2, #25088 ; 0x6200 -100394e4: d018 beq.n 10039518 -100394e6: 7b32 ldrb r2, [r6, #12] -100394e8: 454a cmp r2, r9 -100394ea: d907 bls.n 100394fc -100394ec: f895 112f ldrb.w r1, [r5, #303] ; 0x12f -100394f0: 2901 cmp r1, #1 -100394f2: d103 bne.n 100394fc -100394f4: ebc9 0202 rsb r2, r9, r2 -100394f8: b2d2 uxtb r2, r2 -100394fa: e000 b.n 100394fe -100394fc: 2200 movs r2, #0 -100394fe: f895 1128 ldrb.w r1, [r5, #296] ; 0x128 -10039502: eb0a 0301 add.w r3, sl, r1 -10039506: 1a9a subs r2, r3, r2 -10039508: f895 3129 ldrb.w r3, [r5, #297] ; 0x129 -1003950c: b2d2 uxtb r2, r2 -1003950e: fa5f fb82 uxtb.w fp, r2 -10039512: 1ad2 subs r2, r2, r3 -10039514: fa5f f882 uxtb.w r8, r2 -10039518: f44f 3200 mov.w r2, #131072 ; 0x20000 -1003951c: 2300 movs r3, #0 -1003951e: e9d4 0102 ldrd r0, r1, [r4, #8] -10039522: 4002 ands r2, r0 -10039524: 400b ands r3, r1 -10039526: ea52 0103 orrs.w r1, r2, r3 -1003952a: fa4f fb8b sxtb.w fp, fp -1003952e: fa4f f488 sxtb.w r4, r8 -10039532: d009 beq.n 10039548 -10039534: 4b0a ldr r3, [pc, #40] ; (10039560 ) -10039536: 681b ldr r3, [r3, #0] -10039538: b133 cbz r3, 10039548 -1003953a: 4b0a ldr r3, [pc, #40] ; (10039564 ) -1003953c: 4649 mov r1, r9 -1003953e: 6ed8 ldr r0, [r3, #108] ; 0x6c -10039540: 465a mov r2, fp -10039542: 4623 mov r3, r4 -10039544: f7e1 fb0c bl 1001ab60 -10039548: 4628 mov r0, r5 -1003954a: 4621 mov r1, r4 -1003954c: 465a mov r2, fp -1003954e: e8bd 4f70 ldmia.w sp!, {r4, r5, r6, r8, r9, sl, fp, lr} -10039552: f7ff beb4 b.w 100392be -10039556: e8bd 8f70 ldmia.w sp!, {r4, r5, r6, r8, r9, sl, fp, pc} -1003955a: bf00 nop -1003955c: 10000720 .word 0x10000720 -10039560: 10044ec0 .word 0x10044ec0 -10039564: 10043a4c .word 0x10043a4c - -10039568 : -10039568: b538 push {r3, r4, r5, lr} -1003956a: 2101 movs r1, #1 -1003956c: 4605 mov r5, r0 -1003956e: f7ff fde5 bl 1003913c -10039572: 4604 mov r4, r0 -10039574: 4628 mov r0, r5 -10039576: f005 f97b bl 1003e870 <__ROM_odm_GetDefaultCrytaltalCap_veneer> -1003957a: 2301 movs r3, #1 -1003957c: 70a3 strb r3, [r4, #2] -1003957e: 2314 movs r3, #20 -10039580: 77a3 strb r3, [r4, #30] -10039582: 230a movs r3, #10 -10039584: 77e3 strb r3, [r4, #31] -10039586: 2350 movs r3, #80 ; 0x50 -10039588: 70e0 strb r0, [r4, #3] -1003958a: 7120 strb r0, [r4, #4] -1003958c: f884 3020 strb.w r3, [r4, #32] -10039590: bd38 pop {r3, r4, r5, pc} - -10039592 : -10039592: 6a42 ldr r2, [r0, #36] ; 0x24 -10039594: 4603 mov r3, r0 -10039596: 0452 lsls r2, r2, #17 -10039598: d50a bpl.n 100395b0 -1003959a: f890 20b7 ldrb.w r2, [r0, #183] ; 0xb7 -1003959e: b112 cbz r2, 100395a6 -100395a0: f890 20bc ldrb.w r2, [r0, #188] ; 0xbc -100395a4: b912 cbnz r2, 100395ac -100395a6: 4618 mov r0, r3 -100395a8: f005 b972 b.w 1003e890 <__ROM_ODM_CfoTrackingReset_veneer> -100395ac: f005 b9c0 b.w 1003e930 <__ROM_odm_CfoTrackingFlow_veneer> -100395b0: 4770 bx lr - -100395b2 : -100395b2: b5f8 push {r3, r4, r5, r6, r7, lr} -100395b4: 4607 mov r7, r0 -100395b6: 460e mov r6, r1 -100395b8: 2101 movs r1, #1 -100395ba: 461d mov r5, r3 -100395bc: 4614 mov r4, r2 -100395be: f7ff fdbd bl 1003913c -100395c2: 6a7b ldr r3, [r7, #36] ; 0x24 -100395c4: 0459 lsls r1, r3, #17 -100395c6: d510 bpl.n 100395ea -100395c8: 78b3 ldrb r3, [r6, #2] -100395ca: b173 cbz r3, 100395ea -100395cc: b13d cbz r5, 100395de -100395ce: f994 3000 ldrsb.w r3, [r4] -100395d2: 2d01 cmp r5, #1 -100395d4: 6083 str r3, [r0, #8] -100395d6: bf84 itt hi -100395d8: f994 3001 ldrsbhi.w r3, [r4, #1] -100395dc: 60c3 strhi r3, [r0, #12] -100395de: 6943 ldr r3, [r0, #20] -100395e0: 1c5a adds r2, r3, #1 -100395e2: bf0c ite eq -100395e4: 2300 moveq r3, #0 -100395e6: 3301 addne r3, #1 -100395e8: 6143 str r3, [r0, #20] -100395ea: bdf8 pop {r3, r4, r5, r6, r7, pc} - -100395ec : -100395ec: 4903 ldr r1, [pc, #12] ; (100395fc ) -100395ee: 2304 movs r3, #4 -100395f0: 610b str r3, [r1, #16] -100395f2: 2200 movs r2, #0 -100395f4: 2300 movs r3, #0 -100395f6: e9c1 2302 strd r2, r3, [r1, #8] -100395fa: 4770 bx lr -100395fc: 10000720 .word 0x10000720 - -10039600 : -10039600: b570 push {r4, r5, r6, lr} -10039602: f890 3580 ldrb.w r3, [r0, #1408] ; 0x580 -10039606: 4604 mov r4, r0 -10039608: 460d mov r5, r1 -1003960a: 6806 ldr r6, [r0, #0] -1003960c: 2b00 cmp r3, #0 -1003960e: d144 bne.n 1003969a -10039610: f890 359c ldrb.w r3, [r0, #1436] ; 0x59c -10039614: 428b cmp r3, r1 -10039616: d02c beq.n 10039672 -10039618: f890 3583 ldrb.w r3, [r0, #1411] ; 0x583 -1003961c: b923 cbnz r3, 10039628 -1003961e: f890 35a3 ldrb.w r3, [r0, #1443] ; 0x5a3 -10039622: 429d cmp r5, r3 -10039624: bf28 it cs -10039626: 461d movcs r5, r3 -10039628: 6a63 ldr r3, [r4, #36] ; 0x24 -1003962a: 049b lsls r3, r3, #18 -1003962c: d503 bpl.n 10039636 -1003962e: 4620 mov r0, r4 -10039630: 4629 mov r1, r5 -10039632: f7ff fef3 bl 1003941c -10039636: f894 3021 ldrb.w r3, [r4, #33] ; 0x21 -1003963a: f013 0f1c tst.w r3, #28 -1003963e: d016 beq.n 1003966e -10039640: 2100 movs r1, #0 -10039642: 4630 mov r0, r6 -10039644: f7f7 fa84 bl 10030b50 -10039648: 6ae2 ldr r2, [r4, #44] ; 0x2c -1003964a: f246 139f movw r3, #24991 ; 0x619f -1003964e: 4013 ands r3, r2 -10039650: 2b00 cmp r3, #0 -10039652: 4620 mov r0, r4 -10039654: f44f 6145 mov.w r1, #3152 ; 0xc50 -10039658: bf0c ite eq -1003965a: f04f 32ff moveq.w r2, #4294967295 -1003965e: 227f movne r2, #127 ; 0x7f -10039660: 462b mov r3, r5 -10039662: f000 fd71 bl 1003a148 -10039666: 4630 mov r0, r6 -10039668: 2101 movs r1, #1 -1003966a: f7f7 fa71 bl 10030b50 -1003966e: f884 559c strb.w r5, [r4, #1436] ; 0x59c -10039672: 4b0a ldr r3, [pc, #40] ; (1003969c ) -10039674: 2201 movs r2, #1 -10039676: e9d3 0102 ldrd r0, r1, [r3, #8] -1003967a: 2300 movs r3, #0 -1003967c: 4002 ands r2, r0 -1003967e: 400b ands r3, r1 -10039680: ea52 0103 orrs.w r1, r2, r3 -10039684: d009 beq.n 1003969a -10039686: 4b06 ldr r3, [pc, #24] ; (100396a0 ) -10039688: 681b ldr r3, [r3, #0] -1003968a: b133 cbz r3, 1003969a -1003968c: 4b05 ldr r3, [pc, #20] ; (100396a4 ) -1003968e: 4629 mov r1, r5 -10039690: 6b18 ldr r0, [r3, #48] ; 0x30 -10039692: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -10039696: f7e1 ba63 b.w 1001ab60 -1003969a: bd70 pop {r4, r5, r6, pc} -1003969c: 10000720 .word 0x10000720 -100396a0: 10044ec0 .word 0x10044ec0 -100396a4: 10043a4c .word 0x10043a4c - -100396a8 : -100396a8: b570 push {r4, r5, r6, lr} -100396aa: 460d mov r5, r1 -100396ac: 2100 movs r1, #0 -100396ae: 4604 mov r4, r0 -100396b0: 4616 mov r6, r2 -100396b2: f7ff fd43 bl 1003913c -100396b6: 69c1 ldr r1, [r0, #28] -100396b8: f242 7210 movw r2, #10000 ; 0x2710 -100396bc: 4291 cmp r1, r2 -100396be: f894 35a4 ldrb.w r3, [r4, #1444] ; 0x5a4 -100396c2: d91f bls.n 10039704 -100396c4: f894 25ab ldrb.w r2, [r4, #1451] ; 0x5ab -100396c8: 2a03 cmp r2, #3 -100396ca: bf1c itt ne -100396cc: 3201 addne r2, #1 -100396ce: f884 25ab strbne.w r2, [r4, #1451] ; 0x5ab -100396d2: f894 25ac ldrb.w r2, [r4, #1452] ; 0x5ac -100396d6: 42b2 cmp r2, r6 -100396d8: d204 bcs.n 100396e4 -100396da: 2201 movs r2, #1 -100396dc: f884 65ac strb.w r6, [r4, #1452] ; 0x5ac -100396e0: f884 25ab strb.w r2, [r4, #1451] ; 0x5ab -100396e4: f894 25ab ldrb.w r2, [r4, #1451] ; 0x5ab -100396e8: 2a02 cmp r2, #2 -100396ea: d924 bls.n 10039736 -100396ec: f894 25ac ldrb.w r2, [r4, #1452] ; 0x5ac -100396f0: f894 35a3 ldrb.w r3, [r4, #1443] ; 0x5a3 -100396f4: 1c51 adds r1, r2, #1 -100396f6: 4299 cmp r1, r3 -100396f8: bfbc itt lt -100396fa: 1c93 addlt r3, r2, #2 -100396fc: b2db uxtblt r3, r3 -100396fe: f44f 62e1 mov.w r2, #1800 ; 0x708 -10039702: e003 b.n 1003970c -10039704: f8d4 25b0 ldr.w r2, [r4, #1456] ; 0x5b0 -10039708: b11a cbz r2, 10039712 -1003970a: 3a01 subs r2, #1 -1003970c: f8c4 25b0 str.w r2, [r4, #1456] ; 0x5b0 -10039710: e011 b.n 10039736 -10039712: f894 15ab ldrb.w r1, [r4, #1451] ; 0x5ab -10039716: 2902 cmp r1, #2 -10039718: d80b bhi.n 10039732 -1003971a: f894 35ac ldrb.w r3, [r4, #1452] ; 0x5ac -1003971e: 1e5a subs r2, r3, #1 -10039720: 42aa cmp r2, r5 -10039722: bfcd iteet gt -10039724: 1e9a subgt r2, r3, #2 -10039726: f884 55ac strble.w r5, [r4, #1452] ; 0x5ac -1003972a: 462b movle r3, r5 -1003972c: f884 25ac strbgt.w r2, [r4, #1452] ; 0x5ac -10039730: e001 b.n 10039736 -10039732: f884 25ab strb.w r2, [r4, #1451] ; 0x5ab -10039736: 4618 mov r0, r3 -10039738: bd70 pop {r4, r5, r6, pc} - ... - -1003973c : -1003973c: b570 push {r4, r5, r6, lr} -1003973e: f44f 6140 mov.w r1, #3072 ; 0xc00 -10039742: 4605 mov r5, r0 -10039744: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 -10039748: 2301 movs r3, #1 -1003974a: f000 fcfd bl 1003a148 -1003974e: 4628 mov r0, r5 -10039750: 2301 movs r3, #1 -10039752: f44f 6150 mov.w r1, #3328 ; 0xd00 -10039756: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 -1003975a: f000 fcf5 bl 1003a148 -1003975e: 4628 mov r0, r5 -10039760: f44f 614f mov.w r1, #3312 ; 0xcf0 -10039764: f04f 32ff mov.w r2, #4294967295 -10039768: f000 fcf1 bl 1003a14e -1003976c: 4c60 ldr r4, [pc, #384] ; (100398f0 ) -1003976e: b283 uxth r3, r0 -10039770: 0c00 lsrs r0, r0, #16 -10039772: 6260 str r0, [r4, #36] ; 0x24 -10039774: f44f 615a mov.w r1, #3488 ; 0xda0 -10039778: 4628 mov r0, r5 -1003977a: f04f 32ff mov.w r2, #4294967295 -1003977e: 6223 str r3, [r4, #32] -10039780: f000 fce5 bl 1003a14e -10039784: b283 uxth r3, r0 -10039786: 0c00 lsrs r0, r0, #16 -10039788: 6020 str r0, [r4, #0] -1003978a: f640 51a4 movw r1, #3492 ; 0xda4 -1003978e: 4628 mov r0, r5 -10039790: f04f 32ff mov.w r2, #4294967295 -10039794: 62a3 str r3, [r4, #40] ; 0x28 -10039796: f000 fcda bl 1003a14e -1003979a: b283 uxth r3, r0 -1003979c: 0c00 lsrs r0, r0, #16 -1003979e: 60a0 str r0, [r4, #8] -100397a0: f640 51a8 movw r1, #3496 ; 0xda8 -100397a4: 4628 mov r0, r5 -100397a6: f04f 32ff mov.w r2, #4294967295 -100397aa: 6063 str r3, [r4, #4] -100397ac: f000 fccf bl 1003a14e -100397b0: e894 000c ldmia.w r4, {r2, r3} -100397b4: 441a add r2, r3 -100397b6: 68a3 ldr r3, [r4, #8] -100397b8: b280 uxth r0, r0 -100397ba: 441a add r2, r3 -100397bc: 6a23 ldr r3, [r4, #32] -100397be: 60e0 str r0, [r4, #12] -100397c0: 441a add r2, r3 -100397c2: 6a63 ldr r3, [r4, #36] ; 0x24 -100397c4: f640 212c movw r1, #2604 ; 0xa2c -100397c8: 4413 add r3, r2 -100397ca: 4418 add r0, r3 -100397cc: 6120 str r0, [r4, #16] -100397ce: f44f 5280 mov.w r2, #4096 ; 0x1000 -100397d2: 4628 mov r0, r5 -100397d4: 2301 movs r3, #1 -100397d6: f000 fcb7 bl 1003a148 -100397da: 2301 movs r3, #1 -100397dc: 4628 mov r0, r5 -100397de: f640 212c movw r1, #2604 ; 0xa2c -100397e2: f44f 4280 mov.w r2, #16384 ; 0x4000 -100397e6: f000 fcaf bl 1003a148 -100397ea: 4628 mov r0, r5 -100397ec: f640 215c movw r1, #2652 ; 0xa5c -100397f0: 22ff movs r2, #255 ; 0xff -100397f2: f000 fcac bl 1003a14e -100397f6: f640 2158 movw r1, #2648 ; 0xa58 -100397fa: 61a0 str r0, [r4, #24] -100397fc: f04f 427f mov.w r2, #4278190080 ; 0xff000000 -10039800: 4628 mov r0, r5 -10039802: f000 fca4 bl 1003a14e -10039806: 69a3 ldr r3, [r4, #24] -10039808: 0200 lsls r0, r0, #8 -1003980a: b280 uxth r0, r0 -1003980c: 4403 add r3, r0 -1003980e: f44f 6126 mov.w r1, #2656 ; 0xa60 -10039812: 4628 mov r0, r5 -10039814: f04f 32ff mov.w r2, #4294967295 -10039818: 61a3 str r3, [r4, #24] -1003981a: f000 fc98 bl 1003a14e -1003981e: f3c0 2307 ubfx r3, r0, #8, #8 -10039822: 0200 lsls r0, r0, #8 -10039824: b280 uxth r0, r0 -10039826: 4318 orrs r0, r3 -10039828: 6a62 ldr r2, [r4, #36] ; 0x24 -1003982a: 6a23 ldr r3, [r4, #32] -1003982c: 62e0 str r0, [r4, #44] ; 0x2c -1003982e: 441a add r2, r3 -10039830: 6823 ldr r3, [r4, #0] -10039832: f640 410c movw r1, #3084 ; 0xc0c -10039836: 441a add r2, r3 -10039838: 6863 ldr r3, [r4, #4] -1003983a: 441a add r2, r3 -1003983c: 68a3 ldr r3, [r4, #8] -1003983e: 441a add r2, r3 -10039840: 68e3 ldr r3, [r4, #12] -10039842: 441a add r2, r3 -10039844: 69a3 ldr r3, [r4, #24] -10039846: 4413 add r3, r2 -10039848: 61e3 str r3, [r4, #28] -1003984a: 6aa3 ldr r3, [r4, #40] ; 0x28 -1003984c: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 -10039850: 4418 add r0, r3 -10039852: 6320 str r0, [r4, #48] ; 0x30 -10039854: 2301 movs r3, #1 -10039856: 4628 mov r0, r5 -10039858: f000 fc76 bl 1003a148 -1003985c: 4628 mov r0, r5 -1003985e: f640 410c movw r1, #3084 ; 0xc0c -10039862: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 -10039866: 2300 movs r3, #0 -10039868: f000 fc6e bl 1003a148 -1003986c: 4628 mov r0, r5 -1003986e: f44f 6150 mov.w r1, #3328 ; 0xd00 -10039872: f04f 6200 mov.w r2, #134217728 ; 0x8000000 -10039876: 2301 movs r3, #1 -10039878: f000 fc66 bl 1003a148 -1003987c: 4628 mov r0, r5 -1003987e: f44f 6150 mov.w r1, #3328 ; 0xd00 -10039882: f04f 6200 mov.w r2, #134217728 ; 0x8000000 -10039886: 2300 movs r3, #0 -10039888: f000 fc5e bl 1003a148 -1003988c: 4628 mov r0, r5 -1003988e: f44f 6140 mov.w r1, #3072 ; 0xc00 -10039892: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 -10039896: 2300 movs r3, #0 -10039898: f000 fc56 bl 1003a148 -1003989c: 4628 mov r0, r5 -1003989e: f44f 6150 mov.w r1, #3328 ; 0xd00 -100398a2: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 -100398a6: 2300 movs r3, #0 -100398a8: f000 fc4e bl 1003a148 -100398ac: 4628 mov r0, r5 -100398ae: f640 212c movw r1, #2604 ; 0xa2c -100398b2: f44f 5240 mov.w r2, #12288 ; 0x3000 -100398b6: 2300 movs r3, #0 -100398b8: f000 fc46 bl 1003a148 -100398bc: 4628 mov r0, r5 -100398be: f640 212c movw r1, #2604 ; 0xa2c -100398c2: f44f 5240 mov.w r2, #12288 ; 0x3000 -100398c6: 2302 movs r3, #2 -100398c8: f000 fc3e bl 1003a148 -100398cc: 4628 mov r0, r5 -100398ce: f640 212c movw r1, #2604 ; 0xa2c -100398d2: f44f 4240 mov.w r2, #49152 ; 0xc000 -100398d6: 2300 movs r3, #0 -100398d8: f000 fc36 bl 1003a148 -100398dc: 4628 mov r0, r5 -100398de: f640 212c movw r1, #2604 ; 0xa2c -100398e2: f44f 4240 mov.w r2, #49152 ; 0xc000 -100398e6: 2302 movs r3, #2 -100398e8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -100398ec: f000 bc2c b.w 1003a148 -100398f0: 100006e0 .word 0x100006e0 - -100398f4 : -100398f4: b570 push {r4, r5, r6, lr} -100398f6: f890 35a7 ldrb.w r3, [r0, #1447] ; 0x5a7 -100398fa: 4604 mov r4, r0 -100398fc: 428b cmp r3, r1 -100398fe: 460d mov r5, r1 -10039900: 6806 ldr r6, [r0, #0] -10039902: d00d beq.n 10039920 -10039904: 2100 movs r1, #0 -10039906: 4630 mov r0, r6 -10039908: f7f7 f922 bl 10030b50 -1003990c: 4620 mov r0, r4 -1003990e: f640 210a movw r1, #2570 ; 0xa0a -10039912: 462a mov r2, r5 -10039914: f000 fc0c bl 1003a130 -10039918: 4630 mov r0, r6 -1003991a: 2101 movs r1, #1 -1003991c: f7f7 f918 bl 10030b50 -10039920: f894 35a7 ldrb.w r3, [r4, #1447] ; 0x5a7 -10039924: f884 55a7 strb.w r5, [r4, #1447] ; 0x5a7 -10039928: f884 35a6 strb.w r3, [r4, #1446] ; 0x5a6 -1003992c: bd70 pop {r4, r5, r6, pc} - -1003992e : -1003992e: 6ac2 ldr r2, [r0, #44] ; 0x2c -10039930: b538 push {r3, r4, r5, lr} -10039932: f246 139f movw r3, #24991 ; 0x619f -10039936: 2500 movs r5, #0 -10039938: 4013 ands r3, r2 -1003993a: 42ab cmp r3, r5 -1003993c: bf0c ite eq -1003993e: f04f 32ff moveq.w r2, #4294967295 -10039942: 227f movne r2, #127 ; 0x7f -10039944: f880 5580 strb.w r5, [r0, #1408] ; 0x580 -10039948: f880 5581 strb.w r5, [r0, #1409] ; 0x581 -1003994c: f880 5582 strb.w r5, [r0, #1410] ; 0x582 -10039950: f44f 6145 mov.w r1, #3152 ; 0xc50 -10039954: 4604 mov r4, r0 -10039956: f000 fbfa bl 1003a14e -1003995a: 2323 movs r3, #35 ; 0x23 -1003995c: f8c4 3588 str.w r3, [r4, #1416] ; 0x588 -10039960: 2328 movs r3, #40 ; 0x28 -10039962: f8c4 358c str.w r3, [r4, #1420] ; 0x58c -10039966: f44f 73c8 mov.w r3, #400 ; 0x190 -1003996a: f8c4 3590 str.w r3, [r4, #1424] ; 0x590 -1003996e: f44f 737a mov.w r3, #1000 ; 0x3e8 -10039972: f8c4 3594 str.w r3, [r4, #1428] ; 0x594 -10039976: 230a movs r3, #10 -10039978: f884 35a0 strb.w r3, [r4, #1440] ; 0x5a0 -1003997c: 230c movs r3, #12 -1003997e: f884 35a1 strb.w r3, [r4, #1441] ; 0x5a1 -10039982: 23fc movs r3, #252 ; 0xfc -10039984: f884 35a2 strb.w r3, [r4, #1442] ; 0x5a2 -10039988: 23ff movs r3, #255 ; 0xff -1003998a: 2232 movs r2, #50 ; 0x32 -1003998c: f884 35a6 strb.w r3, [r4, #1446] ; 0x5a6 -10039990: 2383 movs r3, #131 ; 0x83 -10039992: f884 35a7 strb.w r3, [r4, #1447] ; 0x5a7 -10039996: f884 259e strb.w r2, [r4, #1438] ; 0x59e -1003999a: 2320 movs r3, #32 -1003999c: 223e movs r2, #62 ; 0x3e -1003999e: f884 059c strb.w r0, [r4, #1436] ; 0x59c -100399a2: f884 35ac strb.w r3, [r4, #1452] ; 0x5ac -100399a6: f884 55ab strb.w r5, [r4, #1451] ; 0x5ab -100399aa: f884 55b6 strb.w r5, [r4, #1462] ; 0x5b6 -100399ae: f884 55b7 strb.w r5, [r4, #1463] ; 0x5b7 -100399b2: f884 35b4 strb.w r3, [r4, #1460] ; 0x5b4 -100399b6: f884 35b5 strb.w r3, [r4, #1461] ; 0x5b5 -100399ba: f884 25a3 strb.w r2, [r4, #1443] ; 0x5a3 -100399be: f884 35a4 strb.w r3, [r4, #1444] ; 0x5a4 -100399c2: f8c4 55b0 str.w r5, [r4, #1456] ; 0x5b0 -100399c6: bd38 pop {r3, r4, r5, pc} - -100399c8 : -100399c8: 6a43 ldr r3, [r0, #36] ; 0x24 -100399ca: f003 0309 and.w r3, r3, #9 -100399ce: 2b09 cmp r3, #9 -100399d0: d108 bne.n 100399e4 -100399d2: f8d0 3088 ldr.w r3, [r0, #136] ; 0x88 -100399d6: 781a ldrb r2, [r3, #0] -100399d8: b922 cbnz r2, 100399e4 -100399da: f890 3582 ldrb.w r3, [r0, #1410] ; 0x582 -100399de: b113 cbz r3, 100399e6 -100399e0: f880 2582 strb.w r2, [r0, #1410] ; 0x582 -100399e4: 2301 movs r3, #1 -100399e6: 4618 mov r0, r3 -100399e8: 4770 bx lr - ... - -100399ec : -100399ec: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -100399f0: 2100 movs r1, #0 -100399f2: 4680 mov r8, r0 -100399f4: f7ff fba2 bl 1003913c -100399f8: 4683 mov fp, r0 -100399fa: 4640 mov r0, r8 -100399fc: f898 40b9 ldrb.w r4, [r8, #185] ; 0xb9 -10039a00: f7ff ffe2 bl 100399c8 -10039a04: 2801 cmp r0, #1 -10039a06: d04d beq.n 10039aa4 -10039a08: f8db 301c ldr.w r3, [fp, #28] -10039a0c: 2b1e cmp r3, #30 -10039a0e: d902 bls.n 10039a16 -10039a10: f104 0309 add.w r3, r4, #9 -10039a14: e007 b.n 10039a26 -10039a16: 2b0f cmp r3, #15 -10039a18: d901 bls.n 10039a1e -10039a1a: 1de3 adds r3, r4, #7 -10039a1c: e003 b.n 10039a26 -10039a1e: 2b03 cmp r3, #3 -10039a20: bf8c ite hi -10039a22: 1d63 addhi r3, r4, #5 -10039a24: 1ce3 addls r3, r4, #3 -10039a26: f898 90b9 ldrb.w r9, [r8, #185] ; 0xb9 -10039a2a: f898 2759 ldrb.w r2, [r8, #1881] ; 0x759 -10039a2e: f1b9 0f2a cmp.w r9, #42 ; 0x2a -10039a32: bfc6 itte gt -10039a34: f1a9 090a subgt.w r9, r9, #10 -10039a38: fa5f f989 uxtbgt.w r9, r9 -10039a3c: f04f 0920 movle.w r9, #32 -10039a40: 2a00 cmp r2, #0 -10039a42: b2db uxtb r3, r3 -10039a44: bf0c ite eq -10039a46: f04f 0a46 moveq.w sl, #70 ; 0x46 -10039a4a: f04f 0a30 movne.w sl, #48 ; 0x30 -10039a4e: 4553 cmp r3, sl -10039a50: d803 bhi.n 10039a5a -10039a52: 4599 cmp r9, r3 -10039a54: bf28 it cs -10039a56: 464b movcs r3, r9 -10039a58: e000 b.n 10039a5c -10039a5a: 4653 mov r3, sl -10039a5c: 4a13 ldr r2, [pc, #76] ; (10039aac ) -10039a5e: 2401 movs r4, #1 -10039a60: 2500 movs r5, #0 -10039a62: e9d2 6702 ldrd r6, r7, [r2, #8] -10039a66: 4034 ands r4, r6 -10039a68: 403d ands r5, r7 -10039a6a: ea54 0205 orrs.w r2, r4, r5 -10039a6e: d012 beq.n 10039a96 -10039a70: f898 13e8 ldrb.w r1, [r8, #1000] ; 0x3e8 -10039a74: 480e ldr r0, [pc, #56] ; (10039ab0 ) -10039a76: 9301 str r3, [sp, #4] -10039a78: f7e1 f872 bl 1001ab60 -10039a7c: f898 10b9 ldrb.w r1, [r8, #185] ; 0xb9 -10039a80: f8db 201c ldr.w r2, [fp, #28] -10039a84: 480b ldr r0, [pc, #44] ; (10039ab4 ) -10039a86: f7e1 f86b bl 1001ab60 -10039a8a: 480b ldr r0, [pc, #44] ; (10039ab8 ) -10039a8c: 4651 mov r1, sl -10039a8e: 464a mov r2, r9 -10039a90: f7e1 f866 bl 1001ab60 -10039a94: 9b01 ldr r3, [sp, #4] -10039a96: 4640 mov r0, r8 -10039a98: 4619 mov r1, r3 -10039a9a: b003 add sp, #12 -10039a9c: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10039aa0: f7ff bdae b.w 10039600 -10039aa4: b003 add sp, #12 -10039aa6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10039aaa: bf00 nop -10039aac: 10000720 .word 0x10000720 -10039ab0: 10043d94 .word 0x10043d94 -10039ab4: 10043de8 .word 0x10043de8 -10039ab8: 10043da1 .word 0x10043da1 - -10039abc : -10039abc: f890 30b7 ldrb.w r3, [r0, #183] ; 0xb7 -10039ac0: b143 cbz r3, 10039ad4 -10039ac2: f44f 7340 mov.w r3, #768 ; 0x300 -10039ac6: f44f 7000 mov.w r0, #512 ; 0x200 -10039aca: e881 0009 stmia.w r1, {r0, r3} -10039ace: f44f 6380 mov.w r3, #1024 ; 0x400 -10039ad2: e007 b.n 10039ae4 -10039ad4: f44f 637a mov.w r3, #4000 ; 0xfa0 -10039ad8: f44f 62fa mov.w r2, #2000 ; 0x7d0 -10039adc: e881 000c stmia.w r1, {r2, r3} -10039ae0: f241 3388 movw r3, #5000 ; 0x1388 -10039ae4: 608b str r3, [r1, #8] -10039ae6: 4770 bx lr - -10039ae8 : -10039ae8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -10039aec: 2100 movs r1, #0 -10039aee: b087 sub sp, #28 -10039af0: 4604 mov r4, r0 -10039af2: f7ff fb23 bl 1003913c -10039af6: 4607 mov r7, r0 -10039af8: 4620 mov r0, r4 -10039afa: f894 559c ldrb.w r5, [r4, #1436] ; 0x59c -10039afe: f7ff ff63 bl 100399c8 -10039b02: 2801 cmp r0, #1 -10039b04: f000 8126 beq.w 10039d54 -10039b08: f894 312d ldrb.w r3, [r4, #301] ; 0x12d -10039b0c: 2b01 cmp r3, #1 -10039b0e: f894 30b7 ldrb.w r3, [r4, #183] ; 0xb7 -10039b12: bf0c ite eq -10039b14: f894 812c ldrbeq.w r8, [r4, #300] ; 0x12c -10039b18: f04f 0800 movne.w r8, #0 -10039b1c: b13b cbz r3, 10039b2e -10039b1e: f894 a5b6 ldrb.w sl, [r4, #1462] ; 0x5b6 -10039b22: f1da 0a01 rsbs sl, sl, #1 -10039b26: bf38 it cc -10039b28: f04f 0a00 movcc.w sl, #0 -10039b2c: e000 b.n 10039b30 -10039b2e: 469a mov sl, r3 -10039b30: fa5f fa8a uxtb.w sl, sl -10039b34: b943 cbnz r3, 10039b48 -10039b36: f894 95b6 ldrb.w r9, [r4, #1462] ; 0x5b6 -10039b3a: f1b9 0101 subs.w r1, r9, #1 -10039b3e: f1d1 0900 rsbs r9, r1, #0 -10039b42: eb59 0901 adcs.w r9, r9, r1 -10039b46: e001 b.n 10039b4c -10039b48: f04f 0900 mov.w r9, #0 -10039b4c: f8d4 20a8 ldr.w r2, [r4, #168] ; 0xa8 -10039b50: fa5f f989 uxtb.w r9, r9 -10039b54: 7812 ldrb r2, [r2, #0] -10039b56: b18a cbz r2, 10039b7c -10039b58: f8d4 20ac ldr.w r2, [r4, #172] ; 0xac -10039b5c: 7811 ldrb r1, [r2, #0] -10039b5e: 060a lsls r2, r1, #24 -10039b60: d50c bpl.n 10039b7c -10039b62: 4a7e ldr r2, [pc, #504] ; (10039d5c ) -10039b64: 6813 ldr r3, [r2, #0] -10039b66: 1c58 adds r0, r3, #1 -10039b68: 2b02 cmp r3, #2 -10039b6a: 6010 str r0, [r2, #0] -10039b6c: f200 80f2 bhi.w 10039d54 -10039b70: 3176 adds r1, #118 ; 0x76 -10039b72: 4620 mov r0, r4 -10039b74: b2c9 uxtb r1, r1 -10039b76: f7ff fd43 bl 10039600 -10039b7a: e0eb b.n 10039d54 -10039b7c: b1bb cbz r3, 10039bae -10039b7e: f894 30c2 ldrb.w r3, [r4, #194] ; 0xc2 -10039b82: f894 60b9 ldrb.w r6, [r4, #185] ; 0xb9 -10039b86: 2b01 cmp r3, #1 -10039b88: bf14 ite ne -10039b8a: 230f movne r3, #15 -10039b8c: 230a moveq r3, #10 -10039b8e: 4433 add r3, r6 -10039b90: 2b5a cmp r3, #90 ; 0x5a -10039b92: dd01 ble.n 10039b98 -10039b94: 235a movs r3, #90 ; 0x5a -10039b96: e002 b.n 10039b9e -10039b98: 2b1f cmp r3, #31 -10039b9a: bfd8 it le -10039b9c: 2320 movle r3, #32 -10039b9e: 2e1f cmp r6, #31 -10039ba0: f884 35a3 strb.w r3, [r4, #1443] ; 0x5a3 -10039ba4: d906 bls.n 10039bb4 -10039ba6: 2e3e cmp r6, #62 ; 0x3e -10039ba8: bf28 it cs -10039baa: 263e movcs r6, #62 ; 0x3e -10039bac: e003 b.n 10039bb6 -10039bae: 232a movs r3, #42 ; 0x2a -10039bb0: f884 35a3 strb.w r3, [r4, #1443] ; 0x5a3 -10039bb4: 2620 movs r6, #32 -10039bb6: f8df b1bc ldr.w fp, [pc, #444] ; 10039d74 -10039bba: 2100 movs r1, #0 -10039bbc: 2001 movs r0, #1 -10039bbe: e9db 2302 ldrd r2, r3, [fp, #8] -10039bc2: 4002 ands r2, r0 -10039bc4: 400b ands r3, r1 -10039bc6: ea52 0103 orrs.w r1, r2, r3 -10039bca: d014 beq.n 10039bf6 -10039bcc: f894 13e8 ldrb.w r1, [r4, #1000] ; 0x3e8 -10039bd0: 4863 ldr r0, [pc, #396] ; (10039d60 ) -10039bd2: f7e0 ffc5 bl 1001ab60 -10039bd6: 69f9 ldr r1, [r7, #28] -10039bd8: f894 20b7 ldrb.w r2, [r4, #183] ; 0xb7 -10039bdc: 9100 str r1, [sp, #0] -10039bde: f894 30b9 ldrb.w r3, [r4, #185] ; 0xb9 -10039be2: 4629 mov r1, r5 -10039be4: 485f ldr r0, [pc, #380] ; (10039d64 ) -10039be6: f7e0 ffbb bl 1001ab60 -10039bea: 485f ldr r0, [pc, #380] ; (10039d68 ) -10039bec: f894 15a3 ldrb.w r1, [r4, #1443] ; 0x5a3 -10039bf0: 4632 mov r2, r6 -10039bf2: f7e0 ffb5 bl 1001ab60 -10039bf6: f894 30b7 ldrb.w r3, [r4, #183] ; 0xb7 -10039bfa: b93b cbnz r3, 10039c0c -10039bfc: f884 65a4 strb.w r6, [r4, #1444] ; 0x5a4 -10039c00: f1b9 0f00 cmp.w r9, #0 -10039c04: d017 beq.n 10039c36 -10039c06: f884 65ac strb.w r6, [r4, #1452] ; 0x5ac -10039c0a: e014 b.n 10039c36 -10039c0c: 2100 movs r1, #0 -10039c0e: 2001 movs r0, #1 -10039c10: e9db 2302 ldrd r2, r3, [fp, #8] -10039c14: 4002 ands r2, r0 -10039c16: 400b ands r3, r1 -10039c18: ea52 0103 orrs.w r1, r2, r3 -10039c1c: d004 beq.n 10039c28 -10039c1e: 4853 ldr r0, [pc, #332] ; (10039d6c ) -10039c20: f894 15ac ldrb.w r1, [r4, #1452] ; 0x5ac -10039c24: f7e0 ff9c bl 1001ab60 -10039c28: 4620 mov r0, r4 -10039c2a: 4631 mov r1, r6 -10039c2c: 462a mov r2, r5 -10039c2e: f7ff fd3b bl 100396a8 -10039c32: f884 05a4 strb.w r0, [r4, #1444] ; 0x5a4 -10039c36: 2201 movs r2, #1 -10039c38: 2300 movs r3, #0 -10039c3a: e9db 0102 ldrd r0, r1, [fp, #8] -10039c3e: 4002 ands r2, r0 -10039c40: 400b ands r3, r1 -10039c42: ea52 0103 orrs.w r1, r2, r3 -10039c46: d004 beq.n 10039c52 -10039c48: 4849 ldr r0, [pc, #292] ; (10039d70 ) -10039c4a: f894 15a4 ldrb.w r1, [r4, #1444] ; 0x5a4 -10039c4e: f7e0 ff87 bl 1001ab60 -10039c52: f894 30b7 ldrb.w r3, [r4, #183] ; 0xb7 -10039c56: b163 cbz r3, 10039c72 -10039c58: f1ba 0f00 cmp.w sl, #0 -10039c5c: d109 bne.n 10039c72 -10039c5e: f894 33e8 ldrb.w r3, [r4, #1000] ; 0x3e8 -10039c62: 2b04 cmp r3, #4 -10039c64: d805 bhi.n 10039c72 -10039c66: f894 30b8 ldrb.w r3, [r4, #184] ; 0xb8 -10039c6a: b113 cbz r3, 10039c72 -10039c6c: 2320 movs r3, #32 -10039c6e: f884 35a4 strb.w r3, [r4, #1444] ; 0x5a4 -10039c72: f894 35a3 ldrb.w r3, [r4, #1443] ; 0x5a3 -10039c76: f894 25a4 ldrb.w r2, [r4, #1444] ; 0x5a4 -10039c7a: a903 add r1, sp, #12 -10039c7c: 429a cmp r2, r3 -10039c7e: bf88 it hi -10039c80: f884 35a4 strbhi.w r3, [r4, #1444] ; 0x5a4 -10039c84: 4620 mov r0, r4 -10039c86: f7ff ff19 bl 10039abc -10039c8a: f894 30b7 ldrb.w r3, [r4, #183] ; 0xb7 -10039c8e: f894 15a4 ldrb.w r1, [r4, #1444] ; 0x5a4 -10039c92: b373 cbz r3, 10039cf2 -10039c94: f1ba 0f00 cmp.w sl, #0 -10039c98: d00e beq.n 10039cb8 -10039c9a: 2300 movs r3, #0 -10039c9c: f884 35ab strb.w r3, [r4, #1451] ; 0x5ab -10039ca0: f894 30b9 ldrb.w r3, [r4, #185] ; 0xb9 -10039ca4: 2b3d cmp r3, #61 ; 0x3d -10039ca6: d803 bhi.n 10039cb0 -10039ca8: 42ab cmp r3, r5 -10039caa: bf28 it cs -10039cac: 461d movcs r5, r3 -10039cae: e02d b.n 10039d0c -10039cb0: 2d3d cmp r5, #61 ; 0x3d -10039cb2: bf98 it ls -10039cb4: 253e movls r5, #62 ; 0x3e -10039cb6: e031 b.n 10039d1c -10039cb8: 69fb ldr r3, [r7, #28] -10039cba: 9a05 ldr r2, [sp, #20] -10039cbc: 4293 cmp r3, r2 -10039cbe: d901 bls.n 10039cc4 -10039cc0: 3504 adds r5, #4 -10039cc2: e008 b.n 10039cd6 -10039cc4: 9a04 ldr r2, [sp, #16] -10039cc6: 4293 cmp r3, r2 -10039cc8: d901 bls.n 10039cce -10039cca: 3502 adds r5, #2 -10039ccc: e003 b.n 10039cd6 -10039cce: 9a03 ldr r2, [sp, #12] -10039cd0: 4293 cmp r3, r2 -10039cd2: d201 bcs.n 10039cd8 -10039cd4: 3d02 subs r5, #2 -10039cd6: b2ed uxtb r5, r5 -10039cd8: f894 23e8 ldrb.w r2, [r4, #1000] ; 0x3e8 -10039cdc: 2a04 cmp r2, #4 -10039cde: d81d bhi.n 10039d1c -10039ce0: f5b3 7f40 cmp.w r3, #768 ; 0x300 -10039ce4: d21a bcs.n 10039d1c -10039ce6: f894 30b8 ldrb.w r3, [r4, #184] ; 0xb8 -10039cea: 2b00 cmp r3, #0 -10039cec: bf18 it ne -10039cee: 460d movne r5, r1 -10039cf0: e014 b.n 10039d1c -10039cf2: f1b9 0f00 cmp.w r9, #0 -10039cf6: d110 bne.n 10039d1a -10039cf8: 69fb ldr r3, [r7, #28] -10039cfa: 9a05 ldr r2, [sp, #20] -10039cfc: 4293 cmp r3, r2 -10039cfe: d901 bls.n 10039d04 -10039d00: 3504 adds r5, #4 -10039d02: e003 b.n 10039d0c -10039d04: 9a04 ldr r2, [sp, #16] -10039d06: 4293 cmp r3, r2 -10039d08: d902 bls.n 10039d10 -10039d0a: 3502 adds r5, #2 -10039d0c: b2ed uxtb r5, r5 -10039d0e: e005 b.n 10039d1c -10039d10: 9a03 ldr r2, [sp, #12] -10039d12: 4293 cmp r3, r2 -10039d14: d202 bcs.n 10039d1c -10039d16: 3d02 subs r5, #2 -10039d18: e7f8 b.n 10039d0c -10039d1a: 2520 movs r5, #32 -10039d1c: 428d cmp r5, r1 -10039d1e: bf28 it cs -10039d20: 4629 movcs r1, r5 -10039d22: f894 35a3 ldrb.w r3, [r4, #1443] ; 0x5a3 -10039d26: b2c9 uxtb r1, r1 -10039d28: 4299 cmp r1, r3 -10039d2a: bf28 it cs -10039d2c: 4619 movcs r1, r3 -10039d2e: 6a63 ldr r3, [r4, #36] ; 0x24 -10039d30: 049b lsls r3, r3, #18 -10039d32: d506 bpl.n 10039d42 -10039d34: f894 312d ldrb.w r3, [r4, #301] ; 0x12d -10039d38: 2b01 cmp r3, #1 -10039d3a: d102 bne.n 10039d42 -10039d3c: 4541 cmp r1, r8 -10039d3e: bf28 it cs -10039d40: 4641 movcs r1, r8 -10039d42: 4620 mov r0, r4 -10039d44: f7ff fc5c bl 10039600 -10039d48: f894 30b7 ldrb.w r3, [r4, #183] ; 0xb7 -10039d4c: f884 65b4 strb.w r6, [r4, #1460] ; 0x5b4 -10039d50: f884 35b6 strb.w r3, [r4, #1462] ; 0x5b6 -10039d54: b007 add sp, #28 -10039d56: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -10039d5a: bf00 nop -10039d5c: 100458f8 .word 0x100458f8 -10039d60: 10043d94 .word 0x10043d94 -10039d64: 10043dce .word 0x10043dce -10039d68: 10043da1 .word 0x10043da1 -10039d6c: 10043dfc .word 0x10043dfc -10039d70: 10043dba .word 0x10043dba -10039d74: 10000720 .word 0x10000720 - -10039d78 : -10039d78: 6803 ldr r3, [r0, #0] -10039d7a: f503 52a0 add.w r2, r3, #5120 ; 0x1400 -10039d7e: f892 1035 ldrb.w r1, [r2, #53] ; 0x35 -10039d82: b111 cbz r1, 10039d8a -10039d84: 6f12 ldr r2, [r2, #112] ; 0x70 -10039d86: 2a02 cmp r2, #2 -10039d88: d00a beq.n 10039da0 -10039d8a: 6a42 ldr r2, [r0, #36] ; 0x24 -10039d8c: 0712 lsls r2, r2, #28 -10039d8e: d507 bpl.n 10039da0 -10039d90: f241 62c8 movw r2, #5832 ; 0x16c8 -10039d94: 589b ldr r3, [r3, r2] -10039d96: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 -10039d9a: b90b cbnz r3, 10039da0 -10039d9c: f7ff bcce b.w 1003973c -10039da0: 4770 bx lr - -10039da2 : -10039da2: b510 push {r4, lr} -10039da4: 2100 movs r1, #0 -10039da6: 4604 mov r4, r0 -10039da8: f7ff f9c8 bl 1003913c -10039dac: 6a63 ldr r3, [r4, #36] ; 0x24 -10039dae: f003 0328 and.w r3, r3, #40 ; 0x28 -10039db2: 2b28 cmp r3, #40 ; 0x28 -10039db4: d134 bne.n 10039e20 -10039db6: f894 303a ldrb.w r3, [r4, #58] ; 0x3a -10039dba: bb8b cbnz r3, 10039e20 -10039dbc: f894 30b7 ldrb.w r3, [r4, #183] ; 0xb7 -10039dc0: b14b cbz r3, 10039dd6 -10039dc2: f894 3759 ldrb.w r3, [r4, #1881] ; 0x759 -10039dc6: b96b cbnz r3, 10039de4 -10039dc8: f894 30b9 ldrb.w r3, [r4, #185] ; 0xb9 -10039dcc: 2b19 cmp r3, #25 -10039dce: d80b bhi.n 10039de8 -10039dd0: 3b0b subs r3, #11 -10039dd2: 2b0e cmp r3, #14 -10039dd4: d90a bls.n 10039dec -10039dd6: 6983 ldr r3, [r0, #24] -10039dd8: f5b3 7f7a cmp.w r3, #1000 ; 0x3e8 -10039ddc: bf8c ite hi -10039dde: 2183 movhi r1, #131 ; 0x83 -10039de0: 2140 movls r1, #64 ; 0x40 -10039de2: e004 b.n 10039dee -10039de4: 2140 movs r1, #64 ; 0x40 -10039de6: e002 b.n 10039dee -10039de8: 21cd movs r1, #205 ; 0xcd -10039dea: e000 b.n 10039dee -10039dec: 2183 movs r1, #131 ; 0x83 -10039dee: f8d4 30a8 ldr.w r3, [r4, #168] ; 0xa8 -10039df2: 781b ldrb r3, [r3, #0] -10039df4: b17b cbz r3, 10039e16 -10039df6: f8d4 30ac ldr.w r3, [r4, #172] ; 0xac -10039dfa: 781b ldrb r3, [r3, #0] -10039dfc: b25a sxtb r2, r3 -10039dfe: 2a00 cmp r2, #0 -10039e00: da09 bge.n 10039e16 -10039e02: 3259 adds r2, #89 ; 0x59 -10039e04: db06 blt.n 10039e14 -10039e06: 3359 adds r3, #89 ; 0x59 -10039e08: b2db uxtb r3, r3 -10039e0a: 2b18 cmp r3, #24 -10039e0c: bf8c ite hi -10039e0e: 21cd movhi r1, #205 ; 0xcd -10039e10: 2183 movls r1, #131 ; 0x83 -10039e12: e000 b.n 10039e16 -10039e14: 2140 movs r1, #64 ; 0x40 -10039e16: 4620 mov r0, r4 -10039e18: e8bd 4010 ldmia.w sp!, {r4, lr} -10039e1c: f7ff bd6a b.w 100398f4 -10039e20: bd10 pop {r4, pc} - -10039e22 : -10039e22: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -10039e26: 4698 mov r8, r3 -10039e28: 781b ldrb r3, [r3, #0] -10039e2a: 4605 mov r5, r0 -10039e2c: 2b03 cmp r3, #3 -10039e2e: 460c mov r4, r1 -10039e30: 4616 mov r6, r2 -10039e32: d845 bhi.n 10039ec0 -10039e34: f8d0 33e0 ldr.w r3, [r0, #992] ; 0x3e0 -10039e38: 3301 adds r3, #1 -10039e3a: f8c0 33e0 str.w r3, [r0, #992] ; 0x3e0 -10039e3e: 7952 ldrb r2, [r2, #5] -10039e40: f002 031f and.w r3, r2, #31 -10039e44: 0952 lsrs r2, r2, #5 -10039e46: 3a01 subs r2, #1 -10039e48: 2a06 cmp r2, #6 -10039e4a: d818 bhi.n 10039e7e -10039e4c: e8df f002 tbb [pc, r2] -10039e50: 170e1711 .word 0x170e1711 -10039e54: 1709 .short 0x1709 -10039e56: 04 .byte 0x04 -10039e57: 00 .byte 0x00 -10039e58: ebc3 13c3 rsb r3, r3, r3, lsl #7 -10039e5c: 005f lsls r7, r3, #1 -10039e5e: 3f35 subs r7, #53 ; 0x35 -10039e60: e00b b.n 10039e7a -10039e62: ebc3 13c3 rsb r3, r3, r3, lsl #7 -10039e66: 005f lsls r7, r3, #1 -10039e68: 3f23 subs r7, #35 ; 0x23 -10039e6a: e006 b.n 10039e7a -10039e6c: f06f 070a mvn.w r7, #10 -10039e70: e001 b.n 10039e76 -10039e72: f06f 0703 mvn.w r7, #3 -10039e76: 1aff subs r7, r7, r3 -10039e78: 007f lsls r7, r7, #1 -10039e7a: b2ff uxtb r7, r7 -10039e7c: e000 b.n 10039e80 -10039e7e: 2700 movs r7, #0 -10039e80: b278 sxtb r0, r7 -10039e82: f004 fd0d bl 1003e8a0 <__ROM_odm_QueryRxPwrPercentage_veneer> -10039e86: 2828 cmp r0, #40 ; 0x28 -10039e88: 7020 strb r0, [r4, #0] -10039e8a: 70e7 strb r7, [r4, #3] -10039e8c: d902 bls.n 10039e94 -10039e8e: f895 3040 ldrb.w r3, [r5, #64] ; 0x40 -10039e92: b173 cbz r3, 10039eb2 -10039e94: 7932 ldrb r2, [r6, #4] -10039e96: 2a40 cmp r2, #64 ; 0x40 -10039e98: d80d bhi.n 10039eb6 -10039e9a: 2a13 cmp r2, #19 -10039e9c: f04f 0364 mov.w r3, #100 ; 0x64 -10039ea0: d90a bls.n 10039eb8 -10039ea2: f1c2 0240 rsb r2, r2, #64 ; 0x40 -10039ea6: 4353 muls r3, r2 -10039ea8: 212c movs r1, #44 ; 0x2c -10039eaa: fb93 f3f1 sdiv r3, r3, r1 -10039eae: b2db uxtb r3, r3 -10039eb0: e002 b.n 10039eb8 -10039eb2: 2364 movs r3, #100 ; 0x64 -10039eb4: e000 b.n 10039eb8 -10039eb6: 2300 movs r3, #0 -10039eb8: 7063 strb r3, [r4, #1] -10039eba: 7120 strb r0, [r4, #4] -10039ebc: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -10039ec0: f8d0 33e4 ldr.w r3, [r0, #996] ; 0x3e4 -10039ec4: f890 a01f ldrb.w sl, [r0, #31] -10039ec8: 3301 adds r3, #1 -10039eca: f8c0 33e4 str.w r3, [r0, #996] ; 0x3e4 -10039ece: 7810 ldrb r0, [r2, #0] -10039ed0: f00a 0a01 and.w sl, sl, #1 -10039ed4: f000 003f and.w r0, r0, #63 ; 0x3f -10039ed8: 3837 subs r0, #55 ; 0x37 -10039eda: 0040 lsls r0, r0, #1 -10039edc: b240 sxtb r0, r0 -10039ede: f004 fcdf bl 1003e8a0 <__ROM_odm_QueryRxPwrPercentage_veneer> -10039ee2: 70a0 strb r0, [r4, #2] -10039ee4: f896 9004 ldrb.w r9, [r6, #4] -10039ee8: 4607 mov r7, r0 -10039eea: ea4f 0959 mov.w r9, r9, lsr #1 -10039eee: f1a9 096e sub.w r9, r9, #110 ; 0x6e -10039ef2: fa5f f989 uxtb.w r9, r9 -10039ef6: fa4f f089 sxtb.w r0, r9 -10039efa: f004 fcd1 bl 1003e8a0 <__ROM_odm_QueryRxPwrPercentage_veneer> -10039efe: f884 9003 strb.w r9, [r4, #3] -10039f02: 7020 strb r0, [r4, #0] -10039f04: f996 000d ldrsb.w r0, [r6, #13] -10039f08: f004 fca6 bl 1003e858 <__ROM_odm_EVMdbToPercentage_veneer> -10039f0c: 4641 mov r1, r8 -10039f0e: 7060 strb r0, [r4, #1] -10039f10: f106 0209 add.w r2, r6, #9 -10039f14: 4628 mov r0, r5 -10039f16: 2301 movs r3, #1 -10039f18: f7ff fb4b bl 100395b2 -10039f1c: f1ba 0f00 cmp.w sl, #0 -10039f20: d000 beq.n 10039f24 -10039f22: 7127 strb r7, [r4, #4] -10039f24: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - -10039f28 : -10039f28: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -10039f2c: 7853 ldrb r3, [r2, #1] -10039f2e: 2bff cmp r3, #255 ; 0xff -10039f30: f000 8099 beq.w 1003a066 -10039f34: eb00 0383 add.w r3, r0, r3, lsl #2 -10039f38: f8d3 414c ldr.w r4, [r3, #332] ; 0x14c -10039f3c: 2c00 cmp r4, #0 -10039f3e: f000 8092 beq.w 1003a066 -10039f42: 7893 ldrb r3, [r2, #2] -10039f44: 2b00 cmp r3, #0 -10039f46: f000 808e beq.w 1003a066 -10039f4a: 7913 ldrb r3, [r2, #4] -10039f4c: b123 cbz r3, 10039f58 -10039f4e: f890 33e8 ldrb.w r3, [r0, #1000] ; 0x3e8 -10039f52: 3301 adds r3, #1 -10039f54: f880 33e8 strb.w r3, [r0, #1000] ; 0x3e8 -10039f58: 7813 ldrb r3, [r2, #0] -10039f5a: f880 30ea strb.w r3, [r0, #234] ; 0xea -10039f5e: 78d7 ldrb r7, [r2, #3] -10039f60: f8d4 6324 ldr.w r6, [r4, #804] ; 0x324 -10039f64: f8d4 5328 ldr.w r5, [r4, #808] ; 0x328 -10039f68: b917 cbnz r7, 10039f70 -10039f6a: 7912 ldrb r2, [r2, #4] -10039f6c: 2a00 cmp r2, #0 -10039f6e: d07a beq.n 1003a066 -10039f70: 2b03 cmp r3, #3 -10039f72: f504 774c add.w r7, r4, #816 ; 0x330 -10039f76: d91b bls.n 10039fb0 -10039f78: 788b ldrb r3, [r1, #2] -10039f7a: 2d00 cmp r5, #0 -10039f7c: f880 30c3 strb.w r3, [r0, #195] ; 0xc3 -10039f80: 780a ldrb r2, [r1, #0] -10039f82: dc01 bgt.n 10039f88 -10039f84: 4615 mov r5, r2 -10039f86: e009 b.n 10039f9c -10039f88: 2113 movs r1, #19 -10039f8a: 42aa cmp r2, r5 -10039f8c: fb01 3505 mla r5, r1, r5, r3 -10039f90: f04f 0214 mov.w r2, #20 -10039f94: fb95 f5f2 sdiv r5, r5, r2 -10039f98: bf88 it hi -10039f9a: 3501 addhi r5, #1 -10039f9c: e9d7 2300 ldrd r2, r3, [r7] -10039fa0: 1892 adds r2, r2, r2 -10039fa2: eb43 0303 adc.w r3, r3, r3 -10039fa6: 2001 movs r0, #1 -10039fa8: 2100 movs r1, #0 -10039faa: 4302 orrs r2, r0 -10039fac: 430b orrs r3, r1 -10039fae: e016 b.n 10039fde -10039fb0: 780b ldrb r3, [r1, #0] -10039fb2: 2e00 cmp r6, #0 -10039fb4: f880 30c3 strb.w r3, [r0, #195] ; 0xc3 -10039fb8: 780b ldrb r3, [r1, #0] -10039fba: dc01 bgt.n 10039fc0 -10039fbc: 461e mov r6, r3 -10039fbe: e009 b.n 10039fd4 -10039fc0: 2113 movs r1, #19 -10039fc2: 42b3 cmp r3, r6 -10039fc4: fb01 3606 mla r6, r1, r6, r3 -10039fc8: f04f 0214 mov.w r2, #20 -10039fcc: fb96 f6f2 sdiv r6, r6, r2 -10039fd0: bf88 it hi -10039fd2: 3601 addhi r6, #1 -10039fd4: e9d7 2300 ldrd r2, r3, [r7] -10039fd8: 1892 adds r2, r2, r2 -10039fda: eb43 0303 adc.w r3, r3, r3 -10039fde: e9c7 2300 strd r2, r3, [r7] -10039fe2: f894 3338 ldrb.w r3, [r4, #824] ; 0x338 -10039fe6: f04f 0a00 mov.w sl, #0 -10039fea: 2b3f cmp r3, #63 ; 0x3f -10039fec: bf8c ite hi -10039fee: 2340 movhi r3, #64 ; 0x40 -10039ff0: 3301 addls r3, #1 -10039ff2: f884 3338 strb.w r3, [r4, #824] ; 0x338 -10039ff6: f894 8338 ldrb.w r8, [r4, #824] ; 0x338 -10039ffa: 46d1 mov r9, sl -10039ffc: fa5f f38a uxtb.w r3, sl -1003a000: 4543 cmp r3, r8 -1003a002: d20a bcs.n 1003a01a -1003a004: e9d7 0100 ldrd r0, r1, [r7] -1003a008: 4652 mov r2, sl -1003a00a: f003 fdef bl 1003dbec <__aeabi_llsr> -1003a00e: f000 0001 and.w r0, r0, #1 -1003a012: 4481 add r9, r0 -1003a014: f10a 0a01 add.w sl, sl, #1 -1003a018: e7f0 b.n 10039ffc -1003a01a: f1b8 0f40 cmp.w r8, #64 ; 0x40 -1003a01e: d10f bne.n 1003a040 -1003a020: ea4f 1909 mov.w r9, r9, lsl #4 -1003a024: f1b9 0f40 cmp.w r9, #64 ; 0x40 -1003a028: bf28 it cs -1003a02a: f04f 0940 movcs.w r9, #64 ; 0x40 -1003a02e: f1c9 0840 rsb r8, r9, #64 ; 0x40 -1003a032: fb05 f909 mul.w r9, r5, r9 -1003a036: fb06 9808 mla r8, r6, r8, r9 -1003a03a: ea4f 1398 mov.w r3, r8, lsr #6 -1003a03e: e00c b.n 1003a05a -1003a040: f1b8 0f00 cmp.w r8, #0 -1003a044: d008 beq.n 1003a058 -1003a046: ebc9 0308 rsb r3, r9, r8 -1003a04a: fb05 f909 mul.w r9, r5, r9 -1003a04e: fb06 9903 mla r9, r6, r3, r9 -1003a052: fbb9 f3f8 udiv r3, r9, r8 -1003a056: e000 b.n 1003a05a -1003a058: 4643 mov r3, r8 -1003a05a: f8c4 6324 str.w r6, [r4, #804] ; 0x324 -1003a05e: f8c4 5328 str.w r5, [r4, #808] ; 0x328 -1003a062: f8c4 3320 str.w r3, [r4, #800] ; 0x320 -1003a066: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - -1003a06a : -1003a06a: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1003a06e: 4604 mov r4, r0 -1003a070: 461e mov r6, r3 -1003a072: 460f mov r7, r1 -1003a074: 4615 mov r5, r2 -1003a076: f7ff fed4 bl 10039e22 -1003a07a: f894 3758 ldrb.w r3, [r4, #1880] ; 0x758 -1003a07e: 2b01 cmp r3, #1 -1003a080: d007 beq.n 1003a092 -1003a082: 4620 mov r0, r4 -1003a084: 4639 mov r1, r7 -1003a086: 4632 mov r2, r6 -1003a088: 462b mov r3, r5 -1003a08a: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -1003a08e: f7ff bf4b b.w 10039f28 -1003a092: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1003a096 : -1003a096: f7ff bfe8 b.w 1003a06a - -1003a09a : -1003a09a: b508 push {r3, lr} -1003a09c: 6ac3 ldr r3, [r0, #44] ; 0x2c -1003a09e: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 -1003a0a2: d107 bne.n 1003a0b4 -1003a0a4: b911 cbnz r1, 1003a0ac -1003a0a6: f001 ff8f bl 1003bfc8 -1003a0aa: e003 b.n 1003a0b4 -1003a0ac: 2901 cmp r1, #1 -1003a0ae: d101 bne.n 1003a0b4 -1003a0b0: f002 f83e bl 1003c130 -1003a0b4: 2000 movs r0, #0 -1003a0b6: bd08 pop {r3, pc} - -1003a0b8 : -1003a0b8: 6ac3 ldr r3, [r0, #44] ; 0x2c -1003a0ba: b510 push {r4, lr} -1003a0bc: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 -1003a0c0: 4604 mov r4, r0 -1003a0c2: d110 bne.n 1003a0e6 -1003a0c4: f890 3035 ldrb.w r3, [r0, #53] ; 0x35 -1003a0c8: 2b02 cmp r3, #2 -1003a0ca: d102 bne.n 1003a0d2 -1003a0cc: f001 ffb8 bl 1003c040 -1003a0d0: e006 b.n 1003a0e0 -1003a0d2: 2b03 cmp r3, #3 -1003a0d4: d102 bne.n 1003a0dc -1003a0d6: f002 f803 bl 1003c0e0 -1003a0da: e001 b.n 1003a0e0 -1003a0dc: f001 ffd8 bl 1003c090 -1003a0e0: 4620 mov r0, r4 -1003a0e2: f002 f841 bl 1003c168 -1003a0e6: 2000 movs r0, #0 -1003a0e8: bd10 pop {r4, pc} - -1003a0ea : -1003a0ea: b508 push {r3, lr} -1003a0ec: 6ac3 ldr r3, [r0, #44] ; 0x2c -1003a0ee: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 -1003a0f2: d10c bne.n 1003a10e -1003a0f4: b911 cbnz r1, 1003a0fc -1003a0f6: f7fe fd53 bl 10038ba0 -1003a0fa: e008 b.n 1003a10e -1003a0fc: 2901 cmp r1, #1 -1003a0fe: d102 bne.n 1003a106 -1003a100: f7fe fd12 bl 10038b28 -1003a104: e003 b.n 1003a10e -1003a106: 2904 cmp r1, #4 -1003a108: d101 bne.n 1003a10e -1003a10a: f7fe fd87 bl 10038c1c -1003a10e: 2000 movs r0, #0 -1003a110: bd08 pop {r3, pc} - -1003a112 : -1003a112: b508 push {r3, lr} -1003a114: 6ac3 ldr r3, [r0, #44] ; 0x2c -1003a116: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 -1003a11a: d101 bne.n 1003a120 -1003a11c: f001 fe2e bl 1003bd7c -1003a120: 2000 movs r0, #0 -1003a122: bd08 pop {r3, pc} - -1003a124 : -1003a124: 6800 ldr r0, [r0, #0] -1003a126: f7fd bda8 b.w 10037c7a - -1003a12a : -1003a12a: 6800 ldr r0, [r0, #0] -1003a12c: f7fd bdb3 b.w 10037c96 - -1003a130 : -1003a130: 6800 ldr r0, [r0, #0] -1003a132: f7fd bdb7 b.w 10037ca4 - -1003a136 : -1003a136: 6800 ldr r0, [r0, #0] -1003a138: f7fd bdbb b.w 10037cb2 - -1003a13c : -1003a13c: 6800 ldr r0, [r0, #0] -1003a13e: f7fd bdbf b.w 10037cc0 - -1003a142 : -1003a142: 6800 ldr r0, [r0, #0] -1003a144: f7f4 bd3f b.w 1002ebc6 - -1003a148 : -1003a148: 6800 ldr r0, [r0, #0] -1003a14a: f7f4 bd3c b.w 1002ebc6 - -1003a14e : -1003a14e: 6800 ldr r0, [r0, #0] -1003a150: f7f4 bd24 b.w 1002eb9c - -1003a154 : -1003a154: 6800 ldr r0, [r0, #0] -1003a156: f7f4 bdb1 b.w 1002ecbc - -1003a15a : -1003a15a: 6800 ldr r0, [r0, #0] -1003a15c: f7f4 bda2 b.w 1002eca4 - -1003a160 : -1003a160: 4608 mov r0, r1 -1003a162: 4611 mov r1, r2 -1003a164: 461a mov r2, r3 -1003a166: f7dd b953 b.w 10017410 - -1003a16a : -1003a16a: f7dd ba83 b.w 10017674 - -1003a16e : -1003a16e: f7dd ba89 b.w 10017684 - ... - -1003a174 : -1003a174: 4603 mov r3, r0 -1003a176: 6adb ldr r3, [r3, #44] ; 0x2c -1003a178: b510 push {r4, lr} -1003a17a: 2b10 cmp r3, #16 -1003a17c: 6800 ldr r0, [r0, #0] -1003a17e: d00a beq.n 1003a196 -1003a180: f5b3 7f80 cmp.w r3, #256 ; 0x100 -1003a184: d007 beq.n 1003a196 -1003a186: 2b80 cmp r3, #128 ; 0x80 -1003a188: d005 beq.n 1003a196 -1003a18a: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 -1003a18e: d002 beq.n 1003a196 -1003a190: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 -1003a194: d105 bne.n 1003a1a2 -1003a196: f44f 6148 mov.w r1, #3200 ; 0xc80 -1003a19a: 4a0a ldr r2, [pc, #40] ; (1003a1c4 ) -1003a19c: f7f4 fcfe bl 1002eb9c -1003a1a0: 4604 mov r4, r0 -1003a1a2: 2300 movs r3, #0 -1003a1a4: 4a08 ldr r2, [pc, #32] ; (1003a1c8 ) -1003a1a6: b2d8 uxtb r0, r3 -1003a1a8: f852 2023 ldr.w r2, [r2, r3, lsl #2] -1003a1ac: f5b2 1f80 cmp.w r2, #1048576 ; 0x100000 -1003a1b0: bf28 it cs -1003a1b2: 0d92 lsrcs r2, r2, #22 -1003a1b4: 4294 cmp r4, r2 -1003a1b6: d003 beq.n 1003a1c0 -1003a1b8: 3301 adds r3, #1 -1003a1ba: 2b2b cmp r3, #43 ; 0x2b -1003a1bc: d1f2 bne.n 1003a1a4 -1003a1be: 4618 mov r0, r3 -1003a1c0: bd10 pop {r4, pc} -1003a1c2: bf00 nop -1003a1c4: ffc00000 .word 0xffc00000 -1003a1c8: 10043e34 .word 0x10043e34 - -1003a1cc : -1003a1cc: b510 push {r4, lr} -1003a1ce: 4604 mov r4, r0 -1003a1d0: f7ff ffd0 bl 1003a174 -1003a1d4: 6823 ldr r3, [r4, #0] -1003a1d6: f241 62c8 movw r2, #5832 ; 0x16c8 -1003a1da: 589b ldr r3, [r3, r2] -1003a1dc: 2201 movs r2, #1 -1003a1de: f884 279e strb.w r2, [r4, #1950] ; 0x79e -1003a1e2: 2200 movs r2, #0 -1003a1e4: f884 279c strb.w r2, [r4, #1948] ; 0x79c -1003a1e8: f884 279d strb.w r2, [r4, #1949] ; 0x79d -1003a1ec: f8d4 209c ldr.w r2, [r4, #156] ; 0x9c -1003a1f0: 7812 ldrb r2, [r2, #0] -1003a1f2: f1d2 0201 rsbs r2, r2, #1 -1003a1f6: bf38 it cc -1003a1f8: 2200 movcc r2, #0 -1003a1fa: f884 279f strb.w r2, [r4, #1951] ; 0x79f -1003a1fe: f893 2044 ldrb.w r2, [r3, #68] ; 0x44 -1003a202: f884 27a5 strb.w r2, [r4, #1957] ; 0x7a5 -1003a206: f893 2044 ldrb.w r2, [r3, #68] ; 0x44 -1003a20a: f884 27a7 strb.w r2, [r4, #1959] ; 0x7a7 -1003a20e: f893 3044 ldrb.w r3, [r3, #68] ; 0x44 -1003a212: f884 37a6 strb.w r3, [r4, #1958] ; 0x7a6 -1003a216: 6ae3 ldr r3, [r4, #44] ; 0x2c -1003a218: 2b10 cmp r3, #16 -1003a21a: d00a beq.n 1003a232 -1003a21c: f5b3 7f80 cmp.w r3, #256 ; 0x100 -1003a220: d007 beq.n 1003a232 -1003a222: 2b80 cmp r3, #128 ; 0x80 -1003a224: d005 beq.n 1003a232 -1003a226: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 -1003a22a: d002 beq.n 1003a232 -1003a22c: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 -1003a230: d106 bne.n 1003a240 -1003a232: 282b cmp r0, #43 ; 0x2b -1003a234: bf28 it cs -1003a236: 201e movcs r0, #30 -1003a238: f884 0bef strb.w r0, [r4, #3055] ; 0xbef -1003a23c: 231b movs r3, #27 -1003a23e: e005 b.n 1003a24c -1003a240: 2825 cmp r0, #37 ; 0x25 -1003a242: bf28 it cs -1003a244: 2018 movcs r0, #24 -1003a246: f884 0bef strb.w r0, [r4, #3055] ; 0xbef -1003a24a: 2318 movs r3, #24 -1003a24c: f884 3bf0 strb.w r3, [r4, #3056] ; 0xbf0 -1003a250: f894 3bf0 ldrb.w r3, [r4, #3056] ; 0xbf0 -1003a254: f894 2bef ldrb.w r2, [r4, #3055] ; 0xbef -1003a258: f884 3bee strb.w r3, [r4, #3054] ; 0xbee -1003a25c: f884 37c1 strb.w r3, [r4, #1985] ; 0x7c1 -1003a260: 2300 movs r3, #0 -1003a262: f884 37c3 strb.w r3, [r4, #1987] ; 0x7c3 -1003a266: f884 37c4 strb.w r3, [r4, #1988] ; 0x7c4 -1003a26a: f884 37c2 strb.w r3, [r4, #1986] ; 0x7c2 -1003a26e: f884 2bea strb.w r2, [r4, #3050] ; 0xbea -1003a272: f884 27c5 strb.w r2, [r4, #1989] ; 0x7c5 -1003a276: f884 37c7 strb.w r3, [r4, #1991] ; 0x7c7 -1003a27a: f884 37c8 strb.w r3, [r4, #1992] ; 0x7c8 -1003a27e: f884 37c6 strb.w r3, [r4, #1990] ; 0x7c6 -1003a282: bd10 pop {r4, pc} - -1003a284 : -1003a284: f7ff bfa2 b.w 1003a1cc - -1003a288 : -1003a288: 6a43 ldr r3, [r0, #36] ; 0x24 -1003a28a: b513 push {r0, r1, r4, lr} -1003a28c: 01db lsls r3, r3, #7 -1003a28e: 4604 mov r4, r0 -1003a290: 6802 ldr r2, [r0, #0] -1003a292: d511 bpl.n 1003a2b8 -1003a294: f890 17a0 ldrb.w r1, [r0, #1952] ; 0x7a0 -1003a298: b941 cbnz r1, 1003a2ac -1003a29a: 2303 movs r3, #3 -1003a29c: 9300 str r3, [sp, #0] -1003a29e: 2242 movs r2, #66 ; 0x42 -1003a2a0: f44f 3340 mov.w r3, #196608 ; 0x30000 -1003a2a4: f7ff ff56 bl 1003a154 -1003a2a8: 2301 movs r3, #1 -1003a2aa: e003 b.n 1003a2b4 -1003a2ac: 4610 mov r0, r2 -1003a2ae: f003 f9fd bl 1003d6ac -1003a2b2: 2300 movs r3, #0 -1003a2b4: f884 37a0 strb.w r3, [r4, #1952] ; 0x7a0 -1003a2b8: b002 add sp, #8 -1003a2ba: bd10 pop {r4, pc} - -1003a2bc : -1003a2bc: f890 3021 ldrb.w r3, [r0, #33] ; 0x21 -1003a2c0: 2b10 cmp r3, #16 -1003a2c2: d101 bne.n 1003a2c8 -1003a2c4: f7ff bfe0 b.w 1003a288 -1003a2c8: 4770 bx lr - -1003a2ca : -1003a2ca: 2300 movs r3, #0 -1003a2cc: f880 3644 strb.w r3, [r0, #1604] ; 0x644 -1003a2d0: 4770 bx lr - -1003a2d2 : -1003a2d2: 2301 movs r3, #1 -1003a2d4: f880 3123 strb.w r3, [r0, #291] ; 0x123 -1003a2d8: 4770 bx lr - -1003a2da : -1003a2da: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1003a2de: b087 sub sp, #28 -1003a2e0: f8d0 9000 ldr.w r9, [r0] -1003a2e4: f10d 0a04 add.w sl, sp, #4 -1003a2e8: f241 63c8 movw r3, #5832 ; 0x16c8 -1003a2ec: 4605 mov r5, r0 -1003a2ee: 2100 movs r1, #0 -1003a2f0: 4650 mov r0, sl -1003a2f2: 2214 movs r2, #20 -1003a2f4: f859 6003 ldr.w r6, [r9, r3] -1003a2f8: f003 fc84 bl 1003dc04 -1003a2fc: f895 30b7 ldrb.w r3, [r5, #183] ; 0xb7 -1003a300: 2b01 cmp r3, #1 -1003a302: d153 bne.n 1003a3ac -1003a304: 2400 movs r4, #0 -1003a306: f885 3644 strb.w r3, [r5, #1604] ; 0x644 -1003a30a: 27ff movs r7, #255 ; 0xff -1003a30c: 46a3 mov fp, r4 -1003a30e: 4623 mov r3, r4 -1003a310: eb05 0283 add.w r2, r5, r3, lsl #2 -1003a314: f8d2 114c ldr.w r1, [r2, #332] ; 0x14c -1003a318: b1d1 cbz r1, 1003a350 -1003a31a: f891 2108 ldrb.w r2, [r1, #264] ; 0x108 -1003a31e: 07d2 lsls r2, r2, #31 -1003a320: d416 bmi.n 1003a350 -1003a322: f8d1 2320 ldr.w r2, [r1, #800] ; 0x320 -1003a326: 1c50 adds r0, r2, #1 -1003a328: d012 beq.n 1003a350 -1003a32a: f8d1 1100 ldr.w r1, [r1, #256] ; 0x100 -1003a32e: 4297 cmp r7, r2 -1003a330: bfa8 it ge -1003a332: 4617 movge r7, r2 -1003a334: 4593 cmp fp, r2 -1003a336: bfb8 it lt -1003a338: 4693 movlt fp, r2 -1003a33a: 4299 cmp r1, r3 -1003a33c: d108 bne.n 1003a350 -1003a33e: a806 add r0, sp, #24 -1003a340: 1c61 adds r1, r4, #1 -1003a342: ea43 4202 orr.w r2, r3, r2, lsl #16 -1003a346: eb00 0484 add.w r4, r0, r4, lsl #2 -1003a34a: f844 2c14 str.w r2, [r4, #-20] -1003a34e: b2cc uxtb r4, r1 -1003a350: 3301 adds r3, #1 -1003a352: 2b07 cmp r3, #7 -1003a354: d1dc bne.n 1003a310 -1003a356: f04f 0800 mov.w r8, #0 -1003a35a: 45a0 cmp r8, r4 -1003a35c: da10 bge.n 1003a380 -1003a35e: f85a 2028 ldr.w r2, [sl, r8, lsl #2] -1003a362: b152 cbz r2, 1003a37a -1003a364: 6aeb ldr r3, [r5, #44] ; 0x2c -1003a366: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 -1003a36a: d106 bne.n 1003a37a -1003a36c: b2d1 uxtb r1, r2 -1003a36e: f506 7000 add.w r0, r6, #512 ; 0x200 -1003a372: f3c2 4207 ubfx r2, r2, #16, #8 -1003a376: f7fe fb43 bl 10038a00 -1003a37a: f108 0801 add.w r8, r8, #1 -1003a37e: e7ec b.n 1003a35a -1003a380: 2fff cmp r7, #255 ; 0xff -1003a382: bf04 itt eq -1003a384: 2300 moveq r3, #0 -1003a386: f8c6 31bc streq.w r3, [r6, #444] ; 0x1bc -1003a38a: f241 63c8 movw r3, #5832 ; 0x16c8 -1003a38e: f859 3003 ldr.w r3, [r9, r3] -1003a392: bf18 it ne -1003a394: f8c6 71bc strne.w r7, [r6, #444] ; 0x1bc -1003a398: f8d3 21bc ldr.w r2, [r3, #444] ; 0x1bc -1003a39c: f8c6 b1c0 str.w fp, [r6, #448] ; 0x1c0 -1003a3a0: f8c3 21c4 str.w r2, [r3, #452] ; 0x1c4 -1003a3a4: f8d6 31c4 ldr.w r3, [r6, #452] ; 0x1c4 -1003a3a8: f885 30b9 strb.w r3, [r5, #185] ; 0xb9 -1003a3ac: b007 add sp, #28 -1003a3ae: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -1003a3b2 : -1003a3b2: 6a42 ldr r2, [r0, #36] ; 0x24 -1003a3b4: 06d2 lsls r2, r2, #27 -1003a3b6: d505 bpl.n 1003a3c4 -1003a3b8: f890 3021 ldrb.w r3, [r0, #33] ; 0x21 -1003a3bc: 2b10 cmp r3, #16 -1003a3be: d101 bne.n 1003a3c4 -1003a3c0: f7ff bf8b b.w 1003a2da -1003a3c4: 4770 bx lr - -1003a3c6 : -1003a3c6: 2301 movs r3, #1 -1003a3c8: f880 376d strb.w r3, [r0, #1901] ; 0x76d -1003a3cc: f880 376c strb.w r3, [r0, #1900] ; 0x76c -1003a3d0: 2300 movs r3, #0 -1003a3d2: f880 3770 strb.w r3, [r0, #1904] ; 0x770 -1003a3d6: f880 3773 strb.w r3, [r0, #1907] ; 0x773 -1003a3da: 2332 movs r3, #50 ; 0x32 -1003a3dc: 2223 movs r2, #35 ; 0x23 -1003a3de: f880 376e strb.w r3, [r0, #1902] ; 0x76e -1003a3e2: 2314 movs r3, #20 -1003a3e4: f880 2771 strb.w r2, [r0, #1905] ; 0x771 -1003a3e8: f880 376f strb.w r3, [r0, #1903] ; 0x76f -1003a3ec: 4770 bx lr - ... - -1003a3f0 : -1003a3f0: 4b10 ldr r3, [pc, #64] ; (1003a434 ) -1003a3f2: b082 sub sp, #8 -1003a3f4: 6818 ldr r0, [r3, #0] -1003a3f6: 9000 str r0, [sp, #0] -1003a3f8: 8898 ldrh r0, [r3, #4] -1003a3fa: 799b ldrb r3, [r3, #6] -1003a3fc: f8ad 0004 strh.w r0, [sp, #4] -1003a400: f88d 3006 strb.w r3, [sp, #6] -1003a404: 2300 movs r3, #0 -1003a406: b2d8 uxtb r0, r3 -1003a408: 4290 cmp r0, r2 -1003a40a: d304 bcc.n 1003a416 -1003a40c: f81d 0003 ldrb.w r0, [sp, r3] -1003a410: 3003 adds r0, #3 -1003a412: f80d 0003 strb.w r0, [sp, r3] -1003a416: 3301 adds r3, #1 -1003a418: 2b07 cmp r3, #7 -1003a41a: d1f4 bne.n 1003a406 -1003a41c: 2300 movs r3, #0 -1003a41e: f81d 2003 ldrb.w r2, [sp, r3] -1003a422: b2d8 uxtb r0, r3 -1003a424: 4291 cmp r1, r2 -1003a426: d303 bcc.n 1003a430 -1003a428: 3301 adds r3, #1 -1003a42a: 2b07 cmp r3, #7 -1003a42c: d1f7 bne.n 1003a41e -1003a42e: 2000 movs r0, #0 -1003a430: b002 add sp, #8 -1003a432: 4770 bx lr -1003a434: 10043ef0 .word 0x10043ef0 - -1003a438 : -1003a438: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -1003a43c: 6807 ldr r7, [r0, #0] -1003a43e: f241 73ac movw r3, #6060 ; 0x17ac -1003a442: 58fb ldr r3, [r7, r3] -1003a444: 4605 mov r5, r0 -1003a446: bb2b cbnz r3, 1003a494 -1003a448: f890 376c ldrb.w r3, [r0, #1900] ; 0x76c -1003a44c: b313 cbz r3, 1003a494 -1003a44e: 4606 mov r6, r0 -1003a450: f100 091c add.w r9, r0, #28 -1003a454: f8d6 414c ldr.w r4, [r6, #332] ; 0x14c -1003a458: b19c cbz r4, 1003a482 -1003a45a: f894 3108 ldrb.w r3, [r4, #264] ; 0x108 -1003a45e: 07db lsls r3, r3, #31 -1003a460: d40f bmi.n 1003a482 -1003a462: f894 8342 ldrb.w r8, [r4, #834] ; 0x342 -1003a466: f8d4 1320 ldr.w r1, [r4, #800] ; 0x320 -1003a46a: 4628 mov r0, r5 -1003a46c: 4642 mov r2, r8 -1003a46e: f7ff ffbf bl 1003a3f0 -1003a472: 4580 cmp r8, r0 -1003a474: 4601 mov r1, r0 -1003a476: d004 beq.n 1003a482 -1003a478: f884 1342 strb.w r1, [r4, #834] ; 0x342 -1003a47c: 4620 mov r0, r4 -1003a47e: f7f8 f8b3 bl 100325e8 -1003a482: 3604 adds r6, #4 -1003a484: 454e cmp r6, r9 -1003a486: d1e5 bne.n 1003a454 -1003a488: 2200 movs r2, #0 -1003a48a: f641 0379 movw r3, #6265 ; 0x1879 -1003a48e: 54fa strb r2, [r7, r3] -1003a490: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1003a494: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - -1003a498 : -1003a498: 6a42 ldr r2, [r0, #36] ; 0x24 -1003a49a: 0792 lsls r2, r2, #30 -1003a49c: d505 bpl.n 1003a4aa -1003a49e: f890 3021 ldrb.w r3, [r0, #33] ; 0x21 -1003a4a2: 2b10 cmp r3, #16 -1003a4a4: d101 bne.n 1003a4aa -1003a4a6: f7ff bfc7 b.w 1003a438 -1003a4aa: 4770 bx lr - -1003a4ac : -1003a4ac: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -1003a4b0: eb00 0181 add.w r1, r0, r1, lsl #2 -1003a4b4: 4691 mov r9, r2 -1003a4b6: f8d1 214c ldr.w r2, [r1, #332] ; 0x14c -1003a4ba: 6804 ldr r4, [r0, #0] -1003a4bc: 2a00 cmp r2, #0 -1003a4be: d05f beq.n 1003a580 -1003a4c0: f892 217c ldrb.w r2, [r2, #380] ; 0x17c -1003a4c4: 1e51 subs r1, r2, #1 -1003a4c6: 290a cmp r1, #10 -1003a4c8: d819 bhi.n 1003a4fe -1003a4ca: e8df f001 tbb [pc, r1] -1003a4ce: 5b3b .short 0x5b3b -1003a4d0: 18185b06 .word 0x18185b06 -1003a4d4: 09091818 .word 0x09091818 -1003a4d8: 09 .byte 0x09 -1003a4d9: 00 .byte 0x00 -1003a4da: f640 78f5 movw r8, #4085 ; 0xff5 -1003a4de: e012 b.n 1003a506 -1003a4e0: f890 1032 ldrb.w r1, [r0, #50] ; 0x32 -1003a4e4: 2901 cmp r1, #1 -1003a4e6: d850 bhi.n 1003a58a -1003a4e8: 6f01 ldr r1, [r0, #112] ; 0x70 -1003a4ea: 482b ldr r0, [pc, #172] ; (1003a598 ) -1003a4ec: f891 8000 ldrb.w r8, [r1] -1003a4f0: 492a ldr r1, [pc, #168] ; (1003a59c ) -1003a4f2: f1b8 0f01 cmp.w r8, #1 -1003a4f6: bf14 ite ne -1003a4f8: 4680 movne r8, r0 -1003a4fa: 4688 moveq r8, r1 -1003a4fc: e003 b.n 1003a506 -1003a4fe: 2a01 cmp r2, #1 -1003a500: f04f 0800 mov.w r8, #0 -1003a504: d020 beq.n 1003a548 -1003a506: b1fb cbz r3, 1003a548 -1003a508: 2b01 cmp r3, #1 -1003a50a: d102 bne.n 1003a512 -1003a50c: f028 080f bic.w r8, r8, #15 -1003a510: e01a b.n 1003a548 -1003a512: 2b02 cmp r3, #2 -1003a514: d104 bne.n 1003a520 -1003a516: f428 5880 bic.w r8, r8, #4096 ; 0x1000 -1003a51a: f028 081f bic.w r8, r8, #31 -1003a51e: e013 b.n 1003a548 -1003a520: 2b03 cmp r3, #3 -1003a522: d104 bne.n 1003a52e -1003a524: f428 5840 bic.w r8, r8, #12288 ; 0x3000 -1003a528: f028 083f bic.w r8, r8, #63 ; 0x3f -1003a52c: e00c b.n 1003a548 -1003a52e: 2b04 cmp r3, #4 -1003a530: bf0b itete eq -1003a532: f428 48e0 biceq.w r8, r8, #28672 ; 0x7000 -1003a536: f428 4870 bicne.w r8, r8, #61440 ; 0xf000 -1003a53a: f028 087f biceq.w r8, r8, #127 ; 0x7f -1003a53e: f028 08ff bicne.w r8, r8, #255 ; 0xff -1003a542: e001 b.n 1003a548 -1003a544: f04f 080f mov.w r8, #15 -1003a548: f641 0179 movw r1, #6265 ; 0x1879 -1003a54c: 5c61 ldrb r1, [r4, r1] -1003a54e: b119 cbz r1, 1003a558 -1003a550: f641 017c movw r1, #6268 ; 0x187c -1003a554: f854 8001 ldr.w r8, [r4, r1] -1003a558: 4911 ldr r1, [pc, #68] ; (1003a5a0 ) -1003a55a: 2402 movs r4, #2 -1003a55c: 2500 movs r5, #0 -1003a55e: e9d1 6702 ldrd r6, r7, [r1, #8] -1003a562: 4034 ands r4, r6 -1003a564: 403d ands r5, r7 -1003a566: ea54 0105 orrs.w r1, r4, r5 -1003a56a: d006 beq.n 1003a57a -1003a56c: 4619 mov r1, r3 -1003a56e: f8cd 8000 str.w r8, [sp] -1003a572: 480c ldr r0, [pc, #48] ; (1003a5a4 ) -1003a574: 464b mov r3, r9 -1003a576: f7e0 faf3 bl 1001ab60 -1003a57a: ea08 0009 and.w r0, r8, r9 -1003a57e: e007 b.n 1003a590 -1003a580: 4648 mov r0, r9 -1003a582: e005 b.n 1003a590 -1003a584: f44f 687f mov.w r8, #4080 ; 0xff0 -1003a588: e7bd b.n 1003a506 -1003a58a: f04f 0800 mov.w r8, #0 -1003a58e: e7ba b.n 1003a506 -1003a590: b003 add sp, #12 -1003a592: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -1003a596: bf00 nop -1003a598: 000ff005 .word 0x000ff005 -1003a59c: 000ff015 .word 0x000ff015 -1003a5a0: 10000720 .word 0x10000720 -1003a5a4: 10043ef7 .word 0x10043ef7 - -1003a5a8 <_ReadEfuseInfo8195a>: -1003a5a8: b570 push {r4, r5, r6, lr} -1003a5aa: f5ad 7d02 sub.w sp, sp, #520 ; 0x208 -1003a5ae: 4604 mov r4, r0 -1003a5b0: a902 add r1, sp, #8 -1003a5b2: f7f3 f8ec bl 1002d78e -1003a5b6: 4620 mov r0, r4 -1003a5b8: a902 add r1, sp, #8 -1003a5ba: f7f3 f807 bl 1002d5cc -1003a5be: f241 4698 movw r6, #5272 ; 0x1498 -1003a5c2: 4620 mov r0, r4 -1003a5c4: a902 add r1, sp, #8 -1003a5c6: f7f3 f830 bl 1002d62a -1003a5ca: 4620 mov r0, r4 -1003a5cc: 5da2 ldrb r2, [r4, r6] -1003a5ce: a902 add r1, sp, #8 -1003a5d0: f7f3 f8d2 bl 1002d778 -1003a5d4: 4b25 ldr r3, [pc, #148] ; (1003a66c <_ReadEfuseInfo8195a+0xc4>) -1003a5d6: 5da2 ldrb r2, [r4, r6] -1003a5d8: 6818 ldr r0, [r3, #0] -1003a5da: 889b ldrh r3, [r3, #4] -1003a5dc: f504 55a4 add.w r5, r4, #5248 ; 0x1480 -1003a5e0: 3518 adds r5, #24 -1003a5e2: 9000 str r0, [sp, #0] -1003a5e4: f8ad 3004 strh.w r3, [sp, #4] -1003a5e8: b142 cbz r2, 1003a5fc <_ReadEfuseInfo8195a+0x54> -1003a5ea: 2300 movs r3, #0 -1003a5ec: 18ea adds r2, r5, r3 -1003a5ee: f81d 1003 ldrb.w r1, [sp, r3] -1003a5f2: 3301 adds r3, #1 -1003a5f4: 2b06 cmp r3, #6 -1003a5f6: 7051 strb r1, [r2, #1] -1003a5f8: d1f8 bne.n 1003a5ec <_ReadEfuseInfo8195a+0x44> -1003a5fa: e005 b.n 1003a608 <_ReadEfuseInfo8195a+0x60> -1003a5fc: 1c68 adds r0, r5, #1 -1003a5fe: f50d 7191 add.w r1, sp, #290 ; 0x122 -1003a602: 2206 movs r2, #6 -1003a604: f7dc ff04 bl 10017410 -1003a608: f241 4598 movw r5, #5272 ; 0x1498 -1003a60c: 5d62 ldrb r2, [r4, r5] -1003a60e: 4620 mov r0, r4 -1003a610: a902 add r1, sp, #8 -1003a612: f7f3 f865 bl 1002d6e0 -1003a616: 5d62 ldrb r2, [r4, r5] -1003a618: f241 63c8 movw r3, #5832 ; 0x16c8 -1003a61c: 58e3 ldr r3, [r4, r3] -1003a61e: b91a cbnz r2, 1003a628 <_ReadEfuseInfo8195a+0x80> -1003a620: f89d 2139 ldrb.w r2, [sp, #313] ; 0x139 -1003a624: 0952 lsrs r2, r2, #5 -1003a626: e000 b.n 1003a62a <_ReadEfuseInfo8195a+0x82> -1003a628: 2200 movs r2, #0 -1003a62a: f883 2040 strb.w r2, [r3, #64] ; 0x40 -1003a62e: f241 4598 movw r5, #5272 ; 0x1498 -1003a632: 4620 mov r0, r4 -1003a634: a902 add r1, sp, #8 -1003a636: 5d62 ldrb r2, [r4, r5] -1003a638: f7f3 f8df bl 1002d7fa -1003a63c: 4620 mov r0, r4 -1003a63e: a902 add r1, sp, #8 -1003a640: 5d62 ldrb r2, [r4, r5] -1003a642: f7f3 f8fd bl 1002d840 -1003a646: 4620 mov r0, r4 -1003a648: a902 add r1, sp, #8 -1003a64a: 5d62 ldrb r2, [r4, r5] -1003a64c: f7f3 f904 bl 1002d858 -1003a650: 4620 mov r0, r4 -1003a652: a902 add r1, sp, #8 -1003a654: 5d62 ldrb r2, [r4, r5] -1003a656: f7f3 f8e8 bl 1002d82a -1003a65a: 4620 mov r0, r4 -1003a65c: a902 add r1, sp, #8 -1003a65e: 5d62 ldrb r2, [r4, r5] -1003a660: f7f3 f90e bl 1002d880 -1003a664: f50d 7d02 add.w sp, sp, #520 ; 0x208 -1003a668: bd70 pop {r4, r5, r6, pc} -1003a66a: bf00 nop -1003a66c: 10043f43 .word 0x10043f43 - -1003a670 : -1003a670: b570 push {r4, r5, r6, lr} -1003a672: f241 63c8 movw r3, #5832 ; 0x16c8 -1003a676: 6885 ldr r5, [r0, #8] -1003a678: 58c6 ldr r6, [r0, r3] -1003a67a: 4604 mov r4, r0 -1003a67c: f001 fb72 bl 1003bd64 -1003a680: 2304 movs r3, #4 -1003a682: 746b strb r3, [r5, #17] -1003a684: 2305 movs r3, #5 -1003a686: 74ab strb r3, [r5, #18] -1003a688: 2306 movs r3, #6 -1003a68a: 74eb strb r3, [r5, #19] -1003a68c: 2103 movs r1, #3 -1003a68e: 2307 movs r3, #7 -1003a690: f886 1e04 strb.w r1, [r6, #3588] ; 0xe04 -1003a694: f886 3e03 strb.w r3, [r6, #3587] ; 0xe03 -1003a698: 4620 mov r0, r4 -1003a69a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1003a69e: f7f7 b823 b.w 100316e8 - ... - -1003a6a4 : -1003a6a4: b530 push {r4, r5, lr} -1003a6a6: f241 73c5 movw r3, #6085 ; 0x17c5 -1003a6aa: 5cc4 ldrb r4, [r0, r3] -1003a6ac: b085 sub sp, #20 -1003a6ae: 2c01 cmp r4, #1 -1003a6b0: 4605 mov r5, r0 -1003a6b2: d10e bne.n 1003a6d2 -1003a6b4: aa04 add r2, sp, #16 -1003a6b6: 2300 movs r3, #0 -1003a6b8: f802 3d01 strb.w r3, [r2, #-1]! -1003a6bc: 2140 movs r1, #64 ; 0x40 -1003a6be: f7f7 ff08 bl 100324d2 -1003a6c2: 4b06 ldr r3, [pc, #24] ; (1003a6dc ) -1003a6c4: 4628 mov r0, r5 -1003a6c6: 9300 str r3, [sp, #0] -1003a6c8: 21ff movs r1, #255 ; 0xff -1003a6ca: 220f movs r2, #15 -1003a6cc: 4623 mov r3, r4 -1003a6ce: f001 f9bb bl 1003ba48 -1003a6d2: f7dd f88b bl 100177ec -1003a6d6: 2001 movs r0, #1 -1003a6d8: b005 add sp, #20 -1003a6da: bd30 pop {r4, r5, pc} -1003a6dc: 100458fc .word 0x100458fc - -1003a6e0 <_InitPowerOn>: -1003a6e0: b51f push {r0, r1, r2, r3, r4, lr} -1003a6e2: 2140 movs r1, #64 ; 0x40 -1003a6e4: f10d 020e add.w r2, sp, #14 -1003a6e8: 4604 mov r4, r0 -1003a6ea: f7f7 fef9 bl 100324e0 -1003a6ee: f89d 200e ldrb.w r2, [sp, #14] -1003a6f2: b9b2 cbnz r2, 1003a722 <_InitPowerOn+0x42> -1003a6f4: 211c movs r1, #28 -1003a6f6: 4620 mov r0, r4 -1003a6f8: f7fd fad4 bl 10037ca4 -1003a6fc: 4b17 ldr r3, [pc, #92] ; (1003a75c <_InitPowerOn+0x7c>) -1003a6fe: 4620 mov r0, r4 -1003a700: 9300 str r3, [sp, #0] -1003a702: 21ff movs r1, #255 ; 0xff -1003a704: 220f movs r2, #15 -1003a706: 2301 movs r3, #1 -1003a708: f001 f99e bl 1003ba48 -1003a70c: 2801 cmp r0, #1 -1003a70e: d107 bne.n 1003a720 <_InitPowerOn+0x40> -1003a710: aa04 add r2, sp, #16 -1003a712: f802 0d01 strb.w r0, [r2, #-1]! -1003a716: 2140 movs r1, #64 ; 0x40 -1003a718: 4620 mov r0, r4 -1003a71a: f7f7 feda bl 100324d2 -1003a71e: e000 b.n 1003a722 <_InitPowerOn+0x42> -1003a720: b1c8 cbz r0, 1003a756 <_InitPowerOn+0x76> -1003a722: f44f 7180 mov.w r1, #256 ; 0x100 -1003a726: 4620 mov r0, r4 -1003a728: f7fd faae bl 10037c88 -1003a72c: f440 62c7 orr.w r2, r0, #1592 ; 0x638 -1003a730: f042 0207 orr.w r2, r2, #7 -1003a734: b292 uxth r2, r2 -1003a736: f44f 7180 mov.w r1, #256 ; 0x100 -1003a73a: 4620 mov r0, r4 -1003a73c: f7fd fab9 bl 10037cb2 -1003a740: 2104 movs r1, #4 -1003a742: 4620 mov r0, r4 -1003a744: f7fd faa7 bl 10037c96 -1003a748: 2104 movs r1, #4 -1003a74a: f440 7280 orr.w r2, r0, #256 ; 0x100 -1003a74e: 4620 mov r0, r4 -1003a750: f7fd fab6 bl 10037cc0 -1003a754: 2001 movs r0, #1 -1003a756: b004 add sp, #16 -1003a758: bd10 pop {r4, pc} -1003a75a: bf00 nop -1003a75c: 1004599c .word 0x1004599c - -1003a760 : -1003a760: b510 push {r4, lr} -1003a762: 4604 mov r4, r0 -1003a764: f7ff ffbc bl 1003a6e0 <_InitPowerOn> -1003a768: 4b08 ldr r3, [pc, #32] ; (1003a78c ) -1003a76a: 681a ldr r2, [r3, #0] -1003a76c: f241 4398 movw r3, #5272 ; 0x1498 -1003a770: f3c2 1000 ubfx r0, r2, #4, #1 -1003a774: 18e1 adds r1, r4, r3 -1003a776: f082 0220 eor.w r2, r2, #32 -1003a77a: 7288 strb r0, [r1, #10] -1003a77c: f3c2 1240 ubfx r2, r2, #5, #1 -1003a780: 54e2 strb r2, [r4, r3] -1003a782: 4620 mov r0, r4 -1003a784: e8bd 4010 ldmia.w sp!, {r4, lr} -1003a788: f7ff bf0e b.w 1003a5a8 <_ReadEfuseInfo8195a> -1003a78c: 400000e0 .word 0x400000e0 - -1003a790 <_InitDriverInfoSize>: -1003a790: 460a mov r2, r1 -1003a792: f240 610f movw r1, #1551 ; 0x60f -1003a796: f7fd ba85 b.w 10037ca4 - -1003a79a <_InitNetworkType>: -1003a79a: b510 push {r4, lr} -1003a79c: f44f 7180 mov.w r1, #256 ; 0x100 -1003a7a0: 4604 mov r4, r0 -1003a7a2: f7fd fa78 bl 10037c96 -1003a7a6: f420 3240 bic.w r2, r0, #196608 ; 0x30000 -1003a7aa: f44f 7180 mov.w r1, #256 ; 0x100 -1003a7ae: 4620 mov r0, r4 -1003a7b0: f442 3200 orr.w r2, r2, #131072 ; 0x20000 -1003a7b4: e8bd 4010 ldmia.w sp!, {r4, lr} -1003a7b8: f7fd ba82 b.w 10037cc0 - -1003a7bc <_InitWMACSetting>: -1003a7bc: b538 push {r3, r4, r5, lr} -1003a7be: f241 63c8 movw r3, #5832 ; 0x16c8 -1003a7c2: 58c5 ldr r5, [r0, r3] -1003a7c4: 4a18 ldr r2, [pc, #96] ; (1003a828 <_InitWMACSetting+0x6c>) -1003a7c6: 4604 mov r4, r0 -1003a7c8: 62aa str r2, [r5, #40] ; 0x28 -1003a7ca: f44f 61c1 mov.w r1, #1544 ; 0x608 -1003a7ce: f7fd fa77 bl 10037cc0 -1003a7d2: f44f 61c4 mov.w r1, #1568 ; 0x620 -1003a7d6: f04f 32ff mov.w r2, #4294967295 -1003a7da: 4620 mov r0, r4 -1003a7dc: f7fd fa70 bl 10037cc0 -1003a7e0: f240 6124 movw r1, #1572 ; 0x624 -1003a7e4: f04f 32ff mov.w r2, #4294967295 -1003a7e8: 4620 mov r0, r4 -1003a7ea: f7fd fa69 bl 10037cc0 -1003a7ee: f240 61a4 movw r1, #1700 ; 0x6a4 -1003a7f2: f64f 72ff movw r2, #65535 ; 0xffff -1003a7f6: 4620 mov r0, r4 -1003a7f8: f7fd fa5b bl 10037cb2 -1003a7fc: f240 61a2 movw r1, #1698 ; 0x6a2 -1003a800: f44f 6280 mov.w r2, #1024 ; 0x400 -1003a804: 4620 mov r0, r4 -1003a806: f7fd fa54 bl 10037cb2 -1003a80a: f44f 61d4 mov.w r1, #1696 ; 0x6a0 -1003a80e: f64f 72ff movw r2, #65535 ; 0xffff -1003a812: 4620 mov r0, r4 -1003a814: f7fd fa4d bl 10037cb2 -1003a818: 4620 mov r0, r4 -1003a81a: f7f0 faee bl 1002adfa -1003a81e: 2300 movs r3, #0 -1003a820: f8a5 3e24 strh.w r3, [r5, #3620] ; 0xe24 -1003a824: bd38 pop {r3, r4, r5, pc} -1003a826: bf00 nop -1003a828: 700860ce .word 0x700860ce - -1003a82c <_InitAdaptiveCtrl>: -1003a82c: b510 push {r4, lr} -1003a82e: f44f 6188 mov.w r1, #1088 ; 0x440 -1003a832: 4604 mov r4, r0 -1003a834: f7fd fa2f bl 10037c96 -1003a838: 4a0c ldr r2, [pc, #48] ; (1003a86c <_InitAdaptiveCtrl+0x40>) -1003a83a: 0d03 lsrs r3, r0, #20 -1003a83c: 051b lsls r3, r3, #20 -1003a83e: 431a orrs r2, r3 -1003a840: 4620 mov r0, r4 -1003a842: f44f 6188 mov.w r1, #1088 ; 0x440 -1003a846: f7fd fa3b bl 10037cc0 -1003a84a: 4620 mov r0, r4 -1003a84c: f44f 6185 mov.w r1, #1064 ; 0x428 -1003a850: f241 0210 movw r2, #4112 ; 0x1010 -1003a854: f7fd fa2d bl 10037cb2 -1003a858: 4620 mov r0, r4 -1003a85a: f240 412a movw r1, #1066 ; 0x42a -1003a85e: f243 0230 movw r2, #12336 ; 0x3030 -1003a862: e8bd 4010 ldmia.w sp!, {r4, lr} -1003a866: f7fd ba24 b.w 10037cb2 -1003a86a: bf00 nop -1003a86c: 000ffff1 .word 0x000ffff1 - -1003a870 <_InitEDCA>: -1003a870: b510 push {r4, lr} -1003a872: f44f 6185 mov.w r1, #1064 ; 0x428 -1003a876: 4604 mov r4, r0 -1003a878: f241 020a movw r2, #4106 ; 0x100a -1003a87c: f7fd fa19 bl 10037cb2 -1003a880: 4620 mov r0, r4 -1003a882: f240 613a movw r1, #1594 ; 0x63a -1003a886: f241 020a movw r2, #4106 ; 0x100a -1003a88a: f7fd fa12 bl 10037cb2 -1003a88e: 4620 mov r0, r4 -1003a890: f240 5114 movw r1, #1300 ; 0x514 -1003a894: f241 020a movw r2, #4106 ; 0x100a -1003a898: f7fd fa0b bl 10037cb2 -1003a89c: 4620 mov r0, r4 -1003a89e: f240 5116 movw r1, #1302 ; 0x516 -1003a8a2: f241 020a movw r2, #4106 ; 0x100a -1003a8a6: f7fd fa04 bl 10037cb2 -1003a8aa: 4620 mov r0, r4 -1003a8ac: f44f 61a1 mov.w r1, #1288 ; 0x508 -1003a8b0: 4a0b ldr r2, [pc, #44] ; (1003a8e0 <_InitEDCA+0x70>) -1003a8b2: f7fd fa05 bl 10037cc0 -1003a8b6: 4620 mov r0, r4 -1003a8b8: f240 510c movw r1, #1292 ; 0x50c -1003a8bc: f24a 424f movw r2, #42063 ; 0xa44f -1003a8c0: f7fd f9fe bl 10037cc0 -1003a8c4: 4620 mov r0, r4 -1003a8c6: f240 5104 movw r1, #1284 ; 0x504 -1003a8ca: 4a06 ldr r2, [pc, #24] ; (1003a8e4 <_InitEDCA+0x74>) -1003a8cc: f7fd f9f8 bl 10037cc0 -1003a8d0: 4620 mov r0, r4 -1003a8d2: f44f 61a0 mov.w r1, #1280 ; 0x500 -1003a8d6: 4a04 ldr r2, [pc, #16] ; (1003a8e8 <_InitEDCA+0x78>) -1003a8d8: e8bd 4010 ldmia.w sp!, {r4, lr} -1003a8dc: f7fd b9f0 b.w 10037cc0 -1003a8e0: 005ea42b .word 0x005ea42b -1003a8e4: 005ea324 .word 0x005ea324 -1003a8e8: 002fa226 .word 0x002fa226 - -1003a8ec <_InitRateFallback>: -1003a8ec: b510 push {r4, lr} -1003a8ee: f44f 6186 mov.w r1, #1072 ; 0x430 -1003a8f2: 4604 mov r4, r0 -1003a8f4: 2200 movs r2, #0 -1003a8f6: f7fd f9e3 bl 10037cc0 -1003a8fa: 4620 mov r0, r4 -1003a8fc: f240 4134 movw r1, #1076 ; 0x434 -1003a900: 4a08 ldr r2, [pc, #32] ; (1003a924 <_InitRateFallback+0x38>) -1003a902: f7fd f9dd bl 10037cc0 -1003a906: 4620 mov r0, r4 -1003a908: f44f 6187 mov.w r1, #1080 ; 0x438 -1003a90c: 4a06 ldr r2, [pc, #24] ; (1003a928 <_InitRateFallback+0x3c>) -1003a90e: f7fd f9d7 bl 10037cc0 -1003a912: 4620 mov r0, r4 -1003a914: f240 413c movw r1, #1084 ; 0x43c -1003a918: 4a04 ldr r2, [pc, #16] ; (1003a92c <_InitRateFallback+0x40>) -1003a91a: e8bd 4010 ldmia.w sp!, {r4, lr} -1003a91e: f7fd b9cf b.w 10037cc0 -1003a922: bf00 nop -1003a924: 10080404 .word 0x10080404 -1003a928: 04030201 .word 0x04030201 -1003a92c: 08070605 .word 0x08070605 - -1003a930 <_InitRetryFunction>: -1003a930: b510 push {r4, lr} -1003a932: f44f 6184 mov.w r1, #1056 ; 0x420 -1003a936: 4604 mov r4, r0 -1003a938: f7fd f99f bl 10037c7a -1003a93c: f060 027f orn r2, r0, #127 ; 0x7f -1003a940: f44f 6184 mov.w r1, #1056 ; 0x420 -1003a944: 4620 mov r0, r4 -1003a946: b2d2 uxtb r2, r2 -1003a948: f7fd f9ac bl 10037ca4 -1003a94c: 4620 mov r0, r4 -1003a94e: f44f 61c8 mov.w r1, #1600 ; 0x640 -1003a952: 2240 movs r2, #64 ; 0x40 -1003a954: e8bd 4010 ldmia.w sp!, {r4, lr} -1003a958: f7fd b9a4 b.w 10037ca4 - -1003a95c <_InitOperationMode>: -1003a95c: b538 push {r3, r4, r5, lr} -1003a95e: f241 63c8 movw r3, #5832 ; 0x16c8 -1003a962: 58c5 ldr r5, [r0, r3] -1003a964: f890 3521 ldrb.w r3, [r0, #1313] ; 0x521 -1003a968: f240 6103 movw r1, #1539 ; 0x603 -1003a96c: 3b02 subs r3, #2 -1003a96e: b2db uxtb r3, r3 -1003a970: 2b0e cmp r3, #14 -1003a972: bf96 itet ls -1003a974: 4a0a ldrls r2, [pc, #40] ; (1003a9a0 <_InitOperationMode+0x44>) -1003a976: 2200 movhi r2, #0 -1003a978: 5cd2 ldrbls r2, [r2, r3] -1003a97a: 4604 mov r4, r0 -1003a97c: f7fd f992 bl 10037ca4 -1003a980: f895 303c ldrb.w r3, [r5, #60] ; 0x3c -1003a984: b11b cbz r3, 1003a98e <_InitOperationMode+0x32> -1003a986: 2b03 cmp r3, #3 -1003a988: d001 beq.n 1003a98e <_InitOperationMode+0x32> -1003a98a: 2200 movs r2, #0 -1003a98c: e000 b.n 1003a990 <_InitOperationMode+0x34> -1003a98e: 2250 movs r2, #80 ; 0x50 -1003a990: 4620 mov r0, r4 -1003a992: f240 415c movw r1, #1116 ; 0x45c -1003a996: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1003a99a: f7fd b983 b.w 10037ca4 -1003a99e: bf00 nop -1003a9a0: 10043f49 .word 0x10043f49 - -1003a9a4 <_InitInterrupt>: -1003a9a4: b510 push {r4, lr} -1003a9a6: 2180 movs r1, #128 ; 0x80 -1003a9a8: 4604 mov r4, r0 -1003a9aa: 2200 movs r2, #0 -1003a9ac: f7fd f988 bl 10037cc0 -1003a9b0: 4620 mov r0, r4 -1003a9b2: f44f 7198 mov.w r1, #304 ; 0x130 -1003a9b6: 2200 movs r2, #0 -1003a9b8: f7fd f982 bl 10037cc0 -1003a9bc: 4620 mov r0, r4 -1003a9be: f44f 719c mov.w r1, #312 ; 0x138 -1003a9c2: 2200 movs r2, #0 -1003a9c4: f7fd f97c bl 10037cc0 -1003a9c8: 4620 mov r0, r4 -1003a9ca: f44f 717b mov.w r1, #1004 ; 0x3ec -1003a9ce: 2200 movs r2, #0 -1003a9d0: f7fd f976 bl 10037cc0 -1003a9d4: 4620 mov r0, r4 -1003a9d6: f7f0 fbb7 bl 1002b148 -1003a9da: 4620 mov r0, r4 -1003a9dc: e8bd 4010 ldmia.w sp!, {r4, lr} -1003a9e0: f7f6 bba2 b.w 10031128 - -1003a9e4 : -1003a9e4: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} -1003a9e8: f247 5330 movw r3, #30000 ; 0x7530 -1003a9ec: b085 sub sp, #20 -1003a9ee: 4604 mov r4, r0 -1003a9f0: 9303 str r3, [sp, #12] -1003a9f2: f241 63c8 movw r3, #5832 ; 0x16c8 -1003a9f6: 58c6 ldr r6, [r0, r3] -1003a9f8: f7dc fef0 bl 100177dc -1003a9fc: 4620 mov r0, r4 -1003a9fe: f7ff fe6f bl 1003a6e0 <_InitPowerOn> -1003aa02: b908 cbnz r0, 1003aa08 -1003aa04: 2000 movs r0, #0 -1003aa06: e150 b.n 1003acaa -1003aa08: 2301 movs r3, #1 -1003aa0a: f641 0259 movw r2, #6233 ; 0x1859 -1003aa0e: 54a3 strb r3, [r4, r2] -1003aa10: f504 57a0 add.w r7, r4, #5120 ; 0x1400 -1003aa14: f886 31a4 strb.w r3, [r6, #420] ; 0x1a4 -1003aa18: 7ebb ldrb r3, [r7, #26] -1003aa1a: 2b01 cmp r3, #1 -1003aa1c: bf04 itt eq -1003aa1e: 2302 moveq r3, #2 -1003aa20: 673b streq r3, [r7, #112] ; 0x70 -1003aa22: f241 63c8 movw r3, #5832 ; 0x16c8 -1003aa26: 58e3 ldr r3, [r4, r3] -1003aa28: 681a ldr r2, [r3, #0] -1003aa2a: 3a01 subs r2, #1 -1003aa2c: 2a01 cmp r2, #1 -1003aa2e: d804 bhi.n 1003aa3a -1003aa30: 691a ldr r2, [r3, #16] -1003aa32: 1e91 subs r1, r2, #2 -1003aa34: 424a negs r2, r1 -1003aa36: 414a adcs r2, r1 -1003aa38: e000 b.n 1003aa3c -1003aa3a: 2200 movs r2, #0 -1003aa3c: 2104 movs r1, #4 -1003aa3e: f883 103b strb.w r1, [r3, #59] ; 0x3b -1003aa42: b912 cbnz r2, 1003aa4a -1003aa44: 2203 movs r2, #3 -1003aa46: f883 203c strb.w r2, [r3, #60] ; 0x3c -1003aa4a: 2306 movs r3, #6 -1003aa4c: f886 3034 strb.w r3, [r6, #52] ; 0x34 -1003aa50: 4620 mov r0, r4 -1003aa52: f7f4 f95f bl 1002ed14 -1003aa56: 2801 cmp r0, #1 -1003aa58: f040 8127 bne.w 1003acaa -1003aa5c: 4620 mov r0, r4 -1003aa5e: f7f4 f966 bl 1002ed2e -1003aa62: 2801 cmp r0, #1 -1003aa64: f040 8121 bne.w 1003acaa -1003aa68: 4620 mov r0, r4 -1003aa6a: f7f4 f9f3 bl 1002ee54 -1003aa6e: 2801 cmp r0, #1 -1003aa70: 4605 mov r5, r0 -1003aa72: f040 811a bne.w 1003acaa -1003aa76: 4620 mov r0, r4 -1003aa78: f44f 6100 mov.w r1, #2048 ; 0x800 -1003aa7c: f04f 7280 mov.w r2, #16777216 ; 0x1000000 -1003aa80: 462b mov r3, r5 -1003aa82: f7f4 f8a0 bl 1002ebc6 -1003aa86: 4620 mov r0, r4 -1003aa88: f44f 6100 mov.w r1, #2048 ; 0x800 -1003aa8c: f04f 7200 mov.w r2, #33554432 ; 0x2000000 -1003aa90: 462b mov r3, r5 -1003aa92: f7f4 f898 bl 1002ebc6 -1003aa96: 2218 movs r2, #24 -1003aa98: 4b85 ldr r3, [pc, #532] ; (1003acb0 ) -1003aa9a: 4620 mov r0, r4 -1003aa9c: 2100 movs r1, #0 -1003aa9e: f7f4 f901 bl 1002eca4 -1003aaa2: f504 539c add.w r3, r4, #4992 ; 0x1380 -1003aaa6: f8c6 01a0 str.w r0, [r6, #416] ; 0x1a0 -1003aaaa: f893 2052 ldrb.w r2, [r3, #82] ; 0x52 -1003aaae: f241 63c8 movw r3, #5832 ; 0x16c8 -1003aab2: 58e3 ldr r3, [r4, r3] -1003aab4: f893 3e03 ldrb.w r3, [r3, #3587] ; 0xe03 -1003aab8: f013 0901 ands.w r9, r3, #1 -1003aabc: d005 beq.n 1003aaca -1003aabe: 2a00 cmp r2, #0 -1003aac0: bf0c ite eq -1003aac2: f04f 090c moveq.w r9, #12 -1003aac6: f04f 0930 movne.w r9, #48 ; 0x30 -1003aaca: f003 0102 and.w r1, r3, #2 -1003aace: f001 08ff and.w r8, r1, #255 ; 0xff -1003aad2: b129 cbz r1, 1003aae0 -1003aad4: 2a00 cmp r2, #0 -1003aad6: bf0c ite eq -1003aad8: f04f 0802 moveq.w r8, #2 -1003aadc: f04f 0820 movne.w r8, #32 -1003aae0: f003 0304 and.w r3, r3, #4 -1003aae4: f003 05ff and.w r5, r3, #255 ; 0xff -1003aae8: b11b cbz r3, 1003aaf2 -1003aaea: 2a00 cmp r2, #0 -1003aaec: bf0c ite eq -1003aaee: 2502 moveq r5, #2 -1003aaf0: 2520 movne r5, #32 -1003aaf2: 462a mov r2, r5 -1003aaf4: f44f 7105 mov.w r1, #532 ; 0x214 -1003aaf8: 4620 mov r0, r4 -1003aafa: f7fd f8d3 bl 10037ca4 -1003aafe: f049 4300 orr.w r3, r9, #2147483648 ; 0x80000000 -1003ab02: f1c9 09f3 rsb r9, r9, #243 ; 0xf3 -1003ab06: ea43 2208 orr.w r2, r3, r8, lsl #8 -1003ab0a: ebc8 0809 rsb r8, r8, r9 -1003ab0e: ebc5 0508 rsb r5, r5, r8 -1003ab12: f44f 7100 mov.w r1, #512 ; 0x200 -1003ab16: ea42 4205 orr.w r2, r2, r5, lsl #16 -1003ab1a: 4620 mov r0, r4 -1003ab1c: f7fd f8d0 bl 10037cc0 -1003ab20: f240 4124 movw r1, #1060 ; 0x424 -1003ab24: 22f4 movs r2, #244 ; 0xf4 -1003ab26: 4620 mov r0, r4 -1003ab28: f7fd f8bc bl 10037ca4 -1003ab2c: f240 4125 movw r1, #1061 ; 0x425 -1003ab30: 22f4 movs r2, #244 ; 0xf4 -1003ab32: 4620 mov r0, r4 -1003ab34: f7fd f8b6 bl 10037ca4 -1003ab38: f240 415d movw r1, #1117 ; 0x45d -1003ab3c: 22f4 movs r2, #244 ; 0xf4 -1003ab3e: 4620 mov r0, r4 -1003ab40: f7fd f8b0 bl 10037ca4 -1003ab44: f44f 718a mov.w r1, #276 ; 0x114 -1003ab48: 22f4 movs r2, #244 ; 0xf4 -1003ab4a: 4620 mov r0, r4 -1003ab4c: f7fd f8aa bl 10037ca4 -1003ab50: f240 2109 movw r1, #521 ; 0x209 -1003ab54: 22f4 movs r2, #244 ; 0xf4 -1003ab56: 4620 mov r0, r4 -1003ab58: f7fd f8a4 bl 10037ca4 -1003ab5c: f240 4157 movw r1, #1111 ; 0x457 -1003ab60: 22fc movs r2, #252 ; 0xfc -1003ab62: 4620 mov r0, r4 -1003ab64: f7fd f89e bl 10037ca4 -1003ab68: 22fc movs r2, #252 ; 0xfc -1003ab6a: f240 2129 movw r1, #553 ; 0x229 -1003ab6e: 4620 mov r0, r4 -1003ab70: f7fd f898 bl 10037ca4 -1003ab74: f240 212a movw r1, #554 ; 0x22a -1003ab78: 4620 mov r0, r4 -1003ab7a: f7fd f87e bl 10037c7a -1003ab7e: f040 0202 orr.w r2, r0, #2 -1003ab82: f240 212a movw r1, #554 ; 0x22a -1003ab86: b2d2 uxtb r2, r2 -1003ab88: 4620 mov r0, r4 -1003ab8a: f7fd f88b bl 10037ca4 -1003ab8e: 4620 mov r0, r4 -1003ab90: f7f2 fc0d bl 1002d3ae -1003ab94: 2801 cmp r0, #1 -1003ab96: 4680 mov r8, r0 -1003ab98: f47f af34 bne.w 1003aa04 -1003ab9c: f44f 7186 mov.w r1, #268 ; 0x10c -1003aba0: 4620 mov r0, r4 -1003aba2: f7fd f871 bl 10037c88 -1003aba6: f000 0207 and.w r2, r0, #7 -1003abaa: f442 4275 orr.w r2, r2, #62720 ; 0xf500 -1003abae: f44f 7186 mov.w r1, #268 ; 0x10c -1003abb2: f042 02b0 orr.w r2, r2, #176 ; 0xb0 -1003abb6: 4620 mov r0, r4 -1003abb8: f7fd f87b bl 10037cb2 -1003abbc: f44f 718b mov.w r1, #278 ; 0x116 -1003abc0: f643 727f movw r2, #16255 ; 0x3f7f -1003abc4: 4620 mov r0, r4 -1003abc6: f7fd f874 bl 10037cb2 -1003abca: 2211 movs r2, #17 -1003abcc: f44f 7182 mov.w r1, #260 ; 0x104 -1003abd0: 4620 mov r0, r4 -1003abd2: f7fd f867 bl 10037ca4 -1003abd6: 2104 movs r1, #4 -1003abd8: 4620 mov r0, r4 -1003abda: f7ff fdd9 bl 1003a790 <_InitDriverInfoSize> -1003abde: 4620 mov r0, r4 -1003abe0: f7f6 fd90 bl 10031704 -1003abe4: 4620 mov r0, r4 -1003abe6: f7ff fdd8 bl 1003a79a <_InitNetworkType> -1003abea: 4620 mov r0, r4 -1003abec: f7ff fde6 bl 1003a7bc <_InitWMACSetting> -1003abf0: 4620 mov r0, r4 -1003abf2: f7ff fe1b bl 1003a82c <_InitAdaptiveCtrl> -1003abf6: 4620 mov r0, r4 -1003abf8: f7ff fe3a bl 1003a870 <_InitEDCA> -1003abfc: 4620 mov r0, r4 -1003abfe: f7ff fe75 bl 1003a8ec <_InitRateFallback> -1003ac02: 4620 mov r0, r4 -1003ac04: f7ff fe94 bl 1003a930 <_InitRetryFunction> -1003ac08: 4620 mov r0, r4 -1003ac0a: f7ff fea7 bl 1003a95c <_InitOperationMode> -1003ac0e: 4620 mov r0, r4 -1003ac10: f7f2 fb1d bl 1002d24e -1003ac14: 4620 mov r0, r4 -1003ac16: f7ff fec5 bl 1003a9a4 <_InitInterrupt> -1003ac1a: 4620 mov r0, r4 -1003ac1c: f7f2 fb4f bl 1002d2be <_InitBurstPktLen_8195AB> -1003ac20: f44f 6198 mov.w r1, #1216 ; 0x4c0 -1003ac24: f44f 5240 mov.w r2, #12288 ; 0x3000 -1003ac28: 4620 mov r0, r4 -1003ac2a: f7fd f842 bl 10037cb2 -1003ac2e: f240 41c2 movw r1, #1218 ; 0x4c2 -1003ac32: f44f 5240 mov.w r2, #12288 ; 0x3000 -1003ac36: 4620 mov r0, r4 -1003ac38: f7fd f83b bl 10037cb2 -1003ac3c: 4620 mov r0, r4 -1003ac3e: f7ed fdd9 bl 100287f4 -1003ac42: 2500 movs r5, #0 -1003ac44: f241 33b4 movw r3, #5044 ; 0x13b4 -1003ac48: 5ce1 ldrb r1, [r4, r3] -1003ac4a: 4620 mov r0, r4 -1003ac4c: 462b mov r3, r5 -1003ac4e: 462a mov r2, r5 -1003ac50: 9500 str r5, [sp, #0] -1003ac52: f7f7 fd54 bl 100326fe -1003ac56: f240 41cc movw r1, #1228 ; 0x4cc -1003ac5a: 4a16 ldr r2, [pc, #88] ; (1003acb4 ) -1003ac5c: 4620 mov r0, r4 -1003ac5e: f7fd f82f bl 10037cc0 -1003ac62: 22ff movs r2, #255 ; 0xff -1003ac64: f240 4123 movw r1, #1059 ; 0x423 -1003ac68: 4620 mov r0, r4 -1003ac6a: f7fd f81b bl 10037ca4 -1003ac6e: 4620 mov r0, r4 -1003ac70: f000 fc76 bl 1003b560 -1003ac74: f44f 7180 mov.w r1, #256 ; 0x100 -1003ac78: 4620 mov r0, r4 -1003ac7a: f7fc fffe bl 10037c7a -1003ac7e: f060 023f orn r2, r0, #63 ; 0x3f -1003ac82: f44f 7180 mov.w r1, #256 ; 0x100 -1003ac86: b2d2 uxtb r2, r2 -1003ac88: 4620 mov r0, r4 -1003ac8a: f7fd f80b bl 10037ca4 -1003ac8e: 4620 mov r0, r4 -1003ac90: 2141 movs r1, #65 ; 0x41 -1003ac92: aa03 add r2, sp, #12 -1003ac94: f7f7 fc1d bl 100324d2 -1003ac98: 4620 mov r0, r4 -1003ac9a: 673d str r5, [r7, #112] ; 0x70 -1003ac9c: 4629 mov r1, r5 -1003ac9e: 462a mov r2, r5 -1003aca0: f002 fb8e bl 1003d3c0 -1003aca4: f886 8ca8 strb.w r8, [r6, #3240] ; 0xca8 -1003aca8: 4640 mov r0, r8 -1003acaa: b005 add sp, #20 -1003acac: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} -1003acb0: 000fffff .word 0x000fffff -1003acb4: 0201ffff .word 0x0201ffff - -1003acb8 : -1003acb8: b570 push {r4, r5, r6, lr} -1003acba: f641 0369 movw r3, #6249 ; 0x1869 -1003acbe: 5cc3 ldrb r3, [r0, r3] -1003acc0: f500 54b6 add.w r4, r0, #5824 ; 0x16c0 -1003acc4: 4605 mov r5, r0 -1003acc6: 3410 adds r4, #16 -1003acc8: b953 cbnz r3, 1003ace0 -1003acca: f640 60b8 movw r0, #3768 ; 0xeb8 -1003acce: f7dc fd4f bl 10017770 -1003acd2: f241 63c8 movw r3, #5832 ; 0x16c8 -1003acd6: 1c06 adds r6, r0, #0 -1003acd8: 50e8 str r0, [r5, r3] -1003acda: bf18 it ne -1003acdc: 2601 movne r6, #1 -1003acde: e000 b.n 1003ace2 -1003ace0: 2601 movs r6, #1 -1003ace2: f640 62b8 movw r2, #3768 ; 0xeb8 -1003ace6: f241 63cc movw r3, #5836 ; 0x16cc -1003acea: 50ea str r2, [r5, r3] -1003acec: 4620 mov r0, r4 -1003acee: f7f2 faeb bl 1002d2c8 -1003acf2: 4b15 ldr r3, [pc, #84] ; (1003ad48 ) -1003acf4: 4630 mov r0, r6 -1003acf6: 6063 str r3, [r4, #4] -1003acf8: 4b14 ldr r3, [pc, #80] ; (1003ad4c ) -1003acfa: 60a3 str r3, [r4, #8] -1003acfc: 4b14 ldr r3, [pc, #80] ; (1003ad50 ) -1003acfe: 6123 str r3, [r4, #16] -1003ad00: 4b14 ldr r3, [pc, #80] ; (1003ad54 ) -1003ad02: 6163 str r3, [r4, #20] -1003ad04: 4b14 ldr r3, [pc, #80] ; (1003ad58 ) -1003ad06: 61a3 str r3, [r4, #24] -1003ad08: 4b14 ldr r3, [pc, #80] ; (1003ad5c ) -1003ad0a: 61e3 str r3, [r4, #28] -1003ad0c: 4b14 ldr r3, [pc, #80] ; (1003ad60 ) -1003ad0e: 6223 str r3, [r4, #32] -1003ad10: 4b14 ldr r3, [pc, #80] ; (1003ad64 ) -1003ad12: 6463 str r3, [r4, #68] ; 0x44 -1003ad14: 4b14 ldr r3, [pc, #80] ; (1003ad68 ) -1003ad16: 64a3 str r3, [r4, #72] ; 0x48 -1003ad18: 4b14 ldr r3, [pc, #80] ; (1003ad6c ) -1003ad1a: 64e3 str r3, [r4, #76] ; 0x4c -1003ad1c: 4b14 ldr r3, [pc, #80] ; (1003ad70 ) -1003ad1e: 6523 str r3, [r4, #80] ; 0x50 -1003ad20: 4b14 ldr r3, [pc, #80] ; (1003ad74 ) -1003ad22: 6563 str r3, [r4, #84] ; 0x54 -1003ad24: 4b14 ldr r3, [pc, #80] ; (1003ad78 ) -1003ad26: 65a3 str r3, [r4, #88] ; 0x58 -1003ad28: 4b14 ldr r3, [pc, #80] ; (1003ad7c ) -1003ad2a: 6723 str r3, [r4, #112] ; 0x70 -1003ad2c: 4b14 ldr r3, [pc, #80] ; (1003ad80 ) -1003ad2e: 6763 str r3, [r4, #116] ; 0x74 -1003ad30: 4b14 ldr r3, [pc, #80] ; (1003ad84 ) -1003ad32: 67a3 str r3, [r4, #120] ; 0x78 -1003ad34: 4b14 ldr r3, [pc, #80] ; (1003ad88 ) -1003ad36: 67e3 str r3, [r4, #124] ; 0x7c -1003ad38: 4b14 ldr r3, [pc, #80] ; (1003ad8c ) -1003ad3a: f8c4 309c str.w r3, [r4, #156] ; 0x9c -1003ad3e: 4b14 ldr r3, [pc, #80] ; (1003ad90 ) -1003ad40: f8c4 30a0 str.w r3, [r4, #160] ; 0xa0 -1003ad44: bd70 pop {r4, r5, r6, pc} -1003ad46: bf00 nop -1003ad48: 1003a9e5 .word 0x1003a9e5 -1003ad4c: 1003a6a5 .word 0x1003a6a5 -1003ad50: 1002ac09 .word 0x1002ac09 -1003ad54: 1002ad49 .word 0x1002ad49 -1003ad58: 1002ad65 .word 0x1002ad65 -1003ad5c: 1002ba09 .word 0x1002ba09 -1003ad60: 1002ba17 .word 0x1002ba17 -1003ad64: 1002d3ad .word 0x1002d3ad -1003ad68: 1003a671 .word 0x1003a671 -1003ad6c: 1003a761 .word 0x1003a761 -1003ad70: 1002b191 .word 0x1002b191 -1003ad74: 1002b1dd .word 0x1002b1dd -1003ad78: 1002b661 .word 0x1002b661 -1003ad7c: 1002dd0d .word 0x1002dd0d -1003ad80: 1002ea05 .word 0x1002ea05 -1003ad84: 1002eb79 .word 0x1002eb79 -1003ad88: 1002ea99 .word 0x1002ea99 -1003ad8c: 1002c1d5 .word 0x1002c1d5 -1003ad90: 1002c199 .word 0x1002c199 - -1003ad94 : -1003ad94: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} -1003ad98: 461e mov r6, r3 -1003ad9a: f641 0364 movw r3, #6244 ; 0x1864 -1003ad9e: 4607 mov r7, r0 -1003ada0: 58c0 ldr r0, [r0, r3] -1003ada2: 4688 mov r8, r1 -1003ada4: 4691 mov r9, r2 -1003ada6: f7dc fbb1 bl 1001750c -1003adaa: b376 cbz r6, 1003ae0a -1003adac: f1b9 0f0b cmp.w r9, #11 -1003adb0: d82a bhi.n 1003ae08 -1003adb2: f241 73b0 movw r3, #6064 ; 0x17b0 -1003adb6: 58fb ldr r3, [r7, r3] -1003adb8: 2b01 cmp r3, #1 -1003adba: d025 beq.n 1003ae08 -1003adbc: 4b17 ldr r3, [pc, #92] ; (1003ae1c ) -1003adbe: f04f 6400 mov.w r4, #134217728 ; 0x8000000 -1003adc2: 2500 movs r5, #0 -1003adc4: e9d3 2302 ldrd r2, r3, [r3, #8] -1003adc8: 4014 ands r4, r2 -1003adca: 401d ands r5, r3 -1003adcc: ea54 0305 orrs.w r3, r4, r5 -1003add0: d013 beq.n 1003adfa -1003add2: 4641 mov r1, r8 -1003add4: 4812 ldr r0, [pc, #72] ; (1003ae20 ) -1003add6: f7df fec3 bl 1001ab60 -1003adda: 4812 ldr r0, [pc, #72] ; (1003ae24 ) -1003addc: f7df fec0 bl 1001ab60 -1003ade0: 4634 mov r4, r6 -1003ade2: 44b1 add r9, r6 -1003ade4: 454c cmp r4, r9 -1003ade6: d005 beq.n 1003adf4 -1003ade8: f814 1b01 ldrb.w r1, [r4], #1 -1003adec: 480e ldr r0, [pc, #56] ; (1003ae28 ) -1003adee: f7df feb7 bl 1001ab60 -1003adf2: e7f7 b.n 1003ade4 -1003adf4: 480d ldr r0, [pc, #52] ; (1003ae2c ) -1003adf6: f7df feb3 bl 1001ab60 -1003adfa: 4632 mov r2, r6 -1003adfc: 4638 mov r0, r7 -1003adfe: 4641 mov r1, r8 -1003ae00: f000 fdec bl 1003b9dc -1003ae04: 2601 movs r6, #1 -1003ae06: e000 b.n 1003ae0a -1003ae08: 2600 movs r6, #0 -1003ae0a: f641 0364 movw r3, #6244 ; 0x1864 -1003ae0e: 58f8 ldr r0, [r7, r3] -1003ae10: f7dc fb74 bl 100174fc -1003ae14: 4630 mov r0, r6 -1003ae16: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} -1003ae1a: bf00 nop -1003ae1c: 10000720 .word 0x10000720 -1003ae20: 10043f5e .word 0x10043f5e -1003ae24: 10043f6f .word 0x10043f6f -1003ae28: 1003f7a1 .word 0x1003f7a1 -1003ae2c: 1003fe9e .word 0x1003fe9e - -1003ae30 : -1003ae30: 4770 bx lr - -1003ae32 : -1003ae32: 460b mov r3, r1 -1003ae34: 2201 movs r2, #1 -1003ae36: 2100 movs r1, #0 -1003ae38: f7ff bfac b.w 1003ad94 - -1003ae3c : -1003ae3c: b507 push {r0, r1, r2, lr} -1003ae3e: 2300 movs r3, #0 -1003ae40: f001 0101 and.w r1, r1, #1 -1003ae44: f88d 3006 strb.w r3, [sp, #6] -1003ae48: f88d 1004 strb.w r1, [sp, #4] -1003ae4c: f88d 2005 strb.w r2, [sp, #5] -1003ae50: 2101 movs r1, #1 -1003ae52: 2203 movs r2, #3 -1003ae54: ab01 add r3, sp, #4 -1003ae56: f7ff ff9d bl 1003ad94 -1003ae5a: b003 add sp, #12 -1003ae5c: f85d fb04 ldr.w pc, [sp], #4 - -1003ae60 : -1003ae60: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} -1003ae64: 4682 mov sl, r0 -1003ae66: 4689 mov r9, r1 -1003ae68: 4690 mov r8, r2 -1003ae6a: a802 add r0, sp, #8 -1003ae6c: 2207 movs r2, #7 -1003ae6e: 2100 movs r1, #0 -1003ae70: 461f mov r7, r3 -1003ae72: 9e0d ldr r6, [sp, #52] ; 0x34 -1003ae74: f002 fec6 bl 1003dc04 -1003ae78: 4b24 ldr r3, [pc, #144] ; (1003af0c ) -1003ae7a: f44f 7200 mov.w r2, #512 ; 0x200 -1003ae7e: e9d3 4502 ldrd r4, r5, [r3, #8] -1003ae82: 2300 movs r3, #0 -1003ae84: 4014 ands r4, r2 -1003ae86: 401d ands r5, r3 -1003ae88: ea54 0305 orrs.w r3, r4, r5 -1003ae8c: d00b beq.n 1003aea6 -1003ae8e: 4b20 ldr r3, [pc, #128] ; (1003af10 ) -1003ae90: 681b ldr r3, [r3, #0] -1003ae92: b143 cbz r3, 1003aea6 -1003ae94: 4b1f ldr r3, [pc, #124] ; (1003af14 ) -1003ae96: 9700 str r7, [sp, #0] -1003ae98: 9601 str r6, [sp, #4] -1003ae9a: 6ad8 ldr r0, [r3, #44] ; 0x2c -1003ae9c: 491e ldr r1, [pc, #120] ; (1003af18 ) -1003ae9e: 464a mov r2, r9 -1003aea0: 4643 mov r3, r8 -1003aea2: f7df fe5d bl 1001ab60 -1003aea6: f89d 3009 ldrb.w r3, [sp, #9] -1003aeaa: f008 081f and.w r8, r8, #31 -1003aeae: f003 0360 and.w r3, r3, #96 ; 0x60 -1003aeb2: ea43 0808 orr.w r8, r3, r8 -1003aeb6: f89d 3030 ldrb.w r3, [sp, #48] ; 0x30 -1003aeba: f007 0703 and.w r7, r7, #3 -1003aebe: 2b00 cmp r3, #0 -1003aec0: bf0c ite eq -1003aec2: 2300 moveq r3, #0 -1003aec4: 2380 movne r3, #128 ; 0x80 -1003aec6: ea43 0808 orr.w r8, r3, r8 -1003aeca: f89d 300a ldrb.w r3, [sp, #10] -1003aece: f88d 600b strb.w r6, [sp, #11] -1003aed2: f023 0303 bic.w r3, r3, #3 -1003aed6: 431f orrs r7, r3 -1003aed8: f3c6 2307 ubfx r3, r6, #8, #8 -1003aedc: f88d 300c strb.w r3, [sp, #12] -1003aee0: f3c6 4307 ubfx r3, r6, #16, #8 -1003aee4: f88d 300d strb.w r3, [sp, #13] -1003aee8: 0e36 lsrs r6, r6, #24 -1003aeea: 4650 mov r0, sl -1003aeec: 2140 movs r1, #64 ; 0x40 -1003aeee: 2207 movs r2, #7 -1003aef0: ab02 add r3, sp, #8 -1003aef2: f88d 9008 strb.w r9, [sp, #8] -1003aef6: f88d 8009 strb.w r8, [sp, #9] -1003aefa: f88d 700a strb.w r7, [sp, #10] -1003aefe: f88d 600e strb.w r6, [sp, #14] -1003af02: f7ff ff47 bl 1003ad94 -1003af06: b004 add sp, #16 -1003af08: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1003af0c: 10000720 .word 0x10000720 -1003af10: 10044ec0 .word 0x10044ec0 -1003af14: 10043a4c .word 0x10043a4c -1003af18: 10043f74 .word 0x10043f74 - -1003af1c : -1003af1c: b530 push {r4, r5, lr} -1003af1e: b085 sub sp, #20 -1003af20: 4604 mov r4, r0 -1003af22: 460d mov r5, r1 -1003af24: 220b movs r2, #11 -1003af26: a801 add r0, sp, #4 -1003af28: 2100 movs r1, #0 -1003af2a: f002 fe6b bl 1003dc04 -1003af2e: f504 53a0 add.w r3, r4, #5120 ; 0x1400 -1003af32: f893 2094 ldrb.w r2, [r3, #148] ; 0x94 -1003af36: 2d00 cmp r5, #0 -1003af38: bf0c ite eq -1003af3a: 200c moveq r0, #12 -1003af3c: 2000 movne r0, #0 -1003af3e: b11a cbz r2, 1003af48 -1003af40: 3201 adds r2, #1 -1003af42: b2d1 uxtb r1, r2 -1003af44: 2202 movs r2, #2 -1003af46: e000 b.n 1003af4a -1003af48: 2101 movs r1, #1 -1003af4a: f88d 5004 strb.w r5, [sp, #4] -1003af4e: 7a5d ldrb r5, [r3, #9] -1003af50: f88d 1006 strb.w r1, [sp, #6] -1003af54: ea42 1205 orr.w r2, r2, r5, lsl #4 -1003af58: f88d 2005 strb.w r2, [sp, #5] -1003af5c: f241 32c6 movw r2, #5062 ; 0x13c6 -1003af60: 5ca2 ldrb r2, [r4, r2] -1003af62: f88d 0008 strb.w r0, [sp, #8] -1003af66: f88d 2007 strb.w r2, [sp, #7] -1003af6a: 2240 movs r2, #64 ; 0x40 -1003af6c: f88d 2009 strb.w r2, [sp, #9] -1003af70: f893 2090 ldrb.w r2, [r3, #144] ; 0x90 -1003af74: 4620 mov r0, r4 -1003af76: f88d 200b strb.w r2, [sp, #11] -1003af7a: f893 2091 ldrb.w r2, [r3, #145] ; 0x91 -1003af7e: 2120 movs r1, #32 -1003af80: f88d 200c strb.w r2, [sp, #12] -1003af84: f893 2092 ldrb.w r2, [r3, #146] ; 0x92 -1003af88: f893 3093 ldrb.w r3, [r3, #147] ; 0x93 -1003af8c: f88d 200d strb.w r2, [sp, #13] -1003af90: f88d 300e strb.w r3, [sp, #14] -1003af94: 220b movs r2, #11 -1003af96: ab01 add r3, sp, #4 -1003af98: f7ff fefc bl 1003ad94 -1003af9c: b005 add sp, #20 -1003af9e: bd30 pop {r4, r5, pc} - -1003afa0 : -1003afa0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1003afa4: 2901 cmp r1, #1 -1003afa6: b08f sub sp, #60 ; 0x3c -1003afa8: 4605 mov r5, r0 -1003afaa: 468a mov sl, r1 -1003afac: f040 8177 bne.w 1003b29e -1003afb0: f8b0 2728 ldrh.w r2, [r0, #1832] ; 0x728 -1003afb4: f44f 61d5 mov.w r1, #1704 ; 0x6a8 -1003afb8: ea6f 4282 mvn.w r2, r2, lsl #18 -1003afbc: ea6f 4292 mvn.w r2, r2, lsr #18 -1003afc0: b292 uxth r2, r2 -1003afc2: f7fc fe76 bl 10037cb2 -1003afc6: f44f 6080 mov.w r0, #1024 ; 0x400 -1003afca: f7dc fbf1 bl 100177b0 -1003afce: 4604 mov r4, r0 -1003afd0: 2800 cmp r0, #0 -1003afd2: f000 8164 beq.w 1003b29e -1003afd6: a80a add r0, sp, #40 ; 0x28 -1003afd8: 2100 movs r1, #0 -1003afda: 2210 movs r2, #16 -1003afdc: f7dc fa28 bl 10017430 -1003afe0: 4bb0 ldr r3, [pc, #704] ; (1003b2a4 ) -1003afe2: f04f 0800 mov.w r8, #0 -1003afe6: 6818 ldr r0, [r3, #0] -1003afe8: f505 57a4 add.w r7, r5, #5248 ; 0x1480 -1003afec: 889b ldrh r3, [r3, #4] -1003afee: 9008 str r0, [sp, #32] -1003aff0: a908 add r1, sp, #32 -1003aff2: f104 002c add.w r0, r4, #44 ; 0x2c -1003aff6: 2206 movs r2, #6 -1003aff8: f8a4 8028 strh.w r8, [r4, #40] ; 0x28 -1003affc: 3719 adds r7, #25 -1003affe: f8ad 3024 strh.w r3, [sp, #36] ; 0x24 -1003b002: 940c str r4, [sp, #48] ; 0x30 -1003b004: f105 0998 add.w r9, r5, #152 ; 0x98 -1003b008: f7dc fa02 bl 10017410 -1003b00c: 4639 mov r1, r7 -1003b00e: 2206 movs r2, #6 -1003b010: f104 0032 add.w r0, r4, #50 ; 0x32 -1003b014: f7dc f9fc bl 10017410 -1003b018: 4648 mov r0, r9 -1003b01a: f7ed fba1 bl 10028760 -1003b01e: 2206 movs r2, #6 -1003b020: 4601 mov r1, r0 -1003b022: f104 0038 add.w r0, r4, #56 ; 0x38 -1003b026: f7dc f9f3 bl 10017410 -1003b02a: 8fe3 ldrh r3, [r4, #62] ; 0x3e -1003b02c: f505 768a add.w r6, r5, #276 ; 0x114 -1003b030: f003 030f and.w r3, r3, #15 -1003b034: 87e3 strh r3, [r4, #62] ; 0x3e -1003b036: 8d23 ldrh r3, [r4, #40] ; 0x28 -1003b038: 4630 mov r0, r6 -1003b03a: f023 03fc bic.w r3, r3, #252 ; 0xfc -1003b03e: f043 0380 orr.w r3, r3, #128 ; 0x80 -1003b042: 8523 strh r3, [r4, #40] ; 0x28 -1003b044: 2320 movs r3, #32 -1003b046: 9306 str r3, [sp, #24] -1003b048: f7e2 fac1 bl 1001d5ce -1003b04c: 2202 movs r2, #2 -1003b04e: 4601 mov r1, r0 -1003b050: f104 0048 add.w r0, r4, #72 ; 0x48 -1003b054: f7dc f9dc bl 10017410 -1003b058: 9b06 ldr r3, [sp, #24] -1003b05a: 4630 mov r0, r6 -1003b05c: 3302 adds r3, #2 -1003b05e: 9306 str r3, [sp, #24] -1003b060: f7e2 faa6 bl 1001d5b0 -1003b064: 2202 movs r2, #2 -1003b066: 4601 mov r1, r0 -1003b068: f104 004a add.w r0, r4, #74 ; 0x4a -1003b06c: f7dc f9d0 bl 10017410 -1003b070: f8d5 2680 ldr.w r2, [r5, #1664] ; 0x680 -1003b074: 9b06 ldr r3, [sp, #24] -1003b076: f002 0203 and.w r2, r2, #3 -1003b07a: 3302 adds r3, #2 -1003b07c: 2a03 cmp r2, #3 -1003b07e: f104 004c add.w r0, r4, #76 ; 0x4c -1003b082: 9306 str r3, [sp, #24] -1003b084: d109 bne.n 1003b09a -1003b086: f8d5 2110 ldr.w r2, [r5, #272] ; 0x110 -1003b08a: f505 7190 add.w r1, r5, #288 ; 0x120 -1003b08e: 3a0c subs r2, #12 -1003b090: 441a add r2, r3 -1003b092: 9206 str r2, [sp, #24] -1003b094: f7dc f9bc bl 10017410 -1003b098: e040 b.n 1003b11c -1003b09a: ae06 add r6, sp, #24 -1003b09c: 4641 mov r1, r8 -1003b09e: f8d5 20a4 ldr.w r2, [r5, #164] ; 0xa4 -1003b0a2: f105 03a8 add.w r3, r5, #168 ; 0xa8 -1003b0a6: 9600 str r6, [sp, #0] -1003b0a8: f003 fc02 bl 1003e8b0 <__rtw_set_ie_veneer> -1003b0ac: f105 03fc add.w r3, r5, #252 ; 0xfc -1003b0b0: 4602 mov r2, r0 -1003b0b2: 4618 mov r0, r3 -1003b0b4: 9204 str r2, [sp, #16] -1003b0b6: 9303 str r3, [sp, #12] -1003b0b8: f003 fc6e bl 1003e998 <__rtw_get_rateset_len_veneer> -1003b0bc: 9a04 ldr r2, [sp, #16] -1003b0be: 4683 mov fp, r0 -1003b0c0: 4651 mov r1, sl -1003b0c2: 4610 mov r0, r2 -1003b0c4: 9b03 ldr r3, [sp, #12] -1003b0c6: f1bb 0f08 cmp.w fp, #8 -1003b0ca: bf34 ite cc -1003b0cc: 465a movcc r2, fp -1003b0ce: 2208 movcs r2, #8 -1003b0d0: 9600 str r6, [sp, #0] -1003b0d2: f003 fbed bl 1003e8b0 <__rtw_set_ie_veneer> -1003b0d6: 4652 mov r2, sl -1003b0d8: f105 03e4 add.w r3, r5, #228 ; 0xe4 -1003b0dc: 9600 str r6, [sp, #0] -1003b0de: 2103 movs r1, #3 -1003b0e0: f003 fbe6 bl 1003e8b0 <__rtw_set_ie_veneer> -1003b0e4: f8d5 2680 ldr.w r2, [r5, #1664] ; 0x680 -1003b0e8: 4603 mov r3, r0 -1003b0ea: f002 0203 and.w r2, r2, #3 -1003b0ee: 2a01 cmp r2, #1 -1003b0f0: d108 bne.n 1003b104 -1003b0f2: ab0e add r3, sp, #56 ; 0x38 -1003b0f4: f843 8d1c str.w r8, [r3, #-28]! -1003b0f8: 2106 movs r1, #6 -1003b0fa: 9600 str r6, [sp, #0] -1003b0fc: 2202 movs r2, #2 -1003b0fe: f003 fbd7 bl 1003e8b0 <__rtw_set_ie_veneer> -1003b102: 4603 mov r3, r0 -1003b104: f1bb 0f08 cmp.w fp, #8 -1003b108: d908 bls.n 1003b11c -1003b10a: 4618 mov r0, r3 -1003b10c: 9600 str r6, [sp, #0] -1003b10e: 2132 movs r1, #50 ; 0x32 -1003b110: f1ab 0208 sub.w r2, fp, #8 -1003b114: f505 7382 add.w r3, r5, #260 ; 0x104 -1003b118: f003 fbca bl 1003e8b0 <__rtw_set_ie_veneer> -1003b11c: 9b06 ldr r3, [sp, #24] -1003b11e: 4648 mov r0, r9 -1003b120: f103 0228 add.w r2, r3, #40 ; 0x28 -1003b124: f5b2 7f00 cmp.w r2, #512 ; 0x200 -1003b128: bf88 it hi -1003b12a: 2300 movhi r3, #0 -1003b12c: 3328 adds r3, #40 ; 0x28 -1003b12e: f013 027f ands.w r2, r3, #127 ; 0x7f -1003b132: bf18 it ne -1003b134: 2201 movne r2, #1 -1003b136: eb02 1ad3 add.w sl, r2, r3, lsr #7 -1003b13a: fa5f fa8a uxtb.w sl, sl -1003b13e: f1ba 0f01 cmp.w sl, #1 -1003b142: bf08 it eq -1003b144: f04f 0a02 moveq.w sl, #2 -1003b148: ea4f 1aca mov.w sl, sl, lsl #7 -1003b14c: 2302 movs r3, #2 -1003b14e: f88d 3029 strb.w r3, [sp, #41] ; 0x29 -1003b152: f241 02a4 movw r2, #4260 ; 0x10a4 -1003b156: f10a 0328 add.w r3, sl, #40 ; 0x28 -1003b15a: 52e2 strh r2, [r4, r3] -1003b15c: 18e6 adds r6, r4, r3 -1003b15e: f8b5 3728 ldrh.w r3, [r5, #1832] ; 0x728 -1003b162: f04f 0b00 mov.w fp, #0 -1003b166: ea6f 4383 mvn.w r3, r3, lsl #18 -1003b16a: ea6f 4393 mvn.w r3, r3, lsr #18 -1003b16e: 8073 strh r3, [r6, #2] -1003b170: f7ed faf6 bl 10028760 -1003b174: 2206 movs r2, #6 -1003b176: 4601 mov r1, r0 -1003b178: 1d30 adds r0, r6, #4 -1003b17a: f7dc f949 bl 10017410 -1003b17e: f106 000a add.w r0, r6, #10 -1003b182: 4639 mov r1, r7 -1003b184: 2206 movs r2, #6 -1003b186: f7dc f943 bl 10017410 -1003b18a: eb04 010a add.w r1, r4, sl -1003b18e: 2210 movs r2, #16 -1003b190: f8cd b000 str.w fp, [sp] -1003b194: f8cd b004 str.w fp, [sp, #4] -1003b198: 4628 mov r0, r5 -1003b19a: 2301 movs r3, #1 -1003b19c: f7f2 fd57 bl 1002dc4e -1003b1a0: 2303 movs r3, #3 -1003b1a2: f88d 302a strb.w r3, [sp, #42] ; 0x2a -1003b1a6: f10a 0380 add.w r3, sl, #128 ; 0x80 -1003b1aa: b29b uxth r3, r3 -1003b1ac: 4648 mov r0, r9 -1003b1ae: f103 0828 add.w r8, r3, #40 ; 0x28 -1003b1b2: 9305 str r3, [sp, #20] -1003b1b4: f7ed fad4 bl 10028760 -1003b1b8: f8d5 10f8 ldr.w r1, [r5, #248] ; 0xf8 -1003b1bc: eb04 0608 add.w r6, r4, r8 -1003b1c0: 2901 cmp r1, #1 -1003b1c2: f824 b008 strh.w fp, [r4, r8] -1003b1c6: 4603 mov r3, r0 -1003b1c8: f106 0204 add.w r2, r6, #4 -1003b1cc: f106 0b0a add.w fp, r6, #10 -1003b1d0: d016 beq.n 1003b200 -1003b1d2: 2904 cmp r1, #4 -1003b1d4: d12d bne.n 1003b232 -1003b1d6: f44f 7100 mov.w r1, #512 ; 0x200 -1003b1da: 4610 mov r0, r2 -1003b1dc: f824 1008 strh.w r1, [r4, r8] -1003b1e0: 2206 movs r2, #6 -1003b1e2: 4619 mov r1, r3 -1003b1e4: f7dc f914 bl 10017410 -1003b1e8: 4648 mov r0, r9 -1003b1ea: f7ed fab9 bl 10028760 -1003b1ee: 2206 movs r2, #6 -1003b1f0: 4601 mov r1, r0 -1003b1f2: 4658 mov r0, fp -1003b1f4: f7dc f90c bl 10017410 -1003b1f8: f106 0010 add.w r0, r6, #16 -1003b1fc: 4639 mov r1, r7 -1003b1fe: e028 b.n 1003b252 -1003b200: f44f 7180 mov.w r1, #256 ; 0x100 -1003b204: f824 1008 strh.w r1, [r4, r8] -1003b208: 4648 mov r0, r9 -1003b20a: 9303 str r3, [sp, #12] -1003b20c: 9204 str r2, [sp, #16] -1003b20e: f7ed faa7 bl 10028760 -1003b212: 9a04 ldr r2, [sp, #16] -1003b214: 4601 mov r1, r0 -1003b216: 4610 mov r0, r2 -1003b218: 2206 movs r2, #6 -1003b21a: f7dc f8f9 bl 10017410 -1003b21e: 4658 mov r0, fp -1003b220: 4639 mov r1, r7 -1003b222: 2206 movs r2, #6 -1003b224: f7dc f8f4 bl 10017410 -1003b228: 9b03 ldr r3, [sp, #12] -1003b22a: f106 0010 add.w r0, r6, #16 -1003b22e: 4619 mov r1, r3 -1003b230: e00f b.n 1003b252 -1003b232: 4619 mov r1, r3 -1003b234: 4610 mov r0, r2 -1003b236: 2206 movs r2, #6 -1003b238: f7dc f8ea bl 10017410 -1003b23c: 4639 mov r1, r7 -1003b23e: 4658 mov r0, fp -1003b240: 2206 movs r2, #6 -1003b242: f7dc f8e5 bl 10017410 -1003b246: 4648 mov r0, r9 -1003b248: f7ed fa8a bl 10028760 -1003b24c: 4601 mov r1, r0 -1003b24e: f106 0010 add.w r0, r6, #16 -1003b252: 2206 movs r2, #6 -1003b254: f7dc f8dc bl 10017410 -1003b258: 8af3 ldrh r3, [r6, #22] -1003b25a: 9905 ldr r1, [sp, #20] -1003b25c: f003 030f and.w r3, r3, #15 -1003b260: 82f3 strh r3, [r6, #22] -1003b262: f834 3008 ldrh.w r3, [r4, r8] -1003b266: 4628 mov r0, r5 -1003b268: f023 03fc bic.w r3, r3, #252 ; 0xfc -1003b26c: f043 0348 orr.w r3, r3, #72 ; 0x48 -1003b270: f824 3008 strh.w r3, [r4, r8] -1003b274: 2300 movs r3, #0 -1003b276: 9300 str r3, [sp, #0] -1003b278: 9301 str r3, [sp, #4] -1003b27a: 4421 add r1, r4 -1003b27c: 2218 movs r2, #24 -1003b27e: f50a 7a80 add.w sl, sl, #256 ; 0x100 -1003b282: f7f2 fce4 bl 1002dc4e -1003b286: fa1f f38a uxth.w r3, sl -1003b28a: 4628 mov r0, r5 -1003b28c: a90a add r1, sp, #40 ; 0x28 -1003b28e: 930d str r3, [sp, #52] ; 0x34 -1003b290: f7ff fdcf bl 1003ae32 -1003b294: 4620 mov r0, r4 -1003b296: f44f 6180 mov.w r1, #1024 ; 0x400 -1003b29a: f7dc f8b6 bl 1001740a -1003b29e: b00f add sp, #60 ; 0x3c -1003b2a0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1003b2a4: 10043f58 .word 0x10043f58 - -1003b2a8 : -1003b2a8: 2901 cmp r1, #1 -1003b2aa: d101 bne.n 1003b2b0 -1003b2ac: f7ff be78 b.w 1003afa0 -1003b2b0: 4770 bx lr - -1003b2b2 : -1003b2b2: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} -1003b2b6: 7812 ldrb r2, [r2, #0] -1003b2b8: 4604 mov r4, r0 -1003b2ba: f002 051f and.w r5, r2, #31 -1003b2be: f3c2 1840 ubfx r8, r2, #5, #1 -1003b2c2: eb04 1245 add.w r2, r4, r5, lsl #5 -1003b2c6: f8d2 7790 ldr.w r7, [r2, #1936] ; 0x790 -1003b2ca: f241 60c8 movw r0, #5832 ; 0x16c8 -1003b2ce: 5820 ldr r0, [r4, r0] -1003b2d0: f021 4670 bic.w r6, r1, #4026531840 ; 0xf0000000 -1003b2d4: ea4f 7911 mov.w r9, r1, lsr #28 -1003b2d8: b1c7 cbz r7, 1003b30c -1003b2da: f8d7 21f4 ldr.w r2, [r7, #500] ; 0x1f4 -1003b2de: b112 cbz r2, 1003b2e6 -1003b2e0: f897 71fc ldrb.w r7, [r7, #508] ; 0x1fc -1003b2e4: e001 b.n 1003b2ea -1003b2e6: f894 751f ldrb.w r7, [r4, #1311] ; 0x51f -1003b2ea: b133 cbz r3, 1003b2fa -1003b2ec: 4632 mov r2, r6 -1003b2ee: f500 7000 add.w r0, r0, #512 ; 0x200 -1003b2f2: 4629 mov r1, r5 -1003b2f4: f7ff f8da bl 1003a4ac -1003b2f8: 4606 mov r6, r0 -1003b2fa: f8cd 8000 str.w r8, [sp] -1003b2fe: 9601 str r6, [sp, #4] -1003b300: 4620 mov r0, r4 -1003b302: 4629 mov r1, r5 -1003b304: 464a mov r2, r9 -1003b306: 463b mov r3, r7 -1003b308: f7ff fdaa bl 1003ae60 -1003b30c: b003 add sp, #12 -1003b30e: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - -1003b312 : -1003b312: b538 push {r3, r4, r5, lr} -1003b314: 4605 mov r5, r0 -1003b316: b149 cbz r1, 1003b32c -1003b318: 2901 cmp r1, #1 -1003b31a: d00a beq.n 1003b332 -1003b31c: 2902 cmp r1, #2 -1003b31e: d00b beq.n 1003b338 -1003b320: 2903 cmp r1, #3 -1003b322: bf0c ite eq -1003b324: f44f 64d0 moveq.w r4, #1664 ; 0x680 -1003b328: 2400 movne r4, #0 -1003b32a: e007 b.n 1003b33c -1003b32c: f44f 64ca mov.w r4, #1616 ; 0x650 -1003b330: e004 b.n 1003b33c -1003b332: f44f 64cc mov.w r4, #1632 ; 0x660 -1003b336: e001 b.n 1003b33c -1003b338: f44f 64ce mov.w r4, #1648 ; 0x670 -1003b33c: 4628 mov r0, r5 -1003b33e: f44f 71a0 mov.w r1, #320 ; 0x140 -1003b342: f7fc fca8 bl 10037c96 -1003b346: f420 627f bic.w r2, r0, #4080 ; 0xff0 -1003b34a: f022 020f bic.w r2, r2, #15 -1003b34e: 4628 mov r0, r5 -1003b350: f44f 71a0 mov.w r1, #320 ; 0x140 -1003b354: 4322 orrs r2, r4 -1003b356: f7fc fcb3 bl 10037cc0 -1003b35a: 2000 movs r0, #0 -1003b35c: bd38 pop {r3, r4, r5, pc} - -1003b35e : -1003b35e: b570 push {r4, r5, r6, lr} -1003b360: 460d mov r5, r1 -1003b362: 2101 movs r1, #1 -1003b364: 4604 mov r4, r0 -1003b366: 4616 mov r6, r2 -1003b368: f7ff ffd3 bl 1003b312 -1003b36c: f505 6101 add.w r1, r5, #2064 ; 0x810 -1003b370: 4620 mov r0, r4 -1003b372: eb06 1101 add.w r1, r6, r1, lsl #4 -1003b376: f7fc fc80 bl 10037c7a -1003b37a: bd70 pop {r4, r5, r6, pc} - -1003b37c : -1003b37c: b5f8 push {r3, r4, r5, r6, r7, lr} -1003b37e: 460d mov r5, r1 -1003b380: 2101 movs r1, #1 -1003b382: 4616 mov r6, r2 -1003b384: 461f mov r7, r3 -1003b386: 4604 mov r4, r0 -1003b388: f7ff ffc3 bl 1003b312 -1003b38c: f505 6101 add.w r1, r5, #2064 ; 0x810 -1003b390: 4620 mov r0, r4 -1003b392: eb06 1101 add.w r1, r6, r1, lsl #4 -1003b396: 463a mov r2, r7 -1003b398: f7fc fc84 bl 10037ca4 -1003b39c: 2000 movs r0, #0 -1003b39e: bdf8 pop {r3, r4, r5, r6, r7, pc} - -1003b3a0 : -1003b3a0: b570 push {r4, r5, r6, lr} -1003b3a2: 460d mov r5, r1 -1003b3a4: 2101 movs r1, #1 -1003b3a6: 4604 mov r4, r0 -1003b3a8: 4616 mov r6, r2 -1003b3aa: f7ff ffb2 bl 1003b312 -1003b3ae: f505 5189 add.w r1, r5, #4384 ; 0x1120 -1003b3b2: 4620 mov r0, r4 -1003b3b4: eb06 01c1 add.w r1, r6, r1, lsl #3 -1003b3b8: f7fc fc5f bl 10037c7a -1003b3bc: bd70 pop {r4, r5, r6, pc} - -1003b3be : -1003b3be: b5f8 push {r3, r4, r5, r6, r7, lr} -1003b3c0: 460d mov r5, r1 -1003b3c2: 2101 movs r1, #1 -1003b3c4: 4616 mov r6, r2 -1003b3c6: 461f mov r7, r3 -1003b3c8: 4604 mov r4, r0 -1003b3ca: f7ff ffa2 bl 1003b312 -1003b3ce: f505 5189 add.w r1, r5, #4384 ; 0x1120 -1003b3d2: 4620 mov r0, r4 -1003b3d4: eb06 01c1 add.w r1, r6, r1, lsl #3 -1003b3d8: 463a mov r2, r7 -1003b3da: f7fc fc63 bl 10037ca4 -1003b3de: 2000 movs r0, #0 -1003b3e0: bdf8 pop {r3, r4, r5, r6, r7, pc} - -1003b3e2 : -1003b3e2: b508 push {r3, lr} -1003b3e4: f7ff ffdc bl 1003b3a0 -1003b3e8: b2c0 uxtb r0, r0 -1003b3ea: bd08 pop {r3, pc} - -1003b3ec : -1003b3ec: f7ff bfe7 b.w 1003b3be - -1003b3f0 : -1003b3f0: b508 push {r3, lr} -1003b3f2: f7ff ffb4 bl 1003b35e -1003b3f6: b2c0 uxtb r0, r0 -1003b3f8: bd08 pop {r3, pc} - -1003b3fa : -1003b3fa: f7ff bfbf b.w 1003b37c - -1003b3fe : -1003b3fe: b570 push {r4, r5, r6, lr} -1003b400: 4606 mov r6, r0 -1003b402: 4615 mov r5, r2 -1003b404: b13b cbz r3, 1003b416 -1003b406: 2300 movs r3, #0 -1003b408: 838b strh r3, [r1, #28] -1003b40a: 83cb strh r3, [r1, #30] -1003b40c: 840b strh r3, [r1, #32] -1003b40e: 844b strh r3, [r1, #34] ; 0x22 -1003b410: 848b strh r3, [r1, #36] ; 0x24 -1003b412: 628b str r3, [r1, #40] ; 0x28 -1003b414: 858b strh r3, [r1, #44] ; 0x2c -1003b416: 4629 mov r1, r5 -1003b418: 4630 mov r0, r6 -1003b41a: 2203 movs r2, #3 -1003b41c: f7ff ff9f bl 1003b35e -1003b420: f000 03bf and.w r3, r0, #191 ; 0xbf -1003b424: 4629 mov r1, r5 -1003b426: 4630 mov r0, r6 -1003b428: 2203 movs r2, #3 -1003b42a: f043 0380 orr.w r3, r3, #128 ; 0x80 -1003b42e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1003b432: f7ff bfa3 b.w 1003b37c - -1003b436 : -1003b436: b570 push {r4, r5, r6, lr} -1003b438: 2203 movs r2, #3 -1003b43a: 4605 mov r5, r0 -1003b43c: 460c mov r4, r1 -1003b43e: f7ff ff8e bl 1003b35e -1003b442: f040 0340 orr.w r3, r0, #64 ; 0x40 -1003b446: 4621 mov r1, r4 -1003b448: 4628 mov r0, r5 -1003b44a: 2203 movs r2, #3 -1003b44c: b2db uxtb r3, r3 -1003b44e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1003b452: f7ff bf93 b.w 1003b37c - -1003b456 : -1003b456: f241 63c8 movw r3, #5832 ; 0x16c8 -1003b45a: b530 push {r4, r5, lr} -1003b45c: 58c4 ldr r4, [r0, r3] -1003b45e: 2010 movs r0, #16 -1003b460: 3801 subs r0, #1 -1003b462: b2c0 uxtb r0, r0 -1003b464: 1823 adds r3, r4, r0 -1003b466: f893 1e44 ldrb.w r1, [r3, #3652] ; 0xe44 -1003b46a: b169 cbz r1, 1003b488 -1003b46c: 2308 movs r3, #8 -1003b46e: 1e5a subs r2, r3, #1 -1003b470: b2d2 uxtb r2, r2 -1003b472: fa21 f502 lsr.w r5, r1, r2 -1003b476: 07ed lsls r5, r5, #31 -1003b478: d503 bpl.n 1003b482 -1003b47a: eb03 00c0 add.w r0, r3, r0, lsl #3 -1003b47e: b2c0 uxtb r0, r0 -1003b480: bd30 pop {r4, r5, pc} -1003b482: b10a cbz r2, 1003b488 -1003b484: 4613 mov r3, r2 -1003b486: e7f2 b.n 1003b46e -1003b488: 2800 cmp r0, #0 -1003b48a: d1e9 bne.n 1003b460 -1003b48c: bd30 pop {r4, r5, pc} - -1003b48e : -1003b48e: f241 63c8 movw r3, #5832 ; 0x16c8 -1003b492: 58c3 ldr r3, [r0, r3] -1003b494: eb03 03d1 add.w r3, r3, r1, lsr #3 -1003b498: f893 0e44 ldrb.w r0, [r3, #3652] ; 0xe44 -1003b49c: f001 0107 and.w r1, r1, #7 -1003b4a0: 40c8 lsrs r0, r1 -1003b4a2: f000 0001 and.w r0, r0, #1 -1003b4a6: 4770 bx lr - -1003b4a8 : -1003b4a8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1003b4ac: 6805 ldr r5, [r0, #0] -1003b4ae: 460c mov r4, r1 -1003b4b0: 4628 mov r0, r5 -1003b4b2: f891 103b ldrb.w r1, [r1, #59] ; 0x3b -1003b4b6: 4617 mov r7, r2 -1003b4b8: f7ff ffbd bl 1003b436 -1003b4bc: 2014 movs r0, #20 -1003b4be: f7dc f8e1 bl 10017684 -1003b4c2: f894 103b ldrb.w r1, [r4, #59] ; 0x3b -1003b4c6: 2206 movs r2, #6 -1003b4c8: 4628 mov r0, r5 -1003b4ca: f7ff ff48 bl 1003b35e -1003b4ce: f894 103b ldrb.w r1, [r4, #59] ; 0x3b -1003b4d2: 4606 mov r6, r0 -1003b4d4: 2207 movs r2, #7 -1003b4d6: 4628 mov r0, r5 -1003b4d8: f7ff ff41 bl 1003b35e -1003b4dc: b2f6 uxtb r6, r6 -1003b4de: b2c0 uxtb r0, r0 -1003b4e0: ea46 2600 orr.w r6, r6, r0, lsl #8 -1003b4e4: 62a6 str r6, [r4, #40] ; 0x28 -1003b4e6: f894 103b ldrb.w r1, [r4, #59] ; 0x3b -1003b4ea: 220a movs r2, #10 -1003b4ec: 4628 mov r0, r5 -1003b4ee: f7ff ff36 bl 1003b35e -1003b4f2: f894 103b ldrb.w r1, [r4, #59] ; 0x3b -1003b4f6: 4606 mov r6, r0 -1003b4f8: 220b movs r2, #11 -1003b4fa: 4628 mov r0, r5 -1003b4fc: f7ff ff2f bl 1003b35e -1003b500: b2f6 uxtb r6, r6 -1003b502: b2c0 uxtb r0, r0 -1003b504: ea46 2600 orr.w r6, r6, r0, lsl #8 -1003b508: 2300 movs r3, #0 -1003b50a: 83a6 strh r6, [r4, #28] -1003b50c: 6463 str r3, [r4, #68] ; 0x44 -1003b50e: 2601 movs r6, #1 -1003b510: f106 020b add.w r2, r6, #11 -1003b514: 4628 mov r0, r5 -1003b516: f894 103b ldrb.w r1, [r4, #59] ; 0x3b -1003b51a: b2d2 uxtb r2, r2 -1003b51c: f7ff ff1f bl 1003b35e -1003b520: eb04 0346 add.w r3, r4, r6, lsl #1 -1003b524: b2c0 uxtb r0, r0 -1003b526: 8398 strh r0, [r3, #28] -1003b528: 6c63 ldr r3, [r4, #68] ; 0x44 -1003b52a: fb00 3006 mla r0, r0, r6, r3 -1003b52e: 3601 adds r6, #1 -1003b530: 2e05 cmp r6, #5 -1003b532: 6460 str r0, [r4, #68] ; 0x44 -1003b534: d1ec bne.n 1003b510 -1003b536: 6aa3 ldr r3, [r4, #40] ; 0x28 -1003b538: f894 103b ldrb.w r1, [r4, #59] ; 0x3b -1003b53c: 4418 add r0, r3 -1003b53e: 6460 str r0, [r4, #68] ; 0x44 -1003b540: 2209 movs r2, #9 -1003b542: 4628 mov r0, r5 -1003b544: f7ff ff0b bl 1003b35e -1003b548: b2c0 uxtb r0, r0 -1003b54a: 85a0 strh r0, [r4, #44] ; 0x2c -1003b54c: 4621 mov r1, r4 -1003b54e: 4628 mov r0, r5 -1003b550: f894 203b ldrb.w r2, [r4, #59] ; 0x3b -1003b554: 463b mov r3, r7 -1003b556: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -1003b55a: f7ff bf50 b.w 1003b3fe - ... - -1003b560 : -1003b560: b5f8 push {r3, r4, r5, r6, r7, lr} -1003b562: f241 63c8 movw r3, #5832 ; 0x16c8 -1003b566: 58c7 ldr r7, [r0, r3] -1003b568: 2201 movs r2, #1 -1003b56a: f887 21ac strb.w r2, [r7, #428] ; 0x1ac -1003b56e: 2200 movs r2, #0 -1003b570: f887 21ad strb.w r2, [r7, #429] ; 0x1ad -1003b574: f887 21ae strb.w r2, [r7, #430] ; 0x1ae -1003b578: 58c6 ldr r6, [r0, r3] -1003b57a: 4b46 ldr r3, [pc, #280] ; (1003b694 ) -1003b57c: 4605 mov r5, r0 -1003b57e: f8c6 31b0 str.w r3, [r6, #432] ; 0x1b0 -1003b582: f500 539c add.w r3, r0, #4992 ; 0x1380 -1003b586: 3308 adds r3, #8 -1003b588: f893 3071 ldrb.w r3, [r3, #113] ; 0x71 -1003b58c: f506 7400 add.w r4, r6, #512 ; 0x200 -1003b590: 2b01 cmp r3, #1 -1003b592: d07a beq.n 1003b68a -1003b594: 2300 movs r3, #0 -1003b596: f8d6 21b0 ldr.w r2, [r6, #432] ; 0x1b0 -1003b59a: 4620 mov r0, r4 -1003b59c: 2101 movs r1, #1 -1003b59e: f7fd fce3 bl 10038f68 -1003b5a2: 4620 mov r0, r4 -1003b5a4: 211d movs r1, #29 -1003b5a6: f605 12b8 addw r2, r5, #2488 ; 0x9b8 -1003b5aa: f7fd fc7b bl 10038ea4 -1003b5ae: 4620 mov r0, r4 -1003b5b0: 211e movs r1, #30 -1003b5b2: f505 6239 add.w r2, r5, #2960 ; 0xb90 -1003b5b6: f7fd fc75 bl 10038ea4 -1003b5ba: 4620 mov r0, r4 -1003b5bc: 211f movs r1, #31 -1003b5be: f205 5221 addw r2, r5, #1313 ; 0x521 -1003b5c2: f7fd fc6f bl 10038ea4 -1003b5c6: f106 0235 add.w r2, r6, #53 ; 0x35 -1003b5ca: 4620 mov r0, r4 -1003b5cc: 2121 movs r1, #33 ; 0x21 -1003b5ce: f7fd fc69 bl 10038ea4 -1003b5d2: 4620 mov r0, r4 -1003b5d4: 2122 movs r1, #34 ; 0x22 -1003b5d6: f605 520c addw r2, r5, #3340 ; 0xd0c -1003b5da: f7fd fc63 bl 10038ea4 -1003b5de: f106 022c add.w r2, r6, #44 ; 0x2c -1003b5e2: 4620 mov r0, r4 -1003b5e4: 2123 movs r1, #35 ; 0x23 -1003b5e6: f7fd fc5d bl 10038ea4 -1003b5ea: f106 0234 add.w r2, r6, #52 ; 0x34 -1003b5ee: 4620 mov r0, r4 -1003b5f0: 2124 movs r1, #36 ; 0x24 -1003b5f2: f7fd fc57 bl 10038ea4 -1003b5f6: f505 52c2 add.w r2, r5, #6208 ; 0x1840 -1003b5fa: 4620 mov r0, r4 -1003b5fc: 2130 movs r1, #48 ; 0x30 -1003b5fe: 3218 adds r2, #24 -1003b600: f7fd fc50 bl 10038ea4 -1003b604: f505 529e add.w r2, r5, #5056 ; 0x13c0 -1003b608: 4620 mov r0, r4 -1003b60a: 2131 movs r1, #49 ; 0x31 -1003b60c: 3201 adds r2, #1 -1003b60e: f7fd fc49 bl 10038ea4 -1003b612: f106 0230 add.w r2, r6, #48 ; 0x30 -1003b616: 4620 mov r0, r4 -1003b618: 2120 movs r1, #32 -1003b61a: f7fd fc43 bl 10038ea4 -1003b61e: f106 021e add.w r2, r6, #30 -1003b622: 4620 mov r0, r4 -1003b624: 2125 movs r1, #37 ; 0x25 -1003b626: f7fd fc3d bl 10038ea4 -1003b62a: 4620 mov r0, r4 -1003b62c: 2129 movs r1, #41 ; 0x29 -1003b62e: f105 0214 add.w r2, r5, #20 -1003b632: f7fd fc37 bl 10038ea4 -1003b636: f505 52a0 add.w r2, r5, #5120 ; 0x1400 -1003b63a: 4620 mov r0, r4 -1003b63c: 212a movs r1, #42 ; 0x2a -1003b63e: 3218 adds r2, #24 -1003b640: f7fd fc30 bl 10038ea4 -1003b644: 4620 mov r0, r4 -1003b646: 2135 movs r1, #53 ; 0x35 -1003b648: f605 4244 addw r2, r5, #3140 ; 0xc44 -1003b64c: f7fd fc2a bl 10038ea4 -1003b650: 4620 mov r0, r4 -1003b652: 2136 movs r1, #54 ; 0x36 -1003b654: f605 425b addw r2, r5, #3163 ; 0xc5b -1003b658: f7fd fc24 bl 10038ea4 -1003b65c: 2600 movs r6, #0 -1003b65e: b2b2 uxth r2, r6 -1003b660: 4620 mov r0, r4 -1003b662: 2149 movs r1, #73 ; 0x49 -1003b664: 2300 movs r3, #0 -1003b666: 3601 adds r6, #1 -1003b668: f7fd fc76 bl 10038f58 -1003b66c: 2e05 cmp r6, #5 -1003b66e: d1f6 bne.n 1003b65e -1003b670: f241 33c1 movw r3, #5057 ; 0x13c1 -1003b674: 5ceb ldrb r3, [r5, r3] -1003b676: b91b cbnz r3, 1003b680 -1003b678: f507 7000 add.w r0, r7, #512 ; 0x200 -1003b67c: f7fd fd0e bl 1003909c -1003b680: 22ff movs r2, #255 ; 0xff -1003b682: f641 0378 movw r3, #6264 ; 0x1878 -1003b686: 54ea strb r2, [r5, r3] -1003b688: bdf8 pop {r3, r4, r5, r6, r7, pc} -1003b68a: 4b03 ldr r3, [pc, #12] ; (1003b698 ) -1003b68c: f8c6 31b0 str.w r3, [r6, #432] ; 0x1b0 -1003b690: e780 b.n 1003b594 -1003b692: bf00 nop -1003b694: 051040bf .word 0x051040bf -1003b698: 051060bf .word 0x051060bf - -1003b69c : -1003b69c: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} -1003b6a0: 2301 movs r3, #1 -1003b6a2: f88d 3007 strb.w r3, [sp, #7] -1003b6a6: f241 63c8 movw r3, #5832 ; 0x16c8 -1003b6aa: 58c7 ldr r7, [r0, r3] -1003b6ac: f641 035c movw r3, #6236 ; 0x185c -1003b6b0: f850 a003 ldr.w sl, [r0, r3] -1003b6b4: f241 73c5 movw r3, #6085 ; 0x17c5 -1003b6b8: 5cc5 ldrb r5, [r0, r3] -1003b6ba: 4604 mov r4, r0 -1003b6bc: 2d00 cmp r5, #0 -1003b6be: d061 beq.n 1003b784 -1003b6c0: 212e movs r1, #46 ; 0x2e -1003b6c2: f10d 0207 add.w r2, sp, #7 -1003b6c6: f7f6 ff0b bl 100324e0 -1003b6ca: 2d01 cmp r5, #1 -1003b6cc: d15a bne.n 1003b784 -1003b6ce: 6923 ldr r3, [r4, #16] -1003b6d0: 4620 mov r0, r4 -1003b6d2: f3c3 09c0 ubfx r9, r3, #3, #1 -1003b6d6: f7e2 ff1f bl 1001e518 -1003b6da: f894 884c ldrb.w r8, [r4, #2124] ; 0x84c -1003b6de: b2c6 uxtb r6, r0 -1003b6e0: f118 0800 adds.w r8, r8, #0 -1003b6e4: bf18 it ne -1003b6e6: f04f 0801 movne.w r8, #1 -1003b6ea: f1ba 0f00 cmp.w sl, #0 -1003b6ee: d006 beq.n 1003b6fe -1003b6f0: 4620 mov r0, r4 -1003b6f2: 4629 mov r1, r5 -1003b6f4: f7e2 ff3a bl 1001e56c -1003b6f8: 2801 cmp r0, #1 -1003b6fa: bf08 it eq -1003b6fc: 2601 moveq r6, #1 -1003b6fe: f507 7500 add.w r5, r7, #512 ; 0x200 -1003b702: 4628 mov r0, r5 -1003b704: 213b movs r1, #59 ; 0x3b -1003b706: fa5f f289 uxtb.w r2, r9 -1003b70a: 2300 movs r3, #0 -1003b70c: f7fd fc2c bl 10038f68 -1003b710: 4628 mov r0, r5 -1003b712: 213a movs r1, #58 ; 0x3a -1003b714: b2f2 uxtb r2, r6 -1003b716: 2300 movs r3, #0 -1003b718: f7fd fc26 bl 10038f68 -1003b71c: 2148 movs r1, #72 ; 0x48 -1003b71e: fa5f f288 uxtb.w r2, r8 -1003b722: 2300 movs r3, #0 -1003b724: 4628 mov r0, r5 -1003b726: f7fd fc1f bl 10038f68 -1003b72a: f641 015c movw r1, #6236 ; 0x185c -1003b72e: 5861 ldr r1, [r4, r1] -1003b730: f241 62c8 movw r2, #5832 ; 0x16c8 -1003b734: 58a3 ldr r3, [r4, r2] -1003b736: b151 cbz r1, 1003b74e -1003b738: 588a ldr r2, [r1, r2] -1003b73a: f8d3 11bc ldr.w r1, [r3, #444] ; 0x1bc -1003b73e: f8d2 21bc ldr.w r2, [r2, #444] ; 0x1bc -1003b742: b111 cbz r1, 1003b74a -1003b744: b11a cbz r2, 1003b74e -1003b746: 4291 cmp r1, r2 -1003b748: dd01 ble.n 1003b74e -1003b74a: f8c3 21bc str.w r2, [r3, #444] ; 0x1bc -1003b74e: 6922 ldr r2, [r4, #16] -1003b750: f012 0f01 tst.w r2, #1 -1003b754: f8d3 21bc ldr.w r2, [r3, #444] ; 0x1bc -1003b758: d102 bne.n 1003b760 -1003b75a: b90a cbnz r2, 1003b760 -1003b75c: f8c3 21c4 str.w r2, [r3, #452] ; 0x1c4 -1003b760: f8c3 21c4 str.w r2, [r3, #452] ; 0x1c4 -1003b764: f8d7 21c4 ldr.w r2, [r7, #452] ; 0x1c4 -1003b768: 4628 mov r0, r5 -1003b76a: 17d3 asrs r3, r2, #31 -1003b76c: 213c movs r1, #60 ; 0x3c -1003b76e: f7fd fbfb bl 10038f68 -1003b772: 4628 mov r0, r5 -1003b774: 2142 movs r1, #66 ; 0x42 -1003b776: 2200 movs r2, #0 -1003b778: 2300 movs r3, #0 -1003b77a: f7fd fbf5 bl 10038f68 -1003b77e: 4628 mov r0, r5 -1003b780: f7fd fd13 bl 100391aa -1003b784: b002 add sp, #8 -1003b786: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - ... - -1003b78c : -1003b78c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1003b790: f241 64c8 movw r4, #5832 ; 0x16c8 -1003b794: 4606 mov r6, r0 -1003b796: 5900 ldr r0, [r0, r4] -1003b798: 2100 movs r1, #0 -1003b79a: f500 70d6 add.w r0, r0, #428 ; 0x1ac -1003b79e: 2254 movs r2, #84 ; 0x54 -1003b7a0: f7db fe46 bl 10017430 -1003b7a4: 5935 ldr r5, [r6, r4] -1003b7a6: 2100 movs r1, #0 -1003b7a8: f505 7400 add.w r4, r5, #512 ; 0x200 -1003b7ac: 4620 mov r0, r4 -1003b7ae: 2204 movs r2, #4 -1003b7b0: f7db fe3e bl 10017430 -1003b7b4: 4620 mov r0, r4 -1003b7b6: 2100 movs r1, #0 -1003b7b8: 2210 movs r2, #16 -1003b7ba: f8c5 6200 str.w r6, [r5, #512] ; 0x200 -1003b7be: f7fd faf5 bl 10038dac -1003b7c2: 4620 mov r0, r4 -1003b7c4: 2102 movs r1, #2 -1003b7c6: 8872 ldrh r2, [r6, #2] -1003b7c8: f7fd faf0 bl 10038dac -1003b7cc: 4620 mov r0, r4 -1003b7ce: 210a movs r1, #10 -1003b7d0: f895 203d ldrb.w r2, [r5, #61] ; 0x3d -1003b7d4: f7fd faea bl 10038dac -1003b7d8: 4620 mov r0, r4 -1003b7da: 2104 movs r1, #4 -1003b7dc: f44f 5200 mov.w r2, #8192 ; 0x2000 -1003b7e0: f7fd fae4 bl 10038dac -1003b7e4: 4b1e ldr r3, [pc, #120] ; (1003b860 ) -1003b7e6: 4620 mov r0, r4 -1003b7e8: 681f ldr r7, [r3, #0] -1003b7ea: 2106 movs r1, #6 -1003b7ec: 2200 movs r2, #0 -1003b7ee: f7fd fadd bl 10038dac -1003b7f2: 4620 mov r0, r4 -1003b7f4: 2105 movs r1, #5 -1003b7f6: f3c7 1203 ubfx r2, r7, #4, #4 -1003b7fa: f7fd fad7 bl 10038dac -1003b7fe: 686a ldr r2, [r5, #4] -1003b800: 4620 mov r0, r4 -1003b802: 1e53 subs r3, r2, #1 -1003b804: 425a negs r2, r3 -1003b806: 415a adcs r2, r3 -1003b808: 2103 movs r1, #3 -1003b80a: f7fd facf bl 10038dac -1003b80e: 4620 mov r0, r4 -1003b810: 211b movs r1, #27 -1003b812: 2220 movs r2, #32 -1003b814: f7fd faca bl 10038dac -1003b818: 4620 mov r0, r4 -1003b81a: 2114 movs r1, #20 -1003b81c: 8baa ldrh r2, [r5, #28] -1003b81e: f7fd fac5 bl 10038dac -1003b822: f241 33d2 movw r3, #5074 ; 0x13d2 -1003b826: 5cf2 ldrb r2, [r6, r3] -1003b828: 4620 mov r0, r4 -1003b82a: 2116 movs r1, #22 -1003b82c: f7fd fabe bl 10038dac -1003b830: f895 303c ldrb.w r3, [r5, #60] ; 0x3c -1003b834: 2b03 cmp r3, #3 -1003b836: d105 bne.n 1003b844 -1003b838: 4620 mov r0, r4 -1003b83a: 2107 movs r1, #7 -1003b83c: 2200 movs r2, #0 -1003b83e: 2300 movs r3, #0 -1003b840: f7fd fb92 bl 10038f68 -1003b844: f04f 63a0 mov.w r3, #83886080 ; 0x5000000 -1003b848: f8c5 31b0 str.w r3, [r5, #432] ; 0x1b0 -1003b84c: 4620 mov r0, r4 -1003b84e: 2101 movs r1, #1 -1003b850: f04f 62a0 mov.w r2, #83886080 ; 0x5000000 -1003b854: 2300 movs r3, #0 -1003b856: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -1003b85a: f7fd bb85 b.w 10038f68 -1003b85e: bf00 nop -1003b860: 400001f0 .word 0x400001f0 - -1003b864 : -1003b864: 4770 bx lr - -1003b866 : -1003b866: b570 push {r4, r5, r6, lr} -1003b868: 2205 movs r2, #5 -1003b86a: 4605 mov r5, r0 -1003b86c: 460c mov r4, r1 -1003b86e: f7ff fdbf bl 1003b3f0 -1003b872: 4621 mov r1, r4 -1003b874: f000 03fb and.w r3, r0, #251 ; 0xfb -1003b878: 2205 movs r2, #5 -1003b87a: 4628 mov r0, r5 -1003b87c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1003b880: f7ff bdbb b.w 1003b3fa - -1003b884 : -1003b884: b570 push {r4, r5, r6, lr} -1003b886: 2205 movs r2, #5 -1003b888: 4605 mov r5, r0 -1003b88a: 460c mov r4, r1 -1003b88c: f7ff fdb0 bl 1003b3f0 -1003b890: f040 0304 orr.w r3, r0, #4 -1003b894: 4621 mov r1, r4 -1003b896: 4628 mov r0, r5 -1003b898: 2205 movs r2, #5 -1003b89a: b2db uxtb r3, r3 -1003b89c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1003b8a0: f7ff bdab b.w 1003b3fa - -1003b8a4 : -1003b8a4: f241 63c8 movw r3, #5832 ; 0x16c8 -1003b8a8: 58c1 ldr r1, [r0, r3] -1003b8aa: 2300 movs r3, #0 -1003b8ac: 461a mov r2, r3 -1003b8ae: 18c8 adds r0, r1, r3 -1003b8b0: f890 0e44 ldrb.w r0, [r0, #3652] ; 0xe44 -1003b8b4: 3301 adds r3, #1 -1003b8b6: 2b10 cmp r3, #16 -1003b8b8: ea42 0200 orr.w r2, r2, r0 -1003b8bc: d1f7 bne.n 1003b8ae -1003b8be: b11a cbz r2, 1003b8c8 -1003b8c0: 2301 movs r3, #1 -1003b8c2: f881 3e54 strb.w r3, [r1, #3668] ; 0xe54 -1003b8c6: 4770 bx lr -1003b8c8: f881 2e54 strb.w r2, [r1, #3668] ; 0xe54 -1003b8cc: 4770 bx lr - -1003b8ce : -1003b8ce: b530 push {r4, r5, lr} -1003b8d0: f241 64c8 movw r4, #5832 ; 0x16c8 -1003b8d4: 5905 ldr r5, [r0, r4] -1003b8d6: f001 0407 and.w r4, r1, #7 -1003b8da: eb05 03d1 add.w r3, r5, r1, lsr #3 -1003b8de: 2501 movs r5, #1 -1003b8e0: fa05 f404 lsl.w r4, r5, r4 -1003b8e4: b94a cbnz r2, 1003b8fa -1003b8e6: f893 2e44 ldrb.w r2, [r3, #3652] ; 0xe44 -1003b8ea: ea22 0404 bic.w r4, r2, r4 -1003b8ee: f883 4e44 strb.w r4, [r3, #3652] ; 0xe44 -1003b8f2: e8bd 4030 ldmia.w sp!, {r4, r5, lr} -1003b8f6: f7ff bfc5 b.w 1003b884 -1003b8fa: f893 2e44 ldrb.w r2, [r3, #3652] ; 0xe44 -1003b8fe: 4314 orrs r4, r2 -1003b900: f883 4e44 strb.w r4, [r3, #3652] ; 0xe44 -1003b904: e8bd 4030 ldmia.w sp!, {r4, r5, lr} -1003b908: f7ff bfad b.w 1003b866 - -1003b90c : -1003b90c: b5f8 push {r3, r4, r5, r6, r7, lr} -1003b90e: 780b ldrb r3, [r1, #0] -1003b910: 784c ldrb r4, [r1, #1] -1003b912: 079b lsls r3, r3, #30 -1003b914: bf48 it mi -1003b916: 788f ldrbmi r7, [r1, #2] -1003b918: 4606 mov r6, r0 -1003b91a: 460d mov r5, r1 -1003b91c: bf58 it pl -1003b91e: 4627 movpl r7, r4 -1003b920: 42bc cmp r4, r7 -1003b922: d809 bhi.n 1003b938 -1003b924: 782a ldrb r2, [r5, #0] -1003b926: 4621 mov r1, r4 -1003b928: 4630 mov r0, r6 -1003b92a: f002 0201 and.w r2, r2, #1 -1003b92e: 3401 adds r4, #1 -1003b930: f7ff ffcd bl 1003b8ce -1003b934: b2e4 uxtb r4, r4 -1003b936: e7f3 b.n 1003b920 -1003b938: 4630 mov r0, r6 -1003b93a: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -1003b93e: f7ff bfb1 b.w 1003b8a4 - ... - -1003b944 : -1003b944: b570 push {r4, r5, r6, lr} -1003b946: 4b21 ldr r3, [pc, #132] ; (1003b9cc ) -1003b948: 6818 ldr r0, [r3, #0] -1003b94a: 784b ldrb r3, [r1, #1] -1003b94c: b913 cbnz r3, 1003b954 -1003b94e: 788b ldrb r3, [r1, #2] -1003b950: b9f3 cbnz r3, 1003b990 -1003b952: bd70 pop {r4, r5, r6, pc} -1003b954: 688a ldr r2, [r1, #8] -1003b956: b285 uxth r5, r0 -1003b958: 441d add r5, r3 -1003b95a: eb02 16c3 add.w r6, r2, r3, lsl #7 -1003b95e: 4b1c ldr r3, [pc, #112] ; (1003b9d0 ) -1003b960: f240 7287 movw r2, #1927 ; 0x787 -1003b964: 01ed lsls r5, r5, #7 -1003b966: f405 6578 and.w r5, r5, #3968 ; 0xf80 -1003b96a: 801a strh r2, [r3, #0] -1003b96c: 4a19 ldr r2, [pc, #100] ; (1003b9d4 ) -1003b96e: f105 4380 add.w r3, r5, #1073741824 ; 0x40000000 -1003b972: f503 2308 add.w r3, r3, #557056 ; 0x88000 -1003b976: 442a add r2, r5 -1003b978: 1b74 subs r4, r6, r5 -1003b97a: 441c add r4, r3 -1003b97c: f104 4440 add.w r4, r4, #3221225472 ; 0xc0000000 -1003b980: f5a4 2408 sub.w r4, r4, #557056 ; 0x88000 -1003b984: 6824 ldr r4, [r4, #0] -1003b986: f843 4b04 str.w r4, [r3], #4 -1003b98a: 4293 cmp r3, r2 -1003b98c: d1f4 bne.n 1003b978 -1003b98e: e7de b.n 1003b94e -1003b990: 688c ldr r4, [r1, #8] -1003b992: b280 uxth r0, r0 -1003b994: 4418 add r0, r3 -1003b996: eb04 14c3 add.w r4, r4, r3, lsl #7 -1003b99a: 4b0d ldr r3, [pc, #52] ; (1003b9d0 ) -1003b99c: f240 7287 movw r2, #1927 ; 0x787 -1003b9a0: 01c0 lsls r0, r0, #7 -1003b9a2: f400 6078 and.w r0, r0, #3968 ; 0xf80 -1003b9a6: 801a strh r2, [r3, #0] -1003b9a8: 4a0b ldr r2, [pc, #44] ; (1003b9d8 ) -1003b9aa: f100 4380 add.w r3, r0, #1073741824 ; 0x40000000 -1003b9ae: f503 2308 add.w r3, r3, #557056 ; 0x88000 -1003b9b2: 4402 add r2, r0 -1003b9b4: 1a21 subs r1, r4, r0 -1003b9b6: 4419 add r1, r3 -1003b9b8: f101 4140 add.w r1, r1, #3221225472 ; 0xc0000000 -1003b9bc: f5a1 2108 sub.w r1, r1, #557056 ; 0x88000 -1003b9c0: 6809 ldr r1, [r1, #0] -1003b9c2: f843 1b04 str.w r1, [r3], #4 -1003b9c6: 4293 cmp r3, r2 -1003b9c8: d1f4 bne.n 1003b9b4 -1003b9ca: bd70 pop {r4, r5, r6, pc} -1003b9cc: 40080424 .word 0x40080424 -1003b9d0: 40080140 .word 0x40080140 -1003b9d4: 40088038 .word 0x40088038 -1003b9d8: 40088040 .word 0x40088040 - -1003b9dc : -1003b9dc: b573 push {r0, r1, r4, r5, r6, lr} -1003b9de: f241 63c8 movw r3, #5832 ; 0x16c8 -1003b9e2: 58c6 ldr r6, [r0, r3] -1003b9e4: 460d mov r5, r1 -1003b9e6: f896 3e88 ldrb.w r3, [r6, #3720] ; 0xe88 -1003b9ea: 4604 mov r4, r0 -1003b9ec: 2b01 cmp r3, #1 -1003b9ee: 4611 mov r1, r2 -1003b9f0: d106 bne.n 1003ba00 -1003b9f2: f896 3e94 ldrb.w r3, [r6, #3732] ; 0xe94 -1003b9f6: b11b cbz r3, 1003ba00 -1003b9f8: 9201 str r2, [sp, #4] -1003b9fa: f7f4 fb0b bl 10030014 -1003b9fe: 9901 ldr r1, [sp, #4] -1003ba00: 2d20 cmp r5, #32 -1003ba02: d014 beq.n 1003ba2e -1003ba04: d806 bhi.n 1003ba14 -1003ba06: b1b5 cbz r5, 1003ba36 -1003ba08: 2d01 cmp r5, #1 -1003ba0a: d117 bne.n 1003ba3c -1003ba0c: 4620 mov r0, r4 -1003ba0e: f7ff ff7d bl 1003b90c -1003ba12: e013 b.n 1003ba3c -1003ba14: 2d40 cmp r5, #64 ; 0x40 -1003ba16: d005 beq.n 1003ba24 -1003ba18: 2dc2 cmp r5, #194 ; 0xc2 -1003ba1a: d10f bne.n 1003ba3c -1003ba1c: 4620 mov r0, r4 -1003ba1e: f7f5 fb7b bl 10031118 -1003ba22: e00b b.n 1003ba3c -1003ba24: f506 7000 add.w r0, r6, #512 ; 0x200 -1003ba28: f7fc ff82 bl 10038930 -1003ba2c: e006 b.n 1003ba3c -1003ba2e: 4620 mov r0, r4 -1003ba30: f7f5 fa72 bl 10030f18 -1003ba34: e002 b.n 1003ba3c -1003ba36: 4620 mov r0, r4 -1003ba38: f7ff ff84 bl 1003b944 -1003ba3c: 4620 mov r0, r4 -1003ba3e: f7f4 fcf7 bl 10030430 -1003ba42: 2000 movs r0, #0 -1003ba44: b002 add sp, #8 -1003ba46: bd70 pop {r4, r5, r6, pc} - -1003ba48 : -1003ba48: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} -1003ba4c: 9c0c ldr r4, [sp, #48] ; 0x30 -1003ba4e: 4607 mov r7, r0 -1003ba50: 9100 str r1, [sp, #0] -1003ba52: 4693 mov fp, r2 -1003ba54: 9301 str r3, [sp, #4] -1003ba56: 2500 movs r5, #0 -1003ba58: 78e1 ldrb r1, [r4, #3] -1003ba5a: 7922 ldrb r2, [r4, #4] -1003ba5c: 0908 lsrs r0, r1, #4 -1003ba5e: f001 010f and.w r1, r1, #15 -1003ba62: ea1b 0f01 tst.w fp, r1 -1003ba66: f8b4 a000 ldrh.w sl, [r4] -1003ba6a: f894 c002 ldrb.w ip, [r4, #2] -1003ba6e: ea4f 1212 mov.w r2, r2, lsr #4 -1003ba72: 7966 ldrb r6, [r4, #5] -1003ba74: f894 8006 ldrb.w r8, [r4, #6] -1003ba78: d03e beq.n 1003baf8 -1003ba7a: 9b00 ldr r3, [sp, #0] -1003ba7c: ea1c 0f03 tst.w ip, r3 -1003ba80: d03a beq.n 1003baf8 -1003ba82: 9b01 ldr r3, [sp, #4] -1003ba84: 4203 tst r3, r0 -1003ba86: d037 beq.n 1003baf8 -1003ba88: 3a01 subs r2, #1 -1003ba8a: 2a03 cmp r2, #3 -1003ba8c: d834 bhi.n 1003baf8 -1003ba8e: e8df f002 tbb [pc, r2] -1003ba92: 1902 .short 0x1902 -1003ba94: 3528 .short 0x3528 -1003ba96: 4651 mov r1, sl -1003ba98: 4638 mov r0, r7 -1003ba9a: f7fc f8ee bl 10037c7a -1003ba9e: ea20 0006 bic.w r0, r0, r6 -1003baa2: b2c2 uxtb r2, r0 -1003baa4: ea08 0606 and.w r6, r8, r6 -1003baa8: 4638 mov r0, r7 -1003baaa: 4651 mov r1, sl -1003baac: 4332 orrs r2, r6 -1003baae: f7fc f8f9 bl 10037ca4 -1003bab2: e021 b.n 1003baf8 -1003bab4: 2201 movs r2, #1 -1003bab6: f241 3188 movw r1, #5000 ; 0x1388 -1003baba: 4589 cmp r9, r1 -1003babc: f105 0501 add.w r5, r5, #1 -1003bac0: d81e bhi.n 1003bb00 -1003bac2: b9ca cbnz r2, 1003baf8 -1003bac4: 4638 mov r0, r7 -1003bac6: 4651 mov r1, sl -1003bac8: f7fc f8d7 bl 10037c7a -1003bacc: ea08 0206 and.w r2, r8, r6 -1003bad0: 4030 ands r0, r6 -1003bad2: 4290 cmp r0, r2 -1003bad4: 46a9 mov r9, r5 -1003bad6: d0ed beq.n 1003bab4 -1003bad8: 200a movs r0, #10 -1003bada: f7db fdd3 bl 10017684 -1003bade: 2200 movs r2, #0 -1003bae0: e7e9 b.n 1003bab6 -1003bae2: f1b8 0f00 cmp.w r8, #0 -1003bae6: d101 bne.n 1003baec -1003bae8: 4650 mov r0, sl -1003baea: e003 b.n 1003baf4 -1003baec: f44f 707a mov.w r0, #1000 ; 0x3e8 -1003baf0: fb00 f00a mul.w r0, r0, sl -1003baf4: f7db fdc6 bl 10017684 -1003baf8: 3408 adds r4, #8 -1003bafa: e7ad b.n 1003ba58 -1003bafc: 2001 movs r0, #1 -1003bafe: e000 b.n 1003bb02 -1003bb00: 2000 movs r0, #0 -1003bb02: b003 add sp, #12 -1003bb04: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -1003bb08 : -1003bb08: b508 push {r3, lr} -1003bb0a: 4b02 ldr r3, [pc, #8] ; (1003bb14 ) -1003bb0c: 6818 ldr r0, [r3, #0] -1003bb0e: b100 cbz r0, 1003bb12 -1003bb10: 4780 blx r0 -1003bb12: bd08 pop {r3, pc} -1003bb14: 10043f94 .word 0x10043f94 - -1003bb18 : -1003bb18: b508 push {r3, lr} -1003bb1a: 4b02 ldr r3, [pc, #8] ; (1003bb24 ) -1003bb1c: 685b ldr r3, [r3, #4] -1003bb1e: b103 cbz r3, 1003bb22 -1003bb20: 4798 blx r3 -1003bb22: bd08 pop {r3, pc} -1003bb24: 10043f94 .word 0x10043f94 - -1003bb28 : -1003bb28: b508 push {r3, lr} -1003bb2a: 4b02 ldr r3, [pc, #8] ; (1003bb34 ) -1003bb2c: 689b ldr r3, [r3, #8] -1003bb2e: b103 cbz r3, 1003bb32 -1003bb30: 4798 blx r3 -1003bb32: bd08 pop {r3, pc} -1003bb34: 10043f94 .word 0x10043f94 - -1003bb38 : -1003bb38: b508 push {r3, lr} -1003bb3a: 4b02 ldr r3, [pc, #8] ; (1003bb44 ) -1003bb3c: 68db ldr r3, [r3, #12] -1003bb3e: b103 cbz r3, 1003bb42 -1003bb40: 4798 blx r3 -1003bb42: bd08 pop {r3, pc} -1003bb44: 10043f94 .word 0x10043f94 - -1003bb48 : -1003bb48: b508 push {r3, lr} -1003bb4a: 2024 movs r0, #36 ; 0x24 -1003bb4c: f7db fe30 bl 100177b0 -1003bb50: b1a0 cbz r0, 1003bb7c -1003bb52: 4b0b ldr r3, [pc, #44] ; (1003bb80 ) -1003bb54: 681a ldr r2, [r3, #0] -1003bb56: f042 0201 orr.w r2, r2, #1 -1003bb5a: 601a str r2, [r3, #0] -1003bb5c: 681a ldr r2, [r3, #0] -1003bb5e: f042 0202 orr.w r2, r2, #2 -1003bb62: 601a str r2, [r3, #0] -1003bb64: f853 2c34 ldr.w r2, [r3, #-52] -1003bb68: f042 0204 orr.w r2, r2, #4 -1003bb6c: f843 2c34 str.w r2, [r3, #-52] -1003bb70: f853 2c30 ldr.w r2, [r3, #-48] -1003bb74: f442 3280 orr.w r2, r2, #65536 ; 0x10000 -1003bb78: f843 2c30 str.w r2, [r3, #-48] -1003bb7c: bd08 pop {r3, pc} -1003bb7e: bf00 nop -1003bb80: 40000244 .word 0x40000244 - -1003bb84 : -1003bb84: b508 push {r3, lr} -1003bb86: b110 cbz r0, 1003bb8e -1003bb88: 2124 movs r1, #36 ; 0x24 -1003bb8a: f7db fc3e bl 1001740a -1003bb8e: 4b0b ldr r3, [pc, #44] ; (1003bbbc ) -1003bb90: 681b ldr r3, [r3, #0] -1003bb92: 4b0b ldr r3, [pc, #44] ; (1003bbc0 ) -1003bb94: 681a ldr r2, [r3, #0] -1003bb96: f422 3280 bic.w r2, r2, #65536 ; 0x10000 -1003bb9a: 601a str r2, [r3, #0] -1003bb9c: f853 2c04 ldr.w r2, [r3, #-4] -1003bba0: f022 0204 bic.w r2, r2, #4 -1003bba4: f843 2c04 str.w r2, [r3, #-4] -1003bba8: 6b1a ldr r2, [r3, #48] ; 0x30 -1003bbaa: f022 0201 bic.w r2, r2, #1 -1003bbae: 631a str r2, [r3, #48] ; 0x30 -1003bbb0: 6b1a ldr r2, [r3, #48] ; 0x30 -1003bbb2: f022 0202 bic.w r2, r2, #2 -1003bbb6: 631a str r2, [r3, #48] ; 0x30 -1003bbb8: bd08 pop {r3, pc} -1003bbba: bf00 nop -1003bbbc: 40080000 .word 0x40080000 -1003bbc0: 40000214 .word 0x40000214 - -1003bbc4 : -1003bbc4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1003bbc8: f8df 8048 ldr.w r8, [pc, #72] ; 1003bc14 -1003bbcc: b088 sub sp, #32 -1003bbce: 4604 mov r4, r0 -1003bbd0: 230f movs r3, #15 -1003bbd2: 9002 str r0, [sp, #8] -1003bbd4: 270e movs r7, #14 -1003bbd6: 4e0d ldr r6, [pc, #52] ; (1003bc0c ) -1003bbd8: 4668 mov r0, sp -1003bbda: 9301 str r3, [sp, #4] -1003bbdc: 4d0c ldr r5, [pc, #48] ; (1003bc10 ) -1003bbde: f8cd 8000 str.w r8, [sp] -1003bbe2: 9703 str r7, [sp, #12] -1003bbe4: 47b0 blx r6 -1003bbe6: 4668 mov r0, sp -1003bbe8: 47a8 blx r5 -1003bbea: 2310 movs r3, #16 -1003bbec: eb0d 0003 add.w r0, sp, r3 -1003bbf0: 9305 str r3, [sp, #20] -1003bbf2: 9406 str r4, [sp, #24] -1003bbf4: f8cd 8010 str.w r8, [sp, #16] -1003bbf8: 9707 str r7, [sp, #28] -1003bbfa: 47b0 blx r6 -1003bbfc: a804 add r0, sp, #16 -1003bbfe: 47a8 blx r5 -1003bc00: 2301 movs r3, #1 -1003bc02: 7723 strb r3, [r4, #28] -1003bc04: 7763 strb r3, [r4, #29] -1003bc06: b008 add sp, #32 -1003bc08: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1003bc0c: 00004029 .word 0x00004029 -1003bc10: 000040f1 .word 0x000040f1 -1003bc14: 1003bd21 .word 0x1003bd21 - -1003bc18 : -1003bc18: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1003bc1c: 7f03 ldrb r3, [r0, #28] -1003bc1e: b088 sub sp, #32 -1003bc20: 4604 mov r4, r0 -1003bc22: b1e3 cbz r3, 1003bc5e -1003bc24: f8df 8044 ldr.w r8, [pc, #68] ; 1003bc6c -1003bc28: 230f movs r3, #15 -1003bc2a: 9002 str r0, [sp, #8] -1003bc2c: 270e movs r7, #14 -1003bc2e: 4668 mov r0, sp -1003bc30: 4e0c ldr r6, [pc, #48] ; (1003bc64 ) -1003bc32: 9301 str r3, [sp, #4] -1003bc34: 4d0c ldr r5, [pc, #48] ; (1003bc68 ) -1003bc36: f8cd 8000 str.w r8, [sp] -1003bc3a: 9703 str r7, [sp, #12] -1003bc3c: 47b0 blx r6 -1003bc3e: 4668 mov r0, sp -1003bc40: 47a8 blx r5 -1003bc42: 2310 movs r3, #16 -1003bc44: eb0d 0003 add.w r0, sp, r3 -1003bc48: 9305 str r3, [sp, #20] -1003bc4a: 9406 str r4, [sp, #24] -1003bc4c: f8cd 8010 str.w r8, [sp, #16] -1003bc50: 9707 str r7, [sp, #28] -1003bc52: 47b0 blx r6 -1003bc54: a804 add r0, sp, #16 -1003bc56: 47a8 blx r5 -1003bc58: 2300 movs r3, #0 -1003bc5a: 7763 strb r3, [r4, #29] -1003bc5c: 7723 strb r3, [r4, #28] -1003bc5e: b008 add sp, #32 -1003bc60: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1003bc64: 0000418d .word 0x0000418d -1003bc68: 00004091 .word 0x00004091 -1003bc6c: 1003bd21 .word 0x1003bd21 - -1003bc70 : -1003bc70: b510 push {r4, lr} -1003bc72: f641 0369 movw r3, #6249 ; 0x1869 -1003bc76: 5cc3 ldrb r3, [r0, r3] -1003bc78: 4604 mov r4, r0 -1003bc7a: b12b cbz r3, 1003bc88 -1003bc7c: f641 035c movw r3, #6236 ; 0x185c -1003bc80: 58c3 ldr r3, [r0, r3] -1003bc82: 2b00 cmp r3, #0 -1003bc84: bf18 it ne -1003bc86: 461c movne r4, r3 -1003bc88: f241 73b0 movw r3, #6064 ; 0x17b0 -1003bc8c: 58e3 ldr r3, [r4, r3] -1003bc8e: b953 cbnz r3, 1003bca6 -1003bc90: f241 7324 movw r3, #5924 ; 0x1724 -1003bc94: 58e3 ldr r3, [r4, r3] -1003bc96: b10b cbz r3, 1003bc9c -1003bc98: 4620 mov r0, r4 -1003bc9a: 4798 blx r3 -1003bc9c: 4620 mov r0, r4 -1003bc9e: e8bd 4010 ldmia.w sp!, {r4, lr} -1003bca2: f7f6 bc78 b.w 10032596 -1003bca6: bd10 pop {r4, pc} - -1003bca8 : -1003bca8: b5f8 push {r3, r4, r5, r6, r7, lr} -1003bcaa: 4604 mov r4, r0 -1003bcac: f504 55be add.w r5, r4, #6080 ; 0x17c0 -1003bcb0: 350c adds r5, #12 -1003bcb2: 4819 ldr r0, [pc, #100] ; (1003bd18 ) -1003bcb4: f105 0608 add.w r6, r5, #8 -1003bcb8: 4f18 ldr r7, [pc, #96] ; (1003bd1c ) -1003bcba: f7db fdfb bl 100178b4 -1003bcbe: 4630 mov r0, r6 -1003bcc0: 603e str r6, [r7, #0] -1003bcc2: f7db fbe9 bl 10017498 -1003bcc6: 4630 mov r0, r6 -1003bcc8: f7db fbfe bl 100174c8 -1003bccc: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -1003bcd0: 3318 adds r3, #24 -1003bcd2: 781b ldrb r3, [r3, #0] -1003bcd4: b98b cbnz r3, 1003bcfa -1003bcd6: 692b ldr r3, [r5, #16] -1003bcd8: b97b cbnz r3, 1003bcfa -1003bcda: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -1003bcde: 330c adds r3, #12 -1003bce0: 681b ldr r3, [r3, #0] -1003bce2: 2b01 cmp r3, #1 -1003bce4: d009 beq.n 1003bcfa -1003bce6: f504 53bd add.w r3, r4, #6048 ; 0x17a0 -1003bcea: 3310 adds r3, #16 -1003bcec: 681b ldr r3, [r3, #0] -1003bcee: 2b01 cmp r3, #1 -1003bcf0: d003 beq.n 1003bcfa -1003bcf2: 4620 mov r0, r4 -1003bcf4: f7f6 fcec bl 100326d0 -1003bcf8: e7e5 b.n 1003bcc6 -1003bcfa: 2202 movs r2, #2 -1003bcfc: f241 73b8 movw r3, #6072 ; 0x17b8 -1003bd00: 54e2 strb r2, [r4, r3] -1003bd02: f105 000c add.w r0, r5, #12 -1003bd06: 2300 movs r3, #0 -1003bd08: 603b str r3, [r7, #0] -1003bd0a: f7db fbc5 bl 10017498 -1003bd0e: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -1003bd12: f7db bdd7 b.w 100178c4 -1003bd16: bf00 nop -1003bd18: 10043fa4 .word 0x10043fa4 -1003bd1c: 1004dfd8 .word 0x1004dfd8 - -1003bd20 : -1003bd20: b538 push {r3, r4, r5, lr} -1003bd22: 6804 ldr r4, [r0, #0] -1003bd24: f241 63c8 movw r3, #5832 ; 0x16c8 -1003bd28: 58e3 ldr r3, [r4, r3] -1003bd2a: 4605 mov r5, r0 -1003bd2c: f893 3e94 ldrb.w r3, [r3, #3732] ; 0xe94 -1003bd30: b113 cbz r3, 1003bd38 -1003bd32: 4620 mov r0, r4 -1003bd34: f7f4 f96e bl 10030014 -1003bd38: 7f6b ldrb r3, [r5, #29] -1003bd3a: b17b cbz r3, 1003bd5c -1003bd3c: 4620 mov r0, r4 -1003bd3e: f7ef fa47 bl 1002b1d0 -1003bd42: 4620 mov r0, r4 -1003bd44: f7ef f9b8 bl 1002b0b8 -1003bd48: 4b05 ldr r3, [pc, #20] ; (1003bd60 ) -1003bd4a: 681b ldr r3, [r3, #0] -1003bd4c: b133 cbz r3, 1003bd5c -1003bd4e: b110 cbz r0, 1003bd56 -1003bd50: 4618 mov r0, r3 -1003bd52: f7db fba9 bl 100174a8 -1003bd56: 4620 mov r0, r4 -1003bd58: f7ef fa06 bl 1002b168 -1003bd5c: 2001 movs r0, #1 -1003bd5e: bd38 pop {r3, r4, r5, pc} -1003bd60: 1004dfd8 .word 0x1004dfd8 - -1003bd64 : -1003bd64: 4a03 ldr r2, [pc, #12] ; (1003bd74 ) -1003bd66: 4b04 ldr r3, [pc, #16] ; (1003bd78 ) -1003bd68: 68d1 ldr r1, [r2, #12] -1003bd6a: 6952 ldr r2, [r2, #20] -1003bd6c: 6019 str r1, [r3, #0] -1003bd6e: 605a str r2, [r3, #4] -1003bd70: 4770 bx lr -1003bd72: bf00 nop -1003bd74: 10040390 .word 0x10040390 -1003bd78: 100006d4 .word 0x100006d4 - -1003bd7c : -1003bd7c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -1003bd80: 4f52 ldr r7, [pc, #328] ; (1003becc ) -1003bd82: f04f 0800 mov.w r8, #0 -1003bd86: 4605 mov r5, r0 -1003bd88: f507 7942 add.w r9, r7, #776 ; 0x308 -1003bd8c: 4644 mov r4, r8 -1003bd8e: 4646 mov r6, r8 -1003bd90: 2301 movs r3, #1 -1003bd92: 454f cmp r7, r9 -1003bd94: f000 8097 beq.w 1003bec6 -1003bd98: f857 1c04 ldr.w r1, [r7, #-4] -1003bd9c: 683a ldr r2, [r7, #0] -1003bd9e: f011 4f40 tst.w r1, #3221225472 ; 0xc0000000 -1003bda2: d07e beq.n 1003bea2 -1003bda4: 2900 cmp r1, #0 -1003bda6: da08 bge.n 1003bdba -1003bda8: f3c1 7001 ubfx r0, r1, #28, #2 -1003bdac: 2803 cmp r0, #3 -1003bdae: d07e beq.n 1003beae -1003bdb0: 2802 cmp r0, #2 -1003bdb2: d17f bne.n 1003beb4 -1003bdb4: f086 0301 eor.w r3, r6, #1 -1003bdb8: e083 b.n 1003bec2 -1003bdba: 2e00 cmp r6, #0 -1003bdbc: d17d bne.n 1003beba -1003bdbe: f895 3034 ldrb.w r3, [r5, #52] ; 0x34 -1003bdc2: f895 c028 ldrb.w ip, [r5, #40] ; 0x28 -1003bdc6: f3c3 1100 ubfx r1, r3, #4, #1 -1003bdca: ea4f 1ad3 mov.w sl, r3, lsr #7 -1003bdce: ea41 0a8a orr.w sl, r1, sl, lsl #2 -1003bdd2: f3c3 01c0 ubfx r1, r3, #3, #1 -1003bdd6: f3c3 1080 ubfx r0, r3, #6, #1 -1003bdda: ea4a 0a41 orr.w sl, sl, r1, lsl #1 -1003bdde: ea4a 0ac0 orr.w sl, sl, r0, lsl #3 -1003bde2: f3c3 0380 ubfx r3, r3, #2, #1 -1003bde6: ea4a 1a03 orr.w sl, sl, r3, lsl #4 -1003bdea: f00c 03f0 and.w r3, ip, #240 ; 0xf0 -1003bdee: f00c 0c0f and.w ip, ip, #15 -1003bdf2: ea4f 2c0c mov.w ip, ip, lsl #8 -1003bdf6: f895 0030 ldrb.w r0, [r5, #48] ; 0x30 -1003bdfa: ea4c 4303 orr.w r3, ip, r3, lsl #16 -1003bdfe: f895 c021 ldrb.w ip, [r5, #33] ; 0x21 -1003be02: f895 1035 ldrb.w r1, [r5, #53] ; 0x35 -1003be06: 2800 cmp r0, #0 -1003be08: ea43 430c orr.w r3, r3, ip, lsl #16 -1003be0c: bf08 it eq -1003be0e: 200f moveq r0, #15 -1003be10: ea43 030a orr.w r3, r3, sl -1003be14: 2900 cmp r1, #0 -1003be16: bf08 it eq -1003be18: 210f moveq r1, #15 -1003be1a: ea43 6000 orr.w r0, r3, r0, lsl #24 -1003be1e: f414 4f70 tst.w r4, #61440 ; 0xf000 -1003be22: ea40 3101 orr.w r1, r0, r1, lsl #12 -1003be26: f895 a036 ldrb.w sl, [r5, #54] ; 0x36 -1003be2a: f895 b037 ldrb.w fp, [r5, #55] ; 0x37 -1003be2e: f895 0038 ldrb.w r0, [r5, #56] ; 0x38 -1003be32: f895 c039 ldrb.w ip, [r5, #57] ; 0x39 -1003be36: d004 beq.n 1003be42 -1003be38: ea81 0304 eor.w r3, r1, r4 -1003be3c: f413 4f70 tst.w r3, #61440 ; 0xf000 -1003be40: d13e bne.n 1003bec0 -1003be42: f014 6f70 tst.w r4, #251658240 ; 0xf000000 -1003be46: d004 beq.n 1003be52 -1003be48: ea81 0304 eor.w r3, r1, r4 -1003be4c: f013 6f70 tst.w r3, #251658240 ; 0xf000000 -1003be50: d133 bne.n 1003beba -1003be52: f024 437f bic.w r3, r4, #4278190080 ; 0xff000000 -1003be56: f423 4370 bic.w r3, r3, #61440 ; 0xf000 -1003be5a: 4019 ands r1, r3 -1003be5c: 4299 cmp r1, r3 -1003be5e: d12c bne.n 1003beba -1003be60: 0723 lsls r3, r4, #28 -1003be62: d02c beq.n 1003bebe -1003be64: 0400 lsls r0, r0, #16 -1003be66: f014 0f01 tst.w r4, #1 -1003be6a: ea40 2b0b orr.w fp, r0, fp, lsl #8 -1003be6e: bf14 ite ne -1003be70: 23ff movne r3, #255 ; 0xff -1003be72: 2300 moveq r3, #0 -1003be74: ea4b 0a0a orr.w sl, fp, sl -1003be78: 07a1 lsls r1, r4, #30 -1003be7a: bf48 it mi -1003be7c: f443 437f orrmi.w r3, r3, #65280 ; 0xff00 -1003be80: ea4a 6c0c orr.w ip, sl, ip, lsl #24 -1003be84: 0761 lsls r1, r4, #29 -1003be86: bf48 it mi -1003be88: f443 037f orrmi.w r3, r3, #16711680 ; 0xff0000 -1003be8c: ea88 0c0c eor.w ip, r8, ip -1003be90: 0721 lsls r1, r4, #28 -1003be92: bf48 it mi -1003be94: f043 437f orrmi.w r3, r3, #4278190080 ; 0xff000000 -1003be98: ea42 020c orr.w r2, r2, ip -1003be9c: 4213 tst r3, r2 -1003be9e: d10c bne.n 1003beba -1003bea0: e00d b.n 1003bebe -1003bea2: b173 cbz r3, 1003bec2 -1003bea4: 4628 mov r0, r5 -1003bea6: b2d2 uxtb r2, r2 -1003bea8: f7fc fef6 bl 10038c98 -1003beac: e000 b.n 1003beb0 -1003beae: 2600 movs r6, #0 -1003beb0: 2301 movs r3, #1 -1003beb2: e006 b.n 1003bec2 -1003beb4: 4690 mov r8, r2 -1003beb6: 460c mov r4, r1 -1003beb8: e003 b.n 1003bec2 -1003beba: 2300 movs r3, #0 -1003bebc: e001 b.n 1003bec2 -1003bebe: 2601 movs r6, #1 -1003bec0: 4633 mov r3, r6 -1003bec2: 3708 adds r7, #8 -1003bec4: e765 b.n 1003bd92 -1003bec6: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -1003beca: bf00 nop -1003becc: 10045a40 .word 0x10045a40 - -1003bed0 : -1003bed0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1003bed4: f890 4034 ldrb.w r4, [r0, #52] ; 0x34 -1003bed8: f890 7028 ldrb.w r7, [r0, #40] ; 0x28 -1003bedc: f3c4 1500 ubfx r5, r4, #4, #1 -1003bee0: ea4f 1cd4 mov.w ip, r4, lsr #7 -1003bee4: ea45 0c8c orr.w ip, r5, ip, lsl #2 -1003bee8: f3c4 05c0 ubfx r5, r4, #3, #1 -1003beec: f3c4 1680 ubfx r6, r4, #6, #1 -1003bef0: ea4c 0c45 orr.w ip, ip, r5, lsl #1 -1003bef4: ea4c 0cc6 orr.w ip, ip, r6, lsl #3 -1003bef8: f3c4 0480 ubfx r4, r4, #2, #1 -1003befc: ea4c 1c04 orr.w ip, ip, r4, lsl #4 -1003bf00: f007 04f0 and.w r4, r7, #240 ; 0xf0 -1003bf04: f007 070f and.w r7, r7, #15 -1003bf08: 023f lsls r7, r7, #8 -1003bf0a: f890 6030 ldrb.w r6, [r0, #48] ; 0x30 -1003bf0e: ea47 4404 orr.w r4, r7, r4, lsl #16 -1003bf12: f890 7021 ldrb.w r7, [r0, #33] ; 0x21 -1003bf16: f890 5035 ldrb.w r5, [r0, #53] ; 0x35 -1003bf1a: 2e00 cmp r6, #0 -1003bf1c: ea44 4407 orr.w r4, r4, r7, lsl #16 -1003bf20: ea44 040c orr.w r4, r4, ip -1003bf24: bf08 it eq -1003bf26: 260f moveq r6, #15 -1003bf28: 2d00 cmp r5, #0 -1003bf2a: bf08 it eq -1003bf2c: 250f moveq r5, #15 -1003bf2e: ea44 6606 orr.w r6, r4, r6, lsl #24 -1003bf32: f411 4f70 tst.w r1, #61440 ; 0xf000 -1003bf36: ea46 3505 orr.w r5, r6, r5, lsl #12 -1003bf3a: f890 7036 ldrb.w r7, [r0, #54] ; 0x36 -1003bf3e: f890 c037 ldrb.w ip, [r0, #55] ; 0x37 -1003bf42: f890 8038 ldrb.w r8, [r0, #56] ; 0x38 -1003bf46: f890 4039 ldrb.w r4, [r0, #57] ; 0x39 -1003bf4a: d004 beq.n 1003bf56 -1003bf4c: ea85 0001 eor.w r0, r5, r1 -1003bf50: f410 4f70 tst.w r0, #61440 ; 0xf000 -1003bf54: d135 bne.n 1003bfc2 -1003bf56: f011 6f70 tst.w r1, #251658240 ; 0xf000000 -1003bf5a: d004 beq.n 1003bf66 -1003bf5c: ea85 0001 eor.w r0, r5, r1 -1003bf60: f010 6f70 tst.w r0, #251658240 ; 0xf000000 -1003bf64: d12d bne.n 1003bfc2 -1003bf66: f021 407f bic.w r0, r1, #4278190080 ; 0xff000000 -1003bf6a: f420 4070 bic.w r0, r0, #61440 ; 0xf000 -1003bf6e: 4005 ands r5, r0 -1003bf70: 4285 cmp r5, r0 -1003bf72: d126 bne.n 1003bfc2 -1003bf74: 0708 lsls r0, r1, #28 -1003bf76: d021 beq.n 1003bfbc -1003bf78: f011 0f01 tst.w r1, #1 -1003bf7c: bf14 ite ne -1003bf7e: 20ff movne r0, #255 ; 0xff -1003bf80: 2000 moveq r0, #0 -1003bf82: 078e lsls r6, r1, #30 -1003bf84: bf48 it mi -1003bf86: f440 407f orrmi.w r0, r0, #65280 ; 0xff00 -1003bf8a: 074d lsls r5, r1, #29 -1003bf8c: bf48 it mi -1003bf8e: f440 007f orrmi.w r0, r0, #16711680 ; 0xff0000 -1003bf92: 0709 lsls r1, r1, #28 -1003bf94: ea4f 4108 mov.w r1, r8, lsl #16 -1003bf98: ea41 210c orr.w r1, r1, ip, lsl #8 -1003bf9c: ea41 0107 orr.w r1, r1, r7 -1003bfa0: ea41 6104 orr.w r1, r1, r4, lsl #24 -1003bfa4: bf48 it mi -1003bfa6: f040 407f orrmi.w r0, r0, #4278190080 ; 0xff000000 -1003bfaa: 404a eors r2, r1 -1003bfac: 4210 tst r0, r2 -1003bfae: d108 bne.n 1003bfc2 -1003bfb0: 4218 tst r0, r3 -1003bfb2: bf14 ite ne -1003bfb4: 2000 movne r0, #0 -1003bfb6: 2001 moveq r0, #1 -1003bfb8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1003bfbc: 2001 movs r0, #1 -1003bfbe: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1003bfc2: 2000 movs r0, #0 -1003bfc4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1003bfc8 : -1003bfc8: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1003bfcc: 4d1b ldr r5, [pc, #108] ; (1003c03c ) -1003bfce: 2700 movs r7, #0 -1003bfd0: 4681 mov r9, r0 -1003bfd2: f505 6ab9 add.w sl, r5, #1480 ; 0x5c8 -1003bfd6: 46b8 mov r8, r7 -1003bfd8: 463e mov r6, r7 -1003bfda: 2401 movs r4, #1 -1003bfdc: 4555 cmp r5, sl -1003bfde: d02a beq.n 1003c036 -1003bfe0: f855 1c04 ldr.w r1, [r5, #-4] -1003bfe4: 682b ldr r3, [r5, #0] -1003bfe6: f011 4f40 tst.w r1, #3221225472 ; 0xc0000000 -1003bfea: d013 beq.n 1003c014 -1003bfec: 2900 cmp r1, #0 -1003bfee: da08 bge.n 1003c002 -1003bff0: f3c1 7201 ubfx r2, r1, #28, #2 -1003bff4: 2a03 cmp r2, #3 -1003bff6: d013 beq.n 1003c020 -1003bff8: 2a02 cmp r2, #2 -1003bffa: d114 bne.n 1003c026 -1003bffc: f086 0401 eor.w r4, r6, #1 -1003c000: e017 b.n 1003c032 -1003c002: b99e cbnz r6, 1003c02c -1003c004: 4648 mov r0, r9 -1003c006: 4641 mov r1, r8 -1003c008: 463a mov r2, r7 -1003c00a: f7ff ff61 bl 1003bed0 -1003c00e: b178 cbz r0, 1003c030 -1003c010: 2601 movs r6, #1 -1003c012: e00d b.n 1003c030 -1003c014: b16c cbz r4, 1003c032 -1003c016: 4648 mov r0, r9 -1003c018: 461a mov r2, r3 -1003c01a: f7fc fe35 bl 10038c88 -1003c01e: e000 b.n 1003c022 -1003c020: 2600 movs r6, #0 -1003c022: 2401 movs r4, #1 -1003c024: e005 b.n 1003c032 -1003c026: 461f mov r7, r3 -1003c028: 4688 mov r8, r1 -1003c02a: e002 b.n 1003c032 -1003c02c: 2400 movs r4, #0 -1003c02e: e000 b.n 1003c032 -1003c030: 4634 mov r4, r6 -1003c032: 3508 adds r5, #8 -1003c034: e7d2 b.n 1003bfdc -1003c036: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1003c03a: bf00 nop -1003c03c: 10045e7c .word 0x10045e7c - -1003c040 : -1003c040: b510 push {r4, lr} -1003c042: f600 210f addw r1, r0, #2575 ; 0xa0f -1003c046: 4604 mov r4, r0 -1003c048: 4a0d ldr r2, [pc, #52] ; (1003c080 ) -1003c04a: 231e movs r3, #30 -1003c04c: f7fe f888 bl 1003a160 -1003c050: 4620 mov r0, r4 -1003c052: f604 212d addw r1, r4, #2605 ; 0xa2d -1003c056: 4a0b ldr r2, [pc, #44] ; (1003c084 ) -1003c058: 231e movs r3, #30 -1003c05a: f7fe f881 bl 1003a160 -1003c05e: 4620 mov r0, r4 -1003c060: f604 11d3 addw r1, r4, #2515 ; 0x9d3 -1003c064: 4a08 ldr r2, [pc, #32] ; (1003c088 ) -1003c066: 231e movs r3, #30 -1003c068: f7fe f87a bl 1003a160 -1003c06c: 4620 mov r0, r4 -1003c06e: f604 11f1 addw r1, r4, #2545 ; 0x9f1 -1003c072: 4a06 ldr r2, [pc, #24] ; (1003c08c ) -1003c074: 231e movs r3, #30 -1003c076: e8bd 4010 ldmia.w sp!, {r4, lr} -1003c07a: f7fe b871 b.w 1003a160 -1003c07e: bf00 nop -1003c080: 10045d84 .word 0x10045d84 -1003c084: 10045e3a .word 0x10045e3a -1003c088: 1004647e .word 0x1004647e -1003c08c: 10045dc0 .word 0x10045dc0 - -1003c090 : -1003c090: b510 push {r4, lr} -1003c092: f600 210f addw r1, r0, #2575 ; 0xa0f -1003c096: 4604 mov r4, r0 -1003c098: 4a0d ldr r2, [pc, #52] ; (1003c0d0 ) -1003c09a: 231e movs r3, #30 -1003c09c: f7fe f860 bl 1003a160 -1003c0a0: 4620 mov r0, r4 -1003c0a2: f604 212d addw r1, r4, #2605 ; 0xa2d -1003c0a6: 4a0b ldr r2, [pc, #44] ; (1003c0d4 ) -1003c0a8: 231e movs r3, #30 -1003c0aa: f7fe f859 bl 1003a160 -1003c0ae: 4620 mov r0, r4 -1003c0b0: f604 11d3 addw r1, r4, #2515 ; 0x9d3 -1003c0b4: 4a08 ldr r2, [pc, #32] ; (1003c0d8 ) -1003c0b6: 231e movs r3, #30 -1003c0b8: f7fe f852 bl 1003a160 -1003c0bc: 4620 mov r0, r4 -1003c0be: f604 11f1 addw r1, r4, #2545 ; 0x9f1 -1003c0c2: 4a06 ldr r2, [pc, #24] ; (1003c0dc ) -1003c0c4: 231e movs r3, #30 -1003c0c6: e8bd 4010 ldmia.w sp!, {r4, lr} -1003c0ca: f7fe b849 b.w 1003a160 -1003c0ce: bf00 nop -1003c0d0: 10045e58 .word 0x10045e58 -1003c0d4: 10045e1c .word 0x10045e1c -1003c0d8: 10045dde .word 0x10045dde -1003c0dc: 10045da2 .word 0x10045da2 - -1003c0e0 : -1003c0e0: b510 push {r4, lr} -1003c0e2: f600 210f addw r1, r0, #2575 ; 0xa0f -1003c0e6: 4604 mov r4, r0 -1003c0e8: 4a0d ldr r2, [pc, #52] ; (1003c120 ) -1003c0ea: 231e movs r3, #30 -1003c0ec: f7fe f838 bl 1003a160 -1003c0f0: 4620 mov r0, r4 -1003c0f2: f604 212d addw r1, r4, #2605 ; 0xa2d -1003c0f6: 4a0b ldr r2, [pc, #44] ; (1003c124 ) -1003c0f8: 231e movs r3, #30 -1003c0fa: f7fe f831 bl 1003a160 -1003c0fe: 4620 mov r0, r4 -1003c100: f604 11d3 addw r1, r4, #2515 ; 0x9d3 -1003c104: 4a08 ldr r2, [pc, #32] ; (1003c128 ) -1003c106: 231e movs r3, #30 -1003c108: f7fe f82a bl 1003a160 -1003c10c: 4620 mov r0, r4 -1003c10e: f604 11f1 addw r1, r4, #2545 ; 0x9f1 -1003c112: 4a06 ldr r2, [pc, #24] ; (1003c12c ) -1003c114: 231e movs r3, #30 -1003c116: e8bd 4010 ldmia.w sp!, {r4, lr} -1003c11a: f7fe b821 b.w 1003a160 -1003c11e: bf00 nop -1003c120: 1004645e .word 0x1004645e -1003c124: 10045dfc .word 0x10045dfc -1003c128: 10045d64 .word 0x10045d64 -1003c12c: 10045d44 .word 0x10045d44 - -1003c130 : -1003c130: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} -1003c132: 4c0c ldr r4, [pc, #48] ; (1003c164 ) -1003c134: 4606 mov r6, r0 -1003c136: f504 6593 add.w r5, r4, #1176 ; 0x498 -1003c13a: 78a0 ldrb r0, [r4, #2] -1003c13c: f814 1c01 ldrb.w r1, [r4, #-1] -1003c140: 9000 str r0, [sp, #0] -1003c142: 78e0 ldrb r0, [r4, #3] -1003c144: 7822 ldrb r2, [r4, #0] -1003c146: 9001 str r0, [sp, #4] -1003c148: 7920 ldrb r0, [r4, #4] -1003c14a: 7863 ldrb r3, [r4, #1] -1003c14c: 9002 str r0, [sp, #8] -1003c14e: 7960 ldrb r0, [r4, #5] -1003c150: 3407 adds r4, #7 -1003c152: 9003 str r0, [sp, #12] -1003c154: 4630 mov r0, r6 -1003c156: f7fc fde4 bl 10038d22 -1003c15a: 42ac cmp r4, r5 -1003c15c: d1ed bne.n 1003c13a -1003c15e: b004 add sp, #16 -1003c160: bd70 pop {r4, r5, r6, pc} -1003c162: bf00 nop -1003c164: 10043fba .word 0x10043fba - -1003c168 : -1003c168: b510 push {r4, lr} -1003c16a: f600 214b addw r1, r0, #2635 ; 0xa4b -1003c16e: 4604 mov r4, r0 -1003c170: 4a06 ldr r2, [pc, #24] ; (1003c18c ) -1003c172: 231e movs r3, #30 -1003c174: f7fd fff4 bl 1003a160 -1003c178: 4620 mov r0, r4 -1003c17a: f604 2169 addw r1, r4, #2665 ; 0xa69 -1003c17e: 4a04 ldr r2, [pc, #16] ; (1003c190 ) -1003c180: 231e movs r3, #30 -1003c182: e8bd 4010 ldmia.w sp!, {r4, lr} -1003c186: f7fd bfeb b.w 1003a160 -1003c18a: bf00 nop -1003c18c: 10046440 .word 0x10046440 -1003c190: 1004dfdc .word 0x1004dfdc - -1003c194 : -1003c194: f8d0 30b0 ldr.w r3, [r0, #176] ; 0xb0 -1003c198: 881b ldrh r3, [r3, #0] -1003c19a: 2b02 cmp r3, #2 -1003c19c: d005 beq.n 1003c1aa -1003c19e: 2b04 cmp r3, #4 -1003c1a0: d003 beq.n 1003c1aa -1003c1a2: 2b0b cmp r3, #11 -1003c1a4: d001 beq.n 1003c1aa -1003c1a6: 2b16 cmp r3, #22 -1003c1a8: d105 bne.n 1003c1b6 -1003c1aa: f600 13d3 addw r3, r0, #2515 ; 0x9d3 -1003c1ae: 600b str r3, [r1, #0] -1003c1b0: f600 10f1 addw r0, r0, #2545 ; 0x9f1 -1003c1b4: e004 b.n 1003c1c0 -1003c1b6: f600 230f addw r3, r0, #2575 ; 0xa0f -1003c1ba: 600b str r3, [r1, #0] -1003c1bc: f600 202d addw r0, r0, #2605 ; 0xa2d -1003c1c0: 6010 str r0, [r2, #0] -1003c1c2: 4770 bx lr - -1003c1c4 : -1003c1c4: f600 234b addw r3, r0, #2635 ; 0xa4b -1003c1c8: f600 2069 addw r0, r0, #2665 ; 0xa69 -1003c1cc: 600b str r3, [r1, #0] -1003c1ce: 6010 str r0, [r2, #0] -1003c1d0: 4770 bx lr - ... - -1003c1d4 : -1003c1d4: 4b06 ldr r3, [pc, #24] ; (1003c1f0 ) -1003c1d6: 7919 ldrb r1, [r3, #4] -1003c1d8: f890 37ca ldrb.w r3, [r0, #1994] ; 0x7ca -1003c1dc: f001 013f and.w r1, r1, #63 ; 0x3f -1003c1e0: 4419 add r1, r3 -1003c1e2: b249 sxtb r1, r1 -1003c1e4: f381 0106 usat r1, #6, r1 -1003c1e8: b2c9 uxtb r1, r1 -1003c1ea: f002 bb6d b.w 1003e8c8 <__ROM_odm_SetCrystalCap_veneer> -1003c1ee: bf00 nop -1003c1f0: 10000738 .word 0x10000738 - -1003c1f4 : -1003c1f4: b5f8 push {r3, r4, r5, r6, r7, lr} -1003c1f6: f890 249e ldrb.w r2, [r0, #1182] ; 0x49e -1003c1fa: f241 63c8 movw r3, #5832 ; 0x16c8 -1003c1fe: 58c3 ldr r3, [r0, r3] -1003c200: f1a2 0122 sub.w r1, r2, #34 ; 0x22 -1003c204: 2901 cmp r1, #1 -1003c206: f503 7400 add.w r4, r3, #512 ; 0x200 -1003c20a: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 -1003c20e: d903 bls.n 1003c218 -1003c210: 2a2a cmp r2, #42 ; 0x2a -1003c212: d001 beq.n 1003c218 -1003c214: 2a58 cmp r2, #88 ; 0x58 -1003c216: d14b bne.n 1003c2b0 -1003c218: f1a3 020c sub.w r2, r3, #12 -1003c21c: 2a01 cmp r2, #1 -1003c21e: d801 bhi.n 1003c224 -1003c220: 4b25 ldr r3, [pc, #148] ; (1003c2b8 ) -1003c222: e002 b.n 1003c22a -1003c224: 2b0e cmp r3, #14 -1003c226: d141 bne.n 1003c2ac -1003c228: 4b24 ldr r3, [pc, #144] ; (1003c2bc ) -1003c22a: 7859 ldrb r1, [r3, #1] -1003c22c: 781a ldrb r2, [r3, #0] -1003c22e: 795f ldrb r7, [r3, #5] -1003c230: eb02 2201 add.w r2, r2, r1, lsl #8 -1003c234: 7899 ldrb r1, [r3, #2] -1003c236: 7a5e ldrb r6, [r3, #9] -1003c238: eb02 4201 add.w r2, r2, r1, lsl #16 -1003c23c: 78d9 ldrb r1, [r3, #3] -1003c23e: 7b5d ldrb r5, [r3, #13] -1003c240: eb02 6201 add.w r2, r2, r1, lsl #24 -1003c244: 7919 ldrb r1, [r3, #4] -1003c246: 4620 mov r0, r4 -1003c248: eb01 2707 add.w r7, r1, r7, lsl #8 -1003c24c: 7999 ldrb r1, [r3, #6] -1003c24e: eb07 4701 add.w r7, r7, r1, lsl #16 -1003c252: 79d9 ldrb r1, [r3, #7] -1003c254: eb07 6701 add.w r7, r7, r1, lsl #24 -1003c258: 7a19 ldrb r1, [r3, #8] -1003c25a: eb01 2606 add.w r6, r1, r6, lsl #8 -1003c25e: 7a99 ldrb r1, [r3, #10] -1003c260: eb06 4601 add.w r6, r6, r1, lsl #16 -1003c264: 7ad9 ldrb r1, [r3, #11] -1003c266: eb06 6601 add.w r6, r6, r1, lsl #24 -1003c26a: 7b19 ldrb r1, [r3, #12] -1003c26c: eb01 2505 add.w r5, r1, r5, lsl #8 -1003c270: 7b99 ldrb r1, [r3, #14] -1003c272: 7bdb ldrb r3, [r3, #15] -1003c274: eb05 4501 add.w r5, r5, r1, lsl #16 -1003c278: f640 2122 movw r1, #2594 ; 0xa22 -1003c27c: eb05 6503 add.w r5, r5, r3, lsl #24 -1003c280: f7fd ff5c bl 1003a13c -1003c284: 4620 mov r0, r4 -1003c286: 463a mov r2, r7 -1003c288: f640 2126 movw r1, #2598 ; 0xa26 -1003c28c: f7fd ff56 bl 1003a13c -1003c290: 4620 mov r0, r4 -1003c292: 4632 mov r2, r6 -1003c294: f640 219a movw r1, #2714 ; 0xa9a -1003c298: f7fd ff50 bl 1003a13c -1003c29c: 4620 mov r0, r4 -1003c29e: 462a mov r2, r5 -1003c2a0: f44f 612a mov.w r1, #2720 ; 0xaa0 -1003c2a4: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -1003c2a8: f7fd bf48 b.w 1003a13c -1003c2ac: 4b04 ldr r3, [pc, #16] ; (1003c2c0 ) -1003c2ae: e7bc b.n 1003c22a -1003c2b0: 2b0e cmp r3, #14 -1003c2b2: d1b5 bne.n 1003c220 -1003c2b4: e7b8 b.n 1003c228 -1003c2b6: bf00 nop -1003c2b8: 10043ee0 .word 0x10043ee0 -1003c2bc: 10043e12 .word 0x10043e12 -1003c2c0: 10043e22 .word 0x10043e22 - -1003c2c4 : -1003c2c4: 6803 ldr r3, [r0, #0] -1003c2c6: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} -1003c2ca: 4614 mov r4, r2 -1003c2cc: f241 62c8 movw r2, #5832 ; 0x16c8 -1003c2d0: 589e ldr r6, [r3, r2] -1003c2d2: f8d0 30b0 ldr.w r3, [r0, #176] ; 0xb0 -1003c2d6: 4680 mov r8, r0 -1003c2d8: 881b ldrh r3, [r3, #0] -1003c2da: 460d mov r5, r1 -1003c2dc: b92b cbnz r3, 1003c2ea -1003c2de: f890 00ec ldrb.w r0, [r0, #236] ; 0xec -1003c2e2: 28ff cmp r0, #255 ; 0xff -1003c2e4: d001 beq.n 1003c2ea -1003c2e6: f7f5 f99f bl 10031628 -1003c2ea: 2d01 cmp r5, #1 -1003c2ec: d17a bne.n 1003c3e4 -1003c2ee: eb08 0304 add.w r3, r8, r4 -1003c2f2: f893 2bf2 ldrb.w r2, [r3, #3058] ; 0xbf2 -1003c2f6: f8d8 7000 ldr.w r7, [r8] -1003c2fa: f883 2bf4 strb.w r2, [r3, #3060] ; 0xbf4 -1003c2fe: f893 2bf3 ldrb.w r2, [r3, #3059] ; 0xbf3 -1003c302: f883 2bf5 strb.w r2, [r3, #3061] ; 0xbf5 -1003c306: f888 5bf7 strb.w r5, [r8, #3063] ; 0xbf7 -1003c30a: f888 5bf9 strb.w r5, [r8, #3065] ; 0xbf9 -1003c30e: 2c00 cmp r4, #0 -1003c310: d162 bne.n 1003c3d8 -1003c312: 4621 mov r1, r4 -1003c314: 4623 mov r3, r4 -1003c316: 4638 mov r0, r7 -1003c318: f896 2034 ldrb.w r2, [r6, #52] ; 0x34 -1003c31c: f7f5 fe60 bl 10031fe0 -1003c320: 4621 mov r1, r4 -1003c322: 462b mov r3, r5 -1003c324: 4638 mov r0, r7 -1003c326: f896 2034 ldrb.w r2, [r6, #52] ; 0x34 -1003c32a: f7f5 fe59 bl 10031fe0 -1003c32e: 4621 mov r1, r4 -1003c330: f896 2034 ldrb.w r2, [r6, #52] ; 0x34 -1003c334: 2302 movs r3, #2 -1003c336: 4638 mov r0, r7 -1003c338: f7f5 fe52 bl 10031fe0 -1003c33c: 4b2b ldr r3, [pc, #172] ; (1003c3ec ) -1003c33e: f04f 7280 mov.w r2, #16777216 ; 0x1000000 -1003c342: e9d3 4502 ldrd r4, r5, [r3, #8] -1003c346: 2300 movs r3, #0 -1003c348: 4022 ands r2, r4 -1003c34a: 402b ands r3, r5 -1003c34c: ea52 0103 orrs.w r1, r2, r3 -1003c350: d042 beq.n 1003c3d8 -1003c352: 4c27 ldr r4, [pc, #156] ; (1003c3f0 ) -1003c354: 6823 ldr r3, [r4, #0] -1003c356: b18b cbz r3, 1003c37c -1003c358: f896 1034 ldrb.w r1, [r6, #52] ; 0x34 -1003c35c: f996 0076 ldrsb.w r0, [r6, #118] ; 0x76 -1003c360: 1e4b subs r3, r1, #1 -1003c362: 4433 add r3, r6 -1003c364: f893 205a ldrb.w r2, [r3, #90] ; 0x5a -1003c368: f893 3068 ldrb.w r3, [r3, #104] ; 0x68 -1003c36c: 9000 str r0, [sp, #0] -1003c36e: f996 0077 ldrsb.w r0, [r6, #119] ; 0x77 -1003c372: 9001 str r0, [sp, #4] -1003c374: 481f ldr r0, [pc, #124] ; (1003c3f4 ) -1003c376: 6bc0 ldr r0, [r0, #60] ; 0x3c -1003c378: f7de fbf2 bl 1001ab60 -1003c37c: 6823 ldr r3, [r4, #0] -1003c37e: b12b cbz r3, 1003c38c -1003c380: 4b1c ldr r3, [pc, #112] ; (1003c3f4 ) -1003c382: f998 1bf5 ldrsb.w r1, [r8, #3061] ; 0xbf5 -1003c386: 6c18 ldr r0, [r3, #64] ; 0x40 -1003c388: f7de fbea bl 1001ab60 -1003c38c: 6823 ldr r3, [r4, #0] -1003c38e: b12b cbz r3, 1003c39c -1003c390: 4b18 ldr r3, [pc, #96] ; (1003c3f4 ) -1003c392: f998 1bf4 ldrsb.w r1, [r8, #3060] ; 0xbf4 -1003c396: 6c58 ldr r0, [r3, #68] ; 0x44 -1003c398: f7de fbe2 bl 1001ab60 -1003c39c: 6823 ldr r3, [r4, #0] -1003c39e: b163 cbz r3, 1003c3ba -1003c3a0: 4b14 ldr r3, [pc, #80] ; (1003c3f4 ) -1003c3a2: f640 016c movw r1, #2156 ; 0x86c -1003c3a6: 4638 mov r0, r7 -1003c3a8: f04f 32ff mov.w r2, #4294967295 -1003c3ac: 6c9d ldr r5, [r3, #72] ; 0x48 -1003c3ae: f7f2 fbf5 bl 1002eb9c -1003c3b2: 4601 mov r1, r0 -1003c3b4: 4628 mov r0, r5 -1003c3b6: f7de fbd3 bl 1001ab60 -1003c3ba: 6823 ldr r3, [r4, #0] -1003c3bc: b163 cbz r3, 1003c3d8 -1003c3be: 4b0d ldr r3, [pc, #52] ; (1003c3f4 ) -1003c3c0: f640 6114 movw r1, #3604 ; 0xe14 -1003c3c4: 4638 mov r0, r7 -1003c3c6: f04f 32ff mov.w r2, #4294967295 -1003c3ca: 6cdc ldr r4, [r3, #76] ; 0x4c -1003c3cc: f7f2 fbe6 bl 1002eb9c -1003c3d0: 4601 mov r1, r0 -1003c3d2: 4620 mov r0, r4 -1003c3d4: f7de fbc4 bl 1001ab60 -1003c3d8: 4638 mov r0, r7 -1003c3da: b002 add sp, #8 -1003c3dc: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} -1003c3e0: f7ff bf08 b.w 1003c1f4 -1003c3e4: b002 add sp, #8 -1003c3e6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1003c3ea: bf00 nop -1003c3ec: 10000720 .word 0x10000720 -1003c3f0: 10044ec0 .word 0x10044ec0 -1003c3f4: 10043a4c .word 0x10043a4c - -1003c3f8 : -1003c3f8: 2321 movs r3, #33 ; 0x21 -1003c3fa: 7003 strb r3, [r0, #0] -1003c3fc: 232b movs r3, #43 ; 0x2b -1003c3fe: 7043 strb r3, [r0, #1] -1003c400: 2308 movs r3, #8 -1003c402: 7083 strb r3, [r0, #2] -1003c404: 2304 movs r3, #4 -1003c406: 70c3 strb r3, [r0, #3] -1003c408: 2301 movs r3, #1 -1003c40a: 7103 strb r3, [r0, #4] -1003c40c: 2342 movs r3, #66 ; 0x42 -1003c40e: 6083 str r3, [r0, #8] -1003c410: 4b06 ldr r3, [pc, #24] ; (1003c42c ) -1003c412: 60c3 str r3, [r0, #12] -1003c414: 4b06 ldr r3, [pc, #24] ; (1003c430 ) -1003c416: 6103 str r3, [r0, #16] -1003c418: 4b06 ldr r3, [pc, #24] ; (1003c434 ) -1003c41a: 6143 str r3, [r0, #20] -1003c41c: 4b06 ldr r3, [pc, #24] ; (1003c438 ) -1003c41e: 6183 str r3, [r0, #24] -1003c420: 4b06 ldr r3, [pc, #24] ; (1003c43c ) -1003c422: 61c3 str r3, [r0, #28] -1003c424: 4b06 ldr r3, [pc, #24] ; (1003c440 ) -1003c426: 6203 str r3, [r0, #32] -1003c428: 4770 bx lr -1003c42a: bf00 nop -1003c42c: 1003c2c5 .word 0x1003c2c5 -1003c430: 1003d67d .word 0x1003d67d -1003c434: 1003d355 .word 0x1003d355 -1003c438: 1003c195 .word 0x1003c195 -1003c43c: 1003c1c5 .word 0x1003c1c5 -1003c440: 1003c1d5 .word 0x1003c1d5 - -1003c444 : -1003c444: f241 63c8 movw r3, #5832 ; 0x16c8 -1003c448: b573 push {r0, r1, r4, r5, r6, lr} -1003c44a: 58c5 ldr r5, [r0, r3] -1003c44c: f640 6128 movw r1, #3624 ; 0xe28 -1003c450: f505 7400 add.w r4, r5, #512 ; 0x200 -1003c454: 4620 mov r0, r4 -1003c456: f06f 02ff mvn.w r2, #255 ; 0xff -1003c45a: 2300 movs r3, #0 -1003c45c: f7fd fe74 bl 1003a148 -1003c460: 2301 movs r3, #1 -1003c462: 9300 str r3, [sp, #0] -1003c464: 4620 mov r0, r4 -1003c466: 2100 movs r1, #0 -1003c468: 22ef movs r2, #239 ; 0xef -1003c46a: f44f 2300 mov.w r3, #524288 ; 0x80000 -1003c46e: f7fd fe71 bl 1003a154 -1003c472: f44f 3300 mov.w r3, #131072 ; 0x20000 -1003c476: 9300 str r3, [sp, #0] -1003c478: 4620 mov r0, r4 -1003c47a: 2100 movs r1, #0 -1003c47c: 2230 movs r2, #48 ; 0x30 -1003c47e: 4b56 ldr r3, [pc, #344] ; (1003c5d8 ) -1003c480: f7fd fe68 bl 1003a154 -1003c484: 230f movs r3, #15 -1003c486: 9300 str r3, [sp, #0] -1003c488: 4620 mov r0, r4 -1003c48a: 2100 movs r1, #0 -1003c48c: 2231 movs r2, #49 ; 0x31 -1003c48e: 4b52 ldr r3, [pc, #328] ; (1003c5d8 ) -1003c490: f7fd fe60 bl 1003a154 -1003c494: f647 73f7 movw r3, #32759 ; 0x7ff7 -1003c498: 9300 str r3, [sp, #0] -1003c49a: 4620 mov r0, r4 -1003c49c: 2100 movs r1, #0 -1003c49e: 2232 movs r2, #50 ; 0x32 -1003c4a0: 4b4d ldr r3, [pc, #308] ; (1003c5d8 ) -1003c4a2: f7fd fe57 bl 1003a154 -1003c4a6: f44f 6318 mov.w r3, #2432 ; 0x980 -1003c4aa: 9300 str r3, [sp, #0] -1003c4ac: 4620 mov r0, r4 -1003c4ae: 2100 movs r1, #0 -1003c4b0: 22df movs r2, #223 ; 0xdf -1003c4b2: 4b49 ldr r3, [pc, #292] ; (1003c5d8 ) -1003c4b4: f7fd fe4e bl 1003a154 -1003c4b8: 4b48 ldr r3, [pc, #288] ; (1003c5dc ) -1003c4ba: 4620 mov r0, r4 -1003c4bc: 9300 str r3, [sp, #0] -1003c4be: 2100 movs r1, #0 -1003c4c0: 2256 movs r2, #86 ; 0x56 -1003c4c2: 4b45 ldr r3, [pc, #276] ; (1003c5d8 ) -1003c4c4: f7fd fe46 bl 1003a154 -1003c4c8: 4620 mov r0, r4 -1003c4ca: f640 6128 movw r1, #3624 ; 0xe28 -1003c4ce: f06f 02ff mvn.w r2, #255 ; 0xff -1003c4d2: 4b43 ldr r3, [pc, #268] ; (1003c5e0 ) -1003c4d4: f7fd fe38 bl 1003a148 -1003c4d8: 4620 mov r0, r4 -1003c4da: f44f 6163 mov.w r1, #3632 ; 0xe30 -1003c4de: f04f 32ff mov.w r2, #4294967295 -1003c4e2: 4b40 ldr r3, [pc, #256] ; (1003c5e4 ) -1003c4e4: f7fd fe30 bl 1003a148 -1003c4e8: 4620 mov r0, r4 -1003c4ea: f640 6134 movw r1, #3636 ; 0xe34 -1003c4ee: f04f 32ff mov.w r2, #4294967295 -1003c4f2: 4b3d ldr r3, [pc, #244] ; (1003c5e8 ) -1003c4f4: f7fd fe28 bl 1003a148 -1003c4f8: 4620 mov r0, r4 -1003c4fa: f640 6138 movw r1, #3640 ; 0xe38 -1003c4fe: f04f 32ff mov.w r2, #4294967295 -1003c502: 4b3a ldr r3, [pc, #232] ; (1003c5ec ) -1003c504: f7fd fe20 bl 1003a148 -1003c508: 4620 mov r0, r4 -1003c50a: f640 613c movw r1, #3644 ; 0xe3c -1003c50e: f04f 32ff mov.w r2, #4294967295 -1003c512: 4b37 ldr r3, [pc, #220] ; (1003c5f0 ) -1003c514: f7fd fe18 bl 1003a148 -1003c518: 4620 mov r0, r4 -1003c51a: f640 614c movw r1, #3660 ; 0xe4c -1003c51e: f04f 32ff mov.w r2, #4294967295 -1003c522: 4b34 ldr r3, [pc, #208] ; (1003c5f4 ) -1003c524: f7fd fe10 bl 1003a148 -1003c528: 4620 mov r0, r4 -1003c52a: f640 6148 movw r1, #3656 ; 0xe48 -1003c52e: f04f 32ff mov.w r2, #4294967295 -1003c532: f04f 4379 mov.w r3, #4177526784 ; 0xf9000000 -1003c536: f7fd fe07 bl 1003a148 -1003c53a: f640 6148 movw r1, #3656 ; 0xe48 -1003c53e: f04f 32ff mov.w r2, #4294967295 -1003c542: f04f 4378 mov.w r3, #4160749568 ; 0xf8000000 -1003c546: 4620 mov r0, r4 -1003c548: f7fd fdfe bl 1003a148 -1003c54c: 200a movs r0, #10 -1003c54e: f7fd fe0c bl 1003a16a -1003c552: 4620 mov r0, r4 -1003c554: f640 6128 movw r1, #3624 ; 0xe28 -1003c558: f06f 02ff mvn.w r2, #255 ; 0xff -1003c55c: 2300 movs r3, #0 -1003c55e: f7fd fdf3 bl 1003a148 -1003c562: f44f 73c0 mov.w r3, #384 ; 0x180 -1003c566: 9300 str r3, [sp, #0] -1003c568: 4620 mov r0, r4 -1003c56a: 2100 movs r1, #0 -1003c56c: 22df movs r2, #223 ; 0xdf -1003c56e: 4b1a ldr r3, [pc, #104] ; (1003c5d8 ) -1003c570: f7fd fdf0 bl 1003a154 -1003c574: 4b18 ldr r3, [pc, #96] ; (1003c5d8 ) -1003c576: 2100 movs r1, #0 -1003c578: 2208 movs r2, #8 -1003c57a: 4620 mov r0, r4 -1003c57c: f7fd fded bl 1003a15a -1003c580: f640 61ac movw r1, #3756 ; 0xeac -1003c584: f8c5 0da8 str.w r0, [r5, #3496] ; 0xda8 -1003c588: f04f 32ff mov.w r2, #4294967295 -1003c58c: 4620 mov r0, r4 -1003c58e: f7fd fdde bl 1003a14e -1003c592: f640 6194 movw r1, #3732 ; 0xe94 -1003c596: 4605 mov r5, r0 -1003c598: f04f 32ff mov.w r2, #4294967295 -1003c59c: 4620 mov r0, r4 -1003c59e: f7fd fdd6 bl 1003a14e -1003c5a2: f640 619c movw r1, #3740 ; 0xe9c -1003c5a6: 4606 mov r6, r0 -1003c5a8: f04f 32ff mov.w r2, #4294967295 -1003c5ac: 4620 mov r0, r4 -1003c5ae: f7fd fdce bl 1003a14e -1003c5b2: f015 5580 ands.w r5, r5, #268435456 ; 0x10000000 -1003c5b6: d10a bne.n 1003c5ce -1003c5b8: f3c6 4609 ubfx r6, r6, #16, #10 -1003c5bc: f5b6 7fa1 cmp.w r6, #322 ; 0x142 -1003c5c0: d007 beq.n 1003c5d2 -1003c5c2: f3c0 4009 ubfx r0, r0, #16, #10 -1003c5c6: 3842 subs r0, #66 ; 0x42 -1003c5c8: bf18 it ne -1003c5ca: 2001 movne r0, #1 -1003c5cc: e002 b.n 1003c5d4 -1003c5ce: 2000 movs r0, #0 -1003c5d0: e000 b.n 1003c5d4 -1003c5d2: 4628 mov r0, r5 -1003c5d4: b002 add sp, #8 -1003c5d6: bd70 pop {r4, r5, r6, pc} -1003c5d8: 000fffff .word 0x000fffff -1003c5dc: 0005102a .word 0x0005102a -1003c5e0: 00808000 .word 0x00808000 -1003c5e4: 18008c1c .word 0x18008c1c -1003c5e8: 38008c1c .word 0x38008c1c -1003c5ec: 821403ff .word 0x821403ff -1003c5f0: 28160000 .word 0x28160000 -1003c5f4: 00462911 .word 0x00462911 - -1003c5f8 : -1003c5f8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1003c5fc: f241 63c8 movw r3, #5832 ; 0x16c8 -1003c600: 58c7 ldr r7, [r0, r3] -1003c602: b085 sub sp, #20 -1003c604: f507 7400 add.w r4, r7, #512 ; 0x200 -1003c608: 4620 mov r0, r4 -1003c60a: f640 6128 movw r1, #3624 ; 0xe28 -1003c60e: f06f 02ff mvn.w r2, #255 ; 0xff -1003c612: 2300 movs r3, #0 -1003c614: 2601 movs r6, #1 -1003c616: f7fd fd97 bl 1003a148 -1003c61a: f44f 3b40 mov.w fp, #196608 ; 0x30000 -1003c61e: 4620 mov r0, r4 -1003c620: 2100 movs r1, #0 -1003c622: 22ef movs r2, #239 ; 0xef -1003c624: f44f 2300 mov.w r3, #524288 ; 0x80000 -1003c628: 9600 str r6, [sp, #0] -1003c62a: f7fd fd93 bl 1003a154 -1003c62e: f04f 0a0f mov.w sl, #15 -1003c632: 4620 mov r0, r4 -1003c634: 2100 movs r1, #0 -1003c636: 2230 movs r2, #48 ; 0x30 -1003c638: 4bc4 ldr r3, [pc, #784] ; (1003c94c ) -1003c63a: f8cd b000 str.w fp, [sp] -1003c63e: f7fd fd89 bl 1003a154 -1003c642: 4620 mov r0, r4 -1003c644: 2100 movs r1, #0 -1003c646: 2231 movs r2, #49 ; 0x31 -1003c648: 4bc0 ldr r3, [pc, #768] ; (1003c94c ) -1003c64a: f8cd a000 str.w sl, [sp] -1003c64e: f7fd fd81 bl 1003a154 -1003c652: 4bbf ldr r3, [pc, #764] ; (1003c950 ) -1003c654: 4620 mov r0, r4 -1003c656: 9300 str r3, [sp, #0] -1003c658: 2100 movs r1, #0 -1003c65a: 2232 movs r2, #50 ; 0x32 -1003c65c: 4bbb ldr r3, [pc, #748] ; (1003c94c ) -1003c65e: f44f 6918 mov.w r9, #2432 ; 0x980 -1003c662: f7fd fd77 bl 1003a154 -1003c666: 4620 mov r0, r4 -1003c668: 2100 movs r1, #0 -1003c66a: 22df movs r2, #223 ; 0xdf -1003c66c: 4bb7 ldr r3, [pc, #732] ; (1003c94c ) -1003c66e: f8cd 9000 str.w r9, [sp] -1003c672: f7fd fd6f bl 1003a154 -1003c676: 4bb7 ldr r3, [pc, #732] ; (1003c954 ) -1003c678: 4620 mov r0, r4 -1003c67a: 9300 str r3, [sp, #0] -1003c67c: 2100 movs r1, #0 -1003c67e: 2256 movs r2, #86 ; 0x56 -1003c680: 4bb2 ldr r3, [pc, #712] ; (1003c94c ) -1003c682: f7fd fd67 bl 1003a154 -1003c686: 4620 mov r0, r4 -1003c688: f640 6128 movw r1, #3624 ; 0xe28 -1003c68c: f06f 02ff mvn.w r2, #255 ; 0xff -1003c690: 4bb1 ldr r3, [pc, #708] ; (1003c958 ) -1003c692: f7fd fd59 bl 1003a148 -1003c696: 4620 mov r0, r4 -1003c698: f44f 6164 mov.w r1, #3648 ; 0xe40 -1003c69c: f04f 32ff mov.w r2, #4294967295 -1003c6a0: 4bae ldr r3, [pc, #696] ; (1003c95c ) -1003c6a2: f7fd fd51 bl 1003a148 -1003c6a6: 4620 mov r0, r4 -1003c6a8: f640 6144 movw r1, #3652 ; 0xe44 -1003c6ac: f04f 32ff mov.w r2, #4294967295 -1003c6b0: 4bab ldr r3, [pc, #684] ; (1003c960 ) -1003c6b2: f7fd fd49 bl 1003a148 -1003c6b6: 4620 mov r0, r4 -1003c6b8: f44f 6163 mov.w r1, #3632 ; 0xe30 -1003c6bc: f04f 32ff mov.w r2, #4294967295 -1003c6c0: 4ba8 ldr r3, [pc, #672] ; (1003c964 ) -1003c6c2: f7fd fd41 bl 1003a148 -1003c6c6: 4620 mov r0, r4 -1003c6c8: f640 6134 movw r1, #3636 ; 0xe34 -1003c6cc: f04f 32ff mov.w r2, #4294967295 -1003c6d0: 4ba5 ldr r3, [pc, #660] ; (1003c968 ) -1003c6d2: f7fd fd39 bl 1003a148 -1003c6d6: 4620 mov r0, r4 -1003c6d8: f640 6138 movw r1, #3640 ; 0xe38 -1003c6dc: f04f 32ff mov.w r2, #4294967295 -1003c6e0: 4ba2 ldr r3, [pc, #648] ; (1003c96c ) -1003c6e2: f7fd fd31 bl 1003a148 -1003c6e6: 4620 mov r0, r4 -1003c6e8: f640 613c movw r1, #3644 ; 0xe3c -1003c6ec: f04f 32ff mov.w r2, #4294967295 -1003c6f0: 4b9f ldr r3, [pc, #636] ; (1003c970 ) -1003c6f2: f7fd fd29 bl 1003a148 -1003c6f6: 4620 mov r0, r4 -1003c6f8: f640 614c movw r1, #3660 ; 0xe4c -1003c6fc: f04f 32ff mov.w r2, #4294967295 -1003c700: 4b9c ldr r3, [pc, #624] ; (1003c974 ) -1003c702: f7fd fd21 bl 1003a148 -1003c706: 4620 mov r0, r4 -1003c708: f640 6148 movw r1, #3656 ; 0xe48 -1003c70c: f04f 32ff mov.w r2, #4294967295 -1003c710: f04f 4379 mov.w r3, #4177526784 ; 0xf9000000 -1003c714: f7fd fd18 bl 1003a148 -1003c718: f640 6148 movw r1, #3656 ; 0xe48 -1003c71c: f04f 32ff mov.w r2, #4294967295 -1003c720: f04f 4378 mov.w r3, #4160749568 ; 0xf8000000 -1003c724: 4620 mov r0, r4 -1003c726: f7fd fd0f bl 1003a148 -1003c72a: 200a movs r0, #10 -1003c72c: f7fd fd1d bl 1003a16a -1003c730: f44f 78c0 mov.w r8, #384 ; 0x180 -1003c734: 4620 mov r0, r4 -1003c736: f640 6128 movw r1, #3624 ; 0xe28 -1003c73a: f06f 02ff mvn.w r2, #255 ; 0xff -1003c73e: 2300 movs r3, #0 -1003c740: f7fd fd02 bl 1003a148 -1003c744: 4b81 ldr r3, [pc, #516] ; (1003c94c ) -1003c746: 4620 mov r0, r4 -1003c748: 2100 movs r1, #0 -1003c74a: 22df movs r2, #223 ; 0xdf -1003c74c: f8cd 8000 str.w r8, [sp] -1003c750: f7fd fd00 bl 1003a154 -1003c754: f640 61ac movw r1, #3756 ; 0xeac -1003c758: f04f 32ff mov.w r2, #4294967295 -1003c75c: 4620 mov r0, r4 -1003c75e: f7fd fcf6 bl 1003a14e -1003c762: f640 6194 movw r1, #3732 ; 0xe94 -1003c766: 4605 mov r5, r0 -1003c768: f04f 32ff mov.w r2, #4294967295 -1003c76c: 4620 mov r0, r4 -1003c76e: f7fd fcee bl 1003a14e -1003c772: f640 619c movw r1, #3740 ; 0xe9c -1003c776: 4684 mov ip, r0 -1003c778: f04f 32ff mov.w r2, #4294967295 -1003c77c: 4620 mov r0, r4 -1003c77e: f8cd c00c str.w ip, [sp, #12] -1003c782: f7fd fce4 bl 1003a14e -1003c786: f015 5580 ands.w r5, r5, #268435456 ; 0x10000000 -1003c78a: f8dd c00c ldr.w ip, [sp, #12] -1003c78e: f040 80d4 bne.w 1003c93a -1003c792: 4a79 ldr r2, [pc, #484] ; (1003c978 ) -1003c794: ea0c 0202 and.w r2, ip, r2 -1003c798: f1b2 7fa1 cmp.w r2, #21102592 ; 0x1420000 -1003c79c: f000 80cf beq.w 1003c93e -1003c7a0: f3c0 4309 ubfx r3, r0, #16, #10 -1003c7a4: 2b42 cmp r3, #66 ; 0x42 -1003c7a6: f000 80ca beq.w 1003c93e -1003c7aa: f042 4e00 orr.w lr, r2, #2147483648 ; 0x80000000 -1003c7ae: f44e 4ef8 orr.w lr, lr, #31744 ; 0x7c00 -1003c7b2: ea4e 0303 orr.w r3, lr, r3 -1003c7b6: 4620 mov r0, r4 -1003c7b8: f44f 6164 mov.w r1, #3648 ; 0xe40 -1003c7bc: f04f 32ff mov.w r2, #4294967295 -1003c7c0: f7fd fcc2 bl 1003a148 -1003c7c4: 462b mov r3, r5 -1003c7c6: 4620 mov r0, r4 -1003c7c8: f640 6128 movw r1, #3624 ; 0xe28 -1003c7cc: f06f 02ff mvn.w r2, #255 ; 0xff -1003c7d0: f7fd fcba bl 1003a148 -1003c7d4: 4629 mov r1, r5 -1003c7d6: 4620 mov r0, r4 -1003c7d8: 22ef movs r2, #239 ; 0xef -1003c7da: f44f 2300 mov.w r3, #524288 ; 0x80000 -1003c7de: 9600 str r6, [sp, #0] -1003c7e0: f7fd fcb8 bl 1003a154 -1003c7e4: 4629 mov r1, r5 -1003c7e6: 4620 mov r0, r4 -1003c7e8: 2230 movs r2, #48 ; 0x30 -1003c7ea: 4b58 ldr r3, [pc, #352] ; (1003c94c ) -1003c7ec: f8cd b000 str.w fp, [sp] -1003c7f0: f7fd fcb0 bl 1003a154 -1003c7f4: 4629 mov r1, r5 -1003c7f6: 4620 mov r0, r4 -1003c7f8: 2231 movs r2, #49 ; 0x31 -1003c7fa: 4b54 ldr r3, [pc, #336] ; (1003c94c ) -1003c7fc: f8cd a000 str.w sl, [sp] -1003c800: f7fd fca8 bl 1003a154 -1003c804: 4b5d ldr r3, [pc, #372] ; (1003c97c ) -1003c806: 4629 mov r1, r5 -1003c808: 9300 str r3, [sp, #0] -1003c80a: 4620 mov r0, r4 -1003c80c: 2232 movs r2, #50 ; 0x32 -1003c80e: 4b4f ldr r3, [pc, #316] ; (1003c94c ) -1003c810: f7fd fca0 bl 1003a154 -1003c814: 4629 mov r1, r5 -1003c816: 4620 mov r0, r4 -1003c818: 22df movs r2, #223 ; 0xdf -1003c81a: 4b4c ldr r3, [pc, #304] ; (1003c94c ) -1003c81c: f8cd 9000 str.w r9, [sp] -1003c820: f7fd fc98 bl 1003a154 -1003c824: 4b4b ldr r3, [pc, #300] ; (1003c954 ) -1003c826: 4629 mov r1, r5 -1003c828: 9300 str r3, [sp, #0] -1003c82a: 4620 mov r0, r4 -1003c82c: 2256 movs r2, #86 ; 0x56 -1003c82e: 4b47 ldr r3, [pc, #284] ; (1003c94c ) -1003c830: f7fd fc90 bl 1003a154 -1003c834: 4620 mov r0, r4 -1003c836: f640 6128 movw r1, #3624 ; 0xe28 -1003c83a: f06f 02ff mvn.w r2, #255 ; 0xff -1003c83e: 4b46 ldr r3, [pc, #280] ; (1003c958 ) -1003c840: f7fd fc82 bl 1003a148 -1003c844: 4620 mov r0, r4 -1003c846: f640 6144 movw r1, #3652 ; 0xe44 -1003c84a: f04f 32ff mov.w r2, #4294967295 -1003c84e: 4b44 ldr r3, [pc, #272] ; (1003c960 ) -1003c850: f7fd fc7a bl 1003a148 -1003c854: 4620 mov r0, r4 -1003c856: f44f 6163 mov.w r1, #3632 ; 0xe30 -1003c85a: f04f 32ff mov.w r2, #4294967295 -1003c85e: 4b42 ldr r3, [pc, #264] ; (1003c968 ) -1003c860: f7fd fc72 bl 1003a148 -1003c864: 4620 mov r0, r4 -1003c866: f640 6134 movw r1, #3636 ; 0xe34 -1003c86a: f04f 32ff mov.w r2, #4294967295 -1003c86e: 4b3d ldr r3, [pc, #244] ; (1003c964 ) -1003c870: f7fd fc6a bl 1003a148 -1003c874: 4620 mov r0, r4 -1003c876: f640 6138 movw r1, #3640 ; 0xe38 -1003c87a: f04f 32ff mov.w r2, #4294967295 -1003c87e: 4b40 ldr r3, [pc, #256] ; (1003c980 ) -1003c880: f7fd fc62 bl 1003a148 -1003c884: 4620 mov r0, r4 -1003c886: f640 613c movw r1, #3644 ; 0xe3c -1003c88a: f04f 32ff mov.w r2, #4294967295 -1003c88e: 4b3d ldr r3, [pc, #244] ; (1003c984 ) -1003c890: f7fd fc5a bl 1003a148 -1003c894: 4620 mov r0, r4 -1003c896: f640 614c movw r1, #3660 ; 0xe4c -1003c89a: f04f 32ff mov.w r2, #4294967295 -1003c89e: 4b3a ldr r3, [pc, #232] ; (1003c988 ) -1003c8a0: f7fd fc52 bl 1003a148 -1003c8a4: 4620 mov r0, r4 -1003c8a6: f640 6148 movw r1, #3656 ; 0xe48 -1003c8aa: f04f 32ff mov.w r2, #4294967295 -1003c8ae: f04f 4379 mov.w r3, #4177526784 ; 0xf9000000 -1003c8b2: f7fd fc49 bl 1003a148 -1003c8b6: f640 6148 movw r1, #3656 ; 0xe48 -1003c8ba: f04f 32ff mov.w r2, #4294967295 -1003c8be: f04f 4378 mov.w r3, #4160749568 ; 0xf8000000 -1003c8c2: 4620 mov r0, r4 -1003c8c4: f7fd fc40 bl 1003a148 -1003c8c8: 200a movs r0, #10 -1003c8ca: f7fd fc4e bl 1003a16a -1003c8ce: 462b mov r3, r5 -1003c8d0: 4620 mov r0, r4 -1003c8d2: f640 6128 movw r1, #3624 ; 0xe28 -1003c8d6: f06f 02ff mvn.w r2, #255 ; 0xff -1003c8da: f7fd fc35 bl 1003a148 -1003c8de: 4629 mov r1, r5 -1003c8e0: 4620 mov r0, r4 -1003c8e2: 22df movs r2, #223 ; 0xdf -1003c8e4: 4b19 ldr r3, [pc, #100] ; (1003c94c ) -1003c8e6: f8cd 8000 str.w r8, [sp] -1003c8ea: f7fd fc33 bl 1003a154 -1003c8ee: f8d7 3da8 ldr.w r3, [r7, #3496] ; 0xda8 -1003c8f2: 4629 mov r1, r5 -1003c8f4: 9300 str r3, [sp, #0] -1003c8f6: 4620 mov r0, r4 -1003c8f8: 4b14 ldr r3, [pc, #80] ; (1003c94c ) -1003c8fa: 2208 movs r2, #8 -1003c8fc: f7fd fc2a bl 1003a154 -1003c900: f640 61ac movw r1, #3756 ; 0xeac -1003c904: f04f 32ff mov.w r2, #4294967295 -1003c908: 4620 mov r0, r4 -1003c90a: f7fd fc20 bl 1003a14e -1003c90e: f640 61a4 movw r1, #3748 ; 0xea4 -1003c912: 4605 mov r5, r0 -1003c914: f04f 32ff mov.w r2, #4294967295 -1003c918: 4620 mov r0, r4 -1003c91a: f7fd fc18 bl 1003a14e -1003c91e: 012b lsls r3, r5, #4 -1003c920: d40f bmi.n 1003c942 -1003c922: f3c0 4009 ubfx r0, r0, #16, #10 -1003c926: f5b0 7f99 cmp.w r0, #306 ; 0x132 -1003c92a: d00a beq.n 1003c942 -1003c92c: f3c5 4509 ubfx r5, r5, #16, #10 -1003c930: 2d36 cmp r5, #54 ; 0x36 -1003c932: bf14 ite ne -1003c934: 2003 movne r0, #3 -1003c936: 4630 moveq r0, r6 -1003c938: e004 b.n 1003c944 -1003c93a: 2000 movs r0, #0 -1003c93c: e002 b.n 1003c944 -1003c93e: 4628 mov r0, r5 -1003c940: e000 b.n 1003c944 -1003c942: 4630 mov r0, r6 -1003c944: b005 add sp, #20 -1003c946: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1003c94a: bf00 nop -1003c94c: 000fffff .word 0x000fffff -1003c950: 000f1173 .word 0x000f1173 -1003c954: 0005100a .word 0x0005100a -1003c958: 00808000 .word 0x00808000 -1003c95c: 01007c00 .word 0x01007c00 -1003c960: 01004800 .word 0x01004800 -1003c964: 10008c1c .word 0x10008c1c -1003c968: 30008c1c .word 0x30008c1c -1003c96c: 82160fff .word 0x82160fff -1003c970: 28160000 .word 0x28160000 -1003c974: 00462911 .word 0x00462911 -1003c978: 03ff0000 .word 0x03ff0000 -1003c97c: 000f7ff2 .word 0x000f7ff2 -1003c980: 82160000 .word 0x82160000 -1003c984: 28160fff .word 0x28160fff -1003c988: 0046a911 .word 0x0046a911 - -1003c98c <_PHY_PathAFillIQKMatrix8195A>: -1003c98c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1003c990: 461e mov r6, r3 -1003c992: 2eff cmp r6, #255 ; 0xff -1003c994: f241 63c8 movw r3, #5832 ; 0x16c8 -1003c998: 4690 mov r8, r2 -1003c99a: 58c5 ldr r5, [r0, r3] -1003c99c: f000 80bf beq.w 1003cb1e <_PHY_PathAFillIQKMatrix8195A+0x192> -1003c9a0: 2900 cmp r1, #0 -1003c9a2: f000 80bc beq.w 1003cb1e <_PHY_PathAFillIQKMatrix8195A+0x192> -1003c9a6: f505 7400 add.w r4, r5, #512 ; 0x200 -1003c9aa: f44f 6148 mov.w r1, #3200 ; 0xc80 -1003c9ae: f04f 32ff mov.w r2, #4294967295 -1003c9b2: 4620 mov r0, r4 -1003c9b4: f7fd fbcb bl 1003a14e -1003c9b8: 0173 lsls r3, r6, #5 -1003c9ba: f858 2003 ldr.w r2, [r8, r3] -1003c9be: 0d87 lsrs r7, r0, #22 -1003c9c0: 0591 lsls r1, r2, #22 -1003c9c2: bf44 itt mi -1003c9c4: ea6f 5282 mvnmi.w r2, r2, lsl #22 -1003c9c8: ea6f 5292 mvnmi.w r2, r2, lsr #22 -1003c9cc: eb08 0603 add.w r6, r8, r3 -1003c9d0: fb07 f802 mul.w r8, r7, r2 -1003c9d4: 4620 mov r0, r4 -1003c9d6: ea4f 2318 mov.w r3, r8, lsr #8 -1003c9da: f44f 6148 mov.w r1, #3200 ; 0xc80 -1003c9de: f240 32ff movw r2, #1023 ; 0x3ff -1003c9e2: f7fd fbb1 bl 1003a148 -1003c9e6: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 -1003c9ea: f3c8 13c0 ubfx r3, r8, #7, #1 -1003c9ee: 4620 mov r0, r4 -1003c9f0: f640 414c movw r1, #3148 ; 0xc4c -1003c9f4: f7fd fba8 bl 1003a148 -1003c9f8: 6873 ldr r3, [r6, #4] -1003c9fa: 4620 mov r0, r4 -1003c9fc: 059a lsls r2, r3, #22 -1003c9fe: bf44 itt mi -1003ca00: ea6f 5383 mvnmi.w r3, r3, lsl #22 -1003ca04: ea6f 5393 mvnmi.w r3, r3, lsr #22 -1003ca08: 435f muls r7, r3 -1003ca0a: ea4f 2817 mov.w r8, r7, lsr #8 -1003ca0e: f3c8 1383 ubfx r3, r8, #6, #4 -1003ca12: f640 4194 movw r1, #3220 ; 0xc94 -1003ca16: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 -1003ca1a: f7fd fb95 bl 1003a148 -1003ca1e: f640 4194 movw r1, #3220 ; 0xc94 -1003ca22: f8c5 1d48 str.w r1, [r5, #3400] ; 0xd48 -1003ca26: f04f 32ff mov.w r2, #4294967295 -1003ca2a: 4620 mov r0, r4 -1003ca2c: f7fd fb8f bl 1003a14e -1003ca30: f008 033f and.w r3, r8, #63 ; 0x3f -1003ca34: f8c5 0d4c str.w r0, [r5, #3404] ; 0xd4c -1003ca38: f44f 6148 mov.w r1, #3200 ; 0xc80 -1003ca3c: 4620 mov r0, r4 -1003ca3e: f44f 127c mov.w r2, #4128768 ; 0x3f0000 -1003ca42: f7fd fb81 bl 1003a148 -1003ca46: f44f 6148 mov.w r1, #3200 ; 0xc80 -1003ca4a: f8c5 1d50 str.w r1, [r5, #3408] ; 0xd50 -1003ca4e: f04f 32ff mov.w r2, #4294967295 -1003ca52: 4620 mov r0, r4 -1003ca54: f7fd fb7b bl 1003a14e -1003ca58: f3c7 13c0 ubfx r3, r7, #7, #1 -1003ca5c: f8c5 0d54 str.w r0, [r5, #3412] ; 0xd54 -1003ca60: f640 414c movw r1, #3148 ; 0xc4c -1003ca64: 4620 mov r0, r4 -1003ca66: f04f 5200 mov.w r2, #536870912 ; 0x20000000 -1003ca6a: f7fd fb6d bl 1003a148 -1003ca6e: f640 414c movw r1, #3148 ; 0xc4c -1003ca72: f8c5 1d58 str.w r1, [r5, #3416] ; 0xd58 -1003ca76: 4620 mov r0, r4 -1003ca78: f04f 32ff mov.w r2, #4294967295 -1003ca7c: f7fd fb67 bl 1003a14e -1003ca80: f89d 3018 ldrb.w r3, [sp, #24] -1003ca84: f8c5 0d5c str.w r0, [r5, #3420] ; 0xd5c -1003ca88: b1bb cbz r3, 1003caba <_PHY_PathAFillIQKMatrix8195A+0x12e> -1003ca8a: f44f 614a mov.w r1, #3232 ; 0xca0 -1003ca8e: f8c5 1d80 str.w r1, [r5, #3456] ; 0xd80 -1003ca92: f04f 32ff mov.w r2, #4294967295 -1003ca96: 4620 mov r0, r4 -1003ca98: f7fd fb59 bl 1003a14e -1003ca9c: f640 4114 movw r1, #3092 ; 0xc14 -1003caa0: f8c5 0d84 str.w r0, [r5, #3460] ; 0xd84 -1003caa4: f8c5 1d78 str.w r1, [r5, #3448] ; 0xd78 -1003caa8: 4620 mov r0, r4 -1003caaa: f04f 32ff mov.w r2, #4294967295 -1003caae: f7fd fb4e bl 1003a14e -1003cab2: f8c5 0d7c str.w r0, [r5, #3452] ; 0xd7c -1003cab6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1003caba: 4620 mov r0, r4 -1003cabc: f640 4114 movw r1, #3092 ; 0xc14 -1003cac0: f240 32ff movw r2, #1023 ; 0x3ff -1003cac4: 68b3 ldr r3, [r6, #8] -1003cac6: f7fd fb3f bl 1003a148 -1003caca: 68f3 ldr r3, [r6, #12] -1003cacc: 4620 mov r0, r4 -1003cace: f003 033f and.w r3, r3, #63 ; 0x3f -1003cad2: f640 4114 movw r1, #3092 ; 0xc14 -1003cad6: f44f 427c mov.w r2, #64512 ; 0xfc00 -1003cada: f7fd fb35 bl 1003a148 -1003cade: f640 4114 movw r1, #3092 ; 0xc14 -1003cae2: f8c5 1d78 str.w r1, [r5, #3448] ; 0xd78 -1003cae6: f04f 32ff mov.w r2, #4294967295 -1003caea: 4620 mov r0, r4 -1003caec: f7fd fb2f bl 1003a14e -1003caf0: 68f3 ldr r3, [r6, #12] -1003caf2: f8c5 0d7c str.w r0, [r5, #3452] ; 0xd7c -1003caf6: f44f 614a mov.w r1, #3232 ; 0xca0 -1003cafa: 4620 mov r0, r4 -1003cafc: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 -1003cb00: f3c3 1383 ubfx r3, r3, #6, #4 -1003cb04: f7fd fb20 bl 1003a148 -1003cb08: f44f 614a mov.w r1, #3232 ; 0xca0 -1003cb0c: f8c5 1d80 str.w r1, [r5, #3456] ; 0xd80 -1003cb10: 4620 mov r0, r4 -1003cb12: f04f 32ff mov.w r2, #4294967295 -1003cb16: f7fd fb1a bl 1003a14e -1003cb1a: f8c5 0d84 str.w r0, [r5, #3460] ; 0xd84 -1003cb1e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1003cb22 <_PHY_PathBFillIQKMatrix8195A>: -1003cb22: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1003cb26: 461e mov r6, r3 -1003cb28: 2eff cmp r6, #255 ; 0xff -1003cb2a: f241 63c8 movw r3, #5832 ; 0x16c8 -1003cb2e: 4617 mov r7, r2 -1003cb30: 58c5 ldr r5, [r0, r3] -1003cb32: f000 80b2 beq.w 1003cc9a <_PHY_PathBFillIQKMatrix8195A+0x178> -1003cb36: 2900 cmp r1, #0 -1003cb38: f000 80af beq.w 1003cc9a <_PHY_PathBFillIQKMatrix8195A+0x178> -1003cb3c: f505 7400 add.w r4, r5, #512 ; 0x200 -1003cb40: f04f 32ff mov.w r2, #4294967295 -1003cb44: f640 4188 movw r1, #3208 ; 0xc88 -1003cb48: 4620 mov r0, r4 -1003cb4a: f7fd fb00 bl 1003a14e -1003cb4e: eb07 1746 add.w r7, r7, r6, lsl #5 -1003cb52: 693e ldr r6, [r7, #16] -1003cb54: ea4f 5890 mov.w r8, r0, lsr #22 -1003cb58: 05b2 lsls r2, r6, #22 -1003cb5a: bf44 itt mi -1003cb5c: ea6f 5686 mvnmi.w r6, r6, lsl #22 -1003cb60: ea6f 5696 mvnmi.w r6, r6, lsr #22 -1003cb64: fb08 f606 mul.w r6, r8, r6 -1003cb68: 4620 mov r0, r4 -1003cb6a: 0a33 lsrs r3, r6, #8 -1003cb6c: f640 4188 movw r1, #3208 ; 0xc88 -1003cb70: f240 32ff movw r2, #1023 ; 0x3ff -1003cb74: f7fd fae8 bl 1003a148 -1003cb78: f3c6 13c0 ubfx r3, r6, #7, #1 -1003cb7c: 4620 mov r0, r4 -1003cb7e: f640 414c movw r1, #3148 ; 0xc4c -1003cb82: f04f 6200 mov.w r2, #134217728 ; 0x8000000 -1003cb86: f7fd fadf bl 1003a148 -1003cb8a: 6979 ldr r1, [r7, #20] -1003cb8c: 4620 mov r0, r4 -1003cb8e: 058b lsls r3, r1, #22 -1003cb90: bf44 itt mi -1003cb92: ea6f 5181 mvnmi.w r1, r1, lsl #22 -1003cb96: ea6f 5191 mvnmi.w r1, r1, lsr #22 -1003cb9a: fb08 f601 mul.w r6, r8, r1 -1003cb9e: ea4f 2816 mov.w r8, r6, lsr #8 -1003cba2: f3c8 1383 ubfx r3, r8, #6, #4 -1003cba6: f640 419c movw r1, #3228 ; 0xc9c -1003cbaa: f04f 4270 mov.w r2, #4026531840 ; 0xf0000000 -1003cbae: f7fd facb bl 1003a148 -1003cbb2: f640 419c movw r1, #3228 ; 0xc9c -1003cbb6: f8c5 1d60 str.w r1, [r5, #3424] ; 0xd60 -1003cbba: f04f 32ff mov.w r2, #4294967295 -1003cbbe: 4620 mov r0, r4 -1003cbc0: f7fd fac5 bl 1003a14e -1003cbc4: f008 033f and.w r3, r8, #63 ; 0x3f -1003cbc8: f8c5 0d64 str.w r0, [r5, #3428] ; 0xd64 -1003cbcc: f640 4188 movw r1, #3208 ; 0xc88 -1003cbd0: 4620 mov r0, r4 -1003cbd2: f44f 127c mov.w r2, #4128768 ; 0x3f0000 -1003cbd6: f7fd fab7 bl 1003a148 -1003cbda: f640 4188 movw r1, #3208 ; 0xc88 -1003cbde: f8c5 1d68 str.w r1, [r5, #3432] ; 0xd68 -1003cbe2: f04f 32ff mov.w r2, #4294967295 -1003cbe6: 4620 mov r0, r4 -1003cbe8: f7fd fab1 bl 1003a14e -1003cbec: f3c6 13c0 ubfx r3, r6, #7, #1 -1003cbf0: f8c5 0d6c str.w r0, [r5, #3436] ; 0xd6c -1003cbf4: f640 414c movw r1, #3148 ; 0xc4c -1003cbf8: 4620 mov r0, r4 -1003cbfa: f04f 7200 mov.w r2, #33554432 ; 0x2000000 -1003cbfe: f7fd faa3 bl 1003a148 -1003cc02: f640 414c movw r1, #3148 ; 0xc4c -1003cc06: f8c5 1d70 str.w r1, [r5, #3440] ; 0xd70 -1003cc0a: 4620 mov r0, r4 -1003cc0c: f04f 32ff mov.w r2, #4294967295 -1003cc10: f7fd fa9d bl 1003a14e -1003cc14: f89d 3018 ldrb.w r3, [sp, #24] -1003cc18: f8c5 0d74 str.w r0, [r5, #3444] ; 0xd74 -1003cc1c: b15b cbz r3, 1003cc36 <_PHY_PathBFillIQKMatrix8195A+0x114> -1003cc1e: f640 411c movw r1, #3100 ; 0xc1c -1003cc22: f8c5 1d88 str.w r1, [r5, #3464] ; 0xd88 -1003cc26: 4620 mov r0, r4 -1003cc28: f04f 32ff mov.w r2, #4294967295 -1003cc2c: f7fd fa8f bl 1003a14e -1003cc30: f8c5 0d8c str.w r0, [r5, #3468] ; 0xd8c -1003cc34: e026 b.n 1003cc84 <_PHY_PathBFillIQKMatrix8195A+0x162> -1003cc36: 4620 mov r0, r4 -1003cc38: f640 411c movw r1, #3100 ; 0xc1c -1003cc3c: f240 32ff movw r2, #1023 ; 0x3ff -1003cc40: 69bb ldr r3, [r7, #24] -1003cc42: f7fd fa81 bl 1003a148 -1003cc46: 69fb ldr r3, [r7, #28] -1003cc48: 4620 mov r0, r4 -1003cc4a: f003 033f and.w r3, r3, #63 ; 0x3f -1003cc4e: f640 411c movw r1, #3100 ; 0xc1c -1003cc52: f44f 427c mov.w r2, #64512 ; 0xfc00 -1003cc56: f7fd fa77 bl 1003a148 -1003cc5a: f640 411c movw r1, #3100 ; 0xc1c -1003cc5e: f8c5 1d88 str.w r1, [r5, #3464] ; 0xd88 -1003cc62: f04f 32ff mov.w r2, #4294967295 -1003cc66: 4620 mov r0, r4 -1003cc68: f7fd fa71 bl 1003a14e -1003cc6c: 69fb ldr r3, [r7, #28] -1003cc6e: f8c5 0d8c str.w r0, [r5, #3468] ; 0xd8c -1003cc72: f640 4178 movw r1, #3192 ; 0xc78 -1003cc76: 4620 mov r0, r4 -1003cc78: f44f 4270 mov.w r2, #61440 ; 0xf000 -1003cc7c: f3c3 1383 ubfx r3, r3, #6, #4 -1003cc80: f7fd fa62 bl 1003a148 -1003cc84: f640 4178 movw r1, #3192 ; 0xc78 -1003cc88: f8c5 1d90 str.w r1, [r5, #3472] ; 0xd90 -1003cc8c: 4620 mov r0, r4 -1003cc8e: f04f 32ff mov.w r2, #4294967295 -1003cc92: f7fd fa5c bl 1003a14e -1003cc96: f8c5 0d94 str.w r0, [r5, #3476] ; 0xd94 -1003cc9a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1003cc9e <_PHY_SaveADDARegisters8195A>: -1003cc9e: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1003cca2: 461f mov r7, r3 -1003cca4: f241 63c8 movw r3, #5832 ; 0x16c8 -1003cca8: 58c3 ldr r3, [r0, r3] -1003ccaa: 460d mov r5, r1 -1003ccac: 4616 mov r6, r2 -1003ccae: f503 7800 add.w r8, r3, #512 ; 0x200 -1003ccb2: 2400 movs r4, #0 -1003ccb4: 42bc cmp r4, r7 -1003ccb6: d00a beq.n 1003ccce <_PHY_SaveADDARegisters8195A+0x30> -1003ccb8: f855 1024 ldr.w r1, [r5, r4, lsl #2] -1003ccbc: 4640 mov r0, r8 -1003ccbe: f04f 32ff mov.w r2, #4294967295 -1003ccc2: f7fd fa44 bl 1003a14e -1003ccc6: f846 0024 str.w r0, [r6, r4, lsl #2] -1003ccca: 3401 adds r4, #1 -1003cccc: e7f2 b.n 1003ccb4 <_PHY_SaveADDARegisters8195A+0x16> -1003ccce: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1003ccd2 <_PHY_SaveMACRegisters8195A>: -1003ccd2: b5f8 push {r3, r4, r5, r6, r7, lr} -1003ccd4: f241 63c8 movw r3, #5832 ; 0x16c8 -1003ccd8: 58c7 ldr r7, [r0, r3] -1003ccda: 460e mov r6, r1 -1003ccdc: 4615 mov r5, r2 -1003ccde: f507 7700 add.w r7, r7, #512 ; 0x200 -1003cce2: 2400 movs r4, #0 -1003cce4: 5931 ldr r1, [r6, r4] -1003cce6: 4638 mov r0, r7 -1003cce8: f7fd fa1c bl 1003a124 -1003ccec: 5128 str r0, [r5, r4] -1003ccee: 3404 adds r4, #4 -1003ccf0: 2c0c cmp r4, #12 -1003ccf2: d1f7 bne.n 1003cce4 <_PHY_SaveMACRegisters8195A+0x12> -1003ccf4: 4638 mov r0, r7 -1003ccf6: 68f1 ldr r1, [r6, #12] -1003ccf8: f7fd fa17 bl 1003a12a -1003ccfc: 60e8 str r0, [r5, #12] -1003ccfe: bdf8 pop {r3, r4, r5, r6, r7, pc} - -1003cd00 <_PHY_ReloadADDARegisters8195A>: -1003cd00: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1003cd04: 461f mov r7, r3 -1003cd06: f241 63c8 movw r3, #5832 ; 0x16c8 -1003cd0a: 58c3 ldr r3, [r0, r3] -1003cd0c: 460d mov r5, r1 -1003cd0e: 4616 mov r6, r2 -1003cd10: f503 7800 add.w r8, r3, #512 ; 0x200 -1003cd14: 2400 movs r4, #0 -1003cd16: 42bc cmp r4, r7 -1003cd18: d00a beq.n 1003cd30 <_PHY_ReloadADDARegisters8195A+0x30> -1003cd1a: f855 1024 ldr.w r1, [r5, r4, lsl #2] -1003cd1e: f856 3024 ldr.w r3, [r6, r4, lsl #2] -1003cd22: 4640 mov r0, r8 -1003cd24: f04f 32ff mov.w r2, #4294967295 -1003cd28: f7fd fa0e bl 1003a148 -1003cd2c: 3401 adds r4, #1 -1003cd2e: e7f2 b.n 1003cd16 <_PHY_ReloadADDARegisters8195A+0x16> -1003cd30: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -1003cd34 <_PHY_ReloadMACRegisters8195A>: -1003cd34: b5f8 push {r3, r4, r5, r6, r7, lr} -1003cd36: f241 63c8 movw r3, #5832 ; 0x16c8 -1003cd3a: 58c7 ldr r7, [r0, r3] -1003cd3c: 460e mov r6, r1 -1003cd3e: 4615 mov r5, r2 -1003cd40: f507 7700 add.w r7, r7, #512 ; 0x200 -1003cd44: 2400 movs r4, #0 -1003cd46: 5931 ldr r1, [r6, r4] -1003cd48: 5d2a ldrb r2, [r5, r4] -1003cd4a: 4638 mov r0, r7 -1003cd4c: 3404 adds r4, #4 -1003cd4e: f7fd f9ef bl 1003a130 -1003cd52: 2c0c cmp r4, #12 -1003cd54: d1f7 bne.n 1003cd46 <_PHY_ReloadMACRegisters8195A+0x12> -1003cd56: 4638 mov r0, r7 -1003cd58: 68f1 ldr r1, [r6, #12] -1003cd5a: 68ea ldr r2, [r5, #12] -1003cd5c: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -1003cd60: f7fd b9ec b.w 1003a13c - -1003cd64 <_PHY_PathADDAOn8195A>: -1003cd64: f241 62c8 movw r2, #5832 ; 0x16c8 -1003cd68: b570 push {r4, r5, r6, lr} -1003cd6a: 5885 ldr r5, [r0, r2] -1003cd6c: 460e mov r6, r1 -1003cd6e: f505 7500 add.w r5, r5, #512 ; 0x200 -1003cd72: b933 cbnz r3, 1003cd82 <_PHY_PathADDAOn8195A+0x1e> -1003cd74: 4628 mov r0, r5 -1003cd76: 6809 ldr r1, [r1, #0] -1003cd78: f04f 32ff mov.w r2, #4294967295 -1003cd7c: 4b07 ldr r3, [pc, #28] ; (1003cd9c <_PHY_PathADDAOn8195A+0x38>) -1003cd7e: f7fd f9e3 bl 1003a148 -1003cd82: 2400 movs r4, #0 -1003cd84: 1933 adds r3, r6, r4 -1003cd86: 6859 ldr r1, [r3, #4] -1003cd88: 4628 mov r0, r5 -1003cd8a: f04f 32ff mov.w r2, #4294967295 -1003cd8e: 4b03 ldr r3, [pc, #12] ; (1003cd9c <_PHY_PathADDAOn8195A+0x38>) -1003cd90: 3404 adds r4, #4 -1003cd92: f7fd f9d9 bl 1003a148 -1003cd96: 2c3c cmp r4, #60 ; 0x3c -1003cd98: d1f4 bne.n 1003cd84 <_PHY_PathADDAOn8195A+0x20> -1003cd9a: bd70 pop {r4, r5, r6, pc} -1003cd9c: 03c00014 .word 0x03c00014 - -1003cda0 <_PHY_MACSettingCalibration8195A>: -1003cda0: f241 63c8 movw r3, #5832 ; 0x16c8 -1003cda4: b570 push {r4, r5, r6, lr} -1003cda6: 58c5 ldr r5, [r0, r3] -1003cda8: 460c mov r4, r1 -1003cdaa: f505 7500 add.w r5, r5, #512 ; 0x200 -1003cdae: 4616 mov r6, r2 -1003cdb0: 4628 mov r0, r5 -1003cdb2: 6809 ldr r1, [r1, #0] -1003cdb4: 223f movs r2, #63 ; 0x3f -1003cdb6: f7fd f9bb bl 1003a130 -1003cdba: 6872 ldr r2, [r6, #4] -1003cdbc: 4628 mov r0, r5 -1003cdbe: 6861 ldr r1, [r4, #4] -1003cdc0: f002 02f7 and.w r2, r2, #247 ; 0xf7 -1003cdc4: f7fd f9b4 bl 1003a130 -1003cdc8: 68b2 ldr r2, [r6, #8] -1003cdca: 4628 mov r0, r5 -1003cdcc: 68a1 ldr r1, [r4, #8] -1003cdce: f002 02f7 and.w r2, r2, #247 ; 0xf7 -1003cdd2: f7fd f9ad bl 1003a130 -1003cdd6: 68f2 ldr r2, [r6, #12] -1003cdd8: 4628 mov r0, r5 -1003cdda: 68e1 ldr r1, [r4, #12] -1003cddc: f002 02df and.w r2, r2, #223 ; 0xdf -1003cde0: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1003cde4: f7fd b9a4 b.w 1003a130 - -1003cde8 <_PHY_PIModeSwitch8195A>: -1003cde8: b570 push {r4, r5, r6, lr} -1003cdea: f241 63c8 movw r3, #5832 ; 0x16c8 -1003cdee: 58c5 ldr r5, [r0, r3] -1003cdf0: 2900 cmp r1, #0 -1003cdf2: bf0c ite eq -1003cdf4: f04f 7480 moveq.w r4, #16777216 ; 0x1000000 -1003cdf8: f04f 2401 movne.w r4, #16777472 ; 0x1000100 -1003cdfc: f505 7500 add.w r5, r5, #512 ; 0x200 -1003ce00: 4628 mov r0, r5 -1003ce02: 4623 mov r3, r4 -1003ce04: f44f 6102 mov.w r1, #2080 ; 0x820 -1003ce08: f04f 32ff mov.w r2, #4294967295 -1003ce0c: f7fd f99c bl 1003a148 -1003ce10: 4628 mov r0, r5 -1003ce12: 4623 mov r3, r4 -1003ce14: f640 0128 movw r1, #2088 ; 0x828 -1003ce18: f04f 32ff mov.w r2, #4294967295 -1003ce1c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1003ce20: f7fd b992 b.w 1003a148 - -1003ce24 : -1003ce24: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} -1003ce28: 4691 mov r9, r2 -1003ce2a: 4a4a ldr r2, [pc, #296] ; (1003cf54 ) -1003ce2c: ea4f 1849 mov.w r8, r9, lsl #5 -1003ce30: 8812 ldrh r2, [r2, #0] -1003ce32: eb01 0408 add.w r4, r1, r8 -1003ce36: eb01 1c43 add.w ip, r1, r3, lsl #5 -1003ce3a: 2000 movs r0, #0 -1003ce3c: f8ad 2004 strh.w r2, [sp, #4] -1003ce40: 4666 mov r6, ip -1003ce42: 4625 mov r5, r4 -1003ce44: 4602 mov r2, r0 -1003ce46: f012 0f01 tst.w r2, #1 -1003ce4a: ea4f 0a82 mov.w sl, r2, lsl #2 -1003ce4e: f854 7022 ldr.w r7, [r4, r2, lsl #2] -1003ce52: bf08 it eq -1003ce54: f85c a022 ldreq.w sl, [ip, r2, lsl #2] -1003ce58: d00f beq.n 1003ce7a -1003ce5a: f417 7f00 tst.w r7, #512 ; 0x200 -1003ce5e: f85c a00a ldr.w sl, [ip, sl] -1003ce62: bf1c itt ne -1003ce64: ea6f 5787 mvnne.w r7, r7, lsl #22 -1003ce68: ea6f 5797 mvnne.w r7, r7, lsr #22 -1003ce6c: f41a 7f00 tst.w sl, #512 ; 0x200 -1003ce70: bf1c itt ne -1003ce72: ea6f 5a8a mvnne.w sl, sl, lsl #22 -1003ce76: ea6f 5a9a mvnne.w sl, sl, lsr #22 -1003ce7a: 4557 cmp r7, sl -1003ce7c: bfcc ite gt -1003ce7e: ebca 0707 rsbgt r7, sl, r7 -1003ce82: ebc7 070a rsble r7, r7, sl -1003ce86: 2f05 cmp r7, #5 -1003ce88: d924 bls.n 1003ced4 -1003ce8a: f022 0704 bic.w r7, r2, #4 -1003ce8e: 2f02 cmp r7, #2 -1003ce90: d11d bne.n 1003cece -1003ce92: b9e0 cbnz r0, 1003cece -1003ce94: e895 0480 ldmia.w r5, {r7, sl} -1003ce98: 44ba add sl, r7 -1003ce9a: f1ba 0f00 cmp.w sl, #0 -1003ce9e: d106 bne.n 1003ceae -1003cea0: f10d 0a08 add.w sl, sp, #8 -1003cea4: eb0a 0792 add.w r7, sl, r2, lsr #2 -1003cea8: f807 3c04 strb.w r3, [r7, #-4] -1003ceac: e012 b.n 1003ced4 -1003ceae: e896 0480 ldmia.w r6, {r7, sl} -1003ceb2: 44ba add sl, r7 -1003ceb4: f1ba 0f00 cmp.w sl, #0 -1003ceb8: d106 bne.n 1003cec8 -1003ceba: f10d 0a08 add.w sl, sp, #8 -1003cebe: eb0a 0792 add.w r7, sl, r2, lsr #2 -1003cec2: f807 9c04 strb.w r9, [r7, #-4] -1003cec6: e005 b.n 1003ced4 -1003cec8: 2001 movs r0, #1 -1003ceca: 4090 lsls r0, r2 -1003cecc: e002 b.n 1003ced4 -1003cece: 2701 movs r7, #1 -1003ced0: 4097 lsls r7, r2 -1003ced2: 4338 orrs r0, r7 -1003ced4: 3201 adds r2, #1 -1003ced6: 2a08 cmp r2, #8 -1003ced8: f106 0604 add.w r6, r6, #4 -1003cedc: f105 0504 add.w r5, r5, #4 -1003cee0: d1b1 bne.n 1003ce46 -1003cee2: b9b8 cbnz r0, 1003cf14 -1003cee4: f89d 3004 ldrb.w r3, [sp, #4] -1003cee8: 2bff cmp r3, #255 ; 0xff -1003ceea: d006 beq.n 1003cefa -1003ceec: 015b lsls r3, r3, #5 -1003ceee: 18ca adds r2, r1, r3 -1003cef0: 58cb ldr r3, [r1, r3] -1003cef2: 660b str r3, [r1, #96] ; 0x60 -1003cef4: 6853 ldr r3, [r2, #4] -1003cef6: 664b str r3, [r1, #100] ; 0x64 -1003cef8: e000 b.n 1003cefc -1003cefa: 2001 movs r0, #1 -1003cefc: f89d 3005 ldrb.w r3, [sp, #5] -1003cf00: 2bff cmp r3, #255 ; 0xff -1003cf02: d023 beq.n 1003cf4c -1003cf04: eb01 1343 add.w r3, r1, r3, lsl #5 -1003cf08: 691a ldr r2, [r3, #16] -1003cf0a: 670a str r2, [r1, #112] ; 0x70 -1003cf0c: 695b ldr r3, [r3, #20] -1003cf0e: 674b str r3, [r1, #116] ; 0x74 -1003cf10: 2000 movs r0, #0 -1003cf12: e01b b.n 1003cf4c -1003cf14: 0783 lsls r3, r0, #30 -1003cf16: d104 bne.n 1003cf22 -1003cf18: f851 3008 ldr.w r3, [r1, r8] -1003cf1c: 660b str r3, [r1, #96] ; 0x60 -1003cf1e: 6863 ldr r3, [r4, #4] -1003cf20: 664b str r3, [r1, #100] ; 0x64 -1003cf22: f010 0f0c tst.w r0, #12 -1003cf26: d103 bne.n 1003cf30 -1003cf28: 68a3 ldr r3, [r4, #8] -1003cf2a: 668b str r3, [r1, #104] ; 0x68 -1003cf2c: 68e3 ldr r3, [r4, #12] -1003cf2e: 66cb str r3, [r1, #108] ; 0x6c -1003cf30: f010 0f30 tst.w r0, #48 ; 0x30 -1003cf34: d103 bne.n 1003cf3e -1003cf36: 6923 ldr r3, [r4, #16] -1003cf38: 670b str r3, [r1, #112] ; 0x70 -1003cf3a: 6963 ldr r3, [r4, #20] -1003cf3c: 674b str r3, [r1, #116] ; 0x74 -1003cf3e: f010 00c0 ands.w r0, r0, #192 ; 0xc0 -1003cf42: d1e5 bne.n 1003cf10 -1003cf44: 69a3 ldr r3, [r4, #24] -1003cf46: 678b str r3, [r1, #120] ; 0x78 -1003cf48: 69e3 ldr r3, [r4, #28] -1003cf4a: 67cb str r3, [r1, #124] ; 0x7c -1003cf4c: b002 add sp, #8 -1003cf4e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1003cf52: bf00 nop -1003cf54: 10044454 .word 0x10044454 - -1003cf58 : -1003cf58: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1003cf5c: 4698 mov r8, r3 -1003cf5e: f241 63c8 movw r3, #5832 ; 0x16c8 -1003cf62: 58c6 ldr r6, [r0, r3] -1003cf64: b0a5 sub sp, #148 ; 0x94 -1003cf66: f506 7400 add.w r4, r6, #512 ; 0x200 -1003cf6a: 4605 mov r5, r0 -1003cf6c: 4689 mov r9, r1 -1003cf6e: 4617 mov r7, r2 -1003cf70: f44f 6145 mov.w r1, #3152 ; 0xc50 -1003cf74: 22ff movs r2, #255 ; 0xff -1003cf76: 4620 mov r0, r4 -1003cf78: f7fd f8e9 bl 1003a14e -1003cf7c: f640 4158 movw r1, #3160 ; 0xc58 -1003cf80: 9004 str r0, [sp, #16] -1003cf82: 22ff movs r2, #255 ; 0xff -1003cf84: 4620 mov r0, r4 -1003cf86: f7fd f8e2 bl 1003a14e -1003cf8a: f8df e354 ldr.w lr, [pc, #852] ; 1003d2e0 -1003cf8e: f10d 0c50 add.w ip, sp, #80 ; 0x50 -1003cf92: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} -1003cf96: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} -1003cf9a: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} -1003cf9e: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} -1003cfa2: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} -1003cfa6: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} -1003cfaa: e89e 000f ldmia.w lr, {r0, r1, r2, r3} -1003cfae: f10d 0a1c add.w sl, sp, #28 -1003cfb2: e88c 000f stmia.w ip, {r0, r1, r2, r3} -1003cfb6: f10e 0310 add.w r3, lr, #16 -1003cfba: f10d 0c2c add.w ip, sp, #44 ; 0x2c -1003cfbe: f10e 0e20 add.w lr, lr, #32 -1003cfc2: cb0f ldmia r3, {r0, r1, r2, r3} -1003cfc4: e88a 000f stmia.w sl, {r0, r1, r2, r3} -1003cfc8: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} -1003cfcc: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} -1003cfd0: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} -1003cfd4: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} -1003cfd8: f8de 3000 ldr.w r3, [lr] -1003cfdc: f8cc 3000 str.w r3, [ip] -1003cfe0: b99f cbnz r7, 1003d00a -1003cfe2: 2310 movs r3, #16 -1003cfe4: 4628 mov r0, r5 -1003cfe6: a914 add r1, sp, #80 ; 0x50 -1003cfe8: f506 624b add.w r2, r6, #3248 ; 0xcb0 -1003cfec: f7ff fe57 bl 1003cc9e <_PHY_SaveADDARegisters8195A> -1003cff0: 4628 mov r0, r5 -1003cff2: 4651 mov r1, sl -1003cff4: f506 624f add.w r2, r6, #3312 ; 0xcf0 -1003cff8: f7ff fe6b bl 1003ccd2 <_PHY_SaveMACRegisters8195A> -1003cffc: 4628 mov r0, r5 -1003cffe: a90b add r1, sp, #44 ; 0x2c -1003d000: f606 5224 addw r2, r6, #3364 ; 0xd24 -1003d004: 2309 movs r3, #9 -1003d006: f7ff fe4a bl 1003cc9e <_PHY_SaveADDARegisters8195A> -1003d00a: 4628 mov r0, r5 -1003d00c: a914 add r1, sp, #80 ; 0x50 -1003d00e: 2201 movs r2, #1 -1003d010: 4643 mov r3, r8 -1003d012: f7ff fea7 bl 1003cd64 <_PHY_PathADDAOn8195A> -1003d016: b947 cbnz r7, 1003d02a -1003d018: 4620 mov r0, r4 -1003d01a: f44f 6102 mov.w r1, #2080 ; 0x820 -1003d01e: f44f 7280 mov.w r2, #256 ; 0x100 -1003d022: f7fd f894 bl 1003a14e -1003d026: f886 09b8 strb.w r0, [r6, #2488] ; 0x9b8 -1003d02a: f896 39b8 ldrb.w r3, [r6, #2488] ; 0x9b8 -1003d02e: b91b cbnz r3, 1003d038 -1003d030: 4628 mov r0, r5 -1003d032: 2101 movs r1, #1 -1003d034: f7ff fed8 bl 1003cde8 <_PHY_PIModeSwitch8195A> -1003d038: f640 1148 movw r1, #2376 ; 0x948 -1003d03c: f04f 32ff mov.w r2, #4294967295 -1003d040: 4620 mov r0, r4 -1003d042: f7fd f884 bl 1003a14e -1003d046: 2100 movs r1, #0 -1003d048: 22b0 movs r2, #176 ; 0xb0 -1003d04a: 4b9a ldr r3, [pc, #616] ; (1003d2b4 ) -1003d04c: 4683 mov fp, r0 -1003d04e: 4620 mov r0, r4 -1003d050: f7fd f883 bl 1003a15a -1003d054: f44f 6100 mov.w r1, #2048 ; 0x800 -1003d058: 9005 str r0, [sp, #20] -1003d05a: f04f 7280 mov.w r2, #16777216 ; 0x1000000 -1003d05e: 4620 mov r0, r4 -1003d060: 2300 movs r3, #0 -1003d062: f7fd f871 bl 1003a148 -1003d066: 4620 mov r0, r4 -1003d068: f640 4104 movw r1, #3076 ; 0xc04 -1003d06c: f04f 32ff mov.w r2, #4294967295 -1003d070: 4b91 ldr r3, [pc, #580] ; (1003d2b8 ) -1003d072: f7fd f869 bl 1003a148 -1003d076: 4620 mov r0, r4 -1003d078: f640 4108 movw r1, #3080 ; 0xc08 -1003d07c: f04f 32ff mov.w r2, #4294967295 -1003d080: 4b8e ldr r3, [pc, #568] ; (1003d2bc ) -1003d082: f7fd f861 bl 1003a148 -1003d086: f506 6a4f add.w sl, r6, #3312 ; 0xcf0 -1003d08a: 4b8d ldr r3, [pc, #564] ; (1003d2c0 ) -1003d08c: 4620 mov r0, r4 -1003d08e: f640 0174 movw r1, #2164 ; 0x874 -1003d092: f04f 32ff mov.w r2, #4294967295 -1003d096: f7fd f857 bl 1003a148 -1003d09a: 4628 mov r0, r5 -1003d09c: a907 add r1, sp, #28 -1003d09e: 4652 mov r2, sl -1003d0a0: f7ff fe7e bl 1003cda0 <_PHY_MACSettingCalibration8195A> -1003d0a4: 4620 mov r0, r4 -1003d0a6: f640 6128 movw r1, #3624 ; 0xe28 -1003d0aa: f06f 02ff mvn.w r2, #255 ; 0xff -1003d0ae: 4b85 ldr r3, [pc, #532] ; (1003d2c4 ) -1003d0b0: f7fd f84a bl 1003a148 -1003d0b4: 4620 mov r0, r4 -1003d0b6: f44f 6164 mov.w r1, #3648 ; 0xe40 -1003d0ba: f04f 32ff mov.w r2, #4294967295 -1003d0be: 4b82 ldr r3, [pc, #520] ; (1003d2c8 ) -1003d0c0: f7fd f842 bl 1003a148 -1003d0c4: 4620 mov r0, r4 -1003d0c6: f640 6144 movw r1, #3652 ; 0xe44 -1003d0ca: f04f 32ff mov.w r2, #4294967295 -1003d0ce: 4b7f ldr r3, [pc, #508] ; (1003d2cc ) -1003d0d0: f7fd f83a bl 1003a148 -1003d0d4: 4628 mov r0, r5 -1003d0d6: 4641 mov r1, r8 -1003d0d8: f7ff f9b4 bl 1003c444 -1003d0dc: 2801 cmp r0, #1 -1003d0de: d11b bne.n 1003d118 -1003d0e0: 4620 mov r0, r4 -1003d0e2: f640 6128 movw r1, #3624 ; 0xe28 -1003d0e6: f06f 02ff mvn.w r2, #255 ; 0xff -1003d0ea: 2300 movs r3, #0 -1003d0ec: f7fd f82c bl 1003a148 -1003d0f0: 2100 movs r1, #0 -1003d0f2: 2208 movs r2, #8 -1003d0f4: 4b6f ldr r3, [pc, #444] ; (1003d2b4 ) -1003d0f6: 4620 mov r0, r4 -1003d0f8: f7fd f82f bl 1003a15a -1003d0fc: 4b74 ldr r3, [pc, #464] ; (1003d2d0 ) -1003d0fe: f8c6 0dc4 str.w r0, [r6, #3524] ; 0xdc4 -1003d102: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1003d106: e9d3 0102 ldrd r0, r1, [r3, #8] -1003d10a: 2300 movs r3, #0 -1003d10c: 4002 ands r2, r0 -1003d10e: 400b ands r3, r1 -1003d110: ea52 0103 orrs.w r1, r2, r3 -1003d114: d107 bne.n 1003d126 -1003d116: e00d b.n 1003d134 -1003d118: 4628 mov r0, r5 -1003d11a: 4641 mov r1, r8 -1003d11c: f7ff f992 bl 1003c444 -1003d120: 2801 cmp r0, #1 -1003d122: d126 bne.n 1003d172 -1003d124: e7dc b.n 1003d0e0 -1003d126: 4b6b ldr r3, [pc, #428] ; (1003d2d4 ) -1003d128: 681b ldr r3, [r3, #0] -1003d12a: b11b cbz r3, 1003d134 -1003d12c: 4b6a ldr r3, [pc, #424] ; (1003d2d8 ) -1003d12e: 6d18 ldr r0, [r3, #80] ; 0x50 -1003d130: f7dd fd16 bl 1001ab60 -1003d134: ea4f 1c47 mov.w ip, r7, lsl #5 -1003d138: eb09 030c add.w r3, r9, ip -1003d13c: f640 6194 movw r1, #3732 ; 0xe94 -1003d140: f04f 32ff mov.w r2, #4294967295 -1003d144: 4620 mov r0, r4 -1003d146: 9302 str r3, [sp, #8] -1003d148: f8cd c00c str.w ip, [sp, #12] -1003d14c: f7fc ffff bl 1003a14e -1003d150: f8dd c00c ldr.w ip, [sp, #12] -1003d154: f3c0 4009 ubfx r0, r0, #16, #10 -1003d158: f849 000c str.w r0, [r9, ip] -1003d15c: f640 619c movw r1, #3740 ; 0xe9c -1003d160: 4620 mov r0, r4 -1003d162: f04f 32ff mov.w r2, #4294967295 -1003d166: f7fc fff2 bl 1003a14e -1003d16a: 9b02 ldr r3, [sp, #8] -1003d16c: f3c0 4009 ubfx r0, r0, #16, #10 -1003d170: 6058 str r0, [r3, #4] -1003d172: 4628 mov r0, r5 -1003d174: 4641 mov r1, r8 -1003d176: f7ff fa3f bl 1003c5f8 -1003d17a: 2803 cmp r0, #3 -1003d17c: d10b bne.n 1003d196 -1003d17e: 4b54 ldr r3, [pc, #336] ; (1003d2d0 ) -1003d180: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1003d184: e9d3 0102 ldrd r0, r1, [r3, #8] -1003d188: 2300 movs r3, #0 -1003d18a: 4002 ands r2, r0 -1003d18c: 400b ands r3, r1 -1003d18e: ea52 0103 orrs.w r1, r2, r3 -1003d192: d107 bne.n 1003d1a4 -1003d194: e00d b.n 1003d1b2 -1003d196: 4628 mov r0, r5 -1003d198: 4641 mov r1, r8 -1003d19a: f7ff fa2d bl 1003c5f8 -1003d19e: 2803 cmp r0, #3 -1003d1a0: d120 bne.n 1003d1e4 -1003d1a2: e7ec b.n 1003d17e -1003d1a4: 4b4b ldr r3, [pc, #300] ; (1003d2d4 ) -1003d1a6: 681b ldr r3, [r3, #0] -1003d1a8: b11b cbz r3, 1003d1b2 -1003d1aa: 4b4b ldr r3, [pc, #300] ; (1003d2d8 ) -1003d1ac: 6d58 ldr r0, [r3, #84] ; 0x54 -1003d1ae: f7dd fcd7 bl 1001ab60 -1003d1b2: f640 61a4 movw r1, #3748 ; 0xea4 -1003d1b6: f04f 32ff mov.w r2, #4294967295 -1003d1ba: 4620 mov r0, r4 -1003d1bc: f7fc ffc7 bl 1003a14e -1003d1c0: eb09 1947 add.w r9, r9, r7, lsl #5 -1003d1c4: f3c0 4009 ubfx r0, r0, #16, #10 -1003d1c8: f8c9 0008 str.w r0, [r9, #8] -1003d1cc: f640 61ac movw r1, #3756 ; 0xeac -1003d1d0: 4620 mov r0, r4 -1003d1d2: f04f 32ff mov.w r2, #4294967295 -1003d1d6: f7fc ffba bl 1003a14e -1003d1da: f3c0 4009 ubfx r0, r0, #16, #10 -1003d1de: f8c9 000c str.w r0, [r9, #12] -1003d1e2: e012 b.n 1003d20a -1003d1e4: b988 cbnz r0, 1003d20a -1003d1e6: 4b3a ldr r3, [pc, #232] ; (1003d2d0 ) -1003d1e8: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1003d1ec: e9d3 0102 ldrd r0, r1, [r3, #8] -1003d1f0: 2300 movs r3, #0 -1003d1f2: 4002 ands r2, r0 -1003d1f4: 400b ands r3, r1 -1003d1f6: ea52 0103 orrs.w r1, r2, r3 -1003d1fa: d006 beq.n 1003d20a -1003d1fc: 4b35 ldr r3, [pc, #212] ; (1003d2d4 ) -1003d1fe: 681b ldr r3, [r3, #0] -1003d200: b11b cbz r3, 1003d20a -1003d202: 4b35 ldr r3, [pc, #212] ; (1003d2d8 ) -1003d204: 6d98 ldr r0, [r3, #88] ; 0x58 -1003d206: f7dd fcab bl 1001ab60 -1003d20a: 4620 mov r0, r4 -1003d20c: f640 6128 movw r1, #3624 ; 0xe28 -1003d210: f06f 02ff mvn.w r2, #255 ; 0xff -1003d214: 2300 movs r3, #0 -1003d216: f7fc ff97 bl 1003a148 -1003d21a: 2f00 cmp r7, #0 -1003d21c: d047 beq.n 1003d2ae -1003d21e: f896 19b8 ldrb.w r1, [r6, #2488] ; 0x9b8 -1003d222: b911 cbnz r1, 1003d22a -1003d224: 4628 mov r0, r5 -1003d226: f7ff fddf bl 1003cde8 <_PHY_PIModeSwitch8195A> -1003d22a: 4628 mov r0, r5 -1003d22c: 2310 movs r3, #16 -1003d22e: a914 add r1, sp, #80 ; 0x50 -1003d230: f506 624b add.w r2, r6, #3248 ; 0xcb0 -1003d234: f7ff fd64 bl 1003cd00 <_PHY_ReloadADDARegisters8195A> -1003d238: 4628 mov r0, r5 -1003d23a: a907 add r1, sp, #28 -1003d23c: 4652 mov r2, sl -1003d23e: f7ff fd79 bl 1003cd34 <_PHY_ReloadMACRegisters8195A> -1003d242: 4628 mov r0, r5 -1003d244: a90b add r1, sp, #44 ; 0x2c -1003d246: f606 5224 addw r2, r6, #3364 ; 0xd24 -1003d24a: 2309 movs r3, #9 -1003d24c: f7ff fd58 bl 1003cd00 <_PHY_ReloadADDARegisters8195A> -1003d250: 4620 mov r0, r4 -1003d252: f640 1148 movw r1, #2376 ; 0x948 -1003d256: f04f 32ff mov.w r2, #4294967295 -1003d25a: 465b mov r3, fp -1003d25c: f7fc ff74 bl 1003a148 -1003d260: 9d05 ldr r5, [sp, #20] -1003d262: 4620 mov r0, r4 -1003d264: 9500 str r5, [sp, #0] -1003d266: 2100 movs r1, #0 -1003d268: 22b0 movs r2, #176 ; 0xb0 -1003d26a: 4b12 ldr r3, [pc, #72] ; (1003d2b4 ) -1003d26c: f7fc ff72 bl 1003a154 -1003d270: 4620 mov r0, r4 -1003d272: f44f 6145 mov.w r1, #3152 ; 0xc50 -1003d276: 22ff movs r2, #255 ; 0xff -1003d278: 2350 movs r3, #80 ; 0x50 -1003d27a: f7fc ff65 bl 1003a148 -1003d27e: 9d04 ldr r5, [sp, #16] -1003d280: 4620 mov r0, r4 -1003d282: f44f 6145 mov.w r1, #3152 ; 0xc50 -1003d286: 22ff movs r2, #255 ; 0xff -1003d288: b2eb uxtb r3, r5 -1003d28a: f7fc ff5d bl 1003a148 -1003d28e: 4620 mov r0, r4 -1003d290: f44f 6163 mov.w r1, #3632 ; 0xe30 -1003d294: f04f 32ff mov.w r2, #4294967295 -1003d298: 4b10 ldr r3, [pc, #64] ; (1003d2dc ) -1003d29a: f7fc ff55 bl 1003a148 -1003d29e: 4620 mov r0, r4 -1003d2a0: f640 6134 movw r1, #3636 ; 0xe34 -1003d2a4: f04f 32ff mov.w r2, #4294967295 -1003d2a8: 4b0c ldr r3, [pc, #48] ; (1003d2dc ) -1003d2aa: f7fc ff4d bl 1003a148 -1003d2ae: b025 add sp, #148 ; 0x94 -1003d2b0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1003d2b4: 000fffff .word 0x000fffff -1003d2b8: 03a05600 .word 0x03a05600 -1003d2bc: 000800e4 .word 0x000800e4 -1003d2c0: 25204000 .word 0x25204000 -1003d2c4: 00808000 .word 0x00808000 -1003d2c8: 01007c00 .word 0x01007c00 -1003d2cc: 01004800 .word 0x01004800 -1003d2d0: 10000720 .word 0x10000720 -1003d2d4: 10044ec0 .word 0x10044ec0 -1003d2d8: 10043a4c .word 0x10043a4c -1003d2dc: 01008c00 .word 0x01008c00 -1003d2e0: 10044458 .word 0x10044458 - -1003d2e4 : -1003d2e4: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} -1003d2e6: f640 5103 movw r1, #3331 ; 0xd03 -1003d2ea: 4604 mov r4, r0 -1003d2ec: 6807 ldr r7, [r0, #0] -1003d2ee: f7fc ff19 bl 1003a124 -1003d2f2: 4605 mov r5, r0 -1003d2f4: f015 0670 ands.w r6, r5, #112 ; 0x70 -1003d2f8: bf19 ittee ne -1003d2fa: f640 5103 movwne r1, #3331 ; 0xd03 -1003d2fe: f005 028f andne.w r2, r5, #143 ; 0x8f -1003d302: f240 5122 movweq r1, #1314 ; 0x522 -1003d306: 22ff moveq r2, #255 ; 0xff -1003d308: 4620 mov r0, r4 -1003d30a: f7fc ff11 bl 1003a130 -1003d30e: 2100 movs r1, #0 -1003d310: 2218 movs r2, #24 -1003d312: f640 73ff movw r3, #4095 ; 0xfff -1003d316: 4638 mov r0, r7 -1003d318: f7f1 fcc4 bl 1002eca4 -1003d31c: f440 4000 orr.w r0, r0, #32768 ; 0x8000 -1003d320: 9000 str r0, [sp, #0] -1003d322: 2100 movs r1, #0 -1003d324: 4620 mov r0, r4 -1003d326: 2218 movs r2, #24 -1003d328: f640 73ff movw r3, #4095 ; 0xfff -1003d32c: f7fc ff12 bl 1003a154 -1003d330: 2064 movs r0, #100 ; 0x64 -1003d332: f7fc ff1a bl 1003a16a -1003d336: 4620 mov r0, r4 -1003d338: b11e cbz r6, 1003d342 -1003d33a: f640 5103 movw r1, #3331 ; 0xd03 -1003d33e: 462a mov r2, r5 -1003d340: e002 b.n 1003d348 -1003d342: f240 5122 movw r1, #1314 ; 0x522 -1003d346: 4632 mov r2, r6 -1003d348: b003 add sp, #12 -1003d34a: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} -1003d34e: f7fc beef b.w 1003a130 - ... - -1003d354 : -1003d354: b538 push {r3, r4, r5, lr} -1003d356: 6a43 ldr r3, [r0, #36] ; 0x24 -1003d358: 4604 mov r4, r0 -1003d35a: 015b lsls r3, r3, #5 -1003d35c: d528 bpl.n 1003d3b0 -1003d35e: 2529 movs r5, #41 ; 0x29 -1003d360: f8d4 3088 ldr.w r3, [r4, #136] ; 0x88 -1003d364: 781b ldrb r3, [r3, #0] -1003d366: b12b cbz r3, 1003d374 -1003d368: 3d01 subs r5, #1 -1003d36a: d003 beq.n 1003d374 -1003d36c: 2032 movs r0, #50 ; 0x32 -1003d36e: f7fc fefc bl 1003a16a -1003d372: e7f5 b.n 1003d360 -1003d374: 2301 movs r3, #1 -1003d376: f884 3aa9 strb.w r3, [r4, #2729] ; 0xaa9 -1003d37a: 4620 mov r0, r4 -1003d37c: 2100 movs r1, #0 -1003d37e: f7ff ffb1 bl 1003d2e4 -1003d382: 2300 movs r3, #0 -1003d384: f884 3aa9 strb.w r3, [r4, #2729] ; 0xaa9 -1003d388: 4b0a ldr r3, [pc, #40] ; (1003d3b4 ) -1003d38a: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1003d38e: e9d3 0102 ldrd r0, r1, [r3, #8] -1003d392: 2300 movs r3, #0 -1003d394: 4002 ands r2, r0 -1003d396: 400b ands r3, r1 -1003d398: ea52 0103 orrs.w r1, r2, r3 -1003d39c: d008 beq.n 1003d3b0 -1003d39e: 4b06 ldr r3, [pc, #24] ; (1003d3b8 ) -1003d3a0: 681b ldr r3, [r3, #0] -1003d3a2: b12b cbz r3, 1003d3b0 -1003d3a4: 4b05 ldr r3, [pc, #20] ; (1003d3bc ) -1003d3a6: 6e18 ldr r0, [r3, #96] ; 0x60 -1003d3a8: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1003d3ac: f7dd bbd8 b.w 1001ab60 -1003d3b0: bd38 pop {r3, r4, r5, pc} -1003d3b2: bf00 nop -1003d3b4: 10000720 .word 0x10000720 -1003d3b8: 10044ec0 .word 0x10044ec0 -1003d3bc: 10043a4c .word 0x10043a4c - -1003d3c0 : -1003d3c0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1003d3c4: 4fa8 ldr r7, [pc, #672] ; (1003d668 ) -1003d3c6: b0af sub sp, #188 ; 0xbc -1003d3c8: f241 63c8 movw r3, #5832 ; 0x16c8 -1003d3cc: ae05 add r6, sp, #20 -1003d3ce: 58c4 ldr r4, [r0, r3] -1003d3d0: 4605 mov r5, r0 -1003d3d2: 4688 mov r8, r1 -1003d3d4: 4694 mov ip, r2 -1003d3d6: cf0f ldmia r7!, {r0, r1, r2, r3} -1003d3d8: c60f stmia r6!, {r0, r1, r2, r3} -1003d3da: cf0f ldmia r7!, {r0, r1, r2, r3} -1003d3dc: c60f stmia r6!, {r0, r1, r2, r3} -1003d3de: 683b ldr r3, [r7, #0] -1003d3e0: 6033 str r3, [r6, #0] -1003d3e2: f8d4 3224 ldr.w r3, [r4, #548] ; 0x224 -1003d3e6: 015b lsls r3, r3, #5 -1003d3e8: f140 813b bpl.w 1003d662 -1003d3ec: f504 7700 add.w r7, r4, #512 ; 0x200 -1003d3f0: f1bc 0f00 cmp.w ip, #0 -1003d3f4: d10a bne.n 1003d40c -1003d3f6: f1b8 0f00 cmp.w r8, #0 -1003d3fa: d041 beq.n 1003d480 -1003d3fc: 4628 mov r0, r5 -1003d3fe: a905 add r1, sp, #20 -1003d400: f504 6250 add.w r2, r4, #3328 ; 0xd00 -1003d404: 2309 movs r3, #9 -1003d406: f7ff fc7b bl 1003cd00 <_PHY_ReloadADDARegisters8195A> -1003d40a: e12a b.n 1003d662 -1003d40c: 2600 movs r6, #0 -1003d40e: f604 1388 addw r3, r4, #2440 ; 0x988 -1003d412: 4433 add r3, r6 -1003d414: f8d3 13c0 ldr.w r1, [r3, #960] ; 0x3c0 -1003d418: f8d3 33c4 ldr.w r3, [r3, #964] ; 0x3c4 -1003d41c: b151 cbz r1, 1003d434 -1003d41e: b14b cbz r3, 1003d434 -1003d420: 4638 mov r0, r7 -1003d422: f04f 32ff mov.w r2, #4294967295 -1003d426: 3608 adds r6, #8 -1003d428: f7fc fe8e bl 1003a148 -1003d42c: 2e18 cmp r6, #24 -1003d42e: d1ee bne.n 1003d40e -1003d430: 2600 movs r6, #0 -1003d432: e000 b.n 1003d436 -1003d434: 26ff movs r6, #255 ; 0xff -1003d436: f604 5978 addw r9, r4, #3448 ; 0xd78 -1003d43a: f04f 0a00 mov.w sl, #0 -1003d43e: e899 000a ldmia.w r9, {r1, r3} -1003d442: b169 cbz r1, 1003d460 -1003d444: b163 cbz r3, 1003d460 -1003d446: 4638 mov r0, r7 -1003d448: f04f 32ff mov.w r2, #4294967295 -1003d44c: f10a 0a08 add.w sl, sl, #8 -1003d450: f7fc fe7a bl 1003a148 -1003d454: f1ba 0f10 cmp.w sl, #16 -1003d458: f109 0908 add.w r9, r9, #8 -1003d45c: d001 beq.n 1003d462 -1003d45e: e7ee b.n 1003d43e -1003d460: 26ff movs r6, #255 ; 0xff -1003d462: f8d4 3dc4 ldr.w r3, [r4, #3524] ; 0xdc4 -1003d466: 2b00 cmp r3, #0 -1003d468: d0c5 beq.n 1003d3f6 -1003d46a: 9300 str r3, [sp, #0] -1003d46c: 4638 mov r0, r7 -1003d46e: 2100 movs r1, #0 -1003d470: 2208 movs r2, #8 -1003d472: 4b7e ldr r3, [pc, #504] ; (1003d66c ) -1003d474: f7fc fe6e bl 1003a154 -1003d478: 2e00 cmp r6, #0 -1003d47a: f000 80f2 beq.w 1003d662 -1003d47e: e7ba b.n 1003d3f6 -1003d480: f640 1148 movw r1, #2376 ; 0x948 -1003d484: f04f 32ff mov.w r2, #4294967295 -1003d488: 4638 mov r0, r7 -1003d48a: f7fc fe60 bl 1003a14e -1003d48e: 22b0 movs r2, #176 ; 0xb0 -1003d490: 4683 mov fp, r0 -1003d492: 4641 mov r1, r8 -1003d494: 4638 mov r0, r7 -1003d496: 4b75 ldr r3, [pc, #468] ; (1003d66c ) -1003d498: f7fc fe5f bl 1003a15a -1003d49c: 4642 mov r2, r8 -1003d49e: 9003 str r0, [sp, #12] -1003d4a0: 2300 movs r3, #0 -1003d4a2: f10d 0838 add.w r8, sp, #56 ; 0x38 -1003d4a6: f842 3008 str.w r3, [r2, r8] -1003d4aa: eb08 0102 add.w r1, r8, r2 -1003d4ae: 3204 adds r2, #4 -1003d4b0: 2a20 cmp r2, #32 -1003d4b2: 620b str r3, [r1, #32] -1003d4b4: 640b str r3, [r1, #64] ; 0x40 -1003d4b6: 660b str r3, [r1, #96] ; 0x60 -1003d4b8: d1f2 bne.n 1003d4a0 -1003d4ba: 4699 mov r9, r3 -1003d4bc: 26ff movs r6, #255 ; 0xff -1003d4be: 469a mov sl, r3 -1003d4c0: 4628 mov r0, r5 -1003d4c2: a90e add r1, sp, #56 ; 0x38 -1003d4c4: 4652 mov r2, sl -1003d4c6: 2300 movs r3, #0 -1003d4c8: f7ff fd46 bl 1003cf58 -1003d4cc: f1ba 0f01 cmp.w sl, #1 -1003d4d0: d108 bne.n 1003d4e4 -1003d4d2: 4628 mov r0, r5 -1003d4d4: a90e add r1, sp, #56 ; 0x38 -1003d4d6: 2200 movs r2, #0 -1003d4d8: 4653 mov r3, sl -1003d4da: f7ff fca3 bl 1003ce24 -1003d4de: b318 cbz r0, 1003d528 -1003d4e0: 2600 movs r6, #0 -1003d4e2: e028 b.n 1003d536 -1003d4e4: f1ba 0f02 cmp.w sl, #2 -1003d4e8: d11e bne.n 1003d528 -1003d4ea: 4628 mov r0, r5 -1003d4ec: a90e add r1, sp, #56 ; 0x38 -1003d4ee: 2200 movs r2, #0 -1003d4f0: 4653 mov r3, sl -1003d4f2: f7ff fc97 bl 1003ce24 -1003d4f6: 2800 cmp r0, #0 -1003d4f8: d1f2 bne.n 1003d4e0 -1003d4fa: 4628 mov r0, r5 -1003d4fc: a90e add r1, sp, #56 ; 0x38 -1003d4fe: 2201 movs r2, #1 -1003d500: 4653 mov r3, sl -1003d502: f7ff fc8f bl 1003ce24 -1003d506: b970 cbnz r0, 1003d526 -1003d508: ab25 add r3, sp, #148 ; 0x94 -1003d50a: aa2d add r2, sp, #180 ; 0xb4 -1003d50c: f853 1f04 ldr.w r1, [r3, #4]! -1003d510: 4293 cmp r3, r2 -1003d512: 4489 add r9, r1 -1003d514: d1fa bne.n 1003d50c -1003d516: f1b9 0f00 cmp.w r9, #0 -1003d51a: bf0c ite eq -1003d51c: 26ff moveq r6, #255 ; 0xff -1003d51e: 2603 movne r6, #3 -1003d520: f04f 0a08 mov.w sl, #8 -1003d524: e000 b.n 1003d528 -1003d526: 2601 movs r6, #1 -1003d528: f10a 0a01 add.w sl, sl, #1 -1003d52c: fa5f fa8a uxtb.w sl, sl -1003d530: f1ba 0f02 cmp.w sl, #2 -1003d534: d9c4 bls.n 1003d4c0 -1003d536: ab0e add r3, sp, #56 ; 0x38 -1003d538: a82e add r0, sp, #184 ; 0xb8 -1003d53a: 681a ldr r2, [r3, #0] -1003d53c: 6899 ldr r1, [r3, #8] -1003d53e: f8d3 a010 ldr.w sl, [r3, #16] -1003d542: f8d3 c018 ldr.w ip, [r3, #24] -1003d546: 3320 adds r3, #32 -1003d548: 4283 cmp r3, r0 -1003d54a: d1f6 bne.n 1003d53a -1003d54c: 2eff cmp r6, #255 ; 0xff -1003d54e: d019 beq.n 1003d584 -1003d550: a92e add r1, sp, #184 ; 0xb8 -1003d552: eb01 1346 add.w r3, r1, r6, lsl #5 -1003d556: f853 1c7c ldr.w r1, [r3, #-124] -1003d55a: f853 2c80 ldr.w r2, [r3, #-128] -1003d55e: f8c4 1990 str.w r1, [r4, #2448] ; 0x990 -1003d562: f853 ac70 ldr.w sl, [r3, #-112] -1003d566: f853 1c6c ldr.w r1, [r3, #-108] -1003d56a: f8c4 298c str.w r2, [r4, #2444] ; 0x98c -1003d56e: f8c4 1998 str.w r1, [r4, #2456] ; 0x998 -1003d572: f8c4 a994 str.w sl, [r4, #2452] ; 0x994 -1003d576: f853 1c78 ldr.w r1, [r3, #-120] -1003d57a: f853 cc68 ldr.w ip, [r3, #-104] -1003d57e: f04f 0901 mov.w r9, #1 -1003d582: e00b b.n 1003d59c -1003d584: f44f 7380 mov.w r3, #256 ; 0x100 -1003d588: f8c4 3994 str.w r3, [r4, #2452] ; 0x994 -1003d58c: f8c4 398c str.w r3, [r4, #2444] ; 0x98c -1003d590: 2300 movs r3, #0 -1003d592: f8c4 3998 str.w r3, [r4, #2456] ; 0x998 -1003d596: f8c4 3990 str.w r3, [r4, #2448] ; 0x990 -1003d59a: 4699 mov r9, r3 -1003d59c: b172 cbz r2, 1003d5bc -1003d59e: f1d1 0101 rsbs r1, r1, #1 -1003d5a2: bf38 it cc -1003d5a4: 2100 movcc r1, #0 -1003d5a6: 9100 str r1, [sp, #0] -1003d5a8: 4628 mov r0, r5 -1003d5aa: 4649 mov r1, r9 -1003d5ac: aa0e add r2, sp, #56 ; 0x38 -1003d5ae: 4633 mov r3, r6 -1003d5b0: f8cd c008 str.w ip, [sp, #8] -1003d5b4: f7ff f9ea bl 1003c98c <_PHY_PathAFillIQKMatrix8195A> -1003d5b8: f8dd c008 ldr.w ip, [sp, #8] -1003d5bc: f1ba 0f00 cmp.w sl, #0 -1003d5c0: d00a beq.n 1003d5d8 -1003d5c2: f1dc 0301 rsbs r3, ip, #1 -1003d5c6: bf38 it cc -1003d5c8: 2300 movcc r3, #0 -1003d5ca: 9300 str r3, [sp, #0] -1003d5cc: 4628 mov r0, r5 -1003d5ce: 4649 mov r1, r9 -1003d5d0: 4642 mov r2, r8 -1003d5d2: 4633 mov r3, r6 -1003d5d4: f7ff faa5 bl 1003cb22 <_PHY_PathBFillIQKMatrix8195A> -1003d5d8: f894 0034 ldrb.w r0, [r4, #52] ; 0x34 -1003d5dc: f000 fabc bl 1003db58 -1003d5e0: 2e03 cmp r6, #3 -1003d5e2: d815 bhi.n 1003d610 -1003d5e4: 2324 movs r3, #36 ; 0x24 -1003d5e6: f504 7e00 add.w lr, r4, #512 ; 0x200 -1003d5ea: fb03 ee00 mla lr, r3, r0, lr -1003d5ee: eb08 1646 add.w r6, r8, r6, lsl #5 -1003d5f2: 2300 movs r3, #0 -1003d5f4: 58f2 ldr r2, [r6, r3] -1003d5f6: eb0e 0103 add.w r1, lr, r3 -1003d5fa: 3304 adds r3, #4 -1003d5fc: 2b20 cmp r3, #32 -1003d5fe: f8c1 27dc str.w r2, [r1, #2012] ; 0x7dc -1003d602: d1f7 bne.n 1003d5f4 -1003d604: 2324 movs r3, #36 ; 0x24 -1003d606: fb03 4000 mla r0, r3, r0, r4 -1003d60a: 2301 movs r3, #1 -1003d60c: f880 39d8 strb.w r3, [r0, #2520] ; 0x9d8 -1003d610: 4628 mov r0, r5 -1003d612: a905 add r1, sp, #20 -1003d614: f504 6250 add.w r2, r4, #3328 ; 0xd00 -1003d618: 2309 movs r3, #9 -1003d61a: f7ff fb40 bl 1003cc9e <_PHY_SaveADDARegisters8195A> -1003d61e: 4638 mov r0, r7 -1003d620: f640 1148 movw r1, #2376 ; 0x948 -1003d624: f04f 32ff mov.w r2, #4294967295 -1003d628: 465b mov r3, fp -1003d62a: f7fc fd8d bl 1003a148 -1003d62e: 9a03 ldr r2, [sp, #12] -1003d630: 4638 mov r0, r7 -1003d632: 9200 str r2, [sp, #0] -1003d634: 2100 movs r1, #0 -1003d636: 22b0 movs r2, #176 ; 0xb0 -1003d638: 4b0c ldr r3, [pc, #48] ; (1003d66c ) -1003d63a: f7fc fd8b bl 1003a154 -1003d63e: 4b0c ldr r3, [pc, #48] ; (1003d670 ) -1003d640: f04f 6280 mov.w r2, #67108864 ; 0x4000000 -1003d644: e9d3 0102 ldrd r0, r1, [r3, #8] -1003d648: 2300 movs r3, #0 -1003d64a: 4002 ands r2, r0 -1003d64c: 400b ands r3, r1 -1003d64e: ea52 0103 orrs.w r1, r2, r3 -1003d652: d006 beq.n 1003d662 -1003d654: 4b07 ldr r3, [pc, #28] ; (1003d674 ) -1003d656: 681b ldr r3, [r3, #0] -1003d658: b11b cbz r3, 1003d662 -1003d65a: 4b07 ldr r3, [pc, #28] ; (1003d678 ) -1003d65c: 6dd8 ldr r0, [r3, #92] ; 0x5c -1003d65e: f7dd fa7f bl 1001ab60 -1003d662: b02f add sp, #188 ; 0xbc -1003d664: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1003d668: 100444cc .word 0x100444cc -1003d66c: 000fffff .word 0x000fffff -1003d670: 10000720 .word 0x10000720 -1003d674: 10044ec0 .word 0x10044ec0 -1003d678: 10043a4c .word 0x10043a4c - -1003d67c : -1003d67c: b570 push {r4, r5, r6, lr} -1003d67e: 6805 ldr r5, [r0, #0] -1003d680: 4604 mov r4, r0 -1003d682: 4616 mov r6, r2 -1003d684: f000 fa44 bl 1003db10 -1003d688: 2100 movs r1, #0 -1003d68a: f884 67a7 strb.w r6, [r4, #1959] ; 0x7a7 -1003d68e: 4628 mov r0, r5 -1003d690: 460a mov r2, r1 -1003d692: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} -1003d696: f7ff be93 b.w 1003d3c0 - -1003d69a : -1003d69a: 6ac3 ldr r3, [r0, #44] ; 0x2c -1003d69c: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 -1003d6a0: d102 bne.n 1003d6a8 -1003d6a2: 4608 mov r0, r1 -1003d6a4: f7fe bea8 b.w 1003c3f8 -1003d6a8: 4770 bx lr - ... - -1003d6ac : -1003d6ac: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1003d6b0: f241 63c8 movw r3, #5832 ; 0x16c8 -1003d6b4: 58c4 ldr r4, [r0, r3] -1003d6b6: b09d sub sp, #116 ; 0x74 -1003d6b8: f504 7500 add.w r5, r4, #512 ; 0x200 -1003d6bc: f8d4 32b0 ldr.w r3, [r4, #688] ; 0x2b0 -1003d6c0: 4628 mov r0, r5 -1003d6c2: a913 add r1, sp, #76 ; 0x4c -1003d6c4: 881f ldrh r7, [r3, #0] -1003d6c6: f7ff ffe8 bl 1003d69a -1003d6ca: f8d4 32b0 ldr.w r3, [r4, #688] ; 0x2b0 -1003d6ce: 2202 movs r2, #2 -1003d6d0: 801a strh r2, [r3, #0] -1003d6d2: ab0e add r3, sp, #56 ; 0x38 -1003d6d4: 9300 str r3, [sp, #0] -1003d6d6: 4628 mov r0, r5 -1003d6d8: a909 add r1, sp, #36 ; 0x24 -1003d6da: aa0a add r2, sp, #40 ; 0x28 -1003d6dc: ab0d add r3, sp, #52 ; 0x34 -1003d6de: 9e19 ldr r6, [sp, #100] ; 0x64 -1003d6e0: 47b0 blx r6 -1003d6e2: f8d4 32b0 ldr.w r3, [r4, #688] ; 0x2b0 -1003d6e6: 220c movs r2, #12 -1003d6e8: 801a strh r2, [r3, #0] -1003d6ea: ab10 add r3, sp, #64 ; 0x40 -1003d6ec: 9300 str r3, [sp, #0] -1003d6ee: 4628 mov r0, r5 -1003d6f0: a90b add r1, sp, #44 ; 0x2c -1003d6f2: aa0c add r2, sp, #48 ; 0x30 -1003d6f4: ab0f add r3, sp, #60 ; 0x3c -1003d6f6: 9e19 ldr r6, [sp, #100] ; 0x64 -1003d6f8: 47b0 blx r6 -1003d6fa: 4628 mov r0, r5 -1003d6fc: a911 add r1, sp, #68 ; 0x44 -1003d6fe: aa12 add r2, sp, #72 ; 0x48 -1003d700: 9b1a ldr r3, [sp, #104] ; 0x68 -1003d702: 4798 blx r3 -1003d704: f8d4 32b0 ldr.w r3, [r4, #688] ; 0x2b0 -1003d708: 4628 mov r0, r5 -1003d70a: 801f strh r7, [r3, #0] -1003d70c: f8d4 39bc ldr.w r3, [r4, #2492] ; 0x9bc -1003d710: 2100 movs r1, #0 -1003d712: 3301 adds r3, #1 -1003d714: f8c4 39bc str.w r3, [r4, #2492] ; 0x9bc -1003d718: 2301 movs r3, #1 -1003d71a: f884 399d strb.w r3, [r4, #2461] ; 0x99d -1003d71e: 9a15 ldr r2, [sp, #84] ; 0x54 -1003d720: f44f 437c mov.w r3, #64512 ; 0xfc00 -1003d724: f7fc fd19 bl 1003a15a -1003d728: f894 399f ldrb.w r3, [r4, #2463] ; 0x99f -1003d72c: 2b00 cmp r3, #0 -1003d72e: f000 81e9 beq.w 1003db04 -1003d732: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 -1003d736: 3b01 subs r3, #1 -1003d738: b2db uxtb r3, r3 -1003d73a: 2bfd cmp r3, #253 ; 0xfd -1003d73c: f200 81e2 bhi.w 1003db04 -1003d740: 49bb ldr r1, [pc, #748] ; (1003da30 ) -1003d742: f04f 7680 mov.w r6, #16777216 ; 0x1000000 -1003d746: 2700 movs r7, #0 -1003d748: e9d1 2302 ldrd r2, r3, [r1, #8] -1003d74c: 4032 ands r2, r6 -1003d74e: 403b ands r3, r7 -1003d750: ea52 0603 orrs.w r6, r2, r3 -1003d754: 4688 mov r8, r1 -1003d756: fa5f f980 uxtb.w r9, r0 -1003d75a: d007 beq.n 1003d76c -1003d75c: 4bb5 ldr r3, [pc, #724] ; (1003da34 ) -1003d75e: 681b ldr r3, [r3, #0] -1003d760: b123 cbz r3, 1003d76c -1003d762: 4bb5 ldr r3, [pc, #724] ; (1003da38 ) -1003d764: 4649 mov r1, r9 -1003d766: 6b58 ldr r0, [r3, #52] ; 0x34 -1003d768: f7dd f9fa bl 1001ab60 -1003d76c: f894 39b1 ldrb.w r3, [r4, #2481] ; 0x9b1 -1003d770: f89d 004f ldrb.w r0, [sp, #79] ; 0x4f -1003d774: 18e2 adds r2, r4, r3 -1003d776: 3301 adds r3, #1 -1003d778: b2db uxtb r3, r3 -1003d77a: 4283 cmp r3, r0 -1003d77c: f882 99a9 strb.w r9, [r2, #2473] ; 0x9a9 -1003d780: f884 39b1 strb.w r3, [r4, #2481] ; 0x9b1 -1003d784: bf04 itt eq -1003d786: 2300 moveq r3, #0 -1003d788: f884 39b1 strbeq.w r3, [r4, #2481] ; 0x9b1 -1003d78c: 2300 movs r3, #0 -1003d78e: 4619 mov r1, r3 -1003d790: 461a mov r2, r3 -1003d792: b2de uxtb r6, r3 -1003d794: 4286 cmp r6, r0 -1003d796: d208 bcs.n 1003d7aa -1003d798: 18ee adds r6, r5, r3 -1003d79a: f896 67a9 ldrb.w r6, [r6, #1961] ; 0x7a9 -1003d79e: b116 cbz r6, 1003d7a6 -1003d7a0: 3201 adds r2, #1 -1003d7a2: 4431 add r1, r6 -1003d7a4: b2d2 uxtb r2, r2 -1003d7a6: 3301 adds r3, #1 -1003d7a8: e7f3 b.n 1003d792 -1003d7aa: b11a cbz r2, 1003d7b4 -1003d7ac: fbb1 f9f2 udiv r9, r1, r2 -1003d7b0: fa5f f989 uxtb.w r9, r9 -1003d7b4: f894 79a5 ldrb.w r7, [r4, #2469] ; 0x9a5 -1003d7b8: f894 39a6 ldrb.w r3, [r4, #2470] ; 0x9a6 -1003d7bc: 45b9 cmp r9, r7 -1003d7be: f894 69a7 ldrb.w r6, [r4, #2471] ; 0x9a7 -1003d7c2: bf8c ite hi -1003d7c4: ebc7 0709 rsbhi r7, r7, r9 -1003d7c8: ebc9 0707 rsbls r7, r9, r7 -1003d7cc: 4599 cmp r9, r3 -1003d7ce: bf8c ite hi -1003d7d0: ebc3 0309 rsbhi r3, r3, r9 -1003d7d4: ebc9 0303 rsbls r3, r9, r3 -1003d7d8: f89d 204e ldrb.w r2, [sp, #78] ; 0x4e -1003d7dc: 45b1 cmp r9, r6 -1003d7de: b2db uxtb r3, r3 -1003d7e0: bf8c ite hi -1003d7e2: ebc6 0609 rsbhi r6, r6, r9 -1003d7e6: ebc9 0606 rsbls r6, r9, r6 -1003d7ea: 429a cmp r2, r3 -1003d7ec: b2ff uxtb r7, r7 -1003d7ee: b2f6 uxtb r6, r6 -1003d7f0: d805 bhi.n 1003d7fe -1003d7f2: 9b18 ldr r3, [sp, #96] ; 0x60 -1003d7f4: f884 99a6 strb.w r9, [r4, #2470] ; 0x9a6 -1003d7f8: b10b cbz r3, 1003d7fe -1003d7fa: 4628 mov r0, r5 -1003d7fc: 4798 blx r3 -1003d7fe: b117 cbz r7, 1003d806 -1003d800: f894 399f ldrb.w r3, [r4, #2463] ; 0x99f -1003d804: b953 cbnz r3, 1003d81c -1003d806: f89d 2050 ldrb.w r2, [sp, #80] ; 0x50 -1003d80a: 2300 movs r3, #0 -1003d80c: 2a00 cmp r2, #0 -1003d80e: f000 80c3 beq.w 1003d998 -1003d812: f884 39c6 strb.w r3, [r4, #2502] ; 0x9c6 -1003d816: f884 39c2 strb.w r3, [r4, #2498] ; 0x9c2 -1003d81a: e0bd b.n 1003d998 -1003d81c: f894 e044 ldrb.w lr, [r4, #68] ; 0x44 -1003d820: f04f 7280 mov.w r2, #16777216 ; 0x1000000 -1003d824: 45f1 cmp r9, lr -1003d826: bf8c ite hi -1003d828: ebce 0709 rsbhi r7, lr, r9 -1003d82c: ebc9 070e rsbls r7, r9, lr -1003d830: 2300 movs r3, #0 -1003d832: e9d8 0102 ldrd r0, r1, [r8, #8] -1003d836: b2ff uxtb r7, r7 -1003d838: 4002 ands r2, r0 -1003d83a: 400b ands r3, r1 -1003d83c: 2f1d cmp r7, #29 -1003d83e: bf28 it cs -1003d840: 271d movcs r7, #29 -1003d842: ea52 0a03 orrs.w sl, r2, r3 -1003d846: d00c beq.n 1003d862 -1003d848: 4b7a ldr r3, [pc, #488] ; (1003da34 ) -1003d84a: 681b ldr r3, [r3, #0] -1003d84c: b14b cbz r3, 1003d862 -1003d84e: f894 303d ldrb.w r3, [r4, #61] ; 0x3d -1003d852: 4639 mov r1, r7 -1003d854: 9300 str r3, [sp, #0] -1003d856: 4b78 ldr r3, [pc, #480] ; (1003da38 ) -1003d858: 464a mov r2, r9 -1003d85a: 6b98 ldr r0, [r3, #56] ; 0x38 -1003d85c: 4673 mov r3, lr -1003d85e: f7dd f97f bl 1001ab60 -1003d862: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 -1003d866: f894 19c7 ldrb.w r1, [r4, #2503] ; 0x9c7 -1003d86a: 454b cmp r3, r9 -1003d86c: f894 29c3 ldrb.w r2, [r4, #2499] ; 0x9c3 -1003d870: f894 39ca ldrb.w r3, [r4, #2506] ; 0x9ca -1003d874: f884 19c8 strb.w r1, [r4, #2504] ; 0x9c8 -1003d878: d213 bcs.n 1003d8a2 -1003d87a: 990b ldr r1, [sp, #44] ; 0x2c -1003d87c: 5dc8 ldrb r0, [r1, r7] -1003d87e: f884 09c7 strb.w r0, [r4, #2503] ; 0x9c7 -1003d882: 5dc9 ldrb r1, [r1, r7] -1003d884: f884 29c4 strb.w r2, [r4, #2500] ; 0x9c4 -1003d888: 9a09 ldr r2, [sp, #36] ; 0x24 -1003d88a: f884 1df2 strb.w r1, [r4, #3570] ; 0xdf2 -1003d88e: 5dd1 ldrb r1, [r2, r7] -1003d890: f884 19c3 strb.w r1, [r4, #2499] ; 0x9c3 -1003d894: 5dd2 ldrb r2, [r2, r7] -1003d896: f884 39cb strb.w r3, [r4, #2507] ; 0x9cb -1003d89a: f884 2df3 strb.w r2, [r4, #3571] ; 0xdf3 -1003d89e: 9a11 ldr r2, [sp, #68] ; 0x44 -1003d8a0: e016 b.n 1003d8d0 -1003d8a2: 990c ldr r1, [sp, #48] ; 0x30 -1003d8a4: 5dc8 ldrb r0, [r1, r7] -1003d8a6: 4240 negs r0, r0 -1003d8a8: f884 09c7 strb.w r0, [r4, #2503] ; 0x9c7 -1003d8ac: 5dc9 ldrb r1, [r1, r7] -1003d8ae: f884 29c4 strb.w r2, [r4, #2500] ; 0x9c4 -1003d8b2: 4249 negs r1, r1 -1003d8b4: 9a0a ldr r2, [sp, #40] ; 0x28 -1003d8b6: f884 1df2 strb.w r1, [r4, #3570] ; 0xdf2 -1003d8ba: 5dd1 ldrb r1, [r2, r7] -1003d8bc: 4249 negs r1, r1 -1003d8be: f884 19c3 strb.w r1, [r4, #2499] ; 0x9c3 -1003d8c2: 5dd2 ldrb r2, [r2, r7] -1003d8c4: f884 39cb strb.w r3, [r4, #2507] ; 0x9cb -1003d8c8: 4252 negs r2, r2 -1003d8ca: f884 2df3 strb.w r2, [r4, #3571] ; 0xdf3 -1003d8ce: 9a12 ldr r2, [sp, #72] ; 0x48 -1003d8d0: f812 8007 ldrb.w r8, [r2, r7] -1003d8d4: f89d b04d ldrb.w fp, [sp, #77] ; 0x4d -1003d8d8: f884 89ca strb.w r8, [r4, #2506] ; 0x9ca -1003d8dc: f89d e04c ldrb.w lr, [sp, #76] ; 0x4c -1003d8e0: ebb8 0803 subs.w r8, r8, r3 -1003d8e4: f10b 33ff add.w r3, fp, #4294967295 -1003d8e8: b2db uxtb r3, r3 -1003d8ea: f89d c050 ldrb.w ip, [sp, #80] ; 0x50 -1003d8ee: 9305 str r3, [sp, #20] -1003d8f0: f10e 33ff add.w r3, lr, #4294967295 -1003d8f4: f504 7000 add.w r0, r4, #512 ; 0x200 -1003d8f8: b2db uxtb r3, r3 -1003d8fa: bf18 it ne -1003d8fc: f04f 0801 movne.w r8, #1 -1003d900: f8cd c010 str.w ip, [sp, #16] -1003d904: 9306 str r3, [sp, #24] -1003d906: 9002 str r0, [sp, #8] -1003d908: 4601 mov r1, r0 -1003d90a: 2200 movs r2, #0 -1003d90c: f8dd a010 ldr.w sl, [sp, #16] -1003d910: b2d3 uxtb r3, r2 -1003d912: 4553 cmp r3, sl -1003d914: d242 bcs.n 1003d99c -1003d916: f8dd a008 ldr.w sl, [sp, #8] -1003d91a: 1b0b subs r3, r1, r4 -1003d91c: 4453 add r3, sl -1003d91e: f893 05c8 ldrb.w r0, [r3, #1480] ; 0x5c8 -1003d922: f893 a5c7 ldrb.w sl, [r3, #1479] ; 0x5c7 -1003d926: 3201 adds r2, #1 -1003d928: 4550 cmp r0, sl -1003d92a: bf14 ite ne -1003d92c: ebc0 000a rsbne r0, r0, sl -1003d930: 2000 moveq r0, #0 -1003d932: f893 a5c3 ldrb.w sl, [r3, #1475] ; 0x5c3 -1003d936: f883 05c6 strb.w r0, [r3, #1478] ; 0x5c6 -1003d93a: f893 05c4 ldrb.w r0, [r3, #1476] ; 0x5c4 -1003d93e: 3101 adds r1, #1 -1003d940: 4550 cmp r0, sl -1003d942: bf14 ite ne -1003d944: ebc0 000a rsbne r0, r0, sl -1003d948: 2000 moveq r0, #0 -1003d94a: f883 05c2 strb.w r0, [r3, #1474] ; 0x5c2 -1003d94e: f893 a5c6 ldrb.w sl, [r3, #1478] ; 0x5c6 -1003d952: f893 09ea ldrb.w r0, [r3, #2538] ; 0x9ea -1003d956: f893 c5c2 ldrb.w ip, [r3, #1474] ; 0x5c2 -1003d95a: 4450 add r0, sl -1003d95c: b2c0 uxtb r0, r0 -1003d95e: f893 a9ee ldrb.w sl, [r3, #2542] ; 0x9ee -1003d962: 4583 cmp fp, r0 -1003d964: 44e2 add sl, ip -1003d966: bfd8 it le -1003d968: f8dd c014 ldrle.w ip, [sp, #20] -1003d96c: f8cd a01c str.w sl, [sp, #28] -1003d970: fa5f fa8a uxtb.w sl, sl -1003d974: f883 05c5 strb.w r0, [r3, #1477] ; 0x5c5 -1003d978: bfd8 it le -1003d97a: f883 c5c5 strble.w ip, [r3, #1477] ; 0x5c5 -1003d97e: 45d6 cmp lr, sl -1003d980: f883 09e8 strb.w r0, [r3, #2536] ; 0x9e8 -1003d984: bfd8 it le -1003d986: 9806 ldrle r0, [sp, #24] -1003d988: f883 a5c1 strb.w sl, [r3, #1473] ; 0x5c1 -1003d98c: f883 a9ec strb.w sl, [r3, #2540] ; 0x9ec -1003d990: bfd8 it le -1003d992: f883 05c1 strble.w r0, [r3, #1473] ; 0x5c1 -1003d996: e7b9 b.n 1003d90c -1003d998: f04f 0800 mov.w r8, #0 -1003d99c: f994 39c6 ldrsb.w r3, [r4, #2502] ; 0x9c6 -1003d9a0: b91b cbnz r3, 1003d9aa -1003d9a2: f994 39c2 ldrsb.w r3, [r4, #2498] ; 0x9c2 -1003d9a6: 2b00 cmp r3, #0 -1003d9a8: d070 beq.n 1003da8c -1003d9aa: 2f00 cmp r7, #0 -1003d9ac: d06e beq.n 1003da8c -1003d9ae: f894 399f ldrb.w r3, [r4, #2463] ; 0x99f -1003d9b2: 2b00 cmp r3, #0 -1003d9b4: d06a beq.n 1003da8c -1003d9b6: 2301 movs r3, #1 -1003d9b8: f884 39c9 strb.w r3, [r4, #2505] ; 0x9c9 -1003d9bc: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 -1003d9c0: 454b cmp r3, r9 -1003d9c2: f8d4 322c ldr.w r3, [r4, #556] ; 0x22c -1003d9c6: d239 bcs.n 1003da3c -1003d9c8: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 -1003d9cc: d11c bne.n 1003da08 -1003d9ce: f04f 0a00 mov.w sl, #0 -1003d9d2: f89d 3050 ldrb.w r3, [sp, #80] ; 0x50 -1003d9d6: fa5f f28a uxtb.w r2, sl -1003d9da: 4293 cmp r3, r2 -1003d9dc: f10a 0a01 add.w sl, sl, #1 -1003d9e0: d905 bls.n 1003d9ee -1003d9e2: 4628 mov r0, r5 -1003d9e4: 2101 movs r1, #1 -1003d9e6: 2300 movs r3, #0 -1003d9e8: 9f16 ldr r7, [sp, #88] ; 0x58 -1003d9ea: 47b8 blx r7 -1003d9ec: e7f1 b.n 1003d9d2 -1003d9ee: f89d 3050 ldrb.w r3, [sp, #80] ; 0x50 -1003d9f2: 2b00 cmp r3, #0 -1003d9f4: d048 beq.n 1003da88 -1003d9f6: f894 3dec ldrb.w r3, [r4, #3564] ; 0xdec -1003d9fa: f884 3dee strb.w r3, [r4, #3566] ; 0xdee -1003d9fe: f894 3de8 ldrb.w r3, [r4, #3560] ; 0xde8 -1003da02: f884 3dea strb.w r3, [r4, #3562] ; 0xdea -1003da06: e03f b.n 1003da88 -1003da08: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 -1003da0c: d1ef bne.n 1003d9ee -1003da0e: f04f 0a00 mov.w sl, #0 -1003da12: f89d 3050 ldrb.w r3, [sp, #80] ; 0x50 -1003da16: fa5f f28a uxtb.w r2, sl -1003da1a: 4293 cmp r3, r2 -1003da1c: f10a 0a01 add.w sl, sl, #1 -1003da20: d9e5 bls.n 1003d9ee -1003da22: 4628 mov r0, r5 -1003da24: 2101 movs r1, #1 -1003da26: 2300 movs r3, #0 -1003da28: 9f16 ldr r7, [sp, #88] ; 0x58 -1003da2a: 47b8 blx r7 -1003da2c: e7f1 b.n 1003da12 -1003da2e: bf00 nop -1003da30: 10000720 .word 0x10000720 -1003da34: 10044ec0 .word 0x10044ec0 -1003da38: 10043a4c .word 0x10043a4c -1003da3c: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 -1003da40: d10f bne.n 1003da62 -1003da42: f04f 0a00 mov.w sl, #0 -1003da46: f89d 3050 ldrb.w r3, [sp, #80] ; 0x50 -1003da4a: fa5f f28a uxtb.w r2, sl -1003da4e: 4293 cmp r3, r2 -1003da50: f10a 0a01 add.w sl, sl, #1 -1003da54: d9cb bls.n 1003d9ee -1003da56: 4628 mov r0, r5 -1003da58: 2101 movs r1, #1 -1003da5a: 2300 movs r3, #0 -1003da5c: 9f16 ldr r7, [sp, #88] ; 0x58 -1003da5e: 47b8 blx r7 -1003da60: e7f1 b.n 1003da46 -1003da62: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 -1003da66: d1c2 bne.n 1003d9ee -1003da68: f04f 0a00 mov.w sl, #0 -1003da6c: f89d 3050 ldrb.w r3, [sp, #80] ; 0x50 -1003da70: fa5f f28a uxtb.w r2, sl -1003da74: 4293 cmp r3, r2 -1003da76: f10a 0a01 add.w sl, sl, #1 -1003da7a: d9b8 bls.n 1003d9ee -1003da7c: 4628 mov r0, r5 -1003da7e: 2101 movs r1, #1 -1003da80: 2300 movs r3, #0 -1003da82: 9f16 ldr r7, [sp, #88] ; 0x58 -1003da84: 47b8 blx r7 -1003da86: e7f1 b.n 1003da6c -1003da88: f884 99a5 strb.w r9, [r4, #2469] ; 0x9a5 -1003da8c: f1b8 0f00 cmp.w r8, #0 -1003da90: d009 beq.n 1003daa6 -1003da92: f894 399f ldrb.w r3, [r4, #2463] ; 0x99f -1003da96: b133 cbz r3, 1003daa6 -1003da98: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 -1003da9c: 2bff cmp r3, #255 ; 0xff -1003da9e: d002 beq.n 1003daa6 -1003daa0: 4628 mov r0, r5 -1003daa2: 9b1b ldr r3, [sp, #108] ; 0x6c -1003daa4: 4798 blx r3 -1003daa6: f89d 304e ldrb.w r3, [sp, #78] ; 0x4e -1003daaa: 42b3 cmp r3, r6 -1003daac: d808 bhi.n 1003dac0 -1003daae: f894 3cac ldrb.w r3, [r4, #3244] ; 0xcac -1003dab2: b92b cbnz r3, 1003dac0 -1003dab4: 4631 mov r1, r6 -1003dab6: 4628 mov r0, r5 -1003dab8: 464a mov r2, r9 -1003daba: 2308 movs r3, #8 -1003dabc: 9e17 ldr r6, [sp, #92] ; 0x5c -1003dabe: 47b0 blx r6 -1003dac0: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 -1003dac4: 4628 mov r0, r5 -1003dac6: 3b05 subs r3, #5 -1003dac8: b2db uxtb r3, r3 -1003daca: 4599 cmp r9, r3 -1003dacc: f04f 0100 mov.w r1, #0 -1003dad0: f04f 0286 mov.w r2, #134 ; 0x86 -1003dad4: f04f 33ff mov.w r3, #4294967295 -1003dad8: d905 bls.n 1003dae6 -1003dada: f7fc fb3e bl 1003a15a -1003dade: 282a cmp r0, #42 ; 0x2a -1003dae0: d00d beq.n 1003dafe -1003dae2: 232a movs r3, #42 ; 0x2a -1003dae4: e004 b.n 1003daf0 -1003dae6: f7fc fb38 bl 1003a15a -1003daea: 283b cmp r0, #59 ; 0x3b -1003daec: d007 beq.n 1003dafe -1003daee: 233b movs r3, #59 ; 0x3b -1003daf0: 9300 str r3, [sp, #0] -1003daf2: 4628 mov r0, r5 -1003daf4: 2100 movs r1, #0 -1003daf6: 2286 movs r2, #134 ; 0x86 -1003daf8: 4b04 ldr r3, [pc, #16] ; (1003db0c ) -1003dafa: f7fc fb2b bl 1003a154 -1003dafe: 2300 movs r3, #0 -1003db00: f884 399c strb.w r3, [r4, #2460] ; 0x99c -1003db04: b01d add sp, #116 ; 0x74 -1003db06: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1003db0a: bf00 nop -1003db0c: 000fffff .word 0x000fffff - -1003db10 : -1003db10: 6803 ldr r3, [r0, #0] -1003db12: 881b ldrh r3, [r3, #0] -1003db14: 3b0b subs r3, #11 -1003db16: b29b uxth r3, r3 -1003db18: 2b01 cmp r3, #1 -1003db1a: d81c bhi.n 1003db56 -1003db1c: 2200 movs r2, #0 -1003db1e: f44f 7380 mov.w r3, #256 ; 0x100 -1003db22: 3224 adds r2, #36 ; 0x24 -1003db24: f8c0 37f4 str.w r3, [r0, #2036] ; 0x7f4 -1003db28: f8c0 37ec str.w r3, [r0, #2028] ; 0x7ec -1003db2c: f8c0 37e4 str.w r3, [r0, #2020] ; 0x7e4 -1003db30: f8c0 37dc str.w r3, [r0, #2012] ; 0x7dc -1003db34: f5b2 7ffc cmp.w r2, #504 ; 0x1f8 -1003db38: f04f 0300 mov.w r3, #0 -1003db3c: f8c0 37f8 str.w r3, [r0, #2040] ; 0x7f8 -1003db40: f8c0 37f0 str.w r3, [r0, #2032] ; 0x7f0 -1003db44: f8c0 37e8 str.w r3, [r0, #2024] ; 0x7e8 -1003db48: f8c0 37e0 str.w r3, [r0, #2016] ; 0x7e0 -1003db4c: f880 37d8 strb.w r3, [r0, #2008] ; 0x7d8 -1003db50: f100 0024 add.w r0, r0, #36 ; 0x24 -1003db54: d1e3 bne.n 1003db1e -1003db56: 4770 bx lr - -1003db58 : -1003db58: b5f0 push {r4, r5, r6, r7, lr} -1003db5a: 4b13 ldr r3, [pc, #76] ; (1003dba8 ) -1003db5c: b091 sub sp, #68 ; 0x44 -1003db5e: aa01 add r2, sp, #4 -1003db60: 4605 mov r5, r0 -1003db62: f103 0738 add.w r7, r3, #56 ; 0x38 -1003db66: 4616 mov r6, r2 -1003db68: 6818 ldr r0, [r3, #0] -1003db6a: 6859 ldr r1, [r3, #4] -1003db6c: 4614 mov r4, r2 -1003db6e: c403 stmia r4!, {r0, r1} -1003db70: 3308 adds r3, #8 -1003db72: 42bb cmp r3, r7 -1003db74: 4622 mov r2, r4 -1003db76: d1f7 bne.n 1003db68 -1003db78: 8819 ldrh r1, [r3, #0] -1003db7a: 789b ldrb r3, [r3, #2] -1003db7c: 2d0e cmp r5, #14 -1003db7e: 8021 strh r1, [r4, #0] -1003db80: 70a3 strb r3, [r4, #2] -1003db82: d90d bls.n 1003dba0 -1003db84: 2300 movs r3, #0 -1003db86: 18f2 adds r2, r6, r3 -1003db88: 7b92 ldrb r2, [r2, #14] -1003db8a: f103 000e add.w r0, r3, #14 -1003db8e: 42aa cmp r2, r5 -1003db90: b2c0 uxtb r0, r0 -1003db92: d102 bne.n 1003db9a -1003db94: 380d subs r0, #13 -1003db96: b2c0 uxtb r0, r0 -1003db98: e003 b.n 1003dba2 -1003db9a: 3301 adds r3, #1 -1003db9c: 2b2d cmp r3, #45 ; 0x2d -1003db9e: d1f2 bne.n 1003db86 -1003dba0: 2000 movs r0, #0 -1003dba2: b011 add sp, #68 ; 0x44 -1003dba4: bdf0 pop {r4, r5, r6, r7, pc} -1003dba6: bf00 nop -1003dba8: 100444f0 .word 0x100444f0 - -1003dbac : -1003dbac: b510 push {r4, lr} -1003dbae: 4c0b ldr r4, [pc, #44] ; (1003dbdc ) -1003dbb0: 6823 ldr r3, [r4, #0] -1003dbb2: 2b01 cmp r3, #1 -1003dbb4: f04f 0300 mov.w r3, #0 -1003dbb8: d00e beq.n 1003dbd8 -1003dbba: 4809 ldr r0, [pc, #36] ; (1003dbe0 ) -1003dbbc: 2208 movs r2, #8 -1003dbbe: 7043 strb r3, [r0, #1] -1003dbc0: 4b08 ldr r3, [pc, #32] ; (1003dbe4 ) -1003dbc2: 70c2 strb r2, [r0, #3] -1003dbc4: 681a ldr r2, [r3, #0] -1003dbc6: f422 3200 bic.w r2, r2, #131072 ; 0x20000 -1003dbca: 601a str r2, [r3, #0] -1003dbcc: 4b06 ldr r3, [pc, #24] ; (1003dbe8 ) -1003dbce: 4798 blx r3 -1003dbd0: b918 cbnz r0, 1003dbda -1003dbd2: 2301 movs r3, #1 -1003dbd4: 6023 str r3, [r4, #0] -1003dbd6: bd10 pop {r4, pc} -1003dbd8: 4618 mov r0, r3 -1003dbda: bd10 pop {r4, pc} -1003dbdc: 1004e500 .word 0x1004e500 -1003dbe0: 1004e000 .word 0x1004e000 -1003dbe4: 10000310 .word 0x10000310 -1003dbe8: 00006ea9 .word 0x00006ea9 - -1003dbec <__aeabi_llsr>: -1003dbec: 40d0 lsrs r0, r2 -1003dbee: 1c0b adds r3, r1, #0 -1003dbf0: 40d1 lsrs r1, r2 -1003dbf2: 469c mov ip, r3 -1003dbf4: 3a20 subs r2, #32 -1003dbf6: 40d3 lsrs r3, r2 -1003dbf8: 4318 orrs r0, r3 -1003dbfa: 4252 negs r2, r2 -1003dbfc: 4663 mov r3, ip -1003dbfe: 4093 lsls r3, r2 -1003dc00: 4318 orrs r0, r3 -1003dc02: 4770 bx lr - -1003dc04 : -1003dc04: 4603 mov r3, r0 -1003dc06: 4402 add r2, r0 -1003dc08: 4293 cmp r3, r2 -1003dc0a: d100 bne.n 1003dc0e -1003dc0c: 4770 bx lr -1003dc0e: f803 1b01 strb.w r1, [r3], #1 -1003dc12: e7f9 b.n 1003dc08 - -1003dc14 <_free_r>: -1003dc14: b538 push {r3, r4, r5, lr} -1003dc16: 4605 mov r5, r0 -1003dc18: 2900 cmp r1, #0 -1003dc1a: d043 beq.n 1003dca4 <_free_r+0x90> -1003dc1c: f851 3c04 ldr.w r3, [r1, #-4] -1003dc20: 1f0c subs r4, r1, #4 -1003dc22: 2b00 cmp r3, #0 -1003dc24: bfb8 it lt -1003dc26: 18e4 addlt r4, r4, r3 -1003dc28: f000 f906 bl 1003de38 <__malloc_lock> -1003dc2c: 4a1e ldr r2, [pc, #120] ; (1003dca8 <_free_r+0x94>) -1003dc2e: 6813 ldr r3, [r2, #0] -1003dc30: 4610 mov r0, r2 -1003dc32: b933 cbnz r3, 1003dc42 <_free_r+0x2e> -1003dc34: 6063 str r3, [r4, #4] -1003dc36: 6014 str r4, [r2, #0] -1003dc38: 4628 mov r0, r5 -1003dc3a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} -1003dc3e: f000 b8fc b.w 1003de3a <__malloc_unlock> -1003dc42: 42a3 cmp r3, r4 -1003dc44: d90b bls.n 1003dc5e <_free_r+0x4a> -1003dc46: 6821 ldr r1, [r4, #0] -1003dc48: 1862 adds r2, r4, r1 -1003dc4a: 4293 cmp r3, r2 -1003dc4c: bf01 itttt eq -1003dc4e: 681a ldreq r2, [r3, #0] -1003dc50: 685b ldreq r3, [r3, #4] -1003dc52: 1852 addeq r2, r2, r1 -1003dc54: 6022 streq r2, [r4, #0] -1003dc56: 6063 str r3, [r4, #4] -1003dc58: 6004 str r4, [r0, #0] -1003dc5a: e7ed b.n 1003dc38 <_free_r+0x24> -1003dc5c: 4613 mov r3, r2 -1003dc5e: 685a ldr r2, [r3, #4] -1003dc60: b10a cbz r2, 1003dc66 <_free_r+0x52> -1003dc62: 42a2 cmp r2, r4 -1003dc64: d9fa bls.n 1003dc5c <_free_r+0x48> -1003dc66: 6819 ldr r1, [r3, #0] -1003dc68: 1858 adds r0, r3, r1 -1003dc6a: 42a0 cmp r0, r4 -1003dc6c: d10b bne.n 1003dc86 <_free_r+0x72> -1003dc6e: 6820 ldr r0, [r4, #0] -1003dc70: 4401 add r1, r0 -1003dc72: 1858 adds r0, r3, r1 -1003dc74: 4282 cmp r2, r0 -1003dc76: 6019 str r1, [r3, #0] -1003dc78: d1de bne.n 1003dc38 <_free_r+0x24> -1003dc7a: 6810 ldr r0, [r2, #0] -1003dc7c: 6852 ldr r2, [r2, #4] -1003dc7e: 4401 add r1, r0 -1003dc80: 6019 str r1, [r3, #0] -1003dc82: 605a str r2, [r3, #4] -1003dc84: e7d8 b.n 1003dc38 <_free_r+0x24> -1003dc86: d902 bls.n 1003dc8e <_free_r+0x7a> -1003dc88: 230c movs r3, #12 -1003dc8a: 602b str r3, [r5, #0] -1003dc8c: e7d4 b.n 1003dc38 <_free_r+0x24> -1003dc8e: 6820 ldr r0, [r4, #0] -1003dc90: 1821 adds r1, r4, r0 -1003dc92: 428a cmp r2, r1 -1003dc94: bf01 itttt eq -1003dc96: 6811 ldreq r1, [r2, #0] -1003dc98: 6852 ldreq r2, [r2, #4] -1003dc9a: 1809 addeq r1, r1, r0 -1003dc9c: 6021 streq r1, [r4, #0] -1003dc9e: 6062 str r2, [r4, #4] -1003dca0: 605c str r4, [r3, #4] -1003dca2: e7c9 b.n 1003dc38 <_free_r+0x24> -1003dca4: bd38 pop {r3, r4, r5, pc} -1003dca6: bf00 nop -1003dca8: 1004e504 .word 0x1004e504 - -1003dcac <_malloc_r>: -1003dcac: b570 push {r4, r5, r6, lr} -1003dcae: 1ccd adds r5, r1, #3 -1003dcb0: f025 0503 bic.w r5, r5, #3 -1003dcb4: 3508 adds r5, #8 -1003dcb6: 2d0c cmp r5, #12 -1003dcb8: bf38 it cc -1003dcba: 250c movcc r5, #12 -1003dcbc: 2d00 cmp r5, #0 -1003dcbe: 4606 mov r6, r0 -1003dcc0: db01 blt.n 1003dcc6 <_malloc_r+0x1a> -1003dcc2: 42a9 cmp r1, r5 -1003dcc4: d903 bls.n 1003dcce <_malloc_r+0x22> -1003dcc6: 230c movs r3, #12 -1003dcc8: 6033 str r3, [r6, #0] -1003dcca: 2000 movs r0, #0 -1003dccc: bd70 pop {r4, r5, r6, pc} -1003dcce: f000 f8b3 bl 1003de38 <__malloc_lock> -1003dcd2: 4a23 ldr r2, [pc, #140] ; (1003dd60 <_malloc_r+0xb4>) -1003dcd4: 6814 ldr r4, [r2, #0] -1003dcd6: 4621 mov r1, r4 -1003dcd8: b991 cbnz r1, 1003dd00 <_malloc_r+0x54> -1003dcda: 4c22 ldr r4, [pc, #136] ; (1003dd64 <_malloc_r+0xb8>) -1003dcdc: 6823 ldr r3, [r4, #0] -1003dcde: b91b cbnz r3, 1003dce8 <_malloc_r+0x3c> -1003dce0: 4630 mov r0, r6 -1003dce2: f000 f841 bl 1003dd68 <_sbrk_r> -1003dce6: 6020 str r0, [r4, #0] -1003dce8: 4629 mov r1, r5 -1003dcea: 4630 mov r0, r6 -1003dcec: f000 f83c bl 1003dd68 <_sbrk_r> -1003dcf0: 1c43 adds r3, r0, #1 -1003dcf2: d126 bne.n 1003dd42 <_malloc_r+0x96> -1003dcf4: 230c movs r3, #12 -1003dcf6: 4630 mov r0, r6 -1003dcf8: 6033 str r3, [r6, #0] -1003dcfa: f000 f89e bl 1003de3a <__malloc_unlock> -1003dcfe: e7e4 b.n 1003dcca <_malloc_r+0x1e> -1003dd00: 680b ldr r3, [r1, #0] -1003dd02: 1b5b subs r3, r3, r5 -1003dd04: d41a bmi.n 1003dd3c <_malloc_r+0x90> -1003dd06: 2b0b cmp r3, #11 -1003dd08: d90f bls.n 1003dd2a <_malloc_r+0x7e> -1003dd0a: 600b str r3, [r1, #0] -1003dd0c: 18cc adds r4, r1, r3 -1003dd0e: 50cd str r5, [r1, r3] -1003dd10: 4630 mov r0, r6 -1003dd12: f000 f892 bl 1003de3a <__malloc_unlock> -1003dd16: f104 000b add.w r0, r4, #11 -1003dd1a: 1d23 adds r3, r4, #4 -1003dd1c: f020 0007 bic.w r0, r0, #7 -1003dd20: 1ac3 subs r3, r0, r3 -1003dd22: d01b beq.n 1003dd5c <_malloc_r+0xb0> -1003dd24: 425a negs r2, r3 -1003dd26: 50e2 str r2, [r4, r3] -1003dd28: bd70 pop {r4, r5, r6, pc} -1003dd2a: 428c cmp r4, r1 -1003dd2c: bf0b itete eq -1003dd2e: 6863 ldreq r3, [r4, #4] -1003dd30: 684b ldrne r3, [r1, #4] -1003dd32: 6013 streq r3, [r2, #0] -1003dd34: 6063 strne r3, [r4, #4] -1003dd36: bf18 it ne -1003dd38: 460c movne r4, r1 -1003dd3a: e7e9 b.n 1003dd10 <_malloc_r+0x64> -1003dd3c: 460c mov r4, r1 -1003dd3e: 6849 ldr r1, [r1, #4] -1003dd40: e7ca b.n 1003dcd8 <_malloc_r+0x2c> -1003dd42: 1cc4 adds r4, r0, #3 -1003dd44: f024 0403 bic.w r4, r4, #3 -1003dd48: 42a0 cmp r0, r4 -1003dd4a: d005 beq.n 1003dd58 <_malloc_r+0xac> -1003dd4c: 1a21 subs r1, r4, r0 -1003dd4e: 4630 mov r0, r6 -1003dd50: f000 f80a bl 1003dd68 <_sbrk_r> -1003dd54: 3001 adds r0, #1 -1003dd56: d0cd beq.n 1003dcf4 <_malloc_r+0x48> -1003dd58: 6025 str r5, [r4, #0] -1003dd5a: e7d9 b.n 1003dd10 <_malloc_r+0x64> -1003dd5c: bd70 pop {r4, r5, r6, pc} -1003dd5e: bf00 nop -1003dd60: 1004e504 .word 0x1004e504 -1003dd64: 1004e508 .word 0x1004e508 - -1003dd68 <_sbrk_r>: -1003dd68: b538 push {r3, r4, r5, lr} -1003dd6a: 2300 movs r3, #0 -1003dd6c: 4c05 ldr r4, [pc, #20] ; (1003dd84 <_sbrk_r+0x1c>) -1003dd6e: 4605 mov r5, r0 -1003dd70: 4608 mov r0, r1 -1003dd72: 6023 str r3, [r4, #0] -1003dd74: f000 fd4a bl 1003e80c <_sbrk> -1003dd78: 1c43 adds r3, r0, #1 -1003dd7a: d102 bne.n 1003dd82 <_sbrk_r+0x1a> -1003dd7c: 6823 ldr r3, [r4, #0] -1003dd7e: b103 cbz r3, 1003dd82 <_sbrk_r+0x1a> -1003dd80: 602b str r3, [r5, #0] -1003dd82: bd38 pop {r3, r4, r5, pc} -1003dd84: 10049a88 .word 0x10049a88 - -1003dd88 : -1003dd88: b40e push {r1, r2, r3} -1003dd8a: f44f 7201 mov.w r2, #516 ; 0x204 -1003dd8e: b530 push {r4, r5, lr} -1003dd90: b09c sub sp, #112 ; 0x70 -1003dd92: ac1f add r4, sp, #124 ; 0x7c -1003dd94: f854 5b04 ldr.w r5, [r4], #4 -1003dd98: f8ad 2014 strh.w r2, [sp, #20] -1003dd9c: 9002 str r0, [sp, #8] -1003dd9e: 9006 str r0, [sp, #24] -1003dda0: f000 f81e bl 1003dde0 -1003dda4: 4b0b ldr r3, [pc, #44] ; (1003ddd4 ) -1003dda6: 9003 str r0, [sp, #12] -1003dda8: 930b str r3, [sp, #44] ; 0x2c -1003ddaa: 2300 movs r3, #0 -1003ddac: 930f str r3, [sp, #60] ; 0x3c -1003ddae: 9314 str r3, [sp, #80] ; 0x50 -1003ddb0: f64f 73ff movw r3, #65535 ; 0xffff -1003ddb4: 9007 str r0, [sp, #28] -1003ddb6: 4808 ldr r0, [pc, #32] ; (1003ddd8 ) -1003ddb8: f8ad 3016 strh.w r3, [sp, #22] -1003ddbc: 462a mov r2, r5 -1003ddbe: 4623 mov r3, r4 -1003ddc0: a902 add r1, sp, #8 -1003ddc2: 6800 ldr r0, [r0, #0] -1003ddc4: 9401 str r4, [sp, #4] -1003ddc6: f000 f893 bl 1003def0 <__ssvfiscanf_r> -1003ddca: b01c add sp, #112 ; 0x70 -1003ddcc: e8bd 4030 ldmia.w sp!, {r4, r5, lr} -1003ddd0: b003 add sp, #12 -1003ddd2: 4770 bx lr -1003ddd4: 1003dddd .word 0x1003dddd -1003ddd8: 1004649c .word 0x1004649c - -1003dddc <__seofread>: -1003dddc: 2000 movs r0, #0 -1003ddde: 4770 bx lr - -1003dde0 : -1003dde0: 4603 mov r3, r0 -1003dde2: f813 2b01 ldrb.w r2, [r3], #1 -1003dde6: 2a00 cmp r2, #0 -1003dde8: d1fb bne.n 1003dde2 -1003ddea: 1a18 subs r0, r3, r0 -1003ddec: 3801 subs r0, #1 -1003ddee: 4770 bx lr - -1003ddf0 <__locale_ctype_ptr_l>: -1003ddf0: f8d0 00ec ldr.w r0, [r0, #236] ; 0xec -1003ddf4: 4770 bx lr - ... - -1003ddf8 <__locale_ctype_ptr>: -1003ddf8: 4b04 ldr r3, [pc, #16] ; (1003de0c <__locale_ctype_ptr+0x14>) -1003ddfa: 4a05 ldr r2, [pc, #20] ; (1003de10 <__locale_ctype_ptr+0x18>) -1003ddfc: 681b ldr r3, [r3, #0] -1003ddfe: 6a1b ldr r3, [r3, #32] -1003de00: 2b00 cmp r3, #0 -1003de02: bf08 it eq -1003de04: 4613 moveq r3, r2 -1003de06: f8d3 00ec ldr.w r0, [r3, #236] ; 0xec -1003de0a: 4770 bx lr -1003de0c: 1004649c .word 0x1004649c -1003de10: 10046500 .word 0x10046500 - -1003de14 <__ascii_mbtowc>: -1003de14: b082 sub sp, #8 -1003de16: b901 cbnz r1, 1003de1a <__ascii_mbtowc+0x6> -1003de18: a901 add r1, sp, #4 -1003de1a: b142 cbz r2, 1003de2e <__ascii_mbtowc+0x1a> -1003de1c: b14b cbz r3, 1003de32 <__ascii_mbtowc+0x1e> -1003de1e: 7813 ldrb r3, [r2, #0] -1003de20: 600b str r3, [r1, #0] -1003de22: 7812 ldrb r2, [r2, #0] -1003de24: 1c10 adds r0, r2, #0 -1003de26: bf18 it ne -1003de28: 2001 movne r0, #1 -1003de2a: b002 add sp, #8 -1003de2c: 4770 bx lr -1003de2e: 4610 mov r0, r2 -1003de30: e7fb b.n 1003de2a <__ascii_mbtowc+0x16> -1003de32: f06f 0001 mvn.w r0, #1 -1003de36: e7f8 b.n 1003de2a <__ascii_mbtowc+0x16> - -1003de38 <__malloc_lock>: -1003de38: 4770 bx lr - -1003de3a <__malloc_unlock>: -1003de3a: 4770 bx lr - -1003de3c <_sungetc_r>: -1003de3c: b538 push {r3, r4, r5, lr} -1003de3e: 1c4b adds r3, r1, #1 -1003de40: 4614 mov r4, r2 -1003de42: d103 bne.n 1003de4c <_sungetc_r+0x10> -1003de44: f04f 35ff mov.w r5, #4294967295 -1003de48: 4628 mov r0, r5 -1003de4a: bd38 pop {r3, r4, r5, pc} -1003de4c: 8993 ldrh r3, [r2, #12] -1003de4e: b2cd uxtb r5, r1 -1003de50: f023 0320 bic.w r3, r3, #32 -1003de54: 8193 strh r3, [r2, #12] -1003de56: 6b53 ldr r3, [r2, #52] ; 0x34 -1003de58: 6852 ldr r2, [r2, #4] -1003de5a: b18b cbz r3, 1003de80 <_sungetc_r+0x44> -1003de5c: 6ba3 ldr r3, [r4, #56] ; 0x38 -1003de5e: 429a cmp r2, r3 -1003de60: da08 bge.n 1003de74 <_sungetc_r+0x38> -1003de62: 6823 ldr r3, [r4, #0] -1003de64: 1e5a subs r2, r3, #1 -1003de66: 6022 str r2, [r4, #0] -1003de68: f803 5c01 strb.w r5, [r3, #-1] -1003de6c: 6863 ldr r3, [r4, #4] -1003de6e: 3301 adds r3, #1 -1003de70: 6063 str r3, [r4, #4] -1003de72: e7e9 b.n 1003de48 <_sungetc_r+0xc> -1003de74: 4621 mov r1, r4 -1003de76: f000 fc3b bl 1003e6f0 <__submore> -1003de7a: 2800 cmp r0, #0 -1003de7c: d0f1 beq.n 1003de62 <_sungetc_r+0x26> -1003de7e: e7e1 b.n 1003de44 <_sungetc_r+0x8> -1003de80: 6921 ldr r1, [r4, #16] -1003de82: 6823 ldr r3, [r4, #0] -1003de84: b151 cbz r1, 1003de9c <_sungetc_r+0x60> -1003de86: 4299 cmp r1, r3 -1003de88: d208 bcs.n 1003de9c <_sungetc_r+0x60> -1003de8a: f813 1c01 ldrb.w r1, [r3, #-1] -1003de8e: 428d cmp r5, r1 -1003de90: d104 bne.n 1003de9c <_sungetc_r+0x60> -1003de92: 3b01 subs r3, #1 -1003de94: 3201 adds r2, #1 -1003de96: 6023 str r3, [r4, #0] -1003de98: 6062 str r2, [r4, #4] -1003de9a: e7d5 b.n 1003de48 <_sungetc_r+0xc> -1003de9c: 63e3 str r3, [r4, #60] ; 0x3c -1003de9e: f104 0344 add.w r3, r4, #68 ; 0x44 -1003dea2: 6363 str r3, [r4, #52] ; 0x34 -1003dea4: 2303 movs r3, #3 -1003dea6: 63a3 str r3, [r4, #56] ; 0x38 -1003dea8: 4623 mov r3, r4 -1003deaa: 6422 str r2, [r4, #64] ; 0x40 -1003deac: f803 5f46 strb.w r5, [r3, #70]! -1003deb0: 6023 str r3, [r4, #0] -1003deb2: 2301 movs r3, #1 -1003deb4: e7dc b.n 1003de70 <_sungetc_r+0x34> - -1003deb6 <__ssrefill_r>: -1003deb6: b510 push {r4, lr} -1003deb8: 460c mov r4, r1 -1003deba: 6b49 ldr r1, [r1, #52] ; 0x34 -1003debc: b169 cbz r1, 1003deda <__ssrefill_r+0x24> -1003debe: f104 0344 add.w r3, r4, #68 ; 0x44 -1003dec2: 4299 cmp r1, r3 -1003dec4: d001 beq.n 1003deca <__ssrefill_r+0x14> -1003dec6: f7ff fea5 bl 1003dc14 <_free_r> -1003deca: 2000 movs r0, #0 -1003decc: 6c23 ldr r3, [r4, #64] ; 0x40 -1003dece: 6360 str r0, [r4, #52] ; 0x34 -1003ded0: 6063 str r3, [r4, #4] -1003ded2: b113 cbz r3, 1003deda <__ssrefill_r+0x24> -1003ded4: 6be3 ldr r3, [r4, #60] ; 0x3c -1003ded6: 6023 str r3, [r4, #0] -1003ded8: bd10 pop {r4, pc} -1003deda: 6923 ldr r3, [r4, #16] -1003dedc: f04f 30ff mov.w r0, #4294967295 -1003dee0: 6023 str r3, [r4, #0] -1003dee2: 2300 movs r3, #0 -1003dee4: 6063 str r3, [r4, #4] -1003dee6: 89a3 ldrh r3, [r4, #12] -1003dee8: f043 0320 orr.w r3, r3, #32 -1003deec: 81a3 strh r3, [r4, #12] -1003deee: bd10 pop {r4, pc} - -1003def0 <__ssvfiscanf_r>: -1003def0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1003def4: f5ad 7d25 sub.w sp, sp, #660 ; 0x294 -1003def8: 9301 str r3, [sp, #4] -1003defa: 2300 movs r3, #0 -1003defc: 4606 mov r6, r0 -1003defe: 460c mov r4, r1 -1003df00: 4692 mov sl, r2 -1003df02: 270a movs r7, #10 -1003df04: 9346 str r3, [sp, #280] ; 0x118 -1003df06: 9347 str r3, [sp, #284] ; 0x11c -1003df08: 4b9f ldr r3, [pc, #636] ; (1003e188 <__ssvfiscanf_r+0x298>) -1003df0a: f10d 080c add.w r8, sp, #12 -1003df0e: 93a2 str r3, [sp, #648] ; 0x288 -1003df10: 4b9e ldr r3, [pc, #632] ; (1003e18c <__ssvfiscanf_r+0x29c>) -1003df12: f8df 927c ldr.w r9, [pc, #636] ; 1003e190 <__ssvfiscanf_r+0x2a0> -1003df16: f8cd 8120 str.w r8, [sp, #288] ; 0x120 -1003df1a: 93a3 str r3, [sp, #652] ; 0x28c -1003df1c: f89a 3000 ldrb.w r3, [sl] -1003df20: 2b00 cmp r3, #0 -1003df22: f000 812f beq.w 1003e184 <__ssvfiscanf_r+0x294> -1003df26: f7ff ff67 bl 1003ddf8 <__locale_ctype_ptr> -1003df2a: f89a b000 ldrb.w fp, [sl] -1003df2e: 4458 add r0, fp -1003df30: 7843 ldrb r3, [r0, #1] -1003df32: f013 0308 ands.w r3, r3, #8 -1003df36: d143 bne.n 1003dfc0 <__ssvfiscanf_r+0xd0> -1003df38: f1bb 0f25 cmp.w fp, #37 ; 0x25 -1003df3c: f10a 0501 add.w r5, sl, #1 -1003df40: f040 8099 bne.w 1003e076 <__ssvfiscanf_r+0x186> -1003df44: 9345 str r3, [sp, #276] ; 0x114 -1003df46: 9343 str r3, [sp, #268] ; 0x10c -1003df48: f89a 3001 ldrb.w r3, [sl, #1] -1003df4c: 2b2a cmp r3, #42 ; 0x2a -1003df4e: d103 bne.n 1003df58 <__ssvfiscanf_r+0x68> -1003df50: 2310 movs r3, #16 -1003df52: f10a 0502 add.w r5, sl, #2 -1003df56: 9343 str r3, [sp, #268] ; 0x10c -1003df58: 7829 ldrb r1, [r5, #0] -1003df5a: 46aa mov sl, r5 -1003df5c: f1a1 0230 sub.w r2, r1, #48 ; 0x30 -1003df60: 2a09 cmp r2, #9 -1003df62: f105 0501 add.w r5, r5, #1 -1003df66: d941 bls.n 1003dfec <__ssvfiscanf_r+0xfc> -1003df68: 2203 movs r2, #3 -1003df6a: 4889 ldr r0, [pc, #548] ; (1003e190 <__ssvfiscanf_r+0x2a0>) -1003df6c: f000 fc06 bl 1003e77c -1003df70: b138 cbz r0, 1003df82 <__ssvfiscanf_r+0x92> -1003df72: eba0 0309 sub.w r3, r0, r9 -1003df76: 2001 movs r0, #1 -1003df78: 46aa mov sl, r5 -1003df7a: 4098 lsls r0, r3 -1003df7c: 9b43 ldr r3, [sp, #268] ; 0x10c -1003df7e: 4318 orrs r0, r3 -1003df80: 9043 str r0, [sp, #268] ; 0x10c -1003df82: f89a 3000 ldrb.w r3, [sl] -1003df86: f10a 0501 add.w r5, sl, #1 -1003df8a: 2b67 cmp r3, #103 ; 0x67 -1003df8c: d84a bhi.n 1003e024 <__ssvfiscanf_r+0x134> -1003df8e: 2b65 cmp r3, #101 ; 0x65 -1003df90: f080 80b7 bcs.w 1003e102 <__ssvfiscanf_r+0x212> -1003df94: 2b47 cmp r3, #71 ; 0x47 -1003df96: d82f bhi.n 1003dff8 <__ssvfiscanf_r+0x108> -1003df98: 2b45 cmp r3, #69 ; 0x45 -1003df9a: f080 80b2 bcs.w 1003e102 <__ssvfiscanf_r+0x212> -1003df9e: 2b00 cmp r3, #0 -1003dfa0: f000 8082 beq.w 1003e0a8 <__ssvfiscanf_r+0x1b8> -1003dfa4: 2b25 cmp r3, #37 ; 0x25 -1003dfa6: d066 beq.n 1003e076 <__ssvfiscanf_r+0x186> -1003dfa8: 2303 movs r3, #3 -1003dfaa: 9744 str r7, [sp, #272] ; 0x110 -1003dfac: 9349 str r3, [sp, #292] ; 0x124 -1003dfae: e045 b.n 1003e03c <__ssvfiscanf_r+0x14c> -1003dfb0: 9947 ldr r1, [sp, #284] ; 0x11c -1003dfb2: 3301 adds r3, #1 -1003dfb4: 3101 adds r1, #1 -1003dfb6: 9147 str r1, [sp, #284] ; 0x11c -1003dfb8: 6861 ldr r1, [r4, #4] -1003dfba: 6023 str r3, [r4, #0] -1003dfbc: 3901 subs r1, #1 -1003dfbe: 6061 str r1, [r4, #4] -1003dfc0: 6863 ldr r3, [r4, #4] -1003dfc2: 2b00 cmp r3, #0 -1003dfc4: dd0b ble.n 1003dfde <__ssvfiscanf_r+0xee> -1003dfc6: f7ff ff17 bl 1003ddf8 <__locale_ctype_ptr> -1003dfca: 6823 ldr r3, [r4, #0] -1003dfcc: 7819 ldrb r1, [r3, #0] -1003dfce: 4408 add r0, r1 -1003dfd0: 7841 ldrb r1, [r0, #1] -1003dfd2: 070d lsls r5, r1, #28 -1003dfd4: d4ec bmi.n 1003dfb0 <__ssvfiscanf_r+0xc0> -1003dfd6: f10a 0501 add.w r5, sl, #1 -1003dfda: 46aa mov sl, r5 -1003dfdc: e79e b.n 1003df1c <__ssvfiscanf_r+0x2c> -1003dfde: 9ba3 ldr r3, [sp, #652] ; 0x28c -1003dfe0: 4621 mov r1, r4 -1003dfe2: 4630 mov r0, r6 -1003dfe4: 4798 blx r3 -1003dfe6: 2800 cmp r0, #0 -1003dfe8: d0ed beq.n 1003dfc6 <__ssvfiscanf_r+0xd6> -1003dfea: e7f4 b.n 1003dfd6 <__ssvfiscanf_r+0xe6> -1003dfec: 9b45 ldr r3, [sp, #276] ; 0x114 -1003dfee: fb07 1303 mla r3, r7, r3, r1 -1003dff2: 3b30 subs r3, #48 ; 0x30 -1003dff4: 9345 str r3, [sp, #276] ; 0x114 -1003dff6: e7af b.n 1003df58 <__ssvfiscanf_r+0x68> -1003dff8: 2b5b cmp r3, #91 ; 0x5b -1003dffa: d061 beq.n 1003e0c0 <__ssvfiscanf_r+0x1d0> -1003dffc: d80c bhi.n 1003e018 <__ssvfiscanf_r+0x128> -1003dffe: 2b58 cmp r3, #88 ; 0x58 -1003e000: d1d2 bne.n 1003dfa8 <__ssvfiscanf_r+0xb8> -1003e002: 9a43 ldr r2, [sp, #268] ; 0x10c -1003e004: f442 7200 orr.w r2, r2, #512 ; 0x200 -1003e008: 9243 str r2, [sp, #268] ; 0x10c -1003e00a: 2210 movs r2, #16 -1003e00c: 9244 str r2, [sp, #272] ; 0x110 -1003e00e: 2b6f cmp r3, #111 ; 0x6f -1003e010: bfb4 ite lt -1003e012: 2303 movlt r3, #3 -1003e014: 2304 movge r3, #4 -1003e016: e010 b.n 1003e03a <__ssvfiscanf_r+0x14a> -1003e018: 2b63 cmp r3, #99 ; 0x63 -1003e01a: d05c beq.n 1003e0d6 <__ssvfiscanf_r+0x1e6> -1003e01c: 2b64 cmp r3, #100 ; 0x64 -1003e01e: d1c3 bne.n 1003dfa8 <__ssvfiscanf_r+0xb8> -1003e020: 9744 str r7, [sp, #272] ; 0x110 -1003e022: e7f4 b.n 1003e00e <__ssvfiscanf_r+0x11e> -1003e024: 2b70 cmp r3, #112 ; 0x70 -1003e026: d042 beq.n 1003e0ae <__ssvfiscanf_r+0x1be> -1003e028: d81d bhi.n 1003e066 <__ssvfiscanf_r+0x176> -1003e02a: 2b6e cmp r3, #110 ; 0x6e -1003e02c: d059 beq.n 1003e0e2 <__ssvfiscanf_r+0x1f2> -1003e02e: d843 bhi.n 1003e0b8 <__ssvfiscanf_r+0x1c8> -1003e030: 2b69 cmp r3, #105 ; 0x69 -1003e032: d1b9 bne.n 1003dfa8 <__ssvfiscanf_r+0xb8> -1003e034: 2300 movs r3, #0 -1003e036: 9344 str r3, [sp, #272] ; 0x110 -1003e038: 2303 movs r3, #3 -1003e03a: 9349 str r3, [sp, #292] ; 0x124 -1003e03c: 6863 ldr r3, [r4, #4] -1003e03e: 2b00 cmp r3, #0 -1003e040: dd61 ble.n 1003e106 <__ssvfiscanf_r+0x216> -1003e042: 9b43 ldr r3, [sp, #268] ; 0x10c -1003e044: 0659 lsls r1, r3, #25 -1003e046: d56f bpl.n 1003e128 <__ssvfiscanf_r+0x238> -1003e048: 9b49 ldr r3, [sp, #292] ; 0x124 -1003e04a: 2b02 cmp r3, #2 -1003e04c: dc7c bgt.n 1003e148 <__ssvfiscanf_r+0x258> -1003e04e: ab01 add r3, sp, #4 -1003e050: 4622 mov r2, r4 -1003e052: a943 add r1, sp, #268 ; 0x10c -1003e054: 4630 mov r0, r6 -1003e056: f000 f89f bl 1003e198 <_scanf_chars> -1003e05a: 2801 cmp r0, #1 -1003e05c: f000 8092 beq.w 1003e184 <__ssvfiscanf_r+0x294> -1003e060: 2802 cmp r0, #2 -1003e062: d1ba bne.n 1003dfda <__ssvfiscanf_r+0xea> -1003e064: e01d b.n 1003e0a2 <__ssvfiscanf_r+0x1b2> -1003e066: 2b75 cmp r3, #117 ; 0x75 -1003e068: d0da beq.n 1003e020 <__ssvfiscanf_r+0x130> -1003e06a: 2b78 cmp r3, #120 ; 0x78 -1003e06c: d0c9 beq.n 1003e002 <__ssvfiscanf_r+0x112> -1003e06e: 2b73 cmp r3, #115 ; 0x73 -1003e070: d19a bne.n 1003dfa8 <__ssvfiscanf_r+0xb8> -1003e072: 2302 movs r3, #2 -1003e074: e7e1 b.n 1003e03a <__ssvfiscanf_r+0x14a> -1003e076: 6863 ldr r3, [r4, #4] -1003e078: 2b00 cmp r3, #0 -1003e07a: dd0c ble.n 1003e096 <__ssvfiscanf_r+0x1a6> -1003e07c: 6823 ldr r3, [r4, #0] -1003e07e: 781a ldrb r2, [r3, #0] -1003e080: 4593 cmp fp, r2 -1003e082: d17f bne.n 1003e184 <__ssvfiscanf_r+0x294> -1003e084: 3301 adds r3, #1 -1003e086: 6862 ldr r2, [r4, #4] -1003e088: 6023 str r3, [r4, #0] -1003e08a: 9b47 ldr r3, [sp, #284] ; 0x11c -1003e08c: 3a01 subs r2, #1 -1003e08e: 3301 adds r3, #1 -1003e090: 6062 str r2, [r4, #4] -1003e092: 9347 str r3, [sp, #284] ; 0x11c -1003e094: e7a1 b.n 1003dfda <__ssvfiscanf_r+0xea> -1003e096: 9ba3 ldr r3, [sp, #652] ; 0x28c -1003e098: 4621 mov r1, r4 -1003e09a: 4630 mov r0, r6 -1003e09c: 4798 blx r3 -1003e09e: 2800 cmp r0, #0 -1003e0a0: d0ec beq.n 1003e07c <__ssvfiscanf_r+0x18c> -1003e0a2: 9846 ldr r0, [sp, #280] ; 0x118 -1003e0a4: 2800 cmp r0, #0 -1003e0a6: d163 bne.n 1003e170 <__ssvfiscanf_r+0x280> -1003e0a8: f04f 30ff mov.w r0, #4294967295 -1003e0ac: e066 b.n 1003e17c <__ssvfiscanf_r+0x28c> -1003e0ae: 9a43 ldr r2, [sp, #268] ; 0x10c -1003e0b0: f042 0220 orr.w r2, r2, #32 -1003e0b4: 9243 str r2, [sp, #268] ; 0x10c -1003e0b6: e7a4 b.n 1003e002 <__ssvfiscanf_r+0x112> -1003e0b8: 2308 movs r3, #8 -1003e0ba: 9344 str r3, [sp, #272] ; 0x110 -1003e0bc: 2304 movs r3, #4 -1003e0be: e7bc b.n 1003e03a <__ssvfiscanf_r+0x14a> -1003e0c0: 4629 mov r1, r5 -1003e0c2: 4640 mov r0, r8 -1003e0c4: f000 f9c2 bl 1003e44c <__sccl> -1003e0c8: 9b43 ldr r3, [sp, #268] ; 0x10c -1003e0ca: 4605 mov r5, r0 -1003e0cc: f043 0340 orr.w r3, r3, #64 ; 0x40 -1003e0d0: 9343 str r3, [sp, #268] ; 0x10c -1003e0d2: 2301 movs r3, #1 -1003e0d4: e7b1 b.n 1003e03a <__ssvfiscanf_r+0x14a> -1003e0d6: 9b43 ldr r3, [sp, #268] ; 0x10c -1003e0d8: f043 0340 orr.w r3, r3, #64 ; 0x40 -1003e0dc: 9343 str r3, [sp, #268] ; 0x10c -1003e0de: 2300 movs r3, #0 -1003e0e0: e7ab b.n 1003e03a <__ssvfiscanf_r+0x14a> -1003e0e2: 9a43 ldr r2, [sp, #268] ; 0x10c -1003e0e4: 06d0 lsls r0, r2, #27 -1003e0e6: f53f af78 bmi.w 1003dfda <__ssvfiscanf_r+0xea> -1003e0ea: f012 0f01 tst.w r2, #1 -1003e0ee: 9a01 ldr r2, [sp, #4] -1003e0f0: 9b47 ldr r3, [sp, #284] ; 0x11c -1003e0f2: f102 0104 add.w r1, r2, #4 -1003e0f6: 9101 str r1, [sp, #4] -1003e0f8: 6812 ldr r2, [r2, #0] -1003e0fa: bf14 ite ne -1003e0fc: 8013 strhne r3, [r2, #0] -1003e0fe: 6013 streq r3, [r2, #0] -1003e100: e76b b.n 1003dfda <__ssvfiscanf_r+0xea> -1003e102: 2305 movs r3, #5 -1003e104: e799 b.n 1003e03a <__ssvfiscanf_r+0x14a> -1003e106: 9ba3 ldr r3, [sp, #652] ; 0x28c -1003e108: 4621 mov r1, r4 -1003e10a: 4630 mov r0, r6 -1003e10c: 4798 blx r3 -1003e10e: 2800 cmp r0, #0 -1003e110: d097 beq.n 1003e042 <__ssvfiscanf_r+0x152> -1003e112: e7c6 b.n 1003e0a2 <__ssvfiscanf_r+0x1b2> -1003e114: 9a47 ldr r2, [sp, #284] ; 0x11c -1003e116: 3201 adds r2, #1 -1003e118: 9247 str r2, [sp, #284] ; 0x11c -1003e11a: 6862 ldr r2, [r4, #4] -1003e11c: 3a01 subs r2, #1 -1003e11e: 2a00 cmp r2, #0 -1003e120: 6062 str r2, [r4, #4] -1003e122: dd0a ble.n 1003e13a <__ssvfiscanf_r+0x24a> -1003e124: 3301 adds r3, #1 -1003e126: 6023 str r3, [r4, #0] -1003e128: f7ff fe66 bl 1003ddf8 <__locale_ctype_ptr> -1003e12c: 6823 ldr r3, [r4, #0] -1003e12e: 781a ldrb r2, [r3, #0] -1003e130: 4410 add r0, r2 -1003e132: 7842 ldrb r2, [r0, #1] -1003e134: 0712 lsls r2, r2, #28 -1003e136: d4ed bmi.n 1003e114 <__ssvfiscanf_r+0x224> -1003e138: e786 b.n 1003e048 <__ssvfiscanf_r+0x158> -1003e13a: 9ba3 ldr r3, [sp, #652] ; 0x28c -1003e13c: 4621 mov r1, r4 -1003e13e: 4630 mov r0, r6 -1003e140: 4798 blx r3 -1003e142: 2800 cmp r0, #0 -1003e144: d0f0 beq.n 1003e128 <__ssvfiscanf_r+0x238> -1003e146: e7ac b.n 1003e0a2 <__ssvfiscanf_r+0x1b2> -1003e148: 2b04 cmp r3, #4 -1003e14a: dc06 bgt.n 1003e15a <__ssvfiscanf_r+0x26a> -1003e14c: ab01 add r3, sp, #4 -1003e14e: 4622 mov r2, r4 -1003e150: a943 add r1, sp, #268 ; 0x10c -1003e152: 4630 mov r0, r6 -1003e154: f000 f884 bl 1003e260 <_scanf_i> -1003e158: e77f b.n 1003e05a <__ssvfiscanf_r+0x16a> -1003e15a: 4b0e ldr r3, [pc, #56] ; (1003e194 <__ssvfiscanf_r+0x2a4>) -1003e15c: 2b00 cmp r3, #0 -1003e15e: f43f af3c beq.w 1003dfda <__ssvfiscanf_r+0xea> -1003e162: ab01 add r3, sp, #4 -1003e164: 4622 mov r2, r4 -1003e166: a943 add r1, sp, #268 ; 0x10c -1003e168: 4630 mov r0, r6 -1003e16a: f3af 8000 nop.w -1003e16e: e774 b.n 1003e05a <__ssvfiscanf_r+0x16a> -1003e170: 89a3 ldrh r3, [r4, #12] -1003e172: f013 0f40 tst.w r3, #64 ; 0x40 -1003e176: bf18 it ne -1003e178: f04f 30ff movne.w r0, #4294967295 -1003e17c: f50d 7d25 add.w sp, sp, #660 ; 0x294 -1003e180: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1003e184: 9846 ldr r0, [sp, #280] ; 0x118 -1003e186: e7f9 b.n 1003e17c <__ssvfiscanf_r+0x28c> -1003e188: 1003de3d .word 0x1003de3d -1003e18c: 1003deb7 .word 0x1003deb7 -1003e190: 100449eb .word 0x100449eb -1003e194: 00000000 .word 0x00000000 - -1003e198 <_scanf_chars>: -1003e198: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1003e19c: 4615 mov r5, r2 -1003e19e: 688a ldr r2, [r1, #8] -1003e1a0: 4680 mov r8, r0 -1003e1a2: 460c mov r4, r1 -1003e1a4: b932 cbnz r2, 1003e1b4 <_scanf_chars+0x1c> -1003e1a6: 698a ldr r2, [r1, #24] -1003e1a8: 2a00 cmp r2, #0 -1003e1aa: bf0c ite eq -1003e1ac: 2201 moveq r2, #1 -1003e1ae: f04f 32ff movne.w r2, #4294967295 -1003e1b2: 608a str r2, [r1, #8] -1003e1b4: 2600 movs r6, #0 -1003e1b6: 6822 ldr r2, [r4, #0] -1003e1b8: 06d1 lsls r1, r2, #27 -1003e1ba: bf5f itttt pl -1003e1bc: 681a ldrpl r2, [r3, #0] -1003e1be: 1d11 addpl r1, r2, #4 -1003e1c0: 6019 strpl r1, [r3, #0] -1003e1c2: 6817 ldrpl r7, [r2, #0] -1003e1c4: 69a3 ldr r3, [r4, #24] -1003e1c6: b1db cbz r3, 1003e200 <_scanf_chars+0x68> -1003e1c8: 2b01 cmp r3, #1 -1003e1ca: d107 bne.n 1003e1dc <_scanf_chars+0x44> -1003e1cc: 682b ldr r3, [r5, #0] -1003e1ce: 6962 ldr r2, [r4, #20] -1003e1d0: 781b ldrb r3, [r3, #0] -1003e1d2: 5cd3 ldrb r3, [r2, r3] -1003e1d4: b9a3 cbnz r3, 1003e200 <_scanf_chars+0x68> -1003e1d6: 2e00 cmp r6, #0 -1003e1d8: d131 bne.n 1003e23e <_scanf_chars+0xa6> -1003e1da: e006 b.n 1003e1ea <_scanf_chars+0x52> -1003e1dc: 2b02 cmp r3, #2 -1003e1de: d007 beq.n 1003e1f0 <_scanf_chars+0x58> -1003e1e0: 2e00 cmp r6, #0 -1003e1e2: d12c bne.n 1003e23e <_scanf_chars+0xa6> -1003e1e4: 69a3 ldr r3, [r4, #24] -1003e1e6: 2b01 cmp r3, #1 -1003e1e8: d129 bne.n 1003e23e <_scanf_chars+0xa6> -1003e1ea: 2001 movs r0, #1 -1003e1ec: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1003e1f0: f7ff fe02 bl 1003ddf8 <__locale_ctype_ptr> -1003e1f4: 682b ldr r3, [r5, #0] -1003e1f6: 781b ldrb r3, [r3, #0] -1003e1f8: 4418 add r0, r3 -1003e1fa: 7843 ldrb r3, [r0, #1] -1003e1fc: 071b lsls r3, r3, #28 -1003e1fe: d4ef bmi.n 1003e1e0 <_scanf_chars+0x48> -1003e200: 6823 ldr r3, [r4, #0] -1003e202: 3601 adds r6, #1 -1003e204: 06da lsls r2, r3, #27 -1003e206: bf5e ittt pl -1003e208: 682b ldrpl r3, [r5, #0] -1003e20a: 781b ldrbpl r3, [r3, #0] -1003e20c: 703b strbpl r3, [r7, #0] -1003e20e: 682a ldr r2, [r5, #0] -1003e210: 686b ldr r3, [r5, #4] -1003e212: f102 0201 add.w r2, r2, #1 -1003e216: 602a str r2, [r5, #0] -1003e218: 68a2 ldr r2, [r4, #8] -1003e21a: f103 33ff add.w r3, r3, #4294967295 -1003e21e: f102 32ff add.w r2, r2, #4294967295 -1003e222: 606b str r3, [r5, #4] -1003e224: bf58 it pl -1003e226: 3701 addpl r7, #1 -1003e228: 60a2 str r2, [r4, #8] -1003e22a: b142 cbz r2, 1003e23e <_scanf_chars+0xa6> -1003e22c: 2b00 cmp r3, #0 -1003e22e: dcc9 bgt.n 1003e1c4 <_scanf_chars+0x2c> -1003e230: f8d4 3180 ldr.w r3, [r4, #384] ; 0x180 -1003e234: 4629 mov r1, r5 -1003e236: 4640 mov r0, r8 -1003e238: 4798 blx r3 -1003e23a: 2800 cmp r0, #0 -1003e23c: d0c2 beq.n 1003e1c4 <_scanf_chars+0x2c> -1003e23e: 6823 ldr r3, [r4, #0] -1003e240: f013 0310 ands.w r3, r3, #16 -1003e244: d105 bne.n 1003e252 <_scanf_chars+0xba> -1003e246: 68e2 ldr r2, [r4, #12] -1003e248: 3201 adds r2, #1 -1003e24a: 60e2 str r2, [r4, #12] -1003e24c: 69a2 ldr r2, [r4, #24] -1003e24e: b102 cbz r2, 1003e252 <_scanf_chars+0xba> -1003e250: 703b strb r3, [r7, #0] -1003e252: 6923 ldr r3, [r4, #16] -1003e254: 2000 movs r0, #0 -1003e256: 441e add r6, r3 -1003e258: 6126 str r6, [r4, #16] -1003e25a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - ... - -1003e260 <_scanf_i>: -1003e260: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} -1003e264: 460c mov r4, r1 -1003e266: 469a mov sl, r3 -1003e268: 4b74 ldr r3, [pc, #464] ; (1003e43c <_scanf_i+0x1dc>) -1003e26a: b087 sub sp, #28 -1003e26c: 4683 mov fp, r0 -1003e26e: 4616 mov r6, r2 -1003e270: e893 0007 ldmia.w r3, {r0, r1, r2} -1003e274: ab03 add r3, sp, #12 -1003e276: 68a7 ldr r7, [r4, #8] -1003e278: e883 0007 stmia.w r3, {r0, r1, r2} -1003e27c: 4b70 ldr r3, [pc, #448] ; (1003e440 <_scanf_i+0x1e0>) -1003e27e: 69a1 ldr r1, [r4, #24] -1003e280: 4a70 ldr r2, [pc, #448] ; (1003e444 <_scanf_i+0x1e4>) -1003e282: f104 091c add.w r9, r4, #28 -1003e286: 2903 cmp r1, #3 -1003e288: bf18 it ne -1003e28a: 461a movne r2, r3 -1003e28c: 1e7b subs r3, r7, #1 -1003e28e: f5b3 7fae cmp.w r3, #348 ; 0x15c -1003e292: bf84 itt hi -1003e294: f240 135d movwhi r3, #349 ; 0x15d -1003e298: 60a3 strhi r3, [r4, #8] -1003e29a: 6823 ldr r3, [r4, #0] -1003e29c: bf88 it hi -1003e29e: f46f 75ae mvnhi.w r5, #348 ; 0x15c -1003e2a2: f443 6350 orr.w r3, r3, #3328 ; 0xd00 -1003e2a6: 6023 str r3, [r4, #0] -1003e2a8: bf98 it ls -1003e2aa: 2700 movls r7, #0 -1003e2ac: 464b mov r3, r9 -1003e2ae: f04f 0800 mov.w r8, #0 -1003e2b2: 9200 str r2, [sp, #0] -1003e2b4: bf88 it hi -1003e2b6: 197f addhi r7, r7, r5 -1003e2b8: 6831 ldr r1, [r6, #0] -1003e2ba: 9301 str r3, [sp, #4] -1003e2bc: ab03 add r3, sp, #12 -1003e2be: f853 0028 ldr.w r0, [r3, r8, lsl #2] -1003e2c2: 2202 movs r2, #2 -1003e2c4: 7809 ldrb r1, [r1, #0] -1003e2c6: f000 fa59 bl 1003e77c -1003e2ca: 9b01 ldr r3, [sp, #4] -1003e2cc: b328 cbz r0, 1003e31a <_scanf_i+0xba> -1003e2ce: f1b8 0f01 cmp.w r8, #1 -1003e2d2: d156 bne.n 1003e382 <_scanf_i+0x122> -1003e2d4: 6862 ldr r2, [r4, #4] -1003e2d6: b92a cbnz r2, 1003e2e4 <_scanf_i+0x84> -1003e2d8: 2208 movs r2, #8 -1003e2da: 6062 str r2, [r4, #4] -1003e2dc: 6822 ldr r2, [r4, #0] -1003e2de: f442 7200 orr.w r2, r2, #512 ; 0x200 -1003e2e2: 6022 str r2, [r4, #0] -1003e2e4: 6822 ldr r2, [r4, #0] -1003e2e6: f422 62a0 bic.w r2, r2, #1280 ; 0x500 -1003e2ea: 6022 str r2, [r4, #0] -1003e2ec: 68a2 ldr r2, [r4, #8] -1003e2ee: 1e51 subs r1, r2, #1 -1003e2f0: 60a1 str r1, [r4, #8] -1003e2f2: b192 cbz r2, 1003e31a <_scanf_i+0xba> -1003e2f4: 6832 ldr r2, [r6, #0] -1003e2f6: 1c5d adds r5, r3, #1 -1003e2f8: 1c51 adds r1, r2, #1 -1003e2fa: 6031 str r1, [r6, #0] -1003e2fc: 7812 ldrb r2, [r2, #0] -1003e2fe: 701a strb r2, [r3, #0] -1003e300: 6873 ldr r3, [r6, #4] -1003e302: 3b01 subs r3, #1 -1003e304: 2b00 cmp r3, #0 -1003e306: 6073 str r3, [r6, #4] -1003e308: dc06 bgt.n 1003e318 <_scanf_i+0xb8> -1003e30a: f8d4 3180 ldr.w r3, [r4, #384] ; 0x180 -1003e30e: 4631 mov r1, r6 -1003e310: 4658 mov r0, fp -1003e312: 4798 blx r3 -1003e314: 2800 cmp r0, #0 -1003e316: d177 bne.n 1003e408 <_scanf_i+0x1a8> -1003e318: 462b mov r3, r5 -1003e31a: f108 0801 add.w r8, r8, #1 -1003e31e: f1b8 0f03 cmp.w r8, #3 -1003e322: d1c9 bne.n 1003e2b8 <_scanf_i+0x58> -1003e324: 6862 ldr r2, [r4, #4] -1003e326: b90a cbnz r2, 1003e32c <_scanf_i+0xcc> -1003e328: 220a movs r2, #10 -1003e32a: 6062 str r2, [r4, #4] -1003e32c: 6862 ldr r2, [r4, #4] -1003e32e: 4946 ldr r1, [pc, #280] ; (1003e448 <_scanf_i+0x1e8>) -1003e330: 6960 ldr r0, [r4, #20] -1003e332: 1a89 subs r1, r1, r2 -1003e334: 9301 str r3, [sp, #4] -1003e336: f000 f889 bl 1003e44c <__sccl> -1003e33a: 9b01 ldr r3, [sp, #4] -1003e33c: f04f 0800 mov.w r8, #0 -1003e340: 461d mov r5, r3 -1003e342: 68a3 ldr r3, [r4, #8] -1003e344: 2b00 cmp r3, #0 -1003e346: d039 beq.n 1003e3bc <_scanf_i+0x15c> -1003e348: 6831 ldr r1, [r6, #0] -1003e34a: 6960 ldr r0, [r4, #20] -1003e34c: 780a ldrb r2, [r1, #0] -1003e34e: 5c80 ldrb r0, [r0, r2] -1003e350: 2800 cmp r0, #0 -1003e352: d033 beq.n 1003e3bc <_scanf_i+0x15c> -1003e354: 2a30 cmp r2, #48 ; 0x30 -1003e356: 6822 ldr r2, [r4, #0] -1003e358: d121 bne.n 1003e39e <_scanf_i+0x13e> -1003e35a: 0510 lsls r0, r2, #20 -1003e35c: d51f bpl.n 1003e39e <_scanf_i+0x13e> -1003e35e: f108 0801 add.w r8, r8, #1 -1003e362: b117 cbz r7, 1003e36a <_scanf_i+0x10a> -1003e364: 3301 adds r3, #1 -1003e366: 3f01 subs r7, #1 -1003e368: 60a3 str r3, [r4, #8] -1003e36a: 6873 ldr r3, [r6, #4] -1003e36c: 3b01 subs r3, #1 -1003e36e: 2b00 cmp r3, #0 -1003e370: 6073 str r3, [r6, #4] -1003e372: dd1c ble.n 1003e3ae <_scanf_i+0x14e> -1003e374: 6833 ldr r3, [r6, #0] -1003e376: 3301 adds r3, #1 -1003e378: 6033 str r3, [r6, #0] -1003e37a: 68a3 ldr r3, [r4, #8] -1003e37c: 3b01 subs r3, #1 -1003e37e: 60a3 str r3, [r4, #8] -1003e380: e7df b.n 1003e342 <_scanf_i+0xe2> -1003e382: f1b8 0f02 cmp.w r8, #2 -1003e386: d1b1 bne.n 1003e2ec <_scanf_i+0x8c> -1003e388: 6822 ldr r2, [r4, #0] -1003e38a: f402 61c0 and.w r1, r2, #1536 ; 0x600 -1003e38e: f5b1 7f00 cmp.w r1, #512 ; 0x200 -1003e392: d1c2 bne.n 1003e31a <_scanf_i+0xba> -1003e394: 2110 movs r1, #16 -1003e396: f442 7280 orr.w r2, r2, #256 ; 0x100 -1003e39a: 6061 str r1, [r4, #4] -1003e39c: e7a5 b.n 1003e2ea <_scanf_i+0x8a> -1003e39e: f422 6210 bic.w r2, r2, #2304 ; 0x900 -1003e3a2: 6022 str r2, [r4, #0] -1003e3a4: 780b ldrb r3, [r1, #0] -1003e3a6: 3501 adds r5, #1 -1003e3a8: f805 3c01 strb.w r3, [r5, #-1] -1003e3ac: e7dd b.n 1003e36a <_scanf_i+0x10a> -1003e3ae: f8d4 3180 ldr.w r3, [r4, #384] ; 0x180 -1003e3b2: 4631 mov r1, r6 -1003e3b4: 4658 mov r0, fp -1003e3b6: 4798 blx r3 -1003e3b8: 2800 cmp r0, #0 -1003e3ba: d0de beq.n 1003e37a <_scanf_i+0x11a> -1003e3bc: 6823 ldr r3, [r4, #0] -1003e3be: 05d9 lsls r1, r3, #23 -1003e3c0: d50c bpl.n 1003e3dc <_scanf_i+0x17c> -1003e3c2: 454d cmp r5, r9 -1003e3c4: d908 bls.n 1003e3d8 <_scanf_i+0x178> -1003e3c6: f815 1c01 ldrb.w r1, [r5, #-1] -1003e3ca: 1e6f subs r7, r5, #1 -1003e3cc: f8d4 317c ldr.w r3, [r4, #380] ; 0x17c -1003e3d0: 4632 mov r2, r6 -1003e3d2: 4658 mov r0, fp -1003e3d4: 4798 blx r3 -1003e3d6: 463d mov r5, r7 -1003e3d8: 454d cmp r5, r9 -1003e3da: d02c beq.n 1003e436 <_scanf_i+0x1d6> -1003e3dc: 6822 ldr r2, [r4, #0] -1003e3de: f012 0210 ands.w r2, r2, #16 -1003e3e2: d11e bne.n 1003e422 <_scanf_i+0x1c2> -1003e3e4: 702a strb r2, [r5, #0] -1003e3e6: 6863 ldr r3, [r4, #4] -1003e3e8: 4649 mov r1, r9 -1003e3ea: 4658 mov r0, fp -1003e3ec: 9e00 ldr r6, [sp, #0] -1003e3ee: 47b0 blx r6 -1003e3f0: 6822 ldr r2, [r4, #0] -1003e3f2: f8da 3000 ldr.w r3, [sl] -1003e3f6: f012 0f20 tst.w r2, #32 -1003e3fa: d008 beq.n 1003e40e <_scanf_i+0x1ae> -1003e3fc: 1d1a adds r2, r3, #4 -1003e3fe: f8ca 2000 str.w r2, [sl] -1003e402: 681b ldr r3, [r3, #0] -1003e404: 6018 str r0, [r3, #0] -1003e406: e009 b.n 1003e41c <_scanf_i+0x1bc> -1003e408: f04f 0800 mov.w r8, #0 -1003e40c: e7d6 b.n 1003e3bc <_scanf_i+0x15c> -1003e40e: 07d2 lsls r2, r2, #31 -1003e410: d5f4 bpl.n 1003e3fc <_scanf_i+0x19c> -1003e412: 1d1a adds r2, r3, #4 -1003e414: f8ca 2000 str.w r2, [sl] -1003e418: 681b ldr r3, [r3, #0] -1003e41a: 8018 strh r0, [r3, #0] -1003e41c: 68e3 ldr r3, [r4, #12] -1003e41e: 3301 adds r3, #1 -1003e420: 60e3 str r3, [r4, #12] -1003e422: 2000 movs r0, #0 -1003e424: eba5 0509 sub.w r5, r5, r9 -1003e428: 44a8 add r8, r5 -1003e42a: 6925 ldr r5, [r4, #16] -1003e42c: 4445 add r5, r8 -1003e42e: 6125 str r5, [r4, #16] -1003e430: b007 add sp, #28 -1003e432: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} -1003e436: 2001 movs r0, #1 -1003e438: e7fa b.n 1003e430 <_scanf_i+0x1d0> -1003e43a: bf00 nop -1003e43c: 100449f0 .word 0x100449f0 -1003e440: 1003e6cd .word 0x1003e6cd -1003e444: 1003e5ad .word 0x1003e5ad -1003e448: 10044a0c .word 0x10044a0c - -1003e44c <__sccl>: -1003e44c: b570 push {r4, r5, r6, lr} -1003e44e: 780b ldrb r3, [r1, #0] -1003e450: 1e44 subs r4, r0, #1 -1003e452: 2b5e cmp r3, #94 ; 0x5e -1003e454: bf13 iteet ne -1003e456: 1c4a addne r2, r1, #1 -1003e458: 1c8a addeq r2, r1, #2 -1003e45a: 784b ldrbeq r3, [r1, #1] -1003e45c: 2100 movne r1, #0 -1003e45e: bf08 it eq -1003e460: 2101 moveq r1, #1 -1003e462: f100 05ff add.w r5, r0, #255 ; 0xff -1003e466: f804 1f01 strb.w r1, [r4, #1]! -1003e46a: 42a5 cmp r5, r4 -1003e46c: d1fb bne.n 1003e466 <__sccl+0x1a> -1003e46e: b913 cbnz r3, 1003e476 <__sccl+0x2a> -1003e470: 3a01 subs r2, #1 -1003e472: 4610 mov r0, r2 -1003e474: bd70 pop {r4, r5, r6, pc} -1003e476: f081 0401 eor.w r4, r1, #1 -1003e47a: 4611 mov r1, r2 -1003e47c: 54c4 strb r4, [r0, r3] -1003e47e: 780d ldrb r5, [r1, #0] -1003e480: 1c4a adds r2, r1, #1 -1003e482: 2d2d cmp r5, #45 ; 0x2d -1003e484: d006 beq.n 1003e494 <__sccl+0x48> -1003e486: 2d5d cmp r5, #93 ; 0x5d -1003e488: d0f3 beq.n 1003e472 <__sccl+0x26> -1003e48a: b90d cbnz r5, 1003e490 <__sccl+0x44> -1003e48c: 460a mov r2, r1 -1003e48e: e7f0 b.n 1003e472 <__sccl+0x26> -1003e490: 462b mov r3, r5 -1003e492: e7f2 b.n 1003e47a <__sccl+0x2e> -1003e494: 784e ldrb r6, [r1, #1] -1003e496: 2e5d cmp r6, #93 ; 0x5d -1003e498: d0fa beq.n 1003e490 <__sccl+0x44> -1003e49a: 42b3 cmp r3, r6 -1003e49c: dcf8 bgt.n 1003e490 <__sccl+0x44> -1003e49e: 3102 adds r1, #2 -1003e4a0: 3301 adds r3, #1 -1003e4a2: 429e cmp r6, r3 -1003e4a4: 54c4 strb r4, [r0, r3] -1003e4a6: dcfb bgt.n 1003e4a0 <__sccl+0x54> -1003e4a8: e7e9 b.n 1003e47e <__sccl+0x32> - -1003e4aa <_strtol_l.isra.0>: -1003e4aa: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -1003e4ae: 4680 mov r8, r0 -1003e4b0: 4689 mov r9, r1 -1003e4b2: 4692 mov sl, r2 -1003e4b4: 461f mov r7, r3 -1003e4b6: 468b mov fp, r1 -1003e4b8: 465d mov r5, fp -1003e4ba: 980a ldr r0, [sp, #40] ; 0x28 -1003e4bc: f815 4b01 ldrb.w r4, [r5], #1 -1003e4c0: f7ff fc96 bl 1003ddf0 <__locale_ctype_ptr_l> -1003e4c4: 4420 add r0, r4 -1003e4c6: 7846 ldrb r6, [r0, #1] -1003e4c8: f016 0608 ands.w r6, r6, #8 -1003e4cc: d10b bne.n 1003e4e6 <_strtol_l.isra.0+0x3c> -1003e4ce: 2c2d cmp r4, #45 ; 0x2d -1003e4d0: d10b bne.n 1003e4ea <_strtol_l.isra.0+0x40> -1003e4d2: 2601 movs r6, #1 -1003e4d4: 782c ldrb r4, [r5, #0] -1003e4d6: f10b 0502 add.w r5, fp, #2 -1003e4da: b167 cbz r7, 1003e4f6 <_strtol_l.isra.0+0x4c> -1003e4dc: 2f10 cmp r7, #16 -1003e4de: d114 bne.n 1003e50a <_strtol_l.isra.0+0x60> -1003e4e0: 2c30 cmp r4, #48 ; 0x30 -1003e4e2: d00a beq.n 1003e4fa <_strtol_l.isra.0+0x50> -1003e4e4: e011 b.n 1003e50a <_strtol_l.isra.0+0x60> -1003e4e6: 46ab mov fp, r5 -1003e4e8: e7e6 b.n 1003e4b8 <_strtol_l.isra.0+0xe> -1003e4ea: 2c2b cmp r4, #43 ; 0x2b -1003e4ec: bf04 itt eq -1003e4ee: 782c ldrbeq r4, [r5, #0] -1003e4f0: f10b 0502 addeq.w r5, fp, #2 -1003e4f4: e7f1 b.n 1003e4da <_strtol_l.isra.0+0x30> -1003e4f6: 2c30 cmp r4, #48 ; 0x30 -1003e4f8: d127 bne.n 1003e54a <_strtol_l.isra.0+0xa0> -1003e4fa: 782b ldrb r3, [r5, #0] -1003e4fc: f003 03df and.w r3, r3, #223 ; 0xdf -1003e500: 2b58 cmp r3, #88 ; 0x58 -1003e502: d14b bne.n 1003e59c <_strtol_l.isra.0+0xf2> -1003e504: 2710 movs r7, #16 -1003e506: 786c ldrb r4, [r5, #1] -1003e508: 3502 adds r5, #2 -1003e50a: 2e00 cmp r6, #0 -1003e50c: bf0c ite eq -1003e50e: f06f 4100 mvneq.w r1, #2147483648 ; 0x80000000 -1003e512: f04f 4100 movne.w r1, #2147483648 ; 0x80000000 -1003e516: 2200 movs r2, #0 -1003e518: fbb1 fef7 udiv lr, r1, r7 -1003e51c: 4610 mov r0, r2 -1003e51e: fb07 1c1e mls ip, r7, lr, r1 -1003e522: f1a4 0330 sub.w r3, r4, #48 ; 0x30 -1003e526: 2b09 cmp r3, #9 -1003e528: d811 bhi.n 1003e54e <_strtol_l.isra.0+0xa4> -1003e52a: 461c mov r4, r3 -1003e52c: 42a7 cmp r7, r4 -1003e52e: dd1d ble.n 1003e56c <_strtol_l.isra.0+0xc2> -1003e530: 1c53 adds r3, r2, #1 -1003e532: d007 beq.n 1003e544 <_strtol_l.isra.0+0x9a> -1003e534: 4586 cmp lr, r0 -1003e536: d316 bcc.n 1003e566 <_strtol_l.isra.0+0xbc> -1003e538: d101 bne.n 1003e53e <_strtol_l.isra.0+0x94> -1003e53a: 45a4 cmp ip, r4 -1003e53c: db13 blt.n 1003e566 <_strtol_l.isra.0+0xbc> -1003e53e: 2201 movs r2, #1 -1003e540: fb00 4007 mla r0, r0, r7, r4 -1003e544: f815 4b01 ldrb.w r4, [r5], #1 -1003e548: e7eb b.n 1003e522 <_strtol_l.isra.0+0x78> -1003e54a: 270a movs r7, #10 -1003e54c: e7dd b.n 1003e50a <_strtol_l.isra.0+0x60> -1003e54e: f1a4 0341 sub.w r3, r4, #65 ; 0x41 -1003e552: 2b19 cmp r3, #25 -1003e554: d801 bhi.n 1003e55a <_strtol_l.isra.0+0xb0> -1003e556: 3c37 subs r4, #55 ; 0x37 -1003e558: e7e8 b.n 1003e52c <_strtol_l.isra.0+0x82> -1003e55a: f1a4 0361 sub.w r3, r4, #97 ; 0x61 -1003e55e: 2b19 cmp r3, #25 -1003e560: d804 bhi.n 1003e56c <_strtol_l.isra.0+0xc2> -1003e562: 3c57 subs r4, #87 ; 0x57 -1003e564: e7e2 b.n 1003e52c <_strtol_l.isra.0+0x82> -1003e566: f04f 32ff mov.w r2, #4294967295 -1003e56a: e7eb b.n 1003e544 <_strtol_l.isra.0+0x9a> -1003e56c: 1c53 adds r3, r2, #1 -1003e56e: d108 bne.n 1003e582 <_strtol_l.isra.0+0xd8> -1003e570: 2322 movs r3, #34 ; 0x22 -1003e572: 4608 mov r0, r1 -1003e574: f8c8 3000 str.w r3, [r8] -1003e578: f1ba 0f00 cmp.w sl, #0 -1003e57c: d107 bne.n 1003e58e <_strtol_l.isra.0+0xe4> -1003e57e: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -1003e582: b106 cbz r6, 1003e586 <_strtol_l.isra.0+0xdc> -1003e584: 4240 negs r0, r0 -1003e586: f1ba 0f00 cmp.w sl, #0 -1003e58a: d00c beq.n 1003e5a6 <_strtol_l.isra.0+0xfc> -1003e58c: b122 cbz r2, 1003e598 <_strtol_l.isra.0+0xee> -1003e58e: 3d01 subs r5, #1 -1003e590: f8ca 5000 str.w r5, [sl] -1003e594: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} -1003e598: 464d mov r5, r9 -1003e59a: e7f9 b.n 1003e590 <_strtol_l.isra.0+0xe6> -1003e59c: 2430 movs r4, #48 ; 0x30 -1003e59e: 2f00 cmp r7, #0 -1003e5a0: d1b3 bne.n 1003e50a <_strtol_l.isra.0+0x60> -1003e5a2: 2708 movs r7, #8 -1003e5a4: e7b1 b.n 1003e50a <_strtol_l.isra.0+0x60> -1003e5a6: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - ... - -1003e5ac <_strtol_r>: -1003e5ac: b537 push {r0, r1, r2, r4, r5, lr} -1003e5ae: 4c06 ldr r4, [pc, #24] ; (1003e5c8 <_strtol_r+0x1c>) -1003e5b0: 4d06 ldr r5, [pc, #24] ; (1003e5cc <_strtol_r+0x20>) -1003e5b2: 6824 ldr r4, [r4, #0] -1003e5b4: 6a24 ldr r4, [r4, #32] -1003e5b6: 2c00 cmp r4, #0 -1003e5b8: bf08 it eq -1003e5ba: 462c moveq r4, r5 -1003e5bc: 9400 str r4, [sp, #0] -1003e5be: f7ff ff74 bl 1003e4aa <_strtol_l.isra.0> -1003e5c2: b003 add sp, #12 -1003e5c4: bd30 pop {r4, r5, pc} -1003e5c6: bf00 nop -1003e5c8: 1004649c .word 0x1004649c -1003e5cc: 10046500 .word 0x10046500 - -1003e5d0 <_strtoul_l.isra.0>: -1003e5d0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} -1003e5d4: 4680 mov r8, r0 -1003e5d6: 4689 mov r9, r1 -1003e5d8: 4692 mov sl, r2 -1003e5da: 461e mov r6, r3 -1003e5dc: 460f mov r7, r1 -1003e5de: 463d mov r5, r7 -1003e5e0: 9808 ldr r0, [sp, #32] -1003e5e2: f815 4b01 ldrb.w r4, [r5], #1 -1003e5e6: f7ff fc03 bl 1003ddf0 <__locale_ctype_ptr_l> -1003e5ea: 4420 add r0, r4 -1003e5ec: 7843 ldrb r3, [r0, #1] -1003e5ee: f013 0308 ands.w r3, r3, #8 -1003e5f2: d10a bne.n 1003e60a <_strtoul_l.isra.0+0x3a> -1003e5f4: 2c2d cmp r4, #45 ; 0x2d -1003e5f6: d10a bne.n 1003e60e <_strtoul_l.isra.0+0x3e> -1003e5f8: 2301 movs r3, #1 -1003e5fa: 782c ldrb r4, [r5, #0] -1003e5fc: 1cbd adds r5, r7, #2 -1003e5fe: b15e cbz r6, 1003e618 <_strtoul_l.isra.0+0x48> -1003e600: 2e10 cmp r6, #16 -1003e602: d113 bne.n 1003e62c <_strtoul_l.isra.0+0x5c> -1003e604: 2c30 cmp r4, #48 ; 0x30 -1003e606: d009 beq.n 1003e61c <_strtoul_l.isra.0+0x4c> -1003e608: e010 b.n 1003e62c <_strtoul_l.isra.0+0x5c> -1003e60a: 462f mov r7, r5 -1003e60c: e7e7 b.n 1003e5de <_strtoul_l.isra.0+0xe> -1003e60e: 2c2b cmp r4, #43 ; 0x2b -1003e610: bf04 itt eq -1003e612: 782c ldrbeq r4, [r5, #0] -1003e614: 1cbd addeq r5, r7, #2 -1003e616: e7f2 b.n 1003e5fe <_strtoul_l.isra.0+0x2e> -1003e618: 2c30 cmp r4, #48 ; 0x30 -1003e61a: d125 bne.n 1003e668 <_strtoul_l.isra.0+0x98> -1003e61c: 782a ldrb r2, [r5, #0] -1003e61e: f002 02df and.w r2, r2, #223 ; 0xdf -1003e622: 2a58 cmp r2, #88 ; 0x58 -1003e624: d14a bne.n 1003e6bc <_strtoul_l.isra.0+0xec> -1003e626: 2610 movs r6, #16 -1003e628: 786c ldrb r4, [r5, #1] -1003e62a: 3502 adds r5, #2 -1003e62c: f04f 31ff mov.w r1, #4294967295 -1003e630: fbb1 f1f6 udiv r1, r1, r6 -1003e634: 2700 movs r7, #0 -1003e636: fb06 fe01 mul.w lr, r6, r1 -1003e63a: 4638 mov r0, r7 -1003e63c: ea6f 0e0e mvn.w lr, lr -1003e640: f1a4 0230 sub.w r2, r4, #48 ; 0x30 -1003e644: 2a09 cmp r2, #9 -1003e646: d811 bhi.n 1003e66c <_strtoul_l.isra.0+0x9c> -1003e648: 4614 mov r4, r2 -1003e64a: 42a6 cmp r6, r4 -1003e64c: dd1d ble.n 1003e68a <_strtoul_l.isra.0+0xba> -1003e64e: 2f00 cmp r7, #0 -1003e650: db18 blt.n 1003e684 <_strtoul_l.isra.0+0xb4> -1003e652: 4281 cmp r1, r0 -1003e654: d316 bcc.n 1003e684 <_strtoul_l.isra.0+0xb4> -1003e656: d101 bne.n 1003e65c <_strtoul_l.isra.0+0x8c> -1003e658: 45a6 cmp lr, r4 -1003e65a: db13 blt.n 1003e684 <_strtoul_l.isra.0+0xb4> -1003e65c: 2701 movs r7, #1 -1003e65e: fb00 4006 mla r0, r0, r6, r4 -1003e662: f815 4b01 ldrb.w r4, [r5], #1 -1003e666: e7eb b.n 1003e640 <_strtoul_l.isra.0+0x70> -1003e668: 260a movs r6, #10 -1003e66a: e7df b.n 1003e62c <_strtoul_l.isra.0+0x5c> -1003e66c: f1a4 0241 sub.w r2, r4, #65 ; 0x41 -1003e670: 2a19 cmp r2, #25 -1003e672: d801 bhi.n 1003e678 <_strtoul_l.isra.0+0xa8> -1003e674: 3c37 subs r4, #55 ; 0x37 -1003e676: e7e8 b.n 1003e64a <_strtoul_l.isra.0+0x7a> -1003e678: f1a4 0261 sub.w r2, r4, #97 ; 0x61 -1003e67c: 2a19 cmp r2, #25 -1003e67e: d804 bhi.n 1003e68a <_strtoul_l.isra.0+0xba> -1003e680: 3c57 subs r4, #87 ; 0x57 -1003e682: e7e2 b.n 1003e64a <_strtoul_l.isra.0+0x7a> -1003e684: f04f 37ff mov.w r7, #4294967295 -1003e688: e7eb b.n 1003e662 <_strtoul_l.isra.0+0x92> -1003e68a: 2f00 cmp r7, #0 -1003e68c: da09 bge.n 1003e6a2 <_strtoul_l.isra.0+0xd2> -1003e68e: 2322 movs r3, #34 ; 0x22 -1003e690: f04f 30ff mov.w r0, #4294967295 -1003e694: f8c8 3000 str.w r3, [r8] -1003e698: f1ba 0f00 cmp.w sl, #0 -1003e69c: d107 bne.n 1003e6ae <_strtoul_l.isra.0+0xde> -1003e69e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1003e6a2: b103 cbz r3, 1003e6a6 <_strtoul_l.isra.0+0xd6> -1003e6a4: 4240 negs r0, r0 -1003e6a6: f1ba 0f00 cmp.w sl, #0 -1003e6aa: d00c beq.n 1003e6c6 <_strtoul_l.isra.0+0xf6> -1003e6ac: b127 cbz r7, 1003e6b8 <_strtoul_l.isra.0+0xe8> -1003e6ae: 3d01 subs r5, #1 -1003e6b0: f8ca 5000 str.w r5, [sl] -1003e6b4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} -1003e6b8: 464d mov r5, r9 -1003e6ba: e7f9 b.n 1003e6b0 <_strtoul_l.isra.0+0xe0> -1003e6bc: 2430 movs r4, #48 ; 0x30 -1003e6be: 2e00 cmp r6, #0 -1003e6c0: d1b4 bne.n 1003e62c <_strtoul_l.isra.0+0x5c> -1003e6c2: 2608 movs r6, #8 -1003e6c4: e7b2 b.n 1003e62c <_strtoul_l.isra.0+0x5c> -1003e6c6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - ... - -1003e6cc <_strtoul_r>: -1003e6cc: b537 push {r0, r1, r2, r4, r5, lr} -1003e6ce: 4c06 ldr r4, [pc, #24] ; (1003e6e8 <_strtoul_r+0x1c>) -1003e6d0: 4d06 ldr r5, [pc, #24] ; (1003e6ec <_strtoul_r+0x20>) -1003e6d2: 6824 ldr r4, [r4, #0] -1003e6d4: 6a24 ldr r4, [r4, #32] -1003e6d6: 2c00 cmp r4, #0 -1003e6d8: bf08 it eq -1003e6da: 462c moveq r4, r5 -1003e6dc: 9400 str r4, [sp, #0] -1003e6de: f7ff ff77 bl 1003e5d0 <_strtoul_l.isra.0> -1003e6e2: b003 add sp, #12 -1003e6e4: bd30 pop {r4, r5, pc} -1003e6e6: bf00 nop -1003e6e8: 1004649c .word 0x1004649c -1003e6ec: 10046500 .word 0x10046500 - -1003e6f0 <__submore>: -1003e6f0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} -1003e6f4: 460c mov r4, r1 -1003e6f6: 6b49 ldr r1, [r1, #52] ; 0x34 -1003e6f8: f104 0344 add.w r3, r4, #68 ; 0x44 -1003e6fc: 4299 cmp r1, r3 -1003e6fe: d11c bne.n 1003e73a <__submore+0x4a> -1003e700: f44f 6180 mov.w r1, #1024 ; 0x400 -1003e704: f7ff fad2 bl 1003dcac <_malloc_r> -1003e708: b918 cbnz r0, 1003e712 <__submore+0x22> -1003e70a: f04f 30ff mov.w r0, #4294967295 -1003e70e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1003e712: f44f 6380 mov.w r3, #1024 ; 0x400 -1003e716: 63a3 str r3, [r4, #56] ; 0x38 -1003e718: f894 3046 ldrb.w r3, [r4, #70] ; 0x46 -1003e71c: 6360 str r0, [r4, #52] ; 0x34 -1003e71e: f880 33ff strb.w r3, [r0, #1023] ; 0x3ff -1003e722: f894 3045 ldrb.w r3, [r4, #69] ; 0x45 -1003e726: f200 30fd addw r0, r0, #1021 ; 0x3fd -1003e72a: 7043 strb r3, [r0, #1] -1003e72c: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 -1003e730: 7003 strb r3, [r0, #0] -1003e732: 6020 str r0, [r4, #0] -1003e734: 2000 movs r0, #0 -1003e736: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} -1003e73a: 6ba6 ldr r6, [r4, #56] ; 0x38 -1003e73c: 0077 lsls r7, r6, #1 -1003e73e: 463a mov r2, r7 -1003e740: f000 f835 bl 1003e7ae <_realloc_r> -1003e744: 4605 mov r5, r0 -1003e746: 2800 cmp r0, #0 -1003e748: d0df beq.n 1003e70a <__submore+0x1a> -1003e74a: eb00 0806 add.w r8, r0, r6 -1003e74e: 4601 mov r1, r0 -1003e750: 4632 mov r2, r6 -1003e752: 4640 mov r0, r8 -1003e754: f000 f820 bl 1003e798 -1003e758: f8c4 8000 str.w r8, [r4] -1003e75c: 6365 str r5, [r4, #52] ; 0x34 -1003e75e: 63a7 str r7, [r4, #56] ; 0x38 -1003e760: e7e8 b.n 1003e734 <__submore+0x44> - -1003e762 <__ascii_wctomb>: -1003e762: b149 cbz r1, 1003e778 <__ascii_wctomb+0x16> -1003e764: 2aff cmp r2, #255 ; 0xff -1003e766: bf8b itete hi -1003e768: 238a movhi r3, #138 ; 0x8a -1003e76a: 700a strbls r2, [r1, #0] -1003e76c: 6003 strhi r3, [r0, #0] -1003e76e: 2001 movls r0, #1 -1003e770: bf88 it hi -1003e772: f04f 30ff movhi.w r0, #4294967295 -1003e776: 4770 bx lr -1003e778: 4608 mov r0, r1 -1003e77a: 4770 bx lr - -1003e77c : -1003e77c: b510 push {r4, lr} -1003e77e: b2c9 uxtb r1, r1 -1003e780: 4402 add r2, r0 -1003e782: 4290 cmp r0, r2 -1003e784: 4603 mov r3, r0 -1003e786: d101 bne.n 1003e78c -1003e788: 2000 movs r0, #0 -1003e78a: bd10 pop {r4, pc} -1003e78c: 781c ldrb r4, [r3, #0] -1003e78e: 3001 adds r0, #1 -1003e790: 428c cmp r4, r1 -1003e792: d1f6 bne.n 1003e782 -1003e794: 4618 mov r0, r3 -1003e796: bd10 pop {r4, pc} - -1003e798 : -1003e798: b510 push {r4, lr} -1003e79a: 1e43 subs r3, r0, #1 -1003e79c: 440a add r2, r1 -1003e79e: 4291 cmp r1, r2 -1003e7a0: d100 bne.n 1003e7a4 -1003e7a2: bd10 pop {r4, pc} -1003e7a4: f811 4b01 ldrb.w r4, [r1], #1 -1003e7a8: f803 4f01 strb.w r4, [r3, #1]! -1003e7ac: e7f7 b.n 1003e79e - -1003e7ae <_realloc_r>: -1003e7ae: b5f8 push {r3, r4, r5, r6, r7, lr} -1003e7b0: 4607 mov r7, r0 -1003e7b2: 4614 mov r4, r2 -1003e7b4: 460e mov r6, r1 -1003e7b6: b921 cbnz r1, 1003e7c2 <_realloc_r+0x14> -1003e7b8: 4611 mov r1, r2 -1003e7ba: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} -1003e7be: f7ff ba75 b.w 1003dcac <_malloc_r> -1003e7c2: b922 cbnz r2, 1003e7ce <_realloc_r+0x20> -1003e7c4: f7ff fa26 bl 1003dc14 <_free_r> -1003e7c8: 4625 mov r5, r4 -1003e7ca: 4628 mov r0, r5 -1003e7cc: bdf8 pop {r3, r4, r5, r6, r7, pc} -1003e7ce: f000 f814 bl 1003e7fa <_malloc_usable_size_r> -1003e7d2: 4284 cmp r4, r0 -1003e7d4: d90f bls.n 1003e7f6 <_realloc_r+0x48> -1003e7d6: 4621 mov r1, r4 -1003e7d8: 4638 mov r0, r7 -1003e7da: f7ff fa67 bl 1003dcac <_malloc_r> -1003e7de: 4605 mov r5, r0 -1003e7e0: 2800 cmp r0, #0 -1003e7e2: d0f2 beq.n 1003e7ca <_realloc_r+0x1c> -1003e7e4: 4631 mov r1, r6 -1003e7e6: 4622 mov r2, r4 -1003e7e8: f7ff ffd6 bl 1003e798 -1003e7ec: 4631 mov r1, r6 -1003e7ee: 4638 mov r0, r7 -1003e7f0: f7ff fa10 bl 1003dc14 <_free_r> -1003e7f4: e7e9 b.n 1003e7ca <_realloc_r+0x1c> -1003e7f6: 4635 mov r5, r6 -1003e7f8: e7e7 b.n 1003e7ca <_realloc_r+0x1c> - -1003e7fa <_malloc_usable_size_r>: -1003e7fa: f851 0c04 ldr.w r0, [r1, #-4] -1003e7fe: 2800 cmp r0, #0 -1003e800: f1a0 0004 sub.w r0, r0, #4 -1003e804: bfbc itt lt -1003e806: 580b ldrlt r3, [r1, r0] -1003e808: 18c0 addlt r0, r0, r3 -1003e80a: 4770 bx lr - -1003e80c <_sbrk>: -1003e80c: 4a04 ldr r2, [pc, #16] ; (1003e820 <_sbrk+0x14>) -1003e80e: 4905 ldr r1, [pc, #20] ; (1003e824 <_sbrk+0x18>) -1003e810: 6813 ldr r3, [r2, #0] -1003e812: 2b00 cmp r3, #0 -1003e814: bf08 it eq -1003e816: 460b moveq r3, r1 -1003e818: 4418 add r0, r3 -1003e81a: 6010 str r0, [r2, #0] -1003e81c: 4618 mov r0, r3 -1003e81e: 4770 bx lr -1003e820: 1004e50c .word 0x1004e50c -1003e824: 10002400 .word 0x10002400 - -1003e828 <__rtw_get_bit_value_from_ieee_value_veneer>: -1003e828: f85f f000 ldr.w pc, [pc] ; 1003e82c <__rtw_get_bit_value_from_ieee_value_veneer+0x4> -1003e82c: 00013449 .word 0x00013449 - -1003e830 <__phy_CalculateBitShift_veneer>: -1003e830: f85f f000 ldr.w pc, [pc] ; 1003e834 <__phy_CalculateBitShift_veneer+0x4> -1003e834: 00018221 .word 0x00018221 - -1003e838 <__PHY_SetBBReg_8195A_veneer>: -1003e838: f85f f000 ldr.w pc, [pc] ; 1003e83c <__PHY_SetBBReg_8195A_veneer+0x4> -1003e83c: 00018239 .word 0x00018239 - -1003e840 <__rtw_seccalctkipmic_veneer>: -1003e840: f85f f000 ldr.w pc, [pc] ; 1003e844 <__rtw_seccalctkipmic_veneer+0x4> -1003e844: 0001449d .word 0x0001449d - -1003e848 <__rtw_parse_wpa2_ie_veneer>: -1003e848: f85f f000 ldr.w pc, [pc] ; 1003e84c <__rtw_parse_wpa2_ie_veneer+0x4> -1003e84c: 000138ad .word 0x000138ad - -1003e850 <__wep_80211_encrypt_veneer>: -1003e850: f85f f000 ldr.w pc, [pc] ; 1003e854 <__wep_80211_encrypt_veneer+0x4> -1003e854: 00014295 .word 0x00014295 - -1003e858 <__ROM_odm_EVMdbToPercentage_veneer>: -1003e858: f85f f000 ldr.w pc, [pc] ; 1003e85c <__ROM_odm_EVMdbToPercentage_veneer+0x4> -1003e85c: 000182bd .word 0x000182bd - -1003e860 <__rtw_parse_wpa_ie_veneer>: -1003e860: f85f f000 ldr.w pc, [pc] ; 1003e864 <__rtw_parse_wpa_ie_veneer+0x4> -1003e864: 000137d1 .word 0x000137d1 - -1003e868 <__rtw_ieee802_11_parse_elems_veneer>: -1003e868: f85f f000 ldr.w pc, [pc] ; 1003e86c <__rtw_ieee802_11_parse_elems_veneer+0x4> -1003e86c: 00013b91 .word 0x00013b91 - -1003e870 <__ROM_odm_GetDefaultCrytaltalCap_veneer>: -1003e870: f85f f000 ldr.w pc, [pc] ; 1003e874 <__ROM_odm_GetDefaultCrytaltalCap_veneer+0x4> -1003e874: 000187d5 .word 0x000187d5 - -1003e878 <__rtw_get_sec_ie_veneer>: -1003e878: f85f f000 ldr.w pc, [pc] ; 1003e87c <__rtw_get_sec_ie_veneer+0x4> -1003e87c: 00013965 .word 0x00013965 - -1003e880 <__rtw_get_wpa_ie_veneer>: -1003e880: f85f f000 ldr.w pc, [pc] ; 1003e884 <__rtw_get_wpa_ie_veneer+0x4> -1003e884: 0001362d .word 0x0001362d - -1003e888 <__rtw_get_wps_ie_veneer>: -1003e888: f85f f000 ldr.w pc, [pc] ; 1003e88c <__rtw_get_wps_ie_veneer+0x4> -1003e88c: 00013a15 .word 0x00013a15 - -1003e890 <__ROM_ODM_CfoTrackingReset_veneer>: -1003e890: f85f f000 ldr.w pc, [pc] ; 1003e894 <__ROM_ODM_CfoTrackingReset_veneer+0x4> -1003e894: 000187e9 .word 0x000187e9 - -1003e898 <__rtw_get_wpa2_ie_veneer>: -1003e898: f85f f000 ldr.w pc, [pc] ; 1003e89c <__rtw_get_wpa2_ie_veneer+0x4> -1003e89c: 000136c9 .word 0x000136c9 - -1003e8a0 <__ROM_odm_QueryRxPwrPercentage_veneer>: -1003e8a0: f85f f000 ldr.w pc, [pc] ; 1003e8a4 <__ROM_odm_QueryRxPwrPercentage_veneer+0x4> -1003e8a4: 0001829d .word 0x0001829d - -1003e8a8 <__rtw_get_ie_veneer>: -1003e8a8: f85f f000 ldr.w pc, [pc] ; 1003e8ac <__rtw_get_ie_veneer+0x4> -1003e8ac: 0001355d .word 0x0001355d - -1003e8b0 <__rtw_set_ie_veneer>: -1003e8b0: f85f f000 ldr.w pc, [pc] ; 1003e8b4 <__rtw_set_ie_veneer+0x4> -1003e8b4: 0001352d .word 0x0001352d - -1003e8b8 <__AES_WRAP_veneer>: -1003e8b8: f85f f000 ldr.w pc, [pc] ; 1003e8bc <__AES_WRAP_veneer+0x4> -1003e8bc: 000125c9 .word 0x000125c9 - -1003e8c0 <__PHY_QueryBBReg_8195A_veneer>: -1003e8c0: f85f f000 ldr.w pc, [pc] ; 1003e8c4 <__PHY_QueryBBReg_8195A_veneer+0x4> -1003e8c4: 00018279 .word 0x00018279 - -1003e8c8 <__ROM_odm_SetCrystalCap_veneer>: -1003e8c8: f85f f000 ldr.w pc, [pc] ; 1003e8cc <__ROM_odm_SetCrystalCap_veneer+0x4> -1003e8cc: 00018771 .word 0x00018771 - -1003e8d0 <__rtw_secmicsetkey_veneer>: -1003e8d0: f85f f000 ldr.w pc, [pc] ; 1003e8d4 <__rtw_secmicsetkey_veneer+0x4> -1003e8d4: 000143d9 .word 0x000143d9 - -1003e8d8 <__rtw_secmicappend_veneer>: -1003e8d8: f85f f000 ldr.w pc, [pc] ; 1003e8dc <__rtw_secmicappend_veneer+0x4> -1003e8dc: 00014419 .word 0x00014419 - -1003e8e0 <__rtw_set_supported_rate_veneer>: -1003e8e0: f85f f000 ldr.w pc, [pc] ; 1003e8e4 <__rtw_set_supported_rate_veneer+0x4> -1003e8e4: 00013591 .word 0x00013591 - -1003e8e8 <__rtw_get_wps_attr_content_veneer>: -1003e8e8: f85f f000 ldr.w pc, [pc] ; 1003e8ec <__rtw_get_wps_attr_content_veneer+0x4> -1003e8ec: 00013b49 .word 0x00013b49 - -1003e8f0 <__rtw_secgetmic_veneer>: -1003e8f0: f85f f000 ldr.w pc, [pc] ; 1003e8f4 <__rtw_secgetmic_veneer+0x4> -1003e8f4: 00014435 .word 0x00014435 - -1003e8f8 <__rt_md5_hmac_veneer>: -1003e8f8: f85f f000 ldr.w pc, [pc] ; 1003e8fc <__rt_md5_hmac_veneer+0x4> -1003e8fc: 000132d5 .word 0x000132d5 - -1003e900 <__rtw_set_fixed_ie_veneer>: -1003e900: f85f f000 ldr.w pc, [pc] ; 1003e904 <__rtw_set_fixed_ie_veneer+0x4> -1003e904: 0001350d .word 0x0001350d - -1003e908 <__rom_psk_CalcPTK_veneer>: -1003e908: f85f f000 ldr.w pc, [pc] ; 1003e90c <__rom_psk_CalcPTK_veneer+0x4> -1003e90c: 00013f69 .word 0x00013f69 - -1003e910 <__aes_80211_encrypt_veneer>: -1003e910: f85f f000 ldr.w pc, [pc] ; 1003e914 <__aes_80211_encrypt_veneer+0x4> -1003e914: 00014e29 .word 0x00014e29 - -1003e918 <__tkip_80211_encrypt_veneer>: -1003e918: f85f f000 ldr.w pc, [pc] ; 1003e91c <__tkip_80211_encrypt_veneer+0x4> -1003e91c: 00014941 .word 0x00014941 - -1003e920 <__aes_80211_decrypt_veneer>: -1003e920: f85f f000 ldr.w pc, [pc] ; 1003e924 <__aes_80211_decrypt_veneer+0x4> -1003e924: 000151ad .word 0x000151ad - -1003e928 <__wep_80211_decrypt_veneer>: -1003e928: f85f f000 ldr.w pc, [pc] ; 1003e92c <__wep_80211_decrypt_veneer+0x4> -1003e92c: 000142f5 .word 0x000142f5 - -1003e930 <__ROM_odm_CfoTrackingFlow_veneer>: -1003e930: f85f f000 ldr.w pc, [pc] ; 1003e934 <__ROM_odm_CfoTrackingFlow_veneer+0x4> -1003e934: 00018811 .word 0x00018811 - -1003e938 <__rt_arc4_crypt_veneer>: -1003e938: f85f f000 ldr.w pc, [pc] ; 1003e93c <__rt_arc4_crypt_veneer+0x4> -1003e93c: 00012901 .word 0x00012901 - -1003e940 <__HalGdmaChDisRtl8195a_veneer>: -1003e940: f85f f000 ldr.w pc, [pc] ; 1003e944 <__HalGdmaChDisRtl8195a_veneer+0x4> -1003e944: 00005e6d .word 0x00005e6d - -1003e948 <__rtw_check_network_type_veneer>: -1003e948: f85f f000 ldr.w pc, [pc] ; 1003e94c <__rtw_check_network_type_veneer+0x4> -1003e94c: 000134dd .word 0x000134dd - -1003e950 <__rt_hmac_sha1_veneer>: -1003e950: f85f f000 ldr.w pc, [pc] ; 1003e954 <__rt_hmac_sha1_veneer+0x4> -1003e954: 00015909 .word 0x00015909 - -1003e958 <__rom_psk_CalcGTK_veneer>: -1003e958: f85f f000 ldr.w pc, [pc] ; 1003e95c <__rom_psk_CalcGTK_veneer+0x4> -1003e95c: 00013ed5 .word 0x00013ed5 - -1003e960 <__rt_arc4_init_veneer>: -1003e960: f85f f000 ldr.w pc, [pc] ; 1003e964 <__rt_arc4_init_veneer+0x4> -1003e964: 000128bd .word 0x000128bd - -1003e968 <__Strtoul_veneer>: -1003e968: f85f f000 ldr.w pc, [pc] ; 1003e96c <__Strtoul_veneer+0x4> -1003e96c: 0000e801 .word 0x0000e801 - -1003e970 <__tkip_80211_decrypt_veneer>: -1003e970: f85f f000 ldr.w pc, [pc] ; 1003e974 <__tkip_80211_decrypt_veneer+0x4> -1003e974: 000149d5 .word 0x000149d5 - -1003e978 <__key_2char2num_veneer>: -1003e978: f85f f000 ldr.w pc, [pc] ; 1003e97c <__key_2char2num_veneer+0x4> -1003e97c: 00013db9 .word 0x00013db9 - -1003e980 <__SpicWaitBusyDoneRtl8195A_veneer>: -1003e980: f85f f000 ldr.w pc, [pc] ; 1003e984 <__SpicWaitBusyDoneRtl8195A_veneer+0x4> -1003e984: 00002ea5 .word 0x00002ea5 - -1003e988 <__AES_UnWRAP_veneer>: -1003e988: f85f f000 ldr.w pc, [pc] ; 1003e98c <__AES_UnWRAP_veneer+0x4> -1003e98c: 00012701 .word 0x00012701 - -1003e990 <__rom_psk_PasswordHash_veneer>: -1003e990: f85f f000 ldr.w pc, [pc] ; 1003e994 <__rom_psk_PasswordHash_veneer+0x4> -1003e994: 00013e9d .word 0x00013e9d - -1003e998 <__rtw_get_rateset_len_veneer>: -1003e998: f85f f000 ldr.w pc, [pc] ; 1003e99c <__rtw_get_rateset_len_veneer+0x4> -1003e99c: 00013611 .word 0x00013611 diff --git a/Firmware/RTLGDB/Debug/obj/Debug.axf b/Firmware/RTLGDB/Debug/obj/Debug.axf deleted file mode 100644 index ad4ea8e..0000000 Binary files a/Firmware/RTLGDB/Debug/obj/Debug.axf and /dev/null differ diff --git a/Firmware/RTLGDB/Debug/obj/Debug.nmap b/Firmware/RTLGDB/Debug/obj/Debug.nmap deleted file mode 100644 index 9bf7b95..0000000 --- a/Firmware/RTLGDB/Debug/obj/Debug.nmap +++ /dev/null @@ -1,3243 +0,0 @@ -00000000 A __vectors_table -00000000 D __rom_image_end__ -00000000 D __rom_image_start__ -00000020 A UartLogRamCmdTableSize -00000101 A Reset_Handler -00000109 A NMI_Handler -0000010d A HardFault_Handler -00000121 A MemManage_Handler -00000125 A BusFault_Handler -00000129 A UsageFault_Handler -00000201 A HalLogUartInit -000002d9 A HalSerialPutcRtl8195a -00000309 A HalSerialGetcRtl8195a -00000329 A HalSerialGetIsrEnRegRtl8195a -00000335 A HalSerialSetIrqEnRegRtl8195a -00000341 A HalCpuClkConfig -00000355 A HalGetCpuClk -0000039d A HalRomInfo -000003b5 A HalGetRomInfo -000003c5 A HalResetVsr -00000899 A HalDelayUs -000008e1 A HalNMIHandler -00000911 A HalHardFaultHandler -00000c09 A HalMemManageHandler -00000c39 A HalBusFaultHandler -00000c69 A HalUsageFaultHandler -00000cfd A HalUart0PinCtrlRtl8195A -00000dc9 A HalUart1PinCtrlRtl8195A -00000e9d A HalUart2PinCtrlRtl8195A -00000f75 A HalSPI0PinCtrlRtl8195A -00001015 A HalSPI1PinCtrlRtl8195A -000010e5 A HalSPI2PinCtrlRtl8195A -000011b5 A HalSPI0MCSPinCtrlRtl8195A -00001275 A HalI2C0PinCtrlRtl8195A -00001381 A HalI2C1PinCtrlRtl8195A -00001459 A HalI2C2PinCtrlRtl8195A -00001529 A HalI2C3PinCtrlRtl8195A -00001639 A HalI2S0PinCtrlRtl8195A -0000176d A HalI2S1PinCtrlRtl8195A -00001845 A HalPCM0PinCtrlRtl8195A -00001949 A HalPCM1PinCtrlRtl8195A -00001a1d A HalSDIODPinCtrlRtl8195A -00001a6d A HalSDIOHPinCtrlRtl8195A -00001ab9 A HalMIIPinCtrlRtl8195A -00001b51 A HalWLLEDPinCtrlRtl8195A -00001c0d A HalWLANT0PinCtrlRtl8195A -00001c61 A HalWLANT1PinCtrlRtl8195A -00001cb5 A HalWLBTCOEXPinCtrlRtl8195A -00001d05 A HalWLBTCMDPinCtrlRtl8195A -00001d59 A HalNFCPinCtrlRtl8195A -00001da9 A HalPWM0PinCtrlRtl8195A -00001ead A HalPWM1PinCtrlRtl8195A -00001fb5 A HalPWM2PinCtrlRtl8195A -000020b1 A HalPWM3PinCtrlRtl8195A -000021b9 A HalETE0PinCtrlRtl8195A -000022c1 A HalETE1PinCtrlRtl8195A -000023c9 A HalETE2PinCtrlRtl8195A -000024d1 A HalETE3PinCtrlRtl8195A -000025d9 A HalEGTIMPinCtrlRtl8195A -00002679 A HalSPIFlashPinCtrlRtl8195A -00002725 A HalSDRPinCtrlRtl8195A -0000280d A HalJTAGPinCtrlRtl8195A -00002861 A HalTRACEPinCtrlRtl8195A -000028b9 A HalLOGUartPinCtrlRtl8195A -0000291d A HalLOGUartIRPinCtrlRtl8195A -00002981 A HalSICPinCtrlRtl8195A -000029d9 A HalEEPROMPinCtrlRtl8195A -00002a31 A HalDEBUGPinCtrlRtl8195A -00002b39 A HalPinCtrlRtl8195A -00002e5d A SpicRxCmdRtl8195A -00002ea5 A SpicWaitBusyDoneRtl8195A -00002eb5 A SpicGetFlashStatusRtl8195A -00002f55 A SpicWaitWipDoneRtl8195A -00002f6d A SpicTxCmdRtl8195A -00002fc1 A SpicSetFlashStatusRtl8195A -00003049 A SpicCmpDataForCalibrationRtl8195A -00003081 A SpicLoadInitParaFromClockRtl8195A -000030e5 A SpicInitRtl8195A -000031bd A SpicEraseFlashRtl8195A -00003279 A SpiFlashApp -000033b5 A HalPeripheralIntrHandle -00003439 A HalSysOnIntrHandle -00003485 A HalWdgIntrHandle -000034d5 A HalTimer0IntrHandle -00003525 A HalTimer1IntrHandle -00003575 A HalI2C3IntrHandle -000035c5 A HalTimer2To7IntrHandle -00003615 A HalSpi0IntrHandle -00003665 A HalGpioIntrHandle -000036b5 A HalUart0IntrHandle -00003705 A HalSpiFlashIntrHandle -00003755 A HalUsbOtgIntrHandle -000037a5 A HalSdioHostIntrHandle -000037f5 A HalI2s0OrPcm0IntrHandle -00003845 A HalI2s1OrPcm1IntrHandle -00003895 A HalWlDmaIntrHandle -000038e5 A HalWlProtocolIntrHandle -00003935 A HalCryptoIntrHandle -00003985 A HalGmacIntrHandle -000039d5 A HalGdma0Ch0IntrHandle -00003a25 A HalGdma0Ch1IntrHandle -00003a75 A HalGdma0Ch2IntrHandle -00003ac5 A HalGdma0Ch3IntrHandle -00003b15 A HalGdma0Ch4IntrHandle -00003b65 A HalGdma0Ch5IntrHandle -00003bb5 A HalGdma1Ch0IntrHandle -00003c05 A HalGdma1Ch1IntrHandle -00003c55 A HalGdma1Ch2IntrHandle -00003ca5 A HalGdma1Ch3IntrHandle -00003cf5 A HalGdma1Ch4IntrHandle -00003d45 A HalGdma1Ch5IntrHandle -00003d95 A HalSdioDeviceIntrHandle -00003de5 A VectorTableInitRtl8195A -00004019 A VectorTableInitForOSRtl8195A -00004029 A VectorIrqRegisterRtl8195A -00004091 A VectorIrqUnRegisterRtl8195A -000040f1 A VectorIrqEnRtl8195A -0000418d A VectorIrqDisRtl8195A -0000422d A _UartRxDmaIrqHandle -00004281 A HalRuartPutCRtl8195a -0000429d A HalRuartGetCRtl8195a -000042bd A HalRuartRTSCtrlRtl8195a -000042e1 A HalRuartGetDebugValueRtl8195a -000043e1 A HalRuartGetIMRRtl8195a -0000442d A HalRuartSetIMRRtl8195a -00004465 A _UartIrqHandle -00004681 A HalRuartDmaInitRtl8195a -00004845 A HalRuartIntDisableRtl8195a -00004855 A HalRuartDeInitRtl8195a -00004985 A HalRuartIntEnableRtl8195a -00004995 A _UartTxDmaIrqHandle -000049d1 A HalRuartRegIrqRtl8195a -00004a4d A HalRuartAdapterLoadDefRtl8195a -00004add A HalRuartTxGdmaLoadDefRtl8195a -00004bc9 A HalRuartRxGdmaLoadDefRtl8195a -00004cc9 A RuartLock -00004ced A RuartUnLock -00004d09 A HalRuartIntSendRtl8195a -00004e35 A HalRuartDmaSendRtl8195a -00004f89 A HalRuartStopSendRtl8195a -0000504d A HalRuartIntRecvRtl8195a -000051ad A HalRuartDmaRecvRtl8195a -000052cd A HalRuartStopRecvRtl8195a -00005385 A RuartIsTimeout -000053b1 A HalRuartSendRtl8195a -00005599 A HalRuartRecvRtl8195a -00005751 A RuartResetRxFifoRtl8195a -00005775 A HalRuartResetRxFifoRtl8195a -00005829 A HalRuartInitRtl8195a -00005df1 A HalGdmaOnOffRtl8195a -00005e0d A HalGdmaChIsrEnAndDisRtl8195a -00005e51 A HalGdmaChEnRtl8195a -00005e6d A HalGdmaChDisRtl8195a -00005e91 A HalGdamChInitRtl8195a -00005ebd A HalGdmaChSetingRtl8195a -000060dd A HalGdmaChBlockSetingRtl8195a -00006419 A HalGdmaChIsrCleanRtl8195a -000064a1 A HalGdmaChCleanAutoSrcRtl8195a -00006501 A HalGdmaChCleanAutoDstRtl8195a -00006561 A HalEFUSEPowerSwitch8195AROM -000065f9 A HALEFUSEOneByteReadROM -00006699 A HALEFUSEOneByteWriteROM -0000681d A __rtl_memcmpb_v1_00 -00006861 A __rtl_random_v1_00 -00006881 A __rtl_align_to_be32_v1_00 -00006899 A __rtl_memsetw_v1_00 -000068ad A __rtl_memsetb_v1_00 -000068bd A __rtl_memcpyw_v1_00 -000068dd A __rtl_memcpyb_v1_00 -000068f5 A __rtl_memDump_v1_00 -00006901 A __rtl_AES_set_encrypt_key -00006c11 A __rtl_cryptoEngine_AES_set_decrypt_key -00006c95 A __rtl_cryptoEngine_set_security_mode_v1_00 -00006ea9 A __rtl_cryptoEngine_init_v1_00 -00007055 A __rtl_cryptoEngine_exit_v1_00 -000070b1 A __rtl_cryptoEngine_reset_v1_00 -000070ed A __rtl_cryptoEngine_v1_00 -00007c69 A __rtl_crypto_cipher_init_v1_00 -00007c89 A __rtl_crypto_cipher_encrypt_v1_00 -00007cad A __rtl_crypto_cipher_decrypt_v1_00 -00007cd5 A HalSsiPinmuxEnableRtl8195a -00007e45 A HalSsiEnableRtl8195a -00007ef9 A HalSsiDisableRtl8195a -00007fad A HalSsiLoadSettingRtl8195a -00008521 A HalSsiSetInterruptMaskRtl8195a -000085c9 A HalSsiGetInterruptMaskRtl8195a -0000863d A HalSsiSetSclkPolarityRtl8195a -00008715 A HalSsiSetSclkPhaseRtl8195a -000087e9 A HalSsiWriteRtl8195a -00008861 A HalSsiSetDeviceRoleRtl8195a -000088c9 A HalSsiSetRxFifoThresholdLevelRtl8195a -00008941 A HalSsiSetTxFifoThresholdLevelRtl8195a -000089b9 A HalSsiReadRtl8195a -00008a2d A HalSsiGetRxFifoLevelRtl8195a -00008aa5 A HalSsiGetTxFifoLevelRtl8195a -00008b1d A HalSsiGetStatusRtl8195a -00008b91 A HalSsiWriteableRtl8195a -00008c09 A HalSsiReadableRtl8195a -00008c81 A HalSsiBusyRtl8195a -00008cf9 A HalSsiReadInterruptRtl8195a -00008efd A HalSsiWriteInterruptRtl8195a -00009009 A HalSsiSetSlaveEnableRegisterRtl8195a -000090d9 A HalSsiGetInterruptStatusRtl8195a -0000914d A HalSsiInterruptEnableRtl8195a -00009299 A HalSsiInterruptDisableRtl8195a -000093e9 A HalSsiGetRawInterruptStatusRtl8195a -0000945d A HalSsiGetSlaveEnableRegisterRtl8195a -000094d1 A HalSsiInitRtl8195a -00009ba5 A _SsiReadInterrupt -00009db1 A _SsiWriteInterrupt -00009eb1 A _SsiIrqHandle -0000a061 A HalI2CWrite32 -0000a09d A HalI2CRead32 -0000a0dd A HalI2CDeInit8195a -0000a1f1 A HalI2CSendRtl8195a -0000a25d A HalI2CReceiveRtl8195a -0000a271 A HalI2CEnableRtl8195a -0000a389 A HalI2CIntrCtrl8195a -0000a3a1 A HalI2CReadRegRtl8195a -0000a3b1 A HalI2CWriteRegRtl8195a -0000a3c5 A HalI2CSetCLKRtl8195a -0000a6e9 A HalI2CMassSendRtl8195a -0000a749 A HalI2CClrIntrRtl8195a -0000a761 A HalI2CClrAllIntrRtl8195a -0000a775 A HalI2CInit8195a -0000aa31 A HalI2CDMACtrl8195a -0000aa61 A RtkI2CIoCtrl -0000aa65 A RtkI2CPowerCtrl -0000aa69 A HalI2COpInit -0000ac65 A I2CIsTimeout -0000b435 A I2CTXGDMAISRHandle -0000b4c1 A I2CRXGDMAISRHandle -0000b54d A RtkI2CIrqInit -0000b611 A RtkI2CIrqDeInit -0000b675 A RtkI2CPinMuxInit -0000b7c9 A RtkI2CPinMuxDeInit -0000b955 A RtkI2CDMAInit -0000bc95 A RtkI2CInit -0000bdad A RtkI2CDMADeInit -0000be4d A RtkI2CDeInit -0000bee5 A RtkI2CSendUserAddr -0000c07d A RtkI2CSend -0000c6dd A _RtkI2CReceive -0000ce51 A RtkI2CLoadDefault -0000cf21 A RtkSalI2COpInit -0000cf65 A HalI2SWrite32 -0000cf85 A HalI2SRead32 -0000cfa9 A HalI2SDeInitRtl8195a -0000cfc9 A HalI2STxRtl8195a -0000d011 A HalI2SRxRtl8195a -0000d05d A HalI2SEnableRtl8195a -0000d0b1 A HalI2SIntrCtrlRtl8195a -0000d0d1 A HalI2SReadRegRtl8195a -0000d0dd A HalI2SClrIntrRtl8195a -0000d0fd A HalI2SClrAllIntrRtl8195a -0000d11d A HalI2SInitRtl8195a -0000d2e5 A GPIO_GetIPPinName_8195a -0000d331 A GPIO_GetChipPinName_8195a -0000d39d A GPIO_PullCtrl_8195a -0000d421 A GPIO_FuncOn_8195a -0000d481 A GPIO_FuncOff_8195a -0000d4e9 A GPIO_Int_Mask_8195a -0000d511 A GPIO_Int_SetType_8195a -0000d5fd A HAL_GPIO_IrqHandler_8195a -0000d645 A HAL_GPIO_MbedIrqHandler_8195a -0000d6a1 A HAL_GPIO_UserIrqHandler_8195a -0000d6cd A HAL_GPIO_IntCtrl_8195a -0000d805 A HAL_GPIO_Init_8195a -0000dac1 A HAL_GPIO_DeInit_8195a -0000dbd1 A HAL_GPIO_ReadPin_8195a -0000dc91 A HAL_GPIO_WritePin_8195a -0000ddad A HAL_GPIO_RegIrq_8195a -0000ddf5 A HAL_GPIO_UnRegIrq_8195a -0000de15 A HAL_GPIO_UserRegIrq_8195a -0000def9 A HAL_GPIO_UserUnRegIrq_8195a -0000dfc1 A HAL_GPIO_MaskIrq_8195a -0000e061 A HAL_GPIO_UnMaskIrq_8195a -0000e101 A HAL_GPIO_IntDebounce_8195a -0000e1c1 A HAL_GPIO_GetIPPinName_8195a -0000e1c9 A HAL_GPIO_PullCtrl_8195a -0000e259 A DumpForOneBytes -0000e419 A CmdRomHelp -0000e491 A CmdWriteWord -0000e505 A CmdDumpHelfWord -0000e5f1 A CmdDumpWord -0000e6f5 A CmdDumpByte -0000e751 A CmdSpiFlashTool -0000e7a9 A GetRomCmdNum -0000e7ad A CmdWriteByte -0000e7ed A Isspace -0000e801 A Strtoul -0000e8b1 A ArrayInitialize -0000e8c9 A GetArgc -0000e8f9 A GetArgv -0000e95d A UartLogCmdExecute -0000e9fd A UartLogShowBackSpace -0000ea39 A UartLogRecallOldCmd -0000ea71 A UartLogHistoryCmd -0000eadd A UartLogCmdChk -0000ebf5 A UartLogIrqHandle -0000ecc5 A RtlConsolInit -0000ed49 A RtlConsolTaskRom -0000ed79 A RtlExitConsol -0000edcd A RtlConsolRom -0000ee0d A HalTimerOpInit -0000ee59 A HalTimerIrq2To7Handle -0000ef09 A HalGetTimerIdRtl8195a -0000ef3d A HalTimerInitRtl8195a -0000f069 A HalTimerDisRtl8195a -0000f089 A HalTimerEnRtl8195a -0000f0a9 A HalTimerReadCountRtl8195a -0000f0bd A HalTimerIrqClearRtl8195a -0000f0d1 A HalTimerDumpRegRtl8195a -0000f129 A VSprintf -0000f39d A DiagPrintf -0000f3b9 A DiagSPrintf -0000f3d1 A DiagSnPrintf -0000f3ed A prvDiagPrintf -0000f40d A prvDiagSPrintf -0000f429 A _memcmp -0000f465 A _memcpy -0000f511 A _memset -0000f585 A Rand -0000f60d A _strncpy -0000f629 A _strcpy -0000f639 A prvStrCpy -0000f651 A _strlen -0000f669 A _strnlen -0000f699 A prvStrLen -0000f6b1 A _strcmp -0000f6d1 A _strncmp -0000f719 A prvStrCmp -0000f749 A StrUpr -0000f769 A prvAtoi -0000f7bd A prvStrStr -0000f7d5 A _strsep -0000f815 A skip_spaces -0000f831 A skip_atoi -0000f869 A _parse_integer_fixup_radix -0000f8bd A _parse_integer -0000f915 A simple_strtoull -0000f945 A simple_strtoll -0000f965 A simple_strtoul -0000f96d A simple_strtol -0000f985 A _vsscanf -0000ff71 A _sscanf -0000ff91 A div_u64 -0000ff99 A div_s64 -0000ffa1 A div_u64_rem -0000ffb1 A div_s64_rem -0000ffc1 A _strpbrk -0000ffed A _strchr -00010005 A aes_set_key -000103d1 A aes_encrypt -000114a5 A aes_decrypt -000125c9 A AES_WRAP -00012701 A AES_UnWRAP -00012861 A crc32_get -00012895 A arc4_byte -000128bd A rt_arc4_init -00012901 A rt_arc4_crypt -000131c1 A rt_md5_init -000131f5 A rt_md5_append -0001327d A rt_md5_final -000132d5 A rt_md5_hmac -00013449 A rtw_get_bit_value_from_ieee_value -00013475 A rtw_is_cckrates_included -000134b5 A rtw_is_cckratesonly_included -000134dd A rtw_check_network_type -0001350d A rtw_set_fixed_ie -0001352d A rtw_set_ie -0001355d A rtw_get_ie -00013591 A rtw_set_supported_rate -00013611 A rtw_get_rateset_len -0001362d A rtw_get_wpa_ie -000136c9 A rtw_get_wpa2_ie -00013701 A rtw_get_wpa_cipher_suite -00013769 A rtw_get_wpa2_cipher_suite -000137d1 A rtw_parse_wpa_ie -000138ad A rtw_parse_wpa2_ie -00013965 A rtw_get_sec_ie -00013a15 A rtw_get_wps_ie -00013a99 A rtw_get_wps_attr -00013b49 A rtw_get_wps_attr_content -00013b91 A rtw_ieee802_11_parse_elems -00013d9d A str_2char2num -00013db9 A key_2char2num -00013dd1 A convert_ip_addr -00013e9d A rom_psk_PasswordHash -00013ed5 A rom_psk_CalcGTK -00013f69 A rom_psk_CalcPTK -00014295 A wep_80211_encrypt -000142f5 A wep_80211_decrypt -00014389 A tkip_micappendbyte -000143d9 A rtw_secmicsetkey -00014419 A rtw_secmicappend -00014435 A rtw_secgetmic -0001449d A rtw_seccalctkipmic -000145a5 A tkip_phase1 -00014725 A tkip_phase2 -00014941 A tkip_80211_encrypt -000149d5 A tkip_80211_decrypt -00014a8d A aes1_encrypt -00014c65 A aesccmp_construct_mic_iv -00014ccd A aesccmp_construct_mic_header1 -00014d21 A aesccmp_construct_mic_header2 -00014db5 A aesccmp_construct_ctr_preload -00014e29 A aes_80211_encrypt -000151ad A aes_80211_decrypt -000155b9 A _sha1_process_message_block -00015749 A _sha1_pad_message -000157e5 A rt_sha1_init -00015831 A rt_sha1_update -000158a9 A rt_sha1_finish -00015909 A rt_hmac_sha1 -00015a65 A rom_aes_128_cbc_encrypt -00015ae1 A rom_aes_128_cbc_decrypt -00015b5d A rom_rijndaelKeySetupEnc -00015c39 A rom_aes_decrypt_init -00015d15 A rom_aes_internal_decrypt -00016071 A rom_aes_decrypt_deinit -00016085 A rom_aes_encrypt_init -0001609d A rom_aes_internal_encrypt -00016451 A rom_aes_encrypt_deinit -00017b35 A bignum_init -00017b61 A bignum_deinit -00017b81 A bignum_get_unsigned_bin_len -00017b85 A bignum_get_unsigned_bin -00017c21 A bignum_set_unsigned_bin -00017cd1 A bignum_cmp -00017cd5 A bignum_cmp_d -00017cfd A bignum_add -00017d0d A bignum_sub -00017d1d A bignum_mul -00017d2d A bignum_exptmod -00017d51 A WPS_realloc -00017d99 A os_zalloc -00017dc1 A rom_hmac_sha256_vector -00017ebd A rom_hmac_sha256 -00018009 A rom_sha256_vector -00018221 A phy_CalculateBitShift -00018239 A PHY_SetBBReg_8195A -00018279 A PHY_QueryBBReg_8195A -0001829d A ROM_odm_QueryRxPwrPercentage -000182bd A ROM_odm_EVMdbToPercentage -000182e5 A ROM_odm_SignalScaleMapping_8195A -000183cd A ROM_odm_FalseAlarmCounterStatistics -00018721 A ROM_odm_SetEDCCAThreshold -00018749 A ROM_odm_SetTRxMux -00018771 A ROM_odm_SetCrystalCap -000187d5 A ROM_odm_GetDefaultCrytaltalCap -000187e9 A ROM_ODM_CfoTrackingReset -00018811 A ROM_odm_CfoTrackingFlow -0001965d A curve25519_donna -0001a391 A aes_test_alignment_detection -0001a3ed A aes_mode_reset -0001a3f9 A aes_ecb_encrypt -0001a431 A aes_ecb_decrypt -0001a469 A aes_cbc_encrypt -0001a579 A aes_cbc_decrypt -0001a701 A aes_cfb_encrypt -0001a9e5 A aes_cfb_decrypt -0001acc9 A aes_ofb_crypt -0001af7d A aes_ctr_crypt -0001b289 A aes_encrypt_key128 -0001b2a5 A aes_encrypt_key192 -0001b2c1 A aes_encrypt_key256 -0001b2e1 A aes_encrypt_key -0001b351 A aes_decrypt_key128 -0001b36d A aes_decrypt_key192 -0001b389 A aes_decrypt_key256 -0001b3a9 A aes_decrypt_key -0001b419 A aes_init -0001b41d A CRYPTO_chacha_20 -0001bc25 A CRYPTO_poly1305_init -0001bd09 A CRYPTO_poly1305_update -0001bd8d A CRYPTO_poly1305_finish -0001ceb5 A rom_sha512_starts -0001d009 A rom_sha512_update -0001d011 A rom_sha512_finish -0001d261 A rom_sha512 -0001d299 A rom_sha512_hmac_starts -0001d35d A rom_sha512_hmac_update -0001d365 A rom_sha512_hmac_finish -0001d3b5 A rom_sha512_hmac_reset -0001d3d1 A rom_sha512_hmac -0001d40d A rom_sha512_hkdf -0001d501 A rom_ed25519_gen_keypair -0001d505 A rom_ed25519_gen_signature -0001d51d A rom_ed25519_verify_signature -0001d521 A rom_ed25519_crypto_sign_seed_keypair -0001d579 A rom_ed25519_crypto_sign_detached -0001d655 A rom_ed25519_crypto_sign_verify_detached -0001f86d A rom_ed25519_ge_double_scalarmult_vartime -0001fc35 A rom_ed25519_ge_frombytes_negate_vartime -000207d5 A rom_ed25519_ge_p3_tobytes -00020821 A rom_ed25519_ge_scalarmult_base -000209e1 A rom_ed25519_ge_tobytes -00020a2d A rom_ed25519_sc_muladd -0002603d A rom_ed25519_sc_reduce -00028a4d A __rtl_memchr_v1_00 -00028ae1 A __rtl_memcmp_v1_00 -00028b49 A __aeabi_memcpy -00028b49 A __aeabi_memcpy4 -00028b49 A __rtl_memcpy_v1_00 -00028bed A __rtl_memmove_v1_00 -00028cb5 A __aeabi_memset -00028cb5 A __rtl_memset_v1_00 -00028d49 A __rtl_strcat_v1_00 -00028d91 A __rtl_strchr_v1_00 -00028e55 A __rtl_strcmp_v1_00 -00028ec9 A __rtl_strcpy_v1_00 -00028f15 A __rtl_strlen_v1_00 -00028f69 A __rtl_strncat_v1_00 -00028fc5 A __rtl_strncmp_v1_00 -0002907d A __rtl_strncpy_v1_00 -000293cd A __rtl_strstr_v1_00 -0002960d A __rtl_strsep_v1_00 -00029619 A __rtl_strtok_v1_00 -0002962d A __rtl__strtok_r_v1_00 -00029691 A __rtl_strtok_r_v1_00 -00029699 A __rtl_close_v1_00 -000296ad A __rtl_fstat_v1_00 -000296c1 A __rtl_isatty_v1_00 -000296d5 A __rtl_lseek_v1_00 -000296e9 A __rtl_open_v1_00 -000296fd A __rtl_read_v1_00 -00029711 A __rtl_write_v1_00 -00029725 A __rtl_sbrk_v1_00 -000297bd A __rtl_ltoa_v1_00 -00029855 A __rtl_ultoa_v1_00 -000298c5 A __rtl_dtoi_v1_00 -00029945 A __rtl_dtoi64_v1_00 -000299dd A __rtl_dtoui_v1_00 -000299e5 A __rtl_ftol_v1_00 -00029a51 A __rtl_itof_v1_00 -00029ae9 A __rtl_itod_v1_00 -00029b79 A __rtl_i64tod_v1_00 -00029c55 A __rtl_uitod_v1_00 -00029d2d A __rtl_ftod_v1_00 -00029de9 A __rtl_dtof_v1_00 -00029e89 A __rtl_uitof_v1_00 -00029f65 A __rtl_fadd_v1_00 -0002a261 A __rtl_fsub_v1_00 -0002a559 A __rtl_fmul_v1_00 -0002a695 A __rtl_fdiv_v1_00 -0002a825 A __rtl_dadd_v1_00 -0002aed9 A __rtl_dsub_v1_00 -0002b555 A __rtl_dmul_v1_00 -0002b8ad A __rtl_ddiv_v1_00 -0002be4d A __rtl_dcmpeq_v1_00 -0002bebd A __rtl_dcmplt_v1_00 -0002bf51 A __rtl_dcmpgt_v1_00 -0002c049 A __rtl_dcmple_v1_00 -0002c139 A __rtl_fcmplt_v1_00 -0002c195 A __rtl_fcmpgt_v1_00 -0002c229 A __rtl_cos_f32_v1_00 -0002c435 A __rtl_sin_f32_v1_00 -0002c639 A __rtl_fabs_v1_00 -0002c641 A __rtl_fabsf_v1_00 -0002c77d A __rtl_dtoa_r_v1_00 -0002d7d1 A __rom_mallocr_init_v1_00 -0002d841 A __rtl_free_r_v1_00 -0002da31 A __rtl_malloc_r_v1_00 -0002df55 A __rtl_realloc_r_v1_00 -0002e331 A __rtl_memalign_r_v1_00 -0002e421 A __rtl_valloc_r_v1_00 -0002e42d A __rtl_pvalloc_r_v1_00 -0002e441 A __rtl_calloc_r_v1_00 -0002e4a9 A __rtl_cfree_r_v1_00 -0002e515 A __rtl_Balloc_v1_00 -0002e571 A __rtl_Bfree_v1_00 -0002e585 A __rtl_i2b_v1_00 -0002e599 A __rtl_multadd_v1_00 -0002e629 A __rtl_mult_v1_00 -0002e769 A __rtl_pow5mult_v1_00 -0002e809 A __rtl_hi0bits_v1_00 -0002e845 A __rtl_d2b_v1_00 -0002e901 A __rtl_lshift_v1_00 -0002e9bd A __rtl_cmp_v1_00 -0002ea01 A __rtl_diff_v1_00 -0002eae9 A __rtl_sread_v1_00 -0002eb39 A __rtl_seofread_v1_00 -0002eb3d A __rtl_swrite_v1_00 -0002ebc1 A __rtl_sseek_v1_00 -0002ec11 A __rtl_sclose_v1_00 -0002ec41 A __rtl_sbrk_r_v1_00 -0002ef8d A __rtl_fflush_r_v1_00 -0002f661 A __rtl_vfprintf_r_v1_00 -00030c15 A __rtl_fpclassifyd -00030c68 A CpkClkTbl -00030c80 A ROM_IMG1_VALID_PATTEN -00030c88 A SpicCalibrationPattern -00030c98 A SpicInitCPUCLK -00030ca8 A BAUDRATE -00030d1c A OVSR -00030d90 A DIV -00030e04 A OVSR_ADJ -00030e78 A __AES_rcon -00030ea0 A __AES_Te4 -000312a0 A I2CDmaChNo -000312b4 A _GPIO_PinMap_Chip2IP_8195a -0003136c A _GPIO_PinMap_PullCtrl_8195a -00031594 A _GPIO_SWPORT_DDR_TBL -00031598 A _GPIO_EXT_PORT_TBL -0003159c A _GPIO_SWPORT_DR_TBL -000316a0 A UartLogRomCmdTable -00031700 A _HalRuartOp -00031760 A _HalGdmaOp -0003540c A RTW_WPA_OUI_TYPE -00035410 A WPA_CIPHER_SUITE_NONE -00035414 A WPA_CIPHER_SUITE_WEP40 -00035418 A WPA_CIPHER_SUITE_TKIP -0003541c A WPA_CIPHER_SUITE_CCMP -00035420 A WPA_CIPHER_SUITE_WEP104 -00035424 A RSN_CIPHER_SUITE_NONE -00035428 A RSN_CIPHER_SUITE_WEP40 -0003542c A RSN_CIPHER_SUITE_TKIP -00035430 A RSN_CIPHER_SUITE_CCMP -00035434 A RSN_CIPHER_SUITE_WEP104 -00035444 A RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X -00035448 A RSN_AUTH_KEY_MGMT_UNSPEC_802_1X -0003544c A RSN_VERSION_BSD -00035988 A rom_wps_Te0 -00035d88 A rom_wps_rcons -00035d94 A rom_wps_Td4s -00035e94 A rom_wps_Td0 -0003ec24 A str_rom_0123456789ABCDEF -0003ec24 A txt0123456789ABCDEF -0003ed05 A str_rom_57ch3Dch0A -000442d6 A str_rom_hex_addr -00044660 A str_rom_0123456789abcdef -0004467c A __rom_b_cut_end__ -0004467c A __rom_c_cut_text_start__ -0004467d A HalInitPlatformLogUartV02 -0004471d A HalReInitPlatformLogUartV02 -00044755 A HalInitPlatformTimerV02 -000447cd A HalShowBuildInfoV02 -00044831 A SpicReleaseDeepPowerDownFlashRtl8195A -0004488d A HalSpiInitV02 -00044a29 A HalBootFlowV02 -00044ae5 A HalInitialROMCodeGlobalVarV02 -00044b41 A HalResetVsrV02 -00044ce1 A HalI2CSendRtl8195aV02 -00044d59 A HalI2CSetCLKRtl8195aV02 -0004508d A RtkI2CSendV02 -000459a1 A RtkI2CReceiveV02 -000461ed A HalI2COpInitV02 -000463e9 A I2CISRHandleV02 -00046be1 A RtkSalI2COpInitV02 -00046c25 A SpicLoadInitParaFromClockRtl8195AV02 -00046c85 A SpiFlashAppV02 -00046dc5 A SpicInitRtl8195AV02 -00046ea1 A SpicEraseFlashRtl8195AV02 -00046f5d A HalTimerIrq2To7HandleV02 -00046fe1 A HalTimerIrqRegisterRtl8195aV02 -0004706d A HalTimerInitRtl8195aV02 -000471b5 A HalTimerReadCountRtl8195aV02 -000471d1 A HalTimerReLoadRtl8195aV02 -0004722d A HalTimerIrqUnRegisterRtl8195aV02 -000472c1 A HalTimerDeInitRtl8195aV02 -000472f9 A HalTimerOpInitV02 -00047345 A GPIO_LockV02 -00047379 A GPIO_UnLockV02 -000473a5 A GPIO_Int_Clear_8195aV02 -000473b5 A HAL_GPIO_IntCtrl_8195aV02 -00047541 A FindElementIndexV02 -0004756d A HalRuartInitRtl8195aV02 -00047619 A DramInit_rom -00047979 A ChangeRandSeed_rom -00047985 A Sdr_Rand2_rom -000479dd A MemTest_rom -00047a45 A SdrCalibration_rom -00047d99 A SdrControllerInit_rom -00047e39 A SDIO_EnterCritical -00047e85 A SDIO_ExitCritical -00047ec5 A SDIO_IRQ_Handler_Rom -00047f31 A SDIO_Interrupt_Init_Rom -00047f81 A SDIO_Device_Init_Rom -00048215 A SDIO_Interrupt_DeInit_Rom -00048255 A SDIO_Device_DeInit_Rom -00048281 A SDIO_Enable_Interrupt_Rom -000482a1 A SDIO_Disable_Interrupt_Rom -000482c1 A SDIO_Clear_ISR_Rom -000482d9 A SDIO_Alloc_Rx_Pkt_Rom -00048331 A SDIO_Free_Rx_Pkt_Rom -00048355 A SDIO_Recycle_Rx_BD_Rom -000484f1 A SDIO_RX_IRQ_Handler_BH_Rom -0004851d A SDIO_RxTask_Rom -0004856d A SDIO_Process_H2C_IOMsg_Rom -0004859d A SDIO_Send_C2H_IOMsg_Rom -000485b5 A SDIO_Process_RPWM_Rom -000485e9 A SDIO_Reset_Cmd_Rom -00048611 A SDIO_Rx_Data_Transaction_Rom -00048829 A SDIO_Send_C2H_PktMsg_Rom -000488f5 A SDIO_Register_Tx_Callback_Rom -000488fd A SDIO_ReadMem_Rom -000489a9 A SDIO_WriteMem_Rom -00048a69 A SDIO_SetMem_Rom -00048b29 A SDIO_TX_Pkt_Handle_Rom -00048c69 A SDIO_TX_FIFO_DataReady_Rom -00048d95 A SDIO_IRQ_Handler_BH_Rom -00048e9d A SDIO_TxTask_Rom -00048eed A SDIO_TaskUp_Rom -00048f55 A SDIO_Boot_Up -00049070 A __rom_c_cut_rodata_start__ -00049070 A __rom_c_cut_text_end__ -00049070 A BAUDRATE_v02 -000490fc A OVSR_v02 -00049188 A DIV_v02 -00049214 A OVSR_ADJ_v02 -000492a0 A SdrDramInfo_rom -000492b4 A SdrDramTiming_rom -000492e8 A SdrDramModeReg_rom -00049304 A SdrDramDev_rom -00049314 A __rom_c_cut_rodata_end__ -10000000 D __ram_image_start__ -10000000 D NewVectorTable -10000100 D UserIrqFunTable -10000200 D UserIrqDataTable -10000300 D __rom_bss_start__ -10000300 D CfgSysDebugWarn -10000304 D CfgSysDebugInfo -10000308 D CfgSysDebugErr -1000030c D ConfigDebugWarn -10000310 D ConfigDebugInfo -10000314 D ConfigDebugErr -10000318 D HalTimerOp -10000334 D GPIOState -1000034c D gTimerRecord -10000350 D SSI_DBG_CONFIG -10000354 D _pHAL_Gpio_Adapter -10000358 D Timer2To7VectorTable -10000370 D _rand_first -10000374 D _rand_z1 -10000378 D _rand_z2 -1000037c D _rand_z3 -10000380 D _rand_z4 -10000384 D pUartLogCtl -10000388 D UartLogBuf -10000408 D UartLogCtl -10000430 D UartLogHistoryBuf -100006ac D ArgvArray -100006d4 D rom_wlan_ram_map -100006e0 D FalseAlmCnt -10000720 D ROMInfo -10000738 D DM_CfoTrack -10000760 D rom_libgloss_ram_map -10000780 D __rtl_malloc_av_ -10000b88 D __rtl_malloc_trim_threshold -10000b8c D __rtl_malloc_top_pad -10000b90 D __rtl_malloc_sbrk_base -10000b94 D __rtl_malloc_max_sbrked_mem -10000b98 D __rtl_malloc_max_total_mem -10000b9c D __rtl_malloc_current_mallinfo -10000bc4 D __rtl_errno -10000bc8 A __ram_start_table_start__ -10000bc8 A gRamStartFun -10000bc8 D __rom_bss_end__ -10000bc8 T __ram_image1_text_start__ -10000bcc A gRamPatchWAKE -10000bd0 A gRamPatchFun0 -10000bd4 A gRamPatchFun1 -10000bd8 A gRamPatchFun2 -10000bdc A __image1_validate_code__ -10000bdc T RAM_IMG1_VALID_PATTEN -10000be4 T rand_x -10000be8 T AvaWds -10001be8 T SdrDramInfo -10001bfc T SdrDramTiming -10001c30 T SdrDramModeReg -10001c4c T SdrDramDev -10001c60 T _rtl_impure_ptr -10001c68 T impure_reent -10002090 T _rom_unc_data -100020b4 T _sdr_rnd2_y -100020b8 T _sdr_rnd2_z -100020bc T _sdr_rnd2_c -100020c0 t __ram_image_end__ -100020c0 T gBoot_Gpio_Adapter -100021ec T SpicInitParaAllClk -10002400 B __rom_heap_start__ -10002400 B end -10002430 t tab_seg_def -10002468 t txt_tab_seg -10002488 t flashcpy -10002528 t get_seg_id -10002558 t RtlConsolRam -1000257c T InitSpicFlashType -100025bc t EnterImage15 -10002c8c t RtlBoot4ToSram -10002c92 t RtlBoot3ToSram -10002c98 t RtlBoot2ToSram -10002c9e t RtlBoot1ToSram -10002ca4 t RtlBootToFlash -10002cac t InitTabParaAllClk -10002cf4 T spic_table_flash -10002d10 T __image1_bss_end__ -10002d10 T __image1_bss_start__ -10002d10 T __ram_image1_text_end__ -10003000 B __ram_heap1_start__ -10003000 B __rom_heap_end__ -10006000 D .image2.start.table1$$Base -10006000 D __image2_entry_func__ -10006000 D __ram_heap1_end__ -10006000 D __ram_image2_text_start__ -10006000 D gImage2EntryFun0 -10006004 D __image2_validate_code__ -10006004 D RAM_IMG2_VALID_PATTEN -10006018 D cus_sig -10006040 T SDIO_Device_Off -10006064 T SYSPlatformInit -10006084 T InfraStart -10006368 T UartLogIrqHandleRam -1000642c T RtlConsolTaskRam -100064f4 T console_init -100065c0 T SpicRxCmdRefinedRtl8195A -100066c8 T SpicInitRefinedRtl8195A -1000677c T SpicReadUniqueIDRtl8195A -100067f0 T SpicReadIDRtl8195A -10006900 T SpicConfigAutoModeRtl8195A -10006970 T SpicUserReadRtl8195A -10006ae4 T SpicUserReadFourByteRtl8195A -10006c00 T SpicGetExtendAddrRtl8195A -10006c58 T SpicGetConfigRegRtl8195A -10006cb0 T SpicGetFlashStatusRefinedRtl8195A -10006d08 T SpicWaitWipDoneRefinedRtl8195A -10006d44 T SpicTxCmdWithDataRtl8195A -10006e18 T SpicGetFlashFlagRtl8195A -10006ea4 T SpicWaitOperationDoneRtl8195A -10006ee0 T SpicDeepPowerDownFlashRtl8195A -10006f6c T SpicUserProgramRtl8195A -1000719c T SpicWaitWipRtl8195A -100071b0 T SpicTxFlashInstRtl8195A -10007244 T SpicEraseFlashRefinedRtl8195A -1000724e T SpicDieEraseFlashRtl8195A -10007270 T SpicBlockEraseFlashRtl8195A -10007292 T SpicSectorEraseFlashRtl8195A -100072b4 T SpicSetExtendAddrRtl8195A -100072ce T SpicSetFlashStatusRefinedRtl8195A -10007300 T SpicWriteProtectFlashRtl8195A -10007328 T SpicDisableRtl8195A -10007338 T SpicNVMCalLoad -10007448 T SpicNVMCalLoadAll -10007466 T SpicNVMCalStore -100075c0 T SpicCalibrationRtl8195A -10007814 T SpicFlashInitRtl8195A -100078c0 T SpicOneBitCalibrationRtl8195A -100078d8 T ShowMemInfo -10007908 T main -100079a0 T sys_write_cfg -100079b0 T user_ws_thrd -100079d8 T user_init_thrd -10007a4c t WS2812_RGB2PWM -10007a8c t master_tr_done_callback -10007ae4 T WS2812_Tx -10007ba4 T ws2812_Update -10007cd4 T ws2812_SetLen -10007d60 T ws2812_Init -10007e30 T ledFilter_Init -10007ed8 T ledFilter_SetDefualtValue -10007ef4 T ledFilter_InitRainbow -10007f1c T ledFilter_Rainbow -10007f70 T ledFilter_InitFade -10007fa4 T ledFilter_Fade -10008040 T ledFilter_InitWave -10008068 T ledFilter_Wave -100080c4 T ledFilter_InitConstant -100080f0 T ledFilter_Constant -10008170 T ledEffectsServer_Init -100081d8 T ledEffectsServer_Task -10008258 t tcpsrv_list_delete -100082d4 t recv_trim_bufi -100083c2 t tcpsrv_server_sent -100083f0 T tspsrv_error_msg -10008408 T tcpsrv_print_remote_info -10008438 T tcpsrv_disconnect_calback_default -10008450 T tcpsrv_listen_default -10008464 T tcpsrv_sent_callback_default -10008478 T tcpsrv_received_data_default -10008490 t tcpsrv_server_close -10008590 t tcpsrv_poll -100085f6 t tcpsrv_server_recv -100086b0 t tcpsrv_error -100086f4 T find_tcp_pcb -10008758 t tspsrv_delete_pcb -100087aa T tcpsrv_disconnect -100087cc T tcpsrv_int_sent_data -1000889c T tcpsrv_unrecved_win -100088b4 T tcpsrv_server_port2pcfg -100088cc t tcpsrv_server_accept -100089fc T tcpsrv_init -10008a78 T tcpsrv_start -10008b10 T tcpsrv_close -10008b60 T WEBFSClose -10008b78 T WEBFSGetArray -10008be8 T WEBFSInit -10008c70 t GetFATRecord -10008ce0 T WEBFSOpen -10008dcc T WEBFSGetBytesRem -10008dec T WEBFSGetFilename -10008e30 T WEBFS_max_size -10008e44 T WEBFS_curent_size -10008e80 T WEBFS_base_addr -10008e88 t web_inc_fp -10008ecc t Close_web_conn -10008f10 T qfnk_task -10008f6c t find_boundary -10008fe4 t web_int_disconnect -10009020 t webserver_disconnect -10009048 t web_parse_vars -100090d8 T head_find_ctr -10009130 T web_inc_fopen -100091b0 t webserver_open_file -100092dc T web_inc_fclose -10009328 t webserver_send_fdata -100095fc t webserver_sent_callback -10009674 T web_trim_bufi -100096b2 T web_feee_bufi -100096cc t webserver_received_data -1000a430 T webserver_qfn -1000a454 T webserver_init -1000a4fc T webserver_reinit -1000a520 T rom_xstrcpy -1000a536 T rom_xstrcmp -1000a54e T rom_atoi -1000a590 T copy_align4 -1000a648 T hextoul -1000a682 T ahextoul -1000a69c T cmpcpystr -1000a714 T str_array -1000a774 T strtomac -1000a7d6 T urldecode -1000a882 T htmlcode -1000a984 T web_strnstr -1000a9c4 T base64decode -1000aa5c T web_hexdump -1000abac T web_get_flash -1000ac20 T web_get_ram -1000aca4 t web_wscan_xml -1000adf4 T web_int_callback -1000c13c T web_int_vars -1000cbc8 T UserAuthorization -1000cc20 T SystemCoreClockUpdate -1000cc34 T print_on -1000cc4c W console_help -1000cc8c T GetArgvRam -1000cd30 T get_eap_phase -1000cd34 T get_eap_method -1000cd38 T eap_autoreconnect_hdl -1000cd3c t wifi_no_network_hdl -1000cd54 t wifi_handshake_done_hdl -1000cd70 t wifi_disconn_hdl -1000cddc t wifi_connected_hdl -1000ce10 T wifi_scan_each_report_hdl -1000cf70 T wifi_rx_beacon_hdl -1000cf74 T wifi_connect -1000d3b0 T wifi_disconnect -1000d3e4 T wifi_set_country -1000d3f0 T wifi_get_rssi -1000d3fc T wifi_off -1000d470 T wifi_start_ap -1000d55c T wifi_set_network_mode -1000d574 T wifi_indication -1000d5b4 T wifi_reg_event_handler -1000d604 T wifi_unreg_event_handler -1000d648 T init_event_callback_list -1000d658 T promisc_deinit -1000d65c T promisc_recv_func -1000d660 T promisc_set -1000d664 T is_promisc_enabled -1000d668 T iw_ioctl -1000d684 T wext_set_ssid -1000d6b8 T wext_set_bssid -1000d702 T is_broadcast_ether_addr -1000d722 T wext_set_auth_param -1000d750 T wext_set_key_ext -1000d84e T wext_set_passphrase -1000d882 T wext_set_mode -1000d8a6 T wext_set_ap_ssid -1000d8da T wext_set_country -1000d8fe T wext_get_rssi -1000d92a T wext_set_channel -1000d958 T wext_set_scan -1000d988 T wext_wlan_indicate -1000dad0 T wext_set_autoreconnect -1000db20 T wext_set_adaptivity -1000db48 T wext_set_sta_num -1000db4c T LwIP_DHCP -1000dccc t chk_ap_netif_num -1000dd18 t wifi_autoreconnect_hdl_ -1000dd68 T read_wifi_cfg -1000ddb0 T write_wifi_cfg -1000ddf0 T get_new_hostname -1000de24 T _wext_set_lps_dtim -1000de40 T _wext_enable_powersave -1000de78 T rtw_security_to_idx -1000de98 T show_wifi_ap_ip -1000dec8 t wifi_run_ap -1000dfd0 T show_wifi_st_ip -1000e000 t StartStDHCPClient -1000e0a0 t wifi_run_st.part.1 -1000e16c T wifi_run -1000e3b0 T wifi_init -1000e480 t wifi_autoreconnect_thread_ -1000e4e0 T wifi_close_scan -1000e560 t _wifi_scan_done_hdl -1000e5e0 T wifi_set_timer_scan -1000e618 T api_wifi_scan -1000e774 T lwip_strerr -1000e784 T lwip_socket_init -1000e788 t tcpip_thread -1000e810 T tcpip_input -1000e858 T tcpip_callback_with_block -1000e8ac T tcpip_timeout -1000e8f0 T tcpip_init -1000e934 t icmp_send_response.isra.0 -1000e9a0 T icmp_input -1000eac8 T icmp_dest_unreach -1000ead2 T icmp_time_exceeded -1000eadc t igmp_send -1000eb80 t igmp_delaying_member -1000ebbc t igmp_lookup_group.part.1 -1000ebf4 T igmp_init -1000ec10 T igmp_report_groups -1000ec34 T igmp_lookfor_group -1000ec54 T igmp_start -1000ec90 T igmp_input -1000ed5c T igmp_tmr -1000ed88 t lwip_standard_chksum -1000ede8 T inet_chksum_pseudo -1000ee6e T inet_chksum -1000ee7a T inet_chksum_pbuf -1000eec0 T ip_route -1000eefc T ip_input -1000f0bc T ip_output_if_opt -1000f208 T ip_output_if -1000f22a T ip_output -1000f262 T ip4_addr_isbroadcast -1000f294 T ipaddr_aton -1000f3a6 T ipaddr_addr -1000f3be t ipfrag_free_pbuf_custom -1000f3d4 t ip_reass_free_complete_datagram -1000f454 t ip_reass_remove_oldest_datagram -1000f4c8 T ip_reass_tmr -1000f4f0 T ip_reass -1000f79c T ip_frag -1000f900 T lwip_htons -1000f906 T lwip_ntohs -1000f90c T lwip_htonl -1000f910 T lwip_ntohl -1000f914 t dhcp_set_state -1000f924 t dhcp_option -1000f940 t dhcp_option_byte -1000f952 t dhcp_option_short -1000f970 t dhcp_option_long -1000f9a6 t dhcp_option_trailer -1000f9d0 t dhcp_create_msg -1000fb10 t dhcp_delete_msg -1000fb28 t dhcp_discover -1000fbd8 t dhcp_reboot -1000fc7c t dhcp_check -1000fca2 t dhcp_bind -1000fd80 t dhcp_option_hostname.isra.0 -1000fdc0 t dhcp_rebind -1000fe54 t dhcp_select -1000ff3c t dhcp_recv -1001032c T dhcp_arp_reply -100103ac T dhcp_renew -10010440 T dhcp_release -100104ec T dhcp_coarse_tmr -10010574 T dhcp_fine_tmr -1001060c T dhcp_release_unicast -100106d0 T dhcp_stop -10010700 T dhcp_start -100107a8 t dns_parse_name -100107c4 t dns_recv -1001095c t dns_send -10010a30 t dns_check_entry -10010adc T dns_setserver -10010afc T dns_init -10010b54 T dns_tmr -10010b80 T lwip_init -10010ba8 T sys_timeout -10010c08 T tcp_timer_needed -10010c3c t tcpip_tcp_timer -10010c74 T sys_timeouts_init -10010cd8 t dns_timer -10010cf4 t igmp_timer -10010d0c t dhcp_timer_fine -10010d28 t dhcp_timer_coarse -10010d44 t arp_timer -10010d60 t ip_reass_timer -10010d7c T sys_untimeout -10010dc4 T sys_timeouts_mbox_fetch -10010e24 T netif_init -10010e28 T netif_set_ipaddr -10010e78 T netif_set_addr -10010e94 T netif_add -10010ef4 T netif_set_gw -10010efc T netif_set_netmask -10010f04 T netif_set_default -10010f10 T netif_set_up -10010f46 T netif_set_down -10010f60 t pbuf_free_ooseq_callback -10010f94 t pbuf_pool_is_empty -10010fd0 T pbuf_alloced_custom -10011024 T pbuf_header -1001107a T pbuf_free -100110c0 T pbuf_alloc -100111e0 T pbuf_realloc -10011212 T pbuf_clen -10011222 T pbuf_ref -1001123c T pbuf_cat -10011258 T pbuf_chain -10011268 T pbuf_copy -10011304 T pbuf_copy_partial -10011362 T pbuf_coalesce -10011390 T raw_input -1001140c t tcp_accept_null -10011414 t tcp_new_port -10011468 T tcp_init -10011484 T tcp_bind -10011514 T tcp_listen_with_backlog -100115d4 T tcp_update_rcv_ann_wnd -10011608 T tcp_recved -10011642 T tcp_seg_free -1001165c T tcp_segs_free -1001166c T tcp_setprio -10011670 T tcp_seg_copy -10011698 T tcp_arg -1001169c T tcp_recv -100116a2 T tcp_sent -100116a8 T tcp_err -100116ae T tcp_accept -100116b2 T tcp_poll -100116bc T tcp_pcb_purge -100116fc T tcp_slowtmr -100119d8 T tcp_pcb_remove -10011a40 t tcp_close_shutdown -10011b8c T tcp_close -10011ba4 T tcp_recv_null -10011bc8 T tcp_process_refused_data -10011c30 T tcp_fasttmr -10011ca8 T tcp_tmr -10011ccc T tcp_abandon -10011d64 T tcp_abort -10011d6c T tcp_next_iss -10011d84 T tcp_alloc -10011eac T tcp_new -10011eb2 T tcp_eff_send_mss -10011ed0 t tcp_oos_insert_segment -10011f4c t tcp_receive -10012728 t tcp_parseopt.isra.0 -100127ac T tcp_input -10012fec t tcp_pbuf_prealloc -10013040 t tcp_create_segment -10013104 t tcp_output_alloc_header.constprop.0 -1001316e T tcp_write -100134ac T tcp_enqueue_flags -10013556 T tcp_send_fin -1001359e T tcp_send_empty_ack -100135fc T tcp_output -10013880 T tcp_rst -10013918 T tcp_rexmit_rto -10013946 T tcp_rexmit -10013994 T tcp_rexmit_fast -100139ea T tcp_keepalive -10013a3c T tcp_zero_window_probe -10013ae4 T udp_init -10013b00 T udp_input -10013c90 T udp_bind -10013d34 T udp_sendto_if -10013e36 T udp_sendto -10013e6c T udp_connect -10013eb4 T udp_disconnect -10013ec4 T udp_recv -10013ecc T udp_remove -10013ef4 T udp_new -10013f18 t etharp_free_entry -10013f48 t etharp_find_entry -10014018 t etharp_send_ip -1001404c T etharp_tmr -1001408c T etharp_cleanup_netif -100140b4 T etharp_request -10014160 t etharp_output_to_arp_index -100141b0 T etharp_query -100142ac T etharp_output -1001439c T ethernet_input -1001456c t low_level_output -100145c8 t arp_timer -100145e4 T ethernetif_recv -10014660 T ethernetif_init -100146a4 T lwip_POST_SLEEP_PROCESSING -100146c0 T rltk_wlan_set_netif_info -100146e4 T rltk_wlan_send -10014778 T rltk_wlan_recv -100147e4 T netif_is_valid_IP -1001481c T netif_get_idx -10014838 T netif_rx -10014848 T netif_post_sleep_processing -1001484c T sys_mbox_new -10014866 T sys_mbox_post -10014886 T sys_mbox_trypost -100148a8 T sys_arch_mbox_fetch -100148f4 T sys_mbox_valid -10014900 T sys_init -10014920 T sys_thread_new -10014984 T sys_arch_protect -1001498e T sys_arch_unprotect -10014994 t mark_ip_in_table -100149d8 t dhcps_initialize_message -10014a88 t add_offer_options -10014b78 T dhcps_handle_state_machine_change -10014c48 t dhcps_receive_udp_packet_handler -10014f14 T dhcps_deinit -10014f3c T dhcps_init -10015044 t prvInsertBlockIntoFreeList -1001508c t vPortDefineHeapRegions.constprop.1 -1001512c T pvPortMalloc -10015204 T __vPortFree -10015248 T vPortSetExtFree -10015264 T vPortFree -10015294 T xPortGetFreeHeapSize -100152a0 T xPortGetMinimumEverFreeHeapSize -100152ac T pvPortReAlloc -10015344 T pvPortZalloc -10015360 t prvTaskExitError -10015374 t prvPortStartFirstTask -10015394 T pxPortInitialiseStack -100153c0 T vPortSVCHandler -100153e0 t pxCurrentTCBConst2 -100153e4 T vPortEnterCritical -10015404 T vPortExitCritical -10015420 T xPortPendSVHandler -10015460 t pxCurrentTCBConst -10015464 T xPortSysTickHandler -10015490 W vPortSuppressTicksAndSleep -100155a8 W vPortSetupTimerInterrupt -100155f8 T xPortStartScheduler -10015628 T vApplicationIdleHook -1001562c T osKernelSysTick -10015630 T xEventGroupCreate -1001564c T xEventGroupWaitBits -100156fc T xEventGroupClearBits -10015716 T xEventGroupSetBits -1001576e T vEventGroupSetBitsCallback -10015772 T vEventGroupDelete -10015798 T xEventGroupSetBitsFromISR -100157a8 T vListInitialise -100157be T vListInitialiseItem -100157c4 T vListInsertEnd -100157dc T vListInsert -1001580a T uxListRemove -1001582a t prvCopyDataToQueue -10015890 t prvCopyDataFromQueue -100158b8 t prvUnlockQueue -10015928 T xQueueGenericReset -10015994 T xQueueGenericCreate -100159c8 T xQueueCreateCountingSemaphore -100159dc T xQueueGenericSend -10015ad0 T xQueueCreateMutex -10015af4 T xQueueGenericSendFromISR -10015b5c T xQueueGiveFromISR -10015bb8 T xQueueGenericReceive -10015cec T uxQueueMessagesWaiting -10015cfe T vQueueDelete -10015d02 T vQueueWaitForMessageRestricted -10015d48 t prvGetExpectedIdleTime -10015d84 t prvResetNextTaskUnblockTime -10015da8 t prvAddCurrentTaskToDelayedList -10015e34 T xTaskGenericCreate -10015ff8 T vTaskDelete -100160b4 T uxTaskPriorityGet -100160d0 T vTaskPrioritySet -10016198 T vTaskStartScheduler -10016204 T vTaskSuspendAll -10016214 T xTaskGetTickCount -10016220 T xTaskGetTickCountFromISR -1001622c T pcTaskGetName -1001623c T vTaskStepTick -1001624c T xTaskIncrementTick -10016358 T xTaskResumeAll -10016430 T vTaskDelay -10016460 t prvIdleTask -100164e0 T vTaskSwitchContext -10016560 T vTaskPlaceOnEventList -10016580 T vTaskPlaceOnUnorderedEventList -100165a8 T vTaskPlaceOnEventListRestricted -100165d4 T xTaskRemoveFromEventList -10016648 T xTaskRemoveFromUnorderedEventList -100166a4 T vTaskSetTimeOutState -100166bc T xTaskCheckForTimeOut -10016708 T vTaskMissedYield -10016714 T eTaskConfirmSleepModeStatus -10016748 T xTaskGetSchedulerState -10016768 T vTaskPriorityInherit -100167f8 T xTaskPriorityDisinherit -10016868 T uxTaskResetEventItemValue -10016880 T pvTaskIncrementMutexHeldCount -10016898 t prvCheckForValidListAndQueue -100168e4 t prvInsertTimerInActiveList -10016920 T xTimerCreateTimerTask -1001695c T xTimerCreate -10016990 T xTimerGenericCommand -100169d0 t prvSwitchTimerLists -10016a38 t prvTimerTask -10016bcc T xTimerIsTimerActive -10016be4 T pvTimerGetTimerID -10016bf8 T xTimerPendFunctionCallFromISR -10016c20 t device_mutex_init -10016c64 T device_mutex_lock -10016c98 T device_mutex_unlock -10016cb4 t _freertos_enter_critical_from_isr -10016cd4 t _freertos_exit_critical_from_isr -10016ce4 t _freertos_systime_to_sec -10016cee t _freertos_ms_to_systime -10016cf0 t _freertos_sec_to_systime -10016cf8 t _freertos_yield_os -10016d10 t _freertos_ATOMIC_SET -10016d14 t _freertos_ATOMIC_READ -10016d18 t _freertos_modular64 -10016d8a t _freertos_thread_enter -10016d8c T _freertos_wakelock_timeout -10016d8e t _freertos_enter_critical -10016d92 t _freertos_exit_critical -10016d96 t _freertos_ATOMIC_SUB_RETURN -10016dae t _freertos_ATOMIC_DEC_RETURN -10016dc4 t _freertos_ATOMIC_ADD_RETURN -10016ddc t _freertos_ATOMIC_INC_RETURN -10016df2 t _freertos_ATOMIC_SUB -10016e0a t _freertos_ATOMIC_DEC -10016e10 t _freertos_ATOMIC_ADD -10016e28 t _freertos_ATOMIC_INC -10016e2e T _freertos_malloc -10016e32 T _freertos_zmalloc -10016e4a t _freertos_memset -10016e4e T _freertos_mfree -10016e52 t _freertos_spinunlock_irqsave -10016e68 t _freertos_spinunlock -10016e74 t _freertos_mutex_put -10016e78 T _freertos_wakeup_task -10016e7e t _freertos_up_sema -10016e82 t _freertos_exit_critical_mutex -10016e8e T _freertos_timerCreate -10016e92 T _freertos_timerDelete -10016ea6 T _freertos_timerStop -10016eba T _freertos_timerChangePeriod -10016ed4 T _freertos_timerStopFromISR -10016ee8 T _freertos_timerChangePeriodFromISR -10016f04 T _freertos_timerIsTimerActive -10016f08 T _freertos_timerGetID -10016f0c T _freertos_timerStart -10016f28 T _freertos_timerReset -10016f44 t _freertos_arc4random -10016f74 t _freertos_get_current_time -10016f78 T _freertos_timerStartFromISR -10016f96 T _freertos_timerResetFromISR -10016fb4 T _freertos_acquire_wakelock -10016fba T _freertos_release_wakelock -10016fc0 T _freertos_get_scheduler_state -10016fe0 t _freertos_thread_exit -10016fe6 t _freertos_GetFreeHeapSize -10016fea t _freertos_udelay_os -10016fee t _freertos_mdelay_os -10016ff2 t _freertos_deinit_xqueue -1001700c t _freertos_spinlock_free -1001701e t _freertos_mutex_free -10017022 t _freertos_free_sema -10017026 t _freertos_push_to_xqueue -1001704e t _freertos_pop_from_xqueue -10017076 t _freertos_down_sema -10017098 t _freertos_init_xqueue -100170b4 t _freertos_spinlock_irqsave -100170f4 t _freertos_spinlock -10017130 t _freertos_enter_critical_mutex -1001716c t _freertos_mutex_get -100171a8 t _freertos_spinlock_init -100171b6 t _freertos_mutex_init -100171ba t _freertos_init_sema -100171cc t _freertos_create_task -1001725c t _freertos_memcmp -1001726a t _freertos_memcpy -1001726e t _freertos_get_random_bytes -100172a8 t _freertos_delete_task -100172f4 t _freertos_mutex_get_timeout -10017330 t _freertos_up_sema_from_isr -10017360 t _freertos_systime_to_ms -10017362 t _freertos_msleep_os -10017366 t _freertos_usleep_os -1001736a T save_and_cli -1001736e T restore_flags -10017372 T cli -10017384 T _htons -1001738a T _ntohs -10017390 T _rtw_zvmalloc -100173b0 T _rtw_vmfree -100173d4 T _rtw_malloc -100173e4 T _rtw_zmalloc -100173f4 T _rtw_mfree -10017404 T deinit_mem_monitor -10017406 T rtw_vmfree -1001740a T rtw_mfree -10017410 T rtw_memcpy -10017420 T rtw_memcmp -10017430 T rtw_memset -10017440 T rtw_init_listhead -10017446 T rtw_is_list_empty -10017450 T rtw_list_insert_head -1001745c T rtw_list_insert_tail -10017468 T rtw_list_delete -10017478 T rtw_init_sema -10017488 T rtw_free_sema -10017498 T rtw_up_sema -100174a8 T rtw_up_sema_from_isr -100174b8 T rtw_down_timeout_sema -100174c8 T rtw_down_sema -100174dc T rtw_mutex_init -100174ec T rtw_mutex_free -100174fc T rtw_mutex_put -1001750c T rtw_mutex_get -1001751c T rtw_mutex_get_timeout -10017530 T rtw_enter_critical_from_isr -10017540 T rtw_enter_critical -10017544 T rtw_exit_critical_from_isr -10017554 T rtw_exit_critical -10017558 T rtw_enter_critical_mutex -10017568 T rtw_exit_critical_mutex -10017578 T rtw_queue_empty -10017582 T rtw_end_of_queue_search -1001758c T rtw_spinlock_init -1001759c T rtw_init_queue -100175a8 T rtw_spinlock_free -100175b8 T rtw_spin_lock -100175c8 T rtw_enter_critical_bh -100175cc T rtw_spin_unlock -100175dc T rtw_exit_critical_bh -100175e0 T rtw_get_current_time -100175f0 T rtw_systime_to_ms -10017604 T rtw_systime_to_sec -10017618 T rtw_ms_to_systime -1001762c T rtw_sec_to_systime -10017640 T rtw_get_passing_time_ms -10017654 T rtw_msleep_os -10017664 T rtw_usleep_os -10017674 T rtw_mdelay_os -10017684 T rtw_udelay_os -10017694 T ATOMIC_SET -100176a4 T ATOMIC_INC -100176b4 T ATOMIC_INC_RETURN -100176c8 T ATOMIC_DEC_RETURN -100176dc T ATOMIC_DEC_AND_TEST -100176ec T rtw_modular64 -10017708 T rtw_get_random_bytes -1001771c T rtw_getFreeHeapSize -1001772c T init_mem_monitor -1001773c T add_mem_usage -10017770 T rtw_zvmalloc -10017790 T rtw_malloc -100177b0 T rtw_zmalloc -100177d0 T rtw_netif_queue_stopped -100177d4 T rtw_netif_wake_queue -100177d6 T rtw_netif_start_queue -100177d8 T rtw_netif_stop_queue -100177da T flush_signals_thread -100177dc T rtw_acquire_wakelock -100177ec T rtw_release_wakelock -100177fc T rtw_wakelock_timeout -1001780c T rtw_create_task -10017828 T rtw_delete_task -10017838 T rtw_wakeup_task -10017848 T rtw_timerCreate -10017864 T rtw_timerDelete -10017878 T rtw_timerIsTimerActive -1001788c T rtw_timerStop -100178a0 T rtw_timerChangePeriod -100178b4 T rtw_thread_enter -100178c4 T rtw_thread_exit -100178d4 T tcm_heap_free -10017954 T tcm_heap_init -100179a4 T tcm_heap_freeSpace -100179e4 T tcm_heap_malloc -10017a84 T tcm_heap_calloc -10017a9c T flash_init -10017b34 T flash_turnon -10017b4c T flash_erase_sector -10017b78 T flash_erase_block -10017ba4 T flash_read_word -10017bdc T flash_stream_read -10017cb0 T flash_stream_write -10017e00 T flash_get_size -10017e40 T gpio_set_hal_pin_mode -10017e64 T gpio_set -10017e9c T gpio_init -10017ed2 T gpio_mode -10017ee4 T gpio_dir -10017ef8 T gpio_write -10017f48 T pin_function -10017f4c W pinmap_merge -10017f88 W pinmap_find_peripheral -10017fa0 W pinmap_peripheral -10017fdc T sleep_ex_selective -10017ff0 T deepsleep_ex -10018010 T spi_bus_tx_done_callback -10018020 T spi_tx_done_callback -10018040 T spi_rx_done_callback -1001805c T spi_init -100181a8 T spi_format -1001824c T spi_frequency -10018250 T spi_irq_hook -1001825c T spi_master_write_stream_dma -100182d4 T sys_reset -10018308 T us_ticker_read -10018334 T wait_us -1001838c t get_addr_fobj -100183d6 t get_addr_fobj_save -10018420 t _fwrite_word -1001844c t get_addr_bscfg -100184b0 T cmp_align1_align4 -1001855c T flash_write_cfg -10018780 T flash_read_cfg -10018814 T En32KCalibration -100188a0 T WDGInitial -10018930 T WDGStart -10018948 T WDGRefresh -10018964 T HalGdmaOpInit -100189b8 T HalGdmaChnlRegister -10018a14 T HalGdmaChnlUnRegister -10018a70 T HalGdmaChnlAlloc -10018aa0 T HalGdmaChnlFree -10018ac8 T HAL_GPIO_GetPinName -10018ad0 T HAL_GPIO_PullCtrl -10018ae8 T HAL_GPIO_Init -10018b28 T HalSsiOpInit -10018c14 T HalSsiTxSingleBlkChnl -10018ca4 T HalSsiTxGdmaInit -10018cb8 T HalSsiTxGdmaDeInit -10018ce8 T HalSsiTxMultiBlkChnl -10018d74 T HalSsiDmaSend -10018dfc T HalSsiInit -10018e78 T HalSsiSetFormat -10018e7c T HalTimerOpInit_Patch -10018eb8 T freertos_pre_sleep_processing -10018f94 T freertos_post_sleep_processing -10018fb8 T freertos_ready_to_sleep -10018fc8 T acquire_wakelock -10019008 T release_wakelock -10019064 T HalGdmaChBlockSetingRtl8195a_Patch -100192e8 T HalSsiPinmuxEnableRtl8195a_Patch -100193a0 T HalSsiInitRtl8195a_Patch -10019520 T HalSsiPinmuxDisableRtl8195a -100195f0 T HalSsiSetFormatRtl8195a -10019680 T HalSsiSetSclkRtl8195a -10019744 T HalSsiIntReadRtl8195a -10019794 T HalSsiTxFIFOThresholdRtl8195a -100197ac T _SsiWriteInterruptRtl8195a -100198cc T _SsiReadInterruptRtl8195a -10019980 T _SsiIrqHandleRtl8195a -10019a28 T SsiTxGdmaIrqHandle -10019a70 T HalSsiIntWriteRtl8195a -10019ac4 T HalSsiTxGdmaLoadDefRtl8195a -10019bd8 T HalSsiDmaInitRtl8195a -10019d00 T HalSsiDmaSendRtl8195a -10019d94 T HalSsiDmaSendMultiBlockRtl8195a -10019e68 T HalTimerIrq2To7Handle_Patch -10019ebc T HalTimerIrqRegisterRtl8195a_Patch -10019f34 T HalTimerIrqUnRegisterRtl8195a_Patch -10019fac T HalTimerDeInitRtl8195a_Patch -10019fe0 T HalTimerReadCountRtl8195a_Patch -10019ff8 T HalTimerReLoadRtl8195a_Patch -1001a02c T HalTimerInitRtl8195a_Patch -1001a0f8 T HalTimerIrqEnRtl8195a -1001a10c T HalTimerEnRtl8195a_Patch -1001a120 T HalTimerDisRtl8195a_Patch -1001a134 T vWFSSVCHandler -1001a13a t svcing -1001a154 T PatchHalLogUartInit -1001a1f8 T PSHalInitPlatformLogUart -1001a2bc T SDRWakeUp -1001a2fc T SDRSleep -1001a424 T InitSYSIRQ -1001a460 T DurationScaleAndPeriodOP -1001a498 T CLKCal -1001a4ec T BackupCPUClk -1001a50c T ReFillCpuClk -1001a52c T SYSIrqHandle -1001a578 T WakeFromSLPPG -1001a6b0 T InitSoCPM -1001a6e4 T RegPowerState -1001a748 T SetSYSTimer -1001a780 T SleepCG -1001a874 T DeepSleep -1001a9bc T HALEFUSEOneByteReadRAM -1001a9dc T HALEFUSEOneByteWriteRAM -1001a9e0 T HalLogUartWaitTxFifoEmpty -1001a9f8 T FunctionChk -1001a9fc T HalReInitPlatformTimer -1001aa6c T HalGetChipId -1001aa94 W __low_level_init -1001aa98 T rtl_libc_init -1001aab4 T rtl_snprintf -1001ab14 T rtl_sprintf -1001ab60 T rtl_printf -1001aba8 T rtl_memcmp -1001abb0 T rtl_memcpy -1001abb8 T rtl_memset -1001abc0 T rtl_strchr -1001abc8 T rtl_strcmp -1001abd0 T rtl_strcpy -1001abd8 T rtl_strlen -1001abe0 T rtl_strncmp -1001abe8 T rtl_strncpy -1001abf0 T rtl_strsep -1001abf8 T ram_libgloss_close -1001ac08 T ram_libgloss_fstat -1001ac28 T ram_libgloss_isatty -1001ac34 T ram_libgloss_lseek -1001ac44 T ram_libgloss_read -1001ac54 T ram_libgloss_sbrk -1001ac70 T ram_libgloss_write -1001ac90 T ram_libgloss_open -1001accc T init_rom_libgloss_ram_map -1001ad14 t rtw_ht_operation_update -1001adc6 t associated_clients_update.part.11 -1001ae02 T chk_sta_is_alive -1001ae40 T add_RATid -1001af50 T update_sta_info_apmode -1001b008 T update_beacon -1001b2c8 T rtw_check_beacon_data -1001b9c8 T associated_clients_update -1001b9d2 T bss_cap_update_on_sta_join -1001bb82 T bss_cap_update_on_sta_leave -1001bc7e T ap_free_sta -1001bd30 T expire_timeout_chk -1001bed8 T rtw_sta_flush -1001bf5c T free_mlme_ap_info -1001bfa8 T sta_info_update -1001bfe4 T ap_sta_info_defer_update -1001c014 T start_ap_mode -1001c054 T init_mlme_ap_info -1001c06a T stop_ap_mode -1001c0b8 T rtw_generate_bcn_ie -1001c420 T set_hidden_ssid -1001c478 T rtw_p2p_cmd_hdl -1001c4a2 T _rtw_init_evt_priv -1001c4b4 T _rtw_free_cmd_priv -1001c4be T _rtw_enqueue_cmd -1001c4ea T _rtw_dequeue_cmd -1001c51e T _rtw_observequeue_cmd -1001c532 T rtw_init_cmd_priv -1001c53c T rtw_init_evt_priv -1001c540 T rtw_free_evt_priv -1001c542 T rtw_free_cmd_priv -1001c546 T rtw_cmd_filter -1001c564 T rtw_free_cmd_obj -1001c58e T rtw_enqueue_cmd -1001c5e4 T rtw_set_channel_plan_cmd_callback -1001c5fc T rtw_survey_cmd_callback -1001c618 T rtw_disassoc_cmd_callback -1001c648 T rtw_joinbss_cmd_callback -1001c664 T rtw_setstaKey_cmdrsp_callback -1001c67c T rtw_cmd_thread -1001c7d8 T rtw_joinbss_cmd -1001caa4 T rtw_disassoc_cmd -1001caf0 T rtw_setstakey_cmd -1001cbe4 T rtw_clearstakey_cmd -1001cc84 T rtw_dynamic_chk_wk_cmd -1001ccd8 T rtw_p2p_cmd -1001cd36 T rtw_set_chplan_cmd -1001cdb6 T dynamic_chk_wk_hdl -1001ce7e T lps_ctrl_wk_hdl -1001ceec T rtw_lps_ctrl_wk_cmd -1001cf56 T rtw_sitesurvey_cmd -1001d01e T rpt_timer_setting_wk_hdl -1001d032 T rtw_ps_cmd -1001d08e T rtw_chk_hi_queue_cmd -1001d0e2 T rtw_drvextra_cmd_hdl -1001d1be t rtw_free_mlme_ie_data -1001d1d8 T rtw_init_mlme_timer -1001d234 T rtw_del_mlme_timer -1001d254 T reconnect_timer_hdl -1001d2fc T _rtw_init_mlme_priv -1001d37e T rtw_mfree_mlme_priv_lock -1001d39a T rtw_free_mlme_priv_ie_data -1001d40e T _rtw_free_mlme_priv -1001d436 T _rtw_alloc_network -1001d486 T _rtw_free_network -1001d4e6 T _rtw_free_network_nolock -1001d50c T _rtw_find_network -1001d548 T _rtw_free_network_queue -1001d590 T rtw_if_up -1001d5b0 T rtw_get_capability_from_ie -1001d5b4 T rtw_get_capability -1001d5ce T rtw_get_beacon_interval_from_ie -1001d5d2 T rtw_init_mlme_priv -1001d5ea T rtw_free_mlme_priv -1001d5ee T rtw_free_network_queue -1001d5f2 T rtw_is_same_ibss -1001d608 T is_same_network -1001d66c T update_network -1001d706 T rtw_update_scanned_network -1001d86c T rtw_add_network -1001d8aa T rtw_survey_event_callback -1001d956 T rtw_dummy_event_callback -1001d958 T rtw_free_assoc_resources -1001da22 T rtw_indicate_connect -1001da32 T rtw_indicate_disconnect -1001da54 T rtw_indicate_scan_done -1001da58 T rtw_joinbss_event_callback -1001da76 T search_max_mac_id -1001dabe T rtw_stassoc_hw_rpt -1001daf6 T rtw_stassoc_event_callback -1001db24 T rtw_stadel_event_callback -1001dbca T _rtw_join_timeout_handler -1001dc54 T rtw_join_timeout_handler -1001dcac T rtw_scan_timeout_handler -1001dcdc T _rtw_scan_timeout_handler -1001dce0 T rtw_dynamic_check_timer_handlder -1001dd38 T _dynamic_check_timer_handlder -1001dd88 T rtw_select_and_join_from_scanned_queue -1001de5c T rtw_surveydone_event_callback -1001df84 T rtw_set_auth -1001dfd4 T rtw_set_key -1001e096 T rtw_restruct_wmm_ie -1001e0fc T rtw_restruct_sec_ie -1001e16c T rtw_joinbss_reset -1001e17c T rtw_restructure_ht_ie -1001e25c T rtw_update_ht_cap -1001e2e6 T rtw_joinbss_event_prehandle -1001e518 T rtw_linked_check -1001e534 T rtw_buddy_adapter_up -1001e56c T check_buddy_fwstate -1001e58a t get_da -1001e5aa t get_sa -1001e5d4 T OnAction_p2p -1001e5d8 T OnAction -1001e60c T DoReserved -1001e610 T rtw_is_channel_set_contains_channel -1001e632 T init_hw_mlme_ext -1001e648 T init_channel_set -1001e6e4 T free_mlme_ext_priv -1001e712 T rtw_action_public_decache -1001e75c T on_action_public_p2p -1001e788 T OnAction_public -1001e7cc T alloc_mgtxmitframe -1001e804 T update_mgnt_tx_rate -1001e80a T update_mgntframe_attrib -1001e866 T rtw_build_mgnt_frame -1001e8ca T dump_mgntframe -1001e8e4 T rtw_send_mgnt -1001e95c t issue_action_BSSCoexistPacket -1001eb70 T rtw_indicate_mgnt -1001eb94 t _mgt_dispatcher.isra.4 -1001ebfc T mgt_dispatcher -1001ec84 T update_hidden_ssid -1001ecd8 T issue_beacon -1001ef24 T issue_probersp -1001f29c T OnProbeReq -1001f3b4 T issue_probereq -1001f5a4 T issue_auth -1001f814 T OnAuth -1001facc T issue_asocrsp -1001fd78 T issue_assocreq -100200e4 T issue_nulldata -100201ce T issue_qos_nulldata -10020324 T issue_deauth -10020418 T issue_action_BA -100206a0 T OnAction_back -1002076e T collect_bss_info -100209b8 T start_clnt_auth -10020a54 T start_clnt_assoc -10020a88 T OnAuthClient -10020b74 T report_scan_result_one -10020d4c T add_site_survey -10020f38 T report_survey_event -10021194 T OnProbeRsp -10021230 T report_surveydone_event -10021294 T report_join_res -10021304 T OnAssocRsp -10021504 T report_del_sta_event -10021596 T receive_disconnect -100215ec T OnBeacon -1002179c T OnDeAuth -10021900 T OnDisassoc -10021a7c T report_add_sta_event -10021af0 T OnAssocReq -100220f4 T rtw_port_switch_chk -10022178 T update_sta_info -100221f8 T mlmeext_sta_del_event_callback -10022278 T _linked_info_dump -100222da T _linked_rx_signal_strehgth_display -10022314 T linked_status_chk -100225f0 T survey_timer_hdl -100226d0 T _survey_timer_hdl -100226d4 T link_timer_hdl -10022752 T _link_timer_hdl -10022756 T addba_timer_hdl -10022776 T NULL_hdl -1002277a T setopmode_hdl -100227c0 T disconnect_hdl -1002286c T setauth_hdl -1002287c T setkey_hdl -100228dc T set_stakey_hdl -100229f0 T set_tx_beacon_cmd -10022a68 T mlme_evt_hdl -10022ab4 T tx_beacon_hdl -10022b6e T check_buddy_mlmeinfo_state -10022b88 T site_survey -10022dc8 T sitesurvey_cmd_hdl -10022ed6 T concurrent_chk_start_clnt_join -10022f6c T start_clnt_join -10023040 T join_cmd_hdl -10023164 T concurrent_chk_joinbss_done -1002332c T mlmeext_joinbss_event_callback -10023484 T set_chplan_hdl -100234a0 T init_mlme_ext_timer -100234fc T init_mlme_ext_priv -10023650 t rtw_p2p_remain_on_timeout -10023666 t rtw_p2p_pre_tx_scan_timeout -1002366c T rtw_p2p_remain_on_channel -100236e2 T rtw_p2p_cancel_remain_on_channel -1002370a T rtw_p2p_special_scan_param -1002372a T rtw_p2p_set_p2p_role -10023732 T rtw_p2p_set_p2p_state -1002373a T rtw_p2p_indicate_mgnt -10023760 T rtw_p2p_indicate_send_action_done -100237b4 T rtw_p2p_pre_tx_scan_cmd_callback -1002386c T init_social_channel_set -10023894 T rtw_init_p2p_wdinfo -100238c8 T rtw_deinit_p2p_wdinfo -100238d4 T rtw_p2p_init_mlme_ext -1002392c T rtw_p2p_deinit_mlme_ext -10023934 t get_hdr_bssid -1002395c t filter_packet -100239e4 t promisc_get_encrypt -10023a36 t promisc_info_get -10023ada t promisc_set_enable -10023ba0 T _promisc_deinit -10023bf0 T _promisc_recv_func -10024178 T _promisc_set -10024208 T _is_promisc_enabled -10024220 t SetEAPOL_KEYIV -100242c0 t WaitTimeout -10024338 t ToDrv_SetPTK -100243e2 t Message_ReplayCounter_OC2LI.isra.2 -10024410 t Message_SmallerEqualReplayCounter.isra.4 -10024442 t Message_setReplayCounter.isra.5 -10024460 t INCLargeInteger -10024480 t INCOctet16_INTEGER -100244c8 t INCOctet32_INTEGER -10024528 t ToDrv_DisconnectSTA -100245ec t CheckMIC.constprop.14 -1002466c t CalcMIC.constprop.15 -100246cc T DecWPA2KeyData -10024780 T DecGTK -1002483c T ToDrv_SetGTK -100248d0 T init_wpa_sta_info -100249bc T WaitFourWayMsg -10024a18 T SendEAPOL -100250e4 T ClientSendEAPOL -100255ce t ResendTimeout -10025654 T EAPOLKeyRecvd -100257dc T ClientEAPOLKeyRecvd -10025bf4 T psk_derive -10025ca8 T psk_init -10025d98 T psk_strip_rsn_pairwise -10025e18 T psk_strip_wpa_pairwise -10025e98 T tkip_send_mic_failure_report -1002600c T pwr_state_check_handler -10026010 T ips_enter -100260c0 T ips_leave -100261d8 T rtw_pwr_unassociated_idle -1002622c T rtw_ps_processor -10026282 T PS_RDY_CHECK -100262ea T rtw_set_ps_mode -1002635a T LPS_RF_ON_check -100263b0 T LPS_Enter -1002641c T LPS_Leave -10026456 T LeaveAllPowerSaveMode -10026468 T rtw_init_pwrctrl_priv -10026538 T rtw_free_pwrctrl_priv -1002654a T _rtw_pwr_wakeup -10026622 T rtw_pm_set_lps -10026668 T rtw_pm_set_ips -100266ac T rtw_pm_set_tdma_param -100266c8 T rtw_pm_set_lps_dtim -100266d4 T rtw_pm_get_lps_dtim -100266de t recvframe_pull -10026700 t recvframe_pull_tail -10026722 T rtw_signal_stat_timer_hdl -100267c0 T _rtw_init_sta_recv_priv -100267e0 T _rtw_init_recv_priv -10026888 T rtw_mfree_recv_priv_lock -100268bc T _rtw_alloc_recvframe -100268ee T rtw_alloc_recvframe -10026914 T rtw_free_recvframe -100269b8 T _rtw_enqueue_recvframe -100269e4 T rtw_enqueue_recvframe -10026a0e T rtw_free_recvframe_queue -10026a46 T rtw_free_uc_swdec_pending_queue -10026a6e T _rtw_free_recv_priv -10026a9e T rtw_free_buf_pending_queue -10026aa2 T recvframe_chkmic -10026ba2 T decryptor -10026c46 T portctrl -10026cbc T recv_decache -10026cea T process_pwrbit_data -10026d2a T process_wmmps_data -10026db2 T count_rx_stats -10026e24 T sta2sta_data_frame -10026f60 T ap2sta_data_frame -1002708c T sta2ap_data_frame -10027114 T validate_recv_ctrl_frame -100272ae T validate_recv_data_frame -10027508 T wlanhdr_to_ethhdr -10027644 T recvframe_defrag -100276ee T recvframe_chk_defrag -100277a4 T validate_recv_mgnt_frame -100277e0 T validate_recv_frame -100278a8 T recv_indicatepkt_reorder -100278ca T process_recv_indicatepkts -10027922 T recv_func_prehandle -1002794a T recv_func_posthandle -100279ae T recv_func -10027a3e T rtw_recv_entry -10027a70 T rtw_recv_tasklet -10027ac8 T rtw_wep_encrypt -10027b0e T rtw_wep_decrypt -10027b54 T rtw_tkip_encrypt -10027bc0 T rtw_tkip_decrypt -10027c2e T rtw_aes_encrypt -10027c9a T rtw_aes_decrypt -10027d00 T rtw_init_sec_priv -10027d72 T rtw_free_sec_priv -10027d92 t wifi_mac_hash -10027dbc T _addba_timer_hdl -10027dc0 T _rtw_init_stainfo -10027e46 T _rtw_init_sta_priv -10027f2e T _rtw_free_sta_xmit_priv_lock -10027f5a T rtw_mfree_stainfo -10027f86 T rtw_mfree_sta_priv_lock -10027fbc T _rtw_free_sta_priv -10027fdc T init_addba_retry_timer -10028004 T rtw_alloc_stainfo -100280ce T rtw_free_stainfo -10028294 T rtw_get_stainfo -10028310 T rtw_init_bcmc_stainfo -10028340 T rtw_get_bcmc_stainfo -10028364 T rtw_free_all_stainfo -100283cc T cckrates_included -100283f4 T cckratesonly_included -1002841c T networktype_to_raid_ex -1002847a T judge_network_type -100284c8 T ratetbl_val_2wifirate -100284dc T is_basicrate -10028508 T ratetbl2rateset -1002854c T get_rate_set -10028576 T UpdateBrateTbl -100285a8 T UpdateBrateTblForSoftAP -100285dc T Save_DM_Func_Flag -100285f2 T Restore_DM_Func_Flag -10028608 T Switch_DM_Func -10028624 T Set_MSR -10028648 T set_opmode -1002868c T SelectChannel -100286c0 T SetBWMode -100286fc T set_channel_bwmode -10028760 T get_my_bssid -10028764 T get_beacon_interval -10028782 T is_client_associated_to_ap -1002879a T is_client_associated_to_ibss -100287b6 T is_IBSS_empty -100287d8 T decide_wait_for_beacon_timeout -100287f4 T invalidate_cam_all -100287fc T write_cam -10028872 T clear_cam_entry -100288a0 T flush_all_cam_entry -100288fe T WMM_param_handler -10028924 T WMMOnAssocRsp -100289f0 T HT_caps_handler -10028a90 T HT_info_handler -10028ab4 T HTOnAssocRsp -10028aec T ERP_IE_handler -10028b08 T VCS_update -10028b5a T rtw_check_bcn_info -10028d6a T update_beacon_info -10028dc0 T is_ap_in_tkip -10028e38 T wifirate2_ratetbl_inx -10028ea4 T update_basic_rate -10028ed2 T update_supported_rate -10028efc T update_MCS_rate -10028f08 T support_short_GI -10028f36 T get_highest_rate_idx -10028f50 T Update_RA_Entry -10028f58 T set_sta_rate -10028f60 T update_tx_basic_rate -10028fb8 T check_assoc_AP -100290ac T update_IOT_info -1002910a T update_capinfo -10029188 T update_wireless_mode -10029228 T update_bmc_sta_support_rate -10029250 T update_TSF -10029262 T correct_TSF -1002926a t _init_txservq -10029280 t set_qos -100292d0 T _rtw_init_sta_xmit_priv -10029316 T rtw_mfree_xmit_priv_lock -10029362 T qos_acm -1002939c T xmitframe_addmic -100294fa T xmitframe_swencrypt -10029526 T rtw_make_wlanhdr -10029706 T rtw_txframes_pending -10029742 T rtw_txframes_sta_ac_pending -10029778 T rtw_txframes_update_attrib_vcs_info -10029818 T rtw_put_snap -10029860 T rtw_update_protection -100298a6 T rtw_count_tx_stats -100298f6 T rtw_free_xmitbuf_ext -10029938 T rtw_alloc_xmitframe -10029990 T rtw_free_xmitframe -100299e2 T rtw_free_xmitframe_queue -10029a20 T rtw_get_sta_pending -10029a60 T rtw_xmit_classifier -10029ac6 T rtw_xmitframe_enqueue -10029ad4 T rtw_alloc_hwxmits -10029b2e T rtw_free_hwxmits -10029b44 T _rtw_free_xmit_priv -10029c10 T rtw_init_hwxmits -10029c28 T _rtw_init_xmit_priv -10029de0 T rtw_get_ff_hwaddr -10029df4 T xmitframe_enqueue_for_sleeping_sta -10029fb4 t dequeue_xmitframes_to_sleeping_queue -1002a00a T stop_sta_xmit -1002a0f2 T wakeup_sta_to_xmit -1002a31a T xmit_delivery_enabled_frames -1002a434 T rtw_xmit_tasklet -1002a488 T rtw_xmit_mgnt -1002a48c T rtw_xmit_data -1002a490 T rtw_xmit -1002a7ec T rtw_sctx_done_err -1002a7f8 T rtw_alloc_xmitbuf -1002a852 T rtw_free_xmitbuf -1002a8c4 T rtw_alloc_xmitbuf_ext -1002a94a T rtw_sctx_done -1002a950 t rtl8195a_free_rx_ring -1002a95e t bus_write32 -1002a9b8 t bus_write16 -1002aa12 t bus_write8 -1002aa6c t bus_read32 -1002aac4 t bus_read16 -1002ab1e t bus_read8 -1002ab78 t rtl8195a_free_tx_ring -1002ac08 T rtl8195a_init_desc_ring -1002ad48 T rtl8195a_free_desc_ring -1002ad64 T rtl8195a_reset_desc_ring -1002adfa T InitLxDmaRtl8195a -1002af5c T rtl8195a_check_txdesc_closed -1002afd4 t rtl8195a_tx_isr -1002b0b8 T InterruptRecognized8195a -1002b148 T InitInterrupt8195a -1002b168 T EnableDMA8195a -1002b190 T EnableInterrupt8195a -1002b1d0 T DisableDMA8195a -1002b1dc T DisableInterrupt8195a -1002b1f4 T UpdateInterruptMask8195a -1002b256 T CheckRxTgRtl8195a -1002b290 T rtl8192ee_check_rxdesc_remain -1002b2c0 T rtl8195a_recv_tasklet -1002b634 T rtl8195a_tx_int_handler -1002b660 T InterruptHandle8195a -1002b8d4 T rtl8195a_xmit_tasklet -1002b8fc T lxbus_set_intf_ops -1002b93c t GetTxBufDesc -1002b986 t UpdateFirstTxbdtoXmitBuf.isra.3 -1002b9b8 t check_nic_enough_desc.isra.4 -1002ba08 T rtl8195ab_init_xmit_priv -1002ba16 T rtl8195ab_free_xmit_priv -1002ba1e T GetDmaTxbdIdx -1002ba3a T rtl8195a_enqueue_xmitbuf -1002ba5e T rtl8195a_dequeue_xmitbuf -1002ba82 T SetTxbdForLxDMARtl8195ab -1002bb02 T UpdateTxbdHostIndex -1002bb40 T rtw_dump_xframe -1002bd12 T check_tx_desc_resource -1002bd4c T rtw_dequeue_xframe -1002bde0 T rtw_xmitframe_coalesce -1002c094 T rtl8195ab_xmitframe_resume -1002c198 T rtl8195ab_mgnt_xmit -1002c1d4 T rtl8195ab_hal_xmit -1002c2f2 t Hal_GetEfuseDefinition -1002c322 t ResumeTxBeacon -1002c368 T UpdateHalRAMask8195A -1002c53c T HalLittleWifiMCUThreadRtl8195a -1002c594 T HalCheckInReqStateThreadRtl8195a -1002c5e0 T HalTDMAChangeStateThreadRtl8195a -1002c62c t rtl8195a_read_chip_version -1002c6a0 t Hal_EfuseWordEnableDataWrite -1002c8e4 t Hal_EfusePowerSwitch -1002c8f8 t rtl8195a_free_hal_data -1002c912 t StopTxBeacon -1002c95c T SetHalODMVar8195A -1002ca30 T rtl8195a_start_thread -1002ca98 T rtl8195a_stop_thread -1002cabc t Hal_ReadEFuse -1002cc2c T GetHalODMVar8195A -1002cc40 t rtw_flash_map_update.part.12 -1002cce0 t rtw_flash_map_erase -1002cd24 t Hal_EfusePgPacketWrite -1002cfa0 t Hal_EfuseGetCurrentSize -1002d080 t rtw_flash_map_write -1002d24e T rtl8195a_InitBeaconParameters -1002d2be T _InitBurstPktLen_8195AB -1002d2c8 T rtl8195a_set_hal_ops -1002d3ac T rtl8195a_init_default_value -1002d3ae T rtl8195a_InitLLTTable -1002d3f8 T Hal_GetChnlGroup8195A -1002d434 T rtw_config_map_read -1002d520 T rtw_config_map_write -1002d5cc T Hal_InitPGData -1002d62a T Hal_EfuseParseIDCode -1002d642 T Hal_ReadPowerValueFromPROM_8195A -1002d6e0 T Hal_EfuseParseTxPowerInfo_8195A -1002d778 T Hal_EfuseParseEEPROMVer_8195A -1002d78e T Hal_EfuseParsePackageType_8195A -1002d7fa T Hal_EfuseParseChnlPlan_8195A -1002d82a T Hal_EfuseParseCustomerID_8195A -1002d840 T Hal_EfuseParseXtal_8195A -1002d858 T Hal_EfuseParseThermalMeter_8195A -1002d880 T Hal_ReadRFGainOffset -1002d8d0 T BWMapping_8195A -1002d8f0 T SCMapping_8195A -1002d918 T rtl8195a_update_txdesc -1002dc4e T rtl8195a_fill_fake_txdesc -1002dd0c T SetHwReg8195A -1002ea04 T GetHwReg8195A -1002ea98 T SetHalDefVar8195A -1002eb78 T GetHalDefVar8195A -1002eb9c T PHY_QueryBBReg_8195A_Safe -1002ebc6 T PHY_SetBBReg_8195A_Safe -1002ebf0 t phy_RFSerialRead_8195A -1002eca4 T PHY_QueryRFReg_8195A -1002ecbc T PHY_SetRFReg_8195A -1002ed14 T PHY_MACConfig8195A -1002ed2e T PHY_BBConfig8195A -1002ee54 T PHY_RFConfig8195A -1002ee58 T PHY_SetTxPowerIndex_8195A -1002ef62 T phy_TxPwrAdjInPercentage -1002efa0 T PHY_GetTxPowerIndex_8195A -1002f0b0 T PHY_SetTxPowerLevel8195A -1002f0b6 T phy_SpurCalibration_8195A -1002f382 T phy_SetRegBW_8195A -1002f3c0 T phy_GetSecondaryChnl_8195A -1002f3e2 T phy_PostSetBwMode8195A -1002f550 T phy_SwChnl8195A -1002f5f8 T phy_SwChnlAndSetBwMode8195A -1002f648 T PHY_HandleSwChnlAndSetBW8195A -1002f6f8 T PHY_SetBWMode8195A -1002f71a T PHY_SwChnl8195A -1002f734 T PHY_SetSwChnlBWMode8195A -1002f752 t HalTimerEnable -1002f764 T InitTDMATimer -1002f78c T ChangeStateByTDMA -1002f79c T GetMinRateInRRSR -1002f7d0 T CheckInReqState -1002f7e0 T InitCheckStateTimer -1002f810 T InitGTimer1ms -1002f85c T DeInitGTimer1ms -1002f8a4 T ChangeTransmiteRate -1002f8e0 T PowerBitSetting -1002f95c T ChkandChangePS -1002f9c0 T IssueRsvdPagePacketSetting -1002fa38 T IssuePSPoll -1002fa64 T WaitTxStateMachineOk -1002fab8 T IssueNullData -1002fb68 T PsCloseRF -1002fb9c T PsOpenRF -1002fbcc T ChkTxQueueIsEmpty -1002fbe4 T InitPS -1002fc54 T ConfigListenBeaconPeriod -1002fc78 T PS_S2_Condition_Match -1002fcb8 T PS_S4_Condition_Match -1002fd34 T PS_32K_Condition_Match -1002fd70 T PS_S2ToS3ToS0State -1002fdd8 T PS_S2ToS0State -1002fdf4 T PS_S3ToS2orS0State -1002fe24 T PS_S0ToS1ToS2State -1002fe80 T PS_S1ToS0orS2State -1002feb0 T PS_S2ToS4State -1002fefc T PS_S0ToS6State -1002ff1c T PS_S6ToS0State -1002ff3c T CheckTSFIsStable -1002ff8c T WaitHWStateReady -1002ff9c T SysClkDown -10030014 T SysClkUp -10030068 T ResetPSParm -100300d8 T PS_S4ToS2State -10030108 T SleepTo32K -10030178 T Change_PS_State -10030320 T Legacy_PS_Setting -10030394 T PSModeSetting -10030430 T ChangePSStateByRPWM -10030474 T ChangeTDMAState -1003058c T TDMAChangeStateTask -100305b6 T EnterPS -100305d8 T SetSmartPSTimer -10030614 T GTimer7Handle -10030670 T SmartPS2InitTimerAndToGetRxPkt -100306a8 T PS_OnBeacon -10030758 T PSBcnEarlyProcess -10030814 T PSMtiBcnEarlyProcess -100308c0 T PSRxBcnProcess -10030a0c T TxPktInPSOn -10030a4a T PsBcnToProcess -10030b04 T GTimer6Handle -10030b50 T RPWMProcess -10030b88 T PSSetMode -10030c00 T SpeRPT -10030d50 T ISR_BcnEarly -10030db8 T ISR_MtiBcnEarly -10030de8 T ISR_RxBcn -10030e04 T ISR_RxBCMD1 -10030e34 T ISR_RxBCMD0 -10030e88 T ISR_RxUCMD1 -10030ec6 T ISR_RxUCMD0 -10030f02 T ISR_TxPktIn -10030f14 T ISR_TXCCX -10030f18 T H2CHDL_SetPwrMode -10031040 T CheckInReqStateTask -10031084 T HalGetNullTxRpt -100310a0 T ISR_TBTT -10031118 T H2CHDL_BcnIgnoreEDCCA -10031128 T PMUInitial -10031178 T PMUDeInitial -1003117c T PMUTask -10031288 T PHY_RF6052SetBandwidth8195A -100312cc T PHY_RF6052_Config8195A -10031384 t process_rssi -100313ba T rtl8195a_query_rx_desc_status -1003146a T rtl8195a_query_rx_phy_status -100315c2 T hal_com_get_channel_plan -100315f6 T HAL_IsLegalChannel -10031614 T MRateToHwRate -10031628 T HwRateToMRate -1003163c T HalSetBrateCfg -100316e8 T Hal_MappingOutPipe -10031704 T hal_init_macaddr -10031730 T hw_var_port_switch -100319cc T SetHwReg -100319d6 T GetHwReg -100319d8 T switch_power_saving_mode -10031a1c T rtw_bb_rf_gain_offset -10031a64 T PHY_GetRateValuesOfTxPowerByRate -10031bfc T PHY_StoreTxPowerByRateNew -10031c98 T PHY_InitTxPowerByRate -10031cb0 T PHY_StoreTxPowerByRate -10031cc8 T PHY_GetTxPowerIndexBase -10031d68 T PHY_GetTxPowerTrackingOffset -10031d94 T PHY_GetRateIndexOfTxPowerByRate -10031da8 T PHY_GetTxPowerByRate -10031e08 T phy_StoreTxPowerByRateBase -10031e54 T PHY_SetTxPowerByRate -10031e90 T phy_ConvertTxPowerByRateInDbmToRelativeValues -10031f90 T PHY_TxPowerByRateConfiguration -10031fa2 T PHY_SetTxPowerIndexByRateArray -10031fe0 T PHY_SetTxPowerIndexByRateSection -10032044 T PHY_SetTxPowerLevelByPath -1003207a T phy_GetWorldWideLimit -100320a6 T PHY_GetTxPowerLimit -100321d0 T PHY_ConvertTxPowerLimitToPowerIndex -10032320 T PHY_InitTxPowerLimit -10032368 T PHY_SetTxPowerLimit -100323e4 T PHY_GetTxPowerIndex -100323f4 T rtw_hal_chip_configure -1003240a T rtw_hal_read_chip_info -10032420 T rtw_hal_read_chip_version -10032436 T rtw_hal_def_value_init -1003244c T rtw_hal_free_data -10032462 T rtw_hal_dm_init -10032478 T rtw_hal_dm_deinit -1003248e T rtw_hal_init -100324b8 T rtw_hal_deinit -100324d2 T rtw_hal_set_hwreg -100324e0 T rtw_hal_get_hwreg -100324ee T rtw_hal_set_def_var -10032500 T rtw_hal_get_def_var -10032512 T rtw_hal_set_odm_var -10032520 T rtw_hal_get_odm_var -1003252e T rtw_hal_enable_interrupt -10032550 T rtw_hal_disable_interrupt -10032572 T rtw_hal_inirp_init -10032584 T rtw_hal_inirp_deinit -10032596 T rtw_hal_irp_reset -100325a4 T rtw_hal_xmit -100325b6 T rtw_hal_mgnt_xmit -100325c8 T rtw_hal_init_xmit_priv -100325da T rtw_hal_free_xmit_priv -100325e8 T rtw_hal_update_ra_mask -10032616 T rtw_hal_add_ra_tid -10032624 T rtw_hal_clone_data -10032632 T rtw_hal_start_thread -10032640 T rtw_hal_stop_thread -1003264e T rtw_hal_read_bbreg -10032680 T rtw_hal_write_bbreg -100326aa T rtw_hal_read_rfreg -100326bc T rtw_hal_write_rfreg -100326d0 T rtw_hal_interrupt_handler -100326e2 T rtw_hal_set_bwmode -100326f0 T rtw_hal_set_chan -100326fe T rtw_hal_set_chnl_bw -10032714 T rtw_hal_dm_watchdog -1003272a T rtw_hal_macid_sleep -1003274a T rtw_hal_macid_wakeup -1003276a T decide_chip_type_by_device_id -10032770 t rtw_net_get_stats -100327c0 t netdev_if2_close -100327e0 t netdev_close -10032840 t rtw_if1_deinit -100328da T rtw_os_indicate_connect -100328de T rtw_os_indicate_scan_done -100328e2 T rtw_reset_securitypriv -100329e6 T rtw_os_indicate_disconnect -10032a30 T rtw_init_netdev -10032b80 T rtw_drv_if2_init -10032d88 T rtw_drv_if2_stop -10032dde T rtw_drv_if2_free -10032e28 T _netdev_open -10032f54 T _netdev_if2_open -10033010 T netdev_if2_open -10033038 T netdev_open -10033060 T rtw_drv_probe -100331e0 T rtw_dev_remove -10033224 T rtw_drv_entry -10033250 T rtw_drv_halt -10033280 t rtw_wx_set_autoreconnect -100332ae t rtw_wx_get_autoreconnect -100332bc t rtw_forwarding_set -100332de t rtw_set_ch_deauth -100332fe t rtw_p2p_get -10033304 t get_priv_size -10033318 t rtw_wx_set_pscan_freq -100333a0 t rtw_wx_del_custome_ie -10033414 t rtw_wx_update_custome_ie -100334a4 t rtw_wx_set_custome_ie -10033550 t rtw_set_tos_value -10033570 t rtw_get_tx_power -100336b4 t rtw_pm_get -100336f8 t rtw_pm_set -100337ac t rtw_p2p_set -100338b8 t rtw_wx_read32 -10033964 t rtw_wx_write32 -100339c8 t rtw_wx_set_freq.isra.10 -10033a70 T rtw_ex_set -10033b30 T wireless_send_event -10033b3a T indicate_wx_custom_event -10033b96 T indicate_wx_scan_result_present -10033bbe T indicate_wx_scan_complete_event -10033be8 T rtw_indicate_sta_assoc -10033c38 T rtw_indicate_sta_disassoc -10033c90 T rtw_indicate_wx_assoc_event -10033cc2 T rtw_indicate_wx_disassoc_event -10033cf2 T rtw_set_wpa_ie -10033e20 T strtopsk -10033e8c T rtw_wx_get_passphrase -10033ed8 T rtw_wx_set_ap_essid -10033fcc T mac_reg_dump -100340a0 T bb_reg_dump -10034114 T rf_reg_dump -100341ac t rtw_dbg_port -100349e0 T rtw_set_sta_num -100349fc T rtw_ex_get_drv_ability -10034abc T rtw_ex_get -10034d58 T rtw_ioctl -100361c4 T rtw_os_recv_resource_init -100361c8 T rtw_os_recv_resource_alloc -100361d2 T rtw_os_recv_resource_free -100361d4 T rtw_tkip_countermeasure -10036274 T rtw_handle_tkip_mic_err -1003631c T rtw_recv_indicatepkt -10036558 T skb_fail_inc -10036574 T skb_fail_get_and_rst -10036590 T init_skb_pool -100365ec W init_skb_data_pool -10036648 W deinit_skb_data_pool -1003664c T alloc_skb -1003676c T kfree_skb -100367e4 T kfree_skb_chk_key -100367e8 T skb_put -1003681c T skb_reserve -1003682a T dev_alloc_skb -10036846 T skb_end_pointer -1003684a T skb_set_tail_pointer -10036852 T skb_pull -1003686a T skb_copy -10036892 T rtw_remainder_len -1003689e T _rtw_open_pktfile -100368b0 T _rtw_pktfile_read -100368de T rtw_set_tx_chksum_offload -100368e0 T rtw_os_xmit_resource_alloc -100368ea T rtw_os_xmit_resource_free -100368ec T rtw_os_pkt_complete -100368f4 T rtw_os_xmit_complete -10036906 T rtw_os_xmit_schedule -10036944 T rtw_xmit_entry -10036990 T rtw_alloc_etherdev_with_old_priv -100369a6 T rtw_alloc_etherdev -100369d2 T rtw_free_netdev -100369f0 T rtw_if_wifi_thread -10036a8c T timer_wrapper -10036ae0 T alloc_etherdev -10036b3c T free_netdev -10036b56 T dev_alloc_name -10036b60 T init_timer_wrapper -10036b80 T deinit_timer_wrapper -10036bcc T init_timer -10036c84 T mod_timer -10036d64 T cancel_timer_ex -10036dac T del_timer_sync -10036e10 T rtw_init_timer -10036e18 T rtw_set_timer -10036e1c T rtw_cancel_timer -10036e26 T rtw_del_timer -10036e2c T rltk_get_idx_bydev -10036e3c T rltk_wlan_init -10036ec4 T rltk_wlan_deinit -10036f8c T rltk_wlan_start -10036fc0 T rltk_wlan_check_isup -10036fd0 T rltk_wlan_tx_inc -10036fe4 T rltk_wlan_tx_dec -10036ff8 T rltk_wlan_get_recv_skb -10037008 T rltk_wlan_alloc_skb -10037048 T rltk_wlan_send_skb -1003707c T rltk_netif_rx -10037128 T rltk_set_sta_num -1003712c T rltk_set_tx_power_percentage -10037160 T rltk_wlan_control -100371f4 T rltk_wlan_running -1003720c T rltk_wlan_handshake_done -10037240 T rltk_wlan_wireless_mode -100372cc T rltk_wlan_is_connected_to_ap -10037310 T Efuse_PowerSwitch -1003731c T Efuse_GetCurrentSize -10037328 T Efuse_CalculateWordCnts -1003734c T EFUSE_GetEfuseDefinition -10037360 T efuse_OneByteRead -10037394 T efuse_OneByteWrite -100373c8 T Efuse_PgPacketWrite -100373dc T efuse_WordEnableDataRead -1003740e T Efuse_WordEnableDataWrite -10037422 T efuse_GetCurrentSize -1003744a T rtw_efuse_map_read -100374ac T rtw_efuse_map_write -1003762c T rtw_macaddr_cfg -100376f0 T rtw_get_p2p_ie -10037758 T rtw_get_p2p_attr -100377cc T rtw_get_cipher_info -10037846 T rtw_get_bcn_info -10037916 T rtw_init_default_value -10037994 T rtw_cancel_all_timer -10037a20 T rtw_free_drv_sw -10037a9a T rtw_reset_drv_sw -10037af4 T rtw_init_drv_sw -10037b88 T rtw_start_drv_threads -10037c44 T rtw_stop_drv_threads -10037c7a T rtw_read8 -10037c88 T rtw_read16 -10037c96 T rtw_read32 -10037ca4 T rtw_write8 -10037cb2 T rtw_write16 -10037cc0 T rtw_write32 -10037cce T rtw_do_join -10037d70 T rtw_set_802_11_bssid -10037f08 T rtw_set_802_11_ssid -10038018 T rtw_set_802_11_infrastructure_mode -100380ba T rtw_set_802_11_bssid_list_scan -1003810a T rtw_set_802_11_authentication_mode -1003812e T rtw_set_802_11_add_wep -1003818e T ODM_InitRAInfo -10038234 T InitialRateUpdate -10038360 T RateUp_search_RateMask -10038392 T RateDown_search_RateMask -100383e4 T StartRateByRSSI -1003840e T RateUpRAM8195A -100384a2 T RateDownTrying -100384e0 T TryDone -10038584 T RateDownStepRAM8195A -10038624 T RateDecisionRAM8195A -10038718 T ArfrRefresh -10038930 T H2CHDL_Set_MACID_Config -10038a00 T PHY_DM_RA_SetRSSI_8195A -10038a2e t CheckPositive.isra.0 -10038b28 T ODM_ReadAndConfig_MP_8195A_AGC_TAB -10038ba0 T ODM_ReadAndConfig_MP_8195A_PHY_REG -10038c18 T ODM_GetVersion_MP_8195A_PHY_REG -10038c1c T ODM_ReadAndConfig_MP_8195A_PHY_REG_PG -10038c50 T odm_ConfigRFReg_8195A -10038c88 T odm_ConfigRF_RadioA_8195A -10038c98 T odm_ConfigMAC_8195A -10038c9c T odm_ConfigBB_AGC_8195A -10038cac T odm_ConfigBB_PHY_REG_PG_8195A -10038cda T odm_ConfigBB_PHY_8195A -10038d22 T odm_ConfigBB_TXPWR_LMT_8195A -10038d46 T PHYDM_InitTRXAntennaSetting -10038d5a T phydm_Init_cck_setting -10038dac T ODM_CmnInfoInit -10038ea4 T ODM_CmnInfoHook -10038f58 T ODM_CmnInfoPtrArrayHook -10038f68 T ODM_CmnInfoUpdate -10039038 T odm_CommonInfoSelfInit -1003909c T ODM_DMInit -100390ea T odm_CommonInfoSelfUpdate -1003913c T PhyDM_Get_Structure -10039160 T phydm_NoisyDetection -100391aa T ODM_DMWatchdog -1003921a T Phydm_CheckAdaptivity -10039248 T Phydm_NHMCounterStatisticsInit -100392be T Phydm_SetEDCCAThreshold -100392f6 T Phydm_MACEDCCAState -10039334 T Phydm_AdaptivityInit -1003941c T Phydm_Adaptivity -10039568 T ODM_CfoTrackingInit -10039592 T ODM_CfoTracking -100395b2 T ODM_ParsingCFO -100395ec T ODM_InitDebugSetting -10039600 T ODM_Write_DIG -100396a8 T odm_ForbiddenIGICheck -1003973c T odm_FalseAlarmCounterStatistics_patch -100398f4 T ODM_Write_CCK_CCA_Thres -1003992e T odm_DIGInit -100399c8 T odm_DigAbort -100399ec T odm_DIGbyRSSI_LPS -10039abc T odm_FAThresholdCheck -10039ae8 T odm_DIG -10039d78 T odm_FalseAlarmCounterStatistics -10039da2 T odm_CCKPacketDetectionThresh -10039e22 T odm_RxPhyStatus8195A_Parsing -10039f28 T odm_Process_RSSIForDM_8195A -1003a06a T ODM_PhyStatusQuery_8195A -1003a096 T ODM_PhyStatusQuery -1003a09a T ODM_ConfigRFWithHeaderFile -1003a0b8 T ODM_ConfigRFWithTxPwrTrackHeaderFile -1003a0ea T ODM_ConfigBBWithHeaderFile -1003a112 T ODM_ConfigMACWithHeaderFile -1003a124 T ODM_Read1Byte -1003a12a T ODM_Read4Byte -1003a130 T ODM_Write1Byte -1003a136 T ODM_Write2Byte -1003a13c T ODM_Write4Byte -1003a142 T ODM_SetMACReg -1003a148 T ODM_SetBBReg -1003a14e T ODM_GetBBReg -1003a154 T ODM_SetRFReg -1003a15a T ODM_GetRFReg -1003a160 T ODM_MoveMemory -1003a16a T ODM_delay_ms -1003a16e T ODM_delay_us -1003a174 T getSwingIndex -1003a1cc T odm_TXPowerTrackingThermalMeterInit -1003a284 T odm_TXPowerTrackingInit -1003a288 T odm_TXPowerTrackingCheckIOT -1003a2bc T ODM_TXPowerTrackingCheck -1003a2ca T odm_RSSIMonitorInit -1003a2d2 T ODM_RAPostActionOnAssoc -1003a2da T odm_RSSIMonitorCheckIOT -1003a3b2 T odm_RSSIMonitorCheck -1003a3c6 T odm_RateAdaptiveMaskInit -1003a3f0 T phydm_RA_level_decision -1003a438 T odm_RefreshRateAdaptiveMaskIOT -1003a498 T odm_RefreshRateAdaptiveMask -1003a4ac T ODM_Get_Rate_Bitmap -1003a5a8 t _ReadEfuseInfo8195a -1003a670 t rtl8195a_interface_configure -1003a6a4 t rtl8195a_hal_deinit -1003a6e0 T _InitPowerOn -1003a760 t ReadAdapterInfo8195a -1003a790 T _InitDriverInfoSize -1003a79a T _InitNetworkType -1003a7bc T _InitWMACSetting -1003a82c T _InitAdaptiveCtrl -1003a870 T _InitEDCA -1003a8ec T _InitRateFallback -1003a930 T _InitRetryFunction -1003a95c T _InitOperationMode -1003a9a4 T _InitInterrupt -1003a9e4 t rtl8195a_hal_init -1003acb8 T rtl8195ab_set_hal_ops -1003ad94 T FillH2CCmd8195A -1003ae30 T CheckFwRsvdPageContent -1003ae32 T rtl8195a_set_FwRsvdPage_cmd -1003ae3c T rtl8195a_set_FwMediaStatusRpt_cmd -1003ae60 T rtl8195a_set_FwMacIdConfig_cmd -1003af1c T rtl8195a_set_FwPwrMode_cmd -1003afa0 T rtl8195a_download_rsvd_page -1003b2a8 T rtl8195a_set_FwJoinBssRpt_cmd -1003b2b2 T rtl8195a_Add_RateATid -1003b312 T rtw_rpt_h_addr -1003b35e T rtw_txrpt_read8 -1003b37c T rtw_txrpt_write8 -1003b3a0 T rtw_ratemask_read8 -1003b3be T rtw_ratemask_write8 -1003b3e2 T ReadRateMask8 -1003b3ec T WriteRateMask8 -1003b3f0 T ReadTxrpt8 -1003b3fa T WriteTxrpt8 -1003b3fe T ResetTxrpt -1003b436 T PsuseTxrpt -1003b456 T CheckMaxMacidNum -1003b48e T GetMediaStatusCommon -1003b4a8 T GetTxrptStatistic -1003b560 T rtl8195a_InitHalDm -1003b69c T rtl8195a_HalDmWatchDog -1003b78c T rtl8195a_init_dm_priv -1003b864 T rtl8195a_deinit_dm_priv -1003b866 T MediaConnection -1003b884 T MediaDisconnection -1003b8a4 T RATaskEnable -1003b8ce T SetMediaStatus -1003b90c T H2CHDL_JoinInfo -1003b944 T H2CHDL_SetRsvdPage -1003b9dc T H2CCmdCommon -1003ba48 T HalPwrSeqCmdParsing -1003bb08 T hci_dvobj_init -1003bb18 T hci_dvobj_deinit -1003bb28 T hci_dvobj_request_irq -1003bb38 T hci_dvobj_free_irq -1003bb48 T hci_lxbus_dvobj_init -1003bb84 T hci_lxbus_dvobj_deinit -1003bbc4 T hci_lxbus_dvobj_request_irq -1003bc18 T hci_lxbus_free_irq -1003bc70 T hci_lxbus_intf_stop -1003bca8 T rtw_interrupt_thread -1003bd20 T lextra_bus_dma_Interrupt -1003bd64 T init_rom_wlan_ram_map -1003bd7c T ODM_ReadAndConfig_MP_8195A_MAC_REG -1003bed0 t CheckPositive.isra.0 -1003bfc8 T ODM_ReadAndConfig_MP_8195A_RadioA -1003c040 T ODM_ReadAndConfig_MP_8195A_TxPowerTrack_QFN48 -1003c090 T ODM_ReadAndConfig_MP_8195A_TxPowerTrack_QFN56 -1003c0e0 T ODM_ReadAndConfig_MP_8195A_TxPowerTrack_TFBGA96 -1003c130 T ODM_ReadAndConfig_MP_8195A_TXPWR_LMT -1003c168 T ODM_ReadAndConfig_MP_8195A_TxXtalTrack -1003c194 T GetDeltaSwingTable_8195A -1003c1c4 T GetDeltaSwingXtalTable_8195A -1003c1d4 T ODM_TxXtalTrackSetXtal_8195A -1003c1f4 T Hal_MPT_CCKTxPowerAdjust -1003c2c4 T ODM_TxPwrTrackSetPwr_8195A -1003c3f8 T ConfigureTxpowerTrack_8195A -1003c444 T phy_PathA_IQK_8195A -1003c5f8 T phy_PathA_RxIQK8195A -1003c98c T _PHY_PathAFillIQKMatrix8195A -1003cb22 T _PHY_PathBFillIQKMatrix8195A -1003cc9e T _PHY_SaveADDARegisters8195A -1003ccd2 T _PHY_SaveMACRegisters8195A -1003cd00 T _PHY_ReloadADDARegisters8195A -1003cd34 T _PHY_ReloadMACRegisters8195A -1003cd64 T _PHY_PathADDAOn8195A -1003cda0 T _PHY_MACSettingCalibration8195A -1003cde8 T _PHY_PIModeSwitch8195A -1003ce24 T phy_SimularityCompare_8195A -1003cf58 T phy_IQCalibrate_8195A -1003d2e4 T phy_LCCalibrate_8195A -1003d354 T PHY_LCCalibrate_8195A -1003d3c0 T PHY_IQCalibrate_8195A -1003d67c T DoIQK_8195A -1003d69a T ConfigureTxpowerTrack -1003d6ac T ODM_TXPowerTrackingCallback_ThermalMeter -1003db10 T ODM_ResetIQKResult -1003db58 T ODM_GetRightChnlPlaceforIQK -1003dbac T rtl_cryptoEngine_init -1003dbec T __aeabi_llsr -1003dbec T __lshrdi3 -1003dc04 T memset -1003dc14 T _free_r -1003dcac T _malloc_r -1003dd68 T _sbrk_r -1003dd88 T siscanf -1003dd88 T sscanf -1003dddc T __seofread -1003dde0 T strlen -1003ddf0 T __locale_ctype_ptr_l -1003ddf8 T __locale_ctype_ptr -1003de14 T __ascii_mbtowc -1003de38 T __malloc_lock -1003de3a T __malloc_unlock -1003de3c T _sungetc_r -1003deb6 T __ssrefill_r -1003def0 T __ssvfiscanf_r -1003def0 T __ssvfscanf_r -1003e198 T _scanf_chars -1003e260 T _scanf_i -1003e44c T __sccl -1003e4aa t _strtol_l.isra.0 -1003e5ac T _strtol_r -1003e5d0 t _strtoul_l.isra.0 -1003e6cc T _strtoul_r -1003e6f0 T __submore -1003e762 T __ascii_wctomb -1003e77c T memchr -1003e798 T memcpy -1003e7ae T _realloc_r -1003e7fa T _malloc_usable_size_r -1003e80c T _sbrk -1003e828 t __rtw_get_bit_value_from_ieee_value_veneer -1003e830 t __phy_CalculateBitShift_veneer -1003e838 t __PHY_SetBBReg_8195A_veneer -1003e840 t __rtw_seccalctkipmic_veneer -1003e848 t __rtw_parse_wpa2_ie_veneer -1003e850 t __wep_80211_encrypt_veneer -1003e858 t __ROM_odm_EVMdbToPercentage_veneer -1003e860 t __rtw_parse_wpa_ie_veneer -1003e868 t __rtw_ieee802_11_parse_elems_veneer -1003e870 t __ROM_odm_GetDefaultCrytaltalCap_veneer -1003e878 t __rtw_get_sec_ie_veneer -1003e880 t __rtw_get_wpa_ie_veneer -1003e888 t __rtw_get_wps_ie_veneer -1003e890 t __ROM_ODM_CfoTrackingReset_veneer -1003e898 t __rtw_get_wpa2_ie_veneer -1003e8a0 t __ROM_odm_QueryRxPwrPercentage_veneer -1003e8a8 t __rtw_get_ie_veneer -1003e8b0 t __rtw_set_ie_veneer -1003e8b8 t __AES_WRAP_veneer -1003e8c0 t __PHY_QueryBBReg_8195A_veneer -1003e8c8 t __ROM_odm_SetCrystalCap_veneer -1003e8d0 t __rtw_secmicsetkey_veneer -1003e8d8 t __rtw_secmicappend_veneer -1003e8e0 t __rtw_set_supported_rate_veneer -1003e8e8 t __rtw_get_wps_attr_content_veneer -1003e8f0 t __rtw_secgetmic_veneer -1003e8f8 t __rt_md5_hmac_veneer -1003e900 t __rtw_set_fixed_ie_veneer -1003e908 t __rom_psk_CalcPTK_veneer -1003e910 t __aes_80211_encrypt_veneer -1003e918 t __tkip_80211_encrypt_veneer -1003e920 t __aes_80211_decrypt_veneer -1003e928 t __wep_80211_decrypt_veneer -1003e930 t __ROM_odm_CfoTrackingFlow_veneer -1003e938 t __rt_arc4_crypt_veneer -1003e940 t __HalGdmaChDisRtl8195a_veneer -1003e948 t __rtw_check_network_type_veneer -1003e950 t __rt_hmac_sha1_veneer -1003e958 t __rom_psk_CalcGTK_veneer -1003e960 t __rt_arc4_init_veneer -1003e968 t __Strtoul_veneer -1003e970 t __tkip_80211_decrypt_veneer -1003e978 t __key_2char2num_veneer -1003e980 t __SpicWaitBusyDoneRtl8195A_veneer -1003e988 t __AES_UnWRAP_veneer -1003e990 t __rom_psk_PasswordHash_veneer -1003e998 t __rtw_get_rateset_len_veneer -1003ea6e d __func__.11903 -1003ea78 d __func__.11918 -1003ea86 d __func__.11927 -1003ea92 d __func__.11935 -1003eba2 d __func__.12433 -1003ebc7 d __func__.12510 -1003ebf8 d srvContenErrX -1003ed3a D txt_tcpsrv_NULL_pointer -1003ed51 D txt_tcpsrv_already_initialized -1003ed6f D txt_tcpsrv_out_of_mem -1003edac d HTTPResponse -1003ee7c D HTTPdefault -1003eec6 D HTTPfserror -1003ef05 D HTTPfsupload -1003efe2 D HTTPresponse_200_head -1003efe5 D HTTPresponse_302_head -1003efeb D HTTPresponse_304_head -1003eff8 D HTTPresponse_400_head -1003f004 D HTTPresponse_401_content -1003f02a D HTTPresponse_401_head -1003f064 D HTTPresponse_404_content -1003f07a D HTTPresponse_404_head -1003f084 D HTTPresponse_411_content -1003f0b1 D HTTPresponse_411_head -1003f0c1 D HTTPresponse_413_content -1003f0fd D HTTPresponse_413_head -1003f116 D HTTPresponse_414_content -1003f14b D HTTPresponse_414_head -1003f160 D HTTPresponse_418_content -1003f175 D HTTPresponse_418_head -1003f182 D HTTPresponse_429_head -1003f1a5 D HTTPresponse_500_content -1003f1c1 D HTTPresponse_500_head -1003f1d7 D HTTPresponse_501_content -1003f20a D HTTPresponse_501_head -1003f22c d chunks.14120 -1003f233 D crlf_end_boundary -1003f238 D disk_err1_filename -1003f246 D disk_err2_filename -1003f254 D disk_err3_filename -1003f262 D disk_ok_filename -1003f26f D file_label -1003f274 D fsupload_fname -1003f280 d httpContentTypes -1003f2c4 d httpFileExtensions -1003f308 D http_default_file -1003f313 D sector_filename -1003f475 D sysconst_filename -1003f47e D web_cgi_fname -1003f71a d base64map -1003fb1f d __func__.19536 -1003fd2c d __func__.20324 -1003ff24 d err_strerr -10040070 D ip_addr_any -10040074 D ip_addr_broadcast -10040088 D memp_sizes -100400a8 D tcp_backoff -100400b8 D tcp_pcb_lists -100400c8 D tcp_persist_backoff -100400cf D ethbroadcast -100400d5 D ethzero -10040104 d __FUNCTION__.9363 -10040113 d __FUNCTION__.9375 -100401cc d dhcp_magic_cookie -100401d0 d dhcp_option_interface_mtu -100401d2 d dhcp_option_lease_time_one_day -10040250 d __FUNCTION__.13007 -10040264 d __FUNCTION__.13015 -10040280 d __FUNCTION__.13041 -1004029f d __FUNCTION__.13058 -100402b2 d __FUNCTION__.13069 -100402cd d __FUNCTION__.13203 -100402e3 d __FUNCTION__.13207 -10040390 D osdep_service -100404d4 d __FUNCTION__.7375 -1004055d D GPIO_InPinMode -10040561 D GPIO_SWPORT_DR_TBL -10040564 d __func__.8922 -100405be d __FUNCTION__.8774 -100405cb d __FUNCTION__.8787 -1004062c d PinMap_SSI_MISO -10040698 d PinMap_SSI_MOSI -1004088f D GDMA_Chnl_Option -10040928 D SpiDefaultSetting -10040978 D Ssi2_TX_GDMA_Chnl_Option -10040994 D Ssi_MultiBlk_GDMA_Chnl_Option -10040d91 d __FUNCTION__.8629 -10040db3 d __FUNCTION__.8636 -10040dce d __FUNCTION__.8643 -10040ef6 d __FUNCTION__.18444 -10040f18 D wlancmds -10041118 D rtw_cmd_callback -100413ac d RTW_ChannelPlan2G -10041433 D HT_INFO_OUI -10041437 D WMM_INFO_OUI -1004143d D RSN_TKIP_CIPHER -10041441 D WPS_OUI -10041445 D HT_CAP_OUI -10041449 D null_addr -1004144f D MCS_rate_1R -1004145f D P2P_OUI -100414c4 D OnAction_tbl -100414dc D RTW_WPA_OUI -100414e0 D WMM_PARA_OUI -100414e6 d RTW_ChannelPlanMap -10041501 D WMM_OUI -10041508 d wlanevents -100415e9 D zero_bssid -1004161d d __FUNCTION__.18311 -10041646 d __FUNCTION__.18144 -10041659 D SNAP_ETH_TYPE_APPLETALK_AARP -1004165b D SNAP_ETH_TYPE_IPX -1004165d D rtw_bridge_tunnel_header -10041684 D rtw_rfc1042_header -100416a2 d CSWTCH.36 -100416ae D ARTHEROS_OUI1 -100416b1 D ARTHEROS_OUI2 -100416b4 D REALTEK_OUI -100416b7 D RALINK_OUI -100416ba D MARVELL_OUI -100416bd D CISCO_OUI -100416c0 d rtw_basic_rate_cck -100416c4 D BROADCOM_OUI1 -100416c7 D BROADCOM_OUI2 -100416ca D REALTEK_96B_IE -100416d0 d rtw_basic_rate_mix -100416d7 d rtw_basic_rate_ofdm -100416da D AIRGOCAP_OUI -100416ee d CSWTCH.67 -10041700 d P802_1H_OUI -10041703 d RFC1042_OUI -1004170c d CSWTCH.49 -1004174e d CSWTCH.28 -10041760 D efuse_map_mask -10041770 d __func__.21858 -10041786 D flash_map_mask -10041b53 d CSWTCH.16 -10041bd7 d CSWTCH.18 -10041c46 d CSWTCH.14 -10041cdb d __FUNCTION__.22029 -10041ceb d __FUNCTION__.21819 -10041d00 d rtw_private_handler -10041d4c d rtw_private_args -100422b9 d __FUNCTION__.21888 -100422c9 d __FUNCTION__.22004 -100422d8 d __FUNCTION__.22076 -100422e9 d iw_priv_type_size -100422fe d __FUNCTION__.17971 -10042437 d __FUNCTION__.21591 -10042446 d __FUNCTION__.21613 -1004245b d __FUNCTION__.21748 -1004246e d __FUNCTION__.21700 -1004247f d __FUNCTION__.21724 -1004248f d __FUNCTION__.21637 -10042866 d __FUNCTION__.21753 -10042874 d __FUNCTION__.21815 -1004288d d __FUNCTION__.21630 -10042898 d __FUNCTION__.21799 -100428aa d __FUNCTION__.21625 -100428b8 d __FUNCTION__.21688 -10043a4c D rom_e_rtw_msgp_str_ -10043c08 D rom_f_rtw_msgp_str_ -10043e12 D CCKFCCTable_Ch14_8195A -10043e22 D CCKFCCTable_8195A -10043e34 D OFDMSwingTable_New -10043ee0 D CCKCETable_8195A -10043f49 d CSWTCH.39 -10043f74 d __func__.21335 -10043f94 D hci_ops -10043fb9 V Array_MP_8195A_TXPWR_LMT -1004452b d __func__.8589 -10044545 d __func__.8821 -1004455e d __func__.8814 -1004457c d __func__.8836 -1004459e d __func__.8670 -10044967 d __func__.8682 -1004497a d __func__.8617 -10044993 d __func__.8826 -100449ad d __func__.8804 -100449cc d __func__.8831 -10044a17 D _ctype_ -10044b18 D __sf_fake_stderr -10044b38 D __sf_fake_stdin -10044b58 D __sf_fake_stdout -10044b78 D xHeapRegions -10044b98 D console_commands -10044b98 D UartLogRamCmdTable -10044bb8 D UartLogRamCmdTable_end -10044bbc D __data_start__ -10044bbc D syscfg -10044bc6 D sin_table -10044cc8 D HTTPAuthorization -10044ccc D HTTPContentLength -10044cd0 D HTTPContentType -10044cd4 D HTTPCookie -10044cd8 D HTTPboundary -10044cdc D HTTPmultipartformdata -10044ce0 D SystemCoreClock -10044ce4 D error_flag -10044ce8 D feep_tab -10044d28 D tab_code_rtw_secyrity -10044d50 D wifi_ap_cfg -10044db8 D wifi_ap_dhcp -10044dc8 D wifi_cfg -10044dcf D wifi_st_cfg -10044e40 D wifi_st_dhcp -10044e50 D wlan_ap_name -10044e56 D wlan_ap_netifn -10044e57 D wlan_st_name -10044e60 d iss.7969 -10044e64 d tcp_port -10044e66 d udp_port -10044e68 D lwip_host_name -10044e88 d dhcp_recorded_xid -10044e8c d dhcp_server_state_machine -10044e90 d uxCriticalNesting -10044e94 d seed.13176 -10044e98 d last_wakelock_state -10044eb8 d wakelock -10044ebc d wakeup_event -10044ec0 D GlobalDebugEnable -10044ec4 D mlme_sta_tbl -10044f34 d PMKID_KDE_TYPE.18395 -10044f3c V nr_xmitbuff -10044f40 V nr_xmitframe -10044f44 D rtw_adaptivity_mode -10044f45 D g_user_ap_sta_num -10044f48 V max_local_skb_num -10044f4c V max_skb_buf_num -10044f50 D ARFB_table -10044f8f D TRYING_NECESSARY_idx -10044fa3 D DROPING_NECESSARY -10044fb7 D PER_RATE_UP -10044fcb D PER_RATE_DOWN -10044fe0 V Array_MP_8195A_PHY_REG_PG -10045070 D Array_MP_8195A_AGC_TAB -10045280 D Array_MP_8195A_PHY_REG -100458f8 d flag.21346 -100458fc D rtl8195A_card_disable_flow -1004599c D rtl8195A_card_enable_flow -10045a3c D Array_MP_8195A_MAC_REG -10045d44 D gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_TFBGA96_8195A -10045d64 D gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_TFBGA96_8195A -10045d84 D gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_QFN48_8195A -10045da2 D gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_QFN56_8195A -10045dc0 D gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_QFN48_8195A -10045dde D gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_QFN56_8195A -10045dfc D gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_TFBGA96_8195A -10045e1c D gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_QFN56_8195A -10045e3a D gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_QFN48_8195A -10045e58 D gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_QFN56_8195A -10045e78 D Array_MP_8195A_RadioA -10046440 D gDeltaSwingTableXtal_MP_P_TxXtalTrack_8195A -1004645e D gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_TFBGA96_8195A -1004647e D gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_QFN48_8195A -1004649c D _impure_ptr -100464a0 d impure_data -10046500 D __global_locale -1004666c D __data_end__ -1004666c D __ram_image2_text_end__ -10046680 D .ram.bss$$Base -10046680 D __bss_start__ -10046680 D skbdata_list -10046688 V skb_data_pool -10049a88 D errno -10049a8c D sema_WEBReady -10049a90 D dma_buffer -1004a55c D cfg_sema -1004a560 D cfg_updated -1004a564 D filt_const -1004a570 D filt_fade -1004a58c D filt_rainbow -1004a59c D filt_wave -1004a5a8 D strip -1004a5c0 D ws2812_cfg -1004a5c4 D phcfg -1004a5c8 D WEBFSStubs -1004a748 D disk_base_addr -1004a74c D fatCache -1004a75c d fatCacheID -1004a760 D isWEBFSLocked -1004a762 D numFiles -1004a764 D xQueueWebSrv -1004a768 d join_user_data -1004a76c D rtw_join_status -1004a770 D scan_result_handler_ptr -1004a784 D wifi_mode -1004a788 d event_callback_list -1004a908 D paff_array -1004a980 D lwip_init_done -1004a984 D xnetif -1004a9fc D wifi_autoreconnect -1004aa04 D wifi_run_mode -1004aa05 D wifi_st_status -1004aa06 D wlan_st_netifn -1004aa08 D web_scan_handler_ptr -1004aa14 d mbox -1004aa18 d tcpip_init_done -1004aa1c d tcpip_init_done_arg -1004aa20 d allrouters -1004aa24 d allsystems -1004aa28 d igmp_group_list -1004aa2c D current_header -1004aa30 D current_iphdr_dest -1004aa34 D current_iphdr_src -1004aa38 D current_netif -1004aa3c d ip_id -1004aa3e d ip_reass_pbufcount -1004aa40 d reassdatagrams -1004aa44 D dhcp_rx_options_given -1004aa50 D dhcp_rx_options_val -1004aa78 d xid.7869 -1004aa7c d dns_payload -1004aa80 d dns_payload_buffer -1004ac84 d dns_pcb -1004ac88 d dns_servers -1004ac90 d dns_table -1004b0f0 d next_timeout -1004b0f4 d tcpip_tcp_timer_active -1004b0f8 D netif_default -1004b0fc D netif_list -1004b100 d netif_num -1004b101 D pbuf_free_ooseq_pending -1004b104 d raw_pcbs -1004b108 D tcp_active_pcbs -1004b10c D tcp_active_pcbs_changed -1004b110 D tcp_bound_pcbs -1004b114 D tcp_listen_pcbs -1004b118 D tcp_ticks -1004b11c d tcp_timer -1004b11d d tcp_timer_ctr -1004b120 D tcp_tmp_pcb -1004b124 D tcp_tw_pcbs -1004b128 d ackno -1004b12c d flags -1004b130 d inseg -1004b144 d recv_data -1004b148 d recv_flags -1004b14c d seqno -1004b150 D tcp_input_pcb -1004b154 d tcphdr -1004b158 d tcplen -1004b15c D udp_pcbs -1004b160 d arp_table -1004b228 d etharp_cached_entry -1004b22c D lwip_tickless_used -1004b230 d s_nextthread -1004b234 d s_timeoutlist -1004b264 d bound_client_ethernet_address -1004b274 d client_request_ip -1004b278 d dhcp_client_ethernet_address -1004b288 d dhcp_message_repository -1004b28c d dhcp_message_total_options_lenth -1004b290 d dhcps_allocated_client_address -1004b294 D dhcps_ip4addr_pool_end -1004b295 D dhcps_ip4addr_pool_start -1004b298 d dhcps_ip_table_semaphore -1004b29c d dhcps_local_address -1004b2a0 d dhcps_local_gateway -1004b2a4 d dhcps_local_mask -1004b2a8 d dhcps_netif -1004b2ac d dhcps_network_id -1004b2b0 d dhcps_pcb -1004b2b4 d dhcps_send_broadcast_address -1004b2b8 d dhcps_subnet_broadcast -1004b2bc d ip_table -1004b2dc d ext_free -1004b2e0 D ext_lower -1004b2e4 D ext_upper -1004b2e8 d pxEnd -1004b2ec d xFreeBytesRemaining -1004b2f0 d xMinimumEverFreeBytesRemaining -1004b2f4 d xStart -1004b2fc d ulStoppedTimerCompensation -1004b300 d ulTimerCountsForOneTick -1004b304 d xMaximumPossibleSuppressedTicks -1004b308 D pxCurrentTCB -1004b30c d pxDelayedTaskList -1004b310 d pxOverflowDelayedTaskList -1004b314 d pxReadyTasksLists -1004b3f0 d ulTaskSwitchedInTime -1004b3f4 d uxCurrentNumberOfTasks -1004b3f8 d uxDeletedTasksWaitingCleanUp -1004b3fc d uxPendedTicks -1004b400 d uxSchedulerSuspended -1004b404 d uxTaskNumber -1004b408 d uxTopReadyPriority -1004b40c d xDelayedTaskList1 -1004b420 d xDelayedTaskList2 -1004b434 d xIdleTaskHandle -1004b438 d xNextTaskUnblockTime -1004b43c d xNumOfOverflows -1004b440 d xPendingReadyList -1004b454 d xSchedulerRunning -1004b458 d xSuspendedTaskList -1004b46c d xTasksWaitingTermination -1004b480 d xTickCount -1004b484 d xYieldPending -1004b488 d pxCurrentTimerList -1004b48c d pxOverflowTimerList -1004b490 d xActiveTimerList1 -1004b4a4 d xActiveTimerList2 -1004b4b8 d xLastTime.5390 -1004b4bc d xTimerQueue -1004b4c0 d xTimerTaskHandle -1004b4c4 d device_mutex -1004b4d4 d mutex_init -1004b4d8 d uxSavedInterruptStatus -1004b4dc D min_free_heap_size -1004b4e0 d g_heap_inited -1004b4e4 D g_tcm_heap -1004b4e8 d tcm_lock -1004b4ec D flashobj -1004b4f8 D fspic_isinit -1004b4f9 D SPI0_IS_AS_SLAVE -1004b4fc D SpiGdmaOp -1004b524 D WDGAdapter -1004b560 d HalGdmaReg -1004b564 D gHAL_Gpio_Adapter -1004b690 d hold_wakelock_time -1004b710 d last_acquire_wakelock_time -1004b790 D missing_tick -1004b794 D psm_dd_hook_info_size -1004b798 D psm_dd_hook_infos -1004b838 D reserve_pll -1004b83c d sys_sleep_time -1004b840 D Timer2To7HandlerData -1004b858 D PwrAdapter -1004bae4 D SYSAdapte -1004bae5 D libc_has_init -1004bae6 D print_off -1004bae8 d rheap_end -1004baec D p_ap_polling_sta_hdl -1004baf0 D auto_reconnect_running -1004baf4 D p_wlan_autoreconnect_hdl -1004baf8 D mac_monitor_callback -1004bafc D mf_list_head -1004bb00 d rtw_indicate_mgnt_enable -1004bb04 d pscan_retry_cnt.22254 -1004bb05 d bcn_changed.21387 -1004bb08 D pre_tx_try_count -1004bb0c D promisc_callback_all -1004bb10 D promisc_sema -1004bb14 D promisc_callback -1004bb18 D psk_essid -1004bb60 D psk_passphrase -1004bbe2 D psk_passphrase64 -1004bc23 D wpa_global_PSK -1004bc74 d rx_ring_pool -1004dd54 d stop_report_count.21381 -1004dd58 D p_ap_polling_sta_int_hdl -1004dd5c d WifiMcuCmdBitMap.22051 -1004dd60 D bCheckStateTIMER -1004dd64 D p_wlan_init_done_callback -1004dd68 D rtw_power_percentage_idx -1004dd6c D p_wlan_uart_adapter_callback -1004dd70 D rtw_adaptivity_en -1004dd74 D p_wlan_mgmt_filter -1004dd78 D p_jdsmart_callback -1004dd7c D rtw_initmac -1004dd80 D rtw_adaptivity_th_l2h_ini -1004dd84 d drvpriv -1004dd98 D skbbuf_used_num -1004dd9c V skb_pool -1004df7c D skbdata_used_num -1004df80 d wrapper_skbbuf_list -1004df88 D max_skbdata_used_num -1004df8c D max_skbbuf_used_num -1004df90 d skb_fail_count -1004df94 D timer_table -1004df9c D rltk_wlan_info -1004dfcc d timer_used_num -1004dfd0 D max_timer_used_num -1004dfd4 D Noisy_State -1004dfd8 D pExportWlanIrqSemaphore -1004dfdc D gDeltaSwingTableXtal_MP_N_TxXtalTrack_8195A -1004e000 d g_rtl_cipherEngine -1004e500 d init_status.9277 -1004e504 D __malloc_free_list -1004e508 D __malloc_sbrk_start -1004e50c d heap_end.4116 -1004e510 ? __ram_heap2_start__ -1004e510 D .ram.bss$$Limit -1004e510 D __bss_end__ -10070000 A __ram_heap2_end__ -1fff0000 D __ram_tcm_start__ -1fff0000 D __tcm_heap_start__ -1fff0000 D tcm_heap -1ffffd00 D __tcm_heap_end__ -30000000 ? __sdram_bss_end__ -30000000 ? __sdram_bss_start__ -30000000 ? __sdram_data_end__ -30000000 ? __sdram_data_start__ -30000000 ? __sdram_heap_start__ -30200000 A __sdram_heap_end__ diff --git a/Firmware/RTLGDB/Debug/obj/obj_list.lst b/Firmware/RTLGDB/Debug/obj/obj_list.lst deleted file mode 100644 index e07d3c5..0000000 --- a/Firmware/RTLGDB/Debug/obj/obj_list.lst +++ /dev/null @@ -1 +0,0 @@ -Debug/obj/project/main.o Debug/obj/project/user_start.o Debug/obj/project/WS2812/WS2812.o Debug/obj/project/WS2812/ledfilters.o Debug/obj/project/WS2812/ledeffectsserver.o Debug/obj/project/tcpsrv/tcp_srv_conn.o Debug/obj/project/webfs/webfs.o Debug/obj/project/web/web_srv.o Debug/obj/project/web/web_utils.o Debug/obj/project/web/web_websocket.o Debug/obj/project/web/websock.o Debug/obj/project/web/web_int_callbacks.o Debug/obj/project/web/web_int_vars.o Debug/obj/project/web/web_auth.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_bios_data.o Debug/obj/USDK/component/soc/realtek/8195a/cmsis/device/system_8195a.o Debug/obj/USDK/component/soc/realtek/8195a/misc/driver/rtl_console_new.o Debug/obj/USDK/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_eap_config.o Debug/obj/USDK/component/common/api/wifi/wifi_conf.o Debug/obj/USDK/component/common/api/wifi/wifi_ind.o Debug/obj/USDK/component/common/api/wifi/wifi_promisc.o Debug/obj/USDK/component/common/api/wifi/wifi_simple_config.o Debug/obj/USDK/component/common/api/wifi/wifi_util.o Debug/obj/USDK/component/common/api/lwip_netconf.o Debug/obj/USDK/component/common/api/wifi_api.o Debug/obj/USDK/component/common/api/wifi_api_scan.o Debug/obj/USDK/component/common/network/lwip/src/api/api_lib.o Debug/obj/USDK/component/common/network/lwip/src/api/api_msg.o Debug/obj/USDK/component/common/network/lwip/src/api/err.o Debug/obj/USDK/component/common/network/lwip/src/api/netbuf.o Debug/obj/USDK/component/common/network/lwip/src/api/netdb.o Debug/obj/USDK/component/common/network/lwip/src/api/netifapi.o Debug/obj/USDK/component/common/network/lwip/src/api/sockets.o Debug/obj/USDK/component/common/network/lwip/src/api/tcpip.o Debug/obj/USDK/component/common/network/lwip/src/core/ipv4/autoip.o Debug/obj/USDK/component/common/network/lwip/src/core/ipv4/icmp.o Debug/obj/USDK/component/common/network/lwip/src/core/ipv4/igmp.o Debug/obj/USDK/component/common/network/lwip/src/core/ipv4/inet.o Debug/obj/USDK/component/common/network/lwip/src/core/ipv4/inet_chksum.o Debug/obj/USDK/component/common/network/lwip/src/core/ipv4/ip.o Debug/obj/USDK/component/common/network/lwip/src/core/ipv4/ip_addr.o Debug/obj/USDK/component/common/network/lwip/src/core/ipv4/ip_frag.o Debug/obj/USDK/component/common/network/lwip/src/core/def.o Debug/obj/USDK/component/common/network/lwip/src/core/dhcp.o Debug/obj/USDK/component/common/network/lwip/src/core/dns.o Debug/obj/USDK/component/common/network/lwip/src/core/init.o Debug/obj/USDK/component/common/network/lwip/src/core/lwip_timers.o Debug/obj/USDK/component/common/network/lwip/src/core/mem.o Debug/obj/USDK/component/common/network/lwip/src/core/memp.o Debug/obj/USDK/component/common/network/lwip/src/core/netif.o Debug/obj/USDK/component/common/network/lwip/src/core/pbuf.o Debug/obj/USDK/component/common/network/lwip/src/core/raw.o Debug/obj/USDK/component/common/network/lwip/src/core/stats.o Debug/obj/USDK/component/common/network/lwip/src/core/sys.o Debug/obj/USDK/component/common/network/lwip/src/core/tcp.o Debug/obj/USDK/component/common/network/lwip/src/core/tcp_in.o Debug/obj/USDK/component/common/network/lwip/src/core/tcp_out.o Debug/obj/USDK/component/common/network/lwip/src/core/udp.o Debug/obj/USDK/component/common/network/lwip/src/netif/etharp.o Debug/obj/USDK/component/common/network/lwip/port/realtek/freertos/ethernetif.o Debug/obj/USDK/component/common/drivers/wlan/realtek/src/osdep/lwip_intf.o Debug/obj/USDK/component/common/network/lwip/port/realtek/freertos/sys_arch.o Debug/obj/USDK/component/common/network/dhcp/dhcps.o Debug/obj/USDK/component/common/network/sntp/sntp.o Debug/obj/USDK/component/common/network/netbios/netbios.o Debug/obj/USDK/component/os/freertos/freertos/Source/portable/MemMang/heap_5.o Debug/obj/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3/port.o Debug/obj/USDK/component/os/freertos/cmsis_os.o Debug/obj/USDK/component/os/freertos/freertos/Source/croutine.o Debug/obj/USDK/component/os/freertos/freertos/Source/event_groups.o Debug/obj/USDK/component/os/freertos/freertos/Source/list.o Debug/obj/USDK/component/os/freertos/freertos/Source/queue.o Debug/obj/USDK/component/os/freertos/freertos/Source/tasks.o Debug/obj/USDK/component/os/freertos/freertos/Source/timers.o Debug/obj/USDK/component/os/os_dep/device_lock.o Debug/obj/USDK/component/os/freertos/freertos_service.o Debug/obj/USDK/component/soc/realtek/8195a/misc/os/mailbox.o Debug/obj/USDK/component/soc/realtek/8195a/misc/os/osdep_api.o Debug/obj/USDK/component/os/os_dep/osdep_service.o Debug/obj/USDK/component/os/os_dep/tcm_heap.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/analogin_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/dma_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/efuse_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/flash_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/gpio_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/gpio_irq_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/i2c_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/i2s_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/log_uart_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/nfc_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/pinmap.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/pinmap_common.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/port_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/pwmout_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/rtc_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/serial_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/sleep.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/spdio_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/spi_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/sys_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/timer_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/us_ticker.o Debug/obj/USDK/component/common/mbed/common/us_ticker_api.o Debug/obj/USDK/component/common/mbed/common/wait_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/wdt_api.o Debug/obj/USDK/component/common/mbed/targets/hal/rtl8195a/flash_eep.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/bitband_io.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_32k.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_adc.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_gdma.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_gpio.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_i2c.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_i2s.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_nfc.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_pcm.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_pwm.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_sdr_controller.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_ssi.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_timer.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_uart.o Debug/obj/USDK/component/soc/realtek/8195a/misc/os/freertos_pmu_8195a.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_adc.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gdma.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gpio.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2c.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2s.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_nfc.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pwm.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_ssi.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_timer.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_uart.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_dac.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_common.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_soc_ps_monitor.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_efuse.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_log_uart.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_pinmux.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/hal_misc.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/ram_lib/startup.o Debug/obj/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libc.o Debug/obj/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libgloss_retarget.o Debug/obj/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_eabi_cast_ram.o Debug/obj/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_math_ram.o Debug/obj/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/c_stdio.o Debug/obj/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot.o diff --git a/Firmware/RTLGDB/RTLGDB.vcxproj b/Firmware/RTLGDB/RTLGDB.vcxproj deleted file mode 100644 index f8f40b2..0000000 --- a/Firmware/RTLGDB/RTLGDB.vcxproj +++ /dev/null @@ -1,628 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - LinuxDebugger - ssh - gdb - gdb - localhost:3333 - IoT - {3D8B16B6-9763-48AD-A514-F45680E8613B} - - - - Makefile - true - v140 - - - Makefile - false - v140 - - - Makefile - true - v140 - - - Makefile - false - v140 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - false - <_ApplicableDebuggers>Desktop - LinuxDebugger - - - - - - - - - - - - Project - - - - PropertySheet - - - - File - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - mingw32-make -s -j 6 all - C:\RTL\6-2017-q2\arm-none-eabi\include;$(ProjectDir)USDK\component\common\mbed\targets\hal\rtl8195a;$(ProjectDir)USDK\component\common\mbed\common;$(ProjectDir)USDK\component\common\mbed\hal;$(ProjectDir)USDK\component\common\mbed\hal_ext;$(ProjectDir)USDK\component\common\mbed\api;$(ProjectDir)USDK\component\common\api;$(ProjectDir)USDK\component\common\api\at_cmd;$(ProjectDir)USDK\component\common\api\network;$(ProjectDir)USDK\component\common\api\platform;$(ProjectDir)USDK\component\common\api\wifi\rtw_wowlan;$(ProjectDir)USDK\component\common\api\wifi;$(ProjectDir)USDK\component\common\network;$(ProjectDir)USDK\component\common\network\lwip\port\realtek;$(ProjectDir)USDK\component\common\network\lwip\port\realtek\arch;$(ProjectDir)USDK\component\common\network\lwip\port\realtek\freertos;$(ProjectDir)USDK\component\common\network\lwip\src\api;$(ProjectDir)USDK\component\common\network\lwip\src\core\ipv4;$(ProjectDir)USDK\component\common\network\lwip\src\core\snmp;$(ProjectDir)USDK\component\common\network\lwip\src\core;$(ProjectDir)USDK\component\common\network\lwip\src\include;$(ProjectDir)USDK\component\common\network\lwip\src\include\ipv4;$(ProjectDir)USDK\component\common\network\lwip\src\include\ipv4\lwip;$(ProjectDir)USDK\component\common\network\lwip\src\include\lwip;$(ProjectDir)USDK\component\common\network\lwip\src\include\netif;$(ProjectDir)USDK\component\common\network\lwip\src\include\posix\sys;$(ProjectDir)USDK\component\common\network\lwip\src\include\posix;$(ProjectDir)USDK\component\common\network\lwip\src\netif;$(ProjectDir)USDK\component\common\drivers\wlan\realtek\include;$(ProjectDir)USDK\component\common\drivers\wlan\realtek\include\byteorder;$(ProjectDir)USDK\component\common\drivers\wlan\realtek\src\osdep;$(ProjectDir)USDK\component\common\drivers\wlan\realtek\src\osdep\freertos;$(ProjectDir)USDK\component\os\freertos\freertos\Source;$(ProjectDir)USDK\component\os\freertos\freertos\Source\portable\GCC\ARM_CM3;$(ProjectDir)USDK\component\os\freertos\freertos\Source\include;$(ProjectDir)USDK\component\os\freertos;$(ProjectDir)USDK\component\os\os_dep\include;$(ProjectDir)USDK\component\os\os_dep;$(ProjectDir)USDK\component\os\rtx;$(ProjectDir)USDK\component\soc\realtek\common\bsp;$(ProjectDir)USDK\component\soc\realtek\8195a\fwlib;$(ProjectDir)USDK\component\soc\realtek\8195a\fwlib\src;$(ProjectDir)USDK\component\soc\realtek\8195a\fwlib\rtl8195a;$(ProjectDir)USDK\component\soc\realtek\8195a\fwlib\rtl8195a\src;$(ProjectDir)USDK\component\soc\realtek\8195a\fwlib\ram_lib;$(ProjectDir)USDK\component\soc\realtek\8195a\fwlib\ram_lib\wlan\realtek\wlan_ram_map\rom;$(ProjectDir)USDK\component\soc\realtek\8195a\fwlib\ram_lib\usb_otg\include;$(ProjectDir)USDK\component\soc\realtek\8195a\fwlib\ram_lib\usb_otg\include\usb_otg_inc;$(ProjectDir)USDK\component\soc\realtek\8195a\cmsis;$(ProjectDir)USDK\component\soc\realtek\8195a\cmsis\device;$(ProjectDir)USDK\component\soc\realtek\8195a\misc\driver;$(ProjectDir)USDK\component\soc\realtek\8195a\misc\platform;$(ProjectDir)USDK\component\soc\realtek\8195a\misc\os;$(ProjectDir)USDK\component\soc\realtek\8195a\misc\rtl_std_lib;$(ProjectDir)USDK\component\soc\realtek\8195a\misc\rtl_std_lib\include;$(ProjectDir)USDK\component\soc\realtek\8195a\misc\rtl_std_lib\lib_rtlstd;$(ProjectDir)USDK\component\soc\realtek\8195a\misc\rtl_std_lib\libc\rom\string;$(ProjectDir)USDK\component\soc\realtek\8195a\misc\rtl_std_lib\libgloss\rtl8195a\rom;$(ProjectDir)Project;$(ProjectDir)Project\web;$(ProjectDir)Project\webfs;$(ProjectDir)Project\tcpsrv;$(ProjectDir)Project\driver;$(ProjectDir)Project\rtl8195a;$(ProjectDir)Project\ina219;$(ProjectDir)Project\adc_ws;$(ProjectDir)Project\MPU6050;$(ProjectDir)Project\SSD1306;$(ProjectDir)Project\MLX90614;$(ProjectDir)Project\WS2812;$(ProjectDir)Project\WEBFiles;$(IncludePath) - mingw32-make -s -j 6 rebuild - mingw32-make -s clean - ram_all.bin - $(ProjectDir)Debug\bin\ - $(ProjectDir)Debug - CONFIG_PLATFORM_8195A=1;GCC_ARMCM3;M3;F_CPU=166666666L;__STDC__;__extension__= - $(PATH) - - - - - - $(SourcePath) - - - - - - - - $(ProjectDir)Debug\$(MSBuildProjectName).log - - - - - \ No newline at end of file diff --git a/Firmware/RTLGDB/RTLGDB.vcxproj.filters b/Firmware/RTLGDB/RTLGDB.vcxproj.filters deleted file mode 100644 index 2e222ac..0000000 --- a/Firmware/RTLGDB/RTLGDB.vcxproj.filters +++ /dev/null @@ -1,1686 +0,0 @@ - - - - - Assets - - - Assets - - - Assets - - - Assets - - - - - - - USDK - - - USDK - - - USDK - - - USDK - - - USDK - - - WEBFiles - - - WEBFiles - - - WEBFiles - - - WEBFiles - - - WEBFiles - - - - - {08a26e93-524c-4982-a01c-c8d4f223d6be} - - - {af4e8ee4-e406-4847-a22e-226417025f10} - - - {ecd0e7a7-531f-4217-a881-e1e0eb621fab} - - - {b014e9e9-13dd-4945-aa54-d3cbe961df2b} - - - {bdc045f1-676a-4c2e-98dc-4c7011a097f5} - - - {2602ad5c-5b75-46cc-8329-75dbd58ceba3} - - - {50d960d6-c301-402f-ad1c-33d14b7a4dbd} - - - {d2dbf689-f27b-4505-913b-edfefef7eb67} - - - {d8f42812-c46b-48c5-9d7f-ee1bfbba4b87} - - - {1bb167b0-34a3-4b65-9cea-4cbed30dd4bb} - - - {016841a5-3b07-4f94-bb12-b31883d45b49} - - - {78f72bec-3f46-43e4-a7a1-a945df2bca74} - - - {a87a2ceb-e33a-4a05-bb2c-9812e68d9640} - - - {b034088a-75c9-4eed-b4f5-29a45c21ce71} - - - {a50b9c26-7062-4bb6-abb2-3f112109d17c} - - - {7e58d994-4bfa-42b6-97c4-b491b3ebda8e} - - - {55db239c-cc9d-4fc0-980d-4c81373269b2} - - - {d5cb2f53-86df-4d9c-b49a-ff27c82bb756} - - - {33e076dd-aa6a-4025-b780-30ee285680c4} - - - {f3ed6348-e1f5-470b-8570-f29bdb6638c2} - - - {b0e18d25-33c7-4e1d-bc56-a1260280b139} - - - {8c95d98e-afb1-4f5c-a14d-91cb4763d782} - - - {096ebc40-6894-49fd-8b52-04322f6591c3} - - - {e6d18fba-43bb-41df-a93a-1d993a4a267d} - - - {01fadd8c-9e93-40cd-9efb-72646df020c6} - - - {a0096c24-5171-4864-b77e-4f0a34e6976c} - - - {0f60cfc0-438c-4d04-91f4-cb0847341608} - - - {c37ac131-62ee-451a-a2bf-414fd9304c75} - - - {94b7e724-6ae2-43b7-8058-102cec0b72c0} - - - {fd5b466a-a5f4-40a7-87ed-5de226fcbde7} - - - {96d3130f-cc4f-44ae-91dd-1c5869ab4c79} - - - {15863588-146b-40b1-a2c0-6791fe6992d7} - - - {829362c2-bc6d-4481-a282-dbb5b0974c6f} - - - {e1a517b9-9564-4a08-98c7-5ce47f55bfb8} - - - {d3dc3239-caff-4b38-ba23-3d33417a7427} - - - {63d64419-2c07-4426-80b7-59f108d94e42} - - - {76e3b46c-b00b-4aed-a790-e8095891ac47} - - - {b2673331-9227-431b-bf26-f3950f9fc61f} - - - {e142b148-8d5d-456c-817e-11a395464e3e} - - - {8f812468-9d50-4c08-97fa-f95595242d6d} - - - {cd792418-8a24-42ee-b501-4cd7de08d655} - - - {b83832e1-25ce-4c21-a70e-6e36d93023c2} - - - {904a78a5-f412-476c-991d-27026a35030b} - - - {50bddb50-3ba7-4b4d-98af-93e719d0560b} - - - {a06dcc19-509e-431a-9f53-eb7417fed78a} - - - {5d1454d4-bf49-4d6c-becf-edf7c9b46f88} - - - {4159f405-9a9c-4471-aae5-0e39825a123c} - - - {4f9f22b5-2357-4bae-92e9-71f5833e915c} - - - {03be9a0c-e2e3-4fd5-9cc6-322f6920bd66} - - - {fc66df77-bf94-4290-8bee-4cfe01edfbbd} - - - {ec299e57-688c-4952-a59d-0066e9d9b828} - - - {3b95f927-1b9c-4deb-9a43-ef17ff580860} - - - {466c00ee-e82a-43a0-bde7-6303df1b8b3b} - - - {5f23425b-07ba-4da3-82fb-01389f9d6823} - - - {7efca65d-2fc2-4847-932e-884eaf3b0d1e} - - - {4e680784-982e-4ee9-b999-e3980683875e} - - - {e335d202-d022-4a2e-9e21-5fd70e47ed4b} - - - {a30614c9-e68c-48bc-bae7-32bafe027f51} - - - {029b1e98-955f-44a0-b534-65a8b6617e0d} - - - {b408a7c8-8f6c-4300-b684-b6708e3a757d} - - - {b504c8a2-ad3c-484e-b3c3-9d26727f1d47} - - - {85a1adff-4f54-4722-9926-a11c12b07630} - - - {bbc2cfef-d508-4ce2-b4eb-e5ecd2820376} - - - {98131a92-9304-4820-8f5f-ac8dffd0dab3} - - - {0d9c4a2e-1df0-4ac7-973c-3747bcad49f7} - - - {a3667ce5-8a45-4d37-8a74-3d7baa58d9f3} - - - {0b6a769a-b849-4622-a163-43d3e4ba2a92} - - - {ba72b723-d707-4885-9d7e-e81dd91968c9} - - - {688c838e-5b2d-4240-9f38-2c36f58c864a} - - - {408f5db7-69fd-4fea-a77a-7a43597f7ccd} - - - {c71f79cb-3925-4614-aadb-ebc75d56b204} - - - {e5b26651-f2f5-454e-8c02-9ed742519e3f} - - - {272a6c70-71b2-4ad5-b065-efd7b0eb90ef} - - - {c23138eb-23eb-41b0-88b9-bfd6578d2eca} - - - {bd2cf493-28ea-4ebb-ba05-fc5323ebb11a} - - - {7ff538ba-2066-4e46-8967-54baf57fc1ce} - - - - - Project - - - Project - - - Project - - - Project - - - Project - - - Project - - - Project - - - Project - - - Project - - - Project - - - Project\webfs - - - Project\rtl8195a - - - Project\rtl8195a - - - Project\rtl8195a - - - Project\rtl8195a - - - Project\rtl8195a - - - Project\rtl8195a - - - Project\tcpsrv - - - Project\web - - - Project\web - - - Project\web - - - Project\web - - - Project\web - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\common\mbed\hal - - - USDK\component\common\mbed\hal - - - USDK\component\common\mbed\hal - - - USDK\component\common\mbed\hal - - - USDK\component\common\mbed\hal - - - USDK\component\common\mbed\hal - - - USDK\component\common\mbed\hal - - - USDK\component\common\mbed\hal - - - USDK\component\common\mbed\hal - - - USDK\component\common\mbed\hal - - - USDK\component\common\mbed\hal - - - USDK\component\common\mbed\hal - - - USDK\component\common\mbed\hal - - - USDK\component\common\mbed\hal - - - USDK\component\common\mbed\hal - - - USDK\component\soc\realtek\8195a\cmsis\device - - - USDK\component\soc\realtek\8195a\cmsis\device - - - USDK\component\soc\realtek\8195a\cmsis\device - - - USDK\component\soc\realtek\8195a\cmsis\device - - - USDK\component\soc\realtek\8195a\cmsis\device - - - USDK\component\soc\realtek\8195a\cmsis\device - - - USDK\component\soc\realtek\8195a\cmsis\device - - - USDK\component\soc\realtek\8195a\cmsis\device - - - USDK\component\soc\realtek\8195a\cmsis\device - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\include - - - USDK\component\common\drivers\wlan\realtek\src\osdep\freertos - - - USDK\component\common\drivers\wlan\realtek\src\osdep\freertos - - - USDK\component\common\drivers\wlan\realtek\src\osdep\freertos - - - USDK\component\common\drivers\wlan\realtek\src\osdep\freertos - - - USDK\component\common\drivers\wlan\realtek\src\osdep\freertos - - - USDK\component\common\drivers\wlan\realtek\src\osdep - - - USDK\component\common\drivers\wlan\realtek\src\osdep - - - USDK\component\common\drivers\wlan\realtek\src\osdep - - - USDK\component\common\drivers\wlan\realtek\src\osdep - - - USDK\component\common\drivers\wlan\realtek\src\osdep - - - USDK\component\common\drivers\wlan\realtek\src\osdep - - - USDK\component\soc\realtek\8195a\misc\rtl_std_lib\include - - - USDK\component\soc\realtek\8195a\misc\rtl_std_lib\include - - - USDK\component\soc\realtek\8195a\misc\rtl_std_lib\include - - - USDK\component\soc\realtek\8195a\misc\rtl_std_lib\include - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\common\mbed\hal_ext - - - USDK\component\os\freertos - - - USDK\component\os\os_dep\include - - - USDK\component\os\os_dep\include - - - USDK\component\os\os_dep\include - - - USDK\component\os\os_dep\include - - - USDK\component\soc\realtek\8195a\misc\os - - - USDK\component\soc\realtek\8195a\misc\os - - - USDK\component\soc\realtek\8195a\misc\os - - - USDK\component\soc\realtek\8195a\misc\os - - - USDK\component\soc\realtek\8195a\misc\os - - - USDK\component\common\api\wifi - - - USDK\component\common\api\wifi - - - USDK\component\common\api\wifi - - - USDK\component\common\api\wifi - - - USDK\component\common\api\wifi - - - USDK\component\common\api\wifi\rtw_wowlan - - - USDK\component\common\api - - - USDK\component\common\api - - - USDK\component\common\api - - - USDK\component\common\api - - - USDK\component\common\drivers\wlan\realtek\src\hci\lxbus - - - USDK\component\common\drivers\wlan\realtek\src\hci - - - USDK\component\common\drivers\wlan\realtek\src\hci - - - USDK\component\common\drivers\wlan\realtek\src\hci\gspi - - - USDK\component\common\drivers\wlan\realtek\src\hci\sdio - - - USDK\component\soc\realtek\8195a\misc\driver - - - USDK\component\soc\realtek\8195a\misc\driver - - - USDK\component\common\api\wifi\rtw_wpa_supplicant\src\utils\rom - - - USDK\component\common\api\wifi\rtw_wpa_supplicant\src\utils - - - USDK\component\common\api\wifi\rtw_wpa_supplicant\src\wps - - - USDK\component\soc\realtek\common\bsp - - - USDK\component\soc\realtek\common\bsp - - - USDK\component\common\drivers\wlan\realtek\include\byteorder - - - USDK\component\common\drivers\wlan\realtek\include\byteorder - - - USDK\component\common\drivers\wlan\realtek\include\byteorder - - - USDK\component\common\network\lwip\src\include\ipv4\lwip - - - USDK\component\common\network\lwip\src\include\ipv4\lwip - - - USDK\component\common\network\lwip\src\include\ipv4\lwip - - - USDK\component\common\network\lwip\src\include\ipv4\lwip - - - USDK\component\common\network\lwip\src\include\ipv4\lwip - - - USDK\component\common\network\lwip\src\include\ipv4\lwip - - - USDK\component\common\network\lwip\src\include\ipv4\lwip - - - USDK\component\common\network\lwip\src\include\ipv4\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\lwip - - - USDK\component\common\network\lwip\src\include\netif - - - USDK\component\common\network\lwip\src\include\netif - - - USDK\component\common\network\lwip\src\include\netif - - - USDK\component\common\network\lwip\src\include\netif - - - USDK\component\common\network\lwip\src\include\posix - - - USDK\component\common\network\lwip\src\include\posix\sys - - - USDK\component\common\network\lwip\port\realtek\freertos - - - USDK\component\common\network\lwip\port\realtek\freertos - - - Project\WS2812 - - - Project\WS2812 - - - Project\WS2812 - - - - - Project - - - Project - - - Project\webfs - - - Project\tcpsrv - - - Project\web - - - Project\web - - - Project\web - - - Project\web - - - Project\web - - - Project\web - - - Project\web - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\fwlib\rtl8195a - - - USDK\component\soc\realtek\8195a\cmsis\device - - - USDK\component\soc\realtek\8195a\cmsis\device - - - USDK\component\soc\realtek\8195a\cmsis\device - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\mbed\targets\hal\rtl8195a - - - USDK\component\common\drivers\wlan\realtek\src\osdep - - - USDK\component\os\freertos - - - USDK\component\os\os_dep - - - USDK\component\os\os_dep - - - USDK\component\os\os_dep - - - USDK\component\soc\realtek\8195a\misc\os - - - USDK\component\soc\realtek\8195a\misc\os - - - USDK\component\soc\realtek\8195a\misc\os - - - USDK\component\common\api\wifi - - - USDK\component\common\api\wifi - - - USDK\component\common\api\wifi - - - USDK\component\common\api\wifi - - - USDK\component\common\api\wifi - - - USDK\component\common\api\wifi\rtw_wowlan - - - USDK\component\common\api\wifi\rtw_wpa_supplicant\wpa_supplicant - - - USDK\component\common\api\wifi\rtw_wpa_supplicant\wpa_supplicant - - - USDK\component\common\api\wifi\rtw_wpa_supplicant\wpa_supplicant - - - USDK\component\common\api - - - USDK\component\common\api - - - USDK\component\common\api - - - USDK\component\common\api - - - USDK\component\common\api - - - USDK\component\common\drivers\wlan\realtek\src\hci\gspi - - - USDK\component\common\drivers\wlan\realtek\src\hci\gspi - - - USDK\component\common\drivers\wlan\realtek\src\hci\gspi - - - USDK\component\common\drivers\wlan\realtek\src\hci\sdio - - - USDK\component\common\drivers\wlan\realtek\src\hci\sdio - - - USDK\component\common\drivers\wlan\realtek\src\hci\sdio - - - USDK\component\soc\realtek\8195a\misc\driver - - - USDK\component\soc\realtek\8195a\misc\driver - - - USDK\component\soc\realtek\8195a\misc\driver - - - USDK\component\soc\realtek\8195a\misc\driver - - - USDK\component\soc\realtek\8195a\misc\driver - - - USDK\component\soc\realtek\8195a\fwlib\ram_lib - - - USDK\component\soc\realtek\8195a\fwlib\ram_lib - - - USDK\component\soc\realtek\8195a\fwlib\ram_lib - - - USDK\component\soc\realtek\8195a\fwlib\ram_lib - - - USDK\component\soc\realtek\8195a\fwlib\ram_lib - - - USDK\component\soc\realtek\8195a\fwlib\ram_lib - - - USDK\component\soc\realtek\8195a\fwlib\ram_lib - - - USDK\component\soc\realtek\8195a\fwlib\ram_lib - - - USDK\component\soc\realtek\8195a\fwlib\ram_lib - - - USDK\component\soc\realtek\8195a\fwlib\ram_lib - - - USDK\component\common\api\wifi\rtw_wpa_supplicant\src\utils - - - USDK\component\soc\realtek\8195a\misc\rtl_std_lib\lib_rtlstd - - - USDK\component\soc\realtek\8195a\misc\rtl_std_lib\lib_rtlstd - - - USDK\component\soc\realtek\8195a\misc\rtl_std_lib\lib_rtlstd - - - USDK\component\soc\realtek\8195a\misc\rtl_std_lib\lib_rtlstd - - - USDK\component\soc\realtek\8195a\misc\rtl_std_lib\lib_rtlstd - - - USDK\component\soc\realtek\8195a\misc\rtl_std_lib\lib_rtlstd - - - USDK\component\common\network\lwip\src\api - - - USDK\component\common\network\lwip\src\api - - - USDK\component\common\network\lwip\src\api - - - USDK\component\common\network\lwip\src\api - - - USDK\component\common\network\lwip\src\api - - - USDK\component\common\network\lwip\src\api - - - USDK\component\common\network\lwip\src\api - - - USDK\component\common\network\lwip\src\api - - - USDK\component\common\network\lwip\src\netif - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core - - - USDK\component\common\network\lwip\src\core\snmp - - - USDK\component\common\network\lwip\src\core\snmp - - - USDK\component\common\network\lwip\src\core\snmp - - - USDK\component\common\network\lwip\src\core\snmp - - - USDK\component\common\network\lwip\src\core\snmp - - - USDK\component\common\network\lwip\src\core\snmp - - - USDK\component\common\network\lwip\src\core\ipv4 - - - USDK\component\common\network\lwip\src\core\ipv4 - - - USDK\component\common\network\lwip\src\core\ipv4 - - - USDK\component\common\network\lwip\src\core\ipv4 - - - USDK\component\common\network\lwip\src\core\ipv4 - - - USDK\component\common\network\lwip\src\core\ipv4 - - - USDK\component\common\network\lwip\src\core\ipv4 - - - USDK\component\common\network\lwip\src\core\ipv4 - - - USDK\component\common\network\lwip\port\realtek\freertos - - - USDK\component\common\network\lwip\port\realtek\freertos - - - Project\WS2812 - - - Project\WS2812 - - - Project\WS2812 - - - \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/Makefile b/Firmware/RTLGDB/USDK/Makefile deleted file mode 100644 index 108d413..0000000 --- a/Firmware/RTLGDB/USDK/Makefile +++ /dev/null @@ -1,60 +0,0 @@ -include userset.mk - -all: ram_all -mp: ram_all_mp - -.PHONY: ram_all -ram_all: - @$(MAKE) -f $(SDK_PATH)sdkbuild.mk - @$(MAKE) -f $(SDK_PATH)flasher.mk genbin1 genbin23 - -.PHONY: ram_all_mp -ram_all_mp: - @$(MAKE) -f $(SDK_PATH)sdkbuild.mk mp - @$(MAKE) -f $(SDK_PATH)flasher.mk mp - -.PHONY: clean clean_all -clean: - @$(MAKE) -f $(SDK_PATH)sdkbuild.mk clean - -clean_all: - @$(MAKE) -f $(SDK_PATH)sdkbuild.mk clean_all - -.PHONY: flashburn runram reset test readfullflash flashwebfs flashboot -flashboot: - @$(MAKE) -f $(SDK_PATH)flasher.mk flashboot - -flashburn: - #JLinkGDB-WrFlash.bat - @$(MAKE) -f $(SDK_PATH)flasher.mk flashburn - -flash_OTA: - @$(MAKE) -f $(SDK_PATH)flasher.mk flash_OTA - -webfs: - @$(MAKE) -f webfs.mk - -flashwebfs: - @$(MAKE) -f webfs.mk - @$(MAKE) -f $(SDK_PATH)flasher.mk flashwebfs - #JLinkGDB-WrWebFs.bat - -runram: - #JLink-RunRAM.bat - @$(MAKE) --f $(SDK_PATH)flasher.mk runram - -runsdram: - #JLink-RunRAM.bat - @$(MAKE) --f $(SDK_PATH)flasher.mk runsdram - - reset: - #JLink-Reset.bat - @$(MAKE) -f $(SDK_PATH)flasher.mk reset - -test: - JLink-RTL00ConsoleROM.bat - #@make -f flasher.mk test - -readfullflash: - #JLink-RdFullFlash.bat - @$(MAKE) -f $(SDK_PATH)flasher.mk readfullflash \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_cloud.c b/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_cloud.c deleted file mode 100644 index 61d6a3b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_cloud.c +++ /dev/null @@ -1,175 +0,0 @@ -#include -#include "log_service.h" -#include "cmsis_os.h" -#include - -#if CONFIG_JOYLINK -#if 1 -void fATCJ(void *arg) -{ - extern void joylink_erase(void); - printf("\r\n[ATCJ] Erase wifi and joylink info."); - if(arg){ - printf("\r\n[ATCJ]Usage : ATCJ"); - return; - } - joylink_erase(); -} -#else -void fATCJ(void *arg) -{ - extern void cmd_jd_smart(int argc, char **argv); - int argc; - char *argv[MAX_ARGC] = {0}; - printf("[ATCJ]:simple config command for jdsmart\n\r"); - if(!arg){ - printf("[ATCJ]Usage: ATCJ=simple_config\n\r"); - return; - } - argv[0] = "simple_config"; - if((argc = parse_param(arg, argv)) > 1){ - cmd_jd_smart(argc, argv); - } - else - printf("[ATCJ]Usage: ATCJ=simple_config\n\r"); -} -#endif -#endif - - -#if CONFIG_GAGENT -void fATCG(void *arg) -{ - example_gagent(); -} -void fATCE(void *arg) -{//Erase gagent config flash - extern int GAgent_DevEraseConfigData(); - GAgent_DevEraseConfigData(); -} -#endif - -#if CONFIG_QQ_LINK -void fATCQ(void *arg) -{ - int argc; - unsigned char *argv[MAX_ARGC] = {0}; - extern void device_write_sn_license(int argc, unsigned char **argv); - extern void device_erase_all(int argc, unsigned char **argv); - - if(!arg) - { - printf("\r\n[ATCQ] Write sn/license into flash or Erase all info\r\n"); - printf("\r\n[ATCQ] Usage: ATCQ=erase"); - printf("\r\n[ATCQ] Usage: ATCQ=sn,xxxxxxxx\r\n ATCQ=licensepart1,xxxxxxxx\r\n ATCQ=licensepart2,xxxxxxxx"); - return; - } - argv[0] = "sn&&license&&erase"; - argc = parse_param(arg, argv); - if(argc == 3) // Write sn&&license - { - device_write_sn_license(argc, argv); - } - else if(argc == 2) // Erase all info : ATCQ=erase - { - device_erase_all(argc, argv); - } - else - { - printf("\r\n[ATCQ] Usage: ATCQ=erase"); - printf("\r\n[ATCQ]Usage: ATCQ=sn,xxxxxxxx\r\n ATCQ=licensepart1,xxxxxxxx\r\n ATCQ=licensepart2,xxxxxxxx"); - } -} -#endif - -#if CONFIG_AIRKISS_CLOUD -void fATCW(void *arg) -{ - int argc; - unsigned char *argv[MAX_ARGC] = {0}; - extern void airkiss_cloud_write_device_info(int argc, unsigned char **argv); - extern void airkiss_cloud_erase_ap_profile(int argc, unsigned char **argv); - - if(!arg) goto USAGE; - - argv[0] = "type/id/licese/erase"; - argc = parse_param(arg, argv); - if(argc == 3) // Write typw/id/license - { - airkiss_cloud_write_device_info(argc, argv); - return; - } - else if(argc == 2) // Erase wifi profile : ATCW=erase - { - airkiss_cloud_erase_ap_profile(argc, argv); - return; - } - else - goto USAGE; - -USAGE: - printf("\r\n[ATCW] Write ORDERLY device's type/id/license into flash or Erase wifi profile"); - printf("\r\n[ATCW] Usage: ATCW=type,xxxxxxxx"); - printf("\r\n[ATCW] Usage: ATCW=id,xxxxxxxx"); - printf("\r\n[ATCW] Usage: ATCW=licensepart1,xxxxxxxx\t(80-Byte long)"); - printf("\r\n[ATCW] Usage: ATCW=licensepart2,xxxxxxxx\t(80-Byte long)"); - printf("\r\n[ATCW] Usage: ATCW=erase"); - return; -} -#endif - -#if CONFIG_ALINK -extern void example_alink(void); -extern int alink_erase_wifi_config(); -extern void alink_reset_to_factory(void *arg); - -void fATCA(void *arg) -{ - example_alink(); -} - -void fATCZ(void *arg) -{ - //Erase alink config flash - alink_erase_wifi_config(); -} - -void fATCT(void *arg) -{ - alink_reset_to_factory(NULL); -} -#endif - -void fATCx(void *arg) -{ -} - -log_item_t at_cloud_items[ ] = { -#if CONFIG_JOYLINK - {"ATCJ", fATCJ,}, -#endif -#if CONFIG_GAGENT - {"ATCG", fATCG,}, - {"ATCE", fATCE,}, -#endif -#if CONFIG_QQ_LINK - {"ATCQ", fATCQ,}, -#endif -#if CONFIG_AIRKISS_CLOUD - {"ATCW", fATCW}, -#endif -#if CONFIG_ALINK - {"ATCA", fATCA,}, - {"ATCZ", fATCZ,}, - {"ATCT", fATCT,}, -#endif - {"ATC?", fATCx,}, -}; -void at_cloud_init(void) -{ - log_service_add_table(at_cloud_items, sizeof(at_cloud_items)/sizeof(at_cloud_items[0])); -} - -#if SUPPORT_LOG_SERVICE -log_module_init(at_cloud_init); -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_ethernet.c b/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_ethernet.c deleted file mode 100644 index d43c5fa..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_ethernet.c +++ /dev/null @@ -1,91 +0,0 @@ -#include -#include "log_service.h" -#include "platform_opts.h" -#include -#include "cmsis_os.h" -#include -#include -#include - - -#define _AT_DHCP_ETHERNET_MII_ "ATE0" -#define _AT_SET_DEFAULT_INTERFACE "ATE1" - -#if CONFIG_ETHERNET -extern int dhcp_ethernet_mii; -extern int ethernet_if_default; -extern struct netif xnetif[NET_IF_NUM]; - -void fATE0(void *arg) -{ - int argc; - char *argv[MAX_ARGC] = {0}; - printf("[ATE0]:DHCP configure for ethernet\n\r"); - if(!arg){ - printf("[ATE0]Usage to disable DHCP: ATE0=0\n"); - printf("[ATE0]Usage to enable DHCP: ATE0=1\n"); - return; - } - if('0' == *(char *)arg) - { - dhcp_ethernet_mii = 0; - } - - else if('1' == *(char *)arg) - { - dhcp_ethernet_mii = 1; - LwIP_DHCP(NET_IF_NUM - 1, DHCP_START); - } - - else - { - printf("[ATE0]Usage to disable DHCP: ATE0=0\n"); - printf("[ATE0]Usage to enable DHCP: ATE0=1\n"); - } -} - -void fATE1(void *arg) -{ - int argc; - char *argv[MAX_ARGC] = {0}; - printf("[ATE1]:Set/check the default interface\n\r"); - if(!arg){ - if(ethernet_if_default) - printf("Ethernet is the default interface\n"); - else - printf("wlan is the default interface\n"); - return; - } - if('0' == *(char *)arg) - { - ethernet_if_default = 0; - printf("wlan is set to the default interface\n"); - } - - else if('1' == *(char *)arg) - { - ethernet_if_default = 1; - printf("ethernet is set to the default interface\n"); - } - - else - { - printf("[ATE0]Usage to check the default interface: ATE1\n"); - printf("[ATE0]Usage to set ethernet as default interface: ATE1=1\n"); - printf("[ATE0]Usage to set wlan as default interface: ATE1=0\n"); - } -} - -log_item_t at_ethernet_items[ ] = { - {"ATE0", fATE0,}, - {"ATE1", fATE1,} -}; - -void at_ethernet_init(void) -{ - log_service_add_table(at_ethernet_items, sizeof(at_ethernet_items)/sizeof(at_ethernet_items[0])); -} - -log_module_init(at_ethernet_init); - -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_lwip.c b/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_lwip.c deleted file mode 100644 index a2b29c8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_lwip.c +++ /dev/null @@ -1,2263 +0,0 @@ -#include -#include - -#ifdef CONFIG_AT_LWIP - -#include -#include "log_service.h" -#include "atcmd_wifi.h" -#include "atcmd_lwip.h" -#include "osdep_service.h" -#include "osdep_api.h" - -#include "tcpip.h" -#include "lwip/tcp_impl.h" - - - -#ifndef ATCMD_VER -#define ATVER_1 1 -#define ATVER_2 2 -#define ATCMD_VER ATVER_2 -#if CONFIG_EXAMPLE_UART_ATCMD -#define ATCMD_VER ATVER_2 -#else -#define ATCMD_VER ATVER_1 -#endif -#endif - -//#define MAX_BUFFER 256 -#define MAX_BUFFER (LOG_SERVICE_BUFLEN) -#define ATCP_STACK_SIZE 512//2048 - -extern char log_buf[LOG_SERVICE_BUFLEN]; -extern struct netif xnetif[NET_IF_NUM]; - -static unsigned char tx_buffer[MAX_BUFFER]; -static unsigned char rx_buffer[MAX_BUFFER]; - -#if ATCMD_VER == ATVER_2 -node node_pool[NUM_NS]; - -node* mainlist; - -static int atcmd_lwip_auto_recv = FALSE; -volatile int atcmd_lwip_tt_mode = FALSE; //transparent transmission mode -xTaskHandle atcmd_lwip_tt_task = NULL; -xSemaphoreHandle atcmd_lwip_tt_sema = NULL; -volatile int atcmd_lwip_tt_datasize = 0; -volatile int atcmd_lwip_tt_lasttickcnt = 0; - -#ifdef ERRNO -_WEAK int errno = 0; //LWIP errno -#endif - -static void atcmd_lwip_receive_task(void *param); -int atcmd_lwip_start_autorecv_task(void); -int atcmd_lwip_is_autorecv_mode(void); -void atcmd_lwip_set_autorecv_mode(int enable); -int atcmd_lwip_start_tt_task(void); -int atcmd_lwip_is_tt_mode(void); -void atcmd_lwip_set_tt_mode(int enable); -int atcmd_lwip_write_info_to_flash(struct atcmd_lwip_conn_info *cur_conn, int enable); -#else //#if ATCMD_VER == ATVER_2 - -xTaskHandle server_task = NULL; -xTaskHandle client_task = NULL; - -static int mode = 0; -static int local_port; -static int remote_port; -static char remote_addr[16]; -static int packet_size; - -static int sockfd, newsockfd; -static socklen_t client; -static struct sockaddr_in serv_addr, cli_addr; -static int opt = 1; - -static int type; //TCP SERVER:1, TCP CLIENT: 2, UDP SERVER:3, UDP CLIENT: 4 - -static void init_transport_struct(void) -{ - mode = 0; - local_port = 0; - remote_port = 0; - sockfd = -1; - newsockfd = -1; - packet_size = 0; - _memset(remote_addr, 0, sizeof(remote_addr)); - _memset(&client, 0, sizeof(client)); - _memset(&serv_addr, 0, sizeof(serv_addr)); - -} - -void socket_close(void) -{ - close(sockfd); - if(server_task != NULL) - { - vTaskDelete(server_task); - server_task = NULL; - } - if(client_task != NULL) - { - vTaskDelete(client_task); - client_task = NULL; - } - type = 0; - init_transport_struct(); -} -#endif //#if ATCMD_VER == ATVER_2 - -static void server_start(void *param) -{ - int s_mode; - int s_sockfd, s_newsockfd; - socklen_t s_client; - struct sockaddr_in s_serv_addr, s_cli_addr; - int s_local_port; - int error_no = 0; - int s_opt = 1; -#if ATCMD_VER == ATVER_2 - node* ServerNodeUsed = (node*)param; - if(ServerNodeUsed){ - s_mode = ServerNodeUsed->protocol; - s_local_port = ServerNodeUsed->port; - } -// else -//#endif -#else - { - s_mode = mode; - s_local_port = local_port; - s_opt = opt; - } -#endif - - if(s_mode == NODE_MODE_UDP) - s_sockfd = socket(AF_INET,SOCK_DGRAM,0); - else - s_sockfd = socket(AF_INET, SOCK_STREAM, 0); - - if (s_sockfd == INVALID_SOCKET_ID) { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR,"ERROR opening socket"); - error_no = 5; - goto err_exit; - } - - if((setsockopt(s_sockfd, SOL_SOCKET, SO_REUSEADDR, (const char *)&s_opt, sizeof(s_opt))) < 0){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR,"ERROR on setting socket option"); - error_no = 6; - goto err_exit; - } - - memset((char *)&s_serv_addr, 0, sizeof(s_serv_addr)); - s_serv_addr.sin_family = AF_INET; - s_serv_addr.sin_addr.s_addr = INADDR_ANY; - s_serv_addr.sin_port = htons(s_local_port); - - if (bind(s_sockfd, (struct sockaddr *)&s_serv_addr,sizeof(s_serv_addr)) < 0) { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR,"ERROR on binding"); - error_no = 7; - goto err_exit; - } - -#if ATCMD_VER == ATVER_2 - if(ServerNodeUsed != NULL) { - uint8_t *ip = (uint8_t *)LwIP_GetIP(&xnetif[0]); - ServerNodeUsed->sockfd = s_sockfd; - ServerNodeUsed->addr = ntohl(*((u32_t *)ip)); - } -// else -//#endif -#else - { - sockfd = s_sockfd; - memcpy(&serv_addr, &s_serv_addr, sizeof(s_serv_addr)); - } -#endif - - if (s_mode == NODE_MODE_TCP){//TCP MODE - if(listen(s_sockfd , 5) < 0){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR,"ERROR on listening"); - error_no = 8; - goto err_exit; - } -#if ATCMD_VER == ATVER_2 - if(param != NULL) { - if(hang_node(ServerNodeUsed) < 0) - { - error_no = 9; - goto err_exit; - }else{ - #if CONFIG_LOG_SERVICE_LOCK - log_service_lock(); - #endif - at_printf("\r\n[ATPS] OK" - "\r\n[ATPS] con_id=%d", - ServerNodeUsed->con_id); - at_printf(STR_END_OF_ATCMD_RET); - #if CONFIG_LOG_SERVICE_LOCK - log_service_unlock(); - #endif - } - } -#endif - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR,"The TCP SERVER START OK!"); - s_client = sizeof(s_cli_addr); - while(1){ - if((s_newsockfd = accept(s_sockfd,(struct sockaddr *) &s_cli_addr,&s_client)) < 0){ -#if ATCMD_VER == ATVER_2 - if(param != NULL) { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPS] ERROR:ERROR on accept"); - } -// else -//#endif -#else - { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "ERROR on accept"); - } -#endif - error_no = 10; - goto err_exit; - } - else{ -#if ATCMD_VER == ATVER_2 - if(param != NULL) { - node* seednode = create_node(s_mode, NODE_ROLE_SEED); - if(seednode == NULL){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPS]create node failed!"); - error_no = 11; - goto err_exit; - } - seednode->sockfd = s_newsockfd; - seednode->port = ntohs(s_cli_addr.sin_port); - seednode->addr = ntohl(s_cli_addr.sin_addr.s_addr); - if(hang_seednode(ServerNodeUsed,seednode) < 0){ - delete_node(seednode); - seednode = NULL; - } - else{ - #if CONFIG_LOG_SERVICE_LOCK - log_service_lock(); - #endif - at_printf("\r\n[ATPS] A client connected to server[%d]\r\n" - "con_id:%d," - "seed," - "tcp," - "address:%s," - "port:%d," - "socket:%d", - ServerNodeUsed->con_id, - seednode->con_id, - inet_ntoa(s_cli_addr.sin_addr.s_addr), - ntohs(s_cli_addr.sin_port), - seednode->sockfd - ); - at_printf(STR_END_OF_ATCMD_RET); - #if CONFIG_LOG_SERVICE_LOCK - log_service_unlock(); - #endif - } - } -// else -//#endif -#else - { - newsockfd = s_newsockfd; - memcpy(&cli_addr, &s_cli_addr, sizeof(cli_addr)); - client = s_client; - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "A client connected to this server :\r\n[PORT]: %d\r\n[IP]:%s", - ntohs(cli_addr.sin_port), inet_ntoa(cli_addr.sin_addr.s_addr)); - } -#endif - } - } - } - else{ -#if ATCMD_VER == ATVER_2 - if(ServerNodeUsed != NULL) { - if(hang_node(ServerNodeUsed) < 0){ - error_no = 12; - goto err_exit; - } - #if CONFIG_LOG_SERVICE_LOCK - log_service_lock(); - #endif - at_printf("\r\n[ATPS] OK" - "\r\n[ATPS] con_id=%d", - ServerNodeUsed->con_id); - at_printf(STR_END_OF_ATCMD_RET); - #if CONFIG_LOG_SERVICE_LOCK - log_service_unlock(); - #endif - //task will exit itself - ServerNodeUsed->handletask = NULL; - } -#endif - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS,"The UDP SERVER START OK!"); - } - goto exit; -err_exit: -#if ATCMD_VER == ATVER_2 - if(ServerNodeUsed){ - //task will exit itself if getting here - ServerNodeUsed->handletask = NULL; - delete_node(ServerNodeUsed); - } - //else -//#endif -#else - { - socket_close(); - } -#endif - #if CONFIG_LOG_SERVICE_LOCK - log_service_lock(); - #endif - at_printf("\r\n[ATPS] ERROR:%d", error_no); - at_printf(STR_END_OF_ATCMD_RET); - #if CONFIG_LOG_SERVICE_LOCK - log_service_unlock(); - #endif -exit: - return; -} - -static void client_start(void *param) -{ - int c_mode; - int c_remote_port; - char c_remote_addr[16]; - int c_sockfd; - struct sockaddr_in c_serv_addr; - int error_no = 0; -#if ATCMD_VER == ATVER_2 - struct in_addr c_addr; - node * ClientNodeUsed = (node *)param; - if(ClientNodeUsed){ - c_mode = ClientNodeUsed->protocol; - c_remote_port = ClientNodeUsed->port; - c_addr.s_addr = htonl(ClientNodeUsed->addr); - if(inet_ntoa_r(c_addr, c_remote_addr, sizeof(c_remote_addr))==NULL){ - error_no = 6; - goto err_exit; - } - } - //else -//#endif -#else - { - c_mode = mode; - c_remote_port = remote_port; - memcpy(c_remote_addr, remote_addr, 16*sizeof(char)); - } -#endif - if(c_mode == NODE_MODE_UDP) - c_sockfd = socket(AF_INET,SOCK_DGRAM,0); - else - c_sockfd = socket(AF_INET, SOCK_STREAM, 0); - - if (c_sockfd == INVALID_SOCKET_ID) { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR,"Failed to create sock_fd!"); - error_no = 7; - goto err_exit; - } - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS,"OK to create sock_fd!"); - memset(&c_serv_addr, 0, sizeof(c_serv_addr)); - c_serv_addr.sin_family = AF_INET; - c_serv_addr.sin_addr.s_addr = inet_addr(c_remote_addr); - c_serv_addr.sin_port = htons(c_remote_port); - -#if ATCMD_VER == ATVER_2 - if(ClientNodeUsed){ - ClientNodeUsed->sockfd = c_sockfd; - } - //else -//#endif -#else - { - sockfd = c_sockfd; - memcpy(&serv_addr, &c_serv_addr, sizeof(c_serv_addr)); - } -#endif - if (c_mode == NODE_MODE_TCP){//TCP MODE - if(connect(c_sockfd, (struct sockaddr *)&c_serv_addr, sizeof(c_serv_addr)) == 0){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS,"Connect to Server successful!"); -#if ATCMD_VER == ATVER_2 - if(ClientNodeUsed != NULL) { - if(hang_node(ClientNodeUsed) < 0){ - error_no = 8; - goto err_exit; - } - #if CONFIG_LOG_SERVICE_LOCK - log_service_lock(); - #endif - at_printf("\r\n[ATPC] OK\r\n[ATPC] con_id=%d",ClientNodeUsed->con_id); - at_printf(STR_END_OF_ATCMD_RET); - #if CONFIG_LOG_SERVICE_LOCK - log_service_unlock(); - #endif - } -#endif - }else{ -#if ATCMD_VER == ATVER_2 - if(ClientNodeUsed != NULL) { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR,"[ATPC] ERROR:Connect to Server failed!"); - } - //else -//#endif -#else - { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR,"Connect to Server failed!"); - } -#endif - error_no = 9; - goto err_exit; - } - } - else{ -#if ATCMD_VER == ATVER_2 - if(ClientNodeUsed != NULL) { - if(ClientNodeUsed->local_port){ - struct sockaddr_in addr; - memset(&addr, 0, sizeof(addr)); - addr.sin_family=AF_INET; - addr.sin_port=htons(ClientNodeUsed->local_port); - addr.sin_addr.s_addr=htonl(INADDR_ANY) ; - if (bind(ClientNodeUsed->sockfd, (struct sockaddr *)&addr, sizeof(addr))<0) { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR,"bind sock error!"); - error_no = 12; - goto err_exit; - } - } - if(hang_node(ClientNodeUsed) < 0){ - error_no = 10; - goto err_exit; - } - #if CONFIG_LOG_SERVICE_LOCK - log_service_lock(); - #endif - at_printf("\r\n[ATPC] OK\r\n[ATPC] con_id=%d",ClientNodeUsed->con_id); - at_printf(STR_END_OF_ATCMD_RET); - #if CONFIG_LOG_SERVICE_LOCK - log_service_unlock(); - #endif - } -#endif - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS,"UDP client starts successful!"); - } - goto exit; -err_exit: -#if ATCMD_VER == ATVER_2 - if(ClientNodeUsed) - { - delete_node(ClientNodeUsed); - } - //else -//#endif -#else - { - socket_close(); - } -#endif - #if CONFIG_LOG_SERVICE_LOCK - log_service_lock(); - #endif - at_printf("\r\n[ATPC] ERROR:%d", error_no); - at_printf(STR_END_OF_ATCMD_RET); - #if CONFIG_LOG_SERVICE_LOCK - log_service_unlock(); - #endif -exit: - return; -} - -static void client_start_task(void *param) -{ - vTaskDelay(1000); -#if ATCMD_VER == ATVER_2 - if(param){ - client_start(param); - vTaskDelete(NULL); - return; - } -//#endif -#else - if(remote_addr == NULL){ - printf("[ERROR] Please using ATP3 to input an valid remote IP address!\n"); - vTaskDelete(client_task); - client_task = NULL; - } - else if(remote_port == 0){ - printf("[ERROR] Please using ATP4 to input an valid remote PORT!\n"); - vTaskDelete(client_task); - client_task = NULL; - } - else{ - printf("\tStart Client\n\t[IP]: %s\n\t[PORT]:%d\n", remote_addr, remote_port); - client_start(param); - } -#endif - vTaskDelete(NULL); -} - -static void server_start_task(void *param) -{ - vTaskDelay(1000); -#if ATCMD_VER == ATVER_2 - if(param != NULL){ - server_start(param); - vTaskDelete(NULL); - return; - } -//#endif -#else - if(local_port == 0){ - printf("[ERROR] Please using ATP2 to input an valid local PORT!\n"); - vTaskDelete(server_task); - server_task = NULL; - } - else{ - uint8_t *ip = (uint8_t *)LwIP_GetIP(&xnetif[0]); - printf("Start Server\n\t[IP]: %d.%d.%d.%d\n\t[PORT]:%d\n", ip[0], ip[1], ip[2], ip[3], local_port); - server_start(param); - } -#endif - vTaskDelete(NULL); -} - -//AT Command function -#if ATCMD_VER == ATVER_1 -void fATP1(void *arg){ - if(!arg){ - printf("[ATP1]Usage: ATP1=MODE\n\r"); - goto exit; - } - mode = atoi((char*)arg); - printf("[ATP1]: _AT_TRANSPORT_MODE_ [%d]\n\r", mode); -exit: - return; -} - -void fATP2(void *arg){ - if(!arg){ - printf("[ATP2]Usage: ATP2=LOCAL_PORT\n\r"); - goto exit; - } - local_port = atoi((char*)arg); - printf("[ATP2]: _AT_TRANSPORT_LOCAL_PORT_ [%d]\n\r", local_port); - -exit: - return; -} - -void fATP3(void *arg){ - if(!arg){ - printf("[ATP3]Usage: ATP3=REMOTE_IP\n\r"); - goto exit; - } - strcpy((char*)remote_addr, (char*)arg); - printf("[ATP3]: _AT_TRANSPORT_REMOTE_IP_ [%s]\n\r", remote_addr); - -exit: - return; -} - -void fATP4(void *arg){ - if(!arg){ - printf("[ATP4]Usage: ATP4=REMOTE_PORT\n\r"); - goto exit; - } - remote_port = atoi((char*)arg); - printf("[ATP4]: _AT_TRANSPORT_REMOTE_PORT_ [%d]\n\r", remote_port); - -exit: - return; -} - -void fATP5(void *arg){ - int server_status = 0; - if(!arg){ - printf("[ATP5]Usage: ATP5=0/1(0:server disable; 1: server enable)\n\r"); - goto exit; - } - server_status = atoi((char*)arg); - printf("[ATP5]: _AT_TRANSPORT_START_SERVER_ [%d]\n\r", server_status); - if(mode == 0){ - if(server_status == 0){ - socket_close(); - type = 0; - } - else if(server_status == 1){ - if(server_task == NULL) - { - if(xTaskCreate(server_start_task, ((const char*)"server_start_task"), ATCP_STACK_SIZE, NULL, ATCMD_LWIP_TASK_PRIORITY, &server_task) != pdPASS) - printf("[ATP5]ERROR: Create tcp server task failed.\r\n"); - } - type = 1; - } - else - printf("[ATP5]ERROR: Just support two mode : 0 or 1\n\r"); - } - else if(mode == 1){ - if(server_status == 0){ - socket_close(); - type = 0; - } - else if(server_status == 1){ - if(server_task == NULL) - { - if(xTaskCreate(server_start_task, ((const char*)"server_start_task"), ATCP_STACK_SIZE, NULL, ATCMD_LWIP_TASK_PRIORITY, &server_task) != pdPASS) - printf("[ATP5]ERROR: Create udp server task failed.\n"); - } - type = 3; - } - else - printf("[ATP5]ERROR: Just support two mode : 0 or 1\n\r"); - } - else - printf("[ATP5]Error: mode(TCP/UDP) can't be empty\n\r"); - -exit: - return; -} - -void fATP6(void *arg){ - int client_status = 0; - if(!arg){ - printf("[ATP6]Usage: ATP6=0/1(0:Client disable; 1: Client enable)\n\r"); - goto exit; - } - client_status = atoi((char*)arg); - printf("[ATP6]: _AT_TRANSPORT_START_CLIENT_ [%d]\n\r", client_status); - if(mode == 0){ - if(client_status == 0){ - socket_close(); - type = 0; - } - else if(client_status == 1){ - printf("[ATP6]TCP Client mode will start\n"); - if(client_task == NULL) - { - if(xTaskCreate(client_start_task, ((const char*)"client_start_task"), ATCP_STACK_SIZE, NULL, ATCMD_LWIP_TASK_PRIORITY, &client_task) != pdPASS) - printf("[ATP6]ERROR: Create tcp client task failed.\n"); - } - type = 2; - } - else - printf("[ATP6]ERROR: Just support two mode : 0 or 1\n\r"); - } - else if(mode == 1){ - if(client_status == 0){ - socket_close(); - type = 0; - } - else if(client_status == 1){ - if(client_task == NULL) - { - if(xTaskCreate(client_start_task, ((const char*)"client_start_task"), ATCP_STACK_SIZE, NULL, ATCMD_LWIP_TASK_PRIORITY, &client_task) != pdPASS) - printf("[ATP6]ERROR: Create udp client task failed.\n"); - } - type = 4; - } - else - printf("[ATP6]ERROR: Just support two mode : 0 or 1\n\r"); - } - else - printf("[ATP6]Error: mode(TCP/UDP) can't be empty\n\r"); - -exit: - return; -} - -void fATPZ(void *arg){ - uint8_t *ip; - printf("\nThe current Transport settings:\n"); - printf("==============================\n"); - if(mode == 0) - printf(" Protocol: TCP\n"); - else if(mode == 1) - printf(" Protocol: UDP\n"); - - ip = (uint8_t *)LwIP_GetIP(&xnetif[0]); - printf(" LOCAL_IP => %d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]); - printf(" LOCAL_PORT => %d\n", local_port); - printf(" REMOTE_IP => %s\n", remote_addr); - printf(" REMOTE_PORT => %d\n", remote_port); - -// printf("\n\r"); -} - -void fATR0(void *arg){ - if(packet_size <= 0){ - packet_size = MAX_BUFFER; - printf("[ATR0]Notice: Didn't set the value of packet_size, will using the MAX_BUFFER: %d\n", MAX_BUFFER); - } - memset(rx_buffer, 0, MAX_BUFFER); - if(type == 1){//tcp server - if((read(newsockfd,rx_buffer,MAX_BUFFER)) > 0) - printf("[ATR0]Receive the data:%s\n with packet_size: %d\n", rx_buffer, packet_size); - else - printf("[ATR0]ERROR: Failed to receive data!\n"); - close(newsockfd); - newsockfd = -1; - } - else{ - if((read(sockfd,rx_buffer,MAX_BUFFER)) > 0) - printf("[ATR0]Receive the data:%s\n with packet_size: %d\n", rx_buffer, packet_size); - else - printf("[ATR0]ERROR: Failed to receive data!\n"); - } -} - -void fATR1(void *arg){ - int size; - if(!arg){ - printf("[ATR1]Usage: ATR1=packet_size(cannot exceed %d)\n\r", MAX_BUFFER); - goto exit; - } - size = atoi((char*)arg); - printf("[ATR1]: _AT_TRANSPORT_RECEIVE_PACKET_SIZE_ [%d]\n\r", size); - if(size < 1) - printf("[ATR1]Error: packet size need be larger than 0!\n\r"); - else if(size > MAX_BUFFER) - printf("[ATR1]Error: packet size exceeds the MAX_BUFFER value: %d!\n\r", MAX_BUFFER); - else - packet_size = size; -exit: - return; -} - - -void fATRA(void *arg){ - if(!arg){ - printf("[ATRA]Usage: ATRA=[data](Data size cannot exceed the MAX_BUFFER SIZE: %d)\n\r", MAX_BUFFER); - return; - } - - if(packet_size <= 0){ - packet_size = MAX_BUFFER; - printf("[ATRA]Notice: Didn't set the value of packet_size, will using the MAX_BUFFER SIZE: %d\n", MAX_BUFFER); - } - - - int argc; - char *argv[MAX_ARGC] = {0}; - - if((argc = parse_param(arg, argv)) != 2){ - printf("[ATRA]Usage: ATRA=[data](Data size cannot exceed the MAX_BUFFER SIZE: %d)\n\r", MAX_BUFFER); - goto exit; - } - else - printf("[ATRA]: _AT_TRANSPORT_WRITE_DATA_ [%s]\n\r", argv[1]); - memset(tx_buffer, 0, MAX_BUFFER); - memcpy(tx_buffer, argv[1], strlen(argv[1])); - - if(type == 1){//tcp server - if((write(newsockfd,tx_buffer,strlen(tx_buffer))) > 0) - printf("[ATRA] Sending data:%s\n with packet_size:%d\n", tx_buffer, packet_size); - else - printf("[ATRA]ERROR: Failed to send data\n"); - close(newsockfd); - newsockfd = -1; - } - else if(type == 4){//udp client - int ret = 0; - ret = sendto(sockfd, tx_buffer, strlen(tx_buffer), 0, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); - - printf("The value of ret is %d\n", ret); - } - else if(type == 3) - printf("The UDP Server mode not support Sending data service!\n"); - else{ - if((write(sockfd,tx_buffer, strlen(tx_buffer))) > 0) - printf("[ATRA] Sending data:%s\n with packet_size:%d\n", tx_buffer, packet_size); - else - printf("[ATRA]ERROR: Failed to send data\n"); - } -exit: - return; -} - -void fATRB(void *arg){ - int size; - if(!arg){ - printf("[ATRB]Usage: ATRB=packet_size(cannot exceed %d)\n\r", MAX_BUFFER); - goto exit; - } - size = atoi((char*)arg); - printf("[ATRB]: _AT_TRANSPORT_WRITE_PACKET_SIZE_ [%d]\n\r", size); - if(size < 1) - printf("[ATRB]Error: packet size need be larger than 0!\n\r"); - else if(size > MAX_BUFFER) - printf("[ATRB]Error: packet size exceeds the MAX_BUFFER value: %d!\n\r", MAX_BUFFER); - else - packet_size = size; -exit: - return; -} -#endif -#if ATCMD_VER == ATVER_2 -void fATP0(void *arg){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "[ATP0]: _AT_TRANSPORT_ERRNO"); -#ifdef ERRNO - at_printf("\r\n[ATP0] OK:%d", errno); -#else - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR,"errno isn't enabled"); - at_printf("\r\n[ATP0] ERROR"); -#endif -} - -void fATPC(void *arg){ - - int argc; - char* argv[MAX_ARGC] = {0}; - node* clientnode = NULL; - int mode = 0; - int remote_port; - int local_port = 0; - //char remote_addr[DNS_MAX_NAME_LENGTH]; - struct in_addr addr; - int error_no = 0; -#if LWIP_DNS - struct hostent *server_host; -#endif - - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "[ATPC]: _AT_TRANSPORT_START_CLIENT"); - - if(atcmd_lwip_is_tt_mode() && mainlist->next){ - error_no = 13; - goto err_exit; - } - - argc = parse_param(arg, argv); - if(argc < 4){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPC] Usage: ATPC=,,,[]"); - error_no = 1; - goto err_exit; - } - - mode = atoi((char*)argv[1]);//tcp or udp - //strcpy((char*)remote_addr, (char*)argv[2]); - - remote_port = atoi((char*)argv[3]); - if (inet_aton(argv[2], &addr) == 0) - { -#if LWIP_DNS - server_host = gethostbyname(argv[2]); - if (server_host){ - memcpy(&addr, server_host->h_addr, 4); - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "[ATPC] Found name '%s' = %s", - argv[2], - inet_ntoa(addr) - ); - } - else -#endif - { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPC] ERROR: Host '%s' not found.", argv[2]); - error_no = 2; - goto err_exit; - } - } - - if(remote_port < 0 || remote_port > 65535) { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPC] ERROR: remote port invalid"); - error_no = 3; - goto err_exit; - } - - if(argv[4]){ - local_port = atoi((char*)argv[4]); - if(local_port < 0 || local_port > 65535) { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPC] ERROR: local port invalid"); - error_no = 11; - goto err_exit; - } - } - - clientnode = create_node(mode, NODE_ROLE_CLIENT); - if(clientnode == NULL){ - error_no = 4; - goto err_exit; - } - clientnode->port = remote_port; - clientnode->addr = ntohl(addr.s_addr); - clientnode->local_port = local_port; - - if(xTaskCreate(client_start_task, ((const char*)"client_start_task"), ATCP_STACK_SIZE, clientnode, ATCMD_LWIP_TASK_PRIORITY, NULL) != pdPASS) - { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPC] ERROR: Create tcp/udp client task failed."); - error_no = 5; - goto err_exit; - } - - goto exit; -err_exit: - if(clientnode) - delete_node(clientnode); - at_printf("\r\n[ATPC] ERROR:%d", error_no); -exit: - return; -} - - -void fATPS(void *arg){ - int argc; - char *argv[MAX_ARGC] = {0}; - node* servernode = NULL; - int mode; - int local_port; - int error_no = 0; - - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "[ATPS]: _AT_TRANSPORT_START_SERVER"); - - if(atcmd_lwip_is_tt_mode()){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPS] ERROR: Server can only start when TT is disabled"); - error_no = 13; - goto err_exit; - } - - argc = parse_param(arg, argv); - if(argc != 3){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPS] Usage: ATPS=[TCP:0/UDP:1],[Local port(1~65535)]"); - error_no = 1; - goto err_exit; - } - - mode = atoi((char*)argv[1]); - local_port = atoi((char*)argv[2]); - - if(local_port < 0 || local_port > 65535){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPS] Usage: ATPS=[TCP:0/UDP:1],[Local port]"); - error_no = 2; - goto err_exit; - } - - servernode = create_node(mode, NODE_ROLE_SERVER); - if(servernode == NULL){ - error_no = 3; - goto err_exit; - } - servernode->port = local_port; - - if(xTaskCreate(server_start_task, ((const char*)"server_start_task"), ATCP_STACK_SIZE, servernode, ATCMD_LWIP_TASK_PRIORITY, &servernode->handletask) != pdPASS) - { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPS] ERROR: Create tcp/udp server task failed."); - error_no = 4; - goto err_exit; - } - - goto exit; -err_exit: - if(servernode) - delete_node(servernode); - at_printf("\r\n[ATPS] ERROR:%d", error_no); -exit: - return; -} - -void socket_close_all(void) -{ - node *currNode = mainlist->next; - - while(currNode) - { - delete_node(currNode); - currNode = mainlist->next; - } - currNode = NULL; -} - -void fATPD(void *arg){ - int con_id = INVALID_CON_ID; - int error_no = 0; - node *s_node; - - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "[ATPD]: _AT_TRANSPORT_CLOSE_CONNECTION"); - - if(!arg){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPD] Usage: ATPD=con_id or 0 (close all)"); - error_no = 1; - goto exit; - } - con_id = atoi((char*)arg); - - if(con_id == 0){ - if(atcmd_lwip_is_autorecv_mode()){ - atcmd_lwip_set_autorecv_mode(FALSE); - } - socket_close_all(); - goto exit; - } - - s_node = seek_node(con_id); - if(s_node == NULL){ - error_no = 3; - goto exit; - } - delete_node(s_node); - -exit: - s_node = NULL; - if(error_no) - at_printf("\r\n[ATPD] ERROR:%d", error_no); - else - at_printf("\r\n[ATPD] OK"); - return; -} - -int atcmd_lwip_send_data(node *curnode, u8 *data, u16 data_sz, struct sockaddr_in cli_addr){ - int error_no = 0; - - if((curnode->protocol == NODE_MODE_UDP) && (curnode->role == NODE_ROLE_SERVER)) - { - if (sendto(curnode->sockfd, data, data_sz, 0, (struct sockaddr *)&cli_addr, sizeof(cli_addr)) <= 0 ){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPT] ERROR:Failed to send data"); - error_no = 5; - } - }else{ - if(curnode->protocol == NODE_MODE_UDP) //UDP server - { - struct sockaddr_in serv_addr; - memset(&serv_addr, 0, sizeof(serv_addr)); - serv_addr.sin_family = AF_INET; - serv_addr.sin_port = htons(curnode->port); - serv_addr.sin_addr.s_addr = htonl(curnode->addr); - if(sendto( curnode->sockfd, data, data_sz, 0, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) <= 0){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPT] ERROR:Failed to send data\n"); - error_no = 6; - } - }else if(curnode->protocol == NODE_MODE_TCP)//TCP server - { - if(curnode->role == NODE_ROLE_SERVER){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPT] ERROR: TCP Server must send data to the seed"); - error_no = 7; - goto exit; - } - - if((write(curnode->sockfd, data, data_sz)) <= 0){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPT] ERROR:Failed to send data\n"); - error_no = 8; - } - } - } - -exit: - return error_no; -} - -void fATPT(void *arg){ - - int argc; - char *argv[MAX_ARGC] = {0}; - int con_id = INVALID_CON_ID; - int error_no = 0; - node* curnode = NULL; - struct sockaddr_in cli_addr; - int data_sz; - int data_pos = C_NUM_AT_CMD + C_NUM_AT_CMD_DLT+ strlen(arg) + 1; - u8 *data = (u8 *)log_buf + data_pos; - - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "[ATPT]: _AT_TRANSPORT_SEND_DATA"); - - argc = parse_param(arg, argv); - - if(argc != 3 && argc != 5) { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPT] Usage: ATPT=," - "[,,]" - ":(MAX %d)", - MAX_BUFFER); - error_no = 1; - goto exit; - } - - data_sz = atoi((char*)argv[1]); - if(data_sz > MAX_BUFFER){ - error_no = 2; - goto exit; - } - - con_id = atoi((char*)argv[2]); - curnode = seek_node(con_id); - if(curnode == NULL){ - error_no = 3; - goto exit; - } - - if((curnode->protocol == NODE_MODE_UDP) - &&(curnode->role == NODE_ROLE_SERVER)) - { - char udp_clientaddr[16]={0}; - strcpy((char*)udp_clientaddr, (char*)argv[3]); - cli_addr.sin_family = AF_INET; - cli_addr.sin_port = htons(atoi((char*)argv[4])); - if (inet_aton(udp_clientaddr , &cli_addr.sin_addr) == 0) - { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPT]ERROR:inet_aton() failed"); - error_no = 4; - goto exit; - } - } - error_no = atcmd_lwip_send_data(curnode, data, data_sz, cli_addr); -exit: - if(error_no) - at_printf("\r\n[ATPT] ERROR:%d,%d", error_no, con_id); - else - at_printf("\r\n[ATPT] OK,%d", con_id); - return; -} - -void fATPR(void *arg){ - - int argc,con_id = INVALID_CON_ID; - char *argv[MAX_ARGC] = {0}; - int error_no = 0; - int recv_size = 0; - int packet_size = 0; - node* curnode = NULL; - u8_t udp_clientaddr[16] = {0}; - u16_t udp_clientport = 0; - - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "[ATPR]: _AT_TRANSPORT_RECEIVE_DATA"); - - if(atcmd_lwip_is_autorecv_mode()){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPR] ERROR: Receive changed to auto mode."); - error_no = 10; - goto exit; - } - - argc = parse_param(arg, argv); - if( argc != 3){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPR] Usage: ATPR =,\n\r"); - error_no = 1; - goto exit; - } - - con_id = atoi((char*)argv[1]); - if(con_id <= 0 || con_id > NUM_NS){ - error_no = 9; - goto exit; - } - - packet_size = atoi((char*)argv[2]); - - if(packet_size <= 0 || packet_size > MAX_BUFFER){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPR] Recv Size(%d) exceeds MAX_BUFFER(%d)", packet_size, - MAX_BUFFER); - error_no = 2; - goto exit; - } - - curnode = seek_node(con_id); - if(curnode == NULL){ - error_no = 3; - goto exit; - } - - if(curnode->protocol == NODE_MODE_TCP && curnode->role == NODE_ROLE_SERVER){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPR] ERROR: TCP Server must receive data from the seed"); - error_no = 6; - goto exit; - } - - memset(rx_buffer, 0, MAX_BUFFER); - error_no = atcmd_lwip_receive_data(curnode, rx_buffer, ETH_MAX_MTU, &recv_size, udp_clientaddr, &udp_clientport); -exit: - if(error_no == 0){ - if(curnode->protocol == NODE_MODE_UDP && curnode->role == NODE_ROLE_SERVER){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "\r\n[ATPR] OK,%d,%d,%s,%d:", recv_size, con_id, udp_clientaddr, udp_clientport); - at_printf("\r\n[ATPR] OK,%d,%d,%s,%d:", recv_size, con_id, udp_clientaddr, udp_clientport); - } - else{ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "\r\n[ATPR] OK,%d,%d:", recv_size, con_id); - at_printf("\r\n[ATPR] OK,%d,%d:", recv_size, con_id); - } - if(recv_size) - at_print_data(rx_buffer, recv_size); - } - else - at_printf("\r\n[ATPR] ERROR:%d,%d", error_no, con_id); - return; -} - -void fATPK(void *arg){ - - int argc; - int error_no = 0; - int enable = 0; - char *argv[MAX_ARGC] = {0}; - - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "[ATPK]: _AT_TRANSPORT_AUTO_RECV"); - - argc = parse_param(arg, argv); - if( argc < 2){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPK] Usage: ATPK=<0/1>\n\r"); - error_no = 1; - goto exit; - } - - enable = atoi((char*)argv[1]); - - if(enable){ - if(atcmd_lwip_is_autorecv_mode()){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, "[ATPK] already enter auto receive mode"); - } - else{ - if(atcmd_lwip_start_autorecv_task()) - error_no = 2; - } - }else{ - if(atcmd_lwip_is_autorecv_mode()) - atcmd_lwip_set_autorecv_mode(FALSE); - else{ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS,"[ATPK] already leave auto receive mode"); - } - } - -exit: - if(error_no) - at_printf("\r\n[ATPK] ERROR:%d", error_no); - else - at_printf("\r\n[ATPK] OK"); - return; -} - -void fATPU(void *arg){ - - int argc; - int error_no = 0; - int enable = 0; - char *argv[MAX_ARGC] = {0}; - - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "[ATPU]: _AT_TRANSPORT_TT_MODE"); - - argc = parse_param(arg, argv); - if( argc < 2){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPU] Usage: ATPU=<1>\n\r"); - error_no = 1; - goto exit; - } - - enable = atoi((char*)argv[1]); - - if(enable){ - if(!mainlist->next){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, "[ATPU] No conn found"); - error_no = 2; - }else if(mainlist->next->role == NODE_ROLE_SERVER){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, "[ATPU] No TT mode for server"); - error_no = 3; - } - else if(mainlist->next->next || mainlist->next->nextseed){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, "[ATPU] More than one conn found"); - error_no = 4; - } - else{ - if(atcmd_lwip_start_tt_task()){ - error_no = 5; - } - } - } - -exit: - if(error_no) - at_printf("\r\n[ATPU] ERROR:%d", error_no); - else - at_printf("\r\n[ATPU] OK"); - return; -} - -//ATPL= -void fATPL(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "\r\n[ATPL] Usage : ATPL="); - error_no = 1; - goto exit; - } - argc = parse_param(arg, argv); - if(argc != 2){ - error_no = 2; - goto exit; - } - - //ENABLE LWIP FAST CONNECT - if(argv[1] != NULL){ - int enable = atoi(argv[1]); - struct atcmd_lwip_conn_info cur_conn = {0}; - node *cur_node = mainlist->next; - if(enable && cur_node == NULL){ - error_no = 3; - goto exit; - } - cur_conn.role = cur_node->role; - cur_conn.protocol = cur_node->protocol; - cur_conn.remote_addr = cur_node->addr; - cur_conn.remote_port = cur_node->port; - cur_conn.local_addr = cur_node->local_addr; - cur_conn.local_port = cur_node->local_port; - atcmd_lwip_write_info_to_flash(&cur_conn, enable); - } - -exit: - if(error_no == 0) - at_printf("\r\n[ATPL] OK"); - else - at_printf("\r\n[ATPL] ERROR:%d",error_no); - - return; -} - -extern void do_ping_call(char *ip, int loop, int count); -void fATPP(void *arg){ - int count, argc = 0; - char buf[32] = {0}; - char *argv[MAX_ARGC] = {0}; - int con_id=INVALID_CON_ID; - int error_no = 0; - - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "[ATPP]: _AT_TRANSPORT_PING"); - - if(!arg){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR,"[ATPP] Usage: ATPP=xxxx.xxxx.xxxx.xxxx[y/loop] or ATPP=[con_id],[y/loop]\n\r"); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - - if( strlen(argv[1]) < 3 ) - { - node* curnode; - struct in_addr addr; - con_id = atoi( (char*)argv[1] ); - curnode = seek_node(con_id); - if(curnode == NULL){ - error_no = 2; - goto exit; - } - if( curnode->role == 1){ //ping remote server - addr.s_addr = htonl(curnode->addr); - inet_ntoa_r(addr, buf, sizeof(buf)); - }else if( curnode->role == 0){//ping local server - strcpy(buf,SERVER); - }else if( curnode->role == 2){ //ping seed - strcpy(buf,(char*) curnode->addr); - } - }else - strcpy(buf, argv[1]); - - if(argc == 2){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS,"[ATPP]Repeat Count: 5"); - do_ping_call(buf, 0, 5); //Not loop, count=5 - }else{ - if(strcmp(argv[2], "loop") == 0){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS,"[ATPP]Repeat Count: %s", "loop"); - do_ping_call(buf, 1, 0); //loop, no count - }else{ - count = atoi(argv[2]); - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS,"[ATPP]Repeat Count: %d", count); - do_ping_call(buf, 0, count); //Not loop, with count - } - } - -exit: - if(error_no) - at_printf("\r\n[ATPP] ERROR:%d", error_no); - else - at_printf("\r\n[ATPP] OK"); - return; -} - -void fATPI(void *arg){ - node* n = mainlist->next; - struct in_addr addr; - - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "[ATPI]: _AT_TRANSPORT_CONNECTION_INFO"); - - while (n != NULL) - { - if(n->con_id == 0) - continue; - - at_printf("\r\ncon_id:%d,", n->con_id); - - if(n->role == 0) - at_printf("server,"); - else - at_printf("client,"); - if(n->protocol == 0) - at_printf("tcp,"); - else - at_printf("udp,"); - - addr.s_addr = htonl(n->addr); - at_printf("address:%s,port:%d,socket:%d", inet_ntoa(addr) ,n->port, n->sockfd); - if(n->nextseed != NULL) - { - node* seed = n; - do{ - seed = seed->nextseed; - at_printf("\r\ncon_id:%d,seed,", seed->con_id); - if(seed->protocol == 0) - at_printf("tcp,"); - else - at_printf("udp,"); - addr.s_addr = htonl(seed->addr); - at_printf("address:%s,port:%d,socket:%d", inet_ntoa(addr), seed->port, seed->sockfd); - }while (seed->nextseed != NULL); - } - n = n->next; - } - - at_printf("\r\n[ATPI] OK"); - - return; -} - -void init_node_pool(void){ - int i; - memset(node_pool, 0, sizeof(node_pool)); - for(i=0;inext ) - { - if(currNode == n){ - prevNode->next = currNode->next; - } - - if(currNode->role != NODE_ROLE_SERVER) - continue; - - precvSeed = currNode; - currSeed = currNode->nextseed; - while (currSeed != NULL) - { - if(currSeed == n){ - precvSeed->nextseed = n->nextseed; - } - precvSeed = currSeed; - currSeed = currSeed->nextseed; - } - } - SYS_ARCH_UNPROTECT(lev); - - if(n->role == NODE_ROLE_SERVER){ - //node may have seed if it's under server mode - while(n->nextseed != NULL){ - currSeed = n->nextseed; - // only tcp seed has its own socket, udp seed uses its server's - // so delete udp seed can't close socket which is used by server - if(currSeed->protocol == NODE_MODE_TCP && currSeed->sockfd != INVALID_SOCKET_ID){ - close(currSeed->sockfd); - currSeed->sockfd = INVALID_SOCKET_ID; - } - // no task created for seed - //if(s->handletask != NULL) - // vTaskDelete(s->handletask); - n->nextseed = currSeed->nextseed; - currSeed->con_id = INVALID_CON_ID; - }; - } - - if(!((n->protocol == NODE_MODE_UDP)&&(n->role == NODE_ROLE_SEED))){ - if(n->sockfd != INVALID_SOCKET_ID){ - close(n->sockfd); - n->sockfd = INVALID_SOCKET_ID; - } - } - //task will exit itself in fail case - if(n->handletask){ - vTaskDelete(n->handletask); - n->handletask = NULL; - } - n->con_id = INVALID_CON_ID; - return; -} - -int hang_node(node* insert_node) -{ - node* n = mainlist; - SYS_ARCH_DECL_PROTECT(lev); - SYS_ARCH_PROTECT(lev); - while (n->next != NULL) - { - n = n->next; - if(insert_node->role == NODE_ROLE_SERVER) //need to check for server in case that two conns are binded to same port, because SO_REUSEADDR is enabled - { - if( (n->port == insert_node->port) && ((n->addr== insert_node->addr) && (n->role == insert_node->role) && (n->protocol == insert_node->protocol) ) ){ - SYS_ARCH_UNPROTECT(lev); - struct in_addr addr; - addr.s_addr = htonl(insert_node->addr); - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "This conn(IP:%s PORT:%d) already exist", - inet_ntoa(addr),insert_node->port); - return -1; - } - } - } - - n->next = insert_node; - SYS_ARCH_UNPROTECT(lev); - return 0; -} - -int hang_seednode(node* main_node ,node* insert_node) -{ - node* n = main_node; - - SYS_ARCH_DECL_PROTECT(lev); - SYS_ARCH_PROTECT(lev); - while (n->nextseed != NULL) - { - n = n->nextseed; - if( (n->port == insert_node->port) && (n->addr == insert_node->addr)){ - SYS_ARCH_UNPROTECT(lev); - struct in_addr addr; - addr.s_addr = htonl(insert_node->addr); - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "This seed IP:%s PORT:%d already exist", - inet_ntoa(addr),insert_node->port); - return -1; - } - } - - n->nextseed = insert_node; - SYS_ARCH_UNPROTECT(lev); - return 0; -} - -node *seek_node(int con_id) -{ - node* n = mainlist; - while (n->next != NULL) - { - n = n->next; - if(n->con_id == con_id) - return n; - - if(n->nextseed != NULL) - { - node* seed = n; - do{ - seed = seed->nextseed; - if(seed->con_id == con_id) - return seed; - }while (seed->nextseed != NULL); - } - } - return NULL; -} - -node *tryget_node(int n) -{ - SYS_ARCH_DECL_PROTECT(lev); - if ((n <= 0) || (n > NUM_NS)) { - return NULL; - } - SYS_ARCH_PROTECT(lev); - if (node_pool[n].con_id == INVALID_CON_ID || node_pool[n].sockfd == INVALID_SOCKET_ID) { - SYS_ARCH_UNPROTECT(lev); - return NULL; - } - SYS_ARCH_UNPROTECT(lev); - return &node_pool[n]; -} - -int atcmd_lwip_receive_data(node *curnode, u8 *buffer, u16 buffer_size, int *recv_size, - u8_t *udp_clientaddr, u16_t *udp_clientport){ - - struct timeval tv; - fd_set readfds; - int error_no = 0, ret = 0, size = 0; - - FD_ZERO(&readfds); - FD_SET(curnode->sockfd, &readfds); - tv.tv_sec = RECV_SELECT_TIMEOUT_SEC; - tv.tv_usec = RECV_SELECT_TIMEOUT_USEC; - ret = select(curnode->sockfd + 1, &readfds, NULL, NULL, &tv); - if(!((ret > 0)&&(FD_ISSET(curnode->sockfd, &readfds)))) - { - //AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - // "[ATPR] No receive event for con_id %d", curnode->con_id); - goto exit; - } - - if(curnode->protocol == NODE_MODE_UDP) //udp server receive from client - { - if(curnode->role == NODE_ROLE_SERVER){ - //node * clinode; - struct sockaddr_in client_addr; - u32_t addr_len = sizeof(struct sockaddr_in); - memset((char *) &client_addr, 0, sizeof(client_addr)); - - if ((size = recvfrom(curnode->sockfd, buffer, buffer_size, 0, (struct sockaddr *) &client_addr, &addr_len)) > 0){ - //at_printf("[ATPR]:%d,%s,%d,%s\r\n with packet_size: %d\r\n",con_id, inet_ntoa(client_addr.sin_addr.s_addr), ntohs(client_addr.sin_port), rx_buffer, packet_size); - //at_printf("\r\nsize: %d\r\n", recv_size); - //at_printf("%s", rx_buffer); - } - else{ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPR] ERROR:Failed to receive data"); - error_no = 4; - } -#if 0 - clinode = create_node(NODE_MODE_UDP, NODE_ROLE_SEED); - clinode->sockfd = curnode->sockfd; - clinode->addr = ntohl(client_addr.sin_addr.s_addr); - clinode->port = ntohs(client_addr.sin_port); - if(hang_seednode(curnode,clinode) < 0){ - delete_node(clinode); - clinode = NULL; - } -#else - inet_ntoa_r(client_addr.sin_addr.s_addr, (char *)udp_clientaddr, 16); - *udp_clientport = ntohs(client_addr.sin_port); -#endif - } - else{ - struct sockaddr_in serv_addr; - u32_t addr_len = sizeof(struct sockaddr_in); - memset((char *) &serv_addr, 0, sizeof(serv_addr)); - serv_addr.sin_family = AF_INET; - serv_addr.sin_port = htons(curnode->port); - serv_addr.sin_addr.s_addr = htonl(curnode->addr); - - if ((size = recvfrom(curnode->sockfd, buffer, buffer_size, 0, (struct sockaddr *) &serv_addr, &addr_len)) > 0){ - //at_printf("[ATPR]:%d,%s,%d,%s\r\n with packet_size: %d\r\n",con_id, inet_ntoa(serv_addr.sin_addr.s_addr), ntohs(serv_addr.sin_port), rx_buffer, packet_size); - //at_printf("\r\nsize: %d\r\n", recv_size); - //at_printf("%s", rx_buffer); - } - else{ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPR] ERROR:Failed to receive data"); - error_no = 5; - } - } - } - else{ - #if 0 - if(curnode->role == NODE_ROLE_SERVER){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPR] ERROR: TCP Server must receive data from the seed"); - error_no = 6; - } - #endif - //receive from seed or server - if((size = read(curnode->sockfd,buffer,buffer_size)) > 0) - { - //struct in_addr addr; - //addr.s_addr = htonl(curnode->addr); - //at_printf("[ATPR]:%d,%s,%d,%s\r\n with packet_size: %d\r\n",con_id, inet_ntoa(addr), curnode->port, rx_buffer, packet_size); - //at_printf("\r\nsize: %d\r\n", recv_size); - //at_printf("%s", rx_buffer); - } - else{ - if(size == 0){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPR] ERROR:Connection is closed!"); - error_no = 7; - } - else{ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "[ATPR] ERROR:Failed to receive data!"); - error_no = 8; - } - } - } -exit: - if(error_no == 0) - *recv_size = size; - else{ - close(curnode->sockfd); - curnode->sockfd = INVALID_SOCKET_ID; - } - return error_no; -} - -static void atcmd_lwip_receive_task(void *param) -{ - - int i; - int packet_size = ETH_MAX_MTU; - - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "Enter auto receive mode"); - - while(atcmd_lwip_is_autorecv_mode()) - { - for (i = 0; i < NUM_NS; ++i) { - node* curnode = NULL; - int error_no = 0; - int recv_size = 0; - u8_t udp_clientaddr[16] = {0}; - u16_t udp_clientport = 0; - curnode = tryget_node(i); - if(curnode == NULL) - continue; - if(curnode->protocol == NODE_MODE_TCP && curnode->role == NODE_ROLE_SERVER){ - //TCP Server must receive data from the seed - continue; - } - error_no = atcmd_lwip_receive_data(curnode, rx_buffer, packet_size, &recv_size, udp_clientaddr, &udp_clientport); - - if(atcmd_lwip_is_tt_mode()){ - if((error_no == 0) && recv_size){ - rx_buffer[recv_size] = '\0'; - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS,"Recv[%d]:%s", recv_size, rx_buffer); - at_print_data(rx_buffer, recv_size); - rtw_msleep_os(20); - } - continue; - } - - if(error_no == 0){ - if(recv_size){ - #if CONFIG_LOG_SERVICE_LOCK - log_service_lock(); - #endif - if(curnode->protocol == NODE_MODE_UDP && curnode->role == NODE_ROLE_SERVER){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "\r\n[ATPR] OK,%d,%d,%s,%d:", recv_size, curnode->con_id, udp_clientaddr, udp_clientport); - at_printf("\r\n[ATPR] OK,%d,%d,%s,%d:", recv_size, curnode->con_id, udp_clientaddr, udp_clientport); - } - else{ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "\r\n[ATPR] OK,%d,%d:", - recv_size, - curnode->con_id); - at_printf("\r\n[ATPR] OK,%d,%d:", recv_size, curnode->con_id); - } - at_print_data(rx_buffer, recv_size); - at_printf(STR_END_OF_ATCMD_RET); - #if CONFIG_LOG_SERVICE_LOCK - log_service_unlock(); - #endif - } - } - else{ - #if CONFIG_LOG_SERVICE_LOCK - log_service_lock(); - #endif - at_printf("\r\n[ATPR] ERROR:%d,%d", error_no, curnode->con_id); - at_printf(STR_END_OF_ATCMD_RET); - #if CONFIG_LOG_SERVICE_LOCK - log_service_unlock(); - #endif - } - } - } - - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "Leave auto receive mode"); - - vTaskDelete(NULL); -} - -int atcmd_lwip_start_autorecv_task(void){ - atcmd_lwip_set_autorecv_mode(TRUE); - if(xTaskCreate(atcmd_lwip_receive_task, ((const char*)"atcmd_lwip_receive_task"), ATCP_STACK_SIZE, NULL, ATCMD_LWIP_TASK_PRIORITY, NULL) != pdPASS) - { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "ERROR: Create receive task failed."); - atcmd_lwip_set_autorecv_mode(FALSE); - return -1; - } - return 0; -} - -int atcmd_lwip_is_tt_mode(void){ - return (atcmd_lwip_tt_mode == TRUE); -} -void atcmd_lwip_set_tt_mode(int enable){ - atcmd_lwip_tt_mode = enable; -} - -int atcmd_lwip_is_autorecv_mode(void){ - return (atcmd_lwip_auto_recv == TRUE); -} -void atcmd_lwip_set_autorecv_mode(int enable){ - atcmd_lwip_auto_recv = enable; -} - -static void _tt_wait_rx_complete(){ - s32 tick_current = rtw_get_current_time(); - - while(rtw_systime_to_ms(tick_current -atcmd_lwip_tt_lasttickcnt) < ATCMD_LWIP_TT_MAX_DELAY_TIME_MS ){ - rtw_msleep_os(5); - tick_current = rtw_get_current_time(); - } -} - -static void atcmd_lwip_tt_handler(void* param) -{ - struct sockaddr_in cli_addr; - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "Enter TT data mode"); - while(rtw_down_sema((_Sema *)&atcmd_lwip_tt_sema) == _SUCCESS) { - _lock lock; - _irqL irqL; - int tt_size = 0; - _tt_wait_rx_complete(); - - rtw_enter_critical(&lock, &irqL); - if((atcmd_lwip_tt_datasize >= 4) && (memcmp(log_buf, "----", 4) == 0)){ - atcmd_lwip_set_tt_mode(FALSE); - atcmd_lwip_tt_datasize = 0; - rtw_exit_critical(&lock, &irqL); - break; - } - rtw_memcpy(tx_buffer, log_buf, atcmd_lwip_tt_datasize); - tt_size = atcmd_lwip_tt_datasize; - atcmd_lwip_tt_datasize = 0; - rtw_exit_critical(&lock, &irqL); - tx_buffer[tt_size] = '\0'; - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS,"Send[%d]:%s", tt_size, tx_buffer); - atcmd_lwip_send_data(mainlist->next, tx_buffer, tt_size, cli_addr); - } - - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "Leave TT data mode"); - rtw_free_sema((_Sema *)&atcmd_lwip_tt_sema); - atcmd_lwip_set_autorecv_mode(FALSE); - at_printf(STR_END_OF_ATCMD_RET); //mark return to command mode - vTaskDelete(NULL); -} - -int atcmd_lwip_start_tt_task(void){ - rtw_init_sema((_Sema *)&atcmd_lwip_tt_sema, 0); - atcmd_lwip_set_tt_mode(TRUE); - if(xTaskCreate(atcmd_lwip_tt_handler, ((const char*)"tt_hdl"), ATCP_STACK_SIZE, NULL, ATCMD_LWIP_TASK_PRIORITY, &atcmd_lwip_tt_task) != pdPASS){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR, - "ERROR: Create tt task failed."); - goto err_exit; - } - rtw_msleep_os(20); - if(atcmd_lwip_is_autorecv_mode() != 1){ - if(atcmd_lwip_start_autorecv_task()){ - vTaskDelete(atcmd_lwip_tt_task); - goto err_exit; - } - } - - return 0; - -err_exit: - atcmd_lwip_set_tt_mode(FALSE); - return -1; -} - -void atcmd_lwip_erase_info(void){ - atcmd_update_partition_info(AT_PARTITION_LWIP, AT_PARTITION_ERASE, NULL, 0); -} - -int atcmd_lwip_write_info_to_flash(struct atcmd_lwip_conn_info *cur_conn, int enable) -{ - struct atcmd_lwip_conf read_data = {0}; - int i = 0, found = 0; - - atcmd_update_partition_info(AT_PARTITION_LWIP, AT_PARTITION_READ, (u8 *) &read_data, sizeof(struct atcmd_lwip_conf)); - - //fake that the conn exists already when disabling or there is no active conn on this moment - if(enable == 0){ - atcmd_lwip_erase_info(); - goto exit; - } - - if(read_data.conn_num < 0 || read_data.conn_num > ATCMD_LWIP_CONN_STORE_MAX_NUM){ - read_data.conn_num = 0; - read_data.last_index = -1; - } - - for(i = 0; i < read_data.conn_num; i++){ - if(memcmp((u8 *)cur_conn, (u8 *)&read_data.conn[i], sizeof(struct atcmd_lwip_conn_info)) == 0) { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "the same profile found in flash"); - found = 1; - break; - } - } - - if(!found){ - read_data.last_index++; - if(read_data.last_index >= ATCMD_LWIP_CONN_STORE_MAX_NUM) - read_data.last_index -= ATCMD_LWIP_CONN_STORE_MAX_NUM; - memcpy((u8 *)&read_data.conn[read_data.last_index], (u8 *)cur_conn, sizeof(struct atcmd_lwip_conn_info)); - read_data.conn_num++; - if(read_data.conn_num > ATCMD_LWIP_CONN_STORE_MAX_NUM) - read_data.conn_num = ATCMD_LWIP_CONN_STORE_MAX_NUM; - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "not the same proto/addr/port, write new profile to flash"); - } - if(!found || read_data.enable != enable){ - read_data.enable = enable; - atcmd_update_partition_info(AT_PARTITION_LWIP, AT_PARTITION_WRITE, (u8 *) &read_data, sizeof(struct atcmd_lwip_conf)); - } -exit: - return 0; -} - -int atcmd_lwip_read_info_from_flash(u8 *read_data, u32 read_len) -{ - atcmd_update_partition_info(AT_PARTITION_LWIP, AT_PARTITION_READ, read_data, read_len); - return 0; -} - -int atcmd_lwip_auto_connect(void) -{ - struct atcmd_lwip_conf read_data = {0}; - struct atcmd_lwip_conn_info *re_conn; - node* re_node = NULL; - int i, error_no = 0; - int last_index; - - atcmd_lwip_read_info_from_flash((u8 *)&read_data, sizeof(struct atcmd_lwip_conf)); - if(read_data.enable == 0){ - error_no = 1; - goto exit; - } - if(read_data.conn_num > ATCMD_LWIP_CONN_STORE_MAX_NUM || read_data.conn_num <= 0){ - error_no = 2; - goto exit; - } - - last_index = read_data.last_index; - for(i = 0; i < read_data.conn_num; i++){ - re_conn = &read_data.conn[last_index]; - last_index ++; - if(last_index >= ATCMD_LWIP_CONN_STORE_MAX_NUM) - last_index -= ATCMD_LWIP_CONN_STORE_MAX_NUM; - re_node = create_node(re_conn->protocol, re_conn->role); - if(re_node == NULL){ - error_no = 3; - break; - } - re_node->addr = re_conn->remote_addr; - re_node->port = re_conn->remote_port; - re_node->local_addr = re_conn->local_addr; - re_node->local_port = re_conn->local_port; - if(re_node->protocol == NODE_MODE_UDP) - re_node->sockfd = socket(AF_INET,SOCK_DGRAM,0); - else - re_node->sockfd = socket(AF_INET, SOCK_STREAM, 0); - - if (re_node->sockfd == INVALID_SOCKET_ID) { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR,"Failed to create sock_fd!"); - error_no = 4; - break; - } - - struct in_addr addr; - addr.s_addr = htonl(re_node->addr); - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS, - "\r\nTry connect: %d,%d,%s,%d", - re_node->sockfd, re_node->protocol, - inet_ntoa(addr), re_node->port); - - if(re_node->role == NODE_ROLE_SERVER){ - //TODO: start server here - goto exit; - } - - if (re_node->protocol == NODE_MODE_TCP){//TCP MODE - struct sockaddr_in c_serv_addr; - memset(&c_serv_addr, 0, sizeof(c_serv_addr)); - c_serv_addr.sin_family = AF_INET; - c_serv_addr.sin_addr.s_addr = htonl(re_node->addr); - c_serv_addr.sin_port = htons(re_node->port); - if(connect(re_node->sockfd, (struct sockaddr *)&c_serv_addr, sizeof(c_serv_addr)) == 0){ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS,"Connect to Server successful!"); - if(hang_node(re_node) < 0){ - error_no = 5; - } - break; - }else{ - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR,"Connect to Server failed(%d)!", errno); - error_no = 6; - delete_node(re_node); - re_node = NULL; - continue; //try next conn - } - } - else{ - if(re_node->local_port){ - struct sockaddr_in addr; - memset(&addr, 0, sizeof(addr)); - addr.sin_family=AF_INET; - addr.sin_port=htons(re_node->local_port); - addr.sin_addr.s_addr=htonl(INADDR_ANY) ; - if (bind(re_node->sockfd, (struct sockaddr *)&addr, sizeof(addr))<0) { - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ERROR,"bind sock error!"); - error_no = 7; - delete_node(re_node); - re_node = NULL; - continue; - } - } - if(hang_node(re_node) < 0){ - error_no = 8; - } - AT_DBG_MSG(AT_FLAG_LWIP, AT_DBG_ALWAYS,"UDP client starts successful!"); - break; - } - } - -exit: - if(re_node && error_no) - delete_node(re_node); - return error_no; -} - -int atcmd_lwip_restore_from_flash(void){ - int ret = -1; - if(atcmd_lwip_auto_connect() == 0){ - if(atcmd_lwip_start_tt_task() == 0) - ret = 0; - } - return ret; -} -#endif - -//------------------------------------------------------------ Add pvvx Lwip Info -/* Get one byte from the 4-byte address */ -#define ip4_addr1(ipaddr) (((u8_t*)(ipaddr))[0]) -#define ip4_addr2(ipaddr) (((u8_t*)(ipaddr))[1]) -#define ip4_addr3(ipaddr) (((u8_t*)(ipaddr))[2]) -#define ip4_addr4(ipaddr) (((u8_t*)(ipaddr))[3]) -/* These are cast to u16_t, with the intent that they are often arguments - * to printf using the U16_F format from cc.h. */ -#define ip4_addr1_16(ipaddr) ((u16_t)ip4_addr1(ipaddr)) -#define ip4_addr2_16(ipaddr) ((u16_t)ip4_addr2(ipaddr)) -#define ip4_addr3_16(ipaddr) ((u16_t)ip4_addr3(ipaddr)) -#define ip4_addr4_16(ipaddr) ((u16_t)ip4_addr4(ipaddr)) - -#define IP2STR(ipaddr) ip4_addr1_16(ipaddr), \ - ip4_addr2_16(ipaddr), \ - ip4_addr3_16(ipaddr), \ - ip4_addr4_16(ipaddr) - -#define IPSTR "%d.%d.%d.%d" - -extern const char * const tcp_state_str[]; -/* -static const char * const tcp_state_str[] = { - "CLOSED", - "LISTEN", - "SYN_SENT", - "SYN_RCVD", - "ESTABLISHED", - "FIN_WAIT_1", - "FIN_WAIT_2", - "CLOSE_WAIT", - "CLOSING", - "LAST_ACK", - "TIME_WAIT" -}; -*/ -/****************************************************************************** - * FunctionName : debug - * Parameters : - * Returns : -*******************************************************************************/ -void print_udp_pcb(void) -{ - struct udp_pcb *pcb; - bool prt_none = true; - rtl_printf("UDP pcbs:\n"); - for(pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { - rtl_printf("flg:%02x\t" IPSTR ":%d\t" IPSTR ":%d\trecv:%p\n", pcb->flags, IP2STR(&pcb->local_ip), pcb->local_port, IP2STR(&pcb->remote_ip), pcb->remote_port, pcb->recv ); - prt_none = false; - } - if(prt_none) rtl_printf("none\n"); -} -/****************************************************************************** - * FunctionName : debug - * Parameters : - * Returns : -*******************************************************************************/ -void print_tcp_pcb(void) -{ - struct tcp_pcb *pcb; - rtl_printf("Active PCB states:\n"); - bool prt_none = true; - for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { - rtl_printf("Port %d|%d\tflg:%02x\ttmr:%p\t%s\n", pcb->local_port, pcb->remote_port, pcb->flags, pcb->tmr, tcp_state_str[pcb->state]); - prt_none = false; - } - if(prt_none) rtl_printf("none\n"); - rtl_printf("Listen PCB states:\n"); - prt_none = true; - for(pcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; pcb != NULL; pcb = pcb->next) { - rtl_printf("Port %d|%d\tflg:%02x\ttmr:%p\t%s\n", pcb->local_port, pcb->remote_port, pcb->flags, pcb->tmr, tcp_state_str[pcb->state]); - prt_none = false; - } - if(prt_none) rtl_printf("none\n"); - rtl_printf("TIME-WAIT PCB states:\n"); - prt_none = true; - for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { - rtl_printf("Port %d|%d\tflg:%02x\ttmr:%p\t%s\n", pcb->local_port, pcb->remote_port, pcb->flags, pcb->tmr, tcp_state_str[pcb->state]); - prt_none = false; - } - if(prt_none) rtl_printf("none\n"); -} -/****************************************************************************** - * FunctionName : debug - * Parameters : - * Returns : -*******************************************************************************/ -void print_netif(int inum) -{ - rtl_printf("Net Info[%d]: " IPSTR, inum, IP2STR(&xnetif[inum].ip_addr)); - rtl_printf(", " IPSTR ", " IPSTR "\n", IP2STR(&xnetif[inum].netmask), IP2STR(&xnetif[inum].gw)); -} -/****************************************************************************** - * FunctionName : debug - * Parameters : - * Returns : -*******************************************************************************/ -//------------------------------------------------------------------------------ -void fATPx(void *arg) // Info Lwip -{ - printf("=== LwIP Info ===\n"); - print_netif(0); - print_netif(1); - print_udp_pcb(); - print_tcp_pcb(); -} -//------------------------------------------------------------ Add pvvx end -#if CONFIG_TRANSPORT -log_item_t at_transport_items[ ] = { -#if ATCMD_VER == ATVER_1 - {"ATP1", fATP1,},//mode TCP=0,UDP=1 - {"ATP2", fATP2,},//LOCAL PORT - {"ATP3", fATP3,},//REMOTE IP - {"ATP4", fATP4,},//REMOTE PORT - {"ATP5", fATP5,},//START SERVER - {"ATP6", fATP6,},//START CLIENT - {"ATP?", fATPZ,},//SETTING - {"ATR0", fATR0,},//READ DATA - {"ATR1", fATR1,},//SET PACKET SIZE - {"ATRA", fATRA,},//WRITE DATA - {"ATRB", fATRB,},//SET WRITE PACKET SIZE -#endif -#if ATCMD_VER == ATVER_2 - {"ATP0", fATP0,},//query errno if defined - {"ATPS", fATPS,},//Create Server - {"ATPD", fATPD,},//Close Server/Client connection - {"ATPC", fATPC,},//Create Client - {"ATPT", fATPT,},//WRITE DATA - {"ATPR", fATPR,},//READ DATA - {"ATPK", fATPK,},//Auto recv - {"ATPP", fATPP,},//PING - {"ATPI", fATPI,},//printf connection status - {"ATPU", fATPU,}, //transparent transmission mode - {"ATPL", fATPL,}, //lwip auto reconnect setting -#endif - {"ATP?", fATPx,}, //Lwip pcb Info -}; - -#if ATCMD_VER == ATVER_2 -void print_tcpip_at(void *arg){ - int index; - int cmd_len = 0; - - cmd_len = sizeof(at_transport_items)/sizeof(at_transport_items[0]); - for(index = 0; index < cmd_len; index++) - at_printf("\r\n%s", at_transport_items[index].log_cmd); -} -#endif - -void at_transport_init(void) -{ -#if ATCMD_VER == ATVER_2 - init_node_pool(); - mainlist = create_node(-1,-1); -#endif - log_service_add_table(at_transport_items, sizeof(at_transport_items)/sizeof(at_transport_items[0])); -} - -log_module_init(at_transport_init); -#endif -#endif //#ifdef CONFIG_AT_LWIP diff --git a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_lwip.h b/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_lwip.h deleted file mode 100644 index bbdb35c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_lwip.h +++ /dev/null @@ -1,100 +0,0 @@ -#ifndef __ATCMD_LWIP_H__ -#define __ATCMD_LWIP_H__ - -#include -#ifdef CONFIG_AT_LWIP - -#include "main.h" -#include -#include "lwip/sockets.h" -#include "lwip/api.h" -#include "lwip/sys.h" -#include "lwip/igmp.h" -#include "lwip/inet.h" -#include "lwip/tcp.h" -#include "lwip/raw.h" -#include "lwip/udp.h" -#include "lwip/tcpip.h" -#include "lwip/pbuf.h" -#include "lwip/netdb.h" -#include "lwip_netconf.h" - - -#define _AT_TRANSPORT_MODE_ "ATP1" -#define _AT_TRANSPORT_LOCAL_PORT_ "ATP2" -#define _AT_TRANSPORT_REMOTE_IP_ "ATP3" -#define _AT_TRANSPORT_REMOTE_PORT_ "ATP4" -#define _AT_TRANSPORT_START_SERVER_ "ATP5" -#define _AT_TRANSPORT_START_CLIENT_ "ATP6" -#define _AT_TRANSPORT_SHOW_SETTING_ "ATP?" -#define _AT_TRANSPORT_RECEIVE_DATA_ "ATR0" -#define _AT_TRANSPORT_RECEIVE_PACKET_SIZE_ "ATR1" -#define _AT_TRANSPORT_WRITE_DATA_ "ATRA" -#define _AT_TRANSPORT_WRITE_PACKET_SIZE_ "ATRB" - -#define NODE_MODE_TCP 0 -#define NODE_MODE_UDP 1 - -#define NODE_ROLE_SERVER 0 -#define NODE_ROLE_CLIENT 1 -#define NODE_ROLE_SEED 2 - -#define INVALID_SOCKET_ID (-1) - -//parameters -#ifndef NET_IF_NUM -#define NET_IF_NUM 2 -#endif - -#define ATCMD_LWIP_TASK_PRIORITY (tskIDLE_PRIORITY + 1) - -#if ATCMD_VER == ATVER_2 - -#define SERVER "127.0.0.1" - -#define NUM_NS (MEMP_NUM_NETCONN) //maximum number of node and seed, same as NUM_SOCKETS - -#define ETH_MAX_MTU 1500 - -#define INVALID_CON_ID (-1) - -#define RECV_SELECT_TIMEOUT_SEC (0) -#define RECV_SELECT_TIMEOUT_USEC (20000) //20ms - -typedef struct ns -{ - int con_id; - int sockfd; - s8_t role; - int protocol; - u32_t addr; - u16_t port; - u32_t local_addr; - u16_t local_port; - xTaskHandle handletask; - struct ns* next; - struct ns* nextseed; -} node; - -extern xTaskHandle atcmd_lwip_tt_task; -extern xSemaphoreHandle atcmd_lwip_tt_sema; -extern volatile int atcmd_lwip_tt_datasize; -extern volatile int atcmd_lwip_tt_lasttickcnt; -#define ATCMD_LWIP_TT_MAX_DELAY_TIME_MS (20) //transparent transmission interval - -extern int atcmd_lwip_is_tt_mode(void); -extern void atcmd_lwip_set_tt_mode(int enable); -int atcmd_lwip_send_data(node *curnode, u8 *data, u16 data_sz, struct sockaddr_in cli_addr); -int atcmd_lwip_receive_data(node *curnode, u8 *buffer, u16 buffer_size, int *recv_size, - u8_t *udp_clientaddr, u16_t *udp_clientport); -node* create_node(int mode, s8_t role); -void init_node_pool(void); -void delete_node(node *n); -int hang_node(node* insert_node); -int hang_seednode(node* main_node ,node* insert_node); -node *seek_node(int con_id); -node *tryget_node(int n); -#endif - -#endif //#ifdef CONFIG_AT_LWIP -#endif //#ifndef __ATCMD_LWIP_H__ diff --git a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_mp.c b/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_mp.c deleted file mode 100644 index d10bf07..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_mp.c +++ /dev/null @@ -1,195 +0,0 @@ -#include -#include -#include -#include "log_service.h" -#include "atcmd_mp.h" - -#if CONFIG_ATCMD_MP_EXT0 - extern void fATM0(void *arg); // MP ext0 AT command -#endif - -#if CONFIG_ATCMD_MP -//-------- AT MP commands --------------------------------------------------------------- -void fATMG(void *arg) -{ - gpio_t gpio_test; - int argc = 0, val, cnts, i, write=0, data=0; - char *argv[MAX_ARGC] = {0}, port, num; - PinName pin = NC; - u32 tConfigDebugInfo = ConfigDebugInfo; - - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATMG]: _AT_MP_GPIO_TEST_"); - if(!arg){ - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATMG] Usage: ATSG=w,PINNAMES(ex:A0B1C2...),VALUE(0/1)"); - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATMG] Usage: ATSG=r,PINNAMES(ex:A0B1C2...)"); - return; - } - - argc = parse_param(arg, argv); - cnts = strlen(argv[2]); - if(cnts % 2) return; - cnts /= 2; - if(cnts == 0) return; - - if(strcmp(argv[1], "w") == 0){ - write = 1; - if(strcmp(argv[3], "1") == 0) - data = 1; - } - // Remove debug info massage - _AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATMG] %s: ", argv[1]); - ConfigDebugInfo = 0; - for(i=0; i<(cnts*2); i+=2){ - pin = NC; - port = argv[2][i]; - num = argv[2][i+1]; - if(port >= 'a' && port <= 'z') - port -= ('a' - 'A'); - if(num >= 'a' && num <= 'z') - num -= ('a' - 'A'); - switch(port){ - case 'A': - switch(num){ - case '0': pin = PA_0; break; case '1': pin = PA_1; break; case '2': pin = PA_2; break; case '3': pin = PA_3; break; - case '4': pin = PA_4; break; case '5': pin = PA_5; break; case '6': pin = PA_6; break; case '7': pin = PA_7; break; - } - break; - case 'B': - switch(num){ - case '0': pin = PB_0; break; case '1': pin = PB_1; break; case '2': pin = PB_2; break; case '3': pin = PB_3; break; - case '4': pin = PB_4; break; case '5': pin = PB_5; break; case '6': pin = PB_6; break; case '7': pin = PB_7; break; - } - break; - case 'C': - switch(num){ - case '0': pin = PC_0; break; case '1': pin = PC_1; break; case '2': pin = PC_2; break; case '3': pin = PC_3; break; - case '4': pin = PC_4; break; case '5': pin = PC_5; break; case '6': pin = PC_6; break; case '7': pin = PC_7; break; - case '8': pin = PC_8; break; case '9': pin = PC_9; break; - } - break; - case 'D': - switch(num){ - case '0': pin = PD_0; break; case '1': pin = PD_1; break; case '2': pin = PD_2; break; case '3': pin = PD_3; break; - case '4': pin = PD_4; break; case '5': pin = PD_5; break; case '6': pin = PD_6; break; case '7': pin = PD_7; break; - case '8': pin = PD_8; break; case '9': pin = PD_9; break; - } - break; - case 'E': - switch(num){ - case '0': pin = PE_0; break; case '1': pin = PE_1; break; case '2': pin = PE_2; break; case '3': pin = PE_3; break; - case '4': pin = PE_4; break; case '5': pin = PE_5; break; case '6': pin = PE_6; break; case '7': pin = PE_7; break; - case '8': pin = PE_8; break; case '9': pin = PE_9; break; case 'A': pin = PE_A; break; - } - break; - case 'F': - switch(num){ - case '0': pin = PF_0; break; case '1': pin = PF_1; break; case '2': pin = PF_2; break; case '3': pin = PF_3; break; - case '4': pin = PF_4; break; case '5': pin = PF_5; break; - } - break; - case 'G': - switch(num){ - case '0': pin = PG_0; break; case '1': pin = PG_1; break; case '2': pin = PG_2; break; case '3': pin = PG_3; break; - case '4': pin = PG_4; break; case '5': pin = PG_5; break; case '6': pin = PG_6; break; case '7': pin = PG_7; break; - } - break; - case 'H': - switch(num){ - case '0': pin = PH_0; break; case '1': pin = PH_1; break; case '2': pin = PH_2; break; case '3': pin = PH_3; break; - case '4': pin = PH_4; break; case '5': pin = PH_5; break; case '6': pin = PH_6; break; case '7': pin = PH_7; break; - } - break; - case 'I': - switch(num){ - case '0': pin = PI_0; break; case '1': pin = PI_1; break; case '2': pin = PI_2; break; case '3': pin = PI_3; break; - case '4': pin = PI_4; break; case '5': pin = PI_5; break; case '6': pin = PI_6; break; case '7': pin = PI_7; break; - } - break; - case 'J': - switch(num){ - case '0': pin = PJ_0; break; case '1': pin = PJ_1; break; case '2': pin = PJ_2; break; case '3': pin = PJ_3; break; - case '4': pin = PJ_4; break; case '5': pin = PJ_5; break; case '6': pin = PJ_6; break; - } - break; - case 'K': - switch(num){ - case '0': pin = PK_0; break; case '1': pin = PK_1; break; case '2': pin = PK_2; break; case '3': pin = PK_3; break; - case '4': pin = PK_4; break; case '5': pin = PK_5; break; case '6': pin = PK_6; break; - } - break; - } - if(pin == NC){ - _AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "X,"); - continue; - } - // Initial input control pin - gpio_init(&gpio_test, pin); - if(write){ - gpio_dir(&gpio_test, PIN_OUTPUT); // Direction: Output - gpio_mode(&gpio_test, PullNone); // No pull - gpio_write(&gpio_test, data); - _AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "%d,", data); - }else{ - gpio_dir(&gpio_test, PIN_INPUT); // Direction: Input - gpio_mode(&gpio_test, PullUp); // Pull-High - val = gpio_read(&gpio_test); - _AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "%d,", val); - } - } - _AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "\n"); - // Recover debug info massage - ConfigDebugInfo = tConfigDebugInfo; -} - -void fATMR(void *arg) -{ - u32 idx; - - AT_PRINTK("[ATMR]: _AT_MP_SDR_TEST_"); -#ifdef CONFIG_SDR_EN - for (idx = 0; idx < 0x200000; idx = idx+4){ - HAL_WRITE32(0x30000000, idx, 0x12345678); - if (HAL_READ32(0x30000000, idx) != 0x12345678) { - AT_PRINTK("[ATMR]: SDR test fail addr 0x08x, value 0x08%x",(0x30000000+idx),HAL_READ32(0x30000000, idx)); - return; - } - } - AT_PRINTK("[ATMR]: SDR test success"); -#endif -} - -void fATMt(void *arg) -{ - int argc = 0; - char *argv[MAX_ARGC] = {0}; - - AT_PRINTK("[ATM#]: _AT_MP_TEST_"); - argc = parse_param(arg, argv); -} - -void fATMx(void *arg) -{ - AT_PRINTK("[ATM?]: _AT_MP_HELP_"); -} - -log_item_t at_mp_items[] = { - {"ATMG", fATMG,}, // MP GPIO test - {"ATMR", fATMR,}, // MP SDR test - {"ATM#", fATMt,}, // test command - {"ATM?", fATMx,}, // Help -#if CONFIG_ATCMD_MP_EXT0 - {"ATM0", fATM0,}, // MP ext0 AT command -#endif -}; - -void at_mp_init(void) -{ - log_service_add_table(at_mp_items, sizeof(at_mp_items)/sizeof(at_mp_items[0])); -} - -#if SUPPORT_LOG_SERVICE -log_module_init(at_mp_init); -#endif - -#endif // #if CONFIG_ATCMD_MP - diff --git a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_mp.h b/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_mp.h deleted file mode 100644 index 1b2d774..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_mp.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef __ATCMD_MP_H__ -#define __ATCMD_MP_H__ - -#define CONFIG_ATCMD_MP_EXT0 0 //support MP ext0 AT command - -typedef struct _at_command_mp_ext_item_{ - char *mp_ext_cmd; - int (*mp_ext_fun)(void **argv, int argc); - char *mp_ext_usage; -}at_mp_ext_item_t; - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_sys.c b/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_sys.c deleted file mode 100644 index 01ea88c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_sys.c +++ /dev/null @@ -1,1434 +0,0 @@ -#include -#ifdef CONFIG_AT_SYS - -#include "platform_stdlib.h" -//#include "platform_autoconf.h" -//#include "main.h" -#include "autoconf.h" -#include "hal_adc.h" -#include "gpio_api.h" // mbed -#include "sys_api.h" -#include "rtl8195a.h" -#include "flash_api.h" -#include "rtl_lib.h" -#include "build_info.h" -#include "analogin_api.h" -#include "log_service.h" -#include "atcmd_sys.h" -#include "osdep_api.h" -#include "atcmd_wifi.h" -#include "tcm_heap.h" -#if CONFIG_OTA_UPDATE -#include "update.h" -#endif - -#ifndef ATCMD_VER -#define ATVER_1 1 -#define ATVER_2 2 -#define ATCMD_VER ATVER_2 -#if CONFIG_EXAMPLE_UART_ATCMD -#define ATCMD_VER ATVER_2 -#else -#define ATCMD_VER ATVER_1 -#endif -#endif - -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) -#include "freertos_pmu.h" -#endif - -extern u32 ConfigDebugErr; -extern u32 ConfigDebugInfo; -extern u32 ConfigDebugWarn; -extern u32 CmdDumpWord(IN u16 argc, IN u8 *argv[]); -extern u32 CmdWriteWord(IN u16 argc, IN u8 *argv[]); -#if CONFIG_UART_XMODEM -extern void OTU_FW_Update(u8, u8, u32); -#endif - -struct _dev_id2name { - u8 id; - u8 *name; -}; - -struct _dev_id2name dev_id2name[] = { { UART0, "UART0" }, { UART1, "UART1" }, { -UART2, "UART2" }, { SPI0, "SPI0" }, { SPI1, "SPI1" }, { SPI2, "SPI2" }, { -SPI0_MCS, "SPI0_MCS" }, { I2C0, "I2C0" }, { I2C1, "I2C1" }, { I2C2, "I2C2" }, { -I2C3, "I2C3" }, { I2S0, "I2S0" }, { I2S1, "I2S1" }, { PCM0, "PCM0" }, { -PCM1, "PCM1" }, { ADC0, "ADC0" }, { DAC0, "DAC0" }, { DAC1, "DAC1" }, { -SDIOD, "SDIOD" }, { SDIOH, "SDIOH" }, { USBOTG, "USBOTG" }, { MII, "MII" }, { -WL_LED, "WL_LED" }, { WL_ANT0, "WL_ANT0" }, { WL_ANT1, "WL_ANT1" }, { -WL_BTCOEX, "WL_BTCOEX" }, { WL_BTCMD, "WL_BTCMD" }, { NFC, "NFC" }, { -PWM0, "PWM0" }, { PWM1, "PWM1" }, { PWM2, "PWM2" }, { PWM3, "PWM3" }, { -ETE0, "ETE0" }, { ETE1, "ETE1" }, { ETE2, "ETE2" }, { ETE3, "ETE3" }, { -EGTIM, "EGTIM" }, { SPI_FLASH, "SPI_FLASH" }, { SDR, "SDR" }, { JTAG, "JTAG" }, - { TRACE, "TRACE" }, { LOG_UART, "LOG_UART" }, { - LOG_UART_IR, "LOG_UART_IR" }, { SIC, "SIC" }, { EEPROM, "EEPROM" }, { - DEBUG, "DEBUG" }, { 255, "" } }; - -void fATSI(void *arg) { - uint32 x = 0; - int i; - u8 * s; - for (i = 0; dev_id2name[i].id != 255; i++) { - ReadHWPwrState(dev_id2name[i].id, &x); - s = "?"; - switch (x) { - case HWACT: - s = "ACT"; - break; - case HWCG: - s = "CG"; - break; - case HWINACT: - s = "WACT"; - break; - case UNDEF: - s = "UNDEF"; - break; - case ALLMET: - s = "ALLMET"; - break; - } - printf("Dev %s, state = %s\n", dev_id2name[i].name, s); - } - for (i = 0; i < _PORT_MAX; i++) - printf("Port %c state: 0x%04x\n", i + 'A', GPIOState[i]); -} - -//-------- AT SYS commands --------------------------------------------------------------- -void fATSD(void *arg) { - int argc = 0; - char *argv[MAX_ARGC] = { 0 }; - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, - "[ATSD]: _AT_SYSTEM_DUMP_REGISTER_"); - if (!arg) { - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSD] Usage: ATSD=REGISTER"); - return; - } - argc = parse_param(arg, argv); - if (argc == 2 || argc == 3) - CmdDumpWord(argc - 1, (unsigned char**) (argv + 1)); -} - -#if ATCMD_VER == ATVER_2 -void fATXD(void *arg) { - int argc = 0; - char *argv[MAX_ARGC] = { 0 }; - - AT_DBG_MSG(AT_FLAG_EDIT, AT_DBG_ALWAYS, - "[ATXD]: _AT_SYSTEM_WRITE_REGISTER_"); - if (!arg) { - AT_DBG_MSG(AT_FLAG_EDIT, AT_DBG_ALWAYS, - "[ATXD] Usage: ATXD=REGISTER,VALUE"); - return; - } - argc = parse_param(arg, argv); - if (argc == 3) - CmdWriteWord(argc - 1, (unsigned char**) (argv + 1)); -} -#endif - -#if ATCMD_VER == ATVER_1 - -void fATSC(void *arg) -{ - AT_DBG_MSG(AT_FLAG_OTA, AT_DBG_ALWAYS, "[ATSC]: _AT_SYSTEM_CLEAR_OTA_SIGNATURE_"); - sys_clear_ota_signature(); -} - -void fATSR(void *arg) -{ - AT_DBG_MSG(AT_FLAG_OTA, AT_DBG_ALWAYS, "[ATSR]: _AT_SYSTEM_RECOVER_OTA_SIGNATURE_"); - sys_recover_ota_signature(); -} - -#if CONFIG_UART_XMODEM -void fATSY(void *arg) -{ - if (HalGetChipId() < CHIP_ID_8195AM) { - OTU_FW_Update(0, 0, 115200); - } else { - // use xmodem to update, RX: PA_6, TX: PA_7, baudrate: 1M - OTU_FW_Update(0, 2, 115200); - } -} -#endif - -#if SUPPORT_MP_MODE -void fATSA(void *arg) -{ - u32 tConfigDebugInfo = ConfigDebugInfo; - int argc = 0, channel; - char *argv[MAX_ARGC] = {0}, *ptmp; - u16 offset, gain; - - AT_DBG_MSG(AT_FLAG_ADC, AT_DBG_ALWAYS, "[ATSA]: _AT_SYSTEM_ADC_TEST_"); - if(!arg) { - AT_DBG_MSG(AT_FLAG_ADC, AT_DBG_ALWAYS, "[ATSA] Usage: ATSA=CHANNEL(0~2)"); - AT_DBG_MSG(AT_FLAG_ADC, AT_DBG_ALWAYS, "[ATSA] Usage: ATSA=k_get"); - AT_DBG_MSG(AT_FLAG_ADC, AT_DBG_ALWAYS, "[ATSA] Usage: ATSA=k_set[offet(hex),gain(hex)]"); - return; - } - - argc = parse_param(arg, argv); - if(strcmp(argv[1], "k_get") == 0) { - sys_adc_calibration(0, &offset, &gain); -// AT_DBG_MSG(AT_FLAG_ADC, AT_DBG_ALWAYS, "[ATSA] offset = 0x%04X, gain = 0x%04X", offset, gain); - } else if(strcmp(argv[1], "k_set") == 0) { - if(argc != 4) { - AT_DBG_MSG(AT_FLAG_ADC, AT_DBG_ALWAYS, "[ATSA] Usage: ATSA=k_set[offet(hex),gain(hex)]"); - return; - } - offset = strtoul(argv[2], &ptmp, 16); - gain = strtoul(argv[3], &ptmp, 16); - sys_adc_calibration(1, &offset, &gain); -// AT_DBG_MSG(AT_FLAG_ADC, AT_DBG_ALWAYS, "[ATSA] offset = 0x%04X, gain = 0x%04X", offset, gain); - } else { - channel = atoi(argv[1]); - if(channel < 0 || channel > 2) { - AT_DBG_MSG(AT_FLAG_ADC, AT_DBG_ALWAYS, "[ATSA] Usage: ATSA=CHANNEL(0~2)"); - return; - } - analogin_t adc; - u16 adcdat; - - // Remove debug info massage - ConfigDebugInfo = 0; - if(channel == 0) - analogin_init(&adc, AD_1); - else if(channel == 1) - analogin_init(&adc, AD_2); - else - analogin_init(&adc, AD_3); - adcdat = analogin_read_u16(&adc)>>4; - analogin_deinit(&adc); - // Recover debug info massage - ConfigDebugInfo = tConfigDebugInfo; - - AT_DBG_MSG(AT_FLAG_ADC, AT_DBG_ALWAYS, "[ATSA] A%d = 0x%04X", channel, adcdat); - } -} - -void fATSG(void *arg) -{ - gpio_t gpio_test; - int argc = 0, val; - char *argv[MAX_ARGC] = {0}, port, num; - PinName pin = NC; - u32 tConfigDebugInfo = ConfigDebugInfo; - - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATSG]: _AT_SYSTEM_GPIO_TEST_"); - if(!arg) { - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATSG] Usage: ATSG=PINNAME(ex:A0)"); - return; - } else { - argc = parse_param(arg, argv); - if(argc != 2) { - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATSG] Usage: ATSG=PINNAME(ex:A0)"); - return; - } - } - port = argv[1][0]; - num = argv[1][1]; - if(port >= 'a' && port <= 'z') - port -= ('a' - 'A'); - if(num >= 'a' && num <= 'z') - num -= ('a' - 'A'); - switch(port) { - case 'A': - switch(num) { - case '0': pin = PA_0; break; case '1': pin = PA_1; break; case '2': pin = PA_2; break; case '3': pin = PA_3; break; - case '4': pin = PA_4; break; case '5': pin = PA_5; break; case '6': pin = PA_6; break; case '7': pin = PA_7; break; - } - break; - case 'B': - switch(num) { - case '0': pin = PB_0; break; case '1': pin = PB_1; break; case '2': pin = PB_2; break; case '3': pin = PB_3; break; - case '4': pin = PB_4; break; case '5': pin = PB_5; break; case '6': pin = PB_6; break; case '7': pin = PB_7; break; - } - break; - case 'C': - switch(num) { - case '0': pin = PC_0; break; case '1': pin = PC_1; break; case '2': pin = PC_2; break; case '3': pin = PC_3; break; - case '4': pin = PC_4; break; case '5': pin = PC_5; break; case '6': pin = PC_6; break; case '7': pin = PC_7; break; - case '8': pin = PC_8; break; case '9': pin = PC_9; break; - } - break; - case 'D': - switch(num) { - case '0': pin = PD_0; break; case '1': pin = PD_1; break; case '2': pin = PD_2; break; case '3': pin = PD_3; break; - case '4': pin = PD_4; break; case '5': pin = PD_5; break; case '6': pin = PD_6; break; case '7': pin = PD_7; break; - case '8': pin = PD_8; break; case '9': pin = PD_9; break; - } - break; - case 'E': - switch(num) { - case '0': pin = PE_0; break; case '1': pin = PE_1; break; case '2': pin = PE_2; break; case '3': pin = PE_3; break; - case '4': pin = PE_4; break; case '5': pin = PE_5; break; case '6': pin = PE_6; break; case '7': pin = PE_7; break; - case '8': pin = PE_8; break; case '9': pin = PE_9; break; case 'A': pin = PE_A; break; - } - break; - case 'F': - switch(num) { - case '0': pin = PF_0; break; case '1': pin = PF_1; break; case '2': pin = PF_2; break; case '3': pin = PF_3; break; - case '4': pin = PF_4; break; case '5': pin = PF_5; break; - } - break; - case 'G': - switch(num) { - case '0': pin = PG_0; break; case '1': pin = PG_1; break; case '2': pin = PG_2; break; case '3': pin = PG_3; break; - case '4': pin = PG_4; break; case '5': pin = PG_5; break; case '6': pin = PG_6; break; case '7': pin = PG_7; break; - } - break; - case 'H': - switch(num) { - case '0': pin = PH_0; break; case '1': pin = PH_1; break; case '2': pin = PH_2; break; case '3': pin = PH_3; break; - case '4': pin = PH_4; break; case '5': pin = PH_5; break; case '6': pin = PH_6; break; case '7': pin = PH_7; break; - } - break; - case 'I': - switch(num) { - case '0': pin = PI_0; break; case '1': pin = PI_1; break; case '2': pin = PI_2; break; case '3': pin = PI_3; break; - case '4': pin = PI_4; break; case '5': pin = PI_5; break; case '6': pin = PI_6; break; case '7': pin = PI_7; break; - } - break; - case 'J': - switch(num) { - case '0': pin = PJ_0; break; case '1': pin = PJ_1; break; case '2': pin = PJ_2; break; case '3': pin = PJ_3; break; - case '4': pin = PJ_4; break; case '5': pin = PJ_5; break; case '6': pin = PJ_6; break; - } - break; - case 'K': - switch(num) { - case '0': pin = PK_0; break; case '1': pin = PK_1; break; case '2': pin = PK_2; break; case '3': pin = PK_3; break; - case '4': pin = PK_4; break; case '5': pin = PK_5; break; case '6': pin = PK_6; break; - } - break; - } - if(pin == NC) { - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATSG]: Invalid Pin Name"); - return; - } - // Remove debug info massage - ConfigDebugInfo = 0; - // Initial input control pin - gpio_init(&gpio_test, pin); - gpio_dir(&gpio_test, PIN_INPUT);// Direction: Input - gpio_mode(&gpio_test, PullUp);// Pull-High - val = gpio_read(&gpio_test); - // Recover debug info massage - ConfigDebugInfo = tConfigDebugInfo; - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATSG] %c%c = %d", port, num, val); -} - -void fATSP(void *arg) -{ - int argc = 0; - char *argv[MAX_ARGC] = {0}; - - unsigned long timeout; // ms - unsigned long time_begin, time_current; - - gpio_t gpiob_1; - int val_old, val_new; - - int expected_zerocount, zerocount; - int test_result; - - // parameter check - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATSP]: _AT_SYSTEM_POWER_PIN_TEST_"); - if(!arg) { - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATSP]: Usage: ATSP=gpiob1[timeout,zerocount]"); - } else { - argc = parse_param(arg, argv); - if (argc < 2) { - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATSP]: Usage: ATSP=gpiob1[timeout,zerocount]"); - return; - } - } - - if ( strcmp(argv[1], "gpiob1" ) == 0 ) { - if (argc < 4) { - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATSP]: Usage: ATSP=gpiob1[timeout,zerocount]"); - return; - } - - // init gpiob1 test - test_result = 0; - timeout = strtoul(argv[2], NULL, 10); - expected_zerocount = atoi(argv[3]); - zerocount = 0; - val_old = 1; - - sys_log_uart_off(); - - gpio_init(&gpiob_1, PB_1); - gpio_dir(&gpiob_1, PIN_INPUT); - gpio_mode(&gpiob_1, PullDown); - - // gpiob1 test ++ - time_begin = time_current = xTaskGetTickCount(); - while (time_current < time_begin + timeout) { - val_new = gpio_read(&gpiob_1); - - if (val_new != val_old && val_new == 0) { - - zerocount ++; - if (zerocount == expected_zerocount) { - test_result = 1; - break; - } - } - - val_old = val_new; - time_current = xTaskGetTickCount(); - } - // gpio test -- - - sys_log_uart_on(); - - if (test_result == 1) { - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATSP]: success"); - } else { - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATSP]: fail, it only got %d zeros", zerocount); - } - } -} - -int write_otu_to_system_data(flash_t *flash, uint32_t otu_addr) -{ - uint32_t data, i = 0; - flash_read_word(flash, FLASH_SYSTEM_DATA_ADDR+0xc, &data); - //printf("\n\r[%s] data 0x%x otu_addr 0x%x", __FUNCTION__, data, otu_addr); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: data 0x%x otu_addr 0x%x", data, otu_addr); - if(data == ~0x0) { - flash_write_word(flash, FLASH_SYSTEM_DATA_ADDR+0xc, otu_addr); - } else { - //erase backup sector - flash_erase_sector(flash, FLASH_RESERVED_DATA_BASE); - //backup system data to backup sector - for(i = 0; i < 0x1000; i+= 4) { - flash_read_word(flash, FLASH_SYSTEM_DATA_ADDR + i, &data); - if(i == 0xc) - data = otu_addr; - flash_write_word(flash, FLASH_RESERVED_DATA_BASE + i,data); - } - //erase system data - flash_erase_sector(flash, FLASH_SYSTEM_DATA_ADDR); - //write data back to system data - for(i = 0; i < 0x1000; i+= 4) { - flash_read_word(flash, FLASH_RESERVED_DATA_BASE + i, &data); - flash_write_word(flash, FLASH_SYSTEM_DATA_ADDR + i,data); - } - //erase backup sector - flash_erase_sector(flash, FLASH_RESERVED_DATA_BASE); - } - return 0; -} - -void fATSB(void *arg) -{ - int argc = 0; - char *argv[MAX_ARGC] = {0}; - u32 boot_gpio, rb_boot_gpio; - u8 gpio_pin; - u8 uart_port, uart_index; - u8 gpio_pin_bar; - u8 uart_port_bar; - flash_t flash; - - // parameter check - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: _AT_SYSTEM_BOOT_OTU_PIN_SET_"); - if(!arg) { - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: Usage: ATSB=[GPIO_PIN, TRIGER_MODE, UART]"); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: GPIO_PIN: PB_1, PC_4 ...."); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: TRIGER_MODE: low_trigger, high_trigger"); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: UART: UART0, UART2"); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: example: ATSB=[PC_2, low_trigger, UART2]"); - - } else { - argc = parse_param(arg, argv); - if (argc != 4 ) { - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: Usage: ATSB=[GPIO_PIN, TRIGER_MODE, UART]"); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: GPIO_PIN: PB_1, PC_4 ...."); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: TRIGER_MODE: low_trigger, high_trigger"); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: UART: UART0, UART2"); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: example: ATSB=[PC_2, low_trigger, UART2]"); - return; - } - } - - if ( strncmp(argv[1], "P", 1) == 0 && strlen(argv[1]) == 4 - && (strcmp(argv[2], "low_trigger") == 0 || strcmp(argv[2], "high_trigger") == 0) - && strncmp(argv[3], "UART", 4) == 0 && strlen(argv[3]) == 5) { - if((0x41 <= argv[1][1] <= 0x45) && (0x30 <= argv[1][3] <= 0x39) &&(0x30 <= argv[1][4] <= 0x32)) { - if(strcmp(argv[2], "high_trigger") == 0) - gpio_pin = 1<< 7 | ((argv[1][1]-0x41)<<4) | (argv[1][3] - 0x30); - else - gpio_pin = ((argv[1][1]-0x41)<<4) | (argv[1][3] - 0x30); - gpio_pin_bar = ~gpio_pin; - uart_index = argv[3][4] - 0x30; - if(uart_index == 0) - uart_port = (uart_index<<4)|2; - else if(uart_index == 2) - uart_port = (uart_index<<4)|0; - else { - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: Input UART index error. Please choose UART0 or UART2."); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: example: ATSB=[PC_2, low_trigger, UART2]"); - return; - } - uart_port_bar = ~uart_port; - boot_gpio = uart_port_bar<<24 | uart_port<<16 | gpio_pin_bar<<8 | gpio_pin; - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]:gpio_pin 0x%x", gpio_pin); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]:gpio_pin_bar 0x%x", gpio_pin_bar); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]:uart_port 0x%x", uart_port); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]:uart_port_bar 0x%x", uart_port_bar); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]:boot_gpio 0x%x", boot_gpio); - write_otu_to_system_data(&flash, boot_gpio); - flash_read_word(&flash, FLASH_SYSTEM_DATA_ADDR+0x0c, &rb_boot_gpio); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]:Read 0x900c 0x%x", rb_boot_gpio); - } else { - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: Usage: ATSB=[GPIO_PIN, TRIGER_MODE, UART]"); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: GPIO_PIN: PB_1, PC_4 ...."); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: TRIGER_MODE: low_trigger, high_trigger"); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: UART: UART0, UART2"); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: example: ATSB=[PC_2, low_trigger, UART2]"); - } - } else { - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: Usage: ATSB=[GPIO_PIN, TRIGER_MODE, UART]"); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: GPIO_PIN: PB_1, PC_4 ...."); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: TRIGER_MODE: low_trigger, high_trigger"); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: UART: UART0, UART2"); - AT_DBG_MSG(AT_FLAG_DUMP, AT_DBG_ALWAYS, "[ATSB]: example: ATSB=[PC_2, low_trigger, UART2]"); - return; - } -} -#endif - -#if (configGENERATE_RUN_TIME_STATS == 1) -void fATSS(void *arg) // Show CPU stats -{ - AT_PRINTK("[ATSS]: _AT_SYSTEM_CPU_STATS_"); - char *cBuffer = pvPortMalloc(512); - if(cBuffer != NULL) { - vTaskGetRunTimeStats((char *)cBuffer); - AT_PRINTK("%s", cBuffer); - } - vPortFree(cBuffer); -} -#endif - -void fATSs(void *arg) -{ - int argc = 0; - char *argv[MAX_ARGC] = {0}; - - AT_PRINTK("[ATS@]: _AT_SYSTEM_DBG_SETTING_"); - if(!arg) { - AT_PRINTK("[ATS@] Usage: ATS@=[LEVLE,FLAG]"); - } else { - argc = parse_param(arg, argv); - if(argc == 3) { - char *ptmp; - gDbgLevel = atoi(argv[1]); - gDbgFlag = strtoul(argv[2], &ptmp, 16); - } - } - AT_PRINTK("[ATS@] level = %d, flag = 0x%08X", gDbgLevel, gDbgFlag); -} - -void fATSc(void *arg) -{ - int argc = 0, config = 0; - char *argv[MAX_ARGC] = {0}; - - AT_PRINTK("[ATS!]: _AT_SYSTEM_CONFIG_SETTING_"); - if(!arg) { - AT_PRINTK("[ATS!] Usage: ATS!=[CONFIG(0,1,2),FLAG]"); - } else { - argc = parse_param(arg, argv); - if(argc == 3) { - char *ptmp; - config = atoi(argv[1]); - if(config == 0) - ConfigDebugErr = strtoul(argv[2], &ptmp, 16); - if(config == 1) - ConfigDebugInfo = strtoul(argv[2], &ptmp, 16); - if(config == 2) - ConfigDebugWarn = strtoul(argv[2], &ptmp, 16); - } - } - AT_PRINTK("[ATS!] ConfigDebugErr = 0x%08X", ConfigDebugErr); - AT_PRINTK("[ATS!] ConfigDebugInfo = 0x%08X", ConfigDebugInfo); - AT_PRINTK("[ATS!] ConfigDebugWarn = 0x%08X", ConfigDebugWarn); -} - -#define SUPPORT_CP_TEST 0 -#if SUPPORT_CP_TEST -extern void MFi_auth_test(void); -void fATSM(void *arg) -{ - AT_PRINTK("[ATSM]: _AT_SYSTEM_CP_"); - MFi_auth_test(); -} -#endif - -void fATSt(void *arg) -{ - AT_PRINTK("[ATS#]: _AT_SYSTEM_TEST_"); - DBG_8195A("\nCLK CPU\t\t%d Hz\nRAM heap\t%d bytes\nTCM heap\t%d bytes\n", - HalGetCpuClk(), xPortGetFreeHeapSize(), tcm_heap_freeSpace()); - dump_mem_block_list(); - tcm_heap_dump(); - DBG_8195A("\n"); -} - -void fATSJ(void *arg) -{ - int argc = 0, config = 0; - char *argv[MAX_ARGC] = {0}; - AT_PRINTK("[ATSJ]: _AT_SYSTEM_JTAG_"); - if(!arg) { - AT_PRINTK("[ATS!] Usage: ATSJ=off"); - } else { - argc = parse_param(arg, argv); - if (strcmp(argv[1], "off" ) == 0) - sys_jtag_off(); - else - AT_PRINTK("ATSL=%s is not supported!", argv[1]); - } -} - -void fATSx(void *arg) -{ -// uint32_t ability = 0; - char buf[64]; - - AT_PRINTK("[ATS?]: _AT_SYSTEM_HELP_"); - AT_PRINTK("[ATS?]: COMPILE TIME: %s", RTL8195AFW_COMPILE_TIME); -// wifi_get_drv_ability(&ability); - strcpy(buf, "v"); -// if(ability & 0x1) -// strcat(buf, "m"); - strcat(buf, ".3.5." RTL8195AFW_COMPILE_DATE); - AT_PRINTK("[ATS?]: SW VERSION: %s", buf); -} -#elif ATCMD_VER == ATVER_2 - -#define ATCMD_VERSION "v2" //ATCMD MAJOR VERSION, AT FORMAT CHANGED -#define ATCMD_SUBVERSION "2" //ATCMD MINOR VERSION, NEW COMMAND ADDED -#define ATCMD_REVISION "2" //ATCMD FIX BUG REVISION -#define SDK_VERSION "v3.5" //SDK VERSION -extern void sys_reset(void); -void print_system_at(void *arg); -extern void print_wifi_at(void *arg); -extern void print_tcpip_at(void *arg); - -// uart version 2 echo info -extern unsigned char gAT_Echo; - -void fATS0(void *arg) { - at_printf("\r\n[AT] OK"); -} - -void fATSh(void *arg) { - // print common AT command - at_printf("\r\n[ATS?] "); - at_printf("\r\nCommon AT Command:"); - print_system_at(arg); -#if CONFIG_WLAN - at_printf("\r\nWi-Fi AT Command:"); - print_wifi_at(arg); -#endif - -#if CONFIG_TRANSPORT - at_printf("\r\nTCP/IP AT Command:"); - print_tcpip_at(arg); -#endif - - at_printf("\r\n[ATS?] OK"); -} - -void fATSR(void *arg) { - at_printf("\r\n[ATSR] OK"); - sys_reset(); -} - -void fATSV(void *arg) { - char at_buf[32]; - char fw_buf[32]; - char cspimode[4] = { 'S', 'D', 'Q', '?' }; - - if (fspic_isinit == 0) { - flash_turnon(); - flash_init(&flashobj); - SpicDisableRtl8195A(); - } - printf( - "DeviceID: %02X, Flash Size: %d bytes, FlashID: %02X%02X%02X/%d, SpicMode: %cIO\n", - HalGetChipId(), (u32) (1 << flashobj.SpicInitPara.id[2]), - flashobj.SpicInitPara.id[0], flashobj.SpicInitPara.id[1], - flashobj.SpicInitPara.id[2], flashobj.SpicInitPara.flashtype, - cspimode[flashobj.SpicInitPara.Mode.BitMode]); - // get at version - strcpy(at_buf, ATCMD_VERSION"."ATCMD_SUBVERSION"."ATCMD_REVISION); - - // get fw version - strcpy(fw_buf, SDK_VERSION); - printf("%s,%s(%s)\n", at_buf, fw_buf, RTL8195AFW_COMPILE_TIME); - at_printf("\r\n[ATSV] OK:%s,%s(%s)", at_buf, fw_buf, - RTL8195AFW_COMPILE_TIME); -} - -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) - -void fATSP(void *arg) { - int argc = 0; - char *argv[MAX_ARGC] = { 0 }; - - uint32_t lock_id; - uint32_t bitmap; - - if (!arg) { - AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ERROR, - "\r\n[ATSP] Usage: ATSP="); - at_printf("\r\n[ATSP] ERROR:1"); - return; - } else { - if ((argc = parse_param(arg, argv)) != 2) { - AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ERROR, - "\r\n[ATSP] Usage: ATSP="); - at_printf("\r\n[ATSP] ERROR:1"); - return; - } - } - - switch (argv[1][0]) { - case 'a': // acquire - { - acquire_wakelock(WAKELOCK_OS); - //at_printf("\r\n[ATSP] wakelock:0x%08x", get_wakelock_status()); - break; - } - - case 'r': // release - { - release_wakelock(WAKELOCK_OS); - //at_printf("\r\n[ATSP] wakelock:0x%08x", get_wakelock_status()); - break; - } - - case '?': // get status - break; - default: - AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ERROR, - "\r\n[ATSP] Usage: ATSP="); - at_printf("\r\n[ATSP] ERROR:2"); - return; - } - bitmap = pmu_get_wakelock_status(); - at_printf("\r\n[ATSP] OK:%s", (bitmap&WAKELOCK_OS)?"1":"0"); -} -#endif - -void fATSE(void *arg) { - int argc = 0; - int echo = 0, mask = gDbgFlag, dbg_lv = gDbgLevel; - char *argv[MAX_ARGC] = { 0 }; - int err_no = 0; - - AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ALWAYS, - "[ATSE]: _AT_SYSTEM_ECHO_DBG_SETTING"); - if (!arg) { - AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ERROR, - "[ATSE] Usage: ATSE=,,"); - err_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - - if (argc < 2 || argc > 4) { - err_no = 2; - goto exit; - } - -#if CONFIG_EXAMPLE_UART_ATCMD - if (argv[1] != NULL) { - echo = atoi(argv[1]); - if (echo > 1 || echo < 0) { - err_no = 3; - goto exit; - } - gAT_Echo = echo ? 1 : 0; - } -#endif - - if ((argc > 2) && (argv[2] != NULL)) { - mask = strtoul(argv[2], NULL, 0); - at_set_debug_mask(mask); - } - - if ((argc == 4) && (argv[3] != NULL)) { - dbg_lv = strtoul(argv[3], NULL, 0); - at_set_debug_level(dbg_lv); - } - - exit: if (err_no) - at_printf("\r\n[ATSE] ERROR:%d", err_no); - else - at_printf("\r\n[ATSE] OK"); - return; -} -#if CONFIG_WLAN -#if CONFIG_WEBSERVER -#include "wifi_structures.h" -#include "wifi_constants.h" -extern rtw_wifi_setting_t wifi_setting; -void fATSW(void *arg) { - int argc = 0; - char *argv[MAX_ARGC] = {0}; - - if (!arg) { - AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ERROR, "\r\n[ATSW] Usage: ATSW="); - at_printf("\r\n[ATSW] ERROR:1"); - return; - } else { - if((argc = parse_param(arg, argv)) != 2) { - AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ERROR, "\r\n[ATSW] Usage: ATSW="); - at_printf("\r\n[ATSW] ERROR:1"); - return; - } - } - - if(argv[1][0]!='c'&&argv[1][0]!='s') { - AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ERROR, "\r\n[ATSW] Usage: ATSW="); - at_printf("\r\n[ATSW] ERROR:2"); - return; - } - - // make sure AP mode - LoadWifiConfig(); - if(wifi_setting.mode != RTW_MODE_AP) { - at_printf("\r\n[ATSW] ERROR:3"); - return; - } - - switch(argv[1][0]) { - case 'c': // create webserver - { - start_web_server(); - break; - } - case 's': // stop webserver - { - stop_web_server(); - break; - } - } - at_printf("\r\n[ATSW] OK"); -} -#endif - -extern int EraseApinfo(); -//extern int Erase_Fastconnect_data(); - -void fATSY(void *arg) { -#if CONFIG_EXAMPLE_WLAN_FAST_CONNECT -// Erase_Fastconnect_data(); -#endif - -#if CONFIG_WEBSERVER - EraseApinfo(); -#endif - -#if CONFIG_EXAMPLE_UART_ATCMD - extern int reset_uart_atcmd_setting(void); - reset_uart_atcmd_setting(); -#endif - -#if CONFIG_OTA_UPDATE - // Reset ota image signature - cmd_ota_image(0); -#endif - - at_printf("\r\n[ATSY] OK"); - // reboot - sys_reset(); -} - -#if CONFIG_OTA_UPDATE -extern int wifi_is_connected_to_ap(void); -void fATSO(void *arg) { - int argc = 0; - char *argv[MAX_ARGC] = { 0 }; - - if (!arg) { - AT_DBG_MSG(AT_FLAG_OTA, AT_DBG_ERROR, - "\r\n[ATSO] Usage: ATSO=,"); - at_printf("\r\n[ATSO] ERROR:1"); - return; - } - argv[0] = "update"; - if ((argc = parse_param(arg, argv)) != 3) { - AT_DBG_MSG(AT_FLAG_OTA, AT_DBG_ERROR, - "\r\n[ATSO] Usage: ATSO=,"); - at_printf("\r\n[ATSO] ERROR:1"); - return; - } - - // check wifi connect first - if (wifi_is_connected_to_ap() == 0) { - cmd_update(argc, argv); - at_printf("\r\n[ATSO] OK"); - - } else { - at_printf("\r\n[ATSO] ERROR:3"); - } -} - -void fATSC(void *arg) { - int argc = 0; - char *argv[MAX_ARGC] = { 0 }; - int cmd = 0; - - if (!arg) { - AT_DBG_MSG(AT_FLAG_OTA, AT_DBG_ERROR, "\r\n[ATSC] Usage: ATSC=<0/1>"); - at_printf("\r\n[ATSC] ERROR:1"); - return; - } - if ((argc = parse_param(arg, argv)) != 2) { - AT_DBG_MSG(AT_FLAG_OTA, AT_DBG_ERROR, "\r\n[ATSC] Usage: ATSC=<0/1>"); - at_printf("\r\n[ATSC] ERROR:1"); - return; - } - - cmd = atoi(argv[1]); - - if ((cmd != 0) && (cmd != 1)) { - at_printf("\r\n[ATSC] ERROR:2"); - return; - } - - at_printf("\r\n[ATSC] OK"); - - if (cmd == 1) { - cmd_ota_image(1); - } else { - cmd_ota_image(0); - } - // reboot - sys_reset(); -} -#endif - -#if CONFIG_EXAMPLE_UART_ATCMD -extern const u32 log_uart_support_rate[]; - -void fATSU(void *arg) { - int argc = 0; - char *argv[MAX_ARGC] = { 0 }; - u32 baud = 0; - u8 databits = 0; - u8 stopbits = 0; - u8 parity = 0; - u8 flowcontrol = 0; - u8 configmode = 0; - int i; - UART_LOG_CONF uartconf; - - if (!arg) { - AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ERROR, - "[ATSU] Usage: ATSU=,,,,,"); - at_printf("\r\n[ATSU] ERROR:1"); - return; - } - if ((argc = parse_param(arg, argv)) != 7) { - if(argv[1][0] == '?') { - read_uart_atcmd_setting_from_system_data(&uartconf); - at_printf("\r\n"); - at_printf( "AT_UART_CONF: %d,%d,%d,%d,%d", - uartconf.BaudRate, uartconf.DataBits, uartconf.StopBits, - uartconf.Parity, uartconf.FlowControl); -// return; - } - else { - AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ERROR, - "[ATSU] Usage: ATSU=,,,,,"); - at_printf("\r\n[ATSU] ERROR:1"); - return; - } - } - else { - baud = atoi(argv[1]); - databits = atoi(argv[2]); - stopbits = atoi(argv[3]); - parity = atoi(argv[4]); - flowcontrol = atoi(argv[5]); - configmode = atoi(argv[6]); - /* - // Check Baud rate - for (i=0; log_uart_support_rate[i]!=0xFFFFFF; i++) { - if (log_uart_support_rate[i] == baud) { - break; - } - } - - if (log_uart_support_rate[i]== 0xFFFFFF) { - at_printf("\r\n[ATSU] ERROR:2"); - return; - } - */ - if (((databits < 5) || (databits > 8)) || ((stopbits < 1) || (stopbits > 2)) - || ((parity < 0) || (parity > 2)) - || ((flowcontrol < 0) || (flowcontrol > 1)) - || ((configmode < 0) || (configmode > 3)) ) { - at_printf("\r\n[ATSU] ERROR:2"); - return; - } - memset((void*) &uartconf, 0, sizeof(UART_LOG_CONF)); - uartconf.BaudRate = baud; - uartconf.DataBits = databits; - uartconf.StopBits = stopbits; - uartconf.Parity = parity; - uartconf.FlowControl = flowcontrol; - AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ALWAYS, "AT_UART_CONF: %d,%d,%d,%d,%d", - uartconf.BaudRate, uartconf.DataBits, uartconf.StopBits, - uartconf.Parity, uartconf.FlowControl); - switch (configmode) { - case 0: // set current configuration, won't save - uart_atcmd_reinit(&uartconf); - break; - case 1: // set current configuration, and save - write_uart_atcmd_setting_to_system_data(&uartconf); - uart_atcmd_reinit(&uartconf); - break; - case 2: // set configuration, reboot to take effect - write_uart_atcmd_setting_to_system_data(&uartconf); - break; - } - } - at_printf("\r\n[ATSU] OK"); -} -#endif //#if CONFIG_EXAMPLE_UART_ATCMD -#endif //#if CONFIG_WLAN - -void fATSG(void *arg) { - gpio_t gpio_ctrl; - int argc = 0, val, error_no = 0; - char *argv[MAX_ARGC] = { 0 }, port, num; - PinName pin = NC; - - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "[ATSG]: _AT_SYSTEM_GPIO_CTRL_"); - - if (!arg) { - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ERROR, - "[ATSG] Usage: ATSG=,,,,"); - error_no = 1; - goto exit; - } - if ((argc = parse_param(arg, argv)) < 3) { - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ERROR, - "[ATSG] Usage: ATSG=,,,,"); - error_no = 2; - goto exit; - } - - port = argv[2][1]; - num = strtoul(&argv[2][3], NULL, 0); - port -= 'A'; - pin = (port << 4 | num); - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "PORT: %s[%d]", argv[2], pin); - - if (gpio_set(pin) == 0xff) { - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ERROR, "[ATSG]: Invalid Pin Name [%d]", - pin); - error_no = 3; - goto exit; - } - - gpio_init(&gpio_ctrl, pin); - if (argv[4]) { - int dir = atoi(argv[4]); - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "DIR: %s", argv[4]); - gpio_dir(&gpio_ctrl, dir); - } - if (argv[5]) { - int pull = atoi(argv[5]); - AT_DBG_MSG(AT_FLAG_GPIO, AT_DBG_ALWAYS, "PULL: %s", argv[5]); - gpio_mode(&gpio_ctrl, pull); - } - if (argv[1][0] == 'R') { - val = gpio_read(&gpio_ctrl); - } else { - val = atoi(argv[3]); - gpio_write(&gpio_ctrl, val); - } - - exit: if (error_no) { - at_printf("\r\n[ATSG] ERROR:%d", error_no); - } else { - at_printf("\r\n[ATSG] OK:%d", val); - } -} - -#endif //#elif ATCMD_VER == ATVER_2 -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) -/* - * bitmask: - * bit0: OS - * bit1: WLAN - * bit2: LOGUART - * bit3: SDIO - */ -void fATSL(void *arg) { - int argc = 0; - char *argv[MAX_ARGC] = { 0 }; - int err_no = 0; - uint32_t lock_id; - - AT_DBG_MSG(AT_FLAG_OS, AT_DBG_ALWAYS, "[ATSL]: _AT_SYS_WAKELOCK_TEST_"); - - if (!arg) { - AT_DBG_MSG(AT_FLAG_OS, AT_DBG_ALWAYS, - "[ATSL] Usage ATSL=[a/r/?][bitmask]"); - err_no = 1; - goto exit; - } else { - argc = parse_param(arg, argv); - if (argc < 2) { - AT_DBG_MSG(AT_FLAG_OS, AT_DBG_ALWAYS, - "[ATSL] Usage ATSL=[a/r/?][bitmask]"); - err_no = 2; - goto exit; - } - } - - switch (argv[1][0]) { - case 'a': // acquire - { - if (argc == 3) { - lock_id = strtoul(argv[2], NULL, 16); - acquire_wakelock(lock_id); - } - AT_DBG_MSG(AT_FLAG_OS, AT_DBG_ALWAYS, "[ATSL] wakelock:0x%08x", - pmu_get_wakelock_status()); - break; - } - - case 'r': // release - { - if (argc == 3) { - lock_id = strtoul(argv[2], NULL, 16); - release_wakelock(lock_id); - } - AT_DBG_MSG(AT_FLAG_OS, AT_DBG_ALWAYS, "[ATSL] wakelock:0x%08x", - pmu_get_wakelock_status()); - break; - } - - case '?': // get status - AT_DBG_MSG(AT_FLAG_OS, AT_DBG_ALWAYS, "[ATSL] wakelock:0x%08x", - pmu_get_wakelock_status()); -#if (configGENERATE_RUN_TIME_STATS == 1) - char *cBuffer = pvPortMalloc(512); - if (cBuffer != NULL) { - pmu_get_wakelock_hold_stats((char *) cBuffer); - AT_DBG_MSG(AT_FLAG_OS, AT_DBG_ALWAYS, "%s", cBuffer); - } - vPortFree(cBuffer); -#endif - break; - -#if (configGENERATE_RUN_TIME_STATS == 1) - case 'c': // clean wakelock info (for recalculate wakelock hold time) - AT_DBG_MSG(AT_FLAG_OS, AT_DBG_ALWAYS, "[ATSL] clean wakelock stat"); - pmu_clean_wakelock_stat(); - break; -#endif - default: - AT_DBG_MSG(AT_FLAG_OS, AT_DBG_ALWAYS, - "[ATSL] Usage ATSL=[a/r/?][bitmask]"); - err_no = 3; - break; - } - exit: -#if ATCMD_VER == ATVER_2 - if (err_no) - at_printf("\r\n[ATSL] ERROR:%d", err_no); - else - at_printf("\r\n[ATSL] OK:0x%08x", pmu_get_wakelock_status()); -#endif - return; -} - -#if CONFIG_UART_XMODEM -void fATSX(void *arg) -{ - if (HalGetChipId() < CHIP_ID_8195AM) { - - // use xmodem to update, RX: PC_0, TX: PC_3, baudrate: 1M - OTU_FW_Update(0, 0, 115200); - // use xmodem to update, RX: PE_3, TX: PE_0, baudrate: 1M - // JTAG Off! - // OTU_FW_Update(0, 1, 115200); - } - else { - // use xmodem to update, RX: PA_6, TX: PA_7, baudrate: 1M - OTU_FW_Update(0, 2, 115200); - }; - at_printf("\r\n[ATSX] OK"); -} -#endif - -#endif - -void print_hex_dump(uint8_t *buf, int len, unsigned char k) { - uint32_t ss[2]; - ss[0] = 0x78323025; // "%02x" - ss[1] = k; // ","...'\0' - uint8_t * ptr = buf; - while (len--) { - if (len == 0) - ss[1] = 0; - printf((uint8_t *) &ss[0], *ptr++); - } -} - -//ATFD - Flash Data Dump -void fATFD(void *arg) { - int argc = 0; - char *argv[MAX_ARGC] = { 0 }; -#if DEBUG_AT_USER_LEVEL > 3 - printf("ATFD: _AT_FLASH_DUMP_\n"); -#endif - if (!arg) { - printf("Usage: ATFD=faddr(HEX),[size]\n"); - } else { - argc = parse_param(arg, argv); - if (argc >= 1) { - int addr; - sscanf(argv[1], "%x", &addr); - int size = 0; - if (argc > 2) - size = atoi(argv[2]); - if (size <= 0 || size > 16384) - size = 1; - u32 symbs_line = 32; - u32 rdsize = 8 * symbs_line; - uint8_t *flash_data = (uint8_t *) malloc(rdsize); - while (size) { - if (size < rdsize) - rdsize = size; - else - rdsize = 8 * symbs_line; - flash_stream_read(&flashobj, addr, rdsize, flash_data); - uint8_t *ptr = flash_data; - while (ptr < flash_data + rdsize) { - if (symbs_line > size) - symbs_line = size; - printf("%08X ", addr); - print_hex_dump(ptr, symbs_line, ' '); - printf("\r\n"); - addr += symbs_line; - ptr += symbs_line; - size -= symbs_line; - if (size == 0) - break; - } - } - free(flash_data); - } - } -} - -void fATFO(void *arg) { - int argc = 0; - char *argv[MAX_ARGC] = { 0 }; -#if DEBUG_AT_USER_LEVEL > 3 - printf("ATFO: _AT_FLASH_OTP_DUMP_\n"); -#endif - if (!arg) { - printf("Usage: ATFO=faddr(HEX),[size]\n"); - } else { - argc = parse_param(arg, argv); - if (argc >= 1) { - int addr; - sscanf(argv[1], "%x", &addr); - int size = 0; - if (argc > 2) - size = atoi(argv[2]); - if (size <= 0 || size > 16384) - size = 1; - u32 symbs_line = 32; - u32 rdsize = 8 * symbs_line; - uint8_t *flash_data = (uint8_t *) malloc(rdsize); - while (size) { - if (size < rdsize) - rdsize = size; - else - rdsize = 8 * symbs_line; - flash_otp_read(&flashobj, addr, rdsize, flash_data); - uint8_t *ptr = flash_data; - while (ptr < flash_data + rdsize) { - if (symbs_line > size) - symbs_line = size; - printf("%08X ", addr); - print_hex_dump(ptr, symbs_line, ' '); - printf("\r\n"); - addr += symbs_line; - ptr += symbs_line; - size -= symbs_line; - if (size == 0) - break; - } - } - free(flash_data); - } - } -} - -// Mem info -void fATST(void *arg) { - extern void dump_mem_block_list(void); // heap_5.c - printf("\nCLK CPU\t\t%d Hz\nRAM heap\t%d bytes\nTCM heap\t%d bytes\n", - HalGetCpuClk(), xPortGetFreeHeapSize(), tcm_heap_freeSpace()); -#if CONFIG_DEBUG_LOG > 1 - dump_mem_block_list(); - tcm_heap_dump(); -#endif; - printf("\n"); -#if (configGENERATE_RUN_TIME_STATS == 1) - char *cBuffer = pvPortMalloc(512); - if(cBuffer != NULL) { - vTaskGetRunTimeStats((char *)cBuffer); - printf("%s", cBuffer); - } - vPortFree(cBuffer); -#endif -} - -#if 0 -#if 1 -#include "drv_types.h" // or #include "wlan_lib.h" -#else -#include "wifi_constants.h" -#include "wifi_structures.h" -#include "wlan_lib.h" // or #include "drv_types.h" -#endif -#include "hal_com_reg.h" -// extern Rltk_wlan_t rltk_wlan_info[2]; -void fATXT(void *arg) -{ -#if DEBUG_AT_USER_LEVEL > 3 - printf("ATWT: _AT_CFG_DUMP_\n"); -#endif - int size = 512; - int addr = 0; - uint8_t *blk_data = (uint8_t *)malloc(size); - memset(blk_data, 0xff, size); - if(blk_data) { - uint8_t * ptr = blk_data; - Hal_ReadEFuse(*(_adapter **)(rltk_wlan_info->priv), 0, 0, 512, ptr, 1); - //rtw_flash_map_update(*(_adapter **)(rltk_wlan_info->priv), 512); - u32 symbs_line = 32; - while(addr < size) { - if(symbs_line > size) symbs_line = size; - printf("%08X ", addr); - print_hex_dump(ptr, symbs_line, ' '); - printf("\r\n"); - addr += symbs_line; - ptr += symbs_line; - size -= symbs_line; - if(size == 0) break; - } - free(blk_data); - } -} -#endif -log_item_t at_sys_items[] = { -#if (ATCMD_VER == ATVER_1) - { "ATSD", fATSD}, // Dump register - { "ATSE", fATSE}, // Edit register - { "ATSC", fATSC}, // Clear OTA signature - { "ATSR", fATSR}, // Recover OTA signature -#if CONFIG_UART_XMODEM - { "ATSY", fATSY}, // uart ymodem upgrade -#endif -#if SUPPORT_MP_MODE - { "ATSA", fATSA}, // MP ADC test - { "ATSG", fATSG}, // MP GPIO test - { "ATSP", fATSP}, // MP Power related test - { "ATSB", fATSB}, // OTU PIN setup -#endif -#if (configGENERATE_RUN_TIME_STATS == 1) - { "ATSS", fATSS}, // Show CPU stats -#endif -#if SUPPORT_CP_TEST - { "ATSM", fATSM}, // Apple CP test -#endif - { "ATSJ", fATSJ}, //trun off JTAG - { "ATS@", fATSs}, // Debug message setting - { "ATS!", fATSc}, // Debug config setting - { "ATS#", fATSt}, // test command - { "ATS?", fATSx}, // Help -#elif ATCMD_VER == ATVER_2 //#if ATCMD_VER == ATVER_1 - { "AT", fATS0 }, // test AT command ready - { "ATS?", fATSh }, // list all AT command - { "ATSR", fATSR }, // system restart - { "ATSV", fATSV }, // show version info - { "ATSP", fATSP }, // power saving mode - { "ATSE", fATSE }, // enable and disable echo -#if CONFIG_WLAN -#if CONFIG_WEBSERVER - { "ATSW", fATSW}, // start webserver -#endif - { "ATSY", fATSY }, // factory reset -#if CONFIG_OTA_UPDATE - { "ATSO", fATSO }, // ota upgrate - { "ATSC", fATSC }, // chose the activited image -#endif -#if CONFIG_EXAMPLE_UART_ATCMD - { "ATSU", fATSU }, // AT uart configuration -#endif -#endif - { "ATSG", fATSG }, // GPIO control -#if CONFIG_UART_XMODEM - { "ATSX", fATSX}, // uart xmodem upgrade -#endif - { "ATSD", fATSD }, // Dump register - { "ATXD", fATXD }, // Write register -#endif // end of #if ATCMD_VER == ATVER_1 - -// Following commands exist in two versions -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) - { "ATSL", fATSL }, // wakelock test -#endif - { "ATFD", fATFD }, // Flash Data Damp - { "ATFO", fATFO }, // Flash OTP Damp - { "ATST", fATST }, // add pvvx: mem info -// { "ATXT", fATXT }, // add pvvx: cfg_wifi - { "ATSI", fATSI } // Dev/Ports Info -}; - -#if ATCMD_VER == ATVER_2 -void print_system_at(void *arg) { - int index; - int cmd_len = 0; - - cmd_len = sizeof(at_sys_items) / sizeof(at_sys_items[0]); - for (index = 0; index < cmd_len; index++) - at_printf("\r\n%s", at_sys_items[index].log_cmd); -} -#endif -void at_sys_init(void) { - log_service_add_table(at_sys_items, - sizeof(at_sys_items) / sizeof(at_sys_items[0])); -} - -#if SUPPORT_LOG_SERVICE -log_module_init(at_sys_init); -#endif - -#endif //#ifdef CONFIG_AT_SYS diff --git a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_sys.h b/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_sys.h deleted file mode 100644 index 9eaee49..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_sys.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __ATCMD_SYS_H__ -#define __ATCMD_SYS_H__ -#ifdef CONFIG_AT_SYS -#endif // - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_wifi.c b/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_wifi.c deleted file mode 100644 index 27b564e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_wifi.c +++ /dev/null @@ -1,2836 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include "semphr.h" -#include "log_service.h" -#include "atcmd_wifi.h" -#include -#include "tcpip.h" -#include -#if CONFIG_WLAN -#include -#include -#include -#endif - -#if ATCMD_VER == ATVER_2 -#include "flash_api.h" -#include "device_lock.h" -#include -#endif - -#if ATCMD_VER == ATVER_2 || WIFI_LOGO_CERTIFICATION_CONFIG -#include -#endif - -/******************************************************************************/ -#define _AT_WLAN_SET_SSID_ "ATW0" -#define _AT_WLAN_SET_PASSPHRASE_ "ATW1" -#define _AT_WLAN_SET_KEY_ID_ "ATW2" -#define _AT_WLAN_AP_SET_SSID_ "ATW3" -#define _AT_WLAN_AP_SET_SEC_KEY_ "ATW4" -#define _AT_WLAN_AP_SET_CHANNEL_ "ATW5" -#define _AT_WLAN_SET_BSSID_ "ATW6" -#define _AT_WLAN_AP_ACTIVATE_ "ATWA" -#define _AT_WLAN_AP_STA_ACTIVATE_ "ATWB" -#define _AT_WLAN_JOIN_NET_ "ATWC" -#define _AT_WLAN_DISC_NET_ "ATWD" -#define _AT_WLAN_WEB_SERVER_ "ATWE" -#define _AT_WLAN_P2P_FIND_ "ATWF" -#define _AT_WLAN_P2P_START_ "ATWG" -#define _AT_WLAN_P2P_STOP_ "ATWH" -#define _AT_WLAN_PING_TEST_ "ATWI" -#define _AT_WLAN_P2P_CONNECT_ "ATWJ" -#define _AT_WLAN_P2P_DISCONNECT_ "ATWK" -#define _AT_WLAN_SSL_CLIENT_ "ATWL" -#define _AT_WLAN_PROMISC_ "ATWM" -#define _AT_WLAN_P2P_INFO_ "ATWN" -#define _AT_WLAN_OTA_UPDATE_ "ATWO" -#define _AT_WLAN_POWER_ "ATWP" -#define _AT_WLAN_SIMPLE_CONFIG_ "ATWQ" -#define _AT_WLAN_GET_RSSI_ "ATWR" -#define _AT_WLAN_SCAN_ "ATWS" -#define _AT_WLAN_SCAN_WITH_SSID_ "ATWs" -#define _AT_WLAN_TCP_TEST_ "ATWT" -#define _AT_WLAN_UDP_TEST_ "ATWU" -#define _AT_WLAN_WPS_ "ATWW" -#define _AT_WLAN_AP_WPS_ "ATWw" -#define _AT_WLAN_AIRKISS_ "ATWX" -#define _AT_WLAN_IWPRIV_ "ATWZ" -#define _AT_WLAN_INFO_ "ATW?" - -#define _AT_WLAN_EXTEND_POWER_MODE_ "ATXP" - -#ifndef CONFIG_SSL_CLIENT -#define CONFIG_SSL_CLIENT 0 -#endif -#ifndef CONFIG_WEBSERVER -#define CONFIG_WEBSERVER 0 -#endif -#ifndef CONFIG_OTA_UPDATE -#define CONFIG_OTA_UPDATE 0 -#endif -#ifndef CONFIG_BSD_TCP -#define CONFIG_BSD_TCP 1 -#endif -#ifndef CONFIG_ENABLE_P2P -#define CONFIG_ENABLE_P2P 0 -#endif -#define SCAN_WITH_SSID 0 -#if CONFIG_WEBSERVER -#define CONFIG_READ_FLASH 1 -extern rtw_wifi_setting_t wifi_setting; -#endif - -#ifndef CONFIG_WOWLAN_SERVICE -#define CONFIG_WOWLAN_SERVICE 0 -#endif - -#if CONFIG_LWIP_LAYER -extern void cmd_tcp(int argc, char **argv); -extern void cmd_udp(int argc, char **argv); -extern void cmd_ping(int argc, char **argv); -extern void cmd_ssl_client(int argc, char **argv); -#endif - -#if CONFIG_WLAN -extern void cmd_promisc(int argc, char **argv); -extern void cmd_update(int argc, char **argv); -extern void cmd_simple_config(int argc, char **argv); -#if CONFIG_ENABLE_WPS -extern void cmd_wps(int argc, char **argv); -#endif - -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP -extern void cmd_ap_wps(int argc, char **argv); -extern int wpas_wps_dev_config(u8 *dev_addr, u8 bregistrar); -#endif -#if CONFIG_ENABLE_P2P -extern void cmd_wifi_p2p_start(int argc, char **argv); -extern void cmd_wifi_p2p_stop(int argc, char **argv); -extern void cmd_p2p_listen(int argc, char **argv); -extern void cmd_p2p_find(int argc, char **argv); -extern void cmd_p2p_peers(int argc, char **argv); -extern void cmd_p2p_info(int argc, char **argv); -extern void cmd_p2p_disconnect(int argc, char **argv); -extern void cmd_p2p_connect(int argc, char **argv); -extern int cmd_wifi_p2p_auto_go_start(int argc, char **argv); -#endif //CONFIG_ENABLE_P2P -#if CONFIG_AIRKISS -extern int airkiss_start(); -#endif -#if CONFIG_LWIP_LAYER -extern struct netif xnetif[NET_IF_NUM]; -#endif -#if CONFIG_WOWLAN_SERVICE -extern void cmd_wowlan_service(int argc, char **argv); -#endif -#if CONFIG_INIC_CMD_RSP -extern void inic_c2h_wifi_info(const char *atcmd, char status); -extern void inic_c2h_msg(const char *atcmd, u8 status, char *msg, u16 msg_len); -#endif - -/* fastconnect use wifi AT command. Not init_wifi_struct when log service disabled - * static initialize all values for using fastconnect when log service disabled - */ -static rtw_network_info_t wifi = { - {0}, // ssid - {0}, // bssid - 0, // security - NULL, // password - 0, // password len - -1 // key id -}; - -static rtw_ap_info_t ap = {0}; -static unsigned char password[65] = {0}; - -#if ATCMD_VER == ATVER_2 || WIFI_LOGO_CERTIFICATION_CONFIG -unsigned char sta_ip[4] = {192,168,1,80}, sta_netmask[4] = {255,255,255,0}, sta_gw[4] = {192,168,1,1}; -#endif - -#if ATCMD_VER == ATVER_2 -unsigned char dhcp_mode_sta = 1, dhcp_mode_ap = 1; -unsigned char ap_ip[4] = {192,168,43,1}, ap_netmask[4] = {255,255,255,0}, ap_gw[4] = {192,168,43,1}; -static void atcmd_wifi_disconn_hdl( char* buf, int buf_len, int flags, void* userdata); -#endif - -extern unsigned char wifi_mode; // = RTW_MODE_NONE; - -static void init_wifi_struct(void) -{ - memset(wifi.ssid.val, 0, sizeof(wifi.ssid.val)); - memset(wifi.bssid.octet, 0, ETH_ALEN); - memset(password, 0, sizeof(password)); - wifi.ssid.len = 0; - wifi.password = NULL; - wifi.password_len = 0; - wifi.key_id = -1; - memset(ap.ssid.val, 0, sizeof(ap.ssid.val)); - ap.ssid.len = 0; - ap.password = NULL; - ap.password_len = 0; - ap.channel = 1; -} - -static void print_scan_result( rtw_scan_result_t* record ) -{ -#if CONFIG_EXAMPLE_UART_ATCMD || CONFIG_EXAMPLE_SPI_ATCMD - at_printf("%s,%d,%s,%d,"MAC_FMT"", record->SSID.val, record->channel, - ( record->security == RTW_SECURITY_OPEN ) ? "Open" : - ( record->security == RTW_SECURITY_WEP_PSK ) ? "WEP" : - ( record->security == RTW_SECURITY_WPA_TKIP_PSK ) ? "WPA TKIP" : - ( record->security == RTW_SECURITY_WPA_AES_PSK ) ? "WPA AES" : - ( record->security == RTW_SECURITY_WPA2_AES_PSK ) ? "WPA2 AES" : - ( record->security == RTW_SECURITY_WPA2_TKIP_PSK ) ? "WPA2 TKIP" : - ( record->security == RTW_SECURITY_WPA2_MIXED_PSK ) ? "WPA2 Mixed" : - ( record->security == RTW_SECURITY_WPA_WPA2_MIXED ) ? "WPA/WPA2 AES" : "Unknown", - record->signal_strength, MAC_ARG(record->BSSID.octet) ); -#else - RTW_API_INFO( ( "%s\t ", ( record->bss_type == RTW_BSS_TYPE_ADHOC ) ? "Adhoc" : "Infra" ) ); - RTW_API_INFO( ( MAC_FMT, MAC_ARG(record->BSSID.octet) ) ); - RTW_API_INFO( ( " %d\t ", record->signal_strength ) ); - RTW_API_INFO( ( " %d\t ", record->channel ) ); - RTW_API_INFO( ( " %d\t ", record->wps_type ) ); - RTW_API_INFO( ( "%s\t\t ", ( record->security == RTW_SECURITY_OPEN ) ? "Open" : - ( record->security == RTW_SECURITY_WEP_PSK ) ? "WEP" : - ( record->security == RTW_SECURITY_WPA_TKIP_PSK ) ? "WPA TKIP" : - ( record->security == RTW_SECURITY_WPA_AES_PSK ) ? "WPA AES" : - ( record->security == RTW_SECURITY_WPA2_AES_PSK ) ? "WPA2 AES" : - ( record->security == RTW_SECURITY_WPA2_TKIP_PSK ) ? "WPA2 TKIP" : - ( record->security == RTW_SECURITY_WPA2_MIXED_PSK ) ? "WPA2 Mixed" : - ( record->security == RTW_SECURITY_WPA_WPA2_MIXED ) ? "WPA/WPA2 AES" : - "Unknown" ) ); - - RTW_API_INFO( ( " %s ", record->SSID.val ) ); - RTW_API_INFO( ( "\r\n" ) ); -#endif -} - -static rtw_result_t app_scan_result_handler( rtw_scan_handler_result_t* malloced_scan_result ) -{ - static int ApNum = 0; - - if (malloced_scan_result->scan_complete != RTW_TRUE) { - rtw_scan_result_t* record = &malloced_scan_result->ap_details; - record->SSID.val[record->SSID.len] = 0; /* Ensure the SSID is null terminated */ - -#if CONFIG_EXAMPLE_UART_ATCMD || CONFIG_EXAMPLE_SPI_ATCMD - at_printf("\r\nAP : %d,", ++ApNum); -#else - RTW_API_INFO( ( "%d\t ", ++ApNum ) ); -#endif - print_scan_result(record); -#if CONFIG_INIC_CMD_RSP - if(malloced_scan_result->user_data) - memcpy((void *)((char *)malloced_scan_result->user_data+(ApNum-1)*sizeof(rtw_scan_result_t)), (char *)record, sizeof(rtw_scan_result_t)); -#endif - } else{ -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATWS", RTW_SUCCESS, (char *)malloced_scan_result->user_data, ApNum*sizeof(rtw_scan_result_t)); - if(malloced_scan_result->user_data) - free(malloced_scan_result->user_data); - inic_c2h_msg("ATWS", RTW_SUCCESS, NULL, 0); -#endif -#if CONFIG_EXAMPLE_UART_ATCMD || CONFIG_EXAMPLE_SPI_ATCMD - at_printf("\r\n[ATWS] OK"); - at_printf(STR_END_OF_ATCMD_RET); -#endif - ApNum = 0; - } - return RTW_SUCCESS; -} - -void fATWD(void *arg){ - int timeout = 20; - char essid[33]; - int ret = RTW_SUCCESS; -#if ATCMD_VER == ATVER_2 - int error_no = 0; -#endif - - printf("[ATWD]: _AT_WLAN_DISC_NET_\n\r"); - printf("\n\rDeassociating AP ..."); - - if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) < 0) { - printf("\n\rWIFI disconnected"); - goto exit_success; - } -#if ATCMD_VER == ATVER_2 - wifi_unreg_event_handler(WIFI_EVENT_DISCONNECT, atcmd_wifi_disconn_hdl); -#endif - if((ret = wifi_disconnect()) < 0) { - printf("[ATWD]ERROR: Operation failed!\n\r"); -#if ATCMD_VER == ATVER_2 - error_no = 3; -#endif - goto exit; - } - - while(1) { - if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) < 0) { - printf("\n\rWIFI disconnected"); - break; - } - - if(timeout == 0) { - printf("[ATWD]ERROR: Deassoc timeout!\n\r"); - ret = RTW_TIMEOUT; -#if ATCMD_VER == ATVER_2 - error_no = 4; -#endif - break; - } - - vTaskDelay(1 * configTICK_RATE_HZ); - timeout --; - } - printf("\n\r"); - -#if CONFIG_LWIP_LAYER - LwIP_ReleaseIP(WLAN0_IDX); -#endif -exit: -#if CONFIG_INIC_CMD_RSP - if(ret != RTW_SUCCESS) - inic_c2h_msg("ATWD", ret, NULL, 0); -#endif - init_wifi_struct( ); -#if ATCMD_VER == ATVER_2 - if(error_no==0) - at_printf("\r\n[ATWD] OK"); - else - at_printf("\r\n[ATWD] ERROR:%d",error_no); -#endif - return; -exit_success: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATWD", RTW_SUCCESS, NULL, 0); -#endif - init_wifi_struct( ); -#if ATCMD_VER == ATVER_2 - at_printf("\r\n[ATWD] OK"); -#endif - return; -} - -#if (CONFIG_INCLUDE_SIMPLE_CONFIG) -void fATWQ(void *arg){ - int argc=0; - char *argv[2] = {0}; - printf("[ATWQ]: _AT_WLAN_SIMPLE_CONFIG_\n\r"); - argv[argc++] = "wifi_simple_config"; - if(arg){ - argv[argc++] = arg; - } - cmd_simple_config(argc, argv); -} -#endif - -void fATWS(void *arg){ - char buf[32] = {0}; - u8 *channel_list = NULL; - u8 *pscan_config = NULL; - int num_channel = 0; - int i, argc = 0; - char *argv[MAX_ARGC] = {0}; - int ret = RTW_SUCCESS; -#if CONFIG_INIC_CMD_RSP - u8 *inic_scan_buf = NULL; -#endif -#if ATCMD_VER == ATVER_2 - int error_no = 0; -#endif - printf("[ATWS]: _AT_WLAN_SCAN_\n\r"); - if(arg){ - strcpy(buf, arg); - argc = parse_param(buf, argv); - if(argc < 2){ - ret = RTW_BADARG; -#if ATCMD_VER == ATVER_2 - error_no = 1; -#endif - goto exit; - } - num_channel = atoi(argv[1]); - channel_list = (u8*)malloc(num_channel); - if(!channel_list){ - printf("[ATWS]ERROR: Can't malloc memory for channel list\n\r"); - ret = RTW_BUFFER_UNAVAILABLE_TEMPORARY; -#if ATCMD_VER == ATVER_2 - error_no = 2; -#endif - goto exit; - } - pscan_config = (u8*)malloc(num_channel); - if(!pscan_config){ - printf("[ATWS]ERROR: Can't malloc memory for pscan_config\n\r"); - ret = RTW_BUFFER_UNAVAILABLE_TEMPORARY; -#if ATCMD_VER == ATVER_2 - error_no = 3; -#endif - goto exit; - } - //parse command channel list - for(i = 2; i <= argc -1 ; i++){ - *(channel_list + i - 2) = (u8)atoi(argv[i]); - *(pscan_config + i - 2) = PSCAN_ENABLE; - } - - if((ret = wifi_set_pscan_chan(channel_list, pscan_config, num_channel)) < 0){ - printf("[ATWS]ERROR: wifi set partial scan channel fail\n\r"); -#if ATCMD_VER == ATVER_2 - error_no = 4; -#endif - goto exit; - } - } -#if CONFIG_INIC_CMD_RSP - inic_scan_buf = malloc(65*sizeof(rtw_scan_result_t)); - if(inic_scan_buf == NULL){ - ret = RTW_BUFFER_UNAVAILABLE_TEMPORARY; - goto exit; - } - memset(inic_scan_buf, 0, 65*sizeof(rtw_scan_result_t)); - if((ret = wifi_scan_networks(app_scan_result_handler, inic_scan_buf)) != RTW_SUCCESS){ - printf("[ATWS]ERROR: wifi scan failed\n\r"); - goto exit; - } -#else - if((ret = wifi_scan_networks(app_scan_result_handler, NULL )) != RTW_SUCCESS){ - printf("[ATWS]ERROR: wifi scan failed\n\r"); -#if ATCMD_VER == ATVER_2 - error_no = 5; -#endif - goto exit; - } -#endif -exit: -#if CONFIG_INIC_CMD_RSP - if(ret != RTW_SUCCESS){ - if(inic_scan_buf) - free(inic_scan_buf); - inic_c2h_msg("ATWS", ret, NULL, 0); - } -#endif -#if ATCMD_VER == ATVER_2 - if(error_no) - at_printf("\r\n[ATWS] ERROR:%d",error_no); -#endif - if(arg && channel_list) - free(channel_list); - if(arg && pscan_config) - free(pscan_config); -} - -void fATWx(void *arg){ - int i = 0; -#if CONFIG_LWIP_LAYER - u8 *mac = LwIP_GetMAC(&xnetif[0]); - u8 *ip = LwIP_GetIP(&xnetif[0]); - u8 *gw = LwIP_GetGW(&xnetif[0]); -#endif - u8 *ifname[2] = {WLAN0_NAME,WLAN1_NAME}; - rtw_wifi_setting_t setting; - - printf("[ATW?]: _AT_WLAN_INFO_\n\r"); -#if CONFIG_INIC_CMD_RSP - int ret = RTW_SUCCESS; - int info_sz = 0; - u8 *info = malloc(NET_IF_NUM*sizeof(rtw_wifi_setting_t)+3*sizeof(rtw_mac_t)); - if(info == NULL) - ret = RTW_BUFFER_UNAVAILABLE_TEMPORARY; -#endif - for(i=0;i %02x:%02x:%02x:%02x:%02x:%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]) ; - printf("\n\r\tIP => %d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); - printf("\n\r\tGW => %d.%d.%d.%d\n\r", gw[0], gw[1], gw[2], gw[3]); -#endif - if(setting.mode == RTW_MODE_AP || i == 1) - { - int client_number; - struct { - int count; - rtw_mac_t mac_list[AP_STA_NUM]; - } client_info; - - client_info.count = AP_STA_NUM; - wifi_get_associated_client_list(&client_info, sizeof(client_info)); - - printf("\n\rAssociated Client List:"); - printf("\n\r=============================="); - - if(client_info.count == 0) - printf("\n\rClient Num: 0\n\r", client_info.count); - else - { - printf("\n\rClient Num: %d", client_info.count); - for( client_number=0; client_number < client_info.count; client_number++ ) - { - printf("\n\rClient %d:", client_number + 1); - printf("\n\r\tMAC => "MAC_FMT"", - MAC_ARG(client_info.mac_list[client_number].octet)); -#if CONFIG_EXAMPLE_UART_ATCMD || CONFIG_EXAMPLE_SPI_ATCMD - at_printf("\r\nCLIENT : %d,"MAC_FMT"", client_number + 1, MAC_ARG(client_info.mac_list[client_number].octet)); -#endif -#if CONFIG_INIC_CMD_RSP - if(info){ - memcpy(info+info_sz, (void *)&client_info.mac_list[client_number], sizeof(rtw_mac_t)); - info_sz += sizeof(rtw_mac_t); - } -#endif - } - printf("\n\r"); - } - } - } -// show the ethernet interface info - else{ -#if CONFIG_ETHERNET - if(i == NET_IF_NUM - 1){ -#if CONFIG_LWIP_LAYER - mac = LwIP_GetMAC(&xnetif[i]); - ip = LwIP_GetIP(&xnetif[i]); - gw = LwIP_GetGW(&xnetif[i]); - printf("\n\rInterface ethernet\n"); - printf("\n\r=============================="); - printf("\n\r\tMAC => %02x:%02x:%02x:%02x:%02x:%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]) ; - printf("\n\r\tIP => %d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); - printf("\n\r\tGW => %d.%d.%d.%d\n\r", gw[0], gw[1], gw[2], gw[3]); -#endif // end CONFIG_LWIP_LAYER - } -#endif // end CONFIG_ETHERNET - } - } - -#if defined(configUSE_TRACE_FACILITY) && (configUSE_TRACE_FACILITY == 1) && (configUSE_STATS_FORMATTING_FUNCTIONS == 1) - { - signed char pcWriteBuffer[1024]; - vTaskList((char*)pcWriteBuffer); - printf("\n\rTask List: \n\r%s", pcWriteBuffer); - } -#endif - -#if CONFIG_INIC_CMD_RSP - if(ret != RTW_SUCCESS) - inic_c2h_msg("ATW?", ret, NULL, 0); - else - inic_c2h_msg("ATW?", RTW_SUCCESS, (char *)info, info_sz); - - if(info) - free(info); - info = NULL; -#endif - -#if CONFIG_EXAMPLE_UART_ATCMD || CONFIG_EXAMPLE_SPI_ATCMD - at_printf("\r\n[ATW?] OK"); -#endif - -} - -#if ATCMD_VER == ATVER_1 -void fATW0(void *arg){ - int ret = RTW_SUCCESS; - if(!arg){ - printf("[ATW0]Usage: ATW0=SSID(Maximum length is 32)\n\r"); - ret = RTW_BADARG; - goto exit; - } - if(strlen((char*)arg) > 32){ - printf("[ATW0]Error: SSID length can't exceed 32\n\r"); - ret = RTW_BADARG; - goto exit; - } - printf("[ATW0]: _AT_WLAN_SET_SSID_ [%s]\n\r", (char*)arg); - strcpy((char *)wifi.ssid.val, (char*)arg); - wifi.ssid.len = strlen((char*)arg); -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATW0", ret, NULL, 0); -#endif - return; -} - -void fATW1(void *arg){ - int ret = RTW_SUCCESS; - printf("[ATW1]: _AT_WLAN_SET_PASSPHRASE_ [%s]\n\r", (char*)arg); - strcpy((char *)password, (char*)arg); - wifi.password = password; - wifi.password_len = strlen((char*)arg); -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATW1", ret, NULL, 0); -#endif - return; -} - -void fATW2(void *arg){ - int ret = RTW_SUCCESS; - printf("[ATW2]: _AT_WLAN_SET_KEY_ID_ [%s]\n\r", (char*)arg); - if((strlen((const char *)arg) != 1 ) || (*(char*)arg <'0' ||*(char*)arg >'3')) { - printf("[ATW2]Error: Wrong WEP key id. Must be one of 0,1,2, or 3.\n\r"); - ret = RTW_BADARG; - goto exit; - } - wifi.key_id = atoi((const char *)(arg)); -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATW2", ret, NULL, 0); -#endif - return; -} - -void fATW3(void *arg){ - int ret = RTW_SUCCESS; - if(!arg){ - printf("[ATW3]Usage: ATW3=SSID\n\r"); - ret = RTW_BADARG; - goto exit; - } - if(strlen((char*)arg) > 32){ - printf("[ATW3]Error: SSID length can't exceed 32\n\r"); - ret = RTW_BADARG; - goto exit; - } - strcpy((char *)ap.ssid.val, (char*)arg); - ap.ssid.len = strlen((char*)arg); - - printf("[ATW3]: _AT_WLAN_AP_SET_SSID_ [%s]\n\r", ap.ssid.val); -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATW3", ret, NULL, 0); -#endif - return; -} - -void fATW4(void *arg){ - int ret = RTW_SUCCESS; - - if(!arg){ - printf("[ATW4]Usage: ATW4=PASSWORD\n\r"); - ret = RTW_BADARG; - goto exit; - } - if(strlen((char*)arg) > 64){ - printf("[ATW4]Error: PASSWORD length can't exceed 64\n\r"); - ret = RTW_BADARG; - goto exit; - } - - strcpy((char *)password, (char*)arg); - ap.password = password; - ap.password_len = strlen((char*)arg); - printf("[ATW4]: _AT_WLAN_AP_SET_SEC_KEY_ [%s]\n\r", ap.password); -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATW4", ret, NULL, 0); -#endif - return; -} - -void fATW5(void *arg){ - int ret = RTW_SUCCESS; - if(!arg){ - printf("[ATW5]Usage: ATW5=CHANNEL\n\r"); - ret = RTW_BADARG; - goto exit; - } - ap.channel = (unsigned char) atoi((const char *)arg); - printf("[ATW5]: _AT_WLAN_AP_SET_CHANNEL_ [channel %d]\n\r", ap.channel); -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATW5", ret, NULL, 0); -#endif - return; -} - -void fATW6(void *arg){ - u32 mac[ETH_ALEN]; - u32 i; - int ret = RTW_SUCCESS; - if(!arg){ - printf("[ATW6]Usage: ATW6=BSSID\n\r"); - ret = RTW_BADARG; - goto exit; - } - printf("[ATW6]: _AT_WLAN_SET_BSSID_ [%s]\n\r", (char*)arg); - sscanf(arg, MAC_FMT, mac, mac + 1, mac + 2, mac + 3, mac + 4, mac + 5); - for(i = 0; i < ETH_ALEN; i ++) - wifi.bssid.octet[i] = (u8)mac[i] & 0xFF; -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATW6", ret, NULL, 0); -#endif - return; -} - -void fATWA(void *arg){ -#if CONFIG_LWIP_LAYER - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - struct netif * pnetif = &xnetif[0]; -#endif - int timeout = 20; - int ret = RTW_SUCCESS; - printf("[ATWA]: _AT_WLAN_AP_ACTIVATE_\n\r"); - if(ap.ssid.val[0] == 0){ - printf("[ATWA]Error: SSID can't be empty\n\r"); - ret = RTW_BADARG; - goto exit; - } - if(ap.password == NULL){ - ap.security_type = RTW_SECURITY_OPEN; - } - else{ - if(ap.password_len <= RTW_MAX_PSK_LEN && - ap.password_len >= RTW_MIN_PSK_LEN){ - ap.security_type = RTW_SECURITY_WPA2_AES_PSK; - } - else{ - printf("[ATWA]Error: password length is between 8 to 64 \n\r"); - ret = RTW_INVALID_KEY; - goto exit; - } - } - -#if CONFIG_WEBSERVER - //store into flash - memset(wifi_setting.ssid, 0, sizeof(wifi_setting.ssid));; - memcpy(wifi_setting.ssid, ap.ssid.val, strlen((char*)ap.ssid.val)); - wifi_setting.ssid[ap.ssid.len] = '\0'; - wifi_setting.security_type = ap.security_type; - if(ap.security_type !=0) - wifi_setting.security_type = 1; - else - wifi_setting.security_type = 0; - if (ap.password) - memcpy(wifi_setting.password, ap.password, strlen((char*)ap.password)); - else - memset(wifi_setting.password, 0, sizeof(wifi_setting.password)); - wifi_setting.channel = ap.channel; -#if CONFIG_READ_FLASH - StoreApInfo(); -#endif -#endif - -#if CONFIG_LWIP_LAYER - dhcps_deinit(); - IP4_ADDR(&ipaddr, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1 , NETMASK_ADDR2, NETMASK_ADDR3); - IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - netif_set_addr(pnetif, &ipaddr, &netmask,&gw); -#ifdef CONFIG_DONT_CARE_TP - pnetif->flags |= NETIF_FLAG_IPSWITCH; -#endif -#endif - wifi_off(); - vTaskDelay(20); - if (wifi_on(RTW_MODE_AP) < 0){ - printf("\n\rERROR: Wifi on failed!"); - ret = RTW_ERROR; - goto exit; - } - printf("\n\rStarting AP ..."); - -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - wpas_wps_dev_config(pnetif->hwaddr, 1); -#endif - if((ret = wifi_start_ap((char*)ap.ssid.val, ap.security_type, (char*)ap.password,/* ap.ssid.len, ap.password_len,*/ ap.channel, 0) )< 0) { - printf("\n\rERROR: Operation failed!"); - goto exit; - } - - while(1) { - char essid[33]; - - if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) > 0) { - if(strcmp((const char *) essid, (const char *)ap.ssid.val) == 0) { - printf("\n\r%s started\n", ap.ssid.val); - ret = RTW_SUCCESS; - break; - } - } - - if(timeout == 0) { - printf("\n\rERROR: Start AP timeout!"); - ret = RTW_TIMEOUT; - break; - } - - vTaskDelay(1 * configTICK_RATE_HZ); - timeout --; - } - -#if defined( CONFIG_ENABLE_AP_POLLING_CLIENT_ALIVE )&&( CONFIG_ENABLE_AP_POLLING_CLIENT_ALIVE == 1 ) - wifi_set_ap_polling_sta(1); -#endif - -#if CONFIG_LWIP_LAYER - //LwIP_UseStaticIP(pnetif); - dhcps_init(pnetif); -#endif - -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_wifi_info("ATWA", ret); -#endif - init_wifi_struct( ); -} - -#if CONFIG_INIC_EN -static int _find_ap_from_scan_buf(char*buf, int buflen, char *target_ssid, void *user_data) -{ - rtw_wifi_setting_t *pwifi = (rtw_wifi_setting_t *)user_data; - int plen = 0; - - while(plen < buflen){ - u8 len, ssid_len, security_mode; - char *ssid; - - // len offset = 0 - len = (int)*(buf + plen); - // check end - if(len == 0) break; - // ssid offset = 14 - ssid_len = len - 14; - ssid = buf + plen + 14 ; - if((ssid_len == strlen(target_ssid)) - && (!memcmp(ssid, target_ssid, ssid_len))) - { - strcpy((char*)pwifi->ssid, target_ssid); - // channel offset = 13 - pwifi->channel = *(buf + plen + 13); - // security_mode offset = 11 - security_mode = (u8)*(buf + plen + 11); - if(security_mode == IW_ENCODE_ALG_NONE) - pwifi->security_type = RTW_SECURITY_OPEN; - else if(security_mode == IW_ENCODE_ALG_WEP) - pwifi->security_type = RTW_SECURITY_WEP_PSK; - else if(security_mode == IW_ENCODE_ALG_CCMP) - pwifi->security_type = RTW_SECURITY_WPA2_AES_PSK; - break; - } - plen += len; - } - return 0; -} - -static int _get_ap_security_mode(IN char * ssid, OUT rtw_security_t *security_mode, OUT u8 * channel) -{ - rtw_wifi_setting_t wifi; - u32 scan_buflen = 1000; - - memset(&wifi, 0, sizeof(wifi)); - - if(wifi_scan_networks_with_ssid(_find_ap_from_scan_buf, (void*)&wifi, scan_buflen, ssid, strlen(ssid)) != RTW_SUCCESS){ - printf("Wifi scan failed!\n"); - return 0; - } - - if(strcmp(wifi.ssid, ssid) == 0){ - *security_mode = wifi.security_type; - *channel = wifi.channel; - return 1; - } - - return 0; -} -#endif - -void fATWC(void *arg){ - int mode, ret; - unsigned long tick1 = xTaskGetTickCount(); - unsigned long tick2, tick3; - char empty_bssid[6] = {0}, assoc_by_bssid = 0; - - printf("[ATWC]: _AT_WLAN_JOIN_NET_\n\r"); - if(memcmp (wifi.bssid.octet, empty_bssid, 6)) - assoc_by_bssid = 1; - else if(wifi.ssid.val[0] == 0){ - printf("[ATWC]Error: SSID can't be empty\n\r"); - ret = RTW_BADARG; - goto EXIT; - } - if(wifi.password != NULL){ - if((wifi.key_id >= 0)&&(wifi.key_id <= 3)) { - wifi.security_type = RTW_SECURITY_WEP_PSK; - } - else{ - wifi.security_type = RTW_SECURITY_WPA2_AES_PSK; - } - } - else{ - wifi.security_type = RTW_SECURITY_OPEN; - } - //Check if in AP mode - wext_get_mode(WLAN0_NAME, &mode); - if(mode == IW_MODE_MASTER) { -#if CONFIG_LWIP_LAYER - dhcps_deinit(); -#endif - wifi_off(); - vTaskDelay(20); - if (wifi_on(RTW_MODE_STA) < 0){ - printf("\n\rERROR: Wifi on failed!"); - ret = RTW_ERROR; - goto EXIT; - } - } - -#if CONFIG_INIC_EN //get security mode from scan list - u8 connect_channel; - u8 pscan_config; - //the keyID may be not set for WEP which may be confued with WPA2 - if((wifi.security_type == RTW_SECURITY_UNKNOWN)||(wifi.security_type == RTW_SECURITY_WPA2_AES_PSK)) - { - int security_retry_count = 0; - while (1) { - if (_get_ap_security_mode((char*)wifi.ssid.val, &wifi.security_type, &connect_channel)) - break; - security_retry_count++; - if(security_retry_count >= 3){ - printf("Can't get AP security mode and channel.\n"); - ret = RTW_NOTFOUND; - goto EXIT; - } - } - if(wifi.security_type == RTW_SECURITY_WEP_PSK || wifi.security_type == RTW_SECURITY_WEP_SHARED) - wifi.key_id = (wifi.key_id <0 || wifi.key_id >3)?0:wifi.key_id; -#if 0 //implemented in wifi_connect() - //hex to ascii conversion - if(wifi.security_type == RTW_SECURITY_WEP_PSK) - { - if(wifi.password_len == 10) - { - u32 p[5]; - u8 pwd[6], i = 0; - sscanf((const char*)wifi.password, "%02x%02x%02x%02x%02x", &p[0], &p[1], &p[2], &p[3], &p[4]); - for(i=0; i< 5; i++) - pwd[i] = (u8)p[i]; - pwd[5] = '\0'; - memset(wifi.password, 0, 65); - strcpy((char*)wifi.password, (char*)pwd); - wifi.password_len = 5; - }else if(wifi.password_len == 26){ - u32 p[13]; - u8 pwd[14], i = 0; - sscanf((const char*)wifi.password, "%02x%02x%02x%02x%02x%02x%02x"\ - "%02x%02x%02x%02x%02x%02x", &p[0], &p[1], &p[2], &p[3], &p[4],\ - &p[5], &p[6], &p[7], &p[8], &p[9], &p[10], &p[11], &p[12]); - for(i=0; i< 13; i++) - pwd[i] = (u8)p[i]; - pwd[13] = '\0'; - memset(wifi.password, 0, 65); - strcpy((char*)wifi.password, (char*)pwd); - wifi.password_len = 13; - } - } -#endif - } - pscan_config = PSCAN_ENABLE; - if(connect_channel > 0 && connect_channel < 14) - wifi_set_pscan_chan(&connect_channel, &pscan_config, 1); -#endif - - if(assoc_by_bssid){ - printf("\n\rJoining BSS by BSSID "MAC_FMT" ...\n\r", MAC_ARG(wifi.bssid.octet)); - } else { - printf("\n\rJoining BSS by SSID %s...\n\r", (char*)wifi.ssid.val); - } - ret = wifi_connect(wifi.bssid.octet, - assoc_by_bssid, - (char*)wifi.ssid.val, - wifi.security_type, - (char*)wifi.password, - wifi.key_id, - NULL); - - if(ret!= RTW_SUCCESS){ - if(ret == RTW_INVALID_KEY) - printf("\n\rERROR:Invalid Key "); - - printf("\n\rERROR: Can't connect to AP"); - goto EXIT; - } - tick2 = xTaskGetTickCount(); - printf("\r\nConnected after %dms.\n", (tick2-tick1)); -#if CONFIG_LWIP_LAYER - /* Start DHCPClient */ - LwIP_DHCP(0, DHCP_START); - tick3 = xTaskGetTickCount(); - printf("\r\n\nGot IP after %dms.\n", (tick3-tick1)); -#endif - printf("\n\r"); -EXIT: -#if CONFIG_INIC_CMD_RSP - inic_c2h_wifi_info("ATWC", ret); -#endif - - init_wifi_struct( ); -} - -#if SCAN_WITH_SSID -void fATWs(void *arg){ - char buf[32] = {0}; - u8 *channel_list = NULL; - u8 *pscan_config = NULL; - int scan_buf_len = 500; - int num_channel = 0; - int i, argc = 0; - char *argv[MAX_ARGC] = {0}; - printf("[ATWs]: _AT_WLAN_SCAN_WITH_SSID_ [%s]\n\r", (char*)wifi.ssid.val); - if(arg){ - strcpy(buf, arg); - argc = parse_param(buf, argv); - if(argc == 2){ - scan_buf_len = atoi(argv[1]); - if(scan_buf_len < 36){ - printf("[ATWs] BUFFER_LENGTH too short\n\r"); - goto exit; - } - }else if(argc > 2){ - num_channel = atoi(argv[1]); - channel_list = (u8*)malloc(num_channel); - if(!channel_list){ - printf("[ATWs]ERROR: Can't malloc memory for channel list\n\r"); - goto exit; - } - pscan_config = (u8*)malloc(num_channel); - if(!pscan_config){ - printf("[ATWs]ERROR: Can't malloc memory for pscan_config\n\r"); - goto exit; - } - //parse command channel list - for(i = 2; i <= argc -1 ; i++){ - *(channel_list + i - 2) = (u8)atoi(argv[i]); - *(pscan_config + i - 2) = PSCAN_ENABLE; - } - - if(wifi_set_pscan_chan(channel_list, pscan_config, num_channel) < 0){ - printf("[ATWs]ERROR: wifi set partial scan channel fail\n\r"); - goto exit; - } - } - }else{ - printf("[ATWs]For Scan all channel Usage: ATWs=BUFFER_LENGTH\n\r"); - printf("[ATWs]For Scan partial channel Usage: ATWs=num_channels[channel_num1, ...]\n\r"); - goto exit; - } - - if(wifi_scan_networks_with_ssid(NULL, NULL, scan_buf_len, (char*)wifi.ssid.val, wifi.ssid.len) != RTW_SUCCESS){ - printf("[ATWs]ERROR: wifi scan failed\n\r"); - } -exit: - init_wifi_struct( ); - if(arg && channel_list) - free(channel_list); - if(arg && pscan_config) - free(pscan_config); -} -#endif - -void fATWR(void *arg){ - int rssi = 0; - printf("[ATWR]: _AT_WLAN_GET_RSSI_\n\r"); - wifi_get_rssi(&rssi); - printf("\n\rwifi_get_rssi: rssi = %d", rssi); - printf("\n\r"); -} - -void fATWP(void *arg){ - unsigned int parm = atoi((const char *)(arg)); - printf("[ATWP]: _AT_WLAN_POWER_[%s]\n\r", parm?"ON":"OFF"); - if(parm == 1){ - if(wifi_on(RTW_MODE_STA)<0){ - printf("\n\rERROR: Wifi on failed!\n"); - } - } - else if(parm == 0) - { -#if CONFIG_WEBSERVER - stop_web_server(); -#endif - wifi_off(); - } - else - printf("[ATWP]Usage: ATWP=0/1\n\r"); -} - -#if CONFIG_WOWLAN_SERVICE -//for wowlan setting -void fATWV(void *arg){ - int argc; - char *argv[MAX_ARGC] = {0}; - - printf("[ATWV]: _AT_WLAN_WOWLAN_\r\n"); - - argc = parse_param(arg, argv); - - cmd_wowlan_service(argc, argv); - - return; -} -#endif - -#ifdef CONFIG_CONCURRENT_MODE -void fATWB(void *arg) -{ - int timeout = 20;//, mode; - int ret = RTW_SUCCESS; -#if CONFIG_LWIP_LAYER - struct netif * pnetiff = (struct netif *)&xnetif[1]; -#endif - printf("[ATWB](_AT_WLAN_AP_STA_ACTIVATE_)\n\r"); - if(ap.ssid.val[0] == 0){ - printf("[ATWB]Error: SSID can't be empty\n\r"); - ret = RTW_BADARG; - goto exit; - } - if(ap.channel > 14){ - printf("[ATWB]Error:bad channel! channel is from 1 to 14\n\r"); - ret = RTW_BADARG; - goto exit; - } - if(ap.password == NULL){ - ap.security_type = RTW_SECURITY_OPEN; - } - else{ - ap.security_type = RTW_SECURITY_WPA2_AES_PSK; - } - -#if CONFIG_WEBSERVER - //store into flash - memset(wifi_setting.ssid, 0, sizeof(wifi_setting.ssid));; - memcpy(wifi_setting.ssid, ap.ssid.val, strlen((char*)ap.ssid.val)); - wifi_setting.ssid[ap.ssid.len] = '\0'; - wifi_setting.security_type = ap.security_type; - if(ap.security_type !=0) - wifi_setting.security_type = 1; - else - wifi_setting.security_type = 0; - if (ap.password) - memcpy(wifi_setting.password, ap.password, strlen((char*)ap.password)); - else - memset(wifi_setting.password, 0, sizeof(wifi_setting.password));; - wifi_setting.channel = ap.channel; -#if CONFIG_READ_FLASH - StoreApInfo(); -#endif -#endif - -#if CONFIG_LWIP_LAYER - dhcps_deinit(); -#endif - - wifi_off(); - vTaskDelay(20); - if ((ret = wifi_on(RTW_MODE_STA_AP)) < 0){ - printf("\n\rERROR: Wifi on failed!"); - ret = RTW_ERROR; - goto exit; - } - - printf("\n\rStarting AP ..."); - if((ret = wifi_start_ap((char*)ap.ssid.val, ap.security_type, (char*)ap.password, /*ap.ssid.len, ap.password_len,*/ ap.channel, 0)) < 0) { - printf("\n\rERROR: Operation failed!"); - goto exit; - } - while(1) { - char essid[33]; - - if(wext_get_ssid(WLAN1_NAME, (unsigned char *) essid) > 0) { - if(strcmp((const char *) essid, (const char *)ap.ssid.val) == 0) { - printf("\n\r%s started\n", ap.ssid.val); - ret = RTW_SUCCESS; - break; - } - } - - if(timeout == 0) { - printf("\n\rERROR: Start AP timeout!"); - ret = RTW_TIMEOUT; - break; - } - - vTaskDelay(1 * configTICK_RATE_HZ); - timeout --; - } -#if CONFIG_LWIP_LAYER - LwIP_UseStaticIP(&xnetif[1]); -#ifdef CONFIG_DONT_CARE_TP - pnetiff->flags |= NETIF_FLAG_IPSWITCH; -#endif - dhcps_init(pnetiff); -#endif - -#if defined( CONFIG_ENABLE_AP_POLLING_CLIENT_ALIVE )&&( CONFIG_ENABLE_AP_POLLING_CLIENT_ALIVE == 1 ) - wifi_set_ap_polling_sta(1); -#endif -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_wifi_info("ATWB", ret); -#endif - init_wifi_struct(); -} -#endif - -#ifdef CONFIG_PROMISC -void fATWM(void *arg){ - int argc; - char *argv[MAX_ARGC] = {0}; - argv[0] = "wifi_promisc"; - printf("[ATWM]: _AT_WLAN_PROMISC_\n\r"); - if(!arg){ - printf("[ATWM]Usage: ATWM=DURATION_SECONDS[with_len]"); -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATWM", RTW_BADARG, NULL, 0); -#endif - return; - } - if((argc = parse_param(arg, argv)) > 1){ - cmd_promisc(argc, argv); - } -} -#endif - -#if CONFIG_WEBSERVER -void fATWE(void *arg){ - printf("[ATWE]: _AT_WLAN_START_WEB_SERVER_\n\r"); - start_web_server(); -} -#endif - -void fATWW(void *arg){ -#if CONFIG_ENABLE_WPS - int argc = 0; - char *argv[4]; - printf("[ATWW]: _AT_WLAN_WPS_\n\r"); - if(!arg){ - printf("[ATWW]Usage: ATWW=pbc/pin\n\r"); -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATWW", RTW_BADARG, NULL, 0); -#endif - return; - } - argv[argc++] = "wifi_wps"; - argv[argc++] = arg; - cmd_wps(argc, argv); -#else - printf("Please set CONFIG_ENABLE_WPS 1 in platform_opts.h to enable ATWW command\n"); -#endif -} -void fATWw(void *arg){ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - int argc = 0; - char *argv[4]; - printf("[ATWw]: _AT_WLAN_AP_WPS_\n\r"); - if(!arg){ - printf("[ATWw]Usage: ATWw=pbc/pin\n\r"); - return; - } - argv[argc++] = "wifi_ap_wps"; - argv[argc++] = arg; - cmd_ap_wps(argc, argv); -#endif -} - -#if CONFIG_ENABLE_P2P -void fATWG(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWG]: _AT_WLAN_P2P_START_\n\r"); - argv[argc++] = "p2p_start"; - cmd_wifi_p2p_start(argc, argv); -} - -void fATWg(void *arg){ - int argc = 0; - char *argv[4]; - int ret =0; - printf("[ATWg]: _AT_WLAN_P2P_AUTO_GO_START_\n\r"); - argv[argc++] = "p2p_auto_go_start"; - ret = cmd_wifi_p2p_auto_go_start(argc, argv); - if(ret < 0) - printf("\r\n[ATWG]: Nothing to do. Please enter ATWG to initialize P2P.\n\r"); -} - -void fATWH(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWH]: _AT_WLAN_P2P_STOP_\n\r"); - argv[argc++] = "p2p_stop"; - cmd_wifi_p2p_stop(argc, argv); -} -void fATWJ(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWJ]: _AT_WLAN_P2P_CONNECT_\n\r"); - argv[0] = "p2p_connect"; - if(!arg){ - printf("ATWc=[DEST_MAC,pbc/pin]\n\r"); - return; - } - if((argc = parse_param(arg, argv)) > 1){ - cmd_p2p_connect(argc, argv); - } -} -void fATWK(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWK]: _AT_WLAN_P2P_DISCONNECT_\n\r"); - argv[argc++] = "p2p_disconnect"; - cmd_p2p_disconnect(argc, argv); -} -void fATWN(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWN]: _AT_WLAN_P2P_INFO_\n\r"); - argv[argc++] = "p2p_info"; - cmd_p2p_info(argc, argv); -} -void fATWF(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWF]: _AT_WLAN_P2P_FIND_\n\r"); - argv[argc++] = "p2p_find"; - cmd_p2p_find(argc, argv); -} -#endif -#if CONFIG_OTA_UPDATE -void fATWO(void *arg){ - int argc = 0; - char *argv[MAX_ARGC] = {0}; - printf("[ATWO]: _AT_WLAN_OTA_UPDATE_\n\r"); - if(!arg){ - printf("[ATWO]Usage: ATWO=IP[PORT] or ATWO= REPOSITORY[FILE_PATH]\n\r"); - return; - } - argv[0] = "update"; - if((argc = parse_param(arg, argv)) != 3){ - printf("[ATWO]Usage: ATWO=IP[PORT] or ATWO= REPOSITORY[FILE_PATH]\n\r"); - return; - } - cmd_update(argc, argv); -} -#endif - -#if CONFIG_AIRKISS -void fATWX(void *arg) -{ - int ret = RTW_SUCCESS; - - ret = airkiss_start(NULL); -#if CONFIG_INIC_CMD_RSP - if(ret != RTW_SUCCESS) - inic_c2h_msg("ATWX", RTW_ERROR, NULL, 0); -#endif -} -#endif - -void fATWZ(void *arg){ - char buf[32] = {0}; - char *copy = buf; - int i = 0; - int len = 0; - int ret = RTW_SUCCESS; - - printf("[ATWZ]: _AT_WLAN_IWPRIV_\n\r"); - if(!arg){ - printf("[ATWZ]Usage: ATWZ=COMMAND[PARAMETERS]\n\r"); - ret = RTW_BADARG; - goto exit; - } - strcpy(copy, arg); - len = strlen(copy); - do{ - if((*(copy+i)=='[')) - *(copy+i)=' '; - if((*(copy+i)==']')||(*(copy+i)=='\0')){ - *(copy+i)='\0'; - break; - } - }while((i++) < len); - - i = 0; - do{ - if((*(copy+i)==',')) { - *(copy+i)=' '; - break; - } - }while((i++) < len); - -#if CONFIG_INIC_CMD_RSP - ret = wext_private_command_with_retval(WLAN0_NAME, copy, buf, 32); - printf("\n\rPrivate Message: %s", (char *) buf); - if(ret == RTW_SUCCESS) - inic_c2h_msg("ATWZ", ret, buf, strlen(buf)); -#else - wext_private_command(WLAN0_NAME, copy, 1); -#endif -exit: -#if CONFIG_INIC_CMD_RSP - if(ret != RTW_SUCCESS) - inic_c2h_msg("ATWZ", ret, NULL, 0); -#endif - return; // exit label cannot be last statement -} - -#ifdef CONFIG_POWER_SAVING -void fATXP(void *arg) -{ - int argc = 0; - char *argv[MAX_ARGC] = {0}; - int ret = 0; - int mode, dtim; - int tdma_slot_period, tdma_rfon_period_len_1, tdma_rfon_period_len_2, tdma_rfon_period_len_3; -#if CONFIG_INIC_CMD_RSP - char *res = NULL; - int res_len = 0; -#endif - - printf("[ATXP]: _AT_WLAN_POWER_MODE_\r\n"); - - if (!arg) { - printf("[ATXP] Usage: ATXP=lps/ips/dtim/tdma[mode]\r\n"); - ret = RTW_BADARG; - goto exit; - } else { - argc = parse_param(arg, argv); - if (argc < 3) { - printf("[ATXP] Usage: ATXP=lps/ips/dtim/tdma[mode]\r\n"); - ret = RTW_BADARG; - goto exit; - } - } - - if (strcmp(argv[1], "lps") == 0) { - mode = atoi(argv[2]); - if (mode >= 0 && mode < 0xFF) { - printf("lps mode:%d\r\n", mode); - wifi_set_power_mode(0xff, mode); - } - } - - if (strcmp(argv[1], "ips") == 0) { - mode = atoi(argv[2]); - if (mode >= 0 && mode < 0xFF) { - printf("ips mode:%d\r\n", mode); - wifi_set_power_mode(mode, 0xFF); - } - } - - if (strcmp(argv[1], "tdma") == 0) { - if (argc >= 6) { - tdma_slot_period = atoi(argv[2]); - tdma_rfon_period_len_1 = atoi(argv[3]); - tdma_rfon_period_len_2 = atoi(argv[4]); - tdma_rfon_period_len_3 = atoi(argv[5]); - printf("tdma param: %d %d %d %d\r\n", tdma_slot_period, tdma_rfon_period_len_1, tdma_rfon_period_len_2, tdma_rfon_period_len_3); - wifi_set_tdma_param(tdma_slot_period, tdma_rfon_period_len_1, tdma_rfon_period_len_2, tdma_rfon_period_len_3); - } - } - - if (strcmp(argv[1], "dtim") == 0) { - dtim = atoi(argv[2]); - printf("dtim: %d\r\n", dtim); - wifi_set_lps_dtim(dtim); - } - - if (strcmp(argv[1], "get") == 0) { -#if CONFIG_INIC_CMD_RSP - char buf[32]; - int index = 0; - memset(buf, 0, sizeof(buf)); - snprintf(buf, 32, "%s,%s,", argv[1], argv[2]); - index = strlen(buf); -#endif - if(strcmp(argv[2], "dtim") == 0){ - wifi_get_lps_dtim((unsigned char *)&dtim); - printf("get dtim: %d\r\n", (unsigned char)dtim); -#if CONFIG_INIC_CMD_RSP - sprintf(buf+index, "0x%02x", (unsigned char)dtim); - res = (char *)buf; - res_len = strlen(buf); -#endif - } - } - -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATXP", ret, res, res_len); - res = NULL; - res_len = 0; -#endif - return; -} -#endif - -void print_wlan_help(void *arg){ - printf("\n\rWLAN AT COMMAND SET:"); - printf("\n\r=============================="); - printf("\n\r1. Wlan Scan for Network Access Point"); - printf("\n\r # ATWS"); - printf("\n\r2. Connect to an AES AP"); - printf("\n\r # ATW0=SSID"); - printf("\n\r # ATW1=PASSPHRASE"); - printf("\n\r # ATWC"); - printf("\n\r3. Create an AES AP"); - printf("\n\r # ATW3=SSID"); - printf("\n\r # ATW4=PASSPHRASE"); - printf("\n\r # ATW5=CHANNEL"); - printf("\n\r # ATWA"); - printf("\n\r4. Ping"); - printf("\n\r # ATWI=xxx.xxx.xxx.xxx"); -} - -#if WIFI_LOGO_CERTIFICATION_CONFIG -void fATPE(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - unsigned int ip_addr = 0; - //unsigned char sta_ip[4] = {192,168,3,80}, sta_netmask[4] = {255,255,255,0}, sta_gw[4] = {192,168,3,1}; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPE] Usage : ATPE=(,,)"); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if( (argc > 4) || (argc < 2) ){ - //at_printf("\r\n[ATPE] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if(argv[1] != NULL){ - ip_addr = inet_addr(argv[1]); - sta_ip[0] = (unsigned char) ip_addr & 0xff; - sta_ip[1] = (unsigned char) (ip_addr >> 8) & 0xff; - sta_ip[2] = (unsigned char) (ip_addr >> 16) & 0xff; - sta_ip[3] = (unsigned char) (ip_addr >> 24) & 0xff; - } - else{ - //at_printf("\r\n[ATPE] ERROR : parameter format error"); - error_no = 2; - goto exit; - } - - if(argv[2] != NULL){ - ip_addr = inet_addr(argv[2]); - sta_gw[0] = (unsigned char) ip_addr & 0xff; - sta_gw[1] = (unsigned char) (ip_addr >> 8) & 0xff; - sta_gw[2] = (unsigned char) (ip_addr >> 16) & 0xff; - sta_gw[3] = (unsigned char) (ip_addr >> 24) & 0xff; - } - else{ - sta_gw[0] = sta_ip[0]; - sta_gw[1] = sta_ip[1]; - sta_gw[2] = sta_ip[2]; - sta_gw[3] = 1; - } - - if(argv[3] != NULL){ - ip_addr = inet_addr(argv[3]); - sta_netmask[0] = (unsigned char) ip_addr & 0xff; - sta_netmask[1] = (unsigned char) (ip_addr >> 8) & 0xff; - sta_netmask[2] = (unsigned char) (ip_addr >> 16) & 0xff; - sta_netmask[3] = (unsigned char) (ip_addr >> 24) & 0xff; - } - else{ - sta_netmask[0] = 255; - sta_netmask[1] = 255; - sta_netmask[2] = 255; - sta_netmask[3] = 0; - } - -exit: - if(error_no==0) - at_printf("\r\n[ATPE] OK"); - else - at_printf("\r\n[ATPE] ERROR:%d",error_no); - - return; - -} -#endif - -#elif ATCMD_VER == ATVER_2 // UART module at command - -//ATPA=,,,[,] -void fATPA(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - -#if CONFIG_LWIP_LAYER - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - struct netif * pnetif; -#endif - int timeout = 20; - unsigned char hidden_ssid = 0; - rtw_mode_t wifi_mode_copy; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPA] Usage: ATPA=,,,[,]"); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if(argc < 5){ - //at_printf("\r\n[ATPA] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if( (wifi_mode!=RTW_MODE_AP) && (wifi_mode!=RTW_MODE_STA_AP) ){ - //at_printf("\r\n[ATPA] ERROR : wifi mode error"); - error_no = 5; - goto exit; - } - wifi_mode_copy = wifi_mode; - - //SSID - if(argv[1] != NULL){ - ap.ssid.len = strlen((char*)argv[1]); - if(ap.ssid.len > 32){ - //at_printf("\r\n[ATPA] ERROR : SSID length can't exceed 32"); - error_no = 2; - goto exit; - } - strcpy((char *)ap.ssid.val, (char*)argv[1]); - } - else{ - //at_printf("\r\n[ATPA] ERROR : SSID can't be empty"); - error_no = 2; - goto exit; - } - - //PASSWORD - if(argv[2] != NULL){ - if( (strlen(argv[2]) < 8) || (strlen(argv[2]) > 64)){ - //at_printf("\r\n[ATPA] ERROR : PASSWORD length error"); - error_no = 2; - goto exit; - } - strcpy((char *)password, (char*)argv[2]); - ap.password = password; - ap.password_len = strlen((char*)argv[2]); - ap.security_type = RTW_SECURITY_WPA2_AES_PSK; - } - else{ - ap.security_type = RTW_SECURITY_OPEN; - } - - //CHANNEL - if(argv[3] != NULL){ - ap.channel = (unsigned char) atoi((const char *)argv[3]); - if( (ap.channel < 0) || (ap.channel > 11) ){ - //at_printf("\r\n[ATPA] ERROR : channel number error"); - error_no = 2; - goto exit; - } - } - - //HIDDEN SSID - if(argv[4] != NULL){ - if( (atoi(argv[4]) != 0) && (atoi(argv[4]) != 1)){ - //at_printf("\r\n[ATPA] ERROR : HIDDEN SSID must be 0 or 1"); - error_no = 2; - goto exit; - } - hidden_ssid = (unsigned char) atoi((const char *)argv[4]); - } - - //MAX NUMBER OF STATION - if(argv[5] != NULL){ - unsigned char max_sta = atoi(argv[5]); - if(wext_set_sta_num(max_sta) != 0){ - error_no = 2; - goto exit; - } - } - -#if CONFIG_WEBSERVER - //store into flash - memset(wifi_setting.ssid, 0, sizeof(wifi_setting.ssid)); - memcpy(wifi_setting.ssid, ap.ssid.val, strlen((char*)ap.ssid.val)); - wifi_setting.ssid[ap.ssid.len] = '\0'; - wifi_setting.security_type = ap.security_type; - if(ap.security_type !=0) - wifi_setting.security_type = 1; - else - wifi_setting.security_type = 0; - if (ap.password) - memcpy(wifi_setting.password, ap.password, strlen((char*)ap.password)); - else - memset(wifi_setting.password, 0, sizeof(wifi_setting.password)); - wifi_setting.channel = ap.channel; -#if CONFIG_READ_FLASH - StoreApInfo(); -#endif -#endif - -#if CONFIG_LWIP_LAYER - dhcps_deinit(); -#endif - - wifi_unreg_event_handler(WIFI_EVENT_DISCONNECT, atcmd_wifi_disconn_hdl); - - wifi_off(); - vTaskDelay(20); - - if (wifi_on(wifi_mode_copy) < 0){ - //at_printf("\r\n[ATPA] ERROR : Wifi on failed"); - error_no = 3; - goto exit; - } - - if(wifi_start_ap((char*)ap.ssid.val, ap.security_type, (char*)ap.password, ap.channel, hidden_ssid) < 0) { - //at_printf("\r\n[ATPA] ERROR : Start AP failed"); - error_no = 4; - goto exit; - } - - while(1) { - char essid[33]; - if(wifi_mode_copy == RTW_MODE_AP ){ - if(wext_get_ssid( WLAN0_NAME , (unsigned char *) essid) > 0) { - if(strcmp((const char *) essid, (const char *)ap.ssid.val) == 0) { - break; - } - } - } - else if(wifi_mode_copy == RTW_MODE_STA_AP ){ - if(wext_get_ssid( WLAN1_NAME , (unsigned char *) essid) > 0) { - if(strcmp((const char *) essid, (const char *)ap.ssid.val) == 0) { - break; - } - } - } - - if(timeout == 0) { - //at_printf("\r\n[ATPA] ERROR : Start AP timeout"); - error_no = 4; - break; - } - - vTaskDelay(1 * configTICK_RATE_HZ); - timeout --; - } -#if CONFIG_LWIP_LAYER - if(wifi_mode == RTW_MODE_STA_AP) - pnetif = &xnetif[1]; - else - pnetif = &xnetif[0]; - - LwIP_UseStaticIP(pnetif); - - if(dhcp_mode_ap == 1) - dhcps_init(pnetif); -#endif - -exit: - init_wifi_struct(); - - if(error_no == 0) - at_printf("\r\n[ATPA] OK"); - else - at_printf("\r\n[ATPA] ERROR:%d",error_no); - - return; -} - -/*find ap with "ssid" from scan list*/ -static int _find_ap_from_scan_buf(char*buf, int buflen, char *target_ssid, void *user_data) -{ - rtw_wifi_setting_t *pwifi = (rtw_wifi_setting_t *)user_data; - int plen = 0; - - while(plen < buflen){ - u8 len, ssid_len, security_mode; - char *ssid; - - // len offset = 0 - len = (int)*(buf + plen); - // check end - if(len == 0) break; - // ssid offset = 14 - ssid_len = len - 14; - ssid = buf + plen + 14 ; - if((ssid_len == strlen(target_ssid)) - && (!memcmp(ssid, target_ssid, ssid_len))) - { - strcpy((char*)pwifi->ssid, target_ssid); - // channel offset = 13 - pwifi->channel = *(buf + plen + 13); - // security_mode offset = 11 - security_mode = (u8)*(buf + plen + 11); - if(security_mode == IW_ENCODE_ALG_NONE) - pwifi->security_type = RTW_SECURITY_OPEN; - else if(security_mode == IW_ENCODE_ALG_WEP) - pwifi->security_type = RTW_SECURITY_WEP_PSK; - else if(security_mode == IW_ENCODE_ALG_CCMP) - pwifi->security_type = RTW_SECURITY_WPA2_AES_PSK; - break; - } - plen += len; - } - return 0; -} - -/*get ap security mode from scan list*/ -static int _get_ap_security_mode(IN char * ssid, OUT rtw_security_t *security_mode, OUT u8 * channel) -{ - rtw_wifi_setting_t wifi; - u32 scan_buflen = 1000; - - memset(&wifi, 0, sizeof(wifi)); - - if(wifi_scan_networks_with_ssid(_find_ap_from_scan_buf, (void*)&wifi, scan_buflen, ssid, strlen(ssid)) != RTW_SUCCESS){ - printf("Wifi scan failed!\n"); - return 0; - } - - if(strcmp(wifi.ssid, ssid) == 0){ - *security_mode = wifi.security_type; - *channel = wifi.channel; - return 1; - } - - return 0; -} - -//ATPN=,[,,] -static void atcmd_wifi_disconn_hdl( char* buf, int buf_len, int flags, void* userdata) -{ - #if CONFIG_LOG_SERVICE_LOCK - log_service_lock(); - #endif - at_printf("\r\n[ATWD] OK"); - at_printf(STR_END_OF_ATCMD_RET); - #if CONFIG_LOG_SERVICE_LOCK - log_service_unlock(); - #endif -} -void fATPN(void *arg) -{ - int argc, error_no = 0; - int i,j; - char *argv[MAX_ARGC] = {0}; - - int mode, ret; - unsigned long tick1 = xTaskGetTickCount(); - unsigned long tick2, tick3; - char empty_bssid[6] = {0}, assoc_by_bssid = 0; - u8 connect_channel; - u8 pscan_config; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPN] Usage : ATPN=,[,,]"); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if( (argc < 2) || (argc > 5) ){ - //at_printf("\r\n[ATPN] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if( (wifi_mode!=RTW_MODE_STA) && (wifi_mode!=RTW_MODE_STA_AP) ){ - //at_printf("\r\n[ATPN] ERROR : wifi mode error"); - error_no = 5; - goto exit; - } - - //SSID - if(argv[1] != NULL){ - strcpy((char *)wifi.ssid.val, (char*)argv[1]); - wifi.ssid.len = strlen((char*)argv[1]); - }else{ - //at_printf("\r\n[ATPN] ERROR : SSID can't be Empty"); - error_no = 2; - goto exit; - } - wifi.security_type = RTW_SECURITY_OPEN; - - //PASSWORD - if(argv[2] != NULL){ - int pwd_len = strlen(argv[2]); - if(pwd_len > 64 || (pwd_len < 8 && pwd_len != 5)){ - //at_printf("\r\n[ATPN] ERROR : PASSWORD format error"); - error_no = 2; - goto exit; - } - strcpy((char *)password, (char*)argv[2]); - wifi.password = password; - wifi.password_len = strlen((char*)argv[2]); - wifi.security_type = RTW_SECURITY_WPA2_AES_PSK; - } - - //KEYID - if(argv[3] != NULL){ - if((strlen((const char *)argv[3]) != 1 ) || (*(char*)argv[3] <'0' ||*(char*)argv[3] >'3')) { - //at_printf("\r\n[ATPN] ERROR : Wrong WEP key id. Must be one of 0,1,2, or 3"); - error_no = 2; - goto exit; - } - wifi.key_id = atoi((const char *)(argv[3])); - wifi.security_type = RTW_SECURITY_WEP_PSK; - } - - //BSSID - if(argv[4] != NULL){ - if(strlen(argv[4]) != 12){ - //at_printf("\r\n[ATPN] ERROR : BSSID format error"); - error_no = 2; - goto exit; - } - for (i=0, j=0; i= 3){ - printf("Can't get AP security mode and channel.\n"); - error_no = 6; - goto exit; - } - } - if(wifi.security_type == RTW_SECURITY_WEP_PSK || wifi.security_type == RTW_SECURITY_WEP_SHARED) - wifi.key_id = (wifi.key_id <0 || wifi.key_id >3)?0:wifi.key_id; - } - pscan_config = PSCAN_ENABLE; - if(connect_channel > 0 && connect_channel < 14) - wifi_set_pscan_chan(&connect_channel, &pscan_config, 1); -#endif - - wifi_unreg_event_handler(WIFI_EVENT_DISCONNECT, atcmd_wifi_disconn_hdl); - - ret = wifi_connect( - wifi.bssid.octet, - assoc_by_bssid, - (char*)wifi.ssid.val, - wifi.security_type, - (char*)wifi.password, - wifi.key_id, - NULL); - - if(ret!= RTW_SUCCESS){ - //at_printf("\r\n[ATPN] ERROR: Can't connect to AP"); - error_no = 4; - goto exit; - } - -#if CONFIG_LWIP_LAYER - if (dhcp_mode_sta == 2){ - struct netif * pnetif = &xnetif[0]; - LwIP_UseStaticIP(pnetif); - dhcps_init(pnetif); - } - else{ - ret = LwIP_DHCP(0, DHCP_START); - if(ret != DHCP_ADDRESS_ASSIGNED) - error_no = 7; - } -#endif - - -exit: - init_wifi_struct(); - if(error_no == 0){ - wifi_reg_event_handler(WIFI_EVENT_DISCONNECT, atcmd_wifi_disconn_hdl, NULL); - at_printf("\r\n[ATPN] OK"); - } - else - at_printf("\r\n[ATPN] ERROR:%d",error_no); - - return; -} - -//ATPH=, -void fATPH(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - int mode,enable; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPH] Usage : ATPH=,"); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if(argc != 3){ - //at_printf("\r\n[ATPH] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if(argv[1] != NULL){ - mode = atoi((const char *)(argv[1])); - if(mode != 1 && mode != 2){ - //at_printf("\r\n[ATPH] ERROR : parameter must be 1 or 2"); - error_no = 2; - goto exit; - } - } - - if(argv[2] != NULL){ - enable = atoi((const char *)(argv[2])); - if(enable != 1 && enable != 2){ - //at_printf("\r\n[ATPH] ERROR : parameter must be 1 or 2"); - error_no = 2; - goto exit; - } - if(mode == 1) - dhcp_mode_ap = enable; - else if(mode == 2) - dhcp_mode_sta = enable; - } - -exit: - if(error_no==0) - at_printf("\r\n[ATPH] OK"); - else - at_printf("\r\n[ATPH] ERROR:%d",error_no); - - return; - -} - -//ATPE=(,,) -void fATPE(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - unsigned int ip_addr = 0; - //unsigned char sta_ip[4] = {192,168,3,80}, sta_netmask[4] = {255,255,255,0}, sta_gw[4] = {192,168,3,1}; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPE] Usage : ATPE=(,,)"); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if( (argc > 4) || (argc < 2) ){ - //at_printf("\r\n[ATPE] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if(argv[1] != NULL){ - ip_addr = inet_addr(argv[1]); - sta_ip[0] = (unsigned char) ip_addr & 0xff; - sta_ip[1] = (unsigned char) (ip_addr >> 8) & 0xff; - sta_ip[2] = (unsigned char) (ip_addr >> 16) & 0xff; - sta_ip[3] = (unsigned char) (ip_addr >> 24) & 0xff; - } - else{ - //at_printf("\r\n[ATPE] ERROR : parameter format error"); - error_no = 2; - goto exit; - } - - if(argv[2] != NULL){ - ip_addr = inet_addr(argv[2]); - sta_gw[0] = (unsigned char) ip_addr & 0xff; - sta_gw[1] = (unsigned char) (ip_addr >> 8) & 0xff; - sta_gw[2] = (unsigned char) (ip_addr >> 16) & 0xff; - sta_gw[3] = (unsigned char) (ip_addr >> 24) & 0xff; - } - else{ - sta_gw[0] = sta_ip[0]; - sta_gw[1] = sta_ip[1]; - sta_gw[2] = sta_ip[2]; - sta_gw[3] = 1; - } - - if(argv[3] != NULL){ - ip_addr = inet_addr(argv[3]); - sta_netmask[0] = (unsigned char) ip_addr & 0xff; - sta_netmask[1] = (unsigned char) (ip_addr >> 8) & 0xff; - sta_netmask[2] = (unsigned char) (ip_addr >> 16) & 0xff; - sta_netmask[3] = (unsigned char) (ip_addr >> 24) & 0xff; - } - else{ - sta_netmask[0] = 255; - sta_netmask[1] = 255; - sta_netmask[2] = 255; - sta_netmask[3] = 0; - } - -exit: - if(error_no==0) - at_printf("\r\n[ATPE] OK"); - else - at_printf("\r\n[ATPE] ERROR:%d",error_no); - - return; - -} - -//ATPF=,, -void fATPF(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - unsigned int ip_addr = 0; - struct ip_addr start_ip, end_ip; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPF] Usage : ATPF=,,(,,)"); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if( (argc != 4) ){ - //at_printf("\r\n[ATPF] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if(argv[1] != NULL){ - start_ip.addr = inet_addr(argv[1]); - } - else{ - //at_printf("\r\n[ATPF] ERROR : parameter format error"); - error_no = 2; - goto exit; - } - - if(argv[2] != NULL){ - end_ip.addr = inet_addr(argv[2]); - } - else{ - //at_printf("\r\n[ATPF] ERROR : parameter format error"); - error_no = 2; - goto exit; - } - - dhcps_set_addr_pool(1,&start_ip,&end_ip); - - if(argv[3] != NULL){ - ip_addr = inet_addr(argv[3]); - ap_ip[0] = (unsigned char) ip_addr & 0xff; - ap_ip[1] = (unsigned char) (ip_addr >> 8) & 0xff; - ap_ip[2] = (unsigned char) (ip_addr >> 16) & 0xff; - ap_ip[3] = (unsigned char) (ip_addr >> 24) & 0xff; - } - else{ - //at_printf("\r\n[ATPF] ERROR : parameter format error"); - error_no = 2; - goto exit; - } - - ap_gw[0] = ap_ip[0]; - ap_gw[1] = ap_ip[1]; - ap_gw[2] = ap_ip[2]; - ap_gw[3] = ap_ip[3]; - - ap_netmask[0] = 255; - ap_netmask[1] = 255; - ap_netmask[2] = 255; - ap_netmask[3] = 0; - -exit: - if(error_no==0) - at_printf("\r\n[ATPF] OK"); - else - at_printf("\r\n[ATPF] ERROR:%d",error_no); - - return; -} - -int atcmd_wifi_read_info_from_flash(u8 *read_data, u32 read_len) -{ - atcmd_update_partition_info(AT_PARTITION_WIFI, AT_PARTITION_READ, read_data, read_len); - return 0; -} - -void atcmd_wifi_write_info_to_flash(rtw_wifi_setting_t *setting, int enable) -{ - struct atcmd_wifi_conf *data_to_flash; - rtw_wifi_setting_t *old_setting; - - flash_t flash; - u32 channel = 0, i, write_needed = 0; - u8 index = 0; - u32 data; - - data_to_flash = (struct atcmd_wifi_conf *)malloc(sizeof(struct atcmd_wifi_conf)); - - if(data_to_flash) { - if(enable){ - memset((u8 *)data_to_flash, 0, sizeof(struct atcmd_wifi_conf)); - atcmd_update_partition_info(AT_PARTITION_WIFI, AT_PARTITION_READ, (u8 *)data_to_flash, sizeof(struct atcmd_wifi_conf)); - old_setting = &(data_to_flash->setting); - if(memcmp((u8 *)old_setting, setting, sizeof(rtw_wifi_setting_t))){ - memcpy(old_setting, setting, sizeof(rtw_wifi_setting_t)); - write_needed = 1; - } - if(setting->mode == RTW_MODE_STA || setting->mode == RTW_MODE_STA_AP){ - struct wlan_fast_reconnect reconn; - int found = 0; - /*clean wifi ssid,key and bssid*/ - memset((u8 *)&reconn, 0, sizeof(struct wlan_fast_reconnect)); - - channel = setting->channel; - - memset(psk_essid[index], 0, sizeof(psk_essid[index])); - strncpy(psk_essid[index], setting->ssid, strlen(setting->ssid)); - switch(setting->security_type){ - case RTW_SECURITY_OPEN: - memset(psk_passphrase[index], 0, sizeof(psk_passphrase[index])); - memset(wpa_global_PSK[index], 0, sizeof(wpa_global_PSK[index])); - reconn.security_type = RTW_SECURITY_OPEN; - break; - case RTW_SECURITY_WEP_PSK: - channel |= (setting->key_idx) << 28; - memset(psk_passphrase[index], 0, sizeof(psk_passphrase[index])); - memset(wpa_global_PSK[index], 0, sizeof(wpa_global_PSK[index])); - memcpy(psk_passphrase[index], setting->password, sizeof(psk_passphrase[index])); - reconn.security_type = RTW_SECURITY_WEP_PSK; - break; - case RTW_SECURITY_WPA_TKIP_PSK: - reconn.security_type = RTW_SECURITY_WPA_TKIP_PSK; - break; - case RTW_SECURITY_WPA2_AES_PSK: - reconn.security_type = RTW_SECURITY_WPA2_AES_PSK; - break; - default: - break; - } - - memcpy(reconn.psk_essid, psk_essid[index], sizeof(reconn.psk_essid)); - if (strlen(psk_passphrase64) == 64) { - memcpy(reconn.psk_passphrase, psk_passphrase64, sizeof(reconn.psk_passphrase)); - } else { - memcpy(reconn.psk_passphrase, psk_passphrase[index], sizeof(reconn.psk_passphrase)); - } - memcpy(reconn.wpa_global_PSK, wpa_global_PSK[index], sizeof(reconn.wpa_global_PSK)); - memcpy(&(reconn.channel), &channel, 4); - - if(data_to_flash->reconn_num < 0 || data_to_flash->reconn_num > ATCMD_WIFI_CONN_STORE_MAX_NUM || - data_to_flash->reconn_last_index < 0 || data_to_flash->reconn_last_index > ATCMD_WIFI_CONN_STORE_MAX_NUM - ){ - data_to_flash->reconn_num = 0; - data_to_flash->reconn_last_index = -1; - } - - reconn.enable = enable; - for(i = 0; i < data_to_flash->reconn_num; i++){ - if(memcmp((u8 *)&reconn, (u8 *)&(data_to_flash->reconn[i]), sizeof(struct wlan_fast_reconnect)) == 0) { - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ALWAYS, - "the same profile found in flash"); - found = 1; - break; - } - } - if(!found){ - data_to_flash->reconn_last_index++; - if(data_to_flash->reconn_last_index >= ATCMD_WIFI_CONN_STORE_MAX_NUM) - data_to_flash->reconn_last_index -= ATCMD_WIFI_CONN_STORE_MAX_NUM; - memcpy((u8 *)&data_to_flash->reconn[data_to_flash->reconn_last_index], (u8 *)&reconn, sizeof(struct wlan_fast_reconnect)); - data_to_flash->reconn_num++; - if(data_to_flash->reconn_num > ATCMD_WIFI_CONN_STORE_MAX_NUM) - data_to_flash->reconn_num = ATCMD_WIFI_CONN_STORE_MAX_NUM; - write_needed = 1; - } - } - if(write_needed || data_to_flash->auto_enable != enable){ - data_to_flash->auto_enable = enable; - atcmd_update_partition_info(AT_PARTITION_WIFI, AT_PARTITION_WRITE, (u8 *)data_to_flash, sizeof(struct atcmd_wifi_conf)); - } - }else{ - atcmd_update_partition_info(AT_PARTITION_WIFI, AT_PARTITION_ERASE, (u8 *)data_to_flash, sizeof(struct atcmd_wifi_conf)); - } - } - if(data_to_flash) { - free(data_to_flash); - } -} - -int atcmd_wifi_restore_from_flash(void) -{ - flash_t flash; - struct atcmd_wifi_conf *data; - rtw_wifi_setting_t *setting; - struct wlan_fast_reconnect *reconn; - uint32_t channel; - uint32_t security_type; - uint8_t pscan_config; - char key_id[2] = {0}; - int ret = -1, i; - int mode; - rtw_network_info_t wifi = { - {0}, // ssid - {0}, // bssid - 0, // security - NULL, // password - 0, // password len - -1 // key id - }; - - data = (struct atcmd_wifi_conf *)rtw_zmalloc(sizeof(struct atcmd_wifi_conf)); - if(data){ - atcmd_update_partition_info(AT_PARTITION_WIFI, AT_PARTITION_READ, (u8 *)data, sizeof(struct atcmd_wifi_conf)); - if(data->auto_enable != 1) - goto exit; - setting = &data->setting; - if(setting->mode == RTW_MODE_AP || setting->mode == RTW_MODE_STA_AP){ - //start AP here - goto exit; - } - - //Check if in AP mode - wext_get_mode(WLAN0_NAME, &mode); - if(mode == IW_MODE_MASTER) { -#if CONFIG_LWIP_LAYER - dhcps_deinit(); -#endif - wifi_off(); - vTaskDelay(20); - if (wifi_on(RTW_MODE_STA) < 0){ - printf("\n\rERROR: Wifi on failed!"); - ret = -1; - goto exit; - } - } - -#if CONFIG_AUTO_RECONNECT - //setup reconnection flag - wifi_set_autoreconnect(0); -#endif - int last_index = data->reconn_last_index; - for(i = 0; i < data->reconn_num; i++){ - reconn = &data->reconn[last_index]; - last_index ++; - if(last_index >= ATCMD_WIFI_CONN_STORE_MAX_NUM) - last_index -= ATCMD_WIFI_CONN_STORE_MAX_NUM; - if(reconn->enable != 1){ - continue; - } - memcpy(psk_essid, reconn->psk_essid, sizeof(reconn->psk_essid)); - memcpy(psk_passphrase, reconn->psk_passphrase, sizeof(reconn->psk_passphrase)); - memcpy(wpa_global_PSK, reconn->wpa_global_PSK, sizeof(reconn->wpa_global_PSK)); - channel = reconn->channel; - sprintf(key_id,"%d",(char) (channel>>28)); - channel &= 0xff; - security_type = reconn->security_type; - pscan_config = PSCAN_ENABLE | PSCAN_FAST_SURVEY; - //set partial scan for entering to listen beacon quickly - wifi_set_pscan_chan((uint8_t *)&channel, &pscan_config, 1); - - wifi.security_type = security_type; - //SSID - strcpy((char *)wifi.ssid.val, (char*)psk_essid); - wifi.ssid.len = strlen((char*)psk_essid); - - switch(security_type){ - case RTW_SECURITY_WEP_PSK: - wifi.password = (unsigned char*) psk_passphrase; - wifi.password_len = strlen((char*)psk_passphrase); - wifi.key_id = atoi((const char *)key_id); - break; - case RTW_SECURITY_WPA_TKIP_PSK: - case RTW_SECURITY_WPA2_AES_PSK: - wifi.password = (unsigned char*) psk_passphrase; - wifi.password_len = strlen((char*)psk_passphrase); - break; - default: - break; - } - ret = wifi_connect( - NULL, - 0, - (char*)wifi.ssid.val, - wifi.security_type, - (char*)wifi.password, - wifi.key_id, - NULL); - if(ret == RTW_SUCCESS){ - LwIP_DHCP(0, DHCP_START); - ret = 0; - break; - } - } - } - -exit: - if(ret == 0) - wifi_reg_event_handler(WIFI_EVENT_DISCONNECT, atcmd_wifi_disconn_hdl, NULL); - if(data) - rtw_mfree((u8 *)data, sizeof(struct wlan_fast_reconnect)); - return ret; -} - -//ATPG= -void fATPG(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; -// flash_t flash; -// struct wlan_fast_reconnect read_data = {0}; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPG] Usage : ATPG="); - error_no = 1; - goto exit; - } - argc = parse_param(arg, argv); - if(argc != 2){ - //at_printf("\r\n[ATPG] ERROR : command format error"); - error_no = 1; - goto exit; - } - - //ENABLE FAST CONNECT - if(argv[1] != NULL){ -#if 0 - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, FAST_RECONNECT_DATA, sizeof(struct wlan_fast_reconnect), (u8 *) &read_data); - read_data.enable = atoi((const char *)(argv[1])); - if(read_data.enable != 0 && read_data.enable != 1){ - //at_printf("\r\n[ATPG] ERROR : parameter must be 0 or 1"); - error_no = 2; - device_mutex_unlock(RT_DEV_LOCK_FLASH); - goto exit; - } - flash_erase_sector(&flash, FAST_RECONNECT_DATA); - flash_stream_write(&flash, FAST_RECONNECT_DATA, sizeof(struct wlan_fast_reconnect), (u8 *) &read_data); - device_mutex_unlock(RT_DEV_LOCK_FLASH); -#else - rtw_wifi_setting_t setting; - int enable = atoi((const char *)(argv[1])); - if(enable != 0 && enable != 1){ - error_no = 2; - goto exit; - } - if(enable == 1){ - u8 *ifname[1] = {WLAN0_NAME}; - if(wifi_get_setting((const char*)ifname[0],&setting)){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "wifi_get_setting fail"); - error_no = 3; - goto exit; - } - } - atcmd_wifi_write_info_to_flash(&setting, enable); -#endif - } - -exit: - if(error_no==0) - at_printf("\r\n[ATPG] OK"); - else - at_printf("\r\n[ATPG] ERROR:%d",error_no); - - return; -} - -//ATPM= -void fATPM(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPM] Usage : ATPM="); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if(argc != 2){ - //at_printf("\r\n[ATPM] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if(argv[1] != NULL){ - if(strlen(argv[1]) != 12){ - //at_printf("\r\n[ATPM] ERROR : BSSID format error"); - error_no = 2; - goto exit; - } - wifi_set_mac_address(argv[1]); - } - -exit: - if(error_no==0) - at_printf("\r\n[ATPM] OK"); - else - at_printf("\r\n[ATPM] ERROR:%d",error_no); - - return; - -} - -//ATPW= -void fATPW(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPW] Usage : ATPW="); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if(argc != 2){ - //at_printf("\r\n[ATPW] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if(argv[1] != NULL){ - wifi_mode = atoi((const char *)(argv[1])); - if((wifi_mode!=RTW_MODE_STA) && (wifi_mode!=RTW_MODE_AP) && (wifi_mode!=RTW_MODE_STA_AP) ){ - //at_printf("\r\n[ATPW] ERROR : parameter must be 1 , 2 or 3"); - error_no = 2; - } - } - -exit: - if(error_no==0) - at_printf("\r\n[ATPW] OK"); - else - at_printf("\r\n[ATPW] ERROR:%d",error_no); - - return; -} - -void print_wlan_help(void *arg){ - at_printf("\r\nWLAN AT COMMAND SET:"); - at_printf("\r\n=============================="); - at_printf("\r\n1. Wlan Scan for Network Access Point"); - at_printf("\r\n # ATWS"); - at_printf("\r\n2. Connect to an AES AP"); - at_printf("\r\n # ATPN=,,(,)"); - at_printf("\r\n3. Create an AES AP"); - at_printf("\r\n # ATPA=,,,"); -} - -#endif // end of #if ATCMD_VER == ATVER_1 - -#endif // end of #if CONFIG_WLAN - -#if CONFIG_LWIP_LAYER -#if ATCMD_VER == ATVER_1 -void fATWL(void *arg){ -#if CONFIG_SSL_CLIENT - int argc; - char *argv[MAX_ARGC] = {0}; - printf("[ATWL]: _AT_WLAN_SSL_CLIENT_\n\r"); - argv[0] = "ssl_client"; - if(!arg){ - printf("ATWL=SSL_SERVER_HOST\n\r"); - return; - } - if((argc = parse_param(arg, argv)) > 1){ - if(argc != 2) { - printf("ATWL=SSL_SERVER_HOST\n\r"); - return; - } - - cmd_ssl_client(argc, argv); - } -#else - printf("Please set CONFIG_SSL_CLIENT 1 in platform_opts.h to enable ATWL command\n"); -#endif -} - -void fATWI(void *arg){ - int argc; - char *argv[MAX_ARGC] = {0}; - - printf("[ATWI]: _AT_WLAN_PING_TEST_\n\r"); - - if(!arg){ - printf("\n\r[ATWI] Usage: ATWI=[host],[options]\n"); - printf("\n\r -t Ping the specified host until stopped\n"); - printf(" \r -n # Number of echo requests to send (default 4 times)\n"); - printf(" \r -l # Send buffer size (default 32 bytes)\n"); - printf("\n\r Example:\n"); - printf(" \r ATWI=192.168.1.2,-n,100,-l,5000\n"); - return; - } - - argv[0] = "ping"; - - if((argc = parse_param(arg, argv)) > 1){ - cmd_ping(argc, argv); - } -} - -void fATWT(void *arg) -{ -#if CONFIG_BSD_TCP - int argc; - char *argv[MAX_ARGC] = {0}; - - printf("[ATWT]: _AT_WLAN_TCP_TEST_\n\r"); - - if(!arg){ - printf("\n\r[ATWT] Usage: ATWT=[-s|-c,host|stop],[options]\n"); - printf("\n\r Client/Server:\n"); - printf(" \r stop terminate client & server\n"); - printf(" \r -i # seconds between periodic bandwidth reports\n"); - printf(" \r -l # length of buffer to read or write (default 1460 Bytes)\n"); - printf(" \r -p # server port to listen on/connect to (default 5001)\n"); - printf("\n\r Server specific:\n"); - printf(" \r -s run in server mode\n"); - printf("\n\r Client specific:\n"); - printf(" \r -c run in client mode, connecting to \n"); - printf(" \r -d do a bidirectional test simultaneously\n"); - printf(" \r -t # time in seconds to transmit for (default 10 secs)\n"); - printf(" \r -n #[KM] number of bytes to transmit (instead of -t)\n"); - printf("\n\r Example:\n"); - printf(" \r ATWT=-s,-p,5002\n"); - printf(" \r ATWT=-c,192.168.1.2,-t,100,-p,5002\n"); - return; - } - - argv[0] = "tcp"; - - if((argc = parse_param(arg, argv)) > 1){ - cmd_tcp(argc, argv); - } -#else - printf("Please set CONFIG_BSD_TCP 1 in platform_opts.h to enable ATWT command\n"); -#endif -} - -void fATWU(void *arg) -{ -#if CONFIG_BSD_TCP - int argc; - char *argv[MAX_ARGC] = {0}; - - printf("[ATWU]: _AT_WLAN_UDP_TEST_\n\r"); - - if(!arg){ - printf("\n\r[ATWU] Usage: ATWU=[-s|-c,host|stop][options]\n"); - printf("\n\r Client/Server:\n"); - printf(" \r stop terminate client & server\n"); - printf(" \r -i # seconds between periodic bandwidth reports\n"); - printf(" \r -l # length of buffer to read or write (default 1460 Bytes)\n"); - printf(" \r -p # server port to listen on/connect to (default 5001)\n"); - printf("\n\r Server specific:\n"); - printf(" \r -s run in server mode\n"); - printf("\n\r Client specific:\n"); - printf(" \r -b #[KM] for UDP, bandwidth to send at in bits/sec (default 1 Mbit/sec)\n"); - printf(" \r -c run in client mode, connecting to \n"); - printf(" \r -d do a bidirectional test simultaneously\n"); - printf(" \r -t # time in seconds to transmit for (default 10 secs)\n"); - printf(" \r -n #[KM] number of bytes to transmit (instead of -t)\n"); - printf(" \r -S # set the IP 'type of service'\n"); - printf("\n\r Example:\n"); - printf(" \r ATWU=-s,-p,5002\n"); - printf(" \r ATWU=-c,192.168.1.2,-t,100,-p,5002\n"); - return; - } - - argv[0] = "udp"; - - if((argc = parse_param(arg, argv)) > 1){ - cmd_udp(argc, argv); - } -#else - printf("Please set CONFIG_BSD_TCP 1 in platform_opts.h to enable ATWU command\n"); -#endif -} -#elif ATCMD_VER == ATVER_2 // uart at command -//move to atcmd_lwip.c -#endif -#endif -log_item_t at_wifi_items[ ] = { -#if ATCMD_VER == ATVER_1 -#if CONFIG_LWIP_LAYER - {"ATWL", fATWL,}, - {"ATWI", fATWI,}, - {"ATWT", fATWT,}, - {"ATWU", fATWU,}, -#endif -#if WIFI_LOGO_CERTIFICATION_CONFIG - {"ATPE", fATPE,}, // set static IP for STA -#endif -#if CONFIG_WLAN - {"ATW0", fATW0,}, - {"ATW1", fATW1,}, - {"ATW2", fATW2,}, - {"ATW3", fATW3,}, - {"ATW4", fATW4,}, - {"ATW5", fATW5,}, - {"ATW6", fATW6,}, - {"ATWA", fATWA,}, -#ifdef CONFIG_CONCURRENT_MODE - {"ATWB", fATWB,}, -#endif - {"ATWC", fATWC,}, - {"ATWD", fATWD,}, - {"ATWP", fATWP,}, -#if CONFIG_WOWLAN_SERVICE - {"ATWV", fATWV,}, -#endif - {"ATWR", fATWR,}, - {"ATWS", fATWS,}, -#if SCAN_WITH_SSID - {"ATWs", fATWs,}, -#endif -#ifdef CONFIG_PROMISC - {"ATWM", fATWM,}, -#endif - {"ATWZ", fATWZ,}, -#if CONFIG_OTA_UPDATE - {"ATWO", fATWO,}, -#endif -#if CONFIG_WEBSERVER - {"ATWE", fATWE,}, -#endif -#if (CONFIG_INCLUDE_SIMPLE_CONFIG) - {"ATWQ", fATWQ,}, -#endif -#ifdef CONFIG_WPS - {"ATWW", fATWW,}, - {"ATWw", fATWw,}, //wps registrar for softap -#if CONFIG_ENABLE_P2P - {"ATWG", fATWG,}, //p2p start - {"ATWH", fATWH,}, //p2p stop - {"ATWJ", fATWJ,}, //p2p connect - {"ATWK", fATWK,}, //p2p disconnect - {"ATWN", fATWN,}, //p2p info - {"ATWF", fATWF,}, //p2p find - {"ATWg", fATWg,}, //p2p auto go start -#endif -#endif - -#if CONFIG_AIRKISS - {"ATWX", fATWX,}, -#endif - {"ATW?", fATWx,}, - {"ATW+ABC", fATWx,}, -#ifdef CONFIG_POWER_SAVING - {"ATXP", fATXP,}, -#endif -#endif -#elif ATCMD_VER == ATVER_2 // uart at command -#if CONFIG_WLAN - {"ATPA", fATPA,}, // set AP - {"ATPN", fATPN,}, // connect to Network - {"ATPH", fATPH,}, // set DHCP mode - {"ATPE", fATPE,}, // set static IP for STA - {"ATPF", fATPF,}, // set DHCP rule for AP - {"ATPG", fATPG,}, // set auto connect - {"ATPM", fATPM,}, // set MAC address - {"ATPW", fATPW,}, // set Wifi mode - {"ATWD", fATWD,}, // WiFi Disconnect - {"ATWS", fATWS,}, // WiFi scan - {"ATW?", fATWx,}, // Wlan Info -#if (CONFIG_INCLUDE_SIMPLE_CONFIG) - {"ATWQ", fATWQ,}, // WiFi simple config -#endif // #if (CONFIG_INCLUDE_SIMPLE_CONFIG) -#endif // #if CONFIG_WLAN -#endif // end of #if ATCMD_VER == ATVER_1 -}; - -#if ATCMD_VER == ATVER_2 -void print_wifi_at(void *arg){ - int index; - int cmd_len = 0; - - cmd_len = sizeof(at_wifi_items)/sizeof(at_wifi_items[0]); - for(index = 0; index < cmd_len; index++) - at_printf("\r\n%s", at_wifi_items[index].log_cmd); -} -#endif - -void at_wifi_init(void) -{ -#if CONFIG_WLAN - init_wifi_struct(); -#endif - log_service_add_table(at_wifi_items, sizeof(at_wifi_items)/sizeof(at_wifi_items[0])); -} - -#if SUPPORT_LOG_SERVICE -log_module_init(at_wifi_init); -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_wifi.h b/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_wifi.h deleted file mode 100644 index d56ad52..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_wifi.h +++ /dev/null @@ -1,166 +0,0 @@ -#ifndef __ATCMD_WIFI_H__ -#define __ATCMD_WIFI_H__ -#include -#include "main.h" -#include "lwip_netconf.h" -#ifdef USE_FLASH_EEP -#include "flash_eep.h" -#include "feep_config.h" -#endif - -#ifndef WLAN0_NAME - #define WLAN0_NAME "wlan0" -#endif -#ifndef WLAN1_NAME - #define WLAN1_NAME "wlan1" -#endif -/* Give default value if not defined */ -#ifndef NET_IF_NUM - #ifdef CONFIG_CONCURRENT_MODE - #define NET_IF_NUM ((CONFIG_ETHERNET) + (CONFIG_WLAN) + 1) - #else - #define NET_IF_NUM ((CONFIG_ETHERNET) + (CONFIG_WLAN)) - #endif // end of CONFIG_CONCURRENT_MODE -#endif // end of NET_IF_NUM - -/*Static IP ADDRESS*/ -#ifndef IP_ADDR0 -#define IP_ADDR0 192 -#define IP_ADDR1 168 -#define IP_ADDR2 3 -#define IP_ADDR3 80 -#endif - -/*NETMASK*/ -#ifndef NETMASK_ADDR0 -#define NETMASK_ADDR0 255 -#define NETMASK_ADDR1 255 -#define NETMASK_ADDR2 255 -#define NETMASK_ADDR3 0 -#endif - -/*Gateway Address*/ -#ifndef GW_ADDR0 -#define GW_ADDR0 192 -#define GW_ADDR1 168 -#define GW_ADDR2 3 -#define GW_ADDR3 1 -#endif - -/*Static IP ADDRESS*/ -#ifndef AP_IP_ADDR0 -#define AP_IP_ADDR0 192 -#define AP_IP_ADDR1 168 -#define AP_IP_ADDR2 43 -#define AP_IP_ADDR3 1 -#endif - -/*NETMASK*/ -#ifndef AP_NETMASK_ADDR0 -#define AP_NETMASK_ADDR0 255 -#define AP_NETMASK_ADDR1 255 -#define AP_NETMASK_ADDR2 255 -#define AP_NETMASK_ADDR3 0 -#endif - -/*Gateway Address*/ -#ifndef AP_GW_ADDR0 -#define AP_GW_ADDR0 192 -#define AP_GW_ADDR1 168 -#define AP_GW_ADDR2 43 -#define AP_GW_ADDR3 1 -#endif - -#if CONFIG_EXAMPLE_UART_ATCMD -#include "wifi_structures.h" -#include -typedef struct _UART_LOG_CONF_{ - u32 BaudRate; - u8 DataBits; - u8 StopBits; - u8 Parity; - u8 FlowControl; -}UART_LOG_CONF, *PUART_LOG_CONF; - -#define ATCMD_WIFI_CONN_STORE_MAX_NUM (1) -struct atcmd_wifi_conf{ - int32_t auto_enable; - rtw_wifi_setting_t setting; - int32_t reconn_num; - int32_t reconn_last_index; - struct wlan_fast_reconnect reconn[ATCMD_WIFI_CONN_STORE_MAX_NUM]; -}; - -#define ATCMD_LWIP_CONN_STORE_MAX_NUM (1) -struct atcmd_lwip_conn_info{ - int32_t role; //client, server or seed - uint32_t protocol; //tcp or udp - uint32_t remote_addr; //remote ip - uint32_t remote_port; //remote port - uint32_t local_addr; //locale ip, not used yet - uint32_t local_port; //locale port, not used yet - uint32_t reserved; //reserve for further use -}; -struct atcmd_lwip_conf { - int32_t enable; //enable or not - int32_t conn_num; - int32_t last_index; - int32_t reserved; //reserve for further use - struct atcmd_lwip_conn_info conn[ATCMD_LWIP_CONN_STORE_MAX_NUM]; -}; - -typedef enum { - AT_PARTITION_ALL = 0, - AT_PARTITION_UART = 1, - AT_PARTITION_WIFI = 2, - AT_PARTITION_LWIP = 3 -} AT_PARTITION; - -typedef enum { - AT_PARTITION_READ = 0, - AT_PARTITION_WRITE = 1, - AT_PARTITION_ERASE = 2 -} AT_PARTITION_OP; - -//first segment for uart -#define UART_SETTING_BACKUP_SECTOR (0x8000) -#define UART_CONF_DATA_OFFSET (0) -#define UART_CONF_DATA_SIZE ((((sizeof(UART_LOG_CONF)-1)>>2) + 1)<<2) - -//second segment for wifi config -#define WIFI_CONF_DATA_OFFSET (UART_CONF_DATA_OFFSET+UART_CONF_DATA_SIZE) -#define WIFI_CONF_DATA_SIZE ((((sizeof(struct atcmd_wifi_conf)-1)>>2) + 1)<<2) - -//fouth segment for lwip config -#define LWIP_CONF_DATA_OFFSET (WIFI_CONF_DATA_OFFSET+WIFI_CONF_DATA_SIZE) -#define LWIP_CONF_DATA_SIZE ((((sizeof(struct atcmd_lwip_conf)-1)>>2) + 1)<<2) - -extern void atcmd_update_partition_info(AT_PARTITION id, AT_PARTITION_OP ops, u8 *data, u16 len); - -#define ATSTRING_LEN (LOG_SERVICE_BUFLEN) -extern char at_string[ATSTRING_LEN]; - -extern unsigned char gAT_Echo; // default echo on -//extern void uart_at_lock(void); -//extern void uart_at_unlock(void); -extern void uart_at_send_string(char *str); -extern void uart_at_send_buf(u8 *buf, u32 len); - -#define at_printf(fmt, args...) do{\ - /*uart_at_lock();*/\ - snprintf(at_string, ATSTRING_LEN, fmt, ##args); \ - uart_at_send_string(at_string);\ - /*uart_at_unlock();*/\ - }while(0) -#define at_print_data(data, size) do{\ - /*uart_at_lock();*/\ - uart_at_send_buf(data, size);\ - /*uart_at_unlock();*/\ - }while(0) - -#else -#define at_printf(fmt, args...) do{printf(fmt, ##args);}while(0) -#define at_print_data(data, size) do{__rtl_memDump(data, size, NULL);}while(0) -#endif//#if CONFIG_EXAMPLE_UART_ATCMD - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_wifi1.c b/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_wifi1.c deleted file mode 100644 index 46dbc5b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_wifi1.c +++ /dev/null @@ -1,2873 +0,0 @@ -#include -#ifdef CONFIG_AT_WIFI - -#include "FreeRTOS.h" -#include "task.h" -#include "semphr.h" -#include "log_service.h" -#include "atcmd_wifi.h" -#include -#include "tcpip.h" -#include -#include "osdep_service.h" - -#if CONFIG_WLAN -#include -#include -#include - -extern rtw_mode_t wifi_mode; // = RTW_MODE_STA; - -#endif - -/* Give default value if not defined */ -#ifndef NET_IF_NUM - #ifdef CONFIG_CONCURRENT_MODE - #define NET_IF_NUM ((CONFIG_ETHERNET) + (CONFIG_WLAN) + 1) - #else - #define NET_IF_NUM ((CONFIG_ETHERNET) + (CONFIG_WLAN)) - #endif // end of CONFIG_CONCURRENT_MODE -#endif // end of NET_IF_NUM - -#ifndef ATCMD_VER -#define ATVER_1 1 -#define ATVER_2 2 -#define ATCMD_VER ATVER_2 -#if CONFIG_EXAMPLE_UART_ATCMD -#define ATCMD_VER ATVER_2 -#else -#define ATCMD_VER ATVER_1 -#endif -#endif - - -#if ATCMD_VER == ATVER_2 -#include "flash_api.h" -#ifdef USE_FLASH_EEP -#include "flash_eep.h" -#endif -#include "device_lock.h" -#include -#include -#endif - -/******************************************************************************/ -#define _AT_WLAN_SET_SSID_ "ATW0" -#define _AT_WLAN_SET_PASSPHRASE_ "ATW1" -#define _AT_WLAN_SET_KEY_ID_ "ATW2" -#define _AT_WLAN_AP_SET_SSID_ "ATW3" -#define _AT_WLAN_AP_SET_SEC_KEY_ "ATW4" -#define _AT_WLAN_AP_SET_CHANNEL_ "ATW5" -#define _AT_WLAN_SET_BSSID_ "ATW6" -#define _AT_WLAN_AP_ACTIVATE_ "ATWA" -#define _AT_WLAN_AP_STA_ACTIVATE_ "ATWB" -#define _AT_WLAN_JOIN_NET_ "ATWC" -#define _AT_WLAN_DISC_NET_ "ATWD" -#define _AT_WLAN_WEB_SERVER_ "ATWE" -#define _AT_WLAN_P2P_FIND_ "ATWF" -#define _AT_WLAN_P2P_START_ "ATWG" -#define _AT_WLAN_P2P_STOP_ "ATWH" -#define _AT_WLAN_PING_TEST_ "ATWI" -#define _AT_WLAN_P2P_CONNECT_ "ATWJ" -#define _AT_WLAN_P2P_DISCONNECT_ "ATWK" -#define _AT_WLAN_SSL_CLIENT_ "ATWL" -#define _AT_WLAN_PROMISC_ "ATWM" -#define _AT_WLAN_P2P_INFO_ "ATWN" -#define _AT_WLAN_OTA_UPDATE_ "ATWO" -#define _AT_WLAN_POWER_ "ATWP" -#define _AT_WLAN_SIMPLE_CONFIG_ "ATWQ" -#define _AT_WLAN_GET_RSSI_ "ATWR" -#define _AT_WLAN_SCAN_ "ATWS" -#define _AT_WLAN_SCAN_WITH_SSID_ "ATWs" -#define _AT_WLAN_TCP_TEST_ "ATWT" -#define _AT_WLAN_UDP_TEST_ "ATWU" -#define _AT_WLAN_WPS_ "ATWW" -#define _AT_WLAN_AP_WPS_ "ATWw" -#define _AT_WLAN_AIRKISS_ "ATWX" -#define _AT_WLAN_IWPRIV_ "ATWZ" -#define _AT_WLAN_INFO_ "ATW?" - -#define _AT_WLAN_EXTEND_POWER_MODE_ "ATXP" - -#ifndef CONFIG_SSL_CLIENT -#define CONFIG_SSL_CLIENT 0 -#endif -#ifndef CONFIG_WEBSERVER -#define CONFIG_WEBSERVER 0 -#endif -#ifndef CONFIG_OTA_UPDATE -#define CONFIG_OTA_UPDATE 0 -#endif -#ifndef CONFIG_BSD_TCP -#define CONFIG_BSD_TCP 1 -#endif -#ifndef CONFIG_ENABLE_P2P -#define CONFIG_ENABLE_P2P 0 -#endif -#define SCAN_WITH_SSID 0 -#if CONFIG_WEBSERVER -#define CONFIG_READ_FLASH 1 -extern rtw_wifi_setting_t wifi_setting; -#endif - -#ifndef CONFIG_WOWLAN_SERVICE -#define CONFIG_WOWLAN_SERVICE 0 -#endif - -#if CONFIG_LWIP_LAYER -extern void cmd_tcp(int argc, char **argv); -extern void cmd_udp(int argc, char **argv); -extern void cmd_ping(int argc, char **argv); -extern void cmd_ssl_client(int argc, char **argv); -#endif - -#if CONFIG_WLAN -extern void cmd_promisc(int argc, char **argv); -extern void cmd_update(int argc, char **argv); -extern void cmd_simple_config(int argc, char **argv); -#if CONFIG_ENABLE_WPS -extern void cmd_wps(int argc, char **argv); -#endif - -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP -extern void cmd_ap_wps(int argc, char **argv); -extern int wpas_wps_dev_config(u8 *dev_addr, u8 bregistrar); -#endif -#if CONFIG_ENABLE_P2P -extern void cmd_wifi_p2p_start(int argc, char **argv); -extern void cmd_wifi_p2p_stop(int argc, char **argv); -extern void cmd_p2p_listen(int argc, char **argv); -extern void cmd_p2p_find(int argc, char **argv); -extern void cmd_p2p_peers(int argc, char **argv); -extern void cmd_p2p_info(int argc, char **argv); -extern void cmd_p2p_disconnect(int argc, char **argv); -extern void cmd_p2p_connect(int argc, char **argv); -extern int cmd_wifi_p2p_auto_go_start(int argc, char **argv); -#endif //CONFIG_ENABLE_P2P -#if CONFIG_AIRKISS -extern int airkiss_start(); -#endif -#if CONFIG_LWIP_LAYER -extern struct netif xnetif[NET_IF_NUM]; -#endif -#if CONFIG_WOWLAN_SERVICE -extern void cmd_wowlan_service(int argc, char **argv); -#endif -#if CONFIG_INIC_CMD_RSP -extern void inic_c2h_wifi_info(const char *atcmd, char status); -extern void inic_c2h_msg(const char *atcmd, u8 status, char *msg, u16 msg_len); -#endif - -/* fastconnect use wifi AT command. Not init_wifi_struct when log service disabled - * static initialize all values for using fastconnect when log service disabled - */ -static rtw_network_info_t wifi = { - {0}, // ssid - {0}, // bssid - 0, // security - NULL, // password - 0, // password len - -1 // key id -}; - -static rtw_ap_info_t ap = {0}; -static unsigned char password[65] = {0}; - -#if ATCMD_VER == ATVER_2 -unsigned char dhcp_mode_sta = 1, dhcp_mode_ap = 1; -unsigned char sta_ip[4] = {192,168,3,80}, sta_netmask[4] = {255,255,255,0}, sta_gw[4] = {192,168,3,1}; -unsigned char ap_ip[4] = {192,168,43,1}, ap_netmask[4] = {255,255,255,0}, ap_gw[4] = {192,168,43,1}; -#endif - - -static void init_wifi_struct(void) -{ - memset(wifi.ssid.val, 0, sizeof(wifi.ssid.val)); - memset(wifi.bssid.octet, 0, ETH_ALEN); - memset(password, 0, sizeof(password)); - wifi.ssid.len = 0; - wifi.password = NULL; - wifi.password_len = 0; - wifi.key_id = -1; - memset(ap.ssid.val, 0, sizeof(ap.ssid.val)); - ap.ssid.len = 0; - ap.password = NULL; - ap.password_len = 0; - ap.channel = 1; -} - -static void print_scan_result( rtw_scan_result_t* record ) -{ -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("%s,%d,%s,%d,"MAC_FMT"", record->SSID.val, record->channel, - ( record->security == RTW_SECURITY_OPEN ) ? "Open" : - ( record->security == RTW_SECURITY_WEP_PSK ) ? "WEP" : - ( record->security == RTW_SECURITY_WPA_TKIP_PSK ) ? "WPA TKIP" : - ( record->security == RTW_SECURITY_WPA_AES_PSK ) ? "WPA AES" : - ( record->security == RTW_SECURITY_WPA2_AES_PSK ) ? "WPA2 AES" : - ( record->security == RTW_SECURITY_WPA2_TKIP_PSK ) ? "WPA2 TKIP" : - ( record->security == RTW_SECURITY_WPA2_MIXED_PSK ) ? "WPA2 Mixed" : - ( record->security == RTW_SECURITY_WPA_WPA2_MIXED ) ? "WPA/WPA2 AES" : "Unknown", - record->signal_strength, MAC_ARG(record->BSSID.octet) ); -#else - RTW_API_INFO( ( "%s\t ", ( record->bss_type == RTW_BSS_TYPE_ADHOC ) ? "Adhoc" : "Infra" ) ); - RTW_API_INFO( ( MAC_FMT, MAC_ARG(record->BSSID.octet) ) ); - RTW_API_INFO( ( " %d\t ", record->signal_strength ) ); - RTW_API_INFO( ( " %d\t ", record->channel ) ); - RTW_API_INFO( ( " %d\t ", record->wps_type ) ); - RTW_API_INFO( ( "%s\t\t ", ( record->security == RTW_SECURITY_OPEN ) ? "Open" : - ( record->security == RTW_SECURITY_WEP_PSK ) ? "WEP" : - ( record->security == RTW_SECURITY_WPA_TKIP_PSK ) ? "WPA TKIP" : - ( record->security == RTW_SECURITY_WPA_AES_PSK ) ? "WPA AES" : - ( record->security == RTW_SECURITY_WPA2_AES_PSK ) ? "WPA2 AES" : - ( record->security == RTW_SECURITY_WPA2_TKIP_PSK ) ? "WPA2 TKIP" : - ( record->security == RTW_SECURITY_WPA2_MIXED_PSK ) ? "WPA2 Mixed" : - ( record->security == RTW_SECURITY_WPA_WPA2_MIXED ) ? "WPA/WPA2 AES" : - "Unknown" ) ); - - RTW_API_INFO( ( " %s ", record->SSID.val ) ); - RTW_API_INFO( ( "\r\n" ) ); -#endif -} - -static rtw_result_t app_scan_result_handler( rtw_scan_handler_result_t* malloced_scan_result ) -{ - static int ApNum = 0; - - if (malloced_scan_result->scan_complete != RTW_TRUE) { - rtw_scan_result_t* record = &malloced_scan_result->ap_details; - record->SSID.val[record->SSID.len] = 0; /* Ensure the SSID is null terminated */ - -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("\r\nAP : %d,", ++ApNum); -#else - RTW_API_INFO( ( "%d\t ", ++ApNum ) ); -#endif - print_scan_result(record); -#if CONFIG_INIC_CMD_RSP - if(malloced_scan_result->user_data) - memcpy((void *)((char *)malloced_scan_result->user_data+(ApNum-1)*sizeof(rtw_scan_result_t)), (char *)record, sizeof(rtw_scan_result_t)); -#endif - } else{ -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATWS", RTW_SUCCESS, (char *)malloced_scan_result->user_data, ApNum*sizeof(rtw_scan_result_t)); - if(malloced_scan_result->user_data) - free(malloced_scan_result->user_data); - inic_c2h_msg("ATWS", RTW_SUCCESS, NULL, 0); -#endif -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("\r\n[ATWS] OK"); - at_printf(STR_END_OF_ATCMD_RET); -#endif - ApNum = 0; - } - return RTW_SUCCESS; -} - -// WIFI disconnect -void fATWD(void *arg){ - int timeout = 10000/200; - char essid[33]; - int ret = RTW_SUCCESS; -#if ATCMD_VER == ATVER_2 - int error_no = 0; -#endif - - printf("[ATWD]: _AT_WLAN_DISC_NET_\n"); - printf("Deassociating AP ...\n"); - - if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) < 0) { - printf("WIFI disconnected\n"); - goto exit_success; - } - - if((ret = wifi_disconnect()) < 0) { - printf("ERROR: Operation failed!\n"); -#if ATCMD_VER == ATVER_2 - error_no = 3; -#endif - goto exit; - } - - while(1) { - if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) < 0) { - printf("WIFI disconnected\n"); - break; - } - - if(timeout == 0) { - printf("ERROR: Deassoc timeout!\n"); - ret = RTW_TIMEOUT; -#if ATCMD_VER == ATVER_2 - error_no = 4; -#endif - break; - } -// vTaskDelay(1 * configTICK_RATE_HZ); - vTaskDelay(200/portTICK_RATE_MS); - timeout --; - } - printf("\n"); -exit: -#if CONFIG_INIC_CMD_RSP - if(ret != RTW_SUCCESS) - inic_c2h_msg("ATWD", ret, NULL, 0); -#endif - init_wifi_struct( ); -#if ATCMD_VER == ATVER_2 - if(error_no==0) - at_printf("\r\n[ATWD] OK"); - else - at_printf("\r\n[ATWD] ERROR:%d",error_no); -#endif - return; -exit_success: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATWD", RTW_SUCCESS, NULL, 0); -#endif - init_wifi_struct( ); -#if ATCMD_VER == ATVER_2 - at_printf("\r\n[ATWD] OK"); -#endif - return; -} - -// wifi simpleconfig -#if (CONFIG_INCLUDE_SIMPLE_CONFIG) -void fATWQ(void *arg){ - int argc=0; - char *argv[2] = {0}; - printf("[ATWQ]: _AT_WLAN_SIMPLE_CONFIG_\n"); - argv[argc++] = "wifi_simple_config"; - if(arg){ - argv[argc++] = arg; - } - cmd_simple_config(argc, argv); -} -#endif - -// WIFI scan -void fATWS(void *arg){ - char buf[32] = {0}; - u8 *channel_list = NULL; - u8 *pscan_config = NULL; - int num_channel = 0; - int i, argc = 0; - char *argv[MAX_ARGC] = {0}; - int ret = RTW_SUCCESS; -#if CONFIG_INIC_CMD_RSP - u8 *inic_scan_buf = NULL; -#endif -#if ATCMD_VER == ATVER_2 - int error_no = 0; -#endif - printf("[ATWS]: _AT_WLAN_SCAN_\n"); - if(arg){ - strcpy(buf, arg); - argc = parse_param(buf, argv); - if(argc < 2){ - ret = RTW_BADARG; -#if ATCMD_VER == ATVER_2 - error_no = 1; -#endif - goto exit; - } - num_channel = atoi(argv[1]); - channel_list = (u8*)malloc(num_channel); - if(!channel_list){ - printf("[ATWS]ERROR: Can't malloc memory for channel list\n"); - ret = RTW_BUFFER_UNAVAILABLE_TEMPORARY; -#if ATCMD_VER == ATVER_2 - error_no = 2; -#endif - goto exit; - } - pscan_config = (u8*)malloc(num_channel); - if(!pscan_config){ - printf("[ATWS]ERROR: Can't malloc memory for pscan_config\n"); - ret = RTW_BUFFER_UNAVAILABLE_TEMPORARY; -#if ATCMD_VER == ATVER_2 - error_no = 3; -#endif - goto exit; - } - //parse command channel list - for(i = 2; i <= argc -1 ; i++){ - *(channel_list + i - 2) = (u8)atoi(argv[i]); - *(pscan_config + i - 2) = PSCAN_ENABLE; - } - - if((ret = wifi_set_pscan_chan(channel_list, pscan_config, num_channel)) < 0){ - printf("[ATWS]ERROR: wifi set partial scan channel fail\n"); -#if ATCMD_VER == ATVER_2 - error_no = 4; -#endif - goto exit; - } - } -#if CONFIG_INIC_CMD_RSP - inic_scan_buf = malloc(65*sizeof(rtw_scan_result_t)); - if(inic_scan_buf == NULL){ - ret = RTW_BUFFER_UNAVAILABLE_TEMPORARY; - goto exit; - } - memset(inic_scan_buf, 0, 65*sizeof(rtw_scan_result_t)); - if((ret = wifi_scan_networks(app_scan_result_handler, inic_scan_buf)) != RTW_SUCCESS){ - printf("[ATWS]ERROR: wifi scan failed\n"); - goto exit; - } -#else - if((ret = wifi_scan_networks(app_scan_result_handler, NULL )) != RTW_SUCCESS){ - printf("[ATWS]ERROR: wifi scan failed\n"); -#if ATCMD_VER == ATVER_2 - error_no = 5; -#endif - goto exit; - } -#endif -exit: -#if CONFIG_INIC_CMD_RSP - if(ret != RTW_SUCCESS){ - if(inic_scan_buf) - free(inic_scan_buf); - inic_c2h_msg("ATWS", ret, NULL, 0); - } -#endif -#if ATCMD_VER == ATVER_2 - if(error_no) - at_printf("[ATWS] ERROR:%d\n",error_no); -#endif - if(arg && channel_list) - free(channel_list); - if(arg && pscan_config) - free(pscan_config); -} - -void fATWx(void *arg){ - int i = 0; -#if CONFIG_LWIP_LAYER - u8 *mac = LwIP_GetMAC(&xnetif[0]); - u8 *ip = LwIP_GetIP(&xnetif[0]); - u8 *gw = LwIP_GetGW(&xnetif[0]); -#endif - u8 *ifname[2] = {WLAN0_NAME,WLAN1_NAME}; - rtw_wifi_setting_t setting; - - printf("[ATW?]: _AT_WLAN_INFO_\n"); -#if CONFIG_INIC_CMD_RSP - int ret = RTW_SUCCESS; - int info_sz = 0; - u8 *info = malloc(NET_IF_NUM*sizeof(rtw_wifi_setting_t)+3*sizeof(rtw_mac_t)); - if(info == NULL) - ret = RTW_BUFFER_UNAVAILABLE_TEMPORARY; -#endif - for(i=0;i %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]) ; - printf("\tIP => %d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]); - printf("\tGW => %d.%d.%d.%d\n", gw[0], gw[1], gw[2], gw[3]); -#endif - if(setting.mode == RTW_MODE_AP || i == 1) - { - int client_number; - struct { - int count; - rtw_mac_t mac_list[AP_STA_NUM]; - } client_info; - - client_info.count = AP_STA_NUM; - wifi_get_associated_client_list(&client_info, sizeof(client_info)); - - printf("Associated Client List:\n"); - printf("==============================\n"); - - if(client_info.count == 0) - printf("Client Num: 0\n", client_info.count); - else - { - printf("Client Num: %d\n", client_info.count); - for( client_number=0; client_number < client_info.count; client_number++ ) - { - printf("Client %d:\n", client_number + 1); - printf("\tMAC => "MAC_FMT"\n", - MAC_ARG(client_info.mac_list[client_number].octet)); -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("CLIENT:%d,"MAC_FMT"\n", client_number + 1, MAC_ARG(client_info.mac_list[client_number].octet)); -#endif -#if CONFIG_INIC_CMD_RSP - if(info){ - memcpy(info+info_sz, (void *)&client_info.mac_list[client_number], sizeof(rtw_mac_t)); - info_sz += sizeof(rtw_mac_t); - } -#endif - } - printf("\n\r"); - } - } - } -// show the ethernet interface info - else - { -#if CONFIG_ETHERNET - if(i == NET_IF_NUM - 1) - { -#if CONFIG_LWIP_LAYER - mac = LwIP_GetMAC(&xnetif[i]); - ip = LwIP_GetIP(&xnetif[i]); - gw = LwIP_GetGW(&xnetif[i]); - printf("\nInterface ethernet\n"); - printf("==============================\n"); - printf("\tMAC => %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]) ; - printf("\tIP => %d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]); - printf("\tGW => %d.%d.%d.%d\n", gw[0], gw[1], gw[2], gw[3]); -#endif // end CONFIG_LWIP_LAYER - } -#endif // end CONFIG_ETHERNET - } - } - -#if defined(configUSE_TRACE_FACILITY) && (configUSE_TRACE_FACILITY == 1) && (configUSE_STATS_FORMATTING_FUNCTIONS == 1) - { - char * pcWriteBuffer = malloc(1024); - if(pcWriteBuffer) { - vTaskList((char*)pcWriteBuffer); - printf("\nTask List:\n"); - printf("==============================\n"); - printf("Name\t Status Priority HighWaterMark TaskNumber\n%s\n", pcWriteBuffer); - free(pcWriteBuffer); - } - } -#endif - -#if CONFIG_INIC_CMD_RSP - if(ret != RTW_SUCCESS) - inic_c2h_msg("ATW?", ret, NULL, 0); - else - inic_c2h_msg("ATW?", RTW_SUCCESS, (char *)info, info_sz); - - if(info) - free(info); - info = NULL; -#endif - -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("\r\n[ATW?] OK"); -#endif - -} - -#if ATCMD_VER == ATVER_1 -void fATW0(void *arg){ - int ret = RTW_SUCCESS; - if(!arg){ - printf("[ATW0]Usage: ATW0=SSID\n"); - ret = RTW_BADARG; - goto exit; - } - printf("[ATW0]: _AT_WLAN_SET_SSID_ [%s]\n", (char*)arg); - strcpy((char *)wifi.ssid.val, (char*)arg); - wifi.ssid.len = strlen((char*)arg); -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATW0", ret, NULL, 0); -#endif - return; -} - -void fATW1(void *arg){ - int ret = RTW_SUCCESS; - printf("[ATW1]: _AT_WLAN_SET_PASSPHRASE_ [%s]\n", (char*)arg); - strcpy((char *)password, (char*)arg); - wifi.password = password; - wifi.password_len = strlen((char*)arg); -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATW1", ret, NULL, 0); -#endif - return; -} - -void fATW2(void *arg){ - int ret = RTW_SUCCESS; - printf("[ATW2]: _AT_WLAN_SET_KEY_ID_ [%s]\n", (char*)arg); - if((strlen((const char *)arg) != 1 ) || (*(char*)arg <'0' ||*(char*)arg >'3')) { - printf("Wrong WEP key id. Must be one of 0,1,2, or 3.\n"); - ret = RTW_BADARG; - goto exit; - } - wifi.key_id = atoi((const char *)(arg)); -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATW2", ret, NULL, 0); -#endif - return; -} - -void fATW3(void *arg){ - int ret = RTW_SUCCESS; - if(!arg){ - printf("[ATW3]Usage: ATW3=SSID\n"); - ret = RTW_BADARG; - goto exit; - } - - ap.ssid.len = strlen((char*)arg); - - if(ap.ssid.len > 32){ - printf("[ATW3]Error: SSID length can't exceed 32\n"); - ret = RTW_BADARG; - goto exit; - } - strcpy((char *)ap.ssid.val, (char*)arg); - - printf("[ATW3]: _AT_WLAN_AP_SET_SSID_ [%s]\n", ap.ssid.val); -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATW3", ret, NULL, 0); -#endif - return; -} - -void fATW4(void *arg){ - int ret = RTW_SUCCESS; - strcpy((char *)password, (char*)arg); - ap.password = password; - ap.password_len = strlen((char*)arg); - printf("[ATW4]: _AT_WLAN_AP_SET_SEC_KEY_ [%s]\n", ap.password); -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATW4", ret, NULL, 0); -#endif - return; -} - -void fATW5(void *arg){ - int ret = RTW_SUCCESS; - ap.channel = (unsigned char) atoi((const char *)arg); - printf("[ATW5]: _AT_WLAN_AP_SET_CHANNEL_ [channel %d]\n", ap.channel); -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATW5", ret, NULL, 0); -#endif - return; -} - -void fATW6(void *arg){ - u32 mac[ETH_ALEN]; - u32 i; - int ret = RTW_SUCCESS; - if(!arg){ - printf("[ATW6]Usage: ATW6=BSSID\n"); - ret = RTW_BADARG; - goto exit; - } - printf("[ATW6]: _AT_WLAN_SET_BSSID_ [%s]\n", (char*)arg); - sscanf(arg, MAC_FMT, mac, mac + 1, mac + 2, mac + 3, mac + 4, mac + 5); - for(i = 0; i < ETH_ALEN; i ++) - wifi.bssid.octet[i] = (u8)mac[i] & 0xFF; -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATW6", ret, NULL, 0); -#endif - return; -} - -void fATWA(void *arg){ -#if CONFIG_LWIP_LAYER - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - struct netif * pnetif = &xnetif[0]; -#endif - int timeout = 10000/200; - int ret = RTW_SUCCESS; - printf("[ATWA]: _AT_WLAN_AP_ACTIVATE_\n"); - if(ap.ssid.val[0] == 0){ - printf("[ATWA]Error: SSID can't be empty\n"); - ret = RTW_BADARG; - goto exit; - } - if(ap.password == NULL){ - ap.security_type = RTW_SECURITY_OPEN; - } - else{ - ap.security_type = RTW_SECURITY_WPA2_AES_PSK; - } - -#if CONFIG_WEBSERVER - //store into flash - memset(wifi_setting.ssid, 0, sizeof(wifi_setting.ssid));; - memcpy(wifi_setting.ssid, ap.ssid.val, strlen((char*)ap.ssid.val)); - wifi_setting.ssid[ap.ssid.len] = '\0'; - wifi_setting.security_type = ap.security_type; - if(ap.security_type !=0) - wifi_setting.security_type = 1; - else - wifi_setting.security_type = 0; - if (ap.password) - memcpy(wifi_setting.password, ap.password, strlen((char*)ap.password)); - else - memset(wifi_setting.password, 0, sizeof(wifi_setting.password)); - wifi_setting.channel = ap.channel; -#if CONFIG_READ_FLASH - StoreApInfo(); -#endif -#endif - -#if CONFIG_LWIP_LAYER - dhcps_deinit(); - IP4_ADDR(&ipaddr, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1 , NETMASK_ADDR2, NETMASK_ADDR3); - IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - netif_set_addr(pnetif, &ipaddr, &netmask,&gw); -#ifdef CONFIG_DONT_CARE_TP - pnetif->flags |= NETIF_FLAG_IPSWITCH; -#endif -#endif - wifi_off(); - vTaskDelay(20); - if (wifi_on(RTW_MODE_AP) < 0){ - printf("ERROR: Wifi on failed!\n"); - ret = RTW_ERROR; - goto exit; - } - printf("Starting AP ...\n"); - -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - wpas_wps_dev_config(pnetif->hwaddr, 1); -#endif - if((ret = wifi_start_ap((char*)ap.ssid.val, ap.security_type, (char*)ap.password, ap.ssid.len, ap.password_len, ap.channel) )< 0) { - printf("ERROR: Operation failed!\n"); - goto exit; - } - - while(1) { - char essid[33]; - - if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) > 0) { - if(strcmp((const char *) essid, (const char *)ap.ssid.val) == 0) { - printf("%s started\n", ap.ssid.val); - ret = RTW_SUCCESS; - break; - } - } - - if(timeout == 0) { - printf("ERROR: Start AP timeout!\n"); - ret = RTW_TIMEOUT; - break; - } - //vTaskDelay(1 * configTICK_RATE_HZ); - vTaskDelay(200/portTICK_RATE_MS); - timeout --; - } -#if CONFIG_LWIP_LAYER - //LwIP_UseStaticIP(pnetif); - dhcps_init(pnetif); -#endif - -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_wifi_info("ATWA", ret); -#endif - init_wifi_struct( ); -} - -#if CONFIG_INIC_EN -static int _find_ap_from_scan_buf(char*buf, int buflen, char *target_ssid, void *user_data) -{ - rtw_wifi_setting_t *pwifi = (rtw_wifi_setting_t *)user_data; - int plen = 0; - - while(plen < buflen){ - u8 len, ssid_len, security_mode; - char *ssid; - - // len offset = 0 - len = (int)*(buf + plen); - // check end - if(len == 0) break; - // ssid offset = 14 - ssid_len = len - 14; - ssid = buf + plen + 14 ; - if((ssid_len == strlen(target_ssid)) - && (!memcmp(ssid, target_ssid, ssid_len))) - { - strcpy((char*)pwifi->ssid, target_ssid); - // channel offset = 13 - pwifi->channel = *(buf + plen + 13); - // security_mode offset = 11 - security_mode = (u8)*(buf + plen + 11); - if(security_mode == IW_ENCODE_ALG_NONE) - pwifi->security_type = RTW_SECURITY_OPEN; - else if(security_mode == IW_ENCODE_ALG_WEP) - pwifi->security_type = RTW_SECURITY_WEP_PSK; - else if(security_mode == IW_ENCODE_ALG_CCMP) - pwifi->security_type = RTW_SECURITY_WPA2_AES_PSK; - break; - } - plen += len; - } - return 0; -} - -static int _get_ap_security_mode(IN char * ssid, OUT rtw_security_t *security_mode, OUT u8 * channel) -{ - rtw_wifi_setting_t wifi; - u32 scan_buflen = 1000; - - memset(&wifi, 0, sizeof(wifi)); - - if(wifi_scan_networks_with_ssid(_find_ap_from_scan_buf, (void*)&wifi, scan_buflen, ssid, strlen(ssid)) != RTW_SUCCESS){ - printf("Wifi scan failed!\n"); - return 0; - } - - if(strcmp(wifi.ssid, ssid) == 0){ - *security_mode = wifi.security_type; - *channel = wifi.channel; - return 1; - } - - return 0; -} -#endif - -void fATWC(void *arg){ - int mode, ret; - unsigned long tick1 = xTaskGetTickCount(); - unsigned long tick2, tick3; - char empty_bssid[6] = {0}, assoc_by_bssid = 0; - - printf("[ATWC]: _AT_WLAN_JOIN_NET_\n"); - if(memcmp (wifi.bssid.octet, empty_bssid, 6)) - assoc_by_bssid = 1; - else if(wifi.ssid.val[0] == 0){ - printf("[ATWC]Error: SSID can't be empty\n"); - ret = RTW_BADARG; - goto EXIT; - } - if(wifi.password != NULL){ - if((wifi.key_id >= 0)&&(wifi.key_id <= 3)) { - wifi.security_type = RTW_SECURITY_WEP_PSK; - } - else{ - wifi.security_type = RTW_SECURITY_WPA2_AES_PSK; - } - } - else{ - wifi.security_type = RTW_SECURITY_OPEN; - } - //Check if in AP mode - wext_get_mode(WLAN0_NAME, &mode); - if(mode == IW_MODE_MASTER) { -#if CONFIG_LWIP_LAYER - dhcps_deinit(); -#endif - wifi_off(); - vTaskDelay(20); - if (wifi_on(RTW_MODE_STA) < 0){ - printf("ERROR: Wifi on failed!\n"); - ret = RTW_ERROR; - goto EXIT; - } - } - -#if CONFIG_INIC_EN //get security mode from scan list - u8 connect_channel; - u8 pscan_config; - //the keyID may be not set for WEP which may be confued with WPA2 - if((wifi.security_type == RTW_SECURITY_UNKNOWN)||(wifi.security_type == RTW_SECURITY_WPA2_AES_PSK)) - { - int security_retry_count = 0; - while (1) { - if (_get_ap_security_mode((char*)wifi.ssid.val, &wifi.security_type, &connect_channel)) - break; - security_retry_count++; - if(security_retry_count >= 3){ - printf("Can't get AP security mode and channel.\n"); - ret = RTW_NOTFOUND; - goto EXIT; - } - } - if(wifi.security_type == RTW_SECURITY_WEP_PSK || wifi.security_type == RTW_SECURITY_WEP_SHARED) - wifi.key_id = (wifi.key_id <0 || wifi.key_id >3)?0:wifi.key_id; -#if 0 //implemented in wifi_connect() - //hex to ascii conversion - if(wifi.security_type == RTW_SECURITY_WEP_PSK) - { - if(wifi.password_len == 10) - { - u32 p[5]; - u8 pwd[6], i = 0; - sscanf((const char*)wifi.password, "%02x%02x%02x%02x%02x", &p[0], &p[1], &p[2], &p[3], &p[4]); - for(i=0; i< 5; i++) - pwd[i] = (u8)p[i]; - pwd[5] = '\0'; - memset(wifi.password, 0, 65); - strcpy((char*)wifi.password, (char*)pwd); - wifi.password_len = 5; - }else if(wifi.password_len == 26){ - u32 p[13]; - u8 pwd[14], i = 0; - sscanf((const char*)wifi.password, "%02x%02x%02x%02x%02x%02x%02x"\ - "%02x%02x%02x%02x%02x%02x", &p[0], &p[1], &p[2], &p[3], &p[4],\ - &p[5], &p[6], &p[7], &p[8], &p[9], &p[10], &p[11], &p[12]); - for(i=0; i< 13; i++) - pwd[i] = (u8)p[i]; - pwd[13] = '\0'; - memset(wifi.password, 0, 65); - strcpy((char*)wifi.password, (char*)pwd); - wifi.password_len = 13; - } - } -#endif - } - pscan_config = PSCAN_ENABLE; - if(connect_channel > 0 && connect_channel < 14) - wifi_set_pscan_chan(&connect_channel, &pscan_config, 1); -#endif - - if(assoc_by_bssid){ - printf("Joining BSS by BSSID "MAC_FMT" ...\n", MAC_ARG(wifi.bssid.octet)); - } else { - printf("Joining BSS by SSID %s...\n", (char*)wifi.ssid.val); - } - ret = wifi_connect(wifi.bssid.octet, - assoc_by_bssid, - (char*)wifi.ssid.val, - wifi.security_type, - (char*)wifi.password, - wifi.key_id, - NULL); - - if(ret!= RTW_SUCCESS){ - printf("ERROR: Can't connect to AP\n"); - goto EXIT; - } - tick2 = xTaskGetTickCount(); - printf("Connected after %dms.\n", (tick2-tick1)); -#if CONFIG_LWIP_LAYER - /* Start DHCPClient */ - LwIP_DHCP(0, DHCP_START); - tick3 = xTaskGetTickCount(); - printf("Got IP after %dms.\n", (tick3-tick1)); -#endif -// printf("\n\r"); -EXIT: -#if CONFIG_INIC_CMD_RSP - inic_c2h_wifi_info("ATWC", ret); -#endif - - init_wifi_struct( ); -} - -#if SCAN_WITH_SSID -void fATWs(void *arg){ - char buf[32] = {0}; - u8 *channel_list = NULL; - u8 *pscan_config = NULL; - int scan_buf_len = 500; - int num_channel = 0; - int i, argc = 0; - char *argv[MAX_ARGC] = {0}; - printf("[ATWs]: _AT_WLAN_SCAN_WITH_SSID_ [%s]\n", (char*)wifi.ssid.val); - if(arg){ - strcpy(buf, arg); - argc = parse_param(buf, argv); - if(argc == 2){ - scan_buf_len = atoi(argv[1]); - if(scan_buf_len < 36){ - printf("[ATWs] BUFFER_LENGTH too short\n"); - goto exit; - } - }else if(argc > 2){ - num_channel = atoi(argv[1]); - channel_list = (u8*)malloc(num_channel); - if(!channel_list){ - printf("[ATWs]ERROR: Can't malloc memory for channel list\n"); - goto exit; - } - pscan_config = (u8*)malloc(num_channel); - if(!pscan_config){ - printf("[ATWs]ERROR: Can't malloc memory for pscan_config\n"); - goto exit; - } - //parse command channel list - for(i = 2; i <= argc -1 ; i++){ - *(channel_list + i - 2) = (u8)atoi(argv[i]); - *(pscan_config + i - 2) = PSCAN_ENABLE; - } - - if(wifi_set_pscan_chan(channel_list, pscan_config, num_channel) < 0){ - printf("[ATWs]ERROR: wifi set partial scan channel fail\n"); - goto exit; - } - } - }else{ - printf("[ATWs]For Scan all channel Usage: ATWs=BUFFER_LENGTH\n"); - printf("[ATWs]For Scan partial channel Usage: ATWs=num_channels[channel_num1, ...]\n"); - goto exit; - } - - if(wifi_scan_networks_with_ssid(NULL, NULL, scan_buf_len, (char*)wifi.ssid.val, wifi.ssid.len) != RTW_SUCCESS){ - printf("[ATWs]ERROR: wifi scan failed\n"); - } -exit: - init_wifi_struct( ); - if(arg && channel_list) - free(channel_list); - if(arg && pscan_config) - free(pscan_config); -} -#endif - -void fATWR(void *arg){ - int rssi = 0; - printf("[ATWR]: _AT_WLAN_GET_RSSI_\n"); - wifi_get_rssi(&rssi); - printf("wifi_get_rssi: rssi = %d\n", rssi); -// printf(""); -} - -void fATWP(void *arg){ - unsigned int parm = atoi((const char *)(arg)); - printf("[ATWP]: _AT_WLAN_POWER_[%s]\n", parm?"ON":"OFF"); - if(parm == 1){ - if(wifi_on(RTW_MODE_STA)<0){ - printf("ERROR: Wifi on failed!\n"); - } - } - else if(parm == 0) - { -#if CONFIG_WEBSERVER - stop_web_server(); -#endif - wifi_off(); - } - else - printf("[ATWP]Usage: ATWP=0/1\n"); -} - -#if CONFIG_WOWLAN_SERVICE -//for wowlan setting -void fATWV(void *arg){ - int argc; - char *argv[MAX_ARGC] = {0}; - - printf("[ATWV]: _AT_WLAN_WOWLAN_\n"); - - argc = parse_param(arg, argv); - - cmd_wowlan_service(argc, argv); - - return; -} -#endif - -#ifdef CONFIG_CONCURRENT_MODE -void fATWB(void *arg) -{ - int timeout = 10000/200; - int ret = RTW_SUCCESS; -#if CONFIG_LWIP_LAYER - struct netif * pnetiff = (struct netif *)&xnetif[1]; -#endif - printf("[ATWB](_AT_WLAN_AP_STA_ACTIVATE_)\n"); - if(ap.ssid.val[0] == 0){ - printf("[ATWB]Error: SSID can't be empty\n"); - ret = RTW_BADARG; - goto exit; - } - if(ap.channel > 14){ - printf("[ATWB]Error:bad channel! channel is from 1 to 14\n"); - ret = RTW_BADARG; - goto exit; - } - if(ap.password == NULL){ - ap.security_type = RTW_SECURITY_OPEN; - } - else{ - ap.security_type = RTW_SECURITY_WPA2_AES_PSK; - } - -#if CONFIG_WEBSERVER - //store into flash - memset(wifi_setting.ssid, 0, sizeof(wifi_setting.ssid));; - memcpy(wifi_setting.ssid, ap.ssid.val, strlen((char*)ap.ssid.val)); - wifi_setting.ssid[ap.ssid.len] = '\0'; - wifi_setting.security_type = ap.security_type; - if(ap.security_type !=0) - wifi_setting.security_type = 1; - else - wifi_setting.security_type = 0; - if (ap.password) - memcpy(wifi_setting.password, ap.password, strlen((char*)ap.password)); - else - memset(wifi_setting.password, 0, sizeof(wifi_setting.password));; - wifi_setting.channel = ap.channel; -#if CONFIG_READ_FLASH - StoreApInfo(); -#endif -#endif - -#if CONFIG_LWIP_LAYER - dhcps_deinit(); -#endif - - wifi_off(); - vTaskDelay(20); - if ((ret = wifi_on(RTW_MODE_STA_AP)) < 0){ - printf("ERROR: Wifi on failed!\n"); - ret = RTW_ERROR; - goto exit; - } - - printf("Starting AP ...\n"); - if((ret = wifi_start_ap((char*)ap.ssid.val, ap.security_type, (char*)ap.password, ap.ssid.len, ap.password_len, ap.channel)) < 0) { - printf("ERROR: Operation failed!\n"); - goto exit; - } - while(1) { - char essid[33]; - - if(wext_get_ssid(WLAN1_NAME, (unsigned char *) essid) > 0) { - if(strcmp((const char *) essid, (const char *)ap.ssid.val) == 0) { - printf("%s started\n", ap.ssid.val); - ret = RTW_SUCCESS; - break; - } - } - - if(timeout == 0) { - printf("ERROR: Start AP timeout!\n"); - ret = RTW_TIMEOUT; - break; - } - -// vTaskDelay(1 * configTICK_RATE_HZ); - vTaskDelay(200/portTICK_RATE_MS); - timeout --; - } -#if CONFIG_LWIP_LAYER - LwIP_UseStaticIP(&xnetif[1]); -#ifdef CONFIG_DONT_CARE_TP - pnetiff->flags |= NETIF_FLAG_IPSWITCH; -#endif - dhcps_init(pnetiff); -#endif - -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_wifi_info("ATWB", ret); -#endif - init_wifi_struct(); -} -#endif - -#ifdef CONFIG_PROMISC -void fATWM(void *arg){ - int argc; - char *argv[MAX_ARGC] = {0}; - argv[0] = "wifi_promisc"; - printf("[ATWM]: _AT_WLAN_PROMISC_\n"); - if(!arg){ - printf("[ATWM]Usage: ATWM=DURATION_SECONDS[with_len]\n"); -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATWM", RTW_BADARG, NULL, 0); -#endif - return; - } - if((argc = parse_param(arg, argv)) > 1){ - cmd_promisc(argc, argv); - } -} -#endif - -#if CONFIG_WEBSERVER -void fATWE(void *arg){ - printf("[ATWE]: _AT_WLAN_START_WEB_SERVER_\n"); - start_web_server(); -} -#endif - -void fATWW(void *arg){ -#if CONFIG_ENABLE_WPS - int argc = 0; - char *argv[4]; - printf("[ATWW]: _AT_WLAN_WPS_\n"); - if(!arg){ - printf("[ATWW]Usage: ATWW=pbc/pin\n"); -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATWW", RTW_BADARG, NULL, 0); -#endif - return; - } - argv[argc++] = "wifi_wps"; - argv[argc++] = arg; - cmd_wps(argc, argv); -#else - printf("Please set CONFIG_ENABLE_WPS 1 in platform_opts.h to enable ATWW command\n"); -#endif -} -void fATWw(void *arg){ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - int argc = 0; - char *argv[4]; - printf("[ATWw]: _AT_WLAN_AP_WPS_\n"); - if(!arg){ - printf("[ATWw]Usage: ATWw=pbc/pin\n"); - return; - } - argv[argc++] = "wifi_ap_wps"; - argv[argc++] = arg; - cmd_ap_wps(argc, argv); -#endif -} - -#if CONFIG_ENABLE_P2P -void fATWG(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWG]: _AT_WLAN_P2P_START_\n"); - argv[argc++] = "p2p_start"; - cmd_wifi_p2p_start(argc, argv); -} - -void fATWg(void *arg){ - int argc = 0; - char *argv[4]; - int ret =0; - printf("[ATWg]: _AT_WLAN_P2P_AUTO_GO_START_\n"); - argv[argc++] = "p2p_auto_go_start"; - ret = cmd_wifi_p2p_auto_go_start(argc, argv); - if(ret < 0) - printf("[ATWg]: Nothing to do. Please enter ATWG to initialize P2P.\n"); -} - -void fATWH(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWH]: _AT_WLAN_P2P_STOP_\n"); - argv[argc++] = "p2p_stop"; - cmd_wifi_p2p_stop(argc, argv); -} -void fATWJ(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWJ]: _AT_WLAN_P2P_CONNECT_\n"); - argv[0] = "p2p_connect"; - if(!arg){ - printf("ATWc=[DEST_MAC,pbc/pin]\n"); - return; - } - if((argc = parse_param(arg, argv)) > 1){ - cmd_p2p_connect(argc, argv); - } -} -void fATWK(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWK]: _AT_WLAN_P2P_DISCONNECT_\n"); - argv[argc++] = "p2p_disconnect"; - cmd_p2p_disconnect(argc, argv); -} -void fATWN(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWN]: _AT_WLAN_P2P_INFO_\n"); - argv[argc++] = "p2p_info"; - cmd_p2p_info(argc, argv); -} -void fATWF(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWF]: _AT_WLAN_P2P_FIND_\n"); - argv[argc++] = "p2p_find"; - cmd_p2p_find(argc, argv); -} -#endif -#if CONFIG_OTA_UPDATE -void fATWO(void *arg){ - int argc = 0; - char *argv[MAX_ARGC] = {0}; - printf("[ATWO]: _AT_WLAN_OTA_UPDATE_\n"); - if(!arg){ - printf("[ATWO]Usage: ATWO=IP[PORT] or ATWO= REPOSITORY[FILE_PATH]\n"); - return; - } - argv[0] = "update"; - if((argc = parse_param(arg, argv)) != 3){ - printf("[ATWO]Usage: ATWO=IP[PORT] or ATWO= REPOSITORY[FILE_PATH]\n"); - return; - } - cmd_update(argc, argv); -} -#endif - -#if CONFIG_AIRKISS -void fATWX(void *arg) -{ - int ret = RTW_SUCCESS; - - rtw_network_info_t wifi; - memset(&wifi, 0 , sizeof(rtw_network_info_t)); - - ret = airkiss_start(&wifi); -#if CONFIG_INIC_CMD_RSP - if(ret != RTW_SUCCESS) - inic_c2h_msg("ATWX", RTW_ERROR, NULL, 0); -#endif -} -#endif - -void fATWZ(void *arg){ - char buf[32] = {0}; - char *copy = buf; - int i = 0; - int len = 0; - int ret = RTW_SUCCESS; - - printf("[ATWZ]: _AT_WLAN_IWPRIV_\n"); - if(!arg){ - printf("[ATWZ]Usage: ATWZ=COMMAND[PARAMETERS]\n"); - ret = RTW_BADARG; - goto exit; - } - strcpy(copy, arg); - len = strlen(copy); - do{ - if((*(copy+i)=='[')) - *(copy+i)=' '; - if((*(copy+i)==']')||(*(copy+i)=='\0')){ - *(copy+i)='\0'; - break; - } - }while((i++) < len); - - i = 0; - do{ - if((*(copy+i)==',')) { - *(copy+i)=' '; - break; - } - }while((i++) < len); - -#if CONFIG_INIC_CMD_RSP - ret = wext_private_command_with_retval(WLAN0_NAME, copy, buf, 32); - printf("Private Message: %s\n", (char *) buf); - if(ret == RTW_SUCCESS) - inic_c2h_msg("ATWZ", ret, buf, strlen(buf)); -#else - wext_private_command(WLAN0_NAME, copy, 1); -#endif -exit: -#if CONFIG_INIC_CMD_RSP - if(ret != RTW_SUCCESS) - inic_c2h_msg("ATWZ", ret, NULL, 0); -#endif - return; // exit label cannot be last statement -} - -#ifdef CONFIG_POWER_SAVING -void fATXP(void *arg) -{ - int argc = 0; - char *argv[MAX_ARGC] = {0}; - int ret = 0; - int mode, dtim; - int tdma_slot_period, tdma_rfon_period_len_1, tdma_rfon_period_len_2, tdma_rfon_period_len_3; -#if CONFIG_INIC_CMD_RSP - char *res = NULL; - int res_len = 0; -#endif - - printf("[ATXP]: _AT_WLAN_POWER_MODE_\n"); - - if (!arg) { - printf("[ATXP] Usage: ATXP=lps/ips/dtim/tdma[mode]\n"); - ret = RTW_BADARG; - goto exit; - } else { - argc = parse_param(arg, argv); - if (argc < 3) { - printf("[ATXP] Usage: ATXP=lps/ips/dtim/tdma[mode]\n"); - ret = RTW_BADARG; - goto exit; - } - } - - if (strcmp(argv[1], "lps") == 0) { - mode = atoi(argv[2]); - if (mode >= 0 && mode < 0xFF) { - printf("lps mode:%d\n", mode); - wifi_set_power_mode(0xff, mode); - } - } - - if (strcmp(argv[1], "ips") == 0) { - mode = atoi(argv[2]); - if (mode >= 0 && mode < 0xFF) { - printf("ips mode:%d\n", mode); - wifi_set_power_mode(mode, 0xFF); - } - } - - if (strcmp(argv[1], "tdma") == 0) { - if (argc >= 6) { - tdma_slot_period = atoi(argv[2]); - tdma_rfon_period_len_1 = atoi(argv[3]); - tdma_rfon_period_len_2 = atoi(argv[4]); - tdma_rfon_period_len_3 = atoi(argv[5]); - printf("tdma param: %d %d %d %d\n", tdma_slot_period, tdma_rfon_period_len_1, tdma_rfon_period_len_2, tdma_rfon_period_len_3); - wifi_set_tdma_param(tdma_slot_period, tdma_rfon_period_len_1, tdma_rfon_period_len_2, tdma_rfon_period_len_3); - } - } - - if (strcmp(argv[1], "dtim") == 0) { - dtim = atoi(argv[2]); - printf("dtim: %d\n", dtim); - wifi_set_lps_dtim(dtim); - } - - if (strcmp(argv[1], "get") == 0) { -#if CONFIG_INIC_CMD_RSP - char buf[32]; - int index = 0; - memset(buf, 0, sizeof(buf)); - snprintf(buf, 32, "%s,%s,", argv[1], argv[2]); - index = strlen(buf); -#endif - if(strcmp(argv[2], "dtim") == 0){ - wifi_get_lps_dtim((unsigned char *)&dtim); - printf("get dtim: %d\n", (unsigned char)dtim); -#if CONFIG_INIC_CMD_RSP - sprintf(buf+index, "0x%02x", (unsigned char)dtim); - res = (char *)buf; - res_len = strlen(buf); -#endif - } - } - -exit: -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATXP", ret, res, res_len); - res = NULL; - res_len = 0; -#endif - return; -} -#endif - -void print_wlan_help(void *arg){ - printf("WLAN AT COMMAND SET:\n==============================\n"); - printf("1. Wlan Scan for Network Access Point\n"); - printf(" # ATWS\n"); - printf("2. Connect to an AES AP\n"); - printf(" # ATW0=SSID\n"); - printf(" # ATW1=PASSPHRASE\n"); - printf(" # ATWC\n"); - printf("3. Create an AES AP\n"); - printf(" # ATW3=SSID\n"); - printf(" # ATW4=PASSPHRASE\n"); - printf(" # ATW5=CHANNEL\n"); - printf(" # ATWA\n"); - printf("4. Ping\n"); - printf(" # ATWI=xxx.xxx.xxx.xxx\n"); -} - -#elif ATCMD_VER == ATVER_2 // UART module at command - -// wifi promisc -// Usage: ATWM=DURATION_SECONDS[with_len] -#ifdef CONFIG_PROMISC -void fATWM(void *arg){ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - argv[0] = "wifi_promisc"; - printf("[ATWM]: _AT_WLAN_PROMISC_\n"); - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "[ATWM]Usage: ATWM=DURATION_MSECONDS[with_len]\n"); -#if CONFIG_INIC_CMD_RSP - inic_c2h_msg("ATWM", RTW_BADARG, NULL, 0); -#endif - error_no = 1; - goto exit; - } - if((argc = parse_param(arg, argv)) > 1){ - cmd_promisc(argc, argv); - } -exit: - if(error_no==0) - at_printf("\r\n[ATWM] OK"); - else - at_printf("\r\n[ATWM] ERROR:%d",error_no); - return; -} -#endif - -//ATPA=,,,[,] -void fATPA(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - -#if CONFIG_LWIP_LAYER - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - struct netif * pnetif; -#endif - int timeout = 10000/200; - unsigned char hidden_ssid = 0; - rtw_mode_t wifi_mode_copy; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPA] Usage: ATPA=,,,[,]"); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if(argc < 5){ - //at_printf("\r\n[ATPA] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if( (wifi_mode!=RTW_MODE_AP) && (wifi_mode!=RTW_MODE_STA_AP) ){ - //at_printf("\r\n[ATPA] ERROR : wifi mode error"); - error_no = 5; - goto exit; - } - wifi_mode_copy = wifi_mode; - - //SSID - if(argv[1] != NULL){ - ap.ssid.len = strlen((char*)argv[1]); - if(ap.ssid.len > 32){ - //at_printf("\r\n[ATPA] ERROR : SSID length can't exceed 32"); - error_no = 2; - goto exit; - } - strcpy((char *)ap.ssid.val, (char*)argv[1]); - } - else{ - //at_printf("\r\n[ATPA] ERROR : SSID can't be empty"); - error_no = 2; - goto exit; - } - - //PASSWORD - if(argv[2] != NULL){ - if( (strlen(argv[2]) < 8) || (strlen(argv[2]) > 64)){ - //at_printf("\r\n[ATPA] ERROR : PASSWORD length error"); - error_no = 2; - goto exit; - } - strcpy((char *)password, (char*)argv[2]); - ap.password = password; - ap.password_len = strlen((char*)argv[2]); - ap.security_type = RTW_SECURITY_WPA2_AES_PSK; - } - else{ - ap.security_type = RTW_SECURITY_OPEN; - } - - //CHANNEL - if(argv[3] != NULL){ - ap.channel = (unsigned char) atoi((const char *)argv[3]); - if( (ap.channel < 0) || (ap.channel > 11) ){ - //at_printf("\r\n[ATPA] ERROR : channel number error"); - error_no = 2; - goto exit; - } - } - - //HIDDEN SSID - if(argv[4] != NULL){ - if( (atoi(argv[4]) != 0) && (atoi(argv[4]) != 1)){ - //at_printf("\r\n[ATPA] ERROR : HIDDEN SSID must be 0 or 1"); - error_no = 2; - goto exit; - } - hidden_ssid = (unsigned char) atoi((const char *)argv[4]); - } - - //MAX NUMBER OF STATION - if(argv[5] != NULL){ - unsigned char max_sta = atoi(argv[5]); - if(wext_set_sta_num(max_sta) != 0){ - error_no = 2; - goto exit; - } - } - -#if CONFIG_WEBSERVER - //store into flash - memset(wifi_setting.ssid, 0, sizeof(wifi_setting.ssid)); - memcpy(wifi_setting.ssid, ap.ssid.val, strlen((char*)ap.ssid.val)); - wifi_setting.ssid[ap.ssid.len] = '\0'; - wifi_setting.security_type = ap.security_type; - if(ap.security_type !=0) - wifi_setting.security_type = 1; - else - wifi_setting.security_type = 0; - if (ap.password) - memcpy(wifi_setting.password, ap.password, strlen((char*)ap.password)); - else - memset(wifi_setting.password, 0, sizeof(wifi_setting.password)); - wifi_setting.channel = ap.channel; -#if CONFIG_READ_FLASH - StoreApInfo(); -#endif -#endif - -#if CONFIG_LWIP_LAYER - dhcps_deinit(); -#endif - wifi_off(); - vTaskDelay(20); - - if (wifi_on(wifi_mode_copy) < 0){ - //at_printf("\r\n[ATPA] ERROR : Wifi on failed"); - error_no = 3; - goto exit; - } - - if(wifi_start_ap((char*)ap.ssid.val, ap.security_type, (char*)ap.password, ap.channel, hidden_ssid) < 0) { - //at_printf("\r\n[ATPA] ERROR : Start AP failed"); - error_no = 4; - goto exit; - } - - while(1) { - char essid[33]; - if(wifi_mode_copy == RTW_MODE_AP ){ - if(wext_get_ssid( WLAN0_NAME , (unsigned char *) essid) > 0) { - if(strcmp((const char *) essid, (const char *)ap.ssid.val) == 0) { - break; - } - } - } - else if(wifi_mode_copy == RTW_MODE_STA_AP ){ - if(wext_get_ssid( WLAN1_NAME , (unsigned char *) essid) > 0) { - if(strcmp((const char *) essid, (const char *)ap.ssid.val) == 0) { - break; - } - } - } - - if(timeout == 0) { - //at_printf("\r\n[ATPA] ERROR : Start AP timeout"); - error_no = 4; - break; - } - vTaskDelay(200/portTICK_RATE_MS); -// vTaskDelay(1 * configTICK_RATE_HZ); - timeout --; - } -#if CONFIG_LWIP_LAYER - if(wifi_mode == RTW_MODE_STA_AP) - pnetif = &xnetif[1]; - else - pnetif = &xnetif[0]; - - LwIP_UseStaticIP(pnetif); - - if(dhcp_mode_ap == 1) - dhcps_init(pnetif); -#endif -exit: - init_wifi_struct(); - - if(error_no == 0) { -#if CONFIG_WLAN_CONNECT_CB - extern void connect_start(void); - connect_start(); -#endif - at_printf("\r\n[ATPA] OK"); - } else - at_printf("\r\n[ATPA] ERROR:%d",error_no); - - return; -} - -/*find ap with "ssid" from scan list*/ -static int _find_ap_from_scan_buf(char*buf, int buflen, char *target_ssid, void *user_data) -{ - rtw_wifi_setting_t *pwifi = (rtw_wifi_setting_t *)user_data; - int plen = 0; - - while(plen < buflen){ - u8 len, ssid_len, security_mode; - char *ssid; - - // len offset = 0 - len = (int)*(buf + plen); - // check end - if(len == 0) break; - // ssid offset = 14 - ssid_len = len - 14; - ssid = buf + plen + 14 ; - if((ssid_len == strlen(target_ssid)) - && (!memcmp(ssid, target_ssid, ssid_len))) - { - strcpy((char*)pwifi->ssid, target_ssid); - // channel offset = 13 - pwifi->channel = *(buf + plen + 13); - // security_mode offset = 11 - security_mode = (u8)*(buf + plen + 11); - if(security_mode == IW_ENCODE_ALG_NONE) - pwifi->security_type = RTW_SECURITY_OPEN; - else if(security_mode == IW_ENCODE_ALG_WEP) - pwifi->security_type = RTW_SECURITY_WEP_PSK; - else if(security_mode == IW_ENCODE_ALG_CCMP) - pwifi->security_type = RTW_SECURITY_WPA2_AES_PSK; - break; - } - plen += len; - } - return 0; -} - -/*get ap security mode from scan list*/ -static int _get_ap_security_mode(IN char * ssid, OUT rtw_security_t *security_mode, OUT u8 * channel) -{ - rtw_wifi_setting_t wifi; - u32 scan_buflen = 1000; - - memset(&wifi, 0, sizeof(wifi)); - - if(wifi_scan_networks_with_ssid(_find_ap_from_scan_buf, (void*)&wifi, scan_buflen, ssid, strlen(ssid)) != RTW_SUCCESS){ - printf("Wifi scan failed!\n"); - return 0; - } - - if(strcmp(wifi.ssid, ssid) == 0){ - *security_mode = wifi.security_type; - *channel = wifi.channel; - return 1; - } - - return 0; -} - -extern u8 key_2char2num(u8 hch, u8 lch); - -//ATPN=,,(,) -void fATPN(void *arg) -{ - int argc, error_no = 0; - int i,j; - char *argv[MAX_ARGC] = {0}; - - int mode, ret; - unsigned long tick1 = xTaskGetTickCount(); - unsigned long tick2, tick3; - char empty_bssid[6] = {0}, assoc_by_bssid = 0; - u8 connect_channel; - u8 pscan_config; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPN] Usage : ATPN=,,(,)"); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if( (argc < 2) || (argc > 5) ){ - //at_printf("\r\n[ATPN] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if( (wifi_mode!=RTW_MODE_STA) && (wifi_mode!=RTW_MODE_STA_AP) ){ - //at_printf("\r\n[ATPN] ERROR : wifi mode error"); - error_no = 5; - goto exit; - } - - //SSID - if(argv[1] != NULL){ - strcpy((char *)wifi.ssid.val, (char*)argv[1]); - wifi.ssid.len = strlen((char*)argv[1]); - }else{ - //at_printf("\r\n[ATPN] ERROR : SSID can't be Empty"); - error_no = 2; - goto exit; - } - wifi.security_type = RTW_SECURITY_OPEN; - - //PASSWORD - if(argv[2] != NULL){ - int pwd_len = strlen(argv[2]); - if(pwd_len > 64 || (pwd_len < 8 && pwd_len != 5)){ - //at_printf("\r\n[ATPN] ERROR : PASSWORD format error"); - error_no = 2; - goto exit; - } - strcpy((char *)password, (char*)argv[2]); - wifi.password = password; - wifi.password_len = strlen((char*)argv[2]); - wifi.security_type = RTW_SECURITY_WPA2_AES_PSK; - } - - //KEYID - if(argv[3] != NULL){ - if((strlen((const char *)argv[3]) != 1 ) || (*(char*)argv[3] <'0' ||*(char*)argv[3] >'3')) { - //at_printf("\r\n[ATPN] ERROR : Wrong WEP key id. Must be one of 0,1,2, or 3"); - error_no = 2; - goto exit; - } - wifi.key_id = atoi((const char *)(argv[3])); - wifi.security_type = RTW_SECURITY_WEP_PSK; - } - - //BSSID - if(argv[4] != NULL){ - if(strlen(argv[4]) != 12){ - //at_printf("\r\n[ATPN] ERROR : BSSID format error"); - error_no = 2; - goto exit; - } - for (i=0, j=0; i= 3){ - printf("Can't get AP security mode and channel.\n"); - error_no = 6; - goto exit; - } - } - if(wifi.security_type == RTW_SECURITY_WEP_PSK || wifi.security_type == RTW_SECURITY_WEP_SHARED) - wifi.key_id = (wifi.key_id <0 || wifi.key_id >3)?0:wifi.key_id; - } - pscan_config = PSCAN_ENABLE; - if(connect_channel > 0 && connect_channel < 14) - wifi_set_pscan_chan(&connect_channel, &pscan_config, 1); -#endif - - ret = wifi_connect( - wifi.bssid.octet, - assoc_by_bssid, - (char*)wifi.ssid.val, - wifi.security_type, - (char*)wifi.password, - wifi.key_id, - NULL); - - if(ret!= RTW_SUCCESS){ - //at_printf("\r\n[ATPN] ERROR: Can't connect to AP"); - error_no = 4; - goto exit; - } - -#if CONFIG_LWIP_LAYER - if (dhcp_mode_sta == 2){ - struct netif * pnetif = &xnetif[0]; - LwIP_UseStaticIP(pnetif); - dhcps_init(pnetif); - } - else{ - ret = LwIP_DHCP(0, DHCP_START); - if(ret != DHCP_ADDRESS_ASSIGNED) - error_no = 7; - } -#endif -exit: - init_wifi_struct(); - if(error_no == 0) { -#if CONFIG_WLAN_CONNECT_CB - extern void connect_start(void); - connect_start(); -#endif - at_printf("\r\n[ATPN] OK"); - } else - at_printf("\r\n[ATPN] ERROR:%d",error_no); - - return; -} - -//ATPH=, -void fATPH(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - int mode,enable; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPH] Usage : ATPH=,"); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if(argc != 3){ - //at_printf("\r\n[ATPH] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if(argv[1] != NULL){ - mode = atoi((const char *)(argv[1])); - if(mode != 1 && mode != 2){ - //at_printf("\r\n[ATPH] ERROR : parameter must be 1 or 2"); - error_no = 2; - goto exit; - } - } - - if(argv[2] != NULL){ - enable = atoi((const char *)(argv[2])); - if(enable != 1 && enable != 2){ - //at_printf("\r\n[ATPH] ERROR : parameter must be 1 or 2"); - error_no = 2; - goto exit; - } - if(mode == 1) - dhcp_mode_ap = enable; - else if(mode == 2) - dhcp_mode_sta = enable; - } - -exit: - if(error_no==0) - at_printf("\r\n[ATPH] OK"); - else - at_printf("\r\n[ATPH] ERROR:%d",error_no); - - return; - -} - -//ATPE=(,,) -void fATPE(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - unsigned int ip_addr = 0; - //unsigned char sta_ip[4] = {192,168,3,80}, sta_netmask[4] = {255,255,255,0}, sta_gw[4] = {192,168,3,1}; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPE] Usage : ATPE=(,,)"); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if( (argc > 4) || (argc < 2) ){ - //at_printf("\r\n[ATPE] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if(argv[1] != NULL){ - ip_addr = inet_addr(argv[1]); - sta_ip[0] = (unsigned char) ip_addr & 0xff; - sta_ip[1] = (unsigned char) (ip_addr >> 8) & 0xff; - sta_ip[2] = (unsigned char) (ip_addr >> 16) & 0xff; - sta_ip[3] = (unsigned char) (ip_addr >> 24) & 0xff; - } - else{ - //at_printf("\r\n[ATPE] ERROR : parameter format error"); - error_no = 2; - goto exit; - } - - if(argv[2] != NULL){ - ip_addr = inet_addr(argv[2]); - sta_gw[0] = (unsigned char) ip_addr & 0xff; - sta_gw[1] = (unsigned char) (ip_addr >> 8) & 0xff; - sta_gw[2] = (unsigned char) (ip_addr >> 16) & 0xff; - sta_gw[3] = (unsigned char) (ip_addr >> 24) & 0xff; - } - else{ - sta_gw[0] = sta_ip[0]; - sta_gw[1] = sta_ip[1]; - sta_gw[2] = sta_ip[2]; - sta_gw[3] = 1; - } - - if(argv[3] != NULL){ - ip_addr = inet_addr(argv[3]); - sta_netmask[0] = (unsigned char) ip_addr & 0xff; - sta_netmask[1] = (unsigned char) (ip_addr >> 8) & 0xff; - sta_netmask[2] = (unsigned char) (ip_addr >> 16) & 0xff; - sta_netmask[3] = (unsigned char) (ip_addr >> 24) & 0xff; - } - else{ - sta_netmask[0] = 255; - sta_netmask[1] = 255; - sta_netmask[2] = 255; - sta_netmask[3] = 0; - } - -exit: - if(error_no==0) - at_printf("\r\n[ATPE] OK"); - else - at_printf("\r\n[ATPE] ERROR:%d",error_no); - - return; - -} - -//ATPF=,, -void fATPF(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - unsigned int ip_addr = 0; - struct ip_addr start_ip, end_ip; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPF] Usage : ATPF=,,(,,)"); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if( (argc != 4) ){ - //at_printf("\r\n[ATPF] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if(argv[1] != NULL){ - start_ip.addr = inet_addr(argv[1]); - } - else{ - //at_printf("\r\n[ATPF] ERROR : parameter format error"); - error_no = 2; - goto exit; - } - - if(argv[2] != NULL){ - end_ip.addr = inet_addr(argv[2]); - } - else{ - //at_printf("\r\n[ATPF] ERROR : parameter format error"); - error_no = 2; - goto exit; - } - - dhcps_set_addr_pool(&start_ip,&end_ip); - - if(argv[3] != NULL){ - ip_addr = inet_addr(argv[3]); - ap_ip[0] = (unsigned char) ip_addr & 0xff; - ap_ip[1] = (unsigned char) (ip_addr >> 8) & 0xff; - ap_ip[2] = (unsigned char) (ip_addr >> 16) & 0xff; - ap_ip[3] = (unsigned char) (ip_addr >> 24) & 0xff; - } - else{ - //at_printf("\r\n[ATPF] ERROR : parameter format error"); - error_no = 2; - goto exit; - } - - ap_gw[0] = ap_ip[0]; - ap_gw[1] = ap_ip[1]; - ap_gw[2] = ap_ip[2]; - ap_gw[3] = ap_ip[3]; - - ap_netmask[0] = 255; - ap_netmask[1] = 255; - ap_netmask[2] = 255; - ap_netmask[3] = 0; - -exit: - if(error_no==0) - at_printf("\r\n[ATPF] OK"); - else - at_printf("\r\n[ATPF] ERROR:%d", error_no); - - return; -} - -int atcmd_wifi_read_info_from_flash(u8 *read_data, u32 read_len) -{ - atcmd_update_partition_info(AT_PARTITION_WIFI, AT_PARTITION_READ, read_data, read_len); - return 0; -} - -void atcmd_wifi_write_info_to_flash(rtw_wifi_setting_t *setting, int enable) -{ - struct atcmd_wifi_conf *data_to_flash; - rtw_wifi_setting_t *old_setting; - -// flash_t flash; - u32 channel = 0, i, write_needed = 0; - u8 index = 0; - u32 data; - - data_to_flash = (struct atcmd_wifi_conf *)malloc(sizeof(struct atcmd_wifi_conf)); - - if(data_to_flash) { - if(enable){ - memset((u8 *)data_to_flash, 0, sizeof(struct atcmd_wifi_conf)); - atcmd_update_partition_info(AT_PARTITION_WIFI, AT_PARTITION_READ, (u8 *)data_to_flash, sizeof(struct atcmd_wifi_conf)); - old_setting = &(data_to_flash->setting); - if(memcmp((u8 *)old_setting, setting, sizeof(rtw_wifi_setting_t))){ - memcpy(old_setting, setting, sizeof(rtw_wifi_setting_t)); - write_needed = 1; - } - if(setting->mode == RTW_MODE_STA || setting->mode == RTW_MODE_STA_AP){ - struct wlan_fast_reconnect reconn; - int found = 0; - /*clean wifi ssid,key and bssid*/ - memset((u8 *)&reconn, 0, sizeof(struct wlan_fast_reconnect)); - - channel = setting->channel; - - memset(psk_essid[index], 0, sizeof(psk_essid[index])); - strncpy(psk_essid[index], setting->ssid, strlen(setting->ssid)); - switch(setting->security_type){ - case RTW_SECURITY_OPEN: - memset(psk_passphrase[index], 0, sizeof(psk_passphrase[index])); - memset(wpa_global_PSK[index], 0, sizeof(wpa_global_PSK[index])); - reconn.security_type = RTW_SECURITY_OPEN; - break; - case RTW_SECURITY_WEP_PSK: - channel |= (setting->key_idx) << 28; - memset(psk_passphrase[index], 0, sizeof(psk_passphrase[index])); - memset(wpa_global_PSK[index], 0, sizeof(wpa_global_PSK[index])); - memcpy(psk_passphrase[index], setting->password, sizeof(psk_passphrase[index])); - reconn.security_type = RTW_SECURITY_WEP_PSK; - break; - case RTW_SECURITY_WPA_TKIP_PSK: - reconn.security_type = RTW_SECURITY_WPA_TKIP_PSK; - break; - case RTW_SECURITY_WPA2_AES_PSK: - reconn.security_type = RTW_SECURITY_WPA2_AES_PSK; - break; - default: - break; - } - - memcpy(reconn.psk_essid, psk_essid[index], sizeof(reconn.psk_essid)); - if (strlen(psk_passphrase64) == 64) { - memcpy(reconn.psk_passphrase, psk_passphrase64, sizeof(reconn.psk_passphrase)); - } else { - memcpy(reconn.psk_passphrase, psk_passphrase[index], sizeof(reconn.psk_passphrase)); - } - memcpy(reconn.wpa_global_PSK, wpa_global_PSK[index], sizeof(reconn.wpa_global_PSK)); - memcpy(&(reconn.channel), &channel, 4); - - if(data_to_flash->reconn_num < 0 || data_to_flash->reconn_num > ATCMD_WIFI_CONN_STORE_MAX_NUM || - data_to_flash->reconn_last_index < 0 || data_to_flash->reconn_last_index > ATCMD_WIFI_CONN_STORE_MAX_NUM - ){ - data_to_flash->reconn_num = 0; - data_to_flash->reconn_last_index = -1; - } - - reconn.enable = enable; - for(i = 0; i < data_to_flash->reconn_num; i++){ - if(memcmp((u8 *)&reconn, (u8 *)&(data_to_flash->reconn[i]), sizeof(struct wlan_fast_reconnect)) == 0) { - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ALWAYS, - "the same profile found in flash"); - found = 1; - break; - } - } - if(!found){ - data_to_flash->reconn_last_index++; - if(data_to_flash->reconn_last_index >= ATCMD_WIFI_CONN_STORE_MAX_NUM) - data_to_flash->reconn_last_index -= ATCMD_WIFI_CONN_STORE_MAX_NUM; - memcpy((u8 *)&data_to_flash->reconn[data_to_flash->reconn_last_index], (u8 *)&reconn, sizeof(struct wlan_fast_reconnect)); - data_to_flash->reconn_num++; - if(data_to_flash->reconn_num > ATCMD_WIFI_CONN_STORE_MAX_NUM) - data_to_flash->reconn_num = ATCMD_WIFI_CONN_STORE_MAX_NUM; - write_needed = 1; - } - } - if(write_needed || data_to_flash->auto_enable != enable){ - data_to_flash->auto_enable = enable; - atcmd_update_partition_info(AT_PARTITION_WIFI, AT_PARTITION_WRITE, (u8 *)data_to_flash, sizeof(struct atcmd_wifi_conf)); - } - }else{ - atcmd_update_partition_info(AT_PARTITION_WIFI, AT_PARTITION_ERASE, (u8 *)data_to_flash, sizeof(struct atcmd_wifi_conf)); - } - } - if(data_to_flash) { - free(data_to_flash); - } -} - -int atcmd_wifi_restore_from_flash(void) -{ -// flash_t flash; - struct atcmd_wifi_conf *data; - rtw_wifi_setting_t *setting; - struct wlan_fast_reconnect *reconn; - uint32_t channel; - uint32_t security_type; - uint8_t pscan_config; - char key_id[2] = {0}; - int ret = -1, i; - int mode; - rtw_network_info_t wifi = { - {0}, // ssid - {0}, // bssid - 0, // security - NULL, // password - 0, // password len - -1 // key id - }; - data = (struct atcmd_wifi_conf *)rtw_zmalloc(sizeof(struct atcmd_wifi_conf)); - if(data){ - atcmd_update_partition_info(AT_PARTITION_WIFI, AT_PARTITION_READ, (u8 *)data, sizeof(struct atcmd_wifi_conf)); - if(data->auto_enable != 1) - goto exit; - setting = &data->setting; - if(setting->mode == RTW_MODE_AP || setting->mode == RTW_MODE_STA_AP){ - //start AP here - goto exit; - } - - //Check if in AP mode - wext_get_mode(WLAN0_NAME, &mode); - if(mode == IW_MODE_MASTER) { -#if CONFIG_LWIP_LAYER - dhcps_deinit(); -#endif - wifi_off(); - vTaskDelay(20); - if (wifi_on(RTW_MODE_STA) < 0){ - printf("ERROR: Wifi on failed!\n"); - ret = -1; - goto exit; - } - } - -#if CONFIG_AUTO_RECONNECT - //setup reconnection flag - wifi_set_autoreconnect(0); -#endif - int last_index = data->reconn_last_index; - for(i = 0; i < data->reconn_num; i++){ - reconn = &data->reconn[last_index]; - last_index ++; - if(last_index >= ATCMD_WIFI_CONN_STORE_MAX_NUM) - last_index -= ATCMD_WIFI_CONN_STORE_MAX_NUM; - if(reconn->enable != 1){ - continue; - } - memcpy(psk_essid, reconn->psk_essid, sizeof(reconn->psk_essid)); - memcpy(psk_passphrase, reconn->psk_passphrase, sizeof(reconn->psk_passphrase)); - memcpy(wpa_global_PSK, reconn->wpa_global_PSK, sizeof(reconn->wpa_global_PSK)); - channel = reconn->channel; - sprintf(key_id,"%d",(char) (channel>>28)); - channel &= 0xff; - security_type = reconn->security_type; - pscan_config = PSCAN_ENABLE | PSCAN_FAST_SURVEY; - //set partial scan for entering to listen beacon quickly - wifi_set_pscan_chan((uint8_t *)&channel, &pscan_config, 1); - - wifi.security_type = security_type; - //SSID - strcpy((char *)wifi.ssid.val, (char*)psk_essid); - wifi.ssid.len = strlen((char*)psk_essid); - - switch(security_type){ - case RTW_SECURITY_WEP_PSK: - wifi.password = (unsigned char*) psk_passphrase; - wifi.password_len = strlen((char*)psk_passphrase); - wifi.key_id = atoi((const char *)key_id); - break; - case RTW_SECURITY_WPA_TKIP_PSK: - case RTW_SECURITY_WPA2_AES_PSK: - wifi.password = (unsigned char*) psk_passphrase; - wifi.password_len = strlen((char*)psk_passphrase); - break; - default: - break; - } - - ret = wifi_connect( - NULL, - 0, - (char*)wifi.ssid.val, - wifi.security_type, - (char*)wifi.password, - wifi.key_id, - NULL); - if(ret == RTW_SUCCESS){ - LwIP_DHCP(0, DHCP_START); - ret = 0; -#if CONFIG_WLAN_CONNECT_CB - extern void connect_start(void); - connect_start(); -#endif - break; - } - } - } - -exit: - if(data) - rtw_mfree((u8 *)data, sizeof(struct wlan_fast_reconnect)); - return ret; -} - -//ATPG= -void fATPG(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; -// flash_t flash; -// struct wlan_fast_reconnect read_data = {0}; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "[ATPG] Usage : ATPG=\r\n"); - error_no = 1; - goto exit; - } - argc = parse_param(arg, argv); - if(argc != 2){ - //at_printf("\r\n[ATPG] ERROR : command format error"); - error_no = 1; - goto exit; - } - - //ENABLE FAST CONNECT - if(argv[1] != NULL){ -#if 0 - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, FAST_RECONNECT_DATA, sizeof(struct wlan_fast_reconnect), (u8 *) &read_data); - read_data.enable = atoi((const char *)(argv[1])); - if(read_data.enable != 0 && read_data.enable != 1){ - //at_printf("\r\n[ATPG] ERROR : parameter must be 0 or 1"); - error_no = 2; - device_mutex_unlock(RT_DEV_LOCK_FLASH); - goto exit; - } - flash_erase_sector(&flash, FAST_RECONNECT_DATA); - flash_stream_write(&flash, FAST_RECONNECT_DATA, sizeof(struct wlan_fast_reconnect), (u8 *) &read_data); - device_mutex_unlock(RT_DEV_LOCK_FLASH); -#else - rtw_wifi_setting_t setting; - int enable = atoi((const char *)(argv[1])); - if(enable != 0 && enable != 1){ - error_no = 2; - goto exit; - } - if(enable == 1){ - u8 *ifname[1] = {WLAN0_NAME}; - if(wifi_get_setting((const char*)ifname[0],&setting)){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "wifi_get_setting fail"); - error_no = 3; - goto exit; - } - } - atcmd_wifi_write_info_to_flash(&setting, enable); -#endif - } - -exit: - if(error_no==0) - at_printf("\r\n[ATPG] OK"); - else - at_printf("\r\n[ATPG] ERROR:%d",error_no); - - return; -} - -// set MAC address -//ATPM= -void fATPM(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPM] Usage : ATPM="); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if(argc != 2){ - //at_printf("\r\n[ATPM] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if(argv[1] != NULL){ - if(strlen(argv[1]) != 12){ - //at_printf("\r\n[ATPM] ERROR : BSSID format error"); - error_no = 2; - goto exit; - } - wifi_set_mac_address(argv[1]); - } - -exit: - if(error_no==0) - at_printf("\r\n[ATPM] OK"); - else - at_printf("\r\n[ATPM] ERROR:%d",error_no); - - return; - -} - -// set Wifi mode -// ATPW= -void fATPW(void *arg) -{ - int argc, error_no = 0; - char *argv[MAX_ARGC] = {0}; - - if(!arg){ - AT_DBG_MSG(AT_FLAG_WIFI, AT_DBG_ERROR, - "\r\n[ATPW] Usage : ATPW="); - error_no = 1; - goto exit; - } - - argc = parse_param(arg, argv); - if(argc != 2){ - //at_printf("\r\n[ATPW] ERROR : command format error"); - error_no = 1; - goto exit; - } - - if(argv[1] != NULL){ - wifi_mode = atoi((const char *)(argv[1])); - if((wifi_mode!=RTW_MODE_STA) && (wifi_mode!=RTW_MODE_AP) && (wifi_mode!=RTW_MODE_STA_AP) ){ - //at_printf("\r\n[ATPW] ERROR : parameter must be 1 , 2 or 3"); - error_no = 2; - } - } - -exit: - if(error_no==0) - at_printf("\r\n[ATPW] OK"); - else - at_printf("\r\n[ATPW] ERROR:%d",error_no); - - return; -} - -//------------------------------------------------------------ -#if CONFIG_ENABLE_P2P -void fATWG(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWG]: _AT_WLAN_P2P_START_\n"); - argv[argc++] = "p2p_start"; - cmd_wifi_p2p_start(argc, argv); -} - -void fATWg(void *arg){ - int argc = 0; - char *argv[4]; - int ret =0; - printf("[ATWg]: _AT_WLAN_P2P_AUTO_GO_START_\n"); - argv[argc++] = "p2p_auto_go_start"; - ret = cmd_wifi_p2p_auto_go_start(argc, argv); - if(ret < 0) - printf("[ATWg]: Nothing to do. Please enter ATWG to initialize P2P.\n"); -} - -void fATWH(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWH]: _AT_WLAN_P2P_STOP_\n"); - argv[argc++] = "p2p_stop"; - cmd_wifi_p2p_stop(argc, argv); -} -void fATWJ(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWJ]: _AT_WLAN_P2P_CONNECT_\n"); - argv[0] = "p2p_connect"; - if(!arg){ - printf("ATWc=[DEST_MAC,pbc/pin]\n"); - return; - } - if((argc = parse_param(arg, argv)) > 1){ - cmd_p2p_connect(argc, argv); - } -} -void fATWK(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWK]: _AT_WLAN_P2P_DISCONNECT_\n"); - argv[argc++] = "p2p_disconnect"; - cmd_p2p_disconnect(argc, argv); -} -void fATWN(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWN]: _AT_WLAN_P2P_INFO_\n"); - argv[argc++] = "p2p_info"; - cmd_p2p_info(argc, argv); -} -void fATWF(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWF]: _AT_WLAN_P2P_FIND_\n"); - argv[argc++] = "p2p_find"; - cmd_p2p_find(argc, argv); -} -void fATWL(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWL]: _AT_WLAN_P2P_LISTEN_\n"); - argv[argc++] = "p2p_listen"; - cmd_p2p_listen(argc, argv); -} -void fATWP(void *arg){ - int argc = 0; - char *argv[4]; - printf("[ATWP]: _AT_WLAN_P2P_PEERS_\n"); - argv[argc++] = "p2p_peers"; - cmd_p2p_peers(argc, argv); -} - -#endif // CONFIG_ENABLE_P2P -//----------------------------------------------------- - -void print_wlan_help(void *arg){ - at_printf("\r\nWLAN AT COMMAND SET:"); - at_printf("\r\n=============================="); - at_printf("\r\n1. Wlan Scan for Network Access Point"); - at_printf("\r\n # ATWS"); - at_printf("\r\n2. Connect to an AES AP"); - at_printf("\r\n # ATPN=,,(,)"); - at_printf("\r\n3. Create an AES AP"); - at_printf("\r\n # ATPA=,,,"); - at_printf("\r\n4. Set auto connect"); - at_printf("\r\n # ATPG=<0/1>"); -} - -#endif // end of #if ATCMD_VER == ATVER_1 -void fATWT(void *arg) -{ -#if CONFIG_BSD_TCP - int argc; - char *argv[MAX_ARGC] = {0}; - - printf("[ATWT]: _AT_WLAN_TCP_TEST_\n"); - - if(!arg){ - printf("[ATWT] Usage: ATWT=[-s|-c,host|stop],[options]\n"); - printf(" Client/Server:\n"); - printf(" stop terminate client & server\n"); - printf(" -l # length of buffer to read or write (default 1460 Bytes)\n"); - printf(" -p # server port to listen on/connect to (default 5001)\n"); - printf(" Server specific:\n"); - printf(" -s run in server mode\n"); - printf(" Client specific:\n"); - printf(" -c run in client mode, connecting to \n"); - printf(" -d do a bidirectional test simultaneously\n"); - printf(" -t # time in seconds to transmit for (default 10 secs)\n"); - printf(" -n #[KM] number of bytes to transmit (instead of -t)\n"); - printf(" Example:\n"); - printf(" ATWT=-s,-p,5002\n"); - printf(" ATWT=-c,192.168.1.2,-t,100,-p,5002\n"); - return; - } - - argv[0] = "tcp"; - - if((argc = parse_param(arg, argv)) > 1){ - cmd_tcp(argc, argv); - } -#else - printf("Please set CONFIG_BSD_TCP 1 in platform_opts.h to enable ATWT command\n"); -#endif -} - -void fATWU(void *arg) -{ -#if CONFIG_BSD_TCP - int argc; - char *argv[MAX_ARGC] = {0}; - - printf("[ATWU]: _AT_WLAN_UDP_TEST_\n"); - - if(!arg){ - printf("[ATWU] Usage: ATWU=[-s|-c,host|stop][options]\n"); - printf(" Client/Server:\n"); - printf(" stop terminate client & server\n"); - printf(" -l # length of buffer to read or write (default 1460 Bytes)\n"); - printf(" -p # server port to listen on/connect to (default 5001)\n"); - printf(" Server specific:\n"); - printf(" -s run in server mode\n"); - printf(" Client specific:\n"); - printf(" -b #[KM] for UDP, bandwidth to send at in bits/sec (default 1 Mbit/sec)\n"); - printf(" -c run in client mode, connecting to \n"); - printf(" -d do a bidirectional test simultaneously\n"); - printf(" -t # time in seconds to transmit for (default 10 secs)\n"); - printf(" -n #[KM] number of bytes to transmit (instead of -t)\n"); - printf(" -S # set the IP 'type of service'\n"); - printf(" Example:\n"); - printf(" ATWU=-s,-p,5002\n"); - printf(" ATWU=-c,192.168.1.2,-t,100,-p,5002\n"); - return; - } - - argv[0] = "udp"; - - if((argc = parse_param(arg, argv)) > 1){ - cmd_udp(argc, argv); - } -#else - printf("Please set CONFIG_BSD_TCP 1 in platform_opts.h to enable ATWU command\n"); -#endif -} - -#endif // end of #if CONFIG_WLAN - -#if CONFIG_LWIP_LAYER -#if ATCMD_VER == ATVER_1 -void fATWL(void *arg){ -#if CONFIG_SSL_CLIENT - int argc; - char *argv[MAX_ARGC] = {0}; - printf("[ATWL]: _AT_WLAN_SSL_CLIENT_\n"); - argv[0] = "ssl_client"; - if(!arg){ - printf("ATWL=SSL_SERVER_HOST\n"); - return; - } - if((argc = parse_param(arg, argv)) > 1){ - if(argc != 2) { - printf("ATWL=SSL_SERVER_HOST\n"); - return; - } - - cmd_ssl_client(argc, argv); - } -#else - printf("Please set CONFIG_SSL_CLIENT 1 in platform_opts.h to enable ATWL command\n"); -#endif -} - -void fATWI(void *arg){ - int argc; - char *argv[MAX_ARGC] = {0}; - - printf("[ATWI]: _AT_WLAN_PING_TEST_\n"); - - if(!arg){ - printf("[ATWI] Usage: ATWI=[host],[options]\n"); - printf(" -t Ping the specified host until stopped\n"); - printf(" -n # Number of echo requests to send (default 4 times)\n"); - printf(" -l # Send buffer size (default 32 bytes)\n"); - printf(" Example:\n"); - printf(" ATWI=192.168.1.2,-n,100,-l,5000\n"); - return; - } - - argv[0] = "ping"; - - if((argc = parse_param(arg, argv)) > 1){ - cmd_ping(argc, argv); - } -} - -#elif ATCMD_VER == ATVER_2 // uart at command -//move to atcmd_lwip.c -#endif -#endif -log_item_t at_wifi_items[ ] = { -#if ATCMD_VER == ATVER_1 -#if CONFIG_LWIP_LAYER - {"ATWL", fATWL,}, - {"ATWI", fATWI,}, - {"ATWT", fATWT,}, - {"ATWU", fATWU,}, -#endif -#if CONFIG_WLAN - {"ATW0", fATW0,}, - {"ATW1", fATW1,}, - {"ATW2", fATW2,}, - {"ATW3", fATW3,}, - {"ATW4", fATW4,}, - {"ATW5", fATW5,}, - {"ATW6", fATW6,}, - {"ATWA", fATWA,}, -#ifdef CONFIG_CONCURRENT_MODE - {"ATWB", fATWB,}, -#endif - {"ATWC", fATWC,}, - {"ATWD", fATWD,}, - {"ATWP", fATWP,}, -#if CONFIG_WOWLAN_SERVICE - {"ATWV", fATWV,}, -#endif - {"ATWR", fATWR,}, - {"ATWS", fATWS,}, -#if SCAN_WITH_SSID - {"ATWs", fATWs,}, -#endif -#ifdef CONFIG_PROMISC - {"ATWM", fATWM,}, -#endif - {"ATWZ", fATWZ,}, -#if CONFIG_OTA_UPDATE - {"ATWO", fATWO,}, -#endif -#if CONFIG_WEBSERVER - {"ATWE", fATWE,}, -#endif -#if (CONFIG_INCLUDE_SIMPLE_CONFIG) - {"ATWQ", fATWQ,}, -#endif -#ifdef CONFIG_WPS - {"ATWW", fATWW,}, - {"ATWw", fATWw,}, //wps registrar for softap -#if CONFIG_ENABLE_P2P - {"ATWG", fATWG,}, //p2p start - {"ATWH", fATWH,}, //p2p stop - {"ATWJ", fATWJ,}, //p2p connect - {"ATWK", fATWK,}, //p2p disconnect - {"ATWN", fATWN,}, //p2p info - {"ATWF", fATWF,}, //p2p find - {"ATWg", fATWg,}, //p2p auto go start -#endif -#endif - -#if CONFIG_AIRKISS - {"ATWX", fATWX,}, -#endif - {"ATW?", fATWx,}, - {"ATW+ABC", fATWx,}, -#ifdef CONFIG_POWER_SAVING - {"ATXP", fATXP,}, -#endif -#endif -#elif ATCMD_VER == ATVER_2 // uart at command -#if CONFIG_WLAN - {"ATPA", fATPA,}, // set AP - {"ATPN", fATPN,}, // connect to Network - {"ATPH", fATPH,}, // set DHCP mode - {"ATPE", fATPE,}, // set static IP for STA - {"ATPF", fATPF,}, // set DHCP rule for AP - {"ATPG", fATPG,}, // set auto connect - {"ATPM", fATPM,}, // set MAC address - {"ATPW", fATPW,}, // set Wifi mode - {"ATWD", fATWD,}, // WIFI disconnect - {"ATWS", fATWS,}, // WIFI scan -#if CONFIG_ENABLE_P2P - {"ATWG", fATWG,}, //p2p start - {"ATWH", fATWH,}, //p2p stop - {"ATWJ", fATWJ,}, //p2p connect - {"ATWK", fATWK,}, //p2p disconnect - {"ATWN", fATWN,}, //p2p info - {"ATWF", fATWF,}, //p2p find - {"ATWg", fATWg,}, //p2p auto go start - {"ATWL", fATWL,}, //p2p listen - {"ATWP", fATWP,}, //p2p peers -#endif -#if CONFIG_LWIP_LAYER - {"ATWT", fATWT,}, - {"ATWU", fATWU,}, -#endif -#ifdef CONFIG_PROMISC - {"ATWM", fATWM,}, // WIFI promisc Usage: ATWM=DURATION_SECONDS[with_len] -#endif - {"ATW?", fATWx,}, // WIFI Info -#if (CONFIG_INCLUDE_SIMPLE_CONFIG) - {"ATWQ", fATWQ } // wifi simpleconfig -#endif // #if (CONFIG_INCLUDE_SIMPLE_CONFIG) -#endif // #if CONFIG_WLAN -#endif // end of #if ATCMD_VER == ATVER_1 -}; - -#if ATCMD_VER == ATVER_2 -void print_wifi_at(void *arg){ - int index; - int cmd_len = 0; - - cmd_len = sizeof(at_wifi_items)/sizeof(at_wifi_items[0]); - for(index = 0; index < cmd_len; index++) - at_printf("\r\n%s", at_wifi_items[index].log_cmd); -} -#endif - -void at_wifi_init(void) -{ -#if CONFIG_WLAN - init_wifi_struct(); -#endif - log_service_add_table(at_wifi_items, sizeof(at_wifi_items)/sizeof(at_wifi_items[0])); -} - -#if SUPPORT_LOG_SERVICE -log_module_init(at_wifi_init); -#endif - -#endif //#ifdef CONFIG_AT_WIFI diff --git a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_wifi1.h b/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_wifi1.h deleted file mode 100644 index e367a88..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/atcmd_wifi1.h +++ /dev/null @@ -1,171 +0,0 @@ -#ifndef __ATCMD_WIFI_H__ -#define __ATCMD_WIFI_H__ -#include -#ifdef CONFIG_AT_WIFI -#include "main.h" -#include "lwip_netconf.h" -#ifdef USE_FLASH_EEP -#include "flash_eep.h" -#include "feep_config.h" -#endif - - -#ifndef WLAN0_NAME - #define WLAN0_NAME "wlan0" -#endif -#ifndef WLAN1_NAME - #define WLAN1_NAME "wlan1" -#endif -/* Give default value if not defined */ -#ifndef NET_IF_NUM - #ifdef CONFIG_CONCURRENT_MODE - #define NET_IF_NUM ((CONFIG_ETHERNET) + (CONFIG_WLAN) + 1) - #else - #define NET_IF_NUM ((CONFIG_ETHERNET) + (CONFIG_WLAN)) - #endif // end of CONFIG_CONCURRENT_MODE -#endif // end of NET_IF_NUM - -/*Static IP ADDRESS*/ -#ifndef IP_ADDR0 -#define IP_ADDR0 192 -#define IP_ADDR1 168 -#define IP_ADDR2 3 -#define IP_ADDR3 80 -#endif - -/*NETMASK*/ -#ifndef NETMASK_ADDR0 -#define NETMASK_ADDR0 255 -#define NETMASK_ADDR1 255 -#define NETMASK_ADDR2 255 -#define NETMASK_ADDR3 0 -#endif - -/*Gateway Address*/ -#ifndef GW_ADDR0 -#define GW_ADDR0 192 -#define GW_ADDR1 168 -#define GW_ADDR2 3 -#define GW_ADDR3 1 -#endif - -/*Static IP ADDRESS*/ -#ifndef AP_IP_ADDR0 -#define AP_IP_ADDR0 192 -#define AP_IP_ADDR1 168 -#define AP_IP_ADDR2 43 -#define AP_IP_ADDR3 1 -#endif - -/*NETMASK*/ -#ifndef AP_NETMASK_ADDR0 -#define AP_NETMASK_ADDR0 255 -#define AP_NETMASK_ADDR1 255 -#define AP_NETMASK_ADDR2 255 -#define AP_NETMASK_ADDR3 0 -#endif - -/*Gateway Address*/ -#ifndef AP_GW_ADDR0 -#define AP_GW_ADDR0 192 -#define AP_GW_ADDR1 168 -#define AP_GW_ADDR2 43 -#define AP_GW_ADDR3 1 -#endif - -#endif // CONFIG_AT_WIFI - -#if CONFIG_EXAMPLE_UART_ATCMD - -#include "wifi_structures.h" -#include -typedef struct _UART_LOG_CONF_{ - u32 BaudRate; - u8 DataBits; - u8 StopBits; - u8 Parity; - u8 FlowControl; -}UART_LOG_CONF, *PUART_LOG_CONF; - -#define ATCMD_WIFI_CONN_STORE_MAX_NUM (1) -struct atcmd_wifi_conf{ - struct wlan_fast_reconnect reconn[ATCMD_WIFI_CONN_STORE_MAX_NUM]; - int32_t auto_enable; - rtw_wifi_setting_t setting; - int32_t reconn_num; - int32_t reconn_last_index; -}; - -#define ATCMD_LWIP_CONN_STORE_MAX_NUM (1) -struct atcmd_lwip_conn_info{ - int32_t role; //client, server or seed - uint32_t protocol; //tcp or udp - uint32_t remote_addr; //remote ip - uint32_t remote_port; //remote port - uint32_t local_addr; //locale ip, not used yet - uint32_t local_port; //locale port, not used yet - uint32_t reserved; //reserve for further use -}; -struct atcmd_lwip_conf { - int32_t enable; //enable or not - int32_t conn_num; - int32_t last_index; - int32_t reserved; //reserve for further use - struct atcmd_lwip_conn_info conn[ATCMD_LWIP_CONN_STORE_MAX_NUM]; -}; - -typedef enum { - AT_PARTITION_ALL = 0, - AT_PARTITION_UART = FEEP_ID_UART_CFG, - AT_PARTITION_WIFI = FEEP_ID_WIFI_CFG, - AT_PARTITION_LWIP = FEEP_ID_LWIP_CFG -} AT_PARTITION; - -typedef enum { - AT_PARTITION_READ = 0, - AT_PARTITION_WRITE = 1, - AT_PARTITION_ERASE = 2 -} AT_PARTITION_OP; - -//first segment for uart -#define UART_SETTING_BACKUP_SECTOR (0x8000) -#define UART_CONF_DATA_OFFSET (0) -#define UART_CONF_DATA_SIZE ((((sizeof(UART_LOG_CONF)-1)>>2) + 1)<<2) - -//second segment for wifi config -#define WIFI_CONF_DATA_OFFSET (UART_CONF_DATA_OFFSET+UART_CONF_DATA_SIZE) -#define WIFI_CONF_DATA_SIZE ((((sizeof(struct atcmd_wifi_conf)-1)>>2) + 1)<<2) - -//fouth segment for lwip config -#define LWIP_CONF_DATA_OFFSET (WIFI_CONF_DATA_OFFSET+WIFI_CONF_DATA_SIZE) -#define LWIP_CONF_DATA_SIZE ((((sizeof(struct atcmd_lwip_conf)-1)>>2) + 1)<<2) - -extern void atcmd_update_partition_info(AT_PARTITION id, AT_PARTITION_OP ops, u8 *data, u16 len); - -#define ATSTRING_LEN (LOG_SERVICE_BUFLEN) -extern char at_string[ATSTRING_LEN]; - -extern unsigned char gAT_Echo; // default echo on -//extern void uart_at_lock(void); -//extern void uart_at_unlock(void); -extern void uart_at_send_string(char *str); -extern void uart_at_send_buf(u8 *buf, u32 len); - -#define at_printf(fmt, args...) do{\ - /*uart_at_lock();*/\ - snprintf(at_string, ATSTRING_LEN, fmt, ##args); \ - uart_at_send_string(at_string);\ - /*uart_at_unlock();*/\ - }while(0) -#define at_print_data(data, size) do{\ - /*uart_at_lock();*/\ - uart_at_send_buf(data, size);\ - /*uart_at_unlock();*/\ - }while(0) - -#else -#define at_printf(fmt, args...) do{printf(fmt, ##args);}while(0) -#define at_print_data(data, size) do{__rtl_memDump(data, size, NULL);}while(0) -#endif//#if CONFIG_EXAMPLE_UART_ATCMD - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/log_service.c b/Firmware/RTLGDB/USDK/component/common/api/at_cmd/log_service.c deleted file mode 100644 index eb93820..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/log_service.c +++ /dev/null @@ -1,497 +0,0 @@ -#include -#include -#include -#include "FreeRTOS.h" -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) -#include "freertos_pmu.h" -#endif -#include "log_service.h" -#include "task.h" -#include "semphr.h" -#include "main.h" -#include "wifi_util.h" -#include "atcmd_wifi.h" -#include "osdep_api.h" - -#if CONFIG_EXAMPLE_UART_ATCMD -#include "atcmd_lwip.h" -#endif - -#if SUPPORT_LOG_SERVICE -//====================================================== -struct list_head log_hash[ATC_INDEX_NUM]; -#ifdef CONFIG_AT_USR -extern void at_user_init(void); -#endif -#ifdef CONFIG_AT_WIFI -extern void at_wifi_init(void); -#endif -//extern void at_fs_init(void); - -#ifdef CONFIG_AT_SYS -extern void at_sys_init(void); -#endif -#if CONFIG_ETHERNET -extern void at_ethernet_init(void); -#endif -#if CONFIG_GOOGLE_NEST -extern void at_google_init(void); -#endif -#ifdef CONFIG_AT_LWIP -extern void at_transport_init(void); -#endif -//extern void at_app_init(void); -#if CONFIG_ALINK -extern void at_cloud_init(void); -#endif - - -char log_buf[LOG_SERVICE_BUFLEN]; -#if CONFIG_LOG_HISTORY -char log_history[LOG_HISTORY_LEN][LOG_SERVICE_BUFLEN]; -static unsigned int log_history_count = 0; -#endif -xSemaphoreHandle log_rx_interrupt_sema = NULL; -#if CONFIG_LOG_SERVICE_LOCK -xSemaphoreHandle log_service_sema = NULL; -#endif -extern xSemaphoreHandle uart_rx_interrupt_sema; - -#if CONFIG_INIC_EN -extern unsigned char inic_cmd_ioctl; -#endif - -#if defined (__ICCARM__) -#pragma section=".data.log_init" - -unsigned int __log_init_begin__; -unsigned int __log_init_end__; -#elif defined ( __CC_ARM ) || defined(__GNUC__) -//#pragma section=".data.log_init" -log_init_t* __log_init_begin__; -log_init_t* __log_init_end__; -log_init_t log_init_table[] = { - -#ifdef CONFIG_AT_WIFI - at_wifi_init, -#endif - // at_fs_init, -#ifdef CONFIG_AT_SYS - at_sys_init, -#endif - -#if CONFIG_ETHERNET - at_ethernet_init -#endif - -#if CONFIG_GOOGLE_NEST - at_google_init -#endif - -#if CONFIG_TRANSPORT - at_transport_init -#endif - -#if CONFIG_ALINK - at_cloud_init -#endif - -#ifdef CONFIG_AT_USR - at_user_init -#endif - - // at_app_init -}; -#else -#error "not implement, add to linker script" -extern unsigned int __log_init_begin__; -extern unsigned int __log_init_end__; -#endif - -#if defined(__GNUC__) -#define USE_STRSEP -#endif - -//====================================================== -int hash_index(char *str) -{ - unsigned int seed = 131; // 31 131 1313 13131 131313 etc.. - unsigned int hash = 0; - - while (*str) - { - hash = hash * seed + (*str++); - } - - return (hash & 0x7FFFFFFF); -} - -void log_add_new_command(log_item_t *new) -{ - int index = hash_index(new->log_cmd)%ATC_INDEX_NUM; - - list_add(&new->node, &log_hash[index]); -} -void start_log_service(void); -void log_service_init(void) -{ - int i; - -#if defined (__ICCARM__) - log_init_t *log_init_table; - __log_init_begin__ = (unsigned int)__section_begin(".data.log_init"); - __log_init_end__ = (unsigned int)__section_end(".data.log_init"); - log_init_table = (log_init_t *)__log_init_begin__; -#elif defined(__CC_ARM) || defined(__GNUC__) - __log_init_begin__ = log_init_table; - __log_init_end__ = log_init_table + sizeof(log_init_table); -#else - #error "not implement" -#endif - - - for(i=0;ilog_cmd, cmd) == 0){ - //printf("%s match %s, search cnt %d\n\r", cmd, item->log_cmd, search_cnt); - act = (void*)item->at_act; - break; - } - } - - return act; -} - -void* log_handler(char *cmd) -{ - log_act_t action=NULL; - char buf[LOG_SERVICE_BUFLEN] = {0}; - char *copy=buf; - char *token = NULL; - char *param = NULL; - char tok[5] = {0};//'\0' -#if CONFIG_LOG_HISTORY - strcpy(log_history[((log_history_count++)%LOG_HISTORY_LEN)], log_buf); -#endif - strncpy(copy, cmd,LOG_SERVICE_BUFLEN-1); - -#if defined(USE_STRSEP) - token = _strsep(©, "="); - param = copy; -#else - token = strtok(copy, "="); - param = strtok(NULL, NULL); -#endif - if(token && (strlen(token) <= 4)) - strcpy(tok, token); - else{ - //printf("\n\rAT Cmd format error!\n"); - return NULL; - }; - //printf(" Command %s \n\r ", tok); - //printf(" Param %s \n\r", param); - action = (log_act_t)log_action(tok); - - if(action){ - action(param); - } - return (void*)action; - -} - -int parse_param(char *buf, char **argv) -{ - int argc = 1; - char str_buf[LOG_SERVICE_BUFLEN] = "\0"; - int str_count = 0; - int buf_cnt = 0; - - if(buf == NULL) - goto exit; - - while((argc < MAX_ARGC) && (*buf != '\0')) { - while((*buf == ',') || (*buf == '[') || (*buf == ']')){ - if((*buf == ',') && (*(buf+1) == ',')){ - argv[argc] = NULL; - argc++; - } - *buf = '\0'; - buf++; - } - - if(*buf == '\0') - break; - else if(*buf == '"'){ - memset(str_buf,'\0',LOG_SERVICE_BUFLEN); - str_count = 0; - buf_cnt = 0; - *buf = '\0'; - buf ++; - if(*buf == '\0') - break; - argv[argc] = buf; - while((*buf != '"')&&(*buf != '\0')){ - if(*buf == '\\'){ - buf ++; - buf_cnt++; - } - str_buf[str_count] = *buf; - str_count++; - buf_cnt++; - buf ++; - } - *buf = '\0'; - memcpy(buf-buf_cnt,str_buf,buf_cnt); - } - else{ - argv[argc] = buf; - } - argc++; - buf++; - - while( (*buf != ',')&&(*buf != '\0')&&(*buf != '[')&&(*buf != ']') ) - buf++; - } -exit: - return argc; -} - -unsigned char gDbgLevel = AT_DBG_ERROR; -unsigned int gDbgFlag = 0xFFFFFFFF; -void at_set_debug_level(unsigned char newDbgLevel) -{ - gDbgLevel = newDbgLevel; -} - -void at_set_debug_mask(unsigned int newDbgFlag) -{ - gDbgFlag = newDbgFlag; -} - -#if SUPPORT_INTERACTIVE_MODE -extern char uart_buf[64]; -void legency_interactive_handler(unsigned char argc, unsigned char **argv) -{ -#if 0 //defined(CONFIG_PLATFORM_8195A) - if(argc<1) - { - DiagPrintf("Wrong argument number!\r\n"); - return; - } - - - DiagPrintf("Wlan Normal Mode\n"); - - WlanNormal( argc, argv); -#else - strncpy(uart_buf, log_buf, 63);//uart_buf[64] - xSemaphoreGive(uart_rx_interrupt_sema); -#endif -} -#endif - -#if CONFIG_WLAN -#ifndef WLAN0_NAME - #define WLAN0_NAME "wlan0" -#endif -#ifndef WLAN1_NAME - #define WLAN1_NAME "wlan1" -#endif -int mp_commnad_handler(char *cmd) -{ - char buf[64] = {0}; - char *token = NULL; - - //strcpy(buf, cmd); - strncpy(buf, cmd, (64-1)); - token = strtok(buf, " "); - if(token && (strcmp(buf, "iwpriv") == 0)){ - token = strtok(NULL, ""); - wext_private_command(WLAN0_NAME, token, 1); - return 0; - } - return -1; -} -#endif -void print_help_msg(void){ -#if CONFIG_WLAN -extern void print_wlan_help(void); - print_wlan_help(); -#endif -//add other help message print here -} - -int print_help_handler(char *cmd){ - if(strcmp(cmd, "help") == 0){ - print_help_msg(); - return 0; - } - return -1; -} - -#if CONFIG_LOG_SERVICE_LOCK -void log_service_lock(void) -{ - rtw_down_sema(&log_service_sema); -} - -u32 log_service_lock_timeout(u32 ms) -{ - return rtw_down_timeout_sema(&log_service_sema, ms); -} - -void log_service_unlock(void) -{ - rtw_up_sema(&log_service_sema); -} - -void log_service_lock_init(void){ - rtw_init_sema(&log_service_sema, 1); -} -#endif - -void log_service(void *param) -{ - _AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ALWAYS, "\n\rStart LOG SERVICE MODE\n\r"); - _AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ALWAYS, "\n\r# "); - while(1){ - while(xSemaphoreTake(log_rx_interrupt_sema, portMAX_DELAY) != pdTRUE); -#if CONFIG_LOG_SERVICE_LOCK - log_service_lock(); -#endif - if(log_handler((char *)log_buf) == NULL){ -#if CONFIG_WLAN - if(mp_commnad_handler((char *)log_buf) < 0) -#endif - { - #if SUPPORT_INTERACTIVE_MODE - print_help_handler((char *)log_buf); - legency_interactive_handler(NULL, NULL); - #if CONFIG_LOG_SERVICE_LOCK - log_service_unlock(); - #endif - continue; - #else - if(print_help_handler((char *)log_buf) < 0){ - at_printf("\r\nunknown command '%s'", log_buf); - } - #endif - } - } - log_buf[0] = '\0'; -#if CONFIG_INIC_EN - inic_cmd_ioctl = 0; -#endif - _AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ALWAYS, "\n\r[MEM] After do cmd, available heap %d+%d\n\r", xPortGetFreeHeapSize(), tcm_heap_freeSpace()); - _AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ALWAYS, "\r\n\n# "); //"#" is needed for mp tool -#if CONFIG_EXAMPLE_UART_ATCMD - if(atcmd_lwip_is_tt_mode()) - at_printf(STR_END_OF_ATDATA_RET); - else - at_printf(STR_END_OF_ATCMD_RET); -#endif -#if CONFIG_LOG_SERVICE_LOCK - log_service_unlock(); -#endif -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) - release_wakelock(WAKELOCK_LOGUART); -#endif - } -} - -#define STACKSIZE 1280 -void start_log_service(void) -{ - xTaskHandle CreatedTask; - int result; - -#if 0 // CONFIG_USE_TCM_HEAP - extern void *tcm_heap_malloc(int size); - void *stack_addr = tcm_heap_malloc(STACKSIZE * sizeof(int)); - - if(stack_addr == NULL){ - } - - result = xTaskGenericCreate( - log_service, - ( signed portCHAR * ) "log_srv", - STACKSIZE, - NULL, - tskIDLE_PRIORITY + 5, - &CreatedTask, - stack_addr, - NULL); -#else - result = xTaskCreate( log_service, ( signed portCHAR * ) "log_srv", STACKSIZE, NULL, tskIDLE_PRIORITY + 5, &CreatedTask ); -#endif - - if(result != pdPASS) { - printf("\n\r%s xTaskCreate failed", __FUNCTION__); - } - -} - -void fAT_exit(void *arg){ - printf("\n\rLeave LOG SERVICE"); - vTaskDelete(NULL); -} -#if CONFIG_LOG_HISTORY -void fAT_log(void *arg){ - int i = 0; - printf("[AT]log history:\n\n\r"); - if(log_history_count > LOG_HISTORY_LEN){ - for(i=0; i<4; i++) - printf(" %s\n\r", log_history[((log_history_count+i)%LOG_HISTORY_LEN)]); - } - else{ - for(i=0; i<(log_history_count-1); i++) - printf(" %s\n\r", log_history[i]); - } -} -#endif -log_item_t at_log_items[ ] = { - {"AT--", fAT_exit,}, -#if CONFIG_LOG_HISTORY - {"AT??", fAT_log,}, -#endif - {"ATxx", fAT_exit,} -}; -void at_log_init(void) -{ - log_service_add_table(at_log_items, sizeof(at_log_items)/sizeof(at_log_items[0])); -} -log_module_init(at_log_init); -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/log_service.h b/Firmware/RTLGDB/USDK/component/common/api/at_cmd/log_service.h deleted file mode 100644 index 3e9e7d1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/at_cmd/log_service.h +++ /dev/null @@ -1,123 +0,0 @@ -#ifndef LOG_SERVICE_H -#define LOG_SERVICE_H - -#include "dlist.h" -/* - * Include user defined options first. Anything not defined in these files - * will be set to standard values. Override anything you dont like! - */ -#if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) -#include "platform_opts.h" -#include "platform_stdlib.h" -#endif - -#ifdef __ICCARM__ -#define STRINGIFY(s) #s -#define SECTION(_name) _Pragma( STRINGIFY(location=_name)) -#define log_module_init(fn) \ - SECTION(".data.log_init") __root static void* log_##fn = (void*)fn -#elif defined(__CC_ARM) -#define log_module_init(fn) \ -static void* log_##fn __attribute__((section(".data.log_init"))) = (void*)fn; -#define DiagPrintf printf -#elif defined(__GNUC__) -#define log_module_init(fn) \ -static void* log_##fn __attribute__((section(".data.log_init"))) = (void*)fn; -#else -#error "not implement" -#endif - -#define ATC_INDEX_NUM 32 - -#ifndef SUPPORT_LOG_SERVICE -#define SUPPORT_LOG_SERVICE 1 -#endif - -//LOG_SERVICE_BUFLEN: default, only 63 bytes could be used for keeping input -// cmd, the last byte is for string end ('\0'). -#ifndef LOG_SERVICE_BUFLEN -#define LOG_SERVICE_BUFLEN 64 -#endif - -#ifndef CONFIG_LOG_HISTORY -#define CONFIG_LOG_HISTORY 0 -#if CONFIG_LOG_HISTORY -#define LOG_HISTORY_LEN 5 -#endif -#endif //#ifndef CONFIG_LOG_HISTORY - -#ifndef MAX_ARGC -#define MAX_ARGC 12 -#endif - -#ifndef CONFIG_LOG_SERVICE_LOCK -#define CONFIG_LOG_SERVICE_LOCK 0 // //to protect log_buf[], only one command processed per time -#endif - -#define AT_BIT(n) (1< " //data transparent transmission indicator -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/api/lwip_netconf.c b/Firmware/RTLGDB/USDK/component/common/api/lwip_netconf.c deleted file mode 100644 index 0ac869a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/lwip_netconf.c +++ /dev/null @@ -1,455 +0,0 @@ -/* Includes ------------------------------------------------------------------*/ -#include "lwip/mem.h" -#include "lwip/memp.h" -#include "lwip/dhcp.h" -#include "lwip/dns.h" -#include "ethernetif.h" -#include "main.h" -#include "lwip_netconf.h" -#if CONFIG_WLAN -#include "wifi_ind.h" -#endif -#if defined(STM32F2XX) -#include "stm322xg_eval_lcd.h" -#elif defined(STM32F4XX) -#include "stm324xg_eval_lcd.h" -#endif -#include - - -/*Static IP ADDRESS*/ -#ifndef IP_ADDR0 -#define IP_ADDR0 192 -#define IP_ADDR1 168 -#define IP_ADDR2 1 -#define IP_ADDR3 80 -#endif - -/*NETMASK*/ -#ifndef NETMASK_ADDR0 -#define NETMASK_ADDR0 255 -#define NETMASK_ADDR1 255 -#define NETMASK_ADDR2 255 -#define NETMASK_ADDR3 0 -#endif - -/*Gateway Address*/ -#ifndef GW_ADDR0 -#define GW_ADDR0 192 -#define GW_ADDR1 168 -#define GW_ADDR2 1 -#define GW_ADDR3 1 -#endif - -/*Static IP ADDRESS*/ -#ifndef AP_IP_ADDR0 -#define AP_IP_ADDR0 192 -#define AP_IP_ADDR1 168 -#define AP_IP_ADDR2 43 -#define AP_IP_ADDR3 1 -#endif - -/*NETMASK*/ -#ifndef AP_NETMASK_ADDR0 -#define AP_NETMASK_ADDR0 255 -#define AP_NETMASK_ADDR1 255 -#define AP_NETMASK_ADDR2 255 -#define AP_NETMASK_ADDR3 0 -#endif - -/*Gateway Address*/ -#ifndef AP_GW_ADDR0 -#define AP_GW_ADDR0 192 -#define AP_GW_ADDR1 168 -#define AP_GW_ADDR2 43 -#define AP_GW_ADDR3 1 -#endif - -/*Static IP ADDRESS FOR ETHERNET*/ -#ifndef ETH_IP_ADDR0 -#define ETH_IP_ADDR0 192 -#define ETH_IP_ADDR1 168 -#define ETH_IP_ADDR2 0 -#define ETH_IP_ADDR3 80 -#endif - -/*NETMASK FOR ETHERNET*/ -#ifndef ETH_NETMASK_ADDR0 -#define ETH_NETMASK_ADDR0 255 -#define ETH_NETMASK_ADDR1 255 -#define ETH_NETMASK_ADDR2 255 -#define ETH_NETMASK_ADDR3 0 -#endif - -/*Gateway address for ethernet*/ -#ifndef ETH_GW_ADDR0 -#define ETH_GW_ADDR0 192 -#define ETH_GW_ADDR1 168 -#define ETH_GW_ADDR2 0 -#define ETH_GW_ADDR3 1 -#endif - -/* Private define ------------------------------------------------------------*/ -#define MAX_DHCP_TRIES 5 - - - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ - -struct netif xnetif[NET_IF_NUM]; /* network interface structure */ -/* Private functions ---------------------------------------------------------*/ -/** - * @brief Initializes the lwIP stack - * @param None - * @retval None - */ -#if CONFIG_WLAN -extern int error_flag; -extern rtw_mode_t wifi_mode; -#endif - -int lwip_init_done = 0; - -void LwIP_Init(void) -{ - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - int8_t idx = 0; - - /* Create tcp_ip stack thread */ - tcpip_init( NULL, NULL ); - - /* - netif_add(struct netif *netif, struct ip_addr *ipaddr, - struct ip_addr *netmask, struct ip_addr *gw, - void *state, err_t (* init)(struct netif *netif), - err_t (* input)(struct pbuf *p, struct netif *netif)) - - Adds your network interface to the netif_list. Allocate a struct - netif and pass a pointer to this structure as the first argument. - Give pointers to cleared ip_addr structures when using DHCP, - or fill them with sane numbers otherwise. The state pointer may be NULL. - - The init function pointer must point to a initialization function for - your ethernet netif interface. The following code illustrates it's use.*/ - //printf("NET_IF_NUM:%d\n\r",NET_IF_NUM); - for(idx=0;idx 1) - idx = 1; -#endif - - pnetif = &xnetif[idx]; - if(DHCP_state == 0){ - pnetif->ip_addr.addr = 0; - pnetif->netmask.addr = 0; - pnetif->gw.addr = 0; - } - - for (;;) - { - //printf(" ========DHCP_state:%d============\n",DHCP_state); - switch (DHCP_state) - { - case DHCP_START: - { -#if CONFIG_WLAN - wifi_unreg_event_handler(WIFI_EVENT_BEACON_AFTER_DHCP, wifi_rx_beacon_hdl); -#endif - dhcp_start(pnetif); - IPaddress = 0; - DHCP_state = DHCP_WAIT_ADDRESS; - } - break; - - case DHCP_WAIT_ADDRESS: - { - /* If DHCP stopped by wifi_disconn_hdl*/ - if(pnetif->dhcp->state == 0) - { - IP4_ADDR(&ipaddr, IP_ADDR0 ,IP_ADDR1 , IP_ADDR2 , IP_ADDR3 ); - IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); - IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - netif_set_addr(pnetif, &ipaddr , &netmask, &gw); - printf("LwIP_DHCP: dhcp stop.\n"); - return DHCP_STOP; - } - - /* Read the new IP address */ - IPaddress = pnetif->ip_addr.addr; - - if (IPaddress!=0) - { - DHCP_state = DHCP_ADDRESS_ASSIGNED; -#if CONFIG_WLAN - wifi_reg_event_handler(WIFI_EVENT_BEACON_AFTER_DHCP, wifi_rx_beacon_hdl, NULL); -#endif - - /* Stop DHCP */ - // dhcp_stop(pnetif); /* can not stop, need to renew, Robbie*/ - - iptab[0] = (uint8_t)(IPaddress >> 24); - iptab[1] = (uint8_t)(IPaddress >> 16); - iptab[2] = (uint8_t)(IPaddress >> 8); - iptab[3] = (uint8_t)(IPaddress); - printf("Interface %d IP address : %d.%d.%d.%d\n", idx, iptab[3], iptab[2], iptab[1], iptab[0]); -// printf("Time at start %d ms.\n", xTaskGetTickCount()); -#if CONFIG_WLAN - error_flag = RTW_NO_ERROR; -#endif - return DHCP_ADDRESS_ASSIGNED; - } - else - { - /* DHCP timeout */ - if (pnetif->dhcp->tries > MAX_DHCP_TRIES) - { - DHCP_state = DHCP_TIMEOUT; - - /* Stop DHCP */ - dhcp_stop(pnetif); - - /* Static address used */ - IP4_ADDR(&ipaddr, IP_ADDR0 ,IP_ADDR1 , IP_ADDR2 , IP_ADDR3 ); - IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); - IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - netif_set_addr(pnetif, &ipaddr , &netmask, &gw); - - iptab[0] = IP_ADDR3; - iptab[1] = IP_ADDR2; - iptab[2] = IP_ADDR1; - iptab[3] = IP_ADDR0; - printf("Interface %d DHCP timeout\n",idx); - printf("Static IP address : %d.%d.%d.%d\n", iptab[3], iptab[2], iptab[1], iptab[0]); -#if CONFIG_WLAN - error_flag = RTW_DHCP_FAIL; -#endif - -#if CONFIG_ETHERNET - if(idx == NET_IF_NUM -1) // This is the ethernet interface, set it up for static ip address - netif_set_up(pnetif); -#endif - return DHCP_TIMEOUT; - }else - { - //sys_msleep(DHCP_FINE_TIMER_MSECS); - vTaskDelay(DHCP_FINE_TIMER_MSECS); - dhcp_fine_tmr(); - mscnt += DHCP_FINE_TIMER_MSECS; - if (mscnt >= DHCP_COARSE_TIMER_SECS*1000) - { - dhcp_coarse_tmr(); - mscnt = 0; - } - } - } - } - break; - case DHCP_RELEASE_IP: -#if CONFIG_WLAN - wifi_unreg_event_handler(WIFI_EVENT_BEACON_AFTER_DHCP, wifi_rx_beacon_hdl); -#endif - printf("LwIP_DHCP: Release ip\n"); - dhcp_release_unicast(pnetif); - return DHCP_RELEASE_IP; - case DHCP_STOP: -#if CONFIG_WLAN - wifi_unreg_event_handler(WIFI_EVENT_BEACON_AFTER_DHCP, wifi_rx_beacon_hdl); -#endif - printf("LwIP_DHCP: dhcp stop.\n"); - dhcp_stop(pnetif); - return DHCP_STOP; - default: - break; - } - - } -} - -void LwIP_ReleaseIP(uint8_t idx) -{ - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - struct netif *pnetif = &xnetif[idx]; - - IP4_ADDR(&ipaddr, 0, 0, 0, 0); - IP4_ADDR(&netmask, 255, 255, 255, 0); - IP4_ADDR(&gw, 0, 0, 0, 0); - - netif_set_addr(pnetif, &ipaddr , &netmask, &gw); -} - -uint8_t* LwIP_GetMAC(struct netif *pnetif) -{ - return (uint8_t *) (pnetif->hwaddr); -} - -uint8_t* LwIP_GetIP(struct netif *pnetif) -{ - return (uint8_t *) &(pnetif->ip_addr); -} - -uint8_t* LwIP_GetGW(struct netif *pnetif) -{ - return (uint8_t *) &(pnetif->gw); -} - -uint8_t* LwIP_GetMASK(struct netif *pnetif) -{ - return (uint8_t *) &(pnetif->netmask); -} - -uint8_t* LwIP_GetBC(struct netif *pnetif) -{ - return (uint8_t *) &(pnetif->dhcp->offered_bc_addr); -} - -#if LWIP_DNS -void LwIP_GetDNS(struct ip_addr* dns) -{ - *dns = dns_getserver(0); -} - -void LwIP_SetDNS(struct ip_addr* dns) -{ - dns_setserver(0, dns); -} -#endif -void LwIP_UseStaticIP(struct netif *pnetif) -{ - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - - /* Static address used */ - if(pnetif->name[1] == '0'){ -#if CONFIG_WLAN - if(wifi_mode == RTW_MODE_STA){ - IP4_ADDR(&ipaddr, IP_ADDR0 ,IP_ADDR1 , IP_ADDR2 , IP_ADDR3 ); - IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); - IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - } - else if(wifi_mode == RTW_MODE_AP){ - IP4_ADDR(&ipaddr, AP_IP_ADDR0, AP_IP_ADDR1, AP_IP_ADDR2, AP_IP_ADDR3); - IP4_ADDR(&netmask, AP_NETMASK_ADDR0, AP_NETMASK_ADDR1 , AP_NETMASK_ADDR2, AP_NETMASK_ADDR3); - IP4_ADDR(&gw, AP_GW_ADDR0, AP_GW_ADDR1, AP_GW_ADDR2, AP_GW_ADDR3); - } -#endif - }else{ - IP4_ADDR(&ipaddr, AP_IP_ADDR0, AP_IP_ADDR1, AP_IP_ADDR2, AP_IP_ADDR3); - IP4_ADDR(&netmask, AP_NETMASK_ADDR0, AP_NETMASK_ADDR1 , AP_NETMASK_ADDR2, AP_NETMASK_ADDR3); - IP4_ADDR(&gw, AP_GW_ADDR0, AP_GW_ADDR1, AP_GW_ADDR2, AP_GW_ADDR3); - } - - netif_set_addr(pnetif, &ipaddr , &netmask, &gw); -} -#if LWIP_AUTOIP -#include - -void LwIP_AUTOIP(struct netif *pnetif) -{ - uint8_t *ip = LwIP_GetIP(pnetif); - - autoip_start(pnetif); - - while((pnetif->autoip->state == AUTOIP_STATE_PROBING) || (pnetif->autoip->state == AUTOIP_STATE_ANNOUNCING)) { - vTaskDelay(1000); - } - - if(*((uint32_t *) ip) == 0) { - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - - printf("AUTOIP timeout\n"); - - /* Static address used */ - IP4_ADDR(&ipaddr, IP_ADDR0 ,IP_ADDR1 , IP_ADDR2 , IP_ADDR3 ); - IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); - IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - netif_set_addr(pnetif, &ipaddr , &netmask, &gw); - printf("Static IP address : %d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]); - } - else { - printf("Link-local address: %d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]); - } -} -#endif -#if LWIP_IPV6 -/* Get IPv6 address with lwip 1.5.0 */ -void LwIP_AUTOIP_IPv6(struct netif *pnetif) -{ - uint8_t *ipv6 = (uint8_t *) &(pnetif->ip6_addr[0].addr[0]); - - netif_create_ip6_linklocal_address(pnetif, 1); - printf("IPv6 link-local address: %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\n", - ipv6[0], ipv6[1], ipv6[2], ipv6[3], ipv6[4], ipv6[5], ipv6[6], ipv6[7], - ipv6[8], ipv6[9], ipv6[10], ipv6[11], ipv6[12], ipv6[13], ipv6[14], ipv6[15]); -} -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/api/lwip_netconf.h b/Firmware/RTLGDB/USDK/component/common/api/lwip_netconf.h deleted file mode 100644 index 8ac0e46..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/lwip_netconf.h +++ /dev/null @@ -1,91 +0,0 @@ -/** - ****************************************************************************** - * @file netconf.h - * @author MCD Application Team - * @version V1.1.0 - * @date 07-October-2011 - * @brief This file contains all the functions prototypes for the netconf.c - * file. - ****************************************************************************** - * @attention - * - * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS - * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE - * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY - * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING - * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE - * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. - * - *

© COPYRIGHT 2011 STMicroelectronics

- ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __NETCONF_H -#define __NETCONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -#include "tcpip.h" -/* Includes ------------------------------------------------------------------*/ -#include -#include "platform_opts.h" -#include "autoconf.h" - -// macros -/* Give default value if not defined */ -#ifndef NET_IF_NUM - #ifdef CONFIG_CONCURRENT_MODE - #define NET_IF_NUM ((CONFIG_ETHERNET) + (CONFIG_WLAN) + 1) - #else - #define NET_IF_NUM ((CONFIG_ETHERNET) + (CONFIG_WLAN)) - #endif // end of CONFIG_CONCURRENT_MODE -#endif // end of NET_IF_NUM - -/* Private typedef -----------------------------------------------------------*/ -typedef enum -{ - DHCP_START=0, - DHCP_WAIT_ADDRESS, - DHCP_ADDRESS_ASSIGNED, - DHCP_RELEASE_IP, - DHCP_STOP, - DHCP_TIMEOUT -} DHCP_State_TypeDef; - -/* Extern functions ------------------------------------------------------------*/ -void wifi_rx_beacon_hdl( char* buf, int buf_len, int flags, void* userdata); - - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ -void LwIP_Init(void); -uint8_t LwIP_DHCP(uint8_t idx, uint8_t dhcp_state); -unsigned char* LwIP_GetMAC(struct netif *pnetif); -unsigned char* LwIP_GetIP(struct netif *pnetif); -unsigned char* LwIP_GetGW(struct netif *pnetif); -uint8_t* LwIP_GetMASK(struct netif *pnetif); -uint8_t* LwIP_GetBC(struct netif *pnetif); -#if LWIP_DNS -void LwIP_GetDNS(struct ip_addr* dns); -void LwIP_SetDNS(struct ip_addr* dns); -#endif -void LwIP_UseStaticIP(struct netif *pnetif); -#if LWIP_AUTOIP -void LwIP_AUTOIP(struct netif *pnetif); -#endif -#if LWIP_IPV6 -void LwIP_AUTOIP_IPv6(struct netif *pnetif); -#endif -#ifdef __cplusplus -} -#endif - -#endif /* __NETCONF_H */ - - -/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/Firmware/RTLGDB/USDK/component/common/api/lwip_netconf1.c b/Firmware/RTLGDB/USDK/component/common/api/lwip_netconf1.c deleted file mode 100644 index 903bd59..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/lwip_netconf1.c +++ /dev/null @@ -1,405 +0,0 @@ -/* Includes ------------------------------------------------------------------*/ -#include "lwip/mem.h" -#include "lwip/memp.h" -#include "lwip/dhcp.h" -#include "lwip/dns.h" -#include "ethernetif.h" -#include "main.h" -#include "lwip_netconf.h" -#if CONFIG_WLAN -#include "wifi_ind.h" -#endif -#if defined(STM32F2XX) -#include "stm322xg_eval_lcd.h" -#elif defined(STM32F4XX) -#include "stm324xg_eval_lcd.h" -#endif -#include - - -/*Static IP ADDRESS*/ -#ifndef IP_ADDR0 -#define IP_ADDR0 192 -#define IP_ADDR1 168 -#define IP_ADDR2 1 -#define IP_ADDR3 80 -#endif - -/*NETMASK*/ -#ifndef NETMASK_ADDR0 -#define NETMASK_ADDR0 255 -#define NETMASK_ADDR1 255 -#define NETMASK_ADDR2 255 -#define NETMASK_ADDR3 0 -#endif - -/*Gateway Address*/ -#ifndef GW_ADDR0 -#define GW_ADDR0 192 -#define GW_ADDR1 168 -#define GW_ADDR2 1 -#define GW_ADDR3 1 -#endif - -/*Static IP ADDRESS*/ -#ifndef AP_IP_ADDR0 -#define AP_IP_ADDR0 192 -#define AP_IP_ADDR1 168 -#define AP_IP_ADDR2 43 -#define AP_IP_ADDR3 1 -#endif - -/*NETMASK*/ -#ifndef AP_NETMASK_ADDR0 -#define AP_NETMASK_ADDR0 255 -#define AP_NETMASK_ADDR1 255 -#define AP_NETMASK_ADDR2 255 -#define AP_NETMASK_ADDR3 0 -#endif - -/*Gateway Address*/ -#ifndef AP_GW_ADDR0 -#define AP_GW_ADDR0 192 -#define AP_GW_ADDR1 168 -#define AP_GW_ADDR2 43 -#define AP_GW_ADDR3 1 -#endif - -/*Static IP ADDRESS FOR ETHERNET*/ -#ifndef ETH_IP_ADDR0 -#define ETH_IP_ADDR0 192 -#define ETH_IP_ADDR1 168 -#define ETH_IP_ADDR2 0 -#define ETH_IP_ADDR3 80 -#endif - -/*NETMASK FOR ETHERNET*/ -#ifndef ETH_NETMASK_ADDR0 -#define ETH_NETMASK_ADDR0 255 -#define ETH_NETMASK_ADDR1 255 -#define ETH_NETMASK_ADDR2 255 -#define ETH_NETMASK_ADDR3 0 -#endif - -/*Gateway address for ethernet*/ -#ifndef ETH_GW_ADDR0 -#define ETH_GW_ADDR0 192 -#define ETH_GW_ADDR1 168 -#define ETH_GW_ADDR2 0 -#define ETH_GW_ADDR3 1 -#endif - -/* Private define ------------------------------------------------------------*/ -#define MAX_DHCP_TRIES 5 - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ - -struct netif xnetif[NET_IF_NUM]; /* network interface structure */ -/* Private functions ---------------------------------------------------------*/ -/** - * @brief Initializes the lwIP stack - * @param None - * @retval None - */ -#if CONFIG_WLAN -extern char error_flag; -extern unsigned char wifi_mode; // rtw_mode_t -#endif - -int lwip_init_done = 0; - -void LwIP_Init(void) -{ - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - int8_t idx = 0; - /* Create tcp_ip stack thread */ - tcpip_init( NULL, NULL ); - - /* - netif_add(struct netif *netif, struct ip_addr *ipaddr, - struct ip_addr *netmask, struct ip_addr *gw, - void *state, err_t (* init)(struct netif *netif), - err_t (* input)(struct pbuf *p, struct netif *netif)) - - Adds your network interface to the netif_list. Allocate a struct - netif and pass a pointer to this structure as the first argument. - Give pointers to cleared ip_addr structures when using DHCP, - or fill them with sane numbers otherwise. The state pointer may be NULL. - - The init function pointer must point to a initialization function for - your ethernet netif interface. The following code illustrates it's use.*/ - //printf("NET_IF_NUM:%d\n\r",NET_IF_NUM); - for(idx = NET_IF_NUM - 1; idx >= 0 ; idx--) { - if(idx == 0){ - IP4_ADDR(&ipaddr, IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3); - IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1 , NETMASK_ADDR2, NETMASK_ADDR3); - IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - } -#if CONFIG_ETHERNET - else if(idx == NET_IF_NUM - 1) - { - IP4_ADDR(&ipaddr, ETH_IP_ADDR0, ETH_IP_ADDR1, ETH_IP_ADDR2, ETH_IP_ADDR3); - IP4_ADDR(&netmask, ETH_NETMASK_ADDR0, ETH_NETMASK_ADDR1 , ETH_NETMASK_ADDR2, ETH_NETMASK_ADDR3); - IP4_ADDR(&gw, ETH_GW_ADDR0, ETH_GW_ADDR1, ETH_GW_ADDR2, ETH_GW_ADDR3); - } -#endif - else { - IP4_ADDR(&ipaddr, AP_IP_ADDR0, AP_IP_ADDR1, AP_IP_ADDR2, AP_IP_ADDR3); - IP4_ADDR(&netmask, AP_NETMASK_ADDR0, AP_NETMASK_ADDR1 , AP_NETMASK_ADDR2, AP_NETMASK_ADDR3); - IP4_ADDR(&gw, AP_GW_ADDR0, AP_GW_ADDR1, AP_GW_ADDR2, AP_GW_ADDR3); - } - xnetif[idx].name[0] = 'r'; - xnetif[idx].name[1] = '0'+idx; - -#if CONFIG_ETHERNET - if(idx == NET_IF_NUM - 1) - netif_add(&xnetif[idx], &ipaddr, &netmask, &gw, NULL, ðernetif_mii_init, &tcpip_input); - else - netif_add(&xnetif[idx], &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input); -#else - netif_add(&xnetif[idx], &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input); -#endif - info_printf("interface %d is initialized\n", idx); - } - - /* Registers the default network interface. */ - netif_set_default(&xnetif[0]); - - /* When the netif is fully configured this function must be called.*/ - for(idx = 0; idx < NET_IF_NUM; idx++) - netif_set_up(&xnetif[idx]); - - lwip_init_done = 1; -} - -/** - * @brief LwIP_DHCP_Process_Handle - * @param None - * @retval None - */ -uint8_t LwIP_DHCP(uint8_t idx, uint8_t dhcp_state) { - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - uint32_t IPaddress; - uint8_t iptab[4]; - uint8_t DHCP_state; - int mscnt = 0; - struct netif *pnetif = NULL; - - DHCP_state = dhcp_state; - -#if !CONFIG_ETHERNET - if (idx > 1) - idx = 1; -#endif - - pnetif = &xnetif[idx]; - if (DHCP_state == 0) { - pnetif->ip_addr.addr = 0; - pnetif->netmask.addr = 0; - pnetif->gw.addr = 0; - } - - for (;;) { - //info_printf("\n\r ========DHCP_state:%d============\n\r",DHCP_state); - switch (DHCP_state) { - case DHCP_START: { -#if CONFIG_WLAN - wifi_unreg_event_handler(WIFI_EVENT_BEACON_AFTER_DHCP, wifi_rx_beacon_hdl); -#endif - dhcp_start(pnetif); - IPaddress = 0; - DHCP_state = DHCP_WAIT_ADDRESS; - } - break; - - case DHCP_WAIT_ADDRESS: { - /* Read the new IP address */ - IPaddress = pnetif->ip_addr.addr; - - if (IPaddress != 0) { - DHCP_state = DHCP_ADDRESS_ASSIGNED; -#if CONFIG_WLAN - wifi_reg_event_handler(WIFI_EVENT_BEACON_AFTER_DHCP, wifi_rx_beacon_hdl, NULL); -#endif - - /* Stop DHCP */ - // dhcp_stop(pnetif); /* can not stop, need to renew, Robbie*/ - iptab[0] = (uint8_t) (IPaddress >> 24); - iptab[1] = (uint8_t) (IPaddress >> 16); - iptab[2] = (uint8_t) (IPaddress >> 8); - iptab[3] = (uint8_t) (IPaddress); - info_printf("Interface %d IP address: %d.%d.%d.%d\n", idx, iptab[3], - iptab[2], iptab[1], iptab[0]); -#if CONFIG_WLAN - error_flag = RTW_NO_ERROR; -#endif - return DHCP_ADDRESS_ASSIGNED; - } else { - /* DHCP timeout */ - if (pnetif->dhcp->tries > MAX_DHCP_TRIES) { - DHCP_state = DHCP_TIMEOUT; - - /* Stop DHCP */ - dhcp_stop(pnetif); - - /* Static address used */ - IP4_ADDR(&ipaddr, IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3); - IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); - IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - netif_set_addr(pnetif, &ipaddr, &netmask, &gw); - - iptab[0] = IP_ADDR3; - iptab[1] = IP_ADDR2; - iptab[2] = IP_ADDR1; - iptab[3] = IP_ADDR0; - info_printf("Interface %d DHCP timeout\n", idx); - info_printf("Static IP address: %d.%d.%d.%d\n", iptab[3], iptab[2], iptab[1], iptab[0]); -#if CONFIG_WLAN - error_flag = RTW_DHCP_FAIL; -#endif - return DHCP_TIMEOUT; - } else { - //sys_msleep(DHCP_FINE_TIMER_MSECS); - vTaskDelay(DHCP_FINE_TIMER_MSECS); - dhcp_fine_tmr(); - mscnt += DHCP_FINE_TIMER_MSECS; - if (mscnt >= DHCP_COARSE_TIMER_SECS * 1000) { - dhcp_coarse_tmr(); - mscnt = 0; - } - } - } - } - break; - case DHCP_RELEASE_IP: -#if CONFIG_WLAN - wifi_unreg_event_handler(WIFI_EVENT_BEACON_AFTER_DHCP, wifi_rx_beacon_hdl); -#endif - info_printf("LwIP_DHCP(%d): Release ip\n", idx); - dhcp_release_unicast(pnetif); - return DHCP_RELEASE_IP; - case DHCP_STOP: -#if CONFIG_WLAN - wifi_unreg_event_handler(WIFI_EVENT_BEACON_AFTER_DHCP, wifi_rx_beacon_hdl); -#endif - info_printf("LwIP_DHCP(%d): dhcp stop.\n", idx); - dhcp_stop(pnetif); - return DHCP_STOP; - default: - break; - } - } -} - -uint8_t* LwIP_GetMAC(struct netif *pnetif) -{ - return (uint8_t *) (pnetif->hwaddr); -} - -uint8_t* LwIP_GetIP(struct netif *pnetif) -{ - return (uint8_t *) &(pnetif->ip_addr); -} - -uint8_t* LwIP_GetGW(struct netif *pnetif) -{ - return (uint8_t *) &(pnetif->gw); -} - -uint8_t* LwIP_GetMASK(struct netif *pnetif) -{ - return (uint8_t *) &(pnetif->netmask); -} - -uint8_t* LwIP_GetBC(struct netif *pnetif) -{ - return (uint8_t *) &(pnetif->dhcp->offered_bc_addr); -} - -#if LWIP_DNS -void LwIP_GetDNS(struct ip_addr* dns) -{ - *dns = dns_getserver(0); -} - -void LwIP_SetDNS(struct ip_addr* dns) -{ - dns_setserver(0, dns); -} -#endif -void LwIP_UseStaticIP(struct netif *pnetif) -{ - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - - /* Static address used */ - if(pnetif->name[1] == '0'){ -#if CONFIG_WLAN - if(wifi_mode == RTW_MODE_STA){ - IP4_ADDR(&ipaddr, IP_ADDR0 ,IP_ADDR1 , IP_ADDR2 , IP_ADDR3 ); - IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); - IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - } - else if(wifi_mode == RTW_MODE_AP){ - IP4_ADDR(&ipaddr, AP_IP_ADDR0, AP_IP_ADDR1, AP_IP_ADDR2, AP_IP_ADDR3); - IP4_ADDR(&netmask, AP_NETMASK_ADDR0, AP_NETMASK_ADDR1 , AP_NETMASK_ADDR2, AP_NETMASK_ADDR3); - IP4_ADDR(&gw, AP_GW_ADDR0, AP_GW_ADDR1, AP_GW_ADDR2, AP_GW_ADDR3); - } -#endif - }else{ - IP4_ADDR(&ipaddr, AP_IP_ADDR0, AP_IP_ADDR1, AP_IP_ADDR2, AP_IP_ADDR3); - IP4_ADDR(&netmask, AP_NETMASK_ADDR0, AP_NETMASK_ADDR1 , AP_NETMASK_ADDR2, AP_NETMASK_ADDR3); - IP4_ADDR(&gw, AP_GW_ADDR0, AP_GW_ADDR1, AP_GW_ADDR2, AP_GW_ADDR3); - } - - netif_set_addr(pnetif, &ipaddr , &netmask, &gw); -} -#if LWIP_AUTOIP -#include - -void LwIP_AUTOIP(struct netif *pnetif) -{ - uint8_t *ip = LwIP_GetIP(pnetif); - - autoip_start(pnetif); - - while((pnetif->autoip->state == AUTOIP_STATE_PROBING) || (pnetif->autoip->state == AUTOIP_STATE_ANNOUNCING)) { - vTaskDelay(1000); - } - - if(*((uint32_t *) ip) == 0) { - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - - printf("AUTOIP timeout\n"); - - /* Static address used */ - IP4_ADDR(&ipaddr, IP_ADDR0 ,IP_ADDR1 , IP_ADDR2 , IP_ADDR3 ); - IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); - IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - netif_set_addr(pnetif, &ipaddr , &netmask, &gw); - printf("Static IP address : %d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]); - } - else { - printf("Link-local address: %d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]); - } -} -#endif -#if LWIP_IPV6 -/* Get IPv6 address with lwip 1.5.0 */ -void LwIP_AUTOIP_IPv6(struct netif *pnetif) -{ - uint8_t *ipv6 = (uint8_t *) &(pnetif->ip6_addr[0].addr[0]); - - netif_create_ip6_linklocal_address(pnetif, 1); - printf("IPv6 link-local address: %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\n", - ipv6[0], ipv6[1], ipv6[2], ipv6[3], ipv6[4], ipv6[5], ipv6[6], ipv6[7], - ipv6[8], ipv6[9], ipv6[10], ipv6[11], ipv6[12], ipv6[13], ipv6[14], ipv6[15]); -} -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/api/network/include/main_test.h b/Firmware/RTLGDB/USDK/component/common/api/network/include/main_test.h deleted file mode 100644 index c9f3227..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/network/include/main_test.h +++ /dev/null @@ -1,21 +0,0 @@ -//----------------------------------------------------------------------------// -#ifndef __MAIN_TEST_H -#define __MAIN_TEST_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported test functions ------------------------------------------------------- */ -void do_ping_test(char *ip, int size, int count, int interval); -void do_ping_call(char *ip, int loop, int count); -void interactive_question(char *question, char *choice, char *buf, int buf_size); -void start_interactive_mode(void); - -#ifdef __cplusplus - } -#endif - -#endif // __MAIN_TEST_H - -//----------------------------------------------------------------------------// diff --git a/Firmware/RTLGDB/USDK/component/common/api/network/include/netconf.h b/Firmware/RTLGDB/USDK/component/common/api/network/include/netconf.h deleted file mode 100644 index 600cd06..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/network/include/netconf.h +++ /dev/null @@ -1,50 +0,0 @@ -/** - ****************************************************************************** - * @file netconf.h - * @author MCD Application Team - * @version V1.1.0 - * @date 07-October-2011 - * @brief This file contains all the functions prototypes for the netconf.c - * file. - ****************************************************************************** - * @attention - * - * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS - * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE - * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY - * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING - * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE - * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. - * - *

© COPYRIGHT 2011 STMicroelectronics

- ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __NETCONF_H -#define __NETCONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -// TODO: remove this file -#include "lwip_netconf.h" -#if 0 -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ -void LwIP_Init(void); -void LwIP_DHCP(void); -#endif -#ifdef __cplusplus -} -#endif - -#endif /* __NETCONF_H */ - - -/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/Firmware/RTLGDB/USDK/component/common/api/network/include/rtl8195a_it.h b/Firmware/RTLGDB/USDK/component/common/api/network/include/rtl8195a_it.h deleted file mode 100644 index 8d5cf19..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/network/include/rtl8195a_it.h +++ /dev/null @@ -1,8 +0,0 @@ - -#ifndef __RTL8195A_IT_H_ -#define __RTL8195A_IT_H_ - - -int irq_alloc_wlan(void *contex); - -#endif //__RTL8195A_IT_H_ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/api/network/include/util.h b/Firmware/RTLGDB/USDK/component/common/api/network/include/util.h deleted file mode 100644 index 377c9c8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/network/include/util.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef _UTIL_H -#define _UTIL_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#include "wifi_util.h" -#if 0 -typedef enum _WIFI_EVENT_INDICATE{ - WIFI_EVENT_CONNECT = 0, - WIFI_EVENT_DISCONNECT = 1, - WIFI_EVENT_FOURWAY_HANDSHAKE_DONE = 2, -}WIFI_EVENT_INDICATE; -rtw_event_indicate_t - -int wext_get_ssid(const char *ifname, __u8 *ssid); -int wext_set_ssid(const char *ifname, const __u8 *ssid, __u16 ssid_len); -int wext_set_auth_param(const char *ifname, __u16 idx, __u32 value); -int wext_set_key_ext(const char *ifname, __u16 alg, const __u8 *addr, int key_idx, int set_tx, const __u8 *seq, __u16 seq_len, __u8 *key, __u16 key_len); -int wext_get_enc_ext(const char *ifname, __u16 *alg); -int wext_set_passphrase(const char *ifname, const __u8 *passphrase, __u16 passphrase_len); -int wext_get_passphrase(const char *ifname, __u8 *passphrase); -int wext_set_mode(const char *ifname, int mode); -int wext_get_mode(const char *ifname, int *mode); -int wext_set_ap_ssid(const char *ifname, const __u8 *ssid, __u16 ssid_len); -int wext_set_country(const char *ifname, char *country_code); -int wext_get_rssi(const char *ifname, int *rssi); -int wext_set_channel(const char *ifname, __u8 ch); -int wext_get_channel(const char *ifname, __u8 *ch); -int wext_set_scan(const char *ifname, char *buf, __u16 buf_len); -int wext_get_scan(const char *ifname, char *buf, __u16 buf_len); -int wext_mp_command(const char *ifname, char *cmd, int show_msg); -int wext_wifi_priv(const char *ifname, int argc, char **argv); -void wext_wlan_indicate(unsigned int cmd, union iwreq_data *wrqu, char *extra); -#endif - -#define wext_handshake_done rltk_wlan_handshake_done - -#ifdef __cplusplus -} -#endif - -#endif /* _UTIL_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/api/network/src/ping_test.c b/Firmware/RTLGDB/USDK/component/common/api/network/src/ping_test.c deleted file mode 100644 index a46578c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/network/src/ping_test.c +++ /dev/null @@ -1,222 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include "main.h" - -#include -#if LWIP_SOCKET -#include -#include -#include -#include - -//#define PING_IP "192.168.0.1" -#define PING_IP "192.168.159.1" -#define PING_TO 1000 -#define PING_ID 0xABCD -#define BUF_SIZE 10000 -#define STACKSIZE 1024 - -static unsigned short ping_seq = 0; -static int infinite_loop, ping_count, data_size, ping_interval, ping_call; -static char ping_ip[16]; - -static void generate_ping_echo(unsigned char *buf, int size) -{ - int i; - struct icmp_echo_hdr *pecho; - - for(i = 0; i < size; i ++) { - buf[sizeof(struct icmp_echo_hdr) + i] = (unsigned char) i; - } - - pecho = (struct icmp_echo_hdr *) buf; - ICMPH_TYPE_SET(pecho, ICMP_ECHO); - ICMPH_CODE_SET(pecho, 0); - pecho->chksum = 0; - pecho->id = PING_ID; - pecho->seqno = htons(++ ping_seq); - - //Checksum includes icmp header and data. Need to calculate after fill up icmp header - pecho->chksum = inet_chksum(pecho, sizeof(struct icmp_echo_hdr) + size); -} - -void ping_test(void *param) -//void ping_test() -{ - int i, ping_socket; - int pint_timeout = PING_TO; - struct sockaddr_in to_addr, from_addr; - int from_addr_len = sizeof(struct sockaddr); - int ping_size, reply_size; - unsigned char *ping_buf, *reply_buf; - unsigned int ping_time, reply_time; - struct ip_hdr *iphdr; - struct icmp_echo_hdr *pecho; - - if(data_size > BUF_SIZE){ - printf("[ERROR] %s: data size error, can't exceed %d\n",__func__,BUF_SIZE); - return; - } - - //Ping size = icmp header(8 bytes) + data size - ping_size = sizeof(struct icmp_echo_hdr) + data_size; - - ping_buf = pvPortMalloc(ping_size); - if(NULL == ping_buf){ - printf("[ERROR] %s: Allocate ping_buf failed\n",__func__); - return; - } - - reply_buf = pvPortMalloc(ping_size); - if(NULL == reply_buf){ - vPortFree(ping_buf); - printf("[ERROR] %s: Allocate reply_buf failed\n",__func__); - return; - } - - printf("[%s] PING %s %d(%d) bytes of data\n", __FUNCTION__, ping_ip, data_size, sizeof(struct ip_hdr) + sizeof(struct icmp_echo_hdr) + data_size); - - for(i = 0; (i < ping_count) || (infinite_loop == 1); i ++) { - ping_socket = socket(AF_INET, SOCK_RAW, IP_PROTO_ICMP); -#ifdef CONFIG_LWIP_1_5_0 - struct timeval timeout; - timeout.tv_sec = pint_timeout / 1000; - timeout.tv_usec = pint_timeout % 1000 * 1000; - setsockopt(ping_socket, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); -#else - setsockopt(ping_socket, SOL_SOCKET, SO_RCVTIMEO, &pint_timeout, sizeof(pint_timeout)); -#endif - to_addr.sin_len = sizeof(to_addr); - to_addr.sin_family = AF_INET; - to_addr.sin_addr.s_addr = inet_addr(ping_ip); - - generate_ping_echo(ping_buf, data_size); - sendto(ping_socket, ping_buf, ping_size, 0, (struct sockaddr *) &to_addr, sizeof(to_addr)); - - ping_time = xTaskGetTickCount(); - if((reply_size = recvfrom(ping_socket, reply_buf, ping_size, 0, (struct sockaddr *) &from_addr, (socklen_t *) &from_addr_len)) - >= (int)(sizeof(struct ip_hdr) + sizeof(struct icmp_echo_hdr))) { - - reply_time = xTaskGetTickCount(); - iphdr = (struct ip_hdr *)reply_buf; - pecho = (struct icmp_echo_hdr *)(reply_buf + (IPH_HL(iphdr) * 4)); - - if((pecho->id == PING_ID) && (pecho->seqno == htons(ping_seq))) { - printf("[%s] %d bytes from %s: icmp_seq=%d time=%d ms\n", __FUNCTION__, reply_size - sizeof(struct ip_hdr), inet_ntoa(from_addr.sin_addr), htons(pecho->seqno), (reply_time - ping_time) * portTICK_RATE_MS); - } - } - else - printf("[%s] Request timeout for icmp_seq %d\n", __FUNCTION__, ping_seq); - - close(ping_socket); - vTaskDelay(ping_interval * configTICK_RATE_HZ); - } - - vPortFree(ping_buf); - vPortFree(reply_buf); - - if(!ping_call) - vTaskDelete(NULL); -} - -void do_ping_call(char *ip, int loop, int count) -{ - ping_call = 1; - ping_seq = 0; - data_size = 120; - ping_interval = 1; - infinite_loop = loop; - ping_count = count; - strcpy(ping_ip, ip); - ping_test(NULL); -} - -void cmd_ping(int argc, char **argv) -{ - int argv_count = 2; - - if(argc < 2) - goto Exit; - - //ping cmd default value - infinite_loop = 0; - ping_count = 4; - data_size = 32; - ping_interval = 1; - ping_call = 1; - ping_seq = 0; - - while(argv_count<=argc){ - //first operation - if(argv_count == 2){ - memset(ping_ip, 0, sizeof(ping_ip)); - strncpy(ping_ip, argv[argv_count-1], (strlen(argv[argv_count-1])>16)?16:strlen(argv[argv_count-1])); - argv_count++; - } - else{ - if(strcmp(argv[argv_count-1], "-t") == 0){ - infinite_loop = 1; - argv_count++; - } - else if(strcmp(argv[argv_count-1], "-n") == 0){ - if(argc < (argv_count+1)) - goto Exit; - ping_count = (int) atoi(argv[argv_count]); - argv_count+=2; - } - else if(strcmp(argv[argv_count-1], "-l") == 0){ - if(argc < (argv_count+1)) - goto Exit; - data_size = (int) atoi(argv[argv_count]); - argv_count+=2; - } - else{ - goto Exit; - } - } - } - - ping_test(NULL); - - return; - -Exit: - printf("[ATWI] Usage: ATWI=[host],[options]\n"); - printf("\t-t\tPing the specified host until stopped\n"); - printf("\t-n\t# Number of echo requests to send (default 4 times)\n"); - printf("\t-l\t# Send buffer size (default 32 bytes)\n"); - printf("\tExample:\n"); - printf("\t\tATWI=192.168.1.2,-n,100,-l,5000\n"); - return; -} - -void do_ping_test(char *ip, int size, int count, int interval) -{ - if((sizeof(struct icmp_echo_hdr) + size) > BUF_SIZE) { - printf("%s BUF_SIZE(%d) is too small\n", __FUNCTION__, BUF_SIZE); - return; - } - - if(ip == NULL) - strcpy(ping_ip, PING_IP); - else - strcpy(ping_ip, ip); - - ping_call = 0; - ping_seq = 0; - data_size = size; - ping_interval = interval; - - if(count == 0) { - infinite_loop = 1; - ping_count = 0; - } - else { - infinite_loop = 0; - ping_count = count; - } - - if(xTaskCreate(ping_test, ((const signed char*)"ping_test"), STACKSIZE, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) - printf("%s xTaskCreate failed\n", __FUNCTION__); -} -#endif // LWIP_SOCKET diff --git a/Firmware/RTLGDB/USDK/component/common/api/network/src/rtl8195a_it.c b/Firmware/RTLGDB/USDK/component/common/api/network/src/rtl8195a_it.c deleted file mode 100644 index 91c0667..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/network/src/rtl8195a_it.c +++ /dev/null @@ -1,110 +0,0 @@ -#include "rtl8195a.h" -#include -#include "rtl8195a_it.h" - -/* os dependent*/ -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" -#include "semphr.h" - - -#include -#define printf DiagPrintf - -/*-----------------------------Global Variable ---------------------*/ -//#ifdef CONFIG_WLAN -//#ifdef CONFIG_ISR_THREAD_MODE_INTERRUPT -extern xSemaphoreHandle *pExportWlanIrqSemaphore; -//#endif -//#endif - - -#ifdef CONFIG_WLAN -#ifdef CONFIG_ISR_THREAD_MODE_INTERRUPT - -//TODO: chris -#define IRQ_HANDLED 1 -#define IRQ_NONE 0 - -int wlan_Interrupt ( - IN VOID* Data -) -{ -#if 1 - - portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; - - printf("wlan interrupt\n"); - /* This semaphore is initialized once wlan interrupt handler thread is created and initialized*/ - if(!pExportWlanIrqSemaphore) - { - printf("%s(%d)\n", __FUNCTION__, __LINE__); - goto exit; - } - - printf("%s(%d)\n", __FUNCTION__, __LINE__); - xSemaphoreGiveFromISR( *pExportWlanIrqSemaphore, &xHigherPriorityTaskWoken ); - - printf("%s(%d)\n", __FUNCTION__, __LINE__); - /* Switch tasks if necessary. */ - if( xHigherPriorityTaskWoken != pdFALSE ) - { - printf("%s(%d)\n", __FUNCTION__, __LINE__); - portEND_SWITCHING_ISR( xHigherPriorityTaskWoken ); - } - -exit: - - return IRQ_HANDLED; -#else - struct dvobj_priv *dvobj = (struct dvobj_priv *)Data; - _adapter *adapter = dvobj->if1; - DBG_8192C("Dma isr\n"); - - if (dvobj->irq_enabled == 0) { - return IRQ_HANDLED; - } -DBG_871X("%s(%d)\n", __FUNCTION__, __LINE__); - if(rtw_hal_interrupt_handler(adapter) == _FAIL) - return IRQ_HANDLED; - //return IRQ_NONE; -DBG_871X("%s(%d)\n", __FUNCTION__, __LINE__); - return IRQ_HANDLED; -#endif - -} - - -VOID -lextra_bus_dma_Interrupt ( - IN VOID* Data -); - - -/* - * This function register interrupt handler and is called by wlan driver - * Return 0 if success, Others if fail - */ - -int irq_alloc_wlan(void *contex) -{ - int ret = 0; - IRQ_HANDLE IrqHandle = {0}; - - printf("Register Interrupt\n"); - IrqHandle.Data = (u32) (contex); - IrqHandle.IrqNum = WL_DMA_IRQ; - IrqHandle.IrqFun = (IRQ_FUN)wlan_Interrupt; - //IrqHandle.IrqFun = (IRQ_FUN)lextra_bus_dma_Interrupt; - IrqHandle.Priority = 0; - - InterruptRegister(&IrqHandle); - InterruptEn(&IrqHandle); - - return ret; - -} -#endif -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/api/network/src/wlan_network.c b/Firmware/RTLGDB/USDK/component/common/api/network/src/wlan_network.c deleted file mode 100644 index 8e8836c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/network/src/wlan_network.c +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2013 Realtek Semiconductor Corp. - */ - -#include "FreeRTOS.h" -#include "task.h" -#include "semphr.h" - -#include "main.h" -#include "main_test.h" -#if CONFIG_WLAN -#include "wifi_conf.h" -#include "wlan_intf.h" -#include "wifi_constants.h" -#endif -#include "lwip_netconf.h" -#include -//#include "wifi_interactive_ext.h" - -#ifndef CONFIG_INIT_NET -#define CONFIG_INIT_NET 1 -#endif -#ifndef CONFIG_INTERACTIVE_MODE -#define CONFIG_INTERACTIVE_MODE 1 -#endif - -#define STACKSIZE (512 + 768) - -xSemaphoreHandle uart_rx_interrupt_sema = NULL; - -void init_thread(void *param) -{ - -#if CONFIG_INIT_NET -#if CONFIG_LWIP_LAYER - /* Initilaize the LwIP stack */ - // DBG_8195A("\nLwIP Init\n"); - LwIP_Init(); -#endif -#endif -#if CONFIG_WIFI_IND_USE_THREAD - wifi_manager_init(); -#endif -#if CONFIG_WLAN - // DBG_8195A("\nWiFi_on(RTW_MODE_STA)\n"); - wifi_on(RTW_MODE_STA); -#if CONFIG_AUTO_RECONNECT - //setup reconnection flag -// u8 mode; -// if(wifi_get_autoreconnect(&mode) > 0 && mode != 1) - wifi_set_autoreconnect(1); -#endif -// printf("\n\r%s(%d), Available heap %d\n\r", __FUNCTION__, __LINE__, xPortGetFreeHeapSize()); -#endif - -#if CONFIG_INTERACTIVE_MODE - /* Initial uart rx swmaphore*/ - vSemaphoreCreateBinary(uart_rx_interrupt_sema); - xSemaphoreTake(uart_rx_interrupt_sema, 1/portTICK_RATE_MS); - start_interactive_mode(); -#endif - - /* Kill init thread after all init tasks done */ - vTaskDelete(NULL); -} - -void wlan_network() -{ -#if 0 - { - void *stack_addr = tcm_heap_malloc(STACKSIZE*sizeof(int)); - if(stack_addr == NULL){ - printf("%s: Out of TCM heap!\n", __FUNCTION__); - } - if (xTaskGenericCreate( - init_thread, - (const char *)"init", - STACKSIZE, - NULL, - tskIDLE_PRIORITY + 3 + PRIORITIE_OFFSET, - NULL, - stack_addr, - NULL) != pdTRUE) - printf("%s: xTaskCreate(init_thread) failed\n", __FUNCTION__); - } -#else - if(xTaskCreate(init_thread, ((const char*)"init"), STACKSIZE, NULL, tskIDLE_PRIORITY + 3 + PRIORITIE_OFFSET, NULL) != pdPASS) // +3 - printf("%s: xTaskCreate(init_thread) failed\n", __FUNCTION__); -#endif -} diff --git a/Firmware/RTLGDB/USDK/component/common/api/platform/dlist.h b/Firmware/RTLGDB/USDK/component/common/api/platform/dlist.h deleted file mode 100644 index 5fa8dd1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/platform/dlist.h +++ /dev/null @@ -1,262 +0,0 @@ -#ifndef __LIST_H -#define __LIST_H - -#if defined ( __CC_ARM ) -#ifndef inline -#define inline __inline -#endif -#endif - -/* This file is from Linux Kernel (include/linux/list.h) - * and modified by simply removing hardware prefetching of list items. - * Here by copyright, credits attributed to wherever they belong. - * Kulesh Shanmugasundaram (kulesh [squiggly] isis.poly.edu) - */ - -/* - * Simple doubly linked list implementation. - * - * Some of the internal functions ("__xxx") are useful when - * manipulating whole lists rather than single entries, as - * sometimes we already know the next/prev entries and we can - * generate better code by using them directly rather than - * using the generic single-entry routines. - */ - -struct list_head { - struct list_head *next, *prev; -}; - -#define LIST_HEAD_INIT(name) { &(name), &(name) } - -#define LIST_HEAD(name) \ - struct list_head name = LIST_HEAD_INIT(name) - -#define INIT_LIST_HEAD(ptr) do { \ - (ptr)->next = (ptr); (ptr)->prev = (ptr); \ -} while (0) - -/* - * Insert a new entry between two known consecutive entries. - * - * This is only for internal list manipulation where we know - * the prev/next entries already! - */ -static inline void __list_add(struct list_head *new, - struct list_head *prev, - struct list_head *next) -{ - next->prev = new; - new->next = next; - new->prev = prev; - prev->next = new; -} - -/** - * list_add - add a new entry - * @new: new entry to be added - * @head: list head to add it after - * - * Insert a new entry after the specified head. - * This is good for implementing stacks. - */ -static inline void list_add(struct list_head *new, struct list_head *head) -{ - __list_add(new, head, head->next); -} - -/** - * list_add_tail - add a new entry - * @new: new entry to be added - * @head: list head to add it before - * - * Insert a new entry before the specified head. - * This is useful for implementing queues. - */ -static inline void list_add_tail(struct list_head *new, struct list_head *head) -{ - __list_add(new, head->prev, head); -} - -/* - * Delete a list entry by making the prev/next entries - * point to each other. - * - * This is only for internal list manipulation where we know - * the prev/next entries already! - */ -static inline void __list_del(struct list_head *prev, struct list_head *next) -{ - next->prev = prev; - prev->next = next; -} - -/** - * list_del - deletes entry from list. - * @entry: the element to delete from the list. - * Note: list_empty on entry does not return true after this, the entry is in an undefined state. - */ -static inline void list_del(struct list_head *entry) -{ - __list_del(entry->prev, entry->next); - entry->next = (void *) 0; - entry->prev = (void *) 0; -} - -/** - * list_del_init - deletes entry from list and reinitialize it. - * @entry: the element to delete from the list. - */ -static inline void list_del_init(struct list_head *entry) -{ - __list_del(entry->prev, entry->next); - INIT_LIST_HEAD(entry); -} - -/** - * list_move - delete from one list and add as another's head - * @list: the entry to move - * @head: the head that will precede our entry - */ -static inline void list_move(struct list_head *list, struct list_head *head) -{ - __list_del(list->prev, list->next); - list_add(list, head); -} - -/** - * list_move_tail - delete from one list and add as another's tail - * @list: the entry to move - * @head: the head that will follow our entry - */ -static inline void list_move_tail(struct list_head *list, - struct list_head *head) -{ - __list_del(list->prev, list->next); - list_add_tail(list, head); -} - -/** - * list_empty - tests whether a list is empty - * @head: the list to test. - */ -static inline int list_empty(struct list_head *head) -{ - return head->next == head; -} - -static inline void __list_splice(struct list_head *list, - struct list_head *head) -{ - struct list_head *first = list->next; - struct list_head *last = list->prev; - struct list_head *at = head->next; - - first->prev = head; - head->next = first; - - last->next = at; - at->prev = last; -} - -/** - * list_splice - join two lists - * @list: the new list to add. - * @head: the place to add it in the first list. - */ -static inline void list_splice(struct list_head *list, struct list_head *head) -{ - if (!list_empty(list)) - __list_splice(list, head); -} - -/** - * list_splice_init - join two lists and reinitialise the emptied list. - * @list: the new list to add. - * @head: the place to add it in the first list. - * - * The list at @list is reinitialised - */ -static inline void list_splice_init(struct list_head *list, - struct list_head *head) -{ - if (!list_empty(list)) { - __list_splice(list, head); - INIT_LIST_HEAD(list); - } -} - -/** - * list_entry - get the struct for this entry - * @ptr: the &struct list_head pointer. - * @type: the type of the struct this is embedded in. - * @member: the name of the list_struct within the struct. - */ -#define list_entry(ptr, type, member) \ - ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) - -/** -* list_first_entry - get the first element from a list -* @ptr: the list head to take the element from. -* @type: the type of the struct this is embedded in. -* @member: the name of the list_head within the struct. -* -* Note, that list is expected to be not empty. -*/ - -#define list_first_entry(ptr, type, member) \ - list_entry((ptr)->next, type, member) - - -/** - * list_for_each - iterate over a list - * @pos: the &struct list_head to use as a loop counter. - * @head: the head for your list. - */ -#define list_for_each(pos, head) \ - for (pos = (head)->next; pos != (head); \ - pos = pos->next) -/** - * list_for_each_prev - iterate over a list backwards - * @pos: the &struct list_head to use as a loop counter. - * @head: the head for your list. - */ -#define list_for_each_prev(pos, head) \ - for (pos = (head)->prev; pos != (head); \ - pos = pos->prev) - -/** - * list_for_each_safe - iterate over a list safe against removal of list entry - * @pos: the &struct list_head to use as a loop counter. - * @n: another &struct list_head to use as temporary storage - * @head: the head for your list. - */ -#define list_for_each_safe(pos, n, head) \ - for (pos = (head)->next, n = pos->next; pos != (head); \ - pos = n, n = pos->next) - -/** - * list_for_each_entry - iterate over list of given type - * @pos: the type * to use as a loop counter. - * @head: the head for your list. - * @member: the name of the list_struct within the struct. - */ -#define list_for_each_entry(pos, head, member, type) \ - for (pos = list_entry((head)->next, type, member); \ - &pos->member != (head); \ - pos = list_entry(pos->member.next, type, member)) - -/** - * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry - * @pos: the type * to use as a loop counter. - * @n: another type * to use as temporary storage - * @head: the head for your list. - * @member: the name of the list_struct within the struct. - */ -#define list_for_each_entry_safe(pos, n, head, member, type) \ - for (pos = list_entry((head)->next, type, member), \ - n = list_entry(pos->member.next, type, member); \ - &pos->member != (head); \ - pos = n, n = list_entry(n->member.next, type, member)) - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/api/platform/esp_comp.h b/Firmware/RTLGDB/USDK/component/common/api/platform/esp_comp.h deleted file mode 100644 index fbb1263..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/platform/esp_comp.h +++ /dev/null @@ -1,168 +0,0 @@ -#ifndef _INCLUDE_ESP_COMP_H_ -#define _INCLUDE_ESP_COMP_H_ - -#include "platform_autoconf.h" -#include "flash_api.h" - -#define ICACHE_FLASH_ATTR -#define ICACHE_RODATA_ATTR -#define DATA_IRAM_ATTR -#define ICACHE_RAM_ATTR - - -#define os_printf rtl_printf -#define os_printf_plus rtl_printf -#define os_sprintf_fd rtl_sprintf -#define ets_sprintf rtl_sprintf - -//#ifndef os_malloc -#undef os_malloc -extern void *pvPortMalloc(size_t xWantedSize); -#define os_malloc pvPortMalloc -#undef os_zalloc -extern void *pvPortZalloc(size_t xWantedSize); -#define os_zalloc pvPortZalloc -//#undef os_calloc -//#define os_calloc pvPortCalloc -#undef os_realloc -extern void *pvPortReAlloc(void *pv, size_t xWantedSize); -#define os_realloc pvPortReAlloc -#undef os_free -extern void vPortFree(void *pv); -#define os_free vPortFree -//#endif -extern size_t xPortGetFreeHeapSize(void); -#define system_get_free_heap_size xPortGetFreeHeapSize - -#define os_bzero rtl_bzero -#define os_delay_us wait_us // HalDelayUs -//#define os_install_putc1 rtl_install_putc1 -//#define os_install_putc2 rtl_install_putc2 -//#define os_intr_lock rtl_intr_lock -//#define os_intr_unlock rtl_intr_unlock -//#define os_isr_attach rtl_isr_attach -//#define os_isr_mask rtl_isr_mask -//#define os_isr_unmask rtl_isr_unmask -#define os_memcmp rtl_memcmp -#define os_memcpy rtl_memcpy -#define ets_memcpy rtl_memcpy -#define os_memmove rtl_memmove -#define os_memset rtl_memset -#define os_putc rtl_putc -//#define os_str2macaddr rtl_str2macaddr -//#define os_strcat strcat -#define os_strchr rtl_strchr -#define os_strrchr rtl_strrchr -#define os_strcmp rtl_strcmp -#define os_strcpy rtl_strcpy -#define os_strlen rtl_strlen -#define os_strncmp rtl_strncmp -#define os_strncpy rtl_strncpy -#define os_strstr rtl_strstr -#define os_random Rand - -//extern uint32 phy_get_rand(void); -#define system_get_os_print() 1 - -#ifdef USE_US_TIMER -#define os_timer_arm_us(a, b, c) rtl_timer_arm_new(a, b, c, 0) -#endif - - -//#define os_timer_arm(a, b, c) rtl_timer_arm_new(a, b, c, 1) -//#define os_timer_disarm rtl_timer_disarm -//#define os_timer_init rtl_timer_init -//#define os_timer_setfn rtl_timer_setfn - -//#define os_timer_done rtl_timer_done -//#define os_timer_handler_isr rtl_timer_handler_isr - -//#define os_update_cpu_frequency rtl_update_cpu_frequency - -//#define os_sprintf ets_sprintf -/* -typedef struct{ - uint32_t deviceId; //+00 - uint32_t chip_size; //+04 chip size in byte - uint32_t block_size; //+08 - uint32_t sector_size; //+0c - uint32_t page_size; //+10 - uint32_t status_mask; //+14 -} SpiFlashChip; - -typedef enum { - SPI_FLASH_RESULT_OK, - SPI_FLASH_RESULT_ERR, - SPI_FLASH_RESULT_TIMEOUT -} SpiFlashOpResult; - -extern SpiFlashChip * flashchip; // in RAM-BIOS: 0x3fffc714 -*/ - -// include "flash_api.h" -#define spi_flash_real_size() flash_get_size(&flashobj) -#define Cache_Read_Disable() SpicDisableRtl8195A() -#define Cache_Read_Enable(a, b, c) flash_turnon() - -#define spi_flash_get_id() ((flashobj.SpicInitPara.id[0] << 16) | (flashobj.SpicInitPara.id[1]<<8) | flashobj.SpicInitPara.id[2]) -//SpiFlashOpResult spi_flash_read_status(uint32_t * sta); -//SpiFlashOpResult spi_flash_write_status(uint32_t sta); -#define spi_flash_erase_sector(sec) flash_erase_sector(&flashobj, (sec)<<12) -#define spi_flash_write(faddr, pbuf, size) flash_stream_write(&flashobj, faddr, size, (uint8_t *)pbuf) -#define spi_flash_read(faddr, pbuf, size) flash_stream_read(&flashobj, faddr, size, (uint8_t *)pbuf) -#define spi_flash_erase_block(blk) flash_erase_block(&flashobj, (blk)<<16); - -#ifndef ip4_addr1 -#define ip4_addr1(ipaddr) (((u8_t*)(ipaddr))[0]) -#define ip4_addr2(ipaddr) (((u8_t*)(ipaddr))[1]) -#define ip4_addr3(ipaddr) (((u8_t*)(ipaddr))[2]) -#define ip4_addr4(ipaddr) (((u8_t*)(ipaddr))[3]) -#endif -/* These are cast to u16_t, with the intent that they are often arguments - * to printf using the U16_F format from cc.h. */ -#ifndef ip4_addr1_16 -#define ip4_addr1_16(ipaddr) ((u16_t)ip4_addr1(ipaddr)) -#define ip4_addr2_16(ipaddr) ((u16_t)ip4_addr2(ipaddr)) -#define ip4_addr3_16(ipaddr) ((u16_t)ip4_addr3(ipaddr)) -#define ip4_addr4_16(ipaddr) ((u16_t)ip4_addr4(ipaddr)) -#endif - -#undef IP2STR -#define IP2STR(ipaddr) ip4_addr1_16(ipaddr), \ - ip4_addr2_16(ipaddr), \ - ip4_addr3_16(ipaddr), \ - ip4_addr4_16(ipaddr) - -#undef IPSTR -#define IPSTR "%d.%d.%d.%d" - -#ifndef MAC2STR -#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] -#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" -#endif - - -#ifndef DEBUGSOO -/* CONFIG_DEBUG_LOG: -=0 Off all diag/debug msg, -=1 Only errors, -=2 errors + warning, (default) -=3 errors + warning + info, -=4 errors + warning + info + debug, -=5 full */ -#if CONFIG_DEBUG_LOG > 3 -#define DEBUGSOO (CONFIG_DEBUG_LOG - 1) -#elif CONFIG_DEBUG_LOG > 1 -#define DEBUGSOO 2 -#else -#define DEBUGSOO CONFIG_DEBUG_LOG -#endif -#endif //#ifndef DEBUGSOO - -//#define system_get_sdk_version() "3.5.3" - -//#define system_get_time xTaskGetTickCount -//#define ets_get_cpu_frequency HalGetCpuClk - - -#endif // _INCLUDE_ESP_COMP_H_ diff --git a/Firmware/RTLGDB/USDK/component/common/api/platform/platform_stdlib.h b/Firmware/RTLGDB/USDK/component/common/api/platform/platform_stdlib.h deleted file mode 100644 index 7a7f0fd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/platform/platform_stdlib.h +++ /dev/null @@ -1,289 +0,0 @@ -/****************************************************************************** - * Copyright (c) 2013-2016 Realtek Semiconductor Corp. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ -#ifndef __PLATFORM_STDLIB_H__ -#define __PLATFORM_STDLIB_H__ - -#define USE_CLIB_PATCH 0 -#if defined (__GNUC__) -/* build rom should set USE_RTL_ROM_CLIB=0 */ -#ifndef CONFIG_MBED_ENABLED -#include -#endif -#endif - -#ifdef CONFIG_BUILD_ROM -#define USE_RTL_ROM_CLIB 0 -#else -#define BUFFERED_PRINTF 0 -#ifndef CONFIG_MBED_ENABLED -#define USE_RTL_ROM_CLIB 1 -#else -#define USE_RTL_ROM_CLIB 0 -#endif -#endif - -#if defined(CONFIG_PLATFORM_8195A) -#if defined (__IARSTDLIB__) - #include - #include - #include - #include - #include "diag.h" - - #define strsep(str, delim) _strsep(str, delim) -#else - #include - #include - #include - #include "diag.h" - #include "strproc.h" - #include "basic_types.h" - #include "hal_misc.h" - #if USE_RTL_ROM_CLIB - #include "rtl_lib.h" - #endif - - #undef printf - #undef sprintf - #undef snprintf - #undef atoi - #undef memcmp - #undef memcpy - #undef memset - #undef strcmp - #undef strcpy - #undef strlen - #undef strncmp - #undef strncpy - #undef strsep - #undef strtok - #if USE_RTL_ROM_CLIB - #undef memchr - #undef memmove - #undef strcat - #undef strchr - #undef strncat - #undef strstr - #endif - - #if USE_RTL_ROM_CLIB -#if BUFFERED_PRINTF - extern int buffered_printf(const char* fmt, ...); - #define printf buffered_printf -#else - #define printf rtl_printf -#endif - #define sprintf rtl_sprintf - #define snprintf rtl_snprintf - #define memchr rtl_memchr - #define memcmp rtl_memcmp - #define memcpy rtl_memcpy - #define memmove rtl_memmove - #define memset rtl_memset - #define strcat rtl_strcat - #define strchr rtl_strchr - #define strcmp rtl_strcmp - #define strcpy rtl_strcpy - #define strlen rtl_strlen - #define strncat rtl_strncat - #define strncmp rtl_strncmp - #define strncpy rtl_strncpy - #define strstr rtl_strstr - #define strsep rtl_strsep - #define strtok rtl_strtok - #else - #if USE_CLIB_PATCH - extern int DiagSscanfPatch(const char *buf, const char *fmt, ...); - extern char* DiagStrtokPatch(char *str, const char* delim); - extern char* DiagStrstrPatch(char *string, char *substring); - extern int DiagSnPrintfPatch(char *buf, size_t size, const char *fmt, ...); - extern u32 DiagPrintfPatch(const char *fmt, ...); - extern u32 DiagSPrintfPatch(u8 *buf, const char *fmt, ...); - #define printf DiagPrintfPatch - #define sprintf DiagSPrintfPatch - #define snprintf DiagSnPrintfPatch - #define strstr(a, b) DiagStrstrPatch((char *)(a), (char *)(b)) - #define strtok DiagStrtokPatch - #else - #define printf DiagPrintf - #define sprintf(fmt, arg...) DiagSPrintf((u8*)fmt, ##arg) - #if defined (__GNUC__) - #define snprintf DiagSnPrintf // NULL function - #define strstr(str1, str2) prvStrStr(str1, str2) // NULL function - #endif - #define strtok(str, delim) _strsep(str, delim) - #endif - #define memcmp(dst, src, sz) _memcmp(dst, src, sz) - #define memcpy(dst, src, sz) _memcpy(dst, src, sz) - #define memset(dst, val, sz) _memset(dst, val, sz) - #define strchr(s, c) _strchr(s, c) // for B-cut ROM - #define strcmp(str1, str2) prvStrCmp((const unsigned char *) str1, (const unsigned char *) str2) - #define strcpy(dest, src) _strcpy(dest, src) - #define strlen(str) prvStrLen((const unsigned char *) str) - #define strncmp(str1, str2, cnt) _strncmp(str1, str2, cnt) - #define strncpy(dest, src, count) _strncpy(dest, src, count) - #define strsep(str, delim) _strsep(str, delim) - #endif - - #define atoi(str) prvAtoi(str) - #define strpbrk(cs, ct) _strpbrk(cs, ct) // for B-cut ROM - - #if USE_CLIB_PATCH - #undef sscanf - #define sscanf DiagSscanfPatch - #else - #if defined (__GNUC__) - #undef sscanf //_sscanf - //extern int DiagSscanfPatch(const char *buf, const char *fmt, ...); - //#define sscanf DiagSscanfPatch - #define sscanf sscanf // use libc sscanf - #endif - #endif -#endif // defined (__IARSTDLIB__) - -// -// memory management -// -#undef malloc -extern void *pvPortMalloc(size_t xWantedSize); -#define malloc pvPortMalloc - -#undef zalloc -extern void *pvPortZalloc(size_t xWantedSize); -#define zalloc pvPortZalloc - -#undef realloc -extern void *pvPortReAlloc(void *pv, size_t xWantedSize); -#define realloc pvPortReAlloc - -#undef free -extern void vPortFree(void *pv); -#define free vPortFree - -#elif defined (CONFIG_PLATFORM_8711B) - -#if defined (__IARSTDLIB__) - #include - #include - #include - #include - #include /* va_list */ - #include "diag.h" - - #define strsep(str, delim) _strsep(str, delim) -#else - #include - #include - #include - #include /* va_list */ - #include "diag.h" - #include "strproc.h" - #include "memproc.h" - #include "basic_types.h" -#if USE_RTL_ROM_CLIB - #include "rtl_lib.h" - #include "rom_libc_string.h" -#endif - - #undef printf - #undef sprintf - #undef snprintf - #undef memchr - #undef memcmp - #undef memcpy - #undef memset - #undef memmove - #undef strcmp - #undef strcpy - #undef strlen - #undef strncmp - #undef strncpy - #undef strsep - #undef strtok - #undef strcat - #undef strchr - #undef strncat - #undef strstr - #undef atol - #undef atoi - #undef strpbrk - -#if USE_RTL_ROM_CLIB -#if BUFFERED_PRINTF - extern int buffered_printf(const char* fmt, ...); - #define printf buffered_printf -#else - #define printf rtl_printf -#endif - #define sprintf rtl_sprintf - #define snprintf rtl_snprintf - #define vsnprintf rtl_vsnprintf -#else - #define printf DiagPrintf - #define sprintf(fmt, arg...) DiagSPrintf((u8*)fmt, ##arg) - #define snprintf DiagSnPrintf // NULL function - #define vsnprintf(buf, size, fmt, ap) VSprintf(buf, fmt, ap) -#endif - #define memchr __rtl_memchr_v1_00 - #define memcmp(dst, src, sz) _memcmp(dst, src, sz) - #define memcpy(dst, src, sz) _memcpy(dst, src, sz) - #define memmove __rtl_memmove_v1_00 - #define memset(dst, val, sz) _memset(dst, val, sz) - - #define strchr(s, c) _strchr(s, c) // for B-cut ROM - #define strcmp(str1, str2) prvStrCmp((const unsigned char *) str1, (const unsigned char *) str2) - #define strcpy(dest, src) _strcpy(dest, src) - #define strlen(str) prvStrLen((const unsigned char *) str) - #define strsep(str, delim) _strsep(str, delim) - #define strstr(str1, str2) prvStrStr(str1, str2) // NULL function - #define strtok(str, delim) prvStrtok(str, delim)//_strsep(str, delim) - #define strcat __rtl_strcat_v1_00 - - #define strncmp(str1, str2, cnt) _strncmp(str1, str2, cnt) - #define strncpy(dest, src, count) _strncpy(dest, src, count) - #define strncat __rtl_strncat_v1_00 - - #define atol(str) strtol(str,NULL,10) - #define atoi(str) prvAtoi(str) - #define strpbrk(cs, ct) _strpbrk(cs, ct) // for B-cut ROM -#if defined (__GNUC__) - #undef sscanf - #define sscanf _sscanf_patch - #define rand Rand -#endif - //extern int _sscanf_patch(const char *buf, const char *fmt, ...); - //#define sscanf _sscanf_patch - - -#endif // defined (__IARSTDLIB__) - -// -// memory management -// -extern void *pvPortMalloc( size_t xWantedSize ); -extern void vPortFree( void *pv ); -#define malloc pvPortMalloc -#define free vPortFree -#elif defined(USE_STM322xG_EVAL) || defined(USE_STM324xG_EVAL) || defined(STM32F10X_XL) - #include - #include - #include - #include -#endif - - -#endif //__PLATFORM_STDLIB_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/api/platform/stdlib_patch.c b/Firmware/RTLGDB/USDK/component/common/api/platform/stdlib_patch.c deleted file mode 100644 index b95fb86..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/platform/stdlib_patch.c +++ /dev/null @@ -1,915 +0,0 @@ -/* - - this is the c lib patch, It can help when the clib provided by IAR - does not work well. - - How to use this: - 1.You must include platform_stdlib.h in you source file。 - 2.There is a macro USE_CLIB_PATCH in platform_stdlib.h should be opened. - - If there is some problems using this patch, - You'd better check if you code runs into these functions: - - DiagSscanfPatch - DiagStrtokPatch - DiagStrstrPatch - DiagSnPrintfPatch - DiagPrintfPatch - DiagSPrintfPatch - DiagPrintfPatch - DiagSPrintfPatch - DiagSnPrintfPatch - DiagStrstrPatch - DiagStrtokPatch - - */ -#ifndef CONFIG_PLATFORM_8711B - -#include - -#define DiagPutChar HalSerialPutcRtl8195a - -#define IN -#define NULL 0 - -typedef unsigned int size_t; -typedef unsigned int SIZE_T; -typedef unsigned long long u64; -typedef unsigned int u32; -typedef unsigned short int u16; -typedef unsigned char u8; -typedef signed long long s64; -typedef signed int s32; -typedef signed short int s16; -typedef unsigned char bool; - - -extern u8 txt0123456789ABCDEF[16]; -#define tab0123456789ABCDEF txt0123456789ABCDEF // = "0123456789ABCDEF" - - -#define in_range(c, lo, up) ((u8)c >= lo && (u8)c <= up) -#define isprint(c) in_range(c, 0x20, 0x7f) -#define isdigit(c) in_range(c, '0', '9') -#define isxdigit(c) (isdigit(c) || in_range(c, 'a', 'f') || in_range(c, 'A', 'F')) -#define islower(c) in_range(c, 'a', 'z') -#define isspace(c) (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v' || c == ',') -#define ULLONG_MAX (~0ULL) -#define USHRT_MAX ((u16)(~0U)) -#define KSTRTOX_OVERFLOW (1U << 31) -#define SHRT_MAX ((s16)(USHRT_MAX>>1)) - -static inline char _tolower(const char c) -{ - return c | 0x20; -} - - -extern s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder); -extern s64 div_s64(s64 dividend, s32 divisor); -extern inline char _tolower(const char c); -extern u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder); -extern u64 div_u64(u64 dividend, u32 divisor); -extern unsigned int _parse_integer(const char *s, unsigned int base, unsigned long long *p); -extern const char *_parse_integer_fixup_radix(const char *s, unsigned int *base); -extern char *skip_spaces(const char *str); -extern int skip_atoi(const char **s); -extern void HalSerialPutcRtl8195a(u8 c); - - -static unsigned long long simple_strtoull_patch(const char *cp, char **endp, unsigned int base) -{ - unsigned long long result; - unsigned int rv; - - cp = _parse_integer_fixup_radix(cp, &base); - rv = _parse_integer(cp, base, &result); - - return result; -} - -static long long simple_strtoll_patch(const char *cp, char **endp, unsigned int base) -{ - if(*cp == '-') - return -simple_strtoull_patch(cp + 1, endp, base); - - return simple_strtoull_patch(cp, endp, base); -} -static unsigned long simple_strtoul_patch(const char *cp, char **endp, unsigned int base) -{ - return simple_strtoull_patch(cp, endp, base); -} - -static long simple_strtol_patch(const char *cp, char **endp, unsigned int base) -{ - if(*cp == '-') - return -simple_strtoul_patch(cp + 1, endp, base); - - return simple_strtoul_patch(cp, endp, base); -} - - - - -static int judge_digit_width(const char *str) -{ - - int width = 0; - - while(isdigit(*str)) { - width++; - str++; - } - - return width; -} - - -static int _vsscanf_patch(const char *buf, const char *fmt, va_list args) -{ - const char *str = buf; - char *next; - char digit; - int num = 0; - int i =0; - u8 qualifier; - unsigned int base; - union { - long long s; - unsigned long long u; - } val; - s16 field_width; - bool is_sign; - - char str_store[20] = {0}; - - - - while(*fmt) { - /* skip any white space in format */ - /* white space in format matchs any amount of - * white space, including none, in the input. - */ - if(isspace(*fmt)) { - fmt = skip_spaces(++fmt); - str = skip_spaces(str); - } - - /* anything that is not a conversion must match exactly */ - if(*fmt != '%' && *fmt) { - if(*fmt++ != *str++) { - break; - } - - continue; - } - - if(!*fmt) { - break; - } - - ++fmt; - - /* skip this conversion. - * advance both strings to next white space - */ - if(*fmt == '*') { - if(!*str) { - break; - } - - while(!isspace(*fmt) && *fmt != '%' && *fmt) - fmt++; - - while(!isspace(*str) && *str) - str++; - - continue; - } - - /* get field width */ - field_width = -1; - - if(isdigit(*fmt)) { - - field_width = skip_atoi(&fmt); - - - - if(field_width <= 0) { - - break; - } - } - - /* get conversion qualifier */ - qualifier = -1; - - if(*fmt == 'h' || _tolower(*fmt) == 'l' || - _tolower(*fmt) == 'z') { - qualifier = *fmt++; - - if(qualifier == *fmt) { - if(qualifier == 'h') { - qualifier = 'H'; - fmt++; - } else if(qualifier == 'l') { - qualifier = 'L'; - fmt++; - } - } - } - - if(!*fmt) { - break; - } - - if(*fmt == 'n') { - /* return number of characters read so far */ - *va_arg(args, int *) = str - buf; - ++fmt; - continue; - } - - if(!*str) { - break; - } - - base = 10; - is_sign = 0; - - switch(*fmt++) { - case 'c': { - char *s = (char *)va_arg(args, char*); - - if(field_width == -1) - field_width = 1; - - do { - *s++ = *str++; - } while(--field_width > 0 && *str); - - num++; - } - - continue; - - case 's': { - char *s = (char *)va_arg(args, char *); - - if(field_width == -1) - field_width = SHRT_MAX; - - /* first, skip leading white space in buffer */ - str = skip_spaces(str); - - /* now copy until next white space */ - while(*str && !isspace(*str) && field_width--) { - *s++ = *str++; - } - - *s = '\0'; - num++; - } - - continue; - - case 'o': - base = 8; - break; - - case 'x': - case 'X': - base = 16; - break; - - case 'i': - base = 0; - - case 'd': - is_sign = 1; - - case 'u': - break; - - case '%': - - /* looking for '%' in str */ - if(*str++ != '%') { - return num; - } - - continue; - - default: - /* invalid format; stop here */ - return num; - } - - /* have some sort of integer conversion. - * first, skip white space in buffer. - */ - str = skip_spaces(str); - - digit = *str; - - if(is_sign && digit == '-') - digit = *(str + 1); - - if(!digit - || (base == 16 && !isxdigit(digit)) - || (base == 10 && !isdigit(digit)) - || (base == 8 && (!isdigit(digit) || digit > '7')) - || (base == 0 && !isdigit(digit))) { - break; - } - - //here problem ******************************************* - - - - //troy add ,fix support %2d, but not support %d - if(field_width <= 0) { - - field_width = judge_digit_width(str); - } - - - /////troy add, fix str passed inwidth wrong - for(i = 0; i 0 && next - str > field_width) { - if(base == 0) - _parse_integer_fixup_radix(str, &base); - - while(next - str > field_width) { - if(is_sign) { - val.s = div_s64(val.s, base); - } else { - val.u = div_u64(val.u, base); - } - - --next; - } - } - - switch(qualifier) { - case 'H': /* that's 'hh' in format */ - if(is_sign) - *va_arg(args, signed char *) = val.s; - else - *va_arg(args, unsigned char *) = val.u; - - break; - - case 'h': - if(is_sign) - *va_arg(args, short *) = val.s; - else - *va_arg(args, unsigned short *) = val.u; - - break; - - case 'l': - if(is_sign) - *va_arg(args, long *) = val.s; - else - *va_arg(args, unsigned long *) = val.u; - - break; - - case 'L': - if(is_sign) - *va_arg(args, long long *) = val.s; - else - *va_arg(args, unsigned long long *) = val.u; - - break; - - case 'Z': - case 'z': - *va_arg(args, size_t *) = val.u; - break; - - default: - if(is_sign) - *va_arg(args, int *) = val.s; - else - *va_arg(args, unsigned int *) = val.u; - - break; - } - - num++; - - if(!next) { - break; - } - - str = next; - } - - return num; -} - - -int DiagSscanfPatch(const char *buf, const char *fmt, ...) -{ - va_list args; - int i; - - va_start(args, fmt); - i = _vsscanf_patch(buf, fmt, args); - va_end(args); - - return i; -} - - - -/*********************************************************/ - - - -char* DiagStrtokPatch(char *str, const char* delim) { - static char* _buffer; - - if(str != NULL) _buffer = str; - - if(_buffer[0] == '\0') return NULL; - - char *ret = _buffer, *b; - const char *d; - - for(b = _buffer; *b !='\0'; b++) { - for(d = delim; *d != '\0'; d++) { - if(*b == *d) { - *b = '\0'; - _buffer = b+1; - - // skip the beginning delimiters - if(b == ret) { - ret++; - continue; - } - - return ret; - } - } - } - - return ret; -} - - - -/*********************************************************/ - - - -char *DiagStrstrPatch(char *string, char *substring) -{ - register char *a, *b; - - /* First scan quickly through the two strings looking for a - * single-character match. When it's found, then compare the - * rest of the substring. - */ - - b = substring; - - if(*b == 0) { - return string; - } - - for(; *string != 0; string += 1) { - if(*string != *b) { - continue; - } - - a = string; - - while(1) { - if(*b == 0) { - return string; - } - - if(*a++ != *b++) { - break; - } - } - - b = substring; - } - - return (char *) 0; -} - - - - - -/*********************************************************/ - - - - -int DiagSnPrintfPatch(char *buf, size_t size, const char *fmt, ...) -{ - - va_list ap; - char *p, *s, *buf_end = NULL; - const int *dp = ((const int *)&fmt)+1; - - if(buf == NULL) - return 0; - - - va_start(ap, fmt); - s = buf; - buf_end = size? (buf + size):(char*)~0; - - for(; *fmt != '\0'; ++fmt) { - - if(*fmt != '%') { - *s++ = *fmt; - - if(s >= buf_end) { - goto Exit; - } - - continue; - } - - if(*++fmt == 's') { - for(p = (char *)*dp++; *p != '\0'; p++) { - *s++ = *p; - - if(s >= buf_end) { - goto Exit; - } - } - } - else { /* Length of item is bounded */ - char tmp[20], *q = tmp; - int alt = 0; - int shift = 0;// = 12; - const long *lpforchk = (const long *)dp; - - if((*lpforchk) < 0x10) { - shift = 0; - } - else if(((*lpforchk) >= 0x10) && ((*lpforchk) < 0x100)) { - shift = 4; - } - else if(((*lpforchk) >= 0x100) && ((*lpforchk) < 0x1000)) { - shift = 8; - } - else if(((*lpforchk) >= 0x1000) && ((*lpforchk) < 0x10000)) { - shift = 12; - } - else if(((*lpforchk) >= 0x10000) && ((*lpforchk) < 0x100000)) { - shift = 16; - } - else if(((*lpforchk) >= 0x100000) && ((*lpforchk) < 0x1000000)) { - shift = 20; - } - else if(((*lpforchk) >= 0x1000000) && ((*lpforchk) < 0x10000000)) { - shift = 24; - } - else if((*lpforchk) >= 0x10000000) { - shift = 28; - } - else { - shift = 28; - } - - if((*fmt >= '0') && (*fmt <= '9')) - { - int width; - unsigned char fch = *fmt; - - for(width=0; (fch>='0') && (fch<='9'); fch=*++fmt) - { width = width * 10 + fch - '0'; - } - - shift=(width-1)*4; - } - - /* - * Before each format q points to tmp buffer - * After each format q points past end of item - */ - if((*fmt == 'x')||(*fmt == 'X') || (*fmt == 'p') || (*fmt == 'P')) { - /* With x86 gcc, sizeof(long) == sizeof(int) */ - const long *lp = (const long *)dp; - long h = *lp++; - int hex_count = 0; - unsigned long h_back = h; - int ncase = (*fmt & 0x20); - dp = (const int *)lp; - - if((*fmt == 'p') || (*fmt == 'P')) - alt=1; - - if(alt) { - *q++ = '0'; - *q++ = 'X' | ncase; - } - - while(h_back) { - hex_count += (h_back & 0xF) ? 1 : 0; - h_back = h_back >> 4; - } - - if(shift < (hex_count - 1)*4) - shift = (hex_count - 1)*4; - - for(; shift >= 0; shift -= 4) - *q++ = tab0123456789ABCDEF[(h >> shift) & 0xF] | ncase; - } - else if(*fmt == 'd') { - int i = *dp++; - char *r; - int digit_space = 0; - - - if(i < 0) { - *q++ = '-'; - i = -i; - digit_space++; - } - - p = q; /* save beginning of digits */ - - - do { - *q++ = '0' + (i % 10); - i /= 10; - digit_space++; - } while(i); - - - for(; shift >= 0; shift -= 4) { - - if(digit_space-- > 0) { - ; //do nothing - } else { - *q++ = '0'; - } - } - - /* reverse digits, stop in middle */ - r = q; /* don't alter q */ - - while(--r > p) { - i = *r; - *r = *p; - *p++ = i; - } - } - else if(*fmt == 'c') - *q++ = *dp++; - else - *q++ = *fmt; - - /* now output the saved string */ - for(p = tmp; p < q; ++p) { - *s++ = *p; - - if(s >= buf_end) { - goto Exit; - } - } - } - } - -Exit: - - if(buf) - *s = '\0'; - - va_end(ap); - return(s-buf); - -} - -/*********************************************************/ - -static int VSprintfPatch(char *buf, const char *fmt, const int *dp) -{ - char *p, *s; - s = buf; - - for(; *fmt != '\0'; ++fmt) { - if(*fmt != '%') { - if(buf) { - *s++ = *fmt; - } else { - DiagPutChar(*fmt); - } - - continue; - } - - if(*++fmt == 's') { - for(p = (char *)*dp++; *p != '\0'; p++) { - if(buf) { - *s++ = *p; - } else { - DiagPutChar(*p); - } - } - } - else { /* Length of item is bounded */ - char tmp[20], *q = tmp; - int alt = 0; - int shift = 0;// = 12; - const long *lpforchk = (const long *)dp; - - if((*lpforchk) < 0x10) { - shift = 0; - } - else if(((*lpforchk) >= 0x10) && ((*lpforchk) < 0x100)) { - shift = 4; - } - else if(((*lpforchk) >= 0x100) && ((*lpforchk) < 0x1000)) { - shift = 8; - } - else if(((*lpforchk) >= 0x1000) && ((*lpforchk) < 0x10000)) { - shift = 12; - } - else if(((*lpforchk) >= 0x10000) && ((*lpforchk) < 0x100000)) { - shift = 16; - } - else if(((*lpforchk) >= 0x100000) && ((*lpforchk) < 0x1000000)) { - shift = 20; - } - else if(((*lpforchk) >= 0x1000000) && ((*lpforchk) < 0x10000000)) { - shift = 24; - } - else if((*lpforchk) >= 0x10000000) { - shift = 28; - } - else { - shift = 28; - } - -#if 1 //wei patch for %02x - - if((*fmt >= '0') && (*fmt <= '9')) - { - int width; - unsigned char fch = *fmt; - - for(width=0; (fch>='0') && (fch<='9'); fch=*++fmt) - { width = width * 10 + fch - '0'; - } - - shift=(width-1)*4; - } - -#endif - - /* - * Before each format q points to tmp buffer - * After each format q points past end of item - */ - - if((*fmt == 'x')||(*fmt == 'X') || (*fmt == 'p') || (*fmt == 'P')) { - /* With x86 gcc, sizeof(long) == sizeof(int) */ - const long *lp = (const long *)dp; - long h = *lp++; - int hex_count = 0; - unsigned long h_back = h; - int ncase = (*fmt & 0x20); - dp = (const int *)lp; - - if((*fmt == 'p') || (*fmt == 'P')) - alt=1; - - if(alt) { - *q++ = '0'; - *q++ = 'X' | ncase; - } - - //hback 是实际得到的数据,hex_count是统计数据的HEX字符个数 - while(h_back) { - hex_count += (h_back & 0xF) ? 1 : 0; - h_back = h_back >> 4; - } - - //这里修复 example: 字符有4个,但是用了%02x导致字符被截断的情况 - if(shift < (hex_count - 1)*4) - shift = (hex_count - 1)*4; - - //printf("(%d,%d)", hex_count, shift); - - for(; shift >= 0; shift -= 4) { - - *q++ = tab0123456789ABCDEF[(h >> shift) & 0xF] | ncase; - } - - } - else if(*fmt == 'd') { - int i = *dp++; - char *r; - int digit_space = 0; - - if(i < 0) { - *q++ = '-'; - i = -i; - digit_space++; - } - - p = q; /* save beginning of digits */ - - do { - *q++ = '0' + (i % 10); - i /= 10; - digit_space++; - } while(i); - - //这里修复 example:用了%08d后,在数字前面没有0的情况 - for(; shift >= 0; shift -= 4) { - - if(digit_space-- > 0) { - ; //do nothing - } else { - *q++ = '0'; - } - } - - /* reverse digits, stop in middle */ - r = q; /* don't alter q */ - - while(--r > p) { - i = *r; - *r = *p; - *p++ = i; - } - } - else if(*fmt == 'c') - *q++ = *dp++; - else - *q++ = *fmt; - - /* now output the saved string */ - for(p = tmp; p < q; ++p) { - if(buf) { - *s++ = *p; - } else { - DiagPutChar(*p); - } - - if((*p) == '\n') { - DiagPutChar('\r'); - } - } - } - } - - if(buf) - *s = '\0'; - - return (s - buf); -} - - -int DiagPrintfPatch( - IN const char *fmt, ... -) -{ - return VSprintfPatch(0, fmt, ((const int *)&fmt)+1); -} - -int DiagSPrintfPatch( - IN u8 *buf, - IN const char *fmt, ... -) -{ - return VSprintfPatch((char*)buf, fmt, ((const int *)&fmt)+1); -} -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/api/sdk_ver.h b/Firmware/RTLGDB/USDK/component/common/api/sdk_ver.h deleted file mode 100644 index 5211fd3..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/sdk_ver.h +++ /dev/null @@ -1,13 +0,0 @@ -/* - * sdk_ver.h - * - */ - -#ifndef _PLATFORM_SDK_VER_H_ -#define _PLATFORM_SDK_VER_H_ - -#define SDK_VER_NUM 0x40b2 - -#define SDK_VERSION "4.0.2" // 4.0b + 4.0b_patch_i2c_nonDNA_for_gcc(v01).zip - -#endif /* _PLATFORM_SDK_VER_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wowlan/dev_wowlan.c b/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wowlan/dev_wowlan.c deleted file mode 100644 index b458346..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wowlan/dev_wowlan.c +++ /dev/null @@ -1,149 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#define CONFIG_WOWLAN_DEV_NT96658 //build for Nova NT96658 -//#define CONFIG_WOWLAN_DEV_OV788 //build for OmniVision OV788 - -#if defined(CONFIG_WOWLAN_DEV_NT96658) && defined(CONFIG_WOWLAN_DEV_OV788) -#error "CONFIG_WOWLAN_DEV_NT96658 and CONFIG_WOWLAN_DEV_OV788 are mutually exclusive. " -#endif - -#ifdef CONFIG_WOWLAN_DEV_NT96658 -#define WOW_WIFI_IN_PIN PE_4 // JTAG pin, so JTAG must be disable before using this pin as wakeup pin -#define WOW_TRIGGER_INTERVAL 500 -#elif defined(CONFIG_WOWLAN_DEV_OV788) -#define WOW_WIFI_IN_PIN PD_5 -#define WOW_WLAN_ON_PIN PB_3 -#define WOW_TRIGGER_INTERVAL 200 -#else -#error "Either CONFIG_WOWLAN_DEV_NT96658 or CONFIG_WOWLAN_DEV_OV788 should be defined, but not both. " -#endif - -//pin assignment for SDIO, default pull high -#define SD_D2 PA_0 -#define SD_D3 PA_1 -#define SD_CMD PA_2 -#define SD_CLK PA_3 -#define SD_D0 PA_4 -#define SD_D1 PA_5 -#define SD_CD PA_6 - -gpio_t wow_gpio_wifi_in; //WOWLAN WAKEUP TRIGGER PORT -gpio_t wow_gpio_wlan_on; //RECORD WOWLAN STATUS: 1:OFF, 0:ON - -int dev_wowlan_init(void){ - WOWLAN_PRINTK("WOWLAN: device init!"); - -#ifdef CONFIG_WOWLAN_DEV_OV788 - // Initial WLAN_ON pin - gpio_init(&wow_gpio_wlan_on, WOW_WLAN_ON_PIN); - gpio_dir(&wow_gpio_wlan_on, PIN_OUTPUT); - gpio_mode(&wow_gpio_wlan_on, PullNone); - gpio_write(&wow_gpio_wlan_on, 1); -#endif - - return 0; -} - -int dev_wowlan_enable(void){ - WOWLAN_PRINTK("WOWLAN: device enable!"); - - // Init WIFI_IN pin (wakeup pin) - gpio_init(&wow_gpio_wifi_in, WOW_WIFI_IN_PIN); - gpio_dir(&wow_gpio_wifi_in, PIN_OUTPUT); - gpio_mode(&wow_gpio_wifi_in, PullNone); - gpio_write(&wow_gpio_wifi_in, 0); - -#ifdef CONFIG_WOWLAN_DEV_OV788 - gpio_write(&wow_gpio_wlan_on, 0); -#endif - -#if CONFIG_WLAN - wifi_set_power_mode(0xff, 1); -#endif - - return 0; -} - -int dev_wowlan_wakeup_process(void){ - WOWLAN_PRINTK("WOWLAN: device wake up!"); - -#if defined(CONFIG_WOWLAN_DEV_NT96658) || defined(CONFIG_WOWLAN_DEV_OV788) -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) - //acquire wakelock to keep system awake - acquire_wakelock(WAKELOCK_SDIO_DEVICE); -#endif -#endif - -#ifdef CONFIG_WOWLAN_DEV_OV788 - //record wowlan status - gpio_write(&wow_gpio_wlan_on, 1); -#endif - -#if defined(CONFIG_WOWLAN_DEV_NT96658) - //restore SDIO pin status for bus communication - pin_mode(SD_D0, PullUp); - pin_mode(SD_D1, PullUp); - pin_mode(SD_D2, PullUp); - pin_mode(SD_D3, PullUp); - pin_mode(SD_CMD, PullUp); - pin_mode(SD_CLK, PullDown); -#endif - - //send signal to awake host - gpio_write(&wow_gpio_wifi_in, 0); - wowlan_mdelay_os(WOW_TRIGGER_INTERVAL); - gpio_write(&wow_gpio_wifi_in, 1); - wowlan_mdelay_os(WOW_TRIGGER_INTERVAL); - gpio_write(&wow_gpio_wifi_in, 0); - wowlan_mdelay_os(WOW_TRIGGER_INTERVAL); - - return 0; -} - -int dev_wowlan_sleep_process(void){ - -#if defined(CONFIG_WOWLAN_DEV_NT96658) - //pull control for SDIO pin only when host is already power off - if(rtw_wowlan_is_enabled() && (rtw_wowlan_get_wk_reason() == 0)){ - WOWLAN_PRINTK("pull control"); - //configure SDIO pin status for avoiding current leakage - pin_mode(SD_D0, PullNone); - pin_mode(SD_D1, PullNone); - pin_mode(SD_D2, PullNone); - pin_mode(SD_D3, PullNone); - pin_mode(SD_CMD, PullNone); - pin_mode(SD_CLK, PullNone); - } -#endif - - return 0; -} - -int dev_wowlan_disable(void){ - WOWLAN_PRINTK("WOWLAN: device disable!"); - -#if CONFIG_WLAN - wifi_set_power_mode(0xff, 0); -#endif - -#ifdef CONFIG_WOWLAN_DEV_OV788 - gpio_write(&wow_gpio_wlan_on, 1); -#endif - - return 0; -} - -void dev_wowlan_ops_init(void *dev_ops){ - struct rtw_wowlan_ops *ops = (struct rtw_wowlan_ops *)dev_ops; - WOWLAN_PRINTK("WOWLAN: device ops init!"); - ops->DevWowlanInit = dev_wowlan_init; - ops->DevWowlanEnable = dev_wowlan_enable; - ops->DevWowlanDisable = dev_wowlan_disable; - ops->DevWowlanWakeUp = dev_wowlan_wakeup_process; - ops->DevWowlanSleep = dev_wowlan_sleep_process; -} diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wowlan/wifi_wowlan.h b/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wowlan/wifi_wowlan.h deleted file mode 100644 index 9e16edc..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wowlan/wifi_wowlan.h +++ /dev/null @@ -1,381 +0,0 @@ -#ifndef _WIFI_WOWLAN_H_ -#define _WIFI_WOWLAN_H_ - -#include -#include -#include -#include - -#define WOWLAN_DBG 1 - -enum{ - WOWLAN_DBG_OFF = 0, - WOWLAN_DBG_ALWAYS, - WOWLAN_DBG_ERROR, - WOWLAN_DBG_WARNING, - WOWLAN_DBG_INFO -}; - -#if WOWLAN_DBG - //#define WOWLAN_DUMP_MSG - #define WOWLAN_DUMP_MSG_1 //dump packet when setting - static unsigned char gWowlanDbgLevel = WOWLAN_DBG_ERROR; - #define WOWLAN_PRINTK(fmt, args...) printf(fmt"\r\n",## args) - #define _WOWLAN_PRINTK(fmt, args...) printf(fmt,## args) - #define WOWLAN_DBG_MSG(level, fmt, args...) \ - do{ \ - if(level <= gWowlanDbgLevel){ \ - WOWLAN_PRINTK(fmt,## args); \ - } \ - }while(0) -#else - #define WOWLAN_PRINTK(fmt, args...) - #define WOWLAN_DBG_MSG(level, fmt, args...) -#endif - -#ifndef uint8_t -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -#endif - -#ifndef BIT -#define BIT(x) ((uint32_t)1 << (x)) -#endif - -#ifndef le16_to_cpu //need a general definition for the whole system -#define cpu_to_le32(x) ((uint32_t)(x)) -#define le32_to_cpu(x) ((uint32_t)(x)) -#define cpu_to_le16(x) ((uint16_t)(x)) -#define le16_to_cpu(x) ((uint16_t)(x)) -#endif - -#ifndef IP_FMT -#define IP_FMT "%d.%d.%d.%d" -#endif - -#ifndef IP_ARG -#define IP_ARG(x) ((uint8_t*)(x))[0],((uint8_t*)(x))[1],((uint8_t*)(x))[2],((uint8_t*)(x))[3] -#endif - -#ifndef MAC_FMT -#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" -#endif - -#ifndef MAC_ARG -#define MAC_ARG(x) ((uint8_t*)(x))[0],((uint8_t*)(x))[1],((uint8_t*)(x))[2],((uint8_t*)(x))[3],((uint8_t*)(x))[4],((uint8_t*)(x))[5] -#endif - -#ifndef ETH_ALEN -#define ETH_ALEN 6 -#endif - -#ifndef ethhdr -struct ethhdr -{ - unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ - unsigned char h_source[ETH_ALEN]; /* source ether addr */ - unsigned short h_proto; /* packet type ID field */ -}; -#endif - -#ifndef wowlan_memcpy - #define wowlan_memcpy(d, s, n) rtw_memcpy((void*)(d), ((void*)(s)), (n)) -#endif - -#ifndef wowlan_malloc - #define wowlan_malloc(sz) rtw_malloc(sz) -#endif - -#ifndef wowlan_zmalloc - #define wowlan_zmalloc(sz) rtw_zmalloc(sz) -#endif - -#ifndef wowlan_memset - #define wowlan_memset(pbuf, c, sz) rtw_memset(pbuf, c, sz) -#endif - -#ifndef wowlan_mfree - #define wowlan_mfree(p, sz) rtw_mfree(((uint8_t*)(p)), (sz)) -#endif - -#ifndef wowlan_memcmp - #define wowlan_memcmp(s1, s2, n) rtw_memcmp(((void*)(s1)), ((void*)(s2)), (n)) -#endif - -#ifndef wowlan_mdelay_os - #define wowlan_mdelay_os(ms) rtw_mdelay_os(ms) -#endif - -/*Mutex services*/ -typedef _mutex _wowlock; - -__inline static void _init_wowlock(_wowlock *plock) -{ - rtw_mutex_init(plock); -} - -__inline static void _free_wowlock(_wowlock *plock) -{ - rtw_mutex_free(plock); -} - -__inline static void _enter_wowlock(_wowlock *plock) -{ - rtw_mutex_get(plock); -} - -__inline static void _exit_wowlock(_wowlock *plock) -{ - rtw_mutex_put(plock); -} - -/*Timer services*/ -typedef TimerHandle_t _wowTimer; -#define TMR_AUTO_RELOAD_EN _TRUE -#define TMR_AUTO_RELOAD_DIS _FALSE - -__inline static void -_wowlan_init_timer(_wowTimer *ptimer, void *adapter, TIMER_FUN pfunc,void* cntx, const char *name, uint32_t auto_reload) -{ - *ptimer = rtw_timerCreate( - (signed const char *)name, // Just a text name, not used by the RTOS kernel. - TIMER_MAX_DELAY, // Timer Period, not 0 - auto_reload, // Whether timer will auto-load themselves when expires - cntx, // Uniq id used to identify which timer expire.. - pfunc // Timer callback - ); -} - -__inline static void -_wowlan_set_timer(_wowTimer *ptimer, uint32_t delay_time_ms) -{ - if(rtw_timerChangePeriod(*ptimer, rtw_ms_to_systime(delay_time_ms), TIMER_MAX_DELAY) == _FAIL) - WOWLAN_PRINTK("Fail to set timer period"); -} - -__inline static void -_wowlan_cancel_timer(_wowTimer *ptimer) -{ - rtw_timerStop(*ptimer, TIMER_MAX_DELAY); -} - -__inline static void -_wowlan_del_timer(_wowTimer *ptimer) -{ - rtw_timerDelete(*ptimer, TIMER_MAX_DELAY); -} - -__inline static void * -_wowlan_get_timer_cntx(_wowTimer timer) -{ - return pvTimerGetTimerID(timer); -} - -enum rtw_wowlan_wakeup_reason { - RTW_WOWLAN_WAKEUP_BY_PATTERN = BIT(0), - RTW_WOWLAN_WAKEUP_BY_DISCONNECTION = BIT(1), - RTW_WOWLAN_WAKEUP_MAX = 0x7FFFFFFF -}; - -enum rtw_wowlan_cmd_id{ - RTW_WOWLAN_CMD_ENABLE = 0x01, // enable wowlan service - RTW_WOWLAN_CMD_PATTERNS = 0x02, // wowlan pattern setting - RTW_WOWLAN_CMD_PROT_OFFLOAD_CONFIG = 0x03, //ARP offload setting - RTW_WOWLAN_CMD_GET_STATUS = 0x04, // get rtw_wowlan_status - RTW_WOWLAN_CMD_CLEAR_ALL = 0x05, //clear wowlan content - RTW_WOWLAN_CMD_KEEPALIVE = 0x06, //for keep alive packet setting - RTW_WOWLAN_CMD_MAX = 0xff -}; - -#define RTW_WOWLAN_MAX_RX_FILTERS (5) -#define RTW_WOWLAN_RX_FILTER_MAX_FIELDS (8) -#define RTW_WOWLAN_ID_OFFSET (100) //to match some application, ID starts from 100 -#define RTW_WOWLAN_MIN_FILTERS_ID (RTW_WOWLAN_ID_OFFSET) -#define RTW_WOWLAN_MAX_FILTERS_ID (RTW_WOWLAN_ID_OFFSET+RTW_WOWLAN_MAX_RX_FILTERS-1) - -struct rtw_wowlan_rx_filter_field { - uint16_t offset; - uint8_t len; - uint8_t flags; - uint8_t *mask; - uint8_t *pattern; -}; - -struct rtw_wowlan_rx_filter { - uint8_t action; - uint8_t offset; - uint8_t num_fields; - struct rtw_wowlan_rx_filter_field fields[RTW_WOWLAN_RX_FILTER_MAX_FIELDS]; -}; - -#if defined(__IAR_SYSTEMS_ICC__) -#pragma pack(1) -#else -#error "this structure needs to be packed!" -#endif -struct rtw_wowlan_status { - uint32_t wakeup_reasons; //record wake up reason - uint32_t filter_id; //record which pattern is matched -}; -#if defined(__IAR_SYSTEMS_ICC__) -#pragma pack() -#else -#error "this structure needs to be packed!" -#endif - -/** - * struct rtw_wowlan_keepalive_packet - * - * @payload_len: data payload length - * @payload: data payload buffer - * @data_interval: interval at which to send data packets -**/ -#define RTW_WOWLAN_MAX_KPALIVE_PKT 3 -#define RTW_WOWLAN_MAX_KPALIVE_PKT_SZ 512 -struct rtw_wowlan_keepalive_packet{ - uint8_t packet_id; - int payload_len; - uint8_t *payload; - uint32_t data_interval; - _wowTimer keepalive_tmr; -}; - -struct rtw_wowlan_ops { - int (*DevWowlanInit)(void); - int (*DevWowlanEnable)(void); - int (*DevWowlanDisable)(void); - int (*DevWowlanWakeUp)(void); - int (*DevWowlanSleep)(void); -}; - -/** - * enum rtw_wowlan_proto_offloads - enabled protocol offloads - * @RTW_WOWLAN_PROTO_OFFLOAD_ARP: ARP data is enabled - */ -enum rtw_wowlan_proto_offloads { - RTW_WOWLAN_PROTO_OFFLOAD_ARP = BIT(0), - RTW_WOWLAN_PROTO_OFFLOAD_MAX = 0x7FFFFFFF -}; - -/** - * struct rtw_wowlan_proto_offload_common - ARP/NS offload common part - * @enabled: enable flags - * @remote_ipv4_addr: remote address to answer to (or zero if all) - * @host_ipv4_addr: our IPv4 address to respond to queries for - * @arp_mac_addr: our MAC address for ARP responses - * @reserved: unused - */ -struct rtw_wowlan_proto_offload_common{ - int proto_enabled; - uint32_t remote_ipv4_addr; - uint32_t host_ipv4_addr; - uint8_t host_mac_addr[ETH_ALEN]; - uint16_t reserved; -}; - -struct rtw_wowlan { - _wowlock wow_mutex; - bool enabled; - struct rtw_wowlan_status status; - struct rtw_wowlan_ops ops; - struct rtw_wowlan_proto_offload_common proto; - bool proto_offload_enabled; - struct rtw_wowlan_rx_filter *rx_filter[RTW_WOWLAN_MAX_RX_FILTERS]; - bool rx_filter_enabled[RTW_WOWLAN_MAX_RX_FILTERS];/* RX Data filter rule state - enabled/disabled */ - struct rtw_wowlan_keepalive_packet *tx_keepalive[RTW_WOWLAN_MAX_KPALIVE_PKT]; - bool tx_keepalive_enabled[RTW_WOWLAN_MAX_KPALIVE_PKT];/* TX keep avlive rule state - enabled/disabled */ -}; - -#define eqMacAddr(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 ) -#define cpMacAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5]) -#define cpIpAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3]) - -#define RTW_WOWLAN_GET_ARP_PKT_OPERATION(__pHeader) ReadEF2Byte( ((uint8_t*)(__pHeader)) + 6) -#define RTW_WOWLAN_GET_ARP_PKT_SENDER_MAC_ADDR(__pHeader, _val) cpMacAddr((uint8_t*)(_val), ((uint8_t*)(__pHeader))+8) -#define RTW_WOWLAN_GET_ARP_PKT_SENDER_IP_ADDR(__pHeader, _val) cpIpAddr((uint8_t*)(_val), ((uint8_t*)(__pHeader))+14) -#define RTW_WOWLAN_GET_ARP_PKT_TARGET_MAC_ADDR(__pHeader, _val) cpMacAddr((uint8_t*)(_val), ((uint8_t*)(__pHeader))+18) -#define RTW_WOWLAN_GET_ARP_PKT_TARGET_IP_ADDR(__pHeader, _val) cpIpAddr((uint8_t*)(_val), ((uint8_t*)(__pHeader))+24) - -#define RTW_WOWLAN_SET_ARP_PKT_HW(__pHeader, __Value) WriteEF2Byte( ((uint8_t*)(__pHeader)) + 0, __Value) -#define RTW_WOWLAN_SET_ARP_PKT_PROTOCOL(__pHeader, __Value) WriteEF2Byte( ((uint8_t*)(__pHeader)) + 2, __Value) -#define RTW_WOWLAN_SET_ARP_PKT_HW_ADDR_LEN(__pHeader, __Value) WriteEF1Byte( ((uint8_t*)(__pHeader)) + 4, __Value) -#define RTW_WOWLAN_SET_ARP_PKT_PROTOCOL_ADDR_LEN(__pHeader, __Value) WriteEF1Byte( ((uint8_t*)(__pHeader)) + 5, __Value) -#define RTW_WOWLAN_SET_ARP_PKT_OPERATION(__pHeader, __Value) WriteEF2Byte( ((uint8_t*)(__pHeader)) + 6, __Value) -#define RTW_WOWLAN_SET_ARP_PKT_SENDER_MAC_ADDR(__pHeader, _val) cpMacAddr(((uint8_t*)(__pHeader))+8, (uint8_t*)(_val)) -#define RTW_WOWLAN_SET_ARP_PKT_SENDER_IP_ADDR(__pHeader, _val) cpIpAddr(((uint8_t*)(__pHeader))+14, (uint8_t*)(_val)) -#define RTW_WOWLAN_SET_ARP_PKT_TARGET_MAC_ADDR(__pHeader, _val) cpMacAddr(((uint8_t*)(__pHeader))+18, (uint8_t*)(_val)) -#define RTW_WOWLAN_SET_ARP_PKT_TARGET_IP_ADDR(__pHeader, _val) cpIpAddr(((uint8_t*)(__pHeader))+24, (uint8_t*)(_val)) - -#define RTW_WOWLAN_ARP_PKT_LEN 0x2A -#define RTW_WOWLAN_ARP_PKT_OPERATION_REQ 0x0100 //arp request -#define RTW_WOWLAN_ARP_PKT_OPERATION_RSP 0x0200 //arp response - -extern uint8_t key_2char2num(uint8_t hch, uint8_t lch); -extern _LONG_CALL_ void __rtl_memDump_v1_00(const uint8_t *start, uint32_t size, char * strHeader); -#define rtw_wowlan_DumpForBytes(pData, Len) __rtl_memDump_v1_00(pData, Len, NULL) - -#define PWOWLAN_TO_STATUS(pwowlan) (&pwowlan->status) -#define PWOWLAN_TO_OPS(pwowlan) (&pwowlan->ops) -#define PWOWLAN_TO_PROTO(pwowlan) (&pwowlan->proto) -#define PWOWLAN_TO_RX_FILTER(pwowlan) (pwowlan->rx_filter) -#define PWOWLAN_TO_TX_KEEPALIVE(pwowlan) (pwowlan->tx_keepalive) - -/** - * rtw_wowlan_init: initialize wowlan service - * arg: None - * return: _SUCCESS or _FAIL - */ -extern int rtw_wowlan_init(void); - -/** - * cmd_wowlan_service: input commands to configure wowlan service - * arg: - * @argc: number of input parameter - * @argv: content of input string - * return: None - */ -extern void cmd_wowlan_service(int argc, char **argv); - -/** - * rtw_wowlan_process_rx_packet: entry for packet process in wowlan service once it starts - * arg: - * @rx_pkt: receive packet from wlan/ethernet - * @pkt_len: receive packet length - * return: _SUCCESS or _FAIL - */ -extern int rtw_wowlan_process_rx_packet(char *rx_pkt, uint16_t pkt_len); - -/** - * rtw_wowlan_wakeup_process: wake up process once the reasons are matched, - * refer to enum rtw_wowlan_wakeup_reason - * arg: - * @reason: wake up reason, refer to enum rtw_wowlan_wakeup_reason - * return: None - */ -extern void rtw_wowlan_wakeup_process(int reason); - -/** - * rtw_wowlan_is_enabled: if wowlan service is already enabled - * this function is called in rx path and wifi_inidication when wowlan service is running - * arg: None - * return: _True if enable or _False if disable - */ -extern int rtw_wowlan_is_enabled(void); - -/** - * rtw_wowlan_get_wk_reason: query wake up reason, refer to enum rtw_wowlan_wakeup_reason - * arg: None - * return: wakeup_reason - */ -extern int rtw_wowlan_get_wk_reason(void); - -/** - * rtw_wowlan_dev_sleep: sleep process on Ameba side, pull control for example - * this function is linked to dev_wowlan_sleep_process() in dev_wowlan.c - * arg: None - * return: None - */ -extern void rtw_wowlan_dev_sleep(void); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/src/utils/os.h b/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/src/utils/os.h deleted file mode 100644 index b6353ba..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/src/utils/os.h +++ /dev/null @@ -1,593 +0,0 @@ -/* - * OS specific functions - * Copyright (c) 2005-2009, Jouni Malinen - * - * This software may be distributed under the terms of the BSD license. - * See README for more details. - */ - -#ifndef OS_H -#define OS_H - -//#include "basic_types.h" -#include -#include "osdep_service.h" -#include "freertos/wrapper.h" -#include "utils/rom/rom_wps_os.h" - -typedef void* xqueue_handle_t; - -typedef long os_time_t; - -typedef _timer os_timer; - -/** - * os_sleep - Sleep (sec, usec) - * @sec: Number of seconds to sleep - * @usec: Number of microseconds to sleep - */ -void os_sleep(os_time_t sec, os_time_t usec); - -struct os_time { - os_time_t sec; - os_time_t usec; -}; - -struct os_reltime { - os_time_t sec; - os_time_t usec; -}; - -/** - * os_get_time - Get current time (sec, usec) - * @t: Pointer to buffer for the time - * Returns: 0 on success, -1 on failure - */ -int os_get_time(struct os_time *t); - -int os_get_reltime(struct os_reltime *t); -/* Helper macros for handling struct os_time */ -/* (&timeout->time, &tmp->time) */ -#define os_time_before(a, b) \ - ((a)->sec < (b)->sec || \ - ((a)->sec == (b)->sec && (a)->usec < (b)->usec)) - -#define os_time_sub(a, b, res) do { \ - (res)->sec = (a)->sec - (b)->sec; \ - (res)->usec = (a)->usec - (b)->usec; \ - if ((res)->usec < 0) { \ - (res)->sec--; \ - (res)->usec += 1000000; \ - } \ -} while (0) - -/** - * os_mktime - Convert broken-down time into seconds since 1970-01-01 - * @year: Four digit year - * @month: Month (1 .. 12) - * @day: Day of month (1 .. 31) - * @hour: Hour (0 .. 23) - * @min: Minute (0 .. 59) - * @sec: Second (0 .. 60) - * @t: Buffer for returning calendar time representation (seconds since - * 1970-01-01 00:00:00) - * Returns: 0 on success, -1 on failure - * - * Note: The result is in seconds from Epoch, i.e., in UTC, not in local time - * which is used by POSIX mktime(). - */ -int os_mktime(int year, int month, int day, int hour, int min, int sec, - os_time_t *t); - -struct os_tm { - int sec; /* 0..59 or 60 for leap seconds */ - int min; /* 0..59 */ - int hour; /* 0..23 */ - int day; /* 1..31 */ - int month; /* 1..12 */ - int year; /* Four digit year */ -}; - -int os_gmtime(os_time_t t, struct os_tm *tm); - -/* Helpers for handling struct os_time */ - -/* Helpers for handling struct os_reltime */ - -static inline int os_reltime_before(struct os_reltime *a, - struct os_reltime *b) -{ - return os_time_before(a,b); -} - - -static inline void os_reltime_sub(struct os_reltime *a, struct os_reltime *b, - struct os_reltime *res) -{ - os_time_sub(a,b,res); -} - - -static inline void os_reltime_age(struct os_reltime *start, - struct os_reltime *age) -{ - struct os_reltime now; - - os_get_time((struct os_time *)&now); - os_reltime_sub(&now, start, age); -} - - -static inline int os_reltime_expired(struct os_reltime *now, - struct os_reltime *ts, - os_time_t timeout_secs) -{ - struct os_reltime age; - - os_reltime_sub(now, ts, &age); - return (age.sec > timeout_secs) || - (age.sec == timeout_secs && age.usec > 0); -} - -/** - * os_daemonize - Run in the background (detach from the controlling terminal) - * @pid_file: File name to write the process ID to or %NULL to skip this - * Returns: 0 on success, -1 on failure - */ -int os_daemonize(const char *pid_file); - -/** - * os_daemonize_terminate - Stop running in the background (remove pid file) - * @pid_file: File name to write the process ID to or %NULL to skip this - */ -void os_daemonize_terminate(const char *pid_file); - -/** - * os_get_random - Get cryptographically strong pseudo random data - * @buf: Buffer for pseudo random data - * @len: Length of the buffer - * Returns: 0 on success, -1 on failure - */ -int os_get_random(unsigned char *buf, size_t len); - -/** - * os_random - Get pseudo random value (not necessarily very strong) - * Returns: Pseudo random value - */ -unsigned long os_random(void); - -/** - * os_rel2abs_path - Get an absolute path for a file - * @rel_path: Relative path to a file - * Returns: Absolute path for the file or %NULL on failure - * - * This function tries to convert a relative path of a file to an absolute path - * in order for the file to be found even if current working directory has - * changed. The returned value is allocated and caller is responsible for - * freeing it. It is acceptable to just return the same path in an allocated - * buffer, e.g., return strdup(rel_path). This function is only used to find - * configuration files when os_daemonize() may have changed the current working - * directory and relative path would be pointing to a different location. - */ -char * os_rel2abs_path(const char *rel_path); - -/** - * os_program_init - Program initialization (called at start) - * Returns: 0 on success, -1 on failure - * - * This function is called when a programs starts. If there are any OS specific - * processing that is needed, it can be placed here. It is also acceptable to - * just return 0 if not special processing is needed. - */ -int os_program_init(void); - -/** - * os_program_deinit - Program deinitialization (called just before exit) - * - * This function is called just before a program exists. If there are any OS - * specific processing, e.g., freeing resourced allocated in os_program_init(), - * it should be done here. It is also acceptable for this function to do - * nothing. - */ -void os_program_deinit(void); - -/** - * os_setenv - Set environment variable - * @name: Name of the variable - * @value: Value to set to the variable - * @overwrite: Whether existing variable should be overwritten - * Returns: 0 on success, -1 on error - * - * This function is only used for wpa_cli action scripts. OS wrapper does not - * need to implement this if such functionality is not needed. - */ -int os_setenv(const char *name, const char *value, int overwrite); - -/** - * os_unsetenv - Delete environent variable - * @name: Name of the variable - * Returns: 0 on success, -1 on error - * - * This function is only used for wpa_cli action scripts. OS wrapper does not - * need to implement this if such functionality is not needed. - */ -int os_unsetenv(const char *name); - -/** - * os_readfile - Read a file to an allocated memory buffer - * @name: Name of the file to read - * @len: For returning the length of the allocated buffer - * Returns: Pointer to the allocated buffer or %NULL on failure - * - * This function allocates memory and reads the given file to this buffer. Both - * binary and text files can be read with this function. The caller is - * responsible for freeing the returned buffer with os_free(). - */ -char * os_readfile(const char *name, size_t *len); - -//#if 0 -/** - * os_zalloc - Allocate and zero memory - * @size: Number of bytes to allocate - * Returns: Pointer to allocated and zeroed memory or %NULL on failure - * - * Caller is responsible for freeing the returned buffer with os_free(). - */ -void * os_zalloc(size_t size); - -/** - * os_calloc - Allocate and zero memory for an array - * @nmemb: Number of members in the array - * @size: Number of bytes in each member - * Returns: Pointer to allocated and zeroed memory or %NULL on failure - * - * This function can be used as a wrapper for os_zalloc(nmemb * size) when an - * allocation is used for an array. The main benefit over os_zalloc() is in - * having an extra check to catch integer overflows in multiplication. - * - * Caller is responsible for freeing the returned buffer with os_free(). - */ -static inline void * os_calloc(size_t nmemb, size_t size) -{ - if (size && nmemb > (~(size_t) 0) / size) - return NULL; - return os_zalloc(nmemb * size); -} -//#endif - - -static inline int os_memcmp_const(const void *a, const void *b, size_t len) -{ - const uint8_t *aa = a; - const uint8_t *bb = b; - size_t i; - uint8_t res; - - for (res = 0, i = 0; i < len; i++) - res |= aa[i] ^ bb[i]; - - return res; -} - -/* - * The following functions are wrapper for standard ANSI C or POSIX functions. - * By default, they are just defined to use the standard function name and no - * os_*.c implementation is needed for them. This avoids extra function calls - * by allowing the C pre-processor take care of the function name mapping. - * - * If the target system uses a C library that does not provide these functions, - * build_config.h can be used to define the wrappers to use a different - * function name. This can be done on function-by-function basis since the - * defines here are only used if build_config.h does not define the os_* name. - * If needed, os_*.c file can be used to implement the functions that are not - * included in the C library on the target system. Alternatively, - * OS_NO_C_LIB_DEFINES can be defined to skip all defines here in which case - * these functions need to be implemented in os_*.c file for the target system. - */ - -#ifdef OS_NO_C_LIB_DEFINES - -/** - * os_malloc - Allocate dynamic memory - * @size: Size of the buffer to allocate - * Returns: Allocated buffer or %NULL on failure - * - * Caller is responsible for freeing the returned buffer with os_free(). - */ -void * os_malloc(size_t size); - -/** - * os_realloc - Re-allocate dynamic memory - * @ptr: Old buffer from os_malloc() or os_realloc() - * @size: Size of the new buffer - * Returns: Allocated buffer or %NULL on failure - * - * Caller is responsible for freeing the returned buffer with os_free(). - * If re-allocation fails, %NULL is returned and the original buffer (ptr) is - * not freed and caller is still responsible for freeing it. - */ -void * os_realloc(void *ptr, size_t size); - -/** - * os_free - Free dynamic memory - * @ptr: Old buffer from os_malloc() or os_realloc(); can be %NULL - */ -void os_free(void *ptr); - -/** - * os_memcpy - Copy memory area - * @dest: Destination - * @src: Source - * @n: Number of bytes to copy - * Returns: dest - * - * The memory areas src and dst must not overlap. os_memmove() can be used with - * overlapping memory. - */ -void * os_memcpy(void *dest, const void *src, size_t n); - -/** - * os_memmove - Copy memory area - * @dest: Destination - * @src: Source - * @n: Number of bytes to copy - * Returns: dest - * - * The memory areas src and dst may overlap. - */ -void *os_memmove(void *dest, const void *src, size_t n); - -/** - * os_memset - Fill memory with a constant byte - * @s: Memory area to be filled - * @c: Constant byte - * @n: Number of bytes started from s to fill with c - * Returns: s - */ -void *os_memset(void *s, int c, size_t n); - -/** - * os_memcmp - Compare memory areas - * @s1: First buffer - * @s2: Second buffer - * @n: Maximum numbers of octets to compare - * Returns: An integer less than, equal to, or greater than zero if s1 is - * found to be less than, to match, or be greater than s2. Only first n - * characters will be compared. - */ -int os_memcmp(const void *s1, const void *s2, size_t n); - -/** - * os_strdup - Duplicate a string - * @s: Source string - * Returns: Allocated buffer with the string copied into it or %NULL on failure - * - * Caller is responsible for freeing the returned buffer with os_free(). - */ -char *os_strdup(const char *s); - -/** - * os_strlen - Calculate the length of a string - * @s: '\0' terminated string - * Returns: Number of characters in s (not counting the '\0' terminator) - */ -size_t os_strlen(const char *s); - -/** - * os_strcasecmp - Compare two strings ignoring case - * @s1: First string - * @s2: Second string - * Returns: An integer less than, equal to, or greater than zero if s1 is - * found to be less than, to match, or be greatred than s2 - */ -int os_strcasecmp(const char *s1, const char *s2); - -/** - * os_strncasecmp - Compare two strings ignoring case - * @s1: First string - * @s2: Second string - * @n: Maximum numbers of characters to compare - * Returns: An integer less than, equal to, or greater than zero if s1 is - * found to be less than, to match, or be greater than s2. Only first n - * characters will be compared. - */ -int os_strncasecmp(const char *s1, const char *s2, size_t n); - -/** - * os_strchr - Locate the first occurrence of a character in string - * @s: String - * @c: Character to search for - * Returns: Pointer to the matched character or %NULL if not found - */ -char *os_strchr(const char *s, int c); - -/** - * os_strrchr - Locate the last occurrence of a character in string - * @s: String - * @c: Character to search for - * Returns: Pointer to the matched character or %NULL if not found - */ -char *os_strrchr(const char *s, int c); - -/** - * os_strcmp - Compare two strings - * @s1: First string - * @s2: Second string - * Returns: An integer less than, equal to, or greater than zero if s1 is - * found to be less than, to match, or be greatred than s2 - */ -int os_strcmp(const char *s1, const char *s2); - -/** - * os_strncmp - Compare two strings - * @s1: First string - * @s2: Second string - * @n: Maximum numbers of characters to compare - * Returns: An integer less than, equal to, or greater than zero if s1 is - * found to be less than, to match, or be greater than s2. Only first n - * characters will be compared. - */ -int os_strncmp(const char *s1, const char *s2, size_t n); - -/** - * os_strncpy - Copy a string - * @dest: Destination - * @src: Source - * @n: Maximum number of characters to copy - * Returns: dest - */ -char *os_strncpy(char *dest, const char *src, size_t n); - -/** - * os_strstr - Locate a substring - * @haystack: String (haystack) to search from - * @needle: Needle to search from haystack - * Returns: Pointer to the beginning of the substring or %NULL if not found - */ -char *os_strstr(const char *haystack, const char *needle); - -/** - * os_snprintf - Print to a memory buffer - * @str: Memory buffer to print into - * @size: Maximum length of the str buffer - * @format: printf format - * Returns: Number of characters printed (not including trailing '\0'). - * - * If the output buffer is truncated, number of characters which would have - * been written is returned. Since some C libraries return -1 in such a case, - * the caller must be prepared on that value, too, to indicate truncation. - * - * Note: Some C library implementations of snprintf() may not guarantee null - * termination in case the output is truncated. The OS wrapper function of - * os_snprintf() should provide this guarantee, i.e., to null terminate the - * output buffer if a C library version of the function is used and if that - * function does not guarantee null termination. - * - * If the target system does not include snprintf(), see, e.g., - * http://www.ijs.si/software/snprintf/ for an example of a portable - * implementation of snprintf. - */ -int os_snprintf(char *str, size_t size, const char *format, ...); - -#else /* OS_NO_C_LIB_DEFINES */ - -#if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) -#ifdef CONFIG_MEM_MONITOR - uint8_t* os_malloc(uint32_t sz); - void os_mfree(uint8_t *pbuf, uint32_t sz); - #ifndef os_free - #define os_free(p, sz) os_mfree(((uint8_t*)(p)), (sz)) - #endif -#else - #ifndef os_malloc - #define os_malloc(sz) _rtw_malloc(sz) - #endif - #ifndef os_free - #define os_free(p, sz) _rtw_mfree(((uint8_t*)(p)), (sz)) - #endif -#endif -#endif - extern void *os_zalloc(size_t size); - extern char *os_strdup(const char *string_copy_from); - - #ifndef os_sleep - #define os_sleep(s, us) rtw_mdelay_os((s)*1000 + (us)/1000) - #endif - #ifndef os_memcpy - #define os_memcpy(d, s, n) rtw_memcpy((void*)(d), ((void*)(s)), (n)) - #endif - #ifndef os_memmove - #define os_memmove(d, s, n) memmove((d), (s), (n)) - #endif - #ifndef os_memset - #define os_memset(pbuf, c, sz) rtw_memset(pbuf, c, sz) - #endif - #ifndef os_memcmp - #define os_memcmp(s1, s2, n) rtw_memcmp(((void*)(s1)), ((void*)(s2)), (n)) - #endif - #ifndef os_memcmp_p2p - #define os_memcmp_p2p(s1, s2, n) memcmp((s1), (s2), (n)) - #endif - #ifndef os_get_random_bytes - #define os_get_random_bytes(d,sz) rtw_get_random_bytes(((void*)(d)), (sz)) - #endif - #ifndef os_strlen - #define os_strlen(s) strlen(s) - #endif - #ifndef os_strcasecmp - #ifdef _MSC_VER - #define os_strcasecmp(s1, s2) _stricmp((s1), (s2)) - #else - #define os_strcasecmp(s1, s2) strcasecmp((s1), (s2)) - #endif - #endif - #ifndef os_strncasecmp - #ifdef _MSC_VER - #define os_strncasecmp(s1, s2, n) _strnicmp((s1), (s2), (n)) - #else - #define os_strncasecmp(s1, s2, n) strncasecmp((s1), (s2), (n)) - #endif - #endif - #ifndef os_init_timer - #define os_init_timer(t, p, f, x, n) rtw_init_timer((t), (p), (f), (x), (n)) - #endif - #ifndef os_set_timer - #define os_set_timer(t, d) rtw_set_timer((t), (d)) - #endif - #ifndef os_cancel_timer - #define os_cancel_timer(t) rtw_cancel_timer(t) - #endif - #ifndef os_del_timer - #define os_del_timer(t) rtw_del_timer(t) - #endif - #ifndef os_atoi - #define os_atoi(s) rtw_atoi(s) - #endif - -#ifndef os_strchr -#define os_strchr(s, c) strchr((s), (c)) -#endif -#ifndef os_strcmp -#define os_strcmp(s1, s2) strcmp((s1), (s2)) -#endif -#ifndef os_strncmp -#define os_strncmp(s1, s2, n) strncmp((s1), (s2), (n)) -#endif -#ifndef os_strncpy -#define os_strncpy(d, s, n) strncpy((d), (s), (n)) -#endif -#ifndef os_strrchr -#define os_strrchr(s, c) strrchr((s), (c)) -#endif -#ifndef os_strstr -#define os_strstr(h, n) strstr((h), (n)) -#endif - -#ifndef os_snprintf - #ifdef _MSC_VER - #define os_snprintf _snprintf - #else - #define os_snprintf snprintf - #endif -#endif - -#endif /* OS_NO_C_LIB_DEFINES */ - - -static inline void * os_realloc_array(void *ptr, size_t nmemb, size_t size) -{ - if (size && nmemb > (~(size_t) 0) / size) - return NULL; - return os_realloc(ptr, nmemb * size, nmemb * size); -} - -void *os_xqueue_create(unsigned long uxQueueLength, unsigned long uxItemSize) ; - -int os_xqueue_receive(xqueue_handle_t xQueue, void * const pvBuffer, unsigned long xSecsToWait); - -void os_xqueue_delete(xqueue_handle_t xQueue ); - -int os_xqueue_send(xqueue_handle_t xQueue, const void * const pvItemToQueue, unsigned long xSecsToWait); - - -#endif /* OS_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/src/utils/os_freertos.c b/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/src/utils/os_freertos.c deleted file mode 100644 index 84c5fc9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/src/utils/os_freertos.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - * OS specific functions for UNIX/POSIX systems - * Copyright (c) 2005-2009, Jouni Malinen - * - * This software may be distributed under the terms of the BSD license. - * See README for more details. - */ -#include "utils/os.h" - -//#ifdef CONFIG_WPS - -#if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) -#ifdef CONFIG_MEM_MONITOR -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK -_list wpa_mem_table; -int wpa_mem_used_num; -//int wpa_mem_used_size; -#endif -extern int min_free_heap_size; -uint8_t* os_malloc(uint32_t sz) -{ - int free_heap_size = rtw_getFreeHeapSize(); - uint8_t *pbuf = _rtw_malloc(sz); -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK - add_mem_usage(&wpa_mem_table, pbuf, sz, &wpa_mem_used_num, MEM_MONITOR_FLAG_WPAS); -#else - add_mem_usage(NULL, pbuf, sz, NULL, MEM_MONITOR_FLAG_WPAS); -#endif - if(min_free_heap_size > free_heap_size) - min_free_heap_size = free_heap_size; - return pbuf; -} - -void os_mfree(uint8_t *pbuf, uint32_t sz) -{ - _rtw_mfree(pbuf, sz); -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK - del_mem_usage(&wpa_mem_table, pbuf, &wpa_mem_used_num, MEM_MONITOR_FLAG_WPAS); -#else - del_mem_usage(NULL, pbuf, NULL, MEM_MONITOR_FLAG_WPAS); -#endif -} -#endif//CONFIG_MEM_MONITOR - -#endif// !defined(CONFIG_PLATFORM_8195A) - -#ifndef OS_NO_C_LIB_DEFINES -char *os_strdup(const char *string_copy_from) -{ - char *string_copy_to = NULL; - string_copy_to = os_zalloc(strlen(string_copy_from) + 1); - os_memcpy((void *)string_copy_to, string_copy_from, strlen(string_copy_from)); - string_copy_to[strlen(string_copy_from)] = '\0'; - return string_copy_to; -} -#endif - -int os_get_random(unsigned char *buf, size_t len) -{ - //TODO implement it - rtw_get_random_bytes(buf, len); - return 0; -} - -int os_get_time(struct os_time *t){ - unsigned int tt = rtw_get_current_time(); - t->sec = (os_time_t) (tt / 1000); - t->usec = (os_time_t) (tt % 1000)*1000; - return 0; -} - -int os_get_reltime(struct os_reltime *t){ - os_get_time((struct os_time *)t); - return 0; -} -#if 0 -void *os_xqueue_create(unsigned long uxQueueLength, unsigned long uxItemSize) -{ - return xQueueCreate( uxQueueLength, uxItemSize ); -} - -int os_xqueue_receive(xqueue_handle_t xQueue, void * const pvBuffer, unsigned long xSecsToWait) -{ - return xQueueReceive((xQueueHandle)xQueue, pvBuffer, (portTickType)(xSecsToWait*configTICK_RATE_HZ)); -} - -void os_xqueue_delete(xqueue_handle_t xQueue ) -{ - vQueueDelete((xQueueHandle)xQueue); -} - -int os_xqueue_send(xqueue_handle_t xQueue, const void * const pvItemToQueue, unsigned long xSecsToWait) -{ - return xQueueSendToBack((xQueueHandle)xQueue, pvItemToQueue, (portTickType)(xSecsToWait*configTICK_RATE_HZ)); -} -#else -void *os_xqueue_create(unsigned long uxQueueLength, unsigned long uxItemSize) -{ - void* xQueue = NULL; - rtw_init_xqueue(&xQueue, "queue", uxItemSize, uxQueueLength); - return xQueue; -} - -int os_xqueue_receive(xqueue_handle_t xQueue, void * const pvBuffer, unsigned long xSecsToWait) -{ - return rtw_pop_from_xqueue(&xQueue, pvBuffer, xSecsToWait*1000); -} - -void os_xqueue_delete(xqueue_handle_t xQueue ) -{ - rtw_deinit_xqueue(&xQueue); -} - -int os_xqueue_send(xqueue_handle_t xQueue, const void * const pvItemToQueue, unsigned long xSecsToWait) -{ - return rtw_push_to_xqueue(&xQueue, (void*)pvItemToQueue, xSecsToWait*1000); -} -#endif -//#endif diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/src/utils/rom/rom_wps_os.h b/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/src/utils/rom/rom_wps_os.h deleted file mode 100644 index 5bb6da5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/src/utils/rom/rom_wps_os.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * OS specific functions - * Copyright (c) 2005-2009, Jouni Malinen - * - * This software may be distributed under the terms of the BSD license. - * See README for more details. - */ - -#ifndef ROM_WPS_OS_H -#define ROM_WPS_OS_H - -#if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) - -#include -extern struct _rom_wlan_ram_map rom_wlan_ram_map; -#define os_malloc(sz) rom_wlan_ram_map.rtw_malloc(sz) -#define os_free(p, sz) rom_wlan_ram_map.rtw_mfree(((uint8_t*)(p)), (sz)) - -#endif - -extern uint8_t *WPS_realloc(uint8_t *old_buf, uint32_t old_sz, uint32_t new_sz); -#define os_realloc(p, os, ns) WPS_realloc(((uint8_t*)(p)),(os),(ns)) - -#endif /* ROM_WPS_OS_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/src/wps/wps_defs.h b/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/src/wps/wps_defs.h deleted file mode 100644 index 4b408d1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/src/wps/wps_defs.h +++ /dev/null @@ -1,316 +0,0 @@ - -/* - * Wi-Fi Protected Setup - message definitions - * Copyright (c) 2008, Jouni Malinen - * - * This software may be distributed under the terms of the BSD license. - * See README for more details. - */ - -#ifndef WPS_DEFS_H -#define WPS_DEFS_H - -/* Diffie-Hellman 1536-bit MODP Group; RFC 3526, Group 5 */ -#define WPS_DH_GROUP (5) -#define WPS_UUID_LEN (16) -#define WPS_NONCE_LEN (16) -#define WPS_AUTHENTICATOR_LEN (8) -#define WPS_AUTHKEY_LEN (32) -#define WPS_KEYWRAPKEY_LEN (16) -#define WPS_EMSK_LEN (32) -#define WPS_PSK_LEN (16) -#define WPS_SECRET_NONCE_LEN (16) -#define WPS_HASH_LEN (32) -#define WPS_KWA_LEN (8) -#define WPS_MGMTAUTHKEY_LEN (32) -#define WPS_MGMTENCKEY_LEN (16) -#define WPS_MGMT_KEY_ID_LEN (16) -#define WPS_OOB_DEVICE_PASSWORD_MIN_LEN (16) -#define WPS_OOB_DEVICE_PASSWORD_LEN (32) -#define WPS_OOB_PUBKEY_HASH_LEN (20) - -/* Attribute Types */ -enum wps_attribute { - ATTR_AP_CHANNEL = 0x1001, - ATTR_ASSOC_STATE = 0x1002, - ATTR_AUTH_TYPE = 0x1003, - ATTR_AUTH_TYPE_FLAGS = 0x1004, - ATTR_AUTHENTICATOR = 0x1005, - ATTR_CONFIG_METHODS = 0x1008, - ATTR_CONFIG_ERROR = 0x1009, - ATTR_CONFIRM_URL4 = 0x100a, - ATTR_CONFIRM_URL6 = 0x100b, - ATTR_CONN_TYPE = 0x100c, - ATTR_CONN_TYPE_FLAGS = 0x100d, - ATTR_CRED = 0x100e, - ATTR_ENCR_TYPE = 0x100f, - ATTR_ENCR_TYPE_FLAGS = 0x1010, - ATTR_DEV_NAME = 0x1011, - ATTR_DEV_PASSWORD_ID = 0x1012, - ATTR_E_HASH1 = 0x1014, - ATTR_E_HASH2 = 0x1015, - ATTR_E_SNONCE1 = 0x1016, - ATTR_E_SNONCE2 = 0x1017, - ATTR_ENCR_SETTINGS = 0x1018, - ATTR_ENROLLEE_NONCE = 0x101a, - ATTR_FEATURE_ID = 0x101b, - ATTR_IDENTITY = 0x101c, - ATTR_IDENTITY_PROOF = 0x101d, - ATTR_KEY_WRAP_AUTH = 0x101e, - ATTR_KEY_ID = 0x101f, - ATTR_MAC_ADDR = 0x1020, - ATTR_MANUFACTURER = 0x1021, - ATTR_MSG_TYPE = 0x1022, - ATTR_MODEL_NAME = 0x1023, - ATTR_MODEL_NUMBER = 0x1024, - ATTR_NETWORK_INDEX = 0x1026, - ATTR_NETWORK_KEY = 0x1027, - ATTR_NETWORK_KEY_INDEX = 0x1028, - ATTR_NEW_DEVICE_NAME = 0x1029, - ATTR_NEW_PASSWORD = 0x102a, - ATTR_OOB_DEVICE_PASSWORD = 0x102c, - ATTR_OS_VERSION = 0x102d, - ATTR_POWER_LEVEL = 0x102f, - ATTR_PSK_CURRENT = 0x1030, - ATTR_PSK_MAX = 0x1031, - ATTR_PUBLIC_KEY = 0x1032, - ATTR_RADIO_ENABLE = 0x1033, - ATTR_REBOOT = 0x1034, - ATTR_REGISTRAR_CURRENT = 0x1035, - ATTR_REGISTRAR_ESTABLISHED = 0x1036, - ATTR_REGISTRAR_LIST = 0x1037, - ATTR_REGISTRAR_MAX = 0x1038, - ATTR_REGISTRAR_NONCE = 0x1039, - ATTR_REQUEST_TYPE = 0x103a, - ATTR_RESPONSE_TYPE = 0x103b, - ATTR_RF_BANDS = 0x103c, - ATTR_R_HASH1 = 0x103d, - ATTR_R_HASH2 = 0x103e, - ATTR_R_SNONCE1 = 0x103f, - ATTR_R_SNONCE2 = 0x1040, - ATTR_SELECTED_REGISTRAR = 0x1041, - ATTR_SERIAL_NUMBER = 0x1042, - ATTR_WPS_STATE = 0x1044, - ATTR_SSID = 0x1045, - ATTR_TOTAL_NETWORKS = 0x1046, - ATTR_UUID_E = 0x1047, - ATTR_UUID_R = 0x1048, - ATTR_VENDOR_EXT = 0x1049, - ATTR_VERSION = 0x104a, - ATTR_X509_CERT_REQ = 0x104b, - ATTR_X509_CERT = 0x104c, - ATTR_EAP_IDENTITY = 0x104d, - ATTR_MSG_COUNTER = 0x104e, - ATTR_PUBKEY_HASH = 0x104f, - ATTR_REKEY_KEY = 0x1050, - ATTR_KEY_LIFETIME = 0x1051, - ATTR_PERMITTED_CFG_METHODS = 0x1052, - ATTR_SELECTED_REGISTRAR_CONFIG_METHODS = 0x1053, - ATTR_PRIMARY_DEV_TYPE = 0x1054, - ATTR_SECONDARY_DEV_TYPE_LIST = 0x1055, - ATTR_PORTABLE_DEV = 0x1056, - ATTR_AP_SETUP_LOCKED = 0x1057, - ATTR_APPLICATION_EXT = 0x1058, - ATTR_EAP_TYPE = 0x1059, - ATTR_IV = 0x1060, - ATTR_KEY_PROVIDED_AUTO = 0x1061, - ATTR_802_1X_ENABLED = 0x1062, - ATTR_APPSESSIONKEY = 0x1063, - ATTR_WEPTRANSMITKEY = 0x1064, - ATTR_REQUESTED_DEV_TYPE = 0x106a, - ATTR_EXTENSIBILITY_TEST = 0x10fa /* _NOT_ defined in the spec */ -}; - -#define WPS_VENDOR_ID_WFA 14122 - -/* WFA Vendor Extension subelements */ -enum { - WFA_ELEM_VERSION2 = 0x00, - WFA_ELEM_AUTHORIZEDMACS = 0x01, - WFA_ELEM_NETWORK_KEY_SHAREABLE = 0x02, - WFA_ELEM_REQUEST_TO_ENROLL = 0x03, - WFA_ELEM_SETTINGS_DELAY_TIME = 0x04 -}; - -/* Device Password ID */ -enum wps_dev_password_id { - DEV_PW_DEFAULT = 0x0000, - DEV_PW_USER_SPECIFIED = 0x0001, - DEV_PW_MACHINE_SPECIFIED = 0x0002, - DEV_PW_REKEY = 0x0003, - DEV_PW_PUSHBUTTON = 0x0004, - DEV_PW_REGISTRAR_SPECIFIED = 0x0005 -}; - -/* Message Type */ -enum wps_msg_type { - WPS_START = 0x00, - WPS_Beacon = 0x01, - WPS_ProbeRequest = 0x02, - WPS_ProbeResponse = 0x03, - WPS_M1 = 0x04, - WPS_M2 = 0x05, - WPS_M2D = 0x06, - WPS_M3 = 0x07, - WPS_M4 = 0x08, - WPS_M5 = 0x09, - WPS_M6 = 0x0a, - WPS_M7 = 0x0b, - WPS_M8 = 0x0c, - WPS_WSC_ACK = 0x0d, - WPS_WSC_NACK = 0x0e, - WPS_WSC_DONE = 0x0f -}; - -/* Authentication Type Flags */ -#define WPS_AUTH_OPEN 0x0001 -#define WPS_AUTH_WPAPSK 0x0002 -#define WPS_AUTH_SHARED 0x0004 -#define WPS_AUTH_WPA 0x0008 -#define WPS_AUTH_WPA2 0x0010 -#define WPS_AUTH_WPA2PSK 0x0020 -#define WPS_AUTH_TYPES (WPS_AUTH_OPEN | WPS_AUTH_WPAPSK | WPS_AUTH_SHARED | \ - WPS_AUTH_WPA | WPS_AUTH_WPA2 | WPS_AUTH_WPA2PSK) - -/* Encryption Type Flags */ -#define WPS_ENCR_NONE 0x0001 -#define WPS_ENCR_WEP 0x0002 -#define WPS_ENCR_TKIP 0x0004 -#define WPS_ENCR_AES 0x0008 -#define WPS_ENCR_TYPES (WPS_ENCR_NONE | WPS_ENCR_WEP | WPS_ENCR_TKIP | \ - WPS_ENCR_AES) - -/* Configuration Error */ -enum wps_config_error { - WPS_CFG_NO_ERROR = 0, - WPS_CFG_OOB_IFACE_READ_ERROR = 1, - WPS_CFG_DECRYPTION_CRC_FAILURE = 2, - WPS_CFG_24_CHAN_NOT_SUPPORTED = 3, - WPS_CFG_50_CHAN_NOT_SUPPORTED = 4, - WPS_CFG_SIGNAL_TOO_WEAK = 5, - WPS_CFG_NETWORK_AUTH_FAILURE = 6, - WPS_CFG_NETWORK_ASSOC_FAILURE = 7, - WPS_CFG_NO_DHCP_RESPONSE = 8, - WPS_CFG_FAILED_DHCP_CONFIG = 9, - WPS_CFG_IP_ADDR_CONFLICT = 10, - WPS_CFG_NO_CONN_TO_REGISTRAR = 11, - WPS_CFG_MULTIPLE_PBC_DETECTED = 12, - WPS_CFG_ROGUE_SUSPECTED = 13, - WPS_CFG_DEVICE_BUSY = 14, - WPS_CFG_SETUP_LOCKED = 15, - WPS_CFG_MSG_TIMEOUT = 16, - WPS_CFG_REG_SESS_TIMEOUT = 17, - WPS_CFG_DEV_PASSWORD_AUTH_FAILURE = 18 -}; - -/* RF Bands */ -#define WPS_RF_24GHZ (0x01) -#define WPS_RF_50GHZ (0x02) - -/* Config Methods */ -#define WPS_CONFIG_USBA (0x0001) -#define WPS_CONFIG_ETHERNET (0x0002) -#define WPS_CONFIG_LABEL (0x0004) -#define WPS_CONFIG_DISPLAY (0x0008) -#define WPS_CONFIG_EXT_NFC_TOKEN (0x0010) -#define WPS_CONFIG_INT_NFC_TOKEN (0x0020) -#define WPS_CONFIG_NFC_INTERFACE (0x0040) -#define WPS_CONFIG_PUSHBUTTON (0x0080) -#define WPS_CONFIG_KEYPAD (0x0100) - -#ifdef CONFIG_WPS2 -#define WPS_CONFIG_VIRT_PUSHBUTTON (0x0280) -#define WPS_CONFIG_PHY_PUSHBUTTON (0x0480) -#define WPS_CONFIG_VIRT_DISPLAY (0x2008) -#define WPS_CONFIG_PHY_DISPLAY (0x4008) -#endif /* CONFIG_WPS2 */ - -/* Connection Type Flags */ -#define WPS_CONN_ESS (0x01) -#define WPS_CONN_IBSS (0x02) - -/* Wi-Fi Protected Setup State */ -enum wps_state { - WPS_STATE_NOT_CONFIGURED = 1, - WPS_STATE_CONFIGURED = 2 -}; - -/* Association State */ -enum wps_assoc_state { - WPS_ASSOC_NOT_ASSOC = 0, - WPS_ASSOC_CONN_SUCCESS = 1, - WPS_ASSOC_CFG_FAILURE = 2, - WPS_ASSOC_FAILURE = 3, - WPS_ASSOC_IP_FAILURE = 4 -}; - -#define WPS_DEV_OUI_WFA (0x0050f204) - -enum wps_dev_categ { - WPS_DEV_COMPUTER = 1, - WPS_DEV_INPUT = 2, - WPS_DEV_PRINTER = 3, - WPS_DEV_CAMERA = 4, - WPS_DEV_STORAGE = 5, - WPS_DEV_NETWORK_INFRA = 6, - WPS_DEV_DISPLAY = 7, - WPS_DEV_MULTIMEDIA = 8, - WPS_DEV_GAMING = 9, - WPS_DEV_PHONE = 10 -}; - -enum wps_dev_subcateg { - WPS_DEV_COMPUTER_PC = 1, - WPS_DEV_COMPUTER_SERVER = 2, - WPS_DEV_COMPUTER_MEDIA_CENTER = 3, - - WPS_DEV_PRINTER_PRINTER = 1, - WPS_DEV_PRINTER_SCANNER = 2, - - WPS_DEV_CAMERA_DIGITAL_STILL_CAMERA = 1, - - WPS_DEV_STORAGE_NAS = 1, - - WPS_DEV_NETWORK_INFRA_AP = 1, - WPS_DEV_NETWORK_INFRA_ROUTER = 2, - WPS_DEV_NETWORK_INFRA_SWITCH = 3, - - WPS_DEV_DISPLAY_TV = 1, - WPS_DEV_DISPLAY_PICTURE_FRAME = 2, - WPS_DEV_DISPLAY_PROJECTOR = 3, - - WPS_DEV_MULTIMEDIA_DAR = 1, - WPS_DEV_MULTIMEDIA_PVR = 2, - WPS_DEV_MULTIMEDIA_MCX = 3, - - WPS_DEV_GAMING_XBOX = 1, - WPS_DEV_GAMING_XBOX360 = 2, - WPS_DEV_GAMING_PLAYSTATION = 3, - - WPS_DEV_PHONE_WINDOWS_MOBILE = 1 -}; - - -/* Request Type */ -enum wps_request_type { - WPS_REQ_ENROLLEE_INFO = 0, - WPS_REQ_ENROLLEE = 1, - WPS_REQ_REGISTRAR = 2, - WPS_REQ_WLAN_MANAGER_REGISTRAR = 3 -}; - -/* Response Type */ -enum wps_response_type { - WPS_RESP_ENROLLEE_INFO = 0, - WPS_RESP_ENROLLEE = 1, - WPS_RESP_REGISTRAR = 2, - WPS_RESP_AP = 3 -}; - -/* Walk Time for push button configuration (in seconds) */ -#define WPS_PBC_WALK_TIME (120) - -#define WPS_MAX_AUTHORIZED_MACS (5) - -#endif /* WPS_DEFS_H */ - diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_eap_config.c b/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_eap_config.c deleted file mode 100644 index 59f34c9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_eap_config.c +++ /dev/null @@ -1,476 +0,0 @@ -#include -#include -#include -#include "FreeRTOS.h" -#include "task.h" -#include "main.h" -#include "queue.h" -#include "utils/os.h" -#include -#include -#include "wifi/wifi_conf.h" -#include -#ifdef CONFIG_ENABLE_EAP -#include -#include -#endif - -#define WLAN0_NAME "wlan0" -#ifndef ENABLE -#define ENABLE (1) -#endif -#ifndef DISABLE -#define DISABLE (0) -#endif - -#ifndef CONFIG_ENABLE_EAP -int get_eap_phase(void){ - return 0; -} - -int get_eap_method(void){ - return 0; -} - -void eap_autoreconnect_hdl(uint8_t method_id) -{ - (void) method_id; -} -#else - -uint8_t eap_phase = 0; -uint8_t eap_method = 0; - -// eap config arguments -char *eap_target_ssid = NULL; -char *eap_identity = NULL; -char *eap_password = NULL; -// if set eap_ca_cert and defined(EAP_SSL_VERIFY_SERVER), client will verify server's cert -const unsigned char *eap_ca_cert = NULL; -// if set eap_client_cert, eap_client_key, and defined(EAP_SSL_VERIFY_CLIENT), client will send its cert to server -const unsigned char *eap_client_cert = NULL; -const unsigned char *eap_client_key = NULL; -char *eap_client_key_pwd = NULL; - -//int max_buf_bio_size = SSL_BUFFER_LEN; // ?pvvx? - -#ifdef CONFIG_ENABLE_EAP -void eap_eapol_recvd_hdl(char *buf, int buf_len, int flags, void* handler_user_data); -void eap_eapol_start_hdl(char *buf, int buf_len, int flags, void* handler_user_data); -#endif - - -int get_eap_phase(void){ - return eap_phase; -} - -int get_eap_method(void){ - return eap_method; -} - -void set_eap_phase(unsigned char is_trigger_eap){ - eap_phase = is_trigger_eap; -} - -void reset_config(void){ - eap_target_ssid = NULL; - eap_identity = NULL; - eap_password = NULL; - eap_ca_cert = NULL; - eap_client_cert = NULL; - eap_client_key = NULL; - eap_client_key_pwd = NULL; -} - -#ifdef CONFIG_ENABLE_EAP - -void judge_station_disconnect(void) -{ - int mode = 0; - unsigned char ssid[33]; - - wext_get_mode(WLAN0_NAME, &mode); - - switch(mode) { - case IW_MODE_MASTER: //In AP mode - wifi_off(); - vTaskDelay(20); - wifi_on(RTW_MODE_STA); - break; - case IW_MODE_INFRA: //In STA mode - if(wext_get_ssid(WLAN0_NAME, ssid) > 0) - wifi_disconnect(); - } -} - -void eap_disconnected_hdl(char *buf, int buf_len, int flags, void* handler_user_data){ -// printf("disconnected\n"); - wifi_unreg_event_handler(WIFI_EVENT_EAPOL_RECVD, eap_eapol_recvd_hdl); - wifi_unreg_event_handler(WIFI_EVENT_DISCONNECT, eap_disconnected_hdl); - eap_peer_unregister_methods(); - eap_sm_deinit(); - //reset_config(); -} -#endif -/* -void eap_config(void){ - eap_target_ssid = "Test_eap"; - eap_identity = "guest2"; - eap_password = "test2"; - - eap_client_cert = \ -"-----BEGIN CERTIFICATE-----\r\n" \ -"MIIC9zCCAd8CAQMwDQYJKoZIhvcNAQEEBQAwgZMxCzAJBgNVBAYTAkZSMQ8wDQYD\r\n" \ -"VQQIEwZSYWRpdXMxEjAQBgNVBAcTCVNvbWV3aGVyZTEVMBMGA1UEChMMRXhhbXBs\r\n" \ -"ZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNvbTEmMCQGA1UE\r\n" \ -"AxMdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTYwMzE1MDgwNzEx\r\n" \ -"WhcNMTcwMzE1MDgwNzExWjBzMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGUmFkaXVz\r\n" \ -"MRUwEwYDVQQKEwxFeGFtcGxlIEluYy4xGjAYBgNVBAMUEXVzZXIyQGV4YW1wbGUu\r\n" \ -"Y29tMSAwHgYJKoZIhvcNAQkBFhF1c2VyMkBleGFtcGxlLmNvbTCBnzANBgkqhkiG\r\n" \ -"9w0BAQEFAAOBjQAwgYkCgYEAqESlV4OYfBcIgZ+Cs8mWpiBjhvKoa0/kIe7saqhC\r\n" \ -"e5q4snox0jdkUpLcc4vOs3vQ7ZGnimqTltA9oF6XNUzTWW4vlJTKEfrCWK085l7c\r\n" \ -"DHFvHavH3E6vuP71lI7jq4PLXbo2TvZK+uBul4ozjzVWihaZBtz8eLHq446h/D/p\r\n" \ -"kzkCAwEAATANBgkqhkiG9w0BAQQFAAOCAQEAAfhVAIkNdeeUNJud720uUHVnIcxz\r\n" \ -"GXWI+Svi1qchuTEnRNhLwXmnE+A0WWSHyfdR6FvzdT3xtz3K50iOif8jY2gCGkSK\r\n" \ -"8RjKr97228SwbrGO9y9+dYIjH1uz9cBpoVKcpzdsWpKObrDPDYyReHSWo99jM2+O\r\n" \ -"vfJxnBw4PLiBj7Q0/dpd6o4JXyp7Cxa0mB4/+cZqjCzzuKfuK3WP7j6laMCV6mg4\r\n" \ -"wRZ528IdwDqB7OOqsDm1PVQM8vzny9PM6ikWUCRTVNQJN8RDLkrHR3FRjy15YLdt\r\n" \ -"yOfDqVnT/z0wGBaxnNziSJjqPGHPpRi4bJFGXwXOhtknKmciKzfj9/npoQ==\r\n" \ -"-----END CERTIFICATE-----\r\n"; - - eap_client_key = \ -"-----BEGIN RSA PRIVATE KEY-----\r\n" \ -"MIICXQIBAAKBgQCoRKVXg5h8FwiBn4KzyZamIGOG8qhrT+Qh7uxqqEJ7mriyejHS\r\n" \ -"N2RSktxzi86ze9DtkaeKapOW0D2gXpc1TNNZbi+UlMoR+sJYrTzmXtwMcW8dq8fc\r\n" \ -"Tq+4/vWUjuOrg8tdujZO9kr64G6XijOPNVaKFpkG3Px4serjjqH8P+mTOQIDAQAB\r\n" \ -"AoGARI+LyweshssfxSkIKVc3EcNaqi6PHwJzUrw2ChM624AkR1xwllXJg7ehKVdK\r\n" \ -"xmjprRLO8CASuL1qjsBb3fTKnBl+sIVxIFS0AI4Y3ri8VUKbangvSsI7pCzAFry7\r\n" \ -"p1gmy9WWRV2ZEa+dV8xcrjb3bloT7hcdeLehgBCvExJIQM0CQQDXlSAKdW3AhYyj\r\n" \ -"1A+pfyBSGxJbpSwNyyWgwHIHHjxendxmdUbrc8EbAu1eNKbP58TLgdCZsKcMonAv\r\n" \ -"MY1Y2/nnAkEAx9CrUaCU8pJqXTRypM5JtexLKnYMJhpnA9uUILBQOq4Oe0eruyF5\r\n" \ -"SaSxhyJYXY491ahWYPF0PTb3jkUhoN+l3wJBAJZthjgGDJlEFwjSFkOtYz4nib3N\r\n" \ -"GVpeoFj1MBvrazCScpJDz0LIOLzCZCNSFfwIu3dNk+NKMqZMSn+D0h9pD40CQQC5\r\n" \ -"K9n4NXaTLbjAU2CC9mE85JPr76XmkcUxwAWQHZTcLH1jJdIyAx1hb+zNLLjzSmRn\r\n" \ -"Yi9ae6ibKhtUjyBQ87HFAkA2Bb3z7NUx+AA2g2HZocFZFShBxylACyQkl8FAFZtf\r\n" \ -"osudmKdFQHyAWuBMex4tpz/OLTqJ1ecL1JQeC7OvlpEX\r\n" \ -"-----END RSA PRIVATE KEY-----\r\n"; - - eap_ca_cert = \ -"-----BEGIN CERTIFICATE-----\r\n" \ -"MIIEpzCCA4+gAwIBAgIJAPvZaozpdfjkMA0GCSqGSIb3DQEBCwUAMIGTMQswCQYD\r\n" \ -"VQQGEwJGUjEPMA0GA1UECBMGUmFkaXVzMRIwEAYDVQQHEwlTb21ld2hlcmUxFTAT\r\n" \ -"BgNVBAoTDEV4YW1wbGUgSW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBs\r\n" \ -"ZS5jb20xJjAkBgNVBAMTHUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4X\r\n" \ -"DTE2MDMxNDExMjU0OVoXDTE2MDQxMzExMjU0OVowgZMxCzAJBgNVBAYTAkZSMQ8w\r\n" \ -"DQYDVQQIEwZSYWRpdXMxEjAQBgNVBAcTCVNvbWV3aGVyZTEVMBMGA1UEChMMRXhh\r\n" \ -"bXBsZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNvbTEmMCQG\r\n" \ -"A1UEAxMdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqGSIb3\r\n" \ -"DQEBAQUAA4IBDwAwggEKAoIBAQC9pireu0aCDLNfMaGv3vId7RXjUhQwSK0jV2Oc\r\n" \ -"SyvlKWH3P/N+5kLrP2iL6SCzyETVDXZ0vOsAMjcBF0zHp16prXV0d51cTUqeWBb0\r\n" \ -"I5UnGxleIuuOfSg8zLUJoBWZPqLv++eZ5WgOKHt7SXocjvg7TU5t/TMB0Y8OCz3H\r\n" \ -"CW2vJ/XKMgMA9HDUu4g57cJu88i1JPRpyFaz/HIQBc7+UNb9z+q09uTZKWTmEMqi\r\n" \ -"E2U0EEIs7EtbxnOze1/8C4XNlmztrEdwvu6UEBU/TFkUoh9M646NkkBK7wP9n9pv\r\n" \ -"T0nPQRJiiCrICzVqUtlEi9lIKpbBSMbQ0KzrGF7lGTgm4rz9AgMBAAGjgfswgfgw\r\n" \ -"HQYDVR0OBBYEFIVyecka74kvOKIW0BjlTc/B+a2NMIHIBgNVHSMEgcAwgb2AFIVy\r\n" \ -"ecka74kvOKIW0BjlTc/B+a2NoYGZpIGWMIGTMQswCQYDVQQGEwJGUjEPMA0GA1UE\r\n" \ -"CBMGUmFkaXVzMRIwEAYDVQQHEwlTb21ld2hlcmUxFTATBgNVBAoTDEV4YW1wbGUg\r\n" \ -"SW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20xJjAkBgNVBAMT\r\n" \ -"HUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ggkA+9lqjOl1+OQwDAYDVR0T\r\n" \ -"BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAZYHM26sxbKOckVqJJ1QY0U2QFlGP\r\n" \ -"1GYd8v27znxdnRmSonDvv3GjFfhwoyDk0JUuxkK/33ikCxihrgoO/EQTY9BV2OpW\r\n" \ -"qkB1PDtb3i5ZRNvfjmW0pVA4p+GmdTGaEE5pTlcVnorzVrUeFKaZakb+IDFYzmeF\r\n" \ -"xp8B3Bb5wvinDligLOaJnSlgS8QeeIab9HZfaVTTuPmVK6zE6D54Y0dJPnykvDdE\r\n" \ -"cGN0FC+migfilFjJgkDJ0r78nwes55L8zjoofiZuO03rrHww6ARc3v1jYzAufddk\r\n" \ -"QTiZHgjlMQb2XXMmXLn8kBgoDnqkXFNe8j0h8uxIJSrjOoIyn1h1wvX5/w==\r\n" \ -"-----END CERTIFICATE-----\r\n"; -} -*/ - -int eap_start(char *method){ -#ifdef CONFIG_ENABLE_EAP - int ret = -1; - - //unsigned long tick1 = xTaskGetTickCount(); - //unsigned long tick2; - - if(rltk_wlan_running(WLAN1_IDX)){ - printf("\n\rNot support con-current mode!\n\r"); - return -1; - } - - judge_station_disconnect(); - -#if CONFIG_ENABLE_PEAP - if(strcmp(method,"peap") == 0){ - ret = set_eap_peap_method(); - } -#endif - -#if CONFIG_ENABLE_TLS - if(strcmp(method,"tls") == 0){ - ret = set_eap_tls_method(); - } -#endif - -#if CONFIG_ENABLE_TTLS - if(strcmp(method,"ttls") == 0){ - ret = set_eap_ttls_method(); - } -#endif - - if(ret == -1){ - printf("\r\neap method %s not supported\r\n", method); - return -1; - } - - eap_method = get_eap_ctx_method(); - - printf("\n==================== %s_start ====================\n", method); - - //eap_config(); - - set_eap_phase(ENABLE); - wifi_reg_event_handler(WIFI_EVENT_EAPOL_START, eap_eapol_start_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_EAPOL_RECVD, eap_eapol_recvd_hdl, NULL); - - - - ret = connect_by_open_system(eap_target_ssid); - -#if CONFIG_LWIP_LAYER - /* Start DHCPClient */ - if(ret == 0) - LwIP_DHCP(0, DHCP_START); -#endif - - wifi_unreg_event_handler(WIFI_EVENT_EAPOL_START, eap_eapol_start_hdl); - - // for re-authentication when session timeout - wifi_reg_event_handler(WIFI_EVENT_DISCONNECT, eap_disconnected_hdl, NULL); - //wifi_unreg_event_handler(WIFI_EVENT_EAPOL_RECVD, eap_eapol_recvd_hdl); - - set_eap_phase(DISABLE); - - // eap failed, disconnect - if(ret != 0){ - judge_station_disconnect(); - eap_disconnected_hdl(NULL, 0, 0, NULL); - rtw_msleep_os(200); //wait handler done - printf("\r\nERROR: connect to AP by %s failed\n", method); - } - - eap_sm_deinit(); - printf("\n==================== %s_finish ====================\n", method); - - //tick2 = xTaskGetTickCount(); - //printf("\r\nConnected after %dms.\n", (tick2-tick1)); - - return ret; -#else - return -1; -#endif -} -#ifdef CONFIG_ENABLE_EAP -static int connect_by_open_system(char *target_ssid) -{ - int retry_count = 0, ret; - - if (target_ssid != NULL) { - while (1) { - rtw_msleep_os(500); //wait scan complete. - ret = wifi_connect( - NULL, - 0, - target_ssid, - RTW_SECURITY_OPEN, - NULL, - 0, - NULL); - if (ret == RTW_SUCCESS) { - //printf("\r\n[EAP]Associate with AP success\n"); - break; - } - if (retry_count == 0) { - //printf("\r\n[EAP]Associate with AP failed %d\n", ret); - return -1; - } - retry_count --; - printf("Retry connection...\n"); - - judge_station_disconnect(); - set_eap_phase(ENABLE); - } - } else { - printf("\r\n[EAP]Target SSID is NULL\n"); - return -1; - } - - return 0; -} - -static void eap_autoreconnect_thread(void *method) -{ - eap_start((char*)method); - vTaskDelete(NULL); -} -#endif - -void eap_autoreconnect_hdl(uint8_t method_id){ -#ifdef CONFIG_ENABLE_EAP - char *method; - switch(method_id){ - case 25: // EAP_TYPE_PEAP - method = "peap"; - break; - case 13: // EAP_TYPE_TLS - method = "tls"; - break; - case 21: // EAP_TYPE_TTLS - method = "ttls"; - break; - default: - printf("invalid eap method\n"); - return; - } - if(xTaskCreate(eap_autoreconnect_thread, ((const char*)"eap_autoreconnect_thread"), 1024, (void*) method, tskIDLE_PRIORITY + 1, NULL) != pdPASS) - printf("\n\r%s xTaskCreate failed\n", __FUNCTION__); -#endif -} - -// copy from ssl_client_ext.c -#if ENABLE_EAP_SSL_VERIFY_CLIENT -static x509_crt* _cli_crt = NULL; -static pk_context* _clikey_rsa = NULL; -#endif - -#if ENABLE_EAP_SSL_VERIFY_SERVER -static x509_crt* _ca_crt = NULL; - -static int eap_verify(void *data, x509_crt *crt, int depth, int *flags) -{ - - //char buf[1024]; - ((void) data); - - printf("\nVerify requested for (Depth %d):\n", depth); - //x509_crt_info(buf, sizeof(buf) - 1, "", crt); - //printf("%s", buf); - - if(((*flags) & BADCERT_EXPIRED) != 0) - printf("server certificate has expired\n"); - - if(((*flags) & BADCERT_REVOKED) != 0) - printf(" ! server certificate has been revoked\n"); - - if(((*flags) & BADCERT_CN_MISMATCH) != 0) - printf(" ! CN mismatch\n"); - - if(((*flags) & BADCERT_NOT_TRUSTED) != 0) - printf(" ! self-signed or not signed by a trusted CA\n"); - - if(((*flags) & BADCRL_NOT_TRUSTED) != 0) - printf(" ! CRL not trusted\n"); - - if(((*flags) & BADCRL_EXPIRED) != 0) - printf(" ! CRL expired\n"); - - if(((*flags) & BADCERT_OTHER) != 0) - printf(" ! other (unknown) flag\n"); - - if((*flags) == 0) - printf(" Certificate verified without error flags\n"); - - return(0); -} -#endif - -int eap_cert_init(void) -{ -#if ENABLE_EAP_SSL_VERIFY_CLIENT - if(eap_client_cert != NULL && eap_client_key != NULL){ - _cli_crt = polarssl_malloc(sizeof(x509_crt)); - - if(_cli_crt) - x509_crt_init(_cli_crt); - else - return -1; - - _clikey_rsa = polarssl_malloc(sizeof(pk_context)); - - if(_clikey_rsa) - pk_init(_clikey_rsa); - else - return -1; - } -#endif -#if ENABLE_EAP_SSL_VERIFY_SERVER - if(eap_ca_cert != NULL){ - _ca_crt = polarssl_malloc(sizeof(x509_crt)); - - if(_ca_crt) - x509_crt_init(_ca_crt); - else - return -1; - } -#endif - return 0; -} - -void eap_client_cert_free(void) -{ -#if ENABLE_EAP_SSL_VERIFY_CLIENT - if(eap_client_cert != NULL && eap_client_key != NULL){ - if(_cli_crt) { - x509_crt_free(_cli_crt); - polarssl_free(_cli_crt); - _cli_crt = NULL; - } - - if(_clikey_rsa) { - pk_free(_clikey_rsa); - polarssl_free(_clikey_rsa); - _clikey_rsa = NULL; - } - } -#endif -} - -void eap_server_cert_free(void) -{ -#if ENABLE_EAP_SSL_VERIFY_SERVER - if(eap_ca_cert != NULL){ - if(_ca_crt) { - x509_crt_free(_ca_crt); - polarssl_free(_ca_crt); - _ca_crt = NULL; - } - } -#endif -} - -int eap_cert_setup(ssl_context *ssl) -{ -#if ENABLE_EAP_SSL_VERIFY_CLIENT - if(eap_client_cert != NULL && eap_client_key != NULL){ - if(x509_crt_parse(_cli_crt, eap_client_cert, strlen(eap_client_cert)) != 0) - return -1; - - if(pk_parse_key(_clikey_rsa, eap_client_key, strlen(eap_client_key), eap_client_key_pwd, strlen(eap_client_key_pwd)) != 0) - return -1; - - ssl_set_own_cert(ssl, _cli_crt, _clikey_rsa); - } -#endif -#if ENABLE_EAP_SSL_VERIFY_SERVER - if(eap_ca_cert != NULL){ - if(x509_crt_parse(_ca_crt, eap_ca_cert, strlen(eap_ca_cert)) != 0) - return -1; - ssl_set_ca_chain(ssl, _ca_crt, NULL, NULL); - ssl_set_authmode(ssl, SSL_VERIFY_REQUIRED); - ssl_set_verify(ssl, eap_verify, NULL); - } -#endif - return 0; -} - -#endif //#ifdef CONFIG_ENABLE_EAP diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_p2p_config.c b/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_p2p_config.c deleted file mode 100644 index fdd383d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_p2p_config.c +++ /dev/null @@ -1,267 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" - -#include "utils/os.h" -#include -#include -#include "wps/wps_defs.h" - -#if CONFIG_ENABLE_P2P -enum p2p_wps_method { - WPS_NOT_READY, WPS_PIN_DISPLAY, WPS_PIN_KEYPAD, WPS_PBC -}; - -/*NETMASK*/ -#define P2P_NETMASK_ADDR0 255 -#define P2P_NETMASK_ADDR1 255 -#define P2P_NETMASK_ADDR2 255 -#define P2P_NETMASK_ADDR3 0 - -/*Gateway Address*/ -#define P2P_GW_ADDR0 192 -#define P2P_GW_ADDR1 168 -#define P2P_GW_ADDR2 42 -#define P2P_GW_ADDR3 1 - -#define P2P_GO_NEGO_RESULT_SIZE 376//256 - -xqueue_handle_t queue_for_p2p_nego; - -extern void dhcps_init(struct netif * pnetif); - -static int hex2num(char c) -{ - if (c >= '0' && c <= '9') - return c - '0'; - if (c >= 'a' && c <= 'f') - return c - 'a' + 10; - if (c >= 'A' && c <= 'F') - return c - 'A' + 10; - return -1; -} - -/** - * hwaddr_aton - Convert ASCII string to MAC address (colon-delimited format) - * @txt: MAC address as a string (e.g., "00:11:22:33:44:55") - * @addr: Buffer for the MAC address (ETH_ALEN = 6 bytes) - * Returns: 0 on success, -1 on failure (e.g., string not a MAC address) - */ -int hwaddr_aton(const char *txt, uint8_t *addr) -{ - int i; - - for (i = 0; i < 6; i++) { - int a, b; - - a = hex2num(*txt++); - if (a < 0) - return -1; - b = hex2num(*txt++); - if (b < 0) - return -1; - *addr++ = (a << 4) | b; - if (i < 5 && *txt++ != ':') - return -1; - } - - return 0; -} - -int wifi_start_p2p_go(char *ssid, char *passphrase, uint8_t channel) -{ - extern struct netif xnetif[NET_IF_NUM]; - struct netif * pnetif = &xnetif[0]; - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - - IP4_ADDR(&ipaddr, P2P_GW_ADDR0, P2P_GW_ADDR1, P2P_GW_ADDR2, P2P_GW_ADDR3); - IP4_ADDR(&netmask, P2P_NETMASK_ADDR0, P2P_NETMASK_ADDR1 , P2P_NETMASK_ADDR2, P2P_NETMASK_ADDR3); - IP4_ADDR(&gw, P2P_GW_ADDR0, P2P_GW_ADDR1, P2P_GW_ADDR2, P2P_GW_ADDR3); - netif_set_addr(pnetif, &ipaddr, &netmask,&gw); - - // start ap - if(wifi_start_ap( ssid, - RTW_SECURITY_WPA2_AES_PSK, - passphrase, - channel, - 0) != RTW_SUCCESS) { - printf("ERROR: Operation failed!\n"); - return -1; - } - - netif_set_default(pnetif); - - // start dhcp server - dhcps_init(pnetif); - - return 0; -} - -void app_callback(char *msg) -{ - //From Application -} - -void cmd_wifi_p2p_start(int argc, char **argv) -{ - extern struct netif xnetif[NET_IF_NUM]; - int listen_ch = 1; - int op_ch = 5; - int go_intent = 1; -#if 1 - uint32_t r = 0; - os_get_random((uint8_t *) &r, sizeof(r)); - go_intent = r%15+1; /*1-15*/ - - os_get_random((uint8_t *) &r, sizeof(r)); - listen_ch = 1 + (r % 3) * 5; - - os_get_random((uint8_t *) &r, sizeof(r)); - op_ch = 1 + (r % 3) * 5; -#endif - wifi_off(); - os_sleep(0, 20000); - wifi_on(RTW_MODE_P2P); - wifi_p2p_init(xnetif[0].hwaddr, go_intent, listen_ch, op_ch); -} - -int cmd_wifi_p2p_auto_go_start(int argc, char **argv) -{ - uint8_t *passphrase = "12345678"; - uint8_t channel = 6; // 1, 6, 11 - const char *ssid_in = "DIRECT-34-Ameba"; - const char *dev_name = "Ameba1234"; // max strlen 32 - const char *manufacturer = "by customer"; // max strlen 64 - const char *model_name = "customer"; // max strlen 32 - const char *model_number = "v2.0"; // max strlen 32 - const char *serial_number = "9"; // max strlen 32 - const uint8_t pri_dev_type[8] = {0x00,0x0A,0x00,0x50,0xF2,0x04,0x00,0x01}; // category ID:0x00,0x0A; sub category ID:0x00,0x01 - uint8_t res[P2P_GO_NEGO_RESULT_SIZE]; - uint16_t config_methods = WPS_CONFIG_DISPLAY | WPS_CONFIG_KEYPAD | WPS_CONFIG_PUSHBUTTON; - - if(!is_wifi_p2p_initialized()) - return -1; - - wifi_p2p_set_dev_name(dev_name); - wifi_p2p_set_manufacturer(manufacturer); - wifi_p2p_set_model_name(model_name); - wifi_p2p_set_model_number(model_number); - wifi_p2p_set_serial_number(serial_number); - wifi_p2p_set_pri_dev_type(pri_dev_type); - wifi_p2p_set_ssid(ssid_in); - wifi_p2p_set_config_methods(config_methods); - wifi_p2p_init_auto_go_params(res, passphrase, channel); - wifi_p2p_start_auto_go(res); - return 0; -} -void cmd_wifi_p2p_stop(int argc, char **argv) -{ - wifi_p2p_deinit(); - wifi_off(); -} - -void cmd_p2p_listen(int argc, char **argv) -{ - uint32_t timeout = 0; - - if(argc == 2){ - timeout = os_atoi((uint8_t*)argv[1]); - printf("\r\n%s(): timeout=%d\n", __func__, timeout); - if(timeout > 3600) - timeout = 3600; - } - wifi_cmd_p2p_listen(timeout); -} - -void cmd_p2p_find(int argc, char **argv) -{ - wifi_cmd_p2p_find(); -} - -void cmd_p2p_peers(int argc, char **argv) -{ - wifi_cmd_p2p_peers(); -} - -void cmd_p2p_info(int argc, char **argv) -{ - wifi_cmd_p2p_info(); -} - -void cmd_p2p_disconnect(int argc, char **argv) -{ - wifi_cmd_p2p_disconnect(); -} - -void cmd_p2p_connect(int argc, char **argv) -{ - enum p2p_wps_method config_method = WPS_PBC; - char *pin = NULL; - uint8_t dest[ETH_ALEN] = {0x44, 0x6d, 0x57, 0xd7, 0xce, 0x41}; - uint8_t res[P2P_GO_NEGO_RESULT_SIZE]; - int ret = 0; - -#if 1 - if((argc != 2) && (argc != 3) && (argc != 4)) { - printf("Usage: p2p_connect DEST_ADDR [pbc|pin] [pin code]\n"); - printf("Example: p2p_connect 00:e0:4c:87:00:15 pin 12345678\n"); - return; - } - if (hwaddr_aton(argv[1], dest)){ - printf("P2P_CONNECT: dest address is not correct!\n"); - return; - } - - //printf("\r\nDEST: %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n", dest[0], dest[1], dest[2], dest[3], dest[4], dest[5]); - config_method = WPS_PBC; - if(argc == 3) { - if(os_strncmp(argv[2], "pbc", 3) == 0) - config_method = WPS_PBC; - else if(os_strncmp(argv[2], "pin", 3) == 0){ - config_method = WPS_PIN_DISPLAY; - }else{ - printf("Unknown config method!\n"); - printf("Usage: p2p_connect DEST_ADDR [pbc|pin] \n"); - printf("Example: p2p_connect 00:e0:4c:87:00:15 pin\n"); - return; - } - } - else if(argc == 4) { - if(os_strncmp(argv[2], "pin", 3) == 0){ - config_method = WPS_PIN_KEYPAD; - pin = argv[3]; - }else{ - printf("Unknown config method!\n"); - printf("Usage: p2p_connect DEST_ADDR [pbc|pin] [pin code]\n"); - printf("Example: p2p_connect 00:e0:4c:87:00:15 pin 12345678\n"); - return; - } - } -#else //For test - uint8_t dest1[ETH_ALEN] = {0xea, 0x92, 0xa4, 0x9b, 0x61, 0xd6}; //NEXUS 4 - //uint8_t dest1[ETH_ALEN] = {0x0e, 0x37, 0xdc, 0xfc, 0xc4, 0x12}; //HUAWEI U9508_c001 - //uint8_t dest1[ETH_ALEN] = {0x42, 0xcb, 0xa8, 0xd3, 0x2c, 0x50}; //HUAWEI G610-T00 - os_memcpy(dest, dest1, ETH_ALEN); - config_method = WPS_PBC; -#endif - - if (queue_for_p2p_nego!= NULL) { - os_xqueue_delete(queue_for_p2p_nego); - queue_for_p2p_nego = NULL; - } - queue_for_p2p_nego = os_xqueue_create(1, P2P_GO_NEGO_RESULT_SIZE); - if(queue_for_p2p_nego != NULL) { - ret = wifi_cmd_p2p_connect(dest, config_method, pin); - if(ret == 0) - os_xqueue_receive(queue_for_p2p_nego, res, 15); - - os_xqueue_delete(queue_for_p2p_nego); - queue_for_p2p_nego = NULL; - - if(ret == 0) - wifi_p2p_start_wps(res); - } -} - -#endif //CONFIG_ENABLE_P2P diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_wps_config.c b/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_wps_config.c deleted file mode 100644 index 526cc8e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_wps_config.c +++ /dev/null @@ -1,757 +0,0 @@ -#include -#include -#include -#include "FreeRTOS.h" -#include "task.h" -#include "main.h" -#include "queue.h" -#include "utils/os.h" -#include -#include -#include "wifi/wifi_conf.h" -#include "wps/wps_defs.h" -#include - -extern int wpas_wps_registrar_button_pushed(); - -/* - * @brief struct wps_credential - WPS Credential - */ -struct dev_credential { - uint8_t ssid[32]; /**< SSID */ - size_t ssid_len; /**< Length of SSID */ - uint16_t auth_type; /**< Authentication Type (WPS_AUTH_OPEN, .. flags) */ - uint16_t encr_type; /**< Encryption Type (WPS_ENCR_NONE, .. flags) */ - uint8_t key_idx; /**< Key index */ - uint8_t key[65]; /**< Key */ - size_t key_len; /**< Key length in octets */ - uint8_t mac_addr[6]; /**< MAC address of the Credential receiver */ - const uint8_t *cred_attr; /**< Unparsed Credential attribute data (used only in cred_cb()). - This may be NULL, if not used. */ - size_t cred_attr_len; /**< Length of cred_attr in octets */ - uint16_t ap_channel; /**< AP channel */ -}; - -typedef struct { - char *target_ssid; - uint16_t config_method; - _sema scan_sema; - int isoverlap; -} internal_wps_scan_handler_arg_t; - -#define WLAN0_NAME "wlan0" -#ifndef ENABLE -#define ENABLE (1) -#endif -#ifndef DISABLE -#define DISABLE (0) -#endif -#define STACKSIZE 512 - - -//static xSemaphoreHandle wps_reconnect_semaphore; -//static struct _WIFI_NETWORK wifi_get_from_certificate = {0}; - -#define WPS_AUTH_TYPE_OPEN (0x0001) -#define WPS_AUTH_TYPE_WPA_PERSONAL (0x0002) -#define WPS_AUTH_TYPE_SHARED (0x0004) -#define WPS_AUTH_TYPE_WPA_ENTERPRISE (0x0008) -#define WPS_AUTH_TYPE_WPA2_PERSONAL (0x0010) -#define WPS_AUTH_TYPE_WPA2_ENTERPRISE (0x0020) - -#define WPS_ENCR_TYPE_NONE (0x0001) -#define WPS_ENCR_TYPE_WEP (0x0002) -#define WPS_ENCR_TYPE_TKIP (0x0004) -#define WPS_ENCR_TYPE_AES (0x0008) - -#define SCAN_BUFFER_LENGTH (4096) - -#if CONFIG_ENABLE_P2P -extern void _wifi_p2p_wps_success(const uint8_t *peer_addr, int registrar); -extern void _wifi_p2p_wps_failed(); -#endif -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP -extern uint32_t _wps_registrar_process_msg(void *priv, uint32_t op_code, const void *pmsg); -extern void * _wps_registrar_get_msg(void *priv, uint32_t *op_code); -extern void * _wps_registrar_init(void *priv, const void* pcfg); -extern void _wps_registrar_deinit(void *priv); -extern void *_wps_registrar_alloc(); -extern int _wps_registrar_add_pin(void *priv, const uint8_t *addr, - const uint8_t *uuid, const uint8_t *pin, size_t pin_len, - int timeout); -extern int _wps_registrar_button_pushed(void *priv, - const uint8_t *p2p_dev_addr); -extern int _wps_registrar_wps_cancel(void *priv); -extern void _wpas_wsc_ap_send_eap_reqidentity(void *priv, uint8_t *rx_buf); -extern void _wpas_wsc_ap_check_eap_rspidentity(void *priv, uint8_t *rx_buf); -extern void _wpas_wsc_registrar_send_eap_fail(void *priv); -extern void _wpas_wsc_registrar_handle_recvd(void *priv, uint8_t *rx_buf); -extern void * _eap_wsc_server_process_hdl(void *priv, void* req, uint8_t id); -extern void *_eap_wsc_server_reset(void *priv); -#endif -extern void wpas_wsc_sta_wps_start_hdl(char *buf, int buf_len, int flags, void *userdata); -extern void wpas_wsc_wps_finish_hdl(char *buf, int buf_len, int flags, void *userdata); -extern void wpas_wsc_eapol_recvd_hdl(char *buf, int buf_len, int flags, void *userdata); - -void wifi_p2p_wps_success(const uint8_t *peer_addr, int registrar) -{ -#if CONFIG_ENABLE_P2P - _wifi_p2p_wps_success(peer_addr, registrar); -#endif -} - -void wifi_p2p_wps_failed() -{ -#if CONFIG_ENABLE_P2P - _wifi_p2p_wps_failed(); -#endif -} - -void * wps_registrar_init(void *priv, void *pcfg) -{ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - return _wps_registrar_init(priv, pcfg); -#else - return NULL; -#endif -} - -void wps_registrar_deinit(void *priv) -{ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - _wps_registrar_deinit(priv); -#endif -} - -void *wps_registrar_alloc() -{ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - return _wps_registrar_alloc(); -#else - return NULL; -#endif -} - -uint32_t wps_registrar_process_msg(void *priv, uint32_t op_code, const void *pmsg) -{ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - return _wps_registrar_process_msg(priv, op_code, pmsg); -#else - return 0; -#endif -} - -void * wps_registrar_get_msg(void *priv, uint32_t *op_code) -{ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - return _wps_registrar_get_msg(priv, op_code); -#else - return NULL; -#endif -} - - -int wps_registrar_add_pin(void *priv, const uint8_t *addr, - const uint8_t *uuid, const uint8_t *pin, size_t pin_len, - int timeout) -{ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - return _wps_registrar_add_pin(priv, NULL,NULL,pin,pin_len,0); -#else - return 0; -#endif -} - -int wps_registrar_button_pushed(void *priv, - const uint8_t *p2p_dev_addr) -{ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - return _wps_registrar_button_pushed(priv, p2p_dev_addr); -#else - return 0; -#endif -} - -int wps_registrar_wps_cancel(void *priv) -{ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - return _wps_registrar_wps_cancel(priv); -#else - return 0; -#endif - -} - -void wpas_wsc_ap_send_eap_reqidentity(void *priv, uint8_t *rx_buf) -{ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - _wpas_wsc_ap_send_eap_reqidentity(priv, rx_buf); -#endif -} - -void wpas_wsc_ap_check_eap_rspidentity(void *priv, uint8_t *rx_buf) -{ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - _wpas_wsc_ap_check_eap_rspidentity(priv, rx_buf); -#endif -} - -void wpas_wsc_registrar_send_eap_fail(void *priv) -{ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - _wpas_wsc_registrar_send_eap_fail(priv); -#endif -} - -void wpas_wsc_registrar_handle_recvd(void *priv, uint8_t *rx_buf) -{ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - _wpas_wsc_registrar_handle_recvd(priv, rx_buf); -#endif -} - -void * eap_wsc_server_process_hdl(void *priv, void* req, uint8_t id) -{ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - return _eap_wsc_server_process_hdl(priv, req, id); -#else - return NULL; -#endif -} - -void eap_wsc_server_reset(void *priv) -{ -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - _eap_wsc_server_reset(priv); -#endif -} - -#if CONFIG_ENABLE_WPS -xqueue_handle_t queue_for_credential; -char wps_pin_code[32]; -uint16_t config_method; -uint8_t wps_password_id; -static TaskHandle_t ap_wps_task = NULL; - -void wps_check_and_show_connection_info(void) -{ - rtw_wifi_setting_t setting; -#if CONFIG_LWIP_LAYER - /* Start DHCP Client */ - LwIP_DHCP(0, DHCP_START); -#endif - wifi_get_setting(WLAN0_NAME, &setting); - wifi_show_setting(WLAN0_NAME, &setting); - -#if CONFIG_INIC_CMD_RSP - inic_c2h_wifi_info("ATWW", RTW_SUCCESS); -#endif -} - -static void wps_config_wifi_setting(rtw_network_info_t *wifi, struct dev_credential *dev_cred) -{ - printf("wps_config_wifi_setting\n"); - //memcpy((void *)wifi->ssid, (void *)dev_cred->ssid, dev_cred->ssid_len); - strcpy((char*)wifi->ssid.val, (char*)&dev_cred->ssid[0]); - printf("wps_wifi.ssid = %s\n", wifi->ssid.val); - wifi->ssid.len = dev_cred->ssid_len; - printf("wps_wifi.ssid_len = %d\n", wifi->ssid.len); - - switch(dev_cred->auth_type) { - case WPS_AUTH_TYPE_OPEN : - case WPS_AUTH_TYPE_SHARED : - if(dev_cred->encr_type == WPS_ENCR_TYPE_WEP) { - printf("security_type = RTW_SECURITY_WEP_PSK\n"); - wifi->security_type = RTW_SECURITY_WEP_PSK; - wifi->key_id = dev_cred->key_idx - 1; - } - else { - printf("security_type = RTW_SECURITY_OPEN\n"); - wifi->security_type = RTW_SECURITY_OPEN; - } - break; - case WPS_AUTH_TYPE_WPA_PERSONAL : - case WPS_AUTH_TYPE_WPA_ENTERPRISE : - printf("security_type = RTW_SECURITY_WPA_AES_PSK\n"); - wifi->security_type = RTW_SECURITY_WPA_AES_PSK; - break; - case WPS_AUTH_TYPE_WPA2_PERSONAL : - case WPS_AUTH_TYPE_WPA2_ENTERPRISE : - printf("security_type = RTW_SECURITY_WPA2_AES_PSK\n"); - wifi->security_type = RTW_SECURITY_WPA2_AES_PSK; - break; - } - - printf("wps_wifi.security_type = %d\n", wifi->security_type); - - //memcpy(wifi->password, dev_cred->key, dev_cred->key_len); - wifi->password = dev_cred->key; - printf("wps_wifi.password = %s\n", wifi->password); - wifi->password_len = dev_cred->key_len; - printf("wps_wifi.password_len = %d", wifi->password_len); - //xSemaphoreGive(wps_reconnect_semaphore); - //printf("\r\nrelease wps_reconnect_semaphore"); -} - -static int wps_connect_to_AP_by_certificate(rtw_network_info_t *wifi) -{ -#define RETRY_COUNT 3 - int retry_count = RETRY_COUNT, ret; - - printf("=============== wifi_certificate_info ===============\n"); - printf("wps_wifi.ssid = %s\n", wifi->ssid.val); - printf("security_type = %d\n", wifi->security_type); - printf("wps_wifi.password = %s\n", wifi->password); - printf("ssid_len = %d\n", wifi->ssid.len); - printf("password_len = %d\n", wifi->password_len); - while (1) { - ret = wifi_connect( - NULL, - 0, - (char*)wifi->ssid.val, - wifi->security_type, - (char*)wifi->password, - wifi->key_id, - NULL); - if (ret == RTW_SUCCESS) { - if(retry_count == RETRY_COUNT) - rtw_msleep_os(1000); //When start wps with OPEN AP, AP will send a disassociate frame after STA connected, need reconnect here. - if(RTW_SUCCESS == wifi_is_connected_to_ap( )){ - //printf("\r\n[WPS]Ready to tranceive!\n"); - wps_check_and_show_connection_info(); - break; - } - } - if (retry_count == 0) { - printf("[WPS]Join bss failed\n"); - ret = -1; - break; - } - retry_count --; - } - return ret; -} - -static int wps_connect_to_AP_by_open_system(char *target_ssid) -{ - int retry_count = 3, ret; - - if (target_ssid != NULL) { - rtw_msleep_os(500); //wait scan complete. - while (1) { - ret = wifi_connect( - NULL, - 0, - target_ssid, - RTW_SECURITY_OPEN, - NULL, - 0, - NULL); - if (ret == RTW_SUCCESS) { - //wps_check_and_show_connection_info(); - break; - } - if (retry_count == 0) { - printf("[WPS]Join bss failed\n"); - return -1; - } - retry_count --; - } - // - } else { - printf("[WPS]Target SSID is NULL\n"); - } - - return 0; -} - -static void process_wps_scan_result( rtw_scan_result_t* record, void * user_data ) -{ - internal_wps_scan_handler_arg_t *wps_arg = (internal_wps_scan_handler_arg_t *)user_data; - - if (record->wps_type != 0xff) { - if (wps_arg->config_method == WPS_CONFIG_PUSHBUTTON) { - if (record->wps_type == 0x04) { - wps_password_id = record->wps_type; - if (++wps_arg->isoverlap == 0) { - memcpy(&wps_arg->target_ssid[0], record->SSID.val, record->SSID.len); - wps_arg->target_ssid[record->SSID.len] = '\0'; - printf("[pbc]Record first triger wps AP = %s\n", wps_arg->target_ssid); - } - } - } else if (wps_arg->config_method == WPS_CONFIG_DISPLAY || wps_arg->config_method == WPS_CONFIG_KEYPAD) { - if (record->wps_type == 0x00) { - wps_arg->isoverlap = 0; - wps_password_id = record->wps_type; - memcpy(&wps_arg->target_ssid[0], record->SSID.val, record->SSID.len); - wps_arg->target_ssid[record->SSID.len] = '\0'; - printf("[pin]find out first triger wps AP = %s\n", wps_arg->target_ssid); - } - } - } -} - -static rtw_result_t wps_scan_result_handler( rtw_scan_handler_result_t* malloced_scan_result ) -{ - internal_wps_scan_handler_arg_t *wps_arg = (internal_wps_scan_handler_arg_t *)malloced_scan_result->user_data; - if (malloced_scan_result->scan_complete != RTW_TRUE) - { - rtw_scan_result_t* record = &malloced_scan_result->ap_details; - record->SSID.val[record->SSID.len] = 0; /* Ensure the SSID is null terminated */ - - process_wps_scan_result(record, malloced_scan_result->user_data); - } - else - { - printf("WPS scan done!\n"); - rtw_up_sema(&wps_arg->scan_sema); - } - return RTW_SUCCESS; -} - -extern void wifi_scan_each_report_hdl( char* buf, int buf_len, int flags, void* userdata); -extern void wifi_scan_done_hdl( char* buf, int buf_len, int flags, void* userdata); - -static int wps_find_out_triger_wps_AP(char *target_ssid, uint16_t config_method) -{ - internal_wps_scan_handler_arg_t wps_arg = {0}; - - wps_password_id = 0xFF; - - wps_arg.isoverlap = -1; - wps_arg.config_method = config_method; - wps_arg.target_ssid = target_ssid; - rtw_init_sema(&wps_arg.scan_sema, 0); - if(wps_arg.scan_sema == NULL) return RTW_ERROR; - - if(wifi_scan_networks(wps_scan_result_handler, &wps_arg ) != RTW_SUCCESS){ - printf("ERROR: wifi scan failed\n"); - goto exit; - } - if(rtw_down_timeout_sema(&wps_arg.scan_sema, SCAN_LONGEST_WAIT_TIME) == RTW_FALSE){ - printf("WPS scan done early!\n"); - } - wifi_unreg_event_handler(WIFI_EVENT_SCAN_RESULT_REPORT, wifi_scan_each_report_hdl); - wifi_unreg_event_handler(WIFI_EVENT_SCAN_DONE, wifi_scan_done_hdl); - -exit: - rtw_free_sema(&wps_arg.scan_sema); - - return wps_arg.isoverlap; -} - -int wps_start(uint16_t wps_config, char *pin, uint8_t channel, char *ssid) -{ - struct dev_credential dev_cred; - rtw_network_info_t wifi = {0}; - char target_ssid[64]; - int is_overlap = -1; - uint32_t start_time = rtw_get_current_time(); - int ret = 0; - - memset(&dev_cred, 0, sizeof(struct dev_credential)); - memset(target_ssid, 0, 64); - if((wps_config != WPS_CONFIG_PUSHBUTTON) - && (wps_config != WPS_CONFIG_DISPLAY) - && (wps_config != WPS_CONFIG_KEYPAD)){ - printf("WPS: Wps method(%d) is wrong. Not triger WPS.\n", wps_config); - return -1; - } - config_method = wps_config; - - if(wps_config == WPS_CONFIG_DISPLAY - || wps_config == WPS_CONFIG_KEYPAD) { - if(pin) - strcpy(wps_pin_code, pin); - else{ - printf("WPS: PIN is NULL. Not triger WPS.\n"); - return -1; - } - } - - if(!ssid) { - while (1) { - unsigned int current_time = rtw_get_current_time(); - if (rtw_systime_to_sec(current_time - start_time) < 120) { - is_overlap = wps_find_out_triger_wps_AP(&target_ssid[0], wps_config); - if ((is_overlap == 0) || (is_overlap > 0)) - break; - } else { - printf("WPS: WPS Walking Time Out\n"); - return -2; - } - } - - if (is_overlap > 0) { - printf("WPS: WPS session overlap. Not triger WPS.\n"); - return -2; - } - }else{ - rtw_memcpy(target_ssid, ssid, strlen(ssid)); - } - - if (queue_for_credential != NULL) { - os_xqueue_delete(queue_for_credential); - queue_for_credential = NULL; - } - queue_for_credential = os_xqueue_create(1, sizeof(struct dev_credential)); - if(!queue_for_credential) - return -1; - - wifi_reg_event_handler(WIFI_EVENT_STA_WPS_START, wpas_wsc_sta_wps_start_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_WPS_FINISH, wpas_wsc_wps_finish_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_EAPOL_RECVD, wpas_wsc_eapol_recvd_hdl, NULL); - - wifi_set_wps_phase(ENABLE); - ret = wps_connect_to_AP_by_open_system(target_ssid); - if(ret < 0){ - printf("WPS: WPS Fail!\n"); - goto exit; - } - os_xqueue_receive(queue_for_credential, &dev_cred, 120); - if (dev_cred.ssid[0] != 0 && dev_cred.ssid_len <= 32) { - wps_config_wifi_setting(&wifi, &dev_cred); - wifi_set_wps_phase(DISABLE); - ret = wps_connect_to_AP_by_certificate(&wifi); - goto exit1; - } else { - printf("WPS: WPS FAIL!\n"); -// printf("\n\rWPS: WPS FAIL!\n"); -// printf("\n\rWPS: WPS FAIL!\n"); - ret = -1; - } -exit: - wifi_set_wps_phase(DISABLE); -exit1: - if (queue_for_credential != NULL) { - os_xqueue_delete(queue_for_credential); - queue_for_credential = NULL; - } - - wifi_unreg_event_handler(WIFI_EVENT_STA_WPS_START, wpas_wsc_sta_wps_start_hdl); - wifi_unreg_event_handler(WIFI_EVENT_WPS_FINISH, wpas_wsc_wps_finish_hdl); - wifi_unreg_event_handler(WIFI_EVENT_EAPOL_RECVD, wpas_wsc_eapol_recvd_hdl); - - wpas_wps_deinit(); - return ret; -} - -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP -static int ap_wps_start(uint16_t wps_config, char *pin) -{ - uint8_t authorized_mac[ETH_ALEN]; - int ret = 0; - uint32_t pin_val = 0; - - if (queue_for_credential != NULL) { - os_xqueue_delete(queue_for_credential); - queue_for_credential = NULL; - } - - queue_for_credential = os_xqueue_create(1, sizeof(authorized_mac)); - if(!queue_for_credential) - return -1; - - wifi_reg_event_handler(WIFI_EVENT_STA_WPS_START, wpas_wsc_sta_wps_start_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_WPS_FINISH, wpas_wsc_wps_finish_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_EAPOL_RECVD, wpas_wsc_eapol_recvd_hdl, NULL); - - wifi_set_wps_phase(ENABLE); - - if(wps_config == WPS_CONFIG_KEYPAD) - { - pin_val = atoi(pin); - if (!wps_pin_valid(pin_val)) { - printf("WPS-AP: Enter pin code is unvalid.\n"); - goto exit; - } - ret = wpas_wps_registrar_add_pin((unsigned char const*)pin, strlen(pin)); - } - else if(wps_config == WPS_CONFIG_DISPLAY) - ret = wpas_wps_registrar_add_pin((unsigned char const*)pin, strlen(pin)); - else - ret = wpas_wps_registrar_button_pushed(); - - if(ret<0) - goto exit; - - printf("WPS-AP: wait for STA connect!\n"); - os_xqueue_receive(queue_for_credential, authorized_mac, 120); //max wait 2min - - if(!wpas_wps_registrar_check_done()) - { - ret = -1; - wpas_wps_registrar_wps_cancel(); - } - -exit: - wifi_set_wps_phase(0); - os_xqueue_delete(queue_for_credential); - queue_for_credential = NULL; - printf("WPS-AP: Finished!\n"); - - wifi_unreg_event_handler(WIFI_EVENT_STA_WPS_START, wpas_wsc_sta_wps_start_hdl); - wifi_unreg_event_handler(WIFI_EVENT_WPS_FINISH, wpas_wsc_wps_finish_hdl); - wifi_unreg_event_handler(WIFI_EVENT_EAPOL_RECVD, wpas_wsc_eapol_recvd_hdl); - - return ret; -} - -static void wifi_start_ap_wps_thread_hdl( void *param) -{ - ap_wps_start(config_method, wps_pin_code); //Not support WPS_CONFIG_KEYPAD - - ap_wps_task = NULL; - vTaskDelete(NULL); -} - -void wifi_start_ap_wps_thread(uint16_t config_methods, char *pin) -{ - if((config_methods != WPS_CONFIG_PUSHBUTTON) - && (config_methods != WPS_CONFIG_DISPLAY) - && (config_methods != WPS_CONFIG_KEYPAD)){ - printf("WPS-AP: Wps method(%d) is wrong. Not triger WPS.\n", config_methods); - return; - } - config_method = config_methods; - if(config_methods == WPS_CONFIG_DISPLAY - || config_methods == WPS_CONFIG_KEYPAD) { - if(pin) - strcpy(wps_pin_code, pin); - else{ - printf("WPS-AP: PIN is NULL. Not triger WPS.\n"); - return; - } - } - if(ap_wps_task != NULL){ //push item to wait queue to finish last ap_wps task - printf("WPS-AP: Wait for last ap_wps task exiting...\n"); - if(queue_for_credential) - os_xqueue_send(queue_for_credential, NULL, 0); - while(ap_wps_task != NULL) - vTaskDelay(1); - vTaskDelay(20); - printf("Last ap_wps task completed.\n"); - } - if(xTaskCreate(wifi_start_ap_wps_thread_hdl, ((const char*)"ap_wps"), 256, NULL, tskIDLE_PRIORITY + 3, &ap_wps_task) != pdPASS) - printf("%s xTaskCreate(ap_wps thread) failed\n", __FUNCTION__); -} - -#endif //CONFIG_ENABLE_WPS_AP - -void wps_judge_staion_disconnect(void) -{ - int mode = 0; - unsigned char ssid[33]; - - wext_get_mode(WLAN0_NAME, &mode); - - switch(mode) { - case IW_MODE_MASTER: //In AP mode -// rltk_wlan_deinit(); -// rltk_wlan_init(0,RTW_MODE_STA); -// rltk_wlan_start(0); - //modified by Chris Yang for iNIC - wifi_off(); - vTaskDelay(20); - wifi_on(RTW_MODE_STA); - break; - case IW_MODE_INFRA: //In STA mode - if(wext_get_ssid(WLAN0_NAME, ssid) > 0) - wifi_disconnect(); - } -} - -void cmd_wps(int argc, char **argv) -{ - int ret = -1; - wps_judge_staion_disconnect(); - - if((argc == 2 || argc == 3 ) && (argv[1] != NULL)){ - if(strcmp(argv[1],"pin") == 0){ - unsigned int pin_val = 0; - /* start pin */ - if(argc == 2){ - char device_pin[10]; - pin_val = wps_generate_pin(); - sprintf(device_pin, "%08d", pin_val); - /* Display PIN 3 times to prevent to be overwritten by logs from other tasks */ - printf("WPS: Start WPS PIN Display. PIN: [%s]\n", device_pin); - printf("WPS: Start WPS PIN Display. PIN: [%s]\n", device_pin); - printf("WPS: Start WPS PIN Display. PIN: [%s]\n", device_pin); - ret = wps_start(WPS_CONFIG_DISPLAY, (char*)device_pin, 0, NULL); - }else{ - pin_val = atoi(argv[2]); - if (!wps_pin_valid(pin_val)) { - printf("WPS: Device pin code is invalid. Not triger WPS.\n"); - goto exit; - } - printf("WPS: Start WPS PIN Keypad.\n"); - ret = wps_start(WPS_CONFIG_KEYPAD, argv[2], 0, NULL); - } - }else if(strcmp(argv[1],"pbc") == 0){ - /* start pbc */ - printf("WPS: Start WPS PBC.\n"); - ret = wps_start(WPS_CONFIG_PUSHBUTTON, NULL, 0, NULL); - }else{ - printf("WPS: Wps Method is wrong. Not triger WPS.\n"); - goto exit; - } - } -exit: -#if CONFIG_INIC_CMD_RSP - if(ret != 0) - inic_c2h_msg("ATWW", ret, NULL, 0); -#endif - return; -} - -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP -/* -cmd_ap_wps for AP WSC setting. command style: -cmd_ap_wps pbc or cmd_ap_wps pin 12345678 -*/ -void cmd_ap_wps(int argc, char **argv) -{ - int mode = 0; - if(rltk_wlan_running(WLAN1_IDX)){ - printf("Not support con-current softAP WSC!\n"); - return; - } - wext_get_mode(WLAN0_NAME, &mode); - if(mode != IW_MODE_MASTER){ - printf("Only valid for IW_MODE_MASTER!\n"); - return; - } - - if((argc == 2 || argc == 3) && (argv[1] != NULL)) { - if (strcmp(argv[1],"pin") == 0 ) { - unsigned int pin_val = 0; - if(argc == 3){ - pin_val = atoi(argv[2]); - if (!wps_pin_valid(pin_val)) { - printf("WPS-AP: Device pin code is invalid. Not trigger WPS.\n"); - return; - } - printf("WPS-AP: Start AP WPS PIN Keypad.\n"); - wifi_start_ap_wps_thread(WPS_CONFIG_KEYPAD, argv[2]); - }else{ - char device_pin[10]; - pin_val = wps_generate_pin(); - sprintf(device_pin, "%08d", pin_val); - printf("WPS: Start WPS PIN Display. PIN: %s\n", device_pin); - wifi_start_ap_wps_thread(WPS_CONFIG_DISPLAY, (char*)device_pin); - } - }else if (strcmp(argv[1],"pbc") == 0) { - printf("WPS-AP: Start AP WPS PBC\n"); - wifi_start_ap_wps_thread(WPS_CONFIG_PUSHBUTTON, NULL); - }else{ - printf("WPS-AP Usage:\"wifi_ap_wps pin [pin_code]\" or \"wifi_ap_wps pbc\"\n"); - return; - } - } else { - printf("WPS-AP Usage:\"wifi_ap_wps pin [pin_code]\" or \"wifi_ap_wps pbc\"\n"); - } - return; -} -#endif //CONFIG_ENABLE_P2P -#endif //CONFIG_ENABLE_WPS diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_conf.c b/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_conf.c deleted file mode 100644 index b157ca7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_conf.c +++ /dev/null @@ -1,1767 +0,0 @@ -//----------------------------------------------------------------------------// -#include -#include -#include "FreeRTOS.h" -#include "task.h" -#include "semphr.h" -#include -#include -#include -#if 1 -#include "drv_types.h" // or #include "wlan_lib.h" -#else -#include "wifi_constants.h" -#include "wifi_structures.h" -//#include "wlan_lib.h" // or #include "drv_types.h" -#endif -#include -#include - -#if CONFIG_EXAMPLE_WLAN_FAST_CONNECT -#include "wlan_fast_connect/example_wlan_fast_connect.h" -#endif -#if CONFIG_EXAMPLE_UART_ATCMD -#include "at_cmd/atcmd_wifi.h" -#endif -#if CONFIG_INIC_EN -extern int inic_start(void); -extern int inic_stop(void); -#endif - -#if CONFIG_DEBUG_LOG > 0 -#undef printf -#define printf(...) rtl_printf(__VA_ARGS__) -#else -#undef printf -#define printf(...) -#endif - -//#define sscanf _sscanf - -#define SHOW_PRIVATE_OUT 0 // =0 - off, = 1 On - -/****************************************************** - * Constants - ******************************************************/ -#define RTW_JOIN_TIMEOUT 15000 - -#define JOIN_ASSOCIATED (uint32_t)(1 << 0) -#define JOIN_AUTHENTICATED (uint32_t)(1 << 1) -#define JOIN_LINK_READY (uint32_t)(1 << 2) -#define JOIN_SECURITY_COMPLETE (uint32_t)(1 << 3) -#define JOIN_COMPLETE (uint32_t)(1 << 4) -#define JOIN_NO_NETWORKS (uint32_t)(1 << 5) -#define JOIN_WRONG_SECURITY (uint32_t)(1 << 6) -#define JOIN_HANDSHAKE_DONE (uint32_t)(1 << 7) -#define JOIN_SIMPLE_CONFIG (uint32_t)(1 << 8) -#define JOIN_AIRKISS (uint32_t)(1 << 9) - -/****************************************************** - * Type Definitions - ******************************************************/ - -/****************************************************** - * Variables Declarations - ******************************************************/ - - -extern struct netif xnetif[NET_IF_NUM]; - -/****************************************************** - * Variables Definitions - ******************************************************/ -internal_scan_handler_t scan_result_handler_ptr; -static internal_join_result_t* join_user_data; -unsigned char wifi_mode = RTW_MODE_NONE; // rtw_mode_t -//extern rtw_mode_t wifi_mode; -char error_flag = RTW_UNKNOWN; -uint32_t rtw_join_status; -#if ATCMD_VER == ATVER_2 -extern unsigned char dhcp_mode_sta; -#endif - -/****************************************************** - * Variables Definitions - ******************************************************/ - -#ifndef WLAN0_NAME -#define WLAN0_NAME "wlan0" -#endif -#ifndef WLAN1_NAME -#define WLAN1_NAME "wlan1" -#endif -/* Give default value if not defined */ -#ifndef NET_IF_NUM -#ifdef CONFIG_CONCURRENT_MODE -#define NET_IF_NUM 2 -#else -#define NET_IF_NUM 1 -#endif -#endif - -/*Static IP ADDRESS*/ -#ifndef IP_ADDR0 -#define IP_ADDR0 192 -#define IP_ADDR1 168 -#define IP_ADDR2 1 -#define IP_ADDR3 80 -#endif - -/*NETMASK*/ -#ifndef NETMASK_ADDR0 -#define NETMASK_ADDR0 255 -#define NETMASK_ADDR1 255 -#define NETMASK_ADDR2 255 -#define NETMASK_ADDR3 0 -#endif - -/*Gateway Address*/ -#ifndef GW_ADDR0 -#define GW_ADDR0 192 -#define GW_ADDR1 168 -#define GW_ADDR2 1 -#define GW_ADDR3 1 -#endif - -/*Static IP ADDRESS*/ -#ifndef AP_IP_ADDR0 -#define AP_IP_ADDR0 192 -#define AP_IP_ADDR1 168 -#define AP_IP_ADDR2 43 -#define AP_IP_ADDR3 1 -#endif - -/*NETMASK*/ -#ifndef AP_NETMASK_ADDR0 -#define AP_NETMASK_ADDR0 255 -#define AP_NETMASK_ADDR1 255 -#define AP_NETMASK_ADDR2 255 -#define AP_NETMASK_ADDR3 0 -#endif - -/*Gateway Address*/ -#ifndef AP_GW_ADDR0 -#define AP_GW_ADDR0 192 -#define AP_GW_ADDR1 168 -#define AP_GW_ADDR2 43 -#define AP_GW_ADDR3 1 -#endif - -/****************************************************** - * Function Definitions - ******************************************************/ - -#if CONFIG_WLAN -#define DD_WIFI_CONN 0 // pvvx -//----------------------------------------------------------------------start-patch// -#include "freertos/wrapper.h" -#include "skbuff.h" - -extern unsigned char is_promisc_enabled(void); -extern int promisc_set(rtw_rcr_level_t enabled, void (*callback)(unsigned char*, unsigned int, void*), unsigned char len_used); - -//------------------------------------------------------------------------end-patch// -static int wifi_connect_local(rtw_network_info_t *pWifi) { - int ret = 0; - - if (is_promisc_enabled()) - promisc_set(0, NULL, 0); - - if (!pWifi) - return -1; - switch (pWifi->security_type) { - case RTW_SECURITY_OPEN: - ret = wext_set_key_ext(WLAN0_NAME, IW_ENCODE_ALG_NONE, NULL, 0, 0, 0, 0, - NULL, 0); - break; - case RTW_SECURITY_WEP_PSK: - case RTW_SECURITY_WEP_SHARED: - ret = wext_set_auth_param(WLAN0_NAME, IW_AUTH_80211_AUTH_ALG, - IW_AUTH_ALG_SHARED_KEY); - if (ret == 0) - ret = wext_set_key_ext(WLAN0_NAME, IW_ENCODE_ALG_WEP, NULL, - pWifi->key_id, 1 /* set tx key */, 0, 0, pWifi->password, - pWifi->password_len); - break; - case RTW_SECURITY_WPA_TKIP_PSK: - case RTW_SECURITY_WPA2_TKIP_PSK: - ret = wext_set_auth_param(WLAN0_NAME, IW_AUTH_80211_AUTH_ALG, - IW_AUTH_ALG_OPEN_SYSTEM); - if (ret == 0) - ret = wext_set_key_ext(WLAN0_NAME, IW_ENCODE_ALG_TKIP, NULL, 0, 0, - 0, 0, NULL, 0); - if (ret == 0) - ret = wext_set_passphrase(WLAN0_NAME, pWifi->password, - pWifi->password_len); - break; - case RTW_SECURITY_WPA_AES_PSK: - case RTW_SECURITY_WPA2_AES_PSK: - case RTW_SECURITY_WPA2_MIXED_PSK: - case RTW_SECURITY_WPA_WPA2_MIXED: - ret = wext_set_auth_param(WLAN0_NAME, IW_AUTH_80211_AUTH_ALG, - IW_AUTH_ALG_OPEN_SYSTEM); - if (ret == 0) - ret = wext_set_key_ext(WLAN0_NAME, IW_ENCODE_ALG_CCMP, NULL, 0, 0, - 0, 0, NULL, 0); - if (ret == 0) - ret = wext_set_passphrase(WLAN0_NAME, pWifi->password, - pWifi->password_len); - break; - default: - ret = -1; - error_printf("%s: security type(0x%x) is not supported!\n", - pWifi->security_type, __func__); - break; - } - return ret; -} - -void wifi_rx_beacon_hdl(char* buf, int buf_len, int flags, void* userdata) { - //printf("Beacon!\n"); -} - -static void wifi_no_network_hdl(char* buf, int buf_len, int flags, - void* userdata) { - if (join_user_data != NULL) - rtw_join_status = JOIN_NO_NETWORKS; -} - -static void wifi_connected_hdl(char* buf, int buf_len, int flags, - void* userdata) { -#ifdef CONFIG_ENABLE_EAP - if(get_eap_phase()) { - rtw_join_status = JOIN_COMPLETE | JOIN_SECURITY_COMPLETE | JOIN_ASSOCIATED | JOIN_AUTHENTICATED | JOIN_LINK_READY; - return; - } -#endif /* CONFIG_ENABLE_EAP */ - if ((join_user_data != NULL) - && ((join_user_data->network_info.security_type == RTW_SECURITY_OPEN) - || (join_user_data->network_info.security_type - == RTW_SECURITY_WEP_PSK))) { - rtw_join_status = JOIN_COMPLETE | JOIN_SECURITY_COMPLETE - | JOIN_ASSOCIATED | JOIN_AUTHENTICATED | JOIN_LINK_READY; - rtw_up_sema(&join_user_data->join_sema); - } else if ((join_user_data != NULL) - && ((join_user_data->network_info.security_type - == RTW_SECURITY_WPA2_AES_PSK))) { - rtw_join_status = JOIN_COMPLETE | JOIN_SECURITY_COMPLETE - | JOIN_ASSOCIATED | JOIN_AUTHENTICATED | JOIN_LINK_READY; - } -} -static void wifi_handshake_done_hdl(char* buf, int buf_len, int flags, - void* userdata) { - rtw_join_status = JOIN_COMPLETE | JOIN_SECURITY_COMPLETE | JOIN_ASSOCIATED - | JOIN_AUTHENTICATED | JOIN_LINK_READY | JOIN_HANDSHAKE_DONE; - if (join_user_data != NULL) - rtw_up_sema(&join_user_data->join_sema); -} - -static void wifi_disconn_hdl(char* buf, int buf_len, int flags, void* userdata) { - if (join_user_data != NULL) { - if (join_user_data->network_info.security_type == RTW_SECURITY_OPEN) { - - if (rtw_join_status == JOIN_NO_NETWORKS) - error_flag = RTW_NONE_NETWORK; - - } else if (join_user_data->network_info.security_type - == RTW_SECURITY_WEP_PSK) { - - if (rtw_join_status == JOIN_NO_NETWORKS) - error_flag = RTW_NONE_NETWORK; - - else if (rtw_join_status == 0) - error_flag = RTW_CONNECT_FAIL; - - } else if (join_user_data->network_info.security_type - == RTW_SECURITY_WPA2_AES_PSK) { - - if (rtw_join_status == JOIN_NO_NETWORKS) - error_flag = RTW_NONE_NETWORK; - - else if (rtw_join_status == 0) - error_flag = RTW_CONNECT_FAIL; - - else if (rtw_join_status == (JOIN_COMPLETE | JOIN_SECURITY_COMPLETE - | JOIN_ASSOCIATED | JOIN_AUTHENTICATED | JOIN_LINK_READY)) - error_flag = RTW_WRONG_PASSWORD; - } - - } else { - if (error_flag == RTW_NO_ERROR) //wifi_disconn_hdl will be dispatched one more time after join_user_data = NULL add by frankie - error_flag = RTW_UNKNOWN; - } - - if (join_user_data != NULL) - rtw_up_sema(&join_user_data->join_sema); -#if CONFIG_DEBUG_LOG > 4 - info_printf("%s: Error flag is %d!\n", __func__, error_flag); -#endif -} - -#if CONFIG_EXAMPLE_WLAN_FAST_CONNECT -#define WLAN0_NAME "wlan0" // ????? - -void restore_wifi_info_to_flash() { - struct wlan_fast_reconnect * data_to_flash; - uint32_t channel = 0; - uint8_t index = 0; - uint8_t *ifname[1] = { WLAN0_NAME }; - rtw_wifi_setting_t setting; - //struct security_priv *psecuritypriv = &padapter->securitypriv; - //WLAN_BSSID_EX *pcur_bss = pmlmepriv->cur_network.network; - - data_to_flash = (struct wlan_fast_reconnect *) rtw_zmalloc( - sizeof(struct wlan_fast_reconnect)); - - if (data_to_flash && p_write_reconnect_ptr) { - if (wifi_get_setting((const char*) ifname[0], &setting) - || setting.mode == RTW_MODE_AP) { - printf(" %s():wifi_get_setting fail or ap mode\n", __func__); - return; - } - channel = setting.channel; - - rtw_memset(psk_essid[index], 0, sizeof(psk_essid[index])); - strncpy(psk_essid[index], setting.ssid, strlen(setting.ssid)); - switch (setting.security_type) { - case RTW_SECURITY_OPEN: - rtw_memset(psk_passphrase[index], 0, sizeof(psk_passphrase[index])); - rtw_memset(wpa_global_PSK[index], 0, sizeof(wpa_global_PSK[index])); - data_to_flash->security_type = RTW_SECURITY_OPEN; - break; - case RTW_SECURITY_WEP_PSK: - channel |= (setting.key_idx) << 28; - rtw_memset(psk_passphrase[index], 0, sizeof(psk_passphrase[index])); - rtw_memset(wpa_global_PSK[index], 0, sizeof(wpa_global_PSK[index])); - rtw_memcpy(psk_passphrase[index], setting.password, - sizeof(psk_passphrase[index])); - data_to_flash->security_type = RTW_SECURITY_WEP_PSK; - break; - case RTW_SECURITY_WPA_TKIP_PSK: - data_to_flash->security_type = RTW_SECURITY_WPA_TKIP_PSK; - break; - case RTW_SECURITY_WPA2_AES_PSK: - data_to_flash->security_type = RTW_SECURITY_WPA2_AES_PSK; - break; - default: - break; - } - - memcpy(data_to_flash->psk_essid, psk_essid[index], - sizeof(data_to_flash->psk_essid)); - if (strlen(psk_passphrase64) == 64) { - memcpy(data_to_flash->psk_passphrase, psk_passphrase64, - sizeof(data_to_flash->psk_passphrase)); - } else { - memcpy(data_to_flash->psk_passphrase, psk_passphrase[index], - sizeof(data_to_flash->psk_passphrase)); - } - memcpy(data_to_flash->wpa_global_PSK, wpa_global_PSK[index], - sizeof(data_to_flash->wpa_global_PSK)); - memcpy(&(data_to_flash->channel), &channel, 4); - - //call callback function in user program - p_write_reconnect_ptr((uint8_t *) data_to_flash, - sizeof(struct wlan_fast_reconnect)); - - } - if (data_to_flash) - rtw_free(data_to_flash); -} - -#endif - -int wext_set_bssid(const char *ifname, const uint8_t *bssid); -//----------------------------------------------------------------------------// -int wifi_connect( - unsigned char bssid[ETH_ALEN], - char use_bssid, // flag - char *ssid, - rtw_security_t security_type, - char *password, - int key_id, - void *semaphore) { - - int ssid_len = 0; - int password_len = 0; -// int bssid_len = 6; - xSemaphoreHandle join_semaphore; - rtw_result_t result = RTW_SUCCESS; - uint8_t wep_hex = 0; - uint8_t wep_pwd[14] = { 0 }; - - if ((rtw_join_status & JOIN_SIMPLE_CONFIG ) - || (rtw_join_status & JOIN_AIRKISS )) { - return RTW_ERROR; - } - - if(ssid) { - ssid_len = rtl_strlen(ssid); - if(ssid_len > NDIS_802_11_LENGTH_SSID) - ssid_len = NDIS_802_11_LENGTH_SSID; - } - if(password) { - password_len = rtl_strlen(password); - if(password_len > IW_PASSPHRASE_MAX_SIZE) - password_len = IW_PASSPHRASE_MAX_SIZE; - } - - rtw_join_status = 0; //clear for last connect status - error_flag = RTW_UNKNOWN; //clear for last connect status - internal_join_result_t *join_result = - (internal_join_result_t *) rtw_zmalloc( - sizeof(internal_join_result_t)); - if (!join_result) { -#if CONFIG_DEBUG_LOG > 3 - error_printf("%s: Can't malloc memory!\n", __func__); -#endif - return RTW_NOMEM; - } - if (ssid_len && ssid) { - join_result->network_info.ssid.len = ssid_len > 32 ? 32 : ssid_len; - rtw_memcpy(join_result->network_info.ssid.val, ssid, ssid_len); - } - if(bssid) rtw_memcpy(join_result->network_info.bssid.octet, bssid, ETH_ALEN); - - error_flag = RTW_UNKNOWN; //clear for last connect status - if ((((password_len > RTW_MAX_PSK_LEN) || (password_len < RTW_MIN_PSK_LEN)) - && ((security_type == RTW_SECURITY_WPA_TKIP_PSK) - || (security_type == RTW_SECURITY_WPA_AES_PSK) - || (security_type == RTW_SECURITY_WPA2_AES_PSK) - || (security_type == RTW_SECURITY_WPA2_TKIP_PSK) - || (security_type == RTW_SECURITY_WPA2_MIXED_PSK)))) { - error_flag = RTW_WRONG_PASSWORD; - return RTW_INVALID_KEY; - } - - if ((security_type == RTW_SECURITY_WEP_PSK) - || (security_type == RTW_SECURITY_WEP_SHARED)) { - if ((password_len != 5) && (password_len != 13) && (password_len != 10) - && (password_len != 26)) { - error_flag = RTW_WRONG_PASSWORD; - return RTW_INVALID_KEY; - } else { - - if (password_len == 10) { - - unsigned int g[5] = { 0 }; - uint8_t i = 0; - sscanf((const char*) password, "%02x%02x%02x%02x%02x", &g[0], - &g[1], &g[2], &g[3], &g[4]); - for (i = 0; i < 5; i++) - wep_pwd[i] = (uint8_t) g[i]; - wep_pwd[5] = '\0'; - password_len = 5; - wep_hex = 1; - } else if (password_len == 26) { - unsigned int g[13] = { 0 }; - uint8_t i = 0; - sscanf((const char*) password, "%02x%02x%02x%02x%02x%02x%02x" - "%02x%02x%02x%02x%02x%02x", &g[0], &g[1], &g[2], &g[3], - &g[4], &g[5], &g[6], &g[7], &g[8], &g[9], &g[10], - &g[11], &g[12]); - for (i = 0; i < 13; i++) - wep_pwd[i] = (uint8_t) g[i]; - wep_pwd[13] = '\0'; - password_len = 13; - wep_hex = 1; - } - } - } - - join_result->network_info.password_len = password_len; - - if (password_len) { - /* add \0 to the end */ - join_result->network_info.password = rtw_zmalloc(password_len + 1); - if (!join_result->network_info.password) { - result = RTW_NOMEM; -#if CONFIG_DEBUG_LOG > 3 - error_printf("%s: Can't malloc memory!\n", __func__); -#endif - goto error; - } - if (0 == wep_hex) - rtw_memcpy(join_result->network_info.password, password, - password_len); - else - rtw_memcpy(join_result->network_info.password, wep_pwd, - password_len); - - } - - join_result->network_info.security_type = security_type; - join_result->network_info.key_id = key_id; - - if (semaphore == NULL) { - rtw_init_sema(&join_result->join_sema, 0); - if (!join_result->join_sema) { - result = RTW_NORESOURCE; - goto error; - } - join_semaphore = join_result->join_sema; - } else { - join_result->join_sema = semaphore; - } - wifi_reg_event_handler(WIFI_EVENT_NO_NETWORK, wifi_no_network_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_CONNECT, wifi_connected_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_DISCONNECT, wifi_disconn_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_FOURWAY_HANDSHAKE_DONE, - wifi_handshake_done_hdl, NULL); - - rtw_network_info_t *pWifi = &join_result->network_info; - - if (wifi_connect_local(pWifi) == 0) { - uint16 flg = 0; - if(use_bssid) { - struct { - uint8_t bssid[ETH_ALEN + 2]; - void * p; - } bs = { 0 }; - memcpy(bs.bssid, pWifi->bssid.octet, ETH_ALEN); - for(int i = 0; i < ETH_ALEN; i++) { - flg += bs.bssid[i]; - } - if(flg == 0x5FA || flg == 0) { // 0x5FA = 6*0xff - use_bssid = 0; - flg = 0; - } - else { - use_bssid = 1; - wext_set_bssid(WLAN0_NAME, bs.bssid); - } - } - if(!use_bssid) { - wext_set_ssid(WLAN0_NAME, join_result->network_info.ssid.val, - join_result->network_info.ssid.len); - }; - } - join_user_data = join_result; - - if (semaphore == NULL) { -// for eap connection, timeout should be longer (default value in wpa_supplicant: 60s) -#ifdef CONFIG_ENABLE_EAP - if(get_eap_phase()) { - if(rtw_down_timeout_sema( &join_result->join_sema, 60000 ) == RTW_FALSE) { - printf("RTW API: Join bss timeout\n"); - if(password_len) { - rtw_free(join_result->network_info.password); - } - result = RTW_TIMEOUT; - goto error; - } else { - if(rltk_wlan_is_connected_to_ap( ) != RTW_SUCCESS) { - result = RTW_ERROR; - goto error; - } - } - } - else -#endif - if (rtw_down_timeout_sema(&join_result->join_sema, RTW_JOIN_TIMEOUT) - == RTW_FALSE) { - warning_printf("RTW API: Join bss timeout\n"); - if (password_len) { - rtw_free(join_result->network_info.password); - } - result = RTW_TIMEOUT; - goto error; - } else { - if (join_result->network_info.password_len) { - rtw_free(join_result->network_info.password); - } - if (rltk_wlan_is_connected_to_ap() != RTW_SUCCESS) { - result = RTW_ERROR; - goto error; - } - } - } - - result = RTW_SUCCESS; - -#if CONFIG_EXAMPLE_WLAN_FAST_CONNECT - restore_wifi_info_to_flash(); -#endif - - error: if (semaphore == NULL) { - rtw_free_sema(&join_semaphore); - } - join_user_data = NULL; - rtw_free((uint8_t*)join_result); - wifi_unreg_event_handler(WIFI_EVENT_CONNECT, wifi_connected_hdl); - wifi_unreg_event_handler(WIFI_EVENT_NO_NETWORK, wifi_no_network_hdl); - wifi_unreg_event_handler(WIFI_EVENT_FOURWAY_HANDSHAKE_DONE, - wifi_handshake_done_hdl); - return result; -} - -int wifi_disconnect(void) { - int ret = 0; - - //set MAC address last byte to 1 since driver will filter the mac with all 0x00 or 0xff - //add extra 2 zero byte for check of #@ in wext_set_bssid() - const uint8_t null_bssid[ETH_ALEN + 2] = { 0, 0, 0, 0, 0, 1, 0, 0 }; - - if (wext_set_bssid(WLAN0_NAME, null_bssid) < 0) { - error_printf("WEXT: Failed to set bogus BSSID to disconnect\n"); - ret = -1; - } - return ret; -} -//----------------------------------------------------------------------------// -int wifi_is_connected_to_ap(void) { - return rltk_wlan_is_connected_to_ap(); -} - -//----------------------------------------------------------------------------// -int wifi_is_up(rtw_interface_t interface) { - if (interface == RTW_AP_INTERFACE && wifi_mode == RTW_MODE_STA_AP) - return rltk_wlan_running(WLAN1_IDX); - return rltk_wlan_running(WLAN0_IDX); -} - -int wifi_is_ready_to_transceive(rtw_interface_t interface) { - switch (interface) { - case RTW_AP_INTERFACE: - return (wifi_is_up(interface) == RTW_TRUE) ? RTW_SUCCESS : RTW_ERROR; - - case RTW_STA_INTERFACE: - if (error_flag == RTW_NO_ERROR) - return RTW_SUCCESS; - break; - } - return RTW_ERROR; -} - -//----------------------------------------------------------------------------// -int wifi_set_mac_address(char * mac) { - char buf[13 + 17 + 1]; - rtw_memset(buf, 0, sizeof(buf)); - snprintf(buf, 13 + 17, "write_mac %s", mac); - return wext_private_command(WLAN0_NAME, buf, SHOW_PRIVATE_OUT); -} - -int wifi_get_mac_address(char * mac) { - int ret = 0; - char buf[32]; - rtw_memset(buf, 0, sizeof(buf)); - rtw_memcpy(buf, "read_mac", 8); - ret = wext_private_command_with_retval(WLAN0_NAME, buf, buf, 32); -#if SHOW_PRIVATE_OUT - rtl_printf("%s\n", buf); -#endif - strcpy(mac, buf); - return ret; -} - -//----------------------------------------------------------------------------// -int wifi_enable_powersave(void) { - return wext_enable_powersave(WLAN0_NAME, 1, 1); -} - -int wifi_disable_powersave(void) { - return wext_disable_powersave(WLAN0_NAME); -} - -#if 0 //Not ready -//----------------------------------------------------------------------------// -int wifi_get_txpower(int *poweridx) { - int ret; - // char buf[11]; - char buf[64]; - - rtw_memset(buf, 0, sizeof(buf)); - rtw_memcpy(buf, "txpower", 11); - ret = wext_private_command_with_retval(WLAN0_NAME, buf, buf, sizeof(buf)); -#if SHOW_PRIVATE_OUT - rtl_printf("%s\n", buf); -#endif - sscanf(buf, "%d", poweridx); - - return ret; -} - -int wifi_set_txpower(int poweridx) { - int ret; - char buf[24]; - - rtw_memset(buf, 0, sizeof(buf)); - snprintf(buf, 24, "txpower patha=%d,pathb=%d", poweridx, poweridx); // patha=%d,pathb=%d ? - ret = wext_private_command(WLAN0_NAME, buf, SHOW_PRIVATE_OUT); - - return ret; -} -#endif - -//----------------------------------------------------------------------------// -int wifi_get_associated_client_list(void * client_list_buffer, - uint16_t buffer_length) { - const char * ifname = WLAN0_NAME; - int ret = 0; - char buf[25]; - - if (wifi_mode == RTW_MODE_STA_AP) { - ifname = WLAN1_NAME; - } - - rtw_memset(buf, 0, sizeof(buf)); - snprintf(buf, 25, "get_client_list %x", client_list_buffer); - ret = wext_private_command(ifname, buf, SHOW_PRIVATE_OUT); - - return ret; -} - -//----------------------------------------------------------------------------// -int wifi_get_ap_info(rtw_bss_info_t * ap_info, rtw_security_t* security) { - const char * ifname = WLAN0_NAME; - int ret = 0; - char buf[24]; - - if (wifi_mode == RTW_MODE_STA_AP) { - ifname = WLAN1_NAME; - } - - rtw_memset(buf, 0, sizeof(buf)); - snprintf(buf, 24, "get_ap_info %x", ap_info); - ret = wext_private_command(ifname, buf, SHOW_PRIVATE_OUT); - - snprintf(buf, 24, "get_security"); - ret = wext_private_command_with_retval(ifname, buf, buf, 24); -#if SHOW_PRIVATE_OUT - rtl_printf("%s\n", buf); -#endif - sscanf(buf, "%d", security); - - return ret; -} - -extern int wext_get_drv_ability(const char *ifname, uint32_t *ability); - -int wifi_get_drv_ability(uint32_t *ability) { - return wext_get_drv_ability(WLAN0_NAME, (uint32_t *)ability); -} - -//----------------------------------------------------------------------------// -int wifi_set_country(rtw_country_code_t country_code) { - int ret; - - ret = wext_set_country(WLAN0_NAME, country_code); - - return ret; -} - -//----------------------------------------------------------------------------// -int wifi_set_channel_plan(uint8_t channel_plan) { - const char * ifname = WLAN0_NAME; - int ret = 0; - char buf[24]; - - rtw_memset(buf, 0, sizeof(buf)); - snprintf(buf, 24, "set_ch_plan %x", channel_plan); - ret = wext_private_command(ifname, buf, SHOW_PRIVATE_OUT); - return ret; -} - -//----------------------------------------------------------------------------// -int wifi_get_rssi(int *pRSSI) { - return wext_get_rssi(WLAN0_NAME, pRSSI); -} - -//----------------------------------------------------------------------------// -int wifi_set_channel(int channel) { - return wext_set_channel(WLAN0_NAME, channel); -} - -int wifi_get_channel(int *channel) { - return wext_get_channel(WLAN0_NAME, (uint8_t*) channel); -} - -//----------------------------------------------------------------------------// -int wifi_register_multicast_address(rtw_mac_t *mac) { - return wext_register_multicast_address(WLAN0_NAME, mac); -} - -int wifi_unregister_multicast_address(rtw_mac_t *mac) { - return wext_unregister_multicast_address(WLAN0_NAME, mac); -} - -//----------------------------------------------------------------------------// -void wifi_set_mib(void) { - // adaptivity - wext_set_adaptivity(RTW_ADAPTIVITY_DISABLE); -} - -//----------------------------------------------------------------------------// -int wifi_rf_on(void) { - int ret; - ret = rltk_wlan_rf_on(); - return ret; -} - -//----------------------------------------------------------------------------// -int wifi_rf_off(void) { - int ret; - ret = rltk_wlan_rf_off(); - return ret; -} - -//----------------------------------------------------------------------------// -int wifi_on(rtw_mode_t mode) { - int ret = 0; - int timeout = wifi_test_timeout_ms / wifi_test_timeout_step_ms; - int idx; - int devnum = 1; - static int event_init = 0; - - if (rltk_wlan_running(WLAN0_IDX)) { - warning_printf("WIFI is already running\n"); - return 0; - } - - if (event_init == 0) { - init_event_callback_list(); - event_init = 1; - } - - wifi_mode = mode; - - if (mode == RTW_MODE_STA_AP) - devnum = 2; - - // set wifi mib - wifi_set_mib(); - printf("Initializing WIFI ...\n"); - for (idx = 0; idx < devnum; idx++) { - ret = rltk_wlan_init(idx, mode); - if (ret < 0) - return ret; - } - for (idx = 0; idx < devnum; idx++) - rltk_wlan_start(idx); - - while (1) { - if (rltk_wlan_running(devnum - 1)) { - printf("WIFI initialized\n"); - /* - * printf("set country code here\n"); - * wifi_set_country(RTW_COUNTRY_US); - */ - break; - } - - if (timeout == 0) { - printf("ERROR: Init WIFI timeout!\n"); - break; - } - -// vTaskDelay(1 * configTICK_RATE_HZ); - vTaskDelay(wifi_test_timeout_step_ms / portTICK_RATE_MS); - - timeout--; - } - -#if CONFIG_INIC_EN - inic_start(); -#endif - - return ret; -} - -extern void dhcps_deinit(void); //#include "dhcps.h" - - -int wifi_off(void) { -// int ret = 0; - - uint32 timeout = xTaskGetTickCount(); - -#if CONFIG_LWIP_LAYER - dhcps_deinit(); - LwIP_DHCP(0, DHCP_STOP); - LwIP_DHCP(1, DHCP_STOP); -#endif - if ((rltk_wlan_running(WLAN0_IDX) == 0) - && (rltk_wlan_running(WLAN1_IDX) == 0)) { - info_printf("WIFI is not running\n"); - return 0; - } - info_printf("Deinitializing WIFI ...\n"); - -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - // @todo - extern void wpas_wps_deinit(); - wpas_wps_deinit(); -#endif - rltk_wlan_deinit(); - - while (1) { - if ((rltk_wlan_running(WLAN0_IDX) == 0) - && (rltk_wlan_running(WLAN1_IDX) == 0)) { -// info_printf("WIFI deinitialized\n"); - info_printf("WIFI deinitialized (%d ms)\n", xTaskGetTickCount() - timeout); - break; - } - if(xTaskGetTickCount() - timeout > wifi_test_timeout_ms/portTICK_RATE_MS) { - error_printf("WIFI deinitialized timeout!\n"); - break; - } - vTaskDelay(10 / portTICK_RATE_MS); - } - - wifi_mode = RTW_MODE_NONE; - -#if CONFIG_INIC_EN - inic_stop(); -#endif - - return 1; -} - -int wifi_set_power_mode(unsigned char ips_mode, unsigned char lps_mode) { - return wext_enable_powersave(WLAN0_NAME, ips_mode, lps_mode); -} - -int wifi_set_tdma_param(unsigned char slot_period, - unsigned char rfon_period_len_1, unsigned char rfon_period_len_2, - unsigned char rfon_period_len_3) { - return wext_set_tdma_param(WLAN0_NAME, slot_period, rfon_period_len_1, - rfon_period_len_2, rfon_period_len_3); -} - -int wifi_set_lps_dtim(unsigned char dtim) { - return wext_set_lps_dtim(WLAN0_NAME, dtim); -} - -int wifi_get_lps_dtim(unsigned char *dtim) { - return wext_get_lps_dtim(WLAN0_NAME, dtim); -} -//----------------------------------------------------------------------------// -/* -static void wifi_ap_sta_assoc_hdl(char* buf, int buf_len, int flags, - void* userdata) { - //USER TODO - debug_printf("ap_sta_assoc\n"); -} -static void wifi_ap_sta_disassoc_hdl(char* buf, int buf_len, int flags, - void* userdata) { - //USER TODO - debug_printf("ap_sta_disassoc\n"); -} -*/ - -int wifi_get_last_error(void) { - return error_flag; -} - - -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP -int wpas_wps_init(const char* ifname); -#endif - -extern int set_hidden_ssid(const char *ifname, uint8_t value); - -int wifi_start_ap(char *ssid, rtw_security_t security_type, char *password, int channel, char ssid_hidden) { - const char *ifname = WLAN0_NAME; - int ssid_len = 0; - int password_len = 0; - int ret = 0; - if(ssid) { - ssid_len = rtl_strlen(ssid); - if(ssid_len > NDIS_802_11_LENGTH_SSID) - ssid_len = NDIS_802_11_LENGTH_SSID; - } - if(password) { - password_len = rtl_strlen(password); - if(password_len > IW_PASSPHRASE_MAX_SIZE) - password_len = IW_PASSPHRASE_MAX_SIZE; - } - - if (wifi_mode == RTW_MODE_STA_AP) { - ifname = WLAN1_NAME; - } - - if (is_promisc_enabled()) - promisc_set(0, NULL, 0); -/* - wifi_unreg_event_handler(WIFI_EVENT_STA_ASSOC, wifi_ap_sta_assoc_hdl); - wifi_reg_event_handler(WIFI_EVENT_STA_ASSOC, wifi_ap_sta_assoc_hdl, NULL); - wifi_unreg_event_handler(WIFI_EVENT_STA_DISASSOC, wifi_ap_sta_disassoc_hdl); - wifi_reg_event_handler(WIFI_EVENT_STA_DISASSOC, wifi_ap_sta_disassoc_hdl, NULL); -*/ - ret = wext_set_mode(ifname, IW_MODE_MASTER); - if (ret < 0) - goto exit; - if(channel < 1 || channel > 14) channel = 1; - ret = wext_set_channel(ifname, channel); //Set channel before starting ap - if (ret < 0) - goto exit; - - if(security_type != RTW_SECURITY_OPEN) { // case RTW_SECURITY_WPA2_AES_PSK: - security_type = RTW_SECURITY_WPA2_AES_PSK; - ret = wext_set_auth_param(ifname, IW_AUTH_80211_AUTH_ALG, - IW_AUTH_ALG_OPEN_SYSTEM); - if (ret == 0) - ret = wext_set_key_ext(ifname, IW_ENCODE_ALG_CCMP, NULL, 0, 0, 0, 0, - NULL, 0); - if (ret == 0) - ret = wext_set_passphrase(ifname, (uint8_t*) password, password_len); - } - if (ret < 0) - goto exit; - - if(ssid_hidden) { - ret = set_hidden_ssid(ifname, 1); - if (ret < 0) - goto exit; - } - - ret = wext_set_ap_ssid(ifname, (uint8_t*) ssid, ssid_len); -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - wpas_wps_init(ifname); -#endif - exit: return ret; -} - -void wifi_scan_each_report_hdl(char* buf, int buf_len, int flags, void* userdata) { - int i = 0; - int j = 0; - int insert_pos = 0; - rtw_scan_result_t** result_ptr = (rtw_scan_result_t**) buf; - rtw_scan_result_t* temp = NULL; - - for (i = 0; i < scan_result_handler_ptr.scan_cnt; i++) { - if (CMP_MAC(scan_result_handler_ptr.pap_details[i]->BSSID.octet, - (*result_ptr)->BSSID.octet)) { - if ((*result_ptr)->signal_strength - > scan_result_handler_ptr.pap_details[i]->signal_strength) { - temp = scan_result_handler_ptr.pap_details[i]; - for (j = i - 1; j >= 0; j--) { - if (scan_result_handler_ptr.pap_details[j]->signal_strength - >= (*result_ptr)->signal_strength) - break; - else - scan_result_handler_ptr.pap_details[j + 1] = - scan_result_handler_ptr.pap_details[j]; - } - scan_result_handler_ptr.pap_details[j + 1] = temp; - scan_result_handler_ptr.pap_details[j + 1]->signal_strength = - (*result_ptr)->signal_strength; - } - memset(*result_ptr, 0, sizeof(rtw_scan_result_t)); - return; - } - } - - scan_result_handler_ptr.scan_cnt++; - - if (scan_result_handler_ptr.scan_cnt - > scan_result_handler_ptr.max_ap_size) { - scan_result_handler_ptr.scan_cnt = scan_result_handler_ptr.max_ap_size; - if ((*result_ptr)->signal_strength - > scan_result_handler_ptr.pap_details[scan_result_handler_ptr.max_ap_size - - 1]->signal_strength) { - rtw_memcpy( - scan_result_handler_ptr.pap_details[scan_result_handler_ptr.max_ap_size - - 1], *result_ptr, sizeof(rtw_scan_result_t)); - temp = - scan_result_handler_ptr.pap_details[scan_result_handler_ptr.max_ap_size - - 1]; - } else - return; - } else { - rtw_memcpy( - &scan_result_handler_ptr.ap_details[scan_result_handler_ptr.scan_cnt - - 1], *result_ptr, sizeof(rtw_scan_result_t)); - } - - for (i = 0; i < scan_result_handler_ptr.scan_cnt - 1; i++) { - if ((*result_ptr)->signal_strength - > scan_result_handler_ptr.pap_details[i]->signal_strength) - break; - } - insert_pos = i; - - for (i = scan_result_handler_ptr.scan_cnt - 1; i > insert_pos; i--) - scan_result_handler_ptr.pap_details[i] = - scan_result_handler_ptr.pap_details[i - 1]; - - if (temp != NULL) - scan_result_handler_ptr.pap_details[insert_pos] = temp; - else - scan_result_handler_ptr.pap_details[insert_pos] = - &scan_result_handler_ptr.ap_details[scan_result_handler_ptr.scan_cnt - - 1]; - rtw_memset(*result_ptr, 0, sizeof(rtw_scan_result_t)); -} - -void wifi_scan_done_hdl(char* buf, int buf_len, int flags, void* userdata) { - int i = 0; - rtw_scan_handler_result_t scan_result_report; - - for (i = 0; i < scan_result_handler_ptr.scan_cnt; i++) { - rtw_memcpy(&scan_result_report.ap_details, - scan_result_handler_ptr.pap_details[i], - sizeof(rtw_scan_result_t)); - scan_result_report.scan_complete = - scan_result_handler_ptr.scan_complete; - scan_result_report.user_data = scan_result_handler_ptr.user_data; - (*scan_result_handler_ptr.gscan_result_handler)(&scan_result_report); - } - - scan_result_handler_ptr.scan_complete = RTW_TRUE; - scan_result_report.scan_complete = RTW_TRUE; - (*scan_result_handler_ptr.gscan_result_handler)(&scan_result_report); - - rtw_free(scan_result_handler_ptr.ap_details); - rtw_free(scan_result_handler_ptr.pap_details); -#if SCAN_USE_SEMAPHORE - rtw_up_sema(&scan_result_handler_ptr.scan_semaphore); -#else - scan_result_handler_ptr.scan_running = 0; -#endif - wifi_unreg_event_handler(WIFI_EVENT_SCAN_RESULT_REPORT, - wifi_scan_each_report_hdl); - wifi_unreg_event_handler(WIFI_EVENT_SCAN_DONE, wifi_scan_done_hdl); - return; -} - -//int rtk_wifi_scan(char *buf, int buf_len, xSemaphoreHandle * semaphore) -int wifi_scan(rtw_scan_type_t scan_type, rtw_bss_type_t bss_type, - void* result_ptr) { - int ret; - scan_buf_arg * pscan_buf; - uint16_t flags = scan_type | (bss_type << 8); - if (result_ptr != NULL) { - pscan_buf = (scan_buf_arg *) result_ptr; - ret = wext_set_scan(WLAN0_NAME, (char*) pscan_buf->buf, - pscan_buf->buf_len, flags); - } else { - wifi_reg_event_handler(WIFI_EVENT_SCAN_RESULT_REPORT, - wifi_scan_each_report_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_SCAN_DONE, wifi_scan_done_hdl, NULL); - ret = wext_set_scan(WLAN0_NAME, NULL, 0, flags); - } - - if (ret == 0) { - if (result_ptr != NULL) { - ret = wext_get_scan(WLAN0_NAME, pscan_buf->buf, pscan_buf->buf_len); - } - } - return ret; -} - -int wifi_scan_networks_with_ssid( - int (results_handler)(char*buf, int buflen, char *ssid, void *user_data), - OUT void* user_data, IN int scan_buflen, IN char* ssid, IN int ssid_len) { - int scan_cnt = 0, add_cnt = 0; - scan_buf_arg scan_buf; - int ret; - - scan_buf.buf_len = scan_buflen; - scan_buf.buf = (char*) pvPortMalloc(scan_buf.buf_len); - if (!scan_buf.buf) { - printf("ERROR: Can't malloc memory(%d)\n", scan_buf.buf_len); - return RTW_NOMEM; - } - //set ssid - memset(scan_buf.buf, 0, scan_buf.buf_len); - memcpy(scan_buf.buf, &ssid_len, sizeof(int)); - memcpy(scan_buf.buf + sizeof(int), ssid, ssid_len); - - //Scan channel - if ((scan_cnt = (wifi_scan(RTW_SCAN_TYPE_ACTIVE, RTW_BSS_TYPE_ANY, - &scan_buf))) < 0) { - printf("ERROR: wifi scan failed\n"); - ret = RTW_ERROR; - } else { - if (NULL == results_handler) { - int plen = 0; - while (plen < scan_buf.buf_len) { - int len, rssi, ssid_len, i, security_mode; - int wps_password_id; - char *mac, *ssid; - //uint8_t *security_mode; - printf("\n"); - // len - len = (int) *(scan_buf.buf + plen); - printf("len = %d,\t", len); - // check end - if (len == 0) - break; - // mac - mac = scan_buf.buf + plen + 1; - printf("mac = "); - for (i = 0; i < 6; i++) - printf("%02x ", (uint8_t)*(mac+i)); - printf(",\t"); - // rssi - rssi = *(int*) (scan_buf.buf + plen + 1 + 6); - printf(" rssi = %d,\t", rssi); - // security_mode - security_mode = (int) *(scan_buf.buf + plen + 1 + 6 + 4); - switch (security_mode) { - case IW_ENCODE_ALG_NONE: - printf("sec = open ,\t"); - break; - case IW_ENCODE_ALG_WEP: - printf("sec = wep ,\t"); - break; - case IW_ENCODE_ALG_CCMP: - printf("sec = wpa/wpa2,\t"); - break; - } - // password id - wps_password_id = (int) *(scan_buf.buf + plen + 1 + 6 + 4 + 1); - printf("wps password id = %d,\t", wps_password_id); - - printf("channel = %d,\t", - *(scan_buf.buf + plen + 1 + 6 + 4 + 1 + 1)); - // ssid - ssid_len = len - 1 - 6 - 4 - 1 - 1 - 1; - ssid = scan_buf.buf + plen + 1 + 6 + 4 + 1 + 1 + 1; - printf("ssid = "); - for (i = 0; i < ssid_len; i++) - printf("%c", *(ssid + i)); - plen += len; - add_cnt++; - } - - printf("\nwifi_scan: add count = %d, scan count = %d\n", add_cnt, - scan_cnt); - } - ret = RTW_SUCCESS; - } - if (results_handler) - results_handler(scan_buf.buf, scan_buf.buf_len, ssid, user_data); - - if (scan_buf.buf) - vPortFree(scan_buf.buf); - - return ret; -} - -int wifi_scan_networks(rtw_scan_result_handler_t results_handler, void* user_data) { - unsigned int max_ap_size = 64; - -#if SCAN_USE_SEMAPHORE - rtw_bool_t result; - if(NULL == scan_result_handler_ptr.scan_semaphore) - rtw_init_sema(&scan_result_handler_ptr.scan_semaphore, 1); - -// scan_result_handler_ptr.scan_start_time = rtw_get_current_time(); - /* Initialise the semaphore that will prevent simultaneous access - cannot be a mutex, since - * we don't want to allow the same thread to start a new scan */ - result = (rtw_bool_t)rtw_down_timeout_sema(&scan_result_handler_ptr.scan_semaphore, SCAN_LONGEST_WAIT_TIME); - if ( result != RTW_TRUE ) - { - /* Return error result, but set the semaphore to work the next time */ - rtw_up_sema(&scan_result_handler_ptr.scan_semaphore); - return RTW_TIMEOUT; - } -#else - if (scan_result_handler_ptr.scan_running) { - int count = 100; - while (scan_result_handler_ptr.scan_running && count > 0) { - rtw_msleep_os(20); - count--; - } - if (count == 0) { - printf("WiFi: Scan is running. Wait 2s timeout.\n"); - return RTW_TIMEOUT; - } - } -// scan_result_handler_ptr.scan_start_time = rtw_get_current_time(); - scan_result_handler_ptr.scan_running = 1; -#endif - - scan_result_handler_ptr.gscan_result_handler = results_handler; - - scan_result_handler_ptr.max_ap_size = max_ap_size; - scan_result_handler_ptr.ap_details = (rtw_scan_result_t*) rtw_zmalloc( - max_ap_size * sizeof(rtw_scan_result_t)); - if (scan_result_handler_ptr.ap_details == NULL) { - goto err_exit; - } - rtw_memset(scan_result_handler_ptr.ap_details, 0, - max_ap_size * sizeof(rtw_scan_result_t)); - - scan_result_handler_ptr.pap_details = (rtw_scan_result_t**) rtw_zmalloc( - max_ap_size * sizeof(rtw_scan_result_t*)); - if (scan_result_handler_ptr.pap_details == NULL) - goto error2_with_result_ptr; - rtw_memset(scan_result_handler_ptr.pap_details, 0, max_ap_size); - - scan_result_handler_ptr.scan_cnt = 0; - - scan_result_handler_ptr.scan_complete = RTW_FALSE; - scan_result_handler_ptr.user_data = user_data; - - if (wifi_scan(RTW_SCAN_COMMAMD << 4 | RTW_SCAN_TYPE_ACTIVE, - RTW_BSS_TYPE_ANY, NULL) != RTW_SUCCESS) { - goto error1_with_result_ptr; - } - - return RTW_SUCCESS; - -error1_with_result_ptr: - rtw_free((uint8_t*)scan_result_handler_ptr.pap_details); - scan_result_handler_ptr.pap_details = NULL; - -error2_with_result_ptr: - rtw_free((uint8_t*)scan_result_handler_ptr.ap_details); - scan_result_handler_ptr.ap_details = NULL; - -err_exit: - rtw_memset((void *) &scan_result_handler_ptr, 0, - sizeof(scan_result_handler_ptr)); - return RTW_ERROR; -} -//----------------------------------------------------------------------------// -int wifi_set_pscan_chan(uint8_t * channel_list, uint8_t * pscan_config, uint8_t length) { - if (channel_list) - return wext_set_pscan_channel(WLAN0_NAME, channel_list, pscan_config, - length); - else - return -1; -} - -//----------------------------------------------------------------------------// -int wifi_get_setting(const char *ifname, rtw_wifi_setting_t *pSetting) { - int ret = 0; - int mode = 0; - unsigned short security = 0; - - memset(pSetting, 0, sizeof(rtw_wifi_setting_t)); - if (wext_get_mode(ifname, &mode) < 0) - ret = -1; - - switch (mode) { - case IW_MODE_MASTER: - pSetting->mode = RTW_MODE_AP; - break; - case IW_MODE_INFRA: - default: - pSetting->mode = RTW_MODE_STA; - break; - //default: - //printf("\r\n%s(): Unknown mode %d\n", __func__, mode); - //break; - } - - if (wext_get_ssid(ifname, pSetting->ssid) < 0) - ret = -1; - if (wext_get_channel(ifname, &pSetting->channel) < 0) - ret = -1; - if (wext_get_enc_ext(ifname, &security, &pSetting->key_idx, - pSetting->password) < 0) - ret = -1; - - switch (security) { - case IW_ENCODE_ALG_NONE: - pSetting->security_type = RTW_SECURITY_OPEN; - break; - case IW_ENCODE_ALG_WEP: - pSetting->security_type = RTW_SECURITY_WEP_PSK; - break; - case IW_ENCODE_ALG_TKIP: - pSetting->security_type = RTW_SECURITY_WPA_TKIP_PSK; - break; - case IW_ENCODE_ALG_CCMP: - pSetting->security_type = RTW_SECURITY_WPA2_AES_PSK; - break; - default: - break; - } - - if (security == IW_ENCODE_ALG_TKIP || security == IW_ENCODE_ALG_CCMP) - if (wext_get_passphrase(ifname, pSetting->password) < 0) - ret = -1; - - return ret; -} -//----------------------------------------------------------------------------// -extern char str_rom_57ch3Dch0A[]; // "=========================================================\n" 57 шт -int wifi_show_setting(const char *ifname, rtw_wifi_setting_t *pSetting) { - int ret = 0; - - printf("\nWIFI '%s' Setting:\n", ifname); - printf(&str_rom_57ch3Dch0A[25]); // "================================\n" - - switch (pSetting->mode) { - case RTW_MODE_AP: -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("AP:"); -#endif - printf("\tMODE => AP\n"); - break; - case RTW_MODE_STA: -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("STA:"); -#endif - printf("\tMODE => STATION\n"); - break; - default: -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("UNKNOWN,"); -#endif - printf("\tMODE => UNKNOWN\n"); - } -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("%s,%d,", pSetting->ssid, pSetting->channel); -#endif - printf("\tSSID => %s\n", pSetting->ssid); - printf("\tCHANNEL => %d\n", pSetting->channel); - - switch (pSetting->security_type) { - case RTW_SECURITY_OPEN: -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("OPEN,"); -#endif - printf("\tSECURITY => OPEN\n"); - break; - case RTW_SECURITY_WEP_PSK: -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("WEP,%d,", pSetting->key_idx); -#endif - printf("\tSECURITY => WEP\n"); - printf("\tKEY INDEX => %d\n", pSetting->key_idx); - break; - case RTW_SECURITY_WPA_TKIP_PSK: -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("TKIP,"); -#endif - printf("\tSECURITY => TKIP\n"); - break; - case RTW_SECURITY_WPA2_AES_PSK: -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("AES,"); -#endif - printf("\tSECURITY => AES\n"); - break; - default: -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("UNKNOWN,"); -#endif - printf("\tSECURITY => UNKNOWN\n"); - } - -#if CONFIG_EXAMPLE_UART_ATCMD - at_printf("%s,", pSetting->password); -#endif - printf("\tPASSWORD => %s\n", pSetting->password); -// printf("\n"); - - return ret; -} - -//----------------------------------------------------------------------------// -int wifi_set_network_mode(rtw_network_mode_t mode) { - if ((mode == RTW_NETWORK_B) || (mode == RTW_NETWORK_BG) - || (mode == RTW_NETWORK_BGN)) - return rltk_wlan_wireless_mode((unsigned char) mode); - - return -1; -} - -int wifi_set_wps_phase(unsigned char is_trigger_wps) { - return rltk_wlan_set_wps_phase(is_trigger_wps); -} - -//----------------------------------------------------------------------------// -int wifi_set_promisc(rtw_rcr_level_t enabled, - void (*callback)(unsigned char*, unsigned int, void*), - unsigned char len_used) { - return promisc_set(enabled, callback, len_used); -} - -void wifi_enter_promisc_mode() { - int mode = 0; - unsigned char ssid[33]; - - if (wifi_mode == RTW_MODE_STA_AP) { - wifi_off(); - vTaskDelay(wifi_test_timeout_step_ms / portTICK_RATE_MS); - wifi_on(RTW_MODE_PROMISC); - } else { - wext_get_mode(WLAN0_NAME, &mode); - - switch (mode) { - case IW_MODE_MASTER: //In AP mode - //rltk_wlan_deinit(); - wifi_off(); //modified by Chris Yang for iNIC - vTaskDelay(wifi_test_timeout_step_ms / portTICK_RATE_MS); - //rltk_wlan_init(0, RTW_MODE_PROMISC); - //rltk_wlan_start(0); - wifi_on(RTW_MODE_PROMISC); - break; - case IW_MODE_INFRA: //In STA mode - if (wext_get_ssid(WLAN0_NAME, ssid) > 0) - wifi_disconnect(); - } - } -} - -extern void dhcps_init(struct netif * pnetif); - -int wifi_restart_ap(unsigned char *ssid, rtw_security_t security_type, - unsigned char *password, int channel) { - unsigned char idx = 0; - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - struct netif * pnetif = &xnetif[0]; -#ifdef CONFIG_CONCURRENT_MODE - rtw_wifi_setting_t setting; - int sta_linked = 0; -#endif - - if (rltk_wlan_running(WLAN1_IDX)) { - idx = 1; - } - - // stop dhcp server - dhcps_deinit(); - -#ifdef CONFIG_CONCURRENT_MODE - if (idx > 0) { - sta_linked = wifi_get_setting(WLAN0_NAME, &setting); - wifi_off(); - vTaskDelay(wifi_test_timeout_step_ms / portTICK_RATE_MS); - wifi_on(RTW_MODE_STA_AP); - } else -#endif - { - IP4_ADDR(&ipaddr, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, - NETMASK_ADDR3); - IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - netif_set_addr(pnetif, &ipaddr, &netmask, &gw); - wifi_off(); - vTaskDelay(wifi_test_timeout_step_ms / portTICK_RATE_MS); - wifi_on(RTW_MODE_AP); - } - // start ap - if (wifi_start_ap((char*) ssid, security_type, (char*) password, channel, 0) < 0) { - printf("ERROR: Operation failed!\n"); - return -1; - } - -#if (INCLUDE_uxTaskGetStackHighWaterMark == 1) - printf("WebServer Thread: High Water Mark is %ld\n", uxTaskGetStackHighWaterMark(NULL)); -#endif -#ifdef CONFIG_CONCURRENT_MODE - // connect to ap if wlan0 was linked with ap - if (idx > 0 && sta_linked == 0) { - int ret; - printf("AP: ssid=%s\n", (char* )setting.ssid); - printf("AP: security_type=%d\n", setting.security_type); - printf("AP: password=%s\n", (char* )setting.password); - printf("AP: key_idx =%d\n", setting.key_idx); - ret = wifi_connect(NULL, 0 , (char*) setting.ssid, setting.security_type, - (char*) setting.password, setting.key_idx, NULL); - if (ret == RTW_SUCCESS) { -#if CONFIG_DHCP_CLIENT - /* Start DHCPClient */ - LwIP_DHCP(0, DHCP_START); -#endif -#if CONFIG_WLAN_CONNECT_CB - extern void connect_start(void); - connect_start(); -#endif - } - } -#endif -#if (INCLUDE_uxTaskGetStackHighWaterMark == 1) - printf("WebServer Thread: High Water Mark is %ld\n", uxTaskGetStackHighWaterMark(NULL)); -#endif - // start dhcp server - dhcps_init(&xnetif[idx]); - - return 0; -} - -#if CONFIG_AUTO_RECONNECT -extern void (*p_wlan_autoreconnect_hdl)(rtw_security_t, char*, int, char*, int, - int); - -struct wifi_autoreconnect_param { - rtw_security_t security_type; - char *ssid; - int ssid_len; - char *password; - int password_len; - int key_id; -}; - -static void wifi_autoreconnect_thread(void *param) { - int ret = RTW_ERROR; - struct wifi_autoreconnect_param *reconnect_param = - (struct wifi_autoreconnect_param *) param; - printf("auto reconnect ...\n"); - ret = wifi_connect( - NULL, - 0, - reconnect_param->ssid, - reconnect_param->security_type, - reconnect_param->password, - reconnect_param->key_id, - NULL); - if (ret == RTW_SUCCESS) { -#if CONFIG_LWIP_LAYER - -#if ATCMD_VER == ATVER_2 - if (dhcp_mode_sta == 2) { - struct netif * pnetif = &xnetif[0]; - LwIP_UseStaticIP(pnetif); - dhcps_init(pnetif); - } - else -#endif - { - LwIP_DHCP(0, DHCP_START); -#if LWIP_AUTOIP - uint8_t *ip = LwIP_GetIP(&xnetif[0]); - if ((ip[0] == 0) && (ip[1] == 0) && (ip[2] == 0) && (ip[3] == 0)) { - printf("IPv4 AUTOIP ...\n"); - LwIP_AUTOIP(&xnetif[0]); - } -#endif - } -#endif //#if CONFIG_LWIP_LAYER -#if CONFIG_WLAN_CONNECT_CB - extern void connect_start(void); - connect_start(); -#endif - } - vTaskDelete(NULL); -} - -void wifi_autoreconnect_hdl(rtw_security_t security_type, char *ssid, - int ssid_len, char *password, int password_len, int key_id) { - static struct wifi_autoreconnect_param param; - param.security_type = security_type; - param.ssid = ssid; - param.ssid_len = ssid_len; - param.password = password; - param.password_len = password_len; - param.key_id = key_id; - xTaskCreate(wifi_autoreconnect_thread, (const char * )"st_recon", 400, - ¶m, tskIDLE_PRIORITY + 1, NULL); -} - -int wifi_config_autoreconnect(uint8_t mode, uint8_t retyr_times, uint16_t timeout) { - p_wlan_autoreconnect_hdl = wifi_autoreconnect_hdl; - return wext_set_autoreconnect(WLAN0_NAME, mode, retyr_times, timeout); -} - -int wifi_set_autoreconnect(uint8_t mode) { - p_wlan_autoreconnect_hdl = wifi_autoreconnect_hdl; - return wifi_config_autoreconnect(mode, 3, 5);//default retry 2 times(limit is 3), timeout 5 seconds -} - -int wifi_get_autoreconnect(uint8_t *mode) { - return wext_get_autoreconnect(WLAN0_NAME, mode); -} -#endif - -#ifdef CONFIG_CUSTOM_IE -/* - * Example for custom ie - * - * uint8_t test_1[] = {221, 2, 2, 2}; - * uint8_t test_2[] = {221, 2, 1, 1}; - * cus_ie buf[2] = {{test_1, PROBE_REQ}, - * {test_2, PROBE_RSP | BEACON}}; - * uint8_t buf_test2[] = {221, 2, 1, 3} ; - * cus_ie buf_update = {buf_test2, PROBE_REQ}; - * - * add ie list - * static void cmd_add_ie(int argc, char **argv) - * { - * wifi_add_custom_ie((void *)buf, 2); - * } - * - * update current ie - * static void cmd_update_ie(int argc, char **argv) - * { - * wifi_update_custom_ie(&buf_update, 2); - * } - * - * delete all ie - * static void cmd_del_ie(int argc, char **argv) - * { - * wifi_del_custom_ie(); - * } - */ - -int wifi_add_custom_ie(void *cus_ie, int ie_num) { - return wext_add_custom_ie(WLAN0_NAME, cus_ie, ie_num); -} - -int wifi_update_custom_ie(void *cus_ie, int ie_index) { - return wext_update_custom_ie(WLAN0_NAME, cus_ie, ie_index); -} - -int wifi_del_custom_ie() { - return wext_del_custom_ie(WLAN0_NAME); -} - -#endif - -#ifdef CONFIG_PROMISC -extern void promisc_init_packet_filter(void); -extern int promisc_add_packet_filter(uint8_t filter_id, - rtw_packet_filter_pattern_t *patt, rtw_packet_filter_rule_e rule); -extern int promisc_enable_packet_filter(uint8_t filter_id); -extern int promisc_disable_packet_filter(uint8_t filter_id); -extern int promisc_remove_packet_filter(uint8_t filter_id); -void wifi_init_packet_filter() { - promisc_init_packet_filter(); -} - -int wifi_add_packet_filter(unsigned char filter_id, - rtw_packet_filter_pattern_t *patt, rtw_packet_filter_rule_e rule) { - return promisc_add_packet_filter(filter_id, patt, rule); -} - -int wifi_enable_packet_filter(unsigned char filter_id) { - return promisc_enable_packet_filter(filter_id); -} - -int wifi_disable_packet_filter(unsigned char filter_id) { - return promisc_disable_packet_filter(filter_id); -} - -int wifi_remove_packet_filter(unsigned char filter_id) { - return promisc_remove_packet_filter(filter_id); -} -#endif // CONFIG_PROMISC - -#ifdef CONFIG_AP_MODE - -extern int wext_enable_forwarding(const char *ifname); -int wifi_enable_forwarding(void) { - return wext_enable_forwarding(WLAN0_NAME); -} - -extern int wext_disable_forwarding(const char *ifname); -int wifi_disable_forwarding(void) { - return wext_disable_forwarding(WLAN0_NAME); -} - -#endif // CONFIG_AP_MODE - -/* API to set flag for concurrent mode wlan1 issue_deauth when channel switched by wlan0 - * usage: wifi_set_ch_deauth(0) -> wlan0 wifi_connect -> wifi_set_ch_deauth(1) - */ -#ifdef CONFIG_CONCURRENT_MODE - -extern int wext_set_ch_deauth(const char *ifname, uint8_t enable); -int wifi_set_ch_deauth(uint8_t enable) { - return wext_set_ch_deauth(WLAN1_NAME, enable); -} - -#endif - -//----------------------------------------------------------------------------// -#endif //#if CONFIG_WLAN diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_conf.h b/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_conf.h deleted file mode 100644 index b652189..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_conf.h +++ /dev/null @@ -1,712 +0,0 @@ -//----------------------------------------------------------------------------// -#ifndef __WIFI_CONF_API_H -#define __WIFI_CONF_API_H - -#include "FreeRTOS.h" -#include "wifi_constants.h" -#include "wifi_structures.h" -#include "wifi_util.h" -#include "wifi_ind.h" -#include - - -#ifdef __cplusplus - extern "C" { -#endif - - -/****************************************************** - * Macros - ******************************************************/ - -#define RTW_ENABLE_API_INFO - -#ifdef RTW_ENABLE_API_INFO - #define RTW_API_INFO(args) do {printf args;} while(0) -#else - #define RTW_API_INFO(args) -#endif - -#define MAC_ARG(x) ((uint8_t*)(x))[0],((uint8_t*)(x))[1],((uint8_t*)(x))[2],((uint8_t*)(x))[3],((uint8_t*)(x))[4],((uint8_t*)(x))[5] -#define CMP_MAC( a, b ) (((a[0])==(b[0]))&& \ - ((a[1])==(b[1]))&& \ - ((a[2])==(b[2]))&& \ - ((a[3])==(b[3]))&& \ - ((a[4])==(b[4]))&& \ - ((a[5])==(b[5]))) - -/****************************************************** - * Constants - ******************************************************/ -#define SCAN_LONGEST_WAIT_TIME (4500) - -#define wifi_test_timeout_step_ms 20 // ms -#define wifi_test_timeout_ms 2000 // ms - -#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" - -#define PSCAN_ENABLE 0x01 //enable for partial channel scan -#define PSCAN_FAST_SURVEY 0x02 //set to select scan time to FAST_SURVEY_TO, otherwise SURVEY_TO -#define PSCAN_SIMPLE_CONFIG 0x04 //set to select scan time to FAST_SURVEY_TO and resend probe request - -/****************************************************** - * Type Definitions - ******************************************************/ - -/** Scan result callback function pointer type - * - * @param result_ptr : A pointer to the pointer that indicates where to put the next scan result - * @param user_data : User provided data - */ -typedef void (*rtw_scan_result_callback_t)( rtw_scan_result_t** result_ptr, void* user_data ); -typedef rtw_result_t (*rtw_scan_result_handler_t)( rtw_scan_handler_result_t* malloced_scan_result ); - -/****************************************************** - * Structures - ******************************************************/ -typedef struct { - char *buf; - int buf_len; -} scan_buf_arg; - -/****************************************************** - * Structures - ******************************************************/ -#define SCAN_USE_SEMAPHORE 0 - -typedef struct internal_scan_handler{ - rtw_scan_result_t** pap_details; - rtw_scan_result_t * ap_details; - rtw_scan_result_handler_t gscan_result_handler; -#if SCAN_USE_SEMAPHORE - void * scan_semaphore; -#endif - // unsigned int scan_start_time; - void * user_data; - unsigned char scan_cnt; - unsigned char max_ap_size; - volatile unsigned char scan_complete; - volatile unsigned char scan_running; -} internal_scan_handler_t; - -typedef struct { - rtw_network_info_t network_info; - void *join_sema; -} internal_join_result_t; - -/****************************************************** - * Function Declarations - ******************************************************/ -/** - * Initialises Realtek WiFi API System - * - * - Initialises the required parts of the software platform - * i.e. worker, event registering, semaphore, etc. - * - * - Initialises the RTW API thread which handles the asynchronous event - * - * @return RTW_SUCCESS if initialization is successful, RTW_ERROR otherwise - */ -int wifi_manager_init(void); - -/** Joins a Wi-Fi network - * - * Scans for, associates and authenticates with a Wi-Fi network. - * On successful return, the system is ready to send data packets. - * - * @param[in] ssid : A null terminated string containing the SSID name of the network to join - * @param[in] security_type : Authentication type: - * - RTW_SECURITY_OPEN - Open Security - * - RTW_SECURITY_WEP_PSK - WEP Security with open authentication - * - RTW_SECURITY_WEP_SHARED - WEP Security with shared authentication - * - RTW_SECURITY_WPA_TKIP_PSK - WPA Security - * - RTW_SECURITY_WPA2_AES_PSK - WPA2 Security using AES cipher - * - RTW_SECURITY_WPA2_TKIP_PSK - WPA2 Security using TKIP cipher - * - RTW_SECURITY_WPA2_MIXED_PSK - WPA2 Security using AES and/or TKIP ciphers - * @param[in] password : A byte array containing either the - * cleartext security key for WPA/WPA2 - * secured networks, or a pointer to - * an array of rtw_wep_key_t - * structures for WEP secured networks - * @param[in] ssid_len : The length of the SSID in - * bytes. - * @param[in] password_len : The length of the security_key in - * bytes. - * @param[in] key_id : The index of the wep key. - * @param[in] semaphore : A user provided semaphore that is flagged when the join is complete - * - * @return RTW_SUCCESS : when the system is joined and ready - * to send data packets - * RTW_ERROR : if an error occurred - */ -int wifi_connect( - unsigned char bssid[ETH_ALEN], - char use_bssid, - char *ssid, - rtw_security_t security_type, - char *password, - int key_id, - void *semaphore); -/* -int wifi_connect_bssid( - unsigned char bssid[ETH_ALEN], - char *ssid, - rtw_security_t security_type, - char *password, - int bssid_len, - int ssid_len, - int password_len, - int key_id, - void *semaphore); -*/ -/** Disassociates from a Wi-Fi network. - * - * @return RTW_SUCCESS : On successful disassociation from - * the AP - * RTW_ERROR : If an error occurred -*/ -int wifi_disconnect(void); - -/** Check if the interface specified is up. - * - * @return RTW_TRUE : If it's up - * RTW_FALSE : If it's not -*/ -int wifi_is_connected_to_ap(void); - -/*check if wifi has connected to AP before dhcp -* -* @return RTW_SUCCESS:if conneced - RTW_ERROR :if not connect -*/ -int wifi_is_up(rtw_interface_t interface); - -/** Determines if a particular interface is ready to transceive ethernet packets - * - * @param Radio interface to check, options are - * RTW_STA_INTERFACE, RTW_AP_INTERFACE - * @return RTW_SUCCESS : if the interface is ready to - * transceive ethernet packets - * @return RTW_NOTFOUND : no AP with a matching SSID was - * found - * @return RTW_NOT_AUTHENTICATED: a matching AP was found but - * it won't let you - * authenticate. This can - * occur if this device is - * in the block list on the - * AP. - * @return RTW_NOT_KEYED: the device has authenticated and - * associated but has not completed - * the key exchange. This can occur - * if the passphrase is incorrect. - * @return RTW_ERROR : if the interface is not ready to - * transceive ethernet packets - */ -int wifi_is_ready_to_transceive(rtw_interface_t interface); - -/** ---------------------------------------------------------------------- - * WARNING : This function is for internal use only! - * ---------------------------------------------------------------------- - * This function sets the current Media Access Control (MAC) address of the - * 802.11 device. - * - * @param[in] mac Wi-Fi MAC address - * @return RTW_SUCCESS or RTW_ERROR - */ -int wifi_set_mac_address(char * mac); - -/** Retrieves the current Media Access Control (MAC) address - * (or Ethernet hardware address) of the 802.11 device - * - * @param mac Pointer to a variable that the current MAC address will be written to - * @return RTW_SUCCESS or RTW_ERROR - */ -int wifi_get_mac_address(char * mac); - -/** Enables powersave mode - * - * @return @ref rtw_result_t - */ -int wifi_enable_powersave(void); - -/** Disables 802.11 power save mode - * - * @return RTW_SUCCESS : if power save mode was successfully - * disabled - * RTW_ERROR : if power save mode was not successfully - * disabled - */ -int wifi_disable_powersave(void); - -/** Gets the tx power in index units - * - * @param dbm : The variable to receive the tx power in index. - * - * @return RTW_SUCCESS : if successful - * RTW_ERROR : if not successful - */ -int wifi_get_txpower(int *poweridx); - -/** Sets the tx power in index units - * - * @param dbm : The desired tx power in index. - * - * @return RTW_SUCCESS : if tx power was successfully set - * RTW_ERROR : if tx power was not successfully set - */ -int wifi_set_txpower(int poweridx); - -/** Get the associated clients with SoftAP - * - * @param client_list_buffer : the location where the client - * list will be stored - * @param buffer_length : the buffer length. - * - * @return RTW_SUCCESS : if result was successfully get - * RTW_ERROR : if result was not successfully get - */ -int wifi_get_associated_client_list(void * client_list_buffer, unsigned short buffer_length); - -/** Get the SoftAP information - * - * @param ap_info : the location where the AP info will be - * stored - * @param security : the security type. - * - * @return RTW_SUCCESS : if result was successfully get - * RTW_ERROR : if result was not successfully get - */ -int wifi_get_ap_info(rtw_bss_info_t * ap_info, rtw_security_t* security); - -/** Set the country code to driver to determine the channel set - * - * @param country_code : the country code. - * - * @return RTW_SUCCESS : if result was successfully set - * RTW_ERROR : if result was not successfully set - */ -int wifi_set_country(rtw_country_code_t country_code); - -/** Retrieve the latest RSSI value - * - * @param rssi: The location where the RSSI value will be stored - * - * @return RTW_SUCCESS : if the RSSI was succesfully retrieved - * RTW_ERROR : if the RSSI was not retrieved - */ -int wifi_get_rssi(int *pRSSI); - -/** Set the current channel on STA interface - * - * @param channel : The desired channel - * - * @return RTW_SUCCESS : if the channel was successfully set - * RTW_ERROR : if the channel was not successfully - * set - */ -int wifi_set_channel(int channel); - -/** Get the current channel on STA interface - * - * @param channel : A pointer to the variable where the - * channel value will be written - * - * @return RTW_SUCCESS : if the channel was successfully read - * RTW_ERROR : if the channel was not successfully - * read - */ -int wifi_get_channel(int *channel); - -/** Registers interest in a multicast address - * Once a multicast address has been registered, all packets detected on the - * medium destined for that address are forwarded to the host. - * Otherwise they are ignored. - * - * @param mac: Ethernet MAC address - * - * @return RTW_SUCCESS : if the address was registered - * successfully - * RTW_ERROR : if the address was not registered - */ -int wifi_register_multicast_address(rtw_mac_t *mac); - -/** Unregisters interest in a multicast address - * Once a multicast address has been unregistered, all packets detected on the - * medium destined for that address are ignored. - * - * @param mac: Ethernet MAC address - * - * @return RTW_SUCCESS : if the address was unregistered - * successfully - * RTW_ERROR : if the address was not unregistered - */ -int wifi_unregister_multicast_address(rtw_mac_t *mac); - -int wifi_rf_on(void); -int wifi_rf_off(void); - -/** Turn on the Wi-Fi device - * - * - Bring the Wireless interface "Up" - * - Initialises the driver thread which arbitrates access - * to the SDIO/SPI bus - * - * @param mode: wifi work mode - * - * @return RTW_SUCCESS : if the WiFi chip was initialised - * successfully - * RTW_ERROR : if the WiFi chip was not initialised - * successfully - */ -int wifi_on(rtw_mode_t mode); - -/** - * Turn off the Wi-Fi device - * - * - Bring the Wireless interface "Down" - * - De-Initialises the driver thread which arbitrates access - * to the SDIO/SPI bus - * - * @return RTW_SUCCESS if deinitialization is successful, - * RTW_ERROR otherwise - */ -int wifi_off(void); - -/** - * Set IPS/LPS mode - * - * @param[in] ips_mode : The desired IPS mode. It become effective when wlan enter ips. - * @param[in] lps_mode : The desired LPS mode. It become effective when wlan enter lps. - * - * @return RTW_SUCCESS if setting LPS mode successful - * RTW_ERROR otherwise - */ -int wifi_set_power_mode(unsigned char ips_mode, unsigned char lps_mode); - -/** - * Set TDMA parameters - * - * @param[in] slot_period : We separate TBTT into 2 or 3 slots. - * If we separate TBTT into 2 slots, then slot_period should be larger or equal to 50ms. - * It means 2 slot period is - * slot_period, 100-slot_period - * If we separate TBTT into 3 slots, then slot_period should be less or equal to 33ms. - * It means 3 slot period is - * 100 - 2 * slot_period, slot_period, slot_period - * @param[in] rfon_period_len_1: rf on period of slot 1 - * @param[in] rfon_period_len_2: rf on period of slot 2 - * @param[in] rfon_period_len_3: rf on period of slot 3 - * - * @return RTW_SUCCESS if setting TDMA parameters successful - * RTW_ERROR otherwise - */ -int wifi_set_tdma_param(unsigned char slot_period, unsigned char rfon_period_len_1, unsigned char rfon_period_len_2, unsigned char rfon_period_len_3); - -/** - * Set LPS DTIM - * - * @param[in] dtim : In LPS, the package can be buffered at AP side. - * STA leave LPS until dtim count of packages buffered at AP side. - * - * @return RTW_SUCCESS if setting LPS dtim successful - * RTW_ERROR otherwise - */ -int wifi_set_lps_dtim(unsigned char dtim); -/** - * Get LPS DTIM - * - * @param[out] dtim : In LPS, the package can be buffered at AP side. - * STA leave LPS until dtim count of packages buffered at AP side. - * - * @return RTW_SUCCESS if getting LPS dtim successful - * RTW_ERROR otherwise - */ -int wifi_get_lps_dtim(unsigned char *dtim); - -/** Starts an infrastructure WiFi network - * - * @warning If a STA interface is active when this function is called, the softAP will\n - * start on the same channel as the STA. It will NOT use the channel provided! - * - * @param[in] ssid : A null terminated string containing - * the SSID name of the network to join - * @param[in] security_type : Authentication type: \n - * - RTW_SECURITY_OPEN - Open Security \n - * - RTW_SECURITY_WPA_TKIP_PSK - WPA Security \n - * - RTW_SECURITY_WPA2_AES_PSK - WPA2 Security using AES cipher \n - * - RTW_SECURITY_WPA2_MIXED_PSK - WPA2 Security using AES and/or TKIP ciphers \n - * - WEP security is NOT IMPLEMENTED. It is NOT SECURE! \n - * @param[in] password : A byte array containing the cleartext - * security key for the network - * @param[in] ssid_len : The length of the SSID in - * bytes. - * @param[in] password_len : The length of the security_key in - * bytes. - * @param[in] channel : 802.11 channel number - * - * @return RTW_SUCCESS : if successfully creates an AP - * RTW_ERROR : if an error occurred - */ -int wifi_start_ap(char *ssid, rtw_security_t security_type, char *password, int channel, char ssid_hidden); -/* -int wifi_start_ap( - char *ssid, - rtw_security_t security_type, - char *password, - int ssid_len, - int password_len, - int channel); -*/ -/** Starts an infrastructure WiFi network with hidden SSID - * - * @warning If a STA interface is active when this function is called, the softAP will\n - * start on the same channel as the STA. It will NOT use the channel provided! - * - * @param[in] ssid : A null terminated string containing - * the SSID name of the network to join - * @param[in] security_type : Authentication type: \n - * - RTW_SECURITY_OPEN - Open Security \n - * - RTW_SECURITY_WPA_TKIP_PSK - WPA Security \n - * - RTW_SECURITY_WPA2_AES_PSK - WPA2 Security using AES cipher \n - * - RTW_SECURITY_WPA2_MIXED_PSK - WPA2 Security using AES and/or TKIP ciphers \n - * - WEP security is NOT IMPLEMENTED. It is NOT SECURE! \n - * @param[in] password : A byte array containing the cleartext - * security key for the network - * @param[in] ssid_len : The length of the SSID in - * bytes. - * @param[in] password_len : The length of the security_key in - * bytes. - * @param[in] channel : 802.11 channel number - * - * @return RTW_SUCCESS : if successfully creates an AP - * RTW_ERROR : if an error occurred - */ -/* -int wifi_start_ap_with_hidden_ssid( - char *ssid, - rtw_security_t security_type, - char *password, - int ssid_len, - int password_len, - int channel); -*/ -/** Initiates a scan to search for 802.11 networks. - * - * The scan progressively accumulates results over time, and - * may take between 1 and 3 seconds to complete. The results of - * the scan will be individually provided to the callback - * function. Note: The callback function will be executed in - * the context of the RTW thread. - * - * @param[in] scan_type : Specifies whether the scan should - * be Active, Passive or scan - * Prohibited channels - * @param[in] bss_type : Specifies whether the scan should - * search for Infrastructure - * networks (those using an Access - * Point), Ad-hoc networks, or both - * types. - * @param result_ptr[in] : Scan specific ssid. The first 4 - * bytes is ssid lenth, and ssid name - * append after it. - * If no specific ssid need to scan, - * PLEASE CLEAN result_ptr before pass - * it into parameter. - * @param result_ptr[out] : a pointer to a pointer to a result - * storage structure. - * - * @note : When scanning specific channels, devices with a - * strong signal strength on nearby channels may be - * detected - * - * @return RTW_SUCCESS or RTW_ERROR - */ -int wifi_scan(rtw_scan_type_t scan_type, - rtw_bss_type_t bss_type, - void* result_ptr); - -/** Initiates a scan to search for 802.11 networks, a higher - * level API based on wifi_scan to simplify the scan - * operation. - * - * The scan results will be list by the order of RSSI. - * It may demand hundreds bytes memory during scan - * processing according to the quantity of AP nearby. - * - * @param results_handler[in] : the callback function which - * will receive and process the result data. - * @param user_data[in] : user specific data that will be - * passed directly to the callback function - * - * @note : Callback must not use blocking functions, since it is - * called from the context of the RTW thread. - * @note : The callback, user_data variables will - * be referenced after the function returns. Those - * variables must remain valid until the scan is - * complete. - * - * @return RTW_SUCCESS or RTW_ERROR - */ -int wifi_scan_networks(rtw_scan_result_handler_t results_handler, void* user_data); -int wifi_scan_networks_with_ssid(int (results_handler)(char*, int, char *, void *), void* user_data, int scan_buflen, char* ssid, int ssid_len); - -/** Set the partical scan - * - * @param channel_list[in] : the channel set the scan will - * stay on - * @param pscan_config[in] : the pscan_config of the channel set - * - * @param length[in] : the channel list length - * - * @return RTW_SUCCESS or RTW_ERROR - */ -int wifi_set_pscan_chan(uint8_t * channel_list,uint8_t * pscan_config, uint8_t length); - -/** Get the network information - * - * @param ifname[in] : the name of the interface we are care - * @param pSetting[in] : the location where the network - * information will be stored - * - * @return RTW_SUCCESS or RTW_ERROR - */ -int wifi_get_setting(const char *ifname, rtw_wifi_setting_t *pSetting); - -/** Show the network information - * - * @param ifname[in] : the name of the interface we are care - * @param pSetting[in] : the location where the network - * information was stored - * - * @return RTW_SUCCESS or RTW_ERROR - */ -int wifi_show_setting(const char *ifname,rtw_wifi_setting_t *pSetting); - -/** Set the network mode according to the data rate it's - * supported - * - * @param mode[in] : the network mode - * - * @return RTW_SUCCESS or RTW_ERROR - */ -int wifi_set_network_mode(rtw_network_mode_t mode); - -/** Set the chip to worke in the promisc mode - * - * @param enabled[in] : enabled can be set 0, 1 and 2. if enabled is zero, disable the promisc, else enable the promisc. - * 0 means disable the promisc - * 1 means enable the promisc - * 2 means enable the promisc special for length is used - * @param callback[in] : the callback function which will - * receive and process the netowork data. - * @param len_used[in] : specify if the the promisc length is - * used. - * - * @return RTW_SUCCESS or RTW_ERROR - */ -int wifi_set_promisc(rtw_rcr_level_t enabled, void (*callback)(unsigned char*, unsigned int, void*), unsigned char len_used); - -/** Set the wps phase - * - * @param is_trigger_wps[in] : to trigger wps function or not - * - * @return RTW_SUCCESS or RTW_ERROR - */ -int wifi_set_wps_phase(unsigned char is_trigger_wps); - -/** Restarts an infrastructure WiFi network - * - * @warning If a STA interface is active when this function is called, the softAP will\n - * start on the same channel as the STA. It will NOT use the channel provided! - * - * @param[in] ssid : A null terminated string containing - * the SSID name of the network to join - * @param[in] security_type : Authentication type: \n - * - RTW_SECURITY_OPEN - Open Security \n - * - RTW_SECURITY_WPA_TKIP_PSK - WPA Security \n - * - RTW_SECURITY_WPA2_AES_PSK - WPA2 Security using AES cipher \n - * - RTW_SECURITY_WPA2_MIXED_PSK - WPA2 Security using AES and/or TKIP ciphers \n - * - WEP security is NOT IMPLEMENTED. It is NOT SECURE! \n - * @param[in] password : A byte array containing the cleartext - * security key for the network - * @param[in] ssid_len : The length of the SSID in - * bytes. - * @param[in] password_len : The length of the security_key in - * bytes. - * @param[in] channel : 802.11 channel number - * - * @return RTW_SUCCESS : if successfully creates an AP - * RTW_ERROR : if an error occurred - */ -int wifi_restart_ap( - unsigned char *ssid, - rtw_security_t security_type, - unsigned char *password, - int channel); - -int wifi_config_autoreconnect(uint8_t mode, uint8_t retyr_times, uint16_t timeout); -int wifi_set_autoreconnect(uint8_t mode); -int wifi_get_autoreconnect(uint8_t *mode); -int wifi_get_last_error(void); -/** Present device disconnect reason while connecting -* -*@return RTW_NO_ERROR = 0, -* RTW_NONE_NETWORK = 1, -* RTW_CONNECT_FAIL = 2, -* RTW_WRONG_PASSWORD = 3 , -* RTW_DHCP_FAIL = 4, -* RTW_UNKNOWN, initial status -*/ - - -#ifdef CONFIG_CUSTOM_IE -#ifndef BIT -#define BIT(x) ((uint32_t)1 << (x)) -#endif - -#ifndef _CUSTOM_IE_TYPE_ -#define _CUSTOM_IE_TYPE_ -enum CUSTOM_IE_TYPE{ - PROBE_REQ = BIT(0), - PROBE_RSP = BIT(1), - BEACON = BIT(2), -}; -#endif /* _CUSTOM_IE_TYPE_ */ - -/* ie format - * +-----------+--------+-----------------------+ - * |element ID | length | content in length byte| - * +-----------+--------+-----------------------+ - * - * type: refer to CUSTOM_IE_TYPE - */ -#ifndef _CUS_IE_ -#define _CUS_IE_ -typedef struct _cus_ie{ - uint8_t *ie; - uint8_t type; -} cus_ie, *p_cus_ie; -#endif /* _CUS_IE_ */ - -int wifi_add_custom_ie(void *cus_ie, int ie_num); - -int wifi_update_custom_ie(void *cus_ie, int ie_index); - -int wifi_del_custom_ie(void); -#endif - -#ifdef CONFIG_PROMISC -void wifi_init_packet_filter(void); -int wifi_add_packet_filter(unsigned char filter_id, rtw_packet_filter_pattern_t *patt, rtw_packet_filter_rule_e rule); -int wifi_enable_packet_filter(unsigned char filter_id); -int wifi_disable_packet_filter(unsigned char filter_id); -int wifi_remove_packet_filter(unsigned char filter_id); -#endif - -#ifdef __cplusplus - } -#endif - -#endif // __WIFI_CONF_API_H - -//----------------------------------------------------------------------------// diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_ind.c b/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_ind.c deleted file mode 100644 index 431e1c4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_ind.c +++ /dev/null @@ -1,269 +0,0 @@ -//----------------------------------------------------------------------------// -#include "wifi/wifi_ind.h" -#include "wifi/wifi_conf.h" -#include "osdep_service.h" -#include "platform_stdlib.h" - -/****************************************************** - * Constants - ******************************************************/ - -#if CONFIG_DEBUG_LOG > 3 -#define WIFI_INDICATE_MSG 1 -#else -#define WIFI_INDICATE_MSG 0 -#endif -#define WIFI_MANAGER_STACKSIZE 400 // 1300 -#define WIFI_MANAGER_PRIORITY (0) //Actual priority is 4 since calling rtw_create_task -#define WIFI_MANAGER_Q_SZ 8 - -#define WIFI_EVENT_MAX_ROW 3 -/****************************************************** - * Globals - ******************************************************/ - -static event_list_elem_t event_callback_list[WIFI_EVENT_MAX][WIFI_EVENT_MAX_ROW]; -#if CONFIG_WIFI_IND_USE_THREAD -static rtw_worker_thread_t wifi_worker_thread; -#endif - -//----------------------------------------------------------------------------// -#if CONFIG_WIFI_IND_USE_THREAD -static rtw_result_t rtw_send_event_to_worker(int event_cmd, char *buf, - int buf_len, int flags) { - rtw_event_message_t message; - int i; - rtw_result_t ret = RTW_SUCCESS; - char *local_buf = NULL; - - if (event_cmd >= WIFI_EVENT_MAX) - return RTW_BADARG; - - for (i = 0; i < WIFI_EVENT_MAX_ROW; i++) { - if (event_callback_list[event_cmd][i].handler == NULL) - continue; - - message.function = - (event_handler_t) event_callback_list[event_cmd][i].handler; - message.buf_len = buf_len; - if (buf_len) { - local_buf = (char*) pvPortMalloc(buf_len); - if (local_buf == NULL) - return RTW_NOMEM; - memcpy(local_buf, buf, buf_len); - //debug_printf("Allocate %p(%d) for evcmd %d\n", local_buf, buf_len, event_cmd); - } - message.buf = local_buf; - message.flags = flags; - message.user_data = event_callback_list[event_cmd][i].handler_user_data; - - ret = rtw_push_to_xqueue(&wifi_worker_thread.event_queue, &message, 0); - if (ret != RTW_SUCCESS) { - if (local_buf) { - warning_printf( - "rtw_send_event_to_worker: enqueue cmd %d failed and free %p(%d)\n", - event_cmd, local_buf, buf_len); - vPortFree(local_buf); - } - break; - } - } - return ret; -} -#else -static rtw_result_t rtw_indicate_event_handle(int event_cmd, char *buf, int buf_len, int flags) -{ - rtw_event_handler_t handle = NULL; - int i; - - if(event_cmd >= WIFI_EVENT_MAX) - return RTW_BADARG; - - for(i = 0; i < WIFI_EVENT_MAX_ROW; i++) { - handle = event_callback_list[event_cmd][i].handler; - if(handle == NULL) - continue; - handle(buf, buf_len, flags, event_callback_list[event_cmd][i].handler_user_data); - } - - return RTW_SUCCESS; -} -#endif -#if 0 // test beacon -#include "gpio_api.h" // mbed -extern gpio_t gpio_led; -#endif - -void wifi_indication(WIFI_EVENT_INDICATE event, unsigned char *buf, int buf_len, - int flags) { - // - // If upper layer application triggers additional operations on receiving of wext_wlan_indicate, - // please strictly check current stack size usage (by using uxTaskGetStackHighWaterMark() ) - // , and tries not to share the same stack with wlan driver if remaining stack space is - // not available for the following operations. - // ex: using semaphore to notice another thread. - switch ((uint32_t)event) { - case WIFI_EVENT_DISCONNECT: -#if(WIFI_INDICATE_MSG>0) - info_printf("%s(%d): Disconnection indication received\n", __func__, event); -#endif - break; -#if(WIFI_INDICATE_MSG>0) - case WIFI_EVENT_CONNECT: - // For WPA/WPA2 mode, indication of connection does not mean data can be - // correctly transmitted or received. Data can be correctly transmitted or - // received only when 4-way handshake is done. - // Please check WIFI_EVENT_FOURWAY_HANDSHAKE_DONE event - // Sample: return mac address - if (buf != NULL && buf_len == 6) { - info_printf( - "%s(%d): Connect indication received: %02x:%02x:%02x:%02x:%02x:%02x\n", - __func__, event, buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]); - } - break; -#endif -#if(WIFI_INDICATE_MSG>0) - case WIFI_EVENT_FOURWAY_HANDSHAKE_DONE: - if (buf != NULL) - info_printf("%s(%d): %s\n", __func__, event, buf); - break; -#endif -#if(WIFI_INDICATE_MSG>0) - case WIFI_EVENT_SCAN_RESULT_REPORT: - info_printf("%s(%d): WIFI_EVENT_SCAN_RESULT_REPORT\n", __func__, event); - break; -#endif -#if(WIFI_INDICATE_MSG>0) - case WIFI_EVENT_SCAN_DONE: - info_printf("%s(%d): WIFI_EVENT_SCAN_DONE\n", __func__, event); -//#if CONFIG_DEBUG_LOG > 3 -// debug_printf("Time at start %d ms.\n", xTaskGetTickCount()); -//#endif - break; -#endif -#if(WIFI_INDICATE_MSG>0) - case WIFI_EVENT_RECONNECTION_FAIL: - info_printf("%s(%d): %s\n", __func__, event, buf); - break; -#endif -#if(WIFI_INDICATE_MSG>0) - case WIFI_EVENT_NO_NETWORK: - info_printf("%s(%d): %s\n", __func__, event, buf); - break; -#endif -#if CONFIG_ENABLE_P2P -#if(WIFI_INDICATE_MSG>0) - case WIFI_EVENT_SEND_ACTION_DONE: - info_printf("%s(%d): %s\n", __func__, event, buf); - break; -#endif -#if(WIFI_INDICATE_MSG>0) - case WIFI_EVENT_RX_MGNT: - info_printf("%s(%d): WIFI_EVENT_RX_MGNT\n", __func__, event); - break; -#endif -#endif //CONFIG_ENABLE_P2P -#if(WIFI_INDICATE_MSG>0) - case WIFI_EVENT_STA_ASSOC: - info_printf("%s(%d): WIFI_EVENT_STA_ASSOC\n", __func__, event); - break; -#endif -#if(WIFI_INDICATE_MSG>0) - case WIFI_EVENT_STA_DISASSOC: - info_printf("%s(%d): WIFI_EVENT_STA_DISASSOC\n", __func__, event); - break; -#endif -#ifdef CONFIG_WPS -#if(WIFI_INDICATE_MSG>0) - case WIFI_EVENT_STA_WPS_START: - info_printf("%s(%d): WIFI_EVENT_STA_WPS_START\n", __func__, event); - break; -#endif -#if(WIFI_INDICATE_MSG>0) - case WIFI_EVENT_WPS_FINISH: - info_printf("%s(%d): WIFI_EVENT_WPS_FINISH\n", __func__, event); - break; -#endif -#if(WIFI_INDICATE_MSG>0) - case WIFI_EVENT_EAPOL_RECVD: - info_printf("%s(%d): WIFI_EVENT_EAPOL_RECVD\n", __func__, event); - break; -#endif -#endif -#if(WIFI_INDICATE_MSG>1) - case WIFI_EVENT_BEACON_AFTER_DHCP: - info_printf("%s(%d): WIFI_EVENT_BEACON_AFTER_DHCP\n", __func__, event); -#if 0 // test beacon - gpio_write(&gpio_led, 1); - gpio_write(&gpio_led, 0); -#endif - break; -#endif - } - -#if CONFIG_INIC_EN - inic_indicate_event(event, buf, buf_len, flags); -#endif//CONFIG_INIC_EN - -#if CONFIG_WIFI_IND_USE_THREAD - rtw_send_event_to_worker(event, buf, buf_len, flags); -#else - rtw_indicate_event_handle(event, buf, buf_len, flags); -#endif -} - -void wifi_reg_event_handler(unsigned int event_cmds, - rtw_event_handler_t handler_func, void *handler_user_data) { - int i = 0, j = 0; - if (event_cmds < WIFI_EVENT_MAX) { - for (i = 0; i < WIFI_EVENT_MAX_ROW; i++) { - if (event_callback_list[event_cmds][i].handler == NULL) { - for (j = 0; j < WIFI_EVENT_MAX_ROW; j++) { - if (event_callback_list[event_cmds][j].handler - == handler_func) { - return; - } - } - event_callback_list[event_cmds][i].handler = handler_func; - event_callback_list[event_cmds][i].handler_user_data = - handler_user_data; - return; - } - } - } -} - -void wifi_unreg_event_handler(unsigned int event_cmds, - rtw_event_handler_t handler_func) { - int i; - if (event_cmds < WIFI_EVENT_MAX) { - for (i = 0; i < WIFI_EVENT_MAX_ROW; i++) { - if (event_callback_list[event_cmds][i].handler == handler_func) { - event_callback_list[event_cmds][i].handler = NULL; - event_callback_list[event_cmds][i].handler_user_data = NULL; - return; - } - } - } -} - -void init_event_callback_list() { - memset(event_callback_list, 0, sizeof(event_callback_list)); -} - -int wifi_manager_init() { -#if CONFIG_WIFI_IND_USE_THREAD - rtw_create_worker_thread(&wifi_worker_thread, - WIFI_MANAGER_PRIORITY, - WIFI_MANAGER_STACKSIZE, - WIFI_MANAGER_Q_SZ); -#endif - return 0; -} - -void rtw_wifi_manager_deinit() { -#if CONFIG_WIFI_IND_USE_THREAD - rtw_delete_worker_thread(&wifi_worker_thread); -#endif -} - diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_ind.h b/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_ind.h deleted file mode 100644 index 4fb7012..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_ind.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef _WIFI_INDICATE_H -#define _WIFI_INDICATE_H -#include "wifi_conf.h" - -typedef void (*rtw_event_handler_t)(char *buf, int buf_len, int flags, void* handler_user_data ); - -typedef struct -{ -// WIFI_EVENT_INDICATE event_cmd; - rtw_event_handler_t handler; - void* handler_user_data; -} event_list_elem_t; - -void init_event_callback_list(void); -extern void wifi_indication( rtw_event_indicate_t event, unsigned char *buf, int buf_len, int flags); -/** Register the event listener - * - * @param[in] event_cmds : The event command number indicated - * @param[in] handler_func : the callback function which will - * receive and process the event - * @param[in] handler_user_data : user specific data that will be - * passed directly to the callback function - * - * @note : Set the same event_cmds with empty handler_func will - * unregister the event_cmds - * - * @return RTW_SUCCESS : if successfully registers the event - * RTW_ERROR : if an error occurred - */ -extern void wifi_reg_event_handler(unsigned int event_cmds, rtw_event_handler_t handler_func, void *handler_user_data); -extern void wifi_unreg_event_handler(unsigned int event_cmds, rtw_event_handler_t handler_func); - -#endif //_WIFI_INDICATE_H - diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_promisc.c b/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_promisc.c deleted file mode 100644 index 2b76f5f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_promisc.c +++ /dev/null @@ -1,476 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include "main.h" -#include "tcpip.h" -#include "wifi/wifi_conf.h" -#include "wifi_simple_config_parser.h" - -#ifndef CONFIG_WLAN -#define CONFIG_WLAN 1 -#endif - -#if CONFIG_WLAN -#include - -#ifdef CONFIG_PROMISC - -#define _adapter void -#define recv_frame void -extern void _promisc_deinit(_adapter *padapter); -extern int _promisc_recv_func(_adapter *padapter, recv_frame *rframe); -extern int _promisc_set(rtw_rcr_level_t enabled, void (*callback)(unsigned char *, unsigned int, void *), unsigned char len_used); -extern unsigned char _is_promisc_enabled(void); -extern int _promisc_get_fixed_channel(void *fixed_bssid, unsigned char *ssid, int *ssid_length); - -#endif - -// Add extra interfaces to make release sdk able to determine promisc API linking -void promisc_deinit(void *padapter) -{ -#ifdef CONFIG_PROMISC - _promisc_deinit(padapter); -#endif -} - -int promisc_recv_func(void *padapter, void *rframe) -{ - // Never reach here if not define CONFIG_PROMISC -#ifdef CONFIG_PROMISC - return _promisc_recv_func(padapter, rframe); -#else - return 0; -#endif -} - -int promisc_set(rtw_rcr_level_t enabled, void (*callback)(unsigned char*, unsigned int, void*), unsigned char len_used) -{ -#ifdef CONFIG_PROMISC - return _promisc_set(enabled, callback, len_used); -#else - return -1; -#endif -} - -unsigned char is_promisc_enabled(void) -{ -#ifdef CONFIG_PROMISC - extern unsigned char _is_promisc_enabled(void); - return _is_promisc_enabled(); -#else - return 0; -#endif -} - -int promisc_get_fixed_channel(void *fixed_bssid, uint8_t *ssid, int *ssid_length) -{ -#ifdef CONFIG_PROMISC - extern int _promisc_get_fixed_channel(void *fixed_bssid, uint8_t *ssid, int *ssid_length); - return _promisc_get_fixed_channel(fixed_bssid, ssid, ssid_length); -#else - return 0; -#endif -} -// End of Add extra interfaces - -struct eth_frame { - struct eth_frame *prev; - struct eth_frame *next; - unsigned char da[6]; - unsigned char sa[6]; - unsigned int len; - unsigned char type; - signed char rssi; -}; - -#if CONFIG_INIC_CMD_RSP -#if defined(__IAR_SYSTEMS_ICC__) -#pragma pack(1) -#endif -struct inic_eth_frame { - unsigned char da[6]; - unsigned char sa[6]; - unsigned int len; - unsigned char type; -}; -#if defined(__IAR_SYSTEMS_ICC__) -#pragma pack() -#endif - -static struct inic_eth_frame *inic_frame, *inic_frame_tail = NULL; -static int inic_frame_cnt = 0; -#define MAX_INIC_FRAME_NUM 50 //maximum packets for each channel -extern void inic_c2h_msg(const char *atcmd, char status, char *msg, uint16_t msg_len); -#endif - -struct eth_buffer { - struct eth_frame *head; - struct eth_frame *tail; -}; - -static struct eth_buffer eth_buffer; - -#ifdef CONFIG_PROMISC -#define MAX_PACKET_FILTER_INFO 5 -#define FILTER_ID_INIT_VALUE 10 -rtw_packet_filter_info_t paff_array[MAX_PACKET_FILTER_INFO]; //={0, 0, 0, 0, 0}; -static uint8_t packet_filter_enable_num = 0; - -void promisc_init_packet_filter() -{ - int i = 0; - for(i=0; ioffset; - paff_array[i].patt.mask_size = patt->mask_size; - paff_array[i].patt.mask = pvPortMalloc(patt->mask_size); - memcpy(paff_array[i].patt.mask, patt->mask, patt->mask_size); - paff_array[i].patt.pattern= pvPortMalloc(patt->mask_size); - memcpy(paff_array[i].patt.pattern, patt->pattern, patt->mask_size); - - paff_array[i].rule = rule; - paff_array[i].enable = 0; - - return 0; -} - -int promisc_enable_packet_filter(uint8_t filter_id) -{ - int i = 0; - while(i < MAX_PACKET_FILTER_INFO){ - if(paff_array[i].filter_id == filter_id) - break; - i++; - } - - if(i == MAX_PACKET_FILTER_INFO) - return -1; - - paff_array[i].enable = 1; - packet_filter_enable_num++; - return 0; -} - -int promisc_disable_packet_filter(uint8_t filter_id) -{ - int i = 0; - while(i < MAX_PACKET_FILTER_INFO){ - if(paff_array[i].filter_id == filter_id) - break; - i++; - } - - if(i == MAX_PACKET_FILTER_INFO) - return -1; - - paff_array[i].enable = 0; - packet_filter_enable_num--; - return 0; -} - -int promisc_remove_packet_filter(uint8_t filter_id) -{ - int i = 0; - while(i < MAX_PACKET_FILTER_INFO){ - if(paff_array[i].filter_id == filter_id) - break; - i++; - } - - if(i == MAX_PACKET_FILTER_INFO) - return -1; - - paff_array[i].filter_id = FILTER_ID_INIT_VALUE; - paff_array[i].enable = 0; - paff_array[i].patt.mask_size = 0; - paff_array[i].rule = 0; - if(paff_array[i].patt.mask){ - vPortFree(paff_array[i].patt.mask); - paff_array[i].patt.mask = NULL; - } - - if(paff_array[i].patt.pattern){ - vPortFree(paff_array[i].patt.pattern); - paff_array[i].patt.pattern = NULL; - } - return 0; -} -#endif - -/* Make callback simple to prevent latency to wlan rx when promiscuous mode */ -static void promisc_callback(unsigned char *buf, unsigned int len, void* userdata) -{ - struct eth_frame *frame = (struct eth_frame *) pvPortMalloc(sizeof(struct eth_frame)); - - if(frame) { - frame->prev = NULL; - frame->next = NULL; - memcpy(frame->da, buf, 6); - memcpy(frame->sa, buf + 6, 6); - frame->len = len; - frame->rssi = ((ieee80211_frame_info_t *)userdata)->rssi; - taskENTER_CRITICAL(); - - if(eth_buffer.tail) { - eth_buffer.tail->next = frame; - frame->prev = eth_buffer.tail; - eth_buffer.tail = frame; - } - else { - eth_buffer.head = frame; - eth_buffer.tail = frame; - } - - taskEXIT_CRITICAL(); - } -} - -struct eth_frame* retrieve_frame(void) -{ - struct eth_frame *frame = NULL; - - taskENTER_CRITICAL(); - - if(eth_buffer.head) { - frame = eth_buffer.head; - - if(eth_buffer.head->next) { - eth_buffer.head = eth_buffer.head->next; - eth_buffer.head->prev = NULL; - } - else { - eth_buffer.head = NULL; - eth_buffer.tail = NULL; - } - } - - taskEXIT_CRITICAL(); - - return frame; -} - -static void promisc_test(int duration, unsigned char len_used) -{ - int ch; - unsigned int start_time; - struct eth_frame *frame; - eth_buffer.head = NULL; - eth_buffer.tail = NULL; - - wifi_enter_promisc_mode(); - wifi_set_promisc(RTW_PROMISC_ENABLE, promisc_callback, len_used); - - for(ch = 1; ch <= 13; ch ++) { - if(wifi_set_channel(ch) == 0) - printf("\n\n\rSwitch to channel(%d)", ch); - - start_time = xTaskGetTickCount(); - - while(1) { - unsigned int current_time = xTaskGetTickCount(); - - if((current_time - start_time) < (duration)) { // duration * configTICK_RATE_HZ - frame = retrieve_frame(); - - if(frame) { - int i; - printf("\n\rDA:"); - for(i = 0; i < 6; i ++) - printf(" %02x", frame->da[i]); - printf(", SA:"); - for(i = 0; i < 6; i ++) - printf(" %02x", frame->sa[i]); - printf(", len=%d", frame->len); - printf(", RSSI=%d", frame->rssi); -#if CONFIG_INIC_CMD_RSP - if(inic_frame_tail){ - if(inic_frame_cnt < MAX_INIC_FRAME_NUM){ - memcpy(inic_frame_tail->da, frame->da, 6); - memcpy(inic_frame_tail->sa, frame->sa, 6); - inic_frame_tail->len = frame->len; - inic_frame_tail++; - inic_frame_cnt++; - } - } -#endif - vPortFree((void *) frame); - } - else - vTaskDelay(1); //delay 1 tick - } - else - break; - } -#if CONFIG_INIC_CMD_RSP - if(inic_frame){ - inic_c2h_msg("ATWM", RTW_SUCCESS, (char *)inic_frame, sizeof(struct inic_eth_frame)*inic_frame_cnt); - memset(inic_frame, '\0', sizeof(struct inic_eth_frame)*MAX_INIC_FRAME_NUM); - inic_frame_tail = inic_frame; - inic_frame_cnt = 0; - rtw_msleep_os(10); - } -#endif - } - - wifi_set_promisc(RTW_PROMISC_DISABLE, NULL, 0); - - while((frame = retrieve_frame()) != NULL) - vPortFree((void *) frame); -} - -static void promisc_callback_all(unsigned char *buf, unsigned int len, void* userdata) -{ - struct eth_frame *frame = (struct eth_frame *) pvPortMalloc(sizeof(struct eth_frame)); - - if(frame) { - frame->prev = NULL; - frame->next = NULL; - memcpy(frame->da, buf+4, 6); - memcpy(frame->sa, buf+10, 6); - frame->len = len; - /* - * type is the first byte of Frame Control Field of 802.11 frame - * If the from/to ds information is needed, type could be reused as follows: - * frame->type = ((((ieee80211_frame_info_t *)userdata)->i_fc & 0x0100) == 0x0100) ? 2 : 1; - * 1: from ds; 2: to ds - */ - frame->type = *buf; - frame->rssi = ((ieee80211_frame_info_t *)userdata)->rssi; - - taskENTER_CRITICAL(); - - if(eth_buffer.tail) { - eth_buffer.tail->next = frame; - frame->prev = eth_buffer.tail; - eth_buffer.tail = frame; - } - else { - eth_buffer.head = frame; - eth_buffer.tail = frame; - } - - taskEXIT_CRITICAL(); - } -} -static void promisc_test_all(int duration, unsigned char len_used) -{ - int ch; - unsigned int start_time; - struct eth_frame *frame; - eth_buffer.head = NULL; - eth_buffer.tail = NULL; - - wifi_enter_promisc_mode(); - wifi_set_promisc(RTW_PROMISC_ENABLE_2, promisc_callback_all, len_used); - - for(ch = 1; ch <= 13; ch ++) { - if(wifi_set_channel(ch) == 0) - printf("\n\n\rSwitch to channel(%d)", ch); - - start_time = xTaskGetTickCount(); - - while(1) { - unsigned int current_time = xTaskGetTickCount(); - - if((current_time - start_time) < (duration)) { // duration * configTICK_RATE_HZ - frame = retrieve_frame(); - - if(frame) { - int i; - printf("\n\rTYPE: 0x%x, ", frame->type); - printf("DA:"); - for(i = 0; i < 6; i ++) - printf(" %02x", frame->da[i]); - printf(", SA:"); - for(i = 0; i < 6; i ++) - printf(" %02x", frame->sa[i]); - printf(", len=%d", frame->len); - printf(", RSSI=%d", frame->rssi); -#if CONFIG_INIC_CMD_RSP - if(inic_frame_tail){ - if(inic_frame_cnt < MAX_INIC_FRAME_NUM){ - memcpy(inic_frame_tail->da, frame->da, 6); - memcpy(inic_frame_tail->sa, frame->sa, 6); - inic_frame_tail->len = frame->len; - inic_frame_tail->type = frame->type; - inic_frame_tail++; - inic_frame_cnt++; - } - } -#endif - vPortFree((void *) frame); - } - else - vTaskDelay(1); //delay 1 tick - } - else - break; - } -#if CONFIG_INIC_CMD_RSP - if(inic_frame){ - inic_c2h_msg("ATWM", RTW_SUCCESS, (char *)inic_frame, sizeof(struct inic_eth_frame)*inic_frame_cnt); - memset(inic_frame, '\0', sizeof(struct inic_eth_frame)*MAX_INIC_FRAME_NUM); - inic_frame_tail = inic_frame; - inic_frame_cnt = 0; - rtw_msleep_os(10); - } -#endif - } - - wifi_set_promisc(RTW_PROMISC_DISABLE, NULL, 0); - - while((frame = retrieve_frame()) != NULL) - vPortFree((void *) frame); -} - -void cmd_promisc(int argc, char **argv) -{ - int duration; -#if CONFIG_INIC_CMD_RSP - inic_frame_tail = inic_frame = pvPortMalloc(sizeof(struct inic_eth_frame)*MAX_INIC_FRAME_NUM); - if(inic_frame == NULL){ - inic_c2h_msg("ATWM", RTW_BUFFER_UNAVAILABLE_TEMPORARY, NULL, 0); - return; - } -#endif -#ifdef CONFIG_PROMISC - wifi_init_packet_filter(); -#endif - if((argc == 2) && ((duration = atoi(argv[1])) > 0)) - //promisc_test(duration, 0); - promisc_test_all(duration, 0); - else if((argc == 3) && ((duration = atoi(argv[1])) > 0) && (strcmp(argv[2], "with_len") == 0)) - promisc_test(duration, 1); - else - printf("\n\rUsage: %s DURATION_MSECONDS [with_len]", argv[0]); -#if CONFIG_INIC_CMD_RSP - if(inic_frame) - vPortFree(inic_frame); - inic_frame_tail = NULL; - inic_frame_cnt = 0; -#endif -} -#endif //#if CONFIG_WLAN diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_simple_config.c b/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_simple_config.c deleted file mode 100644 index c9d85a7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_simple_config.c +++ /dev/null @@ -1,1086 +0,0 @@ -#include -#include -#include -#include "FreeRTOS.h" -#include "task.h" -#include "main.h" -#include "udp.h" -#include -#if LWIP_SOCKET -#include -#include -#include "platform_stdlib.h" -#include "wifi_simple_config_parser.h" -#include "wifi_simple_config.h" - -#if CONFIG_EXAMPLE_UART_ATCMD -#include "at_cmd/atcmd_wifi.h" -#endif - -#define STACKSIZE 512 -#define LEAVE_ACK_EARLY 0 - -#if (CONFIG_LWIP_LAYER == 0) -extern uint32_t _ntohl(uint32_t n); -#endif - -#if CONFIG_WLAN -#if (CONFIG_INCLUDE_SIMPLE_CONFIG) -#include "wifi/wifi_conf.h" -int is_promisc_callback_unlock = 0; -static int is_fixed_channel; -int fixed_channel_num; -unsigned char g_ssid[32]; -int g_ssid_len; - -extern int promisc_get_fixed_channel( void *, uint8_t *, int* ); -struct rtk_test_sc; - -#ifdef PACK_STRUCT_USE_INCLUDES -#include "arch/bpstruct.h" -#endif - -// support scan list function from APP, comment by default -//#define SC_SCAN_SUPPORT - -PACK_STRUCT_BEGIN -struct ack_msg { - PACK_STRUCT_FIELD(uint8_t flag); - PACK_STRUCT_FIELD(uint16_t length); - PACK_STRUCT_FIELD(uint8_t smac[6]); - PACK_STRUCT_FIELD(uint8_t status); - PACK_STRUCT_FIELD(uint16_t device_type); - PACK_STRUCT_FIELD(uint32_t device_ip); - PACK_STRUCT_FIELD(uint8_t device_name[64]); -}__attribute__((packed)); // PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#include "arch/epstruct.h" -#endif - - - -#define MULCAST_PORT (8864) - -#define SCAN_BUFFER_LENGTH (1024) - -#ifndef WLAN0_NAME - #define WLAN0_NAME "wlan0" -#endif -#define JOIN_SIMPLE_CONFIG (uint32_t)(1 << 8) -extern uint32_t rtw_join_status; -char simple_config_terminate = 0; - -int simple_config_result; -static struct ack_msg *ack_content; -struct rtk_test_sc *backup_sc_ctx; -extern struct netif xnetif[NET_IF_NUM]; - -// listen scan command and ACK -#ifdef SC_SCAN_SUPPORT - -static int pin_enable = 0; -static int scan_start = 0; - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -#include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct ack_msg_scan { - uint8_t flag; - uint16_t length; - uint8_t smac[6]; - uint8_t status; - uint16_t device_type; - uint32_t device_ip; - uint8_t device_name[64]; - uint8_t pin_enabled; -} -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -#include "pack_end.h" -#endif - -static void set_device_name(char *device_name) -{ - int pos = 0; - memcpy(device_name, "ameba_", 6); - for(int i = 0; i < 3; i++) - { - sprintf(device_name + 6 + pos, "%02x", xnetif[0].hwaddr[i + 3]); - pos += 2; - if(i != 2) - device_name[6 + pos++] = ':'; - } - return; -} -void SC_scan_thread(void *para) -{ - int sockfd_scan; - struct sockaddr_in device_addr; - unsigned char packet[256]; - struct sockaddr from; - struct sockaddr_in *from_sin = (struct sockaddr_in*) &from; - socklen_t fromLen = sizeof(from); - struct ack_msg_scan ack_msg; - - #ifdef RTW_PACK_STRUCT_USE_INCLUDES - #include "pack_begin.h" - #endif - RTW_PACK_STRUCT_BEGIN - struct scan_msg{ - unsigned char flag; - unsigned short length; - unsigned char sec_level; - unsigned char nonce[64]; - unsigned char digest[16]; - unsigned char smac[6]; - unsigned short device_type; - }; - RTW_PACK_STRUCT_STRUCT; - RTW_PACK_STRUCT_END - #ifdef RTW_PACK_STRUCT_USE_INCLUDES - #include "pack_end.h" - #endif - - struct scan_msg *pMsg; - - if ((sockfd_scan = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) { - printf("SC scan socket error\n"); - return; - } - memset(&device_addr, 0, sizeof(struct sockaddr_in)); - device_addr.sin_family = AF_INET; - device_addr.sin_port = htons(18864); - device_addr.sin_addr.s_addr = INADDR_ANY; - - if (bind(sockfd_scan, (struct sockaddr *)&device_addr, sizeof(struct sockaddr)) == -1) - { - printf("SC scan bind error\n"); - close(sockfd_scan); - return; - } - memset(packet, 0, sizeof(packet)); - - // for now, no checking for the validity of received data, wf, 0225 - while(1) - { - if((recvfrom(sockfd_scan, &packet, sizeof(packet), MSG_DONTWAIT, &from, &fromLen)) >= 0) { - uint16_t from_port = ntohs(from_sin->sin_port); - //printf("SC_scan: recv %d bytes from %d.%d.%d.%d:%d\n",packetLen, ip[0], ip[1], ip[2], ip[3], from_port); - - from_sin->sin_port = htons(8864); - // send ACK for scan - pMsg = (struct scan_msg *)packet; - if(pMsg->flag == 0x00) // scan flag - { - ack_msg.flag = 0x21; - ack_msg.length = sizeof(struct ack_msg_scan); - ack_msg.status = 1; - memcpy(ack_msg.smac, xnetif[0].hwaddr, 6); - - ack_msg.device_type = 0; - ack_msg.device_ip = xnetif[0].ip_addr.addr; - memset(ack_msg.device_name, 0, 64); - set_device_name((char*)ack_msg.device_name); - // set the device_name to: ameba_xxxxxx(last 3 bytes of MAC) - ack_msg.pin_enabled = pin_enable; - for(int i = 0; i < 3;i++) - { - int ret = sendto(sockfd_scan,(unsigned char *)&ack_msg,sizeof(struct ack_msg_scan),0,(struct sockaddr *)&from, fromLen); - if(ret < 0) - printf("send ACK for scan fail\n"); - //else - //printf("send %d bytes of ACK to scan\n", ret); - } - } - else - continue; - } - vTaskDelay(500); - } -} - -void SC_listen_ACK_scan() -{ - if(xTaskCreate(SC_scan_thread, ((const char*)"SC_scan_thread"), 512, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) - printf("%s xTaskCreate(SC_scan_thread) failed\n", __FUNCTION__); -} - -#endif - -void SC_set_ack_content() -{ - memset(ack_content, 0, sizeof(struct ack_msg)); - ack_content->flag = 0x20; - ack_content->length = htons(sizeof(struct ack_msg)-3); - memcpy(ack_content->smac, xnetif[0].hwaddr, 6); - ack_content->status = 0; - ack_content->device_type = 0; - ack_content->device_ip = xnetif[0].ip_addr.addr; - memset(ack_content->device_name, 0, 64); -} - -int SC_send_simple_config_ack(uint8_t round) -{ -#if CONFIG_LWIP_LAYER - int ack_transmit_round, ack_num_each_sec; - int ack_socket; - //int sended_data = 0; - struct sockaddr_in to_addr; -#if LEAVE_ACK_EARLY - uint8_t check_phone_ack = 0; -#endif - SC_set_ack_content(); - - ack_socket = socket(PF_INET, SOCK_DGRAM, IP_PROTO_UDP); - if (ack_socket == -1) { - return -1; - } -#if LEAVE_ACK_EARLY - else { - struct sockaddr_in bindAddr; - bindAddr.sin_family = AF_INET; - bindAddr.sin_port = htons(8864); - bindAddr.sin_addr.s_addr = INADDR_ANY; - if(bind(ack_socket, (struct sockaddr *) &bindAddr, sizeof(bindAddr)) == 0) - check_phone_ack = 1; - } -#endif - printf("Sending simple config ack\n"); - FD_ZERO(&to_addr); - to_addr.sin_family = AF_INET; - to_addr.sin_port = htons(8864); - to_addr.sin_addr.s_addr = (backup_sc_ctx->ip_addr); - for (ack_transmit_round = 0;ack_transmit_round < round; ack_transmit_round++) { - for (ack_num_each_sec = 0;ack_num_each_sec < 20; ack_num_each_sec++) { - //sended_data = - sendto(ack_socket, (unsigned char *)ack_content, sizeof(struct ack_msg), 0, (struct sockaddr *) &to_addr, sizeof(struct sockaddr)); - //printf("\r\nAlready send %d bytes data\n", sended_data); - vTaskDelay(50); /* delay 50 ms */ - -#if LEAVE_ACK_EARLY - if(check_phone_ack) { - unsigned char packet[100]; - int packetLen; - struct sockaddr from; - struct sockaddr_in *from_sin = (struct sockaddr_in*) &from; - socklen_t fromLen = sizeof(from); - - if((packetLen = recvfrom(ack_socket, &packet, sizeof(packet), MSG_DONTWAIT, &from, &fromLen)) >= 0) { - uint8_t *ip = (uint8_t *) &from_sin->sin_addr.s_addr; - uint16_t from_port = ntohs(from_sin->sin_port); - printf("recv %d bytes from %d.%d.%d.%d:%d at round=%d, num=%d\n", - packetLen, ip[0], ip[1], ip[2], ip[3], from_port, - ack_transmit_round, ack_num_each_sec); - goto leave_ack; - } - } -#endif - } - } - -leave_ack: - close(ack_socket); -#endif - -#if CONFIG_INIC_CMD_RSP - extern unsigned int inic_sc_ip_addr; - inic_sc_ip_addr = backup_sc_ctx->ip_addr; - inic_c2h_wifi_info("ATWQ", RTW_SUCCESS); -#endif - - return 0; -} - -static int SC_check_and_show_connection_info(void) -{ - rtw_wifi_setting_t setting; - int ret = -1; - -#if CONFIG_LWIP_LAYER - /* If not rise priority, LwIP DHCP may timeout */ - vTaskPrioritySet(NULL, tskIDLE_PRIORITY + 3); - /* Start DHCP Client */ - ret = LwIP_DHCP(0, DHCP_START); - vTaskPrioritySet(NULL, tskIDLE_PRIORITY + 1); -#endif - -#if CONFIG_EXAMPLE_UART_ATCMD == 0 - wifi_get_setting(WLAN0_NAME, &setting); - wifi_show_setting(WLAN0_NAME, &setting); -#endif - -#if CONFIG_LWIP_LAYER - if (ret != DHCP_ADDRESS_ASSIGNED) - return SC_DHCP_FAIL; - else -#endif - return SC_SUCCESS; -} - -static void check_and_set_security_in_connection(rtw_security_t security_mode, rtw_network_info_t *wifi) -{ - - if (security_mode == RTW_SECURITY_WPA2_AES_PSK) { - printf("wifi->security_type = RTW_SECURITY_WPA2_AES_PSK\n"); - wifi->security_type = RTW_SECURITY_WPA2_AES_PSK; - } else if (security_mode == RTW_SECURITY_WEP_PSK) { - printf("wifi->security_type = RTW_SECURITY_WEP_PSK\n"); - wifi->security_type = RTW_SECURITY_WEP_PSK; - wifi->key_id = 0; - } else if (security_mode == RTW_SECURITY_WPA_AES_PSK) { - printf("wifi->security_type = RTW_SECURITY_WPA_AES_PSK\n"); - wifi->security_type = RTW_SECURITY_WPA_AES_PSK; - } else { - printf("wifi->security_type = RTW_SECURITY_OPEN\n"); - wifi->security_type = RTW_SECURITY_OPEN; - } -} - -int get_connection_info_from_profile(rtw_security_t security_mode, rtw_network_info_t *wifi) -{ - - printf("======= Connection Information =======\n"); - check_and_set_security_in_connection(security_mode, wifi); - - wifi->password = backup_sc_ctx->password; - wifi->password_len = (int)strlen((char const *)backup_sc_ctx->password); - - /* 1.both scanned g_ssid and ssid from profile are null, return fail */ - if ((0 == g_ssid_len) && (0 == strlen(backup_sc_ctx->ssid))) { - printf("no ssid info found, connect will fail\n"); - return -1; - } - - /* g_ssid and ssid from profile are same, enter connect and retry */ - if (0 == strcmp(backup_sc_ctx->ssid, g_ssid)) { - wifi->ssid.len = strlen(backup_sc_ctx->ssid); - rtw_memcpy(wifi->ssid.val, backup_sc_ctx->ssid, wifi->ssid.len); - printf("using ssid from profile and scan result\n"); - goto ssid_set_done; - } - - /* if there is profile, but g_ssid and profile are different, using profile to connect and retry */ - if (strlen(backup_sc_ctx->ssid) > 0) { - wifi->ssid.len = strlen(backup_sc_ctx->ssid); - rtw_memcpy(wifi->ssid.val, backup_sc_ctx->ssid, wifi->ssid.len); - printf("using ssid only from profile\n"); - goto ssid_set_done; - -} - - /* if there is no profile but have scanned ssid, using g_ssid to connect and retry - (maybe ssid is right and password is wrong) */ - if (g_ssid_len > 0) { - wifi->ssid.len = g_ssid_len; - rtw_memcpy(wifi->ssid.val, g_ssid, wifi->ssid.len); - printf("using ssid only from scan result\n"); - goto ssid_set_done; - } - - -ssid_set_done: - - - if(wifi->security_type == RTW_SECURITY_WEP_PSK) - { - if(wifi->password_len == 10) - { - uint32_t p[5] = {0}; - uint8_t pwd[6], i = 0; - sscanf((const char*)backup_sc_ctx->password, "%02x%02x%02x%02x%02x", &p[0], &p[1], &p[2], &p[3], &p[4]); - for(i=0; i< 5; i++) - pwd[i] = (uint8_t)p[i]; - pwd[5] = '\0'; - memset(backup_sc_ctx->password, 0, 65); - strcpy((char*)backup_sc_ctx->password, (char*)pwd); - wifi->password_len = 5; - }else if(wifi->password_len == 26){ - uint32_t p[13] = {0}; - uint8_t pwd[14], i = 0; - sscanf((const char*)backup_sc_ctx->password, "%02x%02x%02x%02x%02x%02x%02x"\ - "%02x%02x%02x%02x%02x%02x", &p[0], &p[1], &p[2], &p[3], &p[4],\ - &p[5], &p[6], &p[7], &p[8], &p[9], &p[10], &p[11], &p[12]); - for(i=0; i< 13; i++) - pwd[i] = (uint8_t)p[i]; - pwd[13] = '\0'; - memset(backup_sc_ctx->password, 0, 64); - strcpy((char*)backup_sc_ctx->password, (char*)pwd); - wifi->password_len = 13; - } - } - printf("wifi.password = %s\n", wifi->password); - printf("wifi.password_len = %d\n", wifi->password_len); - printf("wifi.ssid = %s\n", wifi->ssid.val); - printf("wifi.ssid_len = %d\n", wifi->ssid.len); - printf("wifi.channel = %d\n", fixed_channel_num); - printf("===== start to connect target AP =====\n"); - return 0; -} - - - - -#pragma pack(1) -struct scan_with_ssid_result { - uint8_t len; /* len of a memory area store ap info */ - uint8_t mac[ETH_ALEN]; - int rssi; - uint8_t sec_mode; - uint8_t password_id; - uint8_t channel; - //char ssid[65]; -}; - - -struct sc_ap_info { - - char *ssid; - int ssid_len; - -}; - - - -rtw_security_t SC_translate_iw_security_mode(uint8_t security_type) { - - rtw_security_t security_mode = RTW_SECURITY_UNKNOWN; - - - switch (security_type) { - case IW_ENCODE_ALG_NONE: - security_mode = RTW_SECURITY_OPEN; - break; - case IW_ENCODE_ALG_WEP: - security_mode = RTW_SECURITY_WEP_PSK; - break; - case IW_ENCODE_ALG_CCMP: - security_mode = RTW_SECURITY_WPA2_AES_PSK; - break; - default: - printf("error: security type not supported\n"); - break; - }; - - return security_mode; -} - -/* - - scan buf format: - - len mac rssi sec wps channel ssid - 1B 6B 4B 1B 1B 1B (len - 14)B - -*/ -enum sc_result SC_parse_scan_result_and_connect(scan_buf_arg* scan_buf, rtw_network_info_t *wifi) -{ - - struct scan_with_ssid_result scan_result; - - char *buf = scan_buf->buf; - int buf_len = scan_buf->buf_len; - char ssid[65]; - int ssid_len = 0 ; - int parsed_len = 0; - uint8_t scan_channel = 0; - int i = 0; - int ret = 0; - uint8_t pscan_config = PSCAN_ENABLE | PSCAN_SIMPLE_CONFIG; - - memset((void*)&scan_result, 0, sizeof(struct scan_with_ssid_result)); - - /* if wifi_is_connected_to_ap and we run here, ther will be hardfault(caused by auto reconnect) */ - printf("Scan result got, start to connect AP with scanned bssid\n"); - - while (1) { - - memcpy(&scan_result, buf, sizeof(struct scan_with_ssid_result)); - /* len maybe 3*/ - if (scan_result.len < sizeof(struct scan_with_ssid_result)) { - printf("length = %d, too small!\n",scan_result.len); - goto sc_connect_wifi_fail; - } - - /* set ssid */ - memset(ssid, 0, 65); - - ssid_len = scan_result.len - sizeof(struct scan_with_ssid_result); - - memcpy(ssid, buf + sizeof(struct scan_with_ssid_result), ssid_len); - - /* run here means there is a match */ - if (ssid_len == wifi->ssid.len) { - if (memcmp(ssid, wifi->ssid.val, ssid_len) == 0) { - - printf("Connecting to MAC=%02x:%02x:%02x:%02x:%02x:%02x, ssid = %s, SEC=%d\n", - scan_result.mac[0], scan_result.mac[1], scan_result.mac[2], - scan_result.mac[3], scan_result.mac[4], scan_result.mac[5], - ssid, scan_result.sec_mode); - - scan_channel = scan_result.channel; - - - /* try 3 times to connect */ - for (i = 0; i < 3; i++) { - if(wifi_set_pscan_chan(&scan_channel, &pscan_config, 1) < 0){ - printf("\n\rERROR: wifi set partial scan channel fail"); - ret = SC_TARGET_CHANNEL_SCAN_FAIL; - goto sc_connect_wifi_fail; - } - ret = wifi_connect( - scan_result.mac, - 1, - (char*)wifi->ssid.val, - SC_translate_iw_security_mode(scan_result.sec_mode), - (char*)wifi->password, - 0, NULL); - if (ret == RTW_SUCCESS) - goto sc_connect_wifi_success; - } - - } - } - - - buf = buf + scan_result.len; - parsed_len += scan_result.len; - if (parsed_len >= buf_len) { - printf("parsed=%d, total = %d\n", parsed_len, buf_len); - break; - } - - } - - -sc_connect_wifi_success: - printf("%s success\n", __FUNCTION__); - return ret; - -sc_connect_wifi_fail: - printf("%s fail\n", __FUNCTION__); - return ret; - - -} - - -/* - - When BSSID_CHECK_SUPPORT is not set, there will be problems: - - 1.AP1 and AP2 (different SSID) both forward simple config packets, - profile is from AP2, but Ameba connect with AP1 - 2.AP1 and AP2 (same SSID, but different crypto or password), both forward simple config packets, - profile is from AP2, but Ameba connect with AP1 - 3. ... - - fix: using SSID to query matched BSSID(s) in scan result, traverse and connect. - - - Consideration: - 1.Only take ssid and password - 2.Assume they have different channel. - 3.Assume they have different encrypt methods - -*/ -int SC_connect_to_candidate_AP (rtw_network_info_t *wifi){ - - int ret; - - scan_buf_arg scan_buf; - int scan_cnt = 0; - char *ssid = (char*)wifi->ssid.val; - int ssid_len = wifi->ssid.len; - - - printf("Connect with SSID=%s password=%s\n", wifi->ssid.val, wifi->password); - - /* scan buf init */ - scan_buf.buf_len = 1000; - scan_buf.buf = (char*)pvPortMalloc(scan_buf.buf_len); - if(!scan_buf.buf){ - printf("ERROR: Can't malloc memory\n"); - return RTW_NOMEM; - } - - /* set ssid_len, ssid to scan buf */ - memset(scan_buf.buf, 0, scan_buf.buf_len); - if(ssid && ssid_len > 0 && ssid_len <= 32){ - memcpy(scan_buf.buf, &ssid_len, sizeof(int)); - memcpy(scan_buf.buf+sizeof(int), ssid, ssid_len); - } - - /* call wifi scan to scan */ - if(scan_cnt = (wifi_scan(RTW_SCAN_TYPE_ACTIVE, RTW_BSS_TYPE_ANY, &scan_buf)) < 0){ - printf("ERROR: wifi scan failed\n"); - ret = RTW_ERROR; - }else{ - ret = SC_parse_scan_result_and_connect(&scan_buf, wifi); - } - - if(scan_buf.buf) - vPortFree(scan_buf.buf); - - return ret; -} - - - - -rtw_security_t SC_translate_security(uint8_t security_type) -{ - - rtw_security_t security_mode = RTW_SECURITY_UNKNOWN; - - switch (security_type) { - case RTW_ENCRYPTION_OPEN: - security_mode = RTW_SECURITY_OPEN; - break; - case RTW_ENCRYPTION_WEP40: - case RTW_ENCRYPTION_WEP104: - security_mode = RTW_SECURITY_WEP_PSK; - break; - case RTW_ENCRYPTION_WPA_TKIP: - case RTW_ENCRYPTION_WPA_AES: - case RTW_ENCRYPTION_WPA2_TKIP: - case RTW_ENCRYPTION_WPA2_AES: - case RTW_ENCRYPTION_WPA2_MIXED: - security_mode = RTW_SECURITY_WPA2_AES_PSK; - break; - case RTW_ENCRYPTION_UNKNOWN: - case RTW_ENCRYPTION_UNDEF: - default: - printf( "unknow security mode,connect fail\n"); - } - - return security_mode; - -} - - -enum sc_result SC_connect_to_AP(void) -{ - enum sc_result ret = SC_ERROR; - uint8_t scan_channel; - uint8_t pscan_config; - int max_retry = 5, retry = 0; - rtw_security_t security_mode; - rtw_network_info_t wifi = {0}; - if(!(fixed_channel_num == 0)){ - scan_channel = fixed_channel_num; - } - pscan_config = PSCAN_ENABLE | PSCAN_SIMPLE_CONFIG; - - security_mode = SC_translate_security(g_security_mode); - g_security_mode = 0xff;//clear it - - if (-1 == get_connection_info_from_profile(security_mode, &wifi)) { - ret = SC_CONTROLLER_INFO_PARSE_FAIL; - goto wifi_connect_fail; - } - -#if CONFIG_AUTO_RECONNECT - /* disable auto reconnect */ - wifi_set_autoreconnect(0); -#endif - -#if 1 - /* optimization: get g_bssid to connect with only pscan */ - while (1) { - if(wifi_set_pscan_chan(&scan_channel, &pscan_config, 1) < 0){ - printf("ERROR: wifi set partial scan channel fail\n"); - ret = SC_TARGET_CHANNEL_SCAN_FAIL; - goto wifi_connect_fail; - } - rtw_join_status = 0;//clear simple config status - ret = wifi_connect(g_bssid, - 1, - (char*)wifi.ssid.val, - wifi.security_type, - (char*)wifi.password, - wifi.key_id, - NULL); - - if (ret == RTW_SUCCESS) - goto wifi_connect_success; - - if (retry == max_retry) { - printf("connect fail with bssid, try ssid instead\n"); - break; - } - retry ++; - } -#endif - -#if 1 - /* when optimization fail: if connect with bssid fail because of we have connect to the wrong AP */ - ret = SC_connect_to_candidate_AP(&wifi); - if (RTW_SUCCESS == ret) { - goto wifi_connect_success; - } else { - ret = SC_JOIN_BSS_FAIL; - goto wifi_connect_fail; - } -#endif - - -wifi_connect_success: - ret = SC_check_and_show_connection_info(); - goto wifi_connect_end; - - -wifi_connect_fail: - printf("SC_connect_to_AP failed\n"); - goto wifi_connect_end; - -wifi_connect_end: -#if CONFIG_AUTO_RECONNECT - wifi_config_autoreconnect(1, 10, 5); -#endif - return ret; - - -} -/* Make callback one by one to wlan rx when promiscuous mode */ - -void simple_config_callback(unsigned char *buf, unsigned int len, void* userdata) -{ - unsigned char * da = buf; - unsigned char * sa = buf + ETH_ALEN; - taskENTER_CRITICAL(); - if (is_promisc_callback_unlock == 1) { - simple_config_result = rtk_start_parse_packet(da, sa, len, userdata, (void *)backup_sc_ctx); - //printf("\r\nresult in callback function = %d\n",simple_config_result); - } - taskEXIT_CRITICAL(); - -} - -static unsigned int simple_config_cmd_start_time; -static unsigned int simple_config_cmd_current_time; -extern int simple_config_status; -extern void rtk_restart_simple_config(void); - - -extern void rtk_sc_deinit(void); - -void init_simple_config_lib_config(struct simple_config_lib_config* config) -{ - config->free = rtw_mfree; - config->malloc = rtw_malloc; - config->memcmp = memcmp; - config->memcpy = memcpy; - config->memset = memset; - config->printf = printf; - config->strcpy = strcpy; - config->strlen = strlen; - config->zmalloc = rtw_zmalloc; -#if CONFIG_LWIP_LAYER - config->_ntohl = lwip_ntohl; -#else - config->_ntohl = _ntohl; -#endif - config->is_promisc_callback_unlock = &is_promisc_callback_unlock; -} - - -int init_test_data(char *custom_pin_code) -{ -#if (CONFIG_INCLUDE_SIMPLE_CONFIG) - is_promisc_callback_unlock = 1; - is_fixed_channel = 0; - fixed_channel_num = 0; - simple_config_result = 0; - rtw_memset(g_ssid, 0, 32); - g_ssid_len = 0; - simple_config_cmd_start_time = xTaskGetTickCount(); - - if (ack_content != NULL) { - vPortFree(ack_content); - ack_content = NULL; - } - ack_content = pvPortMalloc(sizeof(struct ack_msg)); - if (!ack_content) { - printf("rtk_sc_init fail by allocate ack\n"); - } - memset(ack_content, 0, sizeof(struct ack_msg)); - -#ifdef SC_SCAN_SUPPORT - if(custom_pin_code) - pin_enable = 1; - else - pin_enable = 0; -#endif - - backup_sc_ctx = pvPortMalloc(sizeof(struct rtk_test_sc)); - if (!backup_sc_ctx) { - printf("[Mem]malloc SC context fail\n"); - } else { - memset(backup_sc_ctx, 0, sizeof(struct rtk_test_sc)); - struct simple_config_lib_config lib_config; - init_simple_config_lib_config(&lib_config); - //custom_pin_code can be null - if (rtk_sc_init(custom_pin_code, &lib_config) < 0) { - printf("Rtk_sc_init fail\n"); - } else { - return 0; - } - } - -#else - printf("Platform no include simple config now\n"); -#endif - return -1; -} - -void deinit_test_data(){ -#if (CONFIG_INCLUDE_SIMPLE_CONFIG) - rtk_sc_deinit(); - if (backup_sc_ctx != NULL) { - vPortFree(backup_sc_ctx); - backup_sc_ctx = NULL; - } - if (ack_content != NULL) { - vPortFree(ack_content); - ack_content = NULL; - } - rtw_join_status = 0;//clear simple config status -#endif -} - -void stop_simple_config() -{ - simple_config_terminate = 1; -} - -enum sc_result simple_config_test(rtw_network_info_t *wifi) -{ - int channel = 1; - enum sc_result ret = SC_SUCCESS; - unsigned int start_time; - int is_need_connect_to_AP = 0; - int fix_channel = 0; - int delta_time = 0; - wifi_set_promisc(RTW_PROMISC_ENABLE, simple_config_callback, 1); - start_time = xTaskGetTickCount(); - printf("\n"); - wifi_set_channel(channel); - while (simple_config_terminate != 1) { - vTaskDelay(50); //delay 0.5s to release CPU usage - simple_config_cmd_current_time = xTaskGetTickCount(); -#if CONFIG_GAGENT - if (simple_config_cmd_current_time - simple_config_cmd_start_time < ((50 + delta_time)*configTICK_RATE_HZ)) { -#else - if (simple_config_cmd_current_time - simple_config_cmd_start_time < ((120 + delta_time)*configTICK_RATE_HZ)) { -#endif - unsigned int current_time = xTaskGetTickCount(); - if (((current_time - start_time)*1000 /configTICK_RATE_HZ < 100) - || (is_fixed_channel == 1)) { - if(is_fixed_channel == 0 && get_channel_flag == 1){ - fix_channel = promisc_get_fixed_channel(g_bssid,g_ssid,&g_ssid_len); - if(fix_channel != 0) - { - printf("in simple_config_test fix channel = %d ssid: %s\n",fix_channel, g_ssid); - is_fixed_channel = 1; - fixed_channel_num = fix_channel; - wifi_set_channel(fix_channel); - } - else - printf("get channel fail\n"); - } - - if (simple_config_result == 1) { - is_need_connect_to_AP = 1; - is_fixed_channel = 0; - break; - } - if (simple_config_result == -1) { - printf("simple_config_test restart for result = -1\n"); - delta_time = 60; - wifi_set_channel(1); - is_need_connect_to_AP = 0; - is_fixed_channel = 0; - fixed_channel_num = 0; - memset(g_ssid, 0, 32); - g_ssid_len = 0; - simple_config_result = 0; - g_security_mode = 0xff; - rtk_restart_simple_config(); - } - if (simple_config_result == -2) { - printf("The APP or client must have pin!\n"); - break; - } - } else { - channel++; - if ((1 <= channel) && (channel <= 13)) { - if (wifi_set_channel(channel) == 0) { - start_time = xTaskGetTickCount(); - printf("Switch to channel(%d)\n", channel); - } - } else { - channel = 1; - if (wifi_set_channel(channel) == 0) { - start_time = xTaskGetTickCount(); - printf("Switch to channel(%d)\n", channel); - } - } - - } - } else { - ret = SC_NO_CONTROLLER_FOUND; - break; - } - } - wifi_set_promisc(RTW_PROMISC_DISABLE, NULL, 0); - if (is_need_connect_to_AP == 1) { - if(NULL == wifi){ - int tmp_res = SC_connect_to_AP(); - if (SC_SUCCESS == tmp_res) { - if(-1 == SC_send_simple_config_ack(10)) - ret = SC_UDP_SOCKET_CREATE_FAIL; - #ifdef SC_SCAN_SUPPORT - // check whether the thread of listen scan command is already created - if(scan_start == 0) - { - scan_start = 1; - SC_listen_ACK_scan(); - } - #endif - } else { - ret = tmp_res; - } - }else{ - if (-1 == get_connection_info_from_profile(wifi->security_type,wifi)) { - ret = SC_CONTROLLER_INFO_PARSE_FAIL; - }else - ret = SC_SUCCESS; - } - }else{ - ret = SC_NO_CONTROLLER_FOUND; - } - return ret; -} - -//Filter packet da[] = {0x01, 0x00, 0x5e} -//add another filter for bcast, {0xff, 0xff, 0xff, 0xff} -#define MASK_SIZE 3 -void filter_add_enable(){ - uint8_t mask[MASK_SIZE]={0xFF,0xFF,0xFF}; - uint8_t pattern[MASK_SIZE]={0x01,0x00,0x5e}; - uint8_t pattern_bcast[MASK_SIZE]={0xff,0xff,0xff}; - - rtw_packet_filter_pattern_t packet_filter; - rtw_packet_filter_pattern_t packet_filter_bcast; - rtw_packet_filter_rule_e rule; - - packet_filter.offset = 0; - packet_filter.mask_size = 3; - packet_filter.mask = mask; - packet_filter.pattern = pattern; - - packet_filter_bcast.offset = 0; - packet_filter_bcast.mask_size = 3; - packet_filter_bcast.mask = mask; - packet_filter_bcast.pattern = pattern_bcast; - - rule = RTW_POSITIVE_MATCHING; - - wifi_init_packet_filter(); - wifi_add_packet_filter(1, &packet_filter,rule); - wifi_add_packet_filter(2, &packet_filter_bcast,rule); - - wifi_enable_packet_filter(1); - wifi_enable_packet_filter(2); -} - -void remove_filter(){ - wifi_disable_packet_filter(1); - wifi_disable_packet_filter(2); - wifi_remove_packet_filter(1); - wifi_remove_packet_filter(2); -} - -void print_simple_config_result(enum sc_result sc_code) -{ - printf("\n"); - switch (sc_code) { - case SC_NO_CONTROLLER_FOUND: - printf("Simple Config timeout! Can't get Ap profile. Please try again\n"); - break; - case SC_CONTROLLER_INFO_PARSE_FAIL: - printf("Simple Config fail, cannot parse target ap info from controller\n"); - break; - case SC_TARGET_CHANNEL_SCAN_FAIL: - printf("Simple Config cannot scan the target channel\n"); - break; - case SC_JOIN_BSS_FAIL: - printf("Simple Config Join bss failed\n"); - break; - case SC_DHCP_FAIL: - printf("Simple Config fail, cannot get dhcp ip address\n"); - break; - case SC_UDP_SOCKET_CREATE_FAIL: - printf("Simple Config Ack socket create fail!\n"); - break; - case SC_TERMINATE: - printf("Simple Config terminate\n"); - break; - case SC_SUCCESS: - printf("Simple Config success\n"); - break; - - case SC_ERROR: - default: - printf("unknown error when simple config!\n"); - - } -} - -#endif //CONFIG_INCLUDE_SIMPLE_CONFIG - -void cmd_simple_config(int argc, char **argv){ -#if CONFIG_INCLUDE_SIMPLE_CONFIG - char *custom_pin_code = NULL; - enum sc_result ret = SC_ERROR; - - if(argc > 2){ - printf("Input Error!\n"); - } - - if(argc == 2) - custom_pin_code = (argv[1]); - - simple_config_terminate = 0; - rtw_join_status |= JOIN_SIMPLE_CONFIG; - - wifi_enter_promisc_mode(); - if(init_test_data(custom_pin_code) == 0){ - filter_add_enable(); - ret = simple_config_test(NULL); - deinit_test_data(); - print_simple_config_result(ret); - remove_filter(); - } -#if CONFIG_INIC_CMD_RSP - if(ret != SC_SUCCESS) - inic_c2h_wifi_info("ATWQ", RTW_ERROR); -#endif - -#if CONFIG_EXAMPLE_UART_ATCMD - if(ret == SC_SUCCESS){ - at_printf("\n\r[ATWQ] OK"); - }else{ - at_printf("\n\r[ATWQ] ERROR:%d",ret); - } -#endif - -#endif -} -#endif //#if CONFIG_WLAN - -#endif // LWIP_SOCKET - diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_simple_config.h b/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_simple_config.h deleted file mode 100644 index bbd7829..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_simple_config.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef __WIFI_SIMPLE_CONFIG_H -#define __WIFI_SIMPLE_CONFIG_H -/*****************************wifi_simple_config.h****************************/ -enum sc_result { - SC_ERROR = -1, /* default error code*/ - SC_NO_CONTROLLER_FOUND = 1, /* cannot get sta(controller) in the air which starts a simple config session */ - SC_CONTROLLER_INFO_PARSE_FAIL, /* cannot parse the sta's info */ - SC_TARGET_CHANNEL_SCAN_FAIL, /* cannot scan the target channel */ - SC_JOIN_BSS_FAIL, /* fail to connect to target ap */ - SC_DHCP_FAIL, /* fail to get ip address from target ap */ - /* fail to create udp socket to send info to controller. note that client isolation - must be turned off in ap. we cannot know if ap has configured this */ - SC_UDP_SOCKET_CREATE_FAIL, - SC_TERMINATE, - SC_SUCCESS, /* default success code */ - -}; -int SC_send_simple_config_ack(uint8_t round); - -#endif //__WIFI_SIMPLE_CONFIG_H diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_simple_config_parser.h b/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_simple_config_parser.h deleted file mode 100644 index 167c6e2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_simple_config_parser.h +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef __SIMPLE_CONFIG_H__ -#define __SIMPLE_CONFIG_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - - /* This macro means user take simple config - * lib to another platform such as linux, and - * have no rom crypto libs of simple config, - * so we take simple_config_crypto as a sw lib - * This macro is used by Realtek internal to generate simple config lib - * Please delete this macro after generation. - */ -#define SIMPLE_CONFIG_PLATFORM_LIB 0 - -#include "platform_opts.h" -#include "autoconf.h" - - - -/* platform related settings */ -#if (defined(CONFIG_PLATFORM_8195A)|| defined(CONFIG_PLATFORM_8711B)) -/* -#undef uint32_t -#undef int32_t -#undef uint8_t -#undef int8_t -#undef uint16_t -#undef int16_t -typedef unsigned int uint32_t; -typedef signed int int32_t; -typedef unsigned char uint8_t; -typedef char int8_t; -typedef unsigned short int uint16_t; -typedef signed short int int16_t; -*/ -#else -#include "osdep_service.h" -#endif - -typedef int (*simple_config_printf_fn) (char const * fmt, ...); -typedef void* (*simple_config_memset_fn) (uint8_t *dst0, int32_t Val, uint32_t length); -typedef void* (*simple_config_memcpy_fn) ( void *s1, const void *s2, uint32_t n ); -typedef uint32_t (*simple_config_strlen_fn) (const char *s); -typedef char * (*simple_config_strcpy_fn) (char *dest, const char *src); -typedef void (*simple_config_free_fn) (uint8_t *pbuf, uint32_t sz); -typedef uint8_t* (*simple_config_zmalloc_fn) (uint32_t sz); -typedef uint8_t* (*simple_config_malloc_fn) (uint32_t sz); -typedef int (*simple_config_memcmp_fn) (const void *av, const void *bv, uint32_t len); -typedef uint32_t (*simple_config_ntohl_fn)(uint32_t x); - - - -struct simple_config_lib_config { - simple_config_printf_fn printf; - simple_config_memset_fn memset; - simple_config_memcpy_fn memcpy; - simple_config_strlen_fn strlen; - simple_config_strcpy_fn strcpy; - simple_config_free_fn free; - simple_config_zmalloc_fn zmalloc; - simple_config_malloc_fn malloc; - simple_config_memcmp_fn memcmp; - simple_config_ntohl_fn _ntohl; - - - int *is_promisc_callback_unlock; - -}; - -#pragma pack(1) -struct rtk_test_sc { - /* API exposed to user */ - unsigned char ssid[32]; - unsigned char password[65]; - unsigned int ip_addr; -}; - -/* expose data */ -extern int32_t is_promisc_callback_unlock; -extern uint8_t g_bssid[6]; -extern uint8_t get_channel_flag; -extern uint8_t g_security_mode; - -/* expose API */ -extern int32_t rtk_sc_init(char *custom_pin_code, struct simple_config_lib_config* config); -extern int32_t rtk_start_parse_packet(uint8_t *da, uint8_t *sa, int32_t len, void * user_data, void *backup_sc); -extern void rtk_restart_simple_config(void); -extern void rtk_sc_deinit(); -extern void wifi_enter_promisc_mode(); -extern void whc_fix_channel(); -extern void whc_unfix_channel(); - - -#ifdef __cplusplus -} -#endif - -#endif /* __SIMPLE_CONFIG_H__*/ diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_util.c b/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_util.c deleted file mode 100644 index a407806..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_util.c +++ /dev/null @@ -1,1214 +0,0 @@ -#include -#include -#include "FreeRTOS.h" -#include -#include -#include -#if 1 -#include "drv_types.h" // or #include "wlan_lib.h" -#else -#include "wifi_constants.h" -#include "wifi_structures.h" -#include "wlan_lib.h" // or #include "drv_types.h" -#endif -#include - -#include "sdk_ver.h" -#if SDK_VER_NUM < 0x4000 -#define USE_WIFI_ADAPTER 1 // использовать прямое обращение в тело драйвера WiFi -#else -#define USE_WIFI_ADAPTER 0 // не использовать прямое обращение в тело драйвера WiFi (ещё не согласована struct adapter) -#endif - -int iw_ioctl(const char * ifname, unsigned long request, struct iwreq * pwrq) { - memcpy(pwrq->ifr_name, ifname, 5); - int ret = rltk_wlan_control(request, (void *) pwrq); -#if CONFIG_DEBUG_LOG > 3 - debug_printf("ioctl[%p, '%s', %02x %02x %02x %02x ...] = %d\n", - request, ifname, pwrq->u.name[0], pwrq->u.name[1], - pwrq->u.name[2], pwrq->u.name[3], ret); -#endif -#if CONFIG_DEBUG_LOG > 4 - if (pwrq->u.data.length) { - extern void dump_bytes(uint32 addr, int size); - dump_bytes(pwrq->u.data.pointer, pwrq->u.data.length); - } -#endif - return ret; -} - -#if USE_WIFI_ADAPTER -extern Rltk_wlan_t rltk_wlan_info[2]; // in wrapper.h -static _adapter * get_padapter(const char *ifname) { - if(ifname[4] == '0') { - return *(_adapter **)((rltk_wlan_info[0].dev)->priv); - } else { - return *(_adapter **)((rltk_wlan_info[1].dev)->priv); - } - return NULL; -}; -#endif - -/* ssid = NULL -> not connected */ -int wext_get_ssid(const char *ifname, uint8_t *ssid) { -#if USE_WIFI_ADAPTER - _adapter * pad = get_padapter(ifname); - rtw_result_t ret = RTW_ERROR; - if(pad != NULL && (pad->mlmepriv.fw_state & 0x41) != 0) { - int len = pad->mlmepriv.cur_network.network.Ssid.SsidLength; - if(len > 32) rtw_memcpy(ssid, pad->mlmepriv.cur_network.network.Ssid.Ssid, 32); - else { - rtw_memcpy(ssid, &pad->mlmepriv.cur_network.network.Ssid.Ssid, len); - ssid[len] = '\0'; - debug_printf("s=[%s]\n", ssid); - } - ret = RTW_SUCCESS; - } - return ret; -#else - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - iwr.u.essid.pointer = ssid; - iwr.u.essid.length = 32; - int ret = iw_ioctl(ifname, SIOCGIWESSID, &iwr); - if (ret >= 0) { - ret = iwr.u.essid.length; - if (ret > 32) - ret = 32; - /* Some drivers include nul termination in the SSID, so let's - * remove it here before further processing. WE-21 changes this - * to explicitly require the length _not_ to include nul - * termination. */ - if (ret > 0 && ssid[ret - 1] == '\0') - ret--; - ssid[ret] = '\0'; - } - return ret; -#endif -} - -int wext_set_ssid(const char *ifname, const uint8_t *ssid, uint16_t ssid_len) { - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - iwr.u.essid.pointer = (void *) ssid; - iwr.u.essid.length = ssid_len; - iwr.u.essid.flags = (ssid_len != 0); - return iw_ioctl(ifname, SIOCSIWESSID, &iwr); -} - -int wext_set_bssid(const char *ifname, const uint8_t *bssid) { - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - iwr.u.ap_addr.sa_family = ARPHRD_ETHER; - memcpy(iwr.u.ap_addr.sa_data, bssid, ETH_ALEN); - if (bssid[ETH_ALEN] == '#' && bssid[ETH_ALEN + 1] == '@') { - memcpy(iwr.u.ap_addr.sa_data + ETH_ALEN, bssid + ETH_ALEN, 6); - } - return iw_ioctl(ifname, SIOCSIWAP, &iwr); -} - -int is_broadcast_ether_addr(const unsigned char *addr) { - return (addr[0] & addr[1] & addr[2] & addr[3] & addr[4] & addr[5]) == 0xff; -} - -int wext_set_auth_param(const char *ifname, uint16_t idx, uint32_t value) { - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - iwr.u.param.flags = idx & IW_AUTH_INDEX; - iwr.u.param.value = value; - return iw_ioctl(ifname, SIOCSIWAUTH, &iwr); -} - -int wext_set_key_ext(const char *ifname, uint16_t alg, const uint8_t *addr, - int key_idx, int set_tx, const uint8_t *seq, uint16_t seq_len, uint8_t *key, - uint16_t key_len) { - struct iwreq iwr; - int ret = -1; - struct iw_encode_ext *ext; - - ext = (struct iw_encode_ext *) pvPortMalloc( - sizeof(struct iw_encode_ext) + key_len); - if (ext != NULL) { - memset(ext, 0, sizeof(struct iw_encode_ext) + key_len); - memset(&iwr, 0, sizeof(iwr)); - iwr.u.encoding.flags = key_idx + 1; - iwr.u.encoding.flags |= IW_ENCODE_TEMP; - iwr.u.encoding.pointer = ext; - iwr.u.encoding.length = sizeof(struct iw_encode_ext) + key_len; - if (alg == IW_ENCODE_DISABLED) - iwr.u.encoding.flags |= IW_ENCODE_DISABLED; - if (addr == NULL || is_broadcast_ether_addr(addr)) - ext->ext_flags |= IW_ENCODE_EXT_GROUP_KEY; - if (set_tx) - ext->ext_flags |= IW_ENCODE_EXT_SET_TX_KEY; - ext->addr.sa_family = ARPHRD_ETHER; - if (addr) - memcpy(ext->addr.sa_data, addr, ETH_ALEN); - else - memset(ext->addr.sa_data, 0xff, ETH_ALEN); - if (key && key_len) { - memcpy(ext->key, key, key_len); - ext->key_len = key_len; - } - ext->alg = alg; - if (seq && seq_len) { - ext->ext_flags |= IW_ENCODE_EXT_RX_SEQ_VALID; - memcpy(ext->rx_seq, seq, seq_len); - } - ret = iw_ioctl(ifname, SIOCSIWENCODEEXT, &iwr); - vPortFree(ext); - } -#if CONFIG_DEBUG_LOG > 3 - else { - error_printf("%s: Can't malloc memory!\n", __func__); - } -#endif - return ret; -} - -int wext_get_enc_ext(const char *ifname, uint16_t *alg, uint8_t *key_idx, - uint8_t *passphrase) { - struct iwreq iwr; - int ret = -1; - struct iw_encode_ext *ext; - - ext = (struct iw_encode_ext *) pvPortMalloc( - sizeof(struct iw_encode_ext) + 16); - if (ext != NULL) { - memset(ext, 0, sizeof(struct iw_encode_ext) + 16); - iwr.u.encoding.pointer = ext; - ret = iw_ioctl(ifname, SIOCGIWENCODEEXT, &iwr); - if (ret >= 0) { - *alg = ext->alg; - if (key_idx) - *key_idx = (uint8_t ) iwr.u.encoding.flags; - if (passphrase) - memcpy(passphrase, ext->key, ext->key_len); - } - vPortFree(ext); - } -#if CONFIG_DEBUG_LOG > 3 - else { - error_printf("%s: Can't malloc memory!\n", __func__); - } -#endif - return ret; -} - -int wext_set_passphrase(const char *ifname, const uint8_t *passphrase, - uint16_t passphrase_len) { - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - iwr.u.passphrase.pointer = (void *) passphrase; - iwr.u.passphrase.length = passphrase_len; - iwr.u.passphrase.flags = (passphrase_len != 0); - return iw_ioctl(ifname, SIOCSIWPRIVPASSPHRASE, &iwr); -} - -int wext_get_passphrase(const char *ifname, uint8_t *passphrase) { -#if USE_WIFI_ADAPTER - extern int rtw_wx_get_passphrase(struct net_device *dev, struct iw_request_info *a, union iwreq_data *wrqu, char *extra); - struct net_device * pdev = rltk_wlan_info[0].dev; - if(ifname[4] != '0') - pdev = rltk_wlan_info[1].dev; - rtw_result_t ret = RTW_ERROR; - if(pdev) { - uint16 len[4]; - ret = rtw_wx_get_passphrase(pdev, 0, &len, passphrase); - if(ret == RTW_SUCCESS) passphrase[len[2]] = '\0'; - debug_printf("pas[%d]-<%s>\n", len[2], passphrase); - } - return ret; -#else - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - iwr.u.passphrase.pointer = (void *) passphrase; - int ret = iw_ioctl(ifname, SIOCGIWPRIVPASSPHRASE, &iwr); - if (ret >= 0) { - ret = iwr.u.passphrase.length; - passphrase[ret] = '\0'; - } - return ret; -#endif -} - -#if 0 -int wext_set_mac_address(const char *ifname, char * mac) -{ - char buf[13+17+1]; - memset(buf, 0, sizeof(buf)); - snprintf(buf, 13+17, "write_mac %s", mac); - return wext_private_command(ifname, buf, 0); -} - -int wext_get_mac_address(const char *ifname, char * mac) -{ - int ret = 0; - char buf[32]; - - memset(buf, 0, sizeof(buf)); - memcpy(buf, "read_mac", 8); - ret = wext_private_command_with_retval(ifname, buf, buf, 32); - strcpy(mac, buf); - return ret; -} -#endif - -int wext_enable_powersave(const char *ifname, uint8_t ips_mode, uint8_t lps_mode) { -#if USE_WIFI_ADAPTER - _adapter * pad = get_padapter(ifname); - rtw_result_t ret = RTW_ERROR; - if(pad) { - ret = rtw_pm_set_ips(pad, ips_mode); // 2 режима 1,2 ! - if(ret == RTW_SUCCESS) { - LeaveAllPowerSaveMode(pad); - ret = rtw_pm_set_lps(pad, lps_mode); - } - } - return ret; -#else - struct iwreq iwr; - uint16_t pindex = 7; - uint8_t para[16]; // 7 + (1+1+1) + (1+1+1) - int cmd_len = sizeof("pm_set"); - memset(&iwr, 0, sizeof(iwr)); - // Encode parameters as TLV (type, length, value) format - snprintf((char*) para, cmd_len, "pm_set"); - para[pindex++] = 0; // type 0 for ips - para[pindex++] = 1; - para[pindex++] = ips_mode; - para[pindex++] = 1; // type 1 for lps - para[pindex++] = 1; - para[pindex++] = lps_mode; - iwr.u.data.pointer = ¶[0]; - iwr.u.data.length = pindex; - return iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); -#endif -} -/* -int wext_disable_powersave(const char *ifname) { - struct iwreq iwr; - uint16_t pindex = 7; - uint8_t para[16]; // 7 + (1+1+1) + (1+1+1) - int cmd_len = sizeof("pm_set"); - memset(&iwr, 0, sizeof(iwr)); - // Encode parameters as TLV (type, length, value) format - snprintf((char*) para, cmd_len, "pm_set"); - para[pindex++] = 0; // type 0 for ips - para[pindex++] = 1; - para[pindex++] = 0; // ips = 0 - para[pindex++] = 1; // type 1 for lps - para[pindex++] = 1; - para[pindex++] = 0; // lps = 0 - iwr.u.data.pointer = ¶[0]; - iwr.u.data.length = pindex; - return iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); -} -*/ - -int wext_set_tdma_param(const char *ifname, uint8_t slot_period, - uint8_t rfon_period_len_1, uint8_t rfon_period_len_2, uint8_t rfon_period_len_3) { -#if USE_WIFI_ADAPTER - _adapter * pad = get_padapter(ifname); - rtw_result_t ret = RTW_ERROR; - if(pad) { - ret = rtw_pm_set_tdma_param(pad, - slot_period, - rfon_period_len_1, - rfon_period_len_2, - rfon_period_len_3); - } - return ret; -#else - struct iwreq iwr; - uint16_t pindex = 7; - uint8_t para[16]; // 7+(1+1+4) - int cmd_len = sizeof("pm_set"); - memset(&iwr, 0, sizeof(iwr)); - // Encode parameters as TLV (type, length, value) format - snprintf((char*) para, cmd_len, "pm_set"); - para[pindex++] = 2; // type 2 tdma param - para[pindex++] = 4; - para[pindex++] = slot_period; - para[pindex++] = rfon_period_len_1; - para[pindex++] = rfon_period_len_2; - para[pindex++] = rfon_period_len_3; - iwr.u.data.pointer = para; - iwr.u.data.length = pindex; - return iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); -#endif -} - -int wext_set_lps_dtim(const char *ifname, uint8_t lps_dtim) { -#if USE_WIFI_ADAPTER - _adapter * pad = get_padapter(ifname); - rtw_result_t ret = RTW_ERROR; - if(pad) { - ret = rtw_pm_set_lps_dtim(pad, lps_dtim); - } - return ret; -#else - struct iwreq iwr; - int ret = -1; - uint16_t pindex = 7; - uint8_t para[16]; // 7+(1+1+1) - int cmd_len = 0; - - memset(&iwr, 0, sizeof(iwr)); - cmd_len = sizeof("pm_set"); - // Encode parameters as TLV (type, length, value) format - snprintf((char*) para, cmd_len, "pm_set"); - para[pindex++] = 3; // type 3 lps dtim - para[pindex++] = 1; - para[pindex++] = lps_dtim; - iwr.u.data.pointer = ¶[0]; - iwr.u.data.length = pindex; - ret = iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); - return ret; -#endif -} - -int wext_get_lps_dtim(const char *ifname, uint8_t *lps_dtim) { -#if USE_WIFI_ADAPTER - _adapter * pad = get_padapter(ifname); - rtw_result_t ret = RTW_ERROR; - if(pad) { - *lps_dtim = rtw_pm_get_lps_dtim(pad); - ret = RTW_SUCCESS; - } - return ret; -#else - struct iwreq iwr; - int ret = -1; - uint16_t pindex = 7; - int cmd_len = 0; - uint8_t para[16]; // 7+(1+1+1) - memset(&iwr, 0, sizeof(iwr)); - cmd_len = sizeof("pm_get"); - // Encode parameters as TLV (type, length, value) format - snprintf((char*) para, cmd_len, "pm_get"); - para[pindex++] = 3; // type 3 for lps dtim - para[pindex++] = 1; - para[pindex++] = 0; - iwr.u.data.pointer = ¶[0]; - iwr.u.data.length = pindex; - ret = iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); - //get result at the beginning of iwr.u.data.pointer - if ((para[0] == 3) && (para[1] == 1)) - *lps_dtim = para[2]; - else { -#if CONFIG_DEBUG_LOG > 3 - error_printf("%s: error!\n", __func__); -#endif - ret = -1; - } - return ret; -#endif -} - -int wext_set_tos_value(const char *ifname, uint8_t *tos_value) { - struct iwreq iwr; - uint8_t para[sizeof("set_tos_value") + 4]; - int cmd_len = sizeof("set_tos_value"); - memset(&iwr, 0, sizeof(iwr)); - snprintf((char*) para, cmd_len, "set_tos_value"); - if (*tos_value >= 0 && *tos_value <= 32) { - *(para + cmd_len) = 0x4f; - *(para + cmd_len + 1) = 0xa4; - *(para + cmd_len + 2) = 0; - *(para + cmd_len + 3) = 0; - } else if (*tos_value > 32 && *tos_value <= 96) { - *(para + cmd_len) = 0x2b; - *(para + cmd_len + 1) = 0xa4; - *(para + cmd_len + 2) = 0; - *(para + cmd_len + 3) = 0; - } else if (*tos_value > 96 && *tos_value <= 160) { - *(para + cmd_len) = 0x22; - *(para + cmd_len + 1) = 0x43; - *(para + cmd_len + 2) = 0x5e; - *(para + cmd_len + 3) = 0; - } else if (*tos_value > 160) { - *(para + cmd_len) = 0x22; - *(para + cmd_len + 1) = 0x32; - *(para + cmd_len + 2) = 0x2f; - *(para + cmd_len + 3) = 0; - } - iwr.u.data.pointer = ¶[0]; - iwr.u.data.length = cmd_len + 4; - return iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); -} - -int wext_get_tx_power(const char *ifname, uint8_t *poweridx) { - struct iwreq iwr; - int ret = -1; - uint8_t *para; - int cmd_len = sizeof("get_tx_power"); - memset(&iwr, 0, sizeof(iwr)); - //Tx power size : 20 Bytes - //CCK 1M,2M,5.5M,11M : 4 Bytes - //OFDM 6M, 9M, 12M, 18M, 24M, 36M 48M, 54M : 8 Bytes - //MCS 0~7 : 8 Bytes - para = pvPortMalloc(cmd_len + 20); - if (para != NULL) { - snprintf((char*) para, cmd_len, "get_tx_power"); - iwr.u.data.pointer = para; - iwr.u.data.length = cmd_len + 20; - ret = iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); - if (ret >= 0) - memcpy(poweridx, (uint8_t *) (iwr.u.data.pointer), 20); - vPortFree(para); - } -#if CONFIG_DEBUG_LOG > 3 - else { - error_printf("%s: Can't malloc memory!\n", __func__); - } -#endif - return ret; -} - -int wext_get_associated_client_list(const char *ifname, - void * client_list_buffer, uint16_t buffer_length) { - char buf[25]; - - memset(buf, 0, sizeof(buf)); - snprintf(buf, 25, "get_client_list %x", client_list_buffer); - return wext_private_command(ifname, buf, 0); -} - -#if 0 // work ? -int wext_set_txpower(const char *ifname, int poweridx) { - int ret; - char buf[32]; - - memset(buf, 0, sizeof(buf)); -// snprintf(buf, 24, "txpower patha=%d", poweridx); - snprintf(buf, sizeof(buf), "txpower patha=%d,pathb=%d", poweridx, poweridx); - ret = wext_private_command(ifname, buf, 0); - - return ret; -} - -int wext_get_ap_info(const char *ifname, rtw_bss_info_t * ap_info, - rtw_security_t* security) { - int ret = 0; - char buf[24]; - - memset(buf, 0, sizeof(buf)); - snprintf(buf, 24, "get_ap_info %x", ap_info); - ret = wext_private_command(ifname, buf, 0); - - snprintf(buf, 24, "get_security"); - ret = wext_private_command_with_retval(ifname, buf, buf, 24); - sscanf(buf, "%d", security); - - return ret; -} -#endif - -int wext_set_mode(const char *ifname, int mode) { -#if USE_WIFI_ADAPTER - _adapter * pad = get_padapter(ifname); - int nwm; - if(rtw_pwr_wakeup(pad) && pad->hw_init_completed) { - switch(mode) { - case IW_MODE_AUTO: - nwm = Ndis802_11AutoUnknown; - break; - case IW_MODE_MASTER: - nwm = Ndis802_11APMode; - break; - case IW_MODE_INFRA: - nwm = Ndis802_11Infrastructure; - break; - case IW_MODE_ADHOC: - nwm = Ndis802_11IBSS; - break; - default: - return RTW_NORESOURCE; - } - if(rtw_set_802_11_infrastructure_mode(pad, nwm)) { - return set_opmode(pad, nwm); - } - } - return RTW_ERROR; -#else - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - iwr.u.mode = mode; - return iw_ioctl(ifname, SIOCSIWMODE, &iwr); -#endif -} - -int wext_get_mode(const char *ifname, int *mode) { -#if USE_WIFI_ADAPTER - _adapter * pad = get_padapter(ifname); - rtw_result_t ret = RTW_ERROR; - if(pad) { - uint16 f = pad->mlmepriv.fw_state; - if(f & 8) *mode = 2; - else if(f & 0x60) *mode = 1; - else if(!(f & 0x10)) *mode = 0; - else *mode = 3; - ret = RTW_SUCCESS; - } - return ret; -#else - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - int ret = iw_ioctl(ifname, SIOCGIWMODE, &iwr); - if (ret >= 0) - *mode = iwr.u.mode; - return ret; -#endif -} - -int wext_set_ap_ssid(const char *ifname, const uint8_t *ssid, uint16_t ssid_len) { -#if USE_WIFI_ADAPTER - struct net_device * pdev = rltk_wlan_info[0].dev; - if(ifname[4] != '0') - pdev = rltk_wlan_info[1].dev; - rtw_result_t ret = RTW_ERROR; - if(pdev) { - uint16 len[2]; - len[0] = ssid_len; - len[1] = (ssid_len != 0); - ret = rtw_wx_set_ap_essid(pdev, 0, &len, ssid); - } - return ret; -#else - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - iwr.u.essid.pointer = (void *) ssid; - iwr.u.essid.length = ssid_len; - iwr.u.essid.flags = (ssid_len != 0); - return iw_ioctl(ifname, SIOCSIWPRIVAPESSID, &iwr); -#endif -} - -int wext_set_country(const char *ifname, rtw_country_code_t country_code) { - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - iwr.u.param.value = country_code; - return iw_ioctl(ifname, SIOCSIWPRIVCOUNTRY, &iwr); -} - -int wext_get_rssi(const char *ifname, int *rssi) { -#if USE_WIFI_ADAPTER - _adapter * pad = get_padapter(ifname); - rtw_result_t ret = RTW_ERROR; - if(pad) { - if(pad->mlmepriv.fw_state & 1) { - *rssi = pad->recvpriv.rssi; // +2932 - } - else *rssi = 0; - ret = RTW_SUCCESS; - } - return ret; -#else - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - int ret = iw_ioctl(ifname, SIOCGIWSENS, &iwr); - if (ret >= 0) - *rssi = 0 - iwr.u.sens.value; - return ret; -#endif -} - -int wext_set_pscan_channel(const char *ifname, - uint8_t *ch, - uint8_t *pscan_config, - uint8_t length) { - struct iwreq iwr; - int ret = -1; - uint8_t *para; - int i = 0; - memset(&iwr, 0, sizeof(iwr)); - //Format of para:function_name num_channel chan1... pscan_config1 ... - para = pvPortMalloc((length + length + 1) + 12); //size:num_chan + num_time + length + function_name - if (para != NULL) { - //Cmd - snprintf((char*) para, 12, "PartialScan"); - //length - *(para + 12) = length; - for (i = 0; i < length; i++) { - *(para + 13 + i) = *(ch + i); - *((uint16_t *) (para + 13 + length + i)) = *(pscan_config + i); - } - - iwr.u.data.pointer = para; - iwr.u.data.length = (length + length + 1) + 12; - ret = iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); - vPortFree(para); - } -#if CONFIG_DEBUG_LOG > 3 - else { - error_printf("%s: Can't malloc memory!\n", __func__); - } -#endif - return ret; -} - -//extern int rtw_wx_set_freq(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); - -int wext_set_channel(const char *ifname, uint8_t ch) { -#if 0 //def USE_WIFI_ADAPTER // link: undefined reference to `rtw_wx_set_freq' -> rtw_wx_set_freq.isra.10 - struct net_device * pdev = rltk_wlan_info[0].dev; - if(ifname[4] != '0') - pdev = rltk_wlan_info[1].dev; - rtw_result_t ret = RTW_ERROR; - if(pdev) { - ret = rtw_wx_set_freq(pdev, ch, NULL, NULL); - } - return ret; -#else - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - iwr.u.freq.m = 0; - iwr.u.freq.e = 0; - iwr.u.freq.i = ch; - return iw_ioctl(ifname, SIOCSIWFREQ, &iwr); -#endif -} - -int wext_get_channel(const char *ifname, uint8_t *ch) { -#if USE_WIFI_ADAPTER - _adapter * pad = get_padapter(ifname); - rtw_result_t ret = RTW_ERROR; - if(pad) { - if(pad->mlmepriv.fw_state & 1) { - *ch = pad->mlmepriv.cur_network.network.Configuration.DSConfig; - } - else { - *ch = pad->mlmeextpriv.cur_channel; - } - ret = RTW_SUCCESS; - } - return ret; -#else - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - int ret = iw_ioctl(ifname, SIOCGIWFREQ, &iwr); - if (ret >= 0) - *ch = iwr.u.freq.i; - return ret; -#endif -} - -int wext_register_multicast_address(const char *ifname, rtw_mac_t *mac) { - char buf[32]; - memset(buf, 0, sizeof(buf)); - snprintf(buf, 32, "reg_multicast "MAC_FMT, MAC_ARG(mac->octet)); - return wext_private_command(ifname, buf, 0); -} - -int wext_unregister_multicast_address(const char *ifname, rtw_mac_t *mac) { - char buf[36]; - memset(buf, 0, sizeof(buf)); - snprintf(buf, 35, "reg_multicast -d "MAC_FMT, MAC_ARG(mac->octet)); - return wext_private_command(ifname, buf, 0); -} - -int wext_set_scan(const char *ifname, char *buf, uint16_t buf_len, uint16_t flags) { - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); -#if 0 //for scan_with_ssid - if(buf) - memset(buf, 0, buf_len); -#endif - iwr.u.data.pointer = buf; - iwr.u.data.flags = flags; - iwr.u.data.length = buf_len; - return iw_ioctl(ifname, SIOCSIWSCAN, &iwr); -} - -int wext_get_scan(const char *ifname, char *buf, uint16_t buf_len) { - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - iwr.u.data.pointer = buf; - iwr.u.data.length = buf_len; - int ret = iw_ioctl(ifname, SIOCGIWSCAN, &iwr); - if (ret >= 0) - ret = iwr.u.data.flags; - return ret; -} - -int wext_private_command_with_retval(const char *ifname, char *cmd, - char *ret_buf, int ret_len) { - struct iwreq iwr; - int ret = -1, buf_size; - char *buf; - - buf_size = 128; - - if (strlen(cmd) >= buf_size) - buf_size = strlen(cmd) + 1; // 1 : '\0' - buf = (char*) pvPortMalloc(buf_size); - if (buf != NULL) { - memset(buf, 0, buf_size); - strcpy(buf, cmd); - memset(&iwr, 0, sizeof(iwr)); - iwr.u.data.pointer = buf; - iwr.u.data.length = buf_size; - iwr.u.data.flags = 0; - ret = iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); - if (ret >= 0 && ret_buf != NULL) { - if (ret_len > iwr.u.data.length) - ret_len = iwr.u.data.length; - memcpy(ret_buf, (char *) iwr.u.data.pointer, ret_len); - } - vPortFree(buf); - } -#if CONFIG_DEBUG_LOG > 3 - else { - error_printf("%s: Can't malloc memory!\n", __func__); - } -#endif - return ret; -} - -int wext_private_command(const char *ifname, char *cmd, int show_msg) { - struct iwreq iwr; - int ret = -1, buf_size; - char *buf; - - uint8_t cmdname[17] = { 0 }; // IFNAMSIZ+1 - - sscanf(cmd, "%16s", cmdname); - if ((strcmp((const char *)cmdname, "config_get") == 0) - || (strcmp((const char *)cmdname, "config_set") == 0) - || (strcmp((const char *)cmdname, "efuse_get") == 0) - || (strcmp((const char *)cmdname, "efuse_set") == 0) - || (strcmp((const char *)cmdname, "mp_psd") == 0)) - buf_size = 2600; //2600 for config_get rmap,0,512 (or realmap) - else - buf_size = 512; - - if (strlen(cmd) >= buf_size) - buf_size = strlen(cmd) + 1; // 1 : '\0' - buf = (char*) pvPortMalloc(buf_size); - if (buf != NULL) { - memset(buf, 0, buf_size); - strcpy(buf, cmd); - memset(&iwr, 0, sizeof(iwr)); - iwr.u.data.pointer = buf; - iwr.u.data.length = buf_size; - iwr.u.data.flags = 0; - - ret = iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); - if (ret >= 0 && show_msg && iwr.u.data.length) { -#if CONFIG_DEBUG_LOG > 3 - if (iwr.u.data.length > buf_size) { - error_printf("%s: Can't malloc memory!\n", __func__); - } - info_printf("Private Message: %s\n", (char * ) iwr.u.data.pointer); -#endif - } - vPortFree(buf); - } -#if CONFIG_DEBUG_LOG > 3 - else { - error_printf("%s: Can't malloc memory!\n", __func__); - } -#endif - return ret; -} - -void wext_wlan_indicate(unsigned int cmd, union iwreq_data *wrqu, char *extra) { - unsigned char null_mac[6] = { 0 }; - - switch (cmd) { - case SIOCGIWAP: - if (wrqu->ap_addr.sa_family == ARPHRD_ETHER) { - if (!memcmp(wrqu->ap_addr.sa_data, null_mac, sizeof(null_mac))) - wifi_indication(WIFI_EVENT_DISCONNECT, NULL, 0, 0); - else - wifi_indication(WIFI_EVENT_CONNECT, wrqu->ap_addr.sa_data, - sizeof(null_mac), 0); - } - break; - - case IWEVCUSTOM: - if (extra) { -#if CONFIG_DEBUG_LOG > 4 - info_printf("IWEVCUSTOM '%s'\n", extra); -#endif - if (!memcmp(IW_EXT_STR_FOURWAY_DONE, extra, - strlen(IW_EXT_STR_FOURWAY_DONE))) - wifi_indication(WIFI_EVENT_FOURWAY_HANDSHAKE_DONE, extra, - strlen(IW_EXT_STR_FOURWAY_DONE), 0); - else if (!memcmp(IW_EXT_STR_RECONNECTION_FAIL, extra, - strlen(IW_EXT_STR_RECONNECTION_FAIL))) - wifi_indication(WIFI_EVENT_RECONNECTION_FAIL, extra, - strlen(IW_EXT_STR_RECONNECTION_FAIL), 0); - else if (!memcmp(IW_EVT_STR_NO_NETWORK, extra, - strlen(IW_EVT_STR_NO_NETWORK))) - wifi_indication(WIFI_EVENT_NO_NETWORK, extra, - strlen(IW_EVT_STR_NO_NETWORK), 0); -#if CONFIG_ENABLE_P2P || defined(CONFIG_AP_MODE) - else if (!memcmp(IW_EVT_STR_STA_ASSOC, extra, - strlen(IW_EVT_STR_STA_ASSOC))) - wifi_indication(WIFI_EVENT_STA_ASSOC, wrqu->data.pointer, - wrqu->data.length, 0); - else if (!memcmp(IW_EVT_STR_STA_DISASSOC, extra, - strlen(IW_EVT_STR_STA_DISASSOC))) - wifi_indication(WIFI_EVENT_STA_DISASSOC, wrqu->addr.sa_data, - sizeof(null_mac), 0); - else if (!memcmp(IW_EVT_STR_SEND_ACTION_DONE, extra, - strlen(IW_EVT_STR_SEND_ACTION_DONE))) - wifi_indication(WIFI_EVENT_SEND_ACTION_DONE, NULL, 0, - wrqu->data.flags); -#endif - } - break; - case SIOCGIWSCAN: - if (wrqu->data.pointer == NULL) - wifi_indication(WIFI_EVENT_SCAN_DONE, NULL, 0, 0); - else - wifi_indication(WIFI_EVENT_SCAN_RESULT_REPORT, wrqu->data.pointer, - wrqu->data.length, 0); - break; -#if CONFIG_ENABLE_P2P - case IWEVMGNTRECV: - wifi_indication(WIFI_EVENT_RX_MGNT, wrqu->data.pointer, - wrqu->data.length, wrqu->data.flags); - break; -#endif -#ifdef REPORT_STA_EVENT - case IWEVREGISTERED: - if(wrqu->addr.sa_family == ARPHRD_ETHER) - wifi_indication(WIFI_EVENT_STA_ASSOC, wrqu->addr.sa_data, sizeof(null_mac), 0); - break; - case IWEVEXPIRED: - if(wrqu->addr.sa_family == ARPHRD_ETHER) - wifi_indication(WIFI_EVENT_STA_DISASSOC, wrqu->addr.sa_data, sizeof(null_mac), 0); - break; -#endif - default: -#if CONFIG_DEBUG_LOG > 4 - info_printf("\nwlan_indicate: %p!\n", cmd); -#endif - break; - } -} - -int wext_send_eapol(const char *ifname, char *buf, uint16_t buf_len, uint16_t flags) { - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - iwr.u.data.pointer = buf; - iwr.u.data.length = buf_len; - iwr.u.data.flags = flags; - return iw_ioctl(ifname, SIOCSIWEAPOLSEND, &iwr); -} - -//#if CONFIG_ENABLE_P2P -int wext_send_mgnt(const char *ifname, char *buf, uint16_t buf_len, uint16_t flags) { - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - iwr.u.data.pointer = buf; - iwr.u.data.length = buf_len; - iwr.u.data.flags = flags; - return iw_ioctl(ifname, SIOCSIWMGNTSEND, &iwr); -} -//#endif - -int wext_set_gen_ie(const char *ifname, char *buf, uint16_t buf_len, uint16_t flags) { - struct iwreq iwr; - memset(&iwr, 0, sizeof(iwr)); - iwr.u.data.pointer = buf; - iwr.u.data.length = buf_len; - iwr.u.data.flags = flags; - return iw_ioctl(ifname, SIOCSIWGENIE, &iwr); -} - -int wext_set_autoreconnect(const char *ifname, uint8_t mode, uint8_t retyr_times, - uint16_t timeout) { - struct iwreq iwr; - uint8_t para[sizeof("SetAutoRecnt") + 4]; - int cmd_len = sizeof("SetAutoRecnt"); - memset(&iwr, 0, sizeof(iwr)); - //Cmd - snprintf((char*) para, cmd_len, "SetAutoRecnt"); - //length - *(para + cmd_len) = mode; //para1 - *(para + cmd_len + 1) = retyr_times; //para2 - *(para + cmd_len + 2) = timeout; //para3 - iwr.u.data.pointer = ¶[0]; - iwr.u.data.length = sizeof(para); - return iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); -} - -int wext_get_autoreconnect(const char *ifname, uint8_t *mode) { - struct iwreq iwr; - uint8_t para[sizeof("GetAutoRecnt") + 1]; - int cmd_len = sizeof("GetAutoRecnt"); - memset(&iwr, 0, sizeof(iwr)); - //Cmd - snprintf((char*) para, cmd_len, "GetAutoRecnt"); - //length - iwr.u.data.pointer = ¶[0]; - iwr.u.data.length = cmd_len; - int ret = iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); - if (ret >= 0) - *mode = *(uint8_t *) (iwr.u.data.pointer); - return ret; -} - -int wext_get_drv_ability(const char *ifname, uint32_t *ability) { - int ret = -1; - char * buf = (char *) pvPortMalloc(33); - if (buf != NULL) { - memset(buf, 0, 33); - snprintf(buf, 33, "get_drv_ability %x", ability); - ret = wext_private_command(ifname, buf, 0); - vPortFree(buf); - } -#if CONFIG_DEBUG_LOG > 3 - else { - error_printf("%s: Can't malloc memory!\n", __func__); - } -#endif - return ret; -} - -#ifdef CONFIG_CUSTOM_IE -int wext_add_custom_ie(const char *ifname, void *cus_ie, int ie_num) { - struct iwreq iwr; - int ret = -1; - uint8_t *para; - int cmd_len = sizeof("SetCusIE"); - if (ie_num <= 0 || !cus_ie) { -#if CONFIG_DEBUG_LOG > 3 - error_printf("%s: wrong parameter!\n", __func__); -#endif - } else { - memset(&iwr, 0, sizeof(iwr)); - para = pvPortMalloc((4) * 2 + cmd_len); //size:addr len+cmd_len - if (para != NULL) { - //Cmd - snprintf(para, cmd_len, "SetCusIE"); - //addr length - *(uint32_t *) (para + cmd_len) = (uint32_t ) cus_ie; //ie addr - //ie_num - *(uint32_t *) (para + cmd_len + 4) = ie_num; //num of ie - - iwr.u.data.pointer = para; - iwr.u.data.length = (4) * 2 + cmd_len; // 2 input - ret = iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); - vPortFree(para); - } -#if CONFIG_DEBUG_LOG > 3 - else { - error_printf("%s: Can't malloc memory!\n", __func__); - } -#endif - } - return ret; -} - -int wext_update_custom_ie(const char *ifname, void * cus_ie, int ie_index) { - struct iwreq iwr; - int ret = -1; - uint8_t *para = NULL; - int cmd_len = sizeof("UpdateIE"); - if (ie_index <= 0 || !cus_ie) { -#if CONFIG_DEBUG_LOG > 3 - error_printf("%s: wrong parameter!\n", __func__); -#endif - } else { - memset(&iwr, 0, sizeof(iwr)); - para = pvPortMalloc((4) * 2 + cmd_len); //size:addr len+cmd_len - if (para != NULL) { - //Cmd - snprintf(para, cmd_len, "UpdateIE"); - //addr length - *(uint32_t *) (para + cmd_len) = (uint32_t ) cus_ie; //ie addr - //ie_index - *(uint32_t *) (para + cmd_len + 4) = ie_index; //num of ie - - iwr.u.data.pointer = para; - iwr.u.data.length = (4) * 2 + cmd_len; // 2 input - ret = iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); - vPortFree(para); - } -#if CONFIG_DEBUG_LOG > 3 - else { - error_printf("%s: Can't malloc memory!\n", __func__); - } -#endif - } - return ret; -} - -int wext_del_custom_ie(const char *ifname) { - struct iwreq iwr; - uint8_t para[sizeof("DelIE")]; - memset(&iwr, 0, sizeof(iwr)); - //Cmd - snprintf(para, sizeof("DelIE"), "DelIE"); - iwr.u.data.pointer = ¶[0]; - iwr.u.data.length = sizeof("DelIE"); - return iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); -} - -#endif - -#ifdef CONFIG_AP_MODE -int wext_set_forwarding(const char *ifname, char flg) { - struct iwreq iwr; - uint8_t para[sizeof("forwarding_set") + 1]; - int cmd_len = sizeof("forwarding_set"); - memset(&iwr, 0, sizeof(iwr)); - // forwarding_set 1 - snprintf((char *) para, cmd_len, "forwarding_set"); - *(para + cmd_len) = flg; - iwr.u.essid.pointer = para; - iwr.u.essid.length = cmd_len + 1; - return iw_ioctl(ifname, SIOCDEVPRIVATE, &iwr); -} - -int wext_enable_forwarding(const char *ifname) { - return wext_set_forwarding(ifname, '1'); -} - -int wext_disable_forwarding(const char *ifname) { - return wext_set_forwarding(ifname, '0'); -} -#endif - -#ifdef CONFIG_CONCURRENT_MODE -int wext_set_ch_deauth(const char *ifname, uint8_t enable) { - char buf[16]; - memset(buf, 0, 16); - snprintf(buf, 16, "SetChDeauth %d", enable); - return wext_private_command(ifname, buf, 0); -} -#endif - -int wext_set_adaptivity(rtw_adaptivity_mode_t adaptivity_mode) { - extern uint8_t rtw_adaptivity_en; - extern uint8_t rtw_adaptivity_mode; - - switch (adaptivity_mode) { - case RTW_ADAPTIVITY_NORMAL: - rtw_adaptivity_en = 1; // enable adaptivity - rtw_adaptivity_mode = RTW_ADAPTIVITY_MODE_NORMAL; - break; - case RTW_ADAPTIVITY_CARRIER_SENSE: - rtw_adaptivity_en = 1; // enable adaptivity - rtw_adaptivity_mode = RTW_ADAPTIVITY_MODE_CARRIER_SENSE; - break; - case RTW_ADAPTIVITY_DISABLE: - default: - rtw_adaptivity_en = 0; //disable adaptivity - break; - } - return 0; -} - -int wext_set_adaptivity_th_l2h_ini(uint8_t l2h_threshold) { - extern int8_t rtw_adaptivity_th_l2h_ini; - rtw_adaptivity_th_l2h_ini = (int8_t ) l2h_threshold; - return 0; -} - -extern int rltk_get_auto_chl(const char *ifname, unsigned char *channel_set, - int channel_num); - -int wext_get_auto_chl(const char *ifname, unsigned char *channel_set, - unsigned char channel_num) { - int ret = -1; - int channel = 0; - wext_disable_powersave(ifname); - if ((channel = rltk_get_auto_chl(ifname, channel_set, channel_num)) != 0) - ret = channel; - wext_enable_powersave(ifname, 1, 1); - return ret; -} - -extern int rltk_set_sta_num(unsigned char ap_sta_num); - -int wext_set_sta_num(unsigned char ap_sta_num) { - return rltk_set_sta_num(ap_sta_num); -} - -extern int rltk_del_station(const char *ifname, unsigned char *hwaddr); - -int wext_del_station(const char *ifname, unsigned char* hwaddr) { - return rltk_del_station(ifname, hwaddr); -} - -extern struct list_head *mf_list_head; -int wext_init_mac_filter(void) { - int ret = -1; - if (mf_list_head == NULL) { - mf_list_head = malloc(sizeof(struct list_head)); - if (mf_list_head != NULL) { - INIT_LIST_HEAD(mf_list_head); - ret = 0; - } -#if CONFIG_DEBUG_LOG > 3 - else { - error_printf("%s: Can't malloc memory!\n", __func__); - } -#endif - } - return ret; -} - -int wext_deinit_mac_filter(void) { - int ret = -1; - if (mf_list_head != NULL) { - struct list_head *iterator; - rtw_mac_filter_list_t *item; - list_for_each(iterator, mf_list_head) - { - item = list_entry(iterator, rtw_mac_filter_list_t, node); - list_del(iterator); - free(item); - item = NULL; - iterator = mf_list_head; - } - free(mf_list_head); - mf_list_head = NULL; - ret = 0; - } - return ret; -} - -int wext_add_mac_filter(unsigned char* hwaddr) { - int ret = -1; - if (mf_list_head != NULL) { - rtw_mac_filter_list_t *mf_list_new; - mf_list_new = malloc(sizeof(rtw_mac_filter_list_t)); - if (mf_list_new != NULL) { - memcpy(mf_list_new->mac_addr, hwaddr, 6); - list_add(&(mf_list_new->node), mf_list_head); - ret = 0; - } -#if CONFIG_DEBUG_LOG > 3 - else { - error_printf("%s: Can't malloc memory!\n", __func__); - } -#endif - } - return ret; -} - -int wext_del_mac_filter(unsigned char* hwaddr) { - int ret = -1; - if (mf_list_head != NULL) { - struct list_head *iterator; - rtw_mac_filter_list_t *item; - list_for_each(iterator, mf_list_head) - { - item = list_entry(iterator, rtw_mac_filter_list_t, node); - if (memcmp(item->mac_addr, hwaddr, 6) == 0) { - list_del(iterator); - free(item); - item = NULL; - ret = 0; - } - } - } - return ret; -} diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_util.h b/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_util.h deleted file mode 100644 index c5b46a4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi/wifi_util.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef _UTIL_H -#define _UTIL_H - -#include -#include -#include -#include "wifi_structures.h" - -#ifdef __cplusplus -extern "C" { -#endif - -int wext_get_ssid(const char *ifname, uint8_t *ssid); -int wext_set_ssid(const char *ifname, const uint8_t *ssid, uint16_t ssid_len); -int wext_set_auth_param(const char *ifname, uint16_t idx, uint32_t value); -int wext_set_key_ext(const char *ifname, uint16_t alg, const uint8_t *addr, int key_idx, int set_tx, const uint8_t *seq, uint16_t seq_len, uint8_t *key, uint16_t key_len); -int wext_get_enc_ext(const char *ifname, uint16_t *alg, uint8_t *key_idx, uint8_t *passphrase); -int wext_set_passphrase(const char *ifname, const uint8_t *passphrase, uint16_t passphrase_len); -int wext_get_passphrase(const char *ifname, uint8_t *passphrase); -int wext_set_mode(const char *ifname, int mode); -int wext_get_mode(const char *ifname, int *mode); -int wext_set_ap_ssid(const char *ifname, const uint8_t *ssid, uint16_t ssid_len); -int wext_set_country(const char *ifname, rtw_country_code_t country_code); -int wext_get_rssi(const char *ifname, int *rssi); -int wext_set_channel(const char *ifname, uint8_t ch); -int wext_get_channel(const char *ifname, uint8_t *ch); -int wext_register_multicast_address(const char *ifname, rtw_mac_t *mac); -int wext_unregister_multicast_address(const char *ifname, rtw_mac_t *mac); -int wext_set_scan(const char *ifname, char *buf, uint16_t buf_len, uint16_t flags); -int wext_get_scan(const char *ifname, char *buf, uint16_t buf_len); -int wext_set_mac_address(const char *ifname, char * mac); -int wext_get_mac_address(const char *ifname, char * mac); -int wext_enable_powersave(const char *ifname, uint8_t lps_mode, uint8_t ips_mode); -int wext_disable_powersave(const char *ifname); -#define wext_disable_powersave(n) wext_enable_powersave(n, 0, 0) -int wext_set_tdma_param(const char *ifname, uint8_t slot_period, uint8_t rfon_period_len_1, uint8_t rfon_period_len_2, uint8_t rfon_period_len_3); -int wext_set_lps_dtim(const char *ifname, uint8_t lps_dtim); -int wext_get_lps_dtim(const char *ifname, uint8_t *lps_dtim); -int wext_get_tx_power(const char *ifname, uint8_t *poweridx); -int wext_set_txpower(const char *ifname, int poweridx); -int wext_get_associated_client_list(const char *ifname, void * client_list_buffer, uint16_t buffer_length); -int wext_get_ap_info(const char *ifname, rtw_bss_info_t * ap_info, rtw_security_t* security); -int wext_mp_command(const char *ifname, char *cmd, int show_msg); -int wext_private_command(const char *ifname, char *cmd, int show_msg); -int wext_private_command_with_retval(const char *ifname, char *cmd, char *ret_buf, int ret_len); -void wext_wlan_indicate(unsigned int cmd, union iwreq_data *wrqu, char *extra); -int wext_set_pscan_channel(const char *ifname, uint8_t *ch, uint8_t *pscan_config, uint8_t length); -int wext_set_autoreconnect(const char *ifname, uint8_t mode, uint8_t retyr_times, uint16_t timeout); -int wext_get_autoreconnect(const char *ifname, uint8_t *mode); -int wext_set_adaptivity(rtw_adaptivity_mode_t adaptivity_mode); -int wext_set_adaptivity_th_l2h_ini(uint8_t l2h_threshold); -int wext_get_auto_chl(const char *ifname, unsigned char *channel_set, unsigned char channel_num); -int wext_set_sta_num(unsigned char ap_sta_num); -int wext_del_station(const char *ifname, unsigned char* hwaddr); -int wext_init_mac_filter(void); -int wext_deinit_mac_filter(void); -int wext_add_mac_filter(unsigned char* hwaddr); -int wext_del_mac_filter(unsigned char* hwaddr); -int wext_set_tos_value(const char *ifname, uint8_t *tos_value); -#ifdef CONFIG_CUSTOM_IE -int wext_add_custom_ie(const char *ifname, void * cus_ie, int ie_num); -int wext_update_custom_ie(const char *ifname, void * cus_ie, int ie_index); -int wext_del_custom_ie(const char *ifname); -#endif - -#define wext_handshake_done rltk_wlan_handshake_done - -int wext_send_mgnt(const char *ifname, char *buf, uint16_t buf_len, uint16_t flags); -int wext_send_eapol(const char *ifname, char *buf, uint16_t buf_len, uint16_t flags); -int wext_set_gen_ie(const char *ifname, char *buf, uint16_t buf_len, uint16_t flags); - -#ifdef __cplusplus -} -#endif - -#endif /* _UTIL_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi_api.c b/Firmware/RTLGDB/USDK/component/common/api/wifi_api.c deleted file mode 100644 index 6b96e7a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi_api.c +++ /dev/null @@ -1,924 +0,0 @@ -/* - * wifi_api.c - * - * Created on: 01/11/2017 - * Author: pvvx - */ -#include -#include "rtl8195a.h" -#include "drv_types.h" -#include -#include "FreeRTOS.h" -#if 1 -#include "drv_types.h" // or #include "wlan_lib.h" -#else -#include "wifi_constants.h" -#include "wifi_structures.h" -//#include "wlan_lib.h" // or #include "drv_types.h" -#endif - - -#if CONFIG_EXAMPLE_WLAN_FAST_CONNECT -#error "Udnef CONFIG_EXAMPLE_WLAN_FAST_CONNECT!" -#endif -#ifndef USE_FLASH_EEP -#error "Define USE_FLASH_EEP!" -#endif - -#include "task.h" -#include -#include -#include "flash_api.h" -#include -#include "dhcp/dhcps.h" -#include "ethernetif.h" -#if CONFIG_ETHERNET -#include "ethernet_mii/ethernet_mii.h" -#endif - -#include "flash_eep.h" -#include "feep_config.h" - -#include "wifi_api.h" -#include "main.h" -#include "wifi_user_set.h" - -#if 0 -#undef debug_printf -#define debug_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) -#undef info_printf -#define info_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) -#undef warning_printf -#define warning_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) -#undef error_printf -#define error_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) -#endif - -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP -extern void cmd_ap_wps(int argc, char **argv); -extern int wpas_wps_dev_config(uint8_t *dev_addr, uint8_t bregistrar); -#endif //CONFIG_WPS_AP - -//========================================= -//--- Wlan Config Init------------------- -WIFI_CONFIG wifi_cfg = { - .mode = DEF_WIFI_MODE, // rtw_mode_t - .adaptivity = DEF_WIFI_ADAPTIVITY, // rtw_adaptivity_mode_t - .country_code = DEF_WIFI_COUNTRY,// rtw_country_code_t - .tx_pwr = DEF_WIFI_TX_PWR, // rtw_tx_pwr_percentage_t - .bgn = DEF_WIFI_BGN, // rtw_network_mode_t - .load_flg = DEF_LOAD_CFG, - .save_flg = DEF_SAVE_CFG -}; -//---- Interface 0 - wlan0 - AP - init --- -SOFTAP_CONFIG wifi_ap_cfg = { - .ssid = DEF_AP_SSID, - .password = DEF_AP_PASSWORD, - .security = (unsigned char)DEF_AP_SECURITY, // RTW_SECURITY_WPA2_AES_PSK or RTW_SECURITY_OPEN - .beacon_interval = DEF_AP_BEACON, - .channel = DEF_AP_CHANNEL, - .ssid_hidden = 0, - .max_sta = DEF_WIFI_AP_STATIONS // Max number of STAs, should be 1..3, default is 3 -}; -DHCP_CONFIG wifi_ap_dhcp = { - .ip = DEF_AP_IP, - .mask = DEF_AP_MSK, - .gw = DEF_AP_GW, - .mode = 2 -}; -//---- Interface 1 - wlan1 - ST - init --- -STATION_CONFIG wifi_st_cfg = { - .ssid = DEF_ST_SSID, - .password = DEF_ST_PASSWORD, - .bssid = DEF_ST_BSSID, - .flg = DEF_ST_USE_BSSID, - .security = DEF_ST_SECURITY, - .autoreconnect = DEF_ST_AUTORECONNECT, - .reconnect_pause = DEF_ST_RECONNECT_PAUSE, - .sleep = DEF_ST_SLEEP, - .dtim = DEF_ST_LPS_DTIM -}; -DHCP_CONFIG wifi_st_dhcp = { - .ip = DEF_ST_IP, - .mask = DEF_ST_MSK, - .gw = DEF_ST_GW, - .mode = 1 -}; - -unsigned char wifi_run_mode = RTW_MODE_NONE; // rtw_mode_t -unsigned char wifi_st_status; - -typedef int (*wlan_init_done_ptr)(void); -typedef int (*write_reconnect_ptr)(uint8_t *data, uint32_t len); -//Function -#if CONFIG_AUTO_RECONNECT -extern void (*p_wlan_autoreconnect_hdl)(rtw_security_t, char*, int, char*, int, int); -#endif -extern wlan_init_done_ptr p_wlan_init_done_callback; -//extern write_reconnect_ptr p_write_reconnect_ptr; -extern struct netif xnetif[NET_IF_NUM]; -extern uint8_t rtw_power_percentage_idx; -extern Rltk_wlan_t rltk_wlan_info[2]; // in wrapper.h - -#define PARM_RECONNECT 1 - -struct wifi_autoreconnect_param { -#if PARM_RECONNECT - rtw_security_t security_type; - int key_id; -#else - rtw_security_t security_type; - char *ssid; - int ssid_len; - char *password; - int password_len; - int key_id; -#endif -}; - -struct wifi_autoreconnect_param wifi_autoreconnect; - -typedef struct _feep_element { - uint16 id; - uint16 size; - void * obj; -} FEEP_ELEMENT, *PFEEP_ELEMENT; - -FEEP_ELEMENT feep_tab[] = { - { FEEP_ID_WIFI_AP_CFG, sizeof(wifi_ap_cfg), &wifi_ap_cfg }, // Bit0 BID_WIFI_AP_CFG - { FEEP_ID_WIFI_ST_CFG, sizeof(wifi_st_cfg), &wifi_st_cfg }, // Bit1 BID_WIFI_ST_CFG - { FEEP_ID_AP_DHCP_CFG, sizeof(wifi_ap_dhcp), &wifi_ap_dhcp }, // Bit2 BID_AP_DHCP_CFG - { FEEP_ID_ST_DHCP_CFG, sizeof(wifi_st_dhcp), &wifi_st_dhcp }, // Bit3 BID_ST_DHCP_CFG - { FEEP_ID_WIFI_CFG, sizeof(wifi_cfg), &wifi_cfg }, // Bit4 BID_WIFI_CFG - { FEEP_ID_AP_HOSTNAME, LWIP_NETIF_HOSTNAME_SIZE, &lwip_host_name[1] }, // Bit5 BID_AP_HOSTNAME - { FEEP_ID_ST_HOSTNAME, LWIP_NETIF_HOSTNAME_SIZE, &lwip_host_name[0] }, // Bit5 BID_ST_HOSTNAME - { 0, 0, NULL } -}; - -uint32 read_wifi_cfg(uint32 flg) -{ - uint32 ret = 0; - PFEEP_ELEMENT p = feep_tab; - for(int m = 1; m && p->id != 0; m <<= 1, p++) { - if((flg & m) - && flash_read_cfg(p->obj, p->id, p->size) < p->size) { - ret |= m; - }; - }; - return ret; -} - -uint32 write_wifi_cfg(uint32 flg) -{ - uint32 ret = 0; - PFEEP_ELEMENT p = feep_tab; - for(int m = 1; m && p->id != 0; m <<= 1, p++) { - if(flg & m) { - if(!flash_write_cfg(p->obj, p->id, p->size)) { - ret |= m; - }; - }; - }; - return ret; -} - -#if CONFIG_WLAN_CONNECT_CB -_WEAK void connect_start(void) -{ - info_printf("%s: Time at start %d ms.\n", __func__, xTaskGetTickCount()); -} - -_WEAK void connect_close(void) -{ - info_printf("%s: Time at start %d ms.\n", __func__, xTaskGetTickCount()); -} -#endif - -#ifdef NOT_USE_CALLS -static int wlan_init_done_callback(void) { - printf("WiFi Init after %d ms\n", xTaskGetTickCount()); - return 0; -} -#endif // #ifdef NOT_USE_CALLS - -//char wlan_st_name[] = WLAN0_NAME; -char wlan_st_name[] = WLAN0_NAME; -char wlan_ap_name[] = WLAN1_NAME; -unsigned char wlan_st_netifn = 0; -unsigned char wlan_ap_netifn = 1; - - -uint32 get_new_ip(void) -{ - if(!(wifi_cfg.mode ^ wifi_run_mode)) { - return current_netif->ip_addr.addr; - } else if(wifi_cfg.mode == RTW_MODE_AP) { - return wifi_ap_dhcp.ip; - } else if(wifi_st_dhcp.mode == 2) { - return wifi_st_dhcp.ip; - } - return 0; -} -uint8 * get_new_hostname(void) -{ - if(!(wifi_cfg.mode ^ wifi_run_mode)) { - return current_netif->hostname; - } else if(wifi_cfg.mode == RTW_MODE_AP) { - return lwip_host_name[1]; - }; - return lwip_host_name[0]; -} - -static uint8 chk_ap_netif_num(void) -{ - if (wifi_mode == RTW_MODE_AP) { - wlan_st_name[4] = '1'; - wlan_ap_name[4] = '0'; - wlan_st_netifn = 1; - wlan_ap_netifn = 0; - } - else { // if (wifi_mode == RTW_MODE_STA) { - wlan_st_name[4] = '0'; - wlan_ap_name[4] = '1'; - wlan_st_netifn = 0; - wlan_ap_netifn = 1; - } - return wlan_ap_netifn; -} - -extern Rltk_wlan_t rltk_wlan_info[2]; // in wrapper.h - -/*static _adapter * get_padaptern(int num) { - if(rltk_wlan_info[num].enable) { - return *(_adapter **)((rltk_wlan_info[0].dev)->priv); - } - return NULL; -};*/ -#define get_padaptern(num) (*(_adapter **)((rltk_wlan_info[num].dev)->priv)); - -rtw_result_t _wext_set_lps_dtim(int adapter_num, uint8 lps_dtim ) { - _adapter * pad = get_padaptern(adapter_num); - rtw_result_t ret = RTW_ERROR; - if(pad) { - ret = rtw_pm_set_lps_dtim(pad, lps_dtim); - } - return ret; -} - -int _wext_get_lps_dtim(int adapter_num) { - _adapter * pad = get_padaptern(adapter_num); - return rtw_pm_get_lps_dtim(pad); -} - -rtw_result_t _wext_enable_powersave(int adapter_num, uint8 ips_mode, uint8 lps_mode) { - _adapter * pad = get_padaptern(adapter_num); - rtw_result_t ret = RTW_ERROR; - if(pad) { - ret = rtw_pm_set_ips(pad, ips_mode); // 2 режима 1,2 ? - if(ret == RTW_SUCCESS) { - LeaveAllPowerSaveMode(pad); - ret = rtw_pm_set_lps(pad, lps_mode); - } - } - return ret; -} - -static int _wext_cmp_ssid(int adapter_num, unsigned char *ssid) -{ - _adapter * pad = get_padaptern(adapter_num); - int ret = 0; - if((pad != NULL) && (pad->mlmepriv.fw_state & 0x41) != 0) { - int len = pad->mlmepriv.cur_network.network.Ssid.SsidLength; - if(len < 32) len++; - else len = 32; - ret = (rtl_memcmp(ssid, &pad->mlmepriv.cur_network.network.Ssid.Ssid, len) == 0); - debug_printf("%d s[%d]'%s'\n", pad->mlmepriv.fw_state, len, ssid); - } - return ret; -} - -#ifdef NOT_USE_CALLS - -static rtw_result_t _wext_get_mode(int adapter_num, int *mode) { - _adapter * pad = get_padaptern(adapter_num); - rtw_result_t ret = RTW_ERROR; - if(pad) { - uint16 f = pad->mlmepriv.fw_state; - if(f & 8) *mode = 2; - else if(f & 0x60) *mode = 1; - else if(!(f & 0x10)) *mode = 0; - else *mode = 3; - ret = RTW_SUCCESS; - } - return ret; -} - -static rtw_result_t _wext_get_channel(int adapter_num, uint8 *ch) -{ - _adapter * pad = get_padaptern(adapter_num); - rtw_result_t ret = RTW_ERROR; - if(pad) { - if(pad->mlmepriv.fw_state & 1) { - *ch = pad->mlmepriv.htpriv.ch_offset; - } - else { - *ch = pad->mlmeextpriv.cur_channel; - } - ret = RTW_SUCCESS; - } - return ret; -} - -#endif // #ifdef NOT_USE_CALLS - - -static rtw_result_t wifi_run_ap(void) { - rtw_result_t ret = RTW_NOTAP; - if( (wifi_mode == RTW_MODE_AP) || (wifi_mode == RTW_MODE_STA_AP) ){ - info_printf("Starting AP (%s, netif%d)...\n", wlan_ap_name, wlan_ap_netifn); -/* - netif_set_addr(&xnetif[WLAN_AP_NETIF_NUM], &wifi_ap_dhcp.ip, - &wifi_ap_dhcp.mask, &wifi_ap_dhcp.gw); -*/ - if(wext_set_sta_num(wifi_ap_cfg.max_sta) != 0) { // Max number of STAs, should be 1..3, default is 3 - error_printf("AP not set max connections %d!\n", wifi_ap_cfg.max_sta); - }; -#if defined(CONFIG_ENABLE_WPS_AP) && CONFIG_ENABLE_WPS_AP - // todo: ветка не доделана - wpas_wps_dev_config(xnetif[WLAN_AP_NETIF_NUM].hwaddr, 1); -#endif //CONFIG_WPS_AP - if(wifi_ap_cfg.channel == 0 || wifi_ap_cfg.channel > 14) { - wifi_ap_cfg.channel = 1; - } - ret = wifi_start_ap(wifi_ap_cfg.ssid, //char *ssid, - wifi_ap_cfg.security, //rtw_security_t ecurity_type, - wifi_ap_cfg.password, //char *password, - wifi_ap_cfg.channel, //int channel - wifi_ap_cfg.ssid_hidden); // -// wifi_run_mode |= RTW_MODE_AP; - if (ret != RTW_SUCCESS) { - error_printf("Error(%d): Start AP failed!\n\n", ret);; - } else { - int timeout = wifi_test_timeout_ms / wifi_test_timeout_step_ms; - while (1) { -#if 1 - if (_wext_cmp_ssid(WLAN_AP_NETIF_NUM, wifi_ap_cfg.ssid )) { -#else - char essid[33]; - if ((wext_get_ssid(wlan_ap_name, (unsigned char *) essid) > 0) - &&(strcmp((const char * ) essid, (const char * )wifi_ap_cfg.ssid) == 0)) { -#endif -#ifdef CONFIG_DONT_CARE_TP - pnetiff->flags |= NETIF_FLAG_IPSWITCH; -#endif - if(wifi_ap_dhcp.mode) { -#if defined(DEF_AP_DHCP_START) && defined(DEF_AP_DHCP_STOP) - dhcps_ip4addr_pool_start = DEF_AP_DHCP_START; - dhcps_ip4addr_pool_end = DEF_AP_DHCP_STOP; -#endif - dhcps_init(&xnetif[WLAN_AP_NETIF_NUM]); - }; - info_printf("AP '%s' started after %d ms\n", - wifi_ap_cfg.ssid, xTaskGetTickCount()); - show_wifi_ap_ip(); - if(wifi_cfg.save_flg & (BID_WIFI_AP_CFG | BID_AP_DHCP_CFG)) - write_wifi_cfg(wifi_cfg.save_flg & (BID_WIFI_AP_CFG | BID_AP_DHCP_CFG)); - ret = RTW_SUCCESS; -#if CONFIG_WLAN_CONNECT_CB - // extern void connect_start(void); - connect_start(); -#endif - break; - } - if (timeout == 0) { - error_printf("Start AP timeout!\n"); - ret = RTW_TIMEOUT; - break; - } - vTaskDelay(wifi_test_timeout_step_ms / portTICK_RATE_MS); - timeout--; - } - } - } - return ret; - -} - -static rtw_result_t StartStDHCPClient(void) -{ - debug_printf("Start DHCPClient...\n"); - int ret = RTW_SUCCESS; - struct netif * pnetif = &xnetif[WLAN_ST_NETIF_NUM]; - DHCP_CONFIG *p = (DHCP_CONFIG *)&wifi_st_dhcp; - unsigned char mode = p->mode; - if(mode == 2 && p->ip != IP4ADDR(255,255,255,255) && p->ip != IP4ADDR(0,0,0,0)) { // fixed ip - netif_set_addr(pnetif, (ip_addr_t *)&p->ip, (ip_addr_t *)&p->mask, (ip_addr_t *)&p->gw); - } - else if(mode) { // DHCP On - UBaseType_t savePriority = uxTaskPriorityGet(NULL); - /* If not rise priority, LwIP DHCP may timeout */ - vTaskPrioritySet(NULL, tskIDLE_PRIORITY + 3); - /* Start DHCP Client */ - ret = LwIP_DHCP(WLAN_ST_NETIF_NUM, DHCP_START); - vTaskPrioritySet(NULL, savePriority); - if (ret == DHCP_ADDRESS_ASSIGNED) { - p->ip = pnetif->ip_addr.addr; - p->gw = pnetif->gw.addr; - p->mask = pnetif->netmask.addr; - if(mode > 2) { // 3+ Auto fix - p->mode = 2; // fixed ip - write_wifi_cfg(BID_ST_DHCP_CFG); - } - ret = RTW_SUCCESS; - } - else { - debug_printf("LwIP_DHCP ret=%d\n", ret); - ret = RTW_ERROR; - } - } - if(ret == RTW_SUCCESS) { - show_wifi_st_ip(); - wifi_st_status = WIFI_STA_CONNECTED; -#if CONFIG_WLAN_CONNECT_CB - // extern void connect_start(void); - connect_start(); -#endif - } - return ret; -} - -static void wifi_autoreconnect_thread_(void *param) { - int ret = RTW_ERROR; - struct wifi_autoreconnect_param *reconnect_param = - (struct wifi_autoreconnect_param *) param; - printf("auto reconnect ...\n"); - wifi_st_status = WIFI_STA_RECONNECT; - ret = wifi_connect( - wifi_st_cfg.bssid, - wifi_st_cfg.flg, -#if PARM_RECONNECT - wifi_st_cfg.ssid, - reconnect_param->security_type, - wifi_st_cfg.password, -#else - reconnect_param->ssid, - reconnect_param->security_type, - reconnect_param->password, -#endif - reconnect_param->key_id, - NULL); - if (ret == RTW_SUCCESS) { - if(wifi_cfg.save_flg & BID_WIFI_ST_CFG) - write_wifi_cfg(BID_WIFI_ST_CFG); - // Start DHCPClient - StartStDHCPClient(); - } - vTaskDelete(NULL); -} - -static void wifi_autoreconnect_hdl_(rtw_security_t security_type, char *ssid, - int ssid_len, char *password, int password_len, int key_id) { - wifi_autoreconnect.security_type = security_type; - wifi_autoreconnect.key_id = key_id; -#if PARM_RECONNECT==0 - wifi_autoreconnect.ssid = ssid; - wifi_autoreconnect.password = password; -#endif - _adapter * ad = *(_adapter **)((rltk_wlan_info[0].dev)->priv); - if(ad->mlmeextpriv.reconnect_cnt == 255) { - ad->mlmeextpriv.reconnect_cnt = 0; - }; - xTaskCreate(wifi_autoreconnect_thread_, (const char * )"st_recon", 400, - &wifi_autoreconnect, tskIDLE_PRIORITY + 1, NULL); -} - -static void st_set_autoreconnect(uint8 mode, uint8 count, uint16 timeout) { - p_wlan_autoreconnect_hdl = wifi_autoreconnect_hdl_; - _adapter * ad = *(_adapter **)((rltk_wlan_info[0].dev)->priv); - ad->mlmeextpriv.reconnect_times = count; - ad->mlmeextpriv.reconnect_timeout = timeout; - ad->mlmeextpriv.reconnect_cnt = 0; - ad->mlmeextpriv.auto_reconnect = (mode != 0); -} - -static rtw_result_t wifi_run_st(void) { - rtw_result_t ret = RTW_SUCCESS; -// chk_ap_netif_num(); - if((wifi_mode == RTW_MODE_STA) || (wifi_mode == RTW_MODE_STA_AP)) { -#if CONFIG_AUTO_RECONNECT -// p_wlan_autoreconnect_hdl = NULL; - if (wifi_st_cfg.autoreconnect) { - st_set_autoreconnect(1, wifi_st_cfg.autoreconnect, wifi_st_cfg.reconnect_pause); - ret = wext_set_autoreconnect(WLAN0_NAME, 1, wifi_st_cfg.autoreconnect, wifi_st_cfg.reconnect_pause); - if (ret != RTW_SUCCESS) - warning_printf("ERROR: Operation failed! Error=%d\n", ret); - } -#endif - info_printf("Connected to AP (%s, netif%d)...\n", wlan_st_name, wlan_st_netifn); - ret = wifi_connect( - wifi_st_cfg.bssid, - wifi_st_cfg.flg, - wifi_st_cfg.ssid, - idx_to_rtw_security(wifi_st_cfg.security), - wifi_st_cfg.password, - -1, - NULL); - wifi_st_status = WIFI_STA_START; -// wifi_run_mode |= RTW_MODE_STA; - if (ret != RTW_SUCCESS) { - error_printf("%s: Operation failed! Error(%d)\n", __func__, ret); - } else { - if(wifi_cfg.save_flg & BID_WIFI_ST_CFG) - write_wifi_cfg(BID_WIFI_ST_CFG); - // Start DHCPClient - StartStDHCPClient(); - } - }; - return ret; -} - -static int _wifi_on(rtw_mode_t mode) { - int ret = 0; -/* - if (!((rltk_wlan_running(WLAN0_IDX) == 0) && (rltk_wlan_running(WLAN1_IDX) == 0))) { - warning_printf("WIFI is already running\n"); - return 0; - } -*/ - info_printf("Initializing WIFI...\n"); - - uint8 devnum = (mode == RTW_MODE_STA_AP); // flag = 1 -> 2 netif - wifi_mode = mode; - chk_ap_netif_num(); - - // set wifi mib - // extern uint8_t rtw_adaptivity_en; - // rtw_adaptivity_en = 0; - // wext_set_adaptivity(RTW_ADAPTIVITY_DISABLE); // rtw_adaptivity_mode_t - wext_set_adaptivity(wifi_cfg.adaptivity & 3); - - debug_printf("Wlan0 init...\n"); - - ret = rltk_wlan_init(WLAN0_IDX, mode); // rtw_mode_t - - debug_printf("netif_set_up 0...\n"); - - netif_set_up(&xnetif[0]); - if (ret < 0) return ret; - if(devnum) { - debug_printf("Wlan1 init...\n"); - ret = rltk_wlan_init(WLAN1_IDX, mode); - if (ret < 0) return ret; - netif_set_up(&xnetif[1]); - } - else { - netif_set_down(&xnetif[1]); - } - - debug_printf("Wlan start...\n"); - - uint32 timeout = xTaskGetTickCount(); - rltk_wlan_start(WLAN0_IDX); - if(devnum) rltk_wlan_start(WLAN1_IDX); - while (1) { - if (rltk_wlan_running(WLAN0_IDX) - && rltk_wlan_running(devnum) ) { -//#if CONFIG_DEBUG_LOG > 2 - debug_printf("WIFI initialized (%d ms)\n", xTaskGetTickCount() - timeout); -//#endif - break; - } - if(xTaskGetTickCount() - timeout > wifi_test_timeout_ms/portTICK_RATE_MS) { - error_printf("WIFI init timeout!\n"); - break; - } - vTaskDelay(wifi_test_timeout_step_ms / portTICK_RATE_MS); - } - return ret; -} - -extern int lwip_init_done; - -static void _LwIP_Init(void) -{ - if(!lwip_init_done) { - int idx; - debug_printf("LwIP Init (%d)\n", wifi_mode); - /* Create tcp_ip stack thread */ - tcpip_init( NULL, NULL ); - -// chk_ap_netif_num(); // Исполняется после _wifi_on() - for(idx = 0; idx < NET_IF_NUM; idx++) { - xnetif[idx].name[0] = 'r'; - xnetif[idx].name[1] = '0' + idx; - } - netif_add(&xnetif[WLAN_ST_NETIF_NUM], (ip_addr_t *)&wifi_st_dhcp.ip, (ip_addr_t *)&wifi_st_dhcp.mask, (ip_addr_t *)&wifi_st_dhcp.gw, NULL, ðernetif_init, &tcpip_input); - netif_add(&xnetif[WLAN_AP_NETIF_NUM], (ip_addr_t *)&wifi_ap_dhcp.ip, (ip_addr_t *)&wifi_ap_dhcp.mask, (ip_addr_t *)&wifi_ap_dhcp.gw, NULL, ðernetif_init, &tcpip_input); -#if CONFIG_ETHERNET // && NET_IF_NUM > 2 - { - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - ipaddr.addr = DEF_EH_IP; - netmask.addr = DEF_EH_MSK; - gw.addr = DEF_EH_GW; - netif_add(&xnetif[2], &ipaddr, &netmask, &gw, NULL, ðernetif_mii_init, &tcpip_input); - } -#endif - /* Registers the default network interface. */ - netif_set_default(&xnetif[0]); - /* When the netif is fully configured this function must be called.*/ - for(idx = 0; idx < NET_IF_NUM; idx++) { - netif_set_up(&xnetif[idx]); - } - info_printf("interface %d is initialized\n", idx); - lwip_init_done = 1; - - init_event_callback_list(); - } -} - -extern int rltk_set_tx_power_percentage(rtw_tx_pwr_percentage_t power_percentage_idx); - -int wifi_run(rtw_mode_t mode) { - int ret = 0; -#if CONFIG_DEBUG_LOG > 4 - debug_printf("\n%s(%d), %d\n", __func__, mode, wifi_run_mode); - debug_printf("old mode = %d, new mode = %d\n", wifi_run_mode, mode); -#endif - if(wifi_mode) { // != mode) { - info_printf("Deinitializing WIFI ...\n"); - wifi_off(); - wifi_st_status = WIFI_STA_OFF; -// wifi_run_mode = RTW_MODE_NONE; - vTaskDelay(30); - } - if (mode != RTW_MODE_NONE) { - if (_wifi_on(mode) < 0) { - error_printf("Wifi On failed!\n"); - goto error_end; - }; - /* - if(wifi_cfg.adaptivity) - wext_set_adaptivity(wifi_cfg.adaptivity & 3); - */ - if(wifi_set_country(wifi_cfg.country_code) != RTW_SUCCESS) { - error_printf("WiFi: Error set tx country_code (%d)!", wifi_cfg.country_code); - }; - if(rtw_power_percentage_idx != wifi_cfg.tx_pwr) { - if(rltk_set_tx_power_percentage(wifi_cfg.tx_pwr) != RTW_SUCCESS) { - error_printf("WiFi: Error set tx power (%d)!", wifi_cfg.tx_pwr); - }; - } - if(wifi_set_network_mode(wifi_cfg.bgn) != RTW_SUCCESS) { - error_printf("WiFi: Error set network mode (%d)!", wifi_cfg.bgn); - } - debug_printf("mode=%d, wifi_mode=%d, old_mоde=%d\n", mode, wifi_mode, wifi_run_mode); - - if(mode <= RTW_MODE_STA_AP) { - struct netif * pnif = &xnetif[WLAN_ST_NETIF_NUM]; -#if LWIP_NETIF_HOSTNAME - // @todo ethernetif_init()... - pnif->hostname = lwip_host_name[0]; -#ifdef USE_NETBIOS - netbios_set_name(WLAN_ST_NETIF_NUM, lwip_host_name[0]); -#endif -#endif - netif_set_addr(&xnetif[WLAN_ST_NETIF_NUM], (ip_addr_t *) &wifi_st_dhcp.ip, - (ip_addr_t *) &wifi_st_dhcp.mask, (ip_addr_t *) &wifi_st_dhcp.gw); - pnif = &xnetif[WLAN_AP_NETIF_NUM]; -#if LWIP_NETIF_HOSTNAME - // @todo ethernetif_init()... - pnif->hostname = lwip_host_name[1]; -#ifdef USE_NETBIOS - netbios_set_name(WLAN_AP_NETIF_NUM, lwip_host_name[1]); -#endif -#endif - netif_set_addr(&xnetif[WLAN_AP_NETIF_NUM], (ip_addr_t *) &wifi_ap_dhcp.ip, - (ip_addr_t *) &wifi_ap_dhcp.mask, (ip_addr_t *) &wifi_ap_dhcp.gw); - - } - switch(mode) { - case RTW_MODE_STA_AP: - ret = wifi_run_ap() | wifi_run_st(); -// _wext_enable_powersave(0, 0, 0); - break; - case RTW_MODE_STA: - ret = wifi_run_st(); - if(_wext_set_lps_dtim(0, wifi_st_cfg.dtim)!= RTW_SUCCESS) { - error_printf("WiFi: Error set DTIM(%d)!", wifi_st_cfg.dtim); - }; - if(_wext_enable_powersave(0, wifi_st_cfg.sleep & 1, (wifi_st_cfg.sleep >> 1) & 1) != RTW_SUCCESS) { - // rtw_pm_set_ips(get_padaptern(0), wifi_st_cfg.sleep & 1 ); - // rtw_pm_set_lps(get_padaptern(0), (wifi_st_cfg.sleep >> 1) & 1 ); - error_printf("WiFi: Error set powersave mode!"); - }; - break; - case RTW_MODE_AP: - ret = wifi_run_ap(); -// _wext_enable_powersave(WLAN0_NAME, 0, 0); - break; -#if 0// CONFIG_ENABLE_?? - case RTW_MODE_PROMISC: - // @todo - break; -#endif -#if CONFIG_ENABLE_P2P - case RTW_MODE_P2P: - // @todo - break; -#endif - default: - ret = 1; - error_printf("WiFi: Error mode(%d)\n", wifi_mode); - }; - wifi_run_mode = mode; - if(ret == 0 && (wifi_cfg.save_flg & BID_WIFI_CFG)) { - wifi_cfg.mode = mode; - write_wifi_cfg(BID_WIFI_CFG); - }; - } else { - ret = 0; -error_end: -#if CONFIG_WLAN_CONNECT_CB - connect_close(); -#endif - if(wifi_run_mode) { - wifi_disconnect(); - }; - wifi_off(); - wifi_st_status = WIFI_STA_OFF; - wifi_run_mode = RTW_MODE_NONE; - chk_ap_netif_num(); - }; - return ret; -} - -/* Load cfg, init WiFi + LwIP init, WiFi start if wifi_cfg.mode != RTW_MODE_NONE */ -void wifi_init(void) { - debug_printf("\nLoad Config\n"); - read_wifi_cfg(wifi_cfg.load_flg); // DEF_LOAD_CFG - // Call back from wlan driver after wlan init done -// p_wlan_init_done_callback = wlan_init_done_callback; - // Call back from application layer after wifi_connection success -// p_write_reconnect_ptr = wlan_write_reconnect_data_to_flash; - p_wlan_autoreconnect_hdl = NULL; - _LwIP_Init(); -#if CONFIG_WIFI_IND_USE_THREAD - wifi_manager_init(); -#endif -// wifi_cfg.mode = RTW_MODE_PROMISC; //RTW_MODE_P2P; - wifi_run(wifi_cfg.mode); -} - -unsigned char *tab_txt_rtw_secyrity[] = { - "OPEN", //0 Open security - "WEP", //1 WEP Security with open authentication - "WEP SHARED", //2 WEP Security with shared authentication - "WPA TKIP", //3 WPA Security with TKIP - "WPA AES", //4 WPA Security with AES - "WPA2 TKIP", //5 WPA2 Security with TKIP - "WPA2 AES", //6 WPA2 Security with AES - "WPA2 Mixed", //7 WPA2 Security with AES & TKIP - "WPA/WPA2 AES", //8 WPA/WPA2 Security - "Unknown" //9 -}; - -unsigned int tab_code_rtw_secyrity[] = { - RTW_SECURITY_OPEN, //0 Open security - RTW_SECURITY_WEP_PSK, //1 WEP Security with open authentication - RTW_SECURITY_WEP_SHARED, //2 WEP Security with shared authentication - RTW_SECURITY_WPA_TKIP_PSK, //3 WPA Security with TKIP - RTW_SECURITY_WPA_AES_PSK, //4 WPA Security with AES - RTW_SECURITY_WPA2_TKIP_PSK, //5 WPA2 Security with TKIP - RTW_SECURITY_WPA2_AES_PSK, //6 WPA2 Security with AES - RTW_SECURITY_WPA2_MIXED_PSK, //7 WPA2 Security with AES & TKIP - RTW_SECURITY_WPA_WPA2_MIXED, //8 WPA/WPA2 Security - RTW_SECURITY_UNKNOWN //9 -}; - -/* -unsigned char *tab_txt_rtw_eccryption[] = { - "Unknown", - "OPEN", - "WEP40", - "WPA_TKIP", - "WPA_AES", - "WPA2_TKIP", - "WPA2_AES", - "WPA2_MIXED", - "???", - "WEP104", - "Udef" // 0xff -}; -*/ - -rtw_security_t idx_to_rtw_security(unsigned char idx) -{ - if(idx > IDX_SECURITY_UNKNOWN - 1) idx = IDX_SECURITY_WPA2_AES_PSK; - return (rtw_security_t)tab_code_rtw_secyrity[idx]; -} - -unsigned char rtw_security_to_idx(rtw_security_t rtw_sec_type) -{ - unsigned char i = 0; - while(rtw_sec_type != tab_code_rtw_secyrity[i] && tab_code_rtw_secyrity[i] != RTW_SECURITY_UNKNOWN) i++; - return i; -} - -unsigned char * idx_security_to_str(unsigned char idx) -{ - if(idx > IDX_SECURITY_UNKNOWN) idx = IDX_SECURITY_UNKNOWN; - return tab_txt_rtw_secyrity[idx]; -} - -unsigned char * rtw_security_to_str(rtw_security_t rtw_sec_type) -{ - return tab_txt_rtw_secyrity[rtw_security_to_idx(rtw_sec_type)]; -} - -void show_wifi_ap_ip(void) { - printf("SoftAP ip: " IPSTR "\n", IP2STR(&xnetif[WLAN_AP_NETIF_NUM].ip_addr)); -} -void show_wifi_st_ip(void) { - printf("Station ip: " IPSTR "\n", IP2STR(&xnetif[WLAN_ST_NETIF_NUM].ip_addr)); -} - -void show_wifi_MAC(void) { - printf("MAC: " IPSTR "\n", IP2STR(&xnetif[WLAN_ST_NETIF_NUM].ip_addr)); -} - -void show_wifi_st_cfg(void) { - printf("\tSSID: '%s'\n", wifi_st_cfg.ssid); - printf("\tPassword: '%s'\n", wifi_st_cfg.password); - printf("\tSecurity type: %s\n", idx_security_to_str(wifi_st_cfg.security)); - printf("\tAuto-reconnect: %d\n", wifi_st_cfg.autoreconnect); - printf("\tReconnect pause: %d\n", wifi_st_cfg.reconnect_pause); - printf("\tSleep mode: %p\n", wifi_st_cfg.sleep); - printf("\tDTIM: %d\n", wifi_st_cfg.dtim); -} - -void show_wifi_ap_cfg(void) { - printf("\tSSID: '%s'\n", wifi_ap_cfg.ssid); - printf("\tSSID hidden: %d\n", wifi_ap_cfg.ssid_hidden); - printf("\tPassword: '%s'\n", wifi_ap_cfg.password); - printf("\tSecurity type: %s\n", (wifi_ap_cfg.security)? tab_txt_rtw_secyrity[IDX_SECURITY_WPA2_AES_PSK] : tab_txt_rtw_secyrity[IDX_SECURITY_OPEN]); - printf("\tChannel: %d\n", wifi_ap_cfg.channel); - printf("\tBeacon interval: %d ms\n", wifi_ap_cfg.beacon_interval); - printf("\tMax connections: %d\n", wifi_ap_cfg.max_sta); -} - -void show_wifi_cfg(void) { - printf("\tStart mode: %p\n", wifi_cfg.mode); - printf("\tCountry code: %d\n", wifi_cfg.country_code); - printf("\tNetwork mode: %d\n", wifi_cfg.bgn); - printf("\tTx power: %d\n", wifi_cfg.tx_pwr); - printf("\tAdaptivity: %d\n", wifi_cfg.adaptivity); - printf("\tLoad flags: %p\n", wifi_cfg.load_flg); - printf("\tSave flags: %p\n", wifi_cfg.save_flg); -} - -int show_wifi_ap_clients(void) { - if((wifi_mode == RTW_MODE_AP) || (wifi_mode == RTW_MODE_STA_AP)) { - struct { - int count; - rtw_mac_t mac_list[AP_STA_NUM]; - } client_info; - client_info.count = AP_STA_NUM; - if(wext_get_associated_client_list(wlan_ap_name, &client_info, sizeof(client_info)) >= 0) { - if(client_info.count) { - printf("\tAP %u clients:\n", client_info.count); - int client_idx = 0; - while(client_idx++ < client_info.count) { - unsigned char *pmac = client_info.mac_list[client_idx].octet; - printf("\tsta[%u]: %02x:%02x:%02x:%02x:%02x:%02x\n", client_idx, - pmac[0],pmac[1],pmac[2],pmac[3],pmac[4],pmac[5]); - } - } else { - printf("\tAP clients none\n"); - } - return client_info.count; - }; - }; - printf("Get AP clients error!\n"); - return -1; -} - - -extern int max_skbbuf_used_num, skbbuf_used_num, max_skbdata_used_num, skbdata_used_num, max_timer_used_num; -void show_wlan_info(int idx) -{ - if(rltk_wlan_info[idx].enable) { - struct net_device_stats * stats = rltk_wlan_info[idx].dev->get_stats(rltk_wlan_info[idx].dev); - if(stats) { - printf("\tTotal %d packets received (%d bytes), dropped %d\n", stats->rx_packets, stats->rx_bytes, stats->rx_dropped); - printf("\tTotal %d packets transmitted (%d bytes), dropped %d\n", stats->tx_packets, stats->tx_bytes, stats->tx_dropped); - printf("\tRX fifo overflow count %d\n", stats->rx_overflow); - - printf("\tMax skb %d bufers used, buffers %d\n", max_skbbuf_used_num, skbbuf_used_num); - printf("\tMax skb %d data used, data %d\n", max_skbdata_used_num, skbdata_used_num); - printf("\tMax %d timers used\n", max_timer_used_num); -// printf("\tMax %d timers used, timers %d\n", max_timer_used_num, timer_used_num); - } - } -} \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi_api.h b/Firmware/RTLGDB/USDK/component/common/api/wifi_api.h deleted file mode 100644 index 5734950..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi_api.h +++ /dev/null @@ -1,196 +0,0 @@ -/* - * wifi_user_set.h - * - * Created on: 01/04/2017 - * Author: pvvx - */ - -#ifndef _WIFI_API_H_ -#define _WIFI_API_H_ -#include "wifi_constants.h" -#include "queue.h" - -#ifndef ip4_addr1 -#define ip4_addr1(ipaddr) (((uint8_t*)(ipaddr))[0]) -#define ip4_addr2(ipaddr) (((uint8_t*)(ipaddr))[1]) -#define ip4_addr3(ipaddr) (((uint8_t*)(ipaddr))[2]) -#define ip4_addr4(ipaddr) (((uint8_t*)(ipaddr))[3]) -#endif - -#define IPSTR "%d.%d.%d.%d" - -#define IP2STR(ipaddr) \ - ip4_addr1(ipaddr), \ - ip4_addr2(ipaddr), \ - ip4_addr3(ipaddr), \ - ip4_addr4(ipaddr) - -extern char str_rom_57ch3Dch0A[]; // "=========================================================\n" 57 - -#define BID_WIFI_AP_CFG (1 << 0) -#define BID_WIFI_ST_CFG (1 << 1) -#define BID_AP_DHCP_CFG (1 << 2) -#define BID_ST_DHCP_CFG (1 << 3) -#define BID_WIFI_CFG (1 << 4) -#define BID_AP_HOSTNAME (1 << 5) -#define BID_ST_HOSTNAME (1 << 6) - -#define BID_ALL_WIFI_CFG (BID_WIFI_AP_CFG|BID_WIFI_ST_CFG|BID_AP_DHCP_CFG|BID_ST_DHCP_CFG|BID_AP_HOSTNAME|BID_ST_HOSTNAME) - -#define WLAN_ST_NETIF_NUM wlan_st_netifn -#define WLAN_AP_NETIF_NUM wlan_ap_netifn -//==== FEEP_ID =========================== -#define FEEP_ID_WIFI_CFG 0x4347 // id:'GC' -#define FEEP_ID_WIFI_AP_CFG 0x5041 // id:'AP' -#define FEEP_ID_WIFI_ST_CFG 0x5453 // id:'ST' -#define FEEP_ID_AP_DHCP_CFG 0x4144 // id:'DA' -#define FEEP_ID_ST_DHCP_CFG 0x5344 // id:'DS' -#define FEEP_ID_AP_HOSTNAME 0x4148 // id:'HA' -#define FEEP_ID_ST_HOSTNAME 0x5348 // id:'HP' -//#define FEEP_ID_UART_CFG 0x5530 // id:'0U', type: UART_LOG_CONF -//#define FEEP_ID_LWIP_CFG 0x4C30 // id:'0L', type: struct atcmd_lwip_conf -//#define FEEP_ID_DHCP_CFG 0x4430 // id:'0D', type: struct -//========================================= -#define IW_PASSPHRASE_MAX_SIZE 64 -#define NDIS_802_11_LENGTH_SSID 32 -#define IP4ADDR(a,b,c,d) (((unsigned int)((d) & 0xff) << 24) | \ - ((unsigned int)((c) & 0xff) << 16) | \ - ((unsigned int)((b) & 0xff) << 8) | \ - (unsigned int)((a) & 0xff)) -//========================================= -//--- Wlan Config struct------------------- -typedef struct _wifi_config { - unsigned char mode; // rtw_mode_t - unsigned char adaptivity; // rtw_adaptivity_mode_t - unsigned char country_code; // rtw_country_code_t - unsigned char tx_pwr; // rtw_tx_pwr_percentage_t - unsigned char bgn; // 802.11 rtw_network_mode_t - unsigned char load_flg; // см. BID_WIFI_CFG.. - unsigned char save_flg; -} WIFI_CONFIG, *PWIFI_CONFIG; -//---- Interface 0 - wlan0 - AP - struct -- -typedef struct _softap_config { - unsigned char ssid[NDIS_802_11_LENGTH_SSID+1]; - unsigned char password[IW_PASSPHRASE_MAX_SIZE+1]; - unsigned short beacon_interval; // Note: support 100 ~ 60000 ms, default 100 - unsigned char ssid_hidden; // Note: default 0 - unsigned char security; // 0 = RTW_SECURITY_OPEN, 1 = RTW_SECURITY_WPA2_AES_PSK - unsigned char channel; // 1..14 - unsigned char max_sta; // 1..3 -} SOFTAP_CONFIG, *PSOFTAP_CONFIG; -//---- Interface 1 - wlan1 - ST - struct - -typedef struct _station_config { - unsigned char ssid[NDIS_802_11_LENGTH_SSID+1]; - unsigned char password[IW_PASSPHRASE_MAX_SIZE+1]; - unsigned char bssid[6]; // Note: If bssid set is not ff.ff.ff.ff.ff.ff || 00:00:00:00:00:00 - unsigned char flg; // station will connect to the router with both ssid[], else if set flg - bssid[] matched. - unsigned char security; // IDX_SECURITY - unsigned char autoreconnect; // 0 - none, 1..254 - count, 255 - all - unsigned char reconnect_pause; // in sec - unsigned char sleep; // 0 - Off, 1 - IPS, 2 - LPS, 3 - IPS/LPS mode - unsigned char dtim; // LPS DTIM (2..) -// rtw_adaptivity_mode_t -} STATION_CONFIG, *PSTATION_CONFIG; -//--- LwIP Config ------------------------- -struct lwip_conn_info { - int32_t role; //client, server or seed - unsigned int protocol; //tcp or udp - unsigned int remote_addr; //remote ip - unsigned int remote_port; //remote port - unsigned int local_addr; //locale ip, not used yet - unsigned int local_port; //locale port, not used yet - unsigned int reserved; //reserve for further use -}; -//--- DHCP Config ------------------------- -typedef struct _dhcp_config { - unsigned int ip; - unsigned int mask; - unsigned int gw; - unsigned char mode; // =0 dhcp off, =1 - dhcp on, =2 Static ip, =3 - auto -} DHCP_CONFIG, *PDHCP_CONFIG; - - -extern WIFI_CONFIG wifi_cfg; -extern SOFTAP_CONFIG wifi_ap_cfg; -extern DHCP_CONFIG wifi_ap_dhcp; -extern STATION_CONFIG wifi_st_cfg; -extern DHCP_CONFIG wifi_st_dhcp; -extern unsigned char wifi_run_mode; // rtw_mode_t -extern unsigned char wifi_mode; // rtw_mode_t -extern unsigned char wifi_st_status; // WIFI_STA_ENUM -extern char wlan_st_name[]; -extern char wlan_ap_name[]; -extern unsigned char wlan_st_netifn; -extern unsigned char wlan_ap_netifn; - -/* WiFi Station & scan security */ -typedef enum { - IDX_SECURITY_OPEN = 0, //0 Open security - IDX_SECURITY_WEP_PSK, //1 WEP Security with open authentication - IDX_SECURITY_WEP_SHARED, //2 WEP Security with shared authentication - IDX_SECURITY_WPA_TKIP_PSK, //3 WPA Security with TKIP - IDX_SECURITY_WPA_AES_PSK, //4 WPA Security with AES - IDX_SECURITY_WPA2_TKIP_PSK, //5 WPA2 Security with TKIP - IDX_SECURITY_WPA2_AES_PSK, //6 WPA2 Security with AES - IDX_SECURITY_WPA2_MIXED_PSK, //7 WPA2 Security with AES & TKIP - IDX_SECURITY_WPA_WPA2_MIXED, //8 WPA/WPA2 Security - IDX_SECURITY_UNKNOWN //9 -} IDX_SECURITY; - -/* wifi_st_status */ -typedef enum { - WIFI_STA_OFF, - WIFI_STA_START, - WIFI_STA_RECONNECT, - WIFI_STA_CONNECTED -} WIFI_STA_ENUM; - - -uint8 * get_new_hostname(void); -uint32 get_new_ip(void); - -void show_wifi_ap_ip(void); -void show_wifi_st_ip(void); -void show_wifi_cfg(void); -void show_wifi_st_cfg(void); -void show_wifi_ap_cfg(void); -void show_wlan_info(int idx); -int show_wifi_ap_clients(void); -uint32 read_wifi_cfg(uint32 flg); -uint32 write_wifi_cfg(uint32 flg); -int wifi_run(rtw_mode_t mode); -void wifi_init(void); - -rtw_security_t idx_to_rtw_security(unsigned char idx); -unsigned char rtw_security_to_idx(rtw_security_t rtw_sec_type); -unsigned char * rtw_security_to_str(rtw_security_t rtw_sec_type); -unsigned char * idx_security_to_str(unsigned char idx); - -/* -------- Api WiFi Scan ------------------------------- */ -#include "wifi_conf.h" -#include "timers.h" - -#define SCAN_CHANNELS 14 -#define MAX_AP_SIZE 32 - -extern QueueHandle_t xQueueWebSrv; - -typedef struct web_scan_handler{ - TimerHandle_t timer; - rtw_scan_result_t * ap_details; - unsigned char ap_count; - unsigned char start_show; - unsigned char used_data; - volatile unsigned char flg; -} web_scan_handler_t; -extern web_scan_handler_t web_scan_handler_ptr; -typedef rtw_result_t (*api_scan_result_handler_t)(internal_scan_handler_t * ap_scan_result); -rtw_result_t api_wifi_scan(api_scan_result_handler_t scan_result_cb); -void wifi_close_scan(void); - - -rtw_result_t _wext_set_lps_dtim(int adapter_num, uint8 lps_dtim); -int _wext_get_lps_dtim(int adapter_num); -rtw_result_t _wext_enable_powersave(int adapter_num, uint8 ips_mode, uint8 lps_mode); - -#endif // _WIFI_API_H_ diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi_api_scan.c b/Firmware/RTLGDB/USDK/component/common/api/wifi_api_scan.c deleted file mode 100644 index f03f20c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi_api_scan.c +++ /dev/null @@ -1,202 +0,0 @@ -/* - * wifi_api_scan.c - * - * Created on: 23/04/2017 - * Author: pvvx - */ - -#include "FreeRTOS.h" -#include -#include "main.h" - -#include - -#if CONFIG_EXAMPLE_WLAN_FAST_CONNECT -#error "Udnef CONFIG_EXAMPLE_WLAN_FAST_CONNECT!" -#endif -#ifndef USE_FLASH_EEP -#error "Define USE_FLASH_EEP!" -#endif - -#include "task.h" -#include -#include -#include "flash_api.h" -#include -#include "dhcp/dhcps.h" -#include "ethernetif.h" -#if CONFIG_ETHERNET -#include "ethernet_mii/ethernet_mii.h" -#endif - -#if 1 -#include "drv_types.h" // or #include "wlan_lib.h" -#else -#include "wifi_constants.h" -#include "wifi_structures.h" -#include "wlan_lib.h" // or #include "drv_types.h" -#endif - -#include "flash_eep.h" -#include "feep_config.h" - -#include "wifi_api.h" -#include "main.h" -#include "wifi_user_set.h" - -/****************************************************** - * - ******************************************************/ - -web_scan_handler_t web_scan_handler_ptr; - -/* -------- WiFi Scan ------------------------------- */ -volatile uint8_t scan_end; - -extern internal_scan_handler_t scan_result_handler_ptr; -void wifi_scan_each_report_hdl(char* buf, int buf_len, int flags, void* userdata); - -static void _wifi_scan_done_hdl(char* buf, int buf_len, int flags, void* userdata); - -void wifi_set_timer_scan(int ms) { - if(web_scan_handler_ptr.flg) { - if(xTimerChangePeriod(web_scan_handler_ptr.timer, ms, portMAX_DELAY) != pdPASS) { - error_printf("Error xTimerChangePeriod\n"); - } - } -} -/* -------- WiFi Scan Close ------------------------- */ -void wifi_close_scan(void) -{ - internal_scan_handler_t * pscan_rec = &scan_result_handler_ptr; - web_scan_handler_t * pwscn_rec = &web_scan_handler_ptr; - printf("Close scan rec\n"); - if(pscan_rec->scan_running) { - wifi_unreg_event_handler(WIFI_EVENT_SCAN_RESULT_REPORT, wifi_scan_each_report_hdl); - wifi_unreg_event_handler(WIFI_EVENT_SCAN_DONE, _wifi_scan_done_hdl); - if(pscan_rec->ap_details) rtw_free(pscan_rec->ap_details); - rtw_memset((void *) pscan_rec, 0, sizeof(internal_scan_handler_t)); - } - if(pwscn_rec->flg) { - if(pwscn_rec->timer) xTimerDelete(pwscn_rec->timer, portMAX_DELAY); - if(pwscn_rec->ap_details) rtw_free(pwscn_rec->ap_details); - rtw_memset(pwscn_rec, 0, sizeof(web_scan_handler_t)); - } -// pscan_rec->scan_complete = 1; -} -/* -------- WiFi Scan Done ------------------------- */ -static void _wifi_scan_done_hdl(char* buf, int buf_len, int flags, void* userdata) { - internal_scan_handler_t * pscan_rec = &scan_result_handler_ptr; - web_scan_handler_t * pwscn_rec = &web_scan_handler_ptr; - if(pscan_rec->gscan_result_handler) { - // сторонний вывод - (*pscan_rec->gscan_result_handler)((rtw_scan_handler_result_t *) pscan_rec); - } - else { - // оставить структуру pscan_rec->pap_details[i] для вывода в web scan на 5 сек - if(pwscn_rec->flg && pscan_rec->scan_cnt) { - debug_printf("\nScan done, wait read rec\n"); - if(xTimerChangePeriod(pwscn_rec->timer, 5000, portMAX_DELAY) != pdPASS) { -// error_printf("Error xTimerChangePeriod\n"); - } else { - if(pwscn_rec->ap_details) rtw_free(pwscn_rec->ap_details); - pwscn_rec->ap_details = pscan_rec->ap_details; - pwscn_rec->ap_count = pscan_rec->scan_cnt; - wifi_unreg_event_handler(WIFI_EVENT_SCAN_RESULT_REPORT, wifi_scan_each_report_hdl); - wifi_unreg_event_handler(WIFI_EVENT_SCAN_DONE, _wifi_scan_done_hdl); - rtw_memset((void *) pscan_rec, 0, sizeof(internal_scan_handler_t)); - pwscn_rec->flg = 2; - } - return; - }; - } - wifi_close_scan(); - return; -} - -/* -------- WiFi Scan Start ------------------------- */ -static int _wifi_scan_networks(rtw_scan_result_handler_t results_handler) { - internal_scan_handler_t * pscan_rec = &scan_result_handler_ptr; - pscan_rec->gscan_result_handler = results_handler; - pscan_rec->max_ap_size = MAX_AP_SIZE; - pscan_rec->ap_details = (rtw_scan_result_t*) rtw_zmalloc(MAX_AP_SIZE * sizeof(rtw_scan_result_t) + MAX_AP_SIZE * sizeof(rtw_scan_result_t*)); - if (pscan_rec->ap_details != NULL) { - pscan_rec->pap_details = (rtw_scan_result_t**) (&pscan_rec->ap_details[MAX_AP_SIZE]); - pscan_rec->scan_cnt = 0; - pscan_rec->scan_complete = RTW_FALSE; - pscan_rec->user_data = NULL; - wifi_reg_event_handler(WIFI_EVENT_SCAN_RESULT_REPORT, wifi_scan_each_report_hdl, NULL); - wifi_reg_event_handler(WIFI_EVENT_SCAN_DONE, _wifi_scan_done_hdl, NULL); - if(wext_set_scan(WLAN0_NAME, NULL, 0, RTW_SCAN_TYPE_ACTIVE | (RTW_SCAN_COMMAMD << 4) | (RTW_BSS_TYPE_ANY << 8)) == RTW_SUCCESS) { // Только RTW_SCAN_TYPE_ACTIVE ? - return RTW_SUCCESS; - } - }; - wifi_close_scan(); - return RTW_ERROR; -} - -/* -------- wext_set_pscan_channels ----------------- */ -extern int iw_ioctl(const char * ifname, unsigned long request, struct iwreq * pwrq); - -static int wext_set_pscan_channels(void) { - struct iwreq iwr; - int ret = -1; - uint8_t *para; - int i = 0; - rtw_memset(&iwr, 0, sizeof(iwr)); - //Format of para:function_name num_channel chan1... pscan_config1 ... - iwr.u.data.length = (SCAN_CHANNELS + SCAN_CHANNELS + 1) + 12; - para = rtw_malloc(iwr.u.data.length); //size:num_chan + num_time + length + function_name - iwr.u.data.pointer = para; - if (para != NULL) { - rtw_memcpy((char*) para, "PartialScan", 12); //Cmd - *(para + 12) = SCAN_CHANNELS; // length - for (i = 0; i < SCAN_CHANNELS; i++) { - *(para + 13 + i) = i + 1; - *((uint16_t *) (para + 13 + SCAN_CHANNELS + i)) = PSCAN_ENABLE; - } - ret = iw_ioctl(WLAN0_NAME, SIOCDEVPRIVATE, &iwr); - rtw_free(para); - } -#if CONFIG_DEBUG_LOG > 3 - else { - error_printf("%s: Can't malloc memory!\n", __func__); - } -#endif - return ret; -} - -/* -------- WiFi Scan ------------------------------- */ -rtw_result_t api_wifi_scan(api_scan_result_handler_t scan_result_cb) -{ - internal_scan_handler_t * pscan_rec = &scan_result_handler_ptr; - web_scan_handler_t * pwscn_rec = &web_scan_handler_ptr; - if ((!pscan_rec->scan_running) - && (!pwscn_rec->flg)) { - pscan_rec->scan_running = 1; - rtw_memset(pwscn_rec, 0, sizeof(web_scan_handler_t)); - pwscn_rec->flg = 1; - debug_printf("\nStart scan...\n"); - pwscn_rec->timer = xTimerCreate("webscan", 2500, pdFALSE, NULL, (TimerCallbackFunction_t)wifi_close_scan); - if(!pwscn_rec->timer) { -// error_printf("Error xTimerCreate\n"); - } else if(xTimerStart(pwscn_rec->timer, portMAX_DELAY) != pdPASS) { -// error_printf("Error xTimerStart\n"); - } else if(wext_set_pscan_channels() < 0) { -// error_printf("ERROR: wifi set partial scan channel fail\n"); - } else if(_wifi_scan_networks((rtw_scan_result_handler_t) scan_result_cb) != RTW_SUCCESS) { -// error_printf("ERROR: wifi scan failed\n"); - } else if(scan_result_cb) { - int i = 300; - while(i-- && pscan_rec->scan_running) { - vTaskDelay(10); - }; - return RTW_SUCCESS; - } else - return RTW_SUCCESS; - wifi_close_scan(); - return RTW_ERROR; - }; - return RTW_TIMEOUT; -} - diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi_interactive_ext.h b/Firmware/RTLGDB/USDK/component/common/api/wifi_interactive_ext.h deleted file mode 100644 index 7f4afc5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi_interactive_ext.h +++ /dev/null @@ -1,42 +0,0 @@ -#define CONFIG_EXTERN_TEST 0 -#define CONFIG_EXTERN_HW 0 -#define CONFIG_EXTERN_CLOUD 0 -#define CONFIG_TTCP 0 - -/* External Function */ -#if CONFIG_EXTERN_TEST -extern void cmd_tcpecho(int argc, char **argv); -#endif -#if CONFIG_EXTERN_HW -extern void cmd_led(int argc, char **argv); -extern void cmd_tmp75(int argc, char **argv); -#endif -#if CONFIG_EXTERN_CLOUD -extern void cmd_cloud(int argc, char **argv); -extern void cmd_reboot(int argc, char **argv); -extern void cmd_config(int argc, char **argv); -#endif - -#if CONFIG_TTCP -extern void cmd_ttcp(int argc, char **argv); -#endif - - -static const cmd_entry ext_cmd_table[] = { -#if CONFIG_EXTERN_TEST - {"tcpecho", cmd_tcpecho}, -#endif -#if CONFIG_EXTERN_HW - {"led", cmd_led}, - {"tmp75", cmd_tmp75}, -#endif -#if CONFIG_EXTERN_CLOUD - {"cloud", cmd_cloud}, - {"reboot", cmd_reboot}, - {"config", cmd_config}, -#endif -#if CONFIG_TTCP - {"ttcp", cmd_ttcp}, -#endif - {"", NULL} -}; diff --git a/Firmware/RTLGDB/USDK/component/common/api/wifi_interactive_mode.c b/Firmware/RTLGDB/USDK/component/common/api/wifi_interactive_mode.c deleted file mode 100644 index 3c1124b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/api/wifi_interactive_mode.c +++ /dev/null @@ -1,1238 +0,0 @@ - -#include "FreeRTOS.h" -#include "task.h" -#include "semphr.h" -#include "main.h" -#include -#include "tcpip.h" -#include -#include -#include -#include -#include -#include - -#ifndef CONFIG_INTERACTIVE_EXT -#define CONFIG_INTERACTIVE_EXT 0 -#endif -#ifndef CONFIG_SSL_CLIENT -#if defined(CONFIG_PLATFORM_8711B) -#define CONFIG_SSL_CLIENT 0 -#else -#define CONFIG_SSL_CLIENT 1 -#endif -#endif - -#ifndef CONFIG_GOOGLENEST -#define CONFIG_GOOGLENEST 0 -#endif -#if CONFIG_LWIP_LAYER -#ifndef CONFIG_WEBSERVER -#define CONFIG_WEBSERVER 0 -#endif -#endif -#ifndef CONFIG_OTA_UPDATE -#define CONFIG_OTA_UPDATE 0 -#endif -#ifndef CONFIG_BSD_TCP -#define CONFIG_BSD_TCP 0 -#endif -#define CONFIG_JD_SMART 0 -#ifndef CONFIG_ENABLE_P2P -#define CONFIG_ENABLE_P2P 0 -#endif -#define SCAN_WITH_SSID 0 - -#ifdef CONFIG_WPS -#define STACKSIZE 1280 -#else -#define STACKSIZE 1024 -#endif - -#ifndef WLAN0_NAME - #define WLAN0_NAME "wlan0" -#endif -#ifndef WLAN1_NAME - #define WLAN1_NAME "wlan1" -#endif -/* Give default value if not defined */ -#ifndef NET_IF_NUM -#ifdef CONFIG_CONCURRENT_MODE -#define NET_IF_NUM 2 -#else -#define NET_IF_NUM 1 -#endif -#endif - -/*Static IP ADDRESS*/ -#ifndef IP_ADDR0 -#define IP_ADDR0 192 -#define IP_ADDR1 168 -#define IP_ADDR2 1 -#define IP_ADDR3 80 -#endif - -/*NETMASK*/ -#ifndef NETMASK_ADDR0 -#define NETMASK_ADDR0 255 -#define NETMASK_ADDR1 255 -#define NETMASK_ADDR2 255 -#define NETMASK_ADDR3 0 -#endif - -/*Gateway Address*/ -#ifndef GW_ADDR0 -#define GW_ADDR0 192 -#define GW_ADDR1 168 -#define GW_ADDR2 1 -#define GW_ADDR3 1 -#endif - -/*Static IP ADDRESS*/ -#ifndef AP_IP_ADDR0 -#define AP_IP_ADDR0 192 -#define AP_IP_ADDR1 168 -#define AP_IP_ADDR2 43 -#define AP_IP_ADDR3 1 -#endif - -/*NETMASK*/ -#ifndef AP_NETMASK_ADDR0 -#define AP_NETMASK_ADDR0 255 -#define AP_NETMASK_ADDR1 255 -#define AP_NETMASK_ADDR2 255 -#define AP_NETMASK_ADDR3 0 -#endif - -/*Gateway Address*/ -#ifndef AP_GW_ADDR0 -#define AP_GW_ADDR0 192 -#define AP_GW_ADDR1 168 -#define AP_GW_ADDR2 43 -#define AP_GW_ADDR3 1 -#endif - -static void cmd_help(int argc, char **argv); -#if CONFIG_SSL_CLIENT -extern void cmd_ssl_client(int argc, char **argv); -#endif - -#if CONFIG_GOOGLENEST -extern void cmd_googlenest(int argc, char **argv); -#endif -#if CONFIG_JD_SMART -extern void cmd_jd_smart(int argc, char **argv); -#endif -#if CONFIG_WLAN -void cmd_wifi_on(int argc, char **argv); -void cmd_wifi_off(int argc, char **argv); -void cmd_wifi_disconnect(int argc, char **argv); -extern void cmd_promisc(int argc, char **argv); -extern void cmd_simple_config(int argc, char **argv); - -#if CONFIG_OTA_UPDATE -extern void cmd_update(int argc, char **argv); -#endif -#if CONFIG_BSD_TCP -extern void cmd_tcp(int argc, char **argv); -extern void cmd_udp(int argc, char **argv); -#endif -#if CONFIG_WEBSERVER -extern void start_web_server(void); -extern void stop_web_server(void); -#endif -extern void cmd_app(int argc, char **argv); -#ifdef CONFIG_WPS -#if CONFIG_ENABLE_WPS -extern void cmd_wps(int argc, char **argv); -#endif -#ifdef CONFIG_WPS_AP -extern void cmd_ap_wps(int argc, char **argv); -extern int wpas_wps_dev_config(uint8_t *dev_addr, uint8_t bregistrar); -#endif //CONFIG_WPS_AP -#endif //CONFIG_WPS -#if CONFIG_ENABLE_P2P -extern void cmd_wifi_p2p_start(int argc, char **argv); -extern void cmd_wifi_p2p_stop(int argc, char **argv); -extern void cmd_p2p_listen(int argc, char **argv); -extern void cmd_p2p_find(int argc, char **argv); -extern void cmd_p2p_peers(int argc, char **argv); -extern void cmd_p2p_info(int argc, char **argv); -extern void cmd_p2p_disconnect(int argc, char **argv); -extern void cmd_p2p_connect(int argc, char **argv); -#endif //CONFIG_ENABLE_P2P -#if defined(CONFIG_RTL8195A) || defined(CONFIG_RTL8711B) -extern uint32_t CmdDumpWord(IN uint16_t argc, IN uint8_t *argv[]); -extern uint32_t CmdWriteWord(IN uint16_t argc, IN uint8_t *argv[]); -#endif -#if CONFIG_LWIP_LAYER -extern struct netif xnetif[NET_IF_NUM]; -#endif -#ifdef CONFIG_CONCURRENT_MODE -static void cmd_wifi_sta_and_ap(int argc, char **argv) -{ - int timeout = 20;//, mode; -#if CONFIG_LWIP_LAYER - struct netif * pnetiff = (struct netif *)&xnetif[1]; -#endif - int channel; - - if((argc != 3) && (argc != 4)) { - printf("Usage: wifi_ap SSID CHANNEL [PASSWORD]\n"); - return; - } - - if(atoi((const char *)argv[2]) > 14){ - printf(" bad channel!Usage: wifi_ap SSID CHANNEL [PASSWORD]\n"); - return; - } -#if CONFIG_LWIP_LAYER - dhcps_deinit(); -#endif - -#if 0 - //Check mode - wext_get_mode(WLAN0_NAME, &mode); - - switch(mode) { - case IW_MODE_MASTER: //In AP mode - cmd_wifi_off(0, NULL); - cmd_wifi_on(0, NULL); - break; - case IW_MODE_INFRA: //In STA mode - if(wext_get_ssid(WLAN0_NAME, ssid) > 0) - cmd_wifi_disconnect(0, NULL); - } -#endif - wifi_off(); - vTaskDelay(20); - if (wifi_on(RTW_MODE_STA_AP) < 0){ - printf("ERROR: Wifi on failed!\n"); - return; - } - - printf("Starting AP ...\n"); - channel = atoi((const char *)argv[2]); - if(channel > 13){ - printf("Channel is from 1 to 13. Set channel 1 as default!\n"); - channel = 1; - } - - if(argc == 4) { - if(wifi_start_ap(argv[1], - RTW_SECURITY_WPA2_AES_PSK, - argv[3], - channel, - 0 - ) != RTW_SUCCESS) { - printf("ERROR: Operation failed!\n\n"); - return; - } - } - else { - if(wifi_start_ap(argv[1], - RTW_SECURITY_OPEN, - NULL, - channel, - 0 - ) != RTW_SUCCESS) { - printf("ERROR: Operation failed!\n"); - return; - } - } - - while(1) { - char essid[33]; - - if(wext_get_ssid(WLAN1_NAME, (unsigned char *) essid) > 0) { - if(strcmp((const char *) essid, (const char *)argv[1]) == 0) { - printf("%s started\n", argv[1]); - break; - } - } - - if(timeout == 0) { - printf("ERROR: Start AP timeout!\n"); - break; - } - - vTaskDelay(1 * configTICK_RATE_HZ); - timeout --; - } -#if CONFIG_LWIP_LAYER - LwIP_UseStaticIP(&xnetif[1]); -#ifdef CONFIG_DONT_CARE_TP - pnetiff->flags |= NETIF_FLAG_IPSWITCH; -#endif - dhcps_init(pnetiff); -#endif -} -#endif - -static void cmd_wifi_ap(int argc, char **argv) -{ - int timeout = 20; -#if CONFIG_LWIP_LAYER - struct ip_addr ipaddr; - struct ip_addr netmask; - struct ip_addr gw; - struct netif * pnetif = &xnetif[0]; -#endif - int channel; - - if((argc != 3) && (argc != 4)) { - printf("Usage: wifi_ap SSID CHANNEL [PASSWORD]\n"); - return; - } -#if CONFIG_LWIP_LAYER - dhcps_deinit(); - IP4_ADDR(&ipaddr, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1 , NETMASK_ADDR2, NETMASK_ADDR3); - IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - netif_set_addr(pnetif, &ipaddr, &netmask,&gw); -#ifdef CONFIG_DONT_CARE_TP - pnetif->flags |= NETIF_FLAG_IPSWITCH; -#endif -#endif -#if 0 - //Check mode - wext_get_mode(WLAN0_NAME, &mode); - - switch(mode) { - case IW_MODE_MASTER: //In AP mode - wifi_off(); - wifi_on(1); - break; - case IW_MODE_INFRA: //In STA mode - if(wext_get_ssid(WLAN0_NAME, ssid) > 0) - cmd_wifi_disconnect(0, NULL); - } -#else - wifi_off(); - vTaskDelay(20); - if (wifi_on(RTW_MODE_AP) < 0){ - printf("ERROR: Wifi on failed!\n"); - return; - } -#endif - - printf("Starting AP ...\n"); - channel = atoi((const char *)argv[2]); - if(channel > 13){ - printf("Channel is from 1 to 13. Set channel 1 as default!\n"); - channel = 1; - } -#ifdef CONFIG_WPS_AP - wpas_wps_dev_config(pnetif->hwaddr, 1); -#endif - - if(argc == 4) { - if(wifi_start_ap(argv[1], - RTW_SECURITY_WPA2_AES_PSK, - argv[3], - channel, - 0 - ) != RTW_SUCCESS) { - printf("ERROR: Operation failed!\n"); - return; - } - } - else { - if(wifi_start_ap(argv[1], - RTW_SECURITY_OPEN, - NULL, - channel, - 0 - ) != RTW_SUCCESS) { - printf("ERROR: Operation failed!\n"); - return; - } - } - - while(1) { - char essid[33]; - - if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) > 0) { - if(strcmp((const char *) essid, (const char *)argv[1]) == 0) { - printf("%s started\n", argv[1]); - break; - } - } - - if(timeout == 0) { - printf("ERROR: Start AP timeout!\n"); - break; - } - - vTaskDelay(1 * configTICK_RATE_HZ); - timeout --; - } -#if CONFIG_LWIP_LAYER - //LwIP_UseStaticIP(pnetif); - dhcps_init(pnetif); -#endif -} - -static void cmd_wifi_connect(int argc, char **argv) -{ - int ret = RTW_ERROR; - unsigned long tick1 = xTaskGetTickCount(); - unsigned long tick2, tick3; - int mode; - char *ssid; - rtw_security_t security_type; - char *password; - int ssid_len; - int password_len; - int key_id; - void *semaphore; - - if((argc != 2) && (argc != 3) && (argc != 4)) { - printf("Usage: wifi_connect SSID [WPA PASSWORD / (5 or 13) ASCII WEP KEY] [WEP KEY ID 0/1/2/3]\n"); - return; - } - - //Check if in AP mode - wext_get_mode(WLAN0_NAME, &mode); - - if(mode == IW_MODE_MASTER) { -#if CONFIG_LWIP_LAYER - dhcps_deinit(); -#endif - wifi_off(); - vTaskDelay(20); - if (wifi_on(RTW_MODE_STA) < 0){ - printf("ERROR: Wifi on failed!\n"); - return; - } - } - - ssid = argv[1]; - if(argc == 2){ - security_type = RTW_SECURITY_OPEN; - password = NULL; - ssid_len = strlen((const char *)argv[1]); - password_len = 0; - key_id = 0; - semaphore = NULL; - }else if(argc ==3){ - security_type = RTW_SECURITY_WPA2_AES_PSK; - password = argv[2]; - ssid_len = strlen((const char *)argv[1]); - password_len = strlen((const char *)argv[2]); - key_id = 0; - semaphore = NULL; - }else{ - security_type = RTW_SECURITY_WEP_PSK; - password = argv[2]; - ssid_len = strlen((const char *)argv[1]); - password_len = strlen((const char *)argv[2]); - key_id = atoi(argv[3]); - if(( password_len != 5) && (password_len != 13)) { - printf("Wrong WEP key length. Must be 5 or 13 ASCII characters.\n"); - return; - } - if((key_id < 0) || (key_id > 3)) { - printf("Wrong WEP key id. Must be one of 0,1,2, or 3.\n"); - return; - } - semaphore = NULL; - } - - ret = wifi_connect( - NULL, - 0, - ssid, - security_type, - password, - key_id, - semaphore); - - tick2 = xTaskGetTickCount(); - printf("Connected after %dms.\n", (tick2-tick1)); - if(ret != RTW_SUCCESS) { - printf("ERROR: Operation failed!\n"); - return; - } else { -#if CONFIG_LWIP_LAYER - /* Start DHCPClient */ - LwIP_DHCP(0, DHCP_START); - tick3 = xTaskGetTickCount(); - printf("Got IP after %dms.\n", (tick3-tick1)); -#endif -#if CONFIG_WLAN_CONNECT_CB - extern void connect_start(void); - connect_start(); -#endif - } -} - -static void cmd_wifi_connect_bssid(int argc, char **argv) -{ - int ret = RTW_ERROR; - unsigned long tick1 = xTaskGetTickCount(); - unsigned long tick2, tick3; - int mode; - unsigned char bssid[ETH_ALEN]; - char *ssid = NULL; - rtw_security_t security_type; - char *password; - int ssid_len = 0; - int password_len; - int key_id; - void *semaphore; - uint32_t mac[ETH_ALEN]; - uint32_t i; - uint32_t index = 0; - - if((argc != 3) && (argc != 4) && (argc != 5) && (argc != 6)) { - printf("Usage: wifi_connect_bssid 0/1 [SSID] BSSID / xx:xx:xx:xx:xx:xx [WPA PASSWORD / (5 or 13) ASCII WEP KEY] [WEP KEY ID 0/1/2/3]\n"); - return; - } - - //Check if in AP mode - wext_get_mode(WLAN0_NAME, &mode); - - if(mode == IW_MODE_MASTER) { -#if CONFIG_LWIP_LAYER - dhcps_deinit(); -#endif - wifi_off(); - vTaskDelay(20); - if (wifi_on(RTW_MODE_STA) < 0){ - printf("ERROR: Wifi on failed!\n"); - return; - } - } - //check ssid - if(memcmp(argv[1], "0", 1)){ - index = 1; - ssid_len = strlen((const char *)argv[2]); - if((ssid_len <= 0) || (ssid_len > 32)) { - printf("Wrong ssid. Length must be less than 32.\n"); - return; - } - ssid = argv[2]; - } - sscanf(argv[2 + index], MAC_FMT, mac, mac + 1, mac + 2, mac + 3, mac + 4, mac + 5); - for(i=0; i 3)) { - printf("Wrong WEP key id. Must be one of 0,1,2, or 3.\n"); - return; - } - semaphore = NULL; - } - - ret = wifi_connect( - bssid, - 1, - ssid, - security_type, - password, - key_id, - semaphore); - - tick2 = xTaskGetTickCount(); - printf("Connected after %dms.\n", (tick2-tick1)); - if(ret != RTW_SUCCESS) { - printf("ERROR: Operation failed!\n"); - return; - } else { -#if CONFIG_LWIP_LAYER - /* Start DHCPClient */ - LwIP_DHCP(0, DHCP_START); -#endif - } - tick3 = xTaskGetTickCount(); - printf("Got IP after %dms.\n", (tick3-tick1)); -} - -void cmd_wifi_disconnect(int argc, char **argv) -{ - int timeout = 20; - char essid[33]; - - printf("Deassociating AP ...\n"); - - if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) < 0) { - printf("WIFI disconnected\n"); - return; - } - - if(wifi_disconnect() < 0) { - printf("ERROR: Operation failed!\n"); - return; - } - - while(1) { - if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) < 0) { - printf("WIFI disconnected\n"); - break; - } - - if(timeout == 0) { - printf("ERROR: Deassoc timeout!\n"); - break; - } - - vTaskDelay(1 * configTICK_RATE_HZ); - timeout --; - } -} - -static void cmd_wifi_info(int argc, char **argv) -{ - int i = 0; -#if CONFIG_LWIP_LAYER - uint8_t *mac = LwIP_GetMAC(&xnetif[0]); - uint8_t *ip = LwIP_GetIP(&xnetif[0]); - uint8_t *gw = LwIP_GetGW(&xnetif[0]); -#endif - uint8_t *ifname[2] = {WLAN0_NAME,WLAN1_NAME}; -#ifdef CONFIG_MEM_MONITOR - extern int min_free_heap_size; -#endif - - rtw_wifi_setting_t setting; - for(i=0;i %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]) ; - printf("\tIP => %d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]); - printf("\tGW => %d.%d.%d.%d\n", gw[0], gw[1], gw[2], gw[3]); -#endif - if(setting.mode == RTW_MODE_AP || i == 1) - { - int client_number; - struct { - int count; - rtw_mac_t mac_list[AP_STA_NUM]; - } client_info; - - client_info.count = AP_STA_NUM; - wifi_get_associated_client_list(&client_info, sizeof(client_info)); - - printf("Associated Client List:\n==============================\n"); - - if(client_info.count == 0) - printf("Client Num: 0\n"); - else - { - printf("Client Num: %d\n", client_info.count); - for( client_number=0; client_number < client_info.count; client_number++ ) - { - printf("Client [%d]:\n", client_number); - printf("\tMAC => "MAC_FMT"\n", - MAC_ARG(client_info.mac_list[client_number].octet)); - } -// printf("\n\r"); - } - } - - { - int error = wifi_get_last_error(); - printf("Last Link Error\n==============================\n"); - switch(error) - { - case RTW_NO_ERROR: - printf("\tNo Error\n"); - break; - case RTW_NONE_NETWORK: - printf("\tTarget AP Not Found\n"); - break; - case RTW_CONNECT_FAIL: - printf("\tAssociation Failed\n"); - break; - case RTW_WRONG_PASSWORD: - printf("\tWrong Password\n"); - break; - case RTW_DHCP_FAIL: - printf("\tDHCP Failed\n"); - break; - default: - printf("\tUnknown Error(%d)\n", error); - } -// printf("\n\r"); - } - } - } - -#if defined(configUSE_TRACE_FACILITY) && (configUSE_TRACE_FACILITY == 1) - { - signed char pcWriteBuffer[1024]; - vTaskList((char*)pcWriteBuffer); - printf("Task List: \n%s\n", pcWriteBuffer); - } -#endif -#ifdef CONFIG_MEM_MONITOR - printf("Memory Usage\n==============================\n"); - printf("Min Free Heap Size: %d\n", min_free_heap_size); - printf("Cur Free Heap Size: %d\n", xPortGetFreeHeapSize()); -#endif -} - -void cmd_wifi_on(int argc, char **argv) -{ - if(wifi_on(RTW_MODE_STA)<0){ - printf("ERROR: Wifi on failed!\n"); - } -} - -void cmd_wifi_off(int argc, char **argv) -{ -#if CONFIG_WEBSERVER - stop_web_server(); -#endif -#if CONFIG_ENABLE_P2P - cmd_wifi_p2p_stop(0, NULL); -#else - wifi_off(); -#endif -} - -static void print_scan_result( rtw_scan_result_t* record ) -{ - RTW_API_INFO( ( "%s\t ", ( record->bss_type == RTW_BSS_TYPE_ADHOC ) ? "Adhoc" : "Infra" ) ); - RTW_API_INFO( ( MAC_FMT, MAC_ARG(record->BSSID.octet) ) ); - RTW_API_INFO( ( " %d\t ", record->signal_strength ) ); - RTW_API_INFO( ( " %d\t ", record->channel ) ); - RTW_API_INFO( ( " %d\t ", record->wps_type ) ); - RTW_API_INFO( ( "%s\t\t ", ( record->security == RTW_SECURITY_OPEN ) ? "Open" : - ( record->security == RTW_SECURITY_WEP_PSK ) ? "WEP" : - ( record->security == RTW_SECURITY_WPA_TKIP_PSK ) ? "WPA TKIP" : - ( record->security == RTW_SECURITY_WPA_AES_PSK ) ? "WPA AES" : - ( record->security == RTW_SECURITY_WPA2_AES_PSK ) ? "WPA2 AES" : - ( record->security == RTW_SECURITY_WPA2_TKIP_PSK ) ? "WPA2 TKIP" : - ( record->security == RTW_SECURITY_WPA2_MIXED_PSK ) ? "WPA2 Mixed" : - ( record->security == RTW_SECURITY_WPA_WPA2_MIXED ) ? "WPA/WPA2 AES" : - "Unknown" ) ); - - RTW_API_INFO( ( " %s ", record->SSID.val ) ); - RTW_API_INFO( ( "\r\n" ) ); -} - -static rtw_result_t app_scan_result_handler( rtw_scan_handler_result_t* malloced_scan_result ) -{ - static int ApNum = 0; - - if (malloced_scan_result->scan_complete != RTW_TRUE) { - rtw_scan_result_t* record = &malloced_scan_result->ap_details; - record->SSID.val[record->SSID.len] = 0; /* Ensure the SSID is null terminated */ - - RTW_API_INFO( ( "%d\t ", ++ApNum ) ); - - print_scan_result(record); - } else{ - ApNum = 0; - } - return RTW_SUCCESS; -} -#if SCAN_WITH_SSID -static void cmd_wifi_scan_with_ssid(int argc, char **argv) -{ - - uint8_t *channel_list = NULL; - uint8_t *pscan_config = NULL; - - char *ssid = NULL; - int ssid_len = 0; - //Fully scan - int scan_buf_len = 500; - if(argc == 3 && argv[1] && argv[2]){ - ssid = argv[1]; - ssid_len = strlen((const char *)argv[1]); - if((ssid_len <= 0) || (ssid_len > 32)) { - printf("Wrong ssid. Length must be less than 32.\n"); - goto exit; - } - scan_buf_len = atoi(argv[2]); - if(scan_buf_len < 36){ - printf("BUFFER_LENGTH too short\n"); - goto exit; - } - }else if(argc > 3){ - int i = 0; - int num_channel = atoi(argv[2]); - ssid = argv[1]; - ssid_len = strlen((const char *)argv[1]); - if((ssid_len <= 0) || (ssid_len > 32)) { - printf("Wrong ssid. Length must be less than 32.\n"); - goto exit; - } - channel_list = (uint8_t*)pvPortMalloc(num_channel); - if(!channel_list){ - printf("ERROR: Can't malloc memory for channel list\n"); - goto exit; - } - pscan_config = (uint8_t*)pvPortMalloc(num_channel); - if(!pscan_config){ - printf("ERROR: Can't malloc memory for pscan_config\n"); - goto exit; - } - //parse command channel list - for(i = 3; i <= argc -1 ; i++){ - *(channel_list + i - 3) = (uint8_t)atoi(argv[i]); - *(pscan_config + i - 3) = PSCAN_ENABLE; - } - if(wifi_set_pscan_chan(channel_list, pscan_config, num_channel) < 0){ - printf("ERROR: wifi set partial scan channel fail\n"); - goto exit; - } - }else{ - printf(" For Scan all channel Usage: wifi_scan_with_ssid ssid BUFFER_LENGTH\n"); - printf(" For Scan partial channel Usage: wifi_scan_with_ssid ssid num_channels channel_num1 ...\n"); - return; - } - - if(wifi_scan_networks_with_ssid(NULL, &scan_buf_len, ssid, ssid_len) != RTW_SUCCESS){ - printf("ERROR: wifi scan failed\n"); - goto exit; - } - -exit: - if(argc > 2 && channel_list) - vPortFree(channel_list); - -} -#endif -static void cmd_wifi_scan(int argc, char **argv) -{ - - uint8_t *channel_list = NULL; - uint8_t *pscan_config = NULL; - - if(argc > 2){ - int i = 0; - int num_channel = atoi(argv[1]); - - channel_list = (uint8_t*)pvPortMalloc(num_channel); - if(!channel_list){ - printf(" ERROR: Can't malloc memory for channel list\n"); - goto exit; - } - pscan_config = (uint8_t*)pvPortMalloc(num_channel); - if(!pscan_config){ - printf(" ERROR: Can't malloc memory for pscan_config\n"); - goto exit; - } - //parse command channel list - for(i = 2; i <= argc -1 ; i++){ - *(channel_list + i - 2) = (uint8_t)atoi(argv[i]); - *(pscan_config + i - 2) = PSCAN_ENABLE; - } - - if(wifi_set_pscan_chan(channel_list, pscan_config, num_channel) < 0){ - printf("ERROR: wifi set partial scan channel fail\n"); - goto exit; - } - - } - - if(wifi_scan_networks(app_scan_result_handler, NULL ) != RTW_SUCCESS){ - printf("ERROR: wifi scan failed\n"); - goto exit; - } -exit: - if(argc > 2 && channel_list) - vPortFree(channel_list); - -} - -#if CONFIG_WEBSERVER -static void cmd_wifi_start_webserver(int argc, char **argv) -{ - start_web_server(); -} -#endif - -static void cmd_wifi_iwpriv(int argc, char **argv) -{ - if(argc == 2 && argv[1]) { - wext_private_command(WLAN0_NAME, argv[1], 1); - } - else { - printf("Usage: iwpriv COMMAND PARAMETERS\n"); - } -} -#endif //#if CONFIG_WLAN - -static void cmd_ping(int argc, char **argv) -{ - if(argc == 2) { - do_ping_call(argv[1], 0, 5); //Not loop, count=5 - } - else if(argc == 3) { - if(strcmp(argv[2], "loop") == 0) - do_ping_call(argv[1], 1, 0); //loop, no count - else - do_ping_call(argv[1], 0, atoi(argv[2])); //Not loop, with count - } - else { - printf("Usage: ping IP [COUNT/loop]\n"); - } -} -#if ( configGENERATE_RUN_TIME_STATS == 1 ) -static char cBuffer[ 512 ]; -static void cmd_cpustat(int argc, char **argv) -{ - vTaskGetRunTimeStats( ( char * ) cBuffer ); - printf( cBuffer ); -} -#endif -#if defined(CONFIG_RTL8195A) || defined(CONFIG_RTL8711B) -static void cmd_dump_reg(int argc, char **argv) -{ - CmdDumpWord(argc-1, (uint8_t**)(argv+1)); -} -static void cmd_edit_reg(int argc, char **argv) -{ - CmdWriteWord(argc-1, (uint8_t**)(argv+1)); -} -#endif -static void cmd_exit(int argc, char **argv) -{ - printf("Leave INTERACTIVE MODE\n"); - vTaskDelete(NULL); -} - -static void cmd_debug(int argc, char **argv) -{ - if(strcmp(argv[1], "ready_trx") == 0) { - printf("%d\n", wifi_is_ready_to_transceive((rtw_interface_t)rtw_atoi((uint8_t*)argv[2]))); - } else if(strcmp(argv[1], "is_up") == 0) { - printf("%d\n", wifi_is_up((rtw_interface_t)rtw_atoi((uint8_t*)argv[2]))); - } else if(strcmp(argv[1], "set_mac") == 0) { - printf("%d\n", wifi_set_mac_address(argv[2])); - } else if(strcmp(argv[1], "get_mac") == 0) { - uint8_t mac[18] = {0}; - wifi_get_mac_address((char*)mac); - printf("%s\n", mac); - } else if(strcmp(argv[1], "ps_on") == 0) { - printf("%d\n", wifi_enable_powersave()); - } else if(strcmp(argv[1], "ps_off") == 0) { - printf("%d\n", wifi_disable_powersave()); -#if 0 //TODO - } else if(strcmp(argv[1], "get_txpwr") == 0) { - int idx; - wifi_get_txpower(&idx); - printf("%d\n", idx); - } else if(strcmp(argv[1], "set_txpwr") == 0) { - printf("%d\n", wifi_set_txpower(rtw_atoi((uint8_t*)argv[2]))); -#endif - } else if(strcmp(argv[1], "get_clientlist") == 0) { - int client_number; - struct { - int count; - rtw_mac_t mac_list[3]; - } client_info; - - client_info.count = 3; - - printf("%d\n", wifi_get_associated_client_list(&client_info, sizeof(client_info))); - - if( client_info.count == 0 ) - { - RTW_API_INFO(("Clients connected 0..\r\n")); - } - else - { - RTW_API_INFO(("Clients connected %d..\r\n", client_info.count)); - for( client_number=0; client_number < client_info.count; client_number++ ) - { - RTW_API_INFO(("------------------------------------\r\n")); - RTW_API_INFO(("| %d | "MAC_FMT" |\r\n", - client_number, - MAC_ARG(client_info.mac_list[client_number].octet) - )); - } - RTW_API_INFO(("------------------------------------\r\n")); - } - } else if(strcmp(argv[1], "get_apinfo") == 0) { - rtw_bss_info_t ap_info; - rtw_security_t sec; - if(wifi_get_ap_info(&ap_info, &sec) == RTW_SUCCESS) { - RTW_API_INFO( ("\r\nSSID : %s\r\n", (char*)ap_info.SSID ) ); - RTW_API_INFO( ("BSSID : "MAC_FMT"\r\n", MAC_ARG(ap_info.BSSID.octet)) ); - RTW_API_INFO( ("RSSI : %d\r\n", ap_info.RSSI) ); - //RTW_API_INFO( ("SNR : %d\r\n", ap_info.SNR) ); - RTW_API_INFO( ("Beacon period : %d\r\n", ap_info.beacon_period) ); - RTW_API_INFO( ( "Security : %s\r\n", ( sec == RTW_SECURITY_OPEN ) ? "Open" : - ( sec == RTW_SECURITY_WEP_PSK ) ? "WEP" : - ( sec == RTW_SECURITY_WPA_TKIP_PSK ) ? "WPA TKIP" : - ( sec == RTW_SECURITY_WPA_AES_PSK ) ? "WPA AES" : - ( sec == RTW_SECURITY_WPA2_AES_PSK ) ? "WPA2 AES" : - ( sec == RTW_SECURITY_WPA2_TKIP_PSK ) ? "WPA2 TKIP" : - ( sec == RTW_SECURITY_WPA2_MIXED_PSK ) ? "WPA2 Mixed" : - "Unknown" ) ); - } - } else if(strcmp(argv[1], "reg_mc") == 0) { - rtw_mac_t mac; - sscanf(argv[2], MAC_FMT, (int*)(mac.octet+0), (int*)(mac.octet+1), (int*)(mac.octet+2), (int*)(mac.octet+3), (int*)(mac.octet+4), (int*)(mac.octet+5)); - printf("%d\n", wifi_register_multicast_address(&mac)); - } else if(strcmp(argv[1], "unreg_mc") == 0) { - rtw_mac_t mac; - sscanf(argv[2], MAC_FMT, (int*)(mac.octet+0), (int*)(mac.octet+1), (int*)(mac.octet+2), (int*)(mac.octet+3), (int*)(mac.octet+4), (int*)(mac.octet+5)); - printf("%d\n", wifi_unregister_multicast_address(&mac)); - } else if(strcmp(argv[1], "get_rssi") == 0) { - int rssi = 0; - wifi_get_rssi(&rssi); - printf("wifi_get_rssi: rssi = %d\n", rssi); - } else { - printf("Unknown CMD\n"); - } -} - -typedef struct _cmd_entry { - char *command; - void (*function)(int, char **); -} cmd_entry; - -static const cmd_entry cmd_table[] = { -#if CONFIG_WLAN - {"wifi_connect", cmd_wifi_connect}, - {"wifi_connect_bssid", cmd_wifi_connect_bssid}, - {"wifi_disconnect", cmd_wifi_disconnect}, - {"wifi_info", cmd_wifi_info}, - {"wifi_on", cmd_wifi_on}, - {"wifi_off", cmd_wifi_off}, - {"wifi_ap", cmd_wifi_ap}, - {"wifi_scan", cmd_wifi_scan}, -#if SCAN_WITH_SSID - {"wifi_scan_with_ssid", cmd_wifi_scan_with_ssid}, -#endif - {"iwpriv", cmd_wifi_iwpriv}, - {"wifi_promisc", cmd_promisc}, -#if CONFIG_OTA_UPDATE - {"wifi_update", cmd_update}, -#endif -#if CONFIG_WEBSERVER - {"wifi_start_webserver", cmd_wifi_start_webserver}, -#endif -#if (CONFIG_INCLUDE_SIMPLE_CONFIG) - {"wifi_simple_config", cmd_simple_config}, -#endif -#ifdef CONFIG_WPS -#if CONFIG_ENABLE_WPS - {"wifi_wps", cmd_wps}, -#endif -#ifdef CONFIG_WPS_AP - {"wifi_ap_wps", cmd_ap_wps}, -#endif -#if CONFIG_ENABLE_P2P - {"wifi_p2p_start", cmd_wifi_p2p_start}, - {"wifi_p2p_stop", cmd_wifi_p2p_stop}, - {"p2p_find", cmd_p2p_find}, - {"p2p_info", cmd_p2p_info}, - {"p2p_disconnect", cmd_p2p_disconnect}, - {"p2p_connect", cmd_p2p_connect}, -#endif -#endif -#ifdef CONFIG_CONCURRENT_MODE - {"wifi_sta_ap",cmd_wifi_sta_and_ap}, -#endif - -#if CONFIG_SSL_CLIENT - {"ssl_client", cmd_ssl_client}, -#endif -#if CONFIG_GOOGLENEST - {"gn", cmd_googlenest}, -#endif - -#endif -#if CONFIG_LWIP_LAYER -// {"app", cmd_app}, - {"wifi_debug", cmd_debug}, -#if CONFIG_BSD_TCP - {"tcp", cmd_tcp}, - {"udp", cmd_udp}, -#endif -#if CONFIG_JD_SMART - {"jd_smart", cmd_jd_smart}, -#endif - {"ping", cmd_ping}, -#endif -#if ( configGENERATE_RUN_TIME_STATS == 1 ) - {"cpu", cmd_cpustat}, -#endif -#if defined(CONFIG_RTL8195A) || defined(CONFIG_RTL8711B) - {"dw", cmd_dump_reg}, - {"ew", cmd_edit_reg}, -#endif - {"exit", cmd_exit}, - {"help", cmd_help} -}; - -#if CONFIG_INTERACTIVE_EXT -/* must include here, ext_cmd_table in wifi_interactive_ext.h uses struct cmd_entry */ -#include -#endif - -static void cmd_help(int argc, char **argv) -{ - int i; - - printf("COMMAND LIST:\n"); - printf("==============================\n"); - - for(i = 0; i < sizeof(cmd_table) / sizeof(cmd_table[0]); i ++) - printf("\t%s\n", cmd_table[i].command); -#if CONFIG_INTERACTIVE_EXT - for(i = 0; i < sizeof(ext_cmd_table) / sizeof(ext_cmd_table[0]); i ++) - printf("\t%s\n", ext_cmd_table[i].command); -#endif -} - -#define MAX_ARGC 6 - -static int parse_cmd(char *buf, char **argv) -{ - int argc = 0; - - memset(argv, 0, sizeof(argv)*MAX_ARGC); - while((argc < MAX_ARGC) && (*buf != '\0')) { - argv[argc] = buf; - argc ++; - buf ++; - - while((*buf != ' ') && (*buf != '\0')) - buf ++; - - while(*buf == ' ') { - *buf = '\0'; - buf ++; - } - // Don't replace space - if(argc == 1){ - if(strcmp(argv[0], "iwpriv") == 0){ - if(*buf != '\0'){ - argv[1] = buf; - argc ++; - } - break; - } - } - } - - return argc; -} - -char uart_buf[64]; -void interactive_mode(void *param) -{ - int i, argc; - char *argv[MAX_ARGC]; - extern xSemaphoreHandle uart_rx_interrupt_sema; - - printf("Enter INTERACTIVE MODE\n"); - printf("\n# "); - - while(1){ - while(xSemaphoreTake(uart_rx_interrupt_sema, portMAX_DELAY) != pdTRUE); - - if((argc = parse_cmd(uart_buf, argv)) > 0) { - int found = 0; - - for(i = 0; i < sizeof(cmd_table) / sizeof(cmd_table[0]); i ++) { - if(strcmp((const char *)argv[0], (const char *)(cmd_table[i].command)) == 0) { - cmd_table[i].function(argc, argv); - found = 1; - break; - } - } -#if CONFIG_INTERACTIVE_EXT - if(!found) { - for(i = 0; i < sizeof(ext_cmd_table) / sizeof(ext_cmd_table[0]); i ++) { - if(strcmp(argv[0], ext_cmd_table[i].command) == 0) { - ext_cmd_table[i].function(argc, argv); - found = 1; - break; - } - } - } -#endif - if(!found) - printf("unknown command '%s'\n", argv[0]); - printf("\n[MEM] After do cmd, available heap %d+%d\n", xPortGetFreeHeapSize(), tcm_heap_freeSpace()); - } - - printf("\n# "); - uart_buf[0] = '\0'; - } -} - -void start_interactive_mode(void) -{ -#ifdef SERIAL_DEBUG_RX - if(xTaskCreate(interactive_mode, (char const *)"interactive_mode", STACKSIZE, NULL, tskIDLE_PRIORITY + 4, NULL) != pdPASS) - printf("%s xTaskCreate failed\n", __FUNCTION__); -#else - printf("ERROR: No SERIAL_DEBUG_RX to support interactive mode!\n"); -#endif -} - -#if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) -void WlanNormal( IN uint16_t argc, IN uint8_t *argv[]) -{ - uint8_t i, j= 0; - uint8_t* pbuf = (uint8_t*)uart_buf; - extern xSemaphoreHandle uart_rx_interrupt_sema; - - memset(uart_buf, 0, sizeof(uart_buf)); - - printf("argc=%d\n", argc); - for(i = 0 ; i < argc ; i++) - { - printf("command element [%d] = %s\n", i, argv[i]); - for(j = 0; j - -/* This include is used to find 8 & 32 bit unsigned integer types */ -#include "rom_wac_brg_types.h" - -/* Use AES encrypt/decrypt in wlan ROM codes */ -#include "rom_aes.h" -extern int aes_set_key( aes_context *ctx, u8 *key, int nbits ); - -#if defined(__cplusplus) -extern "C" -{ -#endif - -#define AES_128 /* if a fast 128 bit key scheduler is needed */ -#define AES_192 /* if a fast 192 bit key scheduler is needed */ -#define AES_256 /* if a fast 256 bit key scheduler is needed */ -#define AES_VAR /* if variable key size scheduler is needed */ -#define AES_MODES /* if support is needed for modes */ - -/* The following must also be set in assembler files if being used */ - -#define AES_ENCRYPT /* if support for encryption is needed */ -#define AES_DECRYPT /* if support for decryption is needed */ -#define AES_REV_DKS /* define to reverse decryption key schedule */ - -#define AES_BLOCK_SIZE 16 /* the AES block size in bytes */ -#define N_COLS 4 /* the number of columns in the state */ - -/* The key schedule length is 11, 13 or 15 16-byte blocks for 128, */ -/* 192 or 256-bit keys respectively. That is 176, 208 or 240 bytes */ -/* or 44, 52 or 60 32-bit words. */ - -#if defined( AES_VAR ) || defined( AES_256 ) -#define KS_LENGTH 60 -#elif defined( AES_192 ) -#define KS_LENGTH 52 -#else -#define KS_LENGTH 44 -#endif - -#define AES_RETURN INT_RETURN - -/* the character array 'inf' in the following structures is used */ -/* to hold AES context information. This AES code uses cx->inf.b[0] */ -/* to hold the number of rounds multiplied by 16. The other three */ -/* elements can be used by code that implements additional modes */ - -typedef union -{ uint_32t l; - uint_8t b[4]; -} aes_inf; - -typedef struct -{ -#if 0 - uint_32t ks[KS_LENGTH]; -#else - aes_context ctx; -#endif - aes_inf inf; -} aes_encrypt_ctx; - -typedef struct -{ -#if 0 - uint_32t ks[KS_LENGTH]; -#else - aes_context ctx; -#endif - aes_inf inf; -} aes_decrypt_ctx; - -/* This routine must be called before first use if non-static */ -/* tables are being used */ - -AES_RETURN aes_init(void); - -/* Key lengths in the range 16 <= key_len <= 32 are given in bytes, */ -/* those in the range 128 <= key_len <= 256 are given in bits */ - -#if defined( AES_ENCRYPT ) - -#if defined( AES_128 ) || defined( AES_VAR) -AES_RETURN aes_encrypt_key128(const unsigned char *key, aes_encrypt_ctx cx[1]); -#endif - -#if defined( AES_192 ) || defined( AES_VAR) -AES_RETURN aes_encrypt_key192(const unsigned char *key, aes_encrypt_ctx cx[1]); -#endif - -#if defined( AES_256 ) || defined( AES_VAR) -AES_RETURN aes_encrypt_key256(const unsigned char *key, aes_encrypt_ctx cx[1]); -#endif - -#if defined( AES_VAR ) -AES_RETURN aes_encrypt_key(const unsigned char *key, int key_len, aes_encrypt_ctx cx[1]); -#endif - -#if 0 -AES_RETURN aes_encrypt(const unsigned char *in, unsigned char *out, const aes_encrypt_ctx cx[1]); -#else -extern void aes_encrypt( aes_context *ctx, u8 input[16], u8 output[16] ); -#endif - -#endif - -#if defined( AES_DECRYPT ) - -#if defined( AES_128 ) || defined( AES_VAR) -AES_RETURN aes_decrypt_key128(const unsigned char *key, aes_decrypt_ctx cx[1]); -#endif - -#if defined( AES_192 ) || defined( AES_VAR) -AES_RETURN aes_decrypt_key192(const unsigned char *key, aes_decrypt_ctx cx[1]); -#endif - -#if defined( AES_256 ) || defined( AES_VAR) -AES_RETURN aes_decrypt_key256(const unsigned char *key, aes_decrypt_ctx cx[1]); -#endif - -#if defined( AES_VAR ) -AES_RETURN aes_decrypt_key(const unsigned char *key, int key_len, aes_decrypt_ctx cx[1]); -#endif - -#if 0 -AES_RETURN aes_decrypt(const unsigned char *in, unsigned char *out, const aes_decrypt_ctx cx[1]); -#else -extern void aes_decrypt( aes_context *ctx, u8 input[16], u8 output[16] ); -#endif - -#endif - -#if defined( AES_MODES ) - -/* Multiple calls to the following subroutines for multiple block */ -/* ECB, CBC, CFB, OFB and CTR mode encryption can be used to handle */ -/* long messages incremantally provided that the context AND the iv */ -/* are preserved between all such calls. For the ECB and CBC modes */ -/* each individual call within a series of incremental calls must */ -/* process only full blocks (i.e. len must be a multiple of 16) but */ -/* the CFB, OFB and CTR mode calls can handle multiple incremental */ -/* calls of any length. Each mode is reset when a new AES key is */ -/* set but ECB and CBC operations can be reset without setting a */ -/* new key by setting a new IV value. To reset CFB, OFB and CTR */ -/* without setting the key, aes_mode_reset() must be called and the */ -/* IV must be set. NOTE: All these calls update the IV on exit so */ -/* this has to be reset if a new operation with the same IV as the */ -/* previous one is required (or decryption follows encryption with */ -/* the same IV array). */ - -AES_RETURN aes_test_alignment_detection(unsigned int n); - -AES_RETURN aes_ecb_encrypt(const unsigned char *ibuf, unsigned char *obuf, - int len, const aes_encrypt_ctx cx[1]); - -AES_RETURN aes_ecb_decrypt(const unsigned char *ibuf, unsigned char *obuf, - int len, const aes_decrypt_ctx cx[1]); - -AES_RETURN aes_cbc_encrypt(const unsigned char *ibuf, unsigned char *obuf, - int len, unsigned char *iv, const aes_encrypt_ctx cx[1]); - -AES_RETURN aes_cbc_decrypt(const unsigned char *ibuf, unsigned char *obuf, - int len, unsigned char *iv, const aes_decrypt_ctx cx[1]); - -AES_RETURN aes_mode_reset(aes_encrypt_ctx cx[1]); - -AES_RETURN aes_cfb_encrypt(const unsigned char *ibuf, unsigned char *obuf, - int len, unsigned char *iv, aes_encrypt_ctx cx[1]); - -AES_RETURN aes_cfb_decrypt(const unsigned char *ibuf, unsigned char *obuf, - int len, unsigned char *iv, aes_encrypt_ctx cx[1]); - -#define aes_ofb_encrypt aes_ofb_crypt -#define aes_ofb_decrypt aes_ofb_crypt - -AES_RETURN aes_ofb_crypt(const unsigned char *ibuf, unsigned char *obuf, - int len, unsigned char *iv, aes_encrypt_ctx cx[1]); - -typedef void cbuf_inc(unsigned char *cbuf); - -#define aes_ctr_encrypt aes_ctr_crypt -#define aes_ctr_decrypt aes_ctr_crypt - -AES_RETURN aes_ctr_crypt(const unsigned char *ibuf, unsigned char *obuf, - int len, unsigned char *cbuf, cbuf_inc ctr_inc, aes_encrypt_ctx cx[1]); - -#endif - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/application/apple/WACServer/External/GladmanAES/rom_wac_brg_types.h b/Firmware/RTLGDB/USDK/component/common/application/apple/WACServer/External/GladmanAES/rom_wac_brg_types.h deleted file mode 100644 index e990603..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/apple/WACServer/External/GladmanAES/rom_wac_brg_types.h +++ /dev/null @@ -1,229 +0,0 @@ -/* ---------------------------------------------------------------------------- -Copyright (c) 1998-2010, Brian Gladman, Worcester, UK. All rights reserved. - -The redistribution and use of this software (with or without changes) -is allowed without the payment of fees or royalties provided that: - - source code distributions include the above copyright notice, this - list of conditions and the following disclaimer; - - binary distributions include the above copyright notice, this list - of conditions and the following disclaimer in their documentation. - -This software is provided 'as is' with no explicit or implied warranties -in respect of its operation, including, but not limited to, correctness -and fitness for purpose. ---------------------------------------------------------------------------- -Issue Date: 20/12/2007 - - The unsigned integer types defined here are of the form uint_t where - is the length of the type; for example, the unsigned 32-bit type is - 'uint_32t'. These are NOT the same as the 'C99 integer types' that are - defined in the inttypes.h and stdint.h headers since attempts to use these - types have shown that support for them is still highly variable. However, - since the latter are of the form uint_t, a regular expression search - and replace (in VC++ search on 'uint_{:z}t' and replace with 'uint\1_t') - can be used to convert the types used here to the C99 standard types. -*/ - -#ifndef _BRG_TYPES_H -#define _BRG_TYPES_H - -#if defined(__cplusplus) -extern "C" { -#endif - -#include -#if 0 -#if defined( _MSC_VER ) && ( _MSC_VER >= 1300 ) -# include -# define ptrint_t intptr_t -#elif defined( __ECOS__ ) -# define intptr_t unsigned int -# define ptrint_t intptr_t -#elif defined( __GNUC__ ) && ( __GNUC__ >= 3 ) -# include -# define ptrint_t intptr_t -#else -# define ptrint_t int -#endif -#else -# include -# define ptrint_t intptr_t -#ifndef u8 - typedef uint8_t u8; -#endif -#ifndef u32 - typedef uint32_t u32; -#endif -#endif - -#ifndef BRG_UI8 -# define BRG_UI8 -# if UCHAR_MAX == 255u - typedef unsigned char uint_8t; -# else -# error Please define uint_8t as an 8-bit unsigned integer type in brg_types.h -# endif -#endif - -#ifndef BRG_UI16 -# define BRG_UI16 -# if USHRT_MAX == 65535u - typedef unsigned short uint_16t; -# else -# error Please define uint_16t as a 16-bit unsigned short type in brg_types.h -# endif -#endif - -#ifndef BRG_UI32 -# define BRG_UI32 -# if UINT_MAX == 4294967295u -# define li_32(h) 0x##h##u - typedef unsigned int uint_32t; -# elif ULONG_MAX == 4294967295u -# define li_32(h) 0x##h##ul - typedef unsigned long uint_32t; -# elif defined( _CRAY ) -# error This code needs 32-bit data types, which Cray machines do not provide -# else -# error Please define uint_32t as a 32-bit unsigned integer type in brg_types.h -# endif -#endif - -#ifndef BRG_UI64 -# if defined( __BORLANDC__ ) && !defined( __MSDOS__ ) -# define BRG_UI64 -# define li_64(h) 0x##h##ui64 - typedef unsigned __int64 uint_64t; -# elif defined( _MSC_VER ) && ( _MSC_VER < 1300 ) /* 1300 == VC++ 7.0 */ -# define BRG_UI64 -# define li_64(h) 0x##h##ui64 - typedef unsigned __int64 uint_64t; -# elif defined( __sun ) && defined( ULONG_MAX ) && ULONG_MAX == 0xfffffffful -# define BRG_UI64 -# define li_64(h) 0x##h##ull - typedef unsigned long long uint_64t; -# elif defined( __MVS__ ) -# define BRG_UI64 -# define li_64(h) 0x##h##ull - typedef unsigned int long long uint_64t; -# elif defined( UINT_MAX ) && UINT_MAX > 4294967295u -# if UINT_MAX == 18446744073709551615u -# define BRG_UI64 -# define li_64(h) 0x##h##u - typedef unsigned int uint_64t; -# endif -# elif defined( ULONG_MAX ) && ULONG_MAX > 4294967295u -# if ULONG_MAX == 18446744073709551615ul -# define BRG_UI64 -# define li_64(h) 0x##h##ul - typedef unsigned long uint_64t; -# endif -# elif defined( ULLONG_MAX ) && ULLONG_MAX > 4294967295u -# if ULLONG_MAX == 18446744073709551615ull -# define BRG_UI64 -# define li_64(h) 0x##h##ull - typedef unsigned long long uint_64t; -# endif -# elif defined( ULONG_LONG_MAX ) && ULONG_LONG_MAX > 4294967295u -# if ULONG_LONG_MAX == 18446744073709551615ull -# define BRG_UI64 -# define li_64(h) 0x##h##ull - typedef unsigned long long uint_64t; -# endif -# endif -#endif - -#if !defined( BRG_UI64 ) -# if defined( NEED_UINT_64T ) -# error Please define uint_64t as an unsigned 64 bit type in brg_types.h -# endif -#endif - -#ifndef RETURN_VALUES -# define RETURN_VALUES -# if defined( DLL_EXPORT ) -# if defined( _MSC_VER ) || defined ( __INTEL_COMPILER ) -# define VOID_RETURN __declspec( dllexport ) void __stdcall -# define INT_RETURN __declspec( dllexport ) int __stdcall -# elif defined( __GNUC__ ) -# define VOID_RETURN __declspec( __dllexport__ ) void -# define INT_RETURN __declspec( __dllexport__ ) int -# else -# error Use of the DLL is only available on the Microsoft, Intel and GCC compilers -# endif -# elif defined( DLL_IMPORT ) -# if defined( _MSC_VER ) || defined ( __INTEL_COMPILER ) -# define VOID_RETURN __declspec( dllimport ) void __stdcall -# define INT_RETURN __declspec( dllimport ) int __stdcall -# elif defined( __GNUC__ ) -# define VOID_RETURN __declspec( __dllimport__ ) void -# define INT_RETURN __declspec( __dllimport__ ) int -# else -# error Use of the DLL is only available on the Microsoft, Intel and GCC compilers -# endif -# elif defined( __WATCOMC__ ) -# define VOID_RETURN void __cdecl -# define INT_RETURN int __cdecl -# else -# define VOID_RETURN void -# define INT_RETURN int -# endif -#endif - -/* These defines are used to detect and set the memory alignment of pointers. - Note that offsets are in bytes. - - ALIGN_OFFSET(x,n) return the positive or zero offset of - the memory addressed by the pointer 'x' - from an address that is aligned on an - 'n' byte boundary ('n' is a power of 2) - - ALIGN_FLOOR(x,n) return a pointer that points to memory - that is aligned on an 'n' byte boundary - and is not higher than the memory address - pointed to by 'x' ('n' is a power of 2) - - ALIGN_CEIL(x,n) return a pointer that points to memory - that is aligned on an 'n' byte boundary - and is not lower than the memory address - pointed to by 'x' ('n' is a power of 2) -*/ - -#define ALIGN_OFFSET(x,n) (((ptrint_t)(x)) & ((n) - 1)) -#define ALIGN_FLOOR(x,n) ((uint_8t*)(x) - ( ((ptrint_t)(x)) & ((n) - 1))) -#define ALIGN_CEIL(x,n) ((uint_8t*)(x) + (-((ptrint_t)(x)) & ((n) - 1))) - -/* These defines are used to declare buffers in a way that allows - faster operations on longer variables to be used. In all these - defines 'size' must be a power of 2 and >= 8. NOTE that the - buffer size is in bytes but the type length is in bits - - UNIT_TYPEDEF(x,size) declares a variable 'x' of length - 'size' bits - - BUFR_TYPEDEF(x,size,bsize) declares a buffer 'x' of length 'bsize' - bytes defined as an array of variables - each of 'size' bits (bsize must be a - multiple of size / 8) - - UNIT_CAST(x,size) casts a variable to a type of - length 'size' bits - - UPTR_CAST(x,size) casts a pointer to a pointer to a - varaiable of length 'size' bits -*/ - -#define UI_TYPE(size) uint_##size##t -#define UNIT_TYPEDEF(x,size) typedef UI_TYPE(size) x -#define BUFR_TYPEDEF(x,size,bsize) typedef UI_TYPE(size) x[bsize / (size >> 3)] -#define UNIT_CAST(x,size) ((UI_TYPE(size) )(x)) -#define UPTR_CAST(x,size) ((UI_TYPE(size)*)(x)) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/application/google/google_nest.h b/Firmware/RTLGDB/USDK/component/common/application/google/google_nest.h deleted file mode 100644 index c98e612..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/google/google_nest.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef GOOGLENEST_H -#define GOOGLENEST_H - -#include - -typedef struct { - int socket; - char *host; - ssl_context ssl; -} googlenest_context; - -int gn_connect(googlenest_context *googlenest, char *host, int port); -void gn_close(googlenest_context *googlenest); -int gn_put(googlenest_context *googlenest, char *uri, char *content); -int gn_patch(googlenest_context *googlenest, char *uri, char *content); -int gn_post(googlenest_context *googlenest, char *uri, char *content, unsigned char *out_buffer, size_t out_len); -int gn_get(googlenest_context *googlenest, char *uri, unsigned char *out_buffer, size_t out_len); -int gn_delete(googlenest_context *googlenest, char *uri); -int gn_stream(googlenest_context *googlenest, char *uri); -void google_retrieve_data_hook_callback(void (*callback)(char *)); - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/application/jd_joinlink/example_joinlink.c b/Firmware/RTLGDB/USDK/component/common/application/jd_joinlink/example_joinlink.c deleted file mode 100644 index 669095c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/jd_joinlink/example_joinlink.c +++ /dev/null @@ -1,679 +0,0 @@ -/*******************************example_joinlink **************************/ - -#include "autoconf.h" -#include "platform_stdlib.h" -#include "wifi_conf.h" -#include "wifi_structures.h" -#include "osdep_service.h" -#include "lwip_netconf.h" -#include "task.h" -#include "joinlink.h" -#include "cJSON.h" - -#include -#include -#include -#include -#include - -#define MASK_SIZE_JOINLINK 3 -#define SOURCE_PORT 101 - -//gloable -static unsigned char cur_channel = 1; -static unsigned char lock_channel = 1; -static _timer timer_handler_phase2; -static _timer timer_handler_phase1; -static u8 joinlink_finished = 0; -static u8 security_type = 0xff; -static u8 jl_rx_flag = 0; -static rtw_scan_result_t *all_channel_scan_result = NULL; -static rtw_scan_result_t *p_result = NULL; -static int all_channel_ret = 0; -static int phase1_finished = 0; -static int phase2_started = 0; -static u32 start_time = 0; -static u32 current_time = 0; -static int idx = 1; -static int phase1_scanned_channel[14]; -static char ap_bssid[6]; -static char aes_key[] = "123456789"; - -static void* pre_scan_sema; -static int ack_socket; -static struct sockaddr_in to_addr; -static struct sockaddr_in from_addr; -static char header_cmd[] = "cmd"; -static cJSON *ack_content = NULL; -extern struct netif xnetif[]; - -void example_joinlink(void); - -static rtw_result_t joinlink_scan_result_handler(rtw_scan_handler_result_t* malloced_scan_result ) -{ - - static int ApNum = 0; - //TODO: add timer of 2s, wf, 1021 - if (malloced_scan_result->scan_complete != RTW_TRUE) { - rtw_scan_result_t* record = &malloced_scan_result->ap_details; - record->SSID.val[record->SSID.len] = 0; /* Ensure the SSID is null terminated */ - ++ApNum; - - if(malloced_scan_result->user_data) - memcpy((void *)((char *)malloced_scan_result->user_data+(ApNum-1)*sizeof(rtw_scan_result_t)), (char *)record, sizeof(rtw_scan_result_t)); - } - // scan finished, wf, 1022 - else - { - rtw_up_sema(&pre_scan_sema); - ApNum = 0; - } - return RTW_SUCCESS; -} - -void* joinlink_all_scan() -{ - int ret = 0; - rtw_scan_result_t *joinlink_scan_buf = NULL; - - if(joinlink_scan_buf != NULL) - free(joinlink_scan_buf); - - joinlink_scan_buf = (rtw_scan_result_t *)malloc(65*sizeof(rtw_scan_result_t)); - if(joinlink_scan_buf == NULL){ - return 0; - } - memset(joinlink_scan_buf, 0, 65*sizeof(rtw_scan_result_t)); - - if((ret = wifi_scan_networks(joinlink_scan_result_handler, joinlink_scan_buf)) != RTW_SUCCESS){ - printf("[ATWS]ERROR: wifi scan failed\n\r"); - free(joinlink_scan_buf); - return 0; - } - return joinlink_scan_buf; -} - -void joinlink_deinit_content() -{ - rtw_del_timer(&timer_handler_phase2); - rtw_del_timer(&timer_handler_phase1); - if(all_channel_scan_result) - { - free(all_channel_scan_result); - all_channel_scan_result = NULL; - } - rtw_free_sema(&pre_scan_sema); - joinlink_deinit(); - - return; -} -static char *jl_itoa(int value) -{ - char *val_str; - int tmp = value, len = 1; - - while((tmp /= 10) > 0) - len ++; - - val_str = (char *) malloc(len + 1); - sprintf(val_str, "%d", value); - - return val_str; -} - -static void get_ip_str(int *ip_int, char *ip_ch) -{ - char *ip_single = NULL; - u8 pos = 0, len = 0; - - for(int i = 0; i < 4; i++) - { - ip_single = jl_itoa(ip_int[i]); - len = strlen(ip_single); - memcpy(ip_ch + pos, ip_single,len); - free(ip_single); - ip_single = NULL; - pos += len; - if(i == 3) - { - *(ip_ch + pos) = 0; - break; - } - *(ip_ch + pos) = '.'; - pos++; - } -} - -static int joinlink_set_ack_content(u8 check_sum) -{ - cJSON_Hooks memoryHook; - memoryHook.malloc_fn = malloc; - memoryHook.free_fn = free; - cJSON_InitHooks(&memoryHook); - - if(ack_content != NULL) - { - cJSON_Delete(ack_content); - ack_content = NULL; - } - if((ack_content = cJSON_CreateObject()) != NULL) - { - char mac_str[18]; - u8 pos = 0; - memset(mac_str, 0, sizeof(mac_str)); - for(int i = 0; i < 6; i++) - { - sprintf(mac_str + pos, "%02x", xnetif[0].hwaddr[i]); - pos += 2; - if(i != 5) - mac_str[pos++] = ':'; - } - - cJSON_AddItemToObject(ack_content, "deviceid", cJSON_CreateString(mac_str)); - cJSON_AddItemToObject(ack_content, "code", cJSON_CreateNumber(check_sum)); - } - else - { - printf("create jSON object failure\n"); - return -1; - } - - return 0; -} - -#if 1 - -static void recv_cmd(void *para) -{ - int rev_len = 0; - char pkt_buf[16]; - while(1) - { - vTaskDelay(500); - if((rev_len = recvfrom(ack_socket, pkt_buf, sizeof(pkt_buf), 0, NULL, NULL)) >= 0) - { - if(memcmp(pkt_buf, header_cmd, sizeof(header_cmd)) == 0) - { - printf("received reboot command, restart join_link process\n"); - // do we need to reboot? - example_joinlink(); - close(ack_socket); - break; - } - } - } - vTaskDelete(NULL); - return; -} - -static int send_ack(int *dest_ip, int dest_port, u8 sum) -{ -#if CONFIG_LWIP_LAYER - int ack_transmit_round; - char ip[16]; - char *jsonString = NULL; - int sended_data = 0; - - if(joinlink_set_ack_content(sum) == -1) - return -1; - - jsonString = cJSON_Print(ack_content); - if(jsonString == NULL) - { - printf("json string convert failure\n"); - cJSON_Delete(ack_content); - return -1; - } - - get_ip_str(dest_ip, ip); - - ack_socket = socket(PF_INET, SOCK_DGRAM, IP_PROTO_UDP); - if (ack_socket == -1) { - printf("create socket failure\n"); - return -1; - } - - FD_ZERO(&to_addr); - to_addr.sin_family = AF_INET; - to_addr.sin_port = htons(dest_port); - to_addr.sin_addr.s_addr = htonl(INADDR_ANY); - - FD_ZERO(&from_addr); - from_addr.sin_family = AF_INET; - from_addr.sin_port = htons(SOURCE_PORT); - to_addr.sin_addr.s_addr = inet_addr(ip); - - if(bind(ack_socket, (struct sockaddr *)&from_addr, sizeof(from_addr)) < 0) - { - printf("bind to source port error\n"); - return -1; - } - - for (ack_transmit_round = 0; ack_transmit_round < 5; ack_transmit_round++) { - sended_data = sendto(ack_socket, (unsigned char *)jsonString, strlen(jsonString), 0, (struct sockaddr *) &to_addr, sizeof(struct sockaddr)); - //printf("\r\nAlready send %d bytes data\n", sended_data); - vTaskDelay(100); /* delay 100 ms */ - } - - if(xTaskCreate(recv_cmd, (char const *)"recv_cmd", 1512, NULL, tskIDLE_PRIORITY + 2, NULL) != pdPASS) - printf("%s xTaskCreate failed\n", __FUNCTION__); - - close(ack_socket); - if(jsonString) - { - free(jsonString); - jsonString = NULL; - } - cJSON_Delete(ack_content); -#endif - - return 0; -} -#endif -static void remove_filter() -{ - wifi_disable_packet_filter(1); - wifi_disable_packet_filter(2); - wifi_remove_packet_filter(1); - wifi_remove_packet_filter(2); -} - -int joinlink_finish(unsigned char security_type) -{ - int ret = 0; - int retry = 3; - unsigned char pscan_config = 1; - joinlink_result_t result; - rtw_security_t security_mode; - - wifi_set_promisc(RTW_PROMISC_DISABLE,NULL,0); - remove_filter(); - - pscan_config = PSCAN_ENABLE | PSCAN_SIMPLE_CONFIG; - ret = joinlink_get_result(&result); - if (ret == 0) { - printf("get result OK\n"); - //printf("\r\n joinlink get result ok,ssid = %s, pwd = %s,ssid length = %d,pwd length = %d", - // result.ssid, result.pwd, result.ssid_length,result.pwd_length); - } - else{ - printf("joinlink result not get!\n"); - joinlink_deinit_content(); - return -1; - } - //ap security type - switch(security_type){ - case RTW_ENCRYPTION_OPEN: - security_mode = RTW_SECURITY_OPEN; - break; - case RTW_ENCRYPTION_WEP40: - case RTW_ENCRYPTION_WEP104: - security_mode = RTW_SECURITY_WEP_PSK; - break; - case RTW_ENCRYPTION_WPA_TKIP: - case RTW_ENCRYPTION_WPA_AES: - case RTW_ENCRYPTION_WPA2_TKIP: - case RTW_ENCRYPTION_WPA2_AES: - case RTW_ENCRYPTION_WPA2_MIXED: - security_mode = RTW_SECURITY_WPA2_AES_PSK; - break; - case RTW_ENCRYPTION_UNKNOWN: - case RTW_ENCRYPTION_UNDEF: - default: - printf("unknow security mode,connect fail!\n"); - } - -#if 1 - while(1){ - if(wifi_set_pscan_chan(&lock_channel, &pscan_config, 1) < 0){ - printf("ERROR: wifi set partial scan channel fail\n"); - break; - } - printf("wifi_connect\n"); - //printf("ap_bssid: 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n", ap_bssid[0],ap_bssid[1],ap_bssid[2],ap_bssid[3],ap_bssid[4],ap_bssid[5]); - - - ret = wifi_connect( - NULL, - 0, - (unsigned char *)result.ssid, - security_mode, - (unsigned char *)result.pwd, - 0, - NULL); - - if(ret == RTW_SUCCESS){ - printf("Connect ok!\n"); -#if CONFIG_LWIP_LAYER - /* If not rise priority, LwIP DHCP may timeout */ - vTaskPrioritySet(NULL, tskIDLE_PRIORITY + 3); - /* Start DHCP Client */ - ret = LwIP_DHCP(0, DHCP_START); - vTaskPrioritySet(NULL, tskIDLE_PRIORITY + 1); -#endif - break; - } - if (retry == 0) { - break; - } - - retry--; - } - if(send_ack(result.source_ip, result.source_port, result.sum) != 0) - printf("send ack failure\n"); -#endif - - joinlink_deinit_content(); - return 0; - -} -// handler for phase2 -void timer_handler_phase2_func(void *FunctionContext) -{ - // do not switch channel while handle frames, wf, 1021 - if(jl_rx_flag){ - rtw_set_timer(&timer_handler_phase2, CHANNEL_SWITCH_TIME - 25); - } else { - if(cur_channel >= 13) - {cur_channel = 1;} - else - cur_channel ++; - wifi_set_channel(cur_channel); - rtw_set_timer(&timer_handler_phase2, CHANNEL_SWITCH_TIME); - } - - //printf("phase2:wifi switch channel to %d\n",cur_channel); - return; -} - -// timer handler for the 1st phase, wf, 1022 -void timer_handler_phase1_func(void *FunctionContext) -{ - // do not switch channel while handle frames, wf, 1021 - if(jl_rx_flag){ - rtw_set_timer(&timer_handler_phase1, SSID_SWITCH_TIME - 25); - } - // switch ssid, wf, 1022 - else - { - if(idx >= 14) - { - phase1_finished = 1; - printf("wifi: phase1 scan finished\n"); - printf("wifi: start phase2 scan\n"); -// move from pkt handler to here in case no pkt to trigue phase2 -#if 1 - if(phase1_finished) - { - phase1_finished = 0; - phase2_started = 1; - rtw_cancel_timer(&timer_handler_phase1); - //start phase2 for ch1~ch13 - cur_channel = 1; - wifi_set_channel(cur_channel); - - rtw_init_timer(&timer_handler_phase2, NULL, &timer_handler_phase2_func, NULL, "phase_2"); - rtw_set_timer(&timer_handler_phase2, CHANNEL_SWITCH_TIME); - } -#endif - return; - } - - while(idx < 14) - { - if(phase1_scanned_channel[idx]) - { - wifi_set_channel(idx); - rtw_set_timer(&timer_handler_phase1, SSID_SWITCH_TIME); - //printf("phase1: wifi switch channel to %d\n",idx); - idx++; - break; - } - else - { - if(idx == 13) - rtw_set_timer(&timer_handler_phase1, SSID_SWITCH_TIME); - idx++; - } - - } - - } - return; -} - -static void rtl_frame_recv_handle(unsigned char *buf, int len, unsigned char *da, unsigned char *sa, void *user_data) { - - int ret = 0; - int fixed_channel; - char scanned_ssid[50] = {0}; - unsigned char *current_bssid = NULL; - int scanned_ssid_len = 0; - - //set this flag prevent joinlink_recv interruptted by timer,since timer has higher priority - jl_rx_flag = 1; - if (joinlink_finished) { - jl_rx_flag = 0; - return; - } - - ret = joinlink_recv(da, sa, len, user_data); - if(ret == JOINLINK_STATUS_CHANNEL_LOCKED) - { - if(phase2_started) - { - phase2_started = 0; - rtw_cancel_timer(&timer_handler_phase2); - } - else - rtw_cancel_timer(&timer_handler_phase1); - - lock_channel = cur_channel; - security_type = ((ieee80211_frame_info_t *)user_data)->encrypt; - printf("JoinLink locked to channel[%d]\n",lock_channel); - - current_bssid = buf + 4 + ETH_ALEN; - memcpy(ap_bssid, current_bssid, 6); - - fixed_channel = promisc_get_fixed_channel(current_bssid, scanned_ssid, &scanned_ssid_len); - if (fixed_channel != 0) { - printf("JoinLink force fixed to channel[%d]\r\n",fixed_channel); - printf("JoinLink ssid scanned[%s]\r\n",scanned_ssid); - wifi_set_channel(fixed_channel); - } - - } - else if(ret == JOINLINK_STATUS_COMPLETE){ - //wifi_set_promisc(RTW_PROMISC_DISABLE,NULL,0); - joinlink_finished = 1; - printf("quit promisc mode!\r\n"); - } - //release flag - jl_rx_flag = 0; - - return; -} - - -// callback for promisc packets, like rtk_start_parse_packet in SC, wf, 1021 -void wifi_promisc_rx(unsigned char* buf, unsigned int len, void* user_data) -{ - unsigned char * da = buf; - unsigned char * sa = buf + ETH_ALEN; - - if (joinlink_finished) - return; - - rtl_frame_recv_handle(buf, len, da, sa, user_data); - return; - -} - -// the entry point for joinlink -void joinlink_process(void *param) -{ - - while(1) - { - current_time = xTaskGetTickCount(); - - if(joinlink_finished) - { - printf("joinlink finished\n"); - break; - } - - if((current_time - start_time) > JOINLINK_TIME * configTICK_RATE_HZ) - { - printf("joinlink timeout\n"); - break; - } - - vTaskDelay(500); - } - - joinlink_finish(security_type); - - vTaskDelete(NULL); - return; -} - -int joinlink_init_content() -{ - - int ret = 0; - ret = joinlink_init(); - if(ret < 0){ - printf("JoinLink init failed!\n"); - return ret; - } - memset(phase1_scanned_channel, 0, sizeof(phase1_scanned_channel)); - security_type = 0xff; - cur_channel = 1; - lock_channel = 1; - joinlink_finished = 0; - jl_rx_flag = 0; - p_result = NULL; - all_channel_ret = 0; - phase1_finished = 0; - phase2_started = 0; - idx = 1; - rtw_init_sema(&pre_scan_sema, 0); - memset(ap_bssid, 0, sizeof(ap_bssid)); - set_aes_key(aes_key, sizeof(aes_key) - 1); - - return 0; -} - -// ret:1 indicate suc, else fail -int scan_all_channel() -{ - all_channel_scan_result = (rtw_scan_result_t *)joinlink_all_scan(); - - if(all_channel_scan_result == NULL) - return 0; - else - return 1; - -} - -void get_phase1_channel() -{ - p_result = all_channel_scan_result; - while(p_result->channel) - { - if((p_result->channel >= 1) && (p_result->channel <= 13)) - phase1_scanned_channel[p_result->channel] = 1; - p_result++; - } - return; -} - -// now only accept mcast and bcast pkt -static void filter_add_enable() -{ - u8 mask[MASK_SIZE_JOINLINK]={0xFF,0xFF,0xFF}; - u8 pattern[MASK_SIZE_JOINLINK]={0x01,0x00,0x5e}; - u8 pattern_bcast[MASK_SIZE_JOINLINK]={0xff,0xff,0xff}; - - rtw_packet_filter_pattern_t packet_filter; - rtw_packet_filter_pattern_t packet_filter_bcast; - rtw_packet_filter_rule_e rule; - - packet_filter.offset = 0; - packet_filter.mask_size = 3; - packet_filter.mask = mask; - packet_filter.pattern = pattern; - - packet_filter_bcast.offset = 0; - packet_filter_bcast.mask_size = 3; - packet_filter_bcast.mask = mask; - packet_filter_bcast.pattern = pattern_bcast; - - rule = RTW_POSITIVE_MATCHING; - - wifi_init_packet_filter(); - wifi_add_packet_filter(1, &packet_filter,rule); - wifi_add_packet_filter(2, &packet_filter_bcast,rule); - - wifi_enable_packet_filter(1); - wifi_enable_packet_filter(2); -} - - -void joinlink_start(void *param) -{ - joinlink_finished = 0; - start_time = xTaskGetTickCount(); - - if(xTaskCreate(joinlink_process, (char const *)"JoinLink", 1512, NULL, tskIDLE_PRIORITY + 2, NULL) != pdPASS) - printf("%s xTaskCreate failed\n", __FUNCTION__); - - if (joinlink_init_content() < 0) - printf("joinlink init fail!\n"); - while(1) - { - if(wifi_is_ready_to_transceive(RTW_STA_INTERFACE) == RTW_SUCCESS) - break; - else - vTaskDelay(3000); - } - all_channel_ret = scan_all_channel(); - - if (rtw_down_sema(&pre_scan_sema) == _FAIL) - printf("%s, Take Semaphore Fail\n", __FUNCTION__); - - //printf("\npre scan finished\n"); - - //set wifi to station mode,enable promisc mode and timer to change channel - wifi_enter_promisc_mode(); - filter_add_enable(); - - /* enable all 802.11 packets*/ - wifi_set_promisc(RTW_PROMISC_ENABLE, wifi_promisc_rx, 1); - - //init timer handler,and set timer hanler funcion - if(all_channel_ret) - { - printf("\nstart the phase1 scan\n"); - get_phase1_channel(); - rtw_init_timer(&timer_handler_phase1, NULL, &timer_handler_phase1_func, NULL, "phase1_timer"); - rtw_set_timer(&timer_handler_phase1, SSID_SWITCH_TIME); - } - else - { - printf("phase1 scan fail, start phase2 scan\n"); - rtw_init_timer(&timer_handler_phase2, NULL, &timer_handler_phase2_func, NULL, "phase2_timer"); - wifi_set_channel(cur_channel); - rtw_set_timer(&timer_handler_phase2, CHANNEL_SWITCH_TIME); - } - - vTaskDelete(NULL); - return; -} - -void example_joinlink(void) -{ - if(xTaskCreate(joinlink_start, (char const *)"JoinLink_entry", 1512, NULL, tskIDLE_PRIORITY + 2, NULL) != pdPASS) - printf("%s xTaskCreate failed\n", __FUNCTION__); -} \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/application/jd_joinlink/joinlink.c b/Firmware/RTLGDB/USDK/component/common/application/jd_joinlink/joinlink.c deleted file mode 100644 index d576814..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/jd_joinlink/joinlink.c +++ /dev/null @@ -1,1100 +0,0 @@ -/******************************* joinlink **************************/ -//includes -#include "joinlink.h" - -// macro -#define NUM_MCAST 53 // the max len of pkt in mcast, original: 13 -#define NUM_BCAST 36 // the max number of index of bcast -#define HEAD_LEN 9 // sum(1 byte) + pwd_len(1 byte) + port(2 byte) + ip(4 byte) + ssid_len(1 byte) -#define NUM_IDX 10 // number of index in bcast -#define NUM_PKT 4 // number of packets for every index -#define SEQ_INCREMENT_ONE_BCAST 1 // only the increment of 1 in seq of pkt is accepted - -static char smac[6]; -static u8 decoded_state = 0; -static int joinlink_state_mcast = 0; -static int joinlink_state_bcast = 0; -static u8 sync_label_mcast = 0; -static u8 version_mcast = 0; -// every pkt has two byte -static u8 *raw_data_mcast = NULL; -static u8 *decrypted_data_mcast = NULL; -static u8 count_mcast = 0; -static u8 sum_mcast = 0; // the total len of ssid and pwd -static char pass_len = -1; -static u8 ssid_len = 0; -static u8 ssid_offset = 0; -static u8 odd_check = 0; -static u8 total_len_mcast = 0; -static u8 *recved_flag_mcast = NULL; -static u8 range_mcast[NUM_MCAST >> 3]; // the range for aes decryption -static u8 decryp_flag_mcast[NUM_MCAST >> 3]; - -static u8 sync_label_bcast = 0; -static u8 version_bcast_ready = 0; -static u8 version_bcast = 0; -static u8 count_in_idx_bcast = 0; -static u8 count_decoded_bcast = 0; -static unsigned short seq_now_bcast = 0; -static u8 locked_bssid_bcast[6]; -static u8 ssid_offset_bcast = 0; - -// for data phase in bcast -// 0: wating index pkt, 1: waiting info pkt -// TODO: need to fix bssid/ssid for bcast to filter unnecessary pkt -static u8 data_phase_state_bcast = 0; -static u8 *raw_data_bcast = NULL; -static u8 *decrypted_data_bcast = NULL; - -static u8 version_CRC = 0; -static u8 *decoded_flag_bcast = NULL; -static u8 current_idx_bcast = 0; - -static u8 sum_bcast = 0; -static char pass_len_bcast = -1; -static u8 ssid_len_bcast = 0; -static u8 fc_version_bcast = 0; -static u8 fc_data_bcast = 0; -static u8 idx_CRC = 0; -static u8 idx_data = 0; - -//store decode result of AP profile -joinlink_result_t *AP_profile = NULL; - -// AES decryption related -static u8 aes_iv[16]; -static u8 aes_key[16]; -static u8 ssid_range_mcast = 255; -static u8 decryp_data_buf[16]; -/* -ret: 0, success, -1, failure -*/ -int joinlink_init() -{ - decoded_state = 0; - joinlink_state_mcast = 0; - joinlink_state_bcast = 0; - sync_label_mcast = 0; - version_mcast = 0; - - raw_data_mcast = (u8 *)malloc(NUM_MCAST*2); - decrypted_data_mcast = (u8 *)malloc(NUM_MCAST*2); - recved_flag_mcast = (u8 *)malloc(NUM_MCAST); - raw_data_bcast = (u8 *)malloc(NUM_BCAST*NUM_PKT); - decrypted_data_bcast = (u8 *)malloc(NUM_BCAST*NUM_PKT); - decoded_flag_bcast = (u8 *)malloc(NUM_BCAST); - AP_profile = (joinlink_result_t *)malloc(sizeof(joinlink_result_t)); - - if(!raw_data_mcast || !decrypted_data_mcast || !recved_flag_mcast|| - !raw_data_bcast || !decrypted_data_bcast || !decoded_flag_bcast|| - !AP_profile) - { - printf("join_link: malloc memory fail\n"); - return -1; - } - - memset(raw_data_mcast, 0, NUM_MCAST*2); - count_mcast = 0; - sum_mcast = 0; - pass_len = -1; - ssid_len = 0; - ssid_offset = 0; - odd_check = 0; - total_len_mcast = 0; - memset(recved_flag_mcast, 0, NUM_MCAST); - - sync_label_bcast = 0; - version_bcast_ready = 0; - version_bcast = 0; - seq_now_bcast = 0; - memset(locked_bssid_bcast, 0, sizeof(locked_bssid_bcast)); - - data_phase_state_bcast = 0; - memset(raw_data_bcast, 0, NUM_BCAST*NUM_PKT); - version_CRC = 0; - count_in_idx_bcast = 0; - count_decoded_bcast = 0; - memset(decoded_flag_bcast, 0, NUM_BCAST); - current_idx_bcast = 0; - sum_bcast = 0; - pass_len_bcast = -1; - ssid_len_bcast = 0; - fc_version_bcast = 0; - fc_data_bcast = 0; - idx_CRC = 0; - idx_data = 0; - - memset(AP_profile, 0, sizeof(joinlink_result_t)); - memset(smac, 0, sizeof(smac)); - - memset(aes_iv, 0, sizeof(aes_iv)); - memset(aes_key, 0, sizeof(aes_key)); - memset(range_mcast, 0, sizeof(range_mcast)); - memset(decryp_flag_mcast, 0, sizeof(decryp_flag_mcast)); - ssid_range_mcast = 255; - memset(decrypted_data_mcast, 0, NUM_MCAST*2); - memset(decryp_data_buf, 0, sizeof(decryp_data_buf)); - memset(decrypted_data_bcast, 0, NUM_BCAST*NUM_PKT); - ssid_offset_bcast = 0; - - return 0; -} - -// set the aes_key, the max len should be 16 -int set_aes_key(char *key, int len) -{ - if (len <= 0 || len > 16) - return 0; - - memcpy(aes_key, key, len); - if (rtl_crypto_aes_cbc_init(aes_key, sizeof(aes_key)) != 0) - { - printf("AES CBC init failed\n"); - return 0; - } - printf("the AES key is set to %s\n", aes_key); - return 1; -} -// free memory -void joinlink_deinit() -{ - free(raw_data_mcast); - free(decrypted_data_mcast); - free(recved_flag_mcast); - free(raw_data_bcast); - free(decrypted_data_bcast); - free(decoded_flag_bcast); - free(AP_profile); - - raw_data_mcast = NULL; - decrypted_data_mcast = NULL; - recved_flag_mcast = NULL; - raw_data_bcast = NULL; - decrypted_data_bcast = NULL; - decoded_flag_bcast = NULL; - AP_profile = NULL; - - return; -} -// restart joinlink when error -static void joinlink_restart() -{ - joinlink_deinit(); - joinlink_init(); - return; -} -/* -ret: 0, failure; 1 true. -*/ -static int check_sync_mcast(u8 *da) -{ - if((da[3] == 0) && (da[4] == 1) && (da[5] >= 1) && (da[5] <= 3)) - { - sync_label_mcast |= 0x01 << (da[5] - 1); - if(sync_label_mcast == 0x07) - return 1; - else - return 0; - } - else - return 0; -} -// ret: 0, failure; 1 true -static int check_version_mcast(u8 *da) -{ - // 239.0.{Version}.4 - if((da[3] == 0) && (da[5] == 4)) - { - version_mcast = da[4]; - return 1; - } - else - return 0; -} - -static u8 getCrc(u8 *ptr, u8 len) -{ - u8 crc; - u8 i; - crc = 0; - while (len--) - { - crc ^= *ptr++; - for (i = 0; i < 8; i++) - { - if (crc & 0x01) - { - crc = (crc >> 1) ^ 0x8C; - } - else - crc >>= 1; - } - } - return crc; -} -// check whether received enough pkt to decrypt -static u8 decryp_ready(u8 range) -{ - int first = (range << 3) + 1; - u8 count = 0; - while(count < 8) - { - if(!recved_flag_mcast[first + count]) - return 0; - ++count; - } - return 1; -} -// ret: 0 suc, ret: -1 failure -static int decryp_data(u8 decryp_range) -{ - // before decryption dump - memset(decryp_data_buf, 0, sizeof(decryp_data_buf)); - - // this decrpytion API only accept 16 byte size - if (rtl_crypto_aes_cbc_decrypt(raw_data_mcast + (decryp_range << 4), 16, aes_iv, sizeof(aes_iv), decryp_data_buf) != 0 ) - { - printf("AES CBC decrypt failed\n"); - return -1; - } - memcpy(decrypted_data_mcast + (decryp_range << 4), decryp_data_buf, 16); - // dump encrypted and decrypted data -#if 0 - printf("range %d encryp data:", decryp_range); - for(int i = 0; i < 16; i++) - printf("0x%02x ", raw_data_mcast[(decryp_range << 4) + i]); - printf("\n"); - - printf("range %d decrypted to:", decryp_range); - for(int i = 0; i < 16; i++) - printf("0x%02x ", decrypted_data_mcast[(decryp_range << 4) + i]); - printf("\n"); -#endif - return 0; -} - -// for aes_cbc, need to remove the chain using xor -static void dechain_aes_mcast(u8 range) -{ - if(range != 0) - { - for(int i = 0; i < 16; i++) - decrypted_data_mcast[(range << 4) + i] ^= raw_data_mcast[(range - 1 << 4) + i]; - } - // dump data -#if 0 - printf("range %d dechained to: ", range); - for(int i = 0; i < 16; i++) - printf("0x%02x ", decrypted_data_mcast[(range << 4) + i]); - printf("\n"); -#endif - printf("mcast: block %d is dechained\n", range); - decryp_flag_mcast[range] = 2; - count_mcast += 8; - return; -} -/* -ret: 1, enough data; 0 error or not enough -239.{index}.{byte[i]}{byte[i+1]} -{index} = (CRCLSB*3bit) + (Index*5bit) -*/ -static int check_data_mcast(u8 *da) -{ - u8 raw_index = da[3]; - u8 CRC_index = (raw_index & 0x40) >> 6; - u8 idx = raw_index & 0x3f; - u8 first, second; - u8 range = 0; - int first_in_range = 0; - // check CRC - - // idx is invalid, start with 1 - if((idx > NUM_MCAST) || (idx < 1)) - return 0; - - // CRC check pass - if(((da[4] ^ da[5]) & 0x01) == CRC_index) - { - // already received - if(recved_flag_mcast[idx] == 1) - return 0; - - // new pkt - recved_flag_mcast[idx] = 1; - first = (idx -1) * 2; - second = first + 1; - - raw_data_mcast[first] = da[4]; - raw_data_mcast[second] = da[5]; - printf("mcast: new pkt, idx is %d\n", idx); - // range begins with 0, every 8 pkts belongs to 1 range,e.g idx: {1~8} -> range:0 - range = (idx - 1) >> 3; - // not enough pkt for decryption - if(!decryp_ready(range)) - return 0; - // start to decrypt - first_in_range = range << 4; - if(decryp_data(range) == -1) - { - // clear the received flag for this range - for (int i = 1; i < 9; i++) - recved_flag_mcast[first_in_range + i] = 0; - printf("decryped error in range %d\n",range); - return 0; - } - // decryption success here; - decryp_flag_mcast[range] = 1; - printf("mcast: block %d is decrypted\n", range); - - // this is the sum and pass_len - //if((idx == 1) && (!sum_mcast)) - if(range == 0) - { - dechain_aes_mcast(range); - - sum_mcast = decrypted_data_mcast[0]; - pass_len = decrypted_data_mcast[1]; - printf("mcast: sum_mcast 0x%02x pass_len %d \n",sum_mcast, pass_len); - - // check whether the pass_len is valid - if(pass_len < 0 || pass_len > 64) - { - printf("mcast: pass_len is wrong, clear\n"); - decryp_flag_mcast[range] = 0; - count_mcast -= 8; - for (int i = 1; i < 9; i++) - recved_flag_mcast[first_in_range + i] = 0; - return 0; - } - - // printf("[DEBUG]_mcast: the 2nd flag is %d\n", decryp_flag_mcast[range + 1]); - // check whether 2nd block is ready - if(decryp_flag_mcast[range + 1] == 1) - { - printf("here\n"); - dechain_aes_mcast(range + 1); - } - - if((pass_len & 0x01) == 0) - odd_check = 2; // even - else - odd_check = 1; // odd - // get the idx of pkt which contains the ssid_len info - ssid_offset = 1 + (u8)((8 + pass_len)/2); - ssid_range_mcast = (ssid_offset - 1) >> 3; - printf("ssid_offset %d ssid_range_mcast %d\n",ssid_offset, ssid_range_mcast); -#if 1 - // already dechained - if(decryp_flag_mcast[ssid_range_mcast] == 2) - { - if(total_len_mcast == 0) - { - if(ssid_len == 0) - { - if(odd_check == 2) - ssid_len = decrypted_data_mcast[2 * (ssid_offset - 1)]; - if(odd_check == 1) - ssid_len = decrypted_data_mcast[2 * (ssid_offset - 1) + 1]; - printf("ssid_len is %d\n",ssid_len); - } - total_len_mcast = (u8)((pass_len + ssid_len + HEAD_LEN + 1)/2); - printf("total_len_mcast is recalculated as %d\n",total_len_mcast); - } - } -#endif - } - // need to dechain for the 2nd and following block - else - { - if(decryp_flag_mcast[range - 1] > 0) - dechain_aes_mcast(range); - - if(decryp_flag_mcast[range + 1] == 1) - dechain_aes_mcast(range + 1); - - if(!decryp_flag_mcast[range - 1] && !decryp_flag_mcast[range + 1]) - return 0; - } - // 8 new pkts has been de chained for AES - - // set the ssid_len - if(ssid_range_mcast != 255 && decryp_flag_mcast[ssid_range_mcast] == 2) - { - if(ssid_len == 0) - { - if(odd_check == 2) - ssid_len = decrypted_data_mcast[2 * (ssid_offset - 1)]; - if(odd_check == 1) - ssid_len = decrypted_data_mcast[2 * (ssid_offset - 1) + 1]; - printf("ssid_len is %d\n",ssid_len); - } - } - - // set the total_len - if((pass_len != -1) && (ssid_len != 0)) - { - if(total_len_mcast == 0) - { - total_len_mcast = (u8)((pass_len + ssid_len + HEAD_LEN + 1)/2); - printf("total_len_mcast is calculated as %d\n",total_len_mcast); - } - } - - printf("total_len needed is %d already decrypted %d\n", total_len_mcast, count_mcast); - - if(!total_len_mcast) - { - if(count_mcast >= NUM_MCAST) - return 1; - else - return 0; - } - else - { - //printf("count_mcast is %d total_len_mcast is %d\n"); - if(count_mcast >= total_len_mcast) - { - // check CRC - u8 crc_ret = 0; - printf("enough decrypted pkt, start to check sum\n"); - if((pass_len + ssid_len) & 0x01) - crc_ret = getCrc(decrypted_data_mcast + 1, total_len_mcast * 2 - 1); - else - crc_ret = getCrc(decrypted_data_mcast + 1, total_len_mcast * 2 - 2); - - if(crc_ret == sum_mcast) - {printf("sum check pass\n"); return 1;} - else - { - printf("sum crc check failure, restart\n"); - joinlink_restart(); // fine tune: only restart the mcast part - return 0; - } - } - else - return 0; - } - } - // check CRC failure - else - { - //printf("CRC failure in mcast, getCrc is 0x%02x, CRC is 0x%02x\n",(da[4] ^ da[5]), CRC_index); - return 0; - } - -} -/* -ret: 0, failure; 1 true. -*/ -static int check_sync_bcast(int len) -{ - // make sure the bits larger than 9 is 0 - if(len >= 256) - return 0; - // only the least 9 bits are useful - len &= 0x01ff; - if((len >=1) && (len <=4)) - { - sync_label_bcast |= 0x01 << (len - 1); - if(sync_label_bcast == 0x0f) - return 1; - else - return 0; - } - else - return 0; -} - -/* -{0b10000*5bit}+{CRCLSB*4bit} -{0*1bit}{Version} - ret: 0, failure; 1 true - */ -static int check_version_bcast(int len, u8 i_fc) -{ - version_bcast = 0; - - if(!version_bcast_ready) - { - u8 version_pre_CRC = len & 0x0007; - u8 version_pre_data = (len & 0x01f8) >> 3; - - if(len >= 512) - return 0; - - if(version_pre_data == 0x20) - { - version_bcast_ready = 1; - version_CRC = version_pre_CRC; - // fix the direction(fromDS/toDS) to receive version info - fc_version_bcast = i_fc; - -// printf("get the CRC of version, change to wait version state\n"); - } - - return 0; - } - else - { - if(i_fc != fc_version_bcast) - return 0; - - if((len & 0xff00) != 0) - return 0; - - version_bcast = len & 0x00ff; - if((getCrc(&version_bcast,1) & 0x07) == version_CRC) - { - printf("version CRC pass\n"); - return 1; - } - else - { - //printf("version CRC failure,reset this state, version is 0x%02x calculated CRC is 0x%02x, CRC is 0x%02x\n", - // version_bcast, getCrc(&version_bcast,1), version_CRC); - version_bcast_ready = 0; - } - - } - return 0; -} - -/*ret 1: valid seq, ret 0: invalid seq*/ -static u8 check_and_update_seq(unsigned short frame_seq) -{ - int seq_delta = frame_seq - seq_now_bcast; - -#if SEQ_INCREMENT_ONE_BCAST - if((seq_delta == 1) || (seq_now_bcast == 4095) && (frame_seq == 0)) - { - seq_now_bcast = frame_seq; - return 1; - } - else - { - seq_now_bcast = frame_seq; - return 0; - } -#else - if(((seq_delta <= 10) && (seq_delta >= 0)) || - ((seq_now_bcast > 4085) && (seq_delta + 4096 <= 10) && (seq_delta + 4096 >= 0))) - { - seq_now_bcast = frame_seq; - //printf("valid seq, seq_delta %d seq_now is updated to %d\n", seq_delta, seq_now_bcast); - return 1; - } - else - { - seq_now_bcast = frame_seq; - //printf("invalid seq, seq_delta %d seq_now is updated to %d\n", seq_delta, seq_now_bcast); - return 0; - } -#endif -} -// idx starts with 1, every 4 is one decryption block -static int decryp_ready_bcast(u8 first_idx) -{ - for(int i = 0; i < 4; i++) - { - if(decoded_flag_bcast[first_idx + i] == 0) - return 0; - } - return 1; -} -// decryption for bcast -static int decryp_data_bcast(u8 idx) -{ - memset(decryp_data_buf, 0, sizeof(decryp_data_buf)); -// dump the encryption info -#if 0 - printf("before decryption of idx %d:", idx); - for(int i = 0; i < 16; i++) - printf("0x%02x ", raw_data_bcast[((idx >> 2) << 4) + i]); - printf("\n"); -#endif - - // this decrpytion API only accept 16 byte size - if (rtl_crypto_aes_cbc_decrypt(raw_data_bcast + ((idx >> 2) << 4), 16, aes_iv, sizeof(aes_iv), decryp_data_buf) != 0 ) - { - printf("AES CBC decrypt failed\n"); - return -1; - } - memcpy(decrypted_data_bcast + ((idx >> 2) << 4), decryp_data_buf, 16); - printf("bcast: blcok %d is decrypted\n", idx >> 2); -// dump the info after decryption -#if 0 - printf("after decryption of idx %d:", idx); - for(int i = 0; i < 16; i++) - printf("0x%02x ", decrypted_data_bcast[((idx >> 2) << 4) + i]); - printf("\n"); -#endif - - return 0; -} -// remove chain for aes cbc for bcast mode -static void dechain_aes_bcast(u8 idx) -{ - u8 first_idx = (idx >> 2) << 4; - if(idx != 1) - { - for(int i = 0; i < 16; i++) - decrypted_data_bcast[first_idx + i] ^= raw_data_bcast[first_idx - 16 + i]; - } - count_decoded_bcast += 4; - // set the dechained flag - for(int i = 0; i < 4; i++) - decoded_flag_bcast[idx + i] = 3; - // dump the info after dechain -#if 0 - printf("idx %d is de chained to: ", idx); - for(int i = 0; i < 16; i++) - printf("0x%02x ", decrypted_data_bcast[first_idx + i]); - printf("\n"); -#endif - printf("bcast: block %d is dechained\n", idx >> 2); - return; -} - -/* -{EncodeIndex*5bit}+{CRCLSB*4bit} -{0*1bit}{Byte(i+0) *8bit} -{0*1bit}{Byte(i+1) *8bit} -{0*1bit}{Byte(i+2) *8bit} -{0*1bit}{Byte(i+3) *8bit} -*/ -static int check_data_bcast(int len, u8 i_fc, unsigned short frame_seq, unsigned const char *temp_bssid) -{ - // waiting index pkt - if(!data_phase_state_bcast) - { - - // make sure the 9th bit is 1 and bit larger than 9 is 0 - if(((len & 0x0fff) >= 512) || ((len & 0x0fff) <= 256)) - return 0; - // idx_data is increase from 1, not 0 - idx_data = (len & 0x00f8) >> 3; - if(idx_data == 0) - return 0; - - if(idx_data > NUM_BCAST) - { - printf("index is too large\n"); - return 0; - } - - // already decoded this idx - if(decoded_flag_bcast[idx_data] >= 1) - return 0; - else - { - current_idx_bcast = idx_data; - count_in_idx_bcast = 0; - data_phase_state_bcast = 1; - idx_CRC = len & 0x0007; - seq_now_bcast = frame_seq; - //printf("idx_CRC is 0x%02x len is 0x%02x\n",idx_CRC, len); - fc_data_bcast = i_fc; - //printf("waiting data pkt of idx %d, locked in i_fc %d, seq_now %d\n", - // current_idx_bcast,fc_data_bcast,seq_now_bcast); - return 0; - } - - } - // waiting info pkt - else - { - u8 array_idx = 0; - // check whether the data is valid, the 9th bit should be 0 - if(len >= 256) - { - //printf("not info pkt\n"); - return 0; - } - - // only receive the data from the previous idx direction - if(i_fc != fc_data_bcast) - return 0; - - array_idx = 4 * (current_idx_bcast - 1); - - //printf("from bssid 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n", - // temp_bssid[0],temp_bssid[1],temp_bssid[2],temp_bssid[3],temp_bssid[4],temp_bssid[5]); - // check whether seq is valid - if(check_and_update_seq(frame_seq) == 0) - { - //memset(raw_data_bcast + array_idx, 0, 4); - data_phase_state_bcast = 0; - return 0; - } - - raw_data_bcast[array_idx + count_in_idx_bcast] = len & 0x00ff; - count_in_idx_bcast++; - - //printf("len 0x%02x, info 0x%02x, i_fc %d i_seq %d\n",len, len & 0x00ff, i_fc, frame_seq); - if(count_in_idx_bcast != NUM_PKT) - return 0; - else - { - u8 temp_ret = 0; - u8 first_idx = 0; - -#if 0 - printf("enough data pkt for idx, check CRC\n",current_idx_bcast); - printf("data to be decoded in idx %d: 0x%02x 0x%02x 0x%02x 0x%02x\n",current_idx_bcast, - *(raw_data_bcast + array_idx),*(raw_data_bcast + array_idx + 1), - *(raw_data_bcast + array_idx + 2),*(raw_data_bcast + array_idx + 3)); -#endif - - // assume first encryption and then CRC, so CRC check first and then decryption for receiver. - temp_ret = getCrc(raw_data_bcast + array_idx, 4) & 0x07; - //printf("calculated CRC is 0x%02x true CRC is 0x%02x\n",temp_ret, idx_CRC); - // CRC pass - if(temp_ret == idx_CRC) - { - printf("bcast: idx %d is decoded\n",current_idx_bcast); - // the first idx in every decryption block - first_idx = 1 + ((current_idx_bcast - 1 >> 2) << 2); - // set the flag of this idx to 1, indicate pass CRC but not yet to decrypt - decoded_flag_bcast[current_idx_bcast] = 1; - // not enough neighbor idx for decryption - if(decryp_ready_bcast(first_idx) == 0) - return 0; - - if(decryp_data_bcast(first_idx) == -1) - { - for(int i = 0; i < 4; i++) - decoded_flag_bcast[first_idx + i] = 0; - // clear the 4 idx data in this block; - memset(raw_data_bcast + ((current_idx_bcast - 1 >> 2) << 4), 0, 16); - data_phase_state_bcast = 0; - return 0; - } - // decryption PASS - // set the decryption flag - for(int i = 0; i < 4; i++) - decoded_flag_bcast[first_idx + i] = 2; - - // if 1st block, get the pass_len - if(current_idx_bcast <= 4) - { - dechain_aes_bcast(first_idx); - sum_bcast = *decrypted_data_bcast; - pass_len_bcast = *(decrypted_data_bcast + 1); - // make sure the pass len is in the right range {0,63} - if((pass_len_bcast > 63) || (pass_len_bcast < 0)) - { - printf("pass_len is wrong, clear\n"); - for(int i = 0; i < 4; i++) - decoded_flag_bcast[first_idx + i] = 0; - count_decoded_bcast -= 4; - // clear the 4 idx data in this block; - memset(raw_data_bcast + ((current_idx_bcast - 1 >> 2) << 4), 0, 16); - data_phase_state_bcast = 0; - return 0; - } - printf("sum_bcast is %d pass_len_bcast is %d\n",sum_bcast, pass_len_bcast); - // recalculate ssid_len if the idx containning ssid_len is already decoded - - // to de chain the neighbor block - if(decryp_ready_bcast(first_idx + 4)) - dechain_aes_bcast(first_idx + 4); - - ssid_offset_bcast = (8 + pass_len_bcast)/4 + 1; - if(decoded_flag_bcast[ssid_offset_bcast] == 3) - { - ssid_len_bcast = *(decrypted_data_bcast + 8 + pass_len_bcast); - // check whether ssid len is in the right range {0,32} - if(ssid_len_bcast > 32) - { - //memset(raw_data_bcast + 4 * (2 + pass_len_bcast/4), 0, 4); - data_phase_state_bcast = 0; - for(int i = 0; i < 4; i++) - decoded_flag_bcast[(ssid_len_bcast - 1 >> 2) + i] = 0; - count_decoded_bcast -= 4; - printf("ssid_len_bcast is wrong, clear idx %d\n", ((8 + pass_len_bcast)/4 + 1)); - return 0; - } - printf("recalculated ssid_len_bcast is %d\n",ssid_len_bcast); - } - } - // for the 2nd and following block, need the preceeding block to de chain - else - { - if(decryp_ready_bcast(first_idx - 4)) - dechain_aes_bcast(first_idx); - - if(decryp_ready_bcast(first_idx + 4)) - dechain_aes_bcast(first_idx + 4); - - if(!decryp_ready_bcast(first_idx - 4) && !decryp_ready_bcast(first_idx + 4)) - return 0; - } - // check whether ssid_len idx has been dechained - for(int i = 0; i < 4; i++) - { - if((pass_len_bcast != -1) && (decoded_flag_bcast[ssid_offset_bcast] == 3)) - { - ssid_len_bcast = *(decrypted_data_bcast + 8 + pass_len_bcast); - // make sure ssid_len is valid in the range {0, 32} - if(ssid_len_bcast > 32) - { - //memset(raw_data_bcast + 4 * (2 + pass_len_bcast/4), 0, 4); - data_phase_state_bcast = 0; - for(int i = 0; i < 4; i++) - decoded_flag_bcast[(ssid_offset_bcast >> 2) << 2 + i + 1] = 0; - count_decoded_bcast -= 4; - printf("ssid_len_bcast is wrong\n"); - return 0; - } - printf("ssid_len_bcast is %d\n",ssid_len_bcast); - break; - } - } - // check whether enough - if((ssid_len_bcast != 0) && (pass_len_bcast != -1)) - { - u8 total_len_bcast = HEAD_LEN + ssid_len_bcast + pass_len_bcast; - printf("needed %d pkt, decoded %d\n",(u8)((total_len_bcast + 3)/4),count_decoded_bcast); - if(count_decoded_bcast >= (u8)((total_len_bcast + 3)/4)) - { - printf("enough decoded packets, start to check sum\n"); - if(getCrc(decrypted_data_bcast + 1,total_len_bcast - 1) == sum_bcast) - { - printf("sum check pass in bcast\n"); - return 1; - } - else - { - //printf("bcast sum check failure, restart\n"); - joinlink_restart(); // fine tune: only restart the bcast part - return 0; - } - } - } - - data_phase_state_bcast = 0; - } - else - { - memset(raw_data_bcast + 4 * (current_idx_bcast - 1), 0, 4); - data_phase_state_bcast = 0; - printf("CRC failure of idx %d\n",current_idx_bcast); - return 0; - } - } - - } - - return 0; -} -/* -ret: 0, failure, 1 true -if success, assign the AP profile to a structure. -*/ -static int decode_AP_profile(u8 *raw_data) -{ - int pos = 0; - - AP_profile->sum = raw_data[pos]; - pos++; - printf("AP_profile: sum %d\n",AP_profile->sum); - - AP_profile->pwd_length = raw_data[pos]; - pos++; - printf("AP_profile: pwd_len %d\n",AP_profile->pwd_length); - - if(AP_profile->pwd_length > 64) - { - printf("the pwd len: %d, larger than 64\n",AP_profile->pwd_length); - return 0; - } - - memcpy(AP_profile->pwd, (raw_data + pos), AP_profile->pwd_length); - pos += AP_profile->pwd_length; - printf("AP_profile: pwd %s\n",AP_profile->pwd); - - AP_profile->source_ip[0] = *(raw_data + pos); - AP_profile->source_ip[1] = *(raw_data + pos + 1); - AP_profile->source_ip[2] = *(raw_data + pos + 2); - AP_profile->source_ip[3] = *(raw_data + pos + 3); - - pos += 4; - printf("AP_profile: sip %d %d %d %d\n",AP_profile->source_ip[0], - AP_profile->source_ip[1], - AP_profile->source_ip[2], - AP_profile->source_ip[3]); - // assume the high byte is the most significant - #if 1 - AP_profile->source_port = ((unsigned int)(*(raw_data + pos + 1)) << 8) | (*(raw_data + pos)); - //printf("port high_part, low_part: %d %d\n", *(raw_data + pos + 1), *(raw_data + pos)); - #endif - - pos += 2; - printf("AP_profile: port %d\n",AP_profile->source_port); - - AP_profile->ssid_length = *(raw_data + pos); - pos++; - printf("AP_profile: ssid_len %d\n",AP_profile->ssid_length); - - if(AP_profile->ssid_length > 64) - { - printf("the ssid len: %d, larger than 64\n",AP_profile->ssid_length); - return 0; - } - memcpy(AP_profile->ssid, (raw_data + pos), AP_profile->ssid_length); - printf("AP_profile: ssid %s\n",AP_profile->ssid); - - return 1; -} - -joinlink_status_t joinlink_recv(u8 *da, u8 *sa, int len, void *user_data) -{ - joinlink_status_t ret; - const ieee80211_frame_info_t *promisc_info = user_data; - // 1 from ds, 2 to ds - u8 i_fc = ((promisc_info->i_fc & 0x0100) == 0x0100)? 2: 1; - unsigned short frame_seq = promisc_info->i_seq; - unsigned const char *temp_bssid = promisc_info->bssid; - - // for mcast - if(!((da[0] == 0xff) && (da[1] == 0xff) && (da[2] == 0xff) && - (da[3] == 0xff) && (da[4] == 0xff) && (da[5] == 0xff))) - { - if(joinlink_state_mcast == 0) - { - if(!check_sync_mcast(da)) - return JOINLINK_STATUS_CONTINUE; - else - { - // TODO: consider to fix source mac here - joinlink_state_mcast = 1; - memcpy(smac, sa, 6); - printf("turn to wait version state\n"); - return JOINLINK_STATUS_CONTINUE; - } - - } - else if(joinlink_state_mcast == 1) - { - // only accept the pkt from fixed source mac - if(memcmp(smac, sa, 6)) - return JOINLINK_STATUS_CONTINUE; - - if(!check_version_mcast(da)) - return JOINLINK_STATUS_CONTINUE; - else - { - joinlink_state_mcast = 2; - printf("mcast version is %d\n",version_mcast); - printf("turn to wait data state\n"); - return JOINLINK_STATUS_CHANNEL_LOCKED; - } - } - else if(joinlink_state_mcast == 2) - { - if(memcmp(smac, sa, 6)) - return JOINLINK_STATUS_CONTINUE; - - if(!check_data_mcast(da)) - return JOINLINK_STATUS_CONTINUE; - else - { - printf("enough packets, start to decode AP profile\n"); - // AP profile has been gotten - if(!decode_AP_profile(decrypted_data_mcast)) - { - printf("decode failure, restart joinlink\n"); - joinlink_restart(); - //TODO: intialize the data structure to restart receive data - return JOINLINK_STATUS_CONTINUE; - } - else - { - decoded_state = 1; - return JOINLINK_STATUS_COMPLETE; - } - } - } - } - // for bcast - else - { - len -= 42; // remove the unnecessary part - - if(joinlink_state_bcast == 0) - { - if(!check_sync_bcast(len)) - return JOINLINK_STATUS_CONTINUE; - else - { - // fix the smac and bssid - memcpy(smac, sa, 6); - memcpy(locked_bssid_bcast, temp_bssid, 6); - joinlink_state_bcast = 1; - printf("change to bcast_state_1, lock channel\n"); - return /*JOINLINK_STATUS_CONTINUE*/JOINLINK_STATUS_CHANNEL_LOCKED; - } - - } - else if(joinlink_state_bcast == 1) - { - if(memcmp(smac, sa, 6) || memcmp(temp_bssid, locked_bssid_bcast, 6)) - return JOINLINK_STATUS_CONTINUE; - - if(!check_version_bcast(len, i_fc)) - return JOINLINK_STATUS_CONTINUE; - else - { - joinlink_state_bcast = 2; - printf("change to bcast_state_2\n"); - return /*JOINLINK_STATUS_CHANNEL_LOCKED*/JOINLINK_STATUS_CONTINUE; - } - } - else if(joinlink_state_bcast == 2) - { - if(memcmp(smac, sa, 6) || memcmp(temp_bssid, locked_bssid_bcast, 6)) - return JOINLINK_STATUS_CONTINUE; - - if(!check_data_bcast(len, i_fc, frame_seq, temp_bssid)) - return JOINLINK_STATUS_CONTINUE; - else - { - // AP profile has been gotten - if(!decode_AP_profile(decrypted_data_bcast)) - { - printf("decode failure, restart joinlink\n"); - //TODO: intialize the data structure to restart receive data - return JOINLINK_STATUS_CONTINUE; - } - else - { - decoded_state = 1; - return JOINLINK_STATUS_COMPLETE; - } - } - } - } - ret = JOINLINK_STATUS_CONTINUE; - return ret; -} - -/* - * copy the decode AP info to user space -* store the AP profile to result; -* ret: 0, success -* ret: -1, failure - */ -int joinlink_get_result(joinlink_result_t *result) -{ - if(decoded_state == 0) - return -1; - else - { - memcpy(result, AP_profile, sizeof(joinlink_result_t)); - return 0; - } -} - - - -/*********************************************************/ diff --git a/Firmware/RTLGDB/USDK/component/common/application/jd_joinlink/joinlink.h b/Firmware/RTLGDB/USDK/component/common/application/jd_joinlink/joinlink.h deleted file mode 100644 index 647606f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/jd_joinlink/joinlink.h +++ /dev/null @@ -1,64 +0,0 @@ -/******************************* joinlink **************************/ -#ifndef __JOINLINK_H -#define __JOINLINK_H - -#include "autoconf.h" -#include "platform_stdlib.h" -#include "wifi_conf.h" -#include "wifi_structures.h" -#include "osdep_service.h" -#include "lwip_netconf.h" -#include "task.h" -#include "hal_crypto.h" - -#define SSID_SWITCH_TIME 500 //ssid switch time in phase1,units:ms, 50 -#define CHANNEL_SWITCH_TIME 500 //channel switch time in phase2,units:ms, 50 -#define JOINLINK_TIME 120 //timeout for joinlink process, units: s - -/* - * store AP profile after successfully decode - * SUM +lengthpass+IP+Port+lengthSSID) - */ -typedef struct -{ - unsigned char sum; - unsigned char pwd_length; - char pwd[65]; - int source_ip[4]; - unsigned int source_port; - unsigned char ssid_length; - char ssid[65]; -} joinlink_result_t; - -/* - * return value of joinlink_recv() - */ -typedef enum -{ - JOINLINK_STATUS_CONTINUE = 0, - JOINLINK_STATUS_CHANNEL_LOCKED = 1, - JOINLINK_STATUS_COMPLETE = 2 -} joinlink_status_t; - -//initialize the related data structure -int joinlink_init(); -/* - handler to decode pkt - */ -joinlink_status_t joinlink_recv(unsigned char *da, unsigned char *sa, int len, void *user_data); - -/* - * get the AP profile after decode - */ -int joinlink_get_result(joinlink_result_t *result); - -/* - * set the aes_key, the max len should be 16 - * ret 1: success; ret 0: the len is invalid; - */ -int set_aes_key(char *key, int len); - -// call this after finish join_link process -void joinlink_deinit(); - -#endif //__JOINLINK_H diff --git a/Firmware/RTLGDB/USDK/component/common/application/uart_adapter/uart_adapter.c b/Firmware/RTLGDB/USDK/component/common/application/uart_adapter/uart_adapter.c deleted file mode 100644 index db44023..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/uart_adapter/uart_adapter.c +++ /dev/null @@ -1,2251 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include "main.h" -#include -#include -#include -#include "serial_api.h" -#include "serial_ex_api.h" -#include "uart_adapter.h" -#include "wifi_conf.h" -#include "gpio_api.h" // mbed -#include "gpio_irq_api.h" // mbed -#include "osdep_service.h" -#include "flash_api.h" -#include "device_lock.h" -//#include -#include -#include - -#if CONFIG_UART_SOCKET - -/*********************************************************************** - * Macros * - ***********************************************************************/ - -/*********************************************************************** - * Variables Declarations * - ***********************************************************************/ -char ua_tcp_server_ip[16]; - -_Sema ua_exception_sema; -_Sema ua_print_sema; - -int ua_gpio_irq_happen = 0; -int ua_debug_print_en = 0; -int ua_wifi_connected = 0; -int ua_reconnect_started = 0; -int ua_reconnect_ip_change = 0; - -ua_socket_t *ua_global_socket = NULL; -gpio_irq_t gpio_rx_wake; - -/************************************************************************ - * extern variables * - ************************************************************************/ -extern struct netif xnetif[NET_IF_NUM]; - -extern unsigned char psk_essid[NET_IF_NUM][NDIS_802_11_LENGTH_SSID+4]; -extern unsigned char psk_passphrase[NET_IF_NUM][IW_PASSPHRASE_MAX_SIZE + 1]; -extern unsigned char wpa_global_PSK[NET_IF_NUM][A_SHA_DIGEST_LEN * 2]; - -extern wlan_init_done_ptr p_wlan_uart_adapter_callback; -/************************************************************************ - * extern funtions * - ************************************************************************/ -#if CONFIG_INCLUDE_SIMPLE_CONFIG -extern enum sc_result simple_config_test(rtw_network_info_t *); -extern int init_test_data(char *custom_pin_code); -extern void deinit_test_data(void); -extern void filter_add_enable(); -extern void remove_filter(); -extern void wifi_enter_promisc_mode(); -#endif - -/************************************************************************* -* uart releated * -*************************************************************************/ -#define ____________UART__RELATED____________________ -static void uartadapter_uart_irq(uint32_t id, SerialIrq event) -{ - ua_socket_t *ua_socket = (ua_socket_t *)id; - - if(event == RxIrq) { - ua_socket->uart.recv_buf[ua_socket->uart.pwrite++] = serial_getc(&ua_socket->uart.uart_sobj); - RtlUpSemaFromISR(&ua_socket->uart.action_sema); //up action semaphore - - if(ua_socket->uart.pwrite > (UA_UART_RECV_BUFFER_LEN -1)){ //restart from head if reach tail - ua_socket->uart.pwrite = 0; - ua_socket->uart.overlap = 1; - } - - if(ua_socket->uart.overlap && (ua_socket->uart.pwrite > ua_socket->uart.pread) ){ - ua_socket->uart.miss_cnt ++; - ua_socket->uart.pread = ua_socket->uart.pwrite; //if pwrite overhead pread ,pread is always flow rwrite - } - ua_socket->uart.tick_last_update = xTaskGetTickCountFromISR(); // update tick everytime recved data - ua_socket->uart.rx_cnt ++; - } -} - -static int uartadapter_uart_recv_data(ua_socket_t *ua_socket) -{ - int uart_recv_len = 0; - - UA_SOCKET_CHECK_2(ua_socket); - - ua_socket->uart.tick_current = xTaskGetTickCount(); - while((ua_socket->uart.tick_current -ua_socket->uart.tick_last_update) < (UA_UART_MAX_DELAY_TIME/portTICK_RATE_MS) - || ua_socket->uart.tick_current <= ua_socket->uart.tick_last_update){ - if(!ua_socket->uart.overlap){ - uart_recv_len = ua_socket->uart.pwrite - ua_socket->uart.pread; - }else{ - uart_recv_len = (UA_UART_RECV_BUFFER_LEN - ua_socket->uart.pread) + ua_socket->uart.pwrite; - } - - if(uart_recv_len >= UA_UART_FRAME_LEN){ - return 2; - } - //vTaskDelay(10); - ua_socket->uart.tick_current = xTaskGetTickCount(); - } - - return 1; -} - -int uartadapter_uart_read(ua_socket_t *ua_socket, void *read_buf, size_t size) -{ - int ret = 0; - int read_bytes; - int pread_local,pwrite_local; - char *ptr; - - ua_printf(UA_DEBUG, "==>uart adapter read uart"); - - UA_SOCKET_CHECK_2(ua_socket); - - if(!size || !read_buf){ - ua_printf(UA_ERROR, "inpua error,size should not be null"); - ret = -1; - return ret; - } - - pread_local = ua_socket->uart.pread; - pwrite_local = ua_socket->uart.pwrite; - ptr = (char *)read_buf; - - /*calculate how much data not read */ - if(!ua_socket->uart.overlap){ - ua_socket->uart.recv_bytes = pwrite_local - pread_local; - }else{ - ua_socket->uart.recv_bytes = (UA_UART_RECV_BUFFER_LEN - pread_local) + pwrite_local; - } - - /*decide how much data shoule copy to application*/ - if(size >= ua_socket->uart.recv_bytes ){ - read_bytes = ua_socket->uart.recv_bytes; - ret = ua_socket->uart.recv_bytes; - }else{ - read_bytes = size; - ret = size; - } - - if(!ua_socket->uart.overlap){ - memcpy(ptr, (ua_socket->uart.recv_buf+ pread_local), read_bytes ); - }else { - ua_printf(UA_DEBUG, "uart recv buf is write overlap!"); - if((pread_local + read_bytes) > UA_UART_RECV_BUFFER_LEN){ - memcpy(ptr,(ua_socket->uart.recv_buf+ pread_local),(UA_UART_RECV_BUFFER_LEN-pread_local)); - memcpy(ptr+(UA_UART_RECV_BUFFER_LEN-pread_local), ua_socket->uart.recv_buf,read_bytes-(UA_UART_RECV_BUFFER_LEN- pread_local)); - }else{ - memcpy(ptr,(ua_socket->uart.recv_buf+ pread_local),read_bytes); - } - } - - ua_socket->uart.recv_bytes = 0; - if((pread_local + read_bytes) >= UA_UART_RECV_BUFFER_LEN){ //update pread - ua_socket->uart.pread = (pread_local + read_bytes) - UA_UART_RECV_BUFFER_LEN; - ua_socket->uart.overlap = 0; //clean overlap flags - }else{ - ua_socket->uart.pread = pread_local + read_bytes; - } - - return ret; -} - -int uartadapter_uart_write(ua_socket_t *ua_socket, char *pbuf, size_t size) -{ - int ret = -1; - - UA_SOCKET_CHECK_2(ua_socket); - - if(!size || !pbuf) { - ret = -1; - return ret; - } - - while(RtlDownSema(&ua_socket->uart.dma_tx) == pdTRUE){ - ret = serial_send_stream_dma(&ua_socket->uart.uart_sobj, pbuf, size); - if(ret != HAL_OK){ - ua_printf(UA_ERROR, "uart dma tx error %d!", ret); - RtlUpSema(&ua_socket->uart.dma_tx); - return -1; - }else{ - return 0; - } - } - - return ret; -} - -void uartadapter_uart_send_stream_done(uint32_t id) -{ - ua_socket_t *ua_socket = (ua_socket_t *)id; - - RtlUpSemaFromISR(&ua_socket->uart.dma_tx); -} - -static void uartadapter_uart_rx_thread(void* param) -{ - ua_socket_t *ua_socket = (ua_socket_t *)param; - char *rxbuf = NULL; - int ret =0; - int read_len = 0; - - UA_SOCKET_CHECK(ua_socket); - - rxbuf = pvPortMalloc(UA_UART_FRAME_LEN); - if(NULL == rxbuf){ - ua_printf(UA_ERROR, "TCP: Allocate rx buffer failed.\n"); - return; - } - - - while(1){ - if(RtlDownSemaWithTimeout(&ua_socket->uart.action_sema, 1000) == pdTRUE){ - ret = uartadapter_uart_recv_data(ua_socket); - if(ret == -1){ - ua_printf(UA_ERROR, "uart recv data error!"); - }else{ - read_len = uartadapter_uart_read(ua_socket, rxbuf, UA_UART_FRAME_LEN); - if(read_len > 0){ - uartadapter_tcp_send_data(ua_socket, rxbuf, read_len); - }else if(read_len < 0){ - ua_printf(UA_ERROR, "tcp send read_len = %d", read_len); - } - } - } -#if UA_PS_ENABLE - else{ - ua_socket->uart.uart_ps_cnt++; - if(ua_socket->uart.uart_ps_cnt >5){ - ua_socket->uart.uart_ps_cnt = 5; - ua_socket->uart.uart_ps = 1; - if(ua_socket->uart.uart_ps && ua_socket->tcp.tcp_ps){ - release_wakelock(UA_WAKELOCK); - } - } - } -#endif - } - -} - -void uartadapter_uart_gpio_wakeup_callback (uint32_t id, gpio_irq_event event) { - acquire_wakelock(UA_WAKELOCK); - ua_socket_t *ua_socket = (ua_socket_t *)id; - ua_socket->uart.uart_ps = 0; - ua_socket->uart.uart_ps_cnt = 0; -} - -int uartadapter_uart_open(ua_socket_t *ua_socket, ua_uart_set_str *puartpara) -{ - PinName uart_tx,uart_rx; - - UA_SOCKET_CHECK_2(ua_socket); - - uart_tx = UA_UART_TX_PIN; - uart_rx = UA_UART_RX_PIN; - ua_socket->uart.uart_param.BaudRate = puartpara->BaudRate; - ua_socket->uart.uart_param.FlowControl = puartpara->FlowControl; - ua_socket->uart.uart_param.WordLen = puartpara->number; - ua_socket->uart.uart_param.Parity = puartpara->parity; - ua_socket->uart.uart_param.StopBit = puartpara->StopBits; - - /*initial uart */ - serial_init(&ua_socket->uart.uart_sobj, uart_tx, uart_rx); - serial_baud(&ua_socket->uart.uart_sobj,puartpara->BaudRate); - serial_format(&ua_socket->uart.uart_sobj, puartpara->number, (SerialParity)puartpara->parity, puartpara->StopBits); -// serial_format(&at_cmd_sobj, uartconf.DataBits, (SerialParity)uartconf.Parity, uartconf.StopBits); - serial_rx_fifo_level(&ua_socket->uart.uart_sobj, FifoLvHalf); - - //---------------------------- add Flow - #define rxflow UA_UART_RTS_PIN - #define txflow UA_UART_CTS_PIN - if(puartpara->FlowControl){ - pin_mode(txflow, PullDown); // init CTS in low - serial_set_flow_control(&ua_socket->uart.uart_sobj, FlowControlRTSCTS, rxflow, txflow); - } - else - serial_set_flow_control(&ua_socket->uart.uart_sobj, FlowControlNone, rxflow, txflow); - //---------------------------- add Flow - - /*uart irq handle*/ - serial_irq_handler(&ua_socket->uart.uart_sobj, uartadapter_uart_irq, (uint32_t)ua_socket); - serial_irq_set(&ua_socket->uart.uart_sobj, RxIrq, 1); - serial_irq_set(&ua_socket->uart.uart_sobj, TxIrq, 1); - - serial_send_comp_handler(&ua_socket->uart.uart_sobj, (void*)uartadapter_uart_send_stream_done, (uint32_t)ua_socket); - -#if UA_PS_ENABLE - //config uart rx as gpio wakeup pin - gpio_irq_t gpio_rx_wake; - gpio_irq_init(&gpio_rx_wake, UA_GPIO_WAKEUP_PIN, uartadapter_uart_gpio_wakeup_callback, (uint32_t)ua_socket); - gpio_irq_set(&gpio_rx_wake, IRQ_FALL, 1); // Falling Edge Trigger - gpio_irq_enable(&gpio_rx_wake); -#endif - - return 0; -} - -int uartadapter_uart_baud(ua_socket_t *ua_socket, int baud_rate) -{ - int ret = 0; - - UA_SOCKET_CHECK_2(ua_socket); - - ua_socket->uart.uart_param.BaudRate = baud_rate; - - serial_baud(&ua_socket->uart.uart_sobj, baud_rate); - - return ret; -} - -int uartadapter_uart_para(ua_socket_t *ua_socket, int word_len, int parity, int stop_bits) -{ - int ret = 0; - - UA_SOCKET_CHECK_2(ua_socket); - - ua_socket->uart.uart_param.WordLen = word_len; - ua_socket->uart.uart_param.Parity = parity; - ua_socket->uart.uart_param.StopBit = stop_bits; - - serial_format(&ua_socket->uart.uart_sobj, word_len, (SerialParity)parity, stop_bits); - - return ret; -} - -int uartadapter_uart_getpara(ua_socket_t *ua_socket, ua_uart_get_str *uart_para) -{ - UA_SOCKET_CHECK_2(ua_socket); - - uart_para->BaudRate = ua_socket->uart.uart_param.BaudRate; - uart_para->FlowControl = ua_socket->uart.uart_param.FlowControl; - uart_para->number = ua_socket->uart.uart_param.WordLen; - uart_para->parity = ua_socket->uart.uart_param.Parity; - uart_para->StopBits = ua_socket->uart.uart_param.StopBit; - - return 0; -} - -void uartadapter_uart_init(ua_socket_t *ua_socket) -{ - ua_uart_set_str uartset; - ua_uart_get_str uartget; - char uarttest[]="uart0"; - - UA_SOCKET_CHECK(ua_socket); - - uartset.BaudRate = 9600; - uartset.number = 8; - uartset.StopBits = 1; - uartset.FlowControl = 3; - uartset.parity = 0; - strcpy(uartset.UartName,uarttest); - - uartadapter_uart_open(ua_socket, &uartset); - - if(uartadapter_uart_getpara(ua_socket, &uartget)) - ua_printf(UA_ERROR, "get uart failed!"); - else - ua_printf(UA_DEBUG,"uart pata:\r\n"\ - "uart->BaudRate = %d\r\n"\ - "uart->number = %d\r\n"\ - "uart->FlowControl = %d\r\n"\ - "uart->parity = %d\r\n"\ - "uart->StopBits = %d\r\n"\ - "\r\n",\ - uartget.BaudRate,\ - uartget.number,\ - uartget.FlowControl,\ - uartget.parity,\ - uartget.StopBits\ - ); -} - -#define _________FLASH___RELATED________________________ -int uartadapter_flashread(int flashadd, char *pbuf, int len) -{ - int ret = 0; - flash_t flash; - - if( len == 0){ - ua_printf(UA_ERROR, "input error,data length should not be null!"); - ret = -1; - return ret; - }else //as 8711am only canbe r/w in words.so make len is 4-bytes aligmented. - len += 4 - ((len%4)==0 ? 4 : (len%4)); - - while(len){ - if(flash_read_word(&flash, flashadd, (unsigned int *)pbuf) !=1 ){ - ua_printf(UA_ERROR, "read flash error!"); - ret = -1; - return ret; - } - len -= 4; - pbuf += 4; - flashadd += 4; - } - - return len; -} - -int uartadapter_flashwrite(int flashadd, char *pbuf, int len) -{ - int ret = 0; - flash_t flash; - - if( len == 0){ - ua_printf(UA_ERROR, "input error,data length should not be null!"); - ret = -1; - return ret; - } - else //as 8711am only canbe r/w in words.so make len is 4-bytes aligmented. - len += 4 - ((len%4)==0 ? 4 : (len%4)); - - while(len){ - if(flash_write_word(&flash, flashadd, *(unsigned int *)pbuf) !=1 ){ - ua_printf(UA_ERROR, "write flash error!"); - ret = -1; - return ret; - } - len -= 4; - pbuf += 4; - flashadd += 4; - } - - return ret; -} - -int uartadapter_flasherase(int flashadd, int erase_bytelen) -{ - int ret = 0; - flash_t flash; - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_erase_sector(&flash, flashadd); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - return ret; -} - -#define _________GPIO___RELATED________________________ -void uartadapter_systemreload(void) -{ - // Cortex-M3 SCB->AIRCR - HAL_WRITE32(0xE000ED00, 0x0C, (0x5FA << 16) | // VECTKEY - (HAL_READ32(0xE000ED00, 0x0C) & (7 << 8)) | // PRIGROUP - (1 << 2)); // SYSRESETREQ -} - -void uartadapter_gpio_irq (uint32_t id, gpio_irq_event event) -{ - ua_printf(UA_DEBUG, "GPIO push button!"); - - ua_gpio_irq_happen = 1; - RtlUpSemaFromISR(&ua_exception_sema); -} - -void uartadapter_gtimer_timeout_handler(uint32_t id) -{ - gpio_t *gpio_led = (gpio_t *)id; - - gpio_write(gpio_led, !gpio_read(gpio_led)); -} - -void uartadapter_gpio_init(ua_socket_t *ua_socket) -{ - gpio_init(&ua_socket->gpio.gpio_led, UA_GPIO_LED_PIN); - gpio_dir(&ua_socket->gpio.gpio_led, PIN_OUTPUT); // Direction: Output - gpio_mode(&ua_socket->gpio.gpio_led, PullNone); // No pull - - gpio_init(&ua_socket->gpio.gpio_btn, UA_GPIO_IRQ_PIN); - gpio_dir(&ua_socket->gpio.gpio_btn, PIN_INPUT); // Direction: Output - gpio_mode(&ua_socket->gpio.gpio_btn, PullNone); // No pull - - gpio_irq_init(&ua_socket->gpio.gpio_btn_irq, UA_GPIO_IRQ_PIN, uartadapter_gpio_irq, (uint32_t)(&ua_socket->gpio.gpio_btn)); - gpio_irq_set(&ua_socket->gpio.gpio_btn_irq, IRQ_FALL, 1); // Falling Edge Trigger - gpio_irq_enable(&ua_socket->gpio.gpio_btn_irq); - - // Initial a periodical timer - gtimer_init(&ua_socket->gpio.gpio_timer, TIMER0); - //gtimer_start_periodical(&ua_socket->gpio.gpio_timer, 100000, (void*)timer_timeout_handler, (uint32_t)&ua_socket->gpio.gpio_led); -} - -void uartadapter_gpio_led_mode(ua_socket_t *ua_socket, ua_led_mode_t mode) -{ - gtimer_stop(&ua_socket->gpio.gpio_timer); - switch(mode){ - case UART_ADAPTER_LED_ON: - gpio_write(&ua_socket->gpio.gpio_led, 1); - break; - case UART_ADAPTER_LED_OFF: - gpio_write(&ua_socket->gpio.gpio_led, 0); - break; - case UART_ADAPTER_LED_FAST_TWINKLE: - gtimer_start_periodical(&ua_socket->gpio.gpio_timer, 100000, - (void*)uartadapter_gtimer_timeout_handler, (uint32_t)&ua_socket->gpio.gpio_led); - break; - case UART_ADAPTER_LED_SLOW_TWINKLE: - gtimer_start_periodical(&ua_socket->gpio.gpio_timer, 2000000, - (void*)uartadapter_gtimer_timeout_handler, (uint32_t)&ua_socket->gpio.gpio_led); - break; - default: - ua_printf(UA_ERROR, "Unknown GPIO LED mode!"); - break; - } -} - -#define _________CONTROL__DATA__RELATED________________________ -int uartadapter_strncmp(char *cs, char *ct, size_t count) -{ - unsigned char c1, c2; - - while (count) { - c1 = *cs++; - c2 = *ct++; - if (c1 != c2) - return c1 < c2 ? -1 : 1; - if (!c1) - break; - count--; - } - - return 0; -} - -int uartadapter_control_write_tcp_info_into_flash(ua_socket_t *ua_socket) -{ - int ret; - UA_SOCKET_CHECK_2(ua_socket); - - ua_printf(UA_INFO, "\r\nWrite Uart Adapter tcp connection new profile to flash"); - - uartadapter_flasherase(UA_FAST_RECONNECT_TCP_DATA, 0x1000); - ret = uartadapter_flashwrite(UA_FAST_RECONNECT_TCP_DATA, (char *)&ua_socket->tcp, sizeof(ua_tcp_socket_t)); - return ret; -} - -int uartadapter_control_read_tcp_info_and_connect(ua_socket_t *ua_socket) -{ - int ret = 0; - ua_tcp_socket_t tcp = {0}; - - UA_SOCKET_CHECK_2(ua_socket); - - ua_printf(UA_INFO, "\r\nRead Uart Adapter tcp connection profile from flash"); - - uartadapter_flashread(UA_FAST_RECONNECT_TCP_DATA, (u8*)&tcp, sizeof(ua_tcp_socket_t)); - if(tcp.group_id != ~0x0){ - if(tcp.group_id){ - ua_socket->tcp.group_id = tcp.group_id; - ua_socket->tcp.server_port = tcp.server_port; - ua_socket->tcp.client_port = tcp.client_port; - memcpy(ua_socket->tcp.client_ip, tcp.client_ip, 16); - - if(xTaskCreate(uartadapter_tcp_transmit_server_thread, ((const char*)"tserver"), 256, (void *)ua_socket->tcp.server_port, UA_UART_THREAD_PRIORITY, NULL) != pdPASS) - ua_printf(UA_ERROR, "%s xTaskCreate(tcp server) failed", __FUNCTION__); - - strncpy(ua_tcp_server_ip, ua_socket->tcp.client_ip, 16); - if(xTaskCreate(uartadapter_tcp_transmit_client_forever_thread, ((const char*)"tclient"), 256, (void *)ua_socket->tcp.client_port, UA_UART_THREAD_PRIORITY, NULL) != pdPASS) - ua_printf(UA_ERROR, "%s xTaskCreate(tcp client) failed", __FUNCTION__); - } - } - return 0; -} - -int uartadapter_control_set_req_handle(ua_socket_t *ua_socket, u8 *pbuf, u32 sz) -{ - u8 *p = pbuf; - u8 len = 0; - u16 type = 0; - u32 port = 0; - u32 server_ip = 0; - int ret = 0; - struct sockaddr_in server_addr; - int server_addr_len = sizeof(server_addr); - TXTRecordRef txtRecord; - unsigned char txt_buf[100] = {0}; // use fixed buffer for text record to prevent malloc/free - unsigned char txt_buf2[100] = {0}; // use fixed buffer for text record to prevent malloc/free - - - ua_printf(UA_DEBUG, "\n===>uartadapter_control_set_req_handle()"); - - UA_SOCKET_CHECK_2(ua_socket); - - UA_PRINT_DATA(pbuf, sz); - - while(p < (pbuf+sz)){ - type = (*p)<<8 | *(p+1); - p = p + 2; - len = *p++; - ua_printf(UA_DEBUG, "type=%d len=%d\n", type, len); - switch(type) - { - case UART_CTRL_TYPE_BAUD_RATE: - ua_socket->uart.uart_param.BaudRate = *(u32 *)p; - ua_printf(UA_INFO, "SET UART BAUD_RATE to %d.\n", ua_socket->uart.uart_param.BaudRate); - serial_baud(&ua_socket->uart.uart_sobj, ua_socket->uart.uart_param.BaudRate); - break; - case UART_CTRL_TYPE_WORD_LEN: - ua_socket->uart.uart_param.WordLen = *p; - ua_printf(UA_INFO, "SET UART WORD_LEN to %d.\n", ua_socket->uart.uart_param.WordLen); - serial_format(&ua_socket->uart.uart_sobj, - ua_socket->uart.uart_param.WordLen, - (SerialParity)ua_socket->uart.uart_param.Parity, - ua_socket->uart.uart_param.StopBit); - break; - case UART_CTRL_TYPE_PARITY: - ua_socket->uart.uart_param.Parity = *p; - ua_printf(UA_INFO, "SET UART PARITY to %d.\n", ua_socket->uart.uart_param.Parity); - serial_format(&ua_socket->uart.uart_sobj, - ua_socket->uart.uart_param.WordLen, - (SerialParity)ua_socket->uart.uart_param.Parity, - ua_socket->uart.uart_param.StopBit); - break; - case UART_CTRL_TYPE_STOP_BIT: - ua_socket->uart.uart_param.StopBit = *p; - ua_printf(UA_INFO, "SET UART STOP_BIT to %d.\n", ua_socket->uart.uart_param.StopBit); - serial_format(&ua_socket->uart.uart_sobj, - ua_socket->uart.uart_param.WordLen, - (SerialParity)ua_socket->uart.uart_param.Parity, - ua_socket->uart.uart_param.StopBit); - break; - case UART_CTRL_TYPE_TCP_SERVER_CREATE: - port = (*p)<<8 | *(p+1); - - if(ua_socket->tcp.transmit_server_listen_socket != -1){ - ua_printf(UA_INFO, "Close old transmit server socket %d", ua_socket->tcp.transmit_server_listen_socket); - close(ua_socket->tcp.transmit_server_listen_socket); - } - if(xTaskCreate(uartadapter_tcp_transmit_server_thread, ((const char*)"tserver"), 256, (void *)port, UA_UART_THREAD_PRIORITY, NULL) != pdPASS) - ua_printf(UA_ERROR, "%s xTaskCreate(tcp server) failed", __FUNCTION__); - ua_socket->tcp.server_port = port; - uartadapter_control_write_tcp_info_into_flash(ua_socket); - vTaskDelay(50); - ua_printf(UA_DEBUG, "CREATE TCP SERVER WITH PORT %d.\n", port); - //TODO - break; - case UART_CTRL_TYPE_TCP_SERVER_DELETE: - port = (*p)<<8 | *(p+1); - - if(ua_socket->tcp.transmit_server_listen_socket != -1){ - getsockname (ua_socket->tcp.transmit_server_listen_socket, (struct sockaddr *)&server_addr, &server_addr_len); - if(server_addr.sin_port == ntohs((u16)port)){ - ua_printf(UA_INFO,"uart tcp transmit server socket %d closed by control socket!", ua_socket->tcp.transmit_server_listen_socket); - close(ua_socket->tcp.transmit_server_listen_socket); - ua_socket->tcp.transmit_server_listen_socket = -1; - if(ua_socket->tcp.transmit_recv_socket != -1){ - ua_printf(UA_INFO,"uart tcp transmit receive socket %d closed by control socket!", ua_socket->tcp.transmit_recv_socket); - close(ua_socket->tcp.transmit_recv_socket); - ua_socket->tcp.transmit_recv_socket = -1; - } - - if(ua_socket->tcp.transmit_send_socket != -1){ - ua_printf(UA_INFO,"uart tcp transmit send socket %d closed by control socket!", ua_socket->tcp.transmit_send_socket); - close(ua_socket->tcp.transmit_send_socket); - ua_socket->tcp.transmit_send_socket = -1; - ua_printf(UA_INFO, "DISCONNECT FROM TCP SERVER.\n"); - memset(ua_socket->tcp.client_ip, 0, 16); - ua_socket->tcp.client_port = 0; - } - ua_printf(UA_INFO, "DELETE TCP SERVER \n"); - ua_socket->tcp.server_port = 0; - uartadapter_control_write_tcp_info_into_flash(ua_socket); - }else{ - ua_printf(UA_INFO, "DELETE TCP SERVER FAILED: port not match\n"); - return -1; - } - }else{ - ua_printf(UA_INFO, "DELETE TCP SERVER FAILED: server not exist\n"); - return -1; - } - - break; - case UART_CTRL_TYPE_TCP_CLIENT_CONNECT: - server_ip = (*(p+3))<<24 | (*(p+2))<<16 | (*(p+1))<<8 | *p; - p = p + 4; - memcpy(ua_tcp_server_ip, inet_ntoa(server_ip), 16); - port = (*p)<<8 | *(p+1); - ret = uartadapter_tcpclient(ua_socket, ua_tcp_server_ip, (unsigned short)port); - if(ret == 0){ - ua_printf(UA_INFO, "CONNECT TO TCP SERVER, IP %s PORT %d Success.\n", ua_tcp_server_ip, port); - }else{ - ua_printf(UA_INFO, "CONNECT TO TCP SERVER, IP %s PORT %d Failed.\n", ua_tcp_server_ip, port); - return -1; - } - memcpy(ua_socket->tcp.client_ip, ua_tcp_server_ip, 16); - ua_socket->tcp.client_port = port; - uartadapter_control_write_tcp_info_into_flash(ua_socket); - break; - case UART_CTRL_TYPE_TCP_CLIENT_DISCONNECT: - server_ip = (*(p+3))<<24 | (*(p+2))<<16 | (*(p+1))<<8 | *p; - p = p + 4; - memcpy(ua_tcp_server_ip, inet_ntoa(server_ip), 16); - port = (*p)<<8 | *(p+1); - - if(ua_socket->tcp.transmit_send_socket != -1){ - getpeername(ua_socket->tcp.transmit_send_socket, (struct sockaddr *)&server_addr, &server_addr_len); - if(server_addr.sin_port == ntohs((u16)port) && server_addr.sin_addr.s_addr == server_ip){ - ua_printf(UA_INFO,"uart tcp transmit send socket %d closed by control socket!", ua_socket->tcp.transmit_send_socket); - close(ua_socket->tcp.transmit_send_socket); - ua_socket->tcp.transmit_send_socket = -1; - ua_printf(UA_INFO, "DISCONNECT FROM TCP SERVER.\n"); - memset(ua_socket->tcp.client_ip, 0, 16); - ua_socket->tcp.client_port = 0; - uartadapter_control_write_tcp_info_into_flash(ua_socket); - }else{ - ua_printf(UA_INFO, "DISCONNECT FROM TCP SERVER FAILED: port or IP not match.\n"); - return -1; - } - }else{ - ua_printf(UA_INFO, "DISCONNECT FROM TCP SERVER FAILED: connection not exist\n"); - return -1; - } - break; - case UART_CTRL_TYPE_TCP_GROUP_ID: - ua_socket->tcp.group_id = *p; - ua_printf(UA_INFO,"SET TCP GROUP ID to %d!", *p); -#ifdef MDNS_LIB_EN - sprintf(txt_buf2, "groupid:%d, tcpserver:%d", ua_socket->tcp.group_id, ua_socket->tcp.server_port); - TXTRecordCreate(&txtRecord, sizeof(txt_buf), txt_buf); - TXTRecordSetValue(&txtRecord, "groupid", strlen(txt_buf2), txt_buf2); - mDNSUpdateService(ua_socket->dnsServiceRef, &txtRecord, 0); - mDNSUpdateService(ua_socket->dnsServiceRef2, &txtRecord, 0); */ -#endif - - uartadapter_control_write_tcp_info_into_flash(ua_socket); - - break; - default: - ua_printf(UA_DEBUG, "Unknown Type, just skip\n"); - break; - - } - p += len; - } - return 0; -} - -int uartadapter_control_get_req_handle(ua_socket_t *ua_socket, u16 type, u8 *prsp, u32 *sz) -{ - u8 *p = prsp; - - ua_printf(UA_DEBUG, "===>uartadapter_control_get_req_handle()"); - - UA_SOCKET_CHECK_2(ua_socket); - - sprintf((char *)p, UA_CONTROL_PREFIX); - p += strlen(UA_CONTROL_PREFIX); - *p++ = UART_CTRL_MODE_GET_RSP; - - if(type & UART_CTRL_TYPE_BAUD_RATE){ - *p++ = 0; - *p++ = UART_CTRL_TYPE_BAUD_RATE; - *p++ = 4; - *(u32*)p = ua_socket->uart.uart_param.BaudRate; - p += 4; - } - if(type & UART_CTRL_TYPE_WORD_LEN){ - *p++ = 0; - *p++ = UART_CTRL_TYPE_WORD_LEN; - *p++ = 1; - *p = ua_socket->uart.uart_param.WordLen; - p += 1; - } - if(type & UART_CTRL_TYPE_PARITY){ - *p++ = 0; - *p++ = UART_CTRL_TYPE_PARITY; - *p++ = 1; - *p = ua_socket->uart.uart_param.Parity; - p += 1; - } - if(type & UART_CTRL_TYPE_STOP_BIT){ - *p++ = 0; - *p++ = UART_CTRL_TYPE_STOP_BIT; - *p++ = 1; - *p = ua_socket->uart.uart_param.StopBit; - p += 1; - } -#if 0 - if(type & UART_CTRL_TYPE_FLOW_CTRL){ - *p++ = UART_CTRL_TYPE_FLOW_CTRL; - *p++ = 1; - *p = ua_socket->uart.uart_param.FlowControl; - p += 1; - } -#endif - *sz = p - prsp; - - UA_PRINT_DATA(prsp, *sz); - return 0; -} - -int uartadapter_control_process(ua_socket_t *ua_socket, char *pbuf, size_t size) -{ - /*the same as socket*/ - int ret = 0; - - UA_SOCKET_CHECK_2(ua_socket); - - if(!size || !pbuf){ - //ua_printf(UA_ERROR, "control data input error,please check!"); - ret = -1; - return ret; - } - - UA_PRINT_DATA(pbuf, size); - if (size <= strlen(UA_CONTROL_PREFIX)) { - ua_printf(UA_ERROR, "no control data prefix!"); - return -1; - } - - if(uartadapter_strncmp(pbuf, UA_CONTROL_PREFIX, 10) != 0) - { - ua_printf(UA_ERROR, "control data prefix wrong!"); - return -1; - } - else - { - u8 *p = (u8*)pbuf + strlen(UA_CONTROL_PREFIX); - u8 mode = *p++; - switch(mode) - { - case UART_CTRL_MODE_SET_REQ: //AMEBA_UART-MODE-TYPE-LEN-VAL-TYPE-LEN-VAL... - { - char rsp[32] = {0}; //AMEBA_UART-MODE - u32 sz = strlen(UA_CONTROL_PREFIX); - ret = uartadapter_control_set_req_handle(ua_socket, p, (size - strlen(UA_CONTROL_PREFIX) - 1)); - if(0 == ret){ - sprintf(rsp, UA_CONTROL_PREFIX); - *(rsp + sz) = UART_CTRL_MODE_SET_RSP; - sz ++; - sprintf(rsp + sz, "\n"); - sz ++; - vTaskDelay(100); - uartadapter_tcp_send_control(ua_socket, rsp, sz); - } - break; - } - case UART_CTRL_MODE_GET_REQ: //AMEBA_UART-MODE-TYPE - { - char rsp[128] = {0}; - u32 sz = 0; - u16 type = (*p)<<8 | *(p+1); - uartadapter_control_get_req_handle(ua_socket, type, (u8*)rsp, &sz); - sprintf(rsp + sz, "\n"); - sz ++; - vTaskDelay(100); - uartadapter_tcp_send_control(ua_socket, rsp, sz); - break; - } - default: - ua_printf(UA_ERROR, UA_CONTROL_PREFIX": Mode (%d) not support!", mode); - break; - } - } - return 0; -} - -#define _________TCP__RELATED________________________ -int uartadapter_tcpclient(ua_socket_t *ua_socket, const char *host_ip, unsigned short usPort) -{ - int iAddrSize; - int iSockFD = -1; - int iStatus; - int enable = 1; - struct sockaddr_in sAddr; - int send_timeout = 3000; - - UA_SOCKET_CHECK_2(ua_socket); - - FD_ZERO(&sAddr); - sAddr.sin_family = AF_INET; - sAddr.sin_port = htons(usPort); - sAddr.sin_addr.s_addr = inet_addr(host_ip); - - iAddrSize = sizeof(struct sockaddr_in); - - iSockFD = socket(AF_INET, SOCK_STREAM, 0); - if( iSockFD < 0 ) { - ua_printf(UA_ERROR, "TCP ERROR: create tcp client socket fd error!"); - return -1; - } - - ua_printf(UA_DEBUG, "TCP: ServerIP=%s port=%d.", host_ip, usPort); - ua_printf(UA_DEBUG, "TCP: Create socket %d.", iSockFD); - // connecting to TCP server - iStatus = connect(iSockFD, (struct sockaddr *)&sAddr, iAddrSize); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp client connect server error %d!", iStatus); - goto Exit; - } - - iStatus = setsockopt(iSockFD, IPPROTO_TCP, TCP_NODELAY, &enable, sizeof(enable)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp client socket set TCP_NODELAY error! "); - goto Exit; - } - - iStatus = setsockopt(iSockFD, SOL_SOCKET, SO_KEEPALIVE, &enable, sizeof(enable)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp client socket set SO_KEEPALIVE error! "); - goto Exit; - } - -#if LWIP_SO_SNDTIMEO - iStatus = setsockopt(iSockFD, SOL_SOCKET, SO_SNDTIMEO, &send_timeout, sizeof(int)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp client socket set SO_SNDTIMEO error! "); - goto Exit; - } -#endif - -#if LWIP_SO_RCVTIMEO - iStatus = setsockopt(iSockFD, SOL_SOCKET, SO_RCVTIMEO, &send_timeout, sizeof(int)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp client socket set SO_RCVTIMEO error! "); - goto Exit; - } -#endif - - if(ua_socket->tcp.transmit_send_socket != -1){ - close(ua_socket->tcp.transmit_send_socket); - ua_printf(UA_INFO, "Close old transmit send socket %d.", ua_socket->tcp.transmit_send_socket); - } - - ua_printf(UA_INFO, "Connect to transmit server successfully."); - ua_socket->tcp.transmit_send_socket = iSockFD; - - return 0; - -Exit: - close(iSockFD); - return -1; -} - -int uartadapter_tcpserver(ua_socket_t *ua_socket, unsigned short usPort, u8 socket_type) -{ - struct sockaddr_in sLocalAddr; - int iAddrSize; - int iSockFD; - int iStatus; - int enable = 1; - - UA_SOCKET_CHECK_2(ua_socket); - - iSockFD = socket(AF_INET, SOCK_STREAM, 0); - if( iSockFD < 0 ) { - ua_printf(UA_ERROR, "create server_socket error!"); - goto Exit; - } - - iStatus = setsockopt( iSockFD, SOL_SOCKET, SO_REUSEADDR, - (const char *) &enable, sizeof( enable ) ); - if( iStatus < 0 ) { - ua_printf(UA_ERROR, "set tcp server socket SO_REUSEADDR error %d! ", iStatus); - goto Exit; - } - - ua_printf(UA_DEBUG, "TCP: Create Tcp server socket %d", iSockFD); - - //filling the TCP server socket address - memset((char *)&sLocalAddr, 0, sizeof(sLocalAddr)); - sLocalAddr.sin_family = AF_INET; - sLocalAddr.sin_len = sizeof(sLocalAddr); - sLocalAddr.sin_port = htons(usPort); - sLocalAddr.sin_addr.s_addr = htonl(INADDR_ANY); - - iAddrSize = sizeof(sLocalAddr); - - iStatus = bind(iSockFD, (struct sockaddr *)&sLocalAddr, iAddrSize); - if( iStatus < 0 ) { - ua_printf(UA_ERROR, "bind tcp server socket fd error %d! ", iStatus); - goto Exit; - } - ua_printf(UA_DEBUG, "TCP: Bind successfully."); - - iStatus = listen(iSockFD, 10); - if( iStatus != 0 ) { - ua_printf(UA_ERROR, "listen tcp server socket fd error %d!", iStatus); - goto Exit; - } - - if(0 == socket_type){ - ua_socket->tcp.chat_server_listen_socket = iSockFD; - ua_printf(UA_INFO, "TCP Chat Server: Listen on port %d", usPort); - }else if(1 == socket_type){ - ua_socket->tcp.control_server_listen_socket = iSockFD; - ua_printf(UA_INFO, "TCP Control Server: Listen on port %d", usPort); - }else{ - ua_socket->tcp.transmit_server_listen_socket = iSockFD; - ua_printf(UA_INFO, "TCP Transmit Server: Listen on port %d", usPort); - } - - return 0; - -Exit: - close(iSockFD); - ua_printf(UA_DEBUG, "Tcp server listen on port %d closed!", usPort); - return 0; -} - -void uartadapter_tcp_chat_server_thread(void *param) -{ - ua_socket_t *ua_socket = (ua_socket_t *)param; - unsigned short port = UA_CHAT_SOCKET_PORT; - - UA_SOCKET_CHECK(ua_socket); - - ua_printf(UA_DEBUG, "Uart Adapter: Start Tcp Data Server!"); - uartadapter_tcpserver(ua_socket, port, 0); - -#if defined(INCLUDE_uxTaskGetStackHighWaterMark) && (INCLUDE_uxTaskGetStackHighWaterMark == 1) - ua_printf(UA_DEBUG, "Min available stack size of %s = %d * %d bytes\n\r", __FUNCTION__, uxTaskGetStackHighWaterMark(NULL), sizeof(portBASE_TYPE)); -#endif - ua_printf(UA_DEBUG, "TCP: Tcp data server stopped!"); - vTaskDelete(NULL); -} - -void uartadapter_tcp_control_server_thread(void *param) -{ - ua_socket_t *ua_socket = (ua_socket_t *)param; - unsigned short port = UA_CONTROL_SOCKET_PORT; - - UA_SOCKET_CHECK(ua_socket); - - ua_printf(UA_DEBUG, "Uart Adapter: Start Tcp Control Server!"); - uartadapter_tcpserver(ua_socket, port, 1); - -#if defined(INCLUDE_uxTaskGetStackHighWaterMark) && (INCLUDE_uxTaskGetStackHighWaterMark == 1) - ua_printf(UA_DEBUG, "Min available stack size of %s = %d * %d bytes", __FUNCTION__, uxTaskGetStackHighWaterMark(NULL), sizeof(portBASE_TYPE)); -#endif - ua_printf(UA_DEBUG, "TCP: Tcp control server stopped!"); - vTaskDelete(NULL); -} - -void uartadapter_tcp_transmit_server_thread(void *param) -{ - ua_socket_t *ua_socket = ua_global_socket; - unsigned short port = (int)param; - - UA_SOCKET_CHECK(ua_socket); - - ua_printf(UA_DEBUG, "Uart Adapter: Start Tcp Transmit Server!"); - uartadapter_tcpserver(ua_socket, port, 2); - - uartadapter_gpio_led_mode(ua_socket, UART_ADAPTER_LED_SLOW_TWINKLE); - -#if defined(INCLUDE_uxTaskGetStackHighWaterMark) && (INCLUDE_uxTaskGetStackHighWaterMark == 1) - ua_printf(UA_DEBUG, "Min available stack size of %s = %d * %d bytes", __FUNCTION__, uxTaskGetStackHighWaterMark(NULL), sizeof(portBASE_TYPE)); -#endif - ua_printf(UA_DEBUG, "TCP: Tcp transmit server thread delete!"); - vTaskDelete(NULL); -} - -void uartadapter_tcp_transmit_client_thread(void *param) -{ - ua_socket_t *ua_socket = ua_global_socket; - unsigned short port = (int)param; - - UA_SOCKET_CHECK(ua_socket); - - ua_printf(UA_DEBUG, "Uart Adapter: Start Tcp Data Client!"); - uartadapter_tcpclient(ua_socket, ua_tcp_server_ip, port); - - uartadapter_gpio_led_mode(ua_socket, UART_ADAPTER_LED_SLOW_TWINKLE); - -#if defined(INCLUDE_uxTaskGetStackHighWaterMark) && (INCLUDE_uxTaskGetStackHighWaterMark == 1) - ua_printf(UA_DEBUG, "Min available stack size of %s = %d * %d bytes\n\r", __FUNCTION__, uxTaskGetStackHighWaterMark(NULL), sizeof(portBASE_TYPE)); -#endif - ua_printf(UA_DEBUG, "TCP: Tcp transmit client thread delete!"); - vTaskDelete(NULL); -} - -void uartadapter_tcp_transmit_client_forever_thread(void *param) -{ - ua_socket_t *ua_socket = ua_global_socket; - unsigned short port = (int)param; - int ret = 0; - UA_SOCKET_CHECK(ua_socket); - - ua_printf(UA_DEBUG, "Uart Adapter: Start Tcp Transmit Client forever thread!"); - - do{ - ret = uartadapter_tcpclient(ua_socket, ua_tcp_server_ip, port); - if(ret != 0){ - ua_printf(UA_INFO, "Uart Adapter: Try to connect to TCP server again"); - vTaskDelay(3000); - } - }while(ret != 0); - - uartadapter_gpio_led_mode(ua_socket, UART_ADAPTER_LED_SLOW_TWINKLE); - -#if defined(INCLUDE_uxTaskGetStackHighWaterMark) && (INCLUDE_uxTaskGetStackHighWaterMark == 1) - ua_printf(UA_DEBUG, "Min available stack size of %s = %d * %d bytes\n\r", __FUNCTION__, uxTaskGetStackHighWaterMark(NULL), sizeof(portBASE_TYPE)); -#endif - ua_printf(UA_DEBUG, "TCP: Tcp transmit client thread delete!"); - vTaskDelete(NULL); -} - -void uartadapter_tcp_send_data(ua_socket_t *ua_socket, char *buffer, int size) -{ - int iStatus; - - UA_SOCKET_CHECK(ua_socket); - - if(ua_socket->tcp.chat_socket != -1){ - ua_socket->tcp.send_flag = 1; - RtlDownSema(&ua_socket->uart.tcp_tx_rx_sema); - iStatus = send(ua_socket->tcp.chat_socket, buffer, size, 0 ); - RtlUpSema(&ua_socket->uart.tcp_tx_rx_sema); - ua_socket->tcp.send_flag = 0; - if( iStatus <= 0 ){ - ua_printf(UA_ERROR, "tcp chat socket send data error! iStatus:%d!", iStatus); - }else{ - ua_socket->tcp.tx_cnt += iStatus; - } - } - - if(ua_socket->tcp.transmit_send_socket != -1){ - ua_socket->tcp.send_flag = 1; - iStatus = send(ua_socket->tcp.transmit_send_socket, buffer, size, 0 ); - ua_socket->tcp.send_flag = 0; - if( iStatus <= 0 ){ - ua_printf(UA_ERROR, "tcp transmit send socket send data error! iStatus:%d!", iStatus); - }else{ - ua_socket->tcp.tx_cnt += iStatus; - } - } - - return; -} - -void uartadapter_tcp_send_control(ua_socket_t *ua_socket, char *buffer, int size) -{ - int iStatus; - - UA_SOCKET_CHECK(ua_socket); - - if(ua_socket->tcp.control_socket != -1){ - ua_socket->tcp.send_flag = 1; - iStatus = send(ua_socket->tcp.control_socket, buffer, size, 0 ); - ua_socket->tcp.send_flag = 0; - if( iStatus <= 0 ){ - ua_printf(UA_ERROR,"tcp control socket send data error! iStatus:%d!", iStatus); - } - - if(ua_debug_print_en){ - ua_printf(UA_INFO,"uart tcp control socket send %d bytes, ret %d!", size, iStatus); - } - } - - return; -} - -void uartadapter_tcp_except_handler(ua_socket_t *ua_socket, fd_set *exceptfds) -{ - if(ua_socket->tcp.chat_socket != -1 && FD_ISSET(ua_socket->tcp.chat_socket, exceptfds)){ - ua_printf(UA_INFO,"uart tcp chat socket %d exception happen, need to close!", ua_socket->tcp.chat_socket); - close(ua_socket->tcp.chat_socket); - ua_socket->tcp.chat_socket = -1; - } - - if(ua_socket->tcp.control_socket != -1 && FD_ISSET(ua_socket->tcp.control_socket, exceptfds)){ - ua_printf(UA_INFO,"uart tcp control socket %d exception happen, need to close!", ua_socket->tcp.control_socket); - close(ua_socket->tcp.control_socket); - ua_socket->tcp.control_socket = -1; - } - - if(ua_socket->tcp.transmit_recv_socket != -1 && FD_ISSET(ua_socket->tcp.transmit_recv_socket, exceptfds)){ - ua_printf(UA_INFO,"uart tcp transmit recv socket %d exception happen, need to close!", ua_socket->tcp.transmit_recv_socket); - close(ua_socket->tcp.transmit_recv_socket); - ua_socket->tcp.transmit_recv_socket = -1; - uartadapter_gpio_led_mode(ua_socket, UART_ADAPTER_LED_FAST_TWINKLE); -#if 0 - if(ua_socket->tcp.transmit_server_listen_socket != -1){ - ua_printf(UA_INFO,"uart tcp transmit server socket %d exception happen, need to close!", ua_socket->tcp.transmit_server_listen_socket); - close(ua_socket->tcp.transmit_server_listen_socket); - ua_socket->tcp.transmit_server_listen_socket = -1; - } -#endif - } - - if(ua_socket->tcp.transmit_send_socket != -1 && FD_ISSET(ua_socket->tcp.transmit_send_socket, exceptfds)){ - ua_printf(UA_INFO,"uart tcp transmit send socket %d exception happen, need to close!", ua_socket->tcp.transmit_send_socket); - close(ua_socket->tcp.transmit_send_socket); - ua_socket->tcp.transmit_send_socket = -1; - uartadapter_gpio_led_mode(ua_socket, UART_ADAPTER_LED_FAST_TWINKLE); - - strncpy(ua_tcp_server_ip, ua_socket->tcp.client_ip, 16); - if(xTaskCreate(uartadapter_tcp_transmit_client_forever_thread, ((const char*)"tclient"), 256, (void *)ua_socket->tcp.client_port, UA_UART_THREAD_PRIORITY, NULL) != pdPASS) - ua_printf(UA_ERROR, "%s xTaskCreate(tcp client) failed", __FUNCTION__); - } - - if(ua_socket->tcp.chat_server_listen_socket != -1 && FD_ISSET(ua_socket->tcp.chat_server_listen_socket, exceptfds)){ - ua_printf(UA_INFO,"uart tcp chat server socket %d exception happen, need to restart!", ua_socket->tcp.chat_server_listen_socket); - close(ua_socket->tcp.chat_server_listen_socket); - ua_socket->tcp.chat_server_listen_socket = -1; - uartadapter_tcpserver(ua_socket, UA_CHAT_SOCKET_PORT, 0); - } - - if(ua_socket->tcp.control_server_listen_socket != -1 && FD_ISSET(ua_socket->tcp.control_server_listen_socket, exceptfds)){ - ua_printf(UA_INFO,"uart tcp control server socket %d exception happen, need to restart!", ua_socket->tcp.control_server_listen_socket); - close(ua_socket->tcp.control_server_listen_socket); - ua_socket->tcp.control_server_listen_socket = -1; - uartadapter_tcpserver(ua_socket, UA_CONTROL_SOCKET_PORT, 1); - } - - if(ua_socket->tcp.transmit_server_listen_socket != -1 && FD_ISSET(ua_socket->tcp.transmit_server_listen_socket, exceptfds)){ - ua_printf(UA_INFO,"uart tcp transmit server socket %d exception happen, need to close!", ua_socket->tcp.transmit_server_listen_socket); - close(ua_socket->tcp.transmit_server_listen_socket); - ua_socket->tcp.transmit_server_listen_socket = -1; - //uartadapter_gpio_led_mode(ua_socket, UART_ADAPTER_LED_FAST_TWINKLE); - uartadapter_tcpserver(ua_socket, ua_socket->tcp.server_port, 2); - } - -} - -void uartadapter_tcp_chat_socket_handler(ua_socket_t *ua_socket, char *tcp_rxbuf) -{ - int recv_len; - - UA_SOCKET_CHECK(ua_socket); - - ua_socket->tcp.recv_flag = 1; - RtlDownSema(&ua_socket->uart.tcp_tx_rx_sema); - recv_len = recv(ua_socket->tcp.chat_socket, tcp_rxbuf, UA_UART_FRAME_LEN, MSG_DONTWAIT); - RtlUpSema(&ua_socket->uart.tcp_tx_rx_sema); - ua_socket->tcp.recv_flag = 0; - if(recv_len < 0){ - ua_printf(UA_ERROR, "Tcp Chat Socket %d Recv Error, ret = %d", ua_socket->tcp.chat_socket, recv_len); - }else if(recv_len == 0){ - ua_printf(UA_INFO, "Tcp Chat Socket %d closed", ua_socket->tcp.chat_socket); - close(ua_socket->tcp.chat_socket); - ua_socket->tcp.chat_socket = -1; - }else{ - ua_printf(UA_DEBUG, "Tcp Chat Socket %d Recv %d Data", ua_socket->tcp.chat_socket, recv_len); - uartadapter_uart_write(ua_socket, tcp_rxbuf, recv_len); - ua_socket->tcp.rx_cnt += recv_len; - } - - return; -} - -void uartadapter_tcp_control_socket_handler(ua_socket_t *ua_socket) -{ - char tcp_rxbuf[UA_UART_FRAME_LEN]; - int recv_len; - - UA_SOCKET_CHECK(ua_socket); - - recv_len = recv(ua_socket->tcp.control_socket, tcp_rxbuf, UA_UART_FRAME_LEN, MSG_DONTWAIT); //MSG_DONTWAIT MSG_WAITALL - if(recv_len<0){ - ua_printf(UA_ERROR, "Tcp Control Socket %d Recv Error", ua_socket->tcp.control_socket); - }else if(recv_len == 0){ - ua_printf(UA_INFO, "Tcp Control Socket %d closed", ua_socket->tcp.control_socket); - close(ua_socket->tcp.control_socket); - ua_socket->tcp.control_socket = -1; - }else{ - ua_printf(UA_DEBUG, "Tcp Control Socket %d Recv %d Data", ua_socket->tcp.control_socket, recv_len); - uartadapter_control_process(ua_socket, (void*)tcp_rxbuf, recv_len); - } - - return; -} - -void uartadapter_tcp_transmit_socket_handler(ua_socket_t *ua_socket, char *tcp_rxbuf) -{ - int recv_len; - - UA_SOCKET_CHECK(ua_socket); - - ua_socket->tcp.recv_flag = 1; - recv_len = recv(ua_socket->tcp.transmit_recv_socket, tcp_rxbuf, UA_UART_FRAME_LEN, MSG_DONTWAIT); - ua_socket->tcp.recv_flag = 0; - if(recv_len < 0){ - ua_printf(UA_ERROR, "Tcp Transmit Recv Socket %d Recv Error, ret = %d", ua_socket->tcp.transmit_recv_socket, recv_len); - }else if(recv_len == 0){ - ua_printf(UA_INFO, "Tcp Transmit Recv Socket %d closed", ua_socket->tcp.transmit_recv_socket); - close(ua_socket->tcp.transmit_recv_socket); - ua_socket->tcp.transmit_recv_socket = -1; -#if 0 - if(ua_socket->tcp.transmit_server_listen_socket != -1){ - ua_printf(UA_INFO, "Tcp Transmit Server Socket %d closed", ua_socket->tcp.transmit_server_listen_socket); - close(ua_socket->tcp.transmit_server_listen_socket); - ua_socket->tcp.transmit_server_listen_socket = -1; - } -#endif - }else{ - uartadapter_uart_write(ua_socket, tcp_rxbuf, recv_len); - ua_socket->tcp.rx_cnt += recv_len; - } - - return; -} - -void uartadapter_tcp_chat_listen_socket_handler(ua_socket_t *ua_socket) -{ - int old_chat_socket; - struct sockaddr_in sAddr; - int addrlen = sizeof(sAddr); - int iStatus; - int enable = 1; - int send_timeout = 3000; - - UA_SOCKET_CHECK(ua_socket); - - old_chat_socket = ua_socket->tcp.chat_socket; - - ua_socket->tcp.chat_socket = accept(ua_socket->tcp.chat_server_listen_socket, (struct sockaddr *)&sAddr, (socklen_t*)&addrlen); - if( ua_socket->tcp.chat_socket< 0 ) { - ua_printf(UA_ERROR, "Accept tcp chat socket error"); - goto EXIT; - } - - iStatus = setsockopt(ua_socket->tcp.chat_socket, IPPROTO_TCP, TCP_NODELAY, &enable, sizeof(enable)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp chat socket set opt TCP_NODELAY error! "); - goto EXIT; - } - - iStatus = setsockopt(ua_socket->tcp.chat_socket, SOL_SOCKET, SO_KEEPALIVE, &enable, sizeof(enable)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp chat socket set opt SO_KEEPALIVE error! "); - goto EXIT; - } - -#if LWIP_SO_SNDTIMEO - iStatus = setsockopt(ua_socket->tcp.chat_socket, SOL_SOCKET, SO_SNDTIMEO, &send_timeout, sizeof(send_timeout)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp client socket set opt error! "); - goto EXIT; - } -#endif - -#if LWIP_SO_RCVTIMEO - iStatus = setsockopt(ua_socket->tcp.chat_socket, SOL_SOCKET, SO_RCVTIMEO, &send_timeout, sizeof(send_timeout)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp client socket set opt error! "); - goto EXIT; - } -#endif - - ua_printf(UA_INFO, "Accept new chat socket %d on port %d successfully.", ua_socket->tcp.chat_socket, htons(sAddr.sin_port)); - if(old_chat_socket != -1) - { - close(old_chat_socket); - ua_printf(UA_INFO, "Close old chat socket %d.", old_chat_socket); - } - - return; - -EXIT: - if(ua_socket->tcp.chat_server_listen_socket != -1){ - close(ua_socket->tcp.chat_server_listen_socket); - ua_socket->tcp.chat_server_listen_socket = -1; - } -} - -void uartadapter_tcp_control_listen_socket_handler(ua_socket_t *ua_socket) -{ - int old_control_socket; - struct sockaddr_in sAddr; - int addrlen = sizeof(sAddr); - int iStatus; - int enable = 1; - int send_timeout = 3000; - - UA_SOCKET_CHECK(ua_socket); - - old_control_socket = ua_socket->tcp.control_socket; - - ua_socket->tcp.control_socket = accept(ua_socket->tcp.control_server_listen_socket, (struct sockaddr *)&sAddr, (socklen_t*)&addrlen); - if( ua_socket->tcp.control_socket< 0 ) { - ua_printf(UA_ERROR, "Accept tcp control socket error"); - goto EXIT; - } - - iStatus = setsockopt(ua_socket->tcp.control_socket, IPPROTO_TCP, TCP_NODELAY, &enable, sizeof(enable)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp chat socket set opt TCP_NODELAY error! "); - goto EXIT; - } - - iStatus = setsockopt(ua_socket->tcp.control_socket, SOL_SOCKET, SO_KEEPALIVE, &enable, sizeof(enable)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp chat socket set opt SO_KEEPALIVE error! "); - goto EXIT; - } - -#if LWIP_SO_SNDTIMEO - iStatus = setsockopt(ua_socket->tcp.control_socket, SOL_SOCKET, SO_SNDTIMEO, &send_timeout, sizeof(send_timeout)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp client socket set opt error! "); - goto EXIT; - } -#endif - -#if LWIP_SO_RCVTIMEO - iStatus = setsockopt(ua_socket->tcp.control_socket, SOL_SOCKET, SO_RCVTIMEO, &send_timeout, sizeof(send_timeout)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp client socket set opt error! "); - goto EXIT; - } -#endif - - ua_printf(UA_INFO, "Accept new control socket %d on port %d successfully.", ua_socket->tcp.control_socket, htons(sAddr.sin_port)); - if(old_control_socket != -1) - { - close(old_control_socket); - ua_printf(UA_INFO, "Close old control socket %d.", old_control_socket); - } - - return; - -EXIT: - if(ua_socket->tcp.control_server_listen_socket!= -1){ - close(ua_socket->tcp.control_server_listen_socket); - ua_socket->tcp.control_server_listen_socket= -1; - } -} - -void uartadapter_tcp_transmit_listen_socket_handler(ua_socket_t *ua_socket) -{ - int old_transmit_recv_socket; - struct sockaddr_in sAddr; - int addrlen = sizeof(sAddr); - int iStatus; - int enable = 1; - int send_timeout = 3000; - - UA_SOCKET_CHECK(ua_socket); - - old_transmit_recv_socket = ua_socket->tcp.transmit_recv_socket; - - ua_socket->tcp.transmit_recv_socket = accept(ua_socket->tcp.transmit_server_listen_socket, (struct sockaddr *)&sAddr, (socklen_t*)&addrlen); - if( ua_socket->tcp.transmit_recv_socket < 0 ) { - ua_printf(UA_ERROR, "Accept tcp control socket error"); - goto EXIT; - } - - iStatus = setsockopt(ua_socket->tcp.transmit_recv_socket, IPPROTO_TCP, TCP_NODELAY, &enable, sizeof(enable)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp transmit recv socket set opt TCP_NODELAY error! "); - goto EXIT; - } - - iStatus = setsockopt(ua_socket->tcp.transmit_recv_socket, SOL_SOCKET, SO_KEEPALIVE, &enable, sizeof(enable)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp transmit recv socket set opt SO_KEEPALIVE error! "); - goto EXIT; - } - -#if LWIP_SO_SNDTIMEO - iStatus = setsockopt(ua_socket->tcp.transmit_recv_socket, SOL_SOCKET, SO_SNDTIMEO, &send_timeout, sizeof(send_timeout)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp client socket set opt error! "); - goto EXIT; - } -#endif - -#if LWIP_SO_RCVTIMEO - iStatus = setsockopt(ua_socket->tcp.transmit_recv_socket, SOL_SOCKET, SO_RCVTIMEO, &send_timeout, sizeof(send_timeout)); - if (iStatus < 0) { - ua_printf(UA_ERROR, "tcp client socket set opt error! "); - goto EXIT; - } -#endif - - ua_printf(UA_INFO, "Accept new transmit recv socket %d on port %d successfully.", ua_socket->tcp.transmit_recv_socket, htons(sAddr.sin_port)); - if(old_transmit_recv_socket != -1) - { - close(old_transmit_recv_socket); - ua_printf(UA_INFO, "Close old transmit recv socket %d.", old_transmit_recv_socket); - } - - return; - -EXIT: - if(ua_socket->tcp.transmit_server_listen_socket!= -1){ - close(ua_socket->tcp.transmit_server_listen_socket); - ua_socket->tcp.transmit_server_listen_socket= -1; - } -} - -void uartadapter_tcp_select_restart_handler(ua_socket_t *ua_socket) -{ - if(ua_socket->tcp.chat_socket != -1){ - ua_printf(UA_INFO,"IP changed, uart tcp chat socket %d need to close!", ua_socket->tcp.chat_socket); - close(ua_socket->tcp.chat_socket); - ua_socket->tcp.chat_socket = -1; - } - - if(ua_socket->tcp.control_socket != -1){ - ua_printf(UA_INFO,"IP changed, uart tcp control socket %d need to close!", ua_socket->tcp.control_socket); - close(ua_socket->tcp.control_socket); - ua_socket->tcp.control_socket = -1; - } - - if(ua_socket->tcp.transmit_recv_socket != -1){ - ua_printf(UA_INFO,"IP changed, uart tcp transmit recv socket %d need to close!", ua_socket->tcp.transmit_recv_socket); - close(ua_socket->tcp.transmit_recv_socket); - ua_socket->tcp.transmit_recv_socket = -1; - uartadapter_gpio_led_mode(ua_socket, UART_ADAPTER_LED_FAST_TWINKLE); - } - - if(ua_socket->tcp.transmit_send_socket != -1){ - ua_printf(UA_INFO,"IP changed, uart tcp transmit send socket %d need to close!", ua_socket->tcp.transmit_send_socket); - close(ua_socket->tcp.transmit_send_socket); - ua_socket->tcp.transmit_send_socket = -1; - uartadapter_gpio_led_mode(ua_socket, UART_ADAPTER_LED_FAST_TWINKLE); - } - - if(ua_socket->tcp.chat_server_listen_socket!= -1){ - ua_printf(UA_INFO,"IP changed, uart tcp chat server socket %d need to restart!", ua_socket->tcp.chat_server_listen_socket); - close(ua_socket->tcp.chat_server_listen_socket); - ua_socket->tcp.chat_server_listen_socket = -1; - uartadapter_tcpserver(ua_socket, UA_CHAT_SOCKET_PORT, 0); - } - - if(ua_socket->tcp.control_server_listen_socket!= -1){ - ua_printf(UA_INFO,"IP changed, uart tcp control server socket %d need to restart!", ua_socket->tcp.control_server_listen_socket); - close(ua_socket->tcp.control_server_listen_socket); - ua_socket->tcp.control_server_listen_socket = -1; - uartadapter_tcpserver(ua_socket, UA_CONTROL_SOCKET_PORT, 1); - } - - if(ua_socket->tcp.transmit_server_listen_socket!= -1){ - ua_printf(UA_INFO,"IP changed, uart tcp transmit server socket %d need to close!", ua_socket->tcp.transmit_server_listen_socket); - close(ua_socket->tcp.transmit_server_listen_socket); - ua_socket->tcp.transmit_server_listen_socket = -1; - uartadapter_gpio_led_mode(ua_socket, UART_ADAPTER_LED_FAST_TWINKLE); - } - -} - -void uartadapter_tcp_select_thread(void *param) -{ - ua_socket_t *ua_socket = (ua_socket_t *)param; - int max_fd; - struct timeval tv; - fd_set readfds; - fd_set exceptfds; - int ret = 0; - char *tcp_rxbuf; - - UA_SOCKET_CHECK(ua_socket); - - tcp_rxbuf = pvPortMalloc(UA_UART_FRAME_LEN); - if(NULL == tcp_rxbuf){ - ua_printf(UA_ERROR, "Allocate select buffer failed.\n"); - return; - } - - while(1){ - if(ua_reconnect_ip_change){ - uartadapter_tcp_select_restart_handler(ua_socket); - ua_reconnect_ip_change = 0; - } - - FD_ZERO(&readfds); - FD_ZERO(&exceptfds); - max_fd = -1; - - if(ua_socket->tcp.chat_socket != -1){ - FD_SET(ua_socket->tcp.chat_socket, &readfds); - FD_SET(ua_socket->tcp.chat_socket, &exceptfds); - if(ua_socket->tcp.chat_socket > max_fd) - max_fd = ua_socket->tcp.chat_socket; - } - - if(ua_socket->tcp.control_socket != -1){ - FD_SET(ua_socket->tcp.control_socket, &readfds); - FD_SET(ua_socket->tcp.control_socket, &exceptfds); - if(ua_socket->tcp.control_socket > max_fd) - max_fd = ua_socket->tcp.control_socket; - } - - if(ua_socket->tcp.control_server_listen_socket != -1){ - FD_SET(ua_socket->tcp.control_server_listen_socket, &readfds); - FD_SET(ua_socket->tcp.control_server_listen_socket, &exceptfds); - if(ua_socket->tcp.control_server_listen_socket > max_fd) - max_fd = ua_socket->tcp.control_server_listen_socket; - } - - if(ua_socket->tcp.chat_server_listen_socket != -1){ - FD_SET(ua_socket->tcp.chat_server_listen_socket, &readfds); - FD_SET(ua_socket->tcp.chat_server_listen_socket, &exceptfds); - if(ua_socket->tcp.chat_server_listen_socket > max_fd) - max_fd = ua_socket->tcp.chat_server_listen_socket; - } - - if(ua_socket->tcp.transmit_recv_socket != -1){ - FD_SET(ua_socket->tcp.transmit_recv_socket, &readfds); - FD_SET(ua_socket->tcp.transmit_recv_socket, &exceptfds); - if(ua_socket->tcp.transmit_recv_socket > max_fd) - max_fd = ua_socket->tcp.transmit_recv_socket; - } - - if(ua_socket->tcp.transmit_send_socket != -1){ - FD_SET(ua_socket->tcp.transmit_send_socket, &exceptfds); - if(ua_socket->tcp.transmit_send_socket > max_fd) - max_fd = ua_socket->tcp.transmit_send_socket; - } - - if(ua_socket->tcp.transmit_server_listen_socket != -1){ - FD_SET(ua_socket->tcp.transmit_server_listen_socket, &readfds); - FD_SET(ua_socket->tcp.transmit_server_listen_socket, &exceptfds); - if(ua_socket->tcp.transmit_server_listen_socket> max_fd) - max_fd = ua_socket->tcp.transmit_server_listen_socket; - } - - tv.tv_sec = 1; - tv.tv_usec = 0; - - ret = select(max_fd + 1, &readfds, NULL, &exceptfds, &tv); - - if(ua_debug_print_en){ - ua_printf(UA_INFO, "uart adapter test select ret = %x",ret); - } - if(ret > 0){ -#if UA_PS_ENABLE - //printf("select get lock \r\n"); - acquire_wakelock(UA_WAKELOCK); - ua_socket->tcp.tcp_ps = 0; - ua_socket->tcp.tcp_ps_cnt = 0; -#endif - - uartadapter_tcp_except_handler(ua_socket, &exceptfds); - - if(ua_socket->tcp.chat_socket != -1 && FD_ISSET(ua_socket->tcp.chat_socket, &readfds)){ - uartadapter_tcp_chat_socket_handler(ua_socket, tcp_rxbuf); - } - - if(ua_socket->tcp.control_socket != -1 && FD_ISSET(ua_socket->tcp.control_socket, &readfds)){ - uartadapter_tcp_control_socket_handler(ua_socket); - } - - if(ua_socket->tcp.transmit_recv_socket != -1 && FD_ISSET(ua_socket->tcp.transmit_recv_socket, &readfds)){ - uartadapter_tcp_transmit_socket_handler(ua_socket, tcp_rxbuf); - } - - if(ua_socket->tcp.chat_server_listen_socket!= -1 && FD_ISSET(ua_socket->tcp.chat_server_listen_socket, &readfds)){ - uartadapter_tcp_chat_listen_socket_handler(ua_socket); - } - - if(ua_socket->tcp.control_server_listen_socket!= -1 && FD_ISSET(ua_socket->tcp.control_server_listen_socket, &readfds)){ - uartadapter_tcp_control_listen_socket_handler(ua_socket); - } - - if(ua_socket->tcp.transmit_server_listen_socket!= -1 && FD_ISSET(ua_socket->tcp.transmit_server_listen_socket, &readfds)){ - uartadapter_tcp_transmit_listen_socket_handler(ua_socket); - } - - - } -#if UA_PS_ENABLE - else{ - ua_socket->tcp.tcp_ps_cnt++; - if(ua_socket->tcp.tcp_ps_cnt > 5){ - ua_socket->tcp.tcp_ps_cnt = 5; - ua_socket->tcp.tcp_ps = 1; - if(ua_socket->uart.uart_ps && ua_socket->tcp.tcp_ps){ - release_wakelock(UA_WAKELOCK); - } - } - } -#endif - } - - //vTaskDelete(NULL); -} - -#define _________WIFI__RELATED________________________ - -int uartadapter_connect_wifi(rtw_network_info_t *p_wifi, uint32_t channel, uint8_t pscan_config) -{ - int retry = 3; - rtw_wifi_setting_t setting; - int ret; - while (1) { - if(wifi_set_pscan_chan((uint8_t *)&channel, &pscan_config, 1) < 0){ - ua_printf(UA_ERROR, "wifi set partial scan channel fail"); - ret = SC_TARGET_CHANNEL_SCAN_FAIL; - return ret; - } - - ret = wifi_connect( - NULL, - 0, - (char*)p_wifi->ssid.val, - p_wifi->security_type, - (char*)p_wifi->password, - p_wifi->key_id, - NULL); - - if (ret == RTW_SUCCESS) { - ret = LwIP_DHCP(0, DHCP_START); - wifi_get_setting(WLAN0_NAME, &setting); - wifi_show_setting(WLAN0_NAME, &setting); - if (ret == DHCP_ADDRESS_ASSIGNED) - return SC_SUCCESS; - else - return SC_DHCP_FAIL; - } - - if (retry == 0) { - ret = SC_JOIN_BSS_FAIL; - break; - } - retry --; - } - - return ret; -} - - -static int uartadapter_load_wifi_config() -{ - flash_t flash; - struct wlan_fast_reconnect *data; - uint32_t channel; - uint8_t pscan_config; - char key_id; - rtw_network_info_t wifi = {0}; - int ret = SC_SUCCESS; - - - data = (struct wlan_fast_reconnect *)rtw_zmalloc(sizeof(struct wlan_fast_reconnect)); - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, FAST_RECONNECT_DATA, sizeof(struct wlan_fast_reconnect), (uint8_t *)data); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - if(*((uint32_t *) data) != ~0x0){ - memcpy(psk_essid, data->psk_essid, sizeof(data->psk_essid)); - memcpy(psk_passphrase, data->psk_passphrase, sizeof(data->psk_passphrase)); - memcpy(wpa_global_PSK, data->wpa_global_PSK, sizeof(data->wpa_global_PSK)); - memcpy(&channel, &(data->channel), 4); - sprintf(&key_id,"%d",(channel >> 28)); - channel &= 0xff; - pscan_config = PSCAN_ENABLE | PSCAN_FAST_SURVEY; - //set partial scan for entering to listen beacon quickly - //wifi_set_pscan_chan((uint8_t *)&channel, &pscan_config, 1); - - //set wifi connect - wifi.ssid.len = (int)strlen((char*)psk_essid); - memcpy(wifi.ssid.val, psk_essid, wifi.ssid.len); - wifi.key_id = key_id; - - //open mode - if(!strlen((char*)psk_passphrase)){ - wifi.security_type = RTW_SECURITY_OPEN; - } - //wep mode - else if( strlen((char*)psk_passphrase) == 5 || strlen((char*)psk_passphrase) == 13){ - wifi.security_type = RTW_SECURITY_WEP_PSK; - wifi.password = (unsigned char *)psk_passphrase; - wifi.password_len = (int)strlen((char const *)psk_passphrase); - } - //WPA/WPA2 - else{ - wifi.security_type = RTW_SECURITY_WPA2_AES_PSK; - wifi.password = (unsigned char *)psk_passphrase; - wifi.password_len = (int)strlen((char const *)psk_passphrase); - } - - ret = uartadapter_connect_wifi(&wifi, channel, pscan_config); - - //print_simple_config_result((enum ua_sc_result)ret); - - if(data) - rtw_mfree((u8*)data, sizeof(sizeof(struct wlan_fast_reconnect))); - - if(ret == SC_SUCCESS) - return RTW_SUCCESS; - else - return RTW_ERROR; - }else{ - ua_printf(UA_INFO, "No AP Profile read from FLASH, start simple configure"); - - if(data) - rtw_mfree((u8*)data, sizeof(sizeof(struct wlan_fast_reconnect))); - - return RTW_ERROR; - } -} - -#if CONFIG_INCLUDE_SIMPLE_CONFIG -int uartadapter_simple_config(char *pin_code){ - - enum sc_result ret = SC_ERROR; - wifi_enter_promisc_mode(); - if(init_test_data(pin_code) == 0){ - filter_add_enable(); - ret = simple_config_test(NULL); - //print_simple_config_result(ret); - remove_filter(); - if(ret == SC_SUCCESS) - return RTW_SUCCESS; - else - return RTW_ERROR; - }else{ - return RTW_ERROR; - } -} -#endif - -#ifdef MDNS_LIB_EN -#define _________MDNS__RELATED________________________ -static void uartadapter_mdns_start(ua_socket_t *ua_socket, int is_restart) -{ - TXTRecordRef txtRecord; - unsigned char txt_buf[100] = {0}; // use fixed buffer for text record to prevent malloc/free - unsigned char txt_buf2[100] = {0}; // use fixed buffer for text record to prevent malloc/free - struct sockaddr_in server_addr; - int server_addr_len = sizeof(server_addr); - - struct netif * pnetif = &xnetif[0]; - - if(is_restart){ - ua_printf(UA_INFO, "Uart Adapter mDNS Restart"); - mDNSResponderDeinit(); - vTaskDelay(1000); - } - - ua_printf(UA_DEBUG, "Uart Adapter mDNS Init"); - - if(mDNSResponderInit() == 0) { - ua_printf(UA_INFO, "mDNS Register service"); - char hostname[32] = {0}; //AMEBA_UART-MODE - u32 prefix_len = strlen("AMEBA_"); - sprintf(hostname, "AMEBA_"); - sprintf(hostname+prefix_len, "%02x%02x%02x%02x%02x%02x", - pnetif->hwaddr[0], pnetif->hwaddr[1], pnetif->hwaddr[2], - pnetif->hwaddr[3], pnetif->hwaddr[4], pnetif->hwaddr[5]); - - sprintf(txt_buf2, "groupid:%d, tcpserver:%d", ua_socket->tcp.group_id, ua_socket->tcp.server_port); - TXTRecordCreate(&txtRecord, sizeof(txt_buf), txt_buf); - TXTRecordSetValue(&txtRecord, "groupid", strlen(txt_buf2), txt_buf2); - - ua_socket->dnsServiceRef = mDNSRegisterService(hostname, "_uart_data._tcp", "local", 5001, &txtRecord); - if(ua_socket->dnsServiceRef == NULL) - ua_printf(UA_ERROR, "mdns data service register failed!"); - ua_socket->dnsServiceRef2 = mDNSRegisterService(hostname, "_uart_control._tcp", "local", 6001, &txtRecord); - if(ua_socket->dnsServiceRef2 == NULL) - ua_printf(UA_ERROR, "mdns control service register failed!"); - TXTRecordDeallocate(&txtRecord); - - }else{ - ua_printf(UA_INFO, "mDNS Init Failed"); - } - - //vTaskDelete(NULL); -} -#endif - - -#define _________INIT__RELATED________________________ -static void uartadapter_auto_reconnect(void* param) -{ - ua_socket_t *ua_socket = (ua_socket_t *)param; - uint32_t IPaddress, IPaddress2; - uint8_t iptab[4], iptab2[4]; - //int ret = 0; - - ua_reconnect_started = 1; - -#if CONFIG_AUTO_RECONNECT - wifi_set_autoreconnect(0); -#endif - vTaskDelay(1000); - while(uartadapter_load_wifi_config() != RTW_SUCCESS){ - vTaskDelay(2000); - } -#if CONFIG_AUTO_RECONNECT - wifi_set_autoreconnect(1); -#endif - - ua_printf(UA_INFO, "uart adapter reconnect successful"); - //uartadapter_gpio_led_mode(ua_global_socket, UART_ADAPTER_LED_OFF); - - if(0 == memcmp(&ua_socket->ip, &xnetif[0].ip_addr, sizeof(ip_addr_t))){ - IPaddress = ua_socket->ip.addr; - iptab[0] = (uint8_t)(IPaddress >> 24); - iptab[1] = (uint8_t)(IPaddress >> 16); - iptab[2] = (uint8_t)(IPaddress >> 8); - iptab[3] = (uint8_t)(IPaddress); - ua_printf(UA_INFO, "reconnect IP address no change, %d.%d.%d.%d", iptab[3], iptab[2], iptab[1], iptab[0]); - }else{ - IPaddress = ua_socket->ip.addr; - iptab[0] = (uint8_t)(IPaddress >> 24); - iptab[1] = (uint8_t)(IPaddress >> 16); - iptab[2] = (uint8_t)(IPaddress >> 8); - iptab[3] = (uint8_t)(IPaddress); - IPaddress2 = xnetif[0].ip_addr.addr; - iptab2[0] = (uint8_t)(IPaddress2 >> 24); - iptab2[1] = (uint8_t)(IPaddress2 >> 16); - iptab2[2] = (uint8_t)(IPaddress2 >> 8); - iptab2[3] = (uint8_t)(IPaddress2); - ua_printf(UA_INFO, "reconnect IP address changed from %d.%d.%d.%d to %d.%d.%d.%d", iptab[3], iptab[2], iptab[1], iptab[0], iptab2[3], iptab2[2], iptab2[1], iptab2[0]); - memcpy(&ua_socket->ip, &xnetif[0].ip_addr, sizeof(ip_addr_t)); - ua_reconnect_ip_change = 1; - - ua_printf(UA_INFO,"IP changed, remove TCP information in FLASH!"); - ua_socket->tcp.group_id = 0; - ua_socket->tcp.client_port = 0; - ua_socket->tcp.server_port = 0; - memset(ua_socket->tcp.client_ip, 0, 16); - -#ifdef MDNS_LIB_EN - uartadapter_mdns_start(ua_socket, 1); -#endif - } - - - ua_reconnect_started = 0; - vTaskDelete(NULL); -} - -void uartadapter_auto_connect(void *param) -{ - int ret = 0; - ua_socket_t *ua_socket = (ua_socket_t *)param; - - UA_SOCKET_CHECK(ua_socket); - - if(wifi_is_ready_to_transceive(RTW_STA_INTERFACE) == RTW_SUCCESS) { - ua_printf(UA_INFO, "wifi connect successfully!"); - }else{ -#if CONFIG_AUTO_RECONNECT - wifi_set_autoreconnect(0); -#endif -RETRY: - vTaskDelay(2000); - ret = uartadapter_load_wifi_config(); - if(ret != RTW_SUCCESS){ - vTaskDelay(2000); -#if CONFIG_INCLUDE_SIMPLE_CONFIG - ret = uartadapter_simple_config(NULL); - if(ret != RTW_SUCCESS){ - ua_printf(UA_INFO, "Simple configure connect failed, try again!"); - goto RETRY; - } -#endif - } -#if CONFIG_AUTO_RECONNECT - wifi_set_autoreconnect(1); -#endif - } - - ua_wifi_connected = 1; - //uartadapter_gpio_led_mode(ua_global_socket, UART_ADAPTER_LED_OFF); - - memcpy(&ua_socket->ip, &xnetif[0].ip_addr, sizeof(ip_addr_t)); - - if(!sys_thread_new("tcp data server", uartadapter_tcp_chat_server_thread, (void *)ua_socket, 256, UA_UART_THREAD_PRIORITY)) - ua_printf(UA_ERROR, "%s sys_thread_new data server failed\n", __FUNCTION__); - - vTaskDelay(50); - if(!sys_thread_new("tcp control server", uartadapter_tcp_control_server_thread, (void *)ua_socket, 256, UA_UART_THREAD_PRIORITY)) - ua_printf(UA_ERROR, "%s sys_thread_new control server failed\n", __FUNCTION__); - - vTaskDelay(50); - - if(!sys_thread_new("tcp select", uartadapter_tcp_select_thread, (void *)ua_socket, 768, UA_UART_THREAD_PRIORITY)) - ua_printf(UA_ERROR, "%s sys_thread_new tcp select failed\n", __FUNCTION__); - - vTaskDelay(50); - - uartadapter_control_read_tcp_info_and_connect(ua_socket); - - vTaskDelay(50); -#ifdef MDNS_LIB_EN - uartadapter_mdns_start(ua_socket, 0); - - vTaskDelay(50); -#endif - - ua_printf(UA_INFO, "[MEM] After auao connect, available heap %d", xPortGetFreeHeapSize()); - - /* Kill init thread after all init tasks done */ - vTaskDelete(NULL); -} - -void uartadapter_exception_thread(void *param) -{ - int ret = 0; - unsigned int tick_start; - unsigned int tick_current; - int pin_high = 0; - int address = FAST_RECONNECT_DATA; - - ua_socket_t *ua_socket = (ua_socket_t *)param; - - while(RtlDownSema(&ua_exception_sema) == pdTRUE){ - if(ua_gpio_irq_happen){ - pin_high = 0; - tick_start = xTaskGetTickCount(); - tick_current = xTaskGetTickCount(); - while(tick_current - tick_start < 3000){ - if (gpio_read(&ua_socket->gpio.gpio_btn)){ - pin_high = 1; - break; - }else{ - tick_current = xTaskGetTickCount(); - } - vTaskDelay(10); - } - - ua_gpio_irq_happen = 0; - if(!pin_high){ - ret = uartadapter_flasherase(address, sizeof(rtw_wifi_config_t)); - if(ret < 0){ - ua_printf(UA_ERROR, "flash erase error!"); - } - - ret = uartadapter_flasherase(UA_FAST_RECONNECT_TCP_DATA, sizeof(ua_tcp_socket_t)); - if(ret < 0){ - ua_printf(UA_ERROR, "flash erase error!"); - } - - uartadapter_systemreload(); - } - } - } - - vTaskDelete(NULL); -} - -ua_socket_t* uartadapter_socket_init() -{ - ua_socket_t* ua_socket = NULL; - //int ret = 0; - - ua_socket = pvPortMalloc(sizeof(ua_socket_t)); - - if(NULL == ua_socket){ - ua_printf(UA_ERROR, "Allocate uart adapter socket failed."); - goto Exit2; - } - - ua_socket->uart.rcv_ch = 0; - ua_socket->uart.overlap = 0; - ua_socket->uart.recv_bytes = 0; - ua_socket->uart.pread = 0; - ua_socket->uart.pwrite = 0; - ua_socket->uart.tick_last_update = 0; - ua_socket->uart.tick_current = 0; - ua_socket->uart.rx_cnt = 0; - ua_socket->uart.miss_cnt = 0; - ua_socket->uart.tx_busy = 0; - RtlInitSema(&ua_socket->uart.action_sema, 0); - RtlInitSema(&ua_socket->uart.tcp_tx_rx_sema, 1); - RtlInitSema(&ua_socket->uart.dma_tx, 1); - - ua_socket->tcp.chat_socket= -1; - ua_socket->tcp.control_socket= -1; - ua_socket->tcp.chat_server_listen_socket= -1; - ua_socket->tcp.control_server_listen_socket= -1; - - ua_socket->tcp.transmit_recv_socket = -1; - ua_socket->tcp.transmit_send_socket = -1; - ua_socket->tcp.transmit_server_listen_socket = -1; - - ua_socket->tcp.group_id = 0; - ua_socket->tcp.server_port = 0; - ua_socket->tcp.client_port = 0; - memset(ua_socket->tcp.client_ip, 0, 16); - - ua_socket->tcp.send_flag = 0; - ua_socket->tcp.recv_flag = 0; - ua_socket->tcp.rx_cnt = 0; - ua_socket->tcp.tx_cnt = 0; - - ua_socket->uart.uart_ps = 0; - ua_socket->uart.uart_ps_cnt = 0; - ua_socket->tcp.tcp_ps = 0; - ua_socket->tcp.tcp_ps_cnt = 0; - - ua_socket->dnsServiceRef = NULL; - ua_socket->dnsServiceRef2 = NULL; - - return ua_socket; - -Exit2: - return NULL; - -} - -void uartadapter_disconnect_handler(char *buf, int buf_len, int flags, void *userdata) -{ - if(!ua_wifi_connected || ua_reconnect_started) - return; - - ua_printf(UA_DEBUG, "start uart adapter reconnect thread\r\n"); - //uartadapter_gpio_led_mode(ua_global_socket, UART_ADAPTER_LED_FAST_TWINKLE); - - if(xTaskCreate(uartadapter_auto_reconnect, ((const char*)"reconnect"), 512, (void *)ua_global_socket, UA_UART_THREAD_PRIORITY, NULL) != pdPASS) - ua_printf(UA_ERROR, "%s xTaskCreate(uart_rx) failed", __FUNCTION__); - -} - -int uartadapter_init() -{ - int ret = 0; - - RtlInitSema(&ua_print_sema, 1); - - ua_printf(UA_INFO, "==============>%s()\n", __func__); - - ua_global_socket = uartadapter_socket_init(); - if(ua_global_socket == NULL){ - ua_printf(UA_ERROR, "ua_socket init failed"); - ret = -1; - goto Exit; - } - -#if !UA_PS_ENABLE - acquire_wakelock(UA_WAKELOCK); -#endif - - RtlInitSema(&ua_exception_sema, 0); - - uartadapter_uart_init(ua_global_socket); - - uartadapter_gpio_init(ua_global_socket); - //uartadapter_gpio_led_mode(ua_global_socket, UART_ADAPTER_LED_FAST_TWINKLE); - - wifi_reg_event_handler(WIFI_EVENT_DISCONNECT, uartadapter_disconnect_handler, NULL); - - if(xTaskCreate(uartadapter_uart_rx_thread, ((const char*)"uart_rx"), 256, (void *)ua_global_socket, UA_UART_THREAD_PRIORITY, NULL) != pdPASS) - ua_printf(UA_ERROR, "%s xTaskCreate(uart_rx) failed", __FUNCTION__); - - vTaskDelay(50); - - if(xTaskCreate(uartadapter_auto_connect, ((const char*)"auto connnect"), 1024, (void *)ua_global_socket, UA_UART_THREAD_PRIORITY, NULL) != pdPASS) - ua_printf(UA_ERROR, "%s xTaskCreate(auao connnect) failed", __FUNCTION__); - - vTaskDelay(50); - - if(xTaskCreate(uartadapter_exception_thread, ((const char*)"uart main"), 128, (void *)ua_global_socket, UA_UART_THREAD_PRIORITY, NULL) != pdPASS) - ua_printf(UA_ERROR, "%s xTaskCreate(auao connnect) failed", __FUNCTION__); - - return 0; -Exit: - ua_printf(UA_ERROR, "%s(): Initialization failed!", __func__); - return ret; -} - -void example_uart_adapter_init() -{ - // Call back from wlan driver after wlan init done - p_wlan_uart_adapter_callback = uartadapter_init; -} - -#define _________CMD__RELATED________________________ -void uartadapter_print_irq_rx_count(ua_socket_t *ua_socket) -{ - UA_SOCKET_CHECK(ua_socket); - - ua_printf(UA_INFO, "ua_tick_last_update: %d!\n", ua_socket->uart.tick_last_update); - ua_printf(UA_INFO, "ua_tick_current: %d!\n", ua_socket->uart.tick_current); - ua_printf(UA_INFO, "ua current tick: %d!\n", xTaskGetTickCount()); - ua_printf(UA_INFO, "ua_pwrite: %d!\n", ua_socket->uart.pwrite); - ua_printf(UA_INFO, "ua_pread: %d!\n", ua_socket->uart.pread); - ua_printf(UA_INFO, "ua_overlap: %d!\n", ua_socket->uart.overlap); - ua_printf(UA_INFO, "ua_rcv_ch: %d!\n", ua_socket->uart.rcv_ch); - ua_printf(UA_INFO, "ua_uart_recv_bytes: %d!\n", ua_socket->uart.recv_bytes); - ua_printf(UA_INFO, "irq_rx_cnt: %d!\n", ua_socket->uart.rx_cnt); - ua_printf(UA_INFO, "irq_miss_cnt: %d!\n", ua_socket->uart.miss_cnt); - ua_printf(UA_INFO, "tcp_tx_cnt: %d!\n", ua_socket->tcp.tx_cnt); - ua_printf(UA_INFO, "tcp_rx_cnt: %d!\n", ua_socket->tcp.rx_cnt); - ua_printf(UA_INFO, "tcp_send_flag: %d!\n", ua_socket->tcp.send_flag); - ua_printf(UA_INFO, "tcp_recv_flag: %d!\n", ua_socket->tcp.recv_flag); - ua_printf(UA_INFO, "tcp_chat_socket: %d!\n", ua_socket->tcp.chat_socket); - ua_printf(UA_INFO, "tcp_control_socket: %d!\n", ua_socket->tcp.control_socket); - ua_printf(UA_INFO, "tcp_transmit_recv_socket: %d!\n", ua_socket->tcp.transmit_recv_socket); - ua_printf(UA_INFO, "tcp_transmit_send_socket: %d!\n", ua_socket->tcp.transmit_send_socket); - ua_printf(UA_INFO, "tcp_chat_server_listen_socket: %d!\n", ua_socket->tcp.chat_server_listen_socket); - ua_printf(UA_INFO, "tcp_control_server_listen_socket: %d!\n", ua_socket->tcp.control_server_listen_socket); - ua_printf(UA_INFO, "tcp_transmit_server_listen_socket: %d!\n", ua_socket->tcp.transmit_server_listen_socket); - -} - -void uartadapter_reset_irq_rx_count(ua_socket_t *ua_socket) -{ - UA_SOCKET_CHECK(ua_socket); - - ua_socket->uart.rx_cnt = 0; - ua_socket->uart.miss_cnt = 0; - ua_socket->tcp.rx_cnt = 0; - ua_socket->tcp.tx_cnt = 0; -} - -void uartadapter_set_debug_print(bool enable) -{ - ua_debug_print_en = enable; -} - -void cmd_uart_adapter(int argc, char **argv) -{ - if(argc < 2) { - printf(" input error\n"); - return; - } - - if(strcmp(argv[1], "help") == 0){ - printf("UART THROUGH COMMAND LIST:\n"); - printf("==============================\n"); - printf("tuart_baud\n"); - printf("\n"); - }else if(strcmp(argv[1], "irq_rx_get") == 0){ - uartadapter_print_irq_rx_count(ua_global_socket); - }else if(strcmp(argv[1], "debug_print_en") == 0){ - uartadapter_set_debug_print(TRUE); - }else if(strcmp(argv[1], "debug_print_dis") == 0){ - uartadapter_set_debug_print(FALSE); - }else if(strcmp(argv[1], "irq_rx_reset") == 0){ - uartadapter_reset_irq_rx_count(ua_global_socket); - }else if(strcmp(argv[1], "tcp") == 0){ - unsigned int port; - if(strcmp(argv[2], "-c") == 0 || strcmp(argv[2], "c") == 0){ - strncpy(ua_tcp_server_ip, argv[3], (strlen(argv[3])>16)?16:strlen(argv[3])); - port = atoi(argv[4]); - if(xTaskCreate(uartadapter_tcp_transmit_client_thread, ((const char*)"tclient"), 256, (void *)port, UA_UART_THREAD_PRIORITY, NULL) != pdPASS) - ua_printf(UA_ERROR, "%s xTaskCreate(tcp client) failed", __FUNCTION__); - }else if(strcmp(argv[2], "-s") == 0 || strcmp(argv[2], "s") == 0){ - port = atoi(argv[3]); - if(xTaskCreate(uartadapter_tcp_transmit_server_thread, ((const char*)"tserver"), 256, (void *)port, UA_UART_THREAD_PRIORITY, NULL) != pdPASS) - ua_printf(UA_ERROR, "%s xTaskCreate(tcp server) failed", __FUNCTION__); - } - }else if(strcmp(argv[1], "uart_baud") == 0){ - uartadapter_uart_baud(ua_global_socket, atoi(argv[2])); - }else if(strcmp(argv[1], "uart_para") == 0){ - uartadapter_uart_para(ua_global_socket, atoi(argv[2]), atoi(argv[3]), atoi(argv[4])); - }else if(strcmp(argv[1], "led") == 0){ - //uartadapter_gpio_led_mode(ua_global_socket, atoi(argv[2])); - }else{ - printf("Can not find the input command!\n"); - } -} - -#endif // #if CONFIG_UART_SOCKET diff --git a/Firmware/RTLGDB/USDK/component/common/application/uart_adapter/uart_adapter.h b/Firmware/RTLGDB/USDK/component/common/application/uart_adapter/uart_adapter.h deleted file mode 100644 index 89f526f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/uart_adapter/uart_adapter.h +++ /dev/null @@ -1,272 +0,0 @@ -#include "osdep_api.h" -#include "serial_api.h" -#include -#include "freertos_pmu.h" -#include - -#if CONFIG_UART_SOCKET - -/****************************************************** - * Macros - ******************************************************/ -#define UA_ERROR 0 -#define UA_WARNING 1 -#define UA_INFO 2 -#define UA_DEBUG 2 //pvvx! было 3 -#define UA_NONE 0xFF -#define UA_DEBUG_LEVEL UA_INFO - -#define UA_UART_THREAD_PRIORITY 5 -#define UA_UART_THREAD_STACKSIZE 512 - -#define UA_TCP_SERVER_FD_NUM 1 -#define UA_TCP_CLIENT_FD_NUM 1 - -#define UA_UART_RECV_BUFFER_LEN 8196 -#define UA_UART_FRAME_LEN 1400 -#define UA_UART_MAX_DELAY_TIME 100 - -#define UA_CHAT_SOCKET_PORT 5001 -#define UA_CONTROL_SOCKET_PORT 6001 - -#define UA_UART_TX_PIN PA_4 -#define UA_UART_RX_PIN PA_0 -#define UA_UART_RTS_PIN PA_2 -#define UA_UART_CTS_PIN PA_1 - -#define UA_GPIO_LED_PIN PC_5 -#define UA_GPIO_IRQ_PIN PC_4 - -#define UA_CONTROL_PREFIX "AMEBA_UART" - -#define UA_PS_ENABLE 0 -#define UA_GPIO_WAKEUP_PIN PC_3 -#define UA_WAKELOCK WAKELOCK_USER_BASE - -#define UA_FAST_RECONNECT_TCP_DATA (0x80000 - 0x2000) - - -#if (UA_DEBUG_LEVEL== UA_NONE) -#define ua_printf(level, fmt, arg...) -#else -#define ua_printf(level, fmt, arg...) \ -do {\ - if (level <= UA_DEBUG_LEVEL) {\ - if (level <= UA_ERROR) {\ - RtlDownSema(&ua_print_sema);\ - printf("\r\nERROR: " fmt, ##arg);\ - RtlUpSema(&ua_print_sema);\ - } \ - else {\ - RtlDownSema(&ua_print_sema);\ - printf("\r\n"fmt, ##arg);\ - RtlUpSema(&ua_print_sema);\ - } \ - }\ -}while(0) -#endif - -#define UA_PRINT_DATA(_HexData, _HexDataLen) \ - if(UA_DEBUG_LEVEL == UA_DEBUG) \ - { \ - int __i; \ - u8 *ptr = (u8 *)_HexData; \ - printf("--------Len=%d\n\r", _HexDataLen); \ - for( __i=0; __i<(int)_HexDataLen; __i++ ) \ - { \ - printf("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?" ":" "); \ - if (((__i + 1) % 16) == 0) printf("\n\r"); \ - } \ - printf("\n\r"); \ - } - -#define UA_SOCKET_CHECK(_ua_socket) \ - if(_ua_socket == NULL) \ - { \ - printf("ERROR: ua_socket = NULL\n\r"); \ - return; \ - } - -#define UA_SOCKET_CHECK_2(_ua_socket) \ - if(_ua_socket == NULL) \ - { \ - printf("ERROR: ua_socket = NULL\n\r"); \ - return -1; \ - } - -/****************************************************** - * Constants - ******************************************************/ -typedef enum -{ - UART_ADAPTER_LED_ON = 0, - UART_ADAPTER_LED_OFF = 1, - UART_ADAPTER_LED_FAST_TWINKLE = 2, - UART_ADAPTER_LED_SLOW_TWINKLE = 3, -}ua_led_mode_t; - -typedef enum -{ - UART_CTRL_MODE_SET_REQ = 0, - UART_CTRL_MODE_SET_RSP = 1, - UART_CTRL_MODE_GET_REQ = 2, - UART_CTRL_MODE_GET_RSP = 3, -}ua_ctrl_mode_t; - -typedef enum -{ - UART_CTRL_TYPE_BAUD_RATE = 0x01, - UART_CTRL_TYPE_WORD_LEN = 0x02, - UART_CTRL_TYPE_PARITY = 0x04, - UART_CTRL_TYPE_STOP_BIT = 0x08, - UART_CTRL_TYPE_TCP_SERVER_CREATE = 0x10, - UART_CTRL_TYPE_TCP_SERVER_DELETE = 0x20, - UART_CTRL_TYPE_TCP_CLIENT_CONNECT = 0x40, - UART_CTRL_TYPE_TCP_CLIENT_DISCONNECT = 0x80, - UART_CTRL_TYPE_TCP_GROUP_ID = 0x100, -}ua_ctrl_type_t; - -enum sc_result { - SC_ERROR = -1, /* default error code*/ - SC_NO_CONTROLLER_FOUND = 1, /* cannot get sta(controller) in the air which starts a simple config session */ - SC_CONTROLLER_INFO_PARSE_FAIL, /* cannot parse the sta's info */ - SC_TARGET_CHANNEL_SCAN_FAIL, /* cannot scan the target channel */ - SC_JOIN_BSS_FAIL, /* fail to connect to target ap */ - SC_DHCP_FAIL, /* fail to get ip address from target ap */ - /* fail to create udp socket to send info to controller. note that client isolation - must be turned off in ap. we cannot know if ap has configured this */ - SC_UDP_SOCKET_CREATE_FAIL, - SC_SUCCESS, /* default success code */ -}; - - -/****************************************************** - * Structures - ******************************************************/ - typedef struct _ua_uart_param_t -{ - u8 WordLen; - u8 Parity; - u8 StopBit; - u8 FlowControl; - int BaudRate; -}ua_uart_param_t; - - -typedef struct _ua_uart_socket_t -{ - int fd; - char rcv_ch; - volatile char overlap; - int recv_bytes; - volatile int pread; - volatile int pwrite; - - volatile unsigned int tick_last_update; - unsigned int tick_current; - - volatile int tx_busy; - - volatile int uart_ps; - volatile int uart_ps_cnt; - - char recv_buf[UA_UART_RECV_BUFFER_LEN]; - - long rx_cnt; - long miss_cnt; - - serial_t uart_sobj; - ua_uart_param_t uart_param; - - _Sema action_sema; - _Sema tcp_tx_rx_sema; - _Sema dma_tx; -}ua_uart_socket_t; - -typedef struct _ua_tcp_socket_t -{ - int chat_socket; - int control_socket; - int chat_server_listen_socket; - int control_server_listen_socket; - - int transmit_recv_socket; - int transmit_send_socket; - int transmit_server_listen_socket; - - int group_id; - u32 server_port; - u32 client_port; - char client_ip[16]; - - - int send_flag; - int recv_flag; - long rx_cnt; - long tx_cnt; - - volatile int tcp_ps; - volatile int tcp_ps_cnt; -}ua_tcp_socket_t; - -typedef struct _ua_gpio_t -{ - gpio_t gpio_led; - gpio_t gpio_btn; - gpio_irq_t gpio_btn_irq; - gtimer_t gpio_timer; -}ua_gpio_t; - -typedef struct _ua_socket_t -{ - ua_uart_socket_t uart; - ua_tcp_socket_t tcp; - ua_gpio_t gpio; - ip_addr_t ip; - DNSServiceRef dnsServiceRef; - DNSServiceRef dnsServiceRef2; -}ua_socket_t; - -typedef struct _ua_mbox_buffer -{ - char data[UA_UART_FRAME_LEN]; - int data_len; -}ua_mbox_buffer_t; - -//Save Uart Settings when get uart information -typedef struct _ua_uart_get_str -{ - int BaudRate; //The baud rate - char number; //The number of data bits - char parity; //The parity(0: none, 1:odd, 2:evn, default:0) - char StopBits; //The number of stop bits - char FlowControl; //support flow control is 1 -}ua_uart_get_str; - -//Uart Setting information -typedef struct _ua_uart_set_str -{ - char UartName[8]; // the name of uart - int BaudRate; //The baud rate - char number; //The number of data bits - char parity; //The parity(default NONE) - char StopBits; //The number of stop bits - char FlowControl; //support flow control is 1 -}ua_uart_set_str; - - -int uartadapter_init(); -void uartadapter_tcp_send_data(ua_socket_t *ua_socket, char *buffer, int size); -void uartadapter_tcp_send_control(ua_socket_t *ua_socket, char *buffer, int size); -void uartadapter_tcp_transmit_server_thread(void *param); -void uartadapter_tcp_transmit_client_thread(void *param); -int uartadapter_tcpclient(ua_socket_t *ua_socket, const char *host_ip, unsigned short usPort); -void uartadapter_tcp_transmit_client_forever_thread(void *param); - - -void example_uart_adapter_init(); -void cmd_uart_adapter(int argc, char **argv); - -void uartadapter_tcp_transmit_socket_handler(ua_socket_t *ua_socket, char *tcp_rxbuf); - -#endif // CONFIG_UART_SOCKET diff --git a/Firmware/RTLGDB/USDK/component/common/application/wigadget/cloud_link.c b/Firmware/RTLGDB/USDK/component/common/application/wigadget/cloud_link.c deleted file mode 100644 index 2206168..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/wigadget/cloud_link.c +++ /dev/null @@ -1,83 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include "wifi_conf.h" -#include "wifi_ind.h" -#include "google_nest.h" -#include "flash_api.h" -#include "wigadget.h" -#include -#include "lwip_netconf.h" -#include "shtc1.h" - -#define CLOUD_PORT 443 -extern struct netif xnetif[NET_IF_NUM]; - -void cloud_link_task(void *param){ - googlenest_context googlenest; - unsigned char URI[64]; - unsigned char data[97] = {0}; - unsigned char host_addr[64] = {0}; - flash_t cloud_flash; - u8 *mac = (u8 *)LwIP_GetMAC(&xnetif[0]); - char i[16], j[16]; - float temperature = 1.123f; - float humidity = 2.456f; - int ret = 0; - - vTaskDelay(2000); - - - sprintf(URI, "ht_sensor/%02x%02x%02x%02x%02x%02x.json", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); - - memset(host_addr, 0, sizeof(host_addr)); - if(flash_stream_read(&cloud_flash, FLASH_IOT_DATA, 97, (uint8_t *) data) == 1){ - - memset(host_addr, 0 , 64); - memcpy(host_addr, data+33, 64); - while(1) { - printf("\n=====>START CLOUD LINKING\n"); - memset(i, 0, 16); - memset(j, 0, 16); -#if PSEUDO_DATA - sprintf(i,"%.2f", temperature++); - sprintf(j, "%.2f", humidity++); - if(temperature > 60) - temperature = 1.123f; - if(humidity > 98) - humidity = 2.456f; -#else - ret = SHTC_GetTempAndHumi(&temperature, &humidity); - sprintf(i,"%.2f", temperature); - sprintf(j, "%.2f", humidity); -#endif - if(ret < 0) - printf("\n<-----LOCAL LINK FAILED!(get infor failed)\n"); - else{ - gen_json_data(i,j, data); - printf("\nCLOUD-LINK--Sending data : \n%s\n", data); - memset(&googlenest, 0, sizeof(googlenest_context)); - if(gn_connect(&googlenest, host_addr, CLOUD_PORT) == 0) { - if(gn_put(&googlenest, URI, data) != 0) - printf("PUT data failed!\n"); - gn_close(&googlenest); - printf("\n<=====CLOUD LINK OK!\n"); - } - else{ - printf("\n<=====CLOUD LINK FAILED!(google nest connecting)\n"); - } - free(data); - vTaskDelay(10000); - } - } - - } - else - printf("\n<=====CLOUD LINK FAILED!(flash reading)\n"); - -} - -void start_cloud_link(void) -{ -if(xTaskCreate(cloud_link_task, ((const char*)"cloud_link_task"), 3584, NULL, tskIDLE_PRIORITY + 4, NULL) != pdPASS) - printf("%s xTaskCreate failed\n", __FUNCTION__); -} diff --git a/Firmware/RTLGDB/USDK/component/common/application/wigadget/cloud_link.h b/Firmware/RTLGDB/USDK/component/common/application/wigadget/cloud_link.h deleted file mode 100644 index 650c1f6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/wigadget/cloud_link.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef CLOUD_LINK_H -#define CLOUD_LINK_THREAD_H - -#include "wigadget.h" - -void start_cloud_link(void); -void cloud_link_task(void *param); - - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/application/wigadget/shtc1.c b/Firmware/RTLGDB/USDK/component/common/application/wigadget/shtc1.c deleted file mode 100644 index 8965c99..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/wigadget/shtc1.c +++ /dev/null @@ -1,186 +0,0 @@ -#include "device.h" -#include "PinNames.h" -#include "osdep_api.h" -#include "i2c_api.h" -#include "pinmap.h" -#include "shtc1.h" -#include "platform_stdlib.h" - -#ifdef CONFIG_I2C_EN - -#define MBED_I2C_MTR_SDA PB_3 -#define MBED_I2C_MTR_SCL PB_2 - -#define MBED_I2C_SLAVE_ADDR0 0x70 -#define POLYNOMIAL 0x131 // P(x) = x^8 + x^5 + x^4 + 1 = 100110001 - -#define MBED_I2C_BUS_CLK 100000 //hz -#define I2C_DATA_MAX_LENGTH 16 - -static uint8_t i2cdata_write[I2C_DATA_MAX_LENGTH]; -static uint8_t i2cdata_read[I2C_DATA_MAX_LENGTH]; -static int i2cdata_read_pos; - -static i2c_t i2cmaster; - -// Sensor Commands -#define READ_ID 0xEFC8 // command: read ID register -#define SOFT_RESET 0x805D // soft resetSample Code for SHTC1 -#define MEAS_T_RH_POLLING 0x7866 // meas. read T first, clock stretching disabled -#define MEAS_T_RH_CLOCKSTR 0x7CA2 // meas. read T first, clock stretching enabled -#define MEAS_RH_T_POLLING 0x58E0 // meas. read RH first, clock stretching disabled -#define MEAS_RH_T_CLOCKSTR 0x5C24 // meas. read RH first, clock stretching enabled - - -static int SHTC1_GetID(uint16_t *id); -static void SHTC1_WriteCommand(uint16_t cmd); -static int SHTC1_Read2BytesAndCrc(uint16_t *data); -static int SHTC1_CheckCrc(uint8_t data[], uint8_t nbrOfBytes, uint8_t checksum); -static float SHTC1_CalcTemperature(uint16_t rawValue); -static float SHTC1_CalcHumidity(uint16_t rawValue); - - -int SHTC_Init(uint16_t *pID) -{ - int error = NO_ERROR; - - DiagPrintf("SHTC1_Init\n"); - - i2c_init((i2c_t*)&i2cmaster, MBED_I2C_MTR_SDA ,MBED_I2C_MTR_SCL); - i2c_frequency((i2c_t*)&i2cmaster,MBED_I2C_BUS_CLK); - - if (pID == NULL ) - return NULL_ERROR; - error = SHTC1_GetID(pID); - - return error; -} - -static int SHTC1_GetID(uint16_t *id) -{ - int error = NO_ERROR; - uint8_t bytes[2]; - uint8_t checksum; - - SHTC1_WriteCommand(READ_ID); - - i2c_read((i2c_t*)&i2cmaster, MBED_I2C_SLAVE_ADDR0, (char*)&i2cdata_read[0], 3, 1); - i2cdata_read_pos = 0; - error = SHTC1_Read2BytesAndCrc(id); - - return error; -} - -static int SHTC1_Read2BytesAndCrc(uint16_t *data) -{ - int error; - int readed; - uint8_t bytes[2]; - uint8_t checksum; - - bytes[0] = i2cdata_read[i2cdata_read_pos++]; - bytes[1] = i2cdata_read[i2cdata_read_pos++]; - checksum = i2cdata_read[i2cdata_read_pos++]; - - error = SHTC1_CheckCrc(bytes, 2, checksum); - *data = (bytes[0] << 8) | bytes[1]; - - return error; -} - -static int SHTC1_CheckCrc(uint8_t data[], uint8_t nbrOfBytes, uint8_t checksum) -{ - uint8_t bit; // bit mask - uint8_t crc = 0xFF; // calculated checksum - uint8_t byteCtr; // byte counter - - for(byteCtr = 0; byteCtr < nbrOfBytes; byteCtr++){ - crc ^= (data[byteCtr]); - for(bit = 8; bit > 0; --bit){ - if(crc & 0x80) - crc = (crc << 1) ^ POLYNOMIAL; - else - crc = (crc << 1); - } - } - - if(crc != checksum) - return CHECKSUM_ERROR; - else - return NO_ERROR; -} - -static void SHTC1_WriteCommand(uint16_t cmd) -{ - int writebytes; - - i2cdata_write[0] = (uint8_t)(cmd >>8); - i2cdata_write[1] = (uint8_t)(cmd&0xFF); - i2c_write((i2c_t*)&i2cmaster, MBED_I2C_SLAVE_ADDR0, &i2cdata_write[0], 2, 1); -} - -static float SHTC1_CalcTemperature(uint16_t rawValue) -{ - return 175.0 * (float)rawValue / 65536.0 - 45.0; -} - -static float SHTC1_CalcHumidity(uint16_t rawValue) -{ - return 100.0 * (float)rawValue / 65536.0; -} - -int SHTC_GetTempAndHumi(float *temp, float *humi) -{ - int error; - uint16_t rawValueTemp; - uint16_t rawValueHumi; - - SHTC1_WriteCommand(MEAS_T_RH_CLOCKSTR); - - i2c_read((i2c_t*)&i2cmaster, MBED_I2C_SLAVE_ADDR0, (char*)&i2cdata_read[0], 6, 1); - i2cdata_read_pos = 0; - error = NO_ERROR; - error |= SHTC1_Read2BytesAndCrc(&rawValueTemp); - error |= SHTC1_Read2BytesAndCrc(&rawValueHumi); - - if ( error == NO_ERROR ) { - *temp = SHTC1_CalcTemperature(rawValueTemp); - *humi = SHTC1_CalcHumidity(rawValueHumi); - } - - return error; -} - -static void example_shtc1_thread(void *param) -{ - int error; - uint16_t shtc1_id; - float temperature = 1.123f; - float humidity = 2.456f; - - DBG_8195A("sleep 10 sec. to wait for UART console\n"); - RtlMsleepOS(10000); - DBG_8195A("start i2c example - SHTC1\n"); - - error = SHTC_Init(&shtc1_id); - if ( error == NO_ERROR ) - DiagPrintf("SHTC1 init ok, id=0x%x\n", shtc1_id); - else { - DiagPrintf("SHTC1 init FAILED!\n"); - for(;;); - } - - while(1){ - error = SHTC_GetTempAndHumi(&temperature, &humidity); - rtl_printf("temp=%f, humidity=%f, error=%d\n", temperature, humidity, error); - RtlMsleepOS(1000); - } -} - -void example_shtc1(void) -{ - if(xTaskCreate(example_shtc1_thread, ((const char*)"example_shtc1_thread"), 512, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) - printf("%s xTaskCreate(init_thread) failed\n", __FUNCTION__); -} - -#endif //#ifdef CONFIG_I2C_EN diff --git a/Firmware/RTLGDB/USDK/component/common/application/wigadget/shtc1.h b/Firmware/RTLGDB/USDK/component/common/application/wigadget/shtc1.h deleted file mode 100644 index f5259dc..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/wigadget/shtc1.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef SHTC1_H -#define SHTC1_H - -#define NO_ERROR 0x00 -#define ACK_ERROR 0x01 -#define CHECKSUM_ERROR 0x02 -#define NULL_ERROR 0x03 - -int SHTC_GetTempAndHumi(float *temp, float *humi); -int SHTC_Init(uint16_t *pID); -void example_shtc1(void); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/application/wigadget/wigadget.c b/Firmware/RTLGDB/USDK/component/common/application/wigadget/wigadget.c deleted file mode 100644 index 3e4cdf4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/wigadget/wigadget.c +++ /dev/null @@ -1,743 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include "wifi_conf.h" -#include "wifi_ind.h" -#include "sockets.h" -#include -#include -#include -#include "flash_api.h" -#include -#include "rom_wac_curve25519-donna.h" -#include "gpio_api.h" -#include "gpio_irq_api.h" -#include "cJSON.h" -#include "cloud_link.h" -#include "wigadget.h" -#include "shtc1.h" - -#if LWIP_SOCKET - -#define PORT 6866 -#define MAX_BUFFER_SIZE 256 -#define ENC_SIZE 64 -#define CONTROL_TYPE 1 -#define GPIO_SOFTAP_RESET_PIN PC_4 - -flash_t iot_flash; -uint8_t aes_key[16]; -static unsigned char tx_buffer[MAX_BUFFER_SIZE]; -static unsigned char rx_buffer[MAX_BUFFER_SIZE]; - -extern struct netif xnetif[NET_IF_NUM]; - -#define DEBUG_IOT 1 - -#define IOT_LOG(level, fmt, ...) printf("\n\r[IOT %s] %s: " fmt "\n", level, __FUNCTION__, ##__VA_ARGS__) -#if DEBUG_IOT == 2 -#define IOT_DEBUG(fmt, ...) IOT_LOG("DEBUG", fmt, ##__VA_ARGS__) -#else -#define IOT_DEBUG(fmt, ...) -#endif -#if DEBUG_IOT -#define IOT_ERROR(fmt, ...) IOT_LOG("ERROR", fmt, ##__VA_ARGS__) -#else -#define IOT_ERROR(fmt, ...) -#endif - -void encrypt_data_aes(unsigned char *plaint_text, unsigned char *enc_data); -void decrypt_data_aes(unsigned char *enc_data, unsigned char *dec_data, int data_len); - - - -#ifdef __GNUC__ -#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) -#else -#define GCC_VERSION 0 -#endif - -/* Test for GCC < 5.4.0 */ -#if GCC_VERSION > 50300 -extern unsigned int _freertos_arc4random(void); -#define wgg_arc4random _freertos_arc4random -// or #define wgg_arc4random _ws_arc4random -#else -static unsigned int wgg_arc4random(void) -{ - unsigned int res = xTaskGetTickCount(); - static unsigned int seed = 0xDEADB00B; - - seed = ((seed & 0x007F00FF) << 7) ^ - ((seed & 0x0F80FF00) >> 8) ^ // be sure to stir those low bits - (res << 13) ^ (res >> 9); // using the clock too! - return seed; - -} -#endif - -static char *iot_itoa(int value) -{ - char *val_str; - int tmp = value, len = 1; - - while((tmp /= 10) > 0) - len ++; - - val_str = (char *) malloc(len + 1); - sprintf(val_str, "%d", value); - - return val_str; -} - - void gen_json_data(char *i, char *j, unsigned char *json_data) -{ - cJSON_Hooks memoryHook; - - memoryHook.malloc_fn = malloc; - memoryHook.free_fn = free; - cJSON_InitHooks(&memoryHook); - memset(json_data, 0, ENC_SIZE); - - - cJSON *IOTJSObject = NULL; - char *data; - - - if((IOTJSObject = cJSON_CreateObject()) != NULL) { - - cJSON_AddItemToObject(IOTJSObject, "TEM", cJSON_CreateString(i)); - cJSON_AddItemToObject(IOTJSObject, "HUM", cJSON_CreateString(j)); - - data = cJSON_Print(IOTJSObject); - memcpy(json_data, data, strlen(data)); - cJSON_Delete(IOTJSObject); - free(data); - } - -} - -void encrypt_data_aes(unsigned char *plaint_text, unsigned char *enc_data) -{ - unsigned char iv[16] = {0}; - unsigned char* iv_bak = "AAAAAAAAAAAAAAAA"; - aes_encrypt_ctx enc_ctx; - - memset(&enc_ctx, 0, sizeof(enc_ctx)); - memset(iv, 0, sizeof(iv)); - memcpy(iv, iv_bak, sizeof(iv)); - memset(enc_data, 0, sizeof(enc_data)); - - aes_init(); - aes_encrypt_key(aes_key, 16, &enc_ctx); - aes_cbc_encrypt(plaint_text, enc_data, ENC_SIZE, iv, &enc_ctx); -} - -void decrypt_data_aes(unsigned char *enc_data, unsigned char *dec_data, int data_len) -{ - unsigned char iv[16] = {0}; - unsigned char* iv_bak = "AAAAAAAAAAAAAAAA"; - aes_decrypt_ctx dec_ctx; - - memset(&dec_ctx, 0, sizeof(dec_ctx)); - memset(iv, 0, sizeof(iv)); - memcpy(iv, iv_bak, sizeof(iv)); - memset(dec_data, 0, sizeof(dec_data)); - - aes_init(); - aes_decrypt_key(aes_key, 16, &dec_ctx); - aes_cbc_decrypt(enc_data, dec_data, data_len, iv, &dec_ctx); - IOT_DEBUG("Decrypt data: %s\r\n",dec_data); -} - -void iotapp_platform_reset(void) -{ - HAL_WRITE32(SYSTEM_CTRL_BASE, 0x14, 0x00000021); - osDelay(100); - HAL_WRITE32(0xE000ED00, 0x0C, (0x5FA << 16) | - (HAL_READ32(0xE000ED00, 0x0C) & (7 << 8)) | - (1 << 2)); - while(1) osDelay(1000); -} - -void iotapp_reset_irq_handler(uint32_t id, gpio_irq_event event) -{ - printf("\n\r\n\r\n\r\n\r<<<<<>>>>>>\n\r\n\r\n\r\n\r"); - flash_erase_sector(&iot_flash, FLASH_IOT_DATA); - iotapp_platform_reset(); -} - -int local_link(unsigned char *tx_data) -{ - int sockfd, newsockfd; - socklen_t client; - struct sockaddr_in serv_addr, cli_addr; - uint8_t rx_data[ENC_SIZE]; - unsigned char enc_data[ENC_SIZE]; - unsigned char dec_data[ENC_SIZE]; - int ret = 0, opt = 1, k = 1, j; - char *result = NULL, *backup = NULL; - unsigned char *data = NULL; - char *delims = ", "; - - sockfd = socket(AF_INET, SOCK_STREAM, 0); - if (sockfd < 0) { - IOT_ERROR("ERROR opening socket"); - ret = -1; - goto exit2; - } - - if((setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char *)&opt, sizeof(opt))) < 0){ - IOT_ERROR("ERROR on setting socket option"); - ret = -1; - goto exit2; - } - - memset((char *)&serv_addr, 0, sizeof(serv_addr)); - serv_addr.sin_family = AF_INET; - serv_addr.sin_addr.s_addr = INADDR_ANY; - serv_addr.sin_port = htons(PORT); - - if (bind(sockfd, (struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) { - IOT_ERROR("ERROR on binding"); - ret = -1; - goto exit2; - } - if(listen(sockfd , 20) < 0){ - IOT_ERROR("ERROR on listening"); - ret = -1; - goto exit2; - } - client = sizeof(cli_addr); - if((newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr,&client)) < 0){ - IOT_ERROR("ERROR on accept"); - ret = -1; - goto exit; - } - if ((ret = read(newsockfd,rx_buffer,sizeof(rx_buffer))) < 0){ - IOT_ERROR("ERROR reading from socket"); - ret = -1; - goto exit; - } - IOT_DEBUG("cmd received: %s, length: %d\r\n",rx_buffer, ret); - -//Changing received data to string - if (!strncmp(rx_buffer, "[", strlen("["))){ - data = rx_buffer + strlen("["); - for(j = 1; j < 5; j++){ - if (data[ret - j] == ']') - data[ret -j] = '\0'; - } - } - else - strcpy(data, rx_buffer); - memset(rx_data, 0, sizeof(rx_data)); - result = strtok_r(data, delims, &backup); - rx_data[0]=(uint8_t)atoi(result); - while((result = strtok_r(NULL, delims, &backup)) != NULL) - rx_data[k++]=(uint8_t)atoi(result); - memset(dec_data, 0, sizeof(dec_data)); - -//Decrpyt the received data - decrypt_data_aes(rx_data, dec_data, 16); - - if(strncmp(dec_data, "request", strlen("request")) == 0){ -//Encrypt the sending data - memset(enc_data, 0, strlen(enc_data)); - encrypt_data_aes(tx_data, enc_data); -//Changing encrpyt data to JAVA type string - for (j = 0; j < ENC_SIZE; j++){ - char *temp; - temp = iot_itoa(enc_data[j]); - if(j == 0) - strcpy(tx_buffer, "["); - strcat(tx_buffer,temp); - if (j == (ENC_SIZE - 1)) - strcat(tx_buffer,"]"); - else - strcat(tx_buffer,","); - free(temp); - temp = NULL; - } - IOT_DEBUG("Data reply to APP: %s\r\nLength of data: %d\r\n", tx_buffer, strlen(tx_buffer)); - - if ((ret = write(newsockfd,tx_buffer,strlen(tx_buffer))) < 0){ - IOT_ERROR("ERROR writing to socket"); - ret = -1; - goto exit; - } - else - IOT_DEBUG("Sending %d bytes data OK!\r\n", ret); - } - else if(strncmp(dec_data, "remove", strlen("remove")) == 0){ - printf("\n\r\n\r\n\r\n\r<<<<<>>>>>>\n\r\n\r\n\r\n\r"); - flash_erase_sector(&iot_flash, FLASH_IOT_DATA); - write(newsockfd,"Remove OK",strlen("Remove OK")); - close(newsockfd); - close(sockfd); - iotapp_platform_reset(); - } - else{ - IOT_ERROR("ERROR wrong KEY or wrong request!"); - write(newsockfd,"The KEY or the request is not correct!",strlen("The KEY or the request is not correct!")); - ret = -1; - goto exit; - } - -exit: - if(close(newsockfd) != 0) - goto exit; - -exit2: - if(close(sockfd) != 0) - goto exit2; - return ret; -} - -static void local_link_task(void *param) -{ - unsigned char data[ENC_SIZE] = {0}; - vTaskDelay(1000); - char i[16], j[16]; - float temperature = 1.123f; - float humidity = 2.456f; - int ret = 0; - - while(1){ - memset(i, 0, 16); - memset(j, 0, 16); -#if PSEUDO_DATA - sprintf(i,"%.2f", temperature++); - sprintf(j, "%.2f", humidity++); - if(temperature > 60) - temperature = 1.123f; - if(humidity > 98) - humidity = 2.456f; -#else - ret = SHTC_GetTempAndHumi(&temperature, &humidity); - sprintf(i,"%.2f", temperature); - sprintf(j, "%.2f", humidity); -#endif - if(ret < 0) - printf("\r\n\r\n<-----LOCAL LINK FAILED!(get infor failed)\r\n\r\n"); - else{ - printf("\r\n\r\n----->START LOCAL LINKING\r\n\r\n"); - gen_json_data(i, j, data); - printf("Sending data : %s\r\n", data); - if (local_link(data) < 0) - printf("\r\n\r\n<-----LOCAL LINK FAILED!\r\n\r\n"); - else - printf("\r\n\r\n<-----LOCAL LINK OK!\r\n\r\n"); - vTaskDelay(1000); - } - } -} - -void start_local_link(void) -{ - if(xTaskCreate(local_link_task, ((const char*)"local_link_task"), 5376, NULL, tskIDLE_PRIORITY + 4, NULL) != pdPASS) - printf("\n\r%s xTaskCreate failed", __FUNCTION__); -} -int pair_device(unsigned char *tx_buffer, unsigned char *rx_buffer, int handshake) -{ - int sockfd, newsockfd; - socklen_t clilen; - struct sockaddr_in serv_addr, cli_addr; - int ret = 0; - int opt = 1; - - sockfd = socket(AF_INET, SOCK_STREAM, 0); - if (sockfd < 0) { - IOT_ERROR("ERROR opening socket"); - ret = -1; - goto exit; - } - - if((setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char *)&opt, sizeof(opt))) < 0){ - IOT_ERROR("ERROR on setting socket option"); - ret = -1; - goto exit; - } - - memset((char *)&serv_addr, 0, sizeof(serv_addr)); - serv_addr.sin_family = AF_INET; - serv_addr.sin_len = sizeof(serv_addr); - serv_addr.sin_addr.s_addr = INADDR_ANY; - serv_addr.sin_port = htons(PORT); - - if ((bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr))) < 0) { - IOT_ERROR("ERROR on binding"); - ret = -1; - goto exit; - } - if ((listen(sockfd, 5)) < 0){ - IOT_ERROR("ERROR on listening tcp server socket fd"); - ret = -1; - goto exit; - } - clilen = sizeof(cli_addr); - newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, (socklen_t*)&clilen); - if (newsockfd < 0) { - IOT_ERROR("ERROR on accept"); - ret = -1; - goto exit2; - } - ret = read(newsockfd, rx_buffer, MAX_BUFFER_SIZE); - if (ret <= 0){ - IOT_ERROR("ERROR reading from socket"); - ret = -1; - goto exit2; - } - IOT_DEBUG("Request received: %s, byte: %d\r\n",rx_buffer, ret); - if(handshake == 1){ - if(strncmp(rx_buffer,"PAIR", strlen("PAIR")) != 0){ - write(newsockfd, "ERROR", strlen("ERROR")); - IOT_ERROR("ERROR on first handshake!"); - ret = -1; - goto exit2; - } - } - else if(handshake == 2){ - if((rx_buffer == NULL) ||(strlen(rx_buffer) < 32)){ - write(newsockfd, "ERROR", strlen("ERROR")); - IOT_ERROR("ERROR on second handshake!"); - ret = -1; - goto exit2; - } - } - else if(handshake == 3){ - unsigned char account[64]; - unsigned char enc_acc[64]; - char *result = NULL, *backup = NULL; - unsigned char *data = NULL; - char *delims = ", "; - int j, k = 1; - if (!strncmp(rx_buffer, "[", strlen("["))){ - data = rx_buffer + strlen("["); - for(j = 1; j < 5; j++){ - if (data[ret - j] == ']') - data[ret -j] = '\0'; - } - } - else - strcpy(data, rx_buffer); - memset(enc_acc, 0, sizeof(enc_acc)); - result = strtok_r(data, delims, &backup); - enc_acc[0]=(uint8_t)atoi(result); - while((result = strtok_r(NULL, delims, &backup)) != NULL) - enc_acc[k++]=(uint8_t)atoi(result); - IOT_DEBUG("The value of k: %d", k); - memset(account, 0, sizeof(account)); - decrypt_data_aes(enc_acc, account, k); - - if((strncmp(account,"https://", strlen("https://"))) != 0){ - write(newsockfd, "ERROR", strlen("ERROR")); - IOT_ERROR("ERROR on third handshake!"); - ret = -1; - goto exit2; - } - else{ - IOT_DEBUG("The received Firebase URL:%s", account); - memset(rx_buffer, 0, strlen(rx_buffer)); - memcpy(rx_buffer, (account+strlen("https://")), (strlen(account) + strlen("https://"))); - } - } - ret = write(newsockfd, tx_buffer, strlen(tx_buffer)); - IOT_DEBUG("Data send: %s\r\n",tx_buffer); - - if (ret < 0){ - IOT_ERROR("ERROR writing to socket"); - } - -exit: - if(close(newsockfd) != 0) - goto exit; - -exit2: - if(close(sockfd) != 0) - goto exit2; - return ret; - -} - -static void pair_device_task(void) -{ - int i, j, k, HANDSHAKE; - uint8_t PAIR_STATE[1] = {0}; - - if(CONTROL_TYPE == 1){ - printf("\r\n\r\n<<<<<>>>>>\r\n\r\n"); - HANDSHAKE = 3; - } - else{ - printf("\r\n\r\n<<<<<>>>>>\r\n\r\n"); - HANDSHAKE = 2; - } - printf("\r\n\r\n=========>PAIR_STATE = 0 Start to pair\r\n\r\n"); - for(i = 0; i < HANDSHAKE; i++){ - static const uint8_t basepoint[32] = {9}; - uint8_t mysecret[32]; - uint8_t mypublic[32]; - uint8_t theirpublic[32] = {0}; - uint8_t shared_key[32]; -//First handshake - if(i == 0){ - printf("\r\n\r\n===>Start the first handshake\r\n\r\n"); - memset(tx_buffer, 0, sizeof(tx_buffer)); - memset(rx_buffer, 0, sizeof(rx_buffer)); - for(j = 0; j < 32; j ++) - mysecret[j] = (uint8_t) wgg_arc4random(); - mysecret[j] = '\0'; - curve25519_donna(mypublic, mysecret, basepoint); - for (j = 0; j < 32; j++){ - char *temp; - temp = iot_itoa(mypublic[j]); - if(j == 0) - strcpy(tx_buffer, "["); - strcat(tx_buffer,temp); - if (j == 31) - strcat(tx_buffer,"]"); - else - strcat(tx_buffer,","); - free(temp); - temp = NULL; - } - if(pair_device(tx_buffer, rx_buffer, 1) >= 0) - printf("\r\n\r\n<===First handshake OK!\r\n\r\n"); - else{ - i--; - printf("\r\n\r\n<===First handshake FAILED!\r\n\r\n"); - } - } -//Second handshake - if(i == 1){ - printf("\r\n\r\n=====>Start the second handshake\r\n\r\n"); - vTaskDelay(200); - memset(tx_buffer, 0, sizeof(tx_buffer)); - if(CONTROL_TYPE == 1) - memcpy(tx_buffer, "FIREBASE URL", sizeof("FIREBASE URL")); - else - memcpy(tx_buffer, "PAIR OK", sizeof("PAIR OK")); - memset(rx_buffer, 0, sizeof(rx_buffer)); - - if(pair_device(tx_buffer, rx_buffer, 2) >= 0){ - char *result = NULL, *backup = NULL; - unsigned char *data = NULL; - char *delims = ", "; - k = 1; - if (!strncmp(rx_buffer, "[", strlen("["))){ - data = rx_buffer + strlen("["); - int len; - len = strlen(data); - for(j = 1; j < 5; j++){ - if (data[len - j] == ']') - data[len -j] = '\0'; - } - } - else - strcpy(data, rx_buffer); - - memset(theirpublic, 0, sizeof(theirpublic)); - - result = strtok_r(data, delims, &backup); - theirpublic[0]=(uint8_t)atoi(result); - - while((result = strtok_r(NULL, delims, &backup)) != NULL) - theirpublic[k++] = (uint8_t)atoi(result); - - curve25519_donna(shared_key, mysecret, theirpublic); - for(j = 0; j < 16; j ++) - aes_key[j] = shared_key[j]; -//Store the KEY in FLASH - if(CONTROL_TYPE == 0){ - PAIR_STATE[0] = 1; - uint8_t data[33]; - memset(data, 0, 33); - memcpy(data, PAIR_STATE, 1); - memcpy(data+1, shared_key, 32); - flash_erase_sector(&iot_flash, FLASH_IOT_DATA); - flash_stream_write(&iot_flash, FLASH_IOT_DATA, 33, (uint8_t *) data); - IOT_DEBUG("PAIR_STATE: %d\r\n", PAIR_STATE[0]); - } - printf("\r\n\r\n<=====Second handshake OK!\r\n\r\n"); - } - else{ - i = i - 2; - printf("\r\n\r\n<=====Second handshake FAILED!\r\n\r\n"); - } - } -//Third handshake - if(i == 2){ - printf("\r\n\r\n=======>Start the third handshake\r\n\r\n"); - vTaskDelay(200); - - memset(tx_buffer, 0, sizeof(tx_buffer)); - memcpy(tx_buffer, "PAIR OK", sizeof("PAIR OK")); - memset(rx_buffer, 0, sizeof(rx_buffer)); - - if(pair_device(tx_buffer, rx_buffer, 3) >= 0){ - IOT_DEBUG("rx_buffer: %s, sizeof rx_buffer:%d\r\n", rx_buffer, sizeof(rx_buffer)); - PAIR_STATE[0] = 1; - uint8_t data[97]; - memset(data, 0, 97); - memcpy(data, PAIR_STATE, 1); - memcpy(data+1, shared_key, 32); - memcpy(data+33, rx_buffer, 64); - flash_erase_sector(&iot_flash, FLASH_IOT_DATA); - flash_stream_write(&iot_flash, FLASH_IOT_DATA, 97, (uint8_t *) data); - IOT_DEBUG("PAIR_STATE: %d\r\n", PAIR_STATE[0]); - - printf("\r\n\r\n<=======Third handshake OK!\r\n\r\n"); - } - else{ - i = i - 3; - printf("\r\n\r\n<=======Third handshake FAILED!\r\n\r\n"); - } - } - } - printf("\r\n\r\n<=========Pairing OK!\r\n\r\n"); -} - -static void mdns_task(void *param) -{ - DNSServiceRef dnsServiceRef = NULL; - TXTRecordRef txtRecord; - unsigned char txt_buf[128]; - uint8_t *mac, *ip; - int j, ret = 0; - uint8_t *flash_data; - uint8_t PAIR_STATE[1] = {0}; - static unsigned char MAC_ADD[21]; - static unsigned char IP[16]; - static unsigned char port[6]; - uint16_t shtc1_id; - -// Delay to wait for IP by DHCP and get the information of IP and MAC - printf("\n\r\n\r\n\r\n\r<<<<<>>>>>>\n\r\n\r\n\r\n\r"); - vTaskDelay(20000); - ip = LwIP_GetIP(&xnetif[0]); - mac = LwIP_GetMAC(&xnetif[0]); - - sprintf(MAC_ADD, "%02x%02x%02x%02x%02x%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); - sprintf(IP, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); - sprintf(port, "%d", PORT); - - IOT_DEBUG("MAC => %s\r\n", MAC_ADD) ; - IOT_DEBUG("IP => %s\r\n", IP); - IOT_DEBUG("PORT => %s\r\n", port); - -//Get the value of PAIR_STATE and the AES key in flash - flash_data = (uint8_t *)malloc(33); - flash_stream_read(&iot_flash, FLASH_IOT_DATA, 33, (uint8_t *)flash_data); - memcpy(PAIR_STATE, flash_data, 1); - if(PAIR_STATE[0] != 0x1) - PAIR_STATE[0] = 0; - else{ - for(j = 0;j < 16; j++){ - aes_key[j] = flash_data[j+1]; - } - } - free(flash_data); - IOT_DEBUG("PAIR_STATE now: %d\r\n", PAIR_STATE[0]); - - IOT_DEBUG("=>mDNS Init\r\n"); - if(mDNSResponderInit() == 0) { - printf("\r\n\r\n========>Start to register mDNS service\r\n\r\n"); -//The device not paired before - if(PAIR_STATE[0] == 0){ - TXTRecordCreate(&txtRecord, sizeof(txt_buf), txt_buf); - - TXTRecordSetValue(&txtRecord, "IP", strlen(IP), IP); - TXTRecordSetValue(&txtRecord, "PORT", strlen(port), port); - TXTRecordSetValue(&txtRecord, "MAC_ADDR", strlen(MAC_ADD), MAC_ADD); - TXTRecordSetValue(&txtRecord, "PAIR_STATE", strlen("0"), "0"); - TXTRecordSetValue(&txtRecord, "SERVICE_NAME", strlen("ht_sensor"), "ht_sensor"); - if(CONTROL_TYPE == 1) - TXTRecordSetValue(&txtRecord, "CONTROL_TYPE", strlen("1"), "1"); - else - TXTRecordSetValue(&txtRecord, "CONTROL_TYPE", strlen("0"), "0"); - dnsServiceRef = mDNSRegisterService("ht_sensor", "_Ameba._tcp", "local", PORT, &txtRecord); - TXTRecordDeallocate(&txtRecord); - printf("\r\n\r\n<========Registering mDNS service OK!\r\n\r\n"); - pair_device_task(); - } -//The device was paired - else if(PAIR_STATE[0] == 0x1){ - TXTRecordCreate(&txtRecord, sizeof(txt_buf), txt_buf); - - TXTRecordSetValue(&txtRecord, "IP", strlen(ip), ip); - TXTRecordSetValue(&txtRecord, "PORT", strlen(port), port); - TXTRecordSetValue(&txtRecord, "MAC_ADDR", strlen(MAC_ADD), MAC_ADD); - TXTRecordSetValue(&txtRecord, "PAIR_STATE", strlen("1"), "1"); - TXTRecordSetValue(&txtRecord, "SERVICE_NAME", strlen("ht_sensor"), "ht_sensor"); - if(CONTROL_TYPE == 1) - TXTRecordSetValue(&txtRecord, "CONTROL_TYPE", strlen("1"), "1"); - else - TXTRecordSetValue(&txtRecord, "CONTROL_TYPE", strlen("0"), "0"); - - dnsServiceRef = mDNSRegisterService("ht_sensor", "_Ameba._tcp", "local", PORT, &txtRecord); - TXTRecordDeallocate(&txtRecord); - printf("\r\n\r\n<========Registering mDNS service OK! PAIR_STATE = 1\r\n\r\n"); - } -#if PSEUDO_DATA - printf("\r\n\r\n========>Using the speudo data\r\n\r\n"); - if(CONTROL_TYPE == 1) start_cloud_link(); - start_local_link(); -#else -//Init the shtc1 sensor - printf("\r\n\r\n========>Init the temperature and humidity sensor\r\n\r\n"); - ret = SHTC_Init(&shtc1_id); - if ( ret == NO_ERROR ){ - printf("\r\n\r\n<========Senser init OK! ID = 0x%x \r\n\r\n", shtc1_id); - if(CONTROL_TYPE == 1) start_cloud_link(); - start_local_link(); - } - else { - printf("\r\n\r\n<========Senser init FAILED! ID = 0x%x \r\n\r\n", shtc1_id); - ret = -1; - } -#endif - - } - else - ret = -1; - if(ret == 0){ - while(1){ - IOT_DEBUG("Update the mDNS textrecord!\r\n"); - TXTRecordCreate(&txtRecord, sizeof(txt_buf), txt_buf); - TXTRecordSetValue(&txtRecord, "IP", strlen(IP), IP); - TXTRecordSetValue(&txtRecord, "PORT", strlen(port), port); - TXTRecordSetValue(&txtRecord, "MAC_ADDR", strlen(MAC_ADD), MAC_ADD); - TXTRecordSetValue(&txtRecord, "PAIR_STATE", strlen("1"), "1"); - if(CONTROL_TYPE == 1) - TXTRecordSetValue(&txtRecord, "CONTROL_TYPE", strlen("1"), "1"); - else - TXTRecordSetValue(&txtRecord, "CONTROL_TYPE", strlen("0"), "0"); - TXTRecordSetValue(&txtRecord, "SERVICE_NAME", strlen("ht_sensor"), "ht_sensor"); - - mDNSUpdateService(dnsServiceRef, &txtRecord, 0); - TXTRecordDeallocate(&txtRecord); - vTaskDelay(2*60*1000); - } - } - else{ - if(dnsServiceRef) - mDNSDeregisterService(dnsServiceRef); - IOT_DEBUG("<=mDNS Deinit\r\n\r\n"); - mDNSResponderDeinit(); - } -} - -void example_wigadget(void) -{ - if(xTaskCreate(mdns_task, ((const char*)"mdns_task"), 3072, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) - printf("\n\r%s xTaskCreate failed", __FUNCTION__); - - gpio_t gpio_softap_reset_button; - gpio_irq_t gpioirq_softap_reset_button; - - gpio_irq_init(&gpioirq_softap_reset_button, GPIO_SOFTAP_RESET_PIN, iotapp_reset_irq_handler, (uint32_t)(&gpio_softap_reset_button)); - gpio_irq_set(&gpioirq_softap_reset_button, IRQ_FALL, 1); - gpio_irq_enable(&gpioirq_softap_reset_button); -} - -#endif // LWIP_SOCKET diff --git a/Firmware/RTLGDB/USDK/component/common/application/wigadget/wigadget.h b/Firmware/RTLGDB/USDK/component/common/application/wigadget/wigadget.h deleted file mode 100644 index e8301c8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/wigadget/wigadget.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef WIGADGET_H -#define WIGADGET_H - -#define FLASH_IOT_DATA (0x0007E000) -#define PSEUDO_DATA 1 - -void example_wigadget(void); -void gen_json_data(char *i, char *j, unsigned char *json_data); - -#endif /* WIGADGET_H */ - diff --git a/Firmware/RTLGDB/USDK/component/common/application/xmodem/uart_fw_update.c b/Firmware/RTLGDB/USDK/component/common/application/xmodem/uart_fw_update.c deleted file mode 100644 index 2aceb5f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/xmodem/uart_fw_update.c +++ /dev/null @@ -1,1127 +0,0 @@ -/******************************************************************************** - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ - -#include "xmport_uart.h" -#include "xmport_loguart.h" -#include "rtl8195a.h" -#include "xmodem.h" -#include "xmport_uart.h" -#include "hal_spi_flash.h" -#include "rtl8195a_spi_flash.h" -#include -#include - -#if CONFIG_UART_SOCKET -#if /*CONFIG_PERI_UPDATE_IMG*/1 - - -#define USE_FLASH_API 1 - -#if USE_FLASH_API -#include "device_lock.h" -#include "flash_api.h" -#endif - -#ifndef FLASH_SECTOR_SIZE - #define FLASH_SECTOR_SIZE 4096 -#endif - -#define IMG1_SIGN_OFFSET 0x34 - -enum { - XMODEM_UART_0 = 0, - XMODEM_UART_1 = 1, - XMODEM_UART_2 = 2, - XMODEM_LOG_UART = 3 -}; - -FWU_DATA_SECTION char * xMFrameBuf; // [XM_BUFFER_SIZE]; -FWU_DATA_SECTION XMODEM_CTRL xMCtrl; - -FWU_DATA_SECTION static u32 fw_img1_size; -FWU_DATA_SECTION static u32 fw_img2_size; -FWU_DATA_SECTION static u32 fw_img2_addr; -FWU_DATA_SECTION static u32 fw_img3_size; -FWU_DATA_SECTION static u32 fw_img3_addr; -FWU_DATA_SECTION static u32 flash_wr_offset; -FWU_DATA_SECTION static u32 flash_erased_addr; -FWU_DATA_SECTION static u8 start_with_img1; -FWU_DATA_SECTION static u32 flash_wr_err_cnt; - -FWU_DATA_SECTION HAL_RUART_ADAPTER xmodem_uart_adp; // we can dynamic allocate memory for this object to save memory - -FWU_RODATA_SECTION const char Img2Signature[8] = IMG_SIGN_RUN; -extern u32 SpicCalibrationPattern[4]; -extern const u8 ROM_IMG1_VALID_PATTEN[]; -extern HAL_RUART_ADAPTER *pxmodem_uart_adp; - -#ifdef CONFIG_GPIO_EN -//extern HAL_GPIO_ADAPTER gBoot_Gpio_Adapter; -//extern PHAL_GPIO_ADAPTER _pHAL_Gpio_Adapter; -#endif - -extern BOOLEAN SpicFlashInitRtl8195A(u8 SpicBitMode); -_LONG_CALL_ -extern VOID SpicWaitBusyDoneRtl8195A(VOID); -extern VOID SpicWaitWipDoneRefinedRtl8195A(SPIC_INIT_PARA SpicInitPara); - -VOID WriteImg1Sign(u32 Image2Addr); - -void xDelayUs(u32 us) -{ - HalDelayUs(us); -} - -FWU_TEXT_SECTION void FWU_WriteWord(u32 Addr, u32 FData) -{ - SPIC_INIT_PARA SpicInitPara; - - HAL_WRITE32(SPI_FLASH_BASE, Addr, FData); - // Wait spic busy done - SpicWaitBusyDoneRtl8195A(); - // Wait flash busy done (wip=0) - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); -} - -FWU_TEXT_SECTION u32 xModem_MemCmp(const u32 *av, const u32 *bv, u32 len) -{ - const u32 *a = av; - const u32 *b = (u32*)((u8*)bv+SPI_FLASH_BASE); - u32 len4b = len >> 2; - u32 i; - - for (i=0; i 0) && (idx < frame_size)) { - flash_wr_offset--; - idx++; - skip_sz++; - } - - // "fw_img2_size" here is used as the memory length to write - // "fw_img2_addr" is used as the start memory address to write - while (idx < frame_size) { - if (fw_img2_size == 0) { - return idx; - } - - if (((fw_img2_addr & 0x03) == 0) && - (fw_img2_size > 3) && - ((frame_size - idx) > 3)) { - // write address is 4-byte aligned - *((u32*)fw_img2_addr) = (*((u32*)(ptr+idx))); - fw_img2_addr += 4; - fw_img2_size -= 4; - idx += 4; - } else if (fw_img2_size > 0){ - *((u8*)fw_img2_addr) = (*((u8*)(ptr+idx))); - fw_img2_addr++; - fw_img2_size--; - idx++; - } - } - - return (idx - skip_sz); -} - -FWU_TEXT_SECTION -u32 xModem_Frame_FlashWrite(char *ptr, unsigned int frame_num, unsigned int frame_size) -{ - u32 idx=0; - u32 skip_sz=0; - u32 temp; - u32 i; - - // "flash_wr_offset" here is used as the skip bytes from the head - while ((flash_wr_offset > 0) && (idx < frame_size)) { - flash_wr_offset--; - idx++; - skip_sz++; - } - - // "fw_img2_size" here is used as the memory length to write - // "fw_img2_addr" is used as the start memory address to write - while (idx < frame_size) { - if (fw_img2_size == 0) { - return idx; - } - - if ((fw_img2_size > 3) && ((frame_size - idx) > 3)) { - FWU_WriteWord(fw_img2_addr, (*((u32*)(ptr+idx)))); - fw_img2_addr += 4; - fw_img2_size -= 4; - idx += 4; - } else { - temp = 0xFFFFFFFF; - for (i=0;i<4;i++) { - // Just for little endian - *((((u8*)&temp) + i)) = (*((u8*)(ptr+idx))); - idx++; - fw_img2_size--; - if ((fw_img2_size == 0) || (idx >= frame_size)) { - break; - } - } - FWU_WriteWord(fw_img2_addr, temp); - fw_img2_addr += 4; - } - } - - return (idx - skip_sz); -} - -FWU_TEXT_SECTION -u32 xModem_Frame_Img2(char *ptr, unsigned int frame_num, unsigned int frame_size) -{ - u32 address; - u32 ImageIndex=0; - u32 rx_len=0; - u32 *chk_sr; - u32 *chk_dr; - u32 err_addr; - - if (frame_num == 1) { - // Parse Image2 header - flash_wr_offset = fw_img2_addr; - fw_img2_size = rtk_le32_to_cpu(*((u32*)ptr)) + 0x10; -/* - if ((fw_img2_size & 0x03) != 0) { - DBG_MISC_ERR("OTU: fw_img2_addr=0x%x fw_img2_size(%d) isn't 4-bytes aligned\n", fw_img2_addr, fw_img2_size); - fw_img1_size = 0; - fw_img2_size = 0; - return rx_len; - } -*/ - if (fw_img2_size > ((HalGetChipId() < CHIP_ID_8195AM) ? (0x80000-0x0B000) : (2*1024*1024))) { - DBG_MISC_ERR("OTU: fw_img2_addr=0x%x fw_img2_size(%d) to Big!\n", fw_img2_addr, fw_img2_size); - fw_img1_size = 0; - fw_img2_size = 0; - return rx_len; - } - printf("fw_img2_addr=0x%x fw_img2_size(%d)\n", fw_img2_addr, fw_img2_size); - fw_img3_addr = fw_img2_addr + fw_img2_size; - - // erase Flash first - address = fw_img2_addr & (~(FLASH_SECTOR_SIZE-1)); // 4k aligned, 4k is the page size of flash memory - while ((address) < (fw_img2_addr+fw_img2_size)) { - DBG_MISC_INFO("Flash Erase: %p\n", address); - SpicSectorEraseFlashRtl8195A(SPI_FLASH_BASE + address); - address += FLASH_SECTOR_SIZE; - } - flash_erased_addr = address; - } - - if (fw_img2_size > 0) { - // writing image2 - chk_sr = (u32*)((u8*)ptr+ImageIndex); - chk_dr = (u32*)flash_wr_offset; - while (ImageIndex < frame_size) { - FWU_WriteWord(flash_wr_offset, (*((u32*)(ptr+ImageIndex)))); - ImageIndex += 4; - flash_wr_offset += 4; - rx_len += 4; - fw_img2_size -= 4; - if (fw_img2_size == 0) { - // Image2 write done, - break; - } - } - - err_addr = xModem_MemCmp(chk_sr, chk_dr, (flash_wr_offset - (u32)chk_dr)); - if (err_addr) { - flash_wr_err_cnt++; - } - } - - if (ImageIndex >= frame_size) { - return rx_len; - } - - // Skip the gap between image2 and image3, - // there is no gap in current image format - if (flash_wr_offset < fw_img3_addr) { - if ((flash_wr_offset + (frame_size-ImageIndex)) <= fw_img3_addr) { - flash_wr_offset += (frame_size-ImageIndex); - return rx_len; - } else { - while (ImageIndex < frame_size) { - if (flash_wr_offset == fw_img3_addr) { - break; - } - ImageIndex += 4; - flash_wr_offset += 4; - } - } - } - - if (fw_img3_addr == flash_wr_offset) { - if (ImageIndex < frame_size) { - fw_img3_size = rtk_le32_to_cpu(*((u32*)(ptr+ImageIndex))); - if (fw_img3_size == 0x1A1A1A1A) { - // all padding bytes, no image3 - fw_img3_size = 0; - return rx_len; - } -/* - if ((fw_img3_size & 0x03) != 0) { - DBG_MISC_ERR("OTU Err#5: fw_img3_addr=0x%x fw_img3_size(%d) isn't 4-bytes aligned\n", fw_img3_addr, fw_img3_size); - fw_img3_size = 0; - return rx_len; - } -*/ - if (fw_img2_size > ((HalGetChipId() < CHIP_ID_8195AM) ? (0x80000 - fw_img3_addr) : (2*1024*1024))) { - DBG_MISC_ERR("OTU: fw_img3_addr=0x%x fw_img2_size(%d) to Big!\n", fw_img3_addr, fw_img3_size); - fw_img3_size = 0; - return rx_len; - } - - // Flash sector erase for image2 writing - if (flash_erased_addr >= fw_img3_addr) { - address = flash_erased_addr; - } else { - address = fw_img3_addr & (~(FLASH_SECTOR_SIZE-1)); // 4k aligned, 4k is the page size of flash memory - } - - while ((address) < (fw_img3_addr+fw_img3_size)) { - DBG_MISC_INFO("Flash Erase: %p\n", address); -#if 0 - if ((address & 0xFFFF) == 0) { - SpicBlockEraseFlashRtl8195A(SPI_FLASH_BASE + address); - address += FLASH_SECTOR_SIZE; // 1 block = 64k bytes - } - else -#endif - { - - SpicSectorEraseFlashRtl8195A(SPI_FLASH_BASE + address); - address += FLASH_SECTOR_SIZE; // 1 sector = 4k bytes - } - } - flash_erased_addr = address; - } - } - - if (fw_img3_size > 0) { - // writing image3 - chk_sr = (u32*)((u8*)ptr+ImageIndex); - chk_dr = (u32*)flash_wr_offset; - while (ImageIndex < frame_size) { - FWU_WriteWord(flash_wr_offset, (*((u32*)(ptr+ImageIndex)))); - ImageIndex += 4; - flash_wr_offset += 4; - rx_len += 4; - fw_img3_size -= 4; - if (fw_img3_size == 0) { - // Image3 write done, - break; - } - } - - err_addr = xModem_MemCmp(chk_sr, chk_dr, (flash_wr_offset - (u32)chk_dr)); - if (err_addr) { - flash_wr_err_cnt++; - } - } - - return rx_len; -} - -FWU_TEXT_SECTION -u32 xModem_Frame_ImgAll(char *ptr, unsigned int frame_num, unsigned int frame_size) -{ - int i; - u32 address; - u32 img_size; - u32 img_addr; - u32 ImgIdx=0; - u32 Img1Sign; - u32 rx_len=0; - u32 *chk_sr; - u32 *chk_dr; - u32 err_addr; - - if (frame_num == 1) { - // Check is it the start patten of image1 - start_with_img1 = 1; - for(i=0; i<4; i++) { - Img1Sign = rtk_le32_to_cpu(*((u32*)(ptr + i*4))); - if(Img1Sign != SpicCalibrationPattern[i]) { - start_with_img1 = 0; - break; - } - } - - // Get the image size: the first 4 bytes - if (start_with_img1) { - // Image1 + Image2 - // Check the Image1 Signature - i=0; - while (ROM_IMG1_VALID_PATTEN[i] != 0xff) { - if (ptr[i+IMG1_SIGN_OFFSET] != ROM_IMG1_VALID_PATTEN[i]) { - // image1 validation patten miss match - DBG_MISC_ERR("OTU: Image1 Signature Incorrect\n"); - fw_img1_size = 0; - fw_img2_size = 0; - fw_img2_addr = 0; - fw_img3_size = 0; - fw_img3_addr = 0; - return 0; - } else { - // make the signature all 0xff for now, write the signature when image1 download is done - ptr[i+IMG1_SIGN_OFFSET] = 0xff; - } - i++; - } - - flash_wr_offset = 0; - fw_img1_size = rtk_le32_to_cpu(*((u32*)(ptr + 0x10))) + 0x20; -/* if ((fw_img1_size & 0x03) != 0) { - DBG_MISC_WARN("OTU: fw_img1_size(0x%x) isn't 4-bytes aligned\n", fw_img1_size); - fw_img1_size = 0; - fw_img2_size = 0; - fw_img2_addr = 0; - fw_img3_size = 0; - fw_img3_addr = 0; - return 0; - } */ - address = 0; - img_size = fw_img1_size; - img_addr = 0; - fw_img2_addr = rtk_le16_to_cpu(*((u16*)(ptr + 0x18))) * 1024; - if (fw_img2_addr == 0) { - // it's old format: image1 & image2 is cascaded directly - fw_img2_addr = fw_img1_size; - } - fw_img2_size = 0; - DBG_MISC_INFO("Update Image All: Image1 Size=%d, Image2 Addr=0x%x\n", fw_img1_size, fw_img2_addr); - } else { - // It's image2(+image3) only - if (fw_img2_addr == 0) { - DBG_MISC_WARN("The single-image format in flash now, it cannot just update the image2\n"); - fw_img1_size = 0; - fw_img2_size = 0; - return rx_len; - } - - flash_wr_offset = fw_img2_addr; - fw_img1_size = 0; - fw_img2_size = rtk_le32_to_cpu(*((u32*)ptr)) + 0x10; - fw_img3_addr = fw_img2_addr + fw_img2_size; -/* if ((fw_img2_size & 0x03) != 0) { - DBG_MISC_ERR("OTU: fw_img2_size(0x%x) isn't 4-bytes aligned\n", fw_img2_size); - fw_img1_size = 0; - fw_img2_size = 0; - return rx_len; - } */ - address = fw_img2_addr & (~0xfff); // 4k aligned, 4k is the page size of flash memory - img_size = fw_img2_size; - img_addr = fw_img2_addr; - - DBG_MISC_INFO("Update Image2: Addr=0x%x, Size=%d\n", fw_img2_addr, fw_img2_size); - - } - - // erase Flash sector first - while ((address) < (img_addr+img_size)) { -// DBG_MISC_INFO("Flash Erase: 0x%x\n", address); - if ((address >= 0x10000 ) && ((address & 0xFFFF) == 0)) { - SpicBlockEraseFlashRtl8195A(SPI_FLASH_BASE + address); - address += 0x10000; // 1 Block = 64k bytes - } - else - { - SpicSectorEraseFlashRtl8195A(SPI_FLASH_BASE + address); - address += 0x1000; // 1 sector = 4k bytes - } - } - flash_erased_addr = address; - } - - { - if (!start_with_img1) { - if (fw_img2_size > 0) { - chk_sr = (u32*)((u8*)ptr+ImgIdx); - chk_dr = (u32*)flash_wr_offset; - while (ImgIdx < frame_size) { - FWU_WriteWord(flash_wr_offset, (*((u32*)(ptr+ImgIdx)))); - ImgIdx += 4; - flash_wr_offset += 4; - rx_len += 4; - fw_img2_size -= 4; - if (fw_img2_size == 0) { - break; - } - - } - err_addr = xModem_MemCmp(chk_sr, chk_dr, (flash_wr_offset - (u32)chk_dr)); - if (err_addr) { - flash_wr_err_cnt++; - } - } - } else { - ImgIdx = 0; - if (fw_img1_size > 0) { - // still writing image1 - chk_sr = (u32*)((u8*)ptr+ImgIdx); - chk_dr = (u32*)flash_wr_offset; - while (ImgIdx < frame_size) { - FWU_WriteWord(flash_wr_offset, (*((u32*)(ptr+ImgIdx)))); - ImgIdx += 4; - flash_wr_offset += 4; - rx_len += 4; - fw_img1_size -= 4; - if (fw_img1_size == 0) { - // Image1 write done, - break; - } - } - - err_addr = xModem_MemCmp(chk_sr, chk_dr, (flash_wr_offset - (u32)chk_dr)); - if (err_addr) { - flash_wr_err_cnt++; - } else { - if (fw_img1_size == 0) { - // Write Image1 signature - WriteImg1Sign(IMG1_SIGN_OFFSET); - } - } - } - - if (ImgIdx >= frame_size) { - return rx_len; - } - - if (fw_img2_addr == 0) { - return rx_len; - } - - // Skip the section of system data - if (flash_wr_offset < fw_img2_addr) { - if ((flash_wr_offset + (frame_size-ImgIdx)) <= fw_img2_addr) { - flash_wr_offset += (frame_size-ImgIdx); - return rx_len; - } else { - while (ImgIdx < frame_size) { - if (flash_wr_offset == fw_img2_addr) { - break; - } - ImgIdx += 4; - flash_wr_offset += 4; - rx_len += 4; - } - } - } - - if (fw_img2_addr == flash_wr_offset) { - if (ImgIdx < frame_size) { - fw_img2_size = rtk_le32_to_cpu(*((u32*)(ptr+ImgIdx))) + 0x10; - fw_img3_addr = fw_img2_addr + fw_img2_size; -/* if ((fw_img2_size & 0x03) != 0) { - DBG_MISC_ERR("OTU: fw_img2_addr=0x%x fw_img2_size(%d) isn't 4-bytes aligned\n", fw_img2_addr, fw_img2_size); - fw_img1_size = 0; - fw_img2_size = 0; - return rx_len; - }*/ - - if (fw_img2_size > (2*1024*1024)) { - DBG_MISC_ERR("OTU: fw_img2_addr=0x%x fw_img2_size(%d) to Big\n", fw_img2_addr, fw_img2_size); - fw_img1_size = 0; - fw_img2_size = 0; - return rx_len; - } - - // Flash sector erase for image2 writing - if (flash_erased_addr >= fw_img2_addr) { - address = flash_erased_addr; - } else { - address = fw_img2_addr & (~0xfff); // 4k aligned, 4k is the page size of flash memory - } - - while ((address) < (fw_img2_addr+fw_img2_size)) { - DBG_MISC_INFO("Flash Erase: 0x%x\n", address); - if ((address & 0xFFFF) == 0) { - SpicBlockEraseFlashRtl8195A(SPI_FLASH_BASE + address); - address += 0x10000; // 1 block = 64k bytes - } - else - { - SpicSectorEraseFlashRtl8195A(SPI_FLASH_BASE + address); - address += 0x1000; // 1 sector = 4k bytes - } - } - flash_erased_addr = address; - } - } - - if (fw_img2_size > 0) { - // writing image2 - chk_sr = (u32*)((u8*)ptr+ImgIdx); - chk_dr = (u32*)flash_wr_offset; - while (ImgIdx < frame_size) { - FWU_WriteWord(flash_wr_offset, (*((u32*)(ptr+ImgIdx)))); - ImgIdx += 4; - flash_wr_offset += 4; - rx_len += 4; - fw_img2_size -= 4; - if (fw_img2_size == 0) { - // Image2 write done, - break; - } - } - - err_addr = xModem_MemCmp(chk_sr, chk_dr, (flash_wr_offset - (u32)chk_dr)); - if (err_addr) { - flash_wr_err_cnt++; - } - } - - if (ImgIdx >= frame_size) { - return rx_len; - } - - if (fw_img3_addr == flash_wr_offset) { - if (ImgIdx < frame_size) { - fw_img3_size = rtk_le32_to_cpu(*((u32*)(ptr+ImgIdx))); - if (fw_img3_size == 0x1A1A1A1A) { - // all padding bytes, no image3 - fw_img3_size = 0; -// DBG_8195A("No Img3\n"); - return rx_len; - } -/* if ((fw_img3_size & 0x03) != 0) { - DBG_MISC_ERR("OTU: fw_img3_addr=0x%x fw_img3_size(%d) isn't 4-bytes aligned\n", fw_img3_addr, fw_img3_size); - fw_img3_size = 0; - return rx_len; - } */ - - if (fw_img3_size > (2*1024*1024)) { - DBG_MISC_ERR("OTU: fw_img3_addr=0x%x fw_img2_size(%d) to Big!\n", fw_img3_addr, fw_img3_size); - fw_img3_size = 0; - return rx_len; - } - - // Flash sector erase for image2 writing - if (flash_erased_addr >= fw_img3_addr) { - address = flash_erased_addr; - } else { - address = fw_img3_addr & (~0xfff); // 4k aligned, 4k is the page size of flash memory - } - - while ((address) < (fw_img3_addr+fw_img3_size)) { - DBG_MISC_INFO("Flash Erase: 0x%x\n", address); - if ((address & 0xFFFF) == 0) { - SpicBlockEraseFlashRtl8195A(SPI_FLASH_BASE + address); - address += 0x10000; // 1 block = 64k bytes - } - else - { - SpicSectorEraseFlashRtl8195A(SPI_FLASH_BASE + address); - address += 0x1000; // 1 sector = 4k bytes - } - } - flash_erased_addr = address; - } - } - - if (fw_img3_size > 0) { - // writing image3 - chk_sr = (u32*)((u8*)ptr+ImgIdx); - chk_dr = (u32*)flash_wr_offset; - while (ImgIdx < frame_size) { - FWU_WriteWord(flash_wr_offset, (*((u32*)(ptr+ImgIdx)))); - ImgIdx += 4; - flash_wr_offset += 4; - rx_len += 4; - fw_img3_size -= 4; - if (fw_img3_size == 0) { - // Image3 write done, - break; - } - } - err_addr = xModem_MemCmp(chk_sr, chk_dr, (flash_wr_offset - (u32)chk_dr)); - if (err_addr) { - flash_wr_err_cnt++; - } - } - - } - } - - return rx_len; -} - -FWU_TEXT_SECTION -s32 -xModem_Init_UART_Port(u8 uart_idx, u8 pin_mux, u32 baud_rate) -{ - if (uart_idx <= XMODEM_UART_2) { - // update firmware via generic UART - pxmodem_uart_adp = &xmodem_uart_adp; // we can use dynamic allocate to save memory -// pxmodem_uart_adp = RtlZmalloc(sizeof(HAL_RUART_ADAPTER)); - xmodem_uart_init(uart_idx, pin_mux, baud_rate); - xmodem_uart_func_hook(&(xMCtrl.ComPort)); - } else if(uart_idx == XMODEM_LOG_UART) { - // update firmware via Log UART -// DiagPrintf("Open xModem Transfer on Log UART...\n"); -// xmodem_loguart_init(); - xmodem_loguart_init(baud_rate); - xmodem_loguart_func_hook(&(xMCtrl.ComPort)); -// DiagPrintf("Please Start the xModem Sender...\n"); - } else { - // invalid UART port - DBG_MISC_ERR("OTU: Invaild UART port(%d)\n", uart_idx); - return -1; - } - - return 0; -} - -FWU_TEXT_SECTION -VOID -xModem_DeInit_UART_Port(u8 uart_idx) -{ - if (uart_idx <= XMODEM_UART_2) { - xmodem_uart_deinit(); - } else if (uart_idx == XMODEM_LOG_UART) { - xmodem_loguart_deinit(); - } -} - -FWU_TEXT_SECTION -__weak s32 -UpdatedImg2AddrValidate( - u32 Image2Addr, - u32 DefImage2Addr, - u32 DefImage2Size -) -{ - if (Image2Addr == 0xffffffff) { - // Upgraded Image2 isn't exist - return 0; // invalid address - } - - if ((Image2Addr & 0xfff) != 0) { - // Not 4K aligned - return 0; // invalid address - } - - if (Image2Addr <= DefImage2Addr) { - // Updated image2 address must bigger than the addrss of default image2 - return 0; // invalid address - } - - if (Image2Addr < (DefImage2Addr+DefImage2Size)) { - // Updated image2 overlap with the default image2 - return 0; // invalid address - } - - return 1; // this address is valid -} - -FWU_TEXT_SECTION -__weak s32 -Img2SignValidate( - u32 Image2Addr -) -{ - u32 img2_sig[3]; - s32 sign_valid=0; - - // Image2 header: Size(4B) + Addr(4B) + Signature(8B) - img2_sig[0] = HAL_READ32(SPI_FLASH_BASE, Image2Addr + 8); - img2_sig[1] = HAL_READ32(SPI_FLASH_BASE, Image2Addr + 12); - img2_sig[2] = 0; // end of string - - if (_memcmp((void*)img2_sig, (void*)Img2Signature, 8)) { - DBG_MISC_INFO("Invalid Image2 Signature:%s\n", img2_sig); - } else { - sign_valid = 1; - } - - return sign_valid; - -} - - -FWU_TEXT_SECTION -VOID -MarkImg2SignOld( - u32 Image2Addr -) -{ - u32 img2_sig; - - _memcpy((void*)&img2_sig, (void*)Img2Signature, 4); - *((char*)(&img2_sig)) = '0'; // '8' -> the latest image; '0' -> the older image - FWU_WriteWord((Image2Addr + 8), img2_sig); -} - -FWU_TEXT_SECTION -VOID -WriteImg1Sign( - u32 Image2Addr -) -{ - u32 img1_sig; - - _memcpy((void*)&img1_sig, (void*)ROM_IMG1_VALID_PATTEN, 4); - FWU_WriteWord(IMG1_SIGN_OFFSET, img1_sig); -} - -FWU_TEXT_SECTION -VOID -WriteImg2Sign( - u32 Image2Addr -) -{ - u32 img2_sig[2]; - - _memcpy((void*)img2_sig, (void*)Img2Signature, 8); - FWU_WriteWord((Image2Addr + 8), img2_sig[0]); - FWU_WriteWord((Image2Addr + 12), img2_sig[1]); -} - -FWU_TEXT_SECTION -u32 -SelectImg2ToUpdate( - u32 *OldImg2Addr -) -{ - u32 DefImage2Addr=0xFFFFFFFF; // the default Image2 addr. - u32 SecImage2Addr=0xFFFFFFFF; // the 2nd image2 addr. - u32 ATSCAddr=0xFFFFFFFF; - u32 UpdImage2Addr; // the addr of the image2 to be updated - u32 DefImage2Len; -#ifdef CONFIG_UPDATE_TOGGLE_IMG2 - u32 SigImage0,SigImage1; -#endif - - *OldImg2Addr = 0; - DefImage2Addr = (HAL_READ32(SPI_FLASH_BASE, 0x18)&0xFFFF) * 1024; - if ((DefImage2Addr != 0) && ((DefImage2Addr < (16*1024*1024)))) { - // Valid Default Image2 Addr: != 0 & located in 16M - DefImage2Len = HAL_READ32(SPI_FLASH_BASE, DefImage2Addr); - - // Get the pointer of the upgraded Image2 - SecImage2Addr = HAL_READ32(SPI_FLASH_BASE, FLASH_SYSTEM_DATA_ADDR); - - if (UpdatedImg2AddrValidate(SecImage2Addr, DefImage2Addr, DefImage2Len)) { - UpdImage2Addr = SecImage2Addr; // Update the 2nd image2 -#ifdef CONFIG_UPDATE_TOGGLE_IMG2 - // read Part1/Part2 signature - SigImage0 = HAL_READ32(SPI_FLASH_BASE, DefImage2Addr + 8); - SigImage1 = HAL_READ32(SPI_FLASH_BASE, DefImage2Addr + 12); - - DBG_8195A("\n\rPart1 Sig %x", SigImage0); - if(SigImage0==0x30303030 && SigImage1==0x30303030) - ATSCAddr = DefImage2Addr; // ATSC signature - else if(SigImage0==0x35393138 && SigImage1==0x31313738) - *OldImg2Addr = DefImage2Addr; // newer version, change to older version - else - UpdImage2Addr = DefImage2Addr; // update to older version - - SigImage0 = HAL_READ32(SPI_FLASH_BASE, SecImage2Addr + 8); - SigImage1 = HAL_READ32(SPI_FLASH_BASE, SecImage2Addr + 12); - DBG_8195A("\n\rPart2 Sig %x\n\r", SigImage0); - if(SigImage0==0x30303030 && SigImage1==0x30303030) - ATSCAddr = SecImage2Addr; // ATSC signature - else if(SigImage0==0x35393138 && SigImage1==0x31313738) - *OldImg2Addr = SecImage2Addr; - else - UpdImage2Addr = SecImage2Addr; - - // update ATSC clear partitin first - if(ATSCAddr != ~0x0){ - *OldImg2Addr = UpdImage2Addr; - UpdImage2Addr = ATSCAddr; - } -#endif // end of SWAP_UPDATE, wf, 1006 - } else { - // The upgraded image2 isn't exist or invalid so we can just update the default image2 - UpdImage2Addr = DefImage2Addr; // Update the default image2 - #ifdef CONFIG_UPDATE_TOGGLE_IMG2 - *OldImg2Addr = DefImage2Addr; -#endif - } - } else { - UpdImage2Addr = 0; - } - - return UpdImage2Addr; -} - - -FWU_TEXT_SECTION -void OTU_FW_Update(u8 uart_idx, u8 pin_mux, u32 baud_rate) -{ - u32 wr_len; - u32 OldImage2Addr=0; // the addr of the image2 will become old one - SPIC_INIT_PARA SpicInitPara; - - fw_img1_size = 0; - fw_img2_size = 0; - fw_img2_addr = 0; - fw_img3_size = 0; - fw_img3_addr = 0; - flash_wr_offset = 0; - flash_erased_addr = 0; - start_with_img1 = 0;; - flash_wr_err_cnt = 0; - xMFrameBuf = malloc(XM_BUFFER_SIZE); - if(xMFrameBuf == NULL) { - DBG_MISC_ERR("OTU: SPI Init Fail!\n"); - return; - } - -#if USE_FLASH_API - device_mutex_lock(RT_DEV_LOCK_FLASH); -#endif - SPI_FLASH_PIN_FCTRL(ON); - if (!SpicFlashInitRtl8195A(SpicOneBitMode)){ - SPI_FLASH_PIN_FCTRL(OFF); - DBG_MISC_ERR("OTU: SPI Init Fail!\n"); - goto end_error; - } - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); - printf("FW Update Over UART%d, PinMux=%d, Baud=%d\n", uart_idx, pin_mux, baud_rate); - // Get the address of the image2 to be updated - fw_img2_addr = SelectImg2ToUpdate(&OldImage2Addr); - - // Start to update the Image2 through xModem on peripheral device - printf("FW Update Image2 @ 0x%x\n", fw_img2_addr); - // We update the image via xModem on UART now, if we want to uase other peripheral device - // to update the image then we need to redefine the API - if (xModem_Init_UART_Port(uart_idx, pin_mux, baud_rate) < 0) { - goto end_error; - } - -// xModemStart(&xMCtrl, xMFrameBuf, xModem_Frame_ImgAll); // Support Image format: Image1+Image2 or Image2 only - xModemStart(&xMCtrl, xMFrameBuf, xModem_Frame_Img2); // Support Image format: Image2 only -// xModemStart(&xMCtrl, xMFrameBuf, xModem_Frame_Dump); // for debugging - wr_len = xModemRxBuffer(&xMCtrl, (2*1024*1024)); - xModemEnd(&xMCtrl); - - xModem_DeInit_UART_Port(uart_idx); - - if ((wr_len > 0) && (flash_wr_err_cnt == 0)) { - // Firmware update OK, now write the signature to active this image - WriteImg2Sign(fw_img2_addr); -#ifdef CONFIG_UPDATE_TOGGLE_IMG2 - // Mark the other image2 as old one by modify its signature - if (OldImage2Addr != 0) { - printf("Mark Image2 @ 0x%x as Old\n", OldImage2Addr); - MarkImg2SignOld(OldImage2Addr); - } -#endif - } - printf("OTU_FW_Update Done, Write Len=%d\n", wr_len); -end_error: - SPI_FLASH_PIN_FCTRL(OFF); -#if USE_FLASH_API - device_mutex_unlock(RT_DEV_LOCK_FLASH); -#endif - if(xMFrameBuf) { - free(xMFrameBuf); - xMFrameBuf = NULL; - } -} - -FWU_TEXT_SECTION -u8 OTU_check_gpio(void) -{ -#ifdef CONFIG_GPIO_EN - HAL_GPIO_PIN GPIO_Pin; - u8 enter_update; - - GPIO_Pin.pin_name = HAL_GPIO_GetIPPinName_8195a(0x21); //pin PC_1 - GPIO_Pin.pin_mode = DIN_PULL_HIGH; - -// _pHAL_Gpio_Adapter = &gBoot_Gpio_Adapter; - - HAL_GPIO_Init_8195a(&GPIO_Pin); - if (HAL_GPIO_ReadPin_8195a(&GPIO_Pin) == GPIO_PIN_LOW) { - enter_update = 1; - } - else { - enter_update = 0; - } - HAL_GPIO_DeInit_8195a(&GPIO_Pin); - -// _pHAL_Gpio_Adapter = NULL; - return enter_update; -#else - return 0; -#endif -} - -FWU_TEXT_SECTION -u8 OTU_check_uart(u32 UpdateImgCfg){ - - if(((UpdateImgCfg>>4)&0x03) == 2){ - ACTCK_SDIOD_CCTRL(OFF); - - /* SDIO Function Disable */ - SDIOD_ON_FCTRL(OFF); - SDIOD_OFF_FCTRL(OFF); - - // SDIO Pin Mux off - SDIOD_PIN_FCTRL(OFF); - } - - if (xModem_Init_UART_Port(((UpdateImgCfg>>4)&0x03), (UpdateImgCfg&0x03), 115200) < 0) { - return 0; - } - - - char ch; - u8 x_count = 0; - int timeout1 = 500; - while (timeout1 != 0) { - if (xMCtrl.ComPort.poll()) { - ch = xMCtrl.ComPort.get(); - if(ch != 0x78){ - xModem_DeInit_UART_Port(((UpdateImgCfg>>4)&0x03)); - return 0; - } - x_count ++; - if(x_count == 5){ - xModem_DeInit_UART_Port(((UpdateImgCfg>>4)&0x03)); - return 1; - } - } - HalDelayUs(200); - timeout1--; - } - - if(!x_count){ - xModem_DeInit_UART_Port(((UpdateImgCfg>>4)&0x03)); - return 0; - } - - int timeout2 = 4500; - while (timeout2 != 0) { - if (xMCtrl.ComPort.poll()) { - ch = xMCtrl.ComPort.get(); - if(ch != 0x78){ - xModem_DeInit_UART_Port(((UpdateImgCfg>>4)&0x03)); - return 0; - } - x_count ++; - if(x_count == 5) - { - xModem_DeInit_UART_Port(((UpdateImgCfg>>4)&0x03)); - return 1; - } - } - HalDelayUs(200); - timeout2--; - } - - xModem_DeInit_UART_Port(((UpdateImgCfg>>4)&0x03)); - return 0; -} - -FWU_TEXT_SECTION -void OTU_Img_Download(u8 uart_idx, u8 pin_mux, u32 baud_rate, - u32 start_offset, u32 start_addr, u32 max_size) -{ - SPIC_INIT_PARA SpicInitPara; - u32 wr_len; - u8 is_flash=0; - - if (xModem_Init_UART_Port(uart_idx, pin_mux, baud_rate) < 0) { - return; - } - if(xMFrameBuf == NULL) { - DBG_MISC_ERR("OTU: SPI Init Fail!\n"); - return; - } - - DBG_MISC_INFO("Image Download: StartOffset=%d StartAddr=0x%x MaxSize=%d\n", start_offset, start_addr, max_size); - - fw_img2_addr = start_addr; - flash_wr_offset = start_offset; - fw_img2_size = max_size; - - if ((start_addr & 0xFF000000) == SPI_FLASH_BASE) { - // it's going to write the Flash memory - if (((start_addr & 0x03) != 0) || ((start_offset&0x03) != 0)) { - DiagPrintf("StartAddr(0x%x), StartOffset(0x%x) Must 4-bytes Aligned\n", start_addr, start_offset); - return; - } -#if USE_FLASH_API - device_mutex_lock(RT_DEV_LOCK_FLASH); -#endif - SPI_FLASH_PIN_FCTRL(ON); - if (!SpicFlashInitRtl8195A(SpicOneBitMode)){ - DBG_MISC_ERR("OTU: SPI Init Fail!\n"); - SPI_FLASH_PIN_FCTRL(OFF); - goto end_error; - } - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); - is_flash = 1; - fw_img2_addr = start_addr & 0x00FFFFFF; - xModemStart(&xMCtrl, xMFrameBuf, xModem_Frame_FlashWrite); - } else { - xModemStart(&xMCtrl, xMFrameBuf, xModem_Frame_MemWrite); - } - wr_len = xModemRxBuffer(&xMCtrl, ((((max_size+flash_wr_offset-1)>>7)+1) << 7)); - xModemEnd(&xMCtrl); - - xModem_DeInit_UART_Port(uart_idx); - - DBG_MISC_INFO("OTU_Img_Download Done, Write Len=%d\n", wr_len); -end_error: - if (is_flash) { - SPI_FLASH_PIN_FCTRL(OFF); -#if USE_FLASH_API - device_mutex_unlock(RT_DEV_LOCK_FLASH); -#endif - } - if(xMFrameBuf) { - free(xMFrameBuf); - xMFrameBuf = NULL; - } -} - -#endif //#if CONFIG_PERI_UPDATE_IMG - -#endif // #if CONFIG_UART_SOCKET diff --git a/Firmware/RTLGDB/USDK/component/common/application/xmodem/xmodem.h b/Firmware/RTLGDB/USDK/component/common/application/xmodem/xmodem.h deleted file mode 100644 index 8ce40ee..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/xmodem/xmodem.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - X-Modem Header File - - 1999/09/03 sprite, support Xmode Tx & Rx -*/ - -#ifndef _XMODE_H_ -#define _XMODE_H_ - -#include - -/***************** - * X-Modem status - *****************/ -#define XMODEM_OK 1 -#define XMODEM_CANCEL 2 -#define XMODEM_ACK 3 -#define XMODEM_NAK 4 -#define XMODEM_COMPLETE 5 -#define XMODEM_NO_SESSION 6 -#define XMODEM_ABORT 7 -#define XMODEM_TIMEOUT 8 - -/**************************** - * flow control character - ****************************/ -#define SOH 0x01 /* Start of header */ -#define STX 0x02 /* Start of header XModem-1K */ -#define EOT 0x04 /* End of transmission */ -#define ACK 0x06 /* Acknowledge */ -#define NAK 0x15 /* Not acknowledge */ -#define CAN 0x18 /* Cancel */ -#define ESC 0x1b /* User Break */ - -/**************************** - * Xmode paramters - ****************************/ -#define FRAME_SIZE 132 /* X-modem structure */ -#define FRAME_SIZE_1K 1028 /* X-modem structure */ -#define XM_BUFFER_SIZE 1024 /* X-modem buffer */ -#define TIMEOUT 180 /* max timeout */ -#define RETRY_COUNT 20 /* Try times */ -#define xWAITTIME 0x00400000 /* waitiing time */ -#define WAIT_FRAME_TIME (10000*100) /* 10 sec, wait frame timeout */ -#define WAIT_CHAR_TIME (1000*100) /* 1 sec, wait char timeout */ - -/*********************** - * frame structure - ***********************/ -typedef struct -{ - unsigned char soh; - unsigned char recordNo; - unsigned char recordNoInverted; - unsigned char buffer[XM_BUFFER_SIZE]; - unsigned char CRC; -} XMODEM_FRAME; - -typedef struct _XMODEM_COM_PORT_ { - char (*poll) (void); - char (*get)(void); - void (*put)(char c); -}XMODEM_COM_PORT, *PXMODEM_COM_PORT; - -typedef struct _XMODEM_CTRL_ { - u16 xMUsing; - u16 currentFrame; /* current frame number */ - u16 previousFrame; /* previous frame number */ - u16 expected; - s16 rStatus; - s32 rFinish; - u32 total_frame; - u32 rx_len; - char *pXFrameBuf; - u32 (*RxFrameHandler)(char *ptr, u32 frame_num, u32 frame_size); - XMODEM_COM_PORT ComPort; -}XMODEM_CTRL, *PXMODEM_CTRL; - -typedef u32 (*RxFrameHandler_t)(char *ptr, u32 frame_num, u32 frame_size); - -extern s16 xModemStart(XMODEM_CTRL *pXMCtrl, char *FrameBuf, RxFrameHandler_t RxFrameHdl); -extern s16 xModemEnd(XMODEM_CTRL *pXMCtrl); -extern s32 xModemRxBuffer(XMODEM_CTRL *pXMCtrl, s32 MaxSize); - -#endif /* _XMODE_H_ */ - diff --git a/Firmware/RTLGDB/USDK/component/common/application/xmodem/xmport_loguart.h b/Firmware/RTLGDB/USDK/component/common/application/xmodem/xmport_loguart.h deleted file mode 100644 index 27c3abf..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/xmodem/xmport_loguart.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _XMPORT_LOGUART_H_ -#define _XMPORT_LOGUART_H_ - -#include "xmodem.h" - -//void xmodem_loguart_init(void); -void xmodem_loguart_init(u32 BaudRate); -void xmodem_loguart_func_hook(XMODEM_COM_PORT *pXComPort); -void xmodem_loguart_deinit(void); -char xmodem_loguart_readable(void); -char xmodem_loguart_writable(void); -char xmodem_loguart_getc(void); -void xmodem_loguart_putc(char c); - -#endif // end of "#define _XMPORT_LOGUART_H_" - diff --git a/Firmware/RTLGDB/USDK/component/common/application/xmodem/xmport_uart.h b/Firmware/RTLGDB/USDK/component/common/application/xmodem/xmport_uart.h deleted file mode 100644 index 2d8134c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/application/xmodem/xmport_uart.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _XMPORT_UART_H_ -#define _XMPORT_UART_H_ - -#include "xmodem.h" - -void xmodem_uart_init(u8 uart_idx, u8 pin_mux, u32 baud_rate); -void xmodem_uart_func_hook(XMODEM_COM_PORT *pXComPort); -void xmodem_uart_deinit(void); -char xmodem_uart_readable(void); -char xmodem_uart_writable(void); -char xmodem_uart_getc(void); -void xmodem_uart_putc(char c); - -#endif // end of "#define _XMPORT_UART_H_" - diff --git a/Firmware/RTLGDB/USDK/component/common/audio/g711_codec.h b/Firmware/RTLGDB/USDK/component/common/audio/g711_codec.h deleted file mode 100644 index d074b74..0000000 --- a/Firmware/RTLGDB/USDK/component/common/audio/g711_codec.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _G711_CODEC_H -#define _G711_CODEC_H -#include "basic_types.h" - -typedef enum { - I2S_MODE_UNKNOWN = -1, - I2S_MODE_G711A = 1, - I2S_MODE_G711U = 2 -}I2S_mode; - -typedef struct { - I2S_mode mode; //intend to encode as G711A or G711U - int len; //data length -// _sema RWSema; - unsigned char *raw_data; //address of buffered data (not encoded - int data_start; // a shift value to show where the data starts - int data_end; // a shift value shows data ending -}i2s_buf_context; - -//void encoder_init(int mode); -int G711_encoder(short *source, unsigned char *des, int mode, int size); -int G711_decoder(unsigned char *source, short *des, int mode, int size); -int mono2stereo(unsigned char *src, unsigned char *dst, int size, int wl); -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/ethernet_mii/ethernet_mii.c b/Firmware/RTLGDB/USDK/component/common/drivers/ethernet_mii/ethernet_mii.c deleted file mode 100644 index a65ccdc..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/ethernet_mii/ethernet_mii.c +++ /dev/null @@ -1,251 +0,0 @@ -#include "rtl8195a.h" -#include "build_info.h" -#ifdef PLATFORM_FREERTOS -#include "FreeRTOS.h" -#include "task.h" -#include "semphr.h" -#endif -#include "osdep_service.h" -#include "lwip_netconf.h" -#include "ethernet_api.h" -#include "lwip_intf.h" -#include "ethernet_mii.h" -#include "platform_opts.h" -#include "ethernet_ex_api.h" - -#if defined(CONFIG_MII_EN) - -static _sema mii_rx_sema; -static _mutex mii_tx_mutex; - -extern struct netif xnetif[NET_IF_NUM]; - -static u8 TX_BUFFER[1518]; -static u8 RX_BUFFER[1518]; - -static u8 *pTmpTxDesc = NULL; -static u8 *pTmpRxDesc = NULL; -static u8 *pTmpTxPktBuf = NULL; -static u8 *pTmpRxPktBuf = NULL; - - -int dhcp_ethernet_mii = 1; -int ethernet_if_default = 0; - -extern int lwip_init_done; - -static _sema mii_linkup_sema; - -void mii_rx_thread(void* param){ - u32 len = 0; - u8* pbuf = RX_BUFFER; - while(1){ - if (rtw_down_sema(&mii_rx_sema) == _FAIL){ - DBG_8195A("%s, Take Semaphore Fail\n", __FUNCTION__); - goto exit; - } - // continues read the rx ring until its empty - while(1){ - len = ethernet_receive(); - if(len){ - //DBG_8195A("mii_recv len = %d\n\r", len); - ethernet_read(pbuf, len); -// calculate the time duration - ethernetif_mii_recv(&xnetif[NET_IF_NUM - 1], len); - //__rtl_memDump_v1_00(pbuf, len, "ethernet_receive Data:"); - //rtw_memset(pbuf, 0, len); - }else if(len == 0){ - break; - } - } - } -exit: - rtw_free_sema(&mii_rx_sema); - vTaskDelete(NULL); -} - -void dhcp_start_mii(void* param) -{ - while(1) - { - if (rtw_down_sema(&mii_linkup_sema) == _FAIL){ - DBG_8195A("%s, Take Semaphore Fail\n", __FUNCTION__); - break; - } - LwIP_DHCP(NET_IF_NUM - 1, DHCP_START); - } - rtw_free_sema(&mii_linkup_sema); - vTaskDelete(NULL); -} - - -void mii_intr_handler(u32 Event, u32 Data) -{ - switch(Event) - { - case ETH_TXDONE: - //DBG_8195A("TX Data = %d\n", Data); - break; - case ETH_RXDONE: - //DBG_8195A("\r\nRX Data = %d\n", Data); - // wake up rx thread to receive data - rtw_up_sema_from_isr(&mii_rx_sema); - break; - case ETH_LINKUP: - DBG_8195A("Link Up\n"); - - if(dhcp_ethernet_mii == 1) - rtw_up_sema_from_isr(&mii_linkup_sema); - - break; - case ETH_LINKDOWN: - DBG_8195A("Link Down\n"); - - break; - default: - DBG_8195A("Unknown event!\n"); - break; - } -} - -void ethernet_demo(void* param){ - u8 mac[6]; - /* Initilaize the LwIP stack */ - // can not init twice - if(!lwip_init_done) - LwIP_Init(); - DBG_8195A("LWIP Init done\n"); - - ethernet_irq_hook(mii_intr_handler); - - if(pTmpTxDesc) - { - free(pTmpTxDesc); - pTmpTxDesc = NULL; - } - if(pTmpRxDesc) - { - free(pTmpRxDesc); - pTmpRxDesc = NULL; - } - if(pTmpTxPktBuf) - { - free(pTmpTxPktBuf); - pTmpTxPktBuf = NULL; - } - if(pTmpRxPktBuf) - { - free(pTmpRxPktBuf); - pTmpRxPktBuf = NULL; - } - - pTmpTxDesc = (u8 *)malloc(/*MII_TX_DESC_CNT*/MII_TX_DESC_NO * ETH_TX_DESC_SIZE); - pTmpRxDesc = (u8 *)malloc(/*MII_RX_DESC_CNT*/MII_RX_DESC_NO * ETH_RX_DESC_SIZE); - pTmpTxPktBuf = (u8 *)malloc(/*MII_TX_DESC_CNT*/MII_TX_DESC_NO * ETH_PKT_BUF_SIZE); - pTmpRxPktBuf = (u8 *)malloc(/*MII_RX_DESC_CNT*/MII_RX_DESC_NO * ETH_PKT_BUF_SIZE); - if(pTmpTxDesc == NULL || pTmpRxDesc == NULL || pTmpTxPktBuf == NULL || pTmpRxPktBuf == NULL) - { - printf("TX/RX descriptor malloc fail\n"); - return; - } - memset(pTmpTxDesc, 0, MII_TX_DESC_NO * ETH_TX_DESC_SIZE); - memset(pTmpRxDesc, 0, MII_RX_DESC_NO * ETH_RX_DESC_SIZE); - memset(pTmpTxPktBuf, 0, MII_TX_DESC_NO * ETH_PKT_BUF_SIZE); - memset(pTmpRxPktBuf, 0, MII_RX_DESC_NO * ETH_PKT_BUF_SIZE); - //size 160 128 12288 12288 - - ethernet_set_descnum(MII_TX_DESC_NO, MII_RX_DESC_NO); - printf("TRX descriptor number setting done\n"); - ethernet_trx_pre_setting(pTmpTxDesc, pTmpRxDesc, pTmpTxPktBuf, pTmpRxPktBuf); - printf("TRX pre setting done\n"); - - ethernet_init(); -#if 0 - DBG_INFO_MSG_OFF(_DBG_MII_); - DBG_WARN_MSG_OFF(_DBG_MII_); - DBG_ERR_MSG_ON(_DBG_MII_); -#endif - /*get mac*/ - ethernet_address(mac); - memcpy((void*)xnetif[NET_IF_NUM - 1].hwaddr,(void*)mac, 6); - - rtw_init_sema(&mii_rx_sema,0); - rtw_mutex_init(&mii_tx_mutex); - - if(xTaskCreate(mii_rx_thread, ((const char*)"mii_rx_th"), 1024, NULL, tskIDLE_PRIORITY+5, NULL) != pdPASS) - DBG_8195A("\n\r%s xTaskCreate(mii_rx_thread) failed", __FUNCTION__); - - DBG_8195A("\nEthernet_mii Init done, interface %d",NET_IF_NUM - 1); - - if(dhcp_ethernet_mii == 1) - LwIP_DHCP(NET_IF_NUM - 1, DHCP_START); - - vTaskDelete(NULL); -} - -void ethernet_mii_init() -{ - printf("\ninitializing Ethernet_mii......\n"); - - // set the ethernet interface as default - ethernet_if_default = 1; - rtw_init_sema(&mii_linkup_sema,0); - - if( xTaskCreate((TaskFunction_t)dhcp_start_mii, "DHCP_MII", 1024, NULL, 2, NULL) != pdPASS) { - DBG_8195A("Cannot create demo task\n\r"); - } - - if( xTaskCreate((TaskFunction_t)ethernet_demo, "ETH_DEMO", 1024, NULL, 2, NULL) != pdPASS) { - DBG_8195A("Cannot create demo task\n\r"); - } - -} - - -void rltk_mii_recv(struct eth_drv_sg *sg_list, int sg_len){ - struct eth_drv_sg *last_sg; - u8* pbuf = RX_BUFFER; - - for (last_sg = &sg_list[sg_len]; sg_list < last_sg; ++sg_list) { - if (sg_list->buf != 0) { - rtw_memcpy((void *)(sg_list->buf), pbuf, sg_list->len); - pbuf+=sg_list->len; - } - } -} - - -s8 rltk_mii_send(struct eth_drv_sg *sg_list, int sg_len, int total_len){ - int ret =0; - struct eth_drv_sg *last_sg; - u8* pdata = TX_BUFFER; - u8 retry_cnt = 0; - u32 size = 0; - for (last_sg = &sg_list[sg_len]; sg_list < last_sg; ++sg_list) { - rtw_memcpy(pdata, (void *)(sg_list->buf), sg_list->len); - pdata += sg_list->len; - size += sg_list->len; - } - pdata = TX_BUFFER; - //DBG_8195A("mii_send len= %d\n\r", size); - rtw_mutex_get(&mii_tx_mutex); - while(1){ - ret = ethernet_write(pdata, size); - if(ret > 0){ - ethernet_send(); - ret = 0; - break; - } - if(++retry_cnt > 3){ - DBG_8195A("TX drop\n\r"); - ret = -1; - } - else - rtw_udelay_os(1); - } - rtw_mutex_put(&mii_tx_mutex); - - return ret; -} - -#endif //CONFIG_MII_EN diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/ethernet_mii/ethernet_mii.h b/Firmware/RTLGDB/USDK/component/common/drivers/ethernet_mii/ethernet_mii.h deleted file mode 100644 index 4edec6f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/ethernet_mii/ethernet_mii.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef __MII_ETHERNETIF_H__ -#define __MII_ETHERNETIF_H__ - -#include "lwip_netconf.h" - -#define MII_TX_DESC_CNT 4 -#define MII_RX_DESC_CNT 10 -#if CONFIG_ETHERNET -extern s8 rltk_mii_send(struct eth_drv_sg *sg_list, int sg_len, int total_len); -extern void rltk_mii_recv(struct eth_drv_sg *sg_list, int sg_len); -#endif -#endif // __MII_ETHERNETIF_H__ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/i2s/alc5651.c b/Firmware/RTLGDB/USDK/component/common/drivers/i2s/alc5651.c deleted file mode 100644 index f3365b4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/i2s/alc5651.c +++ /dev/null @@ -1,196 +0,0 @@ -#include -#include "PinNames.h" -#include "basic_types.h" -#include "diag.h" -#include - -#include "i2c_api.h" -#include "pinmap.h" - -//#define I2C_MTR_SDA PC_4//PB_3 -//#define I2C_MTR_SCL PC_5//PB_2 -#define I2C_MTR_SDA PB_3 -#define I2C_MTR_SCL PB_2 -#define I2C_BUS_CLK 100000 //hz - -#define I2C_ALC5651_ADDR (0x34/2) - -#define RT5651_PRIV_INDEX 0x6a -#define RT5651_PRIV_DATA 0x6c - -#if defined (__ICCARM__) -i2c_t alc5651_i2c; -#else -volatile i2c_t alc5651_i2c; -#define printf DBG_8195A -#endif - -static void alc5651_delay(void) -{ - int i; - - i=10000; - while (i) { - i--; - asm volatile ("nop\n\t"); - } -} - -void alc5651_reg_write(unsigned int reg, unsigned int value) -{ - char buf[4]; - buf[0] = (char)reg; - buf[1] = (char)(value>>8); - buf[2] = (char)(value&0xff); - - i2c_write(&alc5651_i2c, I2C_ALC5651_ADDR, &buf[0], 3, 1); - alc5651_delay(); -} - -void alc5651_reg_read(unsigned int reg, unsigned int *value) -{ - int tmp; - char *buf = (char*)&tmp; - - buf[0] = (char)reg; - i2c_write(&alc5651_i2c, I2C_ALC5651_ADDR, &buf[0], 1, 1); - alc5651_delay(); - - buf[0] = 0xaa; - buf[1] = 0xaa; - - i2c_read(&alc5651_i2c, I2C_ALC5651_ADDR, &buf[0], 2, 1); - alc5651_delay(); - - *value= ((buf[0]&0xFF)<<8)|(buf[1]&0xFF); -} - -void alc5651_index_write(unsigned int reg, unsigned int value) -{ - alc5651_reg_write(RT5651_PRIV_INDEX, reg); - alc5651_reg_write(RT5651_PRIV_DATA, value); -} - -void alc5651_index_read(unsigned int reg, unsigned int *value) -{ - alc5651_reg_write(RT5651_PRIV_INDEX, reg); - alc5651_reg_read(RT5651_PRIV_DATA, value); -} - -void alc5651_reg_dump(void) -{ - int i; - unsigned int value; - - printf("alc5651 codec reg dump\n\r"); - printf("------------------------\n\r"); - for(i=0;i<=0xff;i++){ - alc5651_reg_read(i, &value); - printf("%02x : %04x\n\r", i, (unsigned short)value); - } - printf("------------------------\n\r"); -} - -void alc5651_index_dump(void) -{ - int i; - unsigned int value; - - printf("alc5651 codec index dump\n\r"); - printf("------------------------\n\r"); - for(i=0;i<=0xff;i++){ - alc5651_index_read(i, &value); - printf("%02x : %04x\n\r", i, (unsigned short)value); - } - printf("------------------------\n\r"); -} - -void alc5651_init(void) -{ - i2c_init(&alc5651_i2c, I2C_MTR_SDA, I2C_MTR_SCL); - i2c_frequency(&alc5651_i2c, I2C_BUS_CLK); -} - -void alc5651_set_word_len(int len_idx) // interface2 -{ - // 0: 16 1: 20 2: 24 3: 8 - unsigned int val; - alc5651_reg_read(0x71,&val); - val &= (~(0x3<<2)); - val |= (len_idx<<2); - alc5651_reg_write(0x71,val); - alc5651_reg_read(0x70,&val); - val &= (~(0x3<<2)); - val |= (len_idx<<2); - alc5651_reg_write(0x70,val); - -} - -void alc5651_init_interface1(void) -{ - alc5651_reg_write(0x00,0x0021); - alc5651_reg_write(0x63,0xE8FE); - alc5651_reg_write(0x61,0x5800); - alc5651_reg_write(0x62,0x0C00); - alc5651_reg_write(0x73,0x0000); - alc5651_reg_write(0x2A,0x4242); - alc5651_reg_write(0x45,0x2000); - alc5651_reg_write(0x02,0x4848); - alc5651_reg_write(0x8E,0x0019); - alc5651_reg_write(0x8F,0x3100); - alc5651_reg_write(0x91,0x0E00); - alc5651_index_write(0x3D,0x3E00); - alc5651_reg_write(0xFA,0x0011); - alc5651_reg_write(0x83,0x0800); - alc5651_reg_write(0x84,0xA000); - alc5651_reg_write(0xFA,0x0C11); - alc5651_reg_write(0x64,0x4010); - alc5651_reg_write(0x65,0x0C00); - alc5651_reg_write(0x61,0x5806); - alc5651_reg_write(0x62,0xCC00); - alc5651_reg_write(0x3C,0x004F); - alc5651_reg_write(0x3E,0x004F); - alc5651_reg_write(0x27,0x3820); - alc5651_reg_write(0x77,0x0000); -} - -void alc5651_init_interface2(void) -{ - int reg_value=0; - alc5651_reg_write(0x00,0x0021);//reset all, device id 1 - alc5651_reg_write(0x63,0xE8FE);//Power managerment control 3: - //VREF1&2 on, both slow VREF, MBIAS on, MBIAS bandcap power on, L & R HP Amp on, improve HP Amp driving enabled - alc5651_reg_write(0x61,0x5800);//power managerment control 1: - //I2S2 digital interface on, Analog DACL1 & DACR1 on. - alc5651_reg_write(0x62,0x0C00);//stereo1 & 2 DAC filter power on - alc5651_reg_write(0x73,0x0000);//ADC/DAC Clock control 1: - //I2S Clock Pre-Divider 1 & 2: /1. Stereo DAC Over Sample Rate : 128Fs - alc5651_reg_write(0x2A,0x4242);//Stereo DAC digital mixer control - //Un-mute DACL2 to Stereo DAC Left & Right Mixer - alc5651_reg_write(0x45,0x2000);//HPOMIX: Un-mute DAC1 to HPOMIX - alc5651_reg_write(0x02,0x4848);//HP Output Control: - //Unmute HPOL, HPOR -// alc5651_reg_write(0x0F,0x1F1F);//INL & INR Volume Control -// alc5651_reg_write(0x0D,0x0800);//IN1/2 Input Control -// alc5651_reg_write(0x1C,0x7F7F);//Stereo1 ADC Digital Volume Control -// alc5651_reg_write(0x1E,0xF000);// ADC Digital Boost Gain Control - alc5651_reg_write(0x8E,0x0019);//HP Amp Control 1 -// Enable HP Output, Charge Pump Power On, HP Amp All Power On - alc5651_reg_write(0x8F,0x3100);//HP Amp Control 2, HP Depop Mode 2 - alc5651_reg_write(0x91,0x0E00);//HP Amp Control 3, select HP capless power mode - alc5651_index_write(0x3D,0x3E00);//unknown - alc5651_reg_write(0xFA,0x0011);//enable input clock - alc5651_reg_write(0x83,0x0800);//default ASRC control 1 - alc5651_reg_write(0x84,0xA000);//ASRC control 2: I2S1 enable ASRC mode, Sterol1 DAC filter ASRC mode. -// alc5651_reg_write(0xFA,0x0C11);//? ? ? MX-FAh[15:4]reserved - alc5651_reg_write(0x64,0x4010);//power managerment control 4: - //MIC BST2 Power On; MIC2 SE Mode single-end mode or line-input mode - alc5651_reg_write(0x65,0x0C00);//power managerment control 5: RECMIX L & R power on - alc5651_reg_write(0x61,0x5806);//power managerment control 1: -// I2S2 Digital Interface On, Analog DACL1, DACR1 power on; Analog ADCL, ADCR power on - alc5651_reg_write(0x62,0xCC00);//power managerment control 2: Stereo1&2 ADC/DAC digital filter power on - alc5651_reg_write(0x3C,0x004F);//RECMIXL - alc5651_reg_write(0x3E,0x004F);//RECMIXR - alc5651_reg_write(0x28,0x3030);//stereo2 ADC digital mixer control : Mute Stereo2 ADC L&R channel, ADCR - alc5651_reg_write(0x2F,0x0080); //Interface DAC/ADC Data control: Select IF2 ADCDAT Data Source IF1_ADC2 -} \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/sdio/realtek/sdio_host/inc/sd.h b/Firmware/RTLGDB/USDK/component/common/drivers/sdio/realtek/sdio_host/inc/sd.h deleted file mode 100644 index b23bdf9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/sdio/realtek/sdio_host/inc/sd.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef _SD_DRIVER_H -#define _SD_DRIVER_H - -#include "basic_types.h" - -#define CONFIG_SD_SDIO 1 -#define CONFIG_SD_SPI 0 - -typedef enum -{ - SD_OK = 0, - SD_PROTECTED, - SD_NODISK, - SD_INITERR, - SD_ERROR, -}SD_RESULT; - -typedef enum{ - SD_CLK_LOW, // 10.4MHz - SD_CLK_MID, // 20.8MHz - SD_CLK_HIGH, // 41.6MHz - SD_CLK_RSV, // 5.2MHz -}SD_CLK; - -SD_RESULT SD_WaitReady(void); -SD_RESULT SD_Init(void); -SD_RESULT SD_DeInit(void); -SD_RESULT SD_SetCLK(SD_CLK CLK); - -SD_RESULT SD_Status(void); - -SD_RESULT SD_GetCID(u8 *cid_data); // read sd card CID -SD_RESULT SD_GetCSD(u8 *csd_data); // read sd card CSD -SD_RESULT SD_GetCapacity(u32* sector_count); // read sd card Capacity - -SD_RESULT SD_ReadBlocks(u32 sector,u8 *data,u32 count); //read multi sector -SD_RESULT SD_WriteBlocks(u32 sector,const u8 *data,u32 count); //write multi sector - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/sdio/realtek/sdio_host/inc/sdio_host.h b/Firmware/RTLGDB/USDK/component/common/drivers/sdio/realtek/sdio_host/inc/sdio_host.h deleted file mode 100644 index ff174d0..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/sdio/realtek/sdio_host/inc/sdio_host.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef _SDIO_HOST_H -#define _SDIO_HOST_H -#include "basic_types.h" -#include "rtl8195a_sdio_host.h" - -#define SDIO_HOST_BYTES_ALINGMENT 4 - -typedef enum{ - SDIO_INIT_NONE = -1, - SDIO_INIT_FAIL = 0, - SDIO_INIT_OK = 1, - SDIO_SD_NONE = 2, - SDIO_SD_OK = 3, -}_sdio_init_s; - -extern _sdio_init_s sdio_status; - -typedef void (*sdio_sd_irq_handler)(void* param); - - -s8 sdio_init_host(void); // init sdio host interface -void sdio_deinit_host(void); - -s8 sdio_sd_init(void); // init sd card through sdio -void sdio_sd_deinit(void); //de-init sd card through sdio -s8 sdio_sd_status(void); -u32 sdio_sd_getCapacity(void); -s8 sdio_sd_getProtection(void); -s8 sdio_sd_setProtection(bool protection); -s8 sdio_sd_getCSD(u8* CSD); -s8 sdio_sd_isReady(); -s8 sdio_sd_setClock(SD_CLK_FREQUENCY SDCLK); - - -s8 sdio_read_blocks(u32 sector, u8 *buffer, u32 count); -s8 sdio_write_blocks(u32 sector, const u8 *buffer, u32 count); - -s8 sdio_sd_hook_xfer_cmp_cb(IN sdio_sd_irq_handler CallbackFun,IN VOID *param); -s8 sdio_sd_hook_remove_cb(IN sdio_sd_irq_handler CallbackFun,IN VOID *param); -s8 sdio_sd_hook_insert_cb(IN sdio_sd_irq_handler CallbackFun,IN VOID *param); -s8 sdio_sd_hook_xfer_err_cb(IN sdio_sd_irq_handler CallbackFun,IN VOID *param); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/sdio/realtek/sdio_host/src/sd.c b/Firmware/RTLGDB/USDK/component/common/drivers/sdio/realtek/sdio_host/src/sd.c deleted file mode 100644 index 9fa1ab4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/sdio/realtek/sdio_host/src/sd.c +++ /dev/null @@ -1,177 +0,0 @@ -/* - * sd.c (disasm ds.o) - * - * RTL8710/11 pvvx 12/2016 - */ - -#include "rtl8195a.h" -#ifdef CONFIG_SDIO_HOST_EN -#include "sd.h" -#include "sdio_host.h" -#include "semphr.h" - -#define SIZE_BLOCK_ADMA 512 - -SemaphoreHandle_t sdWSema; - -void sd_xfer_done_callback(void *obj) { - rtw_up_sema(&sdWSema); -} - -void sd_xfer_err_callback(void *obj) { - DBG_SDIO_ERR("sd_xfer_err_callback \r\n"); -} - -//----- SD_WaitReady -SD_RESULT SD_WaitReady() { - return SD_OK; -} - -//----- SD_Init -SD_RESULT SD_Init() { - SD_RESULT result; - - if (sdio_sd_init() != 0) - result = SD_INITERR; - else { - if (sdio_sd_getProtection() != 0) - result = SD_PROTECTED; - rtw_init_sema(&sdWSema, 0); - sdio_sd_hook_xfer_cmp_cb(sd_xfer_done_callback, 0); - sdio_sd_hook_xfer_err_cb(sd_xfer_err_callback, 0); - } - return result; -} - -//----- SD_DeInit -SD_RESULT SD_DeInit() { - sdio_sd_deinit(); - rtw_free_sema(&sdWSema); - return SD_OK; -} - -//----- SD_SetCLK -SD_RESULT SD_SetCLK(SD_CLK CLK) { - SD_RESULT result; - switch (CLK) { - case SD_CLK_HIGH: - result = sdio_sd_setClock(SD_CLK_41_6MHZ); - break; - case SD_CLK_MID: - result = sdio_sd_setClock(SD_CLK_20_8MHZ); - break; - case SD_CLK_LOW: - result = sdio_sd_setClock(SD_CLK_10_4MHZ); - break; - case SD_CLK_RSV: - result = sdio_sd_setClock(SD_CLK_5_2MHZ); - break; - default: -// DBG_SDIO_INFO("clk = %d ?\n", CLK); - return SD_ERROR; - } - if (result) - return SD_ERROR; - return SD_OK; -} - -//----- SD_Status -SD_RESULT SD_Status() { - if (sdio_sd_isReady()) - return SD_NODISK; - else - return sdio_sd_getProtection() != 0; -} - -//----- SD_GetCID -SD_RESULT SD_GetCID(u8 *cid_data) { - return SD_OK; -} - -//----- SD_GetCSD -SD_RESULT SD_GetCSD(u8 *csd_data) { - if (sdio_sd_getCSD(csd_data)) - return SD_ERROR; - else - return SD_OK; -} - -//----- SD_GetCapacity -SD_RESULT SD_GetCapacity(uint32_t *sector_count) { - - u32 sc = sdio_sd_getCapacity(); - *sector_count = sc; - if (sc != 0) - return SD_OK; - else - return SD_ERROR; -} - -//----- SD_ReadBlocks -SD_RESULT SD_ReadBlocks(u32 sector, u8 *data, u32 count) { - int rd_count = 0; - unsigned char * buf; - - if ((u32) data & 3) { - buf = pvPortMalloc(SIZE_BLOCK_ADMA); - if (buf == NULL) - DBG_SDIO_ERR("Fail to malloc cache for SDIO host!\n"); - u32 end_sector = count + sector; - while (sector < end_sector) { - rd_count = sdio_read_blocks(sector, buf, 1); -// rtl_printf("rd_counts = %d\n", rd_count); - if (rd_count == 0 && rtw_down_timeout_sema(&sdWSema, 1000) != 1) { - DBG_SDIO_ERR("SD_ReadBlocks timeout\n"); - return SD_ERROR; - } - rtl_memcpy(data, buf, SIZE_BLOCK_ADMA); - sector++; - data += SIZE_BLOCK_ADMA; - } - vPortFree(buf); - if (rd_count) - return SD_ERROR; - return SD_OK; - } else { - if (sdio_read_blocks(sector, data, count) == 0) { - if (rtw_down_timeout_sema(&sdWSema, 1000) == 1) - return SD_OK; - DBG_SDIO_ERR("SD_ReadBlocks timeout\n"); - } - } - - return SD_ERROR; -} - -//----- SD_WriteBlocks -SD_RESULT SD_WriteBlocks(u32 sector, const u8 *data, u32 count) { - int wr_count = 0; - unsigned char * buf; - - if ((u32) data & 3) { - buf = pvPortMalloc(SIZE_BLOCK_ADMA); - if (buf == NULL) - DBG_SDIO_ERR("Fail to malloc cache for SDIO host!\n"); - u32 end_sector = count + sector; - while (sector != end_sector) { - rtl_memcpy(buf, data, SIZE_BLOCK_ADMA); - wr_count = sdio_write_blocks(sector, buf, 1); - if (wr_count == 0 && rtw_down_timeout_sema(&sdWSema, 1000) != 1) { - DBG_SDIO_ERR("SD_WriteBlocks timeout\n"); - return SD_ERROR; - } - sector++; - data += SIZE_BLOCK_ADMA; - } - vPortFree(buf); - if (wr_count == 0) - return SD_OK; - } else if (sdio_write_blocks(sector, data, count) == 0) { - if (rtw_down_timeout_sema(&sdWSema, 1000) == 1) - return SD_OK; - DBG_SDIO_ERR("SD_WriteBlocks timeout\n"); - } - return SD_ERROR; - -} -#endif // CONFIG_SDIO_HOST_EN diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/sdio/realtek/sdio_host/src/sdio_host.c b/Firmware/RTLGDB/USDK/component/common/drivers/sdio/realtek/sdio_host/src/sdio_host.c deleted file mode 100644 index 456acc6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/sdio/realtek/sdio_host/src/sdio_host.c +++ /dev/null @@ -1,408 +0,0 @@ -/* - * sdio_host.c (disasm sdio_host.o) - * - * RTL8710/11 pvvx 12/2016 - */ - -#include "rtl8195a.h" -#ifdef CONFIG_SDIO_HOST_EN -#include "sd.h" -#include "sdio_host.h" -#include "hal_sdio_host.h" -#include "rtl8195a_sdio_host.h" -//#include "hal_sdio.h" -//#include "PinNames.h" -//#include "pinmap.h" - -#define MAX_BUF_ADMA 64 -#define SIZE_BLOCK_ADMA 512 -//------------------------------------------------------------------------- -// Function declarations -//------------------------------------------------------------------------- -// Data declarations -sdio_sd_irq_handler xfer_done_irq_handler; -uint32_t xfer_err_irq_data; -uint32_t xfer_done_irq_data; -sdio_sd_irq_handler xfer_err_irq_handler; -_sdio_init_s sdio_status = SDIO_INIT_NONE; -sdio_sd_irq_handler card_remove_irq_handler; -uint32_t card_remove_irq_data; -sdio_sd_irq_handler card_insert_irq_handler; -uint32_t card_insert_irq_data; -HAL_SDIO_HOST_OP HalSdioHostOp; -s8 sd_protected = -1; -HAL_SDIO_HOST_ADAPTER SdioHostAdapter; -SRAM_BF_DATA_SECTION ADMA2_DESC_FMT gAdmaTbls[MAX_BUF_ADMA]; -//------------------------------------------------------------------------- - -void xfer_done_callback(void *param) { - if (xfer_done_irq_handler) - xfer_done_irq_handler((void *) xfer_done_irq_data); -} - -void xfer_err_callback(void *param) { - if (xfer_err_irq_handler) - xfer_err_irq_handler((void *) xfer_err_irq_data); -} - -void card_insert_callback(void *param) { -#if CONFIG_DEBUG_LOG > 1 - rtl_printf("SD card insert\n"); -#endif - if (card_insert_irq_handler) - card_insert_irq_handler((void *) card_insert_irq_data); -} - -void card_remove_callback(void *param) { -#if CONFIG_DEBUG_LOG > 1 - rtl_printf("SD card removed\n"); -#endif - sdio_status = SDIO_SD_NONE; - if (card_remove_irq_handler) - card_remove_irq_handler((void *) card_remove_irq_data); -} - -//----- sdio_init_host -s8 sdio_init_host() { - s8 result; - HAL_Status stat; - - DBG_SDIO_INFO("SDIO Init Host Begin...\n"); - if (sdio_status > SDIO_INIT_FAIL) { - DBG_SDIO_INFO("SDIO Host init already.\n"); - result = 0; - } else { - rtl_memset(&SdioHostAdapter, 0, sizeof(SdioHostAdapter)); - HalSdioHostOpInit(&HalSdioHostOp); - stat = HalSdioHostOp.HalSdioHostInitHost(&SdioHostAdapter); - SdioHostAdapter.CardInsertCbPara = &SdioHostAdapter; - SdioHostAdapter.CardInsertCallBack = - (void (*)(void *)) card_insert_callback; - SdioHostAdapter.CardRemoveCbPara = &SdioHostAdapter; - SdioHostAdapter.CardRemoveCallBack = - (void (*)(void *)) card_remove_callback; - SdioHostAdapter.XferCompCbPara = &SdioHostAdapter; - SdioHostAdapter.XferCompCallback = - (void (*)(void *)) xfer_done_callback; - SdioHostAdapter.ErrorCbPara = &SdioHostAdapter; - SdioHostAdapter.ErrorCallback = (void (*)(void *)) xfer_err_callback; - if (stat == HAL_OK) { - sdio_status = SDIO_INIT_OK; - DBG_SDIO_INFO("SDIO Host init Success.\n"); - result = 0; - } else { - sdio_status = SDIO_INIT_FAIL; - DBG_SDIO_ERR("SDIO Host init Fail.\n"); - result = -1; - } - } - return result; -} - -//----- -void sdio_deinit_host(void) { - if (sdio_status > 0) { - HAL_Status hs = HalSdioHostOp.HalSdioHostDeInit(&SdioHostAdapter); - if (hs == HAL_OK) { - SdioHostAdapter.CardInsertCallBack = NULL; - SdioHostAdapter.CardRemoveCallBack = NULL; - sdio_status = SDIO_INIT_NONE; - } - } -} - -//----- -s8 sdio_read_blocks(u32 sector, u8 *buffer, u32 count) { - - if (!count) { - DBG_SDIO_ERR("Parameter error, try to read %d count\n"); - return -1; - } - if (sdio_status <= SDIO_SD_NONE) { - DBG_SDIO_ERR("SD card is not ready\n"); - return -1; - } - if (count > MAX_BUF_ADMA) { - count = MAX_BUF_ADMA; - DBG_SDIO_ERR("Not enough ADMA table(maximum %d), reduce blocks count\n", - count); - } - rtl_memset(gAdmaTbls, 0, sizeof(ADMA2_DESC_FMT) * count); - if (1) { - ADMA2_DESC_FMT *p = gAdmaTbls; - u8 * pbuf = buffer; - int i = 0; - while (i < count) { - i++; - p->Addr1 = (u32) pbuf; - p->Len1 = SIZE_BLOCK_ADMA; - if (i == count) { - p->Attrib1.Valid = 1; // 0x23 - p->Attrib1.End = 1; - p->Attrib1.Act2 = 1; - } else { - p->Attrib1.Valid = 1; // 0x21 - p->Attrib1.Act2 = 1; - p->Attrib2.Valid = 1; // 0x31 - p->Attrib2.Act1 = 1; - p->Attrib2.Act2 = 1; - p->Len2 = 0; - p->Addr2 = (u32) (&p[1]); - } - pbuf += SIZE_BLOCK_ADMA; - p++; - } - SdioHostAdapter.AdmaDescTbl = gAdmaTbls; - } - HAL_Status result = HalSdioHostOp.HalSdioHostReadBlocksDma(&SdioHostAdapter, - (unsigned long long) sector * SIZE_BLOCK_ADMA, count); - if (result) { - DBG_SDIO_ERR("sdio_read_blocks fail(0x%02x)\n", result); - return -1; - } - return 0; -} - -//----- -s8 sdio_write_blocks(uint32_t sector, const uint8_t *buffer, uint32_t count) { - - if (!count) { - DBG_SDIO_ERR("Parameter error, try to read %d count\n"); - return -1; - } - if (sdio_status <= SDIO_SD_NONE) { - DBG_SDIO_ERR("SD card is not ready\n"); - return -1; - } - if (count > MAX_BUF_ADMA) { - count = MAX_BUF_ADMA; - DBG_SDIO_ERR("Not enough ADMA table(maximum %d), reduce blocks count\n", - count); - } - if (sd_protected) { - DBG_SDIO_ERR("SD card is write protected\n"); - return -1; - } - rtl_memset(gAdmaTbls, 0, sizeof(ADMA2_DESC_FMT) * count); - if (1) { - ADMA2_DESC_FMT *p = gAdmaTbls; - u8 * pbuf = (u8 *)buffer; - int i = 0; - while (i < count) { - i++; - p->Addr1 = (u32) pbuf; - p->Len1 = SIZE_BLOCK_ADMA; - if (i == count) { - p->Attrib1.Valid = 1; // 0x23 - p->Attrib1.End = 1; - p->Attrib1.Act2 = 1; - } else { - p->Attrib1.Valid = 1; // 0x21 - p->Attrib1.Act2 = 1; - p->Attrib2.Valid = 1; // 0x31 - p->Attrib2.Act1 = 1; - p->Attrib2.Act2 = 1; - p->Len2 = 0; - p->Addr2 = (u32) (&p[1]); - } - pbuf += SIZE_BLOCK_ADMA; - p++; - } - SdioHostAdapter.AdmaDescTbl = gAdmaTbls; - } - HAL_Status result = HalSdioHostOp.HalSdioHostWriteBlocksDma( - &SdioHostAdapter, (unsigned long long) sector * SIZE_BLOCK_ADMA, - count); - if (result != HAL_OK) { - DBG_SDIO_ERR("write fail(0x%02x)\n", result); - return -1; - } - return 0; -} - -//----- -s8 sdio_sd_init(void) { - if (sdio_status != SDIO_SD_OK) { - if (sdio_status <= SDIO_INIT_FAIL) - sdio_init_host(); - if (sdio_status != SDIO_INIT_OK) { - return -1; - } - DBG_SDIO_INFO("Init sd card.\n"); - SdioHostAdapter.AdmaDescTbl = gAdmaTbls; - if (HalSdioHostOp.HalSdioHostInitCard(&SdioHostAdapter)) { - return -1; - } - sdio_status = SDIO_SD_OK; - if (HalSdioHostOp.HalSdioHostChangeSdClock(&SdioHostAdapter, - SD_CLK_20_8MHZ) != HAL_OK) -// SD_CLK_41_6MHZ) != HAL_OK) - DBG_SDIO_INFO("SD card does not support high speed.\n"); - } - return 0; -} - -//----- -void sdio_sd_deinit() { - if (sdio_status > SDIO_SD_NONE) - sdio_status = SDIO_INIT_OK; - sdio_deinit_host(); // add pvvx (fix SD_DeInit()) -} - -//----- -s8 sdio_sd_setClock(SD_CLK_FREQUENCY SDCLK) { - HAL_Status sta; - if (sdio_status <= SDIO_SD_NONE) { - return -1; - } - ADMA2_DESC_FMT * padma = (ADMA2_DESC_FMT *) rtw_zmalloc(sizeof(ADMA2_DESC_FMT)); - if (!padma) { - DBG_SDIO_ERR("Malloc ADMA2 table fail.\n"); - return -1; - } - DBG_SDIO_INFO("SD card set CLK %d Hz\n", PLATFORM_CLOCK/(2 << (SD_CLK_41_6MHZ - SDCLK))); - sta = HalSdioHostOp.HalSdioHostChangeSdClock(&SdioHostAdapter, SDCLK); - rtw_mfree((u8 *)padma, sizeof(ADMA2_DESC_FMT)); - if (sta) - return -1; - return 0; -} - -//----- -s8 sdio_sd_setProtection(bool protection) { - s8 result; - ADMA2_DESC_FMT *padma; - HAL_Status hls; - if (sdio_status > SDIO_SD_NONE) { - padma = (ADMA2_DESC_FMT *) rtw_zmalloc(sizeof(ADMA2_DESC_FMT)); - if (!padma) { - DBG_SDIO_ERR("Malloc ADMA2 table fail.\n"); - return -1; - } - SdioHostAdapter.AdmaDescTbl = padma; - if (protection) { - if (sd_protected == 1) - goto LABEL_8; - hls = HalSdioHostOp.HalSdioHostSetWriteProtect(&SdioHostAdapter, 1); - } else { - if (sd_protected == 0) - goto LABEL_8; - hls = HalSdioHostOp.HalSdioHostSetWriteProtect(&SdioHostAdapter, 0); - } - if (hls) { - DBG_SDIO_ERR("Set SD card Protection fail.\n"); - result = -1; - goto LABEL_17; - } -LABEL_8: - sd_protected = protection; - DBG_SDIO_INFO("Set SD card Protection done.\n"); - result = 0; -LABEL_17: - rtw_mfree((u8 *)padma, sizeof(ADMA2_DESC_FMT)); - return result; - } - return -1; -} - -//----- sdio_sd_getProtection -s8 sdio_sd_getProtection() { - s8 result; - - result = sd_protected; - if (sd_protected != -1) - return result; - if (sdio_status <= SDIO_SD_NONE) { - result = -1; - return result; - } - if (HalSdioHostOp.HalSdioHostGetWriteProtect(&SdioHostAdapter)) { - DBG_SDIO_ERR("Get SD card Protection fail.\n"); - result = -1; - return result; - } - if (SdioHostAdapter.IsWriteProtect) - DBG_SDIO_INFO("SD card is Write Protected.\n"); - result = (s8) SdioHostAdapter.IsWriteProtect; - sd_protected = SdioHostAdapter.IsWriteProtect; - return result; -} - -//----- sdio_sd_status -s8 sdio_sd_status() { - s8 result; - - DBG_SDIO_INFO("sdio_get_sdcard_status.\n"); - if (sdio_status <= SDIO_SD_NONE - || HalSdioHostOp.HalSdioHostGetCardStatus(&SdioHostAdapter)) - result = -1; - else - result = SdioHostAdapter.CardCurState; - return result; -} - -//----- sdio_sd_getCSD -s8 sdio_sd_getCSD(u8* CSD) { - s8 result; - - if (sdio_status <= SDIO_SD_NONE) - result = -1; - else { - rtl_memcpy(CSD, SdioHostAdapter.Csd, CSD_REG_LEN); - result = 0; - } - return result; -} - -//----- sdio_sd_isReady -s8 sdio_sd_isReady() { - s8 result = sdio_status - SDIO_SD_OK; - if (sdio_status != SDIO_SD_OK) - result = -1; - return result; -} - -//----- sdio_sd_getCapacity -u32 sdio_sd_getCapacity(void) { - u32 result; - uint8_t csd[CSD_REG_LEN]; - if (sdio_status <= SDIO_SD_NONE) - result = 0; // -1; - else { - rtl_memcpy(csd, SdioHostAdapter.Csd, CSD_REG_LEN); - if ((csd[0] & 0xC0) == 64) - result = (u16) (csd[9] + 1 + (csd[8] << 8)) << 9; - else - result = (4 * csd[7] + ((u32) csd[8] >> 6) + 1 - + ((csd[6] & 3) << 10)) - << ((csd[5] & 0xF) + (csd[10] >> 7) + 2 * (csd[9] & 3) - 8); - result *= 2; - } - return result; -} - -s8 sdio_sd_hook_insert_cb(sdio_sd_irq_handler CallbackFun, void *param) { - card_insert_irq_handler = CallbackFun; - card_insert_irq_data = (uint32_t) param; - return 0; -} - -s8 sdio_sd_hook_remove_cb(sdio_sd_irq_handler CallbackFun, void *param) { - card_remove_irq_handler = CallbackFun; - card_remove_irq_data = (uint32_t) param; - return 0; -} - -s8 sdio_sd_hook_xfer_cmp_cb(sdio_sd_irq_handler CallbackFun, void *param) { - xfer_done_irq_handler = CallbackFun; - xfer_done_irq_data = (uint32_t) param; - return 0; -} - -s8 sdio_sd_hook_xfer_err_cb(sdio_sd_irq_handler CallbackFun, void *param) { - xfer_err_irq_handler = CallbackFun; - xfer_err_irq_data = (uint32_t) param; - return 0; -} - -#endif // CONFIG_SDIO_HOST_EN diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/ethernet/inc/eth_debug.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/ethernet/inc/eth_debug.h deleted file mode 100644 index 71fe0bc..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/ethernet/inc/eth_debug.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _ETH_DEBUG_H_ -#define _ETH_DEBUG_H_ - -#define ETH_DEBUG 0 - -#if ETH_DEBUG -#define ETH_PRINT(fmt, args...) printf("\n\r[%s]%s: " fmt, __FUNCTION__, ## args) -#define ETH_ERROR(fmt, args...) printf("\n\r[%s]%s: " fmt, __FUNCTION__, ## args) -#define ETH_WARM(fmt, args...) printf("\n\r[%s]%s: " fmt, __FUNCTION__, ## args) -#define FUN_ENTER printf("\n\r[%s ==>]\n", __func__) -#define FUN_EXIT printf("\n\r[%s <==]\n", __func__) -#define FUN_TRACE printf("\n\r[%s]:%d \n", __func__, __LINE__) -#else -#define ETH_PRINT(fmt, args...) -#define ETH_ERROR(fmt, args...) printf("\n\r%s: " fmt,__FUNCTION__, ## args) -#define ETH_WARM(fmt, args...) -#define FUN_ENTER -#define FUN_EXIT -#define FUN_TRACE -#endif - -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/ethernet/inc/usb_ethernet.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/ethernet/inc/usb_ethernet.h deleted file mode 100644 index 17b481c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/ethernet/inc/usb_ethernet.h +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Ethernet gadget driver -- with CDC and non-CDC options - * Builds on hardware support for a full duplex link. - * - * CDC Ethernet is the standard USB solution for sending Ethernet frames - * using USB. Real hardware tends to use the same framing protocol but look - * different for control features. This driver strongly prefers to use - * this USB-IF standard as its open-systems interoperability solution; - * most host side USB stacks (except from Microsoft) support it. - * - * There's some hardware that can't talk CDC. We make that hardware - * implement a "minimalist" vendor-agnostic CDC core: same framing, but - * link-level setup only requires activating the configuration. - * Linux supports it, but other host operating systems may not. - * (This is a subset of CDC Ethernet.) - * - * A third option is also in use. Rather than CDC Ethernet, or something - * simpler, Microsoft pushes their own approach: RNDIS. The published - * RNDIS specs are ambiguous and appear to be incomplete, and are also - * needlessly complex. - */ -#ifndef __USB_ETHERNET_H -#define __USB_ETHERNET_H - -#include "usb.h" -#include "usb_gadget.h" -#include "core/inc/usb_composite.h" - -//#define DRIVER_DESC "Ethernet Gadget" -#define DRIVER_DESC "USB Network Interface" -#define DRIVER_VERSION "May Day 2015" -#define ETH_ADDR "00E04C8196C8" - -static const char shortname [] = "ether"; -static const char driver_desc [] = DRIVER_DESC; - -#define CONFIG_USB_ETH_RNDIS 1 - - -#define RNDIS_VENDOR_NUM ULINKER_ETHER_VID -#define RNDIS_PRODUCT_NUM ULINKER_ETHER_PID - - -/* Thanks to NetChip Technologies for donating this product ID. - * It's for devices with only CDC Ethernet configurations. - */ -#define CDC_VENDOR_NUM 0x0525 /* NetChip */ -#define CDC_PRODUCT_NUM 0xa4a1 /* Linux-USB Ethernet Gadget */ - -/* USB DRIVER HOOKUP (to the hardware driver, below us), mostly - * ep0 implementation: descriptors, config management, setup(). - * also optional class-specific notification interrupt transfer. - */ - -/* - * DESCRIPTORS ... most are static, but strings and (full) configuration - * descriptors are built on demand. For now we do either full CDC, or - * our simple subset, with RNDIS as an optional second configuration. - * - * RNDIS includes some CDC ACM descriptors ... like CDC Ethernet. But - * the class descriptors match a modem (they're ignored; it's really just - * Ethernet functionality), they don't need the NOP altsetting, and the - * status transfer endpoint isn't optional. - */ - -#define STRING_MANUFACTURER 1 -#define STRING_PRODUCT 2 -#define STRING_ETHADDR 3 -#define STRING_DATA 4 -#define STRING_CONTROL 5 -#define STRING_RNDIS_CONTROL 6 -#define STRING_CDC 7 -#define STRING_SUBSET 8 -#define STRING_RNDIS 9 -#define STRING_SERIALNUMBER 10 - -/* holds our biggest descriptor (or RNDIS response) */ -#define USB_BUFSIZ 256 - -#define BUFSIZ_IN 512 -#define BUFSIZ_OUT 512 -/* - * This device advertises one configuration, eth_config, unless RNDIS - * is enabled (rndis_config) on hardware supporting at least two configs. - * - * NOTE: Controllers like superh_udc should probably be able to use - * an RNDIS-only configuration. - * - * FIXME define some higher-powered configurations to make it easier - * to recharge batteries ... - */ - -//#define DEV_CONFIG_VALUE 1 /* cdc or subset */ -//#define DEV_RNDIS_CONFIG_VALUE 2 /* rndis; optional */ -#define DEV_CONFIG_VALUE 2 /* cdc or subset */ -#define DEV_RNDIS_CONFIG_VALUE 1 /* rndis; optional */ - - -#define DEVSPEED USB_SPEED_HIGH - - -/* descriptors that are built on-demand */ - -static char manufacturer [50]; -static char product_desc [40] = DRIVER_DESC; -static char serial_number [20]; - - -/* address that the host will use ... usually assigned at random */ -//ModifiedByJD static char ethaddr [2 * ETH_ALEN + 1]; -static char ethaddr [2 * 6 + 1] = ETH_ADDR; - -/* static strings, in UTF-8 */ -static struct usb_string strings [] = { - { STRING_MANUFACTURER, manufacturer, }, - { STRING_PRODUCT, product_desc, }, - { STRING_SERIALNUMBER, serial_number, }, - { STRING_DATA, "Ethernet Data", }, -#if 1//def DEV_CONFIG_CDC//ModifiedByJD - { STRING_CDC, "CDC Ethernet", }, - { STRING_ETHADDR, ethaddr, }, - { STRING_CONTROL, "CDC Communications Control", }, -#endif -#if 1//def DEV_CONFIG_SUBSET//ModifiedByJD - { STRING_SUBSET, "CDC Ethernet Subset", }, -#endif -#if 1//def CONFIG_USB_ETH_RNDIS//ModifiedByJD - { STRING_RNDIS, "RNDIS", }, - { STRING_RNDIS_CONTROL, "RNDIS Communications Control", }, -#endif /* end of list */ -}; - -static struct usb_gadget_strings stringtab = { - .language = 0x0409, /* en-us */ - .strings = strings, -}; - -static struct usb_gadget_strings *dev_strings[] = { - &stringtab, - NULL, -}; - -static struct usb_device_descriptor -device_desc = { - .bLength = sizeof device_desc, - .bDescriptorType = USB_DT_DEVICE, - - .bcdUSB = (0x0200), - - .bDeviceClass = USB_CLASS_COMM, - .bDeviceSubClass = 0, - .bDeviceProtocol = 0, - - .idVendor = (CDC_VENDOR_NUM), - .idProduct = (CDC_PRODUCT_NUM), - .iManufacturer = STRING_MANUFACTURER, - .iProduct = STRING_PRODUCT, - .bNumConfigurations = 1, -}; - -static struct usb_config_descriptor -eth_config = { - .bLength = sizeof eth_config, - .bDescriptorType = USB_DT_CONFIG, - - /* compute wTotalLength on the fly */ - .bNumInterfaces = 1, - .bConfigurationValue = DEV_CONFIG_VALUE, - .iConfiguration = STRING_CDC, - .bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER, - .bMaxPower = 50, -}; - -static struct usb_otg_descriptor -otg_descriptor = { - .bLength = sizeof otg_descriptor, - .bDescriptorType = USB_DT_OTG, - - .bmAttributes = USB_OTG_SRP, -}; - - -#ifdef CONFIG_USB_ETH_RNDIS - -/* RNDIS doesn't activate by changing to the "real" altsetting */ - -static struct usb_interface_descriptor -rndis_data_intf = { - .bLength = sizeof rndis_data_intf, - .bDescriptorType = USB_DT_INTERFACE, - - .bInterfaceNumber = 0, - .bAlternateSetting = 0, - .bNumEndpoints = 2, - .bInterfaceClass = USB_CLASS_CDC_DATA, - .bInterfaceSubClass = 0, - .bInterfaceProtocol = 0, - .iInterface = STRING_DATA, -}; - -#endif - - -static struct usb_endpoint_descriptor -hs_source_desc = { - .bLength = USB_DT_ENDPOINT_SIZE, - .bDescriptorType = USB_DT_ENDPOINT, - - .bmAttributes = USB_ENDPOINT_XFER_BULK, - .wMaxPacketSize = (512),//ModifiedByJD -}; - -static struct usb_endpoint_descriptor -hs_sink_desc = { - .bLength = USB_DT_ENDPOINT_SIZE, - .bDescriptorType = USB_DT_ENDPOINT, - - .bmAttributes = USB_ENDPOINT_XFER_BULK, - .wMaxPacketSize = (512),//ModifiedByJD -}; - -static struct usb_endpoint_descriptor -fs_source_desc = { - .bLength = USB_DT_ENDPOINT_SIZE, - .bDescriptorType = USB_DT_ENDPOINT, - - .bEndpointAddress = USB_DIR_IN, - .bmAttributes = USB_ENDPOINT_XFER_BULK, -}; - -static struct usb_endpoint_descriptor -fs_sink_desc = { - .bLength = USB_DT_ENDPOINT_SIZE, - .bDescriptorType = USB_DT_ENDPOINT, - - .bEndpointAddress = USB_DIR_OUT, - .bmAttributes = USB_ENDPOINT_XFER_BULK, -}; - - -static const struct usb_descriptor_header *fs_rndis_function [] = { - (struct usb_descriptor_header *) &otg_descriptor, - /* control interface matches ACM, not Ethernet */ -#if 0//ModifiedByJD - (struct usb_descriptor_header *) &rndis_control_intf, - (struct usb_descriptor_header *) &header_desc, - (struct usb_descriptor_header *) &call_mgmt_descriptor, - (struct usb_descriptor_header *) &acm_descriptor, - (struct usb_descriptor_header *) &union_desc, - (struct usb_descriptor_header *) &fs_status_desc, -#endif - /* data interface has no altsetting */ - (struct usb_descriptor_header *) &rndis_data_intf, - (struct usb_descriptor_header *) &fs_source_desc, - (struct usb_descriptor_header *) &fs_sink_desc, - NULL, -}; - - - - -static const struct usb_descriptor_header *fs_eth_function [11] = { - (struct usb_descriptor_header *) &otg_descriptor, -#ifdef DEV_CONFIG_CDC - /* "cdc" mode descriptors */ - (struct usb_descriptor_header *) &control_intf, - (struct usb_descriptor_header *) &header_desc, - (struct usb_descriptor_header *) &union_desc, - (struct usb_descriptor_header *) ðer_desc, - /* NOTE: status endpoint may need to be removed */ - (struct usb_descriptor_header *) &fs_status_desc, - /* data interface, with altsetting */ - (struct usb_descriptor_header *) &data_nop_intf, - (struct usb_descriptor_header *) &data_intf, - (struct usb_descriptor_header *) &fs_source_desc, - (struct usb_descriptor_header *) &fs_sink_desc, - NULL, -#endif /* DEV_CONFIG_CDC */ -}; - -#ifdef CONFIG_USB_ETH_RNDIS -static const struct usb_descriptor_header *hs_rndis_function [] = { - (struct usb_descriptor_header *) &otg_descriptor, - /* control interface matches ACM, not Ethernet */ -#if 0//ModifiedByJD - (struct usb_descriptor_header *) &rndis_control_intf, - (struct usb_descriptor_header *) &header_desc, - (struct usb_descriptor_header *) &call_mgmt_descriptor, - (struct usb_descriptor_header *) &acm_descriptor, - (struct usb_descriptor_header *) &union_desc, - (struct usb_descriptor_header *) &hs_status_desc, -#endif - /* data interface has no altsetting */ - (struct usb_descriptor_header *) &rndis_data_intf, - (struct usb_descriptor_header *) &hs_source_desc, - (struct usb_descriptor_header *) &hs_sink_desc, - NULL, -}; -#endif - -static struct usb_config_descriptor -rndis_config = { - .bLength = sizeof rndis_config, - .bDescriptorType = USB_DT_CONFIG, - - /* compute wTotalLength on the fly */ - .bNumInterfaces = 1, - .bConfigurationValue = DEV_RNDIS_CONFIG_VALUE, - .iConfiguration = STRING_RNDIS, - .bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER, - .bMaxPower = 50, -}; - -static struct usb_configuration eth_configuration = { - .label = "eth_configuration", - .bConfigurationValue = DEV_CONFIG_VALUE, -// .bConfigurationValue = 1, - /* .iConfiguration = DYNAMIC */ - .bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER, -}; - - -static struct eth_dev{ - struct usb_gadget *gadget; - struct usb_request *req; /* for control responses */ - /* when configured, we have one of two configs: - * - source data (in to host) and sink it (out from host) - * - or loop it back (out from host back in to host) - */ - u8 config; - struct usb_ep *in_ep; - struct usb_ep *out_ep; - const struct usb_endpoint_descriptor - *in, *out, *status; - // lock is held when accessing usb - _Lock lock; - - struct usb_function func; - - - - /*send (depends on host)*/ - _Sema xmit_sema; - xTaskHandle xmit_task; - unsigned int qlen; - _Mutex xmit_mutex; - _LIST eth2wlan_list; - /*receive (debuf_poolpends on host)*/ - _Sema recv_sema; - xTaskHandle recv_task; - _Mutex recv_mutex; - _LIST wlan2eth_list; -}; - - -extern int usb_eth_init(void); - -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/msc/inc/usbd_msc.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/msc/inc/usbd_msc.h deleted file mode 100644 index b4237af..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/msc/inc/usbd_msc.h +++ /dev/null @@ -1,183 +0,0 @@ -#ifndef USBD_MSC_H -#define USBD_MSC_H - -#include "usb.h" -#include "usb_gadget.h" -#include "core/inc/usb_composite.h" -#include "msc/inc/usbd_msc_config.h" - -/* config usb msc device debug inforation */ -#define USBD_MSC_DEBUG 0 - -#if USBD_MSC_DEBUG -#define USBD_PRINTF(fmt, args...) DBG_8195A("\n\r%s: " fmt, __FUNCTION__, ## args) -#define USBD_ERROR(fmt, args...) DBG_8195A("\n\r%s: " fmt, __FUNCTION__, ## args) -#define USBD_WARN(fmt, args...) DBG_8195A("\n\r%s: " fmt, __FUNCTION__, ## args) -#define FUN_ENTER DBG_8195A("\n\r%s ==>\n", __func__) -#define FUN_EXIT DBG_8195A("\n\r%s <==\n", __func__) -#define FUN_TRACE DBG_8195A("\n\r%s:%d \n", __func__, __LINE__) -#else -#define USBD_PRINTF(fmt, args...) -#define USBD_ERROR(fmt, args...) DBG_8195A("\n\r%s: " fmt, __FUNCTION__, ## args) -#define USBD_WARN(fmt, args...) -#define FUN_ENTER -#define FUN_EXIT -#define FUN_TRACE -#endif - -/* MSC Request Codes */ -#define MSC_REQUEST_RESET 0xFF -#define MSC_REQUEST_GET_MAX_LUN 0xFE - -/* MSC LUN */ -#define MSC_MAX_LOGIC_UNIT_NUMBER 1 - -enum data_direction{ - DATA_DIR_UNKNOWN = 0, - DATA_DIR_FROM_HOST, - DATA_DIR_TO_HOST, - DATA_DIR_NONE -}; - -typedef enum _disk_type{ - DISK_SDCARD, - DISK_FLASH -}disk_type; - -//structure predefine -struct msc_dev; -struct msc_bufhd; - -struct msc_opts{ - int (*disk_init)(void); - int (*disk_deinit)(void); - int (*disk_getcapacity)(u32* sectors); - int (*disk_read)(u32 sector,u8 *buffer,u32 count); - int (*disk_write)(u32 sector,const u8 *buffer,u32 count); -}; - -struct msc_lun { - unsigned int initially_ro:1; - unsigned int ro:1; - unsigned int removable:1; - unsigned int cdrom:1; - unsigned int prevent_medium_removal:1; - unsigned int registered:1; - unsigned int info_valid:1; - unsigned int nofua:1; - - u32 sense_data; - u32 sense_data_info; - u32 unit_attention_data; - - u64 file_length; - unsigned int num_sectors; /* */ - unsigned int blkbits; /* Bits of logical block size - of bound block device */ - unsigned int blksize; /* logical block size of bound block device */ - const char *name; /* "lun.name" */ - - unsigned int lba; // the current read and write logical block address - u8 is_open; - _mutex lun_mutex; - struct msc_opts *lun_opts; -}; - - -struct msc_common{ - struct msc_dev *mscdev; - - struct msc_lun **luns; - struct msc_lun *curlun; - - struct usb_gadget *gadget; - struct usb_ep *ep0; - struct usb_request *req0; /* for control responses */ - - /* scsi cbw relevant */ - enum data_direction data_dir; - u32 data_size; - u32 data_size_from_cmnd; - u32 tag; - u32 residue; - u32 usb_amount_left; - u8 scsi_cmnd[16]; // max command - u8 cmnd_size; - - u8 lun; /* current lun*/ - u8 nluns; - - u8 nbufhd; - u8 nbufhd_a; - _list bufhd_pool; - _mutex bufhd_mutex; - /* bulk out cmd*/ - _list boc_list; - _mutex boc_mutex; - - /* bolk out data*/ - _mutex bod_mutex; - _list bod_list; - /**/ - struct msc_bufhd* curbh; // current buffer header - struct msc_bufhd* cbw_bh; // buffer header for CBW - struct msc_bufhd* csw_bh; // buffer header for CSW - - unsigned int can_stall:1; - unsigned int phase_error:1; - unsigned int short_packet_received:1; - unsigned int bad_lun_okay:1; - unsigned int running:1; -}; - -typedef enum _bufhd_type{ - BUFHD_CBW = 0, - BUFHD_CSW, - BUFHD_DATA, -}bufhd_type; - -struct msc_bufhd{ - u8* buf; - int buf_size; - bufhd_type type; - _list list; - struct usb_request *reqin; /* for bulkin responses */ - struct usb_request *reqout; -}; - -struct msc_dev{ - struct msc_common *common; - - u16 interface_number; - u8 config; - - struct usb_ep *in_ep; - struct usb_ep *out_ep; - unsigned int bulk_in_enabled:1; - unsigned int bulk_out_enabled:1; - - const struct usb_endpoint_descriptor - *in, *out, *status; - // lock is held when accessing usb - struct task_struct msc_outCmdTask; - struct task_struct msc_outDataTask; - struct usb_function func; -}; - -u32 min(u32 value1,u32 value2); - -int usbd_msc_halt_bulk_in_endpoint(struct msc_dev *mscdev); -void usbd_msc_put_bufhd(struct msc_common *common, struct msc_bufhd* bufhd); -struct msc_bufhd* usbd_msc_get_bufhd(struct msc_common *common); -int usbd_msc_bulk_in_transfer(struct msc_dev *mscdev, struct usb_request *req); -int usbd_msc_bulk_out_transfer(struct msc_dev *mscdev, struct usb_request *req); - -/* -* N_bh : number of buffer header -* Size_bh: buffer size per buffer -* type:msc physical disk type -*/ -int usbd_msc_init(int N_bh, int Size_bh, disk_type type); -void usbd_msc_deinit(void); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/msc/inc/usbd_msc_config.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/msc/inc/usbd_msc_config.h deleted file mode 100644 index c978748..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/msc/inc/usbd_msc_config.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _USBD_MSC_CONFIG_H -#define _USBD_MSC_CONFIG_H - -/* config usb MSC device buffer resource */ -#define MSC_NBR_BUFHD 2 /* number of buffer header for bulk in/out data*/ -#define MSC_BUFLEN (20*512)/* Default size of buffer length. Minmun of 512 byte*/ - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/msc/inc/usbd_msc_desc.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/msc/inc/usbd_msc_desc.h deleted file mode 100644 index 35e4f5c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/msc/inc/usbd_msc_desc.h +++ /dev/null @@ -1,196 +0,0 @@ -#include "usb_ch9.h" -#include "usb_defs.h" -#include "usb_gadget.h" - -// Enable high-speed functionality (if device supports it) -#define USBD_HS_ENABLE 1 - - -// define string index -#define STRING_MANUFACTURER 1 -#define STRING_PRODUCT 2 -#define STRING_SERIALNUMBER 3 -#define STRING_INTERFACE 4 -#define STRING_MSC 5 - - -#define DEV_CONFIG_VALUE 1 - -#define DRIVER_DESC "USB Mass Storage" -#define DRIVER_VERSION "Feb 2016" - -#define MANUFACTURER "Realtek Singapore Semiconductor" - -static char string_manufacturer [50] = MANUFACTURER; -static char string_product [40] = DRIVER_DESC; -static char string_serial [20] = "0123456789"; - -struct usb_string -usbd_msc_strings [] = { - { STRING_MANUFACTURER, string_manufacturer, }, - { STRING_PRODUCT, string_product, }, - { STRING_SERIALNUMBER, string_serial, }, - { STRING_INTERFACE, "USB MSC Interface", }, - { STRING_MSC, "USB MSC", }, -}; - -struct usb_gadget_strings msc_stringtab = { - .language = 0x0409, /* en-us */ - .strings = usbd_msc_strings, -}; - -struct usb_gadget_strings *dev_msc_strings[] = { - &msc_stringtab, - NULL, -}; - -static struct usb_device_descriptor -usbd_msc_device_desc = { - .bLength = sizeof usbd_msc_device_desc, - .bDescriptorType = USB_DT_DEVICE, - - .bcdUSB = (0x0200), - - .bDeviceClass = 0x00,// define in interface descriptor - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - - .bMaxPacketSize0 = 64, // this will be set automatically depends on ep0 setting - .idVendor = 0x0BDA, - .idProduct = 0x8195, -// .bcdDevice = , - .iManufacturer = STRING_MANUFACTURER, - .iProduct = STRING_PRODUCT, - .iSerialNumber = STRING_SERIALNUMBER, - .bNumConfigurations=0x01, -}; -#if 0 -struct usb_config_descriptor -usbd_msc_config_desc = { - .bLength = sizeof usbd_msc_config_desc, - .bDescriptorType = USB_DT_CONFIG, - - /* compute wTotalLength on the fly */ - .bNumInterfaces = 1, - .bConfigurationValue = DEV_CONFIG_VALUE, - .iConfiguration = STRING_MSC, - .bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER, - .bMaxPower = 0x32, -}; -#endif - -#if USBD_HS_ENABLE -/* USB Device Qualifier Descriptor (for Full Speed) */ -static struct usb_qualifier_descriptor -usbd_msc_qualifier_desc_FS = { - .bLength = sizeof usbd_msc_qualifier_desc_FS, - .bDescriptorType = USB_DT_DEVICE_QUALIFIER, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = 64, - .bNumConfigurations = 0x01, - .bRESERVED = 0x00, -}; - -/* USB Device Qualifier Descriptor for High Speed */ -static struct usb_qualifier_descriptor -usbd_msc_qualifier_desc_HS = { - .bLength = sizeof usbd_msc_qualifier_desc_HS, - .bDescriptorType = USB_DT_DEVICE_QUALIFIER, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - .bMaxPacketSize0 = 64, - .bNumConfigurations = 0x01, - .bRESERVED = 0x00, -}; -#else -/* USB Device Qualifier Descriptor (for Full Speed) */ -static struct usb_qualifier_descriptor -usbd_msc_qualifier_desc_FS = { 0 }; - -/* USB Device Qualifier Descriptor for High Speed */ -static struct usb_qualifier_descriptor -usbd_msc_qualifier_desc_HS = { 0 }; -#endif - -/* MSC Interface, Alternate Setting 0*/ -struct usb_interface_descriptor -usbd_msc_intf_desc = { - .bLength = sizeof usbd_msc_intf_desc, - .bDescriptorType = USB_DT_INTERFACE, - - .bInterfaceNumber = 0x00, // this will be assign automatically - .bAlternateSetting =0x00, - .bNumEndpoints = 0x02, - .bInterfaceClass = USB_CLASS_MASS_STORAGE, - .bInterfaceSubClass = US_SC_SCSI, - .bInterfaceProtocol = US_PR_BULK, - .iInterface = STRING_INTERFACE, -}; - -/* MSC Endpoints for Low-speed/Full-speed */ -/* Endpoint, EP Bulk IN */ -struct usb_endpoint_descriptor -usbd_msc_source_desc_FS = { - .bLength = USB_DT_ENDPOINT_SIZE, - .bDescriptorType = USB_DT_ENDPOINT, - - .bEndpointAddress = USB_DIR_IN, - .bmAttributes = USB_ENDPOINT_XFER_BULK, - .wMaxPacketSize = (64), - .bInterval = 0x00, - -}; -/* Endpoint, EP Bulk OUT */ -struct usb_endpoint_descriptor -usbd_msc_sink_desc_FS = { - .bLength = USB_DT_ENDPOINT_SIZE, - .bDescriptorType = USB_DT_ENDPOINT, - - .bEndpointAddress = USB_DIR_OUT, - .bmAttributes = USB_ENDPOINT_XFER_BULK, - .wMaxPacketSize = (64), - .bInterval = 0x00, -}; - -/* MSC Endpoints for High-speed */ -/* Endpoint, EP Bulk IN */ -struct usb_endpoint_descriptor -usbd_msc_source_desc_HS = { - .bLength = USB_DT_ENDPOINT_SIZE, - .bDescriptorType = USB_DT_ENDPOINT, - .bEndpointAddress = USB_DIR_IN, - .bmAttributes = USB_ENDPOINT_XFER_BULK, - .wMaxPacketSize = (512), - .bInterval = 0x00, -}; - -/* Endpoint, EP Bulk OUT */ -struct usb_endpoint_descriptor -usbd_msc_sink_desc_HS = { - .bLength = USB_DT_ENDPOINT_SIZE, - .bDescriptorType = USB_DT_ENDPOINT, - .bEndpointAddress = USB_DIR_OUT, - .bmAttributes = USB_ENDPOINT_XFER_BULK, - .wMaxPacketSize = (512), - .bInterval = 0x00, -}; - -struct usb_descriptor_header *usbd_msc_descriptors_FS [] = { - /* data interface has no altsetting */ - (struct usb_descriptor_header *) &usbd_msc_intf_desc, - (struct usb_descriptor_header *) &usbd_msc_source_desc_FS, - (struct usb_descriptor_header *) &usbd_msc_sink_desc_FS, - NULL, -}; -struct usb_descriptor_header *usbd_msc_descriptors_HS [] = { - /* data interface has no altsetting */ - (struct usb_descriptor_header *) &usbd_msc_intf_desc, - (struct usb_descriptor_header *) &usbd_msc_source_desc_HS, - (struct usb_descriptor_header *) &usbd_msc_sink_desc_HS, - NULL, -}; \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/msc/inc/usbd_scsi.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/msc/inc/usbd_scsi.h deleted file mode 100644 index 5a12fb5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/class/msc/inc/usbd_scsi.h +++ /dev/null @@ -1,110 +0,0 @@ -#ifndef USBD_SCSI_H -#define USBD_SCSI_H -#include "basic_types.h" -#include "msc/inc/usbd_msc.h" - -#define MAX_COMMAND_SIZE 16 -#define MSC_MAX_LUNS 8 - -/* SCSI Commands */ -#define SCSI_FORMAT_UNIT 0x04 -#define SCSI_INQUIRY 0x12 -#define SCSI_MODE_SELECT6 0x15 -#define SCSI_MODE_SELECT10 0x55 -#define SCSI_MODE_SENSE6 0x1A -#define SCSI_MODE_SENSE10 0x5A -#define SCSI_ALLOW_MEDIUM_REMOVAL 0x1E -#define SCSI_READ6 0x08 -#define SCSI_READ10 0x28 -#define SCSI_READ12 0xA8 -#define SCSI_READ16 0x88 - -#define SCSI_READ_CAPACITY10 0x25 -#define SCSI_READ_CAPACITY16 0x9E - -#define SCSI_SYNCHRONIZE_CACHE 0x35 -#define SCSI_REQUEST_SENSE 0x03 -#define SCSI_START_STOP_UNIT 0x1B -#define SCSI_TEST_UNIT_READY 0x00 -#define SCSI_WRITE6 0x0A -#define SCSI_WRITE10 0x2A -#define SCSI_WRITE12 0xAA -#define SCSI_WRITE16 0x8A - -#define SCSI_VERIFY10 0x2F -#define SCSI_VERIFY12 0xAF -#define SCSI_VERIFY16 0x8F - -#define SCSI_SEND_DIAGNOSTIC 0x1D -#define SCSI_READ_FORMAT_CAPACITIES 0x23 - -#define READ_FORMAT_CAPACITY_DATA_LEN 0x0C -#define READ_CAPACITY10_DATA_LEN 0x08 -#define MODE_SENSE10_DATA_LEN 0x08 -#define MODE_SENSE6_DATA_LEN 0x04 -#define REQUEST_SENSE_DATA_LEN 0x12 -#define STANDARD_INQUIRY_DATA_LEN 0x24 - -/* SCSI Sense Key/Additional Sense Code/ASC Qualifier values */ -#define SS_NO_SENSE 0 -#define SS_COMMUNICATION_FAILURE 0x040800 -#define SS_INVALID_COMMAND 0x052000 -#define SS_INVALID_FIELD_IN_CDB 0x052400 -#define SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE 0x052100 -#define SS_LOGICAL_UNIT_NOT_SUPPORTED 0x052500 -#define SS_MEDIUM_NOT_PRESENT 0x023a00 -#define SS_MEDIUM_REMOVAL_PREVENTED 0x055302 -#define SS_NOT_READY_TO_READY_TRANSITION 0x062800 -#define SS_RESET_OCCURRED 0x062900 -#define SS_SAVING_PARAMETERS_NOT_SUPPORTED 0x053900 -#define SS_UNRECOVERED_READ_ERROR 0x031100 -#define SS_WRITE_ERROR 0x030c02 -#define SS_WRITE_PROTECTED 0x072700 - - - -#define SK(x) ((u8) ((x) >> 16)) /* Sense Key byte, etc. */ -#define ASC(x) ((u8) ((x) >> 8)) -#define ASCQ(x) ((u8) (x)) - -/* -* Bulk only data structures -*/ - -/* command block wrapper */ -struct bulk_cb_wrap { - unsigned int Signature; /* contains 'USBC', denote bulk_cb_wrap */ - unsigned int Tag; /* unique per command id */ - unsigned int DataTransferLength; /* size of data for transfer */ - unsigned char Flags; /* data transfer direction */ - unsigned char Lun; /* LUN normally 0, (which command block is sent) */ - unsigned char Length; /* length of the CDB */ - unsigned char CDB[16]; /* max command */ -}; - -#define US_BULK_CB_WRAP_LEN 31 -#define US_BULK_CB_SIGN 0x43425355 /*spells out USBC */ -#define US_BULK_FLAG_IN (1 << 7) -#define US_BULK_FLAG_OUT 0 - -/* command status wrapper */ -struct bulk_cs_wrap { - unsigned int Signature; /* should = 'USBS' */ - unsigned int Tag; /* same as original command, echoed by the device as received */ - unsigned int Residue; /* amount not transferred */ - unsigned char Status; /* execute command status */ -}; - -#define US_BULK_CS_WRAP_LEN 13 -#define US_BULK_CS_SIGN 0x53425355 /* spells out 'USBS' */ -// execute command status -#define US_BULK_STAT_OK 0 -#define US_BULK_STAT_FAIL 1 -#define US_BULK_STAT_PHASE 2 - -/* bulk-only class specific requests */ -#define US_BULK_RESET_REQUEST 0xff -#define US_BULK_GET_MAX_LUN 0xfe - -extern int usbd_msc_receive_cbw(struct msc_dev *mscdev, struct usb_request *req); -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/gadget_debug.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/gadget_debug.h deleted file mode 100644 index 7d65e14..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/gadget_debug.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _GADEGT_DEBUG_H_ -#define _GADGET_DEBUG_H_ - -#include "diag.h" - -#define GADGET_DEBUG 0 - -#if GADGET_DEBUG -#define GADGET_PRINT(fmt, args...) DBG_8195A("\n\r[%s]: " fmt, __FUNCTION__, ## args) -#define GADGET_ERROR(fmt, args...) DBG_8195A("\n\r[%s]: " fmt, __FUNCTION__, ## args) -#define GADGET_WARN(fmt, args...) DBG_8195A("\n\r[%s]: " fmt, __FUNCTION__, ## args) -#define FUN_ENTER DBG_8195A("\n\r[%s ==>]\n", __func__) -#define FUN_EXIT DBG_8195A("\n\r[%s <==]\n", __func__) -#define FUN_TRACE DBG_8195A("\n\r[%s]:%d \n", __func__, __LINE__) -#else -#define GADGET_PRINT(fmt, args...) -#define GADGET_ERROR(fmt, args...) DBG_8195A("\n\r[%s]: " fmt, __FUNCTION__, ## args) -#define GADGET_WARN(fmt, args...) -#define FUN_ENTER -#define FUN_EXIT -#define FUN_TRACE -#endif - -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/os_wrapper.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/os_wrapper.h deleted file mode 100644 index 7cf4e2e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/os_wrapper.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef _OS_WRAPPER_H_ -#define _OS_WRAPPER_H_ - -#include "osdep_api.h" - -#ifndef spinlock_t -#define spinlock_t _Lock -#endif - -#ifndef _atomic_spin_lock_irqsave -#define _atomic_spin_lock_irqsave(p, flags) SaveAndCli() -#endif -#ifndef _atomic_spin_unlock_irqrestore -#define _atomic_spin_unlock_irqrestore(p, flags) RestoreFlags() -#endif - -/* spin lock */ -#ifndef spin_lock_init - #define spin_lock_init(plock) RtlSpinlockInit((plock)) -#endif -#ifndef spin_lock_free - #define spin_lock_free(plock) RtlSpinlockFree((plock)) -#endif -#ifndef spin_lock - #define spin_lock(plock) RtlSpinlock((plock)) -#endif -#ifndef spin_unlock - #define spin_unlock(plock) RtlSpinunlock((plock)) -#endif -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/usb_composite.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/usb_composite.h deleted file mode 100644 index 7b37100..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/usb_composite.h +++ /dev/null @@ -1,398 +0,0 @@ -#ifndef _USB_COMPOSITE_H_ -#define _USB_COMPOSITE_H_ - -#include "usb_gadget.h" -#include "usb.h" - -/* - * USB function drivers should return USB_GADGET_DELAYED_STATUS if they - * wish to delay the data/status stages of the control transfer till they - * are ready. The control transfer will then be kept from completing till - * all the function drivers that requested for USB_GADGET_DELAYED_STAUS - * invoke usb_composite_setup_continue(). - */ -#define USB_GADGET_DELAYED_STATUS 0x7fff /* Impossibly large value */ - - -/* big enough to hold our biggest descriptor */ -#define USB_COMP_EP0_BUFSIZ 1024+24 -#define MAX_CONFIG_INTERFACES 16 /* arbitrary; max 255 */ -// predefine structure -struct usb_composite_dev; -struct usb_composite_driver; - -enum control_request_return_codes { - USBD_REQ_NOTSUPP = 0, - USBD_REQ_HANDLED = 1, - USBD_REQ_NEXT_CALLBACK = 2, -}; - - -/** - * struct usb_composite_driver - groups configurations into a gadget - * @name: For diagnostics, identifies the driver. - * @dev: Template descriptor for the device, including default device - * identifiers. - * @strings: tables of strings, keyed by identifiers assigned during @bind - * and language IDs provided in control requests. Note: The first entries - * are predefined. The first entry that may be used is - * USB_GADGET_FIRST_AVAIL_IDX - * @max_speed: Highest speed the driver supports. - * @needs_serial: set to 1 if the gadget needs userspace to provide - * a serial number. If one is not provided, warning will be printed. - * @bind: (REQUIRED) Used to allocate resources that are shared across the - * whole device, such as string IDs, and add its configurations using - * @usb_add_config(). This may fail by returning a negative errno - * value; it should return zero on successful initialization. - * @unbind: Reverses @bind; called as a side effect of unregistering - * this driver. - * @disconnect: optional driver disconnect method - * @suspend: Notifies when the host stops sending USB traffic, - * after function notifications - * @resume: Notifies configuration when the host restarts USB traffic, - * before function notifications - * @gadget_driver: Gadget driver controlling this driver - * - * Devices default to reporting self powered operation. Devices which rely - * on bus powered operation should report this in their @bind method. - * - * Before returning from @bind, various fields in the template descriptor - * may be overridden. These include the idVendor/idProduct/bcdDevice values - * normally to bind the appropriate host side driver, and the three strings - * (iManufacturer, iProduct, iSerialNumber) normally used to provide user - * meaningful device identifiers. (The strings will not be defined unless - * they are defined in @dev and @strings.) The correct ep0 maxpacket size - * is also reported, as defined by the underlying controller driver. - */ - -struct usb_composite_driver { - const char *name; - const struct usb_device_descriptor *dev; - struct usb_gadget_strings **strings; - enum usb_device_speed max_speed; - unsigned needs_serial:1; - - int (*bind)(struct usb_composite_dev *cdev); - int (*unbind)(struct usb_composite_dev *); - - void (*disconnect)(struct usb_composite_dev *); - - /* global suspend hooks */ - void (*suspend)(struct usb_composite_dev *); - void (*resume)(struct usb_composite_dev *); - struct usb_gadget_driver gadget_driver; -}; -/** - * struct usb_composite_device - represents one composite usb gadget - * @gadget: read-only, abstracts the gadget's usb peripheral controller - * @req: used for control responses; buffer is pre-allocated - * @os_desc_req: used for OS descriptors responses; buffer is pre-allocated - * @config: the currently active configuration - * @qw_sign: qwSignature part of the OS string - * @b_vendor_code: bMS_VendorCode part of the OS string - * @use_os_string: false by default, interested gadgets set it - * @os_desc_config: the configuration to be used with OS descriptors - * - * One of these devices is allocated and initialized before the - * associated device driver's bind() is called. - * - * OPEN ISSUE: it appears that some WUSB devices will need to be - * built by combining a normal (wired) gadget with a wireless one. - * This revision of the gadget framework should probably try to make - * sure doing that won't hurt too much. - * - * One notion for how to handle Wireless USB devices involves: - * (a) a second gadget here, discovery mechanism TBD, but likely - * needing separate "register/unregister WUSB gadget" calls; - * (b) updates to usb_gadget to include flags "is it wireless", - * "is it wired", plus (presumably in a wrapper structure) - * bandgroup and PHY info; - * (c) presumably a wireless_ep wrapping a usb_ep, and reporting - * wireless-specific parameters like maxburst and maxsequence; - * (d) configurations that are specific to wireless links; - * (e) function drivers that understand wireless configs and will - * support wireless for (additional) function instances; - * (f) a function to support association setup (like CBAF), not - * necessarily requiring a wireless adapter; - * (g) composite device setup that can create one or more wireless - * configs, including appropriate association setup support; - * (h) more, TBD. - */ - -#define MAX_USER_CONTROL_CALLBACK 2 - -typedef int (*user_control_callback)(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl); - -struct usb_composite_dev { - struct usb_gadget *gadget; - struct usb_request *req; - struct usb_request *os_desc_req; - - struct usb_configuration *config; -// -// /* OS String is a custom (yet popular) extension to the USB standard. */ -// u8 qw_sign[OS_STRING_QW_SIGN_LEN]; -// u8 b_vendor_code; -// struct usb_configuration *os_desc_config; -// unsigned int use_os_string:1; -// -// /* private: */ -// /* internals */ - unsigned int suspended:1; - struct usb_device_descriptor desc; - - //_LIST config_list; - dwc_list_link_t config_list; // by jimmy - //_LIST gstring_list; - dwc_list_link_t gstring_list;// by jimmy - - struct usb_composite_driver *driver; -// u8 next_string_id; -// char *def_manufacturer; -// -// /* the gadget driver won't enable the data pullup -// * while the deactivation count is nonzero. -// */ -// unsigned deactivations; -// -// /* the composite driver won't complete the control transfer's -// * data/status stages till delayed_status is zero. -// */ -// int delayed_status; -// -// /* protects deactivations and delayed_status counts*/ - _Lock lock; - /* for unstandard control request handler */ - - user_control_callback control_cb[MAX_USER_CONTROL_CALLBACK]; -}; - - -#if 0 -#define container_of(p,t,n) (t*)((p)-&(((t*)0)->n)) - -static inline struct usb_composite_driver *to_cdriver( - struct usb_gadget_driver *gdrv) -{ - return container_of(gdrv, struct usb_composite_driver, gadget_driver); -} -#endif -#if 1 -/** - * struct usb_configuration - represents one gadget configuration - * @label: For diagnostics, describes the configuration. - * @strings: Tables of strings, keyed by identifiers assigned during @bind() - * and by language IDs provided in control requests. - * @descriptors: Table of descriptors preceding all function descriptors. - * Examples include OTG and vendor-specific descriptors. - * @unbind: Reverses @bind; called as a side effect of unregistering the - * driver which added this configuration. - * @setup: Used to delegate control requests that aren't handled by standard - * device infrastructure or directed at a specific interface. - * @bConfigurationValue: Copied into configuration descriptor. - * @iConfiguration: Copied into configuration descriptor. - * @bmAttributes: Copied into configuration descriptor. - * @MaxPower: Power consumtion in mA. Used to compute bMaxPower in the - * configuration descriptor after considering the bus speed. - * @cdev: assigned by @usb_add_config() before calling @bind(); this is - * the device associated with this configuration. - * - * Configurations are building blocks for gadget drivers structured around - * function drivers. Simple USB gadgets require only one function and one - * configuration, and handle dual-speed hardware by always providing the same - * functionality. Slightly more complex gadgets may have more than one - * single-function configuration at a given speed; or have configurations - * that only work at one speed. - * - * Composite devices are, by definition, ones with configurations which - * include more than one function. - * - * The lifecycle of a usb_configuration includes allocation, initialization - * of the fields described above, and calling @usb_add_config() to set up - * internal data and bind it to a specific device. The configuration's - * @bind() method is then used to initialize all the functions and then - * call @usb_add_function() for them. - * - * Those functions would normally be independent of each other, but that's - * not mandatory. CDC WMC devices are an example where functions often - * depend on other functions, with some functions subsidiary to others. - * Such interdependency may be managed in any way, so long as all of the - * descriptors complete by the time the composite driver returns from - * its bind() routine. - */ -struct usb_configuration { - const char *label; - struct usb_gadget_strings **strings; - const struct usb_descriptor_header **descriptors; - - /* REVISIT: bind() functions can be marked __init, which - * makes trouble for section mismatch analysis. See if - * we can't restructure things to avoid mismatching... - */ - - /* configuration management: unbind/setup */ - void (*unbind)(struct usb_configuration *); - int (*setup)(struct usb_configuration *, - const struct usb_ctrlrequest *); - - /* fields in the config descriptor */ - u8 bConfigurationValue; - u8 iConfiguration; - u8 bmAttributes; - u16 MaxPower; - - struct usb_composite_dev *cdev; - - /* private: */ - /* internals */ - //_LIST list; - //_LIST function_lists; - dwc_list_link_t list; - dwc_list_link_t function_lists; // by jimmy - - u8 next_interface_id; - unsigned superspeed:1; - unsigned highspeed:1; - unsigned fullspeed:1; - struct usb_function *interface[MAX_CONFIG_INTERFACES]; -}; - -_LONG_CALL_ int usb_interface_id(struct usb_configuration *config, - struct usb_function *function); - -_LONG_CALL_ int usb_add_config(struct usb_composite_dev *, - struct usb_configuration *, - int (*)(struct usb_configuration *)); - -_LONG_CALL_ void usb_remove_config(struct usb_composite_dev *, - struct usb_configuration *); - -/** - * struct usb_function - describes one function of a configuration - * @name: For diagnostics, identifies the function. - * @strings: tables of strings, keyed by identifiers assigned during bind() - * and by language IDs provided in control requests - * @fs_descriptors: Table of full (or low) speed descriptors, using interface and - * string identifiers assigned during @bind(). If this pointer is null, - * the function will not be available at full speed (or at low speed). - * @hs_descriptors: Table of high speed descriptors, using interface and - * string identifiers assigned during @bind(). If this pointer is null, - * the function will not be available at high speed. - * @ss_descriptors: Table of super speed descriptors, using interface and - * string identifiers assigned during @bind(). If this - * pointer is null after initiation, the function will not - * be available at super speed. - * @config: assigned when @usb_add_function() is called; this is the - * configuration with which this function is associated. - * @os_desc_table: Table of (interface id, os descriptors) pairs. The function - * can expose more than one interface. If an interface is a member of - * an IAD, only the first interface of IAD has its entry in the table. - * @os_desc_n: Number of entries in os_desc_table - * @bind: Before the gadget can register, all of its functions bind() to the - * available resources including string and interface identifiers used - * in interface or class descriptors; endpoints; I/O buffers; and so on. - * @unbind: Reverses @bind; called as a side effect of unregistering the - * driver which added this function. - * @free_func: free the struct usb_function. - * @mod: (internal) points to the module that created this structure. - * @set_alt: (REQUIRED) Reconfigures altsettings; function drivers may - * initialize usb_ep.driver data at this time (when it is used). - * Note that setting an interface to its current altsetting resets - * interface state, and that all interfaces have a disabled state. - * @get_alt: Returns the active altsetting. If this is not provided, - * then only altsetting zero is supported. - * @disable: (REQUIRED) Indicates the function should be disabled. Reasons - * include host resetting or reconfiguring the gadget, and disconnection. - * @setup: Used for interface-specific control requests. - * @suspend: Notifies functions when the host stops sending USB traffic. - * @resume: Notifies functions when the host restarts USB traffic. - * @get_status: Returns function status as a reply to - * GetStatus() request when the recipient is Interface. - * @func_suspend: callback to be called when - * SetFeature(FUNCTION_SUSPEND) is reseived - * - * A single USB function uses one or more interfaces, and should in most - * cases support operation at both full and high speeds. Each function is - * associated by @usb_add_function() with a one configuration; that function - * causes @bind() to be called so resources can be allocated as part of - * setting up a gadget driver. Those resources include endpoints, which - * should be allocated using @usb_ep_autoconfig(). - * - * To support dual speed operation, a function driver provides descriptors - * for both high and full speed operation. Except in rare cases that don't - * involve bulk endpoints, each speed needs different endpoint descriptors. - * - * Function drivers choose their own strategies for managing instance data. - * The simplest strategy just declares it "static', which means the function - * can only be activated once. If the function needs to be exposed in more - * than one configuration at a given speed, it needs to support multiple - * usb_function structures (one for each configuration). - * - * A more complex strategy might encapsulate a @usb_function structure inside - * a driver-specific instance structure to allows multiple activations. An - * example of multiple activations might be a CDC ACM function that supports - * two or more distinct instances within the same configuration, providing - * several independent logical data links to a USB host. - */ - -struct usb_function { - const char *name; - struct usb_gadget_strings **strings; - struct usb_descriptor_header **fs_descriptors; - struct usb_descriptor_header **hs_descriptors; -// struct usb_descriptor_header **ss_descriptors; - - struct usb_configuration *config; - -// struct usb_os_desc_table *os_desc_table; -// unsigned os_desc_n; - - /* REVISIT: bind() functions can be marked __init, which - * makes trouble for section mismatch analysis. See if - * we can't restructure things to avoid mismatching. - * Related: unbind() may kfree() but bind() won't... - */ - - /* configuration management: bind/unbind */ - int (*bind)(struct usb_configuration *, - struct usb_function *); - void (*unbind)(struct usb_configuration *, - struct usb_function *); - void (*free_func)(struct usb_function *f); - struct module *mod; - - /* runtime state management */ - int (*set_alt)(struct usb_function *, - unsigned interface, unsigned alt); - int (*get_alt)(struct usb_function *, - unsigned interface); - void (*disable)(struct usb_function *); - int (*setup)(struct usb_function *, - const struct usb_ctrlrequest *); - void (*suspend)(struct usb_function *); - void (*resume)(struct usb_function *); - - /* USB 3.0 additions */ - int (*get_status)(struct usb_function *); - int (*func_suspend)(struct usb_function *, - u8 suspend_opt); - /* private: */ - /* internals */ - //_LIST list; - dwc_list_link_t list; // by jimmy -// DECLARE_BITMAP(endpoints, 32); -// const struct usb_function_instance *fi; -}; - -#endif -extern _LONG_CALL_ int usb_add_function(struct usb_configuration *, struct usb_function *); -extern _LONG_CALL_ void usb_remove_function(struct usb_configuration *, struct usb_function *); -extern _LONG_CALL_ void usb_put_function(struct usb_function *); -extern _LONG_CALL_ int usb_function_deactivate(struct usb_function *); -extern _LONG_CALL_ int usb_function_activate(struct usb_function *); - -extern _LONG_CALL_ int usb_interface_id(struct usb_configuration *, struct usb_function *); -extern _LONG_CALL_ int usb_composite_probe(struct usb_composite_driver *driver); -extern _LONG_CALL_ int register_class_vendor_control_request_cb(struct usb_composite_dev *cdev, user_control_callback cb); -extern _LONG_CALL_ void usb_composite_unregister(struct usb_composite_driver *driver); -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/usb_config.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/usb_config.h deleted file mode 100644 index 112fa53..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/usb_config.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _USB_CONFIG_H_ -#define _USB_CONFIG_H_ - -#include "core/inc/usb_composite.h" - -extern _LONG_CALL_ int usb_assign_descriptors(struct usb_function *f, - struct usb_descriptor_header **fs, - struct usb_descriptor_header **hs, - struct usb_descriptor_header **ss); - -extern _LONG_CALL_ void usb_free_all_descriptors(struct usb_function *f); -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/usb_transport.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/usb_transport.h deleted file mode 100644 index 5dd7ed3..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/device/core/inc/usb_transport.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef _USB_BOT_H -#define _USB_BOT_H -#include "basic_types.h" - -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/quirks/quirks.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/quirks/quirks.h deleted file mode 100644 index 56782a3..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/quirks/quirks.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This file holds the definitions of quirks found in USB devices. - * Only quirks that affect the whole device, not an interface, - * belong here. - */ - -#ifndef __QUIRKS_H -#define __QUIRKS_H - -/* string descriptors must not be fetched using a 255-byte read */ -#define USB_QUIRK_STRING_FETCH_255 0x00000001 - -/* device can't resume correctly so reset it instead */ -#define USB_QUIRK_RESET_RESUME 0x00000002 - -/* device can't handle Set-Interface requests */ -#define USB_QUIRK_NO_SET_INTF 0x00000004 - -/* device can't handle its Configuration or Interface strings */ -#define USB_QUIRK_CONFIG_INTF_STRINGS 0x00000008 - -/* device can't be reset(e.g morph devices), don't use reset */ -#define USB_QUIRK_RESET 0x00000010 - -/* device has more interface descriptions than the bNumInterfaces count, - and can't handle talking to these interfaces */ -#define USB_QUIRK_HONOR_BNUMINTERFACES 0x00000020 - -/* device needs a pause during initialization, after we read the device - descriptor */ -#define USB_QUIRK_DELAY_INIT 0x00000040 - -#endif /* __QUIRKS_H */ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scatterlist/scatterlist.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scatterlist/scatterlist.h deleted file mode 100644 index fc50557..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scatterlist/scatterlist.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef _SCATTERLIST_H -#define _SCATTERLIST_H - -struct scatterlist { - unsigned long sg_magic; - unsigned long page_link; - unsigned int offset; - - unsigned int length; - - dma_addr_t dma_address; - __u32 dma_length; -}; - -struct sg_table { - struct scatterlist *sgl; /* the list */ - unsigned int nents; /* number of mapped entries */ - unsigned int orig_nents; /* original size of list */ -}; -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scsi/dma_direction.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scsi/dma_direction.h deleted file mode 100644 index de244ab..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scsi/dma_direction.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _DMA_DIRECTION_H -#define _DMA_DIRECTION_H - -enum dma_data_direction { - DMA_BIDIRECTIONAL = 0, - DMA_TO_DEVICE = 1, - DMA_FROM_DEVICE = 2, - DMA_NONE = 3, -}; - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scsi/scsi.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scsi/scsi.h deleted file mode 100644 index c856a26..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scsi/scsi.h +++ /dev/null @@ -1,585 +0,0 @@ -/* - * This header file contains public constants and structures used by - * the scsi code for linux. - * - * For documentation on the OPCODES, MESSAGES, and SENSE values, - * please consult the SCSI standard. - */ -#ifndef _SCSI_SCSI_H -#define _SCSI_SCSI_H - -#include "us_os_wrap_via_osdep_api.h" - -#define HZ 1024 - -struct scsi_cmnd; - -enum scsi_timeouts { - SCSI_DEFAULT_EH_TIMEOUT = 10 * HZ, -}; - -/* - * The maximum number of SG segments that we will put inside a - * scatterlist (unless chaining is used). Should ideally fit inside a - * single page, to avoid a higher order allocation. We could define this - * to SG_MAX_SINGLE_ALLOC to pack correctly at the highest order. The - * minimum value is 32 - */ -#define SCSI_MAX_SG_SEGMENTS 128 - -/* - * Like SCSI_MAX_SG_SEGMENTS, but for archs that have sg chaining. This limit - * is totally arbitrary, a setting of 2048 will get you at least 8mb ios. - */ -#ifdef ARCH_HAS_SG_CHAIN -#define SCSI_MAX_SG_CHAIN_SEGMENTS 2048 -#else -#define SCSI_MAX_SG_CHAIN_SEGMENTS SCSI_MAX_SG_SEGMENTS -#endif - -/* - * DIX-capable adapters effectively support infinite chaining for the - * protection information scatterlist - */ -#define SCSI_MAX_PROT_SG_SEGMENTS 0xFFFF - -/* - * Special value for scanning to specify scanning or rescanning of all - * possible channels, (target) ids, or luns on a given shost. - */ -#define SCAN_WILD_CARD ~0 - -/* - * SCSI opcodes - */ - -#define TEST_UNIT_READY 0x00 -#define REZERO_UNIT 0x01 -#define REQUEST_SENSE 0x03 -#define FORMAT_UNIT 0x04 -#define READ_BLOCK_LIMITS 0x05 -#define REASSIGN_BLOCKS 0x07 -#define INITIALIZE_ELEMENT_STATUS 0x07 -#define READ_6 0x08 -#define WRITE_6 0x0a -#define SEEK_6 0x0b -#define READ_REVERSE 0x0f -#define WRITE_FILEMARKS 0x10 -#define SPACE 0x11 -#define INQUIRY 0x12 -#define RECOVER_BUFFERED_DATA 0x14 -#define MODE_SELECT 0x15 -#define RESERVE 0x16 -#define RELEASE 0x17 -#define COPY 0x18 -#define ERASE 0x19 -#define MODE_SENSE 0x1a -#define START_STOP 0x1b -#define RECEIVE_DIAGNOSTIC 0x1c -#define SEND_DIAGNOSTIC 0x1d -#define ALLOW_MEDIUM_REMOVAL 0x1e - -#define READ_FORMAT_CAPACITIES 0x23 -#define SET_WINDOW 0x24 -#define READ_CAPACITY 0x25 -#define READ_10 0x28 -#define WRITE_10 0x2a -#define SEEK_10 0x2b -#define POSITION_TO_ELEMENT 0x2b -#define WRITE_VERIFY 0x2e -#define VERIFY 0x2f -#define SEARCH_HIGH 0x30 -#define SEARCH_EQUAL 0x31 -#define SEARCH_LOW 0x32 -#define SET_LIMITS 0x33 -#define PRE_FETCH 0x34 -#define READ_POSITION 0x34 -#define SYNCHRONIZE_CACHE 0x35 -#define LOCK_UNLOCK_CACHE 0x36 -#define READ_DEFECT_DATA 0x37 -#define MEDIUM_SCAN 0x38 -#define COMPARE 0x39 -#define COPY_VERIFY 0x3a -#define WRITE_BUFFER 0x3b -#define READ_BUFFER 0x3c -#define UPDATE_BLOCK 0x3d -#define READ_LONG 0x3e -#define WRITE_LONG 0x3f -#define CHANGE_DEFINITION 0x40 -#define WRITE_SAME 0x41 -#define UNMAP 0x42 -#define READ_TOC 0x43 -#define READ_HEADER 0x44 -#define GET_EVENT_STATUS_NOTIFICATION 0x4a -#define LOG_SELECT 0x4c -#define LOG_SENSE 0x4d -#define XDWRITEREAD_10 0x53 -#define MODE_SELECT_10 0x55 -#define RESERVE_10 0x56 -#define RELEASE_10 0x57 -#define MODE_SENSE_10 0x5a -#define PERSISTENT_RESERVE_IN 0x5e -#define PERSISTENT_RESERVE_OUT 0x5f -#define VARIABLE_LENGTH_CMD 0x7f -#define REPORT_LUNS 0xa0 -#define SECURITY_PROTOCOL_IN 0xa2 -#define MAINTENANCE_IN 0xa3 -#define MAINTENANCE_OUT 0xa4 -#define MOVE_MEDIUM 0xa5 -#define EXCHANGE_MEDIUM 0xa6 -#define READ_12 0xa8 -#define WRITE_12 0xaa -#define READ_MEDIA_SERIAL_NUMBER 0xab -#define WRITE_VERIFY_12 0xae -#define VERIFY_12 0xaf -#define SEARCH_HIGH_12 0xb0 -#define SEARCH_EQUAL_12 0xb1 -#define SEARCH_LOW_12 0xb2 -#define SECURITY_PROTOCOL_OUT 0xb5 -#define READ_ELEMENT_STATUS 0xb8 -#define SEND_VOLUME_TAG 0xb6 -#define WRITE_LONG_2 0xea -#define EXTENDED_COPY 0x83 -#define RECEIVE_COPY_RESULTS 0x84 -#define ACCESS_CONTROL_IN 0x86 -#define ACCESS_CONTROL_OUT 0x87 -#define READ_16 0x88 -#define COMPARE_AND_WRITE 0x89 -#define WRITE_16 0x8a -#define READ_ATTRIBUTE 0x8c -#define WRITE_ATTRIBUTE 0x8d -#define VERIFY_16 0x8f -#define SYNCHRONIZE_CACHE_16 0x91 -#define WRITE_SAME_16 0x93 -#define SERVICE_ACTION_IN 0x9e -/* values for service action in */ -#define SAI_READ_CAPACITY_16 0x10 -#define SAI_GET_LBA_STATUS 0x12 -#define SAI_REPORT_REFERRALS 0x13 -/* values for VARIABLE_LENGTH_CMD service action codes - * see spc4r17 Section D.3.5, table D.7 and D.8 */ -#define VLC_SA_RECEIVE_CREDENTIAL 0x1800 -/* values for maintenance in */ -#define MI_REPORT_IDENTIFYING_INFORMATION 0x05 -#define MI_REPORT_TARGET_PGS 0x0a -#define MI_REPORT_ALIASES 0x0b -#define MI_REPORT_SUPPORTED_OPERATION_CODES 0x0c -#define MI_REPORT_SUPPORTED_TASK_MANAGEMENT_FUNCTIONS 0x0d -#define MI_REPORT_PRIORITY 0x0e -#define MI_REPORT_TIMESTAMP 0x0f -#define MI_MANAGEMENT_PROTOCOL_IN 0x10 -/* value for MI_REPORT_TARGET_PGS ext header */ -#define MI_EXT_HDR_PARAM_FMT 0x20 -/* values for maintenance out */ -#define MO_SET_IDENTIFYING_INFORMATION 0x06 -#define MO_SET_TARGET_PGS 0x0a -#define MO_CHANGE_ALIASES 0x0b -#define MO_SET_PRIORITY 0x0e -#define MO_SET_TIMESTAMP 0x0f -#define MO_MANAGEMENT_PROTOCOL_OUT 0x10 -/* values for variable length command */ -#define XDREAD_32 0x03 -#define XDWRITE_32 0x04 -#define XPWRITE_32 0x06 -#define XDWRITEREAD_32 0x07 -#define READ_32 0x09 -#define VERIFY_32 0x0a -#define WRITE_32 0x0b -#define WRITE_SAME_32 0x0d - -/* Values for T10/04-262r7 */ -#define ATA_16 0x85 /* 16-byte pass-thru */ -#define ATA_12 0xa1 /* 12-byte pass-thru */ - -/* - * SCSI command lengths - */ - -#define SCSI_MAX_VARLEN_CDB_SIZE 260 - -/* defined in T10 SCSI Primary Commands-2 (SPC2) */ -struct scsi_varlen_cdb_hdr { - __u8 opcode; /* opcode always == VARIABLE_LENGTH_CMD */ - __u8 control; - __u8 misc[5]; - __u8 additional_cdb_length; /* total cdb length - 8 */ - __be16 service_action; - /* service specific data follows */ -}; - -static inline unsigned -scsi_varlen_cdb_length(const void *hdr) -{ - return ((struct scsi_varlen_cdb_hdr *)hdr)->additional_cdb_length + 8; -} - -extern const unsigned char scsi_command_size_tbl[8]; -#define COMMAND_SIZE(opcode) scsi_command_size_tbl[((opcode) >> 5) & 7] - -static inline unsigned -scsi_command_size(const unsigned char *cmnd) -{ - return (cmnd[0] == VARIABLE_LENGTH_CMD) ? - scsi_varlen_cdb_length(cmnd) : COMMAND_SIZE(cmnd[0]); -} - -#ifdef CONFIG_ACPI -struct acpi_bus_type; - -extern int -scsi_register_acpi_bus_type(struct acpi_bus_type *bus); - -extern void -scsi_unregister_acpi_bus_type(struct acpi_bus_type *bus); -#endif - -/* - * SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft - * T10/1561-D Revision 4 Draft dated 7th November 2002. - */ -#define SAM_STAT_GOOD 0x00 -#define SAM_STAT_CHECK_CONDITION 0x02 -#define SAM_STAT_CONDITION_MET 0x04 -#define SAM_STAT_BUSY 0x08 -#define SAM_STAT_INTERMEDIATE 0x10 -#define SAM_STAT_INTERMEDIATE_CONDITION_MET 0x14 -#define SAM_STAT_RESERVATION_CONFLICT 0x18 -#define SAM_STAT_COMMAND_TERMINATED 0x22 /* obsolete in SAM-3 */ -#define SAM_STAT_TASK_SET_FULL 0x28 -#define SAM_STAT_ACA_ACTIVE 0x30 -#define SAM_STAT_TASK_ABORTED 0x40 - -/** scsi_status_is_good - check the status return. - * - * @status: the status passed up from the driver (including host and - * driver components) - * - * This returns true for known good conditions that may be treated as - * command completed normally - */ -static inline int scsi_status_is_good(int status) -{ - /* - * FIXME: bit0 is listed as reserved in SCSI-2, but is - * significant in SCSI-3. For now, we follow the SCSI-2 - * behaviour and ignore reserved bits. - */ - status &= 0xfe; - return ((status == SAM_STAT_GOOD) || - (status == SAM_STAT_INTERMEDIATE) || - (status == SAM_STAT_INTERMEDIATE_CONDITION_MET) || - /* FIXME: this is obsolete in SAM-3 */ - (status == SAM_STAT_COMMAND_TERMINATED)); -} - -/* - * Status codes. These are deprecated as they are shifted 1 bit right - * from those found in the SCSI standards. This causes confusion for - * applications that are ported to several OSes. Prefer SAM Status codes - * above. - */ - -#define GOOD 0x00 -#define CHECK_CONDITION 0x01 -#define CONDITION_GOOD 0x02 -#define BUSY 0x04 -#define INTERMEDIATE_GOOD 0x08 -#define INTERMEDIATE_C_GOOD 0x0a -#define RESERVATION_CONFLICT 0x0c -#define COMMAND_TERMINATED 0x11 -#define QUEUE_FULL 0x14 -#define ACA_ACTIVE 0x18 -#define TASK_ABORTED 0x20 - -#define STATUS_MASK 0xfe - -/* - * SENSE KEYS - */ - -#define NO_SENSE 0x00 -#define RECOVERED_ERROR 0x01 -#define NOT_READY 0x02 -#define MEDIUM_ERROR 0x03 -#define HARDWARE_ERROR 0x04 -#define ILLEGAL_REQUEST 0x05 -#define UNIT_ATTENTION 0x06 -#define DATA_PROTECT 0x07 -#define BLANK_CHECK 0x08 -#define COPY_ABORTED 0x0a -#define ABORTED_COMMAND 0x0b -#define VOLUME_OVERFLOW 0x0d -#define MISCOMPARE 0x0e - - -/* - * DEVICE TYPES - * Please keep them in 0x%02x format for $MODALIAS to work - */ - -#define TYPE_DISK 0x00 -#define TYPE_TAPE 0x01 -#define TYPE_PRINTER 0x02 -#define TYPE_PROCESSOR 0x03 /* HP scanners use this */ -#define TYPE_WORM 0x04 /* Treated as ROM by our system */ -#define TYPE_ROM 0x05 -#define TYPE_SCANNER 0x06 -#define TYPE_MOD 0x07 /* Magneto-optical disk - - * - treated as TYPE_DISK */ -#define TYPE_MEDIUM_CHANGER 0x08 -#define TYPE_COMM 0x09 /* Communications device */ -#define TYPE_RAID 0x0c -#define TYPE_ENCLOSURE 0x0d /* Enclosure Services Device */ -#define TYPE_RBC 0x0e -#define TYPE_OSD 0x11 -#define TYPE_NO_LUN 0x7f - -/* SCSI protocols; these are taken from SPC-3 section 7.5 */ -enum scsi_protocol { - SCSI_PROTOCOL_FCP = 0, /* Fibre Channel */ - SCSI_PROTOCOL_SPI = 1, /* parallel SCSI */ - SCSI_PROTOCOL_SSA = 2, /* Serial Storage Architecture - Obsolete */ - SCSI_PROTOCOL_SBP = 3, /* firewire */ - SCSI_PROTOCOL_SRP = 4, /* Infiniband RDMA */ - SCSI_PROTOCOL_ISCSI = 5, - SCSI_PROTOCOL_SAS = 6, - SCSI_PROTOCOL_ADT = 7, /* Media Changers */ - SCSI_PROTOCOL_ATA = 8, - SCSI_PROTOCOL_UNSPEC = 0xf, /* No specific protocol */ -}; - -/* Returns a human-readable name for the device */ -extern const char * scsi_device_type(unsigned type); - -/* - * standard mode-select header prepended to all mode-select commands - */ - -struct ccs_modesel_head { - __u8 _r1; /* reserved */ - __u8 medium; /* device-specific medium type */ - __u8 _r2; /* reserved */ - __u8 block_desc_length; /* block descriptor length */ - __u8 density; /* device-specific density code */ - __u8 number_blocks_hi; /* number of blocks in this block desc */ - __u8 number_blocks_med; - __u8 number_blocks_lo; - __u8 _r3; - __u8 block_length_hi; /* block length for blocks in this desc */ - __u8 block_length_med; - __u8 block_length_lo; -}; - -/* - * ScsiLun: 8 byte LUN. - */ -struct scsi_lun { - __u8 scsi_lun[8]; -}; - -/* - * The Well Known LUNS (SAM-3) in our int representation of a LUN - */ -#define SCSI_W_LUN_BASE 0xc100 -#define SCSI_W_LUN_REPORT_LUNS (SCSI_W_LUN_BASE + 1) -#define SCSI_W_LUN_ACCESS_CONTROL (SCSI_W_LUN_BASE + 2) -#define SCSI_W_LUN_TARGET_LOG_PAGE (SCSI_W_LUN_BASE + 3) - -static inline int scsi_is_wlun(unsigned int lun) -{ - return (lun & 0xff00) == SCSI_W_LUN_BASE; -} - - -/* - * MESSAGE CODES - */ - -#define COMMAND_COMPLETE 0x00 -#define EXTENDED_MESSAGE 0x01 -#define EXTENDED_MODIFY_DATA_POINTER 0x00 -#define EXTENDED_SDTR 0x01 -#define EXTENDED_EXTENDED_IDENTIFY 0x02 /* SCSI-I only */ -#define EXTENDED_WDTR 0x03 -#define EXTENDED_PPR 0x04 -#define EXTENDED_MODIFY_BIDI_DATA_PTR 0x05 -#define SAVE_POINTERS 0x02 -#define RESTORE_POINTERS 0x03 -#define DISCONNECT 0x04 -#define INITIATOR_ERROR 0x05 -#define ABORT_TASK_SET 0x06 -#define MESSAGE_REJECT 0x07 -#define NOP 0x08 -#define MSG_PARITY_ERROR 0x09 -#define LINKED_CMD_COMPLETE 0x0a -#define LINKED_FLG_CMD_COMPLETE 0x0b -#define TARGET_RESET 0x0c -#define ABORT_TASK 0x0d -#define CLEAR_TASK_SET 0x0e -#define INITIATE_RECOVERY 0x0f /* SCSI-II only */ -#define RELEASE_RECOVERY 0x10 /* SCSI-II only */ -#define CLEAR_ACA 0x16 -#define LOGICAL_UNIT_RESET 0x17 -#define SIMPLE_QUEUE_TAG 0x20 -#define HEAD_OF_QUEUE_TAG 0x21 -#define ORDERED_QUEUE_TAG 0x22 -#define IGNORE_WIDE_RESIDUE 0x23 -#define ACA 0x24 -#define QAS_REQUEST 0x55 - -/* Old SCSI2 names, don't use in new code */ -#define BUS_DEVICE_RESET TARGET_RESET -#define ABORT ABORT_TASK_SET - -/* - * Host byte codes - */ - -#define DID_OK 0x00 /* NO error */ -#define DID_NO_CONNECT 0x01 /* Couldn't connect before timeout period */ -#define DID_BUS_BUSY 0x02 /* BUS stayed busy through time out period */ -#define DID_TIME_OUT 0x03 /* TIMED OUT for other reason */ -#define DID_BAD_TARGET 0x04 /* BAD target. */ -#define DID_ABORT 0x05 /* Told to abort for some other reason */ -#define DID_PARITY 0x06 /* Parity error */ -#define DID_ERROR 0x07 /* Internal error */ -#define DID_RESET 0x08 /* Reset by somebody. */ -#define DID_BAD_INTR 0x09 /* Got an interrupt we weren't expecting. */ -#define DID_PASSTHROUGH 0x0a /* Force command past mid-layer */ -#define DID_SOFT_ERROR 0x0b /* The low level driver just wish a retry */ -#define DID_IMM_RETRY 0x0c /* Retry without decrementing retry count */ -#define DID_REQUEUE 0x0d /* Requeue command (no immediate retry) also - * without decrementing the retry count */ -#define DID_TRANSPORT_DISRUPTED 0x0e /* Transport error disrupted execution - * and the driver blocked the port to - * recover the link. Transport class will - * retry or fail IO */ -#define DID_TRANSPORT_FAILFAST 0x0f /* Transport class fastfailed the io */ -#define DID_TARGET_FAILURE 0x10 /* Permanent target failure, do not retry on - * other paths */ -#define DID_NEXUS_FAILURE 0x11 /* Permanent nexus failure, retry on other - * paths might yield different results */ -#define DID_ALLOC_FAILURE 0x12 /* Space allocation on the device failed */ -#define DID_MEDIUM_ERROR 0x13 /* Medium error */ -#define DRIVER_OK 0x00 /* Driver status */ - -/* - * These indicate the error that occurred, and what is available. - */ - -#define DRIVER_BUSY 0x01 -#define DRIVER_SOFT 0x02 -#define DRIVER_MEDIA 0x03 -#define DRIVER_ERROR 0x04 - -#define DRIVER_INVALID 0x05 -#define DRIVER_TIMEOUT 0x06 -#define DRIVER_HARD 0x07 -#define DRIVER_SENSE 0x08 - -/* - * Internal return values. - */ - -#define NEEDS_RETRY 0x2001 -#define SUCCESS 0x2002 -#define FAILED 0x2003 -#define QUEUED 0x2004 -#define SOFT_ERROR 0x2005 -#define ADD_TO_MLQUEUE 0x2006 -#define TIMEOUT_ERROR 0x2007 -#define SCSI_RETURN_NOT_HANDLED 0x2008 -#define FAST_IO_FAIL 0x2009 - -/* - * Midlevel queue return values. - */ -#define SCSI_MLQUEUE_HOST_BUSY 0x1055 -#define SCSI_MLQUEUE_DEVICE_BUSY 0x1056 -#define SCSI_MLQUEUE_EH_RETRY 0x1057 -#define SCSI_MLQUEUE_TARGET_BUSY 0x1058 - -/* - * Use these to separate status msg and our bytes - * - * These are set by: - * - * status byte = set from target device - * msg_byte = return status from host adapter itself. - * host_byte = set by low-level driver to indicate status. - * driver_byte = set by mid-level. - */ -#define status_byte(result) (((result) >> 1) & 0x7f) -#define msg_byte(result) (((result) >> 8) & 0xff) -#define host_byte(result) (((result) >> 16) & 0xff) -#define driver_byte(result) (((result) >> 24) & 0xff) - -#define sense_class(sense) (((sense) >> 4) & 0x7) -#define sense_error(sense) ((sense) & 0xf) -#define sense_valid(sense) ((sense) & 0x80) - -/* - * default timeouts -*/ -#define FORMAT_UNIT_TIMEOUT (2 * 60 * 60 * HZ) -#define START_STOP_TIMEOUT (60 * HZ) -#define MOVE_MEDIUM_TIMEOUT (5 * 60 * HZ) -#define READ_ELEMENT_STATUS_TIMEOUT (5 * 60 * HZ) -#define READ_DEFECT_DATA_TIMEOUT (60 * HZ ) - - -#define IDENTIFY_BASE 0x80 -#define IDENTIFY(can_disconnect, lun) (IDENTIFY_BASE |\ - ((can_disconnect) ? 0x40 : 0) |\ - ((lun) & 0x07)) - -/* - * struct scsi_device::scsi_level values. For SCSI devices other than those - * prior to SCSI-2 (i.e. over 12 years old) this value is (resp[2] + 1) - * where "resp" is a byte array of the response to an INQUIRY. The scsi_level - * variable is visible to the user via sysfs. - */ - -#define SCSI_UNKNOWN 0 -#define SCSI_1 1 -#define SCSI_1_CCS 2 -#define SCSI_2 3 -#define SCSI_3 4 /* SPC */ -#define SCSI_SPC_2 5 -#define SCSI_SPC_3 6 - -/* - * INQ PERIPHERAL QUALIFIERS - */ -#define SCSI_INQ_PQ_CON 0x00 -#define SCSI_INQ_PQ_NOT_CON 0x01 -#define SCSI_INQ_PQ_NOT_CAP 0x03 - - -/* - * Here are some scsi specific ioctl commands which are sometimes useful. - * - * Note that include/linux/cdrom.h also defines IOCTL 0x5300 - 0x5395 - */ - -/* Used to obtain PUN and LUN info. Conflicts with CDROMAUDIOBUFSIZ */ -#define SCSI_IOCTL_GET_IDLUN 0x5382 - -/* 0x5383 and 0x5384 were used for SCSI_IOCTL_TAGGED_{ENABLE,DISABLE} */ - -/* Used to obtain the host number of a device. */ -#define SCSI_IOCTL_PROBE_HOST 0x5385 - -/* Used to obtain the bus number for a device */ -#define SCSI_IOCTL_GET_BUS_NUMBER 0x5386 - -/* Used to obtain the PCI location of a device */ -#define SCSI_IOCTL_GET_PCI 0x5387 - -/* Pull a u32 out of a SCSI message (using BE SCSI conventions) */ -static inline __u32 scsi_to_u32(__u8 *ptr) -{ - return (ptr[0]<<24) + (ptr[1]<<16) + (ptr[2]<<8) + ptr[3]; -} - -#endif /* _SCSI_SCSI_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scsi/scsi_cmnd.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scsi/scsi_cmnd.h deleted file mode 100644 index 4e53d11..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scsi/scsi_cmnd.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef __SCSI_CMND_H_ -#define __SCSI_CMND_H_ - -#include "us_usb.h" -#include "us_os_wrap_via_osdep_api.h" -#include -#include -#include -/** - * define flash block size - */ -#define BLOCK_SIZE 512 - -struct scsi_data_buffer { - struct sg_table table; - unsigned char *data_buffer; /* Data buffer to store read data */ - unsigned length; - int resid; -}; - -struct scsi_cmnd{ - int result; /* Status code from lower level driver */ - - unsigned int channel,id,lun; - enum dma_data_direction sc_data_direction; - unsigned short cmd_len; - unsigned length; - _Sema cmnd_done; - - int eh_eflags; /* Used by error handlr */ - - struct scsi_data_buffer sdb; - - unsigned long sector;/* Sector address in LBA */ - unsigned int count;/* Number of sectors to read */ - void *request_buffer; - - /* These elements define the operation we are about to perform */ -#define MAX_COMMAND_SIZE 16 - unsigned char cmnd[MAX_COMMAND_SIZE]; - -#define SCSI_SENSE_BUFFERSIZE 96 - unsigned char *sense_buffer; /* obtained by REQUEST SENSE - * when CHECK CONDITION is - * received on original command - * (auto-sense) */ - - /* Low-level done function - can be used by low-level driver to point - * to completion function. Not used by mid/upper level code. */ - void (*scsi_done) (struct scsi_cmnd *); - - unsigned underflow; /* Return error if less than - this amount is transferred */ -}; - -static inline unsigned scsi_sg_count(struct scsi_cmnd *cmd) -{ - return cmd->sdb.table.nents; -} - -static inline struct scatterlist *scsi_sglist(struct scsi_cmnd *cmd) -{ - return cmd->sdb.table.sgl; -} - -static inline void scsi_set_resid(struct scsi_cmnd *cmd, int resid) -{ - cmd->sdb.resid = resid; -} -// -static inline int scsi_get_resid(struct scsi_cmnd *cmd) -{ - return cmd->sdb.resid; -} -static inline unsigned scsi_bufflen(struct scsi_cmnd *cmd) -{ - return cmd->sdb.length; -} - -extern int scsi_cmnd_execute(char cmnd, unsigned char * _buff, - unsigned long _sector, unsigned int _count); - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scsi/scsi_eh.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scsi/scsi_eh.h deleted file mode 100644 index e9d69d1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/scsi/scsi_eh.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef _SCSI_EH_H_ -#define _SCSI_EH_H_ - -#include "scsi/scsi_cmnd.h" -#include "dma_direction.h" - -#define BLK_MAX_CDB 16 -/* - * This is a slightly modified SCSI sense "descriptor" format header. - * The addition is to allow the 0x70 and 0x71 response codes. The idea - * is to place the salient data from either "fixed" or "descriptor" sense - * format into one structure to ease application processing. - * - * The original sense buffer should be kept around for those cases - * in which more information is required (e.g. the LBA of a MEDIUM ERROR). - */ -struct scsi_sense_hdr { /* See SPC-3 section 4.5 */ - u8 response_code; /* permit: 0x0, 0x70, 0x71, 0x72, 0x73 */ - u8 sense_key; - u8 asc; - u8 ascq; - u8 byte4; - u8 byte5; - u8 byte6; - u8 additional_length; /* always 0 for fixed sense format */ -}; - -static inline int scsi_sense_valid(struct scsi_sense_hdr *sshdr) -{ - if (!sshdr) - return 0; - return (sshdr->response_code & 0x70) == 0x70; -} - -struct scsi_eh_save { - /* saved state */ - int result; - enum dma_data_direction data_direction; - unsigned underflow; - unsigned char cmd_len; -// unsigned char prot_op; - unsigned char cmnd[BLK_MAX_CDB]; - struct scsi_data_buffer sdb; -// struct request *next_rq; - /* new command support */ - unsigned char eh_cmnd[BLK_MAX_CDB]; -// struct scatterlist sense_sgl; -}; -const u8 * scsi_sense_desc_find(const u8 * sense_buffer, int sb_len, - int desc_type); -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/storage.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/storage.h deleted file mode 100644 index ab1327d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/storage.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef __STORAGE_H -#define __STORAGE_H - -#include "us_os_wrap_via_osdep_api.h" -/* Storage subclass codes */ - -#define USB_SC_RBC 0x01 /* Typically, flash devices */ -#define USB_SC_8020 0x02 /* CD-ROM */ -#define USB_SC_QIC 0x03 /* QIC-157 Tapes */ -#define USB_SC_UFI 0x04 /* Floppy */ -#define USB_SC_8070 0x05 /* Removable media */ -#define USB_SC_SCSI 0x06 /* Transparent */ -#define USB_SC_LOCKABLE 0x07 /* Password-protected */ - -#define USB_SC_ISD200 0xf0 /* ISD200 ATA */ -#define USB_SC_CYP_ATACB 0xf1 /* Cypress ATACB */ -#define USB_SC_DEVICE 0xff /* Use device's value */ - -/* Storage protocol codes */ - -#define USB_PR_CBI 0x00 /* Control/Bulk/Interrupt */ -#define USB_PR_CB 0x01 /* Control/Bulk w/o interrupt */ -#define USB_PR_BULK 0x50 /* bulk only */ -#define USB_PR_UAS 0x62 /* USB Attached SCSI */ - -#define USB_PR_USBAT 0x80 /* SCM-ATAPI bridge */ -#define USB_PR_EUSB_SDDR09 0x81 /* SCM-SCSI bridge for SDDR-09 */ -#define USB_PR_SDDR55 0x82 /* SDDR-55 (made up) */ -#define USB_PR_DPCM_USB 0xf0 /* Combination CB/SDDR09 */ -#define USB_PR_FREECOM 0xf1 /* Freecom */ -#define USB_PR_DATAFAB 0xf2 /* Datafab chipsets */ -#define USB_PR_JUMPSHOT 0xf3 /* Lexar Jumpshot */ -#define USB_PR_ALAUDA 0xf4 /* Alauda chipsets */ -#define USB_PR_KARMA 0xf5 /* Rio Karma */ - -#define USB_PR_DEVICE 0xff /* Use device's value */ - -/* -* Bulk only data structures -*/ - -/* command block wrapper */ -struct bulk_cb_wrap { - __le32 Signature; /* contains 'USBC', denote bulk_cb_wrap */ - __u32 Tag; /* unique per command id */ - __le32 DataTransferLength; /* size of data for transfer */ - __u8 Flags; /* data transfer direction */ - __u8 Lun; /* LUN normally 0, (which command block is sent) */ - __u8 Length; /* length of the CDB */ - __u8 CDB[16]; /* max command */ -}; - -#define US_BULK_CB_WRAP_LEN 31 -#define US_BULK_CB_SIGN 0x43425355 /*spells out USBC */ -#define US_BULK_FLAG_IN (1 << 7) -#define US_BULK_FLAG_OUT 0 - -/* command status wrapper */ -struct bulk_cs_wrap { - __le32 Signature; /* should = 'USBS' */ - __u32 Tag; /* same as original command, echoed by the device as received */ - __le32 Residue; /* amount not transferred */ - __u8 Status; /* execute command status */ -}; - -#define US_BULK_CS_WRAP_LEN 13 -#define US_BULK_CS_SIGN 0x53425355 /* spells out 'USBS' */ -// execute command status -#define US_BULK_STAT_OK 0 -#define US_BULK_STAT_FAIL 1 -#define US_BULK_STAT_PHASE 2 - -/* bulk-only class specific requests */ -#define US_BULK_RESET_REQUEST 0xff -#define US_BULK_GET_MAX_LUN 0xfe - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/transport.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/transport.h deleted file mode 100644 index a91ab46..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/transport.h +++ /dev/null @@ -1,102 +0,0 @@ -/* Driver for USB Mass Storage compliant devices - * Transport Functions Header File - * - * Current development and maintenance by: - * (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net) - * - * This driver is based on the 'USB Mass Storage Class' document. This - * describes in detail the protocol used to communicate with such - * devices. Clearly, the designers had SCSI and ATAPI commands in - * mind when they created this document. The commands are all very - * similar to commands in the SCSI-II and ATAPI specifications. - * - * It is important to note that in a number of cases this class - * exhibits class-specific exemptions from the USB specification. - * Notably the usage of NAK, STALL and ACK differs from the norm, in - * that they are used to communicate wait, failed and OK on commands. - * - * Also, for certain devices, the interrupt endpoint is used to convey - * status of a command. - * - * Please see http://www.one-eyed-alien.net/~mdharm/linux-usb for more - * information about this driver. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2, or (at your option) any - * later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _US_TRANSPORT_H_ -#define _US_TRANSPORT_H_ -#if 0 -#include -#endif -/* - * usb_stor_bulk_transfer_xxx() return codes, in order of severity - */ - -#define USB_STOR_XFER_GOOD 0 /* good transfer */ -#define USB_STOR_XFER_SHORT 1 /* transferred less than expected */ -#define USB_STOR_XFER_STALLED 2 /* endpoint stalled */ -#define USB_STOR_XFER_LONG 3 /* device tried to send too much */ -#define USB_STOR_XFER_ERROR 4 /* transfer died in the middle */ - -/* - * Transport return codes - */ - -#define USB_STOR_TRANSPORT_GOOD 0 /* Transport good, command good */ -#define USB_STOR_TRANSPORT_FAILED 1 /* Transport good, command failed */ -#define USB_STOR_TRANSPORT_NO_SENSE 2 /* Command failed, no auto-sense */ -#define USB_STOR_TRANSPORT_ERROR 3 /* Transport bad (i.e. device dead) */ - -/* - * We used to have USB_STOR_XFER_ABORTED and USB_STOR_TRANSPORT_ABORTED - * return codes. But now the transport and low-level transfer routines - * treat an abort as just another error (-ENOENT for a cancelled URB). - * It is up to the invoke_transport() function to test for aborts and - * distinguish them from genuine communication errors. - */ - -/* - * CBI accept device specific command - */ -#define US_CBI_ADSC 0 - -//extern int usb_stor_CB_transport(struct scsi_cmnd *, struct us_data*); -//extern int usb_stor_CB_reset(struct us_data*); -// -//extern int usb_stor_Bulk_transport(struct scsi_cmnd *, struct us_data*); -//extern int usb_stor_Bulk_max_lun(struct us_data*); -//extern int usb_stor_Bulk_reset(struct us_data*); -// -//extern void usb_stor_invoke_transport(struct scsi_cmnd *, struct us_data*); -//extern void usb_stor_stop_transport(struct us_data*); - -//extern int usb_stor_control_msg(struct us_data *us, unsigned int pipe, -// u8 request, u8 requesttype, u16 value, u16 index, -// void *data, u16 size, int timeout); -//extern int usb_stor_clear_halt(struct us_data *us, unsigned int pipe); -// -//extern int usb_stor_ctrl_transfer(struct us_data *us, unsigned int pipe, -// u8 request, u8 requesttype, u16 value, u16 index, -// void *data, u16 size); -//extern int usb_stor_bulk_transfer_buf(struct us_data *us, unsigned int pipe, -// void *buf, unsigned int length, unsigned int *act_len); -//extern int usb_stor_bulk_transfer_sg(struct us_data *us, unsigned int pipe, -// void *buf, unsigned int length, int use_sg, int *residual); -//extern int usb_stor_bulk_srb(struct us_data* us, unsigned int pipe, -// struct scsi_cmnd* srb); -// -//extern int usb_stor_port_reset(struct us_data *us); -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/unusual_devs.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/unusual_devs.h deleted file mode 100644 index 913c72c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/unusual_devs.h +++ /dev/null @@ -1,2087 +0,0 @@ -/* Driver for USB Mass Storage compliant devices - * Unusual Devices File - */ - -#define CONFIG_SUPPORT_OPTS_MS_INIT 0 -#define CONFIG_SUPPORT_SERRIA_MS_INIT 0 - -#if !defined(CONFIG_USB_STORAGE_SDDR09) && \ - !defined(CONFIG_USB_STORAGE_SDDR09_MODULE) -#define NO_SDDR09 -#endif - -/* patch submitted by Vivian Bregier - */ -UNUSUAL_DEV( 0x03eb, 0x2002, 0x0100, 0x0100, - "ATMEL", - "SND1 Storage", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE), - -/* Reported by Rodolfo Quesada */ -UNUSUAL_DEV( 0x03ee, 0x6906, 0x0003, 0x0003, - "VIA Technologies Inc.", - "Mitsumi multi cardreader", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -UNUSUAL_DEV( 0x03f0, 0x0107, 0x0200, 0x0200, - "HP", - "CD-Writer+", - USB_SC_8070, USB_PR_CB, NULL, 0), - -/* Reported by Ben Efros */ -UNUSUAL_DEV( 0x03f0, 0x070c, 0x0000, 0x0000, - "HP", - "Personal Media Drive", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_SANE_SENSE ), - -/* Reported by Grant Grundler - * HP r707 camera in "Disk" mode with 2.00.23 or 2.00.24 firmware. - */ -UNUSUAL_DEV( 0x03f0, 0x4002, 0x0001, 0x0001, - "HP", - "PhotoSmart R707", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_FIX_CAPACITY), - -/* Reported by Sebastian Kapfer - * and Olaf Hering (different bcd's, same vendor/product) - * for USB floppies that need the SINGLE_LUN enforcement. - */ -UNUSUAL_DEV( 0x0409, 0x0040, 0x0000, 0x9999, - "NEC", - "NEC USB UF000x", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_SINGLE_LUN ), - -/* Patch submitted by Mihnea-Costin Grigore */ -UNUSUAL_DEV( 0x040d, 0x6205, 0x0003, 0x0003, - "VIA Technologies Inc.", - "USB 2.0 Card Reader", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Deduced by Jonathan Woithe - * Entry needed for flags: US_FL_FIX_INQUIRY because initial inquiry message - * always fails and confuses drive. - */ -UNUSUAL_DEV( 0x0411, 0x001c, 0x0113, 0x0113, - "Buffalo", - "DUB-P40G HDD", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_INQUIRY ), - -/* Submitted by Ernestas Vaiciukevicius */ -UNUSUAL_DEV( 0x0419, 0x0100, 0x0100, 0x0100, - "Samsung Info. Systems America, Inc.", - "MP3 Player", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Orgad Shaneh */ -UNUSUAL_DEV( 0x0419, 0xaace, 0x0100, 0x0100, - "Samsung", "MP3 Player", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Christian Leber */ -UNUSUAL_DEV( 0x0419, 0xaaf5, 0x0100, 0x0100, - "TrekStor", - "i.Beat 115 2.0", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE | US_FL_NOT_LOCKABLE ), - -/* Reported by Stefan Werner */ -UNUSUAL_DEV( 0x0419, 0xaaf6, 0x0100, 0x0100, - "TrekStor", - "i.Beat Joy 2.0", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Pete Zaitcev , bz#176584 */ -UNUSUAL_DEV( 0x0420, 0x0001, 0x0100, 0x0100, - "GENERIC", "MP3 PLAYER", /* MyMusix PD-205 on the outside. */ - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Andrew Nayenko - * Updated for new firmware by Phillip Potter */ -UNUSUAL_DEV( 0x0421, 0x0019, 0x0592, 0x0610, - "Nokia", - "Nokia 6288", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64 ), - -/* Reported by Mario Rettig */ -UNUSUAL_DEV( 0x0421, 0x042e, 0x0100, 0x0100, - "Nokia", - "Nokia 3250", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE | US_FL_FIX_CAPACITY ), - -/* Reported by */ -UNUSUAL_DEV( 0x0421, 0x0433, 0x0100, 0x0100, - "Nokia", - "E70", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE | US_FL_FIX_CAPACITY ), - -/* Reported by Jon Hart */ -UNUSUAL_DEV( 0x0421, 0x0434, 0x0100, 0x0100, - "Nokia", - "E60", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY | US_FL_IGNORE_RESIDUE ), - -/* Reported by Sumedha Swamy and - * Einar Th. Einarsson */ -UNUSUAL_DEV( 0x0421, 0x0444, 0x0100, 0x0100, - "Nokia", - "N91", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE | US_FL_FIX_CAPACITY ), - -/* Reported by Jiri Slaby and - * Rene C. Castberg */ -UNUSUAL_DEV( 0x0421, 0x0446, 0x0100, 0x0100, - "Nokia", - "N80", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE | US_FL_FIX_CAPACITY ), - -/* Reported by Matthew Bloch */ -UNUSUAL_DEV( 0x0421, 0x044e, 0x0100, 0x0100, - "Nokia", - "E61", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE | US_FL_FIX_CAPACITY ), - -/* Reported by Bardur Arantsson */ -UNUSUAL_DEV( 0x0421, 0x047c, 0x0370, 0x0610, - "Nokia", - "6131", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64 ), - -/* Reported by Manuel Osdoba */ -UNUSUAL_DEV( 0x0421, 0x0492, 0x0452, 0x9999, - "Nokia", - "Nokia 6233", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64 ), - -/* Reported by Alex Corcoles */ -UNUSUAL_DEV( 0x0421, 0x0495, 0x0370, 0x0370, - "Nokia", - "6234", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64 ), - -/* Reported by Daniele Forsi */ -UNUSUAL_DEV( 0x0421, 0x04b9, 0x0350, 0x0350, - "Nokia", - "5300", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64 ), - -/* Patch submitted by Victor A. Santos */ -UNUSUAL_DEV( 0x0421, 0x05af, 0x0742, 0x0742, - "Nokia", - "305", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64), - -/* Patch submitted by Mikhail Zolotaryov */ -UNUSUAL_DEV( 0x0421, 0x06aa, 0x1110, 0x1110, - "Nokia", - "502", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64 ), - -#ifdef NO_SDDR09 -UNUSUAL_DEV( 0x0436, 0x0005, 0x0100, 0x0100, - "Microtech", - "CameraMate", - USB_SC_SCSI, USB_PR_CB, NULL, - US_FL_SINGLE_LUN ), -#endif - -/* Patch submitted by Daniel Drake - * Device reports nonsense bInterfaceProtocol 6 when connected over USB2 */ -UNUSUAL_DEV( 0x0451, 0x5416, 0x0100, 0x0100, - "Neuros Audio", - "USB 2.0 HD 2.5", - USB_SC_DEVICE, USB_PR_BULK, NULL, - US_FL_NEED_OVERRIDE ), - -/* - * Pete Zaitcev , from Patrick C. F. Ernzer, bz#162559. - * The key does not actually break, but it returns zero sense which - * makes our SCSI stack to print confusing messages. - */ -UNUSUAL_DEV( 0x0457, 0x0150, 0x0100, 0x0100, - "USBest Technology", /* sold by Transcend */ - "USB Mass Storage Device", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NOT_LOCKABLE ), - -/* -* Bohdan Linda -* 1GB USB sticks MyFlash High Speed. I have restricted -* the revision to my model only -*/ -UNUSUAL_DEV( 0x0457, 0x0151, 0x0100, 0x0100, - "USB 2.0", - "Flash Disk", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_NOT_LOCKABLE ), - -/* Reported by Tamas Kerecsen - * Obviously the PROM has not been customized by the VAR; - * the Vendor and Product string descriptors are: - * Generic Mass Storage (PROTOTYPE--Remember to change idVendor) - * Generic Manufacturer (PROTOTYPE--Remember to change idVendor) - */ -UNUSUAL_DEV( 0x045e, 0xffff, 0x0000, 0x0000, - "Mitac", - "GPS", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64 ), - -/* - * This virtual floppy is found in Sun equipment (x4600, x4200m2, etc.) - * Reported by Pete Zaitcev - * This device chokes on both version of MODE SENSE which we have, so - * use_10_for_ms is not effective, and we use US_FL_NO_WP_DETECT. - */ -UNUSUAL_DEV( 0x046b, 0xff40, 0x0100, 0x0100, - "AMI", - "Virtual Floppy", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_NO_WP_DETECT), - -/* Patch submitted by Philipp Friedrich */ -UNUSUAL_DEV( 0x0482, 0x0100, 0x0100, 0x0100, - "Kyocera", - "Finecam S3x", - USB_SC_8070, USB_PR_CB, NULL, US_FL_FIX_INQUIRY), - -/* Patch submitted by Philipp Friedrich */ -UNUSUAL_DEV( 0x0482, 0x0101, 0x0100, 0x0100, - "Kyocera", - "Finecam S4", - USB_SC_8070, USB_PR_CB, NULL, US_FL_FIX_INQUIRY), - -/* Patch submitted by Stephane Galles */ -UNUSUAL_DEV( 0x0482, 0x0103, 0x0100, 0x0100, - "Kyocera", - "Finecam S5", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_FIX_INQUIRY), - -/* Patch submitted by Jens Taprogge */ -UNUSUAL_DEV( 0x0482, 0x0107, 0x0100, 0x0100, - "Kyocera", - "CONTAX SL300R T*", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY | US_FL_NOT_LOCKABLE), - -/* Reported by Paul Stewart - * This entry is needed because the device reports Sub=ff */ -UNUSUAL_DEV( 0x04a4, 0x0004, 0x0001, 0x0001, - "Hitachi", - "DVD-CAM DZ-MV100A Camcorder", - USB_SC_SCSI, USB_PR_CB, NULL, US_FL_SINGLE_LUN), - -/* BENQ DC5330 - * Reported by Manuel Fombuena and - * Frank Copeland */ -UNUSUAL_DEV( 0x04a5, 0x3010, 0x0100, 0x0100, - "Tekom Technologies, Inc", - "300_CAMERA", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Patch for Nikon coolpix 2000 - * Submitted by Fabien Cosse */ -UNUSUAL_DEV( 0x04b0, 0x0301, 0x0010, 0x0010, - "NIKON", - "NIKON DSC E2000", - USB_SC_DEVICE, USB_PR_DEVICE,NULL, - US_FL_NOT_LOCKABLE ), - -/* Reported by Doug Maxey (dwm@austin.ibm.com) */ -UNUSUAL_DEV( 0x04b3, 0x4001, 0x0110, 0x0110, - "IBM", - "IBM RSA2", - USB_SC_DEVICE, USB_PR_CB, NULL, - US_FL_MAX_SECTORS_MIN), - -/* Reported by Simon Levitt - * This entry needs Sub and Proto fields */ -UNUSUAL_DEV( 0x04b8, 0x0601, 0x0100, 0x0100, - "Epson", - "875DC Storage", - USB_SC_SCSI, USB_PR_CB, NULL, US_FL_FIX_INQUIRY), - -/* Reported by Khalid Aziz - * This entry is needed because the device reports Sub=ff */ -UNUSUAL_DEV( 0x04b8, 0x0602, 0x0110, 0x0110, - "Epson", - "785EPX Storage", - USB_SC_SCSI, USB_PR_BULK, NULL, US_FL_SINGLE_LUN), - -/* Not sure who reported this originally but - * Pavel Machek reported that the extra US_FL_SINGLE_LUN - * flag be added */ -UNUSUAL_DEV( 0x04cb, 0x0100, 0x0000, 0x2210, - "Fujifilm", - "FinePix 1400Zoom", - USB_SC_UFI, USB_PR_DEVICE, NULL, US_FL_FIX_INQUIRY | US_FL_SINGLE_LUN), - -/* Reported by Ondrej Zary - * The device reports one sector more and breaks when that sector is accessed - */ -UNUSUAL_DEV( 0x04ce, 0x0002, 0x026c, 0x026c, - "ScanLogic", - "SL11R-IDE", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY), - -/* Reported by Kriston Fincher - * Patch submitted by Sean Millichamp - * This is to support the Panasonic PalmCam PV-SD4090 - * This entry is needed because the device reports Sub=ff - */ -UNUSUAL_DEV( 0x04da, 0x0901, 0x0100, 0x0200, - "Panasonic", - "LS-120 Camera", - USB_SC_UFI, USB_PR_DEVICE, NULL, 0), - -/* From Yukihiro Nakai, via zaitcev@yahoo.com. - * This is needed for CB instead of CBI */ -UNUSUAL_DEV( 0x04da, 0x0d05, 0x0000, 0x0000, - "Sharp CE-CW05", - "CD-R/RW Drive", - USB_SC_8070, USB_PR_CB, NULL, 0), - -/* Reported by Adriaan Penning */ -UNUSUAL_DEV( 0x04da, 0x2372, 0x0000, 0x9999, - "Panasonic", - "DMC-LCx Camera", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY | US_FL_NOT_LOCKABLE ), - -/* Reported by Simeon Simeonov */ -UNUSUAL_DEV( 0x04da, 0x2373, 0x0000, 0x9999, - "LEICA", - "D-LUX Camera", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY | US_FL_NOT_LOCKABLE ), - -/* Most of the following entries were developed with the help of - * Shuttle/SCM directly. - */ -UNUSUAL_DEV( 0x04e6, 0x0001, 0x0200, 0x0200, - "Matshita", - "LS-120", - USB_SC_8020, USB_PR_CB, NULL, 0), - -UNUSUAL_DEV( 0x04e6, 0x0002, 0x0100, 0x0100, - "Shuttle", - "eUSCSI Bridge", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init, - US_FL_SCM_MULT_TARG ), - -#ifdef NO_SDDR09 -UNUSUAL_DEV( 0x04e6, 0x0005, 0x0100, 0x0208, - "SCM Microsystems", - "eUSB CompactFlash Adapter", - USB_SC_SCSI, USB_PR_CB, NULL, - US_FL_SINGLE_LUN), -#endif - -/* Reported by Markus Demleitner */ -UNUSUAL_DEV( 0x04e6, 0x0006, 0x0100, 0x0100, - "SCM Microsystems Inc.", - "eUSB MMC Adapter", - USB_SC_SCSI, USB_PR_CB, NULL, - US_FL_SINGLE_LUN), - -/* Reported by Daniel Nouri */ -UNUSUAL_DEV( 0x04e6, 0x0006, 0x0205, 0x0205, - "Shuttle", - "eUSB MMC Adapter", - USB_SC_SCSI, USB_PR_DEVICE, NULL, - US_FL_SINGLE_LUN), - -UNUSUAL_DEV( 0x04e6, 0x0007, 0x0100, 0x0200, - "Sony", - "Hifd", - USB_SC_SCSI, USB_PR_CB, NULL, - US_FL_SINGLE_LUN), - -UNUSUAL_DEV( 0x04e6, 0x0009, 0x0200, 0x0200, - "Shuttle", - "eUSB ATA/ATAPI Adapter", - USB_SC_8020, USB_PR_CB, NULL, 0), - -UNUSUAL_DEV( 0x04e6, 0x000a, 0x0200, 0x0200, - "Shuttle", - "eUSB CompactFlash Adapter", - USB_SC_8020, USB_PR_CB, NULL, 0), - -UNUSUAL_DEV( 0x04e6, 0x000B, 0x0100, 0x0100, - "Shuttle", - "eUSCSI Bridge", - USB_SC_SCSI, USB_PR_BULK, usb_stor_euscsi_init, - US_FL_SCM_MULT_TARG ), - -UNUSUAL_DEV( 0x04e6, 0x000C, 0x0100, 0x0100, - "Shuttle", - "eUSCSI Bridge", - USB_SC_SCSI, USB_PR_BULK, usb_stor_euscsi_init, - US_FL_SCM_MULT_TARG ), - -UNUSUAL_DEV( 0x04e6, 0x0101, 0x0200, 0x0200, - "Shuttle", - "CD-RW Device", - USB_SC_8020, USB_PR_CB, NULL, 0), - -/* Reported by Dmitry Khlystov */ -UNUSUAL_DEV( 0x04e8, 0x507c, 0x0220, 0x0220, - "Samsung", - "YP-U3", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64), - -/* Reported by Vitaly Kuznetsov */ -UNUSUAL_DEV( 0x04e8, 0x5122, 0x0000, 0x9999, - "Samsung", - "YP-CP3", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64 | US_FL_BULK_IGNORE_TAG), - -/* Added by Dmitry Artamonow */ -UNUSUAL_DEV( 0x04e8, 0x5136, 0x0000, 0x9999, - "Samsung", - "YP-Z3", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64), - -/* Entry and supporting patch by Theodore Kilgore . - * Device uses standards-violating 32-byte Bulk Command Block Wrappers and - * reports itself as "Proprietary SCSI Bulk." Cf. device entry 0x084d:0x0011. - */ -UNUSUAL_DEV( 0x04fc, 0x80c2, 0x0100, 0x0100, - "Kobian Mercury", - "Binocam DCB-132", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_BULK32), - -/* Reported by Bob Sass -- only rev 1.33 tested */ -UNUSUAL_DEV( 0x050d, 0x0115, 0x0133, 0x0133, - "Belkin", - "USB SCSI Adaptor", - USB_SC_SCSI, USB_PR_BULK, usb_stor_euscsi_init, - US_FL_SCM_MULT_TARG ), - -/* Iomega Clik! Drive - * Reported by David Chatenay - * The reason this is needed is not fully known. - */ -UNUSUAL_DEV( 0x0525, 0xa140, 0x0100, 0x0100, - "Iomega", - "USB Clik! 40", - USB_SC_8070, USB_PR_DEVICE, NULL, - US_FL_FIX_INQUIRY ), - -/* Added by Alan Stern */ -COMPLIANT_DEV(0x0525, 0xa4a5, 0x0000, 0x9999, - "Linux", - "File-backed Storage Gadget", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_CAPACITY_OK ), - -/* Yakumo Mega Image 37 - * Submitted by Stephan Fuhrmann */ -UNUSUAL_DEV( 0x052b, 0x1801, 0x0100, 0x0100, - "Tekom Technologies, Inc", - "300_CAMERA", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Another Yakumo camera. - * Reported by Michele Alzetta */ -UNUSUAL_DEV( 0x052b, 0x1804, 0x0100, 0x0100, - "Tekom Technologies, Inc", - "300_CAMERA", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Iacopo Spalletti */ -UNUSUAL_DEV( 0x052b, 0x1807, 0x0100, 0x0100, - "Tekom Technologies, Inc", - "300_CAMERA", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Yakumo Mega Image 47 - * Reported by Bjoern Paetzel */ -UNUSUAL_DEV( 0x052b, 0x1905, 0x0100, 0x0100, - "Tekom Technologies, Inc", - "400_CAMERA", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Paul Ortyl - * Note that it's similar to the device above, only different prodID */ -UNUSUAL_DEV( 0x052b, 0x1911, 0x0100, 0x0100, - "Tekom Technologies, Inc", - "400_CAMERA", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -UNUSUAL_DEV( 0x054c, 0x0010, 0x0106, 0x0450, - "Sony", - "DSC-S30/S70/S75/505V/F505/F707/F717/P8", - USB_SC_SCSI, USB_PR_DEVICE, NULL, - US_FL_SINGLE_LUN | US_FL_NOT_LOCKABLE | US_FL_NO_WP_DETECT ), - -/* Submitted by Lars Jacob - * This entry is needed because the device reports Sub=ff */ -UNUSUAL_DEV( 0x054c, 0x0010, 0x0500, 0x0610, - "Sony", - "DSC-T1/T5/H5", - USB_SC_8070, USB_PR_DEVICE, NULL, - US_FL_SINGLE_LUN ), - - -/* Reported by wim@geeks.nl */ -UNUSUAL_DEV( 0x054c, 0x0025, 0x0100, 0x0100, - "Sony", - "Memorystick NW-MS7", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_SINGLE_LUN ), - -/* Submitted by Olaf Hering, SuSE Bugzilla #49049 */ -UNUSUAL_DEV( 0x054c, 0x002c, 0x0501, 0x2000, - "Sony", - "USB Floppy Drive", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_SINGLE_LUN ), - -UNUSUAL_DEV( 0x054c, 0x002d, 0x0100, 0x0100, - "Sony", - "Memorystick MSAC-US1", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_SINGLE_LUN ), - -/* Submitted by Klaus Mueller */ -UNUSUAL_DEV( 0x054c, 0x002e, 0x0106, 0x0310, - "Sony", - "Handycam", - USB_SC_SCSI, USB_PR_DEVICE, NULL, - US_FL_SINGLE_LUN ), - -/* Submitted by Rajesh Kumble Nayak */ -UNUSUAL_DEV( 0x054c, 0x002e, 0x0500, 0x0500, - "Sony", - "Handycam HC-85", - USB_SC_UFI, USB_PR_DEVICE, NULL, - US_FL_SINGLE_LUN ), - -UNUSUAL_DEV( 0x054c, 0x0032, 0x0000, 0x9999, - "Sony", - "Memorystick MSC-U01N", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_SINGLE_LUN ), - -/* Submitted by Michal Mlotek */ -UNUSUAL_DEV( 0x054c, 0x0058, 0x0000, 0x9999, - "Sony", - "PEG N760c Memorystick", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_INQUIRY ), - -UNUSUAL_DEV( 0x054c, 0x0069, 0x0000, 0x9999, - "Sony", - "Memorystick MSC-U03", - USB_SC_UFI, USB_PR_CB, NULL, - US_FL_SINGLE_LUN ), - -/* Submitted by Nathan Babb */ -UNUSUAL_DEV( 0x054c, 0x006d, 0x0000, 0x9999, - "Sony", - "PEG Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_INQUIRY ), - -/* Submitted by Frank Engel */ -UNUSUAL_DEV( 0x054c, 0x0099, 0x0000, 0x9999, - "Sony", - "PEG Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_INQUIRY ), - -/* Submitted by Mike Alborn */ -UNUSUAL_DEV( 0x054c, 0x016a, 0x0000, 0x9999, - "Sony", - "PEG Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_INQUIRY ), - -/* Submitted by Ren Bigcren */ -UNUSUAL_DEV( 0x054c, 0x02a5, 0x0100, 0x0100, - "Sony Corp.", - "MicroVault Flash Drive", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_NO_READ_CAPACITY_16 ), - -/* floppy reports multiple luns */ -UNUSUAL_DEV( 0x055d, 0x2020, 0x0000, 0x0210, - "SAMSUNG", - "SFD-321U [FW 0C]", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_SINGLE_LUN ), - -/* We keep this entry to force the transport; firmware 3.00 and later is ok. */ -UNUSUAL_DEV( 0x057b, 0x0000, 0x0000, 0x0299, - "Y-E Data", - "Flashbuster-U", - USB_SC_DEVICE, USB_PR_CB, NULL, - US_FL_SINGLE_LUN), - -/* Reported by Johann Cardon - * This entry is needed only because the device reports - * bInterfaceClass = 0xff (vendor-specific) - */ -UNUSUAL_DEV( 0x057b, 0x0022, 0x0000, 0x9999, - "Y-E Data", - "Silicon Media R/W", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, 0), - -/* Reported by RTE */ -UNUSUAL_DEV( 0x058f, 0x6387, 0x0141, 0x0141, - "JetFlash", - "TS1GJF2A/120", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64 ), - -/* Fabrizio Fellini */ -UNUSUAL_DEV( 0x0595, 0x4343, 0x0000, 0x2210, - "Fujifilm", - "Digital Camera EX-20 DSC", - USB_SC_8070, USB_PR_DEVICE, NULL, 0 ), - -/* Reported by Andre Welter - * This antique device predates the release of the Bulk-only Transport - * spec, and if it gets a Get-Max-LUN then it requires the host to do a - * Clear-Halt on the bulk endpoints. The SINGLE_LUN flag will prevent - * us from sending the request. - */ -UNUSUAL_DEV( 0x059b, 0x0001, 0x0100, 0x0100, - "Iomega", - "ZIP 100", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_SINGLE_LUN ), - -/* Reported by */ -UNUSUAL_DEV( 0x059f, 0x0643, 0x0000, 0x0000, - "LaCie", - "DVD+-RW", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_GO_SLOW ), - -/* Submitted by Joel Bourquard - * Some versions of this device need the SubClass and Protocol overrides - * while others don't. - */ -UNUSUAL_DEV( 0x05ab, 0x0060, 0x1104, 0x1110, - "In-System", - "PyroGate External CD-ROM Enclosure (FCD-523)", - USB_SC_SCSI, USB_PR_BULK, NULL, - US_FL_NEED_OVERRIDE ), - -/* Submitted by Sven Anderson - * There are at least four ProductIDs used for iPods, so I added 0x1202 and - * 0x1204. They just need the US_FL_FIX_CAPACITY. As the bcdDevice appears - * to change with firmware updates, I changed the range to maximum for all - * iPod entries. - */ -UNUSUAL_DEV( 0x05ac, 0x1202, 0x0000, 0x9999, - "Apple", - "iPod", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY ), - -/* Reported by Avi Kivity */ -UNUSUAL_DEV( 0x05ac, 0x1203, 0x0000, 0x9999, - "Apple", - "iPod", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY ), - -UNUSUAL_DEV( 0x05ac, 0x1204, 0x0000, 0x9999, - "Apple", - "iPod", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY | US_FL_NOT_LOCKABLE ), - -UNUSUAL_DEV( 0x05ac, 0x1205, 0x0000, 0x9999, - "Apple", - "iPod", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY ), - -/* - * Reported by Tyson Vinson - * This particular productId is the iPod Nano - */ -UNUSUAL_DEV( 0x05ac, 0x120a, 0x0000, 0x9999, - "Apple", - "iPod", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY ), - -/* Reported by Dan Williams - * Option N.V. mobile broadband modems - * Ignore driver CD mode and force into modem mode by default. - */ - -/* Globetrotter HSDPA; mass storage shows up as Qualcomm for vendor */ -#if CONFIG_SUPPORT_OPTS_MS_INIT -UNUSUAL_DEV( 0x05c6, 0x1000, 0x0000, 0x9999, - "Option N.V.", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, option_ms_init, - 0), -#endif -/* Reported by Blake Matheny */ -UNUSUAL_DEV( 0x05dc, 0xb002, 0x0000, 0x0113, - "Lexar", - "USB CF Reader", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_INQUIRY ), - -/* The following two entries are for a Genesys USB to IDE - * converter chip, but it changes its ProductId depending - * on whether or not a disk or an optical device is enclosed - * They were originally reported by Alexander Oltu - * and Peter Marks - * respectively. - * - * US_FL_GO_SLOW and US_FL_MAX_SECTORS_64 added by Phil Dibowitz - * as these flags were made and hard-coded - * special-cases were pulled from scsiglue.c. - */ -UNUSUAL_DEV( 0x05e3, 0x0701, 0x0000, 0xffff, - "Genesys Logic", - "USB to IDE Optical", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_GO_SLOW | US_FL_MAX_SECTORS_64 | US_FL_IGNORE_RESIDUE ), - -UNUSUAL_DEV( 0x05e3, 0x0702, 0x0000, 0xffff, - "Genesys Logic", - "USB to IDE Disk", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_GO_SLOW | US_FL_MAX_SECTORS_64 | US_FL_IGNORE_RESIDUE ), - -/* Reported by Ben Efros */ -UNUSUAL_DEV( 0x05e3, 0x0723, 0x9451, 0x9451, - "Genesys Logic", - "USB to SATA", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_SANE_SENSE ), - -/* Reported by Hanno Boeck - * Taken from the Lycoris Kernel */ -UNUSUAL_DEV( 0x0636, 0x0003, 0x0000, 0x9999, - "Vivitar", - "Vivicam 35Xx", - USB_SC_SCSI, USB_PR_BULK, NULL, - US_FL_FIX_INQUIRY ), - -UNUSUAL_DEV( 0x0644, 0x0000, 0x0100, 0x0100, - "TEAC", - "Floppy Drive", - USB_SC_UFI, USB_PR_CB, NULL, 0 ), - -/* Reported by Darsen Lu */ -UNUSUAL_DEV( 0x066f, 0x8000, 0x0001, 0x0001, - "SigmaTel", - "USBMSC Audio Player", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY ), - -/* Reported by Daniel Kukula */ -UNUSUAL_DEV( 0x067b, 0x1063, 0x0100, 0x0100, - "Prolific Technology, Inc.", - "Prolific Storage Gadget", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_BAD_SENSE ), - -/* Reported by Rogerio Brito */ -UNUSUAL_DEV( 0x067b, 0x2317, 0x0001, 0x001, - "Prolific Technology, Inc.", - "Mass Storage Device", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_NOT_LOCKABLE ), - -/* Reported by Richard -=[]=- */ -/* Change to bcdDeviceMin (0x0100 to 0x0001) reported by - * Thomas Bartosik */ -UNUSUAL_DEV( 0x067b, 0x2507, 0x0001, 0x0100, - "Prolific Technology Inc.", - "Mass Storage Device", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY | US_FL_GO_SLOW ), - -/* Reported by Alex Butcher */ -UNUSUAL_DEV( 0x067b, 0x3507, 0x0001, 0x0101, - "Prolific Technology Inc.", - "ATAPI-6 Bridge Controller", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY | US_FL_GO_SLOW ), - -/* Submitted by Benny Sjostrand */ -UNUSUAL_DEV( 0x0686, 0x4011, 0x0001, 0x0001, - "Minolta", - "Dimage F300", - USB_SC_SCSI, USB_PR_BULK, NULL, 0 ), - -/* Reported by Miguel A. Fosas */ -UNUSUAL_DEV( 0x0686, 0x4017, 0x0001, 0x0001, - "Minolta", - "DIMAGE E223", - USB_SC_SCSI, USB_PR_DEVICE, NULL, 0 ), - -UNUSUAL_DEV( 0x0693, 0x0005, 0x0100, 0x0100, - "Hagiwara", - "Flashgate", - USB_SC_SCSI, USB_PR_BULK, NULL, 0 ), - -/* Reported by David Hamilton */ -UNUSUAL_DEV( 0x069b, 0x3004, 0x0001, 0x0001, - "Thomson Multimedia Inc.", - "RCA RD1080 MP3 Player", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY ), - -/* Reported by Adrian Pilchowiec */ -UNUSUAL_DEV( 0x071b, 0x3203, 0x0000, 0x0000, - "RockChip", - "MP3", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_NO_WP_DETECT | US_FL_MAX_SECTORS_64 | - US_FL_NO_READ_CAPACITY_16), - -/* Reported by Jean-Baptiste Onofre - * Support the following product : - * "Dane-Elec MediaTouch" - */ -UNUSUAL_DEV( 0x071b, 0x32bb, 0x0000, 0x0000, - "RockChip", - "MTP", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_NO_WP_DETECT | US_FL_MAX_SECTORS_64), - -/* Reported by Massimiliano Ghilardi - * This USB MP3/AVI player device fails and disconnects if more than 128 - * sectors (64kB) are read/written in a single command, and may be present - * at least in the following products: - * "Magnex Digital Video Panel DVP 1800" - * "MP4 AIGO 4GB SLOT SD" - * "Teclast TL-C260 MP3" - * "i.Meizu PMP MP3/MP4" - * "Speed MV8 MP4 Audio Player" - */ -UNUSUAL_DEV( 0x071b, 0x3203, 0x0100, 0x0100, - "RockChip", - "ROCK MP3", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64), - -/* Reported by Olivier Blondeau */ -UNUSUAL_DEV( 0x0727, 0x0306, 0x0100, 0x0100, - "ATMEL", - "SND1 Storage", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE), - -/* Submitted by Roman Hodek */ -UNUSUAL_DEV( 0x0781, 0x0001, 0x0200, 0x0200, - "Sandisk", - "ImageMate SDDR-05a", - USB_SC_SCSI, USB_PR_CB, NULL, - US_FL_SINGLE_LUN ), - -UNUSUAL_DEV( 0x0781, 0x0002, 0x0009, 0x0009, - "SanDisk Corporation", - "ImageMate CompactFlash USB", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY ), - -UNUSUAL_DEV( 0x0781, 0x0100, 0x0100, 0x0100, - "Sandisk", - "ImageMate SDDR-12", - USB_SC_SCSI, USB_PR_CB, NULL, - US_FL_SINGLE_LUN ), - -/* Reported by Eero Volotinen */ -UNUSUAL_DEV( 0x07ab, 0xfccd, 0x0000, 0x9999, - "Freecom Technologies", - "FHD-Classic", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY), - -UNUSUAL_DEV( 0x07af, 0x0004, 0x0100, 0x0133, - "Microtech", - "USB-SCSI-DB25", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init, - US_FL_SCM_MULT_TARG ), - -UNUSUAL_DEV( 0x07af, 0x0005, 0x0100, 0x0100, - "Microtech", - "USB-SCSI-HD50", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init, - US_FL_SCM_MULT_TARG ), - -#ifdef NO_SDDR09 -UNUSUAL_DEV( 0x07af, 0x0006, 0x0100, 0x0100, - "Microtech", - "CameraMate", - USB_SC_SCSI, USB_PR_CB, NULL, - US_FL_SINGLE_LUN ), -#endif - -/* Datafab KECF-USB / Sagatek DCS-CF / Simpletech Flashlink UCF-100 - * Only revision 1.13 tested (same for all of the above devices, - * based on the Datafab DF-UG-07 chip). Needed for US_FL_FIX_INQUIRY. - * Submitted by Marek Michalkiewicz . - * See also http://martin.wilck.bei.t-online.de/#kecf . - */ -UNUSUAL_DEV( 0x07c4, 0xa400, 0x0000, 0xffff, - "Datafab", - "KECF-USB", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_INQUIRY | US_FL_FIX_CAPACITY ), - -/* Reported by Rauch Wolke - * and augmented by binbin (Bugzilla #12882) - */ -UNUSUAL_DEV( 0x07c4, 0xa4a5, 0x0000, 0xffff, - "Simple Tech/Datafab", - "CF+SM Reader", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE | US_FL_MAX_SECTORS_64 ), - -/* Casio QV 2x00/3x00/4000/8000 digital still cameras are not conformant - * to the USB storage specification in two ways: - * - They tell us they are using transport protocol CBI. In reality they - * are using transport protocol CB. - * - They don't like the INQUIRY command. So we must handle this command - * of the SCSI layer ourselves. - * - Some cameras with idProduct=0x1001 and bcdDevice=0x1000 have - * bInterfaceProtocol=0x00 (USB_PR_CBI) while others have 0x01 (USB_PR_CB). - * So don't remove the USB_PR_CB override! - * - Cameras with bcdDevice=0x9009 require the USB_SC_8070 override. - */ -UNUSUAL_DEV( 0x07cf, 0x1001, 0x1000, 0x9999, - "Casio", - "QV DigitalCamera", - USB_SC_8070, USB_PR_CB, NULL, - US_FL_NEED_OVERRIDE | US_FL_FIX_INQUIRY ), - -/* Submitted by Oleksandr Chumachenko */ -UNUSUAL_DEV( 0x07cf, 0x1167, 0x0100, 0x0100, - "Casio", - "EX-N1 DigitalCamera", - USB_SC_8070, USB_PR_DEVICE, NULL, 0), - -/* Submitted by Hartmut Wahl */ -UNUSUAL_DEV( 0x0839, 0x000a, 0x0001, 0x0001, - "Samsung", - "Digimax 410", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_INQUIRY), - -/* Reported by Luciano Rocha */ -UNUSUAL_DEV( 0x0840, 0x0082, 0x0001, 0x0001, - "Argosy", - "Storage", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY), - -/* Reported and patched by Nguyen Anh Quynh */ -UNUSUAL_DEV( 0x0840, 0x0084, 0x0001, 0x0001, - "Argosy", - "Storage", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY), - -/* Reported by Martijn Hijdra */ -UNUSUAL_DEV( 0x0840, 0x0085, 0x0001, 0x0001, - "Argosy", - "Storage", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY), - -/* Entry and supporting patch by Theodore Kilgore . - * Flag will support Bulk devices which use a standards-violating 32-byte - * Command Block Wrapper. Here, the "DC2MEGA" cameras (several brands) with - * Grandtech GT892x chip, which request "Proprietary SCSI Bulk" support. - */ - -UNUSUAL_DEV( 0x084d, 0x0011, 0x0110, 0x0110, - "Grandtech", - "DC2MEGA", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_BULK32), - -/* Reported by - * The device reports a vendor-specific device class, requiring an - * explicit vendor/product match. - */ -UNUSUAL_DEV( 0x0851, 0x1542, 0x0002, 0x0002, - "MagicPixel", - "FW_Omega2", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, 0), - -/* Andrew Lunn - * PanDigital Digital Picture Frame. Does not like ALLOW_MEDIUM_REMOVAL - * on LUN 4. - * Note: Vend:Prod clash with "Ltd Maxell WS30 Slim Digital Camera" -*/ -UNUSUAL_DEV( 0x0851, 0x1543, 0x0200, 0x0200, - "PanDigital", - "Photo Frame", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_NOT_LOCKABLE), - -/* Submitted by Jan De Luyck */ -UNUSUAL_DEV( 0x08bd, 0x1100, 0x0000, 0x0000, - "CITIZEN", - "X1DE-USB", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_SINGLE_LUN), - -/* Submitted by Dylan Taft - * US_FL_IGNORE_RESIDUE Needed - */ -UNUSUAL_DEV( 0x08ca, 0x3103, 0x0100, 0x0100, - "AIPTEK", - "Aiptek USB Keychain MP3 Player", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE), - -/* Entry needed for flags. Moreover, all devices with this ID use - * bulk-only transport, but _some_ falsely report Control/Bulk instead. - * One example is "Trumpion Digital Research MYMP3". - * Submitted by Bjoern Brill - */ -UNUSUAL_DEV( 0x090a, 0x1001, 0x0100, 0x0100, - "Trumpion", - "t33520 USB Flash Card Controller", - USB_SC_DEVICE, USB_PR_BULK, NULL, - US_FL_NEED_OVERRIDE ), - -/* Reported by Filippo Bardelli - * The device reports a subclass of RBC, which is wrong. - */ -UNUSUAL_DEV( 0x090a, 0x1050, 0x0100, 0x0100, - "Trumpion Microelectronics, Inc.", - "33520 USB Digital Voice Recorder", - USB_SC_UFI, USB_PR_DEVICE, NULL, - 0), - -/* Trumpion Microelectronics MP3 player (felipe_alfaro@linuxmail.org) */ -UNUSUAL_DEV( 0x090a, 0x1200, 0x0000, 0x9999, - "Trumpion", - "MP3 player", - USB_SC_RBC, USB_PR_BULK, NULL, - 0 ), - -/* aeb */ -UNUSUAL_DEV( 0x090c, 0x1132, 0x0000, 0xffff, - "Feiya", - "5-in-1 Card Reader", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY ), - -/* Reported by Paul Hartman - * This card reader returns "Illegal Request, Logical Block Address - * Out of Range" for the first READ(10) after a new card is inserted. - */ -UNUSUAL_DEV( 0x090c, 0x6000, 0x0100, 0x0100, - "Feiya", - "SD/SDHC Card Reader", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_INITIAL_READ10 ), - -/* This Pentax still camera is not conformant - * to the USB storage specification: - - * - It does not like the INQUIRY command. So we must handle this command - * of the SCSI layer ourselves. - * Tested on Rev. 10.00 (0x1000) - * Submitted by James Courtier-Dutton - */ -UNUSUAL_DEV( 0x0a17, 0x0004, 0x1000, 0x1000, - "Pentax", - "Optio 2/3/400", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_INQUIRY ), - -/* These are virtual windows driver CDs, which the zd1211rw driver - * automatically converts into WLAN devices. */ -UNUSUAL_DEV( 0x0ace, 0x2011, 0x0101, 0x0101, - "ZyXEL", - "G-220F USB-WLAN Install", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_DEVICE ), - -UNUSUAL_DEV( 0x0ace, 0x20ff, 0x0101, 0x0101, - "SiteCom", - "WL-117 USB-WLAN Install", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_DEVICE ), - -/* Reported by Dan Williams - * Option N.V. mobile broadband modems - * Ignore driver CD mode and force into modem mode by default. - */ -#if CONFIG_SUPPORT_OPTS_MS_INIT -/* iCON 225 */ -UNUSUAL_DEV( 0x0af0, 0x6971, 0x0000, 0x9999, - "Option N.V.", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, option_ms_init, - 0), -#endif - -/* Reported by F. Aben - * This device (wrongly) has a vendor-specific device descriptor. - * The entry is needed so usb-storage can bind to it's mass-storage - * interface as an interface driver */ -UNUSUAL_DEV( 0x0af0, 0x7401, 0x0000, 0x0000, - "Option", - "GI 0401 SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -/* Reported by Jan Dumon - * These devices (wrongly) have a vendor-specific device descriptor. - * These entries are needed so usb-storage can bind to their mass-storage - * interface as an interface driver */ -UNUSUAL_DEV( 0x0af0, 0x7501, 0x0000, 0x0000, - "Option", - "GI 0431 SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0af0, 0x7701, 0x0000, 0x0000, - "Option", - "GI 0451 SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0af0, 0x7706, 0x0000, 0x0000, - "Option", - "GI 0451 SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0af0, 0x7901, 0x0000, 0x0000, - "Option", - "GI 0452 SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0af0, 0x7A01, 0x0000, 0x0000, - "Option", - "GI 0461 SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0af0, 0x7A05, 0x0000, 0x0000, - "Option", - "GI 0461 SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0af0, 0x8300, 0x0000, 0x0000, - "Option", - "GI 033x SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0af0, 0x8302, 0x0000, 0x0000, - "Option", - "GI 033x SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0af0, 0x8304, 0x0000, 0x0000, - "Option", - "GI 033x SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0af0, 0xc100, 0x0000, 0x0000, - "Option", - "GI 070x SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0af0, 0xd057, 0x0000, 0x0000, - "Option", - "GI 1505 SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0af0, 0xd058, 0x0000, 0x0000, - "Option", - "GI 1509 SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0af0, 0xd157, 0x0000, 0x0000, - "Option", - "GI 1515 SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0af0, 0xd257, 0x0000, 0x0000, - "Option", - "GI 1215 SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0af0, 0xd357, 0x0000, 0x0000, - "Option", - "GI 1505 SD-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0 ), - -/* Reported by Namjae Jeon */ -UNUSUAL_DEV(0x0bc2, 0x2300, 0x0000, 0x9999, - "Seagate", - "Portable HDD", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_WRITE_CACHE), - -/* Reported by Ben Efros */ -UNUSUAL_DEV( 0x0bc2, 0x3010, 0x0000, 0x0000, - "Seagate", - "FreeAgent Pro", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_SANE_SENSE ), - -UNUSUAL_DEV( 0x0d49, 0x7310, 0x0000, 0x9999, - "Maxtor", - "USB to SATA", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_SANE_SENSE), - -/* - * Pete Zaitcev , bz#164688. - * The device blatantly ignores LUN and returns 1 in GetMaxLUN. - */ -UNUSUAL_DEV( 0x0c45, 0x1060, 0x0100, 0x0100, - "Unknown", - "Unknown", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_SINGLE_LUN ), - -/* Submitted by Joris Struyve */ -UNUSUAL_DEV( 0x0d96, 0x410a, 0x0001, 0xffff, - "Medion", - "MD 7425", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_INQUIRY), - -/* - * Entry for Jenoptik JD 5200z3 - * - * email: car.busse@gmx.de - */ -UNUSUAL_DEV( 0x0d96, 0x5200, 0x0001, 0x0200, - "Jenoptik", - "JD 5200 z3", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_FIX_INQUIRY), - -/* Reported by Jason Johnston */ -UNUSUAL_DEV( 0x0dc4, 0x0073, 0x0000, 0x0000, - "Macpower Technology Co.LTD.", - "USB 2.0 3.5\" DEVICE", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY), - -/* Reported by Lubomir Blaha - * I _REALLY_ don't know what 3rd, 4th number and all defines mean, but this - * works for me. Can anybody correct these values? (I able to test corrected - * version.) - */ -UNUSUAL_DEV( 0x0dd8, 0x1060, 0x0000, 0xffff, - "Netac", - "USB-CF-Card", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_INQUIRY ), - -/* Reported by Edward Chapman (taken from linux-usb mailing list) - Netac OnlyDisk Mini U2CV2 512MB USB 2.0 Flash Drive */ -UNUSUAL_DEV( 0x0dd8, 0xd202, 0x0000, 0x9999, - "Netac", - "USB Flash Disk", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - - -/* Patch by Stephan Walter - * I don't know why, but it works... */ -UNUSUAL_DEV( 0x0dda, 0x0001, 0x0012, 0x0012, - "WINWARD", - "Music Disk", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Ian McConnell */ -UNUSUAL_DEV( 0x0dda, 0x0301, 0x0012, 0x0012, - "PNP_MP3", - "PNP_MP3 PLAYER", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Jim McCloskey */ -UNUSUAL_DEV( 0x0e21, 0x0520, 0x0100, 0x0100, - "Cowon Systems", - "iAUDIO M5", - USB_SC_DEVICE, USB_PR_BULK, NULL, - US_FL_NEED_OVERRIDE ), - -/* Submitted by Antoine Mairesse */ -UNUSUAL_DEV( 0x0ed1, 0x6660, 0x0100, 0x0300, - "USB", - "Solid state disk", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_INQUIRY ), - -/* Submitted by Daniel Drake - * Reported by dayul on the Gentoo Forums */ -UNUSUAL_DEV( 0x0ea0, 0x2168, 0x0110, 0x0110, - "Ours Technology", - "Flash Disk", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Rastislav Stanik */ -UNUSUAL_DEV( 0x0ea0, 0x6828, 0x0110, 0x0110, - "USB", - "Flash Disk", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Benjamin Schiller - * It is also sold by Easylite as DJ 20 */ -UNUSUAL_DEV( 0x0ed1, 0x7636, 0x0103, 0x0103, - "Typhoon", - "My DJ 1820", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE | US_FL_GO_SLOW | US_FL_MAX_SECTORS_64), - -/* Patch by Leonid Petrov mail at lpetrov.net - * Reported by Robert Spitzenpfeil - * http://www.qbik.ch/usb/devices/showdev.php?id=1705 - * Updated to 103 device by MJ Ray mjr at phonecoop.coop - */ -UNUSUAL_DEV( 0x0f19, 0x0103, 0x0100, 0x0100, - "Oracom Co., Ltd", - "ORC-200M", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* David Kuehling : - * for MP3-Player AVOX WSX-300ER (bought in Japan). Reports lots of SCSI - * errors when trying to write. - */ -UNUSUAL_DEV( 0x0f19, 0x0105, 0x0100, 0x0100, - "C-MEX", - "A-VOX", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Submitted by Nick Holloway */ -UNUSUAL_DEV( 0x0f88, 0x042e, 0x0100, 0x0100, - "VTech", - "Kidizoom", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY ), - -/* Reported by Moritz Moeller-Herrmann */ -UNUSUAL_DEV( 0x0fca, 0x8004, 0x0201, 0x0201, - "Research In Motion", - "BlackBerry Bold 9000", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64 ), - -/* Reported by Michael Stattmann */ -UNUSUAL_DEV( 0x0fce, 0xd008, 0x0000, 0x0000, - "Sony Ericsson", - "V800-Vodafone 802", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_NO_WP_DETECT ), - -/* Reported by The Solutor */ -UNUSUAL_DEV( 0x0fce, 0xd0e1, 0x0000, 0x0000, - "Sony Ericsson", - "MD400", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_DEVICE), - -/* Reported by Jan Mate - * and by Soeren Sonnenburg */ -UNUSUAL_DEV( 0x0fce, 0xe030, 0x0000, 0x0000, - "Sony Ericsson", - "P990i", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY | US_FL_IGNORE_RESIDUE ), - -/* Reported by Emmanuel Vasilakis */ -UNUSUAL_DEV( 0x0fce, 0xe031, 0x0000, 0x0000, - "Sony Ericsson", - "M600i", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE | US_FL_FIX_CAPACITY ), - -/* Reported by Ricardo Barberis */ -UNUSUAL_DEV( 0x0fce, 0xe092, 0x0000, 0x0000, - "Sony Ericsson", - "P1i", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Kevin Cernekee - * Tested on hardware version 1.10. - * Entry is needed only for the initializer function override. - * Devices with bcd > 110 seem to not need it while those - * with bcd < 110 appear to need it. - */ -UNUSUAL_DEV( 0x1019, 0x0c55, 0x0000, 0x0110, - "Desknote", - "UCR-61S2B", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_ucr61s2b_init, - 0 ), - -UNUSUAL_DEV( 0x1058, 0x0704, 0x0000, 0x9999, - "Western Digital", - "External HDD", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_SANE_SENSE), - -/* Reported by Namjae Jeon */ -UNUSUAL_DEV(0x1058, 0x070a, 0x0000, 0x9999, - "Western Digital", - "My Passport HDD", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_WRITE_CACHE), - -/* Reported by Fabio Venturi - * The device reports a vendor-specific bDeviceClass. - */ -UNUSUAL_DEV( 0x10d6, 0x2200, 0x0100, 0x0100, - "Actions Semiconductor", - "Mtp device", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - 0), - -/* Reported by Pascal Terjan - * Ignore driver CD mode and force into modem mode by default. - */ -#if CONFIG_SUPPORT_OPTS_MS_INIT -UNUSUAL_DEV( 0x1186, 0x3e04, 0x0000, 0x0000, - "D-Link", - "USB Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, option_ms_init, US_FL_IGNORE_DEVICE), -#endif -/* Reported by Kevin Lloyd - * Entry is needed for the initializer function override, - * which instructs the device to load as a modem - * device. - */ -#if CONFIG_SUPPORT_SERRIA_MS_INIT -UNUSUAL_DEV( 0x1199, 0x0fff, 0x0000, 0x9999, - "Sierra Wireless", - "USB MMC Storage", - USB_SC_DEVICE, USB_PR_DEVICE, sierra_ms_init, - 0), -#endif -/* Reported by Jaco Kroon - * The usb-storage module found on the Digitech GNX4 (and supposedly other - * devices) misbehaves and causes a bunch of invalid I/O errors. - */ -UNUSUAL_DEV( 0x1210, 0x0003, 0x0100, 0x0100, - "Digitech HMG", - "DigiTech Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by fangxiaozhi - * This brings the HUAWEI data card devices into multi-port mode - */ -UNUSUAL_DEV( 0x12d1, 0x1001, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1004, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1401, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1402, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1403, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1404, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1405, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1406, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1407, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1408, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1409, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x140A, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x140B, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x140C, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x140D, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x140E, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x140F, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1410, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1411, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1412, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1413, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1414, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1415, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1416, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1417, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1418, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1419, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x141A, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x141B, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x141C, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x141D, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x141E, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x141F, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1420, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1421, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1422, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1423, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1424, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1425, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1426, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1427, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1428, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1429, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x142A, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x142B, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x142C, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x142D, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x142E, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x142F, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1430, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1431, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1432, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1433, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1434, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1435, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1436, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1437, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1438, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x1439, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x143A, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x143B, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x143C, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x143D, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x143E, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), -UNUSUAL_DEV( 0x12d1, 0x143F, 0x0000, 0x0000, - "HUAWEI MOBILE", - "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, - 0), - -/* Reported by Vilius Bilinkevicius */ -UNUSUAL_DEV( 0x1370, 0x6828, 0x0110, 0x0110, - "SWISSBIT", - "Black Silver", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Qinglin Ye */ -UNUSUAL_DEV( 0x13fe, 0x3600, 0x0100, 0x0100, - "Kingston", - "DT 101 G2", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_BULK_IGNORE_TAG ), - -/* Reported by Francesco Foresti */ -UNUSUAL_DEV( 0x14cd, 0x6600, 0x0201, 0x0201, - "Super Top", - "IDE DEVICE", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Michael Büsch */ -UNUSUAL_DEV( 0x152d, 0x0567, 0x0114, 0x0114, - "JMicron", - "USB to ATA/ATAPI Bridge", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_BROKEN_FUA ), - -/* Reported by Alexandre Oliva - * JMicron responds to USN and several other SCSI ioctls with a - * residue that causes subsequent I/O requests to fail. */ -UNUSUAL_DEV( 0x152d, 0x2329, 0x0100, 0x0100, - "JMicron", - "USB to ATA/ATAPI Bridge", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE | US_FL_SANE_SENSE ), - -/* Reported by Robert Schedel - * Note: this is a 'super top' device like the above 14cd/6600 device */ -UNUSUAL_DEV( 0x1652, 0x6600, 0x0201, 0x0201, - "Teac", - "HD-35PUK-B", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Oliver Neukum */ -UNUSUAL_DEV( 0x174c, 0x55aa, 0x0100, 0x0100, - "ASMedia", - "AS2105", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_NEEDS_CAP16), - -/* Reported by Jesse Feddema */ -UNUSUAL_DEV( 0x177f, 0x0400, 0x0000, 0x0000, - "Yarvik", - "PMP400", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_BULK_IGNORE_TAG | US_FL_MAX_SECTORS_64 ), - -/* Reported by Hans de Goede - * These Appotech controllers are found in Picture Frames, they provide a - * (buggy) emulation of a cdrom drive which contains the windows software - * Uploading of pictures happens over the corresponding /dev/sg device. */ -UNUSUAL_DEV( 0x1908, 0x1315, 0x0000, 0x0000, - "BUILDWIN", - "Photo Frame", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_BAD_SENSE ), -UNUSUAL_DEV( 0x1908, 0x1320, 0x0000, 0x0000, - "BUILDWIN", - "Photo Frame", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_BAD_SENSE ), -UNUSUAL_DEV( 0x1908, 0x3335, 0x0200, 0x0200, - "BUILDWIN", - "Photo Frame", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_NO_READ_DISC_INFO ), - -/* Reported by Sven Geggus - * This encrypted pen drive returns bogus data for the initial READ(10). - */ -UNUSUAL_DEV( 0x1b1c, 0x1ab5, 0x0200, 0x0200, - "Corsair", - "Padlock v2", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_INITIAL_READ10 ), - -/* Patch by Richard Schütz - * This external hard drive enclosure uses a JMicron chip which - * needs the US_FL_IGNORE_RESIDUE flag to work properly. */ -UNUSUAL_DEV( 0x1e68, 0x001b, 0x0000, 0x0000, - "TrekStor GmbH & Co. KG", - "DataStation maxi g.u", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE | US_FL_SANE_SENSE ), - -/* Reported by Jasper Mackenzie */ -UNUSUAL_DEV( 0x1e74, 0x4621, 0x0000, 0x0000, - "Coby Electronics", - "MP3 Player", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_BULK_IGNORE_TAG | US_FL_MAX_SECTORS_64 ), - -UNUSUAL_DEV( 0x2116, 0x0320, 0x0001, 0x0001, - "ST", - "2A", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY), - -/* patch submitted by Davide Perini - * and Renato Perini - */ -UNUSUAL_DEV( 0x22b8, 0x3010, 0x0001, 0x0001, - "Motorola", - "RAZR V3x", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY | US_FL_IGNORE_RESIDUE ), - -/* - * Patch by Constantin Baranov - * Report by Andreas Koenecke. - * Motorola ROKR Z6. - */ -UNUSUAL_DEV( 0x22b8, 0x6426, 0x0101, 0x0101, - "Motorola", - "MSnc.", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_FIX_INQUIRY | US_FL_FIX_CAPACITY | US_FL_BULK_IGNORE_TAG), - -/* Reported by Radovan Garabik */ -UNUSUAL_DEV( 0x2735, 0x100b, 0x0000, 0x9999, - "MPIO", - "HS200", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_GO_SLOW ), - -/* Reported by Frederic Marchal - * Mio Moov 330 - */ -UNUSUAL_DEV( 0x3340, 0xffff, 0x0000, 0x0000, - "Mitac", - "Mio DigiWalker USB Sync", - USB_SC_DEVICE,USB_PR_DEVICE,NULL, - US_FL_MAX_SECTORS_64 ), - -/* Reported by Andrey Rahmatullin */ -UNUSUAL_DEV( 0x4102, 0x1020, 0x0100, 0x0100, - "iRiver", - "MP3 T10", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_IGNORE_RESIDUE ), - -/* Reported by Sergey Pinaev */ -UNUSUAL_DEV( 0x4102, 0x1059, 0x0000, 0x0000, - "iRiver", - "P7K", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_MAX_SECTORS_64 ), - -/* - * David Härdeman - * The key makes the SCSI stack print confusing (but harmless) messages - */ -UNUSUAL_DEV( 0x4146, 0xba01, 0x0100, 0x0100, - "Iomega", - "Micro Mini 1GB", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NOT_LOCKABLE ), - -/* - * Nick Bowler - * SCSI stack spams (otherwise harmless) error messages. - */ -UNUSUAL_DEV( 0xc251, 0x4003, 0x0100, 0x0100, - "Keil Software, Inc.", - "V2M MotherBoard", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_NOT_LOCKABLE), - -/* Reported by Andrew Simmons */ -UNUSUAL_DEV( 0xed06, 0x4500, 0x0001, 0x0001, - "DataStor", - "USB4500 FW1.04", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, - US_FL_CAPACITY_HEURISTICS), - -/* Reported by Alessio Treglia */ -UNUSUAL_DEV( 0xed10, 0x7636, 0x0001, 0x0001, - "TGE", - "Digital MP3 Audio Player", - USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NOT_LOCKABLE ), - -#if 0 -/* Unusual uas devices */ -#if IS_ENABLED(CONFIG_USB_UAS) -#include "unusual_uas.h" -#endif -#endif -/* Control/Bulk transport for all SubClass values */ -USUAL_DEV(USB_SC_RBC, USB_PR_CB), -USUAL_DEV(USB_SC_8020, USB_PR_CB), -USUAL_DEV(USB_SC_QIC, USB_PR_CB), -USUAL_DEV(USB_SC_UFI, USB_PR_CB), -USUAL_DEV(USB_SC_8070, USB_PR_CB), -USUAL_DEV(USB_SC_SCSI, USB_PR_CB), - -/* Control/Bulk/Interrupt transport for all SubClass values */ -USUAL_DEV(USB_SC_RBC, USB_PR_CBI), -USUAL_DEV(USB_SC_8020, USB_PR_CBI), -USUAL_DEV(USB_SC_QIC, USB_PR_CBI), -USUAL_DEV(USB_SC_UFI, USB_PR_CBI), -USUAL_DEV(USB_SC_8070, USB_PR_CBI), -USUAL_DEV(USB_SC_SCSI, USB_PR_CBI), - -/* Bulk-only transport for all SubClass values */ -USUAL_DEV(USB_SC_RBC, USB_PR_BULK), -USUAL_DEV(USB_SC_8020, USB_PR_BULK), -USUAL_DEV(USB_SC_QIC, USB_PR_BULK), -USUAL_DEV(USB_SC_UFI, USB_PR_BULK), -USUAL_DEV(USB_SC_8070, USB_PR_BULK), -USUAL_DEV(USB_SC_SCSI, USB_PR_BULK), - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/unusual_usbat.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/unusual_usbat.h deleted file mode 100644 index fe563d0..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/unusual_usbat.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef __UNUSUAL_USBAT_H -#define __UNUSUAL_USBAT_H - -#if defined(CONFIG_USB_STORAGE_USBAT) || \ - defined(CONFIG_USB_STORAGE_USBAT_MODULE) - -UNUSUAL_DEV( 0x03f0, 0x0207, 0x0001, 0x0001, - "HP", - "CD-Writer+ 8200e", - USB_SC_8070, USB_PR_USBAT, init_usbat_cd, 0), - -UNUSUAL_DEV( 0x03f0, 0x0307, 0x0001, 0x0001, - "HP", - "CD-Writer+ CD-4e", - USB_SC_8070, USB_PR_USBAT, init_usbat_cd, 0), - -UNUSUAL_DEV( 0x04e6, 0x1010, 0x0000, 0x9999, - "Shuttle/SCM", - "USBAT-02", - USB_SC_SCSI, USB_PR_USBAT, init_usbat_flash, - US_FL_SINGLE_LUN), - -UNUSUAL_DEV( 0x0781, 0x0005, 0x0005, 0x0005, - "Sandisk", - "ImageMate SDDR-05b", - USB_SC_SCSI, USB_PR_USBAT, init_usbat_flash, - US_FL_SINGLE_LUN), - -#endif /* defined(CONFIG_USB_STORAGE_USBAT) || ... */ - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_debug.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_debug.h deleted file mode 100644 index 1804b86..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_debug.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _US_DEBUG_H_ -#define _US_DEBUG_H_ - -#include "diag.h" - - -#define US_DEBUG 0 -#define US_DRIVER "US_DRIVER" - -#if US_DEBUG -#define US_INFO(fmt, args...) DBG_8195A("\n\r[%s]%s: " fmt, US_DRIVER, __FUNCTION__, ## args) -#define US_ERR(fmt, args...) DBG_8195A("\n\r[%s]%s: " fmt, US_DRIVER,__FUNCTION__, ## args) -#define US_WARN(fmt, args...) DBG_8195A("\n\r[%s]%s: " fmt, US_DRIVER,__FUNCTION__, ## args) -#define FUN_ENTER DBG_8195A("\n\r[%s]%s ==>\n", US_DRIVER,__FUNCTION__) -#define FUN_EXIT DBG_8195A("\n\r[%s]%s <==\n", US_DRIVER,__FUNCTION__) -#define FUN_TRACE DBG_8195A("\n\r[%s]%s:%d \n", US_DRIVER,__FUNCTION__, __LINE__) -#else -#define US_INFO(fmt, args...) -#define US_ERR(fmt, args...) DBG_8195A("\n\r[%s]%s: " fmt, US_DRIVER,__FUNCTION__, ## args) -#define US_WARN(fmt, args...) -#define FUN_ENTER -#define FUN_EXIT -#define FUN_TRACE -#endif - -#endif /* _US_DEBUG_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_initializers.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_initializers.h deleted file mode 100644 index 484866a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_initializers.h +++ /dev/null @@ -1,14 +0,0 @@ -#include "usb.h" -#include "transport.h" - -/* This places the Shuttle/SCM USB<->SCSI bridge devices in multi-target - * mode */ -int usb_stor_euscsi_init(struct us_data *us); - -/* This function is required to activate all four slots on the UCR-61S2B - * flash reader */ -int usb_stor_ucr61s2b_init(struct us_data *us); - -/* This places the HUAWEI E220 devices in multi-port mode */ -int usb_stor_huawei_e220_init(struct us_data *us); - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_intf.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_intf.h deleted file mode 100644 index aad1338..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_intf.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef __US_INTF_H_ -#define __US_INTF_H_ - -#include "basic_types.h" - -typedef enum -{ - MSC_OK = 0, - MSC_NOT_READY, - MSC_W_PROTECT, - MSC_ERROR, -}MSC_RESULT; - -extern MSC_RESULT us_init(void); -extern MSC_RESULT us_isready (void); - -extern MSC_RESULT us_getStatus(void); -extern MSC_RESULT us_getmaxlun (u8* lun_num); -extern MSC_RESULT us_unitisready (u8 lun); - -extern MSC_RESULT us_inquiry (u8 *pbuf); - -extern MSC_RESULT us_getcap(u32 *last_blk_addr, u32 *block_size); - -extern MSC_RESULT us_read_blocks( u8 *pbuf, u32 sector, u32 count); - -extern MSC_RESULT us_write_blocks( const u8 *pbuf, u32 sector, u32 count); - - -// indicate usb storage driver status -extern bool USB_STORAGE_READY; - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_os_wrap_via_osdep_api.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_os_wrap_via_osdep_api.h deleted file mode 100644 index a62f865..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_os_wrap_via_osdep_api.h +++ /dev/null @@ -1,313 +0,0 @@ -/* - * umsc_os_wrap_via_osdep_api.h - * - * Created on: Sep 5, 2014 - * Author: jimmysqf - */ - -#ifndef US_OS_WRAP_VIA_OSDEP_API_H_ -#define US_OS_WRAP_VIA_OSDEP_API_H_ - -#include "basic_types.h" -#include "osdep_api.h" - -#define GFP_KERNEL 1 -#define GFP_ATOMIC 1 - - -typedef unsigned int gfp_t; - -/* misc items */ -#ifndef ssize_t -#define ssize_t SSIZE_T -#endif -#ifndef size_t -#define size_t SIZE_T -#endif - -#ifndef __user -#define __user -#endif - -#ifndef loff_t -#define loff_t long -#endif -#ifndef __u8 -#define __u8 u8 -#endif -#ifndef __u16 -#define __u16 u16 -#endif -#ifndef __u32 -#define __u32 u32 -#endif -#ifndef __u64 -#define __u64 u64 -#endif -#ifndef __s8 -#define __s8 s8 -#endif -#ifndef __s16 -#define __s16 s16 -#endif -#ifndef __s32 -#define __s32 s32 -#endif -#ifndef __s64 -#define __s64 s64 -#endif - -typedef __u16 __le16; -typedef __u16 __be16; -typedef __u32 __le32; -typedef __u32 __be32; -typedef __u64 __le64; -typedef __u64 __be64; -typedef __u16 __sum16; -typedef __u32 __wsum; - - -#ifndef cpu_to_le32 - -#define cpu_to_le32(x) rtk_cpu_to_le32(x) -#endif -#ifndef le32_to_cpu - -#define le32_to_cpu(x) rtk_le32_to_cpu(x) -#endif -#ifndef cpu_to_le16 - -#define cpu_to_le16(x) rtk_cpu_to_le16(x) -#endif -#ifndef le16_to_cpu - -#define le16_to_cpu(x) rtk_le16_to_cpu(x) -#endif -#ifndef cpu_to_be32 - -#define cpu_to_be32(x) rtk_cpu_to_be32(x) -#endif -#ifndef be32_to_cpu - -#define be32_to_cpu(x) rtk_be32_to_cpu(x) -#endif -#ifndef cpu_to_be16 - -#define cpu_to_be16(x) rtk_cpu_to_be16(x) -#endif -#ifndef be16_to_cpu - -#define be16_to_cpu(x) rtk_be16_to_cpu(x) -#endif - -#ifndef DIV_ROUND_UP -#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) -#endif -#ifndef BITS_PER_LONG -#define BITS_PER_LONG (32) -#endif -#ifndef BITS_PER_LONG_LONG -#define BITS_PER_LONG_LONG (32) -#endif -#ifndef BIT -#define BIT(nr) (1UL << (nr)) -#endif -#ifndef BIT_ULL -#define BIT_ULL(nr) (1ULL << (nr)) -#endif -#ifndef BIT_MASK -#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG)) -#endif -#ifndef BIT_WORD -#define BIT_WORD(nr) ((nr) / BITS_PER_LONG) -#endif -#ifndef BIT_ULL_MASK -#define BIT_ULL_MASK(nr) (1ULL << ((nr) % BITS_PER_LONG_LONG)) -#endif -#ifndef BIT_ULL_WORD -#define BIT_ULL_WORD(nr) ((nr) / BITS_PER_LONG_LONG) -#endif -#ifndef BITS_PER_BYTE -#define BITS_PER_BYTE (8) -#endif -#ifndef BITS_TO_LONGS -#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) -#endif - -#ifndef min -#define min(x, y) ((x) < (y) ? (x) : (y)) -#endif -#ifndef max -#define max(x, y) ((x) > (y) ? (x) : (y)) -#endif - -#ifndef min_t -#define min_t(type, x, y) ({ \ - type __min1 = (x); \ - type __min2 = (y); \ - __min1 < __min2 ? __min1 : __min2; }) -#endif -#ifndef max_t -#define max_t(type, x, y) ({ \ - type __max1 = (x); \ - type __max2 = (y); \ - __max1 > __max2 ? __max1 : __max2; }) -#endif - -/** - * container_of - cast a member of a structure out to the containing structure - * @p(ptr): the pointer to the member. - * @t(type): the type of the container struct this is embedded in. - * @m(member): the name of the member within the struct. - * - */ -#ifndef container_of - #define container_of(ptr, type, member) \ - ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member))) -#endif - -/** - * test_bit - Determine whether a bit is set - * @nr: bit number to test - * @addr: Address to start counting from - */ -static inline int test_bit(int nr, const volatile unsigned long *addr) -{ - return ((1UL << (nr & 31)) & (addr[nr >> 5])) != 0; -} -/** -* set_bit - Atomically set a bit in memory -* @nr: the bit to set -* @addr: the address to start counting from -* -* This function is atomic and may not be reordered. See __set_bit() -* if you do not require the atomic guarantees. -* -* Note: there are no guarantees that this function will not be reordered -* on non x86 architectures, so if you are writing portable code, -* make sure not to rely on its reordering guarantees. -* -* Note that @nr may be almost arbitrarily large; this function is not -* restricted to acting on a single-word quantity. -*/ -static inline void set_bit(int nr, volatile unsigned long *addr) -{ - unsigned long mask = BIT_MASK(nr); - unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); - - SaveAndCli(); - *p |= mask; - RestoreFlags(); -} - -/** -* clear_bit - Clears a bit in memory -* @nr: Bit to clear -* @addr: Address to start counting from -* -* clear_bit() is atomic and may not be reordered. However, it does -* not contain a memory barrier, so if it is used for locking purposes, -* you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit() -* in order to ensure changes are visible on other processors. -*/ -static inline void clear_bit(int nr, volatile unsigned long *addr) -{ - unsigned long mask = BIT_MASK(nr); - unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); - - SaveAndCli(); - *p &= ~mask; - RestoreFlags(); -} - -/** -* change_bit - Toggle a bit in memory -* @nr: Bit to change -* @addr: Address to start counting from -* -* change_bit() is atomic and may not be reordered. It may be -* reordered on other architectures than x86. -* Note that @nr may be almost arbitrarily large; this function is not -* restricted to acting on a single-word quantity. -*/ -static inline void change_bit(int nr, volatile unsigned long *addr) -{ - unsigned long mask = BIT_MASK(nr); - unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); - - SaveAndCli(); - *p ^= mask; - RestoreFlags(); -} - -/** -* test_and_set_bit - Set a bit and return its old value -* @nr: Bit to set -* @addr: Address to count from -* -* This operation is atomic and cannot be reordered. -* It may be reordered on other architectures than x86. -* It also implies a memory barrier. -*/ -static inline int test_and_set_bit(int nr, volatile unsigned long *addr) -{ - unsigned long mask = BIT_MASK(nr); - unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); - unsigned long old; - - SaveAndCli(); - old = *p; - *p = old | mask; - RestoreFlags(); - return (old & mask) != 0; -} - -/** -* test_and_clear_bit - Clear a bit and return its old value -* @nr: Bit to clear -* @addr: Address to count from -* -* This operation is atomic and cannot be reordered. -* It can be reorderdered on other architectures other than x86. -* It also implies a memory barrier. -*/ -static inline int test_and_clear_bit(int nr, volatile unsigned long *addr) -{ - unsigned long mask = BIT_MASK(nr); - unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); - unsigned long old; - - SaveAndCli(); - old = *p; - *p = old & ~mask; - RestoreFlags(); - - return (old & mask) != 0; -} -/** -* test_and_change_bit - Change a bit and return its old value -* @nr: Bit to change -* @addr: Address to count from -* -* This operation is atomic and cannot be reordered. -* It also implies a memory barrier. -*/ -static inline int test_and_change_bit(int nr, volatile unsigned long *addr) -{ - unsigned long mask = BIT_MASK(nr); - unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); - unsigned long old; - - SaveAndCli(); - old = *p; - *p = old ^ mask; - RestoreFlags(); - - return (old & mask) != 0; -} - -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) -#endif - -#endif /* US_OS_WRAP_VIA_OSDEP_API_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_scsi.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_scsi.h deleted file mode 100644 index e3a459a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_scsi.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef _US_SCSI_H -#define _US_SCSI_H - -/** - * define transfer length - */ -#define TRANS_LEN_READ_10 512 -#define TRANS_LEN_WRITE_10 512 -#define TRANS_LEN_INQUIRY 36 -#define TRANS_LEN_TEST_UNIT_READY 0 -#define TRANS_LEN_READ_CAPACITY_10 8 -#define TRANS_LEN_READ_CAPACITY_16 12 -#define TRANS_LEN_REQUEST_SENSE 18 -#define TRANS_LEN_MODE_SENSE 192 - -extern int scsi_cmnd_execute(char cmnd, unsigned char * _buff, - unsigned long _sector, unsigned int _count); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_strings.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_strings.h deleted file mode 100644 index d452425..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_strings.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _US_STRINGS_H -#define _US_STRINGS_H -/* description of the sense key values */ -static const char * const snstext[] = { - "No Sense", /* 0: There is no sense information */ - "Recovered Error", /* 1: The last command completed successfully - but used error correction */ - "Not Ready", /* 2: The addressed target is not ready */ - "Medium Error", /* 3: Data error detected on the medium */ - "Hardware Error", /* 4: Controller or device failure */ - "Illegal Request", /* 5: Error in request */ - "Unit Attention", /* 6: Removable medium was changed, or - the target has been reset, or ... */ - "Data Protect", /* 7: Access to the data is blocked */ - "Blank Check", /* 8: Reached unexpected written or unwritten - region of the medium */ - "Vendor Specific(9)", - "Copy Aborted", /* A: COPY or COMPARE was aborted */ - "Aborted Command", /* B: The target aborted the command */ - "Equal", /* C: A SEARCH DATA command found data equal, - reserved in SPC-4 rev 36 */ - "Volume Overflow", /* D: Medium full with still data to be written */ - "Miscompare", /* E: Source data and data on the medium - do not agree */ - "Completed", /* F: command completed sense data reported, - may occur for successful command */ -}; -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_transport.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_transport.h deleted file mode 100644 index 60674a5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_transport.h +++ /dev/null @@ -1,67 +0,0 @@ -/* Driver for USB Mass Storage compliant devices - * Transport Functions Header File - */ - -#ifndef _US_TRANSPORT_H_ -#define _US_TRANSPORT_H_ - -/* - * usb_stor_bulk_transfer_xxx() return codes, in order of severity - */ - -#define USB_STOR_XFER_GOOD 0 /* good transfer */ -#define USB_STOR_XFER_SHORT 1 /* transferred less than expected */ -#define USB_STOR_XFER_STALLED 2 /* endpoint stalled */ -#define USB_STOR_XFER_LONG 3 /* device tried to send too much */ -#define USB_STOR_XFER_ERROR 4 /* transfer died in the middle */ - -/* - * Transport return codes - */ - -#define USB_STOR_TRANSPORT_GOOD 0 /* Transport good, command good */ -#define USB_STOR_TRANSPORT_FAILED 1 /* Transport good, command failed */ -#define USB_STOR_TRANSPORT_NO_SENSE 2 /* Command failed, no auto-sense */ -#define USB_STOR_TRANSPORT_ERROR 3 /* Transport bad (i.e. device dead) */ - -/* - * We used to have USB_STOR_XFER_ABORTED and USB_STOR_TRANSPORT_ABORTED - * return codes. But now the transport and low-level transfer routines - * treat an abort as just another error (-ENOENT for a cancelled URB). - * It is up to the invoke_transport() function to test for aborts and - * distinguish them from genuine communication errors. - */ - -/* - * CBI accept device specific command - */ -#define US_CBI_ADSC 0 - -//extern int usb_stor_CB_transport(struct scsi_cmnd *, struct us_data*); -//extern int usb_stor_CB_reset(struct us_data*); -// -//extern int usb_stor_Bulk_transport(struct scsi_cmnd *, struct us_data*); -//extern int usb_stor_Bulk_max_lun(struct us_data*); -//extern int usb_stor_Bulk_reset(struct us_data*); -// -//extern void usb_stor_invoke_transport(struct scsi_cmnd *, struct us_data*); -//extern void usb_stor_stop_transport(struct us_data*); - -//extern int usb_stor_control_msg(struct us_data *us, unsigned int pipe, -// u8 request, u8 requesttype, u16 value, u16 index, -// void *data, u16 size, int timeout); -//extern int usb_stor_clear_halt(struct us_data *us, unsigned int pipe); -// -//extern int usb_stor_ctrl_transfer(struct us_data *us, unsigned int pipe, -// u8 request, u8 requesttype, u16 value, u16 index, -// void *data, u16 size); -//extern int usb_stor_bulk_transfer_buf(struct us_data *us, unsigned int pipe, -// void *buf, unsigned int length, unsigned int *act_len); -//extern int usb_stor_bulk_transfer_sg(struct us_data *us, unsigned int pipe, -// void *buf, unsigned int length, int use_sg, int *residual); -//extern int usb_stor_bulk_srb(struct us_data* us, unsigned int pipe, -// struct scsi_cmnd* srb); -// -//extern int usb_stor_port_reset(struct us_data *us); -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_usb.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_usb.h deleted file mode 100644 index 326006d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_usb.h +++ /dev/null @@ -1,245 +0,0 @@ -#ifndef _US_USB_H_ -#define _US_USB_H_ - -#include "usb.h" -#include "us_os_wrap_via_osdep_api.h" -#include "us_debug.h" -//#include "sg.h" - -struct us_data; -struct scsi_cmnd; - -#define CONFIG_SG 0 -#define CONFIG_DMA 0 - -/* - * Unusual device list definitions - */ - -struct us_unusual_dev { - const char* vendorName; - const char* productName; - __u8 useProtocol; - __u8 useTransport; - int (*initFunction)(struct us_data *); -}; - -/* Flag definitions: these entries are static */ -#define US_FL_SINGLE_LUN 0x00000001 /* allow access to only LUN 0 */ -//#define US_FL_MODE_XLATE 0 /* [no longer used] */ -#define US_FL_NEED_OVERRIDE 0x00000004 /* unusual_devs entry is necessary */ -//#define US_FL_IGNORE_SER 0 /* [no longer used] */ -#define US_FL_SCM_MULT_TARG 0x00000020 /* supports multiple targets */ -#define US_FL_FIX_INQUIRY 0x00000040 /* INQUIRY response needs faking */ -#define US_FL_FIX_CAPACITY 0x00000080 /* READ CAPACITY response too big */ -#define US_FL_IGNORE_RESIDUE 0x00000100 /* reported residue is wrong */ -#define US_FL_BULK32 0x00000200 /* Uses 32-byte CBW length */ - - -/* Dynamic bitflag definitions (us->dflags): used in set_bit() etc. */ -#define US_FLIDX_URB_ACTIVE 0 /* current_urb is in use */ -#define US_FLIDX_SG_ACTIVE 1 /* current_sg is in use */ -#define US_FLIDX_ABORTING 2 /* abort is in progress */ -#define US_FLIDX_DISCONNECTING 3 /* disconnect in progress */ -#define US_FLIDX_RESETTING 4 /* device reset in progress */ -#define US_FLIDX_TIMED_OUT 5 /* SCSI midlayer timed out */ -#define US_FLIDX_SCAN_PENDING 6 /* scanning not yet done */ -#define US_FLIDX_REDO_READ10 7 /* redo READ(10) command */ -#define US_FLIDX_READ10_WORKED 8 /* previous READ(10) succeeded */ - -#define USB_STOR_STRING_LEN 32 - -/* - * We provide a DMA-mapped I/O buffer for use with small USB transfers. - * It turns out that CB[I] needs a 12-byte buffer and Bulk-only needs a - * 31-byte buffer. But Freecom needs a 64-byte buffer, so that's the - * size we'll allocate. - */ - -#define US_IOBUF_SIZE 64 /* Size of the DMA-mapped I/O buffer */ -#define US_SENSE_SIZE 18 /* Size of the autosense data buffer */ - -typedef int (*trans_cmnd)(struct scsi_cmnd *, struct us_data*); -typedef int (*trans_reset)(struct us_data*); -typedef void (*proto_cmnd)(struct scsi_cmnd*, struct us_data*); -typedef void (*extra_data_destructor)(void *); /* extra data destructor */ -typedef void (*pm_hook)(struct us_data *, int); /* power management hook */ - -#define US_SUSPEND 0 -#define US_RESUME 1 - -/* we allocate one of these for every device that we remember */ -struct us_data { - /* The device we're working with - * It's important to note: - * (o) you must hold dev_mutex to change pusb_dev - */ - _Mutex dev_mutex; - struct usb_device *pusb_dev; /* this usb_device */ - struct usb_interface *pusb_intf; /* this interface */ - struct us_unusual_dev *unusual_dev; /* device-filter entry */ - unsigned long fflags; /* fixed flags from filter */ - unsigned long dflags; /* dynamic atomic bitflags */ - unsigned int send_bulk_pipe; /* cached pipe values */ - unsigned int recv_bulk_pipe; - unsigned int send_ctrl_pipe; - unsigned int recv_ctrl_pipe; - unsigned int recv_intr_pipe; - - /* information about the device */ - char *transport_name; - char *protocol_name; - __le32 bcs_signature; - u8 subclass; - u8 protocol; - u8 max_lun; // max number of logical unit (0,1,2,3...) - - u8 ifnum; /* interface number */ - u8 ep_bInterval; /* interrupt interval */ - - /* function pointers for this device */ - trans_cmnd transport; /* transport function */ - trans_reset transport_reset; /* transport device reset */ - proto_cmnd proto_handler; /* protocol handler */ - - /* SCSI interfaces */ - struct scsi_cmnd *srb; /* current srb */ - unsigned int tag; /* current dCBWTag */ - - /* control and bulk communications data */ - struct urb *current_urb; /* USB requests */ - struct usb_ctrlrequest *cr; /* control requests */ -// struct usb_sg_request current_sg; /* scatter-gather req. */ - unsigned char *iobuf; /* I/O buffer */ - dma_addr_t iobuf_dma; /* buffer DMA addresses */ - - xTaskHandle ctl_task; /*the control task handle*/ - - /* mutual exclusion and synchronization structures */ - _Sema cmnd_ready; /* to sleep thread on */ - _Mutex notify; /* thread begin/end */ - - unsigned no_sg_constraint:1; /* no sg constraint */ - unsigned sg_tablesize; /* 0 or largest number of sg list entries */ - - /* subdriver information */ - void *extra; /* Any extra data */ -}; - -/* Convert between us_data and the corresponding Scsi_Host */ -//static inline struct Scsi_Host *us_to_host(struct us_data *us) { -// return container_of((void *) us, struct Scsi_Host, hostdata); -//} -//static inline struct us_data *host_to_us(struct Scsi_Host *host) { -// return (struct us_data *) host->hostdata; -//} - -/* Function to fill an inquiry response. See usb.c for details */ -extern void fill_inquiry_response(struct us_data *us, - unsigned char *data, unsigned int data_len); - -/* The scsi_lock() and scsi_unlock() macros protect the sm_state and the - * single queue element srb for write access */ -//#define scsi_unlock(host) spin_unlock_irq(host->host_lock) -//#define scsi_lock(host) spin_lock_irq(host->host_lock) - -#define scsi_unlock(host) spin_unlock(host->host_lock) -#define scsi_lock(host) spin_lock(host->host_lock) - -/* General routines provided by the usb-storage standard core */ -#ifdef CONFIG_PM -extern int usb_stor_suspend(struct usb_interface *iface, pm_message_t message); -extern int usb_stor_resume(struct usb_interface *iface); -extern int usb_stor_reset_resume(struct usb_interface *iface); -#else -#define usb_stor_suspend NULL -#define usb_stor_resume NULL -#define usb_stor_reset_resume NULL -#endif - -extern int usb_stor_pre_reset(struct usb_interface *iface); -extern int usb_stor_post_reset(struct usb_interface *iface); - -extern int usb_stor_probe1(struct us_data *us, - struct usb_interface *intf, - const struct usb_device_id *id, - struct us_unusual_dev *unusual_dev); -extern int usb_stor_probe2(struct us_data *us); -extern void usb_stor_disconnect(struct usb_interface *intf); - -extern void usb_stor_adjust_quirks(struct usb_device *dev, - unsigned long *fflags); - -// the follow definition should be prot to usb.h for other usb device - - -/* USB autosuspend and autoresume */ - -#ifdef CONFIG_PM_RUNTIME -extern void usb_enable_autosuspend(struct usb_device *udev); -extern void usb_disable_autosuspend(struct usb_device *udev); - -extern int usb_autopm_get_interface(struct usb_interface *intf); -extern void usb_autopm_put_interface(struct usb_interface *intf); -extern int usb_autopm_get_interface_async(struct usb_interface *intf); -extern void usb_autopm_put_interface_async(struct usb_interface *intf); -extern void usb_autopm_get_interface_no_resume(struct usb_interface *intf); -extern void usb_autopm_put_interface_no_suspend(struct usb_interface *intf); - -static inline void usb_mark_last_busy(struct usb_device *udev) -{ - pm_runtime_mark_last_busy(&udev->dev); -} - -#else - -static inline int usb_enable_autosuspend(struct usb_device *udev) -{ return 0; } -static inline int usb_disable_autosuspend(struct usb_device *udev) -{ return 0; } - -static inline int usb_autopm_get_interface(struct usb_interface *intf) -{ return 0; } -static inline int usb_autopm_get_interface_async(struct usb_interface *intf) -{ return 0; } - -static inline void usb_autopm_put_interface(struct usb_interface *intf) -{ } -static inline void usb_autopm_put_interface_async(struct usb_interface *intf) -{ } -static inline void usb_autopm_get_interface_no_resume( - struct usb_interface *intf) -{ } -static inline void usb_autopm_put_interface_no_suspend( - struct usb_interface *intf) -{ } -static inline void usb_mark_last_busy(struct usb_device *udev) -{ } -#endif - -/* USB port reset for device reinitialization */ -extern int usb_reset_device(struct usb_device *dev); -extern void usb_queue_reset_device(struct usb_interface *dev); - -extern void *usb_alloc_coherent(struct usb_device *dev, size_t size, - gfp_t mem_flags, dma_addr_t *dma); -extern void usb_free_coherent(struct usb_device *dev, size_t size, - void *addr, dma_addr_t dma); - - -// copy from transport.h -extern int usb_stor_CB_transport(struct scsi_cmnd *, struct us_data*); -extern int usb_stor_CB_reset(struct us_data*); -extern int usb_stor_Bulk_transport(struct scsi_cmnd *, struct us_data*); -extern int usb_stor_Bulk_max_lun(struct us_data*); -extern int usb_stor_Bulk_reset(struct us_data*); - -extern void usb_stor_invoke_transport(struct scsi_cmnd *, struct us_data*); -extern void usb_stor_stop_transport(struct us_data*); - -// copy form protocol.h -extern void usb_stor_transparent_scsi_command(struct scsi_cmnd* srb, struct us_data* ); - -extern unsigned char usb_stor_sense_invalidCDB[18]; - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_usual.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_usual.h deleted file mode 100644 index 9b8d823..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/storage/inc/us_usual.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef __US_USUAL_H -#define __US_USUAL_H - -#include "usb.h" -#include "storage.h" - -#define US_FL_SINGLE_LUN 0x00000001/* allow access to only LUN 0 */ -//#define US_FL_NEED_OVERRIDE 0x00000002/* unusual_devs entry is necessary */ -//#define US_FL_SCM_MULT_TARG 0x00000004/* supports multiple targets */ -//#define US_FL_FIX_INQUIRY 0x00000008/* INQUIRY response needs faking */ -//#define US_FL_FIX_CAPACITY 0x00000010/* READ CAPACITY response too big */ -//#define US_FL_IGNORE_RESIDUE 0x00000020/* reported residue is wrong */ -//#define US_FL_BULK32 0x00000040/* Uses 32-byte CBW length */ -#define US_FL_NOT_LOCKABLE 0x00000080/* PREVENT/ALLOW not supported */ -#define US_FL_GO_SLOW 0x00000100/* Need delay after Command phase */ -#define US_FL_NO_WP_DETECT 0x00000200/* Don't check for write-protect */ -#define US_FL_MAX_SECTORS_64 0x00000400/* Sets max_sectors to 64 */ -#define US_FL_IGNORE_DEVICE 0x00000800/* Don't claim device */ -#define US_FL_CAPACITY_HEURISTICS 0x00001000/* sometimes sizes is too big */ -#define US_FL_MAX_SECTORS_MIN 0x00002000/* Sets max_sectors to arch min */ -#define US_FL_BULK_IGNORE_TAG 0x00004000/* Ignore tag mismatch in bulk operations */ -#define US_FL_SANE_SENSE 0x00008000/* Sane Sense (> 18 bytes) */ -#define US_FL_CAPACITY_OK 0x00010000/* READ CAPACITY response is correct */ -#define US_FL_BAD_SENSE 0x00020000/* Bad Sense (never more than 18 bytes) */ -#define US_FL_NO_READ_DISC_INFO 0x00040000/* cannot handle READ_DISC_INFO */ -#define US_FL_NO_READ_CAPACITY_16 0x00080000/* cannot handle READ_CAPACITY_16*/ -#define US_FL_INITIAL_READ10 0x00100000/* Initial READ(10) (and others) must be retried */ -#define US_FL_WRITE_CACHE 0x00200000/* Write Cache status is not available */ -#define US_FL_NEEDS_CAP16 0x00400000/* cannot handle READ_CAPACITY_10 */ -#define US_FL_IGNORE_UAS 0x00800000/* Device advertises UAS but it is broken */ -#define US_FL_BROKEN_FUA 0x01000000/* Cannot handle FUA in WRITE or READ CDBs */ - -extern int usb_usual_ignore_device(struct usb_interface *intf); -extern struct usb_device_id usb_storage_usb_ids[]; - -#endif /* __US_USUAL_H */ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/mjpeg/mjpeg_api.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/mjpeg/mjpeg_api.h deleted file mode 100644 index 38a88da..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/mjpeg/mjpeg_api.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef _MJPEG_API_H -#define _MJPEG_API_H - - -/* memory disk type */ -typedef enum _medium_type{ - medium_SD, - medium_USB, - medium_FLASH, - medium_CACHE -}medium_type; - -/* time unit*/ -typedef enum _time_unit{ - unit_HR, // hour - unit_MIN, // minute - unit_SEC, //second -}time_unit; - -typedef struct _mjpeg_cache{ - unsigned char* addr; - int size; -}mjpeg_cache; - -struct mjpeg_context{ - /* mjpeg size*/ - int width;//frame width - int height;//frame height - /* */ - medium_type disktype; - time_unit timeunit; - int interval; - unsigned char* name; - unsigned char is_periodic; - /* store mjpeg in a RAM cache */ - mjpeg_cache cache; -}; - -int mjpeg_get(struct mjpeg_context *context); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/uapi_uvcvideo.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/uapi_uvcvideo.h deleted file mode 100644 index e34edfb..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/uapi_uvcvideo.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef __LINUX_UVCVIDEO_H_ -#define __LINUX_UVCVIDEO_H_ -#if 0 -#include -#include -#endif -#include "uvc_os_wrap_via_osdep_api.h" -/* - * Dynamic controls - */ - -/* Data types for UVC control data */ -#define UVC_CTRL_DATA_TYPE_RAW 0 -#define UVC_CTRL_DATA_TYPE_SIGNED 1 -#define UVC_CTRL_DATA_TYPE_UNSIGNED 2 -#define UVC_CTRL_DATA_TYPE_BOOLEAN 3 -#define UVC_CTRL_DATA_TYPE_ENUM 4 -#define UVC_CTRL_DATA_TYPE_BITMASK 5 - -/* Control flags */ -#define UVC_CTRL_FLAG_SET_CUR (1 << 0) -#define UVC_CTRL_FLAG_GET_CUR (1 << 1) -#define UVC_CTRL_FLAG_GET_MIN (1 << 2) -#define UVC_CTRL_FLAG_GET_MAX (1 << 3) -#define UVC_CTRL_FLAG_GET_RES (1 << 4) -#define UVC_CTRL_FLAG_GET_DEF (1 << 5) -/* Control should be saved at suspend and restored at resume. */ -#define UVC_CTRL_FLAG_RESTORE (1 << 6) -/* Control can be updated by the camera. */ -#define UVC_CTRL_FLAG_AUTO_UPDATE (1 << 7) - -#define UVC_CTRL_FLAG_GET_RANGE \ - (UVC_CTRL_FLAG_GET_CUR | UVC_CTRL_FLAG_GET_MIN | \ - UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES | \ - UVC_CTRL_FLAG_GET_DEF) - -struct uvc_menu_info { - __u32 value; - __u8 name[32]; -}; - -struct uvc_xu_control_mapping { - __u32 id; - __u8 name[32]; - __u8 entity[16]; - __u8 selector; - - __u8 size; - __u8 offset; - __u32 v4l2_type; - __u32 data_type; - - struct uvc_menu_info __user *menu_info; - __u32 menu_count; - - __u32 reserved[4]; -}; - -struct uvc_xu_control_query { - __u8 unit; - __u8 selector; - __u8 query; /* Video Class-Specific Request Code, */ - /* defined in linux/usb/video.h A.8. */ - __u16 size; - __u8 __user *data; -}; - -#define UVCIOC_CTRL_MAP _IOWR('u', 0x20, struct uvc_xu_control_mapping) -#define UVCIOC_CTRL_QUERY _IOWR('u', 0x21, struct uvc_xu_control_query) - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/uvc_intf.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/uvc_intf.h deleted file mode 100644 index 3768d06..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/uvc_intf.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef _UVC_INTF_H_ -#define _UVC_INTF_H_ - -enum uvc_format_type{ - UVC_FORMAT_MJPEG = 1, - UVC_FORMAT_H264 = 2, - UVC_FORMAT_UNKNOWN = -1, -}; - -typedef enum uvc_format_type uvc_fmt_t; - -struct uvc_context -{ - uvc_fmt_t fmt_type; //video format type - int width;//video frame width - int height;//video frame height - int frame_rate;//video frame rate - int compression_ratio;//compression format video compression ratio -}; - -#define USER_CTRL_SATURATION 1 - -struct uvc_user_ctrl -{ - u32 ctrl_id; - s32 ctrl_value; -}; - -struct uvc_buf_context -{ - int index; //index of internal uvc buffer - unsigned char *data; //address of uvc data - int len; //length of uvc data - u32 timestamp; //timestamp -}; - -int uvc_stream_init(void); //entry function to start uvc -void uvc_stream_free(void); // free streaming resources -int uvc_is_stream_ready(void); // return true if uvc device is initialized successfully -int uvc_is_stream_on(void); //return true if uvc device is streaming now -int uvc_is_stream_off(void); //return true if uvc device is free already -int uvc_stream_on(void); //enable camera streaming -void uvc_stream_off(void); //disable camera streaming -int uvc_set_param(uvc_fmt_t fmt_type, int *width, int *height, int *frame_rate, int *compression_ratio);//set camera streaming video parameters:video format, resolution and frame rate. -int uvc_get_user_ctrl(struct uvc_user_ctrl *user_ctrl); -int uvc_set_user_ctrl(struct uvc_user_ctrl *user_ctrl); -int uvc_buf_check(struct uvc_buf_context *b); //check if uvc_buf_context is legal (return 0 is legal otherwise -1) -int uvc_dqbuf(struct uvc_buf_context *b); //dequeue internal buffer & get internal buffer info -int uvc_qbuf(struct uvc_buf_context *b); //queue internal buffer -int is_pure_thru_on(void); //return 1 if pure throughput test mode is on otherwise return 0 -void uvc_pure_thru_on(void); //turn on pure uvc throughput test mode (i.e. no decoding is involved) -void uvc_dec_thru_on(void); //turn on uvc throughput test mode with uvc payload decoding -void uvc_thru_off(void); //turn off uvc throughput log service - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/uvc_os_wrap_via_osdep_api.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/uvc_os_wrap_via_osdep_api.h deleted file mode 100644 index 2eb5615..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/uvc_os_wrap_via_osdep_api.h +++ /dev/null @@ -1,573 +0,0 @@ -#ifndef _UVC_OSDEP_WRAP_H_ -#define _UVC_OSDEP_WRAP_H_ - -//#include "rtl_utility.h" -#include "platform/platform_stdlib.h" -#include "basic_types.h" -#include "osdep_api.h" -#include "usb_defs.h" - -#include "errno.h" -#include "dlist.h" - - - -#define UVC_LAYER_DEBUG 0 -#if UVC_LAYER_DEBUG -#define UVC_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#define UVC_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#define FUN_ENTER //printf("\n\r%s ==>\n", __func__) -#define FUN_EXIT //printf("\n\r%s <==\n", __func__) -#define FUN_TRACE //printf("\n\r%s:%d \n", __func__, __LINE__) -#else -#define UVC_PRINTF(fmt, args...) -#define UVC_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#define FUN_ENTER -#define FUN_EXIT -#define FUN_TRACE -#endif - -/* add by Ian -- define uvc task priority */ -#define UVC_TASK_PRIORITY 2 - -#ifndef __u8 -#define __u8 u8 -#endif -#ifndef __u16 -#define __u16 u16 -#endif -#ifndef __u32 -#define __u32 u32 -#endif -#ifndef __u64 -#define __u64 u64 -#endif -#ifndef __s8 -#define __s8 s8 -#endif -#ifndef __s16 -#define __s16 s16 -#endif -#ifndef __s32 -#define __s32 s32 -#endif -#ifndef __s64 -#define __s64 s64 -#endif - -#ifndef gfp_t -#define gfp_t u32 -#endif - -#define ALIGN(x, a, type_of_x) (((x) + ((type_of_x)(a) - 1)) & ~((type_of_x)(a) - 1)) - -#ifndef IS_ALIGNED -#define IS_ALIGNED(x, a, type_of_x) (((x) & ((type_of_x)(a) - 1)) == 0) -#endif -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) -#endif - -#ifndef BITS_PER_LONG -#define BITS_PER_LONG (32) -#endif -#ifndef BITS_PER_LONG_LONG -#define BITS_PER_LONG_LONG (32) -#endif - -/* Atomic integer operations */ -#ifndef atomic_set - #define atomic_set(v, i) RTL_ATOMIC_SET((v), (i)) -#endif -#ifndef atomic_read - #define atomic_read(v) RTL_ATOMIC_READ((v)) -#endif -#ifndef atomic_add - #define atomic_add(v, i) RTL_ATOMIC_ADD((v), (i)) -#endif -#ifndef atomic_sub - #define atomic_sub(v, i) RTL_ATOMIC_SUB((v), (i)) -#endif -#ifndef atomic_inc - #define atomic_inc(v) RTL_ATOMIC_INC((v)) -#endif -#ifndef atomic_dec - #define atomic_dec(v) RTL_ATOMIC_DEC((v)) -#endif - -#ifndef MEDIA_PAD_FL_SINK -#define MEDIA_PAD_FL_SINK (1 << 0) -#endif -#ifndef MEDIA_PAD_FL_SOURCE -#define MEDIA_PAD_FL_SOURCE (1 << 1) -#endif -#ifndef MEDIA_PAD_FL_MUST_CONNECT -#define MEDIA_PAD_FL_MUST_CONNECT (1 << 2) -#endif - -static inline u16 __get_unaligned_le16(const u8 *p) -{ - return p[0] | p[1] << 8; -} - -static inline u32 __get_unaligned_le32(const u8 *p) -{ - return p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24; -} - -static inline u64 __get_unaligned_le64(const u8 *p) -{ - return (u64)__get_unaligned_le32(p + 4) << 32 | - __get_unaligned_le32(p); -} - -static inline void __put_unaligned_le16(u16 val, u8 *p) -{ - *p++ = val; - *p++ = val >> 8; -} - -static inline void __put_unaligned_le32(u32 val, u8 *p) -{ - __put_unaligned_le16(val >> 16, p + 2); - __put_unaligned_le16(val, p); -} - -static inline void __put_unaligned_le64(u64 val, u8 *p) -{ - __put_unaligned_le32(val >> 32, p + 4); - __put_unaligned_le32(val, p); -} - -static inline u16 get_unaligned_le16(const void *p) -{ - return __get_unaligned_le16((const u8 *)p); -} - -static inline u32 get_unaligned_le32(const void *p) -{ - return __get_unaligned_le32((const u8 *)p); -} - -static inline u64 get_unaligned_le64(const void *p) -{ - return __get_unaligned_le64((const u8 *)p); -} - -static inline void put_unaligned_le16(u16 val, void *p) -{ - __put_unaligned_le16(val, p); -} - -static inline void put_unaligned_le32(u32 val, void *p) -{ - __put_unaligned_le32(val, p); -} - -static inline void put_unaligned_le64(u64 val, void *p) -{ - __put_unaligned_le64(val, p); -} - -/** -* kmemdup - duplicate region of memory -* -* @src: memory region to duplicate -* @len: memory region length -* @gfp: GFP mask to use -*/ -static inline void *kmemdup(const void *src, size_t len, gfp_t gfp) -{ - void *p; - - //p = kmalloc_track_caller(len, gfp); - //p = kmalloc(len, gfp); - p = malloc(len); - if (p) - memcpy(p, src, len); - return p; -} -#ifndef __force -#define __force __attribute__((force)) -#endif - -#if 0 -typedef __u16 __bitwise __le16; -typedef __u16 __bitwise __be16; -typedef __u32 __bitwise __le32; -typedef __u32 __bitwise __be32; -typedef __u64 __bitwise __le64; -typedef __u64 __bitwise __be64; -typedef __u16 __bitwise __sum16; -typedef __u32 __bitwise __wsum; -#endif -//edit by Ian -- remove duplicated definitions -#if 0 -typedef __u16 __le16; -typedef __u16 __be16; -typedef __u32 __le32; -typedef __u32 __be32; -typedef __u64 __le64; -typedef __u64 __be64; -typedef __u16 __sum16; -typedef __u32 __wsum; -#endif - -#ifndef __le16 -#define __le16 __u16 -#endif -#ifndef __be16 -#define __be16 __u16 -#endif -#ifndef __le32 -#define __le32 __u32 -#endif -#ifndef __be32 -#define __be32 __u32 -#endif -static inline __u32 le32_to_cpup(const __le32 *p) -{ - //return (__force __u32)*p; - return (__u32)*p; -} -static inline __u16 le16_to_cpup(const __le16 *p) -{ - //return (__force __u16)*p; - return (__u16)*p; -} - - -/* Endian macros */ -#ifndef htonl -#define htonl(x) rtk_cpu_to_be32(x) -#endif - -#ifndef ntohl -#define ntohl(x) rtk_be32_to_cpu(x) -#endif - -#ifndef htons -#define htons(x) rtk_cpu_to_be16(x) -#endif - -#ifndef ntohs -#define ntohs(x) rtk_be16_to_cpu(x) -#endif - -#ifndef cpu_to_le32 -#define cpu_to_le32(x) rtk_cpu_to_le32(x) -#endif - -#ifndef le32_to_cpu -#define le32_to_cpu(x) rtk_le32_to_cpu(x) -#endif - -#ifndef cpu_to_le16 -#define cpu_to_le16(x) rtk_cpu_to_le16(x) -#endif - -#ifndef le16_to_cpu -#define le16_to_cpu(x) rtk_le16_to_cpu(x) -#endif - -#ifndef cpu_to_be32 -#define cpu_to_be32(x) rtk_cpu_to_be32(x) -#endif - -#ifndef be32_to_cpu -#define be32_to_cpu(x) rtk_be32_to_cpu(x) -#endif - -#ifndef cpu_to_be16 -#define cpu_to_be16(x) rtk_cpu_to_be16(x) -#endif - -#ifndef be16_to_cpu -#define be16_to_cpu(x) rtk_be16_to_cpu(x) -#endif - -/* Parameters used to convert the timespec values: */ -#ifndef MSEC_PER_SEC -#define MSEC_PER_SEC 1000L -#endif -#ifndef USEC_PER_MSEC -#define USEC_PER_MSEC 1000L -#endif -#ifndef NSEC_PER_USEC -#define NSEC_PER_USEC 1000L -#endif -#ifndef NSEC_PER_MSEC -#define NSEC_PER_MSEC 1000000L -#endif -#ifndef USEC_PER_SEC -#define USEC_PER_SEC 1000000L -#endif -#ifndef NSEC_PER_SEC -#define NSEC_PER_SEC 1000000000L -#endif -#ifndef FSEC_PER_SEC -#define FSEC_PER_SEC 1000000000000000LL -#endif -#ifndef TIME_T_MAX -#define TIME_T_MAX (time_t)((1UL << ((sizeof(time_t) << 3) - 1)) - 1) -#endif - -#ifndef __GFP_WAIT -#define __GFP_WAIT (0x10u) -#endif -#ifndef __GFP_HIGH -#define __GFP_HIGH (0x20u) -#endif -#ifndef __GFP_IO -#define __GFP_IO (0x40u) -#endif -#ifndef __GFP_FS -#define __GFP_FS (0x80u) -#endif -#ifndef GFP_NOIO -#define GFP_NOIO (0x10u) -#endif -#ifndef __GFP_NOWARN -#define __GFP_NOWARN (0x200u) -#endif -#ifndef GFP_KERNEL -#define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS) -#endif - -#ifndef copy_from_user -#define copy_from_user(to, from, sz) _memcpy((to), (from), (sz)) -#endif -#ifndef copy_to_user -#define copy_to_user(to, from, sz) _memcpy((to), (from), (sz)) -#endif - -typedef u32 compat_caddr_t; //used for compatibility in uvc_v4l2.c - -/** -* strlcpy - Copy a %NUL terminated string into a sized buffer -* @dest: Where to copy the string to -* @src: Where to copy the string from -* @size: size of destination buffer -* -* Compatible with *BSD: the result is always a valid -* NUL-terminated string that fits in the buffer (unless, -* of course, the buffer size is zero). It does not pad -* out the result like strncpy() does. -*/ -#ifndef __GNUC__ -static inline size_t strlcpy(char *dest, const char *src, size_t size) -{ - size_t ret = _strlen(src); - - if (size) { - size_t len = (ret >= size) ? size - 1 : ret; - memcpy(dest, src, len); - dest[len] = '\0'; - } - return ret; -} -#endif - -/** -* clamp - return a value clamped to a given range with strict typechecking -* @val: current value -* @min: minimum allowable value -* @max: maximum allowable value -* -* This macro does strict typechecking of min/max to make sure they are of the -* same type as val. See the unnecessary pointer comparisons. -*/ - -#ifndef clamp -#define clamp(new_val, val, min, max, type) do{ \ - type __val = (val); \ - type __min = (min); \ - type __max = (max); \ - (void) (&__val == &__min); \ - (void) (&__val == &__max); \ - __val = (__val < __min) ? __min: __val; \ - new_val = (__val > __max) ? __max: __val; }while(0) -#endif - -/* - * Compile time versions of __arch_hweightN() - */ -#ifndef __const_hweight8 -#define __const_hweight8(w) \ - ( (!!((w) & (1ULL << 0))) + \ - (!!((w) & (1ULL << 1))) + \ - (!!((w) & (1ULL << 2))) + \ - (!!((w) & (1ULL << 3))) + \ - (!!((w) & (1ULL << 4))) + \ - (!!((w) & (1ULL << 5))) + \ - (!!((w) & (1ULL << 6))) + \ - (!!((w) & (1ULL << 7))) ) -#endif -#ifndef hweight8 -#define hweight8(w) __const_hweight8(w) -#endif -#ifndef BITMAP_LAST_WORD_MASK -#define BITMAP_LAST_WORD_MASK(nbits) \ -( \ - ((nbits) % BITS_PER_LONG) ? \ - (1UL<<((nbits) % BITS_PER_LONG))-1 : ~0UL \ -) -#endif -/** - * hweightN - returns the hamming weight of a N-bit word - * @x: the word to weigh - * - * The Hamming Weight of a number is the total number of bits set in it. - */ -static inline unsigned int hweight32(unsigned int w) -{ - unsigned int res = w - ((w >> 1) & 0x55555555); - res = (res & 0x33333333) + ((res >> 2) & 0x33333333); - res = (res + (res >> 4)) & 0x0F0F0F0F; - res = res + (res >> 8); - return (res + (res >> 16)) & 0x000000FF; -} - -static inline unsigned long hweight64(__u64 w) -{ -#if BITS_PER_LONG == 32 - return hweight32((unsigned int)(w >> 32)) + hweight32((unsigned int)w); -#elif BITS_PER_LONG == 64 - __u64 res = w - ((w >> 1) & 0x5555555555555555ul); - res = (res & 0x3333333333333333ul) + ((res >> 2) & 0x3333333333333333ul); - res = (res + (res >> 4)) & 0x0F0F0F0F0F0F0F0Ful; - res = res + (res >> 8); - res = res + (res >> 16); - return (res + (res >> 32)) & 0x00000000000000FFul; -#endif -} - - -static inline unsigned long hweight_long(unsigned long w) -{ - return sizeof(w) == 4 ? hweight32(w) : hweight64(w); -} - -static inline int __bitmap_weight(const unsigned long *bitmap, int bits) -{ - int k, w = 0, lim = bits/BITS_PER_LONG; - - for (k = 0; k < lim; k++) - w += hweight_long(bitmap[k]); - - if (bits % BITS_PER_LONG) - w += hweight_long(bitmap[k] & BITMAP_LAST_WORD_MASK(bits)); - - return w; -} - -static inline int bitmap_weight(const unsigned long *src, int nbits) -{ - // if (small_const_nbits(nbits)) - // return hweight_long(*src & BITMAP_LAST_WORD_MASK(nbits)); - return __bitmap_weight(src, nbits); -} - -/** - * memweight - count the total number of bits set in memory area - * @ptr: pointer to the start of the area - * @bytes: the size of the area - */ -static inline size_t memweight(const void *ptr, size_t bytes) -{ - size_t ret = 0; - size_t longs; - const unsigned char *bitmap = ptr; - - for (; bytes > 0 && ((unsigned long)bitmap) % sizeof(long); - bytes--, bitmap++) - ret += hweight8(*bitmap); - - longs = bytes / sizeof(long); - if (longs) { - //BUG_ON(longs >= INT_MAX / BITS_PER_LONG); - ret += bitmap_weight((unsigned long *)bitmap, longs * BITS_PER_LONG); - bytes -= longs * sizeof(long); - bitmap += longs * sizeof(long); - } - /* - * The reason that this last loop is distinct from the preceding - * bitmap_weight() call is to compute 1-bits in the last region smaller - * than sizeof(long) properly on big-endian systems. - */ - for (; bytes > 0; bytes--, bitmap++) - ret += hweight8(*bitmap); - - return ret; -} - - /** - * strlcat - Append a length-limited, %NUL-terminated string to another - * @dest: The string to be appended to -* @src: The string to append to it -* @count: The size of the destination buffer. -*/ -#ifndef __GNUC__ -static inline size_t strlcat(char *dest, const char *src, size_t count) -{ - size_t dsize = _strlen(dest); - size_t len = _strlen(src); - size_t res = dsize + len; - - /* This would be a bug */ - //BUG_ON(dsize >= count); - - dest += dsize; - count -= dsize; - if (len >= count) - len = count-1; - memcpy(dest, src, len); - dest[len] = 0; - return res; -} -#endif - -/** - * atomic_dec_and_test - decrement and test - * @v: pointer of type atomic_t - * - * Atomically decrements @v by 1 and - * returns true if the result is 0, or false for all other - * cases. - */ -static inline int atomic_dec_and_test(atomic_t *v) -{ - atomic_dec(v); - if (v->counter == 0) - return TRUE; - else - return FALSE; -} - -/** - * kcalloc - allocate memory for an array. The memory is set to zero. - * @n: number of elements. - * @size: element size. - * @flags: the type of memory to allocate (see kmalloc). - */ -static inline void *kcalloc(size_t n, size_t size, gfp_t flags) -{ - return RtlZmalloc(((n) * (size))); -} - -#ifndef GFP_ATOMIC -#define GFP_ATOMIC GFP_KERNEL -#endif -#ifndef offsetof -#define offsetof(s,m) (size_t)&(((s *)0)->m) -#endif - -//enum linux kernel version -#ifndef KERNEL_VERSION -#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) -#endif -#ifndef LINUX_VERSION_CODE -#define LINUX_VERSION_CODE KERNEL_VERSION(3, 12, 0) -#endif - -#endif //_UVC_OSDEP_WRAP_H_ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/uvcvideo.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/uvcvideo.h deleted file mode 100644 index 977f116..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/uvcvideo.h +++ /dev/null @@ -1,774 +0,0 @@ -#ifndef _USB_VIDEO_H_ -#define _USB_VIDEO_H_ -#if 0 -#ifndef __KERNEL__ -#error "The uvcvideo.h header is deprecated, use linux/uvcvideo.h instead." -#endif /* __KERNEL__ */ - -#include -#include -#endif - -#include "usb.h" -#include "video.h" -#include "uvcvideo.h" - -#include "videodev2.h" -#include "media-device.h" -#include "v4l2-device.h" -#include "v4l2-event.h" -#include "v4l2-fh.h" -#include "videobuf2-core.h" - - - -/* -------------------------------------------------------------------------- - * UVC constants - */ - -#define UVC_TERM_INPUT 0x0000 -#define UVC_TERM_OUTPUT 0x8000 -#define UVC_TERM_DIRECTION(term) ((term)->type & 0x8000) - -#define UVC_ENTITY_TYPE(entity) ((entity)->type & 0x7fff) -#define UVC_ENTITY_IS_UNIT(entity) (((entity)->type & 0xff00) == 0) -#define UVC_ENTITY_IS_TERM(entity) (((entity)->type & 0xff00) != 0) -#define UVC_ENTITY_IS_ITERM(entity) \ - (UVC_ENTITY_IS_TERM(entity) && \ - ((entity)->type & 0x8000) == UVC_TERM_INPUT) -#define UVC_ENTITY_IS_OTERM(entity) \ - (UVC_ENTITY_IS_TERM(entity) && \ - ((entity)->type & 0x8000) == UVC_TERM_OUTPUT) - - -/* ------------------------------------------------------------------------ - * GUIDs - */ -#define UVC_GUID_UVC_CAMERA \ - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01} -#define UVC_GUID_UVC_OUTPUT \ - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02} -#define UVC_GUID_UVC_MEDIA_TRANSPORT_INPUT \ - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03} -#define UVC_GUID_UVC_PROCESSING \ - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01} -#define UVC_GUID_UVC_SELECTOR \ - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02} - -#define UVC_GUID_FORMAT_MJPEG \ - { 'M', 'J', 'P', 'G', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_YUY2 \ - { 'Y', 'U', 'Y', '2', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_YUY2_ISIGHT \ - { 'Y', 'U', 'Y', '2', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0x00, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_NV12 \ - { 'N', 'V', '1', '2', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_YV12 \ - { 'Y', 'V', '1', '2', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_I420 \ - { 'I', '4', '2', '0', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_UYVY \ - { 'U', 'Y', 'V', 'Y', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_Y800 \ - { 'Y', '8', '0', '0', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_Y8 \ - { 'Y', '8', ' ', ' ', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_Y10 \ - { 'Y', '1', '0', ' ', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_Y12 \ - { 'Y', '1', '2', ' ', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_Y16 \ - { 'Y', '1', '6', ' ', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_BY8 \ - { 'B', 'Y', '8', ' ', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_RGBP \ - { 'R', 'G', 'B', 'P', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_M420 \ - { 'M', '4', '2', '0', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} - -#define UVC_GUID_FORMAT_H264 \ - { 'H', '2', '6', '4', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -/* edit by Ian -- patch for GEO add two new guids*/ -#define UVC_GUID_FORMAT_MPEG \ - { 'M', 'P', 'E', 'G', 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -#define UVC_GUID_FORMAT_MUX \ - { 'M', 'U', 'X', 0x00, 0x00, 0x00, 0x10, 0x00, \ - 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} -/* ------------------------------------------------------------------------ - * Driver specific constants. - */ - -#define DRIVER_VERSION "1.1.1" - -/* Number of isochronous URBs. */ -#define UVC_URBS 2 -/* Maximum number of packets per URB. */ -#define UVC_MAX_PACKETS 32 -/* Maximum number of video buffers. */ -#define UVC_MAX_VIDEO_BUFFERS 8 -/* Maximum status buffer size in bytes of interrupt URB. */ -#define UVC_MAX_STATUS_SIZE 16 - -//modified by Ian -#define UVC_REQBUF_SIZE (150000) - -#define UVC_CTRL_CONTROL_TIMEOUT 300 -#define UVC_CTRL_STREAMING_TIMEOUT 5000 - -/* Maximum allowed number of control mappings per device */ -#define UVC_MAX_CONTROL_MAPPINGS 1024 -#define UVC_MAX_CONTROL_MENU_ENTRIES 32 - -/* Devices quirks */ -#define UVC_QUIRK_STATUS_INTERVAL 0x00000001 -#define UVC_QUIRK_PROBE_MINMAX 0x00000002 -#define UVC_QUIRK_PROBE_EXTRAFIELDS 0x00000004 -#define UVC_QUIRK_BUILTIN_ISIGHT 0x00000008 -#define UVC_QUIRK_STREAM_NO_FID 0x00000010 -#define UVC_QUIRK_IGNORE_SELECTOR_UNIT 0x00000020 -#define UVC_QUIRK_FIX_BANDWIDTH 0x00000080 -#define UVC_QUIRK_PROBE_DEF 0x00000100 -#define UVC_QUIRK_RESTRICT_FRAME_RATE 0x00000200 - -/* Format flags */ -#define UVC_FMT_FLAG_COMPRESSED 0x00000001 -#define UVC_FMT_FLAG_STREAM 0x00000002 - -/* ------------------------------------------------------------------------ - * Structures. - */ - -struct uvc_device; - -/* TODO: Put the most frequently accessed fields at the beginning of - * structures to maximize cache efficiency. - */ -struct uvc_control_info { - struct list_head mappings; - __u8 entity[16]; - __u8 index; /* Bit index in bmControls */ - __u8 selector; - - __u16 size; - __u32 flags; -}; - -struct uvc_control_mapping { - struct list_head list; - struct list_head ev_subs; - - __u32 id; - __u8 name[32]; - __u8 entity[16]; - __u8 selector; - - __u8 size; - __u8 offset; - enum v4l2_ctrl_type v4l2_type; - __u32 data_type; - - struct uvc_menu_info *menu_info; - __u32 menu_count; - - __u32 master_id; - __s32 master_manual; - __u32 slave_ids[2]; - - __s32 (*get) (struct uvc_control_mapping *mapping, __u8 query, - const __u8 *data); - void (*set) (struct uvc_control_mapping *mapping, __s32 value, - __u8 *data); -}; - -struct uvc_control { - struct uvc_entity *entity; - struct uvc_control_info info; - - __u8 index; /* Used to match the uvc_control entry with a - uvc_control_info. */ - __u8 dirty:1, - loaded:1, - modified:1, - cached:1, - initialized:1; - - __u8 *uvc_data; -}; - -struct uvc_format_desc { - char *name; - __u8 guid[16]; - __u32 fcc; -}; - -/* The term 'entity' refers to both UVC units and UVC terminals. - * - * The type field is either the terminal type (wTerminalType in the terminal - * descriptor), or the unit type (bDescriptorSubtype in the unit descriptor). - * As the bDescriptorSubtype field is one byte long, the type value will - * always have a null MSB for units. All terminal types defined by the UVC - * specification have a non-null MSB, so it is safe to use the MSB to - * differentiate between units and terminals as long as the descriptor parsing - * code makes sure terminal types have a non-null MSB. - * - * For terminals, the type's most significant bit stores the terminal - * direction (either UVC_TERM_INPUT or UVC_TERM_OUTPUT). The type field should - * always be accessed with the UVC_ENTITY_* macros and never directly. - */ - -#define UVC_ENTITY_FLAG_DEFAULT (1 << 0) - -struct uvc_entity { - struct list_head list; /* Entity as part of a UVC device. */ - struct list_head chain; /* Entity as part of a video device - * chain. */ - unsigned int flags; - - __u8 id; - __u16 type; - char name[64]; - - /* Media controller-related fields. */ - struct video_device *vdev; - struct v4l2_subdev subdev; - unsigned int num_pads; - unsigned int num_links; - struct media_pad *pads; - - union { - struct { - __u16 wObjectiveFocalLengthMin; - __u16 wObjectiveFocalLengthMax; - __u16 wOcularFocalLength; - __u8 bControlSize; - __u8 *bmControls; - } camera; - - struct { - __u8 bControlSize; - __u8 *bmControls; - __u8 bTransportModeSize; - __u8 *bmTransportModes; - } media; -#if 0 - struct { - } output; -#endif - struct { - __u16 wMaxMultiplier; - __u8 bControlSize; - __u8 *bmControls; - __u8 bmVideoStandards; - } processing; -#if 0 - struct { - } selector; -#endif - struct { - __u8 guidExtensionCode[16]; - __u8 bNumControls; - __u8 bControlSize; - __u8 *bmControls; - __u8 *bmControlsType; - } extension; - }; - - __u8 bNrInPins; - __u8 *baSourceID; - - unsigned int ncontrols; - struct uvc_control *controls; -}; - -// total (27)-> 28 Bytes -struct uvc_frame { - __u8 bFrameIndex; - __u8 bmCapabilities; - __u16 wWidth; - __u16 wHeight; - __u32 dwMinBitRate; - __u32 dwMaxBitRate; - __u32 dwMaxVideoFrameBufferSize; - __u8 bFrameIntervalType; - __u32 dwDefaultFrameInterval; - __u32 *dwFrameInterval; -}; - -// total 52 Bytes -struct uvc_format { - __u8 type; - __u8 index; - __u8 bpp; - __u8 colorspace; - __u32 fcc; - __u32 flags; - - char name[32]; - - unsigned int nframes; - struct uvc_frame *frame; -}; - -struct uvc_streaming_header { - __u8 bNumFormats; - __u8 bEndpointAddress; - __u8 bTerminalLink; - __u8 bControlSize; - __u8 *bmaControls; - /* The following fields are used by input headers only. */ - __u8 bmInfo; - __u8 bStillCaptureMethod; - __u8 bTriggerSupport; - __u8 bTriggerUsage; -}; - -enum uvc_buffer_state { - UVC_BUF_STATE_IDLE = 0, - UVC_BUF_STATE_QUEUED = 1, - UVC_BUF_STATE_ACTIVE = 2, - UVC_BUF_STATE_READY = 3, - UVC_BUF_STATE_DONE = 4, - UVC_BUF_STATE_ERROR = 5, -}; - -struct uvc_buffer { - struct vb2_buffer buf; - struct list_head queue; - _Mutex mutex; - enum uvc_buffer_state state; - unsigned int error; - - void *mem; - unsigned int length; - unsigned int bytesused; - - u32 pts; -}; - -#define UVC_QUEUE_DISCONNECTED (1 << 0) -#define UVC_QUEUE_DROP_CORRUPTED (1 << 1) - -struct uvc_video_queue { - struct vb2_queue queue; - //struct mutex mutex; /* Protects queue */ - _Mutex mutex; - unsigned int flags; - unsigned int buf_used; - - //spinlock_t irqlock; /* Protects irqqueue */ - //_LOCK_T irqlock; - _Mutex irqlock; - struct list_head irqqueue; -}; - -struct uvc_video_chain { - struct uvc_device *dev; - struct list_head list; - - struct list_head entities; /* All entities */ - struct uvc_entity *processing; /* Processing unit */ - struct uvc_entity *selector; /* Selector unit */ - - //struct mutex ctrl_mutex; /* Protects ctrl.info */ - _Mutex ctrl_mutex; - - struct v4l2_prio_state prio; /* V4L2 priority state */ - u32 caps; /* V4L2 chain-wide caps */ -}; - -struct uvc_stats_frame { - unsigned int size; /* Number of bytes captured */ - unsigned int first_data; /* Index of the first non-empty packet */ - - unsigned int nb_packets; /* Number of packets */ - unsigned int nb_empty; /* Number of empty packets */ - unsigned int nb_invalid; /* Number of packets with an invalid header */ - unsigned int nb_errors; /* Number of packets with the error bit set */ - - unsigned int nb_pts; /* Number of packets with a PTS timestamp */ - unsigned int nb_pts_diffs; /* Number of PTS differences inside a frame */ - unsigned int last_pts_diff; /* Index of the last PTS difference */ - bool has_initial_pts; /* Whether the first non-empty packet has a PTS */ - bool has_early_pts; /* Whether a PTS is present before the first non-empty packet */ - u32 pts; /* PTS of the last packet */ - - unsigned int nb_scr; /* Number of packets with a SCR timestamp */ - unsigned int nb_scr_diffs; /* Number of SCR.STC differences inside a frame */ - u16 scr_sof; /* SCR.SOF of the last packet */ - u32 scr_stc; /* SCR.STC of the last packet */ -}; - -struct uvc_stats_stream { - //struct timespec start_ts; /* Stream start timestamp */ - //struct timespec stop_ts; /* Stream stop timestamp */ - u32 start_ts; - u32 stop_ts; - - - unsigned int nb_frames; /* Number of frames */ - - unsigned int nb_packets; /* Number of packets */ - unsigned int nb_empty; /* Number of empty packets */ - unsigned int nb_invalid; /* Number of packets with an invalid header */ - unsigned int nb_errors; /* Number of packets with the error bit set */ - - unsigned int nb_pts_constant; /* Number of frames with constant PTS */ - unsigned int nb_pts_early; /* Number of frames with early PTS */ - unsigned int nb_pts_initial; /* Number of frames with initial PTS */ - - unsigned int nb_scr_count_ok; /* Number of frames with at least one SCR per non empty packet */ - unsigned int nb_scr_diffs_ok; /* Number of frames with varying SCR.STC */ - unsigned int scr_sof_count; /* STC.SOF counter accumulated since stream start */ - unsigned int scr_sof; /* STC.SOF of the last packet */ - unsigned int min_sof; /* Minimum STC.SOF value */ - unsigned int max_sof; /* Maximum STC.SOF value */ -}; - -struct uvc_streaming { - struct list_head list; - struct uvc_device *dev; - struct video_device *vdev; - struct uvc_video_chain *chain; - atomic_t active; - - struct usb_interface *intf; - int intfnum; - __u16 maxpsize; - - struct uvc_streaming_header header; - enum v4l2_buf_type type; - - unsigned int nformats; - struct uvc_format *format; - - struct uvc_streaming_control ctrl; - struct uvc_format *def_format; - struct uvc_format *cur_format; - struct uvc_frame *cur_frame; - /* Protect access to ctrl, cur_format, cur_frame and hardware video - * probe control. - */ - //struct mutex mutex; - _Mutex mutex; - - /* Buffers queue. */ - unsigned int frozen : 1; - struct uvc_video_queue queue; - void (*decode) (struct urb *urb, struct uvc_streaming *video, - struct uvc_buffer *buf); - - /* Context data used by the bulk completion handler. */ - struct { - __u8 header[256]; - unsigned int header_size; - int skip_payload; - __u32 payload_size; - __u32 max_payload_size; - } bulk; - - struct urb *urb[UVC_URBS]; - char *urb_buffer[UVC_URBS]; - dma_addr_t urb_dma[UVC_URBS]; - unsigned int urb_size; - - - - - - - __u32 sequence; - __u8 last_fid; - - /* debugfs */ - //struct dentry *debugfs_dir; - struct { - struct uvc_stats_frame frame; - struct uvc_stats_stream stream; - } stats; - - /* Timestamps support. */ - struct uvc_clock { - struct uvc_clock_sample { - u32 dev_stc; - u16 dev_sof; - //struct timespec host_ts; - u32 host_ts; //change to tick - u16 host_sof; - } *samples; - - unsigned int head; - unsigned int count; - unsigned int size; - - u16 last_sof; - u16 sof_offset; - - //spinlock_t lock; - _Lock lock; - } clock; -}; - -enum uvc_device_state { - UVC_DEV_DISCONNECTED = 1, -}; - -struct uvc_device { - struct usb_device *udev; - struct usb_interface *intf; - unsigned long warnings; - __u32 quirks; - int intfnum; - char name[32]; - - enum uvc_device_state state; - //struct mutex lock; /* Protects users */ - _Mutex lock; - unsigned int users; - atomic_t nmappings; - - /* Video control interface */ -#ifdef CONFIG_MEDIA_CONTROLLER - struct media_device mdev; -#endif - struct v4l2_device vdev; - __u16 uvc_version; - __u32 clock_frequency; - - struct list_head entities; // VC_EXTENSION_UNIT ->VC_INPUT_TERMINAL ->VC_PROCESSING_UNIT ->VC_OUTPUT_TERMINAL - struct list_head chains; - - /* Video Streaming interfaces */ - struct list_head streams; - atomic_t nstreams; - - /* Status Interrupt Endpoint */ - struct usb_host_endpoint *int_ep; - struct urb *int_urb; - __u8 *status; - //struct input_dev *input; - char input_phys[64]; -}; - -enum uvc_handle_state { - UVC_HANDLE_PASSIVE = 0, - UVC_HANDLE_ACTIVE = 1, -}; - -/* uvc file handle */ -struct uvc_fh { - struct v4l2_fh vfh; - struct uvc_video_chain *chain; - struct uvc_streaming *stream; - enum uvc_handle_state state; -}; -#if 0 -/* uvc_driver = usb_driver for interface - * - identifies USB interface driver to usbcore - */ -struct uvc_driver { - struct usb_driver driver; -}; -#endif - -/* ------------------------------------------------------------------------ - * Debugging, printing and logging - */ - -#define UVC_TRACE_PROBE (1 << 0) -#define UVC_TRACE_DESCR (1 << 1) -#define UVC_TRACE_CONTROL (1 << 2) -#define UVC_TRACE_FORMAT (1 << 3) -#define UVC_TRACE_CAPTURE (1 << 4) -#define UVC_TRACE_CALLS (1 << 5) -#define UVC_TRACE_IOCTL (1 << 6) -#define UVC_TRACE_FRAME (1 << 7) -#define UVC_TRACE_SUSPEND (1 << 8) -#define UVC_TRACE_STATUS (1 << 9) -#define UVC_TRACE_VIDEO (1 << 10) -#define UVC_TRACE_STATS (1 << 11) -#define UVC_TRACE_CLOCK (1 << 12) - -#define UVC_WARN_MINMAX 0 -#define UVC_WARN_PROBE_DEF 1 -#define UVC_WARN_XU_GET_RES 2 - -extern unsigned int uvc_clock_param; -extern unsigned int uvc_no_drop_param; -extern unsigned int uvc_trace_param; -extern unsigned int uvc_timeout_param; - -#if 0 -#define uvc_trace(flag, msg...) \ - do { \ - if (uvc_trace_param & flag) \ - printk(KERN_DEBUG "uvcvideo: " msg); \ - } while (0) - -#define uvc_warn_once(dev, warn, msg...) \ - do { \ - if (!test_and_set_bit(warn, &dev->warnings)) \ - printk(KERN_INFO "uvcvideo: " msg); \ - } while (0) - -#define uvc_printk(level, msg...) \ - printk(level "uvcvideo: " msg) -#endif - -/* -------------------------------------------------------------------------- - * Internal functions. - */ - -/* Core driver */ -extern struct uvc_driver uvc_driver; - -extern struct uvc_entity *uvc_entity_by_id(struct uvc_device *dev, int id); - -/* Video buffers queue management. */ -extern int uvc_queue_init(struct uvc_video_queue *queue, - enum v4l2_buf_type type, int drop_corrupted); -extern int uvc_alloc_buffers(struct uvc_video_queue *queue, - struct v4l2_requestbuffers *rb); -extern void uvc_free_buffers(struct uvc_video_queue *queue); -extern int uvc_query_buffer(struct uvc_video_queue *queue, - struct v4l2_buffer *v4l2_buf); -extern int uvc_queue_buffer(struct uvc_video_queue *queue, - struct v4l2_buffer *v4l2_buf); -extern int uvc_dequeue_buffer(struct uvc_video_queue *queue, - struct v4l2_buffer *v4l2_buf, int nonblocking); -extern int uvc_queue_enable(struct uvc_video_queue *queue, int enable); -extern void uvc_queue_cancel(struct uvc_video_queue *queue, int disconnect); -extern struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue, - struct uvc_buffer *buf); -extern int uvc_queue_mmap(struct uvc_video_queue *queue); -#if 0 -extern unsigned int uvc_queue_poll(struct uvc_video_queue *queue, - struct file *file, poll_table *wait); -#endif - -#ifndef CONFIG_MMU -extern unsigned long uvc_queue_get_unmapped_area(struct uvc_video_queue *queue, - unsigned long pgoff); -#endif - -extern int uvc_queue_allocated(struct uvc_video_queue *queue); -static inline int uvc_queue_streaming(struct uvc_video_queue *queue) -{ - return vb2_is_streaming(&queue->queue); -} - -/* V4L2 interface */ -extern const struct v4l2_file_operations uvc_fops; - -/* Media controller */ -extern int uvc_mc_register_entities(struct uvc_video_chain *chain); -extern void uvc_mc_cleanup_entity(struct uvc_entity *entity); - -/* Video */ -extern int uvc_video_init(struct uvc_streaming *stream); -extern int uvc_video_suspend(struct uvc_streaming *stream); -extern int uvc_video_resume(struct uvc_streaming *stream, int reset); -extern int uvc_video_enable(struct uvc_streaming *stream, int enable); -extern int uvc_probe_video(struct uvc_streaming *stream, - struct uvc_streaming_control *probe); -/* edit by Ian -- patch for GEO */ -extern int uvc_commit_video(struct uvc_streaming *stream, - struct uvc_streaming_control *probe); - -extern int uvc_query_ctrl(struct uvc_device *dev, __u8 query, __u8 unit, - __u8 intfnum, __u8 cs, void *data, __u16 size); -/* edit by Ian -- disable uvc clock api*/ -#if 0 -void uvc_video_clock_update(struct uvc_streaming *stream, - struct v4l2_buffer *v4l2_buf, - struct uvc_buffer *buf); -#endif -/* Status */ -//#define UVC_STATUS_EN -#ifdef UVC_STATUS_EN -extern int uvc_status_init(struct uvc_device *dev); -extern void uvc_status_cleanup(struct uvc_device *dev); -extern int uvc_status_start(struct uvc_device *dev, gfp_t flags); -extern void uvc_status_stop(struct uvc_device *dev); -#endif - -/* Controls */ -extern const struct v4l2_subscribed_event_ops uvc_ctrl_sub_ev_ops; - -extern int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain, - struct v4l2_queryctrl *v4l2_ctrl); -extern int uvc_query_v4l2_menu(struct uvc_video_chain *chain, - struct v4l2_querymenu *query_menu); - -extern int uvc_ctrl_add_mapping(struct uvc_video_chain *chain, - const struct uvc_control_mapping *mapping); -extern int uvc_ctrl_init_device(struct uvc_device *dev); -extern void uvc_ctrl_cleanup_device(struct uvc_device *dev); -extern int uvc_ctrl_resume_device(struct uvc_device *dev); -extern int uvc_ctrl_begin(struct uvc_video_chain *chain); -extern int __uvc_ctrl_commit(struct uvc_fh *handle, int rollback, - const struct v4l2_ext_control *xctrls, - unsigned int xctrls_count); -static inline int uvc_ctrl_commit(struct uvc_fh *handle, - const struct v4l2_ext_control *xctrls, - unsigned int xctrls_count) -{ - return __uvc_ctrl_commit(handle, 0, xctrls, xctrls_count); -} -static inline int uvc_ctrl_rollback(struct uvc_fh *handle) -{ - return __uvc_ctrl_commit(handle, 1, NULL, 0); -} - -extern int uvc_ctrl_get(struct uvc_video_chain *chain, - struct v4l2_ext_control *xctrl); -extern int uvc_ctrl_set(struct uvc_video_chain *chain, - struct v4l2_ext_control *xctrl); - -//edit by Ian -- remove uvc_xu_ctrl_query declaration -//extern int uvc_xu_ctrl_query(struct uvc_video_chain *chain, struct uvc_xu_control_query *xqry); - -/* Utility functions */ -extern void uvc_simplify_fraction(uint32_t *numerator, uint32_t *denominator, - unsigned int n_terms, unsigned int threshold); -extern uint32_t uvc_fraction_to_interval(uint32_t numerator, - uint32_t denominator); -extern struct usb_host_endpoint *uvc_find_endpoint( - struct usb_host_interface *alts, __u8 epaddr); - -/* Quirks support */ -void uvc_video_decode_isight(struct urb *urb, struct uvc_streaming *stream, - struct uvc_buffer *buf); - -/* debugfs and statistics */ -#if 0 -int uvc_debugfs_init(void); -void uvc_debugfs_cleanup(void); -int uvc_debugfs_init_stream(struct uvc_streaming *stream); -void uvc_debugfs_cleanup_stream(struct uvc_streaming *stream); - -size_t uvc_video_stats_dump(struct uvc_streaming *stream, char *buf, - size_t size); -#endif -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/video.h b/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/video.h deleted file mode 100644 index a73ac29..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/usb_class/host/uvc/inc/video.h +++ /dev/null @@ -1,726 +0,0 @@ -/* - * USB Video Class definitions. - * - * Copyright (C) 2009 Laurent Pinchart - * - * This file holds USB constants and structures defined by the USB Device - * Class Definition for Video Devices. Unless otherwise stated, comments - * below reference relevant sections of the USB Video Class 1.1 specification - * available at - * - * http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1.zip - */ - -#ifndef __LINUX_USB_VIDEO_H -#define __LINUX_USB_VIDEO_H -#if 0 -#include -#endif -#include "uvc_os_wrap_via_osdep_api.h" - -/* -------------------------------------------------------------------------- - * UVC constants - */ - -/* A.2. Video Interface Subclass Codes */ -#define UVC_SC_UNDEFINED 0x00 -#define UVC_SC_VIDEOCONTROL 0x01 -#define UVC_SC_VIDEOSTREAMING 0x02 -#define UVC_SC_VIDEO_INTERFACE_COLLECTION 0x03 - -/* A.3. Video Interface Protocol Codes */ -#define UVC_PC_PROTOCOL_UNDEFINED 0x00 - -/* A.5. Video Class-Specific VC Interface Descriptor Subtypes */ -#define UVC_VC_DESCRIPTOR_UNDEFINED 0x00 -#define UVC_VC_HEADER 0x01 -#define UVC_VC_INPUT_TERMINAL 0x02 -#define UVC_VC_OUTPUT_TERMINAL 0x03 -#define UVC_VC_SELECTOR_UNIT 0x04 -#define UVC_VC_PROCESSING_UNIT 0x05 -#define UVC_VC_EXTENSION_UNIT 0x06 - -/* A.6. Video Class-Specific VS Interface Descriptor Subtypes */ -#define UVC_VS_UNDEFINED 0x00 -#define UVC_VS_INPUT_HEADER 0x01 -#define UVC_VS_OUTPUT_HEADER 0x02 -#define UVC_VS_STILL_IMAGE_FRAME 0x03 -#define UVC_VS_FORMAT_UNCOMPRESSED 0x04 -#define UVC_VS_FRAME_UNCOMPRESSED 0x05 -#define UVC_VS_FORMAT_MJPEG 0x06 -#define UVC_VS_FRAME_MJPEG 0x07 -#define UVC_VS_FORMAT_MPEG2TS 0x0a -#define UVC_VS_FORMAT_DV 0x0c -#define UVC_VS_COLORFORMAT 0x0d -#define UVC_VS_FORMAT_FRAME_BASED 0x10 -#define UVC_VS_FRAME_FRAME_BASED 0x11 -#define UVC_VS_FORMAT_STREAM_BASED 0x12 - -/* A.7. Video Class-Specific Endpoint Descriptor Subtypes */ -#define UVC_EP_UNDEFINED 0x00 -#define UVC_EP_GENERAL 0x01 -#define UVC_EP_ENDPOINT 0x02 -#define UVC_EP_INTERRUPT 0x03 - -/* A.8. Video Class-Specific Request Codes */ -#define UVC_RC_UNDEFINED 0x00 -#define UVC_SET_CUR 0x01 -#define UVC_GET_CUR 0x81 -#define UVC_GET_MIN 0x82 -#define UVC_GET_MAX 0x83 -#define UVC_GET_RES 0x84 -#define UVC_GET_LEN 0x85 -#define UVC_GET_INFO 0x86 -#define UVC_GET_DEF 0x87 - -/* A.9.1. VideoControl Interface Control Selectors */ -#define UVC_VC_CONTROL_UNDEFINED 0x00 -#define UVC_VC_VIDEO_POWER_MODE_CONTROL 0x01 -#define UVC_VC_REQUEST_ERROR_CODE_CONTROL 0x02 - -/* A.9.2. Terminal Control Selectors */ -#define UVC_TE_CONTROL_UNDEFINED 0x00 - -/* A.9.3. Selector Unit Control Selectors */ -#define UVC_SU_CONTROL_UNDEFINED 0x00 -#define UVC_SU_INPUT_SELECT_CONTROL 0x01 - -/* A.9.4. Camera Terminal Control Selectors */ -#define UVC_CT_CONTROL_UNDEFINED 0x00 -#define UVC_CT_SCANNING_MODE_CONTROL 0x01 -#define UVC_CT_AE_MODE_CONTROL 0x02 -#define UVC_CT_AE_PRIORITY_CONTROL 0x03 -#define UVC_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04 -#define UVC_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05 -#define UVC_CT_FOCUS_ABSOLUTE_CONTROL 0x06 -#define UVC_CT_FOCUS_RELATIVE_CONTROL 0x07 -#define UVC_CT_FOCUS_AUTO_CONTROL 0x08 -#define UVC_CT_IRIS_ABSOLUTE_CONTROL 0x09 -#define UVC_CT_IRIS_RELATIVE_CONTROL 0x0a -#define UVC_CT_ZOOM_ABSOLUTE_CONTROL 0x0b -#define UVC_CT_ZOOM_RELATIVE_CONTROL 0x0c -#define UVC_CT_PANTILT_ABSOLUTE_CONTROL 0x0d -#define UVC_CT_PANTILT_RELATIVE_CONTROL 0x0e -#define UVC_CT_ROLL_ABSOLUTE_CONTROL 0x0f -#define UVC_CT_ROLL_RELATIVE_CONTROL 0x10 -#define UVC_CT_PRIVACY_CONTROL 0x11 - -/* A.9.5. Processing Unit Control Selectors */ -#define UVC_PU_CONTROL_UNDEFINED 0x00 -#define UVC_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01 -#define UVC_PU_BRIGHTNESS_CONTROL 0x02 -#define UVC_PU_CONTRAST_CONTROL 0x03 -#define UVC_PU_GAIN_CONTROL 0x04 -#define UVC_PU_POWER_LINE_FREQUENCY_CONTROL 0x05 -#define UVC_PU_HUE_CONTROL 0x06 -#define UVC_PU_SATURATION_CONTROL 0x07 -#define UVC_PU_SHARPNESS_CONTROL 0x08 -#define UVC_PU_GAMMA_CONTROL 0x09 -#define UVC_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0a -#define UVC_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0b -#define UVC_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0c -#define UVC_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0d -#define UVC_PU_DIGITAL_MULTIPLIER_CONTROL 0x0e -#define UVC_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0f -#define UVC_PU_HUE_AUTO_CONTROL 0x10 -#define UVC_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11 -#define UVC_PU_ANALOG_LOCK_STATUS_CONTROL 0x12 - -/* A.9.7. VideoStreaming Interface Control Selectors */ -#define UVC_VS_CONTROL_UNDEFINED 0x00 -#define UVC_VS_PROBE_CONTROL 0x01 -#define UVC_VS_COMMIT_CONTROL 0x02 -#define UVC_VS_STILL_PROBE_CONTROL 0x03 -#define UVC_VS_STILL_COMMIT_CONTROL 0x04 -#define UVC_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05 -#define UVC_VS_STREAM_ERROR_CODE_CONTROL 0x06 -#define UVC_VS_GENERATE_KEY_FRAME_CONTROL 0x07 -#define UVC_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08 -#define UVC_VS_SYNC_DELAY_CONTROL 0x09 - -/* B.1. USB Terminal Types */ -#define UVC_TT_VENDOR_SPECIFIC 0x0100 -#define UVC_TT_STREAMING 0x0101 - -/* B.2. Input Terminal Types */ -#define UVC_ITT_VENDOR_SPECIFIC 0x0200 -#define UVC_ITT_CAMERA 0x0201 -#define UVC_ITT_MEDIA_TRANSPORT_INPUT 0x0202 - -/* B.3. Output Terminal Types */ -#define UVC_OTT_VENDOR_SPECIFIC 0x0300 -#define UVC_OTT_DISPLAY 0x0301 -#define UVC_OTT_MEDIA_TRANSPORT_OUTPUT 0x0302 - -/* B.4. External Terminal Types */ -#define UVC_EXTERNAL_VENDOR_SPECIFIC 0x0400 -#define UVC_COMPOSITE_CONNECTOR 0x0401 -#define UVC_SVIDEO_CONNECTOR 0x0402 -#define UVC_COMPONENT_CONNECTOR 0x0403 - -/* 2.4.2.2. Status Packet Type */ -#define UVC_STATUS_TYPE_CONTROL 1 -#define UVC_STATUS_TYPE_STREAMING 2 - -/* 2.4.3.3. Payload Header Information */ -#define UVC_STREAM_EOH (1 << 7) -#define UVC_STREAM_ERR (1 << 6) -#define UVC_STREAM_STI (1 << 5) -#define UVC_STREAM_RES (1 << 4) -#define UVC_STREAM_SCR (1 << 3) -#define UVC_STREAM_PTS (1 << 2) -#define UVC_STREAM_EOF (1 << 1) -#define UVC_STREAM_FID (1 << 0) - -/* 4.1.2. Control Capabilities */ -#define UVC_CONTROL_CAP_GET (1 << 0) -#define UVC_CONTROL_CAP_SET (1 << 1) -#define UVC_CONTROL_CAP_DISABLED (1 << 2) -#define UVC_CONTROL_CAP_AUTOUPDATE (1 << 3) -#define UVC_CONTROL_CAP_ASYNCHRONOUS (1 << 4) - -/* ------------------------------------------------------------------------ - * UVC structures - */ - -/* All UVC descriptors have these 3 fields at the beginning */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_descriptor_header { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; -} //__attribute__((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -/* 3.7.2. Video Control Interface Header Descriptor */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_header_descriptor { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u16 bcdUVC; - __u16 wTotalLength; - __u32 dwClockFrequency; - __u8 bInCollection; - __u8 baInterfaceNr[]; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_HEADER_SIZE(n) (12+(n)) - -#define UVC_HEADER_DESCRIPTOR(n) \ - uvc_header_descriptor_##n - -#define DECLARE_UVC_HEADER_DESCRIPTOR(n) \ -struct UVC_HEADER_DESCRIPTOR(n) { \ - __u8 bLength; \ - __u8 bDescriptorType; \ - __u8 bDescriptorSubType; \ - __u16 bcdUVC; \ - __u16 wTotalLength; \ - __u32 dwClockFrequency; \ - __u8 bInCollection; \ - __u8 baInterfaceNr[n]; \ -} __attribute__ ((packed)) - -/* 3.7.2.1. Input Terminal Descriptor */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_input_terminal_descriptor { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u8 bTerminalID; - __u16 wTerminalType; - __u8 bAssocTerminal; - __u8 iTerminal; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_INPUT_TERMINAL_SIZE 8 - -/* 3.7.2.2. Output Terminal Descriptor */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_output_terminal_descriptor { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u8 bTerminalID; - __u16 wTerminalType; - __u8 bAssocTerminal; - __u8 bSourceID; - __u8 iTerminal; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_OUTPUT_TERMINAL_SIZE 9 - -/* 3.7.2.3. Camera Terminal Descriptor */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_camera_terminal_descriptor { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u8 bTerminalID; - __u16 wTerminalType; - __u8 bAssocTerminal; - __u8 iTerminal; - __u16 wObjectiveFocalLengthMin; - __u16 wObjectiveFocalLengthMax; - __u16 wOcularFocalLength; - __u8 bControlSize; - __u8 bmControls[3]; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_CAMERA_TERMINAL_SIZE(n) (15+(n)) - -/* 3.7.2.4. Selector Unit Descriptor */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_selector_unit_descriptor { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u8 bUnitID; - __u8 bNrInPins; -// __u8 baSourceID[0]; - __u8 * baSourceID; - __u8 iSelector; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_SELECTOR_UNIT_SIZE(n) (6+(n)) - -#define UVC_SELECTOR_UNIT_DESCRIPTOR(n) \ - uvc_selector_unit_descriptor_##n - -#define DECLARE_UVC_SELECTOR_UNIT_DESCRIPTOR(n) \ -struct UVC_SELECTOR_UNIT_DESCRIPTOR(n) { \ - __u8 bLength; \ - __u8 bDescriptorType; \ - __u8 bDescriptorSubType; \ - __u8 bUnitID; \ - __u8 bNrInPins; \ - __u8 baSourceID[n]; \ - __u8 iSelector; \ -} __attribute__ ((packed)) - -/* 3.7.2.5. Processing Unit Descriptor */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_processing_unit_descriptor { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u8 bUnitID; - __u8 bSourceID; - __u16 wMaxMultiplier; - __u8 bControlSize; - __u8 bmControls[2]; - __u8 iProcessing; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_PROCESSING_UNIT_SIZE(n) (9+(n)) - -/* 3.7.2.6. Extension Unit Descriptor */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_extension_unit_descriptor { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u8 bUnitID; - __u8 guidExtensionCode[16]; - __u8 bNumControls; - __u8 bNrInPins; -// __u8 baSourceID[0]; - __u8 * baSourceID; - __u8 bControlSize; -// __u8 bmControls[0]; - __u8 * bmControls; - __u8 iExtension; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_EXTENSION_UNIT_SIZE(p, n) (24+(p)+(n)) - -#define UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) \ - uvc_extension_unit_descriptor_##p_##n - -#define DECLARE_UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) \ -struct UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) { \ - __u8 bLength; \ - __u8 bDescriptorType; \ - __u8 bDescriptorSubType; \ - __u8 bUnitID; \ - __u8 guidExtensionCode[16]; \ - __u8 bNumControls; \ - __u8 bNrInPins; \ - __u8 baSourceID[p]; \ - __u8 bControlSize; \ - __u8 bmControls[n]; \ - __u8 iExtension; \ -} __attribute__ ((packed)) - -/* 3.8.2.2. Video Control Interrupt Endpoint Descriptor */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_control_endpoint_descriptor { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u16 wMaxTransferSize; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_CONTROL_ENDPOINT_SIZE 5 - -/* 3.9.2.1. Input Header Descriptor */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_input_header_descriptor { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u8 bNumFormats; - __u16 wTotalLength; - __u8 bEndpointAddress; - __u8 bmInfo; - __u8 bTerminalLink; - __u8 bStillCaptureMethod; - __u8 bTriggerSupport; - __u8 bTriggerUsage; - __u8 bControlSize; - __u8 bmaControls[]; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_INPUT_HEADER_SIZE(n, p) (13+(n*p)) - -#define UVC_INPUT_HEADER_DESCRIPTOR(n, p) \ - uvc_input_header_descriptor_##n_##p - -#define DECLARE_UVC_INPUT_HEADER_DESCRIPTOR(n, p) \ -struct UVC_INPUT_HEADER_DESCRIPTOR(n, p) { \ - __u8 bLength; \ - __u8 bDescriptorType; \ - __u8 bDescriptorSubType; \ - __u8 bNumFormats; \ - __u16 wTotalLength; \ - __u8 bEndpointAddress; \ - __u8 bmInfo; \ - __u8 bTerminalLink; \ - __u8 bStillCaptureMethod; \ - __u8 bTriggerSupport; \ - __u8 bTriggerUsage; \ - __u8 bControlSize; \ - __u8 bmaControls[p][n]; \ -} __attribute__ ((packed)) - -/* 3.9.2.2. Output Header Descriptor */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_output_header_descriptor { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u8 bNumFormats; - __u16 wTotalLength; - __u8 bEndpointAddress; - __u8 bTerminalLink; - __u8 bControlSize; - __u8 bmaControls[]; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_OUTPUT_HEADER_SIZE(n, p) (9+(n*p)) - -#define UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) \ - uvc_output_header_descriptor_##n_##p - -#define DECLARE_UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) \ -struct UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) { \ - __u8 bLength; \ - __u8 bDescriptorType; \ - __u8 bDescriptorSubType; \ - __u8 bNumFormats; \ - __u16 wTotalLength; \ - __u8 bEndpointAddress; \ - __u8 bTerminalLink; \ - __u8 bControlSize; \ - __u8 bmaControls[p][n]; \ -} __attribute__ ((packed)) - -/* 3.9.2.6. Color matching descriptor */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_color_matching_descriptor { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u8 bColorPrimaries; - __u8 bTransferCharacteristics; - __u8 bMatrixCoefficients; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_COLOR_MATCHING_SIZE 6 - -/* 4.3.1.1. Video Probe and Commit Controls */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_streaming_control { - __u16 bmHint; - __u8 bFormatIndex; - __u8 bFrameIndex; - __u32 dwFrameInterval; - __u16 wKeyFrameRate; - __u16 wPFrameRate; - __u16 wCompQuality; - __u16 wCompWindowSize; - __u16 wDelay; - __u32 dwMaxVideoFrameSize; - __u32 dwMaxPayloadTransferSize; - __u32 dwClockFrequency; - __u8 bmFramingInfo; - __u8 bPreferedVersion; - __u8 bMinVersion; - __u8 bMaxVersion; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -/* Uncompressed Payload - 3.1.1. Uncompressed Video Format Descriptor */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_format_uncompressed { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u8 bFormatIndex; - __u8 bNumFrameDescriptors; - __u8 guidFormat[16]; - __u8 bBitsPerPixel; - __u8 bDefaultFrameIndex; - __u8 bAspectRatioX; - __u8 bAspectRatioY; - __u8 bmInterfaceFlags; - __u8 bCopyProtect; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_FORMAT_UNCOMPRESSED_SIZE 27 - -/* Uncompressed Payload - 3.1.2. Uncompressed Video Frame Descriptor */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_frame_uncompressed { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u8 bFrameIndex; - __u8 bmCapabilities; - __u16 wWidth; - __u16 wHeight; - __u32 dwMinBitRate; - __u32 dwMaxBitRate; - __u32 dwMaxVideoFrameBufferSize; - __u32 dwDefaultFrameInterval; - __u8 bFrameIntervalType; - __u32 dwFrameInterval[]; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_FRAME_UNCOMPRESSED_SIZE(n) (26+4*(n)) - -#define UVC_FRAME_UNCOMPRESSED(n) \ - uvc_frame_uncompressed_##n - -#define DECLARE_UVC_FRAME_UNCOMPRESSED(n) \ -struct UVC_FRAME_UNCOMPRESSED(n) { \ - __u8 bLength; \ - __u8 bDescriptorType; \ - __u8 bDescriptorSubType; \ - __u8 bFrameIndex; \ - __u8 bmCapabilities; \ - __u16 wWidth; \ - __u16 wHeight; \ - __u32 dwMinBitRate; \ - __u32 dwMaxBitRate; \ - __u32 dwMaxVideoFrameBufferSize; \ - __u32 dwDefaultFrameInterval; \ - __u8 bFrameIntervalType; \ - __u32 dwFrameInterval[n]; \ -} __attribute__ ((packed)) - -/* MJPEG Payload - 3.1.1. MJPEG Video Format Descriptor */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct uvc_format_mjpeg { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u8 bFormatIndex; - __u8 bNumFrameDescriptors; - __u8 bmFlags; - __u8 bDefaultFrameIndex; - __u8 bAspectRatioX; - __u8 bAspectRatioY; - __u8 bmInterfaceFlags; - __u8 bCopyProtect; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_FORMAT_MJPEG_SIZE 11 -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -/* MJPEG Payload - 3.1.2. MJPEG Video Frame Descriptor */ - -struct uvc_frame_mjpeg { - __u8 bLength; - __u8 bDescriptorType; - __u8 bDescriptorSubType; - __u8 bFrameIndex; - __u8 bmCapabilities; - __u16 wWidth; - __u16 wHeight; - __u32 dwMinBitRate; - __u32 dwMaxBitRate; - __u32 dwMaxVideoFrameBufferSize; - __u32 dwDefaultFrameInterval; - __u8 bFrameIntervalType; - __u32 dwFrameInterval[]; -} //__attribute__((__packed__)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define UVC_DT_FRAME_MJPEG_SIZE(n) (26+4*(n)) - -#define UVC_FRAME_MJPEG(n) \ - uvc_frame_mjpeg_##n - -#define DECLARE_UVC_FRAME_MJPEG(n) \ -struct UVC_FRAME_MJPEG(n) { \ - __u8 bLength; \ - __u8 bDescriptorType; \ - __u8 bDescriptorSubType; \ - __u8 bFrameIndex; \ - __u8 bmCapabilities; \ - __u16 wWidth; \ - __u16 wHeight; \ - __u32 dwMinBitRate; \ - __u32 dwMaxBitRate; \ - __u32 dwMaxVideoFrameBufferSize; \ - __u32 dwDefaultFrameInterval; \ - __u8 bFrameIntervalType; \ - __u32 dwFrameInterval[n]; \ -} __attribute__ ((packed)) - -#endif /* __LINUX_USB_VIDEO_H */ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/HalPwrSeqCmd.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/HalPwrSeqCmd.h deleted file mode 100644 index bf3799c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/HalPwrSeqCmd.h +++ /dev/null @@ -1,136 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __HALPWRSEQCMD_H__ -#define __HALPWRSEQCMD_H__ - -/*---------------------------------------------*/ -//3 The value of cmd: 4 bits -/*---------------------------------------------*/ -#define PWR_CMD_READ 0x00 - // offset: the read register offset - // msk: the mask of the read value - // value: N/A, left by 0 - // note: dirver shall implement this function by read & msk - -#define PWR_CMD_WRITE 0x01 - // offset: the read register offset - // msk: the mask of the write bits - // value: write value - // note: driver shall implement this cmd by read & msk after write - -#define PWR_CMD_POLLING 0x02 - // offset: the read register offset - // msk: the mask of the polled value - // value: the value to be polled, masked by the msd field. - // note: driver shall implement this cmd by - // do{ - // if( (Read(offset) & msk) == (value & msk) ) - // break; - // } while(not timeout); - -#define PWR_CMD_DELAY 0x03 - // offset: the value to delay - // msk: N/A - // value: the unit of delay, 0: us, 1: ms - -#define PWR_CMD_END 0x04 - // offset: N/A - // msk: N/A - // value: N/A - -/*---------------------------------------------*/ -//3 The value of base: 4 bits -/*---------------------------------------------*/ - // define the base address of each block -#define PWR_BASEADDR_MAC 0x00 -#define PWR_BASEADDR_USB 0x01 -#define PWR_BASEADDR_PCIE 0x02 -#define PWR_BASEADDR_SDIO 0x03 - -/*---------------------------------------------*/ -//3 The value of interface_msk: 4 bits -/*---------------------------------------------*/ -#define PWR_INTF_SDIO_MSK BIT(0) -#define PWR_INTF_USB_MSK BIT(1) -#define PWR_INTF_PCI_MSK BIT(2) -#define PWR_INTF_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3)) - -/*---------------------------------------------*/ -//3 The value of fab_msk: 4 bits -/*---------------------------------------------*/ -#define PWR_FAB_TSMC_MSK BIT(0) -#define PWR_FAB_UMC_MSK BIT(1) -#define PWR_FAB_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3)) - -/*---------------------------------------------*/ -//3 The value of cut_msk: 8 bits -/*---------------------------------------------*/ -#define PWR_CUT_TESTCHIP_MSK BIT(0) -#define PWR_CUT_A_MSK BIT(1) -#define PWR_CUT_B_MSK BIT(2) -#define PWR_CUT_C_MSK BIT(3) -#define PWR_CUT_D_MSK BIT(4) -#define PWR_CUT_E_MSK BIT(5) -#define PWR_CUT_F_MSK BIT(6) -#define PWR_CUT_G_MSK BIT(7) -#define PWR_CUT_ALL_MSK 0xFF - - -typedef enum _PWRSEQ_CMD_DELAY_UNIT_ -{ - PWRSEQ_DELAY_US, - PWRSEQ_DELAY_MS, -} PWRSEQ_DELAY_UNIT; - -typedef struct _WL_PWR_CFG_ -{ - uint16_t offset; - uint8_t cut_msk; - uint8_t fab_msk:4; - uint8_t interface_msk:4; - uint8_t base:4; - uint8_t cmd:4; - uint8_t msk; - uint8_t value; -} WLAN_PWR_CFG, *PWLAN_PWR_CFG; - - -#define GET_PWR_CFG_OFFSET(__PWR_CMD) __PWR_CMD.offset -#define GET_PWR_CFG_CUT_MASK(__PWR_CMD) __PWR_CMD.cut_msk -#define GET_PWR_CFG_FAB_MASK(__PWR_CMD) __PWR_CMD.fab_msk -#define GET_PWR_CFG_INTF_MASK(__PWR_CMD) __PWR_CMD.interface_msk -#define GET_PWR_CFG_BASE(__PWR_CMD) __PWR_CMD.base -#define GET_PWR_CFG_CMD(__PWR_CMD) __PWR_CMD.cmd -#define GET_PWR_CFG_MASK(__PWR_CMD) __PWR_CMD.msk -#define GET_PWR_CFG_VALUE(__PWR_CMD) __PWR_CMD.value - - -//================================================================================ -// Prototype of protected function. -//================================================================================ -uint8_t HalPwrSeqCmdParsing( - _adapter * padapter, - uint8_t CutVersion, - uint8_t FabVersion, - uint8_t InterfaceType, - WLAN_PWR_CFG PwrCfgCmd[]); - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/HalVerDef.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/HalVerDef.h deleted file mode 100644 index 6ffea51..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/HalVerDef.h +++ /dev/null @@ -1,178 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __HAL_VERSION_DEF_H__ -#define __HAL_VERSION_DEF_H__ - -#ifndef TRUE -#define TRUE _TRUE -#endif -#ifndef FALSE -#define FALSE _FALSE -#endif - -// HAL_IC_TYPE_E -typedef enum tag_HAL_IC_Type_Definition -{ - CHIP_8192S = 0, - CHIP_8188C = 1, - CHIP_8192C = 2, - CHIP_8192D = 3, - CHIP_8723A = 4, - CHIP_8188E = 5, - CHIP_8812 = 6, - CHIP_8821 = 7, - CHIP_8723B = 8, - CHIP_8192E = 9, - CHIP_8195A = 10, - CHIP_8710B = 11, - CHIP_8188F = 12, -}HAL_IC_TYPE_E; - -//HAL_CHIP_TYPE_E -typedef enum tag_HAL_CHIP_Type_Definition -{ - TEST_CHIP = 0, - NORMAL_CHIP = 1, - FPGA = 2, -}HAL_CHIP_TYPE_E; - -//HAL_CUT_VERSION_E -typedef enum tag_HAL_Cut_Version_Definition -{ - A_CUT_VERSION = 0, - B_CUT_VERSION = 1, - C_CUT_VERSION = 2, - D_CUT_VERSION = 3, - E_CUT_VERSION = 4, - F_CUT_VERSION = 5, - G_CUT_VERSION = 6, - H_CUT_VERSION = 7, - I_CUT_VERSION = 8, - J_CUT_VERSION = 9, - K_CUT_VERSION = 10, -}HAL_CUT_VERSION_E; - -// HAL_Manufacturer -typedef enum tag_HAL_Manufacturer_Version_Definition -{ - CHIP_VENDOR_TSMC = 0, - CHIP_VENDOR_UMC = 1, - CHIP_VENDOR_SMIC = 2, -}HAL_VENDOR_E; - -typedef enum tag_HAL_RF_Type_Definition -{ - RF_TYPE_1T1R = 0, - RF_TYPE_1T2R = 1, - RF_TYPE_2T2R = 2, - RF_TYPE_2T3R = 3, - RF_TYPE_2T4R = 4, - RF_TYPE_3T3R = 5, - RF_TYPE_3T4R = 6, - RF_TYPE_4T4R = 7, -}HAL_RF_TYPE_E; - -typedef struct tag_HAL_VERSION -{ - HAL_IC_TYPE_E ICType; - HAL_CHIP_TYPE_E ChipType; - HAL_CUT_VERSION_E CUTVersion; - HAL_VENDOR_E VendorType; - HAL_RF_TYPE_E RFType; - uint8_t ROMVer; -}HAL_VERSION,*PHAL_VERSION; - -//VERSION_8192C VersionID; -//HAL_VERSION VersionID; - -// Get element -#define GET_CVID_IC_TYPE(version) ((HAL_IC_TYPE_E)((version).ICType) ) -#define GET_CVID_CHIP_TYPE(version) ((HAL_CHIP_TYPE_E)((version).ChipType) ) -#define GET_CVID_RF_TYPE(version) ((HAL_RF_TYPE_E)((version).RFType)) -#define GET_CVID_MANUFACTUER(version) ((HAL_VENDOR_E)((version).VendorType)) -#define GET_CVID_CUT_VERSION(version) ((HAL_CUT_VERSION_E)((version).CUTVersion)) -#define GET_CVID_ROM_VERSION(version) (((version).ROMVer) & ROM_VERSION_MASK) - -//---------------------------------------------------------------------------- -//Common Macro. -- -//---------------------------------------------------------------------------- -//HAL_VERSION VersionID - -// HAL_IC_TYPE_E -#define IS_81XXC(version) (((GET_CVID_IC_TYPE(version) == CHIP_8192C)||(GET_CVID_IC_TYPE(version) == CHIP_8188C))? TRUE : FALSE) -#define IS_8723_SERIES(version) ((GET_CVID_IC_TYPE(version) == CHIP_8723A)? TRUE : FALSE) -#define IS_92D(version) ((GET_CVID_IC_TYPE(version) == CHIP_8192D)? TRUE : FALSE) -#define IS_8188E(version) ((GET_CVID_IC_TYPE(version) == CHIP_8188E)? TRUE : FALSE) -#define IS_8192E(version) ((GET_CVID_IC_TYPE(version) == CHIP_8192E)? TRUE : FALSE) -#define IS_8812_SERIES(version) ((GET_CVID_IC_TYPE(version) == CHIP_8812)? TRUE : FALSE) -#define IS_8821_SERIES(version) ((GET_CVID_IC_TYPE(version) == CHIP_8821)? TRUE : FALSE) -#define IS_8723B_SERIES(version) ((GET_CVID_IC_TYPE(version) == CHIP_8723B)? TRUE : FALSE) -#define IS_8710B_SERIES(version) ((GET_CVID_IC_TYPE(version) == CHIP_8710B)? TRUE : FALSE) -#define IS_8188F(version) ((GET_CVID_IC_TYPE(version) == CHIP_8188F)? TRUE : FALSE) - -//HAL_CHIP_TYPE_E -#define IS_TEST_CHIP(version) ((GET_CVID_CHIP_TYPE(version)==TEST_CHIP)? TRUE: FALSE) -#define IS_NORMAL_CHIP(version) ((GET_CVID_CHIP_TYPE(version)==NORMAL_CHIP)? TRUE: FALSE) - -//HAL_CUT_VERSION_E -#define IS_A_CUT(version) ((GET_CVID_CUT_VERSION(version) == A_CUT_VERSION) ? TRUE : FALSE) -#define IS_B_CUT(version) ((GET_CVID_CUT_VERSION(version) == B_CUT_VERSION) ? TRUE : FALSE) -#define IS_C_CUT(version) ((GET_CVID_CUT_VERSION(version) == C_CUT_VERSION) ? TRUE : FALSE) -#define IS_D_CUT(version) ((GET_CVID_CUT_VERSION(version) == D_CUT_VERSION) ? TRUE : FALSE) -#define IS_E_CUT(version) ((GET_CVID_CUT_VERSION(version) == E_CUT_VERSION) ? TRUE : FALSE) -#define IS_I_CUT(version) ((GET_CVID_CUT_VERSION(version) == I_CUT_VERSION) ? TRUE : FALSE) -#define IS_J_CUT(version) ((GET_CVID_CUT_VERSION(version) == J_CUT_VERSION) ? TRUE : FALSE) -#define IS_K_CUT(version) ((GET_CVID_CUT_VERSION(version) == K_CUT_VERSION) ? TRUE : FALSE) - -//HAL_VENDOR_E -#define IS_CHIP_VENDOR_TSMC(version) ((GET_CVID_MANUFACTUER(version) == CHIP_VENDOR_TSMC)? TRUE: FALSE) -#define IS_CHIP_VENDOR_UMC(version) ((GET_CVID_MANUFACTUER(version) == CHIP_VENDOR_UMC)? TRUE: FALSE) -#define IS_CHIP_VENDOR_SMIC(version) ((GET_CVID_MANUFACTUER(version) == CHIP_VENDOR_SMIC)? TRUE: FALSE) - -//HAL_RF_TYPE_E -#define IS_1T1R(version) ((GET_CVID_RF_TYPE(version) == RF_TYPE_1T1R)? TRUE : FALSE ) -#define IS_1T2R(version) ((GET_CVID_RF_TYPE(version) == RF_TYPE_1T2R)? TRUE : FALSE) -#define IS_2T2R(version) ((GET_CVID_RF_TYPE(version) == RF_TYPE_2T2R)? TRUE : FALSE) - - -//---------------------------------------------------------------------------- -//Chip version Macro. -- -//---------------------------------------------------------------------------- -#define IS_81XXC_TEST_CHIP(version) ((IS_81XXC(version) && (!IS_NORMAL_CHIP(version)))? TRUE: FALSE) - -#define IS_92C_SERIAL(version) ((IS_81XXC(version) && IS_2T2R(version)) ? TRUE : FALSE) -#define IS_81xxC_VENDOR_UMC_A_CUT(version) (IS_81XXC(version)?(IS_CHIP_VENDOR_UMC(version) ? (IS_A_CUT(version) ? TRUE : FALSE) : FALSE): FALSE) -#define IS_81xxC_VENDOR_UMC_B_CUT(version) (IS_81XXC(version)?(IS_CHIP_VENDOR_UMC(version) ? (IS_B_CUT(version) ? TRUE : FALSE) : FALSE): FALSE) -#define IS_81xxC_VENDOR_UMC_C_CUT(version) (IS_81XXC(version)?(IS_CHIP_VENDOR_UMC(version) ? (IS_C_CUT(version) ? TRUE : FALSE) : FALSE): FALSE) - -#define IS_NORMAL_CHIP92D(version) (( IS_92D(version))?((GET_CVID_CHIP_TYPE(version)==NORMAL_CHIP)? TRUE: FALSE):FALSE) - -#define IS_92D_SINGLEPHY(version) ((IS_92D(version)) ? (IS_2T2R(version) ? TRUE: FALSE) : FALSE) -#define IS_92D_C_CUT(version) ((IS_92D(version)) ? (IS_C_CUT(version) ? TRUE : FALSE) : FALSE) -#define IS_92D_D_CUT(version) ((IS_92D(version)) ? (IS_D_CUT(version) ? TRUE : FALSE) : FALSE) -#define IS_92D_E_CUT(version) ((IS_92D(version)) ? (IS_E_CUT(version) ? TRUE : FALSE) : FALSE) - -#define IS_8723A_A_CUT(version) ((IS_8723_SERIES(version)) ? ( IS_A_CUT(version)?TRUE : FALSE) : FALSE) -#define IS_8723A_B_CUT(version) ((IS_8723_SERIES(version)) ? ( IS_B_CUT(version)?TRUE : FALSE) : FALSE) - -#define IS_VENDOR_8188E_I_CUT_SERIES(_Adapter) ((IS_8188E(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) >= I_CUT_VERSION) ? TRUE : FALSE) : FALSE) - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/autoconf.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/autoconf.h deleted file mode 100644 index aabc56d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/autoconf.h +++ /dev/null @@ -1,516 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef WLANCONFIG_H -#define WLANCONFIG_H - -/* - * Include user defined options first. Anything not defined in these files - * will be set to standard values. Override anything you dont like! - */ -#if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) || defined(CONFIG_HARDWARE_8188F) -#include "platform_opts.h" -#endif - -#if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) -#define CONFIG_PLATFORM_AMEBA_X -#endif - -#if !defined(CONFIG_PLATFORM_AMEBA_X) -#define PLATFORM_FREERTOS 1 -#define CONFIG_GSPI_HCI -#else -#define CONFIG_LX_HCI -#endif - -#ifndef CONFIG_INIC_EN -#define CONFIG_INIC_EN 0 //For iNIC project -#endif - -#if CONFIG_INIC_EN -#define CONFIG_LWIP_LAYER 0 -#endif - -#define CONFIG_LITTLE_ENDIAN -#define CONFIG_80211N_HT -//#define CONFIG_RECV_REORDERING_CTRL -#define RTW_NOTCH_FILTER 0 -#define CONFIG_EMBEDDED_FWIMG -#define CONFIG_PHY_SETTING_WITH_ODM -#if !defined(CONFIG_PLATFORM_AMEBA_X) -#define CONFIG_ODM_REFRESH_RAMASK -#define HAL_MAC_ENABLE 1 -#define HAL_BB_ENABLE 1 -#define HAL_RF_ENABLE 1 -#endif -#if defined(CONFIG_PLATFORM_AMEBA_X) -/* Patch when dynamic mechanism is not ready */ -//#define CONFIG_DM_PATCH -#endif - -//#define CONFIG_DEBUG -//#define CONFIG_DEBUG_RTL871X -#if defined(CONFIG_PLATFORM_AMEBA_X) - #define CONFIG_MEM_MONITOR MEM_MONITOR_SIMPLE - #define WLAN_INTF_DBG 0 - //#define CONFIG_DEBUG_DYNAMIC - //#define DBG_TX 1 - //#define DBG_XMIT_BUF 1 - //#define DBG_XMIT_BUF_EXT 1 - #define DBG_TX_DROP_FRAME -#else - #define CONFIG_MEM_MONITOR MEM_MONITOR_LEAK - //#define CONFIG_TRACE_SKB - //#define WLAN_INTF_DBG -#endif // CONFIG_PLATFORM_AMEBA_X - -//#define CONFIG_DONT_CARE_TP -//#define CONFIG_HIGH_TP -//#define CONFIG_MEMORY_ACCESS_ALIGNED -#ifndef PLATFORM_CMSIS_RTOS // unsupported feature -#define CONFIG_POWER_SAVING -#endif -#ifdef CONFIG_POWER_SAVING - #define CONFIG_IPS - #define CONFIG_LPS - //#define CONFIG_LPS_LCLK - #define CONFIG_LPS_32K - #define TDMA_POWER_SAVING - #define CONFIG_WAIT_PS_ACK -#endif - -#define BAD_MIC_COUNTERMEASURE 1 -#define DEFRAGMENTATION 1 - -#define WIFI_LOGO_CERTIFICATION 0 -#if WIFI_LOGO_CERTIFICATION - #define RX_AGGREGATION 1 - #define RX_AMSDU 1 -#else - #define RX_AGGREGATION 0 - #define RX_AMSDU 0 -#endif - -#if defined(CONFIG_PLATFORM_AMEBA_X) - #if !defined(CONFIG_PLATFORM_8711B) - #ifndef CONFIG_USE_TCM_HEAP - #define CONFIG_USE_TCM_HEAP 1 /* USE TCM HEAP */ - #endif - #endif - #define CONFIG_RECV_TASKLET_THREAD - #define CONFIG_XMIT_TASKLET_THREAD -#else - #define CONFIG_XMIT_THREAD_MODE -#endif // CONFIG_PLATFORM_AMEBA_X -//#define CONFIG_RECV_THREAD_MODE /* Wlan IRQ Polling Mode*/ -//#define CONFIG_ISR_THREAD_MODE_POLLING /* Wlan IRQ Polling Mode*/ - -//1 Chris -#ifndef CONFIG_SDIO_HCI -#define CONFIG_ISR_THREAD_MODE_INTERRUPT /* Wlan IRQ Interrupt Mode*/ -#endif - -#if defined(CONFIG_ISR_THREAD_MODE_POLLING) && defined(CONFIG_ISR_THREAD_MODE_INTERRUPT) -#error "CONFIG_ISR_THREAD_MODE_POLLING and CONFIG_ISR_THREAD_MODE_INTERRUPT are mutually exclusive. " -#endif - -#if defined(CONFIG_PLATFORM_AMEBA_X) -/* CRC DMEM optimized mode consume 1k less SRM memory consumption */ -#define CRC_IMPLEMENTATION_MODE CRC_IMPLEMENTATION_DMEM_OPTIMIZED -#endif - -/* AES DMEM optimized mode comsume 10k less memory compare to - IMEM optimized mode AES_IMPLEMENTATION_IMEM_OPTIMIZED */ -#define AES_IMPLEMENTATION_MODE AES_IMPLEMENTATION_DMEM_OPTIMIZED - -#define USE_SKB_AS_XMITBUF 1 -#if defined(CONFIG_PLATFORM_AMEBA_X) -#define USE_XMIT_EXTBUFF 1 -#else -#define USE_XMIT_EXTBUFF 0 -#endif -#define USE_MUTEX_FOR_SPINLOCK 1 - -// remove function to reduce code -#define NOT_SUPPORT_5G -#define NOT_SUPPORT_RF_MULTIPATH -#define NOT_SUPPORT_VHT -#define NOT_SUPPORT_40M -#define NOT_SUPPORT_80M -#ifndef CONFIG_PLATFORM_8711B -#define NOT_SUPPORT_BBSWING -#endif -#define NOT_SUPPORT_OLD_CHANNEL_PLAN -#define NOT_SUPPORT_BT - -#define CONFIG_WIFI_SPEC 0 -#define CONFIG_FAKE_EFUSE 0 -#if CONFIG_FAKE_EFUSE - #define FAKE_CHIPID CHIPID_8710BN -#endif - -#define CONFIG_AUTO_RECONNECT 1 -#define ENABLE_HWPDN_PIN -#define SUPPORT_SCAN_BUF 1 -#if !defined(CONFIG_PLATFORM_AMEBA_X) -#define BE_I_CUT 1 -#endif - -/* For WPA2 */ -#define CONFIG_INCLUDE_WPA_PSK -#ifdef CONFIG_INCLUDE_WPA_PSK -#define CONFIG_MULTIPLE_WPA_STA -//#define CONFIG_WPA2_PREAUTH -#define PSK_SUPPORT_TKIP 1 -#endif -//#define AP_PSK_SUPPORT_TKIP - -/* For promiscuous mode */ -#define CONFIG_PROMISC - -#define PROMISC_DENY_PAIRWISE 0 - -/* For Simple Link */ -#ifndef CONFIG_INCLUDE_SIMPLE_CONFIG -//#define CONFIG_INCLUDE_SIMPLE_CONFIG 1 -#endif - -// for probe request with custom vendor specific IE -#define CONFIG_CUSTOM_IE - -#if !defined(CONFIG_PLATFORM_AMEBA_X) -/* For multicast */ -#define CONFIG_MULTICAST -#endif - -/* For STA+AP Concurrent MODE */ -#define CONFIG_CONCURRENT_MODE -#ifdef CONFIG_CONCURRENT_MODE - #if defined(CONFIG_PLATFORM_8195A) - #define CONFIG_RUNTIME_PORT_SWITCH - #endif - #if defined(CONFIG_HARDWARE_8188F) - #define NET_IF_NUM 2 - #else - #undef NET_IF_NUM - #define NET_IF_NUM ((CONFIG_ETHERNET) + (CONFIG_WLAN) + 1) - #endif -#else - #if defined(CONFIG_HARDWARE_8188F) - #define NET_IF_NUM 1 - #else - #define NET_IF_NUM ((CONFIG_ETHERNET) + (CONFIG_WLAN)) - #endif -#endif - - -/****************** For EAP auth configurations *******************/ -#define CONFIG_TLS 0 -#define CONFIG_PEAP 0 -#define CONFIG_TTLS 0 - -// DO NOT change the below config of EAP -#ifdef PRE_CONFIG_EAP -#define CONFIG_TLS 1 -#define CONFIG_PEAP 1 -#define CONFIG_TTLS 1 -#endif - -// enable 1X code in lib_wlan as default (increase 380 bytes) -#ifndef PLATFORM_CMSIS_RTOS // unsupported feature -#define CONFIG_EAP -#endif -#if CONFIG_TLS || CONFIG_PEAP || CONFIG_TTLS -#define EAP_REMOVE_UNUSED_CODE 1 -#endif - -#define EAP_SSL_VERIFY_SERVER - -#if CONFIG_TLS -#define EAP_SSL_VERIFY_CLIENT -#endif - -#if CONFIG_TTLS -#define EAP_MSCHAPv2 -#define EAP_TTLS_MSCHAPv2 -//#define EAP_TTLS_EAP -//#define EAP_TTLS_MSCHAP -//#define EAP_TTLS_PAP -//#define EAP_TTLS_CHAP -#endif -/****************** End of EAP configurations *******************/ - -/* For WPS and P2P */ -#define CONFIG_WPS -#if 0 -#define CONFIG_WPS_AP -#define CONFIG_P2P_NEW -#if (!defined(SUPPORT_SCAN_BUF)||!defined(CONFIG_WPS_AP)) && defined(CONFIG_P2P_NEW) -#error "If CONFIG_P2P_NEW, need to SUPPORT_SCAN_BUF" -#endif -#endif - -#define CONFIG_NEW_SIGNAL_STAT_PROCESS -#define CONFIG_SKIP_SIGNAL_SCALE_MAPPING - -/* For AP_MODE */ -#define CONFIG_AP_MODE -extern unsigned char g_user_ap_sta_num; -#define USER_AP_STA_NUM g_user_ap_sta_num -#if defined(CONFIG_PLATFORM_AMEBA_X) -#define AP_STA_NUM 3 //2014/10/27 modify to 3 -#define USE_DEDICATED_BCN_TX 0 -#if USE_DEDICATED_BCN_TX -#error "WLAN driver for Ameba should not enable USE_DEDICATED_BCN_TX" -#endif -#else -extern unsigned int g_ap_sta_num; -#define AP_STA_NUM 3//g_ap_sta_num -#endif -#ifdef CONFIG_AP_MODE -#if defined(CONFIG_PLATFORM_8195A) - //softap sent qos null0 polling client alive or not - #define CONFIG_AP_POLLING_CLIENT_ALIVE -#endif - #define CONFIG_NATIVEAP_MLME -#if defined(CONFIG_PLATFORM_AMEBA_X) - #define CONFIG_INTERRUPT_BASED_TXBCN -#endif - #ifdef CONFIG_INTERRUPT_BASED_TXBCN - //#define CONFIG_INTERRUPT_BASED_TXBCN_EARLY_INT - #define CONFIG_INTERRUPT_BASED_TXBCN_BCN_OK_ERR - #endif -// #define CONFIG_GK_REKEY -#if !defined(CONFIG_PLATFORM_AMEBA_X) - #define USE_DEDICATED_BCN_TX 1 -#endif -#if CONFIG_INIC_EN -// #define REPORT_STA_EVENT //useless -#endif -#else -#if !defined(CONFIG_PLATFORM_AMEBA_X) - #define USE_DEDICATED_BCN_TX 0 -#endif -#endif - -#if defined(CONFIG_AP_MODE) && defined(CONFIG_GK_REKEY) && !defined(CONFIG_MULTIPLE_WPA_STA) -#error "If CONFIG_GK_REKEY when CONFIG_AP_MODE, need to CONFIG_MULTIPLE_WPA_STA" -#endif - -#if !defined(CONFIG_PLATFORM_AMEBA_X) -#if !defined(CONFIG_AP_MODE) && defined(CONFIG_CONCURRENT_MODE) -#error "If CONFIG_CONCURRENT_MODEE, need to CONFIG_AP_MODE" -#endif -#endif - -/* For efuse or flash config */ -#if defined(CONFIG_PLATFORM_AMEBA_X) - #define CONFIG_RW_PHYSICAL_EFUSE 0 // Mask efuse user blocks - #define CONFIG_HIDE_PROTECT_EFUSE 1 - #define CONFIG_ADAPTOR_INFO_CACHING_FLASH 1 - #define CHECK_FLASH_VALID_MASK 1 - #define CHECK_EFUSE_VALID_MASK 1 - /* For K-free */ -// #if !defined(CONFIG_PLATFORM_8711B) - #define CONFIG_RF_GAIN_OFFSET -// #endif -#endif // CONFIG_PLATFORM_AMEBA_X - -/* For MP_MODE */ -//#define CONFIG_MP_INCLUDED -#ifdef CONFIG_MP_INCLUDED - #define MP_DRIVER 1 - #define CONFIG_MP_IWPRIV_SUPPORT -// #define HAL_EFUSE_MEMORY - #if defined(CONFIG_PLATFORM_AMEBA_X) - #define MP_REG_TEST - #endif -#else - #define MP_DRIVER 0 - #if defined(CONFIG_PLATFORM_8195A) - //Control wifi mcu function - #define CONFIG_LITTLE_WIFI_MCU_FUNCTION_THREAD - #define CONFIG_ODM_REFRESH_RAMASK - #endif -#endif // #ifdef CONFIG_MP_INCLUDED - -#if defined(CONFIG_PLATFORM_AMEBA_X) - #if defined(CONFIG_PLATFORM_8195A) - #undef CONFIG_RTL8195A - #define CONFIG_RTL8195A - #endif - #if defined(CONFIG_PLATFORM_8711B) - #ifndef CONFIG_RTL8711B - #define CONFIG_RTL8711B - #endif - #undef CONFIG_ADAPTOR_INFO_CACHING_FLASH - #define CONFIG_ADAPTOR_INFO_CACHING_FLASH 0 - //#undef CONFIG_EAP - //#undef CONFIG_IPS - #define CONFIG_8710B_MOVE_TO_ROM - #define CONFIG_EFUSE_SEPARATE - #define CONFIG_MOVE_PSK_TO_ROM - #define CONFIG_WOWLAN - #define CONFIG_TRAFFIC_PROTECT - #endif -#elif defined(CONFIG_HARDWARE_8188F) -#define CONFIG_RTL8188F -#else -#define CONFIG_RTL8188E -#endif -#define RTL8192C_SUPPORT 0 -#define RTL8192CE_SUPPORT 0 -#define RTL8192CU_SUPPORT 0 -#define RTL8192D_SUPPORT 0 -#define RTL8192DE_SUPPORT 0 -#define RTL8192DU_SUPPORT 0 -#define RTL8723A_SUPPORT 0 -#define RTL8723AU_SUPPORT 0 -#define RTL8723AS_SUPPORT 0 -#define RTL8192E_SUPPORT 0 -#define RTL8812A_SUPPORT 0 -#define RTL8821A_SUPPORT 0 -#define RTL8723B_SUPPORT 0 -#define RTL8195A_SUPPORT 0 -#define RTL8188E_SUPPORT 0 -#define RTL8188F_SUPPORT 0 -#define RTL8711B_SUPPORT 0 -#if defined(CONFIG_PLATFORM_8195A) -#undef RTL8195A_SUPPORT -#define RTL8195A_SUPPORT 1 -#elif defined(CONFIG_PLATFORM_8711B) -#undef RTL8711B_SUPPORT -#define RTL8711B_SUPPORT 1 -#elif defined(CONFIG_HARDWARE_8188F) -#undef RTL8188F_SUPPORT -#define RTL8188F_SUPPORT 1 -#else -#undef RTL8188E_SUPPORT -#define RTL8188E_SUPPORT 1 -#endif - -#define TEST_CHIP_SUPPORT 0 - -#define RTL8188E_FOR_TEST_CHIP 0 -#define RTL8188E_FPGA_TRUE_PHY_VERIFICATION 0 - -// for Debug message -#define DBG 0 -#if defined(CONFIG_PLATFORM_AMEBA_X) -#if(DBG == 0) - #define ROM_E_RTW_MSG 1 - /* For DM debug*/ - // BB - #define DBG_RX_INFO 1 - #define DBG_TX_RATE 1 // DebugComponents: bit9 - #define DBG_DM_RA 1 // DebugComponents: bit9 - #define DBG_DM_DIG 1 // DebugComponents: bit0 - #define DBG_DM_ADAPTIVITY 1 // DebugComponents: bit16 - // RF - #define DBG_PWR_TRACKING 1 // DebugComponents: bit24 - #define DBG_RF_IQK 1 // DebugComponents: bit26 - // Common - #define DBG_PWR_INDEX 1 // DebugComponents: bit30 -#endif -#endif - -/* For DM support */ -#if defined(CONFIG_RTL8188F) -#define RATE_ADAPTIVE_SUPPORT 0 -#elif defined(CONFIG_PLATFORM_8711B) -#define RATE_ADAPTIVE_SUPPORT 1 -#define CONFIG_ODM_REFRESH_RAMASK -#else -#define RATE_ADAPTIVE_SUPPORT 1 -#endif -// adaptivity -#define RTW_ADAPTIVITY_EN_DISABLE 0 -#define RTW_ADAPTIVITY_EN_ENABLE 1 -#define CONFIG_RTW_ADAPTIVITY_EN RTW_ADAPTIVITY_EN_DISABLE -#define RTW_ADAPTIVITY_MODE_NORMAL 0 -#define RTW_ADAPTIVITY_MODE_CARRIER_SENSE 1 -#define CONFIG_RTW_ADAPTIVITY_MODE RTW_ADAPTIVITY_MODE_CARRIER_SENSE -#define CONFIG_RTW_ADAPTIVITY_DML 0 - - -#if defined(CONFIG_PLATFORM_AMEBA_X) - #define CONFIG_POWER_TRAINING_WIL 0 // in RA -#else - #define POWER_BY_RATE_SUPPORT 0 -#endif - -#if defined(CONFIG_PLATFORM_AMEBA_X) -#define RTL8195A_FOR_TEST_CHIP 0 - -//#define CONFIG_WIFI_TEST 1 -//#define CONFIG_MAC_LOOPBACK_DRIVER 1 -//#define CONFIG_WLAN_HAL_TEST 1 -//#define SKB_PRE_ALLOCATE_TX 1 -#define SKB_PRE_ALLOCATE_RX 0 -#define TX_CHECK_DSEC_ALWAYS 1 -#define CONFIG_DBG_DISABLE_RDU_INTERRUPT -//#define CONFIG_WLAN_HAL_RX_TASK -#if (SKB_PRE_ALLOCATE_RX == 1) - #define EXCHANGE_LXBUS_RX_SKB 0 -#endif -#ifdef CONFIG_FPGA - //Enable mac loopback for test mode (Ameba) - #define CONFIG_TWO_MAC_DRIVER // for test mode -#endif - -#ifdef ENABLE_MAC_LB_FOR_TEST_MODE - #define CONFIG_SUDO_PHY_SETTING - #define INT_HANDLE_IN_ISR 1 - #define CONFIG_LWIP_LAYER 0 - #define CONFIG_WLAN_HAL_TEST - #define CONFIG_WLAN_HAL_RX_TASK - #define CONFIG_MAC_LOOPBACK_DRIVER_RTL8711B 1 - #define HAL_MAC_ENABLE 1 - #define CONFIG_TWO_MAC_TEST_MODE - #define DISABLE_BB_RF 1 -#else - //#define CONFIG_TWO_MAC_DRIVER //for mornal driver; two mac - #ifdef CONFIG_TWO_MAC_DRIVER - #define CONFIG_SUDO_PHY_SETTING - #define HAL_MAC_ENABLE 1 - #define DISABLE_BB_RF 1 - #else - #define HAL_MAC_ENABLE 1 - #define HAL_BB_ENABLE 1 - #define HAL_RF_ENABLE 1 - #define DISABLE_BB_RF 0 - #endif - //#define INT_HANDLE_IN_ISR 1 -#endif -#endif // CONFIG_PLATFORM_AMEBA_X - -#ifndef CONFIG_LWIP_LAYER -#define CONFIG_LWIP_LAYER 1 -#endif -#define CONFIG_MAC_ADDRESS 0 -//fast reconnection -//#define CONFIG_FAST_RECONNECTION 1 -#if defined(CONFIG_INIC_EN)&&(CONFIG_INIC_EN==1) -#define CONFIG_RECV_REORDERING_CTRL //enable reordering for iNIC high throughput -#undef RX_AGGREGATION -#define RX_AGGREGATION 1 -#undef NOT_SUPPORT_40M -#undef CONFIG_CONCURRENT_MODE -#endif -#endif //WLANCONFIG_H diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/byteorder/generic.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/byteorder/generic.h deleted file mode 100644 index 3930b7c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/byteorder/generic.h +++ /dev/null @@ -1,223 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _LINUX_BYTEORDER_GENERIC_H -#define _LINUX_BYTEORDER_GENERIC_H - -/* - * linux/byteorder_generic.h - * Generic Byte-reordering support - * - * Francois-Rene Rideau 19970707 - * gathered all the good ideas from all asm-foo/byteorder.h into one file, - * cleaned them up. - * I hope it is compliant with non-GCC compilers. - * I decided to put __BYTEORDER_HAS_U64__ in byteorder.h, - * because I wasn't sure it would be ok to put it in types.h - * Upgraded it to 2.1.43 - * Francois-Rene Rideau 19971012 - * Upgraded it to 2.1.57 - * to please Linus T., replaced huge #ifdef's between little/big endian - * by nestedly #include'd files. - * Francois-Rene Rideau 19971205 - * Made it to 2.1.71; now a facelift: - * Put files under include/linux/byteorder/ - * Split swab from generic support. - * - * TODO: - * = Regular kernel maintainers could also replace all these manual - * byteswap macros that remain, disseminated among drivers, - * after some grep or the sources... - * = Linus might want to rename all these macros and files to fit his taste, - * to fit his personal naming scheme. - * = it seems that a few drivers would also appreciate - * nybble swapping support... - * = every architecture could add their byteswap macro in asm/byteorder.h - * see how some architectures already do (i386, alpha, ppc, etc) - * = cpu_to_beXX and beXX_to_cpu might some day need to be well - * distinguished throughout the kernel. This is not the case currently, - * since little endian, big endian, and pdp endian machines needn't it. - * But this might be the case for, say, a port of Linux to 20/21 bit - * architectures (and F21 Linux addict around?). - */ - -/* - * The following macros are to be defined by : - * - * Conversion of long and short int between network and host format - * ntohl(uint32_t x) - * ntohs(uint16_t x) - * htonl(uint32_t x) - * htons(uint16_t x) - * It seems that some programs (which? where? or perhaps a standard? POSIX?) - * might like the above to be functions, not macros (why?). - * if that's true, then detect them, and take measures. - * Anyway, the measure is: define only ___ntohl as a macro instead, - * and in a separate file, have - * unsigned long inline ntohl(x){return ___ntohl(x);} - * - * The same for constant arguments - * __constant_ntohl(uint32_t x) - * __constant_ntohs(uint16_t x) - * __constant_htonl(uint32_t x) - * __constant_htons(uint16_t x) - * - * Conversion of XX-bit integers (16- 32- or 64-) - * between native CPU format and little/big endian format - * 64-bit stuff only defined for proper architectures - * cpu_to_[bl]eXX(__uXX x) - * [bl]eXX_to_cpu(__uXX x) - * - * The same, but takes a pointer to the value to convert - * cpu_to_[bl]eXXp(__uXX x) - * [bl]eXX_to_cpup(__uXX x) - * - * The same, but change in situ - * cpu_to_[bl]eXXs(__uXX x) - * [bl]eXX_to_cpus(__uXX x) - * - * See asm-foo/byteorder.h for examples of how to provide - * architecture-optimized versions - * - */ - - -#if defined(PLATFORM_LINUX) || defined(PLATFORM_WINDOWS) || defined(PLATFORM_MPIXEL) || defined(PLATFORM_FREEBSD) || defined(PLATFORM_ECOS) || defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) -/* - * inside the kernel, we can use nicknames; - * outside of it, we must avoid POSIX namespace pollution... - */ - -//TODO -#if 0 - -#define cpu_to_le64 __cpu_to_le64 -#define le64_to_cpu __le64_to_cpu - -#endif //#if 0 - -#define cpu_to_le32 __cpu_to_le32 -#define le32_to_cpu __le32_to_cpu -#define cpu_to_le16 __cpu_to_le16 -#define le16_to_cpu __le16_to_cpu -#define cpu_to_be64 __cpu_to_be64 -#define be64_to_cpu __be64_to_cpu -#define cpu_to_be32 __cpu_to_be32 -#define be32_to_cpu __be32_to_cpu -#define cpu_to_be16 __cpu_to_be16 -#define be16_to_cpu __be16_to_cpu -#define cpu_to_le64p __cpu_to_le64p -#define le64_to_cpup __le64_to_cpup -#define cpu_to_le32p __cpu_to_le32p -#define le32_to_cpup __le32_to_cpup -#define cpu_to_le16p __cpu_to_le16p -#define le16_to_cpup __le16_to_cpup -#define cpu_to_be64p __cpu_to_be64p -#define be64_to_cpup __be64_to_cpup -#define cpu_to_be32p __cpu_to_be32p -#define be32_to_cpup __be32_to_cpup -#define cpu_to_be16p __cpu_to_be16p -#define be16_to_cpup __be16_to_cpup -#define cpu_to_le64s __cpu_to_le64s -#define le64_to_cpus __le64_to_cpus -#define cpu_to_le32s __cpu_to_le32s -#define le32_to_cpus __le32_to_cpus -#define cpu_to_le16s __cpu_to_le16s -#define le16_to_cpus __le16_to_cpus -#define cpu_to_be64s __cpu_to_be64s -#define be64_to_cpus __be64_to_cpus -#define cpu_to_be32s __cpu_to_be32s -#define be32_to_cpus __be32_to_cpus -#define cpu_to_be16s __cpu_to_be16s -#define be16_to_cpus __be16_to_cpus -#endif - -//TODO -#if 0 - -/* - * Handle ntohl and suches. These have various compatibility - * issues - like we want to give the prototype even though we - * also have a macro for them in case some strange program - * wants to take the address of the thing or something.. - * - * Note that these used to return a "long" in libc5, even though - * long is often 64-bit these days.. Thus the casts. - * - * They have to be macros in order to do the constant folding - * correctly - if the argument passed into a inline function - * it is no longer constant according to gcc.. - */ - -#undef ntohl -#undef ntohs -#undef htonl -#undef htons - -/* - * Do the prototypes. Somebody might want to take the - * address or some such sick thing.. - */ -#if defined(PLATFORM_LINUX) || (defined (__GLIBC__) && __GLIBC__ >= 2) -extern uint32_t ntohl(uint32_t); -extern uint32_t htonl(uint32_t); -#else //defined(PLATFORM_LINUX) || (defined (__GLIBC__) && __GLIBC__ >= 2) -#ifndef PLATFORM_FREEBSD -extern unsigned long int ntohl(unsigned long int); -extern unsigned long int htonl(unsigned long int); -#endif -#endif -#ifndef PLATFORM_FREEBSD -extern unsigned short int ntohs(unsigned short int); -extern unsigned short int htons(unsigned short int); -#endif - -#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) || defined(PLATFORM_MPIXEL) - -#define ___htonl(x) __cpu_to_be32(x) -#define ___htons(x) __cpu_to_be16(x) -#define ___ntohl(x) __be32_to_cpu(x) -#define ___ntohs(x) __be16_to_cpu(x) - -#if defined(PLATFORM_LINUX) || (defined (__GLIBC__) && __GLIBC__ >= 2) -#define htonl(x) ___htonl(x) -#define ntohl(x) ___ntohl(x) -#else -#define htonl(x) ((unsigned long)___htonl(x)) -#define ntohl(x) ((unsigned long)___ntohl(x)) -#endif -#define htons(x) ___htons(x) -#define ntohs(x) ___ntohs(x) - -#endif /* OPTIMIZE */ - - -#if defined (PLATFORM_WINDOWS) - -#define htonl(x) __cpu_to_be32(x) -#define ntohl(x) __be32_to_cpu(x) -#define htons(x) __cpu_to_be16(x) -#define ntohs(x) __be16_to_cpu(x) - -#endif - -#endif //#if 0 - -#endif /* _LINUX_BYTEORDER_GENERIC_H */ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/byteorder/little_endian.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/byteorder/little_endian.h deleted file mode 100644 index 37638a8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/byteorder/little_endian.h +++ /dev/null @@ -1,97 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _LINUX_BYTEORDER_LITTLE_ENDIAN_H -#define _LINUX_BYTEORDER_LITTLE_ENDIAN_H - -#ifndef __LITTLE_ENDIAN -#define __LITTLE_ENDIAN 1234 -#endif -#ifndef __LITTLE_ENDIAN_BITFIELD -#define __LITTLE_ENDIAN_BITFIELD -#endif - -#include - -#ifndef __constant_htonl - -//TODO -#if 0 - -#define __constant_htonl(x) ___constant_swab32((x)) -#define __constant_ntohl(x) ___constant_swab32((x)) -#define __constant_htons(x) ___constant_swab16((x)) -#define __constant_ntohs(x) ___constant_swab16((x)) -#define __constant_cpu_to_le64(x) ((uint64_t)(x)) -#define __constant_le64_to_cpu(x) ((uint64_t)(x)) -#define __constant_cpu_to_le32(x) ((uint32_t)(x)) -#define __constant_le32_to_cpu(x) ((uint32_t)(x)) -#define __constant_cpu_to_le16(x) ((uint16_t)(x)) -#define __constant_le16_to_cpu(x) ((uint16_t)(x)) -#define __constant_cpu_to_be64(x) ___constant_swab64((x)) -#define __constant_be64_to_cpu(x) ___constant_swab64((x)) -#define __constant_cpu_to_be32(x) ___constant_swab32((x)) -#define __constant_be32_to_cpu(x) ___constant_swab32((x)) -#define __constant_cpu_to_be16(x) ___constant_swab16((x)) -#define __constant_be16_to_cpu(x) ___constant_swab16((x)) -#define __cpu_to_le64(x) ((uint64_t)(x)) -#define __le64_to_cpu(x) ((uint64_t)(x)) - -#endif //#if 0 - -#define __cpu_to_le32(x) ((uint32_t)(x)) -#define __le32_to_cpu(x) ((uint32_t)(x)) -#define __cpu_to_le16(x) ((uint16_t)(x)) -#define __le16_to_cpu(x) ((uint16_t)(x)) -#define __cpu_to_be64(x) __swab64((x)) -#define __be64_to_cpu(x) __swab64((x)) -#define __cpu_to_be32(x) __swab32((x)) -#define __be32_to_cpu(x) __swab32((x)) -#define __cpu_to_be16(x) __swab16((x)) -#define __be16_to_cpu(x) __swab16((x)) -#define __cpu_to_le64p(x) (*(uint64_t*)(x)) -#define __le64_to_cpup(x) (*(uint64_t*)(x)) -#define __cpu_to_le32p(x) (*(uint32_t*)(x)) -#define __le32_to_cpup(x) (*(uint32_t*)(x)) -#define __cpu_to_le16p(x) (*(uint16_t*)(x)) -#define __le16_to_cpup(x) (*(uint16_t*)(x)) -#define __cpu_to_be64p(x) __swab64p((x)) -#define __be64_to_cpup(x) __swab64p((x)) -#define __cpu_to_be32p(x) __swab32p((x)) -#define __be32_to_cpup(x) __swab32p((x)) -#define __cpu_to_be16p(x) __swab16p((x)) -#define __be16_to_cpup(x) __swab16p((x)) -#define __cpu_to_le64s(x) do {} while (0) -#define __le64_to_cpus(x) do {} while (0) -#define __cpu_to_le32s(x) do {} while (0) -#define __le32_to_cpus(x) do {} while (0) -#define __cpu_to_le16s(x) do {} while (0) -#define __le16_to_cpus(x) do {} while (0) -#define __cpu_to_be64s(x) __swab64s((x)) -#define __be64_to_cpus(x) __swab64s((x)) -#define __cpu_to_be32s(x) __swab32s((x)) -#define __be32_to_cpus(x) __swab32s((x)) -#define __cpu_to_be16s(x) __swab16s((x)) -#define __be16_to_cpus(x) __swab16s((x)) -#endif // __constant_htonl - -#include - -#endif /* _LINUX_BYTEORDER_LITTLE_ENDIAN_H */ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/byteorder/swab.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/byteorder/swab.h deleted file mode 100644 index e5e104b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/byteorder/swab.h +++ /dev/null @@ -1,145 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _LINUX_BYTEORDER_SWAB_H -#define _LINUX_BYTEORDER_SWAB_H -/* -#if !defined(CONFIG_PLATFORM_MSTAR_TITANIA12) && !defined(PLATFORM_ECOS) && \ - !defined(CONFIG_PLATFORM_8195A) -*/ -#if !defined(CONFIG_PLATFORM_MSTAR_TITANIA12) && !defined(PLATFORM_ECOS) - -#if !defined(PLATFORM_FREERTOS) && !defined (PLATFORM_CMSIS_RTOS) -#ifndef uint16_t -typedef unsigned short uint16_t; -#endif - -#ifndef uint32_t -typedef unsigned int uint32_t; -#endif - -#ifndef __u8 -typedef unsigned char __u8; -#endif - -#ifndef uint64_t -typedef unsigned long long uint64_t; -#endif -#endif -__inline static uint16_t ___swab16(uint16_t x) -{ - uint16_t __x = x; - return - ((uint16_t)( - (((uint16_t)(__x) & (uint16_t)0x00ffU) << 8) | - (((uint16_t)(__x) & (uint16_t)0xff00U) >> 8) )); - -} - -__inline static uint32_t ___swab32(uint32_t x) -{ - uint32_t __x = (x); - return ((uint32_t)( - (((uint32_t)(__x) & (uint32_t)0x000000ffUL) << 24) | - (((uint32_t)(__x) & (uint32_t)0x0000ff00UL) << 8) | - (((uint32_t)(__x) & (uint32_t)0x00ff0000UL) >> 8) | - (((uint32_t)(__x) & (uint32_t)0xff000000UL) >> 24) )); -} - -__inline static uint64_t ___swab64(uint64_t x) -{ - uint64_t __x = (x); - - return - ((uint64_t)( \ - (uint64_t)(((uint64_t)(__x) & (uint64_t)0x00000000000000ffULL) << 56) | \ - (uint64_t)(((uint64_t)(__x) & (uint64_t)0x000000000000ff00ULL) << 40) | \ - (uint64_t)(((uint64_t)(__x) & (uint64_t)0x0000000000ff0000ULL) << 24) | \ - (uint64_t)(((uint64_t)(__x) & (uint64_t)0x00000000ff000000ULL) << 8) | \ - (uint64_t)(((uint64_t)(__x) & (uint64_t)0x000000ff00000000ULL) >> 8) | \ - (uint64_t)(((uint64_t)(__x) & (uint64_t)0x0000ff0000000000ULL) >> 24) | \ - (uint64_t)(((uint64_t)(__x) & (uint64_t)0x00ff000000000000ULL) >> 40) | \ - (uint64_t)(((uint64_t)(__x) & (uint64_t)0xff00000000000000ULL) >> 56) )); \ -} -#endif // CONFIG_PLATFORM_MSTAR_TITANIA12 - -#ifndef __arch__swab16 -__inline static uint16_t __arch__swab16(uint16_t x) -{ - return ___swab16(x); -} - -#endif - -#ifndef __arch__swab32 -__inline static uint32_t __arch__swab32(uint32_t x) -{ - uint32_t __tmp = (x) ; - return ___swab32(__tmp); -} -#endif - -#ifndef __arch__swab64 - -__inline static uint64_t __arch__swab64(uint64_t x) -{ - uint64_t __tmp = (x) ; - return ___swab64(__tmp); -} - - -#endif - -#ifndef __swab16 -#define __swab16(x) __fswab16(x) -#define __swab32(x) __fswab32(x) -#define __swab64(x) __fswab64(x) -#endif // __swab16 - -#ifdef PLATFORM_FREEBSD -__inline static uint16_t __fswab16(uint16_t x) -#else -__inline static uint16_t __fswab16(uint16_t x) -#endif //PLATFORM_FREEBSD -{ - return __arch__swab16(x); -} -#ifdef PLATFORM_FREEBSD -__inline static uint32_t __fswab32(uint32_t x) -#else -__inline static uint32_t __fswab32(uint32_t x) -#endif //PLATFORM_FREEBSD -{ - return __arch__swab32(x); -} - -#if defined(PLATFORM_LINUX) || defined(PLATFORM_WINDOWS) -#define swab16 __swab16 -#define swab32 __swab32 -#define swab64 __swab64 -#define swab16p __swab16p -#define swab32p __swab32p -#define swab64p __swab64p -#define swab16s __swab16s -#define swab32s __swab32s -#define swab64s __swab64s -#endif - -#endif /* _LINUX_BYTEORDER_SWAB_H */ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/drv_conf.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/drv_conf.h deleted file mode 100644 index 3590c04..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/drv_conf.h +++ /dev/null @@ -1,106 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __DRV_CONF_H__ -#define __DRV_CONF_H__ - -#include "autoconf.h" -#if ((RTL8195A_SUPPORT==1) || (RTL8711B_SUPPORT==1)) -#include "platform_autoconf.h" -#endif - -#if defined (PLATFORM_LINUX) && defined (PLATFORM_WINDOWS) - -#error "Shall be Linux or Windows, but not both!\n" - -#endif - -//Older Android kernel doesn't has CONFIG_ANDROID defined, -//add this to force CONFIG_ANDROID defined -#ifdef CONFIG_PLATFORM_ANDROID -#define CONFIG_ANDROID -#endif - -#ifdef CONFIG_ANDROID -//Some Android build will restart the UI while non-printable ascii is passed -//between java and c/c++ layer (JNI). We force CONFIG_VALIDATE_SSID -//for Android here. If you are sure there is no risk on your system about this, -//mask this macro define to support non-printable ascii ssid. -//#define CONFIG_VALIDATE_SSID -#ifdef CONFIG_PLATFORM_ARM_SUNxI - #ifdef CONFIG_VALIDATE_SSID - #undef CONFIG_VALIDATE_SSID - #endif -#endif - -//Android expect dbm as the rx signal strength unit -#define CONFIG_SIGNAL_DISPLAY_DBM -#endif - -#if defined(CONFIG_HAS_EARLYSUSPEND) && defined (CONFIG_RESUME_IN_WORKQUEUE) - #warning "You have CONFIG_HAS_EARLYSUSPEND enabled in your system, we disable CONFIG_RESUME_IN_WORKQUEUE automatically" - #undef CONFIG_RESUME_IN_WORKQUEUE -#endif - -#if defined(CONFIG_ANDROID_POWER) && defined (CONFIG_RESUME_IN_WORKQUEUE) - #warning "You have CONFIG_ANDROID_POWER enabled in your system, we disable CONFIG_RESUME_IN_WORKQUEUE automatically" - #undef CONFIG_RESUME_IN_WORKQUEUE -#endif - -#ifdef CONFIG_RESUME_IN_WORKQUEUE //this can be removed, because there is no case for this... - #if !defined( CONFIG_WAKELOCK) && !defined(CONFIG_ANDROID_POWER) - #error "enable CONFIG_RESUME_IN_WORKQUEUE without CONFIG_WAKELOCK or CONFIG_ANDROID_POWER will suffer from the danger of wifi's unfunctionality..." - #error "If you still want to enable CONFIG_RESUME_IN_WORKQUEUE in this case, mask this preprossor checking and GOOD LUCK..." - #endif -#endif - -//About USB VENDOR REQ -#if defined(CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC) && !defined(CONFIG_USB_VENDOR_REQ_MUTEX) - #warning "define CONFIG_USB_VENDOR_REQ_MUTEX for CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC automatically" - #define CONFIG_USB_VENDOR_REQ_MUTEX -#endif -#if defined(CONFIG_VENDOR_REQ_RETRY) && !defined(CONFIG_USB_VENDOR_REQ_MUTEX) - #warning "define CONFIG_USB_VENDOR_REQ_MUTEX for CONFIG_VENDOR_REQ_RETRY automatically" - #define CONFIG_USB_VENDOR_REQ_MUTEX -#endif - -#ifndef CONFIG_RTW_ADAPTIVITY_EN - #define CONFIG_RTW_ADAPTIVITY_EN 0 -#endif - -#ifndef CONFIG_RTW_ADAPTIVITY_MODE - #define CONFIG_RTW_ADAPTIVITY_MODE 0 -#endif - -#ifndef CONFIG_RTW_ADAPTIVITY_DML - #define CONFIG_RTW_ADAPTIVITY_DML 0 -#endif - -#ifndef CONFIG_RTW_ADAPTIVITY_DC_BACKOFF - #define CONFIG_RTW_ADAPTIVITY_DC_BACKOFF 4 -#endif - -#ifndef CONFIG_RTW_NHM_EN - #define CONFIG_RTW_NHM_EN 0 -#endif - -//#include - -#endif // __DRV_CONF_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/drv_types.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/drv_types.h deleted file mode 100644 index d5030be..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/drv_types.h +++ /dev/null @@ -1,864 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -/*------------------------------------------------------------------------------- - - For type defines and data structure defines - ---------------------------------------------------------------------------------*/ - - -#ifndef __DRV_TYPES_H__ -#define __DRV_TYPES_H__ - -#include - - -#ifdef PLATFORM_OS_XP -#include -#endif - -#ifdef PLATFORM_OS_CE -#include -#endif - -#ifdef PLATFORM_LINUX -#include -#endif - - -#if defined (__ICCARM__) -#define _PACKED __packed -#define _WEAK __weak -#else -#define _PACKED __attribute__ ((packed)) -#define _WEAK __attribute__ ((weak)) -#endif - -// Assign memory sectinon usage -#if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) -#include -//#include "rtl_utility_ram.h" -#include "platform/platform_stdlib.h" - -#else -#define SRAM_BD_DATA_SECTION -#define WLAN_ROM_TEXT_SECTION -#define WLAN_ROM_DATA_SECTION -#define _LONG_CALL_ -#endif - -#ifdef CONFIG_TRACE_SKB -#define SKBLIST_ALL 0xFFFFFFFF -// receive -#define SKBLIST_RECVBUF_MASK 0x0000000F -#define SKBLIST_RECVBUF 0x00000001 -#define SKBLIST_RECVBUF_FREEQUEUE 0x00000002 -#define SKBLIST_RECVBUF_PENDINGQUEUE 0x00000004 - -#define SKBLIST_RECVFRAME_MASK 0x000000F0 -#define SKBLIST_RECVFRAME 0x00000010 -#define SKBLIST_RECVFRAME_FREEQUEUE 0x00000020 -#define SKBLIST_RECVFRAME_SWDECQUEUE 0x00000040 -#ifdef CONFIG_RECV_REORDERING_CTRL -#define SKBLIST_RECVFRAME_REORDERQUEUE 0x00000080 -#endif - -// transmit -#define SKBLIST_XMITBUF_MASK 0x0000FF00 -#define SKBLIST_XMITBUF 0x00000100 -#define SKBLIST_XMITEXTBUF 0x00000200 -#define SKBLIST_XMITBUF_FREEQUEUE 0x00000400 -#define SKBLIST_XMITEXTBUF_FREEQUEUE 0x00000800 -#define SKBLIST_XMITBUF_PENDINGQUEUE 0x00001000 -#ifdef CONFIG_SDIO_TX_MULTI_QUEUE -#define SKBLIST_XMITBUF_PENDING0QUEUE 0x00002000 -#define SKBLIST_XMITBUF_PENDING1QUEUE 0x00004000 -#define SKBLIST_XMITBUF_PENDING2QUEUE 0x00008000 -#endif - -#define SKBLIST_XMITFRAME_MASK 0x0FFF0000 -#define SKBLIST_XMITFRAME 0x00010000 -#define SKBLIST_XMITFRAME_FREEQUEUE 0x00020000 -#define SKBLIST_XMITFRAME_SLEEPQUEUE 0x00040000 -#define SKBLIST_XMITFRAME_VOQUEUE 0x00100000 -#define SKBLIST_XMITFRAME_VIQUEUE 0x00200000 -#define SKBLIST_XMITFRAME_BEQUEUE 0x00400000 -#define SKBLIST_XMITFRAME_BKQUEUE 0x00800000 -#define SKBLIST_XMITFRAME_BMQUEUE 0x01000000 - -#define SKBLIST_POOL 0x10000000 -#endif - -enum _NIC_VERSION { - - RTL8711_NIC, - RTL8712_NIC, - RTL8713_NIC, - RTL8716_NIC - -}; - -typedef struct _ADAPTER _adapter, ADAPTER, *PADAPTER; - -#include "wireless.h" -#include -#include -#include -#include -#include - -#include - -#ifdef CONFIG_80211N_HT -#include -#endif - -#include -#include -//#include -#include -#include -#include -#include -#include -#include -#ifdef CONFIG_INCLUDE_WPA_PSK -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef CONFIG_P2P_NEW -#include -#endif -//#include -#include -#include - -#include - -#include - -#ifdef CONFIG_WAPI_SUPPORT -#include -#endif - -#ifdef CONFIG_DRVEXT_MODULE -#include -#endif - -#ifdef CONFIG_MP_INCLUDED -#include -#endif - -#ifdef CONFIG_BR_EXT -#include -#endif // CONFIG_BR_EXT - -#ifdef CONFIG_IOCTL_CFG80211 - #include "ioctl_cfg80211.h" -#endif //CONFIG_IOCTL_CFG80211 - -#define SPEC_DEV_ID_NONE BIT(0) -#define SPEC_DEV_ID_DISABLE_HT BIT(1) -#define SPEC_DEV_ID_ENABLE_PS BIT(2) -#define SPEC_DEV_ID_RF_CONFIG_1T1R BIT(3) -#define SPEC_DEV_ID_RF_CONFIG_2T2R BIT(4) -#define SPEC_DEV_ID_ASSIGN_IFNAME BIT(5) - -struct specific_device_id{ - - uint32_t flags; - - uint16_t idVendor; - uint16_t idProduct; - -}; - -struct registry_priv -{ - uint8_t chip_version; -// uint8_t rfintfs; -// uint8_t lbkmode; - uint8_t hci; - NDIS_802_11_SSID ssid; -// uint8_t network_mode; //infra, ad-hoc, auto - uint8_t channel;//ad-hoc support requirement - uint8_t wireless_mode;//A, B, G, auto - uint8_t scan_mode;//active, passive -// uint8_t radio_enable; -// uint8_t preamble;//long, short, auto - uint8_t vrtl_carrier_sense;//Enable, Disable, Auto - uint8_t vcs_type;//RTS/CTS, CTS-to-self - uint16_t rts_thresh; -// uint8_t adhoc_tx_pwr; - uint8_t soft_ap; - uint8_t power_mgnt; - uint8_t ps_enable; - uint8_t ips_mode; - uint8_t smart_ps; -// uint8_t long_retry_lmt; -// uint8_t short_retry_lmt; -// uint16_t busy_thresh; -// uint8_t ack_policy; - uint8_t mp_mode; - uint8_t software_encrypt; - uint8_t software_decrypt; - #ifdef CONFIG_TX_EARLY_MODE - uint8_t early_mode; - #endif - uint8_t acm_method; - //UAPSD - uint8_t wmm_enable; - uint8_t uapsd_enable; -// uint8_t uapsd_max_sp; -// uint8_t uapsd_acbk_en; -// uint8_t uapsd_acbe_en; -// uint8_t uapsd_acvi_en; -// uint8_t uapsd_acvo_en; - -// WLAN_BSSID_EX dev_network; - uint32_t beacon_period; - -#ifdef CONFIG_80211N_HT - uint8_t ht_enable; -#if !defined(NOT_SUPPORT_40M) - uint8_t cbw40_enable; -#endif - uint8_t ampdu_enable;//for tx - uint8_t rx_stbc; - uint8_t ampdu_amsdu;//A-MPDU Supports A-MSDU is permitted -#endif - //uint8_t lowrate_two_xmit; - - uint8_t rf_config ; -// uint8_t low_power ; - uint8_t power_percentage_idx; - - uint8_t wifi_spec;// !turbo_mode - - uint8_t channel_plan; -#ifdef CONFIG_BT_COEXIST - uint8_t btcoex; - uint8_t bt_iso; - uint8_t bt_sco; - uint8_t bt_ampdu; -#endif -#if RX_AGGREGATION - BOOLEAN bAcceptAddbaReq; -#endif -// uint8_t antdiv_cfg; -// uint8_t antdiv_type; - -#ifdef CONFIG_AUTOSUSPEND - uint8_t usbss_enable;//0:disable,1:enable -#endif -#ifdef SUPPORT_HW_RFOFF_DETECTED - uint8_t hwpdn_mode;//0:disable,1:enable,2:decide by EFUSE config - uint8_t hwpwrp_detect;//0:disable,1:enable -#endif -#ifdef CONFIG_SUPPORT_HW_WPS_PBC - uint8_t hw_wps_pbc;//0:disable,1:enable -#endif - -#ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE - char adaptor_info_caching_file_path[PATH_LENGTH_MAX]; -#endif - -#ifdef CONFIG_LAYER2_ROAMING - uint8_t max_roaming_times; // the max number driver will try to roaming -#endif - -#ifdef CONFIG_IOL - bool force_iol; //enable iol without other concern -#endif - -#ifdef CONFIG_80211D - uint8_t enable80211d; -#endif - - uint8_t ifname[16]; - uint8_t if2name[16]; - -#if (RTW_NOTCH_FILTER != 0) - uint8_t notch_filter; -#endif - -#ifdef CONFIG_SPECIAL_SETTING_FOR_FUNAI_TV - uint8_t force_ant;//0 normal,1 main,2 aux - uint8_t force_igi;//0 normal -#endif - - //define for tx power adjust - uint8_t RegEnableTxPowerLimit; - uint8_t RegEnableTxPowerByRate; -#ifdef CONFIG_RF_GAIN_OFFSET - uint8_t RegEnableKFree; -#endif - uint8_t RegPowerBase; - uint8_t RegPwrTblSel; - - uint8_t adaptivity_en; - uint8_t adaptivity_mode; - uint8_t adaptivity_dml; - uint8_t adaptivity_dc_backoff; - int8_t adaptivity_th_l2h_ini; -// uint8_t nhm_en; -}; - -//For registry parameters -#define RGTRY_OFT(field) ((uint32_t)FIELD_OFFSET(struct registry_priv,field)) -#define RGTRY_SZ(field) sizeof(((struct registry_priv*) 0)->field) -#define BSSID_OFT(field) ((uint32_t)FIELD_OFFSET(WLAN_BSSID_EX,field)) -#define BSSID_SZ(field) sizeof(((PWLAN_BSSID_EX) 0)->field) - -#define MAX_CONTINUAL_URB_ERR 4 - -#ifdef CONFIG_CONCURRENT_MODE -#define is_primary_adapter(adapter) (adapter->adapter_type == PRIMARY_ADAPTER) -#define get_iface_type(adapter) (adapter->iface_type) -#else -#define is_primary_adapter(adapter) (1) -#define get_iface_type(adapter) (IFACE_PORT0) -#endif - -enum _IFACE_TYPE { - IFACE_PORT0, //mapping to port0 for C/D series chips - IFACE_PORT1, //mapping to port1 for C/D series chip - MAX_IFACE_PORT, -}; - -enum _ADAPTER_TYPE { - PRIMARY_ADAPTER, - SECONDARY_ADAPTER, - MAX_ADAPTER, -}; - -struct dvobj_priv -{ - void *if1; -#ifdef CONFIG_CONCURRENT_MODE - void *if2; -#endif - - //For 92D, DMDP have 2 interface. - //uint8_t InterfaceNumber; - //uint8_t NumInterfaces; -#ifdef CONFIG_CONCURRENT_MODE - void *padapters[MAX_IFACE_PORT]; - uint8_t iface_nums; // total number of ifaces used runtime -#endif - //In /Out Pipe information - //int RtInPipe[2]; - uint8_t RtOutPipe[3];//int RtOutPipe[3]; - uint8_t Queue2Pipe[HW_QUEUE_ENTRY];//for out pipe mapping - - //uint8_t irq_alloc; - -/*-------- below is for SDIO INTERFACE --------*/ -#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) - // - // SDIO ISR Related - // - uint32_t sdio_himr; - - // - // SDIO Tx FIFO related. - // - // HIQ, MID, LOW, PUB free pages; padapter->xmitpriv.free_txpg - uint8_t SdioTxFIFOFreePage[TX_FREE_PG_QUEUE]; - _lock SdioTxFIFOFreePageLock; - - // - // SDIO Rx FIFO related. - // - uint16_t SdioRxFIFOSize; - -#ifdef INTF_DATA - INTF_DATA intf_data; -#endif -#endif //CONFIG_SDIO_HCI - -/*-------- below is for USB INTERFACE --------*/ - -#ifdef CONFIG_USB_HCI - - uint8_t irq_alloc; - uint8_t nr_endpoint; - uint8_t ishighspeed; - uint8_t RtNumInPipes; - uint8_t RtNumOutPipes; - int ep_num[5]; //endpoint number - - int RegUsbSS; - - _sema usb_suspend_sema; - -#ifdef CONFIG_USB_VENDOR_REQ_MUTEX - _mutex usb_vendor_req_mutex; -#endif - -#ifdef CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC - uint8_t * usb_alloc_vendor_req_buf; - uint8_t * usb_vendor_req_buf; -#endif - -#ifdef PLATFORM_WINDOWS - //related device objects - PDEVICE_OBJECT pphysdevobj;//pPhysDevObj; - PDEVICE_OBJECT pfuncdevobj;//pFuncDevObj; - PDEVICE_OBJECT pnextdevobj;//pNextDevObj; - - uint8_t nextdevstacksz;//unsigned char NextDeviceStackSize; //= (CHAR)CEdevice->pUsbDevObj->StackSize + 1; - - //urb for control diescriptor request - -#ifdef PLATFORM_OS_XP - struct _URB_CONTROL_DESCRIPTOR_REQUEST descriptor_urb; - PUSB_CONFIGURATION_DESCRIPTOR pconfig_descriptor;//UsbConfigurationDescriptor; -#endif - -#ifdef PLATFORM_OS_CE - WCHAR active_path[MAX_ACTIVE_REG_PATH]; // adapter regpath - USB_EXTENSION usb_extension; - - _nic_hdl pipehdls_r8192c[0x10]; -#endif - - uint32_t config_descriptor_len;//uint32_t UsbConfigurationDescriptorLength; -#endif//PLATFORM_WINDOWS - -#ifdef PLATFORM_LINUX - struct usb_interface *pusbintf; - struct usb_device *pusbdev; -#endif//PLATFORM_LINUX - -#ifdef PLATFORM_FREEBSD - struct usb_interface *pusbintf; - struct usb_device *pusbdev; -#endif//PLATFORM_FREEBSD - ATOMIC_T continual_urb_error; -#endif//CONFIG_USB_HCI - -/*-------- below is for PCIE INTERFACE --------*/ - -#ifdef CONFIG_PCI_HCI - uint8_t irq_alloc; - -#ifdef PLATFORM_LINUX - struct pci_dev *ppcidev; - - //PCI MEM map - unsigned long pci_mem_end; /* shared mem end */ - unsigned long pci_mem_start; /* shared mem start */ - - //PCI IO map - unsigned long pci_base_addr; /* device I/O address */ - - //PciBridge - struct pci_priv pcipriv; - - uint16_t irqline; - uint8_t irq_enabled; - RT_ISR_CONTENT isr_content; - _lock irq_th_lock; - - //ASPM - uint8_t const_pci_aspm; - uint8_t const_amdpci_aspm; - uint8_t const_hwsw_rfoff_d3; - uint8_t const_support_pciaspm; - // pci-e bridge */ - uint8_t const_hostpci_aspm_setting; - // pci-e device */ - uint8_t const_devicepci_aspm_setting; - uint8_t b_support_aspm; // If it supports ASPM, Offset[560h] = 0x40, otherwise Offset[560h] = 0x00. - uint8_t b_support_backdoor; - uint8_t bdma64; -#endif//PLATFORM_LINUX - -#if defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) - uint8_t irq_enabled; - _lock irq_th_lock; -#endif //PLATFORM_FREERTOS - -#endif//CONFIG_PCI_HCI - -#ifdef CONFIG_LX_HCI - uint8_t irq_alloc; -#if defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) - uint8_t irq_enabled; - _lock irq_th_lock; -#endif //PLATFORM_FREERTOS -#endif - -}; - -#ifdef PLATFORM_LINUX -static struct device *dvobj_to_dev(struct dvobj_priv *dvobj) -{ - /* todo: get interface type from dvobj and the return the dev accordingly */ -#ifdef RTW_DVOBJ_CHIP_HW_TYPE -#endif - -#ifdef CONFIG_USB_HCI - return &dvobj->pusbintf->dev; -#endif -#ifdef CONFIG_SDIO_HCI - return &dvobj->intf_data.func->dev; -#endif -#ifdef CONFIG_GSPI_HCI - return &dvobj->intf_data.func->dev; -#endif -#ifdef CONFIG_PCI_HCI - return &dvobj->ppcidev->dev; -#endif -} -#endif - -#ifdef CONFIG_CONCURRENT_MODE -struct co_data_priv{ - - //george@20120518 - //current operating channel/bw/ch_offset - //save the correct ch/bw/ch_offset whatever the inputted values are - //when calling set_channel_bwmode() at concurrent mode - //for debug check or reporting to layer app (such as wpa_supplicant for nl80211) - uint8_t co_ch; - uint8_t co_bw; - uint8_t co_ch_offset; - uint8_t rsvd; - -}; -#endif //CONFIG_CONCURRENT_MODE - -typedef enum _DRIVER_STATE{ - DRIVER_NORMAL = 0, - DRIVER_DISAPPEAR = 1, - DRIVER_REPLACE_DONGLE = 2, -}DRIVER_STATE; - -#ifdef CONFIG_INTEL_PROXIM -struct proxim { - bool proxim_support; - bool proxim_on; - - void *proximity_priv; - int (*proxim_rx)(_adapter *padapter, - union recv_frame *precv_frame); - uint8_t (*proxim_get_var)(_adapter* padapter, uint8_t type); -}; -#endif //CONFIG_INTEL_PROXIM - -#ifdef CONFIG_MAC_LOOPBACK_DRIVER -typedef struct loopbackdata -{ - _sema sema; - _thread_hdl_ lbkthread; - uint8_t bstop; - uint32_t cnt; - uint16_t size; - uint16_t txsize; - uint8_t txbuf[0x8000]; - uint16_t rxsize; - uint8_t rxbuf[0x8000]; - uint8_t msg[100]; - -}LOOPBACKDATA, *PLOOPBACKDATA; -#endif - -struct _ADAPTER{ -#ifdef CONFIG_EASY_REPLACEMENT - int DriverState;// for disable driver using module, use dongle to replace module. - int bDongle;//build-in module or external dongle - -#endif -#ifdef PLATFORM_LINUX - int pid[3];//process id from UI, 0:wps, 1:hostapd, 2:dhcpcd -#endif - -#ifdef CONFIG_PROC_DEBUG - uint16_t chip_type; -#endif - - uint16_t HardwareType; - uint16_t interface_type;//USB,SDIO,SPI,PCI - uint32_t work_mode; //STA, AP, STA+AP, PROMISC, P2P - - struct dvobj_priv *dvobj; - struct mlme_priv mlmepriv; - struct mlme_ext_priv mlmeextpriv; - struct cmd_priv cmdpriv; - struct evt_priv evtpriv; - //struct io_queue *pio_queue; - struct io_priv iopriv; - struct xmit_priv xmitpriv; - struct recv_priv recvpriv; - struct sta_priv stapriv; - struct security_priv securitypriv; - struct registry_priv registrypriv; - struct pwrctrl_priv pwrctrlpriv; - struct eeprom_priv eeprompriv; -//TODO -// struct led_priv ledpriv; - - -#ifdef CONFIG_MP_INCLUDED - struct mp_priv mppriv; -#endif - -#ifdef CONFIG_DRVEXT_MODULE - struct drvext_priv drvextpriv; -#endif - -#if defined(CONFIG_HOSTAPD_MLME) && defined (CONFIG_AP_MODE) - struct hostapd_priv *phostapdpriv; -#endif - -#ifdef CONFIG_IOCTL_CFG80211 -#ifdef CONFIG_P2P - struct cfg80211_wifidirect_info cfg80211_wdinfo; -#endif //CONFIG_P2P -#endif //CONFIG_IOCTL_CFG80211 - -#ifdef CONFIG_P2P_NEW - struct wifidirect_info wdinfo; -#endif //CONFIG_P2P - -#ifdef CONFIG_TDLS - struct tdls_info tdlsinfo; -#endif //CONFIG_TDLS - -#ifdef CONFIG_WAPI_SUPPORT - uint8_t WapiSupport; - RT_WAPI_T wapiInfo; -#endif - - -#ifdef CONFIG_WFD - struct wifi_display_info wfd_info; -#endif //CONFIG_WFD - - PVOID HalData; - uint32_t hal_data_sz; - struct hal_ops HalFunc; - - int32_t bDriverStopped; - int32_t bSurpriseRemoved; - int32_t bCardDisableWOHSM; - uint8_t RxStop; //Used to stop rx thread as early as possible - - uint32_t IsrContent; - uint32_t ImrContent; - - uint8_t EepromAddressSize; - uint8_t hw_init_completed; - uint8_t bDriverIsGoingToUnload; - uint8_t init_adpt_in_progress; - uint8_t bMpDriver; - -#ifdef CONFIG_AP_MODE - uint8_t bForwardingDisabled; -#endif - -#if defined(CONFIG_EVENT_THREAD_MODE) - _thread_hdl_ evtThread; -#endif -#if defined(CONFIG_ISR_THREAD_MODE_POLLING) || defined(CONFIG_ISR_THREAD_MODE_INTERRUPT) - struct task_struct isrThread; -#endif - struct task_struct cmdThread; -#ifdef CONFIG_XMIT_THREAD_MODE - struct task_struct xmitThread; -#endif -#if defined(CONFIG_RECV_THREAD_MODE) - struct task_struct recvThread; -#endif -#ifdef CONFIG_RECV_TASKLET_THREAD - struct task_struct recvtasklet_thread; -#endif -#ifdef CONFIG_XMIT_TASKLET_THREAD -#ifdef PLATFORM_LINUX - struct tasklet_struct xmit_tasklet; -#else - struct task_struct xmittasklet_thread; -#endif -#endif -#ifdef CONFIG_SDIO_XMIT_THREAD - struct task_struct SdioXmitThread; -#endif //CONFIG_XMIT_TASKLET_THREAD - - -#if !defined(PLATFORM_LINUX) && !defined(PLATFORM_ECOS) && !defined(PLATFORM_FREERTOS) && !defined(PLATFORM_CMSIS_RTOS) - NDIS_STATUS (*dvobj_init)(struct dvobj_priv *dvobj); - void (*dvobj_deinit)(struct dvobj_priv *dvobj); -#endif - - void (*intf_start)(_adapter * adapter); - void (*intf_stop)(_adapter * adapter); - -#ifdef PLATFORM_WINDOWS - _nic_hdl hndis_adapter;//hNdisAdapter(NDISMiniportAdapterHandle); - _nic_hdl hndis_config;//hNdisConfiguration; - NDIS_STRING fw_img; - - uint32_t NdisPacketFilter; - uint8_t MCList[MAX_MCAST_LIST_NUM][6]; - uint32_t MCAddrCount; -#endif //end of PLATFORM_WINDOWS - -#ifdef PLATFORM_ECOS - _nic_hdl pnetdev; - int bup; - struct net_device_stats stats; -#endif //#ifdef PLATFORM_ECOS - -#if defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) - _nic_hdl pnetdev; - int bup; - struct net_device_stats stats; -#endif //#ifdef PLATFORM_FREERTOS - -#ifdef PLATFORM_LINUX - _nic_hdl pnetdev; - - // used by rtw_rereg_nd_name related function - struct rereg_nd_name_data { - _nic_hdl old_pnetdev; - char old_ifname[IFNAMSIZ]; - uint8_t old_ips_mode; - uint8_t old_bRegUseLed; - } rereg_nd_name_priv; - - int bup; - struct net_device_stats stats; - struct iw_statistics iwstats; - struct proc_dir_entry *dir_dev;// for proc directory - -#ifdef CONFIG_IOCTL_CFG80211 - struct wireless_dev *rtw_wdev; -#endif //CONFIG_IOCTL_CFG80211 - -#endif //end of PLATFORM_LINUX - -#ifdef PLATFORM_FREEBSD - _nic_hdl pifp; - int bup; - _lock glock; -#endif //PLATFORM_FREEBSD - uint8_t net_closed; - - uint8_t bFWReady; - //uint8_t bBTFWReady; - //uint8_t bReadPortCancel; - //uint8_t bWritePortCancel; - uint8_t bLinkInfoDump; - uint8_t bRxRSSIDisplay; -#ifdef CONFIG_AUTOSUSPEND - uint8_t bDisableAutosuspend; -#endif - - _adapter *pbuddy_adapter; - - _mutex *hw_init_mutex; -#if defined(CONFIG_CONCURRENT_MODE) - uint8_t isprimary; //is primary adapter or not - uint8_t adapter_type; - uint8_t iface_type; //interface port type - - //for global synchronization - _mutex *ph2c_fwcmd_mutex; - _mutex *psetch_mutex; - _mutex *psetbw_mutex; - - struct co_data_priv *pcodatapriv;//data buffer shared among interfaces -#endif - -#ifdef CONFIG_BR_EXT - _lock br_ext_lock; - //unsigned int macclone_completed; - struct nat25_network_db_entry *nethash[NAT25_HASH_SIZE]; - int pppoe_connection_in_progress; - unsigned char pppoe_addr[MACADDRLEN]; - unsigned char scdb_mac[MACADDRLEN]; - unsigned char scdb_ip[4]; - struct nat25_network_db_entry *scdb_entry; - unsigned char br_mac[MACADDRLEN]; - unsigned char br_ip[4]; - - struct br_ext_info ethBrExtInfo; -#endif // CONFIG_BR_EXT - -#ifdef CONFIG_INTEL_PROXIM - /* intel Proximity, should be alloc mem - * in intel Proximity module and can only - * be used in intel Proximity mode */ - struct proxim proximity; -#endif //CONFIG_INTEL_PROXIM - -#ifdef CONFIG_MAC_LOOPBACK_DRIVER - PLOOPBACKDATA ploopback; -#endif - - uint8_t fix_rate; -#ifdef CONFIG_CAC_TEST - unsigned char in_cta_test; -#endif - /* This flag is used to dynamically enabling debug message if - certain sympton happen. Use iwpriv command to enable it */ -#if defined(CONFIG_DEBUG_DYNAMIC) - uint8_t debug_level; -#endif - -}; - -#define adapter_to_dvobj(adapter) (adapter->dvobj) -#define adapter_to_pwrctl(adapter) (&adapter->pwrctrlpriv) - -int rtw_handle_dualmac(_adapter *adapter, bool init); - -__inline static uint8_t *myid(struct eeprom_priv *peepriv) -{ - return (peepriv->mac_addr); -} - -#if 0 //#if (CONFIG_LWIP_LAYER == 0) -// For FPGA test program -#define _htons(x) (x) -#define _htons(x) (x) -#define _htons(x) (x) -#define _htons(x) (x) -#endif - -//fast reconnection function prototype -typedef int (*init_done_ptr)(void); -#endif //__DRV_TYPES_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/ethernet.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/ethernet.h deleted file mode 100644 index acb1544..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/ethernet.h +++ /dev/null @@ -1,42 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -/*! \file */ -#ifndef __INC_ETHERNET_H -#define __INC_ETHERNET_H - -#define ETHERNET_ADDRESS_LENGTH 6 //!< Ethernet Address Length -#define ETHERNET_HEADER_SIZE 14 //!< Ethernet Header Length -#define LLC_HEADER_SIZE 6 //!< LLC Header Length -#define TYPE_LENGTH_FIELD_SIZE 2 //!< Type/Length Size -#define MINIMUM_ETHERNET_PACKET_SIZE 60 //!< Minimum Ethernet Packet Size -#define MAXIMUM_ETHERNET_PACKET_SIZE 1514 //!< Maximum Ethernet Packet Size - -#define RT_ETH_IS_MULTICAST(_pAddr) ((((uint8_t *)(_pAddr))[0]&0x01)!=0) //!< Is Multicast Address? -#define RT_ETH_IS_BROADCAST(_pAddr) ( \ - ((uint8_t *)(_pAddr))[0]==0xff && \ - ((uint8_t *)(_pAddr))[1]==0xff && \ - ((uint8_t *)(_pAddr))[2]==0xff && \ - ((uint8_t *)(_pAddr))[3]==0xff && \ - ((uint8_t *)(_pAddr))[4]==0xff && \ - ((uint8_t *)(_pAddr))[5]==0xff ) //!< Is Broadcast Address? - - -#endif // #ifndef __INC_ETHERNET_H - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_com.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_com.h deleted file mode 100644 index 1f9c1c2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_com.h +++ /dev/null @@ -1,287 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __HAL_COMMON_H__ -#define __HAL_COMMON_H__ - -#include "HalVerDef.h" -#include "hal_pg.h" -#include "hal_intf.h" -#include "hal_phy.h" -#include "hal_phy_reg.h" -#include "hal_com_reg.h" -#include "hal_com_phycfg.h" - -//---------------------------------------------------------------------------- -// Rate Definition -//---------------------------------------------------------------------------- -//CCK -#define RATR_1M 0x00000001 -#define RATR_2M 0x00000002 -#define RATR_55M 0x00000004 -#define RATR_11M 0x00000008 -//OFDM -#define RATR_6M 0x00000010 -#define RATR_9M 0x00000020 -#define RATR_12M 0x00000040 -#define RATR_18M 0x00000080 -#define RATR_24M 0x00000100 -#define RATR_36M 0x00000200 -#define RATR_48M 0x00000400 -#define RATR_54M 0x00000800 -//MCS 1 Spatial Stream -#define RATR_MCS0 0x00001000 -#define RATR_MCS1 0x00002000 -#define RATR_MCS2 0x00004000 -#define RATR_MCS3 0x00008000 -#define RATR_MCS4 0x00010000 -#define RATR_MCS5 0x00020000 -#define RATR_MCS6 0x00040000 -#define RATR_MCS7 0x00080000 -//MCS 2 Spatial Stream -#define RATR_MCS8 0x00100000 -#define RATR_MCS9 0x00200000 -#define RATR_MCS10 0x00400000 -#define RATR_MCS11 0x00800000 -#define RATR_MCS12 0x01000000 -#define RATR_MCS13 0x02000000 -#define RATR_MCS14 0x04000000 -#define RATR_MCS15 0x08000000 - -//CCK -#define RATE_1M BIT(0) -#define RATE_2M BIT(1) -#define RATE_5_5M BIT(2) -#define RATE_11M BIT(3) -//OFDM -#define RATE_6M BIT(4) -#define RATE_9M BIT(5) -#define RATE_12M BIT(6) -#define RATE_18M BIT(7) -#define RATE_24M BIT(8) -#define RATE_36M BIT(9) -#define RATE_48M BIT(10) -#define RATE_54M BIT(11) -//MCS 1 Spatial Stream -#define RATE_MCS0 BIT(12) -#define RATE_MCS1 BIT(13) -#define RATE_MCS2 BIT(14) -#define RATE_MCS3 BIT(15) -#define RATE_MCS4 BIT(16) -#define RATE_MCS5 BIT(17) -#define RATE_MCS6 BIT(18) -#define RATE_MCS7 BIT(19) -//MCS 2 Spatial Stream -#define RATE_MCS8 BIT(20) -#define RATE_MCS9 BIT(21) -#define RATE_MCS10 BIT(22) -#define RATE_MCS11 BIT(23) -#define RATE_MCS12 BIT(24) -#define RATE_MCS13 BIT(25) -#define RATE_MCS14 BIT(26) -#define RATE_MCS15 BIT(27) - -// ALL CCK Rate -#define RATE_ALL_CCK RATR_1M|RATR_2M|RATR_55M|RATR_11M -#define RATE_ALL_OFDM_AG RATR_6M|RATR_9M|RATR_12M|RATR_18M|RATR_24M|\ - RATR_36M|RATR_48M|RATR_54M -#define RATE_ALL_OFDM_1SS RATR_MCS0|RATR_MCS1|RATR_MCS2|RATR_MCS3 |\ - RATR_MCS4|RATR_MCS5|RATR_MCS6 |RATR_MCS7 -#define RATE_ALL_OFDM_2SS RATR_MCS8|RATR_MCS9 |RATR_MCS10|RATR_MCS11|\ - RATR_MCS12|RATR_MCS13|RATR_MCS14|RATR_MCS15 - -/*------------------------------ Tx Desc definition Macro ------------------------*/ -//#pragma mark -- Tx Desc related definition. -- -//---------------------------------------------------------------------------- -//----------------------------------------------------------- -// Rate -//----------------------------------------------------------- -// CCK Rates, TxHT = 0 -#define DESC_RATE1M 0x00 -#define DESC_RATE2M 0x01 -#define DESC_RATE5_5M 0x02 -#define DESC_RATE11M 0x03 - -// OFDM Rates, TxHT = 0 -#define DESC_RATE6M 0x04 -#define DESC_RATE9M 0x05 -#define DESC_RATE12M 0x06 -#define DESC_RATE18M 0x07 -#define DESC_RATE24M 0x08 -#define DESC_RATE36M 0x09 -#define DESC_RATE48M 0x0a -#define DESC_RATE54M 0x0b - -// MCS Rates, TxHT = 1 -#define DESC_RATEMCS0 0x0c -#define DESC_RATEMCS1 0x0d -#define DESC_RATEMCS2 0x0e -#define DESC_RATEMCS3 0x0f -#define DESC_RATEMCS4 0x10 -#define DESC_RATEMCS5 0x11 -#define DESC_RATEMCS6 0x12 -#define DESC_RATEMCS7 0x13 -#define DESC_RATEMCS8 0x14 -#define DESC_RATEMCS9 0x15 -#define DESC_RATEMCS10 0x16 -#define DESC_RATEMCS11 0x17 -#define DESC_RATEMCS12 0x18 -#define DESC_RATEMCS13 0x19 -#define DESC_RATEMCS14 0x1a -#define DESC_RATEMCS15 0x1b -#define DESC_RATEMCS16 0x1C -#define DESC_RATEMCS17 0x1D -#define DESC_RATEMCS18 0x1E -#define DESC_RATEMCS19 0x1F -#define DESC_RATEMCS20 0x20 -#define DESC_RATEMCS21 0x21 -#define DESC_RATEMCS22 0x22 -#define DESC_RATEMCS23 0x23 -#define DESC_RATEMCS24 0x24 -#define DESC_RATEMCS25 0x25 -#define DESC_RATEMCS26 0x26 -#define DESC_RATEMCS27 0x27 -#define DESC_RATEMCS28 0x28 -#define DESC_RATEMCS29 0x29 -#define DESC_RATEMCS30 0x2A -#define DESC_RATEMCS31 0x2B - -#define DESC_RATEVHTSS1MCS0 0x2c -#define DESC_RATEVHTSS1MCS1 0x2d -#define DESC_RATEVHTSS1MCS2 0x2e -#define DESC_RATEVHTSS1MCS3 0x2f -#define DESC_RATEVHTSS1MCS4 0x30 -#define DESC_RATEVHTSS1MCS5 0x31 -#define DESC_RATEVHTSS1MCS6 0x32 -#define DESC_RATEVHTSS1MCS7 0x33 -#define DESC_RATEVHTSS1MCS8 0x34 -#define DESC_RATEVHTSS1MCS9 0x35 -#define DESC_RATEVHTSS2MCS0 0x36 -#define DESC_RATEVHTSS2MCS1 0x37 -#define DESC_RATEVHTSS2MCS2 0x38 -#define DESC_RATEVHTSS2MCS3 0x39 -#define DESC_RATEVHTSS2MCS4 0x3a -#define DESC_RATEVHTSS2MCS5 0x3b -#define DESC_RATEVHTSS2MCS6 0x3c -#define DESC_RATEVHTSS2MCS7 0x3d -#define DESC_RATEVHTSS2MCS8 0x3e -#define DESC_RATEVHTSS2MCS9 0x3f -#define DESC_RATEVHTSS3MCS0 0x40 -#define DESC_RATEVHTSS3MCS1 0x41 -#define DESC_RATEVHTSS3MCS2 0x42 -#define DESC_RATEVHTSS3MCS3 0x43 -#define DESC_RATEVHTSS3MCS4 0x44 -#define DESC_RATEVHTSS3MCS5 0x45 -#define DESC_RATEVHTSS3MCS6 0x46 -#define DESC_RATEVHTSS3MCS7 0x47 -#define DESC_RATEVHTSS3MCS8 0x48 -#define DESC_RATEVHTSS3MCS9 0x49 -#define DESC_RATEVHTSS4MCS0 0x4A -#define DESC_RATEVHTSS4MCS1 0x4B -#define DESC_RATEVHTSS4MCS2 0x4C -#define DESC_RATEVHTSS4MCS3 0x4D -#define DESC_RATEVHTSS4MCS4 0x4E -#define DESC_RATEVHTSS4MCS5 0x4F -#define DESC_RATEVHTSS4MCS6 0x50 -#define DESC_RATEVHTSS4MCS7 0x51 -#define DESC_RATEVHTSS4MCS8 0x52 -#define DESC_RATEVHTSS4MCS9 0x53 - -typedef enum _FIRMWARE_SOURCE { - FW_SOURCE_IMG_FILE = 0, - FW_SOURCE_HEADER_FILE = 1, //from header file -} FIRMWARE_SOURCE, *PFIRMWARE_SOURCE; - -// BK, BE, VI, VO, HCCA, MANAGEMENT, COMMAND, HIGH, BEACON. -//#define MAX_TX_QUEUE 9 - -#define TX_SELE_HQ BIT(0) // High Queue -#define TX_SELE_LQ BIT(1) // Low Queue -#define TX_SELE_NQ BIT(2) // Normal Queue -#define TX_SELE_EQ BIT(3) // Extern Queue - -#define PageNum_128(_Len) (uint32_t)(((_Len)>>7) + ((_Len)&0x7F ? 1:0)) -#define PageNum_256(_Len) (uint32_t)(((_Len)>>8) + ((_Len)&0xFF ? 1:0)) -#define PageNum_512(_Len) (uint32_t)(((_Len)>>9) + ((_Len)&0x1FF ? 1:0)) -#define PageNum(_Len, _Size) (uint32_t)(((_Len)/(_Size)) + ((_Len)&((_Size) - 1) ? 1:0)) - -#define DYNAMIC_FUNC_DISABLE (0x0) -#define DYNAMIC_ALL_FUNC_ENABLE 0xFFFFFFF - -void dump_chip_info(HAL_VERSION ChipVersion); - - -uint8_t //return the final channel plan decision -hal_com_get_channel_plan( - IN PADAPTER padapter, - IN uint8_t hw_channel_plan, //channel plan from HW (efuse/eeprom) - IN uint8_t sw_channel_plan, //channel plan from SW (registry/module param) - IN uint8_t def_channel_plan, //channel plan used when the former two is invalid - IN BOOLEAN AutoLoadFail - ); - -uint8_t MRateToHwRate(uint8_t rate); - -void HalSetBrateCfg( - IN PADAPTER Adapter, - IN uint8_t *mBratesOS, - OUT uint16_t *pBrateCfg); - -BOOLEAN -Hal_MappingOutPipe( - IN PADAPTER pAdapter, - IN uint8_t NumOutPipe - ); - -BOOLEAN -HAL_IsLegalChannel( - IN _adapter * Adapter, - IN uint32_t Channel - ); - -void hal_init_macaddr(_adapter *adapter); -void SetHwReg(PADAPTER padapter, uint8_t variable, uint8_t *val); -void GetHwReg(PADAPTER padapter, uint8_t variable, uint8_t *val); - -#if defined (CONFIG_RTL8188F) || defined (CONFIG_RTL8711B) -typedef enum _RT_MEDIA_STATUS { - RT_MEDIA_DISCONNECT = 0, - RT_MEDIA_CONNECT = 1 -} RT_MEDIA_STATUS; - - -void GetHalODMVar( - PADAPTER Adapter, - HAL_ODM_VARIABLE eVariable, - PVOID pValue1, - PVOID pValue2); - -void SetHalODMVar( - PADAPTER Adapter, - HAL_ODM_VARIABLE eVariable, - PVOID pValue1, - BOOLEAN bSet); - -uint8_t SetHalDefVar(_adapter *adapter, HAL_DEF_VARIABLE variable, void *value); -uint8_t GetHalDefVar(_adapter *adapter, HAL_DEF_VARIABLE variable, void *value); -void rtw_hal_wow_enable(_adapter *adapter); -void rtw_hal_wow_disable(_adapter *adapter); -#endif -#endif //__HAL_COMMON_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_com_phycfg.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_com_phycfg.h deleted file mode 100644 index fedc68d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_com_phycfg.h +++ /dev/null @@ -1,288 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __HAL_COM_PHYCFG_H__ -#define __HAL_COM_PHYCFG_H__ - -#define PathA 0x0 // Useless -#define PathB 0x1 -#define PathC 0x2 -#define PathD 0x3 - -typedef enum _RATE_SECTION { - CCK = 0, - OFDM, - HT_MCS0_MCS7, - HT_MCS8_MCS15, - HT_MCS16_MCS23, - HT_MCS24_MCS31, - VHT_1SSMCS0_1SSMCS9, - VHT_2SSMCS0_2SSMCS9, - VHT_3SSMCS0_3SSMCS9, - VHT_4SSMCS0_4SSMCS9, -} RATE_SECTION; - -typedef enum _RF_TX_NUM { - RF_1TX = 0, - RF_2TX, - RF_3TX, - RF_4TX, - RF_MAX_TX_NUM, - RF_TX_NUM_NONIMPLEMENT, -} RF_TX_NUM; - -#define MAX_POWER_INDEX 0x3F - -typedef enum _REGULATION_TXPWR_LMT { - TXPWR_LMT_FCC = 0, - TXPWR_LMT_MKK = 1, - TXPWR_LMT_ETSI = 2, - TXPWR_LMT_WW = 3, // WW13, The mininum of ETSI,MKK - TXPWR_LMT_GL = 4, // Global, The mininum of ETSI,MKK,FCC - TXPWR_LMT_MAX_REGULATION_NUM = 5 -} REGULATION_TXPWR_LMT; - -/*------------------------------Define structure----------------------------*/ -typedef struct _BB_REGISTER_DEFINITION{ - uint32_t rfintfs; // set software control: - // 0x870~0x877[8 bytes] - - uint32_t rfintfo; // output data: - // 0x860~0x86f [16 bytes] - - uint32_t rfintfe; // output enable: - // 0x860~0x86f [16 bytes] - - uint32_t rf3wireOffset; // LSSI data: - // 0x840~0x84f [16 bytes] - - uint32_t rfHSSIPara2; // wire parameter control2 : - // 0x824~0x827,0x82c~0x82f, 0x834~0x837, 0x83c~0x83f [16 bytes] - - uint32_t rfLSSIReadBack; //LSSI RF readback data SI mode - // 0x8a0~0x8af [16 bytes] - - uint32_t rfLSSIReadBackPi; //LSSI RF readback data PI mode 0x8b8-8bc for Path A and B - -}BB_REGISTER_DEFINITION_T, *PBB_REGISTER_DEFINITION_T; - - -//---------------------------------------------------------------------- -int32_t -phy_TxPwrIdxToDbm( - IN PADAPTER Adapter, - IN WIRELESS_MODE WirelessMode, - IN uint8_t TxPwrIdx - ); - -uint8_t -PHY_GetTxPowerByRateBase( - IN PADAPTER Adapter, - IN uint8_t Band, - IN uint8_t RfPath, - IN uint8_t TxNum, - IN RATE_SECTION RateSection - ); - -uint8_t -PHY_GetRateSectionIndexOfTxPowerByRate( - IN PADAPTER pAdapter, - IN uint32_t RegAddr, - IN uint32_t BitMask - ); - -void -PHY_GetRateValuesOfTxPowerByRate( - IN PADAPTER pAdapter, - IN uint32_t RegAddr, - IN uint32_t BitMask, - IN uint32_t Value, - OUT uint8_t* RateIndex, - OUT int8_t* PwrByRateVal, - OUT uint8_t* RateNum - ); - -uint8_t -PHY_GetRateIndexOfTxPowerByRate( - IN uint8_t Rate - ); - -void -PHY_SetTxPowerIndexByRateSection( - IN PADAPTER pAdapter, - IN uint8_t RFPath, - IN uint8_t Channel, - IN uint8_t RateSection - ); - -int8_t -PHY_GetTxPowerByRate( - IN PADAPTER pAdapter, - IN uint8_t Band, - IN uint8_t RFPath, - IN uint8_t TxNum, - IN uint8_t RateIndex - ); - -void -PHY_SetTxPowerByRate( - IN PADAPTER pAdapter, - IN uint8_t Band, - IN uint8_t RFPath, - IN uint8_t TxNum, - IN uint8_t Rate, - IN int8_t Value - ); - -void -PHY_SetTxPowerLevelByPath( - IN PADAPTER Adapter, - IN uint8_t channel, - IN uint8_t path - ); - -void -PHY_SetTxPowerIndexByRateArray( - IN PADAPTER pAdapter, - IN uint8_t RFPath, - IN CHANNEL_WIDTH BandWidth, - IN uint8_t Channel, - IN uint8_t* Rates, - IN uint8_t RateArraySize - ); - -void -PHY_InitTxPowerByRate( - IN PADAPTER pAdapter - ); - -void -PHY_StoreTxPowerByRate( - IN PADAPTER pAdapter, - IN uint32_t Band, - IN uint32_t RfPath, - IN uint32_t TxNum, - IN uint32_t RegAddr, - IN uint32_t BitMask, - IN uint32_t Data - ); - -void -PHY_TxPowerByRateConfiguration( - IN PADAPTER pAdapter - ); - -uint8_t -PHY_GetTxPowerIndexBase( - IN PADAPTER pAdapter, - IN uint8_t RFPath, - IN uint8_t Rate, - IN CHANNEL_WIDTH BandWidth, - IN uint8_t Channel, - OUT PBOOLEAN bIn24G - ); - -int8_t -PHY_GetTxPowerLimit( - IN PADAPTER Adapter, - IN uint32_t RegPwrTblSel, - IN BAND_TYPE Band, - IN CHANNEL_WIDTH Bandwidth, - IN uint8_t RfPath, - IN uint8_t DataRate, - IN uint8_t Channel - ); - -void -PHY_SetTxPowerLimit( - IN PADAPTER Adapter, - IN uint8_t Regulation, - IN uint8_t Band, - IN uint8_t Bandwidth, - IN uint8_t RateSection, - IN uint8_t RfPath, - IN uint8_t Channel, - IN uint8_t PowerLimit - ); - -void -PHY_ConvertTxPowerLimitToPowerIndex( - IN PADAPTER Adapter - ); - -void -PHY_InitTxPowerLimit( - IN PADAPTER Adapter - ); - -int8_t -PHY_GetTxPowerTrackingOffset( - PADAPTER pAdapter, - uint8_t Rate, - uint8_t RFPath - ); - -uint8_t -PHY_GetTxPowerIndex( - IN PADAPTER pAdapter, - IN uint8_t RFPath, - IN uint8_t Rate, - IN CHANNEL_WIDTH BandWidth, - IN uint8_t Channel - ); - -void -PHY_SetTxPowerIndex( - IN PADAPTER pAdapter, - IN uint32_t PowerIndex, - IN uint8_t RFPath, - IN uint8_t Rate - ); - -#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE -#define MAX_PARA_FILE_BUF_LEN 25600 - -#define LOAD_MAC_PARA_FILE BIT0 -#define LOAD_BB_PARA_FILE BIT1 -#define LOAD_BB_PG_PARA_FILE BIT2 -#define LOAD_BB_MP_PARA_FILE BIT3 -#define LOAD_RF_PARA_FILE BIT4 -#define LOAD_RF_TXPWR_TRACK_PARA_FILE BIT5 -#define LOAD_RF_TXPWR_LMT_PARA_FILE BIT6 - -int phy_ConfigMACWithParaFile(IN PADAPTER Adapter, IN char* pFileName); - -int phy_ConfigBBWithParaFile(IN PADAPTER Adapter, IN char* pFileName, IN uint32_t ConfigType); - -int phy_ConfigBBWithPgParaFile(IN PADAPTER Adapter, IN char* pFileName); - -int phy_ConfigBBWithMpParaFile(IN PADAPTER Adapter, IN char* pFileName); - -int PHY_ConfigRFWithParaFile(IN PADAPTER Adapter, IN char* pFileName, IN uint8_t eRFPath); - -int PHY_ConfigRFWithTxPwrTrackParaFile(IN PADAPTER Adapter, IN char* pFileName); - -int PHY_ConfigRFWithPowerLimitTableParaFile(IN PADAPTER Adapter, IN char* pFileName); - -void phy_free_filebuf(_adapter *padapter); -#endif //CONFIG_LOAD_PHY_PARA_FROM_FILE - - -#endif //__HAL_COMMON_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_com_reg.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_com_reg.h deleted file mode 100644 index 7d993b1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_com_reg.h +++ /dev/null @@ -1,2075 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __HAL_COMMON_REG_H__ -#define __HAL_COMMON_REG_H__ - - -#define MAC_ADDR_LEN 6 - -#define HAL_NAV_UPPER_UNIT 128 // micro-second - -// 8188E PKT_BUFF_ACCESS_CTRL value -#define TXPKT_BUF_SELECT 0x69 -#define RXPKT_BUF_SELECT 0xA5 -#define DISABLE_TRXPKT_BUF_ACCESS 0x0 - -//============================================================ -// -//============================================================ - -//----------------------------------------------------- -// -// 0x0000h ~ 0x00FFh System Configuration -// -//----------------------------------------------------- -#define REG_SYS_ISO_CTRL_ 0x0000 -#define REG_SYS_FUNC_EN_ 0x0002 -#define REG_APS_FSMCO 0x0004 -#define REG_SYS_CLKR 0x0008 -#define REG_9346CR 0x000A -#define REG_SYS_EEPROM_CTRL 0x000A -#define REG_EE_VPD 0x000C -#define REG_AFE_MISC 0x0010 -#define REG_SPS0_CTRL 0x0011 -#define REG_SPS0_CTRL_6 0x0016 -#define REG_POWER_OFF_IN_PROCESS 0x0017 -#define REG_SPS_OCP_CFG 0x0018 -#define REG_RSV_CTRL 0x001C -#define REG_RF_CTRL 0x001F -#define REG_LDOA15_CTRL 0x0020 -#define REG_LDOV12D_CTRL 0x0021 -#define REG_LDOHCI12_CTRL 0x0022 -#define REG_LPLDO_CTRL 0x0023 -#define REG_AFE_XTAL_CTRL 0x0024 -#define REG_AFE_LDO_CTRL 0x0027 // 1.5v for 8188EE test chip, 1.4v for MP chip -#define REG_AFE_PLL_CTRL 0x0028 -#define REG_MAC_PHY_CTRL 0x002c //for 92d, DMDP,SMSP,DMSP contrl -#define REG_APE_PLL_CTRL_EXT 0x002c -#define REG_EFUSE_CTRL 0x0030 -#define REG_EFUSE_TEST 0x0034 -#define REG_PWR_DATA 0x0038 -#define REG_CAL_TIMER 0x003C -#define REG_ACLK_MON 0x003E -#define REG_GPIO_MUXCFG 0x0040 -#define REG_GPIO_IO_SEL 0x0042 -#define REG_MAC_PINMUX_CFG 0x0043 -#define REG_GPIO_PIN_CTRL 0x0044 -#define REG_GPIO_INTM 0x0048 -#define REG_LEDCFG0 0x004C -#define REG_LEDCFG1 0x004D -#define REG_LEDCFG2 0x004E -#define REG_LEDCFG3 0x004F -#define REG_FSIMR 0x0050 -#define REG_FSISR 0x0054 -#define REG_HSIMR 0x0058 -#define REG_HSISR 0x005c -#define REG_GPIO_PIN_CTRL_2 0x0060 // RTL8723 WIFI/BT/GPS Multi-Function GPIO Pin Control. -#define REG_GPIO_IO_SEL_2 0x0062 // RTL8723 WIFI/BT/GPS Multi-Function GPIO Select. -#define REG_MULTI_FUNC_CTRL 0x0068 // RTL8723 WIFI/BT/GPS Multi-Function control source. -#define REG_GSSR 0x006c -#define REG_AFE_XTAL_CTRL_EXT 0x0078 //RTL8188E -#define REG_XCK_OUT_CTRL 0x007c //RTL8188E -#define REG_MCUFWDL 0x0080 -#define REG_WOL_EVENT 0x0081 //RTL8188E -#define REG_MCUTSTCFG 0x0084 -#define REG_FDHM0 0x0088 -#define REG_HOST_SUSP_CNT 0x00BC // RTL8192C Host suspend counter on FPGA platform -#define REG_SYSTEM_ON_CTRL 0x00CC // For 8723AE Reset after S3 -#define REG_EFUSE_ACCESS 0x00CF // Efuse access protection for RTL8723 -#define REG_BIST_SCAN 0x00D0 -#define REG_BIST_RPT 0x00D4 -#define REG_BIST_ROM_RPT 0x00D8 -#define REG_USB_SIE_INTF 0x00E0 -#define REG_PCIE_MIO_INTF 0x00E4 -#define REG_PCIE_MIO_INTD 0x00E8 -#define REG_HPON_FSM 0x00EC -#define REG_SYS_CFG 0x00F0 -#define REG_GPIO_OUTSTS 0x00F4 // For RTL8723 only. -#define REG_TYPE_ID 0x00FC - - -#define REG_WL_CLK_CTRL 0x0002 -#define REG_WL_FUNC_EN 0x0004 -#define REG_WL_PMC_CTRL 0x0020 -#define REG_WL_AFE_CTRL 0x0050 -#define REG_WL_PMC_IMR 0x0080 -#define REG_WL_PMC_ISR 0x0084 - - -//----------------------------------------------------- -// -// 0x0100h ~ 0x01FFh MACTOP General Configuration -// -//----------------------------------------------------- -#define REG_CR 0x0100 -#define REG_PBP 0x0104 -#define REG_PKT_BUFF_ACCESS_CTRL 0x0106 -#define REG_TRXDMA_CTRL 0x010C -#define REG_TRXFF_BNDY 0x0114 -#define REG_TRXFF_STATUS 0x0118 -#define REG_RXFF_PTR 0x011C -#define REG_HIMR 0x0120 -#define REG_HISR 0x0124 -#define REG_HIMRE 0x0128 -#define REG_HISRE 0x012C -#define REG_CPWM 0x012F -#define REG_FWIMR 0x0130 -#define REG_FWISR 0x0134 -#define REG_FTIMR 0x0138 -#define REG_FTISR 0x013C //RTL8192C -#define REG_PKTBUF_DBG_CTRL 0x0140 -#define REG_RXPKTBUF_CTRL (REG_PKTBUF_DBG_CTRL+2) -#define REG_PKTBUF_DBG_DATA_L 0x0144 -#define REG_PKTBUF_DBG_DATA_H 0x0148 - -#define REG_TC0_CTRL 0x0150 -#define REG_TC1_CTRL 0x0154 -#define REG_TC2_CTRL 0x0158 -#define REG_TC3_CTRL 0x015C -#define REG_TC4_CTRL 0x0160 -#define REG_TCUNIT_BASE 0x0164 -#define REG_MBIST_START 0x0174 -#define REG_MBIST_DONE 0x0178 -#define REG_MBIST_FAIL 0x017C -#define REG_32K_CTRL 0x0194 //RTL8188E -#define REG_C2HEVT_MSG_NORMAL 0x01A0 -#define REG_C2HEVT_CLEAR 0x01AF -#define REG_MCUTST_1 0x01c0 -#define REG_MCUTST_WOWLAN 0x01C7 // Defined after 8188E series. -#define REG_FMETHR 0x01C8 -#define REG_HMETFR 0x01CC -#define REG_HMEBOX_0 0x01D0 -#define REG_HMEBOX_1 0x01D4 -#define REG_HMEBOX_2 0x01D8 -#define REG_HMEBOX_3 0x01DC -#define REG_LLT_INIT 0x01E0 - -//----------------------------------------------------- -// -// 0x0200h ~ 0x027Fh TXDMA Configuration -// -//----------------------------------------------------- -#define REG_RQPN 0x0200 -#define REG_FIFOPAGE 0x0204 -#define REG_TDECTRL 0x0208 -#define REG_TXDMA_OFFSET_CHK 0x020C -#define REG_TXDMA_STATUS 0x0210 -#define REG_RQPN_NPQ 0x0214 -#define REG_AUTO_LLT 0x0224 - - -//----------------------------------------------------- -// -// 0x0280h ~ 0x02FFh RXDMA Configuration -// -//----------------------------------------------------- -#define REG_RXDMA_AGG_PG_TH 0x0280 -#define REG_RXPKT_NUM 0x0284 -#define REG_RXDMA_STATUS 0x0288 -#define REG_C2H_PKT_8723B 0x0294 - - -//----------------------------------------------------- -// -// 0x0300h ~ 0x03FFh PCIe -// -//----------------------------------------------------- -#define REG_PCIE_CTRL_REG 0x0300 -#define REG_INT_MIG 0x0304 // Interrupt Migration -#define REG_BCNQ_DESA 0x0308 // TX Beacon Descriptor Address -#define REG_HQ_DESA 0x0310 // TX High Queue Descriptor Address -#define REG_MGQ_DESA 0x0318 // TX Manage Queue Descriptor Address -#define REG_VOQ_DESA 0x0320 // TX VO Queue Descriptor Address -#define REG_VIQ_DESA 0x0328 // TX VI Queue Descriptor Address -#define REG_BEQ_DESA 0x0330 // TX BE Queue Descriptor Address -#define REG_BKQ_DESA 0x0338 // TX BK Queue Descriptor Address -#define REG_RX_DESA 0x0340 // RX Queue Descriptor Address -//sherry added for DBI Read/Write 20091126 -#define REG_DBI_WDATA 0x0348 // Backdoor REG for Access Configuration -#define REG_DBI_RDATA 0x034C //Backdoor REG for Access Configuration -#define REG_DBI_CTRL 0x0350 //Backdoor REG for Access Configuration -#define REG_DBI_FLAG 0x0352 //Backdoor REG for Access Configuration -#define REG_MDIO 0x0354 // MDIO for Access PCIE PHY -#define REG_DBG_SEL 0x0360 // Debug Selection Register -#define REG_PCIE_HRPWM 0x0361 //PCIe RPWM -#define REG_PCIE_HCPWM 0x0363 //PCIe CPWM -#define REG_WATCH_DOG 0x0368 - -// For new buffer descriptor ring architecture - -#define REG_LX_CTRL1 0x0300 // 4 Bytes - -#define REG_BCNQ_TXBD_DESA 0x0308 // 8 Bytes -#define REG_MGQ_TXBD_DESA 0x0310 // 8 Bytes -#define REG_VOQ_TXBD_DESA 0x0318 // 8 Bytes -#define REG_VIQ_TXBD_DESA 0x0320 // 8 Bytes -#define REG_BEQ_TXBD_DESA 0x0328 // 8 Bytes -#define REG_BKQ_TXBD_DESA 0x0330 // 8 Bytes -#define REG_RXQ_RXBD_DESA 0x0338 // 8 Bytes -#define REG_HI0Q_TXBD_DESA 0x0340 // 8 Bytes -#define REG_HI1Q_TXBD_DESA 0x0348 // 8 Bytes -#define REG_HI2Q_TXBD_DESA 0x0350 // 8 Bytes -#define REG_HI3Q_TXBD_DESA 0x0358 // 8 Bytes -#define REG_HI4Q_TXBD_DESA 0x0360 // 8 Bytes -#define REG_HI5Q_TXBD_DESA 0x0368 // 8 Bytes -#define REG_HI6Q_TXBD_DESA 0x0370 // 8 Bytes -#define REG_HI7Q_TXBD_DESA 0x0378 // 8 Bytes - -#define REG_MGQ_TXBD_NUM 0x0380 // 2 Bytes -#define REG_RX_RXBD_NUM 0x0382 // 2 Bytes -#define REG_VOQ_TXBD_NUM 0x0384 // 2 Bytes -#define REG_VIQ_TXBD_NUM 0x0386 // 2 Bytes -#define REG_BEQ_TXBD_NUM 0x0388 // 2 Bytes -#define REG_BKQ_TXBD_NUM 0x038A // 2 Bytes -#define REG_HI0Q_TXBD_NUM 0x038C // 2 Bytes -#define REG_HI1Q_TXBD_NUM 0x038E // 2 Bytes -#define REG_HI2Q_TXBD_NUM 0x0390 // 2 Bytes -#define REG_HI3Q_TXBD_NUM 0x0392 // 2 Bytes -#define REG_HI4Q_TXBD_NUM 0x0394 // 2 Bytes -#define REG_HI5Q_TXBD_NUM 0x0396 // 2 Bytes -#define REG_HI6Q_TXBD_NUM 0x0398 // 2 Bytes -#define REG_HI7Q_TXBD_NUM 0x039A // 2 Bytes - -#define REG_BD_RWPTR_CLR 0x039C // 4 Bytes -#define REG_VOQ_TXBD_IDX 0x03A0 // 4 Bytes -#define REG_VIQ_TXBD_IDX 0x03A4 // 4 Bytes -#define REG_BEQ_TXBD_IDX 0x03A8 // 4 Bytes -#define REG_BKQ_TXBD_IDX 0x03AC // 4 Bytes -#define REG_MGQ_TXBD_IDX 0x03B0 // 4 Bytes -#define REG_RXQ_RXBD_IDX 0x03B4 // 4 Bytes -#define REG_HI0Q_TXBD_IDX 0x03B8 // 4 Bytes -#define REG_HI1Q_TXBD_IDX 0x03BC // 4 Bytes -#define REG_HI2Q_TXBD_IDX 0x03C0 // 4 Bytes -#define REG_HI3Q_TXBD_IDX 0x03C4 // 4 Bytes -#define REG_HI4Q_TXBD_IDX 0x03C8 // 4 Bytes -#define REG_HI5Q_TXBD_IDX 0x03CC // 4 Bytes -#define REG_HI6Q_TXBD_IDX 0x03D0 // 4 Bytes -#define REG_HI7Q_TXBD_IDX 0x03D4 // 4 Bytes - -//CPWM &RPWM -#define REG_LX_HRPWM_8711B 0x03D9 // 1 Bytes -#define REG_LX_HCPWM_8711B 0x03DA // 1 Bytes //from 0x14c - -#define REG_LX_CTRL2 0x03DB // 1 Bytes - -#define REG_LX_HRPWM2_8711B 0x03DC // 2 Bytes //REG_LX_HCPWM1_8711B -#define REG_LX_HCPWM2_8711B 0x03DE // 2 Bytes -#define REG_LX_H2C_MSG_V1 0x03E0 // 4 Bytes -#define REG_LX_C2H_MSG_V1 0x03E4 // 4 Bytes - - -#define REG_LX_DMA_ISR 0x03E8 // 4 Bytes -#define REG_LX_DMA_IMR 0x03EC // 4 Bytes -#define REG_LX_DMA_DBG 0x03F0 // 4 Bytes - -#define REG_BUS_MIX_CFG 0x03F8 // 4 Bytes# -#define REG_BUS_MIX_CFG1 0x03FC // 4 Bytes - -//----------------------------------------------------- -// -// 0x0400h ~ 0x047Fh Protocol Configuration -// -//----------------------------------------------------- -#define REG_VOQ_INFORMATION 0x0400 -#define REG_VIQ_INFORMATION 0x0404 -#define REG_BEQ_INFORMATION 0x0408 -#define REG_BKQ_INFORMATION 0x040C -#define REG_MGQ_INFORMATION 0x0410 -#define REG_HGQ_INFORMATION 0x0414 -#define REG_BCNQ_INFORMATION 0x0418 -#define REG_TXPKT_EMPTY 0x041A -#define REG_CPU_MGQ_INFORMATION 0x041C -#define REG_FWHW_TXQ_CTRL 0x0420 -#define REG_HWSEQ_CTRL 0x0423 -#define REG_BCNQ_BDNY 0x0424 -#define REG_MGQ_BDNY 0x0425 -#define REG_LIFETIME_CTRL 0x0426 -#define REG_MULTI_BCNQ_OFFSET 0x0427 -#define REG_SPEC_SIFS 0x0428 -#define REG_RL 0x042A -#define REG_DARFRC 0x0430 -#define REG_RARFRC 0x0438 -#define REG_RRSR 0x0440 -#define REG_ARFR0 0x0444 -#define REG_ARFR1 0x0448 -#define REG_ARFR2 0x044C -#define REG_ARFR3 0x0450 -#define REG_BCNQ1_BDNY 0x0457 - -#define REG_AGGLEN_LMT 0x0458 -#define REG_AMPDU_MIN_SPACE 0x045C -#define REG_WMAC_LBK_BF_HD 0x045D -#define REG_FAST_EDCA_CTRL 0x0460 -#define REG_RD_RESP_PKT_TH 0x0463 - -#define REG_INIRTS_RATE_SEL 0x0480 -//#define REG_INIDATA_RATE_SEL 0x0484 -#define REG_MACID_SLEEP_3 0x0484 -#define REG_MACID_SLEEP_1 0x0488 - -#define REG_POWER_STAGE1 0x04B4 -#define REG_POWER_STAGE2 0x04B8 -#define REG_PKT_VO_VI_LIFE_TIME 0x04C0 -#define REG_PKT_BE_BK_LIFE_TIME 0x04C2 -#define REG_STBC_SETTING 0x04C4 -#define REG_QUEUE_CTRL 0x04C6 -#define REG_SINGLE_AMPDU_CTRL 0x04c7 -#define REG_PROT_MODE_CTRL 0x04C8 -#define REG_MAX_AGGR_NUM 0x04CA -#define REG_RTS_MAX_AGGR_NUM 0x04CB -#define REG_BAR_MODE_CTRL 0x04CC -#define REG_RA_TRY_RATE_AGG_LMT 0x04CF -//#define REG_EARLY_MODE_CONTROL 0x04D0 -#define REG_MACID_SLEEP_2 0x04D0 -#define REG_MACID_SLEEP 0x04D4 -#define REG_NQOS_SEQ 0x04DC -#define REG_QOS_SEQ 0x04DE -#define REG_NEED_CPU_HANDLE 0x04E0 -#define REG_PKT_LOSE_RPT 0x04E1 -#define REG_PTCL_ERR_STATUS 0x04E2 -#define REG_TX_RPT_CTRL 0x04EC -#define REG_TX_RPT_TIME 0x04F0 // 2 byte -#define REG_DUMMY 0x04FC - -//----------------------------------------------------- -// -// 0x0500h ~ 0x05FFh EDCA Configuration -// -//----------------------------------------------------- -#define REG_EDCA_VO_PARAM 0x0500 -#define REG_EDCA_VI_PARAM 0x0504 -#define REG_EDCA_BE_PARAM 0x0508 -#define REG_EDCA_BK_PARAM 0x050C -#define REG_BCNTCFG 0x0510 -#define REG_PIFS 0x0512 -#define REG_RDG_PIFS 0x0513 -#define REG_SIFS_CTX 0x0514 -#define REG_SIFS_TRX 0x0516 -#define REG_TSFTR_SYN_OFFSET 0x0518 -#define REG_AGGR_BREAK_TIME 0x051A -#define REG_SLOT 0x051B -#define REG_TX_PTCL_CTRL 0x0520 -#define REG_TXPAUSE 0x0522 -#define REG_DIS_TXREQ_CLR 0x0523 -#define REG_RD_CTRL 0x0524 -// -// Format for offset 540h-542h: -// [3:0]: TBTT prohibit setup in unit of 32us. The time for HW getting beacon content before TBTT. -// [7:4]: Reserved. -// [19:8]: TBTT prohibit hold in unit of 32us. The time for HW holding to send the beacon packet. -// [23:20]: Reserved -// Description: -// | -// |<--Setup--|--Hold------------>| -// --------------|---------------------- -// | -// TBTT -// Note: We cannot update beacon content to HW or send any AC packets during the time between Setup and Hold. -// Described by Designer Tim and Bruce, 2011-01-14. -// -#define REG_TBTT_PROHIBIT 0x0540 -#define REG_RD_NAV_NXT 0x0544 -#define REG_NAV_PROT_LEN 0x0546 -#define REG_BCN_CTRL 0x0550 -#define REG_BCN_CTRL_1 0x0551 -#define REG_MBID_NUM 0x0552 -#define REG_DUAL_TSF_RST 0x0553 -#define REG_BCN_INTERVAL 0x0554 // The same as REG_MBSSID_BCN_SPACE -#define REG_DRVERLYINT 0x0558 -#define REG_BCNDMATIM 0x0559 -#define REG_ATIMWND 0x055A -#define REG_USTIME_TSF 0x055C -#define REG_BCN_MAX_ERR 0x055D -#define REG_RXTSF_OFFSET_CCK 0x055E -#define REG_RXTSF_OFFSET_OFDM 0x055F -#define REG_TSFTR 0x0560 -#define REG_TSFTR1 0x0568 // HW Port 1 TSF Register -#define REG_ATIMWND_1 0x0570 -#define REG_P2P_CTWIN 0x0572 // 1 Byte long (in unit of TU) -#define REG_PSTIMER 0x0580 -#define REG_TIMER0 0x0584 -#define REG_TIMER1 0x0588 -#define REG_ACMHWCTRL 0x05C0 -#define REG_NOA_DESC_SEL 0x05CF -#define REG_NOA_DESC_DURATION 0x05E0 -#define REG_NOA_DESC_INTERVAL 0x05E4 -#define REG_NOA_DESC_START 0x05E8 -#define REG_NOA_DESC_COUNT 0x05EC - -#define REG_DMC 0x05F0 //Dual MAC Co-Existence Register -#define REG_SCH_TX_CMD 0x05F8 - -#define REG_FW_RESET_TSF_CNT_1 0x05FC -#define REG_FW_RESET_TSF_CNT_0 0x05FD -#define REG_FW_BCN_DIS_CNT 0x05FE - -//----------------------------------------------------- -// -// 0x0600h ~ 0x07FFh WMAC Configuration -// -//----------------------------------------------------- -#define REG_APSD_CTRL 0x0600 -#define REG_BWOPMODE 0x0603 -#define REG_TCR 0x0604 -#define REG_RCR 0x0608 -#define REG_RX_PKT_LIMIT 0x060C -#define REG_RX_DLK_TIME 0x060D -#define REG_RX_DRVINFO_SZ 0x060F - -#define REG_MACID 0x0610 -#define REG_BSSID 0x0618 -#define REG_MAR 0x0620 -#define REG_MBIDCAMCFG 0x0628 - -#define REG_USTIME_EDCA 0x0638 -#define REG_MAC_SPEC_SIFS 0x063A -// 20100719 Joseph: Hardware register definition change. (HW datasheet v54) -#define REG_RESP_SIFS_CCK 0x063C // [15:8]SIFS_R2T_OFDM, [7:0]SIFS_R2T_CCK -#define REG_RESP_SIFS_OFDM 0x063E // [15:8]SIFS_T2T_OFDM, [7:0]SIFS_T2T_CCK - -#define REG_ACKTO 0x0640 -#define REG_CTS2TO 0x0641 -#define REG_EIFS 0x0642 - -#define REG_PORT_CTRL 0x076D - -//RXERR_RPT -#define RXERR_TYPE_OFDM_PPDU 0 -#define RXERR_TYPE_OFDM_FALSE_ALARM 1 -#define RXERR_TYPE_OFDM_MPDU_OK 2 -#define RXERR_TYPE_OFDM_MPDU_FAIL 3 -#define RXERR_TYPE_CCK_PPDU 4 -#define RXERR_TYPE_CCK_FALSE_ALARM 5 -#define RXERR_TYPE_CCK_MPDU_OK 6 -#define RXERR_TYPE_CCK_MPDU_FAIL 7 -#define RXERR_TYPE_HT_PPDU 8 -#define RXERR_TYPE_HT_FALSE_ALARM 9 -#define RXERR_TYPE_HT_MPDU_TOTAL 10 -#define RXERR_TYPE_HT_MPDU_OK 11 -#define RXERR_TYPE_HT_MPDU_FAIL 12 -#define RXERR_TYPE_RX_FULL_DROP 15 - -#define RXERR_COUNTER_MASK 0xFFFFF -#define RXERR_RPT_RST BIT(27) -#define _RXERR_RPT_SEL(type) ((type) << 28) - -// -// Note: -// The NAV upper value is very important to WiFi 11n 5.2.3 NAV test. The default value is -// always too small, but the WiFi TestPlan test by 25,000 microseconds of NAV through sending -// CTS in the air. We must update this value greater than 25,000 microseconds to pass the item. -// The offset of NAV_UPPER in 8192C Spec is incorrect, and the offset should be 0x0652. Commented -// by SD1 Scott. -// By Bruce, 2011-07-18. -// -#define REG_NAV_UPPER 0x0652 // unit of 128 - -//WMA, BA, CCX -#define REG_NAV_CTRL 0x0650 -#define REG_BACAMCMD 0x0654 -#define REG_BACAMCONTENT 0x0658 -#define REG_LBDLY 0x0660 -#define REG_FWDLY 0x0661 -#define REG_RXERR_RPT 0x0664 -#define REG_WMAC_TRXPTCL_CTL 0x0668 - -// Security -#define REG_CAMCMD 0x0670 -#define REG_CAMWRITE 0x0674 -#define REG_CAMREAD 0x0678 -#define REG_CAMDBG 0x067C -#define REG_SECCFG 0x0680 - -// Power -#define REG_WOW_CTRL 0x0690 -#define REG_PS_RX_INFO 0x0692 -#define REG_UAPSD_TID 0x0693 -#define REG_WKFMCAM_CMD 0x0698 -#define REG_WKFMCAM_NUM REG_WKFMCAM_CMD -#define REG_WKFMCAM_RWD 0x069C -#define REG_RXFLTMAP0 0x06A0 -#define REG_RXFLTMAP1 0x06A2 -#define REG_RXFLTMAP2 0x06A4 -#define REG_BCN_PSR_RPT 0x06A8 -#define REG_BT_COEX_TABLE 0x06C0 - -// Hardware Port 2 -#define REG_MACID1 0x0700 -#define REG_BSSID1 0x0708 - -/* port0 & port1 enable */ -// #define REG_PORT_CTRL 0x76D - -//----------------------------------------------------- -// -// 0xFE00h ~ 0xFE55h USB Configuration -// -//----------------------------------------------------- -#define REG_USB_INFO 0xFE17 -#define REG_USB_SPECIAL_OPTION 0xFE55 -#define REG_USB_DMA_AGG_TO 0xFE5B -#define REG_USB_AGG_TO 0xFE5C -#define REG_USB_AGG_TH 0xFE5D - -#define REG_USB_HRPWM 0xFE58 -#define REG_USB_HCPWM 0xFE57 - -// for 92DU high_Queue low_Queue Normal_Queue select -#define REG_USB_High_NORMAL_Queue_Select_MAC0 0xFE44 -//#define REG_USB_LOW_Queue_Select_MAC0 0xFE45 -#define REG_USB_High_NORMAL_Queue_Select_MAC1 0xFE47 -//#define REG_USB_LOW_Queue_Select_MAC1 0xFE48 - -// For test chip -#define REG_TEST_USB_TXQS 0xFE48 -#define REG_TEST_SIE_VID 0xFE60 // 0xFE60~0xFE61 -#define REG_TEST_SIE_PID 0xFE62 // 0xFE62~0xFE63 -#define REG_TEST_SIE_OPTIONAL 0xFE64 -#define REG_TEST_SIE_CHIRP_K 0xFE65 -#define REG_TEST_SIE_PHY 0xFE66 // 0xFE66~0xFE6B -#define REG_TEST_SIE_MAC_ADDR 0xFE70 // 0xFE70~0xFE75 -#define REG_TEST_SIE_STRING 0xFE80 // 0xFE80~0xFEB9 - - -// For normal chip -#define REG_NORMAL_SIE_VID 0xFE60 // 0xFE60~0xFE61 -#define REG_NORMAL_SIE_PID 0xFE62 // 0xFE62~0xFE63 -#define REG_NORMAL_SIE_OPTIONAL 0xFE64 -#define REG_NORMAL_SIE_EP 0xFE65 // 0xFE65~0xFE67 -#define REG_NORMAL_SIE_PHY 0xFE68 // 0xFE68~0xFE6B -#define REG_NORMAL_SIE_OPTIONAL2 0xFE6C -#define REG_NORMAL_SIE_GPS_EP 0xFE6D // 0xFE6D, for RTL8723 only. -#define REG_NORMAL_SIE_MAC_ADDR 0xFE70 // 0xFE70~0xFE75 -#define REG_NORMAL_SIE_STRING 0xFE80 // 0xFE80~0xFEDF - - -//----------------------------------------------------- -// -// Redifine 8192C register definition for compatibility -// -//----------------------------------------------------- - -// TODO: use these definition when using REG_xxx naming rule. -// NOTE: DO NOT Remove these definition. Use later. - -#define EFUSE_CTRL REG_EFUSE_CTRL // E-Fuse Control. -#define EFUSE_TEST REG_EFUSE_TEST // E-Fuse Test. -#define MSR (REG_CR + 2) // Media Status register -//#define ISR REG_HISR - -#define TSFR REG_TSFTR // Timing Sync Function Timer Register. -#define TSFR1 REG_TSFTR1 // HW Port 1 TSF Register - -#define PBP REG_PBP - -// Redifine MACID register, to compatible prior ICs. -#define IDR0 REG_MACID // MAC ID Register, Offset 0x0050-0x0053 -#define IDR4 (REG_MACID + 4) // MAC ID Register, Offset 0x0054-0x0055 - - -// -// 9. Security Control Registers (Offset: ) -// -#define RWCAM REG_CAMCMD //IN 8190 Data Sheet is called CAMcmd -#define WCAMI REG_CAMWRITE // Software write CAM input content -#define RCAMO REG_CAMREAD // Software read/write CAM config -#define CAMDBG REG_CAMDBG -#define SECR REG_SECCFG //Security Configuration Register - -// Unused register -#define UnusedRegister 0x1BF -#define DCAM UnusedRegister -#define PSR UnusedRegister -#define BBAddr UnusedRegister -#define PhyDataR UnusedRegister - -// Min Spacing related settings. -#define MAX_MSS_DENSITY_2T 0x13 -#define MAX_MSS_DENSITY_1T 0x0A - -//---------------------------------------------------------------------------- -// 8192C Cmd9346CR bits (Offset 0xA, 16bit) -//---------------------------------------------------------------------------- -#define CmdEEPROM_En BIT5 // EEPROM enable when set 1 -#define CmdEERPOMSEL BIT4 // System EEPROM select, 0: boot from E-FUSE, 1: The EEPROM used is 9346 -#define Cmd9346CR_9356SEL BIT4 - -//---------------------------------------------------------------------------- -// 8192C GPIO MUX Configuration Register (offset 0x40, 4 byte) -//---------------------------------------------------------------------------- -#define GPIOSEL_GPIO 0 -#define GPIOSEL_ENBT BIT5 - -//---------------------------------------------------------------------------- -// 8192C GPIO PIN Control Register (offset 0x44, 4 byte) -//---------------------------------------------------------------------------- -#define GPIO_IN REG_GPIO_PIN_CTRL // GPIO pins input value -#define GPIO_OUT (REG_GPIO_PIN_CTRL+1) // GPIO pins output value -#define GPIO_IO_SEL (REG_GPIO_PIN_CTRL+2) // GPIO pins output enable when a bit is set to "1"; otherwise, input is configured. -#define GPIO_MOD (REG_GPIO_PIN_CTRL+3) - -//---------------------------------------------------------------------------- -// 8811A GPIO PIN Control Register (offset 0x60, 4 byte) -//---------------------------------------------------------------------------- -#define GPIO_IN_8811A REG_GPIO_PIN_CTRL_2 // GPIO pins input value -#define GPIO_OUT_8811A (REG_GPIO_PIN_CTRL_2+1) // GPIO pins output value -#define GPIO_IO_SEL_8811A (REG_GPIO_PIN_CTRL_2+2) // GPIO pins output enable when a bit is set to "1"; otherwise, input is configured. -#define GPIO_MOD_8811A (REG_GPIO_PIN_CTRL_2+3) - -//---------------------------------------------------------------------------- -// 8723/8188E Host System Interrupt Mask Register (offset 0x58, 32 byte) -//---------------------------------------------------------------------------- -#define HSIMR_GPIO12_0_INT_EN BIT0 -#define HSIMR_SPS_OCP_INT_EN BIT5 -#define HSIMR_RON_INT_EN BIT6 -#define HSIMR_PDN_INT_EN BIT7 -#define HSIMR_GPIO9_INT_EN BIT25 - -//---------------------------------------------------------------------------- -// 8723/8188E Host System Interrupt Status Register (offset 0x5C, 32 byte) -//---------------------------------------------------------------------------- -#define HSISR_GPIO12_0_INT BIT0 -#define HSISR_SPS_OCP_INT BIT5 -#define HSISR_RON_INT BIT6 -#define HSISR_PDNINT BIT7 -#define HSISR_GPIO9_INT BIT25 - -//---------------------------------------------------------------------------- -// 8192C (MSR) Media Status Register (Offset 0x4C, 8 bits) -//---------------------------------------------------------------------------- -/* -Network Type -00: No link -01: Link in ad hoc network -10: Link in infrastructure network -11: AP mode -Default: 00b. -*/ -#define MSR_NOLINK 0x00 -#define MSR_ADHOC 0x01 -#define MSR_INFRA 0x02 -#define MSR_AP 0x03 - -//---------------------------------------------------------------------------- -// USB INTR CONTENT -//---------------------------------------------------------------------------- -#define USB_C2H_CMDID_OFFSET 0 -#define USB_C2H_SEQ_OFFSET 1 -#define USB_C2H_EVENT_OFFSET 2 -#define USB_INTR_CPWM_OFFSET 16 -#define USB_INTR_CONTENT_C2H_OFFSET 0 -#define USB_INTR_CONTENT_CPWM1_OFFSET 16 -#define USB_INTR_CONTENT_CPWM2_OFFSET 20 -#define USB_INTR_CONTENT_HISR_OFFSET 48 -#define USB_INTR_CONTENT_HISRE_OFFSET 52 -#define USB_INTR_CONTENT_LENGTH 56 - -//---------------------------------------------------------------------------- -// Response Rate Set Register (offset 0x440, 24bits) -//---------------------------------------------------------------------------- -#define RRSR_1M BIT0 -#define RRSR_2M BIT1 -#define RRSR_5_5M BIT2 -#define RRSR_11M BIT3 -#define RRSR_6M BIT4 -#define RRSR_9M BIT5 -#define RRSR_12M BIT6 -#define RRSR_18M BIT7 -#define RRSR_24M BIT8 -#define RRSR_36M BIT9 -#define RRSR_48M BIT10 -#define RRSR_54M BIT11 -#define RRSR_MCS0 BIT12 -#define RRSR_MCS1 BIT13 -#define RRSR_MCS2 BIT14 -#define RRSR_MCS3 BIT15 -#define RRSR_MCS4 BIT16 -#define RRSR_MCS5 BIT17 -#define RRSR_MCS6 BIT18 -#define RRSR_MCS7 BIT19 - -#define RRSR_CCK_RATES (RRSR_11M|RRSR_5_5M|RRSR_2M|RRSR_1M) -#define RRSR_OFDM_RATES (RRSR_54M|RRSR_48M|RRSR_36M|RRSR_24M|RRSR_18M|RRSR_12M|RRSR_9M|RRSR_6M) -// WOL bit information -#define HAL92C_WOL_PTK_UPDATE_EVENT BIT0 -#define HAL92C_WOL_GTK_UPDATE_EVENT BIT1 -#define HAL92C_WOL_DISASSOC_EVENT BIT2 -#define HAL92C_WOL_DEAUTH_EVENT BIT3 -#define HAL92C_WOL_FW_DISCONNECT_EVENT BIT4 - -//---------------------------------------------------------------------------- -// Rate Definition -//---------------------------------------------------------------------------- -//CCK -#define RATR_1M 0x00000001 -#define RATR_2M 0x00000002 -#define RATR_55M 0x00000004 -#define RATR_11M 0x00000008 -//OFDM -#define RATR_6M 0x00000010 -#define RATR_9M 0x00000020 -#define RATR_12M 0x00000040 -#define RATR_18M 0x00000080 -#define RATR_24M 0x00000100 -#define RATR_36M 0x00000200 -#define RATR_48M 0x00000400 -#define RATR_54M 0x00000800 -//MCS 1 Spatial Stream -#define RATR_MCS0 0x00001000 -#define RATR_MCS1 0x00002000 -#define RATR_MCS2 0x00004000 -#define RATR_MCS3 0x00008000 -#define RATR_MCS4 0x00010000 -#define RATR_MCS5 0x00020000 -#define RATR_MCS6 0x00040000 -#define RATR_MCS7 0x00080000 -//MCS 2 Spatial Stream -#define RATR_MCS8 0x00100000 -#define RATR_MCS9 0x00200000 -#define RATR_MCS10 0x00400000 -#define RATR_MCS11 0x00800000 -#define RATR_MCS12 0x01000000 -#define RATR_MCS13 0x02000000 -#define RATR_MCS14 0x04000000 -#define RATR_MCS15 0x08000000 - -//CCK -#define RATE_1M BIT(0) -#define RATE_2M BIT(1) -#define RATE_5_5M BIT(2) -#define RATE_11M BIT(3) -//OFDM -#define RATE_6M BIT(4) -#define RATE_9M BIT(5) -#define RATE_12M BIT(6) -#define RATE_18M BIT(7) -#define RATE_24M BIT(8) -#define RATE_36M BIT(9) -#define RATE_48M BIT(10) -#define RATE_54M BIT(11) -//MCS 1 Spatial Stream -#define RATE_MCS0 BIT(12) -#define RATE_MCS1 BIT(13) -#define RATE_MCS2 BIT(14) -#define RATE_MCS3 BIT(15) -#define RATE_MCS4 BIT(16) -#define RATE_MCS5 BIT(17) -#define RATE_MCS6 BIT(18) -#define RATE_MCS7 BIT(19) -//MCS 2 Spatial Stream -#define RATE_MCS8 BIT(20) -#define RATE_MCS9 BIT(21) -#define RATE_MCS10 BIT(22) -#define RATE_MCS11 BIT(23) -#define RATE_MCS12 BIT(24) -#define RATE_MCS13 BIT(25) -#define RATE_MCS14 BIT(26) -#define RATE_MCS15 BIT(27) - - -// ALL CCK Rate -#define RATE_ALL_CCK RATR_1M|RATR_2M|RATR_55M|RATR_11M -#define RATE_ALL_OFDM_AG RATR_6M|RATR_9M|RATR_12M|RATR_18M|RATR_24M|\ - RATR_36M|RATR_48M|RATR_54M -#define RATE_ALL_OFDM_1SS RATR_MCS0|RATR_MCS1|RATR_MCS2|RATR_MCS3 |\ - RATR_MCS4|RATR_MCS5|RATR_MCS6 |RATR_MCS7 -#define RATE_ALL_OFDM_2SS RATR_MCS8|RATR_MCS9 |RATR_MCS10|RATR_MCS11|\ - RATR_MCS12|RATR_MCS13|RATR_MCS14|RATR_MCS15 - -#define RATE_BITMAP_ALL 0xFFFFF - -// Only use CCK 1M rate for ACK -#define RATE_RRSR_CCK_ONLY_1M 0xFFFF1 -#define RATE_RRSR_WITHOUT_CCK 0xFFFF0 - -//---------------------------------------------------------------------------- -// BW_OPMODE bits (Offset 0x603, 8bit) -//---------------------------------------------------------------------------- -#define BW_OPMODE_20MHZ BIT2 -#define BW_OPMODE_5G BIT1 - -//---------------------------------------------------------------------------- -// CAM Config Setting (offset 0x680, 1 byte) -//---------------------------------------------------------------------------- -#define CAM_VALID BIT15 -#define CAM_NOTVALID 0x0000 -#define CAM_USEDK BIT5 - -#define CAM_CONTENT_COUNT 8 - -#define CAM_NONE 0x0 -#define CAM_WEP40 0x01 -#define CAM_TKIP 0x02 -#define CAM_AES 0x04 -#define CAM_WEP104 0x05 -#define CAM_SMS4 0x6 - -#define TOTAL_CAM_ENTRY 32 -#define HALF_CAM_ENTRY 16 - -#define CAM_CONFIG_USEDK _TRUE -#define CAM_CONFIG_NO_USEDK _FALSE - -#define CAM_WRITE BIT16 -#define CAM_READ 0x00000000 -#define CAM_POLLINIG BIT31 - -#define SCR_UseDK 0x01 -#define SCR_TxSecEnable 0x02 -#define SCR_RxSecEnable 0x04 - -// -// 10. Power Save Control Registers -// -#define WOW_PMEN BIT0 // Power management Enable. -#define WOW_WOMEN BIT1 // WoW function on or off. -#define WOW_MAGIC BIT2 // Magic packet -#define WOW_UWF BIT3 // Unicast Wakeup frame. - -// -// 12. Host Interrupt Status Registers -// -//---------------------------------------------------------------------------- -// 8190 IMR/ISR bits -//---------------------------------------------------------------------------- -#define IMR8190_DISABLED 0x0 -#define IMR_DISABLED 0x0 -// IMR DW0 Bit 0-31 -#define IMR_BCNDMAINT6 BIT31 // Beacon DMA Interrupt 6 -#define IMR_BCNDMAINT5 BIT30 // Beacon DMA Interrupt 5 -#define IMR_BCNDMAINT4 BIT29 // Beacon DMA Interrupt 4 -#define IMR_BCNDMAINT3 BIT28 // Beacon DMA Interrupt 3 -#define IMR_BCNDMAINT2 BIT27 // Beacon DMA Interrupt 2 -#define IMR_BCNDMAINT1 BIT26 // Beacon DMA Interrupt 1 -#define IMR_BCNDOK8 BIT25 // Beacon Queue DMA OK Interrup 8 -#define IMR_BCNDOK7 BIT24 // Beacon Queue DMA OK Interrup 7 -#define IMR_BCNDOK6 BIT23 // Beacon Queue DMA OK Interrup 6 -#define IMR_BCNDOK5 BIT22 // Beacon Queue DMA OK Interrup 5 -#define IMR_BCNDOK4 BIT21 // Beacon Queue DMA OK Interrup 4 -#define IMR_BCNDOK3 BIT20 // Beacon Queue DMA OK Interrup 3 -#define IMR_BCNDOK2 BIT19 // Beacon Queue DMA OK Interrup 2 -#define IMR_BCNDOK1 BIT18 // Beacon Queue DMA OK Interrup 1 -#define IMR_TIMEOUT2 BIT17 // Timeout interrupt 2 -#define IMR_TIMEOUT1 BIT16 // Timeout interrupt 1 -#define IMR_TXFOVW BIT15 // Transmit FIFO Overflow -#define IMR_PSTIMEOUT BIT14 // Power save time out interrupt -#define IMR_BcnInt BIT13 // Beacon DMA Interrupt 0 -#define IMR_RXFOVW BIT12 // Receive FIFO Overflow -#define IMR_RDU_ BIT11 // Receive Descriptor Unavailable -#define IMR_ATIMEND BIT10 // For 92C,ATIM Window End Interrupt. For 8723 and later ICs, it also means P2P CTWin End interrupt. -#define IMR_BDOK BIT9 // Beacon Queue DMA OK Interrup -#define IMR_HIGHDOK BIT8 // High Queue DMA OK Interrupt -#define IMR_TBDOK BIT7 // Transmit Beacon OK interrup -#define IMR_MGNTDOK BIT6 // Management Queue DMA OK Interrupt -#define IMR_TBDER BIT5 // For 92C,Transmit Beacon Error Interrupt -#define IMR_BKDOK BIT4 // AC_BK DMA OK Interrupt -#define IMR_BEDOK BIT3 // AC_BE DMA OK Interrupt -#define IMR_VIDOK BIT2 // AC_VI DMA OK Interrupt -#define IMR_VODOK BIT1 // AC_VO DMA Interrupt -#define IMR_ROK BIT0 // Receive DMA OK Interrupt - -// 13. Host Interrupt Status Extension Register (Offset: 0x012C-012Eh) -#define IMR_TSF_BIT32_TOGGLE BIT15 -#define IMR_BcnInt_E BIT12 -#define IMR_TXERR BIT11 -#define IMR_RXERR BIT10 -#define IMR_C2HCMD BIT9 -#define IMR_CPWM BIT8 -//RSVD [2-7] -#define IMR_OCPINT BIT1 -#define IMR_WLANOFF BIT0 - -//---------------------------------------------------------------------------- -// 8723E series PCIE Host IMR/ISR bit -//---------------------------------------------------------------------------- -// IMR DW0 Bit 0-31 -#define PHIMR_TIMEOUT2 BIT31 -#define PHIMR_TIMEOUT1 BIT30 -#define PHIMR_PSTIMEOUT BIT29 -#define PHIMR_GTINT4 BIT28 -#define PHIMR_GTINT3 BIT27 -#define PHIMR_TXBCNERR BIT26 -#define PHIMR_TXBCNOK BIT25 -#define PHIMR_TSF_BIT32_TOGGLE BIT24 -#define PHIMR_BCNDMAINT3 BIT23 -#define PHIMR_BCNDMAINT2 BIT22 -#define PHIMR_BCNDMAINT1 BIT21 -#define PHIMR_BCNDMAINT0 BIT20 -#define PHIMR_BCNDOK3 BIT19 -#define PHIMR_BCNDOK2 BIT18 -#define PHIMR_BCNDOK1 BIT17 -#define PHIMR_BCNDOK0 BIT16 -#define PHIMR_HSISR_IND_ON BIT15 -#define PHIMR_BCNDMAINT_E BIT14 -#define PHIMR_ATIMEND_E BIT13 -#define PHIMR_ATIM_CTW_END BIT12 -#define PHIMR_HISRE_IND BIT11 // RO. HISRE Indicator (HISRE & HIMRE is true, this bit is set to 1) -#define PHIMR_C2HCMD BIT10 -#define PHIMR_CPWM2 BIT9 -#define PHIMR_CPWM BIT8 -#define PHIMR_HIGHDOK BIT7 // High Queue DMA OK Interrupt -#define PHIMR_MGNTDOK BIT6 // Management Queue DMA OK Interrupt -#define PHIMR_BKDOK BIT5 // AC_BK DMA OK Interrupt -#define PHIMR_BEDOK BIT4 // AC_BE DMA OK Interrupt -#define PHIMR_VIDOK BIT3 // AC_VI DMA OK Interrupt -#define PHIMR_VODOK BIT2 // AC_VO DMA Interrupt -#define PHIMR_RDU BIT1 // Receive Descriptor Unavailable -#define PHIMR_ROK BIT0 // Receive DMA OK Interrupt - -// PCIE Host Interrupt Status Extension bit -#define PHIMR_BCNDMAINT7 BIT23 -#define PHIMR_BCNDMAINT6 BIT22 -#define PHIMR_BCNDMAINT5 BIT21 -#define PHIMR_BCNDMAINT4 BIT20 -#define PHIMR_BCNDOK7 BIT19 -#define PHIMR_BCNDOK6 BIT18 -#define PHIMR_BCNDOK5 BIT17 -#define PHIMR_BCNDOK4 BIT16 -// bit12 15: RSVD -#define PHIMR_TXERR BIT11 -#define PHIMR_RXERR BIT10 -#define PHIMR_TXFOVW BIT9 -#define PHIMR_RXFOVW BIT8 -// bit2-7: RSVD -#define PHIMR_OCPINT BIT1 -// bit0: RSVD - -#define UHIMR_TIMEOUT2 BIT31 -#define UHIMR_TIMEOUT1 BIT30 -#define UHIMR_PSTIMEOUT BIT29 -#define UHIMR_GTINT4 BIT28 -#define UHIMR_GTINT3 BIT27 -#define UHIMR_TXBCNERR BIT26 -#define UHIMR_TXBCNOK BIT25 -#define UHIMR_TSF_BIT32_TOGGLE BIT24 -#define UHIMR_BCNDMAINT3 BIT23 -#define UHIMR_BCNDMAINT2 BIT22 -#define UHIMR_BCNDMAINT1 BIT21 -#define UHIMR_BCNDMAINT0 BIT20 -#define UHIMR_BCNDOK3 BIT19 -#define UHIMR_BCNDOK2 BIT18 -#define UHIMR_BCNDOK1 BIT17 -#define UHIMR_BCNDOK0 BIT16 -#define UHIMR_HSISR_IND BIT15 -#define UHIMR_BCNDMAINT_E BIT14 -//RSVD BIT13 -#define UHIMR_CTW_END BIT12 -//RSVD BIT11 -#define UHIMR_C2HCMD BIT10 -#define UHIMR_CPWM2 BIT9 -#define UHIMR_CPWM BIT8 -#define UHIMR_HIGHDOK BIT7 // High Queue DMA OK Interrupt -#define UHIMR_MGNTDOK BIT6 // Management Queue DMA OK Interrupt -#define UHIMR_BKDOK BIT5 // AC_BK DMA OK Interrupt -#define UHIMR_BEDOK BIT4 // AC_BE DMA OK Interrupt -#define UHIMR_VIDOK BIT3 // AC_VI DMA OK Interrupt -#define UHIMR_VODOK BIT2 // AC_VO DMA Interrupt -#define UHIMR_RDU BIT1 // Receive Descriptor Unavailable -#define UHIMR_ROK BIT0 // Receive DMA OK Interrupt - -// USB Host Interrupt Status Extension bit -#define UHIMR_BCNDMAINT7 BIT23 -#define UHIMR_BCNDMAINT6 BIT22 -#define UHIMR_BCNDMAINT5 BIT21 -#define UHIMR_BCNDMAINT4 BIT20 -#define UHIMR_BCNDOK7 BIT19 -#define UHIMR_BCNDOK6 BIT18 -#define UHIMR_BCNDOK5 BIT17 -#define UHIMR_BCNDOK4 BIT16 -// bit14-15: RSVD -#define UHIMR_ATIMEND_E BIT13 -#define UHIMR_ATIMEND BIT12 -#define UHIMR_TXERR BIT11 -#define UHIMR_RXERR BIT10 -#define UHIMR_TXFOVW BIT9 -#define UHIMR_RXFOVW BIT8 -// bit2-7: RSVD -#define UHIMR_OCPINT BIT1 -// bit0: RSVD - - -#define HAL_NIC_UNPLUG_ISR 0xFFFFFFFF // The value when the NIC is unplugged for PCI. -#define HAL_NIC_UNPLUG_PCI_ISR 0xEAEAEAEA // The value when the NIC is unplugged for PCI in PCI interrupt (page 3). - -//---------------------------------------------------------------------------- -// 8188 IMR/ISR bits -//---------------------------------------------------------------------------- -#define IMR_DISABLED_88E 0x0 -// IMR DW0(0x0060-0063) Bit 0-31 -#define IMR_TXCCK_88E BIT30 // TXRPT interrupt when CCX bit of the packet is set -#define IMR_PSTIMEOUT_88E BIT29 // Power Save Time Out Interrupt -#define IMR_GTINT4_88E BIT28 // When GTIMER4 expires, this bit is set to 1 -#define IMR_GTINT3_88E BIT27 // When GTIMER3 expires, this bit is set to 1 -#define IMR_TBDER_88E BIT26 // Transmit Beacon0 Error -#define IMR_TBDOK_88E BIT25 // Transmit Beacon0 OK -#define IMR_TSF_BIT32_TOGGLE_88E BIT24 // TSF Timer BIT32 toggle indication interrupt -#define IMR_BCNDMAINT0_88E BIT20 // Beacon DMA Interrupt 0 -#define IMR_BCNDERR0_88E BIT16 // Beacon Queue DMA Error 0 -#define IMR_HSISR_IND_ON_INT_88E BIT15 // HSISR Indicator (HSIMR & HSISR is true, this bit is set to 1) -#define IMR_BCNDMAINT_E_88E BIT14 // Beacon DMA Interrupt Extension for Win7 -#define IMR_ATIMEND_88E BIT12 // CTWidnow End or ATIM Window End -#define IMR_HISR1_IND_INT_88E BIT11 // HISR1 Indicator (HISR1 & HIMR1 is true, this bit is set to 1) -#define IMR_C2HCMD_88E BIT10 // CPU to Host Command INT Status, Write 1 clear -#define IMR_CPWM2_88E BIT9 // CPU power Mode exchange INT Status, Write 1 clear -#define IMR_CPWM_88E BIT8 // CPU power Mode exchange INT Status, Write 1 clear -#define IMR_HIGHDOK_88E BIT7 // High Queue DMA OK -#define IMR_MGNTDOK_88E BIT6 // Management Queue DMA OK -#define IMR_BKDOK_88E BIT5 // AC_BK DMA OK -#define IMR_BEDOK_88E BIT4 // AC_BE DMA OK -#define IMR_VIDOK_88E BIT3 // AC_VI DMA OK -#define IMR_VODOK_88E BIT2 // AC_VO DMA OK -#define IMR_RDU_88E BIT1 // Rx Descriptor Unavailable -#define IMR_ROK_88E BIT0 // Receive DMA OK - -// IMR DW1(0x00B4-00B7) Bit 0-31 -#define IMR_BCNDMAINT7_88E BIT27 // Beacon DMA Interrupt 7 -#define IMR_BCNDMAINT6_88E BIT26 // Beacon DMA Interrupt 6 -#define IMR_BCNDMAINT5_88E BIT25 // Beacon DMA Interrupt 5 -#define IMR_BCNDMAINT4_88E BIT24 // Beacon DMA Interrupt 4 -#define IMR_BCNDMAINT3_88E BIT23 // Beacon DMA Interrupt 3 -#define IMR_BCNDMAINT2_88E BIT22 // Beacon DMA Interrupt 2 -#define IMR_BCNDMAINT1_88E BIT21 // Beacon DMA Interrupt 1 -#define IMR_BCNDOK7_88E BIT20 // Beacon Queue DMA OK Interrup 7 -#define IMR_BCNDOK6_88E BIT19 // Beacon Queue DMA OK Interrup 6 -#define IMR_BCNDOK5_88E BIT18 // Beacon Queue DMA OK Interrup 5 -#define IMR_BCNDOK4_88E BIT17 // Beacon Queue DMA OK Interrup 4 -#define IMR_BCNDOK3_88E BIT16 // Beacon Queue DMA OK Interrup 3 -#define IMR_BCNDOK2_88E BIT15 // Beacon Queue DMA OK Interrup 2 -#define IMR_BCNDOK1_88E BIT14 // Beacon Queue DMA OK Interrup 1 -#define IMR_ATIMEND_E_88E BIT13 // ATIM Window End Extension for Win7 -#define IMR_TXERR_88E BIT11 // Tx Error Flag Interrupt Status, write 1 clear. -#define IMR_RXERR_88E BIT10 // Rx Error Flag INT Status, Write 1 clear -#define IMR_TXFOVW_88E BIT9 // Transmit FIFO Overflow -#define IMR_RXFOVW_88E BIT8 // Receive FIFO Overflow - -/*=================================================================== -===================================================================== -Here the register defines are for 92C. When the define is as same with 92C, -we will use the 92C's define for the consistency -So the following defines for 92C is not entire!!!!!! -===================================================================== -=====================================================================*/ -/* -Based on Datasheet V33---090401 -Register Summary -Current IOREG MAP -0x0000h ~ 0x00FFh System Configuration (256 Bytes) -0x0100h ~ 0x01FFh MACTOP General Configuration (256 Bytes) -0x0200h ~ 0x027Fh TXDMA Configuration (128 Bytes) -0x0280h ~ 0x02FFh RXDMA Configuration (128 Bytes) -0x0300h ~ 0x03FFh PCIE EMAC Reserved Region (256 Bytes) -0x0400h ~ 0x04FFh Protocol Configuration (256 Bytes) -0x0500h ~ 0x05FFh EDCA Configuration (256 Bytes) -0x0600h ~ 0x07FFh WMAC Configuration (512 Bytes) -0x2000h ~ 0x3FFFh 8051 FW Download Region (8196 Bytes) -*/ - //---------------------------------------------------------------------------- - // 8192C (TXPAUSE) transmission pause (Offset 0x522, 8 bits) - //---------------------------------------------------------------------------- -// Note: -// The the bits of stoping AC(VO/VI/BE/BK) queue in datasheet RTL8192S/RTL8192C are wrong, -// the correct arragement is VO - Bit0, VI - Bit1, BE - Bit2, and BK - Bit3. -// 8723 and 88E may be not correct either in the eralier version. Confirmed with DD Tim. -// By Bruce, 2011-09-22. -#define StopBecon BIT6 -#define StopHigh BIT5 -#define StopMgt BIT4 -#define StopBK BIT3 -#define StopBE BIT2 -#define StopVI BIT1 -#define StopVO BIT0 - -//---------------------------------------------------------------------------- -// 8192C (RCR) Receive Configuration Register (Offset 0x608, 32 bits) -//---------------------------------------------------------------------------- -#define RCR_APPFCS BIT31 // WMAC append FCS after pauload -#define RCR_APP_MIC BIT30 // MACRX will retain the MIC at the bottom of the packet. -#define RCR_APP_ICV BIT29 // MACRX will retain the ICV at the bottom of the packet. -#define RCR_APP_PHYST_RXFF BIT28 // PHY Status is appended before RX packet in RXFF -#define RCR_APP_BA_SSN BIT27 // SSN of previous TXBA is appended as after original RXDESC as the 4-th DW of RXDESC. -#define RCR_NONQOS_VHT BIT26 // Reserved -#define RCR_RSVD_BIT25 BIT25 // Reserved -#define RCR_ENMBID BIT24 // Enable Multiple BssId. Only response ACK to the packets whose DID(A1) matching to the addresses in the MBSSID CAM Entries. -#define RCR_LSIGEN BIT23 // Enable LSIG TXOP Protection function. Search KEYCAM for each rx packet to check if LSIGEN bit is set. -#define RCR_MFBEN BIT22 // Enable immediate MCS Feedback function. When Rx packet with MRQ = 1'b1, then search KEYCAM to find sender's MCS Feedback function and send response. -#define RCR_RSVD_BIT21 BIT21 // Reserved -#define RCR_RSVD_BIT20 BIT20 // Reserved -#define RCR_RSVD_BIT19 BIT19 // Reserved -#define RCR_TIM_PARSER_EN BIT18 // RX Beacon TIM Parser. -#define RCR_BM_DATA_EN BIT17 // Broadcast data packet interrupt enable. -#define RCR_UC_DATA_EN BIT16 // Unicast data packet interrupt enable. -#define RCR_RSVD_BIT15 BIT15 // Reserved -#define RCR_HTC_LOC_CTRL BIT14 // MFC<--HTC=1 MFC-->HTC=0 -#define RCR_AMF BIT13 // Accept management type frame -#define RCR_ACF BIT12 // Accept control type frame. Control frames BA, BAR, and PS-Poll (when in AP mode) are not controlled by this bit. They are controlled by ADF. -#define RCR_ADF BIT11 // Accept data type frame. This bit also regulates BA, BAR, and PS-Poll (AP mode only). -#define RCR_RSVD_BIT10 BIT10 // Reserved -#define RCR_AICV BIT9 // Accept ICV error packet -#define RCR_ACRC32 BIT8 // Accept CRC32 error packet -#define RCR_CBSSID_BCN BIT7 // Accept BSSID match packet (Rx beacon, probe rsp) -#define RCR_CBSSID_DATA BIT6 // Accept BSSID match packet (Data) -#define RCR_CBSSID RCR_CBSSID_DATA // Accept BSSID match packet -#define RCR_APWRMGT BIT5 // Accept power management packet -#define RCR_ADD3 BIT4 // Accept address 3 match packet -#define RCR_AB BIT3 // Accept broadcast packet -#define RCR_AM BIT2 // Accept multicast packet -#define RCR_APM BIT1 // Accept physical match packet -#define RCR_AAP BIT0 // Accept all unicast packet - - -//----------------------------------------------------- -// -// 0x0000h ~ 0x00FFh System Configuration -// -//----------------------------------------------------- - -//2 SYS_ISO_CTRL -#define ISO_MD2PP BIT(0) -#define ISO_UA2USB BIT(1) -#define ISO_UD2CORE BIT(2) -#define ISO_PA2PCIE BIT(3) -#define ISO_PD2CORE BIT(4) -#define ISO_IP2MAC BIT(5) -#define ISO_DIOP BIT(6) -#define ISO_DIOE BIT(7) -#define ISO_EB2CORE BIT(8) -#define ISO_DIOR BIT(9) -#define PWC_EV12V BIT(15) - - -//2 SYS_FUNC_EN -#define FEN_BBRSTB BIT(0) -#define FEN_BB_GLB_RSTn BIT(1) -#define FEN_USBA BIT(2) -#define FEN_UPLL BIT(3) -#define FEN_USBD BIT(4) -#define FEN_DIO_PCIE BIT(5) -#define FEN_PCIEA BIT(6) -#define FEN_PPLL BIT(7) -#define FEN_PCIED BIT(8) -#define FEN_DIOE BIT(9) -#define FEN_CPUEN BIT(10) -#define FEN_DCORE BIT(11) -#define FEN_ELDR BIT(12) -//#define FEN_DIO_RF BIT(13) -#define FEN_HWPDN BIT(14) -#define FEN_MREGEN BIT(15) - -//2 APS_FSMCO -#define PFM_LDALL BIT(0) -#define PFM_ALDN BIT(1) -#define PFM_LDKP BIT(2) -#define PFM_WOWL BIT(3) -#define EnPDN BIT(4) -#define PDN_PL BIT(5) -#define APFM_ONMAC BIT(8) -#define APFM_OFF BIT(9) -#define APFM_RSM BIT(10) -#define AFSM_HSUS BIT(11) -#define AFSM_PCIE BIT(12) -#define APDM_MAC BIT(13) -#define APDM_HOST BIT(14) -#define APDM_HPDN BIT(15) -#define RDY_MACON BIT(16) -#define SUS_HOST BIT(17) -#define ROP_ALD BIT(20) -#define ROP_PWR BIT(21) -#define ROP_SPS BIT(22) -#define SOP_MRST BIT(25) -#define SOP_FUSE BIT(26) -#define SOP_ABG BIT(27) -#define SOP_AMB BIT(28) -#define SOP_RCK BIT(29) -#define SOP_A8M BIT(30) -#define XOP_BTCK BIT(31) - -//2 SYS_CLKR -#define ANAD16V_EN BIT(0) -#define ANA8M BIT(1) -#define MACSLP BIT(4) -#define LOADER_CLK_EN BIT(5) - - -//2 9346CR /REG_SYS_EEPROM_CTRL -#define BOOT_FROM_EEPROM BIT(4) -#define EEPROMSEL BIT(4) -#define EEPROM_EN BIT(5) - - -//2 RF_CTRL -#define RF_EN BIT(0) -#define RF_RSTB BIT(1) -#define RF_SDMRSTB BIT(2) - - -//2 LDOV12D_CTRL -#define LDV12_EN BIT(0) -#define LDV12_SDBY BIT(1) -#define LPLDO_HSM BIT(2) -#define LPLDO_LSM_DIS BIT(3) -#define _LDV12_VADJ(x) (((x) & 0xF) << 4) - - - -//2 EFUSE_TEST (For RTL8723 partially) -#define EF_TRPT BIT(7) -#define EF_CELL_SEL (BIT(8)|BIT(9)) // 00: Wifi Efuse, 01: BT Efuse0, 10: BT Efuse1, 11: BT Efuse2 -#define LDOE25_EN BIT(31) -#define EFUSE_SEL(x) (((x) & 0x3) << 8) -#define EFUSE_SEL_MASK 0x300 -#define EFUSE_WIFI_SEL_0 0x0 -#define EFUSE_BT_SEL_0 0x1 -#define EFUSE_BT_SEL_1 0x2 -#define EFUSE_BT_SEL_2 0x3 - - -//2 8051FWDL -//2 MCUFWDL -#define MCUFWDL_EN BIT(0) -#define MCUFWDL_RDY BIT(1) -#define FWDL_ChkSum_rpt BIT(2) -#define MACINI_RDY BIT(3) -#define BBINI_RDY BIT(4) -#define RFINI_RDY BIT(5) -#define WINTINI_RDY BIT(6) -#define RAM_DL_SEL BIT(7) -#define ROM_DLEN BIT(19) -#define CPRST BIT(23) - - -//2 REG_SYS_CFG -#define XCLK_VLD BIT(0) -#define ACLK_VLD BIT(1) -#define UCLK_VLD BIT(2) -#define PCLK_VLD BIT(3) -#define PCIRSTB BIT(4) -#define V15_VLD BIT(5) -#define SW_OFFLOAD_EN BIT(7) -#define SIC_IDLE BIT(8) -#define BD_MAC2 BIT(9) -#define BD_MAC1 BIT(10) -#define IC_MACPHY_MODE BIT(11) -#define CHIP_VER (BIT(12)|BIT(13)|BIT(14)|BIT(15)) -#define BT_FUNC BIT(16) -#define VENDOR_ID BIT(19) -#define EXT_VENDOR_ID (BIT(18)|BIT(19)) //Currently only for RTL8723B -#define PAD_HWPD_IDN BIT(22) -#define TRP_VAUX_EN BIT(23) // RTL ID -#define TRP_BT_EN BIT(24) -#define BD_PKG_SEL BIT(25) -#define BD_HCI_SEL BIT(26) -#define TYPE_ID BIT(27) -#define RF_TYPE_ID BIT(27) - -#define RTL_ID BIT(23) // TestChip ID, 1:Test(RLE); 0:MP(RL) -#define SPS_SEL BIT(24) // 1:LDO regulator mode; 0:Switching regulator mode - - -#define CHIP_VER_RTL_MASK 0xF000 //Bit 12 ~ 15 -#define CHIP_VER_RTL_SHIFT 12 -#define EXT_VENDOR_ID_SHIFT 18 - -//2 REG_GPIO_OUTSTS (For RTL8723 only) -#define EFS_HCI_SEL (BIT(0)|BIT(1)) -#define PAD_HCI_SEL (BIT(2)|BIT(3)) -#define HCI_SEL (BIT(4)|BIT(5)) -#define PKG_SEL_HCI BIT(6) -#define FEN_GPS BIT(7) -#define FEN_BT BIT(8) -#define FEN_WL BIT(9) -#define FEN_PCI BIT(10) -#define FEN_USB BIT(11) -#define BTRF_HWPDN_N BIT(12) -#define WLRF_HWPDN_N BIT(13) -#define PDN_BT_N BIT(14) -#define PDN_GPS_N BIT(15) -#define BT_CTL_HWPDN BIT(16) -#define GPS_CTL_HWPDN BIT(17) -#define PPHY_SUSB BIT(20) -#define UPHY_SUSB BIT(21) -#define PCI_SUSEN BIT(22) -#define USB_SUSEN BIT(23) -#define RF_RL_ID (BIT(31)|BIT(30)|BIT(29)|BIT(28)) - - -//----------------------------------------------------- -// -// 0x0100h ~ 0x01FFh MACTOP General Configuration -// -//----------------------------------------------------- - -//2 Function Enable Registers -//2 CR -#define HCI_TXDMA_EN BIT(0) -#define HCI_RXDMA_EN BIT(1) -#define TXDMA_EN BIT(2) -#define RXDMA_EN BIT(3) -#define PROTOCOL_EN BIT(4) -#define SCHEDULE_EN BIT(5) -#define MACTXEN BIT(6) -#define MACRXEN BIT(7) -#define ENSWBCN BIT(8) -#define ENSEC BIT(9) -#define CALTMR_EN BIT(10) // 32k CAL TMR enable - -// Network type -#define _NETTYPE(x) (((x) & 0x3) << 16) -#define MASK_NETTYPE 0x30000 -#define NT_NO_LINK 0x0 -#define NT_LINK_AD_HOC 0x1 -#define NT_LINK_AP 0x2 -#define NT_AS_AP 0x3 - -//2 PBP - Page Size Register -#define GET_RX_PAGE_SIZE(value) ((value) & 0xF) -#define GET_TX_PAGE_SIZE(value) (((value) & 0xF0) >> 4) -#define _PSRX_MASK 0xF -#define _PSTX_MASK 0xF0 -#define _PSRX(x) (x) -#define _PSTX(x) ((x) << 4) - -#define PBP_64 0x0 -#define PBP_128 0x1 -#define PBP_256 0x2 -#define PBP_512 0x3 -#define PBP_1024 0x4 - - -//2 TX/RXDMA -#define RXDMA_ARBBW_EN BIT(0) -#define RXSHFT_EN BIT(1) -#define RXDMA_AGG_EN BIT(2) -#define QS_VO_QUEUE BIT(8) -#define QS_VI_QUEUE BIT(9) -#define QS_BE_QUEUE BIT(10) -#define QS_BK_QUEUE BIT(11) -#define QS_MANAGER_QUEUE BIT(12) -#define QS_HIGH_QUEUE BIT(13) - -#define HQSEL_VOQ BIT(0) -#define HQSEL_VIQ BIT(1) -#define HQSEL_BEQ BIT(2) -#define HQSEL_BKQ BIT(3) -#define HQSEL_MGTQ BIT(4) -#define HQSEL_HIQ BIT(5) - -// For normal driver, 0x10C -#define _TXDMA_CMQ_MAP(x) (((x)&0x3) << 16) -#define _TXDMA_HIQ_MAP(x) (((x)&0x3) << 14) -#define _TXDMA_MGQ_MAP(x) (((x)&0x3) << 12) -#define _TXDMA_BKQ_MAP(x) (((x)&0x3) << 10) -#define _TXDMA_BEQ_MAP(x) (((x)&0x3) << 8 ) -#define _TXDMA_VIQ_MAP(x) (((x)&0x3) << 6 ) -#define _TXDMA_VOQ_MAP(x) (((x)&0x3) << 4 ) - -#define QUEUE_EXTRA 0 -#define QUEUE_LOW 1 -#define QUEUE_NORMAL 2 -#define QUEUE_HIGH 3 - - -//2 TRXFF_BNDY - - -//2 LLT_INIT -#define _LLT_NO_ACTIVE 0x0 -#define _LLT_WRITE_ACCESS 0x1 -#define _LLT_READ_ACCESS 0x2 - -#define _LLT_INIT_DATA(x) ((x) & 0xFF) -#define _LLT_INIT_ADDR(x) (((x) & 0xFF) << 8) -#define _LLT_OP(x) (((uint32_t)(x) & 0x3) << 30) -#define _LLT_OP_VALUE(x) (((x) >> 30) & 0x3) - - -//----------------------------------------------------- -// -// 0x0200h ~ 0x027Fh TXDMA Configuration -// -//----------------------------------------------------- -//2 RQPN -#define _HPQ(x) ((x) & 0xFF) -#define _LPQ(x) (((x) & 0xFF) << 8) -#define _PUBQ(x) (((x) & 0xFF) << 16) -#define _NPQ(x) ((x) & 0xFF) // NOTE: in RQPN_NPQ register -#define _EPQ(x) (((x) & 0xFF) << 16) // NOTE: in RQPN_EPQ register - - -#define HPQ_PUBLIC_DIS BIT(24) -#define LPQ_PUBLIC_DIS BIT(25) -#define LD_RQPN BIT(31) - - -//2 TDECTL -#define BLK_DESC_NUM_SHIFT 4 -#define BLK_DESC_NUM_MASK 0xF - - -//2 TXDMA_OFFSET_CHK -#define DROP_DATA_EN BIT(9) - -//2 AUTO_LLT -#define BIT_SHIFT_TXPKTNUM 24 -#define BIT_MASK_TXPKTNUM 0xff -#define BIT_TXPKTNUM(x) (((x) & BIT_MASK_TXPKTNUM) << BIT_SHIFT_TXPKTNUM) - -#define BIT_TDE_DBG_SEL BIT(23) -#define BIT_AUTO_INIT_LLT BIT(16) - -#define BIT_SHIFT_Tx_OQT_free_space 8 -#define BIT_MASK_Tx_OQT_free_space 0xff -#define BIT_Tx_OQT_free_space(x) (((x) & BIT_MASK_Tx_OQT_free_space) << BIT_SHIFT_Tx_OQT_free_space) - - -//----------------------------------------------------- -// -// 0x0280h ~ 0x028Bh RX DMA Configuration -// -//----------------------------------------------------- - -//2 REG_RXDMA_CONTROL, 0x0286h -// Write only. When this bit is set, RXDMA will decrease RX PKT counter by one. Before -// this bit is polled, FW shall update RXFF_RD_PTR first. This register is write pulse and auto clear. -//#define RXPKT_RELEASE_POLL BIT(0) -// Read only. When RXMA finishes on-going DMA operation, RXMDA will report idle state in -// this bit. FW can start releasing packets after RXDMA entering idle mode. -//#define RXDMA_IDLE BIT(1) -// When this bit is set, RXDMA will enter this mode after on-going RXDMA packet to host -// completed, and stop DMA packet to host. RXDMA will then report Default: 0; -//#define RW_RELEASE_EN BIT(2) - -//2 REG_RXPKT_NUM, 0x0284 -#define RXPKT_RELEASE_POLL BIT(16) -#define RXDMA_IDLE BIT(17) -#define RW_RELEASE_EN BIT(18) - -//----------------------------------------------------- -// -// 0x0400h ~ 0x047Fh Protocol Configuration -// -//----------------------------------------------------- -//2 CPU_MGT_INFORMATION -#define CPUMGT_POLL BIT(5) - -//2 FWHW_TXQ_CTRL -#define EN_AMPDU_RTY_NEW BIT(7) - - -//2 SPEC SIFS -#define _SPEC_SIFS_CCK(x) ((x) & 0xFF) -#define _SPEC_SIFS_OFDM(x) (((x) & 0xFF) << 8) - -//2 RL -#define RETRY_LIMIT_SHORT_SHIFT 8 -#define RETRY_LIMIT_LONG_SHIFT 0 - -//----------------------------------------------------- -// -// 0x0500h ~ 0x05FFh EDCA Configuration -// -//----------------------------------------------------- - -//2 EDCA setting -#define AC_PARAM_TXOP_LIMIT_OFFSET 16 -#define AC_PARAM_ECW_MAX_OFFSET 12 -#define AC_PARAM_ECW_MIN_OFFSET 8 -#define AC_PARAM_AIFS_OFFSET 0 - - -#define _LRL(x) ((x) & 0x3F) -#define _SRL(x) (((x) & 0x3F) << 8) - - -//2 BCN_CTRL -#define EN_TXBCN_RPT BIT(2) -#define EN_BCN_FUNCTION BIT(3) -#define STOP_BCNQ BIT(6) -#define DIS_RX_BSSID_FIT BIT(6) - -#define DIS_ATIM BIT(0) -#define DIS_BCNQ_SUB BIT(1) -#define DIS_TSF_UDT BIT(4) - -// The same function but different bit field. -#define DIS_TSF_UDT0_NORMAL_CHIP BIT(4) -#define DIS_TSF_UDT0_TEST_CHIP BIT(5) - - -//2 ACMHWCTRL -#define AcmHw_HwEn BIT(0) -#define AcmHw_BeqEn BIT(1) -#define AcmHw_ViqEn BIT(2) -#define AcmHw_VoqEn BIT(3) -#define AcmHw_BeqStatus BIT(4) -#define AcmHw_ViqStatus BIT(5) -#define AcmHw_VoqStatus BIT(6) - -//2 //REG_DUAL_TSF_RST (0x553) -#define DUAL_TSF_RST_P2P BIT(4) - -//2 // REG_NOA_DESC_SEL (0x5CF) -#define NOA_DESC_SEL_0 0 -#define NOA_DESC_SEL_1 BIT(4) - -//----------------------------------------------------- -// -// 0x0600h ~ 0x07FFh WMAC Configuration -// -//----------------------------------------------------- - -//2 APSD_CTRL -#define APSDOFF BIT(6) - -//2 TCR -#define TSFRST BIT(0) -#define DIS_GCLK BIT(1) -#define PAD_SEL BIT(2) -#define PWR_ST BIT(6) -#define PWRBIT_OW_EN BIT(7) -#define ACRC BIT(8) -#define CFENDFORM BIT(9) -#define ICV BIT(10) - - -//2 RCR -#define AAP BIT(0) -#define APM BIT(1) -#define AM BIT(2) -#define AB BIT(3) -#define ADD3 BIT(4) -#define APWRMGT BIT(5) -#define CBSSID BIT(6) -#define CBSSID_DATA BIT(6) -#define CBSSID_BCN BIT(7) -#define ACRC32 BIT(8) -#define AICV BIT(9) -#define ADF BIT(11) -#define ACF BIT(12) -#define AMF BIT(13) -#define HTC_LOC_CTRL BIT(14) -#define UC_DATA_EN BIT(16) -#define BM_DATA_EN BIT(17) -#define MFBEN BIT(22) -#define LSIGEN BIT(23) -#define EnMBID BIT(24) -#define FORCEACK BIT(26) -#define APP_BASSN BIT(27) -#define APP_PHYSTS BIT(28) -#define APP_ICV BIT(29) -#define APP_MIC BIT(30) -#define APP_FCS BIT(31) - - -//2 SECCFG -#define SCR_TxUseDK BIT(0) //Force Tx Use Default Key -#define SCR_RxUseDK BIT(1) //Force Rx Use Default Key -#define SCR_TxEncEnable BIT(2) //Enable Tx Encryption -#define SCR_RxDecEnable BIT(3) //Enable Rx Decryption -#define SCR_SKByA2 BIT(4) //Search kEY BY A2 -#define SCR_NoSKMC BIT(5) //No Key Search Multicast -#define SCR_TXBCUSEDK BIT(6) // Force Tx Broadcast packets Use Default Key -#define SCR_RXBCUSEDK BIT(7) // Force Rx Broadcast packets Use Default Key - - -//----------------------------------------------------- -// -// 0x0300h ~ 0x03FFh PCIe/LBus -// -//----------------------------------------------------- - - -//4 REG_LX_CTRL1(0x300) -#define BIT_WT_LIT_EDN BIT(25) -#define BIT_RD_LITT_EDN BIT(24) - -#define BIT_SHIFT_MAX_RXDMA 20 -#define BIT_MASK_MAX_RXDMA 0x7 -#define BIT_MAX_RXDMA(x) (((x) & BIT_MASK_MAX_RXDMA)<HardwareType >=HARDWARE_TYPE_RTL8192EE) -// -// RTL8192C Series -// -#define IS_HARDWARE_TYPE_8192CE(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192CE) -#define IS_HARDWARE_TYPE_8192CU(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192CU) -#define IS_HARDWARE_TYPE_8192C(_Adapter) \ -(IS_HARDWARE_TYPE_8192CE(_Adapter) || IS_HARDWARE_TYPE_8192CU(_Adapter)) - -// -// RTL8192D Series -// -#define IS_HARDWARE_TYPE_8192DE(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192DE) -#define IS_HARDWARE_TYPE_8192DU(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192DU) -#define IS_HARDWARE_TYPE_8192D(_Adapter) \ -(IS_HARDWARE_TYPE_8192DE(_Adapter) || IS_HARDWARE_TYPE_8192DU(_Adapter)) - -// -// RTL8723A Series -// -#define IS_HARDWARE_TYPE_8723AE(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723AE) -#define IS_HARDWARE_TYPE_8723AU(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723AU) -#define IS_HARDWARE_TYPE_8723AS(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723AS) -#define IS_HARDWARE_TYPE_8723A(_Adapter) \ -(IS_HARDWARE_TYPE_8723AE(_Adapter) || IS_HARDWARE_TYPE_8723AU(_Adapter) || IS_HARDWARE_TYPE_8723AS(_Adapter)) -// -// RTL8188E Series -// -#define IS_HARDWARE_TYPE_8188EE(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188EE) -#define IS_HARDWARE_TYPE_8188EU(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188EU) -#define IS_HARDWARE_TYPE_8188ES(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188ES) -#define IS_HARDWARE_TYPE_8188E(_Adapter) \ -(IS_HARDWARE_TYPE_8188EE(_Adapter) || IS_HARDWARE_TYPE_8188EU(_Adapter) || IS_HARDWARE_TYPE_8188ES(_Adapter)) -// -//RTL8188F Series -// -#define IS_HARDWARE_TYPE_8188FE(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188FE) -#define IS_HARDWARE_TYPE_8188FU(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188EU) -#define IS_HARDWARE_TYPE_8188FS(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188FS) -#define IS_HARDWARE_TYPE_8188F(_Adapter) \ -(IS_HARDWARE_TYPE_8188FE(_Adapter) || IS_HARDWARE_TYPE_8188FU(_Adapter) || IS_HARDWARE_TYPE_8188FS(_Adapter)) -// -// RTL8812 Series -// -#define IS_HARDWARE_TYPE_8812E(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8812E) -#define IS_HARDWARE_TYPE_8812AU(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8812AU) -#define IS_HARDWARE_TYPE_8812(_Adapter) \ -(IS_HARDWARE_TYPE_8812E(_Adapter) || IS_HARDWARE_TYPE_8812AU(_Adapter)) - -// RTL8821 Series -#define IS_HARDWARE_TYPE_8821E(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8821E) -#define IS_HARDWARE_TYPE_8821U(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8821U ||\ - ((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8811AU) -#define IS_HARDWARE_TYPE_8821S(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8821S) -#define IS_HARDWARE_TYPE_8821(_Adapter) \ -(IS_HARDWARE_TYPE_8821E(_Adapter) || IS_HARDWARE_TYPE_8821U(_Adapter)|| IS_HARDWARE_TYPE_8821S(_Adapter)) - -#define IS_HARDWARE_TYPE_JAGUAR(_Adapter) \ -(IS_HARDWARE_TYPE_8812(_Adapter) || IS_HARDWARE_TYPE_8821(_Adapter)) - -//RTL8192E Series -#define IS_HARDWARE_TYPE_8192EE(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192EE) -#define IS_HARDWARE_TYPE_8192EU(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192EU) -#define IS_HARDWARE_TYPE_8192ES(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192ES) - -#define IS_HARDWARE_TYPE_8192E(_Adapter) \ -(IS_HARDWARE_TYPE_8192EE(_Adapter) || IS_HARDWARE_TYPE_8192EU(_Adapter) ||IS_HARDWARE_TYPE_8192ES(_Adapter)) - -#define IS_HARDWARE_TYPE_8723BE(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723BE) -#define IS_HARDWARE_TYPE_8723BU(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723BU) -#define IS_HARDWARE_TYPE_8723BS(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723BS) - - -#define IS_HARDWARE_TYPE_8723B(_Adapter) \ - (IS_HARDWARE_TYPE_8723BE(_Adapter) || IS_HARDWARE_TYPE_8723BU(_Adapter) ||IS_HARDWARE_TYPE_8723BS(_Adapter)) - -#define IS_HARDWARE_TYPE_8195A(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8195A) - -#define IS_HARDWARE_TYPE_8711B(_Adapter) (((_adapter *)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8711B) - -typedef struct eeprom_priv EEPROM_EFUSE_PRIV, *PEEPROM_EFUSE_PRIV; -#define GET_EEPROM_EFUSE_PRIV(adapter) (&adapter->eeprompriv) -#define is_boot_from_eeprom(adapter) (adapter->eeprompriv.EepromOrEfuse) - -//TODO - -#ifdef CONFIG_WOWLAN -typedef enum _wowlan_subcode{ - WOWLAN_PATTERN_MATCH = 1, - WOWLAN_MAGIC_PACKET = 2, - WOWLAN_UNICAST = 3, - WOWLAN_SET_PATTERN = 4, - WOWLAN_DUMP_REG = 5, - WOWLAN_ENABLE = 6, - WOWLAN_DISABLE = 7, - WOWLAN_STATUS = 8, - WOWLAN_DEBUG_RELOAD_FW = 9, - WOWLAN_DEBUG_1 =10, - WOWLAN_DEBUG_2 =11 -}wowlan_subcode; - -struct wowlan_ioctl_param{ - unsigned int subcode; - unsigned int subcode_value; - unsigned int wakeup_reason; - unsigned int len; - unsigned char pattern[0]; -}; - -#define Rx_Pairwisekey 0x01 -#define Rx_GTK 0x02 -#define Rx_DisAssoc 0x04 -#define Rx_DeAuth 0x08 -#define FWDecisionDisconnect 0x10 -#define Rx_MagicPkt 0x21 -#define Rx_UnicastPkt 0x22 -#define Rx_PatternPkt 0x23 -#endif // CONFIG_WOWLAN - -void rtw_hal_def_value_init(_adapter *padapter); - -void rtw_hal_free_data(_adapter *padapter); - -void rtw_hal_dm_init(_adapter *padapter); -void rtw_hal_dm_deinit(_adapter *padapter); -#if 0 -void rtw_hal_sw_led_init(_adapter *padapter); -void rtw_hal_sw_led_deinit(_adapter *padapter); -#endif -uint32_t rtw_hal_power_on(_adapter *padapter); -uint rtw_hal_init(_adapter *padapter); -uint rtw_hal_deinit(_adapter *padapter); -void rtw_hal_stop(_adapter *padapter); -void rtw_hal_set_hwreg(PADAPTER padapter, uint8_t variable, uint8_t *val); -void rtw_hal_get_hwreg(PADAPTER padapter, uint8_t variable, uint8_t *val); - -void rtw_hal_chip_configure(_adapter *padapter); -void rtw_hal_read_chip_info(_adapter *padapter); -void rtw_hal_read_chip_version(_adapter *padapter); - -uint8_t rtw_hal_set_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue); -uint8_t rtw_hal_get_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue); - -void rtw_hal_set_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1,BOOLEAN bSet); -void rtw_hal_get_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1,BOOLEAN bSet); - -void rtw_hal_enable_interrupt(_adapter *padapter); -void rtw_hal_disable_interrupt(_adapter *padapter); -void rtw_hal_clear_interrupt(_adapter *padapter); -#ifdef CONFIG_WOWLAN -void rtw_hal_disable_interrupt_but_cpwm2(_adapter *padapter); -#endif - -uint32_t rtw_hal_inirp_init(_adapter *padapter); -uint32_t rtw_hal_inirp_deinit(_adapter *padapter); - -void rtw_hal_irp_reset(_adapter *padapter); -#if 0 -uint8_t rtw_hal_intf_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, uint8_t* val); -#endif -int32_t rtw_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe); -int32_t rtw_hal_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe); - -int32_t rtw_hal_init_xmit_priv(_adapter *padapter); -void rtw_hal_free_xmit_priv(_adapter *padapter); - -#if 1 -int32_t rtw_hal_init_recv_priv(_adapter *padapter); -void rtw_hal_free_recv_priv(_adapter *padapter); -#endif - -void rtw_hal_update_ra_mask(struct sta_info *psta, uint8_t rssi_level); -void rtw_hal_add_ra_tid(_adapter *padapter, uint32_t bitmap, uint8_t *arg, uint8_t rssi_level); -void rtw_hal_clone_data(_adapter *dst_padapter, _adapter *src_padapter); -#ifdef CONFIG_LITTLE_WIFI_MCU_FUNCTION_THREAD -void rtw_hal_start_thread(_adapter *padapter); -void rtw_hal_stop_thread(_adapter *padapter); -#endif -void rtw_hal_bcn_related_reg_setting(_adapter *padapter); - -uint32_t rtw_hal_read_bbreg(_adapter *padapter, uint32_t RegAddr, uint32_t BitMask); -void rtw_hal_write_bbreg(_adapter *padapter, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); -uint32_t rtw_hal_read_rfreg(_adapter *padapter, uint32_t eRFPath, uint32_t RegAddr, uint32_t BitMask); -void rtw_hal_write_rfreg(_adapter *padapter, uint32_t eRFPath, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); - -int32_t rtw_hal_interrupt_handler(_adapter *padapter); - -void rtw_hal_set_bwmode(_adapter *padapter, CHANNEL_WIDTH Bandwidth, uint8_t Offset); -void rtw_hal_set_chan(_adapter *padapter, uint8_t channel); -void rtw_hal_set_chnl_bw(_adapter *padapter, uint8_t channel, CHANNEL_WIDTH Bandwidth, uint8_t Offset40, uint8_t Offset80); -void rtw_hal_dm_watchdog(_adapter *padapter); -#if 1 -void rtw_hal_update_txdesc(_adapter *padapter, struct xmit_frame *pxmitframe, uint8_t *pbuf); -#endif -int32_t rtw_hal_fill_h2c_cmd(PADAPTER padapter, uint8_t ElementID, uint32_t CmdLen, uint8_t *pCmdBuffer); - -void rtw_hal_fill_fake_txdesc(_adapter* padapter, uint8_t* pDesc, uint32_t BufferLen, - uint8_t IsPsPoll, uint8_t IsBTQosNull, uint8_t bDataFrame); - -uint8_t rtw_hal_get_txbuff_rsvd_page_num(_adapter *padapter, bool wowlan); - - -void rtw_hal_set_wowlan_fw(_adapter *padapter, uint8_t sleep); - - -c2h_id_filter rtw_hal_c2h_id_filter_ccx(_adapter *padapter); - -int32_t rtw_hal_c2h_handler(_adapter *padapter, uint8_t *c2h_evt); - - -#ifdef CONFIG_ANTENNA_DIVERSITY -uint8_t rtw_hal_antdiv_before_linked(_adapter *padapter); -void rtw_hal_antdiv_rssi_compared(_adapter *padapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src); -#endif - -#ifdef CONFIG_HOSTAPD_MLME -int32_t rtw_hal_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt); -#endif - -#ifdef DBG_CONFIG_ERROR_DETECT -void rtw_hal_sreset_init(_adapter *padapter); -void rtw_hal_sreset_reset(_adapter *padapter); -void rtw_hal_sreset_reset_value(_adapter *padapter); -void rtw_hal_sreset_xmit_status_check(_adapter *padapter); -void rtw_hal_sreset_linked_status_check (_adapter *padapter); -uint8_t rtw_hal_sreset_get_wifi_status(_adapter *padapter); -#endif - -#ifdef CONFIG_IOL -int rtw_hal_iol_cmd(ADAPTER *adapter, struct xmit_frame *xmit_frame, uint32_t max_wating_ms, uint32_t bndy_cnt) -#endif - -#if 0//def CONFIG_XMIT_THREAD_MODE -int32_t rtw_hal_xmit_thread_handler(_adapter *padapter); -#endif - -int32_t rtw_hal_recv_tasklet(_adapter *padapter); -#if (RTW_NOTCH_FILTER != 0) -void rtw_hal_notch_filter(_adapter * adapter, bool enable); -#endif -#if 0 -void rtw_hal_reset_security_engine(_adapter * adapter); -#endif - -void decide_chip_type_by_device_id(_adapter *padapter); - - -#ifdef CONFIG_RTL8723A -void rtl8723as_set_hal_ops(PADAPTER padapter); -#define hal_set_hal_ops(__adapter) rtl8723as_set_hal_ops(__adapter) -#endif - -#ifdef CONFIG_RTL8188E -uint32_t rtl8188e_set_hal_ops(PADAPTER padapter); -#define hal_set_hal_ops(__adapter) rtl8188e_set_hal_ops(__adapter) -#endif - -#ifdef CONFIG_RTL8188F -uint32_t rtl8188fs_set_hal_ops(PADAPTER padapter); -#define hal_set_hal_ops(__adapter) rtl8188fs_set_hal_ops(__adapter) -#endif - -#ifdef CONFIG_RTL8195A -uint32_t rtl8195ab_set_hal_ops(_adapter * padapter); -#define hal_set_hal_ops rtl8195ab_set_hal_ops -#define hal_interuupt_recognized InterruptRecognized8195a -#elif defined(CONFIG_RTL8711B) -uint32_t rtl8711bb_set_hal_ops(_adapter * padapter); -#define hal_set_hal_ops rtl8711bb_set_hal_ops -#define hal_interuupt_recognized InterruptRecognized8711b -#endif - - -#endif //__HAL_INTF_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_pg.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_pg.h deleted file mode 100644 index 5d1d5f1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_pg.h +++ /dev/null @@ -1,81 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __HAL_PG_H__ -#define __HAL_PG_H__ - -#include - -// -// For VHT series TX power by rate table. -// VHT TX power by rate off setArray = -// Band:-2G&5G = 0 / 1 -// RF: at most 4*4 = ABCD=0/1/2/3 -// CCK=0 OFDM=1/2 HT-MCS 0-15=3/4/56 VHT=7/8/9/10/11 -// -#define PPG_BB_GAIN_2G_TX_OFFSET_MASK 0x0F -#define PPG_BB_GAIN_2G_TXB_OFFSET_MASK 0xF0 - -#define PPG_BB_GAIN_5G_TX_OFFSET_MASK 0x1F -#define PPG_THERMAL_OFFSET_MASK 0x1F -#define KFREE_BB_GAIN_2G_TX_OFFSET(_ppg_v) (((_ppg_v) == PPG_BB_GAIN_2G_TX_OFFSET_MASK) ? 0 : (((_ppg_v) & 0x01) ? ((_ppg_v) >> 1) : (-((_ppg_v) >> 1)))) -#define KFREE_THERMAL_OFFSET(_ppg_v) (((_ppg_v) == PPG_THERMAL_OFFSET_MASK) ? 0 : (((_ppg_v) & 0x01) ? ((_ppg_v) >> 1) : (-((_ppg_v) >> 1)))) - - - -#if defined(NOT_SUPPORT_5G) -#define TX_PWR_BY_RATE_NUM_BAND 1 -#else -#define TX_PWR_BY_RATE_NUM_BAND 2 -#endif - -#if defined(NOT_SUPPORT_RF_MULTIPATH) && defined(NOT_SUPPORT_VHT) -#define TX_PWR_BY_RATE_NUM_RF 1 -#define TX_PWR_BY_RATE_NUM_RATE 20 // CCK 1M~11M, OFDM 6M~54M, MCS0~7 -#else -#define TX_PWR_BY_RATE_NUM_RF 4 -#define TX_PWR_BY_RATE_NUM_RATE 84 -#endif - -#if defined(NOT_SUPPORT_RF_MULTIPATH) -#define MAX_RF_PATH 1 -#define MAX_TX_COUNT 1 -#else -#define MAX_RF_PATH 2 // Max 4 for ss larger than 2 -#define MAX_TX_COUNT 4 //It must always set to 4, otherwise read efuse table secquence will be wrong. -#endif -#define MAX_CHNL_GROUP_24G 6 // ch1~2, ch3~5, ch6~8,ch9~11,ch12~13,CH 14 total three groups -#define MAX_CHNL_GROUP_5G 14 - -typedef struct _TxPowerInfo24G{ - uint8_t IndexCCK_Base[MAX_RF_PATH][MAX_CHNL_GROUP_24G]; - uint8_t IndexBW40_Base[MAX_RF_PATH][MAX_CHNL_GROUP_24G]; - //If only one tx, only BW20 and OFDM are used. - int8_t OFDM_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - int8_t BW20_Diff[MAX_RF_PATH][MAX_TX_COUNT]; -#if !defined(NOT_SUPPORT_RF_MULTIPATH) - int8_t CCK_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - int8_t BW40_Diff[MAX_RF_PATH][MAX_TX_COUNT]; -#endif -}TxPowerInfo24G, *PTxPowerInfo24G; - -#endif - - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_phy.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_phy.h deleted file mode 100644 index 81c5907..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_phy.h +++ /dev/null @@ -1,99 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __HAL_PHY_H__ -#define __HAL_PHY_H__ - -#define RF6052_MAX_TX_PWR 0x3F -#define RF6052_MAX_REG_88E 0xFF -#define RF6052_MAX_REG_92C 0x7F - -#define RF6052_MAX_REG \ - (RF6052_MAX_REG_88E > RF6052_MAX_REG_92C) ? RF6052_MAX_REG_88E: RF6052_MAX_REG_92C - -#define GET_RF6052_REAL_MAX_REG(_Adapter) \ - IS_HARDWARE_TYPE_8188E(_Adapter) ? RF6052_MAX_REG_88E : RF6052_MAX_REG_92C - -#define RF6052_MAX_PATH 2 - -/*--------------------------Define Parameters-------------------------------*/ -typedef enum _BAND_TYPE{ - BAND_ON_2_4G = 0, - BAND_ON_5G, - BAND_ON_BOTH, - BANDMAX -}BAND_TYPE,*PBAND_TYPE; - -typedef enum _RF_TYPE{ - RF_TYPE_MIN = 0, // 0 - RF_8225=1, // 1 11b/g RF for verification only - RF_8256=2, // 2 11b/g/n - RF_8258=3, // 3 11a/b/g/n RF - RF_6052=4, // 4 11b/g/n RF - RF_PSEUDO_11N=5, // 5, It is a temporality RF. - RF_TYPE_MAX -}RF_TYPE_E,*PRF_TYPE_E; - -typedef enum _RF_PATH{ - RF_PATH_A = 0, - RF_PATH_B, - RF_PATH_C, - RF_PATH_D -}RF_PATH, *PRF_PATH; - -#define TX_1S 0 -#define TX_2S 1 -#define TX_3S 2 -#define TX_4S 3 - -typedef enum _BaseBand_Config_Type{ - BaseBand_Config_PHY_REG = 0, //Radio Path A - BaseBand_Config_AGC_TAB = 1, //Radio Path B - BaseBand_Config_AGC_TAB_2G = 2, - BaseBand_Config_AGC_TAB_5G = 3, - BaseBand_Config_PHY_REG_PG -}BaseBand_Config_Type, *PBaseBand_Config_Type; - -typedef enum _WIRELESS_MODE { - WIRELESS_MODE_UNKNOWN = 0x00, - WIRELESS_MODE_A = 0x01, - WIRELESS_MODE_B = 0x02, - WIRELESS_MODE_G = 0x04, - WIRELESS_MODE_AUTO = 0x08, - WIRELESS_MODE_N_24G = 0x10, - WIRELESS_MODE_N_5G = 0x20, - WIRELESS_MODE_AC_5G = 0x40, - WIRELESS_MODE_AC_24G = 0x80, - WIRELESS_MODE_AC_ONLY = 0x100, -} WIRELESS_MODE; - -typedef struct RF_Shadow_Compare_Map { - // Shadow register value - uint32_t Value; - // Compare or not flag - uint8_t Compare; - // Record If it had ever modified unpredicted - uint8_t ErrorOrNot; - // Recorver Flag - uint8_t Recorver; - // - uint8_t Driver_Write; -}RF_SHADOW_T; - -#endif //__HAL_PHY_H__ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_phy_reg.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_phy_reg.h deleted file mode 100644 index 723eddb..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/hal_phy_reg.h +++ /dev/null @@ -1,31 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __HAL_PHY_REG_H__ -#define __HAL_PHY_REG_H__ - -//for PutRFRegsetting & GetRFRegSetting BitMask -//#if (RTL92SE_FPGA_VERIFY == 1) -//#define bRFRegOffsetMask 0xfff -//#else -#define bRFRegOffsetMask 0xfffff -//#endif - -#endif //__HAL_PHY_REG_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/ieee80211.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/ieee80211.h deleted file mode 100644 index c6dc553..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/ieee80211.h +++ /dev/null @@ -1,1529 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __IEEE80211_H -#define __IEEE80211_H - -#include "wlan_bssdef.h" - -#ifndef CONFIG_RTL8711FW - -// #include - - #if defined PLATFORM_OS_XP - #include - #endif - #if defined PLATFORM_LINUX - #include - #endif -#else - - #include - -#endif - -#define MGMT_QUEUE_NUM 5 - -#define ETH_ALEN 6 -#define ETH_TYPE_LEN 2 -#define PAYLOAD_TYPE_LEN 1 - -#ifdef CONFIG_AP_MODE - -#define RTL_IOCTL_HOSTAPD (SIOCIWFIRSTPRIV + 28) - -/* RTL871X_IOCTL_HOSTAPD ioctl() cmd: */ -enum { - RTL871X_HOSTAPD_FLUSH = 1, - RTL871X_HOSTAPD_ADD_STA = 2, - RTL871X_HOSTAPD_REMOVE_STA = 3, - RTL871X_HOSTAPD_GET_INFO_STA = 4, - /* REMOVED: PRISM2_HOSTAPD_RESET_TXEXC_STA = 5, */ - RTL871X_HOSTAPD_GET_WPAIE_STA = 5, - RTL871X_SET_ENCRYPTION = 6, - RTL871X_GET_ENCRYPTION = 7, - RTL871X_HOSTAPD_SET_FLAGS_STA = 8, - RTL871X_HOSTAPD_GET_RID = 9, - RTL871X_HOSTAPD_SET_RID = 10, - RTL871X_HOSTAPD_SET_ASSOC_AP_ADDR = 11, - RTL871X_HOSTAPD_SET_GENERIC_ELEMENT = 12, - RTL871X_HOSTAPD_MLME = 13, - RTL871X_HOSTAPD_SCAN_REQ = 14, - RTL871X_HOSTAPD_STA_CLEAR_STATS = 15, - RTL871X_HOSTAPD_SET_BEACON=16, - RTL871X_HOSTAPD_SET_WPS_BEACON = 17, - RTL871X_HOSTAPD_SET_WPS_PROBE_RESP = 18, - RTL871X_HOSTAPD_SET_WPS_ASSOC_RESP = 19, - RTL871X_HOSTAPD_SET_HIDDEN_SSID = 20, - RTL871X_HOSTAPD_SET_MACADDR_ACL = 21, - RTL871X_HOSTAPD_ACL_ADD_STA = 22, - RTL871X_HOSTAPD_ACL_REMOVE_STA = 23, -}; - -/* STA flags */ -#define WLAN_STA_AUTH BIT(0) -#define WLAN_STA_ASSOC BIT(1) -#define WLAN_STA_PS BIT(2) -#define WLAN_STA_TIM BIT(3) -#define WLAN_STA_PERM BIT(4) -#define WLAN_STA_AUTHORIZED BIT(5) -#define WLAN_STA_PENDING_POLL BIT(6) /* pending activity poll not ACKed */ -#define WLAN_STA_SHORT_PREAMBLE BIT(7) -#define WLAN_STA_PREAUTH BIT(8) -#define WLAN_STA_WME BIT(9) -#define WLAN_STA_MFP BIT(10) -#define WLAN_STA_HT BIT(11) -#define WLAN_STA_WPS BIT(12) -#define WLAN_STA_MAYBE_WPS BIT(13) -#define WLAN_STA_NONERP BIT(31) - -#endif - -#define IEEE_CMD_SET_WPA_PARAM 1 -#define IEEE_CMD_SET_WPA_IE 2 -#define IEEE_CMD_SET_ENCRYPTION 3 -#define IEEE_CMD_MLME 4 - -#define IEEE_PARAM_WPA_ENABLED 1 -#define IEEE_PARAM_TKIP_COUNTERMEASURES 2 -#define IEEE_PARAM_DROP_UNENCRYPTED 3 -#define IEEE_PARAM_PRIVACY_INVOKED 4 -#define IEEE_PARAM_AUTH_ALGS 5 -#define IEEE_PARAM_IEEE_802_1X 6 -#define IEEE_PARAM_WPAX_SELECT 7 - -#define AUTH_ALG_OPEN_SYSTEM 0x1 -#define AUTH_ALG_SHARED_KEY 0x2 -#define AUTH_ALG_LEAP 0x00000004 - -#define IEEE_MLME_STA_DEAUTH 1 -#define IEEE_MLME_STA_DISASSOC 2 - -#define IEEE_CRYPT_ERR_UNKNOWN_ALG 2 -#define IEEE_CRYPT_ERR_UNKNOWN_ADDR 3 -#define IEEE_CRYPT_ERR_CRYPT_INIT_FAILED 4 -#define IEEE_CRYPT_ERR_KEY_SET_FAILED 5 -#define IEEE_CRYPT_ERR_TX_KEY_SET_FAILED 6 -#define IEEE_CRYPT_ERR_CARD_CONF_FAILED 7 - - -#define IEEE_CRYPT_ALG_NAME_LEN 16 - -#define WPA_CIPHER_NONE BIT(0) -#define WPA_CIPHER_WEP40 BIT(1) -#define WPA_CIPHER_WEP104 BIT(2) -#define WPA_CIPHER_TKIP BIT(3) -#define WPA_CIPHER_CCMP BIT(4) - - - -#define WPA_SELECTOR_LEN 4 -//extern uint16_t RTW_WPA_VERSION ; -//extern uint8_t WPA_AUTH_KEY_MGMT_NONE[]; -//extern uint8_t WPA_AUTH_KEY_MGMT_UNSPEC_802_1X[]; -//extern uint8_t WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X[]; -//extern uint8_t WPA_CIPHER_SUITE_WRAP[]; - -#define RSN_HEADER_LEN 4 -#define RSN_SELECTOR_LEN 4 - -//tern uint8_t RSN_CIPHER_SUITE_WRAP[]; - -typedef enum _RATEID_IDX_ { - RATEID_IDX_BGN_40M_2SS = 0, - RATEID_IDX_BGN_40M_1SS = 1, - RATEID_IDX_BGN_20M_2SS_BN = 2, - RATEID_IDX_BGN_20M_1SS_BN = 3, - RATEID_IDX_GN_N2SS = 4, - RATEID_IDX_GN_N1SS = 5, - RATEID_IDX_BG = 6, - RATEID_IDX_G = 7, - RATEID_IDX_B = 8, - RATEID_IDX_VHT_2SS = 9, - RATEID_IDX_VHT_1SS = 10, -} RATEID_IDX, *PRATEID_IDX; - -enum NETWORK_TYPE -{ - WIRELESS_INVALID = 0, - //Sub-Element - WIRELESS_11B = BIT(0), // tx: cck only , rx: cck only, hw: cck - WIRELESS_11G = BIT(1), // tx: ofdm only, rx: ofdm & cck, hw: cck & ofdm - WIRELESS_11A = BIT(2), // tx: ofdm only, rx: ofdm only, hw: ofdm only - WIRELESS_11_24N = BIT(3), // tx: MCS only, rx: MCS & cck, hw: MCS & cck - WIRELESS_11_5N = BIT(4), // tx: MCS only, rx: MCS & ofdm, hw: ofdm only - //WIRELESS_AUTO = BIT(5), - WIRELESS_11AC = BIT(6), - - //Combination - WIRELESS_11BG = (WIRELESS_11B|WIRELESS_11G), // tx: cck & ofdm, rx: cck & ofdm & MCS, hw: cck & ofdm - WIRELESS_11G_24N = (WIRELESS_11G|WIRELESS_11_24N), // tx: ofdm & MCS, rx: ofdm & cck & MCS, hw: cck & ofdm - WIRELESS_11A_5N = (WIRELESS_11A|WIRELESS_11_5N), // tx: ofdm & MCS, rx: ofdm & MCS, hw: ofdm only - WIRELESS_11BG_24N = (WIRELESS_11B|WIRELESS_11G|WIRELESS_11_24N), // tx: ofdm & cck & MCS, rx: ofdm & cck & MCS, hw: ofdm & cck - WIRELESS_11AGN = (WIRELESS_11A|WIRELESS_11G|WIRELESS_11_24N|WIRELESS_11_5N), // tx: ofdm & MCS, rx: ofdm & MCS, hw: ofdm only - WIRELESS_11ABGN = (WIRELESS_11A|WIRELESS_11B|WIRELESS_11G|WIRELESS_11_24N|WIRELESS_11_5N), -}; - - -#define SUPPORTED_24G_NETTYPE_MSK (WIRELESS_11B | WIRELESS_11G | WIRELESS_11_24N) -#define SUPPORTED_5G_NETTYPE_MSK (WIRELESS_11A | WIRELESS_11_5N) - -#define IsSupported24G(NetType) ((NetType) & SUPPORTED_24G_NETTYPE_MSK ? _TRUE : _FALSE) -#define IsSupported5G(NetType) ((NetType) & SUPPORTED_5G_NETTYPE_MSK ? _TRUE : _FALSE) - -//TODO -#if 0 -#define IsEnableHWCCK(NetType) IsSupported24G(NetType) -#define IsEnableHWOFDM(NetType) ((NetType) & (WIRELESS_11G|WIRELESS_11_24N|SUPPORTED_5G_NETTYPE_MSK) ? _TRUE : _FALSE) - -#define IsSupportedRxCCK(NetType) IsEnableHWCCK(NetType) -#define IsSupportedRxOFDM(NetType) IsEnableHWOFDM(NetType) -#define IsSupportedRxMCS(NetType) IsEnableHWOFDM(NetType) - -#define IsSupportedTxCCK(NetType) ((NetType) & (WIRELESS_11B) ? _TRUE : _FALSE) -#define IsSupportedTxOFDM(NetType) ((NetType) & (WIRELESS_11G|WIRELESS_11A) ? _TRUE : _FALSE) -#define IsSupportedTxMCS(NetType) ((NetType) & (WIRELESS_11_24N|WIRELESS_11_5N) ? _TRUE : _FALSE) - -#endif //#if 0 - -typedef struct ieee_param { - uint32_t cmd; - uint8_t sta_addr[ETH_ALEN]; - union { - struct { - uint8_t name; - uint32_t value; - } wpa_param; - struct { - uint32_t len; - uint8_t reserved[32]; -#ifdef __CC_ARM - uint8_t data[1]; -#else - uint8_t data[0]; -#endif - } wpa_ie; - struct{ - int command; - int reason_code; - } mlme; - struct { - uint8_t alg[IEEE_CRYPT_ALG_NAME_LEN]; - uint8_t set_tx; - uint32_t err; - uint8_t idx; - uint8_t seq[8]; /* sequence counter (set: RX, get: TX) */ - uint16_t key_len; -#ifdef __CC_ARM - uint8_t key[1]; -#else - uint8_t key[0]; -#endif - } crypt; -#ifdef CONFIG_AP_MODE - struct { - uint16_t aid; - uint16_t capability; - int flags; - uint8_t tx_supp_rates[16]; - struct rtw_ieee80211_ht_cap ht_cap; - } add_sta; - struct { - uint8_t reserved[2];//for set max_num_sta -#ifdef __CC_ARM - uint8_t buf[1]; -#else - uint8_t buf[0]; -#endif - } bcn_ie; -#endif - - } u; -}ieee_param; - -//TODO -#if 0 - -#ifdef CONFIG_AP_MODE -typedef struct ieee_param_ex { - uint32_t cmd; - uint8_t sta_addr[ETH_ALEN]; - uint8_t data[0]; -}ieee_param_ex; - -struct sta_data{ - uint16_t aid; - uint16_t capability; - int flags; - uint32_t sta_set; - uint8_t tx_supp_rates[16]; - uint32_t tx_supp_rates_len; - struct rtw_ieee80211_ht_cap ht_cap; - uint64_t rx_pkts; - uint64_t rx_bytes; - uint64_t rx_drops; - uint64_t tx_pkts; - uint64_t tx_bytes; - uint64_t tx_drops; -}; -#endif - - -#if WIRELESS_EXT < 17 -#define IW_QUAL_QUAL_INVALID 0x10 -#define IW_QUAL_LEVEL_INVALID 0x20 -#define IW_QUAL_NOISE_INVALID 0x40 -#define IW_QUAL_QUAL_UPDATED 0x1 -#define IW_QUAL_LEVEL_UPDATED 0x2 -#define IW_QUAL_NOISE_UPDATED 0x4 -#endif - -#define IEEE80211_DATA_LEN 2304 -/* Maximum size for the MA-UNITDATA primitive, 802.11 standard section - 6.2.1.1.2. - - The figure in section 7.1.2 suggests a body size of up to 2312 - bytes is allowed, which is a bit confusing, I suspect this - represents the 2304 bytes of real data, plus a possible 8 bytes of - WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro) */ - - -#define IEEE80211_HLEN 30 -#define IEEE80211_FRAME_LEN (IEEE80211_DATA_LEN + IEEE80211_HLEN) - - -/* this is stolen from ipw2200 driver */ -#define IEEE_IBSS_MAC_HASH_SIZE 31 - -struct ieee_ibss_seq { - uint8_t mac[ETH_ALEN]; - uint16_t seq_num; - uint16_t frag_num; - unsigned long packet_time; - _list list; -}; - -#endif //#if 0 - -#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW)||defined(PLATFORM_FREEBSD) || defined(PLATFORM_ECOS) || defined(PLATFORM_FREERTOS) || defined(PLATFORM_CMSIS_RTOS) - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct rtw_ieee80211_hdr { - uint16_t frame_ctl; - uint16_t duration_id; - uint8_t addr1[ETH_ALEN]; - uint8_t addr2[ETH_ALEN]; - uint8_t addr3[ETH_ALEN]; - uint16_t seq_ctl; - uint8_t addr4[ETH_ALEN]; -} RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct rtw_ieee80211_hdr_3addr { - uint16_t frame_ctl; - uint16_t duration_id; - uint8_t addr1[ETH_ALEN]; - uint8_t addr2[ETH_ALEN]; - uint8_t addr3[ETH_ALEN]; - uint16_t seq_ctl; -} RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct rtw_ieee80211_hdr_qos { - uint16_t frame_ctl; - uint16_t duration_id; - uint8_t addr1[ETH_ALEN]; - uint8_t addr2[ETH_ALEN]; - uint8_t addr3[ETH_ALEN]; - uint16_t seq_ctl; - uint8_t addr4[ETH_ALEN]; - uint16_t qc; -} RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct rtw_ieee80211_hdr_3addr_qos { - uint16_t frame_ctl; - uint16_t duration_id; - uint8_t addr1[ETH_ALEN]; - uint8_t addr2[ETH_ALEN]; - uint8_t addr3[ETH_ALEN]; - uint16_t seq_ctl; - uint16_t qc; -} RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct eapol { - uint8_t snap[6]; - uint16_t ethertype; - uint8_t version; - uint8_t type; - uint16_t length; -} RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#endif //defined PLATFORM_LINUX/CONFIG_RTL8711FW/PLATFORM_FREEBSD/PLATFORM_ECOSPLATFORM_FREERTOS - -//TODO -#if 0 - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -struct rtw_ieee80211_hdr { - uint16_t frame_ctl; - uint16_t duration_id; - uint8_t addr1[ETH_ALEN]; - uint8_t addr2[ETH_ALEN]; - uint8_t addr3[ETH_ALEN]; - uint16_t seq_ctl; - uint8_t addr4[ETH_ALEN]; -}; - -struct rtw_ieee80211_hdr_3addr { - uint16_t frame_ctl; - uint16_t duration_id; - uint8_t addr1[ETH_ALEN]; - uint8_t addr2[ETH_ALEN]; - uint8_t addr3[ETH_ALEN]; - uint16_t seq_ctl; -}; - - -struct rtw_ieee80211_hdr_qos { - struct rtw_ieee80211_hdr wlan_hdr; - uint16_t qc; -}; - -struct rtw_ieee80211_hdr_3addr_qos { - struct rtw_ieee80211_hdr_3addr wlan_hdr; - uint16_t qc; -}; - -struct eapol { - uint8_t snap[6]; - uint16_t ethertype; - uint8_t version; - uint8_t type; - uint16_t length; -}; -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - - - -enum eap_type { - EAP_PACKET = 0, - EAPOL_START, - EAPOL_LOGOFF, - EAPOL_KEY, - EAPOL_ENCAP_ASF_ALERT -}; - -#endif //#if 0 - -#define IEEE80211_3ADDR_LEN 24 -#define IEEE80211_4ADDR_LEN 30 -#define IEEE80211_FCS_LEN 4 - -#define MIN_FRAG_THRESHOLD 256U -#define MAX_FRAG_THRESHOLD 2346U - -/* Frame control field constants */ -#define RTW_IEEE80211_FCTL_VERS 0x0002 -#define RTW_IEEE80211_FCTL_FTYPE 0x000c -#define RTW_IEEE80211_FCTL_STYPE 0x00f0 -#define RTW_IEEE80211_FCTL_TODS 0x0100 -#define RTW_IEEE80211_FCTL_FROMDS 0x0200 -#define RTW_IEEE80211_FCTL_MOREFRAGS 0x0400 -#define RTW_IEEE80211_FCTL_RETRY 0x0800 -#define RTW_IEEE80211_FCTL_PM 0x1000 -#define RTW_IEEE80211_FCTL_MOREDATA 0x2000 -#define RTW_IEEE80211_FCTL_WEP 0x4000 -#define RTW_IEEE80211_FCTL_ORDER 0x8000 - -#define RTW_IEEE80211_FTYPE_MGMT 0x0000 -#define RTW_IEEE80211_FTYPE_CTL 0x0004 -#define RTW_IEEE80211_FTYPE_DATA 0x0008 - -/* management */ -#define RTW_IEEE80211_STYPE_ASSOC_REQ 0x0000 -#define RTW_IEEE80211_STYPE_ASSOC_RESP 0x0010 -#define RTW_IEEE80211_STYPE_REASSOC_REQ 0x0020 -#define RTW_IEEE80211_STYPE_REASSOC_RESP 0x0030 -#define RTW_IEEE80211_STYPE_PROBE_REQ 0x0040 -#define RTW_IEEE80211_STYPE_PROBE_RESP 0x0050 -#define RTW_IEEE80211_STYPE_BEACON 0x0080 -#define RTW_IEEE80211_STYPE_ATIM 0x0090 -#define RTW_IEEE80211_STYPE_DISASSOC 0x00A0 -#define RTW_IEEE80211_STYPE_AUTH 0x00B0 -#define RTW_IEEE80211_STYPE_DEAUTH 0x00C0 - -/* control */ -#define RTW_IEEE80211_STYPE_PSPOLL 0x00A0 -#define RTW_IEEE80211_STYPE_RTS 0x00B0 -#define RTW_IEEE80211_STYPE_CTS 0x00C0 -#define RTW_IEEE80211_STYPE_ACK 0x00D0 -#define RTW_IEEE80211_STYPE_CFEND 0x00E0 -#define RTW_IEEE80211_STYPE_CFENDACK 0x00F0 - -/* data */ -#define RTW_IEEE80211_STYPE_DATA 0x0000 -#define RTW_IEEE80211_STYPE_DATA_CFACK 0x0010 -#define RTW_IEEE80211_STYPE_DATA_CFPOLL 0x0020 -#define RTW_IEEE80211_STYPE_DATA_CFACKPOLL 0x0030 -#define RTW_IEEE80211_STYPE_NULLFUNC 0x0040 -#define RTW_IEEE80211_STYPE_CFACK 0x0050 -#define RTW_IEEE80211_STYPE_CFPOLL 0x0060 -#define RTW_IEEE80211_STYPE_CFACKPOLL 0x0070 -#define RTW_IEEE80211_QOS_DATAGRP 0x0080 -#define RTW_IEEE80211_QoS_DATAGRP RTW_IEEE80211_QOS_DATAGRP - -#define RTW_IEEE80211_SCTL_FRAG 0x000F -#define RTW_IEEE80211_SCTL_SEQ 0xFFF0 - - -#define RTW_ERP_INFO_NON_ERP_PRESENT BIT(0) -#define RTW_ERP_INFO_USE_PROTECTION BIT(1) -#define RTW_ERP_INFO_BARKER_PREAMBLE_MODE BIT(2) - -/* QoS,QOS */ -#define NORMAL_ACK 0 -#define NO_ACK 1 -#define NON_EXPLICIT_ACK 2 -#define BLOCK_ACK 3 - -#ifndef ETH_P_PAE -#define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */ -#endif /* ETH_P_PAE */ - -#define ETH_P_PREAUTH 0x88C7 /* IEEE 802.11i pre-authentication */ - -#define ETH_P_ECONET 0x0018 - -#ifndef ETH_P_80211_RAW -#define ETH_P_80211_RAW (ETH_P_ECONET + 1) -#endif - -/* IEEE 802.11 defines */ - -#define P80211_OUI_LEN 3 - - -#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW) || defined(PLATFORM_FREEBSD) || defined(PLATFORM_ECOS) || defined(PLATFORM_FREERTOS) || defined(PLATFORM_CMSIS_RTOS) -RTW_PACK_STRUCT_BEGIN -struct ieee80211_snap_hdr { - - uint8_t dsap; /* always 0xAA */ - uint8_t ssap; /* always 0xAA */ - uint8_t ctrl; /* always 0x03 */ - uint8_t oui[P80211_OUI_LEN]; /* organizational universal id */ - -} RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END - -#endif - -#ifdef PLATFORM_WINDOWS - -#pragma pack(1) -struct ieee80211_snap_hdr { - - uint8_t dsap; /* always 0xAA */ - uint8_t ssap; /* always 0xAA */ - uint8_t ctrl; /* always 0x03 */ - uint8_t oui[P80211_OUI_LEN]; /* organizational universal id */ - -}; -#pragma pack() - -#endif - - -#define SNAP_SIZE sizeof(struct ieee80211_snap_hdr) - -#define WLAN_FC_GET_TYPE(fc) ((fc) & RTW_IEEE80211_FCTL_FTYPE) -#define WLAN_FC_GET_STYPE(fc) ((fc) & RTW_IEEE80211_FCTL_STYPE) - -#define WLAN_QC_GET_TID(qc) ((qc) & 0x0f) - -#define WLAN_GET_SEQ_FRAG(seq) ((seq) & RTW_IEEE80211_SCTL_FRAG) -#define WLAN_GET_SEQ_SEQ(seq) ((seq) & RTW_IEEE80211_SCTL_SEQ) - - - -/* Authentication algorithms */ -#define WLAN_AUTH_OPEN 0 -#define WLAN_AUTH_SHARED_KEY 1 - -#define WLAN_AUTH_CHALLENGE_LEN 128 - -#define WLAN_CAPABILITY_BSS (1<<0) -#define WLAN_CAPABILITY_IBSS (1<<1) -#define WLAN_CAPABILITY_CF_POLLABLE (1<<2) -#define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3) -#define WLAN_CAPABILITY_PRIVACY (1<<4) -#define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5) -#define WLAN_CAPABILITY_PBCC (1<<6) -#define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7) -#define WLAN_CAPABILITY_SHORT_SLOT (1<<10) - -/* Status codes */ -#define WLAN_STATUS_SUCCESS 0 -#define WLAN_STATUS_UNSPECIFIED_FAILURE 1 -#define WLAN_STATUS_CAPS_UNSUPPORTED 10 -#define WLAN_STATUS_REASSOC_NO_ASSOC 11 -#define WLAN_STATUS_ASSOC_DENIED_UNSPEC 12 -#define WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG 13 -#define WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION 14 -#define WLAN_STATUS_CHALLENGE_FAIL 15 -#define WLAN_STATUS_AUTH_TIMEOUT 16 -#define WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA 17 -#define WLAN_STATUS_ASSOC_DENIED_RATES 18 -/* 802.11b */ -#define WLAN_STATUS_ASSOC_DENIED_NOSHORT 19 -#define WLAN_STATUS_ASSOC_DENIED_NOPBCC 20 -#define WLAN_STATUS_ASSOC_DENIED_NOAGILITY 21 - -/* Reason codes */ -#define WLAN_REASON_UNSPECIFIED 1 -#define WLAN_REASON_PREV_AUTH_NOT_VALID 2 -#define WLAN_REASON_DEAUTH_LEAVING 3 -#define WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY 4 -#define WLAN_REASON_DISASSOC_AP_BUSY 5 -#define WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA 6 -#define WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA 7 -#define WLAN_REASON_DISASSOC_STA_HAS_LEFT 8 -#define WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH 9 -#define WLAN_REASON_JOIN_WRONG_CHANNEL 65534 - -/* Information Element IDs */ -#define WLAN_EID_SSID 0 -#define WLAN_EID_SUPP_RATES 1 -#define WLAN_EID_FH_PARAMS 2 -#define WLAN_EID_DS_PARAMS 3 -#define WLAN_EID_CF_PARAMS 4 -#define WLAN_EID_TIM 5 -#define WLAN_EID_IBSS_PARAMS 6 -#define WLAN_EID_CHALLENGE 16 -/* EIDs defined by IEEE 802.11h - START */ -#define WLAN_EID_PWR_CONSTRAINT 32 -#define WLAN_EID_PWR_CAPABILITY 33 -#define WLAN_EID_TPC_REQUEST 34 -#define WLAN_EID_TPC_REPORT 35 -#define WLAN_EID_SUPPORTED_CHANNELS 36 -#define WLAN_EID_CHANNEL_SWITCH 37 -#define WLAN_EID_MEASURE_REQUEST 38 -#define WLAN_EID_MEASURE_REPORT 39 -#define WLAN_EID_QUITE 40 -#define WLAN_EID_IBSS_DFS 41 -/* EIDs defined by IEEE 802.11h - END */ -#define WLAN_EID_ERP_INFO 42 -#define WLAN_EID_HT_CAP 45 -#define WLAN_EID_RSN 48 -#define WLAN_EID_EXT_SUPP_RATES 50 -#define WLAN_EID_MOBILITY_DOMAIN 54 -#define WLAN_EID_FAST_BSS_TRANSITION 55 -#define WLAN_EID_TIMEOUT_INTERVAL 56 -#define WLAN_EID_RIC_DATA 57 -#define WLAN_EID_HT_OPERATION 61 -#define WLAN_EID_SECONDARY_CHANNEL_OFFSET 62 -#define WLAN_EID_20_40_BSS_COEXISTENCE 72 -#define WLAN_EID_20_40_BSS_INTOLERANT 73 -#define WLAN_EID_OVERLAPPING_BSS_SCAN_PARAMS 74 -#define WLAN_EID_MMIE 76 -#define WLAN_EID_VENDOR_SPECIFIC 221 -#define WLAN_EID_GENERIC (WLAN_EID_VENDOR_SPECIFIC) - -#define IEEE80211_MGMT_HDR_LEN 24 -#define IEEE80211_DATA_HDR3_LEN 24 -#define IEEE80211_DATA_HDR4_LEN 30 - - -#define IEEE80211_STATMASK_SIGNAL (1<<0) -#define IEEE80211_STATMASK_RSSI (1<<1) -#define IEEE80211_STATMASK_NOISE (1<<2) -#define IEEE80211_STATMASK_RATE (1<<3) -#define IEEE80211_STATMASK_WEMASK 0x7 - - -#define IEEE80211_CCK_MODULATION (1<<0) -#define IEEE80211_OFDM_MODULATION (1<<1) - -#define IEEE80211_24GHZ_BAND (1<<0) -#define IEEE80211_52GHZ_BAND (1<<1) - -#define IEEE80211_CCK_RATE_LEN 4 -#define IEEE80211_NUM_OFDM_RATESLEN 8 - - -#define IEEE80211_CCK_RATE_1MB 0x02 -#define IEEE80211_CCK_RATE_2MB 0x04 -#define IEEE80211_CCK_RATE_5MB 0x0B -#define IEEE80211_CCK_RATE_11MB 0x16 -#define IEEE80211_OFDM_RATE_LEN 8 -#define IEEE80211_OFDM_RATE_6MB 0x0C -#define IEEE80211_OFDM_RATE_9MB 0x12 -#define IEEE80211_OFDM_RATE_12MB 0x18 -#define IEEE80211_OFDM_RATE_18MB 0x24 -#define IEEE80211_OFDM_RATE_24MB 0x30 -#define IEEE80211_OFDM_RATE_36MB 0x48 -#define IEEE80211_OFDM_RATE_48MB 0x60 -#define IEEE80211_OFDM_RATE_54MB 0x6C -#define IEEE80211_BASIC_RATE_MASK 0x80 - -#define IEEE80211_CCK_RATE_1MB_MASK (1<<0) -#define IEEE80211_CCK_RATE_2MB_MASK (1<<1) -#define IEEE80211_CCK_RATE_5MB_MASK (1<<2) -#define IEEE80211_CCK_RATE_11MB_MASK (1<<3) -#define IEEE80211_OFDM_RATE_6MB_MASK (1<<4) -#define IEEE80211_OFDM_RATE_9MB_MASK (1<<5) -#define IEEE80211_OFDM_RATE_12MB_MASK (1<<6) -#define IEEE80211_OFDM_RATE_18MB_MASK (1<<7) -#define IEEE80211_OFDM_RATE_24MB_MASK (1<<8) -#define IEEE80211_OFDM_RATE_36MB_MASK (1<<9) -#define IEEE80211_OFDM_RATE_48MB_MASK (1<<10) -#define IEEE80211_OFDM_RATE_54MB_MASK (1<<11) - - -#define IEEE80211_CCK_RATES_MASK 0x0000000F -#define IEEE80211_CCK_BASIC_RATES_MASK (IEEE80211_CCK_RATE_1MB_MASK | \ - IEEE80211_CCK_RATE_2MB_MASK) -#define IEEE80211_CCK_DEFAULT_RATES_MASK (IEEE80211_CCK_BASIC_RATES_MASK | \ - IEEE80211_CCK_RATE_5MB_MASK | \ - IEEE80211_CCK_RATE_11MB_MASK) - -#define IEEE80211_OFDM_RATES_MASK 0x00000FF0 -#define IEEE80211_OFDM_BASIC_RATES_MASK (IEEE80211_OFDM_RATE_6MB_MASK | \ - IEEE80211_OFDM_RATE_12MB_MASK | \ - IEEE80211_OFDM_RATE_24MB_MASK) -#define IEEE80211_OFDM_DEFAULT_RATES_MASK (IEEE80211_OFDM_BASIC_RATES_MASK | \ - IEEE80211_OFDM_RATE_9MB_MASK | \ - IEEE80211_OFDM_RATE_18MB_MASK | \ - IEEE80211_OFDM_RATE_36MB_MASK | \ - IEEE80211_OFDM_RATE_48MB_MASK | \ - IEEE80211_OFDM_RATE_54MB_MASK) -#define IEEE80211_DEFAULT_RATES_MASK (IEEE80211_OFDM_DEFAULT_RATES_MASK | \ - IEEE80211_CCK_DEFAULT_RATES_MASK) - -#define IEEE80211_NUM_OFDM_RATES 8 -#define IEEE80211_NUM_CCK_RATES 4 -#define IEEE80211_OFDM_SHIFT_MASK_A 4 - - -/* BIT 7 HT Rate*/ -enum MGN_RATE{ - MGN_1M = 0x02, - MGN_2M = 0x04, - MGN_5_5M = 0x0B, - MGN_6M = 0x0C, - MGN_9M = 0x12, - MGN_11M = 0x16, - MGN_12M = 0x18, - MGN_18M = 0x24, - MGN_24M = 0x30, - MGN_36M = 0x48, - MGN_48M = 0x60, - MGN_54M = 0x6C, - MGN_MCS32 = 0x7F, - MGN_MCS0, - MGN_MCS1, - MGN_MCS2, - MGN_MCS3, - MGN_MCS4, - MGN_MCS5, - MGN_MCS6, - MGN_MCS7, - MGN_MCS8, - MGN_MCS9, - MGN_MCS10, - MGN_MCS11, - MGN_MCS12, - MGN_MCS13, - MGN_MCS14, - MGN_MCS15, - MGN_MCS16, - MGN_MCS17, - MGN_MCS18, - MGN_MCS19, - MGN_MCS20, - MGN_MCS21, - MGN_MCS22, - MGN_MCS23, - MGN_MCS24, - MGN_MCS25, - MGN_MCS26, - MGN_MCS27, - MGN_MCS28, - MGN_MCS29, - MGN_MCS30, - MGN_MCS31, - MGN_VHT1SS_MCS0, - MGN_VHT1SS_MCS1, - MGN_VHT1SS_MCS2, - MGN_VHT1SS_MCS3, - MGN_VHT1SS_MCS4, - MGN_VHT1SS_MCS5, - MGN_VHT1SS_MCS6, - MGN_VHT1SS_MCS7, - MGN_VHT1SS_MCS8, - MGN_VHT1SS_MCS9, - MGN_VHT2SS_MCS0, - MGN_VHT2SS_MCS1, - MGN_VHT2SS_MCS2, - MGN_VHT2SS_MCS3, - MGN_VHT2SS_MCS4, - MGN_VHT2SS_MCS5, - MGN_VHT2SS_MCS6, - MGN_VHT2SS_MCS7, - MGN_VHT2SS_MCS8, - MGN_VHT2SS_MCS9, - MGN_VHT3SS_MCS0, - MGN_VHT3SS_MCS1, - MGN_VHT3SS_MCS2, - MGN_VHT3SS_MCS3, - MGN_VHT3SS_MCS4, - MGN_VHT3SS_MCS5, - MGN_VHT3SS_MCS6, - MGN_VHT3SS_MCS7, - MGN_VHT3SS_MCS8, - MGN_VHT3SS_MCS9, - MGN_VHT4SS_MCS0, - MGN_VHT4SS_MCS1, - MGN_VHT4SS_MCS2, - MGN_VHT4SS_MCS3, - MGN_VHT4SS_MCS4, - MGN_VHT4SS_MCS5, - MGN_VHT4SS_MCS6, - MGN_VHT4SS_MCS7, - MGN_VHT4SS_MCS8, - MGN_VHT4SS_MCS9, - MGN_UNKNOWN -}; - - -#define MGN_MCS0_SG 0xc0 -#define MGN_MCS1_SG 0xc1 -#define MGN_MCS2_SG 0xc2 -#define MGN_MCS3_SG 0xc3 -#define MGN_MCS4_SG 0xc4 -#define MGN_MCS5_SG 0xc5 -#define MGN_MCS6_SG 0xc6 -#define MGN_MCS7_SG 0xc7 -#define MGN_MCS8_SG 0xc8 -#define MGN_MCS9_SG 0xc9 -#define MGN_MCS10_SG 0xca -#define MGN_MCS11_SG 0xcb -#define MGN_MCS12_SG 0xcc -#define MGN_MCS13_SG 0xcd -#define MGN_MCS14_SG 0xce -#define MGN_MCS15_SG 0xcf - -#define IS_HT_RATE(_rate) (((_rate) & 0x80) ? _TRUE : _FALSE) -#define IS_CCK_RATE(_rate) (MGN_1M == _rate || _rate == MGN_2M || _rate == MGN_5_5M || _rate == MGN_11M ) -#define IS_OFDM_RATE(_rate) (MGN_6M <= _rate && _rate <= MGN_54M ) - - -/* NOTE: This data is for statistical purposes; not all hardware provides this - * information for frames received. Not setting these will not cause - * any adverse affects. */ -struct ieee80211_rx_stats { - //uint32_t mac_time[2]; - int8_t rssi; - uint8_t signal; - uint8_t noise; - uint8_t received_channel; - uint16_t rate; /* in 100 kbps */ - //uint8_t control; - uint8_t mask; - uint8_t freq; - uint16_t len; -}; - -/* IEEE 802.11 requires that STA supports concurrent reception of at least - * three fragmented frames. This define can be increased to support more - * concurrent frames, but it should be noted that each entry can consume about - * 2 kB of RAM and increasing cache size will slow down frame reassembly. */ -#define IEEE80211_FRAG_CACHE_LEN 4 - -struct ieee80211_frag_entry { - uint32_t first_frag_time; - uint seq; - uint last_frag; - uint qos; //jackson - uint tid; //jackson - struct sk_buff *skb; - uint8_t src_addr[ETH_ALEN]; - uint8_t dst_addr[ETH_ALEN]; -}; - -#ifndef PLATFORM_FREEBSD //Baron BSD has already defined -struct ieee80211_stats { - uint tx_unicast_frames; - uint tx_multicast_frames; - uint tx_fragments; - uint tx_unicast_octets; - uint tx_multicast_octets; - uint tx_deferred_transmissions; - uint tx_single_retry_frames; - uint tx_multiple_retry_frames; - uint tx_retry_limit_exceeded; - uint tx_discards; - uint rx_unicast_frames; - uint rx_multicast_frames; - uint rx_fragments; - uint rx_unicast_octets; - uint rx_multicast_octets; - uint rx_fcs_errors; - uint rx_discards_no_buffer; - uint tx_discards_wrong_sa; - uint rx_discards_undecryptable; - uint rx_message_in_msg_fragments; - uint rx_message_in_bad_msg_fragments; -}; -#endif //PLATFORM_FREEBSD -struct ieee80211_softmac_stats{ - uint rx_ass_ok; - uint rx_ass_err; - uint rx_probe_rq; - uint tx_probe_rs; - uint tx_beacons; - uint rx_auth_rq; - uint rx_auth_rs_ok; - uint rx_auth_rs_err; - uint tx_auth_rq; - uint no_auth_rs; - uint no_ass_rs; - uint tx_ass_rq; - uint rx_ass_rq; - uint tx_probe_rq; - uint reassoc; - uint swtxstop; - uint swtxawake; -}; - -#define SEC_KEY_1 (1<<0) -#define SEC_KEY_2 (1<<1) -#define SEC_KEY_3 (1<<2) -#define SEC_KEY_4 (1<<3) -#define SEC_ACTIVE_KEY (1<<4) -#define SEC_AUTH_MODE (1<<5) -#define SEC_UNICAST_GROUP (1<<6) -#define SEC_LEVEL (1<<7) -#define SEC_ENABLED (1<<8) - -#define SEC_LEVEL_0 0 /* None */ -#define SEC_LEVEL_1 1 /* WEP 40 and 104 bit */ -#define SEC_LEVEL_2 2 /* Level 1 + TKIP */ -#define SEC_LEVEL_2_CKIP 3 /* Level 1 + CKIP */ -#define SEC_LEVEL_3 4 /* Level 2 + CCMP */ - -#define WEP_KEYS 4 -#define WEP_KEY_LEN 13 - - - -#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW) - -struct ieee80211_security { - uint16_t active_key:2, - enabled:1, - auth_mode:2, - auth_algo:4, - unicast_uses_group:1; - uint8_t key_sizes[WEP_KEYS]; - uint8_t keys[WEP_KEYS][WEP_KEY_LEN]; - uint8_t level; - uint16_t flags; -} __attribute__ ((packed)); - -#endif - -#ifdef PLATFORM_WINDOWS - -#pragma pack(1) -struct ieee80211_security { - uint16_t active_key:2, - enabled:1, - auth_mode:2, - auth_algo:4, - unicast_uses_group:1; - uint8_t key_sizes[WEP_KEYS]; - uint8_t keys[WEP_KEYS][WEP_KEY_LEN]; - uint8_t level; - uint16_t flags; -} ; -#pragma pack() - -#endif - -/* - - 802.11 data frame from AP - - ,-------------------------------------------------------------------. -Bytes | 2 | 2 | 6 | 6 | 6 | 2 | 0..2312 | 4 | - |------|------|---------|---------|---------|------|---------|------| -Desc. | ctrl | dura | DA/RA | TA | SA | Sequ | frame | fcs | - | | tion | (BSSID) | | | ence | data | | - `-------------------------------------------------------------------' - -Total: 28-2340 bytes - -*/ - -struct ieee80211_header_data { - uint16_t frame_ctl; - uint16_t duration_id; - uint8_t addr1[6]; - uint8_t addr2[6]; - uint8_t addr3[6]; - uint16_t seq_ctrl; -}; - -#define BEACON_PROBE_SSID_ID_POSITION 12 - -/* Management Frame Information Element Types */ -#define MFIE_TYPE_SSID 0 -#define MFIE_TYPE_RATES 1 -#define MFIE_TYPE_FH_SET 2 -#define MFIE_TYPE_DS_SET 3 -#define MFIE_TYPE_CF_SET 4 -#define MFIE_TYPE_TIM 5 -#define MFIE_TYPE_IBSS_SET 6 -#define MFIE_TYPE_CHALLENGE 16 -#define MFIE_TYPE_ERP 42 -#define MFIE_TYPE_RSN 48 -#define MFIE_TYPE_RATES_EX 50 -#define MFIE_TYPE_GENERIC 221 - -#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW) - -struct ieee80211_info_element_hdr { - uint8_t id; - uint8_t len; -} __attribute__ ((packed)); - -struct ieee80211_info_element { - uint8_t id; - uint8_t len; - uint8_t data[0]; -} __attribute__ ((packed)); -#endif - -#ifdef PLATFORM_WINDOWS - -#pragma pack(1) -struct ieee80211_info_element_hdr { - uint8_t id; - uint8_t len; -} ; - -struct ieee80211_info_element { - uint8_t id; - uint8_t len; - uint8_t data[0]; -} ; -#pragma pack() - -#endif - - -/* - * These are the data types that can make up management packets - * - uint16_t auth_algorithm; - uint16_t auth_sequence; - uint16_t beacon_interval; - uint16_t capability; - uint8_t current_ap[ETH_ALEN]; - uint16_t listen_interval; - struct { - uint16_t association_id:14, reserved:2; - } __attribute__ ((packed)); - uint32_t time_stamp[2]; - uint16_t reason; - uint16_t status; -*/ - -#define IEEE80211_DEFAULT_TX_ESSID "Penguin" -#define IEEE80211_DEFAULT_BASIC_RATE 10 - - -#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW) - - -struct ieee80211_authentication { - struct ieee80211_header_data header; - uint16_t algorithm; - uint16_t transaction; - uint16_t status; - //struct ieee80211_info_element_hdr info_element; -} __attribute__ ((packed)); - - -struct ieee80211_probe_response { - struct ieee80211_header_data header; - uint32_t time_stamp[2]; - uint16_t beacon_interval; - uint16_t capability; - struct ieee80211_info_element info_element; -} __attribute__ ((packed)); - -struct ieee80211_probe_request { - struct ieee80211_header_data header; - /*struct ieee80211_info_element info_element;*/ -} __attribute__ ((packed)); - -struct ieee80211_assoc_request_frame { - struct rtw_ieee80211_hdr_3addr header; - uint16_t capability; - uint16_t listen_interval; - //uint8_t current_ap[ETH_ALEN]; - struct ieee80211_info_element_hdr info_element; -} __attribute__ ((packed)); - -struct ieee80211_assoc_response_frame { - struct rtw_ieee80211_hdr_3addr header; - uint16_t capability; - uint16_t status; - uint16_t aid; -// struct ieee80211_info_element info_element; /* supported rates */ -} __attribute__ ((packed)); -#endif - - - -#ifdef PLATFORM_WINDOWS - -#pragma pack(1) - -struct ieee80211_authentication { - struct ieee80211_header_data header; - uint16_t algorithm; - uint16_t transaction; - uint16_t status; - //struct ieee80211_info_element_hdr info_element; -} ; - - -struct ieee80211_probe_response { - struct ieee80211_header_data header; - uint32_t time_stamp[2]; - uint16_t beacon_interval; - uint16_t capability; - struct ieee80211_info_element info_element; -} ; - -struct ieee80211_probe_request { - struct ieee80211_header_data header; - /*struct ieee80211_info_element info_element;*/ -} ; - -struct ieee80211_assoc_request_frame { - struct rtw_ieee80211_hdr_3addr header; - uint16_t capability; - uint16_t listen_interval; - //uint8_t current_ap[ETH_ALEN]; - struct ieee80211_info_element_hdr info_element; -} ; - -struct ieee80211_assoc_response_frame { - struct rtw_ieee80211_hdr_3addr header; - uint16_t capability; - uint16_t status; - uint16_t aid; -// struct ieee80211_info_element info_element; /* supported rates */ -}; - -#pragma pack() - -#endif - -/* SWEEP TABLE ENTRIES NUMBER*/ -#define MAX_SWEEP_TAB_ENTRIES 42 -#define MAX_SWEEP_TAB_ENTRIES_PER_PACKET 7 -/* MAX_RATES_LENGTH needs to be 12. The spec says 8, and many APs - * only use 8, and then use extended rates for the remaining supported - * rates. Other APs, however, stick all of their supported rates on the - * main rates information element... */ -#define MAX_RATES_LENGTH ((uint8_t)12) -#define MAX_RATES_EX_LENGTH ((uint8_t)16) -#define MAX_NETWORK_COUNT 128 -#define MAX_CHANNEL_NUMBER 161 -#define IEEE80211_SOFTMAC_SCAN_TIME 400 -//(HZ / 2) -#define IEEE80211_SOFTMAC_ASSOC_RETRY_TIME (HZ * 2) - -#define CRC_LENGTH 4U - -#define MAX_WPA_IE_LEN (256) -#define MAX_WPS_IE_LEN (512) -#define MAX_P2P_IE_LEN (256) -#define MAX_WFD_IE_LEN (128) - -#define NETWORK_EMPTY_ESSID (1<<0) -#define NETWORK_HAS_OFDM (1<<1) -#define NETWORK_HAS_CCK (1<<2) - -#define IEEE80211_DTIM_MBCAST 4 -#define IEEE80211_DTIM_UCAST 2 -#define IEEE80211_DTIM_VALID 1 -#define IEEE80211_DTIM_INVALID 0 - -#define IEEE80211_PS_DISABLED 0 -#define IEEE80211_PS_UNICAST IEEE80211_DTIM_UCAST -#define IEEE80211_PS_MBCAST IEEE80211_DTIM_MBCAST -#define IW_ESSID_MAX_SIZE 32 -#define IW_PASSPHRASE_MAX_SIZE 64 -#if 0 -struct ieee80211_network { - /* These entries are used to identify a unique network */ - uint8_t bssid[ETH_ALEN]; - uint8_t channel; - /* Ensure null-terminated for any debug msgs */ - uint8_t ssid[IW_ESSID_MAX_SIZE + 1]; - uint8_t ssid_len; - uint8_t rssi; //relative signal strength - uint8_t sq; //signal quality - - /* These are network statistics */ - //struct ieee80211_rx_stats stats; - uint16_t capability; - uint16_t aid; - uint8_t rates[MAX_RATES_LENGTH]; - uint8_t rates_len; - uint8_t rates_ex[MAX_RATES_EX_LENGTH]; - uint8_t rates_ex_len; - - uint8_t edca_parmsets[18]; - - uint8_t mode; - uint8_t flags; - uint8_t time_stamp[8]; - uint16_t beacon_interval; - uint16_t listen_interval; - uint16_t atim_window; - uint8_t wpa_ie[MAX_WPA_IE_LEN]; - size_t wpa_ie_len; - uint8_t rsn_ie[MAX_WPA_IE_LEN]; - size_t rsn_ie_len; - uint8_t country[6]; - uint8_t dtim_period; - uint8_t dtim_data; - uint8_t power_constraint; - uint8_t qosinfo; - uint8_t qbssload[5]; - uint8_t network_type; - int join_res; - unsigned long last_scanned; -}; -#endif -/* -join_res: --1: authentication fail --2: association fail -> 0: TID -*/ - -#ifndef PLATFORM_FREEBSD //Baron BSD has already defined - -enum ieee80211_state { - - /* the card is not linked at all */ - IEEE80211_NOLINK = 0, - - /* IEEE80211_ASSOCIATING* are for BSS client mode - * the driver shall not perform RX filtering unless - * the state is LINKED. - * The driver shall just check for the state LINKED and - * defaults to NOLINK for ALL the other states (including - * LINKED_SCANNING) - */ - - /* the association procedure will start (wq scheduling)*/ - IEEE80211_ASSOCIATING, - IEEE80211_ASSOCIATING_RETRY, - - /* the association procedure is sending AUTH request*/ - IEEE80211_ASSOCIATING_AUTHENTICATING, - - /* the association procedure has successfully authentcated - * and is sending association request - */ - IEEE80211_ASSOCIATING_AUTHENTICATED, - - /* the link is ok. the card associated to a BSS or linked - * to a ibss cell or acting as an AP and creating the bss - */ - IEEE80211_LINKED, - - /* same as LINKED, but the driver shall apply RX filter - * rules as we are in NO_LINK mode. As the card is still - * logically linked, but it is doing a syncro site survey - * then it will be back to LINKED state. - */ - IEEE80211_LINKED_SCANNING, - -}; -#endif //PLATFORM_FREEBSD - -#define DEFAULT_MAX_SCAN_AGE (15 * HZ) -#define DEFAULT_FTS 2346 -#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" -#define MAC_ARG(x) ((uint8_t*)(x))[0],((uint8_t*)(x))[1],((uint8_t*)(x))[2],((uint8_t*)(x))[3],((uint8_t*)(x))[4],((uint8_t*)(x))[5] - -#ifdef PLATFORM_FREEBSD //Baron change func to macro -#define is_multicast_mac_addr(Addr) ((((Addr[0]) & 0x01) == 0x01) && ((Addr[0]) != 0xff)) -#define is_broadcast_mac_addr(Addr) ((((Addr[0]) & 0xff) == 0xff) && (((Addr[1]) & 0xff) == 0xff) && \ -(((Addr[2]) & 0xff) == 0xff) && (((Addr[3]) & 0xff) == 0xff) && (((Addr[4]) & 0xff) == 0xff) && \ -(((Addr[5]) & 0xff) == 0xff)) -#else -#if 0 -extern __inline int is_multicast_mac_addr(const uint8_t *addr) -{ - return ((addr[0] != 0xff) && (0x01 & addr[0])); -} - -extern __inline int is_broadcast_mac_addr(const uint8_t *addr) -{ - return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && \ - (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff)); -} -#endif -#endif //PLATFORM_FREEBSD - -#define CFG_IEEE80211_RESERVE_FCS (1<<0) -#define CFG_IEEE80211_COMPUTE_FCS (1<<1) - -#define MAXTID 16 - -#define IEEE_A (1<<0) -#define IEEE_B (1<<1) -#define IEEE_G (1<<2) -#define IEEE_MODE_MASK (IEEE_A|IEEE_B|IEEE_G) - -//Baron move to ieee80211.c -int ieee80211_is_empty_essid(const char *essid, int essid_len); -int ieee80211_get_hdrlen(uint16_t fc); - -#if 0 -/* Action frame categories (IEEE 802.11-2007, 7.3.1.11, Table 7-24) */ -#define WLAN_ACTION_SPECTRUM_MGMT 0 -#define WLAN_ACTION_QOS 1 -#define WLAN_ACTION_DLS 2 -#define WLAN_ACTION_BLOCK_ACK 3 -#define WLAN_ACTION_RADIO_MEASUREMENT 5 -#define WLAN_ACTION_FT 6 -#define WLAN_ACTION_SA_QUERY 8 -#define WLAN_ACTION_WMM 17 -#endif - - -/* Action category code */ -enum rtw_ieee80211_category { - RTW_WLAN_CATEGORY_SPECTRUM_MGMT = 0, - RTW_WLAN_CATEGORY_QOS = 1, - RTW_WLAN_CATEGORY_DLS = 2, - RTW_WLAN_CATEGORY_BACK = 3, - RTW_WLAN_CATEGORY_PUBLIC = 4, //IEEE 802.11 public action frames - RTW_WLAN_CATEGORY_RADIO_MEASUREMENT = 5, - RTW_WLAN_CATEGORY_FT = 6, - RTW_WLAN_CATEGORY_HT = 7, - RTW_WLAN_CATEGORY_SA_QUERY = 8, - RTW_WLAN_CATEGORY_TDLS = 12, - RTW_WLAN_CATEGORY_WMM = 17, - RTW_WLAN_CATEGORY_P2P = 0x7f,//P2P action frames -}; - -/* SPECTRUM_MGMT action code */ -enum rtw_ieee80211_spectrum_mgmt_actioncode { - RTW_WLAN_ACTION_SPCT_MSR_REQ = 0, - RTW_WLAN_ACTION_SPCT_MSR_RPRT = 1, - RTW_WLAN_ACTION_SPCT_TPC_REQ = 2, - RTW_WLAN_ACTION_SPCT_TPC_RPRT = 3, - RTW_WLAN_ACTION_SPCT_CHL_SWITCH = 4, - RTW_WLAN_ACTION_SPCT_EXT_CHL_SWITCH = 5, -}; - -enum _PUBLIC_ACTION{ - ACT_PUBLIC_BSSCOEXIST = 0, // 20/40 BSS Coexistence - ACT_PUBLIC_DSE_ENABLE = 1, - ACT_PUBLIC_DSE_DEENABLE = 2, - ACT_PUBLIC_DSE_REG_LOCATION = 3, - ACT_PUBLIC_EXT_CHL_SWITCH = 4, - ACT_PUBLIC_DSE_MSR_REQ = 5, - ACT_PUBLIC_DSE_MSR_RPRT = 6, - ACT_PUBLIC_MP = 7, // Measurement Pilot - ACT_PUBLIC_DSE_PWR_CONSTRAINT = 8, - ACT_PUBLIC_VENDOR = 9, // for WIFI_DIRECT - ACT_PUBLIC_GAS_INITIAL_REQ = 10, - ACT_PUBLIC_GAS_INITIAL_RSP = 11, - ACT_PUBLIC_GAS_COMEBACK_REQ = 12, - ACT_PUBLIC_GAS_COMEBACK_RSP = 13, - ACT_PUBLIC_TDLS_DISCOVERY_RSP = 14, - ACT_PUBLIC_LOCATION_TRACK = 15, - ACT_PUBLIC_MAX -}; - -#ifdef CONFIG_TDLS -enum TDLS_ACTION_FIELD{ - TDLS_SETUP_REQUEST = 0, - TDLS_SETUP_RESPONSE = 1, - TDLS_SETUP_CONFIRM = 2, - TDLS_TEARDOWN = 3, - TDLS_PEER_TRAFFIC_INDICATION = 4, - TDLS_CHANNEL_SWITCH_REQUEST = 5, - TDLS_CHANNEL_SWITCH_RESPONSE = 6, - TDLS_PEER_PSM_REQUEST = 7, - TDLS_PEER_PSM_RESPONSE = 8, - TDLS_PEER_TRAFFIC_RESPONSE = 9, - TDLS_DISCOVERY_REQUEST = 10, - TDLS_DISCOVERY_RESPONSE = 14, //it's used in public action frame -}; - -#define TUNNELED_PROBE_REQ 15 -#define TUNNELED_PROBE_RSP 16 -#endif //CONFIG_TDLS - -/* BACK action code */ -enum rtw_ieee80211_back_actioncode { - RTW_WLAN_ACTION_ADDBA_REQ = 0, - RTW_WLAN_ACTION_ADDBA_RESP = 1, - RTW_WLAN_ACTION_DELBA = 2, -}; - -/* HT features action code */ -enum rtw_ieee80211_ht_actioncode { - RTW_WLAN_ACTION_NOTIFY_CH_WIDTH = 0, - RTW_WLAN_ACTION_SM_PS = 1, - RTW_WLAN_ACTION_PSPM = 2, - RTW_WLAN_ACTION_PCO_PHASE = 3, - RTW_WLAN_ACTION_MIMO_CSI_MX = 4, - RTW_WLAN_ACTION_MIMO_NONCP_BF = 5, - RTW_WLAN_ACTION_MIMP_CP_BF = 6, - RTW_WLAN_ACTION_ASEL_INDICATES_FB = 7, - RTW_WLAN_ACTION_HI_INFO_EXCHG = 8, -}; - -/* BACK (block-ack) parties */ -enum rtw_ieee80211_back_parties { - RTW_WLAN_BACK_RECIPIENT = 0, - RTW_WLAN_BACK_INITIATOR = 1, - RTW_WLAN_BACK_TIMER = 2, -}; - - -#define OUI_MICROSOFT 0x0050f2 /* Microsoft (also used in Wi-Fi specs) - * 00:50:F2 */ -#ifndef PLATFORM_FREEBSD //Baron BSD has defined -#define WME_OUI_TYPE 2 -#endif //PLATFORM_FREEBSD -#define WME_OUI_SUBTYPE_INFORMATION_ELEMENT 0 -#define WME_OUI_SUBTYPE_PARAMETER_ELEMENT 1 -#define WME_OUI_SUBTYPE_TSPEC_ELEMENT 2 -#define WME_VERSION 1 - -#define WME_ACTION_CODE_SETUP_REQUEST 0 -#define WME_ACTION_CODE_SETUP_RESPONSE 1 -#define WME_ACTION_CODE_TEARDOWN 2 - -#define WME_SETUP_RESPONSE_STATUS_ADMISSION_ACCEPTED 0 -#define WME_SETUP_RESPONSE_STATUS_INVALID_PARAMETERS 1 -#define WME_SETUP_RESPONSE_STATUS_REFUSED 3 - -#define WME_TSPEC_DIRECTION_UPLINK 0 -#define WME_TSPEC_DIRECTION_DOWNLINK 1 -#define WME_TSPEC_DIRECTION_BI_DIRECTIONAL 3 - - -#define OUI_BROADCOM 0x00904c /* Broadcom (Epigram) */ - -#define VENDOR_HT_CAPAB_OUI_TYPE 0x33 /* 00-90-4c:0x33 */ - -uint8_t *rtw_get_ie_ex(uint8_t *in_ie, uint in_len, uint8_t eid, uint8_t *oui, uint8_t oui_len, uint8_t *ie, uint *ielen); -int rtw_ies_remove_ie(uint8_t *ies, uint *ies_len, uint offset, uint8_t eid, uint8_t *oui, uint8_t oui_len); - -int rtw_get_wapi_ie(uint8_t *in_ie,uint in_len,uint8_t *wapi_ie,uint16_t *wapi_len); - -uint8_t rtw_is_wps_ie(uint8_t *ie_ptr, uint *wps_ielen); - -void dump_ies(uint8_t *buf, uint32_t buf_len); -void dump_wps_ie(uint8_t *ie, uint32_t ie_len); - -#ifdef CONFIG_P2P_NEW -uint8_t *rtw_get_p2p_ie(uint8_t *in_ie, uint in_len, uint8_t *p2p_ie, uint *p2p_ielen); -uint8_t *rtw_get_p2p_attr(uint8_t *p2p_ie, uint p2p_ielen, uint8_t target_attr_id ,uint8_t *buf_attr, uint32_t *len_attr); -#endif //CONFIG_P2P -#ifdef CONFIG_P2P -void dump_p2p_ie(uint8_t *ie, uint32_t ie_len); -uint8_t *rtw_get_p2p_attr_content(uint8_t *p2p_ie, uint p2p_ielen, uint8_t target_attr_id ,uint8_t *buf_content, uint *len_content); -uint32_t rtw_set_p2p_attr_content(uint8_t *pbuf, uint8_t attr_id, uint16_t attr_len, uint8_t *pdata_attr); -void rtw_WLAN_BSSID_EX_remove_p2p_attr(WLAN_BSSID_EX *bss_ex, uint8_t attr_id); -#endif - -#ifdef CONFIG_WFD -int rtw_get_wfd_ie(uint8_t *in_ie, int in_len, uint8_t *wfd_ie, uint *wfd_ielen); -int rtw_get_wfd_attr_content(uint8_t *wfd_ie, uint wfd_ielen, uint8_t target_attr_id ,uint8_t *attr_content, uint *attr_contentlen); -#endif // CONFIG_WFD - -//struct registry_priv; -//int rtw_generate_ie(struct registry_priv *pregistrypriv); - -void rtw_get_bcn_info(struct wlan_network *pnetwork); - -void rtw_macaddr_cfg(uint8_t *mac_addr); - -uint16_t rtw_mcs_rate(uint8_t rf_type, uint8_t bw_40MHz, uint8_t short_GI_20, uint8_t short_GI_40, unsigned char * MCS_rate); -#endif /* __IEEE80211_H */ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/if_ether.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/if_ether.h deleted file mode 100644 index 7e06597..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/if_ether.h +++ /dev/null @@ -1,115 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef _LINUX_IF_ETHER_H -#define _LINUX_IF_ETHER_H - -/* - * IEEE 802.3 Ethernet magic constants. The frame sizes omit the preamble - * and FCS/CRC (frame check sequence). - */ - -#define ETH_ALEN 6 /* Octets in one ethernet addr */ -#define ETH_HLEN 14 /* Total octets in header. */ -#define ETH_ZLEN 60 /* Min. octets in frame sans FCS */ -#define ETH_DATA_LEN 1500 /* Max. octets in payload */ -#define ETH_FRAME_LEN 1514 /* Max. octets in frame sans FCS */ - -/* - * These are the defined Ethernet Protocol ID's. - */ - -#define ETH_P_LOOP 0x0060 /* Ethernet Loopback packet */ -#define ETH_P_PUP 0x0200 /* Xerox PUP packet */ -#define ETH_P_PUPAT 0x0201 /* Xerox PUP Addr Trans packet */ -#define ETH_P_IP 0x0800 /* Internet Protocol packet */ -#define ETH_P_X25 0x0805 /* CCITT X.25 */ -#define ETH_P_ARP 0x0806 /* Address Resolution packet */ -#define ETH_P_BPQ 0x08FF /* G8BPQ AX.25 Ethernet Packet [ NOT AN OFFICIALLY REGISTERED ID ] */ -#define ETH_P_IEEEPUP 0x0a00 /* Xerox IEEE802.3 PUP packet */ -#define ETH_P_IEEEPUPAT 0x0a01 /* Xerox IEEE802.3 PUP Addr Trans packet */ -#define ETH_P_DEC 0x6000 /* DEC Assigned proto */ -#define ETH_P_DNA_DL 0x6001 /* DEC DNA Dump/Load */ -#define ETH_P_DNA_RC 0x6002 /* DEC DNA Remote Console */ -#define ETH_P_DNA_RT 0x6003 /* DEC DNA Routing */ -#define ETH_P_LAT 0x6004 /* DEC LAT */ -#define ETH_P_DIAG 0x6005 /* DEC Diagnostics */ -#define ETH_P_CUST 0x6006 /* DEC Customer use */ -#define ETH_P_SCA 0x6007 /* DEC Systems Comms Arch */ -#define ETH_P_RARP 0x8035 /* Reverse Addr Res packet */ -#define ETH_P_ATALK 0x809B /* Appletalk DDP */ -#define ETH_P_AARP 0x80F3 /* Appletalk AARP */ -#define ETH_P_8021Q 0x8100 /* 802.1Q VLAN Extended Header */ -#define ETH_P_IPX 0x8137 /* IPX over DIX */ -#define ETH_P_IPV6 0x86DD /* IPv6 over bluebook */ -#define ETH_P_PPP_DISC 0x8863 /* PPPoE discovery messages */ -#define ETH_P_PPP_SES 0x8864 /* PPPoE session messages */ -#define ETH_P_ATMMPOA 0x884c /* MultiProtocol Over ATM */ -#define ETH_P_ATMFATE 0x8884 /* Frame-based ATM Transport - * over Ethernet - */ - -/* - * Non DIX types. Won't clash for 1500 types. - */ - -#define ETH_P_802_3 0x0001 /* Dummy type for 802.3 frames */ -#define ETH_P_AX25 0x0002 /* Dummy protocol id for AX.25 */ -#define ETH_P_ALL 0x0003 /* Every packet (be careful!!!) */ -#define ETH_P_802_2 0x0004 /* 802.2 frames */ -#define ETH_P_SNAP 0x0005 /* Internal only */ -#define ETH_P_DDCMP 0x0006 /* DEC DDCMP: Internal only */ -#define ETH_P_WAN_PPP 0x0007 /* Dummy type for WAN PPP frames*/ -#define ETH_P_PPP_MP 0x0008 /* Dummy type for PPP MP frames */ -#define ETH_P_LOCALTALK 0x0009 /* Localtalk pseudo type */ -#define ETH_P_PPPTALK 0x0010 /* Dummy type for Atalk over PPP*/ -#define ETH_P_TR_802_2 0x0011 /* 802.2 frames */ -#define ETH_P_MOBITEX 0x0015 /* Mobitex (kaz@cafe.net) */ -#define ETH_P_CONTROL 0x0016 /* Card specific control frames */ -#define ETH_P_IRDA 0x0017 /* Linux-IrDA */ -#define ETH_P_ECONET 0x0018 /* Acorn Econet */ - -/* - * This is an Ethernet frame header. - */ -//CONFIG_MEMORY_ACCESS_ALIGNED for 4byte aligned,ethdhr size is 16,leading error in wlanhdr_to_ethdr -RTW_PACK_STRUCT_BEGIN -struct ethhdr -{ - unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ - unsigned char h_source[ETH_ALEN]; /* source ether addr */ - unsigned short h_proto; /* packet type ID field */ -} RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END - -struct _vlan { - unsigned short h_vlan_TCI; // Encapsulates priority and VLAN ID - unsigned short h_vlan_encapsulated_proto; -}; - - - -#define get_vlan_id(pvlan) ((_htons((unsigned short )pvlan->h_vlan_TCI)) & 0xfff) -#define get_vlan_priority(pvlan) ((_htons((unsigned short )pvlan->h_vlan_TCI))>>13) -#define get_vlan_encap_proto(pvlan) (_htons((unsigned short )pvlan->h_vlan_encapsulated_proto)) - - -#endif /* _LINUX_IF_ETHER_H */ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/ip.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/ip.h deleted file mode 100644 index bc542ce..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/ip.h +++ /dev/null @@ -1,142 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _LINUX_IP_H -#define _LINUX_IP_H -#include - -/* SOL_IP socket options */ -#ifndef IPTOS_TOS_MASK -#define IPTOS_TOS_MASK 0x1E -#define IPTOS_TOS(tos) ((tos)&IPTOS_TOS_MASK) -#define IPTOS_LOWDELAY 0x10 -#define IPTOS_THROUGHPUT 0x08 -#define IPTOS_RELIABILITY 0x04 -#define IPTOS_MINCOST 0x02 - -#define IPTOS_PREC_MASK 0xE0 -#define IPTOS_PREC(tos) ((tos)&IPTOS_PREC_MASK) -#define IPTOS_PREC_NETCONTROL 0xe0 -#define IPTOS_PREC_INTERNETCONTROL 0xc0 -#define IPTOS_PREC_CRITIC_ECP 0xa0 -#define IPTOS_PREC_FLASHOVERRIDE 0x80 -#define IPTOS_PREC_FLASH 0x60 -#define IPTOS_PREC_IMMEDIATE 0x40 -#define IPTOS_PREC_PRIORITY 0x20 -#define IPTOS_PREC_ROUTINE 0x00 -#endif - -/* IP options */ -#define IPOPT_COPY 0x80 -#define IPOPT_CLASS_MASK 0x60 -#define IPOPT_NUMBER_MASK 0x1f - -#define IPOPT_COPIED(o) ((o)&IPOPT_COPY) -#define IPOPT_CLASS(o) ((o)&IPOPT_CLASS_MASK) -#define IPOPT_NUMBER(o) ((o)&IPOPT_NUMBER_MASK) - -#define IPOPT_CONTROL 0x00 -#define IPOPT_RESERVED1 0x20 -#define IPOPT_MEASUREMENT 0x40 -#define IPOPT_RESERVED2 0x60 - -#define IPOPT_END (0 |IPOPT_CONTROL) -#define IPOPT_NOOP (1 |IPOPT_CONTROL) -#define IPOPT_SEC (2 |IPOPT_CONTROL|IPOPT_COPY) -#define IPOPT_LSRR (3 |IPOPT_CONTROL|IPOPT_COPY) -#define IPOPT_TIMESTAMP (4 |IPOPT_MEASUREMENT) -#define IPOPT_RR (7 |IPOPT_CONTROL) -#define IPOPT_SID (8 |IPOPT_CONTROL|IPOPT_COPY) -#define IPOPT_SSRR (9 |IPOPT_CONTROL|IPOPT_COPY) -#define IPOPT_RA (20|IPOPT_CONTROL|IPOPT_COPY) - -#define IPVERSION 4 -#define MAXTTL 255 -#define IPDEFTTL 64 - -/* struct timestamp, struct route and MAX_ROUTES are removed. - - REASONS: it is clear that nobody used them because: - - MAX_ROUTES value was wrong. - - "struct route" was wrong. - - "struct timestamp" had fatally misaligned bitfields and was completely unusable. - */ - -#define IPOPT_OPTVAL 0 -#define IPOPT_OLEN 1 -#define IPOPT_OFFSET 2 -#define IPOPT_MINOFF 4 -#define MAX_IPOPTLEN 40 -#define IPOPT_NOP IPOPT_NOOP -#define IPOPT_EOL IPOPT_END -#define IPOPT_TS IPOPT_TIMESTAMP - -#define IPOPT_TS_TSONLY 0 /* timestamps only */ -#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ -#define IPOPT_TS_PRESPEC 3 /* specified modules only */ - -#ifdef PLATFORM_LINUX - -struct ip_options { - uint32_t faddr; /* Saved first hop address */ - unsigned char optlen; - unsigned char srr; - unsigned char rr; - unsigned char ts; - unsigned char is_setbyuser:1, /* Set by setsockopt? */ - is_data:1, /* Options in __data, rather than skb */ - is_strictroute:1, /* Strict source route */ - srr_is_hit:1, /* Packet destination addr was our one */ - is_changed:1, /* IP checksum more not valid */ - rr_needaddr:1, /* Need to record addr of outgoing dev */ - ts_needtime:1, /* Need to record timestamp */ - ts_needaddr:1; /* Need to record addr of outgoing dev */ - unsigned char router_alert; - unsigned char __pad1; - unsigned char __pad2; - unsigned char __data[0]; -}; - -#define optlength(opt) (sizeof(struct ip_options) + opt->optlen) -#endif - -struct iphdr { -#if defined(__LITTLE_ENDIAN_BITFIELD) - uint8_t ihl:4, - version:4; -#elif defined (__BIG_ENDIAN_BITFIELD) - uint8_t version:4, - ihl:4; -#else -#error "Please fix " -#endif - uint8_t tos; - uint16_t tot_len; - uint16_t id; - uint16_t frag_off; - uint8_t ttl; - uint8_t protocol; - uint16_t check; - uint32_t saddr; - uint32_t daddr; - /*The options start here. */ -}; - -#endif /* _LINUX_IP_H */ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/lxbus_hal.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/lxbus_hal.h deleted file mode 100644 index 74a161d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/lxbus_hal.h +++ /dev/null @@ -1,24 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __LXBUS_HAL_H__ -#define __LXBUS_HAL_H__ - -#endif //__LXBUS_HAL_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/lxbus_ops.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/lxbus_ops.h deleted file mode 100644 index ba68d5b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/lxbus_ops.h +++ /dev/null @@ -1,80 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __LXBUS_OPS_H__ -#define __LXBUS_OPS_H__ - - -#if defined(CONFIG_RTL8195A) -//extern uint32_t TxbdRxbdInitRtl8195a(PADAPTER Adapter); -//extern uint32_t TxbdRxbdResetRtl8195a(PADAPTER Adapter); - -extern void InitLxDmaRtl8195a(_adapter * Adapter); -extern uint32_t rtl8195a_init_desc_ring(_adapter * padapter); -extern uint32_t rtl8195a_free_desc_ring(_adapter * padapter); -extern void rtl8195a_reset_desc_ring(_adapter * padapter); -extern void EnableDMA8195a(PADAPTER padapter); -extern void EnableInterrupt8195a(PADAPTER padapter); -extern void DisableDMA8195a(PADAPTER padapter); -extern void DisableInterrupt8195a(PADAPTER padapter); -extern int32_t InterruptHandle8195a(PADAPTER Adapter); -extern void lxbus_set_intf_ops(struct _io_ops *pops); -extern void rtl8195a_xmit_tasklet(void *priv); -extern void rtl8195a_recv_tasklet(void *priv); -extern void rtl8195a_prepare_bcn_tasklet(void *priv); -extern void rtl8195a_tx_int_handler(_adapter *padapter); -extern void InitInterrupt8195a(PADAPTER padapter); -extern void UpdateInterruptMask8195a(PADAPTER Adapter, uint32_t *pAddMSRB, uint32_t *pRemoveMSR); - -#ifdef CONFIG_WOWLAN -extern void ClearInterrupt8195a(PADAPTER padapter); -#endif - -extern void ClearWlPmcInterrupt8195a(PADAPTER padapter); -extern BOOLEAN InterruptRecognized8195a(PADAPTER Adapter); -#elif defined(CONFIG_RTL8711B) - -extern uint32_t rtl8711b_init_desc_ring(_adapter * padapter); -extern uint32_t rtl8711b_free_desc_ring(_adapter * padapter); -extern void rtl8711b_reset_desc_ring(_adapter * padapter); -extern void EnableDMA8711b(PADAPTER padapter); -extern void EnableInterrupt8711b(PADAPTER padapter); -extern void DisableDMA8711b(PADAPTER padapter); -extern void DisableInterrupt8711b(PADAPTER padapter); -extern int32_t InterruptHandle8711b(PADAPTER Adapter); -extern void lxbus_set_intf_ops(struct _io_ops *pops); -extern void rtl8711b_xmit_tasklet(void *priv); -extern void rtl8711b_recv_tasklet(void *priv); -extern void rtl8711b_prepare_bcn_tasklet(void *priv); -extern void rtl8711b_tx_int_handler(_adapter *padapter); -extern void InitInterrupt8711b(PADAPTER padapter); -extern void UpdateInterruptMask8711b(PADAPTER Adapter, uint32_t *pAddMSRB, uint32_t *pRemoveMSR); - -#ifdef CONFIG_WOWLAN -extern void ClearInterrupt8711b(PADAPTER padapter); -extern void DisableInterruptButCpwm28711b(PADAPTER padapter); -#endif - -extern void ClearWlPmcInterrupt8711b(PADAPTER padapter); -extern BOOLEAN InterruptRecognized8711b(PADAPTER Adapter); -#endif - - -#endif // !__LXBUS_OPS_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/lxbus_osintf.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/lxbus_osintf.h deleted file mode 100644 index 0c80793..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/lxbus_osintf.h +++ /dev/null @@ -1,29 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __LXBUS_OSINTF_H -#define __LXBUS_OSINTF_H - - -//void rtw_pci_disable_aspm(_adapter *padapter); -//void rtw_pci_enable_aspm(_adapter *padapter); -//void PlatformClearPciPMEStatus(PADAPTER Adapter); - -#endif //__LXBUS_OSINTF_H - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/pack_begin.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/pack_begin.h deleted file mode 100644 index 7f1de7c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/pack_begin.h +++ /dev/null @@ -1,33 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ****************************************************************************** - * - * Define the start point of packed structure - * - ******************************************************************************/ - -#if defined(__IAR_SYSTEMS_ICC__) -#pragma pack(1) -#endif - -#if defined(PLATFORM_WINDOWS) -#pragma pack(push) -#pragma pack(1) -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/pack_end.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/pack_end.h deleted file mode 100644 index e34640c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/pack_end.h +++ /dev/null @@ -1,33 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ****************************************************************************** - * - * Define the end point of packed structure - * - ******************************************************************************/ - -#if defined(__IAR_SYSTEMS_ICC__) -#pragma pack() -#endif - -#if defined(PLATFORM_WINDOWS) -#pragma pack(pop) -#endif - - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_aes.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_aes.h deleted file mode 100644 index 6c9e592..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_aes.h +++ /dev/null @@ -1,53 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ****************************************************************************** - * - * This is ROM code section. - * - ******************************************************************************/ -#ifndef ROM_AES_H -#define ROM_AES_H - -typedef struct -{ - uint32_t erk[64]; /* encryption round keys */ - uint32_t drk[64]; /* decryption round keys */ - int nr; /* number of rounds */ -}aes_context; - - -#define AES_BLOCKSIZE8 8 -#define AES_BLK_SIZE 16 // # octets in an AES block -typedef union _aes_block // AES cipher block -{ - unsigned long x[AES_BLK_SIZE/4]; // access as 8-bit octets or 32-bit words - unsigned char b[AES_BLK_SIZE]; -}aes_block; - - -void AES_WRAP(unsigned char * plain, int plain_len, - unsigned char * iv, int iv_len, - unsigned char * kek, int kek_len, - unsigned char *cipher, unsigned short *cipher_len); - -void AES_UnWRAP(unsigned char * cipher, int cipher_len, - unsigned char * kek, int kek_len, - unsigned char * plain); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_arc4.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_arc4.h deleted file mode 100644 index 0417ab5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_arc4.h +++ /dev/null @@ -1,39 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ****************************************************************************** - * - * This is ROM code section. - * - ******************************************************************************/ -#ifndef ROM_ARC4_H -#define ROM_ARC4_H - -struct arc4context -{ - uint32_t x; - uint32_t y; - uint8_t state[256]; -}; - -uint32_t crc32_get(uint8_t *buf, sint len); -void rt_arc4_init(struct arc4context *parc4ctx, uint8_t * key,uint32_t key_len); -void rt_arc4_crypt( struct arc4context *parc4ctx, uint8_t * dest, uint8_t * src, uint32_t len); - - -#endif //ROM_ARC4_H diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_ieee80211.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_ieee80211.h deleted file mode 100644 index 22a952a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_ieee80211.h +++ /dev/null @@ -1,127 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __ROM_IEEE80211_H -#define __ROM_IEEE80211_H - -extern const uint8_t RTW_WPA_OUI_TYPE[] ; -extern const uint8_t WPA_CIPHER_SUITE_NONE[]; -extern const uint8_t WPA_CIPHER_SUITE_WEP40[]; -extern const uint8_t WPA_CIPHER_SUITE_TKIP[]; -extern const uint8_t WPA_CIPHER_SUITE_CCMP[]; -extern const uint8_t WPA_CIPHER_SUITE_WEP104[]; -extern const uint16_t RSN_VERSION_BSD; -extern const uint8_t RSN_AUTH_KEY_MGMT_UNSPEC_802_1X[]; -extern const uint8_t RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X[]; -extern const uint8_t RSN_CIPHER_SUITE_NONE[]; -extern const uint8_t RSN_CIPHER_SUITE_WEP40[]; -extern const uint8_t RSN_CIPHER_SUITE_TKIP[]; -extern const uint8_t RSN_CIPHER_SUITE_CCMP[]; -extern const uint8_t RSN_CIPHER_SUITE_WEP104[]; - -/* Parsed Information Elements */ -struct rtw_ieee802_11_elems { - uint8_t *ssid; - uint8_t ssid_len; - uint8_t *supp_rates; - uint8_t supp_rates_len; - uint8_t *fh_params; - uint8_t fh_params_len; - uint8_t *ds_params; - uint8_t ds_params_len; - uint8_t *cf_params; - uint8_t cf_params_len; - uint8_t *tim; - uint8_t tim_len; - uint8_t *ibss_params; - uint8_t ibss_params_len; - uint8_t *challenge; - uint8_t challenge_len; - uint8_t *erp_info; - uint8_t erp_info_len; - uint8_t *ext_supp_rates; - uint8_t ext_supp_rates_len; - uint8_t *wpa_ie; - uint8_t wpa_ie_len; - uint8_t *rsn_ie; - uint8_t rsn_ie_len; - uint8_t *wme; - uint8_t wme_len; - uint8_t *wme_tspec; - uint8_t wme_tspec_len; - uint8_t *wps_ie; - uint8_t wps_ie_len; - uint8_t *power_cap; - uint8_t power_cap_len; - uint8_t *supp_channels; - uint8_t supp_channels_len; - uint8_t *mdie; - uint8_t mdie_len; - uint8_t *ftie; - uint8_t ftie_len; - uint8_t *timeout_int; - uint8_t timeout_int_len; - uint8_t *ht_capabilities; - uint8_t ht_capabilities_len; - uint8_t *ht_operation; - uint8_t ht_operation_len; - uint8_t *vendor_ht_cap; - uint8_t vendor_ht_cap_len; -}; - -typedef enum { ParseOK = 0, ParseUnknown = 1, ParseFailed = -1 } ParseRes; - -ParseRes rtw_ieee802_11_parse_elems(uint8_t *start, uint len, - struct rtw_ieee802_11_elems *elems, - int show_errors); - -uint8_t *rtw_set_fixed_ie(unsigned char *pbuf, unsigned int len, unsigned char *source, unsigned int *frlen); -uint8_t *rtw_set_ie(uint8_t *pbuf, sint index, uint len, uint8_t *source, uint *frlen); -uint8_t *rtw_get_ie(uint8_t*pbuf, sint index, uint32_t *len, sint limit); - -void rtw_set_supported_rate(uint8_t* SupportedRates, uint mode) ; - -unsigned char *rtw_get_wpa_ie(unsigned char *pie, uint32_t *wpa_ie_len, int limit); -unsigned char *rtw_get_wpa2_ie(unsigned char *pie, uint32_t *rsn_ie_len, int limit); -int rtw_get_wpa_cipher_suite(uint8_t *s); -int rtw_get_wpa2_cipher_suite(uint8_t *s); - -int rtw_parse_wpa_ie(uint8_t* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x); -int rtw_parse_wpa2_ie(uint8_t* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x); - -int rtw_get_sec_ie(uint8_t *in_ie,uint in_len,uint8_t *rsn_ie,uint16_t *rsn_len,uint8_t *wpa_ie,uint16_t *wpa_len); - -uint8_t *rtw_get_wps_ie(uint8_t *in_ie, uint in_len, uint8_t *wps_ie, uint *wps_ielen); -uint8_t *rtw_get_wps_attr(uint8_t *wps_ie, uint wps_ielen, uint16_t target_attr_id ,uint8_t *buf_attr, uint32_t *len_attr); -uint8_t *rtw_get_wps_attr_content(uint8_t *wps_ie, uint wps_ielen, uint16_t target_attr_id ,uint8_t *buf_content, uint *len_content); - -uint rtw_get_rateset_len(uint8_t *rateset); - -int rtw_get_bit_value_from_ieee_value(uint8_t val); - -uint rtw_is_cckrates_included(uint8_t *rate); - -uint rtw_is_cckratesonly_included(uint8_t *rate); - -int rtw_check_network_type(unsigned char *rate, int ratelen, int channel); - -uint8_t key_2char2num(uint8_t hch, uint8_t lch); - -#endif /* __ROM_IEEE80211_H */ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_md5.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_md5.h deleted file mode 100644 index 5ec3d4b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_md5.h +++ /dev/null @@ -1,45 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ****************************************************************************** - * - * This is ROM code section. - * - ******************************************************************************/ - -#ifndef ROM_MD5_H -#define ROM_MD5_H - -#if PSK_SUPPORT_TKIP - -/* MD5 context. */ -typedef struct { - uint32_t state[4]; /* state (ABCD) */ - uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */ - uint8_t buffer[64]; /* input buffer */ -} md5_ctx; - -void rt_md5_init(md5_ctx *context); -void rt_md5_append(md5_ctx *context, uint8_t *input, uint32_t inputLen); -void rt_md5_final(uint8_t digest[16], md5_ctx *context); -void rt_md5_hmac(unsigned char *text, int text_len, unsigned char *key, - int key_len, void * digest); - - -#endif //#if PSK_SUPPORT_TKIP -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rc4.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rc4.h deleted file mode 100644 index 5c40252..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rc4.h +++ /dev/null @@ -1,89 +0,0 @@ -/* crypto/rc4/rc4.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_RC4_H -#define HEADER_RC4_H - -#ifdef OPENSSL_NO_RC4 -#error RC4 is disabled. -#endif - -//#include /* RC4_INT */ -#define RC4_INT unsigned int - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct rc4_key_st - { - RC4_INT x,y; - RC4_INT data[256]; - } RC4_KEY; - - -//const char *RC4_options(void); -void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); -void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata, - unsigned char *outdata); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rtw_message.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rtw_message.h deleted file mode 100644 index 81115ae..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rtw_message.h +++ /dev/null @@ -1,48 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _ROM_RTW_MESSAGE_ -#define _ROM_RTW_MESSAGE_ - -#include - -typedef enum { -#define ROM_E_RTW_MSGPOOL(name,str) ROM_E_RTW_MSGP_##name, -#include "rom_rtw_message_e.h" - ROM_E_RTW_MSGP_MAX -} rom_e_rtw_msgp_t; - -#if ROM_E_RTW_MSG -extern const char *rom_e_rtw_msgp_str_[]; -#define rom_e_rtw_msg_printf(name, fmt, args...) printf((char*)rom_e_rtw_msgp_str_[ROM_E_RTW_MSGP_##name], ## args) -#define rom_e_rtw_msg_871X_LEVEL(name, level, fmt, args...) \ - do {\ - printf("\n\r");\ - printf((char*)rom_e_rtw_msgp_str_[ROM_E_RTW_MSGP_##name], ## args);\ - }while(0) -#else -#define rom_e_rtw_msg_printf(name, fmt, args...) printf(fmt, ## args) -#define rom_e_rtw_msg_871X_LEVEL(name, level, fmt, args...) \ - do {\ - printf("\n\r");\ - printf(DRIVER_PREFIX ##fmt, ## args);\ - }while(0) -#endif //ROM_E_RTW_MSG - -#endif //_ROM_RTW_MESSAGE_ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rtw_message_e.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rtw_message_e.h deleted file mode 100644 index 8740be2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rtw_message_e.h +++ /dev/null @@ -1,174 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -// Debug message -// DBG_PWR_INDEX -ROM_E_RTW_MSGPOOL(PWR_INDEX_1, "BandWidth = %d, Rate = %d, Channel = %d\n\r") -ROM_E_RTW_MSGPOOL(PWR_INDEX_2, "Base = %d, DiffByRate = %d, limit = %d, DiffByTrack = %d, Tx Power = %d\n\n\r") -// DBG_RX_INFO -ROM_E_RTW_MSGPOOL(RX_INFO_1, "============ Rx Info dump ===================\n") -ROM_E_RTW_MSGPOOL(RX_INFO_2, "bLinked = %d, RSSI_Min = %d(%%), CurrentIGI = 0x%x\n") -ROM_E_RTW_MSGPOOL(RX_INFO_3, "Cnt_Cck_fail = %d, Cnt_Ofdm_fail = %d, Total False Alarm = %d\n") -ROM_E_RTW_MSGPOOL(RX_INFO_4, "RxRate = 0x%x, RSSI_A = %d(%%), RSSI_B = %d(%%)\n") -// DBG_TX_RATE -ROM_E_RTW_MSGPOOL(TX_RATE_1, "Rate: 0x%x\n\r") -ROM_E_RTW_MSGPOOL(TX_RATE_2, "%s(): mac_id=%d raid=0x%x bw=%d mask=0x%x init_rate=0x%x\n") -// DBG_DM_RA -ROM_E_RTW_MSGPOOL(DM_RA_1, "==> ReadRateMask = 0x%x RAMASK[%d] = 0x%x\n") -ROM_E_RTW_MSGPOOL(DM_RA_2, "==> TMP_rate = %x highest_rate = 0x%02X, lowest_rate = 0x%02X\n") -ROM_E_RTW_MSGPOOL(DM_RA_3, "==> MacID = %d rateid = 0x%x sgi = %d bw_idx = %d\n\r") -ROM_E_RTW_MSGPOOL(DM_RA_4, "%s(): mac_id=%d raid=0x%x bw=%d mask=0x%x\r\n") -// DBG_DM_DIG -ROM_E_RTW_MSGPOOL(DM_DIG_1, "CurrentIGI(0x%02x)\n\n") -// DBG_PWR_TRACKING -ROM_E_RTW_MSGPOOL(PWR_TRACKING_1, "Thermal = 0x%02X\r\n") -ROM_E_RTW_MSGPOOL(PWR_TRACKING_2, "delta = %d, AVG Thermal = 0x%02X, EFUSE = 0x%02X, PackageType = 0x%02X\r\n") -ROM_E_RTW_MSGPOOL(PWR_TRACKING_3, "Channel = %d, CCK PwrBase = 0x%02X, HT40M PwrBase = 0x%02X, OFDMdiff = %d, 20Mdiff = %d \n\r") -ROM_E_RTW_MSGPOOL(PWR_TRACKING_4, "Remnant_CCKSwingIdx = %d\n\r") -ROM_E_RTW_MSGPOOL(PWR_TRACKING_5, "Remnant_OFDMSwingIdx = %d\n\r") -ROM_E_RTW_MSGPOOL(PWR_TRACKING_6, "CCK2~11: 0x86c = 0x%08X\r\n") -ROM_E_RTW_MSGPOOL(PWR_TRACKING_7, "MCS7~4 : 0xe14 = 0x%08X\r\n") -// DBG_RF_IQK -ROM_E_RTW_MSGPOOL(RF_IQK_1, "Path A Tx IQK Success!\n") -ROM_E_RTW_MSGPOOL(RF_IQK_2, "Path A Rx IQK Success!\n") -ROM_E_RTW_MSGPOOL(RF_IQK_3, "Path A IQK failed!\n") -ROM_E_RTW_MSGPOOL(RF_IQK_4, "IQK finished\n") -ROM_E_RTW_MSGPOOL(RF_IQK_5, "LCK finished\n") -// DBG_DM_ADAPTIVITY -ROM_E_RTW_MSGPOOL(DM_ADAPTIVITY_1, "IGI_Base=0x%x, TH_L2H_ini = %d, TH_EDCCA_HL_diff = %d\n") -ROM_E_RTW_MSGPOOL(DM_ADAPTIVITY_2, "DynamicLinkAdaptivity = %d, Adaptivity_enable = %d\n") -ROM_E_RTW_MSGPOOL(DM_ADAPTIVITY_3, "IGI=0x%x, TH_L2H_dmc = 0x%x, TH_H2L_dmc = 0x%x\n\n") - -// freertos_ioctl.c -// mac_reg_dump, bb_reg_dump, rf_reg_dump -ROM_E_RTW_MSGPOOL(MAC_REG_DUMP_1, "\n======= MAC REG =======\n") -ROM_E_RTW_MSGPOOL(BB_REG_DUMP_1, "\n======= BB REG =======\n") -ROM_E_RTW_MSGPOOL(RF_REG_DUMP_1, "\n======= RF REG =======\n") -ROM_E_RTW_MSGPOOL(RF_REG_DUMP_2, "\nRF_Path(%x)\n") -ROM_E_RTW_MSGPOOL(REG_DUMP_1, "0x%02x ") -ROM_E_RTW_MSGPOOL(REG_DUMP_2, " 0x%08x ") -ROM_E_RTW_MSGPOOL(REG_DUMP_3, "\n") -// 0x70 read reg -ROM_E_RTW_MSGPOOL(READ_REG_1, "rtw_read8(0x%x)=0x%02x\n") -ROM_E_RTW_MSGPOOL(READ_REG_2, "rtw_read16(0x%x)=0x%04x\n") -ROM_E_RTW_MSGPOOL(READ_REG_3, "rtw_read32(0x%x)=0x%08x\n") -// 0x71 write reg -ROM_E_RTW_MSGPOOL(WRITE_REG_1, "rtw_write8(0x%x)=0x%02x\n") -ROM_E_RTW_MSGPOOL(WRITE_REG_2, "rtw_write16(0x%x)=0x%04x\n") -ROM_E_RTW_MSGPOOL(WRITE_REG_3, "rtw_write32(0x%x)=0x%08x\n") -// 0x72 read bb -ROM_E_RTW_MSGPOOL(READ_BB_1, "read_bbreg(0x%x)=0x%x\n") -// 0x73 write bb -ROM_E_RTW_MSGPOOL(WRITE_BB_1, "write_bbreg(0x%x)=0x%x\n") -// 0x74 read rf -ROM_E_RTW_MSGPOOL(READ_RF_1, "read RF_reg path(0x%02x),offset(0x%x),value(0x%08x)\n") -// 0x75 write rf -ROM_E_RTW_MSGPOOL(WRITE_RF_1, "write RF_reg path(0x%02x),offset(0x%x),value(0x%08x)\n") -// 0x17 fix channel -ROM_E_RTW_MSGPOOL(FIX_CHANNEL_1, "=>Fixed channel to %d\n") -ROM_E_RTW_MSGPOOL(FIX_CHANNEL_2, "Invalid channel number(%d)\n") -// 0x22 enable / disable power saving mode -ROM_E_RTW_MSGPOOL(PWR_SAVE_MODE_1, "wlan power saving mode = %s\n") -// 0xaa fix rate -ROM_E_RTW_MSGPOOL(FIX_RATE_1, "chang data rate to :0x%02x\n") -// 0xc0 get odm dbg flag -ROM_E_RTW_MSGPOOL(GET_ODM_DBG_FLAG_1, "get odm dbg flag : 0x%08x\n") -// 0xc1 set odm dbg flag -ROM_E_RTW_MSGPOOL(SET_ODM_DBG_FLAG_1, "set odm dbg flag : 0x%08x\n") -// 0xcc open power index debug message (power by rate, power limit, power tracking) -ROM_E_RTW_MSGPOOL(DUMP_PWR_IDX_1, "Fixed rate = %d\n") -// 0xdd dump info -ROM_E_RTW_MSGPOOL(DUMP_INFO_1, "Tx power:\n") -ROM_E_RTW_MSGPOOL(DUMP_INFO_2, "CCK 1(0xe08)= 0x%x\n") -ROM_E_RTW_MSGPOOL(DUMP_INFO_3, "CCK 11~2(0x86c)= 0x%x\n") -ROM_E_RTW_MSGPOOL(DUMP_INFO_4, "OFDM 18~6(0xe00)= 0x%x\n") -ROM_E_RTW_MSGPOOL(DUMP_INFO_5, "OFDM 54~24(0xe04)= 0x%x\n") -ROM_E_RTW_MSGPOOL(DUMP_INFO_6, "MCS 3~0(0xe10)= 0x%x\n") -ROM_E_RTW_MSGPOOL(DUMP_INFO_7, "MCS 7~4(0xe14)= 0x%x\n") -ROM_E_RTW_MSGPOOL(DUMP_INFO_8, "Country code: 0x%x\n") -// 0xee turn on/off dynamic funcs -ROM_E_RTW_MSGPOOL(DM_FUNC_FLAG_1, " === DMFlag(0x%08x) === \n") -ROM_E_RTW_MSGPOOL(DM_FUNC_FLAG_2, "extra_arg = 0 - disable all dynamic func\n") -ROM_E_RTW_MSGPOOL(DM_FUNC_FLAG_3, "extra_arg = 1 - enable all dynamic func\n") -ROM_E_RTW_MSGPOOL(DM_FUNC_FLAG_4, "extra_arg = 2 - disable DIG\n") -ROM_E_RTW_MSGPOOL(DM_FUNC_FLAG_5, "extra_arg = 3 - enable DIG\n") -ROM_E_RTW_MSGPOOL(DM_FUNC_FLAG_6, "extra_arg = 4 - disable tx power tracking\n") -ROM_E_RTW_MSGPOOL(DM_FUNC_FLAG_7, "extra_arg = 5 - enable tx power tracking\n") -ROM_E_RTW_MSGPOOL(DM_FUNC_FLAG_8, "extra_arg = 6 - disable adaptivity\n") -ROM_E_RTW_MSGPOOL(DM_FUNC_FLAG_9, "extra_arg = 7 - enable adaptivity\n") - -// lxbus_ops.c -ROM_E_RTW_MSGPOOL(RX_MPDU_1, "Drop packet! crc_err = %d, icv_err = %d, rx_pkt_len = %d, skb_pkt_len = %d\n") - -// wlan driver DBG_871X_LEVEL -#define ROM_E_RTW_MSGPOOL_871X(name,str) ROM_E_RTW_MSGPOOL(name,DRIVER_PREFIX str) -// rtw_ap.c -ROM_E_RTW_MSGPOOL_871X(AP_TIMEOUT_CHK_1, "Asoc expire "MAC_FMT"\n") -// rtw_intfs.c -ROM_E_RTW_MSGPOOL_871X(INIT_DRV_SW_1, "The driver is for MP\n") -// rtw_ioctl_set.c -ROM_E_RTW_MSGPOOL_871X(SET_BSSID_1, "set BSSID: %02x:%02x:%02x:%02x:%02x:%02x\n") -ROM_E_RTW_MSGPOOL_871X(SET_SSID_1, "set ssid [%s] \n") -// rtw_mlme_ext.c -ROM_E_RTW_MSGPOOL_871X(ON_BEACON_1, "ap has changed, disconnect now\n ") -ROM_E_RTW_MSGPOOL_871X(ON_AUTH_1, "+OnAuth: "MAC_FMT"\n") -ROM_E_RTW_MSGPOOL_871X(ON_AUTH_2, " Exceed the upper limit(%d) of supported clients...\n") -ROM_E_RTW_MSGPOOL_871X(ON_AUTH_CLIENT_1, "auth success, start assoc\n") -ROM_E_RTW_MSGPOOL_871X(ON_ASSOC_REQ_1, "+OnAssocReq\n") -ROM_E_RTW_MSGPOOL_871X(ON_ASSOC_RSP_1, "association success(res=%d)\n") -ROM_E_RTW_MSGPOOL_871X(ON_DE_AUTH_1, "ap recv deauth reason code(%d) sta:"MAC_FMT"\n") -ROM_E_RTW_MSGPOOL_871X(ON_DE_AUTH_2, "sta recv deauth reason code(%d) sta:"MAC_FMT"\n") -ROM_E_RTW_MSGPOOL_871X(ON_DISASSOC_1, "ap recv disassoc reason code(%d) sta:"MAC_FMT"\n") -ROM_E_RTW_MSGPOOL_871X(ON_DISASSOC_2, "sta recv disassoc reason code(%d) sta:"MAC_FMT"\n") -ROM_E_RTW_MSGPOOL_871X(ISSUE_BEACON_1, "beacon frame too large\n") -ROM_E_RTW_MSGPOOL_871X(ISSUE_PROBERSP_1, "probersp frame too large\n") -ROM_E_RTW_MSGPOOL_871X(ISSUE_PROBEREQ_1, "probereq frame too large\n") -ROM_E_RTW_MSGPOOL_871X(ISSUE_AUTH_1, "auth frame too large\n") -ROM_E_RTW_MSGPOOL_871X(ISSUE_ASSOCRSP_1, "assocrsp frame too large\n") -ROM_E_RTW_MSGPOOL_871X(ISSUE_ASSOCREQ_1, "assocreq frame too large\n") -ROM_E_RTW_MSGPOOL_871X(ISSUE_NULLDATA_1, "nulldata frame too large\n") -ROM_E_RTW_MSGPOOL_871X(ISSUE_QOS_NULLDATA_1, "qos nulldata frame too large\n") -ROM_E_RTW_MSGPOOL_871X(ISSUE_DEAUTH_1, "deauth frame too large\n") -ROM_E_RTW_MSGPOOL_871X(ISSUE_ACTION_BA_1, "action BA frame too large\n") -ROM_E_RTW_MSGPOOL_871X(ISSUE_BSS_COEXIST_1, "action BSSCoexist frame too large\n") -ROM_E_RTW_MSGPOOL_871X(START_CLNT_AUTH_1, "start auth to %02x:%02x:%02x:%02x:%02x:%02x\n") -ROM_E_RTW_MSGPOOL_871X(LINKED_STATUS_CHK_1, "no beacon for a long time, disconnect or roaming\n") -ROM_E_RTW_MSGPOOL_871X(SETKEY_HDL_1, "set group key to hw: alg:%d(WEP40-1 WEP104-5 TKIP-2 AES-4) keyid:%d\n") -ROM_E_RTW_MSGPOOL_871X(SET_STAKEY_HDL_1, "set pairwise key to hw: alg:%d(WEP40-1 WEP104-5 TKIP-2 AES-4)\n") -ROM_E_RTW_MSGPOOL_871X(SET_STAKEY_HDL_2, "set pairwise key to hw: alg:%d(WEP40-1 WEP104-5 TKIP-2 AES-4) for %x:%x:%x:%x:%x:%x\n") -// rtw_p2p.c -ROM_E_RTW_MSGPOOL_871X(P2P_BUILD_MGNT_FRAME_1, "p2p mgnt frame too large\n") -// rtw_psk.c -ROM_E_RTW_MSGPOOL_871X(SEND_EAPOL_1, "ap mode 4-1\n") -ROM_E_RTW_MSGPOOL_871X(SEND_EAPOL_2, "ap mode 4-3\n") -ROM_E_RTW_MSGPOOL_871X(SEND_EAPOL_3, "ap mode 2-1 to WPA_STA(%d)\n") -ROM_E_RTW_MSGPOOL_871X(EAPOL_KEY_RECVD_1, "ap mode 4-2\n") -ROM_E_RTW_MSGPOOL_871X(EAPOL_KEY_RECVD_2, "ap mode 4-4\n") -ROM_E_RTW_MSGPOOL_871X(EAPOL_KEY_RECVD_3, "ap mode 2-2 from WPA_STA(%d)\n") -// rtw_recv.c -ROM_E_RTW_MSGPOOL_871X(FREE_RECVFRAME_1, "%s free_recvframe_cnt:%d > %d refree happen !!!!\n") -// hal_com.c -ROM_E_RTW_MSGPOOL_871X(VAR_PORT_SWITCH_1, "port switch - port0("ADPT_FMT"), port1("ADPT_FMT")\n") -ROM_E_RTW_MSGPOOL_871X(VAR_PORT_SWITCH_2, "port switch - port0("ADPT_FMT"), port1("ADPT_FMT")\n") -// osdep_service.c -ROM_E_RTW_MSGPOOL_871X(DOWN_SEMA_1, "%s(%p) failed, retry\n") - - -#undef ROM_E_RTW_MSGPOOL -#undef ROM_E_RTW_MSGPOOL_871X diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rtw_psk.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rtw_psk.h deleted file mode 100644 index 14787ce..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rtw_psk.h +++ /dev/null @@ -1,44 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ****************************************************************************** - * - * This is ROM code section. - * - ******************************************************************************/ -#ifndef __ROM_RTW_PSK_H_ -#define __ROM_RTW_PSK_H_ - -int rom_psk_PasswordHash ( - unsigned char *password, - int passwordlength, - unsigned char *ssid, - int ssidlength, - unsigned char *output); - -void rom_psk_CalcPTK( unsigned char *addr1, unsigned char *addr2, - unsigned char *nonce1, unsigned char *nonce2, - unsigned char *keyin, int keyinlen, - unsigned char *keyout, int keyoutlen); - -void rom_psk_CalcGTK(unsigned char *addr, unsigned char *nonce, - unsigned char *keyin, int keyinlen, - unsigned char *keyout, int keyoutlen); - -#endif //__ROM_RTW_PSK_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rtw_security.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rtw_security.h deleted file mode 100644 index 54249fc..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_rtw_security.h +++ /dev/null @@ -1,104 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ****************************************************************************** - * - * This is ROM code section. - * - ******************************************************************************/ -#ifndef __ROM_RTW_SECURITY_H_ -#define __ROM_RTW_SECURITY_H_ - -struct mic_data -{ - uint32_t K0, K1; // Key - uint32_t L, R; // Current state - uint32_t M; // Message accumulator (single word) - uint32_t nBytesInM; // # bytes in M -}; - -union u_crc -{ - unsigned char ch[4]; - int i; -}; - -//=============================== -// WEP related -//=============================== -void wep_80211_encrypt( - uint8_t *pframe, uint32_t wlan_hdr_len, \ - uint32_t iv_len, uint32_t payload_len,\ - uint8_t* key, uint32_t key_len); - -uint8_t wep_80211_decrypt( - uint8_t *pframe, uint32_t wlan_hdr_len, - uint32_t iv_len, uint32_t payload_len, - uint8_t* key, uint32_t key_len, - union u_crc *pcrc\ - ); - -//=============================== -// TKIP related -//=============================== -void tkip_80211_encrypt( - uint8_t *pframe, uint32_t wlan_hdr_len, \ - uint32_t iv_len, uint32_t payload_len,\ - uint8_t* key, uint32_t key_len,\ - uint8_t* ta); - -uint8_t tkip_80211_decrypt( - uint8_t *pframe, uint32_t wlan_hdr_len, \ - uint32_t iv_len, uint32_t payload_len,\ - uint8_t* key, uint32_t key_len,\ - uint8_t* ta, union u_crc *pcrc); - -void tkip_micappendbyte(struct mic_data *pmicdata, uint8_t b ); -void rtw_secmicsetkey(struct mic_data *pmicdata, uint8_t * key); -void rtw_secmicappend(struct mic_data *pmicdata, uint8_t * src, uint32_t nbytes ); -void rtw_secgetmic(struct mic_data *pmicdata, uint8_t * dst ); -void rtw_seccalctkipmic(uint8_t * key,uint8_t *header,uint8_t *data,uint32_t data_len,uint8_t *mic_code, uint8_t pri); -void tkip_phase1(uint16_t *p1k,const uint8_t *tk,const uint8_t *ta,uint32_t iv32); -void tkip_phase2(uint8_t *rc4key,const uint8_t *tk,const uint16_t *p1k,uint16_t iv16); - - -//=============================== -// AES related -//=============================== -void aes1_encrypt(uint8_t *key, uint8_t *data, uint8_t *ciphertext); -void aesccmp_construct_mic_iv( - uint8_t *mic_iv, sint qc_exists, sint a4_exists, - uint8_t *mpdu, uint payload_length,uint8_t *pn_vector); -void aesccmp_construct_mic_header1(uint8_t *mic_header1, sint header_length, uint8_t *mpdu); -void aesccmp_construct_mic_header2( - uint8_t *mic_header2, uint8_t *mpdu, sint a4_exists, sint qc_exists); -void aesccmp_construct_ctr_preload( - uint8_t *ctr_preload, sint a4_exists, sint qc_exists, - uint8_t *mpdu, uint8_t *pn_vector, sint c); - -uint32_t aes_80211_encrypt( - uint8_t *pframe, uint32_t wlan_hdr_len, \ - uint32_t payload_len, uint8_t *key, \ - uint32_t frame_type, uint8_t *mic); - -uint32_t aes_80211_decrypt( - uint8_t *pframe, uint32_t wlan_hdr_len, \ - uint32_t payload_len, uint8_t *key, \ - uint32_t frame_type, uint8_t *mic); -#endif //__ROM_RTW_SECURITY_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_sha1.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_sha1.h deleted file mode 100644 index 1621917..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rom_sha1.h +++ /dev/null @@ -1,71 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _ROM_SHA1_ -#define _ROM_SHA1_ - - -#ifndef _SHA_enum_ -#define _SHA_enum_ -enum -{ - shaSuccess = 0, - shaNull, /* Null pointer parameter */ - shaInputTooLong, /* input data too long */ - shaStateError /* called Input after Result */ -}; -#endif - - -#define SHA1HashSize 20 - -/* - * This structure will hold context information for the SHA-1 - * hashing operation - */ -typedef struct SHA1Context -{ - uint32_t Intermediate_Hash[SHA1HashSize/4]; /* Message Digest */ - - uint32_t Length_Low; /* Message length in bits */ - uint32_t Length_High; /* Message length in bits */ - - /* Index into message block array */ - uint16_t Message_Block_Index; - uint8_t Message_Block[64]; /* 512-bit message blocks */ - - int Computed; /* Is the digest computed? */ - int Corrupted; /* Is the message digest corrupted? */ -} SHA1Context; - - -/* - * Function Prototypes - */ - - -int rt_sha1_init( SHA1Context *); -int rt_sha1_update( SHA1Context *, const uint8_t *, unsigned int); -int rt_sha1_finish( SHA1Context *, uint8_t Message_Digest[SHA1HashSize]); - -void rt_hmac_sha1(unsigned char *text, int text_len, unsigned char *key, - int key_len, unsigned char *digest); - - -#endif //_ROM_SHA1_ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtl8195a_hal.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtl8195a_hal.h deleted file mode 100644 index df88425..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtl8195a_hal.h +++ /dev/null @@ -1,618 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __RTL8195A_HAL_H__ -#define __RTL8195A_HAL_H__ - -#include "drv_types.h" -#include "rtl8195a/rtl8195a_pmu_task.h" -#include "hal_data.h" - -#include "rtl8195a/rtl8195a_spec.h" -#include "rtl8195a/rtl8195a_rf.h" -#include "rtl8195a/rtl8195a_dm.h" -#include "rtl8195a/rtl8195a_recv.h" -#include "rtl8195a/rtl8195a_xmit.h" -#include "rtl8195a/rtl8195a_cmd.h" -#include "rtl8195a/rtl8195a_pmu_cmd.h" -#include "rtl8195a/rtl8195a_led.h" -#include "rtl8195a/Hal8195APwrSeq.h" -#include "rtl8195a/Hal8195APhyReg.h" -#include "rtl8195a/Hal8195APhyCfg.h" -#include "rtl8195a/rom_Hal8195APhyCfg.h" - -#ifdef DBG_CONFIG_ERROR_DETECT -#include "rtl8195a/rtl8195a_sreset.h" -#endif - -#include "../src/hal/OUTSRC/phydm_precomp.h" - -#if (RTL8195A_SUPPORT==1) - //2TODO: We should define 8192S firmware related macro settings here!! - #define RTL819X_DEFAULT_RF_TYPE RF_1T2R - #define RTL819X_TOTAL_RF_PATH 2 - -//--------------------------------------------------------------------- -// RTL8723BS From file -//--------------------------------------------------------------------- - #define RTL8723B_FW_IMG "rtl8723B\\rtl8723bfw.bin" - #define RTL8195A_PHY_REG "rtl8195A\\PHY_REG_1T.txt" - #define RTL8195A_PHY_RADIO_A "rtl8195A\\radio_a_1T.txt" - #define RTL8195A_PHY_RADIO_B "rtl8195A\\radio_b_1T.txt" - #define RTL8195A_TXPWR_TRACK "rtl8195A\\TxPowerTrack.txt" - #define RTL8195A_AGC_TAB "rtl8195A\\AGC_TAB_1T.txt" - #define RTL8195A_PHY_MACREG "rtl87195A\\MAC_REG.txt" - #define RTL8195A_PHY_REG_PG "rtl8195A\\PHY_REG_PG.txt" - #define RTL8195A_PHY_REG_MP "rtl8195A\\PHY_REG_MP.txt" - #define RTL8195A_TXPWR_LMT "rtl8195A\\TXPWR_LMT.txt" - -//--------------------------------------------------------------------- -// RTL8723BS From header -//--------------------------------------------------------------------- - - //#define Rtl8723B_FwImageArray Array_MP_8723B_FW_NIC - //#define Rtl8723B_FwImgArrayLength ArrayLength_MP_8723B_FW_NIC - //#define Rtl8723B_FwWoWImageArray Array_MP_8723B_FW_WoWLAN - //#define Rtl8723B_FwWoWImgArrayLength ArrayLength_MP_8723B_FW_WoWLAN - - #define Rtl8723B_PHY_REG_Array_PG Rtl8723SPHY_REG_Array_PG - #define Rtl8723B_PHY_REG_Array_PGLength Rtl8723SPHY_REG_Array_PGLength - -#if MP_DRIVER == 1 - #define Rtl8723B_FwBTImgArray Rtl8723BFwBTImgArray - #define Rtl8723B_FwBTImgArrayLength Rtl8723BFwBTImgArrayLength - - #define Rtl8723B_FwMPImageArray Rtl8723BFwMPImgArray - #define Rtl8723B_FwMPImgArrayLength Rtl8723BMPImgArrayLength - - #define Rtl8723B_PHY_REG_Array_MP Rtl8723B_PHYREG_Array_MP - #define Rtl8723B_PHY_REG_Array_MPLength Rtl8723B_PHYREG_Array_MPLength -#endif - -#endif // RTL8195A_SUPPORT - -#define FW_8723B_SIZE 0x8000 -#define FW_8723B_START_ADDRESS 0x1000 -#define FW_8723B_END_ADDRESS 0x1FFF //0x5FFF - -#define IS_FW_HEADER_EXIST_8723B(_pFwHdr) ((le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x5300) - -typedef struct _RT_FIRMWARE { - FIRMWARE_SOURCE eFWSource; -#ifdef CONFIG_EMBEDDED_FWIMG - uint8_t* szFwBuffer; -#else - uint8_t szFwBuffer[FW_8723B_SIZE]; -#endif - uint32_t ulFwLength; - -#ifdef CONFIG_EMBEDDED_FWIMG - uint8_t* szBTFwBuffer; -#else - uint8_t szBTFwBuffer[FW_8723B_SIZE]; -#endif - uint32_t ulBTFwLength; - -#ifdef CONFIG_WOWLAN - uint8_t* szWoWLANFwBuffer; - uint32_t ulWoWLANFwLength; -#endif //CONFIG_WOWLAN -} RT_FIRMWARE_8723B, *PRT_FIRMWARE_8723B; - -// -// This structure must be cared byte-ordering -// -// Added by tynli. 2009.12.04. -typedef struct _RT_8723B_FIRMWARE_HDR -{ - // 8-byte alinment required - - //--- LONG WORD 0 ---- - uint16_t Signature; // 92C0: test chip; 92C, 88C0: test chip; 88C1: MP A-cut; 92C1: MP A-cut - uint8_t Category; // AP/NIC and USB/PCI - uint8_t Function; // Reserved for different FW function indcation, for further use when driver needs to download different FW in different conditions - uint16_t Version; // FW Version - uint8_t Subversion; // FW Subversion, default 0x00 - uint16_t Rsvd1; - - - //--- LONG WORD 1 ---- - uint8_t Month; // Release time Month field - uint8_t Date; // Release time Date field - uint8_t Hour; // Release time Hour field - uint8_t Minute; // Release time Minute field - uint16_t RamCodeSize; // The size of RAM code - uint16_t Rsvd2; - - //--- LONG WORD 2 ---- - uint32_t SvnIdx; // The SVN entry index - uint32_t Rsvd3; - - //--- LONG WORD 3 ---- - uint32_t Rsvd4; - uint32_t Rsvd5; -}RT_8723B_FIRMWARE_HDR, *PRT_8723B_FIRMWARE_HDR; - -#define DRIVER_EARLY_INT_TIME_8195A 0x05 // 5ms -#define BCN_DMA_ATIME_INT_TIME_8195A 0x02 // 2ms - -// for 8195A -// TX 32K, RX 16K, Page size 128B for TX, 8B for RX -#define PAGE_SIZE_TX_8195A 128 -#define PAGE_SIZE_RX_8195A 8 - -#define RX_DMA_SIZE_8195A 0x4000 // 16K -#define RX_DMA_RESERVED_SIZE_8195A 0x80 // 128B, reserved for tx report -#define RX_DMA_BOUNDARY_8195A (RX_DMA_SIZE_8195A - RX_DMA_RESERVED_SIZE_8195A - 1) - - -// Note: We will divide number of page equally for each queue other than public queue! - -//For General Reserved Page Number(Beacon Queue is reserved page) -//Beacon:2, PS-Poll:1, Null Data:1,Qos Null Data:1,BT Qos Null Data:1 -#ifdef CONFIG_WLAN_HAL_TEST -#define BCNQ_PAGE_NUM_8195A 0x00 -#else -#define BCNQ_PAGE_NUM_8195A 0x08 -#endif - -#ifdef CONFIG_CONCURRENT_MODE -#define BCNQ1_PAGE_NUM_8195A 0x04 -#else -#define BCNQ1_PAGE_NUM_8195A 0x00 -#endif - -//For WoWLan , more reserved page -//ARP Rsp:1, RWC:1, GTK Info:1,GTK RSP:2,GTK EXT MEM:2 -#ifdef CONFIG_WOWLAN -#define WOWLAN_PAGE_NUM_8195A 0x07 -#else -#define WOWLAN_PAGE_NUM_8195A 0x00 -#endif - -#ifdef CONFIG_WLAN_HAL_TEST -#define TX_TOTAL_PAGE_NUMBER_8195A 0x40 -#define TX_PAGE_BOUNDARY_8195A (TX_TOTAL_PAGE_NUMBER_8195A + 1) -#else -#define TX_TOTAL_PAGE_NUMBER_8195A (0xFF - BCNQ_PAGE_NUM_8195A - BCNQ1_PAGE_NUM_8195A - WOWLAN_PAGE_NUM_8195A) -#define TX_PAGE_BOUNDARY_8195A (TX_TOTAL_PAGE_NUMBER_8195A + 1) -#endif - -#define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER TX_TOTAL_PAGE_NUMBER_8195A -#define WMM_NORMAL_TX_PAGE_BOUNDARY (WMM_NORMAL_TX_TOTAL_PAGE_NUMBER + 1) - -// For Normal Chip Setting -// (HPQ + LPQ + NPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER_8195A -#ifdef CONFIG_WLAN_HAL_TEST -#define NORMAL_PAGE_NUM_HPQ_8195A 0x10 -#define NORMAL_PAGE_NUM_LPQ_8195A 0x10 -#define NORMAL_PAGE_NUM_NPQ_8195A 0x10 -#else -#define NORMAL_PAGE_NUM_HPQ_8195A 0x0C -#define NORMAL_PAGE_NUM_LPQ_8195A 0x02 -#define NORMAL_PAGE_NUM_NPQ_8195A 0x02 -#endif - -// Note: For Normal Chip Setting, modify later -#define WMM_NORMAL_PAGE_NUM_HPQ_8195A 0x30 -#define WMM_NORMAL_PAGE_NUM_LPQ_8195A 0x20 -#define WMM_NORMAL_PAGE_NUM_NPQ_8195A 0x20 - -#include "HalVerDef.h" -#include "hal_com.h" - -#define EFUSE_OOB_PROTECT_BYTES (52+28+16+32) // Security + RF + MAC + OTP = 128 - -#define HWSET_MAX_SIZE_8195A 512 -#define EFUSE_REAL_CONTENT_LEN_8195A 256 -#define EFUSE_MAP_LEN_8195A 512 -#define EFUSE_MAX_SECTION_8195A 64 - -#define EFUSE_IC_ID_OFFSET 506 //For some inferiority IC purpose. added by Roger, 2009.09.02. -#define AVAILABLE_EFUSE_ADDR(addr) (addr < EFUSE_REAL_CONTENT_LEN_8195A) - -#define EFUSE_ACCESS_ON 0x69 // For RTL8723 only. -#define EFUSE_ACCESS_OFF 0x00 // For RTL8723 only. - -#ifdef CONFIG_LITTLE_WIFI_MCU_FUNCTION_THREAD -#define LITTLE_WIFI_STACKSIZE 512 -#ifdef PLATFORM_CMSIS_RTOS -#define LITTLE_WIFI_TASK_PRIORITY 3 // osPriorityRealtime -#ifdef CONFIG_POWER_SAVING -#define CHECK_IN_REQ_STATE_STACKSIZE 256 -#define CHECK_IN_REQ_STATE_TASK_PRIORITY 0//osPriorityNormal - -#ifdef TDMA_POWER_SAVING -#define TDMA_CHANGE_STATE_STACKSIZE 256 -#define TDMA_CHANGE_STATE_TASK_PRIORITY 2//osPriorityRealtime -#endif //#ifdef TDMA_POWER_SAVING - -#endif -#else -#define LITTLE_WIFI_TASK_PRIORITY 6//TASK_PRORITY_LOW - -#ifdef CONFIG_POWER_SAVING -#define CHECK_IN_REQ_STATE_STACKSIZE 256 -#define CHECK_IN_REQ_STATE_TASK_PRIORITY 1 - -#ifdef TDMA_POWER_SAVING -#define TDMA_CHANGE_STATE_STACKSIZE 256 -#define TDMA_CHANGE_STATE_TASK_PRIORITY 3 -#endif //#ifdef TDMA_POWER_SAVING - -#endif -#endif -#endif - -#define LX_DMA_IMR_DISABLED 0 -#define FW_IMR_DISABLED 0 -#define WL_PMC_IMR_DISABLED 0 - - -//======================================================== -// EFUSE for BT definition -//======================================================== -#define EFUSE_BT_REAL_BANK_CONTENT_LEN 512 -#define EFUSE_BT_REAL_CONTENT_LEN 1536 // 512*3 -#define EFUSE_BT_MAP_LEN 1024 // 1k bytes -#define EFUSE_BT_MAX_SECTION 128 // 1024/8 - -#define EFUSE_PROTECT_BYTES_BANK 16 - -#define GET_RF_TYPE(priv) (GET_HAL_DATA(priv)->rf_type) - -// Description: Determine the types of C2H events that are the same in driver and Fw. -// Fisrt constructed by tynli. 2009.10.09. -typedef enum _C2H_EVT -{ - C2H_DBG = 0, - C2H_TSF = 1, - C2H_AP_RPT_RSP = 2, - C2H_CCX_TX_RPT = 3, // The FW notify the report of the specific tx packet. - C2H_BT_RSSI = 4, - C2H_BT_OP_MODE = 5, - C2H_EXT_RA_RPT = 6, - C2H_8723B_BT_INFO = 9, - C2H_HW_INFO_EXCH = 10, - C2H_8723B_BT_MP_INFO = 11, - MAX_C2HEVENT -} C2H_EVT; - -typedef _PACKED struct _C2H_EVT_HDR -{ - uint8_t CmdID; - uint8_t CmdLen; - uint8_t CmdSeq; -} C2H_EVT_HDR, *PC2H_EVT_HDR; - -typedef enum tag_Package_Definition -{ - PACKAGE_DEFAULT, - PACKAGE_QFN56, - PACKAGE_QFN48, - PACKAGE_BGA96, - PACKAGE_QFN88, - PACKAGE_QFN216 -}PACKAGE_TYPE_E; - -typedef enum tag_ChipID_Definition -{ - CHIPID_8711AM = 0xFF, - CHIPID_8195AM = 0xFE, - CHIPID_8711AF = 0xFD, - CHIPID_8710AF = 0xFC, - CHIPID_8711AN = 0xFB, - CHIPID_8710AM = 0xFA -}CHIP_TD_E; - - -#define INCLUDE_MULTI_FUNC_BT(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_BT) -#define INCLUDE_MULTI_FUNC_GPS(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_GPS) - -//======================================================== -// TXBD and RXBD definition -//======================================================== -#ifdef CONFIG_MP_INCLUDED // For MP Tx no idle -#define TX_VIQ_DESC_NUM 4 -#define TX_VOQ_DESC_NUM 4 -#define TX_BKQ_DESC_NUM 4 -#define TX_BEQ_DESC_NUM 32 -#else -#define TX_VIQ_DESC_NUM 4 -#define TX_VOQ_DESC_NUM 4 -#define TX_BKQ_DESC_NUM 4 -#define TX_BEQ_DESC_NUM 4 -#endif -#define TX_BCNQ_DESC_NUM 2 -#define TX_MGQ_DESC_NUM 4 -#define TX_H0Q_DESC_NUM 2 -#define TX_H1Q_DESC_NUM 2 -#define TX_H2Q_DESC_NUM 2 -#define TX_H3Q_DESC_NUM 2 -#define TX_H4Q_DESC_NUM 2 -#define TX_H5Q_DESC_NUM 2 -#define TX_H6Q_DESC_NUM 2 -#define TX_H7Q_DESC_NUM 2 -#define RX_Q_DESC_NUM 4 //16 Reduce rx desc number due to memory limitation - -#define SET_VIQ_DES_NUM (TX_VIQ_DESC_NUM<<16) -#define SET_VOQ_DES_NUM (TX_VOQ_DESC_NUM) -#define SET_RXQ_DES_NUM (RX_Q_DESC_NUM<<16) -#define SET_MGQ_DES_NUM (TX_MGQ_DESC_NUM) -#define SET_BKQ_DES_NUM (TX_BKQ_DESC_NUM<<16) -#define SET_BEQ_DES_NUM (TX_BEQ_DESC_NUM) -#define SET_H1Q_DES_NUM (TX_H1Q_DESC_NUM<<16) -#define SET_H0Q_DES_NUM (TX_H0Q_DESC_NUM) -#define SET_H3Q_DES_NUM (TX_H3Q_DESC_NUM<<16) -#define SET_H2Q_DES_NUM (TX_H2Q_DESC_NUM) -#define SET_H5Q_DES_NUM (TX_H5Q_DESC_NUM<<16) -#define SET_H4Q_DES_NUM (TX_H4Q_DESC_NUM) -#define SET_H7Q_DES_NUM (TX_H7Q_DESC_NUM<<16) -#define SET_H6Q_DES_NUM (TX_H6Q_DESC_NUM) - -#define TX_DESC_MODE 1 - -//0: 2 segment -//1: 4 segment -//2: 8 segment -//#define TX_DESC_MODE 2 - -#define MAX_TXBD_SEQMENT_NUM ((TX_DESC_MODE)? (4*TX_DESC_MODE): 2) -#define TXBD_SEGMENT_SIZE 8 - - - -typedef struct _RXBD_ELEMENT_ { - uint32_t Dword0; - uint32_t PhyAddr; -}RXBD_ELEMENT,*PRXBD_ELEMENT; - - -typedef struct _TXBD_ELEMENT_ { - uint32_t Dword0; - uint32_t AddrLow; -}TXBD_ELEMENT,*PTXBD_ELEMENT; - -typedef struct _LX_DMA_ELEMENT_ { - uint32_t QueueTRxBdBase; - uint32_t HwIndex; - uint32_t HostIndex; - uint32_t AvaliableCnt; -}LX_DMA_ELEMENT, *PLX_DMA_ELEMENT; -#if 1 - -typedef enum _LX_DMA_QUEUE_TYPE_{ - VO_QUEUE = 0, - VI_QUEUE = 1, - BE_QUEUE = 2, - BK_QUEUE = 3, - MG_QUEUE = 4, - RX_QUEUE = 5, - H0_QUEUE = 6, - H1_QUEUE = 7, - H2_QUEUE = 8, - H3_QUEUE = 9, - H4_QUEUE = 10, - H5_QUEUE = 11, - H6_QUEUE = 12, - H7_QUEUE = 13, - BCN_QUEUE = 14, - MAX_TX_QUEUE = 15, - ERROR_QUEUE = 16, -}LX_DMA_QUEUE_TYPE, *PLX_DMA_QUEUE_TYPE; - -typedef struct _TX_FREE_QUEUE_ { - _queue FreeQueue; - uint32_t Qlen; -}TX_FREE_QUEUE, *PTX_FREE_QUEUE; - -typedef struct _LX_DMA_MANAGER_ { - LX_DMA_ELEMENT QueueTRxBd[MAX_TX_QUEUE]; - uint32_t QueueMaxValue[MAX_TX_QUEUE]; - uint32_t RxBdSkb[RX_Q_DESC_NUM]; - uint32_t RxLen; - uint32_t RemainLen; - uint16_t RxAggregateNum; - uint16_t RxExpectTag; - uint16_t RxSegFlow; - uint16_t Flagls; - TX_FREE_QUEUE TxFreeQueue[MAX_TX_QUEUE]; - -}LX_DMA_MANAGER, *PLX_DMA_MANAGER; - -#else - -typedef struct _LX_DMA_MANAGER_ { - uint32_t *pVoqTXBD; - uint32_t *pViqTXBD; - uint32_t *pBeqTXBD; - uint32_t *pBkqTXBD; - uint32_t *pBcnqTXBD; - uint32_t *pMgqTXBD; - uint32_t *pH0qTXBD; - uint32_t *pH1qTXBD; - uint32_t *pH2qTXBD; - uint32_t *pH3qTXBD; - uint32_t *pH4qTXBD; - uint32_t *pH5qTXBD; - uint32_t *pH6qTXBD; - uint32_t *pH7qTXBD; - uint32_t *pExViqTXBD; - uint32_t *pExVoqTXBD; - uint32_t *pExBeqTXBD; - uint32_t *pExBkqTXBD; - uint32_t *pExMgqTXBD; - uint32_t *pRXBD; -// u4Byte RxAggBufEntry[RX_Q_DESC_NUM]; -// u4Byte RxAggLenEntry[RX_Q_DESC_NUM]; - uint32_t RxLen; - uint32_t RemainLen; - uint16_t ViqTxWritePoint; - uint16_t ViqTxReadPoint; - uint16_t VoqTxWritePoint; - uint16_t VoqTxReadPoint; - uint16_t BeqTxWritePoint; - uint16_t BeqTxReadPoint; - uint16_t BkqTxWritePoint; - uint16_t BkqTxReadPoint; - uint16_t RxWritePoint; - uint16_t RxReadPoint; - uint16_t RxAggregateNum; - uint16_t RxExpectTag; - uint16_t RxSegFlow; - uint16_t Flagls; -}LX_DMA_MANAGER, *PLX_DMA_MANAGER; -#endif - -// rtl8723a_hal_init.c -int32_t rtl8195a_FirmwareDownload(PADAPTER padapter, BOOLEAN bUsedWoWLANFw); -void rtl8195a_FirmwareSelfReset(PADAPTER padapter); -void rtl8195a_InitializeFirmwareVars(PADAPTER padapter); - -void rtl8195a_InitAntenna_Selection(PADAPTER padapter); -void rtl8195a_DeinitAntenna_Selection(PADAPTER padapter); -void rtl8195a_CheckAntenna_Selection(PADAPTER padapter); -void rtl8195a_init_default_value(PADAPTER padapter); - -int32_t rtl8195a_InitLLTTable(PADAPTER padapter); - -int32_t CardDisableHWSM(PADAPTER padapter, uint8_t resetMCU); -int32_t CardDisableWithoutHWSM(PADAPTER padapter); - -// EFuse -//uint8_t GetEEPROMSize8195a(PADAPTER padapter); -void Hal_InitPGData(PADAPTER padapter, uint8_t *PROMContent); -void Hal_EfuseParseIDCode(PADAPTER padapter, uint8_t *hwinfo); -void Hal_EfuseParseTxPowerInfo_8195A(PADAPTER padapter, uint8_t *PROMContent, BOOLEAN AutoLoadFail); -void Hal_EfuseParseBTCoexistInfo_8195A(PADAPTER padapter, uint8_t *hwinfo, BOOLEAN AutoLoadFail); -void Hal_EfuseParseEEPROMVer_8195A(PADAPTER padapter, uint8_t *hwinfo, BOOLEAN AutoLoadFail); -void Hal_EfuseParseChnlPlan_8195A(PADAPTER padapter, uint8_t *hwinfo, BOOLEAN AutoLoadFail); -void Hal_EfuseParseCustomerID_8195A(PADAPTER padapter, uint8_t *hwinfo, BOOLEAN AutoLoadFail); -void Hal_EfuseParseAntennaDiversity_8195A(PADAPTER padapter, uint8_t *hwinfo, BOOLEAN AutoLoadFail); -void Hal_EfuseParseXtal_8195A(PADAPTER pAdapter, uint8_t *hwinfo, uint8_t AutoLoadFail); -void Hal_EfuseParseThermalMeter_8195A(PADAPTER padapter, uint8_t *hwinfo, uint8_t AutoLoadFail); - -uint8_t rtw_flash_read(PADAPTER padapter, uint16_t addr, uint16_t cnts, uint8_t *data); -uint8_t rtw_flash_write(PADAPTER padapter, uint16_t addr, uint16_t cnts, uint8_t *data); -uint8_t rtw_config_map_read(PADAPTER padapter, uint16_t addr, uint16_t cnts, uint8_t *data, uint8_t efuse); -uint8_t rtw_config_map_write(PADAPTER padapter, uint16_t addr, uint16_t cnts, uint8_t *data, uint8_t efuse); - -void rtl8195a_set_hal_ops(struct hal_ops *pHalFunc); -void lxbus_set_intf_ops(struct _io_ops *pops); -void SetHwReg8195A(PADAPTER padapter, uint8_t variable, uint8_t *val); -void GetHwReg8195A(PADAPTER padapter, uint8_t variable, uint8_t *val); -uint8_t SetHalDefVar8195A(PADAPTER padapter, HAL_DEF_VARIABLE variable, void *pval); -uint8_t GetHalDefVar8195A(PADAPTER padapter, HAL_DEF_VARIABLE variable, void *pval); -void SetHalODMVar8195A( PADAPTER Adapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1, BOOLEAN bSet); -void GetHalODMVar8195A(PADAPTER Adapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1, BOOLEAN bSet); - -// register -void rtl8195a_InitBeaconParameters(PADAPTER padapter); -void rtl8195a_InitBeaconMaxError(PADAPTER padapter, uint8_t InfraMode); -void _InitBurstPktLen_8195AB(PADAPTER Adapter); -#ifdef CONFIG_WOWLAN -void _8051Reset8195a(PADAPTER padapter); -void Hal_DetectWoWMode(PADAPTER pAdapter); -#endif //CONFIG_WOWLAN - -void rtl8195a_start_thread(_adapter *padapter); -void rtl8195a_stop_thread(_adapter *padapter); - -#if defined(CONFIG_CHECK_BT_HANG) && defined(CONFIG_BT_COEXIST) -void rtl8195ab_init_checkbthang_workqueue(_adapter * adapter); -void rtl8195ab_free_checkbthang_workqueue(_adapter * adapter); -void rtl8195ab_cancle_checkbthang_workqueue(_adapter * adapter); -void rtl8195ab_hal_check_bt_hang(_adapter * adapter); -#endif - -#ifdef CONFIG_WOWLAN -void rtw_get_current_ip_address(PADAPTER padapter, uint8_t *pcurrentip); -void rtw_get_sec_iv(PADAPTER padapter, uint8_t*pcur_dot11txpn, uint8_t *StaAddr); -#endif - -#ifdef CONFIG_GPIO_WAKEUP -void HalSetOutPutGPIO(PADAPTER padapter, uint8_t index, uint8_t OutPutValue); -#endif - -#ifdef CONFIG_RF_GAIN_OFFSET -void Hal_ReadRFGainOffset(PADAPTER pAdapter,uint8_t* hwinfo,BOOLEAN AutoLoadFail); -#endif //CONFIG_RF_GAIN_OFFSET - - -//1TODO: Chris -#if 1 - -//============= -// [1] Rx Buffer Descriptor (for PCIE) buffer descriptor architecture -//DWORD 0 -#define SET_RX_BUFFER_DESC_DATA_LENGTH_92E(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 0, 14, __Value) -#define SET_RX_BUFFER_DESC_LS_92E(__pRxStatusDesc,__Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 14, 1, __Value) -#define SET_RX_BUFFER_DESC_FS_92E(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 15, 1, __Value) -#define SET_RX_BUFFER_DESC_RX_TAG_92E(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 16, 13, __Value) - -#define GET_RX_BUFFER_DESC_OWN_92E(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 31, 1) -#define GET_RX_BUFFER_DESC_LS_92E(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 14, 1) -#define GET_RX_BUFFER_DESC_FS_92E(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 15, 1) -#define GET_RX_BUFFER_DESC_RX_TAG_92E(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 16, 13) -#define GET_RX_BUFFER_DESC_TOTAL_LENGTH_92E(__pRxStatusDesc)LE_BITS_TO_4BYTE( __pRxStatusDesc, 0, 14) - - -//DWORD 1 -#define SET_RX_BUFFER_PHYSICAL_LOW_92E(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc+4, 0, 32, __Value) -#define GET_RX_BUFFER_PHYSICAL_LOW_92E(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+4, 0, 32) - -//DWORD 2 -#define SET_RX_BUFFER_PHYSICAL_HIGH_92E(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc+8, 0, 32, __Value) - - -//=====Tx Desc Buffer content - -// config element for each tx buffer -/* -#define SET_TXBUFFER_DESC_LEN_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*16), 0, 16, __Valeu) -#define SET_TXBUFFER_DESC_AMSDU_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*16), 31, 1, __Valeu) -#define SET_TXBUFFER_DESC_ADD_LOW_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*16)+4, 0, 32, __Valeu) -#define SET_TXBUFFER_DESC_ADD_HIGT_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*16)+8, 0, 32, __Valeu) -*/ -#define SET_TXBUFFER_DESC_LEN_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*8), 0, 16, __Valeu) -#define SET_TXBUFFER_DESC_AMSDU_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*8), 31, 1, __Valeu) -#define SET_TXBUFFER_DESC_ADD_LOW_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*8)+4, 0, 32, __Valeu) -#define SET_TXBUFFER_DESC_ADD_HIGT_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*16)+8, 0, 32, __Valeu) - -// Dword 0 -#define SET_TX_BUFF_DESC_LEN_0_92E(__pTxDesc, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc, 0, 16, __Valeu) -#define SET_TX_BUFF_DESC_PSB_92E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 16, 8, __Value) -#define SET_TX_BUFF_DESC_OWN_92E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 31, 1, __Value) -// Dword 1 -#define SET_TX_BUFF_DESC_ADDR_LOW_0_92E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 0, 32, __Value) -#define GET_TX_DESC_TX_BUFFER_ADDRESS_92E(__pTxDesc) LE_BITS_TO_4BYTE(__pTxDesc+4, 0,32) - - -// Dword 2 -#define SET_TX_BUFF_DESC_ADDR_HIGH_0_92E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 0, 32, __Value) -// Dword 3, RESERVED - - -#define SET_TX_DESC_OWN_92E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 31, 1, __Value) - -#endif - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtl8711b_hal.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtl8711b_hal.h deleted file mode 100644 index 078fc78..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtl8711b_hal.h +++ /dev/null @@ -1,595 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __RTL8711B_HAL_H__ -#define __RTL8711B_HAL_H__ - -#include "drv_types.h" -//#include "rtl8711b/rtl8711b_pmu_task.h" -#include "hal_data.h" - -#include "rtl8711b/rtl8711b_spec.h" -#include "rtl8711b/rtl8711b_rf.h" -#include "rtl8711b/rtl8711b_dm.h" -#include "rtl8711b/rtl8711b_recv.h" -#include "rtl8711b/rtl8711b_xmit.h" -#include "rtl8711b/rtl8711b_cmd.h" -//#include "rtl8711b/rtl8711b_pmu_cmd.h" -#include "rtl8711b/rtl8711b_led.h" -#include "rtl8711b/Hal8711BPwrSeq.h" -#include "rtl8711b/Hal8711BPhyReg.h" -#include "rtl8711b/Hal8711BPhyCfg.h" -#include "rtl8711b/rom_Hal8711BPhyCfg.h" - -#ifdef DBG_CONFIG_ERROR_DETECT -#include "rtl8711b/rtl8711b_sreset.h" -#endif - -#include "../src/hal/OUTSRC/phydm_precomp.h" - -#if (RTL8711B_SUPPORT==1) - //2TODO: We should define 8192S firmware related macro settings here!! - #define RTL819X_DEFAULT_RF_TYPE RF_1T2R - #define RTL819X_TOTAL_RF_PATH 2 - -//--------------------------------------------------------------------- -// RTL8723BS From file -//--------------------------------------------------------------------- - #define RTL8723B_FW_IMG "rtl8723B\\rtl8723bfw.bin" - #define RTL8711B_PHY_REG "rtl8711B\\PHY_REG_1T.txt" - #define RTL8711B_PHY_RADIO_A "rtl8711B\\radio_a_1T.txt" - #define RTL8711B_PHY_RADIO_B "rtl8711B\\radio_b_1T.txt" - #define RTL8711B_TXPWR_TRACK "rtl8711B\\TxPowerTrack.txt" - #define RTL8711B_AGC_TAB "rtl8711B\\AGC_TAB_1T.txt" - #define RTL8711B_PHY_MACREG "rtl87195A\\MAC_REG.txt" - #define RTL8711B_PHY_REG_PG "rtl8711B\\PHY_REG_PG.txt" - #define RTL8711B_PHY_REG_MP "rtl8711B\\PHY_REG_MP.txt" - #define RTL8711B_TXPWR_LMT "rtl8711B\\TXPWR_LMT.txt" - -//--------------------------------------------------------------------- -// RTL8723BS From header -//--------------------------------------------------------------------- - - //#define Rtl8723B_FwImageArray Array_MP_8723B_FW_NIC - //#define Rtl8723B_FwImgArrayLength ArrayLength_MP_8723B_FW_NIC - //#define Rtl8723B_FwWoWImageArray Array_MP_8723B_FW_WoWLAN - //#define Rtl8723B_FwWoWImgArrayLength ArrayLength_MP_8723B_FW_WoWLAN - - #define Rtl8711B_PHY_REG_Array_PG Rtl8723SPHY_REG_Array_PG - #define Rtl8711B_PHY_REG_Array_PGLength Rtl8723SPHY_REG_Array_PGLength - -#if MP_DRIVER == 1 - #define Rtl8711B_FwBTImgArray Rtl8723BFwBTImgArray - #define Rtl8711B_FwBTImgArrayLength Rtl8723BFwBTImgArrayLength - - #define Rtl8711B_FwMPImageArray Rtl8723BFwMPImgArray - #define Rtl8711B_FwMPImgArrayLength Rtl8723BMPImgArrayLength - - #define Rtl8711B_PHY_REG_Array_MP Rtl8723B_PHYREG_Array_MP - #define Rtl8711B_PHY_REG_Array_MPLength Rtl8723B_PHYREG_Array_MPLength -#endif - -#endif // RTL8711B_SUPPORT - -#define FW_8711B_SIZE 0x8000 -#define FW_8711B_START_ADDRESS 0x1000 -#define FW_8711B_END_ADDRESS 0x1FFF //0x5FFF - -#define IS_FW_HEADER_EXIST_8711B(_pFwHdr) ((GET_FIRMWARE_HDR_SIGNATURE(_pFwHdr)&0xFFF0) == 0x10B0) - -typedef struct _RT_FIRMWARE { - FIRMWARE_SOURCE eFWSource; -#ifdef CONFIG_EMBEDDED_FWIMG - uint8_t* szFwBuffer; -#else - uint8_t szFwBuffer[FW_8711B_SIZE]; -#endif - uint32_t ulFwLength; - -#ifdef CONFIG_EMBEDDED_FWIMG - uint8_t* szBTFwBuffer; -#else - uint8_t szBTFwBuffer[FW_8711B_SIZE]; -#endif - uint32_t ulBTFwLength; - -#ifdef CONFIG_WOWLAN - uint8_t* szWoWLANFwBuffer; - uint32_t ulWoWLANFwLength; -#endif //CONFIG_WOWLAN -} RT_FIRMWARE_8711B, *PRT_FIRMWARE_8711B; - -// -// This structure must be cared byte-ordering -// -// Added by tynli. 2009.12.04. -typedef struct _RT_8723B_FIRMWARE_HDR -{ - // 8-byte alinment required - - //--- LONG WORD 0 ---- - uint16_t Signature; // 92C0: test chip; 92C, 88C0: test chip; 88C1: MP A-cut; 92C1: MP A-cut - uint8_t Category; // AP/NIC and USB/PCI - uint8_t Function; // Reserved for different FW function indcation, for further use when driver needs to download different FW in different conditions - uint16_t Version; // FW Version - uint8_t Subversion; // FW Subversion, default 0x00 - uint16_t Rsvd1; - - - //--- LONG WORD 1 ---- - uint8_t Month; // Release time Month field - uint8_t Date; // Release time Date field - uint8_t Hour; // Release time Hour field - uint8_t Minute; // Release time Minute field - uint16_t RamCodeSize; // The size of RAM code - uint16_t Rsvd2; - - //--- LONG WORD 2 ---- - uint32_t SvnIdx; // The SVN entry index - uint32_t Rsvd3; - - //--- LONG WORD 3 ---- - uint32_t Rsvd4; - uint32_t Rsvd5; -}RT_8723B_FIRMWARE_HDR, *PRT_8723B_FIRMWARE_HDR; - -#define DRIVER_EARLY_INT_TIME_8711B 0x05 // 5ms -#define BCN_DMA_ATIME_INT_TIME_8711B 0x02 // 2ms - -// for 8711B -// TX 32K, RX 16K, Page size 128B for TX, 8B for RX -#define PAGE_SIZE_TX_8711B 128 -#define PAGE_SIZE_RX_8711B 8 - -#define RX_DMA_SIZE_8711B 0x4000 // 16K -#define RX_DMA_RESERVED_SIZE_8711B 0x80 // 128B, reserved for tx report -#define RX_DMA_BOUNDARY_8711B (RX_DMA_SIZE_8711B - RX_DMA_RESERVED_SIZE_8711B - 1) - -// Note: We will divide number of page equally for each queue other than public queue! - -//For General Reserved Page Number(Beacon Queue is reserved page) -//Beacon:2, PS-Poll:1, Null Data:1,Qos Null Data:1,BT Qos Null Data:1 -#ifdef CONFIG_WLAN_HAL_TEST -#define BCNQ_PAGE_NUM_8711B 0x00 -#else -#define BCNQ_PAGE_NUM_8711B 0x08 -#endif - -#ifdef CONFIG_CONCURRENT_MODE -#define BCNQ1_PAGE_NUM_8711B 0x04 -#else -#define BCNQ1_PAGE_NUM_8711B 0x00 -#endif - -//For WoWLan , more reserved page -//ARP Rsp:1, RWC:1, GTK Info:1,GTK RSP:2,GTK EXT MEM:2 -#ifdef CONFIG_WOWLAN -#define WOWLAN_PAGE_NUM_8711B 0x07 -#else -#define WOWLAN_PAGE_NUM_8711B 0x00 -#endif - -#ifdef CONFIG_WLAN_HAL_TEST -#define TX_TOTAL_PAGE_NUMBER_8711B (0xF8 - BCNQ_PAGE_NUM_8711B - BCNQ1_PAGE_NUM_8711B - WOWLAN_PAGE_NUM_8711B) -//#define TX_TOTAL_PAGE_NUMBER_8711B 0x40 -#define TX_PAGE_BOUNDARY_8711B (TX_TOTAL_PAGE_NUMBER_8711B + 1) -#else -#define TX_TOTAL_PAGE_NUMBER_8711B (0xFF - BCNQ_PAGE_NUM_8711B - BCNQ1_PAGE_NUM_8711B - WOWLAN_PAGE_NUM_8711B) -#define TX_PAGE_BOUNDARY_8711B (TX_TOTAL_PAGE_NUMBER_8711B + 1) -#endif - -#define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER TX_TOTAL_PAGE_NUMBER_8711B -#define WMM_NORMAL_TX_PAGE_BOUNDARY (WMM_NORMAL_TX_TOTAL_PAGE_NUMBER + 1) - -// For Normal Chip Setting -// (HPQ + LPQ + NPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER_8711B -#ifdef CONFIG_WLAN_HAL_TEST -#define NORMAL_PAGE_NUM_HPQ_8711B 0x10 -#define NORMAL_PAGE_NUM_LPQ_8711B 0x10 -#define NORMAL_PAGE_NUM_NPQ_8711B 0x10 -#else -#define NORMAL_PAGE_NUM_HPQ_8711B 0x0C -#define NORMAL_PAGE_NUM_LPQ_8711B 0x02 -#define NORMAL_PAGE_NUM_NPQ_8711B 0x02 -#endif - -#ifdef CONFIG_WLAN_HAL_TEST -#define WMM_NORMAL_PAGE_NUM_HPQ_8711B 0x10 -#define WMM_NORMAL_PAGE_NUM_LPQ_8711B 0x10 -#define WMM_NORMAL_PAGE_NUM_NPQ_8711B 0x10 -#else -// Note: For Normal Chip Setting, modify later -#define WMM_NORMAL_PAGE_NUM_HPQ_8711B 0x30 -#define WMM_NORMAL_PAGE_NUM_LPQ_8711B 0x20 -#define WMM_NORMAL_PAGE_NUM_NPQ_8711B 0x20 -#endif - -#include "HalVerDef.h" -#include "hal_com.h" - -#define LX_DMA_IMR_DISABLED 0 -#define FW_IMR_DISABLED 0 -#define WL_PMC_IMR_DISABLED 0 - - -//======================================================== -// EFUSE for BT definition -//======================================================== -#define EFUSE_BT_REAL_BANK_CONTENT_LEN 512 -#define EFUSE_BT_REAL_CONTENT_LEN 1536 // 512*3 -#define EFUSE_BT_MAP_LEN 1024 // 1k bytes -#define EFUSE_BT_MAX_SECTION 128 // 1024/8 - -#define EFUSE_PROTECT_BYTES_BANK 16 - -#define GET_RF_TYPE(priv) (GET_HAL_DATA(priv)->rf_type) - -// Description: Determine the types of C2H events that are the same in driver and Fw. -// Fisrt constructed by tynli. 2009.10.09. -typedef enum _C2H_EVT -{ - C2H_DBG = 0, - C2H_TSF = 1, - C2H_AP_RPT_RSP = 2, - C2H_CCX_TX_RPT = 3, // The FW notify the report of the specific tx packet. - C2H_BT_RSSI = 4, - C2H_BT_OP_MODE = 5, - C2H_EXT_RA_RPT = 6, - C2H_8723B_BT_INFO = 9, - C2H_HW_INFO_EXCH = 10, - C2H_8723B_BT_MP_INFO = 11, - MAX_C2HEVENT -} C2H_EVT; - -typedef _PACKED struct _C2H_EVT_HDR -{ - uint8_t CmdID; - uint8_t CmdLen; - uint8_t CmdSeq; -} C2H_EVT_HDR, *PC2H_EVT_HDR; - -typedef enum tag_Package_Definition -{ - PACKAGE_QFN32, - PACKAGE_QFN48_MCM, - PACKAGE_QFN48, - PACKAGE_QFN68, -}PACKAGE_TYPE_E; - -typedef enum tag_ChipID_Definition -{ - CHIPID_8710BN = 0xFF, /* PACKAGE_QFN32 */ - CHIPID_8710BU = 0xFE, /* PACKAGE_QFN48_MCM */ - CHIPID_8711BN = 0xFD, /* PACKAGE_QFN48 */ - CHIPID_8711BG = 0xFC, /* PACKAGE_QFN68 */ -}CHIP_TD_E; - - -#define INCLUDE_MULTI_FUNC_BT(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_BT) -#define INCLUDE_MULTI_FUNC_GPS(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_GPS) - -//======================================================== -// TXBD and RXBD definition -//======================================================== -#ifdef CONFIG_MP_INCLUDED // For MP Tx no idle -#define TX_VIQ_DESC_NUM 4 -#define TX_VOQ_DESC_NUM 4 -#define TX_BKQ_DESC_NUM 4 -#define TX_BEQ_DESC_NUM 32 -#else -#define TX_VIQ_DESC_NUM 4 -#define TX_VOQ_DESC_NUM 4 -#define TX_BKQ_DESC_NUM 4 -#define TX_BEQ_DESC_NUM 4 -#endif -#ifdef CONFIG_CONCURRENT_MODE -#define TX_BCNQ_DESC_NUM 4 -#else -#define TX_BCNQ_DESC_NUM 2 -#endif -#define TX_MGQ_DESC_NUM 4 -#define TX_H0Q_DESC_NUM 2 -#define TX_H1Q_DESC_NUM 2 -#define TX_H2Q_DESC_NUM 2 -#define TX_H3Q_DESC_NUM 2 -#define TX_H4Q_DESC_NUM 2 -#define TX_H5Q_DESC_NUM 2 -#define TX_H6Q_DESC_NUM 2 -#define TX_H7Q_DESC_NUM 2 -#define RX_Q_DESC_NUM 4 //16 Reduce rx desc number due to memory limitation - -#define SET_VIQ_DES_NUM (TX_VIQ_DESC_NUM<<16) -#define SET_VOQ_DES_NUM (TX_VOQ_DESC_NUM) -#define SET_RXQ_DES_NUM (RX_Q_DESC_NUM<<16) -#define SET_MGQ_DES_NUM (TX_MGQ_DESC_NUM) -#define SET_BKQ_DES_NUM (TX_BKQ_DESC_NUM<<16) -#define SET_BEQ_DES_NUM (TX_BEQ_DESC_NUM) -#define SET_H1Q_DES_NUM (TX_H1Q_DESC_NUM<<16) -#define SET_H0Q_DES_NUM (TX_H0Q_DESC_NUM) -#define SET_H3Q_DES_NUM (TX_H3Q_DESC_NUM<<16) -#define SET_H2Q_DES_NUM (TX_H2Q_DESC_NUM) -#define SET_H5Q_DES_NUM (TX_H5Q_DESC_NUM<<16) -#define SET_H4Q_DES_NUM (TX_H4Q_DESC_NUM) -#define SET_H7Q_DES_NUM (TX_H7Q_DESC_NUM<<16) -#define SET_H6Q_DES_NUM (TX_H6Q_DESC_NUM) - -#define TX_DESC_MODE 1 - -//0: 2 segment -//1: 4 segment -//2: 8 segment -//#define TX_DESC_MODE 2 - -#define MAX_TXBD_SEQMENT_NUM ((TX_DESC_MODE)? (4*TX_DESC_MODE): 2) -#define TXBD_SEGMENT_SIZE 8 - - - -typedef struct _RXBD_ELEMENT_ { - uint32_t Dword0; - uint32_t PhyAddr; -}RXBD_ELEMENT,*PRXBD_ELEMENT; - - -typedef struct _TXBD_ELEMENT_ { - uint32_t Dword0; - uint32_t AddrLow; -}TXBD_ELEMENT,*PTXBD_ELEMENT; - -typedef struct _LX_DMA_ELEMENT_ { - uint32_t QueueTRxBdBase; - uint32_t HwIndex; - uint32_t HostIndex; - uint32_t AvaliableCnt; -}LX_DMA_ELEMENT, *PLX_DMA_ELEMENT; -#if 1 - -typedef enum _LX_DMA_QUEUE_TYPE_{ - VO_QUEUE = 0, - VI_QUEUE = 1, - BE_QUEUE = 2, - BK_QUEUE = 3, - MG_QUEUE = 4, - RX_QUEUE = 5, - H0_QUEUE = 6, - H1_QUEUE = 7, - H2_QUEUE = 8, - H3_QUEUE = 9, - H4_QUEUE = 10, - H5_QUEUE = 11, - H6_QUEUE = 12, - H7_QUEUE = 13, - BCN_QUEUE = 14, - MAX_TX_QUEUE = 15, - ERROR_QUEUE = 16, -}LX_DMA_QUEUE_TYPE, *PLX_DMA_QUEUE_TYPE; - -typedef struct _TX_FREE_QUEUE_ { - _queue FreeQueue; - uint32_t Qlen; -}TX_FREE_QUEUE, *PTX_FREE_QUEUE; - -typedef struct _LX_DMA_MANAGER_ { - LX_DMA_ELEMENT QueueTRxBd[MAX_TX_QUEUE]; - uint32_t QueueMaxValue[MAX_TX_QUEUE]; - uint32_t RxBdSkb[RX_Q_DESC_NUM]; - uint32_t RxLen; - uint32_t RemainLen; - uint16_t RxAggregateNum; - uint16_t RxExpectTag; - uint16_t RxSegFlow; - uint16_t Flagls; - TX_FREE_QUEUE TxFreeQueue[MAX_TX_QUEUE]; - -}LX_DMA_MANAGER, *PLX_DMA_MANAGER; - -#else - -typedef struct _LX_DMA_MANAGER_ { - uint32_t *pVoqTXBD; - uint32_t *pViqTXBD; - uint32_t *pBeqTXBD; - uint32_t *pBkqTXBD; - uint32_t *pBcnqTXBD; - uint32_t *pMgqTXBD; - uint32_t *pH0qTXBD; - uint32_t *pH1qTXBD; - uint32_t *pH2qTXBD; - uint32_t *pH3qTXBD; - uint32_t *pH4qTXBD; - uint32_t *pH5qTXBD; - uint32_t *pH6qTXBD; - uint32_t *pH7qTXBD; - uint32_t *pExViqTXBD; - uint32_t *pExVoqTXBD; - uint32_t *pExBeqTXBD; - uint32_t *pExBkqTXBD; - uint32_t *pExMgqTXBD; - uint32_t *pRXBD; -// u4Byte RxAggBufEntry[RX_Q_DESC_NUM]; -// u4Byte RxAggLenEntry[RX_Q_DESC_NUM]; - uint32_t RxLen; - uint32_t RemainLen; - uint16_t ViqTxWritePoint; - uint16_t ViqTxReadPoint; - uint16_t VoqTxWritePoint; - uint16_t VoqTxReadPoint; - uint16_t BeqTxWritePoint; - uint16_t BeqTxReadPoint; - uint16_t BkqTxWritePoint; - uint16_t BkqTxReadPoint; - uint16_t RxWritePoint; - uint16_t RxReadPoint; - uint16_t RxAggregateNum; - uint16_t RxExpectTag; - uint16_t RxSegFlow; - uint16_t Flagls; -}LX_DMA_MANAGER, *PLX_DMA_MANAGER; -#endif - -// rtl8723a_hal_init.c -int32_t rtl8711b_FirmwareDownload(PADAPTER padapter, BOOLEAN bUsedWoWLANFw); -void rtl8711b_FirmwareSelfReset(PADAPTER padapter); -void rtl8711b_InitializeFirmwareVars(PADAPTER padapter); - -void rtl8711b_InitAntenna_Selection(PADAPTER padapter); -void rtl8711b_DeinitAntenna_Selection(PADAPTER padapter); -void rtl8711b_CheckAntenna_Selection(PADAPTER padapter); -void rtl8711b_init_default_value(PADAPTER padapter); - -int32_t rtl8711b_InitLLTTable(PADAPTER padapter); - -int32_t CardDisableHWSM(PADAPTER padapter, uint8_t resetMCU); -int32_t CardDisableWithoutHWSM(PADAPTER padapter); - -// EFuse -//uint8_t GetEEPROMSize8711b(PADAPTER padapter); -void Hal_InitPGData(PADAPTER padapter, uint8_t *PROMContent); -void Hal_EfuseParseIDCode(PADAPTER padapter, uint8_t *hwinfo); -void Hal_EfuseParseTxPowerInfo_8711B(PADAPTER padapter, uint8_t *PROMContent, BOOLEAN AutoLoadFail); -void Hal_EfuseParseBTCoexistInfo_8711B(PADAPTER padapter, uint8_t *hwinfo, BOOLEAN AutoLoadFail); -void Hal_EfuseParseEEPROMVer_8711B(PADAPTER padapter, uint8_t *hwinfo, BOOLEAN AutoLoadFail); -void Hal_EfuseParseChnlPlan_8711B(PADAPTER padapter, uint8_t *hwinfo, BOOLEAN AutoLoadFail); -void Hal_EfuseParseCustomerID_8711B(PADAPTER padapter, uint8_t *hwinfo, BOOLEAN AutoLoadFail); -void Hal_EfuseParseAntennaDiversity_8711B(PADAPTER padapter, uint8_t *hwinfo, BOOLEAN AutoLoadFail); -void Hal_EfuseParseXtal_8711B(PADAPTER pAdapter, uint8_t *hwinfo, uint8_t AutoLoadFail); -void Hal_EfuseParseThermalMeter_8711B(PADAPTER padapter, uint8_t *hwinfo, uint8_t AutoLoadFail); - -#ifdef CONFIG_C2H_PACKET_EN -void C2HPacketHandler_8711B(PADAPTER padapter, uint8_t *pbuffer, uint16_t length); -#endif - -uint8_t rtw_flash_read(PADAPTER padapter, uint16_t addr, uint16_t cnts, uint8_t *data); -uint8_t rtw_flash_write(PADAPTER padapter, uint16_t addr, uint16_t cnts, uint8_t *data); -uint8_t rtw_config_map_read(PADAPTER padapter, uint16_t addr, uint16_t cnts, uint8_t *data, uint8_t efuse); -uint8_t rtw_config_map_write(PADAPTER padapter, uint16_t addr, uint16_t cnts, uint8_t *data, uint8_t efuse); - -void rtl8711b_set_hal_ops(struct hal_ops *pHalFunc); -void lxbus_set_intf_ops(struct _io_ops *pops); -void SetHwReg8711B(PADAPTER padapter, uint8_t variable, uint8_t *val); -void GetHwReg8711B(PADAPTER padapter, uint8_t variable, uint8_t *val); -uint8_t SetHalDefVar8711B(PADAPTER padapter, HAL_DEF_VARIABLE variable, void *pval); -uint8_t GetHalDefVar8711B(PADAPTER padapter, HAL_DEF_VARIABLE variable, void *pval); -void SetHalODMVar8711B( PADAPTER Adapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1, BOOLEAN bSet); -void GetHalODMVar8711B(PADAPTER Adapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1, BOOLEAN bSet); - -// register -void rtl8711b_InitBeaconParameters(PADAPTER padapter); -void rtl8711b_InitBeaconMaxError(PADAPTER padapter, uint8_t InfraMode); -void _InitBurstPktLen_8711BB(PADAPTER Adapter); -#ifdef CONFIG_WOWLAN -void _8051Reset8711b(PADAPTER padapter); -void Hal_DetectWoWMode(PADAPTER pAdapter); -#endif //CONFIG_WOWLAN - -void rtl8711b_start_thread(_adapter *padapter); -void rtl8711b_stop_thread(_adapter *padapter); - -#if defined(CONFIG_CHECK_BT_HANG) && defined(CONFIG_BT_COEXIST) -void rtl8711bb_init_checkbthang_workqueue(_adapter * adapter); -void rtl8711bb_free_checkbthang_workqueue(_adapter * adapter); -void rtl8711bb_cancle_checkbthang_workqueue(_adapter * adapter); -void rtl8711bb_hal_check_bt_hang(_adapter * adapter); -#endif - -#ifdef CONFIG_WOWLAN -void rtw_get_current_ip_address(PADAPTER padapter, uint8_t *pcurrentip); -void rtw_get_sec_iv(PADAPTER padapter, uint8_t*pcur_dot11txpn, uint8_t *StaAddr); -#endif - -uint32_t rtl8710b_wlan_suspend(uint32_t expected_idle_time, void *param); -uint32_t rtl8710b_wlan_late_resume(uint32_t expected_idle_time, void *param); -uint32_t rtl8710b_wlan_resume(uint32_t expected_idle_time, void *param); - -#ifdef CONFIG_GPIO_WAKEUP -void HalSetOutPutGPIO(PADAPTER padapter, uint8_t index, uint8_t OutPutValue); -#endif - -void CCX_FwC2HTxRpt_8711B(PADAPTER padapter, uint8_t *pdata, uint8_t len); -int32_t c2h_id_filter_ccx_8711B(uint8_t *buf); -int32_t c2h_handler_8711B(PADAPTER padapter, uint8_t *pC2hEvent); -uint8_t MRateToHwRate8723B(uint8_t rate); -uint8_t HwRateToMRate8723B(uint8_t rate); - -#ifdef CONFIG_RF_GAIN_OFFSET -void Hal_ReadRFGainOffset(PADAPTER pAdapter,uint8_t* hwinfo,BOOLEAN AutoLoadFail); -#endif //CONFIG_RF_GAIN_OFFSET - - -//1TODO: Chris -#if 1 - -//============= -// [1] Rx Buffer Descriptor (for PCIE) buffer descriptor architecture -//DWORD 0 -#define SET_RX_BUFFER_DESC_DATA_LENGTH_92E(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 0, 14, __Value) -#define SET_RX_BUFFER_DESC_LS_92E(__pRxStatusDesc,__Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 14, 1, __Value) -#define SET_RX_BUFFER_DESC_FS_92E(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 15, 1, __Value) -#define SET_RX_BUFFER_DESC_RX_TAG_92E(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 16, 13, __Value) - -#define GET_RX_BUFFER_DESC_OWN_92E(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 31, 1) -#define GET_RX_BUFFER_DESC_LS_92E(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 14, 1) -#define GET_RX_BUFFER_DESC_FS_92E(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 15, 1) -#define GET_RX_BUFFER_DESC_RX_TAG_92E(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 16, 13) -#define GET_RX_BUFFER_DESC_TOTAL_LENGTH_92E(__pRxStatusDesc)LE_BITS_TO_4BYTE( __pRxStatusDesc, 0, 14) - - -//DWORD 1 -#define SET_RX_BUFFER_PHYSICAL_LOW_92E(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc+4, 0, 32, __Value) -#define GET_RX_BUFFER_PHYSICAL_LOW_92E(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+4, 0, 32) - -//DWORD 2 -#define SET_RX_BUFFER_PHYSICAL_HIGH_92E(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc+8, 0, 32, __Value) - - -//=====Tx Desc Buffer content - -// config element for each tx buffer -/* -#define SET_TXBUFFER_DESC_LEN_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*16), 0, 16, __Valeu) -#define SET_TXBUFFER_DESC_AMSDU_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*16), 31, 1, __Valeu) -#define SET_TXBUFFER_DESC_ADD_LOW_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*16)+4, 0, 32, __Valeu) -#define SET_TXBUFFER_DESC_ADD_HIGT_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*16)+8, 0, 32, __Valeu) -*/ -#define SET_TXBUFFER_DESC_LEN_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*8), 0, 16, __Valeu) -#define SET_TXBUFFER_DESC_AMSDU_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*8), 31, 1, __Valeu) -#define SET_TXBUFFER_DESC_ADD_LOW_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*8)+4, 0, 32, __Valeu) -#define SET_TXBUFFER_DESC_ADD_HIGT_WITH_OFFSET(__pTxDesc, __Offset, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc+(__Offset*16)+8, 0, 32, __Valeu) - -// Dword 0 -#define SET_TX_BUFF_DESC_LEN_0_92E(__pTxDesc, __Valeu) SET_BITS_TO_LE_4BYTE(__pTxDesc, 0, 16, __Valeu) -#define SET_TX_BUFF_DESC_PSB_92E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 16, 8, __Value) -#define SET_TX_BUFF_DESC_OWN_92E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 31, 1, __Value) -// Dword 1 -#define SET_TX_BUFF_DESC_ADDR_LOW_0_92E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 0, 32, __Value) -#define GET_TX_DESC_TX_BUFFER_ADDRESS_92E(__pTxDesc) LE_BITS_TO_4BYTE(__pTxDesc+4, 0,32) - - -// Dword 2 -#define SET_TX_BUFF_DESC_ADDR_HIGH_0_92E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 0, 32, __Value) -// Dword 3, RESERVED - - -#define SET_TX_DESC_OWN_92E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 31, 1, __Value) - -#endif - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_ap.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_ap.h deleted file mode 100644 index b317d4d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_ap.h +++ /dev/null @@ -1,65 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTW_AP_H_ -#define __RTW_AP_H_ - -//#include - - -#ifdef CONFIG_AP_MODE - -//external function -extern void rtw_indicate_sta_assoc_event(_adapter *padapter, struct sta_info *psta); -extern void rtw_indicate_sta_disassoc_event(_adapter *padapter, struct sta_info *psta); - - -void init_mlme_ap_info(_adapter *padapter); -void free_mlme_ap_info(_adapter *padapter); -//void update_BCNTIM(_adapter *padapter); -void rtw_add_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, uint8_t index, uint8_t *data, uint8_t len); -void rtw_remove_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, uint8_t index); -void update_beacon(_adapter *padapter, uint8_t ie_id, uint8_t *oui, uint8_t tx); -void add_RATid(_adapter *padapter, struct sta_info *psta, uint8_t rssi_level); -void expire_timeout_chk(_adapter *padapter); -void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta); -int rtw_check_beacon_data(_adapter *padapter, uint8_t *pbuf, int len); -void rtw_set_macaddr_acl(_adapter *padapter, int mode); -int rtw_acl_add_sta(_adapter *padapter, uint8_t *addr); -int rtw_acl_remove_sta(_adapter *padapter, uint8_t *addr); -int rtw_generate_bcn_ie(_adapter *adapter, uint8_t *ssid, uint16_t ssid_len, uint8_t *ie); -#if USE_DEDICATED_BCN_TX -struct xmit_frame *alloc_bcn_xmitframe(_adapter *padapter); -#endif - -#ifdef CONFIG_NATIVEAP_MLME -void associated_clients_update(_adapter *padapter, uint8_t updated); -void bss_cap_update_on_sta_join(_adapter *padapter, struct sta_info *psta); -uint8_t bss_cap_update_on_sta_leave(_adapter *padapter, struct sta_info *psta); -void sta_info_update(_adapter *padapter, struct sta_info *psta); -void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta); -uint8_t ap_free_sta(_adapter *padapter, struct sta_info *psta, uint16_t reason); -int rtw_sta_flush(_adapter *padapter); -void start_ap_mode(_adapter *padapter); -void stop_ap_mode(_adapter *padapter); -#endif -#endif //end of CONFIG_AP_MODE - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_byteorder.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_byteorder.h deleted file mode 100644 index 208d366..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_byteorder.h +++ /dev/null @@ -1,53 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _RTL871X_BYTEORDER_H_ -#define _RTL871X_BYTEORDER_H_ - -#include - -#if defined (CONFIG_LITTLE_ENDIAN) && defined (CONFIG_BIG_ENDIAN) -#error "Shall be CONFIG_LITTLE_ENDIAN or CONFIG_BIG_ENDIAN, but not both!\n" -#endif - -#if defined (CONFIG_LITTLE_ENDIAN) -#ifndef CONFIG_PLATFORM_MSTAR389 -# include -#endif -#elif defined (CONFIG_BIG_ENDIAN) -# include -#else -# error "Must be LITTLE/BIG Endian Host" -#endif - -#ifdef CONFIG_BIG_ENDIAN -#define _htons(x) (x) -#define _ntohs(x) (x) -#define _htonl(x) (x) -#define _ntohl(x) (x) -#else /* !CONFIG_BIG_ENDIAN */ -uint16_t _htons(uint16_t x); -uint16_t _ntohs(uint16_t x); -uint32_t _htonl(uint32_t x); -uint32_t _ntohl(uint32_t x); -#endif /* CONFIG_BIG_ENDIAN */ - - -#endif /* _RTL871X_BYTEORDER_H_ */ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_cmd.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_cmd.h deleted file mode 100644 index e577549..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_cmd.h +++ /dev/null @@ -1,1185 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTW_CMD_H_ -#define __RTW_CMD_H_ - -#include "drv_types.h" -#include -#include - -#define C2H_MEM_SZ (16*1024) -//#define CMD_RSP_BUF 0 -//#define CMD_DBG 0 - -#ifndef CONFIG_RTL8711FW - - #include // - #include // - - #define FREE_CMDOBJ_SZ 128 - - #define MAX_CMDSZ 1024 - #define MAX_RSPSZ 512 - #define MAX_EVTSZ 1024 - -#if defined(PLATFORM_OS_CE) || defined(PLATFORM_ECOS) || defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) - #define CMDBUFF_ALIGN_SZ 4 -#else - #define CMDBUFF_ALIGN_SZ 512 -#endif - - struct cmd_obj { - _adapter *padapter; - uint16_t cmdcode; - uint8_t res; - uint8_t *parmbuf; - uint32_t cmdsz; - uint8_t *rsp; - uint32_t rspsz; - //_sema cmd_sem; - _list list; - }; - - struct cmd_priv { - //_sema cmd_done_sema; - _queue cmd_queue; -#ifdef CMD_BUF - uint8_t *cmd_buf; //shall be non-paged, and 4 bytes aligned - uint8_t *cmd_allocated_buf; -#endif -#ifdef CMD_RSP_BUF - uint8_t *rsp_buf; //shall be non-paged, and 4 bytes aligned - uint8_t *rsp_allocated_buf; - uint32_t rsp_cnt; -#endif -#ifdef CMD_DBG - uint8_t cmd_seq; - uint32_t cmd_issued_cnt; - uint32_t cmd_done_cnt; -#endif - uint8_t cmdthd_running; - _adapter *padapter; - }; - -#ifdef CONFIG_EVENT_THREAD_MODE - struct evt_obj { - uint16_t evtcode; - uint8_t res; - uint8_t *parmbuf; - uint32_t evtsz; - _list list; - }; -#endif - - struct evt_priv { -#ifdef CONFIG_EVENT_THREAD_MODE - _sema evt_notify; - _sema terminate_evtthread_sema; - _queue evt_queue; -#endif - -#ifdef CONFIG_H2CLBK - _sema lbkevt_done; - uint8_t lbkevt_limit; - uint8_t lbkevt_num; - uint8_t *cmdevt_parm; -#endif - ATOMIC_T event_seq; - uint8_t *evt_buf; //shall be non-paged, and 4 bytes aligned - uint8_t *evt_allocated_buf; - uint32_t evt_done_cnt; -#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) - uint8_t *c2h_mem; - uint8_t *allocated_c2h_mem; -#ifdef PLATFORM_OS_XP - PMDL pc2h_mdl; -#endif -#endif - - }; - -#define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \ -do {\ - rtw_init_listhead(&pcmd->list);\ - pcmd->cmdcode = code;\ - pcmd->parmbuf = (uint8_t *)(pparm);\ - pcmd->cmdsz = sizeof (*pparm);\ - pcmd->rsp = NULL;\ - pcmd->rspsz = 0;\ -} while(0) - -extern uint32_t rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj); -extern struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv); -extern void rtw_free_cmd_obj(struct cmd_obj *pcmd); - -#ifdef CONFIG_EVENT_THREAD_MODE -extern uint32_t rtw_enqueue_evt(struct evt_priv *pevtpriv, struct evt_obj *obj); -extern struct evt_obj *rtw_dequeue_evt(_queue *queue); -extern void rtw_free_evt_obj(struct evt_obj *pcmd); -#endif - -thread_return rtw_cmd_thread(thread_context context); - -extern uint32_t rtw_init_cmd_priv (struct cmd_priv *pcmdpriv); -extern void rtw_free_cmd_priv (struct cmd_priv *pcmdpriv); - -extern uint32_t rtw_init_evt_priv (struct evt_priv *pevtpriv); -extern void rtw_free_evt_priv (struct evt_priv *pevtpriv); -extern void rtw_cmd_clr_isr(struct cmd_priv *pcmdpriv); -extern void rtw_evt_notify_isr(struct evt_priv *pevtpriv); -#ifdef CONFIG_P2P -uint8_t p2p_protocol_wk_cmd(_adapter*padapter, int intCmdType ); -#endif //CONFIG_P2P - -#else /* CONFIG_RTL8711FW */ - #include -#endif /* CONFIG_RTL8711FW */ - -enum rtw_drvextra_cmd_id -{ - NONE_WK_CID, - DYNAMIC_CHK_WK_CID, - DM_CTRL_WK_CID, - PBC_POLLING_WK_CID, - POWER_SAVING_CTRL_WK_CID,//IPS,AUTOSuspend - LPS_CTRL_WK_CID, - ANT_SELECT_WK_CID, - P2P_PS_WK_CID, - //P2P_PROTO_WK_CID, - CHECK_HIQ_WK_CID,//for softap mode, check hi queue if empty - INTEl_WIDI_WK_CID, - C2H_WK_CID, - RTP_TIMER_CFG_WK_CID, - MAX_WK_CID -}; - -enum LPS_CTRL_TYPE -{ - LPS_CTRL_SCAN=0, - LPS_CTRL_JOINBSS=1, - LPS_CTRL_CONNECT=2, - LPS_CTRL_DISCONNECT=3, - LPS_CTRL_SPECIAL_PACKET=4, - LPS_CTRL_LEAVE=5, -}; - -enum RFINTFS { - SWSI, - HWSI, - HWPI, -}; - -/* -Caller Mode: Infra, Ad-HoC(C) - -Notes: To enter USB suspend mode - -Command Mode - -*/ -struct usb_suspend_parm { - uint32_t action;// 1: sleep, 0:resume -}; - -/* -Caller Mode: Infra, Ad-HoC - -Notes: To join a known BSS. - -Command-Event Mode - -*/ - -/* -Caller Mode: Infra, Ad-Hoc - -Notes: To join the specified bss - -Command Event Mode - -*/ -struct joinbss_parm { - WLAN_BSSID_EX network; -}; - -/* -Caller Mode: Infra, Ad-HoC(C) - -Notes: To disconnect the current associated BSS - -Command Mode - -*/ -struct disconnect_parm { - uint32_t rsvd; -}; - -/* -Caller Mode: AP, Ad-HoC(M) - -Notes: To create a BSS - -Command Mode -*/ -struct createbss_parm { - WLAN_BSSID_EX network; -}; - -/* -Caller Mode: AP, Ad-HoC, Infra - -Notes: To set the NIC mode of RTL8711 - -Command Mode - -The definition of mode: - -#define IW_MODE_AUTO 0 // Let the driver decides which AP to join -#define IW_MODE_ADHOC 1 // Single cell network (Ad-Hoc Clients) -#define IW_MODE_INFRA 2 // Multi cell network, roaming, .. -#define IW_MODE_MASTER 3 // Synchronisation master or Access Point -#define IW_MODE_REPEAT 4 // Wireless Repeater (forwarder) -#define IW_MODE_SECOND 5 // Secondary master/repeater (backup) -#define IW_MODE_MONITOR 6 // Passive monitor (listen only) - -*/ -struct setopmode_parm { - uint8_t mode; - uint8_t rsvd[3]; -}; - -/* -Caller Mode: AP, Ad-HoC, Infra - -Notes: To ask RTL8711 performing site-survey - -Command-Event Mode - -*/ - -#if defined(PLATFORM_ECOS) || defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) -#define RTW_SSID_SCAN_AMOUNT 1 //Reduce ssid scan amount due to memory limitation - Alex Fang -#else -#define RTW_SSID_SCAN_AMOUNT 9 // for WEXT_CSCAN_AMOUNT 9 -#endif - -struct sitesurvey_parm { - sint scan_mode; //active: 1, passive: 0 - sint bsslimit; // 1 ~ 48 - // for up to 9 probreq with specific ssid - NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT]; -}; - -/* -Caller Mode: Any - -Notes: To set the auth type of RTL8711. open/shared/802.1x - -Command Mode - -*/ -struct setauth_parm { - uint8_t mode; //0: legacy open, 1: legacy shared 2: 802.1x - uint8_t _1x; //0: PSK, 1: TLS - uint8_t rsvd[2]; -}; - -/* -Caller Mode: Infra - -a. algorithm: wep40, wep104, tkip & aes -b. keytype: grp key/unicast key -c. key contents - -when shared key ==> keyid is the camid -when 802.1x ==> keyid [0:1] ==> grp key -when 802.1x ==> keyid > 2 ==> unicast key - -*/ -struct setkey_parm { - uint8_t algorithm; // encryption algorithm, could be none, wep40, TKIP, CCMP, wep104 - uint8_t keyid; - uint8_t grpkey; // 1: this is the grpkey for 802.1x. 0: this is the unicast key for 802.1x - uint8_t set_tx; // 1: main tx key for wep. 0: other key. - uint8_t key[16]; // this could be 40 or 104 -}; - -/* -When in AP or Ad-Hoc mode, this is used to -allocate an sw/hw entry for a newly associated sta. - -Command - -when shared key ==> algorithm/keyid - -*/ -struct set_stakey_parm { - uint8_t addr[ETH_ALEN]; - uint8_t algorithm; - uint8_t id;// currently for erasing cam entry if algorithm == _NO_PRIVACY_ - uint8_t key[16]; -}; - -struct set_stakey_rsp { - uint8_t addr[ETH_ALEN]; - uint8_t keyid; - uint8_t rsvd; -}; - -/* -Caller Ad-Hoc/AP - -Command -Rsp(AID == CAMID) mode - -This is to force fw to add an sta_data entry per driver's request. - -FW will write an cam entry associated with it. - -*/ -struct set_assocsta_parm { - uint8_t addr[ETH_ALEN]; -}; - -struct set_assocsta_rsp { - uint8_t cam_id; - uint8_t rsvd[3]; -}; - -/* - Caller Ad-Hoc/AP - - Command mode - - This is to force fw to del an sta_data entry per driver's request - - FW will invalidate the cam entry associated with it. - -*/ -struct del_assocsta_parm { - uint8_t addr[ETH_ALEN]; -}; - -/* -Caller Mode: AP/Ad-HoC(M) - -Notes: To notify fw that given staid has changed its power state - -Command Mode - -*/ -struct setstapwrstate_parm { - uint8_t staid; - uint8_t status; - uint8_t hwaddr[6]; -}; - -/* -Caller Mode: Any - -Notes: To setup the basic rate of RTL8711 - -Command Mode - -*/ -struct setbasicrate_parm { - uint8_t basicrates[NumRates]; -}; - -/* -Caller Mode: Any - -Notes: To read the current basic rate - -Command-Rsp Mode - -*/ -struct getbasicrate_parm { - uint32_t rsvd; -}; - -struct getbasicrate_rsp { - uint8_t basicrates[NumRates]; -}; - -/* -Caller Mode: Any - -Notes: To setup the data rate of RTL8711 - -Command Mode - -*/ -struct setdatarate_parm { -#ifdef MP_FIRMWARE_OFFLOAD - uint32_t curr_rateidx; -#else - uint8_t mac_id; - uint8_t datarates[NumRates]; -#endif -}; - -/* -Caller Mode: Any - -Notes: To read the current data rate - -Command-Rsp Mode - -*/ -struct getdatarate_parm { - uint32_t rsvd; - -}; -struct getdatarate_rsp { - uint8_t datarates[NumRates]; -}; - - -/* -Caller Mode: Any -AP: AP can use the info for the contents of beacon frame -Infra: STA can use the info when sitesurveying -Ad-HoC(M): Like AP -Ad-HoC(C): Like STA - - -Notes: To set the phy capability of the NIC - -Command Mode - -*/ - -struct setphyinfo_parm { - struct regulatory_class class_sets[NUM_REGULATORYS]; - uint8_t status; -}; - -struct getphyinfo_parm { - uint32_t rsvd; -}; - -struct getphyinfo_rsp { - struct regulatory_class class_sets[NUM_REGULATORYS]; - uint8_t status; -}; - -/* -Caller Mode: Any - -Notes: To set the channel/modem/band -This command will be used when channel/modem/band is changed. - -Command Mode - -*/ -struct setphy_parm { - uint8_t rfchannel; - uint8_t modem; -}; - -/* -Caller Mode: Any - -Notes: To get the current setting of channel/modem/band - -Command-Rsp Mode - -*/ -struct getphy_parm { - uint32_t rsvd; - -}; -struct getphy_rsp { - uint8_t rfchannel; - uint8_t modem; -}; - -struct readBB_parm { - uint8_t offset; -}; -struct readBB_rsp { - uint8_t value; -}; - -struct readTSSI_parm { - uint8_t offset; -}; -struct readTSSI_rsp { - uint8_t value; -}; - -struct writeBB_parm { - uint8_t offset; - uint8_t value; -}; - -struct readRF_parm { - uint8_t offset; -}; -struct readRF_rsp { - uint32_t value; -}; - -struct writeRF_parm { - uint32_t offset; - uint32_t value; -}; - -struct getrfintfs_parm { - uint8_t rfintfs; -}; - - -struct Tx_Beacon_param -{ - WLAN_BSSID_EX network; -}; - -/* - Notes: This command is used for H2C/C2H loopback testing - - mac[0] == 0 - ==> CMD mode, return H2C_SUCCESS. - The following condition must be ture under CMD mode - mac[1] == mac[4], mac[2] == mac[3], mac[0]=mac[5]= 0; - s0 == 0x1234, s1 == 0xabcd, w0 == 0x78563412, w1 == 0x5aa5def7; - s2 == (b1 << 8 | b0); - - mac[0] == 1 - ==> CMD_RSP mode, return H2C_SUCCESS_RSP - - The rsp layout shall be: - rsp: parm: - mac[0] = mac[5]; - mac[1] = mac[4]; - mac[2] = mac[3]; - mac[3] = mac[2]; - mac[4] = mac[1]; - mac[5] = mac[0]; - s0 = s1; - s1 = swap16(s0); - w0 = swap32(w1); - b0 = b1 - s2 = s0 + s1 - b1 = b0 - w1 = w0 - - mac[0] == 2 - ==> CMD_EVENT mode, return H2C_SUCCESS - The event layout shall be: - event: parm: - mac[0] = mac[5]; - mac[1] = mac[4]; - mac[2] = event's sequence number, starting from 1 to parm's marc[3] - mac[3] = mac[2]; - mac[4] = mac[1]; - mac[5] = mac[0]; - s0 = swap16(s0) - event.mac[2]; - s1 = s1 + event.mac[2]; - w0 = swap32(w0); - b0 = b1 - s2 = s0 + event.mac[2] - b1 = b0 - w1 = swap32(w1) - event.mac[2]; - - parm->mac[3] is the total event counts that host requested. - - - event will be the same with the cmd's param. - -*/ - -#ifdef CONFIG_H2CLBK - -struct seth2clbk_parm { - uint8_t mac[6]; - uint16_t s0; - uint16_t s1; - uint32_t w0; - uint8_t b0; - uint16_t s2; - uint8_t b1; - uint32_t w1; -}; - -struct geth2clbk_parm { - uint32_t rsv; -}; - -struct geth2clbk_rsp { - uint8_t mac[6]; - uint16_t s0; - uint16_t s1; - uint32_t w0; - uint8_t b0; - uint16_t s2; - uint8_t b1; - uint32_t w1; -}; - -#endif /* CONFIG_H2CLBK */ - -// CMD param Formart for driver extra cmd handler -struct drvextra_cmd_parm { - int ec_id; //extra cmd id - int type_size; // Can use this field as the type id or command size - unsigned char *pbuf; -}; - -#ifdef CONFIG_P2P_NEW -// CMD param Formart for p2p cmd handler -struct p2p_cmd_parm { - int id; //p2p cmd id - int type_size; // Can use this field as the type id or command size - unsigned char *pbuf; -}; -#endif -/*------------------- Below are used for RF/BB tunning ---------------------*/ - -struct setantenna_parm { - uint8_t tx_antset; - uint8_t rx_antset; - uint8_t tx_antenna; - uint8_t rx_antenna; -}; - -struct enrateadaptive_parm { - uint32_t en; -}; - -struct settxagctbl_parm { - uint32_t txagc[MAX_RATES_LENGTH]; -}; - -struct gettxagctbl_parm { - uint32_t rsvd; -}; -struct gettxagctbl_rsp { - uint32_t txagc[MAX_RATES_LENGTH]; -}; - -struct setagcctrl_parm { - uint32_t agcctrl; // 0: pure hw, 1: fw -}; - - -struct setssup_parm { - uint32_t ss_ForceUp[MAX_RATES_LENGTH]; -}; - -struct getssup_parm { - uint32_t rsvd; -}; -struct getssup_rsp { - uint8_t ss_ForceUp[MAX_RATES_LENGTH]; -}; - - -struct setssdlevel_parm { - uint8_t ss_DLevel[MAX_RATES_LENGTH]; -}; - -struct getssdlevel_parm { - uint32_t rsvd; -}; -struct getssdlevel_rsp { - uint8_t ss_DLevel[MAX_RATES_LENGTH]; -}; - -struct setssulevel_parm { - uint8_t ss_ULevel[MAX_RATES_LENGTH]; -}; - -struct getssulevel_parm { - uint32_t rsvd; -}; -struct getssulevel_rsp { - uint8_t ss_ULevel[MAX_RATES_LENGTH]; -}; - - -struct setcountjudge_parm { - uint8_t count_judge[MAX_RATES_LENGTH]; -}; - -struct getcountjudge_parm { - uint32_t rsvd; -}; -struct getcountjudge_rsp { - uint8_t count_judge[MAX_RATES_LENGTH]; -}; - - -struct setratable_parm { - uint8_t ss_ForceUp[NumRates]; - uint8_t ss_ULevel[NumRates]; - uint8_t ss_DLevel[NumRates]; - uint8_t count_judge[NumRates]; -}; - -struct getratable_parm { - uint rsvd; -}; -struct getratable_rsp { - uint8_t ss_ForceUp[NumRates]; - uint8_t ss_ULevel[NumRates]; - uint8_t ss_DLevel[NumRates]; - uint8_t count_judge[NumRates]; -}; - - -//to get TX,RX retry count -struct gettxretrycnt_parm{ - unsigned int rsvd; -}; -struct gettxretrycnt_rsp{ - unsigned long tx_retrycnt; -}; - -struct getrxretrycnt_parm{ - unsigned int rsvd; -}; -struct getrxretrycnt_rsp{ - unsigned long rx_retrycnt; -}; - -//to get BCNOK,BCNERR count -struct getbcnokcnt_parm{ - unsigned int rsvd; -}; -struct getbcnokcnt_rsp{ - unsigned long bcnokcnt; -}; - -struct getbcnerrcnt_parm{ - unsigned int rsvd; -}; -struct getbcnerrcnt_rsp{ - unsigned long bcnerrcnt; -}; - -// to get current TX power level -struct getcurtxpwrlevel_parm{ - unsigned int rsvd; -}; -struct getcurtxpwrlevel_rsp{ - unsigned short tx_power; -}; - -///TODO -#if 0 - -struct setprobereqextraie_parm { - unsigned char e_id; - unsigned char ie_len; - unsigned char ie[0]; -}; - -struct setassocreqextraie_parm { - unsigned char e_id; - unsigned char ie_len; - unsigned char ie[0]; -}; - -struct setproberspextraie_parm { - unsigned char e_id; - unsigned char ie_len; - unsigned char ie[0]; -}; - -struct setassocrspextraie_parm { - unsigned char e_id; - unsigned char ie_len; - unsigned char ie[0]; -}; - -#endif //#if 0 - -struct addBaReq_parm -{ - unsigned int tid; - uint8_t addr[ETH_ALEN]; -}; - -/*H2C Handler index: 46 */ -struct SetChannel_parm -{ - uint32_t curr_ch; -}; - -#ifdef MP_FIRMWARE_OFFLOAD -/*H2C Handler index: 47 */ -struct SetTxPower_parm -{ - uint8_t TxPower; -}; - -/*H2C Handler index: 48 */ -struct SwitchAntenna_parm -{ - uint16_t antenna_tx; - uint16_t antenna_rx; -// R_ANTENNA_SELECT_CCK cck_txrx; - uint8_t cck_txrx; -}; - -/*H2C Handler index: 49 */ -struct SetCrystalCap_parm -{ - uint32_t curr_crystalcap; -}; - -/*H2C Handler index: 50 */ -struct SetSingleCarrierTx_parm -{ - uint8_t bStart; -}; - -/*H2C Handler index: 51 */ -struct SetSingleToneTx_parm -{ - uint8_t bStart; - uint8_t curr_rfpath; -}; - -/*H2C Handler index: 52 */ -struct SetCarrierSuppressionTx_parm -{ - uint8_t bStart; - uint32_t curr_rateidx; -}; - -/*H2C Handler index: 53 */ -struct SetContinuousTx_parm -{ - uint8_t bStart; - uint8_t CCK_flag; /*1:CCK 2:OFDM*/ - uint32_t curr_rateidx; -}; - -/*H2C Handler index: 54 */ -struct SwitchBandwidth_parm -{ - uint8_t curr_bandwidth; -}; - -#endif /* MP_FIRMWARE_OFFLOAD */ - -/*H2C Handler index: 59 */ -struct SetChannelPlan_param -{ - uint8_t channel_plan; -}; - -//TODO -#if 0 -/*H2C Handler index: 60 */ -struct LedBlink_param -{ - PLED_871x pLed; -}; -#endif //#if 0 - -/*H2C Handler index: 61 */ -struct SetChannelSwitch_param -{ - uint8_t new_ch_no; -}; - -/*H2C Handler index: 62 */ -struct TDLSoption_param -{ - uint8_t addr[ETH_ALEN]; - uint8_t option; -}; - -#define GEN_CMD_CODE(cmd) cmd ## _CMD_ - - -/* - -Result: -0x00: success -0x01: sucess, and check Response. -0x02: cmd ignored due to duplicated sequcne number -0x03: cmd dropped due to invalid cmd code -0x04: reserved. - -*/ - -#define H2C_RSP_OFFSET 512 - -#define H2C_SUCCESS 0x00 -#define H2C_SUCCESS_RSP 0x01 -#define H2C_DUPLICATED 0x02 -#define H2C_DROPPED 0x03 -#define H2C_PARAMETERS_ERROR 0x04 -#define H2C_REJECTED 0x05 -#define H2C_CMD_OVERFLOW 0x06 -#define H2C_RESERVED 0x07 - -extern uint8_t rtw_setassocsta_cmd(_adapter *padapter, uint8_t *mac_addr); -extern uint8_t rtw_setstandby_cmd(_adapter *padapter, uint action); -extern uint8_t rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *pssid, int ssid_max_num); -extern uint8_t rtw_createbss_cmd(_adapter *padapter); -extern uint8_t rtw_createbss_cmd_ex(_adapter *padapter, unsigned char *pbss, unsigned int sz); -extern uint8_t rtw_setphy_cmd(_adapter *padapter, uint8_t modem, uint8_t ch); -extern uint8_t rtw_setstakey_cmd(_adapter *padapter, uint8_t *psta, uint8_t unicast_key); -extern uint8_t rtw_clearstakey_cmd(_adapter *padapter, uint8_t *psta, uint8_t entry, uint8_t enqueue); -extern uint8_t rtw_joinbss_cmd(_adapter *padapter, struct wlan_network* pnetwork); -extern uint8_t rtw_disassoc_cmd(_adapter *padapter); -extern uint8_t rtw_setopmode_cmd(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype); -extern uint8_t rtw_setdatarate_cmd(_adapter *padapter, uint8_t *rateset); -extern uint8_t rtw_setbasicrate_cmd(_adapter *padapter, uint8_t *rateset); -extern uint8_t rtw_setbbreg_cmd(_adapter * padapter, uint8_t offset, uint8_t val); -extern uint8_t rtw_setrfreg_cmd(_adapter * padapter, uint8_t offset, uint32_t val); -extern uint8_t rtw_getbbreg_cmd(_adapter * padapter, uint8_t offset, uint8_t * pval); -extern uint8_t rtw_getrfreg_cmd(_adapter * padapter, uint8_t offset, uint8_t * pval); -extern uint8_t rtw_setrfintfs_cmd(_adapter *padapter, uint8_t mode); -extern uint8_t rtw_setrttbl_cmd(_adapter *padapter, struct setratable_parm *prate_table); -extern uint8_t rtw_getrttbl_cmd(_adapter *padapter, struct getratable_rsp *pval); - -extern uint8_t rtw_gettssi_cmd(_adapter *padapter, uint8_t offset,uint8_t *pval); -extern uint8_t rtw_setfwdig_cmd(_adapter*padapter, uint8_t type); -extern uint8_t rtw_setfwra_cmd(_adapter*padapter, uint8_t type); - -extern uint8_t rtw_addbareq_cmd(_adapter*padapter, uint8_t tid, uint8_t *addr); - -extern uint8_t rtw_dynamic_chk_wk_cmd(_adapter *adapter); -#ifdef CONFIG_P2P_NEW -uint8_t rtw_p2p_cmd(_adapter*padapter, int subid); -#endif -uint8_t rtw_lps_ctrl_wk_cmd(_adapter*padapter, uint8_t lps_ctrl_type, uint8_t enqueue); -#if (RATE_ADAPTIVE_SUPPORT==1) -uint8_t rtw_rpt_timer_cfg_cmd(_adapter*padapter, uint16_t minRptTime); -#endif - -#ifdef CONFIG_ANTENNA_DIVERSITY -extern uint8_t rtw_antenna_select_cmd(_adapter*padapter, uint8_t antenna,uint8_t enqueue); -#endif - -extern uint8_t rtw_ps_cmd(_adapter*padapter); - -#ifdef CONFIG_AP_MODE -uint8_t rtw_chk_hi_queue_cmd(_adapter*padapter); -#endif - -extern uint8_t rtw_set_chplan_cmd(_adapter*padapter, uint8_t chplan, uint8_t enaueue); -//TODO -//extern uint8_t rtw_led_blink_cmd(_adapter*padapter, PLED_871x pLed); -extern uint8_t rtw_set_csa_cmd(_adapter*padapter, uint8_t new_ch_no); -extern uint8_t rtw_tdls_cmd(_adapter*padapter, uint8_t *addr, uint8_t option); - -extern uint8_t rtw_c2h_wk_cmd(PADAPTER padapter); - -uint8_t rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf); -#ifdef CONFIG_P2P_NEW -uint8_t rtw_p2p_cmd_hdl(_adapter *padapter, unsigned char *pbuf); -#endif -extern void rtw_survey_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); -extern void rtw_disassoc_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); -extern void rtw_joinbss_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); -extern void rtw_createbss_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); -extern void rtw_getbbrfreg_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); -extern void rtw_readtssi_cmdrsp_callback(_adapter* padapter, struct cmd_obj *pcmd); - -extern void rtw_setstaKey_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); -extern void rtw_setassocsta_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); -extern void rtw_getrttbl_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); -extern void rtw_set_channel_plan_cmd_callback(_adapter* padapter, struct cmd_obj *pcmd); - - -struct _cmd_callback { - uint32_t cmd_code; - void (*callback)(_adapter *padapter, struct cmd_obj *cmd); -}; - -enum rtw_h2c_cmd -{ - GEN_CMD_CODE(_Read_MACREG) , /*0*/ - GEN_CMD_CODE(_Write_MACREG) , - GEN_CMD_CODE(_Read_BBREG) , - GEN_CMD_CODE(_Write_BBREG) , - GEN_CMD_CODE(_Read_RFREG) , - GEN_CMD_CODE(_Write_RFREG) , /*5*/ - GEN_CMD_CODE(_Read_EEPROM) , - GEN_CMD_CODE(_Write_EEPROM) , - GEN_CMD_CODE(_Read_EFUSE) , - GEN_CMD_CODE(_Write_EFUSE) , - - GEN_CMD_CODE(_Read_CAM) , /*10*/ - GEN_CMD_CODE(_Write_CAM) , - GEN_CMD_CODE(_setBCNITV), - GEN_CMD_CODE(_setMBIDCFG), - GEN_CMD_CODE(_JoinBss), /*14*/ - GEN_CMD_CODE(_DisConnect) , /*15*/ - GEN_CMD_CODE(_CreateBss) , - GEN_CMD_CODE(_SetOpMode) , - GEN_CMD_CODE(_SiteSurvey), /*18*/ - GEN_CMD_CODE(_SetAuth) , - - GEN_CMD_CODE(_SetKey) , /*20*/ - GEN_CMD_CODE(_SetStaKey) , - GEN_CMD_CODE(_SetAssocSta) , - GEN_CMD_CODE(_DelAssocSta) , - GEN_CMD_CODE(_SetStaPwrState) , - GEN_CMD_CODE(_SetBasicRate) , /*25*/ - GEN_CMD_CODE(_GetBasicRate) , - GEN_CMD_CODE(_SetDataRate) , - GEN_CMD_CODE(_GetDataRate) , - GEN_CMD_CODE(_SetPhyInfo) , - - GEN_CMD_CODE(_GetPhyInfo) , /*30*/ - GEN_CMD_CODE(_SetPhy) , - GEN_CMD_CODE(_GetPhy) , - GEN_CMD_CODE(_readRssi) , - GEN_CMD_CODE(_readGain) , - GEN_CMD_CODE(_SetAtim) , /*35*/ - GEN_CMD_CODE(_SetPwrMode) , - GEN_CMD_CODE(_JoinbssRpt), - GEN_CMD_CODE(_SetRaTable) , - GEN_CMD_CODE(_GetRaTable) , - - GEN_CMD_CODE(_GetCCXReport), /*40*/ - GEN_CMD_CODE(_GetDTMReport), - GEN_CMD_CODE(_GetTXRateStatistics), - GEN_CMD_CODE(_SetUsbSuspend), - GEN_CMD_CODE(_SetH2cLbk), - GEN_CMD_CODE(_AddBAReq) , /*45*/ - GEN_CMD_CODE(_SetChannel), /*46*/ - GEN_CMD_CODE(_SetTxPower), - GEN_CMD_CODE(_SwitchAntenna), - GEN_CMD_CODE(_SetCrystalCap), - GEN_CMD_CODE(_SetSingleCarrierTx), /*50*/ - - GEN_CMD_CODE(_SetSingleToneTx),/*51*/ - GEN_CMD_CODE(_SetCarrierSuppressionTx), - GEN_CMD_CODE(_SetContinuousTx), - GEN_CMD_CODE(_SwitchBandwidth), /*54*/ - GEN_CMD_CODE(_TX_Beacon), /*55*/ - - GEN_CMD_CODE(_Set_MLME_EVT), /*56*/ - GEN_CMD_CODE(_Set_Drv_Extra), /*57*/ - GEN_CMD_CODE(_Set_H2C_MSG), /*58*/ - - GEN_CMD_CODE(_SetChannelPlan), /*59*/ - GEN_CMD_CODE(_LedBlink), /*60*/ - - GEN_CMD_CODE(_SetChannelSwitch), /*61*/ - GEN_CMD_CODE(_TDLS), /*62*/ - GEN_CMD_CODE(_P2P), /*63*/ - - MAX_H2CCMD -}; - -#define _GetBBReg_CMD_ _Read_BBREG_CMD_ -#define _SetBBReg_CMD_ _Write_BBREG_CMD_ -#define _GetRFReg_CMD_ _Read_RFREG_CMD_ -#define _SetRFReg_CMD_ _Write_RFREG_CMD_ - -#ifdef _RTW_CMD_C_ -const struct _cmd_callback rtw_cmd_callback[] = -{ - {GEN_CMD_CODE(_Read_MACREG), NULL}, /*0*/ - {GEN_CMD_CODE(_Write_MACREG), NULL}, -//TODO -// {GEN_CMD_CODE(_Read_BBREG), &rtw_getbbrfreg_cmdrsp_callback}, - {GEN_CMD_CODE(_Read_BBREG), NULL}, - {GEN_CMD_CODE(_Write_BBREG), NULL}, -//TODO -// {GEN_CMD_CODE(_Read_RFREG), &rtw_getbbrfreg_cmdrsp_callback}, - {GEN_CMD_CODE(_Read_RFREG), NULL}, - {GEN_CMD_CODE(_Write_RFREG), NULL}, /*5*/ - {GEN_CMD_CODE(_Read_EEPROM), NULL}, - {GEN_CMD_CODE(_Write_EEPROM), NULL}, - {GEN_CMD_CODE(_Read_EFUSE), NULL}, - {GEN_CMD_CODE(_Write_EFUSE), NULL}, - - {GEN_CMD_CODE(_Read_CAM), NULL}, /*10*/ - {GEN_CMD_CODE(_Write_CAM), NULL}, - {GEN_CMD_CODE(_setBCNITV), NULL}, - {GEN_CMD_CODE(_setMBIDCFG), NULL}, - {GEN_CMD_CODE(_JoinBss), &rtw_joinbss_cmd_callback}, /*14*/ - {GEN_CMD_CODE(_DisConnect), &rtw_disassoc_cmd_callback}, /*15*/ -//TODO -// {GEN_CMD_CODE(_CreateBss), &rtw_createbss_cmd_callback}, - {GEN_CMD_CODE(_CreateBss), NULL}, - {GEN_CMD_CODE(_SetOpMode), NULL}, - {GEN_CMD_CODE(_SiteSurvey), &rtw_survey_cmd_callback}, /*18*/ - {GEN_CMD_CODE(_SetAuth), NULL}, - - {GEN_CMD_CODE(_SetKey), NULL}, /*20*/ - {GEN_CMD_CODE(_SetStaKey), &rtw_setstaKey_cmdrsp_callback}, -//TODO -// {GEN_CMD_CODE(_SetAssocSta), &rtw_setassocsta_cmdrsp_callback}, - {GEN_CMD_CODE(_SetAssocSta), NULL}, - {GEN_CMD_CODE(_DelAssocSta), NULL}, - {GEN_CMD_CODE(_SetStaPwrState), NULL}, - {GEN_CMD_CODE(_SetBasicRate), NULL}, /*25*/ - {GEN_CMD_CODE(_GetBasicRate), NULL}, - {GEN_CMD_CODE(_SetDataRate), NULL}, - {GEN_CMD_CODE(_GetDataRate), NULL}, - {GEN_CMD_CODE(_SetPhyInfo), NULL}, - - {GEN_CMD_CODE(_GetPhyInfo), NULL}, /*30*/ - {GEN_CMD_CODE(_SetPhy), NULL}, - {GEN_CMD_CODE(_GetPhy), NULL}, - {GEN_CMD_CODE(_readRssi), NULL}, - {GEN_CMD_CODE(_readGain), NULL}, - {GEN_CMD_CODE(_SetAtim), NULL}, /*35*/ - {GEN_CMD_CODE(_SetPwrMode), NULL}, - {GEN_CMD_CODE(_JoinbssRpt), NULL}, - {GEN_CMD_CODE(_SetRaTable), NULL}, - {GEN_CMD_CODE(_GetRaTable) , NULL}, - - {GEN_CMD_CODE(_GetCCXReport), NULL}, /*40*/ - {GEN_CMD_CODE(_GetDTMReport), NULL}, - {GEN_CMD_CODE(_GetTXRateStatistics), NULL}, - {GEN_CMD_CODE(_SetUsbSuspend), NULL}, - {GEN_CMD_CODE(_SetH2cLbk), NULL}, - {GEN_CMD_CODE(_AddBAReq), NULL}, /*45*/ - {GEN_CMD_CODE(_SetChannel), NULL}, /*46*/ - {GEN_CMD_CODE(_SetTxPower), NULL}, - {GEN_CMD_CODE(_SwitchAntenna), NULL}, - {GEN_CMD_CODE(_SetCrystalCap), NULL}, - {GEN_CMD_CODE(_SetSingleCarrierTx), NULL}, /*50*/ - - {GEN_CMD_CODE(_SetSingleToneTx), NULL}, /*51*/ - {GEN_CMD_CODE(_SetCarrierSuppressionTx), NULL}, - {GEN_CMD_CODE(_SetContinuousTx), NULL}, - {GEN_CMD_CODE(_SwitchBandwidth), NULL}, /*54*/ - {GEN_CMD_CODE(_TX_Beacon), NULL},/*55*/ - - {GEN_CMD_CODE(_Set_MLME_EVT), NULL},/*56*/ - {GEN_CMD_CODE(_Set_Drv_Extra), NULL},/*57*/ - {GEN_CMD_CODE(_Set_H2C_MSG), NULL},/*58*/ - {GEN_CMD_CODE(_SetChannelPlan), rtw_set_channel_plan_cmd_callback},/*59*/ - {GEN_CMD_CODE(_LedBlink), NULL},/*60*/ - - {GEN_CMD_CODE(_SetChannelSwitch), NULL},/*61*/ - {GEN_CMD_CODE(_TDLS), NULL},/*62*/ -#ifdef CONFIG_P2P_NEW - {GEN_CMD_CODE(_P2P), NULL},/*63*/ -#endif -}; -#endif - -#endif // _CMD_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_debug.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_debug.h deleted file mode 100644 index 5a81290..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_debug.h +++ /dev/null @@ -1,456 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTW_DEBUG_H__ -#define __RTW_DEBUG_H__ - - -#define _drv_always_ 1 -#define _drv_emerg_ 2 -#define _drv_alert_ 3 -#define _drv_crit_ 4 -#define _drv_err_ 5 -#define _drv_warning_ 6 -#define _drv_notice_ 7 -#define _drv_info_ 8 -#define _drv_dump_ 9 -#define _drv_debug_ 10 - - -#define _module_rtl871x_xmit_c_ BIT(0) -#define _module_xmit_osdep_c_ BIT(1) -#define _module_rtl871x_recv_c_ BIT(2) -#define _module_recv_osdep_c_ BIT(3) -#define _module_rtl871x_mlme_c_ BIT(4) -#define _module_mlme_osdep_c_ BIT(5) -#define _module_rtl871x_sta_mgt_c_ BIT(6) -#define _module_rtl871x_cmd_c_ BIT(7) -#define _module_cmd_osdep_c_ BIT(8) -#define _module_rtl871x_io_c_ BIT(9) -#define _module_io_osdep_c_ BIT(10) -#define _module_os_intfs_c_ BIT(11) -#define _module_rtl871x_security_c_ BIT(12) -#define _module_rtl871x_eeprom_c_ BIT(13) -#define _module_hal_init_c_ BIT(14) -#define _module_hci_hal_init_c_ BIT(15) -#define _module_rtl871x_ioctl_c_ BIT(16) -#define _module_rtl871x_ioctl_set_c_ BIT(17) -#define _module_rtl871x_ioctl_query_c_ BIT(18) -#define _module_rtl871x_pwrctrl_c_ BIT(19) -#define _module_hci_intfs_c_ BIT(20) -#define _module_hci_ops_c_ BIT(21) -#define _module_osdep_service_c_ BIT(22) -#define _module_mp_ BIT(23) -#define _module_hci_ops_os_c_ BIT(24) -#define _module_rtl871x_ioctl_os_c BIT(25) -#define _module_rtl8712_cmd_c_ BIT(26) -#define _module_fwcmd_c_ BIT(27) -#define _module_rtl8192c_xmit_c_ BIT(28) -#define _module_hal_xmit_c_ BIT(28) -#define _module_efuse_ BIT(29) -#define _module_rtl8712_recv_c_ BIT(30) -#define _module_rtl8712_led_c_ BIT(31) - -#undef _MODULE_DEFINE_ - -#if defined _RTW_XMIT_C_ - #define _MODULE_DEFINE_ _module_rtl871x_xmit_c_ -#elif defined _XMIT_OSDEP_C_ - #define _MODULE_DEFINE_ _module_xmit_osdep_c_ -#elif defined _RTW_RECV_C_ - #define _MODULE_DEFINE_ _module_rtl871x_recv_c_ -#elif defined _RECV_OSDEP_C_ - #define _MODULE_DEFINE_ _module_recv_osdep_c_ -#elif defined _RTW_MLME_C_ - #define _MODULE_DEFINE_ _module_rtl871x_mlme_c_ -#elif defined _MLME_OSDEP_C_ - #define _MODULE_DEFINE_ _module_mlme_osdep_c_ -#elif defined _RTW_MLME_EXT_C_ - #define _MODULE_DEFINE_ 1 -#elif defined _RTW_STA_MGT_C_ - #define _MODULE_DEFINE_ _module_rtl871x_sta_mgt_c_ -#elif defined _RTW_CMD_C_ - #define _MODULE_DEFINE_ _module_rtl871x_cmd_c_ -#elif defined _CMD_OSDEP_C_ - #define _MODULE_DEFINE_ _module_cmd_osdep_c_ -#elif defined _RTW_IO_C_ - #define _MODULE_DEFINE_ _module_rtl871x_io_c_ -#elif defined _IO_OSDEP_C_ - #define _MODULE_DEFINE_ _module_io_osdep_c_ -#elif defined _OS_INTFS_C_ - #define _MODULE_DEFINE_ _module_os_intfs_c_ -#elif defined _RTW_SECURITY_C_ - #define _MODULE_DEFINE_ _module_rtl871x_security_c_ -#elif defined _RTW_EEPROM_C_ - #define _MODULE_DEFINE_ _module_rtl871x_eeprom_c_ -#elif defined _HAL_INTF_C_ - #define _MODULE_DEFINE_ _module_hal_init_c_ -#elif (defined _HCI_HAL_INIT_C_) || (defined _SDIO_HALINIT_C_) - #define _MODULE_DEFINE_ _module_hci_hal_init_c_ -#elif defined _RTL871X_IOCTL_C_ - #define _MODULE_DEFINE_ _module_rtl871x_ioctl_c_ -#elif defined _RTL871X_IOCTL_SET_C_ - #define _MODULE_DEFINE_ _module_rtl871x_ioctl_set_c_ -#elif defined _RTL871X_IOCTL_QUERY_C_ - #define _MODULE_DEFINE_ _module_rtl871x_ioctl_query_c_ -#elif defined _RTL871X_PWRCTRL_C_ - #define _MODULE_DEFINE_ _module_rtl871x_pwrctrl_c_ -#elif defined _RTW_PWRCTRL_C_ - #define _MODULE_DEFINE_ 1 -#elif defined _HCI_INTF_C_ - #define _MODULE_DEFINE_ _module_hci_intfs_c_ -#elif defined _HCI_OPS_C_ - #define _MODULE_DEFINE_ _module_hci_ops_c_ -#elif defined _SDIO_OPS_C_ - #define _MODULE_DEFINE_ 1 -#elif defined _OSDEP_HCI_INTF_C_ - #define _MODULE_DEFINE_ _module_hci_intfs_c_ -#elif defined _OSDEP_SERVICE_C_ - #define _MODULE_DEFINE_ _module_osdep_service_c_ -#elif defined _HCI_OPS_OS_C_ - #define _MODULE_DEFINE_ _module_hci_ops_os_c_ -#elif defined _RTL871X_IOCTL_LINUX_C_ - #define _MODULE_DEFINE_ _module_rtl871x_ioctl_os_c -#elif defined _RTL8712_CMD_C_ - #define _MODULE_DEFINE_ _module_rtl8712_cmd_c_ -#elif defined _RTL8192C_XMIT_C_ - #define _MODULE_DEFINE_ 1 -#elif defined _RTL8723AS_XMIT_C_ - #define _MODULE_DEFINE_ 1 -#elif defined _RTL8712_RECV_C_ - #define _MODULE_DEFINE_ _module_rtl8712_recv_c_ -#elif defined _RTL8192CU_RECV_C_ - #define _MODULE_DEFINE_ _module_rtl8712_recv_c_ -#elif defined _RTL871X_MLME_EXT_C_ - #define _MODULE_DEFINE_ _module_mlme_osdep_c_ -#elif defined _RTW_MP_C_ - #define _MODULE_DEFINE_ _module_mp_ -#elif defined _RTW_MP_IOCTL_C_ - #define _MODULE_DEFINE_ _module_mp_ -#elif defined _RTW_EFUSE_C_ - #define _MODULE_DEFINE_ _module_efuse_ -#endif - -#ifdef PLATFORM_OS_CE -extern void rtl871x_cedbg(const char *fmt, ...); -#endif - -#define RT_TRACE(_Comp, _Level, Fmt) do{}while(0) -#define _func_enter_ do{}while(0) -#define _func_exit_ do{}while(0) -#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen) do{}while(0) - -#ifdef PLATFORM_WINDOWS - #define DBG_871X do {} while(0) - #define MSG_8192C do {} while(0) - #define DBG_8192C do {} while(0) - #define DBG_871X_LEVEL do {} while(0) -#else - #define DBG_871X(x, ...) do {} while(0) - #define MSG_8192C(x, ...) do {} while(0) - #define DBG_8192C(x,...) do {} while(0) - #define DBG_871X_LEVEL(x,...) do {} while(0) -#endif - -#undef _dbgdump -#ifdef PLATFORM_WINDOWS - - #ifdef PLATFORM_OS_XP - #define _dbgdump DbgPrint - #elif defined PLATFORM_OS_CE - #define _dbgdump rtl871x_cedbg - #endif - -#elif defined PLATFORM_LINUX - #define _dbgdump printk -#elif defined PLATFORM_ECOS - #define _dbgdump diag_printf -#elif defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) - #define _dbgdump printf("\n\r"); printf -#elif defined PLATFORM_FREEBSD - #define _dbgdump printf -#endif - -#if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) -#define DRIVER_PREFIX "RTL871X: " -#endif - -#define DEBUG_LEVEL (_drv_err_) -#if defined (_dbgdump) - #undef DBG_871X_LEVEL -#if defined (__ICCARM__) || defined (__CC_ARM) ||defined(__GNUC__)|| defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) - #define DBG_871X_LEVEL(level, ...) \ - do {\ - _dbgdump(DRIVER_PREFIX __VA_ARGS__);\ - }while(0) -#else - #define DBG_871X_LEVEL(level, fmt, arg...) \ - do {\ - if (level <= DEBUG_LEVEL) {\ - if (level <= _drv_err_ && level > _drv_always_) {\ - _dbgdump(DRIVER_PREFIX"ERROR " fmt, ##arg);\ - } \ - else {\ - _dbgdump(DRIVER_PREFIX fmt, ##arg);\ - } \ - }\ - }while(0) -#endif //#ifdef __CC_ARM -#endif - -#ifdef CONFIG_DEBUG -#if defined (_dbgdump) - #undef DBG_871X - #define DBG_871X(...) do {\ - _dbgdump(DRIVER_PREFIX __VA_ARGS__);\ - }while(0) - - #undef MSG_8192C - #define MSG_8192C(...) do {\ - _dbgdump(DRIVER_PREFIX __VA_ARGS__);\ - }while(0) - - #undef DBG_8192C - #define DBG_8192C(...) do {\ - _dbgdump(DRIVER_PREFIX __VA_ARGS__);\ - }while(0) -#endif -#endif /* CONFIG_DEBUG */ - -#ifdef CONFIG_DEBUG_RTL871X -#ifndef _RTL871X_DEBUG_C_ - extern uint32_t GlobalDebugLevel; - extern uint64_t GlobalDebugComponents; -#endif - -#if defined (_dbgdump) && defined (_MODULE_DEFINE_) - - #undef RT_TRACE - #define RT_TRACE(_Comp, _Level, Fmt)\ - do {\ - if((_Comp & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) {\ - _dbgdump("%s [0x%08x,%d]", DRIVER_PREFIX, (unsigned int)_Comp, _Level);\ - _dbgdump Fmt;\ - }\ - }while(0) - -#endif - - -#if defined (_dbgdump) - - #undef _func_enter_ - #define _func_enter_ \ - do { \ - if (GlobalDebugLevel >= _drv_debug_) \ - { \ - _dbgdump("\n %s : %s enters at %d\n", DRIVER_PREFIX, __FUNCTION__, __LINE__);\ - } \ - } while(0) - - #undef _func_exit_ - #define _func_exit_ \ - do { \ - if (GlobalDebugLevel >= _drv_debug_) \ - { \ - _dbgdump("\n %s : %s exits at %d\n", DRIVER_PREFIX, __FUNCTION__, __LINE__); \ - } \ - } while(0) - - #undef RT_PRINT_DATA - #define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen) \ - if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) \ - { \ - int __i; \ - uint8_t *ptr = (uint8_t *)_HexData; \ - printf("\r\n%s", DRIVER_PREFIX); \ - printf(_TitleString "--------Len=%d\n\r", _HexDataLen); \ - for( __i=0; __i<(int)_HexDataLen; __i++ ) \ - { \ - printf("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?" ":" "); \ - if (((__i + 1) % 16) == 0) printf("\n\r"); \ - } \ - printf("\n\r"); \ - } -#endif -#endif /* CONFIG_DEBUG_RTL871X */ - - -#ifdef CONFIG_PROC_DEBUG - - int proc_get_drv_version(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_write_reg(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_set_write_reg(struct file *file, const char *buffer, - unsigned long count, void *data); - - int proc_get_read_reg(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_set_read_reg(struct file *file, const char *buffer, - unsigned long count, void *data); - - - int proc_get_fwstate(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_sec_info(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_mlmext_state(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_qos_option(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_ht_option(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_rf_info(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_ap_info(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_adapter_state(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_trx_info(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_mac_reg_dump1(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_mac_reg_dump2(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_mac_reg_dump3(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_bb_reg_dump1(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_bb_reg_dump2(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_bb_reg_dump3(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_rf_reg_dump1(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_rf_reg_dump2(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_rf_reg_dump3(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_rf_reg_dump4(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - -#ifdef CONFIG_AP_MODE - - int proc_get_all_sta_info(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - -#endif - -#ifdef DBG_MEMORY_LEAK - int proc_get_malloc_cnt(char *page, char **start, - off_t offset, int count, - int *eof, void *data); -#endif - -#ifdef CONFIG_FIND_BEST_CHANNEL - int proc_get_best_channel(char *page, char **start, - off_t offset, int count, - int *eof, void *data); -#endif - - int proc_get_rx_signal(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_set_rx_signal(struct file *file, const char *buffer, - unsigned long count, void *data); -#ifdef CONFIG_80211N_HT - int proc_get_cbw40_enable(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_set_cbw40_enable(struct file *file, const char *buffer, - unsigned long count, void *data); - - int proc_get_ampdu_enable(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_set_ampdu_enable(struct file *file, const char *buffer, - unsigned long count, void *data); - - int proc_get_rx_stbc(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_set_rx_stbc(struct file *file, const char *buffer, - unsigned long count, void *data); -#endif //CONFIG_80211N_HT - - int proc_get_two_path_rssi(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_get_rssi_disp(char *page, char **start, - off_t offset, int count, - int *eof, void *data); - - int proc_set_rssi_disp(struct file *file, const char *buffer, - unsigned long count, void *data); - - -#endif //CONFIG_PROC_DEBUG - -#endif //__RTW_DEBUG_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_eeprom.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_eeprom.h deleted file mode 100644 index b4a7fc6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_eeprom.h +++ /dev/null @@ -1,158 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTW_EEPROM_H__ -#define __RTW_EEPROM_H__ - -#define RTL8712_EEPROM_ID 0x8712 -//#define EEPROM_MAX_SIZE 256 - -#define HWSET_MAX_SIZE_512 512 -#define EEPROM_MAX_SIZE HWSET_MAX_SIZE_512 - -#define CLOCK_RATE 50 //100us - -//- EEPROM opcodes -#define EEPROM_READ_OPCODE 06 -#define EEPROM_WRITE_OPCODE 05 -#define EEPROM_ERASE_OPCODE 07 -#define EEPROM_EWEN_OPCODE 19 // Erase/write enable -#define EEPROM_EWDS_OPCODE 16 // Erase/write disable - -//Country codes -#define USA 0x555320 -#define EUROPE 0x1 //temp, should be provided later -#define JAPAN 0x2 //temp, should be provided later - -#define EEPROM_CID_DEFAULT 0x0 -#define EEPROM_CID_ALPHA 0x1 -#define EEPROM_CID_Senao 0x3 -#define EEPROM_CID_NetCore 0x5 -#define EEPROM_CID_CAMEO 0X8 -#define EEPROM_CID_SITECOM 0x9 -#define EEPROM_CID_COREGA 0xB -#define EEPROM_CID_EDIMAX_BELKIN 0xC -#define EEPROM_CID_SERCOMM_BELKIN 0xE -#define EEPROM_CID_CAMEO1 0xF -#define EEPROM_CID_WNC_COREGA 0x12 -#define EEPROM_CID_CLEVO 0x13 -#define EEPROM_CID_WHQL 0xFE // added by chiyoko for dtm, 20090108 - -// -// Customer ID, note that: -// This variable is initiailzed through EEPROM or registry, -// however, its definition may be different with that in EEPROM for -// EEPROM size consideration. So, we have to perform proper translation between them. -// Besides, CustomerID of registry has precedence of that of EEPROM. -// defined below. 060703, by rcnjko. -// -typedef enum _RT_CUSTOMER_ID -{ - RT_CID_DEFAULT = 0, - RT_CID_8187_ALPHA0 = 1, - RT_CID_8187_SERCOMM_PS = 2, - RT_CID_8187_HW_LED = 3, - RT_CID_8187_NETGEAR = 4, - RT_CID_WHQL = 5, - RT_CID_819x_CAMEO = 6, - RT_CID_819x_RUNTOP = 7, - RT_CID_819x_Senao = 8, - RT_CID_TOSHIBA = 9, // Merge by Jacken, 2008/01/31. - RT_CID_819x_Netcore = 10, - RT_CID_Nettronix = 11, - RT_CID_DLINK = 12, - RT_CID_PRONET = 13, - RT_CID_COREGA = 14, - RT_CID_CHINA_MOBILE = 15, - RT_CID_819x_ALPHA = 16, - RT_CID_819x_Sitecom = 17, - RT_CID_CCX = 18, // It's set under CCX logo test and isn't demanded for CCX functions, but for test behavior like retry limit and tx report. By Bruce, 2009-02-17. - RT_CID_819x_Lenovo = 19, - RT_CID_819x_QMI = 20, - RT_CID_819x_Edimax_Belkin = 21, - RT_CID_819x_Sercomm_Belkin = 22, - RT_CID_819x_CAMEO1 = 23, - RT_CID_819x_MSI = 24, - RT_CID_819x_Acer = 25, - RT_CID_819x_AzWave_ASUS = 26, - RT_CID_819x_AzWave = 27, // For AzWave in PCIe, The ID is AzWave use and not only Asus - RT_CID_819x_HP = 28, - RT_CID_819x_WNC_COREGA = 29, - RT_CID_819x_Arcadyan_Belkin = 30, - RT_CID_819x_SAMSUNG = 31, - RT_CID_819x_CLEVO = 32, - RT_CID_819x_DELL = 33, - RT_CID_819x_PRONETS = 34, - RT_CID_819x_Edimax_ASUS = 35, - RT_CID_819x_CAMEO_NETGEAR = 36, - RT_CID_PLANEX = 37, - RT_CID_CC_C = 38, - RT_CID_819x_Xavi = 39, - RT_CID_819x_FUNAI_TV = 40, - RT_CID_819x_ALPHA_WD=41, -}RT_CUSTOMER_ID, *PRT_CUSTOMER_ID; - -struct eeprom_priv -{ - uint8_t bautoload_fail_flag; - //uint8_t bempty; - //uint8_t sys_config; - uint8_t mac_addr[6]; //PermanentAddress - //uint8_t config0; -// uint16_t channel_plan; - uint16_t CustomerID; - //uint8_t country_string[3]; - //uint8_t tx_power_b[15]; - //uint8_t tx_power_g[15]; - //uint8_t tx_power_a[201]; - - uint8_t EepromOrEfuse; -#ifdef CONFIG_MEMORY_ACCESS_ALIGNED - uint8_t rsvd; //For byte aligned. By Fangyuan, 141201 -#endif - uint8_t efuse_eeprom_data[HWSET_MAX_SIZE_512]; //92C:256bytes, 88E:512bytes, we use union set (512bytes) - -#ifdef CONFIG_RF_GAIN_OFFSET - uint8_t EEPROMRFGainOffset; - uint8_t EEPROMRFGainVal; -#endif //CONFIG_RF_GAIN_OFFSET -}; - -//TODO -#if 0 - -extern void eeprom_write16(_adapter *padapter, uint16_t reg, uint16_t data); -extern uint16_t eeprom_read16(_adapter *padapter, uint16_t reg); -extern void read_eeprom_content(_adapter *padapter); -extern void eeprom_read_sz(_adapter * padapter, uint16_t reg,uint8_t* data, uint32_t sz); - -extern void read_eeprom_content_by_attrib(_adapter * padapter ); - -#ifdef PLATFORM_LINUX -#ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE -extern int isAdaptorInfoFileValid(void); -extern int storeAdaptorInfoFile(char *path, struct eeprom_priv * eeprom_priv); -extern int retriveAdaptorInfoFile(char *path, struct eeprom_priv * eeprom_priv); -#endif //CONFIG_ADAPTOR_INFO_CACHING_FILE -#endif //PLATFORM_LINUX - -#endif //#if 0 - -#endif //__RTL871X_EEPROM_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_efuse.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_efuse.h deleted file mode 100644 index 7f7c8a9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_efuse.h +++ /dev/null @@ -1,163 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTW_EFUSE_H__ -#define __RTW_EFUSE_H__ - -#if (RTL8195A_SUPPORT == 1) -#include "rtl8195a.h" -#endif -#if (RTL8711B_SUPPORT == 1) -#include "ameba_soc.h" -#endif -/*--------------------------Define efuse Parameters-------------------------*/ -#define EFUSE_ERROE_HANDLE 1 - -#define PG_STATE_HEADER 0x01 -#define PG_STATE_WORD_0 0x02 -#define PG_STATE_WORD_1 0x04 -#define PG_STATE_WORD_2 0x08 -#define PG_STATE_WORD_3 0x10 -#define PG_STATE_DATA 0x20 - -#define PG_SWBYTE_H 0x01 -#define PG_SWBYTE_L 0x02 - -#define PGPKT_DATA_SIZE 8 - -#define EFUSE_WIFI 0 -#define EFUSE_BT 1 - -enum _EFUSE_DEF_TYPE { - TYPE_EFUSE_MAX_SECTION = 0, - TYPE_EFUSE_REAL_CONTENT_LEN = 1, - TYPE_AVAILABLE_EFUSE_BYTES_BANK = 2, - TYPE_AVAILABLE_EFUSE_BYTES_TOTAL = 3, - TYPE_EFUSE_MAP_LEN = 4, - TYPE_EFUSE_PROTECT_BYTES_BANK = 5, - TYPE_EFUSE_CONTENT_LEN_BANK = 6, -}; - -#define EFUSE_MAP_SIZE 512 -#define EFUSE_MAX_SIZE 256 - -#define EFUSE_MAX_MAP_LEN 512 -#define EFUSE_MAX_HW_SIZE 256 -#define EFUSE_MAX_SECTION_BASE 16 - -#define EXT_HEADER(header) ((header & 0x1F ) == 0x0F) -#define ALL_WORDS_DISABLED(wde) ((wde & 0x0F) == 0x0F) -#define GET_HDR_OFFSET_2_0(header) ( (header & 0xE0) >> 5) - -#define EFUSE_REPEAT_THRESHOLD_ 3 -#define EFUSE_MAX_WORD_UNIT 4 - -//============================================= -// The following is for BT Efuse definition -//============================================= -#define EFUSE_BT_MAX_MAP_LEN 1024 -#define EFUSE_MAX_BANK 4 -#define EFUSE_MAX_BT_BANK (EFUSE_MAX_BANK-1) -//============================================= - -/*--------------------------Define flash Parameters-------------------------*/ -#if CONFIG_ADAPTOR_INFO_CACHING_FLASH -#if defined CONFIG_RTL8195A || defined(CONFIG_RTL8711B) - #define FLASH_MAX_SIZE FLASH_CAL_DATA_SIZE - #define FLASH_MAGIC_NUMBER 0x8195 // magic number - #define FLASH_HEADER_SIZE 4 // 2: address, 2: length -#endif -#endif // CONFIG_ADAPTOR_INFO_CACHING_FLASH -/*------------------------------Define structure----------------------------*/ -typedef struct PG_PKT_STRUCT_A{ - uint8_t offset; - uint8_t word_en; - uint8_t data[8]; - uint8_t word_cnts; -}PGPKT_STRUCT,*PPGPKT_STRUCT; - -#ifdef HAL_EFUSE_MEMORY -typedef struct _EFUSE_HAL{ - uint8_t fakeEfuseBank; - uint32_t fakeEfuseUsedBytes; - uint8_t fakeEfuseContent[EFUSE_MAX_HW_SIZE]; - uint8_t fakeEfuseInitMap[EFUSE_MAX_MAP_LEN]; - uint8_t fakeEfuseModifiedMap[EFUSE_MAX_MAP_LEN]; - - uint16_t BTEfuseUsedBytes; - uint8_t BTEfuseUsedPercentage; - uint8_t BTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE]; - uint8_t BTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN]; - uint8_t BTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN]; - - uint16_t fakeBTEfuseUsedBytes; - uint8_t fakeBTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE]; - uint8_t fakeBTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN]; - uint8_t fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN]; -}EFUSE_HAL, *PEFUSE_HAL; -#endif // HAL_EFUSE_MEMORY - -/*------------------------Export global variable----------------------------*/ -#if CONFIG_FAKE_EFUSE -extern uint8_t fakeEfuseBank; -extern uint32_t fakeEfuseUsedBytes; -extern uint8_t fakeEfuseContent[]; -extern uint8_t fakeEfuseInitMap[]; -extern uint8_t fakeEfuseModifiedMap[]; -#endif - -#ifdef CONFIG_BT_COEXIST -extern uint32_t BTEfuseUsedBytes; -extern uint8_t BTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE]; -extern uint8_t BTEfuseInitMap[]; -extern uint8_t BTEfuseModifiedMap[]; -#if CONFIG_FAKE_EFUSE -extern uint32_t fakeBTEfuseUsedBytes; -extern uint8_t fakeBTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE]; -extern uint8_t fakeBTEfuseInitMap[]; -extern uint8_t fakeBTEfuseModifiedMap[]; -#endif -#endif - -/*------------------------Export global variable----------------------------*/ - -uint8_t efuse_GetCurrentSize(_adapter * padapter, uint16_t *size); -uint8_t rtw_efuse_access(_adapter * padapter, uint8_t bRead, uint16_t start_addr, uint16_t cnts, uint8_t *data); -uint8_t rtw_efuse_map_read(_adapter * padapter, uint16_t addr, uint16_t cnts, uint8_t *data); -uint8_t rtw_efuse_map_write(_adapter * padapter, uint16_t addr, uint16_t cnts, uint8_t *data); -uint8_t rtw_BT_efuse_map_read(_adapter * padapter, uint16_t addr, uint16_t cnts, uint8_t *data); -uint8_t rtw_BT_efuse_map_write(_adapter * padapter, uint16_t addr, uint16_t cnts, uint8_t *data); - -uint16_t Efuse_GetCurrentSize(_adapter * pAdapter, uint8_t efuseType, BOOLEAN bPseudoTest); -uint8_t Efuse_CalculateWordCnts(uint8_t word_en); -void EFUSE_GetEfuseDefinition(_adapter * pAdapter, uint8_t efuseType, uint8_t type, void *pOut, BOOLEAN bPseudoTest); -uint8_t efuse_OneByteRead(_adapter * pAdapter, uint16_t addr, uint8_t *data, BOOLEAN bPseudoTest); -uint8_t efuse_OneByteWrite(_adapter * pAdapter, uint16_t addr, uint8_t data, BOOLEAN bPseudoTest); - -void Efuse_PowerSwitch(_adapter * pAdapter,uint8_t bWrite,uint8_t PwrState); -//int Efuse_PgPacketRead(_adapter * pAdapter, uint8_t offset, uint8_t *data, BOOLEAN bPseudoTest); -int Efuse_PgPacketWrite(_adapter * pAdapter, uint8_t offset, uint8_t word_en, uint8_t *data, BOOLEAN bPseudoTest); -void efuse_WordEnableDataRead(uint8_t word_en, uint8_t *sourdata, uint8_t *targetdata); -uint8_t Efuse_WordEnableDataWrite(_adapter * pAdapter, uint16_t efuse_addr, uint8_t word_en, uint8_t *data, BOOLEAN bPseudoTest); - -void EFUSE_ShadowMapUpdate(_adapter * pAdapter, uint8_t efuseType, BOOLEAN bPseudoTest); -void EFUSE_ShadowRead(_adapter * pAdapter, uint8_t Type, uint16_t Offset, uint32_t *Value); - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_event.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_event.h deleted file mode 100644 index f26f51e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_event.h +++ /dev/null @@ -1,151 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _RTW_EVENT_H_ -#define _RTW_EVENT_H_ - -#ifndef CONFIG_RTL8711FW -#ifdef PLATFORM_LINUX -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)) -#include -#else -#include -#endif -#include -#endif -#endif//CONFIG_RTL8711FW - - - -#ifdef CONFIG_H2CLBK -#include -#endif - -/* -Used to report a bss has been scanned - -*/ -struct survey_event { - WLAN_BSSID_EX bss; -}; - -/* -Used to report that the requested site survey has been done. - -bss_cnt indicates the number of bss that has been reported. - - -*/ -struct surveydone_event { - unsigned int bss_cnt; - -}; - -/* -Used to report the link result of joinning the given bss - - -join_res: --1: authentication fail --2: association fail -> 0: TID - -*/ -struct joinbss_event { - //struct wlan_network network; - int join_res; -}; - -/* -Used to report a given STA has joinned the created BSS. -It is used in AP/Ad-HoC(M) mode. - - -*/ -struct stassoc_event { - unsigned char macaddr[6]; - unsigned char rsvd[2]; - int cam_id; - -}; - -struct stadel_event { - unsigned char macaddr[6]; - unsigned char rsvd[2]; //for reason - int mac_id; -}; - -struct addba_event -{ - unsigned int tid; -}; - - -#ifdef CONFIG_H2CLBK -struct c2hlbk_event{ - unsigned char mac[6]; - unsigned short s0; - unsigned short s1; - unsigned int w0; - unsigned char b0; - unsigned short s2; - unsigned char b1; - unsigned int w1; -}; -#endif//CONFIG_H2CLBK - -#define GEN_EVT_CODE(event) event ## _EVT_ - -struct fwevent { - uint32_t parmsize; - void (*event_callback)(_adapter *dev, uint8_t *pbuf); -}; - -//TODO -#if 0 - -#define C2HEVENT_SZ 32 - -struct event_node{ - unsigned char *node; - unsigned char evt_code; - unsigned short evt_sz; - volatile int *caller_ff_tail; - int caller_ff_sz; -}; - -struct c2hevent_queue { - volatile int head; - volatile int tail; - struct event_node nodes[C2HEVENT_SZ]; - unsigned char seq; -}; - -#define NETWORK_QUEUE_SZ 4 - -struct network_queue { - volatile int head; - volatile int tail; - WLAN_BSSID_EX networks[NETWORK_QUEUE_SZ]; -}; - -#endif //#if 0 - -#endif // _WLANEVENT_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_ht.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_ht.h deleted file mode 100644 index 66dd35a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_ht.h +++ /dev/null @@ -1,66 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _RTW_HT_H_ -#define _RTW_HT_H_ - -#include "wifi.h" - -struct ht_priv -{ - uint32_t ht_option; - uint32_t ampdu_enable;//for enable Tx A-MPDU - //uint8_t baddbareq_issued[16]; - //uint32_t tx_amsdu_enable;//for enable Tx A-MSDU - //uint32_t tx_amdsu_maxlen; // 1: 8k, 0:4k ; default:8k, for tx - //uint32_t rx_ampdu_maxlen; //for rx reordering ctrl win_sz, updated when join_callback. - - uint8_t bwmode;// - uint8_t ch_offset;//PRIME_CHNL_OFFSET - uint8_t sgi;//short GI - - //for processing Tx A-MPDU - uint8_t agg_enable_bitmap; - //uint8_t ADDBA_retry_count; - uint8_t candidate_tid_bitmap; - - uint8_t stbc_cap; - - struct rtw_ieee80211_ht_cap ht_cap; - -}; - -#define STBC_HT_ENABLE_RX BIT0 -#define STBC_HT_ENABLE_TX BIT1 -#define STBC_HT_TEST_TX_ENABLE BIT2 -#define STBC_HT_CAP_TX BIT3 - -typedef enum AGGRE_SIZE{ - HT_AGG_SIZE_8K = 0, - HT_AGG_SIZE_16K = 1, - HT_AGG_SIZE_32K = 2, - HT_AGG_SIZE_64K = 3, - VHT_AGG_SIZE_128K = 4, - VHT_AGG_SIZE_256K = 5, - VHT_AGG_SIZE_512K = 6, - VHT_AGG_SIZE_1024K = 7, -}AGGRE_SIZE_E, *PAGGRE_SIZE_E; - -#endif //_RTL871X_HT_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_intfs.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_intfs.h deleted file mode 100644 index c420f30..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_intfs.h +++ /dev/null @@ -1,39 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _RTW_INTFS_H_ -#define _RTW_INTFS_H_ - -extern uint8_t rtw_init_default_value(_adapter *padapter); -#ifdef CONFIG_WOWLAN -void rtw_cancel_dynamic_chk_timer(_adapter *padapter); -#endif -extern void rtw_cancel_all_timer(_adapter *padapter); - -extern uint8_t rtw_init_drv_sw(_adapter *padapter); -extern uint8_t rtw_free_drv_sw(_adapter *padapter); -extern uint8_t rtw_reset_drv_sw(_adapter *padapter); - -extern int rtw_drv_init(ADAPTER *padapter); -extern void rtw_drv_deinit(ADAPTER *Adapter); - -extern uint32_t rtw_start_drv_threads(_adapter *padapter); -extern void rtw_stop_drv_threads (_adapter *padapter); - -#endif //_RTW_INTFS_H_ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_io.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_io.h deleted file mode 100644 index 884d581..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_io.h +++ /dev/null @@ -1,140 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef _RTW_IO_H_ -#define _RTW_IO_H_ - -//IO Bus domain address mapping -#define DEFUALT_OFFSET 0x0 -#define WLAN_LOCAL_OFFSET 0x10250000 -#define WLAN_IOREG_OFFSET 0x10260000 -#define FW_FIFO_OFFSET 0x10270000 -#define TX_HIQ_OFFSET 0x10310000 -#define TX_MIQ_OFFSET 0x1032000 -#define TX_LOQ_OFFSET 0x10330000 -#define RX_RXOFF_OFFSET 0x10340000 - -struct fifo_more_data { - uint32_t more_data; - uint32_t len; -}; - -struct dvobj_priv; - -typedef struct _io_ops { - int (*init_io_priv)(struct dvobj_priv *pdvobj); - int (*write8_endian)(struct dvobj_priv *pdvobj, uint32_t addr, uint32_t buf, uint32_t big); - - uint8_t (*_read8)(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err); - uint16_t (*_read16)(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err); - uint32_t (*_read32)(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err); - - int32_t (*_write8)(struct dvobj_priv *pdvobj, uint32_t addr, uint8_t buf, int32_t *err); - int32_t (*_write16)(struct dvobj_priv *pdvobj, uint32_t addr,uint16_t buf, int32_t *err); - int32_t (*_write32)(struct dvobj_priv *pdvobj, uint32_t addr, uint32_t buf, int32_t *err); - - int (*read_rx_fifo)(struct dvobj_priv *pdvobj, uint32_t addr, uint8_t *buf, uint32_t len, struct fifo_more_data *more_data); - int (*write_tx_fifo)(struct dvobj_priv *pdvobj, uint32_t addr, uint8_t *buf, uint32_t len); -} IO_OPS_T; - -struct bus_transfer { - void *tx_buf; - void *rx_buf; - unsigned int len; -}; - -typedef struct _bus_drv_ops { - int (*bus_drv_init)(ADAPTER *Adapter); - int (*bus_send_msg)(PADAPTER Adapter, struct bus_transfer xfers[], uint32_t RegAction); -} BUS_DRV_OPS_T; - -/* -struct intf_hdl { - - uint32_t intf_option; - uint32_t bus_status; - uint32_t do_flush; - uint8_t *adapter; - uint8_t *intf_dev; - struct intf_priv *pintfpriv; - uint8_t cnt; - void (*intf_hdl_init)(uint8_t *priv); - void (*intf_hdl_unload)(uint8_t *priv); - void (*intf_hdl_open)(uint8_t *priv); - void (*intf_hdl_close)(uint8_t *priv); - struct _io_ops io_ops; - //uint8_t intf_status;//moved to struct intf_priv - uint16_t len; - uint16_t done_len; - - _adapter *padapter; - struct dvobj_priv *pintf_dev;// pointer to &(padapter->dvobjpriv); - - struct _io_ops io_ops; - -}; -*/ - -struct io_priv{ - struct _io_ops io_ops; -}; - - -extern uint8_t rtw_read8(ADAPTER *adapter, uint32_t addr); -extern uint16_t rtw_read16(ADAPTER *adapter, uint32_t addr); -extern uint32_t rtw_read32(ADAPTER *adapter, uint32_t addr); -extern int32_t rtw_write8(ADAPTER *adapter, uint32_t addr, uint8_t val); -extern int32_t rtw_write16(ADAPTER *adapter, uint32_t addr, uint16_t val); -extern int32_t rtw_write32(ADAPTER *adapter, uint32_t addr, uint32_t val); - -#define PlatformEFIOWrite1Byte(_a,_b,_c) \ - rtw_write8(_a,_b,_c) -#define PlatformEFIOWrite2Byte(_a,_b,_c) \ - rtw_write16(_a,_b,_c) -#define PlatformEFIOWrite4Byte(_a,_b,_c) \ - rtw_write32(_a,_b,_c) - -#define PlatformEFIORead1Byte(_a,_b) \ - rtw_read8(_a,_b) -#define PlatformEFIORead2Byte(_a,_b) \ - rtw_read16(_a,_b) -#define PlatformEFIORead4Byte(_a,_b) \ - rtw_read32(_a,_b) - -extern IO_OPS_T io_ops; - -extern uint32_t rtw_write_port( - ADAPTER *adapter, - uint32_t addr, - uint32_t cnt, - uint8_t *mem); -extern uint32_t rtw_read_port( - ADAPTER *adapter, - uint32_t addr, - uint32_t cnt, - uint8_t *mem, - struct fifo_more_data *more_data); -extern void rtw_set_chip_endian(PADAPTER padapter); -extern int rtw_get_chip_endian(PADAPTER padapter); - -int rtw_init_io_priv(_adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops)); - -#endif //_RTW_IO_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_ioctl_set.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_ioctl_set.h deleted file mode 100644 index 0bb4e94..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_ioctl_set.h +++ /dev/null @@ -1,75 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTW_IOCTL_SET_H_ -#define __RTW_IOCTL_SET_H_ - - -#ifdef PLATFORM_OS_XP -typedef struct _NDIS_802_11_PMKID { - uint32_t Length; - uint32_t BSSIDInfoCount; - BSSIDInfo BSSIDInfo[1]; -} NDIS_802_11_PMKID, *PNDIS_802_11_PMKID; -#endif - - -#ifdef PLATFORM_WINDOWS -typedef uint8_t NDIS_802_11_PMKID_VALUE[16]; - -typedef struct _BSSIDInfo { - NDIS_802_11_MAC_ADDRESS BSSID; - NDIS_802_11_PMKID_VALUE PMKID; -} BSSIDInfo, *PBSSIDInfo; - -uint8_t rtw_set_802_11_reload_defaults(_adapter * padapter, NDIS_802_11_RELOAD_DEFAULTS reloadDefaults); -uint8_t rtw_set_802_11_test(_adapter * padapter, NDIS_802_11_TEST * test); -uint8_t rtw_set_802_11_pmkid(_adapter *pdapter, NDIS_802_11_PMKID *pmkid); - -uint8_t rtw_pnp_set_power_sleep(_adapter* padapter); -uint8_t rtw_pnp_set_power_wakeup(_adapter* padapter); - -void rtw_pnp_resume_wk(void *context); -void rtw_pnp_sleep_wk(void * context); - -#endif - -uint8_t rtw_set_802_11_add_key(_adapter * padapter, NDIS_802_11_KEY * key); -uint8_t rtw_set_802_11_authentication_mode(_adapter *pdapter, NDIS_802_11_AUTHENTICATION_MODE authmode); -uint8_t rtw_set_802_11_bssid(_adapter* padapter, uint8_t *bssid); -uint8_t rtw_set_802_11_add_wep(_adapter * padapter, NDIS_802_11_WEP * wep); -uint8_t rtw_set_802_11_disassociate(_adapter * padapter); -uint8_t rtw_set_802_11_bssid_list_scan(_adapter* padapter, NDIS_802_11_SSID *pssid, int ssid_max_num); -uint8_t rtw_set_802_11_infrastructure_mode(_adapter * padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype); -uint8_t rtw_set_802_11_remove_wep(_adapter * padapter, uint32_t keyindex); -uint8_t rtw_set_802_11_ssid(_adapter * padapter, NDIS_802_11_SSID * ssid); -uint8_t rtw_set_802_11_connect(_adapter* padapter, uint8_t *bssid, NDIS_802_11_SSID *ssid); -uint8_t rtw_set_802_11_remove_key(_adapter * padapter, NDIS_802_11_REMOVE_KEY * key); - -uint8_t rtw_validate_bssid(uint8_t *bssid); -uint8_t rtw_validate_ssid(NDIS_802_11_SSID *ssid); - -uint16_t rtw_get_cur_max_rate(_adapter *adapter); -//int rtw_set_scan_mode(_adapter *adapter, RT_SCAN_TYPE scan_mode); -int rtw_set_channel_plan(_adapter *adapter, uint8_t channel_plan); -int rtw_set_country(_adapter *adapter, const char *country_code); -//int rtw_set_band(_adapter *adapter, enum _BAND band); - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_led.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_led.h deleted file mode 100644 index bacb384..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_led.h +++ /dev/null @@ -1,250 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTW_LED_H_ -#define __RTW_LED_H_ - -//TODO -#if 0 - -//#include - -#define MSECS(t) (HZ * ((t) / 1000) + (HZ * ((t) % 1000)) / 1000) - -#define LED_BLINK_NORMAL_INTERVAL 100 -#define LED_BLINK_SLOWLY_INTERVAL 200 -#define LED_BLINK_LONG_INTERVAL 400 - -#define LED_BLINK_NO_LINK_INTERVAL_ALPHA 1000 -#define LED_BLINK_LINK_INTERVAL_ALPHA 500 //500 -#define LED_BLINK_SCAN_INTERVAL_ALPHA 180 //150 -#define LED_BLINK_FASTER_INTERVAL_ALPHA 50 -#define LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA 5000 - -#define LED_BLINK_NORMAL_INTERVAL_NETTRONIX 100 -#define LED_BLINK_SLOWLY_INTERVAL_NETTRONIX 2000 - -#define LED_BLINK_SLOWLY_INTERVAL_PORNET 1000 -#define LED_BLINK_NORMAL_INTERVAL_PORNET 100 - -#define LED_BLINK_FAST_INTERVAL_BITLAND 30 - -// 060403, rcnjko: Customized for AzWave. -#define LED_CM2_BLINK_ON_INTERVAL 250 -#define LED_CM2_BLINK_OFF_INTERVAL 4750 - -#define LED_CM8_BLINK_INTERVAL 500 //for QMI -#define LED_CM8_BLINK_OFF_INTERVAL 3750 //for QMI - -// 080124, lanhsin: Customized for RunTop -#define LED_RunTop_BLINK_INTERVAL 300 - -// 060421, rcnjko: Customized for Sercomm Printer Server case. -#define LED_CM3_BLINK_INTERVAL 1500 - -#endif //#if 0 - -typedef enum _LED_CTL_MODE{ - LED_CTL_POWER_ON = 1, - LED_CTL_LINK = 2, - LED_CTL_NO_LINK = 3, - LED_CTL_TX = 4, - LED_CTL_RX = 5, - LED_CTL_SITE_SURVEY = 6, - LED_CTL_POWER_OFF = 7, - LED_CTL_START_TO_LINK = 8, - LED_CTL_START_WPS = 9, - LED_CTL_STOP_WPS = 10, - LED_CTL_START_WPS_BOTTON = 11, //added for runtop - LED_CTL_STOP_WPS_FAIL = 12, //added for ALPHA - LED_CTL_STOP_WPS_FAIL_OVERLAP = 13, //added for BELKIN - LED_CTL_CONNECTION_NO_TRANSFER = 14, -}LED_CTL_MODE; - -//TODO -#if 0 - -typedef enum _LED_STATE_871x{ - LED_UNKNOWN = 0, - RTW_LED_ON = 1, - RTW_LED_OFF = 2, - LED_BLINK_NORMAL = 3, - LED_BLINK_SLOWLY = 4, - LED_BLINK_POWER_ON = 5, - LED_BLINK_SCAN = 6, // LED is blinking during scanning period, the # of times to blink is depend on time for scanning. - LED_BLINK_NO_LINK = 7, // LED is blinking during no link state. - LED_BLINK_StartToBlink = 8,// Customzied for Sercomm Printer Server case - LED_BLINK_TXRX = 9, - LED_BLINK_WPS = 10, // LED is blinkg during WPS communication - LED_BLINK_WPS_STOP = 11, //for ALPHA - LED_BLINK_WPS_STOP_OVERLAP = 12, //for BELKIN - LED_BLINK_RUNTOP = 13, // Customized for RunTop - LED_BLINK_CAMEO = 14, - LED_BLINK_XAVI = 15, - LED_BLINK_ALWAYS_ON = 16, -}LED_STATE_871x; - -typedef enum _LED_PIN_871x{ - LED_PIN_NULL = 0, - LED_PIN_LED0 = 1, - LED_PIN_LED1 = 2, - LED_PIN_LED2 = 3, - LED_PIN_GPIO0 = 4, -}LED_PIN_871x; - -typedef struct _LED_871x{ - _adapter *padapter; - - LED_PIN_871x LedPin; // Identify how to implement this SW led. - LED_STATE_871x CurrLedState; // Current LED state. - LED_STATE_871x BlinkingLedState; // Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are. - - uint8_t bLedOn; // true if LED is ON, false if LED is OFF. - - uint8_t bLedBlinkInProgress; // true if it is blinking, false o.w.. - - uint8_t bLedWPSBlinkInProgress; - - uint32_t BlinkTimes; // Number of times to toggle led state for blinking. - - _timer BlinkTimer; // Timer object for led blinking. - -#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) - uint8_t bSWLedCtrl; - - // ALPHA, added by chiyoko, 20090106 - uint8_t bLedNoLinkBlinkInProgress; - uint8_t bLedLinkBlinkInProgress; - uint8_t bLedStartToLinkBlinkInProgress; - uint8_t bLedScanBlinkInProgress; - - #if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)|| defined PLATFORM_FREEBSD - _workitem BlinkWorkItem; // Workitem used by BlinkTimer to manipulate H/W to blink LED. - #endif -#endif //defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) - -#if defined(CONFIG_PCI_HCI) || defined(CONFIG_LX_HCI) - uint8_t bLedSlowBlinkInProgress;//added by vivi, for led new mode -#endif - -} LED_871x, *PLED_871x; - -#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) - -#define IS_LED_WPS_BLINKING(_LED_871x) (((PLED_871x)_LED_871x)->CurrLedState==LED_BLINK_WPS \ - || ((PLED_871x)_LED_871x)->CurrLedState==LED_BLINK_WPS_STOP \ - || ((PLED_871x)_LED_871x)->bLedWPSBlinkInProgress) - -#define IS_LED_BLINKING(_LED_871x) (((PLED_871x)_LED_871x)->bLedWPSBlinkInProgress \ - ||((PLED_871x)_LED_871x)->bLedScanBlinkInProgress) - -//================================================================================ -// LED customization. -//================================================================================ - -typedef enum _LED_STRATEGY_871x{ - SW_LED_MODE0 = 0, // SW control 1 LED via GPIO0. It is default option. - SW_LED_MODE1= 1, // 2 LEDs, through LED0 and LED1. For ALPHA. - SW_LED_MODE2 = 2, // SW control 1 LED via GPIO0, customized for AzWave 8187 minicard. - SW_LED_MODE3 = 3, // SW control 1 LED via GPIO0, customized for Sercomm Printer Server case. - SW_LED_MODE4 = 4, //for Edimax / Belkin - SW_LED_MODE5 = 5, //for Sercomm / Belkin - SW_LED_MODE6 = 6, //for 88CU minicard, porting from ce SW_LED_MODE7 - HW_LED = 50, // HW control 2 LEDs, LED0 and LED1 (there are 4 different control modes, see MAC.CONFIG1 for details.) - LED_ST_NONE = 99, -}LED_STRATEGY_871x, *PLED_STRATEGY_871x; - -void -LedControl871x( - _adapter *padapter, - LED_CTL_MODE LedAction - ); -#endif //defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) - -#if defined(CONFIG_PCI_HCI) || defined(CONFIG_LX_HCI) -//================================================================================ -// LED customization. -//================================================================================ - -typedef enum _LED_STRATEGY_871x{ - SW_LED_MODE0 = 0, // SW control 1 LED via GPIO0. It is default option. - SW_LED_MODE1 = 1, // SW control for PCI Express - SW_LED_MODE2 = 2, // SW control for Cameo. - SW_LED_MODE3 = 3, // SW contorl for RunTop. - SW_LED_MODE4 = 4, // SW control for Netcore - SW_LED_MODE5 = 5, //added by vivi, for led new mode, DLINK - SW_LED_MODE6 = 6, //added by vivi, for led new mode, PRONET - SW_LED_MODE7 = 7, //added by chiyokolin, for Lenovo, PCI Express Minicard Spec Rev.1.2 spec - SW_LED_MODE8 = 8, //added by chiyokolin, for QMI - SW_LED_MODE9 = 9, //added by chiyokolin, for BITLAND, PCI Express Minicard Spec Rev.1.1 - SW_LED_MODE10 = 10, //added by chiyokolin, for Edimax-ASUS - HW_LED = 50, // HW control 2 LEDs, LED0 and LED1 (there are 4 different control modes) - LED_ST_NONE = 99, -}LED_STRATEGY_871x, *PLED_STRATEGY_871x; -#endif //defined(CONFIG_PCI_HCI) - -struct led_priv{ - /* add for led controll */ - LED_871x SwLed0; - LED_871x SwLed1; - LED_STRATEGY_871x LedStrategy; - uint8_t bRegUseLed; - void (*LedControlHandler)(_adapter *padapter, LED_CTL_MODE LedAction); - /* add for led controll */ -}; - -#endif //#if 0 - -#ifdef CONFIG_SW_LED -#define rtw_led_control(adapter, LedAction) \ - do { \ - if((adapter)->ledpriv.LedControlHandler) \ - (adapter)->ledpriv.LedControlHandler((adapter), (LedAction)); \ - } while(0) -#else //CONFIG_SW_LED -#define rtw_led_control(adapter, LedAction) -#endif //CONFIG_SW_LED - -//TODO -#if 0 - -void BlinkTimerCallback(void *data); -void BlinkWorkItemCallback(struct work_struct *work); - -void ResetLedStatus(PLED_871x pLed); - -void -InitLed871x( - _adapter *padapter, - PLED_871x pLed, - LED_PIN_871x LedPin - ); - -void -DeInitLed871x( - PLED_871x pLed - ); - -//hal... -extern void BlinkHandler(PLED_871x pLed); - -#endif //#if 0 - -#endif //__RTW_LED_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_mlme.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_mlme.h deleted file mode 100644 index 925fbe0..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_mlme.h +++ /dev/null @@ -1,795 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTW_MLME_H_ -#define __RTW_MLME_H_ - -#ifdef CONFIG_INTEL_WIDI -#include -#endif - -#if defined(PLATFORM_ECOS) -#define MAX_BSS_CNT 10 //alloc less wlan_network due to memory limitation - Alex Fang -#elif defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) -#define MAX_BSS_CNT 1 //alloc less wlan_network due to memory limitation - Alex Fang -#else -#define MAX_BSS_CNT 128 -#endif -//#define MAX_JOIN_TIMEOUT 2000 -//#define MAX_JOIN_TIMEOUT 2500 -#define MAX_JOIN_TIMEOUT 6500 - -#ifdef CONFIG_MULTICAST -#define MULTICAST_LIST_SIZE 4 -#endif - -// Commented by Albert 20101105 -// Increase the scanning timeout because of increasing the SURVEY_TO value. - -#define SCANNING_TIMEOUT 8000 - -#define SCAN_INTERVAL (30) // unit:2sec, 30*2=60sec - -#ifdef PALTFORM_OS_WINCE -#define SCANQUEUE_LIFETIME 12000000 // unit:us -#else -#define SCANQUEUE_LIFETIME 20 // unit:sec -#endif - -#define WIFI_NULL_STATE 0x00000000 -#define WIFI_ASOC_STATE 0x00000001 // Under Linked state... -#define WIFI_REASOC_STATE 0x00000002 -#define WIFI_SLEEP_STATE 0x00000004 -#define WIFI_STATION_STATE 0x00000008 -#define WIFI_AP_STATE 0x00000010 -#define WIFI_ADHOC_STATE 0x00000020 -#define WIFI_ADHOC_MASTER_STATE 0x00000040 -#define WIFI_UNDER_LINKING 0x00000080 -//#define WIFI_UNDER_CMD 0x00000200 -// ========== P2P Section Start =============== -#define WIFI_P2P_LISTEN_STATE 0x00010000 -#define WIFI_P2P_GROUP_FORMATION_STATE 0x00020000 -// ========== P2P Section End =============== -#define WIFI_UNDER_WPS 0x00000100 -#define WIFI_SITE_MONITOR 0x00000800 //to indicate the station is under site surveying - -#ifdef WDS -#define WIFI_WDS 0x00001000 -#define WIFI_WDS_RX_BEACON 0x00002000 // already rx WDS AP beacon -#endif -#ifdef AUTO_CONFIG -#define WIFI_AUTOCONF 0x00004000 -#define WIFI_AUTOCONF_IND 0x00008000 -#endif - -//#ifdef UNDER_MPTEST -#define WIFI_MP_STATE 0x00010000 -#define WIFI_MP_CTX_BACKGROUND 0x00020000 // in continous tx background -#define WIFI_MP_CTX_ST 0x00040000 // in continous tx with single-tone -#define WIFI_MP_CTX_BACKGROUND_PENDING 0x00080000 // pending in continous tx background due to out of skb -#define WIFI_MP_CTX_CCK_HW 0x00100000 // in continous tx -#define WIFI_MP_CTX_CCK_CS 0x00200000 // in continous tx with carrier suppression -#define WIFI_MP_LPBK_STATE 0x00400000 -//#endif - -//#define _FW_UNDER_CMD WIFI_UNDER_CMD -#define _FW_UNDER_LINKING WIFI_UNDER_LINKING -#define _FW_LINKED WIFI_ASOC_STATE -#define _FW_UNDER_SURVEY WIFI_SITE_MONITOR - -enum dot11AuthAlgrthmNum { - dot11AuthAlgrthm_Open = 0, - dot11AuthAlgrthm_Shared, - dot11AuthAlgrthm_8021X, - dot11AuthAlgrthm_Auto, - dot11AuthAlgrthm_WAPI, - dot11AuthAlgrthm_MaxNum -}; - -// Scan type including active and passive scan. -typedef enum _RT_SCAN_TYPE -{ - SCAN_PASSIVE, - SCAN_ACTIVE, - SCAN_MIX, -} RT_SCAN_TYPE, *PRT_SCAN_TYPE; - -/* - -there are several "locks" in mlme_priv, -since mlme_priv is a shared resource between many threads, -like ISR/Call-Back functions, the OID handlers, and even timer functions. - - -Each _queue has its own locks, already. -Other items are protected by mlme_priv.lock. - -To avoid possible dead lock, any thread trying to modifiying mlme_priv -SHALL not lock up more than one locks at a time! - -*/ - - -#define traffic_threshold 10 -#define traffic_scan_period 500 - -struct sitesurvey_ctrl { - uint64_t last_tx_pkts; - uint last_rx_pkts; - sint traffic_busy; - _timer sitesurvey_ctrl_timer; -}; - -typedef struct _RT_LINK_DETECT_T{ - uint32_t NumTxOkInPeriod; - uint32_t NumRxOkInPeriod; - uint32_t NumRxUnicastOkInPeriod; - BOOLEAN bBusyTraffic; - BOOLEAN bTxBusyTraffic; - BOOLEAN bRxBusyTraffic; - BOOLEAN bHigherBusyTraffic; // For interrupt migration purpose. - BOOLEAN bHigherBusyRxTraffic; // We may disable Tx interrupt according as Rx traffic. - BOOLEAN bHigherBusyTxTraffic; // We may disable Tx interrupt according as Tx traffic. -} RT_LINK_DETECT_T, *PRT_LINK_DETECT_T; - -//TODO -#if 0 - -struct profile_info { - uint8_t ssidlen; - uint8_t ssid[ WLAN_SSID_MAXLEN ]; - uint8_t peermac[ ETH_ALEN ]; -}; - -struct tx_invite_req_info{ - uint8_t token; - uint8_t benable; - uint8_t go_ssid[ WLAN_SSID_MAXLEN ]; - uint8_t ssidlen; - uint8_t go_bssid[ ETH_ALEN ]; - uint8_t peer_macaddr[ ETH_ALEN ]; - uint8_t operating_ch; // This information will be set by using the p2p_set op_ch=x - uint8_t peer_ch; // The listen channel for peer P2P device - -}; - -struct tx_invite_resp_info{ - uint8_t token; // Used to record the dialog token of p2p invitation request frame. -}; - -#ifdef CONFIG_WFD - -struct wifi_display_info{ - uint16_t wfd_enable; // Eanble/Disable the WFD function. - uint16_t rtsp_ctrlport; // TCP port number at which the this WFD device listens for RTSP messages - uint16_t peer_rtsp_ctrlport; // TCP port number at which the peer WFD device listens for RTSP messages - // This filed should be filled when receiving the gropu negotiation request - - uint8_t peer_session_avail; // WFD session is available or not for the peer wfd device. - // This variable will be set when sending the provisioning discovery request to peer WFD device. - // And this variable will be reset when it is read by using the iwpriv p2p_get wfd_sa command. - uint8_t ip_address[4]; - uint8_t peer_ip_address[4]; - uint8_t wfd_pc; // WFD preferred connection - // 0 -> Prefer to use the P2P for WFD connection on peer side. - // 1 -> Prefer to use the TDLS for WFD connection on peer side. - - uint8_t wfd_device_type; // WFD Device Type - // 0 -> WFD Source Device - // 1 -> WFD Primary Sink Device - -}; -#endif //CONFIG_WFD - -struct tx_provdisc_req_info{ - uint16_t wps_config_method_request; // Used when sending the provisioning request frame - uint16_t peer_channel_num[2]; // The channel number which the receiver stands. - NDIS_802_11_SSID ssid; - uint8_t peerDevAddr[ ETH_ALEN ]; // Peer device address - uint8_t peerIFAddr[ ETH_ALEN ]; // Peer interface address - uint8_t benable; // This provision discovery request frame is trigger to send or not -}; - -struct rx_provdisc_req_info{ //When peer device issue prov_disc_req first, we should store the following informations - uint8_t peerDevAddr[ ETH_ALEN ]; // Peer device address - uint8_t strconfig_method_desc_of_prov_disc_req[4]; // description for the config method located in the provisioning discovery request frame. - // The UI must know this information to know which config method the remote p2p device is requiring. -}; - -struct tx_nego_req_info{ - uint16_t peer_channel_num[2]; // The channel number which the receiver stands. - uint8_t peerDevAddr[ ETH_ALEN ]; // Peer device address - uint8_t benable; // This negoitation request frame is trigger to send or not -}; - -struct group_id_info{ - uint8_t go_device_addr[ ETH_ALEN ]; // The GO's device address of this P2P group - uint8_t ssid[ WLAN_SSID_MAXLEN ]; // The SSID of this P2P group -}; - -#ifdef CONFIG_IOCTL_CFG80211 -struct cfg80211_wifidirect_info{ - _timer remain_on_ch_timer; - uint8_t restore_channel; - struct ieee80211_channel remain_on_ch_channel; - enum nl80211_channel_type remain_on_ch_type; - uint64_t remain_on_ch_cookie; - struct net_device *remain_on_ch_dev; - bool is_ro_ch; -}; -#endif //CONFIG_IOCTL_CFG80211 - -#endif - -struct wifidirect_info{ - enum P2P_ROLE role; - enum P2P_STATE p2p_state; - uint8_t baction_tx_pending; - uint8_t pending_peer[ETH_ALEN]; - struct xmit_frame *pending_action; - _timer pre_tx_scan_timer; - -#if 0 - _adapter* padapter; - _timer find_phase_timer; - _timer restore_p2p_state_timer; - - // Used to do the scanning. After confirming the peer is availalble, the driver transmits the P2P frame to peer. - _timer pre_tx_scan_timer; -#ifdef CONFIG_CONCURRENT_MODE - // Used to switch the channel between legacy AP and listen state. - _timer ap_p2p_switch_timer; -#endif - struct tx_provdisc_req_info tx_prov_disc_info; - struct rx_provdisc_req_info rx_prov_disc_info; - struct tx_invite_req_info invitereq_info; - struct profile_info profileinfo[ P2P_MAX_PERSISTENT_GROUP_NUM ]; // Store the profile information of persistent group - struct tx_invite_resp_info inviteresp_info; - struct tx_nego_req_info nego_req_info; - struct group_id_info groupid_info; // Store the group id information when doing the group negotiation handshake. -#ifdef CONFIG_WFD - struct wifi_display_info *wfd_info; -#endif - enum P2P_ROLE role; - enum P2P_STATE pre_p2p_state; - enum P2P_STATE p2p_state; - uint8_t device_addr[ETH_ALEN]; // The device address should be the mac address of this device. - uint8_t interface_addr[ETH_ALEN]; - uint8_t social_chan[4]; - uint8_t listen_channel; - uint8_t operating_channel; - uint8_t listen_dwell; // This value should be between 1 and 3 - uint8_t support_rate[8]; - uint8_t p2p_wildcard_ssid[P2P_WILDCARD_SSID_LEN]; - uint8_t intent; // should only include the intent value. - uint8_t p2p_peer_interface_addr[ ETH_ALEN ]; - uint8_t p2p_peer_device_addr[ ETH_ALEN ]; - uint8_t peer_intent; // Included the intent value and tie breaker value. - uint8_t device_name[ WPS_MAX_DEVICE_NAME_LEN ]; // Device name for displaying on searching device screen - uint8_t device_name_len; - uint8_t profileindex; // Used to point to the index of profileinfo array - uint8_t peer_operating_ch; - uint8_t find_phase_state_exchange_cnt; - uint16_t device_password_id_for_nego; // The device password ID for group negotation - uint8_t negotiation_dialog_token; - uint8_t nego_ssid[ WLAN_SSID_MAXLEN ]; // SSID information for group negotitation - uint8_t nego_ssidlen; - uint8_t p2p_group_ssid[WLAN_SSID_MAXLEN]; - uint8_t p2p_group_ssid_len; - uint8_t persistent_supported; // Flag to know the persistent function should be supported or not. - // In the Sigma test, the Sigma will provide this enable from the sta_set_p2p CAPI. - // 0: disable - // 1: enable - uint8_t session_available; // Flag to set the WFD session available to enable or disable "by Sigma" - // In the Sigma test, the Sigma will disable the session available by using the sta_preset CAPI. - // 0: disable - // 1: enable - - uint8_t wfd_tdls_enable; // Flag to enable or disable the TDLS by WFD Sigma - // 0: disable - // 1: enable - uint8_t wfd_tdls_weaksec; // Flag to enable or disable the weak security function for TDLS by WFD Sigma - // 0: disable - // In this case, the driver can't issue the tdsl setup request frame. - // 1: enable - // In this case, the driver can issue the tdls setup request frame - // even the current security is weak security. - - enum P2P_WPSINFO ui_got_wps_info; // This field will store the WPS value (PIN value or PBC) that UI had got from the user. - uint16_t supported_wps_cm; // This field describes the WPS config method which this driver supported. - // The value should be the combination of config method defined in page104 of WPS v2.0 spec. - uint channel_list_attr_len; // This field will contain the length of body of P2P Channel List attribute of group negotitation response frame. - uint8_t channel_list_attr[100]; // This field will contain the body of P2P Channel List attribute of group negotitation response frame. - // We will use the channel_cnt and channel_list fields when constructing the group negotitation confirm frame. -#ifdef CONFIG_CONCURRENT_MODE - uint16_t ext_listen_interval; // The interval to be available with legacy AP (ms) - uint16_t ext_listen_period; // The time period to be available for P2P listen state (ms) -#endif - uint8_t p2p_ps_enable; - enum P2P_PS p2p_ps; // indicate p2p ps state - uint8_t noa_index; // Identifies and instance of Notice of Absence timing. - uint8_t ctwindow; // Client traffic window. A period of time in TU after TBTT. - uint8_t opp_ps; // opportunistic power save. - uint8_t noa_num; // number of NoA descriptor in P2P IE. - uint8_t noa_count[P2P_MAX_NOA_NUM]; // Count for owner, Type of client. - uint32_t noa_duration[P2P_MAX_NOA_NUM]; // Max duration for owner, preferred or min acceptable duration for client. - uint32_t noa_interval[P2P_MAX_NOA_NUM]; // Length of interval for owner, preferred or max acceptable interval of client. - uint32_t noa_start_time[P2P_MAX_NOA_NUM]; // schedule expressed in terms of the lower 4 bytes of the TSF timer. -#endif -}; -#if 0 -struct tdls_ss_record{ //signal strength record - uint8_t macaddr[ETH_ALEN]; - uint8_t RxPWDBAll; - uint8_t is_tdls_sta; // _TRUE: direct link sta, _FALSE: else -}; - -struct tdls_info{ - uint8_t ap_prohibited; - uint setup_state; - uint8_t sta_cnt; - uint8_t sta_maximum; // 1:tdls sta is equal (NUM_STA-1), reach max direct link number; 0: else; - struct tdls_ss_record ss_record; - uint8_t macid_index; //macid entry that is ready to write - uint8_t clear_cam; //cam entry that is trying to clear, using it in direct link teardown - uint8_t ch_sensing; - uint8_t cur_channel; - uint8_t candidate_ch; - uint8_t collect_pkt_num[MAX_CHANNEL_NUM]; - _lock cmd_lock; - _lock hdl_lock; - uint8_t watchdog_count; - uint8_t dev_discovered; //WFD_TDLS: for sigma test - uint8_t enable; -#ifdef CONFIG_WFD - struct wifi_display_info *wfd_info; -#endif -}; - -#endif //#if 0 - -struct mlme_priv { - - _lock lock; - sint fw_state; //shall we protect this variable? maybe not necessarily... - uint8_t bScanInProcess; - uint8_t to_join; //flag - #ifdef CONFIG_LAYER2_ROAMING - uint8_t to_roaming; // roaming trying times - #endif - - uint8_t *nic_hdl; //can be removed - - //uint8_t not_indic_disco; - _list *pscanned; - _queue free_bss_pool; - _queue scanned_queue; - uint8_t *free_bss_buf; - uint16_t num_of_scanned; - -#if SUPPORT_SCAN_BUF // Cloud 2013/12/20 - uint8_t *scan_buf; - uint32_t scan_buf_len; - uint16_t scan_cnt; - uint16_t scan_type; -#endif - - NDIS_802_11_SSID assoc_ssid; - uint8_t assoc_bssid[6]; - - struct wlan_network cur_network; - - //uint wireless_mode; no used, remove it - - uint32_t scan_interval; - - _timer assoc_timer; - - uint8_t assoc_by_bssid; - uint8_t assoc_by_rssi; - - _timer scan_to_timer; // driver itself handles scan_timeout status. - uint32_t scan_start_time; // used to evaluate the time spent in scanning - - #ifdef CONFIG_SET_SCAN_DENY_TIMER - _timer set_scan_deny_timer; - ATOMIC_T set_scan_deny; //0: allowed, 1: deny - #endif - - struct qos_priv qospriv; - -#ifdef CONFIG_80211N_HT - - /* Number of non-HT AP/stations */ - uint16_t num_sta_no_ht; //int num_sta_no_ht; - - /* Number of HT AP/stations 20 MHz */ - //int num_sta_ht_20mhz; - - - uint16_t num_FortyMHzIntolerant; //int num_FortyMHzIntolerant; - - struct ht_priv htpriv; - -#endif - - RT_LINK_DETECT_T LinkDetectInfo; - _timer dynamic_chk_timer; //dynamic/periodic check timer - - uint8_t key_mask; //use for ips to set wep key after ips_leave - uint8_t acm_mask; // for wmm acm mask - uint8_t ChannelPlan; - RT_SCAN_TYPE scan_mode; // active: 1, passive: 0 - -#ifdef CONFIG_WPS - uint8_t *wps_probe_req_ie; - uint32_t wps_probe_req_ie_len; - uint8_t *wps_assoc_req_ie; - uint32_t wps_assoc_req_ie_len; -#endif - -#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME) - /* Number of associated Non-ERP stations (i.e., stations using 802.11b - * in 802.11g BSS) */ - uint16_t num_sta_non_erp; - - /* Number of associated stations that do not support Short Slot Time */ - uint16_t num_sta_no_short_slot_time; - - /* Number of associated stations that do not support Short Preamble */ - uint16_t num_sta_no_short_preamble; - - //int olbc; /* Overlapping Legacy BSS Condition */ - - /* Number of HT associated stations that do not support greenfield */ - uint16_t num_sta_ht_no_gf; - - /* Number of associated non-HT stations */ - //int num_sta_no_ht; - - /* Number of HT associated stations 20 MHz */ - uint16_t num_sta_ht_20mhz; - - /* Overlapping BSS information */ - uint8_t olbc_ht; - -#ifdef CONFIG_80211N_HT - uint16_t ht_op_mode; -#endif /* CONFIG_80211N_HT */ - -#ifdef CONFIG_WPS - uint8_t *wps_beacon_ie; - uint8_t *wps_probe_resp_ie; - uint8_t *wps_assoc_resp_ie; // for CONFIG_IOCTL_CFG80211, this IE could include p2p ie - - uint32_t wps_beacon_ie_len; - uint32_t wps_probe_resp_ie_len; - uint32_t wps_assoc_resp_ie_len; - - -#ifdef CONFIG_P2P_NEW - uint8_t *p2p_beacon_ie; - uint8_t *p2p_probe_req_ie; - uint8_t *p2p_probe_resp_ie; -// uint8_t *p2p_go_probe_resp_ie; //for GO - uint8_t *p2p_assoc_req_ie; - uint8_t *p2p_assoc_rsp_ie; - - uint32_t p2p_beacon_ie_len; - uint32_t p2p_probe_req_ie_len; - uint32_t p2p_probe_resp_ie_len; -// uint32_t p2p_go_probe_resp_ie_len; //for GO - uint32_t p2p_assoc_req_ie_len; - uint32_t p2p_assoc_rsp_ie_len; -#endif //CONFIG_P2P -#endif //CONFIG_WPS - - _lock bcn_update_lock; - uint8_t update_bcn; -#if USE_DEDICATED_BCN_TX - //Dedicated xmit frame and buffer for beacon update - Alex Fang - struct xmit_frame bcn_xmit_frame; - struct xmit_buf bcn_xmit_buf; - //uint8_t bcn_buf[256]; - uint8_t bcn_buf[320]; //p2p go beacon size is about 272+32 bytes -#endif -#endif //#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME) - -#ifdef RTK_DMP_PLATFORM - // DMP kobject_hotplug function signal need in passive level - _workitem Linkup_workitem; - _workitem Linkdown_workitem; -#endif - -#ifdef CONFIG_INTEL_WIDI - int widi_state; - int listen_state; - _timer listen_timer; - ATOMIC_T rx_probe_rsp; // 1:receive probe respone from RDS source. - uint8_t *l2sdTaBuffer; - uint8_t channel_idx; - uint8_t group_cnt; //In WiDi 3.5, they specified another scan algo. for WFD/RDS co-existed - uint8_t sa_ext[L2SDTA_SERVICE_VE_LEN]; -#endif // CONFIG_INTEL_WIDI - -#ifdef CONFIG_CONCURRENT_MODE - uint8_t scanning_via_buddy_intf; -#endif - -#ifdef CONFIG_FTP_PROTECT - uint8_t ftp_lock_flag; -#endif //CONFIG_FTP_PROTECT - -#ifdef CONFIG_MULTICAST - uint32_t multicast_list[MULTICAST_LIST_SIZE]; -#endif - //For fast reconnection to keep frame info temporarily - union recv_frame *p_copy_recv_frame; -}; - -#ifdef CONFIG_AP_MODE - -struct hostapd_priv -{ - _adapter *padapter; - -#ifdef CONFIG_HOSTAPD_MLME - struct net_device *pmgnt_netdev; - struct usb_anchor anchored; -#endif - -}; - -extern int hostapd_mode_init(_adapter *padapter); -extern void hostapd_mode_unload(_adapter *padapter); -#endif - - -extern void rtw_joinbss_event_prehandle(_adapter *adapter, uint8_t *pbuf); -extern void rtw_survey_event_callback(_adapter *adapter, uint8_t *pbuf); -extern void rtw_surveydone_event_callback(_adapter *adapter, uint8_t *pbuf); -extern void rtw_joinbss_event_callback(_adapter *adapter, uint8_t *pbuf); -extern void rtw_stassoc_event_callback(_adapter *adapter, uint8_t *pbuf); -extern void rtw_stadel_event_callback(_adapter *adapter, uint8_t *pbuf); -extern void rtw_atimdone_event_callback(_adapter *adapter, uint8_t *pbuf); -extern void rtw_cpwm_event_callback(_adapter *adapter, uint8_t *pbuf); - -#ifdef PLATFORM_WINDOWS -extern thread_return event_thread(void *context); - -extern void rtw_join_timeout_handler ( - IN PVOID SystemSpecific1, - IN PVOID FunctionContext, - IN PVOID SystemSpecific2, - IN PVOID SystemSpecific3 - ); - -extern void _rtw_scan_timeout_handler ( - IN PVOID SystemSpecific1, - IN PVOID FunctionContext, - IN PVOID SystemSpecific2, - IN PVOID SystemSpecific3 - ); - -#endif - -#if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD) -extern int event_thread(void *context); -extern void rtw_join_timeout_handler(void* FunctionContext); -extern void _rtw_scan_timeout_handler(void* FunctionContext); -#endif - -extern void rtw_free_network_queue(_adapter *adapter,uint8_t isfreeall); -extern int rtw_init_mlme_priv(_adapter *adapter);// (struct mlme_priv *pmlmepriv); - -extern void rtw_free_mlme_priv (struct mlme_priv *pmlmepriv); - - -extern sint rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv); -extern sint rtw_set_key(_adapter *adapter,struct security_priv *psecuritypriv,sint keyid, uint8_t set_tx); -extern sint rtw_set_auth(_adapter *adapter,struct security_priv *psecuritypriv); -extern sint rtw_linked_check(_adapter *padapter); - -__inline static uint8_t *get_bssid(struct mlme_priv *pmlmepriv) -{ //if sta_mode:pmlmepriv->cur_network.network.MacAddress=> bssid - // if adhoc_mode:pmlmepriv->cur_network.network.MacAddress=> ibss mac address - return pmlmepriv->cur_network.network.MacAddress; -} - -__inline static sint check_fwstate(struct mlme_priv *pmlmepriv, sint state) -{ - if (pmlmepriv->fw_state & state) - return _TRUE; - - return _FALSE; -} - -__inline static sint get_fwstate(struct mlme_priv *pmlmepriv) -{ - return pmlmepriv->fw_state; -} - -/* - * No Limit on the calling context, - * therefore set it to be the critical section... - * - * ### NOTE:#### (!!!!) - * MUST TAKE CARE THAT BEFORE CALLING THIS FUNC, YOU SHOULD HAVE LOCKED pmlmepriv->lock - */ -__inline static void set_fwstate(struct mlme_priv *pmlmepriv, sint state) -{ - pmlmepriv->fw_state |= state; - //FOR HW integration - if(_FW_UNDER_SURVEY==state){ - pmlmepriv->bScanInProcess = _TRUE; - } -} - -__inline static void _clr_fwstate_(struct mlme_priv *pmlmepriv, sint state) -{ - pmlmepriv->fw_state &= ~state; - //FOR HW integration - if(_FW_UNDER_SURVEY==state){ - pmlmepriv->bScanInProcess = _FALSE; - } -} - -/* - * No Limit on the calling context, - * therefore set it to be the critical section... - */ -__inline static void clr_fwstate(struct mlme_priv *pmlmepriv, sint state) -{ - _irqL irqL; - - rtw_enter_critical_bh(&pmlmepriv->lock, &irqL); - if (check_fwstate(pmlmepriv, state) == _TRUE) - pmlmepriv->fw_state ^= state; - rtw_exit_critical_bh(&pmlmepriv->lock, &irqL); -} - -__inline static void clr_fwstate_ex(struct mlme_priv *pmlmepriv, sint state) -{ - _irqL irqL; - - rtw_enter_critical_bh(&pmlmepriv->lock, &irqL); - _clr_fwstate_(pmlmepriv, state); - rtw_exit_critical_bh(&pmlmepriv->lock, &irqL); -} - -__inline static void up_scanned_network(struct mlme_priv *pmlmepriv) -{ - _irqL irqL; - - rtw_enter_critical_bh(&pmlmepriv->lock, &irqL); - pmlmepriv->num_of_scanned++; - rtw_exit_critical_bh(&pmlmepriv->lock, &irqL); -} - -#ifdef CONFIG_CONCURRENT_MODE -sint rtw_buddy_adapter_up(_adapter *padapter); -sint check_buddy_fwstate(_adapter *padapter, sint state); -#endif //CONFIG_CONCURRENT_MODE - -__inline static void down_scanned_network(struct mlme_priv *pmlmepriv) -{ - _irqL irqL; - - rtw_enter_critical_bh(&pmlmepriv->lock, &irqL); - pmlmepriv->num_of_scanned--; - rtw_exit_critical_bh(&pmlmepriv->lock, &irqL); -} - -__inline static void set_scanned_network_val(struct mlme_priv *pmlmepriv, sint val) -{ - _irqL irqL; - - rtw_enter_critical_bh(&pmlmepriv->lock, &irqL); - pmlmepriv->num_of_scanned = val; - rtw_exit_critical_bh(&pmlmepriv->lock, &irqL); -} - -extern uint16_t rtw_get_capability(WLAN_BSSID_EX *bss); -extern void rtw_update_scanned_network(_adapter *adapter, WLAN_BSSID_EX *target); -extern void rtw_disconnect_hdl_under_linked(_adapter* adapter, struct sta_info *psta, uint8_t free_assoc); -extern void rtw_generate_random_ibss(uint8_t *pibss); -extern struct wlan_network* rtw_find_network(_queue *scanned_queue, uint8_t *addr); -extern struct wlan_network* rtw_get_oldest_wlan_network(_queue *scanned_queue); - -extern void rtw_free_assoc_resources(_adapter* adapter, int lock_scanned_queue); -extern void rtw_indicate_disconnect(_adapter* adapter); -extern void rtw_indicate_connect(_adapter* adapter); -void rtw_indicate_scan_done( _adapter *padapter, bool aborted); -void rtw_scan_abort(_adapter *adapter); - -extern int rtw_restruct_sec_ie(_adapter *adapter,uint8_t *in_ie,uint8_t *out_ie,uint in_len); -extern int rtw_restruct_wmm_ie(_adapter *adapter, uint8_t *in_ie, uint8_t *out_ie, uint in_len, uint initial_out_len); -//extern void rtw_init_registrypriv_dev_network(_adapter *adapter); - -//extern void rtw_update_registrypriv_dev_network(_adapter *adapter); - -extern void rtw_get_encrypt_decrypt_from_registrypriv(_adapter *adapter); - -extern void _rtw_join_timeout_handler(_adapter *adapter); -extern void rtw_scan_timeout_handler(_adapter *adapter); - -extern void rtw_dynamic_check_timer_handlder(_adapter *adapter); -#ifdef CONFIG_SET_SCAN_DENY_TIMER -extern void rtw_set_scan_deny_timer_hdl(_adapter *adapter); -void rtw_set_scan_deny(struct mlme_priv *mlmepriv, uint32_t ms); -#endif - - -extern int _rtw_init_mlme_priv(_adapter *padapter); - -void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv); - -extern void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv); - -extern int _rtw_enqueue_network(_queue *queue, struct wlan_network *pnetwork); - -extern struct wlan_network* _rtw_dequeue_network(_queue *queue); - -extern struct wlan_network* _rtw_alloc_network(struct mlme_priv *pmlmepriv); - - -extern void _rtw_free_network(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork, uint8_t isfreeall); -extern void _rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork); - - -extern struct wlan_network* _rtw_find_network(_queue *scanned_queue, uint8_t *addr); - -extern void _rtw_free_network_queue(_adapter* padapter, uint8_t isfreeall); - -extern sint rtw_if_up(_adapter *padapter); - - -uint8_t *rtw_get_capability_from_ie(uint8_t *ie); -uint8_t *rtw_get_timestampe_from_ie(uint8_t *ie); -uint8_t *rtw_get_beacon_interval_from_ie(uint8_t *ie); - - -void rtw_joinbss_reset(_adapter *padapter); - -#ifdef CONFIG_80211N_HT -unsigned int rtw_restructure_ht_ie(_adapter *padapter, uint8_t *in_ie, uint8_t *out_ie, uint in_len, uint *pout_len); -void rtw_update_ht_cap(_adapter *padapter, uint8_t *pie, uint ie_len); -void rtw_issue_addbareq_cmd(_adapter *padapter, struct xmit_frame *pxmitframe); -#endif - -int rtw_is_same_ibss(_adapter *adapter, struct wlan_network *pnetwork); -int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst); - -#ifdef CONFIG_LAYER2_ROAMING -void rtw_roaming(_adapter *padapter, struct wlan_network *tgt_network); -void _rtw_roaming(_adapter *padapter, struct wlan_network *tgt_network); -#endif - - -#ifdef CONFIG_INTEL_PROXIM -void rtw_proxim_enable(_adapter *padapter); -void rtw_proxim_disable(_adapter *padapter); -void rtw_proxim_send_packet(_adapter *padapter,uint8_t *pbuf,uint16_t len,uint8_t hw_rate); -#endif //CONFIG_INTEL_PROXIM - -extern void rtw_os_indicate_disconnect( _adapter *adapter ); -extern void rtw_os_indicate_scan_done( _adapter *padapter, bool aborted); -extern void rtw_reset_securitypriv( _adapter *adapter ); -#endif //__RTL871X_MLME_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_mlme_ext.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_mlme_ext.h deleted file mode 100644 index 0688a7a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_mlme_ext.h +++ /dev/null @@ -1,1014 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTW_MLME_EXT_H_ -#define __RTW_MLME_EXT_H_ - - -// Commented by Albert 20101105 -// Increase the SURVEY_TO value from 100 to 150 ( 100ms to 150ms ) -// The Realtek 8188CE SoftAP will spend around 100ms to send the probe response after receiving the probe request. -// So, this driver tried to extend the dwell time for each scanning channel. -// This will increase the chance to receive the probe response from SoftAP. - -#if CONFIG_AUTO_RECONNECT - -#endif - -//TODO -#define FAST_SURVEY_TO (25) //Fast connection time, scan only partial channel -#define SURVEY_TO (100) //Reduce connection time -//#define SURVEY_TO (300) //Increase time to stay each channel - Alex Fang -#define REAUTH_TO (300) //(50) -#define REASSOC_TO (300) //(50) -//#define DISCONNECT_TO (3000) -#define ADDBA_TO (2000) - -#define LINKED_TO (1) //unit:2 sec, 1x2=2 sec - -#define REAUTH_LIMIT (4) -#define REASSOC_LIMIT (4) -#define READDBA_LIMIT (2) - -#if (defined CONFIG_GSPI_HCI || defined CONFIG_SDIO_HCI) - #define ROAMING_LIMIT 5 -#else - #define ROAMING_LIMIT 8 -#endif -//#define IOCMD_REG0 0x10250370 -//#define IOCMD_REG1 0x10250374 -//#define IOCMD_REG2 0x10250378 - -//#define FW_DYNAMIC_FUN_SWITCH 0x10250364 - -//#define WRITE_BB_CMD 0xF0000001 -//#define SET_CHANNEL_CMD 0xF3000000 -//#define UPDATE_RA_CMD 0xFD0000A2 - -#define _HW_STATE_NOLINK_ 0x00 -#define _HW_STATE_ADHOC_ 0x01 -#define _HW_STATE_STATION_ 0x02 -#define _HW_STATE_AP_ 0x03 -#define _HW_STATE_MONITOR_ 0x04 - - -#define _1M_RATE_ 0 -#define _2M_RATE_ 1 -#define _5M_RATE_ 2 -#define _11M_RATE_ 3 -#define _6M_RATE_ 4 -#define _9M_RATE_ 5 -#define _12M_RATE_ 6 -#define _18M_RATE_ 7 -#define _24M_RATE_ 8 -#define _36M_RATE_ 9 -#define _48M_RATE_ 10 -#define _54M_RATE_ 11 - -#define MAX_COUNTRY_NUM 250 - -extern const uint8_t WMM_OUI[]; -extern const uint8_t WPS_OUI[]; -extern const uint8_t WFD_OUI[]; -extern const uint8_t P2P_OUI[]; - -//extern const unsigned char WMM_INFO_OUI[]; -extern const uint8_t WMM_PARA_OUI[]; - - -// -// Channel Plan Type. -// Note: -// We just add new channel plan when the new channel plan is different from any of the following -// channel plan. -// If you just wnat to customize the acitions(scan period or join actions) about one of the channel plan, -// customize them in RT_CHANNEL_INFO in the RT_CHANNEL_LIST. -// -typedef enum _RT_CHANNEL_DOMAIN -{ - //===== old channel plan mapping =====// - RT_CHANNEL_DOMAIN_FCC = 0x00, - RT_CHANNEL_DOMAIN_IC = 0x01, - RT_CHANNEL_DOMAIN_ETSI = 0x02, - RT_CHANNEL_DOMAIN_SPAIN = 0x03, - RT_CHANNEL_DOMAIN_FRANCE = 0x04, - RT_CHANNEL_DOMAIN_MKK = 0x05, - RT_CHANNEL_DOMAIN_MKK1 = 0x06, - RT_CHANNEL_DOMAIN_ISRAEL = 0x07, - RT_CHANNEL_DOMAIN_TELEC = 0x08, - RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN = 0x09, - RT_CHANNEL_DOMAIN_WORLD_WIDE_13 = 0x0A, - RT_CHANNEL_DOMAIN_TAIWAN = 0x0B, - RT_CHANNEL_DOMAIN_CHINA = 0x0C, - RT_CHANNEL_DOMAIN_SINGAPORE_INDIA_MEXICO = 0x0D, - RT_CHANNEL_DOMAIN_KOREA = 0x0E, - RT_CHANNEL_DOMAIN_TURKEY = 0x0F, - RT_CHANNEL_DOMAIN_JAPAN = 0x10, - RT_CHANNEL_DOMAIN_FCC_NO_DFS = 0x11, - RT_CHANNEL_DOMAIN_JAPAN_NO_DFS = 0x12, - RT_CHANNEL_DOMAIN_WORLD_WIDE_5G = 0x13, - RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS = 0x14, - - //===== new channel plan mapping, (2GDOMAIN_5GDOMAIN) =====// - // 2.4 G only - RT_CHANNEL_DOMAIN_WORLD_NULL = 0x20, // ETSI, MKK ch1~13 - RT_CHANNEL_DOMAIN_ETSI1_NULL = 0x21, - RT_CHANNEL_DOMAIN_FCC1_NULL = 0x22, // FCC ch1~11 - RT_CHANNEL_DOMAIN_MKK1_NULL = 0x23, // MKK ch1~14 - RT_CHANNEL_DOMAIN_ETSI2_NULL = 0x24, - // 2.4 G + 5G type 1 - RT_CHANNEL_DOMAIN_FCC1_FCC1 = 0x25, - RT_CHANNEL_DOMAIN_WORLD_ETSI1 = 0x26, - RT_CHANNEL_DOMAIN_MKK1_MKK1 = 0x27, - RT_CHANNEL_DOMAIN_WORLD_KCC1 = 0x28, - RT_CHANNEL_DOMAIN_WORLD_FCC2 = 0x29, - RT_CHANNEL_DOMAIN_FCC2_NULL = 0x2A, // FCC ch1~13 - RT_CHANNEL_DOMAIN_WORLD_FCC3 = 0x30, - RT_CHANNEL_DOMAIN_WORLD_FCC4 = 0x31, - RT_CHANNEL_DOMAIN_WORLD_FCC5 = 0x32, - RT_CHANNEL_DOMAIN_WORLD_FCC6 = 0x33, - RT_CHANNEL_DOMAIN_FCC1_FCC7 = 0x34, - RT_CHANNEL_DOMAIN_WORLD_ETSI2 = 0x35, - RT_CHANNEL_DOMAIN_WORLD_ETSI3 = 0x36, - RT_CHANNEL_DOMAIN_MKK1_MKK2 = 0x37, - RT_CHANNEL_DOMAIN_MKK1_MKK3 = 0x38, - RT_CHANNEL_DOMAIN_FCC1_NCC1 = 0x39, - RT_CHANNEL_DOMAIN_FCC1_NCC2 = 0x40, - RT_CHANNEL_DOMAIN_GLOBAL_NULL = 0x41, - RT_CHANNEL_DOMAIN_ETSI1_ETSI4 = 0x42, - RT_CHANNEL_DOMAIN_FCC1_FCC2 = 0x43, - RT_CHANNEL_DOMAIN_FCC1_NCC3 = 0x44, - RT_CHANNEL_DOMAIN_WORLD_ETSI5 = 0x45, - RT_CHANNEL_DOMAIN_FCC1_FCC8 = 0x46, - RT_CHANNEL_DOMAIN_WORLD_ETSI6 = 0x47, // ETSI, MKK, FCC ch1~13 - RT_CHANNEL_DOMAIN_WORLD_ETSI7 = 0x48, - RT_CHANNEL_DOMAIN_WORLD_ETSI8 = 0x49, - RT_CHANNEL_DOMAIN_WORLD_ETSI9 = 0x50, - RT_CHANNEL_DOMAIN_WORLD_ETSI10 = 0x51, - RT_CHANNEL_DOMAIN_WORLD_ETSI11 = 0x52, - RT_CHANNEL_DOMAIN_FCC1_NCC4 = 0x53, - RT_CHANNEL_DOMAIN_WORLD_ETSI12 = 0x54, - RT_CHANNEL_DOMAIN_FCC1_FCC9 = 0x55, - RT_CHANNEL_DOMAIN_WORLD_ETSI13 = 0x56, - RT_CHANNEL_DOMAIN_FCC1_FCC10 = 0x57, - RT_CHANNEL_DOMAIN_MKK2_MKK4 = 0x58, // MKK ch1~13 - //===== Add new channel plan above this line===============// - RT_CHANNEL_DOMAIN_MAX, - RT_CHANNEL_DOMAIN_REALTEK_DEFINE = 0x7F, -}RT_CHANNEL_DOMAIN, *PRT_CHANNEL_DOMAIN; - -typedef enum _RT_CHANNEL_DOMAIN_2G -{ - RT_CHANNEL_DOMAIN_2G_WORLD1 = 0x00, //Worldwird 13, ch1~13 (ETSI, MKK) - RT_CHANNEL_DOMAIN_2G_ETSI1 = 0x01, //Europe, ch1~13 - RT_CHANNEL_DOMAIN_2G_FCC1 = 0x02, //US, ch1~11 - RT_CHANNEL_DOMAIN_2G_MKK1 = 0x03, //Japan, ch1~14 - RT_CHANNEL_DOMAIN_2G_ETSI2 = 0x04, //France, ch10~13 - RT_CHANNEL_DOMAIN_2G_RCC2 = 0x05, //US, ch1~13 - RT_CHANNEL_DOMAIN_2G_MKK2 = 0x06, //Japan, ch1~13 - RT_CHANNEL_DOMAIN_2G_WORLD2 = 0x07, //Worldwird 13, ch1~13 (ETSI, MKK, FCC) - //===== Add new channel plan above this line===============// - RT_CHANNEL_DOMAIN_2G_MAX, -}RT_CHANNEL_DOMAIN_2G, *PRT_CHANNEL_DOMAIN_2G; - -typedef enum _RT_CHANNEL_DOMAIN_5G -{ - RT_CHANNEL_DOMAIN_5G_NULL = 0x00, - RT_CHANNEL_DOMAIN_5G_ETSI1 = 0x01, //Europe - RT_CHANNEL_DOMAIN_5G_ETSI2 = 0x02, //Australia, New Zealand - RT_CHANNEL_DOMAIN_5G_ETSI3 = 0x03, //Russia - RT_CHANNEL_DOMAIN_5G_FCC1 = 0x04, //US - RT_CHANNEL_DOMAIN_5G_FCC2 = 0x05, //FCC o/w DFS Channels - RT_CHANNEL_DOMAIN_5G_FCC3 = 0x06, //India, Mexico - RT_CHANNEL_DOMAIN_5G_FCC4 = 0x07, //Venezuela - RT_CHANNEL_DOMAIN_5G_FCC5 = 0x08, //China - RT_CHANNEL_DOMAIN_5G_FCC6 = 0x09, //Israel - RT_CHANNEL_DOMAIN_5G_FCC7_IC1 = 0x0A, //US, Canada - RT_CHANNEL_DOMAIN_5G_KCC1 = 0x0B, //Korea - RT_CHANNEL_DOMAIN_5G_MKK1 = 0x0C, //Japan - RT_CHANNEL_DOMAIN_5G_MKK2 = 0x0D, //Japan (W52, W53) - RT_CHANNEL_DOMAIN_5G_MKK3 = 0x0E, //Japan (W56) - RT_CHANNEL_DOMAIN_5G_NCC1 = 0x0F, //Taiwan - RT_CHANNEL_DOMAIN_5G_NCC2 = 0x10, //Taiwan o/w DFS - //===== Add new channel plan above this line===============// - //===== Driver Self Defined =====// - RT_CHANNEL_DOMAIN_5G_FCC = 0x11, - RT_CHANNEL_DOMAIN_5G_JAPAN_NO_DFS = 0x12, - RT_CHANNEL_DOMAIN_5G_MAX, -}RT_CHANNEL_DOMAIN_5G, *PRT_CHANNEL_DOMAIN_5G; - -#define rtw_is_channel_plan_valid(chplan) (chplancur_network.network. YJ,del,140408 - struct FW_Sta_Info FW_sta_info[NUM_STA]; - -#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE - uint8_t scan_cnt; -#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE -}; - -// The channel information about this channel including joining, scanning, and power constraints. -#define PSCAN_ENABLE 0x01 //enable for partial channel scan -#define PSCAN_FAST_SURVEY 0x02 //set to select scan time to FAST_SURVEY_TO and resend probe request -#define PSCAN_SIMPLE_CONFIG 0x04 //set to select scan time to FAST_SURVEY_TO and resend probe request -#define PSCAN_SET_SSID_DONE 0x80 //When receive probe response, this bit is set to 1 - -#define PSCAN_DISABLE_MASK 0xFE //disable PSCAN_ENABLE -#define PSCAN_CLEAR_SSID_DONE 0x7F //clear PSCAN_SET_SSID_DONE -#define PSCAN_RETRY_TIMES 7 //the retry times of resending probe request when PSCAN_FAST_SURVEY is set - -typedef struct _RT_CHANNEL_INFO -{ - uint8_t ChannelNum; // The channel number. - RT_SCAN_TYPE ScanType; // Scan type such as passive or active scan. - //uint16_t ScanPeriod; // Listen time in millisecond in this channel. - //int32_t MaxTxPwrDbm; // Max allowed tx power. - //uint32_t ExInfo; // Extended Information for this channel. -#ifdef CONFIG_FIND_BEST_CHANNEL - uint32_t rx_count; -#endif - uint8_t pscan_config; -}RT_CHANNEL_INFO, *PRT_CHANNEL_INFO; - -extern int rtw_is_channel_set_contains_channel(RT_CHANNEL_INFO *channel_set, const uint32_t channel_num, int *pchannel_idx); - -//#ifdef CONFIG_CUSTOM_IE -//#ifndef _CUS_IE_ -//#define _CUS_IE_ -typedef struct __cus_ie -{ - uint8_t *ie; - uint8_t type; -}_rtw_custom_ie_t, *_p_rtw_custom_ie_t; -//#endif /* _CUS_IE_ */ -//#endif - -struct mlme_ext_priv -{ - _adapter *padapter; - uint8_t mlmeext_init; - ATOMIC_T event_seq; - uint16_t mgnt_seq; - - //struct fw_priv fwpriv; - - uint8_t cur_channel; - uint8_t cur_bwmode; - uint8_t cur_ch_offset;//PRIME_CHNL_OFFSET - uint8_t cur_wireless_mode; // NETWORK_TYPE - uint8_t max_chan_nums; - RT_CHANNEL_INFO channel_set[MAX_CHANNEL_NUM]; -#ifdef CONFIG_P2P_NEW - RT_CHANNEL_INFO social_channel_set[4]; - RT_CHANNEL_INFO special_channel[2]; - uint8_t special_mac[ETH_ALEN]; - uint16_t scan_mode; - uint8_t bremain_on_channel; - _timer remainon_timer; -#endif - uint8_t basicrate[NumRates]; - uint8_t datarate[NumRates]; - - struct ss_res sitesurvey_res; - struct mlme_ext_info mlmext_info;//for sta/adhoc mode, including current scanning/connecting/connected related info. - //for ap mode, network includes ap's cap_info - _timer survey_timer; - _timer link_timer; - //_timer ADDBA_timer; - uint16_t chan_scan_time; - - uint8_t scan_abort; - uint8_t tx_rate; // TXRATE when USERATE is set. - - uint8_t retry; //retry for issue probereq - - uint64_t TSFValue; - -#ifdef CONFIG_AP_MODE - unsigned char bstart_bss; -#endif - -#ifdef CONFIG_80211D - uint8_t update_channel_plan_by_ap_done; -#endif - //recv_decache check for Action_public frame - uint16_t action_public_rxseq; - - /* for softap power save */ -#ifdef CONFIG_P2P_NEW - uint8_t action_public_dialog_token; -#endif -#if CONFIG_AUTO_RECONNECT - _timer reconnect_timer; - uint8_t reconnect_deauth_filtered; - uint8_t reconnect_times; - uint8_t reconnect_cnt; - uint16_t reconnect_timeout; // the unit is second - uint8_t saved_alg; - uint8_t saved_essid[32+1]; - uint8_t saved_key[32]; - uint16_t saved_key_len; - uint8_t saved_key_idx; - uint8_t saved_wpa_passphrase[IW_PASSPHRASE_MAX_SIZE + 1]; - uint8_t saved_eap_method; - uint8_t auto_reconnect; -#endif - uint8_t partial_scan; -#ifdef CONFIG_CUSTOM_IE - _p_rtw_custom_ie_t cus_ven_ie; - uint8_t ie_num; -#endif - -#ifdef CONFIG_CONCURRENT_MODE - uint8_t bChDeauthDisabled; - uint8_t bConcurrentFlushingSTA; -#endif -}; - -int init_mlme_ext_priv(_adapter* padapter); -int init_hw_mlme_ext(_adapter *padapter); -void free_mlme_ext_priv (struct mlme_ext_priv *pmlmeext); -extern void init_mlme_ext_timer(_adapter *padapter); -extern void init_addba_retry_timer(_adapter *padapter, struct sta_info *psta); -extern struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv); -extern struct xmit_frame *alloc_FwRsvdframe(struct xmit_priv *pxmitpriv, uint32_t size); -//void fill_fwpriv(_adapter * padapter, struct fw_priv *pfwpriv); - -unsigned char networktype_to_raid(unsigned char network_type); -uint8_t judge_network_type(_adapter *padapter, unsigned char *rate, int ratelen); -void get_rate_set(_adapter *padapter, unsigned char *pbssrate, int *bssrate_len); -void UpdateBrateTbl(_adapter *padapter,uint8_t *mBratesOS); -void UpdateBrateTblForSoftAP(uint8_t *bssrateset, uint32_t bssratelen); - -void Save_DM_Func_Flag(_adapter *padapter); -void Restore_DM_Func_Flag(_adapter *padapter); -void Switch_DM_Func(_adapter *padapter, uint32_t mode, uint8_t enable); - -//void Set_NETYPE1_MSR(_adapter *padapter, uint8_t type); -//void Set_NETYPE0_MSR(_adapter *padapter, uint8_t type); -void Set_MSR(_adapter *padapter, uint8_t type); - -uint8_t set_opmode(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype); -void set_channel_bwmode(_adapter *padapter, unsigned char channel, unsigned char channel_offset, unsigned short bwmode); -void SelectChannel(_adapter *padapter, unsigned char channel); -void SetBWMode(_adapter *padapter, unsigned short bwmode, unsigned char channel_offset); - -unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval); - -void write_cam(_adapter *padapter, uint8_t entry, uint16_t ctrl, uint8_t *mac, uint8_t *key); -void clear_cam_entry(_adapter *padapter, uint8_t entry); - -void invalidate_cam_all(_adapter *padapter); -void CAM_empty_entry(PADAPTER Adapter, uint8_t ucIndex); - - -int allocate_fw_sta_entry(_adapter *padapter); -void flush_all_cam_entry(_adapter *padapter); - -BOOLEAN IsLegal5GChannel(PADAPTER Adapter, uint8_t channel); - -void site_survey(_adapter *padapter); -uint8_t collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSID_EX *bssid); -void update_network(WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src, _adapter * padapter, bool update_ie); - -int get_bsstype(unsigned short capability); -uint8_t* get_my_bssid(WLAN_BSSID_EX *pnetwork); -uint16_t get_beacon_interval(WLAN_BSSID_EX *bss); - -int is_client_associated_to_ap(_adapter *padapter); -int is_client_associated_to_ibss(_adapter *padapter); -int is_IBSS_empty(_adapter *padapter); - -unsigned char check_assoc_AP(uint8_t *pframe, uint len); - -int WMM_param_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); -#ifdef CONFIG_WFD -int WFD_info_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); -#endif -void WMMOnAssocRsp(_adapter *padapter); - -void HT_caps_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); -void HT_info_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); -void HTOnAssocRsp(_adapter *padapter); - -void ERP_IE_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); -void VCS_update(_adapter *padapter, struct sta_info *psta); - -void update_beacon_info(_adapter *padapter, uint8_t *pframe, uint len, struct sta_info *psta); -int rtw_check_bcn_info(ADAPTER *Adapter, uint8_t *pframe, uint32_t packet_len); -#ifdef CONFIG_DFS -void process_csa_ie(_adapter *padapter, uint8_t *pframe, uint len); -#endif //CONFIG_DFS -void update_IOT_info(_adapter *padapter); -void update_capinfo(PADAPTER Adapter, uint16_t updateCap); -void update_wireless_mode(_adapter * padapter); -void update_tx_basic_rate(_adapter *padapter, uint8_t modulation); -void update_bmc_sta_support_rate(_adapter *padapter, uint32_t mac_id); -int update_sta_support_rate(_adapter *padapter, uint8_t* pvar_ie, uint var_ie_len, int cam_idx); - -//for sta/adhoc mode -void update_sta_info(_adapter *padapter, struct sta_info *psta); -unsigned int update_basic_rate(unsigned char *ptn, unsigned int ptn_sz); -unsigned int update_supported_rate(unsigned char *ptn, unsigned int ptn_sz); -unsigned int update_MCS_rate(struct HT_caps_element *pHT_caps); -void Update_RA_Entry(_adapter *padapter, struct sta_info *psta); -void set_sta_rate(_adapter *padapter, struct sta_info *psta); - -unsigned int receive_disconnect(_adapter *padapter, unsigned char *MacAddr, unsigned short reason); - -unsigned char get_highest_rate_idx(uint32_t mask); -int support_short_GI(_adapter *padapter, struct HT_caps_element *pHT_caps); -unsigned int is_ap_in_tkip(_adapter *padapter); -unsigned int is_ap_in_wep(_adapter *padapter); -unsigned int should_forbid_n_rate(_adapter * padapter); - -void report_join_res(_adapter *padapter, int res); -void report_survey_event(_adapter *padapter, union recv_frame *precv_frame); -void report_surveydone_event(_adapter *padapter); -void report_del_sta_event(_adapter *padapter, unsigned char* MacAddr, unsigned short reason); -void report_add_sta_event(_adapter *padapter, unsigned char* MacAddr, int cam_idx); - -void beacon_timing_control(_adapter *padapter); -extern uint8_t set_tx_beacon_cmd(_adapter*padapter); -unsigned int setup_beacon_frame(_adapter *padapter, unsigned char *beacon_frame); -void update_mgnt_tx_rate(_adapter *padapter, uint8_t rate); -void update_mgntframe_attrib(_adapter *padapter, struct pkt_attrib *pattrib); -void dump_mgntframe(_adapter *padapter, struct xmit_frame *pmgntframe); -int32_t dump_mgntframe_and_wait(_adapter *padapter, struct xmit_frame *pmgntframe, int timeout_ms); - -#ifdef CONFIG_P2P -void issue_probersp_p2p(_adapter *padapter, unsigned char *da); -void issue_p2p_provision_request( _adapter *padapter, uint8_t* pssid, uint8_t ussidlen, uint8_t* pdev_raddr); -void issue_p2p_GO_request(_adapter *padapter, uint8_t* raddr); -void issue_probereq_p2p(_adapter *padapter); -void issue_p2p_invitation_response(_adapter *padapter, uint8_t* raddr, uint8_t dialogToken, uint8_t success); -void issue_p2p_invitation_request(_adapter *padapter, uint8_t* raddr ); -#endif //CONFIG_P2P -void issue_beacon(_adapter *padapter); -void issue_probersp(_adapter *padapter, unsigned char *da, uint8_t is_valid_p2p_probereq); -void issue_assocreq(_adapter *padapter); -void issue_asocrsp(_adapter *padapter, unsigned short status, struct sta_info *pstat, int pkt_type); -void issue_auth(_adapter *padapter, struct sta_info *psta, unsigned short status); -// Added by Albert 2010/07/26 -// blnbc: 1 -> broadcast probe request -// blnbc: 0 -> unicast probe request. The address 1 will be the BSSID. -void issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, uint8_t blnbc); -void issue_nulldata(_adapter *padapter, unsigned int power_mode); -void issue_qos_nulldata(_adapter *padapter, unsigned char *da, uint16_t tid); -void issue_deauth(_adapter *padapter, unsigned char *da, uint32_t reason); -void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short status); -unsigned int send_delba(_adapter *padapter, uint8_t initiator, uint8_t *addr); -unsigned int send_beacon(_adapter *padapter); - -void start_clnt_assoc(_adapter *padapter); -void start_clnt_auth(_adapter* padapter); -void start_clnt_join(_adapter* padapter); -void start_create_ibss(_adapter* padapter); - -unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnAssocRsp(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnProbeReq(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnProbeRsp(_adapter *padapter, union recv_frame *precv_frame); -unsigned int DoReserved(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnAtim(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnDisassoc(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnAuth(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnAuthClient(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnDeAuth(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnAction(_adapter *padapter, union recv_frame *precv_frame); - -unsigned int OnAction_qos(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnAction_dls(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnAction_public(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnAction_ht(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnAction_wmm(_adapter *padapter, union recv_frame *precv_frame); -unsigned int OnAction_p2p(_adapter *padapter, union recv_frame *precv_frame); - - -void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res); -void mlmeext_sta_del_event_callback(_adapter *padapter); -void mlmeext_sta_add_event_callback(_adapter *padapter, struct sta_info *psta); - -void linked_status_chk(_adapter *padapter); - -void survey_timer_hdl (_adapter *padapter); -void link_timer_hdl (_adapter *padapter); -void addba_timer_hdl(struct sta_info *psta); -//void reauth_timer_hdl(_adapter *padapter); -//void reassoc_timer_hdl(_adapter *padapter); - -#define set_survey_timer(mlmeext, ms) \ - do { \ - /*DBG_871X("%s set_survey_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms));*/ \ - rtw_set_timer(&(mlmeext)->survey_timer, (ms)); \ - } while(0) - -#define set_link_timer(mlmeext, ms) \ - do { \ - /*DBG_871X("%s set_link_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms));*/ \ - rtw_set_timer(&(mlmeext)->link_timer, (ms)); \ - } while(0) - -//TODO -#if 0 -extern int cckrates_included(unsigned char *rate, int ratelen); -extern int cckratesonly_included(unsigned char *rate, int ratelen); -extern void process_addba_req(_adapter *padapter, uint8_t *paddba_req, uint8_t *addr); -#endif - -extern void update_TSF(struct mlme_ext_priv *pmlmeext, uint8_t *pframe, uint len); -extern void correct_TSF(_adapter *padapter, struct mlme_ext_priv *pmlmeext); - -#ifdef CONFIG_CONCURRENT_MODE - sint check_buddy_mlmeinfo_state(_adapter *padapter, uint32_t state); -int concurrent_chk_start_clnt_join(_adapter *padapter); -void concurrent_chk_joinbss_done(_adapter *padapter, int join_res); -#endif //CONFIG_CONCURRENT_MODE - - -struct cmd_hdl { - uint parmsize; - uint8_t (*h2cfuns)(struct _ADAPTER *padapter, uint8_t *pbuf); -}; - -//TODO -#if 0 - -uint8_t read_macreg_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t write_macreg_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t read_bbreg_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t write_bbreg_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t read_rfreg_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t write_rfreg_hdl(_adapter *padapter, uint8_t *pbuf); - -#endif //#if 0 - -uint8_t NULL_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t join_cmd_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t disconnect_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t createbss_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t setopmode_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t sitesurvey_cmd_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t setauth_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t setkey_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t set_stakey_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t set_assocsta_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t del_assocsta_hdl(_adapter *padapter, uint8_t *pbuf); -uint8_t add_ba_hdl(_adapter *padapter, unsigned char *pbuf); - -uint8_t mlme_evt_hdl(_adapter *padapter, unsigned char *pbuf); -uint8_t h2c_msg_hdl(_adapter *padapter, unsigned char *pbuf); -uint8_t tx_beacon_hdl(_adapter *padapter, unsigned char *pbuf); -uint8_t set_chplan_hdl(_adapter *padapter, unsigned char *pbuf); -uint8_t led_blink_hdl(_adapter *padapter, unsigned char *pbuf); -uint8_t set_csa_hdl(_adapter *padapter, unsigned char *pbuf); //Kurt: Handling DFS channel switch announcement ie. -uint8_t tdls_hdl(_adapter *padapter, unsigned char *pbuf); - -#if CONFIG_AUTO_RECONNECT -extern void reconnect_timer_hdl(void *FunctionContext); -#endif - -#define GEN_DRV_CMD_HANDLER(size, cmd) {size, &cmd ## _hdl}, -#define GEN_MLME_EXT_HANDLER(size, cmd) {size, cmd}, - -#ifdef _RTW_CMD_C_ - -const struct cmd_hdl wlancmds[] = -{ - GEN_DRV_CMD_HANDLER(0, NULL) /*0*/ - GEN_DRV_CMD_HANDLER(0, NULL) - GEN_DRV_CMD_HANDLER(0, NULL) - GEN_DRV_CMD_HANDLER(0, NULL) - GEN_DRV_CMD_HANDLER(0, NULL) - GEN_DRV_CMD_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) /*10*/ - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct joinbss_parm), join_cmd_hdl) /*14*/ - GEN_MLME_EXT_HANDLER(sizeof (struct disconnect_parm), disconnect_hdl) -//TODO -// GEN_MLME_EXT_HANDLER(sizeof (struct createbss_parm), createbss_hdl) - GEN_MLME_EXT_HANDLER(sizeof (struct createbss_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct setopmode_parm), setopmode_hdl) - GEN_MLME_EXT_HANDLER(sizeof (struct sitesurvey_parm), sitesurvey_cmd_hdl) /*18*/ - GEN_MLME_EXT_HANDLER(sizeof (struct setauth_parm), setauth_hdl) - GEN_MLME_EXT_HANDLER(sizeof (struct setkey_parm), setkey_hdl) /*20*/ - GEN_MLME_EXT_HANDLER(sizeof (struct set_stakey_parm), set_stakey_hdl) - GEN_MLME_EXT_HANDLER(sizeof (struct set_assocsta_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct del_assocsta_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct setstapwrstate_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct setbasicrate_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct getbasicrate_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct setdatarate_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct getdatarate_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct setphyinfo_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct getphyinfo_parm), NULL) /*30*/ - GEN_MLME_EXT_HANDLER(sizeof (struct setphy_parm), NULL) - GEN_MLME_EXT_HANDLER(sizeof (struct getphy_parm), NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) /*40*/ - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) -//TODO -#if RX_AGGREGATION - GEN_MLME_EXT_HANDLER(sizeof(struct addBaReq_parm), add_ba_hdl) -#else - GEN_MLME_EXT_HANDLER(sizeof(struct addBaReq_parm), NULL) -#endif - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) /*50*/ - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(0, NULL) - GEN_MLME_EXT_HANDLER(sizeof(struct Tx_Beacon_param), tx_beacon_hdl) /*55*/ - GEN_MLME_EXT_HANDLER(0, mlme_evt_hdl) /*56*/ - GEN_MLME_EXT_HANDLER(0, rtw_drvextra_cmd_hdl) /*57*/ -//TODO -// GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl) /*58*/ - GEN_MLME_EXT_HANDLER(0, NULL) /*58*/ -//TODO -// GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param), set_chplan_hdl) /*59*/ - GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param), NULL) /*59*/ -//TODO -// GEN_MLME_EXT_HANDLER(sizeof(struct LedBlink_param), led_blink_hdl) /*60*/ - GEN_MLME_EXT_HANDLER(0, NULL) /*60*/ -//TODO -// GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelSwitch_param), set_csa_hdl) /*61*/ - GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelSwitch_param), NULL) /*61*/ -//TODO -// GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param), tdls_hdl) /*62*/ - GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param), NULL) /*62*/ -#ifdef CONFIG_P2P_NEW - GEN_MLME_EXT_HANDLER(0, rtw_p2p_cmd_hdl) /*63*/ -#endif -}; - -#endif - -struct C2HEvent_Header -{ - -#ifdef CONFIG_LITTLE_ENDIAN - - unsigned int len:16; - unsigned int ID:8; - unsigned int seq:8; - -#elif defined(CONFIG_BIG_ENDIAN) - - unsigned int seq:8; - unsigned int ID:8; - unsigned int len:16; - -#else - -# error "Must be LITTLE or BIG Endian" - -#endif - - unsigned int rsvd; - -}; - -void rtw_dummy_event_callback(_adapter *adapter , uint8_t *pbuf); -void rtw_fwdbg_event_callback(_adapter *adapter , uint8_t *pbuf); - -enum rtw_c2h_event -{ - GEN_EVT_CODE(_Read_MACREG)=0, /*0*/ - GEN_EVT_CODE(_Read_BBREG), - GEN_EVT_CODE(_Read_RFREG), - GEN_EVT_CODE(_Read_EEPROM), - GEN_EVT_CODE(_Read_EFUSE), - GEN_EVT_CODE(_Read_CAM), /*5*/ - GEN_EVT_CODE(_Get_BasicRate), - GEN_EVT_CODE(_Get_DataRate), - GEN_EVT_CODE(_Survey), /*8*/ - GEN_EVT_CODE(_SurveyDone), /*9*/ - - GEN_EVT_CODE(_JoinBss) , /*10*/ - GEN_EVT_CODE(_AddSTA), - GEN_EVT_CODE(_DelSTA), - GEN_EVT_CODE(_AtimDone) , - GEN_EVT_CODE(_TX_Report), - GEN_EVT_CODE(_CCX_Report), /*15*/ - GEN_EVT_CODE(_DTM_Report), - GEN_EVT_CODE(_TX_Rate_Statistics), - GEN_EVT_CODE(_C2HLBK), - GEN_EVT_CODE(_FWDBG), - GEN_EVT_CODE(_C2HFEEDBACK), /*20*/ - GEN_EVT_CODE(_ADDBA), - GEN_EVT_CODE(_C2HBCN), - GEN_EVT_CODE(_ReportPwrState), //filen: only for PCIE, USB - GEN_EVT_CODE(_CloseRF), //filen: only for PCIE, work around ASPM - MAX_C2HEVT -}; - - -#ifdef _RTW_MLME_EXT_C_ - -const static struct fwevent wlanevents[] = -{ - {0, rtw_dummy_event_callback}, /*0*/ - {0, NULL}, - {0, NULL}, - {0, NULL}, - {0, NULL}, - {0, NULL}, - {0, NULL}, - {0, NULL}, - {0, &rtw_survey_event_callback}, /*8*/ - {sizeof (struct surveydone_event), &rtw_surveydone_event_callback}, /*9*/ - {0, &rtw_joinbss_event_callback}, /*10*/ - {sizeof(struct stassoc_event), &rtw_stassoc_event_callback}, - {sizeof(struct stadel_event), &rtw_stadel_event_callback}, -//TODO -// {0, &rtw_atimdone_event_callback}, - {0, NULL}, /*rtw_atimdone_event_callback*/ - {0, rtw_dummy_event_callback}, - {0, NULL}, /*15*/ - {0, NULL}, - {0, NULL}, - {0, NULL}, -//TODO -// {0, rtw_fwdbg_event_callback}, - {0, NULL}, /*rtw_fwdbg_event_callback*/ - {0, NULL}, /*20*/ - {0, NULL}, - {0, NULL}, -//TODO -// {0, &rtw_cpwm_event_callback}, - {0, NULL}, /*rtw_cpwm_event_callback*/ -}; - -#endif//_RTL8192C_CMD_C_ - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_mp.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_mp.h deleted file mode 100644 index 0700ad1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_mp.h +++ /dev/null @@ -1,722 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _RTW_MP_H_ -#define _RTW_MP_H_ - -#ifndef PLATFORM_WINDOWS -// 00 - Success -// 11 - Error -#define STATUS_SUCCESS (0x00000000L) -#define STATUS_PENDING (0x00000103L) - -#define STATUS_UNSUCCESSFUL (0xC0000001L) -#define STATUS_INSUFFICIENT_RESOURCES (0xC000009AL) -#define STATUS_NOT_SUPPORTED (0xC00000BBL) - -#define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS) -#define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING) -#define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L) -#define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L) -#define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L) -#define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L) - -#define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL) -#define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES) -#define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L) -#define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L) -#define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L) -#define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L) -#define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L) -#define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L) -#define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L) -#define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL) -#define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL) -#define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL) -#define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL) -#define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL) -#define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED) -#define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL) -#define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L) -#define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L) -#define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L) -#define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L) -#define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L) -#define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L) -#define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L) -#define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L) -#define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L) -#define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L) -#define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL) -#define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL) -#define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL) -#define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL) -#define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL) -#define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL) - -#define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L) -#define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L) -#define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L) -#define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L) -#define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L) // cause 27 -#define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L) // cause 35,45 -#define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L) // cause 37 -#define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L) // cause 49 -#define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L) // cause 93 -#define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L) // cause 3 -#endif /* #ifndef PLATFORM_WINDOWS */ - -#if 0 -#define MPT_NOOP 0 -#define MPT_READ_MAC_1BYTE 1 -#define MPT_READ_MAC_2BYTE 2 -#define MPT_READ_MAC_4BYTE 3 -#define MPT_WRITE_MAC_1BYTE 4 -#define MPT_WRITE_MAC_2BYTE 5 -#define MPT_WRITE_MAC_4BYTE 6 -#define MPT_READ_BB_CCK 7 -#define MPT_WRITE_BB_CCK 8 -#define MPT_READ_BB_OFDM 9 -#define MPT_WRITE_BB_OFDM 10 -#define MPT_READ_RF 11 -#define MPT_WRITE_RF 12 -#define MPT_READ_EEPROM_1BYTE 13 -#define MPT_WRITE_EEPROM_1BYTE 14 -#define MPT_READ_EEPROM_2BYTE 15 -#define MPT_WRITE_EEPROM_2BYTE 16 -#define MPT_SET_CSTHRESHOLD 21 -#define MPT_SET_INITGAIN 22 -#define MPT_SWITCH_BAND 23 -#define MPT_SWITCH_CHANNEL 24 -#define MPT_SET_DATARATE 25 -#define MPT_SWITCH_ANTENNA 26 -#define MPT_SET_TX_POWER 27 -#define MPT_SET_CONT_TX 28 -#define MPT_SET_SINGLE_CARRIER 29 -#define MPT_SET_CARRIER_SUPPRESSION 30 -#define MPT_GET_RATE_TABLE 31 -#define MPT_READ_TSSI 32 -#define MPT_GET_THERMAL_METER 33 -#endif - -typedef enum _ANTENNA_PATH{ - ANTENNA_NONE = 0x00, - ANTENNA_D , - ANTENNA_C , - ANTENNA_CD , - ANTENNA_B , - ANTENNA_BD , - ANTENNA_BC , - ANTENNA_BCD , - ANTENNA_A , - ANTENNA_AD , - ANTENNA_AC , - ANTENNA_ACD , - ANTENNA_AB , - ANTENNA_ABD , - ANTENNA_ABC , - ANTENNA_ABCD -} ANTENNA_PATH; - - -#define MAX_MP_XMITBUF_SZ 2048 -#define NR_MP_XMITFRAME 8 - -struct mp_xmit_frame -{ - _list list; - - struct pkt_attrib attrib; - - _pkt *pkt; - - int frame_tag; - - _adapter *padapter; - -#ifdef CONFIG_USB_HCI - - //insert urb, irp, and irpcnt info below... - //max frag_cnt = 8 - - uint8_t *mem_addr; - uint32_t sz[8]; - -#if defined(PLATFORM_OS_XP) || defined(PLATFORM_LINUX) - PURB pxmit_urb[8]; -#endif - -#ifdef PLATFORM_OS_XP - PIRP pxmit_irp[8]; -#endif - - uint8_t bpending[8]; - int32_t ac_tag[8]; - int32_t last[8]; - uint irpcnt; - uint fragcnt; -#endif /* CONFIG_USB_HCI */ - - uint mem[(MAX_MP_XMITBUF_SZ >> 2)]; -}; - -struct mp_wiparam -{ - uint32_t bcompleted; - uint32_t act_type; - uint32_t io_offset; - uint32_t io_value; -}; - -typedef void(*wi_act_func)(void* padapter); - -#ifdef PLATFORM_WINDOWS -struct mp_wi_cntx -{ - uint8_t bmpdrv_unload; - - // Work Item - NDIS_WORK_ITEM mp_wi; - NDIS_EVENT mp_wi_evt; - _lock mp_wi_lock; - uint8_t bmp_wi_progress; - wi_act_func curractfunc; - // Variable needed in each implementation of CurrActFunc. - struct mp_wiparam param; -}; -#endif - -struct mp_tx -{ - uint8_t stop; - uint32_t count, sended; - uint8_t payload; - struct pkt_attrib attrib; - struct tx_desc desc; - uint8_t *pallocated_buf; - uint8_t *buf; - uint32_t buf_size, write_size; - //_thread_hdl_ PktTxThread; - struct task_struct MpXmitThread; -}; - -#define MP_MAX_LINES 1000 -#define MP_MAX_LINES_BYTES 256 - - -typedef void (*MPT_WORK_ITEM_HANDLER)(IN void *Adapter); -typedef struct _MPT_CONTEXT -{ - // Indicate if we have started Mass Production Test. - BOOLEAN bMassProdTest; - - // Indicate if the driver is unloading or unloaded. - BOOLEAN bMptDrvUnload; - - _sema MPh2c_Sema; - _timer MPh2c_timeout_timer; -// Event used to sync H2c for BT control - - BOOLEAN MptH2cRspEvent; - BOOLEAN MptBtC2hEvent; - BOOLEAN bMPh2c_timeout; - - /* 8190 PCI does not support NDIS_WORK_ITEM. */ - // Work Item for Mass Production Test. - //NDIS_WORK_ITEM MptWorkItem; -// RT_WORK_ITEM MptWorkItem; - // Event used to sync the case unloading driver and MptWorkItem is still in progress. -// NDIS_EVENT MptWorkItemEvent; - // To protect the following variables. -// NDIS_SPIN_LOCK MptWorkItemSpinLock; - // Indicate a MptWorkItem is scheduled and not yet finished. - BOOLEAN bMptWorkItemInProgress; - // An instance which implements function and context of MptWorkItem. - MPT_WORK_ITEM_HANDLER CurrMptAct; - - // 1=Start, 0=Stop from UI. - uint32_t MptTestStart; - // _TEST_MODE, defined in MPT_Req2.h - uint32_t MptTestItem; - // Variable needed in each implementation of CurrMptAct. - uint32_t MptActType; // Type of action performed in CurrMptAct. - // The Offset of IO operation is depend of MptActType. - uint32_t MptIoOffset; - // The Value of IO operation is depend of MptActType. - uint32_t MptIoValue; - // The RfPath of IO operation is depend of MptActType. - uint32_t MptRfPath; - - WIRELESS_MODE MptWirelessModeToSw; // Wireless mode to switch. - uint8_t MptChannelToSw; // Channel to switch. - uint8_t MptInitGainToSet; // Initial gain to set. - //uint32_t bMptAntennaA; // TRUE if we want to use antenna A. - uint32_t MptBandWidth; // bandwidth to switch. - uint32_t MptRateIndex; // rate index. - // Register value kept for Single Carrier Tx test. - uint8_t btMpCckTxPower; - // Register value kept for Single Carrier Tx test. - uint8_t btMpOfdmTxPower; - // For MP Tx Power index - uint8_t TxPwrLevel[2]; // rf-A, rf-B - - // Content of RCR Regsiter for Mass Production Test. - uint32_t MptRCR; - // TRUE if we only receive packets with specific pattern. - BOOLEAN bMptFilterPattern; - // Rx OK count, statistics used in Mass Production Test. - uint32_t MptRxOkCnt; - // Rx CRC32 error count, statistics used in Mass Production Test. - uint32_t MptRxCrcErrCnt; - - BOOLEAN bCckContTx; // TRUE if we are in CCK Continuous Tx test. - BOOLEAN bOfdmContTx; // TRUE if we are in OFDM Continuous Tx test. - BOOLEAN bStartContTx; // TRUE if we have start Continuous Tx test. - // TRUE if we are in Single Carrier Tx test. - BOOLEAN bSingleCarrier; - // TRUE if we are in Carrier Suppression Tx Test. - BOOLEAN bCarrierSuppression; - //TRUE if we are in Single Tone Tx test. - BOOLEAN bSingleTone; - - // ACK counter asked by K.Y.. - BOOLEAN bMptEnableAckCounter; - uint32_t MptAckCounter; - - // SD3 Willis For 8192S to save 1T/2T RF table for ACUT Only fro ACUT delete later ~~~! - //int8_t BufOfLines[2][MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - //int8_t BufOfLines[2][MP_MAX_LINES][MP_MAX_LINES_BYTES]; - //int32_t RfReadLine[2]; - - uint8_t APK_bound[2]; //for APK path A/path B - BOOLEAN bMptIndexEven; - - uint8_t backup0xc50; - uint8_t backup0xc58; - uint8_t backup0xc30; - uint8_t backup0x52_RF_A; - uint8_t backup0x52_RF_B; - - uint8_t h2cReqNum; - uint8_t c2hBuf[20]; - - uint8_t btInBuf[100]; - uint32_t mptOutLen; - uint8_t mptOutBuf[100]; - -}MPT_CONTEXT, *PMPT_CONTEXT; -//#endif - -//#define RTPRIV_IOCTL_MP ( SIOCIWFIRSTPRIV + 0x17) -enum { - WRITE_REG = 1, - READ_REG, - WRITE_RF, - READ_RF, - MP_START, - MP_STOP, - MP_RATE, - MP_CHANNEL, - MP_BANDWIDTH, - MP_TXPOWER, - MP_ANT_TX, - MP_ANT_RX, - MP_CTX, - MP_QUERY, - MP_ARX, - MP_PSD, - MP_PWRTRK, - MP_THER, - MP_IOCTL, - EFUSE_GET, - EFUSE_SET, - CONFIG_GET, - CONFIG_SET, - MP_RESET_STATS, - MP_DUMP, - MP_PHYPARA, - MP_SetRFPathSwh, - MP_QueryDrvStats, - MP_SetBT, - TEST_CFG, - MP_NULL, - MP_GET_TXPOWER_INX, - MP_SET_PREAMBLE, - MP_DISABLE_BT_COEXIST, - MP_PwrCtlDM, - MP_IQK, - MP_LCK, - MP_DRV_ABILITY -}; - -struct mp_priv -{ - _adapter *papdater; - - //Testing Flag - uint32_t mode;//0 for normal type packet, 1 for loopback packet (16bytes TXCMD) - - uint32_t prev_fw_state; - - //OID cmd handler - struct mp_wiparam workparam; -// uint8_t act_in_progress; - - //Tx Section - uint8_t TID; - uint32_t tx_pktcount; - struct mp_tx tx; - - //Rx Section - uint8_t rx_pkt_by_mac; - uint32_t rx_pktcount; - uint32_t rx_crcerrpktcount; - uint32_t rx_macpktcount; - uint32_t rx_pktloss; - - struct recv_stat rxstat; - - //RF/BB relative - uint8_t channel; - uint8_t bandwidth; - uint8_t prime_channel_offset; - uint8_t txpoweridx; - uint8_t txpoweridx_b; - uint8_t rateidx; - uint32_t preamble; -// uint8_t modem; - uint32_t CrystalCap; -// uint32_t curr_crystalcap; - - uint16_t antenna_tx; - uint16_t antenna_rx; -// uint8_t curr_rfpath; - - uint8_t check_mp_pkt; - - uint8_t bSetTxPower; - uint8_t bCCKTxPowerAdjust; - uint8_t bFAStatistics; -// uint ForcedDataRate; - uint8_t mp_dm; - struct wlan_network mp_network; - NDIS_802_11_MAC_ADDRESS network_macaddr; - -#ifdef PLATFORM_WINDOWS - uint32_t rx_testcnt; - uint32_t rx_testcnt1; - uint32_t rx_testcnt2; - uint32_t tx_testcnt; - uint32_t tx_testcnt1; - - struct mp_wi_cntx wi_cntx; - - uint8_t h2c_result; - uint8_t h2c_seqnum; - uint16_t h2c_cmdcode; - uint8_t h2c_resp_parambuf[512]; - _lock h2c_lock; - _lock wkitm_lock; - uint32_t h2c_cmdcnt; - NDIS_EVENT h2c_cmd_evt; - NDIS_EVENT c2h_set; - NDIS_EVENT h2c_clr; - NDIS_EVENT cpwm_int; - - NDIS_EVENT scsir_full_evt; - NDIS_EVENT scsiw_empty_evt; -#endif - - uint8_t *pallocated_mp_xmitframe_buf; - uint8_t *pmp_xmtframe_buf; - _queue free_mp_xmitqueue; - uint32_t free_mp_xmitframe_cnt; - - MPT_CONTEXT MptCtx; -}; - -typedef struct _IOCMD_STRUCT_ { - uint8_t cmdclass; - uint16_t value; - uint8_t index; -}IOCMD_STRUCT; - -struct rf_reg_param { - uint32_t path; - uint32_t offset; - uint32_t value; -}; - -struct bb_reg_param { - uint32_t offset; - uint32_t value; -}; -//======================================================================= - -#define LOWER _TRUE -#define RAISE _FALSE - -/* Hardware Registers */ -#if 0 -#if 0 -#define IOCMD_CTRL_REG 0x102502C0 -#define IOCMD_DATA_REG 0x102502C4 -#else -#define IOCMD_CTRL_REG 0x10250370 -#define IOCMD_DATA_REG 0x10250374 -#endif - -#define IOCMD_GET_THERMAL_METER 0xFD000028 - -#define IOCMD_CLASS_BB_RF 0xF0 -#define IOCMD_BB_READ_IDX 0x00 -#define IOCMD_BB_WRITE_IDX 0x01 -#define IOCMD_RF_READ_IDX 0x02 -#define IOCMD_RF_WRIT_IDX 0x03 -#endif -#define BB_REG_BASE_ADDR 0x800 - -/* MP variables */ -#if 0 -#define _2MAC_MODE_ 0 -#define _LOOPBOOK_MODE_ 1 -#endif -typedef enum _MP_MODE_ { - MP_OFF, - MP_ON, - MP_ERR, - MP_CONTINUOUS_TX, - MP_SINGLE_CARRIER_TX, - MP_CARRIER_SUPPRISSION_TX, - MP_SINGLE_TONE_TX, - MP_PACKET_TX, - MP_PACKET_RX -} MP_MODE; - - -#define MAX_RF_PATH_NUMS MAX_RF_PATH - - -extern uint8_t mpdatarate[NumRates]; - -/* MP set force data rate base on the definition. */ -typedef enum _MPT_RATE_INDEX -{ - /* CCK rate. */ - MPT_RATE_1M, /* 0 */ - MPT_RATE_2M, - MPT_RATE_55M, - MPT_RATE_11M, /* 3 */ - - /* OFDM rate. */ - MPT_RATE_6M, /* 4 */ - MPT_RATE_9M, - MPT_RATE_12M, - MPT_RATE_18M, - MPT_RATE_24M, - MPT_RATE_36M, - MPT_RATE_48M, - MPT_RATE_54M, /* 11 */ - - /* HT rate. */ - MPT_RATE_MCS0, /* 12 */ - MPT_RATE_MCS1, - MPT_RATE_MCS2, - MPT_RATE_MCS3, - MPT_RATE_MCS4, - MPT_RATE_MCS5, - MPT_RATE_MCS6, - MPT_RATE_MCS7, /* 19 */ - MPT_RATE_MCS8, - MPT_RATE_MCS9, - MPT_RATE_MCS10, - MPT_RATE_MCS11, - MPT_RATE_MCS12, - MPT_RATE_MCS13, - MPT_RATE_MCS14, - MPT_RATE_MCS15, /* 27 */ - MPT_RATE_LAST -}MPT_RATE_E, *PMPT_RATE_E; - -#define MAX_TX_PWR_INDEX_N_MODE 64 // 0x3F - -typedef enum _POWER_MODE_ { - POWER_LOW = 0, - POWER_NORMAL -}POWER_MODE; - - -#define RX_PKT_BROADCAST 1 -#define RX_PKT_DEST_ADDR 2 -#define RX_PKT_PHY_MATCH 3 - -#if 0 -#define RPTMaxCount 0x000FFFFF; - -// parameter 1 : BitMask -// bit 0 : OFDM PPDU -// bit 1 : OFDM False Alarm -// bit 2 : OFDM MPDU OK -// bit 3 : OFDM MPDU Fail -// bit 4 : CCK PPDU -// bit 5 : CCK False Alarm -// bit 6 : CCK MPDU ok -// bit 7 : CCK MPDU fail -// bit 8 : HT PPDU counter -// bit 9 : HT false alarm -// bit 10 : HT MPDU total -// bit 11 : HT MPDU OK -// bit 12 : HT MPDU fail -// bit 15 : RX full drop -typedef enum _RXPHY_BITMASK_ -{ - OFDM_PPDU_BIT = 0, - OFDM_FALSE_BIT, - OFDM_MPDU_OK_BIT, - OFDM_MPDU_FAIL_BIT, - CCK_PPDU_BIT, - CCK_FALSE_BIT, - CCK_MPDU_OK_BIT, - CCK_MPDU_FAIL_BIT, - HT_PPDU_BIT, - HT_FALSE_BIT, - HT_MPDU_BIT, - HT_MPDU_OK_BIT, - HT_MPDU_FAIL_BIT, -} RXPHY_BITMASK; -#endif - -typedef enum _ENCRY_CTRL_STATE_ { - HW_CONTROL, //hw encryption& decryption - SW_CONTROL, //sw encryption& decryption - HW_ENCRY_SW_DECRY, //hw encryption & sw decryption - SW_ENCRY_HW_DECRY //sw encryption & hw decryption -}ENCRY_CTRL_STATE; - -typedef enum _PREAMBLE { - Long_Preamble = 0x01, - Short_Preamble , - Long_GI , - Short_GI -} PREAMBLE; - - - -//======================================================================= -//extern struct mp_xmit_frame *alloc_mp_xmitframe(struct mp_priv *pmp_priv); -//extern int free_mp_xmitframe(struct xmit_priv *pxmitpriv, struct mp_xmit_frame *pmp_xmitframe); - -extern int32_t init_mp_priv(_adapter * padapter); -extern void free_mp_priv(struct mp_priv *pmp_priv); -extern int32_t MPT_InitializeAdapter(_adapter * padapter, uint8_t Channel); -extern void MPT_DeInitAdapter(_adapter * padapter); -extern int32_t mp_start_test(_adapter * padapter); -extern void mp_stop_test(_adapter * padapter); - -//======================================================================= -//extern void IQCalibrateBcut(_adapter * pAdapter); - -//extern uint32_t bb_reg_read(_adapter * Adapter, uint16_t offset); -//extern uint8_t bb_reg_write(_adapter * Adapter, uint16_t offset, uint32_t value); -//extern uint32_t rf_reg_read(_adapter * Adapter, uint8_t path, uint8_t offset); -//extern uint8_t rf_reg_write(_adapter * Adapter, uint8_t path, uint8_t offset, uint32_t value); - -//extern uint32_t get_bb_reg(_adapter * Adapter, uint16_t offset, uint32_t bitmask); -//extern uint8_t set_bb_reg(_adapter * Adapter, uint16_t offset, uint32_t bitmask, uint32_t value); -//extern uint32_t get_rf_reg(_adapter * Adapter, uint8_t path, uint8_t offset, uint32_t bitmask); -//extern uint8_t set_rf_reg(_adapter * Adapter, uint8_t path, uint8_t offset, uint32_t bitmask, uint32_t value); - -extern uint32_t _read_rfreg(_adapter * padapter, uint8_t rfpath, uint32_t addr, uint32_t bitmask); -extern void _write_rfreg(_adapter * padapter, uint8_t rfpath, uint32_t addr, uint32_t bitmask, uint32_t val); - -extern uint32_t read_macreg(_adapter *padapter, uint32_t addr, uint32_t sz); -extern void write_macreg(_adapter *padapter, uint32_t addr, uint32_t val, uint32_t sz); -extern uint32_t read_bbreg(_adapter *padapter, uint32_t addr, uint32_t bitmask); -extern void write_bbreg(_adapter *padapter, uint32_t addr, uint32_t bitmask, uint32_t val); -extern uint32_t read_rfreg(_adapter * padapter, uint8_t rfpath, uint32_t addr); -extern void write_rfreg(_adapter * padapter, uint8_t rfpath, uint32_t addr, uint32_t val); - -extern void SetChannel(_adapter * pAdapter); -extern void SetBandwidth(_adapter * pAdapter); -extern void SetTxPower(_adapter * pAdapter); -extern void SetAntennaPathPower(_adapter * pAdapter); -//extern void SetTxAGCOffset(_adapter * pAdapter, uint32_t ulTxAGCOffset); -extern void SetDataRate(_adapter * pAdapter); - -extern void SetAntenna(_adapter * pAdapter); - -//extern void SetCrystalCap(_adapter * pAdapter); - -extern int32_t SetThermalMeter(_adapter * pAdapter, uint8_t target_ther); -extern void GetThermalMeter(_adapter * pAdapter, uint8_t *value); - -extern void SetContinuousTx(_adapter * pAdapter, uint8_t bStart); -extern void SetSingleCarrierTx(_adapter * pAdapter, uint8_t bStart); -extern void SetSingleToneTx(_adapter * pAdapter, uint8_t bStart); -extern void SetCarrierSuppressionTx(_adapter * pAdapter, uint8_t bStart); -extern void PhySetTxPowerLevel(_adapter * pAdapter); - -extern void fill_txdesc_for_mp(_adapter * padapter, struct tx_desc *ptxdesc); -extern void SetPacketTx(_adapter * padapter); -extern void SetPacketRx(_adapter * pAdapter, uint8_t bStartRx); - -extern void ResetPhyRxPktCount(_adapter * pAdapter); -extern uint32_t GetPhyRxPktReceived(_adapter * pAdapter); -extern uint32_t GetPhyRxPktCRC32Error(_adapter * pAdapter); - -extern int32_t SetPowerTracking(_adapter * padapter, uint8_t enable); -extern void GetPowerTracking(_adapter * padapter, uint8_t *enable); - -extern uint32_t mp_query_psd(_adapter * pAdapter, uint8_t *data); - - -extern void Hal_SetAntenna(_adapter * pAdapter); -extern void Hal_SetBandwidth(_adapter * pAdapter); - -extern void Hal_SetTxPower(_adapter * pAdapter); -extern void Hal_SetCarrierSuppressionTx(_adapter * pAdapter, uint8_t bStart); -extern void Hal_SetSingleToneTx ( _adapter * pAdapter , uint8_t bStart ); -extern void Hal_SetSingleCarrierTx (_adapter * pAdapter, uint8_t bStart); -extern void Hal_SetContinuousTx (_adapter * pAdapter, uint8_t bStart); -extern void Hal_SetBandwidth(_adapter * pAdapter); - -extern void Hal_SetDataRate(_adapter * pAdapter); -extern void Hal_SetChannel(_adapter * pAdapter); -extern void Hal_SetAntennaPathPower(_adapter * pAdapter); -extern int32_t Hal_SetThermalMeter(_adapter * pAdapter, uint8_t target_ther); -extern int32_t Hal_SetPowerTracking(_adapter * padapter, uint8_t enable); -extern void Hal_GetPowerTracking(_adapter * padapter, uint8_t * enable); -extern void Hal_GetThermalMeter(_adapter * pAdapter, uint8_t *value); -extern void Hal_mpt_SwitchRfSetting(_adapter * pAdapter); -extern void Hal_MPT_CCKTxPowerAdjust(_adapter * Adapter); -extern void Hal_MPT_CCKTxPowerAdjustbyIndex(_adapter * pAdapter, BOOLEAN beven); -extern void Hal_SetCCKTxPower(_adapter * pAdapter, uint8_t * TxPower); -extern void Hal_SetOFDMTxPower(_adapter * pAdapter, uint8_t * TxPower); -extern void Hal_TriggerRFThermalMeter(_adapter * pAdapter); -extern uint8_t Hal_ReadRFThermalMeter(_adapter * pAdapter); -extern void Hal_SetCCKContinuousTx(_adapter * pAdapter, uint8_t bStart); -extern void Hal_SetOFDMContinuousTx(_adapter * pAdapter, uint8_t bStart); -extern void Hal_ProSetCrystalCap (_adapter * pAdapter , uint32_t CrystalCapVal); -extern void _rtw_mp_xmit_priv(struct xmit_priv *pxmitpriv); -extern void MP_PHY_SetRFPathSwitch(_adapter * pAdapter ,BOOLEAN bMain); -extern uint32_t mpt_ProQueryCalTxPower(_adapter * pAdapter, uint8_t RfPath); -extern void MPT_PwrCtlDM(PADAPTER padapter, uint32_t bstart); - -#endif //_RTW_MP_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_p2p.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_p2p.h deleted file mode 100644 index dc77b5d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_p2p.h +++ /dev/null @@ -1,58 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _RTW_P2P_H_ -#define _RTW_P2P_H_ - -#define P2P_WILDCARD_SSID "DIRECT-" -#define P2P_WILDCARD_SSID_LEN 7 - -#define P2P_SEND_ACTION_AFTER_PROBE_RSP 1 - -#define RTW_P2P_SEND_ACTION_SUCCESS 0 -#define RTW_P2P_SEND_ACTION_FAILED 2 - -static inline bool rtw_p2p_chk_state(struct wifidirect_info *wdinfo, enum P2P_STATE state) -{ - return wdinfo->p2p_state == state; -} -static inline bool rtw_p2p_chk_role(struct wifidirect_info *wdinfo, enum P2P_ROLE role) -{ - return wdinfo->role == role; -} - -extern void rtw_p2p_remain_on_channel(_adapter *padapter, uint8_t channel, uint8_t wait_time); -extern void rtw_p2p_cancel_remain_on_channel(_adapter *padapter); -extern void rtw_p2p_special_scan_param(_adapter *padapter, uint8_t channel, uint8_t *mac); -extern void rtw_p2p_set_p2p_role(_adapter *padapter, uint32_t role); -extern void rtw_p2p_set_p2p_state(_adapter *padapter, uint32_t state); -extern int rtw_p2p_send_mgnt(_adapter *padapter, uint8_t *data, uint16_t len, uint16_t flags); -extern void rtw_p2p_indicate_mgnt(_adapter *padapter, uint8_t *data, uint16_t len, uint8_t channel); -extern void rtw_indicate_sta_assoc(_adapter *padapter, uint8_t *addr, uint8_t *buf, uint16_t len); -extern void rtw_p2p_indicate_sta_disassoc(_adapter *padapter, uint8_t *addr); -extern void rtw_p2p_indicate_send_action_done(_adapter *padapter, uint16_t status); - -extern int rtw_p2p_init_mlme_ext(_adapter *padapter); -extern void rtw_p2p_deinit_mlme_ext(_adapter *padapter); -extern int rtw_init_p2p_wdinfo(_adapter *padapter); -extern void rtw_deinit_p2p_wdinfo(_adapter *padapter); -extern void rtw_p2p_pre_tx_scan_cmd_callback(_adapter *padapter); - -#endif //_RTW_P2P_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_promisc.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_promisc.h deleted file mode 100644 index c8a1bb7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_promisc.h +++ /dev/null @@ -1,38 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef _RTW_PROMISC_H_ -#define _RTW_PROMISC_H_ -#include -#ifdef CONFIG_PROMISC -void promisc_deinit(_adapter *padapter); -//void promisc_set_enable(_adapter *padapter, uint8_t enabled, uint8_t len_used); -int promisc_recv_func(_adapter *padapter, union recv_frame *rframe); -#endif -int promisc_set(rtw_rcr_level_t enabled, void (*callback)(unsigned char*, unsigned int, void*), unsigned char len_used); -unsigned char is_promisc_enabled(void); -int promisc_get_fixed_channel(void * fixed_bssid, uint8_t * ssid, int *ssid_length); -void promisc_issue_probereq(void); -void promisc_issue_probersp(unsigned char *da); -void promisc_stop_tx_beacn(void); -void promisc_resume_tx_beacn(void); -void promisc_get_ap_info(rtw_result_t (*func)(char *ssid, uint8_t ssid_len, int16_t rssi, char channel, char security)); -#endif //_RTW_PROMISC_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_psk.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_psk.h deleted file mode 100644 index 2813e90..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_psk.h +++ /dev/null @@ -1,341 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef _RTW_PSK_H_ -#define _RTW_PSK_H_ - -#define GMK_LEN 32 -#define GTK_LEN 32 -#define PMK_LEN 32 -#define KEY_NONCE_LEN 32 -#define NumGroupKey 4 -#define KEY_RC_LEN 8 -#define KEY_IV_LEN 16 -#define KEY_RSC_LEN 8 -#define KEY_ID_LEN 8 -#define KEY_MIC_LEN 16 -#define KEY_MATERIAL_LEN 2 -#define PTK_LEN_EAPOLMIC 16 -#define PTK_LEN_EAPOLENC 16 -#define PTK_LEN_TKIP 64 -#define PTK_LEN_CCMP 48 -#define LIB1X_ETHER_EAPOL_TYPE 0x888E - -#define DescTypePos 0 -#define KeyInfoPos 1 -#define KeyLenPos 3 -#define ReplayCounterPos 5 -#define KeyNoncePos 13 -#define KeyIVPos 45 -#define KeyRSCPos 61 -#define KeyIDPos 69 -#define KeyMICPos 77 -#define KeyDataLenPos 93 -#define KeyDataPos 95 -#define LIB1X_EAPOL_VER 1 //0000 0001B -#define LIB1X_EAPOL_EAPPKT 0 //0000 0000B -#define LIB1X_EAPOL_START 1 //0000 0001B -#define LIB1X_EAPOL_LOGOFF 2 //0000 0010B -#define LIB1X_EAPOL_KEY 3 //0000 0011B -#define LIB1X_EAPOL_ENCASFALERT 4 //0000 0100B - - -#define A_SHA_DIGEST_LEN 20 -#define ETHER_HDRLEN 14 -#define LIB1X_EAPOL_HDRLEN 4 -#define INFO_ELEMENT_SIZE 128 -#define MAX_EAPOLMSG_LEN 512 -#define MAX_EAPOLKEYMSG_LEN (MAX_EAPOLMSG_LEN-(ETHER_HDRLEN+LIB1X_EAPOL_HDRLEN)) -#define EAPOLMSG_HDRLEN 95 //EAPOL-key payload length without KeyData -#define WPA_ELEMENT_ID 0xDD -#define WPA2_ELEMENT_ID 0x30 - -#ifndef TRUE -#define TRUE 1 -#endif -#ifndef FALSE -#define FALSE 0 -#endif - -#define ETHER_ADDRLEN 6 -#define PMK_EXPANSION_CONST "Pairwise key expansion" -#define PMK_EXPANSION_CONST_SIZE 22 -#define GMK_EXPANSION_CONST "Group key expansion" -#define GMK_EXPANSION_CONST_SIZE 19 -#define RANDOM_EXPANSION_CONST "Init Counter" -#define RANDOM_EXPANSION_CONST_SIZE 12 - -#define WLAN_REASON_MIC_FAILURE 14 -#define WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT 15 - -/* - 2008-12-16, For Corega CG-WLCB54GL 54Mbps NIC interoperability issue. - The behavior of this NIC when it connect to the other AP with WPA/TKIP is: - AP <----------------------> STA - .................... - ------------> Assoc Rsp (ok) - ------------> EAPOL-key (4-way msg 1) - <------------ unknown TKIP encryption data - ------------> EAPOL-key (4-way msg 1) - <------------ unknown TKIP encryption data - ..................... - <------------ disassoc (code=8, STA is leaving) when the 5 seconds timer timeout counting from Assoc_Rsp is got. - .................... - ------------> Assoc Rsp (ok) - <-----------> EAPOL-key (4-way handshake success) - - If MAX_RESEND_NUM=3, our AP will send disassoc (code=15, 4-way timeout) to STA before STA sending disassoc to AP. - And this NIC will always can not connect to our AP. - set MAX_RESEND_NUM=5 can fix this issue. - */ -//#define MAX_RESEND_NUM 3 -#define MAX_RESEND_NUM 5 -#define RESEND_TIME 1000 - -#define GK_REKEY_TIME 3600000 //Set rekey period to 1 hour - -typedef enum { - desc_type_RSN = 2, - desc_type_WPA = 254 -} DescTypeRSN; - -typedef enum { - type_Group = 0, - type_Pairwise = 1 -} KeyType; - -typedef enum { - key_desc_ver1 = 1, - key_desc_ver2 = 2 -} KeyDescVer; - -enum { - PSK_WPA = 1, - PSK_WPA2 = 2 -}; - -enum { - PSK_STATE_IDLE, - PSK_STATE_PTKSTART, - PSK_STATE_PTKINITNEGOTIATING, - PSK_STATE_PTKINITDONE, -}; - -enum { - PSK_GSTATE_REKEYNEGOTIATING, - PSK_GSTATE_REKEYESTABLISHED, - PSK_GSTATE_KEYERROR, -}; - -typedef struct _OCTET_STRING { - unsigned char *Octet; - int Length; -} OCTET_STRING; - -typedef union _LARGE_INTEGER { - unsigned char charData[8]; - struct { - unsigned long HighPart; - unsigned long LowPart; - } field; -} LARGE_INTEGER, *PLARGE_INTEGER; - -typedef union _OCTET16_INTEGER { - unsigned char charData[16]; - struct { - LARGE_INTEGER HighPart; - LARGE_INTEGER LowPart; - } field; -} OCTET16_INTEGER; - -typedef union _OCTET32_INTEGER { - unsigned char charData[32]; - struct { - OCTET16_INTEGER HighPart; - OCTET16_INTEGER LowPart; - } field; -} OCTET32_INTEGER; - -// group key info -typedef struct _wpa_global_info { - OCTET32_INTEGER Counter; -//Save PSK to global array -// unsigned char PSK[A_SHA_DIGEST_LEN * 2]; - int GTKAuthenticator; - int GKeyDoneStations; - int GInitAKeys; - int GUpdateStationKeys; - int GkeyReady; - OCTET_STRING AuthInfoElement; - unsigned char AuthInfoBuf[INFO_ELEMENT_SIZE]; - unsigned char MulticastCipher; - OCTET_STRING GNonce; - unsigned char GNonceBuf[KEY_NONCE_LEN]; - unsigned char GTK[NumGroupKey][GTK_LEN]; - unsigned char GMK[GMK_LEN]; - int GN; - int GM; - int GTKRekey; -#ifdef CONFIG_GK_REKEY - struct timer_list GKRekeyTimer; -#endif -} WPA_GLOBAL_INFO; - -// wpa sta info -typedef struct _wpa_sta_info { - int state; - int gstate; - int RSNEnabled; // bit0-WPA, bit1-WPA2 - int PInitAKeys; - unsigned char UnicastCipher; - LARGE_INTEGER CurrentReplayCounter; - LARGE_INTEGER ReplayCounterStarted; // david+1-12-2007 - OCTET_STRING ANonce; - OCTET_STRING SNonce; - unsigned char AnonceBuf[KEY_NONCE_LEN]; - unsigned char SnonceBuf[KEY_NONCE_LEN]; - unsigned char PMK[PMK_LEN]; - unsigned char PTK[PTK_LEN_TKIP]; - OCTET_STRING EAPOLMsgRecvd; - OCTET_STRING EAPOLMsgSend; - OCTET_STRING EapolKeyMsgRecvd; - OCTET_STRING EapolKeyMsgSend; - - unsigned char eapSendBuf[MAX_EAPOLMSG_LEN]; -// unsigned char eapRecvdBuf[MAX_EAPOLMSG_LEN]; - struct timer_list resendTimer; - int resendCnt; - int clientHndshkProcessing; - int clientHndshkDone; - int clientGkeyUpdate; - LARGE_INTEGER clientMICReportReplayCounter; -} WPA_STA_INFO; - -typedef struct _LIB1X_EAPOL_KEY -{ - unsigned char key_desc_ver; - unsigned char key_info[2]; - unsigned char key_len[2]; - unsigned char key_replay_counter[KEY_RC_LEN]; - unsigned char key_nounce[KEY_NONCE_LEN]; - unsigned char key_iv[KEY_IV_LEN]; - unsigned char key_rsc[KEY_RSC_LEN]; - unsigned char key_id[KEY_ID_LEN]; - unsigned char key_mic[KEY_MIC_LEN]; - unsigned char key_data_len[KEY_MATERIAL_LEN]; - unsigned char *key_data; -} lib1x_eapol_key; - -struct lib1x_eapol -{ - unsigned char protocol_version; - unsigned char packet_type; // This makes it odd in number ! - unsigned short packet_body_length; -}; - -struct wlan_ethhdr_t -{ - unsigned char daddr[WLAN_ETHADDR_LEN]; - unsigned char saddr[WLAN_ETHADDR_LEN]; - unsigned short type; -}; - -typedef enum{ - DOT11_PortStatus_Unauthorized, - DOT11_PortStatus_Authorized, - DOT11_PortStatus_Guest -}DOT11_PORT_STATUS; - -#ifdef CONFIG_MOVE_PSK_TO_ROM -static __inline__ OCTET_STRING SubStr(OCTET_STRING f, unsigned short s, unsigned short l) -{ - OCTET_STRING res; - - res.Length = l; - res.Octet = f.Octet + s; - - return res; -} -#endif - -#define SetSubStr(f,a,l) memcpy(f.Octet+l,a.Octet,a.Length) -#define GetKeyInfo0(f, mask) ((f.Octet[KeyInfoPos + 1] & mask) ? 1 : 0) -#define SetKeyInfo0(f,mask,b) (f.Octet[KeyInfoPos + 1] = (f.Octet[KeyInfoPos + 1] & ~mask) | ( b?mask:0x0) ) -#define GetKeyInfo1(f, mask) ((f.Octet[KeyInfoPos] & mask) ? 1 : 0) -#define SetKeyInfo1(f,mask,b) (f.Octet[KeyInfoPos] = (f.Octet[KeyInfoPos] & ~mask) | ( b?mask:0x0) ) - -// EAPOLKey -#define Message_DescType(f) (f.Octet[DescTypePos]) -#define Message_setDescType(f, type) (f.Octet[DescTypePos] = type) -// Key Information Filed -#define Message_KeyDescVer(f) (f.Octet[KeyInfoPos+1] & 0x07) -#define Message_setKeyDescVer(f, v) (f.Octet[KeyInfoPos+1] &= 0xf8) , f.Octet[KeyInfoPos+1] |= (v & 0x07) -#define Message_KeyType(f) GetKeyInfo0(f, 0x08) -#define Message_setKeyType(f, b) SetKeyInfo0(f,0x08,b) -#define Message_KeyIndex(f) ((f.Octet[KeyInfoPos+1] & 0x30) >> 4) & 0x03 -#define Message_setKeyIndex(f, v) (f.Octet[KeyInfoPos+1] &= 0xcf), f.Octet[KeyInfoPos+1] |= ((v<<4) & 0x30) -#define Message_setInstall(f, b) SetKeyInfo0(f,0x40,b) -#define Message_setKeyAck(f, b) SetKeyInfo0(f,0x80,b) - -#define Message_KeyMIC(f) GetKeyInfo1(f, 0x01) -#define Message_setKeyMIC(f, b) SetKeyInfo1(f,0x01,b) -#define Message_Secure(f) GetKeyInfo1(f,0x02) -#define Message_setSecure(f, b) SetKeyInfo1(f,0x02,b) -#define Message_Error(f) GetKeyInfo1(f,0x04) -#define Message_setError(f, b) SetKeyInfo1(f,0x04,b) -#define Message_Request(f) GetKeyInfo1(f,0x08) -#define Message_setRequest(f, b) SetKeyInfo1(f,0x08,b) -#define Message_setReserved(f, v) (f.Octet[KeyInfoPos] |= (v<<4&0xff)) -#define Message_KeyLength(f) ((unsigned short)(f.Octet[KeyLenPos] <<8) + (unsigned short)(f.Octet[KeyLenPos+1])) -#define Message_setKeyLength(f, v) (f.Octet[KeyLenPos] = (v&0xff00) >>8 , f.Octet[KeyLenPos+1] = (v&0x00ff)) - -#define Message_KeyNonce(f) SubStr(f, KeyNoncePos, KEY_NONCE_LEN) -#define Message_setKeyNonce(f, v) SetSubStr(f, v, KeyNoncePos) -#define Message_EqualKeyNonce(f1, f2) memcmp(f1.Octet + KeyNoncePos, f2.Octet, KEY_NONCE_LEN)? 0:1 -#define Message_setKeyIV(f, v) SetSubStr(f, v, KeyIVPos) -#define Message_setKeyRSC(f, v) SetSubStr(f, v, KeyRSCPos) -#define Message_setKeyID(f, v) SetSubStr(f, v, KeyIDPos) -#define Message_setMIC(f, v) SetSubStr(f, v, KeyMICPos) -#define Message_KeyDataLength(f) ((unsigned short)(f.Octet[KeyDataLenPos] <<8) + (unsigned short)(f.Octet[KeyDataLenPos+1])) -#define Message_setKeyDataLength(f, v) (f.Octet[KeyDataLenPos] = (v&0xff00) >>8 , f.Octet[KeyDataLenPos+1] = (v&0x00ff)) -#define Message_setKeyData(f, v) SetSubStr(f, v, KeyDataPos); - -#define Message_CopyReplayCounter(f1, f2) memcpy(f1.Octet + ReplayCounterPos, f2.Octet + ReplayCounterPos, KEY_RC_LEN) -#define Message_DefaultReplayCounter(li) (((li.field.HighPart == 0xffffffff) && (li.field.LowPart == 0xffffffff) ) ?1:0) - -#define GET_MY_HWADDR(padapter) ((padapter)->eeprompriv.mac_addr) -#define LargeIntegerOverflow(x) (x.field.HighPart == 0xffffffff) && (x.field.LowPart == 0xffffffff) -#define LargeIntegerZero(x) memset(&x.charData, 0, 8) -#define Octet16IntegerOverflow(x) LargeIntegerOverflow(x.field.HighPart) && LargeIntegerOverflow(x.field.LowPart) -#define Octet16IntegerZero(x) memset(&x.charData, 0, 16) -#define SetNonce(ocDst, oc32Counter) SetEAPOL_KEYIV(ocDst, oc32Counter) - -void ClientSendEAPOL(_adapter *padapter, struct sta_info *psta, int resend); -void SendEAPOL(_adapter *padapter, struct sta_info *psta, int resend); -void EAPOLKeyRecvd(_adapter *padapter, struct sta_info *psta); -void ClientEAPOLKeyRecvd(_adapter *padapter, struct sta_info *psta); -void init_wpa_sta_info(_adapter *padapter, struct sta_info *psta); -void psk_init(_adapter *padapter, unsigned char *pie, unsigned short ielen); -void psk_derive(_adapter *padapter, unsigned char *passphrase, unsigned char *ssid); -uint16_t psk_strip_rsn_pairwise(uint8_t *ie, uint16_t ie_len); -uint16_t psk_strip_wpa_pairwise(uint8_t *ie, uint16_t ie_len); - -#endif // _RTW_PSK_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_pwrctrl.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_pwrctrl.h deleted file mode 100644 index d7e2ffe..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_pwrctrl.h +++ /dev/null @@ -1,386 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTW_PWRCTRL_H_ -#define __RTW_PWRCTRL_H_ - - -#ifdef CONFIG_HAS_EARLYSUSPEND -#include -#endif //CONFIG_HAS_EARLYSUSPEND - -#define FW_PWR0 0 -#define FW_PWR1 1 -#define FW_PWR2 2 -#define FW_PWR3 3 - - -#define HW_PWR0 7 -#define HW_PWR1 6 -#define HW_PWR2 2 -#define HW_PWR3 0 -#define HW_PWR4 8 - -#define FW_PWRMSK 0x7 - - -#define XMIT_ALIVE BIT(0) -#define RECV_ALIVE BIT(1) -#define CMD_ALIVE BIT(2) -#define EVT_ALIVE BIT(3) - - -enum Power_Mgnt -{ - PS_MODE_ACTIVE = 0 , - PS_MODE_MIN , - PS_MODE_MAX , - PS_MODE_DTIM , - PS_MODE_VOIP , - PS_MODE_UAPSD_WMM , - PS_MODE_UAPSD , - PS_MODE_IBSS , - PS_MODE_WWLAN , - PM_Radio_Off , - PM_Card_Disable , - PS_MODE_NUM -}; - - -/* - BIT[2:0] = HW state - BIT[3] = Protocol PS state, 0: register active state , 1: register sleep state - BIT[4] = sub-state -*/ - -#define PS_DPS BIT(0) -#define PS_LCLK (PS_DPS) -#define PS_RF_OFF BIT(1) -#define PS_ALL_ON BIT(2) -#define PS_ST_ACTIVE BIT(3) - -#define PS_ISR_ENABLE BIT(4) -#define PS_IMR_ENABLE BIT(5) -#define PS_ACK BIT(6) -#define PS_TOGGLE BIT(7) - -#define PS_STATE_MASK (0x0F) -#define PS_STATE_HW_MASK (0x07) -#define PS_SEQ_MASK (0xc0) - -#define PS_STATE(x) (PS_STATE_MASK & (x)) -#define PS_STATE_HW(x) (PS_STATE_HW_MASK & (x)) -#define PS_SEQ(x) (PS_SEQ_MASK & (x)) - -#define PS_STATE_S0 (PS_DPS) -#define PS_STATE_S1 (PS_LCLK) -#define PS_STATE_S2 (PS_RF_OFF) -#define PS_STATE_S3 (PS_ALL_ON) -#define PS_STATE_S4 ((PS_ST_ACTIVE) | (PS_ALL_ON)) - - -#define PS_IS_RF_ON(x) ((x) & (PS_ALL_ON)) -#define PS_IS_ACTIVE(x) ((x) & (PS_ST_ACTIVE)) -#define CLR_PS_STATE(x) ((x) = ((x) & (0xF0))) - - -struct reportpwrstate_parm { - unsigned char mode; - unsigned char state; //the CPWM value - unsigned short rsvd; -}; - - -typedef _sema _pwrlock; - - -__inline static void _init_pwrlock(_pwrlock *plock) -{ - rtw_init_sema(plock, 1); -} - -__inline static void _free_pwrlock(_pwrlock *plock) -{ - rtw_free_sema(plock); -} - - -__inline static void _enter_pwrlock(_pwrlock *plock) -{ - rtw_down_sema(plock); -} - - -__inline static void _exit_pwrlock(_pwrlock *plock) -{ - rtw_up_sema(plock); -} - -#define LPS_DELAY_TIME 1 // 1 sec - -#define EXE_PWR_NONE 0x01 -#define EXE_PWR_IPS 0x02 -#define EXE_PWR_LPS 0x04 - -// RF state. -typedef enum _rt_rf_power_state -{ - rf_on, // RF is on after RFSleep or RFOff - rf_sleep, // 802.11 Power Save mode - rf_off, // HW/SW Radio OFF or Inactive Power Save - //=====Add the new RF state above this line=====// - rf_max -}rt_rf_power_state; - -// RF Off Level for IPS or HW/SW radio off -#define RT_RF_OFF_LEVL_ASPM BIT(0) // PCI ASPM -#define RT_RF_OFF_LEVL_CLK_REQ BIT(1) // PCI clock request -#define RT_RF_OFF_LEVL_PCI_D3 BIT(2) // PCI D3 mode -#define RT_RF_OFF_LEVL_HALT_NIC BIT(3) // NIC halt, re-initialize hw parameters -#define RT_RF_OFF_LEVL_FREE_FW BIT(4) // FW free, re-download the FW -#define RT_RF_OFF_LEVL_FW_32K BIT(5) // FW in 32k -#define RT_RF_PS_LEVEL_ALWAYS_ASPM BIT(6) // Always enable ASPM and Clock Req in initialization. -#define RT_RF_LPS_DISALBE_2R BIT(30) // When LPS is on, disable 2R if no packet is received or transmittd. -#define RT_RF_LPS_LEVEL_ASPM BIT(31) // LPS with ASPM - -#define RT_IN_PS_LEVEL(ppsc, _PS_FLAG) ((ppsc->cur_ps_level & _PS_FLAG) ? _TRUE : _FALSE) -#define RT_CLEAR_PS_LEVEL(ppsc, _PS_FLAG) (ppsc->cur_ps_level &= (~(_PS_FLAG))) -#define RT_SET_PS_LEVEL(ppsc, _PS_FLAG) (ppsc->cur_ps_level |= _PS_FLAG) - - -enum _PS_BBRegBackup_ { - PSBBREG_RF0 = 0, - PSBBREG_RF1, - PSBBREG_RF2, - PSBBREG_AFE0, - PSBBREG_TOTALCNT -}; - -enum { // for ips_mode - IPS_NONE=0, - IPS_NORMAL, - IPS_LEVEL_2, - IPS_NUM -}; - -struct pwrctrl_priv -{ - _pwrlock lock; - volatile uint8_t rpwm; // requested power state for fw - volatile uint8_t cpwm; // fw current power state. updated when 1. read from HCPWM 2. driver lowers power level - volatile uint8_t tog; // toggling - volatile uint8_t cpwm_tog; // toggling - - uint8_t pwr_mode; - uint8_t smart_ps; - uint8_t bcn_ant_mode; - - uint32_t alives; - uint64_t wowlan_fw_iv; -//TODO -// _workitem cpwm_event; -#ifdef CONFIG_LPS_RPWM_TIMER - uint8_t brpwmtimeout; - _workitem rpwmtimeoutwi; - _timer pwr_rpwm_timer; -#endif // CONFIG_LPS_RPWM_TIMER - uint8_t bpower_saving; - - uint8_t b_hw_radio_off; - uint8_t reg_rfoff; - uint8_t reg_pdnmode; //powerdown mode - uint32_t rfoff_reason; - - //RF OFF Level - uint32_t cur_ps_level; - uint32_t reg_rfps_level; - - - -#if defined(CONFIG_PCI_HCI) || defined(CONFIG_LX_HCI) - //just for PCIE ASPM - uint8_t b_support_aspm; // If it supports ASPM, Offset[560h] = 0x40, otherwise Offset[560h] = 0x00. - uint8_t b_support_backdoor; - - //just for PCIE ASPM - uint8_t const_amdpci_aspm; -#endif - - uint ips_enter_cnts; - uint ips_leave_cnts; - - uint8_t ps_enable; - uint8_t ips_mode; - uint8_t ips_org_mode; - uint8_t ips_mode_req; // used to accept the mode setting request, will update to ipsmode later - uint bips_processing; - uint32_t ips_deny_time; /* will deny IPS when system time is smaller than this */ - uint8_t ps_processing; /* temporarily used to mark whether in rtw_ps_processor */ - - uint8_t bLeisurePs; - uint8_t LpsIdleCount; - uint8_t power_mgnt; - uint8_t org_power_mgnt; - uint8_t bFwCurrentInPSMode; - uint32_t DelayLPSLastTimeStamp; - uint8_t btcoex_rfon; - int32_t pnp_current_pwr_state; - uint8_t pnp_bstop_trx; - - - uint8_t bInternalAutoSuspend; - uint8_t bInSuspend; -#ifdef CONFIG_BT_COEXIST - uint8_t bAutoResume; - uint8_t autopm_cnt; -#endif - uint8_t bSupportRemoteWakeup; -#ifdef CONFIG_WOWLAN - uint8_t wowlan_txpause_status; - uint8_t wowlan_mode; - uint8_t wowlan_pattern; - uint8_t wowlan_magic; - uint8_t wowlan_unicast; - uint8_t wowlan_pattern_idx; - uint8_t wowlan_wake_reason; - uint32_t wowlan_pattern_context[8][5]; -#endif // CONFIG_WOWLAN - _timer pwr_state_check_timer; - int pwr_state_check_interval; - uint8_t pwr_state_check_cnts; - - int ps_flag; - - rt_rf_power_state rf_pwrstate;//cur power state - //rt_rf_power_state current_rfpwrstate; - rt_rf_power_state change_rfpwrstate; - - uint8_t wepkeymask; - uint8_t bHWPowerdown;//if support hw power down - uint8_t bHWPwrPindetect; - uint8_t bkeepfwalive; - uint8_t brfoffbyhw; - unsigned long PS_BBRegBackup[PSBBREG_TOTALCNT]; - - #ifdef CONFIG_RESUME_IN_WORKQUEUE - struct workqueue_struct *rtw_workqueue; - _workitem resume_work; - #endif - - #ifdef CONFIG_HAS_EARLYSUSPEND - struct early_suspend early_suspend; - uint8_t do_late_resume; - #endif //CONFIG_HAS_EARLYSUSPEND - - #ifdef CONFIG_ANDROID_POWER - android_early_suspend_t early_suspend; - uint8_t do_late_resume; - #endif - - #ifdef CONFIG_INTEL_PROXIM - uint8_t stored_power_mgnt; - #endif - - #ifdef TDMA_POWER_SAVING - uint8_t tdma_slot_period; - uint8_t tdma_rfon_period_len_1; - uint8_t tdma_rfon_period_len_2; - uint8_t tdma_rfon_period_len_3; - #endif - - uint8_t lps_dtim; -}; - -#define rtw_get_ips_mode_req(pwrctrlpriv) \ - (pwrctrlpriv)->ips_mode_req - -#define rtw_ips_mode_req(pwrctrlpriv, ips_mode) \ - (pwrctrlpriv)->ips_mode_req = (ips_mode) - -#define RTW_PWR_STATE_CHK_INTERVAL 2000 - -#define _rtw_set_pwr_state_check_timer(pwrctrlpriv, ms) \ - do { \ - /*DBG_871X("%s _rtw_set_pwr_state_check_timer(%p, %d)\n", __FUNCTION__, (pwrctrlpriv), (ms));*/ \ - rtw_set_timer(&(pwrctrlpriv)->pwr_state_check_timer, (ms)); \ - } while(0) - -#define rtw_set_pwr_state_check_timer(pwrctrlpriv) \ - _rtw_set_pwr_state_check_timer((pwrctrlpriv), (pwrctrlpriv)->pwr_state_check_interval) - -extern void rtw_init_pwrctrl_priv(_adapter *adapter); -extern void rtw_free_pwrctrl_priv(_adapter * adapter); - -#ifdef CONFIG_LPS_LCLK -extern int32_t rtw_register_tx_alive(PADAPTER padapter); -extern void rtw_unregister_tx_alive(PADAPTER padapter); -extern int32_t rtw_register_rx_alive(PADAPTER padapter); -extern void rtw_unregister_rx_alive(PADAPTER padapter); -extern int32_t rtw_register_cmd_alive(PADAPTER padapter); -extern void rtw_unregister_cmd_alive(PADAPTER padapter); -extern int32_t rtw_register_evt_alive(PADAPTER padapter); -extern void rtw_unregister_evt_alive(PADAPTER padapter); -extern void cpwm_int_hdl(PADAPTER padapter, struct reportpwrstate_parm *preportpwrstate); -extern void LPS_Leave_check(PADAPTER padapter); -#endif - -extern void rtw_set_ps_mode(PADAPTER padapter, uint8_t ps_mode, uint8_t smart_ps, uint8_t bcn_ant_mode); -extern void rtw_set_rpwm(_adapter * padapter, uint8_t val8); -extern void LeaveAllPowerSaveMode(PADAPTER Adapter); -#ifdef CONFIG_IPS -void ips_enter(_adapter * padapter); -int ips_leave(_adapter * padapter); -#endif - -void rtw_ps_processor(_adapter*padapter); - -#ifdef CONFIG_AUTOSUSPEND -int autoresume_enter(_adapter* padapter); -#endif -#ifdef SUPPORT_HW_RFOFF_DETECTED -rt_rf_power_state RfOnOffDetect(IN PADAPTER pAdapter ); -#endif - - -#ifdef CONFIG_LPS -int32_t LPS_RF_ON_check(PADAPTER padapter, uint32_t delay_ms); -void LPS_Enter(PADAPTER padapter); -void LPS_Leave(PADAPTER padapter); -#endif - -#ifdef CONFIG_RESUME_IN_WORKQUEUE -void rtw_resume_in_workqueue(struct pwrctrl_priv *pwrpriv); -#endif //CONFIG_RESUME_IN_WORKQUEUE - -#if defined(CONFIG_HAS_EARLYSUSPEND ) || defined(CONFIG_ANDROID_POWER) -#define rtw_is_earlysuspend_registered(pwrpriv) (pwrpriv)->early_suspend.suspend -void rtw_register_early_suspend(struct pwrctrl_priv *pwrpriv); -void rtw_unregister_early_suspend(struct pwrctrl_priv *pwrpriv); -#endif //CONFIG_HAS_EARLYSUSPEND || CONFIG_ANDROID_POWER -//TODO -//uint8_t rtw_interface_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id,uint8_t* val); -int _rtw_pwr_wakeup(_adapter *padapter, uint32_t ips_deffer_ms, const char *caller); -#define rtw_pwr_wakeup(adapter) _rtw_pwr_wakeup(adapter, RTW_PWR_STATE_CHK_INTERVAL, __FUNCTION__) -int rtw_pm_set_ips(_adapter *padapter, uint8_t mode); -int rtw_pm_set_lps(_adapter *padapter, uint8_t mode); -int rtw_pm_set_tdma_param(_adapter *padapter, uint8_t tdma_slot_period, uint8_t tdma_rfon_period_len_1, uint8_t tdma_rfon_period_len_2, uint8_t tdma_rfon_period_len_3); -int rtw_pm_set_lps_dtim(_adapter *padapter, uint8_t lps_dtim); -uint8_t rtw_pm_get_lps_dtim(_adapter *padapter); -#endif //__RTL871X_PWRCTRL_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_qos.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_qos.h deleted file mode 100644 index 8fef3be..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_qos.h +++ /dev/null @@ -1,33 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - -#ifndef _RTW_QOS_H_ -#define _RTW_QOS_H_ - -struct qos_priv { - - uint32_t qos_option; //bit mask option: u-apsd, s-apsd, ts, block ack... - -}; - - -#endif //_RTL871X_QOS_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_recv.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_recv.h deleted file mode 100644 index 187bb97..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_recv.h +++ /dev/null @@ -1,918 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _RTW_RECV_H_ -#define _RTW_RECV_H_ -#include - -#if defined(PLATFORM_ECOS) -#define NR_RECVFRAME 16 //Decrease recv frame due to memory limitation - Alex Fang -#elif defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) -#ifdef CONFIG_RECV_REORDERING_CTRL -#define NR_RECVFRAME 16 //Increase recv frame due to rx reorder - Andy Sun -#else -#if WIFI_LOGO_CERTIFICATION - #define NR_RECVFRAME 8 //Decrease recv frame due to memory limitation - Alex Fang -#else -#ifndef CONFIG_HIGH_TP - #define NR_RECVFRAME 2 //Decrease recv frame due to memory limitation - YangJue -#else - #define NR_RECVFRAME 256 -#endif -#endif -#endif -#else -#define NR_RECVFRAME 256 -#endif - -#ifdef PLATFORM_OS_XP - #define NR_RECVBUFF (16) -#elif defined(PLATFORM_OS_CE) - #define NR_RECVBUFF (4) -#elif defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) -#ifndef CONFIG_HIGH_TP -// #define NR_RECVBUFF (8) //Decrease recv buffer due to memory limitation - Alex Fang - #define NR_RECVBUFF (1) //Decrease recv buffer due to memory limitation - YangJue -#else - #define NR_RECVBUFF (32) -#endif -#else - #if (defined CONFIG_GSPI_HCI || defined CONFIG_SDIO_HCI) - #define NR_RECVBUFF (32) - #else - #define NR_RECVBUFF (4) - #endif - - #define NR_PREALLOC_RECV_SKB (8) -#endif - -#define RECV_BULK_IN_ADDR 0x80 -#define RECV_INT_IN_ADDR 0x81 - -#define PHY_RSSI_SLID_WIN_MAX 100 -#define PHY_LINKQUALITY_SLID_WIN_MAX 20 - -// Rx smooth factor -#define Rx_Smooth_Factor (20) - -#define RXFRAME_ALIGN 8 -#define RXFRAME_ALIGN_SZ (1<signal_stat_timer, (recvpriv)->signal_stat_sampling_interval) -#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS - -struct sta_recv_priv { - - _lock lock; - sint option; - - //_queue blk_strms[MAX_RX_NUMBLKS]; - _queue defrag_q; //keeping the fragment frame until defrag - - struct stainfo_rxcache rxcache; - - //uint sta_rx_bytes; - //uint sta_rx_pkts; - //uint sta_rx_fail; - -}; - -struct recv_buf -{ - _list list; - -// _lock recvbuf_lock; - -// uint32_t ref_cnt; - - PADAPTER adapter; - -// uint8_t *pbuf; -// uint8_t *pallocated_buf; - - uint32_t len; - uint8_t *phead; - uint8_t *pdata; - uint8_t *ptail; - uint8_t *pend; - -#ifdef CONFIG_USB_HCI - - #if defined(PLATFORM_OS_XP)||defined(PLATFORM_LINUX)||defined(PLATFORM_FREEBSD) - PURB purb; - dma_addr_t dma_transfer_addr; /* (in) dma addr for transfer_buffer */ - uint32_t alloc_sz; - #endif - - #ifdef PLATFORM_OS_XP - PIRP pirp; - #endif - - #ifdef PLATFORM_OS_CE - USB_TRANSFER usb_transfer_read_port; - #endif - - uint8_t irp_pending; - int transfer_len; - -#endif - -#if defined(PLATFORM_LINUX) || defined(PLATFORM_ECOS) || defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) - _pkt *pskb; -// uint8_t reuse; -#endif -#ifdef PLATFORM_FREEBSD //skb solution - struct sk_buff *pskb; - uint8_t reuse; -#endif //PLATFORM_FREEBSD //skb solution -}; - -/* - head -----> - - data -----> - - payload - - tail -----> - - - end -----> - - len = (unsigned int )(tail - data); - -*/ -struct recv_frame_hdr -{ - _list list; -#ifndef CONFIG_BSD_RX_USE_MBUF - struct sk_buff *pkt; - struct sk_buff *pkt_newalloc; -#else // CONFIG_BSD_RX_USE_MBUF - _pkt *pkt; - _pkt *pkt_newalloc; -#endif // CONFIG_BSD_RX_USE_MBUF - - _adapter *adapter; - - uint8_t fragcnt; - - int frame_tag; - - struct rx_pkt_attrib attrib; - - uint len; - uint8_t *rx_head; - uint8_t *rx_data; - uint8_t *rx_tail; - uint8_t *rx_end; - - void *precvbuf; - - - // - struct sta_info *psta; -#ifdef CONFIG_RECV_REORDERING_CTRL - //for A-MPDU Rx reordering buffer control - struct recv_reorder_ctrl *preorder_ctrl; -#endif -#ifdef CONFIG_WAPI_SUPPORT - uint8_t UserPriority; - uint8_t WapiTempPN[16]; - uint8_t WapiSrcAddr[6]; - uint8_t bWapiCheckPNInDecrypt; - uint8_t bIsWaiPacket; -#endif - -}; - -union recv_frame{ - - union{ - _list list; - struct recv_frame_hdr hdr; - uint mem[RECVFRAME_HDR_ALIGN>>2]; - }u; - - //uint mem[MAX_RXSZ>>2]; - -}; - -typedef enum _RX_PACKET_TYPE{ - NORMAL_RX,//Normal rx packet - TX_REPORT1,//CCX - TX_REPORT2,//TX RPT - HIS_REPORT,// USB HISR RPT - C2H_PACKET -}RX_PACKET_TYPE, *PRX_PACKET_TYPE; - -extern union recv_frame *_rtw_alloc_recvframe (_queue *pfree_recv_queue); //get a free recv_frame from pfree_recv_queue -extern void rtw_init_recvframe(union recv_frame *precvframe ,struct recv_priv *precvpriv); -extern int rtw_free_recvframe(union recv_frame *precvframe, _queue *pfree_recv_queue); - -#define rtw_dequeue_recvframe(queue) rtw_alloc_recvframe(queue) -extern int _rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue); - -#ifdef CONFIG_TRACE_SKB -int __rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue); -union recv_frame *__rtw_alloc_recvframe (_queue *pfree_recv_queue); //get a free recv_frame from pfree_recv_queue - -#define rtw_enqueue_recvframe(precvframe, queue, Q) \ - do{\ - set_skb_list_flag(precvframe->u.hdr.pkt, SKBLIST_RECVFRAME_##Q);\ - __rtw_enqueue_recvframe(precvframe, queue);\ - }while (0) -#define rtw_alloc_recvframe(queue, precvframe, Q) \ - (\ - precvframe = __rtw_alloc_recvframe(queue),\ - precvframe ? clear_skb_list_flag(precvframe->u.hdr.pkt, SKBLIST_RECVFRAME_##Q):0,\ - precvframe\ - ) -#else -extern int rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue); -extern union recv_frame *rtw_alloc_recvframe (_queue *pfree_recv_queue); //get a free recv_frame from pfree_recv_queue -#endif - -extern void rtw_free_recvframe_queue(_queue *pframequeue, _queue *pfree_recv_queue); -uint32_t rtw_free_uc_swdec_pending_queue(_adapter *adapter); - -#ifdef CONFIG_TRACE_SKB -sint _rtw_enqueue_recvbuf_to_head(struct recv_buf *precvbuf, _queue *queue); -sint _rtw_enqueue_recvbuf(struct recv_buf *precvbuf, _queue *queue); -struct recv_buf *_rtw_dequeue_recvbuf (_queue *queue); - -#define rtw_enqueue_recvbuf_to_head(precvbuf, queue, Q) \ - do{\ - set_skb_list_flag(precvbuf->pskb, SKBLIST_RECVBUF_##Q);\ - _rtw_enqueue_recvbuf_to_head(precvbuf, queue);\ - }while (0) -#define rtw_enqueue_recvbuf(precvbuf, queue, Q) \ - do{\ - set_skb_list_flag(precvbuf->pskb, SKBLIST_RECVBUF_##Q);\ - _rtw_enqueue_recvbuf(precvbuf, queue);\ - }while (0) -#define rtw_dequeue_recvbuf(queue, precvbuf, Q) \ - (\ - precvbuf = _rtw_dequeue_recvbuf(queue),\ - precvbuf ? clear_skb_list_flag(precvbuf->pskb, SKBLIST_RECVBUF_##Q):0,\ - precvbuf\ - ) - -#else -sint rtw_enqueue_recvbuf_to_head(struct recv_buf *precvbuf, _queue *queue); -sint rtw_enqueue_recvbuf(struct recv_buf *precvbuf, _queue *queue); -struct recv_buf *rtw_dequeue_recvbuf (_queue *queue); -#endif - -void rtw_reordering_ctrl_timeout_handler(void *pcontext); - - -__inline static uint8_t *get_rxmem(union recv_frame *precvframe) -{ - //always return rx_head... - if(precvframe==NULL) - return NULL; - - return precvframe->u.hdr.rx_head; -} - -__inline static uint8_t *get_rx_status(union recv_frame *precvframe) -{ - - return get_rxmem(precvframe); - -} - - - -__inline static uint8_t *get_recvframe_data(union recv_frame *precvframe) -{ - - //alwasy return rx_data - if(precvframe==NULL) - return NULL; - - return precvframe->u.hdr.rx_data; - -} - -//TODO -#if 0 - -__inline static uint8_t *recvframe_push(union recv_frame *precvframe, sint sz) -{ - // append data before rx_data - - /* add data to the start of recv_frame - * - * This function extends the used data area of the recv_frame at the buffer - * start. rx_data must be still larger than rx_head, after pushing. - */ - - if(precvframe==NULL) - return NULL; - - - precvframe->u.hdr.rx_data -= sz ; - if( precvframe->u.hdr.rx_data < precvframe->u.hdr.rx_head ) - { - precvframe->u.hdr.rx_data += sz ; - return NULL; - } - - precvframe->u.hdr.len +=sz; - - return precvframe->u.hdr.rx_data; - -} - -#endif //#if 0 - -__inline static uint8_t *recvframe_pull(union recv_frame *precvframe, sint sz) -{ - // rx_data += sz; move rx_data sz bytes hereafter - - //used for extract sz bytes from rx_data, update rx_data and return the updated rx_data to the caller - - - if(precvframe==NULL) - return NULL; - - - precvframe->u.hdr.rx_data += sz; - - if(precvframe->u.hdr.rx_data > precvframe->u.hdr.rx_tail) - { - precvframe->u.hdr.rx_data -= sz; - return NULL; - } - - precvframe->u.hdr.len -=sz; - - return precvframe->u.hdr.rx_data; - -} - -__inline static uint8_t *recvframe_put(union recv_frame *precvframe, sint sz) -{ - // rx_tai += sz; move rx_tail sz bytes hereafter - - //used for append sz bytes from ptr to rx_tail, update rx_tail and return the updated rx_tail to the caller - //after putting, rx_tail must be still larger than rx_end. - - if(precvframe==NULL) - return NULL; - - precvframe->u.hdr.rx_tail += sz; - - if(precvframe->u.hdr.rx_tail > precvframe->u.hdr.rx_end) - { - precvframe->u.hdr.rx_tail -= sz; - return NULL; - } - - precvframe->u.hdr.len +=sz; - - return precvframe->u.hdr.rx_tail; - -} - - - -__inline static uint8_t *recvframe_pull_tail(union recv_frame *precvframe, sint sz) -{ - // rmv data from rx_tail (by yitsen) - - //used for extract sz bytes from rx_end, update rx_end and return the updated rx_end to the caller - //after pulling, rx_end must be still larger than rx_data. - - if(precvframe==NULL) - return NULL; - - precvframe->u.hdr.rx_tail -= sz; - - if(precvframe->u.hdr.rx_tail < precvframe->u.hdr.rx_data) - { - precvframe->u.hdr.rx_tail += sz; - return NULL; - } - - precvframe->u.hdr.len -=sz; - - return precvframe->u.hdr.rx_tail; - -} - -__inline static _buffer * get_rxbuf_desc(union recv_frame *precvframe) -{ - _buffer * buf_desc = NULL; - - if(precvframe==NULL) - return NULL; -#ifdef PLATFORM_WINDOWS - NdisQueryPacket(precvframe->u.hdr.pkt, NULL, NULL, &buf_desc, NULL); -#endif - - return buf_desc; -} - - -__inline static union recv_frame *rxmem_to_recvframe(uint8_t *rxmem) -{ - //due to the design of 2048 bytes alignment of recv_frame, we can reference the union recv_frame - //from any given member of recv_frame. - // rxmem indicates the any member/address in recv_frame - - return (union recv_frame*)(((SIZE_PTR)rxmem >> RXFRAME_ALIGN) << RXFRAME_ALIGN); - -} - -__inline static union recv_frame *pkt_to_recvframe(_pkt *pkt) -{ - (void) pkt; - uint8_t * buf_star = NULL; - union recv_frame * precv_frame = NULL; -#ifdef PLATFORM_WINDOWS - _buffer * buf_desc; - uint len; - - NdisQueryPacket(pkt, NULL, NULL, &buf_desc, &len); - NdisQueryBufferSafe(buf_desc, &buf_star, &len, HighPagePriority); -#endif - precv_frame = rxmem_to_recvframe((unsigned char*)buf_star); - - return precv_frame; -} - -__inline static uint8_t *pkt_to_recvmem(_pkt *pkt) -{ - // return the rx_head - - union recv_frame * precv_frame = pkt_to_recvframe(pkt); - - return precv_frame->u.hdr.rx_head; - -} - -__inline static uint8_t *pkt_to_recvdata(_pkt *pkt) -{ - // return the rx_data - - union recv_frame * precv_frame =pkt_to_recvframe(pkt); - - return precv_frame->u.hdr.rx_data; - -} - - -__inline static sint get_recvframe_len(union recv_frame *precvframe) -{ - return precvframe->u.hdr.len; -} - - -__inline static int32_t translate_percentage_to_dbm(uint32_t SignalStrengthIndex) -{ - int32_t SignalPower; // in dBm. - -#ifndef CONFIG_SKIP_SIGNAL_SCALE_MAPPING - // Translate to dBm (x=0.9y-95). - SignalPower = (int32_t)((SignalStrengthIndex *18) /20); - SignalPower -= 95; -#else - /* Translate to dBm (x=y-100) */ - SignalPower = SignalStrengthIndex - 100; -#endif - - return SignalPower; -} - - -struct sta_info; - -extern void _rtw_init_sta_recv_priv(struct sta_recv_priv *psta_recvpriv); -extern void mgt_dispatcher(_adapter *padapter, union recv_frame *precv_frame); -int process_recv_indicatepkts(_adapter *padapter, union recv_frame *prframe); - -void rtw_rxhandler(_adapter * padapter, struct recv_buf *precvbuf); -uint32_t rtw_free_buf_pending_queue(_adapter *adapter); - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_rf.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_rf.h deleted file mode 100644 index db48453..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_rf.h +++ /dev/null @@ -1,175 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTW_RF_H_ -#define __RTW_RF_H_ - - -#define OFDM_PHY 1 -#define MIXED_PHY 2 -#define CCK_PHY 3 - -#define NumRates (13) - -// slot time for 11g -#define SHORT_SLOT_TIME 9 -#define NON_SHORT_SLOT_TIME 20 - -#define RTL8711_RF_MAX_SENS 6 -#define RTL8711_RF_DEF_SENS 4 - -// -// We now define the following channels as the max channels in each channel plan. -// 2G, total 14 chnls -// {1,2,3,4,5,6,7,8,9,10,11,12,13,14} -// 5G, total 24 chnls -// {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165} -#define MAX_CHANNEL_NUM_2G 14 -#define MAX_CHANNEL_NUM_5G 24 -#if defined(NOT_SUPPORT_5G) -#define MAX_CHANNEL_NUM 14 -#else -#define MAX_CHANNEL_NUM 38//14+24 -#endif - -//#define NUM_REGULATORYS 21 -#define NUM_REGULATORYS 1 - -//Country codes -#define USA 0x555320 -#define EUROPE 0x1 //temp, should be provided later -#define JAPAN 0x2 //temp, should be provided later - -struct regulatory_class { - uint32_t starting_freq; //MHz, - uint8_t channel_set[MAX_CHANNEL_NUM]; - uint8_t channel_cck_power[MAX_CHANNEL_NUM];//dbm - uint8_t channel_ofdm_power[MAX_CHANNEL_NUM];//dbm - uint8_t txpower_limit; //dbm - uint8_t channel_spacing; //MHz - uint8_t modem; -}; - -typedef enum _CAPABILITY{ - cESS = 0x0001, - cIBSS = 0x0002, - cPollable = 0x0004, - cPollReq = 0x0008, - cPrivacy = 0x0010, - cShortPreamble = 0x0020, - cPBCC = 0x0040, - cChannelAgility = 0x0080, - cSpectrumMgnt = 0x0100, - cQos = 0x0200, // For HCCA, use with CF-Pollable and CF-PollReq - cShortSlotTime = 0x0400, - cAPSD = 0x0800, - cRM = 0x1000, // RRM (Radio Request Measurement) - cDSSS_OFDM = 0x2000, - cDelayedBA = 0x4000, - cImmediateBA = 0x8000, -}CAPABILITY, *PCAPABILITY; - -enum _REG_PREAMBLE_MODE{ - PREAMBLE_LONG = 1, - PREAMBLE_AUTO = 2, - PREAMBLE_SHORT = 3, -}; - - -enum _RTL8712_RF_MIMO_CONFIG_{ - RTL8712_RFCONFIG_1T=0x10, - RTL8712_RFCONFIG_2T=0x20, - RTL8712_RFCONFIG_1R=0x01, - RTL8712_RFCONFIG_2R=0x02, - RTL8712_RFCONFIG_1T1R=0x11, - RTL8712_RFCONFIG_1T2R=0x12, - RTL8712_RFCONFIG_TURBO=0x92, - RTL8712_RFCONFIG_2T2R=0x22 -}; - - -typedef enum _RF90_RADIO_PATH{ - RF90_PATH_A = 0, //Radio Path A - RF90_PATH_B = 1, //Radio Path B - RF90_PATH_C = 2, //Radio Path C - RF90_PATH_D = 3 //Radio Path D - //RF90_PATH_MAX //Max RF number 90 support -}RF90_RADIO_PATH_E, *PRF90_RADIO_PATH_E; - -// Bandwidth Offset -#define HAL_PRIME_CHNL_OFFSET_DONT_CARE 0 -#define HAL_PRIME_CHNL_OFFSET_LOWER 1 -#define HAL_PRIME_CHNL_OFFSET_UPPER 2 - -// Represent Channel Width in HT Capabilities -// -typedef enum _CHANNEL_WIDTH{ - CHANNEL_WIDTH_20 = 0, - CHANNEL_WIDTH_40 = 1, - CHANNEL_WIDTH_80 = 2, - CHANNEL_WIDTH_160 = 3, - CHANNEL_WIDTH_80_80 = 4, - CHANNEL_WIDTH_MAX = 5, -}CHANNEL_WIDTH, *PCHANNEL_WIDTH; - -// -// Represent Extention Channel Offset in HT Capabilities -// This is available only in 40Mhz mode. -// -typedef enum _EXTCHNL_OFFSET{ - EXTCHNL_OFFSET_NO_EXT = 0, - EXTCHNL_OFFSET_UPPER = 1, - EXTCHNL_OFFSET_NO_DEF = 2, - EXTCHNL_OFFSET_LOWER = 3, -}EXTCHNL_OFFSET, *PEXTCHNL_OFFSET; - -typedef enum _VHT_DATA_SC{ - VHT_DATA_SC_DONOT_CARE = 0, - VHT_DATA_SC_20_UPPER_OF_80MHZ = 1, - VHT_DATA_SC_20_LOWER_OF_80MHZ = 2, - VHT_DATA_SC_20_UPPERST_OF_80MHZ = 3, - VHT_DATA_SC_20_LOWEST_OF_80MHZ = 4, - VHT_DATA_SC_20_RECV1 = 5, - VHT_DATA_SC_20_RECV2 = 6, - VHT_DATA_SC_20_RECV3 = 7, - VHT_DATA_SC_20_RECV4 = 8, - VHT_DATA_SC_40_UPPER_OF_80MHZ = 9, - VHT_DATA_SC_40_LOWER_OF_80MHZ = 10, -}VHT_DATA_SC, *PVHT_DATA_SC_E; - - - -/* 2007/11/15 MH Define different RF type. */ -typedef enum _RT_RF_TYPE_DEFINITION -{ - RF_1T2R = 0, - RF_2T4R = 1, - RF_2T2R = 2, - RF_1T1R = 3, - RF_2T2R_GREEN = 4, - RF_819X_MAX_TYPE = 5, -}RT_RF_TYPE_DEF_E; - - -uint32_t rtw_ch2freq(uint32_t ch); -uint32_t rtw_freq2ch(uint32_t freq); - - -#endif //_RTL8711_RF_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_security.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_security.h deleted file mode 100644 index 06fbb48..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_security.h +++ /dev/null @@ -1,446 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTW_SECURITY_H_ -#define __RTW_SECURITY_H_ - - -#define _NO_PRIVACY_ 0x0 -#define _WEP40_ 0x1 -#define _TKIP_ 0x2 -#define _TKIP_WTMIC_ 0x3 -#define _AES_ 0x4 -#define _WEP104_ 0x5 -#define _WEP_WPA_MIXED_ 0x07 // WEP + WPA -#define _SMS4_ 0x06 - -#define is_wep_enc(alg) (((alg) == _WEP40_) || ((alg) == _WEP104_)) - -#define _WPA_IE_ID_ 0xdd -#define _WPA2_IE_ID_ 0x30 - -#define SHA256_MAC_LEN 32 -#define AES_BLOCK_SIZE 16 -#define AES_PRIV_SIZE (4 * 44) -#define _AES_IV_LEN_ 8 - -typedef enum { - ENCRYP_PROTOCOL_OPENSYS, //open system - ENCRYP_PROTOCOL_WEP, //WEP - ENCRYP_PROTOCOL_WPA, //WPA - ENCRYP_PROTOCOL_WPA2, //WPA2 - ENCRYP_PROTOCOL_WAPI, //WAPI: Not support in this version - ENCRYP_PROTOCOL_MAX -}ENCRYP_PROTOCOL_E; - - -#ifndef Ndis802_11AuthModeWPA2 -#define Ndis802_11AuthModeWPA2 (Ndis802_11AuthModeWPANone + 1) -#endif - -#ifndef Ndis802_11AuthModeWPA2PSK -#define Ndis802_11AuthModeWPA2PSK (Ndis802_11AuthModeWPANone + 2) -#endif - -union pn48 { - - uint64_t val; - -#ifdef CONFIG_LITTLE_ENDIAN - -struct { - uint8_t TSC0; - uint8_t TSC1; - uint8_t TSC2; - uint8_t TSC3; - uint8_t TSC4; - uint8_t TSC5; - uint8_t TSC6; - uint8_t TSC7; -} _byte_; - -#elif defined(CONFIG_BIG_ENDIAN) - -struct { - uint8_t TSC7; - uint8_t TSC6; - uint8_t TSC5; - uint8_t TSC4; - uint8_t TSC3; - uint8_t TSC2; - uint8_t TSC1; - uint8_t TSC0; -} _byte_; - -#endif - -}; - -union Keytype { - uint8_t skey[16]; - uint32_t lkey[4]; -}; - - -typedef struct _RT_PMKID_LIST -{ - uint8_t bUsed; - uint8_t Bssid[6]; - uint8_t PMKID[16]; - uint8_t SsidBuf[33]; - uint8_t* ssid_octet; - uint16_t ssid_length; -} RT_PMKID_LIST, *PRT_PMKID_LIST; - - -struct security_priv -{ - uint32_t dot11AuthAlgrthm; // 802.11 auth, could be open, shared, 8021x and authswitch - uint32_t dot11PrivacyAlgrthm; // This specify the privacy for shared auth. algorithm. - - /* WEP */ - uint32_t dot11PrivacyKeyIndex; // this is only valid for legendary wep, 0~3 for key id. (tx key index) - union Keytype dot11DefKey[4]; // this is only valid for def. key - uint32_t dot11DefKeylen[4]; - - uint32_t dot118021XGrpPrivacy; // This specify the privacy algthm. used for Grp key - uint32_t dot118021XGrpKeyid; // key id used for Grp Key ( tx key index) - union Keytype dot118021XGrpKey[4]; // 802.1x Group Key, for inx0 and inx1 - union Keytype dot118021XGrptxmickey[4]; - union Keytype dot118021XGrprxmickey[4]; - union pn48 dot11Grptxpn; // PN48 used for Grp Key xmit. - union pn48 dot11Grprxpn; // PN48 used for Grp Key recv. - -#ifdef CONFIG_AP_MODE - //extend security capabilities for AP_MODE - unsigned int dot8021xalg;//0:disable, 1:psk, 2:802.1x - unsigned int wpa_psk;//0:disable, bit(0): WPA, bit(1):WPA2 - unsigned int wpa_group_cipher; - unsigned int wpa2_group_cipher; - unsigned int wpa_pairwise_cipher; - unsigned int wpa2_pairwise_cipher; -#endif - -#ifdef CONFIG_WPS - uint8_t wps_ie[MAX_WPS_IE_LEN];//added in assoc req - int wps_ie_len; -#endif - - uint8_t binstallGrpkey; - uint8_t busetkipkey; - //_timer tkip_timer; - uint8_t bcheck_grpkey; - uint8_t bgrpkey_handshake; - - //uint8_t packet_cnt;//unused, removed - - int32_t sw_encrypt;//from registry_priv - int32_t sw_decrypt;//from registry_priv - - int32_t hw_decrypted;//if the rx packets is hw_decrypted==_FALSE, it means the hw has not been ready. - - - //keeps the auth_type & enc_status from upper layer ioctl(wpa_supplicant or wzc) - uint32_t ndisauthtype; // NDIS_802_11_AUTHENTICATION_MODE - uint32_t ndisencryptstatus; // NDIS_802_11_ENCRYPTION_STATUS - - //WLAN_BSSID_EX sec_bss; //for joinbss (h2c buffer) usage //YJ,del,140410 - - NDIS_802_11_WEP ndiswep; -#ifdef PLATFORM_WINDOWS - uint8_t KeyMaterial[16];// variable length depending on above field. -#endif - -//TODO -#if 0 //Remove unused wpa2 data - Alex Fang - uint8_t assoc_info[600]; - uint8_t szofcapability[256]; //for wpa2 usage - uint8_t oidassociation[512]; //for wpa/wpa2 usage - uint8_t authenticator_ie[256]; //store ap security information element -#endif - uint8_t supplicant_ie[256]; //store sta security information element - - - //for tkip countermeasure - uint32_t last_mic_err_time; - uint8_t btkip_countermeasure; - uint8_t btkip_wait_report; - uint32_t btkip_countermeasure_time; -#ifdef CONFIG_WPA2_PREAUTH - //--------------------------------------------------------------------------- - // For WPA2 Pre-Authentication. - //--------------------------------------------------------------------------- - //uint8_t RegEnablePreAuth; // Default value: Pre-Authentication enabled or not, from registry "EnablePreAuth". Added by Annie, 2005-11-01. - //uint8_t EnablePreAuthentication; // Current Value: Pre-Authentication enabled or not. - RT_PMKID_LIST PMKIDList[NUM_PMKID_CACHE]; // Renamed from PreAuthKey[NUM_PRE_AUTH_KEY]. Annie, 2006-10-13. - uint8_t PMKIDIndex; - //uint32_t PMKIDCount; // Added by Annie, 2006-10-13. - //uint8_t szCapability[256]; // For WPA2-PSK using zero-config, by Annie, 2005-09-20. -#endif - -#ifdef CONFIG_INCLUDE_WPA_PSK - WPA_GLOBAL_INFO wpa_global_info; -#if defined(CONFIG_AP_MODE) && defined(CONFIG_MULTIPLE_WPA_STA) -// WPA_STA_INFO wpa_sta_info[AP_STA_NUM]; - uint8_t *palloc_wpastainfo_buf; - uint32_t alloc_wpastainfo_size; - WPA_STA_INFO *wpa_sta_info[NUM_STA-2]; -#else - WPA_STA_INFO wpa_sta_info; -#endif - uint8_t wpa_passphrase[IW_PASSPHRASE_MAX_SIZE + 1]; -#endif -#ifdef CONFIG_WPS - uint8_t wps_phase; -#endif -}; - -struct sha256_state { - uint64_t length; - uint32_t state[8], curlen; - uint8_t buf[64]; -}; - - -#define GET_ENCRY_ALGO(psecuritypriv, psta, encry_algo, bmcst)\ -do{\ - switch(psecuritypriv->dot11AuthAlgrthm)\ - {\ - case dot11AuthAlgrthm_Open:\ - case dot11AuthAlgrthm_Shared:\ - case dot11AuthAlgrthm_Auto:\ - encry_algo = (uint8_t)psecuritypriv->dot11PrivacyAlgrthm;\ - break;\ - case dot11AuthAlgrthm_8021X:\ - if(bmcst)\ - encry_algo = (uint8_t)psecuritypriv->dot118021XGrpPrivacy;\ - else\ - encry_algo =(uint8_t) psta->dot118021XPrivacy;\ - break;\ - case dot11AuthAlgrthm_WAPI:\ - encry_algo = (uint8_t)psecuritypriv->dot11PrivacyAlgrthm;\ - break;\ - }\ -}while(0) - - -#define SET_ICE_IV_LEN( iv_len, icv_len, encrypt)\ -do{\ - switch(encrypt)\ - {\ - case _WEP40_:\ - case _WEP104_:\ - iv_len = 4;\ - icv_len = 4;\ - break;\ - case _TKIP_:\ - iv_len = 8;\ - icv_len = 4;\ - break;\ - case _AES_:\ - iv_len = 8;\ - icv_len = 8;\ - break;\ - case _SMS4_:\ - iv_len = 18;\ - icv_len = 16;\ - break;\ - default:\ - iv_len = 0;\ - icv_len = 0;\ - break;\ - }\ -}while(0) - - -#define GET_TKIP_PN(iv,dot11txpn)\ -do{\ - dot11txpn._byte_.TSC0=iv[2];\ - dot11txpn._byte_.TSC1=iv[0];\ - dot11txpn._byte_.TSC2=iv[4];\ - dot11txpn._byte_.TSC3=iv[5];\ - dot11txpn._byte_.TSC4=iv[6];\ - dot11txpn._byte_.TSC5=iv[7];\ -}while(0) - - -#define ROL32( A, n ) ( ((A) << (n)) | ( ((A)>>(32-(n))) & ( (1UL << (n)) - 1 ) ) ) -#define ROR32( A, n ) ROL32( (A), 32-(n) ) - -extern const uint32_t Te0[256]; -extern const uint32_t Te1[256]; -extern const uint32_t Te2[256]; -extern const uint32_t Te3[256]; -extern const uint32_t Te4[256]; -extern const uint32_t Td0[256]; -extern const uint32_t Td1[256]; -extern const uint32_t Td2[256]; -extern const uint32_t Td3[256]; -extern const uint32_t Td4[256]; -extern const uint32_t rcon[10]; -extern const uint8_t Td4s[256]; -extern const uint8_t rcons[10]; - -#define RCON(i) (rcons[(i)] << 24) - -static inline uint32_t rotr(uint32_t val, int bits) -{ - return (val >> bits) | (val << (32 - bits)); -} - -#define TE0(i) Te0[((i) >> 24) & 0xff] -#define TE1(i) rotr(Te0[((i) >> 16) & 0xff], 8) -#define TE2(i) rotr(Te0[((i) >> 8) & 0xff], 16) -#define TE3(i) rotr(Te0[(i) & 0xff], 24) -#define TE41(i) ((Te0[((i) >> 24) & 0xff] << 8) & 0xff000000) -#define TE42(i) (Te0[((i) >> 16) & 0xff] & 0x00ff0000) -#define TE43(i) (Te0[((i) >> 8) & 0xff] & 0x0000ff00) -#define TE44(i) ((Te0[(i) & 0xff] >> 8) & 0x000000ff) -#define TE421(i) ((Te0[((i) >> 16) & 0xff] << 8) & 0xff000000) -#define TE432(i) (Te0[((i) >> 8) & 0xff] & 0x00ff0000) -#define TE443(i) (Te0[(i) & 0xff] & 0x0000ff00) -#define TE414(i) ((Te0[((i) >> 24) & 0xff] >> 8) & 0x000000ff) -#define TE4(i) ((Te0[(i)] >> 8) & 0x000000ff) - -#define TD0(i) Td0[((i) >> 24) & 0xff] -#define TD1(i) rotr(Td0[((i) >> 16) & 0xff], 8) -#define TD2(i) rotr(Td0[((i) >> 8) & 0xff], 16) -#define TD3(i) rotr(Td0[(i) & 0xff], 24) -#define TD41(i) (Td4s[((i) >> 24) & 0xff] << 24) -#define TD42(i) (Td4s[((i) >> 16) & 0xff] << 16) -#define TD43(i) (Td4s[((i) >> 8) & 0xff] << 8) -#define TD44(i) (Td4s[(i) & 0xff]) -#define TD0_(i) Td0[(i) & 0xff] -#define TD1_(i) rotr(Td0[(i) & 0xff], 8) -#define TD2_(i) rotr(Td0[(i) & 0xff], 16) -#define TD3_(i) rotr(Td0[(i) & 0xff], 24) - -#define GETU32(pt) (((uint32_t)(pt)[0] << 24) ^ ((uint32_t)(pt)[1] << 16) ^ \ - ((uint32_t)(pt)[2] << 8) ^ ((uint32_t)(pt)[3])) - -#define PUTU32(ct, st) { \ -(ct)[0] = (uint8_t)((st) >> 24); (ct)[1] = (uint8_t)((st) >> 16); \ -(ct)[2] = (uint8_t)((st) >> 8); (ct)[3] = (uint8_t)(st); } - -#define WPA_GET_BE32(a) ((((uint32_t) (a)[0]) << 24) | (((uint32_t) (a)[1]) << 16) | \ - (((uint32_t) (a)[2]) << 8) | ((uint32_t) (a)[3])) - -#define WPA_PUT_LE16(a, val) \ - do { \ - (a)[1] = ((uint16_t) (val)) >> 8; \ - (a)[0] = ((uint16_t) (val)) & 0xff; \ - } while (0) - -#define WPA_PUT_BE32(a, val) \ - do { \ - (a)[0] = (uint8_t) ((((uint32_t) (val)) >> 24) & 0xff); \ - (a)[1] = (uint8_t) ((((uint32_t) (val)) >> 16) & 0xff); \ - (a)[2] = (uint8_t) ((((uint32_t) (val)) >> 8) & 0xff); \ - (a)[3] = (uint8_t) (((uint32_t) (val)) & 0xff); \ - } while (0) - -#define WPA_PUT_BE64(a, val) \ - do { \ - (a)[0] = (uint8_t) (((uint64_t) (val)) >> 56); \ - (a)[1] = (uint8_t) (((uint64_t) (val)) >> 48); \ - (a)[2] = (uint8_t) (((uint64_t) (val)) >> 40); \ - (a)[3] = (uint8_t) (((uint64_t) (val)) >> 32); \ - (a)[4] = (uint8_t) (((uint64_t) (val)) >> 24); \ - (a)[5] = (uint8_t) (((uint64_t) (val)) >> 16); \ - (a)[6] = (uint8_t) (((uint64_t) (val)) >> 8); \ - (a)[7] = (uint8_t) (((uint64_t) (val)) & 0xff); \ - } while (0) - -/* ===== start - public domain SHA256 implementation ===== */ - -/* This is based on SHA256 implementation in LibTomCrypt that was released into - * public domain by Tom St Denis. */ - -/* the K array */ -static const unsigned long K[64] = { - 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL, - 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL, - 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, - 0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, - 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL, - 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL, - 0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, - 0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, - 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL, - 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL, - 0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, - 0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, - 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL -}; - - -/* Various logical functions */ -#define RORc(x, y) \ -( ((((unsigned long) (x) & 0xFFFFFFFFUL) >> (unsigned long) ((y) & 31)) | \ - ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & 0xFFFFFFFFUL) -#define Ch(x,y,z) (z ^ (x & (y ^ z))) -#define Maj(x,y,z) (((x | y) & z) | (x & y)) -#define S(x, n) RORc((x), (n)) -#define R(x, n) (((x)&0xFFFFFFFFUL)>>(n)) -#define Sigma0(x) (S(x, 2) ^ S(x, 13) ^ S(x, 22)) -#define Sigma1(x) (S(x, 6) ^ S(x, 11) ^ S(x, 25)) -#define Gamma0(x) (S(x, 7) ^ S(x, 18) ^ R(x, 3)) -#define Gamma1(x) (S(x, 17) ^ S(x, 19) ^ R(x, 10)) -#ifndef MIN -#define MIN(x, y) (((x) < (y)) ? (x) : (y)) -#endif - -uint32_t rtw_aes_encrypt(_adapter *padapter, uint8_t *pxmitframe); -uint32_t rtw_tkip_encrypt(_adapter *padapter, uint8_t *pxmitframe); -void rtw_wep_encrypt(_adapter *padapter, uint8_t *pxmitframe); - -uint32_t rtw_aes_decrypt(_adapter *padapter, uint8_t *precvframe); -uint32_t rtw_tkip_decrypt(_adapter *padapter, uint8_t *precvframe); -void rtw_wep_decrypt(_adapter *padapter, uint8_t *precvframe); - -#ifdef CONFIG_TDLS -void wpa_tdls_generate_tpk(_adapter *padapter, struct sta_info *psta); -int wpa_tdls_ftie_mic(uint8_t *kck, uint8_t trans_seq, - uint8_t *lnkid, uint8_t *rsnie, uint8_t *timeoutie, uint8_t *ftie, - uint8_t *mic); -int tdls_verify_mic(uint8_t *kck, uint8_t trans_seq, - uint8_t *lnkid, uint8_t *rsnie, uint8_t *timeoutie, uint8_t *ftie); -#endif //CONFIG_TDLS - -#ifdef PLATFORM_WINDOWS -void rtw_use_tkipkey_handler ( - IN PVOID SystemSpecific1, - IN PVOID FunctionContext, - IN PVOID SystemSpecific2, - IN PVOID SystemSpecific3 - ); -#endif -#ifdef PLATFORM_LINUX -void rtw_use_tkipkey_handler(void* FunctionContext); -#endif - -#ifdef PLATFORM_FREEBSD -void rtw_use_tkipkey_handler(void* FunctionContext); -#endif //PLATFORM_FREEBSD - -uint32_t rtw_init_sec_priv(_adapter *padapter); -void rtw_free_sec_priv(struct security_priv *psecpriv); - -#endif //__RTL871X_SECURITY_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_xmit.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_xmit.h deleted file mode 100644 index b62b7ea..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/rtw_xmit.h +++ /dev/null @@ -1,839 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _RTW_XMIT_H_ -#define _RTW_XMIT_H_ - -/*--------------------------------------- - Define MAX_XMITBUF_SZ ----------------------------------------*/ -#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) || defined(CONFIG_LX_HCI) - -#ifdef CONFIG_TX_AGGREGATION //effect only for SDIO and GSPI Interface -#define MAX_XMITBUF_SZ (20480) // 20k -#else -#if defined(PLATFORM_ECOS) || defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) - - #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) - #define HAL_INTERFACE_OVERHEAD_XMIT_BUF 12 //HAL_INTERFACE_CMD (4) + HAL_INTERFACE_STATUS (8) - #elif defined(CONFIG_LX_HCI) - #define HAL_INTERFACE_OVERHEAD_XMIT_BUF 0 - #endif - -// Consideration for MAX_XMITBUF_SZ size -// Check more detail information in MAX_SKB_BUF_SIZE -// Tx: [INTF_CMD][TX_DESC][WLAN_HDR][QoS][IV][SNAP][Data][MIC][ICV][INTF_STATUS] -// HAL_INTERFACE_OVERHEAD: HAL_INTERFACE_CMD is 4/0 for SPI/PCIE, HAL_INTERFACE_STATUS is 8/0 for SPI/PCIE -// WLAN_MAX_ETHFRM_LEN : May not be required because WLAN_HEADER +SNAP can totally -// cover ethernet header.Keep in only for safety. - -#ifndef CONFIG_DONT_CARE_TP -#define MAX_XMITBUF_SZ (HAL_INTERFACE_OVERHEAD_XMIT_BUF+\ - TXDESC_SIZE+\ - WLAN_MAX_PROTOCOL_OVERHEAD + WLAN_MAX_ETHFRM_LEN +\ - SKB_RESERVED_FOR_SAFETY) -#else -#define MAX_XMITBUF_SZ (HAL_INTERFACE_OVERHEAD_XMIT_BUF+\ - TXDESC_SIZE+\ - WLAN_MAX_PROTOCOL_OVERHEAD + WLAN_MAX_TX_ETHFRM_LEN +\ - SKB_RESERVED_FOR_SAFETY) -#endif - - -#else // Other OS -#define MAX_XMITBUF_SZ (12288) //12k 1536*8 -#endif //#ifdef PLATFORM_ECOS || defined(PLATFORM_FREERTOS) -#endif //#ifdef CONFIG_TX_AGGREGATION - -#elif defined(CONFIG_USB_HCI) || defined(CONFIG_PCI_HCI) - #errof "Undefined bus interface for MAX_XMITBUF_SZ" -#endif //interface define. SDIO/GSPI/LXbus/PCI/USB - - - -/*--------------------------------------------------------------*/ -/* Define MAX_XMITBUF_SZ */ -/*--------------------------------------------------------------*/ -#if (defined CONFIG_GSPI_HCI || defined CONFIG_SDIO_HCI) - -#if defined(PLATFORM_ECOS) -#define NR_XMITBUFF (8) -#elif defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) -#ifndef CONFIG_HIGH_TP -#define NR_XMITBUFF (2) //Decrease recv frame (8->2) due to memory limitation - YangJue -#else -#define NR_XMITBUFF (128) -#endif -#else -#define NR_XMITBUFF (128) -#endif //#ifdef PLATFORM_ECOS - -#elif defined(CONFIG_LX_HCI) -#define NR_XMITBUFF (8) - -#elif defined(CONFIG_USB_HCI) || defined(CONFIG_PCI_HCI) - #errof "Undefined bus interface for MAX_XMITBUF_SZ" -#endif //interface define - - -/*--------------------------------------------------------------*/ -/* Define XMITBUF_ALIGN_SZ */ -/*--------------------------------------------------------------*/ -#if defined(PLATFORM_OS_CE) || defined(PLATFORM_ECOS) || defined(PLATFORM_FREERTOS) || defined(PLATFORM_CMSIS_RTOS) -#define XMITBUF_ALIGN_SZ 4 -#else -#if defined(CONFIG_PCI_HCI) || defined(CONFIG_LX_HCI) -#define XMITBUF_ALIGN_SZ 4 -#else -#define XMITBUF_ALIGN_SZ 512 -#endif -#endif - -#define MAX_CMDBUF_SZ (5120) //(4096) -/*--------------------------------------------------------------*/ -/* Define xmit extension buff, size/numbers */ -/*--------------------------------------------------------------*/ -#define MAX_XMIT_EXTBUF_SZ (1536) - -#if defined(PLATFORM_ECOS) -#define NR_XMIT_EXTBUFF (16) //Decrease ext xmit buffer due to memory limitation - Alex Fang -#elif defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) -#define NR_XMIT_EXTBUFF (8) //Decrease ext xmit buffer due to memory limitation - Alex Fang -#else -#define NR_XMIT_EXTBUFF (32) -#endif //#ifdef PLATFORM_ECOS - -#define MAX_NUMBLKS (1) - -#define XMIT_VO_QUEUE (0) -#define XMIT_VI_QUEUE (1) -#define XMIT_BE_QUEUE (2) -#define XMIT_BK_QUEUE (3) - -#define VO_QUEUE_INX 0 -#define VI_QUEUE_INX 1 -#define BE_QUEUE_INX 2 -#define BK_QUEUE_INX 3 -#define BCN_QUEUE_INX 4 -#define MGT_QUEUE_INX 5 -#define HIGH_QUEUE_INX 6 -#define TXCMD_QUEUE_INX 7 -#ifdef CONFIG_WLAN_HAL_TEST -#define HIGH1_QUEUE_INX 8 -#define HIGH2_QUEUE_INX 9 -#define HIGH3_QUEUE_INX 10 -#define HIGH4_QUEUE_INX 11 -#define HIGH5_QUEUE_INX 12 -#define HIGH6_QUEUE_INX 13 -#define HIGH7_QUEUE_INX 14 -#define HW_QUEUE_ENTRY 15 -#else -#define HW_QUEUE_ENTRY 8 -#endif - -#define WEP_IV(pattrib_iv, dot11txpn, keyidx)\ -do{\ - pattrib_iv[0] = dot11txpn._byte_.TSC0;\ - pattrib_iv[1] = dot11txpn._byte_.TSC1;\ - pattrib_iv[2] = dot11txpn._byte_.TSC2;\ - pattrib_iv[3] = ((keyidx & 0x3)<<6);\ - dot11txpn.val = (dot11txpn.val == 0xffffff) ? 0: (dot11txpn.val+1);\ -}while(0) - - -#define TKIP_IV(pattrib_iv, dot11txpn, keyidx)\ -do{\ - pattrib_iv[0] = dot11txpn._byte_.TSC1;\ - pattrib_iv[1] = (dot11txpn._byte_.TSC1 | 0x20) & 0x7f;\ - pattrib_iv[2] = dot11txpn._byte_.TSC0;\ - pattrib_iv[3] = BIT(5) | ((keyidx & 0x3)<<6);\ - pattrib_iv[4] = dot11txpn._byte_.TSC2;\ - pattrib_iv[5] = dot11txpn._byte_.TSC3;\ - pattrib_iv[6] = dot11txpn._byte_.TSC4;\ - pattrib_iv[7] = dot11txpn._byte_.TSC5;\ - dot11txpn.val = dot11txpn.val == 0xffffffffffffULL ? 0: (dot11txpn.val+1);\ -}while(0) - -#define AES_IV(pattrib_iv, dot11txpn, keyidx)\ -do{\ - pattrib_iv[0] = dot11txpn._byte_.TSC0;\ - pattrib_iv[1] = dot11txpn._byte_.TSC1;\ - pattrib_iv[2] = 0;\ - pattrib_iv[3] = BIT(5) | ((keyidx & 0x3)<<6);\ - pattrib_iv[4] = dot11txpn._byte_.TSC2;\ - pattrib_iv[5] = dot11txpn._byte_.TSC3;\ - pattrib_iv[6] = dot11txpn._byte_.TSC4;\ - pattrib_iv[7] = dot11txpn._byte_.TSC5;\ - dot11txpn.val = dot11txpn.val == 0xffffffffffffULL ? 0: (dot11txpn.val+1);\ -}while(0) - - -#define HWXMIT_ENTRY 4 - -#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)|| defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8195A) || defined(CONFIG_RTL8711B) ||defined(CONFIG_RTL8188F) -#define TXDESC_SIZE 40 -#else -#define TXDESC_SIZE 32 -#endif - -#ifdef CONFIG_TX_EARLY_MODE -#define EARLY_MODE_INFO_SIZE 8 -#endif - -#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) -#define TXDESC_OFFSET TXDESC_SIZE - -#endif - -#ifdef CONFIG_USB_HCI -#define PACKET_OFFSET_SZ (8) -#define TXDESC_OFFSET (TXDESC_SIZE + PACKET_OFFSET_SZ) -#endif - -#if defined(CONFIG_PCI_HCI) || defined(CONFIG_LX_HCI) -#if defined(CONFIG_RTL8195A) || defined(CONFIG_RTL8711B)// buffer descriptor architecture -#define TXDESC_OFFSET TXDESC_SIZE -#else -#define TXDESC_OFFSET 0 -#endif -#define TX_DESC_NEXT_DESC_OFFSET 40 -#endif - -#define TX_FRAGMENTATION_THRESHOLD 2346 - -// Suppose (TX_DESC_MODE=1) ==> Segment number for each tx_buf_desc is 4. 2X4 = 8 (double words). -struct tx_buf_desc { - unsigned int txdw0; - unsigned int txdw1; - unsigned int txdw2; - unsigned int txdw3; - unsigned int txdw4; - unsigned int txdw5; - unsigned int txdw6; - unsigned int txdw7; -}; - -struct tx_desc{ - - //DWORD 0 - unsigned int txdw0; - - unsigned int txdw1; - - unsigned int txdw2; - - unsigned int txdw3; - - unsigned int txdw4; - - unsigned int txdw5; - - unsigned int txdw6; - - unsigned int txdw7; -#ifdef CONFIG_PCI_HCI - unsigned int txdw8; - - unsigned int txdw9; - - unsigned int txdw10; - - unsigned int txdw11; - - // 2008/05/15 MH Because PCIE HW memory R/W 4K limit. And now, our descriptor - // size is 40 bytes. If you use more than 102 descriptor( 103*40>4096), HW will execute - // memoryR/W CRC error. And then all DMA fetch will fail. We must decrease descriptor - // number or enlarge descriptor size as 64 bytes. - unsigned int txdw12; - - unsigned int txdw13; - - unsigned int txdw14; - - unsigned int txdw15; -#endif -#if defined(CONFIG_LX_HCI)||defined(CONFIG_RTL8188F) - unsigned int txdw8; - - unsigned int txdw9; -#endif -}; - - -union txdesc { - struct tx_desc txdesc; - unsigned int value[TXDESC_SIZE>>2]; -}; - -#if defined(CONFIG_PCI_HCI) || defined(CONFIG_LX_HCI) -#ifdef CONFIG_WLAN_HAL_TEST -#define PCI_MAX_TX_QUEUE_COUNT HW_QUEUE_ENTRY -#else -#define PCI_MAX_TX_QUEUE_COUNT 8 -#endif - -struct rtw_tx_ring { - -#if ((RTL8195A_SUPPORT ==1) ||(RTL8711B_SUPPORT == 1)) - struct tx_buf_desc *desc; -#else - struct tx_desc *desc; -#endif - dma_addr_t dma; - unsigned int idx; - unsigned int entries; - _queue queue; - uint32_t qlen; -}; -#endif - -struct hw_xmit { - //_lock xmit_lock; - //_list pending; - _queue *sta_queue; - //struct hw_txqueue *phwtxqueue; - //sint txcmdcnt; - int accnt; -}; - -#if 0 -struct pkt_attrib -{ - uint8_t type; - uint8_t subtype; - uint8_t bswenc; - uint8_t dhcp_pkt; - uint16_t ether_type; - int pktlen; //the original 802.3 pkt raw_data len (not include ether_hdr data) - int pkt_hdrlen; //the original 802.3 pkt header len - int hdrlen; //the WLAN Header Len - int nr_frags; - int last_txcmdsz; - int encrypt; //when 0 indicate no encrypt. when non-zero, indicate the encrypt algorith - uint8_t iv[8]; - int iv_len; - uint8_t icv[8]; - int icv_len; - int priority; - int ack_policy; - int mac_id; - int vcs_mode; //virtual carrier sense method - - uint8_t dst[ETH_ALEN]; - uint8_t src[ETH_ALEN]; - uint8_t ta[ETH_ALEN]; - uint8_t ra[ETH_ALEN]; - - uint8_t key_idx; - - uint8_t qos_en; - uint8_t ht_en; - uint8_t raid;//rate adpative id - uint8_t bwmode; - uint8_t ch_offset;//PRIME_CHNL_OFFSET - uint8_t sgi;//short GI - uint8_t ampdu_en;//tx ampdu enable - uint8_t mdata;//more data bit - uint8_t eosp; - - uint8_t pctrl;//per packet txdesc control enable - uint8_t triggered;//for ap mode handling Power Saving sta - - uint32_t qsel; - uint16_t seqnum; - - struct sta_info * psta; -#ifdef CONFIG_TCP_CSUM_OFFLOAD_TX - uint8_t hw_tcp_csum; -#endif -}; -#else -//reduce size -struct pkt_attrib -{ - uint8_t type; - uint8_t subtype; - uint8_t bswenc; - uint8_t dhcp_pkt; - uint16_t ether_type; - uint16_t seqnum; - uint16_t pkt_hdrlen; //the original 802.3 pkt header len - uint16_t hdrlen; //the WLAN Header Len - uint32_t pktlen; //the original 802.3 pkt raw_data len (not include ether_hdr data) - uint32_t last_txcmdsz; - uint8_t encrypt; //when 0 indicate no encrypt. when non-zero, indicate the encrypt algorith - uint8_t iv_len; - uint8_t icv_len; - uint8_t iv[18]; - uint8_t icv[16]; - uint8_t priority; - uint8_t ack_policy; - uint8_t mac_id; - uint8_t vcs_mode; //virtual carrier sense method - uint8_t dst[ETH_ALEN]; - uint8_t src[ETH_ALEN]; - uint8_t ta[ETH_ALEN]; - uint8_t ra[ETH_ALEN]; - uint8_t key_idx; - uint8_t qos_en; - uint8_t ht_en; - uint8_t raid;//rate adpative id - uint8_t bwmode; - uint8_t ch_offset;//PRIME_CHNL_OFFSET - uint8_t sgi;//short GI - uint8_t ampdu_en;//tx ampdu enable - uint8_t mdata;//more data bit - uint8_t pctrl;//per packet txdesc control enable - uint8_t triggered;//for ap mode handling Power Saving sta - uint8_t qsel; - uint8_t eosp; - uint8_t rate; - uint8_t intel_proxim; - uint8_t retry_ctrl; - struct sta_info * psta; -#ifdef CONFIG_TCP_CSUM_OFFLOAD_TX - uint8_t hw_tcp_csum; -#endif -}; -#endif - -#ifdef PLATFORM_FREEBSD -#define ETH_ALEN 6 /* Octets in one ethernet addr */ -#define ETH_HLEN 14 /* Total octets in header. */ -#define ETH_P_IP 0x0800 /* Internet Protocol packet */ - -/*struct rtw_ieee80211_hdr { - uint16_t frame_control; - uint16_t duration_id; - uint8_t addr1[6]; - uint8_t addr2[6]; - uint8_t addr3[6]; - uint16_t seq_ctrl; - uint8_t addr4[6]; -} ;*/ -#endif //PLATFORM_FREEBSD - -#define WLANHDR_OFFSET 64 - -#define NULL_FRAMETAG (0x0) -#define DATA_FRAMETAG 0x01 -#define L2_FRAMETAG 0x02 -#define MGNT_FRAMETAG 0x03 -#define AMSDU_FRAMETAG 0x04 - -#define EII_FRAMETAG 0x05 -#define IEEE8023_FRAMETAG 0x06 - -#define MP_FRAMETAG 0x07 - -#define TXAGG_FRAMETAG 0x08 - -enum { - XMITBUF_DATA = 0, - XMITBUF_MGNT = 1, - XMITBUF_CMD = 2, -}; - -struct submit_ctx{ - uint32_t submit_time; /* */ - uint32_t timeout_ms; /* <0: not synchronous, 0: wait forever, >0: up to ms waiting */ - int status; /* status for operation */ -#ifdef PLATFORM_LINUX - struct completion done; -#endif -}; - -enum { - RTW_SCTX_DONE_SUCCESS = 0, - RTW_SCTX_DONE_UNKNOWN, - RTW_SCTX_DONE_BUF_ALLOC, - RTW_SCTX_DONE_BUF_FREE, - RTW_SCTX_DONE_WRITE_PORT_ERR, - RTW_SCTX_DONE_TX_DESC_NA, - RTW_SCTX_DONE_TX_DENY, -}; - - -void rtw_sctx_init(struct submit_ctx *sctx, int timeout_ms); -int rtw_sctx_wait(struct submit_ctx *sctx); -void rtw_sctx_done_err(struct submit_ctx **sctx, int status); -void rtw_sctx_done(struct submit_ctx **sctx); - -typedef struct _XIMT_BUF_ { - uint32_t AllocatBufAddr; - uint32_t BufAddr; - uint32_t BufLen; -}XIMT_BUF, *PXIMT_BUF; - -struct xmit_buf -{ - _list list; - - _adapter *padapter; - -#if USE_SKB_AS_XMITBUF - _pkt *pkt; -#else - uint8_t *pallocated_buf; -#endif - uint8_t *pbuf; - - void *priv_data; - - uint16_t buf_tag; // 0: Normal xmitbuf, 1: extension xmitbuf, 2:cmd xmitbuf - uint16_t flags; - uint32_t alloc_sz; - - uint32_t len; - - struct submit_ctx *sctx; - -#ifdef CONFIG_USB_HCI - - //uint32_t sz[8]; - uint32_t ff_hwaddr; - -#if defined(PLATFORM_OS_XP)||defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD) - PURB pxmit_urb[8]; - dma_addr_t dma_transfer_addr; /* (in) dma addr for transfer_buffer */ -#endif - -#ifdef PLATFORM_OS_XP - PIRP pxmit_irp[8]; -#endif - -#ifdef PLATFORM_OS_CE - USB_TRANSFER usb_transfer_write_port; -#endif - - uint8_t bpending[8]; - - sint last[8]; - -#endif - -#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) - uint8_t *phead; - uint8_t *pdata; - uint8_t *ptail; - uint8_t *pend; - uint32_t ff_hwaddr; - uint8_t pg_num; - uint8_t agg_num; -#ifdef PLATFORM_OS_XP - PMDL pxmitbuf_mdl; - PIRP pxmitbuf_irp; - PSDBUS_REQUEST_PACKET pxmitbuf_sdrp; -#endif -#endif - -#if defined(DBG_XMIT_BUF )|| defined(DBG_XMIT_BUF_EXT) - uint8_t no; -#endif - -#if defined(CONFIG_PCI_HCI) || defined(CONFIG_LX_HCI) -#if ((RTL8195A_SUPPORT ==1) ||(RTL8711B_SUPPORT == 1)) - XIMT_BUF BufInfo[4]; - uint32_t BlockNum; -#endif -#endif -}; - - -struct xmit_frame -{ - _list list; - - struct pkt_attrib attrib; - - _pkt *pkt; - - int frame_tag; - - _adapter *padapter; - - uint8_t *buf_addr; - - struct xmit_buf *pxmitbuf; - -#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) - uint8_t pg_num; - uint8_t agg_num; -#endif - -#ifdef CONFIG_USB_HCI -#ifdef CONFIG_USB_TX_AGGREGATION - uint8_t agg_num; -#endif - int8_t pkt_offset; -#ifdef CONFIG_RTL8192D - uint8_t EMPktNum; - uint16_t EMPktLen[5];//The max value by HW -#endif -#endif - -#if defined(CONFIG_PCI_HCI) || defined(CONFIG_LX_HCI) -#if ((RTL8195A_SUPPORT ==1) ||(RTL8711B_SUPPORT == 1)) - uint32_t TxDexAddr; - uint32_t HdrLen; - uint32_t PayLoadAddr; - uint32_t PayLoadLen; - uint32_t TotalLen; - uint32_t BlockNum; - XIMT_BUF BufInfo[4]; - BOOLEAN NoCoalesce; -#endif -#endif -}; - -struct tx_servq { - _list tx_pending; - _queue sta_pending; - int qcnt; -}; - -struct sta_xmit_priv -{ - _lock lock; - sint option; - sint apsd_setting; //When bit mask is on, the associated edca queue supports APSD. - - - //struct tx_servq blk_q[MAX_NUMBLKS]; - struct tx_servq be_q; //priority == 0,3 - struct tx_servq bk_q; //priority == 1,2 - struct tx_servq vi_q; //priority == 4,5 - struct tx_servq vo_q; //priority == 6,7 - _list legacy_dz; - _list apsd; - - uint16_t txseq_tid[16]; - - //uint sta_tx_bytes; - //uint64_t sta_tx_pkts; - //uint sta_tx_fail; - - -}; - - -struct hw_txqueue { - volatile sint head; - volatile sint tail; - volatile sint free_sz; //in units of 64 bytes - volatile sint free_cmdsz; - volatile sint txsz[8]; - uint ff_hwaddr; - uint cmd_hwaddr; - sint ac_tag; -}; - -struct agg_pkt_info{ - uint16_t offset; - uint16_t pkt_len; -}; - - -struct xmit_priv { - - _lock lock; - - //_queue blk_strms[MAX_NUMBLKS]; - _queue be_pending; - _queue bk_pending; - _queue vi_pending; - _queue vo_pending; - _queue bm_pending; - - //_queue legacy_dz_queue; - //_queue apsd_queue; - - uint8_t *pallocated_frame_buf; - uint8_t *pxmit_frame_buf; - uint free_xmitframe_cnt; - - //uint mapping_addr; - //uint pkt_sz; - - _queue free_xmit_queue; - - //struct hw_txqueue be_txqueue; - //struct hw_txqueue bk_txqueue; - //struct hw_txqueue vi_txqueue; - //struct hw_txqueue vo_txqueue; - //struct hw_txqueue bmc_txqueue; - - _adapter *adapter; - - uint8_t vcs_setting; - uint8_t vcs; - uint8_t vcs_type; - //uint16_t rts_thresh; - - uint64_t tx_bytes; - uint64_t tx_pkts; - uint64_t tx_drop; - uint64_t last_tx_bytes; - uint64_t last_tx_pkts; - - struct hw_xmit *hwxmits; - uint8_t hwxmit_entry; - -#ifdef CONFIG_USB_HCI - _sema tx_retevt;//all tx return event; - uint8_t txirp_cnt;// - -#ifdef PLATFORM_OS_CE - USB_TRANSFER usb_transfer_write_port; -// USB_TRANSFER usb_transfer_write_mem; -#endif -#ifdef PLATFORM_LINUX - struct tasklet_struct xmit_tasklet; -#endif -#ifdef PLATFORM_FREEBSD - struct task xmit_tasklet; -#endif - //per AC pending irp - int beq_cnt; - int bkq_cnt; - int viq_cnt; - int voq_cnt; - -#endif - -#if defined(CONFIG_PCI_HCI) || defined(CONFIG_LX_HCI) - // Tx - struct rtw_tx_ring tx_ring[PCI_MAX_TX_QUEUE_COUNT]; - int txringcount[PCI_MAX_TX_QUEUE_COUNT]; - uint8_t beaconDMAing; //flag of indicating beacon is transmiting to HW by DMA -#ifdef PLATFORM_LINUX - struct tasklet_struct xmit_tasklet; -#endif -#endif - - _queue free_xmitbuf_queue; - _queue pending_xmitbuf_queue; - uint8_t *pallocated_xmitbuf; - uint8_t *pxmitbuf; - uint free_xmitbuf_cnt; -#if USE_XMIT_EXTBUFF - _queue free_xmit_extbuf_queue; - uint8_t *pallocated_xmit_extbuf; - uint8_t *pxmit_extbuf; - uint free_xmit_extbuf_cnt; -#endif - uint16_t nqos_ssn; - #ifdef CONFIG_TX_EARLY_MODE - - #define MAX_AGG_PKT_NUM 256 //Max tx ampdu coounts - - struct agg_pkt_info agg_pkt[MAX_AGG_PKT_NUM]; - #endif -}; - -#ifdef CONFIG_TRACE_SKB -extern struct xmit_buf *_rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv, uint32_t size); - -//extern struct xmit_frame *_rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv); -//extern int32_t _rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe); -//extern void _rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, _queue *pframequeue); - -#define rtw_alloc_xmitbuf_ext(pxmitpriv, pxmitbuf, size) \ - (\ - pxmitbuf = _rtw_alloc_xmitbuf_ext(pxmitpriv, size),\ - pxmitbuf ? set_skb_list_flag(pxmitbuf->pkt, SKBLIST_XMITEXTBUF):0,\ - pxmitbuf\ - ) -#else -extern struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv, uint32_t size); -#endif -extern int32_t rtw_free_xmitbuf_ext(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf); - -extern struct xmit_buf *rtw_alloc_xmitbuf(struct xmit_priv *pxmitpriv); -extern int32_t rtw_free_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf); - -extern struct xmit_frame *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv); -extern int32_t rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe); -extern void rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, _queue *pframequeue); -struct tx_servq *rtw_get_sta_pending(_adapter *padapter, struct sta_info *psta, sint up, uint8_t *ac); -extern int32_t rtw_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe); -extern struct xmit_frame* rtw_dequeue_xframe(struct xmit_priv *pxmitpriv, struct hw_xmit *phwxmit_i, sint entry); - -void rtw_count_tx_stats(_adapter *padapter, struct xmit_frame *pxmitframe, int sz); -extern void rtw_update_protection(_adapter *padapter, uint8_t *ie, uint ie_len); -extern int32_t rtw_make_wlanhdr(_adapter *padapter, uint8_t *hdr, struct pkt_attrib *pattrib); -extern int32_t rtw_put_snap(uint8_t *data, uint16_t h_proto); - -extern int32_t rtw_xmit_classifier(_adapter *padapter, struct xmit_frame *pxmitframe); -extern uint32_t rtw_calculate_wlan_pkt_size_by_attribue(struct pkt_attrib *pattrib); -#define rtw_wlan_pkt_size(f) rtw_calculate_wlan_pkt_size_by_attribue(&f->attrib) -extern int32_t rtw_xmitframe_coalesce(_adapter *padapter, _pkt *pkt, struct xmit_frame *pxmitframe); -#ifdef CONFIG_TDLS -int32_t rtw_xmit_tdls_coalesce(_adapter *padapter, struct xmit_frame *pxmitframe, uint8_t action); -#endif -int32_t _rtw_init_hw_txqueue(struct hw_txqueue* phw_txqueue, uint8_t ac_tag); -void _rtw_init_sta_xmit_priv(struct sta_xmit_priv *psta_xmitpriv); - - -int32_t rtw_txframes_pending(_adapter *padapter); -int32_t rtw_txframes_sta_ac_pending(_adapter *padapter, struct pkt_attrib *pattrib); -void rtw_txframes_update_attrib_vcs_info(_adapter *padapter, struct xmit_frame *pxmitframe); -void rtw_init_hwxmits(struct hw_xmit *phwxmit, sint entry); - - -int32_t _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, _adapter *padapter); -void _rtw_free_xmit_priv (struct xmit_priv *pxmitpriv); - - -void rtw_alloc_hwxmits(_adapter *padapter); -void rtw_free_hwxmits(_adapter *padapter); - - -int32_t rtw_xmit(_adapter *padapter, _pkt **pkt); - -#if defined(CONFIG_AP_MODE) || defined(CONFIG_TDLS) -sint xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *pxmitframe); -void stop_sta_xmit(_adapter *padapter, struct sta_info *psta); -void wakeup_sta_to_xmit(_adapter *padapter, struct sta_info *psta); -void xmit_delivery_enabled_frames(_adapter *padapter, struct sta_info *psta); -#endif - -uint8_t qos_acm(uint8_t acm_mask, uint8_t priority); - -int32_t xmitframe_addmic(_adapter *padapter, struct xmit_frame *pxmitframe); -int32_t xmitframe_swencrypt(_adapter *padapter, struct xmit_frame *pxmitframe); - -#ifdef CONFIG_XMIT_THREAD_MODE -void enqueue_pending_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf); -struct xmit_buf* dequeue_pending_xmitbuf(struct xmit_priv *pxmitpriv); -struct xmit_buf* dequeue_pending_xmitbuf_under_survey(struct xmit_priv *pxmitpriv); -sint check_pending_xmitbuf(struct xmit_priv *pxmitpriv); -thread_return rtw_xmit_thread(thread_context context); -#endif - -uint32_t rtw_get_ff_hwaddr(struct xmit_frame *pxmitframe); - -extern int32_t rtw_xmit_mgnt(_adapter * padapter, struct xmit_frame *pmgntframe); -extern int32_t rtw_xmit_data(PADAPTER padapter, struct xmit_frame *pxmitframe); -extern int32_t rtw_xmit_xmitbuf(_adapter * padapter, struct xmit_buf *pxmitbuf); -extern uint32_t ffaddr2deviceId(struct dvobj_priv *pdvobj, uint32_t addr); -extern unsigned int nr_xmitframe; -extern unsigned int nr_xmitbuff; -#endif //_RTL871X_XMIT_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/sta_info.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/sta_info.h deleted file mode 100644 index f57aea0..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/sta_info.h +++ /dev/null @@ -1,400 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __STA_INFO_H_ -#define __STA_INFO_H_ - -#define IBSS_START_MAC_ID 2 - -#if 0 //move to wifi.h -#if defined(PLATFORM_ECOS) -#define NUM_STA 10 //Decrease STA due to memory limitation - Alex Fang -#elif defined(PLATFORM_FREERTOS) -//Decrease STA due to memory limitation - Alex Fang -#ifdef CONFIG_AP_MODE -#define NUM_STA (2 + AP_STA_NUM) //2 + supported clients -#else -#define NUM_STA 2 //Client mode sta for AP and broadcast -#endif -#else -#define NUM_STA 32 -#endif -#endif - -#define NUM_ACL 16 - -//if mode ==0, then the sta is allowed once the addr is hit. -//if mode ==1, then the sta is rejected once the addr is non-hit. -struct rtw_wlan_acl_node { - _list list; - uint8_t addr[ETH_ALEN]; - uint8_t valid; -}; - -//mode=0, disable -//mode=1, accept unless in deny list -//mode=2, deny unless in accept list -struct wlan_acl_pool { - int mode; - int num; - struct rtw_wlan_acl_node aclnode[NUM_ACL]; - _queue acl_node_q; -}; - -typedef struct _RSSI_STA{ - int32_t UndecoratedSmoothedPWDB; - int32_t UndecoratedSmoothedCCK; - int32_t UndecoratedSmoothedOFDM; - uint64_t PacketMap; - uint8_t ValidBit; - uint32_t OFDM_pkt; -}RSSI_STA, *PRSSI_STA; - -struct stainfo_stats { - - //uint64_t rx_pkts; - uint64_t rx_mgnt_pkts; - uint64_t rx_ctrl_pkts; - uint64_t rx_data_pkts; - - //uint64_t last_rx_pkts; - uint64_t last_rx_mgnt_pkts; - uint64_t last_rx_ctrl_pkts; - uint64_t last_rx_data_pkts; - - uint64_t rx_bytes; -// uint64_t rx_drops; - - uint64_t tx_pkts; - uint64_t tx_bytes; -// uint64_t tx_drops; - -}; - -#ifdef CONFIG_TDLS -struct TDLS_PeerKey { - uint8_t kck[16]; /* TPK-KCK */ - uint8_t tk[16]; /* TPK-TK; only CCMP will be used */ -} ; -#endif //CONFIG_TDLS - -struct sta_info { - - _lock lock; - _list list; //free_sta_queue - _list hash_list; //sta_hash - //_list asoc_list; //20061114 - //_list sleep_list;//sleep_q - //_list wakeup_list;//wakeup_q - _adapter *padapter; - - struct sta_xmit_priv sta_xmitpriv; - struct sta_recv_priv sta_recvpriv; - - _queue sleep_q; - unsigned int sleepq_len; - - uint state; - uint aid; - uint mac_id; - uint qos_option; - uint8_t hwaddr[ETH_ALEN]; - - uint ieee8021x_blocked; //0: allowed, 1:blocked - uint dot118021XPrivacy; //aes, tkip... - union Keytype dot11tkiptxmickey; - union Keytype dot11tkiprxmickey; - union Keytype dot118021x_UncstKey; - union pn48 dot11txpn; // PN48 used for Unicast xmit. - union pn48 dot11rxpn; // PN48 used for Unicast recv. - - - uint8_t bssrateset[16]; - uint32_t bssratelen; - int32_t rssi; - int32_t signal_quality; - - uint8_t cts2self; - uint8_t rtsen; - - uint8_t raid; - uint8_t init_rate; - uint32_t ra_mask; - uint8_t wireless_mode; // NETWORK_TYPE - struct stainfo_stats sta_stats; - -#ifdef CONFIG_TDLS - uint32_t tdls_sta_state; - uint8_t dialog; - uint8_t SNonce[32]; - uint8_t ANonce[32]; - uint32_t TDLS_PeerKey_Lifetime; - uint16_t TPK_count; - _timer TPK_timer; - struct TDLS_PeerKey tpk; - uint16_t stat_code; - uint8_t off_ch; - uint16_t ch_switch_time; - uint16_t ch_switch_timeout; - uint8_t option; - _timer option_timer; - _timer base_ch_timer; - _timer off_ch_timer; - - _timer handshake_timer; - _timer alive_timer1; - _timer alive_timer2; - uint8_t timer_flag; - uint8_t alive_count; -#endif //CONFIG_TDLS - - //for A-MPDU TX, ADDBA timeout check - _timer addba_retry_timer; -#ifdef CONFIG_RECV_REORDERING_CTRL - //for A-MPDU Rx reordering buffer control - struct recv_reorder_ctrl recvreorder_ctrl[16]; -#endif - //for A-MPDU Tx - //unsigned char ampdu_txen_bitmap; - uint16_t BA_starting_seqctrl[16]; - - -#ifdef CONFIG_80211N_HT - struct ht_priv htpriv; -#endif - - //Notes: - //STA_Mode: - //curr_network(mlme_priv/security_priv/qos/ht) + sta_info: (STA & AP) CAP/INFO - //scan_q: AP CAP/INFO - - //AP_Mode: - //curr_network(mlme_priv/security_priv/qos/ht) : AP CAP/INFO - //sta_info: (AP & STA) CAP/INFO - -#ifdef CONFIG_AP_MODE - - _list asoc_list; - _list auth_list; - - unsigned int expire_to; -#ifdef CONFIG_AP_POLLING_CLIENT_ALIVE - unsigned int tx_null0; - unsigned int tx_null0_fail; - unsigned int tx_null0_retry; -#endif - unsigned int auth_seq; - unsigned int authalg; - unsigned char chg_txt[128]; - - uint16_t capability; - uint32_t flags; - - int dot8021xalg;//0:disable, 1:psk, 2:802.1x - int wpa_psk;//0:disable, bit(0): WPA, bit(1):WPA2 - int wpa_group_cipher; - int wpa2_group_cipher; - int wpa_pairwise_cipher; - int wpa2_pairwise_cipher; - - uint8_t bpairwise_key_installed; - -#ifdef CONFIG_NATIVEAP_MLME - uint8_t wpa_ie[32]; - - uint8_t nonerp_set; - uint8_t no_short_slot_time_set; - uint8_t no_short_preamble_set; - uint8_t no_ht_gf_set; - uint8_t no_ht_set; - uint8_t ht_20mhz_set; -#endif // CONFIG_NATIVEAP_MLME - - unsigned int tx_ra_bitmap; - uint8_t qos_info; - - uint8_t max_sp_len; - uint8_t uapsd_bk;//BIT(0): Delivery enabled, BIT(1): Trigger enabled - uint8_t uapsd_be; - uint8_t uapsd_vi; - uint8_t uapsd_vo; - - uint8_t has_legacy_ac; - unsigned int sleepq_ac_len; - -#ifdef CONFIG_P2P - //p2p priv data - uint8_t is_p2p_device; - uint8_t p2p_status_code; - - //p2p client info - uint8_t dev_addr[ETH_ALEN]; - //uint8_t iface_addr[ETH_ALEN];//= hwaddr[ETH_ALEN] - uint8_t dev_cap; - uint16_t config_methods; - uint8_t primary_dev_type[8]; - uint8_t num_of_secdev_type; - uint8_t secdev_types_list[32];// 32/8 == 4; - uint16_t dev_name_len; - uint8_t dev_name[32]; -#endif //CONFIG_P2P - -#ifdef CONFIG_TX_MCAST2UNI - uint8_t under_exist_checking; -#endif // CONFIG_TX_MCAST2UNI - -#endif // CONFIG_AP_MODE - -#ifdef CONFIG_IOCTL_CFG80211 - uint8_t *passoc_req; - uint32_t assoc_req_len; -#endif - - //for DM - RSSI_STA rssi_stat; - - // - // ================ODM Relative Info======================= - // Please be care, dont declare too much structure here. It will cost memory * STA support num. - // - // - // 2011/10/20 MH Add for ODM STA info. - // - // Driver Write - uint8_t bValid; // record the sta status link or not? - //uint8_t WirelessMode; // - uint8_t IOTPeer; // Enum value. HT_IOT_PEER_E - uint8_t rssi_level; //for Refresh RA mask - // ODM Write - //1 PHY_STATUS_INFO - uint8_t RSSI_Path[4]; // - uint8_t RSSI_Ave; - uint8_t RXEVM[4]; - uint8_t RXSNR[4]; - - // ODM Write - //1 TX_INFO (may changed by IC) - //TX_INFO_T pTxInfo; // Define in IC folder. Move lower layer. - // - // ================ODM Relative Info======================= - // -}; - -#define sta_rx_pkts(sta) \ - (sta->sta_stats.rx_mgnt_pkts \ - + sta->sta_stats.rx_ctrl_pkts \ - + sta->sta_stats.rx_data_pkts) - -#define sta_last_rx_pkts(sta) \ - (sta->sta_stats.last_rx_mgnt_pkts \ - + sta->sta_stats.last_rx_ctrl_pkts \ - + sta->sta_stats.last_rx_data_pkts) - -#define sta_update_last_rx_pkts(sta) \ - do { \ - sta->sta_stats.last_rx_mgnt_pkts = sta->sta_stats.rx_mgnt_pkts; \ - sta->sta_stats.last_rx_ctrl_pkts = sta->sta_stats.rx_ctrl_pkts; \ - sta->sta_stats.last_rx_data_pkts = sta->sta_stats.rx_data_pkts; \ - } while(0) - -#define STA_RX_PKTS_ARG(sta) \ - sta->sta_stats.rx_mgnt_pkts \ - , sta->sta_stats.rx_ctrl_pkts \ - , sta->sta_stats.rx_data_pkts - -#define STA_LAST_RX_PKTS_ARG(sta) \ - sta->sta_stats.last_rx_mgnt_pkts \ - , sta->sta_stats.last_rx_ctrl_pkts \ - , sta->sta_stats.last_rx_data_pkts - -#define STA_PKTS_FMT "(m:%llu, c:%llu, d:%llu)" - -struct sta_priv { - - uint8_t *pallocated_stainfo_buf; - uint32_t allocated_stainfo_size; - uint8_t *pstainfo_buf; - _queue free_sta_queue; - - _lock sta_hash_lock; - _list sta_hash[NUM_STA]; - int asoc_sta_count; - _queue sleep_q; - _queue wakeup_q; - - _adapter *padapter; - - -#ifdef CONFIG_AP_MODE - _list asoc_list; - _list auth_list; - _lock asoc_list_lock; - _lock auth_list_lock; - - unsigned int auth_to; //sec, time to expire in authenticating. - unsigned int assoc_to; //sec, time to expire before associating. - unsigned int expire_to; //sec , time to expire after associated. - - /* pointers to STA info; based on allocated AID or NULL if AID free - * AID is in the range 1-2007, so sta_aid[0] corresponders to AID 1 - * and so on - */ - struct sta_info *sta_aid[NUM_STA]; - - uint16_t sta_dz_bitmap;//only support 15 stations, staion aid bitmap for sleeping sta. - uint16_t tim_bitmap;//only support 15 stations, aid=0~15 mapping bit0~bit15 - - uint16_t max_num_sta; -//TODO: AP -// struct wlan_acl_pool acl_list; -#endif - -}; - - -__inline static uint32_t wifi_mac_hash(uint8_t *mac) -{ - uint32_t x; - - x = mac[0]; - x = (x << 2) ^ mac[1]; - x = (x << 2) ^ mac[2]; - x = (x << 2) ^ mac[3]; - x = (x << 2) ^ mac[4]; - x = (x << 2) ^ mac[5]; - - x ^= x >> 8; - x = x & (NUM_STA - 1); - - return x; -} - - -extern uint32_t _rtw_init_sta_priv(_adapter *padapter); -extern uint32_t _rtw_free_sta_priv(struct sta_priv *pstapriv); -extern struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, uint8_t *hwaddr); -extern uint32_t rtw_free_stainfo(_adapter *padapter , struct sta_info *psta); -extern void rtw_free_all_stainfo(_adapter *padapter); -extern struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, uint8_t *hwaddr); -extern uint32_t rtw_init_bcmc_stainfo(_adapter* padapter); -extern struct sta_info* rtw_get_bcmc_stainfo(_adapter* padapter); -extern uint8_t rtw_access_ctrl(_adapter *padapter, uint8_t *mac_addr); - -#endif //_STA_INFO_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wifi.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wifi.h deleted file mode 100644 index 89c16fe..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wifi.h +++ /dev/null @@ -1,1369 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _WIFI_H_ -#define _WIFI_H_ - -#include -#include - - -#ifdef BIT -//#error "BIT define occurred earlier elsewhere!\n" -#undef BIT -#endif -#define BIT(x) ((uint32_t)1 << (x)) - -#if defined(PLATFORM_ECOS) -#define NUM_STA 10 //Decrease STA due to memory limitation - Alex Fang -#elif defined(PLATFORM_FREERTOS) || defined(PLATFORM_CMSIS_RTOS) -//Decrease STA due to memory limitation - Alex Fang -#ifdef CONFIG_AP_MODE -#define NUM_STA (2 + AP_STA_NUM) //2 + supported clients -#else -#define NUM_STA 2 //Client mode sta for AP and broadcast -#endif -#else -#define NUM_STA 32 -#endif - -#define WLAN_ETHHDR_LEN 14 -#define WLAN_ETHADDR_LEN 6 -#define WLAN_IEEE_OUI_LEN 3 -#define WLAN_ADDR_LEN 6 -#define WLAN_CRC_LEN 4 -#define WLAN_BSSID_LEN 6 -#define WLAN_BSS_TS_LEN 8 -#define WLAN_HDR_A3_LEN 24 -#define WLAN_HDR_A4_LEN 30 -#define WLAN_HDR_A3_QOS_LEN 26 -#define WLAN_HDR_A4_QOS_LEN 32 -#define WLAN_SSID_MAXLEN 32 -#define WLAN_DATA_MAXLEN 2312 - -#define WLAN_A3_PN_OFFSET 24 -#define WLAN_A4_PN_OFFSET 30 - -#define WLAN_MIN_ETHFRM_LEN 60 -#ifndef CONFIG_DONT_CARE_TP -#if WIFI_LOGO_CERTIFICATION -#define WLAN_MAX_ETHFRM_LEN 4000 -#else -#define WLAN_MAX_ETHFRM_LEN 1514 -#endif -#else -#define WLAN_MAX_RX_ETHFRM_LEN 1514 -#define WLAN_MAX_TX_ETHFRM_LEN 590 -#endif -#define WLAN_ETHHDR_LEN 14 -#define WLAN_SNAP_HEADER 8 -#define WLAN_MAX_IV_LEN 8 -#define WLAN_MAX_ICV_LEN 8 -#define WLAN_MAX_MIC_LEN 8 -#define WLAN_MAX_PROTOCOL_OVERHEAD (WLAN_HDR_A4_QOS_LEN+WLAN_MAX_IV_LEN\ - +WLAN_SNAP_HEADER+WLAN_MAX_MIC_LEN+WLAN_MAX_ICV_LEN) //=64 - -#define P80211CAPTURE_VERSION 0x80211001 - -// This value is tested by WiFi 11n Test Plan 5.2.3. -// This test verifies the WLAN NIC can update the NAV through sending the CTS with large duration. -#define WiFiNavUpperUs 30000 // 30 ms -// enum WLAN_IDX{ -// WLAN0_IDX = 0, -// WLAN1_IDX, -// WLAN_UNDEF = -1 -// }; - -#ifdef GREEN_HILL -#pragma pack(1) -#endif - -enum WIFI_FRAME_TYPE { - WIFI_MGT_TYPE = (0), - WIFI_CTRL_TYPE = (BIT(2)), - WIFI_DATA_TYPE = (BIT(3)), - WIFI_QOS_DATA_TYPE = (BIT(7)|BIT(3)), //!< QoS Data -}; - -enum WIFI_FRAME_SUBTYPE { - - // below is for mgt frame - WIFI_ASSOCREQ = (0 | WIFI_MGT_TYPE), - WIFI_ASSOCRSP = (BIT(4) | WIFI_MGT_TYPE), - WIFI_REASSOCREQ = (BIT(5) | WIFI_MGT_TYPE), - WIFI_REASSOCRSP = (BIT(5) | BIT(4) | WIFI_MGT_TYPE), - WIFI_PROBEREQ = (BIT(6) | WIFI_MGT_TYPE), - WIFI_PROBERSP = (BIT(6) | BIT(4) | WIFI_MGT_TYPE), - WIFI_BEACON = (BIT(7) | WIFI_MGT_TYPE), - WIFI_ATIM = (BIT(7) | BIT(4) | WIFI_MGT_TYPE), - WIFI_DISASSOC = (BIT(7) | BIT(5) | WIFI_MGT_TYPE), - WIFI_AUTH = (BIT(7) | BIT(5) | BIT(4) | WIFI_MGT_TYPE), - WIFI_DEAUTH = (BIT(7) | BIT(6) | WIFI_MGT_TYPE), - WIFI_ACTION = (BIT(7) | BIT(6) | BIT(4) | WIFI_MGT_TYPE), - - // below is for control frame - WIFI_PSPOLL = (BIT(7) | BIT(5) | WIFI_CTRL_TYPE), - WIFI_RTS = (BIT(7) | BIT(5) | BIT(4) | WIFI_CTRL_TYPE), - WIFI_CTS = (BIT(7) | BIT(6) | WIFI_CTRL_TYPE), - WIFI_ACK = (BIT(7) | BIT(6) | BIT(4) | WIFI_CTRL_TYPE), - WIFI_CFEND = (BIT(7) | BIT(6) | BIT(5) | WIFI_CTRL_TYPE), - WIFI_CFEND_CFACK = (BIT(7) | BIT(6) | BIT(5) | BIT(4) | WIFI_CTRL_TYPE), - - // below is for data frame - WIFI_DATA = (0 | WIFI_DATA_TYPE), - WIFI_DATA_CFACK = (BIT(4) | WIFI_DATA_TYPE), - WIFI_DATA_CFPOLL = (BIT(5) | WIFI_DATA_TYPE), - WIFI_DATA_CFACKPOLL = (BIT(5) | BIT(4) | WIFI_DATA_TYPE), - WIFI_DATA_NULL = (BIT(6) | WIFI_DATA_TYPE), - WIFI_CF_ACK = (BIT(6) | BIT(4) | WIFI_DATA_TYPE), - WIFI_CF_POLL = (BIT(6) | BIT(5) | WIFI_DATA_TYPE), - WIFI_CF_ACKPOLL = (BIT(6) | BIT(5) | BIT(4) | WIFI_DATA_TYPE), - WIFI_QOS_DATA_NULL = (BIT(6) | WIFI_QOS_DATA_TYPE), -}; - -enum WIFI_REASON_CODE { - _RSON_RESERVED_ = 0, - _RSON_UNSPECIFIED_ = 1, - _RSON_AUTH_NO_LONGER_VALID_ = 2, - _RSON_DEAUTH_STA_LEAVING_ = 3, - _RSON_INACTIVITY_ = 4, - _RSON_UNABLE_HANDLE_ = 5, - _RSON_CLS2_ = 6, - _RSON_CLS3_ = 7, - _RSON_DISAOC_STA_LEAVING_ = 8, - _RSON_ASOC_NOT_AUTH_ = 9, - - // WPA reason - _RSON_INVALID_IE_ = 13, - _RSON_MIC_FAILURE_ = 14, - _RSON_4WAY_HNDSHK_TIMEOUT_ = 15, - _RSON_GROUP_KEY_UPDATE_TIMEOUT_ = 16, - _RSON_DIFF_IE_ = 17, - _RSON_MLTCST_CIPHER_NOT_VALID_ = 18, - _RSON_UNICST_CIPHER_NOT_VALID_ = 19, - _RSON_AKMP_NOT_VALID_ = 20, - _RSON_UNSUPPORT_RSNE_VER_ = 21, - _RSON_INVALID_RSNE_CAP_ = 22, - _RSON_IEEE_802DOT1X_AUTH_FAIL_ = 23, - - //belowing are Realtek definition - _RSON_PMK_NOT_AVAILABLE_ = 24, - _RSON_TDLS_TEAR_TOOFAR_ = 25, - _RSON_TDLS_TEAR_UN_RSN_ = 26, -}; - -/* Reason codes (IEEE 802.11-2007, 7.3.1.7, Table 7-22) */ -#if 0 -#define WLAN_REASON_UNSPECIFIED 1 -#define WLAN_REASON_PREV_AUTH_NOT_VALID 2 -#define WLAN_REASON_DEAUTH_LEAVING 3 -#define WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY 4 -#define WLAN_REASON_DISASSOC_AP_BUSY 5 -#define WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA 6 -#define WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA 7 -#define WLAN_REASON_DISASSOC_STA_HAS_LEFT 8 -#define WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH 9 -#endif -/* IEEE 802.11h */ -#define WLAN_REASON_PWR_CAPABILITY_NOT_VALID 10 -#define WLAN_REASON_SUPPORTED_CHANNEL_NOT_VALID 11 -#if 0 -/* IEEE 802.11i */ -#define WLAN_REASON_INVALID_IE 13 -#define WLAN_REASON_MICHAEL_MIC_FAILURE 14 -#define WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT 15 -#define WLAN_REASON_GROUP_KEY_UPDATE_TIMEOUT 16 -#define WLAN_REASON_IE_IN_4WAY_DIFFERS 17 -#define WLAN_REASON_GROUP_CIPHER_NOT_VALID 18 -#define WLAN_REASON_PAIRWISE_CIPHER_NOT_VALID 19 -#define WLAN_REASON_AKMP_NOT_VALID 20 -#define WLAN_REASON_UNSUPPORTED_RSN_IE_VERSION 21 -#define WLAN_REASON_INVALID_RSN_IE_CAPAB 22 -#define WLAN_REASON_IEEE_802_1X_AUTH_FAILED 23 -#define WLAN_REASON_CIPHER_SUITE_REJECTED 24 -#endif - -enum WIFI_STATUS_CODE { - _STATS_SUCCESSFUL_ = 0, - _STATS_FAILURE_ = 1, - _STATS_CAP_FAIL_ = 10, - _STATS_NO_ASOC_ = 11, - _STATS_OTHER_ = 12, - _STATS_NO_SUPP_ALG_ = 13, - _STATS_OUT_OF_AUTH_SEQ_ = 14, - _STATS_CHALLENGE_FAIL_ = 15, - _STATS_AUTH_TIMEOUT_ = 16, - _STATS_UNABLE_HANDLE_STA_ = 17, - _STATS_RATE_FAIL_ = 18, -}; - -/* Status codes (IEEE 802.11-2007, 7.3.1.9, Table 7-23) */ -#if 0 -#define WLAN_STATUS_SUCCESS 0 -#define WLAN_STATUS_UNSPECIFIED_FAILURE 1 -#define WLAN_STATUS_CAPS_UNSUPPORTED 10 -#define WLAN_STATUS_REASSOC_NO_ASSOC 11 -#define WLAN_STATUS_ASSOC_DENIED_UNSPEC 12 -#define WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG 13 -#define WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION 14 -#define WLAN_STATUS_CHALLENGE_FAIL 15 -#define WLAN_STATUS_AUTH_TIMEOUT 16 -#define WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA 17 -#define WLAN_STATUS_ASSOC_DENIED_RATES 18 -#endif -//entended -/* IEEE 802.11b */ -#define WLAN_STATUS_ASSOC_DENIED_NOSHORT 19 -#define WLAN_STATUS_ASSOC_DENIED_NOPBCC 20 -#define WLAN_STATUS_ASSOC_DENIED_NOAGILITY 21 -/* IEEE 802.11h */ -#define WLAN_STATUS_SPEC_MGMT_REQUIRED 22 -#define WLAN_STATUS_PWR_CAPABILITY_NOT_VALID 23 -#define WLAN_STATUS_SUPPORTED_CHANNEL_NOT_VALID 24 -/* IEEE 802.11g */ -#define WLAN_STATUS_ASSOC_DENIED_NO_SHORT_SLOT_TIME 25 -#define WLAN_STATUS_ASSOC_DENIED_NO_ER_PBCC 26 -#define WLAN_STATUS_ASSOC_DENIED_NO_DSSS_OFDM 27 -/* IEEE 802.11w */ -#define WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY 30 -#define WLAN_STATUS_ROBUST_MGMT_FRAME_POLICY_VIOLATION 31 -/* IEEE 802.11i */ -#define WLAN_STATUS_INVALID_IE 40 -#define WLAN_STATUS_GROUP_CIPHER_NOT_VALID 41 -#define WLAN_STATUS_PAIRWISE_CIPHER_NOT_VALID 42 -#define WLAN_STATUS_AKMP_NOT_VALID 43 -#define WLAN_STATUS_UNSUPPORTED_RSN_IE_VERSION 44 -#define WLAN_STATUS_INVALID_RSN_IE_CAPAB 45 -#define WLAN_STATUS_CIPHER_REJECTED_PER_POLICY 46 -#define WLAN_STATUS_TS_NOT_CREATED 47 -#define WLAN_STATUS_DIRECT_LINK_NOT_ALLOWED 48 -#define WLAN_STATUS_DEST_STA_NOT_PRESENT 49 -#define WLAN_STATUS_DEST_STA_NOT_QOS_STA 50 -#define WLAN_STATUS_ASSOC_DENIED_LISTEN_INT_TOO_LARGE 51 -/* IEEE 802.11r */ -#define WLAN_STATUS_INVALID_FT_ACTION_FRAME_COUNT 52 -#define WLAN_STATUS_INVALID_PMKID 53 -#define WLAN_STATUS_INVALID_MDIE 54 -#define WLAN_STATUS_INVALID_FTIE 55 - - -enum WIFI_REG_DOMAIN { - DOMAIN_FCC = 1, - DOMAIN_IC = 2, - DOMAIN_ETSI = 3, - DOMAIN_SPAIN = 4, - DOMAIN_FRANCE = 5, - DOMAIN_MKK = 6, - DOMAIN_ISRAEL = 7, - DOMAIN_MKK1 = 8, - DOMAIN_MKK2 = 9, - DOMAIN_MKK3 = 10, - DOMAIN_MAX -}; - -#define _TO_DS_ BIT(8) -#define _FROM_DS_ BIT(9) -#define _MORE_FRAG_ BIT(10) -#define _RETRY_ BIT(11) -#define _PWRMGT_ BIT(12) -#define _MORE_DATA_ BIT(13) -#define _PRIVACY_ BIT(14) -#define _ORDER_ BIT(15) - -#define SetToDs(pbuf) \ - do { \ - *(unsigned short *)(pbuf) |= cpu_to_le16(_TO_DS_); \ - } while(0) - -#define GetToDs(pbuf) (((*(unsigned short *)(pbuf)) & le16_to_cpu(_TO_DS_)) != 0) - -#define ClearToDs(pbuf) \ - do { \ - *(unsigned short *)(pbuf) &= (~cpu_to_le16(_TO_DS_)); \ - } while(0) - -#define SetFrDs(pbuf) \ - do { \ - *(unsigned short *)(pbuf) |= cpu_to_le16(_FROM_DS_); \ - } while(0) - -#define GetFrDs(pbuf) (((*(unsigned short *)(pbuf)) & le16_to_cpu(_FROM_DS_)) != 0) - -#define ClearFrDs(pbuf) \ - do { \ - *(unsigned short *)(pbuf) &= (~cpu_to_le16(_FROM_DS_)); \ - } while(0) - -#define get_tofr_ds(pframe) ((GetToDs(pframe) << 1) | GetFrDs(pframe)) - - -#define SetMFrag(pbuf) \ - do { \ - *(unsigned short *)(pbuf) |= cpu_to_le16(_MORE_FRAG_); \ - } while(0) - -#define GetMFrag(pbuf) (((*(unsigned short *)(pbuf)) & le16_to_cpu(_MORE_FRAG_)) != 0) - -#define ClearMFrag(pbuf) \ - do { \ - *(unsigned short *)(pbuf) &= (~cpu_to_le16(_MORE_FRAG_)); \ - } while(0) - -#define SetRetry(pbuf) \ - do { \ - *(unsigned short *)(pbuf) |= cpu_to_le16(_RETRY_); \ - } while(0) - -#define GetRetry(pbuf) (((*(unsigned short *)(pbuf)) & le16_to_cpu(_RETRY_)) != 0) - -#define ClearRetry(pbuf) \ - do { \ - *(unsigned short *)(pbuf) &= (~cpu_to_le16(_RETRY_)); \ - } while(0) - -#define SetPwrMgt(pbuf) \ - do { \ - *(unsigned short *)(pbuf) |= cpu_to_le16(_PWRMGT_); \ - } while(0) - -#define GetPwrMgt(pbuf) (((*(unsigned short *)(pbuf)) & le16_to_cpu(_PWRMGT_)) != 0) - -#define ClearPwrMgt(pbuf) \ - do { \ - *(unsigned short *)(pbuf) &= (~cpu_to_le16(_PWRMGT_)); \ - } while(0) - -#define SetMData(pbuf) \ - do { \ - *(unsigned short *)(pbuf) |= cpu_to_le16(_MORE_DATA_); \ - } while(0) - -#define GetMData(pbuf) (((*(unsigned short *)(pbuf)) & le16_to_cpu(_MORE_DATA_)) != 0) - -#define ClearMData(pbuf) \ - do { \ - *(unsigned short *)(pbuf) &= (~cpu_to_le16(_MORE_DATA_)); \ - } while(0) - -#define SetPrivacy(pbuf) \ - do { \ - *(unsigned short *)(pbuf) |= cpu_to_le16(_PRIVACY_); \ - } while(0) - -#define GetPrivacy(pbuf) (((*(unsigned short *)(pbuf)) & le16_to_cpu(_PRIVACY_)) != 0) - -#define ClearPrivacy(pbuf) \ - do { \ - *(unsigned short *)(pbuf) &= (~cpu_to_le16(_PRIVACY_)); \ - } while(0) - - -#define GetOrder(pbuf) (((*(unsigned short *)(pbuf)) & le16_to_cpu(_ORDER_)) != 0) - -#define GetFrameType(pbuf) (le16_to_cpu(*(unsigned short *)(pbuf)) & (BIT(3) | BIT(2))) - -#define SetFrameType(pbuf,type) \ - do { \ - *(unsigned short *)(pbuf) &= cpu_to_le16(~(BIT(3) | BIT(2))); \ - *(unsigned short *)(pbuf) |= cpu_to_le16(type); \ - } while(0) - -#define GetFrameSubType(pbuf) (cpu_to_le16(*(unsigned short *)(pbuf)) & (BIT(7) | BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2))) - -#define SetFrameSubType(pbuf,type) \ - do { \ - *(unsigned short *)(pbuf) &= cpu_to_le16(~(BIT(7) | BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2))); \ - *(unsigned short *)(pbuf) |= cpu_to_le16(type); \ - } while(0) - -#define GetSequence(pbuf) (cpu_to_le16(*(unsigned short *)((SIZE_PTR)(pbuf) + 22)) >> 4) - -#define GetFragNum(pbuf) (cpu_to_le16(*(unsigned short *)((SIZE_PTR)(pbuf) + 22)) & 0x0f) - -#define GetTupleCache(pbuf) (cpu_to_le16(*(unsigned short *)((SIZE_PTR)(pbuf) + 22))) - -#define SetFragNum(pbuf, num) \ - do { \ - *(unsigned short *)((SIZE_PTR)(pbuf) + 22) = \ - ((*(unsigned short *)((SIZE_PTR)(pbuf) + 22)) & le16_to_cpu(~(0x000f))) | \ - cpu_to_le16(0x0f & (num)); \ - } while(0) - -#define SetSeqNum(pbuf, num) \ - do { \ - *(unsigned short *)((SIZE_PTR)(pbuf) + 22) = \ - ((*(unsigned short *)((SIZE_PTR)(pbuf) + 22)) & le16_to_cpu((unsigned short)~0xfff0)) | \ - le16_to_cpu((unsigned short)(0xfff0 & (num << 4))); \ - } while(0) -#define GetFrameControl(pbuf)(cpu_to_le16(*(unsigned short*)((SIZE_PTR)(pbuf)))) -#define GetDuration(pbuf) (cpu_to_le16(*(unsigned short*)((SIZE_PTR)(pbuf) + 2))) -#define SetDuration(pbuf, dur) \ - do { \ - *(unsigned short *)((SIZE_PTR)(pbuf) + 2) = cpu_to_le16(0xffff & (dur)); \ - } while(0) - - -#define SetPriority(pbuf, tid) \ - do { \ - *(unsigned short *)(pbuf) |= cpu_to_le16(tid & 0xf); \ - } while(0) - -#define GetPriority(pbuf) ((le16_to_cpu(*(unsigned short *)(pbuf))) & 0xf) - -#define SetEOSP(pbuf, eosp) \ - do { \ - *(unsigned short *)(pbuf) |= cpu_to_le16( (eosp & 1) << 4); \ - } while(0) - -#define SetAckpolicy(pbuf, ack) \ - do { \ - *(unsigned short *)(pbuf) |= cpu_to_le16( (ack & 3) << 5); \ - } while(0) - -#define GetAckpolicy(pbuf) (((le16_to_cpu(*(unsigned short *)pbuf)) >> 5) & 0x3) - -#define GetAMsdu(pbuf) (((le16_to_cpu(*(unsigned short *)pbuf)) >> 7) & 0x1) - -#define SetAMsdu(pbuf, amsdu) \ - do { \ - *(unsigned short *)(pbuf) |= cpu_to_le16( (amsdu & 1) << 7); \ - } while(0) - -#define GetAid(pbuf) (cpu_to_le16(*(unsigned short *)((SIZE_PTR)(pbuf) + 2)) & 0x3fff) - -#define GetTid(pbuf) (cpu_to_le16(*(unsigned short *)((SIZE_PTR)(pbuf) + (((GetToDs(pbuf)<<1)|GetFrDs(pbuf))==3?30:24))) & 0x000f) - -#define GetAddr1Ptr(pbuf) ((unsigned char *)((SIZE_PTR)(pbuf) + 4)) - -#define GetAddr2Ptr(pbuf) ((unsigned char *)((SIZE_PTR)(pbuf) + 10)) - -#define GetAddr3Ptr(pbuf) ((unsigned char *)((SIZE_PTR)(pbuf) + 16)) - -#define GetAddr4Ptr(pbuf) ((unsigned char *)((SIZE_PTR)(pbuf) + 24)) - -#define MacAddr_isBcst(addr) \ -( \ - ( (addr[0] == 0xff) && (addr[1] == 0xff) && \ - (addr[2] == 0xff) && (addr[3] == 0xff) && \ - (addr[4] == 0xff) && (addr[5] == 0xff) ) ? _TRUE : _FALSE \ -) - -__inline static int IS_MCAST(unsigned char *da) -{ - if ((*da) & 0x01) - return _TRUE; - else - return _FALSE; -} - -__inline static unsigned char * get_ta(unsigned char *pframe) -{ - unsigned char *ta; - ta = GetAddr2Ptr(pframe); - return ta; -} - -__inline static unsigned char * get_da(unsigned char *pframe) -{ - unsigned char *da; - unsigned int to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe); - - switch (to_fr_ds) { - case 0x00: // ToDs=0, FromDs=0 - da = GetAddr1Ptr(pframe); - break; - case 0x01: // ToDs=0, FromDs=1 - da = GetAddr1Ptr(pframe); - break; - case 0x02: // ToDs=1, FromDs=0 - da = GetAddr3Ptr(pframe); - break; - default: // ToDs=1, FromDs=1 - da = GetAddr3Ptr(pframe); - break; - } - - return da; -} - - -__inline static unsigned char * get_sa(unsigned char *pframe) -{ - unsigned char *sa; - unsigned int to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe); - - switch (to_fr_ds) { - case 0x00: // ToDs=0, FromDs=0 - sa = GetAddr2Ptr(pframe); - break; - case 0x01: // ToDs=0, FromDs=1 - sa = GetAddr3Ptr(pframe); - break; - case 0x02: // ToDs=1, FromDs=0 - sa = GetAddr2Ptr(pframe); - break; - default: // ToDs=1, FromDs=1 - sa = GetAddr4Ptr(pframe); - break; - } - - return sa; -} - -__inline static unsigned char * get_hdr_bssid(unsigned char *pframe) -{ - unsigned char *sa; - unsigned int to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe); - - switch (to_fr_ds) { - case 0x00: // ToDs=0, FromDs=0 - sa = GetAddr3Ptr(pframe); - break; - case 0x01: // ToDs=0, FromDs=1 - sa = GetAddr2Ptr(pframe); - break; - case 0x02: // ToDs=1, FromDs=0 - sa = GetAddr1Ptr(pframe); - break; - case 0x03: // ToDs=1, FromDs=1 - sa = GetAddr1Ptr(pframe); - break; - default: - sa =NULL; //??????? - break; - } - - return sa; -} - - -__inline static int IsFrameTypeCtrl(unsigned char *pframe) -{ - if(WIFI_CTRL_TYPE == GetFrameType(pframe)) - return _TRUE; - else - return _FALSE; -} -/*----------------------------------------------------------------------------- - Below is for the security related definition -------------------------------------------------------------------------------*/ -#define _RESERVED_FRAME_TYPE_ 0 -#define _SKB_FRAME_TYPE_ 2 -#define _PRE_ALLOCMEM_ 1 -#define _PRE_ALLOCHDR_ 3 -#define _PRE_ALLOCLLCHDR_ 4 -#define _PRE_ALLOCICVHDR_ 5 -#define _PRE_ALLOCMICHDR_ 6 - -#define _SIFSTIME_ ((priv->pmib->dot11BssType.net_work_type&WIRELESS_11A)?16:10) -#define _ACKCTSLNG_ 14 //14 bytes long, including crclng -#define _CRCLNG_ 4 - -#define _ASOCREQ_IE_OFFSET_ 4 // excluding wlan_hdr -#define _ASOCRSP_IE_OFFSET_ 6 -#define _REASOCREQ_IE_OFFSET_ 10 -#define _REASOCRSP_IE_OFFSET_ 6 -#define _PROBEREQ_IE_OFFSET_ 0 -#define _PROBERSP_IE_OFFSET_ 12 -#define _AUTH_IE_OFFSET_ 6 -#define _DEAUTH_IE_OFFSET_ 0 -#define _BEACON_IE_OFFSET_ 12 -#define _PUBLIC_ACTION_IE_OFFSET_ 8 - -#define _FIXED_IE_LENGTH_ _BEACON_IE_OFFSET_ - -#define _SSID_IE_ 0 -#define _SUPPORTEDRATES_IE_ 1 -#define _DSSET_IE_ 3 -#define _TIM_IE_ 5 -#define _IBSS_PARA_IE_ 6 -#define _COUNTRY_IE_ 7 -#define _CHLGETXT_IE_ 16 -#define _SUPPORTED_CH_IE_ 36 -#define _CH_SWTICH_ANNOUNCE_ 37 //Secondary Channel Offset -#define _RSN_IE_2_ 48 -#define _SSN_IE_1_ 221 -#define _ERPINFO_IE_ 42 -#define _EXT_SUPPORTEDRATES_IE_ 50 - -#define _HT_CAPABILITY_IE_ 45 -#define _FTIE_ 55 -#define _TIMEOUT_ITVL_IE_ 56 -#define _SRC_IE_ 59 -#define _HT_EXTRA_INFO_IE_ 61 -#define _HT_ADD_INFO_IE_ 61 //_HT_EXTRA_INFO_IE_ -#define _WAPI_IE_ 68 - - -#define EID_BSSCoexistence 72 // 20/40 BSS Coexistence -#define EID_BSSIntolerantChlReport 73 -#define _RIC_Descriptor_IE_ 75 - -#define _LINK_ID_IE_ 101 -#define _CH_SWITCH_TIMING_ 104 -#define _PTI_BUFFER_STATUS_ 106 -#define _EXT_CAP_IE_ 127 -#define _VENDOR_SPECIFIC_IE_ 221 - -#define _RESERVED47_ 47 - -/* --------------------------------------------------------------------------- - Below is the fixed elements... ------------------------------------------------------------------------------*/ -#define _AUTH_ALGM_NUM_ 2 -#define _AUTH_SEQ_NUM_ 2 -#define _BEACON_ITERVAL_ 2 -#define _CAPABILITY_ 2 -#define _CURRENT_APADDR_ 6 -#define _LISTEN_INTERVAL_ 2 -#define _RSON_CODE_ 2 -#define _ASOC_ID_ 2 -#define _STATUS_CODE_ 2 -#define _TIMESTAMP_ 8 - -#define AUTH_ODD_TO 0 -#define AUTH_EVEN_TO 1 - -#define WLAN_ETHCONV_ENCAP 1 -#define WLAN_ETHCONV_RFC1042 2 -#define WLAN_ETHCONV_8021h 3 - -#define cap_ESS BIT(0) -#define cap_IBSS BIT(1) -#define cap_CFPollable BIT(2) -#define cap_CFRequest BIT(3) -#define cap_Privacy BIT(4) -#define cap_ShortPremble BIT(5) -#define cap_PBCC BIT(6) -#define cap_ChAgility BIT(7) -#define cap_SpecMgmt BIT(8) -#define cap_QoS BIT(9) -#define cap_ShortSlot BIT(10) - -/*----------------------------------------------------------------------------- - Below is the definition for 802.11i / 802.1x -------------------------------------------------------------------------------*/ -#define _IEEE8021X_MGT_ 1 // WPA -#define _IEEE8021X_PSK_ 2 // WPA with pre-shared key - -/* -#define _NO_PRIVACY_ 0 -#define _WEP_40_PRIVACY_ 1 -#define _TKIP_PRIVACY_ 2 -#define _WRAP_PRIVACY_ 3 -#define _CCMP_PRIVACY_ 4 -#define _WEP_104_PRIVACY_ 5 -#define _WEP_WPA_MIXED_PRIVACY_ 6 // WEP + WPA -*/ - -/*----------------------------------------------------------------------------- - Below is the definition for WMM -------------------------------------------------------------------------------*/ -#define _WMM_IE_Length_ 7 // for WMM STA -#define _WMM_Para_Element_Length_ 24 - -//TODO -#if 0 - -/*----------------------------------------------------------------------------- - Below is the definition for 802.11n -------------------------------------------------------------------------------*/ - -//#ifdef CONFIG_80211N_HT - -#define SetOrderBit(pbuf) \ - do { \ - *(unsigned short *)(pbuf) |= cpu_to_le16(_ORDER_); \ - } while(0) - -#define GetOrderBit(pbuf) (((*(unsigned short *)(pbuf)) & le16_to_cpu(_ORDER_)) != 0) - - -/** - * struct rtw_ieee80211_bar - HT Block Ack Request - * - * This structure refers to "HT BlockAckReq" as - * described in 802.11n draft section 7.2.1.7.1 - */ - #if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8712FW) -struct rtw_ieee80211_bar { - unsigned short frame_control; - unsigned short duration; - unsigned char ra[6]; - unsigned char ta[6]; - unsigned short control; - unsigned short start_seq_num; -} __attribute__((packed)); - #endif - -/* 802.11 BAR control masks */ -#define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL 0x0000 -#define IEEE80211_BAR_CTRL_CBMTID_COMPRESSED_BA 0x0004 - -#endif //#if 0 - -#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8712FW) || defined(PLATFORM_FREEBSD) || defined(PLATFORM_ECOS) || defined(PLATFORM_FREERTOS) || defined(PLATFORM_CMSIS_RTOS) - - - - /** - * struct rtw_ieee80211_ht_cap - HT capabilities - * - * This structure refers to "HT capabilities element" as - * described in 802.11n draft section 7.3.2.52 - */ - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct rtw_ieee80211_ht_cap { - unsigned short cap_info; - unsigned char ampdu_params_info; - unsigned char supp_mcs_set[16]; - unsigned short extended_ht_cap_info; - unsigned int tx_BF_cap_info; - unsigned char antenna_selection_info; -}RTW_PACK_STRUCT_STRUCT; -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - - -/** - * struct rtw_ieee80211_ht_cap - HT additional information - * - * This structure refers to "HT information element" as - * described in 802.11n draft section 7.3.2.53 - */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct ieee80211_ht_addt_info { - unsigned char control_chan; - unsigned char ht_param; - unsigned short operation_mode; - unsigned short stbc_param; - unsigned char basic_set[16]; -}RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct HT_caps_element -{ - union - { - struct - { - unsigned short HT_caps_info; - unsigned char AMPDU_para; - unsigned char MCS_rate[16]; - unsigned short HT_ext_caps; - unsigned int Beamforming_caps; - unsigned char ASEL_caps; - } -#ifdef __CC_ARM - __attribute__ ((packed)) -#endif - HT_cap_element; - unsigned char HT_cap[26]; - } -#ifdef __CC_ARM - __attribute__ ((packed)) -#endif - u; -}RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct HT_info_element -{ - unsigned char primary_channel; - unsigned char infos[5]; - unsigned char MCS_rate[16]; -}RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct AC_param -{ - unsigned char ACI_AIFSN; - unsigned char CW; - unsigned short TXOP_limit; -}RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct WMM_para_element -{ - unsigned char QoS_info; - unsigned char reserved; - struct AC_param ac_param[4]; -}RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct ADDBA_request -{ - unsigned char dialog_token; - unsigned short BA_para_set; - unsigned short BA_timeout_value; - unsigned short BA_starting_seqctrl; -}RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#endif //#if defined PLATFORM_LINUX/CONFIG_RTL8712FW/PLATFORM_FREEBSD/PLATFORM_ECOS/PLATFORM_FREERTOS - - -#ifdef PLATFORM_WINDOWS - -#pragma pack(1) - -struct rtw_ieee80211_ht_cap { - unsigned short cap_info; - unsigned char ampdu_params_info; - unsigned char supp_mcs_set[16]; - unsigned short extended_ht_cap_info; - unsigned int tx_BF_cap_info; - unsigned char antenna_selection_info; -}; - - -struct ieee80211_ht_addt_info { - unsigned char control_chan; - unsigned char ht_param; - unsigned short operation_mode; - unsigned short stbc_param; - unsigned char basic_set[16]; -}; - -struct HT_caps_element -{ - union - { - struct - { - unsigned short HT_caps_info; - unsigned char AMPDU_para; - unsigned char MCS_rate[16]; - unsigned short HT_ext_caps; - unsigned int Beamforming_caps; - unsigned char ASEL_caps; - } HT_cap_element; - unsigned char HT_cap[26]; - }; -}; - -struct HT_info_element -{ - unsigned char primary_channel; - unsigned char infos[5]; - unsigned char MCS_rate[16]; -}; - -struct AC_param -{ - unsigned char ACI_AIFSN; - unsigned char CW; - unsigned short TXOP_limit; -}; - -struct WMM_para_element -{ - unsigned char QoS_info; - unsigned char reserved; - struct AC_param ac_param[4]; -}; - -struct ADDBA_request -{ - unsigned char dialog_token; - unsigned short BA_para_set; - unsigned short BA_timeout_value; - unsigned short BA_starting_seqctrl; -}; - - -#pragma pack() - -#endif - -typedef enum _HT_CAP_AMPDU_FACTOR { - MAX_AMPDU_FACTOR_8K = 0, - MAX_AMPDU_FACTOR_16K = 1, - MAX_AMPDU_FACTOR_32K = 2, - MAX_AMPDU_FACTOR_64K = 3, -}HT_CAP_AMPDU_FACTOR; - -/* 802.11n HT capabilities masks */ -#define IEEE80211_HT_CAP_SUP_WIDTH 0x0002 -#define IEEE80211_HT_CAP_SM_PS 0x000C -#define IEEE80211_HT_CAP_GRN_FLD 0x0010 -#define IEEE80211_HT_CAP_SGI_20 0x0020 -#define IEEE80211_HT_CAP_SGI_40 0x0040 -#define IEEE80211_HT_CAP_TX_STBC 0x0080 -#define IEEE80211_HT_CAP_RX_STBC 0x0300 -#define IEEE80211_HT_CAP_DELAY_BA 0x0400 -#define IEEE80211_HT_CAP_MAX_AMSDU 0x0800 -#define IEEE80211_HT_CAP_DSSSCCK40 0x1000 -/* 802.11n HT capability AMPDU settings */ -#define IEEE80211_HT_CAP_AMPDU_FACTOR 0x03 -#define IEEE80211_HT_CAP_AMPDU_DENSITY 0x1C -/* 802.11n HT capability MSC set */ -#define IEEE80211_SUPP_MCS_SET_UEQM 4 -#define IEEE80211_HT_CAP_MAX_STREAMS 4 -#define IEEE80211_SUPP_MCS_SET_LEN 10 -/* maximum streams the spec allows */ -#define IEEE80211_HT_CAP_MCS_TX_DEFINED 0x01 -#define IEEE80211_HT_CAP_MCS_TX_RX_DIFF 0x02 -#define IEEE80211_HT_CAP_MCS_TX_STREAMS 0x0C -#define IEEE80211_HT_CAP_MCS_TX_UEQM 0x10 -/* 802.11n HT IE masks */ -#define IEEE80211_HT_IE_CHA_SEC_OFFSET 0x03 -#define IEEE80211_HT_IE_CHA_SEC_NONE 0x00 -#define IEEE80211_HT_IE_CHA_SEC_ABOVE 0x01 -#define IEEE80211_HT_IE_CHA_SEC_BELOW 0x03 -#define IEEE80211_HT_IE_CHA_WIDTH 0x04 -#define IEEE80211_HT_IE_HT_PROTECTION 0x0003 -#define IEEE80211_HT_IE_NON_GF_STA_PRSNT 0x0004 -#define IEEE80211_HT_IE_NON_HT_STA_PRSNT 0x0010 - -/* block-ack parameters */ -#define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002 -#define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C -#define RTW_IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFC0 -#define IEEE80211_DELBA_PARAM_TID_MASK 0xF000 -#define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800 - -/* - * A-PMDU buffer sizes - * According to IEEE802.11n spec size varies from 8K to 64K (in powers of 2) - */ -#define IEEE80211_MIN_AMPDU_BUF 0x8 -#define IEEE80211_MAX_AMPDU_BUF 0x40 - - -/* Spatial Multiplexing Power Save Modes */ -#define WLAN_HT_CAP_SM_PS_STATIC 0 -#define WLAN_HT_CAP_SM_PS_DYNAMIC 1 -#define WLAN_HT_CAP_SM_PS_INVALID 2 -#define WLAN_HT_CAP_SM_PS_DISABLED 3 - - -#define OP_MODE_PURE 0 -#define OP_MODE_MAY_BE_LEGACY_STAS 1 -#define OP_MODE_20MHZ_HT_STA_ASSOCED 2 -#define OP_MODE_MIXED 3 - -#define HT_INFO_HT_PARAM_SECONDARY_CHNL_OFF_MASK ((uint8_t) BIT(0) | BIT(1)) -#define HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE ((uint8_t) BIT(0)) -#define HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW ((uint8_t) BIT(0) | BIT(1)) -#define HT_INFO_HT_PARAM_REC_TRANS_CHNL_WIDTH ((uint8_t) BIT(2)) -#define HT_INFO_HT_PARAM_RIFS_MODE ((uint8_t) BIT(3)) -#define HT_INFO_HT_PARAM_CTRL_ACCESS_ONLY ((uint8_t) BIT(4)) -#define HT_INFO_HT_PARAM_SRV_INTERVAL_GRANULARITY ((uint8_t) BIT(5)) - -#define HT_INFO_OPERATION_MODE_OP_MODE_MASK \ - ((uint16_t) (0x0001 | 0x0002)) -#define HT_INFO_OPERATION_MODE_OP_MODE_OFFSET 0 -#define HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT ((uint8_t) BIT(2)) -#define HT_INFO_OPERATION_MODE_TRANSMIT_BURST_LIMIT ((uint8_t) BIT(3)) -#define HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT ((uint8_t) BIT(4)) - -#define HT_INFO_STBC_PARAM_DUAL_BEACON ((uint16_t) BIT(6)) -#define HT_INFO_STBC_PARAM_DUAL_STBC_PROTECT ((uint16_t) BIT(7)) -#define HT_INFO_STBC_PARAM_SECONDARY_BCN ((uint16_t) BIT(8)) -#define HT_INFO_STBC_PARAM_LSIG_TXOP_PROTECT_ALLOWED ((uint16_t) BIT(9)) -#define HT_INFO_STBC_PARAM_PCO_ACTIVE ((uint16_t) BIT(10)) -#define HT_INFO_STBC_PARAM_PCO_PHASE ((uint16_t) BIT(11)) - - - -//#endif - -// ===============WPS Section=============== -// For WPSv1.0 -#define WPSOUI 0x0050f204 -// WPS attribute ID -#define WPS_ATTR_VER1 0x104A -#define WPS_ATTR_SIMPLE_CONF_STATE 0x1044 -#define WPS_ATTR_RESP_TYPE 0x103B -#define WPS_ATTR_UUID_E 0x1047 -#define WPS_ATTR_MANUFACTURER 0x1021 -#define WPS_ATTR_MODEL_NAME 0x1023 -#define WPS_ATTR_MODEL_NUMBER 0x1024 -#define WPS_ATTR_SERIAL_NUMBER 0x1042 -#define WPS_ATTR_PRIMARY_DEV_TYPE 0x1054 -#define WPS_ATTR_SEC_DEV_TYPE_LIST 0x1055 -#define WPS_ATTR_DEVICE_NAME 0x1011 -#define WPS_ATTR_CONF_METHOD 0x1008 -#define WPS_ATTR_RF_BANDS 0x103C -#define WPS_ATTR_DEVICE_PWID 0x1012 -#define WPS_ATTR_REQUEST_TYPE 0x103A -#define WPS_ATTR_ASSOCIATION_STATE 0x1002 -#define WPS_ATTR_CONFIG_ERROR 0x1009 -#define WPS_ATTR_VENDOR_EXT 0x1049 -#define WPS_ATTR_SELECTED_REGISTRAR 0x1041 - -// Value of WPS attribute "WPS_ATTR_DEVICE_NAME -#define WPS_MAX_DEVICE_NAME_LEN 32 - -// Value of WPS Request Type Attribute -#define WPS_REQ_TYPE_ENROLLEE_INFO_ONLY 0x00 -#define WPS_REQ_TYPE_ENROLLEE_OPEN_8021X 0x01 -#define WPS_REQ_TYPE_REGISTRAR 0x02 -#define WPS_REQ_TYPE_WLAN_MANAGER_REGISTRAR 0x03 - -// Value of WPS Response Type Attribute -#define WPS_RESPONSE_TYPE_INFO_ONLY 0x00 -#define WPS_RESPONSE_TYPE_8021X 0x01 -#define WPS_RESPONSE_TYPE_REGISTRAR 0x02 -#define WPS_RESPONSE_TYPE_AP 0x03 - -// Value of WPS WiFi Simple Configuration State Attribute -#define WPS_WSC_STATE_NOT_CONFIG 0x01 -#define WPS_WSC_STATE_CONFIG 0x02 - -// Value of WPS Version Attribute -#define WPS_VERSION_1 0x10 - -// Value of WPS Configuration Method Attribute -#define WPS_CONFIG_METHOD_FLASH 0x0001 -#define WPS_CONFIG_METHOD_ETHERNET 0x0002 -#define WPS_CONFIG_METHOD_LABEL 0x0004 -#define WPS_CONFIG_METHOD_DISPLAY 0x0008 -#define WPS_CONFIG_METHOD_E_NFC 0x0010 -#define WPS_CONFIG_METHOD_I_NFC 0x0020 -#define WPS_CONFIG_METHOD_NFC 0x0040 -#define WPS_CONFIG_METHOD_PBC 0x0080 -#define WPS_CONFIG_METHOD_KEYPAD 0x0100 -#define WPS_CONFIG_METHOD_VPBC 0x0280 -#define WPS_CONFIG_METHOD_PPBC 0x0480 -#define WPS_CONFIG_METHOD_VDISPLAY 0x2008 -#define WPS_CONFIG_METHOD_PDISPLAY 0x4008 - -// Value of Category ID of WPS Primary Device Type Attribute -#define WPS_PDT_CID_DISPLAYS 0x0007 -#define WPS_PDT_CID_MULIT_MEDIA 0x0008 -#define WPS_PDT_CID_RTK_WIDI WPS_PDT_CID_MULIT_MEDIA - -// Value of Sub Category ID of WPS Primary Device Type Attribute -#define WPS_PDT_SCID_MEDIA_SERVER 0x0005 -#define WPS_PDT_SCID_RTK_DMP WPS_PDT_SCID_MEDIA_SERVER - -// Value of Device Password ID -#define WPS_DPID_PIN 0x0000 -#define WPS_DPID_USER_SPEC 0x0001 -#define WPS_DPID_MACHINE_SPEC 0x0002 -#define WPS_DPID_REKEY 0x0003 -#define WPS_DPID_PBC 0x0004 -#define WPS_DPID_REGISTRAR_SPEC 0x0005 - -// Value of WPS RF Bands Attribute -#define WPS_RF_BANDS_2_4_GHZ 0x01 -#define WPS_RF_BANDS_5_GHZ 0x02 - -// Value of WPS Association State Attribute -#define WPS_ASSOC_STATE_NOT_ASSOCIATED 0x00 -#define WPS_ASSOC_STATE_CONNECTION_SUCCESS 0x01 -#define WPS_ASSOC_STATE_CONFIGURATION_FAILURE 0x02 -#define WPS_ASSOC_STATE_ASSOCIATION_FAILURE 0x03 -#define WPS_ASSOC_STATE_IP_FAILURE 0x04 - -// =====================P2P Section===================== -// For P2P -#define P2POUI 0x506F9A09 - -// P2P Attribute ID -#define P2P_ATTR_STATUS 0x00 -#define P2P_ATTR_MINOR_REASON_CODE 0x01 -#define P2P_ATTR_CAPABILITY 0x02 -#define P2P_ATTR_DEVICE_ID 0x03 -#define P2P_ATTR_GO_INTENT 0x04 -#define P2P_ATTR_CONF_TIMEOUT 0x05 -#define P2P_ATTR_LISTEN_CH 0x06 -#define P2P_ATTR_GROUP_BSSID 0x07 -#define P2P_ATTR_EX_LISTEN_TIMING 0x08 -#define P2P_ATTR_INTENTED_IF_ADDR 0x09 -#define P2P_ATTR_MANAGEABILITY 0x0A -#define P2P_ATTR_CH_LIST 0x0B -#define P2P_ATTR_NOA 0x0C -#define P2P_ATTR_DEVICE_INFO 0x0D -#define P2P_ATTR_GROUP_INFO 0x0E -#define P2P_ATTR_GROUP_ID 0x0F -#define P2P_ATTR_INTERFACE 0x10 -#define P2P_ATTR_OPERATING_CH 0x11 -#define P2P_ATTR_INVITATION_FLAGS 0x12 - -// Value of Status Attribute -#define P2P_STATUS_SUCCESS 0x00 -#define P2P_STATUS_FAIL_INFO_UNAVAILABLE 0x01 -#define P2P_STATUS_FAIL_INCOMPATIBLE_PARAM 0x02 -#define P2P_STATUS_FAIL_LIMIT_REACHED 0x03 -#define P2P_STATUS_FAIL_INVALID_PARAM 0x04 -#define P2P_STATUS_FAIL_REQUEST_UNABLE 0x05 -#define P2P_STATUS_FAIL_PREVOUS_PROTO_ERR 0x06 -#define P2P_STATUS_FAIL_NO_COMMON_CH 0x07 -#define P2P_STATUS_FAIL_UNKNOWN_P2PGROUP 0x08 -#define P2P_STATUS_FAIL_BOTH_GOINTENT_15 0x09 -#define P2P_STATUS_FAIL_INCOMPATIBLE_PROVSION 0x0A -#define P2P_STATUS_FAIL_USER_REJECT 0x0B - -// Value of Inviation Flags Attribute -#define P2P_INVITATION_FLAGS_PERSISTENT BIT(0) - -#define DMP_P2P_DEVCAP_SUPPORT (P2P_DEVCAP_SERVICE_DISCOVERY | \ - P2P_DEVCAP_CLIENT_DISCOVERABILITY | \ - P2P_DEVCAP_CONCURRENT_OPERATION | \ - P2P_DEVCAP_INVITATION_PROC) - -#define DMP_P2P_GRPCAP_SUPPORT (P2P_GRPCAP_INTRABSS) - -// Value of Device Capability Bitmap -#define P2P_DEVCAP_SERVICE_DISCOVERY BIT(0) -#define P2P_DEVCAP_CLIENT_DISCOVERABILITY BIT(1) -#define P2P_DEVCAP_CONCURRENT_OPERATION BIT(2) -#define P2P_DEVCAP_INFRA_MANAGED BIT(3) -#define P2P_DEVCAP_DEVICE_LIMIT BIT(4) -#define P2P_DEVCAP_INVITATION_PROC BIT(5) - -// Value of Group Capability Bitmap -#define P2P_GRPCAP_GO BIT(0) -#define P2P_GRPCAP_PERSISTENT_GROUP BIT(1) -#define P2P_GRPCAP_GROUP_LIMIT BIT(2) -#define P2P_GRPCAP_INTRABSS BIT(3) -#define P2P_GRPCAP_CROSS_CONN BIT(4) -#define P2P_GRPCAP_PERSISTENT_RECONN BIT(5) -#define P2P_GRPCAP_GROUP_FORMATION BIT(6) - -// P2P Public Action Frame ( Management Frame ) -#define P2P_PUB_ACTION_ACTION 0x09 - -// P2P Public Action Frame Type -#define P2P_GO_NEGO_REQ 0 -#define P2P_GO_NEGO_RESP 1 -#define P2P_GO_NEGO_CONF 2 -#define P2P_INVIT_REQ 3 -#define P2P_INVIT_RESP 4 -#define P2P_DEVDISC_REQ 5 -#define P2P_DEVDISC_RESP 6 -#define P2P_PROVISION_DISC_REQ 7 -#define P2P_PROVISION_DISC_RESP 8 - -// P2P Action Frame Type -#define P2P_NOTICE_OF_ABSENCE 0 -#define P2P_PRESENCE_REQUEST 1 -#define P2P_PRESENCE_RESPONSE 2 -#define P2P_GO_DISC_REQUEST 3 - - -#define P2P_MAX_PERSISTENT_GROUP_NUM 10 - -#define P2P_PROVISIONING_SCAN_CNT 3 - -#define P2P_WILDCARD_SSID_LEN 7 - -#define P2P_FINDPHASE_EX_NONE 0 // default value, used when: (1)p2p disabed or (2)p2p enabled but only do 1 scan phase -#define P2P_FINDPHASE_EX_FULL 1 // used when p2p enabled and want to do 1 scan phase and P2P_FINDPHASE_EX_MAX-1 find phase -#define P2P_FINDPHASE_EX_SOCIAL_FIRST (P2P_FINDPHASE_EX_FULL+1) -#define P2P_FINDPHASE_EX_MAX 4 -#define P2P_FINDPHASE_EX_SOCIAL_LAST P2P_FINDPHASE_EX_MAX - -#define P2P_PROVISION_TIMEOUT 5000 // 5 seconds timeout for sending the provision discovery request -#define P2P_CONCURRENT_PROVISION_TIMEOUT 3000 // 3 seconds timeout for sending the provision discovery request under concurrent mode -#define P2P_GO_NEGO_TIMEOUT 5000 // 5 seconds timeout for receiving the group negotation response -#define P2P_CONCURRENT_GO_NEGO_TIMEOUT 3000 // 3 seconds timeout for sending the negotiation request under concurrent mode -#define P2P_TX_PRESCAN_TIMEOUT 100 // 100ms -#define P2P_INVITE_TIMEOUT 5000 // 5 seconds timeout for sending the invitation request -#define P2P_CONCURRENT_INVITE_TIMEOUT 3000 // 3 seconds timeout for sending the invitation request under concurrent mode - -#define P2P_MAX_INTENT 15 - -#define P2P_MAX_NOA_NUM 2 - -// WPS Configuration Method -#define WPS_CM_NONE 0x0000 -#define WPS_CM_LABEL 0x0004 -#define WPS_CM_DISPLYA 0x0008 -#define WPS_CM_EXTERNAL_NFC_TOKEN 0x0010 -#define WPS_CM_INTEGRATED_NFC_TOKEN 0x0020 -#define WPS_CM_NFC_INTERFACE 0x0040 -#define WPS_CM_PUSH_BUTTON 0x0080 -#define WPS_CM_KEYPAD 0x0100 -#define WPS_CM_SW_PUHS_BUTTON 0x0280 -#define WPS_CM_HW_PUHS_BUTTON 0x0480 -#define WPS_CM_SW_DISPLAY_PIN 0x2008 -#define WPS_CM_LCD_DISPLAY_PIN 0x4008 - -enum gen_ie_type{ - P2PWPS_PROBE_REQ_IE = 0, - P2PWPS_PROBE_RSP_IE, - P2PWPS_BEACON_IE, - P2PWPS_ASSOC_REQ_IE, - P2PWPS_ASSOC_RSP_IE -}; - -enum P2P_ROLE { - P2P_ROLE_DISABLE = 0, - P2P_ROLE_DEVICE = 1, - P2P_ROLE_CLIENT = 2, - P2P_ROLE_GO = 3 -}; - -enum P2P_STATE { - P2P_STATE_NONE = 0, // P2P disable - P2P_STATE_IDLE = 1, // P2P had enabled and do nothing - P2P_STATE_LISTEN = 2, // In pure listen state - P2P_STATE_SCAN = 3, // In scan phase - P2P_STATE_FIND_PHASE_LISTEN = 4, // In the listen state of find phase - P2P_STATE_FIND_PHASE_SEARCH = 5, // In the search state of find phase - P2P_STATE_TX_PROVISION_DIS_REQ = 6, // In P2P provisioning discovery - P2P_STATE_RX_PROVISION_DIS_RSP = 7, - P2P_STATE_RX_PROVISION_DIS_REQ = 8, - P2P_STATE_GONEGO_ING = 9, // Doing the group owner negoitation handshake - P2P_STATE_GONEGO_OK = 10, // finish the group negoitation handshake with success - P2P_STATE_GONEGO_FAIL = 11, // finish the group negoitation handshake with failure - P2P_STATE_RECV_INVITE_REQ_MATCH = 12, // receiving the P2P Inviation request and match with the profile. - P2P_STATE_PROVISIONING_ING = 13, // Doing the P2P WPS - P2P_STATE_PROVISIONING_DONE = 14, // Finish the P2P WPS - P2P_STATE_TX_INVITE_REQ = 15, // Transmit the P2P Invitation request - P2P_STATE_RX_INVITE_RESP = 16, // Receiving the P2P Invitation response - P2P_STATE_RECV_INVITE_REQ_DISMATCH = 17, // receiving the P2P Inviation request and dismatch with the profile. - P2P_STATE_RECV_INVITE_REQ_GO = 18, // receiving the P2P Inviation request and this wifi is GO. - P2P_STATE_RECV_INVITE_REQ_JOIN = 19, // receiving the P2P Inviation request to join an existing P2P Group. - P2P_STATE_FORMATION_COMPLETE = 20, - P2P_STATE_CONNECTED = 21, -}; - -enum P2P_WPSINFO { - P2P_NO_WPSINFO = 0, - P2P_GOT_WPSINFO_PEER_DISPLAY_PIN = 1, - P2P_GOT_WPSINFO_SELF_DISPLAY_PIN = 2, - P2P_GOT_WPSINFO_PBC = 3, -}; - -#define P2P_PRIVATE_IOCTL_SET_LEN 64 - -enum P2P_PROTO_WK_ID -{ - P2P_FIND_PHASE_WK = 0, - P2P_RESTORE_STATE_WK = 1, - P2P_PRE_TX_PROVDISC_PROCESS_WK = 2, - P2P_PRE_TX_NEGOREQ_PROCESS_WK = 3, - P2P_PRE_TX_INVITEREQ_PROCESS_WK = 4, - P2P_AP_P2P_CH_SWITCH_PROCESS_WK =5, - P2P_RO_CH_WK = 6, -}; - -enum P2P_PS -{ - P2P_PS_DISABLE=0, - P2P_PS_ENABLE=1, - P2P_PS_SCAN=2, - P2P_PS_SCAN_DONE=3, - P2P_PS_ALLSTASLEEP=4, // for owner -}; - -// =====================WFD Section===================== -// For Wi-Fi Display -#define WFD_ATTR_DEVICE_INFO 0x00 -#define WFD_ATTR_ASSOC_BSSID 0x01 -#define WFD_ATTR_COUPLED_SINK_INFO 0x06 -#define WFD_ATTR_LOCAL_IP_ADDR 0x08 -#define WFD_ATTR_SESSION_INFO 0x09 -#define WFD_ATTR_ALTER_MAC 0x0a - -// For WFD Device Information Attribute -#define WFD_DEVINFO_SOURCE 0x0000 -#define WFD_DEVINFO_PSINK 0x0001 -#define WFD_DEVINFO_SSINK 0x0002 - -#define WFD_DEVINFO_SESSION_AVAIL 0x0010 -#define WFD_DEVINFO_WSD 0x0040 -#define WFD_DEVINFO_PC_TDLS 0x0080 - - -#ifdef CONFIG_TX_MCAST2UNI -#define IP_MCAST_MAC(mac) ((mac[0]==0x01)&&(mac[1]==0x00)&&(mac[2]==0x5e)) -#define ICMPV6_MCAST_MAC(mac) ((mac[0]==0x33)&&(mac[1]==0x33)&&(mac[2]!=0xff)) -#endif // CONFIG_TX_MCAST2UNI - - - -#ifdef CONFIG_WAPI_SUPPORT -#ifndef IW_AUTH_WAPI_VERSION_1 -#define IW_AUTH_WAPI_VERSION_1 0x00000008 -#endif -#ifndef IW_AUTH_KEY_MGMT_WAPI_PSK -#define IW_AUTH_KEY_MGMT_WAPI_PSK 0x04 -#endif -#ifndef IW_AUTH_WAPI_ENABLED -#define IW_AUTH_WAPI_ENABLED 0x20 -#endif -#ifndef IW_ENCODE_ALG_SM4 -#define IW_ENCODE_ALG_SM4 0x20 -#endif -#endif - -#ifndef _CUSTOM_IE_TYPE_ -#define _CUSTOM_IE_TYPE_ -typedef enum CUSTOM_IE_TYPE{ - PROBE_REQ = BIT(0), - PROBE_RSP = BIT(1), - BEACON = BIT(2), -}rtw_custom_ie_type_t; -#endif /* _CUSTOM_IE_TYPE_ */ - -#endif // _WIFI_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wifi_constants.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wifi_constants.h deleted file mode 100644 index dd67dc1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wifi_constants.h +++ /dev/null @@ -1,527 +0,0 @@ -/** - ****************************************************************************** - * @file wifi_constants.h - * @author - * @version - * @brief This file provides the data types used for wlan API. - ****************************************************************************** - * @attention - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - * - * Copyright(c) 2016, Realtek Semiconductor Corporation. All rights reserved. - ****************************************************************************** - */ - -#ifndef _WIFI_CONSTANTS_H -#define _WIFI_CONSTANTS_H - -/** @addtogroup nic NIC - * @ingroup wlan - * @brief NIC functions - * @{ - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef WLAN0_NAME - #define WLAN0_NAME "wlan0" -#endif -#ifndef WLAN1_NAME - #define WLAN1_NAME "wlan1" -#endif - -#define WEP_ENABLED 0x0001 -#define TKIP_ENABLED 0x0002 -#define AES_ENABLED 0x0004 -#define WSEC_SWFLAG 0x0008 - -#define SHARED_ENABLED 0x00008000 -#define WPA_SECURITY 0x00200000 -#define WPA2_SECURITY 0x00400000 -#define WPS_ENABLED 0x10000000 - -#define RTW_MAX_PSK_LEN (64) -#define RTW_MIN_PSK_LEN (8) - -#define MCSSET_LEN 16 - -/** - * @brief The enumeration lists the results of the function. - */ -typedef enum -{ - RTW_SUCCESS = 0, /**< Success */ - RTW_PENDING = 1, /**< Pending */ - RTW_TIMEOUT = 2, /**< Timeout */ - RTW_PARTIAL_RESULTS = 3, /**< Partial results */ - RTW_INVALID_KEY = 4, /**< Invalid key */ - RTW_DOES_NOT_EXIST = 5, /**< Does not exist */ - RTW_NOT_AUTHENTICATED = 6, /**< Not authenticated */ - RTW_NOT_KEYED = 7, /**< Not keyed */ - RTW_IOCTL_FAIL = 8, /**< IOCTL fail */ - RTW_BUFFER_UNAVAILABLE_TEMPORARY = 9, /**< Buffer unavailable temporarily */ - RTW_BUFFER_UNAVAILABLE_PERMANENT = 10, /**< Buffer unavailable permanently */ - RTW_WPS_PBC_OVERLAP = 11, /**< WPS PBC overlap */ - RTW_CONNECTION_LOST = 12, /**< Connection lost */ - - RTW_ERROR = -1, /**< Generic Error */ - RTW_BADARG = -2, /**< Bad Argument */ - RTW_BADOPTION = -3, /**< Bad option */ - RTW_NOTUP = -4, /**< Not up */ - RTW_NOTDOWN = -5, /**< Not down */ - RTW_NOTAP = -6, /**< Not AP */ - RTW_NOTSTA = -7, /**< Not STA */ - RTW_BADKEYIDX = -8, /**< BAD Key Index */ - RTW_RADIOOFF = -9, /**< Radio Off */ - RTW_NOTBANDLOCKED = -10, /**< Not band locked */ - RTW_NOCLK = -11, /**< No Clock */ - RTW_BADRATESET = -12, /**< BAD Rate valueset */ - RTW_BADBAND = -13, /**< BAD Band */ - RTW_BUFTOOSHORT = -14, /**< Buffer too short */ - RTW_BUFTOOLONG = -15, /**< Buffer too long */ - RTW_BUSY = -16, /**< Busy */ - RTW_NOTASSOCIATED = -17, /**< Not Associated */ - RTW_BADSSIDLEN = -18, /**< Bad SSID len */ - RTW_OUTOFRANGECHAN = -19, /**< Out of Range Channel */ - RTW_BADCHAN = -20, /**< Bad Channel */ - RTW_BADADDR = -21, /**< Bad Address */ - RTW_NORESOURCE = -22, /**< Not Enough Resources */ - RTW_UNSUPPORTED = -23, /**< Unsupported */ - RTW_BADLEN = -24, /**< Bad length */ - RTW_NOTREADY = -25, /**< Not Ready */ - RTW_EPERM = -26, /**< Not Permitted */ - RTW_NOMEM = -27, /**< No Memory */ - RTW_ASSOCIATED = -28, /**< Associated */ - RTW_RANGE = -29, /**< Not In Range */ - RTW_NOTFOUND = -30, /**< Not Found */ - RTW_WME_NOT_ENABLED = -31, /**< WME Not Enabled */ - RTW_TSPEC_NOTFOUND = -32, /**< TSPEC Not Found */ - RTW_ACM_NOTSUPPORTED = -33, /**< ACM Not Supported */ - RTW_NOT_WME_ASSOCIATION = -34, /**< Not WME Association */ - RTW_SDIO_ERROR = -35, /**< SDIO Bus Error */ - RTW_WLAN_DOWN = -36, /**< WLAN Not Accessible */ - RTW_BAD_VERSION = -37, /**< Incorrect version */ - RTW_TXFAIL = -38, /**< TX failure */ - RTW_RXFAIL = -39, /**< RX failure */ - RTW_NODEVICE = -40, /**< Device not present */ - RTW_UNFINISHED = -41, /**< To be finished */ - RTW_NONRESIDENT = -42, /**< access to nonresident overlay */ - RTW_DISABLED = -43 /**< Disabled in this build */ -} rtw_result_t; - -/** - * @brief The enumeration lists the possible security types to set when connection.\n - * Station mode supports OPEN, WEP, and WPA2.\n - * AP mode support OPEN and WPA2. - */ -typedef enum { - RTW_SECURITY_OPEN = 0, /**< Open security */ - RTW_SECURITY_WEP_PSK = WEP_ENABLED, /**< WEP Security with open authentication */ - RTW_SECURITY_WEP_SHARED = ( WEP_ENABLED | SHARED_ENABLED ), /**< WEP Security with shared authentication */ - RTW_SECURITY_WPA_TKIP_PSK = ( WPA_SECURITY | TKIP_ENABLED ), /**< WPA Security with TKIP */ - RTW_SECURITY_WPA_AES_PSK = ( WPA_SECURITY | AES_ENABLED ), /**< WPA Security with AES */ - RTW_SECURITY_WPA2_AES_PSK = ( WPA2_SECURITY | AES_ENABLED ), /**< WPA2 Security with AES */ - RTW_SECURITY_WPA2_TKIP_PSK = ( WPA2_SECURITY | TKIP_ENABLED ), /**< WPA2 Security with TKIP */ - RTW_SECURITY_WPA2_MIXED_PSK = ( WPA2_SECURITY | AES_ENABLED | TKIP_ENABLED ), /**< WPA2 Security with AES & TKIP */ - RTW_SECURITY_WPA_WPA2_MIXED = ( WPA_SECURITY | WPA2_SECURITY ), /**< WPA/WPA2 Security */ - - RTW_SECURITY_WPS_OPEN = WPS_ENABLED, /**< WPS with open security */ - RTW_SECURITY_WPS_SECURE = (WPS_ENABLED | AES_ENABLED), /**< WPS with AES security */ - - RTW_SECURITY_UNKNOWN = -1, /**< May be returned by scan function if security is unknown. Do not pass this to the join function! */ - - RTW_SECURITY_FORCE_32_BIT = 0x7fffffff /**< Exists only to force rtw_security_t type to 32 bits */ -} rtw_security_t; - -typedef enum { - RTW_ENCRYPTION_UNKNOWN = 0, - RTW_ENCRYPTION_OPEN = 1, - RTW_ENCRYPTION_WEP40 = 2, - RTW_ENCRYPTION_WPA_TKIP = 3, - RTW_ENCRYPTION_WPA_AES = 4, - RTW_ENCRYPTION_WPA2_TKIP = 5, - RTW_ENCRYPTION_WPA2_AES = 6, - RTW_ENCRYPTION_WPA2_MIXED = 7, - RTW_ENCRYPTION_WEP104 = 9, - RTW_ENCRYPTION_UNDEF = 0xFF, -} rtw_encryption_t; - -typedef enum { - RTW_FALSE = 0, - RTW_TRUE = 1 -} rtw_bool_t; - -/** - * @brief The enumeration lists the band types. - */ -typedef enum { - RTW_802_11_BAND_5GHZ = 0, /**< Denotes 5GHz radio band */ - RTW_802_11_BAND_2_4GHZ = 1 /**< Denotes 2.4GHz radio band */ -} rtw_802_11_band_t; - -/** - * @brief The enumeration lists all the country codes able to set to Wi-Fi driver. - */ -typedef enum { - /* CHANNEL PLAN */ - RTW_COUNTRY_WORLD1, // 0x20 - RTW_COUNTRY_ETSI1, // 0x21 - RTW_COUNTRY_FCC1, // 0x22 - RTW_COUNTRY_MKK1, // 0x23 - RTW_COUNTRY_ETSI2, // 0x24 - RTW_COUNTRY_FCC2, // 0x2A - RTW_COUNTRY_WORLD2, // 0x47 - RTW_COUNTRY_MKK2, // 0x58 - RTW_COUNTRY_GLOBAL, // 0x41 - - /* SPECIAL */ - RTW_COUNTRY_WORLD, // WORLD1 - RTW_COUNTRY_EU, // ETSI1 - - /* JAPANESE */ - RTW_COUNTRY_JP, // MKK1 - - /* FCC , 19 countries*/ - RTW_COUNTRY_AS, // FCC2 - RTW_COUNTRY_BM, - RTW_COUNTRY_CA, - RTW_COUNTRY_DM, - RTW_COUNTRY_DO, - RTW_COUNTRY_FM, - RTW_COUNTRY_GD, - RTW_COUNTRY_GT, - RTW_COUNTRY_GU, - RTW_COUNTRY_HT, - RTW_COUNTRY_MH, - RTW_COUNTRY_MP, - RTW_COUNTRY_NI, - RTW_COUNTRY_PA, - RTW_COUNTRY_PR, - RTW_COUNTRY_PW, - RTW_COUNTRY_TW, - RTW_COUNTRY_US, - RTW_COUNTRY_VI, - - /* others, ETSI */ - RTW_COUNTRY_AD, // ETSI1 - RTW_COUNTRY_AE, - RTW_COUNTRY_AF, - RTW_COUNTRY_AI, - RTW_COUNTRY_AL, - RTW_COUNTRY_AM, - RTW_COUNTRY_AN, - RTW_COUNTRY_AR, - RTW_COUNTRY_AT, - RTW_COUNTRY_AU, - RTW_COUNTRY_AW, - RTW_COUNTRY_AZ, - RTW_COUNTRY_BA, - RTW_COUNTRY_BB, - RTW_COUNTRY_BD, - RTW_COUNTRY_BE, - RTW_COUNTRY_BF, - RTW_COUNTRY_BG, - RTW_COUNTRY_BH, - RTW_COUNTRY_BL, - RTW_COUNTRY_BN, - RTW_COUNTRY_BO, - RTW_COUNTRY_BR, - RTW_COUNTRY_BS, - RTW_COUNTRY_BT, - RTW_COUNTRY_BY, - RTW_COUNTRY_BZ, - RTW_COUNTRY_CF, - RTW_COUNTRY_CH, - RTW_COUNTRY_CI, - RTW_COUNTRY_CL, - RTW_COUNTRY_CN, - RTW_COUNTRY_CO, - RTW_COUNTRY_CR, - RTW_COUNTRY_CX, - RTW_COUNTRY_CY, - RTW_COUNTRY_CZ, - RTW_COUNTRY_DE, - RTW_COUNTRY_DK, - RTW_COUNTRY_DZ, - RTW_COUNTRY_EC, - RTW_COUNTRY_EE, - RTW_COUNTRY_EG, - RTW_COUNTRY_ES, - RTW_COUNTRY_ET, - RTW_COUNTRY_FI, - RTW_COUNTRY_FR, - RTW_COUNTRY_GB, - RTW_COUNTRY_GE, - RTW_COUNTRY_GF, - RTW_COUNTRY_GH, - RTW_COUNTRY_GL, - RTW_COUNTRY_GP, - RTW_COUNTRY_GR, - RTW_COUNTRY_GY, - RTW_COUNTRY_HK, - RTW_COUNTRY_HN, - RTW_COUNTRY_HR, - RTW_COUNTRY_HU, - RTW_COUNTRY_ID, - RTW_COUNTRY_IE, - RTW_COUNTRY_IL, - RTW_COUNTRY_IN, - RTW_COUNTRY_IQ, - RTW_COUNTRY_IR, - RTW_COUNTRY_IS, - RTW_COUNTRY_IT, - RTW_COUNTRY_JM, - RTW_COUNTRY_JO, - RTW_COUNTRY_KE, - RTW_COUNTRY_KH, - RTW_COUNTRY_KN, - RTW_COUNTRY_KP, - RTW_COUNTRY_KR, - RTW_COUNTRY_KW, - RTW_COUNTRY_KY, - RTW_COUNTRY_KZ, - RTW_COUNTRY_LA, - RTW_COUNTRY_LB, - RTW_COUNTRY_LC, - RTW_COUNTRY_LI, - RTW_COUNTRY_LK, - RTW_COUNTRY_LR, - RTW_COUNTRY_LS, - RTW_COUNTRY_LT, - RTW_COUNTRY_LU, - RTW_COUNTRY_LV, - RTW_COUNTRY_MA, - RTW_COUNTRY_MC, - RTW_COUNTRY_MD, - RTW_COUNTRY_ME, - RTW_COUNTRY_MF, - RTW_COUNTRY_MK, - RTW_COUNTRY_MN, - RTW_COUNTRY_MO, - RTW_COUNTRY_MQ, - RTW_COUNTRY_MR, - RTW_COUNTRY_MT, - RTW_COUNTRY_MU, - RTW_COUNTRY_MV, - RTW_COUNTRY_MW, - RTW_COUNTRY_MX, - RTW_COUNTRY_MY, - RTW_COUNTRY_NG, - RTW_COUNTRY_NL, - RTW_COUNTRY_NO, - RTW_COUNTRY_NP, - RTW_COUNTRY_NZ, - RTW_COUNTRY_OM, - RTW_COUNTRY_PE, - RTW_COUNTRY_PF, - RTW_COUNTRY_PG, - RTW_COUNTRY_PH, - RTW_COUNTRY_PK, - RTW_COUNTRY_PL, - RTW_COUNTRY_PM, - RTW_COUNTRY_PT, - RTW_COUNTRY_PY, - RTW_COUNTRY_QA, - RTW_COUNTRY_RS, - RTW_COUNTRY_RU, - RTW_COUNTRY_RW, - RTW_COUNTRY_SA, - RTW_COUNTRY_SE, - RTW_COUNTRY_SG, - RTW_COUNTRY_SI, - RTW_COUNTRY_SK, - RTW_COUNTRY_SN, - RTW_COUNTRY_SR, - RTW_COUNTRY_SV, - RTW_COUNTRY_SY, - RTW_COUNTRY_TC, - RTW_COUNTRY_TD, - RTW_COUNTRY_TG, - RTW_COUNTRY_TH, - RTW_COUNTRY_TN, - RTW_COUNTRY_TR, - RTW_COUNTRY_TT, - RTW_COUNTRY_TZ, - RTW_COUNTRY_UA, - RTW_COUNTRY_UG, - RTW_COUNTRY_UY, - RTW_COUNTRY_UZ, - RTW_COUNTRY_VC, - RTW_COUNTRY_VE, - RTW_COUNTRY_VN, - RTW_COUNTRY_VU, - RTW_COUNTRY_WF, - RTW_COUNTRY_WS, - RTW_COUNTRY_YE, - RTW_COUNTRY_YT, - RTW_COUNTRY_ZA, - RTW_COUNTRY_ZW, - - RTW_COUNTRY_MAX - -}rtw_country_code_t; - -/** - * @brief The enumeration lists the adaptivity types. - */ -typedef enum { - RTW_ADAPTIVITY_DISABLE = 0, - RTW_ADAPTIVITY_NORMAL, // CE - RTW_ADAPTIVITY_CARRIER_SENSE // MKK -} rtw_adaptivity_mode_t; - -/** - * @brief The enumeration lists the supported operation mode by WIFI driver, - * including station and AP mode. - */ -typedef enum { - RTW_MODE_NONE = 0, - RTW_MODE_STA, - RTW_MODE_AP, - RTW_MODE_STA_AP, - RTW_MODE_PROMISC, - RTW_MODE_P2P -}rtw_mode_t; - -typedef enum { - RTW_SCAN_FULL = 0, - RTW_SCAN_SOCIAL, - RTW_SCAN_ONE -}rtw_scan_mode_t; - -/** - * @brief The enumeration lists the status to describe the connection link. - */ -typedef enum { - RTW_LINK_DISCONNECTED = 0, - RTW_LINK_CONNECTED -} rtw_link_status_t; - -/** - * @brief The enumeration lists the scan types. - */ -typedef enum { - RTW_SCAN_TYPE_ACTIVE = 0x00, /**< Actively scan a network by sending 802.11 probe(s) */ - RTW_SCAN_TYPE_PASSIVE = 0x01, /**< Passively scan a network by listening for beacons from APs */ - RTW_SCAN_TYPE_PROHIBITED_CHANNELS = 0x04 /**< Passively scan on channels not enabled by the country code */ -} rtw_scan_type_t; - -/** - * @brief The enumeration lists the bss types. - */ -typedef enum { - RTW_BSS_TYPE_INFRASTRUCTURE = 0, /**< Denotes infrastructure network */ - RTW_BSS_TYPE_ADHOC = 1, /**< Denotes an 802.11 ad-hoc IBSS network */ - RTW_BSS_TYPE_ANY = 2, /**< Denotes either infrastructure or ad-hoc network */ - - RTW_BSS_TYPE_UNKNOWN = -1 /**< May be returned by scan function if BSS type is unknown. Do not pass this to the Join function */ -} rtw_bss_type_t; - -typedef enum { - RTW_SCAN_COMMAMD = 0x01 -} rtw_scan_command_t; - -typedef enum{ - COMMAND1 = 0x01 -}rtw_command_type; - -typedef enum { - RTW_WPS_TYPE_DEFAULT = 0x0000, - RTW_WPS_TYPE_USER_SPECIFIED = 0x0001, - RTW_WPS_TYPE_MACHINE_SPECIFIED = 0x0002, - RTW_WPS_TYPE_REKEY = 0x0003, - RTW_WPS_TYPE_PUSHBUTTON = 0x0004, - RTW_WPS_TYPE_REGISTRAR_SPECIFIED = 0x0005, - RTW_WPS_TYPE_NONE = 0x0006, - RTW_WPS_TYPE_WSC = 0x0007 -} rtw_wps_type_t; - -/** - * @brief The enumeration lists all the network bgn mode. - */ -typedef enum { - RTW_NETWORK_B = 1, - RTW_NETWORK_BG = 3, - RTW_NETWORK_BGN = 11 -} rtw_network_mode_t; - -/** - * @brief The enumeration lists the interfaces. - */ -typedef enum { - RTW_STA_INTERFACE = 0, /**< STA or Client Interface */ - RTW_AP_INTERFACE = 1, /**< SoftAP Interface */ -} rtw_interface_t; - -/** - * @brief The enumeration lists the packet filter rules. - */ -typedef enum { - RTW_POSITIVE_MATCHING = 0, /**< Receive the data matching with this pattern and discard the other data */ - RTW_NEGATIVE_MATCHING = 1 /**< Discard the data matching with this pattern and receive the other data */ -} rtw_packet_filter_rule_t, rtw_packet_filter_rule_e; - -/** - * @brief The enumeration lists the promisc levels. - */ -typedef enum { - RTW_PROMISC_DISABLE = 0, /**< Disable the promisc */ - RTW_PROMISC_ENABLE = 1, /**< Fetch all ethernet packets */ - RTW_PROMISC_ENABLE_1 = 2, /**< Fetch only B/M packets */ - RTW_PROMISC_ENABLE_2 = 3, /**< Fetch all 802.11 packets*/ - RTW_PROMISC_ENABLE_3 = 4, /**< Fetch only B/M 802.11 packets*/ -} rtw_rcr_level_t; - -/** - * @brief The enumeration lists the disconnect reasons. - */ -typedef enum{ - RTW_NO_ERROR = 0, - RTW_NONE_NETWORK = 1, - RTW_CONNECT_FAIL = 2, - RTW_WRONG_PASSWORD = 3 , - RTW_DHCP_FAIL = 4, - RTW_UNKNOWN, -}rtw_connect_error_flag_t; - -typedef enum { - RTW_TX_PWR_PERCENTAGE_100 = 0, /* 100%, default target output power. */ - RTW_TX_PWR_PERCENTAGE_75 = 1, /* 75% */ - RTW_TX_PWR_PERCENTAGE_50 = 2, /* 50% */ - RTW_TX_PWR_PERCENTAGE_25 = 3, /* 25% */ - RTW_TX_PWR_PERCENTAGE_12_5 = 4, /* 12.5% */ -}rtw_tx_pwr_percentage_t; - -/** - * @brief The enumeration is event type indicated from wlan driver. - */ -typedef enum _WIFI_EVENT_INDICATE{ - WIFI_EVENT_CONNECT = 0, - WIFI_EVENT_DISCONNECT = 1, - WIFI_EVENT_FOURWAY_HANDSHAKE_DONE = 2, - WIFI_EVENT_SCAN_RESULT_REPORT = 3, - WIFI_EVENT_SCAN_DONE = 4, - WIFI_EVENT_RECONNECTION_FAIL = 5, - WIFI_EVENT_SEND_ACTION_DONE = 6, - WIFI_EVENT_RX_MGNT = 7, - WIFI_EVENT_STA_ASSOC = 8, - WIFI_EVENT_STA_DISASSOC = 9, - WIFI_EVENT_STA_WPS_START = 10, - WIFI_EVENT_WPS_FINISH = 11, - WIFI_EVENT_EAPOL_START = 12, - WIFI_EVENT_EAPOL_RECVD = 13, - WIFI_EVENT_NO_NETWORK = 14, - WIFI_EVENT_BEACON_AFTER_DHCP = 15, - WIFI_EVENT_MAX, -}rtw_event_indicate_t, WIFI_EVENT_INDICATE; -#ifdef __cplusplus -} -#endif - -/*\@}*/ - -#endif /* _WIFI_CONSTANTS_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wifi_lib.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wifi_lib.h deleted file mode 100644 index 60644fd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wifi_lib.h +++ /dev/null @@ -1,3495 +0,0 @@ -/* - wifi_lib.h - RTL871x pvvx - */ -#ifndef _WLAN_LIB_H -#define _WLAN_LIB_H - -#include "osdep_service.h" -#include "freertos/wrapper.h" -#include "rtl_bios_data.h" -#include "rtw_cmd.h" - -#define _atr_aligned2_ __attribute__((aligned(2))) -#define _atr_aligned4_ __attribute__((aligned(4))) -#define _atr_aligned8_ __attribute__((aligned(4))) - -#define sint8_t char -#define sint16_t short -#define sint32_t int -//#define sint64_t long long // warning align(8)! -/* - struct _ADAPTER; - struct dvobj_priv; - union recv_frame; - struct sk_buff; - struct sk_buff_head; - struct sta_info; - struct _cus_ie; - struct fifo_more_data; - struct hw_xmit; - struct tx_buf_desc; - struct recv_buf_stat; - struct _wpa_sta_info; - struct xmit_frame; - struct xmit_buf; - struct submit_ctx; - struct net_device; - struct iwreq; - struct co_data_priv; - */ -//typedef int sint32_t_t; -//typedef char sint8_t_t; -//typedef sint8_t_t int8_t; -//typedef uint32_t __uint32_t; -//typedef sint32_t_t int32_t; -//typedef __uint32_t uint32_t; -//typedef uint32_t dma_addr_t; // basic_types.h -//typedef uint8_t uint8_t; -//typedef uint16_t uint16_t; -//typedef unsigned sint64_t u8Byte; -typedef int sint; -typedef uint8_t BOOL; -typedef uint8_t bool; -typedef uint8_t BOOLEAN; - -typedef uint8_t u1Byte; -typedef uint16_t u2Byte; -typedef uint32_t u4Byte; -typedef uint64_t u8Byte; -typedef uint64_t __attribute__((aligned(4))) _u8Byte; -typedef sint8_t s1Byte; -typedef sint16_t s2Byte; -typedef sint32_t s4Byte; -typedef sint8_t *ps1Byte; -typedef uint8_t *pu1Byte; -typedef uint16_t *pu2Byte; -typedef uint32_t *pu4Byte; - -typedef uint32_t sizetype; -typedef struct _ADAPTER _adapter; -typedef void *_lock; -typedef struct list_head _list; -typedef void *PVOID; -typedef struct __queue _queue; -typedef void *_mutex; - -typedef int (*init_done_ptr)(void); - -enum _EFUSE_DEF_TYPE // : sint32_t -{ - TYPE_EFUSE_MAX_SECTION = 0x0, - TYPE_EFUSE_REAL_CONTENT_LEN = 0x1, - TYPE_AVAILABLE_EFUSE_BYTES_BANK = 0x2, - TYPE_AVAILABLE_EFUSE_BYTES_TOTAL = 0x3, - TYPE_EFUSE_MAP_LEN = 0x4, - TYPE_EFUSE_PROTECT_BYTES_BANK = 0x5, - TYPE_EFUSE_CONTENT_LEN_BANK = 0x6, -}; - -enum _IFACE_TYPE //: sint32_t -{ - IFACE_PORT0 = 0x0, IFACE_PORT1 = 0x1, MAX_IFACE_PORT = 0x2, -}; - -enum _FW_ERR0_STATUS_ //: sint32_t -{ - FES0_H2C_CMDID = 0x1, - FES0_H2C_PTR = 0x2, - FES0_BB_RW = 0x4, - FES0_TXPKT_TXPAUSE = 0x8, - FES0_TSF_STABLE = 0x10, - FES0_TXSM_STABLE = 0x20, - FES0_RPWM_STABLE = 0x40, - FES0_C2H_TIMEOUT_ERR = 0x80, -}; - -enum _TRPC_ //: sint32_t -{ - TPRC_ISSUENULLDATA_1 = 0x26, - TPRC_ISSUENULLDATA_2 = 0x27, - TPRC_PSS2TS3 = 0x2B, - TPRC_PSS0TS1 = 0x2C, - TPRC_PSS2TS4 = 0x2D, - TPRC_PSS2TS5 = 0x2E, - TPRC_PSS0TS6 = 0x2F, -}; - -enum _PS_MODE_SETTING_SELECTION_ // : sint32_t -{ - MODE_SETTING_ACTIVE = 0x0, - MODE_SETTING_LEGACY = 0x1, - MODE_SETTING_WMMPS = 0x2, - MODE_SETTING_TDMA = 0x3, -}; - -enum _RxListenBeaconMode_ // : sint32_t -{ - RLBM_MIN = 0x0, RLBM_MAX = 0x1, RLBM_SELF_DEFINED = 0x2, -}; - -enum _SMART_PS_MODE_FOR_LEGACY_ // : sint32_t -{ - SMART_PS_MODE_LEGACY_PWR1 = 0x0, - SMART_PS_MODE_TX_PWR0 = 0x1, - SMART_PS_MODE_TRX_PWR0 = 0x2, -}; - -enum $BFA04BDFA6C0C275C890D1E658AFCEEF // : sint32_t -{ - ROM_E_RTW_MSGP_PWR_INDEX_1 = 0x0, - ROM_E_RTW_MSGP_PWR_INDEX_2 = 0x1, - ROM_E_RTW_MSGP_RX_INFO_1 = 0x2, - ROM_E_RTW_MSGP_RX_INFO_2 = 0x3, - ROM_E_RTW_MSGP_RX_INFO_3 = 0x4, - ROM_E_RTW_MSGP_RX_INFO_4 = 0x5, - ROM_E_RTW_MSGP_TX_RATE_1 = 0x6, - ROM_E_RTW_MSGP_TX_RATE_2 = 0x7, - ROM_E_RTW_MSGP_DM_RA_1 = 0x8, - ROM_E_RTW_MSGP_DM_RA_2 = 0x9, - ROM_E_RTW_MSGP_DM_RA_3 = 0xA, - ROM_E_RTW_MSGP_DM_RA_4 = 0xB, - ROM_E_RTW_MSGP_DM_DIG_1 = 0xC, - ROM_E_RTW_MSGP_PWR_TRACKING_1 = 0xD, - ROM_E_RTW_MSGP_PWR_TRACKING_2 = 0xE, - ROM_E_RTW_MSGP_PWR_TRACKING_3 = 0xF, - ROM_E_RTW_MSGP_PWR_TRACKING_4 = 0x10, - ROM_E_RTW_MSGP_PWR_TRACKING_5 = 0x11, - ROM_E_RTW_MSGP_PWR_TRACKING_6 = 0x12, - ROM_E_RTW_MSGP_PWR_TRACKING_7 = 0x13, - ROM_E_RTW_MSGP_RF_IQK_1 = 0x14, - ROM_E_RTW_MSGP_RF_IQK_2 = 0x15, - ROM_E_RTW_MSGP_RF_IQK_3 = 0x16, - ROM_E_RTW_MSGP_RF_IQK_4 = 0x17, - ROM_E_RTW_MSGP_RF_IQK_5 = 0x18, - ROM_E_RTW_MSGP_DM_ADAPTIVITY_1 = 0x19, - ROM_E_RTW_MSGP_DM_ADAPTIVITY_2 = 0x1A, - ROM_E_RTW_MSGP_DM_ADAPTIVITY_3 = 0x1B, - ROM_E_RTW_MSGP_DM_ANT_DIV_1 = 0x1C, - ROM_E_RTW_MSGP_DM_ANT_DIV_2 = 0x1D, - ROM_E_RTW_MSGP_DM_ANT_DIV_3 = 0x1E, - ROM_E_RTW_MSGP_DM_ANT_DIV_4 = 0x1F, - ROM_E_RTW_MSGP_DM_ANT_DIV_5 = 0x20, - ROM_E_RTW_MSGP_MAC_REG_DUMP_1 = 0x21, - ROM_E_RTW_MSGP_BB_REG_DUMP_1 = 0x22, - ROM_E_RTW_MSGP_RF_REG_DUMP_1 = 0x23, - ROM_E_RTW_MSGP_RF_REG_DUMP_2 = 0x24, - ROM_E_RTW_MSGP_REG_DUMP_1 = 0x25, - ROM_E_RTW_MSGP_REG_DUMP_2 = 0x26, - ROM_E_RTW_MSGP_REG_DUMP_3 = 0x27, - ROM_E_RTW_MSGP_READ_REG_1 = 0x28, - ROM_E_RTW_MSGP_READ_REG_2 = 0x29, - ROM_E_RTW_MSGP_READ_REG_3 = 0x2A, - ROM_E_RTW_MSGP_WRITE_REG_1 = 0x2B, - ROM_E_RTW_MSGP_WRITE_REG_2 = 0x2C, - ROM_E_RTW_MSGP_WRITE_REG_3 = 0x2D, - ROM_E_RTW_MSGP_READ_BB_1 = 0x2E, - ROM_E_RTW_MSGP_WRITE_BB_1 = 0x2F, - ROM_E_RTW_MSGP_READ_RF_1 = 0x30, - ROM_E_RTW_MSGP_WRITE_RF_1 = 0x31, - ROM_E_RTW_MSGP_READ_SYS_1 = 0x32, - ROM_E_RTW_MSGP_WRITE_SYS_1 = 0x33, - ROM_E_RTW_MSGP_FIX_CHANNEL_1 = 0x34, - ROM_E_RTW_MSGP_FIX_CHANNEL_2 = 0x35, - ROM_E_RTW_MSGP_PWR_SAVE_MODE_1 = 0x36, - ROM_E_RTW_MSGP_FIX_RATE_1 = 0x37, - ROM_E_RTW_MSGP_GET_ODM_DBG_FLAG_1 = 0x38, - ROM_E_RTW_MSGP_SET_ODM_DBG_FLAG_1 = 0x39, - ROM_E_RTW_MSGP_DUMP_PWR_IDX_1 = 0x3A, - ROM_E_RTW_MSGP_DUMP_INFO_1 = 0x3B, - ROM_E_RTW_MSGP_DUMP_INFO_2 = 0x3C, - ROM_E_RTW_MSGP_DUMP_INFO_3 = 0x3D, - ROM_E_RTW_MSGP_DUMP_INFO_4 = 0x3E, - ROM_E_RTW_MSGP_DUMP_INFO_5 = 0x3F, - ROM_E_RTW_MSGP_DUMP_INFO_6 = 0x40, - ROM_E_RTW_MSGP_DUMP_INFO_7 = 0x41, - ROM_E_RTW_MSGP_DUMP_INFO_8 = 0x42, - ROM_E_RTW_MSGP_DUMP_INFO_9 = 0x43, - ROM_E_RTW_MSGP_DM_FUNC_FLAG_1 = 0x44, - ROM_E_RTW_MSGP_DM_FUNC_FLAG_2 = 0x45, - ROM_E_RTW_MSGP_DM_FUNC_FLAG_3 = 0x46, - ROM_E_RTW_MSGP_DM_FUNC_FLAG_4 = 0x47, - ROM_E_RTW_MSGP_DM_FUNC_FLAG_5 = 0x48, - ROM_E_RTW_MSGP_DM_FUNC_FLAG_6 = 0x49, - ROM_E_RTW_MSGP_DM_FUNC_FLAG_7 = 0x4A, - ROM_E_RTW_MSGP_DM_FUNC_FLAG_8 = 0x4B, - ROM_E_RTW_MSGP_DM_FUNC_FLAG_9 = 0x4C, - ROM_E_RTW_MSGP_RX_MPDU_1 = 0x4D, - ROM_E_RTW_MSGP_AP_TIMEOUT_CHK_1 = 0x4E, - ROM_E_RTW_MSGP_INIT_DRV_SW_1 = 0x4F, - ROM_E_RTW_MSGP_SET_BSSID_1 = 0x50, - ROM_E_RTW_MSGP_SET_SSID_1 = 0x51, - ROM_E_RTW_MSGP_ON_BEACON_1 = 0x52, - ROM_E_RTW_MSGP_ON_AUTH_1 = 0x53, - ROM_E_RTW_MSGP_ON_AUTH_2 = 0x54, - ROM_E_RTW_MSGP_ON_AUTH_CLIENT_1 = 0x55, - ROM_E_RTW_MSGP_ON_ASSOC_REQ_1 = 0x56, - ROM_E_RTW_MSGP_ON_ASSOC_RSP_1 = 0x57, - ROM_E_RTW_MSGP_ON_DE_AUTH_1 = 0x58, - ROM_E_RTW_MSGP_ON_DE_AUTH_2 = 0x59, - ROM_E_RTW_MSGP_ON_DISASSOC_1 = 0x5A, - ROM_E_RTW_MSGP_ON_DISASSOC_2 = 0x5B, - ROM_E_RTW_MSGP_ISSUE_BEACON_1 = 0x5C, - ROM_E_RTW_MSGP_ISSUE_PROBERSP_1 = 0x5D, - ROM_E_RTW_MSGP_ISSUE_PROBEREQ_1 = 0x5E, - ROM_E_RTW_MSGP_ISSUE_AUTH_1 = 0x5F, - ROM_E_RTW_MSGP_ISSUE_ASSOCRSP_1 = 0x60, - ROM_E_RTW_MSGP_ISSUE_ASSOCREQ_1 = 0x61, - ROM_E_RTW_MSGP_ISSUE_NULLDATA_1 = 0x62, - ROM_E_RTW_MSGP_ISSUE_QOS_NULLDATA_1 = 0x63, - ROM_E_RTW_MSGP_ISSUE_DEAUTH_1 = 0x64, - ROM_E_RTW_MSGP_ISSUE_ACTION_BA_1 = 0x65, - ROM_E_RTW_MSGP_ISSUE_BSS_COEXIST_1 = 0x66, - ROM_E_RTW_MSGP_START_CLNT_AUTH_1 = 0x67, - ROM_E_RTW_MSGP_LINKED_STATUS_CHK_1 = 0x68, - ROM_E_RTW_MSGP_SETKEY_HDL_1 = 0x69, - ROM_E_RTW_MSGP_SET_STAKEY_HDL_1 = 0x6A, - ROM_E_RTW_MSGP_SET_STAKEY_HDL_2 = 0x6B, - ROM_E_RTW_MSGP_P2P_BUILD_MGNT_FRAME_1 = 0x6C, - ROM_E_RTW_MSGP_SEND_EAPOL_1 = 0x6D, - ROM_E_RTW_MSGP_SEND_EAPOL_2 = 0x6E, - ROM_E_RTW_MSGP_SEND_EAPOL_3 = 0x6F, - ROM_E_RTW_MSGP_EAPOL_KEY_RECVD_1 = 0x70, - ROM_E_RTW_MSGP_EAPOL_KEY_RECVD_2 = 0x71, - ROM_E_RTW_MSGP_EAPOL_KEY_RECVD_3 = 0x72, - ROM_E_RTW_MSGP_FREE_RECVFRAME_1 = 0x73, - ROM_E_RTW_MSGP_VAR_PORT_SWITCH_1 = 0x74, - ROM_E_RTW_MSGP_VAR_PORT_SWITCH_2 = 0x75, - ROM_E_RTW_MSGP_DOWN_SEMA_1 = 0x76, - ROM_E_RTW_MSGP_MAX = 0x77 -}; - -struct _atr_aligned4_ _PS_PARM_ { - uint8_t Enter32KHzPermission; - uint8_t bAllQueueUAPSD; - uint8_t ps_dtim_flag; - uint8_t pstrx_rxcnt_period; - uint8_t NoConnect32k; - uint8_t ack_last_rpwm; - uint8_t TxNull0; - uint8_t TxNull1; - uint8_t TxNull0ok; - uint8_t TxNull1ok; - uint8_t RfOffLicenseForBCNRx; - uint8_t BCNAggEn; - uint8_t IsGoingTo32K; - uint8_t bMaxTrackingBcnMode; - uint8_t BcnTraceDone; - uint8_t smart_ps :4; - uint8_t RLBM :4; - uint8_t AwakeInterval; - uint8_t ps_mode; - uint8_t ClkRequestEnable; - uint8_t last_rpwm; - uint8_t current_ps_state; - uint8_t ps_data_open; - uint8_t ps_bcn_pass_time; - uint8_t ps_dtim_period; - uint8_t ps_dtim_cnt; - uint8_t ps_bcn_to; - uint8_t bcn_to_cnt; - uint8_t bcn_to_times_cnt; - uint8_t min_rate_in_rrsr; - uint16_t ps_drv_early_itv; - uint32_t null1_ok_cnt; - uint8_t SlotPeriod; - uint8_t FirstOnPeriod; - uint8_t SecondOnPeriod; - uint8_t ThirdOnPeriod; - uint8_t CurrentSlot; - BOOLEAN TDMAOnPeriod; -}; -typedef struct _PS_PARM_ PS_PARM; -typedef struct _PS_PARM_ *PPS_PARM; - -struct _LEGACY_PS_PPARM_ { - uint8_t ps_mode :7; - uint8_t ClkRequestEnable :1; - uint8_t RLBM :4; - uint8_t smart_ps :4; - uint8_t AwakeInterval; - uint8_t bAllQueueUAPSD :1; - uint8_t bMaxTrackingBcnMode :1; - uint8_t rsvd :6; - uint8_t PwrState; - uint8_t LowPwrRxBCN :1; - uint8_t AntAutoSwitch :1; - uint8_t PSAllowBTHighPri :1; - uint8_t ProtectBCN :1; - uint8_t SilencePeriod :1; - uint8_t FastBTConnect :1; - uint8_t TwoAntennaEn :1; - uint8_t rsvd2 :1; - uint8_t AdoptUserSetting :1; - uint8_t DrvBcnEarlyShift :3; - uint8_t DrvBcnTimeOut :4; - uint8_t SlotPeriod; - uint8_t FirstOnPeriod; - uint8_t SecondOnPeriod; - uint8_t ThirdOnPeriod; -}; -typedef struct _LEGACY_PS_PPARM_ LEGACY_PS_PARM; -typedef struct _LEGACY_PS_PPARM_ *PLEGACY_PS_PARM; - -struct _H2CParam_SetPwrMode_parm_ { - LEGACY_PS_PARM PwrModeParm; -}; -typedef struct _H2CParam_SetPwrMode_parm_ *PH2CParam_PwrMode; - -struct atomic_t { - volatile int counter; -}; - -/* - // dlist.h - struct list_head - { - _list *next; - _list *prev; - }; - - // freertos_service.h - struct __queue - { - _list queue; - _lock lock; - }; - */ - -struct iw_request_info { - uint16_t cmd; - uint16_t flags; -}; - -typedef int (*iw_handler)(struct net_device *, struct iw_request_info *, - union iwreq_data *, char *); - -struct _NDIS_802_11_SSID { - uint32_t SsidLength; //+164 - uint8_t Ssid[36]; -}; -typedef struct _NDIS_802_11_SSID NDIS_802_11_SSID; -typedef uint8_t NDIS_802_11_MAC_ADDRESS[6]; -typedef int NDIS_802_11_RSSI; - -enum _NDIS_802_11_NETWORK_TYPE //sint32_t -{ - Ndis802_11FH = 0x0, - Ndis802_11DS = 0x1, - Ndis802_11OFDM5 = 0x2, - Ndis802_11OFDM24 = 0x3, - Ndis802_11NetworkTypeMax = 0x4, -}; -typedef enum _NDIS_802_11_NETWORK_TYPE NDIS_802_11_NETWORK_TYPE; - -struct _NDIS_802_11_CONFIGURATION_FH { - uint32_t Length; - uint32_t HopPattern; - uint32_t HopSet; - uint32_t DwellTime; -}; -typedef struct _NDIS_802_11_CONFIGURATION_FH NDIS_802_11_CONFIGURATION_FH; - -struct _NDIS_802_11_CONFIGURATION { - uint32_t Length; - uint32_t BeaconPeriod; - uint32_t ATIMWindow; - uint32_t DSConfig; - NDIS_802_11_CONFIGURATION_FH FHConfig; -}; -typedef struct _NDIS_802_11_CONFIGURATION NDIS_802_11_CONFIGURATION; - -enum _NDIS_802_11_NETWORK_INFRASTRUCTURE // : sint32_t -{ - Ndis802_11IBSS = 0x0, - Ndis802_11Infrastructure = 0x1, - Ndis802_11AutoUnknown = 0x2, - Ndis802_11InfrastructureMax = 0x3, - Ndis802_11APMode = 0x4, -}; -typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE NDIS_802_11_NETWORK_INFRASTRUCTURE; - -typedef uint8_t NDIS_802_11_RATES_EX[16]; - -struct _WLAN_PHY_INFO { - uint8_t SignalStrength; - uint8_t SignalQuality; - uint8_t Optimum_antenna; - uint8_t Reserved_0; -}; -typedef struct _WLAN_PHY_INFO WLAN_PHY_INFO; - -struct _WLAN_BSSID_EX { - uint32_t Length; - NDIS_802_11_MAC_ADDRESS MacAddress; - uint8_t Reserved[2]; - NDIS_802_11_SSID Ssid; // +164 - uint32_t Privacy; - NDIS_802_11_RSSI Rssi; - NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; - NDIS_802_11_CONFIGURATION Configuration; - NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; - NDIS_802_11_RATES_EX SupportedRates; - WLAN_PHY_INFO PhyInfo; - uint32_t IELength; - uint8_t IEs[768]; -}; -typedef struct _WLAN_BSSID_EX WLAN_BSSID_EX; - -struct _atr_aligned2_ _WLAN_BCN_INFO { // __attribute__((packed))!? - uint8_t encryp_protocol; - int group_cipher; - int pairwise_cipher; - int is_8021x; - uint16_t ht_cap_info; - uint8_t ht_info_infos_0; -}; -typedef struct _WLAN_BCN_INFO WLAN_BCN_INFO; - -struct wlan_network { - _list list; - int network_type; - int fixed; - uint32_t last_scanned; - int aid; - int join_res; - WLAN_BSSID_EX network; - WLAN_BCN_INFO BcnInfo; -}; - -/* osdep_service.h - typedef void *_timerHandle; - - struct timer_list - { - _timerHandle timer_hdl; - uint32_t data; - void (*function)(void *); - }; - - typedef struct timer_list _timer; - */ - -struct qos_priv { - uint32_t qos_option; -}; - -struct __attribute__((packed)) _atr_aligned2_ rtw_ieee80211_ht_cap { - uint16_t cap_info; - uint8_t ampdu_params_info; - uint8_t supp_mcs_set[16]; - uint16_t extended_ht_cap_info; - uint32_t tx_BF_cap_info; - uint8_t antenna_selection_info; -}; - -struct ht_priv { - uint32_t ht_option; - uint32_t ampdu_enable; - uint8_t bwmode; - uint8_t ch_offset; - uint8_t sgi; - uint8_t agg_enable_bitmap; - uint8_t candidate_tid_bitmap; - uint8_t stbc_cap; - struct rtw_ieee80211_ht_cap ht_cap; -}; - -struct _atr_aligned4_ _RT_LINK_DETECT_T { - uint32_t NumTxOkInPeriod; - uint32_t NumRxOkInPeriod; - uint32_t NumRxUnicastOkInPeriod; - BOOLEAN bBusyTraffic; - BOOLEAN bTxBusyTraffic; - BOOLEAN bRxBusyTraffic; - BOOLEAN bHigherBusyTraffic; - BOOLEAN bHigherBusyRxTraffic; - BOOLEAN bHigherBusyTxTraffic; -}; -typedef struct _RT_LINK_DETECT_T RT_LINK_DETECT_T; - -enum _RT_SCAN_TYPE //: sint32_t -{ - SCAN_PASSIVE = 0x0, SCAN_ACTIVE = 0x1, SCAN_MIX = 0x2 -}; -typedef enum _RT_SCAN_TYPE RT_SCAN_TYPE; - -struct mlme_priv { - _lock lock; //+12 - sint fw_state; //+16 - uint8_t bScanInProcess; //+20 - uint8_t to_join; //+21 - uint8_t *nic_hdl; //+24 - _list *pscanned; //+28 - _queue free_bss_pool; //+32 - _queue scanned_queue; //+44 - uint8_t *free_bss_buf; //+56 - uint16_t num_of_scanned; //+60 - uint8_t *scan_buf; //+64 - uint32_t scan_buf_len; //+68 - uint16_t scan_cnt; //+72 - uint16_t scan_type; //+74 - NDIS_802_11_SSID assoc_ssid; //+76 - uint8_t assoc_bssid[6]; - struct wlan_network cur_network; - uint32_t scan_interval; - _timer assoc_timer; - uint8_t assoc_by_bssid; - uint8_t assoc_by_rssi; - _timer scan_to_timer; - uint32_t scan_start_time; - struct qos_priv qospriv; - uint16_t num_sta_no_ht; - uint16_t num_FortyMHzIntolerant; - struct ht_priv htpriv; - RT_LINK_DETECT_T LinkDetectInfo; - _timer dynamic_chk_timer; - uint8_t key_mask; - uint8_t acm_mask; - uint8_t ChannelPlan; - uint8_t scan_mode; // RT_SCAN_TYPE scan_mode; byte/dword ?? - uint8_t *wps_probe_req_ie; - uint32_t wps_probe_req_ie_len; - uint8_t *wps_assoc_req_ie; - uint32_t wps_assoc_req_ie_len; - uint16_t num_sta_non_erp; - uint16_t num_sta_no_short_slot_time; - uint16_t num_sta_no_short_preamble; - uint16_t num_sta_ht_no_gf; - uint16_t num_sta_ht_20mhz; - uint8_t olbc_ht; - uint16_t ht_op_mode; - uint8_t *wps_beacon_ie; - uint8_t *wps_probe_resp_ie; - uint8_t *wps_assoc_resp_ie; - uint32_t wps_beacon_ie_len; - uint32_t wps_probe_resp_ie_len; - uint32_t wps_assoc_resp_ie_len; - _lock bcn_update_lock; - uint8_t update_bcn; - uint8_t scanning_via_buddy_intf; - struct recv_frame *p_copy_recv_frame; -}; - -struct _atr_aligned4_ _RT_CHANNEL_INFO { - uint8_t ChannelNum; - RT_SCAN_TYPE ScanType; // uint8_t ScanType; // byte/dword? - uint8_t pscan_config; -}; -typedef struct _RT_CHANNEL_INFO RT_CHANNEL_INFO; - -struct ss_res { - int state; - int bss_cnt; - int channel_idx; - int scan_mode; - NDIS_802_11_SSID ssid[1]; -}; - -struct __attribute__((packed)) __attribute__((aligned(1))) ADDBA_request { - uint8_t dialog_token; - uint16_t BA_para_set; - uint16_t BA_timeout_value; - uint16_t BA_starting_seqctrl; -}; - -struct AC_param { - uint8_t ACI_AIFSN; - uint8_t CW; - uint16_t TXOP_limit; -}; - -struct WMM_para_element { - uint8_t QoS_info; - uint8_t reserved; - struct AC_param ac_param[4]; -}; - -struct HT_caps_element { - union { - struct _atr_aligned4_ { - uint16_t HT_caps_info; - uint8_t AMPDU_para; - uint8_t MCS_rate[16]; - uint16_t HT_ext_caps; - uint32_t Beamforming_caps; - uint8_t ASEL_caps; - } HT_cap_element; - uint8_t HT_cap[26]; - }u; -}; - -struct HT_info_element { - uint8_t primary_channel; - uint8_t infos[5]; - uint8_t MCS_rate[16]; -}; - -struct FW_Sta_Info { - struct sta_info *psta; - uint32_t status; - uint32_t rx_pkt; - uint32_t retry; - NDIS_802_11_RATES_EX SupportedRates; -}; - -struct mlme_ext_info { - uint32_t state; - uint32_t reauth_count; - uint32_t reassoc_count; - uint32_t link_count; - uint32_t auth_seq; - uint32_t auth_algo; - uint32_t authModeToggle; - uint32_t enc_algo; - uint32_t key_index; - uint32_t iv; - uint8_t chg_txt[128]; - uint16_t aid; - uint16_t bcn_interval; - uint16_t capability; - uint8_t assoc_AP_vendor; - uint8_t slotTime; - uint8_t preamble_mode; - uint8_t WMM_enable; - uint8_t ERP_enable; - uint8_t ERP_IE; - uint8_t HT_enable; - uint8_t HT_caps_enable; - uint8_t HT_info_enable; - uint8_t HT_protection; - uint8_t turboMode_cts2self; - uint8_t turboMode_rtsen; - uint8_t SM_PS; - uint8_t agg_enable_bitmap; - uint8_t ADDBA_retry_count; - uint8_t candidate_tid_bitmap; - uint8_t dialogToken; - uint8_t bwmode_updated; - uint8_t hidden_ssid_mode; - struct ADDBA_request ADDBA_req; - struct WMM_para_element WMM_param; - struct __attribute__((packed)) __attribute__((aligned(1))) HT_caps_element HT_caps; - struct HT_info_element HT_info; - struct FW_Sta_Info FW_sta_info[5]; -}; - -#ifndef _CUS_IE_ -#define _CUS_IE_ -typedef struct _cus_ie{ - uint8_t *ie; - uint8_t type; -} cus_ie, *p_cus_ie; -#endif /* _CUS_IE_ */ -// typedef struct _cus_ie *p_cus_ie; - -struct mlme_ext_priv { //__attribute__((packed))? - _adapter *padapter; //+0 padapter+1256 [912] - uint8_t mlmeext_init; - struct atomic_t event_seq; - uint16_t mgnt_seq; - uint8_t cur_channel; // padapter+1270 - uint8_t cur_bwmode; - uint8_t cur_ch_offset; - uint8_t cur_wireless_mode; - uint8_t max_chan_nums; - RT_CHANNEL_INFO channel_set[14]; - uint8_t basicrate[13]; - uint8_t datarate[13]; - struct ss_res sitesurvey_res; //padapter+1472 - struct mlme_ext_info mlmext_info; //padapter+1528 - _timer survey_timer; - _timer link_timer; - uint16_t chan_scan_time; //padapter+1984 - uint8_t scan_abort; //padapter+1986 - uint8_t tx_rate; //padapter+1987 - uint8_t retry; //padapter+1988 - _u8Byte TSFValue; //+740? padapter+1992 - uint8_t bstart_bss; - uint16_t action_public_rxseq; - _timer reconnect_timer; - uint8_t reconnect_deauth_filtered; - uint8_t reconnect_times; //+2017 - uint8_t reconnect_cnt; - uint16_t reconnect_timeout; //+ 2020 - uint8_t saved_alg; - uint8_t saved_essid[33]; - uint8_t saved_key[32]; - uint16_t saved_key_len; - uint8_t saved_key_idx; - uint8_t saved_wpa_passphrase[65]; - uint8_t saved_eap_method; - uint8_t auto_reconnect; // + 2157 ? - uint8_t partial_scan; - p_cus_ie cus_ven_ie; - uint8_t ie_num; - uint8_t bChDeauthDisabled; - uint8_t bConcurrentFlushingSTA; -}; - -struct cmd_priv { - _queue cmd_queue; - uint8_t cmdthd_running; - _adapter *padapter; -}; - -struct evt_priv { - struct atomic_t event_seq; - uint8_t *evt_buf; - uint8_t *evt_allocated_buf; - uint32_t evt_done_cnt; -}; - -struct dvobj_priv { - void *if1; - void *if2; - void *padapters[2]; - uint8_t iface_nums; - uint8_t RtOutPipe[3]; - uint8_t Queue2Pipe[8]; - uint8_t irq_alloc; - uint8_t irq_enabled; - _lock irq_th_lock; -}; - -struct fifo_more_data { - uint32_t more_data; - uint32_t len; -}; - -struct _io_ops { - int (*init_io_priv)(struct dvobj_priv *); - int (*write8_endian)(struct dvobj_priv *, uint32_t, uint32_t, uint32_t); - uint8_t (*_read8)(struct dvobj_priv *, uint32_t, int32_t *); - uint16_t (*_read16)(struct dvobj_priv *, uint32_t, int32_t *); - uint32_t (*_read32)(struct dvobj_priv *, uint32_t, int32_t *); - int32_t (*_write8)(struct dvobj_priv *, uint32_t, uint8_t, int32_t *); - int32_t (*_write16)(struct dvobj_priv *, uint32_t, uint16_t, int32_t *); - int32_t (*_write32)(struct dvobj_priv *, uint32_t, uint32_t, int32_t *); - int (*read_rx_fifo)(struct dvobj_priv *, uint32_t, uint8_t *, uint32_t, - struct fifo_more_data *); - int (*write_tx_fifo)(struct dvobj_priv *, uint32_t, uint8_t *, uint32_t); -}; - -struct io_priv { - struct _io_ops io_ops; -}; - -struct rtw_tx_ring { - struct tx_buf_desc *desc; - dma_addr_t dma; - uint32_t idx; - uint32_t entries; - _queue queue; - uint32_t qlen; -}; - -struct _atr_aligned8_ xmit_priv { - _lock lock; - _queue be_pending; - _queue bk_pending; - _queue vi_pending; - _queue vo_pending; - _queue bm_pending; - uint8_t *pallocated_frame_buf; - uint8_t *pxmit_frame_buf; - uint32_t free_xmitframe_cnt; - _queue free_xmit_queue; - _adapter *adapter; - uint8_t vcs_setting; - uint8_t vcs; - uint8_t vcs_type; - u8Byte tx_bytes; - u8Byte tx_pkts; - u8Byte tx_drop; - u8Byte last_tx_bytes; - u8Byte last_tx_pkts; - struct hw_xmit *hwxmits; - uint8_t hwxmit_entry; - struct rtw_tx_ring tx_ring[8]; - int txringcount[8]; - uint8_t beaconDMAing; - _queue free_xmitbuf_queue; - _queue pending_xmitbuf_queue; - uint8_t *pallocated_xmitbuf; - uint8_t *pxmitbuf; - uint32_t free_xmitbuf_cnt; - _queue free_xmit_extbuf_queue; - uint8_t *pallocated_xmit_extbuf; - uint8_t *pxmit_extbuf; - uint32_t free_xmit_extbuf_cnt; - uint16_t nqos_ssn; -}; - -struct rtw_rx_ring { - struct recv_buf_stat *desc; - dma_addr_t dma; - uint32_t idx; - struct sk_buff *rx_buf[4]; -}; - -struct signal_stat { - uint8_t update_req; - uint8_t avg_val; - uint32_t total_num; - uint32_t total_val; -}; - -struct _atr_aligned8_ recv_priv { - _lock lock; - _queue free_recv_queue; - _queue recv_pending_queue; - _queue uc_swdec_pending_queue; - uint8_t *pallocated_frame_buf; - uint8_t *precv_frame_buf; - uint32_t free_recvframe_cnt; - _adapter *adapter; - uint32_t bIsAnyNonBEPkts; - u8Byte rx_bytes; - u8Byte rx_pkts; - u8Byte rx_drop; - u8Byte rx_overflow; - u8Byte last_rx_bytes; - uint32_t rx_icv_err; - uint32_t rx_largepacket_crcerr; - uint32_t rx_smallpacket_crcerr; - uint32_t rx_middlepacket_crcerr; - uint8_t *pallocated_recv_buf; - uint8_t *precv_buf; - _queue free_recv_buf_queue; - uint32_t free_recv_buf_queue_cnt; - struct rtw_rx_ring rx_ring[1]; - int rxringcount; - uint16_t rxbuffersize; - uint8_t is_signal_dbg; - uint8_t signal_strength_dbg; - int8_t rssi; // +2932 - int8_t rxpwdb; - uint8_t signal_strength; - uint8_t signal_qual; - uint8_t noise; - int RxSNRdB[2]; - int8_t RxRssi[2]; - int FalseAlmCnt_all; - _timer signal_stat_timer; - uint32_t signal_stat_sampling_interval; - struct signal_stat signal_qual_data; - struct signal_stat signal_strength_data; - uint8_t promisc_enabled; - uint8_t promisc_len_used; - _list promisc_list; - _lock promisc_lock; - uint32_t promisc_bk_rcr; - uint16_t promisc_bk_rxfltmap2; - uint8_t promisc_mgntframe_enabled; -}; - -struct _atr_aligned4_ sta_priv { - uint8_t *pallocated_stainfo_buf; - uint32_t allocated_stainfo_size; - uint8_t *pstainfo_buf; - _queue free_sta_queue; - _lock sta_hash_lock; - _list sta_hash[5]; - int asoc_sta_count; - _queue sleep_q; - _queue wakeup_q; - _adapter *padapter; - _list asoc_list; - _list auth_list; - _lock asoc_list_lock; - _lock auth_list_lock; - uint32_t auth_to; - uint32_t assoc_to; - uint32_t expire_to; - struct sta_info *sta_aid[5]; - uint16_t sta_dz_bitmap; - uint16_t tim_bitmap; - uint16_t max_num_sta; -}; - -union Keytype { - uint8_t skey[16]; - uint32_t lkey[4]; -}; - - - -union pn48 { - u8Byte val; - struct { - uint8_t TSC0; - uint8_t TSC1; - uint8_t TSC2; - uint8_t TSC3; - uint8_t TSC4; - uint8_t TSC5; - uint8_t TSC6; - uint8_t TSC7; - }_byte_; -}; - -struct _NDIS_802_11_WEP { - uint32_t Length; - uint32_t KeyIndex; - uint32_t KeyLength; - uint8_t KeyMaterial[16]; -}; -typedef struct _NDIS_802_11_WEP NDIS_802_11_WEP; - -struct $D75518714447A990003EBC933C23F70E { - uint32_t HighPart; - uint32_t LowPart; -}; - -union _LARGE_INTEGER { - uint8_t charData[8]; - struct $D75518714447A990003EBC933C23F70E field; -}; -typedef union _LARGE_INTEGER LARGE_INTEGER; - -struct $121C25F90E4E195D1524BBC5399ADEBE { - LARGE_INTEGER HighPart; - LARGE_INTEGER LowPart; -}; - -union _OCTET16_INTEGER { - uint8_t charData[16]; - struct $121C25F90E4E195D1524BBC5399ADEBE field; -}; -typedef union _OCTET16_INTEGER OCTET16_INTEGER; - -struct $BB6DA6E37D48DEE353E02A8C8F92DDF7 { - OCTET16_INTEGER HighPart; - OCTET16_INTEGER LowPart; -}; - -union _OCTET32_INTEGER { - uint8_t charData[32]; - struct $BB6DA6E37D48DEE353E02A8C8F92DDF7 field; -}; -typedef union _OCTET32_INTEGER OCTET32_INTEGER; - -struct _OCTET_STRING { - uint8_t *Octet; - int Length; -}; -typedef struct _OCTET_STRING OCTET_STRING; - -struct _wpa_global_info { - OCTET32_INTEGER Counter; - int GTKAuthenticator; - int GKeyDoneStations; - int GInitAKeys; - int GUpdateStationKeys; - int GkeyReady; - OCTET_STRING AuthInfoElement; - uint8_t AuthInfoBuf[128]; - uint8_t MulticastCipher; - OCTET_STRING GNonce; - uint8_t GNonceBuf[32]; - uint8_t GTK[4][32]; - uint8_t GMK[32]; - int GN; - int GM; - int GTKRekey; -}; -typedef struct _wpa_global_info WPA_GLOBAL_INFO; - -typedef struct _wpa_sta_info WPA_STA_INFO; - -struct _atr_aligned4_ security_priv { - uint32_t dot11AuthAlgrthm; - uint32_t dot11PrivacyAlgrthm; - uint32_t dot11PrivacyKeyIndex; - union Keytype dot11DefKey[4]; - uint32_t dot11DefKeylen[4]; - uint32_t dot118021XGrpPrivacy; - uint32_t dot118021XGrpKeyid; - union Keytype dot118021XGrpKey[4]; - union Keytype dot118021XGrptxmickey[4]; - union Keytype dot118021XGrprxmickey[4]; - union pn48 dot11Grptxpn; - union pn48 dot11Grprxpn; - uint32_t dot8021xalg; - uint32_t wpa_psk; - uint32_t wpa_group_cipher; - uint32_t wpa2_group_cipher; - uint32_t wpa_pairwise_cipher; - uint32_t wpa2_pairwise_cipher; - uint8_t wps_ie[512]; - int wps_ie_len; - uint8_t binstallGrpkey; - uint8_t busetkipkey; - uint8_t bcheck_grpkey; - uint8_t bgrpkey_handshake; - int32_t sw_encrypt; - int32_t sw_decrypt; - int32_t hw_decrypted; - uint32_t ndisauthtype; - uint32_t ndisencryptstatus; - NDIS_802_11_WEP ndiswep; - uint8_t supplicant_ie[256]; - uint32_t last_mic_err_time; - uint8_t btkip_countermeasure; - uint8_t btkip_wait_report; - uint32_t btkip_countermeasure_time; - WPA_GLOBAL_INFO wpa_global_info; - uint8_t *palloc_wpastainfo_buf; - uint32_t alloc_wpastainfo_size; - WPA_STA_INFO *wpa_sta_info[3]; - uint8_t wpa_passphrase[65]; - uint8_t wps_phase; -}; - -struct _atr_aligned4_ registry_priv { - uint8_t chip_version; - uint8_t hci; - NDIS_802_11_SSID ssid; - uint8_t channel; - uint8_t wireless_mode; - uint8_t scan_mode; - uint8_t vrtl_carrier_sense; - uint8_t vcs_type; - uint16_t rts_thresh; - uint8_t soft_ap; - uint8_t power_mgnt; - uint8_t ps_enable; - uint8_t ips_mode; - uint8_t smart_ps; - uint8_t mp_mode; - uint8_t software_encrypt; - uint8_t software_decrypt; - uint8_t acm_method; - uint8_t wmm_enable; - uint8_t uapsd_enable; - uint32_t beacon_period; - uint8_t ht_enable; - uint8_t ampdu_enable; - uint8_t rx_stbc; - uint8_t ampdu_amsdu; - uint8_t rf_config; - uint8_t power_percentage_idx; - uint8_t wifi_spec; - uint8_t channel_plan; - uint8_t ifname[16]; - uint8_t if2name[16]; - uint8_t RegEnableTxPowerLimit; - uint8_t RegEnableTxPowerByRate; - uint8_t RegEnableKFree; - uint8_t RegPowerBase; - uint8_t RegPwrTblSel; - uint8_t adaptivity_en; - uint8_t adaptivity_mode; - uint8_t adaptivity_dml; - uint8_t adaptivity_dc_backoff; - int8_t adaptivity_th_l2h_ini; -}; - -typedef void *_sema; - -typedef _sema _pwrlock; - -enum _rt_rf_power_state //: sint32_t -{ - rf_on = 0x0, rf_sleep = 0x1, rf_off = 0x2, rf_max = 0x3, -}; -typedef enum _rt_rf_power_state rt_rf_power_state; - -struct _atr_aligned4_ pwrctrl_priv { - _pwrlock lock; - volatile uint8_t rpwm; - volatile uint8_t cpwm; - volatile uint8_t tog; - volatile uint8_t cpwm_tog; - uint8_t pwr_mode; - uint8_t smart_ps; - uint8_t bcn_ant_mode; - uint32_t alives; - u8Byte wowlan_fw_iv; - uint8_t bpower_saving; - uint8_t b_hw_radio_off; - uint8_t reg_rfoff; - uint8_t reg_pdnmode; - uint32_t rfoff_reason; - uint32_t cur_ps_level; - uint32_t reg_rfps_level; - uint8_t b_support_aspm; - uint8_t b_support_backdoor; - uint8_t const_amdpci_aspm; - uint32_t ips_enter_cnts; - uint32_t ips_leave_cnts; - uint8_t ps_enable; - uint8_t ips_mode; - uint8_t ips_org_mode; - uint8_t ips_mode_req; - uint32_t bips_processing; - uint32_t ips_deny_time; - uint8_t ps_processing; - uint8_t bLeisurePs; - uint8_t LpsIdleCount; - uint8_t power_mgnt; - uint8_t org_power_mgnt; - uint8_t bFwCurrentInPSMode; - uint32_t DelayLPSLastTimeStamp; - uint8_t btcoex_rfon; - int32_t pnp_current_pwr_state; - uint8_t pnp_bstop_trx; - uint8_t bInternalAutoSuspend; - uint8_t bInSuspend; - uint8_t bSupportRemoteWakeup; - _timer pwr_state_check_timer; - int pwr_state_check_interval; - uint8_t pwr_state_check_cnts; - int ps_flag; - rt_rf_power_state rf_pwrstate; - rt_rf_power_state change_rfpwrstate; - uint8_t wepkeymask; - uint8_t bHWPowerdown; - uint8_t bHWPwrPindetect; - uint8_t bkeepfwalive; - uint8_t brfoffbyhw; - uint32_t PS_BBRegBackup[4]; - uint8_t tdma_slot_period; - uint8_t tdma_rfon_period_len_1; - uint8_t tdma_rfon_period_len_2; - uint8_t tdma_rfon_period_len_3; - uint8_t lps_dtim; -}; - -struct _atr_aligned2_ eeprom_priv { // __attribute__((packed))!? - uint8_t bautoload_fail_flag; - uint8_t mac_addr[6]; - uint16_t CustomerID; - uint8_t EepromOrEfuse; - uint8_t efuse_eeprom_data[512]; - uint8_t EEPROMRFGainOffset; - uint8_t EEPROMRFGainVal; -}; - -enum _CHANNEL_WIDTH // : sint32_t -{ - CHANNEL_WIDTH_20 = 0x0, - CHANNEL_WIDTH_40 = 0x1, - CHANNEL_WIDTH_80 = 0x2, - CHANNEL_WIDTH_160 = 0x3, - CHANNEL_WIDTH_80_80 = 0x4, - CHANNEL_WIDTH_MAX = 0x5, -}; -typedef enum _CHANNEL_WIDTH CHANNEL_WIDTH; - -enum _HAL_DEF_VARIABLE // : sint32_t -{ - HAL_DEF_UNDERCORATEDSMOOTHEDPWDB = 0x0, - HAL_DEF_IS_SUPPORT_ANT_DIV = 0x1, - HAL_DEF_CURRENT_ANTENNA = 0x2, - HAL_DEF_DRVINFO_SZ = 0x3, - HAL_DEF_MAX_RECVBUF_SZ = 0x4, - HAL_DEF_RX_PACKET_OFFSET = 0x5, - HAL_DEF_RX_DMA_SZ_WOW = 0x6, - HAL_DEF_RX_DMA_SZ = 0x7, - HAL_DEF_RX_PAGE_SIZE = 0x8, - HAL_DEF_DBG_DM_FUNC = 0x9, - HAL_DEF_RA_DECISION_RATE = 0xA, - HAL_DEF_RA_SGI = 0xB, - HAL_DEF_PT_PWR_STATUS = 0xC, - HW_VAR_MAX_RX_AMPDU_FACTOR = 0xD, - HW_DEF_RA_INFO_DUMP = 0xE, - HAL_DEF_DBG_DUMP_TXPKT = 0xF, - HW_DEF_ODM_DBG_FLAG = 0x10, - HW_DEF_ODM_DBG_LEVEL = 0x11, - HAL_DEF_TX_PAGE_SIZE = 0x12, - HAL_DEF_TX_PAGE_BOUNDARY = 0x13, - HAL_DEF_MACID_SLEEP = 0x14, - HAL_DEF_DBG_RX_INFO_DUMP = 0x15, -}; -typedef enum _HAL_DEF_VARIABLE HAL_DEF_VARIABLE; - -enum _HAL_ODM_VARIABLE // : sint32_t -{ - HAL_ODM_STA_INFO = 0x0, - HAL_ODM_DBG_FLAG = 0x1, - HAL_ODM_RX_INFO_DUMP = 0x2, - HAL_ODM_NOISE_MONITOR = 0x3, - HAL_ODM_REGULATION = 0x4, -}; -typedef enum _HAL_ODM_VARIABLE HAL_ODM_VARIABLE; - -typedef void *_thread_hdl_; - -/* - // osdep_service.h - struct task_struct - { - const char *task_name; - _thread_hdl_ task; - _sema wakeup_sema; - _sema terminate_sema; - uint32_t blocked; - uint32_t callback_running; - }; - */ - -typedef struct net_device *_nic_hdl; -/* - // wrapper.h - struct net_device_stats - { - uint32_t rx_packets; - uint32_t tx_packets; - uint32_t rx_dropped; - uint32_t tx_dropped; - uint32_t rx_bytes; - uint32_t tx_bytes; - uint32_t rx_overflow; - }; - */ - -struct phy_info { - uint8_t RxPWDBAll; - uint8_t SignalQuality; - uint8_t RxMIMOSignalStrength[1]; - int8_t RecvSignalPower; - uint8_t SignalStrength; -}; - -struct _atr_aligned4_ rx_pkt_attrib { - uint16_t pkt_len; - uint8_t physt; - uint8_t drvinfo_sz; - uint8_t shift_sz; - uint8_t hdrlen; - uint8_t to_fr_ds; - uint8_t amsdu; - uint8_t qos; - uint8_t priority; - uint8_t pw_save; - uint8_t mdata; - uint16_t seq_num; - uint8_t frag_num; - uint8_t mfrag; - uint8_t order; - uint8_t privacy; - uint8_t bdecrypted; - uint8_t encrypt; - uint8_t iv_len; - uint8_t icv_len; - uint8_t crc_err; - uint8_t icv_err; - uint16_t eth_type; - uint8_t dst[6]; - uint8_t src[6]; - uint8_t ta[6]; - uint8_t ra[6]; - uint8_t bssid[6]; - uint8_t ack_policy; - uint8_t tcpchk_valid; - uint8_t ip_chkrpt; - uint8_t tcp_chkrpt; - uint8_t key_index; - uint8_t mcs_rate; - uint8_t rxht; - uint8_t sgi; - uint8_t pkt_rpt_type; - uint32_t MacIDValidEntry[2]; - uint8_t data_rate; - struct phy_info phy_info; -}; - -struct recv_frame_hdr { - _list list; - struct sk_buff *pkt; - struct sk_buff *pkt_newalloc; - _adapter *adapter; - uint8_t fragcnt; - int frame_tag; - struct rx_pkt_attrib attrib; - uint32_t len; - uint8_t *rx_head; - uint8_t *rx_data; - uint8_t *rx_tail; - uint8_t *rx_end; - void *precvbuf; - struct sta_info *psta; -}; - -struct recv_frame { -union { - _list list; - struct recv_frame_hdr hdr; - uint32_t mem[32]; - }; -}; -/* -union $AB04817EA6EB89125E28056B7464A4D7 { - _list list; - struct recv_frame_hdr hdr; - uint32_t mem[32]; -}; - -union recv_frame { - union $AB04817EA6EB89125E28056B7464A4D7 u; -}; -*/ -/* - // skbuff.h - struct sk_buff - { - struct sk_buff *next; - struct sk_buff *prev; - struct sk_buff_head *list; - uint8_t *head; - uint8_t *data; - uint8_t *tail; - uint8_t *end; - void *dev; - uint32_t len; - }; - - struct sk_buff_head - { - struct list_head *next; - struct list_head *prev; - uint32_t qlen; - }; - */ - -struct tx_servq { - _list tx_pending; - _queue sta_pending; - int qcnt; -}; - -struct sta_xmit_priv { - _lock lock; - sint option; - sint apsd_setting; - struct tx_servq be_q; - struct tx_servq bk_q; - struct tx_servq vi_q; - struct tx_servq vo_q; - _list legacy_dz; - _list apsd; - uint16_t txseq_tid[16]; -}; - -struct stainfo_rxcache { - uint16_t tid_rxseq[16]; -}; - -struct sta_recv_priv { - _lock lock; - sint option; - _queue defrag_q; - struct stainfo_rxcache rxcache; -}; - -struct stainfo_stats { - u8Byte rx_mgnt_pkts; - u8Byte rx_ctrl_pkts; - u8Byte rx_data_pkts; - u8Byte last_rx_mgnt_pkts; - u8Byte last_rx_ctrl_pkts; - u8Byte last_rx_data_pkts; - u8Byte rx_bytes; - u8Byte tx_pkts; - u8Byte tx_bytes; -}; - -struct _RSSI_STA { - int32_t UndecoratedSmoothedPWDB; - int32_t UndecoratedSmoothedCCK; - int32_t UndecoratedSmoothedOFDM; - u8Byte PacketMap; - uint8_t ValidBit; - uint32_t OFDM_pkt; -}; -typedef struct _RSSI_STA RSSI_STA; - -struct sta_info { - _lock lock; - _list list; - _list hash_list; - _adapter *padapter; - struct sta_xmit_priv sta_xmitpriv; - struct sta_recv_priv sta_recvpriv; - _queue sleep_q; - uint32_t sleepq_len; - uint32_t state; - uint32_t aid; - uint32_t mac_id; - uint32_t qos_option; - uint8_t hwaddr[6]; - uint32_t ieee8021x_blocked; - uint32_t dot118021XPrivacy; - union Keytype dot11tkiptxmickey; - union Keytype dot11tkiprxmickey; - union Keytype dot118021x_UncstKey; - union pn48 dot11txpn; - union pn48 dot11rxpn; - uint8_t bssrateset[16]; - uint32_t bssratelen; - int32_t rssi; - int32_t signal_quality; - uint8_t cts2self; - uint8_t rtsen; - uint8_t raid; - uint8_t init_rate; - uint32_t ra_mask; - uint8_t wireless_mode; - struct stainfo_stats sta_stats; - _timer addba_retry_timer; - uint16_t BA_starting_seqctrl[16]; - struct ht_priv htpriv; - _list asoc_list; - _list auth_list; - uint32_t expire_to; - uint32_t auth_seq; - uint32_t authalg; - uint8_t chg_txt[128]; - uint16_t capability; - uint32_t flags; - int dot8021xalg; - int wpa_psk; - int wpa_group_cipher; - int wpa2_group_cipher; - int wpa_pairwise_cipher; - int wpa2_pairwise_cipher; - uint8_t bpairwise_key_installed; - uint8_t wpa_ie[32]; - uint8_t nonerp_set; - uint8_t no_short_slot_time_set; - uint8_t no_short_preamble_set; - uint8_t no_ht_gf_set; - uint8_t no_ht_set; - uint8_t ht_20mhz_set; - uint32_t tx_ra_bitmap; - uint8_t qos_info; - uint8_t max_sp_len; - uint8_t uapsd_bk; - uint8_t uapsd_be; - uint8_t uapsd_vi; - uint8_t uapsd_vo; - uint8_t has_legacy_ac; - uint32_t sleepq_ac_len; - RSSI_STA rssi_stat; - uint8_t bValid; - uint8_t IOTPeer; - uint8_t rssi_level; - uint8_t RSSI_Path[4]; - uint8_t RSSI_Ave; - uint8_t RXEVM[4]; - uint8_t RXSNR[4]; -}; -/* - // wifi_conf.h - struct _atr_aligned4_ _cus_ie - { - uint8_t *ie; - uint8_t type; - }; - */ - -struct hw_xmit { - _queue *sta_queue; - int accnt; -}; - -struct tx_buf_desc { - uint32_t txdw0; - uint32_t txdw1; - uint32_t txdw2; - uint32_t txdw3; - uint32_t txdw4; - uint32_t txdw5; - uint32_t txdw6; - uint32_t txdw7; -}; - -struct recv_buf_stat { - uint32_t rxdw0; - uint32_t rxdw1; -}; - -struct _wpa_sta_info { - int state; - int gstate; - int RSNEnabled; - int PInitAKeys; - uint8_t UnicastCipher; - LARGE_INTEGER CurrentReplayCounter; - LARGE_INTEGER ReplayCounterStarted; - OCTET_STRING ANonce; - OCTET_STRING SNonce; - uint8_t AnonceBuf[32]; - uint8_t SnonceBuf[32]; - uint8_t PMK[32]; - uint8_t PTK[64]; - OCTET_STRING EAPOLMsgRecvd; - OCTET_STRING EAPOLMsgSend; - OCTET_STRING EapolKeyMsgRecvd; - OCTET_STRING EapolKeyMsgSend; - uint8_t eapSendBuf[512]; - struct timer_list resendTimer; - int resendCnt; - int clientHndshkProcessing; - int clientHndshkDone; - int clientGkeyUpdate; - LARGE_INTEGER clientMICReportReplayCounter; -}; - -struct pkt_attrib { - uint8_t type; - uint8_t subtype; - uint8_t bswenc; - uint8_t dhcp_pkt; - uint16_t ether_type; - uint16_t seqnum; - uint16_t pkt_hdrlen; - uint16_t hdrlen; - uint32_t pktlen; - uint32_t last_txcmdsz; - uint8_t encrypt; - uint8_t iv_len; - uint8_t icv_len; - uint8_t iv[18]; - uint8_t icv[16]; - uint8_t priority; - uint8_t ack_policy; - uint8_t mac_id; - uint8_t vcs_mode; - uint8_t dst[6]; - uint8_t src[6]; - uint8_t ta[6]; - uint8_t ra[6]; - uint8_t key_idx; - uint8_t qos_en; - uint8_t ht_en; - uint8_t raid; - uint8_t bwmode; - uint8_t ch_offset; - uint8_t sgi; - uint8_t ampdu_en; - uint8_t mdata; - uint8_t pctrl; - uint8_t triggered; - uint8_t qsel; - uint8_t eosp; - uint8_t rate; - uint8_t intel_proxim; - uint8_t retry_ctrl; - struct sta_info *psta; -}; - -typedef struct sk_buff _pkt; - -struct _XIMT_BUF_ { - uint32_t AllocatBufAddr; - uint32_t BufAddr; - uint32_t BufLen; -}; -typedef struct _XIMT_BUF_ XIMT_BUF; - -struct _atr_aligned4_ xmit_frame { - _list list; - struct pkt_attrib attrib; - _pkt *pkt; - int frame_tag; - _adapter *padapter; - uint8_t *buf_addr; - struct xmit_buf *pxmitbuf; - uint32_t TxDexAddr; - uint32_t HdrLen; - uint32_t PayLoadAddr; - uint32_t PayLoadLen; - uint32_t TotalLen; - uint32_t BlockNum; - XIMT_BUF BufInfo[4]; - BOOLEAN NoCoalesce; -}; - -struct xmit_buf { - _list list; - _adapter *padapter; - _pkt *pkt; - uint8_t *pbuf; - void *priv_data; - uint16_t buf_tag; - uint16_t flags; - uint32_t alloc_sz; - uint32_t len; - struct submit_ctx *sctx; - XIMT_BUF BufInfo[4]; - uint32_t BlockNum; -}; - -struct submit_ctx { - uint32_t submit_time; - uint32_t timeout_ms; - int status; -}; -/* - // wrapper.h - struct net_device - { - char name[16]; - void *priv; - uint8_t dev_addr[6]; - int (*init)(void); - int (*open)(struct net_device *); - int (*stop)(struct net_device *); - int (*hard_start_xmit)(struct sk_buff *, struct net_device *); - int (*do_ioctl)(struct net_device *, struct iwreq *, int); - struct net_device_stats *(*get_stats)(struct net_device *); - }; - */ -/* - // wireless.h - struct iw_point - { - void *pointer; - uint16_t length; - uint16_t flags; - }; - - struct iw_param - { - sint32_t value; - uint8_t fixed; - uint8_t disabled; - uint16_t flags; - }; - - - struct iw_freq - { - sint32_t m; - sint16_t e; - uint8_t i; - uint8_t flags; - }; - - struct iw_quality - { - uint8_t qual; - uint8_t level; - uint8_t noise; - uint8_t updated; - }; - - struct sockaddr_t - { - uint8_t sa_len; - uint8_t sa_family; - char sa_data[14]; - }; - - union iwreq_data - { - char name[16]; - struct iw_point essid; - struct iw_param nwid; - struct iw_freq freq; - struct iw_param sens; - struct iw_param bitrate; - struct iw_param txpower; - struct iw_param rts; - struct iw_param frag; - uint32_t mode; - struct iw_param retry; - struct iw_point encoding; - struct iw_param power; - struct iw_quality qual; - struct sockaddr_t ap_addr; - struct sockaddr_t addr; - struct iw_param param; - struct iw_point data; - struct iw_point passphrase; - }; - - struct iwreq - { - char ifr_name[16]; - union iwreq_data u; - }; - */ -struct co_data_priv { - uint8_t co_ch; - uint8_t co_bw; - uint8_t co_ch_offset; - uint8_t rsvd; -}; - -enum _HARDWARE_TYPE // : sint32_t -{ - HARDWARE_TYPE_RTL8180 = 0x0, - HARDWARE_TYPE_RTL8185 = 0x1, - HARDWARE_TYPE_RTL8187 = 0x2, - HARDWARE_TYPE_RTL8188 = 0x3, - HARDWARE_TYPE_RTL8190P = 0x4, - HARDWARE_TYPE_RTL8192E = 0x5, - HARDWARE_TYPE_RTL819xU = 0x6, - HARDWARE_TYPE_RTL8192SE = 0x7, - HARDWARE_TYPE_RTL8192SU = 0x8, - HARDWARE_TYPE_RTL8192CE = 0x9, - HARDWARE_TYPE_RTL8192CU = 0xA, - HARDWARE_TYPE_RTL8192DE = 0xB, - HARDWARE_TYPE_RTL8192DU = 0xC, - HARDWARE_TYPE_RTL8723AE = 0xD, - HARDWARE_TYPE_RTL8723AU = 0xE, - HARDWARE_TYPE_RTL8723AS = 0xF, - HARDWARE_TYPE_RTL8188EE = 0x10, - HARDWARE_TYPE_RTL8188EU = 0x11, - HARDWARE_TYPE_RTL8188ES = 0x12, - HARDWARE_TYPE_RTL8192EE = 0x13, - HARDWARE_TYPE_RTL8192EU = 0x14, - HARDWARE_TYPE_RTL8192ES = 0x15, - HARDWARE_TYPE_RTL8812E = 0x16, - HARDWARE_TYPE_RTL8812AU = 0x17, - HARDWARE_TYPE_RTL8811AU = 0x18, - HARDWARE_TYPE_RTL8821E = 0x19, - HARDWARE_TYPE_RTL8821U = 0x1A, - HARDWARE_TYPE_RTL8821S = 0x1B, - HARDWARE_TYPE_RTL8723BE = 0x1C, - HARDWARE_TYPE_RTL8723BU = 0x1D, - HARDWARE_TYPE_RTL8723BS = 0x1E, - HARDWARE_TYPE_RTL8195A = 0x1F, - HARDWARE_TYPE_RTL8711B = 0x20, - HARDWARE_TYPE_RTL8188FE = 0x21, - HARDWARE_TYPE_RTL8188FU = 0x22, - HARDWARE_TYPE_RTL8188FS = 0x23, - HARDWARE_TYPE_MAX = 0x24, -}; - -struct RF_Shadow_Compare_Map { - uint32_t Value; - uint8_t Compare; - uint8_t ErrorOrNot; - uint8_t Recorver; - uint8_t Driver_Write; -}; -typedef struct RF_Shadow_Compare_Map RF_SHADOW_T; - -enum _PS_BBRegBackup_ // : sint32_t -{ - PSBBREG_RF0 = 0x0, - PSBBREG_RF1 = 0x1, - PSBBREG_RF2 = 0x2, - PSBBREG_AFE0 = 0x3, - PSBBREG_TOTALCNT = 0x4, -}; - -/* - // hal_irqn.h - enum _IRQn_Type_ // : sint32_t - { - NonMaskableInt_IRQn = 0xFFFFFFF2, - HardFault_IRQn = 0xFFFFFFF3, - MemoryManagement_IRQn = 0xFFFFFFF4, - BusFault_IRQn = 0xFFFFFFF5, - UsageFault_IRQn = 0xFFFFFFF6, - SVCall_IRQn = 0xFFFFFFFB, - DebugMonitor_IRQn = 0xFFFFFFFC, - PendSV_IRQn = 0xFFFFFFFE, - SysTick_IRQn = 0xFFFFFFFF, - SYSTEM_ON_IRQ = 0x0, - WDG_IRQ = 0x1, - TIMER0_IRQ = 0x2, - TIMER1_IRQ = 0x3, - I2C3_IRQ = 0x4, - TIMER2_7_IRQ = 0x5, - SPI0_IRQ = 0x6, - GPIO_IRQ = 0x7, - UART0_IRQ = 0x8, - SPI_FLASH_IRQ = 0x9, - USB_OTG_IRQ = 0xA, - SDIO_HOST_IRQ = 0xB, - SDIO_DEVICE_IRQ = 0xC, - I2S0_PCM0_IRQ = 0xD, - I2S1_PCM1_IRQ = 0xE, - WL_DMA_IRQ = 0xF, - WL_PROTOCOL_IRQ = 0x10, - CRYPTO_IRQ = 0x11, - GMAC_IRQ = 0x12, - PERIPHERAL_IRQ = 0x13, - GDMA0_CHANNEL0_IRQ = 0x14, - GDMA0_CHANNEL1_IRQ = 0x15, - GDMA0_CHANNEL2_IRQ = 0x16, - GDMA0_CHANNEL3_IRQ = 0x17, - GDMA0_CHANNEL4_IRQ = 0x18, - GDMA0_CHANNEL5_IRQ = 0x19, - GDMA1_CHANNEL0_IRQ = 0x1A, - GDMA1_CHANNEL1_IRQ = 0x1B, - GDMA1_CHANNEL2_IRQ = 0x1C, - GDMA1_CHANNEL3_IRQ = 0x1D, - GDMA1_CHANNEL4_IRQ = 0x1E, - GDMA1_CHANNEL5_IRQ = 0x1F, - I2C0_IRQ = 0x40, - I2C1_IRQ = 0x41, - I2C2_IRQ = 0x42, - SPI1_IRQ = 0x48, - SPI2_IRQ = 0x49, - UART1_IRQ = 0x50, - UART2_IRQ = 0x51, - UART_LOG_IRQ = 0x58, - ADC_IRQ = 0x59, - DAC0_IRQ = 0x5B, - DAC1_IRQ = 0x5C, - LP_EXTENSION_IRQ = 0x5D, - PTA_TRX_IRQ = 0x5F, - RXI300_IRQ = 0x60, - NFC_IRQ = 0x61, - }; - - typedef enum _IRQn_Type_ IRQn_Type; - - typedef void (*IRQ_FUN)(void *); - - struct _IRQ_HANDLE_ - { - IRQ_FUN IrqFun; - IRQn_Type IrqNum; - uint32_t Data; - uint32_t Priority; - }; - typedef struct _IRQ_HANDLE_ IRQ_HANDLE; - */ -/* - // hal_soc_ps_monitor.h - struct _power_state_ - { - uint8_t FuncIdx; - uint8_t PowerState; - }; - - typedef struct _power_state_ POWER_STATE; - - struct _atr_aligned4_ _power_mgn_ - { - uint8_t ActFuncCount; - POWER_STATE PwrState[10]; - uint8_t CurrentState; - uint8_t SDREn; - uint32_t MSPbackup[129]; - uint32_t CPURegbackup[25]; - uint32_t CPUPSP; - uint32_t WakeEventFlag; - BOOL SleepFlag; - }; - typedef struct _power_mgn_ Power_Mgn; - - // hal_gpio.h - enum $E1AD70AB12E7AA6E98B8D89D9B965EB5 //: sint32_t - { - _PORT_A = 0x0, - _PORT_B = 0x1, - _PORT_C = 0x2, - _PORT_D = 0x3, - _PORT_E = 0x4, - _PORT_F = 0x5, - _PORT_G = 0x6, - _PORT_H = 0x7, - _PORT_I = 0x8, - _PORT_J = 0x9, - _PORT_K = 0xA, - _PORT_MAX = 0xB, - }; - - typedef void (*GPIO_IRQ_FUN)(void *, uint32_t); - - typedef void (*GPIO_USER_IRQ_FUN)(uint32_t); - - struct _atr_aligned4_ _HAL_GPIO_ADAPTER_ - { - IRQ_HANDLE IrqHandle; - GPIO_USER_IRQ_FUN UserIrqHandler; - GPIO_IRQ_FUN PortA_IrqHandler[32]; - void *PortA_IrqData[32]; - void (*EnterCritical)(void); - void (*ExitCritical)(void); - uint32_t Local_Gpio_Dir[3]; - uint8_t Gpio_Func_En; - uint8_t Locked; - }; - typedef struct _HAL_GPIO_ADAPTER_ *PHAL_GPIO_ADAPTER; - */ - -struct hal_ops { - uint32_t (*hal_power_on)(_adapter *); - uint32_t (*hal_init)(_adapter *); - uint32_t (*hal_deinit)(_adapter *); - void (*free_hal_data)(_adapter *); - uint32_t (*inirp_init)(_adapter *); - uint32_t (*inirp_deinit)(_adapter *); - void (*irp_reset)(_adapter *); - int32_t (*init_xmit_priv)(_adapter *); - void (*free_xmit_priv)(_adapter *); - int32_t (*init_recv_priv)(_adapter *); - void (*free_recv_priv)(_adapter *); - void (*update_txdesc)(struct xmit_frame *, uint8_t *); - void (*InitSwLeds)(_adapter *); - void (*DeInitSwLeds)(_adapter *); - void (*dm_init)(_adapter *); - void (*dm_deinit)(_adapter *); - void (*read_chip_version)(_adapter *); - void (*init_default_value)(_adapter *); - void (*intf_chip_configure)(_adapter *); - void (*read_adapter_info)(_adapter *); - void (*enable_interrupt)(_adapter *); - void (*disable_interrupt)(_adapter *); - int32_t (*interrupt_handler)(_adapter *); - void (*set_bwmode_handler)(_adapter *, CHANNEL_WIDTH, uint8_t); - void (*set_channel_handler)(_adapter *, uint8_t); - void (*set_chnl_bw_handler)(_adapter *, uint8_t, CHANNEL_WIDTH, uint8_t, - uint8_t); - void (*hal_dm_watchdog)(_adapter *); - void (*SetHwRegHandler)(_adapter *, uint8_t, uint8_t *); - void (*GetHwRegHandler)(_adapter *, uint8_t, uint8_t *); - uint8_t (*GetHalDefVarHandler)(_adapter *, HAL_DEF_VARIABLE, PVOID); - uint8_t (*SetHalDefVarHandler)(_adapter *, HAL_DEF_VARIABLE, PVOID); - void (*GetHalODMVarHandler)(_adapter *, HAL_ODM_VARIABLE, PVOID, BOOLEAN); - void (*SetHalODMVarHandler)(_adapter *, HAL_ODM_VARIABLE, PVOID, BOOLEAN); - void (*UpdateRAMaskHandler)(_adapter *, uint32_t, uint8_t); - void (*Add_RateATid)(_adapter *, uint32_t, uint8_t *, uint8_t); - void (*clone_haldata)(_adapter *, _adapter *); - void (*run_thread)(_adapter *); - void (*cancel_thread)(_adapter *); - int32_t (*hal_xmit)(_adapter *, struct xmit_frame *); - int32_t (*mgnt_xmit)(_adapter *, struct xmit_frame *); - uint32_t (*read_bbreg)(_adapter *, uint32_t, uint32_t); - void (*write_bbreg)(_adapter *, uint32_t, uint32_t, uint32_t); - uint32_t (*read_rfreg)(_adapter *, uint32_t, uint32_t, uint32_t); - void (*write_rfreg)(_adapter *, uint32_t, uint32_t, uint32_t, uint32_t); - void (*EfusePowerSwitch)(_adapter *, uint8_t, uint8_t); - void (*ReadEFuse)(_adapter *, uint8_t, uint16_t, uint16_t, uint8_t *, - BOOLEAN); - void (*EFUSEGetEfuseDefinition)(_adapter *, uint8_t, uint8_t, void *, - BOOLEAN); - uint16_t (*EfuseGetCurrentSize)(_adapter *, uint8_t, BOOLEAN); - int (*Efuse_PgPacketWrite)(_adapter *, uint8_t, uint8_t, uint8_t *, - BOOLEAN); - uint8_t (*Efuse_WordEnableDataWrite)(_adapter *, uint16_t, uint8_t, - uint8_t *, BOOLEAN); - void (*recv_tasklet)(void *); - int32_t (*fill_h2c_cmd)(_adapter *, uint8_t, uint32_t, uint8_t *); - void (*fill_fake_txdesc)(_adapter *, uint8_t *, uint32_t, uint8_t, uint8_t, - uint8_t); - uint8_t (*hal_get_tx_buff_rsvd_page_num)(_adapter *, bool); -}; - - /* 138 */ -typedef enum _P2P_ROLE // : __int32 -{ - P2P_ROLE_DISABLE = 0x0, - P2P_ROLE_DEVICE = 0x1, - P2P_ROLE_CLIENT = 0x2, - P2P_ROLE_GO = 0x3, -} P2P_ROLE; - -typedef enum P2P_STATE // : __int32 -{ - P2P_STATE_NONE = 0x0, - P2P_STATE_IDLE = 0x1, - P2P_STATE_LISTEN = 0x2, - P2P_STATE_SCAN = 0x3, - P2P_STATE_FIND_PHASE_LISTEN = 0x4, - P2P_STATE_FIND_PHASE_SEARCH = 0x5, - P2P_STATE_TX_PROVISION_DIS_REQ = 0x6, - P2P_STATE_RX_PROVISION_DIS_RSP = 0x7, - P2P_STATE_RX_PROVISION_DIS_REQ = 0x8, - P2P_STATE_GONEGO_ING = 0x9, - P2P_STATE_GONEGO_OK = 0xA, - P2P_STATE_GONEGO_FAIL = 0xB, - P2P_STATE_RECV_INVITE_REQ_MATCH = 0xC, - P2P_STATE_PROVISIONING_ING = 0xD, - P2P_STATE_PROVISIONING_DONE = 0xE, - P2P_STATE_TX_INVITE_REQ = 0xF, - P2P_STATE_RX_INVITE_RESP = 0x10, - P2P_STATE_RECV_INVITE_REQ_DISMATCH = 0x11, - P2P_STATE_RECV_INVITE_REQ_GO = 0x12, - P2P_STATE_RECV_INVITE_REQ_JOIN = 0x13, - P2P_STATE_FORMATION_COMPLETE = 0x14, - P2P_STATE_CONNECTED = 0x15, -} P2P_STATE; - - -struct wifidirect_info -{ - P2P_ROLE role; - P2P_STATE p2p_state; - uint8_t baction_tx_pending; - uint8_t pending_peer[6]; - struct xmit_frame *pending_action; - _timer pre_tx_scan_timer; -}; - - -struct _atr_aligned4_ _ADAPTER { - uint16_t HardwareType; - uint16_t interface_type; //+2 - uint32_t work_mode; //+4 - struct dvobj_priv *dvobj; //+8 - struct mlme_priv mlmepriv; //+12 [1244] - struct mlme_ext_priv mlmeextpriv; //+1256 [912] - struct cmd_priv cmdpriv; //+2168 - struct evt_priv evtpriv; //+ - struct io_priv iopriv; - struct xmit_priv xmitpriv; //+2248 - struct recv_priv recvpriv; //+2752 - struct sta_priv stapriv; //+3024 [164] - struct security_priv securitypriv; - struct registry_priv registrypriv; - struct pwrctrl_priv pwrctrlpriv; // pwrctrlpriv.bInternalAutoSuspend //+5061 - struct eeprom_priv eeprompriv; - - struct wifidirect_info wdinfo; - - PVOID HalData; - uint32_t hal_data_sz; - struct hal_ops HalFunc; - int32_t bDriverStopped; //+5880 - int32_t bSurpriseRemoved; //+5884 - int32_t bCardDisableWOHSM; //+5888 - uint8_t RxStop; //+5892 - uint32_t IsrContent; - uint32_t ImrContent; - uint8_t EepromAddressSize; - uint8_t hw_init_completed; //+5905 - uint8_t bDriverIsGoingToUnload; - uint8_t init_adpt_in_progress; - uint8_t bMpDriver; - uint8_t bForwardingDisabled; - struct task_struct isrThread; //+5888 - struct task_struct cmdThread; //+5920 - struct task_struct recvtasklet_thread; //+5952 - struct task_struct xmittasklet_thread; //+5984 - void (*intf_start)(_adapter *); //+6008 - void (*intf_stop)(_adapter *); //+6012 - _nic_hdl pnetdev; //+6016 - int bup; //+6020 - struct net_device_stats stats; - uint8_t net_closed; //+6052 - uint8_t bFWReady; - uint8_t bLinkInfoDump; - uint8_t bRxRSSIDisplay; - _adapter *pbuddy_adapter; //+6056 - _mutex *hw_init_mutex; //+6060 - -_mutex *ph2c_fwcmd_mutex; - - uint8_t isprimary; //+6064 - uint8_t adapter_type; //+6065 - uint8_t iface_type; //+6056 -// _mutex *ph2c_fwcmd_mutex; //+6068 - _mutex *psetch_mutex; //+6072 - _mutex *psetbw_mutex; //+6076 - struct co_data_priv *pcodatapriv; //+6080 - uint8_t fix_rate; //+6084 - - uint8_t ra_mask_user_en; - uint32_t ra_mask_define; - uint8_t auto_rate_fallback_user_en; - -}; // [6088] (!) -typedef struct _ADAPTER *PADAPTER; -// if sizeof(struct _ADAPTER) != 6088 #error "Check aligned struct!" ! - -enum tag_HAL_IC_Type_Definition // : sint32_t -{ - CHIP_8192S = 0x0, - CHIP_8188C = 0x1, - CHIP_8192C = 0x2, - CHIP_8192D = 0x3, - CHIP_8723A = 0x4, - CHIP_8188E = 0x5, - CHIP_8812 = 0x6, - CHIP_8821 = 0x7, - CHIP_8723B = 0x8, - CHIP_8192E = 0x9, - CHIP_8195A = 0xA, - CHIP_8711B = 0xB, - CHIP_8188F = 0xC, -}; -typedef enum tag_HAL_IC_Type_Definition HAL_IC_TYPE_E; - -enum tag_HAL_CHIP_Type_Definition // : sint32_t -{ - TEST_CHIP = 0x0, NORMAL_CHIP = 0x1, FPGA = 0x2, -}; -typedef enum tag_HAL_CHIP_Type_Definition HAL_CHIP_TYPE_E; - -enum tag_HAL_Cut_Version_Definition // : sint32_t -{ - A_CUT_VERSION = 0x0, - B_CUT_VERSION = 0x1, - C_CUT_VERSION = 0x2, - D_CUT_VERSION = 0x3, - E_CUT_VERSION = 0x4, - F_CUT_VERSION = 0x5, - G_CUT_VERSION = 0x6, - H_CUT_VERSION = 0x7, - I_CUT_VERSION = 0x8, - J_CUT_VERSION = 0x9, - K_CUT_VERSION = 0xA, -}; -typedef enum tag_HAL_Cut_Version_Definition HAL_CUT_VERSION_E; - -enum tag_HAL_Manufacturer_Version_Definition //: sint32_t -{ - CHIP_VENDOR_TSMC = 0x0, CHIP_VENDOR_UMC = 0x1, CHIP_VENDOR_SMIC = 0x2, -}; -typedef enum tag_HAL_Manufacturer_Version_Definition HAL_VENDOR_E; - -enum tag_HAL_RF_Type_Definition //: sint32_t -{ - RF_TYPE_1T1R = 0x0, - RF_TYPE_1T2R = 0x1, - RF_TYPE_2T2R = 0x2, - RF_TYPE_2T3R = 0x3, - RF_TYPE_2T4R = 0x4, - RF_TYPE_3T3R = 0x5, - RF_TYPE_3T4R = 0x6, - RF_TYPE_4T4R = 0x7, -}; -typedef enum tag_HAL_RF_Type_Definition HAL_RF_TYPE_E; - -struct _atr_aligned4_ tag_HAL_VERSION { - HAL_IC_TYPE_E ICType; - HAL_CHIP_TYPE_E ChipType; - HAL_CUT_VERSION_E CUTVersion; - HAL_VENDOR_E VendorType; - HAL_RF_TYPE_E RFType; - uint8_t ROMVer; -}; -typedef struct tag_HAL_VERSION HAL_VERSION; - -enum _HW_VARIABLES //: sint32_t -{ - HW_VAR_MEDIA_STATUS = 0x0, - HW_VAR_MEDIA_STATUS1 = 0x1, - HW_VAR_SET_OPMODE = 0x2, - HW_VAR_MAC_ADDR = 0x3, - HW_VAR_BSSID = 0x4, - HW_VAR_INIT_RTS_RATE = 0x5, - HW_VAR_BASIC_RATE = 0x6, - HW_VAR_TXPAUSE = 0x7, - HW_VAR_BCN_FUNC = 0x8, - HW_VAR_CORRECT_TSF = 0x9, - HW_VAR_CHECK_BSSID = 0xA, - HW_VAR_MLME_DISCONNECT = 0xB, - HW_VAR_MLME_SITESURVEY = 0xC, - HW_VAR_MLME_JOIN = 0xD, - HW_VAR_ON_RCR_AM = 0xE, - HW_VAR_OFF_RCR_AM = 0xF, - HW_VAR_BEACON_INTERVAL = 0x10, - HW_VAR_SLOT_TIME = 0x11, - HW_VAR_RESP_SIFS = 0x12, - HW_VAR_ACK_PREAMBLE = 0x13, - HW_VAR_SEC_CFG = 0x14, - HW_VAR_SEC_DK_CFG = 0x15, - HW_VAR_RF_TYPE = 0x16, - HW_VAR_DM_FLAG = 0x17, - HW_VAR_DM_FUNC_OP = 0x18, - HW_VAR_DM_FUNC_SET = 0x19, - HW_VAR_DM_FUNC_CLR = 0x1A, - HW_VAR_CAM_EMPTY_ENTRY = 0x1B, - HW_VAR_CAM_INVALID_ALL = 0x1C, - HW_VAR_CAM_WRITE = 0x1D, - HW_VAR_CAM_READ = 0x1E, - HW_VAR_AC_PARAM_VO = 0x1F, - HW_VAR_AC_PARAM_VI = 0x20, - HW_VAR_AC_PARAM_BE = 0x21, - HW_VAR_AC_PARAM_BK = 0x22, - HW_VAR_ACM_CTRL = 0x23, - HW_VAR_AMPDU_MIN_SPACE = 0x24, - HW_VAR_AMPDU_FACTOR = 0x25, - HW_VAR_RXDMA_AGG_PG_TH = 0x26, - HW_VAR_SET_RPWM = 0x27, - HW_VAR_GET_RPWM = 0x28, - HW_VAR_CPWM = 0x29, - HW_VAR_H2C_FW_PWRMODE = 0x2A, - HW_VAR_H2C_PS_TUNE_PARAM = 0x2B, - HW_VAR_H2C_FW_JOINBSSRPT = 0x2C, - HW_VAR_FWLPS_RF_ON = 0x2D, - HW_VAR_H2C_FW_P2P_PS_OFFLOAD = 0x2E, - HW_VAR_TDLS_WRCR = 0x2F, - HW_VAR_TDLS_INIT_CH_SEN = 0x30, - HW_VAR_TDLS_RS_RCR = 0x31, - HW_VAR_TDLS_DONE_CH_SEN = 0x32, - HW_VAR_INITIAL_GAIN = 0x33, - HW_VAR_TRIGGER_GPIO_0 = 0x34, - HW_VAR_CURRENT_ANTENNA = 0x35, - HW_VAR_ANTENNA_DIVERSITY_LINK = 0x36, - HW_VAR_ANTENNA_DIVERSITY_SELECT = 0x37, - HW_VAR_SWITCH_EPHY_WoWLAN = 0x38, - HW_VAR_EFUSE_USAGE = 0x39, - HW_VAR_EFUSE_BYTES = 0x3A, - HW_VAR_FIFO_CLEARN_UP = 0x3B, - HW_VAR_RESTORE_HW_SEQ = 0x3C, - HW_VAR_HCI_SUS_STATE = 0x3D, - HW_VAR_CHECK_TXBUF = 0x3E, - HW_VAR_APFM_ON_MAC = 0x3F, - HW_VAR_NAV_UPPER = 0x40, - HW_VAR_C2H_HANDLE = 0x41, - HW_VAR_RPT_TIMER_SETTING = 0x42, - HW_VAR_TX_RPT_MAX_MACID = 0x43, - HW_VAR_H2C_MEDIA_STATUS_RPT = 0x44, - HW_VAR_CHK_HI_QUEUE_EMPTY = 0x45, - HW_VAR_DL_BCN_SEL = 0x46, - HW_VAR_PORT_SWITCH = 0x47, - HW_VAR_DM_IN_LPS = 0x48, - HW_VAR_SET_REQ_FW_PS = 0x49, - HW_VAR_FW_PS_STATE = 0x4A, - HW_VAR_DL_RSVD_PAGE = 0x4B, - HW_VAR_MACID_SLEEP = 0x4C, - HW_VAR_MACID_WAKEUP = 0x4D, - HW_VAR_DUMP_MAC_QUEUE_INFO = 0x4E, - HW_VAR_ASIX_IOT = 0x4F, - HW_VAR_PROMISC = 0x50, -}; - -enum _BAND_TYPE // : sint32_t -{ - BAND_ON_2_4G = 0x0, BAND_ON_5G = 0x1, BAND_ON_BOTH = 0x2, BANDMAX = 0x3, -}; -typedef enum _BAND_TYPE BAND_TYPE; - -struct _BB_REGISTER_DEFINITION { - uint32_t rfintfs; - uint32_t rfintfo; - uint32_t rfintfe; - uint32_t rf3wireOffset; - uint32_t rfHSSIPara2; - uint32_t rfLSSIReadBack; - uint32_t rfLSSIReadBackPi; -}; -typedef struct _BB_REGISTER_DEFINITION BB_REGISTER_DEFINITION_T; - -enum dot11AuthAlgrthmNum //: sint32_t -{ - dot11AuthAlgrthm_Open = 0x0, - dot11AuthAlgrthm_Shared = 0x1, - dot11AuthAlgrthm_8021X = 0x2, - dot11AuthAlgrthm_Auto = 0x3, - dot11AuthAlgrthm_WAPI = 0x4, - dot11AuthAlgrthm_MaxNum = 0x5, -}; - -enum _RT_CHANNEL_DOMAIN //: sint32_t -{ - RT_CHANNEL_DOMAIN_FCC = 0x0, - RT_CHANNEL_DOMAIN_IC = 0x1, - RT_CHANNEL_DOMAIN_ETSI = 0x2, - RT_CHANNEL_DOMAIN_SPAIN = 0x3, - RT_CHANNEL_DOMAIN_FRANCE = 0x4, - RT_CHANNEL_DOMAIN_MKK = 0x5, - RT_CHANNEL_DOMAIN_MKK1 = 0x6, - RT_CHANNEL_DOMAIN_ISRAEL = 0x7, - RT_CHANNEL_DOMAIN_TELEC = 0x8, - RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN = 0x9, - RT_CHANNEL_DOMAIN_WORLD_WIDE_13 = 0xA, - RT_CHANNEL_DOMAIN_TAIWAN = 0xB, - RT_CHANNEL_DOMAIN_CHINA = 0xC, - RT_CHANNEL_DOMAIN_SINGAPORE_INDIA_MEXICO = 0xD, - RT_CHANNEL_DOMAIN_KOREA = 0xE, - RT_CHANNEL_DOMAIN_TURKEY = 0xF, - RT_CHANNEL_DOMAIN_JAPAN = 0x10, - RT_CHANNEL_DOMAIN_FCC_NO_DFS = 0x11, - RT_CHANNEL_DOMAIN_JAPAN_NO_DFS = 0x12, - RT_CHANNEL_DOMAIN_WORLD_WIDE_5G = 0x13, - RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS = 0x14, - RT_CHANNEL_DOMAIN_WORLD_NULL = 0x20, - RT_CHANNEL_DOMAIN_ETSI1_NULL = 0x21, - RT_CHANNEL_DOMAIN_FCC1_NULL = 0x22, - RT_CHANNEL_DOMAIN_MKK1_NULL = 0x23, - RT_CHANNEL_DOMAIN_ETSI2_NULL = 0x24, - RT_CHANNEL_DOMAIN_FCC1_FCC1 = 0x25, - RT_CHANNEL_DOMAIN_WORLD_ETSI1 = 0x26, - RT_CHANNEL_DOMAIN_MKK1_MKK1 = 0x27, - RT_CHANNEL_DOMAIN_WORLD_KCC1 = 0x28, - RT_CHANNEL_DOMAIN_WORLD_FCC2 = 0x29, - RT_CHANNEL_DOMAIN_FCC2_NULL = 0x2A, - RT_CHANNEL_DOMAIN_WORLD_FCC3 = 0x30, - RT_CHANNEL_DOMAIN_WORLD_FCC4 = 0x31, - RT_CHANNEL_DOMAIN_WORLD_FCC5 = 0x32, - RT_CHANNEL_DOMAIN_WORLD_FCC6 = 0x33, - RT_CHANNEL_DOMAIN_FCC1_FCC7 = 0x34, - RT_CHANNEL_DOMAIN_WORLD_ETSI2 = 0x35, - RT_CHANNEL_DOMAIN_WORLD_ETSI3 = 0x36, - RT_CHANNEL_DOMAIN_MKK1_MKK2 = 0x37, - RT_CHANNEL_DOMAIN_MKK1_MKK3 = 0x38, - RT_CHANNEL_DOMAIN_FCC1_NCC1 = 0x39, - RT_CHANNEL_DOMAIN_FCC1_NCC2 = 0x40, - RT_CHANNEL_DOMAIN_GLOBAL_NULL = 0x41, - RT_CHANNEL_DOMAIN_ETSI1_ETSI4 = 0x42, - RT_CHANNEL_DOMAIN_FCC1_FCC2 = 0x43, - RT_CHANNEL_DOMAIN_FCC1_NCC3 = 0x44, - RT_CHANNEL_DOMAIN_WORLD_ETSI5 = 0x45, - RT_CHANNEL_DOMAIN_FCC1_FCC8 = 0x46, - RT_CHANNEL_DOMAIN_WORLD_ETSI6 = 0x47, - RT_CHANNEL_DOMAIN_WORLD_ETSI7 = 0x48, - RT_CHANNEL_DOMAIN_WORLD_ETSI8 = 0x49, - RT_CHANNEL_DOMAIN_WORLD_ETSI9 = 0x50, - RT_CHANNEL_DOMAIN_WORLD_ETSI10 = 0x51, - RT_CHANNEL_DOMAIN_WORLD_ETSI11 = 0x52, - RT_CHANNEL_DOMAIN_FCC1_NCC4 = 0x53, - RT_CHANNEL_DOMAIN_WORLD_ETSI12 = 0x54, - RT_CHANNEL_DOMAIN_FCC1_FCC9 = 0x55, - RT_CHANNEL_DOMAIN_WORLD_ETSI13 = 0x56, - RT_CHANNEL_DOMAIN_FCC1_FCC10 = 0x57, - RT_CHANNEL_DOMAIN_MKK2_MKK4 = 0x58, - RT_CHANNEL_DOMAIN_MAX = 0x59, - RT_CHANNEL_DOMAIN_REALTEK_DEFINE = 0x7F, -}; - -struct _driver_priv { - int drv_registered; - _mutex hw_init_mutex; - _mutex h2c_fwcmd_mutex; - _mutex setch_mutex; - _mutex setbw_mutex; -}; -typedef struct _driver_priv drv_priv; - -struct _ADAPTIVITY_STATISTICS { - s1Byte TH_L2H_ini_mode2; - s1Byte TH_EDCCA_HL_diff_mode2; - s1Byte TH_EDCCA_HL_diff_backup; - s1Byte IGI_Base; - u1Byte IGI_target; - u1Byte NHMWait; - s1Byte H2L_lb; - s1Byte L2H_lb; - BOOLEAN bFirstLink; - BOOLEAN bCheck; - BOOLEAN DynamicLinkAdaptivity; - u1Byte APNumTH; - u1Byte AdajustIGILevel; -}; -typedef struct _ADAPTIVITY_STATISTICS ADAPTIVITY_STATISTICS; - -struct _ODM_NOISE_MONITOR_ { - s1Byte noise[1]; - s2Byte noise_all; -}; -typedef struct _ODM_NOISE_MONITOR_ ODM_NOISE_MONITOR; -/* in rtl_bios_data.h -struct _FALSE_ALARM_STATISTICS { - u4Byte Cnt_Parity_Fail; - u4Byte Cnt_Rate_Illegal; - u4Byte Cnt_Crc8_fail; - u4Byte Cnt_Mcs_fail; - u4Byte Cnt_Ofdm_fail; - u4Byte Cnt_Ofdm_fail_pre; - u4Byte Cnt_Cck_fail; - u4Byte Cnt_all; - u4Byte Cnt_Fast_Fsync; - u4Byte Cnt_SB_Search_fail; - u4Byte Cnt_OFDM_CCA; - u4Byte Cnt_CCK_CCA; - u4Byte Cnt_CCA_all; - u4Byte Cnt_BW_USC; - u4Byte Cnt_BW_LSC; -}; -typedef struct _FALSE_ALARM_STATISTICS FALSE_ALARM_STATISTICS; -*/ - -enum _BASEBAND_CONFIG_PHY_REG_PG_VALUE_TYPE //: sint32_t -{ - PHY_REG_PG_RELATIVE_VALUE = 0x0, PHY_REG_PG_EXACT_VALUE = 0x1, -}; -typedef enum _BASEBAND_CONFIG_PHY_REG_PG_VALUE_TYPE PHY_REG_PG_TYPE; - -/* in rtl_bios_data.h -struct _atr_aligned4_ _CFO_TRACKING_ { - BOOLEAN bATCStatus; - BOOLEAN largeCFOHit; - BOOLEAN bAdjust; - u1Byte CrystalCap; - u1Byte DefXCap; - int CFO_tail[2]; - int CFO_ave_pre; - u4Byte packetCount; - u4Byte packetCount_pre; - BOOLEAN bForceXtalCap; - BOOLEAN bReset; - u1Byte CFO_TH_XTAL_HIGH; - u1Byte CFO_TH_XTAL_LOW; - u1Byte CFO_TH_ATC; -}; -typedef struct _CFO_TRACKING_ CFO_TRACKING; -*/ -/* in rtl_bios_data.h -struct _atr_aligned8_ _ROM_INFO { - u1Byte EEPROMVersion; - u1Byte CrystalCap; - u8Byte DebugComponents; - u4Byte DebugLevel; -}; -typedef struct _ROM_INFO ROM_INFO; -*/ - -typedef struct _ROM_INFO *PROM_INFO; - -typedef struct sta_info *PSTA_INFO_T; - -struct _ODM_Phy_Dbg_Info_ { - s1Byte RxSNRdB[4]; - u4Byte NumQryPhyStatus; - u4Byte NumQryPhyStatusCCK; - u4Byte NumQryPhyStatusOFDM; - u1Byte NumQryBeaconPkt; - s4Byte RxEVM[4]; -}; -typedef struct _ODM_Phy_Dbg_Info_ ODM_PHY_DBG_INFO_T; - -struct _ODM_Mac_Status_Info_ { - u1Byte test; -}; -typedef struct _ODM_Mac_Status_Info_ ODM_MAC_INFO; - -struct _atr_aligned4_ _ODM_RA_Info_ { - u1Byte RateID; - u4Byte RateMask; - u4Byte RAUseRate; - u1Byte RateSGI; - u1Byte RssiStaRA; - u1Byte PreRssiStaRA; - u1Byte SGIEnable; - u1Byte DecisionRate; - u1Byte PreRate; - u1Byte HighestRate; - u1Byte LowestRate; - u4Byte NscUp; - u4Byte NscDown; - u2Byte RTY[5]; - u4Byte TOTAL; - u2Byte DROP; - u1Byte Active; - u2Byte RptTime; - u1Byte RAWaitingCounter; - u1Byte RAPendingCounter; - u1Byte RAINFO; - u1Byte Initial_BW; - u1Byte BW_setting; - u1Byte DISPT; - u1Byte DISRA; - u1Byte Stage_RA; - u1Byte PRE_BW; - u1Byte MacID; - u1Byte Try_state; - u1Byte Try_done_cnt; - u2Byte RA_counter; - u1Byte Init_Rate_H; - u1Byte Init_Rate_M; - u1Byte Init_Rate_L; - u4Byte Total_TX; - u1Byte TRAINING_RATE; - u1Byte STOP_PT_COUNTER; - u1Byte MODE_SS; - u1Byte PT_smooth_factor; - u1Byte PTActive; - u1Byte PTTryState; - u1Byte PTStage; - u1Byte PTStopCount; - u1Byte PTPreRate; - u1Byte PTPreRssi; - u1Byte PTModeSS; - u1Byte RAstage; - u1Byte PTSmoothFactor; -}; -typedef struct _ODM_RA_Info_ ODM_RA_INFO_T; -typedef struct _ODM_RA_Info_ *PODM_RA_INFO_T; - -struct _FAST_ANTENNA_TRAINNING_ { - u1Byte Bssid[6]; - u1Byte antsel_rx_keep_0; - u1Byte antsel_rx_keep_1; - u1Byte antsel_rx_keep_2; - u4Byte antSumRSSI[7]; - u4Byte antRSSIcnt[7]; - u4Byte antAveRSSI[7]; - u1Byte FAT_State; - u4Byte TrainIdx; - u1Byte antsel_a[7]; - u1Byte antsel_b[7]; - u1Byte antsel_c[7]; - u4Byte MainAnt_Sum[7]; - u4Byte AuxAnt_Sum[7]; - u4Byte MainAnt_Cnt[7]; - u4Byte AuxAnt_Cnt[7]; - u4Byte MainAnt_Sum_CCK[7]; - u4Byte AuxAnt_Sum_CCK[7]; - u4Byte MainAnt_Cnt_CCK[7]; - u4Byte AuxAnt_Cnt_CCK[7]; - u1Byte RxIdleAnt; - BOOLEAN bBecomeLinked; - u4Byte MinMaxRSSI; - u1Byte idx_AntDiv_counter_2G; - u1Byte idx_AntDiv_counter_5G; - u4Byte AntDiv_2G_5G; - u4Byte CCK_counter_main; - u4Byte CCK_counter_aux; - u4Byte OFDM_counter_main; - u4Byte OFDM_counter_aux; -}; -typedef struct _FAST_ANTENNA_TRAINNING_ FAT_T; - -struct _Dynamic_Initial_Gain_Threshold_ { - BOOLEAN bStopDIG; - BOOLEAN bPauseDIG; - BOOLEAN bIgnoreDIG; - BOOLEAN bPSDInProgress; - u1Byte Dig_Enable_Flag; - u1Byte Dig_Ext_Port_Stage; - int RssiLowThresh; - int RssiHighThresh; - u4Byte FALowThresh; - u4Byte FAHighThresh; - u1Byte CurSTAConnectState; - u1Byte PreSTAConnectState; - u1Byte CurMultiSTAConnectState; - u1Byte PreIGValue; - u1Byte CurIGValue; - u1Byte BackupIGValue; - u1Byte BT30_CurIGI; - u1Byte IGIBackup; - s1Byte BackoffVal; - s1Byte BackoffVal_range_max; - s1Byte BackoffVal_range_min; - u1Byte rx_gain_range_max; - u1Byte rx_gain_range_min; - u1Byte Rssi_val_min; - u1Byte PreCCK_CCAThres; - u1Byte CurCCK_CCAThres; - u1Byte PreCCKPDState; - u1Byte CurCCKPDState; - u1Byte CCKPDBackup; - u1Byte LargeFAHit; - u1Byte ForbiddenIGI; - u4Byte Recover_cnt; - u1Byte DIG_Dynamic_MIN_0; - u1Byte DIG_Dynamic_MIN_1; - BOOLEAN bMediaConnect_0; - BOOLEAN bMediaConnect_1; - u4Byte AntDiv_RSSI_max; - u4Byte RSSI_max; - u1Byte *pbP2pLinkInProgress; -}; -typedef struct _Dynamic_Initial_Gain_Threshold_ DIG_T; - -struct _ODM_RATE_ADAPTIVE { - u1Byte Type; - u1Byte HighRSSIThresh; - u1Byte LowRSSIThresh; - u1Byte RATRState; - u1Byte LdpcThres; - BOOLEAN bLowerRtsRate; - BOOLEAN bUseLdpc; -}; -typedef struct _ODM_RATE_ADAPTIVE ODM_RATE_ADAPTIVE; - -struct _Dynamic_Power_Saving_ { - u1Byte PreCCAState; - u1Byte CurCCAState; - u1Byte PreRFState; - u1Byte CurRFState; - int Rssi_val_min; - u1Byte initialize; - u4Byte Reg874; - u4Byte RegC70; - u4Byte Reg85C; - u4Byte RegA74; -}; -typedef struct _Dynamic_Power_Saving_ PS_T; - -struct _Dynamic_Primary_CCA { - u1Byte PriCCA_flag; - u1Byte intf_flag; - u1Byte intf_type; - u1Byte DupRTS_flag; - u1Byte Monitor_flag; - u1Byte CH_offset; - u1Byte MF_state; -}; -typedef struct _Dynamic_Primary_CCA Pri_CCA_T; - -struct _RX_High_Power_ { - u1Byte RXHP_flag; - u1Byte PSD_func_trigger; - u1Byte PSD_bitmap_RXHP[80]; - u1Byte Pre_IGI; - u1Byte Cur_IGI; - u1Byte Pre_pw_th; - u1Byte Cur_pw_th; - BOOLEAN First_time_enter; - BOOLEAN RXHP_enable; - u1Byte TP_Mode; -}; -typedef struct _RX_High_Power_ RXHP_T; - -struct _Rate_Adaptive_Table_ { - u1Byte firstconnect; -}; -typedef struct _Rate_Adaptive_Table_ RA_T; - -struct _atr_aligned8_ _SW_Antenna_Switch_ { - u1Byte Double_chk_flag; - u1Byte try_flag; - s4Byte PreRSSI; - u1Byte CurAntenna; - u1Byte PreAntenna; - u1Byte RSSI_Trying; - u1Byte TestMode; - u1Byte bTriggerAntennaSwitch; - u1Byte SelectAntennaMap; - u1Byte RSSI_target; - u1Byte reset_idx; - u1Byte SWAS_NoLink_State; - u4Byte SWAS_NoLink_BK_Reg860; - u4Byte SWAS_NoLink_BK_Reg92c; - BOOLEAN ANTA_ON; - BOOLEAN ANTB_ON; - u1Byte Ant5G; - u1Byte Ant2G; - s4Byte RSSI_sum_A; - s4Byte RSSI_sum_B; - s4Byte RSSI_cnt_A; - s4Byte RSSI_cnt_B; - u8Byte lastTxOkCnt; - u8Byte lastRxOkCnt; - u8Byte TXByteCnt_A; - u8Byte TXByteCnt_B; - u8Byte RXByteCnt_A; - u8Byte RXByteCnt_B; - u1Byte TrafficLoad; - u1Byte Train_time; - u1Byte Train_time_flag; -}; -typedef struct _SW_Antenna_Switch_ SWAT_T; - -struct _EDCA_TURBO_ { - BOOLEAN bCurrentTurboEDCA; - BOOLEAN bIsCurRDLState; -}; -typedef struct _EDCA_TURBO_ EDCA_T; - -struct _ANT_DETECTED_INFO { - BOOLEAN bAntDetected; - u4Byte dBForAntA; - u4Byte dBForAntB; - u4Byte dBForAntO; -}; -typedef struct _ANT_DETECTED_INFO ANT_DETECTED_INFO; - -struct _IQK_MATRIX_REGS_SETTING { - BOOLEAN bIQKDone; - s4Byte Value[1][8]; -}; -typedef struct _IQK_MATRIX_REGS_SETTING IQK_MATRIX_REGS_SETTING; - -struct _atr_aligned8_ ODM_RF_Calibration_Structure { - u4Byte RegA24; - s4Byte RegE94; - s4Byte RegE9C; - s4Byte RegEB4; - s4Byte RegEBC; - u1Byte TXPowercount; - BOOLEAN bTXPowerTrackingInit; - BOOLEAN bTXPowerTracking; - u1Byte TxPowerTrackControl; - u1Byte TM_Trigger; - u1Byte InternalPA5G[2]; - u1Byte ThermalMeter[2]; - u1Byte ThermalValue; - u1Byte ThermalValue_LCK; - u1Byte ThermalValue_IQK; - u1Byte ThermalValue_DPK; - u1Byte ThermalValue_AVG[8]; - u1Byte ThermalValue_AVG_index; - u1Byte ThermalValue_RxGain; - u1Byte ThermalValue_Crystal; - u1Byte ThermalValue_DPKstore; - u1Byte ThermalValue_DPKtrack; - BOOLEAN TxPowerTrackingInProgress; - BOOLEAN bReloadtxpowerindex; - u1Byte bRfPiEnable; - u4Byte TXPowerTrackingCallbackCnt; - u1Byte bCCKinCH14; - u1Byte CCK_index[1]; - s1Byte PowerIndexOffset_CCK[1]; - s1Byte DeltaPowerIndex_CCK[1]; - s1Byte DeltaPowerIndexLast_CCK[1]; - u1Byte OFDM_index[1]; - s1Byte PowerIndexOffset_OFDM[1]; - s1Byte DeltaPowerIndex_OFDM[1]; - s1Byte DeltaPowerIndexLast_OFDM[1]; - BOOLEAN bTxPowerChanged; - s1Byte XtalOffset; - s1Byte XtalOffsetLast; - u1Byte ThermalValue_HP[8]; - u1Byte ThermalValue_HP_index; - IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[14]; - u1Byte Delta_LCK; - s1Byte BBSwingDiff2G; - s1Byte BBSwingDiff5G; - s1Byte DeltaSwingTableIdx_2GCCKA_P[30]; - s1Byte DeltaSwingTableIdx_2GCCKA_N[30]; - s1Byte DeltaSwingTableIdx_2GA_P[30]; - s1Byte DeltaSwingTableIdx_2GA_N[30]; - s1Byte DeltaSwingTableXtal_P[30]; - s1Byte DeltaSwingTableXtal_N[30]; - u4Byte RegC04; - u4Byte Reg874; - u4Byte RegC08; - u4Byte RegB68; - u4Byte RegB6C; - u4Byte Reg870; - u4Byte Reg860; - u4Byte Reg864; - BOOLEAN bIQKInitialized; - BOOLEAN bLCKInProgress; - BOOLEAN bAntennaDetected; - BOOLEAN bNeedIQK; - BOOLEAN bIQKInProgress; - u1Byte Delta_IQK; - u4Byte ADDA_backup[16]; - u4Byte IQK_MAC_backup[4]; - u4Byte IQK_BB_backup_recover[9]; - u4Byte IQK_BB_backup[9]; - u4Byte TxIQC_8723B[2][3][2]; - u4Byte RxIQC_8723B[2][2][2]; - u8Byte IQK_StartTime; - u8Byte IQK_ProgressingTime; - u4Byte LOK_Result; - u4Byte APKoutput[2][2]; - u1Byte bAPKdone; - u1Byte bAPKThermalMeterIgnore; - BOOLEAN bDPKFail; - u1Byte bDPdone; - u1Byte bDPPathAOK; - u1Byte bDPPathBOK; - u4Byte TxLOK[2]; - u4Byte DpkTxAGC; - s4Byte DpkGain; - u4Byte DpkThermal[4]; -}; -typedef struct ODM_RF_Calibration_Structure ODM_RF_CAL_T; - -struct _atr_aligned8_ DM_Out_Source_Dynamic_Mechanism_Structure { - PADAPTER Adapter; - BOOLEAN odm_ready; - PHY_REG_PG_TYPE PhyRegPgValueType; - u1Byte PhyRegPgVersion; - u4Byte NumQryPhyStatusAll; - u4Byte LastNumQryPhyStatusAll; - u4Byte RxPWDBAve; - BOOLEAN MPDIG_2G; - u1Byte Times_2G; - BOOLEAN bCckHighPower; - u1Byte RFPathRxEnable; - u1Byte ControlChannel; - u1Byte SupportPlatform; - u4Byte SupportAbility; - u1Byte SupportInterface; - u4Byte SupportICType; - u1Byte CutVersion; - u1Byte FabVersion; - u1Byte RFType; - u1Byte RFEType; - u1Byte BoardType; - u1Byte PackageType; - u1Byte TypeGLNA; - u1Byte TypeGPA; - u1Byte TypeALNA; - u1Byte TypeAPA; - u1Byte ExtLNA; - u1Byte ExtLNA5G; - u1Byte ExtPA; - u1Byte ExtPA5G; - u1Byte ExtTRSW; - u1Byte PatchID; - BOOLEAN bInHctTest; - BOOLEAN bWIFITest; - BOOLEAN bDualMacSmartConcurrent; - u4Byte BK_SupportAbility; - u1Byte AntDivType; - u1Byte odm_Regulation2_4G; - u1Byte odm_Regulation5G; - u1Byte u1Byte_temp; - PADAPTER PADAPTER_temp; - u1Byte *pMacPhyMode; - u8Byte *pNumTxBytesUnicast; - u8Byte *pNumRxBytesUnicast; - u1Byte *pWirelessMode; - u1Byte *pBandType; - u1Byte *pSecChOffset; - u1Byte *pSecurity; - u1Byte *pBandWidth; - u1Byte *pChannel; - BOOLEAN DPK_Done; - BOOLEAN *pbGetValueFromOtherMac; - PADAPTER *pBuddyAdapter; - BOOLEAN *pbMasterOfDMSP; - BOOLEAN *pbScanInProcess; - BOOLEAN *pbPowerSaving; - u1Byte *pOnePathCCA; - u1Byte *pAntennaTest; - BOOLEAN *pbNet_closed; - u1Byte *mp_mode; - u1Byte *pu1ForcedIgiLb; - BOOLEAN *pIsFcsModeEnable; - pu2Byte pForcedDataRate; - BOOLEAN bLinkInProcess; - BOOLEAN bWIFI_Direct; - BOOLEAN bWIFI_Display; - BOOLEAN bLinked; - BOOLEAN bsta_state; - u1Byte RSSI_Min; - u1Byte InterfaceIndex; - BOOLEAN bIsMPChip; - BOOLEAN bOneEntryOnly; - BOOLEAN bBtEnabled; - BOOLEAN bBtConnectProcess; - u1Byte btHsRssi; - BOOLEAN bBtHsOperation; - BOOLEAN bBtDisableEdcaTurbo; - BOOLEAN bBtLimitedDig; - u1Byte RSSI_A; - u1Byte RSSI_B; - u8Byte RSSI_TRSW; - u8Byte RSSI_TRSW_H; - u8Byte RSSI_TRSW_L; - u8Byte RSSI_TRSW_iso; - u1Byte RxRate; - BOOLEAN bNoisyState; - u1Byte TxRate; - u1Byte LinkedInterval; - u1Byte preChannel; - u4Byte TxagcOffsetValueA; - BOOLEAN IsTxagcOffsetPositiveA; - u4Byte TxagcOffsetValueB; - BOOLEAN IsTxagcOffsetPositiveB; - u8Byte lastTxOkCnt; - u8Byte lastRxOkCnt; - u4Byte BbSwingOffsetA; - BOOLEAN IsBbSwingOffsetPositiveA; - u4Byte BbSwingOffsetB; - BOOLEAN IsBbSwingOffsetPositiveB; - u1Byte antdiv_rssi; - u1Byte AntType; - u1Byte pre_AntType; - u1Byte antdiv_period; - u1Byte antdiv_select; - u1Byte NdpaPeriod; - BOOLEAN H2C_RARpt_connect; - u2Byte NHM_cnt_0; - u2Byte NHM_cnt_1; - s1Byte TH_L2H_ini; - s1Byte TH_EDCCA_HL_diff; - s1Byte TH_L2H_ini_backup; - BOOLEAN Carrier_Sense_enable; - u1Byte Adaptivity_IGI_upper; - BOOLEAN adaptivity_flag; - u1Byte DCbackoff; - BOOLEAN Adaptivity_enable; - u1Byte APTotalNum; - ADAPTIVITY_STATISTICS Adaptivity; - ODM_NOISE_MONITOR noise_level; - PSTA_INFO_T pODM_StaInfo[7]; - u2Byte CurrminRptTime; - ODM_RA_INFO_T RAInfo[7]; - BOOLEAN RaSupport88E; - ODM_PHY_DBG_INFO_T PhyDbgInfo; - ODM_MAC_INFO *pMacInfo; - FAT_T DM_FatTable; - DIG_T DM_DigTable; - PS_T DM_PSTable; - Pri_CCA_T DM_PriCCA; - RXHP_T DM_RXHP_Table; - RA_T DM_RA_Table; - PROM_INFO pROMInfo; - FALSE_ALARM_STATISTICS FalseAlmCnt; - CFO_TRACKING DM_CfoTrack; - FALSE_ALARM_STATISTICS FlaseAlmCntBuddyAdapter; - SWAT_T DM_SWAT_Table; - BOOLEAN RSSI_test; - BOOLEAN bNoBeaconIn2s; - EDCA_T DM_EDCA_Table; - u4Byte WMMEDCA_BE; - BOOLEAN *pbDriverStopped; - BOOLEAN *pbDriverIsGoingToPnpSetPowerSleep; - BOOLEAN *pinit_adpt_in_progress; - u1Byte bUseRAMask; - ODM_RATE_ADAPTIVE RateAdaptive; - ANT_DETECTED_INFO AntDetectedInfo; - ODM_RF_CAL_T RFCalibrateInfo; - u1Byte BbSwingIdxOfdm[1]; - u1Byte BbSwingIdxOfdmCurrent; - u1Byte BbSwingIdxOfdmBase[1]; - BOOLEAN BbSwingFlagOfdm; - u1Byte BbSwingIdxCck[1]; - u1Byte BbSwingIdxCckCurrent; - u1Byte BbSwingIdxCckBase[1]; - u1Byte DefaultOfdmIndex; - u1Byte DefaultCckIndex; - BOOLEAN BbSwingFlagCck; - s1Byte Absolute_OFDMSwingIdx[1]; - s1Byte Absolute_CCKSwingIdx[1]; - s1Byte Remnant_OFDMSwingIdx[1]; - s1Byte Remnant_CCKSwingIdx[1]; - s1Byte Modify_TxAGC_Value; - BOOLEAN Modify_TxAGC_Flag_PathA; - BOOLEAN Modify_TxAGC_Flag_PathB; - BOOLEAN Modify_TxAGC_Flag_PathA_CCK; -}; -typedef struct DM_Out_Source_Dynamic_Mechanism_Structure DM_ODM_T; -typedef struct DM_Out_Source_Dynamic_Mechanism_Structure *PDM_ODM_T; - -enum _PWRTRACK_CONTROL_METHOD //: sint32_t -{ - BBSWING = 0x0, TXAGC = 0x1, MIX_MODE = 0x2, -}; -typedef enum _PWRTRACK_CONTROL_METHOD PWRTRACK_METHOD; - -typedef void (*FuncSetPwr)(PDM_ODM_T, PWRTRACK_METHOD, u1Byte, u1Byte); -typedef void (*FuncIQK)(PDM_ODM_T, u1Byte, u1Byte, u1Byte); -typedef void (*FuncLCK)(PDM_ODM_T); -typedef void (*FuncSwing)(PDM_ODM_T, ps1Byte *, ps1Byte *, ps1Byte *, ps1Byte *); -typedef void (*FuncSwingXtal)(PDM_ODM_T, ps1Byte *, ps1Byte *); -typedef void (*FuncSetXtal)(PDM_ODM_T); - -struct _TXPWRTRACK_CFG { - u1Byte SwingTableSize_CCK; - u1Byte SwingTableSize_OFDM; - u1Byte Threshold_IQK; - u1Byte AverageThermalNum; - u1Byte RfPathCount; - u4Byte ThermalRegAddr; - FuncSetPwr ODM_TxPwrTrackSetPwr; - FuncIQK DoIQK; - FuncLCK PHY_LCCalibrate; - FuncSwing GetDeltaSwingTable; - FuncSwingXtal GetDeltaSwingXtalTable; - FuncSetXtal ODM_TxXtalTrackSetXtal; -}; -typedef struct _TXPWRTRACK_CFG *PTXPWRTRACK_CFG; - -struct _RSVDPAGE_LOC { - uint8_t LocProbeRsp; - uint8_t LocPsPoll; - uint8_t LocNullData; - uint8_t LocQosNull; - uint8_t LocBTQosNull; -}; -typedef struct _RSVDPAGE_LOC RSVDPAGE_LOC_8195A; -typedef struct _RSVDPAGE_LOC *PRSVDPAGE_LOC_8195A; - -enum _RT_MEDIA_STATUS //: sint32_t -{ - RT_MEDIA_DISCONNECT = 0x0, RT_MEDIA_CONNECT = 0x1, -}; - -struct _H2CParam_RsvdPage_ { - RSVDPAGE_LOC_8195A RsvdPageLoc; - uint8_t *ReservedPagePacket; - uint32_t TotalPacketLen; -}; -typedef struct _H2CParam_RsvdPage_ H2CParam_RsvdPage; -typedef struct _H2CParam_RsvdPage_ *PH2CParam_RsvdPage; - -struct _NDIS_802_11_VARIABLE_IEs { - uint8_t ElementID; - uint8_t Length; - uint8_t data[1]; -}; -typedef struct _NDIS_802_11_VARIABLE_IEs *PNDIS_802_11_VARIABLE_IEs; - -enum _NDIS_802_11_AUTHENTICATION_MODE //: sint32_t -{ - Ndis802_11AuthModeOpen = 0x0, - Ndis802_11AuthModeShared = 0x1, - Ndis802_11AuthModeAutoSwitch = 0x2, - Ndis802_11AuthModeWPA = 0x3, - Ndis802_11AuthModeWPAPSK = 0x4, - Ndis802_11AuthModeWPANone = 0x5, - Ndis802_11AuthModeWAPI = 0x6, - Ndis802_11AuthModeMax = 0x7, -}; -typedef enum _NDIS_802_11_AUTHENTICATION_MODE NDIS_802_11_AUTHENTICATION_MODE; - -enum _NDIS_802_11_WEP_STATUS //: sint32_t -{ - Ndis802_11WEPEnabled = 0x0, - Ndis802_11Encryption1Enabled = 0x0, - Ndis802_11WEPDisabled = 0x1, - Ndis802_11EncryptionDisabled = 0x1, - Ndis802_11WEPKeyAbsent = 0x2, - Ndis802_11Encryption1KeyAbsent = 0x2, - Ndis802_11WEPNotSupported = 0x3, - Ndis802_11EncryptionNotSupported = 0x3, - Ndis802_11Encryption2Enabled = 0x4, - Ndis802_11Encryption2KeyAbsent = 0x5, - Ndis802_11Encryption3Enabled = 0x6, - Ndis802_11Encryption3KeyAbsent = 0x7, - Ndis802_11_EncrypteionWAPI = 0x8, -}; -typedef enum _NDIS_802_11_WEP_STATUS NDIS_802_11_WEP_STATUS; - -struct __attribute__((packed)) __attribute__((aligned(1))) rtk_sc { - uint8_t pattern_type; - uint8_t smac[6]; - uint8_t bssid[2][6]; - uint8_t ssid[32]; - uint8_t password[64]; - uint32_t ip_addr; - uint8_t sync_pkt[9][6]; - uint8_t profile_pkt[256][6]; - uint32_t profile_pkt_len; - uint8_t plain_buf[256]; - uint32_t plain_len; - uint8_t key_buf[32]; - uint32_t key_len; - uint8_t crypt_buf[256]; - uint32_t crypt_len; - int32_t pattern_index; - struct pattern_ops *pattern[5]; - uint8_t max_pattern_num; - uint8_t pin[65]; - uint8_t default_pin[65]; - uint8_t have_pin; - uint16_t device_type; - uint8_t device_name[64]; - uint8_t bcast_crypt_buf[256]; -}; - -struct pattern_ops; - -typedef int32_t (*sc_check_pattern_call_back)(struct pattern_ops *, struct rtk_sc *); -typedef int32_t (*sc_get_cipher_info_call_back)(struct pattern_ops *, struct rtk_sc *); -typedef int32_t (*sc_generate_key_call_back)(struct pattern_ops *, struct rtk_sc *); -typedef int32_t (*sc_decode_profile_call_back)(struct pattern_ops *, struct rtk_sc *); -typedef int32_t (*sc_get_tlv_info_call_back)(struct pattern_ops *, struct rtk_sc *); - -struct pattern_ops { - uint32_t index; - uint32_t flag; - uint8_t name[32]; - sc_check_pattern_call_back check_pattern; - sc_get_cipher_info_call_back get_cipher_info; - sc_generate_key_call_back generate_key; - sc_decode_profile_call_back decode_profile; - sc_get_tlv_info_call_back get_tlv_info; -}; - -struct _atr_aligned2_ _WL_PWR_CFG_ { // __attribute__((packed))!? - uint16_t offset; - uint8_t cut_msk; - uint8_t fab_msk :4; - uint8_t interface_msk :4; - uint8_t base :4; - uint8_t cmd :4; - uint8_t msk; - uint8_t value; -}; -typedef struct _WL_PWR_CFG_ WLAN_PWR_CFG; - -struct cmd_hdl { - uint32_t parmsize; - uint8_t (*h2cfuns)(struct _ADAPTER *, uint8_t *); -}; - -struct _cmd_callback { - uint32_t cmd_code; - void (*callback)(_adapter *, struct cmd_obj *); -}; - -enum _ODM_Common_Info_Definition //: sint32_t -{ - ODM_CMNINFO_PLATFORM = 0x0, - ODM_CMNINFO_ABILITY = 0x1, - ODM_CMNINFO_INTERFACE = 0x2, - ODM_CMNINFO_MP_TEST_CHIP = 0x3, - ODM_CMNINFO_IC_TYPE = 0x4, - ODM_CMNINFO_CUT_VER = 0x5, - ODM_CMNINFO_FAB_VER = 0x6, - ODM_CMNINFO_RF_TYPE = 0x7, - ODM_CMNINFO_RFE_TYPE = 0x8, - ODM_CMNINFO_BOARD_TYPE = 0x9, - ODM_CMNINFO_PACKAGE_TYPE = 0xA, - ODM_CMNINFO_EXT_LNA = 0xB, - ODM_CMNINFO_5G_EXT_LNA = 0xC, - ODM_CMNINFO_EXT_PA = 0xD, - ODM_CMNINFO_5G_EXT_PA = 0xE, - ODM_CMNINFO_GPA = 0xF, - ODM_CMNINFO_APA = 0x10, - ODM_CMNINFO_GLNA = 0x11, - ODM_CMNINFO_ALNA = 0x12, - ODM_CMNINFO_EXT_TRSW = 0x13, - ODM_CMNINFO_PATCH_ID = 0x14, - ODM_CMNINFO_BINHCT_TEST = 0x15, - ODM_CMNINFO_BWIFI_TEST = 0x16, - ODM_CMNINFO_SMART_CONCURRENT = 0x17, - ODM_CMNINFO_DOMAIN_CODE_2G = 0x18, - ODM_CMNINFO_DOMAIN_CODE_5G = 0x19, - ODM_CMNINFO_EEPROMVERSION = 0x1A, - ODM_CMNINFO_CRYSTALCAP = 0x1B, - ODM_CMNINFO_MAC_PHY_MODE = 0x1C, - ODM_CMNINFO_TX_UNI = 0x1D, - ODM_CMNINFO_RX_UNI = 0x1E, - ODM_CMNINFO_WM_MODE = 0x1F, - ODM_CMNINFO_BAND = 0x20, - ODM_CMNINFO_SEC_CHNL_OFFSET = 0x21, - ODM_CMNINFO_SEC_MODE = 0x22, - ODM_CMNINFO_BW = 0x23, - ODM_CMNINFO_CHNL = 0x24, - ODM_CMNINFO_FORCED_RATE = 0x25, - ODM_CMNINFO_DMSP_GET_VALUE = 0x26, - ODM_CMNINFO_BUDDY_ADAPTOR = 0x27, - ODM_CMNINFO_DMSP_IS_MASTER = 0x28, - ODM_CMNINFO_SCAN = 0x29, - ODM_CMNINFO_POWER_SAVING = 0x2A, - ODM_CMNINFO_ONE_PATH_CCA = 0x2B, - ODM_CMNINFO_DRV_STOP = 0x2C, - ODM_CMNINFO_PNP_IN = 0x2D, - ODM_CMNINFO_INIT_ON = 0x2E, - ODM_CMNINFO_ANT_TEST = 0x2F, - ODM_CMNINFO_NET_CLOSED = 0x30, - ODM_CMNINFO_MP_MODE = 0x31, - ODM_CMNINFO_FORCED_IGI_LB = 0x32, - ODM_CMNINFO_P2P_LINK = 0x33, - ODM_CMNINFO_FCS_MODE = 0x34, - ODM_CMNINFO_WIFI_DIRECT = 0x35, - ODM_CMNINFO_WIFI_DISPLAY = 0x36, - ODM_CMNINFO_LINK_IN_PROGRESS = 0x37, - ODM_CMNINFO_LINK = 0x38, - ODM_CMNINFO_STATION_STATE = 0x39, - ODM_CMNINFO_RSSI_MIN = 0x3A, - ODM_CMNINFO_DBG_COMP = 0x3B, - ODM_CMNINFO_DBG_LEVEL = 0x3C, - ODM_CMNINFO_RA_THRESHOLD_HIGH = 0x3D, - ODM_CMNINFO_RA_THRESHOLD_LOW = 0x3E, - ODM_CMNINFO_RF_ANTENNA_TYPE = 0x3F, - ODM_CMNINFO_BT_ENABLED = 0x40, - ODM_CMNINFO_BT_HS_CONNECT_PROCESS = 0x41, - ODM_CMNINFO_BT_HS_RSSI = 0x42, - ODM_CMNINFO_BT_OPERATION = 0x43, - ODM_CMNINFO_BT_LIMITED_DIG = 0x44, - ODM_CMNINFO_BT_DISABLE_EDCA = 0x45, - ODM_CMNINFO_NO_BEACON_IN_2S = 0x46, - ODM_CMNINFO_STA_STATUS = 0x47, - ODM_CMNINFO_PHY_STATUS = 0x48, - ODM_CMNINFO_MAC_STATUS = 0x49, - ODM_CMNINFO_MAX = 0x4A, -}; -typedef enum _ODM_Common_Info_Definition ODM_CMNINFO_E; - -enum _ODM_Support_Ability_Definition // : sint32_t -{ - ODM_BB_DIG = 0x1, - ODM_BB_RA_MASK = 0x2, - ODM_BB_DYNAMIC_TXPWR = 0x4, - ODM_BB_FA_CNT = 0x8, - ODM_BB_RSSI_MONITOR = 0x10, - ODM_BB_CCK_PD = 0x20, - ODM_BB_ANT_DIV = 0x40, - ODM_BB_PWR_SAVE = 0x80, - ODM_BB_PWR_TRAIN = 0x100, - ODM_BB_RATE_ADAPTIVE = 0x200, - ODM_BB_PATH_DIV = 0x400, - ODM_BB_PSD = 0x800, - ODM_BB_RXHP = 0x1000, - ODM_BB_ADAPTIVITY = 0x2000, - ODM_BB_CFO_TRACKING = 0x4000, - ODM_BB_NHM_CNT = 0x8000, - ODM_BB_PRIMARY_CCA = 0x10000, - ODM_MAC_EDCA_TURBO = 0x100000, - ODM_MAC_EARLY_MODE = 0x200000, - ODM_RF_TX_PWR_TRACK = 0x1000000, - ODM_RF_RX_GAIN_TRACK = 0x2000000, - ODM_RF_CALIBRATION = 0x4000000, -}; - -enum _RF_PATH //: sint32_t -{ - RF_PATH_A = 0x0, RF_PATH_B = 0x1, RF_PATH_C = 0x2, RF_PATH_D = 0x3, -}; -typedef enum _RF_PATH RF_PATH; - -enum _EXTCHNL_OFFSET //: sint32_t -{ - EXTCHNL_OFFSET_NO_EXT = 0x0, - EXTCHNL_OFFSET_UPPER = 0x1, - EXTCHNL_OFFSET_NO_DEF = 0x2, - EXTCHNL_OFFSET_LOWER = 0x3, -}; -typedef enum _EXTCHNL_OFFSET EXTCHNL_OFFSET; - -enum MGN_RATE //: sint32_t -{ - MGN_1M = 0x2, - MGN_2M = 0x4, - MGN_5_5M = 0xB, - MGN_6M = 0xC, - MGN_9M = 0x12, - MGN_11M = 0x16, - MGN_12M = 0x18, - MGN_18M = 0x24, - MGN_24M = 0x30, - MGN_36M = 0x48, - MGN_48M = 0x60, - MGN_54M = 0x6C, - MGN_MCS32 = 0x7F, - MGN_MCS0 = 0x80, - MGN_MCS1 = 0x81, - MGN_MCS2 = 0x82, - MGN_MCS3 = 0x83, - MGN_MCS4 = 0x84, - MGN_MCS5 = 0x85, - MGN_MCS6 = 0x86, - MGN_MCS7 = 0x87, - MGN_MCS8 = 0x88, - MGN_MCS9 = 0x89, - MGN_MCS10 = 0x8A, - MGN_MCS11 = 0x8B, - MGN_MCS12 = 0x8C, - MGN_MCS13 = 0x8D, - MGN_MCS14 = 0x8E, - MGN_MCS15 = 0x8F, - MGN_MCS16 = 0x90, - MGN_MCS17 = 0x91, - MGN_MCS18 = 0x92, - MGN_MCS19 = 0x93, - MGN_MCS20 = 0x94, - MGN_MCS21 = 0x95, - MGN_MCS22 = 0x96, - MGN_MCS23 = 0x97, - MGN_MCS24 = 0x98, - MGN_MCS25 = 0x99, - MGN_MCS26 = 0x9A, - MGN_MCS27 = 0x9B, - MGN_MCS28 = 0x9C, - MGN_MCS29 = 0x9D, - MGN_MCS30 = 0x9E, - MGN_MCS31 = 0x9F, - MGN_VHT1SS_MCS0 = 0xA0, - MGN_VHT1SS_MCS1 = 0xA1, - MGN_VHT1SS_MCS2 = 0xA2, - MGN_VHT1SS_MCS3 = 0xA3, - MGN_VHT1SS_MCS4 = 0xA4, - MGN_VHT1SS_MCS5 = 0xA5, - MGN_VHT1SS_MCS6 = 0xA6, - MGN_VHT1SS_MCS7 = 0xA7, - MGN_VHT1SS_MCS8 = 0xA8, - MGN_VHT1SS_MCS9 = 0xA9, - MGN_VHT2SS_MCS0 = 0xAA, - MGN_VHT2SS_MCS1 = 0xAB, - MGN_VHT2SS_MCS2 = 0xAC, - MGN_VHT2SS_MCS3 = 0xAD, - MGN_VHT2SS_MCS4 = 0xAE, - MGN_VHT2SS_MCS5 = 0xAF, - MGN_VHT2SS_MCS6 = 0xB0, - MGN_VHT2SS_MCS7 = 0xB1, - MGN_VHT2SS_MCS8 = 0xB2, - MGN_VHT2SS_MCS9 = 0xB3, - MGN_VHT3SS_MCS0 = 0xB4, - MGN_VHT3SS_MCS1 = 0xB5, - MGN_VHT3SS_MCS2 = 0xB6, - MGN_VHT3SS_MCS3 = 0xB7, - MGN_VHT3SS_MCS4 = 0xB8, - MGN_VHT3SS_MCS5 = 0xB9, - MGN_VHT3SS_MCS6 = 0xBA, - MGN_VHT3SS_MCS7 = 0xBB, - MGN_VHT3SS_MCS8 = 0xBC, - MGN_VHT3SS_MCS9 = 0xBD, - MGN_VHT4SS_MCS0 = 0xBE, - MGN_VHT4SS_MCS1 = 0xBF, - MGN_VHT4SS_MCS2 = 0xC0, - MGN_VHT4SS_MCS3 = 0xC1, - MGN_VHT4SS_MCS4 = 0xC2, - MGN_VHT4SS_MCS5 = 0xC3, - MGN_VHT4SS_MCS6 = 0xC4, - MGN_VHT4SS_MCS7 = 0xC5, - MGN_VHT4SS_MCS8 = 0xC6, - MGN_VHT4SS_MCS9 = 0xC7, - MGN_UNKNOWN = 0xC8, -}; - -struct _RT_CHANNEL_PLAN_2G { - uint8_t Channel[14]; - uint8_t Len; -}; -typedef struct _RT_CHANNEL_PLAN_2G RT_CHANNEL_PLAN_2G; - -struct _RT_CHANNEL_PLAN_MAP { - uint8_t ChannelPlan; - uint8_t Index2G; - uint8_t PwrLmt; -}; -typedef struct _RT_CHANNEL_PLAN_MAP RT_CHANNEL_PLAN_MAP; - -typedef int (*mac_monitor_ptr)(uint8_t *, char); - -struct mlme_handler { - uint32_t num; - uint32_t (*func)(_adapter *, struct recv_frame *); -}; - -struct fwevent { - uint32_t parmsize; - void (*event_callback)(_adapter *, uint8_t *); -}; - -struct recv_buf { - _list list; - PADAPTER adapter; - uint32_t len; - uint8_t *phead; - uint8_t *pdata; - uint8_t *ptail; - uint8_t *pend; - _pkt *pskb; -}; - -struct recv_reorder_ctrl { - _adapter *padapter; - uint8_t enable; - uint16_t indicate_seq; - uint16_t wend_b; - uint8_t wsize_b; - _queue pending_recvframe_queue; - _timer reordering_ctrl_timer; -}; - -enum _ODM_RF_RADIO_PATH // : sint32_t -{ - ODM_RF_PATH_A = 0x0, - ODM_RF_PATH_B = 0x1, - ODM_RF_PATH_C = 0x2, - ODM_RF_PATH_D = 0x3, - ODM_RF_PATH_AB = 0x4, - ODM_RF_PATH_AC = 0x5, - ODM_RF_PATH_AD = 0x6, - ODM_RF_PATH_BC = 0x7, - ODM_RF_PATH_BD = 0x8, - ODM_RF_PATH_CD = 0x9, - ODM_RF_PATH_ABC = 0xA, - ODM_RF_PATH_ACD = 0xB, - ODM_RF_PATH_BCD = 0xC, - ODM_RF_PATH_ABCD = 0xD, -}; -typedef enum _ODM_RF_RADIO_PATH ODM_RF_RADIO_PATH_E; - -enum tag_PhyDM_TRx_MUX_Type //: sint32_t -{ - PhyDM_SHUTDOWN = 0x0, - PhyDM_STANDBY_MODE = 0x1, - PhyDM_TX_MODE = 0x2, - PhyDM_RX_MODE = 0x3, -}; -typedef enum tag_PhyDM_TRx_MUX_Type PhyDM_Trx_MUX_Type; - -enum tag_PhyDM_MACEDCCA_Type //: sint32_t -{ - PhyDM_IGNORE_EDCCA = 0x0, PhyDM_DONT_IGNORE_EDCCA = 0x1, -}; -typedef enum tag_PhyDM_MACEDCCA_Type PhyDM_MACEDCCA_Type; - -enum tag_ODM_PauseDIG_Type //: sint32_t -{ - ODM_PAUSE_DIG = 0x1, ODM_RESUME_DIG = 0x2, -}; -typedef enum tag_ODM_PauseDIG_Type ODM_Pause_DIG_TYPE; - -enum tag_ODM_PauseCCKPD_Type //: sint32_t -{ - ODM_PAUSE_CCKPD = 0x1, ODM_RESUME_CCKPD = 0x2, -}; -typedef enum tag_ODM_PauseCCKPD_Type ODM_Pause_CCKPD_TYPE; - -struct _ODM_Per_Pkt_Info_ { - u1Byte DataRate; - u1Byte StationID; - BOOLEAN bPacketMatchBSSID; - BOOLEAN bPacketToSelf; - BOOLEAN bPacketBeacon; -}; -typedef struct _ODM_Per_Pkt_Info_ *PODM_PACKET_INFO_T; - -enum _HAL_STATUS //: sint32_t -{ - HAL_STATUS_SUCCESS = 0x0, HAL_STATUS_FAILURE = 0x1, -}; -typedef enum _HAL_STATUS HAL_STATUS; - -struct _ODM_Phy_Status_Info_ { - u1Byte RxPWDBAll; - u1Byte SignalQuality; - u1Byte RxMIMOSignalStrength[1]; - s1Byte RecvSignalPower; - u1Byte SignalStrength; -}; -typedef struct _ODM_Phy_Status_Info_ *PODM_PHY_INFO_T; - -enum _ODM_RF_Config_Type // : sint32_t -{ - CONFIG_RF_RADIO = 0x0, CONFIG_RF_TXPWR_LMT = 0x1, -}; -typedef enum _ODM_RF_Config_Type ODM_RF_Config_Type; - -enum _ODM_BB_Config_Type //: sint32_t -{ - CONFIG_BB_PHY_REG = 0x0, - CONFIG_BB_AGC_TAB = 0x1, - CONFIG_BB_AGC_TAB_2G = 0x2, - CONFIG_BB_AGC_TAB_5G = 0x3, - CONFIG_BB_PHY_REG_PG = 0x4, - CONFIG_BB_PHY_REG_MP = 0x5, - CONFIG_BB_AGC_TAB_DIFF = 0x6, -}; -typedef enum _ODM_BB_Config_Type ODM_BB_Config_Type; - -enum _ODM_FW_Config_Type //: sint32_t -{ - CONFIG_FW_NIC = 0x0, - CONFIG_FW_NIC_2 = 0x1, - CONFIG_FW_AP = 0x2, - CONFIG_FW_MP = 0x3, - CONFIG_FW_WoWLAN = 0x4, - CONFIG_FW_WoWLAN_2 = 0x5, - CONFIG_FW_AP_WoWLAN = 0x6, - CONFIG_FW_BT = 0x7, -}; -typedef enum _ODM_FW_Config_Type ODM_FW_Config_Type; - -enum _RATE_SECTION //: sint32_t -{ - CCK = 0x0, - OFDM = 0x1, - HT_MCS0_MCS7 = 0x2, - HT_MCS8_MCS15 = 0x3, - HT_MCS16_MCS23 = 0x4, - HT_MCS24_MCS31 = 0x5, - VHT_1SSMCS0_1SSMCS9 = 0x6, - VHT_2SSMCS0_2SSMCS9 = 0x7, - VHT_3SSMCS0_3SSMCS9 = 0x8, - VHT_4SSMCS0_4SSMCS9 = 0x9, -}; -typedef enum _RATE_SECTION RATE_SECTION; - -struct map_mask_s { - uint16_t mask_start; - uint16_t mask_end; -}; - -struct _TxPowerInfo24G { - uint8_t IndexCCK_Base[1][6]; - uint8_t IndexBW40_Base[1][6]; - int8_t OFDM_Diff[1][1]; - int8_t BW20_Diff[1][1]; -}; -typedef struct _TxPowerInfo24G TxPowerInfo24G; -typedef struct _TxPowerInfo24G *PTxPowerInfo24G; - -#endif // _WLAN_LIB_H - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wifi_structures.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wifi_structures.h deleted file mode 100644 index 3634d8a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wifi_structures.h +++ /dev/null @@ -1,233 +0,0 @@ -/** - ****************************************************************************** - * @file wifi_structures.h - * @author - * @version - * @brief This file provides the data structures used for wlan API. - ****************************************************************************** - * @attention - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - * - * Copyright(c) 2016, Realtek Semiconductor Corporation. All rights reserved. - ****************************************************************************** - */ - -#ifndef _WIFI_STRUCTURES_H -#define _WIFI_STRUCTURES_H - -/** @addtogroup nic NIC - * @ingroup wlan - * @brief NIC functions - * @{ - */ - -//#include -#include "wifi_constants.h" -#include "dlist.h" -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(__IAR_SYSTEMS_ICC__)|| defined (__GNUC__) -#pragma pack(1) -#endif - -/** - * @brief The structure is used to describe the SSID. - */ -typedef struct rtw_ssid { - unsigned char len; /**< SSID length */ - unsigned char val[33]; /**< SSID name (AP name) */ -} rtw_ssid_t; -#if defined(__IAR_SYSTEMS_ICC__)|| defined (__GNUC__) -#pragma pack() -#endif - -#if defined(__IAR_SYSTEMS_ICC__)|| defined (__GNUC__) -#pragma pack(1) -#endif - -/** - * @brief The structure is used to describe the unique 6-byte MAC address. - */ -typedef struct rtw_mac { - unsigned char octet[6]; /**< Unique 6-byte MAC address */ -} rtw_mac_t; -#if defined(__IAR_SYSTEMS_ICC__)|| defined (__GNUC__) -#pragma pack() -#endif - -/** - * @brief The structure is used to describe the setting about SSID, - * security type, password and default channel, used to start AP mode. - * @note The data length of string pointed by ssid and password should not exceed 32. - */ -typedef struct rtw_ap_info { - rtw_ssid_t ssid; - rtw_security_t security_type; - unsigned char *password; - int password_len; - int channel; -}rtw_ap_info_t; - -/** - * @brief The structure is used to describe the station mode setting about SSID, - * security type and password, used when connecting to an AP. - * @note The data length of string pointed by ssid and password should not exceed 32. - */ -typedef struct rtw_network_info { - rtw_ssid_t ssid; - rtw_mac_t bssid; - rtw_security_t security_type; - unsigned char *password; - int password_len; - int key_id; -}rtw_network_info_t; - -#if defined(__IAR_SYSTEMS_ICC__) || defined(__GNUC__) -#pragma pack(1) -#endif - -/** - * @brief The structure is used to describe the scan result of the AP. - */ -typedef struct rtw_scan_result { - rtw_ssid_t SSID; /**< Service Set Identification (i.e. Name of Access Point) */ - rtw_mac_t BSSID; /**< Basic Service Set Identification (i.e. MAC address of Access Point) */ - signed short signal_strength; /**< Receive Signal Strength Indication in dBm. <-90=Very poor, >-30=Excellent */ - rtw_bss_type_t bss_type; /**< Network type */ - rtw_security_t security; /**< Security type */ - rtw_wps_type_t wps_type; /**< WPS type */ - unsigned int channel; /**< Radio channel that the AP beacon was received on */ - rtw_802_11_band_t band; /**< Radio band */ -} rtw_scan_result_t; -#if defined(__IAR_SYSTEMS_ICC__) || defined(__GNUC__) -#pragma pack() -#endif - -/** - * @brief The structure is used to describe the data needed by scan result handler function. - */ -typedef struct rtw_scan_handler_result { - rtw_scan_result_t ap_details; - rtw_bool_t scan_complete; - void* user_data; - -} rtw_scan_handler_result_t; - -#if defined(__IAR_SYSTEMS_ICC__) || defined(__GNUC__) -#pragma pack(1) -#endif - -/** - * @brief The structure is used to store the WIFI setting gotten from WIFI driver. - */ -typedef struct rtw_wifi_setting { - rtw_mode_t mode; - unsigned char ssid[33]; - unsigned char channel; - rtw_security_t security_type; - unsigned char password[65]; - unsigned char key_idx; -}rtw_wifi_setting_t; -#if defined(__IAR_SYSTEMS_ICC__) || defined(__GNUC__) -#pragma pack() -#endif - -/** - * @brief The structure is used to describe the setting when configure the network. - */ -typedef struct rtw_wifi_config { - unsigned int boot_mode; - unsigned char ssid[32]; - unsigned char ssid_len; - unsigned char security_type; - unsigned char password[65]; - unsigned char password_len; - unsigned char channel; -} rtw_wifi_config_t; - -/** - * @brief The structure is used to describe the maclist. - */ -typedef struct -{ - unsigned int count; /**< Number of MAC addresses in the list */ - rtw_mac_t mac_list[1]; /**< Variable length array of MAC addresses */ -} rtw_maclist_t; - -/** - * @brief The structure is used to describe the bss info of the network.\n - * It include the version, BSSID, beacon_period, capability, SSID, - * channel, atm_window, dtim_period, RSSI e.g. - */ -typedef struct { - unsigned int version; /**< version field */ - unsigned int length; /**< byte length of data in this record, */ - /* starting at version and including IEs */ - rtw_mac_t BSSID; - unsigned short beacon_period; /**< units are Kusec */ - unsigned short capability; /**< Capability information */ - unsigned char SSID_len; - unsigned char SSID[32]; - unsigned char channel; -// struct { -// uint32_t count; /* # rates in this set */ -// uint8_t rates[16]; /* rates in 500kbps units w/hi bit set if basic */ -// } rateset; /* supported rates */ -// rtw_chanspec_t chanspec; /* chanspec for bss */ - unsigned short atim_window; /**< units are Kusec */ - unsigned char dtim_period; /**< DTIM period */ - signed short RSSI; /**< receive signal strength (in dBm) */ - - unsigned char n_cap; /**< BSS is 802.11N Capable */ - unsigned int nbss_cap; /**< 802.11N BSS Capabilities (based on HT_CAP_*) */ - unsigned char basic_mcs[MCSSET_LEN]; /**< 802.11N BSS required MCS set */ - - unsigned short ie_offset; /**< offset at which IEs start, from beginning */ - unsigned int ie_length; /**< byte length of Information Elements */ -} rtw_bss_info_t; - -/** - * @brief The structure is used to set WIFI packet filter pattern. - */ -typedef struct { - unsigned short offset; /**< Offset in bytes to start filtering (referenced to the start of the ethernet packet) */ - unsigned short mask_size; /**< Size of the mask in bytes */ - unsigned char* mask; /**< Pattern mask bytes to be ANDed with the pattern eg. "\xff00" (must be in network byte order) */ - unsigned char* pattern; /**< Pattern bytes used to filter eg. "\x0800" (must be in network byte order) */ -} rtw_packet_filter_pattern_t; - -typedef struct ieee80211_frame_info{ - unsigned short i_fc; - unsigned short i_dur; - unsigned char i_addr1[6]; - unsigned char i_addr2[6]; - unsigned char i_addr3[6]; - unsigned short i_seq; - unsigned char bssid[6]; - unsigned char encrypt; - signed char rssi; -}ieee80211_frame_info_t; - -typedef struct { - char filter_id; - rtw_packet_filter_pattern_t patt; - rtw_packet_filter_rule_t rule; - unsigned char enable; -}rtw_packet_filter_info_t; - -typedef struct rtw_mac_filter_list{ - struct list_head node; - unsigned char mac_addr[6]; -}rtw_mac_filter_list_t; - -#ifdef __cplusplus -} -#endif - -/*\@}*/ - -#endif /* _WIFI_STRUCTURES_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wlan_basic_types.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wlan_basic_types.h deleted file mode 100644 index c186948..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wlan_basic_types.h +++ /dev/null @@ -1,610 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __WLAN_BASIC_TYPES_H__ -#define __WLAN_BASIC_TYPES_H__ - - -/* ================================================ - * Sections (1) rtl8195a and (2) other MCU based wlan driver - * For 8195a, some of the definitions are already defined in system wise "basic_types.h" - *================================================ */ -#define _SUCCESS 1 -#define _PASS 1 -#define _FAIL 0 - -//ERRNO Define -#define EPERM 1 /* Operation not permitted */ -#define ENOENT 2 /* No such file or directory */ -#define ESRCH 3 /* No such process */ -#define EINTR 4 /* Interrupted system call */ -#define EIO 5 /* I/O error */ -#define ENXIO 6 /* No such device or address */ -#define E2BIG 7 /* Arg list too long */ -#define ENOEXEC 8 /* Exec format error */ -#define EBADF 9 /* Bad file number */ -#define ECHILD 10 /* No child processes */ -#define EAGAIN 11 /* Try again */ -#define ENOMEM 12 /* Out of memory */ -#define EACCES 13 /* Permission denied */ -#define EFAULT 14 /* Bad address */ -#define ENOTBLK 15 /* Block device required */ -#define EBUSY 16 /* Device or resource busy */ -#define EEXIST 17 /* File exists */ -#define EXDEV 18 /* Cross-device link */ -#define ENODEV 19 /* No such device */ -#define ENOTDIR 20 /* Not a directory */ -#define EISDIR 21 /* Is a directory */ -#define EINVAL 22 /* Invalid argument */ -#define ENFILE 23 /* File table overflow */ -#define EMFILE 24 /* Too many open files */ -#define ENOTTY 25 /* Not a typewriter */ -#define ETXTBSY 26 /* Text file busy */ -#define EFBIG 27 /* File too large */ -#define ENOSPC 28 /* No space left on device */ -#define ESPIPE 29 /* Illegal seek */ -#define EROFS 30 /* Read-only file system */ -#define EMLINK 31 /* Too many links */ -#define EPIPE 32 /* Broken pipe */ -#define EDOM 33 /* Math argument out of domain of func */ -#define ERANGE 34 /* Math result not representable */ -#define EDEADLK 35 /* Resource deadlock would occur */ -#define ENAMETOOLONG 36 /* File name too long */ -#define ENOLCK 37 /* No record locks available */ -#define ENOSYS 38 /* Function not implemented */ -#define ENOTEMPTY 39 /* Directory not empty */ -#define ELOOP 40 /* Too many symbolic links encountered */ -#define EWOULDBLOCK EAGAIN /* Operation would block */ -#define ENOMSG 42 /* No message of desired type */ -#define EIDRM 43 /* Identifier removed */ -#define ECHRNG 44 /* Channel number out of range */ -#define EL2NSYNC 45 /* Level 2 not synchronized */ -#define EL3HLT 46 /* Level 3 halted */ -#define EL3RST 47 /* Level 3 reset */ -#define ELNRNG 48 /* Link number out of range */ -#define EUNATCH 49 /* Protocol driver not attached */ -#define ENOCSI 50 /* No CSI structure available */ -#define EL2HLT 51 /* Level 2 halted */ -#define EBADE 52 /* Invalid exchange */ -#define EBADR 53 /* Invalid request descriptor */ -#define EXFULL 54 /* Exchange full */ -#define ENOANO 55 /* No anode */ -#define EBADRQC 56 /* Invalid request code */ -#define EBADSLT 57 /* Invalid slot */ - -#define EDEADLOCK EDEADLK - -#define EBFONT 59 /* Bad font file format */ -#define ENOSTR 60 /* Device not a stream */ -#define ENODATA 61 /* No data available */ -#define ETIME 62 /* Timer expired */ -#define ENOSR 63 /* Out of streams resources */ -#define ENONET 64 /* Machine is not on the network */ -#define ENOPKG 65 /* Package not installed */ -#define EREMOTE 66 /* Object is remote */ -#define ENOLINK 67 /* Link has been severed */ -#define EADV 68 /* Advertise error */ -#define ESRMNT 69 /* Srmount error */ -#define ECOMM 70 /* Communication error on send */ -#define EPROTO 71 /* Protocol error */ -#define EMULTIHOP 72 /* Multihop attempted */ -#define EDOTDOT 73 /* RFS specific error */ -#define EBADMSG 74 /* Not a data message */ -#define EOVERFLOW 75 /* Value too large for defined data type */ -#define ENOTUNIQ 76 /* Name not unique on network */ -#define EBADFD 77 /* File descriptor in bad state */ -#define EREMCHG 78 /* Remote address changed */ -#define ELIBACC 79 /* Can not access a needed shared library */ -#define ELIBBAD 80 /* Accessing a corrupted shared library */ -#define ELIBSCN 81 /* .lib section in a.out corrupted */ -#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ -#define ELIBEXEC 83 /* Cannot exec a shared library directly */ -#define EILSEQ 84 /* Illegal byte sequence */ -#define ERESTART 85 /* Interrupted system call should be restarted */ -#define ESTRPIPE 86 /* Streams pipe error */ -#define EUSERS 87 /* Too many users */ -#define ENOTSOCK 88 /* Socket operation on non-socket */ -#define EDESTADDRREQ 89 /* Destination address required */ -#define EMSGSIZE 90 /* Message too long */ -#define EPROTOTYPE 91 /* Protocol wrong type for socket */ -#define ENOPROTOOPT 92 /* Protocol not available */ -#define EPROTONOSUPPORT 93 /* Protocol not supported */ -#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ -#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ -#define EPFNOSUPPORT 96 /* Protocol family not supported */ -#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ -#define EADDRINUSE 98 /* Address already in use */ -#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ -#define ENETDOWN 100 /* Network is down */ -#define ENETUNREACH 101 /* Network is unreachable */ -#define ENETRESET 102 /* Network dropped connection because of reset */ -#define ECONNABORTED 103 /* Software caused connection abort */ -#define ECONNRESET 104 /* Connection reset by peer */ -#define ENOBUFS 105 /* No buffer space available */ -#define EISCONN 106 /* Transport endpoint is already connected */ -#define ENOTCONN 107 /* Transport endpoint is not connected */ -#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ -#define ETOOMANYREFS 109 /* Too many references: cannot splice */ -#define ETIMEDOUT 110 /* Connection timed out */ -#define ECONNREFUSED 111 /* Connection refused */ -#define EHOSTDOWN 112 /* Host is down */ -#define EHOSTUNREACH 113 /* No route to host */ -#define EALREADY 114 /* Operation already in progress */ -#define EINPROGRESS 115 /* Operation now in progress */ -#define ESTALE 116 /* Stale NFS file handle */ -#define EUCLEAN 117 /* Structure needs cleaning */ -#define ENOTNAM 118 /* Not a XENIX named type file */ -#define ENAVAIL 119 /* No XENIX semaphores available */ -#define EISNAM 120 /* Is a named type file */ -#define EREMOTEIO 121 /* Remote I/O error */ -#define EDQUOT 122 /* Quota exceeded */ - -#define ENOMEDIUM 123 /* No medium found */ -#define EMEDIUMTYPE 124 /* Wrong medium type */ - - -#define ENSROK 0 /* DNS server returned answer with no data */ -#define ENSRNODATA 160 /* DNS server returned answer with no data */ -#define ENSRFORMERR 161 /* DNS server claims query was misformatted */ -#define ENSRSERVFAIL 162 /* DNS server returned general failure */ -#define ENSRNOTFOUND 163 /* Domain name not found */ -#define ENSRNOTIMP 164 /* DNS server does not implement requested operation */ -#define ENSRREFUSED 165 /* DNS server refused query */ -#define ENSRBADQUERY 166 /* Misformatted DNS query */ -#define ENSRBADNAME 167 /* Misformatted domain name */ -#define ENSRBADFAMILY 168 /* Unsupported address family */ -#define ENSRBADRESP 169 /* Misformatted DNS reply */ -#define ENSRCONNREFUSED 170 /* Could not contact DNS servers */ -#define ENSRTIMEOUT 171 /* Timeout while contacting DNS servers */ -#define ENSROF 172 /* End of file */ -#define ENSRFILE 173 /* Error reading file */ -#define ENSRNOMEM 174 /* Out of memory */ -#define ENSRDESTRUCTION 175 /* Application terminated lookup */ -#define ENSRQUERYDOMAINTOOLONG 176 /* Domain name is too long */ -#define ENSRCNAMELOOP 177 /* Domain name is too long */ - - - - - - - -/* ================================================ - * Sections only for other MCU based wlan driver - *========================================== ======*/ - #if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) -#include - -#define SUCCESS 0 -#define FAIL (-1) - -#ifndef TRUE - #define _TRUE 1 -#else - #define _TRUE TRUE -#endif - -#ifndef FALSE - #define _FALSE 0 -#else - #define _FALSE FALSE -#endif - -// -// pack & weak attribute -// -#if defined (__ICCARM__) - -#define RTW_PACK_STRUCT_BEGIN -#define RTW_PACK_STRUCT_STRUCT -#define RTW_PACK_STRUCT_END -#define RTW_PACK_STRUCT_USE_INCLUDES - -#define RTW_WEAK __weak - -#elif defined (__CC_ARM) - -#define RTW_PACK_STRUCT_BEGIN __packed -#define RTW_PACK_STRUCT_STRUCT -#define RTW_PACK_STRUCT_END - -#define RTW_WEAK __weak - -#elif defined (__GNUC__) - -#define RTW_PACK_STRUCT_BEGIN -#define RTW_PACK_STRUCT_STRUCT __attribute__ ((__packed__)) -#define RTW_PACK_STRUCT_END - -#define RTW_WEAK __attribute__ ((weak)) - -#elif defined(PLATFORM_WINDOWS) - -#define RTW_PACK_STRUCT_BEGIN -#define RTW_PACK_STRUCT_STRUCT -#define RTW_PACK_STRUCT_END -#define RTW_PACK_STRUCT_USE_INCLUDES -#endif - -#ifndef BIT - #define BIT(x) ((uint32_t)1 << (x)) -#endif - -#if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) -#define BIT0 0x00000001 -#define BIT1 0x00000002 -#define BIT2 0x00000004 -#define BIT3 0x00000008 -#define BIT4 0x00000010 -#define BIT5 0x00000020 -#define BIT6 0x00000040 -#define BIT7 0x00000080 -#define BIT8 0x00000100 -#define BIT9 0x00000200 -#define BIT10 0x00000400 -#define BIT11 0x00000800 -#define BIT12 0x00001000 -#define BIT13 0x00002000 -#define BIT14 0x00004000 -#define BIT15 0x00008000 -#define BIT16 0x00010000 -#define BIT17 0x00020000 -#define BIT18 0x00040000 -#define BIT19 0x00080000 -#define BIT20 0x00100000 -#define BIT21 0x00200000 -#define BIT22 0x00400000 -#define BIT23 0x00800000 -#define BIT24 0x01000000 -#define BIT25 0x02000000 -#define BIT26 0x04000000 -#define BIT27 0x08000000 -#define BIT28 0x10000000 -#define BIT29 0x20000000 -#define BIT30 0x40000000 -#define BIT31 0x80000000 -#define BIT32 0x0100000000 -#define BIT33 0x0200000000 -#define BIT34 0x0400000000 -#define BIT35 0x0800000000 -#define BIT36 0x1000000000 -#endif - - -#ifdef PLATFORM_ECOS - - #define IN - #define OUT - #define void void - #define NDIS_OID uint - #define NDIS_STATUS uint - - typedef unsigned int uint; - typedef signed int sint; - - #ifndef PVOID - typedef void * PVOID; - #endif - - - typedef unsigned int __kernel_size_t; - typedef int __kernel_ssize_t; - - typedef __kernel_size_t SIZE_T; - typedef __kernel_ssize_t SSIZE_T; - #define FIELD_OFFSET(s,field) ((SSIZE_T)&((s*)(0))->field) - -#endif - - -#ifdef PLATFORM_WINDOWS - - typedef signed char int8_t; - typedef unsigned char uint8_t; - - typedef signed short int16_t; - typedef unsigned short uint16_t; - - typedef signed long int32_t; - typedef unsigned long uint32_t; - - typedef unsigned int uint; - typedef signed int sint; - - - typedef signed long long int64_t; - typedef unsigned long long uint64_t; - - #ifdef NDIS50_MINIPORT - - #define NDIS_MAJOR_VERSION 5 - #define NDIS_MINOR_VERSION 0 - - #endif - - #ifdef NDIS51_MINIPORT - - #define NDIS_MAJOR_VERSION 5 - #define NDIS_MINOR_VERSION 1 - - #endif - - typedef NDIS_PROC proc_t; - - typedef LONG atomic_t; - -#endif - - -#ifdef PLATFORM_LINUX - - #include - #define IN - #define OUT - #define void void - #define NDIS_OID uint - #define NDIS_STATUS uint - - typedef signed int sint; - - #ifndef PVOID - typedef void * PVOID; - //#define PVOID (void *) - #endif - - typedef void (*proc_t)(void*); - - typedef __kernel_size_t SIZE_T; - typedef __kernel_ssize_t SSIZE_T; - #define FIELD_OFFSET(s,field) ((SSIZE_T)&((s*)(0))->field) - -#endif - - -#ifdef PLATFORM_FREEBSD - typedef signed char int8_t; - typedef unsigned char uint8_t; - - typedef signed short int16_t; - typedef unsigned short uint16_t; - - typedef signed int int32_t; - typedef unsigned int uint32_t; - - typedef unsigned int uint; - typedef signed int sint; - typedef long atomic_t; - - typedef signed long long int64_t; - typedef unsigned long long uint64_t; - #define IN - #define OUT - #define void void - #define NDIS_OID uint - #define NDIS_STATUS uint - - #ifndef PVOID - typedef void * PVOID; - //#define PVOID (void *) - #endif - typedef uint32_t dma_addr_t; - - typedef void (*proc_t)(void*); - - typedef unsigned int __kernel_size_t; - typedef int __kernel_ssize_t; - - typedef __kernel_size_t SIZE_T; - typedef __kernel_ssize_t SSIZE_T; - #define FIELD_OFFSET(s,field) ((SSIZE_T)&((s*)(0))->field) - -#endif - - -#define MEM_ALIGNMENT_OFFSET (sizeof (SIZE_T)) -#define MEM_ALIGNMENT_PADDING (sizeof(SIZE_T) - 1) - -#define SIZE_PTR SIZE_T -#define SSIZE_PTR SSIZE_T - -//port from fw by thomas -// TODO: Belows are Sync from SD7-Driver. It is necessary to check correctness - -/* - * Call endian free function when - * 1. Read/write packet content. - * 2. Before write integer to IO. - * 3. After read integer from IO. -*/ - -// -// Byte Swapping routine. -// -#define EF1Byte -#define EF2Byte le16_to_cpu -#define EF4Byte le32_to_cpu - -// -// Read LE format data from memory -// -#define ReadEF1Byte(_ptr) EF1Byte(*((uint8_t *)(_ptr))) -#define ReadEF2Byte(_ptr) EF2Byte(*((uint16_t *)(_ptr))) -#define ReadEF4Byte(_ptr) EF4Byte(*((uint32_t *)(_ptr))) - -// -// Write LE data to memory -// -#define WriteEF1Byte(_ptr, _val) (*((uint8_t *)(_ptr)))=EF1Byte(_val) -#define WriteEF2Byte(_ptr, _val) (*((uint16_t *)(_ptr)))=EF2Byte(_val) -#define WriteEF4Byte(_ptr, _val) (*((uint32_t *)(_ptr)))=EF4Byte(_val) - -// -// Example: -// BIT_LEN_MASK_32(0) => 0x00000000 -// BIT_LEN_MASK_32(1) => 0x00000001 -// BIT_LEN_MASK_32(2) => 0x00000003 -// BIT_LEN_MASK_32(32) => 0xFFFFFFFF -// -#define BIT_LEN_MASK_32(__BitLen) \ - (0xFFFFFFFF >> (32 - (__BitLen))) -// -// Example: -// BIT_OFFSET_LEN_MASK_32(0, 2) => 0x00000003 -// BIT_OFFSET_LEN_MASK_32(16, 2) => 0x00030000 -// -#define BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) \ - (BIT_LEN_MASK_32(__BitLen) << (__BitOffset)) - -// -// Description: -// Return 4-byte value in host byte ordering from -// 4-byte pointer in litten-endian system. -// -#define LE_P4BYTE_TO_HOST_4BYTE(__pStart) \ - (EF4Byte(*((uint32_t *)(__pStart)))) - -// -// Description: -// Translate subfield (continuous bits in little-endian) of 4-byte value in litten byte to -// 4-byte value in host byte ordering. -// -#define LE_BITS_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - ( LE_P4BYTE_TO_HOST_4BYTE(__pStart) >> (__BitOffset) ) \ - & \ - BIT_LEN_MASK_32(__BitLen) \ - ) - -// -// Description: -// Mask subfield (continuous bits in little-endian) of 4-byte value in litten byte oredering -// and return the result in 4-byte value in host byte ordering. -// -#define LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - LE_P4BYTE_TO_HOST_4BYTE(__pStart) \ - & \ - ( ~BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) ) \ - ) - -// -// Description: -// Set subfield of little-endian 4-byte value to specified value. -// -#define SET_BITS_TO_LE_4BYTE(__pStart, __BitOffset, __BitLen, __Value) \ - *((uint32_t *)(__pStart)) = \ - EF4Byte( \ - LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ - | \ - ( (((uint32_t)__Value) & BIT_LEN_MASK_32(__BitLen)) << (__BitOffset) ) \ - ); - - -#define BIT_LEN_MASK_16(__BitLen) \ - (0xFFFF >> (16 - (__BitLen))) - -#define BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) \ - (BIT_LEN_MASK_16(__BitLen) << (__BitOffset)) - -#define LE_P2BYTE_TO_HOST_2BYTE(__pStart) \ - (EF2Byte(*((uint16_t *)(__pStart)))) - -#define LE_BITS_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - ( LE_P2BYTE_TO_HOST_2BYTE(__pStart) >> (__BitOffset) ) \ - & \ - BIT_LEN_MASK_16(__BitLen) \ - ) - -#define LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - LE_P2BYTE_TO_HOST_2BYTE(__pStart) \ - & \ - ( ~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) ) \ - ) - -#define SET_BITS_TO_LE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \ - *((uint16_t *)(__pStart)) = \ - EF2Byte( \ - LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ - | \ - ( (((uint16_t)__Value) & BIT_LEN_MASK_16(__BitLen)) << (__BitOffset) ) \ - ); - -#define BIT_LEN_MASK_8(__BitLen) \ - (0xFF >> (8 - (__BitLen))) - -#define BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) \ - (BIT_LEN_MASK_8(__BitLen) << (__BitOffset)) - -#define LE_P1BYTE_TO_HOST_1BYTE(__pStart) \ - (EF1Byte(*((uint8_t *)(__pStart)))) - -#define LE_BITS_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - ( LE_P1BYTE_TO_HOST_1BYTE(__pStart) >> (__BitOffset) ) \ - & \ - BIT_LEN_MASK_8(__BitLen) \ - ) - -#define LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - LE_P1BYTE_TO_HOST_1BYTE(__pStart) \ - & \ - ( ~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) ) \ - ) - -#define SET_BITS_TO_LE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \ - *((uint8_t *)(__pStart)) = \ - EF1Byte( \ - LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ - | \ - ( (((uint8_t)__Value) & BIT_LEN_MASK_8(__BitLen)) << (__BitOffset) ) \ - ); - -//pclint -#define LE_BITS_CLEARED_TO_1BYTE_8BIT(__pStart, __BitOffset, __BitLen) \ - ( \ - LE_P1BYTE_TO_HOST_1BYTE(__pStart) \ - ) - -//pclint -#define SET_BITS_TO_LE_1BYTE_8BIT(__pStart, __BitOffset, __BitLen, __Value) \ -{ \ - *((uint8_t*)(__pStart)) = \ - EF1Byte( \ - LE_BITS_CLEARED_TO_1BYTE_8BIT(__pStart, __BitOffset, __BitLen) \ - | \ - ((uint8_t)__Value) \ - ); \ -} - -// Get the N-bytes aligment offset from the current length -#define N_BYTE_ALIGMENT(__Value, __Aligment) ((__Aligment == 1) ? (__Value) : (((__Value + __Aligment - 1) / __Aligment) * __Aligment)) - -typedef unsigned char BOOLEAN,*PBOOLEAN; - -#define TEST_FLAG(__Flag,__testFlag) (((__Flag) & (__testFlag)) != 0) - - - -#endif//! defined(CONFIG_PLATFORM_8195A) - -#endif //__WLAN_BASIC_TYPES_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wlan_bssdef.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wlan_bssdef.h deleted file mode 100644 index 47c7efc..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wlan_bssdef.h +++ /dev/null @@ -1,756 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __WLAN_BSSDEF_H__ -#define __WLAN_BSSDEF_H__ - - -#define MAX_IE_SZ 768 //384// - -#if defined(PLATFORM_LINUX) || defined(PLATFORM_ECOS) || defined(PLATFORM_FREERTOS) || defined(PLATFORM_CMSIS_RTOS) -#define NDIS_802_11_LENGTH_SSID 32 -#define NDIS_802_11_LENGTH_RATES 8 -#define NDIS_802_11_LENGTH_RATES_EX 16 - -typedef unsigned char NDIS_802_11_MAC_ADDRESS[6]; -typedef long NDIS_802_11_RSSI; // in dBm -typedef unsigned char NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; // Set of 8 data rates -typedef unsigned char NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; // Set of 16 data rates - - -typedef uint32_t NDIS_802_11_KEY_INDEX; -typedef unsigned long long NDIS_802_11_KEY_RSC; - - -typedef struct _NDIS_802_11_SSID -{ - uint32_t SsidLength; - uint8_t Ssid[NDIS_802_11_LENGTH_SSID+4]; -} -#ifdef __CC_ARM -__attribute__((packed)) -#endif -NDIS_802_11_SSID, *PNDIS_802_11_SSID; - -typedef enum _NDIS_802_11_NETWORK_TYPE -{ - Ndis802_11FH, - Ndis802_11DS, - Ndis802_11OFDM5, - Ndis802_11OFDM24, - Ndis802_11NetworkTypeMax // not a real type, defined as an upper bound -} NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE; - -typedef struct _NDIS_802_11_CONFIGURATION_FH -{ - uint32_t Length; // Length of structure - uint32_t HopPattern; // As defined by 802.11, MSB set - uint32_t HopSet; // to one if non-802.11 - uint32_t DwellTime; // units are Kusec -} -#ifdef __CC_ARM -__attribute__((packed)) -#endif -NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH; - - -/* - FW will only save the channel number in DSConfig. - ODI Handler will convert the channel number to freq. number. -*/ -typedef struct _NDIS_802_11_CONFIGURATION -{ - uint32_t Length; // Length of structure - uint32_t BeaconPeriod; // units are Kusec - uint32_t ATIMWindow; // units are Kusec - uint32_t DSConfig; // Frequency, units are kHz - NDIS_802_11_CONFIGURATION_FH FHConfig; -} -#ifdef __CC_ARM -__attribute__((packed)) -#endif -NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION; - - - -typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE -{ - Ndis802_11IBSS, - Ndis802_11Infrastructure, - Ndis802_11AutoUnknown, - Ndis802_11InfrastructureMax, // Not a real value, defined as upper bound - Ndis802_11APMode -} NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE; - - - - - -typedef struct _NDIS_802_11_FIXED_IEs -{ - uint8_t Timestamp[8]; - uint16_t BeaconInterval; - uint16_t Capabilities; -} NDIS_802_11_FIXED_IEs, *PNDIS_802_11_FIXED_IEs; - - - -typedef struct _NDIS_802_11_VARIABLE_IEs -{ - uint8_t ElementID; - uint8_t Length; - uint8_t data[1]; -} NDIS_802_11_VARIABLE_IEs, *PNDIS_802_11_VARIABLE_IEs; - - - -/* - - - -Length is the 4 bytes multiples of the sume of - sizeof (NDIS_802_11_MAC_ADDRESS) + 2 + sizeof (NDIS_802_11_SSID) + sizeof (uint32_t) -+ sizeof (NDIS_802_11_RSSI) + sizeof (NDIS_802_11_NETWORK_TYPE) + sizeof (NDIS_802_11_CONFIGURATION) -+ sizeof (NDIS_802_11_RATES_EX) + IELength - -Except the IELength, all other fields are fixed length. Therefore, we can define a marco to present the -partial sum. - -*/ -#if 0 -typedef struct _NDIS_WLAN_BSSID_EX -{ - uint32_t Length; - NDIS_802_11_MAC_ADDRESS MacAddress; - uint8_t Reserved[2];//[0]: IS beacon frame, [1]:optimum_antenna=>For antenna diversity; - NDIS_802_11_SSID Ssid; - uint32_t Privacy; - NDIS_802_11_RSSI Rssi; - NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; - NDIS_802_11_CONFIGURATION Configuration; - NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; - NDIS_802_11_RATES_EX SupportedRates; - uint32_t IELength; - uint8_t IEs[MAX_IE_SZ]; //(timestamp, beacon interval, and capability information) -} NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX; - - -typedef struct _NDIS_802_11_BSSID_LIST_EX -{ - uint32_t NumberOfItems; - NDIS_WLAN_BSSID_EX Bssid[1]; -} NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX; -#endif - -typedef enum _NDIS_802_11_AUTHENTICATION_MODE -{ - Ndis802_11AuthModeOpen, - Ndis802_11AuthModeShared, - Ndis802_11AuthModeAutoSwitch, - Ndis802_11AuthModeWPA, - Ndis802_11AuthModeWPAPSK, - Ndis802_11AuthModeWPANone, - Ndis802_11AuthModeWAPI, - Ndis802_11AuthModeMax // Not a real mode, defined as upper bound -} NDIS_802_11_AUTHENTICATION_MODE, *PNDIS_802_11_AUTHENTICATION_MODE; - -typedef enum _NDIS_802_11_WEP_STATUS -{ - Ndis802_11WEPEnabled, - Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled, - Ndis802_11WEPDisabled, - Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled, - Ndis802_11WEPKeyAbsent, - Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent, - Ndis802_11WEPNotSupported, - Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported, - Ndis802_11Encryption2Enabled, - Ndis802_11Encryption2KeyAbsent, - Ndis802_11Encryption3Enabled, - Ndis802_11Encryption3KeyAbsent, - Ndis802_11_EncrypteionWAPI -} NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS, - NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS; - - -#define NDIS_802_11_AI_REQFI_CAPABILITIES 1 -#define NDIS_802_11_AI_REQFI_LISTENINTERVAL 2 -#define NDIS_802_11_AI_REQFI_CURRENTAPADDRESS 4 - -#define NDIS_802_11_AI_RESFI_CAPABILITIES 1 -#define NDIS_802_11_AI_RESFI_STATUSCODE 2 -#define NDIS_802_11_AI_RESFI_ASSOCIATIONID 4 - -typedef struct _NDIS_802_11_AI_REQFI -{ - uint16_t Capabilities; - uint16_t ListenInterval; - NDIS_802_11_MAC_ADDRESS CurrentAPAddress; -} NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI; - -typedef struct _NDIS_802_11_AI_RESFI -{ - uint16_t Capabilities; - uint16_t StatusCode; - uint16_t AssociationId; -} NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI; - -typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION -{ - uint32_t Length; - uint16_t AvailableRequestFixedIEs; - NDIS_802_11_AI_REQFI RequestFixedIEs; - uint32_t RequestIELength; - uint32_t OffsetRequestIEs; - uint16_t AvailableResponseFixedIEs; - NDIS_802_11_AI_RESFI ResponseFixedIEs; - uint32_t ResponseIELength; - uint32_t OffsetResponseIEs; -} NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION; - -typedef enum _NDIS_802_11_RELOAD_DEFAULTS -{ - Ndis802_11ReloadWEPKeys -} NDIS_802_11_RELOAD_DEFAULTS, *PNDIS_802_11_RELOAD_DEFAULTS; - - -// Key mapping keys require a BSSID -typedef struct _NDIS_802_11_KEY -{ - uint32_t Length; // Length of this structure - uint32_t KeyIndex; - uint32_t KeyLength; // length of key in bytes - NDIS_802_11_MAC_ADDRESS BSSID; - NDIS_802_11_KEY_RSC KeyRSC; - uint8_t KeyMaterial[32]; // variable length depending on above field -} NDIS_802_11_KEY, *PNDIS_802_11_KEY; - -typedef struct _NDIS_802_11_REMOVE_KEY -{ - uint32_t Length; // Length of this structure - uint32_t KeyIndex; - NDIS_802_11_MAC_ADDRESS BSSID; -} NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY; - -typedef struct _NDIS_802_11_WEP -{ - uint32_t Length; // Length of this structure - uint32_t KeyIndex; // 0 is the per-client key, 1-N are the global keys - uint32_t KeyLength; // length of key in bytes - uint8_t KeyMaterial[16];// variable length depending on above field -} NDIS_802_11_WEP, *PNDIS_802_11_WEP; - -typedef struct _NDIS_802_11_AUTHENTICATION_REQUEST -{ - uint32_t Length; // Length of structure - NDIS_802_11_MAC_ADDRESS Bssid; - uint32_t Flags; -} NDIS_802_11_AUTHENTICATION_REQUEST, *PNDIS_802_11_AUTHENTICATION_REQUEST; - -typedef enum _NDIS_802_11_STATUS_TYPE -{ - Ndis802_11StatusType_Authentication, - Ndis802_11StatusType_MediaStreamMode, - Ndis802_11StatusType_PMKID_CandidateList, - Ndis802_11StatusTypeMax // not a real type, defined as an upper bound -} NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE; - -typedef struct _NDIS_802_11_STATUS_INDICATION -{ - NDIS_802_11_STATUS_TYPE StatusType; -} NDIS_802_11_STATUS_INDICATION, *PNDIS_802_11_STATUS_INDICATION; - -// mask for authentication/integrity fields -#define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS 0x0f -#define NDIS_802_11_AUTH_REQUEST_REAUTH 0x01 -#define NDIS_802_11_AUTH_REQUEST_KEYUPDATE 0x02 -#define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR 0x06 -#define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR 0x0E - -// MIC check time, 60 seconds. -#define MIC_CHECK_TIME 60000000 - -typedef struct _NDIS_802_11_AUTHENTICATION_EVENT -{ - NDIS_802_11_STATUS_INDICATION Status; - NDIS_802_11_AUTHENTICATION_REQUEST Request[1]; -} NDIS_802_11_AUTHENTICATION_EVENT, *PNDIS_802_11_AUTHENTICATION_EVENT; - -typedef struct _NDIS_802_11_TEST -{ - uint32_t Length; - uint32_t Type; - union - { - NDIS_802_11_AUTHENTICATION_EVENT AuthenticationEvent; - NDIS_802_11_RSSI RssiTrigger; - }tt; -} NDIS_802_11_TEST, *PNDIS_802_11_TEST; - - -#endif //end of #ifdef PLATFORM_LINUX - -#ifdef PLATFORM_FREEBSD - -#define NDIS_802_11_LENGTH_SSID 32 -#define NDIS_802_11_LENGTH_RATES 8 -#define NDIS_802_11_LENGTH_RATES_EX 16 - -typedef unsigned char NDIS_802_11_MAC_ADDRESS[6]; -typedef long NDIS_802_11_RSSI; // in dBm -typedef unsigned char NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; // Set of 8 data rates -typedef unsigned char NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; // Set of 16 data rates - - -typedef uint32_t NDIS_802_11_KEY_INDEX; -typedef unsigned long long NDIS_802_11_KEY_RSC; - - -typedef struct _NDIS_802_11_SSID -{ - uint32_t SsidLength; - uint8_t Ssid[32]; -} NDIS_802_11_SSID, *PNDIS_802_11_SSID; - -typedef enum _NDIS_802_11_NETWORK_TYPE -{ - Ndis802_11FH, - Ndis802_11DS, - Ndis802_11OFDM5, - Ndis802_11OFDM24, - Ndis802_11NetworkTypeMax // not a real type, defined as an upper bound -} NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE; - -typedef struct _NDIS_802_11_CONFIGURATION_FH -{ - uint32_t Length; // Length of structure - uint32_t HopPattern; // As defined by 802.11, MSB set - uint32_t HopSet; // to one if non-802.11 - uint32_t DwellTime; // units are Kusec -} NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH; - - -/* - FW will only save the channel number in DSConfig. - ODI Handler will convert the channel number to freq. number. -*/ -typedef struct _NDIS_802_11_CONFIGURATION -{ - uint32_t Length; // Length of structure - uint32_t BeaconPeriod; // units are Kusec - uint32_t ATIMWindow; // units are Kusec - uint32_t DSConfig; // Frequency, units are kHz - NDIS_802_11_CONFIGURATION_FH FHConfig; -} NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION; - - - -typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE -{ - Ndis802_11IBSS, - Ndis802_11Infrastructure, - Ndis802_11AutoUnknown, - Ndis802_11InfrastructureMax, // Not a real value, defined as upper bound - Ndis802_11APMode -} NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE; - - - - - -typedef struct _NDIS_802_11_FIXED_IEs -{ - uint8_t Timestamp[8]; - uint16_t BeaconInterval; - uint16_t Capabilities; -} NDIS_802_11_FIXED_IEs, *PNDIS_802_11_FIXED_IEs; - - - -typedef struct _NDIS_802_11_VARIABLE_IEs -{ - uint8_t ElementID; - uint8_t Length; - uint8_t data[1]; -} NDIS_802_11_VARIABLE_IEs, *PNDIS_802_11_VARIABLE_IEs; - - - -/* - - - -Length is the 4 bytes multiples of the sume of - sizeof (NDIS_802_11_MAC_ADDRESS) + 2 + sizeof (NDIS_802_11_SSID) + sizeof (uint32_t) -+ sizeof (NDIS_802_11_RSSI) + sizeof (NDIS_802_11_NETWORK_TYPE) + sizeof (NDIS_802_11_CONFIGURATION) -+ sizeof (NDIS_802_11_RATES_EX) + IELength - -Except the IELength, all other fields are fixed length. Therefore, we can define a marco to present the -partial sum. - -*/ -#if 0 -typedef struct _NDIS_WLAN_BSSID_EX -{ - uint32_t Length; - NDIS_802_11_MAC_ADDRESS MacAddress; - uint8_t Reserved[2];//[0]: IS beacon frame, [1]:optimum_antenna=>For antenna diversity; - NDIS_802_11_SSID Ssid; - uint32_t Privacy; - NDIS_802_11_RSSI Rssi; - NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; - NDIS_802_11_CONFIGURATION Configuration; - NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; - NDIS_802_11_RATES_EX SupportedRates; - uint32_t IELength; - uint8_t IEs[MAX_IE_SZ]; //(timestamp, beacon interval, and capability information) -} NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX; - - -typedef struct _NDIS_802_11_BSSID_LIST_EX -{ - uint32_t NumberOfItems; - NDIS_WLAN_BSSID_EX Bssid[1]; -} NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX; -#endif - -typedef enum _NDIS_802_11_AUTHENTICATION_MODE -{ - Ndis802_11AuthModeOpen, - Ndis802_11AuthModeShared, - Ndis802_11AuthModeAutoSwitch, - Ndis802_11AuthModeWPA, - Ndis802_11AuthModeWPAPSK, - Ndis802_11AuthModeWPANone, - Ndis802_11AuthModeMax // Not a real mode, defined as upper bound -} NDIS_802_11_AUTHENTICATION_MODE, *PNDIS_802_11_AUTHENTICATION_MODE; - -typedef enum _NDIS_802_11_WEP_STATUS -{ - Ndis802_11WEPEnabled, - Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled, - Ndis802_11WEPDisabled, - Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled, - Ndis802_11WEPKeyAbsent, - Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent, - Ndis802_11WEPNotSupported, - Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported, - Ndis802_11Encryption2Enabled, - Ndis802_11Encryption2KeyAbsent, - Ndis802_11Encryption3Enabled, - Ndis802_11Encryption3KeyAbsent -} NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS, - NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS; - - -#define NDIS_802_11_AI_REQFI_CAPABILITIES 1 -#define NDIS_802_11_AI_REQFI_LISTENINTERVAL 2 -#define NDIS_802_11_AI_REQFI_CURRENTAPADDRESS 4 - -#define NDIS_802_11_AI_RESFI_CAPABILITIES 1 -#define NDIS_802_11_AI_RESFI_STATUSCODE 2 -#define NDIS_802_11_AI_RESFI_ASSOCIATIONID 4 - -typedef struct _NDIS_802_11_AI_REQFI -{ - uint16_t Capabilities; - uint16_t ListenInterval; - NDIS_802_11_MAC_ADDRESS CurrentAPAddress; -} NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI; - -typedef struct _NDIS_802_11_AI_RESFI -{ - uint16_t Capabilities; - uint16_t StatusCode; - uint16_t AssociationId; -} NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI; - -typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION -{ - uint32_t Length; - uint16_t AvailableRequestFixedIEs; - NDIS_802_11_AI_REQFI RequestFixedIEs; - uint32_t RequestIELength; - uint32_t OffsetRequestIEs; - uint16_t AvailableResponseFixedIEs; - NDIS_802_11_AI_RESFI ResponseFixedIEs; - uint32_t ResponseIELength; - uint32_t OffsetResponseIEs; -} NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION; - -typedef enum _NDIS_802_11_RELOAD_DEFAULTS -{ - Ndis802_11ReloadWEPKeys -} NDIS_802_11_RELOAD_DEFAULTS, *PNDIS_802_11_RELOAD_DEFAULTS; - - -// Key mapping keys require a BSSID -typedef struct _NDIS_802_11_KEY -{ - uint32_t Length; // Length of this structure - uint32_t KeyIndex; - uint32_t KeyLength; // length of key in bytes - NDIS_802_11_MAC_ADDRESS BSSID; - NDIS_802_11_KEY_RSC KeyRSC; - uint8_t KeyMaterial[32]; // variable length depending on above field -} NDIS_802_11_KEY, *PNDIS_802_11_KEY; - -typedef struct _NDIS_802_11_REMOVE_KEY -{ - uint32_t Length; // Length of this structure - uint32_t KeyIndex; - NDIS_802_11_MAC_ADDRESS BSSID; -} NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY; - -typedef struct _NDIS_802_11_WEP -{ - uint32_t Length; // Length of this structure - uint32_t KeyIndex; // 0 is the per-client key, 1-N are the global keys - uint32_t KeyLength; // length of key in bytes - uint8_t KeyMaterial[16];// variable length depending on above field -} NDIS_802_11_WEP, *PNDIS_802_11_WEP; - -typedef struct _NDIS_802_11_AUTHENTICATION_REQUEST -{ - uint32_t Length; // Length of structure - NDIS_802_11_MAC_ADDRESS Bssid; - uint32_t Flags; -} NDIS_802_11_AUTHENTICATION_REQUEST, *PNDIS_802_11_AUTHENTICATION_REQUEST; - -typedef enum _NDIS_802_11_STATUS_TYPE -{ - Ndis802_11StatusType_Authentication, - Ndis802_11StatusType_MediaStreamMode, - Ndis802_11StatusType_PMKID_CandidateList, - Ndis802_11StatusTypeMax // not a real type, defined as an upper bound -} NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE; - -typedef struct _NDIS_802_11_STATUS_INDICATION -{ - NDIS_802_11_STATUS_TYPE StatusType; -} NDIS_802_11_STATUS_INDICATION, *PNDIS_802_11_STATUS_INDICATION; - -// mask for authentication/integrity fields -#define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS 0x0f -#define NDIS_802_11_AUTH_REQUEST_REAUTH 0x01 -#define NDIS_802_11_AUTH_REQUEST_KEYUPDATE 0x02 -#define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR 0x06 -#define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR 0x0E - -// MIC check time, 60 seconds. -#define MIC_CHECK_TIME 60000000 - -typedef struct _NDIS_802_11_AUTHENTICATION_EVENT -{ - NDIS_802_11_STATUS_INDICATION Status; - NDIS_802_11_AUTHENTICATION_REQUEST Request[1]; -} NDIS_802_11_AUTHENTICATION_EVENT, *PNDIS_802_11_AUTHENTICATION_EVENT; - -typedef struct _NDIS_802_11_TEST -{ - uint32_t Length; - uint32_t Type; - union - { - NDIS_802_11_AUTHENTICATION_EVENT AuthenticationEvent; - NDIS_802_11_RSSI RssiTrigger; - }tt; -} NDIS_802_11_TEST, *PNDIS_802_11_TEST; - - -#endif //PLATFORM_FREEBSD - -typedef struct _WLAN_PHY_INFO -{ - uint8_t SignalStrength; //(in percentage) - uint8_t SignalQuality; //(in percentage) - uint8_t Optimum_antenna; //for Antenna diversity - uint8_t Reserved_0; -} -#ifdef __CC_ARM -__attribute__((packed)) -#endif -WLAN_PHY_INFO,*PWLAN_PHY_INFO; - -typedef struct _WLAN_BCN_INFO -{ - /* these infor get from rtw_get_encrypt_info when - * * translate scan to UI */ - uint8_t encryp_protocol; //ENCRYP_PROTOCOL_E: OPEN/WEP/WPA/WPA2/WAPI - int group_cipher; //WPA/WPA2 group cipher - int pairwise_cipher; //WPA/WPA2/WEP pairwise cipher - int is_8021x; - - /* bwmode 20/40 and ch_offset UP/LOW */ - unsigned short ht_cap_info; - unsigned char ht_info_infos_0; -} WLAN_BCN_INFO,*PWLAN_BCN_INFO; - -/* temporally add #pragma pack for structure alignment issue of -* WLAN_BSSID_EX and get_WLAN_BSSID_EX_sz() -*/ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -typedef struct _WLAN_BSSID_EX -{ - uint32_t Length; - NDIS_802_11_MAC_ADDRESS MacAddress; - #ifdef CONFIG_P2P_NEW - uint8_t Reserved[1]; //[0]: IS beacon frame - uint8_t bP2pNetwork; - #else - uint8_t Reserved[2]; //[0]: IS beacon frame (padapter+163) - #endif - NDIS_802_11_SSID Ssid; - uint32_t Privacy; - NDIS_802_11_RSSI Rssi; //(in dBM,raw data ,get from PHY) - NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; - NDIS_802_11_CONFIGURATION Configuration; - NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; - NDIS_802_11_RATES_EX SupportedRates; - WLAN_PHY_INFO PhyInfo; - uint32_t IELength; - uint8_t IEs[MAX_IE_SZ]; //(timestamp, beacon interval, and capability information) -} -RTW_PACK_STRUCT_STRUCT -WLAN_BSSID_EX, *PWLAN_BSSID_EX; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - - -__inline static uint get_WLAN_BSSID_EX_sz(WLAN_BSSID_EX *bss) -{ -#if 0 - uint t_len; - - t_len = sizeof (uint32_t) - + sizeof (NDIS_802_11_MAC_ADDRESS) - + 2 - + sizeof (NDIS_802_11_SSID) - + sizeof (uint32_t) - + sizeof (NDIS_802_11_RSSI) - + sizeof (NDIS_802_11_NETWORK_TYPE) - + sizeof (NDIS_802_11_CONFIGURATION) - + sizeof (NDIS_802_11_NETWORK_INFRASTRUCTURE) - + sizeof (NDIS_802_11_RATES_EX) - //all new member add here - + sizeof(WLAN_PHY_INFO) - //all new member add here - + sizeof (uint32_t) - + bss->IELength; - return t_len; -#else - return (sizeof(WLAN_BSSID_EX) -MAX_IE_SZ + bss->IELength); -#endif -} - -struct wlan_network { - _list list; - int network_type; //refer to ieee80211.h for WIRELESS_11A/B/G - int fixed; // set to fixed when not to be removed as site-surveying - unsigned long last_scanned; //timestamp for the network - int aid; //will only be valid when a BSS is joinned. - int join_res; - WLAN_BSSID_EX network; //must be the last item - WLAN_BCN_INFO BcnInfo; -#ifdef PLATFORM_WINDOWS - unsigned char iebuf[MAX_IE_SZ]; -#endif - -}; - -enum VRTL_CARRIER_SENSE -{ - DISABLE_VCS, - ENABLE_VCS, - AUTO_VCS -}; - -enum VCS_TYPE -{ - NONE_VCS, - RTS_CTS, - CTS_TO_SELF -}; - - - - -#define PWR_CAM 0 -#define PWR_MINPS 1 -#define PWR_MAXPS 2 -#define PWR_UAPSD 3 -#define PWR_VOIP 4 - - -enum UAPSD_MAX_SP -{ - NO_LIMIT, - TWO_MSDU, - FOUR_MSDU, - SIX_MSDU -}; - - -#define NUM_PRE_AUTH_KEY 16 -#define NUM_PMKID_CACHE NUM_PRE_AUTH_KEY - -/* -* WPA2 -*/ - -#ifndef PLATFORM_OS_CE -typedef struct _PMKID_CANDIDATE { - NDIS_802_11_MAC_ADDRESS BSSID; - uint32_t Flags; -} PMKID_CANDIDATE, *PPMKID_CANDIDATE; - -typedef struct _NDIS_802_11_PMKID_CANDIDATE_LIST -{ - uint32_t Version; // Version of the structure - uint32_t NumCandidates; // No. of pmkid candidates - PMKID_CANDIDATE CandidateList[1]; -} NDIS_802_11_PMKID_CANDIDATE_LIST, *PNDIS_802_11_PMKID_CANDIDATE_LIST; - - -typedef struct _NDIS_802_11_AUTHENTICATION_ENCRYPTION -{ - NDIS_802_11_AUTHENTICATION_MODE AuthModeSupported; - NDIS_802_11_ENCRYPTION_STATUS EncryptStatusSupported; - -} NDIS_802_11_AUTHENTICATION_ENCRYPTION, *PNDIS_802_11_AUTHENTICATION_ENCRYPTION; - -typedef struct _NDIS_802_11_CAPABILITY -{ - uint32_t Length; - uint32_t Version; - uint32_t NoOfPMKIDs; - uint32_t NoOfAuthEncryptPairsSupported; - NDIS_802_11_AUTHENTICATION_ENCRYPTION AuthenticationEncryptionSupported[1]; - -} NDIS_802_11_CAPABILITY, *PNDIS_802_11_CAPABILITY; -#endif - - -#endif //#ifndef WLAN_BSSDEF_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wlan_lib.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wlan_lib.h deleted file mode 100644 index 23e8f57..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/include/wlan_lib.h +++ /dev/null @@ -1,1761 +0,0 @@ -/* - wlan_lib.h - RTL871x pvvx -*/ -#ifndef _WIFI_LIB_H -#define _WIFI_LIB_H - -//#include "wifi_constants.h" -//#include "wifi_structures.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#include "wireless.h" -#include "wifi_lib.h" - -// rom_rtw_message.o -//-------------------------------- -// freertos_ioctl.o -// Function declarations -extern int rtw_wx_set_autoreconnect(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_wx_get_autoreconnect(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_forwarding_set(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_set_ch_deauth(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int get_priv_size(int args); -extern int rtw_wx_del_custome_ie(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_wx_set_pscan_freq(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_wx_update_custome_ie(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_set_tos_value(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_get_tx_power(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_wx_set_custome_ie(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_pm_get(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_pm_set(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_wx_read32(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_wx_write32(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_wx_set_freq(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_ex_set(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wdata, char *extra); -extern void wireless_send_event(struct net_device *dev, unsigned int cmd, union iwreq_data *wrqu, char *extra); -extern void indicate_wx_custom_event(_adapter *padapter, char *msg); -extern void indicate_wx_scan_result_present(uint64_t padapter, uint64_t a2); -extern void indicate_wx_scan_complete_event(uint64_t padapter, uint64_t a2); -extern void rtw_indicate_sta_assoc(uint64_t padapter, uint64_t buf); -extern void rtw_indicate_sta_disassoc(_adapter *padapter, uint8_t *addr); -extern void rtw_indicate_wx_assoc_event(uint64_t padapter, uint64_t a2); -extern void rtw_indicate_wx_disassoc_event(uint64_t padapter, uint64_t a2); -extern int rtw_set_wpa_ie(_adapter *padapter, char *pie, int ielen); -extern void strtopsk(uint8_t *des, uint8_t *src, int len); -extern int rtw_wx_get_passphrase(struct net_device *dev, struct iw_request_info *a, union iwreq_data *wrqu, char *extra); -extern int rtw_wx_set_ap_essid(struct net_device *dev, struct iw_request_info *a, union iwreq_data *wrqu, char *extra); -extern void mac_reg_dump(_adapter *padapter); -extern void bb_reg_dump(_adapter *padapter); -extern void rf_reg_dump(_adapter *padapter); // , int a2, int a3); -extern int rtw_dbg_port(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -extern int rtw_get_auto_channel(struct net_device *dev, uint8_t *channel_set, int channel_num); -extern int rtw_set_sta_num(int ap_sta_num); -extern int rtw_del_sta(struct net_device *dev, uint8_t *sta_addr); -extern int rtw_ex_get_drv_ability(struct net_device *dev, struct iw_request_info *info, struct iw_point *wrqu, char *extra); -extern int rtw_ex_get(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wdata, char *extra); -extern void *rtw_ioctl(struct net_device *dev, struct iwreq *rq, int cmd); -// Data declarations -extern uint8_t g_user_ap_sta_num; // = 5u; -extern const struct iw_priv_args rtw_private_args[26]; /* = -{ - { 35808u, 10239u, 0u, "write" }, - { 35809u, 10239u, 10256u, "read" }, - { 35819u, 10239u, 0u, "dbg" }, - { 35830u, 8256u, 0u, "pm_set" }, - { 35831u, 8256u, 0u, "pm_get" }, - { 35840u, 10239u, 0u, "PartialScan" }, - { 35841u, 10239u, 0u, "SetAutoRecnt" }, - { 35842u, 10239u, 10239u, "GetAutoRecnt" }, - { 35843u, 26623u, 0u, "SetCusIE" }, - { 35844u, 26623u, 0u, "UpdateIE" }, - { 35845u, 0u, 0u, "DelIE" }, - { 35846u, 8193u, 0u, "forwarding_set" }, - { 35847u, 10239u, 10239u, "get_tx_power" }, - { 35848u, 10239u, 0u, "set_tos_value" }, - { 35849u, 8193u, 0u, "SetChDeauth" }, - { 35822u, 9216u, 0u, "" }, - { 35823u, 9216u, 10239u, "" }, - { 0u, 9216u, 0u, "write_mac" }, - { 1u, 9216u, 0u, "set_ch_plan" }, - { 2u, 9216u, 10239u, "read_mac" }, - { 3u, 9216u, 10239u, "txpower" }, - { 4u, 9216u, 10239u, "get_client_list" }, - { 5u, 9216u, 10239u, "get_ap_info" }, - { 6u, 9216u, 10239u, "get_security" }, - { 8u, 9216u, 10239u, "get_drv_ability" }, - { 9u, 9216u, 10239u, "get_ch_plan" } -}; */ -extern iw_handler rtw_private_handler[17]; /* = -{ - (iw_handler)0x58D, - (iw_handler)0x4E1, - (iw_handler)0xD59, - (iw_handler)0x42D, - (iw_handler)0x3E9, - (iw_handler)0xE5, - (iw_handler)5, - (iw_handler)0x33, - (iw_handler)0x33D, - (iw_handler)0x167, - (iw_handler)0x99, - (iw_handler)0x41, - (iw_handler)0x1F9, - (iw_handler)0x1D9, - (iw_handler)0x63, - (iw_handler)0x699, - (iw_handler)0x165D -}; */ -extern char iw_priv_type_size[8]; // = { '\0', '\x01', '\x01', '\0', '\x04', '\b', '\x10', '\0' }; -//-------------------------------- -// freertos_intfs.o -// Function declarations -extern struct net_device_stats *rtw_net_get_stats(struct net_device *pnetdev); -extern int netdev_if2_close(struct net_device *pnetdev); -extern int netdev_close(struct net_device *pnetdev); -extern void rtw_if1_deinit(PADAPTER if1); -extern void rtw_reset_securitypriv(_adapter *adapter); -extern void rtw_os_indicate_disconnect(_adapter *adapter); -extern int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname); -extern struct net_device *rtw_init_netdev(_adapter *old_padapter); -extern int rtw_init_io_priv(_adapter *padapter, void (*set_intf_ops)(struct _io_ops *)); -extern _adapter *rtw_drv_if2_init(_adapter *primary_padapter, char *name, void (*set_intf_ops)(struct _io_ops *)); -extern void rtw_drv_if2_stop(_adapter *if2); -extern void rtw_drv_if2_free(_adapter *primary_padapter); -extern init_done_ptr netdev_open(struct net_device *pnetdev); -extern int netdev_if2_open(struct net_device *pnetdev); -extern int netdev_if2_open(struct net_device *pnetdev); -extern init_done_ptr netdev_open(struct net_device *pnetdev); -extern struct net_device *rtw_drv_probe(struct net_device *parent_dev, uint32_t mode); -extern int rtw_dev_remove(struct net_device *pnetdev); -extern void rtw_drv_entry(); -extern void rtw_drv_halt(); -// Data declarations -extern init_done_ptr p_wlan_init_done_callback; -extern uint8_t rtw_power_percentage_idx; -extern init_done_ptr p_wlan_uart_adapter_callback; -extern uint8_t rtw_adaptivity_en; -extern uint8_t rtw_adaptivity_mode; -extern int8_t rtw_adaptivity_th_l2h_ini; -extern drv_priv drvpriv; -//-------------------------------- -// hal_com.o -extern void dump_chip_info(int a1, int a2, int a3, int a4, HAL_VERSION ChipVersion); -extern int hal_com_get_channel_plan(_adapter *padapter, uint8_t hw_channel_plan, int sw_channel_plan, int def_channel_plan, BOOLEAN AutoLoadFail); -extern int HAL_IsLegalChannel(_adapter *Adapter, uint32_t Channel); -extern int MRateToHwRate(uint8_t rate); -extern signed int HwRateToMRate(uint8_t rate); -extern void HalSetBrateCfg(_adapter *Adapter, uint8_t *mBratesOS, uint16_t *pBrateCfg); -extern signed int Hal_MappingOutPipe(_adapter *pAdapter, uint8_t NumOutPipe); -extern void hal_init_macaddr(_adapter *adapter); -extern void hw_var_port_switch(_adapter *adapter); -extern void SetHwReg(PADAPTER padapter, int variable, uint8_t *val); -extern signed int eqNByte(uint8_t *str1, uint8_t *str2, uint32_t num); -extern signed int GetU1ByteIntegerFromStringInDecimal(char *Str, uint8_t *pInt); -extern void switch_power_saving_mode(_adapter *padapter, int benable); -extern void rtw_bb_rf_gain_offset(_adapter *padapter); -// Data declarations -extern uint8_t CSWTCH_15[132]; -extern uint8_t CSWTCH_17[19]; -//-------------------------------- -// HalHWImg8195A_MAC.o -// Function declarations -extern void ODM_ReadAndConfig_MP_8195A_MAC_REG(PDM_ODM_T pDM_Odm); -extern signed int ODM_GetVersion_MP_8195A_MAC_REG(); // return 26; -// Data declarations -extern uint32_t Array_MP_8195A_MAC_REG[194]; -//-------------------------------- -// HalHWImg8195A_RF.o -// Function declarations -extern signed int CheckPositive(PDM_ODM_T pDM_Odm, const u4Byte Condition1, const u4Byte Condition2, const u4Byte Condition3, const u4Byte Condition4); -extern void ODM_ReadAndConfig_MP_8195A_RadioA(PDM_ODM_T pDM_Odm); -extern signed int ODM_GetVersion_MP_8195A_RadioA(); -extern void ODM_ReadAndConfig_MP_8195A_RADIO_DIFF(PDM_ODM_T pDM_Odm, u4Byte *Array, u4Byte ArrayLen, u4Byte a4); -extern signed int ODM_GetVersion_MP_8195A_RADIO_DIFF(); -extern void ODM_ReadAndConfig_MP_8195A_TxPowerTrack_QFN48(PDM_ODM_T pDM_Odm); -extern void ODM_ReadAndConfig_MP_8195A_TxPowerTrack_QFN56(PDM_ODM_T pDM_Odm); -extern void ODM_ReadAndConfig_MP_8195A_TxPowerTrack_TFBGA96(PDM_ODM_T pDM_Odm); -extern void ODM_ReadAndConfig_MP_8195A_TXPWR_LMT(PDM_ODM_T pDM_Odm); -extern void ODM_ReadAndConfig_MP_8195A_TxXtalTrack(PDM_ODM_T pDM_Odm); -// Data declarations -extern uint8_t gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_TFBGA96_8195A[32]; -extern uint8_t gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_TFBGA96_8195A[32]; -extern uint8_t gDeltaSwingTableXtal_MP_N_TxXtalTrack_8195A[30]; -extern uint8_t gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_QFN56_8195A[30]; -extern uint8_t gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_QFN48_8195A[30]; -extern uint8_t gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_QFN56_8195A[30]; -extern const uint8_t Array_MP_8195A_TXPWR_LMT[1176]; -extern uint8_t gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_QFN56_8195A[30]; -extern uint32_t Array_MP_8195A_RadioA[370]; -extern uint8_t gDeltaSwingTableXtal_MP_P_TxXtalTrack_8195A[30]; -extern uint8_t gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_TFBGA96_8195A[32]; -extern uint8_t gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_QFN48_8195A[30]; -//-------------------------------- -// HalPhyRf_8195A.o -// Function declarations -extern void GetDeltaSwingTable_8195A(PDM_ODM_T pDM_Odm, ps1Byte *TemperatureUP_A, ps1Byte *TemperatureDOWN_A, ps1Byte *TemperatureUP_B, ps1Byte *TemperatureDOWN_B); -extern void GetDeltaSwingXtalTable_8195A(PDM_ODM_T pDM_Odm, ps1Byte *TemperatureUP_Xtal, ps1Byte *TemperatureDOWN_Xtal); -extern void ODM_TxXtalTrackSetXtal_8195A(PDM_ODM_T pDM_Odm); -extern void setIqkMatrix_8195A(PDM_ODM_T pDM_Odm, int OFDM_index, int RFPath, s4Byte IqkResult_X, s4Byte IqkResult_Y); -extern void Hal_MPT_CCKTxPowerAdjust(PADAPTER Adapter); -extern void ODM_TxPwrTrackSetPwr_8195A(PDM_ODM_T pDM_Odm, PWRTRACK_METHOD Method, int RFPath, uint8_t ChannelMappedIndex); -extern void ConfigureTxpowerTrack_8195A(PTXPWRTRACK_CFG pConfig); -extern int phy_PathA_IQK_8195A(PADAPTER pAdapter, BOOLEAN configPathB); -extern signed int phy_PathA_RxIQK8195A(PADAPTER pAdapter, BOOLEAN configPathB); -extern int phy_PathB_IQK_8195A(PADAPTER pAdapter); -extern signed int phy_PathB_RxIQK8195A(PADAPTER pAdapter, BOOLEAN configPathB); -extern void PHY_PathAFillIQKMatrix8195A(PADAPTER pAdapter, int bIQKOK, s4Byte (*result)[8], int final_candidate, BOOLEAN bTxOnly); -extern void PHY_PathBFillIQKMatrix8195A(PADAPTER pAdapter, int bIQKOK, s4Byte (*result)[8], int final_candidate, BOOLEAN bTxOnly); -extern signed int ODM_CheckPowerStatus(PADAPTER Adapter); -extern void PHY_SaveADDARegisters8195A(PADAPTER pAdapter, pu4Byte ADDAReg, pu4Byte ADDABackup, u4Byte RegisterNum); -extern void PHY_SaveMACRegisters8195A(PADAPTER pAdapter, pu4Byte MACReg, pu4Byte MACBackup); -extern void PHY_ReloadADDARegisters8195A(PADAPTER pAdapter, pu4Byte ADDAReg, pu4Byte ADDABackup, u4Byte RegiesterNum); -extern void PHY_ReloadMACRegisters8195A(PADAPTER pAdapter, pu4Byte MACReg, pu4Byte MACBackup); -extern void PHY_PathADDAOn8195A(PADAPTER pAdapter, pu4Byte ADDAReg, BOOLEAN isPathAOn, int is2T); -extern void PHY_MACSettingCalibration8195A(PADAPTER pAdapter, pu4Byte MACReg, pu4Byte MACBackup); -extern void PHY_PathAStandBy8195A(PADAPTER pAdapter); -extern void PHY_PIModeSwitch8195A(PADAPTER pAdapter, int PIMode); -extern signed int phy_SimularityCompare_8195A(PADAPTER pAdapter, s4Byte (*result)[8], int c1, int c2); -extern void phy_IQCalibrate_8195A(PADAPTER pAdapter, s4Byte (*result)[8], int t, int is2T); -extern void phy_LCCalibrate_8195A(PDM_ODM_T pDM_Odm, BOOLEAN is2T); -extern void PHY_LCCalibrate_8195A(PDM_ODM_T pDM_Odm); -extern void PHY_IQCalibrate_8195A(PADAPTER pAdapter, int bReCovery, int bRestore); -extern void DoIQK_8195A(PDM_ODM_T pDM_Odm, uint8_t DeltaThermalIndex, uint8_t ThermalValue, uint8_t Threshold); -extern void phy_SetRFPathSwitch_8195A(PADAPTER pAdapter, int bMain, BOOLEAN is2T); -extern void PHY_SetRFPathSwitch_8195A(PADAPTER pAdapter, int bMain); -//-------------------------------- -// rtk_wlan_if.o -// Function declarations -extern void timer_wrapper(_timerHandle timer_hdl); -extern struct net_device *alloc_etherdev(int sizeof_priv); -extern void free_netdev(struct net_device *dev); -extern int dev_alloc_name(struct net_device *net_dev, const char *ifname); -extern void init_timer_wrapper(); -extern void deinit_timer_wrapper(); -extern void init_timer(struct timer_list *timer); -extern void mod_timer(struct timer_list *timer, uint32_t delay_time_ms); -extern BOOL timer_pending(const struct timer_list *timer); -extern void cancel_timer_ex(struct timer_list *timer); -extern void del_timer_sync(struct timer_list *timer); -extern void rtw_init_timer(_timer *ptimer, void *adapter, TIMER_FUN pfunc, void *cntx, const char *name); -extern uint8_t rtw_cancel_timer(_timer *ptimer); -extern BOOL rltk_get_idx_bydev(struct net_device *dev); -extern int rltk_wlan_init(int idx_wlan, rtw_mode_t mode); -extern void rltk_wlan_deinit(); -extern int rltk_wlan_start(int idx_wlan); -extern int rltk_wlan_check_isup(int idx); -extern void rltk_wlan_tx_inc(int idx); -extern void rltk_wlan_tx_dec(int idx); -extern struct sk_buff *rltk_wlan_get_recv_skb(int idx); -extern struct sk_buff *rltk_wlan_alloc_skb(unsigned int total_len); -extern void rltk_wlan_send_skb(int idx, struct sk_buff *skb); -extern void rltk_netif_rx(struct sk_buff *skb); -extern int rltk_del_station(const char *ifname, uint8_t *hwaddr); -extern int rltk_get_auto_chl(const char *ifname, uint8_t *channel_set, int channel_num); -extern int rltk_set_tx_power_percentage(rtw_tx_pwr_percentage_t power_percentage_idx); -extern int rltk_wlan_control(unsigned long cmd, void *data); -extern unsigned char rltk_wlan_running(unsigned char idx); -extern void rltk_wlan_statistic(unsigned char idx); -extern int rltk_wlan_handshake_done(); -extern int rltk_wlan_rf_on(); -extern int rltk_wlan_rf_off(); -extern int rltk_wlan_check_bus(); -extern int rltk_wlan_wireless_mode(uint8_t mode); -extern int rltk_wlan_set_wps_phase(unsigned char is_trigger_wps); -extern void rltk_wlan_PRE_SLEEP_PROCESSING(); -extern int rltk_wlan_is_connected_to_ap(); -extern int rtw_ps_enable(int enable); -extern int rltk_wifi_fw_test(int argc, char **argv); -// Data declarations -extern _list timer_table; -extern Rltk_wlan_t rltk_wlan_info[2]; // in wrapper.h -extern int timer_used_num; -extern int max_timer_used_num; -//-------------------------------- -// rtl8195a_cmd.o -// Function declarations -extern int32_t FillH2CCmd8195A(PADAPTER padapter, int ElementID, uint64_t CmdLen); -extern void rtl8195a_set_FwRsvdPage_cmd(PADAPTER padapter, PH2CParam_RsvdPage pRsvdPage); -extern void rtl8195a_set_FwMediaStatusRpt_cmd(PADAPTER padapter, int mstatus, int macid); -extern void rtl8195a_set_FwMacIdConfig_cmd(_adapter *padapter, int mac_id, int raid, int bw, uint8_t sgi, uint32_t mask); -extern void rtl8195a_set_FwPwrMode_cmd(PADAPTER padapter, int psmode); -extern void rtl8195a_download_rsvd_page(PADAPTER padapter, int mstatus); -extern void rtl8195a_set_FwJoinBssRpt_cmd(PADAPTER padapter, int mstatus); -extern void rtl8195a_Add_RateATid(PADAPTER pAdapter, uint32_t bitmap, uint8_t *arg_ary, int rssi_level); -extern PADAPTER rtl8195a_set_BcnIgnoreEDCCA_cmd(PADAPTER result, int enable, int a3); -//-------------------------------- -// rtl8195a_rf6052.o -// Function declarations -extern int PHY_ConfigRFWithTxPwrTrackParaFile(PADAPTER Adapter, char *pFileName); -extern void PHY_RF6052SetBandwidth8195A(PADAPTER Adapter, CHANNEL_WIDTH Bandwidth); -extern int PHY_RF6052_Config8195A(PADAPTER Adapter); -//-------------------------------- -// rtw_efuse.o -// Function declarations -extern void Efuse_PowerSwitch(PADAPTER pAdapter, uint8_t bWrite, uint8_t PwrState); -extern int Efuse_GetCurrentSize(PADAPTER pAdapter, uint8_t efuseType, BOOLEAN bPseudoTest); -extern int Efuse_CalculateWordCnts(uint8_t word_en); -extern void EFUSE_GetEfuseDefinition(PADAPTER pAdapter, int efuseType, uint8_t type, void *pOut, BOOLEAN bPseudoTest); -extern int efuse_OneByteRead(PADAPTER pAdapter, int addr, uint8_t *data, int bPseudoTest); -extern int efuse_read8(PADAPTER padapter, int address, uint8_t *value); -extern int efuse_OneByteWrite(PADAPTER pAdapter, int addr, int data, int bPseudoTest); -extern int efuse_write8(PADAPTER padapter, int address, uint8_t *value); -extern int Efuse_PgPacketWrite(PADAPTER pAdapter, int offset, int word_en, uint8_t *data, BOOLEAN bPseudoTest); -extern void efuse_WordEnableDataRead(uint8_t word_en, uint8_t *sourdata, uint8_t *targetdata); -extern int Efuse_WordEnableDataWrite(PADAPTER pAdapter, int efuse_addr, uint8_t word_en, uint8_t *data, BOOLEAN bPseudoTest); -extern int rtw_efuse_access(PADAPTER padapter, int bWrite, int start_addr, int cnts, uint8_t *data); -extern signed int efuse_GetCurrentSize(PADAPTER padapter, uint16_t *size); -extern signed int rtw_efuse_map_read(PADAPTER padapter, int addr, int cnts, uint8_t *data); -extern signed int rtw_efuse_map_write(PADAPTER padapter, int addr, int cnts, uint8_t *data); -extern void Efuse_ReadAllMap(PADAPTER pAdapter, int efuseType, uint8_t *Efuse, BOOLEAN bPseudoTest); -extern void EFUSE_ShadowRead(PADAPTER pAdapter, int Type, int Offset, uint32_t *Value); -extern void EFUSE_ShadowMapUpdate(PADAPTER pAdapter, int efuseType, BOOLEAN bPseudoTest, int a4); -//-------------------------------- -// rtw_ieee80211.o -// Function declarations -extern void rtw_macaddr_cfg(uint8_t *mac_addr, int a2); -extern int rtw_get_cipher_info(struct wlan_network *pnetwork); -extern void rtw_get_bcn_info(struct wlan_network *pnetwork); -//-------------------------------- -// rtw_wlan_util.o -// Function declarations -extern int cckrates_included(uint8_t *rate, int ratelen); -extern int cckratesonly_included(uint8_t *rate, int ratelen); -extern signed int networktype_to_raid_ex(PADAPTER padapter, int network_type); -extern signed int judge_network_type(_adapter *padapter, uint8_t *rate, int ratelen); -extern int ratetbl_val_2wifirate(uint8_t rate); -extern int is_basicrate(_adapter *padapter, int rate); -extern int ratetbl2rateset(_adapter *padapter, uint8_t *rateset); -extern void get_rate_set(_adapter *padapter, uint8_t *pbssrate, int *bssrate_len, int a4); -extern void UpdateBrateTbl(PADAPTER Adapter, uint8_t *mBratesOS); -extern void UpdateBrateTblForSoftAP(uint8_t *bssrateset, uint32_t bssratelen); -extern void Save_DM_Func_Flag(_adapter *padapter, int a2, int a3); -extern void Restore_DM_Func_Flag(_adapter *padapter); -extern void Switch_DM_Func(_adapter *padapter, uint32_t mode, int enable); -extern void Set_MSR(_adapter *padapter, uint8_t type); -extern int set_opmode(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype); -extern void SelectChannel(_adapter *padapter, int channel); -extern void SetBWMode(_adapter *padapter, int bwmode, int channel_offset); -extern void set_channel_bwmode(_adapter *padapter, int channel, int channel_offset, int bwmode); -extern uint8_t *get_my_bssid(WLAN_BSSID_EX *pnetwork); -extern int get_beacon_interval(WLAN_BSSID_EX *bss, int a2, int a3); -extern int is_client_associated_to_ap(int result); -extern BOOL is_client_associated_to_ibss(_adapter *padapter); -extern int is_IBSS_empty(_adapter *padapter); -extern unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval); -extern void invalidate_cam_all(_adapter *padapter); -extern void write_cam(_adapter *padapter, uint8_t entry, int ctrl, uint8_t *mac, uint8_t *key); -extern void clear_cam_entry(_adapter *padapter, uint8_t entry); -extern void flush_all_cam_entry(_adapter *padapter); -extern int WMM_param_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); -extern void WMMOnAssocRsp(_adapter *padapter); -extern void HT_caps_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); -extern void HT_info_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); -extern void HTOnAssocRsp(_adapter *padapter); -extern void ERP_IE_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); -extern void VCS_update(_adapter *padapter, struct sta_info *psta); -extern int rtw_check_bcn_info(_adapter *Adapter, uint8_t *pframe, uint32_t packet_len); -extern void update_beacon_info(_adapter *padapter, uint8_t *pframe, unsigned int pkt_len, struct sta_info *psta); -extern signed int is_ap_in_tkip(_adapter *padapter); -extern int wifirate2_ratetbl_inx(uint8_t rate); -extern int update_basic_rate(uint8_t *ptn, unsigned int ptn_sz); -extern int update_supported_rate(uint8_t *ptn, unsigned int ptn_sz); -extern int update_MCS_rate(struct HT_caps_element *pHT_caps); -extern int support_short_GI(_adapter *padapter, struct HT_caps_element *pHT_caps); -extern int get_highest_rate_idx(uint32_t mask); -extern void Update_RA_Entry(_adapter *padapter, struct sta_info *psta); -extern void enable_rate_adaptive(_adapter *padapter, struct sta_info *psta); -extern void set_sta_rate(_adapter *padapter, struct sta_info *psta); -extern void update_tx_basic_rate(_adapter *padapter, int wirelessmode); -extern signed int check_assoc_AP(uint8_t *pframe, unsigned int len); -extern void update_IOT_info(_adapter *padapter); -extern void update_capinfo(PADAPTER Adapter, uint16_t updateCap); -extern void update_wireless_mode(_adapter *padapter, uint32_t a2, int a3); -extern void update_bmc_sta_support_rate(_adapter *padapter, uint32_t mac_id); -extern void update_TSF(struct mlme_ext_priv *pmlmeext, uint8_t *pframe, unsigned int len); -extern void correct_TSF(_adapter *padapter, struct mlme_ext_priv *pmlmeext); -// Data declarations -extern uint8_t CSWTCH_36[12]; // = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 }; -extern const uint8_t ARTHEROS_OUI1[3]; // = { 0u, 3u, 127u }; -extern const uint8_t ARTHEROS_OUI2[3]; // = { 0u, 19u, 116u }; -extern const uint8_t REALTEK_OUI[3]; // = { 0u, 224u, 76u }; -extern const uint8_t RALINK_OUI[3]; // = { 0u, 12u, 67u }; -extern const uint8_t MARVELL_OUI[3]; // = { 0u, 80u, 67u }; -extern const uint8_t CISCO_OUI[3]; // = { 0u, 64u, 150u }; -extern const uint8_t rtw_basic_rate_cck[4]; // = { 130u, 132u, 139u, 150u }; -extern const uint8_t BROADCOM_OUI1[3]; // = { 0u, 16u, 24u }; -extern const uint8_t BROADCOM_OUI2[3]; // = { 0u, 10u, 247u }; -extern const uint8_t rtw_basic_rate_mix[7]; // = { 130u, 132u, 139u, 150u, 140u, 152u, 176u }; -extern const uint8_t rtw_basic_rate_ofdm[3]; // = { 140u, 152u, 176u }; -extern const uint8_t AIRGOCAP_OUI[3]; // = { 0u, 10u, 245u }; -//-------------------------------- -// wifi_simple_config_parser.o -// Function declarations -extern int32_t bytecopy(uint8_t *src, uint8_t *dst, uint32_t len); -extern int32_t rtk_sc_register_pattern(struct pattern_ops *pp); -extern int32_t rtk_sc_generate_key(struct pattern_ops *pp, struct rtk_sc *pSc); -extern int32_t rtk_sc_decode_profile(struct pattern_ops *pp, struct rtk_sc *pSc); -extern int32_t rtk_sc_get_tlv_info(struct pattern_ops *pp, struct rtk_sc *pSc); -extern int32_t mcast_udp_get_cipher_info(struct pattern_ops *pp, struct rtk_sc *pSc); -extern int32_t mcast_udp_get_pattern(struct pattern_ops *pp, struct rtk_sc *pSc); -extern int32_t bcast_udp_get_pattern(struct pattern_ops *pp, struct rtk_sc *pSc); -extern int32_t bcast_udp_get_cipher_info(struct pattern_ops *pp, struct rtk_sc *pSc); -extern int32_t rtk_clean_profile_value(); -extern int32_t mcast_udp_decode_profile(struct pattern_ops *pp, struct rtk_sc *pSc); -extern int32_t mcast_udp_generate_key(struct pattern_ops *pp, struct rtk_sc *pSc); -extern int32_t rtk_sc_check_packet(uint8_t *da, uint8_t *bssid, int32_t length); -extern void whc_fix_channel(); -extern void whc_unfix_channel(); -extern void simple_config_lib_init(struct simple_config_lib_config *config); -extern void simple_config_lib_deinit(); -extern int parse_tlv_info_bcast(struct rtk_sc *pSc, uint8_t *plain_info, int len); -extern int32_t mcast_udp_get_profile(struct pattern_ops *pp, struct rtk_sc *pSc); -extern void rtk_restart_simple_config(); -extern void rtk_stop_simple_config(); -extern int32_t rtk_sc_init(char *custom_pin_code, struct simple_config_lib_config *lib_config); -extern void rtk_sc_deinit(); -extern int rtk_sc_check_profile(struct pattern_ops *pp, struct rtk_sc *pSc, void *backup_sc_ctx); -extern signed int softAP_simpleConfig_parse(uint8_t *buf, int len, void *backup_sc_ctx, void *psoftAP_ctx); -extern int rtl_pre_parse(uint8_t *mac_addr, uint8_t *buf, void *userdata, uint8_t **da, uint8_t **sa, unsigned int *len); -extern int32_t rtk_start_parse_packet(uint8_t *da, uint8_t *sa, int32_t len, void *user_data, void *backup_sc_ctx); -// Data declarations -// Data declarations -extern char algn_1; // weak -extern const uint8_t default_key_iv[8]; // = { 166u, 166u, 166u, 166u, 166u, 166u, 166u, 166u }; -extern struct pattern_ops udp_bcast; /* = -{ - 4u, 10u, - { - 115u, 99u, 95u, 98u, 99u, 97u, 115u, 116u, 95u, 117u, - 100u, 112u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, - 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, - 0u - }, - (sc_check_pattern_call_back)0x20D, - (sc_get_cipher_info_call_back)0x2C9, - (sc_generate_key_call_back)0x3B5, - (sc_decode_profile_call_back)0x389, - (sc_get_tlv_info_call_back)0x62D -}; */ -extern uint8_t g_bssid[6]; -extern int32_t simple_config_status; -extern uint8_t g_ios_mac[6]; // = { 2u, 0u, 0u, 0u, 0u, 0u }; -extern uint8_t use_ios7_mac; -extern uint8_t *custom_pin; -extern struct pattern_ops udp_mcast_pin; /* = -{ - 3u, 10u, - { - 115u, 99u, 95u, 109u, 99u, 97u, 115u, 116u, 95u, 117u, - 100u, 112u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, - 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u - }, - (sc_check_pattern_call_back)0x95, - (sc_get_cipher_info_call_back)0x6B, - (sc_generate_key_call_back)0x3B5, - (sc_decode_profile_call_back)0x389, - (sc_get_tlv_info_call_back)0x62D -}; */ -extern struct pattern_ops udp_bcast_pin; /* = -{ - 5u, 10u, - { - 115u, 99u, 95u, 98u, 99u, 97u, 115u, 116u, 95u, 117u, 100u, - 112u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, - 0u, 0u, 0u, 0u, 0u, 0u, 0u, - 0u - }, - (sc_check_pattern_call_back)0x20D, - (sc_get_cipher_info_call_back)0x2C9, - (sc_generate_key_call_back)0x3B5, - (sc_decode_profile_call_back)0x389, - (sc_get_tlv_info_call_back)0x62D -}; */ -extern uint8_t get_channel_flag; -extern uint8_t g_security_mode; // = 255u; -extern uint8_t radom_value[4]; -extern int32_t profile_pkt_index; -extern const uint8_t default_pin[9]; // = { 53u, 55u, 50u, 56u, 57u, 57u, 54u, 49u, 0u }; -extern const uint8_t sc_device_name[21]; /* = -{ - 115u, 105u, 109u, 112u, 108u, 101u, 95u, 99u, 111u, 110u, 102u, 105u, 103u, - 95u, 99u, 108u, 105u, 101u, 110u, 116u, 0u -}; */ -extern struct simple_config_lib_config sc_api_fun; -extern uint8_t fix_sa; -extern uint32_t g_sc_pin_len; -extern struct pattern_ops *pp; -extern struct pattern_ops udp_mcast; /* = -{ - 2u, 10u, - { - 115u, 99u, 95u, 109u, 99u, 97u, 115u, 116u, 95u, 117u, 100u, - 112u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, - 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u - }, - (sc_check_pattern_call_back)0x95, - (sc_get_cipher_info_call_back)0x6B, - (sc_generate_key_call_back)0x3B5, - (sc_decode_profile_call_back)0x389, - (sc_get_tlv_info_call_back)0x62D -}; */ -extern int32_t sync_pkt_index; -extern const uint8_t mcast_udp_buffer[65]; /* = -{ - 56u, 67u, 109u, 84u, 47u, 32u, 74u, 40u, 51u, 95u, 97u, 69u, 32u, 82u, 95u, - 85u, 70u, 82u, 125u, 96u, 109u, 116u, 119u, 70u, 61u, 41u, 81u, 102u, 106u, 116u, - 110u, 94u, 83u, 95u, 49u, 47u, 102u, 102u, 103u, 60u, 95u, 67u, 55u, 121u, 119u, - 39u, 115u, 125u, 63u, 39u, 95u, 39u, 110u, 38u, 50u, 126u, 66u, 108u, 109u, 38u, - 95u, 107u, 63u, 54u, 0u -}; */ -extern struct rtk_sc *g_sc_ctx; -//-------------------------------- -// wlan_ram_map.o -// Function declarations -extern void init_rom_wlan_ram_map(); -//-------------------------------- -// freertos_isr.o -// Function declarations -extern void rtw_interrupt_thread(thread_context context); -// Data declarations -extern _sema *pExportWlanIrqSemaphore; - -//-------------------------------- -// freertos_recv.o -// Function declarations -extern int rtw_os_recv_resource_init(struct recv_priv *precvpriv, _adapter *padapter); -extern int rtw_os_recv_resource_alloc(_adapter *padapter, struct recv_frame *precvframe); -extern int rtw_os_recvbuf_resource_alloc(_adapter *padapter, struct recv_buf *precvbuf); -extern int rtw_os_recvbuf_resource_free(_adapter *padapter, struct recv_buf *precvbuf); -extern int rtw_tkip_countermeasure(_adapter *padapter); -extern void rtw_handle_tkip_mic_err(_adapter *padapter, int bgroup); -extern int rtw_recv_indicatepkt(_adapter *padapter, struct recv_frame *precv_frame); -extern void rtw_init_recv_timer(struct recv_reorder_ctrl *preorder_ctrl); - -//-------------------------------- -// freertos_skbuff.o -// Function declarations -extern void skb_fail_inc(int a1); -extern int skb_fail_get_and_rst(int a1); -extern void init_skb_pool(); -extern void init_skb_data_pool(); -extern struct sk_buff *alloc_skb(int size); -extern void kfree_skb(struct sk_buff *skb); -extern uint8_t *skb_put(struct sk_buff *skb, unsigned int len); -extern void skb_reserve(struct sk_buff *skb, unsigned int len); -extern struct sk_buff *dev_alloc_skb(unsigned int length, unsigned int reserve_len); -extern void skb_assign_buf(struct sk_buff *skb, uint8_t *buf, unsigned int len); -extern uint8_t *skb_tail_pointer(const struct sk_buff *skb); -extern uint8_t *skb_end_pointer(const struct sk_buff *skb); -extern void skb_set_tail_pointer(struct sk_buff *skb, const int offset); -extern uint8_t *skb_pull(struct sk_buff *skb, unsigned int len); -extern struct sk_buff *skb_copy(const struct sk_buff *skb, int gfp_mask, unsigned int reserve_len); -extern struct sk_buff *skb_clone(struct sk_buff *skb, int gfp_mask); -// Data declarations -extern int skbbuf_used_num; -extern struct list_head skbdata_list; -/* -// skbuff.h, wifi_skbuf.c, rtw_opt_skbuf.c -struct skb_buf { - struct list_head list; - struct sk_buff skb; -}; - -struct skb_data { - struct list_head list; - unsigned char buf[MAX_SKB_BUF_SIZE]; - atomic_t ref; -}; -extern struct skb_data skb_data_pool[8]; -extern struct skb_buf skb_pool[10]; -*/ -extern int skbdata_used_num; -extern int max_local_skb_num; // = 10; -extern struct list_head wrapper_skbbuf_list; -extern int max_skbdata_used_num; -extern int max_skbbuf_used_num; -extern int skb_fail_count; -extern int max_skb_buf_num; // = 8; -//-------------------------------- -// freertos_xmit.o -// Function declarations -extern signed int rtw_remainder_len(struct pkt_file *pfile); -extern void rtw_open_pktfile(_pkt *pktptr, struct pkt_file *pfile); -extern unsigned int rtw_pktfile_read(struct pkt_file *pfile, uint8_t *rmem, unsigned int rlen); -extern BOOL rtw_endofpktfile(struct pkt_file *pfile); -extern int rtw_os_xmit_resource_alloc(_adapter *padapter, struct xmit_buf *pxmitbuf, uint32_t alloc_sz); -extern void rtw_os_pkt_complete(_adapter *padapter, _pkt *pkt); -extern void rtw_os_xmit_complete(_adapter *padapter, struct xmit_frame *pxframe); -extern void rtw_os_xmit_schedule(_adapter *padapter, _irqL a2, int a3); -extern int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev, int a3); -extern int rtw_os_can_xmit(struct net_device *dev); -//-------------------------------- -// hal_intf.o -// Function declarations -extern int32_t rtw_hal_fill_h2c_cmd(int32_t result, uint8_t ElementID, uint32_t CmdLen, uint8_t *pCmdBuffer); -extern void rtw_hal_fill_fake_txdesc(_adapter *padapter, uint8_t *pDesc, uint32_t BufferLen, uint8_t IsPsPoll, uint8_t IsBTQosNull, uint8_t bDataFrame); -extern _adapter *rtw_hal_get_txbuff_rsvd_page_num(_adapter *result, bool wowlan); -extern void rtw_hal_chip_configure(_adapter *padapter); -extern void rtw_hal_read_chip_info(_adapter *padapter); -extern void rtw_hal_read_chip_version(_adapter *padapter); -extern void rtw_hal_def_value_init(_adapter *padapter); -extern void rtw_hal_free_data(_adapter *padapter); -extern void rtw_hal_dm_init(_adapter *padapter); -extern void rtw_hal_dm_deinit(_adapter *padapter); -extern int rtw_hal_init(_adapter *padapter); -extern int rtw_hal_deinit(_adapter *padapter); -extern void rtw_hal_set_hwreg(_adapter *padapter, uint8_t variable, uint8_t *val); -extern void rtw_hal_get_hwreg(_adapter *padapter, uint8_t variable, uint8_t *val); -extern int rtw_hal_set_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue); -extern int rtw_hal_get_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue); -extern void rtw_hal_set_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1, BOOLEAN bSet); -extern void rtw_hal_get_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1, BOOLEAN bSet); -extern void rtw_hal_enable_interrupt(_adapter *padapter); -extern void rtw_hal_disable_interrupt(_adapter *padapter); -extern int rtw_hal_inirp_init(_adapter *padapter); -extern int rtw_hal_inirp_deinit(_adapter *padapter); -extern void rtw_hal_irp_reset(_adapter *padapter); -extern int32_t rtw_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe); -extern int32_t rtw_hal_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe); -extern int32_t rtw_hal_init_xmit_priv(_adapter *padapter); -extern void rtw_hal_free_xmit_priv(_adapter *padapter); -extern int32_t rtw_hal_init_recv_priv(_adapter *padapter); -extern void rtw_hal_free_recv_priv(_adapter *padapter); -extern void rtw_hal_update_ra_mask(struct sta_info *psta, uint8_t rssi_level); -extern void rtw_hal_add_ra_tid(_adapter *padapter, uint32_t bitmap, uint8_t *arg, uint8_t rssi_level); -extern void rtw_hal_update_txdesc(_adapter *padapter, struct xmit_frame *pxmitframe, uint8_t *pbuf); -extern void rtw_hal_clone_data(_adapter *dst_padapter, _adapter *src_padapter); -extern void rtw_hal_start_thread(_adapter *padapter); -extern void rtw_hal_stop_thread(_adapter *padapter); -extern int rtw_hal_read_bbreg(_adapter *padapter, uint32_t RegAddr, uint32_t BitMask); -extern void rtw_hal_write_bbreg(_adapter *padapter, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); -extern int rtw_hal_read_rfreg(_adapter *padapter, uint32_t eRFPath, uint32_t RegAddr, uint32_t BitMask); -extern void rtw_hal_write_rfreg(_adapter *padapter, uint32_t eRFPath, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); -extern int32_t rtw_hal_interrupt_handler(_adapter *padapter); -extern void rtw_hal_set_bwmode(_adapter *padapter, CHANNEL_WIDTH Bandwidth, uint8_t Offset); -extern void rtw_hal_set_chan(_adapter *padapter, uint8_t channel); -extern void rtw_hal_set_chnl_bw(_adapter *padapter, int channel, CHANNEL_WIDTH Bandwidth, uint8_t Offset40, uint8_t Offset80); -extern void rtw_hal_dm_watchdog(_adapter *padapter); -extern int32_t rtw_hal_recv_tasklet(_adapter *padapter); -extern int32_t rtw_hal_macid_sleep(PADAPTER padapter, int macid, int a3); -extern int32_t rtw_hal_macid_wakeup(PADAPTER padapter, int macid, int a3); -extern void decide_chip_type_by_device_id(_adapter *padapter); -//-------------------------------- -// hal_phy.o -// Function declarations -extern uint32_t PHY_RFShadowRead(_adapter *Adapter, int eRFPath, uint32_t Offset); -extern void PHY_RFShadowWrite(_adapter *Adapter, int eRFPath, uint32_t Offset, uint32_t Data); -extern int PHY_RFShadowCompare(_adapter *Adapter, int eRFPath, uint32_t Offset); -extern void PHY_RFShadowRecorver(_adapter *Adapter, int eRFPath, uint32_t Offset); -extern void PHY_RFShadowCompareAll(_adapter *Adapter); -extern void PHY_RFShadowRecorverAll(_adapter *Adapter); -extern void PHY_RFShadowCompareFlagSet(_adapter *Adapter, int eRFPath, uint32_t Offset, uint8_t Type); -extern void PHY_RFShadowRecorverFlagSet(_adapter *Adapter, int eRFPath, uint32_t Offset, uint8_t Type); -extern void PHY_RFShadowCompareFlagSetAll(_adapter *Adapter); -extern void PHY_RFShadowRecorverFlagSetAll(_adapter *Adapter); -extern void PHY_RFShadowRefresh(_adapter *Adapter); -// Data declarations -extern RF_SHADOW_T RF_Shadow[2][255]; -//-------------------------------- -// Hal8195ARateAdaptive.o -// Function declarations -extern void ODM_InitRAInfo(PDM_ODM_T pDM_Odm); -extern signed int PT_Mode_Sel(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo, int rate_idx); -extern void InitialRateUpdate(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo, int rate, int trybit, uint8_t BW); -extern unsigned int RateUp_search_RateMask(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo, uint8_t init_rate_idx); -extern int RateDown_search_RateMask(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo, uint8_t init_rate_idx, int mod_step); -extern void StartRateByRSSI(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo); -extern signed int b64QamRate(int rate_idx, int Up_Down); -extern void RateUpRAM8195A(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo); -extern void RateDownTrying(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo); -extern void TryDone(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo); -extern void RateDownStepRAM8195A(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo, int step); -extern void RateDecisionRAM8195A(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo); -extern void ArfrRefresh(PDM_ODM_T pDM_Odm, PODM_RA_INFO_T pRaInfo); -extern void H2CHDL_Set_MACID_Config(PDM_ODM_T pDM_Odm, uint8_t *pbuf); -extern void PHY_DM_RA_SetRSSI_8195A(PDM_ODM_T pDM_Odm, int MacID, uint8_t Rssi); -// Data declarations -extern uint8_t Noisy_State; -extern uint8_t ARFB_table[9][7]; /* = -{ - { 21u, 240u, 255u, 15u, 0u, 0u, 0u }, - { 21u, 240u, 15u, 0u, 0u, 0u, 0u }, - { 5u, 240u, 255u, 15u, 0u, 0u, 0u }, - { 5u, 240u, 15u, 0u, 0u, 0u, 0u }, - { 16u, 240u, 255u, 15u, 0u, 0u, 0u }, - { 16u, 240u, 15u, 0u, 0u, 0u, 0u }, - { 245u, 15u, 0u, 0u, 0u, 0u, 0u }, - { 240u, 15u, 0u, 0u, 0u, 0u, 0u }, - { 15u, 0u, 0u, 0u, 0u, 0u, 0u } -}; */ -extern uint8_t TRYING_NECESSARY_idx[20]; /* = -{ - 1u, 1u, 1u, 2u, 1u, 2u, 3u, 3u, 4u, 4u, 5u, - 5u, 2u, 4u, 6u, 7u, 7u, 8u, 8u, 8u -}; */ -extern uint8_t DROPING_NECESSARY[20]; /* = -{ - 1u, 1u, 1u, 1u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, - 8u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u -}; */ -extern uint8_t PER_RATE_UP[20]; /* = -{ - 10u, 10u, 10u, 10u, 20u, 20u, 10u, 10u, 2u, 2u, - 2u, 2u, 20u, 20u, 10u, 10u, 1u, 2u, 2u, 4u -}; */ -extern uint8_t PER_RATE_DOWN[20]; /* = -{ - 100u, 50u, 50u, 50u, 40u, 47u, 29u, 36u, 31u, 24u, - 7u, 10u, 40u, 45u, 35u, 30u, 33u, 25u, 11u, 10u -}; */ -//-------------------------------- -// HalPhyRf.o -// Function declarations -extern void ConfigureTxpowerTrack(PDM_ODM_T pDM_Odm, PTXPWRTRACK_CFG pConfig); -extern void ODM_ClearTxPowerTrackingState(PDM_ODM_T pDM_Odm); -extern void ODM_TXPowerTrackingCallback_ThermalMeter(PADAPTER Adapter); -extern void ODM_ResetIQKResult(PDM_ODM_T pDM_Odm); -extern int ODM_GetRightChnlPlaceforIQK(int chnl); -// Data declarations -//-------------------------------- -// HalPwrSeqCmd.o -// Function declarations -extern signed int HalPwrSeqCmdParsing(_adapter *padapter, uint8_t CutVersion, uint8_t FabVersion, int InterfaceType, WLAN_PWR_CFG *PwrSeqCmd); -// Data declarations -//-------------------------------- -// hci_intfs.o -// Function declarations -extern struct dvobj_priv *hci_dvobj_init(); -extern void hci_dvobj_deinit(struct dvobj_priv *dvobj); -extern void hci_dvobj_request_irq(struct dvobj_priv *dvobj); -extern void hci_dvobj_free_irq(struct dvobj_priv *dvobj); -// Data declarations -//-------------------------------- -// rtw_ioctl_set.o -// Function declarations -extern int rtw_do_join(_adapter *padapter, _irqL a2); -extern int rtw_set_802_11_bssid(_adapter *padapter, uint8_t *bssid); -extern int rtw_set_802_11_ssid(_adapter *padapter, NDIS_802_11_SSID *ssid, int a3); -extern signed int rtw_set_802_11_infrastructure_mode(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype); -extern signed int rtw_set_802_11_bssid_list_scan(_adapter *padapter, NDIS_802_11_SSID *pssid, int ssid_max_num); -extern int rtw_set_802_11_authentication_mode(_adapter *padapter, struct NDIS_802_11_AUTHENTICATION_MODE authmode); -extern int rtw_set_802_11_add_wep(_adapter *padapter, NDIS_802_11_WEP *wep); -// Data declarations -//-------------------------------- -// rtw_io.o -// Function declarations -extern int rtw_read8(_adapter *adapter, uint32_t addr); -extern int rtw_read16(_adapter *adapter, uint32_t addr); -extern int rtw_read32(_adapter *adapter, uint32_t addr); -extern int32_t rtw_write8(_adapter *adapter, uint32_t addr, int val); -extern int32_t rtw_write16(_adapter *adapter, uint32_t addr, int val); -extern int32_t rtw_write32(_adapter *adapter, uint32_t addr, uint32_t val); -extern signed int rtw_read_port(_adapter *adapter, uint32_t addr, uint32_t cnt, uint8_t *mem, struct fifo_more_data *more_data); -extern signed int rtw_write_port(_adapter *adapter, uint32_t addr, uint32_t cnt, uint8_t *mem); -extern void rtw_set_chip_endian(_adapter *adapter); -extern int rtw_get_chip_endian(_adapter padapter); -// Data declarations -//-------------------------------- -// rtw_cmd.o -// Function declarations -extern sint rtw_init_cmd_priv(struct cmd_priv *pcmdpriv); -extern sint rtw_init_evt_priv(struct evt_priv *pevtpriv); -extern void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv); -extern sint rtw_enqueue_cmd(_queue *queue, struct cmd_obj *obj); -extern struct cmd_obj *rtw_dequeue_cmd(_queue *queue, _irqL a2, int a3); -extern struct list_head *rtw_observequeue_cmd(_queue *queue); -extern signed int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv); -extern int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj); -extern void rtw_free_cmd_obj(struct cmd_obj *pcmd); -//extern int rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj); -extern void rtw_set_channel_plan_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); -extern void rtw_survey_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); -extern void rtw_disassoc_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd, int a3); -extern void rtw_joinbss_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); -extern void rtw_setstaKey_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); -extern void rtw_cmd_thread(thread_context context); -extern int rtw_createbss_cmd(_adapter *padapter); -extern int rtw_joinbss_cmd(_adapter *padapter, struct wlan_network *pnetwork); -extern int rtw_disassoc_cmd(_adapter *padapter); -extern int rtw_setopmode_cmd(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype); -extern int rtw_setstakey_cmd(_adapter *padapter, uint8_t *psta, int unicast_key); -extern int rtw_clearstakey_cmd(_adapter *padapter, uint8_t *psta, uint8_t entry, int enqueue); -extern int rtw_addbareq_cmd(_adapter *padapter, int tid, uint8_t *addr); -extern int rtw_dynamic_chk_wk_cmd(_adapter *padapter); -extern struct cmd_obj *rtw_set_chplan_cmd(_adapter *padapter, int chplan, int enqueue); -extern void dynamic_chk_wk_hdl(_adapter *padapter, uint8_t *pbuf, int sz); -extern void lps_ctrl_wk_hdl(_adapter *padapter, int lps_ctrl_type, int a3); -extern int rtw_lps_ctrl_wk_cmd(_adapter *padapter, int lps_ctrl_type, int enqueue); -extern struct cmd_obj *rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *pssid, int ssid_max_num); -extern void rpt_timer_setting_wk_hdl(_adapter *padapter, uint16_t minRptTime, int a3); -extern int rtw_rpt_timer_cfg_cmd(_adapter *padapter, int minRptTime); -extern int rtw_ps_cmd(_adapter *padapter); -extern int rtw_chk_hi_queue_cmd(_adapter *padapter); -extern signed int rtw_drvextra_cmd_hdl(_adapter *padapter, uint8_t *pbuf, int a3); -extern int rtw_c2h_wk_cmd(PADAPTER padapter); -// Data declarations -extern const struct cmd_hdl wlancmds[63]; -extern const struct _cmd_callback rtw_cmd_callback[63]; -//-------------------------------- -// netdev.o -// Function declarations -extern struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv, void *old_priv); -extern struct net_device *rtw_alloc_etherdev(int sizeof_priv); -extern void rtw_free_netdev(struct net_device *netdev); -// Data declarations -//-------------------------------- -// phydm.o -// Function declarations -extern void ODM_CmnInfoInit(PDM_ODM_T pDM_Odm, ODM_CMNINFO_E CmnInfo, u4Byte Value); -extern void ODM_CmnInfoHook(PDM_ODM_T pDM_Odm, ODM_CMNINFO_E CmnInfo, PVOID pValue); -extern void ODM_CmnInfoPtrArrayHook(PDM_ODM_T pDM_Odm, ODM_CMNINFO_E CmnInfo, int Index, PVOID pValue); -extern void ODM_CmnInfoUpdate(PDM_ODM_T pDM_Odm, u4Byte CmnInfo, u8Byte Value); -extern void odm_CommonInfoSelfInit(PDM_ODM_T pDM_Odm); -extern void ODM_DMInit(PDM_ODM_T pDM_Odm); -extern void odm_CommonInfoSelfUpdate(PDM_ODM_T pDM_Odm); -extern void ODM_DMWatchdog(PDM_ODM_T pDM_Odm); -extern void odm_CommonInfoSelfReset(PDM_ODM_T pDM_Odm); -extern ADAPTIVITY_STATISTICS *PhyDM_Get_Structure(PDM_ODM_T pDM_Odm, int Structure_Type); -extern void odm_SwAntDetectInit(PDM_ODM_T pDM_Odm); -// Data declarations -//-------------------------------- -// rtl8195a_phycfg.o -// Function declarations -extern int PHY_QueryBBReg_8195A_Safe(PADAPTER Adapter, uint32_t RegAddr, uint32_t BitMask); -extern void PHY_SetBBReg_8195A_Safe(PADAPTER Adapter, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); -extern int phy_RFSerialRead_8195A(PADAPTER Adapter, RF_PATH eRFPath, uint32_t Offset); -extern uint32_t PHY_QueryRFReg_8195A(PADAPTER Adapter, uint32_t eRFPath, uint32_t RegAddr, uint32_t BitMask); -extern void PHY_SetRFReg_8195A(PADAPTER Adapter, uint32_t eRFPath, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); -extern BOOL PHY_MACConfig8195A(PADAPTER Adapter); -extern int PHY_BBConfig8195A(PADAPTER Adapter); -extern int PHY_ConfigRFWithParaFile_8195A(PADAPTER Adapter, uint8_t *pFileName, RF_PATH eRFPath); -extern void phy_PowerIndexCheck8195A(PADAPTER Adapter, uint8_t channel, uint8_t *cckPowerLevel, uint8_t *ofdmPowerLevel, uint8_t *BW20PowerLevel, uint8_t *BW40PowerLevel); -extern void PHY_SetTxPowerIndex_8195A(PADAPTER Adapter, uint32_t PowerIndex, int RFPath, int Rate); -extern void phy_TxPwrAdjInPercentage(PADAPTER Adapter, uint8_t *pTxPwrIdx); -extern int PHY_GetTxPowerIndex_8195A(PADAPTER pAdapter, int RFPath, int Rate, CHANNEL_WIDTH BandWidth, uint8_t Channel); -extern void PHY_SetTxPowerLevel8195A(PADAPTER Adapter, int Channel); -extern void phy_SpurCalibration_8195A(PADAPTER pAdapter); -extern void phy_SetRegBW_8195A(PADAPTER Adapter, CHANNEL_WIDTH CurrentBW); -extern int phy_GetSecondaryChnl_8195A(PADAPTER Adapter); -extern void phy_PostSetBwMode8195A(PADAPTER Adapter); -extern void phy_SwChnl8195A(PADAPTER pAdapter); -extern void phy_SwChnlAndSetBwMode8195A(PADAPTER Adapter); -extern void PHY_HandleSwChnlAndSetBW8195A(PADAPTER Adapter, int bSwitchChannel, int bSetBandWidth, uint8_t ChannelNum, CHANNEL_WIDTH ChnlWidth, EXTCHNL_OFFSET ExtChnlOffsetOf40MHz, EXTCHNL_OFFSET ExtChnlOffsetOf80MHz, uint8_t CenterFrequencyIndex1); -extern void PHY_SetBWMode8195A(PADAPTER Adapter, CHANNEL_WIDTH Bandwidth, int Offset); -extern void PHY_SwChnl8195A(PADAPTER Adapter, uint8_t channel); -extern void PHY_SetSwChnlBWMode8195A(PADAPTER Adapter, uint8_t channel, CHANNEL_WIDTH Bandwidth, int Offset40, uint8_t Offset80); -// Data declarations -//-------------------------------- -// rtl8195a_pmu_cmd.o -// Function declarations -extern void MediaConnection(PADAPTER padapter, int macid); -extern void MediaDisconnection(PADAPTER padapter, int macid); -extern void RATaskEnable(PADAPTER padapter); -extern void SetMediaStatus(PADAPTER padapter, int macid, int status); -extern void H2CHDL_JoinInfo(PADAPTER padapter, uint8_t *pCmdBuffer); -extern void H2CHDL_SetRsvdPage(PADAPTER padapter, uint8_t *pCmdBuffer); -extern uint32_t H2CCmdCommon(PADAPTER padapter, int ElementID, uint8_t *pCmdBuffer); -// Data declarations -//-------------------------------- -// rtl8195a_pmu_task.o -// Function declarations -extern void HalTimerEnable(uint32_t TimerId); -extern void InitTDMATimer(int Period); -extern void ChangeStateByTDMA(PADAPTER padapter); -extern void GetMinRateInRRSR(PADAPTER padapter); -extern void CheckInReqState(PADAPTER padapter); -extern void InitCheckStateTimer(); -extern void InitGTimer1ms(PADAPTER padapter, uint8_t IRQDis, int TimerID, uint32_t Period); -extern void DeInitGTimer1ms(PADAPTER padapter, int TimerID); -extern void ChangeTransmiteRate(int offset, uint8_t rate); -extern void PowerBitSetting(int bPowerBit, int offset); -extern void ChkandChangePS(PPS_PARM pPSParm, int bPowerBit); -extern int IssueRsvdPagePacketSetting(int PageNum, int bHwSEQEn, uint8_t RtyLmt); -extern void InitRsvdPgPkt(); -extern void IssuePSPoll(); -extern signed int WaitTxStateMachineOk(); -extern signed int IssueNullData(PPS_PARM pPSParm, int bPowerBit, uint8_t RtyLmt); -extern void WriteTxPause(uint8_t value, uint8_t rcode); -extern void PsCloseRF(); -extern void PsOpenRF(); -extern void SetPwrStateReg(PPS_PARM pPSParm, int PwrStateType, uint8_t value); -extern BOOL ChkTxQueueIsEmpty(); -extern void InitPS(PADAPTER padapter); -extern void ConfigListenBeaconPeriod(PPS_PARM pPSParm, int RLBM, int AwakeInterval); -extern signed int PS_S2_Condition_Match(PPS_PARM pPSParm); -extern signed int PS_S4_Condition_Match(PADAPTER padapter); -extern unsigned int PS_32K_Condition_Match(); -extern void PS_S2ToS3ToS0State(PADAPTER padapter, int nulldata0Allow); -extern void PS_S2ToS0State(PPS_PARM pPSParm); -extern void PS_S3ToS2orS0State(PPS_PARM pPSParm); -extern void PS_S0ToS1ToS2State(PADAPTER padapter); -extern void PS_S1ToS0orS2State(PPS_PARM pPSParm); -extern void PS_S2ToS4State(PADAPTER padapter); -extern void PS_S2ToS5State(PPS_PARM pPSParm); -extern void PS_S5ToS2State(PPS_PARM pPSParm); -extern void PS_S0ToS6State(PADAPTER padapter); -extern void PS_S6ToS0State(PPS_PARM pPSParm); -extern void CheckTSFIsStable(int ReqState); -extern void WaitHWStateReady(); -extern void SysClkDown(PPS_PARM pPSParm); -extern void SysClkUp(PPS_PARM pPSParm); -extern void ResetPSParm(PADAPTER padapter); -extern void PS_S4ToS2State(PPS_PARM pPSParm, int ReleaseTxPause); -extern void SleepTo32K(PPS_PARM pPSParm); -extern void Change_PS_State(PADAPTER padapter, int request_ps_state, int nulldata0Allow); -extern void Legacy_PS_Setting(PADAPTER padapter); -extern void PSModeSetting(PADAPTER padapter, int on); -extern void ChangePSStateByRPWM(PADAPTER padapter); -extern void ChangeTDMAState(PADAPTER padapter); -extern void TDMAChangeStateTask(PADAPTER padapter, _irqL a2); -extern void EnterPS(PADAPTER padapter); -extern void SetSmartPSTimer(PADAPTER padapter); -extern void GTimer7Handle(void *Data); -extern void SmartPS2InitTimerAndToGetRxPkt(PADAPTER padapter); -extern void PS_OnBeacon(PADAPTER padapter); -extern void PSBcnEarlyProcess(PADAPTER padapter); -extern void PSMtiBcnEarlyProcess(PADAPTER padapter); -extern void PSRxBcnProcess(PADAPTER padapter); -extern void TxPktInPSOn(PADAPTER padapter); -extern void PsBcnToProcess(PADAPTER padapter); -extern void GTimer6Handle(void *Data); -extern signed int RPWMProcess(PADAPTER padapter, int benter32k); -extern void PSSetMode(PADAPTER padapter, PLEGACY_PS_PARM pparm); -extern void SpeRPT(PADAPTER padapter); -extern void ISR_BcnEarly(PADAPTER padapter); -extern void ISR_MtiBcnEarly(PADAPTER padapter); -extern void ISR_RxBcn(PADAPTER padapter); -extern void ISR_RxBCMD1(PADAPTER padapter); -extern void ISR_RxBCMD0(PADAPTER padapter); -extern void ISR_RxUCMD1(PADAPTER padapter); -extern void ISR_RxUCMD0(PADAPTER padapter); -extern void ISR_TxPktIn(PADAPTER padapter); -extern void H2CHDL_SetPwrMode(PADAPTER padapter, uint8_t *pCmdBuffer); -extern void CheckInReqStateTask(PADAPTER padapter, int a2, int a3); -extern uint32_t HalGetNullTxRpt(PADAPTER padapter); -extern void ISR_TBTT(PADAPTER padapter); -extern void H2CHDL_BcnIgnoreEDCCA(PADAPTER padapter, uint8_t *pCmdBuffer); -extern void PMUInitial(PADAPTER padapter); -extern void PMUTask(PADAPTER padapter); -// Data declarations -extern BOOL bCheckStateTIMER; -extern uint32_t WifiMcuCmdBitMap_20974; -//-------------------------------- -// rtl8195a_recv.o -// Function declarations -extern int32_t rtl8195a_init_recv_priv(_adapter *padapter); -// Data declarations -//-------------------------------- -// rtl8195a_rxdesc.o -// Function declarations -extern void process_rssi(_adapter *padapter, struct recv_frame *prframe); -extern int32_t translate2dbm(int signal_strength_idx); -extern void rtl8195a_query_rx_desc_status(struct recv_frame *precvframe, uint8_t *pdesc); -extern void rtl8195a_query_rx_phy_status(struct recv_frame *precvframe, uint8_t *pphy_status, int a3); -// Data declarations -//-------------------------------- -// rtl8195a_xmit.o -// Function declarations -extern uint8_t *GetTxBufDesc(_adapter *padapter, int queue_index); -extern void UpdateFirstTxbdtoXmitBuf(_adapter *padapter, struct xmit_frame *pxmitframe); -extern BOOL check_nic_enough_desc(_adapter *padapter, struct pkt_attrib *pattrib); -extern int32_t rtl8195ab_init_xmit_priv(PADAPTER padapter); -extern void rtl8195ab_free_xmit_priv(PADAPTER padapter); -extern uint32_t GetDmaTxbdIdx(uint32_t ff_hwaddr); -extern struct xmit_buf *rtl8195a_enqueue_xmitbuf(struct rtw_tx_ring *ring, struct xmit_buf *pxmitbuf); -extern struct list_head *rtl8195a_dequeue_xmitbuf(struct rtw_tx_ring *ring); -extern signed int SetTxbdForLxDMARtl8195ab(_adapter *padapter, struct xmit_frame *pxmitframe, struct tx_buf_desc *pTxbd); -extern void UpdateTxbdHostIndex(_adapter *padapter, uint32_t ff_hwaddr); -extern struct xmit_buf *SetXimtBuf(struct xmit_frame *pxmitframe); -extern int FreeXimtBuf(struct xmit_buf *pxmitbuf); -extern int rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe); -extern BOOL check_tx_desc_resource(_adapter *padapter, int prio); -extern struct list_head *rtw_dequeue_xframe(struct xmit_priv *pxmitpriv, struct hw_xmit *phwxmit_i, sint entry); -extern int32_t rtw_xmitframe_coalesce(_adapter *padapter, _pkt *pkt, struct xmit_frame *pxmitframe); -extern void rtl8195ab_xmitframe_resume(_adapter *padapter); -extern int32_t rtl8195ab_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe); -extern int32_t rtl8195ab_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe); -extern int32_t rtl8195ab_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe); -// Data declarations -//-------------------------------- -// rtw_intfs.o -// Function declarations -extern signed int rtw_init_default_value(_adapter *padapter); -extern void rtw_cancel_all_timer(_adapter *padapter); -extern signed int rtw_free_drv_sw(_adapter *padapter); -extern signed int rtw_reset_drv_sw(_adapter *padapter); -extern signed int rtw_init_drv_sw(_adapter *padapter); -extern int rtw_start_drv_threads(_adapter *padapter); -extern void rtw_stop_drv_threads(_adapter *padapter); -// Data declarations -//-------------------------------- -// rtw_mlme.o -// Function declarations -extern void rtw_free_mlme_ie_data(uint8_t **ppie, uint32_t *plen); -extern void rtw_init_mlme_timer(_adapter *padapter); -extern void rtw_del_mlme_timer(struct mlme_priv *pmlmepriv); -extern void reconnect_timer_hdl(void *FunctionContext); -extern uint8_t *rtw_init_mlme_priv(_adapter *padapter, int a2, int a3); -extern void rtw_mfree_mlme_priv_lock(struct mlme_priv *pmlmepriv); -extern void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv); -extern void rtw_free_mlme_priv(struct mlme_priv *pmlmepriv); -extern sint rtw_enqueue_network(_queue *queue, struct wlan_network *pnetwork); -extern struct list_head *rtw_alloc_network(struct mlme_priv *pmlmepriv, _irqL a2, int a3); -extern void rtw_free_network(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork, int isfreeall); -extern void rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork); -extern _queue *rtw_find_network(_queue *scanned_queue, uint8_t *addr); -extern void rtw_free_network_queue(_adapter *padapter, int isfreeall, int a3); -extern sint rtw_if_up(_adapter *padapter); -extern void rtw_generate_random_ibss(uint8_t *pibss); -extern uint8_t *rtw_get_capability_from_ie(uint8_t *ie); -extern int rtw_get_capability(WLAN_BSSID_EX *bss, int a2, int a3); -extern uint8_t *rtw_get_beacon_interval_from_ie(uint8_t *ie); -extern uint8_t *rtw_init_mlme_priv(_adapter *padapter, int a2, int a3); -extern uint32_t rtw_is_same_ibss(_adapter *adapter, struct wlan_network *pnetwork); -extern int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst, int a3); -extern struct list_head *rtw_get_oldest_wlan_network(_queue *scanned_queue); -extern void update_network(WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src, _adapter *padapter, int update_ie); -extern void rtw_update_scanned_network(_adapter *adapter, WLAN_BSSID_EX *target); -extern void rtw_add_network(_adapter *adapter, WLAN_BSSID_EX *pnetwork, int a3); -extern void rtw_survey_event_callback(_adapter *adapter, uint8_t *pbuf, int a3); -extern void rtw_free_assoc_resources(_adapter *adapter, int lock_scanned_queue); -extern void rtw_indicate_connect(_adapter *padapter); -extern void rtw_indicate_disconnect(_adapter *padapter); -extern void rtw_joinbss_event_callback(_adapter *adapter, uint8_t *pbuf); -extern signed int search_max_mac_id(_adapter *padapter); -extern void rtw_stassoc_hw_rpt(_adapter *adapter, struct sta_info *psta); -extern void rtw_stassoc_event_callback(_adapter *adapter, uint8_t *pbuf); -extern void rtw_stadel_event_callback(_adapter *adapter, uint8_t *pbuf); -extern void rtw_join_timeout_handler(_adapter *adapter, _irqL a2, int a3, int a4); -//void rtw_join_timeout_handler(void *FunctionContext, _irqL a2, int a3, int a4); -extern void rtw_scan_timeout_handler(_adapter *adapter, _irqL a2, int a3); -//void rtw_scan_timeout_handler(void *FunctionContext); -extern void rtw_dynamic_check_timer_handlder(_adapter *adapter); -extern void dynamic_check_timer_handlder(void *FunctionContext); -extern int rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv, _irqL a2, int a3); -extern void rtw_surveydone_event_callback(_adapter *adapter, uint8_t *pbuf); -extern sint rtw_set_auth(_adapter *adapter, struct security_priv *psecuritypriv); -extern sint rtw_set_key(_adapter *adapter, struct security_priv *psecuritypriv, sint keyid, uint8_t set_tx); -extern unsigned int rtw_restruct_wmm_ie(_adapter *adapter, uint8_t *in_ie, uint8_t *out_ie, unsigned int in_len, unsigned int initial_out_len); -extern sint rtw_restruct_sec_ie(_adapter *adapter, uint8_t *in_ie, uint8_t *out_ie, unsigned int in_len); -extern void rtw_joinbss_reset(_adapter *padapter); -extern unsigned int rtw_restructure_ht_ie(_adapter *padapter, uint8_t *in_ie, uint8_t *out_ie, unsigned int in_len, unsigned int *pout_len); -extern void rtw_update_ht_cap(_adapter *padapter, uint8_t *pie, unsigned int ie_len); -extern void rtw_joinbss_event_prehandle(_adapter *adapter, uint8_t *pbuf, int a3); -extern void rtw_issue_addbareq_cmd(_adapter *padapter, struct xmit_frame *pxmitframe); -extern sint rtw_linked_check(_adapter *padapter); -extern sint rtw_buddy_adapter_up(sint result); -extern sint check_buddy_fwstate(sint result, sint state); -// Data declarations -extern uint8_t auto_reconnect_running; -extern void (*p_wlan_autoreconnect_hdl)(rtw_security_t, char *, int, char *, int, int); -//-------------------------------- -// rtw_mlme_ext.o -// Function declarations -extern uint8_t *get_da(uint8_t *pframe); -extern uint8_t *get_sa(uint8_t *pframe); -extern signed int OnAction(_adapter *padapter, struct recv_frame *precv_frame); -extern signed int DoReserved(_adapter *padapter, struct recv_frame *precv_frame); -extern void mgt_dispatcher(_adapter *padapter, struct mlme_handler *ptable, struct recv_frame *precv_frame); -extern int rtw_is_channel_set_contains_channel(RT_CHANNEL_INFO *channel_set, const uint32_t channel_num, int *pchannel_idx); -extern int init_hw_mlme_ext(_adapter *padapter); -extern unsigned int init_channel_set(_adapter *padapter, int ChannelPlan, RT_CHANNEL_INFO *channel_set); -extern void free_mlme_ext_priv(struct mlme_ext_priv *pmlmeext); -//void mgt_dispatcher(_adapter *padapter, struct recv_frame *precv_frame, int a3); -extern unsigned int OnAction_public(_adapter *padapter, struct recv_frame *precv_frame); -extern signed int OnAction_p2p(_adapter *padapter, struct recv_frame *precv_frame); -extern struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv); -extern struct xmit_frame *alloc_FwRsvdframe(struct xmit_priv *pxmitpriv, uint32_t size); -extern void update_mgnt_tx_rate(_adapter *padapter, uint8_t rate); -extern void update_mgntframe_attrib(_adapter *padapter, struct pkt_attrib *pattrib); -extern struct xmit_frame *rtw_build_mgnt_frame(_adapter *padapter, uint8_t *data, int len); -extern void dump_mgntframe(_adapter *padapter, struct xmit_frame *pmgntframe); -extern int rtw_send_mgnt(_adapter *padapter, uint8_t *data, int len, uint16_t flags); -extern void issue_action_BSSCoexistPacket(_adapter *padapter); -extern uint32_t update_hidden_ssid(uint8_t *ies, uint32_t ies_len, int hidden_ssid_mode); -extern void issue_beacon(_adapter *padapter); -extern void issue_probersp(_adapter *padapter, uint8_t *da, uint8_t is_valid_p2p_probereq); -extern signed int OnProbeReq(_adapter *padapter, struct recv_frame *precv_frame); -extern void issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, int blnbc); -extern void issue_auth(_adapter *padapter, struct sta_info *psta, int status); -extern signed int OnAuth(_adapter *padapter, struct recv_frame *precv_frame); -extern void issue_asocrsp(_adapter *padapter, uint16_t status, struct sta_info *pstat, int pkt_type); -extern void issue_assocreq(_adapter *padapter); -extern void issue_nulldata(_adapter *padapter, unsigned int power_mode); -extern void issue_qos_nulldata(_adapter *padapter, uint8_t *da, uint16_t tid); -extern void issue_deauth(_adapter *padapter, uint8_t *da, uint32_t reason); -extern void issue_action_BA(_adapter *padapter, uint8_t *raddr, uint8_t action, uint16_t status); -extern signed int OnAction_back(_adapter *padapter, struct recv_frame *precv_frame); -extern signed int send_beacon(_adapter *padapter); -extern signed int collect_bss_info(_adapter *padapter, struct recv_frame *precv_frame, WLAN_BSSID_EX *bssid); -extern void start_clnt_auth(_adapter *padapter); -extern void start_clnt_assoc(_adapter *padapter); -extern signed int OnAuthClient(_adapter *padapter, struct recv_frame *precv_frame); -extern int report_scan_result_one(_adapter *padapter, WLAN_BSSID_EX *bssid); -extern int add_site_survey(_adapter *padapter, WLAN_BSSID_EX *bssid); -extern void report_survey_event(_adapter *padapter, struct recv_frame *precv_frame); -extern signed int OnProbeRsp(_adapter *padapter, struct recv_frame *precv_frame); -extern void report_surveydone_event(_adapter *padapter); -extern void report_join_res(_adapter *padapter, int res); -extern signed int OnAssocRsp(_adapter *padapter, struct recv_frame *precv_frame); -extern void report_del_sta_event(_adapter *padapter, uint8_t *MacAddr, uint16_t reason); -extern signed int receive_disconnect(_adapter *padapter, uint8_t *MacAddr, uint16_t reason); -extern signed int OnBeacon(_adapter *padapter, struct recv_frame *precv_frame); -extern signed int OnDeAuth(_adapter *padapter, struct recv_frame *precv_frame); -extern signed int OnDisassoc(_adapter *padapter, struct recv_frame *precv_frame); -extern void report_add_sta_event(_adapter *padapter, uint8_t *MacAddr, int cam_idx); -extern signed int OnAssocReq(_adapter *padapter, struct recv_frame *precv_frame); -extern signed int rtw_port_switch_chk(_adapter *adapter); -extern void update_sta_info(_adapter *padapter, struct sta_info *psta); -extern void mlmeext_sta_del_event_callback(_adapter *padapter); -extern void linked_info_dump(_adapter *padapter, _irqL a2, int a3); -extern void linked_rx_signal_strehgth_display(_adapter *padapter, int a2); -extern void linked_status_chk(_adapter *padapter, int a2); -extern void survey_timer_hdl(_adapter *padapter, int a2); -//void survey_timer_hdl(void *FunctionContext); -extern void link_timer_hdl(_adapter *padapter); -//void link_timer_hdl(void *FunctionContext); -extern void addba_timer_hdl(struct sta_info *psta); -extern int NULL_hdl(_adapter *padapter, uint8_t *pbuf); -extern int setopmode_hdl(_adapter *padapter, uint8_t *pbuf, int a3); -extern int disconnect_hdl(_adapter *padapter, uint8_t *pbuf, int a3); -extern int setauth_hdl(_adapter *padapter, uint8_t *pbuf); -extern int setkey_hdl(_adapter *padapter, uint8_t *pbuf, int a3, int a4); -extern signed int set_stakey_hdl(_adapter *padapter, uint8_t *pbuf); -extern int set_tx_beacon_cmd(_adapter *padapter); -extern int mlme_evt_hdl(_adapter *padapter, uint8_t *pbuf); -extern int tx_beacon_hdl(_adapter *padapter, uint8_t *pbuf, int a3); -extern sint check_buddy_mlmeinfo_state(sint result, uint32_t state); -extern void site_survey(_adapter *padapter, int a2, int a3); -extern int sitesurvey_cmd_hdl(_adapter *padapter, uint8_t *pbuf, int a3); -extern int concurrent_chk_start_clnt_join(_adapter *padapter); -extern void start_clnt_join(_adapter *padapter, int a2, int a3); -extern signed int join_cmd_hdl(_adapter *padapter, uint8_t *pbuf, int a3); -extern void concurrent_chk_joinbss_done(_adapter *padapter, int join_res); -extern void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res, int a3); -extern signed int set_chplan_hdl(_adapter *padapter, uint8_t *pbuf); -extern void init_mlme_ext_timer(_adapter *padapter); -extern int init_mlme_ext_priv(_adapter *padapter); -// Data declarations -extern const RT_CHANNEL_PLAN_2G RTW_ChannelPlan2G[8]; /* = -{ - { { 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 0u }, 13u }, - { { 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 0u }, 13u }, - { { 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 0u, 0u, 0u }, 11u }, - { { 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 14u }, 14u }, - { { 10u, 11u, 12u, 13u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u }, 4u }, - { { 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 0u }, 13u }, - { { 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 0u }, 13u }, - { { 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 0u }, 13u } -}; */ -extern const uint8_t WPS_OUI[4]; // = { 0u, 80u, 242u, 4u }; -extern mac_monitor_ptr mac_monitor_callback; -extern struct mlme_handler mlme_sta_tbl[14]; /* = -{ - { 0u, (unsigned int (*)(_adapter *, recv_frame *))0x2FA1 }, - { 16u, (unsigned int (*)(_adapter *, recv_frame *))0x28A9 }, - { 32u, (unsigned int (*)(_adapter *, recv_frame *))0x2FA1 }, - { 48u, (unsigned int (*)(_adapter *, recv_frame *))0x28A9 }, - { 64u, (unsigned int (*)(_adapter *, recv_frame *))0xAB5 }, - { 80u, (unsigned int (*)(_adapter *, recv_frame *))0x27A1 }, - { 0u, (unsigned int (*)(_adapter *, recv_frame *))0x61 }, - { 0u, (unsigned int (*)(_adapter *, recv_frame *))0x61 }, - { 128u, (unsigned int (*)(_adapter *, recv_frame *))0x2ADD }, - { 144u, (unsigned int (*)(_adapter *, recv_frame *))0x61 }, - { 160u, (unsigned int (*)(_adapter *, recv_frame *))0x2DBD }, - { 176u, (unsigned int (*)(_adapter *, recv_frame *))0x213D }, - { 192u, (unsigned int (*)(_adapter *, recv_frame *))0x2C65 }, - { 208u, (unsigned int (*)(_adapter *, recv_frame *))0x4F } -}; */ -//_UNKNOWN unk_4AE4; // weak -extern struct list_head *mf_list_head; -extern const uint8_t WMM_INFO_OUI[6]; // = { 0u, 80u, 242u, 2u, 0u, 1u }; -extern uint8_t pscan_retry_cnt_21430; -extern const uint8_t RTW_WPA_OUI[4]; // = { 0u, 80u, 242u, 1u }; -extern const uint8_t WMM_PARA_OUI[6]; // = { 0u, 80u, 242u, 2u, 1u, 1u }; -extern const RT_CHANNEL_PLAN_MAP RTW_ChannelPlanMap[8]; /* = -{ - { 32u, 0u, 3u }, - { 33u, 1u, 2u }, - { 34u, 2u, 0u }, - { 35u, 3u, 1u }, - { 36u, 4u, 2u }, - { 42u, 5u, 0u }, - { 71u, 7u, 4u }, - { 88u, 6u, 1u } -}; */ -extern const uint8_t null_addr[6]; // = { 0u, 0u, 0u, 0u, 0u, 0u }; -extern const uint8_t WMM_OUI[4]; // = { 0u, 80u, 242u, 2u }; -extern const struct fwevent wlanevents[24]; /* = -{ - { 0u, &rtw_dummy_event_callback }, - { 0u, NULL }, - { 0u, NULL }, - { 0u, NULL }, - { 0u, NULL }, - { 0u, NULL }, - { 0u, NULL }, - { 0u, NULL }, - { 0u, &rtw_survey_event_callback }, - { 4u, &rtw_surveydone_event_callback }, - { 0u, &rtw_joinbss_event_callback }, - { 12u, &rtw_stassoc_event_callback }, - { 12u, &rtw_stadel_event_callback }, - { 0u, NULL }, - { 0u, &rtw_dummy_event_callback }, - { 0u, NULL }, - { 0u, NULL }, - { 0u, NULL }, - { 0u, NULL }, - { 0u, NULL }, - { 0u, NULL }, - { 0u, NULL }, - { 0u, NULL }, - { 0u, NULL } -}; */ -//-------------------------------- -// rtw_promisc.o -// Function declarations -extern uint8_t *get_hdr_bssid(uint8_t *pframe); -extern int filter_packet(uint8_t *buf, int length); -extern signed int promisc_get_encrypt(_adapter *padapter, uint8_t *bssid); -extern void promisc_info_get(_adapter *padapter, struct recv_frame *prframe, ieee80211_frame_info_t *ppromisc_info, int a4); -extern void promisc_set_enable(_adapter *padapter, int enabled, int len_used); -extern void promisc_deinit(_adapter *padapter); -extern int promisc_recv_func(_adapter *padapter, struct recv_frame *rframe); -extern int promisc_set(rtw_rcr_level_t enabled, void (*callback)(uint8_t *, unsigned int, void *), int len_used); -extern int promisc_set_mgntframe(int result); -extern int is_promisc_enabled(); -extern void promisc_issue_probereq(); -extern void promisc_issue_probersp(uint8_t *da); -extern int promisc_get_fixed_channel(void *fixed_bssid, uint8_t *ssid, int *ssid_length); -// Data declarations -extern void (*promisc_callback_all)(uint8_t *, unsigned int, void *); -extern _sema promisc_sema; -extern const uint8_t zero_bssid[6]; // = { 0u, 0u, 0u, 0u, 0u, 0u }; -extern void (*promisc_callback)(uint8_t *, unsigned int, void *); -//-------------------------------- -// rtw_psk.o -// Function declarations -extern void SetEAPOL_KEYIV(OCTET_STRING ocDst, uint64_t a2, OCTET32_INTEGER oc32Counter); -extern void ToDrv_SetPTK(_adapter *padapter, struct sta_info *psta); -extern void Message_ReplayCounter_OC2LI(int a1, LARGE_INTEGER *li); -extern int Message_SmallerEqualReplayCounter(LARGE_INTEGER li1, int a2); -extern void Message_setReplayCounter(int a1, unsigned int h, unsigned int l); -extern void INCLargeInteger(LARGE_INTEGER *x); -extern void INCOctet16_INTEGER(OCTET16_INTEGER *x); -extern OCTET32_INTEGER *INCOctet32_INTEGER(OCTET32_INTEGER *x); -extern void ToDrv_DisconnectSTA(_adapter *padapter, struct sta_info *psta, int reason); -extern int CheckMIC(OCTET_STRING EAPOLMsgRecvd, uint8_t *key, int keylen); -extern void CalcMIC(OCTET_STRING EAPOLMsgSend, int algo, uint8_t *key, int keylen); -extern int DecWPA2KeyData(WPA_STA_INFO *pStaInfo, uint8_t *key, int keylen, uint8_t *kek, int keklen, uint8_t *kout); -extern int DecGTK(OCTET_STRING EAPOLMsgRecvd, uint8_t *kek, int keklen, int keylen, uint8_t *kout); -extern void ToDrv_SetGTK(_adapter *padapter); -extern void init_wpa_sta_info(_adapter *padapter, struct sta_info *psta); -extern void SendEAPOL(_adapter *padapter, struct sta_info *psta, int resend); -extern void ClientSendEAPOL(_adapter *padapter, struct sta_info *psta, int resend); -extern void ResendTimeout(void *task_psta, _irqL a2); -extern void EAPOLKeyRecvd(_adapter *padapter, struct sta_info *psta); -extern void ClientEAPOLKeyRecvd(_adapter *padapter, struct sta_info *psta); -extern void set_wpa_global_PSK(uint8_t *key); -extern void psk_derive(_adapter *padapter, uint8_t *passphrase, uint8_t *ssid); -extern void psk_init(_adapter *padapter, uint8_t *pie, int ielen); -extern int psk_strip_rsn_pairwise(uint8_t *ie, int ie_len); -extern int psk_strip_wpa_pairwise(uint8_t *ie, int ie_len); -extern int tkip_send_mic_failure_report(_adapter *padapter); -// Data declarations -extern uint8_t psk_essid[2][36]; -extern uint8_t psk_passphrase[2][65]; -extern char PMKID_KDE_TYPE_17744[6]; -extern uint8_t wpa_global_PSK[2][40]; -//-------------------------------- -// rtw_pwrctrl.o -// Function declarations -extern void pwr_state_check_handler(void *FunctionContext); -extern void ips_enter(_adapter *padapter); -extern int ips_leave(_adapter *padapter); -extern signed int rtw_pwr_unassociated_idle(_adapter *adapter); -extern void rtw_ps_processor(_adapter *padapter); -extern void rtw_set_rpwm(PADAPTER padapter, uint8_t pslv); -extern int PS_RDY_CHECK(_adapter *padapter); -extern void rtw_set_ps_mode(PADAPTER padapter, int ps_mode, int smart_ps, int bcn_ant_mode); -extern int32_t LPS_RF_ON_check(PADAPTER padapter, uint32_t delay_ms); -extern void LPS_Enter(PADAPTER padapter); -extern void LPS_Leave(PADAPTER padapter); -extern void LeaveAllPowerSaveMode(PADAPTER Adapter); -extern void rtw_init_pwrctrl_priv(PADAPTER padapter); -extern void rtw_free_pwrctrl_priv(PADAPTER adapter); -extern int _rtw_pwr_wakeup(_adapter *padapter, uint32_t ips_deffer_ms, const char *caller); -#define RTW_PWR_STATE_CHK_INTERVAL 2000 -#define rtw_pwr_wakeup(adapter) _rtw_pwr_wakeup(adapter, RTW_PWR_STATE_CHK_INTERVAL, __FUNCTION__) -extern int rtw_pm_set_lps(_adapter *padapter, int mode); -extern int rtw_pm_set_ips(_adapter *padapter, int mode); -extern int rtw_pm_set_tdma_param(_adapter *padapter, uint8_t tdma_slot_period, uint8_t tdma_rfon_period_len_1, uint8_t tdma_rfon_period_len_2, uint8_t tdma_rfon_period_len_3); -extern int rtw_pm_set_lps_dtim(_adapter *padapter, uint8_t lps_dtim); -extern int rtw_pm_get_lps_dtim(_adapter *padapter); -// Data declarations -//-------------------------------- -// rtw_recv.o -// Function declarations -extern uint8_t *recvframe_pull(uint8_t *result, sint sz); -extern uint8_t *recvframe_pull_tail(uint8_t *result, sint sz); -extern void rtw_signal_stat_timer_hdl(void *FunctionContext); -extern void rtw_init_sta_recv_priv(struct sta_recv_priv *psta_recvpriv); -extern sint rtw_init_recv_priv(struct recv_priv *precvpriv, _adapter *padapter); -extern void rtw_mfree_recv_priv_lock(struct recv_priv *precvpriv); -extern struct list_head *rtw_alloc_recvframe(_queue *pfree_recv_queue); -//struct list_head *rtw_alloc_recvframe(_queue *pfree_recv_queue, _irqL a2, int a3); -extern int rtw_free_recvframe(struct recv_frame *precvframe, _queue *pfree_recv_queue); -extern sint rtw_enqueue_recvframe(struct recv_frame *precvframe, _queue *queue); -extern sint rtw_enqueue_recvframe(struct recv_frame *precvframe, _queue *queue); -extern void rtw_free_recvframe_queue(_queue *pframequeue, _queue *pfree_recv_queue); -extern int rtw_free_uc_swdec_pending_queue(_adapter *adapter, _irqL a2, int a3); -extern void rtw_free_recv_priv(struct recv_priv *precvpriv); -extern sint rtw_enqueue_recvbuf_to_head(struct recv_buf *precvbuf, _queue *queue); -extern uint32_t rtw_free_buf_pending_queue(_adapter *adapter); -extern sint rtw_enqueue_recvbuf(struct recv_buf *precvbuf, _queue *queue); -extern struct list_head *rtw_dequeue_recvbuf(_queue *queue, _irqL a2, int a3); -extern sint recvframe_chkmic(_adapter *adapter, struct recv_frame *precvframe, int a3, int a4); -extern struct recv_frame *decryptor(_adapter *padapter, struct recv_frame *precv_frame); -extern struct recv_frame *portctrl(_adapter *adapter, struct recv_frame *precv_frame); -extern sint recv_decache(struct recv_frame *precv_frame, uint8_t bretry, struct stainfo_rxcache *prxcache); -extern void process_pwrbit_data(_adapter *padapter, struct recv_frame *precv_frame, int a3, int a4); -extern void process_wmmps_data(_adapter *padapter, struct recv_frame *precv_frame); -extern void count_rx_stats(_adapter *padapter, struct recv_frame *prframe, struct sta_info *sta); -extern sint sta2sta_data_frame(_adapter *adapter, struct recv_frame *precv_frame, struct sta_info **psta, int a4); -extern sint ap2sta_data_frame(_adapter *adapter, struct recv_frame *precv_frame, struct sta_info **psta); -extern sint sta2ap_data_frame(_adapter *adapter, struct recv_frame *precv_frame, struct sta_info **psta); -extern sint validate_recv_ctrl_frame(_adapter *padapter, struct recv_frame *precv_frame); -extern sint validate_recv_data_frame(_adapter *adapter, struct recv_frame *precv_frame); -extern sint wlanhdr_to_ethhdr(struct recv_frame *precvframe, int a2, int a3); -extern struct recv_frame *recvframe_defrag(_adapter *adapter, _queue *defrag_q); -extern _queue *recvframe_chk_defrag(PADAPTER padapter, struct recv_frame *precv_frame); -extern sint validate_recv_mgnt_frame(PADAPTER padapter, struct recv_frame **pprecv_frame); -extern sint validate_recv_frame(_adapter *adapter, struct recv_frame **pprecv_frame); -extern int amsdu_to_msdu(_adapter *padapter, struct recv_frame *prframe); -extern int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, int seq_num); -extern int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, struct recv_frame *prframe); -extern int recv_indicatepkts_in_order(_adapter *padapter, struct recv_reorder_ctrl *preorder_ctrl, int bforced); -extern int recv_indicatepkt_reorder(_adapter *padapter, struct recv_frame *prframe, int a3); -extern void rtw_reordering_ctrl_timeout_handler(void *pcontext, _irqL a2); -extern int process_recv_indicatepkts(_adapter *padapter, struct recv_frame *prframe, int a3); -extern int recv_func_prehandle(_adapter *padapter, struct recv_frame *rframe, int a3); -extern int recv_func_posthandle(_adapter *padapter, struct recv_frame *prframe); -extern int recv_func(_adapter *padapter, struct recv_frame *rframe, int a3); -extern int32_t rtw_recv_entry(struct recv_frame *precvframe, int a2, int a3); -extern void rtw_recv_tasklet(thread_context context); -// Data declarations -extern const uint8_t SNAP_ETH_TYPE_APPLETALK_AARP[2]; // = { 128u, 243u }; -extern const uint8_t SNAP_ETH_TYPE_IPX[2]; // = { 129u, 55u }; -extern const uint8_t rtw_bridge_tunnel_header[6]; // = { 170u, 170u, 3u, 0u, 0u, 248u }; -extern const uint8_t oui_8021h[3]; // = { 0u, 0u, 248u }; -extern const uint8_t rtw_rfc1042_header[6]; // = { 170u, 170u, 3u, 0u, 0u, 0u }; -extern const uint8_t SNAP_HDR_APPLETALK_DDP[3]; // = { 8u, 0u, 7u }; -extern const uint8_t SNAP_ETH_TYPE_APPLETALK_DDP[2]; // = { 128u, 155u }; -extern const uint8_t oui_rfc1042[3]; // = { 0u, 0u, 0u }; -//-------------------------------- -// rtw_security.o -// Function declarations -extern void rtw_wep_encrypt(_adapter *padapter, uint8_t *pxmitframe); -extern void rtw_wep_decrypt(_adapter *padapter, uint8_t *precvframe); -extern signed int rtw_tkip_encrypt(_adapter *padapter, uint8_t *pxmitframe); -extern int rtw_tkip_decrypt(_adapter *padapter, uint8_t *precvframe); -extern signed int rtw_aes_encrypt(_adapter *padapter, uint8_t *pxmitframe, int a3, int a4); -extern int rtw_aes_decrypt(_adapter *padapter, uint8_t *precvframe, int a3, int a4); -extern void rtw_use_tkipkey_handler(void *FunctionContext); -extern int rtw_init_sec_priv(_adapter *padapter); -extern void rtw_free_sec_priv(struct security_priv *psecpriv); -// Data declarations -//-------------------------------- -// rtw_sta_mgt.o -// Function declarations -extern int wifi_mac_hash(uint8_t *mac); -extern void rtw_init_stainfo(struct sta_info *psta); -extern int rtw_init_sta_priv(_adapter *padapter); -extern void rtw_free_sta_xmit_priv_lock(struct sta_xmit_priv *psta_xmitpriv); -extern void rtw_mfree_stainfo(struct sta_info *psta); -extern void rtw_mfree_sta_priv_lock(struct sta_priv *pstapriv); -extern signed int rtw_free_sta_priv(struct sta_priv *pstapriv); -extern void init_addba_retry_timer(_adapter *padapter, struct sta_info *psta); -extern struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, uint8_t *hwaddr, _irqL a3, _irqL a4); -extern signed int rtw_free_stainfo(_adapter *padapter, struct sta_info *psta, int a3); -extern struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, uint8_t *hwaddr, int a3, int a4); -extern signed int rtw_init_bcmc_stainfo(_adapter *padapter, int a2, int a3); -extern struct sta_info *rtw_get_bcmc_stainfo(_adapter *padapter, int a2, int a3); -extern void rtw_free_all_stainfo(_adapter *padapter, _irqL a2, int a3); -// Data declarations -//-------------------------------- -// rtw_xmit.o -// Function declarations -extern void init_txservq(struct tx_servq *ptxservq); -extern void set_qos(struct pkt_file *ppktfile, struct pkt_attrib *pattrib); -extern void rtw_init_sta_xmit_priv(struct sta_xmit_priv *psta_xmitpriv); -extern void rtw_mfree_xmit_priv_lock(struct xmit_priv *pxmitpriv); -extern int qos_acm(uint8_t acm_mask, int priority); -extern int32_t xmitframe_addmic(_adapter *padapter, struct xmit_frame *pxmitframe); -extern int32_t xmitframe_swencrypt(_adapter *padapter, struct xmit_frame *pxmitframe); -extern int32_t rtw_make_wlanhdr(_adapter *padapter, uint8_t *hdr, struct pkt_attrib *pattrib); -extern int32_t rtw_txframes_pending(_adapter *padapter); -extern int32_t rtw_txframes_sta_ac_pending(_adapter *padapter, struct pkt_attrib *pattrib); -extern void rtw_txframes_update_attrib_vcs_info(_adapter *padapter, struct xmit_frame *pxmitframe); -extern int rtw_calculate_wlan_pkt_size_by_attribue(struct pkt_attrib *pattrib); -extern int32_t rtw_put_snap(uint8_t *data, int h_proto); -extern void rtw_update_protection(_adapter *padapter, uint8_t *ie, unsigned int ie_len); -extern void rtw_count_tx_stats(PADAPTER padapter, struct xmit_frame *pxmitframe, uint64_t sz); -extern int32_t rtw_free_xmitbuf_ext(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf, int a3); -extern struct list_head *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv, _irqL a2); -extern int32_t rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe); -extern void rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, _queue *pframequeue); -extern struct tx_servq *rtw_get_sta_pending(_adapter *padapter, struct sta_info *psta, sint up, uint8_t *ac); -extern struct sta_info *rtw_xmit_classifier(_adapter *padapter, struct xmit_frame *pxmitframe); -extern BOOL rtw_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe); -extern void rtw_alloc_hwxmits(_adapter *padapter); -extern void rtw_free_hwxmits(_adapter *padapter); -extern void rtw_free_xmit_priv(struct xmit_priv *pxmitpriv); -extern void rtw_init_hwxmits(struct hw_xmit *phwxmit, sint entry); -extern int32_t rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, _adapter *padapter); -extern signed int rtw_get_ff_hwaddr(struct xmit_frame *pxmitframe); -extern sint xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *pxmitframe); -extern void dequeue_xmitframes_to_sleeping_queue(_adapter *padapter, struct sta_info *psta, _queue *pframequeue); -extern void stop_sta_xmit(_adapter *padapter, struct sta_info *psta); -extern void wakeup_sta_to_xmit(_adapter *padapter, struct sta_info *psta); -extern void xmit_delivery_enabled_frames(_adapter *padapter, struct sta_info *psta, int a3); -extern void rtw_xmit_tasklet(thread_context context); -extern int32_t rtw_xmit(_adapter *padapter, _pkt **ppkt); -extern BOOL rtw_sctx_chk_waring_status(int status); -extern void rtw_sctx_done_err(struct submit_ctx **sctx, int status); -extern struct list_head *rtw_alloc_xmitbuf(struct xmit_priv *pxmitpriv, _irqL a2); -extern int32_t rtw_free_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf, int a3); -extern struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv, uint32_t size, int a3); -extern void rtw_sctx_done(struct submit_ctx **sctx); -// Data declarations -//-------------------------------- -// phydm_RegConfig8195A.o -// Function declarations -extern void odm_ConfigRFReg_8195A(PDM_ODM_T pDM_Odm, u4Byte Addr, u4Byte Data, ODM_RF_RADIO_PATH_E RF_PATH, u4Byte RegAddr); -extern void odm_ConfigRF_RadioA_8195A(PDM_ODM_T pDM_Odm, u4Byte Addr, u4Byte Data); -extern void odm_ConfigBB_AGC_8195A(PDM_ODM_T pDM_Odm, u4Byte Addr, u4Byte Bitmask, u4Byte Data); -extern void odm_ConfigBB_PHY_REG_PG_8195A(PDM_ODM_T pDM_Odm, u4Byte Band, u4Byte RfPath, u4Byte TxNum, u4Byte Addr, u4Byte Bitmask, u4Byte Data); -extern void odm_ConfigBB_PHY_8195A(PDM_ODM_T pDM_Odm, u4Byte Addr, u4Byte Bitmask, u4Byte Data); -extern void odm_ConfigBB_TXPWR_LMT_8195A(PDM_ODM_T pDM_Odm, int Regulation, int Band, int Bandwidth, u1Byte RateSection, u1Byte RfPath, u1Byte Channel, u1Byte PowerLimit); -// Data declarations -//-------------------------------- -// lxbus_hci_intf.o -// Function declarations -extern struct dvobj_priv *hci_lxbus_dvobj_init(); -extern void hci_lxbus_dvobj_deinit(struct dvobj_priv *dvobj); -extern void hci_lxbus_dvobj_request_irq(struct dvobj_priv *dvobj); -extern void hci_lxbus_free_irq(struct dvobj_priv *dvobj); -extern void hci_lxbus_intf_stop(PADAPTER padapter); -// Data declarations -//-------------------------------- -// lxbus_intf.o -// Function declarations -extern signed int lextra_bus_dma_Interrupt(void *data); -// Data declarations -//-------------------------------- -// lxbus_ops.o -// Function declarations -extern void rtl8195a_free_rx_ring(_adapter *padapter); -extern int bus_write32(struct dvobj_priv *pintfhdl, uint32_t addr, uint32_t val, int32_t *err); -extern int bus_write16(struct dvobj_priv *pintfhdl, uint32_t addr, int val, int32_t *err); -extern int bus_write8(struct dvobj_priv *pintfhdl, uint32_t addr, int val, int32_t *err); -extern uint32_t bus_read32(struct dvobj_priv *pintfhdl, uint32_t addr, int32_t *err); -extern int bus_read16(struct dvobj_priv *pintfhdl, uint32_t addr, int32_t *err); -extern int bus_read8(struct dvobj_priv *pintfhdl, uint32_t addr, int32_t *err); -extern void rtl8195a_free_tx_ring(_adapter *padapter, unsigned int prio); -extern signed int rtl8195a_init_desc_ring(_adapter *padapter); -extern signed int rtl8195a_free_desc_ring(_adapter *padapter); -extern void rtl8195a_reset_desc_ring(_adapter *padapter, _irqL a2, int a3); -extern void InitLxDmaRtl8195a(_adapter *Adapter); -extern void rtl8195a_prepare_bcn_tasklet(void *priv); -extern signed int get_txdesc_buf_addr(int ff_hwaddr); -extern signed int rtl8195a_check_txdesc_closed(_adapter *padapter, uint32_t queue_idx, uint32_t index); -extern void rtl8195a_tx_isr(PADAPTER Adapter, int prio); -extern signed int InterruptRecognized8195a(PADAPTER Adapter); -extern void InitInterrupt8195a(PADAPTER padapter); -extern void EnableDMA8195a(PADAPTER padapter); -extern void EnableInterrupt8195a(PADAPTER padapter); -extern void DisableDMA8195a(PADAPTER padapter); -extern void DisableInterrupt8195a(PADAPTER padapter); -extern void UpdateInterruptMask8195a(PADAPTER Adapter, uint32_t *pAddMSRB, uint32_t *pRemoveMSR); -extern signed int CheckRxTgRtl8195a(_adapter *padapter, uint8_t *rx_desc, uint16_t rx_queue_idx); -extern int rtl8192ee_check_rxdesc_remain(_adapter *padapter, int rx_queue_idx); -extern void rtl8195a_recv_tasklet(void *priv); -extern void rtl8195a_tx_int_handler(_adapter *padapter, int a2, int a3); -extern int32_t InterruptHandle8195a(_adapter *padapter, int a2, int a3); -extern void rtl8195a_xmit_tasklet(void *priv); -extern void lxbus_set_intf_ops(struct _io_ops *pops); -// Data declarations -extern uint8_t rx_ring_pool[4][2104]; -extern uint16_t CSWTCH_48[8]; // = { 928, 932, 936, 940, 936, 944, 952, 936 }; -extern uint8_t stop_report_count_20629; -//-------------------------------- -// phydm_ACS.o -// Function declarations -extern void phydm_CLMInit(PVOID pDM_VOID, u2Byte sampleNum); -extern void phydm_CLMtrigger(PVOID pDM_VOID); -extern int phydm_checkCLMready(PVOID pDM_VOID); -extern int phydm_getCLMresult(PVOID pDM_VOID); -extern void phydm_NHMInit(PVOID pDM_VOID, u2Byte sampleNum, int round); -extern void phydm_NHMtrigger(PVOID pDM_VOID); -extern void phydm_FalseAlarmCounterStatistics(PVOID pDM_VOID); -extern void phydm_getNHMresult(PVOID pDM_VOID, unsigned int *fa_crc32_total_cnt, unsigned int *cca_count, unsigned int *nhm_cnt_exp_sum, uint8_t round); -// Data declarations -//-------------------------------- -// PhyDM_Adaptivity.o -// Function declarations -extern void Phydm_CheckAdaptivity(PVOID pDM_VOID); -extern void Phydm_NHMCounterStatisticsInit(PVOID pDM_VOID); -extern void Phydm_GetNHMCounterStatistics(PVOID pDM_VOID); -extern void Phydm_NHMCounterStatisticsReset(PVOID pDM_VOID); -extern void Phydm_NHMCounterStatistics(PVOID pDM_VOID); -extern void Phydm_SetEDCCAThreshold(PVOID pDM_VOID, s1Byte H2L, s1Byte L2H); -extern void Phydm_SetTRxMux(PVOID pDM_VOID, PhyDM_Trx_MUX_Type txMode, PhyDM_Trx_MUX_Type rxMode); -extern void Phydm_MACEDCCAState(PVOID pDM_VOID, PhyDM_MACEDCCA_Type State); -extern BOOL Phydm_CalNHMcnt(PVOID pDM_VOID); -extern void Phydm_CheckEnvironment(PVOID pDM_VOID); -extern void Phydm_SearchPwdBLowerBound(PVOID pDM_VOID); -extern void Phydm_AdaptivityInit(PVOID pDM_VOID); -extern void Phydm_Adaptivity(PVOID pDM_VOID, int IGI); -// Data declarations -//-------------------------------- -// PhyDM_AntDiv.o -// Function declarations -extern void ODM_SwAntDivRestAfterLink(PDM_ODM_T pDM_Odm); -// Data declarations -//-------------------------------- -// phydm_CfoTracking.o -// Function declarations -extern void ODM_CfoTrackingInit(PVOID pDM_VOID); -extern void ODM_CfoTracking(PVOID pDM_VOID); -extern void ODM_ParsingCFO(PVOID pDM_VOID, PVOID pPktinfo_VOID, s1Byte *pcfotail); -// Data declarations -//-------------------------------- -// phydm_debug.o -// Function declarations -extern void ODM_InitDebugSetting(PDM_ODM_T pDM_Odm); -// Data declarations -//-------------------------------- -// phydm_DIG.o -// Function declarations -extern void ODM_ChangeDynamicInitGainThresh(PVOID pDM_VOID, u4Byte DM_Type, u4Byte DM_Value); -extern int getIGIForDiff(int value_IGI); -extern void ODM_Write_DIG(PVOID pDM_VOID, u1Byte CurrentIGI); -extern void odm_PauseDIG(PVOID pDM_VOID, ODM_Pause_DIG_TYPE PauseType, u1Byte IGIValue); -extern u1Byte odm_ForbiddenIGICheck(PVOID pDM_VOID, u1Byte DIG_Dynamic_MIN, u1Byte CurrentIGI); -extern void ODM_Write_CCK_CCA_Thres(PVOID pDM_VOID, u1Byte CurCCK_CCAThres); -extern void odm_PauseCCKPacketDetection(PVOID pDM_VOID, ODM_Pause_CCKPD_TYPE PauseType, u1Byte CCKPDThreshold); -extern void odm_DIGInit(PVOID pDM_VOID); -extern BOOLEAN odm_DigAbort(PVOID pDM_VOID); -extern void odm_DIGbyRSSI_LPS(PVOID pDM_VOID); -extern void odm_FAThresholdCheck(PVOID pDM_VOID, u4Byte *dm_FA_thres); -extern void odm_DIG(PVOID pDM_VOID); -extern void odm_FalseAlarmCounterStatistics(PVOID pDM_VOID); -extern void odm_CCKPacketDetectionThresh(PVOID pDM_VOID); -// Data declarations -extern BOOLEAN bPaused_20545; -//-------------------------------- -// phydm_HWConfig.o -// Function declarations -extern u1Byte odm_QueryRxPwrPercentage(s1Byte AntPower); -extern s4Byte odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Lenovo(PDM_ODM_T pDM_Odm, s4Byte CurrSig); -extern s4Byte odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Netcore(PDM_ODM_T pDM_Odm, s4Byte CurrSig); -extern s4Byte odm_SignalScaleMapping_92CSeries(PDM_ODM_T pDM_Odm, s4Byte CurrSig); -extern s4Byte odm_SignalScaleMapping(PDM_ODM_T pDM_Odm, s4Byte CurrSig); -extern void odm_RxPhyStatus8195A_Parsing(PDM_ODM_T pDM_Odm, PODM_PHY_INFO_T pPhyInfo, pu1Byte pPhyStatus, PODM_PACKET_INFO_T pPktinfo); -extern void odm_Process_RSSIForDM_8195A(PDM_ODM_T pDM_Odm, PODM_PHY_INFO_T pPhyInfo, PODM_PACKET_INFO_T pPktinfo, pu1Byte pPhyStatus); -extern void ODM_PhyStatusQuery_8195A(PDM_ODM_T pDM_Odm, PODM_PHY_INFO_T pPhyInfo, pu1Byte pPhyStatus, PODM_PACKET_INFO_T pPktinfo); -extern HAL_STATUS ODM_ConfigRFWithHeaderFile(PDM_ODM_T pDM_Odm, ODM_RF_Config_Type ConfigType, ODM_RF_RADIO_PATH_E eRFPath); -extern HAL_STATUS ODM_ConfigRFWithTxPwrTrackHeaderFile(PDM_ODM_T pDM_Odm); -extern HAL_STATUS ODM_ConfigBBWithHeaderFile(PDM_ODM_T pDM_Odm, ODM_BB_Config_Type ConfigType); -extern HAL_STATUS ODM_ConfigMACWithHeaderFile(PDM_ODM_T pDM_Odm); -extern HAL_STATUS ODM_ConfigFWWithHeaderFile(PDM_ODM_T pDM_Odm, ODM_FW_Config_Type ConfigType, u1Byte *pFirmware, u4Byte *pSize); -extern u4Byte ODM_GetHWImgVersion(PDM_ODM_T pDM_Odm); -// Data declarations -//-------------------------------- -// phydm_interface.o -// Function declarations -extern u1Byte ODM_Read1Byte(PDM_ODM_T pDM_Odm, u4Byte RegAddr); -extern u2Byte ODM_Read2Byte(PDM_ODM_T pDM_Odm, u4Byte RegAddr); -extern u4Byte ODM_Read4Byte(PDM_ODM_T pDM_Odm, u4Byte RegAddr); -extern void ODM_Write1Byte(PDM_ODM_T pDM_Odm, u4Byte RegAddr, u1Byte Data); -extern void ODM_Write2Byte(PDM_ODM_T pDM_Odm, u4Byte RegAddr, u2Byte Data); -extern void ODM_Write4Byte(PDM_ODM_T pDM_Odm, u4Byte RegAddr, u4Byte Data); -extern void ODM_SetMACReg(PDM_ODM_T pDM_Odm, u4Byte RegAddr, u4Byte BitMask, u4Byte Data); -extern u4Byte ODM_GetMACReg(PDM_ODM_T pDM_Odm, u4Byte RegAddr, u4Byte BitMask); -extern void ODM_SetBBReg(PDM_ODM_T pDM_Odm, u4Byte RegAddr, u4Byte BitMask, u4Byte Data); -extern u4Byte ODM_GetBBReg(PDM_ODM_T pDM_Odm, u4Byte RegAddr, u4Byte BitMask); -// void __usercall ODM_SetRFReg(PDM_ODM_T pDM_Odm@, ODM_RF_RADIO_PATH_E eRFPath@, u4Byte RegAddr@, u4Byte BitMask@, u4Byte Data); -extern u4Byte ODM_GetRFReg(PDM_ODM_T pDM_Odm, ODM_RF_RADIO_PATH_E eRFPath, u4Byte RegAddr, u4Byte BitMask); -extern void ODM_AllocateMemory(PDM_ODM_T pDM_Odm, PVOID *pPtr, u4Byte length); -extern void ODM_FreeMemory(PDM_ODM_T pDM_Odm, PVOID pPtr, u4Byte length); -extern void ODM_MoveMemory(PDM_ODM_T pDM_Odm, PVOID pDest, PVOID pSrc, u4Byte Length); -extern u8Byte ODM_GetCurrentTime(PDM_ODM_T pDM_Odm); -extern u8Byte ODM_GetProgressingTime(PDM_ODM_T pDM_Odm, u8Byte Start_Time); -// Data declarations -//-------------------------------- -// phydm_PowerTracking.o -// Function declarations -extern signed int getSwingIndex(PVOID pDM_VOID); -extern void odm_TXPowerTrackingThermalMeterInit(PVOID pDM_VOID); -extern void odm_TXPowerTrackingCheckIOT(PVOID pDM_VOID); -extern void ODM_TXPowerTrackingCheck(PVOID pDM_VOID); -// Data declarations -extern const u4Byte OFDMSwingTable_New[43]; /* = -{ - 188743725u, 201326640u, 213909555u, 226492470u, 239075385u, 251658300u, 268435520u, - 285212740u, 301989960u, 318767180u, 339738705u, 360710230u, 381681755u, 402653280u, - 427819110u, 452984940u, 478150770u, 507510905u, 536871040u, 570425480u, 603979920u, - 637534360u, 679477410u, 717226155u, 759169205u, 805306560u, 851443915u, 901775575u, - 956301540u, 1015021810u, 1073742080u, 1136656655u, 1203765535u, 1275068720u, 1350566210u, - 1430258005u, 1514144105u, 1606418815u, 1698693525u, 1803551150u, 1908408775u, 2021655010u, - 2139095550u -}; */ -//-------------------------------- -// phydm_RaInfo.o -// Function declarations -extern void odm_RSSIMonitorInit(PVOID pDM_VOID); -extern void ODM_RAPostActionOnAssoc(PVOID pDM_VOID); -extern void odm_RSSIMonitorCheckIOT(PVOID pDM_VOID); -extern void odm_RSSIMonitorCheck(PVOID pDM_VOID); -extern void odm_RateAdaptiveMaskInit(PVOID pDM_VOID); -extern BOOLEAN ODM_RAStateCheck(PVOID pDM_VOID, s4Byte RSSI, BOOLEAN bForceUpdate, pu1Byte pRATRState); -extern void odm_RefreshRateAdaptiveMaskIOT(PVOID pDM_VOID); -extern void odm_RefreshRateAdaptiveMask(PVOID pDM_VOID); -extern u4Byte ODM_Get_Rate_Bitmap(PVOID pDM_VOID, u4Byte macid, u4Byte ra_mask, u1Byte rssi_level); -//------------------------------------------------------------------------- -// hal_com_phycfg.o -// Function declarations -extern int PHY_GetTxPowerByRateBase(PADAPTER Adapter, int Band, int RfPath, int TxNum, RATE_SECTION RateSection); -extern void phy_SetTxPowerByRateBase(PADAPTER Adapter, int Band, int RfPath, RATE_SECTION RateSection, uint8_t TxNum, uint8_t Value); -extern void PHY_GetRateValuesOfTxPowerByRate(PADAPTER pAdapter, uint32_t RegAddr, uint32_t BitMask, uint32_t Value, uint8_t *RateIndex, int8_t *PwrByRateVal, uint8_t *RateNum); -extern void PHY_StoreTxPowerByRateNew(PADAPTER pAdapter, uint32_t Band, uint32_t RfPath, uint32_t TxNum, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); -extern void PHY_InitTxPowerByRate(PADAPTER pAdapter); -extern void PHY_StoreTxPowerByRate(PADAPTER pAdapter, uint32_t Band, uint32_t RfPath, uint32_t TxNum, uint32_t RegAddr, uint32_t BitMask, uint32_t Data); -extern signed int phy_GetChnlIndex(int Channel, uint8_t *ChannelIdx); -extern signed int PHY_GetTxPowerIndexBase(PADAPTER pAdapter, int RFPath, int Rate, CHANNEL_WIDTH BandWidth, uint8_t Channel, PBOOLEAN bIn24G); -extern PADAPTER PHY_GetTxPowerTrackingOffset(PADAPTER result, int RFPath, int Rate); -extern int PHY_GetRateIndexOfTxPowerByRate(uint8_t Rate); -extern unsigned int PHY_GetTxPowerByRate(PADAPTER pAdapter, int Band, int RFPath, int TxNum, uint8_t Rate); -extern void phy_StoreTxPowerByRateBase(PADAPTER pAdapter); -extern void PHY_SetTxPowerByRate(PADAPTER pAdapter, int Band, int RFPath, int TxNum, uint8_t Rate, int8_t Value); -extern void phy_ConvertTxPowerByRateInDbmToRelativeValues(PADAPTER pAdapter); -extern void PHY_TxPowerByRateConfiguration(PADAPTER pAdapter); -extern void PHY_SetTxPowerIndexByRateArray(PADAPTER pAdapter, int RFPath, CHANNEL_WIDTH BandWidth, uint8_t Channel, uint8_t *Rates, uint8_t RateArraySize); -extern void PHY_SetTxPowerIndexByRateSection(PADAPTER pAdapter, int RFPath, uint8_t Channel, int RateSection); -extern void PHY_SetTxPowerLevelByPath(PADAPTER Adapter, uint8_t channel, int path); -extern signed int phy_GetWorldWideLimit(int8_t *LimitTable, int regulation, int16_t channel); -extern int phy_GetChannelIndexOfTxPowerLimit(int Band, uint8_t Channel); -extern int PHY_GetTxPowerLimit(PADAPTER Adapter, uint32_t RegPwrTblSel, BAND_TYPE Band, CHANNEL_WIDTH Bandwidth, uint8_t RfPath, uint8_t DataRate, uint8_t Channel); -extern void PHY_ConvertTxPowerLimitToPowerIndex(PADAPTER Adapter); -extern void PHY_InitTxPowerLimit(PADAPTER Adapter); -extern void PHY_SetTxPowerLimit(PADAPTER Adapter, int Regulation, int Band, int Bandwidth, uint8_t RateSection, uint8_t RfPath, uint8_t Channel, uint8_t PowerLimit); -extern int PHY_GetTxPowerIndex(PADAPTER pAdapter, int RFPath, int Rate, CHANNEL_WIDTH BandWidth, uint8_t Channel); -// Data declarations -//------------------------------------------------------------------------- -// Data declarations - -extern int dword_A50; // = 605557260; // weak -extern int dword_A58; // = 2206368128; // weak -extern uint8_t CSWTCH_14[132];/* = -{ - 1, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 3, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, - 14, 15, 16, 17, 18, 19 }; */ -//-------------------------------- -// rtl8195a_hal_init.o -// Function declarations -extern void Hal_GetEfuseDefinition(PADAPTER padapter, uint8_t efuseType, int type, void *pOut, uint8_t bPseudoTest); -extern void ResumeTxBeacon(PADAPTER padapter); -extern void UpdateHalRAMask8195A(PADAPTER padapter, uint32_t mac_id, uint8_t rssi_level); -extern void HalLittleWifiMCUThreadRtl8195a(thread_context context); -extern void HalCheckInReqStateThreadRtl8195a(thread_context context); -extern void HalTDMAChangeStateThreadRtl8195a(thread_context context); -extern void rtl8195a_read_chip_version(PADAPTER padapter); -extern signed int Hal_EfuseWordEnableDataWrite(PADAPTER padapter, int efuse_addr, uint8_t word_en, uint8_t *data, uint8_t bPseudoTest); -extern void Hal_EfusePowerSwitch(PADAPTER padapter, int bWrite, int PwrState); -extern void rtl8195a_free_hal_data(PADAPTER padapter); -extern void StopTxBeacon(PADAPTER padapter); -extern void SetHalODMVar8195A(PADAPTER Adapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1, int bSet); -extern void rtl8195a_start_thread(_adapter *padapter); -extern void rtl8195a_stop_thread(_adapter *padapter); -extern void Hal_ReadEFuse(PADAPTER padapter, int efuseType, int _offset, int _size_byte, uint8_t *pbuf, uint8_t bPseudoTest); -extern void GetHalODMVar8195A(PADAPTER Adapter, HAL_ODM_VARIABLE eVariable, PVOID pValue1, BOOLEAN bSet); -extern signed int rtw_flash_map_update(PADAPTER padapter, uint8_t *configTbl); -extern void rtw_flash_map_erase(PADAPTER padapter, int a2, int a3, uint32_t a4); -extern int32_t Hal_EfusePgPacketWrite(PADAPTER padapter, uint8_t offset, int word_en, uint8_t *pData, uint8_t bPseudoTest); -extern int Hal_EfuseGetCurrentSize(PADAPTER pAdapter, uint8_t efuseType, int bPseudoTest); -extern signed int rtw_flash_map_write(PADAPTER padapter, uint16_t addr, uint16_t cnts, uint8_t *data); -extern int32_t rtl8195a_FirmwareDownload(PADAPTER padapter, BOOLEAN bUsedWoWLANFw); -extern void rtl8195a_InitBeaconParameters(PADAPTER padapter); -extern void InitBurstPktLen_8195AB(PADAPTER Adapter); -extern void rtl8195a_set_hal_ops(struct hal_ops *pHalFunc); -extern int32_t rtl8195a_InitLLTTable(PADAPTER padapter); -extern signed int Hal_GetChnlGroup8195A(int Channel, uint8_t *pGroup); -extern signed int rtw_flash_read(PADAPTER padapter, int addr, int cnts, uint8_t *data); -extern signed int rtw_flash_write(PADAPTER padapter, int addr, int cnts, uint8_t *data); -extern int rtw_config_map_read(PADAPTER padapter, int addr, int cnts, uint8_t *data, uint8_t efuse); -extern int rtw_config_map_write(PADAPTER padapter, int addr, int cnts, uint8_t *data, uint8_t efuse); -extern void Hal_InitPGData(PADAPTER padapter, uint8_t *PROMContent, int a3, int a4); -extern void Hal_EfuseParseIDCode(PADAPTER padapter, uint8_t *hwinfo); -extern void Hal_ReadPowerValueFromPROM_8195A(PADAPTER Adapter, PTxPowerInfo24G pwrInfo24G, uint8_t *PROMContent, int AutoLoadFail); -extern void Hal_EfuseParseTxPowerInfo_8195A(PADAPTER padapter, uint8_t *PROMContent, int AutoLoadFail); -extern void Hal_EfuseParseEEPROMVer_8195A(PADAPTER padapter, uint8_t *hwinfo, int AutoLoadFail); -extern void Hal_EfuseParsePackageType_8195A(PADAPTER pAdapter, uint8_t *hwinfo, int a3); -extern void Hal_EfuseParseChnlPlan_8195A(PADAPTER padapter, uint8_t *hwinfo, BOOLEAN AutoLoadFail); -extern void Hal_EfuseParseCustomerID_8195A(PADAPTER padapter, uint8_t *hwinfo, int AutoLoadFail); -extern void Hal_EfuseParseXtal_8195A(PADAPTER pAdapter, uint8_t *hwinfo, int AutoLoadFail); -extern void Hal_EfuseParseThermalMeter_8195A(PADAPTER padapter, uint8_t *PROMContent, int AutoLoadFail); -extern void Hal_ReadRFGainOffset(PADAPTER Adapter, uint8_t *PROMContent, int AutoloadFail); -extern int BWMapping_8195A(PADAPTER Adapter, struct pkt_attrib *pattrib); -extern signed int SCMapping_8195A(PADAPTER Adapter, struct pkt_attrib *pattrib); -extern void rtl8195a_update_txdesc(struct xmit_frame *pxmitframe, uint8_t *pbuf); -extern void rtl8195a_fill_fake_txdesc(PADAPTER padapter, uint8_t *pDesc, uint32_t BufferLen, int IsPsPoll, uint8_t IsBTQosNull, uint8_t bDataFrame); -extern void SetHwReg8195A(PADAPTER padapter, int variable, uint8_t *val); -extern void GetHwReg8195A(PADAPTER padapter, int variable, uint8_t *val); -extern signed int SetHalDefVar8195A(PADAPTER padapter, HAL_DEF_VARIABLE variable, void *pval); -extern signed int GetHalDefVar8195A(PADAPTER padapter, HAL_DEF_VARIABLE variable, void *pval); -// Data declarations -extern const struct map_mask_s efuse_map_mask[4]; // = { { 32u, 207u }, { 220u, 221u }, { 282u, 311u }, { 313u, 319u } }; -extern const struct map_mask_s flash_map_mask[2]; // = { { 32u, 311u }, { 313u, 319u } }; -//-------------------------------- -// rtw_ap.o -// Function declarations -extern int rtw_ht_operation_update(_adapter *padapter); -extern void associated_clients_update_0(_adapter *padapter, int updated, int a3); -extern signed int chk_sta_is_alive(struct sta_info *psta); -extern void add_RATid(_adapter *padapter, struct sta_info *psta, int rssi_level); -extern void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta, int a3); -extern void update_beacon(_adapter *padapter, int ie_id, uint8_t *oui, uint8_t tx); -extern int rtw_check_beacon_data(_adapter *padapter, uint8_t *pbuf, int len); -extern void associated_clients_update(_adapter *padapter, int updated, int a3); -extern void bss_cap_update_on_sta_join(_adapter *padapter, struct sta_info *psta); -extern signed int bss_cap_update_on_sta_leave(_adapter *padapter, struct sta_info *psta); -extern signed int ap_free_sta(_adapter *padapter, struct sta_info *psta, int reason); -extern void expire_timeout_chk(_adapter *padapter); -extern int rtw_sta_flush(_adapter *padapter); -extern void free_mlme_ap_info(_adapter *padapter, _irqL a2); -extern void sta_info_update(_adapter *padapter, struct sta_info *psta); -extern void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta); -extern void start_ap_mode(_adapter *padapter); -extern void init_mlme_ap_info(_adapter *padapter); -extern void stop_ap_mode(_adapter *padapter, _irqL a2); -extern uint32_t rtw_generate_bcn_ie(_adapter *adapter, uint8_t *ssid, int ssid_len, uint8_t *ie); -extern int set_hidden_ssid(const char *ifname, uint8_t value); -// Data declarations -//-------------------------------- - -#ifdef __cplusplus -} -#endif -#endif // _WIFI_LIB_H - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/core/option/rtw_opt_skbuf.c b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/core/option/rtw_opt_skbuf.c deleted file mode 100644 index 6639a2e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/core/option/rtw_opt_skbuf.c +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include -#include - -#define MAX_SKB_BUF_SIZE 1650 // should >= the size in wlan driver -#define MAX_SKB_BUF_NUM 8 -#define MAX_LOCAL_SKB_NUM (MAX_SKB_BUF_NUM + 2) - -/* DO NOT modify skb_buf and skb_data structure */ -struct skb_buf { - struct list_head list; - struct sk_buff skb; -}; - -struct skb_data { - struct list_head list; - unsigned char buf[MAX_SKB_BUF_SIZE]; - atomic_t ref; -}; - -unsigned int nr_xmitframe = MAX_SKB_BUF_NUM; -unsigned int nr_xmitbuff = MAX_SKB_BUF_NUM; -int max_local_skb_num = MAX_LOCAL_SKB_NUM; -int max_skb_buf_num = MAX_SKB_BUF_NUM; - -/* DO NOT access skb_pool and skb_data_pool out of wlan driver */ -struct skb_buf skb_pool[MAX_LOCAL_SKB_NUM]; - -// SRAM_BD_DATA_SECTION default in SRAM. Can modify image2.icf to link to the end of SDRAM -SRAM_BD_DATA_SECTION -struct skb_data skb_data_pool[MAX_SKB_BUF_NUM]; - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/HalPhyRf.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/HalPhyRf.h deleted file mode 100644 index 0d5c32a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/HalPhyRf.h +++ /dev/null @@ -1,102 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - #ifndef __HAL_PHY_RF_H__ - #define __HAL_PHY_RF_H__ - -typedef enum _SPUR_CAL_METHOD { - PLL_RESET, - AFE_PHASE_SEL -} SPUR_CAL_METHOD; - -typedef enum _PWRTRACK_CONTROL_METHOD { - BBSWING, - TXAGC, - MIX_MODE -} PWRTRACK_METHOD; - -typedef VOID (*FuncSetPwr)(PDM_ODM_T, PWRTRACK_METHOD, u1Byte, u1Byte); -typedef VOID (*FuncIQK)(PDM_ODM_T, u1Byte, u1Byte, u1Byte); -#if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) -typedef VOID (*FuncLCK)(PDM_ODM_T); -#else -typedef VOID (*FuncLCK)(PADAPTER); -#endif -#else -typedef VOID (*FuncLCK)(PDM_ODM_T); -#endif -typedef VOID (*FuncSwing)(PDM_ODM_T, ps1Byte*, ps1Byte*, ps1Byte*, ps1Byte*); -typedef VOID (*FuncSwingXtal)(PDM_ODM_T, ps1Byte*, ps1Byte*); -typedef VOID (*FuncSetXtal)(PDM_ODM_T); - - -typedef struct _TXPWRTRACK_CFG { - u1Byte SwingTableSize_CCK; - u1Byte SwingTableSize_OFDM; - u1Byte Threshold_IQK; - u1Byte AverageThermalNum; - u1Byte RfPathCount; - u4Byte ThermalRegAddr; - FuncSetPwr ODM_TxPwrTrackSetPwr; - FuncIQK DoIQK; - FuncLCK PHY_LCCalibrate; - FuncSwing GetDeltaSwingTable; - FuncSwingXtal GetDeltaSwingXtalTable; - FuncSetXtal ODM_TxXtalTrackSetXtal; -} TXPWRTRACK_CFG, *PTXPWRTRACK_CFG; - -void ConfigureTxpowerTrack( - IN PDM_ODM_T pDM_Odm, - OUT PTXPWRTRACK_CFG pConfig - ); - - -VOID -ODM_ClearTxPowerTrackingState( - IN PDM_ODM_T pDM_Odm - ); - -VOID -ODM_TXPowerTrackingCallback_ThermalMeter( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm -#else - IN PADAPTER Adapter -#endif - ); - - - -#define ODM_TARGET_CHNL_NUM_2G_5G 59 - - -VOID -ODM_ResetIQKResult( - IN PDM_ODM_T pDM_Odm -); -u1Byte -ODM_GetRightChnlPlaceforIQK( - IN u1Byte chnl -); - - -#endif // #ifndef __HAL_PHY_RF_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/PhyDM_Adaptivity.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/PhyDM_Adaptivity.h deleted file mode 100644 index ac29d6f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/PhyDM_Adaptivity.h +++ /dev/null @@ -1,162 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMADAPTIVITY_H__ -#define __PHYDMADAPTIVITY_H__ - -#define ADAPTIVITY_VERSION "8.4" - -#define PwdBUpperBound 7 -#define DFIRloss 5 - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN)) -typedef enum _tag_PhyDM_REGULATION_Type { - REGULATION_FCC = 0, - REGULATION_MKK = 1, - REGULATION_ETSI = 2, - REGULATION_WW = 3, - - MAX_REGULATION_NUM = 4 -} PhyDM_REGULATION_TYPE; -#endif - - -typedef enum tag_PhyDM_TRx_MUX_Type -{ - PhyDM_SHUTDOWN = 0, - PhyDM_STANDBY_MODE = 1, - PhyDM_TX_MODE = 2, - PhyDM_RX_MODE = 3 -}PhyDM_Trx_MUX_Type; - -typedef enum tag_PhyDM_MACEDCCA_Type -{ - PhyDM_IGNORE_EDCCA = 0, - PhyDM_DONT_IGNORE_EDCCA = 1 -}PhyDM_MACEDCCA_Type; - -typedef struct _ADAPTIVITY_STATISTICS { - s1Byte TH_L2H_ini_mode2; - s1Byte TH_EDCCA_HL_diff_mode2; - s1Byte TH_EDCCA_HL_diff_backup; - s1Byte IGI_Base; - u1Byte IGI_target; - u1Byte NHMWait; - s1Byte H2L_lb; - s1Byte L2H_lb; - BOOLEAN bFirstLink; - BOOLEAN bCheck; - BOOLEAN DynamicLinkAdaptivity; - u1Byte APNumTH; - u1Byte AdajustIGILevel; - BOOLEAN bStopEDCCA; -} ADAPTIVITY_STATISTICS, *PADAPTIVITY_STATISTICS; - -VOID -Phydm_CheckAdaptivity( - IN PVOID pDM_VOID - ); - -VOID -Phydm_CheckEnvironment( - IN PVOID pDM_VOID - ); - -VOID -Phydm_NHMCounterStatisticsInit( - IN PVOID pDM_VOID - ); - -VOID -Phydm_NHMCounterStatistics( - IN PVOID pDM_VOID - ); - -VOID -Phydm_NHMCounterStatisticsReset( - IN PVOID pDM_VOID -); - -VOID -Phydm_GetNHMCounterStatistics( - IN PVOID pDM_VOID -); - -VOID -Phydm_MACEDCCAState( - IN PVOID pDM_VOID, - IN PhyDM_MACEDCCA_Type State -); - -VOID -Phydm_SetEDCCAThreshold( - IN PVOID pDM_VOID, - IN s1Byte H2L, - IN s1Byte L2H -); - -VOID -Phydm_SetTRxMux( - IN PVOID pDM_VOID, - IN PhyDM_Trx_MUX_Type txMode, - IN PhyDM_Trx_MUX_Type rxMode -); - -BOOLEAN -Phydm_CalNHMcnt( - IN PVOID pDM_VOID -); - -VOID -Phydm_SearchPwdBLowerBound( - IN PVOID pDM_VOID -); - -VOID -Phydm_AdaptivityInit( - IN PVOID pDM_VOID - ); - -VOID -Phydm_Adaptivity( - IN PVOID pDM_VOID, - IN u1Byte IGI - ); - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -VOID -Phydm_DisableEDCCA( - IN PVOID pDM_VOID -); - -VOID -Phydm_DynamicEDCCA( - IN PVOID pDM_VOID -); - -VOID -Phydm_AdaptivityBSOD( - IN PVOID pDM_VOID -); - -#endif - - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/mp_precomp.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/mp_precomp.h deleted file mode 100644 index 4e376e7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/mp_precomp.h +++ /dev/null @@ -1,24 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -//#include -//#include "phydm_precomp.h" -//#include "../phydm_precomp.h" - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm.h deleted file mode 100644 index e7f015e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm.h +++ /dev/null @@ -1,2088 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - -#ifndef __HALDMOUTSRC_H__ -#define __HALDMOUTSRC_H__ - - -#include "phydm_EdcaTurboCheck.h" -#include "phydm_DIG.h" -#include "phydm_PathDiv.h" -#include "phydm_RaInfo.h" -#include "phydm_DynamicBBPowerSaving.h" -#include "phydm_DynamicTxPower.h" -#include "phydm_CfoTracking.h" -#include "phydm_PowerTracking.h" -#include "PhyDM_Adaptivity.h" -#include "phydm_NoiseMonitor.h" -#if RTL8195A_SUPPORT -#include "rtl8195a/ROM_RTL8195A_PHYDM.h" -#endif - -#if RTL8711B_SUPPORT -#include "rtl8711b/ROM_RTL8711B_PHYDM.h" -#endif - -//============================================================ -// Definition -//============================================================ -// -// 2011/09/22 MH Define all team supprt ability. -// - -// -// 2011/09/22 MH Define for all teams. Please Define the constan in your precomp header. -// -//#define DM_ODM_SUPPORT_AP 0 -//#define DM_ODM_SUPPORT_ADSL 0 -//#define DM_ODM_SUPPORT_CE 0 -//#define DM_ODM_SUPPORT_MP 1 - -// -// 2011/09/28 MH Define ODM SW team support flag. -// - - - -// -// Antenna Switch Relative Definition. -// - -// -// 20100503 Joseph: -// Add new function SwAntDivCheck8192C(). -// This is the main function of Antenna diversity function before link. -// Mainly, it just retains last scan result and scan again. -// After that, it compares the scan result to see which one gets better RSSI. -// It selects antenna with better receiving power and returns better scan result. -// -#define TP_MODE 0 -#define RSSI_MODE 1 -#define TRAFFIC_LOW 0 -#define TRAFFIC_HIGH 1 - - -//============================================================ -//3 Tx Power Tracking -//3============================================================ -#define DPK_DELTA_MAPPING_NUM 13 -#define index_mapping_HP_NUM 15 -#define OFDM_TABLE_SIZE 43 -#define CCK_TABLE_SIZE 33 -#define TXSCALE_TABLE_SIZE 37 -#define TXPWR_TRACK_TABLE_SIZE 30 -#define DELTA_SWINGIDX_SIZE 30 -#define BAND_NUM 4 - -//============================================================ -//3 PSD Handler -//3============================================================ - -#define AFH_PSD 1 //0:normal PSD scan, 1: only do 20 pts PSD -#define MODE_40M 0 //0:20M, 1:40M -#define PSD_TH2 3 -#define PSD_CHMIN 20 // Minimum channel number for BT AFH -#define SIR_STEP_SIZE 3 -#define Smooth_Size_1 5 -#define Smooth_TH_1 3 -#define Smooth_Size_2 10 -#define Smooth_TH_2 4 -#define Smooth_Size_3 20 -#define Smooth_TH_3 4 -#define Smooth_Step_Size 5 -#define Adaptive_SIR 1 -#if(RTL8723_FPGA_VERIFICATION == 1) -#define PSD_RESCAN 1 -#else -#define PSD_RESCAN 4 -#endif -#define PSD_SCAN_INTERVAL 700 //ms - - - -//8723A High Power IGI Setting -#define DM_DIG_HIGH_PWR_IGI_LOWER_BOUND 0x22 -#define DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND 0x28 -#define DM_DIG_HIGH_PWR_THRESHOLD 0x3a -#define DM_DIG_LOW_PWR_THRESHOLD 0x14 - -//ANT Test -#define ANTTESTALL 0x00 //Ant A or B will be Testing -#define ANTTESTA 0x01 //Ant A will be Testing -#define ANTTESTB 0x02 //Ant B will be testing - -//for 8723A Ant Definition--2012--06--07 due to different IC may be different ANT define -#define MAIN_ANT 1 //Ant A or Ant Main -#define AUX_ANT 2 //AntB or Ant Aux -#define MAX_ANT 3 // 3 for AP using - - -//Antenna Diversity Type -#define SW_ANTDIV 0 -#define HW_ANTDIV 1 -//============================================================ -// structure and define -//============================================================ - -// -// 2011/09/20 MH Add for AP/ADSLpseudo DM structuer requirement. -// We need to remove to other position??? -// -#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN)) -typedef struct rtl8192cd_priv { - u1Byte temp; - -}rtl8192cd_priv, *prtl8192cd_priv; -#endif - - -#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) -typedef struct _ADAPTER{ - u1Byte temp; - #ifdef AP_BUILD_WORKAROUND - HAL_DATA_TYPE* temp2; - prtl8192cd_priv priv; - #endif -}ADAPTER, *PADAPTER; -#endif - -#if (DM_ODM_SUPPORT_TYPE == ODM_AP) - -typedef struct _WLAN_STA{ - u1Byte temp; -} WLAN_STA, *PRT_WLAN_STA; - -#endif - -//Remove DIG by Yuchen - -//Remoce BB power saving by Yuchn - -//Remove DIG by yuchen - -typedef struct _Dynamic_Primary_CCA{ - u1Byte PriCCA_flag; - u1Byte intf_flag; - u1Byte intf_type; - u1Byte DupRTS_flag; - u1Byte Monitor_flag; - u1Byte CH_offset; - u1Byte MF_state; -}Pri_CCA_T, *pPri_CCA_T; - -//Remove RA_T,*pRA_T by RS_James - -typedef struct _RX_High_Power_ -{ - u1Byte RXHP_flag; - u1Byte PSD_func_trigger; - u1Byte PSD_bitmap_RXHP[80]; - u1Byte Pre_IGI; - u1Byte Cur_IGI; - u1Byte Pre_pw_th; - u1Byte Cur_pw_th; - BOOLEAN First_time_enter; - BOOLEAN RXHP_enable; - u1Byte TP_Mode; -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE|ODM_AP|ODM_ADSL)) - RT_TIMER PSDTimer; -#endif -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - #if USE_WORKITEM - RT_WORK_ITEM PSDTimeWorkitem; - #endif -#endif - -}RXHP_T, *pRXHP_T; - -#if(DM_ODM_SUPPORT_TYPE & (ODM_CE)) - #define ASSOCIATE_ENTRY_NUM MACID_NUM_SW_LIMIT /* Max size of AsocEntry[].*/ - #define ODM_ASSOCIATE_ENTRY_NUM ASSOCIATE_ENTRY_NUM -#elif(DM_ODM_SUPPORT_TYPE & (ODM_IOT)) - #ifdef CONFIG_CONCURRENT_MODE - #define ASSOCIATE_ENTRY_NUM NUM_STA+2 // 2 is for station mod - #else - #define ASSOCIATE_ENTRY_NUM NUM_STA//8 // Max size of AsocEntry[]. - #endif - #define ODM_ASSOCIATE_ENTRY_NUM ASSOCIATE_ENTRY_NUM -#elif(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) - #define ASSOCIATE_ENTRY_NUM NUM_STAT - #define ODM_ASSOCIATE_ENTRY_NUM ASSOCIATE_ENTRY_NUM+1 -#else - #define ODM_ASSOCIATE_ENTRY_NUM ASSOCIATE_ENTRY_NUM+1// Default port only one -#endif - -//#ifdef CONFIG_ANTENNA_DIVERSITY -// This indicates two different the steps. -// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air. -// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK -// with original RSSI to determine if it is necessary to switch antenna. -#define SWAW_STEP_PEAK 0 -#define SWAW_STEP_DETERMINE 1 - -#define TP_MODE 0 -#define RSSI_MODE 1 -#define TRAFFIC_LOW 0 -#define TRAFFIC_HIGH 1 -#define TRAFFIC_UltraLOW 2 - -typedef struct _SW_Antenna_Switch_ -{ - u1Byte Double_chk_flag; - u1Byte try_flag; - s4Byte PreRSSI; - u1Byte CurAntenna; - u1Byte PreAntenna; - u1Byte RSSI_Trying; - u1Byte TestMode; - u1Byte bTriggerAntennaSwitch; - u1Byte SelectAntennaMap; - u1Byte RSSI_target; - u1Byte reset_idx; - - // Before link Antenna Switch check - u1Byte SWAS_NoLink_State; - u4Byte SWAS_NoLink_BK_Reg860; - u4Byte SWAS_NoLink_BK_Reg92c; - BOOLEAN ANTA_ON; //To indicate Ant A is or not - BOOLEAN ANTB_ON; //To indicate Ant B is on or not - u1Byte Ant5G; - u1Byte Ant2G; - - s4Byte RSSI_sum_A; - s4Byte RSSI_sum_B; - s4Byte RSSI_cnt_A; - s4Byte RSSI_cnt_B; - - u8Byte lastTxOkCnt; - u8Byte lastRxOkCnt; - u8Byte TXByteCnt_A; - u8Byte TXByteCnt_B; - u8Byte RXByteCnt_A; - u8Byte RXByteCnt_B; - u1Byte TrafficLoad; - u1Byte Train_time; - u1Byte Train_time_flag; -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE|ODM_AP|ODM_ADSL)) - RT_TIMER SwAntennaSwitchTimer; -#endif -#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1) - RT_TIMER SwAntennaSwitchTimer_8723B; -#endif -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - #if USE_WORKITEM - RT_WORK_ITEM SwAntennaSwitchWorkitem; - #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1) - RT_WORK_ITEM SwAntennaSwitchWorkitem_8723B; - #endif - #endif -#endif -/* CE Platform use -#ifdef CONFIG_SW_ANTENNA_DIVERSITY - _timer SwAntennaSwitchTimer; - u8Byte lastTxOkCnt; - u8Byte lastRxOkCnt; - u8Byte TXByteCnt_A; - u8Byte TXByteCnt_B; - u8Byte RXByteCnt_A; - u8Byte RXByteCnt_B; - u1Byte DoubleComfirm; - u1Byte TrafficLoad; - //SW Antenna Switch - - -#endif -*/ -#ifdef CONFIG_HW_ANTENNA_DIVERSITY - //Hybrid Antenna Diversity - u4Byte CCK_Ant1_Cnt[ASSOCIATE_ENTRY_NUM]; - u4Byte CCK_Ant2_Cnt[ASSOCIATE_ENTRY_NUM]; - u4Byte OFDM_Ant1_Cnt[ASSOCIATE_ENTRY_NUM]; - u4Byte OFDM_Ant2_Cnt[ASSOCIATE_ENTRY_NUM]; - u4Byte RSSI_Ant1_Sum[ASSOCIATE_ENTRY_NUM]; - u4Byte RSSI_Ant2_Sum[ASSOCIATE_ENTRY_NUM]; - u1Byte TxAnt[ASSOCIATE_ENTRY_NUM]; - u1Byte TargetSTA; - u1Byte antsel; - u1Byte RxIdleAnt; - -#endif - -}SWAT_T, *pSWAT_T; -//#endif - -//Remove Edca by YuChen - -//Remove ODM_RATE_ADAPTIVE by RS_James - -#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) - - -#ifdef ADSL_AP_BUILD_WORKAROUND -#define MAX_TOLERANCE 5 -#define IQK_DELAY_TIME 1 //ms -#endif - -// -// Indicate different AP vendor for IOT issue. -// -typedef enum _HT_IOT_PEER -{ - HT_IOT_PEER_UNKNOWN = 0, - HT_IOT_PEER_REALTEK = 1, - HT_IOT_PEER_REALTEK_92SE = 2, - HT_IOT_PEER_BROADCOM = 3, - HT_IOT_PEER_RALINK = 4, - HT_IOT_PEER_ATHEROS = 5, - HT_IOT_PEER_CISCO = 6, - HT_IOT_PEER_MERU = 7, - HT_IOT_PEER_MARVELL = 8, - HT_IOT_PEER_REALTEK_SOFTAP = 9,// peer is RealTek SOFT_AP, by Bohn, 2009.12.17 - HT_IOT_PEER_SELF_SOFTAP = 10, // Self is SoftAP - HT_IOT_PEER_AIRGO = 11, - HT_IOT_PEER_INTEL = 12, - HT_IOT_PEER_RTK_APCLIENT = 13, - HT_IOT_PEER_REALTEK_81XX = 14, - HT_IOT_PEER_REALTEK_WOW = 15, - HT_IOT_PEER_MAX = 16 -}HT_IOT_PEER_E, *PHTIOT_PEER_E; -#endif//#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) - -#define DM_Type_ByFW 0 -#define DM_Type_ByDriver 1 - -// -// Declare for common info -// -#define MAX_PATH_NUM_92CS 2 -#define MAX_PATH_NUM_8188E 1 -#define MAX_PATH_NUM_8192E 2 -#define MAX_PATH_NUM_8723B 1 -#define MAX_PATH_NUM_8812A 2 -#define MAX_PATH_NUM_8821A 1 -#define MAX_PATH_NUM_8195A MAX_RF_PATH // 1 -#define MAX_PATH_NUM_8711B 1 - -//Max RF path -#if ((RTL8195A_SUPPORT == 1) || (RTL8711B_SUPPORT == 1) ) -#define ODM_RF_PATH_MAX MAX_PATH_NUM_8195A -#else -#define ODM_RF_PATH_MAX 2 //92c-series -#endif -#define ODM_RF_PATH_MAX_JAGUAR 4 //jaguar - series - -#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_IOT)) -#ifdef RTK_AC_SUPPORT -#define ODM_IC_11AC_SERIES_SUPPORT 1 -#else -#define ODM_IC_11AC_SERIES_SUPPORT 0 -#endif -#else -#define ODM_IC_11AC_SERIES_SUPPORT 1 -#endif - -#if (RTL8711B_SUPPORT == 1) -#define ODM_PHY_STATUS_NEW_TYPE_SUPPORT 1 -#else -#define ODM_PHY_STATUS_NEW_TYPE_SUPPORT 0 -#endif - -#define IQK_THRESHOLD 8 -#if 1 //(RTL8195A_SUPPORT == 1) -typedef struct _ODM_Phy_Status_Info_ -{ - // - // Be care, if you want to add any element please insert between - // RxPWDBAll & SignalStrength. - // -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN)) - u4Byte RxPWDBAll; -#else - u1Byte RxPWDBAll; -#endif -#if (DM_ODM_SUPPORT_TYPE & (ODM_IOT)) -#if (RTL8195A_SUPPORT == 1) - u1Byte SignalQuality; // in 0-100 index. - u1Byte RxMIMOSignalStrength[ODM_RF_PATH_MAX]; // in 0~100 index - s1Byte RecvSignalPower; // Real power in dBm for this packet, no beautification and aggregation. Keep this raw info to be used for the other procedures. - u1Byte SignalStrength; // in 0-100 index. - #if (ODM_IC_11AC_SERIES_SUPPORT) - u1Byte RxMIMOEVMdbm[ODM_RF_PATH_MAX]; // per-path's EVM dbm - s2Byte Cfo_short[ODM_RF_PATH_MAX]; // per-path's Cfo_short - s2Byte Cfo_tail[ODM_RF_PATH_MAX]; // per-path's Cfo_tail - u1Byte BandWidth; - #endif -#elif (RTL8711B_SUPPORT == 1) - u1Byte SignalQuality; /* in 0-100 index. */ - s1Byte RxMIMOSignalQuality[4]; /* per-path's EVM */ - u1Byte RxMIMOEVMdbm[4]; /* per-path's EVM dbm */ - u1Byte RxMIMOSignalStrength[4]; /* in 0~100 index */ - s2Byte Cfo_short[4]; /* per-path's Cfo_short */ - s2Byte Cfo_tail[4]; /* per-path's Cfo_tail */ - s1Byte RxPower; /* in dBm Translate from PWdB */ - s1Byte RecvSignalPower; /* Real power in dBm for this packet, no beautification and aggregation. Keep this raw info to be used for the other procedures. */ - u1Byte BTRxRSSIPercentage; - u1Byte SignalStrength; /* in 0-100 index. */ - s1Byte RxPwr[4]; /* per-path's pwdb */ - s1Byte RxSNR[4]; /* per-path's SNR */ -#if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1) - u1Byte RxCount:2; /* RX path counter---*/ - u1Byte BandWidth:2; - u1Byte rxsc:4; /* sub-channel---*/ -#else - u1Byte BandWidth; -#endif - u1Byte btCoexPwrAdjust; -#if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1) - u1Byte channel; /* channel number---*/ - BOOLEAN bMuPacket; /* is MU packet or not---*/ - BOOLEAN bBeamformed; /* BF packet---*/ -#endif -#endif -#else - u1Byte SignalQuality; // in 0-100 index. - s1Byte RxMIMOSignalQuality[4]; //per-path's EVM - u1Byte RxMIMOEVMdbm[4]; //per-path's EVM dbm - u1Byte RxMIMOSignalStrength[4];// in 0~100 index - u2Byte Cfo_short[4]; // per-path's Cfo_short - u2Byte Cfo_tail[4]; // per-path's Cfo_tail - #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) - s1Byte RxPower; // in dBm Translate from PWdB - s1Byte RecvSignalPower; // Real power in dBm for this packet, no beautification and aggregation. Keep this raw info to be used for the other procedures. - u1Byte BTRxRSSIPercentage; - u1Byte SignalStrength; // in 0-100 index. - s1Byte RxPwr[4]; //per-path's pwdb - #endif - u1Byte RxSNR[4]; //per-path's SNR - u1Byte BandWidth; - u1Byte btCoexPwrAdjust; -#endif -}ODM_PHY_INFO_T,*PODM_PHY_INFO_T; -#else - -typedef struct _ODM_Phy_Status_Info_ { - // - // Be care, if you want to add any element please insert between - // RxPWDBAll & SignalStrength. - // -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN)) - u4Byte RxPWDBAll; -#else - u1Byte RxPWDBAll; -#endif - u1Byte SignalQuality; /* in 0-100 index. */ - s1Byte RxMIMOSignalQuality[ODM_RF_PATH_MAX]; /* per-path's EVM */ - u1Byte RxMIMOEVMdbm[ODM_RF_PATH_MAX]; /* per-path's EVM dbm */ - u1Byte RxMIMOSignalStrength[ODM_RF_PATH_MAX]; /* in 0~100 index */ - s2Byte Cfo_short[ODM_RF_PATH_MAX]; /* per-path's Cfo_short */ - s2Byte Cfo_tail[ODM_RF_PATH_MAX]; /* per-path's Cfo_tail */ - s1Byte RxPower; /* in dBm Translate from PWdB */ - s1Byte RecvSignalPower; /* Real power in dBm for this packet, no beautification and aggregation. Keep this raw info to be used for the other procedures. */ - u1Byte BTRxRSSIPercentage; - u1Byte SignalStrength; /* in 0-100 index. */ - s1Byte RxPwr[ODM_RF_PATH_MAX]; /* per-path's pwdb */ - s1Byte RxSNR[ODM_RF_PATH_MAX]; /* per-path's SNR */ -#if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1) - u1Byte RxCount:2; /* RX path counter---*/ - u1Byte BandWidth:2; - u1Byte rxsc:4; /* sub-channel---*/ -#else - u1Byte BandWidth; -#endif -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE|ODM_IOT)) - u1Byte btCoexPwrAdjust; -#endif -#if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1) - u1Byte channel; /* channel number---*/ - BOOLEAN bMuPacket; /* is MU packet or not---*/ - BOOLEAN bBeamformed; /* BF packet---*/ -#endif -} ODM_PHY_INFO_T, *PODM_PHY_INFO_T; - -#endif -typedef struct _ODM_Per_Pkt_Info_ -{ - //u1Byte Rate; - u1Byte DataRate; - u1Byte StationID; - BOOLEAN bPacketMatchBSSID; - BOOLEAN bPacketToSelf; - BOOLEAN bPacketBeacon; -}ODM_PACKET_INFO_T,*PODM_PACKET_INFO_T; - - -typedef struct _ODM_Phy_Dbg_Info_ -{ - //ODM Write,debug info - s1Byte RxSNRdB[4]; - u4Byte NumQryPhyStatus; - u4Byte NumQryPhyStatusCCK; - u4Byte NumQryPhyStatusOFDM; -#if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1) - u4Byte NumQryMuPkt; - u4Byte NumQryBfPkt; - u4Byte NumQryMuVhtPkt[40]; - u4Byte NumQryVhtPkt[40]; - BOOLEAN bLdpcPkt; - BOOLEAN bStbcPkt; -#endif - u1Byte NumQryBeaconPkt; - //Others - s4Byte RxEVM[4]; - -}ODM_PHY_DBG_INFO_T; - - -typedef struct _ODM_Mac_Status_Info_ -{ - u1Byte test; - -}ODM_MAC_INFO; - - -typedef enum tag_Dynamic_ODM_Support_Ability_Type -{ - // BB Team - ODM_DIG = 0x00000001, - ODM_HIGH_POWER = 0x00000002, - ODM_CCK_CCA_TH = 0x00000004, - ODM_FA_STATISTICS = 0x00000008, - ODM_RAMASK = 0x00000010, - ODM_RSSI_MONITOR = 0x00000020, - ODM_SW_ANTDIV = 0x00000040, - ODM_HW_ANTDIV = 0x00000080, - ODM_BB_PWRSV = 0x00000100, - ODM_2TPATHDIV = 0x00000200, - ODM_1TPATHDIV = 0x00000400, - ODM_PSD2AFH = 0x00000800 -}ODM_Ability_E; - -// -// 2011/20/20 MH For MP driver RT_WLAN_STA = STA_INFO_T -// Please declare below ODM relative info in your STA info structure. -// -#if 1 -typedef struct _ODM_STA_INFO{ - // Driver Write - BOOLEAN bUsed; // record the sta status link or not? - //u1Byte WirelessMode; // - u1Byte IOTPeer; // Enum value. HT_IOT_PEER_E - - // ODM Write - //1 PHY_STATUS_INFO - u1Byte RSSI_Path[4]; // - u1Byte RSSI_Ave; - u1Byte RXEVM[4]; - u1Byte RXSNR[4]; - - // ODM Write - //1 TX_INFO (may changed by IC) - //TX_INFO_T pTxInfo; // Define in IC folder. Move lower layer. -#if 0 - u1Byte ANTSEL_A; //in Jagar: 4bit; others: 2bit - u1Byte ANTSEL_B; //in Jagar: 4bit; others: 2bit - u1Byte ANTSEL_C; //only in Jagar: 4bit - u1Byte ANTSEL_D; //only in Jagar: 4bit - u1Byte TX_ANTL; //not in Jagar: 2bit - u1Byte TX_ANT_HT; //not in Jagar: 2bit - u1Byte TX_ANT_CCK; //not in Jagar: 2bit - u1Byte TXAGC_A; //not in Jagar: 4bit - u1Byte TXAGC_B; //not in Jagar: 4bit - u1Byte TXPWR_OFFSET; //only in Jagar: 3bit - u1Byte TX_ANT; //only in Jagar: 4bit for TX_ANTL/TX_ANTHT/TX_ANT_CCK -#endif - - // - // Please use compile flag to disabe the strcutrue for other IC except 88E. - // Move To lower layer. - // - // ODM Write Wilson will handle this part(said by Luke.Lee) - //TX_RPT_T pTxRpt; // Define in IC folder. Move lower layer. -#if 0 - //1 For 88E RA (don't redefine the naming) - u1Byte rate_id; - u1Byte rate_SGI; - u1Byte rssi_sta_ra; - - u1Byte SGI_enable; - u1Byte Decision_rate; - u1Byte Pre_rate; - u1Byte Active; - - // Driver write Wilson handle. - //1 TX_RPT (don't redefine the naming) - u2Byte RTY[4]; // ??? - u2Byte TOTAL; // ??? - u2Byte DROP; // ??? - // - // Please use compile flag to disabe the strcutrue for other IC except 88E. - // -#endif - -}ODM_STA_INFO_T, *PODM_STA_INFO_T; -#endif - -// -// 2011/10/20 MH Define Common info enum for all team. -// -typedef enum _ODM_Common_Info_Definition -{ -//-------------REMOVED CASE-----------// - //ODM_CMNINFO_CCK_HP, - //ODM_CMNINFO_RFPATH_ENABLE, // Define as ODM write??? - //ODM_CMNINFO_BT_COEXIST, // ODM_BT_COEXIST_E - //ODM_CMNINFO_OP_MODE, // ODM_OPERATION_MODE_E -//-------------REMOVED CASE-----------// - - // - // Fixed value: - // - - //-----------HOOK BEFORE REG INIT-----------// - ODM_CMNINFO_PLATFORM = 0, - ODM_CMNINFO_ABILITY, // ODM_ABILITY_E - ODM_CMNINFO_INTERFACE, // ODM_INTERFACE_E - ODM_CMNINFO_MP_TEST_CHIP, - ODM_CMNINFO_IC_TYPE, // ODM_IC_TYPE_E - ODM_CMNINFO_CUT_VER, // ODM_CUT_VERSION_E - ODM_CMNINFO_FAB_VER, // ODM_FAB_E - ODM_CMNINFO_RF_TYPE, // ODM_RF_PATH_E or ODM_RF_TYPE_E? - ODM_CMNINFO_RFE_TYPE, - ODM_CMNINFO_BOARD_TYPE, // ODM_BOARD_TYPE_E - ODM_CMNINFO_PACKAGE_TYPE, - ODM_CMNINFO_EXT_LNA, // TRUE - ODM_CMNINFO_5G_EXT_LNA, - ODM_CMNINFO_EXT_PA, - ODM_CMNINFO_5G_EXT_PA, - ODM_CMNINFO_GPA, - ODM_CMNINFO_APA, - ODM_CMNINFO_GLNA, - ODM_CMNINFO_ALNA, - ODM_CMNINFO_EXT_TRSW, - ODM_CMNINFO_PATCH_ID, //CUSTOMER ID - ODM_CMNINFO_BINHCT_TEST, - ODM_CMNINFO_BWIFI_TEST, - ODM_CMNINFO_SMART_CONCURRENT, - ODM_CMNINFO_DOMAIN_CODE_2G, - ODM_CMNINFO_DOMAIN_CODE_5G, - ODM_CMNINFO_EEPROMVERSION, - ODM_CMNINFO_CRYSTALCAP, - //-----------HOOK BEFORE REG INIT-----------// - - - // - // Dynamic value: - // -//--------- POINTER REFERENCE-----------// - ODM_CMNINFO_MAC_PHY_MODE, // ODM_MAC_PHY_MODE_E - ODM_CMNINFO_TX_UNI, - ODM_CMNINFO_RX_UNI, - ODM_CMNINFO_WM_MODE, // ODM_WIRELESS_MODE_E - ODM_CMNINFO_BAND, // ODM_BAND_TYPE_E - ODM_CMNINFO_SEC_CHNL_OFFSET, // ODM_SEC_CHNL_OFFSET_E - ODM_CMNINFO_SEC_MODE, // ODM_SECURITY_E - ODM_CMNINFO_BW, // ODM_BW_E - ODM_CMNINFO_CHNL, - ODM_CMNINFO_FORCED_RATE, - - ODM_CMNINFO_DMSP_GET_VALUE, - ODM_CMNINFO_BUDDY_ADAPTOR, - ODM_CMNINFO_DMSP_IS_MASTER, - ODM_CMNINFO_SCAN, - ODM_CMNINFO_POWER_SAVING, - ODM_CMNINFO_ONE_PATH_CCA, // ODM_CCA_PATH_E - ODM_CMNINFO_DRV_STOP, - ODM_CMNINFO_PNP_IN, - ODM_CMNINFO_INIT_ON, - ODM_CMNINFO_ANT_TEST, - ODM_CMNINFO_NET_CLOSED, - ODM_CMNINFO_MP_MODE, - //ODM_CMNINFO_RTSTA_AID, // For win driver only? - ODM_CMNINFO_FORCED_IGI_LB, - ODM_CMNINFO_P2P_LINK, - ODM_CMNINFO_FCS_MODE, -//--------- POINTER REFERENCE-----------// - -//------------CALL BY VALUE-------------// - ODM_CMNINFO_WIFI_DIRECT, - ODM_CMNINFO_WIFI_DISPLAY, - ODM_CMNINFO_LINK_IN_PROGRESS, - ODM_CMNINFO_LINK, - ODM_CMNINFO_STATION_STATE, - ODM_CMNINFO_RSSI_MIN, - ODM_CMNINFO_DBG_COMP, // u8Byte - ODM_CMNINFO_DBG_LEVEL, // u4Byte - ODM_CMNINFO_RA_THRESHOLD_HIGH, // u1Byte - ODM_CMNINFO_RA_THRESHOLD_LOW, // u1Byte - ODM_CMNINFO_RF_ANTENNA_TYPE, // u1Byte - ODM_CMNINFO_BT_ENABLED, - ODM_CMNINFO_BT_HS_CONNECT_PROCESS, - ODM_CMNINFO_BT_HS_RSSI, - ODM_CMNINFO_BT_OPERATION, - ODM_CMNINFO_BT_LIMITED_DIG, //Need to Limited Dig or not - ODM_CMNINFO_BT_DISABLE_EDCA, - ODM_CMNINFO_NO_BEACON_IN_2S, -//------------CALL BY VALUE-------------// - - // - // Dynamic ptr array hook itms. - // - ODM_CMNINFO_STA_STATUS, - ODM_CMNINFO_PHY_STATUS, - ODM_CMNINFO_MAC_STATUS, - - ODM_CMNINFO_MAX, - - -}ODM_CMNINFO_E; - -// -// 2011/10/20 MH Define ODM support ability. ODM_CMNINFO_ABILITY -// -typedef enum _ODM_Support_Ability_Definition -{ - // - // BB ODM section BIT 0-19 - // - ODM_BB_DIG = BIT0, - ODM_BB_RA_MASK = BIT1, - ODM_BB_DYNAMIC_TXPWR = BIT2, - ODM_BB_FA_CNT = BIT3, - ODM_BB_RSSI_MONITOR = BIT4, - ODM_BB_CCK_PD = BIT5, - ODM_BB_ANT_DIV = BIT6, - ODM_BB_PWR_SAVE = BIT7, - ODM_BB_PWR_TRAIN = BIT8, - ODM_BB_RATE_ADAPTIVE = BIT9, - ODM_BB_PATH_DIV = BIT10, - ODM_BB_PSD = BIT11, - ODM_BB_RXHP = BIT12, - ODM_BB_ADAPTIVITY = BIT13, - ODM_BB_CFO_TRACKING = BIT14, - ODM_BB_NHM_CNT = BIT15, - ODM_BB_PRIMARY_CCA = BIT16, - - // - // MAC DM section BIT 20-23 - // - ODM_MAC_EDCA_TURBO = BIT20, - ODM_MAC_EARLY_MODE = BIT21, - - // - // RF ODM section BIT 24-31 - // - ODM_RF_TX_PWR_TRACK = BIT24, - ODM_RF_RX_GAIN_TRACK = BIT25, - ODM_RF_CALIBRATION = BIT26, - -}ODM_ABILITY_E; - -// ODM_CMNINFO_INTERFACE -typedef enum tag_ODM_Support_Interface_Definition -{ - ODM_ITRF_PCIE = 0x1, - ODM_ITRF_USB = 0x2, - ODM_ITRF_SDIO = 0x4, - ODM_ITRF_GSPI = 0x8, - ODM_ITRF_LXBUS = 0x10, - ODM_ITRF_ALL = 0xFF, -}ODM_INTERFACE_E; - -// ODM_CMNINFO_IC_TYPE -typedef enum tag_ODM_Support_IC_Type_Definition -{ - ODM_RTL8192S = BIT0, - ODM_RTL8192C = BIT1, - ODM_RTL8192D = BIT2, - ODM_RTL8723A = BIT3, - ODM_RTL8188E = BIT4, - ODM_RTL8812 = BIT5, - ODM_RTL8821 = BIT6, - ODM_RTL8192E = BIT7, - ODM_RTL8723B = BIT8, - ODM_RTL8814A = BIT9, - ODM_RTL8881A = BIT10, - ODM_RTL8821B = BIT11, - ODM_RTL8822B = BIT12, - ODM_RTL8195A = BIT13, - ODM_RTL8711B = BIT14 -}ODM_IC_TYPE_E; - -#define ODM_IC_11N_SERIES (ODM_RTL8192S|ODM_RTL8192C|ODM_RTL8192D|ODM_RTL8723A|ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8195A|ODM_RTL8711B) -#define ODM_IC_11AC_SERIES (ODM_RTL8812|ODM_RTL8821|ODM_RTL8814A|ODM_RTL8881A|ODM_RTL8821B|ODM_RTL8822B) - -//ODM_CMNINFO_CUT_VER -typedef enum tag_ODM_Cut_Version_Definition -{ - ODM_CUT_A = 0, - ODM_CUT_B = 1, - ODM_CUT_C = 2, - ODM_CUT_D = 3, - ODM_CUT_E = 4, - ODM_CUT_F = 5, - - ODM_CUT_I = 8, - ODM_CUT_TEST = 15, -}ODM_CUT_VERSION_E; - -// ODM_CMNINFO_FAB_VER -typedef enum tag_ODM_Fab_Version_Definition -{ - ODM_TSMC = 0, - ODM_UMC = 1, -}ODM_FAB_E; - -// ODM_CMNINFO_RF_TYPE -// -// For example 1T2R (A+AB = BIT0|BIT4|BIT5) -// -typedef enum tag_ODM_RF_Path_Bit_Definition -{ - ODM_RF_TX_A = BIT0, - ODM_RF_TX_B = BIT1, - ODM_RF_TX_C = BIT2, - ODM_RF_TX_D = BIT3, - ODM_RF_RX_A = BIT4, - ODM_RF_RX_B = BIT5, - ODM_RF_RX_C = BIT6, - ODM_RF_RX_D = BIT7, -}ODM_RF_PATH_E; - - -typedef enum tag_ODM_RF_Type_Definition -{ - ODM_1T1R = 0, - ODM_1T2R = 1, - ODM_2T2R = 2, - ODM_2T3R = 3, - ODM_2T4R = 4, - ODM_3T3R = 5, - ODM_3T4R = 6, - ODM_4T4R = 7, -}ODM_RF_TYPE_E; - - -// -// ODM Dynamic common info value definition -// - -//typedef enum _MACPHY_MODE_8192D{ -// SINGLEMAC_SINGLEPHY, -// DUALMAC_DUALPHY, -// DUALMAC_SINGLEPHY, -//}MACPHY_MODE_8192D,*PMACPHY_MODE_8192D; -// Above is the original define in MP driver. Please use the same define. THX. -typedef enum tag_ODM_MAC_PHY_Mode_Definition -{ - ODM_SMSP = 0, - ODM_DMSP = 1, - ODM_DMDP = 2, -}ODM_MAC_PHY_MODE_E; - - -typedef enum tag_BT_Coexist_Definition -{ - ODM_BT_BUSY = 1, - ODM_BT_ON = 2, - ODM_BT_OFF = 3, - ODM_BT_NONE = 4, -}ODM_BT_COEXIST_E; - -// ODM_CMNINFO_OP_MODE -typedef enum tag_Operation_Mode_Definition -{ - ODM_NO_LINK = BIT0, - ODM_LINK = BIT1, - ODM_SCAN = BIT2, - ODM_POWERSAVE = BIT3, - ODM_AP_MODE = BIT4, - ODM_CLIENT_MODE = BIT5, - ODM_AD_HOC = BIT6, - ODM_WIFI_DIRECT = BIT7, - ODM_WIFI_DISPLAY = BIT8, -}ODM_OPERATION_MODE_E; - -// ODM_CMNINFO_WM_MODE -#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_CE|ODM_IOT)) -typedef enum tag_Wireless_Mode_Definition -{ - ODM_WM_UNKNOW = 0x0, - ODM_WM_B = BIT0, - ODM_WM_G = BIT1, - ODM_WM_A = BIT2, - ODM_WM_N24G = BIT3, - ODM_WM_N5G = BIT4, - ODM_WM_AUTO = BIT5, - ODM_WM_AC = BIT6, -}ODM_WIRELESS_MODE_E; -#else -typedef enum tag_Wireless_Mode_Definition -{ - ODM_WM_UNKNOWN = 0x00, - ODM_WM_A = BIT0, - ODM_WM_B = BIT1, - ODM_WM_G = BIT2, - ODM_WM_AUTO = BIT3, - ODM_WM_N24G = BIT4, - ODM_WM_N5G = BIT5, - ODM_WM_AC_5G = BIT6, - ODM_WM_AC_24G = BIT7, - ODM_WM_AC_ONLY = BIT8, - ODM_WM_MAX = BIT9 -}ODM_WIRELESS_MODE_E; -#endif - -// ODM_CMNINFO_BAND -typedef enum tag_Band_Type_Definition -{ - ODM_BAND_2_4G = 0, - ODM_BAND_5G, - ODM_BAND_ON_BOTH, - ODM_BANDMAX - -}ODM_BAND_TYPE_E; - -// ODM_CMNINFO_SEC_CHNL_OFFSET -typedef enum tag_Secondary_Channel_Offset_Definition -{ - ODM_DONT_CARE = 0, - ODM_BELOW = 1, - ODM_ABOVE = 2 -}ODM_SEC_CHNL_OFFSET_E; - -// ODM_CMNINFO_SEC_MODE -typedef enum tag_Security_Definition -{ - ODM_SEC_OPEN = 0, - ODM_SEC_WEP40 = 1, - ODM_SEC_TKIP = 2, - ODM_SEC_RESERVE = 3, - ODM_SEC_AESCCMP = 4, - ODM_SEC_WEP104 = 5, - ODM_WEP_WPA_MIXED = 6, // WEP + WPA - ODM_SEC_SMS4 = 7, -}ODM_SECURITY_E; - -// ODM_CMNINFO_BW -typedef enum tag_Bandwidth_Definition -{ - ODM_BW20M = 0, - ODM_BW40M = 1, - ODM_BW80M = 2, - ODM_BW160M = 3, - ODM_BW10M = 4, -}ODM_BW_E; - - -// ODM_CMNINFO_BOARD_TYPE -// For non-AC-series IC , ODM_BOARD_5G_EXT_PA and ODM_BOARD_5G_EXT_LNA are ignored -// For AC-series IC, external PA & LNA can be indivisuallly added on 2.4G and/or 5G -typedef enum tag_Board_Definition -{ - ODM_BOARD_DEFAULT = 0, // The DEFAULT case. - ODM_BOARD_MINICARD = BIT(0), // 0 = non-mini card, 1= mini card. - ODM_BOARD_SLIM = BIT(1), // 0 = non-slim card, 1 = slim card - ODM_BOARD_BT = BIT(2), // 0 = without BT card, 1 = with BT - ODM_BOARD_EXT_PA = BIT(3), // 0 = no 2G ext-PA, 1 = existing 2G ext-PA - ODM_BOARD_EXT_LNA = BIT(4), // 0 = no 2G ext-LNA, 1 = existing 2G ext-LNA - ODM_BOARD_EXT_TRSW = BIT(5), // 0 = no ext-TRSW, 1 = existing ext-TRSW - ODM_BOARD_EXT_PA_5G = BIT(6), // 0 = no 5G ext-PA, 1 = existing 5G ext-PA - ODM_BOARD_EXT_LNA_5G= BIT(7), // 0 = no 5G ext-LNA, 1 = existing 5G ext-LNA -}ODM_BOARD_TYPE_E; - -typedef enum tag_ODM_Package_Definition -{ - ODM_PACKAGE_DEFAULT = 0, - ODM_PACKAGE_QFN68 = BIT(0), - ODM_PACKAGE_TFBGA90 = BIT(1), - ODM_PACKAGE_TFBGA79 = BIT(2), -}ODM_Package_TYPE_E; - -typedef enum tag_ODM_TYPE_GPA_Definition -{ - TYPE_GPA0 = 0, - TYPE_GPA1 = BIT(1)|BIT(0) -}ODM_TYPE_GPA_E; - -typedef enum tag_ODM_TYPE_APA_Definition -{ - TYPE_APA0 = 0, - TYPE_APA1 = BIT(1)|BIT(0) -}ODM_TYPE_APA_E; - -typedef enum tag_ODM_TYPE_GLNA_Definition -{ - TYPE_GLNA0 = 0, - TYPE_GLNA1 = BIT(2)|BIT(0), - TYPE_GLNA2 = BIT(3)|BIT(1), - TYPE_GLNA3 = BIT(3)|BIT(2)|BIT(1)|BIT(0) -}ODM_TYPE_GLNA_E; - -typedef enum tag_ODM_TYPE_ALNA_Definition -{ - TYPE_ALNA0 = 0, - TYPE_ALNA1 = BIT(2)|BIT(0), - TYPE_ALNA2 = BIT(3)|BIT(1), - TYPE_ALNA3 = BIT(3)|BIT(2)|BIT(1)|BIT(0) -}ODM_TYPE_ALNA_E; - -// ODM_CMNINFO_ONE_PATH_CCA -typedef enum tag_CCA_Path -{ - ODM_CCA_2R = 0, - ODM_CCA_1R_A = 1, - ODM_CCA_1R_B = 2, -}ODM_CCA_PATH_E; - - -typedef struct _ODM_RA_Info_ -{ - u1Byte RateID; - u4Byte RateMask; - u4Byte RAUseRate; - u1Byte RateSGI; - u1Byte RssiStaRA; - u1Byte PreRssiStaRA; - u1Byte SGIEnable; - u1Byte DecisionRate; - u1Byte PreRate; - u1Byte HighestRate; - u1Byte LowestRate; - u4Byte NscUp; - u4Byte NscDown; - u2Byte RTY[5]; - u4Byte TOTAL; - u2Byte DROP; - u1Byte Active; - u2Byte RptTime; - u1Byte RAWaitingCounter; - u1Byte RAPendingCounter; -#if ((RTL8195A_SUPPORT == 1) || (RTL8711B_SUPPORT == 1)) - //---------Gary----------// //TODO: James - u1Byte RAINFO; - // BIT0: UL/DL state - // BIT1: EN_STBC - // BIT2: LDPC_CAP - // Add by Wilson 20130320 - // BIT3,BIT4 : 2SS short cut - // BIT5 : init rate by rssi - // BIT6: BF state - // BIT7: delay try rate - - u1Byte Initial_BW; - u1Byte BW_setting; - u1Byte DISPT; - u1Byte DISRA; - u1Byte Stage_RA; - u1Byte PRE_BW; - u1Byte MacID; - u1Byte Try_state; - u1Byte Try_done_cnt; - u2Byte RA_counter; - u1Byte Init_Rate_H; - u1Byte Init_Rate_M; - u1Byte Init_Rate_L; - u4Byte Total_TX; - - //2 Power Trainning - u1Byte TRAINING_RATE; - u1Byte STOP_PT_COUNTER; - u1Byte MODE_SS; - u1Byte PT_smooth_factor; -#endif - -#if 1 //POWER_TRAINING_ACTIVE == 1 // For compile pass only~! - u1Byte PTActive; // on or off - u1Byte PTTryState; // 0 trying state, 1 for decision state - u1Byte PTStage; // 0~6 - u1Byte PTStopCount; //Stop PT counter - u1Byte PTPreRate; // if rate change do PT - u1Byte PTPreRssi; // if RSSI change 5% do PT - u1Byte PTModeSS; // decide whitch rate should do PT - u1Byte RAstage; // StageRA, decide how many times RA will be done between PT - u1Byte PTSmoothFactor; -#endif -} ODM_RA_INFO_T,*PODM_RA_INFO_T; - -// -// ODM Dynamic common info value definition -// - -typedef struct _FAST_ANTENNA_TRAINNING_ -{ - u1Byte Bssid[6]; - u1Byte antsel_rx_keep_0; - u1Byte antsel_rx_keep_1; - u1Byte antsel_rx_keep_2; - u1Byte antsel_rx_keep_3; - u4Byte antSumRSSI[7]; - u4Byte antRSSIcnt[7]; - u4Byte antAveRSSI[7]; - u1Byte FAT_State; - u4Byte TrainIdx; - u1Byte antsel_a[ODM_ASSOCIATE_ENTRY_NUM]; - u1Byte antsel_b[ODM_ASSOCIATE_ENTRY_NUM]; - u1Byte antsel_c[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte MainAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte AuxAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte MainAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte AuxAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM]; - u1Byte RxIdleAnt; - BOOLEAN bBecomeLinked; - u4Byte MinMaxRSSI; - u1Byte idx_AntDiv_counter_2G; - u1Byte idx_AntDiv_counter_5G; - u4Byte AntDiv_2G_5G; - u4Byte CCK_counter_main; - u4Byte CCK_counter_aux; - u4Byte OFDM_counter_main; - u4Byte OFDM_counter_aux; - -}FAT_T,*pFAT_T; -#if !((RTL8195A_SUPPORT == 1) || (RTL8711B_SUPPORT == 1)) -typedef struct _ROM_INFO{ - u1Byte EEPROMVersion; - u1Byte CrystalCap; - u8Byte DebugComponents; - u4Byte DebugLevel; -}ROM_INFO, *PROM_INFO; -#endif - -typedef enum _FAT_STATE -{ - FAT_NORMAL_STATE = 0, - FAT_TRAINING_STATE = 1, -}FAT_STATE_E, *PFAT_STATE_E; - -typedef enum _ANT_DIV_TYPE -{ - NO_ANTDIV = 0xFF, - CG_TRX_HW_ANTDIV = 0x01, - CGCS_RX_HW_ANTDIV = 0x02, - FIXED_HW_ANTDIV = 0x03, - CG_TRX_SMART_ANTDIV = 0x04, - CGCS_RX_SW_ANTDIV = 0x05, - S0S1_SW_ANTDIV = 0x06 //8723B intrnal switch S0 S1 -}ANT_DIV_TYPE_E, *PANT_DIV_TYPE_E; - -#if (RTL8812A_SUPPORT == 1) -typedef struct _ODM_PATH_DIVERSITY_ -{ - u1Byte RespTxPath; - u1Byte PathSel[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte PathA_Sum[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte PathB_Sum[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte PathA_Cnt[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte PathB_Cnt[ODM_ASSOCIATE_ENTRY_NUM]; -}PATHDIV_T, *pPATHDIV_T; -#endif - -typedef enum _BASEBAND_CONFIG_PHY_REG_PG_VALUE_TYPE{ - PHY_REG_PG_RELATIVE_VALUE = 0, - PHY_REG_PG_EXACT_VALUE = 1 -} PHY_REG_PG_TYPE; - - -// -// Antenna detection information from single tone mechanism, added by Roger, 2012.11.27. -// -typedef struct _ANT_DETECTED_INFO{ - BOOLEAN bAntDetected; - u4Byte dBForAntA; - u4Byte dBForAntB; - u4Byte dBForAntO; -}ANT_DETECTED_INFO, *PANT_DETECTED_INFO; - -// -// 2011/09/22 MH Copy from SD4 defined structure. We use to support PHY DM integration. -// -#if(DM_ODM_SUPPORT_TYPE & ODM_WIN) -#if (RT_PLATFORM != PLATFORM_LINUX) -typedef -#endif -struct DM_Out_Source_Dynamic_Mechanism_Structure -#else// for AP,ADSL,CE,IOT Team -typedef struct DM_Out_Source_Dynamic_Mechanism_Structure -#endif -{ - //RT_TIMER FastAntTrainingTimer; - // - // Add for different team use temporarily - // - PADAPTER Adapter; // For CE/NIC team -#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) - prtl8192cd_priv priv; // For AP/ADSL team -#endif - // WHen you use Adapter or priv pointer, you must make sure the pointer is ready. - BOOLEAN odm_ready; - -#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN)) - rtl8192cd_priv fake_priv; -#endif -#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) - // ADSL_AP_BUILD_WORKAROUND - ADAPTER fake_adapter; -#endif - - PHY_REG_PG_TYPE PhyRegPgValueType; - u1Byte PhyRegPgVersion; - - u4Byte NumQryPhyStatusAll; //CCK + OFDM - u4Byte LastNumQryPhyStatusAll; - u4Byte RxPWDBAve; - BOOLEAN MPDIG_2G; //off MPDIG - u1Byte Times_2G; - -//------ ODM HANDLE, DRIVER NEEDS NOT TO HOOK------// - BOOLEAN bCckHighPower; - u1Byte RFPathRxEnable; // ODM_CMNINFO_RFPATH_ENABLE - u1Byte ControlChannel; -//------ ODM HANDLE, DRIVER NEEDS NOT TO HOOK------// - -//--------REMOVED COMMON INFO----------// - //u1Byte PseudoMacPhyMode; - //BOOLEAN *BTCoexist; - //BOOLEAN PseudoBtCoexist; - //u1Byte OPMode; - //BOOLEAN bAPMode; - //BOOLEAN bClientMode; - //BOOLEAN bAdHocMode; - //BOOLEAN bSlaveOfDMSP; -//--------REMOVED COMMON INFO----------// - - -//1 COMMON INFORMATION - - // - // Init Value - // -//-----------HOOK BEFORE REG INIT-----------// - // ODM Platform info AP/ADSL/CE/MP = 1/2/3/4 - u1Byte SupportPlatform; - // ODM Support Ability DIG/RATR/TX_PWR_TRACK/ KK = 1/2/3/K - u4Byte SupportAbility; - // ODM PCIE/USB/SDIO = 1/2/3 - u1Byte SupportInterface; - // ODM composite or independent. Bit oriented/ 92C+92D+ .... or any other type = 1/2/3/... - u4Byte SupportICType; - // Cut Version TestChip/A-cut/B-cut... = 0/1/2/3/... - u1Byte CutVersion; - // Fab Version TSMC/UMC = 0/1 - u1Byte FabVersion; - // RF Type 4T4R/3T3R/2T2R/1T2R/1T1R/... - u1Byte RFType; - u1Byte RFEType; - // Board Type Normal/HighPower/MiniCard/SLIM/Combo/... = 0/1/2/3/4/... - u1Byte BoardType; - u1Byte PackageType; - u1Byte TypeGLNA; - u1Byte TypeGPA; - u1Byte TypeALNA; - u1Byte TypeAPA; - // with external LNA NO/Yes = 0/1 - u1Byte ExtLNA; - u1Byte ExtLNA5G; - // with external PA NO/Yes = 0/1 - u1Byte ExtPA; - u1Byte ExtPA5G; - // with external TRSW NO/Yes = 0/1 - u1Byte ExtTRSW; - u1Byte PatchID; //Customer ID - BOOLEAN bInHctTest; - BOOLEAN bWIFITest; - - BOOLEAN bDualMacSmartConcurrent; - u4Byte BK_SupportAbility; - u1Byte AntDivType; - - u1Byte odm_Regulation2_4G; - u1Byte odm_Regulation5G; - BOOLEAN cck_new_agc; -//-----------HOOK BEFORE REG INIT-----------// - - // - // Dynamic Value - // -//--------- POINTER REFERENCE-----------// - - u1Byte u1Byte_temp; -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_AP|ODM_ADSL)) - BOOLEAN BOOLEAN_temp; -#endif - PADAPTER PADAPTER_temp; - - // MAC PHY Mode SMSP/DMSP/DMDP = 0/1/2 - u1Byte *pMacPhyMode; - //TX Unicast byte count - u8Byte *pNumTxBytesUnicast; - //RX Unicast byte count - u8Byte *pNumRxBytesUnicast; - // Wireless mode B/G/A/N = BIT0/BIT1/BIT2/BIT3 - u1Byte *pWirelessMode; //ODM_WIRELESS_MODE_E - // Frequence band 2.4G/5G = 0/1 - u1Byte *pBandType; - // Secondary channel offset don't_care/below/above = 0/1/2 - u1Byte *pSecChOffset; - // Security mode Open/WEP/AES/TKIP = 0/1/2/3 - u1Byte *pSecurity; - // BW info 20M/40M/80M = 0/1/2 - u1Byte *pBandWidth; - // Central channel location Ch1/Ch2/.... - u1Byte *pChannel; //central channel number - BOOLEAN DPK_Done; - // Common info for 92D DMSP - - BOOLEAN *pbGetValueFromOtherMac; - PADAPTER *pBuddyAdapter; - BOOLEAN *pbMasterOfDMSP; //MAC0: master, MAC1: slave - // Common info for Status - BOOLEAN *pbScanInProcess; - BOOLEAN *pbPowerSaving; - // CCA Path 2-path/path-A/path-B = 0/1/2; using ODM_CCA_PATH_E. - u1Byte *pOnePathCCA; - //pMgntInfo->AntennaTest - u1Byte *pAntennaTest; - BOOLEAN *pbNet_closed; - u1Byte *mp_mode; - //u1Byte *pAidMap; - u1Byte *pu1ForcedIgiLb; - BOOLEAN *pIsFcsModeEnable; -//--------- POINTER REFERENCE-----------// - pu2Byte pForcedDataRate; -//------------CALL BY VALUE-------------// - BOOLEAN bLinkInProcess; - BOOLEAN bWIFI_Direct; - BOOLEAN bWIFI_Display; - BOOLEAN bLinked; - - BOOLEAN bsta_state; - u1Byte RSSI_Min; - u1Byte InterfaceIndex; // Add for 92D dual MAC: 0--Mac0 1--Mac1 - BOOLEAN bIsMPChip; - BOOLEAN bOneEntryOnly; - // Common info for BTDM - BOOLEAN bBtEnabled; // BT is disabled - BOOLEAN bBtConnectProcess; // BT HS is under connection progress. - u1Byte btHsRssi; // BT HS mode wifi rssi value. - BOOLEAN bBtHsOperation; // BT HS mode is under progress - BOOLEAN bBtDisableEdcaTurbo; // Under some condition, don't enable the EDCA Turbo - BOOLEAN bBtLimitedDig; // BT is busy. -//------------CALL BY VALUE-------------// - u1Byte RSSI_A; - u1Byte RSSI_B; - u8Byte RSSI_TRSW; - u8Byte RSSI_TRSW_H; - u8Byte RSSI_TRSW_L; - u8Byte RSSI_TRSW_iso; - u1Byte RXAntStatus; - u1Byte TXAntStatus; - u1Byte RxRate; - BOOLEAN bNoisyState; - u1Byte TxRate; - u1Byte LinkedInterval; - u1Byte preChannel; - u4Byte TxagcOffsetValueA; - BOOLEAN IsTxagcOffsetPositiveA; - u4Byte TxagcOffsetValueB; - BOOLEAN IsTxagcOffsetPositiveB; - u8Byte lastTxOkCnt; - u8Byte lastRxOkCnt; - u4Byte BbSwingOffsetA; - BOOLEAN IsBbSwingOffsetPositiveA; - u4Byte BbSwingOffsetB; - BOOLEAN IsBbSwingOffsetPositiveB; - u1Byte antdiv_rssi; - u1Byte AntType; - u1Byte pre_AntType; - u1Byte antdiv_period; - u1Byte antdiv_select; - u1Byte NdpaPeriod; - - BOOLEAN H2C_RARpt_connect; - - //For Adaptivtiy - u2Byte NHM_cnt_0; - u2Byte NHM_cnt_1; - s1Byte TH_L2H_ini; - s1Byte TH_EDCCA_HL_diff; - s1Byte TH_L2H_ini_backup; - BOOLEAN Carrier_Sense_enable; - u1Byte Adaptivity_IGI_upper; - BOOLEAN adaptivity_flag; - u1Byte DCbackoff; - BOOLEAN Adaptivity_enable; - u1Byte APTotalNum; - BOOLEAN EDCCA_enable; - ADAPTIVITY_STATISTICS Adaptivity; - //For Adaptivtiy - - ODM_NOISE_MONITOR noise_level;//[ODM_MAX_CHANNEL_NUM]; - /*for noise detection*/ - BOOLEAN NoisyDecision; /*b_noisy*/ - BOOLEAN pre_b_noisy; - u4Byte NoisyDecision_Smooth; - -#if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1) - s4Byte AccumulatePWDB[ODM_ASSOCIATE_ENTRY_NUM]; -#endif - - // - //2 Define STA info. - // _ODM_STA_INFO - // 2012/01/12 MH For MP, we need to reduce one array pointer for default port.?? - PSTA_INFO_T pODM_StaInfo[ODM_ASSOCIATE_ENTRY_NUM]; - -#if (RATE_ADAPTIVE_SUPPORT == 1) - u2Byte CurrminRptTime; - ODM_RA_INFO_T RAInfo[ODM_ASSOCIATE_ENTRY_NUM]; //See HalMacID support -#endif - // - // 2012/02/14 MH Add to share 88E ra with other SW team. - // We need to colelct all support abilit to a proper area. - // - BOOLEAN RaSupport88E; - - // Define ........... - - // Latest packet phy info (ODM write) - ODM_PHY_DBG_INFO_T PhyDbgInfo; - //PHY_INFO_88E PhyInfo; - - // Latest packet phy info (ODM write) - ODM_MAC_INFO *pMacInfo; - //MAC_INFO_88E MacInfo; - - // Different Team independt structure?? - - // - //TX_RTP_CMN TX_retrpo; - //TX_RTP_88E TX_retrpo; - //TX_RTP_8195 TX_retrpo; - - // - //ODM Structure - // - FAT_T DM_FatTable; - DIG_T DM_DigTable; - PS_T DM_PSTable; - Pri_CCA_T DM_PriCCA; - RXHP_T DM_RXHP_Table; -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE|ODM_IOT)) - RA_T DM_RA_Table; -#endif - PROM_INFO pROMInfo; - - FALSE_ALARM_STATISTICS FalseAlmCnt; - CFO_TRACKING DM_CfoTrack; - - FALSE_ALARM_STATISTICS FlaseAlmCntBuddyAdapter; - //#ifdef CONFIG_ANTENNA_DIVERSITY - SWAT_T DM_SWAT_Table; - BOOLEAN RSSI_test; - - //#endif - - BOOLEAN bNoBeaconIn2s; - -#if (DM_ODM_SUPPORT_TYPE & ODM_WIN) - //Path Div Struct - PATHDIV_PARA pathIQK; -#endif - - EDCA_T DM_EDCA_Table; - u4Byte WMMEDCA_BE; -#if (RTL8812A_SUPPORT == 1) - PATHDIV_T DM_PathDiv; -#endif - // Copy from SD4 structure - // - // ================================================== - // - - //common - //u1Byte DM_Type; - //u1Byte PSD_Report_RXHP[80]; // Add By Gary - //u1Byte PSD_func_flag; // Add By Gary - //for DIG - //u1Byte bDMInitialGainEnable; - //u1Byte binitialized; // for dm_initial_gain_Multi_STA use. - //for Antenna diversity - //u8 AntDivCfg;// 0:OFF , 1:ON, 2:by efuse - //PSTA_INFO_T RSSI_target; - - BOOLEAN *pbDriverStopped; - BOOLEAN *pbDriverIsGoingToPnpSetPowerSleep; - BOOLEAN *pinit_adpt_in_progress; - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE|ODM_AP|ODM_ADSL)) - //PSD - BOOLEAN bUserAssignLevel; - RT_TIMER PSDTimer; - u1Byte RSSI_BT; //come from BT - BOOLEAN bPSDinProcess; - BOOLEAN bPSDactive; - BOOLEAN bDMInitialGainEnable; - - //MPT DIG - RT_TIMER MPT_DIGTimer; -#endif - - //for rate adaptive, in fact, 88c/92c fw will handle this - u1Byte bUseRAMask; - - ODM_RATE_ADAPTIVE RateAdaptive; - - ANT_DETECTED_INFO AntDetectedInfo; // Antenna detected information for RSSI tool - - ODM_RF_CAL_T RFCalibrateInfo; - - // - // TX power tracking - // - u1Byte BbSwingIdxOfdm[MAX_RF_PATH]; - u1Byte BbSwingIdxOfdmCurrent; - u1Byte BbSwingIdxOfdmBase[MAX_RF_PATH]; - BOOLEAN BbSwingFlagOfdm; - u1Byte BbSwingIdxCck[MAX_RF_PATH]; - u1Byte BbSwingIdxCckCurrent; - u1Byte BbSwingIdxCckBase[MAX_RF_PATH]; - u1Byte DefaultOfdmIndex; - u1Byte DefaultCckIndex; - BOOLEAN BbSwingFlagCck; - - s1Byte Absolute_OFDMSwingIdx[MAX_RF_PATH]; - s1Byte Absolute_CCKSwingIdx[MAX_RF_PATH]; - s1Byte Remnant_OFDMSwingIdx[MAX_RF_PATH]; - s1Byte Remnant_CCKSwingIdx[MAX_RF_PATH]; - s1Byte Modify_TxAGC_Value; //Remnat compensate value at TxAGC - BOOLEAN Modify_TxAGC_Flag_PathA; - BOOLEAN Modify_TxAGC_Flag_PathB; - BOOLEAN Modify_TxAGC_Flag_PathA_CCK; - - // - // ODM system resource. - // - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) - // - // Power Training - // - BOOLEAN bDisablePowerTraining; - u1Byte ForcePowerTrainingState; - BOOLEAN bChangeState; - u4Byte PT_score; - u8Byte OFDM_RX_Cnt; - u8Byte CCK_RX_Cnt; -#endif - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE|ODM_AP|ODM_ADSL)) - // ODM relative time. - RT_TIMER PathDivSwitchTimer; - //2011.09.27 add for Path Diversity - RT_TIMER CCKPathDiversityTimer; - RT_TIMER FastAntTrainingTimer; -#endif - - // ODM relative workitem. -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - #if USE_WORKITEM - RT_WORK_ITEM PathDivSwitchWorkitem; - RT_WORK_ITEM CCKPathDiversityWorkitem; - RT_WORK_ITEM FastAntTrainingWorkitem; - RT_WORK_ITEM MPT_DIGWorkitem; - RT_WORK_ITEM RaRptWorkitem; - #endif -#endif - -#if(DM_ODM_SUPPORT_TYPE & ODM_WIN) - -#if (RT_PLATFORM != PLATFORM_LINUX) -} DM_ODM_T, *PDM_ODM_T; // DM_Dynamic_Mechanism_Structure -#else -}; -#endif - -#else// for AP,ADSL,CE Team -} DM_ODM_T, *PDM_ODM_T; // DM_Dynamic_Mechanism_Structure -#endif - -typedef enum _PhyDM_Structure_Type{ - PhyDM_FalseAlmCnt, - PhyDM_CfoTrack, - PHYDM_ADAPTIVITY, - PhyDM_ROMInfo, - -}PhyDM_Structure_Type; - -typedef enum _ODM_RF_RADIO_PATH { - ODM_RF_PATH_A = 0, //Radio Path A - ODM_RF_PATH_B = 1, //Radio Path B - ODM_RF_PATH_C = 2, //Radio Path C - ODM_RF_PATH_D = 3, //Radio Path D - ODM_RF_PATH_AB, - ODM_RF_PATH_AC, - ODM_RF_PATH_AD, - ODM_RF_PATH_BC, - ODM_RF_PATH_BD, - ODM_RF_PATH_CD, - ODM_RF_PATH_ABC, - ODM_RF_PATH_ACD, - ODM_RF_PATH_BCD, - ODM_RF_PATH_ABCD, - // ODM_RF_PATH_MAX, //Max RF number 90 support -} ODM_RF_RADIO_PATH_E, *PODM_RF_RADIO_PATH_E; - - typedef enum _ODM_RF_CONTENT{ - odm_radioa_txt = 0x1000, - odm_radiob_txt = 0x1001, - odm_radioc_txt = 0x1002, - odm_radiod_txt = 0x1003 -} ODM_RF_CONTENT; - -typedef enum _ODM_BB_Config_Type{ - CONFIG_BB_PHY_REG, - CONFIG_BB_AGC_TAB, - CONFIG_BB_AGC_TAB_2G, - CONFIG_BB_AGC_TAB_5G, - CONFIG_BB_PHY_REG_PG, - CONFIG_BB_PHY_REG_MP, - CONFIG_BB_AGC_TAB_DIFF, -} ODM_BB_Config_Type, *PODM_BB_Config_Type; - -typedef enum _ODM_RF_Config_Type{ - CONFIG_RF_RADIO, - CONFIG_RF_TXPWR_LMT, -} ODM_RF_Config_Type, *PODM_RF_Config_Type; - -typedef enum _ODM_FW_Config_Type{ - CONFIG_FW_NIC, - CONFIG_FW_NIC_2, - CONFIG_FW_AP, - CONFIG_FW_MP, - CONFIG_FW_WoWLAN, - CONFIG_FW_WoWLAN_2, - CONFIG_FW_AP_WoWLAN, - CONFIG_FW_BT, - CONFIG_FW_ROM, -} ODM_FW_Config_Type; - -// Status code -#if (DM_ODM_SUPPORT_TYPE != ODM_WIN) -typedef enum _RT_STATUS{ - RT_STATUS_SUCCESS, - RT_STATUS_FAILURE, - RT_STATUS_PENDING, - RT_STATUS_RESOURCE, - RT_STATUS_INVALID_CONTEXT, - RT_STATUS_INVALID_PARAMETER, - RT_STATUS_NOT_SUPPORT, - RT_STATUS_OS_API_FAILED, -}RT_STATUS,*PRT_STATUS; -#endif // end of RT_STATUS definition - -#ifdef REMOVE_PACK -#pragma pack() -#endif - -//#include "odm_function.h" - -//3=========================================================== -//3 DIG -//3=========================================================== - -//Remove DIG by Yuchen - -//3=========================================================== -//3 AGC RX High Power Mode -//3=========================================================== -#define LNA_Low_Gain_1 0x64 -#define LNA_Low_Gain_2 0x5A -#define LNA_Low_Gain_3 0x58 - -#define FA_RXHP_TH1 5000 -#define FA_RXHP_TH2 1500 -#define FA_RXHP_TH3 800 -#define FA_RXHP_TH4 600 -#define FA_RXHP_TH5 500 - -//3=========================================================== -//3 EDCA -//3=========================================================== - -//3=========================================================== -//3 Dynamic Tx Power -//3=========================================================== -//Dynamic Tx Power Control Threshold - -//Remove By YuChen - -//3=========================================================== -//3 Tx Power Tracking -//3=========================================================== -#if 0 //mask this, since these have been defined in typdef.h, vivi -#define OFDM_TABLE_SIZE 43 -#define CCK_TABLE_SIZE 33 -#endif - - -//3=========================================================== -//3 Rate Adaptive -//3=========================================================== -//Remove to odm_RaInfo.h by RS_James - -//3=========================================================== -//3 BB Power Save -//3=========================================================== - -typedef enum tag_1R_CCA_Type_Definition -{ - CCA_1R =0, - CCA_2R = 1, - CCA_MAX = 2, -}DM_1R_CCA_E; - -typedef enum tag_RF_Type_Definition -{ - RF_Save =0, - RF_Normal = 1, - RF_MAX = 2, -}DM_RF_E; - -//3=========================================================== -//3 Antenna Diversity -//3=========================================================== -typedef enum tag_SW_Antenna_Switch_Definition -{ - Antenna_A = 1, - Antenna_B = 2, - Antenna_MAX = 3, -}DM_SWAS_E; - - -// Maximal number of antenna detection mechanism needs to perform, added by Roger, 2011.12.28. -#define MAX_ANTENNA_DETECTION_CNT 10 - -// -// Extern Global Variables. -// -// -// check Sta pointer valid or not -// -#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) -#define IS_STA_VALID(pSta) (pSta && pSta->expire_to) -#elif (DM_ODM_SUPPORT_TYPE & ODM_WIN) -#define IS_STA_VALID(pSta) (pSta && pSta->bUsed) -#else -#define IS_STA_VALID(pSta) (pSta) -#endif -// 20100514 Joseph: Add definition for antenna switching test after link. -// This indicates two different the steps. -// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air. -// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK -// with original RSSI to determine if it is necessary to switch antenna. -#define SWAW_STEP_PEAK 0 -#define SWAW_STEP_DETERMINE 1 - -//Remove DIG by yuchen - -//Remove BB power saving by Yuchen - -//Remove ODM_RAStateCheck() by RS_James - -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_AP|ODM_ADSL)) -//============================================================ -// function prototype -//============================================================ -//#define DM_ChangeDynamicInitGainThresh ODM_ChangeDynamicInitGainThresh -//void ODM_ChangeDynamicInitGainThresh(IN PADAPTER pAdapter, -// IN INT32 DM_Type, -// IN INT32 DM_Value); - -//Remove DIG by yuchen - - -BOOLEAN -ODM_CheckPowerStatus( - IN PADAPTER Adapter - ); - - -//Remove ODM_RateAdaptiveStateApInit() by RS_James - -//Remove Edca by Yuchen - - -#define SwAntDivCheckBeforeLink ODM_SwAntDivCheckBeforeLink - -BOOLEAN -ODM_SwAntDivCheckBeforeLink( - IN PDM_ODM_T pDM_Odm - ); - - -#endif - - - -#if((DM_ODM_SUPPORT_TYPE==ODM_WIN)||(DM_ODM_SUPPORT_TYPE==ODM_CE)) - -u4Byte ConvertTo_dB(u4Byte Value); - -u4Byte -GetPSDData( - PDM_ODM_T pDM_Odm, - unsigned int point, - u1Byte initial_gain_psd); - -#endif - -//Remove ODM_Get_Rate_Bitmap() by RS_James - -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) -#define dm_PSDMonitorCallback odm_PSDMonitorCallback -VOID odm_PSDMonitorCallback(PRT_TIMER pTimer); - -VOID -odm_PSDMonitorWorkItemCallback( - IN PVOID pContext - ); - -VOID -PatchDCTone( - IN PDM_ODM_T pDM_Odm, - pu4Byte PSD_report, - u1Byte initial_gain_psd -); -VOID -ODM_PSDMonitor( - IN PDM_ODM_T pDM_Odm - ); -VOID odm_PSD_Monitor(PDM_ODM_T pDM_Odm); -VOID odm_PSDMonitorInit(PDM_ODM_T pDM_Odm); - -VOID -ODM_PSDDbgControl( - IN PADAPTER Adapter, - IN u4Byte mode, - IN u4Byte btRssi - ); - -#endif // DM_ODM_SUPPORT_TYPE - - -#if (BEAMFORMING_SUPPORT == 1) -BEAMFORMING_CAP -Beamforming_GetEntryBeamCapByMacId( - IN PMGNT_INFO pMgntInfo, - IN u1Byte MacId - ); -#endif - -VOID ODM_DMInit( IN PDM_ODM_T pDM_Odm); - -VOID -ODM_DMWatchdog( - IN PDM_ODM_T pDM_Odm // For common use in the future - ); - -VOID -ODM_CmnInfoInit( - IN PDM_ODM_T pDM_Odm, - IN ODM_CMNINFO_E CmnInfo, - IN u4Byte Value - ); - -VOID -ODM_CmnInfoHook( - IN PDM_ODM_T pDM_Odm, - IN ODM_CMNINFO_E CmnInfo, - IN PVOID pValue - ); - -VOID -ODM_CmnInfoPtrArrayHook( - IN PDM_ODM_T pDM_Odm, - IN ODM_CMNINFO_E CmnInfo, - IN u2Byte Index, - IN PVOID pValue - ); - -VOID -ODM_CmnInfoUpdate( - IN PDM_ODM_T pDM_Odm, - IN u4Byte CmnInfo, - IN u8Byte Value - ); - -VOID -ODM_InitAllTimers( - IN PDM_ODM_T pDM_Odm - ); - -VOID -ODM_CancelAllTimers( - IN PDM_ODM_T pDM_Odm - ); - -VOID -ODM_ReleaseAllTimers( - IN PDM_ODM_T pDM_Odm - ); - -VOID -ODM_ResetIQKResult( - IN PDM_ODM_T pDM_Odm - ); - -VOID phydm_NoisyDetection( - IN PDM_ODM_T pDM_Odm - ); - - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -VOID ODM_InitAllWorkItems(IN PDM_ODM_T pDM_Odm ); -VOID ODM_FreeAllWorkItems(IN PDM_ODM_T pDM_Odm ); - - -//===========================================// -// Neil Chen----2011--06--15-- - -//3 Path Diversity -//=========================================================== - -#define TP_MODE 0 -#define RSSI_MODE 1 -#define TRAFFIC_LOW 0 -#define TRAFFIC_HIGH 1 - -//#define PATHDIV_ENABLE 1 -//#define dm_PathDiv_RSSI_Check ODM_PathDivChkPerPktRssi - -u8Byte -PlatformDivision64( - IN u8Byte x, - IN u8Byte y -); - - -// 20100514 Joseph: Add definition for antenna switching test after link. -// This indicates two different the steps. -// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air. -// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK -// with original RSSI to determine if it is necessary to switch antenna. -#define SWAW_STEP_PEAK 0 -#define SWAW_STEP_DETERMINE 1 - -//==================================================== -//3 PathDiV End -//==================================================== - -//#define PathDivCheckBeforeLink8192C ODM_PathDiversityBeforeLink92C - -#define DM_ChangeDynamicInitGainThresh ODM_ChangeDynamicInitGainThresh -//void ODM_ChangeDynamicInitGainThresh(IN PADAPTER pAdapter, -// IN INT32 DM_Type, -// IN INT32 DM_Value); -// - - -typedef enum tag_DIG_Connect_Definition -{ - DIG_STA_DISCONNECT = 0, - DIG_STA_CONNECT = 1, - DIG_STA_BEFORE_CONNECT = 2, - DIG_MultiSTA_DISCONNECT = 3, - DIG_MultiSTA_CONNECT = 4, - DIG_CONNECT_MAX -}DM_DIG_CONNECT_E; - - - -// -// 2012/01/12 MH Check afapter status. Temp fix BSOD. -// -#define HAL_ADAPTER_STS_CHK(pDM_Odm)\ - if (pDM_Odm->Adapter == NULL)\ - {\ - return;\ - }\ - - -// -// For new definition in MP temporarily fro power tracking, -// -#define odm_TXPowerTrackingDirectCall(_Adapter) \ - IS_HARDWARE_TYPE_8192D(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_92D(_Adapter) : \ - IS_HARDWARE_TYPE_8192C(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_92C(_Adapter) : \ - IS_HARDWARE_TYPE_8723A(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_8723A(_Adapter) :\ - ODM_TXPowerTrackingCallback_ThermalMeter(_Adapter) - -#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - - -#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN |ODM_CE)) - -VOID -ODM_SingleDualAntennaDefaultSetting( - IN PDM_ODM_T pDM_Odm - ); - -BOOLEAN -ODM_SingleDualAntennaDetection( - IN PDM_ODM_T pDM_Odm, - IN u1Byte mode - ); - -#endif // #if((DM_ODM_SUPPORT_TYPE==ODM_WIN)||(DM_ODM_SUPPORT_TYPE==ODM_CE)) -VOID -ODM_UpdateNoisyState( - IN PDM_ODM_T pDM_Odm, - IN BOOLEAN bNoisyStateFromC2H -); - -u4Byte -Set_RA_DM_Ratrbitmap_by_Noisy( - IN PDM_ODM_T pDM_Odm, - IN WIRELESS_MODE WirelessMode, - IN u4Byte ratr_bitmap, - IN u1Byte rssi_level -); - -VOID -ODM_UpdateInitRate( - IN PDM_ODM_T pDM_Odm, - IN u1Byte Rate - ); - -//Remove ODM_DynamicARFBSelect() by RS_James - -PVOID -PhyDM_Get_Structure( - IN PDM_ODM_T pDM_Odm, - IN u1Byte Structure_Type -); - -#if (DM_ODM_SUPPORT_TYPE == ODM_CE) -void odm_dtc(PDM_ODM_T pDM_Odm); -#endif /* #if (DM_ODM_SUPPORT_TYPE == ODM_CE) */ - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_ACS.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_ACS.h deleted file mode 100644 index f046c49..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_ACS.h +++ /dev/null @@ -1,97 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMACS_H__ -#define __PHYDMACS_H__ - -#include "phydm_types.h" - -#define ACS_VERSION "1.1" /*20150729 by YuChen*/ -#define CLM_VERSION "1.0" - -#define ODM_MAX_CHANNEL_2G 14 -#define ODM_MAX_CHANNEL_5G 24 - -// For phydm_AutoChannelSelectSettingAP() -#define STORE_DEFAULT_NHM_SETTING 0 -#define RESTORE_DEFAULT_NHM_SETTING 1 -#define ACS_NHM_SETTING 2 - -#define ODM_REG_CLM_TIME_PERIOD_11AC 0x990 -#define ODM_REG_CLM_TIME_PERIOD_11N 0x894 -#define ODM_REG_CLM_RESULT_11AC 0xfa4 -#define ODM_REG_CLM_RESULT_11N 0x8d0 -#define ODM_REG_CLM_11AC 0x994 -#define ODM_REG_CLM_11N 0x890 -#define ODM_REG_CLM_READY_11N 0x8b4 - -typedef struct _ACS_ -{ - BOOLEAN bForceACSResult; - u1Byte CleanChannel_2G; - u1Byte CleanChannel_5G; - u2Byte Channel_Info_2G[2][ODM_MAX_CHANNEL_2G]; //Channel_Info[1]: Channel Score, Channel_Info[2]:Channel_Scan_Times - u2Byte Channel_Info_5G[2][ODM_MAX_CHANNEL_5G]; - -#if ( DM_ODM_SUPPORT_TYPE & ODM_AP ) - u1Byte ACS_Step; - // NHM Count 0-11 - u1Byte NHM_Cnt[14][11]; - - // AC-Series, for storing previous setting - u4Byte Reg0x990; - u4Byte Reg0x994; - u4Byte Reg0x998; - u4Byte Reg0x99C; - u1Byte Reg0x9A0; // u1Byte - - // N-Series, for storing previous setting - u4Byte Reg0x890; - u4Byte Reg0x894; - u4Byte Reg0x898; - u4Byte Reg0x89C; - u1Byte Reg0xE28; // u1Byte -#endif - -}ACS, *PACS; - -VOID -phydm_CLMInit( - IN PVOID pDM_VOID, - IN u2Byte sampleNum -); - -VOID -phydm_CLMtrigger( - IN PVOID pDM_VOID -); - -BOOLEAN -phydm_checkCLMready( - IN PVOID pDM_VOID -); - -u2Byte -phydm_getCLMresult( - IN PVOID pDM_VOID -); - - -#endif //#ifndef __PHYDMACS_H__ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_AntDect.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_AntDect.h deleted file mode 100644 index 7dc1d6e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_AntDect.h +++ /dev/null @@ -1,76 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMANTDECT_H__ -#define __PHYDMANTDECT_H__ - -#define ANTDECT_VERSION "1.0" - -#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN |ODM_CE)) -//1 [1. Single Tone Method] =================================================== - - - -VOID -ODM_SingleDualAntennaDefaultSetting( - IN PDM_ODM_T pDM_Odm - ); - -BOOLEAN -ODM_SingleDualAntennaDetection( - IN PDM_ODM_T pDM_Odm, - IN u1Byte mode - ); - -//1 [2. Scan AP RSSI Method] ================================================== - -VOID -odm_SwAntDetectInit( - IN PDM_ODM_T pDM_Odm - ); - - -#define SwAntDivCheckBeforeLink ODM_SwAntDivCheckBeforeLink - -BOOLEAN -ODM_SwAntDivCheckBeforeLink( - IN PDM_ODM_T pDM_Odm - ); - - - - -//1 [3. PSD Method] ========================================================== - - -VOID -ODM_SingleDualAntennaDetection_PSD( - IN PDM_ODM_T pDM_Odm -); - - - - - - -#endif -#endif - - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_AntDiv.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_AntDiv.h deleted file mode 100644 index f762e71..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_AntDiv.h +++ /dev/null @@ -1,144 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMANTDIV_H__ -#define __PHYDMANTDIV_H__ - -#define ANTDIV_VERSION "1.0" - -#define ANT1_2G 0 // = ANT2_5G -#define ANT2_2G 1 // = ANT1_5G - -//Antenna Diversty Control Type -#define ODM_AUTO_ANT 0 -#define ODM_FIX_MAIN_ANT 1 -#define ODM_FIX_AUX_ANT 2 - -#define TX_BY_REG 0 - -#if (DM_ODM_SUPPORT_TYPE != ODM_AP) -#define ODM_RTL8881A 0 //Just for windows driver to jointly use ODM-driver -#endif - -#define ODM_ANTDIV_SUPPORT (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812) -#define ODM_N_ANTDIV_SUPPORT (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B) -#define ODM_AC_ANTDIV_SUPPORT (ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812) -#define ODM_SMART_ANT_SUPPORT (ODM_RTL8188E|ODM_RTL8192E) - -#define ODM_ANTDIV_2G_SUPPORT_IC (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8881A) -#define ODM_ANTDIV_5G_SUPPORT_IC (ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812) -#define ODM_ANTDIV_2G BIT0 -#define ODM_ANTDIV_5G BIT1 - -#define ANTDIV_ON 1 -#define ANTDIV_OFF 0 - -#define SwAntDivRestAfterLink ODM_SwAntDivRestAfterLink -VOID ODM_SwAntDivRestAfterLink( IN PDM_ODM_T pDM_Odm); - -VOID -odm_AntennaDiversityReset( - IN PDM_ODM_T pDM_Odm -); - -VOID -ODM_AntDivInit( - IN PDM_ODM_T pDM_Odm -); - -VOID -ODM_AntDiv( - IN PDM_ODM_T pDM_Odm -); - -#if (defined(CONFIG_HW_ANTENNA_DIVERSITY)) - -VOID -ODM_UpdateRxIdleAnt( - IN PDM_ODM_T pDM_Odm, - IN u1Byte Ant -); - -#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1) -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -VOID -ODM_SW_AntDiv_Callback( - IN PRT_TIMER pTimer -); - -VOID -ODM_SW_AntDiv_WorkitemCallback( - IN PVOID pContext -); -#endif //#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -#if (DM_ODM_SUPPORT_TYPE == ODM_CE) -VOID -ODM_SW_AntDiv_Callback(void *FunctionContext); -#endif //#if (DM_ODM_SUPPORT_TYPE == ODM_CE) -#endif - -#if(RTL8188E_SUPPORT == 1 || RTL8192E_SUPPORT == 1) -#if ( !(DM_ODM_SUPPORT_TYPE == ODM_CE)) -VOID -odm_FastAntTraining( - IN PDM_ODM_T pDM_Odm -); - -VOID -odm_FastAntTrainingCallback( - IN PDM_ODM_T pDM_Odm -); - -VOID -odm_FastAntTrainingWorkItemCallback( - IN PDM_ODM_T pDM_Odm -); -#endif -#endif - -VOID -ODM_Process_RSSIForAntDiv( - IN OUT PDM_ODM_T pDM_Odm, - IN PODM_PHY_INFO_T pPhyInfo, - IN PODM_PACKET_INFO_T pPktinfo -); - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) -VOID -ODM_SetTxAntByTxInfo( - IN PDM_ODM_T pDM_Odm, - IN pu1Byte pDesc, - IN u1Byte macId -); - -#else// (DM_ODM_SUPPORT_TYPE == ODM_AP) -VOID -ODM_SetTxAntByTxInfo( - //IN PDM_ODM_T pDM_Odm, - struct rtl8192cd_priv *priv, - struct tx_desc *pdesc, - struct tx_insn *txcfg, - unsigned short aid -); - -#endif - -#endif //#if (defined(CONFIG_HW_ANTENNA_DIVERSITY)) -#endif //#ifndef __ODMANTDIV_H__ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_CfoTracking.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_CfoTracking.h deleted file mode 100644 index 3d473d5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_CfoTracking.h +++ /dev/null @@ -1,73 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMCFOTRACK_H__ -#define __PHYDMCFOTRACK_H__ - -#define CFO_TRACKING_VERSION "1.0" - -//#define CFO_TH_XTAL_HIGH 20 // kHz -//#define CFO_TH_XTAL_LOW 10 // kHz -//#define CFO_TH_ATC 80 // kHz - -#if ((RTL8195A_SUPPORT==0) && (RTL8711B_SUPPORT == 0)) -typedef struct _CFO_TRACKING_ -{ - BOOLEAN bATCStatus; - BOOLEAN largeCFOHit; - BOOLEAN bAdjust; - u1Byte CrystalCap; - u1Byte DefXCap; - int CFO_tail[2]; - int CFO_ave_pre; - u4Byte packetCount; - u4Byte packetCount_pre; - BOOLEAN bForceXtalCap; - BOOLEAN bReset; - u1Byte CFO_TH_XTAL_HIGH; - u1Byte CFO_TH_XTAL_LOW; - u1Byte CFO_TH_ATC; -}CFO_TRACKING, *PCFO_TRACKING; -#endif - -VOID -ODM_CfoTrackingReset( - IN PVOID pDM_VOID -); - -VOID -ODM_CfoTrackingInit( - IN PVOID pDM_VOID -); - -VOID -ODM_CfoTracking( - IN PVOID pDM_VOID -); - -VOID -ODM_ParsingCFO( - IN PVOID pDM_VOID, - IN PVOID pPktinfo_VOID, - IN s1Byte* pcfotail, - IN u1Byte num_ss -); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_DIG.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_DIG.h deleted file mode 100644 index 58da5f8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_DIG.h +++ /dev/null @@ -1,476 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __ODMDIG_H__ -#define __ODMDIG_H__ - -typedef struct _Dynamic_Initial_Gain_Threshold_ -{ - BOOLEAN bStopDIG; // for debug - BOOLEAN bPauseDIG; - BOOLEAN bIgnoreDIG; - BOOLEAN bPSDInProgress; - - u1Byte Dig_Enable_Flag; - u1Byte Dig_Ext_Port_Stage; - - int RssiLowThresh; - int RssiHighThresh; - - u4Byte FALowThresh; - u4Byte FAHighThresh; - - u1Byte CurSTAConnectState; - u1Byte PreSTAConnectState; - u1Byte CurMultiSTAConnectState; - - u1Byte PreIGValue; - u1Byte CurIGValue; - u1Byte BackupIGValue; //MP DIG - u1Byte BT30_CurIGI; - u1Byte IGIBackup; - - s1Byte BackoffVal; - s1Byte BackoffVal_range_max; - s1Byte BackoffVal_range_min; - u1Byte rx_gain_range_max; - u1Byte rx_gain_range_min; - u1Byte Rssi_val_min; - - u1Byte PreCCK_CCAThres; - u1Byte CurCCK_CCAThres; - u1Byte PreCCKPDState; - u1Byte CurCCKPDState; - u1Byte CCKPDBackup; - - u1Byte LargeFAHit; - u1Byte ForbiddenIGI; - u4Byte Recover_cnt; - - u1Byte DIG_Dynamic_MIN_0; - u1Byte DIG_Dynamic_MIN_1; - BOOLEAN bMediaConnect_0; - BOOLEAN bMediaConnect_1; - - u4Byte AntDiv_RSSI_max; - u4Byte RSSI_max; - - u1Byte *pbP2pLinkInProgress; - u4Byte cckFaMa; - -#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) - BOOLEAN bTpTarget; - BOOLEAN bNoiseEst; - u4Byte TpTrainTH_min; - u1Byte IGIOffset_A; - u1Byte IGIOffset_B; -#endif -}DIG_T,*pDIG_T; - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE|ODM_AP|ODM_ADSL)) -typedef struct _FALSE_ALARM_STATISTICS{ - u4Byte Cnt_Parity_Fail; - u4Byte Cnt_Rate_Illegal; - u4Byte Cnt_Crc8_fail; - u4Byte Cnt_Mcs_fail; - u4Byte Cnt_Ofdm_fail; - u4Byte Cnt_Ofdm_fail_pre; //For RTL8881A - u4Byte Cnt_Cck_fail; - u4Byte Cnt_all; - u4Byte Cnt_Fast_Fsync; - u4Byte Cnt_SB_Search_fail; - u4Byte Cnt_OFDM_CCA; - u4Byte Cnt_CCK_CCA; - u4Byte Cnt_CCA_all; - u4Byte Cnt_BW_USC; //Gary - u4Byte Cnt_BW_LSC; //Gary -}FALSE_ALARM_STATISTICS, *PFALSE_ALARM_STATISTICS; -#endif - -typedef enum tag_Dynamic_Init_Gain_Operation_Type_Definition -{ - DIG_TYPE_THRESH_HIGH = 0, - DIG_TYPE_THRESH_LOW = 1, - DIG_TYPE_BACKOFF = 2, - DIG_TYPE_RX_GAIN_MIN = 3, - DIG_TYPE_RX_GAIN_MAX = 4, - DIG_TYPE_ENABLE = 5, - DIG_TYPE_DISABLE = 6, - DIG_OP_TYPE_MAX -}DM_DIG_OP_E; - -typedef enum tag_ODM_PauseDIG_Type { - ODM_PAUSE_DIG = BIT0, - ODM_RESUME_DIG = BIT1 -} ODM_Pause_DIG_TYPE; - -typedef enum tag_ODM_PauseCCKPD_Type { - ODM_PAUSE_CCKPD = BIT0, - ODM_RESUME_CCKPD = BIT1 -} ODM_Pause_CCKPD_TYPE; - -typedef enum tag_ODM_TRx_MUX_Type -{ - ODM_SHUTDOWN = 0, - ODM_STANDBY_MODE = 1, - ODM_TX_MODE = 2, - ODM_RX_MODE = 3 -}ODM_Trx_MUX_Type; - -typedef enum tag_ODM_MACEDCCA_Type -{ - ODM_IGNORE_EDCCA = 0, - ODM_DONT_IGNORE_EDCCA = 1 -}ODM_MACEDCCA_Type; - -/* -typedef enum tag_CCK_Packet_Detection_Threshold_Type_Definition -{ - CCK_PD_STAGE_LowRssi = 0, - CCK_PD_STAGE_HighRssi = 1, - CCK_PD_STAGE_MAX = 3, -}DM_CCK_PDTH_E; - -typedef enum tag_DIG_EXT_PORT_ALGO_Definition -{ - DIG_EXT_PORT_STAGE_0 = 0, - DIG_EXT_PORT_STAGE_1 = 1, - DIG_EXT_PORT_STAGE_2 = 2, - DIG_EXT_PORT_STAGE_3 = 3, - DIG_EXT_PORT_STAGE_MAX = 4, -}DM_DIG_EXT_PORT_ALG_E; - -typedef enum tag_DIG_Connect_Definition -{ - DIG_STA_DISCONNECT = 0, - DIG_STA_CONNECT = 1, - DIG_STA_BEFORE_CONNECT = 2, - DIG_MultiSTA_DISCONNECT = 3, - DIG_MultiSTA_CONNECT = 4, - DIG_CONNECT_MAX -}DM_DIG_CONNECT_E; - - -#define DM_MultiSTA_InitGainChangeNotify(Event) {DM_DigTable.CurMultiSTAConnectState = Event;} - -#define DM_MultiSTA_InitGainChangeNotify_CONNECT(_ADAPTER) \ - DM_MultiSTA_InitGainChangeNotify(DIG_MultiSTA_CONNECT) - -#define DM_MultiSTA_InitGainChangeNotify_DISCONNECT(_ADAPTER) \ - DM_MultiSTA_InitGainChangeNotify(DIG_MultiSTA_DISCONNECT) -*/ -#define DM_DIG_THRESH_HIGH 40 -#define DM_DIG_THRESH_LOW 35 - -#define DM_FALSEALARM_THRESH_LOW 400 -#define DM_FALSEALARM_THRESH_HIGH 1000 - -#define DM_DIG_MAX_NIC 0x3e -#define DM_DIG_MIN_NIC 0x20 //0x1e -#define DM_DIG_MAX_OF_MIN_NIC 0x3e - -#define DM_DIG_MAX_AP 0x3e -#define DM_DIG_MIN_AP 0x1c -#define DM_DIG_MAX_OF_MIN 0x2A //0x32 -#define DM_DIG_MIN_AP_DFS 0x20 - -#define DM_DIG_MAX_NIC_HP 0x46 -#define DM_DIG_MIN_NIC_HP 0x2e - -#define DM_DIG_MAX_AP_HP 0x42 -#define DM_DIG_MIN_AP_HP 0x30 - -#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) -#define DM_DIG_MAX_AP_COVERAGR 0x26 -#define DM_DIG_MIN_AP_COVERAGE 0x1c -#define DM_DIG_MAX_OF_MIN_COVERAGE 0x22 - -#define DM_DIG_TP_Target_TH0 500 -#define DM_DIG_TP_Target_TH1 1000 -#define DM_DIG_TP_Training_Period 10 -#endif - -//vivi 92c&92d has different definition, 20110504 -//this is for 92c -#if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_IOT)) - #ifdef CONFIG_SPECIAL_SETTING_FOR_FUNAI_TV - #define DM_DIG_FA_TH0 0x80//0x20 - #else - #define DM_DIG_FA_TH0 0x200//0x20 - #endif -#else - #define DM_DIG_FA_TH0 0x200//0x20 -#endif - -#define DM_DIG_FA_TH1 0x300 -#define DM_DIG_FA_TH2 0x400 -//this is for 92d -#define DM_DIG_FA_TH0_92D 0x100 -#define DM_DIG_FA_TH1_92D 0x400 -#define DM_DIG_FA_TH2_92D 0x600 - -#define DM_DIG_BACKOFF_MAX 12 -#define DM_DIG_BACKOFF_MIN -4 -#define DM_DIG_BACKOFF_DEFAULT 10 - -#define DM_DIG_FA_TH0_LPS 4 //-> 4 in lps -#define DM_DIG_FA_TH1_LPS 15 //-> 15 lps -#define DM_DIG_FA_TH2_LPS 30 //-> 30 lps -#define RSSI_OFFSET_DIG 0x05 - - -VOID -odm_CheckAdaptivity( - IN PVOID pDM_VOID - ); - -VOID -odm_CheckEnvironment( - IN PVOID pDM_VOID - ); - -VOID -ODM_ChangeDynamicInitGainThresh( - IN PVOID pDM_VOID, - IN u4Byte DM_Type, - IN u4Byte DM_Value - ); - -VOID -odm_NHMCounterStatisticsInit( - IN PVOID pDM_VOID - ); - -VOID -odm_NHMCounterStatistics( - IN PVOID pDM_VOID - ); - -VOID -odm_NHMBBInit( - IN PVOID pDM_VOID -); - -VOID -odm_NHMBB( - IN PVOID pDM_VOID -); - -VOID -odm_NHMCounterStatisticsReset( - IN PVOID pDM_VOID -); - -VOID -odm_GetNHMCounterStatistics( - IN PVOID pDM_VOID -); - -VOID -odm_MACEDCCAState( - IN PVOID pDM_VOID, - IN ODM_MACEDCCA_Type State -); - -VOID -odm_SetEDCCAThreshold( - IN PVOID pDM_VOID, - IN s1Byte H2L, - IN s1Byte L2H -); - -VOID -odm_SetTRxMux( - IN PVOID pDM_VOID, - IN ODM_Trx_MUX_Type txMode, - IN ODM_Trx_MUX_Type rxMode -); - -BOOLEAN -odm_CalNHMcnt( - IN PVOID pDM_VOID - ); - -VOID -odm_SearchPwdBLowerBound( - IN PVOID pDM_VOID -); - -VOID -odm_AdaptivityInit( - IN PVOID pDM_VOID - ); - -BOOLEAN -odm_Adaptivity( - IN PVOID pDM_VOID, - IN u1Byte IGI - ); - -VOID -ODM_Write_DIG( - IN PVOID pDM_VOID, - IN u1Byte CurrentIGI - ); - -VOID -odm_PauseDIG( - IN PVOID pDM_VOID, - IN ODM_Pause_DIG_TYPE PauseType, - IN u1Byte IGIValue - ); - -VOID -odm_DIGInit( - IN PVOID pDM_VOID - ); - -VOID -odm_DIG( - IN PVOID pDM_VOID - ); - -VOID -odm_DIGbyRSSI_LPS( - IN PVOID pDM_VOID - ); - -VOID -odm_DigForBtHsMode( - IN PVOID pDM_VOID - ); - -VOID -odm_FalseAlarmCounterStatistics( - IN PVOID pDM_VOID - ); - -#if (DM_ODM_SUPPORT_TYPE & ODM_IOT) -VOID -odm_FAThresholdCheck( - IN PVOID pDM_VOID, - OUT u4Byte* dm_FA_thres - ); -#else -VOID -odm_FAThresholdCheck( - IN PVOID pDM_VOID, - IN BOOLEAN bDFSBand, - IN BOOLEAN bPerformance, - IN u4Byte RxTp, - IN u4Byte TxTp, - OUT u4Byte* dm_FA_thres - ); -#endif -u1Byte -odm_ForbiddenIGICheck( - IN PVOID pDM_VOID, - IN u1Byte DIG_Dynamic_MIN, - IN u1Byte CurrentIGI - ); - -VOID -odm_InbandNoiseCalculate ( - IN PVOID pDM_VOID - ); - -BOOLEAN -odm_DigAbort( - IN PVOID pDM_VOID - ); - -VOID -odm_PauseCCKPacketDetection( - IN PVOID pDM_VOID, - IN ODM_Pause_CCKPD_TYPE PauseType, - IN u1Byte CCKPDThreshold - ); - -VOID -odm_CCKPacketDetectionThresh( - IN PVOID pDM_VOID - ); - -VOID -ODM_Write_CCK_CCA_Thres( - IN PVOID pDM_VOID, - IN u1Byte CurCCK_CCAThres - ); - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - -VOID -odm_DisableEDCCA( - IN PVOID pDM_VOID -); - -VOID -odm_DynamicEDCCA( - IN PVOID pDM_VOID -); - -VOID -odm_MPT_DIGCallback( - PRT_TIMER pTimer -); - -VOID -odm_MPT_DIGWorkItemCallback( - IN PVOID pContext - ); - -#endif - -#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) -VOID -odm_MPT_DIGCallback( - IN PVOID pDM_VOID -); -#endif - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_AP|ODM_ADSL)) -VOID -ODM_MPT_DIG( - IN PVOID pDM_VOID -); -#endif - - -#endif - -VOID -odm_DIGInit_8195A( - IN PVOID pDM_VOID - ); - -VOID -odm_DIG_8195A( - IN PVOID pDM_VOID - ); - -VOID -odm_FalseAlarmCounterStatistics_8195A( - IN PVOID pDM_VOID - ); - -VOID -odm_CCKPacketDetectionThresh_8195A( - IN PVOID pDM_VOID - ); \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_DynamicBBPowerSaving.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_DynamicBBPowerSaving.h deleted file mode 100644 index bf473f9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_DynamicBBPowerSaving.h +++ /dev/null @@ -1,63 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMDYNAMICBBPOWERSAVING_H__ -#define __PHYDMDYNAMICBBPOWERSAVING_H__ - -#define DYNAMIC_BBPWRSAV_VERSION "1.0" - -typedef struct _Dynamic_Power_Saving_ -{ - u1Byte PreCCAState; - u1Byte CurCCAState; - - u1Byte PreRFState; - u1Byte CurRFState; - - int Rssi_val_min; - - u1Byte initialize; - u4Byte Reg874,RegC70,Reg85C,RegA74; - -}PS_T,*pPS_T; - -#define dm_RF_Saving ODM_RF_Saving - -void ODM_RF_Saving( - IN PVOID pDM_VOID, - IN u1Byte bForceInNormal - ); - -VOID -odm_DynamicBBPowerSavingInit( - IN PVOID pDM_VOID - ); - -VOID -odm_DynamicBBPowerSaving( - IN PVOID pDM_VOID - ); - -VOID -odm_1R_CCA( - IN PVOID pDM_VOID - ); - -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_DynamicTxPower.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_DynamicTxPower.h deleted file mode 100644 index 9a38013..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_DynamicTxPower.h +++ /dev/null @@ -1,89 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMDYNAMICTXPOWER_H__ -#define __PHYDMDYNAMICTXPOWER_H__ - -#define DYNAMIC_TXPWR_VERSION "1.0" - -#define TX_POWER_NEAR_FIELD_THRESH_LVL2 74 -#define TX_POWER_NEAR_FIELD_THRESH_LVL1 67 -#define TX_POWER_NEAR_FIELD_THRESH_AP 0x3F -#define TX_POWER_NEAR_FIELD_THRESH_8812 60 - -#define TxHighPwrLevel_Normal 0 -#define TxHighPwrLevel_Level1 1 -#define TxHighPwrLevel_Level2 2 -#define TxHighPwrLevel_BT1 3 -#define TxHighPwrLevel_BT2 4 -#define TxHighPwrLevel_15 5 -#define TxHighPwrLevel_35 6 -#define TxHighPwrLevel_50 7 -#define TxHighPwrLevel_70 8 -#define TxHighPwrLevel_100 9 - -VOID -odm_DynamicTxPowerInit( - IN PVOID pDM_VOID - ); - -VOID -odm_DynamicTxPowerRestorePowerIndex( - IN PVOID pDM_VOID - ); - -VOID -odm_DynamicTxPowerNIC( - IN PVOID pDM_VOID - ); - -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) -VOID -odm_DynamicTxPowerSavePowerIndex( - IN PVOID pDM_VOID - ); - -VOID -odm_DynamicTxPowerWritePowerIndex( - IN PVOID pDM_VOID, - IN u1Byte Value); - -VOID -odm_DynamicTxPower_92C( - IN PVOID pDM_VOID - ); - -VOID -odm_DynamicTxPower_92D( - IN PVOID pDM_VOID - ); -#endif - -VOID -odm_DynamicTxPower( - IN PVOID pDM_VOID - ); - -VOID -odm_DynamicTxPowerAP( - IN PVOID pDM_VOID - ); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_EdcaTurboCheck.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_EdcaTurboCheck.h deleted file mode 100644 index 65be74f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_EdcaTurboCheck.h +++ /dev/null @@ -1,152 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMEDCATURBOCHECK_H__ -#define __PHYDMEDCATURBOCHECK_H__ - -#define EDCATURBO_VERSION "1.0" - -typedef struct _EDCA_TURBO_ -{ - BOOLEAN bCurrentTurboEDCA; - BOOLEAN bIsCurRDLState; - - #if(DM_ODM_SUPPORT_TYPE == ODM_CE ) - u4Byte prv_traffic_idx; // edca turbo - #endif - -}EDCA_T,*pEDCA_T; - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) -static u4Byte edca_setting_UL[HT_IOT_PEER_MAX] = -// UNKNOWN REALTEK_90 REALTEK_92SE BROADCOM RALINK ATHEROS CISCO MERU MARVELL 92U_AP SELF_AP(DownLink/Tx) -{ 0x5e4322, 0xa44f, 0x5e4322, 0x5ea32b, 0x5ea422, 0x5ea322, 0x3ea430, 0x5ea42b, 0x5ea44f, 0x5e4322, 0x5e4322}; - - -static u4Byte edca_setting_DL[HT_IOT_PEER_MAX] = -// UNKNOWN REALTEK_90 REALTEK_92SE BROADCOM RALINK ATHEROS CISCO MERU, MARVELL 92U_AP SELF_AP(UpLink/Rx) -{ 0xa44f, 0x5ea44f, 0x5e4322, 0x5ea42b, 0xa44f, 0xa630, 0x5ea630, 0x5ea42b, 0xa44f, 0xa42b, 0xa42b}; - -static u4Byte edca_setting_DL_GMode[HT_IOT_PEER_MAX] = -// UNKNOWN REALTEK_90 REALTEK_92SE BROADCOM RALINK ATHEROS CISCO MERU, MARVELL 92U_AP SELF_AP -{ 0x4322, 0xa44f, 0x5e4322, 0xa42b, 0x5e4322, 0x4322, 0xa42b, 0x5ea42b, 0xa44f, 0x5e4322, 0x5ea42b}; - - -//============================================================ -// EDCA Paramter for AP/ADSL by Mingzhi 2011-11-22 -//============================================================ -#elif (DM_ODM_SUPPORT_TYPE &ODM_ADSL) -enum qos_prio { BK, BE, VI, VO, VI_AG, VO_AG }; - -static const struct ParaRecord rtl_ap_EDCA[] = -{ -//ACM,AIFSN, ECWmin, ECWmax, TXOplimit - {0, 7, 4, 10, 0}, //BK - {0, 3, 4, 6, 0}, //BE - {0, 1, 3, 4, 188}, //VI - {0, 1, 2, 3, 102}, //VO - {0, 1, 3, 4, 94}, //VI_AG - {0, 1, 2, 3, 47}, //VO_AG -}; - -static const struct ParaRecord rtl_sta_EDCA[] = -{ -//ACM,AIFSN, ECWmin, ECWmax, TXOplimit - {0, 7, 4, 10, 0}, - {0, 3, 4, 10, 0}, - {0, 2, 3, 4, 188}, - {0, 2, 2, 3, 102}, - {0, 2, 3, 4, 94}, - {0, 2, 2, 3, 47}, -}; -#endif - - -#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) -#ifdef WIFI_WMM -VOID -ODM_IotEdcaSwitch( - IN PVOID pDM_VOID, - IN unsigned char enable - ); -#endif - -BOOLEAN -ODM_ChooseIotMainSTA( - IN PVOID pDM_VOID, - IN PSTA_INFO_T pstat - ); -#endif - -VOID -odm_EdcaTurboCheck( - IN PVOID pDM_VOID - ); -VOID -ODM_EdcaTurboInit( - IN PVOID pDM_VOID -); - -#if(DM_ODM_SUPPORT_TYPE==ODM_WIN) -VOID -odm_EdcaTurboCheckMP( - IN PVOID pDM_VOID - ); - -//check if edca turbo is disabled -BOOLEAN -odm_IsEdcaTurboDisable( - IN PVOID pDM_VOID -); -//choose edca paramter for special IOT case -VOID -ODM_EdcaParaSelByIot( - IN PVOID pDM_VOID, - OUT u4Byte *EDCA_BE_UL, - OUT u4Byte *EDCA_BE_DL - ); -//check if it is UL or DL -VOID -odm_EdcaChooseTrafficIdx( - IN PVOID pDM_VOID, - IN u8Byte cur_tx_bytes, - IN u8Byte cur_rx_bytes, - IN BOOLEAN bBiasOnRx, - OUT BOOLEAN *pbIsCurRDLState - ); - -#elif (DM_ODM_SUPPORT_TYPE==ODM_CE) -VOID -odm_EdcaTurboCheckCE( - IN PVOID pDM_VOID - ); -#else -VOID -odm_IotEngine( - IN PVOID pDM_VOID - ); - -VOID -odm_EdcaParaInit( - IN PVOID pDM_VOID - ); -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_HWConfig.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_HWConfig.h deleted file mode 100644 index 6d33de1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_HWConfig.h +++ /dev/null @@ -1,508 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - -#ifndef __HALHWOUTSRC_H__ -#define __HALHWOUTSRC_H__ - - -/*--------------------------Define -------------------------------------------*/ -//#define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0) -#define AGC_DIFF_CONFIG_MP(ic, band) (ODM_ReadAndConfig_MP_##ic##_AGC_TAB_DIFF(pDM_Odm, Array_MP_##ic##_AGC_TAB_DIFF_##band, \ - sizeof(Array_MP_##ic##_AGC_TAB_DIFF_##band)/sizeof(u4Byte))) -#define AGC_DIFF_CONFIG_TC(ic, band) (ODM_ReadAndConfig_TC_##ic##_AGC_TAB_DIFF(pDM_Odm, Array_TC_##ic##_AGC_TAB_DIFF_##band, \ - sizeof(Array_TC_##ic##_AGC_TAB_DIFF_##band)/sizeof(u4Byte))) - -#define AGC_DIFF_CONFIG(ic, band) do {\ - if (pDM_Odm->bIsMPChip)\ - AGC_DIFF_CONFIG_MP(ic,band);\ - else\ - AGC_DIFF_CONFIG_TC(ic,band);\ - } while(0) - - -//============================================================ -// structure and define -//============================================================ - -typedef struct _Phy_Rx_AGC_Info -{ - #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte gain:7,trsw:1; - #else - u1Byte trsw:1,gain:7; - #endif -} PHY_RX_AGC_INFO_T,*pPHY_RX_AGC_INFO_T; - -typedef struct _Phy_Status_Rpt_8192cd -{ - PHY_RX_AGC_INFO_T path_agc[2]; - u1Byte ch_corr[2]; - u1Byte cck_sig_qual_ofdm_pwdb_all; - u1Byte cck_agc_rpt_ofdm_cfosho_a; - u1Byte cck_rpt_b_ofdm_cfosho_b; - u1Byte rsvd_1;//ch_corr_msb; - u1Byte noise_power_db_msb; - s1Byte path_cfotail[2]; - u1Byte pcts_mask[2]; - s1Byte stream_rxevm[2]; - u1Byte path_rxsnr[2]; - u1Byte noise_power_db_lsb; - u1Byte rsvd_2[3]; - u1Byte stream_csi[2]; - u1Byte stream_target_csi[2]; - s1Byte sig_evm; - u1Byte rsvd_3; - -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte antsel_rx_keep_2:1; //ex_intf_flg:1; - u1Byte sgi_en:1; - u1Byte rxsc:2; - u1Byte idle_long:1; - u1Byte r_ant_train_en:1; - u1Byte ant_sel_b:1; - u1Byte ant_sel:1; -#else // _BIG_ENDIAN_ - u1Byte ant_sel:1; - u1Byte ant_sel_b:1; - u1Byte r_ant_train_en:1; - u1Byte idle_long:1; - u1Byte rxsc:2; - u1Byte sgi_en:1; - u1Byte antsel_rx_keep_2:1; //ex_intf_flg:1; -#endif -} PHY_STATUS_RPT_8192CD_T,*PPHY_STATUS_RPT_8192CD_T; - - -typedef struct _Phy_Status_Rpt_8812 -{ -#if 0 - PHY_RX_AGC_INFO_T path_agc[2]; - u1Byte ch_num[2]; - u1Byte cck_sig_qual_ofdm_pwdb_all; - u1Byte cck_agc_rpt_ofdm_cfosho_a; - u1Byte cck_bb_pwr_ofdm_cfosho_b; - u1Byte cck_rx_path; //CCK_RX_PATH [3:0] (with regA07[3:0] definition) - u1Byte rsvd_1; - u1Byte path_cfotail[2]; - u1Byte pcts_mask[2]; - s1Byte stream_rxevm[2]; - u1Byte path_rxsnr[2]; - u1Byte rsvd_2[2]; - u1Byte stream_snr[2]; - u1Byte stream_csi[2]; - u1Byte rsvd_3[2]; - s1Byte sig_evm; - u1Byte rsvd_4; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte antidx_anta:3; - u1Byte antidx_antb:3; - u1Byte rsvd_5:2; -#else // _BIG_ENDIAN_ - u1Byte rsvd_5:2; - u1Byte antidx_antb:3; - u1Byte antidx_anta:3; -#endif -#endif - - //2012.05.24 LukeLee: This structure should take big/little endian in consideration later..... - - //DWORD 0 - u1Byte gain_trsw[2]; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u2Byte chl_num:10; - u2Byte sub_chnl:4; - u2Byte r_RFMOD:2; -#else // _BIG_ENDIAN_ - u2Byte r_RFMOD:2; - u2Byte sub_chnl:4; - u2Byte chl_num:10; -#endif - - //DWORD 1 - u1Byte pwdb_all; - u1Byte cfosho[4]; // DW 1 byte 1 DW 2 byte 0 - - //DWORD 2 - s1Byte cfotail[4]; // DW 2 byte 1 DW 3 byte 0 - - //DWORD 3 - s1Byte rxevm[2]; // DW 3 byte 1 DW 3 byte 2 - s1Byte rxsnr[2]; // DW 3 byte 3 DW 4 byte 0 - - //DWORD 4 - u1Byte PCTS_MSK_RPT[2]; - u1Byte pdsnr[2]; // DW 4 byte 3 DW 5 Byte 0 - - //DWORD 5 - u1Byte csi_current[2]; - u1Byte rx_gain_c; - - //DWORD 6 - u1Byte rx_gain_d; - s1Byte sigevm; - u1Byte resvd_0; - u1Byte antidx_anta:3; - u1Byte antidx_antb:3; - u1Byte resvd_1:2; -} PHY_STATUS_RPT_8812_T,*PPHY_STATUS_RPT_8812_T; - - -VOID -odm_Init_RSSIForDM( - IN OUT PDM_ODM_T pDM_Odm - ); - -VOID -ODM_PhyStatusQuery( - IN OUT PDM_ODM_T pDM_Odm, - OUT PODM_PHY_INFO_T pPhyInfo, - IN pu1Byte pPhyStatus, - IN PODM_PACKET_INFO_T pPktinfo - ); - -VOID -ODM_MacStatusQuery( - IN OUT PDM_ODM_T pDM_Odm, - IN pu1Byte pMacStatus, - IN u1Byte MacID, - IN BOOLEAN bPacketMatchBSSID, - IN BOOLEAN bPacketToSelf, - IN BOOLEAN bPacketBeacon - ); -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE|ODM_AP|ODM_IOT)) - -HAL_STATUS -ODM_ConfigRFWithTxPwrTrackHeaderFile( - IN PDM_ODM_T pDM_Odm - ); - -HAL_STATUS -ODM_ConfigRFWithHeaderFile( - IN PDM_ODM_T pDM_Odm, - IN ODM_RF_Config_Type ConfigType, - IN ODM_RF_RADIO_PATH_E eRFPath - ); - -HAL_STATUS -ODM_ConfigBBWithHeaderFile( - IN PDM_ODM_T pDM_Odm, - IN ODM_BB_Config_Type ConfigType - ); - -HAL_STATUS -ODM_ConfigMACWithHeaderFile( - IN PDM_ODM_T pDM_Odm - ); - -HAL_STATUS -ODM_ConfigFWWithHeaderFile( - IN PDM_ODM_T pDM_Odm, - IN ODM_FW_Config_Type ConfigType, - OUT u1Byte *pFirmware, - OUT u4Byte *pSize - ); - -u4Byte -ODM_GetHWImgVersion( - IN PDM_ODM_T pDM_Odm - ); - -s4Byte -odm_SignalScaleMapping( - IN OUT PDM_ODM_T pDM_Odm, - IN s4Byte CurrSig - ); - -#endif - -#if(ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1) -//For New RX PHY Status Report Format, include 8723D/8710B -VOID -phydm_RxPhyStatusNewType( - IN PDM_ODM_T pPhydm, - IN pu1Byte pPhyStatus, - IN PODM_PACKET_INFO_T pPktinfo, - OUT PODM_PHY_INFO_T pPhyInfo -); - -typedef struct _Phy_Status_Rpt_Jaguar2_Type0 { - /* DW0 */ - u1Byte page_num; - u1Byte pwdb; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte gain: 6; - u1Byte rsvd_0: 1; - u1Byte trsw: 1; -#else - u1Byte trsw: 1; - u1Byte rsvd_0: 1; - u1Byte gain: 6; -#endif - u1Byte rsvd_1; - - /* DW1 */ - u1Byte rsvd_2; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte rxsc: 4; - u1Byte agc_table: 4; -#else - u1Byte agc_table: 4; - u1Byte rxsc: 4; -#endif - u1Byte channel; - u1Byte band; - - /* DW2 */ - u2Byte length; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte antidx_a: 3; - u1Byte antidx_b: 3; - u1Byte rsvd_3: 2; - u1Byte antidx_c: 3; - u1Byte antidx_d: 3; - u1Byte rsvd_4:2; -#else - u1Byte rsvd_3: 2; - u1Byte antidx_b: 3; - u1Byte antidx_a: 3; - u1Byte rsvd_4:2; - u1Byte antidx_d: 3; - u1Byte antidx_c: 3; -#endif - - /* DW3 */ - u1Byte signal_quality; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte vga:5; - u1Byte lna_l:3; - u1Byte bb_power:6; - u1Byte rsvd_9:1; - u1Byte lna_h:1; -#else - u1Byte lna_l:3; - u1Byte vga:5; - u1Byte lna_h:1; - u1Byte rsvd_9:1; - u1Byte bb_power:6; -#endif - u1Byte rsvd_5; - - /* DW4 */ - u4Byte rsvd_6; - - /* DW5 */ - u4Byte rsvd_7; - - /* DW6 */ - u4Byte rsvd_8; -} PHY_STATUS_RPT_JAGUAR2_TYPE0, *PPHY_STATUS_RPT_JAGUAR2_TYPE0; //for CCK Format - -typedef struct _Phy_Status_Rpt_Jaguar2_Type1 { - /* DW0 and DW1 */ - u1Byte page_num; - u1Byte pwdb[4]; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte l_rxsc: 4; - u1Byte ht_rxsc: 4; -#else - u1Byte ht_rxsc: 4; - u1Byte l_rxsc: 4; -#endif - u1Byte channel; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte band: 2; - u1Byte rsvd_0: 1; - u1Byte hw_antsw_occu: 1; - u1Byte gnt_bt: 1; - u1Byte ldpc: 1; - u1Byte stbc: 1; - u1Byte beamformed: 1; -#else - u1Byte beamformed: 1; - u1Byte stbc: 1; - u1Byte ldpc: 1; - u1Byte gnt_bt: 1; - u1Byte hw_antsw_occu: 1; - u1Byte rsvd_0: 1; - u1Byte band: 2; -#endif - - /* DW2 */ - u2Byte lsig_length; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte antidx_a: 3; - u1Byte antidx_b: 3; - u1Byte rsvd_1: 2; - u1Byte antidx_c: 3; - u1Byte antidx_d: 3; - u1Byte rsvd_2: 2; -#else - u1Byte rsvd_1: 2; - u1Byte antidx_b: 3; - u1Byte antidx_a: 3; - u1Byte rsvd_2: 2; - u1Byte antidx_d: 3; - u1Byte antidx_c: 3; -#endif - - /* DW3 */ - u1Byte paid; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte paid_msb: 1; - u1Byte gid: 6; - u1Byte rsvd_3: 1; -#else - u1Byte rsvd_3: 1; - u1Byte gid: 6; - u1Byte paid_msb: 1; -#endif - u1Byte intf_pos; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte intf_pos_msb: 1; - u1Byte rsvd_4: 2; - u1Byte nb_intf_flag: 1; - u1Byte rf_mode: 2; - u1Byte rsvd_5: 2; -#else - u1Byte rsvd_5: 2; - u1Byte rf_mode: 2; - u1Byte nb_intf_flag: 1; - u1Byte rsvd_4: 2; - u1Byte intf_pos_msb: 1; -#endif - - /* DW4 */ - s1Byte rxevm[4]; /* s(8,1) */ - - /* DW5 */ - s1Byte cfo_tail[4]; /* s(8,7) */ - - /* DW6 */ - s1Byte rxsnr[4]; /* s(8,1) */ -} PHY_STATUS_RPT_JAGUAR2_TYPE1, *PPHY_STATUS_RPT_JAGUAR2_TYPE1;//for OFDM Format - -typedef struct _Phy_Status_Rpt_Jaguar2_Type2 { - /* DW0 ane DW1 */ - u1Byte page_num; - u1Byte pwdb[4]; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte l_rxsc: 4; - u1Byte ht_rxsc: 4; -#else - u1Byte ht_rxsc: 4; - u1Byte l_rxsc: 4; -#endif - u1Byte channel; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte band: 2; - u1Byte rsvd_0: 1; - u1Byte hw_antsw_occu: 1; - u1Byte gnt_bt: 1; - u1Byte ldpc: 1; - u1Byte stbc: 1; - u1Byte beamformed: 1; -#else - u1Byte beamformed: 1; - u1Byte stbc: 1; - u1Byte ldpc: 1; - u1Byte gnt_bt: 1; - u1Byte hw_antsw_occu: 1; - u1Byte rsvd_0: 1; - u1Byte band: 2; -#endif - - /* DW2 */ -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte shift_l_map: 6; - u1Byte rsvd_1: 2; -#else - u1Byte rsvd_1: 2; - u1Byte shift_l_map: 6; -#endif - u1Byte cnt_pw2cca; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte agc_table_a: 4; - u1Byte agc_table_b: 4; - u1Byte agc_table_c: 4; - u1Byte agc_table_d: 4; -#else - u1Byte agc_table_b: 4; - u1Byte agc_table_a: 4; - u1Byte agc_table_d: 4; - u1Byte agc_table_c: 4; -#endif - - /* DW3 ~ DW6*/ - u1Byte cnt_cca2agc_rdy; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte gain_a: 6; - u1Byte rsvd_2: 1; - u1Byte trsw_a: 1; - u1Byte gain_b: 6; - u1Byte rsvd_3: 1; - u1Byte trsw_b: 1; - u1Byte gain_c: 6; - u1Byte rsvd_4: 1; - u1Byte trsw_c: 1; - u1Byte gain_d: 6; - u1Byte rsvd_5: 1; - u1Byte trsw_d: 1; - u1Byte aagc_step_a: 2; - u1Byte aagc_step_b: 2; - u1Byte aagc_step_c: 2; - u1Byte aagc_step_d: 2; -#else - u1Byte trsw_a: 1; - u1Byte rsvd_2: 1; - u1Byte gain_a: 6; - u1Byte trsw_b: 1; - u1Byte rsvd_3: 1; - u1Byte gain_b: 6; - u1Byte trsw_c: 1; - u1Byte rsvd_4: 1; - u1Byte gain_c: 6; - u1Byte trsw_d: 1; - u1Byte rsvd_5: 1; - u1Byte gain_d: 6; - u1Byte aagc_step_d: 2; - u1Byte aagc_step_c: 2; - u1Byte aagc_step_b: 2; - u1Byte aagc_step_a: 2; -#endif - u1Byte ht_aagc_gain[4]; - u1Byte dagc_gain[4]; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte counter: 6; - u1Byte rsvd_6: 2; - u1Byte syn_count: 5; - u1Byte rsvd_7:3; -#else - u1Byte rsvd_6: 2; - u1Byte counter: 6; - u1Byte rsvd_7:3; - u1Byte syn_count: 5; -#endif -} PHY_STATUS_RPT_JAGUAR2_TYPE2, *PPHY_STATUS_RPT_JAGUAR2_TYPE2;//for debug mode: AGC&SBD - -#endif - -#endif /*#ifndef __HALHWOUTSRC_H__*/ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_NoiseMonitor.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_NoiseMonitor.h deleted file mode 100644 index 022cefe..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_NoiseMonitor.h +++ /dev/null @@ -1,49 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - *****************************************************************************/ -#ifndef __ODMNOISEMONITOR_H__ -#define __ODMNOISEMONITOR_H__ - -#define ODM_MAX_CHANNEL_NUM 38//14+24 -struct noise_level -{ - //u1Byte value_a, value_b; - u1Byte value[MAX_RF_PATH]; - //s1Byte sval_a, sval_b; - s1Byte sval[MAX_RF_PATH]; - - //s4Byte noise_a=0, noise_b=0,sum_a=0, sum_b=0; - //s4Byte noise[ODM_RF_PATH_MAX]; - s4Byte sum[MAX_RF_PATH]; - //u1Byte valid_cnt_a=0, valid_cnt_b=0, - u1Byte valid[MAX_RF_PATH]; - u1Byte valid_cnt[MAX_RF_PATH]; - -}; - - -typedef struct _ODM_NOISE_MONITOR_ -{ - s1Byte noise[MAX_RF_PATH]; - s2Byte noise_all; -}ODM_NOISE_MONITOR; - -s2Byte ODM_InbandNoise_Monitor(PVOID pDM_VOID,u8 bPauseDIG,u8 IGIValue,u32 max_time); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_PathDiv.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_PathDiv.h deleted file mode 100644 index 693f413..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_PathDiv.h +++ /dev/null @@ -1,193 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMPATHDIV_H__ -#define __PHYDMPATHDIV_H__ - -#define PATHDIV_VERSION "1.0" - -VOID -odm_PathDiversityInit( - IN PVOID pDM_VOID - ); - -VOID -odm_PathDiversity( - IN PVOID pDM_VOID - ); - -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) - -//#define PATHDIV_ENABLE 1 -#define dm_PathDiv_RSSI_Check ODM_PathDivChkPerPktRssi -#define PathDivCheckBeforeLink8192C ODM_PathDiversityBeforeLink92C - -typedef struct _PathDiv_Parameter_define_ -{ - u4Byte org_5g_RegE30; - u4Byte org_5g_RegC14; - u4Byte org_5g_RegCA0; - u4Byte swt_5g_RegE30; - u4Byte swt_5g_RegC14; - u4Byte swt_5g_RegCA0; - //for 2G IQK information - u4Byte org_2g_RegC80; - u4Byte org_2g_RegC4C; - u4Byte org_2g_RegC94; - u4Byte org_2g_RegC14; - u4Byte org_2g_RegCA0; - - u4Byte swt_2g_RegC80; - u4Byte swt_2g_RegC4C; - u4Byte swt_2g_RegC94; - u4Byte swt_2g_RegC14; - u4Byte swt_2g_RegCA0; -}PATHDIV_PARA,*pPATHDIV_PARA; - -VOID -odm_PathDiversityInit_92C( - IN PADAPTER Adapter - ); - -VOID -odm_2TPathDiversityInit_92C( - IN PADAPTER Adapter - ); - -VOID -odm_1TPathDiversityInit_92C( - IN PADAPTER Adapter - ); - -BOOLEAN -odm_IsConnected_92C( - IN PADAPTER Adapter - ); - -BOOLEAN -ODM_PathDiversityBeforeLink92C( - //IN PADAPTER Adapter - IN PDM_ODM_T pDM_Odm - ); - -VOID -odm_PathDiversityAfterLink_92C( - IN PADAPTER Adapter - ); - -VOID -odm_SetRespPath_92C( - IN PADAPTER Adapter, - IN u1Byte DefaultRespPath - ); - -VOID -odm_OFDMTXPathDiversity_92C( - IN PADAPTER Adapter - ); - -VOID -odm_CCKTXPathDiversity_92C( - IN PADAPTER Adapter - ); - -VOID -odm_ResetPathDiversity_92C( - IN PADAPTER Adapter - ); - -VOID -odm_CCKTXPathDiversityCallback( - PRT_TIMER pTimer - ); - -VOID -odm_CCKTXPathDiversityWorkItemCallback( - IN PVOID pContext - ); - -VOID -odm_PathDivChkAntSwitchCallback( - PRT_TIMER pTimer - ); - -VOID -odm_PathDivChkAntSwitchWorkitemCallback( - IN PVOID pContext - ); - - -VOID -odm_PathDivChkAntSwitch( - PDM_ODM_T pDM_Odm - ); - -VOID -ODM_CCKPathDiversityChkPerPktRssi( - PADAPTER Adapter, - BOOLEAN bIsDefPort, - BOOLEAN bMatchBSSID, - PRT_WLAN_STA pEntry, - PRT_RFD pRfd, - pu1Byte pDesc - ); - -VOID -ODM_PathDivChkPerPktRssi( - PADAPTER Adapter, - BOOLEAN bIsDefPort, - BOOLEAN bMatchBSSID, - PRT_WLAN_STA pEntry, - PRT_RFD pRfd - ); - -VOID -ODM_PathDivRestAfterLink( - IN PDM_ODM_T pDM_Odm - ); - -VOID -ODM_FillTXPathInTXDESC( - IN PADAPTER Adapter, - IN PRT_TCB pTcb, - IN pu1Byte pDesc - ); - -VOID -odm_PathDivInit_92D( - IN PDM_ODM_T pDM_Odm - ); - -u1Byte -odm_SwAntDivSelectScanChnl( - IN PADAPTER Adapter - ); - -VOID -odm_SwAntDivConstructScanChnl( - IN PADAPTER Adapter, - IN u1Byte ScanChnl - ); - - #endif //#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) - - - #endif //#ifndef __ODMPATHDIV_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_PowerTracking.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_PowerTracking.h deleted file mode 100644 index ea4350d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_PowerTracking.h +++ /dev/null @@ -1,306 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMPOWERTRACKING_H__ -#define __PHYDMPOWERTRACKING_H__ - -#define POWRTRACKING_VERSION "1.0" - -#define DPK_DELTA_MAPPING_NUM 13 -#define index_mapping_HP_NUM 15 -#define OFDM_TABLE_SIZE 43 -#define CCK_TABLE_SIZE 33 -#define TXSCALE_TABLE_SIZE 37 -#define TXPWR_TRACK_TABLE_SIZE 30 -#define DELTA_SWINGIDX_SIZE 30 -#define BAND_NUM 4 -#define CCK_TABLE_SIZE_8711B 41 - -#define AVG_THERMAL_NUM 8 -#define HP_THERMAL_NUM 8 -#define IQK_MAC_REG_NUM 4 -#define IQK_ADDA_REG_NUM 16 -#define IQK_BB_REG_NUM_MAX 10 -#if (RTL8192D_SUPPORT==1) -#define IQK_BB_REG_NUM 10 -#else -#define IQK_BB_REG_NUM 9 -#endif - - -#define IQK_Matrix_REG_NUM 8 -#if defined(CONFIG_RTL8188E) || defined(CONFIG_RTL8195A) || defined (CONFIG_RTL8711B) -#define IQK_Matrix_Settings_NUM 14 -#else -#define IQK_Matrix_Settings_NUM 14+24+21 // Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G -#endif - -//extern u4Byte OFDMSwingTable[OFDM_TABLE_SIZE]; -//extern u1Byte CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8]; -//extern u1Byte CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8]; -#if (RTL8195A_SUPPORT == 1) -extern const u1Byte CCKSwingTable_Ch1_Ch13_8195A[CCK_TABLE_SIZE][9]; -extern const u1Byte CCKSwingTable_Ch14_8195A[CCK_TABLE_SIZE][9]; -extern const u1Byte CCKFCCTable_8195A[16]; -extern const u1Byte CCKCETable_8195A[16]; -extern const u1Byte CCKFCCTable_Ch14_8195A[16]; -#endif - -#if (RTL8711B_SUPPORT == 1) - -extern const u1Byte CCKFCCTable_8711B[16]; -extern const u1Byte CCKCETable_8711B[16]; -extern const u1Byte CCKFCCTable_Ch14_8711B[16]; -extern const u4Byte CCKSwingTable_Ch1_Ch14_8711B[CCK_TABLE_SIZE_8711B]; -#endif - -extern const u4Byte OFDMSwingTable_New[OFDM_TABLE_SIZE]; -extern const u1Byte CCKSwingTable_Ch1_Ch13_New[CCK_TABLE_SIZE][8]; -extern const u1Byte CCKSwingTable_Ch14_New [CCK_TABLE_SIZE][8]; -//extern u4Byte TxScalingTable_Jaguar[TXSCALE_TABLE_SIZE]; - -// <20121018, Kordan> In case fail to read TxPowerTrack.txt, we use the table of 88E as the default table. -//static u1Byte DeltaSwingTableIdx_2GA_P_8188E[] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9}; -//static u1Byte DeltaSwingTableIdx_2GA_N_8188E[] = {0, 0, 0, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11}; - -#define dm_CheckTXPowerTracking ODM_TXPowerTrackingCheck - -typedef struct _IQK_MATRIX_REGS_SETTING{ - BOOLEAN bIQKDone; -#if defined(CONFIG_RTL8188E) || defined(CONFIG_RTL8195A) || defined(CONFIG_RTL8711B) - s4Byte Value[1][IQK_Matrix_REG_NUM]; -#else - s4Byte Value[3][IQK_Matrix_REG_NUM]; - BOOLEAN bBWIqkResultSaved[3]; -#endif -}IQK_MATRIX_REGS_SETTING,*PIQK_MATRIX_REGS_SETTING; - -typedef struct ODM_RF_Calibration_Structure -{ - //for tx power tracking - - u4Byte RegA24; // for TempCCK - s4Byte RegE94; - s4Byte RegE9C; - s4Byte RegEB4; - s4Byte RegEBC; - - u1Byte TXPowercount; - BOOLEAN bTXPowerTrackingInit; - BOOLEAN bTXPowerTracking; - u1Byte TxPowerTrackControl; //for mp mode, turn off txpwrtracking as default - u1Byte TM_Trigger; - u1Byte InternalPA5G[2]; //pathA / pathB - - u1Byte ThermalMeter[2]; // ThermalMeter, index 0 for RFIC0, and 1 for RFIC1 - u1Byte ThermalValue; - u1Byte ThermalValue_LCK; - u1Byte ThermalValue_IQK; - u1Byte ThermalValue_DPK; - u1Byte ThermalValue_AVG[AVG_THERMAL_NUM]; - u1Byte ThermalValue_AVG_index; - u1Byte ThermalValue_RxGain; - u1Byte ThermalValue_Crystal; - u1Byte ThermalValue_DPKstore; - u1Byte ThermalValue_DPKtrack; - BOOLEAN TxPowerTrackingInProgress; - - BOOLEAN bReloadtxpowerindex; - u1Byte bRfPiEnable; - u4Byte TXPowerTrackingCallbackCnt; //cosa add for debug - - - //------------------------- Tx power Tracking -------------------------// - u1Byte bCCKinCH14; - u1Byte CCK_index[MAX_RF_PATH]; - s1Byte PowerIndexOffset_CCK[MAX_RF_PATH]; - s1Byte DeltaPowerIndex_CCK[MAX_RF_PATH]; - s1Byte DeltaPowerIndexLast_CCK[MAX_RF_PATH]; - u1Byte OFDM_index[MAX_RF_PATH]; - s1Byte PowerIndexOffset_OFDM[MAX_RF_PATH]; - s1Byte DeltaPowerIndex_OFDM[MAX_RF_PATH]; - s1Byte DeltaPowerIndexLast_OFDM[MAX_RF_PATH]; - BOOLEAN bTxPowerChanged; - s1Byte XtalOffset; - s1Byte XtalOffsetLast; - - u1Byte ThermalValue_HP[HP_THERMAL_NUM]; - u1Byte ThermalValue_HP_index; - IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM]; - u1Byte Delta_LCK; - s1Byte BBSwingDiff2G, BBSwingDiff5G; // Unit: dB - s1Byte DeltaSwingTableIdx_2GCCKA_P[DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_2GCCKA_N[DELTA_SWINGIDX_SIZE]; -#if !defined(NOT_SUPPORT_RF_MULTIPATH) - s1Byte DeltaSwingTableIdx_2GCCKB_P[DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_2GCCKB_N[DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_2GCCKC_P[DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_2GCCKC_N[DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_2GCCKD_P[DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_2GCCKD_N[DELTA_SWINGIDX_SIZE]; -#endif - s1Byte DeltaSwingTableIdx_2GA_P[DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_2GA_N[DELTA_SWINGIDX_SIZE]; -#if !defined(NOT_SUPPORT_RF_MULTIPATH) - s1Byte DeltaSwingTableIdx_2GB_P[DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_2GB_N[DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_2GC_P[DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_2GC_N[DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_2GD_P[DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_2GD_N[DELTA_SWINGIDX_SIZE]; -#endif -#if !defined(NOT_SUPPORT_5G) - s1Byte DeltaSwingTableIdx_5GA_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_5GA_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_5GB_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_5GB_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_5GC_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_5GC_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_5GD_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableIdx_5GD_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; -#endif -// u1Byte DeltaSwingTableIdx_2GA_P_8188E[DELTA_SWINGIDX_SIZE]; -// u1Byte DeltaSwingTableIdx_2GA_N_8188E[DELTA_SWINGIDX_SIZE]; - - s1Byte DeltaSwingTableXtal_P[DELTA_SWINGIDX_SIZE]; - s1Byte DeltaSwingTableXtal_N[DELTA_SWINGIDX_SIZE]; - - - - //--------------------------------------------------------------------// - - //for IQK - u4Byte RegC04; - u4Byte Reg874; - u4Byte RegC08; - u4Byte RegB68; - u4Byte RegB6C; - u4Byte Reg870; - u4Byte Reg860; - u4Byte Reg864; - - BOOLEAN bIQKInitialized; - BOOLEAN bLCKInProgress; - BOOLEAN bAntennaDetected; - BOOLEAN bNeedIQK; - BOOLEAN bIQKInProgress; - u1Byte Delta_IQK; - u4Byte ADDA_backup[IQK_ADDA_REG_NUM]; - u4Byte IQK_MAC_backup[IQK_MAC_REG_NUM]; - u4Byte IQK_BB_backup_recover[9]; - u4Byte IQK_BB_backup[IQK_BB_REG_NUM]; - u4Byte TxIQC_8723B[2][3][2]; // { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}} - u4Byte RxIQC_8723B[2][2][2]; // { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}} - - // IQK time measurement - u8Byte IQK_StartTime; - u8Byte IQK_ProgressingTime; - u4Byte LOK_Result; - - //for APK - u4Byte APKoutput[2][2]; //path A/B; output1_1a/output1_2a - u1Byte bAPKdone; - u1Byte bAPKThermalMeterIgnore; - - // DPK - BOOLEAN bDPKFail; - u1Byte bDPdone; - u1Byte bDPPathAOK; - u1Byte bDPPathBOK; - - u4Byte TxLOK[2]; - u4Byte DpkTxAGC; - s4Byte DpkGain; - u4Byte DpkThermal[4]; -}ODM_RF_CAL_T,*PODM_RF_CAL_T; - - -VOID -ODM_TXPowerTrackingCheck( - IN PVOID pDM_VOID - ); - - -VOID -odm_TXPowerTrackingInit( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingCheckAP( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingThermalMeterInit( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingInit( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingCheckMP( - IN PVOID pDM_VOID - ); - - -VOID -odm_TXPowerTrackingCheckCE( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingCheckIOT( - IN PVOID pDM_VOID - ); - -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) - -VOID -odm_TXPowerTrackingCallbackThermalMeter92C( - IN PADAPTER Adapter - ); - -VOID -odm_TXPowerTrackingCallbackRXGainThermalMeter92D( - IN PADAPTER Adapter - ); - -VOID -odm_TXPowerTrackingCallbackThermalMeter92D( - IN PADAPTER Adapter - ); - -VOID -odm_TXPowerTrackingDirectCall92C( - IN PADAPTER Adapter - ); - -VOID -odm_TXPowerTrackingThermalMeterCheck( - IN PADAPTER Adapter - ); - -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_RXHP.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_RXHP.h deleted file mode 100644 index 98b3aa6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_RXHP.h +++ /dev/null @@ -1,105 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __PHYDMRXHP_H__ -#define __PHYDMRXHP_H__ - -#define RXHP_VERSION "1.0" - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - -#define AFH_PSD 1 //0:normal PSD scan, 1: only do 20 pts PSD -#define MODE_40M 0 //0:20M, 1:40M -#define PSD_TH2 3 -#define PSD_CHMIN 20 // Minimum channel number for BT AFH -#define SIR_STEP_SIZE 3 -#define Smooth_Size_1 5 -#define Smooth_TH_1 3 -#define Smooth_Size_2 10 -#define Smooth_TH_2 4 -#define Smooth_Size_3 20 -#define Smooth_TH_3 4 -#define Smooth_Step_Size 5 -#define Adaptive_SIR 1 -#define PSD_RESCAN 4 -#define PSD_SCAN_INTERVAL 700 //ms - -typedef struct _RX_High_Power_ -{ - u1Byte RXHP_flag; - u1Byte PSD_func_trigger; - u1Byte PSD_bitmap_RXHP[80]; - u1Byte Pre_IGI; - u1Byte Cur_IGI; - u1Byte Pre_pw_th; - u1Byte Cur_pw_th; - BOOLEAN First_time_enter; - BOOLEAN RXHP_enable; - u1Byte TP_Mode; - RT_TIMER PSDTimer; - #if USE_WORKITEM - RT_WORK_ITEM PSDTimeWorkitem; - #endif -}RXHP_T, *pRXHP_T; - -#define dm_PSDMonitorCallback odm_PSDMonitorCallback -VOID odm_PSDMonitorCallback(PRT_TIMER pTimer); - -VOID -odm_PSDMonitorInit( - IN PVOID pDM_VOID - ); - -void odm_RXHPInit( - IN PVOID pDM_VOID); - -void odm_RXHP( - IN PVOID pDM_VOID); - -VOID -odm_PSD_RXHPCallback( - PRT_TIMER pTimer -); - - VOID -ODM_PSDDbgControl( - IN PADAPTER Adapter, - IN u4Byte mode, - IN u4Byte btRssi - ); - - VOID -odm_PSD_RXHPCallback( - PRT_TIMER pTimer -); - -VOID -odm_PSD_RXHPWorkitemCallback( - IN PVOID pContext - ); - -VOID -odm_PSDMonitorWorkItemCallback( - IN PVOID pContext - ); - - #endif - - #endif - \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_RaInfo.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_RaInfo.h deleted file mode 100644 index ae5371e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_RaInfo.h +++ /dev/null @@ -1,210 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMRAINFO_H__ -#define __PHYDMRAINFO_H__ - -#define RAINFO_VERSION "1.0" - -#define H2C_0X42_LENGTH 5 -#define H2C_MAX_LENGTH 7 - -#define RA_FLOOR_UP_GAP 3 -#define RA_FLOOR_TABLE_SIZE 7 - -#define ACTIVE_TP_THRESHOLD 150 -#define RA_RETRY_DESCEND_NUM 2 -#define RA_RETRY_LIMIT_LOW 4 -#define RA_RETRY_LIMIT_HIGH 32 - -#define RAINFO_BE_RX_STATE BIT0 // 1:RX //ULDL -#define RAINFO_STBC_STATE BIT1 -//#define RAINFO_LDPC_STATE BIT2 -#define RAINFO_NOISY_STATE BIT2 // set by Noisy_Detection -#define RAINFO_SHURTCUT_STATE BIT3 -#define RAINFO_SHURTCUT_FLAG BIT4 -#define RAINFO_INIT_RSSI_RATE_STATE BIT5 -#define RAINFO_BF_STATE BIT6 -#define RAINFO_BE_TX_STATE BIT7 // 1:TX - -#define AP_InitRateAdaptiveState ODM_RateAdaptiveStateApInit - -#define DM_RATR_STA_INIT 0 -#define DM_RATR_STA_HIGH 1 -#define DM_RATR_STA_MIDDLE 2 -#define DM_RATR_STA_LOW 3 -#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) -#define DM_RATR_STA_ULTRA_LOW 4 -#endif - -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE|ODM_IOT)) -typedef struct _Rate_Adaptive_Table_{ - u1Byte firstconnect; - #if(DM_ODM_SUPPORT_TYPE==ODM_WIN) - BOOLEAN PT_collision_pre; - #endif - - //u1Byte link_tx_rate[ODM_ASSOCIATE_ENTRY_NUM]; - u1Byte highest_client_tx_order; - u2Byte highest_client_tx_rate_order; - u1Byte power_tracking_flag; - u1Byte RA_threshold_offset; - u1Byte RA_offset_direction; - -}RA_T, *pRA_T; -#endif - -typedef struct _ODM_RATE_ADAPTIVE -{ - u1Byte Type; // DM_Type_ByFW/DM_Type_ByDriver - u1Byte HighRSSIThresh; // if RSSI > HighRSSIThresh => RATRState is DM_RATR_STA_HIGH - u1Byte LowRSSIThresh; // if RSSI <= LowRSSIThresh => RATRState is DM_RATR_STA_LOW - u1Byte RATRState; // Current RSSI level, DM_RATR_STA_HIGH/DM_RATR_STA_MIDDLE/DM_RATR_STA_LOW - - #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE|ODM_IOT)) - u1Byte LdpcThres; // if RSSI > LdpcThres => switch from LPDC to BCC - BOOLEAN bLowerRtsRate; - #endif - - #if(DM_ODM_SUPPORT_TYPE & ODM_WIN) - u1Byte RtsThres; - #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_IOT)) - BOOLEAN bUseLdpc; - #else - u1Byte UltraLowRSSIThresh; - u4Byte LastRATR; // RATR Register Content - #endif - -} ODM_RATE_ADAPTIVE, *PODM_RATE_ADAPTIVE; - -VOID -odm_RSSIMonitorInit( - IN PVOID pDM_VOID - ); - -VOID -odm_RSSIMonitorCheck( - IN PVOID pDM_VOID - ); - -#if(DM_ODM_SUPPORT_TYPE==ODM_WIN) -VOID -odm_RSSIDumpToRegister( - IN PVOID pDM_VOID - ); -#endif - -VOID -odm_RSSIMonitorCheckMP( - IN PVOID pDM_VOID - ); - -VOID -odm_RSSIMonitorCheckCE( - IN PVOID pDM_VOID - ); - -VOID -odm_RSSIMonitorCheckIOT( - IN PVOID pDM_VOID - ); - -VOID -odm_RSSIMonitorCheckAP( - IN PVOID pDM_VOID - ); - - -VOID -odm_RateAdaptiveMaskInit( - IN PVOID pDM_VOID - ); - -VOID -odm_RefreshRateAdaptiveMask( - IN PVOID pDM_VOID - ); - -VOID -odm_RefreshRateAdaptiveMaskMP( - IN PVOID pDM_VOID - ); - -VOID -odm_RefreshRateAdaptiveMaskCE( - IN PVOID pDM_VOID - ); - -VOID -odm_RefreshRateAdaptiveMaskIOT( - IN PVOID pDM_VOID - ); - -VOID -odm_RefreshRateAdaptiveMaskAPADSL( - IN PVOID pDM_VOID - ); - -BOOLEAN -ODM_RAStateCheck( - IN PVOID pDM_VOID, - IN s4Byte RSSI, - IN BOOLEAN bForceUpdate, - OUT pu1Byte pRATRState - ); - -VOID -odm_RefreshBasicRateMask( - IN PVOID pDM_VOID - ); - -VOID -phydm_ra_info_init( - IN PVOID pDM_VOID - ); - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -VOID -ODM_DynamicARFBSelect( - IN PVOID pDM_VOID, - IN u1Byte rate, - IN BOOLEAN Collision_State - ); - -VOID -ODM_RateAdaptiveStateApInit( - IN PVOID PADAPTER_VOID, - IN PRT_WLAN_STA pEntry - ); -#endif - -#if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_IOT)) -u4Byte -ODM_Get_Rate_Bitmap( - IN PVOID pDM_VOID, - IN u4Byte macid, - IN u4Byte ra_mask, - IN u1Byte rssi_level - ); -#endif - -#endif //#ifndef __ODMRAINFO_H__ - - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_RegDefine11AC.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_RegDefine11AC.h deleted file mode 100644 index 9b83c55..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_RegDefine11AC.h +++ /dev/null @@ -1,81 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __ODM_REGDEFINE11AC_H__ -#define __ODM_REGDEFINE11AC_H__ - -//2 RF REG LIST - - - -//2 BB REG LIST -//PAGE 8 -#define ODM_REG_CCK_RPT_FORMAT_11AC 0x804 -#define ODM_REG_BB_RX_PATH_11AC 0x808 -#define ODM_REG_BB_TX_PATH_11AC 0x80c -#define ODM_REG_BB_ATC_11AC 0x860 -#define ODM_REG_EDCCA_POWER_CAL 0x8dc -#define ODM_REG_DBG_RPT_11AC 0x8fc -//PAGE 9 -#define ODM_REG_EDCCA_DOWN_OPT 0x900 -#define ODM_REG_ACBB_EDCCA_ENHANCE 0x944 -#define ODM_REG_OFDM_FA_RST_11AC 0x9A4 -#define ODM_REG_NHM_TIMER_11AC 0x990 -#define ODM_REG_NHM_TH9_TH10_11AC 0x994 -#define ODM_REG_NHM_TH3_TO_TH0_11AC 0x998 -#define ODM_REG_NHM_TH7_TO_TH4_11AC 0x99c -#define ODM_REG_NHM_TH8_11AC 0x9a0 -#define ODM_REG_NHM_9E8_11AC 0x9e8 -//PAGE A -#define ODM_REG_CCK_CCA_11AC 0xA0A -#define ODM_REG_CCK_FA_RST_11AC 0xA2C -#define ODM_REG_CCK_FA_11AC 0xA5C -//PAGE B -#define ODM_REG_RST_RPT_11AC 0xB58 -//PAGE C -#define ODM_REG_TRMUX_11AC 0xC08 -#define ODM_REG_IGI_A_11AC 0xC50 -//PAGE E -#define ODM_REG_IGI_B_11AC 0xE50 -#define ODM_REG_TRMUX_11AC_B 0xE08 -//PAGE F -#define ODM_REG_CCK_CCA_CNT_11AC 0xF08 -#define ODM_REG_OFDM_FA_11AC 0xF48 -#define ODM_REG_RPT_11AC 0xfa0 -#define ODM_REG_NHM_CNT_11AC 0xfa8 -//PAGE 18 -#define ODM_REG_IGI_C_11AC 0x1850 -//PAGE 1A -#define ODM_REG_IGI_D_11AC 0x1A50 - -//2 MAC REG LIST -#define ODM_REG_RESP_TX_11AC 0x6D8 - - - -//DIG Related -#define ODM_BIT_IGI_11AC 0xFFFFFFFF -#define ODM_BIT_CCK_RPT_FORMAT_11AC BIT16 -#define ODM_BIT_BB_RX_PATH_11AC 0xF -#define ODM_BIT_BB_TX_PATH_11AC 0xF -#define ODM_BIT_BB_ATC_11AC BIT14 - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_RegDefine11N.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_RegDefine11N.h deleted file mode 100644 index c1d91d7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_RegDefine11N.h +++ /dev/null @@ -1,186 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __ODM_REGDEFINE11N_H__ -#define __ODM_REGDEFINE11N_H__ - - -//2 RF REG LIST -#define ODM_REG_RF_MODE_11N 0x00 -#define ODM_REG_RF_0B_11N 0x0B -#define ODM_REG_CHNBW_11N 0x18 -#define ODM_REG_T_METER_11N 0x24 -#define ODM_REG_RF_25_11N 0x25 -#define ODM_REG_RF_26_11N 0x26 -#define ODM_REG_RF_27_11N 0x27 -#define ODM_REG_RF_2B_11N 0x2B -#define ODM_REG_RF_2C_11N 0x2C -#define ODM_REG_RXRF_A3_11N 0x3C -#define ODM_REG_T_METER_92D_11N 0x42 -#define ODM_REG_T_METER_88E_11N 0x42 - - - -//2 BB REG LIST -//PAGE 8 -#define ODM_REG_BB_CTRL_11N 0x800 -#define ODM_REG_RF_PIN_11N 0x804 -#define ODM_REG_PSD_CTRL_11N 0x808 -#define ODM_REG_TX_ANT_CTRL_11N 0x80C -#define ODM_REG_BB_PWR_SAV5_11N 0x818 -#define ODM_REG_CCK_RPT_FORMAT_11N 0x824 -#define ODM_REG_CCK_RPT_FORMAT_11N_B 0x82C -#define ODM_REG_RX_DEFUALT_A_11N 0x858 -#define ODM_REG_RX_DEFUALT_B_11N 0x85A -#define ODM_REG_BB_PWR_SAV3_11N 0x85C -#define ODM_REG_ANTSEL_CTRL_11N 0x860 -#define ODM_REG_RX_ANT_CTRL_11N 0x864 -#define ODM_REG_PIN_CTRL_11N 0x870 -#define ODM_REG_BB_PWR_SAV1_11N 0x874 -#define ODM_REG_ANTSEL_PATH_11N 0x878 -#define ODM_REG_BB_3WIRE_11N 0x88C -#define ODM_REG_SC_CNT_11N 0x8C4 -#define ODM_REG_PSD_DATA_11N 0x8B4 -#define ODM_REG_PSD_DATA_11N 0x8B4 -#define ODM_REG_NHM_TIMER_11N 0x894 -#define ODM_REG_NHM_TH9_TH10_11N 0x890 -#define ODM_REG_NHM_TH3_TO_TH0_11N 0x898 -#define ODM_REG_NHM_TH7_TO_TH4_11N 0x89c -#define ODM_REG_NHM_CNT_11N 0x8d8 -//PAGE 9 -#define ODM_REG_DBG_RPT_11N 0x908 -#define ODM_REG_BB_TX_PATH_11N 0x90c -#define ODM_REG_ANT_MAPPING1_11N 0x914 -#define ODM_REG_ANT_MAPPING2_11N 0x918 -#define ODM_REG_EDCCA_DOWN_OPT_11N 0x948 - -//PAGE A -#define ODM_REG_CCK_ANTDIV_PARA1_11N 0xA00 -#define ODM_REG_CCK_CCA_11N 0xA0A -#define ODM_REG_CCK_ANTDIV_PARA2_11N 0xA0C -#define ODM_REG_CCK_ANTDIV_PARA3_11N 0xA10 -#define ODM_REG_CCK_ANTDIV_PARA4_11N 0xA14 -#define ODM_REG_CCK_FILTER_PARA1_11N 0xA22 -#define ODM_REG_CCK_FILTER_PARA2_11N 0xA23 -#define ODM_REG_CCK_FILTER_PARA3_11N 0xA24 -#define ODM_REG_CCK_FILTER_PARA4_11N 0xA25 -#define ODM_REG_CCK_FILTER_PARA5_11N 0xA26 -#define ODM_REG_CCK_FILTER_PARA6_11N 0xA27 -#define ODM_REG_CCK_FILTER_PARA7_11N 0xA28 -#define ODM_REG_CCK_FILTER_PARA8_11N 0xA29 -#define ODM_REG_CCK_FA_RST_11N 0xA2C -#define ODM_REG_CCK_FA_MSB_11N 0xA58 -#define ODM_REG_CCK_FA_LSB_11N 0xA5C -#define ODM_REG_CCK_CCA_CNT_11N 0xA60 -#define ODM_REG_BB_PWR_SAV4_11N 0xA74 -//PAGE B -#define ODM_REG_LNA_SWITCH_11N 0xB2C -#define ODM_REG_PATH_SWITCH_11N 0xB30 -#define ODM_REG_RSSI_CTRL_11N 0xB38 -#define ODM_REG_CONFIG_ANTA_11N 0xB68 -#define ODM_REG_RSSI_BT_11N 0xB9C -//PAGE C -#define ODM_REG_OFDM_FA_HOLDC_11N 0xC00 -#define ODM_REG_BB_RX_PATH_11N 0xC04 -#define ODM_REG_TRMUX_11N 0xC08 -#define ODM_REG_OFDM_FA_RSTC_11N 0xC0C -#define ODM_REG_RXIQI_MATRIX_11N 0xC14 -#define ODM_REG_TXIQK_MATRIX_LSB1_11N 0xC4C -#define ODM_REG_IGI_A_11N 0xC50 -#define ODM_REG_ANTDIV_PARA2_11N 0xC54 -#define ODM_REG_IGI_B_11N 0xC58 -#define ODM_REG_ANTDIV_PARA3_11N 0xC5C -#define ODM_REG_L1SBD_PD_CH_11N 0XC6C -#define ODM_REG_BB_PWR_SAV2_11N 0xC70 -#define ODM_REG_RX_OFF_11N 0xC7C -#define ODM_REG_TXIQK_MATRIXA_11N 0xC80 -#define ODM_REG_TXIQK_MATRIXB_11N 0xC88 -#define ODM_REG_TXIQK_MATRIXA_LSB2_11N 0xC94 -#define ODM_REG_TXIQK_MATRIXB_LSB2_11N 0xC9C -#define ODM_REG_RXIQK_MATRIX_LSB_11N 0xCA0 -#define ODM_REG_ANTDIV_PARA1_11N 0xCA4 -#define ODM_REG_OFDM_FA_TYPE1_11N 0xCF0 -//PAGE D -#define ODM_REG_OFDM_FA_RSTD_11N 0xD00 -#define ODM_REG_BB_ATC_11N 0xD2C -#define ODM_REG_OFDM_FA_TYPE2_11N 0xDA0 -#define ODM_REG_OFDM_FA_TYPE3_11N 0xDA4 -#define ODM_REG_OFDM_FA_TYPE4_11N 0xDA8 -#define ODM_REG_RPT_11N 0xDF4 -//PAGE E -#define ODM_REG_TXAGC_A_6_18_11N 0xE00 -#define ODM_REG_TXAGC_A_24_54_11N 0xE04 -#define ODM_REG_TXAGC_A_1_MCS32_11N 0xE08 -#define ODM_REG_TXAGC_A_MCS0_3_11N 0xE10 -#define ODM_REG_TXAGC_A_MCS4_7_11N 0xE14 -#define ODM_REG_TXAGC_A_MCS8_11_11N 0xE18 -#define ODM_REG_TXAGC_A_MCS12_15_11N 0xE1C -#define DOM_REG_EDCCA_DCNF_11N 0xE24 -#define ODM_REG_FPGA0_IQK_11N 0xE28 -#define ODM_REG_TXIQK_TONE_A_11N 0xE30 -#define ODM_REG_RXIQK_TONE_A_11N 0xE34 -#define ODM_REG_TXIQK_PI_A_11N 0xE38 -#define ODM_REG_RXIQK_PI_A_11N 0xE3C -#define ODM_REG_TXIQK_11N 0xE40 -#define ODM_REG_RXIQK_11N 0xE44 -#define ODM_REG_IQK_AGC_PTS_11N 0xE48 -#define ODM_REG_IQK_AGC_RSP_11N 0xE4C -#define ODM_REG_BLUETOOTH_11N 0xE6C -#define ODM_REG_RX_WAIT_CCA_11N 0xE70 -#define ODM_REG_TX_CCK_RFON_11N 0xE74 -#define ODM_REG_TX_CCK_BBON_11N 0xE78 -#define ODM_REG_OFDM_RFON_11N 0xE7C -#define ODM_REG_OFDM_BBON_11N 0xE80 -#define ODM_REG_TX2RX_11N 0xE84 -#define ODM_REG_TX2TX_11N 0xE88 -#define ODM_REG_RX_CCK_11N 0xE8C -#define ODM_REG_RX_OFDM_11N 0xED0 -#define ODM_REG_RX_WAIT_RIFS_11N 0xED4 -#define ODM_REG_RX2RX_11N 0xED8 -#define ODM_REG_STANDBY_11N 0xEDC -#define ODM_REG_SLEEP_11N 0xEE0 -#define ODM_REG_PMPD_ANAEN_11N 0xEEC -#define ODM_REG_IGI_C_11N 0xF84 -#define ODM_REG_IGI_D_11N 0xF88 - -//2 MAC REG LIST -#define ODM_REG_BB_RST_11N 0x02 -#define ODM_REG_ANTSEL_PIN_11N 0x4C -#define ODM_REG_EARLY_MODE_11N 0x4D0 -#define ODM_REG_RSSI_MONITOR_11N 0x4FE -#define ODM_REG_EDCA_VO_11N 0x500 -#define ODM_REG_EDCA_VI_11N 0x504 -#define ODM_REG_EDCA_BE_11N 0x508 -#define ODM_REG_EDCA_BK_11N 0x50C -#define ODM_REG_TXPAUSE_11N 0x522 -#define ODM_REG_RESP_TX_11N 0x6D8 -#define ODM_REG_ANT_TRAIN_PARA1_11N 0x7b0 -#define ODM_REG_ANT_TRAIN_PARA2_11N 0x7b4 - - -//DIG Related -#define ODM_BIT_IGI_11N 0x0000007F -#define ODM_BIT_CCK_RPT_FORMAT_11N BIT9 -#define ODM_BIT_BB_RX_PATH_11N 0xF -#define ODM_BIT_BB_TX_PATH_11N 0xF -#define ODM_BIT_BB_ATC_11N BIT11 - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_debug.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_debug.h deleted file mode 100644 index 366e306..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_debug.h +++ /dev/null @@ -1,900 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - -#ifndef __ODM_DBG_H__ -#define __ODM_DBG_H__ - - -//----------------------------------------------------------------------------- -// Define the debug levels -// -// 1. DBG_TRACE and DBG_LOUD are used for normal cases. -// So that, they can help SW engineer to develope or trace states changed -// and also help HW enginner to trace every operation to and from HW, -// e.g IO, Tx, Rx. -// -// 2. DBG_WARNNING and DBG_SERIOUS are used for unusual or error cases, -// which help us to debug SW or HW. -// -//----------------------------------------------------------------------------- -// -// Never used in a call to ODM_RT_TRACE()! -// -#define ODM_DBG_OFF 1 - -// -// Fatal bug. -// For example, Tx/Rx/IO locked up, OS hangs, memory access violation, -// resource allocation failed, unexpected HW behavior, HW BUG and so on. -// -#define ODM_DBG_SERIOUS 2 - -// -// Abnormal, rare, or unexpeted cases. -// For example, IRP/Packet/OID canceled, device suprisely unremoved and so on. -// -#define ODM_DBG_WARNING 3 - -// -// Normal case with useful information about current SW or HW state. -// For example, Tx/Rx descriptor to fill, Tx/Rx descriptor completed status, -// SW protocol state change, dynamic mechanism state change and so on. -// -#define ODM_DBG_LOUD 4 - -// -// Normal case with detail execution flow or information. -// -#define ODM_DBG_TRACE 5 - -//----------------------------------------------------------------------------- -// Define the tracing components -// -//----------------------------------------------------------------------------- -//BB Functions -#define ODM_COMP_DIG BIT0 -#define ODM_COMP_RA_MASK BIT1 -#define ODM_COMP_DYNAMIC_TXPWR BIT2 -#define ODM_COMP_FA_CNT BIT3 -#define ODM_COMP_RSSI_MONITOR BIT4 -#define ODM_COMP_CCK_PD BIT5 -#define ODM_COMP_ANT_DIV BIT6 -#define ODM_COMP_PWR_SAVE BIT7 -#define ODM_COMP_PWR_TRAIN BIT8 -#define ODM_COMP_RATE_ADAPTIVE BIT9 -#define ODM_COMP_PATH_DIV BIT10 -#define ODM_COMP_PSD BIT11 -#define ODM_COMP_DYNAMIC_PRICCA BIT12 -#define ODM_COMP_RXHP BIT13 -#define ODM_COMP_MP BIT14 -#define ODM_COMP_CFO_TRACKING BIT15 -#define ODM_COMP_ACS BIT16 -#define PHYDM_COMP_ADAPTIVITY BIT17 - -//MAC Functions -#define ODM_COMP_EDCA_TURBO BIT18 -#define ODM_COMP_EARLY_MODE BIT19 -//RF Functions -#define ODM_COMP_TX_PWR_TRACK BIT24 -#define ODM_COMP_RX_GAIN_TRACK BIT25 -#define ODM_COMP_CALIBRATION BIT26 -//Common Functions -#define ODM_COMP_INIT BIT29 -#define ODM_COMP_COMMON BIT30 -#define ODM_COMP_FIX BIT31 - -/*------------------------Export Marco Definition---------------------------*/ -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - #define RT_PRINTK DbgPrint -#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) - #define DbgPrint printk - #define RT_PRINTK(fmt, args...) DbgPrint( "%s(): " fmt, __FUNCTION__, ## args); - #define RT_DISP(dbgtype, dbgflag, printstr) -#elif (DM_ODM_SUPPORT_TYPE == ODM_IOT) - #define DbgPrint printf - #define RT_PRINTK(fmt, args...) DbgPrint( "%s(): " fmt, __FUNCTION__, ## args); - #define RT_DISP(dbgtype, dbgflag, printstr) -#else - #define DbgPrint panic_printk - #define RT_PRINTK(fmt, args...) DbgPrint( "%s(): " fmt, __FUNCTION__, ## args); -#endif - -#ifndef ASSERT - #define ASSERT(expr) -#endif - -#if DBG -#define ODM_RT_TRACE(pDM_Odm, comp, level, fmt) \ - if(((comp) & ROMInfo.DebugComponents) && (level <= ROMInfo.DebugLevel || level == ODM_DBG_SERIOUS)) \ - { \ - RT_PRINTK fmt; \ - } - -#define ODM_RT_TRACE_F(pDM_Odm, comp, level, fmt) \ - if(((comp) & ROMInfo.DebugComponents) && (level <= ROMInfo.DebugLevel)) \ - { \ - RT_PRINTK fmt; \ - } - -#define ODM_RT_ASSERT(pDM_Odm, expr, fmt) \ - if(!(expr)) { \ - DbgPrint( "Assertion failed! %s at ......\n", #expr); \ - DbgPrint( " ......%s,%s,line=%d\n",__FILE__,__FUNCTION__,__LINE__); \ - RT_PRINTK fmt; \ - ASSERT(FALSE); \ - } -#define ODM_dbg_enter() { DbgPrint("==> %s\n", __FUNCTION__); } -#define ODM_dbg_exit() { DbgPrint("<== %s\n", __FUNCTION__); } -#define ODM_dbg_trace(str) { DbgPrint("%s:%s\n", __FUNCTION__, str); } - -#define ODM_PRINT_ADDR(pDM_Odm, comp, level, title_str, ptr) \ - if(((comp) & ROMInfo.DebugComponents) && (level <= ROMInfo.DebugLevel)) \ - { \ - int __i; \ - pu1Byte __ptr = (pu1Byte)ptr; \ - DbgPrint("[ODM] "); \ - DbgPrint(title_str); \ - DbgPrint(" "); \ - for( __i=0; __i<6; __i++ ) \ - DbgPrint("%02X%s", __ptr[__i], (__i==5)?"":"-"); \ - DbgPrint("\n"); \ - } -#else -#define ODM_RT_TRACE(pDM_Odm, comp, level, fmt) -#define ODM_RT_TRACE_F(pDM_Odm, comp, level, fmt) -#define ODM_RT_ASSERT(pDM_Odm, expr, fmt) -#define ODM_dbg_enter() -#define ODM_dbg_exit() -#define ODM_dbg_trace(str) -#define ODM_PRINT_ADDR(pDM_Odm, comp, level, title_str, ptr) -#endif - - -VOID -ODM_InitDebugSetting( - IN PDM_ODM_T pDM_Odm - ); - - - -#if 0 -#if DBG -#define DbgPrint printk - -#define PRINT_DATA(_TitleString, _HexData, _HexDataLen) \ - { \ - char *szTitle = _TitleString; \ - pu1Byte pbtHexData = _HexData; \ - u4Byte u4bHexDataLen = _HexDataLen; \ - u4Byte __i; \ - DbgPrint("%s", szTitle); \ - for (__i=0;__i=' ' &&_ch<='~' ) // I want to see ASCII 33 to 126 only. Otherwise, I print '?'. Annie, 2005-11-22. - -#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len) \ - if(((_Comp) & ODM_GlobalDebugComponents) && (_Level <= ODM_GlobalDebugLevel)) \ - { \ - int __i; \ - u1Byte buffer[MAX_STR_LEN]; \ - int length = (_Len\n", _Len, buffer); \ - } - -#else // of #if DBG -#define DbgPrint(...) -#define PRINT_DATA(_TitleString, _HexData, _HexDataLen) -#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen) -#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr) -#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum) -#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len) -#endif // of #if DBG - -#endif - - -#if 0 -/* Define debug print header for every service module.*/ -typedef struct tag_ODM_DBGP_Service_Module_Header_Name_Structure -{ - const char *pMANS; - const char *pRTOS; - const char *pALM; - const char *pPEM; - const char *pCMPK; - const char *pRAPD; - const char *pTXPB; - const char *pQUMG; -}ODM_DBGP_HEAD_T; - - -/* Define different debug flag for dedicated service modules in debug flag array. */ -// Each module has independt 32 bit debug flag you cnn define the flag as yout require. -typedef enum tag_ODM_DBGP_Flag_Type_Definition -{ - ODM_FTX = 0, - ODM_FRX , - ODM_FPHY , - ODM_FPWR , - ODM_FDM , - ODM_FC2H , - ODM_FBT , - ODM_DBGP_TYPE_MAX -}ODM_DBGP_FLAG_E; - - -// Define TX relative debug bit --> FTX -#define ODM_TX_DESC BIT0 -#define ODM_TX_DESC_TID BIT1 -#define ODM_TX_PATH BIT2 - -// Define RX relative debug bit --> FRX -#define ODM_RX_DATA BIT0 -#define ODM_RX_PHY_STS BIT1 -#define ODM_RX_PHY_SS BIT2 -#define ODM_RX_PHY_SQ BIT3 -#define ODM_RX_PHY_ASTS BIT4 -#define ODM_RX_ERR_LEN BIT5 -#define ODM_RX_DEFRAG BIT6 -#define ODM_RX_ERR_RATE BIT7 -#define ODM_RX_PATH BIT8 -#define ODM_RX_BEACON BIT9 - -// Define PHY-BB/RF/MAC check module bit --> FPHY -#define ODM_PHY_BBR BIT0 -#define ODM_PHY_BBW BIT1 -#define ODM_PHY_RFR BIT2 -#define ODM_PHY_RFW BIT3 -#define ODM_PHY_MACR BIT4 -#define ODM_PHY_MACW BIT5 -#define ODM_PHY_ALLR BIT6 -#define ODM_PHY_ALLW BIT7 -#define ODM_PHY_TXPWR BIT8 -#define ODM_PHY_PWRDIFF BIT9 -#define ODM_PHY_SICR BIT10 -#define ODM_PHY_SICW BIT11 - - - - -extern u4Byte ODM_GlobalDebugLevel; - - -#if DBG -extern u8Byte ODM_GlobalDebugComponents; -#endif -#endif -#if 0 - -//----------------------------------------------------------------------------- -// Define the debug levels -// -// 1. DBG_TRACE and DBG_LOUD are used for normal cases. -// So that, they can help SW engineer to develope or trace states changed -// and also help HW enginner to trace every operation to and from HW, -// e.g IO, Tx, Rx. -// -// 2. DBG_WARNNING and DBG_SERIOUS are used for unusual or error cases, -// which help us to debug SW or HW. -// -//----------------------------------------------------------------------------- -// -// Never used in a call to ODM_RT_TRACE(pDM_Odm,)! -// -#define DBG_OFF 0 - -// -// Deprecated! Don't use it! -// TODO: fix related debug message! -// -//#define DBG_SEC 1 - -// -// Fatal bug. -// For example, Tx/Rx/IO locked up, OS hangs, memory access violation, -// resource allocation failed, unexpected HW behavior, HW BUG and so on. -// -#define DBG_SERIOUS 2 - -// -// Abnormal, rare, or unexpeted cases. -// For example, IRP/Packet/OID canceled, device suprisely unremoved and so on. -// -#define DBG_WARNING 3 - -// -// Normal case with useful information about current SW or HW state. -// For example, Tx/Rx descriptor to fill, Tx/Rx descriptor completed status, -// SW protocol state change, dynamic mechanism state change and so on. -// -#define DBG_LOUD 4 - -// -// Normal case with detail execution flow or information. -// -#define DBG_TRACE 5 - - - -//----------------------------------------------------------------------------- -// Define the tracing components -// -//----------------------------------------------------------------------------- -#define COMP_TRACE BIT0 // For function call tracing. -#define COMP_DBG BIT1 // Only for temporary debug message. -#define COMP_INIT BIT2 // during driver initialization / halt / reset. -#define COMP_OID_QUERY BIT3 // Query OID. -#define COMP_OID_SET BIT4 // Set OID. -#define COMP_RECV BIT5 // Reveive part data path. -#define COMP_SEND BIT6 // Send part path. -#define COMP_IO BIT7 // I/O Related. Added by Annie, 2006-03-02. -#define COMP_POWER BIT8 // 802.11 Power Save mode or System/Device Power state related. -#define COMP_MLME BIT9 // 802.11 link related: join/start BSS, leave BSS. -#define COMP_SCAN BIT10 // For site survey. -#define COMP_SYSTEM BIT11 // For general platform function. -#define COMP_SEC BIT12 // For Security. -#define COMP_AP BIT13 // For AP mode related. -#define COMP_TURBO BIT14 // For Turbo Mode related. By Annie, 2005-10-21. -#define COMP_QOS BIT15 // For QoS. -#define COMP_AUTHENTICATOR BIT16 // For AP mode Authenticator. Added by Annie, 2006-01-30. -#define COMP_BEACON BIT17 // For Beacon related, by rcnjko. -#define COMP_ANTENNA BIT18 // For Antenna diversity related, by rcnjko. -#define COMP_RATE BIT19 // For Rate Adaptive mechanism, 2006.07.02, by rcnjko. #define COMP_EVENTS 0x00000080 // Event handling -#define COMP_EVENTS BIT20 // Event handling -#define COMP_FPGA BIT21 // For FPGA verfication -#define COMP_RM BIT22 // For Radio Measurement. -#define COMP_MP BIT23 // For mass production test, by shien chang, 2006.07.13 -#define COMP_RXDESC BIT24 // Show Rx desc information for SD3 debug. Added by Annie, 2006-07-15. -#define COMP_CKIP BIT25 // For CCX 1 S13: CKIP. Added by Annie, 2006-08-14. -#define COMP_DIG BIT26 // For DIG, 2006.09.25, by rcnjko. -#define COMP_TXAGC BIT27 // For Tx power, 060928, by rcnjko. -#define COMP_HIPWR BIT28 // For High Power Mechanism, 060928, by rcnjko. -#define COMP_HALDM BIT29 // For HW Dynamic Mechanism, 061010, by rcnjko. -#define COMP_RSNA BIT30 // For RSNA IBSS , 061201, by CCW. -#define COMP_INDIC BIT31 // For link indication -#define COMP_LED BIT32 // For LED. -#define COMP_RF BIT33 // For RF. -//1!!!!!!!!!!!!!!!!!!!!!!!!!!! -//1//1Attention Please!!!<11n or 8190 specific code should be put below this line> -//1!!!!!!!!!!!!!!!!!!!!!!!!!!! - -#define COMP_HT BIT34 // For 802.11n HT related information. by Emily 2006-8-11 -#define COMP_POWER_TRACKING BIT35 //FOR 8190 TX POWER TRACKING -#define COMP_RX_REORDER BIT36 // 8190 Rx Reorder -#define COMP_AMSDU BIT37 // For A-MSDU Debugging -#define COMP_WPS BIT38 //WPS Debug Message -#define COMP_RATR BIT39 -#define COMP_RESET BIT40 -// For debug command to print on dbgview!! -#define COMP_CMD BIT41 -#define COMP_EFUSE BIT42 -#define COMP_MESH_INTERWORKING BIT43 -#define COMP_CCX BIT44 //CCX Debug Flag -#define COMP_IOCTL BIT45 // IO Control -#define COMP_GP BIT46 // For generic parser. -#define COMP_TXAGG BIT47 -#define COMP_HVL BIT48 // For Ndis 6.2 Context Swirch and Hardware Virtualiztion Layer -#define COMP_TEST BIT49 -#define COMP_BB_POWERSAVING BIT50 -#define COMP_SWAS BIT51 // For SW Antenna Switch -#define COMP_P2P BIT52 -#define COMP_MUX BIT53 -#define COMP_FUNC BIT54 -#define COMP_TDLS BIT55 -#define COMP_OMNIPEEK BIT56 -#define COMP_DUALMACSWITCH BIT60 // 2010/12/27 Add for Dual mac mode debug -#define COMP_EASY_CONCURRENT BIT61 // 2010/12/27 Add for easy cncurrent mode debug -#define COMP_PSD BIT63 //2011/3/9 Add for WLAN PSD for BT AFH - -#define COMP_DFS BIT62 - -#define COMP_ALL UINT64_C(0xFFFFFFFFFFFFFFFF) // All components -// For debug print flag to use -/*------------------------------Define structure----------------------------*/ -/* 2007/07/13 MH *//*------For DeBuG Print modeue------*/ - -/* Defnie structure to store different debug flag variable. Every debug flag - is a UINT32 integer and you can assign 32 different events. */ -typedef struct tag_DBGP_Debug_Flag_Structure -{ - u4Byte Mans; /* Main Scheduler module. */ - u4Byte Rtos; /* RTOS module. */ - u4Byte Alarm; /* Alarm module. */ - u4Byte Pm; /* Performance monitor module. */ -}DBGP_FLAG_T; - -/* Define debug print header for every service module.*/ -typedef struct tag_DBGP_Service_Module_Header_Name_Structure -{ - const char *pMANS; - const char *pRTOS; - const char *pALM; - const char *pPEM; - const char *pCMPK; - const char *pRAPD; - const char *pTXPB; - const char *pQUMG; -}DBGP_HEAD_T; - - -/* Define different debug flag for dedicated service modules in debug flag array. */ -// Each module has independt 32 bit debug flag you cnn define the flag as yout require. -typedef enum tag_DBGP_Flag_Type_Definition -{ - FQoS = 0, - FTX = 1, - FRX = 2, - FSEC = 3, - FMGNT = 4, - FMLME = 5, - FRESOURCE = 6, - FBEACON = 7, - FISR = 8, - FPHY = 9, - FMP = 10, - FEEPROM = 11, - FPWR = 12, - FDM = 13, - FDBG_CTRL = 14, - FC2H = 15, - FBT = 16, - FINIT = 17, - FIOCTL = 18, - FSHORT_CUT = 19, - DBGP_TYPE_MAX -}DBGP_FLAG_E; - - -// Define Qos Relative debug flag bit --> FQoS -#define QoS_INIT BIT0 -#define QoS_VISTA BIT1 - -// Define TX relative debug bit --> FTX -#define TX_DESC BIT0 -#define TX_DESC_TID BIT1 -#define TX_PATH BIT2 - -// Define RX relative debug bit --> FRX -#define RX_DATA BIT0 -#define RX_PHY_STS BIT1 -#define RX_PHY_SS BIT2 -#define RX_PHY_SQ BIT3 -#define RX_PHY_ASTS BIT4 -#define RX_ERR_LEN BIT5 -#define RX_DEFRAG BIT6 -#define RX_ERR_RATE BIT7 -#define RX_PATH BIT8 -#define RX_BEACON BIT9 - -// Define Security relative debug bit --> FSEC - -// Define MGNT relative debug bit --> FMGNT - -// Define MLME relative debug bit --> FMLME -#define MEDIA_STS BIT0 -#define LINK_STS BIT1 - -// Define OS resource check module bit --> FRESOURCE -#define OS_CHK BIT0 - -// Define beacon content check module bit --> FBEACON -#define BCN_SHOW BIT0 -#define BCN_PEER BIT1 - -// Define ISR/IMR check module bit --> FISR -#define ISR_CHK BIT0 - -// Define PHY-BB/RF/MAC check module bit --> FPHY -#define PHY_BBR BIT0 -#define PHY_BBW BIT1 -#define PHY_RFR BIT2 -#define PHY_RFW BIT3 -#define PHY_MACR BIT4 -#define PHY_MACW BIT5 -#define PHY_ALLR BIT6 -#define PHY_ALLW BIT7 -#define PHY_TXPWR BIT8 -#define PHY_PWRDIFF BIT9 -#define PHY_SICR BIT10 -#define PHY_SICW BIT11 - -// Define MPT driver check module bit --> FMP -#define MP_RX BIT0 -#define MP_SWICH_CH BIT1 - -// Define EEPROM and EFUSE check module bit --> FEEPROM -#define EEPROM_W BIT0 -#define EFUSE_PG BIT1 -#define EFUSE_READ_ALL BIT2 -#define EFUSE_ANALYSIS BIT3 -#define EFUSE_PG_DETAIL BIT4 - -// Define power save check module bit --> FPWR -#define LPS BIT0 -#define IPS BIT1 -#define PWRSW BIT2 -#define PWRHW BIT3 -#define PWRHAL BIT4 - -// Define Dynamic Mechanism check module bit --> FDM -#define WA_IOT BIT0 -#define DM_PWDB BIT1 -#define DM_Monitor BIT2 -#define DM_DIG BIT3 -#define DM_EDCA_Turbo BIT4 -#define DM_BT30 BIT5 - -// Define Dbg Control module bit --> FDBG_CTRL -#define DBG_CTRL_TRACE BIT0 -#define DBG_CTRL_INBAND_NOISE BIT1 - -// Define FW C2H Cmd check module bit --> FC2H -#define C2H_Summary BIT0 -#define C2H_PacketData BIT1 -#define C2H_ContentData BIT2 -// Define BT Cmd check module bit --> FBT -#define BT_TRACE BIT0 -#define BT_RFPoll BIT1 - -// Define init check for module bit --> FINIT -#define INIT_EEPROM BIT0 -#define INIT_TxPower BIT1 -#define INIT_IQK BIT2 -#define INIT_RF BIT3 - -// Define IOCTL Cmd check module bit --> FIOCTL -// section 1 : IRP related -#define IOCTL_IRP BIT0 -#define IOCTL_IRP_DETAIL BIT1 -#define IOCTL_IRP_STATISTICS BIT2 -#define IOCTL_IRP_HANDLE BIT3 -// section 2 : HCI command/event -#define IOCTL_BT_HCICMD BIT8 -#define IOCTL_BT_HCICMD_DETAIL BIT9 -#define IOCTL_BT_HCICMD_EXT BIT10 -#define IOCTL_BT_EVENT BIT11 -#define IOCTL_BT_EVENT_DETAIL BIT12 -#define IOCTL_BT_EVENT_PERIODICAL BIT13 -// section 3 : BT tx/rx data and throughput -#define IOCTL_BT_TX_ACLDATA BIT16 -#define IOCTL_BT_TX_ACLDATA_DETAIL BIT17 -#define IOCTL_BT_RX_ACLDATA BIT18 -#define IOCTL_BT_RX_ACLDATA_DETAIL BIT19 -#define IOCTL_BT_TP BIT20 -// section 4 : BT connection state machine. -#define IOCTL_STATE BIT21 -#define IOCTL_BT_LOGO BIT22 -// section 5 : BT function trace -#define IOCTL_CALLBACK_FUN BIT24 -#define IOCTL_PARSE_BT_PKT BIT25 -#define IOCTL_BT_TX_PKT BIT26 -#define IOCTL_BT_FLAG_MON BIT27 - -// -// Define init check for module bit --> FSHORT_CUT -// 2011/07/20 MH Add for short but definition. -// -#define SHCUT_TX BIT0 -#define SHCUT_RX BIT1 - - -/* 2007/07/13 MH *//*------For DeBuG Print modeue------*/ -/*------------------------------Define structure----------------------------*/ - - -/*------------------------Export Marco Definition---------------------------*/ -#if (DM_ODM_SUPPORT_TYPE != ODM_WIN) -#define RT_PRINTK(fmt, args...) printk( "%s(): " fmt, __FUNCTION__, ## args); - -#if DBG -#define ODM_RT_TRACE(pDM_Odm,comp, level, fmt) \ - if(((comp) & GlobalDebugComponents) && (level <= GlobalDebugLevel)) \ - { \ - RT_PRINTK fmt; \ - } - -#define RT_TRACE_F(comp, level, fmt) \ - if(((comp) & GlobalDebugComponents) && (level <= GlobalDebugLevel)) \ - { \ - RT_PRINTK fmt; \ - } - -#define RT_ASSERT(expr,fmt) \ - if(!(expr)) { \ - printk( "Assertion failed! %s at ......\n", #expr); \ - printk( " ......%s,%s,line=%d\n",__FILE__,__FUNCTION__,__LINE__); \ - } -#define dbg_enter() { printk("==> %s\n", __FUNCTION__); } -#define dbg_exit() { printk("<== %s\n", __FUNCTION__); } -#define dbg_trace(str) { printk("%s:%s\n", __FUNCTION__, str); } -#else -#define ODM_RT_TRACE(pDM_Odm,comp, level, fmt) -#define RT_TRACE_F(comp, level, fmt) -#define RT_ASSERT(expr, fmt) -#define dbg_enter() -#define dbg_exit() -#define dbg_trace(str) -#endif - -#if DBG -#define DbgPrint printk - -#define PRINT_DATA(_TitleString, _HexData, _HexDataLen) \ - { \ - char *szTitle = _TitleString; \ - pu1Byte pbtHexData = _HexData; \ - u4Byte u4bHexDataLen = _HexDataLen; \ - u4Byte __i; \ - DbgPrint("%s", szTitle); \ - for (__i=0;__i=' ' &&_ch<='~' ) // I want to see ASCII 33 to 126 only. Otherwise, I print '?'. Annie, 2005-11-22. - -#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len) \ - if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) \ - { \ - int __i; \ - u1Byte buffer[MAX_STR_LEN]; \ - int length = (_Len\n", _Len, buffer); \ - } - -#else // of #if DBG -#define DbgPrint(...) -#define PRINT_DATA(_TitleString, _HexData, _HexDataLen) -#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen) -#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr) -#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum) -#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len) -#endif // of #if DBG - - - -#endif // #if (DM_ODM_SUPPORT_TYPE != ODM_WIN) - -#define DEBUG_PRINT 1 - -// Please add new OS's print API by yourself - -//#if (RT_PLATFORM==PLATFORM_WINDOWS) -#if (DEBUG_PRINT == 1) && DBG -#define RT_DISP(dbgtype, dbgflag, printstr)\ -{\ - if (DBGP_Type[dbgtype] & dbgflag)\ - {\ - DbgPrint printstr;\ - }\ -} - -#define RT_DISP_ADDR(dbgtype, dbgflag, printstr, _Ptr)\ -{\ - if (DBGP_Type[dbgtype] & dbgflag)\ - {\ - int __i; \ - pu1Byte ptr = (pu1Byte)_Ptr; \ - DbgPrint printstr; \ - DbgPrint(" "); \ - for( __i=0; __i<6; __i++ ) \ - DbgPrint("%02X%s", ptr[__i], (__i==5)?"":"-"); \ - DbgPrint("\n"); \ - }\ -} - -#define RT_DISP_DATA(dbgtype, dbgflag, _TitleString, _HexData, _HexDataLen)\ -{\ - if (DBGP_Type[dbgtype] & dbgflag)\ - {\ - int __i; \ - pu1Byte ptr = (pu1Byte)_HexData; \ - DbgPrint(_TitleString); \ - for( __i=0; __i<(int)_HexDataLen; __i++ ) \ - { \ - DbgPrint("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?" ":" ");\ - if (((__i + 1) % 16) == 0) DbgPrint("\n");\ - } \ - DbgPrint("\n"); \ - }\ -} - -#define FunctionIn(_comp) ODM_RT_TRACE(pDM_Odm,(_comp), DBG_LOUD, ("==========> %s\n", __FUNCTION__)) -#define FunctionOut(_comp) ODM_RT_TRACE(pDM_Odm,(_comp), DBG_LOUD, ("<========== %s\n", __FUNCTION__)) - - -#else - -#define RT_DISP(dbgtype, dbgflag, printstr) -#define RT_DISP_ADDR(dbgtype, dbgflag, printstr, _Ptr) -#define RT_DISP_DATA(dbgtype, dbgflag, _TitleString, _HexData, _HexDataLen) - -#define FunctionIn(_comp) -#define FunctionOut(_comp) -#endif -/*------------------------Export Marco Definition---------------------------*/ - - -/*------------------------Export global variable----------------------------*/ -extern u4Byte DBGP_Type[DBGP_TYPE_MAX]; -extern DBGP_HEAD_T DBGP_Head; - -/*------------------------Export global variable----------------------------*/ - - -/*--------------------------Exported Function prototype---------------------*/ -extern void DBGP_Flag_Init(void); -extern void DBG_PrintAllFlag(void); -extern void DBG_PrintAllComp(void); -extern void DBG_PrintFlagEvent(u1Byte DbgFlag); -extern void DBG_DumpMem(const u1Byte DbgComp, - const u1Byte DbgLevel, - pu1Byte pMem, - u2Byte Len); - -/*--------------------------Exported Function prototype---------------------*/ - - - - - - - - - -extern u4Byte GlobalDebugLevel; -extern u8Byte GlobalDebugComponents; - - -#endif - - -#endif // __ODM_DBG_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_interface.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_interface.h deleted file mode 100644 index d5732ba..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_interface.h +++ /dev/null @@ -1,413 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - -#ifndef __ODM_INTERFACE_H__ -#define __ODM_INTERFACE_H__ - - - -// -// =========== Constant/Structure/Enum/... Define -// - - - -// -// =========== Macro Define -// - -#define _reg_all(_name) ODM_##_name -#define _reg_ic(_name, _ic) ODM_##_name##_ic -#define _bit_all(_name) BIT_##_name -#define _bit_ic(_name, _ic) BIT_##_name##_ic - -// _cat: implemented by Token-Pasting Operator. -#if 0 -#define _cat(_name, _ic_type, _func) \ - ( \ - _func##_all(_name) \ - ) -#endif - -/*=================================== - -#define ODM_REG_DIG_11N 0xC50 -#define ODM_REG_DIG_11AC 0xDDD - -ODM_REG(DIG,_pDM_Odm) -=====================================*/ - -#define _reg_11N(_name) ODM_REG_##_name##_11N -#define _reg_11AC(_name) ODM_REG_##_name##_11AC -#define _bit_11N(_name) ODM_BIT_##_name##_11N -#define _bit_11AC(_name) ODM_BIT_##_name##_11AC - -#ifdef __ECOS -#define _rtk_cat(_name, _ic_type, _func) \ - ( \ - ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name): \ - _func##_11AC(_name) \ - ) -#else - -#define _cat(_name, _ic_type, _func) \ - ( \ - ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name): \ - _func##_11AC(_name) \ - ) -#endif -/* -// only sample code -//#define _cat(_name, _ic_type, _func) \ -// ( \ -// ((_ic_type) & ODM_RTL8192C)? _func##_ic(_name, _8192C): \ -// ((_ic_type) & ODM_RTL8192D)? _func##_ic(_name, _8192D): \ -// ((_ic_type) & ODM_RTL8192S)? _func##_ic(_name, _8192S): \ -// ((_ic_type) & ODM_RTL8723A)? _func##_ic(_name, _8723A): \ -// ((_ic_type) & ODM_RTL8188E)? _func##_ic(_name, _8188E): \ -// _func##_ic(_name, _8195) \ -// ) -*/ - -// _name: name of register or bit. -// Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)" -// gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType. -#ifdef __ECOS -#define ODM_REG(_name, _pDM_Odm) _rtk_cat(_name, _pDM_Odm->SupportICType, _reg) -#define ODM_BIT(_name, _pDM_Odm) _rtk_cat(_name, _pDM_Odm->SupportICType, _bit) -#else -#define ODM_REG(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _reg) -#define ODM_BIT(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _bit) -#endif -typedef enum _ODM_H2C_CMD -{ - /*ODM_H2C_RSSI_REPORT = 0, - ODM_H2C_PSD_RESULT=1, - ODM_H2C_PathDiv = 2, - ODM_H2C_WIFI_CALIBRATION = 3, - ODM_H2C_IQ_CALIBRATION = 4, - ODM_H2C_RA_PARA_ADJUST=5, - ODM_MAX_H2CCMD*/ - PHYDM_H2C_TXBF = 0x41, - ODM_H2C_RSSI_REPORT = 0x42, - ODM_H2C_IQ_CALIBRATION = 0x45, - ODM_H2C_RA_PARA_ADJUST = 0x47, - PHYDM_H2C_DYNAMIC_TX_PATH = 0x48, - PHYDM_H2C_FW_TRACE_EN = 0x49, - ODM_H2C_WIFI_CALIBRATION = 0x6d, - PHYDM_H2C_MU = 0x4a, - ODM_MAX_H2CCMD -}ODM_H2C_CMD; - - -// -// 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem. -// Suggest HW team to use thread instead of workitem. Windows also support the feature. -// -#if (DM_ODM_SUPPORT_TYPE != ODM_WIN) -typedef void *PRT_WORK_ITEM ; -typedef void RT_WORKITEM_HANDLE,*PRT_WORKITEM_HANDLE; -typedef VOID (*RT_WORKITEM_CALL_BACK)(PVOID pContext); - -#if 0 -typedef struct tasklet_struct RT_WORKITEM_HANDLE, *PRT_WORKITEM_HANDLE; - -typedef struct _RT_WORK_ITEM -{ - - RT_WORKITEM_HANDLE Handle; // Platform-dependent handle for this workitem, e.g. Ndis Workitem object. - PVOID Adapter; // Pointer to Adapter object. - PVOID pContext; // Parameter to passed to CallBackFunc(). - RT_WORKITEM_CALL_BACK CallbackFunc; // Callback function of the workitem. - u1Byte RefCount; // 0: driver is going to unload, 1: No such workitem scheduled, 2: one workitem is schedueled. - PVOID pPlatformExt; // Pointer to platform-dependent extension. - BOOLEAN bFree; - char szID[36]; // An identity string of this workitem. -}RT_WORK_ITEM, *PRT_WORK_ITEM; - -#endif - - -#endif - -// -// =========== Extern Variable ??? It should be forbidden. -// - - -// -// =========== EXtern Function Prototype -// - - -u1Byte -ODM_Read1Byte( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr - ); - -u2Byte -ODM_Read2Byte( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr - ); - -u4Byte -ODM_Read4Byte( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr - ); - -VOID -ODM_Write1Byte( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr, - IN u1Byte Data - ); - -VOID -ODM_Write2Byte( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr, - IN u2Byte Data - ); - -VOID -ODM_Write4Byte( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr, - IN u4Byte Data - ); - -VOID -ODM_SetMACReg( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data - ); - -u4Byte -ODM_GetMACReg( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr, - IN u4Byte BitMask - ); - -VOID -ODM_SetBBReg( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data - ); - -u4Byte -ODM_GetBBReg( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr, - IN u4Byte BitMask - ); - -VOID -ODM_SetRFReg( - IN PDM_ODM_T pDM_Odm, - IN ODM_RF_RADIO_PATH_E eRFPath, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data - ); - -u4Byte -ODM_GetRFReg( - IN PDM_ODM_T pDM_Odm, - IN ODM_RF_RADIO_PATH_E eRFPath, - IN u4Byte RegAddr, - IN u4Byte BitMask - ); - - -// -// Memory Relative Function. -// -VOID -ODM_AllocateMemory( - IN PDM_ODM_T pDM_Odm, - OUT PVOID *pPtr, - IN u4Byte length - ); -VOID -ODM_FreeMemory( - IN PDM_ODM_T pDM_Odm, - OUT PVOID pPtr, - IN u4Byte length - ); - -VOID -ODM_MoveMemory( - IN PDM_ODM_T pDM_Odm, - OUT PVOID pDest, - IN PVOID pSrc, - IN u4Byte Length - ); - -s4Byte ODM_CompareMemory( - IN PDM_ODM_T pDM_Odm, - IN PVOID pBuf1, - IN PVOID pBuf2, - IN u4Byte length - ); - -void ODM_Memory_Set - (IN PDM_ODM_T pDM_Odm, - IN PVOID pbuf, - IN s1Byte value, - IN u4Byte length); - -// -// ODM MISC-spin lock relative API. -// -#if( DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL|ODM_CE)) -VOID -ODM_AcquireSpinLock( - IN PDM_ODM_T pDM_Odm, - IN RT_SPINLOCK_TYPE type - ); - -VOID -ODM_ReleaseSpinLock( - IN PDM_ODM_T pDM_Odm, - IN RT_SPINLOCK_TYPE type - ); -#endif - -// -// ODM MISC-workitem relative API. -// -VOID -ODM_InitializeWorkItem( - IN PDM_ODM_T pDM_Odm, - IN PRT_WORK_ITEM pRtWorkItem, - IN RT_WORKITEM_CALL_BACK RtWorkItemCallback, - IN PVOID pContext, - IN const char* szID - ); - -VOID -ODM_StartWorkItem( - IN PRT_WORK_ITEM pRtWorkItem - ); - -VOID -ODM_StopWorkItem( - IN PRT_WORK_ITEM pRtWorkItem - ); - -VOID -ODM_FreeWorkItem( - IN PRT_WORK_ITEM pRtWorkItem - ); - -VOID -ODM_ScheduleWorkItem( - IN PRT_WORK_ITEM pRtWorkItem - ); - -VOID -ODM_IsWorkItemScheduled( - IN PRT_WORK_ITEM pRtWorkItem - ); - -// -// ODM Timer relative API. -// -VOID -ODM_StallExecution( - IN u4Byte usDelay - ); - -VOID -ODM_delay_ms(IN u4Byte ms); - - - -VOID -ODM_delay_us(IN u4Byte us); - -VOID -ODM_sleep_ms(IN u4Byte ms); - -VOID -ODM_sleep_us(IN u4Byte us); - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE|ODM_AP|ODM_ADSL)) -VOID -ODM_SetTimer( - IN PDM_ODM_T pDM_Odm, - IN PRT_TIMER pTimer, - IN u4Byte msDelay - ); - -VOID -ODM_InitializeTimer( - IN PDM_ODM_T pDM_Odm, - IN PRT_TIMER pTimer, - IN RT_TIMER_CALL_BACK CallBackFunc, - IN PVOID pContext, - IN const char* szID - ); - -VOID -ODM_CancelTimer( - IN PDM_ODM_T pDM_Odm, - IN PRT_TIMER pTimer - ); - -VOID -ODM_ReleaseTimer( - IN PDM_ODM_T pDM_Odm, - IN PRT_TIMER pTimer - ); -#endif - -// -// ODM FW relative API. -// -VOID -ODM_FillH2CCmd( - IN PDM_ODM_T pDM_Odm, - IN u1Byte ElementID, - IN u4Byte CmdLen, - IN pu1Byte pCmdBuffer -); - -u8Byte -ODM_GetCurrentTime( - IN PDM_ODM_T pDM_Odm - ); -u8Byte -ODM_GetProgressingTime( - IN PDM_ODM_T pDM_Odm, - IN u8Byte Start_Time - ); - -#endif // __ODM_INTERFACE_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_precomp.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_precomp.h deleted file mode 100644 index 84e0bf4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_precomp.h +++ /dev/null @@ -1,349 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __ODM_PRECOMP_H__ -#define __ODM_PRECOMP_H__ - -#include "phydm_types.h" - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -#include "Precomp.h" // We need to include mp_precomp.h due to batch file setting. - -#else - -#define TEST_FALG___ 1 - -#endif - -//2 Config Flags and Structs - defined by each ODM Type - -#if (DM_ODM_SUPPORT_TYPE == ODM_AP) - #include "../8192cd_cfg.h" - #include "../odm_inc.h" - - #include "../8192cd.h" - #include "../8192cd_util.h" - #ifdef _BIG_ENDIAN_ - #define ODM_ENDIAN_TYPE ODM_ENDIAN_BIG - #else - #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE - #endif - - #ifdef AP_BUILD_WORKAROUND - #include "../8192cd_headers.h" - #include "../8192cd_debug.h" - #endif - -#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL) - // Flags - #include "../8192cd_cfg.h" // OUTSRC needs ADSL config flags. - #include "../odm_inc.h" // OUTSRC needs some extra flags. - // Data Structure - #include "../common_types.h" // OUTSRC and rtl8192cd both needs basic type such as UINT8 and BIT0. - #include "../8192cd.h" // OUTSRC needs basic ADSL struct definition. - #include "../8192cd_util.h" // OUTSRC needs basic I/O function. - #ifdef _BIG_ENDIAN_ - #define ODM_ENDIAN_TYPE ODM_ENDIAN_BIG - #else - #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE - #endif - - #ifdef ADSL_AP_BUILD_WORKAROUND - // NESTED_INC: Functions defined outside should not be included!! Marked by Annie, 2011-10-14. - #include "../8192cd_headers.h" - #include "../8192cd_debug.h" - #endif - -#elif (DM_ODM_SUPPORT_TYPE ==ODM_CE) -#define BEAMFORMING_SUPPORT 0 -#elif (DM_ODM_SUPPORT_TYPE ==ODM_IOT) -#define BEAMFORMING_SUPPORT 0 -#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN) - #include "mp_precomp.h" - #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE -#endif - - -//2 Hardware Parameter Files - - -#if (DM_ODM_SUPPORT_TYPE == ODM_AP) -#if (RTL8192C_SUPPORT==1) - #include "rtl8192c/Hal8192CEFWImg_AP.h" - #include "rtl8192c/Hal8192CEPHYImg_AP.h" - #include "rtl8192c/Hal8192CEMACImg_AP.h" -#endif -#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL) - #include "rtl8192c/Hal8192CEFWImg_ADSL.h" - #include "rtl8192c/Hal8192CEPHYImg_ADSL.h" - #include "rtl8192c/Hal8192CEMACImg_ADSL.h" - -#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) - #if(RTL8192CE_SUPPORT ==1) - #include "rtl8192c/Hal8192CEFWImg_CE.h" - #include "rtl8192c/Hal8192CEPHYImg_CE.h" - #include "rtl8192c/Hal8192CEMACImg_CE.h" - #endif - - #if(RTL8192CU_SUPPORT ==1) - #include "rtl8192c/Hal8192CUFWImg_CE.h" - #include "rtl8192c/Hal8192CUPHYImg_CE.h" - #include "rtl8192c/Hal8192CUMACImg_CE.h" - #endif - - #if(RTL8192DE_SUPPORT ==1) - #include "rtl8192d/Hal8192DEFWImg_CE.h" - #include "rtl8192d/Hal8192DEPHYImg_CE.h" - #include "rtl8192d/Hal8192DEMACImg_CE.h" - #endif - - #if(RTL8192DU_SUPPORT ==1) - #include "rtl8192d/Hal8192DUFWImg_CE.h" - #include "rtl8192d/Hal8192DUPHYImg_CE.h" - #include "rtl8192d/Hal8192DUMACImg_CE.h" - #endif - - #if(RTL8723AS_SUPPORT==1) - #include "rtl8723a/Hal8723SHWImg_CE.h" - #endif - - #if(RTL8723AU_SUPPORT==1) - #include "rtl8723a/Hal8723UHWImg_CE.h" - #endif - -#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN) - -#endif - - -//2 OutSrc Header Files -#if (RTL8188E_SUPPORT==1) -// Old ODM -#include "rtl8188e\odm.h" -#include "rtl8188e\odm_HWConfig.h" -#include "rtl8188e\odm_debug.h" -#include "rtl8188e\odm_RegDefine11AC.h" -#include "rtl8188e\odm_RegDefine11N.h" -#include "rtl8188e\odm_interface.h" -#include "rtl8188e\odm_reg.h" -#include "rtl8188e\Hal8188EAdaptivity.h" -#else -// new ODM -#include "phydm.h" -#include "phydm_HWConfig.h" -#include "phydm_debug.h" -#include "phydm_RegDefine11AC.h" -#include "phydm_RegDefine11N.h" -#include "phydm_AntDiv.h" -#include "phydm_EdcaTurboCheck.h" -#include "phydm_DIG.h" -#include "PhyDM_Adaptivity.h" -#include "phydm_PathDiv.h" -#include "phydm_RaInfo.h" -#include "phydm_DynamicBBPowerSaving.h" -#include "phydm_DynamicTxPower.h" -#include "phydm_CfoTracking.h" -#include "phydm_NoiseMonitor.h" -#include "phydm_interface.h" -#include "phydm_reg.h" -#endif - -#if (DM_ODM_SUPPORT_TYPE == ODM_AP) -#if (RTL8192C_SUPPORT==1) - #include "rtl8192c/HalDMOutSrc8192C_AP.h" -#endif -#if (RTL8188E_SUPPORT==1) - #include "rtl8188e/Hal8188ERateAdaptive.h"//for RA,Power training -#endif - -#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL) - #include "rtl8192c/HalDMOutSrc8192C_ADSL.h" - -#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) - //#include "hal_com.h" - #include "HalPhyRf.h" - #if (RTL8192C_SUPPORT==1) - #ifdef CONFIG_INTEL_PROXIM - #include "../proxim/intel_proxim.h" - #endif - #include "rtl8192c/HalDMOutSrc8192C_CE.h" - #include - #endif - - #if (RTL8192D_SUPPORT==1) - #include "rtl8192d/HalDMOutSrc8192D_CE.h" - #include "rtl8192d_hal.h" - #endif - - #if (RTL8723A_SUPPORT==1) - #include "rtl8192c/HalDMOutSrc8192C_CE.h" //for IQK,LCK,Power-tracking - #include "../rtl8723a/rtl8723a_hal.h" - #endif - - #if (RTL8188E_SUPPORT==1) - #include "rtl8188e/HalPhyRf_8188e.h"//for IQK,LCK,Power-tracking - #include "rtl8188e/Hal8188ERateAdaptive.h"//for RA,Power training - #include "../rtl8188e/rtl8188e_hal.h" - #endif - - #if (RTL8192E_SUPPORT==1) - #include "rtl8192e/HalPhyRf_8192e.h"//for IQK,LCK,Power-tracking - #include "rtl8192e_hal.h" - #endif - - #if (RTL8812A_SUPPORT==1) - #include "rtl8812a/HalPhyRf_8812A.h"//for IQK,LCK,Power-tracking - #include "rtl8812a_hal.h" - #endif - - #if (RTL8821A_SUPPORT==1) - #include "rtl8821a/HalPhyRf_8821A.h"//for IQK,LCK,Power-tracking - #include "rtl8812a/HalPhyRf_8812A.h"//for IQK,LCK,Power-tracking - #include "rtl8812a_hal.h" - #endif - - #if (RTL8723B_SUPPORT==1) - #include "rtl8723b/HalPhyRf_8723B.h"//for IQK,LCK,Power-tracking - #include "rtl8723b_hal.h" - #endif - -#elif (DM_ODM_SUPPORT_TYPE == ODM_IOT) - #include "HalPhyRf.h" - #if (RTL8195A_SUPPORT==1) - #include "rtl8195a/HalPhyRf_8195A.h"//for IQK,LCK,Power-tracking - #include "rtl8195a_hal.h" - #endif - - #if (RTL8711B_SUPPORT==1) - #include "rtl8711b/HalPhyRf_8711b.h"//for IQK,LCK,Power-tracking - #include "rtl8711b_hal.h" - #endif -#endif - - -#if (RTL8192C_SUPPORT==1) -#if (DM_ODM_SUPPORT_TYPE == ODM_AP) -#include "rtl8192c/Hal8192CHWImg_MAC.h" -#include "rtl8192c/Hal8192CHWImg_RF.h" -#include "rtl8192c/Hal8192CHWImg_BB.h" -#include "rtl8192c/Hal8192CHWImg_FW.h" -#endif -#include "rtl8192c/phydm_RTL8192C.h" -#endif -#if (RTL8192D_SUPPORT==1) -#include "rtl8192d/phydm_RTL8192D.h" -#endif - -#if (RTL8723A_SUPPORT==1) -#include "rtl8723a/HalHWImg8723A_MAC.h" -#include "rtl8723a/HalHWImg8723A_RF.h" -#include "rtl8723a/HalHWImg8723A_BB.h" -#include "rtl8723a/HalHWImg8723A_FW.h" -#include "rtl8723a/phydm_RegConfig8723A.h" -#endif - -#if (RTL8188E_SUPPORT==1) -#include "rtl8188e/HalHWImg8188E_MAC.h" -#include "rtl8188e/HalHWImg8188E_RF.h" -#include "rtl8188e/HalHWImg8188E_BB.h" -#include "rtl8188e/HalHWImg8188E_FW.h" -#include "rtl8188e/Hal8188EReg.h" - -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) -#include "rtl8188e/HalPhyRf_8188e.h" -#endif - -#if (TEST_CHIP_SUPPORT == 1) -#include "rtl8188e/HalHWImg8188E_TestChip_MAC.h" -#include "rtl8188e/HalHWImg8188E_TestChip_RF.h" -#include "rtl8188e/HalHWImg8188E_TestChip_BB.h" -#endif - - -#include "rtl8188e/odm_RegConfig8188E.h" -#include "rtl8188e/odm_RTL8188E.h" -#endif - -#if (RTL8192E_SUPPORT==1) -#include "rtl8192e/HalHWImg8192E_MAC.h" -#include "rtl8192e/HalHWImg8192E_RF.h" -#include "rtl8192e/HalHWImg8192E_BB.h" -#include "rtl8192e/HalHWImg8192E_FW.h" -#include "rtl8192e/Hal8192EReg.h" -#include "rtl8192e/phydm_RegConfig8192E.h" -#include "rtl8192e/phydm_RTL8192E.h" -#endif - -#if (RTL8723B_SUPPORT==1) -#include "rtl8723b/HalHWImg8723B_MAC.h" -#include "rtl8723b/HalHWImg8723B_RF.h" -#include "rtl8723b/HalHWImg8723B_BB.h" -#include "rtl8723b/HalHWImg8723B_FW.h" -#include "rtl8723b/HalHWImg8723B_MP.h" -#include "rtl8723b/Hal8723BReg.h" -#include "rtl8723b/phydm_RTL8723B.h" -#include "rtl8723b/phydm_RegConfig8723B.h" -#endif - -#if (RTL8812A_SUPPORT==1) -#include "rtl8812a/HalHWImg8812A_MAC.h" -#include "rtl8812a/HalHWImg8812A_RF.h" -#include "rtl8812a/HalHWImg8812A_BB.h" -#include "rtl8812a/HalHWImg8812A_FW.h" -#include "rtl8812a/phydm_RegConfig8812A.h" -#include "rtl8812a/phydm_RTL8812A.h" -#endif - - -#if (RTL8821A_SUPPORT==1) -#include "rtl8821a/HalHWImg8821A_MAC.h" -#include "rtl8821a/HalHWImg8821A_RF.h" -#include "rtl8821a/HalHWImg8821A_BB.h" -#include "rtl8821a/HalHWImg8821A_FW.h" -#include "rtl8821a/phydm_RegConfig8821A.h" -#include "rtl8821a/phydm_RTL8821A.h" -#endif - -#if (RTL8195A_SUPPORT==1) -#include "rtl8195a/halhwimg8195a_mac.h" -#include "rtl8195a/halhwimg8195a_rf.h" -#include "rtl8195a/halhwimg8195a_bb.h" -#include "rtl8195a/Hal8195AReg.h" -#include "rtl8195a/phydm_RTL8195A.h" -#include "rtl8195a/phydm_RegConfig8195A.h" -#include "rtl8195a/ROM_RTL8195A_PHYDM.h" -#include "rtl8195a/Hal8195ARateAdaptive.h" -#endif - -#if (RTL8711B_SUPPORT==1) -#include "rtl8711b/HalHWImg8711B_MAC.h" -#include "rtl8711b/HalHWImg8711B_RF.h" -#include "rtl8711b/HalHWImg8711B_BB.h" -#include "rtl8711b/HalHWImg8711B_FW.h" -#include "rtl8711b/HalHWImg8711B_MP.h" -#include "rtl8711b/Hal8711BReg.h" -#include "rtl8711b/phydm_RTL8711B.h" -#include "rtl8711b/phydm_RegConfig8711B.h" -#include "rtl8711b/ROM_RTL8711B_PHYDM.h" -#include "rtl8711b/Hal8711BRateAdaptive.h" -#endif - -#endif // __ODM_PRECOMP_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_reg.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_reg.h deleted file mode 100644 index e842413..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_reg.h +++ /dev/null @@ -1,208 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -//============================================================ -// File Name: odm_reg.h -// -// Description: -// -// This file is for general register definition. -// -// -//============================================================ -#ifndef __HAL_ODM_REG_H__ -#define __HAL_ODM_REG_H__ - -// -// Register Definition -// - -//MAC REG -#define ODM_BB_RESET 0x002 -#define ODM_DUMMY 0x4fe -#define RF_T_METER_OLD 0x24 -#define RF_T_METER_NEW 0x42 - -#define ODM_EDCA_VO_PARAM 0x500 -#define ODM_EDCA_VI_PARAM 0x504 -#define ODM_EDCA_BE_PARAM 0x508 -#define ODM_EDCA_BK_PARAM 0x50C -#define ODM_TXPAUSE 0x522 - -//BB REG -#define ODM_FPGA_PHY0_PAGE8 0x800 -#define ODM_PSD_SETTING 0x808 -#define ODM_AFE_SETTING 0x818 -#define ODM_TXAGC_B_6_18 0x830 -#define ODM_TXAGC_B_24_54 0x834 -#define ODM_TXAGC_B_MCS32_5 0x838 -#define ODM_TXAGC_B_MCS0_MCS3 0x83c -#define ODM_TXAGC_B_MCS4_MCS7 0x848 -#define ODM_TXAGC_B_MCS8_MCS11 0x84c -#define ODM_ANALOG_REGISTER 0x85c -#define ODM_RF_INTERFACE_OUTPUT 0x860 -#define ODM_TXAGC_B_MCS12_MCS15 0x868 -#define ODM_TXAGC_B_11_A_2_11 0x86c -#define ODM_AD_DA_LSB_MASK 0x874 -#define ODM_ENABLE_3_WIRE 0x88c -#define ODM_PSD_REPORT 0x8b4 -#define ODM_R_ANT_SELECT 0x90c -#define ODM_CCK_ANT_SELECT 0xa07 -#define ODM_CCK_PD_THRESH 0xa0a -#define ODM_CCK_RF_REG1 0xa11 -#define ODM_CCK_MATCH_FILTER 0xa20 -#define ODM_CCK_RAKE_MAC 0xa2e -#define ODM_CCK_CNT_RESET 0xa2d -#define ODM_CCK_TX_DIVERSITY 0xa2f -#define ODM_CCK_FA_CNT_MSB 0xa5b -#define ODM_CCK_FA_CNT_LSB 0xa5c -#define ODM_CCK_NEW_FUNCTION 0xa75 -#define ODM_OFDM_PHY0_PAGE_C 0xc00 -#define ODM_OFDM_RX_ANT 0xc04 -#define ODM_R_A_RXIQI 0xc14 -#define ODM_R_A_AGC_CORE1 0xc50 -#define ODM_R_A_AGC_CORE2 0xc54 -#define ODM_R_B_AGC_CORE1 0xc58 -#define ODM_R_AGC_PAR 0xc70 -#define ODM_R_HTSTF_AGC_PAR 0xc7c -#define ODM_TX_PWR_TRAINING_A 0xc90 -#define ODM_TX_PWR_TRAINING_B 0xc98 -#define ODM_OFDM_FA_CNT1 0xcf0 -#define ODM_OFDM_PHY0_PAGE_D 0xd00 -#define ODM_OFDM_FA_CNT2 0xda0 -#define ODM_OFDM_FA_CNT3 0xda4 -#define ODM_OFDM_FA_CNT4 0xda8 -#define ODM_TXAGC_A_6_18 0xe00 -#define ODM_TXAGC_A_24_54 0xe04 -#define ODM_TXAGC_A_1_MCS32 0xe08 -#define ODM_TXAGC_A_MCS0_MCS3 0xe10 -#define ODM_TXAGC_A_MCS4_MCS7 0xe14 -#define ODM_TXAGC_A_MCS8_MCS11 0xe18 -#define ODM_TXAGC_A_MCS12_MCS15 0xe1c - -//RF REG -#define ODM_GAIN_SETTING 0x00 -#define ODM_CHANNEL 0x18 -#define ODM_RF_T_METER 0x24 -#define ODM_RF_T_METER_92D 0x42 -#define ODM_RF_T_METER_88E 0x42 -#define ODM_RF_T_METER_92E 0x42 -#define ODM_RF_T_METER_8812 0x42 - -//Ant Detect Reg -#define ODM_DPDT 0x300 - -//PSD Init -#define ODM_PSDREG 0x808 - -//92D Path Div -#define PATHDIV_REG 0xB30 -#define PATHDIV_TRI 0xBA0 - - -// -// Bitmap Definition -// -#if(DM_ODM_SUPPORT_TYPE & (ODM_AP)) -// TX AGC -#define rTxAGC_A_CCK11_CCK1_JAguar 0xc20 -#define rTxAGC_A_Ofdm18_Ofdm6_JAguar 0xc24 -#define rTxAGC_A_Ofdm54_Ofdm24_JAguar 0xc28 -#define rTxAGC_A_MCS3_MCS0_JAguar 0xc2c -#define rTxAGC_A_MCS7_MCS4_JAguar 0xc30 -#define rTxAGC_A_MCS11_MCS8_JAguar 0xc34 -#define rTxAGC_A_MCS15_MCS12_JAguar 0xc38 -#define rTxAGC_A_Nss1Index3_Nss1Index0_JAguar 0xc3c -#define rTxAGC_A_Nss1Index7_Nss1Index4_JAguar 0xc40 -#define rTxAGC_A_Nss2Index1_Nss1Index8_JAguar 0xc44 -#define rTxAGC_A_Nss2Index5_Nss2Index2_JAguar 0xc48 -#define rTxAGC_A_Nss2Index9_Nss2Index6_JAguar 0xc4c -#if defined(CONFIG_WLAN_HAL_8814AE) -#define rTxAGC_A_MCS19_MCS16_JAguar 0xcd8 -#define rTxAGC_A_MCS23_MCS20_JAguar 0xcdc -#define rTxAGC_A_Nss3Index3_Nss3Index0_JAguar 0xce0 -#define rTxAGC_A_Nss3Index7_Nss3Index4_JAguar 0xce4 -#define rTxAGC_A_Nss3Index9_Nss3Index8_JAguar 0xce8 -#endif -#define rTxAGC_B_CCK11_CCK1_JAguar 0xe20 -#define rTxAGC_B_Ofdm18_Ofdm6_JAguar 0xe24 -#define rTxAGC_B_Ofdm54_Ofdm24_JAguar 0xe28 -#define rTxAGC_B_MCS3_MCS0_JAguar 0xe2c -#define rTxAGC_B_MCS7_MCS4_JAguar 0xe30 -#define rTxAGC_B_MCS11_MCS8_JAguar 0xe34 -#define rTxAGC_B_MCS15_MCS12_JAguar 0xe38 -#define rTxAGC_B_Nss1Index3_Nss1Index0_JAguar 0xe3c -#define rTxAGC_B_Nss1Index7_Nss1Index4_JAguar 0xe40 -#define rTxAGC_B_Nss2Index1_Nss1Index8_JAguar 0xe44 -#define rTxAGC_B_Nss2Index5_Nss2Index2_JAguar 0xe48 -#define rTxAGC_B_Nss2Index9_Nss2Index6_JAguar 0xe4c -#if defined(CONFIG_WLAN_HAL_8814AE) -#define rTxAGC_B_MCS19_MCS16_JAguar 0xed8 -#define rTxAGC_B_MCS23_MCS20_JAguar 0xedc -#define rTxAGC_B_Nss3Index3_Nss3Index0_JAguar 0xee0 -#define rTxAGC_B_Nss3Index7_Nss3Index4_JAguar 0xee4 -#define rTxAGC_B_Nss3Index9_Nss3Index8_JAguar 0xee8 -#define rTxAGC_C_CCK11_CCK1_JAguar 0x1820 -#define rTxAGC_C_Ofdm18_Ofdm6_JAguar 0x1824 -#define rTxAGC_C_Ofdm54_Ofdm24_JAguar 0x1828 -#define rTxAGC_C_MCS3_MCS0_JAguar 0x182c -#define rTxAGC_C_MCS7_MCS4_JAguar 0x1830 -#define rTxAGC_C_MCS11_MCS8_JAguar 0x1834 -#define rTxAGC_C_MCS15_MCS12_JAguar 0x1838 -#define rTxAGC_C_Nss1Index3_Nss1Index0_JAguar 0x183c -#define rTxAGC_C_Nss1Index7_Nss1Index4_JAguar 0x1840 -#define rTxAGC_C_Nss2Index1_Nss1Index8_JAguar 0x1844 -#define rTxAGC_C_Nss2Index5_Nss2Index2_JAguar 0x1848 -#define rTxAGC_C_Nss2Index9_Nss2Index6_JAguar 0x184c -#define rTxAGC_C_MCS19_MCS16_JAguar 0x18d8 -#define rTxAGC_C_MCS23_MCS20_JAguar 0x18dc -#define rTxAGC_C_Nss3Index3_Nss3Index0_JAguar 0x18e0 -#define rTxAGC_C_Nss3Index7_Nss3Index4_JAguar 0x18e4 -#define rTxAGC_C_Nss3Index9_Nss3Index8_JAguar 0x18e8 -#define rTxAGC_D_CCK11_CCK1_JAguar 0x1a20 -#define rTxAGC_D_Ofdm18_Ofdm6_JAguar 0x1a24 -#define rTxAGC_D_Ofdm54_Ofdm24_JAguar 0x1a28 -#define rTxAGC_D_MCS3_MCS0_JAguar 0x1a2c -#define rTxAGC_D_MCS7_MCS4_JAguar 0x1a30 -#define rTxAGC_D_MCS11_MCS8_JAguar 0x1a34 -#define rTxAGC_D_MCS15_MCS12_JAguar 0x1a38 -#define rTxAGC_D_Nss1Index3_Nss1Index0_JAguar 0x1a3c -#define rTxAGC_D_Nss1Index7_Nss1Index4_JAguar 0x1a40 -#define rTxAGC_D_Nss2Index1_Nss1Index8_JAguar 0x1a44 -#define rTxAGC_D_Nss2Index5_Nss2Index2_JAguar 0x1a48 -#define rTxAGC_D_Nss2Index9_Nss2Index6_JAguar 0x1a4c -#define rTxAGC_D_MCS19_MCS16_JAguar 0x1ad8 -#define rTxAGC_D_MCS23_MCS20_JAguar 0x1adc -#define rTxAGC_D_Nss3Index3_Nss3Index0_JAguar 0x1ae0 -#define rTxAGC_D_Nss3Index7_Nss3Index4_JAguar 0x1ae4 -#define rTxAGC_D_Nss3Index9_Nss3Index8_JAguar 0x1ae8 -#endif - -#define bTxAGC_byte0_Jaguar 0xff -#define bTxAGC_byte1_Jaguar 0xff00 -#define bTxAGC_byte2_Jaguar 0xff0000 -#define bTxAGC_byte3_Jaguar 0xff000000 -#endif - -#define BIT_FA_RESET BIT0 - - - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_types.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_types.h deleted file mode 100644 index 71cbafc..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/phydm_types.h +++ /dev/null @@ -1,442 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __ODM_TYPES_H__ -#define __ODM_TYPES_H__ - -#define ODM_RATEMCS15_SG 0x1c -#define ODM_RATEMCS32 0x20 - - -// CCK Rates, TxHT = 0 -#define ODM_RATE1M 0x00 -#define ODM_RATE2M 0x01 -#define ODM_RATE5_5M 0x02 -#define ODM_RATE11M 0x03 -// OFDM Rates, TxHT = 0 -#define ODM_RATE6M 0x04 -#define ODM_RATE9M 0x05 -#define ODM_RATE12M 0x06 -#define ODM_RATE18M 0x07 -#define ODM_RATE24M 0x08 -#define ODM_RATE36M 0x09 -#define ODM_RATE48M 0x0A -#define ODM_RATE54M 0x0B -// MCS Rates, TxHT = 1 -#define ODM_RATEMCS0 0x0C -#define ODM_RATEMCS1 0x0D -#define ODM_RATEMCS2 0x0E -#define ODM_RATEMCS3 0x0F -#define ODM_RATEMCS4 0x10 -#define ODM_RATEMCS5 0x11 -#define ODM_RATEMCS6 0x12 -#define ODM_RATEMCS7 0x13 -#define ODM_RATEMCS8 0x14 -#define ODM_RATEMCS9 0x15 -#define ODM_RATEMCS10 0x16 -#define ODM_RATEMCS11 0x17 -#define ODM_RATEMCS12 0x18 -#define ODM_RATEMCS13 0x19 -#define ODM_RATEMCS14 0x1A -#define ODM_RATEMCS15 0x1B -#define ODM_RATEMCS16 0x1C -#define ODM_RATEMCS17 0x1D -#define ODM_RATEMCS18 0x1E -#define ODM_RATEMCS19 0x1F -#define ODM_RATEMCS20 0x20 -#define ODM_RATEMCS21 0x21 -#define ODM_RATEMCS22 0x22 -#define ODM_RATEMCS23 0x23 -#define ODM_RATEMCS24 0x24 -#define ODM_RATEMCS25 0x25 -#define ODM_RATEMCS26 0x26 -#define ODM_RATEMCS27 0x27 -#define ODM_RATEMCS28 0x28 -#define ODM_RATEMCS29 0x29 -#define ODM_RATEMCS30 0x2A -#define ODM_RATEMCS31 0x2B -#define ODM_RATEVHTSS1MCS0 0x2C -#define ODM_RATEVHTSS1MCS1 0x2D -#define ODM_RATEVHTSS1MCS2 0x2E -#define ODM_RATEVHTSS1MCS3 0x2F -#define ODM_RATEVHTSS1MCS4 0x30 -#define ODM_RATEVHTSS1MCS5 0x31 -#define ODM_RATEVHTSS1MCS6 0x32 -#define ODM_RATEVHTSS1MCS7 0x33 -#define ODM_RATEVHTSS1MCS8 0x34 -#define ODM_RATEVHTSS1MCS9 0x35 -#define ODM_RATEVHTSS2MCS0 0x36 -#define ODM_RATEVHTSS2MCS1 0x37 -#define ODM_RATEVHTSS2MCS2 0x38 -#define ODM_RATEVHTSS2MCS3 0x39 -#define ODM_RATEVHTSS2MCS4 0x3A -#define ODM_RATEVHTSS2MCS5 0x3B -#define ODM_RATEVHTSS2MCS6 0x3C -#define ODM_RATEVHTSS2MCS7 0x3D -#define ODM_RATEVHTSS2MCS8 0x3E -#define ODM_RATEVHTSS2MCS9 0x3F -#define ODM_RATEVHTSS3MCS0 0x40 -#define ODM_RATEVHTSS3MCS1 0x41 -#define ODM_RATEVHTSS3MCS2 0x42 -#define ODM_RATEVHTSS3MCS3 0x43 -#define ODM_RATEVHTSS3MCS4 0x44 -#define ODM_RATEVHTSS3MCS5 0x45 -#define ODM_RATEVHTSS3MCS6 0x46 -#define ODM_RATEVHTSS3MCS7 0x47 -#define ODM_RATEVHTSS3MCS8 0x48 -#define ODM_RATEVHTSS3MCS9 0x49 -#define ODM_RATEVHTSS4MCS0 0x4A -#define ODM_RATEVHTSS4MCS1 0x4B -#define ODM_RATEVHTSS4MCS2 0x4C -#define ODM_RATEVHTSS4MCS3 0x4D -#define ODM_RATEVHTSS4MCS4 0x4E -#define ODM_RATEVHTSS4MCS5 0x4F -#define ODM_RATEVHTSS4MCS6 0x50 -#define ODM_RATEVHTSS4MCS7 0x51 -#define ODM_RATEVHTSS4MCS8 0x52 -#define ODM_RATEVHTSS4MCS9 0x53 - - -// -// Define Different SW team support -// -#define ODM_AP 0x01 //BIT0 -#define ODM_ADSL 0x02 //BIT1 -#define ODM_CE 0x04 //BIT2 -#define ODM_WIN 0x08 //BIT3 -#define ODM_IOT 0x10 //BIT4 - -#define DM_ODM_SUPPORT_TYPE ODM_IOT - -// Deifne HW endian support -#define ODM_ENDIAN_BIG 0 -#define ODM_ENDIAN_LITTLE 1 - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -#define GET_PDM_ODM(__pAdapter) ((PDM_ODM_T)(&((GET_HAL_DATA(__pAdapter))->DM_OutSrc))) -#elif (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_IOT)) -#define GET_PDM_ODM(__pAdapter) ((PDM_ODM_T)(&((GET_HAL_DATA(__pAdapter))->odmpriv))) -#endif - -#if (DM_ODM_SUPPORT_TYPE != ODM_WIN) -#define RT_PCI_INTERFACE 1 -#define RT_USB_INTERFACE 2 -#define RT_SDIO_INTERFACE 3 -#define RT_LXBUS_INTERFACE 4 -#endif - -typedef enum _HAL_STATUS{ - HAL_STATUS_SUCCESS, - HAL_STATUS_FAILURE, - /*RT_STATUS_PENDING, - RT_STATUS_RESOURCE, - RT_STATUS_INVALID_CONTEXT, - RT_STATUS_INVALID_PARAMETER, - RT_STATUS_NOT_SUPPORT, - RT_STATUS_OS_API_FAILED,*/ -}HAL_STATUS,*PHAL_STATUS; - - -#if( (DM_ODM_SUPPORT_TYPE == ODM_AP) ||(DM_ODM_SUPPORT_TYPE == ODM_ADSL) || (DM_ODM_SUPPORT_TYPE == ODM_CE)) - -#define VISTA_USB_RX_REVISE 0 - -// -// Declare for ODM spin lock defintion temporarily fro compile pass. -// -typedef enum _RT_SPINLOCK_TYPE{ - RT_TX_SPINLOCK = 1, - RT_RX_SPINLOCK = 2, - RT_RM_SPINLOCK = 3, - RT_CAM_SPINLOCK = 4, - RT_SCAN_SPINLOCK = 5, - RT_LOG_SPINLOCK = 7, - RT_BW_SPINLOCK = 8, - RT_CHNLOP_SPINLOCK = 9, - RT_RF_OPERATE_SPINLOCK = 10, - RT_INITIAL_SPINLOCK = 11, - RT_RF_STATE_SPINLOCK = 12, // For RF state. Added by Bruce, 2007-10-30. -#if VISTA_USB_RX_REVISE - RT_USBRX_CONTEXT_SPINLOCK = 13, - RT_USBRX_POSTPROC_SPINLOCK = 14, // protect data of Adapter->IndicateW/ IndicateR -#endif - //Shall we define Ndis 6.2 SpinLock Here ? - RT_PORT_SPINLOCK=16, - RT_H2C_SPINLOCK = 20, // For H2C cmd. Added by tynli. 2009.11.09. - - RT_BTData_SPINLOCK=25, - - RT_WAPI_OPTION_SPINLOCK=26, - RT_WAPI_RX_SPINLOCK=27, - - // add for 92D CCK control issue - RT_CCK_PAGEA_SPINLOCK = 28, - RT_BUFFER_SPINLOCK = 29, - RT_CHANNEL_AND_BANDWIDTH_SPINLOCK = 30, - RT_GEN_TEMP_BUF_SPINLOCK = 31, - RT_AWB_SPINLOCK = 32, - RT_FW_PS_SPINLOCK = 33, - RT_HW_TIMER_SPIN_LOCK = 34, - RT_MPT_WI_SPINLOCK = 35, - RT_P2P_SPIN_LOCK = 36, // Protect P2P context - RT_DBG_SPIN_LOCK = 37, - RT_IQK_SPINLOCK = 38, - RT_PENDED_OID_SPINLOCK = 39, - RT_CHNLLIST_SPINLOCK = 40, - RT_INDIC_SPINLOCK = 41, //protect indication -}RT_SPINLOCK_TYPE; - -#endif - - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - #define STA_INFO_T RT_WLAN_STA - #define PSTA_INFO_T PRT_WLAN_STA - -// typedef unsigned long u4Byte,*pu4Byte; -#define CONFIG_HW_ANTENNA_DIVERSITY -#define CONFIG_SW_ANTENNA_DIVERSITY - -#elif (DM_ODM_SUPPORT_TYPE == ODM_AP) - - // To let ADSL/AP project compile ok; it should be removed after all conflict are solved. Added by Annie, 2011-10-07. - #define ADSL_AP_BUILD_WORKAROUND - #define AP_BUILD_WORKAROUND - // -#ifdef CONFIG_ANT_SWITCH - #define CONFIG_HW_ANTENNA_DIVERSITY - #if ( defined(CONFIG_NO_2G_DIVERSITY) && defined(CONFIG_NO_5G_DIVERSITY) ) - #define CONFIG_NOT_SUPPORT_ANTDIV - #elif( !defined(CONFIG_NO_2G_DIVERSITY) && defined(CONFIG_NO_5G_DIVERSITY) ) - #define CONFIG_2G_SUPPORT_ANTDIV - #elif( defined(CONFIG_NO_2G_DIVERSITY) && !defined(CONFIG_NO_5G_DIVERSITY) ) - #define CONFIG_5G_SUPPORT_ANTDIV - #elif( !defined(CONFIG_NO_2G_DIVERSITY) && !defined(CONFIG_NO_5G_DIVERSITY) ) - #define CONFIG_2G5G_SUPPORT_ANTDIV - #endif -#endif - - #ifdef AP_BUILD_WORKAROUND - #include "../typedef.h" - #else - typedef void VOID,*PVOID; - typedef unsigned char BOOLEAN,*PBOOLEAN; - typedef unsigned char u1Byte,*pu1Byte; - typedef unsigned short u2Byte,*pu2Byte; - typedef unsigned int u4Byte,*pu4Byte; - typedef unsigned long long u8Byte,*pu8Byte; - typedef char s1Byte,*ps1Byte; - typedef short s2Byte,*ps2Byte; - typedef long s4Byte,*ps4Byte; - typedef long long s8Byte,*ps8Byte; - #endif - - typedef struct rtl8192cd_priv *prtl8192cd_priv; - typedef struct stat_info STA_INFO_T,*PSTA_INFO_T; - typedef struct timer_list RT_TIMER, *PRT_TIMER; - typedef void * RT_TIMER_CALL_BACK; - - #define DEV_BUS_TYPE RT_PCI_INTERFACE - - #define _TRUE 1 - #define _FALSE 0 - -#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL) - - // To let ADSL/AP project compile ok; it should be removed after all conflict are solved. Added by Annie, 2011-10-07. - #define ADSL_AP_BUILD_WORKAROUND - #define ADSL_BUILD_WORKAROUND - // - - typedef unsigned char BOOLEAN,*PBOOLEAN; - typedef unsigned char u1Byte,*pu1Byte; - typedef unsigned short u2Byte,*pu2Byte; - typedef unsigned int u4Byte,*pu4Byte; - typedef unsigned long long u8Byte,*pu8Byte; - typedef char s1Byte,*ps1Byte; - typedef short s2Byte,*ps2Byte; - typedef long s4Byte,*ps4Byte; - typedef long long s8Byte,*ps8Byte; - - typedef struct rtl8192cd_priv *prtl8192cd_priv; - typedef struct stat_info STA_INFO_T,*PSTA_INFO_T; - typedef struct timer_list RT_TIMER, *PRT_TIMER; - typedef void * RT_TIMER_CALL_BACK; - - #define DEV_BUS_TYPE RT_PCI_INTERFACE - - #define _TRUE 1 - #define _FALSE 0 - -#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) - #include - -#if 0 - typedef u8 u1Byte, *pu1Byte; - typedef u16 u2Byte,*pu2Byte; - typedef u32 u4Byte,*pu4Byte; - typedef u64 u8Byte,*pu8Byte; - typedef s8 s1Byte,*ps1Byte; - typedef s16 s2Byte,*ps2Byte; - typedef s32 s4Byte,*ps4Byte; - typedef s64 s8Byte,*ps8Byte; -#else - #define u1Byte u8 - #define pu1Byte u8* - - #define u2Byte u16 - #define pu2Byte u16* - - #define u4Byte u32 - #define pu4Byte u32* - - #define u8Byte u64 - #define pu8Byte u64* - - #define s1Byte s8 - #define ps1Byte s8* - - #define s2Byte s16 - #define ps2Byte s16* - - #define s4Byte s32 - #define ps4Byte s32* - - #define s8Byte s64 - #define ps8Byte s64* - -#endif - #ifdef CONFIG_USB_HCI - #define DEV_BUS_TYPE RT_USB_INTERFACE - #elif defined(CONFIG_PCI_HCI) - #define DEV_BUS_TYPE RT_PCI_INTERFACE - #elif defined(CONFIG_SDIO_HCI) - #define DEV_BUS_TYPE RT_SDIO_INTERFACE - #elif defined(CONFIG_GSPI_HCI) - #define DEV_BUS_TYPE RT_SDIO_INTERFACE - #elif defined(CONFIG_LX_HCI) - #define DEV_BUS_TYPE RT_PCI_INTERFACE - #endif - - - #if defined(CONFIG_LITTLE_ENDIAN) - #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE - #elif defined (CONFIG_BIG_ENDIAN) - #define ODM_ENDIAN_TYPE ODM_ENDIAN_BIG - #endif - - typedef struct timer_list RT_TIMER, *PRT_TIMER; - typedef void * RT_TIMER_CALL_BACK; - #define STA_INFO_T struct sta_info - #define PSTA_INFO_T struct sta_info * - - - -#ifndef TRUE - #define TRUE _TRUE -#endif -#ifndef FALSE - #define FALSE _FALSE -#endif - - - #define SET_TX_DESC_ANTSEL_A_88E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 24, 1, __Value) - #define SET_TX_DESC_ANTSEL_B_88E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 25, 1, __Value) - #define SET_TX_DESC_ANTSEL_C_88E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 29, 1, __Value) - - //define useless flag to avoid compile warning - #define USE_WORKITEM 0 - #define FOR_BRAZIL_PRETEST 0 - #define FPGA_TWO_MAC_VERIFICATION 0 - #define RTL8881A_SUPPORT 0 - -#elif (DM_ODM_SUPPORT_TYPE == ODM_IOT) - #include - - #define RA_MASK_PHYDMLIZE_CE 1 - - typedef unsigned char u1Byte,*pu1Byte; - typedef unsigned short u2Byte,*pu2Byte; - typedef unsigned int u4Byte,*pu4Byte; - typedef unsigned long long u8Byte,*pu8Byte; - typedef signed char s1Byte,*ps1Byte; /* GCC ROM char = unsigned char */ - typedef signed short s2Byte,*ps2Byte; - typedef signed long s4Byte,*ps4Byte; - typedef long long s8Byte,*ps8Byte; - - typedef struct sta_info STA_INFO_T,*PSTA_INFO_T; - - #if defined(CONFIG_GSPI_HCI) - #define DEV_BUS_TYPE RT_SDIO_INTERFACE - #elif defined(CONFIG_LX_HCI) - #define DEV_BUS_TYPE RT_LXBUS_INTERFACE - #endif - - // Array_MP_8195A_TXPWR_LMT[] - typedef enum _ODM_PW_LMT_REGULATION_TYPE{ - PW_LMT_REGU_NULL = 0, - PW_LMT_REGU_FCC = 1, - PW_LMT_REGU_ETSI = 2, - PW_LMT_REGU_MKK = 3, - PW_LMT_REGU_WW13 = 4 - }ODM_PW_LMT_REGULATION_TYPE; - - typedef enum _ODM_PW_LMT_BAND_TYPE{ - PW_LMT_BAND_NULL = 0, - PW_LMT_BAND_2_4G = 1, - PW_LMT_BAND_5G = 2 - }ODM_PW_LMT_BAND_TYPE; - - typedef enum _ODM_PW_LMT_BANDWIDTH_TYPE{ - PW_LMT_BW_NULL = 0, - PW_LMT_BW_20M = 1, - PW_LMT_BW_40M = 2, - PW_LMT_BW_80M = 3 - }ODM_PW_LMT_BANDWIDTH_TYPE; - - typedef enum _ODM_PW_LMT_RATESECTION_TYPE{ - PW_LMT_RS_NULL = 0, - PW_LMT_RS_CCK = 1, - PW_LMT_RS_OFDM = 2, - PW_LMT_RS_HT = 3, - PW_LMT_RS_VHT = 4 - }ODM_PW_LMT_RATESECTION_TYPE; - - typedef enum _ODM_PW_LMT_RFPATH_TYPE{ - PW_LMT_PH_NULL = 0, - PW_LMT_PH_1T = 1, - PW_LMT_PH_2T = 2, - PW_LMT_PH_3T = 3, - PW_LMT_PH_4T = 4 - }ODM_PW_LMT_RFPATH_TYPE; - - #if defined(CONFIG_LITTLE_ENDIAN) - #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE - #elif defined (CONFIG_BIG_ENDIAN) - #define ODM_ENDIAN_TYPE ODM_ENDIAN_BIG - #endif - -#endif - -#define READ_NEXT_PAIR(v1, v2, i) do { if (i+2 >= ArrayLen) break; i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0) -#define COND_ELSE 2 -#define COND_ENDIF 3 - -#endif // __ODM_TYPES_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rom_odm_interface.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rom_odm_interface.h deleted file mode 100644 index ddf25cf..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rom_odm_interface.h +++ /dev/null @@ -1,59 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - -#ifndef __ROM_ODM_INTERFACE_H__ -#define __ROM_ODM_INTERFACE_H__ - -#include "hal_api.h" - -// -// =========== Macro Define -// -#define ODM_Read1Byte(pDM_Odm, RegAddr) HAL_READ8(WIFI_REG_BASE, RegAddr) -#define ODM_Read2Byte(pDM_Odm, RegAddr) HAL_READ16(WIFI_REG_BASE, RegAddr) -#define ODM_Read4Byte(pDM_Odm, RegAddr) HAL_READ32(WIFI_REG_BASE, RegAddr) -#define ODM_Write1Byte(pDM_Odm, RegAddr, Data) HAL_WRITE8(WIFI_REG_BASE, RegAddr, Data) -#define ODM_Write2Byte(pDM_Odm, RegAddr, Data) HAL_WRITE16(WIFI_REG_BASE, addr, value) -#define ODM_Write4Byte(pDM_Odm, RegAddr, Data) HAL_WRITE32(WIFI_REG_BASE, addr, value) -#if (RTL8195A_SUPPORT == 1) -#define ODM_GetMACReg(pDM_Odm,RegAddr, BitMask) PHY_QueryBBReg_8195A((pDM_Odm->Adapter), (RegAddr), (BitMask)) -#define ODM_SetMACReg(pDM_Odm, RegAddr, BitMask, Data) PHY_SetBBReg_8195A((pDM_Odm->Adapter), (RegAddr), (BitMask), (Data)) -#define ODM_GetBBReg(pDM_Odm, RegAddr, BitMask) PHY_QueryBBReg_8195A((pDM_Odm->Adapter), (RegAddr), (BitMask)) -#define ODM_SetBBReg(pDM_Odm, RegAddr, BitMask, Data) PHY_SetBBReg_8195A((pDM_Odm->Adapter), (RegAddr), (BitMask), (Data)) -#endif - -#if (RTL8711B_SUPPORT ==1) -#define ODM_GetMACReg(pDM_Odm,RegAddr, BitMask) PHY_QueryBBReg_8711B((pDM_Odm->Adapter), (RegAddr), (BitMask)) -#define ODM_SetMACReg(pDM_Odm, RegAddr, BitMask, Data) PHY_SetBBReg_8711B((pDM_Odm->Adapter), (RegAddr), (BitMask), (Data)) -#define ODM_GetBBReg(pDM_Odm, RegAddr, BitMask) PHY_QueryBBReg_8711B((pDM_Odm->Adapter), (RegAddr), (BitMask)) -#define ODM_SetBBReg(pDM_Odm, RegAddr, BitMask, Data) PHY_SetBBReg_8711B((pDM_Odm->Adapter), (RegAddr), (BitMask), (Data)) -#endif -// -// =========== Extern Variable -// - -// -// =========== EXtern Function Prototype -// - - -#endif // __ROM_ODM_INTERFACE_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/Hal8195ARateAdaptive.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/Hal8195ARateAdaptive.h deleted file mode 100644 index b6d240e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/Hal8195ARateAdaptive.h +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright (c) 2013-2016 Realtek Semiconductor Corp. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __HALCOM_RATE_ADAPTIVE_RAM_H__ -#define __HALCOM_RATE_ADAPTIVE_RAM_H__ - -#if RATE_ADAPTIVE_SUPPORT - -/*--------------------------Define -------------------------------------------*/ - -#define FIRST_MACID 0 // This is the connection of STA to AP -// Rate index mapping -#define RATE_CCK_1M ODM_RATE1M -#define RATE_CCK_2M ODM_RATE2M -#define RATE_CCK_5M ODM_RATE5_5M -#define RATE_CCK_11M ODM_RATE11M -#define RATE_OFDM_6M ODM_RATE6M -#define RATE_OFDM_9M ODM_RATE9M -#define RATE_OFDM_12M ODM_RATE12M -#define RATE_OFDM_18M ODM_RATE18M -#define RATE_OFDM_24M ODM_RATE24M -#define RATE_OFDM_36M ODM_RATE36M -#define RATE_OFDM_48M ODM_RATE48M -#define RATE_OFDM_54M ODM_RATE54M -#define RATE_HT_MCS0 ODM_RATEMCS0 -#define RATE_HT_MCS1 ODM_RATEMCS1 -#define RATE_HT_MCS2 ODM_RATEMCS2 -#define RATE_HT_MCS3 ODM_RATEMCS3 -#define RATE_HT_MCS4 ODM_RATEMCS4 -#define RATE_HT_MCS5 ODM_RATEMCS5 -#define RATE_HT_MCS6 ODM_RATEMCS6 -#define RATE_HT_MCS7 ODM_RATEMCS7 -#define RATE_HT_MCS8 ODM_RATEMCS8 -#define RATE_HT_MCS9 ODM_RATEMCS9 -#define RATE_HT_MCS10 ODM_RATEMCS10 -#define RATE_HT_MCS11 ODM_RATEMCS11 -#define RATE_HT_MCS12 ODM_RATEMCS12 -#define RATE_HT_MCS13 ODM_RATEMCS13 -#define RATE_HT_MCS14 ODM_RATEMCS14 -#define RATE_HT_MCS15 ODM_RATEMCS15 - -#define MACID_NUM 128 - - - -// TX report format -#define TXRPT_SIZE 16 -//offset 0 -#define TXRPT_DATARATE (BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6) -#define TXRPT_SGI BIT7 -//offset 1 -#define TXRPT_PWRSTS (BIT0|BIT1|BIT2) -#define TXRPT_TRYNESSCNT (BIT3|BIT4|BIT5|BIT6) -#define TXRPT_TRYRATE BIT7 -//offset 2 -#define TXRPT_TRYRESULT BIT6 -#define TXRPT_TRYFINISH BIT7 -//offset 3 -#define TXRPT_PAUSERPT BIT6 -#define TXRPT_RESETRPT BIT7 -//offset 4 - -//offset 5 -#define TXRPT_BW (BIT0|BIT1) -#define TXRPT_PKTDROP BIT2 - - - -#define RATE_UP 1 -#define RATE_DOWN 2 - -#define RSSI_TH1 45 -#define RSSI_TH2 25 - -#define PERENTRY 27 -#define RETRYSIZE 5 -#define RATESIZE 20 -#define RAMASK_SIZE 8 - -#define SS_PT_TH_High 66 -#define SS_PT_TH_low 57 -#define SS_PT_off 48 -#define SS_RA_INIT_RATE_RSSI 30 -#define STEP_DROP 1 -#define CONFIG_SGI 0 -#define TRY_WAITING 10 - -// RA mask -#define Mask_length_REG 8 -#define Rate_id_NUM 9 // 6 rate id from reg -#define ARFB_table_NUM 7 - -#define TRY_NESS_CNT_IDX_SIZE 16 - -/*------------------------------Define Enum-----------------------------------*/ -typedef enum _RTL8195_RATEID_IDX_ { - MODE_BGN_40M_2SS = 0, - MODE_BGN_40M_1SS = 1, - MODE_BGN_20M_2SS_BN = 2, - MODE_BGN_20M_1SS_BN = 3, - MODE_GN_N2SS = 4, - MODE_GN_N1SS = 5, - MODE_BG = 6, - MODE_G = 7, - MODE_B = 8 -} RTL8195_RATEID_IDX, *PRTL8195_RATEID_IDX; - -typedef enum _VHT_HT_SWITCH_ { - TYPE_HT = 0, - TYPE_VHT = 1, - TYPE_MIX1 = 2, - TYPE_MIX2 = 3 -} VHT_SEL_SWITCH, *PVHT_SEL_SWITCH; - -/*--------------------------Define MACRO--------------------------------------*/ -#define TRYING_DISABLE 0 -#define TRYING_ENABLE 1 - -//RA MASK: INIT_RATE_MASK - -//if VHT_HT_SWITCH = 1, it means VHT. -//Bit[51:12] : VHT 1SS ~ VHT 4SS -//if VHT_HT_SWITCH = 0, it means HT. -//Bit[43:12] : HT 1SS ~ HT4SS - -//offset6 -//#define VHT_HT_SWITCH BIT4 - - -// H2C CMD -//offset0 -#define H2CID13_MACID 0x7F -//offset1 -#define H2CID13_RATEID 0x1F -#define H2CID13_SGI BIT7 - - - -//offset2 -#define H2CID13_BW (BIT0|BIT1) -#define H2CID13_enldpc BIT2 -#define H2CID13_NOUPDATE BIT3 -#define H2CID13_VHT_EN (BIT5|BIT4) -#define H2CID13_DISPT BIT6 -#define H2CID13_DISRA BIT7 - -//H2C AP_Req_Tx_Rpt -#define H2CID43_RTY_OK_TOTAL BIT0 -#define H2CID43_RTY_CNT_MACID BIT1 - - -//RAInfo -#define MASK_RA_ULDL_STATE BIT0 -#define MASK_RA_STBC_STATE BIT1 -#define MASK_RA_LDPC_CAP_STATE BIT2 -#define MASK_RA_SHORTCUT_STATE BIT3 -#define MASK_RA_SHORTCUT_FLAG BIT4 -#define MASK_RA_INIT_RATE_RSSI_STATE BIT5 -#define MASK_RA_BF_STATE BIT6 -#define MASK_RA_DELAY_RATE BIT7 - - - -#define RA_ULDL_STATE_SHT 0 -#define RA_STBC_STATE_SHT 1 -#define RA_LDPC_CAP_STATE_SHT 2 -#define RA_SHORTCUT_STATE_SHT 3 -#define RA_SHORTCUT_FLAG_SHT 4 -#define RA_INIT_RATE_RSSI_SHT 5 -#define RA_BF_STATE_SHT 6 -#define RA_DELAY_RATE_SHT 7 - -/*------------------------Export global variable------------------------------*/ -//2 Rate Adaptive -//HW Statistic -//extern MEMTYPE_XDATA u16 TOTAL[MACID_NUM]; -//extern MEMTYPE_XDATA u1Byte DROP[MACID_NUM]; -//extern MEMTYPE_XDATA u16 RTY[MACID_NUM][5]; - -//extern MEMTYPE_XDATA STAINFO_RA stainfo_ra[MACID_NUM]; -//extern MEMTYPE_XDATA u16 Nsc[MACID_NUM]; -//extern MEMTYPE_XDATA u1Byte RSSI[MACID_NUM]; // add by Gary -//extern MEMTYPE_XDATA u1Byte BUPDATE[MACID_NUM]; - -/*------------------------------Function declaration--------------------------*/ -VOID -InitBBNHM( - void -); - -VOID -BBNHM( - void -); - -VOID -ODM_InitRAInfo( - IN PDM_ODM_T pDM_Odm -); - -VOID -H2CHDL_Set_MACID_Config( - IN PDM_ODM_T pDM_Odm, - IN u1Byte *pbuf -); - -VOID -H2CHDL_SetRssiSingle( - u1Byte *pbuf -); - - -VOID -H2CHDL_APReqTxrpt( - u1Byte *pbuf -); - -VOID -H2CHDL_InitRateCollect( - u1Byte *pbuf -); - - -VOID -TryDone( - IN PDM_ODM_T pDM_Odm, - IN PODM_RA_INFO_T pRaInfo -); - -VOID -RateDownTrying( - IN PDM_ODM_T pDM_Odm, - IN PODM_RA_INFO_T pRaInfo -); - -VOID -RateDecisionRAM8195A( - IN PDM_ODM_T pDM_Odm, - IN PODM_RA_INFO_T pRaInfo -); - -VOID -GetRATRfromREG( - IN u16 reg_addr, - IN u1Byte macid -); - -VOID -PHY_DM_RA_SetRSSI_8195A( - IN PDM_ODM_T pDM_Odm, - IN u1Byte MacID, - IN u1Byte Rssi - ); - -#if 0 -extern void -Rate_trying_decision( - IN u1Byte macid, - IN u1Byte rate, - IN u1Byte datarc, - IN u1Byte aggnum -); -#endif - - -//debug -VOID -ArfrRefresh( - IN PDM_ODM_T pDM_Odm, - IN PODM_RA_INFO_T pRaInfo -); - -#endif //#if CONFIG_RATE_ADAPTIVE - -#endif //#ifndef __HALCOM_RATE_ADAPTIVE_RAM_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/Hal8195AReg.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/Hal8195AReg.h deleted file mode 100644 index 0ee85a6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/Hal8195AReg.h +++ /dev/null @@ -1,1371 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ****************************************************************************** - * - * Module: __INC_HAL8723BREG_H - * - * - * Note: 1. Define Mac register address and corresponding bit mask map - * - * - * Export: Constants, macro, functions(API), global variables(None). - * - * Abbrev: - * - * History: - * Data Who Remark - * - *****************************************************************************/ -#ifndef __INC_HAL8195AREG_H -#define __INC_HAL8195AREG_H - - - -//============================================================ -// -//============================================================ - -//----------------------------------------------------- -// -// 0x0000h ~ 0x00FFh System Configuration -// -//----------------------------------------------------- -#define REG_SYS_ISO_CTRL_8723B 0x0000 // 2 Byte -#define REG_SYS_FUNC_EN_8723B 0x0002 // 2 Byte -#define REG_APS_FSMCO_8723B 0x0004 // 4 Byte -#define REG_SYS_CLKR_8723B 0x0008 // 2 Byte -#define REG_9346CR_8723B 0x000A // 2 Byte -#define REG_EE_VPD_8723B 0x000C // 2 Byte -#define REG_AFE_MISC_8723B 0x0010 // 1 Byte -#define REG_SPS0_CTRL_8723B 0x0011 // 7 Byte -#define REG_SPS_OCP_CFG_8723B 0x0018 // 4 Byte -#define REG_RSV_CTRL_8723B 0x001C // 3 Byte -#define REG_RF_CTRL_8723B 0x001F // 1 Byte -#define REG_LPLDO_CTRL_8723B 0x0023 // 1 Byte -#define REG_AFE_XTAL_CTRL_8723B 0x0024 // 4 Byte -#define REG_AFE_PLL_CTRL_8723B 0x0028 // 4 Byte -#define REG_MAC_PLL_CTRL_EXT_8723B 0x002c // 4 Byte -#define REG_EFUSE_CTRL_8723B 0x0030 -#define REG_EFUSE_TEST_8723B 0x0034 -#define REG_PWR_DATA_8723B 0x0038 -#define REG_CAL_TIMER_8723B 0x003C -#define REG_ACLK_MON_8723B 0x003E -#define REG_GPIO_MUXCFG_8723B 0x0040 -#define REG_GPIO_IO_SEL_8723B 0x0042 -#define REG_MAC_PINMUX_CFG_8723B 0x0043 -#define REG_GPIO_PIN_CTRL_8723B 0x0044 -#define REG_GPIO_INTM_8723B 0x0048 -#define REG_LEDCFG0_8723B 0x004C -#define REG_LEDCFG1_8723B 0x004D -#define REG_LEDCFG2_8723B 0x004E -#define REG_LEDCFG3_8723B 0x004F -#define REG_FSIMR_8723B 0x0050 -#define REG_FSISR_8723B 0x0054 -#define REG_HSIMR_8723B 0x0058 -#define REG_HSISR_8723B 0x005c -#define REG_GPIO_EXT_CTRL 0x0060 -#define REG_MULTI_FUNC_CTRL_8723B 0x0068 -#define REG_GPIO_STATUS_8723B 0x006C -#define REG_SDIO_CTRL_8723B 0x0070 -#define REG_OPT_CTRL_8723B 0x0074 -#define REG_AFE_XTAL_CTRL_EXT_8723B 0x0078 -#define REG_MCUFWDL_8723B 0x0080 -#define REG_BT_PATCH_STATUS_8723B 0x0088 -#define REG_HIMR0_8723B 0x00B0 -#define REG_HISR0_8723B 0x00B4 -#define REG_HIMR1_8723B 0x00B8 -#define REG_HISR1_8723B 0x00BC -#define REG_PMC_DBG_CTRL2_8723B 0x00CC -#define REG_EFUSE_BURN_GNT_8723B 0x00CF -#define REG_HPON_FSM_8723B 0x00EC -#define REG_SYS_CFG_8723B 0x00F0 -#define REG_SYS_CFG1_8723B 0x00FC -#define REG_ROM_VERSION 0x00FD - -//----------------------------------------------------- -// -// 0x0100h ~ 0x01FFh MACTOP General Configuration -// -//----------------------------------------------------- -#define REG_CR_8723B 0x0100 -#define REG_PBP_8723B 0x0104 -#define REG_PKT_BUFF_ACCESS_CTRL_8723B 0x0106 -#define REG_TRXDMA_CTRL_8723B 0x010C -#define REG_TRXFF_BNDY_8723B 0x0114 -#define REG_TRXFF_STATUS_8723B 0x0118 -#define REG_RXFF_PTR_8723B 0x011C -#define REG_CPWM_8723B 0x012F -#define REG_FWIMR_8723B 0x0130 -#define REG_FWISR_8723B 0x0134 -#define REG_FTIMR_8723B 0x0138 -#define REG_PKTBUF_DBG_CTRL_8723B 0x0140 -#define REG_RXPKTBUF_CTRL_8723B 0x0142 -#define REG_PKTBUF_DBG_DATA_L_8723B 0x0144 -#define REG_PKTBUF_DBG_DATA_H_8723B 0x0148 - -#define REG_TC0_CTRL_8723B 0x0150 -#define REG_TC1_CTRL_8723B 0x0154 -#define REG_TC2_CTRL_8723B 0x0158 -#define REG_TC3_CTRL_8723B 0x015C -#define REG_TC4_CTRL_8723B 0x0160 -#define REG_TCUNIT_BASE_8723B 0x0164 -#define REG_RSVD3_8723B 0x0168 -#define REG_C2HEVT_MSG_NORMAL_8723B 0x01A0 -#define REG_C2HEVT_CMD_SEQ_88XX 0x01A1 -#define REG_C2hEVT_CMD_CONTENT_88XX 0x01A2 -#define REG_C2HEVT_CMD_LEN_88XX 0x01AE -#define REG_C2HEVT_CLEAR_8723B 0x01AF -#define REG_MCUTST_1_8723B 0x01C0 -#define REG_MCUTST_WOWLAN_8723B 0x01C7 -#define REG_FMETHR_8723B 0x01C8 -#define REG_HMETFR_8723B 0x01CC -#define REG_HMEBOX_0_8723B 0x01D0 -#define REG_HMEBOX_1_8723B 0x01D4 -#define REG_HMEBOX_2_8723B 0x01D8 -#define REG_HMEBOX_3_8723B 0x01DC -#define REG_LLT_INIT_8723B 0x01E0 -#define REG_HMEBOX_EXT0_8723B 0x01F0 -#define REG_HMEBOX_EXT1_8723B 0x01F4 -#define REG_HMEBOX_EXT2_8723B 0x01F8 -#define REG_HMEBOX_EXT3_8723B 0x01FC - -//----------------------------------------------------- -// -// 0x0200h ~ 0x027Fh TXDMA Configuration -// -//----------------------------------------------------- -#define REG_RQPN_8723B 0x0200 -#define REG_FIFOPAGE_8723B 0x0204 -#define REG_TDECTRL_8723B 0x0208 -#define REG_TXDMA_OFFSET_CHK_8723B 0x020C -#define REG_TXDMA_STATUS_8723B 0x0210 -#define REG_RQPN_NPQ_8723B 0x0214 -#define REG_TDECTRL1_8195A 0x0228 - - -//----------------------------------------------------- -// -// 0x0280h ~ 0x02FFh RXDMA Configuration -// -//----------------------------------------------------- -#define REG_RXDMA_AGG_PG_TH_8723B 0x0280 -#define REG_FW_UPD_RDPTR_8723B 0x0284 // FW shall update this register before FW write RXPKT_RELEASE_POLL to 1 -#define REG_RXDMA_CONTROL_8723B 0x0286 // Control the RX DMA. -#define REG_RXPKT_NUM_8723B 0x0287 // The number of packets in RXPKTBUF. -#define REG_RXDMA_STATUS_8723B 0x0288 -#define REG_RXDMA_PRO_8723B 0x0290 -#define REG_EARLY_MODE_CONTROL_8723B 0x02BC -#define REG_RSVD5_8723B 0x02F0 -#define REG_RSVD6_8723B 0x02F4 - - -//----------------------------------------------------- -// -// 0x0300h ~ 0x03FFh PCIe -// -//----------------------------------------------------- -#define REG_PCIE_CTRL_REG_8723B 0x0300 -#define REG_INT_MIG_8723B 0x0304 // Interrupt Migration -#define REG_BCNQ_DESA_8723B 0x0308 // TX Beacon Descriptor Address -#define REG_HQ_DESA_8723B 0x0310 // TX High Queue Descriptor Address -#define REG_MGQ_DESA_8723B 0x0318 // TX Manage Queue Descriptor Address -#define REG_VOQ_DESA_8723B 0x0320 // TX VO Queue Descriptor Address -#define REG_VIQ_DESA_8723B 0x0328 // TX VI Queue Descriptor Address -#define REG_BEQ_DESA_8723B 0x0330 // TX BE Queue Descriptor Address -#define REG_BKQ_DESA_8723B 0x0338 // TX BK Queue Descriptor Address -#define REG_RX_DESA_8723B 0x0340 // RX Queue Descriptor Address -#define REG_DBI_WDATA_8723B 0x0348 // DBI Write Data -#define REG_DBI_RDATA_8723B 0x034C // DBI Read Data -#define REG_DBI_ADDR_8723B 0x0350 // DBI Address -#define REG_DBI_FLAG_8723B 0x0352 // DBI Read/Write Flag -#define REG_MDIO_WDATA_8723B 0x0354 // MDIO for Write PCIE PHY -#define REG_MDIO_RDATA_8723B 0x0356 // MDIO for Reads PCIE PHY -#define REG_MDIO_CTL_8723B 0x0358 // MDIO for Control -#define REG_DBG_SEL_8723B 0x0360 // Debug Selection Register -#define REG_PCIE_HRPWM_8723B 0x0361 //PCIe RPWM -#define REG_PCIE_HCPWM_8723B 0x0363 //PCIe CPWM -#define REG_PCIE_MULTIFET_CTRL_8723B 0x036A //PCIE Multi-Fethc Control - - -// spec version 11 -//----------------------------------------------------- -// -// 0x0400h ~ 0x047Fh Protocol Configuration -// -//----------------------------------------------------- -#define REG_VOQ_INFORMATION_8723B 0x0400 -#define REG_VIQ_INFORMATION_8723B 0x0404 -#define REG_BEQ_INFORMATION_8723B 0x0408 -#define REG_BKQ_INFORMATION_8723B 0x040C -#define REG_MGQ_INFORMATION_8723B 0x0410 -#define REG_HGQ_INFORMATION_8723B 0x0414 -#define REG_BCNQ_INFORMATION_8723B 0x0418 -#define REG_TXPKT_EMPTY_8723B 0x041A - -#define REG_FWHW_TXQ_CTRL_8723B 0x0420 -#define REG_HWSEQ_CTRL_8723B 0x0423 -#define REG_TXPKTBUF_BCNQ_BDNY_8723B 0x0424 -#define REG_TXPKTBUF_MGQ_BDNY_8723B 0x0425 -#define REG_LIFECTRL_CTRL_8723B 0x0426 -#define REG_MULTI_BCNQ_OFFSET_8723B 0x0427 -#define REG_SPEC_SIFS_8723B 0x0428 -#define REG_RL_8723B 0x042A -#define REG_TXBF_CTRL_8723B 0x042C -#define REG_DARFRC_8723B 0x0430 -#define REG_RARFRC_8723B 0x0438 -#define REG_RRSR_8723B 0x0440 -#define REG_ARFR0_8723B 0x0444 -#define REG_ARFR1_8723B 0x044C -#define REG_CCK_CHECK_8723B 0x0454 -#define REG_AMPDU_MAX_TIME_8723B 0x0456 -#define REG_TXPKTBUF_BCNQ_BDNY1_8723B 0x0457 - -#define REG_AMPDU_MAX_LENGTH_8195A 0x0458 -#define REG_TXPKTBUF_WMAC_LBK_BF_HD_8723B 0x045D -#define REG_NDPA_OPT_CTRL_8723B 0x045F -#define REG_FAST_EDCA_CTRL_8723B 0x0460 -#define REG_RD_RESP_PKT_TH_8723B 0x0463 -#define REG_SPC_W_PTR 0x47E -#define REG_SPC_R_PTR 0x47F -#define REG_DATA_SC_8723B 0x0483 -#define REG_TXRPT_START_OFFSET 0x04AC -#define REG_POWER_STAGE1_8723B 0x04B4 -#define REG_POWER_STAGE2_8723B 0x04B8 -#define REG_AMPDU_BURST_MODE_8723B 0x04BC -#define REG_PKT_VO_VI_LIFE_TIME_8723B 0x04C0 -#define REG_PKT_BE_BK_LIFE_TIME_8723B 0x04C2 -#define REG_STBC_SETTING_8723B 0x04C4 -#define REG_HT_SINGLE_AMPDU_8723B 0x04C7 -#define REG_PROT_MODE_CTRL_8723B 0x04C8 -#define REG_MAX_AGGR_NUM_8723B 0x04CA -#define REG_RTS_MAX_AGGR_NUM_8723B 0x04CB -#define REG_BAR_MODE_CTRL_8723B 0x04CC -#define REG_RA_TRY_RATE_AGG_LMT_8723B 0x04CF -#define REG_MACID_PKT_DROP0_8723B 0x04D0 - -//----------------------------------------------------- -// -// 0x0500h ~ 0x05FFh EDCA Configuration -// -//----------------------------------------------------- -#define REG_EDCA_VO_PARAM_8723B 0x0500 -#define REG_EDCA_VI_PARAM_8723B 0x0504 -#define REG_EDCA_BE_PARAM_8723B 0x0508 -#define REG_EDCA_BK_PARAM_8723B 0x050C -#define REG_BCNTCFG_8723B 0x0510 -#define REG_PIFS_8723B 0x0512 -#define REG_RDG_PIFS_8723B 0x0513 -#define REG_SIFS_CTX_8723B 0x0514 -#define REG_SIFS_TRX_8723B 0x0516 -#define REG_AGGR_BREAK_TIME_8723B 0x051A -#define REG_SLOT_8723B 0x051B -#define REG_TX_PTCL_CTRL_8723B 0x0520 -#define REG_TXPAUSE_8723B 0x0522 -#define REG_DIS_TXREQ_CLR_8723B 0x0523 -#define REG_RD_CTRL_8723B 0x0524 -// -// Format for offset 540h-542h: -// [3:0]: TBTT prohibit setup in unit of 32us. The time for HW getting beacon content before TBTT. -// [7:4]: Reserved. -// [19:8]: TBTT prohibit hold in unit of 32us. The time for HW holding to send the beacon packet. -// [23:20]: Reserved -// Description: -// | -// |<--Setup--|--Hold------------>| -// --------------|---------------------- -// | -// TBTT -// Note: We cannot update beacon content to HW or send any AC packets during the time between Setup and Hold. -// Described by Designer Tim and Bruce, 2011-01-14. -// -#define REG_TBTT_PROHIBIT_8723B 0x0540 -#define REG_RD_NAV_NXT_8723B 0x0544 -#define REG_NAV_PROT_LEN_8723B 0x0546 -#define REG_BCN_CTRL_8723B 0x0550 -#define REG_BCN_CTRL_1_8723B 0x0551 -#define REG_MBID_NUM_8723B 0x0552 -#define REG_DUAL_TSF_RST_8723B 0x0553 -#define REG_BCN_INTERVAL_8723B 0x0554 -#define REG_DRVERLYINT_8723B 0x0558 -#define REG_BCNDMATIM_8723B 0x0559 -#define REG_ATIMWND_8723B 0x055A -#define REG_USTIME_TSF_8723B 0x055C -#define REG_BCN_MAX_ERR_8723B 0x055D -#define REG_RXTSF_OFFSET_CCK_8723B 0x055E -#define REG_RXTSF_OFFSET_OFDM_8723B 0x055F -#define REG_TSFTR_8723B 0x0560 -#define REG_CTWND_8723B 0x0572 -#define REG_BCNIVLCUNT_8723B 0x0573 -#define REG_SECONDARY_CCA_CTRL_8723B 0x0577 -#define REG_PSTIMER_8723B 0x0580 -#define REG_TIMER0_8723B 0x0584 -#define REG_TIMER1_8723B 0x0588 -#define REG_ACMHWCTRL_8723B 0x05C0 -#define REG_SCH_TXCMD_8723B 0x05F8 - -//----------------------------------------------------- -// -// 0x0600h ~ 0x07FFh WMAC Configuration -// -//----------------------------------------------------- -#define REG_MAC_CR_8723B 0x0600 -#define REG_TCR_8723B 0x0604 -#define REG_RCR_8723B 0x0608 -#define REG_RX_PKT_LIMIT_8723B 0x060C -#define REG_RX_DLK_TIME_8723B 0x060D -#define REG_RX_DRVINFO_SZ_8723B 0x060F - -#define REG_MACID_8723B 0x0610 -#define REG_BSSID_8723B 0x0618 -#define REG_MAR_8723B 0x0620 -#define REG_MBIDCAMCFG_8723B 0x0628 - -#define REG_USTIME_EDCA_8723B 0x0638 -#define REG_MAC_SPEC_SIFS_8723B 0x063A -#define REG_RESP_SIFP_CCK_8723B 0x063C -#define REG_RESP_SIFS_OFDM_8723B 0x063E -#define REG_ACKTO_8723B 0x0640 -#define REG_CTS2TO_8723B 0x0641 -#define REG_EIFS_8723B 0x0642 - -#define REG_NAV_UPPER_8723B 0x0652 // unit of 128 -#define REG_RTR_8723B 0x0662 -#define REG_TRXPTCL_CTL_8723B 0x0668 - -// Security -#define REG_CAMCMD_8723B 0x0670 -#define REG_CAMWRITE_8723B 0x0674 -#define REG_CAMREAD_8723B 0x0678 -#define REG_CAMDBG_8723B 0x067C -#define REG_SECCFG_8723B 0x0680 - -// Power -#define REG_WOW_CTRL_8723B 0x0690 -#define REG_PS_RX_INFO_8723B 0x0692 -#define REG_UAPSD_TID_8723B 0x0693 -#define REG_WKFMCAM_CMD_8723B 0x0698 -#define REG_WKFMCAM_NUM_8723B 0x0698 -#define REG_WKFMCAM_RWD_8723B 0x069C -#define REG_RXFLTMAP0_8723B 0x06A0 -#define REG_RXFLTMAP1_8723B 0x06A2 -#define REG_RXFLTMAP2_8723B 0x06A4 -#define REG_BCN_PSR_RPT_8723B 0x06A8 -#define REG_BT_COEX_TABLE_8723B 0x06C0 -#define REG_BFMER0_INFO_8723B 0x06E4 -#define REG_BFMER1_INFO_8723B 0x06EC -#define REG_CSI_RPT_PARAM_BW20_8723B 0x06F4 -#define REG_CSI_RPT_PARAM_BW40_8723B 0x06F8 -#define REG_CSI_RPT_PARAM_BW80_8723B 0x06FC - -// Hardware Port 2 -#define REG_MACID1_8723B 0x0700 -#define REG_BSSID1_8723B 0x0708 -#define REG_BFMEE_SEL_8723B 0x0714 -#define REG_SND_PTCL_CTRL_8723B 0x0718 - - -//----------------------------------------------------- -// -// 0xFE00h ~ 0xFE55h USB Configuration -// -//----------------------------------------------------- -/* -#define REG_USB_INFO 0xFE17 -#define REG_USB_SPECIAL_OPTION 0xFE55 -#define REG_USB_DMA_AGG_TO 0xFE5B -#define REG_USB_AGG_TO 0xFE5C -#define REG_USB_AGG_TH 0xFE5D - - -// For normal chip -#define REG_NORMAL_SIE_VID 0xFE60 // 0xFE60~0xFE61 -#define REG_NORMAL_SIE_PID 0xFE62 // 0xFE62~0xFE63 -#define REG_NORMAL_SIE_OPTIONAL 0xFE64 -#define REG_NORMAL_SIE_EP 0xFE65 // 0xFE65~0xFE67 -#define REG_NORMAL_SIE_PHY 0xFE68 // 0xFE68~0xFE6B -#define REG_NORMAL_SIE_OPTIONAL2 0xFE6C -#define REG_NORMAL_SIE_GPS_EP 0xFE6D // 0xFE6D, for RTL8723 only. -#define REG_NORMAL_SIE_MAC_ADDR 0xFE70 // 0xFE70~0xFE75 -#define REG_NORMAL_SIE_STRING 0xFE80 // 0xFE80~0xFEDF -*/ - -//----------------------------------------------------- -// -// Redifine 8192C register definition for compatibility -// -//----------------------------------------------------- - -// TODO: use these definition when using REG_xxx naming rule. -// NOTE: DO NOT Remove these definition. Use later. -#define EFUSE_CTRL_8723B REG_EFUSE_CTRL_8723B // E-Fuse Control. -#define EFUSE_TEST_8723B REG_EFUSE_TEST_8723B // E-Fuse Test. -#define MSR_8723B (REG_CR_8723B + 2) // Media Status register -#define ISR_8723B REG_HISR0_8723B -#define TSFR_8723B REG_TSFTR_8723B // Timing Sync Function Timer Register. - -#define PBP_8723B REG_PBP_8723B - -// Redifine MACID register, to compatible prior ICs. -#define IDR0_8723B REG_MACID_8723B // MAC ID Register, Offset 0x0050-0x0053 -#define IDR4_8723B (REG_MACID_8723B + 4) // MAC ID Register, Offset 0x0054-0x0055 - - -// -// 9. Security Control Registers (Offset: ) -// -#define RWCAM_8723B REG_CAMCMD_8723B //IN 8190 Data Sheet is called CAMcmd -#define WCAMI_8723B REG_CAMWRITE_8723B // Software write CAM input content -#define RCAMO_8723B REG_CAMREAD_8723B // Software read/write CAM config -#define CAMDBG_8723B REG_CAMDBG_8723B -#define SECR_8723B REG_SECCFG_8723B //Security Configuration Register - -/* - -// Unused register -#define UnusedRegister 0x1BF -#define DCAM UnusedRegister -#define PSR UnusedRegister -#define BBAddr UnusedRegister -#define PhyDataR UnusedRegister - - - -//---------------------------------------------------------------------------- -// 8192C Cmd9346CR bits (Offset 0xA, 16bit) -//---------------------------------------------------------------------------- -#define CmdEEPROM_En BIT5 // EEPROM enable when set 1 -#define CmdEERPOMSEL BIT4 // System EEPROM select, 0: boot from E-FUSE, 1: The EEPROM used is 9346 -#define Cmd9346CR_9356SEL BIT4 - -//---------------------------------------------------------------------------- -// 8192C GPIO MUX Configuration Register (offset 0x40, 4 byte) -//---------------------------------------------------------------------------- -#define GPIOSEL_GPIO BIT0 -#define GPIOSEL_ENBT BIT5 - -//---------------------------------------------------------------------------- -// 8192C GPIO PIN Control Register (offset 0x44, 4 byte) -//---------------------------------------------------------------------------- -#define GPIO_IN REG_GPIO_PIN_CTRL_8195 // GPIO pins input value -#define GPIO_OUT (REG_GPIO_PIN_CTRL_8195+1) // GPIO pins output value -#define GPIO_IO_SEL (REG_GPIO_PIN_CTRL_8195+2) // GPIO pins output enable when a bit is set to "1"; otherwise, input is configured. -#define GPIO_MOD (REG_GPIO_PIN_CTRL_8195+3) -#define HAL_8192C_HW_GPIO_WPS_BIT BIT2 - -//---------------------------------------------------------------------------- -// 8723/8188E Host System Interrupt Mask Register (offset 0x58, 32 byte) -//---------------------------------------------------------------------------- -#define HSIMR_GPIO12_0_INT_EN BIT0 -#define HSIMR_SPS_OCP_INT_EN BIT5 -#define HSIMR_RON_INT_EN BIT6 -#define HSIMR_PDN_INT_EN BIT7 -#define HSIMR_GPIO9_INT_EN BIT25 - - -//---------------------------------------------------------------------------- -// 8723/8188E Host System Interrupt Status Register (offset 0x5C, 32 byte) -//---------------------------------------------------------------------------- -#define HSISR_GPIO12_0_INT BIT0 -#define HSISR_SPS_OCP_INT BIT5 -#define HSISR_RON_INT_EN BIT6 -#define HSISR_PDNINT BIT7 -#define HSISR_GPIO9_INT BIT25 - -//---------------------------------------------------------------------------- -// 8195 (MSR) Media Status Register (Offset 0x4C, 8 bits) -//---------------------------------------------------------------------------- -#define MSR_NOLINK 0x00 -#define MSR_ADHOC 0x01 -#define MSR_INFRA 0x02 -#define MSR_AP 0x03 - -//---------------------------------------------------------------------------- -// 88EU (MSR) Media Status Register (Offset 0x4C, 8 bits) -//---------------------------------------------------------------------------- -#define USB_INTR_CONTENT_HISR_OFFSET 48 -#define USB_INTR_CONTENT_HISRE_OFFSET 52 - - -// -// 6. Adaptive Control Registers (Offset: 0x0160 - 0x01CF) -// -//---------------------------------------------------------------------------- -// 8192C Response Rate Set Register (offset 0x181, 24bits) -//---------------------------------------------------------------------------- -#define RRSR_1M BIT0 -#define RRSR_2M BIT1 -#define RRSR_5_5M BIT2 -#define RRSR_11M BIT3 -#define RRSR_6M BIT4 -#define RRSR_9M BIT5 -#define RRSR_12M BIT6 -#define RRSR_18M BIT7 -#define RRSR_24M BIT8 -#define RRSR_36M BIT9 -#define RRSR_48M BIT10 -#define RRSR_54M BIT11 -#define RRSR_MCS0 BIT12 -#define RRSR_MCS1 BIT13 -#define RRSR_MCS2 BIT14 -#define RRSR_MCS3 BIT15 -#define RRSR_MCS4 BIT16 -#define RRSR_MCS5 BIT17 -#define RRSR_MCS6 BIT18 -#define RRSR_MCS7 BIT19 - - -//---------------------------------------------------------------------------- -// 8192C Response Rate Set Register (offset 0x1BF, 8bits) -//---------------------------------------------------------------------------- -// WOL bit information -#define HAL92C_WOL_PTK_UPDATE_EVENT BIT0 -#define HAL92C_WOL_GTK_UPDATE_EVENT BIT1 - - -//---------------------------------------------------------------------------- -// 8192C Rate Definition -//---------------------------------------------------------------------------- -//CCK -#define RATR_1M 0x00000001 -#define RATR_2M 0x00000002 -#define RATR_55M 0x00000004 -#define RATR_11M 0x00000008 -//OFDM -#define RATR_6M 0x00000010 -#define RATR_9M 0x00000020 -#define RATR_12M 0x00000040 -#define RATR_18M 0x00000080 -#define RATR_24M 0x00000100 -#define RATR_36M 0x00000200 -#define RATR_48M 0x00000400 -#define RATR_54M 0x00000800 -//MCS 1 Spatial Stream -#define RATR_MCS0 0x00001000 -#define RATR_MCS1 0x00002000 -#define RATR_MCS2 0x00004000 -#define RATR_MCS3 0x00008000 -#define RATR_MCS4 0x00010000 -#define RATR_MCS5 0x00020000 -#define RATR_MCS6 0x00040000 -#define RATR_MCS7 0x00080000 -//MCS 2 Spatial Stream -#define RATR_MCS8 0x00100000 -#define RATR_MCS9 0x00200000 -#define RATR_MCS10 0x00400000 -#define RATR_MCS11 0x00800000 -#define RATR_MCS12 0x01000000 -#define RATR_MCS13 0x02000000 -#define RATR_MCS14 0x04000000 -#define RATR_MCS15 0x08000000 - - -// NOTE: For 92CU - Ziv -//CCK -#define RATE_1M BIT(0) -#define RATE_2M BIT(1) -#define RATE_5_5M BIT(2) -#define RATE_11M BIT(3) -//OFDM -#define RATE_6M BIT(4) -#define RATE_9M BIT(5) -#define RATE_12M BIT(6) -#define RATE_18M BIT(7) -#define RATE_24M BIT(8) -#define RATE_36M BIT(9) -#define RATE_48M BIT(10) -#define RATE_54M BIT(11) -//MCS 1 Spatial Stream -#define RATE_MCS0 BIT(12) -#define RATE_MCS1 BIT(13) -#define RATE_MCS2 BIT(14) -#define RATE_MCS3 BIT(15) -#define RATE_MCS4 BIT(16) -#define RATE_MCS5 BIT(17) -#define RATE_MCS6 BIT(18) -#define RATE_MCS7 BIT(19) -//MCS 2 Spatial Stream -#define RATE_MCS8 BIT(20) -#define RATE_MCS9 BIT(21) -#define RATE_MCS10 BIT(22) -#define RATE_MCS11 BIT(23) -#define RATE_MCS12 BIT(24) -#define RATE_MCS13 BIT(25) -#define RATE_MCS14 BIT(26) -#define RATE_MCS15 BIT(27) - - - - -// ALL CCK Rate -#define RATE_ALL_CCK RATR_1M|RATR_2M|RATR_55M|RATR_11M -#define RATE_ALL_OFDM_AG RATR_6M|RATR_9M|RATR_12M|RATR_18M|RATR_24M|\ - RATR_36M|RATR_48M|RATR_54M -#define RATE_ALL_OFDM_1SS RATR_MCS0|RATR_MCS1|RATR_MCS2|RATR_MCS3 |\ - RATR_MCS4|RATR_MCS5|RATR_MCS6 |RATR_MCS7 -#define RATE_ALL_OFDM_2SS RATR_MCS8|RATR_MCS9 |RATR_MCS10|RATR_MCS11|\ - RATR_MCS12|RATR_MCS13|RATR_MCS14|RATR_MCS15 - -#define RATE_BITMAP_ALL 0xFFFFF - -// Only use CCK 1M rate for ACK -#define RATE_RRSR_CCK_ONLY_1M 0xFFFF1 -//---------------------------------------------------------------------------- -// 8192C BW_OPMODE bits (Offset 0x203, 8bit) -//---------------------------------------------------------------------------- -#define BW_OPMODE_20MHZ BIT2 -#define BW_OPMODE_5G BIT1 - -// -// 10. Power Save Control Registers (Offset: 0x0260 - 0x02DF) -// -#define WOW_PMEN BIT0 // Power management Enable. -#define WOW_WOMEN BIT1 // WoW function on or off. -#define WOW_MAGIC BIT2 // Magic packet -#define WOW_UWF BIT3 // Unicast Wakeup frame. - -*/ - -//---------------------------------------------------------------------------- -// 8195 IMR/ISR bits (offset 0x80, 8bits) -//---------------------------------------------------------------------------- -#define IMR_WL_FTINT_MSK_8195A BIT31 //The interrupt mask from WL page 1 interrupt source -#define IMR_TSF_BIT32_TOGGLE_MSK_V1_8195A BIT10 //Enable TSF_BIT32_TOGGLE interrupt source -#define IMR_P2P_RFOFF_INT_MSK_8195A BIT9 //P2P NoA RF off time indication interrupt mask -#define IMR_P2P_RFON_INT_MSK_8195A BIT8 //P2P NoA RF on time indication interrupt mask -#define IMR_PSTIMER_MSK_8195A BIT6 //Enable PSTimer interrupt source -#define IMR_TIMEOUT1_MSK_8195A BIT5 //Enable Timer1 interrupt source -#define IMR_TIMEOUT0_MSK_8195A BIT4 //Enable Timer0 interrupt source -#define IMR_MTI_BCNIVLEAR_INT_MSK_8195A BIT1 //Enable MTI_BCNIVLEAR _INT -#define IMR_BCNERLY_MSK_8195A BIT0 //This interrupt is issued at the time set by DRVERLYINT register before TBTT time. - - -//---------------------------------------------------------------------------- -// 8195 IMR/ISR bits (offset 0x134, 8bits) -//---------------------------------------------------------------------------- -#define IMR_SOUND_DONE_MSK_8195A BIT30 //Be a beamformer, this interrupt is issued at the time after sounding finish -#define IMR_TRY_DONE_MSK_8195A BIT29 //When TRY_FINISH is deasserted, this interrupt is issued to inform MCU -#define IMR_TXRPT_CNT_FULL_MSK_8195A BIT28 -#define IMR_WLACTOFF_INT_EN_8195A BIT27 -#define IMR_WLACTON_INT_EN_8195A BIT26 -#define IMR_TXPKTIN_INT_EN_8195A BIT25 -#define IMR_TXBCN0OK_8195A BIT24 // Transmit Beacon0 OK -#define IMR_TXBCN0ERR_8195A BIT23 // Transmit Beacon0 Error -#define IMR_RX_UMD0_EN_8195A BIT22 -#define IMR_RX_UMD1_EN_8195A BIT21 -#define IMR_RX_BMD0_EN_8195A BIT20 -#define IMR_RX_BMD1_EN_8195A BIT19 -#define IMR_BCN_RX_INT_EN_8195A BIT18 -#define IMR_TBTTINT_MSK_8195A BIT17 - -#define IMR_BCNDMA7_MSK_8195A BIT15 //When BCNDMA interval arrives before TBTT7, - //this interrupt informs MCU to prepare related beacon tasks. -#define IMR_BCNDMA6_MSK_8195A BIT14 //When BCNDMA interval arrives before TBTT6, - //this interrupt informs MCU to prepare related beacon tasks. -#define IMR_BCNDMA5_MSK_8195A BIT13 //When BCNDMA interval arrives before TBTT5, - //this interrupt informs MCU to prepare related beacon tasks. -#define IMR_BCNDMA4_MSK_8195A BIT12 //When BCNDMA interval arrives before TBTT4, - //this interrupt informs MCU to prepare related beacon tasks. -#define IMR_BCNDMA3_MSK_8195A BIT11 //When BCNDMA interval arrives before TBTT3, - //this interrupt informs MCU to prepare related beacon tasks. -#define IMR_BCNDMA2_MSK_8195A BIT10 //When BCNDMA interval arrives before TBTT2, - //this interrupt informs MCU to prepare related beacon tasks. -#define IMR_BCNDMA1_MSK_8195A BIT9 //When BCNDMA interval arrives before TBTT1, - //this interrupt informs MCU to prepare related beacon tasks. -#define IMR_BCNDMA0_MSK_8195A BIT8 //When BCNDMA interval arrives before TBTT0, - //this interrupt informs MCU to prepare related beacon tasks. -#define IMR_STBY_MSK_8195A BIT7 //Lower Power Standby Interrupt mask -#define IMR_CTWEndINT_MSK_8195A BIT6 //This bit masks the CTWindow End interrupt. -#define IMR_TXFOVW_MSK_8195A BIT5 //"Transmit packet buffer Overflow.This bit is set to 1 when one or more of the hardware transmit queues is full" -#define IMR_FOVW_MSK_8195A BIT4 //"Rx packet buffer OverflowSet this bit to one when Rx packet buffer write pointer hits read pointer. " -#define IMR_RXDONE_MSK_8195A BIT3 //Rx Packet done for 8051 -#define IMR_ERRORHDL_MSK_8195A BIT2 //FWHW/ TXDMA/ RXDMA/ WMAC error status interrupt -#define IMR_TXCCX_MSK_FW_8195A BIT1 //CCX PKT TX Report Interrupt -#define IMR_TXCLOSE_MSK_8195A BIT0 //TX Finish (Ack/BA process Finish) Interrupt. - - -//---------------------------------------------------------------------------- -// 8195 IMR/ISR bits (offset 0x3EC, 8bits) -//---------------------------------------------------------------------------- -#define IMR_BCNDERR7_8195A BIT31 // Beacon Queue DMA Error -#define IMR_BCNDERR6_8195A BIT30 // Beacon Queue DMA Error -#define IMR_BCNDERR5_8195A BIT29 // Beacon Queue DMA Error -#define IMR_BCNDERR4_8195A BIT28 // Beacon Queue DMA Error -#define IMR_BCNDERR3_8195A BIT27 // Beacon Queue DMA Error -#define IMR_BCNDERR2_8195A BIT26 // Beacon Queue DMA Error -#define IMR_BCNDERR1_8195A BIT25 // Beacon Queue DMA Error -#define IMR_BCNDERR0_8195A BIT24 // Beacon Queue DMA Error -#define IMR_BCNDMAOK7_8195A BIT23 // Beacon DMA OK Interrupt 7 -#define IMR_BCNDMAOK6_8195A BIT22 // Beacon DMA OK Interrupt 6 -#define IMR_BCNDMAOK5_8195A BIT21 // Beacon DMA OK Interrupt 5 -#define IMR_BCNDMAOK4_8195A BIT20 // Beacon DMA OK Interrupt 4 -#define IMR_BCNDMAOK3_8195A BIT19 // Beacon DMA OK Interrupt 3 -#define IMR_BCNDMAOK2_8195A BIT18 // Beacon DMA OK Interrupt 2 -#define IMR_BCNDMAOK1_8195A BIT17 // Beacon DMA OK Interrupt 1 -#define IMR_BCNDMAOK0_8195A BIT16 // Beacon DMA OK Interrupt 0 -#define IMR_H7DOK_8195A BIT15 // High Queue DMA OK Interrup 7 -#define IMR_H6DOK_8195A BIT14 // High Queue DMA OK Interrup 6 -#define IMR_H5DOK_8195A BIT13 // High Queue DMA OK Interrup 5 -#define IMR_H4DOK_8195A BIT12 // High Queue DMA OK Interrup 4 -#define IMR_H3DOK_8195A BIT11 // High Queue DMA OK Interrup 3 -#define IMR_H2DOK_8195A BIT10 // High Queue DMA OK Interrup 2 -#define IMR_H1DOK_8195A BIT9 // High Queue DMA OK Interrup 1 -#define IMR_H0DOK_8195A BIT8 // High Queue DMA OK Interrup 1 -#define IMR_MGNTDOK_8195A BIT6 // Management Queue DMA OK -#define IMR_BKDOK_8195A BIT5 // AC_BK DMA OK -#define IMR_BEDOK_8195A BIT4 // AC_BE DMA OK -#define IMR_VIDOK_8195A BIT3 // AC_VI DMA OK -#define IMR_VODOK_8195A BIT2 // AC_VO DMA OK -#define IMR_RDU_8195A BIT1 // Rx Descriptor Unavailable -#define IMR_ROK_8195A BIT0 // Receive DMA OK - - - - - - - -/*=================================================================== -===================================================================== -Here the register defines are for 92C. When the define is as same with 92C, -we will use the 92C's define for the consistency -So the following defines for 92C is not entire!!!!!! -===================================================================== -=====================================================================*/ -/* -Based on Datasheet V33---090401 -Register Summary -Current IOREG MAP -0x0000h ~ 0x00FFh System Configuration (256 Bytes) -0x0100h ~ 0x01FFh MACTOP General Configuration (256 Bytes) -0x0200h ~ 0x027Fh TXDMA Configuration (128 Bytes) -0x0280h ~ 0x02FFh RXDMA Configuration (128 Bytes) -0x0300h ~ 0x03FFh PCIE EMAC Reserved Region (256 Bytes) -0x0400h ~ 0x04FFh Protocol Configuration (256 Bytes) -0x0500h ~ 0x05FFh EDCA Configuration (256 Bytes) -0x0600h ~ 0x07FFh WMAC Configuration (512 Bytes) -0x2000h ~ 0x3FFFh 8051 FW Download Region (8196 Bytes) -*/ -//---------------------------------------------------------------------------- -// 8195 (TXPAUSE) transmission pause (Offset 0x522, 8 bits) -//---------------------------------------------------------------------------- -/* -#define StopBecon BIT6 -#define StopHigh BIT5 -#define StopMgt BIT4 -#define StopVO BIT3 -#define StopVI BIT2 -#define StopBE BIT1 -#define StopBK BIT0 -*/ - - -//----------------------------------------------------- -// -// 0xFE00h ~ 0xFE55h USB Configuration -// -//----------------------------------------------------- -/*#define REG_USB_INFO 0xFE17 -#define REG_USB_SPECIAL_OPTION 0xFE55 -#define REG_USB_DMA_AGG_TO 0xFE5B -#define REG_USB_AGG_TO 0xFE5C -#define REG_USB_AGG_TH 0xFE5D - -#define REG_USB_HRPWM 0xFE58 -#define REG_USB_HCPWM 0xFE57 - -//2 USB Information (0xFE17) -#define USB_IS_HIGH_SPEED 0 -#define USB_IS_FULL_SPEED 1 -#define USB_SPEED_MASK BIT(5) - -#define USB_NORMAL_SIE_EP_MASK 0xF -#define USB_NORMAL_SIE_EP_SHIFT 4 - -//2 Special Option -#define USB_AGG_EN BIT(3) - -*/ -//============================================================================ -// 8192C Regsiter Bit and Content definition -//============================================================================ -//----------------------------------------------------- -// -// 0x0000h ~ 0x00FFh System Configuration -// -//----------------------------------------------------- -/* -//2 SYS_ISO_CTRL -#define ISO_MD2PP BIT(0) -#define ISO_UA2USB BIT(1) -#define ISO_UD2CORE BIT(2) -#define ISO_PA2PCIE BIT(3) -#define ISO_PD2CORE BIT(4) -#define ISO_IP2MAC BIT(5) -#define ISO_DIOP BIT(6) -#define ISO_DIOE BIT(7) -#define ISO_EB2CORE BIT(8) -#define ISO_DIOR BIT(9) -#define PWC_EV12V BIT(15) - - -//2 SYS_FUNC_EN -#define FEN_BBRSTB BIT(0) -#define FEN_BB_GLB_RSTn BIT(1) -#define FEN_USBA BIT(2) -#define FEN_UPLL BIT(3) -#define FEN_USBD BIT(4) -#define FEN_DIO_PCIE BIT(5) -#define FEN_PCIEA BIT(6) -#define FEN_PPLL BIT(7) -#define FEN_PCIED BIT(8) -#define FEN_DIOE BIT(9) -#define FEN_CPUEN BIT(10) -#define FEN_DCORE BIT(11) -#define FEN_ELDR BIT(12) -#define FEN_DIO_RF BIT(13) -#define FEN_HWPDN BIT(14) -#define FEN_MREGEN BIT(15) - -//2 APS_FSMCO -#define PFM_LDALL BIT(0) -#define PFM_ALDN BIT(1) -#define PFM_LDKP BIT(2) -#define PFM_WOWL BIT(3) -#define EnPDN BIT(4) -#define PDN_PL BIT(5) -#define APFM_ONMAC BIT(8) -#define APFM_OFF BIT(9) -#define APFM_RSM BIT(10) -#define AFSM_HSUS BIT(11) -#define AFSM_PCIE BIT(12) -#define APDM_MAC BIT(13) -#define APDM_HOST BIT(14) -#define APDM_HPDN BIT(15) -#define RDY_MACON BIT(16) -#define SUS_HOST BIT(17) -#define ROP_ALD BIT(20) -#define ROP_PWR BIT(21) -#define ROP_SPS BIT(22) -#define SOP_MRST BIT(25) -#define SOP_FUSE BIT(26) -#define SOP_ABG BIT(27) -#define SOP_AMB BIT(28) -#define SOP_RCK BIT(29) -#define SOP_A8M BIT(30) -#define XOP_BTCK BIT(31) - -//2 SYS_CLKR -#define ANAD16V_EN BIT(0) -#define ANA8M BIT(1) -#define MACSLP BIT(4) -#define LOADER_CLK_EN BIT(5) - - -//2 9346CR - -#define BOOT_FROM_EEPROM BIT(4) -#define EEPROM_EN BIT(5) - - -//2 RF_CTRL -#define RF_EN BIT(0) -#define RF_RSTB BIT(1) -#define RF_SDMRSTB BIT(2) - -//2 LDOV12D_CTRL -#define LDV12_EN BIT(0) -#define LDV12_SDBY BIT(1) -#define LPLDO_HSM BIT(2) -#define LPLDO_LSM_DIS BIT(3) -#define _LDV12_VADJ(x) (((x) & 0xF) << 4) - - -//2 EFUSE_TEST (For RTL8723 partially) -#define EF_TRPT BIT(7) -#define EF_CELL_SEL (BIT(8)|BIT(9)) // 00: Wifi Efuse, 01: BT Efuse0, 10: BT Efuse1, 11: BT Efuse2 -#define LDOE25_EN BIT(31) -#define EFUSE_SEL(x) (((x) & 0x3) << 8) -#define EFUSE_SEL_MASK 0x300 -#define EFUSE_WIFI_SEL_0 0x0 -#define EFUSE_BT_SEL_0 0x1 -#define EFUSE_BT_SEL_1 0x2 -#define EFUSE_BT_SEL_2 0x3 - - -//2 8051FWDL -//2 MCUFWDL -#define MCUFWDL_EN BIT(0) -#define MCUFWDL_RDY BIT(1) -#define FWDL_ChkSum_rpt BIT(2) -#define MACINI_RDY BIT(3) -#define BBINI_RDY BIT(4) -#define RFINI_RDY BIT(5) -#define WINTINI_RDY BIT(6) -#define RAM_DL_SEL BIT(7) -#define ROM_DLEN BIT(19) -#define CPRST BIT(23) - - - -//2 REG_SYS_CFG -#define XCLK_VLD BIT(0) -#define ACLK_VLD BIT(1) -#define UCLK_VLD BIT(2) -#define PCLK_VLD BIT(3) -#define PCIRSTB BIT(4) -#define V15_VLD BIT(5) -#define TRP_B15V_EN BIT(7) -#define SIC_IDLE BIT(8) -#define BD_MAC2 BIT(9) -#define BD_MAC1 BIT(10) -#define IC_MACPHY_MODE BIT(11) -#define CHIP_VER (BIT(12)|BIT(13)|BIT(14)|BIT(15)) -#define BT_FUNC BIT(16) -#define VENDOR_ID BIT(19) -#define PAD_HWPD_IDN BIT(22) -#define TRP_VAUX_EN BIT(23) // RTL ID -#define TRP_BT_EN BIT(24) -#define BD_PKG_SEL BIT(25) -#define BD_HCI_SEL BIT(26) -#define TYPE_ID BIT(27) - -#define CHIP_VER_RTL_MASK 0xF000 //Bit 12 ~ 15 -#define CHIP_VER_RTL_SHIFT 12 - -*/ -//----------------------------------------------------- -// -// 0x0100h ~ 0x01FFh MACTOP General Configuration -// -//----------------------------------------------------- -/* - -//2 Function Enable Registers -//2 CR 0x0100-0x0103 - - -#define HCI_TXDMA_EN BIT(0) -#define HCI_RXDMA_EN BIT(1) -#define TXDMA_EN BIT(2) -#define RXDMA_EN BIT(3) -#define PROTOCOL_EN BIT(4) -#define SCHEDULE_EN BIT(5) -#define MACTXEN BIT(6) -#define MACRXEN BIT(7) -#define ENSWBCN BIT(8) -#define ENSEC BIT(9) -#define CALTMR_EN BIT(10) // 32k CAL TMR enable - -// Network type -#define _NETTYPE(x) (((x) & 0x3) << 16) -#define MASK_NETTYPE 0x30000 -#define NT_NO_LINK 0x0 -#define NT_LINK_AD_HOC 0x1 -#define NT_LINK_AP 0x2 -#define NT_AS_AP 0x3 - - -//2 PBP - Page Size Register 0x0104 -#define GET_RX_PAGE_SIZE(value) ((value) & 0xF) -#define GET_TX_PAGE_SIZE(value) (((value) & 0xF0) >> 4) -#define _PSRX_MASK 0xF -#define _PSTX_MASK 0xF0 -#define _PSRX(x) (x) -#define _PSTX(x) ((x) << 4) - -#define PBP_64 0x0 -#define PBP_128 0x1 -#define PBP_256 0x2 -#define PBP_512 0x3 -#define PBP_1024 0x4 - - -//2 TX/RXDMA 0x010C -#define RXDMA_ARBBW_EN BIT(0) -#define RXSHFT_EN BIT(1) -#define RXDMA_AGG_EN BIT(2) -#define QS_VO_QUEUE BIT(8) -#define QS_VI_QUEUE BIT(9) -#define QS_BE_QUEUE BIT(10) -#define QS_BK_QUEUE BIT(11) -#define QS_MANAGER_QUEUE BIT(12) -#define QS_HIGH_QUEUE BIT(13) - -#define HQSEL_VOQ BIT(0) -#define HQSEL_VIQ BIT(1) -#define HQSEL_BEQ BIT(2) -#define HQSEL_BKQ BIT(3) -#define HQSEL_MGTQ BIT(4) -#define HQSEL_HIQ BIT(5) - -// For normal driver, 0x10C -#define _TXDMA_HIQ_MAP(x) (((x)&0x3) << 14) -#define _TXDMA_MGQ_MAP(x) (((x)&0x3) << 12) -#define _TXDMA_BKQ_MAP(x) (((x)&0x3) << 10) -#define _TXDMA_BEQ_MAP(x) (((x)&0x3) << 8 ) -#define _TXDMA_VIQ_MAP(x) (((x)&0x3) << 6 ) -#define _TXDMA_VOQ_MAP(x) (((x)&0x3) << 4 ) - -#define QUEUE_LOW 1 -#define QUEUE_NORMAL 2 -#define QUEUE_HIGH 3 - - -//2 REG_C2HEVT_CLEAR 0x01AF -#define C2H_EVT_HOST_CLOSE 0x00 // Set by driver and notify FW that the driver has read the C2H command message -#define C2H_EVT_FW_CLOSE 0xFF // Set by FW indicating that FW had set the C2H command message and it's not yet read by driver. - - - -//2 LLT_INIT 0x01E0 -#define _LLT_NO_ACTIVE 0x0 -#define _LLT_WRITE_ACCESS 0x1 -#define _LLT_READ_ACCESS 0x2 - -#define _LLT_INIT_DATA(x) ((x) & 0xFF) -#define _LLT_INIT_ADDR(x) (((x) & 0xFF) << 8) -#define _LLT_OP(x) (((x) & 0x3) << 30) -#define _LLT_OP_VALUE(x) (((x) >> 30) & 0x3) - -*/ -//----------------------------------------------------- -// -// 0x0200h ~ 0x027Fh TXDMA Configuration -// -//----------------------------------------------------- -/* -//2 TDECTL 0x0208 -#define BLK_DESC_NUM_SHIFT 4 -#define BLK_DESC_NUM_MASK 0xF - - -//2 TXDMA_OFFSET_CHK 0x020C -#define DROP_DATA_EN BIT(9) -*/ -//----------------------------------------------------- -// -// 0x0280h ~ 0x028Bh RX DMA Configuration -// -//----------------------------------------------------- -/* -//2 REG_RXDMA_CONTROL, 0x0286h - -// Write only. When this bit is set, RXDMA will decrease RX PKT counter by one. Before -// this bit is polled, FW shall update RXFF_RD_PTR first. This register is write pulse and auto clear. -#define RXPKT_RELEASE_POLL BIT(0) -// Read only. When RXMA finishes on-going DMA operation, RXMDA will report idle state in -// this bit. FW can start releasing packets after RXDMA entering idle mode. -#define RXDMA_IDLE BIT(1) -// When this bit is set, RXDMA will enter this mode after on-going RXDMA packet to host -// completed, and stop DMA packet to host. RXDMA will then report Default: 0; -#define RW_RELEASE_EN BIT(2) -*/ -//----------------------------------------------------- -// -// 0x0400h ~ 0x047Fh Protocol Configuration -// -//----------------------------------------------------- -/* -//2 FWHW_TXQ_CTRL 0x0420 -#define EN_AMPDU_RTY_NEW BIT(7) - - -//2 REG_LIFECTRL_CTRL 0x0426 -#define HAL92C_EN_PKT_LIFE_TIME_BK BIT3 -#define HAL92C_EN_PKT_LIFE_TIME_BE BIT2 -#define HAL92C_EN_PKT_LIFE_TIME_VI BIT1 -#define HAL92C_EN_PKT_LIFE_TIME_VO BIT0 - -#define HAL92C_MSDU_LIFE_TIME_UNIT 128 // in us, said by Tim. - - -//2 SPEC SIFS 0x0428 -#define _SPEC_SIFS_CCK(x) ((x) & 0xFF) -#define _SPEC_SIFS_OFDM(x) (((x) & 0xFF) << 8) - -//2 RL 0x042A -#define RETRY_LIMIT_SHORT_SHIFT 8 -#define RETRY_LIMIT_LONG_SHIFT 0 - -#define _LRL(x) ((x) & 0x3F) -#define _SRL(x) (((x) & 0x3F) << 8) -*/ - -//----------------------------------------------------- -// -// 0x0500h ~ 0x05FFh EDCA Configuration -// -//----------------------------------------------------- -/* -//2 EDCA setting 0x050C -#define AC_PARAM_TXOP_LIMIT_OFFSET 16 -#define AC_PARAM_ECW_MAX_OFFSET 12 -#define AC_PARAM_ECW_MIN_OFFSET 8 -#define AC_PARAM_AIFS_OFFSET 0 - - -//2 BCN_CTRL 0x0550 -#define EN_TXBCN_RPT BIT(2) -#define EN_BCN_FUNCTION BIT(3) - -//2 TxPause 0x0522 -#define STOP_BCNQ BIT(6) -*/ - - -//2 ACMHWCTRL 0x05C0 -#define AcmHw_HwEn_8723B BIT(0) -#define AcmHw_VoqEn_8723B BIT(1) -#define AcmHw_ViqEn_8723B BIT(2) -#define AcmHw_BeqEn_8723B BIT(3) -#define AcmHw_VoqStatus_8723B BIT(5) -#define AcmHw_ViqStatus_8723B BIT(6) -#define AcmHw_BeqStatus_8723B BIT(7) - - - -//----------------------------------------------------- -// -// 0x0600h ~ 0x07FFh WMAC Configuration -// -//----------------------------------------------------- - - -//2 TCR 0x0604 -#define DIS_GCLK BIT(1) -#define PAD_SEL BIT(2) -#define PWR_ST BIT(6) -#define PWRBIT_OW_EN BIT(7) -#define ACRC BIT(8) -#define CFENDFORM BIT(9) -#define ICV BIT(10) - - -//---------------------------------------------------------------------------- -// 8195 (RCR) Receive Configuration Register (Offset 0x608, 32 bits) -//---------------------------------------------------------------------------- -/* -#define RCR_APPFCS BIT31 // WMAC append FCS after pauload -#define RCR_APP_MIC BIT30 // MACRX will retain the MIC at the bottom of the packet. -#define RCR_APP_ICV BIT29 // MACRX will retain the ICV at the bottom of the packet. -#define RCR_APP_PHYST_RXFF BIT28 // HY Status is appended before RX packet in RXFF -#define RCR_APP_BA_SSN BIT27 // SSN of previous TXBA is appended as after original RXDESC as the 4-th DW of RXDESC. -#define RCR_RSVD_BIT26 BIT26 // Reserved -*/ -#define RCR_TCPOFLD_EN BIT25 // Enable TCP checksum offload -/*#define RCR_ENMBID BIT24 // Enable Multiple BssId. Only response ACK to the packets whose DID(A1) matching to the addresses in the MBSSID CAM Entries. -#define RCR_LSIGEN BIT23 // Enable LSIG TXOP Protection function. Search KEYCAM for each rx packet to check if LSIGEN bit is set. -#define RCR_MFBEN BIT22 // Enable immediate MCS Feedback function. When Rx packet with MRQ = 1'b1, then search KEYCAM to find sender's MCS Feedback function and send response. -*/ -#define RCR_MAC_RESET BIT19 // WMAC clock stop and reset after BB transmitting end, 0: enable, 1: disable. -#define RCR_TIM_PARSER_EN BIT18 // RX Beacon TIM Parser. -#define RCR_BM_DATA_EN BIT17 // Broadcast data packet interrupt enable. -#define RCR_UC_DATA_EN BIT16 // Unicast data packet interrupt enable. - -/*#define RCR_HTC_LOC_CTRL BIT14 // MFC<--HTC=1 MFC-->HTC=0 -#define RCR_AMF BIT13 // Accept management type frame -#define RCR_ACF BIT12 // Accept control type frame. Control frames BA, BAR, and PS-Poll (when in AP mode) are not controlled by this bit. They are controlled by ADF. -#define RCR_ADF BIT11 // Accept data type frame. This bit also regulates BA, BAR, and PS-Poll (AP mode only). -*/ -/*#define RCR_AICV BIT9 // Accept ICV error packet -#define RCR_ACRC32 BIT8 // Accept CRC32 error packet -#define RCR_CBSSID_BCN BIT7 // Accept BSSID match packet (Rx beacon, probe rsp) -#define RCR_CBSSID_DATA BIT6 // Accept BSSID match packet (Data) -#define RCR_CBSSID RCR_CBSSID_DATA // Accept BSSID match packet -#define RCR_APWRMGT BIT5 // Accept power management packet -#define RCR_ADD3 BIT4 // Accept address 3 match packet -#define RCR_AB BIT3 // Accept broadcast packet -#define RCR_AM BIT2 // Accept multicast packet -#define RCR_APM BIT1 // Accept physical match packet -#define RCR_AAP BIT0 // Accept all unicast packet - -#define AAP BIT(0) -#define APM BIT(1) -#define AM BIT(2) -#define AB BIT(3) -#define ADD3 BIT(4) -#define APWRMGT BIT(5) -#define CBSSID BIT(6) -#define CBSSID_DATA BIT(6) -#define CBSSID_BCN BIT(7) -#define ACRC32 BIT(8) -#define AICV BIT(9) -#define ADF BIT(11) -#define ACF BIT(12) -#define AMF BIT(13) -#define HTC_LOC_CTRL BIT(14) -#define UC_DATA_EN BIT(16) -#define BM_DATA_EN BIT(17) -#define MFBEN BIT(22) -#define LSIGEN BIT(23) -#define EnMBID BIT(24) -#define APP_BASSN BIT(27) -#define APP_PHYSTS BIT(28) -#define APP_ICV BIT(29) -#define APP_MIC BIT(30) -*/ - -//---------------------------------------------------------------------------- -// 8195 CAM Config Setting (offset 0x680, 1 byte) -//---------------------------------------------------------------------------- -/* -#define SCR_TxUseDK BIT(0) //Force Tx Use Default Key -#define SCR_RxUseDK BIT(1) //Force Rx Use Default Key -#define SCR_TxEncEnable BIT(2) //Enable Tx Encryption -#define SCR_RxDecEnable BIT(3) //Enable Rx Decryption -#define SCR_SKByA2 BIT(4) //Search kEY BY A2 -#define SCR_NoSKMC BIT(5) //No Key Search Multicast -#define SCR_TXBCUSEDK BIT(6) // Force Tx Broadcast packets Use Default Key -#define SCR_RXBCUSEDK BIT(7) // Force Rx Broadcast packets Use Default Key - -#define CAM_NONE 0x0 -#define CAM_WEP40 0x01 -#define CAM_TKIP 0x02 -#define CAM_AES 0x04 -#define CAM_WEP104 0x05 -#define CAM_SMS4 0x6 - -#define TOTAL_CAM_ENTRY 32 -#define HALF_CAM_ENTRY 16 - -#define CAM_CONFIG_USEDK TRUE -#define CAM_CONFIG_NO_USEDK FALSE - - -#define SCR_UseDK 0x01 -#define SCR_TxSecEnable 0x02 -#define SCR_RxSecEnable 0x04 -*/ - -//---------------------------------------------------------------------------- -// 8195 REG_BCN_PSR_RPT (Beacon Parser Report Register) (Offset 0x6A8, 32 bits) -//---------------------------------------------------------------------------- - -#define PS_TIM BIT14 -#define PS_DTIM BIT15 - -//----------------------------------------------------- -// -// 0xFE00h ~ 0xFE55h RTL8723 SDIO Configuration -// -//----------------------------------------------------- -/* -//SDIO host local register space mapping. -#define SDIO_LOCAL_MSK 0x0FFF -#define WLAN_IOREG_MSK 0x7FFF -#define WLAN_FIFO_MSK 0x1FFF // Aggregation Length[12:0] - -#define SDIO_WITHOUT_REF_DEVICE_ID 0 // Without reference to the SDIO Device ID -#define SDIO_LOCAL_DEVICE_ID 0 // 0b[16], 000b[15:13] -#define WLAN_TX_HIQ_DEVICE_ID 4 // 0b[16], 100b[15:13] -#define WLAN_TX_MIQ_DEVICE_ID 5 // 0b[16], 101b[15:13] -#define WLAN_TX_LOQ_DEVICE_ID 6 // 0b[16], 110b[15:13] -#define WLAN_RX0FF_DEVICE_ID 7 // 0b[16], 111b[15:13] -#define WLAN_IOREG_DEVICE_ID 8 // 1b[16] - -//SDIO Tx Free Page Index -#define HI_QUEUE_IDX 0 -#define MID_QUEUE_IDX 1 -#define LOW_QUEUE_IDX 2 -#define PUBLIC_QUEUE_IDX 3 - -#define SDIO_REG_TX_CTRL 0x0000 // SDIO Tx Control -#define SDIO_REG_HIMR 0x0014 // SDIO Host Interrupt Mask -#define SDIO_REG_HISR 0x0018 // SDIO Host Interrupt Service Routine -#define SDIO_REG_HCPWM 0x0019 // HCI Current Power Mode -#define SDIO_REG_RX0_REQ_LEN 0x001C // RXDMA Request Length -#define SDIO_REG_FREE_TXPG 0x0020 // Free Tx Buffer Page -#define SDIO_REG_HCPWM1 0x0024 // HCI Current Power Mode 1 -#define SDIO_REG_HCPWM2 0x0026 // HCI Current Power Mode 2 -#define SDIO_REG_HTSFR_INFO 0x0030 // HTSF Informaion -#define SDIO_REG_HRPWM1 0x0080 // HCI Request Power Mode 1 -#define SDIO_REG_HRPWM2 0x0082 // HCI Request Power Mode 2 -#define SDIO_REG_HPS_CLKR 0x0084 // HCI Power Save Clock -#define SDIO_REG_HSUS_CTRL 0x0086 // SDIO HCI Suspend Control -#define SDIO_REG_HIMR_ON 0x0090 //SDIO Host Extension Interrupt Mask Always -#define SDIO_REG_HISR_ON 0x0091 //SDIO Host Extension Interrupt Status Always - -#define SDIO_HIMR_DISABLED 0 - -// RTL8723/RTL8188E SDIO Host Interrupt Mask Register -#define SDIO_HIMR_RX_REQUEST_MSK BIT0 -#define SDIO_HIMR_AVAL_MSK BIT1 -#define SDIO_HIMR_TXERR_MSK BIT2 -#define SDIO_HIMR_RXERR_MSK BIT3 -#define SDIO_HIMR_TXFOVW_MSK BIT4 -#define SDIO_HIMR_RXFOVW_MSK BIT5 -#define SDIO_HIMR_TXBCNOK_MSK BIT6 -#define SDIO_HIMR_TXBCNERR_MSK BIT7 -#define SDIO_HIMR_BCNERLY_INT_MSK BIT16 -#define SDIO_HIMR_C2HCMD_MSK BIT17 -#define SDIO_HIMR_CPWM1_MSK BIT18 -#define SDIO_HIMR_CPWM2_MSK BIT19 -#define SDIO_HIMR_HSISR_IND_MSK BIT20 -#define SDIO_HIMR_GTINT3_IND_MSK BIT21 -#define SDIO_HIMR_GTINT4_IND_MSK BIT22 -#define SDIO_HIMR_PSTIMEOUT_MSK BIT23 -#define SDIO_HIMR_OCPINT_MSK BIT24 -#define SDIO_HIMR_ATIMEND_MSK BIT25 -#define SDIO_HIMR_ATIMEND_E_MSK BIT26 -#define SDIO_HIMR_CTWEND_MSK BIT27 - -//RTL8188E SDIO Specific -#define SDIO_HIMR_MCU_ERR_MSK BIT28 -#define SDIO_HIMR_TSF_BIT32_TOGGLE_MSK BIT29 - -// SDIO Host Interrupt Service Routine -#define SDIO_HISR_RX_REQUEST BIT0 -#define SDIO_HISR_AVAL BIT1 -#define SDIO_HISR_TXERR BIT2 -#define SDIO_HISR_RXERR BIT3 -#define SDIO_HISR_TXFOVW BIT4 -#define SDIO_HISR_RXFOVW BIT5 -#define SDIO_HISR_TXBCNOK BIT6 -#define SDIO_HISR_TXBCNERR BIT7 -#define SDIO_HISR_BCNERLY_INT BIT16 -#define SDIO_HISR_C2HCMD BIT17 -#define SDIO_HISR_CPWM1 BIT18 -#define SDIO_HISR_CPWM2 BIT19 -#define SDIO_HISR_HSISR_IND BIT20 -#define SDIO_HISR_GTINT3_IND BIT21 -#define SDIO_HISR_GTINT4_IND BIT22 -#define SDIO_HISR_PSTIMEOUT BIT23 -#define SDIO_HISR_OCPINT BIT24 -#define SDIO_HISR_ATIMEND BIT25 -#define SDIO_HISR_ATIMEND_E BIT26 -#define SDIO_HISR_CTWEND BIT27 - -//RTL8188E SDIO Specific -#define SDIO_HISR_MCU_ERR BIT28 -#define SDIO_HISR_TSF_BIT32_TOGGLE BIT29 - - -// SDIO HCI Suspend Control Register -#define HCI_RESUME_PWR_RDY BIT1 -#define HCI_SUS_CTRL BIT0 - - -#if DEV_BUS_TYPE == RT_SDIO_INTERFACE - #define MAX_TX_AGG_PACKET_NUMBER 0x8 -#else - #define MAX_TX_AGG_PACKET_NUMBER 0xFF -#endif - -*/ -#endif // #ifndef __INC_HAL8195AREG_H diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/HalPhyRf_8195A.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/HalPhyRf_8195A.h deleted file mode 100644 index 3f22d3f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/HalPhyRf_8195A.h +++ /dev/null @@ -1,127 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __HAL_PHY_RF_8195A_H__ -#define __HAL_PHY_RF_8195A_H__ - - -/*--------------------------Define Parameters-------------------------------*/ -#define IQK_DELAY_TIME_8195A 10 //ms -#define IQK_DEFERRED_TIME_8195A 4 -#define index_mapping_NUM_8195A 15 -#define AVG_THERMAL_NUM_8195A 4 -#define RF_T_METER_8195A 0x42 // - - -void ConfigureTxpowerTrack_8195A( - PTXPWRTRACK_CFG pConfig - ); - -void DoIQK_8195A( - PDM_ODM_T pDM_Odm, - u1Byte DeltaThermalIndex, - u1Byte ThermalValue, - u1Byte Threshold - ); - -VOID -ODM_TxPwrTrackSetPwr_8195A( - PDM_ODM_T pDM_Odm, - PWRTRACK_METHOD Method, - u1Byte RFPath, - u1Byte ChannelMappedIndex - ); - -VOID -ODM_TxXtalTrackSetXtal_8195A( - PDM_ODM_T pDM_Odm -); - - -//1 7. IQK - -void -PHY_IQCalibrate_8195A( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER Adapter, -#endif - IN BOOLEAN bReCovery, - IN BOOLEAN bRestore); - - -// -// LC calibrate -// -void -PHY_LCCalibrate_8195A( - IN PDM_ODM_T pDM_Odm -); - - -VOID -_PHY_SaveADDARegisters_8195A( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER pAdapter, -#endif - IN pu4Byte ADDAReg, - IN pu4Byte ADDABackup, - IN u4Byte RegisterNum - ); - -VOID -_PHY_PathADDAOn_8195A( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER pAdapter, -#endif - IN pu4Byte ADDAReg, - IN BOOLEAN isPathAOn, - IN BOOLEAN is2T - ); - -VOID -_PHY_MACSettingCalibration_8195A( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER pAdapter, -#endif - IN pu4Byte MACReg, - IN pu4Byte MACBackup - ); - - -VOID -_PHY_PathAStandBy( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm -#else - IN PADAPTER pAdapter -#endif - ); - - -#endif // #ifndef __HAL_PHY_RF_8188E_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/ROM_RTL8195A_PHYDM.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/ROM_RTL8195A_PHYDM.h deleted file mode 100644 index 7123055..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/ROM_RTL8195A_PHYDM.h +++ /dev/null @@ -1,128 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __ROM_RTL8195A_PHYDM_H__ -#define __ROM_RTL8195A_PHYDM_H__ - -typedef struct _FALSE_ALARM_STATISTICS{ - u4Byte Cnt_Parity_Fail; - u4Byte Cnt_Rate_Illegal; - u4Byte Cnt_Crc8_fail; - u4Byte Cnt_Mcs_fail; - u4Byte Cnt_Ofdm_fail; - u4Byte Cnt_Ofdm_fail_pre; //For RTL8881A - u4Byte Cnt_Cck_fail; - u4Byte Cnt_all; - u4Byte Cnt_Fast_Fsync; - u4Byte Cnt_SB_Search_fail; - u4Byte Cnt_OFDM_CCA; - u4Byte Cnt_CCK_CCA; - u4Byte Cnt_CCA_all; - u4Byte Cnt_BW_USC; //Gary - u4Byte Cnt_BW_LSC; //Gary -}FALSE_ALARM_STATISTICS, *PFALSE_ALARM_STATISTICS; - -typedef struct _CFO_TRACKING_ -{ - BOOLEAN bATCStatus; - BOOLEAN largeCFOHit; - BOOLEAN bAdjust; - u1Byte CrystalCap; - u1Byte DefXCap; - int CFO_tail[2]; - int CFO_ave_pre; - u4Byte packetCount; - u4Byte packetCount_pre; - BOOLEAN bForceXtalCap; - BOOLEAN bReset; - u1Byte CFO_TH_XTAL_HIGH; - u1Byte CFO_TH_XTAL_LOW; - u1Byte CFO_TH_ATC; -}CFO_TRACKING, *PCFO_TRACKING; - -typedef struct _ROM_INFO{ - u1Byte EEPROMVersion; - u1Byte CrystalCap; - u8Byte DebugComponents; - u4Byte DebugLevel; -}ROM_INFO, *PROM_INFO; - -extern FALSE_ALARM_STATISTICS FalseAlmCnt; -extern CFO_TRACKING DM_CfoTrack; -extern ROM_INFO ROMInfo; - -u1Byte -ROM_odm_QueryRxPwrPercentage( - IN s1Byte AntPower -); - - -u1Byte -ROM_odm_EVMdbToPercentage( - IN s1Byte Value -); - -s4Byte -ROM_odm_SignalScaleMapping_8195A( - IN u1Byte SupportInterface, - IN s4Byte CurrSig -); - -VOID -ROM_odm_FalseAlarmCounterStatistics( - IN PVOID pDM_VOID -); - -VOID -ROM_odm_SetEDCCAThreshold( - IN PVOID pDM_VOID, - IN s1Byte H2L, - IN s1Byte L2H -); - -VOID -ROM_odm_SetTRxMux( - IN PVOID pDM_VOID, - IN ODM_Trx_MUX_Type txMode, - IN ODM_Trx_MUX_Type rxMode -); - - -VOID -ROM_odm_SetCrystalCap( - IN PVOID pDM_VOID, - IN u1Byte CrystalCap -); - -u1Byte -ROM_odm_GetDefaultCrytaltalCap( - IN PVOID pDM_VOID -); - -VOID -ROM_ODM_CfoTrackingReset( - IN PVOID pDM_VOID -); - -VOID -ROM_odm_CfoTrackingFlow( - IN PVOID pDM_VOID -); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/halhwimg8195a_bb.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/halhwimg8195a_bb.h deleted file mode 100644 index e352ab4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/halhwimg8195a_bb.h +++ /dev/null @@ -1,59 +0,0 @@ -/****************************************************************************** -* -* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of version 2 of the GNU General Public License as -* published by the Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License along with -* this program; if not, write to the Free Software Foundation, Inc., -* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA -* -* -******************************************************************************/ - -/*Image2HeaderVersion: 2.23*/ -#if (RTL8195A_SUPPORT == 1) -#ifndef __INC_MP_BB_HW_IMG_8195A_H -#define __INC_MP_BB_HW_IMG_8195A_H - - -/****************************************************************************** -* AGC_TAB.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8195A_AGC_TAB(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8195A_AGC_TAB(void); - -/****************************************************************************** -* PHY_REG.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8195A_PHY_REG(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8195A_PHY_REG(void); - -/****************************************************************************** -* PHY_REG_PG.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8195A_PHY_REG_PG(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8195A_PHY_REG_PG(void); - -#endif -#endif /* end of HWIMG_SUPPORT*/ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/halhwimg8195a_mac.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/halhwimg8195a_mac.h deleted file mode 100644 index 23cdd26..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/halhwimg8195a_mac.h +++ /dev/null @@ -1,39 +0,0 @@ -/****************************************************************************** -* -* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of version 2 of the GNU General Public License as -* published by the Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License along with -* this program; if not, write to the Free Software Foundation, Inc., -* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA -* -* -******************************************************************************/ - -/*Image2HeaderVersion: 2.23*/ -#if (RTL8195A_SUPPORT == 1) -#ifndef __INC_MP_MAC_HW_IMG_8195A_H -#define __INC_MP_MAC_HW_IMG_8195A_H - - -/****************************************************************************** -* MAC_REG.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8195A_MAC_REG(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8195A_MAC_REG(void); - -#endif -#endif /* end of HWIMG_SUPPORT*/ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/halhwimg8195a_rf.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/halhwimg8195a_rf.h deleted file mode 100644 index fa7b2ed..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/halhwimg8195a_rf.h +++ /dev/null @@ -1,104 +0,0 @@ -/****************************************************************************** -* -* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of version 2 of the GNU General Public License as -* published by the Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License along with -* this program; if not, write to the Free Software Foundation, Inc., -* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA -* -* -******************************************************************************/ - -/*Image2HeaderVersion: 2.23*/ -#if (RTL8195A_SUPPORT == 1) -#ifndef __INC_MP_RF_HW_IMG_8195A_H -#define __INC_MP_RF_HW_IMG_8195A_H - - -/****************************************************************************** -* RadioA.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8195A_RadioA(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8195A_RadioA(void); - -/****************************************************************************** -* RADIO_DIFF.TXT -******************************************************************************/ - -extern u4Byte Array_MP_8195A_RADIO_DIFF_LB[50]; -extern u4Byte Array_MP_8195A_RADIO_DIFF_MB[50]; -extern u4Byte Array_MP_8195A_RADIO_DIFF_HB[50]; -void -ODM_ReadAndConfig_MP_8195A_RADIO_DIFF( - IN PDM_ODM_T pDM_Odm, - IN u4Byte Array[], - IN u4Byte ArrayLen -); -u4Byte ODM_GetVersion_MP_8195A_RADIO_DIFF(void); - -/****************************************************************************** -* TxPowerTrack_QFN48.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8195A_TxPowerTrack_QFN48(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8195A_TxPowerTrack_QFN48(void); - -/****************************************************************************** -* TxPowerTrack_QFN56.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8195A_TxPowerTrack_QFN56(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8195A_TxPowerTrack_QFN56(void); - -/****************************************************************************** -* TxPowerTrack_TFBGA96.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8195A_TxPowerTrack_TFBGA96(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8195A_TxPowerTrack_TFBGA96(void); - -/****************************************************************************** -* TXPWR_LMT.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8195A_TXPWR_LMT(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8195A_TXPWR_LMT(void); - -/****************************************************************************** -* TxXtalTrack.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8195A_TxXtalTrack(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8195A_TxXtalTrack(void); - -#endif -#endif /* end of HWIMG_SUPPORT*/ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/phydm_RTL8195A.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/phydm_RTL8195A.h deleted file mode 100644 index 5b73912..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/phydm_RTL8195A.h +++ /dev/null @@ -1,69 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __ODM_RTL8723B_H__ -#define __ODM_RTL8723B_H__ - -#define DM_DIG_MIN_NIC_8723 0x1C - -#if (defined(CONFIG_HW_ANTENNA_DIVERSITY)) - -VOID -ODM_AntennaDiversityInit_8723B( IN PDM_ODM_T pDM_Odm); - -VOID -ODM_AntselStatistics_8723B( - IN PDM_ODM_T pDM_Odm, - IN u1Byte antsel_tr_mux, - IN u4Byte MacId, - IN u4Byte RxPWDBAll); - -VOID -ODM_AntennaDiversity_8723B( IN PDM_ODM_T pDM_Odm); - - -VOID -ODM_UpdateRxIdleAnt_8723B(IN PDM_ODM_T pDM_Odm, IN u1Byte Ant); - -VOID -ODM_SetTxAntByTxInfo_8723B( - IN PDM_ODM_T pDM_Odm, - IN pu1Byte pDesc, - IN u1Byte macId -); - -#endif - -VOID -odm_DIG_8723(IN PDM_ODM_T pDM_Odm); - -s1Byte -odm_CCKRSSI_8723B( - IN u1Byte LNA_idx, - IN u1Byte VGA_idx - ); - -s1Byte -odm_RSSIOFDM_8723B( - IN s1Byte rx_pwr_new - ); - - - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/phydm_RegConfig8195A.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/phydm_RegConfig8195A.h deleted file mode 100644 index 4dbf0dd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/OUTSRC/rtl8195a/phydm_RegConfig8195A.h +++ /dev/null @@ -1,89 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __INC_ODM_REGCONFIG_H_8195A -#define __INC_ODM_REGCONFIG_H_8195A - -#if (RTL8195A_SUPPORT == 1) - -void -odm_ConfigRFReg_8195A( - IN PDM_ODM_T pDM_Odm, - IN u4Byte Addr, - IN u4Byte Data, - IN ODM_RF_RADIO_PATH_E RF_PATH, - IN u4Byte RegAddr - ); - -void -odm_ConfigRF_RadioA_8195A( - IN PDM_ODM_T pDM_Odm, - IN u4Byte Addr, - IN u4Byte Data - ); - -void -odm_ConfigMAC_8195A( - IN PDM_ODM_T pDM_Odm, - IN u4Byte Addr, - IN u1Byte Data - ); - -void -odm_ConfigBB_AGC_8195A( - IN PDM_ODM_T pDM_Odm, - IN u4Byte Addr, - IN u4Byte Bitmask, - IN u4Byte Data - ); - -void -odm_ConfigBB_PHY_REG_PG_8195A( - IN PDM_ODM_T pDM_Odm, - IN u4Byte Band, - IN u4Byte RfPath, - IN u4Byte TxNum, - IN u4Byte Addr, - IN u4Byte Bitmask, - IN u4Byte Data - ); - -void -odm_ConfigBB_PHY_8195A( - IN PDM_ODM_T pDM_Odm, - IN u4Byte Addr, - IN u4Byte Bitmask, - IN u4Byte Data - ); - -void -odm_ConfigBB_TXPWR_LMT_8195A( - IN PDM_ODM_T pDM_Odm, - IN u1Byte Regulation, - IN u1Byte Band, - IN u1Byte Bandwidth, - IN u1Byte RateSection, - IN u1Byte RfPath, - IN u1Byte Channel, - IN u1Byte PowerLimit - ); - -#endif -#endif // end of SUPPORT - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/hal_data.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/hal_data.h deleted file mode 100644 index cb52109..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/hal_data.h +++ /dev/null @@ -1,498 +0,0 @@ -/****************************************************************************** - * Copyright (c) 2013-2016 Realtek Semiconductor Corp. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ -#ifndef __HAL_DATA_H__ -#define __HAL_DATA_H__ - - -#include "hal_com.h" -#ifdef CONFIG_RTL8188F -#include "OUTSRC/rtl8188f/phydm_precomp.h" -#else -#include "OUTSRC/phydm_precomp.h" -#endif - -#ifdef CONFIG_RTL8723A -#include "rtl8723a/rtl8723a_hal.h" -#endif -#ifdef CONFIG_RTL8188E -#include "rtl8188e/rtl8188e_hal.h" -#endif -#ifdef CONFIG_RTL8195A -#include "rtl8195a_hal.h" -#endif -#if (CONFIG_RTL8711B ==1) -#include "rtl8711b_hal.h" -#endif -#ifdef CONFIG_RTL8188F -#include "rtl8188f/rtl8188f_hal.h" -#endif -// -// For RTL8723 WiFi/BT/GPS multi-function configuration. 2010.10.06. -// -typedef enum _RT_MULTI_FUNC{ - RT_MULTI_FUNC_NONE = 0x00, - RT_MULTI_FUNC_WIFI = 0x01, - RT_MULTI_FUNC_BT = 0x02, - RT_MULTI_FUNC_GPS = 0x04, -}RT_MULTI_FUNC,*PRT_MULTI_FUNC; -// -// For RTL8723 WiFi PDn/GPIO polarity control configuration. 2010.10.08. -// -typedef enum _RT_POLARITY_CTL { - RT_POLARITY_LOW_ACT = 0, - RT_POLARITY_HIGH_ACT = 1, -} RT_POLARITY_CTL, *PRT_POLARITY_CTL; - -// For RTL8723 regulator mode. by tynli. 2011.01.14. -typedef enum _RT_REGULATOR_MODE { - RT_SWITCHING_REGULATOR = 0, - RT_LDO_REGULATOR = 1, -} RT_REGULATOR_MODE, *PRT_REGULATOR_MODE; - -#define CHANNEL_MAX_NUMBER 14 // 14 is the max channel number -#define CHANNEL_MAX_NUMBER_2G 14 -#define CHANNEL_MAX_NUMBER_5G 54 // Please refer to "phy_GetChnlGroup8812A" and "Hal_ReadTxPowerInfo8812A" -#define CHANNEL_MAX_NUMBER_5G_80M 7 - -// Tx Power Limit Table Size -#define MAX_REGULATION_NUM 3 // FCC, ETSI, MKK -#define MAX_2_4G_BANDWITH_NUM 2 // 20M, 40M -#if defined(NOT_SUPPORT_RF_MULTIPATH) && defined(NOT_SUPPORT_VHT) -#define MAX_RATE_SECTION_NUM 3 // CCk, OFDM, HT -#define MAX_BASE_NUM_IN_PHY_REG_PG_2_4G 3 // CCK:1,OFDM:1, HT:1(MCS0_MCS7) -#else -#define MAX_RATE_SECTION_NUM 10 -#define MAX_BASE_NUM_IN_PHY_REG_PG_2_4G 10 // CCK:1,OFDM:1, HT:4, VHT:4 -#endif -#define MAX_5G_BANDWITH_NUM 4 -#define MAX_BASE_NUM_IN_PHY_REG_PG_5G 9 // OFDM:1, HT:4, VHT:4 - -#define HCI_SUS_ENTER 0 -#define HCI_SUS_LEAVING 1 -#define HCI_SUS_LEAVE 2 -#define HCI_SUS_ENTERING 3 -#define HCI_SUS_ERR 4 - - -struct dm_priv -{ - u8 DM_Type; - u8 DMFlag; - u8 InitDMFlag; - u32 InitODMFlag; - - //* Upper and Lower Signal threshold for Rate Adaptive*/ - int UndecoratedSmoothedPWDB; - int UndecoratedSmoothedCCK; - int EntryMinUndecoratedSmoothedPWDB; - int EntryMaxUndecoratedSmoothedPWDB; - int MinUndecoratedPWDBForDM; - int LastMinUndecoratedPWDBForDM; - - - //for High Power - u8 bDynamicTxPowerEnable; - u8 LastDTPLvl; - u8 DynamicTxHighPowerLvl;//Add by Jacken Tx Power Control for Near/Far Range 2008/03/06 - - //for tx power tracking - u8 bTXPowerTracking; - u8 TXPowercount; - u8 bTXPowerTrackingInit; - u8 TxPowerTrackControl; //for mp mode, turn off txpwrtracking as default - - u8 PowerIndex_backup[6]; - - s32 OFDM_Pkt_Cnt; - - // Add for Reading Initial Data Rate SEL Register 0x484 during watchdog. Using for fill tx desc. 2011.3.21 by Thomas - u8 INIDATA_RATE[32]; -}; - -#ifdef CONFIG_LITTLE_WIFI_MCU_FUNCTION_THREAD -#define MCUCMDQUEUEDEPTH 15 -#define MCUCMDLENGTH 2 -#define MACIDNUM 128 -typedef struct _cmd_queue_{ - u32 FwCmdContent[MCUCMDLENGTH]; -}CMD_QUEUE; -#endif - - -#ifdef CONFIG_RF_GAIN_OFFSET -#ifdef CONFIG_RTL8188F -struct kfree_data_t { - u8 flag; - s8 bb_gain[BB_GAIN_NUM][RF_PATH_MAX]; - s8 thermal; -}; - -#define KFREE_FLAG_ON BIT0 -#define KFREE_FLAG_THERMAL_K_ON BIT1 -#endif -#endif - -typedef struct hal_com_data -{ - HAL_VERSION VersionID; -// RT_MULTI_FUNC MultiFunc; // For multi-function consideration. -// RT_POLARITY_CTL PolarityCtl; // For Wifi PDn Polarity control. - RT_REGULATOR_MODE RegulatorMode; // switching regulator or LDO - u16 CustomerID; -#if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) ||defined (CONFIG_RTL8188F) - u16 ForcedDataRate;// Force Data Rate. 0: Auto, 0x02: 1M ~ 0x6C: 54M. -#endif - - u16 FirmwareVersion; - u16 FirmwareVersionRev; - u16 FirmwareSubVersion; - u16 FirmwareSignature; -// u8 PGMaxGroup; - //current WIFI_PHY values - u32 ReceiveConfig; -// WIRELESS_MODE CurrentWirelessMode; - CHANNEL_WIDTH CurrentChannelBW; -#if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B)||defined (CONFIG_RTL8188F) - BAND_TYPE CurrentBandType; //0:2.4G, 1:5G -#endif - u8 CurrentChannel; - u8 nCur40MhzPrimeSC;// Control channel sub-carrier - u8 CurrentCenterFrequencyIndex1; -#if !defined(NOT_SUPPORT_80M) - u8 nCur80MhzPrimeSC; //used for primary 40MHz of 80MHz mode -#endif - - u16 BasicRateSet; - u8 hci_sus_state; - //rf_ctrl - u8 rf_chip; - u8 rf_type; -#if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B)||defined (CONFIG_RTL8188F) - u8 PackageType; - u8 ChipID; -#endif - u8 NumTotalRFPath; - - u8 BoardType; - - // - // EEPROM setting. - // -// u16 EEPROMVID; -// u16 EEPROMPID; -// u16 EEPROMSVID; -// u16 EEPROMSDID; - u8 EEPROMCustomerID; -// u8 EEPROMSubCustomerID; - u8 EEPROMVersion; - u8 EEPROMRegulatory; - -#ifdef CONFIG_RF_GAIN_OFFSET -#ifdef CONFIG_RTL8188F - struct kfree_data_t kfree_data; -#endif -#endif -// u8 bTXPowerDataReadFromEEPORM; - u8 EEPROMThermalMeter; -// u8 bAPKThermalMeterIgnore; - -// BOOLEAN EepromOrEfuse; - //u8 EfuseMap[2][HWSET_MAX_SIZE_512]; //92C:256bytes, 88E:512bytes, we use union set (512bytes) - //u8 EfuseUsedPercentage; -#ifdef HAL_EFUSE_MEMORY - EFUSE_HAL EfuseHal; -#endif - //u8 bIQKInitialized; - - u8 Regulation2_4G; -#if !defined(NOT_SUPPORT_5G) - u8 Regulation5G; -#endif -#if defined(CONFIG_RTL8195A) || defined(CONFIG_RTL8711B)||defined (CONFIG_RTL8188F) - s8 TxPwrByRateOffset[TX_PWR_BY_RATE_NUM_BAND] - [TX_PWR_BY_RATE_NUM_RF] - [TX_PWR_BY_RATE_NUM_RF] - [TX_PWR_BY_RATE_NUM_RATE]; -#endif - //---------------------------------------------------------------------------------// -#if defined(CONFIG_RTL8195A) || defined(CONFIG_RTL8711B)||defined (CONFIG_RTL8188F) - u8 Index24G_CCK_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER]; - u8 Index24G_BW40_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER]; - //If only one tx, only BW20 and OFDM are used. - s8 OFDM_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s8 BW20_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; -#if !defined(NOT_SUPPORT_RF_MULTIPATH) - s8 CCK_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s8 BW40_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; -#endif - - //2 Power Limit Table - // Power Limit Table for 2.4G - s8 TxPwrLimit_2_4G[MAX_REGULATION_NUM] - [MAX_2_4G_BANDWITH_NUM] - [MAX_RATE_SECTION_NUM] - [CHANNEL_MAX_NUMBER_2G] - [MAX_RF_PATH]; - #if !defined(NOT_SUPPORT_5G) - // Power Limit Table for 5G - s8 TxPwrLimit_5G[MAX_REGULATION_NUM] - [MAX_5G_BANDWITH_NUM] - [MAX_RATE_SECTION_NUM] - [CHANNEL_MAX_NUMBER_5G] - [MAX_RF_PATH]; - #endif - - // Store the original power by rate value of the base of each rate section of rf path A & B - u8 TxPwrByRateBase2_4G[TX_PWR_BY_RATE_NUM_RF] - [TX_PWR_BY_RATE_NUM_RF] - [MAX_BASE_NUM_IN_PHY_REG_PG_2_4G]; - #if !defined(NOT_SUPPORT_5G) - u8 TxPwrByRateBase5G[TX_PWR_BY_RATE_NUM_RF] - [TX_PWR_BY_RATE_NUM_RF] - [MAX_BASE_NUM_IN_PHY_REG_PG_5G]; - #endif -#else - u8 TxPwrLevelCck[MAX_RF_PATH][CHANNEL_MAX_NUMBER]; - u8 TxPwrLevelHT40_1S[MAX_RF_PATH][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr - u8 TxPwrLevelHT40_2S[MAX_RF_PATH][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr - u8 TxPwrHt20Diff[MAX_RF_PATH][CHANNEL_MAX_NUMBER];// HT 20<->40 Pwr diff - u8 TxPwrLegacyHtDiff[MAX_RF_PATH][CHANNEL_MAX_NUMBER];// For HT<->legacy pwr diff -#endif - - // For power group -// u8 PwrGroupHT20[MAX_RF_PATH][CHANNEL_MAX_NUMBER]; -// u8 PwrGroupHT40[MAX_RF_PATH][CHANNEL_MAX_NUMBER]; - -// u8 LegacyHTTxPowerDiff;// Legacy to HT rate power diff - // The current Tx Power Level - u8 CurrentCckTxPwrIdx; - u8 CurrentOfdm24GTxPwrIdx; - u8 CurrentBW2024GTxPwrIdx; - u8 CurrentBW4024GTxPwrIdx; - - u8 CrystalCap; - //u32 AntennaTxPath; // Antenna path Tx - //u32 AntennaRxPath; // Antenna path Rx - //u8 BluetoothCoexist; -// u8 ExternalPA; - -#if defined(CONFIG_RTL8188F) - - /* PHY DM & DM Section */ - u8 INIDATA_RATE[32/*MACID_NUM_SW_LIMIT*/]; - /* Upper and Lower Signal threshold for Rate Adaptive*/ - int EntryMinUndecoratedSmoothedPWDB; - int EntryMaxUndecoratedSmoothedPWDB; - int MinUndecoratedPWDBForDM; -#endif - - //u8 bLedOpenDrain; // Support Open-drain arrangement for controlling the LED. Added by Roger, 2009.10.16. - - //u32 LedControlNum; - //u32 LedControlMode; - //u8 b1x1RecvCombine; // for 1T1R receive combining - - //u8 bCurrentTurboEDCA; -#if defined(CONFIG_RTL8195A) || defined(CONFIG_RTL8711B)||defined (CONFIG_RTL8188F) - BOOLEAN bSwChnl; - BOOLEAN bSetChnlBW; - BOOLEAN bChnlBWInitialized; -#endif - -// BOOLEAN bNeedIQK; - - u32 AcParam_BE; //Original parameter for BE, use for EDCA turbo. -#if defined(NOT_SUPPORT_RF_MULTIPATH) - BB_REGISTER_DEFINITION_T PHYRegDef[1]; //Radio A - u32 RfRegChnlVal[1]; -#else - BB_REGISTER_DEFINITION_T PHYRegDef[4]; //Radio A/B/C/D - u32 RfRegChnlVal[2]; -#endif - - //RDG enable -// BOOLEAN bRDGEnable; - -#if (defined(CONFIG_RTL8711B) || defined(CONFIG_RTL8188F)) - //for host message to fw - u8 LastHMEBoxNum; -#endif - - u8 fw_ractrl; -// u8 RegTxPause; - // Beacon function related global variable. -// u32 RegBcnCtrlVal; - u8 RegFwHwTxQCtrl; - u8 RegReg542; -// u8 RegCR_1; - u16 RegRRSR; - - struct dm_priv dmpriv; - DM_ODM_T odmpriv; - //_lock odm_stainfo_lock; -#ifdef DBG_CONFIG_ERROR_DETECT - struct sreset_priv srestpriv; -#endif - -#ifdef CONFIG_BT_COEXIST - struct btcoexist_priv bt_coexist; -#endif - -//#ifdef CONFIG_ANTENNA_DIVERSITY - u8 CurAntenna; - u8 AntDivCfg; - u8 TRxAntDivType; -//#endif - -// u8 bDumpRxPkt;//for debug -// u8 bDumpTxPkt;//for debug -// u8 FwRsvdPageStartOffset; //2010.06.23. Added by tynli. Reserve page start offset except beacon in TxQ. - - // 2010/08/09 MH Add CU power down mode. -// BOOLEAN pwrdown; - - // Add for dual MAC 0--Mac0 1--Mac1 -// u32 interfaceIndex; - - u8 OutEpQueueSel; - u8 OutEpNumber; - - // 2010/12/10 MH Add for USB aggreation mode dynamic shceme. -// BOOLEAN UsbRxHighSpeedMode; - - // 2010/11/22 MH Add for slim combo debug mode selective. - // This is used for fix the drawback of CU TSMC-A/UMC-A cut. HW auto suspend ability. Close BT clock. - //BOOLEAN SlimComboDbg; - - u16 EfuseUsedBytes; - -#ifdef CONFIG_P2P - struct P2P_PS_Offload_t p2p_ps_offload; -#endif - - u8 AMPDUDensity; - - // Auto FSM to Turn On, include clock, isolation, power control for MAC only - u8 bMacPwrCtrlOn; - -#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) - - // - // For SDIO Interface HAL related - // - - // - // SDIO ISR Related - // -// u32 IntrMask[1]; -// u32 IntrMaskToSet[1]; -// LOG_INTERRUPT InterruptLog; -// u32 sdio_himr; -// u32 sdio_hisr; - - // - // SDIO Tx FIFO related. - // - // HIQ, MID, LOW, PUB free pages; padapter->xmitpriv.free_txpg -// u8 SdioTxFIFOFreePage[TX_FREE_PG_QUEUE]; -// _lock SdioTxFIFOFreePageLock; -// _thread_hdl_ SdioXmitThread; -// _sema SdioXmitSema; -// _sema SdioXmitTerminateSema; - - // - // SDIO Rx FIFO related. - // -// u8 SdioRxFIFOCnt; -// u16 SdioRxFIFOSize; -#endif //CONFIG_SDIO_HCI - -#ifdef CONFIG_USB_HCI - u32 UsbBulkOutSize; - - // Interrupt relatd register information. - u32 IntArray[3];//HISR0,HISR1,HSISR - u32 IntrMask[3]; - //u8 C2hArray[16]; -#ifdef CONFIG_USB_TX_AGGREGATION - u8 UsbTxAggMode; - u8 UsbTxAggDescNum; -#endif -#ifdef CONFIG_USB_RX_AGGREGATION - u16 HwRxPageSize; // Hardware setting - u32 MaxUsbRxAggBlock; - - USB_RX_AGG_MODE UsbRxAggMode; - u8 UsbRxAggBlockCount; // USB Block count. Block size is 512-byte in hight speed and 64-byte in full speed - u8 UsbRxAggBlockTimeout; - u8 UsbRxAggPageCount; // 8192C DMA page count - u8 UsbRxAggPageTimeout; -#endif -#endif //CONFIG_USB_HCI - - -#if defined (CONFIG_PCI_HCI) || defined(CONFIG_LX_HCI) -// u32 TransmitConfig; - u32 IntArray[3]; - u32 IntrMask[3]; -// u8 bDefaultAntenna; -// u8 bIQKInitialized; - -// u8 bInterruptMigration; -// u8 bDisableTxInt; -#ifdef CONFIG_SUPPORT_HW_WPS_PBC - u8 bGpioHwWpsPbc; -#endif - u16 RxExpectTag; -#ifdef CONFIG_DEBUG_DYNAMIC - struct hal_debug debug_info; -#endif - -#endif //CONFIG_PCI_HCI || CONFIG_LX_HCI - - -#ifdef CONFIG_TX_EARLY_MODE - u8 bEarlyModeEnable; -#endif - -#ifdef CONFIG_LITTLE_WIFI_MCU_FUNCTION_THREAD - struct task_struct littlewifipriv; - //CMD_QUEUE FwCmdQueue[MCUCMDQUEUEDEPTH]; - //fw section - u32 WifiMcuCmdBitMap; - u8 bConnected[MACIDNUM/8]; - BOOLEAN PMUTaskRAEn; - - u8 BcnIgnoreEdccaEn; - - #ifdef CONFIG_POWER_SAVING - struct task_struct enter32kpriv; - - #ifdef TDMA_POWER_SAVING - struct task_struct TDMApriv; - #endif //#ifdef TDMA_POWER_SAVING - - PS_PARM PSParmpriv; - u8 ScanEn; - #endif //#ifdef CONFIG_POWER_SAVING -#endif - -} HAL_DATA_COMMON, *PHAL_DATA_COMMON; - -typedef struct hal_com_data HAL_DATA_TYPE, *PHAL_DATA_TYPE; -#define GET_HAL_DATA(__pAdapter) ((HAL_DATA_TYPE *)((__pAdapter)->HalData)) - -#endif //__HAL_DATA_H__ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/Hal8192CPhyReg.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/Hal8192CPhyReg.h deleted file mode 100644 index 81b226a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/Hal8192CPhyReg.h +++ /dev/null @@ -1,1125 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -/***************************************************************************** - * - * Module: __INC_HAL8192CPHYREG_H - * - * - * Note: 1. Define PMAC/BB register map - * 2. Define RF register map - * 3. PMAC/BB register bit mask. - * 4. RF reg bit mask. - * 5. Other BB/RF relative definition. - * - * - * Export: Constants, macro, functions(API), global variables(None). - * - * Abbrev: - * - * History: - * Data Who Remark - * 08/07/2007 MHC 1. Porting from 9x series PHYCFG.h. - * 2. Reorganize code architecture. - * 09/25/2008 MH 1. Add RL6052 register definition - * - *****************************************************************************/ -#ifndef __INC_HAL8192CPHYREG_H -#define __INC_HAL8192CPHYREG_H - - -/*--------------------------Define Parameters-------------------------------*/ - -//============================================================ -// 8192S Regsiter offset definition -//============================================================ - -// -// BB-PHY register PMAC 0x100 PHY 0x800 - 0xEFF -// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF -// 2. 0x800/0x900/0xA00/0xC00/0xD00/0xE00 -// 3. RF register 0x00-2E -// 4. Bit Mask for BB/RF register -// 5. Other defintion for BB/RF R/W -// - - -// -// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF -// 1. Page1(0x100) -// -#define rPMAC_Reset 0x100 -#define rPMAC_TxStart 0x104 -#define rPMAC_TxLegacySIG 0x108 -#define rPMAC_TxHTSIG1 0x10c -#define rPMAC_TxHTSIG2 0x110 -#define rPMAC_PHYDebug 0x114 -#define rPMAC_TxPacketNum 0x118 -#define rPMAC_TxIdle 0x11c -#define rPMAC_TxMACHeader0 0x120 -#define rPMAC_TxMACHeader1 0x124 -#define rPMAC_TxMACHeader2 0x128 -#define rPMAC_TxMACHeader3 0x12c -#define rPMAC_TxMACHeader4 0x130 -#define rPMAC_TxMACHeader5 0x134 -#define rPMAC_TxDataType 0x138 -#define rPMAC_TxRandomSeed 0x13c -#define rPMAC_CCKPLCPPreamble 0x140 -#define rPMAC_CCKPLCPHeader 0x144 -#define rPMAC_CCKCRC16 0x148 -#define rPMAC_OFDMRxCRC32OK 0x170 -#define rPMAC_OFDMRxCRC32Er 0x174 -#define rPMAC_OFDMRxParityEr 0x178 -#define rPMAC_OFDMRxCRC8Er 0x17c -#define rPMAC_CCKCRxRC16Er 0x180 -#define rPMAC_CCKCRxRC32Er 0x184 -#define rPMAC_CCKCRxRC32OK 0x188 -#define rPMAC_TxStatus 0x18c - -// -// 2. Page2(0x200) -// -// The following two definition are only used for USB interface. -#define RF_BB_CMD_ADDR 0x02c0 // RF/BB read/write command address. -#define RF_BB_CMD_DATA 0x02c4 // RF/BB read/write command data. - -// -// 3. Page8(0x800) -// -#define rFPGA0_RFMOD 0x800 //RF mode & CCK TxSC // RF BW Setting?? - -#define rFPGA0_TxInfo 0x804 // Status report?? -#define rFPGA0_PSDFunction 0x808 - -#define rFPGA0_TxGainStage 0x80c // Set TX PWR init gain? - -#define rFPGA0_RFTiming1 0x810 // Useless now -#define rFPGA0_RFTiming2 0x814 - -#define rFPGA0_XA_HSSIParameter1 0x820 // RF 3 wire register -#define rFPGA0_XA_HSSIParameter2 0x824 -#define rFPGA0_XB_HSSIParameter1 0x828 -#define rFPGA0_XB_HSSIParameter2 0x82c -#define rTxAGC_B_Rate18_06 0x830 -#define rTxAGC_B_Rate54_24 0x834 -#define rTxAGC_B_CCK1_55_Mcs32 0x838 -#define rTxAGC_B_Mcs03_Mcs00 0x83c - -#define rTxAGC_B_Mcs07_Mcs04 0x848 -#define rTxAGC_B_Mcs11_Mcs08 0x84c - -#define rFPGA0_XA_LSSIParameter 0x840 -#define rFPGA0_XB_LSSIParameter 0x844 - -#define rFPGA0_RFWakeUpParameter 0x850 // Useless now -#define rFPGA0_RFSleepUpParameter 0x854 - -#define rFPGA0_XAB_SwitchControl 0x858 // RF Channel switch -#define rFPGA0_XCD_SwitchControl 0x85c - -#define rFPGA0_XA_RFInterfaceOE 0x860 // RF Channel switch -#define rFPGA0_XB_RFInterfaceOE 0x864 - -#define rTxAGC_B_Mcs15_Mcs12 0x868 -#define rTxAGC_B_CCK11_A_CCK2_11 0x86c - -#define rFPGA0_XAB_RFInterfaceSW 0x870 // RF Interface Software Control -#define rFPGA0_XCD_RFInterfaceSW 0x874 - -#define rFPGA0_XAB_RFParameter 0x878 // RF Parameter -#define rFPGA0_XCD_RFParameter 0x87c - -#define rFPGA0_AnalogParameter1 0x880 // Crystal cap setting RF-R/W protection for parameter4?? -#define rFPGA0_AnalogParameter2 0x884 -#define rFPGA0_AnalogParameter3 0x888 // Useless now -#define rFPGA0_AnalogParameter4 0x88c - -#define rFPGA0_XA_LSSIReadBack 0x8a0 // Tranceiver LSSI Readback -#define rFPGA0_XB_LSSIReadBack 0x8a4 -#define rFPGA0_XC_LSSIReadBack 0x8a8 -#define rFPGA0_XD_LSSIReadBack 0x8ac - -#define rFPGA0_PSDReport 0x8b4 // Useless now -#define TransceiverA_HSPI_Readback 0x8b8 // Transceiver A HSPI Readback -#define TransceiverB_HSPI_Readback 0x8bc // Transceiver B HSPI Readback -#define rFPGA0_XAB_RFInterfaceRB 0x8e0 // Useless now // RF Interface Readback Value -#define rFPGA0_XCD_RFInterfaceRB 0x8e4 // Useless now - -// -// 4. Page9(0x900) -// -#define rFPGA1_RFMOD 0x900 //RF mode & OFDM TxSC // RF BW Setting?? - -#define rFPGA1_TxBlock 0x904 // Useless now -#define rFPGA1_DebugSelect 0x908 // Useless now -#define rFPGA1_TxInfo 0x90c // Useless now // Status report?? - -// -// 5. PageA(0xA00) -// -// Set Control channel to upper or lower. These settings are required only for 40MHz -#define rCCK0_System 0xa00 - -#define rCCK0_AFESetting 0xa04 // Disable init gain now // Select RX path by RSSI -#define rCCK0_CCA 0xa08 // Disable init gain now // Init gain - -#define rCCK0_RxAGC1 0xa0c //AGC default value, saturation level // Antenna Diversity, RX AGC, LNA Threshold, RX LNA Threshold useless now. Not the same as 90 series -#define rCCK0_RxAGC2 0xa10 //AGC & DAGC - -#define rCCK0_RxHP 0xa14 - -#define rCCK0_DSPParameter1 0xa18 //Timing recovery & Channel estimation threshold -#define rCCK0_DSPParameter2 0xa1c //SQ threshold - -#define rCCK0_TxFilter1 0xa20 -#define rCCK0_TxFilter2 0xa24 -#define rCCK0_DebugPort 0xa28 //debug port and Tx filter3 -#define rCCK0_FalseAlarmReport 0xa2c //0xa2d useless now 0xa30-a4f channel report -#define rCCK0_TRSSIReport 0xa50 -#define rCCK0_RxReport 0xa54 //0xa57 -#define rCCK0_FACounterLower 0xa5c //0xa5b -#define rCCK0_FACounterUpper 0xa58 //0xa5c -// -// PageB(0xB00) -// -#define rPdp_AntA 0xb00 -#define rPdp_AntA_4 0xb04 -#define rConfig_Pmpd_AntA 0xb28 -#define rConfig_AntA 0xb68 -#define rConfig_AntB 0xb6c -#define rPdp_AntB 0xb70 -#define rPdp_AntB_4 0xb74 -#define rConfig_Pmpd_AntB 0xb98 -#define rAPK 0xbd8 - -// -// 6. PageC(0xC00) -// -#define rOFDM0_LSTF 0xc00 - -#define rOFDM0_TRxPathEnable 0xc04 -#define rOFDM0_TRMuxPar 0xc08 -#define rOFDM0_TRSWIsolation 0xc0c - -#define rOFDM0_XARxAFE 0xc10 //RxIQ DC offset, Rx digital filter, DC notch filter -#define rOFDM0_XARxIQImbalance 0xc14 //RxIQ imblance matrix -#define rOFDM0_XBRxAFE 0xc18 -#define rOFDM0_XBRxIQImbalance 0xc1c -#define rOFDM0_XCRxAFE 0xc20 -#define rOFDM0_XCRxIQImbalance 0xc24 -#define rOFDM0_XDRxAFE 0xc28 -#define rOFDM0_XDRxIQImbalance 0xc2c - -#define rOFDM0_RxDetector1 0xc30 //PD,BW & SBD // DM tune init gain -#define rOFDM0_RxDetector2 0xc34 //SBD & Fame Sync. -#define rOFDM0_RxDetector3 0xc38 //Frame Sync. -#define rOFDM0_RxDetector4 0xc3c //PD, SBD, Frame Sync & Short-GI - -#define rOFDM0_RxDSP 0xc40 //Rx Sync Path -#define rOFDM0_CFOandDAGC 0xc44 //CFO & DAGC -#define rOFDM0_CCADropThreshold 0xc48 //CCA Drop threshold -#define rOFDM0_ECCAThreshold 0xc4c // energy CCA - -#define rOFDM0_XAAGCCore1 0xc50 // DIG -#define rOFDM0_XAAGCCore2 0xc54 -#define rOFDM0_XBAGCCore1 0xc58 -#define rOFDM0_XBAGCCore2 0xc5c -#define rOFDM0_XCAGCCore1 0xc60 -#define rOFDM0_XCAGCCore2 0xc64 -#define rOFDM0_XDAGCCore1 0xc68 -#define rOFDM0_XDAGCCore2 0xc6c - -#define rOFDM0_AGCParameter1 0xc70 -#define rOFDM0_AGCParameter2 0xc74 -#define rOFDM0_AGCRSSITable 0xc78 -#define rOFDM0_HTSTFAGC 0xc7c - -#define rOFDM0_XATxIQImbalance 0xc80 // TX PWR TRACK and DIG -#define rOFDM0_XATxAFE 0xc84 -#define rOFDM0_XBTxIQImbalance 0xc88 -#define rOFDM0_XBTxAFE 0xc8c -#define rOFDM0_XCTxIQImbalance 0xc90 -#define rOFDM0_XCTxAFE 0xc94 -#define rOFDM0_XDTxIQImbalance 0xc98 -#define rOFDM0_XDTxAFE 0xc9c - -#define rOFDM0_RxIQExtAnta 0xca0 -#define rOFDM0_TxCoeff1 0xca4 -#define rOFDM0_TxCoeff2 0xca8 -#define rOFDM0_TxCoeff3 0xcac -#define rOFDM0_TxCoeff4 0xcb0 -#define rOFDM0_TxCoeff5 0xcb4 -#define rOFDM0_TxCoeff6 0xcb8 -#define rOFDM0_RxHPParameter 0xce0 -#define rOFDM0_TxPseudoNoiseWgt 0xce4 -#define rOFDM0_FrameSync 0xcf0 -#define rOFDM0_DFSReport 0xcf4 - -// -// 7. PageD(0xD00) -// -#define rOFDM1_LSTF 0xd00 -#define rOFDM1_TRxPathEnable 0xd04 - -#define rOFDM1_CFO 0xd08 // No setting now -#define rOFDM1_CSI1 0xd10 -#define rOFDM1_SBD 0xd14 -#define rOFDM1_CSI2 0xd18 -#define rOFDM1_CFOTracking 0xd2c -#define rOFDM1_TRxMesaure1 0xd34 -#define rOFDM1_IntfDet 0xd3c -#define rOFDM1_PseudoNoiseStateAB 0xd50 -#define rOFDM1_PseudoNoiseStateCD 0xd54 -#define rOFDM1_RxPseudoNoiseWgt 0xd58 - -#define rOFDM_PHYCounter1 0xda0 //cca, parity fail -#define rOFDM_PHYCounter2 0xda4 //rate illegal, crc8 fail -#define rOFDM_PHYCounter3 0xda8 //MCS not support - -#define rOFDM_ShortCFOAB 0xdac // No setting now -#define rOFDM_ShortCFOCD 0xdb0 -#define rOFDM_LongCFOAB 0xdb4 -#define rOFDM_LongCFOCD 0xdb8 -#define rOFDM_TailCFOAB 0xdbc -#define rOFDM_TailCFOCD 0xdc0 -#define rOFDM_PWMeasure1 0xdc4 -#define rOFDM_PWMeasure2 0xdc8 -#define rOFDM_BWReport 0xdcc -#define rOFDM_AGCReport 0xdd0 -#define rOFDM_RxSNR 0xdd4 -#define rOFDM_RxEVMCSI 0xdd8 -#define rOFDM_SIGReport 0xddc - - -// -// 8. PageE(0xE00) -// -#define rTxAGC_A_Rate18_06 0xe00 -#define rTxAGC_A_Rate54_24 0xe04 -#define rTxAGC_A_CCK1_Mcs32 0xe08 -#define rTxAGC_A_Mcs03_Mcs00 0xe10 -#define rTxAGC_A_Mcs07_Mcs04 0xe14 -#define rTxAGC_A_Mcs11_Mcs08 0xe18 -#define rTxAGC_A_Mcs15_Mcs12 0xe1c - -#define rFPGA0_IQK 0xe28 -#define rTx_IQK_Tone_A 0xe30 -#define rRx_IQK_Tone_A 0xe34 -#define rTx_IQK_PI_A 0xe38 -#define rRx_IQK_PI_A 0xe3c - -#define rTx_IQK 0xe40 -#define rRx_IQK 0xe44 -#define rIQK_AGC_Pts 0xe48 -#define rIQK_AGC_Rsp 0xe4c -#define rTx_IQK_Tone_B 0xe50 -#define rRx_IQK_Tone_B 0xe54 -#define rTx_IQK_PI_B 0xe58 -#define rRx_IQK_PI_B 0xe5c -#define rIQK_AGC_Cont 0xe60 - -#define rBlue_Tooth 0xe6c -#define rRx_Wait_CCA 0xe70 -#define rTx_CCK_RFON 0xe74 -#define rTx_CCK_BBON 0xe78 -#define rTx_OFDM_RFON 0xe7c -#define rTx_OFDM_BBON 0xe80 -#define rTx_To_Rx 0xe84 -#define rTx_To_Tx 0xe88 -#define rRx_CCK 0xe8c - -#define rTx_Power_Before_IQK_A 0xe94 -#define rTx_Power_After_IQK_A 0xe9c - -#define rRx_Power_Before_IQK_A 0xea0 -#define rRx_Power_Before_IQK_A_2 0xea4 -#define rRx_Power_After_IQK_A 0xea8 -#define rRx_Power_After_IQK_A_2 0xeac - -#define rTx_Power_Before_IQK_B 0xeb4 -#define rTx_Power_After_IQK_B 0xebc - -#define rRx_Power_Before_IQK_B 0xec0 -#define rRx_Power_Before_IQK_B_2 0xec4 -#define rRx_Power_After_IQK_B 0xec8 -#define rRx_Power_After_IQK_B_2 0xecc - -#define rRx_OFDM 0xed0 -#define rRx_Wait_RIFS 0xed4 -#define rRx_TO_Rx 0xed8 -#define rStandby 0xedc -#define rSleep 0xee0 -#define rPMPD_ANAEN 0xeec - -// -// 7. RF Register 0x00-0x2E (RF 8256) -// RF-0222D 0x00-3F -// -//Zebra1 -#define rZebra1_HSSIEnable 0x0 // Useless now -#define rZebra1_TRxEnable1 0x1 -#define rZebra1_TRxEnable2 0x2 -#define rZebra1_AGC 0x4 -#define rZebra1_ChargePump 0x5 -#define rZebra1_Channel 0x7 // RF channel switch - -//#endif -#define rZebra1_TxGain 0x8 // Useless now -#define rZebra1_TxLPF 0x9 -#define rZebra1_RxLPF 0xb -#define rZebra1_RxHPFCorner 0xc - -//Zebra4 -#define rGlobalCtrl 0 // Useless now -#define rRTL8256_TxLPF 19 -#define rRTL8256_RxLPF 11 - -//RTL8258 -#define rRTL8258_TxLPF 0x11 // Useless now -#define rRTL8258_RxLPF 0x13 -#define rRTL8258_RSSILPF 0xa - -// -// RL6052 Register definition -// -#define RF_AC 0x00 // - -#define RF_IQADJ_G1 0x01 // -#define RF_IQADJ_G2 0x02 // -#define RF_BS_PA_APSET_G1_G4 0x03 -#define RF_BS_PA_APSET_G5_G8 0x04 -#define RF_POW_TRSW 0x05 // - -#define RF_GAIN_RX 0x06 // -#define RF_GAIN_TX 0x07 // - -#define RF_TXM_IDAC 0x08 // -#define RF_IPA_G 0x09 // -#define RF_TXBIAS_G 0x0A -#define RF_TXPA_AG 0x0B -#define RF_IPA_A 0x0C // -#define RF_TXBIAS_A 0x0D -#define RF_BS_PA_APSET_G9_G11 0x0E -#define RF_BS_IQGEN 0x0F // - -#define RF_MODE1 0x10 // -#define RF_MODE2 0x11 // - -#define RF_RX_AGC_HP 0x12 // -#define RF_TX_AGC 0x13 // -#define RF_BIAS 0x14 // -#define RF_IPA 0x15 // -#define RF_TXBIAS 0x16 // -#define RF_POW_ABILITY 0x17 // -#define RF_MODE_AG 0x18 // -#define rRfChannel 0x18 // RF channel and BW switch -#define RF_CHNLBW 0x18 // RF channel and BW switch -#define RF_TOP 0x19 // - -#define RF_RX_G1 0x1A // -#define RF_RX_G2 0x1B // - -#define RF_RX_BB2 0x1C // -#define RF_RX_BB1 0x1D // - -#define RF_RCK1 0x1E // -#define RF_RCK2 0x1F // - -#define RF_TX_G1 0x20 // -#define RF_TX_G2 0x21 // -#define RF_TX_G3 0x22 // - -#define RF_TX_BB1 0x23 // - -#define RF_T_METER 0x24 // - -#define RF_SYN_G1 0x25 // RF TX Power control -#define RF_SYN_G2 0x26 // RF TX Power control -#define RF_SYN_G3 0x27 // RF TX Power control -#define RF_SYN_G4 0x28 // RF TX Power control -#define RF_SYN_G5 0x29 // RF TX Power control -#define RF_SYN_G6 0x2A // RF TX Power control -#define RF_SYN_G7 0x2B // RF TX Power control -#define RF_SYN_G8 0x2C // RF TX Power control - -#define RF_RCK_OS 0x30 // RF TX PA control - -#define RF_TXPA_G1 0x31 // RF TX PA control -#define RF_TXPA_G2 0x32 // RF TX PA control -#define RF_TXPA_G3 0x33 // RF TX PA control - -#define RF_MIXER_BW 0x87 // RF Mixer bandwidth - -// -//Bit Mask -// -// 1. Page1(0x100) -#define bBBResetB 0x100 // Useless now? -#define bGlobalResetB 0x200 -#define bOFDMTxStart 0x4 -#define bCCKTxStart 0x8 -#define bCRC32Debug 0x100 -#define bPMACLoopback 0x10 -#define bTxLSIG 0xffffff -#define bOFDMTxRate 0xf -#define bOFDMTxReserved 0x10 -#define bOFDMTxLength 0x1ffe0 -#define bOFDMTxParity 0x20000 -#define bTxHTSIG1 0xffffff -#define bTxHTMCSRate 0x7f -#define bTxHTBW 0x80 -#define bTxHTLength 0xffff00 -#define bTxHTSIG2 0xffffff -#define bTxHTSmoothing 0x1 -#define bTxHTSounding 0x2 -#define bTxHTReserved 0x4 -#define bTxHTAggreation 0x8 -#define bTxHTSTBC 0x30 -#define bTxHTAdvanceCoding 0x40 -#define bTxHTShortGI 0x80 -#define bTxHTNumberHT_LTF 0x300 -#define bTxHTCRC8 0x3fc00 -#define bCounterReset 0x10000 -#define bNumOfOFDMTx 0xffff -#define bNumOfCCKTx 0xffff0000 -#define bTxIdleInterval 0xffff -#define bOFDMService 0xffff0000 -#define bTxMACHeader 0xffffffff -#define bTxDataInit 0xff -#define bTxHTMode 0x100 -#define bTxDataType 0x30000 -#define bTxRandomSeed 0xffffffff -#define bCCKTxPreamble 0x1 -#define bCCKTxSFD 0xffff0000 -#define bCCKTxSIG 0xff -#define bCCKTxService 0xff00 -#define bCCKLengthExt 0x8000 -#define bCCKTxLength 0xffff0000 -#define bCCKTxCRC16 0xffff -#define bCCKTxStatus 0x1 -#define bOFDMTxStatus 0x2 - -#define IS_BB_REG_OFFSET_92S(_Offset) ((_Offset >= 0x800) && (_Offset <= 0xfff)) - -// 2. Page8(0x800) -#define bRFMOD 0x1 // Reg 0x800 rFPGA0_RFMOD -#define bJapanMode 0x2 -#define bCCKTxSC 0x30 -#define bCCKEn 0x1000000 -#define bOFDMEn 0x2000000 - -#define bOFDMRxADCPhase 0x10000 // Useless now -#define bOFDMTxDACPhase 0x40000 -#define bXATxAGC 0x3f - -#define bAntennaSelect 0x0300 - -#define bXBTxAGC 0xf00 // Reg 80c rFPGA0_TxGainStage -#define bXCTxAGC 0xf000 -#define bXDTxAGC 0xf0000 - -#define bPAStart 0xf0000000 // Useless now -#define bTRStart 0x00f00000 -#define bRFStart 0x0000f000 -#define bBBStart 0x000000f0 -#define bBBCCKStart 0x0000000f -#define bPAEnd 0xf //Reg0x814 -#define bTREnd 0x0f000000 -#define bRFEnd 0x000f0000 -#define bCCAMask 0x000000f0 //T2R -#define bR2RCCAMask 0x00000f00 -#define bHSSI_R2TDelay 0xf8000000 -#define bHSSI_T2RDelay 0xf80000 -#define bContTxHSSI 0x400 //chane gain at continue Tx -#define bIGFromCCK 0x200 -#define bAGCAddress 0x3f -#define bRxHPTx 0x7000 -#define bRxHPT2R 0x38000 -#define bRxHPCCKIni 0xc0000 -#define bAGCTxCode 0xc00000 -#define bAGCRxCode 0x300000 - -#define b3WireDataLength 0x800 // Reg 0x820~84f rFPGA0_XA_HSSIParameter1 -#define b3WireAddressLength 0x400 - -#define b3WireRFPowerDown 0x1 // Useless now -//#define bHWSISelect 0x8 -#define b5GPAPEPolarity 0x40000000 -#define b2GPAPEPolarity 0x80000000 -#define bRFSW_TxDefaultAnt 0x3 -#define bRFSW_TxOptionAnt 0x30 -#define bRFSW_RxDefaultAnt 0x300 -#define bRFSW_RxOptionAnt 0x3000 -#define bRFSI_3WireData 0x1 -#define bRFSI_3WireClock 0x2 -#define bRFSI_3WireLoad 0x4 -#define bRFSI_3WireRW 0x8 -#define bRFSI_3Wire 0xf - -#define bRFSI_RFENV 0x10 // Reg 0x870 rFPGA0_XAB_RFInterfaceSW - -#define bRFSI_TRSW 0x20 // Useless now -#define bRFSI_TRSWB 0x40 -#define bRFSI_ANTSW 0x100 -#define bRFSI_ANTSWB 0x200 -#define bRFSI_PAPE 0x400 -#define bRFSI_PAPE5G 0x800 -#define bBandSelect 0x1 -#define bHTSIG2_GI 0x80 -#define bHTSIG2_Smoothing 0x01 -#define bHTSIG2_Sounding 0x02 -#define bHTSIG2_Aggreaton 0x08 -#define bHTSIG2_STBC 0x30 -#define bHTSIG2_AdvCoding 0x40 -#define bHTSIG2_NumOfHTLTF 0x300 -#define bHTSIG2_CRC8 0x3fc -#define bHTSIG1_MCS 0x7f -#define bHTSIG1_BandWidth 0x80 -#define bHTSIG1_HTLength 0xffff -#define bLSIG_Rate 0xf -#define bLSIG_Reserved 0x10 -#define bLSIG_Length 0x1fffe -#define bLSIG_Parity 0x20 -#define bCCKRxPhase 0x4 - -#define bLSSIReadAddress 0x7f800000 // T65 RF - -#define bLSSIReadEdge 0x80000000 //LSSI "Read" edge signal - -#define bLSSIReadBackData 0xfffff // T65 RF - -#define bLSSIReadOKFlag 0x1000 // Useless now -#define bCCKSampleRate 0x8 //0: 44MHz, 1:88MHz -#define bRegulator0Standby 0x1 -#define bRegulatorPLLStandby 0x2 -#define bRegulator1Standby 0x4 -#define bPLLPowerUp 0x8 -#define bDPLLPowerUp 0x10 -#define bDA10PowerUp 0x20 -#define bAD7PowerUp 0x200 -#define bDA6PowerUp 0x2000 -#define bXtalPowerUp 0x4000 -#define b40MDClkPowerUP 0x8000 -#define bDA6DebugMode 0x20000 -#define bDA6Swing 0x380000 - -#define bADClkPhase 0x4000000 // Reg 0x880 rFPGA0_AnalogParameter1 20/40 CCK support switch 40/80 BB MHZ - -#define b80MClkDelay 0x18000000 // Useless -#define bAFEWatchDogEnable 0x20000000 - -#define bXtalCap01 0xc0000000 // Reg 0x884 rFPGA0_AnalogParameter2 Crystal cap -#define bXtalCap23 0x3 -#define bXtalCap92x 0x0f000000 -#define bXtalCap 0x0f000000 - -#define bIntDifClkEnable 0x400 // Useless -#define bExtSigClkEnable 0x800 -#define bBandgapMbiasPowerUp 0x10000 -#define bAD11SHGain 0xc0000 -#define bAD11InputRange 0x700000 -#define bAD11OPCurrent 0x3800000 -#define bIPathLoopback 0x4000000 -#define bQPathLoopback 0x8000000 -#define bAFELoopback 0x10000000 -#define bDA10Swing 0x7e0 -#define bDA10Reverse 0x800 -#define bDAClkSource 0x1000 -#define bAD7InputRange 0x6000 -#define bAD7Gain 0x38000 -#define bAD7OutputCMMode 0x40000 -#define bAD7InputCMMode 0x380000 -#define bAD7Current 0xc00000 -#define bRegulatorAdjust 0x7000000 -#define bAD11PowerUpAtTx 0x1 -#define bDA10PSAtTx 0x10 -#define bAD11PowerUpAtRx 0x100 -#define bDA10PSAtRx 0x1000 -#define bCCKRxAGCFormat 0x200 -#define bPSDFFTSamplepPoint 0xc000 -#define bPSDAverageNum 0x3000 -#define bIQPathControl 0xc00 -#define bPSDFreq 0x3ff -#define bPSDAntennaPath 0x30 -#define bPSDIQSwitch 0x40 -#define bPSDRxTrigger 0x400000 -#define bPSDTxTrigger 0x80000000 -#define bPSDSineToneScale 0x7f000000 -#define bPSDReport 0xffff - -// 3. Page9(0x900) -#define bOFDMTxSC 0x30000000 // Useless -#define bCCKTxOn 0x1 -#define bOFDMTxOn 0x2 -#define bDebugPage 0xfff //reset debug page and also HWord, LWord -#define bDebugItem 0xff //reset debug page and LWord -#define bAntL 0x10 -#define bAntNonHT 0x100 -#define bAntHT1 0x1000 -#define bAntHT2 0x10000 -#define bAntHT1S1 0x100000 -#define bAntNonHTS1 0x1000000 - -// 4. PageA(0xA00) -#define bCCKBBMode 0x3 // Useless -#define bCCKTxPowerSaving 0x80 -#define bCCKRxPowerSaving 0x40 - -#define bCCKSideBand 0x10 // Reg 0xa00 rCCK0_System 20/40 switch - -#define bCCKScramble 0x8 // Useless -#define bCCKAntDiversity 0x8000 -#define bCCKCarrierRecovery 0x4000 -#define bCCKTxRate 0x3000 -#define bCCKDCCancel 0x0800 -#define bCCKISICancel 0x0400 -#define bCCKMatchFilter 0x0200 -#define bCCKEqualizer 0x0100 -#define bCCKPreambleDetect 0x800000 -#define bCCKFastFalseCCA 0x400000 -#define bCCKChEstStart 0x300000 -#define bCCKCCACount 0x080000 -#define bCCKcs_lim 0x070000 -#define bCCKBistMode 0x80000000 -#define bCCKCCAMask 0x40000000 -#define bCCKTxDACPhase 0x4 -#define bCCKRxADCPhase 0x20000000 //r_rx_clk -#define bCCKr_cp_mode0 0x0100 -#define bCCKTxDCOffset 0xf0 -#define bCCKRxDCOffset 0xf -#define bCCKCCAMode 0xc000 -#define bCCKFalseCS_lim 0x3f00 -#define bCCKCS_ratio 0xc00000 -#define bCCKCorgBit_sel 0x300000 -#define bCCKPD_lim 0x0f0000 -#define bCCKNewCCA 0x80000000 -#define bCCKRxHPofIG 0x8000 -#define bCCKRxIG 0x7f00 -#define bCCKLNAPolarity 0x800000 -#define bCCKRx1stGain 0x7f0000 -#define bCCKRFExtend 0x20000000 //CCK Rx Iinital gain polarity -#define bCCKRxAGCSatLevel 0x1f000000 -#define bCCKRxAGCSatCount 0xe0 -#define bCCKRxRFSettle 0x1f //AGCsamp_dly -#define bCCKFixedRxAGC 0x8000 -//#define bCCKRxAGCFormat 0x4000 //remove to HSSI register 0x824 -#define bCCKAntennaPolarity 0x2000 -#define bCCKTxFilterType 0x0c00 -#define bCCKRxAGCReportType 0x0300 -#define bCCKRxDAGCEn 0x80000000 -#define bCCKRxDAGCPeriod 0x20000000 -#define bCCKRxDAGCSatLevel 0x1f000000 -#define bCCKTimingRecovery 0x800000 -#define bCCKTxC0 0x3f0000 -#define bCCKTxC1 0x3f000000 -#define bCCKTxC2 0x3f -#define bCCKTxC3 0x3f00 -#define bCCKTxC4 0x3f0000 -#define bCCKTxC5 0x3f000000 -#define bCCKTxC6 0x3f -#define bCCKTxC7 0x3f00 -#define bCCKDebugPort 0xff0000 -#define bCCKDACDebug 0x0f000000 -#define bCCKFalseAlarmEnable 0x8000 -#define bCCKFalseAlarmRead 0x4000 -#define bCCKTRSSI 0x7f -#define bCCKRxAGCReport 0xfe -#define bCCKRxReport_AntSel 0x80000000 -#define bCCKRxReport_MFOff 0x40000000 -#define bCCKRxRxReport_SQLoss 0x20000000 -#define bCCKRxReport_Pktloss 0x10000000 -#define bCCKRxReport_Lockedbit 0x08000000 -#define bCCKRxReport_RateError 0x04000000 -#define bCCKRxReport_RxRate 0x03000000 -#define bCCKRxFACounterLower 0xff -#define bCCKRxFACounterUpper 0xff000000 -#define bCCKRxHPAGCStart 0xe000 -#define bCCKRxHPAGCFinal 0x1c00 -#define bCCKRxFalseAlarmEnable 0x8000 -#define bCCKFACounterFreeze 0x4000 -#define bCCKTxPathSel 0x10000000 -#define bCCKDefaultRxPath 0xc000000 -#define bCCKOptionRxPath 0x3000000 - -// 5. PageC(0xC00) -#define bNumOfSTF 0x3 // Useless -#define bShift_L 0xc0 -#define bGI_TH 0xc -#define bRxPathA 0x1 -#define bRxPathB 0x2 -#define bRxPathC 0x4 -#define bRxPathD 0x8 -#define bTxPathA 0x1 -#define bTxPathB 0x2 -#define bTxPathC 0x4 -#define bTxPathD 0x8 -#define bTRSSIFreq 0x200 -#define bADCBackoff 0x3000 -#define bDFIRBackoff 0xc000 -#define bTRSSILatchPhase 0x10000 -#define bRxIDCOffset 0xff -#define bRxQDCOffset 0xff00 -#define bRxDFIRMode 0x1800000 -#define bRxDCNFType 0xe000000 -#define bRXIQImb_A 0x3ff -#define bRXIQImb_B 0xfc00 -#define bRXIQImb_C 0x3f0000 -#define bRXIQImb_D 0xffc00000 -#define bDC_dc_Notch 0x60000 -#define bRxNBINotch 0x1f000000 -#define bPD_TH 0xf -#define bPD_TH_Opt2 0xc000 -#define bPWED_TH 0x700 -#define bIfMF_Win_L 0x800 -#define bPD_Option 0x1000 -#define bMF_Win_L 0xe000 -#define bBW_Search_L 0x30000 -#define bwin_enh_L 0xc0000 -#define bBW_TH 0x700000 -#define bED_TH2 0x3800000 -#define bBW_option 0x4000000 -#define bRatio_TH 0x18000000 -#define bWindow_L 0xe0000000 -#define bSBD_Option 0x1 -#define bFrame_TH 0x1c -#define bFS_Option 0x60 -#define bDC_Slope_check 0x80 -#define bFGuard_Counter_DC_L 0xe00 -#define bFrame_Weight_Short 0x7000 -#define bSub_Tune 0xe00000 -#define bFrame_DC_Length 0xe000000 -#define bSBD_start_offset 0x30000000 -#define bFrame_TH_2 0x7 -#define bFrame_GI2_TH 0x38 -#define bGI2_Sync_en 0x40 -#define bSarch_Short_Early 0x300 -#define bSarch_Short_Late 0xc00 -#define bSarch_GI2_Late 0x70000 -#define bCFOAntSum 0x1 -#define bCFOAcc 0x2 -#define bCFOStartOffset 0xc -#define bCFOLookBack 0x70 -#define bCFOSumWeight 0x80 -#define bDAGCEnable 0x10000 -#define bTXIQImb_A 0x3ff -#define bTXIQImb_B 0xfc00 -#define bTXIQImb_C 0x3f0000 -#define bTXIQImb_D 0xffc00000 -#define bTxIDCOffset 0xff -#define bTxQDCOffset 0xff00 -#define bTxDFIRMode 0x10000 -#define bTxPesudoNoiseOn 0x4000000 -#define bTxPesudoNoise_A 0xff -#define bTxPesudoNoise_B 0xff00 -#define bTxPesudoNoise_C 0xff0000 -#define bTxPesudoNoise_D 0xff000000 -#define bCCADropOption 0x20000 -#define bCCADropThres 0xfff00000 -#define bEDCCA_H 0xf -#define bEDCCA_L 0xf0 -#define bLambda_ED 0x300 -#define bRxInitialGain 0x7f -#define bRxAntDivEn 0x80 -#define bRxAGCAddressForLNA 0x7f00 -#define bRxHighPowerFlow 0x8000 -#define bRxAGCFreezeThres 0xc0000 -#define bRxFreezeStep_AGC1 0x300000 -#define bRxFreezeStep_AGC2 0xc00000 -#define bRxFreezeStep_AGC3 0x3000000 -#define bRxFreezeStep_AGC0 0xc000000 -#define bRxRssi_Cmp_En 0x10000000 -#define bRxQuickAGCEn 0x20000000 -#define bRxAGCFreezeThresMode 0x40000000 -#define bRxOverFlowCheckType 0x80000000 -#define bRxAGCShift 0x7f -#define bTRSW_Tri_Only 0x80 -#define bPowerThres 0x300 -#define bRxAGCEn 0x1 -#define bRxAGCTogetherEn 0x2 -#define bRxAGCMin 0x4 -#define bRxHP_Ini 0x7 -#define bRxHP_TRLNA 0x70 -#define bRxHP_RSSI 0x700 -#define bRxHP_BBP1 0x7000 -#define bRxHP_BBP2 0x70000 -#define bRxHP_BBP3 0x700000 -#define bRSSI_H 0x7f0000 //the threshold for high power -#define bRSSI_Gen 0x7f000000 //the threshold for ant diversity -#define bRxSettle_TRSW 0x7 -#define bRxSettle_LNA 0x38 -#define bRxSettle_RSSI 0x1c0 -#define bRxSettle_BBP 0xe00 -#define bRxSettle_RxHP 0x7000 -#define bRxSettle_AntSW_RSSI 0x38000 -#define bRxSettle_AntSW 0xc0000 -#define bRxProcessTime_DAGC 0x300000 -#define bRxSettle_HSSI 0x400000 -#define bRxProcessTime_BBPPW 0x800000 -#define bRxAntennaPowerShift 0x3000000 -#define bRSSITableSelect 0xc000000 -#define bRxHP_Final 0x7000000 -#define bRxHTSettle_BBP 0x7 -#define bRxHTSettle_HSSI 0x8 -#define bRxHTSettle_RxHP 0x70 -#define bRxHTSettle_BBPPW 0x80 -#define bRxHTSettle_Idle 0x300 -#define bRxHTSettle_Reserved 0x1c00 -#define bRxHTRxHPEn 0x8000 -#define bRxHTAGCFreezeThres 0x30000 -#define bRxHTAGCTogetherEn 0x40000 -#define bRxHTAGCMin 0x80000 -#define bRxHTAGCEn 0x100000 -#define bRxHTDAGCEn 0x200000 -#define bRxHTRxHP_BBP 0x1c00000 -#define bRxHTRxHP_Final 0xe0000000 -#define bRxPWRatioTH 0x3 -#define bRxPWRatioEn 0x4 -#define bRxMFHold 0x3800 -#define bRxPD_Delay_TH1 0x38 -#define bRxPD_Delay_TH2 0x1c0 -#define bRxPD_DC_COUNT_MAX 0x600 -//#define bRxMF_Hold 0x3800 -#define bRxPD_Delay_TH 0x8000 -#define bRxProcess_Delay 0xf0000 -#define bRxSearchrange_GI2_Early 0x700000 -#define bRxFrame_Guard_Counter_L 0x3800000 -#define bRxSGI_Guard_L 0xc000000 -#define bRxSGI_Search_L 0x30000000 -#define bRxSGI_TH 0xc0000000 -#define bDFSCnt0 0xff -#define bDFSCnt1 0xff00 -#define bDFSFlag 0xf0000 -#define bMFWeightSum 0x300000 -#define bMinIdxTH 0x7f000000 -#define bDAFormat 0x40000 -#define bTxChEmuEnable 0x01000000 -#define bTRSWIsolation_A 0x7f -#define bTRSWIsolation_B 0x7f00 -#define bTRSWIsolation_C 0x7f0000 -#define bTRSWIsolation_D 0x7f000000 -#define bExtLNAGain 0x7c00 - -// 6. PageE(0xE00) -#define bSTBCEn 0x4 // Useless -#define bAntennaMapping 0x10 -#define bNss 0x20 -#define bCFOAntSumD 0x200 -#define bPHYCounterReset 0x8000000 -#define bCFOReportGet 0x4000000 -#define bOFDMContinueTx 0x10000000 -#define bOFDMSingleCarrier 0x20000000 -#define bOFDMSingleTone 0x40000000 -//#define bRxPath1 0x01 -//#define bRxPath2 0x02 -//#define bRxPath3 0x04 -//#define bRxPath4 0x08 -//#define bTxPath1 0x10 -//#define bTxPath2 0x20 -#define bHTDetect 0x100 -#define bCFOEn 0x10000 -#define bCFOValue 0xfff00000 -#define bSigTone_Re 0x3f -#define bSigTone_Im 0x7f00 -#define bCounter_CCA 0xffff -#define bCounter_ParityFail 0xffff0000 -#define bCounter_RateIllegal 0xffff -#define bCounter_CRC8Fail 0xffff0000 -#define bCounter_MCSNoSupport 0xffff -#define bCounter_FastSync 0xffff -#define bShortCFO 0xfff -#define bShortCFOTLength 12 //total -#define bShortCFOFLength 11 //fraction -#define bLongCFO 0x7ff -#define bLongCFOTLength 11 -#define bLongCFOFLength 11 -#define bTailCFO 0x1fff -#define bTailCFOTLength 13 -#define bTailCFOFLength 12 -#define bmax_en_pwdB 0xffff -#define bCC_power_dB 0xffff0000 -#define bnoise_pwdB 0xffff -#define bPowerMeasTLength 10 -#define bPowerMeasFLength 3 -#define bRx_HT_BW 0x1 -#define bRxSC 0x6 -#define bRx_HT 0x8 -#define bNB_intf_det_on 0x1 -#define bIntf_win_len_cfg 0x30 -#define bNB_Intf_TH_cfg 0x1c0 -#define bRFGain 0x3f -#define bTableSel 0x40 -#define bTRSW 0x80 -#define bRxSNR_A 0xff -#define bRxSNR_B 0xff00 -#define bRxSNR_C 0xff0000 -#define bRxSNR_D 0xff000000 -#define bSNREVMTLength 8 -#define bSNREVMFLength 1 -#define bCSI1st 0xff -#define bCSI2nd 0xff00 -#define bRxEVM1st 0xff0000 -#define bRxEVM2nd 0xff000000 -#define bSIGEVM 0xff -#define bPWDB 0xff00 -#define bSGIEN 0x10000 - -#define bSFactorQAM1 0xf // Useless -#define bSFactorQAM2 0xf0 -#define bSFactorQAM3 0xf00 -#define bSFactorQAM4 0xf000 -#define bSFactorQAM5 0xf0000 -#define bSFactorQAM6 0xf0000 -#define bSFactorQAM7 0xf00000 -#define bSFactorQAM8 0xf000000 -#define bSFactorQAM9 0xf0000000 -#define bCSIScheme 0x100000 - -#define bNoiseLvlTopSet 0x3 // Useless -#define bChSmooth 0x4 -#define bChSmoothCfg1 0x38 -#define bChSmoothCfg2 0x1c0 -#define bChSmoothCfg3 0xe00 -#define bChSmoothCfg4 0x7000 -#define bMRCMode 0x800000 -#define bTHEVMCfg 0x7000000 - -#define bLoopFitType 0x1 // Useless -#define bUpdCFO 0x40 -#define bUpdCFOOffData 0x80 -#define bAdvUpdCFO 0x100 -#define bAdvTimeCtrl 0x800 -#define bUpdClko 0x1000 -#define bFC 0x6000 -#define bTrackingMode 0x8000 -#define bPhCmpEnable 0x10000 -#define bUpdClkoLTF 0x20000 -#define bComChCFO 0x40000 -#define bCSIEstiMode 0x80000 -#define bAdvUpdEqz 0x100000 -#define bUChCfg 0x7000000 -#define bUpdEqz 0x8000000 - -//Rx Pseduo noise -#define bRxPesudoNoiseOn 0x20000000 // Useless -#define bRxPesudoNoise_A 0xff -#define bRxPesudoNoise_B 0xff00 -#define bRxPesudoNoise_C 0xff0000 -#define bRxPesudoNoise_D 0xff000000 -#define bPesudoNoiseState_A 0xffff -#define bPesudoNoiseState_B 0xffff0000 -#define bPesudoNoiseState_C 0xffff -#define bPesudoNoiseState_D 0xffff0000 - -//7. RF Register -//Zebra1 -#define bZebra1_HSSIEnable 0x8 // Useless -#define bZebra1_TRxControl 0xc00 -#define bZebra1_TRxGainSetting 0x07f -#define bZebra1_RxCorner 0xc00 -#define bZebra1_TxChargePump 0x38 -#define bZebra1_RxChargePump 0x7 -#define bZebra1_ChannelNum 0xf80 -#define bZebra1_TxLPFBW 0x400 -#define bZebra1_RxLPFBW 0x600 - -//Zebra4 -#define bRTL8256RegModeCtrl1 0x100 // Useless -#define bRTL8256RegModeCtrl0 0x40 -#define bRTL8256_TxLPFBW 0x18 -#define bRTL8256_RxLPFBW 0x600 - -//RTL8258 -#define bRTL8258_TxLPFBW 0xc // Useless -#define bRTL8258_RxLPFBW 0xc00 -#define bRTL8258_RSSILPFBW 0xc0 - - -// -// Other Definition -// - -//byte endable for sb_write -#define bByte0 0x1 // Useless -#define bByte1 0x2 -#define bByte2 0x4 -#define bByte3 0x8 -#define bWord0 0x3 -#define bWord1 0xc -#define bDWord 0xf - -//for PutRegsetting & GetRegSetting BitMask -#define bMaskByte0 0xff // Reg 0xc50 rOFDM0_XAAGCCore~0xC6f -#define bMaskByte1 0xff00 -#define bMaskByte2 0xff0000 -#define bMaskByte3 0xff000000 -#define bMaskHWord 0xffff0000 -#define bMaskLWord 0x0000ffff -#define bMaskDWord 0xffffffff -#define bMask12Bits 0xfff -#define bMaskH4Bits 0xf0000000 -#define bMaskOFDM_D 0xffc00000 -#define bMaskCCK 0x3f3f3f3f - -//for PutRFRegsetting & GetRFRegSetting BitMask -//#define bMask12Bits 0xfffff // RF Reg mask bits -//#define bMask20Bits 0xfffff // RF Reg mask bits T65 RF -#define bRFRegOffsetMask 0xfffff - -#define bEnable 0x1 // Useless -#define bDisable 0x0 - -#define LeftAntenna 0x0 // Useless -#define RightAntenna 0x1 - -#define tCheckTxStatus 500 //500ms // Useless -#define tUpdateRxCounter 100 //100ms - -#define rateCCK 0 // Useless -#define rateOFDM 1 -#define rateHT 2 - -//define Register-End -#define bPMAC_End 0x1ff // Useless -#define bFPGAPHY0_End 0x8ff -#define bFPGAPHY1_End 0x9ff -#define bCCKPHY0_End 0xaff -#define bOFDMPHY0_End 0xcff -#define bOFDMPHY1_End 0xdff - -//define max debug item in each debug page -//#define bMaxItem_FPGA_PHY0 0x9 -//#define bMaxItem_FPGA_PHY1 0x3 -//#define bMaxItem_PHY_11B 0x16 -//#define bMaxItem_OFDM_PHY0 0x29 -//#define bMaxItem_OFDM_PHY1 0x0 - -#define bPMACControl 0x0 // Useless -#define bWMACControl 0x1 -#define bWNICControl 0x2 - -#define PathA 0x0 // Useless -#define PathB 0x1 -#define PathC 0x2 -#define PathD 0x3 - -/*--------------------------Define Parameters-------------------------------*/ - - -#endif //__INC_HAL8192SPHYREG_H - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/Hal8195APhyCfg.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/Hal8195APhyCfg.h deleted file mode 100644 index c8e7b4c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/Hal8195APhyCfg.h +++ /dev/null @@ -1,186 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __INC_HAL8195APHYCFG_H__ -#define __INC_HAL8195APHYCFG_H__ - -/*--------------------------Define Parameters-------------------------------*/ -#define LOOP_LIMIT 5 -#define MAX_STALL_TIME 50 //us -#define AntennaDiversityValue 0x80 //(Adapter->bSoftwareAntennaDiversity ? 0x00:0x80) -#define MAX_TXPWR_IDX_NMODE_92S 63 -#define Reset_Cnt_Limit 3 - -#if defined (CONFIG_PCI_HCI) || defined(CONFIG_LX_HCI) -#define MAX_AGGR_NUM 0x0B -#else -#define MAX_AGGR_NUM 0x07 -#endif // CONFIG_PCI_HCI - - -/*--------------------------Define Parameters End-------------------------------*/ - - -/*------------------------------Define structure----------------------------*/ - -/* BB/RF related */ - -typedef struct _R_ANTENNA_SELECT_OFDM{ - u32 r_tx_antenna:4; - u32 r_ant_l:4; - u32 r_ant_non_ht:4; - u32 r_ant_ht1:4; - u32 r_ant_ht2:4; - u32 r_ant_ht_s1:4; - u32 r_ant_non_ht_s1:4; - u32 OFDM_TXSC:2; - u32 Reserved:2; -}R_ANTENNA_SELECT_OFDM; - -typedef struct _R_ANTENNA_SELECT_CCK{ - u8 r_cckrx_enable_2:2; - u8 r_cckrx_enable:2; - u8 r_ccktx_enable:4; -}R_ANTENNA_SELECT_CCK; - -/*------------------------------Define structure End----------------------------*/ - -/*--------------------------Exported Function prototype---------------------*/ - -u32 -PHY_QueryBBReg_8195A( - IN PADAPTER Adapter, - IN u32 RegAddr, - IN u32 BitMask - ); - -VOID -PHY_SetBBReg_8195A( - IN PADAPTER Adapter, - IN u32 RegAddr, - IN u32 BitMask, - IN u32 Data - ); - -u32 -PHY_QueryRFReg_8195A( - IN PADAPTER Adapter, - IN u32 eRFPath, - IN u32 RegAddr, - IN u32 BitMask - ); - -VOID -PHY_SetRFReg_8195A( - IN PADAPTER Adapter, - IN u32 eRFPath, - IN u32 RegAddr, - IN u32 BitMask, - IN u32 Data - ); - -u32 PHY_QueryBBReg_8195A_Safe( - IN PADAPTER Adapter, - IN u32 RegAddr, - IN u32 BitMask -); - -VOID PHY_SetBBReg_8195A_Safe( - IN PADAPTER Adapter, - IN u32 RegAddr, - IN u32 BitMask, - IN u32 Data -); - -#define PHY_QueryBBReg(Adapter, RegAddr, BitMask) PHY_QueryBBReg_8195A_Safe((Adapter), (RegAddr), (BitMask)) -#define PHY_SetBBReg(Adapter, RegAddr, BitMask, Data) PHY_SetBBReg_8195A_Safe((Adapter), (RegAddr), (BitMask), (Data)) -#define PHY_QueryRFReg(Adapter, eRFPath, RegAddr, BitMask) PHY_QueryRFReg_8195A((Adapter), (eRFPath), (RegAddr), (BitMask)) -#define PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data) PHY_SetRFReg_8195A((Adapter), (eRFPath), (RegAddr), (BitMask), (Data)) - -#define PHY_SetMacReg PHY_SetBBReg -#define PHY_QueryMacReg PHY_QueryBBReg -/* MAC/BB/RF HAL config */ -int PHY_BBConfig8195A(PADAPTER Adapter ); - -int PHY_RFConfig8195A(PADAPTER Adapter ); - -s32 PHY_MACConfig8195A(PADAPTER padapter); - -#ifdef CONFIG_SUDO_PHY_SETTING -int PHY_SudoPhyConfig8195A(PADAPTER Adapter); -#endif - -int -PHY_ConfigRFWithParaFile_8195A( - IN PADAPTER Adapter, - IN u8* pFileName, - RF_PATH eRFPath -); -int -PHY_ConfigRFWithHeaderFile_8723B( - IN PADAPTER Adapter, - RF_PATH eRFPath -); - -u8 -PHY_GetTxPowerIndex_8195A( - IN PADAPTER pAdapter, - IN u8 RFPath, - IN u8 Rate, - IN CHANNEL_WIDTH BandWidth, - IN u8 Channel - ); - -VOID -PHY_SetTxPowerLevel8195A( - IN PADAPTER Adapter, - IN u8 channel - ); - -VOID -PHY_SetBWMode8195A( - IN PADAPTER Adapter, - IN CHANNEL_WIDTH Bandwidth, // 20M or 40M - IN unsigned char Offset // Upper, Lower, or Don't care -); - -VOID -PHY_SwChnl8195A( // Call after initialization - IN PADAPTER Adapter, - IN u8 channel - ); - -VOID -PHY_SetSwChnlBWMode8195A( - IN PADAPTER Adapter, - IN u8 channel, - IN CHANNEL_WIDTH Bandwidth, - IN u8 Offset40, - IN u8 Offset80 -); - -VOID PHY_SetRFPathSwitch_8723B( - IN PADAPTER pAdapter, - IN BOOLEAN bMain - ); - -/*--------------------------Exported Function prototype End---------------------*/ - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/Hal8195APhyReg.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/Hal8195APhyReg.h deleted file mode 100644 index 1ae9e30..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/Hal8195APhyReg.h +++ /dev/null @@ -1,272 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __INC_HAL8195APHYREG_H__ -#define __INC_HAL8195APHYREG_H__ - -// -// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF -// Page1(0x100) -// -#define rPMAC_Reset 0x100 - -// -// Page8(0x800) -// -#define rFPGA0_RFMOD 0x800 //RF mode & CCK TxSC // RF BW Setting?? -#define rFPGA0_TxInfo 0x804 // Status report?? -#define rFPGA0_TxGainStage 0x80c // Set TX PWR init gain? -#define rFPGA0_XA_HSSIParameter1 0x820 // RF 3 wire register -#define rFPGA0_XA_HSSIParameter2 0x824 -#define rFPGA0_XB_HSSIParameter1 0x828 -#define rFPGA0_XB_HSSIParameter2 0x82c -#define rTxAGC_B_Rate18_06 0x830 -#define rTxAGC_B_Rate54_24 0x834 -#define rTxAGC_B_CCK1_55_Mcs32 0x838 -#define rTxAGC_B_Mcs03_Mcs00 0x83c -#define rFPGA0_XA_LSSIParameter 0x840 -#define rFPGA0_XB_LSSIParameter 0x844 -#define rTxAGC_B_Mcs07_Mcs04 0x848 -#define rTxAGC_B_Mcs11_Mcs08 0x84c -#define rFPGA0_XCD_SwitchControl 0x85c -#define rFPGA0_XA_RFInterfaceOE 0x860 // RF Channel switch -#define rFPGA0_XB_RFInterfaceOE 0x864 -#define rTxAGC_B_CCK11_A_CCK2_11 0x86c -#define rTxAGC_B_Mcs15_Mcs12 0x868 -#define rFPGA0_XAB_RFInterfaceSW 0x870 // RF Interface Software Control -#define rFPGA0_XCD_RFInterfaceSW 0x874 -#define rFPGA0_XAB_RFParameter 0x878 // RF Parameter -#define rFPGA0_XA_LSSIReadBack 0x8a0 // Tranceiver LSSI Readback -#define rFPGA0_XB_LSSIReadBack 0x8a4 -#define rFPGA0_XC_LSSIReadBack 0x8a8 -#define rFPGA0_XD_LSSIReadBack 0x8ac -#define TransceiverA_HSPI_Readback 0x8b8 // Transceiver A HSPI Readback -#define TransceiverB_HSPI_Readback 0x8bc // Transceiver B HSPI Readback - -// -// Page9(0x900) -// -#define rFPGA1_RFMOD 0x900 //RF mode & OFDM TxSC // RF BW Setting?? -#define rFPGA1_TxInfo 0x90c // Useless now // Status report?? -#define rS0S1_PathSwitch 0x948 -#define rRXDFIR_Filter 0x954 - -// -// PageA(0xA00) -// -// Set Control channel to upper or lower. These settings are required only for 40MHz -#define rCCK0_System 0xa00 -#define rCCK0_AFESetting 0xa04 // Disable init gain now // Select RX path by RSSI - -// -// PageB(0xB00) -// -#define rPdp_AntA 0xb00 -#define rPdp_AntA_4 0xb04 -#define rPdp_AntA_8 0xb08 -#define rPdp_AntA_C 0xb0c -#define rPdp_AntA_10 0xb10 -#define rPdp_AntA_14 0xb14 -#define rPdp_AntA_18 0xb18 -#define rPdp_AntA_1C 0xb1c -#define rPdp_AntA_20 0xb20 -#define rPdp_AntA_24 0xb24 - -#define rConfig_Pmpd_AntA 0xb28 -#define rConfig_ram64x16 0xb2c - -#define rBndA 0xb30 -#define rHssiPar 0xb34 - -#define rConfig_AntA 0xb68 -#define rConfig_AntB 0xb6c - -#define rPdp_AntB 0xb70 -#define rPdp_AntB_4 0xb74 -#define rPdp_AntB_8 0xb78 -#define rPdp_AntB_C 0xb7c -#define rPdp_AntB_10 0xb80 -#define rPdp_AntB_14 0xb84 -#define rPdp_AntB_18 0xb88 -#define rPdp_AntB_1C 0xb8c -#define rPdp_AntB_20 0xb90 -#define rPdp_AntB_24 0xb94 - -#define rConfig_Pmpd_AntB 0xb98 - -#define rBndB 0xba0 - -#define rAPK 0xbd8 -#define rPm_Rx0_AntA 0xbdc -#define rPm_Rx1_AntA 0xbe0 -#define rPm_Rx2_AntA 0xbe4 -#define rPm_Rx3_AntA 0xbe8 -#define rPm_Rx0_AntB 0xbec -#define rPm_Rx1_AntB 0xbf0 -#define rPm_Rx2_AntB 0xbf4 -#define rPm_Rx3_AntB 0xbf8 - -// -// PageC(0xC00) -// -#define rOFDM0_TRxPathEnable 0xc04 -#define rOFDM0_TRMuxPar 0xc08 -#define rOFDM0_XARxAFE 0xc10 // RxIQ DC offset, Rx digital filter, DC notch filter -#define rOFDM0_XARxIQImbalance 0xc14 // RxIQ imblance matrix -#define rOFDM0_XBRxIQImbalance 0xc1c -#define rOFDM0_RxDetector1 0xc30 // PD,BW & SBD // DM tune init gain -#define rOFDM0_ECCAThreshold 0xc4c // energy CCA -#define rOFDM0_XAAGCCore1 0xc50 // DIG -#define rOFDM0_XBAGCCore1 0xc58 -#define rOFDM0_AGCRSSITable 0xc78 -#define rOFDM0_XATxIQImbalance 0xc80 // TX PWR TRACK and DIG -#define rOFDM0_XBTxIQImbalance 0xc88 -#define rOFDM0_XCTxAFE 0xc94 -#define rOFDM0_XDTxAFE 0xc9c -#define rOFDM0_RxIQExtAnta 0xca0 -#define rOFDM0_TxPseudoNoiseWgt 0xce4 // Double ADC - -// -// PageD(0xD00) -// -#define rOFDM1_LSTF 0xd00 -#define rOFDM1_TRxPathEnable 0xd04 - -// -// PageE(0xE00) -// -#define rTxAGC_A_Rate18_06 0xe00 -#define rTxAGC_A_Rate54_24 0xe04 -#define rTxAGC_A_CCK1_Mcs32 0xe08 -#define rTxAGC_A_Mcs03_Mcs00 0xe10 -#define rTxAGC_A_Mcs07_Mcs04 0xe14 -#define rTxAGC_A_Mcs11_Mcs08 0xe18 -#define rTxAGC_A_Mcs15_Mcs12 0xe1c -#define rFPGA0_IQK 0xe28 -#define rTx_IQK_Tone_A 0xe30 -#define rRx_IQK_Tone_A 0xe34 -#define rTx_IQK_PI_A 0xe38 -#define rRx_IQK_PI_A 0xe3c -#define rTx_IQK 0xe40 -#define rRx_IQK 0xe44 -#define rIQK_AGC_Pts 0xe48 -#define rIQK_AGC_Rsp 0xe4c -#define rTx_IQK_Tone_B 0xe50 -#define rRx_IQK_Tone_B 0xe54 -#define rTx_IQK_PI_B 0xe58 -#define rRx_IQK_PI_B 0xe5c -#define rIQK_AGC_Cont 0xe60 -#define rBlue_Tooth 0xe6c -#define rRx_Wait_CCA 0xe70 // Rx ADC clock -#define rTx_CCK_RFON 0xe74 -#define rTx_CCK_BBON 0xe78 -#define rTx_OFDM_RFON 0xe7c -#define rTx_OFDM_BBON 0xe80 -#define rTx_To_Rx 0xe84 -#define rTx_To_Tx 0xe88 -#define rRx_CCK 0xe8c -#define rTx_Power_Before_IQK_A 0xe94 -#define rTx_Power_After_IQK_A 0xe9c -#define rRx_Power_Before_IQK_A_2 0xea4 -#define rRx_Power_After_IQK_A_2 0xeac -#define rTx_Power_Before_IQK_B 0xeb4 -#define rTx_Power_After_IQK_B 0xebc -#define rRx_Power_Before_IQK_B 0xec0 -#define rRx_Power_Before_IQK_B_2 0xec4 -#define rRx_Power_After_IQK_B 0xec8 -#define rRx_Power_After_IQK_B_2 0xecc -#define rRx_OFDM 0xed0 -#define rRx_Wait_RIFS 0xed4 -#define rRx_TO_Rx 0xed8 -#define rStandby 0xedc -#define rSleep 0xee0 -#define rPMPD_ANAEN 0xeec - - -//for PutRegsetting & GetRegSetting BitMask -#define bMaskH3Bytes 0xffffff00 - -// -// RL6052 Register definition -// -#define RF_AC 0x00 // -#define RF_TXM_IDAC 0x08 // -#define RF_CHNLBW 0x18 // RF channel and BW switch -#define RF_RCK_OS 0x30 // RF TX PA control -#define RF_TXPA_G1 0x31 // RF TX PA control -#define RF_TXPA_G2 0x32 // RF TX PA control -#define RF_WE_LUT 0xEF - -// -//Bit Mask -// -// 1. Page1(0x100) -#define bBBResetB 0x100 // Useless now? - -// 2. Page8(0x800) -#define bRFMOD 0x1 // Reg 0x800 rFPGA0_RFMOD -#define bCCKEn 0x1000000 -#define bOFDMEn 0x2000000 -#define bXBTxAGC 0xf00 // Reg 80c rFPGA0_TxGainStage -#define bXCTxAGC 0xf000 -#define bXDTxAGC 0xf0000 -#define b3WireDataLength 0x800 // Reg 0x820~84f rFPGA0_XA_HSSIParameter1 -#define b3WireAddressLength 0x400 -#define bRFSI_RFENV 0x10 // Reg 0x870 rFPGA0_XAB_RFInterfaceSW -#define bLSSIReadAddress 0x7f800000 // T65 RF -#define bLSSIReadEdge 0x80000000 //LSSI "Read" edge signal -#define bLSSIReadBackData 0xfffff // T65 RF - -// 3. Page9(0x900) - -// 4. PageA(0xA00) -#define bCCKBBMode 0x3 -#define bCCKSideBand 0x10 // Reg 0xa00 rCCK0_System 20/40 switch -#define bCCKScramble 0x8 -#define bCCKTxRate 0x3000 - - -// 5. PageC(0xC00) - -// 6. PageE(0xE00) -#define bOFDMContinueTx 0x10000000 -#define bOFDMSingleCarrier 0x20000000 -#define bOFDMSingleTone 0x40000000 - -// -// Other Definition -// - -//for PutRegsetting & GetRegSetting BitMask -#define bMaskByte0 0xff -#define bMaskByte1 0xff00 -#define bMaskByte2 0xff0000 -#define bMaskByte3 0xff000000 -#define bMaskHWord 0xffff0000 -#define bMaskLWord 0x0000ffff -#define bMaskDWord 0xffffffff -#define bMask12Bits 0xfff -#define bMaskH4Bits 0xf0000000 - -#define bEnable 0x1 -#define bDisable 0x0 - - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/Hal8195APwrSeq.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/Hal8195APwrSeq.h deleted file mode 100644 index 2de0a12..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/Hal8195APwrSeq.h +++ /dev/null @@ -1,397 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef REALTEK_POWER_SEQUENCE_8195A -#define REALTEK_POWER_SEQUENCE_8195A - -#include "HalPwrSeqCmd.h" - -/* - Check document WM-20130111-JackieLau-RTL8723B_Power_Architecture v02.vsd - There are 6 HW Power States: - 0: POFF--Power Off - 1: PDN--Power Down - 2: CARDEMU--Card Emulation - 3: ACT--Active Mode - 4: LPS--Low Power State - 5: SUS--Suspend - - The transision from different states are defined below - TRANS_CARDEMU_TO_ACT - TRANS_ACT_TO_CARDEMU - TRANS_CARDEMU_TO_SUS - TRANS_SUS_TO_CARDEMU - TRANS_CARDEMU_TO_PDN - TRANS_ACT_TO_LPS - TRANS_LPS_TO_ACT - - TRANS_END -*/ -#define RTL8195A_TRANS_CARDEMU_TO_ACT_STEPS 4 -#define RTL8195A_TRANS_ACT_TO_CARDEMU_STEPS 4 -#define RTL8195A_TRANS_CARDEMU_TO_SUS_STEPS 7 -#define RTL8195A_TRANS_SUS_TO_CARDEMU_STEPS 15 -#define RTL8195A_TRANS_CARDEMU_TO_PDN_STEPS 15 -#define RTL8195A_TRANS_PDN_TO_CARDEMU_STEPS 15 -#define RTL8195A_TRANS_ACT_TO_LPS_STEPS 15 -#define RTL8195A_TRANS_LPS_TO_ACT_STEPS 15 -#define RTL8195A_TRANS_ACT_TO_SWLPS_STEPS 22 -#define RTL8195A_TRANS_SWLPS_TO_ACT_STEPS 15 -#define RTL8195A_TRANS_END_STEPS 1 -//1TODO:chris -#if 1 -#define RTL8195A_TRANS_CARDEMU_TO_ACT \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, 0}, /*0x00[5] = 1b'0 release analog Ips to digital ,1:isolation*/ \ - {0x0004, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 1},\ - {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 1},\ - {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT0, 0},/**/ - - -#define RTL8195A_TRANS_ACT_TO_CARDEMU \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, (BIT0|BIT1|BIT2), 0},/*0x04[24:26] = 0 turn off RF*/ \ - {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, (BIT0|BIT1), 0},/*0x04[16:17] = 0 BB reset*/ \ - {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*0x20[1] = 1 turn off MAC by HW state machine*/ \ - {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, 0}, /*wait till 0x20[1] = 0 polling until return 0 to disable*/ \ - -#define RTL8195A_TRANS_CARDEMU_TO_SUS \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4|BIT3, (BIT4|BIT3)}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \ - {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \ - {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SDIO SOP option to disable BG/MB/ACK/SWR*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3|BIT4}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/ - -#define RTL8195A_TRANS_SUS_TO_CARDEMU \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3 | BIT7, 0}, /*clear suspend enable and power down enable*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\ - {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x23[4] = 1b'0 12H LDO enter normal mode*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/ - -#define RTL8195A_TRANS_CARDEMU_TO_CARDDIS \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - -#define RTL8195A_TRANS_CARDDIS_TO_CARDEMU \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - - -#define RTL8195A_TRANS_CARDEMU_TO_PDN \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \ - {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK|PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SOP option to disable BG/MB/ACK/SWR*/ \ - {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/* 0x04[16] = 0*/\ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, BIT7},/* 0x04[15] = 1*/ - -#define RTL8195A_TRANS_PDN_TO_CARDEMU \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/* 0x04[15] = 0*/ - -#define RTL8195A_TRANS_ACT_TO_LPS \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF},/*PCIe DMA stop*/ \ - {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF},/*Tx Pause*/ \ - {0x05F8, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \ - {0x05F9, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \ - {0x05FA, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \ - {0x05FB, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*CCK and OFDM are disabled,and clock are gated*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_US},/*Delay 1us*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*Whole BB is reset*/ \ - {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x03},/*Reset MAC TRX*/ \ - {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*check if removed later*/ \ - {0x0093, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x00},/*When driver enter Sus/ Disable, enable LOP for BT*/ \ - {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5},/*Respond TxOK to scheduler*/ - - -#define RTL8195A_TRANS_LPS_TO_ACT \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, 0xFF, 0x84}, /*SDIO RPWM*/\ - {0xFE58, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*USB RPWM*/\ - {0x0361, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*PCIe RPWM*/\ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_MS}, /*Delay*/\ - {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*. 0x08[4] = 0 switch TSF to 40M*/\ - {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT7, 0}, /*Polling 0x109[7]=0 TSF in 40M*/\ - {0x0029, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6|BIT7, 0}, /*. 0x29[7:6] = 2b'00 enable BB clock*/\ - {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*. 0x101[1] = 1*/\ - {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF}, /*. 0x100[7:0] = 0xFF enable WMAC TRX*/\ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1|BIT0, BIT1|BIT0}, /*. 0x02[1:0] = 2b'11 enable BB macro*/\ - {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, /*. 0x522 = 0*/ - - - #define RTL8195A_TRANS_ACT_TO_SWLPS \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0194, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/*enable 32 K source*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*CCK and OFDM are disabled,and clock are gated*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 1},/*CCK and OFDM are enable*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*CCK and OFDM are disabled,and clock are gated*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 1},/*CCK and OFDM are enable*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*CCK and OFDM are disabled,and clock are gated*/ \ - {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x3F},/*Reset MAC TRX*/ \ - {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*disable security engine*/ \ - {0x0093, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x40},/*When driver enter Sus/ Disable, enable LOP for BT*/ \ - {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5},/*reset dual TSF*/ \ - {0x0003, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, 0},/*Reset CPU*/ \ - {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0},/*Reset MCUFWDL register*/ \ - {0x001D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*Reset CPU IO Wrapper*/ \ - {0x001D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 1},/*Reset CPU IO Wrapper*/ \ - {0x0287, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*polling RXFF packet number = 0 */ \ - {0x0286, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, BIT1},/*polling RXDMA idle */ \ - {0x013D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/*Clear FW RPWM interrupt */\ - {0x0139, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/*Set FW RPWM interrupt source*/\ - {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4},/*switch TSF to 32K*/\ - {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, BIT7},/*polling TSF stable*/\ - {0x0090, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/*Set FW LPS*/ \ - {0x0090, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT0, 0},/*polling FW LPS ready */ - - -#define RTL8195A_TRANS_SWLPS_TO_ACT \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0},/*switch TSF to 32K*/\ - {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/*polling TSF stable*/\ - {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*. 0x101[1] = 1, enable security engine*/\ - {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF}, /*. 0x100[7:0] = 0xFF enable WMAC TRX*/\ - {0x06B7, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x09}, /*. reset MAC rx state machine*/\ - {0x06B4, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x86}, /*. reset MAC rx state machine*/\ - {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1},/* set CPU RAM code ready*/ \ - {0x001D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*Reset CPU IO Wrapper*/ \ - {0x0003, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, 0},/* Enable CPU*/ \ - {0x001D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/*enable CPU IO Wrapper*/ \ - {0x0003, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, BIT2},/* Enable CPU*/ \ - {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT7, BIT7},/*polling FW init ready */ \ - {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT6, BIT6},/*polling FW init ready */ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0}, /*. 0x02[1:0] = 2b'11 enable BB macro*/\ - {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, /*. 0x522 = 0*/ - - - -#else - -#define RTL8723B_TRANS_CARDEMU_TO_ACT \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0}, /*0x20[0] = 1b'1 enable LDOA12 MACRO block for all interface*/ \ - {0x0067, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x67[0] = 0 to disable BT_GPS_SEL pins*/ \ - {0x0001, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 1, PWRSEQ_DELAY_MS},/*Delay 1ms*/ \ - {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, 0}, /*0x00[5] = 1b'0 release analog Ips to digital ,1:isolation*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, 0},/* disable SW LPS 0x04[10]=0*/ \ - {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, BIT1},/* wait till 0x04[17] = 1 power ready*/ \ - {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/* release WLON reset 0x04[16]=1*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/* disable HWPDN 0x04[15]=0*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, (BIT4|BIT3), 0},/* disable WL suspend*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/* polling until return 0*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT0, 0},/**/ \ - {0x0010, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6, BIT6},/* Enable WL control XTAL setting*/ \ - {0x0049, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1},/*Enable falling edge triggering interrupt*/\ - {0x0063, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1},/*Enable GPIO9 interrupt mode*/\ - {0x0062, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*Enable GPIO9 input mode*/\ - {0x0058, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/*Enable HSISR GPIO[C:0] interrupt*/\ - {0x005A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1},/*Enable HSISR GPIO9 interrupt*/\ - {0x0068, PWR_CUT_TESTCHIP_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3, BIT3},/*For GPIO9 internal pull high setting by test chip*/\ - {0x0069, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6, BIT6},/*For GPIO9 internal pull high setting*/ - -#define RTL8723B_TRANS_ACT_TO_CARDEMU \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x001F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0},/*0x1F[7:0] = 0 turn off RF*/ \ - {0x004F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*0x4C[24] = 0x4F[0] = 0, switch DPDT_SEL_P output from register 0x65[2] */\ - {0x0049, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*Enable rising edge triggering interrupt*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*0x04[9] = 1 turn off MAC by HW state machine*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, 0}, /*wait till 0x04[9] = 0 polling until return 0 to disable*/ \ - {0x0010, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6, 0},/* Enable BT control XTAL setting*/ \ - {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5}, /*0x00[5] = 1b'1 analog Ips to digital ,1:isolation*/ \ - {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0}, /*0x20[0] = 1b'0 disable LDOA12 MACRO block*/ \ - - -#define RTL8723B_TRANS_CARDEMU_TO_SUS \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4|BIT3, (BIT4|BIT3)}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \ - {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \ - {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SDIO SOP option to disable BG/MB/ACK/SWR*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3|BIT4}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/ - -#define RTL8723B_TRANS_SUS_TO_CARDEMU \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3 | BIT7, 0}, /*clear suspend enable and power down enable*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\ - {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x23[4] = 1b'0 12H LDO enter normal mode*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/ - -#define RTL8723B_TRANS_CARDEMU_TO_CARDDIS \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07=0x20 , SOP option to disable BG/MB*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, BIT2}, /*0x04[10] = 1, enable SW LPS*/ \ - {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 1}, /*0x48[16] = 1 to enable GPIO9 as EXT WAKEUP*/ \ - {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/ - -#define RTL8723B_TRANS_CARDDIS_TO_CARDEMU \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3 | BIT7, 0}, /*clear suspend enable and power down enable*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\ - {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0}, /*0x48[16] = 0 to disable GPIO9 as EXT WAKEUP*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/\ - {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x23[4] = 1b'0 12H LDO enter normal mode*/ \ - {0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0},/*PCIe DMA start*/ - - -#define RTL8723B_TRANS_CARDEMU_TO_PDN \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \ - {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK|PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SOP option to disable BG/MB/ACK/SWR*/ \ - {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/* 0x04[16] = 0*/\ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, BIT7},/* 0x04[15] = 1*/ - -#define RTL8723B_TRANS_PDN_TO_CARDEMU \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/* 0x04[15] = 0*/ - -#define RTL8723B_TRANS_ACT_TO_LPS \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF},/*PCIe DMA stop*/ \ - {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF},/*Tx Pause*/ \ - {0x05F8, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \ - {0x05F9, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \ - {0x05FA, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \ - {0x05FB, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*CCK and OFDM are disabled,and clock are gated*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_US},/*Delay 1us*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*Whole BB is reset*/ \ - {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x03},/*Reset MAC TRX*/ \ - {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*check if removed later*/ \ - {0x0093, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x00},/*When driver enter Sus/ Disable, enable LOP for BT*/ \ - {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5},/*Respond TxOK to scheduler*/ - - -#define RTL8723B_TRANS_LPS_TO_ACT \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, 0xFF, 0x84}, /*SDIO RPWM*/\ - {0xFE58, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*USB RPWM*/\ - {0x0361, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*PCIe RPWM*/\ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_MS}, /*Delay*/\ - {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*. 0x08[4] = 0 switch TSF to 40M*/\ - {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT7, 0}, /*Polling 0x109[7]=0 TSF in 40M*/\ - {0x0029, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6|BIT7, 0}, /*. 0x29[7:6] = 2b'00 enable BB clock*/\ - {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*. 0x101[1] = 1*/\ - {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF}, /*. 0x100[7:0] = 0xFF enable WMAC TRX*/\ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1|BIT0, BIT1|BIT0}, /*. 0x02[1:0] = 2b'11 enable BB macro*/\ - {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, /*. 0x522 = 0*/ - - - #define RTL8723B_TRANS_ACT_TO_SWLPS \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0194, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/*enable 32 K source*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*CCK and OFDM are disabled,and clock are gated*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 1},/*CCK and OFDM are enable*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*CCK and OFDM are disabled,and clock are gated*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 1},/*CCK and OFDM are enable*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*CCK and OFDM are disabled,and clock are gated*/ \ - {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x3F},/*Reset MAC TRX*/ \ - {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*disable security engine*/ \ - {0x0093, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x40},/*When driver enter Sus/ Disable, enable LOP for BT*/ \ - {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5},/*reset dual TSF*/ \ - {0x0003, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, 0},/*Reset CPU*/ \ - {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0},/*Reset MCUFWDL register*/ \ - {0x001D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*Reset CPU IO Wrapper*/ \ - {0x001D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 1},/*Reset CPU IO Wrapper*/ \ - {0x0287, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*polling RXFF packet number = 0 */ \ - {0x0286, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, BIT1},/*polling RXDMA idle */ \ - {0x013D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/*Clear FW RPWM interrupt */\ - {0x0139, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/*Set FW RPWM interrupt source*/\ - {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4},/*switch TSF to 32K*/\ - {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, BIT7},/*polling TSF stable*/\ - {0x0090, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/*Set FW LPS*/ \ - {0x0090, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT0, 0},/*polling FW LPS ready */ - - -#define RTL8723B_TRANS_SWLPS_TO_ACT \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0},/*switch TSF to 32K*/\ - {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/*polling TSF stable*/\ - {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*. 0x101[1] = 1, enable security engine*/\ - {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF}, /*. 0x100[7:0] = 0xFF enable WMAC TRX*/\ - {0x06B7, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x09}, /*. reset MAC rx state machine*/\ - {0x06B4, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x86}, /*. reset MAC rx state machine*/\ - {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1},/* set CPU RAM code ready*/ \ - {0x001D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*Reset CPU IO Wrapper*/ \ - {0x0003, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, 0},/* Enable CPU*/ \ - {0x001D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/*enable CPU IO Wrapper*/ \ - {0x0003, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, BIT2},/* Enable CPU*/ \ - {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT7, BIT7},/*polling FW init ready */ \ - {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT6, BIT6},/*polling FW init ready */ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0}, /*. 0x02[1:0] = 2b'11 enable BB macro*/\ - {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, /*. 0x522 = 0*/ - - -#endif - - - -#define RTL8195A_TRANS_END \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,0,PWR_CMD_END, 0, 0}, // - - -extern WLAN_PWR_CFG rtl8195A_power_on_flow[RTL8195A_TRANS_CARDEMU_TO_ACT_STEPS+RTL8195A_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8195A_radio_off_flow[RTL8195A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8195A_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8195A_card_disable_flow[RTL8195A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8195A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8195A_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8195A_card_enable_flow[RTL8195A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8195A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8195A_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8195A_suspend_flow[RTL8195A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8195A_TRANS_CARDEMU_TO_SUS_STEPS+RTL8195A_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8195A_resume_flow[RTL8195A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8195A_TRANS_CARDEMU_TO_SUS_STEPS+RTL8195A_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8195A_hwpdn_flow[RTL8195A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8195A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8195A_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8195A_enter_lps_flow[RTL8195A_TRANS_ACT_TO_LPS_STEPS+RTL8195A_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8195A_leave_lps_flow[RTL8195A_TRANS_LPS_TO_ACT_STEPS+RTL8195A_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8195A_enter_swlps_flow[RTL8195A_TRANS_ACT_TO_SWLPS_STEPS+RTL8195A_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8195A_leave_swlps_flow[RTL8195A_TRANS_SWLPS_TO_ACT_STEPS+RTL8195A_TRANS_END_STEPS]; -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rom_Hal8195APhyCfg.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rom_Hal8195APhyCfg.h deleted file mode 100644 index 5dce5ce..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rom_Hal8195APhyCfg.h +++ /dev/null @@ -1,56 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __ROM_HAL8195APHYCFG_H__ -#define __ROM_HAL8195APHYCFG_H__ - -/*--------------------------Define Parameters-------------------------------*/ - -/*--------------------------Define Parameters End-------------------------------*/ - -/*------------------------------Define structure----------------------------*/ - -/*------------------------------Define structure End----------------------------*/ - -/*--------------------------Exported Function prototype---------------------*/ - -u32 -phy_CalculateBitShift( - u32 BitMask - ); - -u32 -PHY_QueryBBReg_8195A( - IN PADAPTER Adapter, - IN u32 RegAddr, - IN u32 BitMask - ); - -VOID -PHY_SetBBReg_8195A( - IN PADAPTER Adapter, - IN u32 RegAddr, - IN u32 BitMask, - IN u32 Data - ); - -/*--------------------------Exported Function prototype End---------------------*/ - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_cmd.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_cmd.h deleted file mode 100644 index 3ef53e9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_cmd.h +++ /dev/null @@ -1,337 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTL8195A_CMD_H__ -#define __RTL8195A_CMD_H__ - -//---------------------------------------------------------------------------------------------------------// -//---------------------------------- H2C CMD DEFINITION ------------------------------------------------// -//---------------------------------------------------------------------------------------------------------// - -enum h2c_cmd_8195A{ - //Common Class: 000 - H2C_8195A_RSVD_PAGE = 0x00, - H2C_8195A_MEDIA_STATUS_RPT = 0x01, - H2C_8195A_SCAN_ENABLE = 0x02, - H2C_8195A_KEEP_ALIVE = 0x03, - H2C_8195A_DISCON_DECISION = 0x04, - H2C_8195A_PSD_OFFLOAD = 0x05, - H2C_8195A_AP_OFFLOAD = 0x08, - H2C_8195A_BCN_RSVDPAGE = 0x09, - H2C_8195A_PROBERSP_RSVDPAGE = 0x0A, - H2C_8195A_FCS_RSVDPAGE = 0x10, - H2C_8195A_FCS_INFO = 0x11, - - //PoweSave Class: 001 - H2C_8195A_SET_PWR_MODE = 0x20, - H2C_8195A_PS_TUNING_PARA = 0x21, - H2C_8195A_PS_TUNING_PARA2 = 0x22, - H2C_8195A_P2P_LPS_PARAM = 0x23, - H2C_8195A_P2P_PS_OFFLOAD = 0x24, - H2C_8195A_PS_SCAN_ENABLE = 0x25, - H2C_8195A_SAP_PS_ = 0x26, - H2C_8195A_INACTIVE_PS_ = 0x27, //Inactive_PS - H2C_8195A_FWLPS_IN_IPS_ = 0x28, - - - //Dynamic Mechanism Class: 010 - H2C_8195A_MACID_CFG = 0x40, - H2C_8195A_TXBF = 0x41, - H2C_8195A_RSSI_SETTING = 0x42, - H2C_8195A_AP_REQ_TXRPT = 0x43, - H2C_8195A_INIT_RATE_COLLECT = 0x44, - - //BT Class: 011 - H2C_8195A_B_TYPE_TDMA = 0x60, - H2C_8195A_BT_INFO = 0x61, - H2C_8195A_FORCE_BT_TXPWR = 0x62, - H2C_8195A_BT_IGNORE_WLANACT = 0x63, - H2C_8195A_DAC_SWING_VALUE = 0x64, - H2C_8195A_ANT_SEL_RSV = 0x65, - H2C_8195A_WL_OPMODE = 0x66, - H2C_8195A_BT_MP_OPER = 0x67, - H2C_8195A_BT_CONTROL = 0x68, - H2C_8195A_BT_WIFI_CTRL = 0x69, - H2C_8195A_BT_FW_PATCH = 0x6A, - - //WOWLAN Class: 100 - H2C_8195A_WOWLAN = 0x80, - H2C_8195A_REMOTE_WAKE_CTRL = 0x81, - H2C_8195A_AOAC_GLOBAL_INFO = 0x82, - H2C_8195A_AOAC_RSVD_PAGE = 0x83, - H2C_8195A_AOAC_RSVD_PAGE2 = 0x84, - H2C_8195A_D0_SCAN_OFFLOAD_INFO = 0x85, - H2C_8195A_D0_SCAN_OFFLOAD_CTRL = 0x86, - H2C_8195A_CHNL_SWITCH_OFFLOAD = 0x87, - - H2C_8195A_RESET_TSF = 0xC0, - H2C_8195A_BCN_IGNORE_EDCCA = 0xC2, - - H2C_8195A_MAXID, -}; - -#define H2C_8195A_RSVDPAGE_LOC_LEN 5 -#define H2C_8195A_MEDIA_STATUS_RPT_LEN 3 -#define H2C_8195A_KEEP_ALIVE_CTRL_LEN 2 -#define H2C_8195A_DISCON_DECISION_LEN 3 -//#define H2C_8195A_AP_OFFLOAD_LEN 3 -#define H2C_8195A_PWRMODE_LEN 11 -#define H2C_8195A_PSTUNEPARAM_LEN 4 -#define H2C_8195A_MACID_CFG_LEN 7 -#define H2C_8195A_BTMP_OPER_LEN 4 -#define H2C_8195A_WOWLAN_LEN 3 -#define H2C_8195A_REMOTE_WAKE_CTRL_LEN 1 -#define H2C_8195A_AOAC_GLOBAL_INFO_LEN 2 -#define H2C_8195A_AOAC_RSVDPAGE_LOC_LEN 7 -//#define H2C_8723B_SCAN_OFFLOAD_CTRL_LEN 4 -#define H2C_8195A_BT_FW_PATCH_LEN 6 -#define H2C_8195A_RSSI_SETTING_LEN 4 -#define H2C_8195A_AP_REQ_TXRPT_LEN 2 -#define H2C_8195A_FORCE_BT_TXPWR_LEN 3 -#define H2C_8195A_BCN_IGNORE_EDCCA_LEN 1 - - -#ifdef CONFIG_WOWLAN -#define eqMacAddr(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 ) -#define cpMacAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5]) -#define cpIpAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3]) - -// -// ARP packet -// -// LLC Header -#define GET_ARP_PKT_LLC_TYPE(__pHeader) ReadEF2Byte( ((u8*)(__pHeader)) + 6) - -//ARP element -#define GET_ARP_PKT_OPERATION(__pHeader) ReadEF2Byte( ((u8*)(__pHeader)) + 6) -#define GET_ARP_PKT_SENDER_MAC_ADDR(__pHeader, _val) cpMacAddr((u8*)(_val), ((u8*)(__pHeader))+8) -#define GET_ARP_PKT_SENDER_IP_ADDR(__pHeader, _val) cpIpAddr((u8*)(_val), ((u8*)(__pHeader))+14) -#define GET_ARP_PKT_TARGET_MAC_ADDR(__pHeader, _val) cpMacAddr((u8*)(_val), ((u8*)(__pHeader))+18) -#define GET_ARP_PKT_TARGET_IP_ADDR(__pHeader, _val) cpIpAddr((u8*)(_val), ((u8*)(__pHeader))+24) - -#define SET_ARP_PKT_HW(__pHeader, __Value) WriteEF2Byte( ((u8*)(__pHeader)) + 0, __Value) -#define SET_ARP_PKT_PROTOCOL(__pHeader, __Value) WriteEF2Byte( ((u8*)(__pHeader)) + 2, __Value) -#define SET_ARP_PKT_HW_ADDR_LEN(__pHeader, __Value) WriteEF1Byte( ((u8*)(__pHeader)) + 4, __Value) -#define SET_ARP_PKT_PROTOCOL_ADDR_LEN(__pHeader, __Value) WriteEF1Byte( ((u8*)(__pHeader)) + 5, __Value) -#define SET_ARP_PKT_OPERATION(__pHeader, __Value) WriteEF2Byte( ((u8*)(__pHeader)) + 6, __Value) -#define SET_ARP_PKT_SENDER_MAC_ADDR(__pHeader, _val) cpMacAddr(((u8*)(__pHeader))+8, (u8*)(_val)) -#define SET_ARP_PKT_SENDER_IP_ADDR(__pHeader, _val) cpIpAddr(((u8*)(__pHeader))+14, (u8*)(_val)) -#define SET_ARP_PKT_TARGET_MAC_ADDR(__pHeader, _val) cpMacAddr(((u8*)(__pHeader))+18, (u8*)(_val)) -#define SET_ARP_PKT_TARGET_IP_ADDR(__pHeader, _val) cpIpAddr(((u8*)(__pHeader))+24, (u8*)(_val)) - -#define FW_WOWLAN_FUN_EN BIT(0) -#define FW_WOWLAN_PATTERN_MATCH BIT(1) -#define FW_WOWLAN_MAGIC_PKT BIT(2) -#define FW_WOWLAN_UNICAST BIT(3) -#define FW_WOWLAN_ALL_PKT_DROP BIT(4) -#define FW_WOWLAN_GPIO_ACTIVE BIT(5) -#define FW_WOWLAN_REKEY_WAKEUP BIT(6) -#define FW_WOWLAN_DEAUTH_WAKEUP BIT(7) - -#define FW_WOWLAN_GPIO_WAKEUP_EN BIT(0) -#define FW_FW_PARSE_MAGIC_PKT BIT(1) - -#define FW_REMOTE_WAKE_CTRL_EN BIT(0) -#define FW_REALWOWLAN_EN BIT(5) - -#endif //CONFIG_WOWLAN - -//---------------------------------------------------------------------------------------------------------// -//---------------------------------- H2C CMD CONTENT --------------------------------------------------// -//---------------------------------------------------------------------------------------------------------// -//_RSVDPAGE_LOC_CMD_0x00 -#define SET_8723B_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_RSVDPAGE_LOC_PSPOLL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_8723B_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) -#define SET_8723B_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value) - -//_MEDIA_STATUS_RPT_PARM_CMD_0x01 -#define SET_8723B_H2CCMD_MSRRPT_PARM_OPMODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_8723B_H2CCMD_MSRRPT_PARM_MACID_IND(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value) -#define SET_8723B_H2CCMD_MSRRPT_PARM_MACID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_MSRRPT_PARM_MACID_END(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 8, __Value) - -//_KEEP_ALIVE_CMD_0x03 -#define SET_8723B_H2CCMD_KEEPALIVE_PARM_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_8723B_H2CCMD_KEEPALIVE_PARM_ADOPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value) -#define SET_8723B_H2CCMD_KEEPALIVE_PARM_CHECK_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value) - -//_DISCONNECT_DECISION_CMD_0x04 -#define SET_8723B_H2CCMD_DISCONDECISION_PARM_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_8723B_H2CCMD_DISCONDECISION_PARM_ADOPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value) -#define SET_8723B_H2CCMD_DISCONDECISION_PARM_CHECK_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_DISCONDECISION_PARM_TRY_PKT_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 8, __Value) - -// _PWR_MOD_CMD_0x20 -#define SET_8723B_H2CCMD_PWRMODE_PARM_MODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_RLBM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 4, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_SMART_PS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 4, 4, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_PWR_STATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_BYTE5(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_TDMA_SLOT_LEN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+7, 0, 8, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_TDMA_PERIOD_LEN_1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+8, 0, 8, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_TDMA_PERIOD_LEN_2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+9, 0, 8, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_TDMA_PERIOD_LEN_3(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+10, 0, 8, __Value) - -#define GET_8723B_H2CCMD_PWRMODE_PARM_MODE(__pH2CCmd) LE_BITS_TO_1BYTE(__pH2CCmd, 0, 8) - -// _PS_TUNE_PARAM_CMD_0x21 -#define SET_8723B_H2CCMD_PSTUNE_PARM_BCN_TO_LIMIT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_PSTUNE_PARM_DTIM_TIMEOUT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_PSTUNE_PARM_ADOPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 1, __Value) -#define SET_8723B_H2CCMD_PSTUNE_PARM_PS_TIMEOUT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 1, 7, __Value) -#define SET_8723B_H2CCMD_PSTUNE_PARM_DTIM_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+3, 0, 8, __Value) - -//_MACID_CFG_CMD_0x40 -#define SET_8723B_H2CCMD_MACID_CFG_MACID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_MACID_CFG_RAID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 5, __Value) -#define SET_8723B_H2CCMD_MACID_CFG_SGI_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 7, 1, __Value) -#define SET_8723B_H2CCMD_MACID_CFG_BW(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 2, __Value) -#define SET_8723B_H2CCMD_MACID_CFG_NO_UPDATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 3, 1, __Value) -#define SET_8723B_H2CCMD_MACID_CFG_VHT_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 4, 2, __Value) -#define SET_8723B_H2CCMD_MACID_CFG_DISPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 6, 1, __Value) -#define SET_8723B_H2CCMD_MACID_CFG_DISRA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 7, 1, __Value) -#define SET_8723B_H2CCMD_MACID_CFG_RATE_MASK0(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+3, 0, 8, __Value) -#define SET_8723B_H2CCMD_MACID_CFG_RATE_MASK1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+4, 0, 8, __Value) -#define SET_8723B_H2CCMD_MACID_CFG_RATE_MASK2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+5, 0, 8, __Value) -#define SET_8723B_H2CCMD_MACID_CFG_RATE_MASK3(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+6, 0, 8, __Value) - -//_RSSI_SETTING_CMD_0x42 -#define SET_8723B_H2CCMD_RSSI_SETTING_MACID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_RSSI_SETTING_RSSI(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 7, __Value) -#define SET_8723B_H2CCMD_RSSI_SETTING_ULDL_STATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+3, 0, 8, __Value) - -// _AP_REQ_TXRPT_CMD_0x43 -#define SET_8723B_H2CCMD_APREQRPT_PARM_MACID1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_APREQRPT_PARM_MACID2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value) - -// _FORCE_BT_TXPWR_CMD_0x62 -#define SET_8723B_H2CCMD_BT_PWR_IDX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd, 0, 8, __Value) - -// _FORCE_BT_MP_OPER_CMD_0x67 -#define SET_8723B_H2CCMD_BT_MPOPER_VER(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 4, __Value) -#define SET_8723B_H2CCMD_BT_MPOPER_REQNUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 4, __Value) -#define SET_8723B_H2CCMD_BT_MPOPER_IDX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_BT_MPOPER_PARAM1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 8, __Value) -#define SET_8723B_H2CCMD_BT_MPOPER_PARAM2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+3, 0, 8, __Value) - -// _BT_FW_PATCH_0x6A -#define SET_8723B_H2CCMD_BT_FW_PATCH_SIZE(__pH2CCmd, __Value) SET_BITS_TO_LE_2BYTE((pu1Byte)(__pH2CCmd), 0, 16, __Value) -#define SET_8723B_H2CCMD_BT_FW_PATCH_ADDR0(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_8723B_H2CCMD_BT_FW_PATCH_ADDR1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) -#define SET_8723B_H2CCMD_BT_FW_PATCH_ADDR2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value) -#define SET_8723B_H2CCMD_BT_FW_PATCH_ADDR3(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value) - -// _WoWLAN PARAM_CMD_0x80 -#define SET_8723B_H2CCMD_WOWLAN_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_MAGIC_PKT_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_UNICAST_PKT_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_ALL_PKT_DROP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_GPIO_ACTIVE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 5, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_REKEY_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 6, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 7, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_GPIONUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 7, __Value) -#define SET_8723B_H2CCMD_WOWLAN_DATAPIN_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 7, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_GPIO_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) - -// _REMOTE_WAKEUP_CMD_0x81 -#define SET_8723B_H2CCMD_REMOTE_WAKECTRL_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_8723B_H2CCMD_REMOTE_WAKE_CTRL_ARP_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value) -#define SET_8723B_H2CCMD_REMOTE_WAKE_CTRL_NDP_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value) -#define SET_8723B_H2CCMD_REMOTE_WAKE_CTRL_GTK_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 1, __Value) -#define SET_8723B_H2CCMD_REMOTE_WAKE_CTRL_FW_UNICAST_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 7, 1, __Value) -#define SET_8723B_H2CCMD_REMOTE_WAKE_CTRL_ARP_ACTION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 1, __Value) - -// AOAC_GLOBAL_INFO_0x82 -#define SET_8723B_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) - -// AOAC_RSVDPAGE_LOC_0x83 -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_NEIGHBOR_ADV(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_PROBE_REQ(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_NETWORK_LIST(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 0, 8, __Value) - -//---------------------------------------------------------------------------------------------------------// -//------------------------------------------- Structure --------------------------------------------------// -//---------------------------------------------------------------------------------------------------------// -typedef struct _RSVDPAGE_LOC { - u8 LocProbeRsp; - u8 LocPsPoll; - u8 LocNullData; - u8 LocQosNull; - u8 LocBTQosNull; -#ifdef CONFIG_WOWLAN - u8 LocRemoteCtrlInfo; - u8 LocArpRsp; - u8 LocNbrAdv; - u8 LocGTKRsp; - u8 LocGTKInfo; - u8 LocProbeReq; - u8 LocNetList; -#endif //CONFIG_WOWLAN -} RSVDPAGE_LOC_8195A, *PRSVDPAGE_LOC_8195A; - - -//---------------------------------------------------------------------------------------------------------// -//---------------------------------- Function Statement --------------------------------------------------// -//---------------------------------------------------------------------------------------------------------// - -// host message to firmware cmd -void rtl8195a_set_FwPwrMode_cmd(PADAPTER padapter, u8 Mode); -void rtl8195a_set_FwJoinBssRpt_cmd(PADAPTER padapter, u8 mstatus); -#ifdef CONFIG_BT_COEXIST -void rtl8195a_set_BTCoex_AP_mode_FwRsvdPkt_cmd(PADAPTER padapter); -#endif -void rtl8195a_set_rssi_cmd(PADAPTER padapter, u8 *param); -void rtl8195a_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8* arg, u8 rssi_level); -void rtl8195a_fw_try_ap_cmd(PADAPTER padapter, u32 need_ack); -//s32 rtl8723b_set_lowpwr_lps_cmd(PADAPTER padapter, u8 enable); -void rtl8195a_set_FwPsTuneParam_cmd(PADAPTER padapter); -void rtl8195a_set_FwMacIdConfig_cmd(_adapter* padapter, u8 mac_id, u8 raid, u8 bw, u8 sgi, u32 mask); -void rtl8195a_set_FwMediaStatusRpt_cmd(PADAPTER padapter, u8 mstatus, u8 macid); -void rtl8195a_set_FwBtMpOper_cmd(PADAPTER padapter, u8 idx, u8 ver, u8 reqnum, u8 *param); -void rtl8195a_download_rsvd_page(PADAPTER padapter, u8 mstatus); -#ifdef CONFIG_P2P -void rtl8195a_set_p2p_ps_offload_cmd(PADAPTER padapter, u8 p2p_ps_state); -#endif //CONFIG_P2P - -void CheckFwRsvdPageContent(PADAPTER padapter); - -#ifdef CONFIG_WOWLAN -void rtl8195a_set_wowlan_cmd(_adapter* padapter, u8 enable); -void SetFwRelatedForWoWLAN8195a(_adapter* padapter, u8 bHostIsGoingtoSleep); -#endif//CONFIG_WOWLAN - -void rtl8195a_set_FwPwrModeInIPS_cmd(PADAPTER padapter); - -#ifdef CONFIG_TSF_RESET_OFFLOAD -u8 rtl8195a_reset_tsf(_adapter *padapter, u8 reset_port); -#endif // CONFIG_TSF_RESET_OFFLOAD -s32 FillH2CCmd8195A(PADAPTER padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer); - -#define FillH2CCmd FillH2CCmd8195A -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_dm.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_dm.h deleted file mode 100644 index 3bafb95..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_dm.h +++ /dev/null @@ -1,81 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTL8195A_DM_H__ -#define __RTL8195A_DM_H__ -enum{ - UP_LINK, - DOWN_LINK, -}; - -enum{ - LLT, - TXRPT, - RXBUFF, - TXBUFF, -}; - -//============================================================ -// Description: -// -// This file is for 8723B dynamic mechanism only -// -// -//============================================================ - -//0x8000: TXRPT:2K -//max macid : 128 -//TXRPT SIZE 16 bytes -//0x8800: Rate Mask:1K -//Ramask size 8bytes - - -#define DYNAMIC_FUNC_BT BIT(0) - - -#define REPORT_OFFSET 0x8100 -#define RAMASK_OFFSET 0x8900 -#define LLT_H_ADDR 0x650 -#define TXREPORT_H_ADDR 0x660 -#define RXBUFF_H_ADDR 0x670 -#define TXBUFF_H_ADDR 0x680 - - - -//============================================================ -// structure and define -//============================================================ - -//============================================================ -// function prototype -//============================================================ - -void rtl8195a_init_dm_priv(PADAPTER padapter); -void rtl8195a_deinit_dm_priv(PADAPTER padapter); - -void rtl8195a_InitHalDm(PADAPTER padapter); -void rtl8195a_HalDmWatchDog(PADAPTER padapter); -void rtl8195a_HalDmWatchDog_in_LPS(PADAPTER padapter); -void rtl8195a_hal_dm_in_lps(PADAPTER padapter); -u8 ReadTxrpt8(IN PADAPTER padapter, IN u8 Macid, IN u8 Offset); -VOID WriteTxrpt8(IN PADAPTER padapter, IN u8 Macid, IN u8 Offset, IN u8 Val); -BOOLEAN GetMediaStatusCommon(IN PADAPTER pAdapter, IN u8 macid); -VOID GetTxrptStatistic(IN PDM_ODM_T pDM_Odm, IN PODM_RA_INFO_T pRaInfo,IN u8 Reset_var); -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_led.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_led.h deleted file mode 100644 index 700e32f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_led.h +++ /dev/null @@ -1,35 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTL8195A_LED_H__ -#define __RTL8195A_LED_H__ - -#include -#include -#include - - -//================================================================================ -// Interface to manipulate LED objects. -//================================================================================ -void rtl8195a_InitSwLeds(PADAPTER padapter); -void rtl8195a_DeInitSwLeds(PADAPTER padapter); - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_pmu_cmd.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_pmu_cmd.h deleted file mode 100644 index eb79ded..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_pmu_cmd.h +++ /dev/null @@ -1,130 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTL8195A_PMU_CMD_H__ -#define __RTL8195A_PMU_CMD_H__ - -typedef enum _RT_MEDIA_STATUS{ - RT_MEDIA_DISCONNECT = 0, - RT_MEDIA_CONNECT = 1 -}RT_MEDIA_STATUS; - -typedef enum _H2C_CMD_ { - //1 Class1: Common - H2CID_RSVDPAGE = 0x00, - H2CID_JOININFO = 0x01, - H2CID_SCAN = 0x02, - H2CID_KEEP_ALIVE = 0x03, - H2CID_DISCONNECT_DECISION = 0x04, - H2CID_PSD_OFFLOAD = 0x05, - rsvd2 = 0x06, - rsvd3 = 0x07, - H2CID_AP_OFFLOAD = 0x08, - H2CID_BCN_RsvdPage = 0x09, - H2CID_Probersp_RsvdPage = 0x0A, - H2CID_AP_OFFLOAD_STAINFO = 0x0B, - - H2CID_FAST_CS_RSVDPAGE = 0x10, - H2CID_FAST_CHANNEL_SWITCH = 0x11, - H2CID_BB_GAIN_REPORT = 0x12, - H2CID_GPIO_CTRL = 0x13, - H2CID_HW_INFO = 0x14, - - //1 Class2: Power Save - H2CID_SETPWRMODE = 0x20, - H2CID_PSTURNINGPARM = 0x21, - H2CID_PSTURNINGPARM2 = 0x22, - H2CID_PSLPSPARM = 0x23, - H2CID_P2PPS_OFFLOAD = 0x24, - H2CID_PS_SCAN = 0x25, - H2CID_SAPPS = 0x26, - H2CID_INACTIVE_PS = 0x27, - H2CID_NOLINK_PS = 0x28, - - //1 Class3: Dynamic Mechaism - H2CID_MACID_CFG = 0x40, - H2CID_TxBF = 0x41, - H2CID_RSSI_SETTING = 0x42, - H2CID_AP_REQ_TXRPT = 0x43, - H2CID_INIT_RATE_COLLECT = 0x44, - H2CID_IQK_OFFLOAD = 0x45, - - //1 Class4: BT Coex - H2CID_B_TYPE_TDMA = 0x60, - H2CID_BT_INFO = 0x61, - H2CID_FORCE_BT_TXPWR = 0x62, - H2CID_BT_IGNORE_WLANACT = 0x63, - H2CID_DAC_SWING_VALUE = 0x64, - H2CID_ANT_SEL_REVERSE = 0x65, - H2CID_WL_OPMODE = 0x66, - H2CID_BT_MP_OPERATION = 0x67, - H2CID_BT_CONTROL = 0x68, - H2CID_BT_WIFICTRL = 0x69, - H2CID_BT_PATCH_DOWNLOAD = 0x6A, - H2CID_BT_SCO_eSCO_OPERATION = 0x6B, - H2CID_BT_Page_Scan_Interval = 0x6C, - H2CID_WL_Calibraion = 0x6D, - H2CID_GNT_BT_CTRL = 0x6E, - H2CID_BT_ONLY_TEST = 0x6F, - - //1 Class5: WOWLAN - H2CID_WoWLAN = 0x80, - H2CID_RemoteWakeCtrl = 0x81, - H2CID_AOAC_Global_info = 0x82, - H2CID_AOAC_Rsvdpage1 = 0x83, - H2CID_AOAC_Rsvdpage2 = 0x84, - H2CID_D0_Scan_offload_info = 0x85, - H2CID_D0_Scan_offload_ctrl = 0x86, - H2CID_Switch_channel = 0x87, - H2CID_AOAC_Rsvdpage3 = 0x88, - H2CID_GPIO_WF_Customize = 0x89, - H2CID_P2P_RsvdPage = 0x8A, - H2CID_P2P_Offload = 0x8B, - - //1 Class6: LTECOEX - H2CID_LTECOEX_EN = 0xA0, - H2CID_WLAN_High_Priority = 0xA1, - - //1 Class7: Patch - H2CID_TSF_RESET = 0xC0, - H2CID_BB_NHM = 0xC1, - H2CID_BCN_IGNORE_EDCCA = 0xC2, - - //1 Class8: Testing - H2CID_H2C2HLB = 0xE0 - -} H2C_CMD, *PH2C_CMD; - -typedef struct _H2CParam_JoinInfo_ { - BOOLEAN bConnected:1; - BOOLEAN bMacid_ind:1; - u8 rsvd:6; - u8 macid; - u8 macid_end; -}H2CParam_JoinInfo, *PH2CParam_JoinInfo; - -typedef struct _H2CParam_RsvdPage_ { - RSVDPAGE_LOC_8195A RsvdPageLoc; - u8 *ReservedPagePacket; - u32 TotalPacketLen; -} H2CParam_RsvdPage, *PH2CParam_RsvdPage; - -u32 H2CCmdCommon(PADAPTER padapter, u8 ElementID, u8 *pCmdBuffer); - -#endif //__RTL8195A_PMU_CMD_H__ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_pmu_task.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_pmu_task.h deleted file mode 100644 index c44f33d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_pmu_task.h +++ /dev/null @@ -1,491 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTL8195A_PMU_TASK_H__ -#define __RTL8195A_PMU_TASK_H__ -#ifdef CONFIG_LITTLE_WIFI_MCU_FUNCTION_THREAD -//BitMAPDefine -#define RATEADAPTIVE BIT0 -#define H2CEVENT BIT1 -#define C2HEVENT BIT2 -#define RATRYDONE BIT3 -#define REMOTEWAKEEVENT BIT4 -#define APOFFLOADEVENT BIT5 -#define MAILBOXEVENT BIT6 -#define SWTIMEREVENT BIT7 - -#define BBNHMEVENT BIT8 -#define DBGPKTEVENT BIT9 -#define SIDEBANDWoWLAN BIT10 - -#if 0 -#ifdef CONFIG_POWER_SAVING -#define BCNEARLY BIT11 -#define MTIBCNIVLEAR BIT12 -#define BCNRX BIT13 -#define RXBMD1 BIT14 -#define RXBMD0 BIT15 -#define RXUMD1 BIT16 -#define RXUMD0 BIT17 -#define TXPKTIN BIT18 -#define GTIMER6TO BIT19 -#define GTIMER7TO BIT20 -#endif //#ifdef CONFIG_POWER_SAVING -#endif - -//BT mailbox -#define SETDATA BIT2 -#define SETACK BIT1 -#define GETDATA BIT0 - -/*--------------------------Define -------------------------------------------*/ -#ifdef CONFIG_POWER_SAVING -#define MACID_CLIENT 0 -#endif //#ifdef CONFIG_POWER_SAVING - -/*------------------------------Define Enum-----------------------------------*/ -#ifdef CONFIG_POWER_SAVING - -//REGDUMP_FW_ERR0 -typedef enum _FW_ERR0_STATUS_ -{ - FES0_H2C_CMDID = BIT0, - FES0_H2C_PTR = BIT1, - FES0_BB_RW = BIT2, - FES0_TXPKT_TXPAUSE = BIT3, - FES0_TSF_STABLE = BIT4, - FES0_TXSM_STABLE = BIT5, - FES0_RPWM_STABLE = BIT6, - FES0_C2H_TIMEOUT_ERR = BIT7, - -}FW_ERR0_STATUS, *PFW_ERR0_STATUS; - - -//TxPauseReasonCode -typedef enum _TRPC_ { - TPRC_ISSUENULLDATA_1 = 0x26, - TPRC_ISSUENULLDATA_2 = 0x27, - TPRC_PSS2TS3 = 0x2B, - TPRC_PSS0TS1 = 0x2C, - TPRC_PSS2TS4 = 0x2D, - TPRC_PSS2TS5 = 0x2E, - TPRC_PSS0TS6 = 0x2F, -} TRPC, *PTRPC; - - -typedef enum _PS_MODE_SETTING_SELECTION_ -{ - MODE_SETTING_ACTIVE = 0, - MODE_SETTING_LEGACY = 1, - MODE_SETTING_WMMPS = 2, - #ifdef TDMA_POWER_SAVING - MODE_SETTING_TDMA = 3 - #endif //#ifdef TDMA_POWER_SAVING -}PS_MODE_SETTING_SELECTION, *PPS_MODE_SETTING_SELECTION; - -typedef enum _RxListenBeaconMode_ -{ - RLBM_MIN = 0, - RLBM_MAX = 1, - RLBM_SELF_DEFINED = 2 - -}RxListenBeaconMode, *PRxListenBeaconMode; - -typedef enum _SMART_PS_MODE_FOR_LEGACY_ -{ - SMART_PS_MODE_LEGACY_PWR1 = 0, // TRX all use PS_POLL - SMART_PS_MODE_TX_PWR0 = 1, // TX: pwr bit = 0, RX: PS_POLL - SMART_PS_MODE_TRX_PWR0 = 2 // TX: pwr bit = 0, RX: NULL(0) -}SMART_PS_MODE_FOR_LEGACY, *PSMART_PS_MODE_FOR_LEGACY; - -#endif //#ifdef CONFIG_POWER_SAVING - -/*--------------------------Define MACRO--------------------------------------*/ - -#define HAL_WL_READ32(addr) \ - HAL_READ32(WIFI_REG_BASE, addr) -#define HAL_WL_WRITE32(addr, value) \ - HAL_WRITE32(WIFI_REG_BASE, addr, value) -#define HAL_WL_READ16(addr) \ - HAL_READ16(WIFI_REG_BASE, addr) -#define HAL_WL_WRITE16(addr, value) \ - HAL_WRITE16(WIFI_REG_BASE, addr, value) -#define HAL_WL_READ8(addr) \ - HAL_READ8(WIFI_REG_BASE, addr) -#define HAL_WL_WRITE8(addr, value) \ - HAL_WRITE8(WIFI_REG_BASE, addr, value) - -#ifdef CONFIG_POWER_SAVING -#define mtou(x) ((x)<<10) //ms->us - -#define WAIT_TSF_STABLE_BREAK_CNT 5000 -#define WAIT_TSF_STABLE_CNT 50 -#define WAIT_TSF_STABLE_ONCE_TIME 20 -#define TSFIS32K 1 -#define TSFIS40M 0 -#define GET_TSF_STATE() (((HAL_WL_READ16(0xF0) & BIT8) && (HAL_WL_READ16(0xF0) & BIT9)) ? TSFIS32K : TSFIS40M) - - -#define REG_ARFR5_8723B 0x04A4 -#define WAIT_TXSM_STABLE_CNT 1000 -#define WAIT_TXSM_STABLE_ONCE_TIME 50 - -#define MODE_TIMER 1 -#define MODE_COUNTER 0 - - -#define GTIMER6 6 -#define GTIMER7 7 - -#define TIMER_BCNTO GTIMER6 //6 -#define TIMER_DTIM GTIMER6 //6 -#define TIMER_CHECKSTATE GTIMER6 //6 -#define TIMER_PSTRX GTIMER7 //7 -#ifdef TDMA_POWER_SAVING -#define TIMER_TDMA GTIMER7 //7 -#endif //#ifdef TDMA_POWER_SAVING - -#define RTY_LMT_NULLDATA 8 -#define RTY_LMT_PSPOLL 24 -#define RTY_LMT_MORE_NULLDATA 24 - - -/* - PS_RX_INFO[7:0]: Power Save RX Information Register - initial value: 0x00 - REG III.220 (Offset 0x 0692h) PS_RX_INFO Register Definition -*/ -#define RXDATAIN0 BIT0 //PSTX -#define RXDATAIN1 BIT1 //PSRX -#define RXDATAIN2 BIT2 -#define RXMGTIN0 BIT3 -#define RXCTRLIN0 BIT4 - -//CPWM Definition -#define CLK_DOWN_RDY BIT4 - -//Power Save Tuning Parameter -//#if IS_CATEGORY_WOWLAN(CONFIG_CATEGORY_SEL) -//#define DEFAULT_BCN_TO_LIMIT 5 // 1 -//#define DEFAULT_BCN_TO_PERIOD 8 //5 -//#else -#define DEFAULT_BCN_TO_LIMIT 2 // 1 -#define DEFAULT_BCN_TO_PERIOD 4 //5 -//#endif - -#define DEFAULT_BCN_TO_TIMES_LIMIT 2 // 20140806 -#define DEFAULT_DTIM_TIMEOUT 15 // 7 // 7 ms -#define DEFAULT_PS_TIMEOUT 15 // 20 // 20 ms -#define DEFAULT_PS_DTIM_PERIOD 7 -#define DEFAULT_PS_DRV_EARLY 2 -#define DEFAULT_ENTER32K_TIMER 1000 //us -//#define PS_DRV_BCN_SHIFT_MAX DEFAULT_PS_DRV_EARLY-1 - - -#define NULL_DATA0_ALLOW 1 -#define NULL_DATA0_DENY 0 - -#define PS_RF_OFF_8723B 0 -#define PS_GO_ON BIT0 -#define PS_TX_NULL BIT1 -#define PS_RF_ON BIT2 -#define PS_REGISTER_ACTIVE BIT3 -//#define PS_ACK BIT6 -//#define PS_TOGGLE BIT7 - - -#define PS_STATE_MASK (0x0F) -//#define PS_STATE(x) (PS_STATE_MASK & (x)) -#define PS_IS_TX_NULL(x) ((x) & PS_TX_NULL ) -//#define PS_IS_ACK(x) ((x) & PS_ACK ) -#define PS_IS_CLK_ON(x) ((x) & (PS_RF_OFF_8723B |PS_ALL_ON )) -#define PS_IS_RF_OFF(x) ((x)|PS_RF_OFF_8723B) -//#define PS_IS_RF_ON(x) ((x) & (PS_RF_ON)) -//#define PS_IS_ACTIVE(x) ((x) & (PS_REGISTER_ACTIVE)) - -#define PS_STATUS_S0 (PS_REGISTER_ACTIVE | PS_RF_ON) //(1,1,0) all on = register active + rf on -#define PS_STATUS_S1 (PS_REGISTER_ACTIVE | PS_RF_ON | PS_TX_NULL) //(1,1,1) all on + tx null(1) -#define PS_STATUS_S2 (PS_RF_ON) //(0,1,0) register sleep + rf on -#define PS_STATUS_S3 (PS_RF_ON | PS_TX_NULL) //(0,1,1) register sleep + rf on + tx null(0) -#define PS_STATUS_S4 0 //(0,0,0) all OFF -#define PS_STATUS_S5 (PS_TX_NULL ) //(0,0,1) SCAN = register sleep + rf on + scan enable -#define PS_STATUS_S6 (PS_REGISTER_ACTIVE) //(1,0,0) NoA off = register active + rf off - - -/* DATA FIN Condition Flags */ -#define STA_DATA_OPEN BIT0 // indicate that FW open due to TIM = 1 condition. (PS-POLL as trigger frame) -#define BC_DATA_OPEN BIT1 // indicate that FW open due to DTIM = 1 condition. (BC & MC) -#define QOS_DATA_OPEN BIT2 // indicate that FW open due to UAPSD trigger condition. (QNULL) - -#define ALL_80211_DATA_OPEN (STA_DATA_OPEN | BC_DATA_OPEN | QOS_DATA_OPEN) -#define IS_80211_DATA_OPEN(x) ((x) & ALL_80211_DATA_OPEN) - -#define C2H_DATA_OPEN BIT3 // indicate that FW open due to C2H event -#define IS_C2H_DATA_OPEN(x) ((x) & C2H_DATA_OPEN) - -#define BCN_DATA_OPEN BIT4 -#define APP_DATA_OPEN BIT5 - -#define SET_DATA_OPEN(x, type) ((x) |= (type)) -#define CLR_DATA_OPEN(x, type) ((x) &= (~type)) -#define IS_DATA_OPEN(x, type) ((x) & (type)) - -//pwr state -#define PS_TYPE_32KPERMISSION 0 -#define PS_TYPE_CURRENT_PS_STATE 1 -#define PS_TYPE_LASTRPWM 2 - -#define CCXRPT_START_ADDR 0x0000 -#define SW_DEFINE_NULL0 0x123 -#define SW_DEFINE_NULL1 0x321 -#define SW_DEFINE_OFFSET 6 -#define RETRY_OVER BIT7 - -#define CCXRPT_OFFSET(x) (x << 3) - -#define WLAN_ENTERCRITICAL() __disable_irq() -#define WLAN_EXITCRITICAL() __enable_irq() - -#endif //#ifdef CONFIG_POWER_SAVING - -/*------------------------------Define Struct---------------------------------*/ -#ifdef CONFIG_POWER_SAVING -typedef struct _PS_PARM_ { - - u8 Enter32KHzPermission; - u8 bAllQueueUAPSD; - u8 ps_dtim_flag; // indicate dtim of current beacon. - u8 pstrx_rxcnt_period; - u8 NoConnect32k; - u8 ack_last_rpwm; - u8 TxNull0; - u8 TxNull1; - - u8 TxNull0ok; - u8 TxNull1ok; - u8 RfOffLicenseForBCNRx; //filen: After we received ps_bcn_cnt beacons, we can sleep(rf off). - u8 BCNAggEn; - u8 IsGoingTo32K; - u8 bMaxTrackingBcnMode; - u8 BcnTraceDone; - -/* - filen: to indicate whether it is smart power saving or not - 0: Legacy PS - 1: Smart PS(RX use ps_poll) - 2: Smart PS (RX use null_data(0)) -*/ - u8 smart_ps:4; //enum SMART_PS_MODE - u8 RLBM:4; // RX BCN MODE (min, max, active, ...) - u8 AwakeInterval; - u8 ps_mode; // ps type (avtive, legacy, wmmps) - u8 ClkRequestEnable; - u8 last_rpwm; - u8 current_ps_state; - u8 ps_data_open; - u8 ps_bcn_pass_time; // fw will only report one beacon information to driver after ps_bcn_pass_time ms. Unit: 100ms - - u8 ps_dtim_period; - u8 ps_dtim_cnt; - u8 ps_bcn_to; // beacon timeout (ms). - u8 bcn_to_cnt; // indicate the total number of contnuous BCN_TO we have received. - u8 bcn_to_times_cnt; //20140806 - u8 min_rate_in_rrsr; -// u8 lps_control; - u16 ps_drv_early_itv; -// u32 RFECtrl; - u32 null1_ok_cnt; - #ifdef TDMA_POWER_SAVING - u8 SlotPeriod; - u8 FirstOnPeriod; - u8 SecondOnPeriod; - u8 ThirdOnPeriod; - u8 CurrentSlot; - BOOLEAN TDMAOnPeriod; - #endif // #ifdef TDMA_POWER_SAVING - -#if 0 - u8 BcnAheadShift; - u8 BcnEarlyShift; - u8 BcnEarlyShiftMax; - u8 DefaultBcnEarly; - u8 RxBcnCount; - u8 TBTTCount; - u8 CurrentEarly; - u8 CurrentTimeOut; - u8 ReachBcnLimitCount; - u8 BcnDelayInAheadGroupOfAP; - u8 BcnDelayInRearGroupOfAP; - u8 BcnDelay[BCN_CALCULATION_MAX]; - u8 XtalDelay; - - u16 TSFOnTBTT; //unit in TU - u32 TSFOnRxBcn; - u32 TSFOnBcnEarly; -#endif - -#if 0 -#if CONFIG_BCNEARLY_ADJUST - u8 BcnEalyIndex; - u8 BcnEarlyAdjustPosition; - u8 BcnAdjustTogo; - u8 RxBcnArray[BCN_ADJUST_COUNT]; -#endif -#endif -}PS_PARM, *PPS_PARM; - -typedef struct _LEGACY_PS_PPARM_ { - u8 ps_mode:7; - u8 ClkRequestEnable:1; - u8 RLBM:4; //RX Listen BCN Mode - u8 smart_ps:4; - u8 AwakeInterval; //Unit: beacon interval, this field is only valid in PS Self-Defined mode - u8 bAllQueueUAPSD:1; // 1: all queue are uapsd 0: not all queue are uapsd - u8 bMaxTrackingBcnMode:1; - u8 rsvd:6; -//#if CONFIG_FAST_CPWM - u8 PwrState; -//#else -// u8 permission32k:1; -// u8 rsvd1:7; -//#endif - - u8 LowPwrRxBCN :1; - u8 AntAutoSwitch :1; - u8 PSAllowBTHighPri:1; - u8 ProtectBCN :1; - u8 SilencePeriod :1; - u8 FastBTConnect :1; - u8 TwoAntennaEn :1; - u8 rsvd2 :1; - u8 AdoptUserSetting:1; - u8 DrvBcnEarlyShift :3; - u8 DrvBcnTimeOut :4; - #ifdef TDMA_POWER_SAVING - u8 SlotPeriod; - u8 FirstOnPeriod; - u8 SecondOnPeriod; - u8 ThirdOnPeriod; - #endif //#ifdef TDMA_POWER_SAVING -}LEGACY_PS_PARM, *PLEGACY_PS_PARM; - -//H2C Index: 0x20 -typedef struct _H2CParam_SetPwrMode_parm_ { - LEGACY_PS_PARM PwrModeParm; -}H2CParam_PwrMode, *PH2CParam_PwrMode; - -#endif //#ifdef CONFIG_POWER_SAVING - -/*------------------------------Function declaration--------------------------*/ - -#ifdef CONFIG_POWER_SAVING -#if 0 -extern void ClockDown(PADAPTER padapter); -extern void ClockUp(PADAPTER padapter); -extern void PrintBcnFunction(void); -extern void DisDbgMsg(void); -extern void EnDbgMsg(void); -extern void UpChGain(void); -extern void StartCount(PADAPTER padapter); -extern void StopCount(PADAPTER padapter); -extern void IssueNullDataTest(PADAPTER padapter); -extern void ShowPowerState(PADAPTER padapter); -#endif -#ifdef TDMA_POWER_SAVING -extern void TDMAChangeStateTask(PADAPTER padapter); -#endif //#ifdef TDMA_POWER_SAVING -extern void EnterPS(PADAPTER padapter); -extern void GTimer6Handle(VOID *Data); -extern void GTimer7Handle(VOID *Data); -extern void InitGTimer1ms(PADAPTER padapter, u8 IRQDis, u8 TimerID, u32 Period); -extern void DeInitGTimer1ms(PADAPTER padapter, u8 TimerID); -extern void ChangeTransmiteRate(u16 offset, u8 rate); -extern void PowerBitSetting(BOOLEAN bPowerBit, u16 offset); -extern void ChkandChangePS(PPS_PARM pPSParm, BOOLEAN bPowerBit); -extern u16 IssueRsvdPagePacketSetting(u8 PageNum, BOOLEAN bHwSEQEn, u8 RtyLmt); -extern void InitRsvdPgPkt(void); -extern BOOLEAN IssueNullData(PPS_PARM pPSParm, BOOLEAN bPowerBit, u8 RtyLmt); -extern void IssuePSPoll(void); -extern BOOLEAN WaitTxStateMachineOk(void); -extern void WriteTxPause(u8 value, u8 rcode); -extern void PsCloseRF(void); -extern void PsOpenRF(void); -extern void SetPwrStateReg(PPS_PARM pPSParm, u8 PwrStateType, u8 value); -extern BOOLEAN ChkTxQueueIsEmpty(void); -extern void InitPS(PADAPTER padapter); -extern void ResetPSParm(PADAPTER padapter); -extern void Legacy_PS_Setting(PADAPTER padapter); -extern void PSModeSetting(PADAPTER padapter, u8 on); -extern void ConfigListenBeaconPeriod(PPS_PARM pPSParm, u8 RLBM, u8 AwakeInterval); -extern void PSSetMode(PADAPTER padapter, PLEGACY_PS_PARM pparm); -extern BOOLEAN PS_S2_Condition_Match(PPS_PARM pPSParm); -extern BOOLEAN PS_S4_Condition_Match(PADAPTER padapter); -extern BOOLEAN PS_32K_Condition_Match(void); -extern void PS_S2ToS3ToS0State(PADAPTER padapter, u8 nulldata0Allow); -extern void PS_S2ToS0State(PPS_PARM pPSParm); -extern void PS_S3ToS2orS0State(PPS_PARM pPSParm); -extern void PS_S0ToS1ToS2State(PADAPTER padapter); -extern void PS_S1ToS0orS2State(PPS_PARM pPSParm); -extern void PS_S2ToS4State(PADAPTER padapter); -extern void PS_S2ToS5State(PPS_PARM pPSParm); -extern void PS_S4ToS2State(PPS_PARM pPSParm, u8 ReleaseTxPause); -extern void PS_S5ToS2State(PPS_PARM pPSParm); -extern void PS_S0ToS6State(PADAPTER padapter); -extern void PS_S6ToS0State(PPS_PARM pPSParm); -extern void CheckTSFIsStable(u8 ReqState); -extern void WaitHWStateReady(void); -extern void SysClkDown(PPS_PARM pPSParm); -extern void SysClkUp(PPS_PARM pPSParm); -extern void SleepTo32K(PPS_PARM pPSParm); -extern void Change_PS_State(PADAPTER padapter, u8 request_ps_state, u8 nulldata0Allow); -extern void ChangePSStateByRPWM(PADAPTER padapter); -extern void SetSmartPSTimer(PADAPTER padapter); -extern void SmartPS2InitTimerAndToGetRxPkt(PADAPTER padapter); -extern void PS_OnBeacon(PADAPTER padapter); -extern void PSBcnEarlyProcess(PADAPTER padapter); -extern void PSMtiBcnEarlyProcess(PADAPTER padapter); -extern void PSRxBcnProcess(PADAPTER padapter); -extern void TxPktInPSOn(PADAPTER padapter); -extern void PsBcnToProcess(PADAPTER padapter); -extern BOOL RPWMProcess(PADAPTER padapter, BOOLEAN benter32k); -extern void ISR_MtiBcnEarly(PADAPTER padapter); -extern void ISR_BcnEarly(PADAPTER padapter); -extern void ISR_RxBcn(PADAPTER padapter); -extern void ISR_RxBCMD1(PADAPTER padapter); -extern void ISR_RxBCMD0(PADAPTER padapter); -extern void ISR_RxUCMD1(PADAPTER padapter); -extern void ISR_RxUCMD0(PADAPTER padapter); -extern void ISR_TxPktIn(PADAPTER padapter); -extern void ISR_TXCCX(PADAPTER padapter); -extern void H2CHDL_SetPwrMode(PADAPTER padapter, u8* pCmdBuffer); -extern void CheckInReqStateTask(PADAPTER padapter); -extern void HalSetRPWM(PADAPTER padapter, BOOLEAN benter32k); -extern u32 HalGetNullTxRpt(PADAPTER padapter); -//extern thread_return HalEnter32KThreadRtl8195a(thread_context context); -#endif //#ifdef CONFIG_POWER_SAVING - -extern void ISR_TBTT(PADAPTER padapter); -extern void H2CHDL_BcnIgnoreEDCCA(PADAPTER padapter, u8* pCmdBuffer); - -void PMUTask(PADAPTER padapter); -void PMUInitial(PADAPTER padapter); - -#endif //CONFIG_LITTLE_WIFI_MCU_FUNCTION_THREAD -#endif //__RTL8195A_PMU_TASK_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_recv.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_recv.h deleted file mode 100644 index 7fad730..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_recv.h +++ /dev/null @@ -1,232 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTL8195A_RECV_H__ -#define __RTL8195A_RECV_H__ - -#ifdef CONFIG_WLAN_HAL_TEST -#define MAX_RECVBUF_SZ 1200//(RX_DMA_SIZE_8195A - RX_DMA_RESERVED_SIZE_8195A) -#else -#if (SKB_PRE_ALLOCATE_RX==1) -#define MAX_RECVBUF_SZ MAX_SKB_BUF_SIZE //1650 //(RX_DMA_SIZE_8195A - RX_DMA_RESERVED_SIZE_8195A) -#else -#define MAX_RECVBUF_SZ (HAL_INTERFACE_OVERHEAD_SKB_DATA+RX_DRIVER_INFO+\ - RXDESC_SIZE +\ - (MAX_RX_PKT_LIMIT * 512) +\ - SKB_RESERVED_FOR_SAFETY) // 0+32+24+512*4+0 = 2104 -#endif -#endif - -//DWORD 0 -#define SET_RX_STATUS_DESC_PKT_LEN_8812(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 0, 14, __Value) -#define SET_RX_STATUS_DESC_EOR_8812(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 30, 1, __Value) -#define SET_RX_STATUS_DESC_OWN_8812(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 31, 1, __Value) - -#define GET_RX_STATUS_DESC_PKT_LEN_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 0, 14) -#define GET_RX_STATUS_DESC_CRC32_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 14, 1) -#define GET_RX_STATUS_DESC_ICV_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 15, 1) -#define GET_RX_STATUS_DESC_DRVINFO_SIZE_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 16, 4) -#define GET_RX_STATUS_DESC_SECURITY_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 20, 3) -#define GET_RX_STATUS_DESC_QOS_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 23, 1) -#define GET_RX_STATUS_DESC_SHIFT_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 24, 2) -#define GET_RX_STATUS_DESC_PHY_STATUS_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 26, 1) -#define GET_RX_STATUS_DESC_SWDEC_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 27, 1) -#define GET_RX_STATUS_DESC_LAST_SEG_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 28, 1) -#define GET_RX_STATUS_DESC_FIRST_SEG_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 29, 1) -#define GET_RX_STATUS_DESC_EOR_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 30, 1) -#define GET_RX_STATUS_DESC_OWN_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 31, 1) - -//DWORD 1 -#define GET_RX_STATUS_DESC_MACID_8812(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 0, 7) -#define GET_RX_STATUS_DESC_TID_8812(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 8, 4) -#define GET_RX_STATUS_DESC_AMSDU_8812(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 13, 1) -#define GET_RX_STATUS_DESC_RXID_MATCH_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 14, 1) -#define GET_RX_STATUS_DESC_PAGGR_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 15, 1) -#define GET_RX_STATUS_DESC_A1_FIT_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 16, 4) -#define GET_RX_STATUS_DESC_CHKERR_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 20, 1) -#define GET_RX_STATUS_DESC_IPVER_8812(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 21, 1) -#define GET_RX_STATUS_DESC_IS_TCPUDP__8812(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 22, 1) -#define GET_RX_STATUS_DESC_CHK_VLD_8812(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 23, 1) -#define GET_RX_STATUS_DESC_PAM_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 24, 1) -#define GET_RX_STATUS_DESC_PWR_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 25, 1) -#define GET_RX_STATUS_DESC_MORE_DATA_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 26, 1) -#define GET_RX_STATUS_DESC_MORE_FRAG_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 27, 1) -#define GET_RX_STATUS_DESC_TYPE_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 28, 2) -#define GET_RX_STATUS_DESC_MC_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 30, 1) -#define GET_RX_STATUS_DESC_BC_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 31, 1) - -//DWORD 2 -#define GET_RX_STATUS_DESC_SEQ_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 0, 12) -#define GET_RX_STATUS_DESC_FRAG_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 12, 4) -#define GET_RX_STATUS_DESC_RX_IS_QOS_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 16, 1) -#define GET_RX_STATUS_DESC_WLANHD_IV_LEN_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 18, 6) -#define GET_RX_STATUS_DESC_RPT_SEL_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 28, 1) - -//DWORD 3 -#define GET_RX_STATUS_DESC_RX_RATE_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 0, 7) -#define GET_RX_STATUS_DESC_HTC_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 10, 1) -#define GET_RX_STATUS_DESC_EOSP_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 11, 1) -#define GET_RX_STATUS_DESC_BSSID_FIT_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 12, 2) -#ifdef CONFIG_USB_RX_AGGREGATION -#define GET_RX_STATUS_DESC_USB_AGG_PKTNUM_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 16, 8) -#endif -#define GET_RX_STATUS_DESC_PATTERN_MATCH_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+12, 29, 1) -#define GET_RX_STATUS_DESC_UNICAST_MATCH_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+12, 30, 1) -#define GET_RX_STATUS_DESC_MAGIC_MATCH_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+12, 31, 1) - -//DWORD 6 -#define GET_RX_STATUS_DESC_SPLCP_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+16, 0, 1) -#define GET_RX_STATUS_DESC_LDPC_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+16, 1, 1) -#define GET_RX_STATUS_DESC_STBC_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+16, 2, 1) -#define GET_RX_STATUS_DESC_BW_8812(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+16, 4, 2) - -//DWORD 5 -#define GET_RX_STATUS_DESC_TSFL_8812(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+20, 0, 32) - -#define GET_RX_STATUS_DESC_BUFF_ADDR_8812(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+24, 0, 32) -#define GET_RX_STATUS_DESC_BUFF_ADDR64_8812(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+28, 0, 32) - -#define SET_RX_STATUS_DESC_BUFF_ADDR_8812(__pRxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pRxDesc+24, 0, 32, __Value) - -typedef struct rxreport_8723b -{ - //DWORD 0 - u32 pktlen:14; - u32 crc32:1; - u32 icverr:1; - u32 drvinfosize:4; - u32 security:3; - u32 qos:1; - u32 shift:2; - u32 physt:1; - u32 swdec:1; - u32 rsvd0028:2; - u32 eor:1; - u32 rsvd0031:1; - - //DWORD 1 - u32 macid:7; - u32 rsvd0407:1; - u32 tid:4; - u32 macid_vld:1; - u32 amsdu:1; - u32 rxid_match:1; - u32 paggr:1; - u32 a1fit:4; - u32 chkerr:1; //20 - u32 rx_ipv:1; - u32 rx_is_tcp_udp:1; - u32 chk_vld:1; //23 - u32 pam:1; - u32 pwr:1; - u32 md:1; - u32 mf:1; - u32 type:2; - u32 mc:1; - u32 bc:1; - - //DWORD 2 - u32 seq:12; - u32 frag:4; - u32 rx_is_qos:1; - u32 rsvd0817:1; - u32 wlanhd_iv_len:6; - u32 hwrsvd0824:4; - u32 c2h_ind:1; - u32 rsvd0829:2; - u32 fcs_ok:1; - - //DWORD 3 - u32 rx_rate:7; - u32 rsvd1207:3; - u32 htc:1; - u32 esop:1; - u32 bssid_fit:2; - u32 rsvd1214:2; - u32 dma_agg_num:8; - u32 rsvd1224:5; - u32 patternmatch:1; - u32 unicastwake:1; - u32 magicwake:1; - - //DWORD 4 - u32 splcp:1; //Ofdm sgi or cck_splcp - u32 ldpc:1; - u32 stbc:1; - u32 not_sounding:1; - u32 bw:2; - u32 rsvd1606:26; - - //DWORD 5 - u32 tsfl; -} RXREPORT, *PRXREPORT; - -typedef struct phystatus_8723b -{ - u32 rxgain_a:7; - u32 trsw_a:1; - u32 rxgain_b:7; - u32 trsw_b:1; - u32 chcorr_l:16; - - u32 sigqualcck:8; - u32 cfo_a:8; - u32 cfo_b:8; - u32 chcorr_h:8; - - u32 noisepwrdb_h:8; - u32 cfo_tail_a:8; - u32 cfo_tail_b:8; - u32 rsvd0824:8; - - u32 rsvd1200:8; - u32 rxevm_a:8; - u32 rxevm_b:8; - u32 rxsnr_a:8; - - u32 rxsnr_b:8; - u32 noisepwrdb_l:8; - u32 rsvd1616:8; - u32 postsnr_a:8; - - u32 postsnr_b:8; - u32 csi_a:8; - u32 csi_b:8; - u32 targetcsi_a:8; - - u32 targetcsi_b:8; - u32 sigevm:8; - u32 maxexpwr:8; - u32 exintflag:1; - u32 sgien:1; - u32 rxsc:2; - u32 idlelong:1; - u32 anttrainen:1; - u32 antselb:1; - u32 antsel:1; -} PHYSTATUS, *PPHYSTATUS; - - -s32 rtl8195a_init_recv_priv(PADAPTER padapter); -void rtl8195a_free_recv_priv(PADAPTER padapter); -void rtl8195a_query_rx_desc_status(union recv_frame *precvframe, u8 *pdesc); -void rtl8195a_query_rx_phy_status(union recv_frame *precvframe, u8 *pphy_status); - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_rf.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_rf.h deleted file mode 100644 index f02cdea..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_rf.h +++ /dev/null @@ -1,32 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTL8195A_RF_H__ -#define __RTL8195A_RF_H__ - - -int PHY_RF6052_Config8195A( IN PADAPTER Adapter ); - -VOID -PHY_RF6052SetBandwidth8195A( - IN PADAPTER Adapter, - IN CHANNEL_WIDTH Bandwidth); - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_spec.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_spec.h deleted file mode 100644 index e6136e7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_spec.h +++ /dev/null @@ -1,345 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - *******************************************************************************/ -#ifndef __RTL8195A_SPEC_H__ -#define __RTL8195A_SPEC_H__ - -#include - - -#define HAL_NAV_UPPER_UNIT_8723B 128 // micro-second - -//----------------------------------------------------- -// -// 0x0000h ~ 0x00FFh System Configuration -// -//----------------------------------------------------- -#define REG_BT_WIFI_ANTENNA_SWITCH_8723B 0x0038 -#define REG_PAD_CTRL1_8723B 0x0064 -#define REG_AFE_CTRL_4_8723B 0x0078 -#define REG_HMEBOX_DBG_0_8723B 0x0088 -#define REG_HMEBOX_DBG_1_8723B 0x008A -#define REG_HMEBOX_DBG_2_8723B 0x008C -#define REG_HMEBOX_DBG_3_8723B 0x008E - -//----------------------------------------------------- -// -// 0x0100h ~ 0x01FFh MACTOP General Configuration -// -//----------------------------------------------------- -#define REG_C2HEVT_CMD_ID_8723B 0x01A0 -#define REG_C2HEVT_CMD_LEN_8723B 0x01AE -#ifdef CONFIG_WOWLAN -#define REG_WOWLAN_WAKE_REASON 0x01C7 -#endif - -#define REG_HMEBOX_EXT0_8723B 0x01F0 -#define REG_HMEBOX_EXT1_8723B 0x01F4 -#define REG_HMEBOX_EXT2_8723B 0x01F8 -#define REG_HMEBOX_EXT3_8723B 0x01FC - -//----------------------------------------------------- -// -// 0x0200h ~ 0x027Fh TXDMA Configuration -// -//----------------------------------------------------- - -//----------------------------------------------------- -// -// 0x0280h ~ 0x02FFh RXDMA Configuration -// -//----------------------------------------------------- -#define REG_RXDMA_MODE_CTRL_8723B 0x0290 - -//----------------------------------------------------- -// -// 0x0300h ~ 0x03FFh PCIe -// -//----------------------------------------------------- - -//----------------------------------------------------- -// -// 0x0400h ~ 0x047Fh Protocol Configuration -// -//----------------------------------------------------- -#define REG_TXPKTBUF_BCNQ_BDNY_8195A 0x0424 -#define REG_TXPKTBUF_MGQ_BDNY_8195A 0x0425 -#define REG_TXPKTBUF_WMAC_LBK_BF_HD_8195A 0x045D -#ifdef CONFIG_WOWLAN -#define REG_TXPKTBUF_IV_LOW 0x0484 -#define REG_TXPKTBUF_IV_HIGH 0x0488 -#endif - -//----------------------------------------------------- -// -// 0x0500h ~ 0x05FFh EDCA Configuration -// -//----------------------------------------------------- -#define REG_SECONDARY_CCA_CTRL_8723B 0x0577 - -//----------------------------------------------------- -// -// 0x0600h ~ 0x07FFh WMAC Configuration -// -//----------------------------------------------------- - - -//============================================================ -// SDIO Bus Specification -//============================================================ - -//----------------------------------------------------- -// SDIO CMD Address Mapping -//----------------------------------------------------- - -//----------------------------------------------------- -// I/O bus domain (Host) -//----------------------------------------------------- - -//----------------------------------------------------- -// SDIO register -//----------------------------------------------------- -#define SDIO_REG_HCPWM1_8723B 0x025 // HCI Current Power Mode 1 - - -//============================================================================ -// 8723 Regsiter Bit and Content definition -//============================================================================ - -//2 HSISR -// interrupt mask which needs to clear -#define MASK_HSISR_CLEAR (HSISR_GPIO12_0_INT |\ - HSISR_SPS_OCP_INT |\ - HSISR_RON_INT |\ - HSISR_PDNINT |\ - HSISR_GPIO9_INT) - -//----------------------------------------------------- -// -// 0x0100h ~ 0x01FFh MACTOP General Configuration -// -//----------------------------------------------------- - -#define RXDMA_AGG_MODE_EN BIT(1) -//----------------------------------------------------- -// -// 0x0200h ~ 0x027Fh TXDMA Configuration -// -//----------------------------------------------------- - -//----------------------------------------------------- -// -// 0x0280h ~ 0x02FFh RXDMA Configuration -// -//----------------------------------------------------- -#ifdef CONFIG_WOWLAN -#define RXPKT_RELEASE_POLL BIT(16) -#define RXDMA_IDLE BIT(17) -#define RW_RELEASE_EN BIT(18) -#endif - -//----------------------------------------------------- -// -// 0x0400h ~ 0x047Fh Protocol Configuration -// -//----------------------------------------------------- - -//----------------------------------------------------- -// -// 0x0500h ~ 0x05FFh EDCA Configuration -// -//----------------------------------------------------- - -//----------------------------------------------------- -// -// 0x0600h ~ 0x07FFh WMAC Configuration -// -//----------------------------------------------------- - -#endif - -//==================================================== -// EEPROM/Efuse PG Offset for 8195A -//==================================================== -// 0x10 ~ 0x63 = TX power area. -#define EEPROM_TX_PWR_INX_8195A 0x20 -#define EEPROM_ChannelPlan_8195A 0xC8 -#define EEPROM_XTAL_8195A 0xC9 -#define EEPROM_THERMAL_METER_8195A 0xCA - -#define EEPROM_IQK_LCK_8195A 0xCB -#define EEPROM_2G_5G_PA_TYPE_8195A 0xCC -#define EEPROM_2G_LNA_TYPE_GAIN_SEL_8195A 0xCD -#define EEPROM_5G_LNA_TYPE_GAIN_SEL_8195A 0xCE - -#define EEPROM_RF_BOARD_OPTION_8195A 0x131 - -#define EEPROM_FEATURE_OPTION_8195A 0x132 -#define EEPROM_RF_BT_SETTING_8195A 0x133 - -#define EEPROM_VERSION_8195A 0x134 -#define EEPROM_CustomID_8195A 0x135 - -#define EEPROM_TX_BBSWING_2G_8195A 0x136 -#define EEPROM_TX_PWR_CAL_RATE_8195A 0x138 -#define EEPROM_RF_ANTENNA_OPT_8195A 0x139 -#define EEPROM_RFE_OPTION_8195A 0x13A - -//RTL8723BU -#define EEPROM_MAC_ADDR_8723BU 0x107 -#define EEPROM_VID_8723BU 0x100 -#define EEPROM_PID_8723BU 0x102 -#define EEPROM_PA_TYPE_8723BU 0xBC -#define EEPROM_LNA_TYPE_2G_8723BU 0xBD - -//RTL8723BS -#define EEPROM_MAC_ADDR_8723BS 0x11A -#define EEPROM_MAC_ADDR_8195A 0x11A - -#define EEPROM_Voltage_ADDR_8723B 0x8 - -#define EEPROM_TX_KFREE_8195A 0xEE - -#define EEPROM_PACKAGE_TYPE_8195A 0xF8 - -//==================================================== -// EEPROM/Efuse Value Type -//==================================================== -#define EETYPE_TX_PWR 0x0 -//==================================================== -// EEPROM/Efuse Default Value -//==================================================== -#define EEPROM_CID_DEFAULT 0x0 -#define EEPROM_CID_DEFAULT_EXT 0xFF // Reserved for Realtek -#define EEPROM_CID_TOSHIBA 0x4 -#define EEPROM_CID_CCX 0x10 -#define EEPROM_CID_QMI 0x0D -#define EEPROM_CID_WHQL 0xFE - -#define EEPROM_CHANNEL_PLAN_FCC 0x0 -#define EEPROM_CHANNEL_PLAN_IC 0x1 -#define EEPROM_CHANNEL_PLAN_ETSI 0x2 -#define EEPROM_CHANNEL_PLAN_SPAIN 0x3 -#define EEPROM_CHANNEL_PLAN_FRANCE 0x4 -#define EEPROM_CHANNEL_PLAN_MKK 0x5 -#define EEPROM_CHANNEL_PLAN_MKK1 0x6 -#define EEPROM_CHANNEL_PLAN_ISRAEL 0x7 -#define EEPROM_CHANNEL_PLAN_TELEC 0x8 -#define EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN 0x9 -#define EEPROM_CHANNEL_PLAN_WORLD_WIDE_13 0xA -#define EEPROM_CHANNEL_PLAN_NCC_TAIWAN 0xB -#define EEPROM_CHANNEL_PLAN_CHIAN 0XC -#define EEPROM_CHANNEL_PLAN_SINGAPORE_INDIA_MEXICO 0XD -#define EEPROM_CHANNEL_PLAN_KOREA 0xE -#define EEPROM_CHANNEL_PLAN_TURKEY 0xF -#define EEPROM_CHANNEL_PLAN_JAPAN 0x10 -#define EEPROM_CHANNEL_PLAN_FCC_NO_DFS 0x11 -#define EEPROM_CHANNEL_PLAN_JAPAN_NO_DFS 0x12 -#define EEPROM_CHANNEL_PLAN_WORLD_WIDE_5G 0x13 -#define EEPROM_CHANNEL_PLAN_TAIWAN_NO_DFS 0x14 - -#define EEPROM_USB_OPTIONAL1 0xE -#define EEPROM_CHANNEL_PLAN_BY_HW_MASK 0x80 - -#define RTL_EEPROM_ID 0x8129 -#define EEPROM_Default_TSSI 0x0 -#define EEPROM_Default_BoardType 0x02 -#define EEPROM_Default_ThermalMeter 0x12 -#define EEPROM_Default_ThermalMeter_92SU 0x7 -#define EEPROM_Default_ThermalMeter_88E 0x18 -#define EEPROM_Default_ThermalMeter_8812 0x18 -#define EEPROM_Default_ThermalMeter_8192E 0x1A -#define EEPROM_Default_ThermalMeter_8723B 0x18 -#define EEPROM_Default_ThermalMeter_8195A 0x1A - - -#define EEPROM_Default_CrystalCap 0x0 -#define EEPROM_Default_CrystalCap_8723B 0x20 -#define EEPROM_Default_CrystalCap_8195A 0x20 -#define EEPROM_Default_CrystalFreq 0x0 -#define EEPROM_Default_TxPowerLevel_92C 0x22 -#define EEPROM_Default_TxPowerLevel_2G 0x2C -#define EEPROM_Default_TxPowerLevel_5G 0x22 -#define EEPROM_Default_TxPowerLevel 0x22 -#define EEPROM_Default_HT40_2SDiff 0x0 -#define EEPROM_Default_HT20_Diff 2 -#define EEPROM_Default_LegacyHTTxPowerDiff 0x3 -#define EEPROM_Default_LegacyHTTxPowerDiff_92C 0x3 -#define EEPROM_Default_LegacyHTTxPowerDiff_92D 0x4 -#define EEPROM_Default_HT40_PwrMaxOffset 0 -#define EEPROM_Default_HT20_PwrMaxOffset 0 - -#define EEPROM_Default_PID 0x1234 -#define EEPROM_Default_VID 0x5678 -#define EEPROM_Default_CustomerID 0xAB -#define EEPROM_Default_CustomerID_8188E 0x00 -#define EEPROM_Default_SubCustomerID 0xCD -#define EEPROM_Default_Version 0 - -#define EEPROM_Default_externalPA_C9 0x00 -#define EEPROM_Default_externalPA_CC 0xFF -#define EEPROM_Default_internalPA_SP3T_C9 0xAA -#define EEPROM_Default_internalPA_SP3T_CC 0xAF -#define EEPROM_Default_internalPA_SPDT_C9 0xAA -#ifdef CONFIG_PCI_HCI -#define EEPROM_Default_internalPA_SPDT_CC 0xA0 -#else -#define EEPROM_Default_internalPA_SPDT_CC 0xFA -#endif -#define EEPROM_Default_PAType 0 -#define EEPROM_Default_LNAType 0 - -//New EFUSE deafult value -#define EEPROM_DEFAULT_24G_CCK_INDEX 0x20 -#define EEPROM_DEFAULT_24G_40M_INDEX 0x20 -#define EEPROM_DEFAULT_24G_HT20_DIFF 0X00 -#define EEPROM_DEFAULT_24G_OFDM_DIFF 0X02 - -#define EEPROM_DEFAULT_5G_INDEX 0X2A -#define EEPROM_DEFAULT_5G_HT20_DIFF 0X00 -#define EEPROM_DEFAULT_5G_OFDM_DIFF 0X04 - -#define EEPROM_DEFAULT_DIFF 0XFE -#define EEPROM_DEFAULT_CHANNEL_PLAN 0x7F -#define EEPROM_DEFAULT_BOARD_OPTION 0x01 // Enable power by rate and power limit -#define EEPROM_DEFAULT_RFE_OPTION 0x04 -#define EEPROM_DEFAULT_FEATURE_OPTION 0x00 -#define EEPROM_DEFAULT_BT_OPTION 0x10 -#define EEPROM_DEFAULT_TX_CALIBRATE_RATE 0x00 - - - - - - -#ifdef CONFIG_USB_HCI -//should be renamed and moved to another file -typedef enum _BOARD_TYPE_8192CUSB{ - BOARD_USB_DONGLE = 0, // USB dongle - BOARD_USB_High_PA = 1, // USB dongle with high power PA - BOARD_MINICARD = 2, // Minicard - BOARD_USB_SOLO = 3, // USB solo-Slim module - BOARD_USB_COMBO = 4, // USB Combo-Slim module -} BOARD_TYPE_8723BUSB, *PBOARD_TYPE_8723BUSB; - -#endif - -#if defined (CONFIG_PCI_HCI) || defined(CONFIG_LX_HCI) -#define RT_BCN_INT_MASKS (IMR_BcnInt | IMR_TBDOK | IMR_TBDER) -#define RT_AC_INT_MASKS (IMR_VIDOK | IMR_VODOK | IMR_BEDOK|IMR_BKDOK) -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_sreset.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_sreset.h deleted file mode 100644 index e990627..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_sreset.h +++ /dev/null @@ -1,30 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _RTL8195A_SRESET_H_ -#define _RTL8195A_SRESET_H_ - -#include - -#ifdef DBG_CONFIG_ERROR_DETECT -extern void rtl8723b_sreset_xmit_status_check(_adapter *padapter); -extern void rtl8723b_sreset_linked_status_check(_adapter *padapter); -#endif -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_xmit.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_xmit.h deleted file mode 100644 index c5925fb..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hal/rtl8195a/rtl8195a_xmit.h +++ /dev/null @@ -1,473 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTL8195A_XMIT_H__ -#define __RTL8195A_XMIT_H__ - -// -// Queue Select Value in TxDesc -// -#define QSLT_BK 0x2//0x01 -#define QSLT_BE 0x0 -#define QSLT_VI 0x5//0x4 -#define QSLT_VO 0x7//0x6 -#define QSLT_BEACON 0x10 -#define QSLT_HIGH 0x11 -#define QSLT_MGNT 0x12 -#define QSLT_CMD 0x13 - -#define MAX_TID (15) - -//OFFSET 0 -#define OFFSET_SZ 0 -#define OFFSET_SHT 16 -#define BMC BIT(24) -#define LSG BIT(26) -#define FSG BIT(27) -#define OWN BIT(31) - - -//OFFSET 4 -#define PKT_OFFSET_SZ 0 -#define BK BIT(6) -#define QSEL_SHT 8 -#define Rate_ID_SHT 16 -#define NAVUSEHDR BIT(20) -#define PKT_OFFSET_SHT 26 -#define HWPC BIT(31) - -//OFFSET 8 -#define AGG_EN BIT(29) - -//OFFSET 12 -#define SEQ_SHT 16 - -//OFFSET 16 -#define QoS BIT(6) -#define HW_SEQ_EN BIT(7) -#define USERATE BIT(8) -#define DISDATAFB BIT(10) -#define DATA_SHORT BIT(24) -#define DATA_BW BIT(25) - -//OFFSET 20 -#define SGI BIT(6) - -// -//defined for TX DESC Operation -// -typedef struct txdesc_8723b -{ - // Offset 0 - u32 pktlen:16; - u32 offset:8; - u32 bmc:1; - u32 htc:1; - u32 rsvd0026:1; - u32 rsvd0027:1; - u32 linip:1; - u32 noacm:1; - u32 gf:1; - u32 rsvd0031:1; - - // Offset 4 - u32 macid:7; - u32 rsvd0407:1; - u32 qsel:5; - u32 rdg_nav_ext:1; - u32 lsig_txop_en:1; - u32 pifs:1; - u32 rate_id:5; - u32 en_desc_id:1; - u32 sectype:2; - u32 pkt_offset:5; // unit: 8 bytes - u32 moredata:1; - u32 txop_ps_cap:1; - u32 txop_ps_mode:1; - - // Offset 8 - u32 p_aid:9; - u32 rsvd0809:1; - u32 cca_rts:2; - u32 agg_en:1; - u32 rdg_en:1; - u32 null_0:1; - u32 null_1:1; - u32 bk:1; - u32 morefrag:1; - u32 raw:1; - u32 spe_rpt:1; - u32 ampdu_density:3; - u32 bt_null:1; - u32 g_id:6; - u32 rsvd0830:2; - - // Offset 12 - u32 wheader_len:4; - u32 chk_en:1; - u32 early_rate:1; - u32 hw_ssn_sel:2; - u32 userate:1; - u32 disrtsfb:1; - u32 disdatafb:1; - u32 cts2self:1; - u32 rtsen:1; - u32 hw_rts_en:1; - u32 port_id:1; - u32 navusehdr:1; - u32 use_max_len:1; - u32 max_agg_num:5; - u32 ndpa:2; - u32 ampdu_max_time:8; - - // Offset 16 - u32 datarate:7; - u32 try_rate:1; - u32 data_ratefb_lmt:5; - u32 rts_ratefb_lmt:4; - u32 rty_lmt_en:1; - u32 data_rt_lmt:6; - u32 rtsrate:5; - u32 pcts_en:1; - u32 pcts_mask_idx:2; - - // Offset 20 - u32 data_sc:4; - u32 data_short:1; - u32 data_bw:2; - u32 data_ldpc:1; - u32 data_stbc:2; - u32 vcs_stbc:2; - u32 rts_short:1; - u32 rts_sc:4; - u32 rsvd2016:7; - u32 tx_ant:4; - u32 txpwr_offset:3; - u32 rsvd2031:1; - - // Offset 24 - u32 sw_define:12; - u32 mbssid:4; - u32 antsel_A:3; - u32 antsel_B:3; - u32 antsel_C:3; - u32 antsel_D:3; - u32 rsvd2428:4; - - // Offset 28 - u32 checksum:16; - u32 rsvd2816:8; - u32 usb_txagg_num:8; - - // Offset 32 - u32 rts_rc:6; - u32 bar_rty_th:2; - u32 data_rc:6; - u32 rsvd3214:1; - u32 en_hwseq:1; - u32 nextneadpage:8; - u32 tailpage:8; - - // Offset 36 - u32 padding_len:11; - u32 txbf_path:1; - u32 seq:12; - u32 final_data_rate:8; -}TXDESC_8723B, *PTXDESC_8723B; - -#ifndef __INC_HAL8723BDESC_H -#define __INC_HAL8723BDESC_H - -#define RX_STATUS_DESC_SIZE_8723B 24 -#define RX_DRV_INFO_SIZE_UNIT_8723B 8 - - -//DWORD 0 -#define SET_RX_STATUS_DESC_PKT_LEN_8723B(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 0, 14, __Value) -#define SET_RX_STATUS_DESC_EOR_8723B(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 30, 1, __Value) -#define SET_RX_STATUS_DESC_OWN_8723B(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 31, 1, __Value) - -#define GET_RX_STATUS_DESC_PKT_LEN_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 0, 14) -#define GET_RX_STATUS_DESC_CRC32_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 14, 1) -#define GET_RX_STATUS_DESC_ICV_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 15, 1) -#define GET_RX_STATUS_DESC_DRVINFO_SIZE_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 16, 4) -#define GET_RX_STATUS_DESC_SECURITY_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 20, 3) -#define GET_RX_STATUS_DESC_QOS_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 23, 1) -#define GET_RX_STATUS_DESC_SHIFT_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 24, 2) -#define GET_RX_STATUS_DESC_PHY_STATUS_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 26, 1) -#define GET_RX_STATUS_DESC_SWDEC_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 27, 1) -#define GET_RX_STATUS_DESC_LAST_SEG_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 28, 1) -#define GET_RX_STATUS_DESC_FIRST_SEG_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 29, 1) -#define GET_RX_STATUS_DESC_EOR_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 30, 1) -#define GET_RX_STATUS_DESC_OWN_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 31, 1) - -//DWORD 1 -#define GET_RX_STATUS_DESC_MACID_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 0, 7) -#define GET_RX_STATUS_DESC_TID_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 8, 4) -#define GET_RX_STATUS_DESC_AMSDU_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 13, 1) -#define GET_RX_STATUS_DESC_RXID_MATCH_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 14, 1) -#define GET_RX_STATUS_DESC_PAGGR_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 15, 1) -#define GET_RX_STATUS_DESC_A1_FIT_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 16, 4) -#define GET_RX_STATUS_DESC_CHKERR_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 20, 1) -#define GET_RX_STATUS_DESC_IPVER_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 21, 1) -#define GET_RX_STATUS_DESC_IS_TCPUDP__8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 22, 1) -#define GET_RX_STATUS_DESC_CHK_VLD_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 23, 1) -#define GET_RX_STATUS_DESC_PAM_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 24, 1) -#define GET_RX_STATUS_DESC_PWR_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 25, 1) -#define GET_RX_STATUS_DESC_MORE_DATA_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 26, 1) -#define GET_RX_STATUS_DESC_MORE_FRAG_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 27, 1) -#define GET_RX_STATUS_DESC_TYPE_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 28, 2) -#define GET_RX_STATUS_DESC_MC_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 30, 1) -#define GET_RX_STATUS_DESC_BC_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 31, 1) - -//DWORD 2 -#define GET_RX_STATUS_DESC_SEQ_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 0, 12) -#define GET_RX_STATUS_DESC_FRAG_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 12, 4) -#define GET_RX_STATUS_DESC_RX_IS_QOS_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 16, 1) -#define GET_RX_STATUS_DESC_WLANHD_IV_LEN_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 18, 6) -#define GET_RX_STATUS_DESC_RPT_SEL_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 28, 1) - -//DWORD 3 -#define GET_RX_STATUS_DESC_RX_RATE_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 0, 7) -#define GET_RX_STATUS_DESC_HTC_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 10, 1) -#define GET_RX_STATUS_DESC_EOSP_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 11, 1) -#define GET_RX_STATUS_DESC_BSSID_FIT_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 12, 2) -#ifdef CONFIG_USB_RX_AGGREGATION -#define GET_RX_STATUS_DESC_USB_AGG_PKTNUM_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 16, 8) -#endif -#define GET_RX_STATUS_DESC_PATTERN_MATCH_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+12, 29, 1) -#define GET_RX_STATUS_DESC_UNICAST_MATCH_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+12, 30, 1) -#define GET_RX_STATUS_DESC_MAGIC_MATCH_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+12, 31, 1) - -//DWORD 6 -#define GET_RX_STATUS_DESC_SPLCP_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+16, 0, 1) -#define GET_RX_STATUS_DESC_LDPC_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+16, 1, 1) -#define GET_RX_STATUS_DESC_STBC_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+16, 2, 1) -#define GET_RX_STATUS_DESC_BW_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+16, 4, 2) - -//DWORD 5 -#define GET_RX_STATUS_DESC_TSFL_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+20, 0, 32) - -#define GET_RX_STATUS_DESC_BUFF_ADDR_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+24, 0, 32) -#define GET_RX_STATUS_DESC_BUFF_ADDR64_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+28, 0, 32) - -#define SET_RX_STATUS_DESC_BUFF_ADDR_8723B(__pRxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pRxDesc+24, 0, 32, __Value) - - -// Dword 0 -#define GET_TX_DESC_OWN_8723B(__pTxDesc) LE_BITS_TO_4BYTE(__pTxDesc, 31, 1) - -#define SET_TX_DESC_PKT_SIZE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 0, 16, __Value) -#define SET_TX_DESC_OFFSET_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 16, 8, __Value) -#define SET_TX_DESC_BMC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 24, 1, __Value) -#define SET_TX_DESC_HTC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 25, 1, __Value) -#define SET_TX_DESC_LAST_SEG_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 26, 1, __Value) -#define SET_TX_DESC_FIRST_SEG_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 27, 1, __Value) -#define SET_TX_DESC_LINIP_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 28, 1, __Value) -#define SET_TX_DESC_NO_ACM_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 29, 1, __Value) -#define SET_TX_DESC_GF_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 30, 1, __Value) -#define SET_TX_DESC_OWN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 31, 1, __Value) - -// Dword 1 -#define SET_TX_DESC_MACID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 0, 7, __Value) -#define SET_TX_DESC_QUEUE_SEL_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 8, 5, __Value) -#define SET_TX_DESC_RDG_NAV_EXT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 13, 1, __Value) -#define SET_TX_DESC_LSIG_TXOP_EN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 14, 1, __Value) -#define SET_TX_DESC_PIFS_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 15, 1, __Value) -#define SET_TX_DESC_RATE_ID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 16, 5, __Value) -#define SET_TX_DESC_EN_DESC_ID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 21, 1, __Value) -#define SET_TX_DESC_SEC_TYPE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 22, 2, __Value) -#define SET_TX_DESC_PKT_OFFSET_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 24, 5, __Value) - - -// Dword 2 -#define SET_TX_DESC_PAID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 0, 9, __Value) -#define SET_TX_DESC_CCA_RTS_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 10, 2, __Value) -#define SET_TX_DESC_AGG_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 12, 1, __Value) -#define SET_TX_DESC_RDG_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 13, 1, __Value) -#define SET_TX_DESC_AGG_BREAK_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 16, 1, __Value) -#define SET_TX_DESC_MORE_FRAG_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 17, 1, __Value) -#define SET_TX_DESC_RAW_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 18, 1, __Value) -#define SET_TX_DESC_SPE_RPT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 19, 1, __Value) -#define SET_TX_DESC_AMPDU_DENSITY_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 20, 3, __Value) -#define SET_TX_DESC_BT_INT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 23, 1, __Value) -#define SET_TX_DESC_GID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 24, 6, __Value) - - -// Dword 3 -#define SET_TX_DESC_WHEADER_LEN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 0, 4, __Value) -#define SET_TX_DESC_CHK_EN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 4, 1, __Value) -#define SET_TX_DESC_EARLY_MODE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 5, 1, __Value) -#define SET_TX_DESC_HWSEQ_SEL_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 6, 2, __Value) -#define SET_TX_DESC_USE_RATE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 8, 1, __Value) -#define SET_TX_DESC_DISABLE_RTS_FB_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 9, 1, __Value) -#define SET_TX_DESC_DISABLE_FB_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 10, 1, __Value) -#define SET_TX_DESC_CTS2SELF_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 11, 1, __Value) -#define SET_TX_DESC_RTS_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 12, 1, __Value) -#define SET_TX_DESC_HW_RTS_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 13, 1, __Value) -#define SET_TX_DESC_NAV_USE_HDR_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 15, 1, __Value) -#define SET_TX_DESC_USE_MAX_LEN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 16, 1, __Value) -#define SET_TX_DESC_MAX_AGG_NUM_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 17, 5, __Value) -#define SET_TX_DESC_NDPA_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 22, 2, __Value) -#define SET_TX_DESC_AMPDU_MAX_TIME_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 24, 8, __Value) - -// Dword 4 -#define SET_TX_DESC_TX_RATE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 0, 7, __Value) -#define SET_TX_DESC_DATA_RATE_FB_LIMIT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 8, 5, __Value) -#define SET_TX_DESC_RTS_RATE_FB_LIMIT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 13, 4, __Value) -#define SET_TX_DESC_RETRY_LIMIT_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 17, 1, __Value) -#define SET_TX_DESC_DATA_RETRY_LIMIT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 18, 6, __Value) -#define SET_TX_DESC_RTS_RATE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 24, 5, __Value) - - -// Dword 5 -#define SET_TX_DESC_DATA_SC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 0, 4, __Value) -#define SET_TX_DESC_DATA_SHORT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 4, 1, __Value) -#define SET_TX_DESC_DATA_BW_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 5, 2, __Value) -#define SET_TX_DESC_DATA_LDPC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 7, 1, __Value) -#define SET_TX_DESC_DATA_STBC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 8, 2, __Value) -#define SET_TX_DESC_CTROL_STBC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 10, 2, __Value) -#define SET_TX_DESC_RTS_SHORT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 12, 1, __Value) -#define SET_TX_DESC_RTS_SC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 13, 4, __Value) - - -// Dword 6 -#define SET_TX_DESC_SW_DEFINE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 0, 12, __Value) -#define SET_TX_DESC_ANTSEL_A_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 16, 3, __Value) -#define SET_TX_DESC_ANTSEL_B_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 19, 3, __Value) -#define SET_TX_DESC_ANTSEL_C_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 22, 3, __Value) -#define SET_TX_DESC_ANTSEL_D_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 25, 3, __Value) - -// Dword 7 -#if(DEV_BUS_TYPE == RT_PCI_INTERFACE) -#define SET_TX_DESC_TX_BUFFER_SIZE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 0, 16, __Value) -#else -#define SET_TX_DESC_TX_DESC_CHECKSUM_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 0, 16, __Value) -#endif -#define SET_TX_DESC_USB_TXAGG_NUM_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 24, 8, __Value) -#if(DEV_BUS_TYPE == RT_SDIO_INTERFACE) -#define SET_TX_DESC_SDIO_TXSEQ_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 16, 8, __Value) -#endif - -// Dword 8 -#define SET_TX_DESC_HWSEQ_EN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+32, 15, 1, __Value) - -// Dword 9 -#define SET_TX_DESC_SEQ_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+36, 12, 12, __Value) - -// Dword 10 -#define SET_TX_DESC_TX_BUFFER_ADDRESS_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+40, 0, 32, __Value) - - -// Dword 11 -#define SET_TX_DESC_NEXT_DESC_ADDRESS_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+48, 0, 32, __Value) - - -#define SET_EARLYMODE_PKTNUM_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 0, 4, __Value) -#define SET_EARLYMODE_LEN0_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 4, 15, __Value) -#define SET_EARLYMODE_LEN1_1_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 19, 13, __Value) -#define SET_EARLYMODE_LEN1_2_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 0, 2, __Value) -#define SET_EARLYMODE_LEN2_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 2, 15, __Value) -#define SET_EARLYMODE_LEN3_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 17, 15, __Value) - -#endif -//----------------------------------------------------------- -// -// Rate -// -//----------------------------------------------------------- -// CCK Rates, TxHT = 0 -#define DESC8723B_RATE1M 0x00 -#define DESC8723B_RATE2M 0x01 -#define DESC8723B_RATE5_5M 0x02 -#define DESC8723B_RATE11M 0x03 - -// OFDM Rates, TxHT = 0 -#define DESC8723B_RATE6M 0x04 -#define DESC8723B_RATE9M 0x05 -#define DESC8723B_RATE12M 0x06 -#define DESC8723B_RATE18M 0x07 -#define DESC8723B_RATE24M 0x08 -#define DESC8723B_RATE36M 0x09 -#define DESC8723B_RATE48M 0x0a -#define DESC8723B_RATE54M 0x0b - -// MCS Rates, TxHT = 1 -#define DESC8723B_RATEMCS0 0x0c -#define DESC8723B_RATEMCS1 0x0d -#define DESC8723B_RATEMCS2 0x0e -#define DESC8723B_RATEMCS3 0x0f -#define DESC8723B_RATEMCS4 0x10 -#define DESC8723B_RATEMCS5 0x11 -#define DESC8723B_RATEMCS6 0x12 -#define DESC8723B_RATEMCS7 0x13 -#define DESC8723B_RATEMCS8 0x14 -#define DESC8723B_RATEMCS9 0x15 -#define DESC8723B_RATEMCS10 0x16 -#define DESC8723B_RATEMCS11 0x17 -#define DESC8723B_RATEMCS12 0x18 -#define DESC8723B_RATEMCS13 0x19 -#define DESC8723B_RATEMCS14 0x1a -#define DESC8723B_RATEMCS15 0x1b -#define DESC8723B_RATEVHTSS1MCS0 0x2c -#define DESC8723B_RATEVHTSS1MCS1 0x2d -#define DESC8723B_RATEVHTSS1MCS2 0x2e -#define DESC8723B_RATEVHTSS1MCS3 0x2f -#define DESC8723B_RATEVHTSS1MCS4 0x30 -#define DESC8723B_RATEVHTSS1MCS5 0x31 -#define DESC8723B_RATEVHTSS1MCS6 0x32 -#define DESC8723B_RATEVHTSS1MCS7 0x33 -#define DESC8723B_RATEVHTSS1MCS8 0x34 -#define DESC8723B_RATEVHTSS1MCS9 0x35 -#define DESC8723B_RATEVHTSS2MCS0 0x36 -#define DESC8723B_RATEVHTSS2MCS1 0x37 -#define DESC8723B_RATEVHTSS2MCS2 0x38 -#define DESC8723B_RATEVHTSS2MCS3 0x39 -#define DESC8723B_RATEVHTSS2MCS4 0x3a -#define DESC8723B_RATEVHTSS2MCS5 0x3b -#define DESC8723B_RATEVHTSS2MCS6 0x3c -#define DESC8723B_RATEVHTSS2MCS7 0x3d -#define DESC8723B_RATEVHTSS2MCS8 0x3e -#define DESC8723B_RATEVHTSS2MCS9 0x3f - - -#define RX_HAL_IS_CCK_RATE_8723B(pDesc)\ - (GET_RX_STATUS_DESC_RX_RATE_8723B(pDesc) == DESC8723B_RATE1M ||\ - GET_RX_STATUS_DESC_RX_RATE_8723B(pDesc) == DESC8723B_RATE2M ||\ - GET_RX_STATUS_DESC_RX_RATE_8723B(pDesc) == DESC8723B_RATE5_5M ||\ - GET_RX_STATUS_DESC_RX_RATE_8723B(pDesc) == DESC8723B_RATE11M) - - -void rtl8195a_update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem); -void rtl8195a_fill_fake_txdesc(PADAPTER padapter, u8 *pDesc, u32 BufferLen, u8 IsPsPoll, u8 IsBTQosNull, u8 bDataFrame); - -s32 rtl8195ab_init_xmit_priv(PADAPTER padapter); -void rtl8195ab_free_xmit_priv(PADAPTER padapter); -s32 rtl8195ab_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe); -s32 rtl8195ab_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe); -s32 rtl8195ab_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe); -void rtl8195ab_xmitframe_resume(_adapter *padapter); -u32 GetDmaTxbdIdx(u32 ff_hwaddr); -struct xmit_buf * rtl8195a_dequeue_xmitbuf(struct rtw_tx_ring *ring); -BOOLEAN FreeXimtBuf(struct xmit_buf *pxmitbuf); -u8 check_tx_desc_resource(_adapter *padapter, int prio); - - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/gspi/gspi_intf.c b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/gspi/gspi_intf.c deleted file mode 100644 index 7343fa1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/gspi/gspi_intf.c +++ /dev/null @@ -1,493 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#define _GSPI_INTF_C_ - -#include - -#ifdef CONFIG_GSPI_HCI - -struct dvobj_priv *gspi_dvobj_init(void) -{ -// int status = _FAIL; - struct dvobj_priv *dvobj = NULL; - PGSPI_DATA pgspi_data; - -_func_enter_; - - dvobj = (struct dvobj_priv*)rtw_zmalloc(sizeof(*dvobj)); - if (NULL == dvobj) { - goto exit; - } - - pgspi_data = &dvobj->intf_data; - - rtw_mutex_init(&pgspi_data->spi_mutex); - //pgspi_data->block_transfer_len = 512; //512 blocks r/w is not required for GSPI interface - //pgspi_data->tx_block_mode = 0; - //pgspi_data->rx_block_mode = 0; - -// status = _SUCCESS; - -#if 0 -free_dvobj: - if (status != _SUCCESS && dvobj) { - rtw_mfree((uint8_t*)dvobj, sizeof(*dvobj)); - dvobj = NULL; - } -#endif -exit: -_func_exit_; - - return dvobj; -} - -void gspi_dvobj_deinit(struct dvobj_priv *dvobj) -{ -//TODO -// struct dvobj_priv *dvobj = spi_get_drvdata(spi); - -_func_enter_; -//TODO -// spi_set_drvdata(spi, NULL); - if (dvobj) { -//TODO -// gspi_deinit(dvobj); - rtw_mutex_free(&dvobj->intf_data.spi_mutex); - rtw_mfree((uint8_t*)dvobj, sizeof(*dvobj)); - } - -_func_exit_; -} - -int32_t gspi_dvobj_xmit_mgnt(_adapter * padapter, struct xmit_frame *pmgntframe) -{ - int32_t ret = _SUCCESS; - struct pkt_attrib *pattrib; - struct xmit_buf *pxmitbuf; - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter); - uint8_t *pframe = NULL; - - RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, ("+rtw_xmit_mgnt()\n")); - - pattrib = &pmgntframe->attrib; - pxmitbuf = pmgntframe->pxmitbuf; - pframe = (uint8_t *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - - rtw_hal_update_txdesc(padapter, pmgntframe, pmgntframe->buf_addr); - - pxmitbuf->len = TXDESC_SIZE + pattrib->last_txcmdsz; - //pxmitbuf->pg_num = (pxmitbuf->len + 127)/128; // 128 is tx page size - //pxmitbuf->ptail = pmgntframe->buf_addr + pxmitbuf->len; - pxmitbuf->ff_hwaddr = rtw_get_ff_hwaddr(pmgntframe); - - rtw_count_tx_stats(padapter, pmgntframe, pattrib->last_txcmdsz); - - //RT_TRACE(_module_rtl871x_xmit_c_, _drv_always_, ("+rtw_xmit_mgnt(): type=%d\n", GetFrameSubType(pframe))); - if(GetFrameSubType(pframe)==WIFI_BEACON) //dump beacon directly - { -//When using dedicated xmit frame for issue bcn on ap mode -//free xmit frame for bcn reserved page on station mode - Alex Fang -#if USE_DEDICATED_BCN_TX - if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE) { - rtw_free_xmitframe(pxmitpriv, pmgntframe); - pxmitbuf->priv_data = NULL; - } - rtw_write_port(padapter, ffaddr2deviceId(pdvobjpriv, pxmitbuf->ff_hwaddr), pxmitbuf->len, pxmitbuf->pbuf); - - if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE) - rtw_free_xmitbuf(pxmitpriv, pxmitbuf); -#else - rtw_free_xmitframe(pxmitpriv, pmgntframe); - pxmitbuf->priv_data = NULL; - rtw_xmit_xmitbuf(padapter, pxmitbuf); -#endif - } - else - { - rtw_free_xmitframe(pxmitpriv, pmgntframe); - pxmitbuf->priv_data = NULL; - rtw_xmit_xmitbuf(padapter, pxmitbuf); - } - - if (ret != _SUCCESS) - rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_UNKNOWN); - - RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, ("-rtw_xmit_mgnt\n")); - return ret; -} - -//#include -int32_t gspi_dvobj_xmit_data(_adapter *padapter, struct xmit_frame *pxmitframe) -{ - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; - _irqL irql; - int32_t err; - -#ifdef CONFIG_80211N_HT - if ((pxmitframe->frame_tag == DATA_FRAMETAG) && - (pxmitframe->attrib.ether_type != 0x0806) && - (pxmitframe->attrib.ether_type != 0x888e) && - (pxmitframe->attrib.dhcp_pkt != 1)) - { - if (padapter->mlmepriv.LinkDetectInfo.bBusyTraffic == _TRUE) - rtw_issue_addbareq_cmd(padapter, pxmitframe); - } -#endif - -#if USE_SKB_AS_XMITBUF - rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe); -#endif - - rtw_enter_critical_bh(&pxmitpriv->lock, &irql); -#if 1 //FIX_XMITFRAME_FAULT, move from rtw_xmit(). -#ifdef CONFIG_AP_MODE - if(xmitframe_enqueue_for_sleeping_sta(padapter, pxmitframe) == _TRUE) - { - rtw_exit_critical_bh(&pxmitpriv->lock, &irql); - return 1; - } -#endif -#endif - err = rtw_xmitframe_enqueue(padapter, pxmitframe); - rtw_exit_critical_bh(&pxmitpriv->lock, &irql); - - if (err != _SUCCESS) { - RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_, ("rtw_xmit_data(): enqueue xmitframe fail\n")); - rtw_free_xmitframe(pxmitpriv, pxmitframe); - - // Trick, make the statistics correct - pxmitpriv->tx_pkts--; - pxmitpriv->tx_drop++; - return _TRUE; - } - - rtw_count_tx_stats(padapter, pxmitframe, pxmitframe->attrib.last_txcmdsz); -#ifdef CONFIG_CONCURRENT_MODE - if (padapter->adapter_type > PRIMARY_ADAPTER){ - padapter = padapter->pbuddy_adapter; - } -#endif - - rtw_wakeup_task(&padapter->xmitThread); - - return _FALSE; -} - -const struct host_ctrl_intf_ops hci_ops = { - gspi_dvobj_init, - gspi_dvobj_deinit, - NULL, - NULL -}; - - -//TODO -#if 0 - -unsigned int oob_irq; -static irqreturn_t spi_interrupt_thread(int irq, void *data) -{ - struct dvobj_priv *dvobj; - PGSPI_DATA pgspi_data; - - - dvobj = (struct dvobj_priv*)data; - pgspi_data = &dvobj->intf_data; - - //spi_int_hdl(padapter); - if (pgspi_data->priv_wq) - queue_delayed_work(pgspi_data->priv_wq, &pgspi_data->irq_work, 0); - - return IRQ_HANDLED; -} - -static uint8_t gspi_alloc_irq(struct dvobj_priv *dvobj) -{ - PGSPI_DATA pgspi_data; - struct spi_device *spi; - int err; - - - pgspi_data = &dvobj->intf_data; - spi = pgspi_data->func; - - err = request_irq(oob_irq, spi_interrupt_thread, - IRQF_TRIGGER_FALLING,//IRQF_TRIGGER_HIGH;//|IRQF_ONESHOT, - DRV_NAME, dvobj); - //err = request_threaded_irq(oob_irq, NULL, spi_interrupt_thread, - // IRQF_TRIGGER_FALLING, - // DRV_NAME, dvobj); - if (err < 0) { - DBG_871X("Oops: can't allocate irq %d err:%d\n", oob_irq, err); - goto exit; - } - enable_irq_wake(oob_irq); - disable_irq(oob_irq); - -exit: - return err?_FAIL:_SUCCESS; -} - -#endif //#if 0 -//TODO -#if 0 - -static void spi_irq_work(void *data) -{ - struct delayed_work *dwork; - PGSPI_DATA pgspi; - struct dvobj_priv *dvobj; - - - dwork = container_of(data, struct delayed_work, work); - pgspi = container_of(dwork, GSPI_DATA, irq_work); - - dvobj = spi_get_drvdata(pgspi->func); - if (!dvobj->if1) { - DBG_871X("%s if1 == NULL !!\n", __FUNCTION__); - return; - } - spi_int_hdl(dvobj->if1); -} - -#endif //#if 0 - - -//TODO -#if 0 - -static int rtw_gspi_suspend(struct spi_device *spi, pm_message_t mesg) -{ - struct dvobj_priv *dvobj = spi_get_drvdata(spi); - PADAPTER padapter = (_adapter *)dvobj->if1; - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - struct net_device *pnetdev = padapter->pnetdev; - int ret = 0; - - uint32_t start_time = rtw_get_current_time(); - - _func_enter_; - - DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid); - - pwrpriv->bInSuspend = _TRUE; - - while (pwrpriv->bips_processing == _TRUE) - rtw_msleep_os(1); - - if((!padapter->bup) || (padapter->bDriverStopped)||(padapter->bSurpriseRemoved)) - { - DBG_871X("%s bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n", __FUNCTION__ - ,padapter->bup, padapter->bDriverStopped,padapter->bSurpriseRemoved); - goto exit; - } - - rtw_cancel_all_timer(padapter); - LeaveAllPowerSaveMode(padapter); - - //padapter->net_closed = _TRUE; - //s1. - if(pnetdev) - { - netif_carrier_off(pnetdev); - rtw_netif_stop_queue(pnetdev); - } -#ifdef CONFIG_WOWLAN - padapter->pwrctrlpriv.bSupportWakeOnWlan=_TRUE; -#else - //s2. - //s2-1. issue rtw_disassoc_cmd to fw - disconnect_hdl(padapter, NULL); - //rtw_disassoc_cmd(padapter); -#endif - -#ifdef CONFIG_LAYER2_ROAMING_RESUME - if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED) ) - { - DBG_871X("%s %s(" MAC_FMT "), length:%d assoc_ssid.length:%d\n",__FUNCTION__, - pmlmepriv->cur_network.network.Ssid.Ssid, - MAC_ARG(pmlmepriv->cur_network.network.MacAddress), - pmlmepriv->cur_network.network.Ssid.SsidLength, - pmlmepriv->assoc_ssid.SsidLength); - - pmlmepriv->to_roaming = 1; - } -#endif - - //s2-2. indicate disconnect to os - rtw_indicate_disconnect(padapter); - //s2-3. - rtw_free_assoc_resources(padapter, 1); - - //s2-4. - rtw_free_network_queue(padapter, _TRUE); - - rtw_led_control(padapter, LED_CTL_POWER_OFF); - - rtw_dev_unload(padapter); - - if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) - rtw_indicate_scan_done(padapter, 1); - - if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) - rtw_indicate_disconnect(padapter); - - // interface deinit - gspi_deinit(dvobj); - RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("%s: deinit GSPI complete!\n", __FUNCTION__)); - - rtw_wifi_gpio_wlan_ctrl(WLAN_PWDN_OFF); - rtw_mdelay_os(1); -exit: - DBG_871X("<=== %s return %d.............. in %dms\n", __FUNCTION__ - , ret, rtw_get_passing_time_ms(start_time)); - - _func_exit_; - return ret; -} - -extern int pm_netdev_open(struct net_device *pnetdev,uint8_t bnormal); -int rtw_resume_process(_adapter *padapter) -{ - struct net_device *pnetdev; - struct pwrctrl_priv *pwrpriv; - uint8_t is_pwrlock_hold_by_caller; - uint8_t is_directly_called_by_auto_resume; - int ret = 0; - uint32_t start_time = rtw_get_current_time(); - - _func_enter_; - - DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid); - - rtw_wifi_gpio_wlan_ctrl(WLAN_PWDN_ON); - rtw_mdelay_os(1); - - rtw_set_chip_endian(adapter); - - if (padapter) { - pnetdev = padapter->pnetdev; - pwrpriv = &padapter->pwrctrlpriv; - } else { - ret = -1; - goto exit; - } - - // interface init - if (gspi_init(adapter_to_dvobj(padapter)) != _SUCCESS) - { - ret = -1; - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("%s: initialize SDIO Failed!!\n", __FUNCTION__)); - goto exit; - } - rtw_hal_disable_interrupt(padapter); - if (gspi_alloc_irq(adapter_to_dvobj(padapter)) != _SUCCESS) - { - ret = -1; - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("%s: gspi_alloc_irq Failed!!\n", __FUNCTION__)); - goto exit; - } - - rtw_reset_drv_sw(padapter); - pwrpriv->bkeepfwalive = _FALSE; - - DBG_871X("bkeepfwalive(%x)\n",pwrpriv->bkeepfwalive); - if(pm_netdev_open(pnetdev,_TRUE) != 0) { - ret = -1; - goto exit; - } - - netif_device_attach(pnetdev); - netif_carrier_on(pnetdev); - - if( padapter->pid[1]!=0) { - DBG_871X("pid[1]:%d\n",padapter->pid[1]); - rtw_signal_process(padapter->pid[1], SIGUSR2); - } - - #ifdef CONFIG_LAYER2_ROAMING_RESUME - rtw_roaming(padapter, NULL); - #endif - - #ifdef CONFIG_RESUME_IN_WORKQUEUE - rtw_unlock_suspend(); - #endif //CONFIG_RESUME_IN_WORKQUEUE - - pwrpriv->bInSuspend = _FALSE; -exit: - DBG_871X("<=== %s return %d.............. in %dms\n", __FUNCTION__ - , ret, rtw_get_passing_time_ms(start_time)); - - _func_exit_; - - return ret; -} - -static int rtw_gspi_resume(struct spi_device *spi) -{ - struct dvobj_priv *dvobj = spi_get_drvdata(spi); - PADAPTER padapter = (_adapter *)dvobj->if1; - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; - int ret = 0; - - - DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid); - - if(pwrpriv->bInternalAutoSuspend ){ - ret = rtw_resume_process(padapter); - } else { -#ifdef CONFIG_RESUME_IN_WORKQUEUE - rtw_resume_in_workqueue(pwrpriv); -#elif defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER) - if(rtw_is_earlysuspend_registered(pwrpriv)) { - //jeff: bypass resume here, do in late_resume - pwrpriv->do_late_resume = _TRUE; - } else { - ret = rtw_resume_process(padapter); - } -#else // Normal resume process - ret = rtw_resume_process(padapter); -#endif //CONFIG_RESUME_IN_WORKQUEUE - } - - DBG_871X("<======== %s return %d\n", __FUNCTION__, ret); - return ret; - -} - - -static struct spi_driver rtw_spi_drv = { - .probe = rtw_drv_probe, - .remove = rtw_dev_remove, - .suspend = rtw_gspi_suspend, - .resume = rtw_gspi_resume, - .driver = { - .name = "wlan_spi", - .bus = &spi_bus_type, - .owner = THIS_MODULE, - } - -}; - -#endif //#if 0 -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/gspi/gspi_io.c b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/gspi/gspi_io.c deleted file mode 100644 index 06a9983..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/gspi/gspi_io.c +++ /dev/null @@ -1,566 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - *******************************************************************************/ -#define _GSPI_IO_C_ - -#include - -#ifdef CONFIG_GSPI_HCI - -uint8_t spi_read8(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err); -uint16_t spi_read16(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err); -uint32_t spi_read32(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err); -int32_t spi_write8(struct dvobj_priv *pdvobj, uint32_t addr, uint8_t buf, int32_t *err); -int32_t spi_write16(struct dvobj_priv *pdvobj, uint32_t addr, uint16_t buf, int32_t *err); -int32_t spi_write32(struct dvobj_priv *pdvobj, uint32_t addr, uint32_t buf, int32_t *err); - -static uint32_t rtw_spi_transfer( - struct dvobj_priv *pdvobj, - bool pool, - uint8_t* buf, - uint32_t buf_len) -{ - _mutex *spi_mutex; - uint32_t ret_value = _SUCCESS; - - spi_mutex = &(pdvobj->intf_data.spi_mutex); - - rtw_enter_critical_mutex(spi_mutex, NULL); - if(!WLAN_BSP_Transfer(buf, buf_len)) - ret_value = _FAIL; - rtw_exit_critical_mutex(spi_mutex, NULL); - - return ret_value; -} -static int addr_convert(uint32_t addr) -{ - uint32_t domain_id = 0 ; - uint32_t temp_addr = addr&0xffff0000; - - if (temp_addr == 0 ) { - domain_id = WLAN_IOREG_DOMAIN; - return domain_id; - } - - switch (temp_addr) { - case WLAN_LOCAL_OFFSET: - domain_id = SPI_LOCAL_DOMAIN; - break; - case WLAN_IOREG_OFFSET: - domain_id = WLAN_IOREG_DOMAIN; - break; - case FW_FIFO_OFFSET: - domain_id = FW_FIFO_DOMAIN; - break; - case TX_HIQ_OFFSET: - domain_id = TX_HIQ_DOMAIN; - break; - case TX_MIQ_OFFSET: - domain_id = TX_MIQ_DOMAIN; - break; - case TX_LOQ_OFFSET: - domain_id = TX_LOQ_DOMAIN; - break; - case RX_RXOFF_OFFSET: - domain_id = RX_RXFIFO_DOMAIN; - break; - default: - break; - } - - return domain_id; -} - -/* - * Description: - * Translate sdio fifo address to Domain ID in each WLAN FIFO - */ -static uint32_t hwaddr2txfifo(uint32_t addr) -{ - uint32_t fifo_domain_id; - switch (addr) - { - case WLAN_TX_HIQ_DEVICE_ID: - fifo_domain_id = TX_HIQ_DOMAIN; - break; - - case WLAN_TX_MIQ_DEVICE_ID: - fifo_domain_id = TX_MIQ_DOMAIN; - break; - - case WLAN_TX_LOQ_DEVICE_ID: - fifo_domain_id = TX_LOQ_DOMAIN; - break; - default: - fifo_domain_id = TX_LOQ_DOMAIN; - break; - } - - return fifo_domain_id; -} - -static uint32_t buf_endian_reverse(uint32_t src) -{ - return (((src&0x000000ff)<<24)|((src&0x0000ff00)<<8)| - ((src&0x00ff0000)>>8)|((src&0xff000000)>>24)); -} - -// -// Description: -// Query SDIO Local register to query current the number of Free TxPacketBuffer page. -// -// Assumption: -// 1. Running at PASSIVE_LEVEL -// 2. RT_TX_SPINLOCK is NOT acquired. -// -// Created by Roger, 2011.01.28. -// -#ifdef CONFIG_RTL8188F -uint8_t spi_query_status_info(struct dvobj_priv *pdvobj) -{ - pdvobj->SdioTxFIFOFreePage[HI_QUEUE_IDX] = spi_read8(pdvobj, LOCAL_REG_FREE_TXPG, NULL); - pdvobj->SdioTxFIFOFreePage[MID_QUEUE_IDX] =spi_read8(pdvobj, LOCAL_REG_FREE_TXPG+2, NULL); - pdvobj->SdioTxFIFOFreePage[LOW_QUEUE_IDX] = spi_read8(pdvobj, LOCAL_REG_FREE_TXPG+4, NULL); - pdvobj->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX] = spi_read8(pdvobj, LOCAL_REG_FREE_TXPG+6, NULL); - RT_TRACE(_module_hci_ops_c_, _drv_notice_, - ("%s: Free page for HIQ(%x),MIDQ(%x),LOWQ(%x),PUBQ(%x)\n", - __FUNCTION__, - pdvobj->SdioTxFIFOFreePage[HI_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[MID_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[LOW_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX])); - //_exit_critical_bh(&phal->SdioTxFIFOFreePageLock, &irql); - - return _TRUE; -} -#else -uint8_t spi_query_status_info(struct dvobj_priv *pdvobj) -{ - uint32_t NumOfFreePage; - - NumOfFreePage = spi_read32(pdvobj, LOCAL_REG_FREE_TXPG, NULL); - -// _enter_critical_bh(&pdvobj->SdioTxFIFOFreePageLock, &irql); - rtw_memcpy(pdvobj->SdioTxFIFOFreePage, &NumOfFreePage, 4); - - RT_TRACE(_module_hci_ops_c_, _drv_notice_, - ("%s: Free page for HIQ(%x),MIDQ(%x),LOWQ(%x),PUBQ(%x)\n", - __FUNCTION__, - pdvobj->SdioTxFIFOFreePage[HI_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[MID_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[LOW_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX])); -// _exit_critical_bh(&pdvobj->SdioTxFIFOFreePageLock, &irql); - - return _TRUE; -} - -#endif -static void spi_get_status_info(struct dvobj_priv *pdvobj, unsigned char *status) -{ -#ifdef CONFIG_MEMORY_ACCESS_ALIGNED - uint32_t local_status[2]; - uint8_t *pstatus = (uint8_t*)(&local_status[0]); - - memcpy(pstatus, status, GSPI_STATUS_LEN); -#else - uint8_t *pstatus = status; -#endif - -#ifdef CONFIG_RTL8188F - pdvobj->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX] = GET_STATUS_PUB_PAGE_NUM(pstatus)*2; -#else - pdvobj->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX] = GET_STATUS_PUB_PAGE_NUM(pstatus); -#endif - - pdvobj->SdioTxFIFOFreePage[HI_QUEUE_IDX] = GET_STATUS_HI_PAGE_NUM(pstatus); - pdvobj->SdioTxFIFOFreePage[MID_QUEUE_IDX] = GET_STATUS_MID_PAGE_NUM(pstatus); - pdvobj->SdioTxFIFOFreePage[LOW_QUEUE_IDX] = GET_STATUS_LOW_PAGE_NUM(pstatus); - - RT_TRACE(_module_hci_ops_c_, _drv_dump_, - ("%s: Free page for HIQ(%x),MIDQ(%x),LOWQ(%x),PUBQ(%x)\n", - __FUNCTION__, - pdvobj->SdioTxFIFOFreePage[HI_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[MID_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[LOW_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX])); -} - -static int spi_read_write_reg(struct dvobj_priv *pdvobj, int write_flag, uint32_t addr, char * buf, int len, uint32_t eddien) -{ - int fun = 1, domain_id = 0x0; //static - unsigned int cmd = 0 ; - int byte_en = 0 ;//,i = 0 ; - int ret = 1; - unsigned char status[8] = {0}; - unsigned int data_tmp = 0; - uint32_t force_bigendian = eddien; - - uint32_t spi_buf[4] = {0}; - bool polled = TRUE; - - if (len!=1 && len!=2 && len != 4) { - return -1; - } - - domain_id = addr_convert(addr); - - addr &= 0x7fff; - len &= 0xff; - if (write_flag) //write register - { - int remainder = addr % 4; - uint32_t val32 = *(uint32_t *)buf; - switch(len) { - case 1: - byte_en = (0x1 << remainder); - data_tmp = (val32& 0xff)<< (remainder*8); - break; - case 2: - byte_en = (0x3 << remainder); - data_tmp = (val32 & 0xffff)<< (remainder*8); - break; - case 4: - byte_en = 0xf; - data_tmp = val32 & 0xffffffff; - break; - default: - byte_en = 0xf; - data_tmp = val32 & 0xffffffff; - break; - } - } - else //read register - { - switch(len) { - case 1: - byte_en = 0x1; - break; - case 2: - byte_en = 0x3; - break; - case 4: - byte_en = 0xf; - break; - default: - byte_en = 0xf; - break; - } - - if(domain_id == SPI_LOCAL_DOMAIN) - byte_en = 0; - } - - //addr = 0xF0 4byte: 0x2800f00f - REG_LEN_FORMAT(&cmd, byte_en); - REG_ADDR_FORMAT(&cmd, (addr&0xfffffffc)); - REG_DOMAIN_ID_FORMAT(&cmd, domain_id); - REG_FUN_FORMAT(&cmd, fun); - REG_RW_FORMAT(&cmd, write_flag); - - if (force_bigendian) { - cmd = buf_endian_reverse(cmd); - } - - if (!write_flag && (domain_id!= RX_RXFIFO_DOMAIN)) { - uint32_t read_data = 0; - - rtw_memset(spi_buf, 0x00, sizeof(spi_buf)); - - spi_buf[0] = cmd; - spi_buf[1] = 0; - spi_buf[2] = 0; - spi_buf[3] = 0; - - rtw_spi_transfer(pdvobj, polled, (uint8_t*)spi_buf, sizeof(spi_buf)); - - rtw_memcpy(status, (uint8_t *) &spi_buf[1], sizeof(status)); - read_data = EF4Byte(spi_buf[3]); - - //add for 8810 -#ifdef CONFIG_BIG_ENDIAN - if (!force_bigendian) - read_data = buf_endian_reverse(read_data); -#else - if (force_bigendian) - read_data = buf_endian_reverse(read_data); -#endif - *(uint32_t*)buf = read_data; - } else if (write_flag ) { - -#ifdef CONFIG_BIG_ENDIAN - if (!force_bigendian) - data_tmp = buf_endian_reverse(data_tmp); -#else - if (force_bigendian) - data_tmp = buf_endian_reverse(data_tmp); -#endif - - spi_buf[0] = cmd; - spi_buf[1] = data_tmp; - spi_buf[2] = 0; - spi_buf[3] = 0; - - rtw_spi_transfer(pdvobj, polled, (uint8_t*)spi_buf, sizeof(spi_buf)); - - rtw_memcpy(status, (uint8_t *) &spi_buf[2], sizeof(status)); - } - - spi_get_status_info(pdvobj, (unsigned char*)status); - - return ret; -} - -static int spi_io_priv(struct dvobj_priv *pdvobj) -{ - //struct dvobj_priv *pdvobj = &Adapter->dvobjpriv; - - return _SUCCESS; -} - -static int spi_write8_endian(struct dvobj_priv *pdvobj, uint32_t addr, uint32_t buf, uint32_t big) -{ - return spi_read_write_reg(pdvobj,1,addr,(char *)&buf,1, big); -} - -uint8_t spi_read8(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err) -{ - uint32_t ret = 0; - int val32 = 0 , remainder = 0 ; - int32_t _err = 0; - - _err = spi_read_write_reg(pdvobj,0,addr&0xFFFFFFFC,(char *)&ret,4,0); - remainder = addr % 4; - val32 = ret; - val32 = (val32& (0xff<< (remainder<<3)))>>(remainder<<3); - - if (err) - *err = _err; - - return (uint8_t)val32; - -} - -uint16_t spi_read16(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err) -{ - uint32_t ret = 0; - int val32 = 0 , remainder = 0 ; - int32_t _err = 0; - - _err = spi_read_write_reg(pdvobj,0,addr&0xFFFFFFFC,(char *)&ret,4,0); - remainder = addr % 4; - val32 = ret; - val32 = (val32& (0xffff<< (remainder<<3)))>>(remainder<<3); - - if (err) - *err = _err; - - return (uint16_t)val32; -} - -uint32_t spi_read32(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err) -{ - uint32_t ret = 0; - int32_t _err = 0; - - _err = spi_read_write_reg(pdvobj,0,addr&0xFFFFFFFC,(char *)&ret,4,0); - if (err) - *err = _err; - - return ret; -} - -int32_t spi_write8(struct dvobj_priv *pdvobj, uint32_t addr, uint8_t buf, int32_t *err) -{ - int ret = 0; - - ret = spi_read_write_reg(pdvobj,1,addr,(char *)&buf,1,0); - if (err) - *err = ret; - return ret; -} - -int32_t spi_write16(struct dvobj_priv *pdvobj, uint32_t addr, uint16_t buf, int32_t *err) -{ - int ret = 0; - - ret = spi_read_write_reg(pdvobj,1,addr,(char *)&buf,2,0); - if (err) - *err = ret; - return ret; -} - -int32_t spi_write32(struct dvobj_priv *pdvobj, uint32_t addr, uint32_t buf, int32_t *err) -{ - int ret = 0; - - ret = spi_read_write_reg(pdvobj, 1,addr,(char *)&buf,4,0); - if (err) - *err = ret; - return ret; -} - -static int spi_read_rx_fifo(struct dvobj_priv *pdvobj, uint32_t addr, uint8_t *buf, uint32_t len, struct fifo_more_data *pmore_data) -{ - int fun = 1, domain_id = RX_RXFIFO_DOMAIN; - unsigned int cmd = 0; - unsigned char *status = buf + len; - uint8_t *spi_buf = (uint8_t *) (buf - GSPI_CMD_LEN); - int spi_buf_len = 0; - bool polled = TRUE; - bool use_alloc = FALSE; - uint32_t max_skb_len = 0; - -#ifndef CONFIG_DONT_CARE_TP - max_skb_len = MAX_SKB_BUF_SIZE; -#else - max_skb_len = MAX_RX_SKB_BUF_SIZE; -#endif - - if(((GSPI_CMD_LEN + len + GSPI_STATUS_LEN) > max_skb_len) || (!buf)) { - #if !defined(CONFIG_MP_INCLUDED) || !defined(CONFIG_MP_IWPRIV_SUPPORT) // Cloud 2013/09/06 - DBG_871X("data len=%d, MAX_SKB_BUF_SIZE(%d) is not enough, change to dynamic alloc\n", len, max_skb_len); - #endif - use_alloc = TRUE; - spi_buf_len = GSPI_CMD_LEN + len + GSPI_STATUS_LEN; - spi_buf = rtw_malloc(spi_buf_len); - - if(spi_buf == NULL) { - DBG_871X("Failed to alloc %d bytes\n", len); - return _FAIL; - } - else { - buf = spi_buf + GSPI_CMD_LEN; - status = spi_buf + GSPI_CMD_LEN + len; - } - } - - FIFO_LEN_FORMAT(&cmd, len); //TX Agg len - FIFO_DOMAIN_ID_FORMAT(&cmd, domain_id); - FIFO_FUN_FORMAT(&cmd, fun); - FIFO_RW_FORMAT(&cmd, 0); //read - - rtw_memset(status, 0x00, GSPI_STATUS_LEN); - rtw_memset(buf, 0x0, len); - -#ifdef CONFIG_MEMORY_ACCESS_ALIGNED - memcpy(spi_buf, (uint8_t *)&cmd, sizeof(int)); -#else - *((uint32_t *) spi_buf) = cmd; -#endif - - rtw_spi_transfer(pdvobj, polled, (uint8_t *) spi_buf, GSPI_CMD_LEN + len + GSPI_STATUS_LEN); - - spi_get_status_info(pdvobj, status); - pmore_data->more_data = GET_STATUS_HISR_LOW8BIT(status) & BIT(0); - pmore_data->len = GET_STATUS_RX_LENGTH(status); - - if(use_alloc) { - //Drop the data - rtw_mfree(spi_buf, spi_buf_len); - return _FAIL; - } - - return _SUCCESS; -} - -static int spi_write_tx_fifo(struct dvobj_priv *pdvobj, uint32_t addr, uint8_t *buf, uint32_t len) -{ - int fun = 1; //TX_HIQ_FIFO - unsigned int cmd = 0; - unsigned char *status = buf + len; - uint8_t *spi_buf = (uint8_t *) (buf - GSPI_CMD_LEN); - uint32_t page_num = 0; - uint32_t wait_num = 100; - bool polled = TRUE; - uint32_t fifo = 0; - -_func_enter_; - fifo = hwaddr2txfifo(addr); - - spi_query_status_info(pdvobj); - if (fifo == TX_HIQ_DOMAIN) - page_num = pdvobj->SdioTxFIFOFreePage[HI_QUEUE_IDX]; - else if (fifo == TX_LOQ_DOMAIN) - page_num = pdvobj->SdioTxFIFOFreePage[LOW_QUEUE_IDX]; - else - page_num = pdvobj->SdioTxFIFOFreePage[MID_QUEUE_IDX]; - - while (page_num + pdvobj->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX] < 15) { - DBG_871X("Oops: spi_write_tx_fifo(): page_num is %d, padapter->pub_page is %d, wait_num is %d", - page_num, pdvobj->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX], wait_num); - - rtw_msleep_os(1); - //rtw_udelay_os(20); - spi_read32(pdvobj, 0x608, NULL); - - if (fifo == TX_HIQ_DOMAIN) - page_num = pdvobj->SdioTxFIFOFreePage[HI_QUEUE_IDX]; - else if (fifo == TX_LOQ_DOMAIN) - page_num = pdvobj->SdioTxFIFOFreePage[LOW_QUEUE_IDX]; - else - page_num = pdvobj->SdioTxFIFOFreePage[MID_QUEUE_IDX]; - - if (wait_num <= 2) { - DBG_871X("%s(): wait_num is <= 2 drop", __FUNCTION__); - return _FAIL; - } - wait_num --; - } - - FIFO_LEN_FORMAT(&cmd, len); //TX Agg len - FIFO_DOMAIN_ID_FORMAT(&cmd, fifo); - FIFO_FUN_FORMAT(&cmd, fun); - FIFO_RW_FORMAT(&cmd, (unsigned int) 1); //write - - //DBG_871X("%s(): len = %d\n", __FUNCTION__, len); - //RT_PRINT_DATA(_module_hal_xmit_c_, _drv_always_, "Tx:\n", buf, GSPI_CMD_LEN + len); - rtw_memset(status, 0x00, GSPI_STATUS_LEN); - -#ifdef CONFIG_MEMORY_ACCESS_ALIGNED - memcpy(spi_buf, (uint8_t *)&cmd, sizeof(int)); -#else - *((uint32_t *) spi_buf) = cmd; -#endif - - rtw_spi_transfer(pdvobj, polled, (uint8_t *) spi_buf, GSPI_CMD_LEN + len + GSPI_STATUS_LEN); - - spi_get_status_info(pdvobj, status); - -_func_exit_; - - return _SUCCESS; -} - -void spi_set_intf_ops(struct _io_ops *pops) -{ - pops->init_io_priv = &spi_io_priv; - pops->write8_endian = &spi_write8_endian; - - pops->_read8 = &spi_read8; - pops->_read16 = &spi_read16; - pops->_read32 = &spi_read32; - - pops->_write8 = &spi_write8; - pops->_write16 = &spi_write16; - pops->_write32 = &spi_write32; - - pops->read_rx_fifo = &spi_read_rx_fifo; - pops->write_tx_fifo = &spi_write_tx_fifo; -} -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/gspi/gspi_isr.c b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/gspi/gspi_isr.c deleted file mode 100644 index f976cba..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/gspi/gspi_isr.c +++ /dev/null @@ -1,236 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - ******************************************************************************/ -#define _GSPI_ISR_C_ - -#include - -#ifdef CONFIG_GSPI_HCI - -extern struct recv_buf* rtw_recv_rxfifo(_adapter * padapter, uint32_t size, struct fifo_more_data* more_data); -uint8_t spi_read8(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err); -uint16_t spi_read16(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err); -uint32_t spi_read32(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err); -int32_t spi_write8(struct dvobj_priv *pdvobj, uint32_t addr, uint8_t buf, int32_t *err); -int32_t spi_write16(struct dvobj_priv *pdvobj, uint32_t addr, uint16_t buf, int32_t *err); -int32_t spi_write32(struct dvobj_priv *pdvobj, uint32_t addr, uint32_t buf, int32_t *err); - -void spi_int_dpc(PADAPTER padapter, uint32_t sdio_hisr) -{ - struct dvobj_priv *pdvobj = padapter->dvobj; - -#ifdef CONFIG_LPS_LCLK - if (sdio_hisr & HCI_HISR_CPWM1) - { - struct reportpwrstate_parm report; - - report.state = spi_read8(pdvobj, LOCAL_REG_HCPWM1, NULL); - if(report.state == 0xEA) - report.state = PS_STATE_S0; - else - report.state = PS_STATE_S2; - cpwm_int_hdl(padapter, &report); - } -#endif - - if (sdio_hisr & HCI_HISR_TXERR) - { - uint32_t status; - - status = rtw_read32(padapter, REG_TXDMA_STATUS); - rtw_write32(padapter, REG_TXDMA_STATUS, status); - RT_TRACE(_module_hci_ops_c_, _drv_info_, ("%s: SDIO_HISR_TXERR (0x%08x)\n", __func__, status)); - } - -#ifdef CONFIG_INTERRUPT_BASED_TXBCN - - #ifdef CONFIG_INTERRUPT_BASED_TXBCN_EARLY_INT - if (sdio_hisr & HCI_HISR_BCNERLY_INT) - #endif - #ifdef CONFIG_INTERRUPT_BASED_TXBCN_BCN_OK_ERR - if (sdio_hisr & (HCI_HISR_TXBCNOK|HCI_HISR_TXBCNERR)) - #endif - { - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - - #if 0 //for debug - if (sdio_hisr & SDIO_HISR_BCNERLY_INT) - DBG_8192C("%s: SDIO_HISR_BCNERLY_INT\n", __func__); - - if (sdio_hisr & SDIO_HISR_TXBCNOK) - DBG_8192C("%s: SDIO_HISR_TXBCNOK\n", __func__); - - if (sdio_hisr & SDIO_HISR_TXBCNERR) { - u1Byte v422, v550, v419; - v422 = rtw_read8(padapter, 0x422); - v419 = rtw_read8(padapter, 0x419); - v550 = rtw_read8(padapter, 0x550); - - DBG_8192C("%s: SDIO_HISR_TXBCNERR 422=%02x, 419=%02x, 550=%02x\n", __func__, v422, v419, v550); - } - #endif - - if(check_fwstate(pmlmepriv, WIFI_AP_STATE)) - { - //send_beacon(padapter); - if(pmlmepriv->update_bcn == _TRUE) - { - //tx_beacon_hdl(padapter, NULL); - set_tx_beacon_cmd(padapter); - } - } - -#if 0//def CONFIG_CONCURRENT_MODE - if(check_buddy_fwstate(padapter, WIFI_AP_STATE)) - { - //send_beacon(padapter); - if(padapter->pbuddy_adapter->mlmepriv.update_bcn == _TRUE) - { - //tx_beacon_hdl(padapter, NULL); - set_tx_beacon_cmd(padapter->pbuddy_adapter); - } - } -#endif - } -#endif //CONFIG_INTERRUPT_BASED_TXBCN - - if (sdio_hisr & HCI_HISR_C2HCMD) - { - RT_TRACE(_module_hci_ops_c_, _drv_info_, ("%s: C2H Command\n", __func__)); -//TODO -// rtw_c2h_wk_cmd(padapter); - } - - if (sdio_hisr & HCI_HISR_RX_REQUEST)// || sdio_hisr & SPI_HISR_RXFOVW) - { - struct recv_buf *precvbuf; - struct fifo_more_data more_data = {0}; - - //RT_TRACE(_module_hci_ops_c_,_drv_info_, ("%s: RX Request, size=%d\n", __func__, pdvobj->SdioRxFIFOSize)); - - sdio_hisr ^= HCI_HISR_RX_REQUEST; - - do { - more_data.more_data = 0; - more_data.len = 0; - - if (pdvobj->SdioRxFIFOSize == 0) - { - uint16_t val = 0; - int32_t ret; - - RT_TRACE(_module_hci_ops_c_, _drv_info_, ("%s, %d, read RXFIFOsize again size=%d\n", __FUNCTION__, __LINE__, pdvobj->SdioRxFIFOSize)); - - val = spi_read16(pdvobj, LOCAL_REG_RX0_REQ_LEN_1_BYTE, &ret); - if (!ret) { - pdvobj->SdioRxFIFOSize = val; - RT_TRACE(_module_hci_ops_c_, _drv_info_, ("%s: RX_REQUEST, read RXFIFOsize again size=%d\n", __func__, pdvobj->SdioRxFIFOSize)); - } else { - RT_TRACE(_module_hci_ops_c_, _drv_info_, ("%s: RX_REQUEST, read RXFIFOsize ERROR!!\n", __func__)); - } - RT_TRACE(_module_hci_ops_c_, _drv_info_, ("%s, %d, read RXFIFOsize again size=%d\n", __FUNCTION__, __LINE__, pdvobj->SdioRxFIFOSize)); - } - - if (pdvobj->SdioRxFIFOSize != 0) - { -#ifdef RTL8723A_SDIO_LOOPBACK - sd_recv_loopback(padapter, pdvobj->SdioRxFIFOSize); -#else - if (sdio_hisr & HCI_HISR_RXFOVW) - RT_TRACE(_module_hci_ops_c_, _drv_info_, ("%s RXFOVW RX\n", __func__)); - - precvbuf = rtw_recv_rxfifo(padapter, pdvobj->SdioRxFIFOSize, &more_data); - if (precvbuf) - rtw_rxhandler(padapter, precvbuf); - - if (more_data.more_data) { - pdvobj->SdioRxFIFOSize = more_data.len; - } else { - pdvobj->SdioRxFIFOSize = 0; - } -#endif - //If Rx_request ISR is set, execute receive tasklet (sdio_hisr & SPI_HISR_RX_REQUEST) -#if defined(CONFIG_ISR_THREAD_MODE_INTERRUPT) && defined(CONFIG_RECV_TASKLET_THREAD) - rtw_wakeup_task(&padapter->recvtasklet_thread); -#endif - } - -#ifdef CONFIG_INTERRUPT_BASED_TXBCN -{ - //Prevent BCN update not realtime in ap mode - Alex Fang - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - - if((check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) && (pmlmepriv->update_bcn == _TRUE)) - break; -} -#endif - } while (more_data.more_data); -#ifdef PLATFORM_LINUX -#ifdef CONFIG_GSPI_HCI - tasklet_schedule(&padapter->recvpriv.recv_tasklet); -#endif -#endif - } -} - - -void spi_int_hdl(PADAPTER padapter) -{ - struct dvobj_priv *pdvobj = padapter->dvobj; - uint32_t sdio_hisr = 0; - int32_t ret; - - if ((padapter->bDriverStopped == _TRUE) || - (padapter->bSurpriseRemoved == _TRUE)) - return; - - sdio_hisr = spi_read32(pdvobj, LOCAL_REG_HISR, &ret); - if (!ret) { - RT_TRACE(_module_hci_ops_c_, _drv_err_, ("%s: read SDIO_REG_HISR FAIL!!\n", __func__)); - return; - } - pdvobj->SdioRxFIFOSize = spi_read16(pdvobj, LOCAL_REG_RX0_REQ_LEN_1_BYTE, &ret); - - if (!ret) { - RT_TRACE(_module_hci_ops_c_, _drv_err_, ("%s: read SPI_REG_RX0_REQ_LEN FAIL!!\n", __func__)); - return; - } - - if (sdio_hisr & pdvobj->sdio_himr) - { - uint32_t v32; - - sdio_hisr &= pdvobj->sdio_himr; - - // clear HISR - v32 = sdio_hisr & MASK_SPI_HISR_CLEAR; - if (v32) { - spi_write32(pdvobj, LOCAL_REG_HISR, v32, &ret); - } - - spi_int_dpc(padapter, sdio_hisr); - } else { - RT_TRACE(_module_hci_ops_c_, _drv_err_, - ("%s: HISR(0x%08x) and HIMR(0x%08x) not match!\n", - __FUNCTION__, sdio_hisr, pdvobj->sdio_himr)); - if(sdio_hisr) - spi_write32(pdvobj, LOCAL_REG_HISR, sdio_hisr, &ret); - } -} - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/gspi/gspi_spec.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/gspi/gspi_spec.h deleted file mode 100644 index 0717735..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/gspi/gspi_spec.h +++ /dev/null @@ -1,257 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - *******************************************************************************/ - -#ifndef __GSPI_SPEC_H__ -#define __GSPI_SPEC_H__ - - -#define SPI_LOCAL_DOMAIN 0x0 -#define WLAN_IOREG_DOMAIN 0x8 -#define FW_FIFO_DOMAIN 0x4 -#define TX_HIQ_DOMAIN 0xc -#define TX_MIQ_DOMAIN 0xd -#define TX_LOQ_DOMAIN 0xe -#define RX_RXFIFO_DOMAIN 0x1f - -//IO Bus domain address mapping -#define DEFUALT_OFFSET 0x0 -#define LOCAL_OFFSET 0x10250000 -#define SPI_LOCAL_OFFSET 0x10250000 -#define WLAN_IOREG_OFFSET 0x10260000 -#define FW_FIFO_OFFSET 0x10270000 -#define TX_HIQ_OFFSET 0x10310000 -#define TX_MIQ_OFFSET 0x1032000 -#define TX_LOQ_OFFSET 0x10330000 -#define RX_RXOFF_OFFSET 0x10340000 - -#define WLAN_TX_HIQ_DEVICE_ID 4 // 0b[16], 100b[15:13] -#define WLAN_TX_MIQ_DEVICE_ID 5 // 0b[16], 101b[15:13] -#define WLAN_TX_LOQ_DEVICE_ID 6 // 0b[16], 110b[15:13] -#define WLAN_TX_EXQ_DEVICE_ID 3 // 0b[16], 011b[15:13] -#define WLAN_RX0FF_DEVICE_ID 7 // 0b[16], 111b[15:13] -#define WLAN_IOREG_DEVICE_ID 8 // 1b[16] - -//SPI Tx Free Page Index -#define HI_QUEUE_IDX 0 -#define MID_QUEUE_IDX 1 -#define LOW_QUEUE_IDX 2 -#define PUBLIC_QUEUE_IDX 3 - -#define MAX_TX_QUEUE 3 // HIQ, MIQ and LOQ -#define MAX_RX_QUEUE 1 - -//SPI Local registers -#ifdef CONFIG_RTL8188F -#define SPI_REG_TX_CTRL 0x0000 // SPI Tx Control -#define SPI_REG_STATUS_RECOVERY 0x0004 -#define SPI_REG_INT_TIMEOUT 0x0006 -#define SPI_REG_HIMR 0x0014 // SPI Host Interrupt Mask -#define SPI_REG_HISR 0x0018 // SPI Host Interrupt Service Routine -#define SPI_REG_RX0_REQ_LEN 0x001C // RXDMA Request Length -#define SPI_REG_FREE_TXPG 0x0020 // Free Tx Buffer Page -#define SPI_REG_HTSFR_INFO 0x0030 // HTSF Informaion -#define SPI_REG_HCPWM1 0x0038 // HCI Current Power Mode 1 -#define SPI_REG_HCPWM2 0x003A // HCI Current Power Mode 2 -#define SPI_REG_HRPWM1 0x0080 // HCI Request Power Mode 1 need check for 8188f??? -#define SPI_REG_HPS_CLKR 0x0084 // HCI Power Save Clock -#define SPI_REG_HSUS_CTRL 0x0086 // SPI HCI Suspend Control -#else -#define SPI_REG_TX_CTRL 0x0000 // SPI Tx Control -#define SPI_REG_STATUS_RECOVERY 0x0004 -#define SPI_REG_INT_TIMEOUT 0x0006 -#define SPI_REG_HIMR 0x0014 // SPI Host Interrupt Mask -#define SPI_REG_HISR 0x0018 // SPI Host Interrupt Service Routine -#define SPI_REG_RX0_REQ_LEN 0x001C // RXDMA Request Length -#define SPI_REG_FREE_TXPG 0x0020 // Free Tx Buffer Page -#define SPI_REG_HCPWM1 0x0024 // HCI Current Power Mode 1 -#define SPI_REG_HCPWM2 0x0026 // HCI Current Power Mode 2 -#define SPI_REG_HTSFR_INFO 0x0030 // HTSF Informaion -#define SPI_REG_HRPWM1 0x0080 // HCI Request Power Mode 1 -#define SPI_REG_HRPWM2 0x0082 // HCI Request Power Mode 2 -#define SPI_REG_HPS_CLKR 0x0084 // HCI Power Save Clock -#define SPI_REG_HSUS_CTRL 0x0086 // SPI HCI Suspend Control -#define SPI_REG_HIMR_ON 0x0090 //SPI Host Extension Interrupt Mask Always -#define SPI_REG_HISR_ON 0x0091 //SPI Host Extension Interrupt Status Always -#define SPI_REG_CFG 0x00F0 //SPI Configuration Register -#endif - -#define LOCAL_REG_TX_CTRL (SPI_REG_TX_CTRL |SPI_LOCAL_OFFSET) -#define LOCAL_REG_STATUS_RECOVERY (SPI_REG_STATUS_RECOVERY |SPI_LOCAL_OFFSET) -#define LOCAL_REG_INT_TIMEOUT (SPI_REG_INT_TIMEOUT |SPI_LOCAL_OFFSET) -#define LOCAL_REG_HIMR (SPI_REG_HIMR |SPI_LOCAL_OFFSET) -#define LOCAL_REG_HISR (SPI_REG_HISR |SPI_LOCAL_OFFSET) -#define LOCAL_REG_RX0_REQ_LEN_1_BYTE (SPI_REG_RX0_REQ_LEN |SPI_LOCAL_OFFSET) -#define LOCAL_REG_FREE_TXPG (SPI_REG_FREE_TXPG |SPI_LOCAL_OFFSET) -#define LOCAL_REG_HRPWM1 (SPI_REG_HRPWM1 |SPI_LOCAL_OFFSET) -#define LOCAL_REG_HCPWM1 (SPI_REG_HCPWM1 |SPI_LOCAL_OFFSET) -#define LOCAL_REG_SUSPEND_NORMAL (SPI_REG_HSUS_CTRL|SPI_LOCAL_OFFSET) -#define HCI_HIMR_DISABLED 0 - -//SPI HIMR MASK diff with SDIO -#ifdef CONFIG_RTL8188F -#define HCI_HISR_RX_REQUEST BIT(0) -#define HCI_HISR_AVAL BIT(1) -#define HCI_HISR_TXERR BIT(2) -#define HCI_HISR_RXERR BIT(3) -#define HCI_HISR_TXFOVW BIT(4) -#define HCI_HISR_RXFOVW BIT(5) -#define HCI_HISR_TXBCNOK BIT(6) -#define HCI_HISR_TXBCNERR BIT(7) -#define HCI_HISR_BCNERLY_INT BIT(16) -#define HCI_HISR_C2HCMD BIT(17) -#define HCI_HISR_CPWM1 BIT(18) -#define HCI_HISR_CPWM2 BIT(19) -#define HCI_HISR_HSISR_IND BIT(20) -#define HCI_HISR_GTINT3_IND BIT(21) -#define HCI_HISR_GTINT4_IND BIT(22) -#define HCI_HISR_PSTIMEOUT BIT(23) -#define HCI_HISR_OCPINT BIT(24) -#define HCI_HISR_ATIMEND BIT(25) -#define HCI_HISR_ATIMEND_E BIT(26) -#define HCI_HISR_CTWEND BIT(27) -#define HCI_HISR_TSF_BIT32_TOGGLE BIT(29) -#define HCI_HISR_PSTIMEOUT_E BIT(30) -//SPI HIMR MASK diff with SDIO -#define HCI_HIMR_RX_REQUEST BIT(0) -#define HCI_HIMR_AVAL BIT(1) -#define HCI_HIMR_TXERR BIT(2) -#define HCI_HIMR_RXERR BIT(3) -#define HCI_HIMR_TXFOVW BIT(4) -#define HCI_HIMR_RXFOVW BIT(5) -#define HCI_HIMR_TXBCNOK BIT(6) -#define HCI_HIMR_TXBCNERR BIT(7) -#define HCI_HIMR_BCNERLY_INT BIT(16) -#define HCI_HIMR_C2HCMD BIT(17) -#define HCI_HIMR_CPWM1 BIT(18) -#define HCI_HIMR_CPWM2 BIT(19) -#define HCI_HIMR_HSISR_IND BIT(20) -#define HCI_HIMR_GTINT3_IND BIT(21) -#define HCI_HIMR_GTINT4_IND BIT(22) -#define HCI_HIMR_PSTIMEOUT BIT(23) -#define HCI_HIMR_OCPINT BIT(24) -#define HCI_HIMR_ATIMEND BIT(25) -#define HCI_HIMR_ATIMEND_E BIT(26) -#define HCI_HIMR_CTWEND BIT(27) -#define HCI_HIMR_TSF_BIT32_TOGGLE BIT(29) -#define HCI_HIMR_PSTIMEOUT_E BIT(30) -#else -#define HCI_HISR_RX_REQUEST BIT(0) -#define HCI_HISR_AVAL BIT(1) -#define HCI_HISR_TXERR BIT(2) -#define HCI_HISR_RXERR BIT(3) -#define HCI_HISR_TXFOVW BIT(4) -#define HCI_HISR_RXFOVW BIT(5) -#define HCI_HISR_TXBCNOK BIT(6) -#define HCI_HISR_TXBCNERR BIT(7) -#define HCI_HISR_BCNERLY_INT BIT(16) -#define HCI_HISR_ATIMEND BIT(17) -#define HCI_HISR_ATIMEND_E BIT(18) -#define HCI_HISR_CTWEND BIT(19) -#define HCI_HISR_C2HCMD BIT(20) -#define HCI_HISR_CPWM1 BIT(21) -#define HCI_HISR_CPWM2 BIT(22) -#define HCI_HISR_HSISR_IND BIT(23) -#define HCI_HISR_GTINT3_IND BIT(24) -#define HCI_HISR_GTINT4_IND BIT(25) -#define HCI_HISR_PSTIMEOUT BIT(26) -#define HCI_HISR_OCPINT BIT(27) -#define HCI_HISR_TSF_BIT32_TOGGLE BIT(29) -//SPI HIMR MASK diff with SDIO -#define HCI_HIMR_RX_REQUEST BIT(0) -#define HCI_HIMR_AVAL BIT(1) -#define HCI_HIMR_TXERR BIT(2) -#define HCI_HIMR_RXERR BIT(3) -#define HCI_HIMR_TXFOVW BIT(4) -#define HCI_HIMR_RXFOVW BIT(5) -#define HCI_HIMR_TXBCNOK BIT(6) -#define HCI_HIMR_TXBCNERR BIT(7) -#define HCI_HIMR_BCNERLY_INT BIT(16) -#define HCI_HIMR_ATIMEND BIT(17) -#define HCI_HIMR_ATIMEND_E BIT(18) -#define HCI_HIMR_CTWEND BIT(19) -#define HCI_HIMR_C2HCMD BIT(20) -#define HCI_HIMR_CPWM1 BIT(21) -#define HCI_HIMR_CPWM2 BIT(22) -#define HCI_HIMR_HSISR_IND BIT(23) -#define HCI_HIMR_GTINT3_IND BIT(24) -#define HCI_HIMR_GTINT4_IND BIT(25) -#define HCI_HIMR_PSTIMEOUT BIT(26) -#define HCI_HIMR_OCPINT BIT(27) -#define HCI_HIMR_TSF_BIT32_TOGGLE BIT(29) -#endif -#define MASK_SPI_HISR_CLEAR (HCI_HIMR_TXERR |\ - HCI_HIMR_RXERR |\ - HCI_HIMR_TXFOVW |\ - HCI_HIMR_RXFOVW |\ - HCI_HIMR_TXBCNOK |\ - HCI_HIMR_TXBCNERR |\ - HCI_HIMR_C2HCMD |\ - HCI_HIMR_CPWM1 |\ - HCI_HIMR_CPWM2 |\ - HCI_HIMR_HSISR_IND |\ - HCI_HIMR_GTINT3_IND |\ - HCI_HIMR_GTINT4_IND |\ - HCI_HIMR_PSTIMEOUT |\ - HCI_HIMR_OCPINT) - -#define REG_LEN_FORMAT(pcmd, x) SET_BITS_TO_LE_4BYTE(pcmd, 0, 8, x)//(x<<(unsigned int)24) -#define REG_ADDR_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 8, 16, x)//(x<<(unsigned int)16) -#define REG_DOMAIN_ID_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 24, 5, x)//(x<<(unsigned int)0) -#define REG_FUN_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 29, 2, x)//(x<<(unsigned int)5) -#define REG_RW_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 31, 1, x)//(x<<(unsigned int)7) - -#define FIFO_LEN_FORMAT(pcmd, x) SET_BITS_TO_LE_4BYTE(pcmd, 0, 16, x)//(x<<(unsigned int)24) -//#define FIFO_ADDR_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 8, 16, x)//(x<<(unsigned int)16) -#define FIFO_DOMAIN_ID_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 24, 5, x)//(x<<(unsigned int)0) -#define FIFO_FUN_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 29, 2, x)//(x<<(unsigned int)5) -#define FIFO_RW_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 31, 1, x)//(x<<(unsigned int)7) - - -//get status dword0 -#define GET_STATUS_PUB_PAGE_NUM(status) LE_BITS_TO_4BYTE(status, 24, 8) -#define GET_STATUS_HI_PAGE_NUM(status) LE_BITS_TO_4BYTE(status, 18, 6) -#define GET_STATUS_MID_PAGE_NUM(status) LE_BITS_TO_4BYTE(status, 12, 6) -#define GET_STATUS_LOW_PAGE_NUM(status) LE_BITS_TO_4BYTE(status, 6, 6) -#define GET_STATUS_HISR_HI6BIT(status) LE_BITS_TO_4BYTE(status, 0, 6) - -//get status dword1 -#define GET_STATUS_HISR_MID8BIT(status) LE_BITS_TO_4BYTE(status + 4, 24, 8) -#define GET_STATUS_HISR_LOW8BIT(status) LE_BITS_TO_4BYTE(status + 4, 16, 8) -#define GET_STATUS_ERROR(status) LE_BITS_TO_4BYTE(status + 4, 17, 1) -#define GET_STATUS_INT(status) LE_BITS_TO_4BYTE(status + 4, 16, 1) -#define GET_STATUS_RX_LENGTH(status) LE_BITS_TO_4BYTE(status + 4, 0, 16) - - -#define RXDESC_SIZE 24 - -#define TX_FREE_PG_QUEUE 4 // The number of Tx FIFO free page -#define TX_FIFO_PAGE_SZ 128 - -struct spi_more_data { - unsigned long more_data; - unsigned long len; -}; - -extern BUS_DRV_OPS_T bus_driver_ops; - -extern uint8_t spi_query_status_info(struct dvobj_priv *pdvobj); - -extern void spi_set_intf_ops(struct _io_ops *pops); - -#endif //__GSPI_SPEC_H__ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/hci_intfs.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/hci_intfs.h deleted file mode 100644 index 19bb6e8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/hci_intfs.h +++ /dev/null @@ -1,68 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _HCI_INTFS_H_ -#define _HCI_INTFS_H_ - -#include - -struct host_ctrl_intf_ops -{ - struct dvobj_priv * (*dvobj_init)(void); - void (*dvobj_deinit)(struct dvobj_priv *dvobj); - void (*dvobj_request_irq)(struct dvobj_priv *dvobj); - void (*dvobj_free_irq)(struct dvobj_priv *dvobj); -}; - -extern struct dvobj_priv *hci_dvobj_init(void); -extern void hci_dvobj_deinit(struct dvobj_priv *dvobj); -extern void hci_dvobj_request_irq(struct dvobj_priv *dvobj); -extern void hci_dvobj_free_irq(struct dvobj_priv *dvobj); - -#if defined(CONFIG_GSPI_HCI) -#define hci_bus_intf_type RTW_GSPI -#define hci_set_intf_ops spi_set_intf_ops -#define hci_intf_start rtw_hal_enable_interrupt -#define hci_intf_stop rtw_hal_disable_interrupt -extern int32_t gspi_dvobj_xmit_mgnt(_adapter * padapter, struct xmit_frame *pmgntframe); -extern int32_t gspi_dvobj_xmit_data(_adapter *padapter, struct xmit_frame *pxmitframe); -#endif - -#if defined(CONFIG_SDIO_HCI) -#define hci_bus_intf_type RTW_SDIO -#define hci_set_intf_ops sdio_set_intf_ops -#define hci_intf_start rtw_hal_enable_interrupt -#define hci_intf_stop rtw_hal_disable_interrupt -extern int32_t sdio_dvobj_xmit_mgnt(_adapter * padapter, struct xmit_frame *pmgntframe); -extern int32_t sdio_dvobj_xmit_data(_adapter *padapter, struct xmit_frame *pxmitframe); - -#endif - -#if defined(CONFIG_LX_HCI) -#define hci_bus_intf_type RTW_LXBUS -#define hci_set_intf_ops lxbus_set_intf_ops -#define hci_intf_start rtw_hal_enable_interrupt -#define hci_intf_stop hci_lxbus_intf_stop -void hci_lxbus_intf_stop(_adapter *padapter); -uint32_t lextra_bus_dma_Interrupt (void* data); -#endif - - -#endif //_HCI_INTFS_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/hci_spec.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/hci_spec.h deleted file mode 100644 index 4c5b83e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/hci_spec.h +++ /dev/null @@ -1,433 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __HCI_SPEC_H__ -#define __HCI_SPEC_H__ - - -#if defined(CONFIG_GSPI_HCI) -#include "gspi/gspi_spec.h" - -// SPI Header Files -#ifdef PLATFORM_LINUX -#include -#endif - -#define GSPI_CMD_LEN 4 -#define HAL_INTERFACE_CMD_LEN GSPI_CMD_LEN -#define GSPI_STATUS_LEN 8 -#define HAL_INTERFACE_CMD_STATUS_LEN GSPI_STATUS_LEN -#define HAL_INTERFACE_OVERHEAD (HAL_INTERFACE_CMD_LEN+HAL_INTERFACE_OVERHEAD) -//reserve tx headroom in case of softap forwarding unicase packet -#define RX_RESERV_HEADROOM (SKB_WLAN_TX_EXTRA_LEN>RX_DRIVER_INFO+RXDESC_SIZE)?(SKB_WLAN_TX_EXTRA_LEN-RX_DRIVER_INFO-RXDESC_SIZE):0 -typedef struct gspi_data -{ - //uint8_t func_number; - - //uint8_t tx_block_mode; - //uint8_t rx_block_mode; - uint16_t block_transfer_len; //uint32_t block_transfer_len; - -#ifdef PLATFORM_LINUX - struct spi_device *func; - - struct workqueue_struct *priv_wq; - struct delayed_work irq_work; -#endif - -#if defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) - _mutex spi_mutex; -#endif -} GSPI_DATA, *PGSPI_DATA; - -#define INTF_DATA GSPI_DATA - -//extern void spi_set_intf_ops(struct _io_ops *pops); -extern void spi_int_hdl(PADAPTER padapter); -#define rtw_hci_interrupt_handler(__adapter) spi_int_hdl(__adapter) - -#elif defined(CONFIG_SDIO_HCI) -#include "sdio/sdio_spec.h" - -#define GSPI_CMD_LEN 0 -#define HAL_INTERFACE_CMD_LEN GSPI_CMD_LEN -#define GSPI_STATUS_LEN 8 -#define HAL_INTERFACE_CMD_STATUS_LEN GSPI_STATUS_LEN -#define HAL_INTERFACE_OVERHEAD (HAL_INTERFACE_CMD_LEN+HAL_INTERFACE_OVERHEAD) -#define RX_RESERV_HEADROOM (SKB_WLAN_TX_EXTRA_LEN>RX_DRIVER_INFO+RXDESC_SIZE)?(SKB_WLAN_TX_EXTRA_LEN-RX_DRIVER_INFO-RXDESC_SIZE):0 - -typedef struct gspi_data -{ - //uint8_t func_number; - - //uint8_t tx_block_mode; - //uint8_t rx_block_mode; - uint16_t block_transfer_len; //uint32_t block_transfer_len; - -#ifdef PLATFORM_LINUX - struct spi_device *func; - - struct workqueue_struct *priv_wq; - struct delayed_work irq_work; -#endif - - struct sdio_func *func; - -#if defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) - _mutex spi_mutex; -#endif -} GSPI_DATA, *PGSPI_DATA; - -#define INTF_DATA GSPI_DATA - -//extern void spi_set_intf_ops(struct _io_ops *pops); -extern void spi_int_hdl(PADAPTER padapter); -#define rtw_hci_interrupt_handler(__adapter) spi_int_hdl(__adapter) - -#elif defined(CONFIG_USB_HCI) -#include -#include - -#elif defined(CONFIG_PCI_HCI) -#include -#ifdef PLATFORM_LINUX -#include -#endif - -#define INTF_CMD_LEN 0 - -#define INTEL_VENDOR_ID 0x8086 -#define SIS_VENDOR_ID 0x1039 -#define ATI_VENDOR_ID 0x1002 -#define ATI_DEVICE_ID 0x7914 -#define AMD_VENDOR_ID 0x1022 - -#define PCI_MAX_BRIDGE_NUMBER 255 -#define PCI_MAX_DEVICES 32 -#define PCI_MAX_FUNCTION 8 - -#define PCI_CONF_ADDRESS 0x0CF8 // PCI Configuration Space Address -#define PCI_CONF_DATA 0x0CFC // PCI Configuration Space Data - -#define PCI_CLASS_BRIDGE_DEV 0x06 -#define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04 - -#define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10 - -#define U1DONTCARE 0xFF -#define U2DONTCARE 0xFFFF -#define U4DONTCARE 0xFFFFFFFF - -#define PCI_VENDER_ID_REALTEK 0x10ec - -#define HAL_HW_PCI_8180_DEVICE_ID 0x8180 -#define HAL_HW_PCI_8185_DEVICE_ID 0x8185 //8185 or 8185b -#define HAL_HW_PCI_8188_DEVICE_ID 0x8188 //8185b -#define HAL_HW_PCI_8198_DEVICE_ID 0x8198 //8185b -#define HAL_HW_PCI_8190_DEVICE_ID 0x8190 //8190 -#define HAL_HW_PCI_8723E_DEVICE_ID 0x8723 //8723E -#define HAL_HW_PCI_8192_DEVICE_ID 0x8192 //8192 PCI-E -#define HAL_HW_PCI_8192SE_DEVICE_ID 0x8192 //8192 SE -#define HAL_HW_PCI_8174_DEVICE_ID 0x8174 //8192 SE -#define HAL_HW_PCI_8173_DEVICE_ID 0x8173 //8191 SE Crab -#define HAL_HW_PCI_8172_DEVICE_ID 0x8172 //8191 SE RE -#define HAL_HW_PCI_8171_DEVICE_ID 0x8171 //8191 SE Unicron -#define HAL_HW_PCI_0045_DEVICE_ID 0x0045 //8190 PCI for Ceraga -#define HAL_HW_PCI_0046_DEVICE_ID 0x0046 //8190 Cardbus for Ceraga -#define HAL_HW_PCI_0044_DEVICE_ID 0x0044 //8192e PCIE for Ceraga -#define HAL_HW_PCI_0047_DEVICE_ID 0x0047 //8192e Express Card for Ceraga -#define HAL_HW_PCI_700F_DEVICE_ID 0x700F -#define HAL_HW_PCI_701F_DEVICE_ID 0x701F -#define HAL_HW_PCI_DLINK_DEVICE_ID 0x3304 -#define HAL_HW_PCI_8192CET_DEVICE_ID 0x8191 //8192ce -#define HAL_HW_PCI_8192CE_DEVICE_ID 0x8178 //8192ce -#define HAL_HW_PCI_8191CE_DEVICE_ID 0x8177 //8192ce -#define HAL_HW_PCI_8188CE_DEVICE_ID 0x8176 //8192ce -#define HAL_HW_PCI_8192CU_DEVICE_ID 0x8191 //8192ce -#define HAL_HW_PCI_8192DE_DEVICE_ID 0x8193 //8192de -#define HAL_HW_PCI_002B_DEVICE_ID 0x002B //8192de, provided by HW SD -#define HAL_HW_PCI_8188EE_DEVICE_ID 0x8179 - -#define HAL_MEMORY_MAPPED_IO_RANGE_8190PCI 0x1000 //8190 support 16 pages of IO registers -#define HAL_HW_PCI_REVISION_ID_8190PCI 0x00 -#define HAL_MEMORY_MAPPED_IO_RANGE_8192PCIE 0x4000 //8192 support 16 pages of IO registers -#define HAL_HW_PCI_REVISION_ID_8192PCIE 0x01 -#define HAL_MEMORY_MAPPED_IO_RANGE_8192SE 0x4000 //8192 support 16 pages of IO registers -#define HAL_HW_PCI_REVISION_ID_8192SE 0x10 -#define HAL_HW_PCI_REVISION_ID_8192CE 0x1 -#define HAL_MEMORY_MAPPED_IO_RANGE_8192CE 0x4000 //8192 support 16 pages of IO registers -#define HAL_HW_PCI_REVISION_ID_8192DE 0x0 -#define HAL_MEMORY_MAPPED_IO_RANGE_8192DE 0x4000 //8192 support 16 pages of IO registers - -enum pci_bridge_vendor { - PCI_BRIDGE_VENDOR_INTEL = 0x0,//0b'0000,0001 - PCI_BRIDGE_VENDOR_ATI, //= 0x02,//0b'0000,0010 - PCI_BRIDGE_VENDOR_AMD, //= 0x04,//0b'0000,0100 - PCI_BRIDGE_VENDOR_SIS ,//= 0x08,//0b'0000,1000 - PCI_BRIDGE_VENDOR_UNKNOWN, //= 0x40,//0b'0100,0000 - PCI_BRIDGE_VENDOR_MAX ,//= 0x80 -} ; - -// copy this data structor defination from MSDN SDK -typedef struct _PCI_COMMON_CONFIG { - uint16_t VendorID; - uint16_t DeviceID; - uint16_t Command; - uint16_t Status; - uint8_t RevisionID; - uint8_t ProgIf; - uint8_t SubClass; - uint8_t BaseClass; - uint8_t CacheLineSize; - uint8_t LatencyTimer; - uint8_t HeaderType; - uint8_t BIST; - - union { - struct _PCI_HEADER_TYPE_0 { - uint32_t BaseAddresses[6]; - uint32_t CIS; - uint16_t SubVendorID; - uint16_t SubSystemID; - uint32_t ROMBaseAddress; - uint8_t CapabilitiesPtr; - uint8_t Reserved1[3]; - uint32_t Reserved2; - - uint8_t InterruptLine; - uint8_t InterruptPin; - uint8_t MinimumGrant; - uint8_t MaximumLatency; - } type0; -#if 0 - struct _PCI_HEADER_TYPE_1 { - uint32_t BaseAddresses[PCI_TYPE1_ADDRESSES]; - uint8_t PrimaryBusNumber; - uint8_t SecondaryBusNumber; - uint8_t SubordinateBusNumber; - uint8_t SecondaryLatencyTimer; - uint8_t IOBase; - uint8_t IOLimit; - uint16_t SecondaryStatus; - uint16_t MemoryBase; - uint16_t MemoryLimit; - uint16_t PrefetchableMemoryBase; - uint16_t PrefetchableMemoryLimit; - uint32_t PrefetchableMemoryBaseUpper32; - uint32_t PrefetchableMemoryLimitUpper32; - uint16_t IOBaseUpper; - uint16_t IOLimitUpper; - uint32_t Reserved2; - uint32_t ExpansionROMBase; - uint8_t InterruptLine; - uint8_t InterruptPin; - uint16_t BridgeControl; - } type1; - - struct _PCI_HEADER_TYPE_2 { - uint32_t BaseAddress; - uint8_t CapabilitiesPtr; - uint8_t Reserved2; - uint16_t SecondaryStatus; - uint8_t PrimaryBusNumber; - uint8_t CardbusBusNumber; - uint8_t SubordinateBusNumber; - uint8_t CardbusLatencyTimer; - uint32_t MemoryBase0; - uint32_t MemoryLimit0; - uint32_t MemoryBase1; - uint32_t MemoryLimit1; - uint16_t IOBase0_LO; - uint16_t IOBase0_HI; - uint16_t IOLimit0_LO; - uint16_t IOLimit0_HI; - uint16_t IOBase1_LO; - uint16_t IOBase1_HI; - uint16_t IOLimit1_LO; - uint16_t IOLimit1_HI; - uint8_t InterruptLine; - uint8_t InterruptPin; - uint16_t BridgeControl; - uint16_t SubVendorID; - uint16_t SubSystemID; - uint32_t LegacyBaseAddress; - uint8_t Reserved3[56]; - uint32_t SystemControl; - uint8_t MultiMediaControl; - uint8_t GeneralStatus; - uint8_t Reserved4[2]; - uint8_t GPIO0Control; - uint8_t GPIO1Control; - uint8_t GPIO2Control; - uint8_t GPIO3Control; - uint32_t IRQMuxRouting; - uint8_t RetryStatus; - uint8_t CardControl; - uint8_t DeviceControl; - uint8_t Diagnostic; - } type2; -#endif - } u; - - uint8_t DeviceSpecific[108]; -} PCI_COMMON_CONFIG , *PPCI_COMMON_CONFIG; - -typedef struct _RT_PCI_CAPABILITIES_HEADER { - uint8_t CapabilityID; - uint8_t Next; -} RT_PCI_CAPABILITIES_HEADER, *PRT_PCI_CAPABILITIES_HEADER; - -struct pci_priv{ - BOOLEAN pci_clk_req; - - uint8_t pciehdr_offset; - // PCIeCap is only differece between B-cut and C-cut. - // Configuration Space offset 72[7:4] - // 0: A/B cut - // 1: C cut and later. - uint8_t pcie_cap; - uint8_t linkctrl_reg; - - uint8_t busnumber; - uint8_t devnumber; - uint8_t funcnumber; - - uint8_t pcibridge_busnum; - uint8_t pcibridge_devnum; - uint8_t pcibridge_funcnum; - uint8_t pcibridge_vendor; - uint16_t pcibridge_vendorid; - uint16_t pcibridge_deviceid; - uint8_t pcibridge_pciehdr_offset; - uint8_t pcibridge_linkctrlreg; - - uint8_t amd_l1_patch; -}; - -typedef struct _RT_ISR_CONTENT -{ - union{ - uint32_t IntArray[2]; - uint32_t IntReg4Byte; - uint16_t IntReg2Byte; - }; -}RT_ISR_CONTENT, *PRT_ISR_CONTENT; - -//#define RegAddr(addr) (addr + 0xB2000000UL) -//some platform macros will def here -static inline void NdisRawWritePortUlong(uint32_t port, uint32_t val) -{ - outl(val, port); - //writel(val, (uint8_t *)RegAddr(port)); -} - -static inline void NdisRawWritePortUchar(uint32_t port, uint8_t val) -{ - outb(val, port); - //writeb(val, (uint8_t *)RegAddr(port)); -} - -static inline void NdisRawReadPortUchar(uint32_t port, uint8_t *pval) -{ - *pval = inb(port); - //*pval = readb((uint8_t *)RegAddr(port)); -} - -static inline void NdisRawReadPortUshort(uint32_t port, uint16_t *pval) -{ - *pval = inw(port); - //*pval = readw((uint8_t *)RegAddr(port)); -} - -static inline void NdisRawReadPortUlong(uint32_t port, uint32_t *pval) -{ - *pval = inl(port); - //*pval = readl((uint8_t *)RegAddr(port)); -} -#elif defined(CONFIG_LX_HCI) -#define GSPI_CMD_LEN 0 -#define GSPI_STATUS_LEN 0 -#include "lxbus/lxbus_spec.h" -#endif // interface define - -#if 0 //TODO -struct intf_priv { - - uint8_t *intf_dev; - uint32_t max_iosz; //USB2.0: 128, USB1.1: 64, SDIO:64 - uint32_t max_xmitsz; //USB2.0: unlimited, SDIO:512 - uint32_t max_recvsz; //USB2.0: unlimited, SDIO:512 - - volatile uint8_t *io_rwmem; - volatile uint8_t *allocated_io_rwmem; - uint32_t io_wsz; //unit: 4bytes - uint32_t io_rsz;//unit: 4bytes - uint8_t intf_status; - - void (*_bus_io)(uint8_t *priv); - -/* -Under Sync. IRP (SDIO/USB) -A protection mechanism is necessary for the io_rwmem(read/write protocol) - -Under Async. IRP (SDIO/USB) -The protection mechanism is through the pending queue. -*/ - - _mutex ioctl_mutex; - - -#ifdef PLATFORM_LINUX - #ifdef CONFIG_USB_HCI - // when in USB, IO is through interrupt in/out endpoints - struct usb_device *udev; - PURB piorw_urb; - uint8_t io_irp_cnt; - uint8_t bio_irp_pending; - _sema io_retevt; - _timer io_timer; - uint8_t bio_irp_timeout; - uint8_t bio_timer_cancel; - #endif -#endif - -#ifdef PLATFORM_OS_XP - #ifdef CONFIG_SDIO_HCI - // below is for io_rwmem... - PMDL pmdl; - PSDBUS_REQUEST_PACKET sdrp; - PSDBUS_REQUEST_PACKET recv_sdrp; - PSDBUS_REQUEST_PACKET xmit_sdrp; - - PIRP piorw_irp; - - #endif - #ifdef CONFIG_USB_HCI - PURB piorw_urb; - PIRP piorw_irp; - uint8_t io_irp_cnt; - uint8_t bio_irp_pending; - _sema io_retevt; - #endif -#endif - -}; -#endif -#endif //__HCI_SPEC_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/lxbus/lxbus_spec.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/lxbus/lxbus_spec.h deleted file mode 100644 index 33262f1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/lxbus/lxbus_spec.h +++ /dev/null @@ -1,55 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __LXBUS_SPEC_H__ -#define __LXBUS_SPEC_H__ - -#include -//#include - - -#define HAL_INTERFACE_CMD_LEN 0 -#define HAL_INTERFACE_CMD_STATUS_LEN 0 -#define HAL_INTERFACE_OVERHEAD (HAL_INTERFACE_CMD_LEN+HAL_INTERFACE_CMD_STATUS_LEN) - -/* - * The following data structure is used for 8195a debug, and should not - * declared this parameter in release version to save sram usage - * It is used for debugging tx/rx and r/w pointer - */ -struct hal_debug -{ - unsigned int int_count; - unsigned int crc_err; - uint16_t last_write_be; - uint16_t last_write_mgt; - uint16_t last_closed_be; - uint16_t last_closed_mgt; - -}; - - -// The following section should be removed? -#define WLAN_TX_HIQ_DEVICE_ID 4 // 0b[16], 100b[15:13] -#define WLAN_TX_MIQ_DEVICE_ID 5 // 0b[16], 101b[15:13] -#define WLAN_TX_LOQ_DEVICE_ID 6 // 0b[16], 110b[15:13] -#define SDIO_MAX_TX_QUEUE 3 // HIQ, MIQ and LOQ - -#endif //__LXBUS_SPEC_H__ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/sdio/sdio_drvio.c b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/sdio/sdio_drvio.c deleted file mode 100644 index b2c710c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/sdio/sdio_drvio.c +++ /dev/null @@ -1,818 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - *******************************************************************************/ -#define _GSPI_IO_C_ - -#include - -#ifdef CONFIG_SDIO_HCI -#include "wifi_io.h" //from sdio_host driver -//#include -//#include -//#define SDIO_CMD52_IO - -//SDIO host local register space mapping. -#define SDIO_LOCAL_MSK 0x0FFF -#define WLAN_IOREG_MSK 0x7FFF -#define WLAN_FIFO_MSK 0x1FFF // Aggregation Length[12:0] -#define WLAN_RX0FF_MSK 0x0003 - -#define SDIO_WITHOUT_REF_DEVICE_ID 0 // Without reference to the SDIO Device ID -#define SDIO_LOCAL_DEVICE_ID 0 // 0b[16], 000b[15:13] -#define WLAN_TX_HIQ_DEVICE_ID 4 // 0b[16], 100b[15:13] -#define WLAN_TX_MIQ_DEVICE_ID 5 // 0b[16], 101b[15:13] -#define WLAN_TX_LOQ_DEVICE_ID 6 // 0b[16], 110b[15:13] -#define WLAN_RX0FF_DEVICE_ID 7 // 0b[16], 111b[15:13] -#define WLAN_IOREG_DEVICE_ID 8 // 1b[16] - -// -// Description: -// Query SDIO Local register to query current the number of Free TxPacketBuffer page. -// -// Assumption: -// 1. Running at PASSIVE_LEVEL -// 2. RT_TX_SPINLOCK is NOT acquired. -// -// Created by Roger, 2011.01.28. -// -#ifdef CONFIG_RTL8188F -uint8_t spi_query_status_info(struct dvobj_priv *pdvobj) -{ - - ADAPTER *padapter = pdvobj->if1; - pdvobj->SdioTxFIFOFreePage[HI_QUEUE_IDX] = rtw_read8(padapter, LOCAL_REG_FREE_TXPG); - pdvobj->SdioTxFIFOFreePage[MID_QUEUE_IDX] = rtw_read8(padapter, LOCAL_REG_FREE_TXPG+2); - pdvobj->SdioTxFIFOFreePage[LOW_QUEUE_IDX] = rtw_read8(padapter, LOCAL_REG_FREE_TXPG+4); - pdvobj->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX] = rtw_read8(padapter, LOCAL_REG_FREE_TXPG+6); - RT_TRACE(_module_hci_ops_c_, _drv_notice_, - ("%s: Free page for HIQ(%x),MIDQ(%x),LOWQ(%x),PUBQ(%x)\n", - __FUNCTION__, - pdvobj->SdioTxFIFOFreePage[HI_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[MID_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[LOW_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX])); - //_exit_critical_bh(&phal->SdioTxFIFOFreePageLock, &irql); - - return _TRUE; -} -#else -uint8_t spi_query_status_info(struct dvobj_priv *pdvobj) -{ - uint32_t NumOfFreePage; - ADAPTER *padapter = pdvobj->if1; - - NumOfFreePage = rtw_read32(padapter, LOCAL_REG_FREE_TXPG); - -// _enter_critical_bh(&pdvobj->SdioTxFIFOFreePageLock, &irql); - rtw_memcpy(pdvobj->SdioTxFIFOFreePage, &NumOfFreePage, 4); - - RT_TRACE(_module_hci_ops_c_, _drv_notice_, - ("%s: Free page for HIQ(%x),MIDQ(%x),LOWQ(%x),PUBQ(%x)\n", - __FUNCTION__, - pdvobj->SdioTxFIFOFreePage[HI_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[MID_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[LOW_QUEUE_IDX], - pdvobj->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX])); -// _exit_critical_bh(&pdvobj->SdioTxFIFOFreePageLock, &irql); - - return _TRUE; -} -#endif -static unsigned char get_deviceid(unsigned int addr) -{ - unsigned char devideId; - unsigned short pseudoId; - - - pseudoId = (unsigned short)(addr >> 16); - switch (pseudoId) - { - case 0x1025: - devideId = SDIO_LOCAL_DEVICE_ID; - break; - - case 0x1026: - devideId = WLAN_IOREG_DEVICE_ID; - break; - -// case 0x1027: -// devideId = SDIO_FIRMWARE_FIFO; -// break; - - case 0x1031: - devideId = WLAN_TX_HIQ_DEVICE_ID; - break; - - case 0x1032: - devideId = WLAN_TX_MIQ_DEVICE_ID; - break; - - case 0x1033: - devideId = WLAN_TX_LOQ_DEVICE_ID; - break; - - case 0x1034: - devideId = WLAN_RX0FF_DEVICE_ID; - break; - - default: -// devideId = (uint8_t)((addr >> 13) & 0xF); - devideId = WLAN_IOREG_DEVICE_ID; - break; - } - - return devideId; -} - -static unsigned int _cvrt2ftaddr(const unsigned int addr, unsigned char *pdeviceId, unsigned short *poffset) -{ - unsigned char deviceId; - unsigned short offset; - unsigned int ftaddr; - - - deviceId = get_deviceid(addr); - offset = 0; - - switch (deviceId) - { - case SDIO_LOCAL_DEVICE_ID: - offset = addr & SDIO_LOCAL_MSK; - break; - - case WLAN_TX_HIQ_DEVICE_ID: - case WLAN_TX_MIQ_DEVICE_ID: - case WLAN_TX_LOQ_DEVICE_ID: - offset = addr & WLAN_FIFO_MSK; - break; - - case WLAN_RX0FF_DEVICE_ID: - offset = addr & WLAN_RX0FF_MSK; - break; - - case WLAN_IOREG_DEVICE_ID: - default: - deviceId = WLAN_IOREG_DEVICE_ID; - offset = addr & WLAN_IOREG_MSK; - break; - } - ftaddr = (deviceId << 13) | offset; - - if (pdeviceId) *pdeviceId = deviceId; - if (poffset) *poffset = offset; - - return ftaddr; -} - -unsigned char sdio_read8(ADAPTER *Adapter, unsigned int addr, int *err) -{ - struct dvobj_priv *psdiodev; - unsigned int ftaddr; - unsigned char val; - -_func_enter_; - - psdiodev = adapter_to_dvobj(Adapter); - ftaddr = _cvrt2ftaddr(addr, NULL, NULL); - - rtw_sdio_bus_ops.claim_host(psdiodev->intf_data.func); - val = rtw_sdio_bus_ops.readb(psdiodev->intf_data.func, ftaddr, err); - rtw_sdio_bus_ops.release_host(psdiodev->intf_data.func); - - if(err && *err) - DBG_871X( "%s: FAIL!(%d) addr=0x%05x\n", __func__, *err, addr); - -_func_exit_; - - return val; - -} - -unsigned short sdio_read16(ADAPTER *Adapter, unsigned int addr, int *err) -{ - struct dvobj_priv *psdiodev; - unsigned int ftaddr; - unsigned short val; - -_func_enter_; - - psdiodev = adapter_to_dvobj(Adapter); - - if (addr & 1) - DBG_871X( "sdio_read16 addr is wrong addr:0x%08x\n", addr); - - ftaddr = _cvrt2ftaddr(addr, NULL, NULL); - rtw_sdio_bus_ops.claim_host(psdiodev->intf_data.func); - val = rtw_sdio_bus_ops.readw(psdiodev->intf_data.func, ftaddr, err); - rtw_sdio_bus_ops.release_host(psdiodev->intf_data.func); - - if(err && *err) - DBG_871X( "%s: FAIL!(%d) addr=0x%05x\n", __func__, *err, addr); - -_func_exit_; - - return val; -} - -unsigned int sdio_read32(ADAPTER *Adapter, unsigned int addr, int *err) -{ - struct dvobj_priv *psdiodev; - unsigned int ftaddr; - unsigned int val; - -_func_enter_; - - psdiodev = adapter_to_dvobj(Adapter); - - if (addr & 3) - DBG_871X( "sdio_read32 addr is wrong addr:0x%08x\n", addr); - - ftaddr = _cvrt2ftaddr(addr, NULL, NULL); - rtw_sdio_bus_ops.claim_host(psdiodev->intf_data.func); - val = rtw_sdio_bus_ops.readl(psdiodev->intf_data.func, ftaddr, err); - rtw_sdio_bus_ops.release_host(psdiodev->intf_data.func); - if(err && *err) - DBG_871X( "%s: FAIL!(%d) addr=0x%05x\n", __func__, *err, addr); - -_func_exit_; - - return val; - -} - - -unsigned int sdio_write8(ADAPTER *Adapter, unsigned int addr, unsigned int buf, int*err) -{ - struct dvobj_priv *psdiodev; - unsigned int ftaddr; - unsigned int val = 0; - -_func_enter_; - - psdiodev = adapter_to_dvobj(Adapter); - - ftaddr = _cvrt2ftaddr(addr, NULL, NULL); - - rtw_sdio_bus_ops.claim_host(psdiodev->intf_data.func); - rtw_sdio_bus_ops.writeb(psdiodev->intf_data.func, buf&0xFF,ftaddr, err); - rtw_sdio_bus_ops.release_host(psdiodev->intf_data.func); - - if(err && *err) - DBG_871X( "%s: FAIL!(%d) addr=0x%05x\n", __func__, *err, addr); - -_func_exit_; - - return val; -} - -unsigned int sdio_write16(ADAPTER *Adapter, unsigned int addr,unsigned int buf, int *err) -{ - struct dvobj_priv *psdiodev; - unsigned int ftaddr; - unsigned int val = 0; - -_func_enter_; - - psdiodev = adapter_to_dvobj(Adapter); - - if (addr & 1) - DBG_871X( "sdio_write16 addr is wrong addr:0x%08x\n", addr); - - ftaddr = _cvrt2ftaddr(addr, NULL, NULL); - rtw_sdio_bus_ops.claim_host(psdiodev->intf_data.func); - rtw_sdio_bus_ops.writew(psdiodev->intf_data.func, buf&0xFFFF,ftaddr, err); - rtw_sdio_bus_ops.release_host(psdiodev->intf_data.func); - if(err && *err) - DBG_871X( "%s: FAIL!(%d) addr=0x%05x\n", __func__, *err, addr); - -_func_exit_; - - return val; -} - -unsigned int sdio_write32(ADAPTER *Adapter, unsigned int addr, unsigned int buf, int *err) -{ - struct dvobj_priv *psdiodev; - unsigned int ftaddr; - unsigned int val = 0; - -_func_enter_; - - psdiodev = adapter_to_dvobj(Adapter); - - if (addr & 3) - DBG_871X( "sdio_write32 addr is wrong addr:0x%08x\n", addr); - - ftaddr = _cvrt2ftaddr(addr, NULL, NULL); - rtw_sdio_bus_ops.claim_host(psdiodev->intf_data.func); - rtw_sdio_bus_ops.writel(psdiodev->intf_data.func, buf&0xFFFFFFFF,ftaddr, err); - rtw_sdio_bus_ops.release_host(psdiodev->intf_data.func); - - if(err && *err) - DBG_871X( "%s: FAIL!(%d) addr=0x%05x\n", __func__, *err, addr); - -_func_exit_; - - return val; -} - -unsigned int _fifoqueue2ftaddr(unsigned int fifo, unsigned int addr) -{ - unsigned int cmdaddr = TX_HIQ_DOMAIN; - - switch(fifo) { - case TX_LOQ_DOMAIN: - cmdaddr = ((WLAN_TX_LOQ_DEVICE_ID << 13) | (addr & WLAN_FIFO_MSK)); - break; - case TX_HIQ_DOMAIN: - cmdaddr = ((WLAN_TX_HIQ_DEVICE_ID << 13) | (addr & WLAN_FIFO_MSK)); - break; - case TX_MIQ_DOMAIN: - cmdaddr = ((WLAN_TX_MIQ_DEVICE_ID << 13) | (addr & WLAN_FIFO_MSK)); - break; - case RX_RXFIFO_DOMAIN: - cmdaddr = ((WLAN_RX0FF_DEVICE_ID << 13) | (addr & WLAN_RX0FF_MSK)); - break; - default: - cmdaddr = ((WLAN_TX_MIQ_DEVICE_ID << 13) | (addr & WLAN_FIFO_MSK)); - break; - - } - return cmdaddr; -} - -void sdio_write_tx_fifo(ADAPTER *Adapter, unsigned char *buf, int reallen, unsigned int fifo) -{ - struct dvobj_priv *psdiodev; - unsigned int ftaddr; - unsigned char *mem = buf; - int free_mem = 0; - int status; - unsigned int cnt = (unsigned int)reallen; - unsigned int page_num = 0; - unsigned int wait_num = 100; - unsigned int use_page = 0; - -_func_enter_; - use_page = (cnt + TX_FIFO_PAGE_SZ - 1) / TX_FIFO_PAGE_SZ; - - if (cnt > 512) - cnt = _RND(cnt, 512); - else - cnt = _RND(cnt, 4); - - if (((uint32_t)buf) % 4) { - mem = rtw_zmalloc(cnt); - while(!mem) { - DBG_871X("rtw_zmalloc fail, cannot write tx fifo now\n"); - rtw_yield_os(); - mem = rtw_zmalloc(cnt); - } - - free_mem = 1; - //DBG_871X("sdio_write_tx_fifo tem_buf:%p ", mem); - rtw_memcpy(mem, buf, reallen); - - } else { - mem = buf; - } - - if (((uint32_t)mem) % 4) { - DBG_871X("sdio_write_tx_fifo: Oops mem %p not 4 byte Alignment this will cause DMA wrong \n", mem); - } - - psdiodev = adapter_to_dvobj(Adapter); - - - if (fifo == TX_HIQ_DOMAIN) - page_num = psdiodev->SdioTxFIFOFreePage[HI_QUEUE_IDX]; - else if (fifo == TX_LOQ_DOMAIN) - page_num = psdiodev->SdioTxFIFOFreePage[LOW_QUEUE_IDX]; - else - page_num = psdiodev->SdioTxFIFOFreePage[MID_QUEUE_IDX]; - - if (page_num + psdiodev->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX] < use_page) { - spi_query_status_info(Adapter->dvobj); - } - - while (page_num + psdiodev->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX] < use_page) { - DBG_871X("Oops: spi_write_tx_fifo(): page_num is %d, padapter->pub_page is %d, wait_num is %d", - page_num, psdiodev->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX], wait_num); - - rtw_msleep_os(1); - //rtw_udelay_os(20); - spi_query_status_info(Adapter->dvobj); - - if (fifo == TX_HIQ_DOMAIN) - page_num = psdiodev->SdioTxFIFOFreePage[HI_QUEUE_IDX]; - else if (fifo == TX_LOQ_DOMAIN) - page_num = psdiodev->SdioTxFIFOFreePage[LOW_QUEUE_IDX]; - else - page_num = psdiodev->SdioTxFIFOFreePage[MID_QUEUE_IDX]; - - if (wait_num <= 2) { - DBG_871X("%s(): wait_num is <= 2 drop", __FUNCTION__); - return; - } - wait_num --; - } - - if (fifo == TX_HIQ_DOMAIN) { - if (use_page <= page_num) { - psdiodev->SdioTxFIFOFreePage[HI_QUEUE_IDX] -= page_num; - } else { - psdiodev->SdioTxFIFOFreePage[HI_QUEUE_IDX] = 0; - psdiodev->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX] -= use_page - psdiodev->SdioTxFIFOFreePage[HI_QUEUE_IDX]; - } - } else if (fifo == TX_LOQ_DOMAIN) { - if (use_page <= page_num) { - psdiodev->SdioTxFIFOFreePage[LOW_QUEUE_IDX] -= page_num; - } else { - psdiodev->SdioTxFIFOFreePage[LOW_QUEUE_IDX] = 0; - psdiodev->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX] -= use_page - psdiodev->SdioTxFIFOFreePage[LOW_QUEUE_IDX]; - } - } else { - if (use_page <= page_num) { - psdiodev->SdioTxFIFOFreePage[MID_QUEUE_IDX] -= page_num; - } else { - psdiodev->SdioTxFIFOFreePage[MID_QUEUE_IDX] = 0; - psdiodev->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX] -= use_page - psdiodev->SdioTxFIFOFreePage[MID_QUEUE_IDX]; - } - } - - //must reallen here or tx will wrong when RND(512) - ftaddr = _fifoqueue2ftaddr(fifo, reallen >> 2); - - rtw_sdio_bus_ops.claim_host(psdiodev->intf_data.func); - status = rtw_sdio_bus_ops.memcpy_toio(psdiodev->intf_data.func, ftaddr, mem, cnt); - rtw_sdio_bus_ops.release_host(psdiodev->intf_data.func); - - if (free_mem) { - rtw_mfree(mem, cnt); - } - - if (status) { - DBG_871X("sdio_write_tx_fifo:status:%x ftaddr:%x Length:%d fifo:%x ", status, ftaddr, cnt, fifo); - } - -_func_exit_; - - return; -} - -void sdio_read_rx_fifo(ADAPTER *Adapter, unsigned char *buf, int reallen) -{ - struct dvobj_priv *psdiodev; - unsigned int ftaddr; - unsigned char *mem = buf; - int free_mem = 0; - int status; - unsigned int cnt = (unsigned int)reallen; - static unsigned int sdio_rxfifo_cnt = 0; - unsigned int fifo = RX_RXFIFO_DOMAIN; - -_func_enter_; - - if (cnt > 512) - cnt = _RND(cnt, 512); - else - cnt = _RND(cnt, 4); - - mem = rtw_zmalloc(cnt); - if (mem) { - free_mem = 1; - //DBG_871X("sdio_read_rx_fifo tem_buf:%p ", mem); - } else { - //DBG_871X("sdio_read_rx_fifo tem_buf:Oops %p ", mem); - mem = buf; - } - - if (mem == NULL) { - DBG_871X("sdio_read_rx_fifo: Oops mem is NULL \n"); - return; - } - - if (((uint32_t)mem) % 4) { - DBG_871X("sdio_read_rx_fifo: Oops mem %p not 4 byte Alignment this will cause DMA wrong \n", mem); - } - - psdiodev = adapter_to_dvobj(Adapter); - - ftaddr = _fifoqueue2ftaddr(fifo, sdio_rxfifo_cnt++); - - rtw_sdio_bus_ops.claim_host(psdiodev->intf_data.func); - status = rtw_sdio_bus_ops.memcpy_fromio(psdiodev->intf_data.func, mem, ftaddr, cnt); - rtw_sdio_bus_ops.release_host(psdiodev->intf_data.func); - - if (free_mem) { - if (buf) - rtw_memcpy(buf, mem, reallen); - rtw_mfree(mem, cnt); - } - - if (status) { - //error - DBG_871X("rtw_sdio_read_rx_fifo error 0x%x\n" - "***** Addr = %x *****\n" - "***** Length = %d *****\n", status, ftaddr, cnt); - } - - -_func_exit_; - - return; -} - - -void sdio_cmd52_read(ADAPTER *Adapter, uint32_t addr, uint32_t cnt, uint8_t *pdata, int *err) -{ - int i = 0; - - for (i = 0; i < cnt; i++) { - pdata[i] = sdio_read8(Adapter, addr + i, err); - if (err && *err) - break; - } -} - -void sdio_cmd52_write(ADAPTER *Adapter, uint32_t addr, uint32_t cnt, uint8_t *pdata, int *err) -{ - int i = 0; - - for (i = 0; i < cnt; i++) { - sdio_write8(Adapter, addr + i, pdata[i], err); - if (err && *err) - break; - } -} - -uint8_t _sdio_read8(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err) -{ - uint8_t val; - ADAPTER *Adapter = pdvobj->if1; - -_func_enter_; - - val = sdio_read8(Adapter, addr, err); - -_func_exit_; - - return val; -} - -uint16_t _sdio_read16(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err) -{ - uint8_t bMacPwrCtrlOn = _FALSE; - uint16_t val; - uint8_t cmd52_io = 0; - ADAPTER *Adapter = pdvobj->if1; - -_func_enter_; - /* we should use CMD 52 before bMacPwrCtrlOn */ - rtw_hal_get_hwreg(Adapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn); - cmd52_io = !bMacPwrCtrlOn; -#ifdef SDIO_CMD52_IO - cmd52_io = 1; -#endif - if (cmd52_io) { - sdio_cmd52_read(Adapter, addr, 2, (uint8_t*)&val, err); - val = le16_to_cpu(val); - return val; - } - - val = sdio_read16(Adapter, addr, err); - -_func_exit_; - - return val; -} - -uint32_t _sdio_read32(struct dvobj_priv *pdvobj, uint32_t addr, int32_t *err) -{ - uint8_t bMacPwrCtrlOn = _FALSE; - uint32_t val; - uint8_t cmd52_io = 0; - ADAPTER *Adapter = pdvobj->if1; - -_func_enter_; - - /* we should use CMD 52 before bMacPwrCtrlOn */ - rtw_hal_get_hwreg(Adapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn); - cmd52_io = !bMacPwrCtrlOn; -#ifdef SDIO_CMD52_IO - cmd52_io = 1; -#endif - if (cmd52_io) { - sdio_cmd52_read(Adapter, addr, 4, (uint8_t*)&val, err); - val = le32_to_cpu(val); - return val; - } - - val = sdio_read32(Adapter, addr, err); - -_func_exit_; - - return val; -} - -int32_t _sdio_write8(struct dvobj_priv *pdvobj, uint32_t addr, uint8_t val, int32_t *err) -{ - ADAPTER *Adapter = pdvobj->if1; - -_func_enter_; - - sdio_write8(Adapter, addr, (uint32_t)val, err); - -_func_exit_; - - return _SUCCESS; -} - -int32_t _sdio_write16(struct dvobj_priv *pdvobj, uint32_t addr, uint16_t val, int32_t *err) -{ - uint8_t bMacPwrCtrlOn = _FALSE; - uint8_t cmd52_io = 0; - ADAPTER *Adapter = pdvobj->if1; - -_func_enter_; - /* we should use CMD 52 before bMacPwrCtrlOn */ - rtw_hal_get_hwreg(Adapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn); - cmd52_io = !bMacPwrCtrlOn; -#ifdef SDIO_CMD52_IO - cmd52_io = 1; -#endif - if (cmd52_io) { - val = cpu_to_le16(val); - sdio_cmd52_write(Adapter, addr, 2, (uint8_t*)&val, err); - return _SUCCESS; - } - - sdio_write16(Adapter, addr, (uint32_t)val, err); - -_func_exit_; - - return _SUCCESS; -} - -int32_t _sdio_write32(struct dvobj_priv *pdvobj, uint32_t addr, uint32_t val, int32_t *err) -{ - uint8_t bMacPwrCtrlOn = _FALSE; - uint8_t cmd52_io = 0; - ADAPTER *Adapter = pdvobj->if1; - -_func_enter_; - /* we should use CMD 52 before bMacPwrCtrlOn */ - rtw_hal_get_hwreg(Adapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn); - cmd52_io = !bMacPwrCtrlOn; -#ifdef SDIO_CMD52_IO - cmd52_io = 1; -#endif - if (cmd52_io) { - val = cpu_to_le32(val); - sdio_cmd52_write(Adapter, addr, 4, (uint8_t*)&val, err); - return _SUCCESS; - } - - sdio_write32(Adapter, addr, val, err); - -_func_exit_; - - return _SUCCESS; -} - -/* - * Description: - * Read from RX FIFO - * Round read size to block size, - * and make sure data transfer will be done in one command. - * - * Parameters: - * pintfhdl a pointer of intf_hdl - * addr port ID - * cnt size to read - * rmem address to put data - * - * Return: - * _SUCCESS(1) Success - * _FAIL(0) Fail - */ -static int _sdio_read_rx_fifo(struct dvobj_priv *pdvobj, uint32_t addr, uint8_t *mem, uint32_t cnt, struct fifo_more_data *pmore_data) -{ - ADAPTER *Adapter = pdvobj->if1; - - //struct spi_more_data more_data = {0}; - - //DBG_8192C("%s \n", __func__); - rtw_memset(pmore_data, 0, sizeof(struct fifo_more_data)); - - sdio_read_rx_fifo(Adapter, mem, cnt); - - return _SUCCESS; -} - -/* - * Description: - * Translate sdio fifo address to Domain ID in each WLAN FIFO - */ -static uint32_t hwaddr2txfifo(uint32_t addr) -{ - uint32_t fifo_domain_id; - switch (addr) - { - case WLAN_TX_HIQ_DEVICE_ID: - fifo_domain_id = TX_HIQ_DOMAIN; - break; - - case WLAN_TX_MIQ_DEVICE_ID: - fifo_domain_id = TX_MIQ_DOMAIN; - break; - - case WLAN_TX_LOQ_DEVICE_ID: - fifo_domain_id = TX_LOQ_DOMAIN; - break; - default: - fifo_domain_id = TX_LOQ_DOMAIN; - break; - } - - return fifo_domain_id; -} - - -static int _sdio_write_tx_fifo(struct dvobj_priv *pdvobj, uint32_t addr, uint8_t *mem, uint32_t cnt) -{ - uint8_t remain_len = 0; - uint32_t w_sz = cnt; - ADAPTER *Adapter = pdvobj->if1; - - remain_len = w_sz%4; - if (remain_len != 0) - w_sz += 4 -remain_len; - -#if 0//ndef LZM_TEST - if (1) { - int i = 0; - for(i = 0; i < w_sz; i += 4) { - DBG_871X("_sdio_write_port[%d]: 0x%08x ", i, *(uint32_t*)(mem + i)); - } - } -#endif - -#if 0 - { - static uint32_t write_test = 0; - uint32_t now_time = 0; - write_test++; - if(write_test==1000) { - now_time = xTaskGetTickCount() * portTICK_RATE_MS; - DBG_8192C("%s fifo:%d cnt:%d w_sz:%d mem:%p, now time:%d\n", __func__, addr, cnt, w_sz, mem, now_time); - write_test = 0; - } - } -#endif - sdio_write_tx_fifo(Adapter, mem, w_sz, hwaddr2txfifo(addr)); - - return _SUCCESS; -} - -static int sdio_io_priv(struct dvobj_priv *pdvobj) -{ - ADAPTER *Adapter = pdvobj->if1; - //struct dvobj_priv *pdvobj = &Adapter->dvobjpriv; - - return _SUCCESS; -} - -void sdio_set_intf_ops(struct _io_ops *pops) -{ - pops->init_io_priv = &sdio_io_priv; - pops->write8_endian = NULL; - - pops->_read8 = &_sdio_read8; - pops->_read16 = &_sdio_read16; - pops->_read32 = &_sdio_read32; - - pops->_write8 = &_sdio_write8; - pops->_write16 = &_sdio_write16; - pops->_write32 = &_sdio_write32; - - pops->read_rx_fifo = &_sdio_read_rx_fifo; - pops->write_tx_fifo = &_sdio_write_tx_fifo; -} - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/sdio/sdio_intf.c b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/sdio/sdio_intf.c deleted file mode 100644 index 742b190..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/sdio/sdio_intf.c +++ /dev/null @@ -1,264 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#define _GSPI_INTF_C_ - -#include - -#ifdef CONFIG_SDIO_HCI -#include "wifi_io.h" //from sdio_driver - -#ifndef CONFIG_SDIO_HCI -#error "CONFIG_SDIO_HCI should be on!\n" -#endif - -struct dvobj_priv *gspi_dvobj_init(void) -{ -// int status = _FAIL; - struct dvobj_priv *dvobj = NULL; - PGSPI_DATA pgspi_data; - -_func_enter_; - - dvobj = (struct dvobj_priv*)rtw_zmalloc(sizeof(*dvobj)); - if (NULL == dvobj) { - goto exit; - } - - pgspi_data = &dvobj->intf_data; - - rtw_mutex_init(&pgspi_data->spi_mutex); - //pgspi_data->block_transfer_len = 512; //512 blocks r/w is not required for GSPI interface - //pgspi_data->tx_block_mode = 0; - //pgspi_data->rx_block_mode = 0; - -// status = _SUCCESS; - - if(wifi_sdio_func) { - DBG_871X("[gspi_dvobj_init] get wifi_func:%p\n", wifi_sdio_func); - dvobj->intf_data.func = wifi_sdio_func; - } else { - DBG_871X("[gspi_dvobj_init] Oops: get wifi sdio function fail"); - } - -exit: -_func_exit_; - - return dvobj; -} - -void gspi_dvobj_deinit(struct dvobj_priv *dvobj) -{ -//TODO -// struct dvobj_priv *dvobj = spi_get_drvdata(spi); - -_func_enter_; -//TODO -// spi_set_drvdata(spi, NULL); - if (dvobj) { -//TODO -// gspi_deinit(dvobj); - rtw_mutex_free(&dvobj->intf_data.spi_mutex); - rtw_mfree((uint8_t*)dvobj, sizeof(*dvobj)); - } - -_func_exit_; -} - -void sdio_dvobj_interrupt_entry(struct sdio_func *func) -{ - //DBG_871X("[sdio_wifi_interrupt_entry] func :%p\n", func); - - //sdio irq have claim host, we should release it - //and claim it after SDIO IO, or SDIO IO will deadlock - rtw_sdio_bus_ops.release_host(func); - rtw_hci_interrupt_handler(func->drv_priv); - rtw_sdio_bus_ops.claim_host(func); -} - -void sdio_dvobj_request_irq(struct dvobj_priv *dvobj) -{ -_func_enter_; - if(dvobj->intf_data.func) { - dvobj->intf_data.func->drv_priv = (void*)dvobj->if1; - - rtw_sdio_bus_ops.claim_host(dvobj->intf_data.func); - rtw_sdio_bus_ops.claim_irq(dvobj->intf_data.func, sdio_dvobj_interrupt_entry); - rtw_sdio_bus_ops.release_host(dvobj->intf_data.func); - } - -_func_exit_; -} - -void sdio_dvobj_free_irq(struct dvobj_priv *dvobj) -{ -_func_enter_; - if(dvobj->intf_data.func) { - dvobj->intf_data.func->drv_priv = (void*)dvobj->if1; - - rtw_sdio_bus_ops.claim_host(dvobj->intf_data.func); - rtw_sdio_bus_ops.release_irq(dvobj->intf_data.func); - rtw_sdio_bus_ops.release_host(dvobj->intf_data.func); - } - -_func_exit_; -} - - -static inline uint32_t ffaddr2deviceId(struct dvobj_priv *pdvobj, uint32_t addr) -{ - return pdvobj->Queue2Pipe[addr]; -} - -static int32_t rtw_xmit_xmitbuf(_adapter * padapter, struct xmit_buf *pxmitbuf) -{ - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; - struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter); - uint32_t deviceId; - - RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, ("@@@rtw_xmit_xmitbuf(): pxmitbuf->len=%d\n", pxmitbuf->len)); - //translate queue index to Device Id - deviceId = ffaddr2deviceId(pdvobjpriv, pxmitbuf->ff_hwaddr); - - rtw_write_port(padapter, deviceId, pxmitbuf->len, (uint8_t*)pxmitbuf->pbuf); - - rtw_free_xmitbuf(pxmitpriv, pxmitbuf); - return _SUCCESS; -} - -int32_t sdio_dvobj_xmit_mgnt(_adapter * padapter, struct xmit_frame *pmgntframe) -{ - int32_t ret = _SUCCESS; - struct pkt_attrib *pattrib; - struct xmit_buf *pxmitbuf; - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); - struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter); - uint8_t *pframe = NULL; - - RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, ("+rtw_xmit_mgnt()\n")); - - pattrib = &pmgntframe->attrib; - pxmitbuf = pmgntframe->pxmitbuf; - pframe = (uint8_t *)(pmgntframe->buf_addr) + TXDESC_OFFSET; - - //rtw_hal_update_txdesc(padapter, pmgntframe, pmgntframe->buf_addr); - - pxmitbuf->len = TXDESC_SIZE + pattrib->last_txcmdsz; - //pxmitbuf->pg_num = (pxmitbuf->len + 127)/128; // 128 is tx page size - //pxmitbuf->ptail = pmgntframe->buf_addr + pxmitbuf->len; - pxmitbuf->ff_hwaddr = rtw_get_ff_hwaddr(pmgntframe); - - rtw_count_tx_stats(padapter, pmgntframe, pattrib->last_txcmdsz); - - //RT_TRACE(_module_rtl871x_xmit_c_, _drv_always_, ("+rtw_xmit_mgnt(): type=%d\n", GetFrameSubType(pframe))); - if(GetFrameSubType(pframe)==WIFI_BEACON) //dump beacon directly - { -//When using dedicated xmit frame for issue bcn on ap mode -//free xmit frame for bcn reserved page on station mode - Alex Fang -#if USE_DEDICATED_BCN_TX - if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE) { - rtw_free_xmitframe(pxmitpriv, pmgntframe); - pxmitbuf->priv_data = NULL; - } - rtw_write_port(padapter, ffaddr2deviceId(pdvobjpriv, pxmitbuf->ff_hwaddr), pxmitbuf->len, pxmitbuf->pbuf); - - if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE) - rtw_free_xmitbuf(pxmitpriv, pxmitbuf); -#else - rtw_free_xmitframe(pxmitpriv, pmgntframe); - pxmitbuf->priv_data = NULL; - rtw_xmit_xmitbuf(padapter, pxmitbuf); -#endif - } - else - { - rtw_free_xmitframe(pxmitpriv, pmgntframe); - pxmitbuf->priv_data = NULL; - rtw_xmit_xmitbuf(padapter, pxmitbuf); - } - - if (ret != _SUCCESS) - rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_UNKNOWN); - - RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, ("-rtw_xmit_mgnt\n")); - return ret; -} - -int32_t sdio_dvobj_xmit_data(_adapter *padapter, struct xmit_frame *pxmitframe) -{ - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; - _irqL irql; - int32_t err; - -#ifdef CONFIG_80211N_HT - if ((pxmitframe->frame_tag == DATA_FRAMETAG) && - (pxmitframe->attrib.ether_type != 0x0806) && - (pxmitframe->attrib.ether_type != 0x888e) && - (pxmitframe->attrib.dhcp_pkt != 1)) - { - if (padapter->mlmepriv.LinkDetectInfo.bBusyTraffic == _TRUE) - rtw_issue_addbareq_cmd(padapter, pxmitframe); - } -#endif - -#if USE_SKB_AS_XMITBUF - rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe); -#endif - - rtw_enter_critical_bh(&pxmitpriv->lock, &irql); -#if 1 //FIX_XMITFRAME_FAULT, move from rtw_xmit(). -#ifdef CONFIG_AP_MODE - if(xmitframe_enqueue_for_sleeping_sta(padapter, pxmitframe) == _TRUE) - { - rtw_exit_critical_bh(&pxmitpriv->lock, &irql); - return 1; - } -#endif -#endif - err = rtw_xmitframe_enqueue(padapter, pxmitframe); - rtw_exit_critical_bh(&pxmitpriv->lock, &irql); - - if (err != _SUCCESS) { - RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_, ("rtw_xmit_data(): enqueue xmitframe fail\n")); - rtw_free_xmitframe(pxmitpriv, pxmitframe); - - // Trick, make the statistics correct - pxmitpriv->tx_pkts--; - pxmitpriv->tx_drop++; - return _TRUE; - } -#ifdef CONFIG_CONCURRENT_MODE - if (padapter->adapter_type > PRIMARY_ADAPTER){ - padapter = padapter->pbuddy_adapter; - } -#endif - - rtw_wakeup_task(&padapter->xmitThread); - - return _FALSE; -} - -const struct host_ctrl_intf_ops hci_ops = { - gspi_dvobj_init, - gspi_dvobj_deinit, - sdio_dvobj_request_irq, - sdio_dvobj_free_irq -}; -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/sdio/sdio_isr.c b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/sdio/sdio_isr.c deleted file mode 100644 index 31268ee..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/sdio/sdio_isr.c +++ /dev/null @@ -1,223 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - *******************************************************************************/ -#define _GSPI_ISR_C_ - -#include - -#ifdef CONFIG_SDIO_HCI -extern struct recv_buf* rtw_recv_rxfifo(_adapter * padapter, uint32_t size, struct fifo_more_data* more_data); - -void spi_int_dpc(PADAPTER padapter, uint32_t sdio_hisr) -{ - struct dvobj_priv *pdvobj = padapter->dvobj; - -#ifdef CONFIG_LPS_LCLK - if (sdio_hisr & HCI_HISR_CPWM1) - { - struct reportpwrstate_parm report; - - report.state = rtw_read8(padapter, LOCAL_REG_HCPWM1); - cpwm_int_hdl(padapter, &report); - } -#endif - - if (sdio_hisr & HCI_HISR_TXERR) - { - uint32_t status; - - status = rtw_read32(padapter, REG_TXDMA_STATUS); - rtw_write32(padapter, REG_TXDMA_STATUS, status); - RT_TRACE(_module_hci_ops_c_, _drv_info_, ("%s: SDIO_HISR_TXERR (0x%08x)\n", __func__, status)); - } - -#ifdef CONFIG_INTERRUPT_BASED_TXBCN - - #ifdef CONFIG_INTERRUPT_BASED_TXBCN_EARLY_INT - if (sdio_hisr & HCI_HISR_BCNERLY_INT) - #endif - #ifdef CONFIG_INTERRUPT_BASED_TXBCN_BCN_OK_ERR - if (sdio_hisr & (HCI_HISR_TXBCNOK|HCI_HISR_TXBCNERR)) - #endif - { - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - - #if 0 //for debug - if (sdio_hisr & SDIO_HISR_BCNERLY_INT) - DBG_8192C("%s: SDIO_HISR_BCNERLY_INT\n", __func__); - - if (sdio_hisr & SDIO_HISR_TXBCNOK) - DBG_8192C("%s: SDIO_HISR_TXBCNOK\n", __func__); - - if (sdio_hisr & SDIO_HISR_TXBCNERR) { - u1Byte v422, v550, v419; - v422 = rtw_read8(padapter, 0x422); - v419 = rtw_read8(padapter, 0x419); - v550 = rtw_read8(padapter, 0x550); - - DBG_8192C("%s: SDIO_HISR_TXBCNERR 422=%02x, 419=%02x, 550=%02x\n", __func__, v422, v419, v550); - } - #endif - - if(check_fwstate(pmlmepriv, WIFI_AP_STATE)) - { - //send_beacon(padapter); - if(pmlmepriv->update_bcn == _TRUE) - { - //tx_beacon_hdl(padapter, NULL); - set_tx_beacon_cmd(padapter); - } - } - -#ifdef CONFIG_CONCURRENT_MODE - if(check_buddy_fwstate(padapter, WIFI_AP_STATE)) - { - //send_beacon(padapter); - if(padapter->pbuddy_adapter->mlmepriv.update_bcn == _TRUE) - { - //tx_beacon_hdl(padapter, NULL); - set_tx_beacon_cmd(padapter->pbuddy_adapter); - } - } -#endif - } -#endif //CONFIG_INTERRUPT_BASED_TXBCN - - if (sdio_hisr & HCI_HISR_C2HCMD) - { - RT_TRACE(_module_hci_ops_c_, _drv_info_, ("%s: C2H Command\n", __func__)); -//TODO -// rtw_c2h_wk_cmd(padapter); - } - - if (sdio_hisr & HCI_HISR_RX_REQUEST)// || sdio_hisr & SPI_HISR_RXFOVW) - { - struct recv_buf *precvbuf; - struct fifo_more_data more_data = {0}; - - //RT_TRACE(_module_hci_ops_c_,_drv_info_, ("%s: RX Request, size=%d\n", __func__, pdvobj->SdioRxFIFOSize)); - - sdio_hisr ^= HCI_HISR_RX_REQUEST; - - do { - more_data.more_data = 0; - more_data.len = 0; - - if (pdvobj->SdioRxFIFOSize == 0) - { - uint16_t val = 0; - //int32_t ret; //LZM_TODO - - RT_TRACE(_module_hci_ops_c_, _drv_info_, ("%s, %d, read RXFIFOsize again size=%d\n", __FUNCTION__, __LINE__, pdvobj->SdioRxFIFOSize)); - - val = rtw_read16(padapter, LOCAL_REG_RX0_REQ_LEN_1_BYTE); - //if (!ret) { - pdvobj->SdioRxFIFOSize = val; - RT_TRACE(_module_hci_ops_c_, _drv_info_, ("%s: RX_REQUEST, read RXFIFOsize again size=%d\n", __func__, pdvobj->SdioRxFIFOSize)); - //} else { - // RT_TRACE(_module_hci_ops_c_, _drv_info_, ("%s: RX_REQUEST, read RXFIFOsize ERROR!!\n", __func__)); - //} - RT_TRACE(_module_hci_ops_c_, _drv_info_, ("%s, %d, read RXFIFOsize again size=%d\n", __FUNCTION__, __LINE__, pdvobj->SdioRxFIFOSize)); - } - - if (pdvobj->SdioRxFIFOSize != 0) - { -#ifdef RTL8723A_SDIO_LOOPBACK - sd_recv_loopback(padapter, pdvobj->SdioRxFIFOSize); -#else - if (sdio_hisr & HCI_HISR_RXFOVW) - RT_TRACE(_module_hci_ops_c_, _drv_info_, ("%s RXFOVW RX\n", __func__)); - - precvbuf = rtw_recv_rxfifo(padapter, pdvobj->SdioRxFIFOSize, &more_data); - if (precvbuf) - rtw_rxhandler(padapter, precvbuf); - - if (more_data.more_data) { - pdvobj->SdioRxFIFOSize = more_data.len; - } else { - pdvobj->SdioRxFIFOSize = 0; - } -#endif - //If Rx_request ISR is set, execute receive tasklet (sdio_hisr & SPI_HISR_RX_REQUEST) -#if defined(CONFIG_ISR_THREAD_MODE_INTERRUPT) && defined(CONFIG_RECV_TASKLET_THREAD) - rtw_wakeup_task(&padapter->recvtasklet_thread); -#endif - } - -#ifdef CONFIG_INTERRUPT_BASED_TXBCN -{ - //Prevent BCN update not realtime in ap mode - Alex Fang - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; - - if((check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) && (pmlmepriv->update_bcn == _TRUE)) - break; -} -#endif - } while (more_data.more_data || pdvobj->SdioRxFIFOSize); -#ifdef PLATFORM_LINUX -#ifdef CONFIG_GSPI_HCI - tasklet_schedule(&padapter->recvpriv.recv_tasklet); -#endif -#endif - } -} - - -void spi_int_hdl(PADAPTER padapter) -{ - struct dvobj_priv *pdvobj = padapter->dvobj; - uint32_t sdio_hisr = 0; - //int32_t ret; - - if ((padapter->bDriverStopped == _TRUE) || - (padapter->bSurpriseRemoved == _TRUE)) - return; - - sdio_hisr = rtw_read32(padapter, LOCAL_REG_HISR);//, &ret); - //if (!ret) { - // RT_TRACE(_module_hci_ops_c_, _drv_err_, ("%s: read SDIO_REG_HISR FAIL!!\n", __func__)); - // return; - //} - pdvobj->SdioRxFIFOSize = rtw_read16(padapter, LOCAL_REG_RX0_REQ_LEN_1_BYTE);//, &ret); - - //if (!ret) { - // RT_TRACE(_module_hci_ops_c_, _drv_err_, ("%s: read SPI_REG_RX0_REQ_LEN FAIL!!\n", __func__)); - // return; - //} - - if (sdio_hisr & pdvobj->sdio_himr) - { - uint32_t v32; - - sdio_hisr &= pdvobj->sdio_himr; - - // clear HISR - v32 = sdio_hisr & MASK_SPI_HISR_CLEAR; - if (v32) { - rtw_write32(padapter, LOCAL_REG_HISR, v32);//, &ret); - } - - spi_int_dpc(padapter, sdio_hisr); - } else { - //RT_TRACE(_module_hci_ops_c_, _drv_err_, - // ("%s: HISR(0x%08x) and HIMR(0x%08x) not match!\n", - // __FUNCTION__, sdio_hisr, pdvobj->sdio_himr)); - } -} - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/sdio/sdio_spec.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/sdio/sdio_spec.h deleted file mode 100644 index d8d7b7c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/hci/sdio/sdio_spec.h +++ /dev/null @@ -1,193 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - *******************************************************************************/ - -#ifndef __GSDIO_SPEC_H__ -#define __GSDIO_SPEC_H__ - - -#define SPI_LOCAL_DOMAIN 0x0 -#define WLAN_IOREG_DOMAIN 0x8 -#define FW_FIFO_DOMAIN 0x4 -#define TX_HIQ_DOMAIN 0xc -#define TX_MIQ_DOMAIN 0xd -#define TX_LOQ_DOMAIN 0xe -#define RX_RXFIFO_DOMAIN 0x1f - -//IO Bus domain address mapping -#define DEFUALT_OFFSET 0x0 -#define SPI_LOCAL_OFFSET 0x10250000 -#define WLAN_IOREG_OFFSET 0x10260000 -#define FW_FIFO_OFFSET 0x10270000 -#define TX_HIQ_OFFSET 0x10310000 -#define TX_MIQ_OFFSET 0x1032000 -#define TX_LOQ_OFFSET 0x10330000 -#define RX_RXOFF_OFFSET 0x10340000 - -#define WLAN_TX_HIQ_DEVICE_ID 4 // 0b[16], 100b[15:13] -#define WLAN_TX_MIQ_DEVICE_ID 5 // 0b[16], 101b[15:13] -#define WLAN_TX_LOQ_DEVICE_ID 6 // 0b[16], 110b[15:13] -#define WLAN_TX_EXQ_DEVICE_ID 3 // 0b[16], 011b[15:13] -#define WLAN_RX0FF_DEVICE_ID 7 // 0b[16], 111b[15:13] -#define WLAN_IOREG_DEVICE_ID 8 // 1b[16] - -//SPI Tx Free Page Index -#define HI_QUEUE_IDX 0 -#define MID_QUEUE_IDX 1 -#define LOW_QUEUE_IDX 2 -#define PUBLIC_QUEUE_IDX 3 - -#define MAX_TX_QUEUE 3 // HIQ, MIQ and LOQ -#define MAX_RX_QUEUE 1 - -//SPI Local registers -#define SPI_REG_TX_CTRL (SPI_LOCAL_OFFSET | 0x0000) // SPI Tx Control -#define SPI_REG_STATUS_RECOVERY (SPI_LOCAL_OFFSET | 0x0004) -#define SPI_REG_INT_TIMEOUT (SPI_LOCAL_OFFSET | 0x0006) -#define SPI_REG_HIMR (SPI_LOCAL_OFFSET | 0x0014) // SPI Host Interrupt Mask -#define SPI_REG_HISR (SPI_LOCAL_OFFSET | 0x0018) // SPI Host Interrupt Service Routine -#define SPI_REG_RX0_REQ_LEN (SPI_LOCAL_OFFSET | 0x001C) // RXDMA Request Length -#define SPI_REG_FREE_TXPG (SPI_LOCAL_OFFSET | 0x0020) // Free Tx Buffer Page -#define SPI_REG_HCPWM1 (SPI_LOCAL_OFFSET | 0x0024) // HCI Current Power Mode 1 -#define SPI_REG_HCPWM2 (SPI_LOCAL_OFFSET | 0x0026) // HCI Current Power Mode 2 -#define SPI_REG_HTSFR_INFO (SPI_LOCAL_OFFSET | 0x0030) // HTSF Informaion -#define SPI_REG_HRPWM1 (SPI_LOCAL_OFFSET | 0x0080) // HCI Request Power Mode 1 -#define SPI_REG_HRPWM2 (SPI_LOCAL_OFFSET | 0x0082) // HCI Request Power Mode 2 -#define SPI_REG_HPS_CLKR (SPI_LOCAL_OFFSET | 0x0084) // HCI Power Save Clock -#define SPI_REG_HSUS_CTRL (SPI_LOCAL_OFFSET | 0x0086) // SPI HCI Suspend Control -#define SPI_REG_HIMR_ON (SPI_LOCAL_OFFSET | 0x0090) //SPI Host Extension Interrupt Mask Always -#define SPI_REG_HISR_ON (SPI_LOCAL_OFFSET | 0x0091) //SPI Host Extension Interrupt Status Always -#define SPI_REG_CFG (SPI_LOCAL_OFFSET | 0x00F0) //SPI Configuration Register - -#define LOCAL_REG_TX_CTRL (SPI_REG_TX_CTRL |SPI_LOCAL_OFFSET) -#define LOCAL_REG_STATUS_RECOVERY (SPI_REG_STATUS_RECOVERY |SPI_LOCAL_OFFSET) -#define LOCAL_REG_INT_TIMEOUT (SPI_REG_INT_TIMEOUT |SPI_LOCAL_OFFSET) -#define LOCAL_REG_HIMR (SPI_REG_HIMR |SPI_LOCAL_OFFSET) -#define LOCAL_REG_HISR (SPI_REG_HISR |SPI_LOCAL_OFFSET) -#define LOCAL_REG_RX0_REQ_LEN_1_BYTE (SPI_REG_RX0_REQ_LEN |SPI_LOCAL_OFFSET) -#define LOCAL_REG_FREE_TXPG (SPI_REG_FREE_TXPG |SPI_LOCAL_OFFSET) -#define LOCAL_REG_HRPWM1 (SPI_REG_HRPWM1 |SPI_LOCAL_OFFSET) -#define LOCAL_REG_HCPWM1 (SPI_REG_HCPWM1 |SPI_LOCAL_OFFSET) - -#define HCI_HIMR_DISABLED 0 - -//SPI HIMR MASK diff with SDIO -#define HCI_HISR_RX_REQUEST BIT(0) -#define HCI_HISR_AVAL BIT(1) -#define HCI_HISR_TXERR BIT(2) -#define HCI_HISR_RXERR BIT(3) -#define HCI_HISR_TXFOVW BIT(4) -#define HCI_HISR_RXFOVW BIT(5) -#define HCI_HISR_TXBCNOK BIT(6) -#define HCI_HISR_TXBCNERR BIT(7) -#define HCI_HISR_BCNERLY_INT BIT(16) -#define HCI_HISR_C2HCMD BIT(17) -#define HCI_HISR_CPWM1 BIT(18) -#define HCI_HISR_CPWM2 BIT(19) -#define HCI_HISR_HSISR_IND BIT(20) -#define HCI_HISR_GTINT3_IND BIT(21) -#define HCI_HISR_GTINT4_IND BIT(22) -#define HCI_HISR_PSTIMEOUT BIT(23) -#define HCI_HISR_OCPINT BIT(24) -#define HCI_HISR_ATIMEND BIT(25) -#define HCI_HISR_ATIMEND_E BIT(26) -#define HCI_HISR_CTWEND BIT(27) - -//SPI HIMR MASK diff with SDIO -#define HCI_HIMR_RX_REQUEST BIT(0) -#define HCI_HIMR_AVAL BIT(1) -#define HCI_HIMR_TXERR BIT(2) -#define HCI_HIMR_RXERR BIT(3) -#define HCI_HIMR_TXFOVW BIT(4) -#define HCI_HIMR_RXFOVW BIT(5) -#define HCI_HIMR_TXBCNOK BIT(6) -#define HCI_HIMR_TXBCNERR BIT(7) -#define HCI_HIMR_BCNERLY_INT BIT(16) -#define HCI_HIMR_ATIMEND BIT(17) -#define HCI_HIMR_ATIMEND_E BIT(18) -#define HCI_HIMR_CTWEND BIT(19) -#define HCI_HIMR_C2HCMD BIT(20) -#define HCI_HIMR_CPWM1 BIT(21) -#define HCI_HIMR_CPWM2 BIT(22) -#define HCI_HIMR_HSISR_IND BIT(23) -#define HCI_HIMR_GTINT3_IND BIT(24) -#define HCI_HIMR_GTINT4_IND BIT(25) -#define HCI_HIMR_PSTIMEOUT BIT(26) -#define HCI_HIMR_OCPINT BIT(27) -#define HCI_HIMR_TSF_BIT32_TOGGLE BIT(29) - -#define MASK_SPI_HISR_CLEAR (HCI_HIMR_TXERR |\ - HCI_HIMR_RXERR |\ - HCI_HIMR_TXFOVW |\ - HCI_HIMR_RXFOVW |\ - HCI_HIMR_TXBCNOK |\ - HCI_HIMR_TXBCNERR |\ - HCI_HIMR_C2HCMD |\ - HCI_HIMR_CPWM1 |\ - HCI_HIMR_CPWM2 |\ - HCI_HIMR_HSISR_IND |\ - HCI_HIMR_GTINT3_IND |\ - HCI_HIMR_GTINT4_IND |\ - HCI_HIMR_PSTIMEOUT |\ - HCI_HIMR_OCPINT) - -#define REG_LEN_FORMAT(pcmd, x) SET_BITS_TO_LE_4BYTE(pcmd, 0, 8, x)//(x<<(unsigned int)24) -#define REG_ADDR_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 8, 16, x)//(x<<(unsigned int)16) -#define REG_DOMAIN_ID_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 24, 5, x)//(x<<(unsigned int)0) -#define REG_FUN_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 29, 2, x)//(x<<(unsigned int)5) -#define REG_RW_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 31, 1, x)//(x<<(unsigned int)7) - -#define FIFO_LEN_FORMAT(pcmd, x) SET_BITS_TO_LE_4BYTE(pcmd, 0, 16, x)//(x<<(unsigned int)24) -//#define FIFO_ADDR_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 8, 16, x)//(x<<(unsigned int)16) -#define FIFO_DOMAIN_ID_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 24, 5, x)//(x<<(unsigned int)0) -#define FIFO_FUN_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 29, 2, x)//(x<<(unsigned int)5) -#define FIFO_RW_FORMAT(pcmd,x) SET_BITS_TO_LE_4BYTE(pcmd, 31, 1, x)//(x<<(unsigned int)7) - - -//get status dword0 -#define GET_STATUS_PUB_PAGE_NUM(status) LE_BITS_TO_4BYTE(status, 24, 8) -#define GET_STATUS_HI_PAGE_NUM(status) LE_BITS_TO_4BYTE(status, 18, 6) -#define GET_STATUS_MID_PAGE_NUM(status) LE_BITS_TO_4BYTE(status, 12, 6) -#define GET_STATUS_LOW_PAGE_NUM(status) LE_BITS_TO_4BYTE(status, 6, 6) -#define GET_STATUS_HISR_HI6BIT(status) LE_BITS_TO_4BYTE(status, 0, 6) - -//get status dword1 -#define GET_STATUS_HISR_MID8BIT(status) LE_BITS_TO_4BYTE(status + 4, 24, 8) -#define GET_STATUS_HISR_LOW8BIT(status) LE_BITS_TO_4BYTE(status + 4, 16, 8) -#define GET_STATUS_ERROR(status) LE_BITS_TO_4BYTE(status + 4, 17, 1) -#define GET_STATUS_INT(status) LE_BITS_TO_4BYTE(status + 4, 16, 1) -#define GET_STATUS_RX_LENGTH(status) LE_BITS_TO_4BYTE(status + 4, 0, 16) - - -#define RXDESC_SIZE 24 - -#define TX_FREE_PG_QUEUE 4 // The number of Tx FIFO free page -#define TX_FIFO_PAGE_SZ 128 - -struct spi_more_data { - unsigned long more_data; - unsigned long len; -}; - -extern BUS_DRV_OPS_T bus_driver_ops; - -extern uint8_t spi_query_status_info(struct dvobj_priv *pdvobj); - -extern void sdio_set_intf_ops(struct _io_ops *pops); - -#endif //__GSPI_SPEC_H__ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/freertos_intfs.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/freertos_intfs.h deleted file mode 100644 index 5c8cd28..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/freertos_intfs.h +++ /dev/null @@ -1,161 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __FREERTOS_INTFS_H_ -#define __FREERTOS_INTFS_H_ - -//TODO -#if 0 - -struct intf_priv { - - uint8_t *intf_dev; - uint32_t max_iosz; //USB2.0: 128, USB1.1: 64, SDIO:64 - uint32_t max_xmitsz; //USB2.0: unlimited, SDIO:512 - uint32_t max_recvsz; //USB2.0: unlimited, SDIO:512 - - volatile uint8_t *io_rwmem; - volatile uint8_t *allocated_io_rwmem; - uint32_t io_wsz; //unit: 4bytes - uint32_t io_rsz;//unit: 4bytes - uint8_t intf_status; - - void (*_bus_io)(uint8_t *priv); - -/* -Under Sync. IRP (SDIO/USB) -A protection mechanism is necessary for the io_rwmem(read/write protocol) - -Under Async. IRP (SDIO/USB) -The protection mechanism is through the pending queue. -*/ - - _mutex ioctl_mutex; - - -#ifdef PLATFORM_LINUX - #ifdef CONFIG_USB_HCI - // when in USB, IO is through interrupt in/out endpoints - struct usb_device *udev; - PURB piorw_urb; - uint8_t io_irp_cnt; - uint8_t bio_irp_pending; - _sema io_retevt; - _timer io_timer; - uint8_t bio_irp_timeout; - uint8_t bio_timer_cancel; - #endif -#endif - -#ifdef PLATFORM_OS_XP - #ifdef CONFIG_SDIO_HCI - // below is for io_rwmem... - PMDL pmdl; - PSDBUS_REQUEST_PACKET sdrp; - PSDBUS_REQUEST_PACKET recv_sdrp; - PSDBUS_REQUEST_PACKET xmit_sdrp; - - PIRP piorw_irp; - - #endif - #ifdef CONFIG_USB_HCI - PURB piorw_urb; - PIRP piorw_irp; - uint8_t io_irp_cnt; - uint8_t bio_irp_pending; - _sema io_retevt; - #endif -#endif - -}; - - -#ifdef CONFIG_R871X_TEST -int rtw_start_pseudo_adhoc(_adapter *padapter); -int rtw_stop_pseudo_adhoc(_adapter *padapter); -#endif - -#endif //#if 0 - -typedef struct _driver_priv { - int drv_registered; - - _mutex hw_init_mutex; -#if defined(CONFIG_CONCURRENT_MODE) || defined(CONFIG_DUALMAC_CONCURRENT) - //global variable - _mutex h2c_fwcmd_mutex; - _mutex setch_mutex; - _mutex setbw_mutex; -#endif -} drv_priv, *pdrv_priv; - - -struct net_device *rtw_init_netdev(_adapter *padapter); -void rtw_os_indicate_disconnect( _adapter *adapter ); - -#ifdef CONFIG_PROC_DEBUG -void rtw_proc_init_one(struct net_device *dev); -void rtw_proc_remove_one(struct net_device *dev); -#else -//static void should be declared in .c file -//proc is not supported in freertos -//static void rtw_proc_init_one(struct net_device *dev){} -//static void rtw_proc_remove_one(struct net_device *dev){} -#define rtw_proc_init_one(dev) -#define rtw_proc_remove_one(dev) -#endif - -extern int rtw_set_wpa_ie(_adapter *padapter, char *pie, unsigned short ielen); -extern void rtw_os_indicate_connect(_adapter *adapter); -extern void indicate_wx_custom_event(_adapter *padapter, char *msg); -extern int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname); -extern void netdev_lwip_post_sleep_processing(void); -extern void wireless_send_event(struct net_device *dev, unsigned int cmd, union iwreq_data *wrqu, char *extra); - -#ifdef CONFIG_CONCURRENT_MODE -struct _io_ops; -_adapter *rtw_drv_if2_init(_adapter *primary_padapter, char *name, void (*set_intf_ops)(struct _io_ops *pops)); -void rtw_drv_if2_free(_adapter *pbuddy_padapter); -#endif - -#if defined(CONFIG_ISR_THREAD_MODE_POLLING) || defined(CONFIG_ISR_THREAD_MODE_INTERRUPT) -extern thread_return rtw_interrupt_thread(thread_context context); -#endif - -#ifdef CONFIG_RECV_TASKLET_THREAD -extern thread_return rtw_recv_tasklet(thread_context context); -#endif - -#ifdef CONFIG_XMIT_TASKLET_THREAD -extern thread_return rtw_xmit_tasklet(thread_context context); -#endif - -extern struct net_device *rtw_drv_probe(struct net_device* parent_dev, uint32_t mode); //Wlan driver init entry -extern void rtw_drv_entry(void); -extern void rtw_drv_halt(void); -extern int rtw_dev_remove(struct net_device *pnetdev); -extern int rtw_ioctl(struct net_device *dev, struct iwreq *rq, int cmd); - -#if defined(CONFIG_LX_HCI) -uint32_t lextra_bus_dma_Interrupt (void* data); -#endif - -#endif //__FREERTOS_INTFS_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/freertos_recv.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/freertos_recv.h deleted file mode 100644 index da56619..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/freertos_recv.h +++ /dev/null @@ -1,55 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __FREERTOS_RECV_H_ -#define __FREERTOS_RECV_H_ - -extern sint _rtw_init_recv_priv(struct recv_priv *precvpriv, _adapter *padapter); -extern void _rtw_free_recv_priv (struct recv_priv *precvpriv); - - -extern int32_t rtw_recv_entry(union recv_frame *precv_frame); -extern int rtw_recv_indicatepkt(_adapter *adapter, union recv_frame *precv_frame); -extern void rtw_recv_returnpacket(IN _nic_hdl cnxt, IN _pkt *preturnedpkt); - -extern void rtw_hostapd_mlme_rx(_adapter *padapter, union recv_frame *precv_frame); -#if BAD_MIC_COUNTERMEASURE -extern void rtw_handle_tkip_mic_err(_adapter *padapter,uint8_t bgroup); -#endif - -int rtw_init_recv_priv(struct recv_priv *precvpriv, _adapter *padapter); -void rtw_free_recv_priv (struct recv_priv *precvpriv); - - -int rtw_os_recv_resource_init(struct recv_priv *precvpriv, _adapter *padapter); -int rtw_os_recv_resource_alloc(_adapter *padapter, union recv_frame *precvframe); -void rtw_os_recv_resource_free(struct recv_priv *precvpriv); - - -int rtw_os_recvbuf_resource_alloc(_adapter *padapter, struct recv_buf *precvbuf); -int rtw_os_recvbuf_resource_free(_adapter *padapter, struct recv_buf *precvbuf); - -void rtw_os_read_port(_adapter *padapter, struct recv_buf *precvbuf); - -void rtw_init_recv_timer(struct recv_reorder_ctrl *preorder_ctrl); - -void rltk_netif_rx(struct sk_buff *skb); - -#endif //__FREERTOS_RECV_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/freertos_skbuff.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/freertos_skbuff.h deleted file mode 100644 index 1daf180..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/freertos_skbuff.h +++ /dev/null @@ -1,72 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef _FREERTOS_SKBUFF_H_ -#define _FREERTOS_SKBUFF_H_ - -#if (RTL8195A_SUPPORT == 1) -// For Lextra(PCI-E like interface), RX buffer along with its skb is required to be -// pre-allocation and set into rx buffer descriptor ring during initialization. - #if (SKB_PRE_ALLOCATE_RX==1) - #define MAX_SKB_BUF_NUM (8 + 4) //tx+rx (8 + RX_Q_DESC_NUM) Reduce rx skb number due to memory limitation - #define MAX_LOCAL_SKB_NUM (10 + 18) //tx+rx - #else - #if WIFI_LOGO_CERTIFICATION - #define MAX_SKB_BUF_NUM 10 //tx+rx, ping 10k test - #elif defined(CONFIG_INIC_EN)&&(CONFIG_INIC_EN==1) //For iNIC throughput request - #define MAX_SKB_BUF_NUM 59 - #else - #define MAX_SKB_BUF_NUM 8 //tx+rx - #endif - #define MAX_LOCAL_SKB_NUM (MAX_SKB_BUF_NUM + 2) //tx+rx, +2: AP mode broadcast - #endif -#elif (RTL8711B_SUPPORT == 1) - #if (SKB_PRE_ALLOCATE_RX==1) - #define MAX_SKB_BUF_NUM (8 + 4) //tx+rx (8 + RX_Q_DESC_NUM) Reduce rx skb number due to memory limitation - #define MAX_LOCAL_SKB_NUM (10 + 18) //tx+rx - #else - #if WIFI_LOGO_CERTIFICATION - #define MAX_SKB_BUF_NUM 10 //tx+rx, ping 10k test - #elif defined(CONFIG_INIC_EN)&&(CONFIG_INIC_EN==1) //For iNIC throughput request - #define MAX_SKB_BUF_NUM 59 - #else - #define MAX_SKB_BUF_NUM 8 //tx+rx - #endif - #define MAX_LOCAL_SKB_NUM (MAX_SKB_BUF_NUM + 2) //tx+rx, +2: AP mode broadcast - #endif -#else -#ifndef CONFIG_DONT_CARE_TP -#ifndef CONFIG_HIGH_TP -#define MAX_LOCAL_SKB_NUM 10 -#define MAX_SKB_BUF_NUM 7 -#else -#define MAX_LOCAL_SKB_NUM 100 -#define MAX_SKB_BUF_NUM 100 -#endif -#else -#define MAX_LOCAL_SKB_NUM 10 -#define MAX_TX_SKB_BUF_NUM 6 -#define MAX_RX_SKB_BUF_NUM 1 -#endif -#endif - -extern int max_local_skb_num; -extern int max_skb_buf_num; - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/freertos_xmit.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/freertos_xmit.h deleted file mode 100644 index 65d93bd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/freertos_xmit.h +++ /dev/null @@ -1,62 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __FREERTOS_XMIT_H_ -#define __FREERTOS_XMIT_H_ - -struct pkt_file { - _pkt *pkt; - SIZE_T pkt_len; //the remainder length of the open_file - _buffer *cur_buffer; - uint8_t *buf_start; - uint8_t *cur_addr; - SIZE_T buf_len; -}; - -//Decrease xmit frame due to memory limitation - Alex Fang -#if USE_XMIT_EXTBUFF -#define NR_XMITFRAME 16 //NR_XMITBUFF + NR_XMIT_EXTBUFF -#else -#ifndef CONFIG_HIGH_TP -//#define NR_XMITFRAME 8 -#define NR_XMITFRAME 6 //Decrease recv frame due to memory limitation - YangJue -#else -#define NR_XMITFRAME 100 -#endif -#endif - -extern int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev); -extern void rtw_os_xmit_schedule(_adapter *padapter); - -extern int rtw_os_xmit_resource_alloc(_adapter *padapter, struct xmit_buf *pxmitbuf,uint32_t alloc_sz); -extern void rtw_os_xmit_resource_free(_adapter *padapter, struct xmit_buf *pxmitbuf,uint32_t free_sz); - -extern void rtw_set_tx_chksum_offload(_pkt *pkt, struct pkt_attrib *pattrib); - -extern uint rtw_remainder_len(struct pkt_file *pfile); -extern void _rtw_open_pktfile(_pkt *pkt, struct pkt_file *pfile); -extern uint _rtw_pktfile_read (struct pkt_file *pfile, uint8_t *rmem, uint rlen); -extern sint rtw_endofpktfile (struct pkt_file *pfile); - -extern void rtw_os_pkt_complete(_adapter *padapter, _pkt *pkt); -extern void rtw_os_xmit_complete(_adapter *padapter, struct xmit_frame *pxframe); - - -#endif //__FREERTOS_XMIT_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/wrapper.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/wrapper.h deleted file mode 100644 index dec4444..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/freertos/wrapper.h +++ /dev/null @@ -1,461 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ****************************************************************************** - * Wrapper provide a linux-like interface - ************************************************************************/ -#ifndef __WRAPPER_H__ -#define __WRAPPER_H__ - - -//----- ------------------------------------------------------------------ -// Include Files -//----- ------------------------------------------------------------------ -#include -#include -#include "wireless.h" -#include -#ifdef PLATFORM_FREERTOS -#include "freertos_service.h" -#include "osdep_service.h" -#elif defined(PLATFORM_CMSIS_RTOS) -#include "rtx_service.h" -#endif -#ifndef __LIST_H -#warning "DLIST_NOT_DEFINE!!!!!!" -//----- ------------------------------------------------------------------ -// Linled List -//----- ------------------------------------------------------------------ -/* - * Simple doubly linked list implementation. - * - * Some of the internal functions ("__xxx") are useful when - * manipulating whole lists rather than single entries, as - * sometimes we already know the next/prev entries and we can - * generate better code by using them directly rather than - * using the generic single-entry routines. - */ -// struct list_head { -// struct list_head *next, *prev; -// }; - -#define LIST_HEAD_INIT(name) { &(name), &(name) } - -#define INIT_LIST_HEAD(ptr) do { \ - (ptr)->next = (ptr); (ptr)->prev = (ptr); \ -} while (0) - -/* - * Insert a new entry between two known consecutive entries. - * - * This is only for internal list manipulation where we know - * the prev/next entries already! - */ -static __inline void __list_add(struct list_head * new, - struct list_head * prev, - struct list_head * next) -{ - next->prev = new; - new->next = next; - new->prev = prev; - prev->next = new; -} - -/* - * Delete a list entry by making the prev/next entries - * point to each other. - * - * This is only for internal list manipulation where we know - * the prev/next entries already! - */ -static __inline void __list_del(struct list_head * prev, - struct list_head * next) -{ - next->prev = prev; - prev->next = next; -} - -/** - * list_del - deletes entry from list. - * @entry: the element to delete from the list. - * Note: list_empty on entry does not return true after this, the entry is in an undefined state. - */ -static __inline void list_del(struct list_head *entry) -{ - __list_del(entry->prev, entry->next); -} - -/** - * list_del_init - deletes entry from list and reinitialize it. - * @entry: the element to delete from the list. - */ -static __inline void list_del_init(struct list_head *entry) -{ - __list_del(entry->prev, entry->next); - INIT_LIST_HEAD(entry); -} - -/** - * list_empty - tests whether a list is empty - * @head: the list to test. - */ -static __inline int list_empty(struct list_head *head) -{ - return head->next == head; -} - -/** - * list_splice - join two lists - * @list: the new list to add. - * @head: the place to add it in the first list. - */ -static __inline void list_splice(struct list_head *list, struct list_head *head) -{ - struct list_head *first = list->next; - - if (first != list) { - struct list_head *last = list->prev; - struct list_head *at = head->next; - - first->prev = head; - head->next = first; - - last->next = at; - at->prev = last; - } -} - -void list_add(struct list_head *new, struct list_head *head); -void list_add_tail(struct list_head *new, struct list_head *head); -#endif - -//extern void save_and_cli(void); -//extern void restore_flags(void); -//----- ------------------------------------------------------------------ -// SKB Operation -//----- ------------------------------------------------------------------ - -#define SMP_CACHE_BYTES 4 -#define SKB_DATA_ALIGN(X) (((X) + (SMP_CACHE_BYTES - 1)) & ~(SMP_CACHE_BYTES - 1)) - -// Consideration for SKB size -// Tx: [INTF_CMD][TX_DESC][WLAN_HDR][QoS][IV][SNAP][Data][MIC][ICV][INTF_STATUS] -// Since SKB is used to accept ethernet packet from upper layer, SKB length of WLAN_MAX_ETHFRM_LEN -// (= 1514) is enough. But since SKB is also used to get spi receive packet, overall buffer space -// should be taken into consideration. -// RX: [INTF_CMD][RX_DESC][Drv_Info][WLAN_HDR][QoS][IV][SNAP][Data][MIC][ICV][CRC][INTF_STATUS] -// -// 32: Driver_Info that carry phy related information for each packets. Required only for receive case. -// WLAN_MAX_ETHFRM_LEN : May not be required because WLAN_HEADER +SNAP can totally -// cover ethernet header. Keep in only for safety. -// -// **Notes** SDIO requires 512 blocks r/w, so 512*4 = 2048 is required. -// 2003/12/26. The value is reduced from 2048 to 1658 for GSPI -// 2014/02/05. The value is 1650 for 8195A LX_BUS -#define SKB_RESERVED_FOR_SAFETY 0 -#define SKB_WLAN_TX_EXTRA_LEN (TXDESC_SIZE + WLAN_HDR_A4_QOS_LEN + WLAN_MAX_IV_LEN + WLAN_SNAP_HEADER - WLAN_ETHHDR_LEN) -#define RX_DRIVER_INFO 32 - -#if (defined CONFIG_GSPI_HCI || defined CONFIG_SDIO_HCI) -#define HAL_INTERFACE_OVERHEAD_SKB_DATA 12 //HAL_INTERFACE_CMD (4) + HAL_INTERFACE_STATUS (8) -#elif defined(CONFIG_LX_HCI) -#define HAL_INTERFACE_OVERHEAD_SKB_DATA 0 -#endif - -#if defined CONFIG_GSPI_HCI || defined CONFIG_SDIO_HCI || defined(CONFIG_LX_HCI) - #if defined(CONFIG_RTL8195A) || defined(CONFIG_RTL8711B) - #if defined(CONFIG_MP_INCLUDED) - #ifdef CONFIG_DONT_CARE_TP - #define MAX_RX_PKT_LIMIT ((WLAN_MAX_PROTOCOL_OVERHEAD + WLAN_MAX_RX_ETHFRM_LEN + 511) / 512) // 4, for lxbus - #else - #define MAX_RX_PKT_LIMIT ((WLAN_MAX_PROTOCOL_OVERHEAD + WLAN_MAX_ETHFRM_LEN + 511) / 512) // 4, for lxbus - #endif - #define MAX_RX_PKT_SIZE MAX_RX_PKT_LIMIT*512 // MAX_SKB_BUF_SIZE = 0+32+40+512*4+0 = 2120 - #else - #ifdef CONFIG_DONT_CARE_TP - #define MAX_RX_PKT_SIZE WLAN_MAX_PROTOCOL_OVERHEAD + WLAN_MAX_RX_ETHFRM_LEN - #else - #define MAX_RX_PKT_SIZE WLAN_MAX_PROTOCOL_OVERHEAD + WLAN_MAX_ETHFRM_LEN // MAX_RX_PKT_SIZE = 64+1514 = 1578 - #endif - #define MAX_RX_PKT_LIMIT ((MAX_RX_PKT_SIZE + 511) / 512) // ((1578 + 512) / 512) = 4 - #endif - #else - #ifdef CONFIG_DONT_CARE_TP - #define MAX_RX_PKT_SIZE WLAN_MAX_PROTOCOL_OVERHEAD + WLAN_MAX_RX_ETHFRM_LEN - #else - #define MAX_RX_PKT_SIZE WLAN_MAX_PROTOCOL_OVERHEAD + WLAN_MAX_ETHFRM_LEN - #endif - #endif - - #ifdef CONFIG_DONT_CARE_TP - #define MAX_TX_SKB_BUF_SIZE (HAL_INTERFACE_OVERHEAD_SKB_DATA+RX_DRIVER_INFO+\ - ((TXDESC_SIZE>RXDESC_SIZE)? TXDESC_SIZE:RXDESC_SIZE) +\ - WLAN_MAX_PROTOCOL_OVERHEAD + WLAN_MAX_TX_ETHFRM_LEN +\ - SKB_RESERVED_FOR_SAFETY) - #define MAX_RX_SKB_BUF_SIZE (HAL_INTERFACE_OVERHEAD_SKB_DATA+RX_DRIVER_INFO+\ - ((TXDESC_SIZE>RXDESC_SIZE)? TXDESC_SIZE:RXDESC_SIZE) +\ - MAX_RX_PKT_SIZE +\ - SKB_RESERVED_FOR_SAFETY) - #else - #define MAX_SKB_BUF_SIZE (HAL_INTERFACE_OVERHEAD_SKB_DATA+RX_DRIVER_INFO+\ - ((TXDESC_SIZE>RXDESC_SIZE)? TXDESC_SIZE:RXDESC_SIZE) +\ - MAX_RX_PKT_SIZE +\ - SKB_RESERVED_FOR_SAFETY) // 0+32+40+1578+0 = 1650 - #endif -#else -#define MAX_SKB_BUF_SIZE 2048 -#endif - -#if 0 -struct sk_buff_head { - struct list_head *next, *prev; - uint32_t qlen; -}; - -struct sk_buff { - /* These two members must be first. */ - struct sk_buff *next; /* Next buffer in list */ - struct sk_buff *prev; /* Previous buffer in list */ - - struct sk_buff_head *list; /* List we are on */ - unsigned char *head; /* Head of buffer */ - unsigned char *data; /* Data head pointer */ - unsigned char *tail; /* Tail pointer */ - unsigned char *end; /* End pointer */ - struct net_device *dev; /* Device we arrived on/are leaving by */ - unsigned int len; /* Length of actual data */ -}; - -/** - * skb_put - add data to a buffer - * @skb: buffer to use - * @len: amount of data to add - * - * This function extends the used data area of the buffer. If this would - * exceed the total buffer size the kernel will panic. A pointer to the - * first byte of the extra data is returned. - */ - -static __inline__ unsigned char *skb_put(struct sk_buff *skb, unsigned int len) -{ - unsigned char *tmp=skb->tail; - skb->tail+=len; - skb->len+=len; - if(skb->tail>skb->end) { - ASSERT(0); - } - - return tmp; -} - -static __inline__ unsigned char *__skb_pull(struct sk_buff *skb, unsigned int len) -{ - skb->len-=len; - skb->data = (unsigned char *)(((unsigned int)skb->data) + len); - - return skb->data; -} - -/** - * skb_reserve - adjust headroom - * @skb: buffer to alter - * @len: bytes to move - * - * Increase the headroom of an empty &sk_buff by reducing the tail - * room. This is only allowed for an empty buffer. - */ - -static __inline__ void skb_reserve(struct sk_buff *skb, unsigned int len) -{ - skb->data+=len; - skb->tail+=len; -} - -static __inline__ void skb_queue_head_init(struct sk_buff_head *list) -{ - list->prev = (struct list_head *)list; - list->next = (struct list_head *)list; - list->qlen = 0; -} - -/** - * __skb_queue_tail - queue a buffer at the list tail - * @list: list to use - * @newsk: buffer to queue - * - * Queue a buffer at the end of a list. This function takes no locks - * and you must therefore hold required locks before calling it. - * - * A buffer cannot be placed on two lists at the same time. - */ - -static __inline__ void __skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk) -{ - struct sk_buff *prev, *next; - - newsk->list = list; - list->qlen++; - next = (struct sk_buff *)list; - prev = next->prev; - newsk->next = next; - newsk->prev = prev; - next->prev = newsk; - prev->next = newsk; -} - -/** - * skb_queue_tail - queue a buffer at the list tail - * @list: list to use - * @newsk: buffer to queue - * - * Queue a buffer at the tail of the list. This function takes the - * list lock and can be used safely with other locking &sk_buff functions - * safely. - * - * A buffer cannot be placed on two lists at the same time. - */ - -static __inline__ void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk) -{ - save_and_cli(); - __skb_queue_tail(list, newsk); - restore_flags(); -} - -static __inline__ void skb_assign_buf(struct sk_buff *skb, unsigned char *buf, unsigned int len) -{ - skb->head = buf; - skb->data = buf; - skb->tail = buf; - skb->end = buf + len; -} - -static __inline__ unsigned char *skb_tail_pointer(const struct sk_buff *skb) -{ - return skb->tail; -} - -static __inline__ void skb_reset_tail_pointer(struct sk_buff *skb) -{ - skb->tail = skb->data; -} - -static __inline__ void skb_set_tail_pointer(struct sk_buff *skb, const int offset) -{ - skb->tail = skb->data + offset; -} - -static __inline__ unsigned char *skb_end_pointer(const struct sk_buff *skb) -{ - return skb->end; -} -#endif -/* - * External functions - */ -struct net_device; -extern void kfree_skb_chk_key(struct sk_buff *skb, struct net_device *root_dev); -#ifdef CONFIG_TRACE_SKB -extern void show_skb(void); -extern int _set_skb_list_flag(struct sk_buff *skb, unsigned int queueflag); -extern void dump_skb_list(void); -#define set_skb_list_flag(skb, queueflag) \ - (\ - _set_skb_list_flag((skb), queueflag), \ - (skb) ? (skb)->funcname[(skb)->list_idx] = __FUNCTION__:NULL \ - ) -extern int _clear_skb_list_flag(struct sk_buff *skb, unsigned int queueflag); -#define clear_skb_list_flag(skb, queueflag) \ - (\ - _clear_skb_list_flag((skb), queueflag), \ - (skb) ? (skb)->funcname[(skb)->list_idx] = __FUNCTION__ : NULL \ - ) -#define dev_kfree_skb_any(trx, holder, skb) \ - do{\ - clear_skb_list_flag(skb, SKBLIST_##trx##holder##_MASK);\ - set_skb_list_flag(skb, SKBLIST_POOL);\ - kfree_skb_chk_key(skb, skb->dev);\ - }while (0) -#else -#define dev_kfree_skb_any(skb) kfree_skb_chk_key(skb, skb->dev) -#endif -extern struct sk_buff *dev_alloc_skb(unsigned int length, unsigned int reserve_len); -extern struct sk_buff *skb_clone(struct sk_buff *skb, int gfp_mask); -extern struct sk_buff *skb_copy(const struct sk_buff *skb, int gfp_mask, unsigned int reserve_len); -extern unsigned char *skb_pull(struct sk_buff *skb, unsigned int len); - -//----- ------------------------------------------------------------------ -// Device structure -//----- ------------------------------------------------------------------ -struct net_device_stats { - unsigned long rx_packets; /* total packets received */ - unsigned long tx_packets; /* total packets transmitted */ - unsigned long rx_dropped; /* no space in linux buffers */ - unsigned long tx_dropped; /* no space available in linux */ - unsigned long rx_bytes; /* total bytes received */ - unsigned long tx_bytes; /* total bytes transmitted */ - unsigned long rx_overflow; /* rx fifo overflow count */ -}; - -struct net_device { - char name[16]; - void *priv; /* pointer to private data */ - unsigned char dev_addr[6]; /* set during bootup */ - int (*init)(void); - int (*open)(struct net_device *dev); - int (*stop)(struct net_device *dev); - int (*hard_start_xmit)(struct sk_buff *skb, struct net_device *dev); - int (*do_ioctl)(struct net_device *dev, struct iwreq *ifr, int cmd); - struct net_device_stats* (*get_stats)(struct net_device *dev); -}; - -typedef struct { - struct net_device *dev; /* Binding wlan driver netdev */ - void *skb; /* pending Rx packet */ - unsigned int tx_busy; - unsigned int rx_busy; - unsigned char enable; - unsigned char mac[6]; -} Rltk_wlan_t; - -#define netdev_priv(dev) dev->priv - -extern struct net_device *alloc_etherdev(int sizeof_priv); -void free_netdev(struct net_device *dev); -int dev_alloc_name(struct net_device *net_dev, const char *ifname); - - -//----- ------------------------------------------------------------------ -// Timer Operation -//----- ------------------------------------------------------------------ -void init_timer(struct timer_list *timer); -void mod_timer(struct timer_list *timer, uint32_t delay_time_ms); -void cancel_timer_ex(struct timer_list * timer); -void del_timer_sync(struct timer_list * timer); -void init_timer_wrapper(void); -void deinit_timer_wrapper(void); - -void rtw_init_timer(_timer *ptimer, void *adapter, TIMER_FUN pfunc,void* cntx, const char *name); -void rtw_set_timer(_timer *ptimer,uint32_t delay_time); -uint8_t rtw_cancel_timer(_timer *ptimer); -void rtw_del_timer(_timer *ptimer); - -#endif //__WRAPPER_H__ - - - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/lwip_intf.c b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/lwip_intf.c deleted file mode 100644 index b48ccee..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/lwip_intf.c +++ /dev/null @@ -1,278 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -//#define _LWIP_INTF_C_ - -#include -#include -#include -#if !DEVICE_EMAC -#include -#include -#endif -#include -#include - -//----- ------------------------------------------------------------------ -// External Reference -//----- ------------------------------------------------------------------ -#if (CONFIG_LWIP_LAYER == 1) -#if DEVICE_EMAC - extern struct netif *xnetif[]; -#else - extern struct netif xnetif[]; //LWIP netif -#endif -#endif - - -/** - * rltk_wlan_set_netif_info - set netif hw address and register dev pointer to netif device - * @idx_wlan: netif index - * 0 for STA only or SoftAP only or STA in STA+SoftAP concurrent mode, - * 1 for SoftAP in STA+SoftAP concurrent mode - * @dev: register netdev pointer to LWIP. Reserved. - * @dev_addr: set netif hw address - * - * Return Value: None - */ -void rltk_wlan_set_netif_info(int idx_wlan, void * dev, unsigned char * dev_addr) -{ -#if (CONFIG_LWIP_LAYER == 1) -#if DEVICE_EMAC - rtw_memcpy(xnetif[idx_wlan]->hwaddr, dev_addr, 6); -#else - rtw_memcpy(xnetif[idx_wlan].hwaddr, dev_addr, 6); - xnetif[idx_wlan].state = dev; -#endif -#endif -} - -/** - * rltk_wlan_send - send IP packets to WLAN. Called by low_level_output(). - * @idx: netif index - * @sg_list: data buffer list - * @sg_len: size of each data buffer - * @total_len: total data len - * - * Return Value: None - */ -int rltk_wlan_send(int idx, struct eth_drv_sg *sg_list, int sg_len, int total_len) -{ -#if (CONFIG_LWIP_LAYER == 1) - struct eth_drv_sg *last_sg; - struct sk_buff *skb = NULL; - int ret = 0; - - if(idx == -1){ - DBG_ERR("netif is DOWN"); - return -1; - } - DBG_TRACE("%s is called", __FUNCTION__); - - save_and_cli(); - if(rltk_wlan_check_isup(idx)) - rltk_wlan_tx_inc(idx); - else { - DBG_ERR("netif is DOWN"); - restore_flags(); - return -1; - } - restore_flags(); - - skb = rltk_wlan_alloc_skb(total_len); - if (skb == NULL) { - //DBG_ERR("rltk_wlan_alloc_skb() for data len=%d failed!", total_len); - ret = -1; - goto exit; - } - - for (last_sg = &sg_list[sg_len]; sg_list < last_sg; ++sg_list) { - rtw_memcpy(skb->tail, (void *)(sg_list->buf), sg_list->len); - skb_put(skb, sg_list->len); - } - - rltk_wlan_send_skb(idx, skb); - -exit: - save_and_cli(); - rltk_wlan_tx_dec(idx); - restore_flags(); - return ret; -#endif -} - -/** - * rltk_wlan_recv - indicate packets to LWIP. Called by ethernetif_recv(). - * @idx: netif index - * @sg_list: data buffer list - * @sg_len: size of each data buffer - * - * Return Value: None - */ -void rltk_wlan_recv(int idx, struct eth_drv_sg *sg_list, int sg_len) -{ -#if (CONFIG_LWIP_LAYER == 1) - struct eth_drv_sg *last_sg; - struct sk_buff *skb; - - DBG_TRACE("%s is called", __FUNCTION__); - - if(idx == -1){ - DBG_ERR("skb is NULL"); - return; - } - if (rltk_wlan_check_isup(idx) == 0) - return; - - - skb = rltk_wlan_get_recv_skb(idx); - DBG_ASSERT(skb, "No pending rx skb"); - - for (last_sg = &sg_list[sg_len]; sg_list < last_sg; ++sg_list) { - if (sg_list->buf != 0) { - rtw_memcpy((void *)(sg_list->buf), skb->data, sg_list->len); - skb_pull(skb, sg_list->len); - } - } -#endif -} - -int netif_is_valid_IP(int idx, unsigned char *ip_dest) -{ -#if CONFIG_LWIP_LAYER == 1 -#if DEVICE_EMAC - struct netif *pnetif = xnetif[idx]; -#else - struct netif *pnetif = &xnetif[idx]; -#endif - - ip_addr_t addr = { 0 }; - -#ifdef CONFIG_MEMORY_ACCESS_ALIGNED - unsigned int temp; - memcpy(&temp, ip_dest, sizeof(unsigned int)); - uint32_t *ip_dest_addr = &temp; -#else - uint32_t *ip_dest_addr = (uint32_t*)ip_dest; -#endif - addr.addr = *ip_dest_addr; - - if(pnetif->ip_addr.addr == 0) - return 1; - - if(ip_addr_ismulticast(&addr) || ip_addr_isbroadcast(&addr,pnetif)){ - return 1; - } - - //if(ip_addr_netcmp(&(pnetif->ip_addr), &addr, &(pnetif->netmask))) //addr&netmask - // return 1; - - if(ip_addr_cmp(&(pnetif->ip_addr),&addr)) - return 1; - - DBG_TRACE("invalid IP: %d.%d.%d.%d ",ip_dest[0],ip_dest[1],ip_dest[2],ip_dest[3]); -#endif -#ifdef CONFIG_DONT_CARE_TP - if(pnetif->flags & NETIF_FLAG_IPSWITCH) - return 1; - else -#endif - return 0; -} - -int netif_get_idx(struct netif *pnetif) -{ -#if (CONFIG_LWIP_LAYER == 1) -#if DEVICE_EMAC - if (pnetif == xnetif[0]) - return 0; -#else - int idx = pnetif - xnetif; - - switch(idx) { - case 0: - return 0; - case 1: - return 1; - default: - return -1; - } -#endif -#else - return -1; -#endif -} - -unsigned char *netif_get_hwaddr(int idx_wlan) -{ -#if (CONFIG_LWIP_LAYER == 1) -#if DEVICE_EMAC - return xnetif[idx_wlan]->hwaddr; -#else - return xnetif[idx_wlan].hwaddr; -#endif -#else - return NULL; -#endif -} - -void netif_rx(int idx, unsigned int len) -{ -#if (CONFIG_LWIP_LAYER == 1) -#if DEVICE_EMAC - wlan_emac_recv(xnetif[idx], len); -#else - ethernetif_recv(&xnetif[idx], len); -#endif -#endif -#if (CONFIG_INIC_EN == 1) - inic_netif_rx(idx, len); -#endif -} - -void netif_post_sleep_processing(void) -{ -#if (CONFIG_LWIP_LAYER == 1) -#if DEVICE_EMAC -#else - lwip_POST_SLEEP_PROCESSING(); //For FreeRTOS tickless to enable Lwip ARP timer when leaving IPS - Alex Fang -#endif -#endif -} - -void netif_pre_sleep_processing(void) -{ -#if (CONFIG_LWIP_LAYER == 1) -#if DEVICE_EMAC -#else - lwip_PRE_SLEEP_PROCESSING(); -#endif -#endif -} - -#ifdef CONFIG_WOWLAN -unsigned char *rltk_wlan_get_ip(int idx){ -#if (CONFIG_LWIP_LAYER == 1) - return LwIP_GetIP(&xnetif[idx]); -#else - return NULL; -#endif -} -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/lwip_intf.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/lwip_intf.h deleted file mode 100644 index 2553c99..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/lwip_intf.h +++ /dev/null @@ -1,84 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2013-2016 Realtek Semiconductor Corp. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __LWIP_INTF_H__ -#define __LWIP_INTF_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -struct netif; - -//----- ------------------------------------------------------------------ -// Ethernet Buffer -//----- ------------------------------------------------------------------ -#if DEVICE_EMAC -struct eth_drv_sg { - unsigned int buf; - unsigned int len; -}; - -#define MAX_ETH_DRV_SG 32 -#define MAX_ETH_MSG 1540 -extern void wlan_emac_recv(struct netif *netif, int len); -#else -#include "ethernetif.h" // moved to ethernetif.h by jimmy 12/2/2015 -#endif -//----- ------------------------------------------------------------------ -// Wlan Interface Provided -//----- ------------------------------------------------------------------ -unsigned char rltk_wlan_check_isup(int idx); -void rltk_wlan_tx_inc(int idx); -void rltk_wlan_tx_dec(int idx); -struct sk_buff * rltk_wlan_get_recv_skb(int idx); -struct sk_buff * rltk_wlan_alloc_skb(unsigned int total_len); -void rltk_wlan_set_netif_info(int idx_wlan, void * dev, unsigned char * dev_addr); -void rltk_wlan_send_skb(int idx, struct sk_buff *skb); //struct sk_buff as defined above comment line -int rltk_wlan_send(int idx, struct eth_drv_sg *sg_list, int sg_len, int total_len); -void rltk_wlan_recv(int idx, struct eth_drv_sg *sg_list, int sg_len); -unsigned char rltk_wlan_running(unsigned char idx); // interface is up. 0: interface is down - -//----- ------------------------------------------------------------------ -// Network Interface provided -//----- ------------------------------------------------------------------ - -int netif_is_valid_IP(int idx,unsigned char * ip_dest); -int netif_get_idx(struct netif *pnetif); -unsigned char *netif_get_hwaddr(int idx_wlan); -void netif_rx(int idx, unsigned int len); -void netif_post_sleep_processing(void); -void netif_pre_sleep_processing(void); -#if (CONFIG_LWIP_LAYER == 1) -#if !DEVICE_EMAC -extern void ethernetif_recv(struct netif *netif, int total_len); -#endif -extern void lwip_PRE_SLEEP_PROCESSING(void); -extern void lwip_POST_SLEEP_PROCESSING(void); -#endif //CONFIG_LWIP_LAYER == 1 - - -#ifdef CONFIG_WOWLAN -extern unsigned char *rltk_wlan_get_ip(int idx); -#endif - -#ifdef __cplusplus -} -#endif - -#endif //#ifndef __LWIP_INTF_H__ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/netdev.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/netdev.h deleted file mode 100644 index 4325684..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/netdev.h +++ /dev/null @@ -1,113 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __NETDEV_H_ -#define __NETDEV_H_ - -/* Define compilor specific symbol */ -// -// inline function -// - -#if defined ( __ICCARM__ ) -#define __inline__ inline -#define __inline inline -#define __inline_definition //In dialect C99, inline means that a function's definition is provided - //only for inlining, and that there is another definition - //(without inline) somewhere else in the program. - //That means that this program is incomplete, because if - //add isn't inlined (for example, when compiling without optimization), - //then main will have an unresolved reference to that other definition. - - // Do not inline function is the function body is defined .c file and this - // function will be called somewhere else, otherwise there is compile error -#elif defined ( __CC_ARM ) -#define __inline__ __inline //__linine__ is not supported in keil compilor, use __inline instead -#define inline __inline -#define __inline_definition // for dialect C99 -#elif defined ( __GNUC__ ) -#define __inline__ inline -#define __inline inline -#define __inline_definition inline -#endif - -#include -#include -#if defined( PLATFORM_FREERTOS) -#include "freertos_service.h" -#elif defined( PLATFORM_ECOS) -#include "ecos/ecos_service.h" -#elif defined(PLATFORM_CMSIS_RTOS) -#include "rtx_service.h" -#endif - - -// rtl8195a uses receive_tasklet for wps -// 8189em uses interrupt_thread for wps -#if defined(CONFIG_WPS) -#define RECV_STACK_FOR_WPS 448//512//384 //Change to 512 for WPS (IAR STM32) stack overflow -#else -#define RECV_STACK_FOR_WPS 0 -#endif - -#ifdef CONFIG_DONT_CARE_TP -#define XMIT_STACKSIZE 192 //256 -#define CMD_STACKSIZE 384 //512 -#else -#define XMIT_STACKSIZE 256 -#define CMD_STACKSIZE 512 //1024 -#endif //CONFIG_DONT_CARE_TP - -#if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) -#define RECV_STACKSIZE 256 -#else //CONFIG_PLATFORM_8195A -#ifdef CONFIG_INCLUDE_WPA_PSK -#if PSK_SUPPORT_TKIP -#define RECV_STACKSIZE (512 + 256 + 128 + RECV_STACK_FOR_WPS) -#else -#define RECV_STACKSIZE (512 + 256 + RECV_STACK_FOR_WPS ) -#endif -#else -#define RECV_STACKSIZE (512 + 256 + RECV_STACK_FOR_WPS) //Can be reduced -#endif -#endif //CONFIG_PLATFORM_8195A - -#define XMIT_TASKLET_STACKSIZE 256 -#define RECV_TASKLET_STACKSIZE (1024 + RECV_STACK_FOR_WPS) -#define SDIOXMIT_STACKSIZE 256 - - -struct rtw_netdev_priv_indicator { - void *priv; - uint32_t sizeof_priv; -}; - -#define rtw_netdev_priv(netdev) ( ((struct rtw_netdev_priv_indicator *)netdev_priv(netdev))->priv ) - -#define ADPT_FMT "%s" -#define ADPT_ARG(adapter) adapter->pnetdev->name -#define FUNC_NDEV_FMT "%s" -#define FUNC_NDEV_ARG(ndev) __func__ -#define FUNC_ADPT_FMT "%s(%s)" -#define FUNC_ADPT_ARG(adapter) __func__, adapter->pnetdev->name - -#include "wifi_constants.h" -#include "wifi_structures.h" -int rtw_if_wifi_thread(char *name); -#endif //#ifndef __OSDEP_SERVICE_H_ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/osdep_intf.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/osdep_intf.h deleted file mode 100644 index 39bbdb4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/osdep_intf.h +++ /dev/null @@ -1,116 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __OSDEP_INTF_H_ -#define __OSDEP_INTF_H_ - -typedef struct net_device * _nic_hdl; -struct iw_request_info { - uint16_t cmd; /* Wireless Extension command */ - uint16_t flags; /* More to come ;-) */ -}; -typedef int (*iw_handler)(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - -struct pkt_buff { - _list list; - uint32_t len; - unsigned char *data; -}; - -#if defined(PLATFORM_FREERTOS) || defined (PLATFORM_CMSIS_RTOS) - -#include "freertos/wrapper.h" -#include "freertos/freertos_intfs.h" -#include "freertos/freertos_xmit.h" -#include "freertos/freertos_recv.h" - -#elif defined(PLATFORM_ECOS) - -#include "ecos/ecos_xmit.h" -#include "ecos/ecos_recv.h" -#include "ecos/ecos_mlme.h" -#include "ecos/ecos_intfs.h" - -#ifdef CONFIG_PROC_DEBUG //need move to ecos/ecos_intfs.h -void rtw_proc_init_one(struct net_device *dev); -void rtw_proc_remove_one(struct net_device *dev); -#else -static void rtw_proc_init_one(struct net_device *dev){} -static void rtw_proc_remove_one(struct net_device *dev){} -#endif //CONFIG_PROC_DEBUG - -#elif defined(PLATFORM_LINUX) -int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); - -int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname); -struct net_device *rtw_init_netdev(_adapter *padapter); - -#ifdef CONFIG_PROC_DEBUG -void rtw_proc_init_one(struct net_device *dev); -void rtw_proc_remove_one(struct net_device *dev); -#else -static void rtw_proc_init_one(struct net_device *dev){} -static void rtw_proc_remove_one(struct net_device *dev){} -#endif //CONFIG_PROC_DEBUG -#endif - -#ifdef CONFIG_CONCURRENT_MODE -struct _io_ops; -_adapter *rtw_drv_if2_init(_adapter *primary_padapter, char *name, void (*set_intf_ops)(struct _io_ops *pops)); -void rtw_drv_if2_free(_adapter *pbuddy_padapter); -#endif - -struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv, void *old_priv); -struct net_device * rtw_alloc_etherdev(int sizeof_priv); -void rtw_free_netdev(struct net_device * netdev); - -int rtw_netif_queue_stopped(struct net_device *pnetdev); -void rtw_netif_wake_queue(struct net_device *pnetdev); -void rtw_netif_start_queue(struct net_device *pnetdev); -void rtw_netif_stop_queue(struct net_device *pnetdev); - -struct pkt_buff *rtw_alloc_pktbuf(unsigned int size); -void rtw_free_pktbuf(struct pkt_buff *skb); - -#if 0 -int RTW_STATUS_CODE(int error_code); - -//flags used for rtw_update_mem_stat() -enum { - MEM_STAT_VIR_ALLOC_SUCCESS, - MEM_STAT_VIR_ALLOC_FAIL, - MEM_STAT_VIR_FREE, - MEM_STAT_PHY_ALLOC_SUCCESS, - MEM_STAT_PHY_ALLOC_FAIL, - MEM_STAT_PHY_FREE, - MEM_STAT_TX, //used to distinguish TX/RX, asigned from caller - MEM_STAT_TX_ALLOC_SUCCESS, - MEM_STAT_TX_ALLOC_FAIL, - MEM_STAT_TX_FREE, - MEM_STAT_RX, //used to distinguish TX/RX, asigned from caller - MEM_STAT_RX_ALLOC_SUCCESS, - MEM_STAT_RX_ALLOC_FAIL, - MEM_STAT_RX_FREE -}; -#endif - -#endif //_OSDEP_INTF_H_ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/skbuff.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/skbuff.h deleted file mode 100644 index aab44fe..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/skbuff.h +++ /dev/null @@ -1,72 +0,0 @@ -/****************************************************************************** - * Copyright (c) 2013-2016 Realtek Semiconductor Corp. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ -#ifndef __SKBUFF_H__ -#define __SKBUFF_H__ - -struct sk_buff_head { - struct list_head *next, *prev; - unsigned int qlen; -}; - -#ifdef CONFIG_TRACE_SKB -#define TRACE_SKB_DEPTH 8 -#endif - -struct sk_buff { - /* These two members must be first. */ - struct sk_buff *next; /* Next buffer in list */ - struct sk_buff *prev; /* Previous buffer in list */ - - struct sk_buff_head *list; /* List we are on */ - unsigned char *head; /* Head of buffer */ - unsigned char *data; /* Data head pointer */ - unsigned char *tail; /* Tail pointer */ - unsigned char *end; /* End pointer */ - void *dev; /* Device we arrived on/are leaving by */ - unsigned int len; /* Length of actual data */ -#ifdef CONFIG_TRACE_SKB - unsigned int liston[TRACE_SKB_DEPTH]; /* Trace the Lists we went through */ - const char *funcname[TRACE_SKB_DEPTH]; - unsigned int list_idx; /* Trace the List we are on */ -#endif -//#ifdef CONFIG_DONT_CARE_TP - int dyalloc_flag; -//#endif -}; - -unsigned char *skb_put(struct sk_buff *skb, unsigned int len); -unsigned char *skb_pull(struct sk_buff *skb, unsigned int len); -void skb_reserve(struct sk_buff *skb, unsigned int len); -void skb_assign_buf(struct sk_buff *skb, unsigned char *buf, unsigned int len); -unsigned char *skb_tail_pointer(const struct sk_buff *skb); -void skb_set_tail_pointer(struct sk_buff *skb, const int offset); -unsigned char *skb_end_pointer(const struct sk_buff *skb); - -void init_skb_pool(void); -void init_skb_data_pool(void); - -#ifndef CONFIG_DONT_CARE_TP -struct sk_buff *dev_alloc_skb(unsigned int length, unsigned int reserve_len); -#else -struct sk_buff *dev_alloc_tx_skb(unsigned int length, unsigned int reserve_len); -struct sk_buff *dev_alloc_rx_skb(unsigned int length, unsigned int reserve_len); -#define dev_alloc_skb dev_alloc_tx_skb -#endif -void kfree_skb(struct sk_buff *skb); - - -#endif //__SKBUFF_H__ - diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/wireless.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/wireless.h deleted file mode 100644 index babcbdb..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/wireless.h +++ /dev/null @@ -1,1213 +0,0 @@ -/* - * This file define a set of standard wireless extensions - * - * Version : 22 16.3.07 - * - * Authors : Jean Tourrilhes - HPL - - * Copyright (c) 1997-2007 Jean Tourrilhes, All Rights Reserved. - */ - -#ifndef _LINUX_WIRELESS_H -#define _LINUX_WIRELESS_H - -/************************** DOCUMENTATION **************************/ -/* - * Initial APIs (1996 -> onward) : - * ----------------------------- - * Basically, the wireless extensions are for now a set of standard ioctl - * call + /proc/net/wireless - * - * The entry /proc/net/wireless give statistics and information on the - * driver. - * This is better than having each driver having its entry because - * its centralised and we may remove the driver module safely. - * - * Ioctl are used to configure the driver and issue commands. This is - * better than command line options of insmod because we may want to - * change dynamically (while the driver is running) some parameters. - * - * The ioctl mechanimsm are copied from standard devices ioctl. - * We have the list of command plus a structure descibing the - * data exchanged... - * Note that to add these ioctl, I was obliged to modify : - * # net/core/dev.c (two place + add include) - * # net/ipv4/af_inet.c (one place + add include) - * - * /proc/net/wireless is a copy of /proc/net/dev. - * We have a structure for data passed from the driver to /proc/net/wireless - * Too add this, I've modified : - * # net/core/dev.c (two other places) - * # include/linux/netdevice.h (one place) - * # include/linux/proc_fs.h (one place) - * - * New driver API (2002 -> onward) : - * ------------------------------- - * This file is only concerned with the user space API and common definitions. - * The new driver API is defined and documented in : - * # include/net/iw_handler.h - * - * Note as well that /proc/net/wireless implementation has now moved in : - * # net/core/wireless.c - * - * Wireless Events (2002 -> onward) : - * -------------------------------- - * Events are defined at the end of this file, and implemented in : - * # net/core/wireless.c - * - * Other comments : - * -------------- - * Do not add here things that are redundant with other mechanisms - * (drivers init, ifconfig, /proc/net/dev, ...) and with are not - * wireless specific. - * - * These wireless extensions are not magic : each driver has to provide - * support for them... - * - * IMPORTANT NOTE : As everything in the kernel, this is very much a - * work in progress. Contact me if you have ideas of improvements... - */ - -/***************************** INCLUDES *****************************/ - -/* This header is used in user-space, therefore need to be sanitised - * for that purpose. Those includes are usually not compatible with glibc. - * To know which includes to use in user-space, check iwlib.h. */ -#ifdef __KERNEL__ -#include /* for "caddr_t" et al */ -#include /* for "struct sockaddr" et al */ -#include /* for IFNAMSIZ and co... */ -#endif /* __KERNEL__ */ - -//#include -#define IFNAMSIZ 16 -#define ARPHRD_ETHER 1 /* ethernet hardware format */ - -/***************************** VERSION *****************************/ -/* - * This constant is used to know the availability of the wireless - * extensions and to know which version of wireless extensions it is - * (there is some stuff that will be added in the future...) - * I just plan to increment with each new version. - */ -#define WIRELESS_EXT 22 - -/* - * Changes : - * - * V2 to V3 - * -------- - * Alan Cox start some incompatibles changes. I've integrated a bit more. - * - Encryption renamed to Encode to avoid US regulation problems - * - Frequency changed from float to struct to avoid problems on old 386 - * - * V3 to V4 - * -------- - * - Add sensitivity - * - * V4 to V5 - * -------- - * - Missing encoding definitions in range - * - Access points stuff - * - * V5 to V6 - * -------- - * - 802.11 support (ESSID ioctls) - * - * V6 to V7 - * -------- - * - define IW_ESSID_MAX_SIZE and IW_MAX_AP - * - * V7 to V8 - * -------- - * - Changed my e-mail address - * - More 802.11 support (nickname, rate, rts, frag) - * - List index in frequencies - * - * V8 to V9 - * -------- - * - Support for 'mode of operation' (ad-hoc, managed...) - * - Support for unicast and multicast power saving - * - Change encoding to support larger tokens (>64 bits) - * - Updated iw_params (disable, flags) and use it for NWID - * - Extracted iw_point from iwreq for clarity - * - * V9 to V10 - * --------- - * - Add PM capability to range structure - * - Add PM modifier : MAX/MIN/RELATIVE - * - Add encoding option : IW_ENCODE_NOKEY - * - Add TxPower ioctls (work like TxRate) - * - * V10 to V11 - * ---------- - * - Add WE version in range (help backward/forward compatibility) - * - Add retry ioctls (work like PM) - * - * V11 to V12 - * ---------- - * - Add SIOCSIWSTATS to get /proc/net/wireless programatically - * - Add DEV PRIVATE IOCTL to avoid collisions in SIOCDEVPRIVATE space - * - Add new statistics (frag, retry, beacon) - * - Add average quality (for user space calibration) - * - * V12 to V13 - * ---------- - * - Document creation of new driver API. - * - Extract union iwreq_data from struct iwreq (for new driver API). - * - Rename SIOCSIWNAME as SIOCSIWCOMMIT - * - * V13 to V14 - * ---------- - * - Wireless Events support : define struct iw_event - * - Define additional specific event numbers - * - Add "addr" and "param" fields in union iwreq_data - * - AP scanning stuff (SIOCSIWSCAN and friends) - * - * V14 to V15 - * ---------- - * - Add IW_PRIV_TYPE_ADDR for struct sockaddr private arg - * - Make struct iw_freq signed (both m & e), add explicit padding - * - Add IWEVCUSTOM for driver specific event/scanning token - * - Add IW_MAX_GET_SPY for driver returning a lot of addresses - * - Add IW_TXPOW_RANGE for range of Tx Powers - * - Add IWEVREGISTERED & IWEVEXPIRED events for Access Points - * - Add IW_MODE_MONITOR for passive monitor - * - * V15 to V16 - * ---------- - * - Increase the number of bitrates in iw_range to 32 (for 802.11g) - * - Increase the number of frequencies in iw_range to 32 (for 802.11b+a) - * - Reshuffle struct iw_range for increases, add filler - * - Increase IW_MAX_AP to 64 for driver returning a lot of addresses - * - Remove IW_MAX_GET_SPY because conflict with enhanced spy support - * - Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy" - * - Add IW_ENCODE_TEMP and iw_range->encoding_login_index - * - * V16 to V17 - * ---------- - * - Add flags to frequency -> auto/fixed - * - Document (struct iw_quality *)->updated, add new flags (INVALID) - * - Wireless Event capability in struct iw_range - * - Add support for relative TxPower (yick !) - * - * V17 to V18 (From Jouni Malinen ) - * ---------- - * - Add support for WPA/WPA2 - * - Add extended encoding configuration (SIOCSIWENCODEEXT and - * SIOCGIWENCODEEXT) - * - Add SIOCSIWGENIE/SIOCGIWGENIE - * - Add SIOCSIWMLME - * - Add SIOCSIWPMKSA - * - Add struct iw_range bit field for supported encoding capabilities - * - Add optional scan request parameters for SIOCSIWSCAN - * - Add SIOCSIWAUTH/SIOCGIWAUTH for setting authentication and WPA - * related parameters (extensible up to 4096 parameter values) - * - Add wireless events: IWEVGENIE, IWEVMICHAELMICFAILURE, - * IWEVASSOCREQIE, IWEVASSOCRESPIE, IWEVPMKIDCAND - * - * V18 to V19 - * ---------- - * - Remove (struct iw_point *)->pointer from events and streams - * - Remove header includes to help user space - * - Increase IW_ENCODING_TOKEN_MAX from 32 to 64 - * - Add IW_QUAL_ALL_UPDATED and IW_QUAL_ALL_INVALID macros - * - Add explicit flag to tell stats are in dBm : IW_QUAL_DBM - * - Add IW_IOCTL_IDX() and IW_EVENT_IDX() macros - * - * V19 to V20 - * ---------- - * - RtNetlink requests support (SET/GET) - * - * V20 to V21 - * ---------- - * - Remove (struct net_device *)->get_wireless_stats() - * - Change length in ESSID and NICK to strlen() instead of strlen()+1 - * - Add IW_RETRY_SHORT/IW_RETRY_LONG retry modifiers - * - Power/Retry relative values no longer * 100000 - * - Add explicit flag to tell stats are in 802.11k RCPI : IW_QUAL_RCPI - * - * V21 to V22 - * ---------- - * - Prevent leaking of kernel space in stream on 64 bits. - */ - -#include "platform_stdlib.h" - -/**************************** CONSTANTS ****************************/ -/* -typedef unsigned char uint8_t; -typedef char int8_t; -typedef unsigned short uint16_t; -typedef short int16_t; -typedef unsigned int uint32_t; -typedef int int32_t; -typedef unsigned long long uint64_t; -typedef long long int64_t; -*/ - -#define E2BIG 7 /* Argument list too long */ - -#define ETH_ALEN 6 /* Octets in one ethernet addr */ - -/* Device private ioctl calls */ - -/* - * These 16 ioctls are available to devices via the do_ioctl() device - * vector. Each device should include this file and redefine these names - * as their own. Because these are device dependent it is a good idea - * _NOT_ to issue them to random objects and hope. - * - * THESE IOCTLS ARE _DEPRECATED_ AND WILL DISAPPEAR IN 2.5.X -DaveM - */ - -#define SIOCDEVPRIVATE 0x89F0 /* to 89FF */ - -/* - * These 16 ioctl calls are protocol private - */ - -#define SIOCPROTOPRIVATE 0x89E0 /* to 89EF */ - -/* -------------------------- IOCTL LIST -------------------------- */ - -/* Wireless Identification */ -#define SIOCSIWCOMMIT 0x8B00 /* Commit pending changes to driver */ -#define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */ -/* SIOCGIWNAME is used to verify the presence of Wireless Extensions. - * Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"... - * Don't put the name of your driver there, it's useless. */ - -/* Basic operations */ -#define SIOCSIWNWID 0x8B02 /* set network id (pre-802.11) */ -#define SIOCGIWNWID 0x8B03 /* get network id (the cell) */ -#define SIOCSIWFREQ 0x8B04 /* set channel/frequency (Hz) */ -#define SIOCGIWFREQ 0x8B05 /* get channel/frequency (Hz) */ -#define SIOCSIWMODE 0x8B06 /* set operation mode */ -#define SIOCGIWMODE 0x8B07 /* get operation mode */ -#define SIOCSIWSENS 0x8B08 /* set sensitivity (dBm) */ -#define SIOCGIWSENS 0x8B09 /* get sensitivity (dBm) */ - -/* Informative stuff */ -#define SIOCSIWRANGE 0x8B0A /* Unused */ -#define SIOCGIWRANGE 0x8B0B /* Get range of parameters */ -#define SIOCSIWPRIV 0x8B0C /* Unused */ -#define SIOCGIWPRIV 0x8B0D /* get private ioctl interface info */ -#define SIOCSIWSTATS 0x8B0E /* Unused */ -#define SIOCGIWSTATS 0x8B0F /* Get /proc/net/wireless stats */ -/* SIOCGIWSTATS is strictly used between user space and the kernel, and - * is never passed to the driver (i.e. the driver will never see it). */ - -/* Spy support (statistics per MAC address - used for Mobile IP support) */ -#define SIOCSIWSPY 0x8B10 /* set spy addresses */ -#define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */ -#define SIOCSIWTHRSPY 0x8B12 /* set spy threshold (spy event) */ -#define SIOCGIWTHRSPY 0x8B13 /* get spy threshold */ - -/* Access Point manipulation */ -#define SIOCSIWAP 0x8B14 /* set access point MAC addresses */ -#define SIOCGIWAP 0x8B15 /* get access point MAC addresses */ -#define SIOCGIWAPLIST 0x8B17 /* Deprecated in favor of scanning */ -#define SIOCSIWSCAN 0x8B18 /* trigger scanning (list cells) */ -#define SIOCGIWSCAN 0x8B19 /* get scanning results */ - -/* 802.11 specific support */ -#define SIOCSIWESSID 0x8B1A /* set ESSID (network name) */ -#define SIOCGIWESSID 0x8B1B /* get ESSID */ -#define SIOCSIWNICKN 0x8B1C /* set node name/nickname */ -#define SIOCGIWNICKN 0x8B1D /* get node name/nickname */ -/* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit - * within the 'iwreq' structure, so we need to use the 'data' member to - * point to a string in user space, like it is done for RANGE... */ - -/* Other parameters useful in 802.11 and some other devices */ -#define SIOCSIWRATE 0x8B20 /* set default bit rate (bps) */ -#define SIOCGIWRATE 0x8B21 /* get default bit rate (bps) */ -#define SIOCSIWRTS 0x8B22 /* set RTS/CTS threshold (bytes) */ -#define SIOCGIWRTS 0x8B23 /* get RTS/CTS threshold (bytes) */ -#define SIOCSIWFRAG 0x8B24 /* set fragmentation thr (bytes) */ -#define SIOCGIWFRAG 0x8B25 /* get fragmentation thr (bytes) */ -#define SIOCSIWTXPOW 0x8B26 /* set transmit power (dBm) */ -#define SIOCGIWTXPOW 0x8B27 /* get transmit power (dBm) */ -#define SIOCSIWRETRY 0x8B28 /* set retry limits and lifetime */ -#define SIOCGIWRETRY 0x8B29 /* get retry limits and lifetime */ - -/* Encoding stuff (scrambling, hardware security, WEP...) */ -#define SIOCSIWENCODE 0x8B2A /* set encoding token & mode */ -#define SIOCGIWENCODE 0x8B2B /* get encoding token & mode */ -/* Power saving stuff (power management, unicast and multicast) */ -#define SIOCSIWPOWER 0x8B2C /* set Power Management settings */ -#define SIOCGIWPOWER 0x8B2D /* get Power Management settings */ -/* Modulation bitmask */ -#define SIOCSIWMODUL 0x8B2E /* set Modulations settings */ -#define SIOCGIWMODUL 0x8B2F /* get Modulations settings */ - -/* WPA : Generic IEEE 802.11 informatiom element (e.g., for WPA/RSN/WMM). - * This ioctl uses struct iw_point and data buffer that includes IE id and len - * fields. More than one IE may be included in the request. Setting the generic - * IE to empty buffer (len=0) removes the generic IE from the driver. Drivers - * are allowed to generate their own WPA/RSN IEs, but in these cases, drivers - * are required to report the used IE as a wireless event, e.g., when - * associating with an AP. */ -#define SIOCSIWGENIE 0x8B30 /* set generic IE */ -#define SIOCGIWGENIE 0x8B31 /* get generic IE */ - -/* WPA : IEEE 802.11 MLME requests */ -#define SIOCSIWMLME 0x8B16 /* request MLME operation; uses - * struct iw_mlme */ -/* WPA : Authentication mode parameters */ -#define SIOCSIWAUTH 0x8B32 /* set authentication mode params */ -#define SIOCGIWAUTH 0x8B33 /* get authentication mode params */ - -/* WPA : Extended version of encoding configuration */ -#define SIOCSIWENCODEEXT 0x8B34 /* set encoding token & mode */ -#define SIOCGIWENCODEEXT 0x8B35 /* get encoding token & mode */ - -/* WPA2 : PMKSA cache management */ -#define SIOCSIWPMKSA 0x8B36 /* PMKSA cache operation */ - -/* Send Mgnt Frame or Action Frame */ -#define SIOCSIWMGNTSEND 0x8B37 /* Send Mgnt Frame or Action Frame */ - -/* Send WPS EAPOL Frame */ -#define SIOCSIWEAPOLSEND 0x8B38 /* Send WPS EAPOL Frame */ -/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */ - -/* These 32 ioctl are wireless device private, for 16 commands. - * Each driver is free to use them for whatever purpose it chooses, - * however the driver *must* export the description of those ioctls - * with SIOCGIWPRIV and *must* use arguments as defined below. - * If you don't follow those rules, DaveM is going to hate you (reason : - * it make mixed 32/64bit operation impossible). - */ -#define SIOCIWFIRSTPRIV 0x8BE0 -#define SIOCIWLASTPRIV 0x8BFF - -#define SIOCSIWPRIVADAPTIVITY 0x8BFB -#define SIOCGIWPRIVPASSPHRASE 0x8BFC -#define SIOCSIWPRIVCOUNTRY 0x8BFD -#define SIOCSIWPRIVAPESSID 0x8BFE -#define SIOCSIWPRIVPASSPHRASE 0x8BFF -/* Previously, we were using SIOCDEVPRIVATE, but we now have our - * separate range because of collisions with other tools such as - * 'mii-tool'. - * We now have 32 commands, so a bit more space ;-). - * Also, all 'even' commands are only usable by root and don't return the - * content of ifr/iwr to user (but you are not obliged to use the set/get - * convention, just use every other two command). More details in iwpriv.c. - * And I repeat : you are not forced to use them with iwpriv, but you - * must be compliant with it. - */ - -/* ------------------------- IOCTL STUFF ------------------------- */ - -/* The first and the last (range) */ -#define SIOCIWFIRST 0x8B00 -#define SIOCIWLAST SIOCIWLASTPRIV /* 0x8BFF */ -#define IW_IOCTL_IDX(cmd) ((cmd) - SIOCIWFIRST) - -/* Odd : get (world access), even : set (root access) */ -#define IW_IS_SET(cmd) (!((cmd) & 0x1)) -#define IW_IS_GET(cmd) ((cmd) & 0x1) - -/* ----------------------- WIRELESS EVENTS ----------------------- */ -/* Those are *NOT* ioctls, do not issue request on them !!! */ -/* Most events use the same identifier as ioctl requests */ - -#define IWEVTXDROP 0x8C00 /* Packet dropped to excessive retry */ -#define IWEVQUAL 0x8C01 /* Quality part of statistics (scan) */ -#define IWEVCUSTOM 0x8C02 /* Driver specific ascii string */ -#define IWEVREGISTERED 0x8C03 /* Discovered a new node (AP mode) */ -#define IWEVEXPIRED 0x8C04 /* Expired a node (AP mode) */ -#define IWEVGENIE 0x8C05 /* Generic IE (WPA, RSN, WMM, ..) - * (scan results); This includes id and - * length fields. One IWEVGENIE may - * contain more than one IE. Scan - * results may contain one or more - * IWEVGENIE events. */ -#define IWEVMICHAELMICFAILURE 0x8C06 /* Michael MIC failure - * (struct iw_michaelmicfailure) - */ -#define IWEVASSOCREQIE 0x8C07 /* IEs used in (Re)Association Request. - * The data includes id and length - * fields and may contain more than one - * IE. This event is required in - * Managed mode if the driver - * generates its own WPA/RSN IE. This - * should be sent just before - * IWEVREGISTERED event for the - * association. */ -#define IWEVASSOCRESPIE 0x8C08 /* IEs used in (Re)Association - * Response. The data includes id and - * length fields and may contain more - * than one IE. This may be sent - * between IWEVASSOCREQIE and - * IWEVREGISTERED events for the - * association. */ -#define IWEVPMKIDCAND 0x8C09 /* PMKID candidate for RSN - * pre-authentication - * (struct iw_pmkid_cand) */ - -#define IWEVFIRST 0x8C00 -#define IW_EVENT_IDX(cmd) ((cmd) - IWEVFIRST) - -/* Indicate Mgnt Frame and Action Frame to uplayer*/ -#define IWEVMGNTRECV 0x8C10 /* Indicate Mgnt Frame to uplayer */ - -/* ------------------------- PRIVATE INFO ------------------------- */ -/* - * The following is used with SIOCGIWPRIV. It allow a driver to define - * the interface (name, type of data) for its private ioctl. - * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV - */ - -#define IW_PRIV_TYPE_MASK 0x7000 /* Type of arguments */ -#define IW_PRIV_TYPE_NONE 0x0000 -#define IW_PRIV_TYPE_BYTE 0x1000 /* Char as number */ -#define IW_PRIV_TYPE_CHAR 0x2000 /* Char as character */ -#define IW_PRIV_TYPE_INT 0x4000 /* 32 bits int */ -#define IW_PRIV_TYPE_FLOAT 0x5000 /* struct iw_freq */ -#define IW_PRIV_TYPE_ADDR 0x6000 /* struct sockaddr */ - -#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed number of args */ - -#define IW_PRIV_SIZE_MASK 0x07FF /* Max number of those args */ - -/* - * Note : if the number of args is fixed and the size < 16 octets, - * instead of passing a pointer we will put args in the iwreq struct... - */ - -/* ----------------------- OTHER CONSTANTS ----------------------- */ - -/* Maximum frequencies in the range struct */ -#define IW_MAX_FREQUENCIES 32 -/* Note : if you have something like 80 frequencies, - * don't increase this constant and don't fill the frequency list. - * The user will be able to set by channel anyway... */ - -/* Maximum bit rates in the range struct */ -#define IW_MAX_BITRATES 32 - -/* Maximum tx powers in the range struct */ -#define IW_MAX_TXPOWER 8 -/* Note : if you more than 8 TXPowers, just set the max and min or - * a few of them in the struct iw_range. */ - -/* Maximum of address that you may set with SPY */ -#define IW_MAX_SPY 8 - -/* Maximum of address that you may get in the - list of access points in range */ -#define IW_MAX_AP 64 - -/* Maximum size of the ESSID and NICKN strings */ -#define IW_ESSID_MAX_SIZE 32 - -/* Modes of operation */ -#define IW_MODE_AUTO 0 /* Let the driver decides */ -#define IW_MODE_ADHOC 1 /* Single cell network */ -#define IW_MODE_INFRA 2 /* Multi cell network, roaming, ... */ -#define IW_MODE_MASTER 3 /* Synchronisation master or Access Point */ -#define IW_MODE_REPEAT 4 /* Wireless Repeater (forwarder) */ -#define IW_MODE_SECOND 5 /* Secondary master/repeater (backup) */ -#define IW_MODE_MONITOR 6 /* Passive monitor (listen only) */ - -/* Statistics flags (bitmask in updated) */ -#define IW_QUAL_QUAL_UPDATED 0x01 /* Value was updated since last read */ -#define IW_QUAL_LEVEL_UPDATED 0x02 -#define IW_QUAL_NOISE_UPDATED 0x04 -#define IW_QUAL_ALL_UPDATED 0x07 -#define IW_QUAL_DBM 0x08 /* Level + Noise are dBm */ -#define IW_QUAL_QUAL_INVALID 0x10 /* Driver doesn't provide value */ -#define IW_QUAL_LEVEL_INVALID 0x20 -#define IW_QUAL_NOISE_INVALID 0x40 -#define IW_QUAL_RCPI 0x80 /* Level + Noise are 802.11k RCPI */ -#define IW_QUAL_ALL_INVALID 0x70 - -/* Frequency flags */ -#define IW_FREQ_AUTO 0x00 /* Let the driver decides */ -#define IW_FREQ_FIXED 0x01 /* Force a specific value */ - -/* Maximum number of size of encoding token available - * they are listed in the range structure */ -#define IW_MAX_ENCODING_SIZES 8 - -/* Maximum size of the encoding token in bytes */ -#define IW_ENCODING_TOKEN_MAX 64 /* 512 bits (for now) */ - -/* Flags for encoding (along with the token) */ -#define IW_ENCODE_INDEX 0x00FF /* Token index (if needed) */ -#define IW_ENCODE_FLAGS 0xFF00 /* Flags defined below */ -#define IW_ENCODE_MODE 0xF000 /* Modes defined below */ -#define IW_ENCODE_DISABLED 0x8000 /* Encoding disabled */ -#define IW_ENCODE_ENABLED 0x0000 /* Encoding enabled */ -#define IW_ENCODE_RESTRICTED 0x4000 /* Refuse non-encoded packets */ -#define IW_ENCODE_OPEN 0x2000 /* Accept non-encoded packets */ -#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */ -#define IW_ENCODE_TEMP 0x0400 /* Temporary key */ - -/* Power management flags available (along with the value, if any) */ -#define IW_POWER_ON 0x0000 /* No details... */ -#define IW_POWER_TYPE 0xF000 /* Type of parameter */ -#define IW_POWER_PERIOD 0x1000 /* Value is a period/duration of */ -#define IW_POWER_TIMEOUT 0x2000 /* Value is a timeout (to go asleep) */ -#define IW_POWER_SAVING 0x4000 /* Value is relative (how aggressive)*/ -#define IW_POWER_MODE 0x0F00 /* Power Management mode */ -#define IW_POWER_UNICAST_R 0x0100 /* Receive only unicast messages */ -#define IW_POWER_MULTICAST_R 0x0200 /* Receive only multicast messages */ -#define IW_POWER_ALL_R 0x0300 /* Receive all messages though PM */ -#define IW_POWER_FORCE_S 0x0400 /* Force PM procedure for sending unicast */ -#define IW_POWER_REPEATER 0x0800 /* Repeat broadcast messages in PM period */ -#define IW_POWER_MODIFIER 0x000F /* Modify a parameter */ -#define IW_POWER_MIN 0x0001 /* Value is a minimum */ -#define IW_POWER_MAX 0x0002 /* Value is a maximum */ -#define IW_POWER_RELATIVE 0x0004 /* Value is not in seconds/ms/us */ - -/* Transmit Power flags available */ -#define IW_TXPOW_TYPE 0x00FF /* Type of value */ -#define IW_TXPOW_DBM 0x0000 /* Value is in dBm */ -#define IW_TXPOW_MWATT 0x0001 /* Value is in mW */ -#define IW_TXPOW_RELATIVE 0x0002 /* Value is in arbitrary units */ -#define IW_TXPOW_RANGE 0x1000 /* Range of value between min/max */ - -/* Retry limits and lifetime flags available */ -#define IW_RETRY_ON 0x0000 /* No details... */ -#define IW_RETRY_TYPE 0xF000 /* Type of parameter */ -#define IW_RETRY_LIMIT 0x1000 /* Maximum number of retries*/ -#define IW_RETRY_LIFETIME 0x2000 /* Maximum duration of retries in us */ -#define IW_RETRY_MODIFIER 0x00FF /* Modify a parameter */ -#define IW_RETRY_MIN 0x0001 /* Value is a minimum */ -#define IW_RETRY_MAX 0x0002 /* Value is a maximum */ -#define IW_RETRY_RELATIVE 0x0004 /* Value is not in seconds/ms/us */ -#define IW_RETRY_SHORT 0x0010 /* Value is for short packets */ -#define IW_RETRY_LONG 0x0020 /* Value is for long packets */ - -/* Scanning request flags */ -#define IW_SCAN_DEFAULT 0x0000 /* Default scan of the driver */ -#define IW_SCAN_ALL_ESSID 0x0001 /* Scan all ESSIDs */ -#define IW_SCAN_THIS_ESSID 0x0002 /* Scan only this ESSID */ -#define IW_SCAN_ALL_FREQ 0x0004 /* Scan all Frequencies */ -#define IW_SCAN_THIS_FREQ 0x0008 /* Scan only this Frequency */ -#define IW_SCAN_ALL_MODE 0x0010 /* Scan all Modes */ -#define IW_SCAN_THIS_MODE 0x0020 /* Scan only this Mode */ -#define IW_SCAN_ALL_RATE 0x0040 /* Scan all Bit-Rates */ -#define IW_SCAN_THIS_RATE 0x0080 /* Scan only this Bit-Rate */ -/* struct iw_scan_req scan_type */ -#define IW_SCAN_TYPE_ACTIVE 0 -#define IW_SCAN_TYPE_PASSIVE 1 -/* Maximum size of returned data */ -#define IW_SCAN_MAX_DATA 4096 /* In bytes */ - -/* Max number of char in custom event - use multiple of them if needed */ -#define IW_CUSTOM_MAX 256 /* In bytes */ - -/* Generic information element */ -#define IW_GENERIC_IE_MAX 1024 - -/* MLME requests (SIOCSIWMLME / struct iw_mlme) */ -#define IW_MLME_DEAUTH 0 -#define IW_MLME_DISASSOC 1 -#define IW_MLME_AUTH 2 -#define IW_MLME_ASSOC 3 - -/* SIOCSIWAUTH/SIOCGIWAUTH struct iw_param flags */ -#define IW_AUTH_INDEX 0x0FFF -#define IW_AUTH_FLAGS 0xF000 -/* SIOCSIWAUTH/SIOCGIWAUTH parameters (0 .. 4095) - * (IW_AUTH_INDEX mask in struct iw_param flags; this is the index of the - * parameter that is being set/get to; value will be read/written to - * struct iw_param value field) */ -#define IW_AUTH_WPA_VERSION 0 -#define IW_AUTH_CIPHER_PAIRWISE 1 -#define IW_AUTH_CIPHER_GROUP 2 -#define IW_AUTH_KEY_MGMT 3 -#define IW_AUTH_TKIP_COUNTERMEASURES 4 -#define IW_AUTH_DROP_UNENCRYPTED 5 -#define IW_AUTH_80211_AUTH_ALG 6 -#define IW_AUTH_WPA_ENABLED 7 -#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8 -#define IW_AUTH_ROAMING_CONTROL 9 -#define IW_AUTH_PRIVACY_INVOKED 10 - -/* IW_AUTH_WPA_VERSION values (bit field) */ -#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001 -#define IW_AUTH_WPA_VERSION_WPA 0x00000002 -#define IW_AUTH_WPA_VERSION_WPA2 0x00000004 - -/* IW_AUTH_PAIRWISE_CIPHER and IW_AUTH_GROUP_CIPHER values (bit field) */ -#define IW_AUTH_CIPHER_NONE 0x00000001 -#define IW_AUTH_CIPHER_WEP40 0x00000002 -#define IW_AUTH_CIPHER_TKIP 0x00000004 -#define IW_AUTH_CIPHER_CCMP 0x00000008 -#define IW_AUTH_CIPHER_WEP104 0x00000010 - -/* IW_AUTH_KEY_MGMT values (bit field) */ -#define IW_AUTH_KEY_MGMT_802_1X 1 -#define IW_AUTH_KEY_MGMT_PSK 2 - -/* IW_AUTH_80211_AUTH_ALG values (bit field) */ -#define IW_AUTH_ALG_OPEN_SYSTEM 0x00000001 -#define IW_AUTH_ALG_SHARED_KEY 0x00000002 -#define IW_AUTH_ALG_LEAP 0x00000004 - -/* IW_AUTH_ROAMING_CONTROL values */ -#define IW_AUTH_ROAMING_ENABLE 0 /* driver/firmware based roaming */ -#define IW_AUTH_ROAMING_DISABLE 1 /* user space program used for roaming - * control */ - -/* SIOCSIWENCODEEXT definitions */ -#define IW_ENCODE_SEQ_MAX_SIZE 8 -/* struct iw_encode_ext ->alg */ -#define IW_ENCODE_ALG_NONE 0 -#define IW_ENCODE_ALG_WEP 1 -#define IW_ENCODE_ALG_TKIP 2 -#define IW_ENCODE_ALG_CCMP 3 -/* struct iw_encode_ext ->ext_flags */ -#define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001 -#define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002 -#define IW_ENCODE_EXT_GROUP_KEY 0x00000004 -#define IW_ENCODE_EXT_SET_TX_KEY 0x00000008 - -/* IWEVMICHAELMICFAILURE : struct iw_michaelmicfailure ->flags */ -#define IW_MICFAILURE_KEY_ID 0x00000003 /* Key ID 0..3 */ -#define IW_MICFAILURE_GROUP 0x00000004 -#define IW_MICFAILURE_PAIRWISE 0x00000008 -#define IW_MICFAILURE_STAKEY 0x00000010 -#define IW_MICFAILURE_COUNT 0x00000060 /* 1 or 2 (0 = count not supported) - */ - -/* Bit field values for enc_capa in struct iw_range */ -#define IW_ENC_CAPA_WPA 0x00000001 -#define IW_ENC_CAPA_WPA2 0x00000002 -#define IW_ENC_CAPA_CIPHER_TKIP 0x00000004 -#define IW_ENC_CAPA_CIPHER_CCMP 0x00000008 - -/* Event capability macros - in (struct iw_range *)->event_capa - * Because we have more than 32 possible events, we use an array of - * 32 bit bitmasks. Note : 32 bits = 0x20 = 2^5. */ -#define IW_EVENT_CAPA_BASE(cmd) ((cmd >= SIOCIWFIRSTPRIV) ? \ - (cmd - SIOCIWFIRSTPRIV + 0x60) : \ - (cmd - SIOCSIWCOMMIT)) -#define IW_EVENT_CAPA_INDEX(cmd) (IW_EVENT_CAPA_BASE(cmd) >> 5) -#define IW_EVENT_CAPA_MASK(cmd) (1 << (IW_EVENT_CAPA_BASE(cmd) & 0x1F)) -/* Event capability constants - event autogenerated by the kernel - * This list is valid for most 802.11 devices, customise as needed... */ -#define IW_EVENT_CAPA_K_0 (IW_EVENT_CAPA_MASK(0x8B04) | \ - IW_EVENT_CAPA_MASK(0x8B06) | \ - IW_EVENT_CAPA_MASK(0x8B1A)) -#define IW_EVENT_CAPA_K_1 (IW_EVENT_CAPA_MASK(0x8B2A)) -/* "Easy" macro to set events in iw_range (less efficient) */ -#define IW_EVENT_CAPA_SET(event_capa, cmd) (event_capa[IW_EVENT_CAPA_INDEX(cmd)] |= IW_EVENT_CAPA_MASK(cmd)) -#define IW_EVENT_CAPA_SET_KERNEL(event_capa) {event_capa[0] |= IW_EVENT_CAPA_K_0; event_capa[1] |= IW_EVENT_CAPA_K_1; } - -/* Modulations bitmasks */ -#define IW_MODUL_ALL 0x00000000 /* Everything supported */ -#define IW_MODUL_FH 0x00000001 /* Frequency Hopping */ -#define IW_MODUL_DS 0x00000002 /* Original Direct Sequence */ -#define IW_MODUL_CCK 0x00000004 /* 802.11b : 5.5 + 11 Mb/s */ -#define IW_MODUL_11B (IW_MODUL_DS | IW_MODUL_CCK) -#define IW_MODUL_PBCC 0x00000008 /* TI : 5.5 + 11 + 22 Mb/s */ -#define IW_MODUL_OFDM_A 0x00000010 /* 802.11a : 54 Mb/s */ -#define IW_MODUL_11A (IW_MODUL_OFDM_A) -#define IW_MODUL_11AB (IW_MODUL_11B | IW_MODUL_11A) -#define IW_MODUL_OFDM_G 0x00000020 /* 802.11g : 54 Mb/s */ -#define IW_MODUL_11G (IW_MODUL_11B | IW_MODUL_OFDM_G) -#define IW_MODUL_11AG (IW_MODUL_11G | IW_MODUL_11A) -#define IW_MODUL_TURBO 0x00000040 /* ATH : bonding, 108 Mb/s */ -/* In here we should define MIMO stuff. Later... */ -#define IW_MODUL_CUSTOM 0x40000000 /* Driver specific */ - -/* Bitrate flags available */ -#define IW_BITRATE_TYPE 0x00FF /* Type of value */ -#define IW_BITRATE_UNICAST 0x0001 /* Maximum/Fixed unicast bitrate */ -#define IW_BITRATE_BROADCAST 0x0002 /* Fixed broadcast bitrate */ - -/****************************** TYPES ******************************/ - -/* --------------------------- SUBTYPES --------------------------- */ - -struct sockaddr_t { - uint8_t sa_len; - uint8_t sa_family; - char sa_data[14]; -}; - -/* - * Generic format for most parameters that fit in an int - */ -struct iw_param -{ - int32_t value; /* The value of the parameter itself */ - uint8_t fixed; /* Hardware should not use auto select */ - uint8_t disabled; /* Disable the feature */ - uint16_t flags; /* Various specifc flags (if any) */ -}; - -/* - * For all data larger than 16 octets, we need to use a - * pointer to memory allocated in user space. - */ -struct iw_point -{ - void *pointer; /* Pointer to the data (in user space) */ - uint16_t length; /* number of fields or size in bytes */ - uint16_t flags; /* Optional params */ -}; - -/* - * A frequency - * For numbers lower than 10^9, we encode the number in 'm' and - * set 'e' to 0 - * For number greater than 10^9, we divide it by the lowest power - * of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')... - * The power of 10 is in 'e', the result of the division is in 'm'. - */ -struct iw_freq -{ - int32_t m; /* Mantissa */ - int16_t e; /* Exponent */ - uint8_t i; /* List index (when in range struct) */ - uint8_t flags; /* Flags (fixed/auto) */ -}; - -/* - * Quality of the link - */ -struct iw_quality -{ - uint8_t qual; /* link quality (%retries, SNR, - %missed beacons or better...) */ - uint8_t level; /* signal level (dBm) */ - uint8_t noise; /* noise level (dBm) */ - uint8_t updated; /* Flags to know if updated */ -}; - -/* - * Packet discarded in the wireless adapter due to - * "wireless" specific problems... - * Note : the list of counter and statistics in net_device_stats - * is already pretty exhaustive, and you should use that first. - * This is only additional stats... - */ -struct iw_discarded -{ - uint32_t nwid; /* Rx : Wrong nwid/essid */ - uint32_t code; /* Rx : Unable to code/decode (WEP) */ - uint32_t fragment; /* Rx : Can't perform MAC reassembly */ - uint32_t retries; /* Tx : Max MAC retries num reached */ - uint32_t misc; /* Others cases */ -}; - -/* - * Packet/Time period missed in the wireless adapter due to - * "wireless" specific problems... - */ -struct iw_missed -{ - uint32_t beacon; /* Missed beacons/superframe */ -}; - -/* - * Quality range (for spy threshold) - */ -struct iw_thrspy -{ - struct sockaddr_t addr; /* Source address (hw/mac) */ - struct iw_quality qual; /* Quality of the link */ - struct iw_quality low; /* Low threshold */ - struct iw_quality high; /* High threshold */ -}; - -/* - * Optional data for scan request - * - * Note: these optional parameters are controlling parameters for the - * scanning behavior, these do not apply to getting scan results - * (SIOCGIWSCAN). Drivers are expected to keep a local BSS table and - * provide a merged results with all BSSes even if the previous scan - * request limited scanning to a subset, e.g., by specifying an SSID. - * Especially, scan results are required to include an entry for the - * current BSS if the driver is in Managed mode and associated with an AP. - */ -struct iw_scan_req -{ - uint8_t scan_type; /* IW_SCAN_TYPE_{ACTIVE,PASSIVE} */ - uint8_t essid_len; - uint8_t num_channels; /* num entries in channel_list; - * 0 = scan all allowed channels */ - uint8_t flags; /* reserved as padding; use zero, this may - * be used in the future for adding flags - * to request different scan behavior */ - struct sockaddr_t bssid; /* ff:ff:ff:ff:ff:ff for broadcast BSSID or - * individual address of a specific BSS */ - - /* - * Use this ESSID if IW_SCAN_THIS_ESSID flag is used instead of using - * the current ESSID. This allows scan requests for specific ESSID - * without having to change the current ESSID and potentially breaking - * the current association. - */ - uint8_t essid[IW_ESSID_MAX_SIZE]; - - /* - * Optional parameters for changing the default scanning behavior. - * These are based on the MLME-SCAN.request from IEEE Std 802.11. - * TU is 1.024 ms. If these are set to 0, driver is expected to use - * reasonable default values. min_channel_time defines the time that - * will be used to wait for the first reply on each channel. If no - * replies are received, next channel will be scanned after this. If - * replies are received, total time waited on the channel is defined by - * max_channel_time. - */ - uint32_t min_channel_time; /* in TU */ - uint32_t max_channel_time; /* in TU */ - - struct iw_freq channel_list[IW_MAX_FREQUENCIES]; -}; - -/* ------------------------- WPA SUPPORT ------------------------- */ - -/* - * Extended data structure for get/set encoding (this is used with - * SIOCSIWENCODEEXT/SIOCGIWENCODEEXT. struct iw_point and IW_ENCODE_* - * flags are used in the same way as with SIOCSIWENCODE/SIOCGIWENCODE and - * only the data contents changes (key data -> this structure, including - * key data). - * - * If the new key is the first group key, it will be set as the default - * TX key. Otherwise, default TX key index is only changed if - * IW_ENCODE_EXT_SET_TX_KEY flag is set. - * - * Key will be changed with SIOCSIWENCODEEXT in all cases except for - * special "change TX key index" operation which is indicated by setting - * key_len = 0 and ext_flags |= IW_ENCODE_EXT_SET_TX_KEY. - * - * tx_seq/rx_seq are only used when respective - * IW_ENCODE_EXT_{TX,RX}_SEQ_VALID flag is set in ext_flags. Normal - * TKIP/CCMP operation is to set RX seq with SIOCSIWENCODEEXT and start - * TX seq from zero whenever key is changed. SIOCGIWENCODEEXT is normally - * used only by an Authenticator (AP or an IBSS station) to get the - * current TX sequence number. Using TX_SEQ_VALID for SIOCSIWENCODEEXT and - * RX_SEQ_VALID for SIOCGIWENCODEEXT are optional, but can be useful for - * debugging/testing. - */ -struct iw_encode_ext -{ - uint32_t ext_flags; /* IW_ENCODE_EXT_* */ - uint8_t tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ - uint8_t rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ - struct sockaddr_t addr; /* ff:ff:ff:ff:ff:ff for broadcast/multicast - * (group) keys or unicast address for - * individual keys */ - uint16_t alg; /* IW_ENCODE_ALG_* */ - uint16_t key_len; -#ifdef __CC_ARM //Fix Keil compile error, must modify sizeof iw_encode_ext - Alex Fang - uint8_t key[1]; -#else - uint8_t key[0]; -#endif -}; - -/* SIOCSIWMLME data */ -struct iw_mlme -{ - uint16_t cmd; /* IW_MLME_* */ - uint16_t reason_code; - struct sockaddr_t addr; -}; - -/* SIOCSIWPMKSA data */ -#define IW_PMKSA_ADD 1 -#define IW_PMKSA_REMOVE 2 -#define IW_PMKSA_FLUSH 3 - -#define IW_PMKID_LEN 16 - -struct iw_pmksa -{ - uint32_t cmd; /* IW_PMKSA_* */ - struct sockaddr_t bssid; - uint8_t pmkid[IW_PMKID_LEN]; -}; - -/* IWEVMICHAELMICFAILURE data */ -struct iw_michaelmicfailure -{ - uint32_t flags; - struct sockaddr_t src_addr; - uint8_t tsc[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ -}; - -/* IWEVPMKIDCAND data */ -#define IW_PMKID_CAND_PREAUTH 0x00000001 /* RNS pre-authentication enabled */ -struct iw_pmkid_cand -{ - uint32_t flags; /* IW_PMKID_CAND_* */ - uint32_t index; /* the smaller the index, the higher the - * priority */ - struct sockaddr_t bssid; -}; - -/* ------------------------ WIRELESS STATS ------------------------ */ -/* - * Wireless statistics (used for /proc/net/wireless) - */ -struct iw_statistics -{ - uint16_t status; /* Status - * - device dependent for now */ - - struct iw_quality qual; /* Quality of the link - * (instant/mean/max) */ - struct iw_discarded discard; /* Packet discarded counts */ - struct iw_missed miss; /* Packet missed counts */ -}; - -/* ------------------------ IOCTL REQUEST ------------------------ */ -/* - * This structure defines the payload of an ioctl, and is used - * below. - * - * Note that this structure should fit on the memory footprint - * of iwreq (which is the same as ifreq), which mean a max size of - * 16 octets = 128 bits. Warning, pointers might be 64 bits wide... - * You should check this when increasing the structures defined - * above in this file... - */ -union iwreq_data -{ - /* Config - generic */ - char name[IFNAMSIZ]; - /* Name : used to verify the presence of wireless extensions. - * Name of the protocol/provider... */ - - struct iw_point essid; /* Extended network name */ - struct iw_param nwid; /* network id (or domain - the cell) */ - struct iw_freq freq; /* frequency or channel : - * 0-1000 = channel - * > 1000 = frequency in Hz */ - - struct iw_param sens; /* signal level threshold */ - struct iw_param bitrate; /* default bit rate */ - struct iw_param txpower; /* default transmit power */ - struct iw_param rts; /* RTS threshold threshold */ - struct iw_param frag; /* Fragmentation threshold */ - uint32_t mode; /* Operation mode */ - struct iw_param retry; /* Retry limits & lifetime */ - - struct iw_point encoding; /* Encoding stuff : tokens */ - struct iw_param power; /* PM duration/timeout */ - struct iw_quality qual; /* Quality part of statistics */ - - struct sockaddr_t ap_addr; /* Access point address */ - struct sockaddr_t addr; /* Destination address (hw/mac) */ - - struct iw_param param; /* Other small parameters */ - struct iw_point data; /* Other large parameters */ - struct iw_point passphrase; /* Extended network name */ -}; - -/* - * The structure to exchange data for ioctl. - * This structure is the same as 'struct ifreq', but (re)defined for - * convenience... - * Do I need to remind you about structure size (32 octets) ? - */ -struct iwreq -{ -#if 0 - union - { - char ifrn_name[IFNAMSIZ]; /* if name, e.g. "eth0" */ - } ifr_ifrn; -#endif - char ifr_name[IFNAMSIZ]; /* if name, e.g. "eth0" */ - - /* Data part (defined just above) */ - union iwreq_data u; -}; - -/* -------------------------- IOCTL DATA -------------------------- */ -/* - * For those ioctl which want to exchange mode data that what could - * fit in the above structure... - */ - -/* - * Range of parameters - */ - -struct iw_range -{ - /* Informative stuff (to choose between different interface) */ - uint32_t throughput; /* To give an idea... */ - /* In theory this value should be the maximum benchmarked - * TCP/IP throughput, because with most of these devices the - * bit rate is meaningless (overhead an co) to estimate how - * fast the connection will go and pick the fastest one. - * I suggest people to play with Netperf or any benchmark... - */ - - /* NWID (or domain id) */ - uint32_t min_nwid; /* Minimal NWID we are able to set */ - uint32_t max_nwid; /* Maximal NWID we are able to set */ - - /* Old Frequency (backward compat - moved lower ) */ - uint16_t old_num_channels; - uint8_t old_num_frequency; - - /* Wireless event capability bitmasks */ - uint32_t event_capa[6]; - - /* signal level threshold range */ - int32_t sensitivity; - - /* Quality of link & SNR stuff */ - /* Quality range (link, level, noise) - * If the quality is absolute, it will be in the range [0 ; max_qual], - * if the quality is dBm, it will be in the range [max_qual ; 0]. - * Don't forget that we use 8 bit arithmetics... */ - struct iw_quality max_qual; /* Quality of the link */ - /* This should contain the average/typical values of the quality - * indicator. This should be the threshold between a "good" and - * a "bad" link (example : monitor going from green to orange). - * Currently, user space apps like quality monitors don't have any - * way to calibrate the measurement. With this, they can split - * the range between 0 and max_qual in different quality level - * (using a geometric subdivision centered on the average). - * I expect that people doing the user space apps will feedback - * us on which value we need to put in each driver... */ - struct iw_quality avg_qual; /* Quality of the link */ - - /* Rates */ - uint8_t num_bitrates; /* Number of entries in the list */ - int32_t bitrate[IW_MAX_BITRATES]; /* list, in bps */ - - /* RTS threshold */ - int32_t min_rts; /* Minimal RTS threshold */ - int32_t max_rts; /* Maximal RTS threshold */ - - /* Frag threshold */ - int32_t min_frag; /* Minimal frag threshold */ - int32_t max_frag; /* Maximal frag threshold */ - - /* Power Management duration & timeout */ - int32_t min_pmp; /* Minimal PM period */ - int32_t max_pmp; /* Maximal PM period */ - int32_t min_pmt; /* Minimal PM timeout */ - int32_t max_pmt; /* Maximal PM timeout */ - uint16_t pmp_flags; /* How to decode max/min PM period */ - uint16_t pmt_flags; /* How to decode max/min PM timeout */ - uint16_t pm_capa; /* What PM options are supported */ - - /* Encoder stuff */ - uint16_t encoding_size[IW_MAX_ENCODING_SIZES]; /* Different token sizes */ - uint8_t num_encoding_sizes; /* Number of entry in the list */ - uint8_t max_encoding_tokens; /* Max number of tokens */ - /* For drivers that need a "login/passwd" form */ - uint8_t encoding_login_index; /* token index for login token */ - - /* Transmit power */ - uint16_t txpower_capa; /* What options are supported */ - uint8_t num_txpower; /* Number of entries in the list */ - int32_t txpower[IW_MAX_TXPOWER]; /* list, in bps */ - - /* Wireless Extension version info */ - uint8_t we_version_compiled; /* Must be WIRELESS_EXT */ - uint8_t we_version_source; /* Last update of source */ - - /* Retry limits and lifetime */ - uint16_t retry_capa; /* What retry options are supported */ - uint16_t retry_flags; /* How to decode max/min retry limit */ - uint16_t r_time_flags; /* How to decode max/min retry life */ - int32_t min_retry; /* Minimal number of retries */ - int32_t max_retry; /* Maximal number of retries */ - int32_t min_r_time; /* Minimal retry lifetime */ - int32_t max_r_time; /* Maximal retry lifetime */ - - /* Frequency */ - uint16_t num_channels; /* Number of channels [0; num - 1] */ - uint8_t num_frequency; /* Number of entry in the list */ - struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */ - /* Note : this frequency list doesn't need to fit channel numbers, - * because each entry contain its channel index */ - - uint32_t enc_capa; /* IW_ENC_CAPA_* bit field */ - - /* More power management stuff */ - int32_t min_pms; /* Minimal PM saving */ - int32_t max_pms; /* Maximal PM saving */ - uint16_t pms_flags; /* How to decode max/min PM saving */ - - /* All available modulations for driver (hw may support less) */ - int32_t modul_capa; /* IW_MODUL_* bit field */ - - /* More bitrate stuff */ - uint32_t bitrate_capa; /* Types of bitrates supported */ -}; - -/* - * Private ioctl interface information - */ - -struct iw_priv_args -{ - uint32_t cmd; /* Number of the ioctl to issue */ - uint16_t set_args; /* Type and number of args */ - uint16_t get_args; /* Type and number of args */ - char name[IFNAMSIZ]; /* Name of the extension */ -}; - -/* ----------------------- WIRELESS EVENTS ----------------------- */ -/* - * Wireless events are carried through the rtnetlink socket to user - * space. They are encapsulated in the IFLA_WIRELESS field of - * a RTM_NEWLINK message. - */ - -/* - * A Wireless Event. Contains basically the same data as the ioctl... - */ -struct iw_event -{ - uint16_t len; /* Real lenght of this stuff */ - uint16_t cmd; /* Wireless IOCTL */ - union iwreq_data u; /* IOCTL fixed payload */ -}; - -/* Size of the Event prefix (including padding and alignement junk) */ -#define IW_EV_LCP_LEN (sizeof(struct iw_event) - sizeof(union iwreq_data)) -/* Size of the various events */ -#define IW_EV_CHAR_LEN (IW_EV_LCP_LEN + IFNAMSIZ) -#define IW_EV_UINT_LEN (IW_EV_LCP_LEN + sizeof(uint32_t)) -#define IW_EV_FREQ_LEN (IW_EV_LCP_LEN + sizeof(struct iw_freq)) -#define IW_EV_PARAM_LEN (IW_EV_LCP_LEN + sizeof(struct iw_param)) -#define IW_EV_ADDR_LEN (IW_EV_LCP_LEN + sizeof(struct sockaddr_t)) -#define IW_EV_QUAL_LEN (IW_EV_LCP_LEN + sizeof(struct iw_quality)) - -/* iw_point events are special. First, the payload (extra data) come at - * the end of the event, so they are bigger than IW_EV_POINT_LEN. Second, - * we omit the pointer, so start at an offset. */ -#define IW_EV_POINT_OFF (((char *) &(((struct iw_point *) NULL)->length)) - \ - (char *) NULL) -#define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point) - \ - IW_EV_POINT_OFF) - -/* Size of the Event prefix when packed in stream */ -#define IW_EV_LCP_PK_LEN (4) -/* Size of the various events when packed in stream */ -#define IW_EV_CHAR_PK_LEN (IW_EV_LCP_PK_LEN + IFNAMSIZ) -#define IW_EV_UINT_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(uint32_t)) -#define IW_EV_FREQ_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(struct iw_freq)) -#define IW_EV_PARAM_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(struct iw_param)) -#define IW_EV_ADDR_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(struct sockaddr_t)) -#define IW_EV_QUAL_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(struct iw_quality)) -#define IW_EV_POINT_PK_LEN (IW_EV_LCP_LEN + 4) - -#define IW_EXT_STR_FOURWAY_DONE "WPA/WPA2 handshake done" -#define IW_EXT_STR_RECONNECTION_FAIL "RECONNECTION FAILURE" -#define IW_EVT_STR_STA_ASSOC "STA Assoc" -#define IW_EVT_STR_STA_DISASSOC "STA Disassoc" -#define IW_EVT_STR_SEND_ACTION_DONE "Send Action Done" -#define IW_EVT_STR_NO_NETWORK "No Assoc Network After Scan Done" -#endif /* _LINUX_WIRELESS_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/wlan_intf.h b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/wlan_intf.h deleted file mode 100644 index b586e0c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/osdep/wlan_intf.h +++ /dev/null @@ -1,81 +0,0 @@ -/****************************************************************************** - * Copyright (c) 2013-2016 Realtek Semiconductor Corp. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ -#ifndef __WLAN_INTF_H__ -#define __WLAN_INTF_H__ - -#ifdef __cplusplus -extern "C" { -#endif -#include - -#include -#include "wifi_constants.h" - -#ifndef WLAN0_IDX - #define WLAN0_IDX 0 -#endif -#ifndef WLAN1_IDX - #define WLAN1_IDX 1 -#endif -#ifndef WLAN_UNDEF - #define WLAN_UNDEF -1 -#endif - -/***********************************************************/ -/* -struct sk_buff { - // These two members must be first. - struct sk_buff *next; // Next buffer in list - struct sk_buff *prev; // Previous buffer in list - - struct sk_buff_head *list; // List we are on - unsigned char *head; // Head of buffer - unsigned char *data; // Data head pointer - unsigned char *tail; // Tail pointer - unsigned char *end; //End pointer - struct net_device *dev; //Device we arrived on/are leaving by - unsigned int len; // Length of actual data -}; -*/ -/************************************************************/ - -//----- ------------------------------------------------------------------ -// Wlan Interface opened for upper layer -//----- ------------------------------------------------------------------ -int rltk_wlan_init(int idx_wlan, rtw_mode_t mode); //return 0: success. -1:fail -void rltk_wlan_deinit(void); -void rltk_wlan_deinit_fastly(void); -int rltk_wlan_start(int idx_wlan); -void rltk_wlan_statistic(unsigned char idx); -unsigned char rltk_wlan_running(unsigned char idx); // interface is up. 0: interface is down -int rltk_wlan_control(unsigned long cmd, void *data); -int rltk_wlan_handshake_done(void); -int rltk_wlan_rf_on(void); -int rltk_wlan_rf_off(void); -int rltk_wlan_check_bus(void); -int rltk_wlan_wireless_mode(unsigned char mode); -int rltk_wlan_set_wps_phase(unsigned char is_trigger_wps); -int rtw_ps_enable(int enable); -int rltk_wlan_is_connected_to_ap(void); - - -#ifdef __cplusplus -} -#endif - - - -#endif //#ifndef __WLAN_INTF_H__ diff --git a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/wifi_skbuf.c b/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/wifi_skbuf.c deleted file mode 100644 index 1e4dd3f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/drivers/wlan/realtek/src/wifi_skbuf.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#undef MAX_SKB_BUF_NUM -#define MAX_SKB_BUF_NUM 16 - -// DO NOT modify this structure -struct skb_data { - struct list_head list; - unsigned char buf[MAX_SKB_BUF_SIZE]; - atomic_t ref; -}; - -SRAM_BD_DATA_SECTION -struct skb_data skb_data_pool[MAX_SKB_BUF_NUM]; diff --git a/Firmware/RTLGDB/USDK/component/common/example/bcast/example_bcast.c b/Firmware/RTLGDB/USDK/component/common/example/bcast/example_bcast.c deleted file mode 100644 index dfb1675..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/bcast/example_bcast.c +++ /dev/null @@ -1,81 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include - -#include -#include -#include - -static void example_bcast_thread(void *param) -{ - int socket = -1; - int broadcast = 1; - struct sockaddr_in bindAddr; - uint16_t port = 49152; - unsigned char packet[1024]; - - // Create socket - if((socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { - printf("ERROR: socket failed\n"); - goto err; - } - - // Set broadcast socket option - if(setsockopt(socket, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast)) < 0){ - printf("ERROR: setsockopt failed\n"); - goto err; - } - - // Set the bind address - memset(&bindAddr, 0, sizeof(bindAddr)); - bindAddr.sin_family = AF_INET; - bindAddr.sin_port = htons(port); - bindAddr.sin_addr.s_addr = INADDR_ANY; - if(bind(socket, (struct sockaddr *) &bindAddr, sizeof(bindAddr)) < 0){ - printf("ERROR: bind failed\n"); - goto err; - } - - - while(1) { - // Receive broadcast - int packetLen; - struct sockaddr from; - struct sockaddr_in *from_sin = (struct sockaddr_in*) &from; - socklen_t fromLen = sizeof(from); - - if((packetLen = recvfrom(socket, &packet, sizeof(packet), 0, &from, &fromLen)) >= 0) { - uint8_t *ip = (uint8_t *) &from_sin->sin_addr.s_addr; - uint16_t from_port = ntohs(from_sin->sin_port); - printf("recvfrom - %d bytes from %d.%d.%d.%d:%d\n", packetLen, ip[0], ip[1], ip[2], ip[3], from_port); - } - - // Send broadcast - if(packetLen > 0) { - int sendLen; - struct sockaddr to; - struct sockaddr_in *to_sin = (struct sockaddr_in*) &to; - to_sin->sin_family = AF_INET; - to_sin->sin_port = htons(port); - to_sin->sin_addr.s_addr = INADDR_ANY; - - if((sendLen = sendto(socket, packet, packetLen, 0, &to, sizeof(struct sockaddr))) < 0) - printf("ERROR: sendto broadcast\n"); - else - printf("sendto - %d bytes to broadcast:%d\n", sendLen, port); - } - } - - -err: - printf("ERROR: broadcast example failed\n"); - close(socket); - vTaskDelete(NULL); - return; -} - -void example_bcast(void) -{ - if(xTaskCreate(example_bcast_thread, ((const char*)"example_bcast_thread"), 2048, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) - printf("\n\r%s xTaskCreate(init_thread) failed", __FUNCTION__); -} diff --git a/Firmware/RTLGDB/USDK/component/common/example/bcast/example_bcast.h b/Firmware/RTLGDB/USDK/component/common/example/bcast/example_bcast.h deleted file mode 100644 index 56e557c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/bcast/example_bcast.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef EXAMPLE_BCAST_H -#define EXAMPLE_BCAST_H - -void example_bcast(void); - -#endif /* EXAMPLE_BCAST_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/example/bcast/readme.txt b/Firmware/RTLGDB/USDK/component/common/example/bcast/readme.txt deleted file mode 100644 index 95e70a2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/bcast/readme.txt +++ /dev/null @@ -1,28 +0,0 @@ -LWIP BROADCAST EXAMPLE - -Description: -Listen broadcast message on port 49152. -Send packet with the content of received packet to broadcast address. - -Configuration: -[lwipopts.h] - #define LWIP_UDP 1 -[platform_opts.h] - #define CONFIG_EXAMPLE_BCAST 1 - -Execution: -Can make automatical Wi-Fi connection when booting by using wlan fast connect example. -A broadcast example thread will be started automatically when booting. - -Test: -1. Prepare a NB and connect to the same AP Ameba connected. -2. NB: iperf -c 192.168.1.255 -t 60 -i 1 -p 49152 -u -3. The recv/send messages should be printed out on Ameba console. -4. Use sniffer to make sure the packets send from Ameba are broadcast messages. - -Note: -If you encounter some message like: - ERROR: sendto broadcast - [Driver]: skb_unavailable=1 in last 2 seconds -It means that the skb buffer is not enough for the massive UDP packets to be sent. -If you want to prevent the error you can add some delay time between sending packets or enlarge the skb buffer configuration. \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/example/cJSON/cJSON_example.c b/Firmware/RTLGDB/USDK/component/common/example/cJSON/cJSON_example.c deleted file mode 100644 index f336a36..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/cJSON/cJSON_example.c +++ /dev/null @@ -1,84 +0,0 @@ -#include "cmsis_os.h" -#include - -#define malloc pvPortMalloc -#define free vPortFree - -/* The data structure for this example - -{ - "Motion_Sensor" : "i", - "Light" : { - "Red" : "0", - "Green" : "0", - "Blue" : "0", - } - -} - -*/ -static void gen_json_data(int i, int r, int g, int b) -{ - - - cJSON_Hooks memoryHook; - - memoryHook.malloc_fn = malloc; - memoryHook.free_fn = free; - cJSON_InitHooks(&memoryHook); - - - cJSON *IOTJSObject = NULL, *colorJSObject = NULL; - char *iot_json = NULL; - - if((IOTJSObject = cJSON_CreateObject()) != NULL) { - - cJSON_AddItemToObject(IOTJSObject, "Motion_Sensor", cJSON_CreateNumber(i)); - cJSON_AddItemToObject(IOTJSObject, "Light", colorJSObject = cJSON_CreateObject()); - - cJSON_AddItemToObject(colorJSObject, "Red", cJSON_CreateNumber(r)); - cJSON_AddItemToObject(colorJSObject, "Green", cJSON_CreateNumber(g)); - cJSON_AddItemToObject(colorJSObject, "Blue", cJSON_CreateNumber(b)); - - iot_json = cJSON_Print(IOTJSObject); - cJSON_Delete(IOTJSObject); - - } - -} - -static void handle_json_data(char *iot_json) -{ - cJSON_Hooks memoryHook; - - memoryHook.malloc_fn = malloc; - memoryHook.free_fn = free; - cJSON_InitHooks(&memoryHook); - - - cJSON *IOTJSObject, *sensorJSObject, *lightJSObject, *redJSObject, *greenJSObject, *blueJSObject; - int sensor_data, red, green, blue; - - if((IOTJSObject = cJSON_Parse(iot_json)) != NULL) { - sensorJSObject = cJSON_GetObjectItem(IOTJSObject, "Motion_Sensor"); - if(sensorJSObject) - sensor_data = sensorJSObject->valueint; - - lightJSObject = cJSON_GetObjectItem(IOTJSObject, "Light"); - - if(lightJSObject){ - redJSObject = cJSON_GetObjectItem(lightJSObject, "Red"); - greenJSObject = cJSON_GetObjectItem(lightJSObject, "Green"); - blueJSObject = cJSON_GetObjectItem(lightJSObject, "Blue"); - - if(redJSObject) - red = redJSObject->valueint; - if(greenJSObject) - green = greenJSObject->valueint; - if(blueJSObject) - blue = blueJSObject->valueint; - } - - cJSON_Delete(IOTJSObject); - } -} diff --git a/Firmware/RTLGDB/USDK/component/common/example/dct/README.txt b/Firmware/RTLGDB/USDK/component/common/example/dct/README.txt deleted file mode 100644 index f3441bd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/dct/README.txt +++ /dev/null @@ -1,16 +0,0 @@ -DCT example - -Description: -This example shows device configuration table API usage, and user can use DCT api to replace file system. - -Configuration: -1. [platform_opts.h] - #define CONFIG_EXAMPLE_DCT 1 - -Execution: -it will show: - variable0: value0 - variable1: value1 - Delete variable0 success. - Remaining amount: 61 -if DCT is correctly used. \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/example/dct/example_dct.c b/Firmware/RTLGDB/USDK/component/common/example/dct/example_dct.c deleted file mode 100644 index a55d58d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/dct/example_dct.c +++ /dev/null @@ -1,85 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#if CONFIG_EXAMPLE_DCT - -#define DCT_BEGIN_ADDR 0x100000 /*!< DCT begin address of flash, ex: 0x100000 = 1M */ -#define MODULE_NUM 6 /*!< max number of module */ -#define VARIABLE_NAME_SIZE 32 /*!< max size of the variable name */ -#define VARIABLE_VALUE_SIZE 32 /*!< max size of the variable value */ - -static char example_dct_module[] = "dct_test_module"; -static char example_dct_variable0[] = "variable0"; -static char example_dct_variable1[] = "variable1"; -static char example_dct_value0[] = "value0"; -static char example_dct_value1[] = "value1"; - -void example_dct_thread(void* param){ - int32_t ret = -1; - dct_handle_t dct_handle; - char value[16]; - - // format DCT, use for the first time - ret = dct_format(DCT_BEGIN_ADDR, MODULE_NUM, VARIABLE_NAME_SIZE, VARIABLE_VALUE_SIZE, 1); - - // initial DCT - ret = dct_init(DCT_BEGIN_ADDR); - - // register module - ret = dct_register_module(example_dct_module); - - // open module - ret = dct_open_module(&dct_handle, example_dct_module); - - if(ret == DCT_SUCCESS){ - // set test variable 0 - ret = dct_set_variable(&dct_handle, example_dct_variable0, example_dct_value0); - - // set test variable 1 - ret = dct_set_variable(&dct_handle, example_dct_variable1, example_dct_value1); - - // get value of test variable 0 - memset(value, 0, sizeof(value)); - ret = dct_get_variable(&dct_handle, example_dct_variable0, value, sizeof(value)); - if(ret == DCT_SUCCESS) - printf("%s: %s\n", example_dct_variable0, value); - - // get value of test variable 1 - memset(value, 0, sizeof(value)); - ret = dct_get_variable(&dct_handle, example_dct_variable1, value, sizeof(value)); - if(ret == DCT_SUCCESS) - printf("%s: %s\n", example_dct_variable1, value); - - // delete test variable 0 - ret = dct_delete_variable(&dct_handle, example_dct_variable0); - - // get value of test variable 0 - memset(value, 0, sizeof(value)); - ret = dct_get_variable(&dct_handle, example_dct_variable0, value, sizeof(value)); - if(ret == DCT_ERR_NOT_FIND) - printf("Delete %s success.\n", example_dct_variable0); - - // get variable remaining amount - ret = dct_remain_variable(&dct_handle); - if(ret > 0) - printf("Remaining variable amount:%d\n", ret); - - // close module - ret = dct_close_module(&dct_handle); - } - - vTaskDelete(NULL); -} - - -void example_dct(void) -{ - if(xTaskCreate(example_dct_thread, ((const char*)"example_dct_thread"), 1024, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) - printf("\n\r%s xTaskCreate(example_dct_thread) failed", __FUNCTION__); -} - -#endif // #if CONFIG_DCT diff --git a/Firmware/RTLGDB/USDK/component/common/example/dct/example_dct.h b/Firmware/RTLGDB/USDK/component/common/example/dct/example_dct.h deleted file mode 100644 index ea0b4f7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/dct/example_dct.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _EXAMPLE_DCT_H -#define _EXAMPLE_DCT_H - -void example_dct(void); - -#endif /* _EXAMPLE_DCT_H */ - diff --git a/Firmware/RTLGDB/USDK/component/common/example/eap/example_eap.c b/Firmware/RTLGDB/USDK/component/common/example/eap/example_eap.c deleted file mode 100644 index 05bbe63..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/eap/example_eap.c +++ /dev/null @@ -1,164 +0,0 @@ -#include -#include -#include "FreeRTOS.h" -#include "task.h" -#include - -#if CONFIG_EXAMPLE_EAP - -// get config arguments from wifi_eap_config.c -extern char *eap_target_ssid; -extern char *eap_identity; -extern char *eap_password; -extern const unsigned char *eap_ca_cert; -extern const unsigned char *eap_client_cert; -extern const unsigned char *eap_client_key; -extern char *eap_client_key_pwd; - -void example_eap_config(void){ - eap_target_ssid = "Test_eap"; - eap_identity = "guest2"; - eap_password = "test2"; - -/* - Set client cert is only used for EAP-TLS connection. - If you are not using EAP-TLS method, no need to set eap_client_cert and eap_client_key value. (leave them to NULL value) -*/ -/* - eap_client_cert = \ -"-----BEGIN CERTIFICATE-----\r\n" \ -"MIIC9TCCAd0CAQIwDQYJKoZIhvcNAQEEBQAwgZMxCzAJBgNVBAYTAkZSMQ8wDQYD\r\n" \ -"VQQIEwZSYWRpdXMxEjAQBgNVBAcTCVNvbWV3aGVyZTEVMBMGA1UEChMMRXhhbXBs\r\n" \ -"ZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNvbTEmMCQGA1UE\r\n" \ -"AxMdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTYwMzE0MTEzNjMy\r\n" \ -"WhcNMTcwMzE0MTEzNjMyWjBxMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGUmFkaXVz\r\n" \ -"MRUwEwYDVQQKEwxFeGFtcGxlIEluYy4xGTAXBgNVBAMUEHVzZXJAZXhhbXBsZS5j\r\n" \ -"b20xHzAdBgkqhkiG9w0BCQEWEHVzZXJAZXhhbXBsZS5jb20wgZ8wDQYJKoZIhvcN\r\n" \ -"AQEBBQADgY0AMIGJAoGBAODvCWRRjVQnUyQS/OqHS8MA94Dc5UOtLagKTOMJayB5\r\n" \ -"3MZyreWBkNg6sDfDG6OSD9tkVzwcp8CtZNflJc3i+d+nAnPM+kJedPJN5YVO+uwc\r\n" \ -"+K+QObH7fEOq8hnFIvOtYOfnMAxQKaVIKk0EOqqQv06BDvLyxoDCZNpAn4NQ8ZkR\r\n" \ -"AgMBAAEwDQYJKoZIhvcNAQEEBQADggEBAItqpmFftRu8ugTy4fRFwpjJNUuMRe83\r\n" \ -"Pm5Dv3V/byCHHdmIy0UI+6ZiMEtYrpvz4ZPgk0BDeytYooT7/kEUb8niQ64bDLYo\r\n" \ -"NcXctCmn5fjyX2M6Z3lQXCxX0XdFiukWlR21w4HO0nx7OJjrcjdpP9Tyk/kzCFl7\r\n" \ -"pblIavkfSmFtcxzcp0IoCupkUjFkA+MftZF82eQx4bE0jjiw2KgGwnzyYAdgtFXv\r\n" \ -"Ednj3ZyOuTlOQNGJgLQxyHooEJ/Tol/8p9EO5S6eQaHgZhbGP3AZ3SWV5oA0e6eT\r\n" \ -"D5JXti/LhyZhcbbJFawGXFI96ZOpHJ0EW12Osx/21oqmMp12AotS5Vw=\r\n" \ -"-----END CERTIFICATE-----\r\n"; - eap_client_key = \ -"-----BEGIN RSA PRIVATE KEY-----\r\n" \ -"Proc-Type: 4,ENCRYPTED\r\n" \ -"DEK-Info: DES-EDE3-CBC,79675299AD6E2237\r\n" \ -"\r\n" \ -"ZYY2hv1PYEsrhYbCip98XNpS6XxbntynEEp6aO9UgWeQ4I1pNOUptPUE+yNhbA7X\r\n" \ -"59ueT3yzx5L2ObImlJ3eIEvWq+iB8DdcPqFAo3c4dgfw/wPEhmxVPKvIyDQfaEuA\r\n" \ -"kWUno6b07n5uLTpQjIXQSdMTMYjYS+yPQy7ONC/vl/Ce+RMzrQAZkp5xcNNarUpl\r\n" \ -"2J1D2t+eRih/zRrgeVXztMiW2uyIT5a0IPoeBTPkPVb00kWYzn8eT9doN/ZCyr83\r\n" \ -"mv/uXF5ZOHnSNleOn1NiCZ8Uu3SHnmGhMBBMI75OghpEezQQCmtefYvtRxzGjMVB\r\n" \ -"UoRIlbATAleUjk3bmqRxfA2QZJj/GFWc9grxEerHWrdThSQ0w+fvwKBjTmEtUO2+\r\n" \ -"stKBJQi9RKFq4naM8UhtxojHIscXCx/wKrRZHS4QJYOQYelzfhTRUuTf3Czm/iTh\r\n" \ -"MQvX7dITNlLE3SW2MjzHb2ON9qUaKVnQPk53DO1zYgoxgDbQrw6FXDNMtYVv8SYf\r\n" \ -"JJZp66jGX6e1t4ziPHVqlDi5D2nWQ2DPNHO/rsoydA7icncKsC0iVzeUm7XgesxD\r\n" \ -"QEZoQIQDVS1aRE7qJCk9S2Hfe5Gfqnrp4110YuN/4khjMW2cOCKa/Yjgjyy2QQXT\r\n" \ -"nn6dBAeSWGzRM059VzhOyls5FIfnJIisZvF3JG518SzBU/YUGHEVN1XsfDS2M9/q\r\n" \ -"VkqhJ8/vbmIddKGeYULYW+xs3LvU1hnWiOodd9tuSeg5PxAbkJsV1nW06mVkgBqA\r\n" \ -"zqqEvwvY+6+9QW4PClKNKSocvM6yC+uhRi0sOZ+ckOv7f+uuMyw5FQ==\r\n" \ -"-----END RSA PRIVATE KEY-----\r\n"; - eap_client_key_pwd = "testca"; -*/ - eap_client_cert = \ -"-----BEGIN CERTIFICATE-----\r\n" \ -"MIIC9zCCAd8CAQMwDQYJKoZIhvcNAQEEBQAwgZMxCzAJBgNVBAYTAkZSMQ8wDQYD\r\n" \ -"VQQIEwZSYWRpdXMxEjAQBgNVBAcTCVNvbWV3aGVyZTEVMBMGA1UEChMMRXhhbXBs\r\n" \ -"ZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNvbTEmMCQGA1UE\r\n" \ -"AxMdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTYwMzE1MDgwNzEx\r\n" \ -"WhcNMTcwMzE1MDgwNzExWjBzMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGUmFkaXVz\r\n" \ -"MRUwEwYDVQQKEwxFeGFtcGxlIEluYy4xGjAYBgNVBAMUEXVzZXIyQGV4YW1wbGUu\r\n" \ -"Y29tMSAwHgYJKoZIhvcNAQkBFhF1c2VyMkBleGFtcGxlLmNvbTCBnzANBgkqhkiG\r\n" \ -"9w0BAQEFAAOBjQAwgYkCgYEAqESlV4OYfBcIgZ+Cs8mWpiBjhvKoa0/kIe7saqhC\r\n" \ -"e5q4snox0jdkUpLcc4vOs3vQ7ZGnimqTltA9oF6XNUzTWW4vlJTKEfrCWK085l7c\r\n" \ -"DHFvHavH3E6vuP71lI7jq4PLXbo2TvZK+uBul4ozjzVWihaZBtz8eLHq446h/D/p\r\n" \ -"kzkCAwEAATANBgkqhkiG9w0BAQQFAAOCAQEAAfhVAIkNdeeUNJud720uUHVnIcxz\r\n" \ -"GXWI+Svi1qchuTEnRNhLwXmnE+A0WWSHyfdR6FvzdT3xtz3K50iOif8jY2gCGkSK\r\n" \ -"8RjKr97228SwbrGO9y9+dYIjH1uz9cBpoVKcpzdsWpKObrDPDYyReHSWo99jM2+O\r\n" \ -"vfJxnBw4PLiBj7Q0/dpd6o4JXyp7Cxa0mB4/+cZqjCzzuKfuK3WP7j6laMCV6mg4\r\n" \ -"wRZ528IdwDqB7OOqsDm1PVQM8vzny9PM6ikWUCRTVNQJN8RDLkrHR3FRjy15YLdt\r\n" \ -"yOfDqVnT/z0wGBaxnNziSJjqPGHPpRi4bJFGXwXOhtknKmciKzfj9/npoQ==\r\n" \ -"-----END CERTIFICATE-----\r\n"; - eap_client_key = \ -"-----BEGIN RSA PRIVATE KEY-----\r\n" \ -"MIICXQIBAAKBgQCoRKVXg5h8FwiBn4KzyZamIGOG8qhrT+Qh7uxqqEJ7mriyejHS\r\n" \ -"N2RSktxzi86ze9DtkaeKapOW0D2gXpc1TNNZbi+UlMoR+sJYrTzmXtwMcW8dq8fc\r\n" \ -"Tq+4/vWUjuOrg8tdujZO9kr64G6XijOPNVaKFpkG3Px4serjjqH8P+mTOQIDAQAB\r\n" \ -"AoGARI+LyweshssfxSkIKVc3EcNaqi6PHwJzUrw2ChM624AkR1xwllXJg7ehKVdK\r\n" \ -"xmjprRLO8CASuL1qjsBb3fTKnBl+sIVxIFS0AI4Y3ri8VUKbangvSsI7pCzAFry7\r\n" \ -"p1gmy9WWRV2ZEa+dV8xcrjb3bloT7hcdeLehgBCvExJIQM0CQQDXlSAKdW3AhYyj\r\n" \ -"1A+pfyBSGxJbpSwNyyWgwHIHHjxendxmdUbrc8EbAu1eNKbP58TLgdCZsKcMonAv\r\n" \ -"MY1Y2/nnAkEAx9CrUaCU8pJqXTRypM5JtexLKnYMJhpnA9uUILBQOq4Oe0eruyF5\r\n" \ -"SaSxhyJYXY491ahWYPF0PTb3jkUhoN+l3wJBAJZthjgGDJlEFwjSFkOtYz4nib3N\r\n" \ -"GVpeoFj1MBvrazCScpJDz0LIOLzCZCNSFfwIu3dNk+NKMqZMSn+D0h9pD40CQQC5\r\n" \ -"K9n4NXaTLbjAU2CC9mE85JPr76XmkcUxwAWQHZTcLH1jJdIyAx1hb+zNLLjzSmRn\r\n" \ -"Yi9ae6ibKhtUjyBQ87HFAkA2Bb3z7NUx+AA2g2HZocFZFShBxylACyQkl8FAFZtf\r\n" \ -"osudmKdFQHyAWuBMex4tpz/OLTqJ1ecL1JQeC7OvlpEX\r\n" \ -"-----END RSA PRIVATE KEY-----\r\n"; - -/* - Verify server's certificate is an optional feature. - If you want to use it please make sure ENABLE_EAP_SSL_VERIFY_SERVER in platform_opts.h is set to 1, - and the eap_ca_cert is set correctly. -*/ - eap_ca_cert = \ -"-----BEGIN CERTIFICATE-----\r\n" \ -"MIIEpzCCA4+gAwIBAgIJAPvZaozpdfjkMA0GCSqGSIb3DQEBCwUAMIGTMQswCQYD\r\n" \ -"VQQGEwJGUjEPMA0GA1UECBMGUmFkaXVzMRIwEAYDVQQHEwlTb21ld2hlcmUxFTAT\r\n" \ -"BgNVBAoTDEV4YW1wbGUgSW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBs\r\n" \ -"ZS5jb20xJjAkBgNVBAMTHUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4X\r\n" \ -"DTE2MDMxNDExMjU0OVoXDTE2MDQxMzExMjU0OVowgZMxCzAJBgNVBAYTAkZSMQ8w\r\n" \ -"DQYDVQQIEwZSYWRpdXMxEjAQBgNVBAcTCVNvbWV3aGVyZTEVMBMGA1UEChMMRXhh\r\n" \ -"bXBsZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNvbTEmMCQG\r\n" \ -"A1UEAxMdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqGSIb3\r\n" \ -"DQEBAQUAA4IBDwAwggEKAoIBAQC9pireu0aCDLNfMaGv3vId7RXjUhQwSK0jV2Oc\r\n" \ -"SyvlKWH3P/N+5kLrP2iL6SCzyETVDXZ0vOsAMjcBF0zHp16prXV0d51cTUqeWBb0\r\n" \ -"I5UnGxleIuuOfSg8zLUJoBWZPqLv++eZ5WgOKHt7SXocjvg7TU5t/TMB0Y8OCz3H\r\n" \ -"CW2vJ/XKMgMA9HDUu4g57cJu88i1JPRpyFaz/HIQBc7+UNb9z+q09uTZKWTmEMqi\r\n" \ -"E2U0EEIs7EtbxnOze1/8C4XNlmztrEdwvu6UEBU/TFkUoh9M646NkkBK7wP9n9pv\r\n" \ -"T0nPQRJiiCrICzVqUtlEi9lIKpbBSMbQ0KzrGF7lGTgm4rz9AgMBAAGjgfswgfgw\r\n" \ -"HQYDVR0OBBYEFIVyecka74kvOKIW0BjlTc/B+a2NMIHIBgNVHSMEgcAwgb2AFIVy\r\n" \ -"ecka74kvOKIW0BjlTc/B+a2NoYGZpIGWMIGTMQswCQYDVQQGEwJGUjEPMA0GA1UE\r\n" \ -"CBMGUmFkaXVzMRIwEAYDVQQHEwlTb21ld2hlcmUxFTATBgNVBAoTDEV4YW1wbGUg\r\n" \ -"SW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20xJjAkBgNVBAMT\r\n" \ -"HUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ggkA+9lqjOl1+OQwDAYDVR0T\r\n" \ -"BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAZYHM26sxbKOckVqJJ1QY0U2QFlGP\r\n" \ -"1GYd8v27znxdnRmSonDvv3GjFfhwoyDk0JUuxkK/33ikCxihrgoO/EQTY9BV2OpW\r\n" \ -"qkB1PDtb3i5ZRNvfjmW0pVA4p+GmdTGaEE5pTlcVnorzVrUeFKaZakb+IDFYzmeF\r\n" \ -"xp8B3Bb5wvinDligLOaJnSlgS8QeeIab9HZfaVTTuPmVK6zE6D54Y0dJPnykvDdE\r\n" \ -"cGN0FC+migfilFjJgkDJ0r78nwes55L8zjoofiZuO03rrHww6ARc3v1jYzAufddk\r\n" \ -"QTiZHgjlMQb2XXMmXLn8kBgoDnqkXFNe8j0h8uxIJSrjOoIyn1h1wvX5/w==\r\n" \ -"-----END CERTIFICATE-----\r\n"; - -} - -static void example_eap_thread(void *method){ - example_eap_config(); - - if(strcmp(method, "tls") == 0){ - // tls must present client_cert, client_key - eap_start("tls"); - } - else if(strcmp(method, "peap") == 0){ - eap_start("peap"); - } - else if(strcmp(method, "ttls") == 0){ - eap_start("ttls"); - } - else - printf("Invalid method\n"); - - vTaskDelete(NULL); -} - -void example_eap(char *method){ - if(xTaskCreate(example_eap_thread, ((const char*)"example_eap_thread"), 1024, method, tskIDLE_PRIORITY + 1, NULL) != pdPASS) - printf("\n\r%s xTaskCreate failed\n", __FUNCTION__); -} - -#endif /* CONFIG_EXAMPLE_EAP */ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/example/eap/example_eap.h b/Firmware/RTLGDB/USDK/component/common/example/eap/example_eap.h deleted file mode 100644 index 2eefcaf..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/eap/example_eap.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef EXAMPLE_EAP_H -#define EXAMPLE_EAP_H - -#include -#include "platform_opts.h" - -void example_eap(char *method); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/example/eap/readme.txt b/Firmware/RTLGDB/USDK/component/common/example/eap/readme.txt deleted file mode 100644 index 4ec0730..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/eap/readme.txt +++ /dev/null @@ -1,34 +0,0 @@ -802.1X EAP METHOD SUPPLICANT EXAMPLE - -Description: -Use 802.1X EAP methods to connect to AP and authenticate with backend radius server. -Current supported methods are EAP-TLS, PEAPv0/EAP-MSCHAPv2, and EAP-TTLS/MSCHAPv2. - -Configuration: -Modify the argument of example_eap() in example_entry.c to set which EAP methods you want to use. -Modify the connection config (ssid, identity, password, cert) in example_eap_config() of example_eap.c based on your server's setting. -[FreeRTOSConfig.h] - #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 70 * 1024 ) ) -[platform_opts.h] - # define CONFIG_EXAMPLE_EAP 1 - - // Turn on/off the specified method - # define CONFIG_ENABLE_PEAP 1 - # define CONFIG_ENABLE_TLS 1 - # define CONFIG_ENABLE_TTLS 1 - - // If you want to verify the certificate of radius server, turn this on - # define ENABLE_EAP_SSL_VERIFY_SERVER 1 - -Execution: -An EAP connection thread will be started automatically when booting. - -Note: -Please make sure the lib_wps, polarssl, ssl_ram_map are also builded. - -If the connection failed, you can try the following directions to make it work: -1. Make sure the config_rsa.h of PolarSSL include the SSL/TLS cipher suite supported by radius server. -2. Set a larger value to SSL_MAX_CONTENT_LEN in config_rsa.h -3. Increase the FreeRTOS heap in FreeRTOSConfig.h, for example you can increase the heap to 80kbytes: - #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 80 * 1024 ) ) -4. Try to change using SW crypto instead of HW crypto. diff --git a/Firmware/RTLGDB/USDK/component/common/example/example_entry.c b/Firmware/RTLGDB/USDK/component/common/example/example_entry.c deleted file mode 100644 index 3b628f7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/example_entry.c +++ /dev/null @@ -1,39 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2015 Realtek Corporation. All rights reserved. - * - * - ******************************************************************************/ -#include -#include "main.h" -#if CONFIG_EXAMPLE_UART_ATCMD -#include "uart_atcmd/example_uart_atcmd.h" -#endif -#ifdef CONFIG_EXAMPLE_MDNS -#include -#endif - -/* - Preprocessor of example -*/ -void pre_example_entry(void) -{ - // -#if defined(CONFIG_EXAMPLE_WLAN_FAST_CONNECT) && CONFIG_EXAMPLE_WLAN_FAST_CONNECT && !CONFIG_EXAMPLE_UART_ATCMD - example_wlan_fast_connect(); -#endif -#ifdef CONFIG_EXAMPLE_MDNS - example_mdns(); -#endif -} - -/* - All of the examples are disabled by default for code size consideration - The configuration is enabled in platform_opts.h -*/ -void example_entry(void) -{ -#if CONFIG_EXAMPLE_UART_ATCMD - example_uart_atcmd(); -#endif -} diff --git a/Firmware/RTLGDB/USDK/component/common/example/example_entry.h b/Firmware/RTLGDB/USDK/component/common/example/example_entry.h deleted file mode 100644 index 2cdd514..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/example_entry.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __EXAMPLE_ENTRY_H__ -#define __EXAMPLE_ENTRY_H__ - - -void example_entry(void); -void pre_example_entry(void); - -#endif //#ifndef __EXAMPLE_ENTRY_H__ diff --git a/Firmware/RTLGDB/USDK/component/common/example/get_beacon_frame/example_get_beacon_frame.c b/Firmware/RTLGDB/USDK/component/common/example/get_beacon_frame/example_get_beacon_frame.c deleted file mode 100644 index beaa281..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/get_beacon_frame/example_get_beacon_frame.c +++ /dev/null @@ -1,48 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2015 Realtek Corporation. All rights reserved. - * - * - ******************************************************************************/ -#include -#include -#include -#include "FreeRTOS.h" -#include "task.h" - -typedef int (*get_beacon_frame_func_ptr)(BEACON_INFO_T beacon_frame); -extern get_beacon_frame_func_ptr get_beacon_frame_callback; - -int get_beacon_frame_func(BEACON_INFO_T beacon_frame) -{ - printf("\nbeacon frame_ctl = %02x %02x\n",beacon_frame.frame_ctl[0],beacon_frame.frame_ctl[1]); - printf("\nbeacon duration_id = %02x %02x\n",beacon_frame.duration_id[0],beacon_frame.duration_id[1]); - printf("\nbeacon addr1 = %02x:%02x:%02x:%02x:%02x:%02x\n",\ - beacon_frame.addr1[0],beacon_frame.addr1[1],beacon_frame.addr1[2],beacon_frame.addr1[3],beacon_frame.addr1[4],beacon_frame.addr1[5]); - printf("\nbeacon addr2 = %02x:%02x:%02x:%02x:%02x:%02x\n",\ - beacon_frame.addr2[0],beacon_frame.addr2[1],beacon_frame.addr2[2],beacon_frame.addr2[3],beacon_frame.addr2[4],beacon_frame.addr2[5]); - printf("\nbeacon addr3 = %02x:%02x:%02x:%02x:%02x:%02x\n",\ - beacon_frame.addr3[0],beacon_frame.addr3[1],beacon_frame.addr3[2],beacon_frame.addr3[3],beacon_frame.addr3[4],beacon_frame.addr3[5]); - printf("\nbeacon seq_ctl = %02x %02x\n",beacon_frame.seq_ctl[0],beacon_frame.seq_ctl[1]); - printf("\nbeacon timestamp = %02x %02x %02x %02x %02x %02x %02x %02x\n",\ - beacon_frame.timestamp[0],beacon_frame.timestamp[1],beacon_frame.timestamp[2],beacon_frame.timestamp[3],beacon_frame.timestamp[4],beacon_frame.timestamp[5],beacon_frame.timestamp[6],beacon_frame.timestamp[7]); - - return 0; -} - -void get_beacon_frame_thread(void *param) -{ - vTaskDelay(10000);//a rough time for waiting wifi connected - //Register callback function until wifi connected - get_beacon_frame_callback = get_beacon_frame_func; - vTaskDelete(NULL); - return; -} - -void example_get_beacon_frame(void) -{ - if(xTaskCreate(get_beacon_frame_thread, ((const char*)"get_beacon_frame_thread"), 256, NULL, tskIDLE_PRIORITY , NULL) != pdPASS) - printf("\n\r%s xTaskCreate(get_beacon_frame_thread) failed", __FUNCTION__); - return; -} - diff --git a/Firmware/RTLGDB/USDK/component/common/example/get_beacon_frame/example_get_beacon_frame.h b/Firmware/RTLGDB/USDK/component/common/example/get_beacon_frame/example_get_beacon_frame.h deleted file mode 100644 index bba4633..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/get_beacon_frame/example_get_beacon_frame.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef __EXAMPLE_GET_BEACON_FRAME_H__ -#define __EXAMPLE_GET_BEACON_FRAME_H__ - -/****************************************************************************** - * - * Copyright(c) 2007 - 2015 Realtek Corporation. All rights reserved. - * - * - ******************************************************************************/ - -typedef struct beacon_info_str{ - //802.11 MAC header - unsigned char frame_ctl[2]; - unsigned char duration_id[2]; - unsigned char addr1[6]; - unsigned char addr2[6]; - unsigned char addr3[6]; - unsigned char seq_ctl[2]; - //802.11 beacon IE - unsigned char timestamp[8]; -}BEACON_INFO_T; - -void example_get_beacon_frame(void); -int get_beacon_frame_func(BEACON_INFO_T beacon_frame); - -#endif //#ifndef __EXAMPLE_GET_BEACON_FRAME_H__ diff --git a/Firmware/RTLGDB/USDK/component/common/example/get_beacon_frame/readme.txt b/Firmware/RTLGDB/USDK/component/common/example/get_beacon_frame/readme.txt deleted file mode 100644 index ac80b14..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/get_beacon_frame/readme.txt +++ /dev/null @@ -1,13 +0,0 @@ -GET BEACON FRAME EXAMPLE - -Description: -Get beacon frame information in station mode - -Configuration: -[platform_opts.h] - #define CONFIG_EXAMPLE_GET_BEACON_FRAME 1 - -Execution: -Call example_get_beacon_frame() to create get beacon frame thread. -It can collect the beacon of AP in the air. - diff --git a/Firmware/RTLGDB/USDK/component/common/example/googlenest/example.html b/Firmware/RTLGDB/USDK/component/common/example/googlenest/example.html deleted file mode 100644 index 858f0d4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/googlenest/example.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - -

Realtek Google Nest API example

-
- - -

Data To Device

- -

Input the value of RGB to change the state of light:

-

Red -Green -Blue - -

- - - - - diff --git a/Firmware/RTLGDB/USDK/component/common/example/googlenest/example_google.c b/Firmware/RTLGDB/USDK/component/common/example/googlenest/example_google.c deleted file mode 100644 index 66d3877..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/googlenest/example_google.c +++ /dev/null @@ -1,185 +0,0 @@ -#include "cmsis_os.h" -#include "diag.h" -#include "wifi_conf.h" -#include "wifi_ind.h" -#include "google/google_nest.h" - - -#include -#include "cJSON.h" - -osThreadId google_thread_id; -#define malloc pvPortMalloc -#define free vPortFree - -void google_data_retrieve(char *response_buf); - -void google_data_retrieve(char *response_buf) { - //printf("\r\n\r\n\r\nResponse_buf:\r\n%s\r\n", response_buf); - char *event = NULL; - char *delims = "\n"; - char *data = NULL, *backup = NULL; - char *info = NULL; - cJSON_Hooks memoryHook; - - event = strtok_r(response_buf, delims, &backup); - data = strtok_r( NULL, delims, &backup ); - - if (!strncmp(data, "data: ", strlen("data: "))){ - info = data + strlen("data: "); - if(info != NULL){ - memoryHook.malloc_fn = malloc; - memoryHook.free_fn = free; - cJSON_InitHooks(&memoryHook); - - cJSON *infoJSObject, *pathJSObject, *dataJSObject; - cJSON *redJSObject, *greenJSObject, *blueJSObject; - char *red, *green, *blue; - - - if((infoJSObject = cJSON_Parse(info)) != NULL) { - pathJSObject = cJSON_GetObjectItem(infoJSObject, "path"); - dataJSObject = cJSON_GetObjectItem(infoJSObject, "data"); - if(dataJSObject != NULL) { - - redJSObject = cJSON_GetObjectItem(dataJSObject, "Red"); - greenJSObject = cJSON_GetObjectItem(dataJSObject, "Green"); - blueJSObject = cJSON_GetObjectItem(dataJSObject, "Blue"); - - if(redJSObject) - red = redJSObject->valuestring; - - if(greenJSObject) - green = greenJSObject->valuestring; - - if(blueJSObject) - blue = blueJSObject->valuestring; - - printf("\n\rThe latest RGB information: RGB(%s, %s, %s)\n\r", red, green, blue); - - cJSON_Delete(dataJSObject); - } - cJSON_Delete(infoJSObject); - } - else - printf("\r\nCannot parse the message to JSON!\r\n"); - - } - else - printf("\r\n This is the keep alive message or cannot get the information!\r\n"); - } - else - printf("\r\nData structure may wrong!\r\n"); -} - - -void gn_todevice_start(void) { - - googlenest_context googlenest; - char *googlenest_host = HOST_ADDR; - char *googlenest_uri = "light.json"; - - printf("\r\nStart connecting to Google Nest Server...\r\n"); - memset(&googlenest, 0, sizeof(googlenest_context)); - -reconnect: - if(gn_connect(&googlenest, googlenest_host, GN_PORT) == 0) { - printf("\r\n Connection is OK!\r\n"); - - google_retrieve_data_hook_callback(google_data_retrieve); - if(gn_stream(&googlenest, googlenest_uri) != 0){ - printf("\r\n Connection is fail! \r\n Start Reconnecting...\r\n"); - goto reconnect; - } - - gn_close(&googlenest); - - } - else{ - printf("\r\n Connection is fail! \r\n\r\n\r\n\r\nStart Reconnecting...\r\n"); - goto reconnect; - } - -} - -void gn_fromdevice_start(void) { - googlenest_context googlenest; - char *googlenest_uri = "MotionSensor.json"; - cJSON_Hooks memoryHook; - int j = 0; - - memoryHook.malloc_fn = malloc; - memoryHook.free_fn = free; - cJSON_InitHooks(&memoryHook); - printf("\r\nStart connecting to Google Nest Server!\r\n"); - - while(1) { - memset(&googlenest, 0, sizeof(googlenest_context)); - if(gn_connect(&googlenest, HOST_ADDR, GN_PORT) == 0) { - cJSON *MSJSObject; - char *data; - - if((MSJSObject = cJSON_CreateObject()) != NULL) { - cJSON_AddItemToObject(MSJSObject, "MotionSenser", cJSON_CreateNumber(j++)); - data = cJSON_Print(MSJSObject); - cJSON_Delete(MSJSObject); - } - - if(gn_put(&googlenest, googlenest_uri, data) == 0) - printf("\n\rUpdate the Motion Sensor's data to %d\n\r", (j-1)); - free(data); - gn_close(&googlenest); - } - else{ - printf("\n\rConnection failed!\n\r"); - break; - } - - vTaskDelay(5 * configTICK_RATE_HZ); - } -} - -void gn_fromdevice_task(void *arg) { - int i; - - printf("\n\r\n\r\n\r\n\r<<<<<>>>>>>\n\r\n\r\n\r\n\r"); - for (i = 0; i<120; i++) - vTaskDelay(1000 / portTICK_PERIOD_MS); - - gn_fromdevice_start(); -} - -void gn_todevice_task(void *arg) { - int i; - - printf("\n\r\n\r\n\r\n\r<<<<<>>>>>>\n\r\n\r\n\r\n\r"); - for (i = 0; i<120; i++) - vTaskDelay(1000 / portTICK_PERIOD_MS); - - gn_todevice_start(); -} - -void example_google(char *type) { - - - if(strcmp(type, "FromDevice") == 0){ - osThreadDef_t google_thread; - google_thread.instances = 1; - google_thread.name = "google thread"; - google_thread.stacksize = 4096; - google_thread.pthread = (os_pthread)gn_fromdevice_task; - google_thread.tpriority = tskIDLE_PRIORITY+6; - google_thread_id = osThreadCreate(&google_thread, NULL); - } - else if(strcmp(type, "ToDevice") == 0){ - osThreadDef_t google_thread; - google_thread.instances = 1; - google_thread.name = "google thread"; - google_thread.stacksize = 4096; - google_thread.pthread = (os_pthread)gn_todevice_task; - google_thread.tpriority = tskIDLE_PRIORITY+6; - google_thread_id = osThreadCreate(&google_thread, NULL); - } - -} - diff --git a/Firmware/RTLGDB/USDK/component/common/example/googlenest/example_google.h b/Firmware/RTLGDB/USDK/component/common/example/googlenest/example_google.h deleted file mode 100644 index 8de92d0..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/googlenest/example_google.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef GOOGLE_THREAD_H -#define GOOGLE_THREAD_H - -#define HOST_ADDR "your_firebase_address.firebaseio.com" -#define GN_PORT 443 - -void example_google(char *type); - - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/example/mcast/example_mcast.c b/Firmware/RTLGDB/USDK/component/common/example/mcast/example_mcast.c deleted file mode 100644 index b18dae8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/mcast/example_mcast.c +++ /dev/null @@ -1,98 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include - -#include -#include -#include -extern struct netif xnetif[]; - -static void example_mcast_thread(void *param) -{ -#if LWIP_IGMP - int err = 0; - int socket = -1; - char *group_ip = "224.0.0.251"; - uint16_t port = 5353; - - // Set NETIF_FLAG_IGMP flag for netif which should process IGMP messages - xnetif[0].flags |= NETIF_FLAG_IGMP; - - if((socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { - printf("ERROR: socket - AF_INET, SOCK_DGRAM\n"); - err = -1; - } - - // Add multicast group membership on this interface - if(err == 0) { - struct ip_mreq imr; - imr.imr_multiaddr.s_addr = inet_addr(group_ip); - imr.imr_interface.s_addr = INADDR_ANY; - err = setsockopt(socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, &imr, sizeof(imr)); - if(err < 0) printf("ERROR: setsockopt - IP_ADD_MEMBERSHIP\n"); - } - - // Specify outgoing interface too - if(err == 0) { - struct in_addr intfAddr; - intfAddr.s_addr = INADDR_ANY; - err = setsockopt(socket, IPPROTO_IP, IP_MULTICAST_IF, &intfAddr, sizeof(struct in_addr)); - if(err < 0) printf("ERROR: setsockopt - IP_MULTICAST_IF\n"); - } - - // And start listening for packets - if(err == 0) { - struct sockaddr_in bindAddr; - bindAddr.sin_family = AF_INET; - bindAddr.sin_port = htons(port); - bindAddr.sin_addr.s_addr = INADDR_ANY; - err = bind(socket, (struct sockaddr *) &bindAddr, sizeof(bindAddr)); - if(err < 0) printf("ERROR: bind\n"); - } - - if(err == 0) { - unsigned char packet[1024]; - - while(1) { - // Receive multicast - int packetLen; - struct sockaddr from; - struct sockaddr_in *from_sin = (struct sockaddr_in*) &from; - socklen_t fromLen = sizeof(from); - - if((packetLen = recvfrom(socket, &packet, sizeof(packet), 0, &from, &fromLen)) >= 0) { - uint8_t *ip = (uint8_t *) &from_sin->sin_addr.s_addr; - uint16_t from_port = ntohs(from_sin->sin_port); - printf("recvfrom - %d bytes from %d.%d.%d.%d:%d\n", packetLen, ip[0], ip[1], ip[2], ip[3], from_port); - } - - // Send multicast - if(packetLen > 0) { - int sendLen; - struct sockaddr to; - struct sockaddr_in *to_sin = (struct sockaddr_in*) &to; - to_sin->sin_family = AF_INET; - to_sin->sin_port = htons(port); - to_sin->sin_addr.s_addr = inet_addr(group_ip); - - if((sendLen = sendto(socket, packet, packetLen, 0, &to, sizeof(struct sockaddr))) < 0) - printf("ERROR: sendto %s\n", group_ip); - else - printf("sendto - %d bytes to %s:%d\n", sendLen, group_ip, port); - } - } - } - else if(socket != -1) { - close(socket); - } -#else - printf("\nSHOULD ENABLE LWIP_IGMP\n"); -#endif - vTaskDelete(NULL); -} - -void example_mcast(void) -{ - if(xTaskCreate(example_mcast_thread, ((const char*)"example_mcast_thread"), 2048, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) - printf("\n\r%s xTaskCreate(init_thread) failed", __FUNCTION__); -} diff --git a/Firmware/RTLGDB/USDK/component/common/example/mcast/example_mcast.h b/Firmware/RTLGDB/USDK/component/common/example/mcast/example_mcast.h deleted file mode 100644 index 7be6823..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/mcast/example_mcast.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef EXAMPLE_MCAST_H -#define EXAMPLE_MCAST_H - -void example_mcast(void); - -#endif /* EXAMPLE_MCAST_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/example/mcast/readme.txt b/Firmware/RTLGDB/USDK/component/common/example/mcast/readme.txt deleted file mode 100644 index 1a6409d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/mcast/readme.txt +++ /dev/null @@ -1,17 +0,0 @@ -LWIP MULTICAST EXAMPLE - -Description: -Join multicast group of 224.0.0.251 and listen on port 5353. -Send packet with the content of received packet to multicast group of 224.0.0.251. - -Configuration: -[lwipopts.h] - #define LWIP_UDP 1 - #define LWIP_IGMP 1 -[platform_opts.h] - #define CONFIG_EXAMPLE_MCAST 1 - -Execution: -Can make automatical Wi-Fi connection when booting by using wlan fast connect example. -A multicast example thread will be started automatically when booting. - diff --git a/Firmware/RTLGDB/USDK/component/common/example/mdns/example_mdns.c b/Firmware/RTLGDB/USDK/component/common/example/mdns/example_mdns.c deleted file mode 100644 index 3af2b36..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/mdns/example_mdns.c +++ /dev/null @@ -1,55 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include - -#include - -#include -#include -extern struct netif xnetif[]; - -static void example_mdns_thread(void *param) -{ - DNSServiceRef dnsServiceRef = NULL; - TXTRecordRef txtRecord; - unsigned char txt_buf[100]; // use fixed buffer for text record to prevent malloc/free - - // Delay to wait for IP by DHCP - vTaskDelay(10000); - - printf("\nmDNS Init\n"); - if(mDNSResponderInit() == 0) { - printf("mDNS Register service\n"); - TXTRecordCreate(&txtRecord, sizeof(txt_buf), txt_buf); - TXTRecordSetValue(&txtRecord, "text1", strlen("text1_content"), "text1_content"); - TXTRecordSetValue(&txtRecord, "text2", strlen("text2_content"), "text2_content"); - dnsServiceRef = mDNSRegisterService("ameba", "_service1._tcp", "local", 5000, &txtRecord); - TXTRecordDeallocate(&txtRecord); - printf("wait for 30s ... \n"); - vTaskDelay(30*1000); - - printf("mDNS Update service\n"); - TXTRecordCreate(&txtRecord, sizeof(txt_buf), txt_buf); - TXTRecordSetValue(&txtRecord, "text1", strlen("text1_content_new"), "text1_content_new"); - mDNSUpdateService(dnsServiceRef, &txtRecord, 0); - TXTRecordDeallocate(&txtRecord); - printf("wait for 30s ... \n"); - vTaskDelay(30*1000); - - if(dnsServiceRef) - mDNSDeregisterService(dnsServiceRef); - - // deregister service before mdns deinit is not necessary - // mDNS deinit will also deregister all services - printf("mDNS Deinit\n"); - mDNSResponderDeinit(); - } - - vTaskDelete(NULL); -} - -void example_mdns(void) -{ - if(xTaskCreate(example_mdns_thread, ((const char*)"example_mdns_thread"), 1024, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) - printf("\n\r%s xTaskCreate(init_thread) failed", __FUNCTION__); -} diff --git a/Firmware/RTLGDB/USDK/component/common/example/mdns/example_mdns.h b/Firmware/RTLGDB/USDK/component/common/example/mdns/example_mdns.h deleted file mode 100644 index 39c4914..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/mdns/example_mdns.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef EXAMPLE_MDNS_H -#define EXAMPLE_MDNS_H - -void example_mdns(void); - -#endif /* EXAMPLE_MDNS_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/example/socket_select/example_socket_select.c b/Firmware/RTLGDB/USDK/component/common/example/socket_select/example_socket_select.c deleted file mode 100644 index 403ccd1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/socket_select/example_socket_select.c +++ /dev/null @@ -1,106 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include -#include - -#if LWIP_SOCKET - -#define MAX_SOCKETS 10 -#define SELECT_TIMEOUT 10 -#define SERVER_PORT 5000 -#define LISTEN_QLEN 2 - -static void example_socket_select_thread(void *param) -{ - struct sockaddr_in server_addr; - int server_fd = -1; - int socket_used[10]; - - memset(socket_used, 0, sizeof(socket_used)); - - if((server_fd = socket(AF_INET, SOCK_STREAM, 0)) >= 0) { - socket_used[server_fd] = 1; - } - else { - printf("socket error\n"); - goto exit; - } - - server_addr.sin_family = AF_INET; - server_addr.sin_port = htons(SERVER_PORT); - server_addr.sin_addr.s_addr = INADDR_ANY; - - if(bind(server_fd, (struct sockaddr *) &server_addr, sizeof(server_addr)) != 0) { - printf("bind error\n"); - goto exit; - } - - if(listen(server_fd, LISTEN_QLEN) != 0) { - printf("listen error\n"); - goto exit; - } - - while(1) { - int socket_fd; - unsigned char buf[512]; - fd_set read_fds; - struct timeval timeout; - - FD_ZERO(&read_fds); - timeout.tv_sec = SELECT_TIMEOUT; - timeout.tv_usec = 0; - - for(socket_fd = 0; socket_fd < MAX_SOCKETS; socket_fd ++) - if(socket_used[socket_fd]) - FD_SET(socket_fd, &read_fds); - - if(select(MAX_SOCKETS, &read_fds, NULL, NULL, &timeout)) { - for(socket_fd = 0; socket_fd < MAX_SOCKETS; socket_fd ++) { - if(socket_used[socket_fd] && FD_ISSET(socket_fd, &read_fds)) { - if(socket_fd == server_fd) { - struct sockaddr_in client_addr; - unsigned int client_addr_size = sizeof(client_addr); - int fd = accept(server_fd, (struct sockaddr *) &client_addr, &client_addr_size); - - if(fd >= 0) { - printf("accept socket fd(%d)\n", fd); - socket_used[fd] = 1; - } - else { - printf("accept error\n"); - } - } - else { - int read_size = read(socket_fd, buf, sizeof(buf)); - - if(read_size > 0) { - write(socket_fd, buf, read_size); - } - else { - printf("socket fd(%d) disconnected\n", socket_fd); - socket_used[socket_fd] = 0; - close(socket_fd); - } - } - } - } - } - else { - printf("TCP server: no data in %d seconds\n", SELECT_TIMEOUT); - } - } - -exit: - if(server_fd >= 0) - close(server_fd); - - vTaskDelete(NULL); -} - -void example_socket_select(void) -{ - if(xTaskCreate(example_socket_select_thread, ((const char*)"example_socket_select_thread"), 1024, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) - printf("\n\r%s xTaskCreate(init_thread) failed", __FUNCTION__); -} - -#endif // LWIP_SOCKET diff --git a/Firmware/RTLGDB/USDK/component/common/example/socket_select/example_socket_select.h b/Firmware/RTLGDB/USDK/component/common/example/socket_select/example_socket_select.h deleted file mode 100644 index f42594f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/socket_select/example_socket_select.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef EXAMPLE_SOCKET_SELECT_H -#define EXAMPLE_SOCKET_SELECT_H - -void example_socket_select(void); - -#endif /* EXAMPLE_SOCKET_SELECT_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/example/socket_select/readme.txt b/Firmware/RTLGDB/USDK/component/common/example/socket_select/readme.txt deleted file mode 100644 index 6618e4b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/socket_select/readme.txt +++ /dev/null @@ -1,13 +0,0 @@ -LWIP SOCKET SELECT EXAMPLE - -Description: -TCP server listens on port 5000 and handle socket by select(). - -Configuration: -[platform_opts.h] - #define CONFIG_EXAMPLE_SOCKET_SELECT 1 - -Execution: -Can make automatical Wi-Fi connection when booting by using wlan fast connect example. -A socket select example thread will be started automatically when booting. - diff --git a/Firmware/RTLGDB/USDK/component/common/example/ssl_download/example_ssl_download.c b/Firmware/RTLGDB/USDK/component/common/example/ssl_download/example_ssl_download.c deleted file mode 100644 index 746d12a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/ssl_download/example_ssl_download.c +++ /dev/null @@ -1,137 +0,0 @@ -#include -#include -#include - -#include -#include -#include -#include - -#define SERVER_HOST "192.168.13.27" -#define SERVER_PORT 443 -#define RESOURCE "/dummy100k.bin" - -static unsigned int arc4random(void) -{ - unsigned int res = xTaskGetTickCount(); - static unsigned int seed = 0xDEADB00B; - - seed = ((seed & 0x007F00FF) << 7) ^ - ((seed & 0x0F80FF00) >> 8) ^ // be sure to stir those low bits - (res << 13) ^ (res >> 9); // using the clock too! - - return seed; -} - -static void get_random_bytes(void *buf, size_t len) -{ - unsigned int ranbuf; - unsigned int *lp; - int i, count; - count = len / sizeof(unsigned int); - lp = (unsigned int *) buf; - - for(i = 0; i < count; i ++) { - lp[i] = arc4random(); - len -= sizeof(unsigned int); - } - - if(len > 0) { - ranbuf = arc4random(); - memcpy(&lp[i], &ranbuf, len); - } -} - -static int my_random(void *p_rng, unsigned char *output, size_t output_len) -{ - get_random_bytes(output, output_len); - return 0; -} - -static void example_ssl_download_thread(void *param) -{ - int server_fd = -1, ret; - struct sockaddr_in server_addr; - ssl_context ssl; - - // Delay to wait for IP by DHCP - vTaskDelay(10000); - printf("\nExample: SSL download\n"); - - memory_set_own(pvPortMalloc, vPortFree); - memset(&ssl, 0, sizeof(ssl_context)); - - if((ret = net_connect(&server_fd, SERVER_HOST, SERVER_PORT)) != 0) { - printf("ERROR: net_connect ret(%d)\n", ret); - goto exit; - } - - if((ret = ssl_init(&ssl)) != 0) { - printf("ERRPR: ssl_init ret(%d)\n", ret); - goto exit; - } - - ssl_set_endpoint(&ssl, SSL_IS_CLIENT); - ssl_set_authmode(&ssl, SSL_VERIFY_NONE); - ssl_set_rng(&ssl, my_random, NULL); - ssl_set_bio(&ssl, net_recv, &server_fd, net_send, &server_fd); - - if((ret = ssl_handshake(&ssl)) != 0) { - printf("ERROR: ssl_handshake ret(-0x%x)", -ret); - goto exit; - } - else { - unsigned char buf[2048]; - int read_size = 0, resource_size = 0, content_len = 0, header_removed = 0; - - printf("SSL ciphersuite %s\n", ssl_get_ciphersuite(&ssl)); - sprintf(buf, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", RESOURCE, SERVER_HOST); - ssl_write(&ssl, buf, strlen(buf)); - - while((read_size = ssl_read(&ssl, buf, sizeof(buf))) > 0) { - if(header_removed == 0) { - char *header = strstr(buf, "\r\n\r\n"); - - if(header) { - char *body, *content_len_pos; - - body = header + strlen("\r\n\r\n"); - *(body - 2) = 0; - header_removed = 1; - printf("\nHTTP Header: %s\n", buf); - read_size = read_size - ((unsigned char *) body - buf); - - content_len_pos = strstr(buf, "Content-Length: "); - if(content_len_pos) { - content_len_pos += strlen("Content-Length: "); - *(strstr(content_len_pos, "\r\n")) = 0; - content_len = atoi(content_len_pos); - } - } - else { - printf("ERROR: HTTP header\n"); - goto exit; - } - } - - printf("read resource %d bytes\n", read_size); - resource_size += read_size; - } - - printf("final read size = %d bytes\n", read_size); - printf("http content-length = %d bytes, download resource size = %d bytes\n", content_len, resource_size); - } - -exit: - if(server_fd != -1) - net_close(server_fd); - - ssl_free(&ssl); - vTaskDelete(NULL); -} - -void example_ssl_download(void) -{ - if(xTaskCreate(example_ssl_download_thread, ((const char*)"example_ssl_download_thread"), 2048, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) - printf("\n\r%s xTaskCreate(init_thread) failed", __FUNCTION__); -} diff --git a/Firmware/RTLGDB/USDK/component/common/example/ssl_download/example_ssl_download.h b/Firmware/RTLGDB/USDK/component/common/example/ssl_download/example_ssl_download.h deleted file mode 100644 index d7748ac..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/ssl_download/example_ssl_download.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef EXAMPLE_SSL_DOWNLOAD_H -#define EXAMPLE_SSL_DOWNLOAD_H - -void example_ssl_download(void); - -#endif /* EXAMPLE_SSL_DOWNLOAD_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/example/ssl_download/readme.txt b/Firmware/RTLGDB/USDK/component/common/example/ssl_download/readme.txt deleted file mode 100644 index e82c5b2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/ssl_download/readme.txt +++ /dev/null @@ -1,16 +0,0 @@ -SSL DOWNLOAD EXAMPLE - -Description: -Download file from Web server via https. - -Configuration: -Modify SSL_MAX_CONTENT_LEN in SSL config and configTOTAL_HEAP_SIZE in freertos config for large size file -Modify SERVER_HOST, SERVER_PORT and RESOURCE in example_ssl_download.c based on your SSL server - -[platform_opts.h] - #define CONFIG_EXAMPLE_SSL_DOWNLOAD 1 - -Execution: -Can make automatical Wi-Fi connection when booting by using wlan fast connect example. -A ssl download example thread will be started automatically when booting. - diff --git a/Firmware/RTLGDB/USDK/component/common/example/uart_atcmd/example_uart_atcmd.c b/Firmware/RTLGDB/USDK/component/common/example/uart_atcmd/example_uart_atcmd.c deleted file mode 100644 index 5c1fa71..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/uart_atcmd/example_uart_atcmd.c +++ /dev/null @@ -1,612 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2015 Realtek Corporation. All rights reserved. - * - * - ******************************************************************************/ -#include "platform_opts.h" -#include "FreeRTOS.h" -#include "task.h" -#include "platform/platform_stdlib.h" -#include "semphr.h" -#include "device.h" -#include "serial_api.h" -#include "at_cmd/log_service.h" -#include "uart_atcmd/example_uart_atcmd.h" -#include "flash_api.h" -#include "device_lock.h" -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) -#include "freertos_pmu.h" -#endif -#include "osdep_api.h" -#include "osdep_service.h" -#include "serial_ex_api.h" -#include "at_cmd/atcmd_wifi.h" -#include "at_cmd/atcmd_lwip.h" -#include "pinmap.h" - -#ifdef USE_FLASH_EEP -#include "flash_eep.h" -#endif - -#if CONFIG_EXAMPLE_UART_ATCMD - -typedef int (*init_done_ptr)(void); -extern init_done_ptr p_wlan_init_done_callback; -extern char log_buf[LOG_SERVICE_BUFLEN]; -extern xSemaphoreHandle log_rx_interrupt_sema; -extern void serial_rx_fifo_level(serial_t *obj, SerialFifoLevel FifoLv); -extern int atcmd_wifi_restore_from_flash(void); -extern int atcmd_lwip_restore_from_flash(void); - -serial_t at_cmd_sobj; -char at_string[ATSTRING_LEN]; -//xSemaphoreHandle at_printf_sema; -_Sema uart_at_dma_tx_sema; -unsigned char gAT_Echo = 1; // default echo on - -#define UART_AT_MAX_DELAY_TIME_MS 20 - -#define UART_AT_DATA UART_SETTING_SECTOR -#define BACKUP_SECTOR FLASH_SYSTEM_DATA_ADDR-0x1000 - -#define UART_AT_USE_DMA_TX 0 - -void atcmd_update_partition_info(AT_PARTITION id, AT_PARTITION_OP ops, u8 *data, u16 len){ -#ifdef USE_FLASH_EEP - if(id == AT_PARTITION_UART || id == AT_PARTITION_LWIP || id == AT_PARTITION_WIFI) { - if(ops == AT_PARTITION_READ) flash_read_cfg(data, id, len); - else if (ops == AT_PARTITION_WRITE) flash_write_cfg(data, id, len); - else if (ops == AT_PARTITION_ERASE) flash_write_cfg(data, id, 0); - } -#else - flash_t flash; - int size, offset, i; - u32 read_data; - - switch(id){ - case AT_PARTITION_UART: - size = UART_CONF_DATA_SIZE; - offset = UART_CONF_DATA_OFFSET; - break; - case AT_PARTITION_WIFI: - size = WIFI_CONF_DATA_SIZE; - offset = WIFI_CONF_DATA_OFFSET; - break; - case AT_PARTITION_LWIP: - size = LWIP_CONF_DATA_SIZE; - offset = LWIP_CONF_DATA_OFFSET; - break; - case AT_PARTITION_ALL: - size = 0x1000; - offset = 0; - break; - default: - printf("partition id is invalid!\r\n"); - return; - } - - device_mutex_lock(RT_DEV_LOCK_FLASH); - if(id == AT_PARTITION_ALL && ops == AT_PARTITION_ERASE){ - flash_erase_sector(&flash, UART_SETTING_SECTOR); - goto exit; - } - - if(ops == AT_PARTITION_READ){ - flash_stream_read(&flash, UART_SETTING_SECTOR+offset, len, data); - goto exit; - } - - //erase BACKUP_SECTOR - flash_erase_sector(&flash, UART_SETTING_BACKUP_SECTOR); - - if(ops == AT_PARTITION_WRITE){ - // backup new data - flash_stream_write(&flash, UART_SETTING_BACKUP_SECTOR+offset, len, data); - } - - //backup front data to backup sector - for(i = 0; i < offset; i += sizeof(read_data)){ - flash_read_word(&flash, UART_SETTING_SECTOR + i, &read_data); - flash_write_word(&flash, UART_SETTING_BACKUP_SECTOR + i,read_data); - } - - //backup rear data - for(i = (offset + size); i < 0x1000; i += sizeof(read_data)){ - flash_read_word(&flash, UART_SETTING_SECTOR + i, &read_data); - flash_write_word(&flash, UART_SETTING_BACKUP_SECTOR + i,read_data); - } - - //erase UART_SETTING_SECTOR - flash_erase_sector(&flash, UART_SETTING_SECTOR); - - //retore data to UART_SETTING_SECTOR from UART_SETTING_BACKUP_SECTOR - for(i = 0; i < 0x1000; i+= sizeof(read_data)){ - flash_read_word(&flash, UART_SETTING_BACKUP_SECTOR + i, &read_data); - flash_write_word(&flash, UART_SETTING_SECTOR + i,read_data); - } - - //erase BACKUP_SECTOR - flash_erase_sector(&flash, UART_SETTING_BACKUP_SECTOR); - -exit: - device_mutex_unlock(RT_DEV_LOCK_FLASH); - return; -#endif -} - -int read_uart_atcmd_setting_from_system_data(UART_LOG_CONF* uartconf) -{ -// flash_t flash; - UART_LOG_CONF conf; - bool load_default = _TRUE; - -// device_mutex_lock(RT_DEV_LOCK_FLASH); -// flash_stream_read(&flash, UART_AT_DATA,sizeof(UART_LOG_CONF), (u8 *)&conf); - atcmd_update_partition_info(AT_PARTITION_UART, AT_PARTITION_READ, (u8 *)&conf, sizeof(UART_LOG_CONF)); - do{ - if(conf.FlowControl != AUTOFLOW_DISABLE && conf.FlowControl != AUTOFLOW_ENABLE) - break; - - if(conf.DataBits != 5 - && conf.DataBits != 6 - && conf.DataBits != 7 - && conf.DataBits != 8) //5, 6, 7, 8 - break; - - if(conf.Parity != ParityNone && conf.Parity != ParityOdd && conf.Parity != ParityEven) - break; - - if(conf.StopBits != 1 && conf.StopBits != 2) - break; - - load_default = _FALSE; - }while(0); - - if(load_default == _TRUE){ - // load default setting - uartconf->BaudRate = DEFAULT_BAUDRATE; - uartconf->DataBits = 8; - uartconf->Parity = ParityNone; - uartconf->StopBits = 1; - uartconf->FlowControl = AUTOFLOW_DISABLE; - } - else{ - uartconf->BaudRate = conf.BaudRate; - uartconf->DataBits = conf.DataBits; - uartconf->Parity = conf.Parity; - uartconf->StopBits = conf.StopBits; - uartconf->FlowControl = conf.FlowControl; - } -// device_mutex_unlock(RT_DEV_LOCK_FLASH); - printf("\r\nAT_UART_CONF: %d,%d,%d,%d,%d\r\n", - uartconf->BaudRate, - uartconf->DataBits, - uartconf->StopBits, - uartconf->Parity, - uartconf->FlowControl); - - return 0; -} - -int write_uart_atcmd_setting_to_system_data(UART_LOG_CONF* uartconf) -{ -#if 0 - flash_t flash; - - u8 data1[sizeof(UART_LOG_CONF)]; - u8 data2[sizeof(UART_LOG_CONF)]; - - u32 data,i; - - memset(data2, 0xFF, sizeof(UART_LOG_CONF)); - - //Get upgraded image 2 addr from offset - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, UART_AT_DATA,sizeof(UART_LOG_CONF), data1); - - if(memcmp(data1,data2,sizeof(UART_LOG_CONF)) == 0){ - flash_stream_write(&flash, UART_AT_DATA, sizeof(UART_LOG_CONF),(u8*)uartconf); - }else{ - //erase backup sector - flash_erase_sector(&flash, BACKUP_SECTOR); - - // backup log uart configuration - flash_stream_write(&flash, BACKUP_SECTOR, sizeof(UART_LOG_CONF),(u8*)uartconf); - - //backup system data to backup sector - for(i = sizeof(UART_LOG_CONF); i < 0x1000; i+= 4){ - flash_read_word(&flash, UART_AT_DATA + i, &data); - flash_write_word(&flash, BACKUP_SECTOR + i,data); - } - //erase system data - flash_erase_sector(&flash, UART_AT_DATA); - //write data back to system data - for(i = 0; i < 0x1000; i+= 4){ - flash_read_word(&flash, BACKUP_SECTOR + i, &data); - flash_write_word(&flash, UART_AT_DATA + i,data); - } - //erase backup sector - flash_erase_sector(&flash, BACKUP_SECTOR); - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); -#else - atcmd_update_partition_info(AT_PARTITION_UART, AT_PARTITION_WRITE, (u8 *)uartconf, sizeof(UART_LOG_CONF)); -#endif - return 0; -} - -int reset_uart_atcmd_setting(){ -#if 0 - flash_t flash; - - u8 data1[sizeof(UART_LOG_CONF)]; - u8 data2[sizeof(UART_LOG_CONF)]; - - u32 data,i; - - memset(data2, 0xFF, sizeof(UART_LOG_CONF)); - - //Get upgraded image 2 addr from offset - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, UART_AT_DATA,sizeof(UART_LOG_CONF), data1); - - if(memcmp(data1,data2,sizeof(UART_LOG_CONF)) == 0){ - ; - }else{ - //erase backup sector - flash_erase_sector(&flash, BACKUP_SECTOR); - - // erase uart configuration - flash_stream_write(&flash, BACKUP_SECTOR, sizeof(UART_LOG_CONF),(u8*)data2); - //backup system data to backup sector - for(i = sizeof(UART_LOG_CONF); i < 0x1000; i+= 4){ - flash_read_word(&flash, UART_AT_DATA + i, &data); - flash_write_word(&flash, BACKUP_SECTOR + i,data); - } - //erase system data - flash_erase_sector(&flash, UART_AT_DATA); - //write data back to system data - for(i = 0; i < 0x1000; i+= 4){ - flash_read_word(&flash, BACKUP_SECTOR + i, &data); - flash_write_word(&flash, UART_AT_DATA + i,data); - } - //erase backup sector - flash_erase_sector(&flash, BACKUP_SECTOR); - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); -#else -#ifdef USE_FLASH_EEP - flash_write_cfg(NULL, AT_PARTITION_UART, 0); - flash_write_cfg(NULL, AT_PARTITION_WIFI, 0); - flash_write_cfg(NULL, AT_PARTITION_LWIP, 0); -#else - atcmd_update_partition_info(AT_PARTITION_ALL, AT_PARTITION_ERASE, NULL, 0); -#endif -#endif - return 0; -} - -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) -#include "gpio_irq_api.h" -#define UART_AT_RX_WAKE UART_RX -void gpio_uart_at_rx_irq_callback (uint32_t id, gpio_irq_event event) -{ - /* WAKELOCK_LOGUART is also handled in log service. - * It is release after a complete command is sent. - **/ - //acquire_wakelock(WAKELOCK_LOGUART); -} - -void uart_at_rx_wakeup() -{ - gpio_irq_t gpio_rx_wake; -#ifdef RTL8711AM -#if (UART_AT_RX_WAKE!=PA_0)||(UART_AT_RX_WAKE!=PE_3) -#error "Set pin rx_wakeup!" -#endif -#endif - gpio_irq_init(&gpio_rx_wake, UART_AT_RX_WAKE, gpio_uart_at_rx_irq_callback, 0); - gpio_irq_set(&gpio_rx_wake, IRQ_FALL, 1); // Falling Edge Trigger - gpio_irq_enable(&gpio_rx_wake); -} -#endif - -void uart_atcmd_reinit(UART_LOG_CONF* uartconf){ - serial_baud(&at_cmd_sobj,uartconf->BaudRate); - serial_format(&at_cmd_sobj, uartconf->DataBits, (SerialParity)uartconf->Parity, uartconf->StopBits); - - // set flow control, only support RTS and CTS concurrent mode - // rxflow and tx flow is fixed by hardware -#define rxflow UART_RTS -#define txflow UART_CTS - if(uartconf->FlowControl){ - pin_mode(txflow, PullDown); //init CTS in low - serial_set_flow_control(&at_cmd_sobj, FlowControlRTSCTS, rxflow, txflow); - } - else - serial_set_flow_control(&at_cmd_sobj, FlowControlNone, rxflow, txflow); -} - -void uart_at_send_string(char *str) -{ - unsigned int i=0; - while (str[i] != '\0') { - serial_putc(&at_cmd_sobj, str[i]); - i++; - } -} - -#if UART_AT_USE_DMA_TX -static void uart_at_send_buf_done(uint32_t id) -{ - //serial_t *sobj = (serial_t *)id; - - RtlUpSemaFromISR(&uart_at_dma_tx_sema); -} -#endif - -void uart_at_send_buf(u8 *buf, u32 len) -{ - unsigned char *st_p=buf; - if(!len || (!buf)){ - return; - } -#if UART_AT_USE_DMA_TX - int ret; - while(RtlDownSema(&uart_at_dma_tx_sema) == pdTRUE){ - ret = serial_send_stream_dma(&at_cmd_sobj, st_p, len); - if(ret != HAL_OK){ - RtlUpSema(&uart_at_dma_tx_sema); - return; - }else{ - return; - } - } -#else - while(len){ - serial_putc(&at_cmd_sobj, *st_p); - st_p++; - len--; - } -#endif -} -/* -void uart_at_lock(void) -{ - RtlDownSema(&at_printf_sema); -} - -void uart_at_unlock(void) -{ - RtlUpSema(&at_printf_sema); -} - -void uart_at_lock_init(){ - RtlInitSema(&at_printf_sema, 1); -} -*/ -void uart_irq(uint32_t id, SerialIrq event) -{ - serial_t *sobj = (serial_t *)id; - unsigned char rc=0; - static unsigned char temp_buf[LOG_SERVICE_BUFLEN] = "\0"; - static unsigned int buf_count = 0; - static unsigned char combo_key = 0; - static u32 last_tickcnt = 0; //to check if any data lost - static bool is_data_cmd = _FALSE; // to mark if it's a data command - static u32 data_sz = 0, data_cmd_sz =0; // command will send to log handler until "data_cmd_sz" characters are received - - if(event == RxIrq) { - rc = serial_getc(sobj); - - if(atcmd_lwip_is_tt_mode()){ - log_buf[atcmd_lwip_tt_datasize++] = rc; - atcmd_lwip_tt_lasttickcnt = xTaskGetTickCountFromISR(); - if(atcmd_lwip_tt_datasize == 1) - rtw_up_sema_from_isr((_Sema *)&atcmd_lwip_tt_sema); - return; - } - - if(buf_count == 4){ - // if this is a data command with hex data, then '\n' should not be treated - // as the end of command - if(strncmp(temp_buf, "ATPT", C_NUM_AT_CMD)==0){ - is_data_cmd = _TRUE; - } - } - if(buf_count > C_NUM_AT_CMD && is_data_cmd == _TRUE){ - if(data_cmd_sz == 0){ - if(data_sz == 0){ - if(rc == ','){ - //first delimeter, ATxx=[sz],.... - char str[10]={0}; - char size_pos = C_NUM_AT_CMD + C_NUM_AT_CMD_DLT; - memcpy(str, &temp_buf[size_pos], buf_count-size_pos); - data_sz = atoi(str); //get data size - } - }else{ - if(rc == ':'){ //data will start after this delimeter ':' - strncpy(log_buf, (char *)temp_buf, buf_count); - memset(temp_buf,'\0',buf_count); - last_tickcnt = xTaskGetTickCountFromISR(); - data_cmd_sz = buf_count + 1 + data_sz; - } - } - } - - if(data_cmd_sz){ - if((!gAT_Echo) && (rtw_systime_to_ms(xTaskGetTickCountFromISR() - last_tickcnt) > UART_AT_MAX_DELAY_TIME_MS)){ - uart_at_send_string("\r\nERROR:data timeout\r\n\n# "); - memset(log_buf, 0, buf_count); - is_data_cmd = _FALSE; - data_sz = 0; - data_cmd_sz = 0; - buf_count=0; - last_tickcnt = 0; - return; - } - last_tickcnt = xTaskGetTickCountFromISR(); - log_buf[buf_count++]=rc; - if(gAT_Echo == 1){ - serial_putc(sobj, rc); - } - if(buf_count >= data_cmd_sz){ - log_buf[data_cmd_sz - data_sz - 1] = '\0'; //for log service handler parse to get command parameter, replace ":" with "\0" - is_data_cmd = _FALSE; - data_sz = 0; - data_cmd_sz = 0; - buf_count=0; - last_tickcnt = 0; - rtw_up_sema_from_isr((_Sema *)&log_rx_interrupt_sema); - } - return; - } - } - - if (rc == KEY_ESC) { - combo_key = 1; - } - else if (combo_key == 1){ - if (rc == KEY_LBRKT) { - combo_key = 2; - } - else{ - combo_key = 0; - } - } - else if (combo_key == 2){ - //if ((rc=='A')|| rc=='B'){//up and down - //} - combo_key=0; - } - else if(rc == KEY_ENTER){ - if(buf_count>0){ - memset(log_buf,'\0',LOG_SERVICE_BUFLEN); - strncpy(log_buf,(char *)&temp_buf[0],buf_count); - rtw_up_sema_from_isr((_Sema *)&log_rx_interrupt_sema); - memset(temp_buf,'\0',buf_count); - is_data_cmd = _FALSE; - data_sz = 0; - data_cmd_sz = 0; - buf_count=0; - last_tickcnt = 0; - }else{ - uart_at_send_string(STR_END_OF_ATCMD_RET); - } - } - else if(rc == KEY_BS){ - if(buf_count>0){ - buf_count--; - temp_buf[buf_count] = '\0'; - if(gAT_Echo == 1){ - serial_putc(sobj, rc); - serial_putc(sobj, ' '); - serial_putc(sobj, rc); - } - } - } - else{ - // skip characters until "A" - if((buf_count == 0) && (rc != 'A')){ - if(gAT_Echo == 1){ - uart_at_send_string("\r\nERROR:command should start with 'A'"STR_END_OF_ATCMD_RET); - } - return; - } - if(buf_count < (LOG_SERVICE_BUFLEN - 1)){ - temp_buf[buf_count] = rc; - buf_count++; - if(gAT_Echo == 1){ - serial_putc(sobj, rc); - } - } - else if(buf_count == (LOG_SERVICE_BUFLEN - 1)){ - temp_buf[buf_count] = '\0'; - if(gAT_Echo == 1){ - uart_at_send_string("\r\nERROR:exceed size limit"STR_END_OF_ATCMD_RET); - } - } - } - } -} - -void uart_atcmd_main(void) -{ - UART_LOG_CONF uartconf; - - read_uart_atcmd_setting_from_system_data(&uartconf); - serial_init(&at_cmd_sobj, UART_TX, UART_RX); - serial_baud(&at_cmd_sobj,uartconf.BaudRate); - serial_format(&at_cmd_sobj, uartconf.DataBits, (SerialParity)uartconf.Parity, uartconf.StopBits); - serial_rx_fifo_level(&at_cmd_sobj, FifoLvHalf); - // set flow control, only support RTS and CTS concurrent mode - // rxflow and tx flow is fixed by hardware - #define rxflow UART_RTS - #define txflow UART_CTS - if(uartconf.FlowControl){ - pin_mode(txflow, PullDown); //init CTS in low - serial_set_flow_control(&at_cmd_sobj, FlowControlRTSCTS, rxflow, txflow); - } - else - serial_set_flow_control(&at_cmd_sobj, FlowControlNone, rxflow, txflow); - - /*uart_at_lock_init();*/ - -#if UART_AT_USE_DMA_TX - RtlInitSema(&uart_at_dma_tx_sema, 1); -#endif - -#if UART_AT_USE_DMA_TX - serial_send_comp_handler(&at_cmd_sobj, (void*)uart_at_send_buf_done, (uint32_t)&at_cmd_sobj); -#endif - - serial_irq_handler(&at_cmd_sobj, uart_irq, (uint32_t)&at_cmd_sobj); - serial_irq_set(&at_cmd_sobj, RxIrq, 1); - -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) - uart_at_rx_wakeup(); -#endif -} - -static void uart_atcmd_thread(void *param) -{ - p_wlan_init_done_callback = NULL; -#if CONFIG_DEBUG_LOG > 3 - ConfigDebugErr = -1; - ConfigDebugInfo = ~_DBG_SPI_FLASH_; - ConfigDebugWarn = -1; - CfgSysDebugErr = -1; - CfgSysDebugInfo = -1; - CfgSysDebugWarn = -1; -#endif - atcmd_wifi_restore_from_flash(); - atcmd_lwip_restore_from_flash(); - vTaskDelay(20); //rtw_msleep_os(20); - uart_atcmd_main(); - at_printf("\r\nAT COMMAND READY"); - if(atcmd_lwip_is_tt_mode()) - at_printf(STR_END_OF_ATDATA_RET); - else - at_printf(STR_END_OF_ATCMD_RET); - _AT_DBG_MSG(AT_FLAG_COMMON, AT_DBG_ALWAYS, STR_END_OF_ATCMD_RET); - vTaskDelete(NULL); -} - -int uart_atcmd_module_init(void){ -#if CONFIG_DEBUG_LOG > 3 - printf("Time at start %d ms.\n", xTaskGetTickCount()); -#endif - if(xTaskCreate(uart_atcmd_thread, ((const char*)"uart_atcmd_thread"), 1024, NULL, tskIDLE_PRIORITY + 1 , NULL) != pdPASS) // tskIDLE_PRIORITY + 1 - printf("\n\r%s xTaskCreate(uart_atcmd_thread) failed", __FUNCTION__); - return 0; -} - -void example_uart_atcmd(void) -{ - //if(xTaskCreate(uart_atcmd_thread, ((const char*)"uart_atcmd_thread"), 1024, NULL, tskIDLE_PRIORITY + 1 , NULL) != pdPASS) - // printf("\n\r%s xTaskCreate(uart_atcmd_thread) failed", __FUNCTION__); - p_wlan_init_done_callback = uart_atcmd_module_init; - return; -} -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/example/uart_atcmd/example_uart_atcmd.h b/Firmware/RTLGDB/USDK/component/common/example/uart_atcmd/example_uart_atcmd.h deleted file mode 100644 index 2320f72..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/uart_atcmd/example_uart_atcmd.h +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef __EXAMPLE_UART_ATCMD_H__ -#define __EXAMPLE_UART_ATCMD_H__ - -/****************************************************************************** - * - * Copyright(c) 2007 - 2015 Realtek Corporation. All rights reserved. - * - * - ******************************************************************************/ -#if CONFIG_EXAMPLE_UART_ATCMD -#include "FreeRTOS.h" -#include "semphr.h" -#include "osdep_api.h" - - -#if defined(RTL8710AF) -// RTL8710AF -#define UART_TX PA_4 // PC_3 -#define UART_RX PA_0 // PC_0 -#define UART_RTS PA_2 // PC_2 -#define UART_CTS PA_1 // PC_1 - -#elif 0 // defined(RTL8711AM) -// RTL8711AM -#define UART_TX PA_7 -#define UART_RX PA_6 // no Interrupt! -#define UART_RTS PA_3 -#define UART_CTS PA_5 - -#elif 0 // else -// RTL8711AM + RTL8710AF -#define UART_TX PC_3 -#define UART_RX PC_0 // no Interrupt! -#define UART_RTS PC_2 -#define UART_CTS PC_1 - -#elif defined(RTL8711AM) -// RTL8711AM + RTL8710AF -#define UART_TX PE_0 -#define UART_RX PE_3 -#define UART_RTS PE_1 -#define UART_CTS PE_2 - -#endif - -#define KEY_ENTER 0xd -#define KEY_BS 0x8 -#define KEY_ESC 0x1B -#define KEY_LBRKT 0x5B - -void uart_at_lock(void); -void uart_at_unlock(void); -void uart_at_send_string(char *str); -void uart_at_send_buf(u8 *buf, u32 len); -void example_uart_atcmd(void); - -#include "at_cmd/atcmd_wifi.h" - -void uart_atcmd_reinit(UART_LOG_CONF* uartconf); -int write_uart_atcmd_setting_to_system_data(UART_LOG_CONF* uartconf); - -extern u8 key_2char2num(u8 hch, u8 lch); -static void at_hex2str(const u8 *start, u32 size, u8 *out, u32 out_size) -{ - int index, index2; - u8 *buf, *line; - - if(!start ||(size==0)||(!out)||(out_size==0)) - return; - - buf = (u8*)start; - line = (u8*)out; - for (index = 0, index2=0; (index < size)&&(index2=0; i--) - { - rtp_uninit_payload(stream_ctx, &rtp_payload[i]); - } - goto exit; - } - } - - if(uvc_set_param(stream_ctx, UVC_FORMAT_MJPEG, 640, 480, 30)<0) - goto exit; - - if(uvc_stream_on(stream_ctx)<0) - goto exit; - - /*do buffer queue & dequeue inside the loop*/ - payload_queue.flush_err = 0; - while(!(payload_queue.flush_err)) - { - memset(&buf, 0, sizeof(struct uvc_buf_context)); - ret = uvc_dqbuf(stream_ctx, &buf); - if(buf.index < 0) - continue;//empty buffer retrieved - if((uvc_buf_check(&buf)<0)||(ret < 0)){ - RTSP_ERROR("\n\rbuffer error!"); - ret = -ENOENT; - goto exit; - } - rtp_payload[buf.index].index = buf.index; - if(rtp_fill_payload(stream_ctx, &rtp_payload[buf.index], buf.data, buf.len) < 0) - goto exit; - - /*add rtp_payload into payload queue*/ - RtlDownMutex(&payload_queue.wait_mutex); - list_add_tail(&rtp_payload[buf.index].rtp_list, &payload_queue.wait_queue); - RtlUpMutex(&payload_queue.wait_mutex); - RtlUpSema(&payload_queue.wait_sema); - - //check if any rtp payload is queued in done_queue - while(RtlDownSemaWithTimeout(&payload_queue.done_sema, 5)==0) - { - if(payload_queue.flush_err) - goto exit; - } - if(!list_empty(&payload_queue.done_queue)) - { - RtlDownMutex(&payload_queue.done_mutex); - payload = list_first_entry(&payload_queue.done_queue, struct rtp_object, rtp_list); - if(payload == NULL) - { - RtlUpMutex(&payload_queue.done_mutex); - continue; - } - list_del_init(&payload->rtp_list); - RtlUpMutex(&payload_queue.done_mutex); - - buf.index = payload->index; - buf.data = payload->data; - buf.len = payload->len; - - ret = uvc_qbuf(stream_ctx, &buf); - if (ret < 0){ - RTSP_ERROR("\n\rread_frame mmap method enqueue buffer failed"); - ret = -ENOENT; - goto exit; - } - } - } - -exit: - uvc_stream_off(stream_ctx); - uvc_stream_free(stream_ctx); - - for(i = 0; i < VIDEO_MAX_FRAME; i++) - { - rtp_uninit_payload(stream_ctx, &rtp_payload[i]); - } - - //free payload_queue memory - INIT_LIST_HEAD(&payload_queue.wait_queue); - INIT_LIST_HEAD(&payload_queue.done_queue); - RtlMutexFree(&payload_queue.wait_mutex); - RtlMutexFree(&payload_queue.done_mutex); - RtlFreeSema(&payload_queue.wait_sema); - RtlFreeSema(&payload_queue.done_sema); - - printf("\n\rstream free success, delete task..."); - vTaskDelete(NULL); -} - - - -int uvc_rtp_init(struct rtsp_context *rtsp_ctx); -void uvc_rtsp_handle(void *param) -{ - struct stream_context *stream_ctx = (struct stream_context *)param; - struct rtsp_context *rtsp_ctx; - u8 *request_header; //buffer to hold rtsp request - struct sockaddr_in server_addr, client_addr; - int client_socket; - socklen_t client_addr_len = sizeof(struct sockaddr_in); - - fd_set read_fds; - struct timeval timeout; - int ok; - rtsp_ctx = malloc(sizeof(struct rtsp_context)); - if(rtsp_ctx == NULL) - { - RTSP_ERROR("\n\rrtsp context is NULL"); - goto exit; - } - request_header = malloc(512); - if(request_header == NULL) - { - RTSP_ERROR("\n\rallocate request header buffer failed"); - goto exit; - } - // Delay to wait for IP by DHCP - vTaskDelay(500); - /*init rtsp context to unicast udp mode*/ - if(rtsp_context_init(rtsp_ctx) < 0) - goto exit; - - server_addr.sin_family = AF_INET; - server_addr.sin_addr.s_addr = *(uint32_t *)(rtsp_ctx->connect_ctx.server_ip)/*htonl(INADDR_ANY)*/; - server_addr.sin_port = htons(rtsp_ctx->connect_ctx.port); - - if(bind(rtsp_ctx->connect_ctx.socket_id, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { - RTSP_ERROR("\n\rCannot bind stream socket"); - goto exit; - } - listen(rtsp_ctx->connect_ctx.socket_id, 1); - printf("\n\rrtsp context initialized!"); - - stream_ctx->protoCtx = (void *)rtsp_ctx; - rtsp_ctx->stream_ctx = (void *)stream_ctx; - - /*start rtp task*/ - uvc_rtp_init(rtsp_ctx); - - - while(stream_ctx->allowStream) - { - FD_ZERO(&read_fds); - timeout.tv_sec = 1; - timeout.tv_usec = 0; - FD_SET(rtsp_ctx->connect_ctx.socket_id, &read_fds); - if(select(1, &read_fds, NULL, NULL, &timeout)) - { - client_socket = accept(rtsp_ctx->connect_ctx.socket_id,(struct sockaddr *)&client_addr, &client_addr_len); - if(client_socket < 0) - { - RTSP_ERROR("client_socket error:%d\r\n", client_socket); - close(client_socket); - continue; - } - *(rtsp_ctx->connect_ctx.remote_ip + 3) = (unsigned char) (client_addr.sin_addr.s_addr >> 24); - *(rtsp_ctx->connect_ctx.remote_ip + 2) = (unsigned char) (client_addr.sin_addr.s_addr >> 16); - *(rtsp_ctx->connect_ctx.remote_ip + 1) = (unsigned char) (client_addr.sin_addr.s_addr >> 8); - *(rtsp_ctx->connect_ctx.remote_ip) = (unsigned char) (client_addr.sin_addr.s_addr ); - - while(stream_ctx->allowStream) - { - - - read(client_socket, request_header, 512); - rtsp_readheader(request_header); - if(*request_header == 0) - { - - //Do I need to send error response to client? - continue; - } - - - rtsp_getparam(rtsp_ctx, request_header); - switch(rtsp_ctx->rtsp_cmd) - { - - case(CMD_OPTIONS): - RTSP_PRINTF("\n\rReceive options command!"); - if(rtsp_ctx->state == RTSP_PLAYING) - break; - - rtsp_cmd_options(rtsp_ctx); - ok = write(client_socket, rtsp_ctx->response, strlen(rtsp_ctx->response)); - if (ok <= 0) - { - - - RTSP_ERROR("\n\rsend OPTIONS response failed!"); - goto exit; - } - break; - - - - case(CMD_DESCRIBE): - RTSP_PRINTF("\n\rReceive describe command!"); - if(rtsp_ctx->state == RTSP_PLAYING) - break; - - rtsp_cmd_describe(rtsp_ctx); - ok = write(client_socket, rtsp_ctx->response, strlen(rtsp_ctx->response)); - if (ok <= 0) - { - - - RTSP_ERROR("\n\rsend DESCRIBE response failed!"); - goto exit; - } - break; - - - - case(CMD_SETUP): - RTSP_PRINTF("\n\rReceive setup command!"); - if(rtsp_ctx->state == RTSP_PLAYING) - break; - - //fill transport parameter - rtsp_cmd_setup(rtsp_ctx); - ok = write(client_socket, rtsp_ctx->response, strlen(rtsp_ctx->response)); - if (ok <= 0) - { - - - RTSP_ERROR("\n\rsend SETUP response failed!"); - goto exit; - } - - - if(rtsp_ctx->state == RTSP_INIT) - { - - rtsp_ctx->state = RTSP_READY; - RTSP_PRINTF("\n\rstate changed from RTSP_INIT to RTSP_READY"); - }; - break; - - - case(CMD_TEARDOWN): - RTSP_PRINTF("\n\rReceive teardown command!"); - rtsp_ctx->state = RTSP_INIT; - rtsp_cmd_teardown(rtsp_ctx); - ok = write(client_socket, rtsp_ctx->response, strlen(rtsp_ctx->response)); - if (ok <= 0) - { - - - RTSP_ERROR("\n\rsend TEARDOWN response failed!"); - goto exit; - } - - - - - RTSP_PRINTF("\n\rstreaming teardown, state changed back to RTSP_INIT"); - /*have to wait until rtp server reinit*/ - vTaskDelay(1000); - goto out; - break; - - - case(CMD_PLAY): - RTSP_PRINTF("\n\rReceive play command!"); - if(rtsp_ctx->state == RTSP_PLAYING) - break; - - rtsp_cmd_play(rtsp_ctx); - ok = write(client_socket, rtsp_ctx->response, strlen(rtsp_ctx->response)); - if (ok <= 0) - { - - - RTSP_ERROR("\n\rsend PLAY response failed!"); - goto exit; - } - - - if(rtsp_ctx->state == RTSP_READY) - { - - rtsp_ctx->state = RTSP_PLAYING; - RTSP_PRINTF("\n\rstate changed from RTSP_READY to RTSP_PLAYING"); - rtsp_ctx->is_rtp_start = 1; - RtlUpSema(&rtsp_ctx->start_rtp_sema); - } - break; - - - - - case(CMD_PAUSE): - RTSP_PRINTF("\n\rReceive pause command!"); - rtsp_cmd_pause(rtsp_ctx); - ok = write(client_socket, rtsp_ctx->response, strlen(rtsp_ctx->response)); - if (ok <= 0) - { - - - RTSP_ERROR("\n\rsend PAUSE response failed!"); - goto exit; - } - - - if(rtsp_ctx->state == RTSP_PLAYING) - { - - rtsp_ctx->state = RTSP_READY; - RTSP_PRINTF("\n\rstate changed from RTSP_PLAYING to RTSP_READY"); - } - break; - default: - - - - RTSP_ERROR("\n\rReceive unrecognized command!"); - rtsp_cmd_error(rtsp_ctx); - ok = write(client_socket, rtsp_ctx->response, strlen(rtsp_ctx->response)); - if (ok <= 0) - { - - - RTSP_ERROR("\n\rsend ERROR response failed!"); - goto exit; - } - rtsp_ctx->state = RTSP_INIT; - } - if((rtsp_ctx->is_rtp_start == 0) && (rtsp_ctx->state == RTSP_PLAYING)) - { - - - rtsp_ctx->state = RTSP_INIT; - RtlUpSema(&rtsp_ctx->start_rtp_sema); - } - - - } -out: - rtsp_ctx->state = RTSP_INIT; - close(client_socket); - } - - } -exit: - if((rtsp_ctx->is_rtp_start) == 1){ - RtlUpSema(&rtsp_ctx->start_rtp_sema); - } - printf("\n\rrtsp -> Available heap 0x%x\n", xPortGetFreeHeapSize()); - close(client_socket); - close(rtsp_ctx->connect_ctx.socket_id); - if(request_header != NULL) - free(request_header); - /*wait until rtp task being destroyed*/ - while((rtsp_ctx->is_rtp_start)) - { - vTaskDelay(100); - } - rtsp_context_free(rtsp_ctx); - if(rtsp_ctx != NULL) - free(rtsp_ctx); - RTSP_ERROR("\n\rkill rtsp server thread!"); - //printf("Available heap 0x%x\n", xPortGetFreeHeapSize()); - //thread must be killed after server socket is terminated - vTaskDelete(NULL); - -} - - -void uvc_rtp_udp_init(struct stream_context *stream_ctx) -{ - - struct rtsp_context *rtsp_ctx = (struct rtsp_context *)stream_ctx->protoCtx; - struct uvc_buf_context buf; - struct rtp_object *payload; - struct sockaddr_in rtp_addr; - int rtp_socket; - int i, ret; - socklen_t addrlen = sizeof(struct sockaddr_in); - int rtp_port; - /* varibles for recording statistic use*/ - unsigned int cnt, total, total_time, time1, time2, time3; - cnt = total = total_time = time1 = time2 = time3 = 0; - /*init rtp socket*/ - rtp_socket = socket(AF_INET, SOCK_DGRAM, 0); - rtp_port = rtsp_ctx->transport.serverport_min; - memset(&rtp_addr, 0, addrlen); - rtp_addr.sin_family = AF_INET; - rtp_addr.sin_addr.s_addr = *(uint32_t *)(rtsp_ctx->connect_ctx.server_ip); - rtp_addr.sin_port = htons((u16)rtp_port); - if (bind(rtp_socket,(struct sockaddr *)&rtp_addr, addrlen)<0) { - RTSP_ERROR("bind failed\r\n"); - goto exit; - } - - -restart: - while((stream_ctx->isProcess)&&(rtsp_ctx->state == RTSP_PLAYING)) - { - if(RtlDownSemaWithTimeout(&payload_queue.wait_sema, 5)==0) - continue; - time1 = time3; - time2 = xTaskGetTickCount(); - /*send rtp payload*/ - if(!list_empty(&payload_queue.wait_queue)) - { - RtlDownMutex(&payload_queue.wait_mutex); - payload = list_first_entry(&payload_queue.wait_queue, struct rtp_object, rtp_list); - if(payload == NULL) - { - RtlUpMutex(&payload_queue.wait_mutex); - continue; - } - list_del_init(&payload->rtp_list); - RtlUpMutex(&payload_queue.wait_mutex); - - if(rtsp_ctx->state == RTSP_PLAYING) - { - - payload->connect_ctx.socket_id = rtp_socket; - payload->connect_ctx.port = (u16)rtsp_ctx->transport.clientport_min; - payload->connect_ctx.server_ip = rtsp_ctx->connect_ctx.server_ip; - payload->connect_ctx.remote_ip = rtsp_ctx->connect_ctx.remote_ip; - - ret = rtp_udp_send(stream_ctx, payload); - } - - //dequeue the this buffer from payload_queue - RtlDownMutex(&payload_queue.done_mutex); - list_add_tail(&payload->rtp_list, &payload_queue.done_queue); - RtlUpMutex(&payload_queue.done_mutex); - RtlUpSema(&payload_queue.done_sema); - - time3 = xTaskGetTickCount(); - cnt ++; - total += payload->len; - total_time += (time3-time1); - if(cnt == 100) - { - /* print statistics info */ - /*1.average frame size(kB) T:2.time waited for next frame sending start(ms)-3.udp sending time(ms) 4.frame rate(fps)*/ - printf("\n\r%dkB T:%d-%d %dfps", (total/102400), (time2 - time1), (time3 - time2), (100000/total_time)); - cnt = 0; - total = 0; - total_time = 0; - } - } - - } - mdelay(1000); - if(rtsp_ctx->state == RTSP_READY) - { - goto restart; - } - -exit: - close(rtp_socket); -} - -void uvc_rtp_tcp_init(struct stream_context *stream_ctx) -{ -} - -void uvc_rtp_multi_init(struct stream_context *stream_ctx) -{ -} - -void uvc_rtp_handle(void *param) -{ - struct stream_context *stream_ctx = (struct stream_context *)param; - struct rtsp_context *rtsp_ctx = (struct rtsp_context *)stream_ctx->protoCtx; - - /*go down when rtsp state change to playing*/ - while(1) - { - RtlDownSema(&rtsp_ctx->start_rtp_sema); - /*check rtp cast mode*/ - if(rtsp_ctx->state == RTSP_PLAYING) - { - printf("\n\rrtp start..."); - switch(rtsp_ctx->transport.castMode) - { - case(UNICAST_UDP_MODE): - uvc_rtp_udp_init(stream_ctx); - break; - case(MULTICAST_MODE): - uvc_rtp_tcp_init(stream_ctx); - break; - case(UNICAST_TCP_MODE): - uvc_rtp_multi_init(stream_ctx); - break; - default: - RTSP_ERROR("\r\n unknown streaming mode! Go back to RTSP_INIT state\n"); - rtsp_ctx->is_rtp_start = 0; - break; - } - }else{ - - break; - } - printf("\n\rrtp stop..."); - } - rtsp_ctx->is_rtp_start = 0; - RTSP_ERROR("\n\rkill rtp server thread!"); - //printf("Available heap 0x%x\n", xPortGetFreeHeapSize()); - vTaskDelete(NULL); -} - - -int uvc_rtp_init(struct rtsp_context *rtsp_ctx) -{ - struct stream_context *stream_ctx = (struct stream_context *)rtsp_ctx->stream_ctx; - - if(xTaskCreate(uvc_rtp_handle, ((const signed char*)"uvc_rtp_handle"), 2048, (void *)stream_ctx, tskIDLE_PRIORITY + 2, NULL) != pdPASS) { - RTSP_ERROR("\r\n uvc_rtp_handle: Create Task Error\n"); - return -1; - } - return 0; -} - -void uvc_task_init(void * param) -{ - -/*entry to start uvc streaming -- dequeue uvc buffer*/ - if(xTaskCreate(uvc_entry_handle, ((const signed char*)"uvc_entry_handle"), 1024, param, tskIDLE_PRIORITY + 2, NULL) != pdPASS) { - UVC_ERROR("\r\n uvc_entry_handle: Create Task Error\n"); - } - -/*entry to start rtsp server*/ -#if UVC_RTSP_EN - if(xTaskCreate(uvc_rtsp_handle, ((const signed char*)"uvc_rtsp_handle"), 4096, param, tskIDLE_PRIORITY + 2, NULL) != pdPASS) { - RTSP_ERROR("\r\n uvc_rtsp_handle: Create Task Error\n"); - } -#endif -} - - -/************************************************************end of rtsp/rtp with motion-jpeg************************************************/ diff --git a/Firmware/RTLGDB/USDK/component/common/example/uvc/example_uvc.h b/Firmware/RTLGDB/USDK/component/common/example/uvc/example_uvc.h deleted file mode 100644 index 12c2742..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/uvc/example_uvc.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef EXAMPLE_UVC_H -#define EXAMPLE_UVC_H - -#include -#include "platform_opts.h" -#include "dlist.h" -#include "osdep_api.h" - -#define UVC_RTSP_EN 1 - -//example structure to handle rtp_object operation in queue -struct rtp_payload_queue -{ - struct list_head wait_queue; - _Mutex wait_mutex; - struct list_head done_queue; - _Mutex done_mutex; - _Sema wait_sema; //up it whenever a rtp payload queue in wait_queue - _Sema done_sema; //up it whenever a rtp payload queue in done_queue - int flush_err; -}; - -void example_uvc(void); - -#endif /* EXAMPLE_UVC_H */ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/example/uvc/readme.txt b/Firmware/RTLGDB/USDK/component/common/example/uvc/readme.txt deleted file mode 100644 index 98298c4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/uvc/readme.txt +++ /dev/null @@ -1,8 +0,0 @@ - -THis is an example for USB Video Capture specifically for motion-jpeg capturing. - -Please MAKE SURE to reserve enough heap size for UVC by raising configTOTAL_HEAP_SIZE in freeRTOSconfig.h & turning off some functions (e.g. WPS, JDSMART, ATcmd for internal and system) since image frame storing could consume quite large memory space. - -TO switch on UVC example, make sure CONFIG_USB_EN is enabled (in platform_autoconf.h) & set CONFIG_EXAMPLE_UVC to 1 (in platform_opts.h). - -TO combine uvc with rtsp server, make sure wlan module is enabled & set UVC_WLAN_TRANSFER to 1 (in example_uvc.h). \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/example/wlan_fast_connect/example_wlan_fast_connect.c b/Firmware/RTLGDB/USDK/component/common/example/wlan_fast_connect/example_wlan_fast_connect.c deleted file mode 100644 index 0db5390..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/wlan_fast_connect/example_wlan_fast_connect.c +++ /dev/null @@ -1,226 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2015 Realtek Corporation. All rights reserved. - * - * - ******************************************************************************/ - - /** @file - - This example demonstrate how to implement wifi fast reconnection -**/ -#include -#if defined(CONFIG_EXAMPLE_WLAN_FAST_CONNECT) && CONFIG_EXAMPLE_WLAN_FAST_CONNECT -#include - - -#include "task.h" -#include -#include -#include "flash_api.h" -#include -#ifdef USE_FLASH_EEP -#include "flash_eep.h" -#include "feep_config.h" -#endif - -write_reconnect_ptr p_write_reconnect_ptr; - -extern void fATW0(void *arg); -extern void fATW1(void *arg); -extern void fATW2(void *arg); -extern void fATWC(void *arg); - -/* -* Usage: -* wifi connection indication trigger this function to save current -* wifi profile in flash -* -* Condition: -* CONFIG_EXAMPLE_WLAN_FAST_CONNECT flag is set -*/ - -int wlan_write_reconnect_data_to_flash(u8 *data, uint32_t len) -{ - if(data == NULL || len < sizeof(struct wlan_fast_reconnect)) return -1; - DBG_8195A("WiFi connected at start %d ms\n", xTaskGetTickCount()); -#ifdef USE_FLASH_EEP - flash_write_cfg(data, FEEP_ID_WIFI_CFG, sizeof(struct wlan_fast_reconnect)); -#else - struct wlan_fast_reconnect read_data = {0}; - flash_t flash; - if(!data) return -1; - flash_stream_read(&flash, FAST_RECONNECT_DATA, sizeof(struct wlan_fast_reconnect), (u8 *) &read_data); - - //wirte it to flash if different content: SSID, Passphrase, Channel, Security type - if(memcmp(data, (u8 *) &read_data, sizeof(struct wlan_fast_reconnect)) != 0) { - DBG_8195A(" %s():not the same ssid/passphrase/channel, write new profile to flash\n", __func__); - flash_erase_sector(&flash, FAST_RECONNECT_DATA); - flash_stream_write(&flash, FAST_RECONNECT_DATA, len, (uint8_t *) data); - } -#endif - return 0; -} - -/* -* Usage: -* After wifi init done, waln driver call this function to check whether -* auto-connect is required. -* -* This function read previous saved wlan profile in flash and execute connection. -* -* Condition: -* CONFIG_EXAMPLE_WLAN_FAST_CONNECT flag is set -*/ -//scan_buf_arg scan_buf; - -int wlan_init_done_callback() -{ - flash_t flash; - struct wlan_fast_reconnect *data; - uint32_t channel; - uint8_t pscan_config; - char key_id[2] = {0}; -// wifi_disable_powersave(); -#if CONFIG_AUTO_RECONNECT - //setup reconnection flag -// u8 mode; -// if(wifi_get_autoreconnect(&mode) > 0 && mode != 1) - wifi_set_autoreconnect(1); // (not work if lib_wlan_mp.a ?) -#endif - DBG_8195A("WiFi Init after %d ms\n", xTaskGetTickCount()); - data = (struct wlan_fast_reconnect *)rtw_zmalloc(sizeof(struct wlan_fast_reconnect)); - if(data) { -#ifdef USE_FLASH_EEP - if (flash_read_cfg(data, FEEP_ID_WIFI_CFG, sizeof(struct wlan_fast_reconnect)) == sizeof(struct wlan_fast_reconnect)) { -#else - flash_stream_read(&flash, FAST_RECONNECT_DATA, sizeof(struct wlan_fast_reconnect), (uint8_t *)data); - if(*((uint32_t *) data) != ~0x0) { -#endif -#if 1 // not use AT -#if 0 - //set partial scan for entering to listen beacon quickly - channel = data->channel & 0xFF; - pscan_config = PSCAN_ENABLE |PSCAN_FAST_SURVEY; // PSCAN_SIMPLE_CONFIG | - if(wifi_set_pscan_chan((uint8_t *)&channel, &pscan_config, 1) < 0) - printf("Wifi set partial scan channel fail!\n"); -// rtw_network_info_t *wifi; -// SC_connect_to_candidate_AP -// SC_parse_scan_result_and_connect(); - if (wifi_connect( - NULL, - 0, - data->psk_essid, - data->security_type, - data->psk_passphrase, - RTW_SECURITY_OPEN, - NULL) == RTW_SUCCESS) { -#else - //set partial scan for entering to listen beacon quickly - channel = data->channel & 0xFF; - pscan_config = PSCAN_ENABLE |PSCAN_FAST_SURVEY; // PSCAN_SIMPLE_CONFIG | - if(wifi_set_pscan_chan((uint8_t *)&channel, &pscan_config, 1) < 0) - printf("Wifi set partial scan channel fail!\n"); -// channel = data->channel & 0xFF; - wifi_set_channel(1); //channel); -// wifi_set_channel_plan(channel); -// pscan_config = PSCAN_ENABLE | PSCAN_FAST_SURVEY; // PSCAN_SIMPLE_CONFIG | -// wifi_set_pscan_chan((uint8_t *)&channel, &pscan_config, 1); -// DiagPrintf("\nScan end at start %d ms.\n", xTaskGetTickCount()); -// u8 bssid[ETH_ALEN] = { 0x1a,0xfe,0x34,0x99,0xad,0x1d }; - u8 bssid[ETH_ALEN] = { 0xbc,0xae,0xc5,0xeb,0x09,0x90 }; - -// if (wifi_connect(data->psk_essid, data->security_type, data->psk_passphrase, strlen(data->psk_essid), strlen(data->psk_passphrase), RTW_SECURITY_OPEN, NULL) == RTW_SUCCESS) { - if (wifi_connect( - bssid, - 1, - data->psk_essid, - data->security_type, - data->psk_passphrase, - data->channel>>28, - NULL) == RTW_SUCCESS) { -#endif -// DBG_8195A("WiFi connected at start %dms\n", xTaskGetTickCount()); -#if CONFIG_LWIP_LAYER -#ifdef USE_FLASH_EEP - dhcp_cfg *p = (dhcp_cfg *)&data; - p->mode = 3; - extern struct netif xnetif[NET_IF_NUM]; - struct netif * pnetif = &xnetif[0]; - if(flash_read_cfg(p, FEEP_ID_DHCP_CFG, sizeof(dhcp_cfg)) > 1) { - rtl_printf("Read dhcp_config: mode = %d, ip:%p, msk:%p, gw:%p\n", p->mode, p->ip, p->mask, p->gw); - if(p->mode == 2) { - netif_set_addr(pnetif, (ip_addr_t *)&p->ip, (ip_addr_t *)&p->mask, (ip_addr_t *)&p->gw); - dhcps_init(pnetif); - } - else if(p->mode) LwIP_DHCP(0, DHCP_START); - } - else LwIP_DHCP(0, DHCP_START); - if(p->mode == 3 && pnetif->ip_addr.addr != 0) { - p->mode = 2; - p->ip = pnetif->ip_addr.addr; - p->gw = pnetif->gw.addr; - p->mask = pnetif->netmask.addr; - flash_write_cfg(p, FEEP_ID_DHCP_CFG, sizeof(dhcp_cfg)); - rtl_printf("Write dhcp_config: mode = %d, ip:%p, msk:%p, gw:%p\n", p->mode, p->ip, p->mask, p->gw); - } -#else - LwIP_DHCP(0, DHCP_START); -#endif //#if USE_FLASH_EEP -#endif //#if CONFIG_LWIP_LAYER -#if CONFIG_WLAN_CONNECT_CB - connect_start(); -#endif - } -#else -// flash_read_cfg(psk_essid, 0x5731, sizeof(psk_essid)); - memcpy(psk_essid, data->psk_essid, sizeof(data->psk_essid)); -// flash_read_cfg(psk_passphrase, 0x5732, sizeof(psk_passphrase)); - memcpy(psk_passphrase, data->psk_passphrase, sizeof(data->psk_passphrase)); -// flash_read_cfg(wpa_global_PSK, 0x5733, sizeof(wpa_global_PSK)); - memcpy(wpa_global_PSK, data->wpa_global_PSK, sizeof(data->wpa_global_PSK)); - //set partial scan for entering to listen beacon quickly - pscan_config = PSCAN_ENABLE | PSCAN_FAST_SURVEY; - channel = data->channel & 0xFF; - wifi_set_pscan_chan((uint8_t *)&channel, &pscan_config, 1); - //set wifi connect - switch(data->security_type){ - case RTW_SECURITY_OPEN: - fATW0((char*)psk_essid); - break; - case RTW_SECURITY_WEP_PSK: - fATW0((char*)psk_essid); - fATW1((char*)psk_passphrase); - sprintf(key_id,"%d",(char) (data->channel>>28)); - fATW2(key_id); - break; - case RTW_SECURITY_WPA_TKIP_PSK: - case RTW_SECURITY_WPA2_AES_PSK: - fATW0((char*)psk_essid); - fATW1((char*)psk_passphrase); - break; - default: - break; - } - fATWC(NULL); -#endif // use AT - } - rtw_mfree(data); - } - - return 0; -} - - -void example_wlan_fast_connect() -{ - // Call back from wlan driver after wlan init done - p_wlan_init_done_callback = wlan_init_done_callback; - - // Call back from application layer after wifi_connection success - p_write_reconnect_ptr = wlan_write_reconnect_data_to_flash; - -} - -#endif // defined(CONFIG_EXAMPLE_WLAN_FAST_CONNECT) && CONFIG_EXAMPLE_WLAN_FAST_CONNECT - diff --git a/Firmware/RTLGDB/USDK/component/common/example/wlan_fast_connect/example_wlan_fast_connect.h b/Firmware/RTLGDB/USDK/component/common/example/wlan_fast_connect/example_wlan_fast_connect.h deleted file mode 100644 index b7efbed..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/wlan_fast_connect/example_wlan_fast_connect.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef __EXAMPLE_FAST_RECONNECTION_H__ -#define __EXAMPLE_FAST_RECONNECTION_H__ - - -/****************************************************************************** - * - * Copyright(c) 2007 - 2015 Realtek Corporation. All rights reserved. - * - * - ******************************************************************************/ -#include "FreeRTOS.h" -#include -#include "main.h" - -#define IW_PASSPHRASE_MAX_SIZE 64 -//#define FAST_RECONNECT_DATA (0x80000 - 0x1000) -#define NDIS_802_11_LENGTH_SSID 32 -#define A_SHA_DIGEST_LEN 20 - - -struct wlan_fast_reconnect { - unsigned char psk_essid[NDIS_802_11_LENGTH_SSID + 4]; - unsigned char psk_passphrase[IW_PASSPHRASE_MAX_SIZE + 1]; - unsigned char wpa_global_PSK[A_SHA_DIGEST_LEN * 2]; - uint32_t channel; - uint32_t security_type; -#if ATCMD_VER == ATVER_2 - uint8_t enable; -#endif -}; - - - -typedef int (*wlan_init_done_ptr)(void); -typedef int (*write_reconnect_ptr)(uint8_t *data, uint32_t len); - - -//Variable -extern unsigned char psk_essid[NET_IF_NUM][NDIS_802_11_LENGTH_SSID+4]; -extern unsigned char psk_passphrase[NET_IF_NUM][IW_PASSPHRASE_MAX_SIZE + 1]; -extern unsigned char wpa_global_PSK[NET_IF_NUM][A_SHA_DIGEST_LEN * 2]; -extern unsigned char psk_passphrase64[IW_PASSPHRASE_MAX_SIZE + 1]; - -//Function -extern wlan_init_done_ptr p_wlan_init_done_callback; -extern write_reconnect_ptr p_write_reconnect_ptr; - -void example_wlan_fast_connect(void); - -#endif //#ifndef __EXAMPLE_FAST_RECONNECTION_H__ diff --git a/Firmware/RTLGDB/USDK/component/common/example/xml/example_xml.c b/Firmware/RTLGDB/USDK/component/common/example/xml/example_xml.c deleted file mode 100644 index cf4abe5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/xml/example_xml.c +++ /dev/null @@ -1,111 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include -#include "xml.h" - -static void example_xml_thread(void *param) -{ - /* Create XML document - * - * on - * - * 255 - * 255 - * 255 - * - * - */ - struct xml_node *light_node, *power_node, *color_node, *red_node, *green_node, *blue_node; - - // Creates element with (prefix, tag name, namespace uri), add element and text node as child - light_node = xml_new_element("Home", "Light", "http://www.home.com"); - power_node = xml_new_element(NULL, "Power", NULL); - xml_add_child(power_node, xml_new_text("on")); - color_node = xml_new_element(NULL, "Color", NULL); - red_node = xml_new_element(NULL, "Red", NULL); - xml_add_child(red_node, xml_new_text("255")); - green_node = xml_new_element(NULL, "Green", NULL); - xml_add_child(green_node, xml_new_text("255")); - blue_node = xml_new_element(NULL, "Blue", NULL); - xml_add_child(blue_node, xml_new_text("255")); - xml_add_child(light_node, power_node); - xml_add_child(light_node, color_node); - xml_add_child(color_node, red_node); - xml_add_child(color_node, green_node); - xml_add_child(color_node, blue_node); - - // Add or modify attributes - xml_set_attribute(light_node, "xmlns", "http://www.device.com"); - xml_set_attribute(light_node, "fw_ver", "1.0.0"); - - // Dump XML document to memory buffer, equal to xml_dump_tree_ex(node, NULL, 0, 0); - char *dump_buf = xml_dump_tree(light_node); - printf("\n%s\n", dump_buf); - // Free dump buffer - xml_free(dump_buf); - // Dump XML document to memory buffer with prolog, new line, aligment - dump_buf = xml_dump_tree_ex(light_node, "", 1, 4); - printf("\n%s\n", dump_buf); - xml_free(dump_buf); - - // Delete XML tree to free memory - xml_delete_tree(light_node); - - /* Parse XML document */ - char *doc = "\ - \ - \ - \ - \ - auto\ - 25.5\ - \ - "; - - // Parse document buffer to XML tree. Prolog will be dropped - struct xml_node *root = xml_parse(doc, strlen(doc)); - - if(root) { - dump_buf = xml_dump_tree_ex(root, NULL, 1, 4); - printf("\n%s\n", dump_buf); - xml_free(dump_buf); - - // Search by XPath, prefix and name in path should be matched - struct xml_node_set *set = xml_find_path(root, "/Home:Sensor/Thermostat/Temperature"); - - if(set->count) { - printf("\nFind %d element by %s\n", set->count, "/Home:Sensor/Thermostat/Temperature"); - - // Get XML tree search result 0 - struct xml_node *temperature_node = set->node[0]; - - if(xml_is_text(temperature_node->child)) { - // Get text - printf("Temperature[0] is %s\n", temperature_node->child->text); - } - - // Get attribute - char *unit = xml_get_attribute(temperature_node, "unit"); - printf("Unit is \"%s\"\n", unit); - // Free attribute search result - xml_free(unit); - } - - // Delete XML tree search result to free memory - xml_delete_set(set); - - xml_delete_tree(root); - } - else { - printf("Xml parse failed\n"); - } - - vTaskDelete(NULL); -} - -void example_xml(void) -{ - if(xTaskCreate(example_xml_thread, ((const char*)"example_xml_thread"), 1024, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) - printf("\n\r%s xTaskCreate(init_thread) failed", __FUNCTION__); -} - diff --git a/Firmware/RTLGDB/USDK/component/common/example/xml/example_xml.h b/Firmware/RTLGDB/USDK/component/common/example/xml/example_xml.h deleted file mode 100644 index 1dbcf5f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/xml/example_xml.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef EXAMPLE_XML_H -#define EXAMPLE_XML_H - -void example_xml(void); - -#endif /* EXAMPLE_XML_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/example/xml/readme.txt b/Firmware/RTLGDB/USDK/component/common/example/xml/readme.txt deleted file mode 100644 index 9fb461c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/example/xml/readme.txt +++ /dev/null @@ -1,13 +0,0 @@ -XML EXAMPLE - -Description: -The creation of a light XML document is used as the example of XML document generation. -The processing of a sensor XML document is used as the example of XML document parsing. - -Configuration: -[platform_opts.h] - #define CONFIG_EXAMPLE_XML 1 - -Execution: -An XML example thread will be started automatically when booting. - diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/inc/atadrive.h b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/inc/atadrive.h deleted file mode 100644 index 715ae8c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/inc/atadrive.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _ATADRIVE_H_ -#define _ATADRIVE_H_ - -#include "fatfs_ext/inc/ff_driver.h" - -extern ll_diskio_drv ATA_disk_Driver; -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/inc/sdcard.h b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/inc/sdcard.h deleted file mode 100644 index e4340f9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/inc/sdcard.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _SDCARD_H_ -#define _SDCARD_H_ -#include "ff_driver.h" - -extern ll_diskio_drv SD_disk_Driver; -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/inc/usbdisk.h b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/inc/usbdisk.h deleted file mode 100644 index 0bd79a6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/inc/usbdisk.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _USBDISK_H_ -#define _USBDISK_H_ - -#include "ff_driver.h" - -extern ll_diskio_drv USB_disk_Driver; -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/src/sdcard.c b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/src/sdcard.c deleted file mode 100644 index 2385832..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/src/sdcard.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Routines to associate SD card driver with FatFs - * - * Copyright (c) 2014 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ -//#if FATFS_DISK_SD - -#include "sd.h" // sd card driver with sdio interface -#include "integer.h" -#include - -#define SD_BLOCK_SIZE 512 - -static int interpret_sd_result(SD_RESULT result){ - int ret = 0; - if(result == SD_OK) - ret = 0; - else if(result == SD_NODISK) - ret = STA_NODISK; - else if(result == SD_INITERR) - ret = STA_NOINIT; - else if(result == SD_PROTECTED) - ret = STA_PROTECT; - return ret; -} - -DSTATUS SD_disk_status(void){ - SD_RESULT res; - res = SD_Status(); - return interpret_sd_result(res);; -} - -DSTATUS SD_disk_initialize(void){ - SD_RESULT res; - res = SD_Init(); - return interpret_sd_result(res); -} - -/* Read sector(s) --------------------------------------------*/ -DRESULT SD_disk_read(BYTE *buff, DWORD sector, UINT count){ - SD_RESULT res; - - res = SD_ReadBlocks(sector, buff, count); - - //__rtl_memDump_v1_00(buff, 512*count, "MMC_disk_read:"); - - return interpret_sd_result(res); -} - -/* Write sector(s) --------------------------------------------*/ -#if _USE_WRITE == 1 -DRESULT SD_disk_write(const BYTE * buff, DWORD sector, UINT count){ - SD_RESULT res; - res = SD_WriteBlocks(sector, buff, count); - - return interpret_sd_result(res); -} -#endif - -/* Write sector(s) --------------------------------------------*/ -#if _USE_IOCTL == 1 -DRESULT SD_disk_ioctl (BYTE cmd, void* buff){ - DRESULT res = RES_ERROR; - SD_RESULT result; - - switch(cmd){ - /* Generic command (used by FatFs) */ - - /* Make sure that no pending write process in the physical drive */ - case CTRL_SYNC: /* Flush disk cache (for write functions) */ - result = SD_WaitReady(); - res = interpret_sd_result(result); - break; - case GET_SECTOR_COUNT: /* Get media size (for only f_mkfs()) */ - result = SD_GetCapacity((unsigned long*) buff); - res = interpret_sd_result(result); - break; - /* for case _MAX_SS != _MIN_SS */ - case GET_SECTOR_SIZE: /* Get sector size (for multiple sector size (_MAX_SS >= 1024)) */ - //*(DWORD*)buff = 1024;//2048;//4096; - res = RES_OK; - break; - case GET_BLOCK_SIZE: /* Get erase block size (for only f_mkfs()) */ - *(DWORD*)buff = SD_BLOCK_SIZE; - res = RES_OK; - break; - case CTRL_ERASE_SECTOR:/* Force erased a block of sectors (for only _USE_ERASE) */ - res = RES_OK; - break; - - /* MMC/SDC specific ioctl command */ - - case MMC_GET_TYPE: /* Get card type */ - res = RES_OK; - break; - case MMC_GET_CSD: /* Get CSD */ - res = RES_OK; - break; - case MMC_GET_CID: /* Get CID */ - res = RES_OK; - break; - case MMC_GET_OCR: /* Get OCR */ - res = RES_OK; - break; - case MMC_GET_SDSTAT:/* Get SD status */ - res = RES_OK; - break; - default: - res = RES_PARERR; - break; - } - return res; -} -#endif - - -ll_diskio_drv SD_disk_Driver = { - .disk_initialize = SD_disk_initialize, - .disk_status = SD_disk_status, - .disk_read = SD_disk_read, -#if _USE_WRITE == 1 - .disk_write = SD_disk_write, -#endif -#if _USE_IOCTL == 1 - .disk_ioctl = SD_disk_ioctl, -#endif - .TAG = "SD" -}; - -//#endif // FATFS_DISK_SD diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/src/usbdisk.c b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/src/usbdisk.c deleted file mode 100644 index 016b32c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/disk_if/src/usbdisk.c +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Routines to associate usb mass storage driver with FatFs - * - * Copyright (c) 2014 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ -#include "integer.h" -#include - -#if FATFS_DISK_USB -#include "us_intf.h" - -DSTATUS USB_disk_status(void){ - MSC_RESULT res; - if(USB_STORAGE_READY){ - res = us_getStatus(); - if(res == MSC_W_PROTECT) - return STA_PROTECT; - else - return 0; // every thing is ok - } - return STA_NOINIT; -} - -DSTATUS USB_disk_initialize(void){ - MSC_RESULT res; - - if(USB_STORAGE_READY) - return 0; - - res = us_init(); - - if(res == MSC_OK) - return 0; - else - return STA_NOINIT; -} - -/* Read sector(s) --------------------------------------------*/ -DRESULT USB_disk_read(BYTE *buff, DWORD sector, UINT count){ - if(!USB_STORAGE_READY) - return RES_NOTRDY; - - if(us_read_blocks(buff, sector, count) == MSC_OK) - return RES_OK; - else - return RES_ERROR; -} - -/* Write sector(s) --------------------------------------------*/ -#if _USE_WRITE == 1 -DRESULT USB_disk_write(const BYTE *buff, DWORD sector, UINT count){ - if(!USB_STORAGE_READY) - return RES_NOTRDY; - - if(us_write_blocks(buff, sector, count) == MSC_OK) - return RES_OK; - else - return RES_ERROR; -} -#endif - -/* Write sector(s) --------------------------------------------*/ -#if _USE_IOCTL == 1 -DRESULT USB_disk_ioctl (BYTE cmd, void* buff){ - DRESULT res = RES_ERROR; - DWORD last_blk_addr, block_size; - - if(!USB_STORAGE_READY) - return RES_NOTRDY; - - switch(cmd){ - /* Generic command (used by FatFs) */ - - case CTRL_SYNC: /* Flush disk cache (for write functions) */ - res = RES_OK; - break; - case GET_SECTOR_COUNT: /* Get media size (for only f_mkfs()) */ - if(us_getcap(&last_blk_addr, &block_size) == MSC_OK){ - *(DWORD*)buff = last_blk_addr + 1; - res = RES_OK; - }else - res = RES_ERROR; - break; - case GET_SECTOR_SIZE: /* Get sector size (for multiple sector size (_MAX_SS >= 1024)) */ - if(us_getcap(&last_blk_addr, &block_size) == MSC_OK){ - *(DWORD*)buff = block_size; - res = RES_OK; - }else - res = RES_ERROR; - break; - case GET_BLOCK_SIZE: /* Get erase block size (for only f_mkfs()) */ - *(DWORD*)buff = 512; - res = RES_OK; - break; - case CTRL_ERASE_SECTOR:/* Force erased a block of sectors (for only _USE_ERASE) */ - res = RES_OK; - break; - default: - res = RES_PARERR; - break; - } - return res; -} -#endif - -ll_diskio_drv USB_disk_Driver ={ - .disk_initialize = USB_disk_initialize, - .disk_status = USB_disk_status, - .disk_read = USB_disk_read, -#if _USE_WRITE == 1 - .disk_write = USB_disk_write, -#endif -#if _USE_IOCTL == 1 - .disk_ioctl = USB_disk_ioctl, -#endif - .TAG = "USB" -}; - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/fatfs_ext/inc/ff_driver.h b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/fatfs_ext/inc/ff_driver.h deleted file mode 100644 index 066ee8b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/fatfs_ext/inc/ff_driver.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __FF_DRIVER_H -#define __FF_DRIVER_H - -/* Includes ------------------------------------------------------------------*/ -#include "diskio.h" -#include "ff.h" -#include "platform_opts.h" - -typedef struct{ - DSTATUS (*disk_initialize) (void); /*!< Initialize Disk Drive */ - DSTATUS (*disk_status) (void); /*!< Get Disk Status */ - DRESULT (*disk_read) (BYTE*, DWORD, UINT); /*!< Read Sector(s) */ -#if _USE_WRITE == 1 - DRESULT (*disk_write) (const BYTE*, DWORD, UINT); /*!< Write Sector(s) when _USE_WRITE = 0 */ -#endif /* _USE_WRITE == 1 */ -#if _USE_IOCTL == 1 - DRESULT (*disk_ioctl) (BYTE, void*); /*!< I/O control operation when _USE_IOCTL = 1 */ -#endif /* _USE_IOCTL == 1 */ - unsigned char* TAG; - unsigned char drv_num; -}ll_diskio_drv; - -typedef struct{ - ll_diskio_drv *drv[_VOLUMES]; - unsigned int nbr; -}ff_disk_drv; - -extern ff_disk_drv disk; - -int FATFS_RegisterDiskDriver(ll_diskio_drv *disk_drv); -int FATFS_UnRegisterDiskDriver(unsigned char drv_num); -int FATFS_getDrivernum(unsigned char* TAG); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/fatfs_ext/src/ff_driver.c b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/fatfs_ext/src/ff_driver.c deleted file mode 100644 index f18e832..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/fatfs_ext/src/ff_driver.c +++ /dev/null @@ -1,57 +0,0 @@ -#include - -#include "rtl_lib.h" -#define strcmp(s1, s2) rtl_strcmp((const char *)s1, (const char *)s2) - -ff_disk_drv disk = {0}; - -// return drv_num assigned -int FATFS_RegisterDiskDriver(ll_diskio_drv *drv){ - unsigned char drv_num = -1; - - if(disk.nbr < _VOLUMES) - { - drv->drv_num = disk.nbr; // record driver number for a specific disk - disk.drv[disk.nbr] = drv; - disk.nbr++; - drv_num = drv->drv_num; - } - return drv_num; -} - -int FATFS_UnRegisterDiskDriver(unsigned char drv_num){ - int index; - - if(disk.nbr >= 1) - { - for(index=0;indexdrv_num == drv_num){ - disk.drv[index] = 0; - disk.nbr--; - return 0; - } - } - return -1; // fail - } - return -1; // no disk driver registered -} - - -/** - * @brief Gets number of linked drivers to the FatFs module. - * @param None - * @retval Number of attached drivers. - */ -int FATFS_getDrivernum(unsigned char* TAG) -{ - ll_diskio_drv *drv; - int index; - - for(index=0;indexTAG, TAG)){ - return drv->drv_num; - } - } - return -1; -} diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/Makefile b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/Makefile deleted file mode 100644 index 31bd89d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/Makefile +++ /dev/null @@ -1,29 +0,0 @@ - -include $(MAKE_INCLUDE_GEN) - -.PHONY: all clean - -#*****************************************************************************# -# Object FILE LIST # -#*****************************************************************************# -OBJS = - - -#*****************************************************************************# -# Dependency # -#*****************************************************************************# --include $(OBJS:.o=.d) - -#*****************************************************************************# -# RULES TO GENERATE TARGETS # -#*****************************************************************************# - -# Define the Rules to build the core targets -all: CORE_TARGETS - make -C src all - -#*****************************************************************************# -# GENERATE OBJECT FILE -#*****************************************************************************# -CORE_TARGETS: $(OBJS) - diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/include/diskio.h b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/include/diskio.h deleted file mode 100644 index 4d72b91..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/include/diskio.h +++ /dev/null @@ -1,80 +0,0 @@ -/*-----------------------------------------------------------------------/ -/ Low level disk interface modlue include file (C)ChaN, 2013 / -/-----------------------------------------------------------------------*/ - -#ifndef _DISKIO_DEFINED -#define _DISKIO_DEFINED - -#ifdef __cplusplus -extern "C" { -#endif - -#define _USE_WRITE 1 /* 1: Enable disk_write function */ -#define _USE_IOCTL 1 /* 1: Enable disk_ioctl fucntion */ - -#include "integer.h" - - -/* Status of Disk Functions */ -typedef BYTE DSTATUS; - -/* Results of Disk Functions */ -typedef enum { - RES_OK = 0, /* 0: Successful */ - RES_ERROR, /* 1: R/W Error */ - RES_WRPRT, /* 2: Write Protected */ - RES_NOTRDY, /* 3: Not Ready */ - RES_PARERR /* 4: Invalid Parameter */ -} DRESULT; - - -/*---------------------------------------*/ -/* Prototypes for disk control functions */ - - -DSTATUS disk_initialize (BYTE pdrv); -DSTATUS disk_status (BYTE pdrv); -DRESULT disk_read (BYTE pdrv, BYTE* buff, DWORD sector, UINT count); -DRESULT disk_write (BYTE pdrv, const BYTE* buff, DWORD sector, UINT count); -DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff); - - -/* Disk Status Bits (DSTATUS) */ - -#define STA_NOINIT 0x01 /* Drive not initialized */ -#define STA_NODISK 0x02 /* No medium in the drive */ -#define STA_PROTECT 0x04 /* Write protected */ - - -/* Command code for disk_ioctrl fucntion */ - -/* Generic command (used by FatFs) */ -#define CTRL_SYNC 0 /* Flush disk cache (for write functions) */ -#define GET_SECTOR_COUNT 1 /* Get media size (for only f_mkfs()) */ -#define GET_SECTOR_SIZE 2 /* Get sector size (for multiple sector size (_MAX_SS >= 1024)) */ -#define GET_BLOCK_SIZE 3 /* Get erase block size (for only f_mkfs()) */ -#define CTRL_ERASE_SECTOR 4 /* Force erased a block of sectors (for only _USE_ERASE) */ - -/* Generic command (not used by FatFs) */ -#define CTRL_POWER 5 /* Get/Set power status */ -#define CTRL_LOCK 6 /* Lock/Unlock media removal */ -#define CTRL_EJECT 7 /* Eject media */ -#define CTRL_FORMAT 8 /* Create physical format on the media */ - -/* MMC/SDC specific ioctl command */ -#define MMC_GET_TYPE 10 /* Get card type */ -#define MMC_GET_CSD 11 /* Get CSD */ -#define MMC_GET_CID 12 /* Get CID */ -#define MMC_GET_OCR 13 /* Get OCR */ -#define MMC_GET_SDSTAT 14 /* Get SD status */ - -/* ATA/CF specific ioctl command */ -#define ATA_GET_REV 20 /* Get F/W revision */ -#define ATA_GET_MODEL 21 /* Get model name */ -#define ATA_GET_SN 22 /* Get serial number */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/include/ff.h b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/include/ff.h deleted file mode 100644 index 543588d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/include/ff.h +++ /dev/null @@ -1,343 +0,0 @@ -/*---------------------------------------------------------------------------/ -/ FatFs - FAT file system module include file R0.10b (C)ChaN, 2014 -/----------------------------------------------------------------------------/ -/ FatFs module is a generic FAT file system module for small embedded systems. -/ This is a free software that opened for education, research and commercial -/ developments under license policy of following terms. -/ -/ Copyright (C) 2014, ChaN, all right reserved. -/ -/ * The FatFs module is a free software and there is NO WARRANTY. -/ * No restriction on use. You can use, modify and redistribute it for -/ personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY. -/ * Redistributions of source code must retain the above copyright notice. -/ -/----------------------------------------------------------------------------*/ - -#ifndef _FATFS -#define _FATFS 8051 /* Revision ID */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "integer.h" /* Basic integer types */ -#include "ffconf.h" /* FatFs configuration options */ - -#if _FATFS != _FFCONF -#error Wrong configuration file (ffconf.h). -#endif - - - -/* Definitions of volume management */ - -#if _MULTI_PARTITION /* Multiple partition configuration */ -typedef struct { - BYTE pd; /* Physical drive number */ - BYTE pt; /* Partition: 0:Auto detect, 1-4:Forced partition) */ -} PARTITION; -extern PARTITION VolToPart[]; /* Volume - Partition resolution table */ -#define LD2PD(vol) (VolToPart[vol].pd) /* Get physical drive number */ -#define LD2PT(vol) (VolToPart[vol].pt) /* Get partition index */ - -#else /* Single partition configuration */ -#define LD2PD(vol) (BYTE)(vol) /* Each logical drive is bound to the same physical drive number */ -#define LD2PT(vol) 0 /* Find first valid partition or in SFD */ - -#endif - - - -/* Type of path name strings on FatFs API */ - -#if _LFN_UNICODE /* Unicode string */ -#if !_USE_LFN -#error _LFN_UNICODE must be 0 at non-LFN cfg. -#endif -#ifndef _INC_TCHAR -typedef WCHAR TCHAR; -#define _T(x) L ## x -#define _TEXT(x) L ## x -#endif - -#else /* ANSI/OEM string */ -#ifndef _INC_TCHAR -typedef char TCHAR; -#define _T(x) x -#define _TEXT(x) x -#endif - -#endif - - - -/* File system object structure (FATFS) */ - -typedef struct { - BYTE fs_type; /* FAT sub-type (0:Not mounted) */ - BYTE drv; /* Physical drive number */ - BYTE csize; /* Sectors per cluster (1,2,4...128) */ - BYTE n_fats; /* Number of FAT copies (1 or 2) */ - BYTE wflag; /* win[] flag (b0:dirty) */ - BYTE fsi_flag; /* FSINFO flags (b7:disabled, b0:dirty) */ - WORD id; /* File system mount ID */ - WORD n_rootdir; /* Number of root directory entries (FAT12/16) */ -#if _MAX_SS != _MIN_SS - WORD ssize; /* Bytes per sector (512, 1024, 2048 or 4096) */ -#endif -#if _FS_REENTRANT - _SYNC_t sobj; /* Identifier of sync object */ -#endif -#if !_FS_READONLY - DWORD last_clust; /* Last allocated cluster */ - DWORD free_clust; /* Number of free clusters */ -#endif -#if _FS_RPATH - DWORD cdir; /* Current directory start cluster (0:root) */ -#endif - DWORD n_fatent; /* Number of FAT entries, = number of clusters + 2 */ - DWORD fsize; /* Sectors per FAT */ - DWORD volbase; /* Volume start sector */ - DWORD fatbase; /* FAT start sector */ - DWORD dirbase; /* Root directory start sector (FAT32:Cluster#) */ - DWORD database; /* Data start sector */ - DWORD winsect; /* Current sector appearing in the win[] */ - BYTE win[_MAX_SS]; /* Disk access window for Directory, FAT (and file data at tiny cfg) */ -} FATFS; - - - -/* File object structure (FIL) */ - -typedef struct { - FATFS* fs; /* Pointer to the related file system object (**do not change order**) */ - WORD id; /* Owner file system mount ID (**do not change order**) */ - BYTE flag; /* Status flags */ - BYTE err; /* Abort flag (error code) */ - DWORD fptr; /* File read/write pointer (Zeroed on file open) */ - DWORD fsize; /* File size */ - DWORD sclust; /* File start cluster (0:no cluster chain, always 0 when fsize is 0) */ - DWORD clust; /* Current cluster of fpter (not valid when fprt is 0) */ - DWORD dsect; /* Sector number appearing in buf[] (0:invalid) */ -#if !_FS_READONLY - DWORD dir_sect; /* Sector number containing the directory entry */ - BYTE* dir_ptr; /* Pointer to the directory entry in the win[] */ -#endif -#if _USE_FASTSEEK - DWORD* cltbl; /* Pointer to the cluster link map table (Nulled on file open) */ -#endif -#if _FS_LOCK - UINT lockid; /* File lock ID origin from 1 (index of file semaphore table Files[]) */ -#endif -#if !_FS_TINY - BYTE buf[_MAX_SS]; /* File private data read/write window */ -#endif -} FIL; - - - -/* Directory object structure (DIR) */ - -typedef struct { - FATFS* fs; /* Pointer to the owner file system object (**do not change order**) */ - WORD id; /* Owner file system mount ID (**do not change order**) */ - WORD index; /* Current read/write index number */ - DWORD sclust; /* Table start cluster (0:Root dir) */ - DWORD clust; /* Current cluster */ - DWORD sect; /* Current sector */ - BYTE* dir; /* Pointer to the current SFN entry in the win[] */ - BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */ -#if _FS_LOCK - UINT lockid; /* File lock ID (index of file semaphore table Files[]) */ -#endif -#if _USE_LFN - WCHAR* lfn; /* Pointer to the LFN working buffer */ - WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */ -#endif -} DIR; - - - -/* File status structure (FILINFO) */ - -typedef struct { - DWORD fsize; /* File size */ - WORD fdate; /* Last modified date */ - WORD ftime; /* Last modified time */ - BYTE fattrib; /* Attribute */ - TCHAR fname[13]; /* Short file name (8.3 format) */ -#if _USE_LFN - TCHAR* lfname; /* Pointer to the LFN buffer */ - UINT lfsize; /* Size of LFN buffer in TCHAR */ -#endif -} FILINFO; - - - -/* File function return code (FRESULT) */ - -typedef enum { - FR_OK = 0, /* (0) Succeeded */ - FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */ - FR_INT_ERR, /* (2) Assertion failed */ - FR_NOT_READY, /* (3) The physical drive cannot work */ - FR_NO_FILE, /* (4) Could not find the file */ - FR_NO_PATH, /* (5) Could not find the path */ - FR_INVALID_NAME, /* (6) The path name format is invalid */ - FR_DENIED, /* (7) Access denied due to prohibited access or directory full */ - FR_EXIST, /* (8) Access denied due to prohibited access */ - FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */ - FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */ - FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */ - FR_NOT_ENABLED, /* (12) The volume has no work area */ - FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */ - FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */ - FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */ - FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */ - FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */ - FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_SHARE */ - FR_INVALID_PARAMETER /* (19) Given parameter is invalid */ -} FRESULT; - - - -/*--------------------------------------------------------------*/ -/* FatFs module application interface */ - -FRESULT f_open (FIL* fp, const TCHAR* path, BYTE mode); /* Open or create a file */ -FRESULT f_close (FIL* fp); /* Close an open file object */ -FRESULT f_read (FIL* fp, void* buff, UINT btr, UINT* br); /* Read data from a file */ -FRESULT f_write (FIL* fp, const void* buff, UINT btw, UINT* bw); /* Write data to a file */ -FRESULT f_forward (FIL* fp, UINT(*func)(const BYTE*,UINT), UINT btf, UINT* bf); /* Forward data to the stream */ -FRESULT f_lseek (FIL* fp, DWORD ofs); /* Move file pointer of a file object */ -FRESULT f_truncate (FIL* fp); /* Truncate file */ -FRESULT f_sync (FIL* fp); /* Flush cached data of a writing file */ -FRESULT f_opendir (DIR* dp, const TCHAR* path); /* Open a directory */ -FRESULT f_closedir (DIR* dp); /* Close an open directory */ -FRESULT f_readdir (DIR* dp, FILINFO* fno); /* Read a directory item */ -FRESULT f_mkdir (const TCHAR* path); /* Create a sub directory */ -FRESULT f_unlink (const TCHAR* path); /* Delete an existing file or directory */ -FRESULT f_rename (const TCHAR* path_old, const TCHAR* path_new); /* Rename/Move a file or directory */ -FRESULT f_stat (const TCHAR* path, FILINFO* fno); /* Get file status */ -FRESULT f_chmod (const TCHAR* path, BYTE value, BYTE mask); /* Change attribute of the file/dir */ -FRESULT f_utime (const TCHAR* path, const FILINFO* fno); /* Change times-tamp of the file/dir */ -FRESULT f_chdir (const TCHAR* path); /* Change current directory */ -FRESULT f_chdrive (const TCHAR* path); /* Change current drive */ -FRESULT f_getcwd (TCHAR* buff, UINT len); /* Get current directory */ -FRESULT f_getfree (const TCHAR* path, DWORD* nclst, FATFS** fatfs); /* Get number of free clusters on the drive */ -FRESULT f_getlabel (const TCHAR* path, TCHAR* label, DWORD* vsn); /* Get volume label */ -FRESULT f_setlabel (const TCHAR* label); /* Set volume label */ -FRESULT f_mount (FATFS* fs, const TCHAR* path, BYTE opt); /* Mount/Unmount a logical drive */ -FRESULT f_mkfs (const TCHAR* path, BYTE sfd, UINT au); /* Create a file system on the volume */ -FRESULT f_fdisk (BYTE pdrv, const DWORD szt[], void* work); /* Divide a physical drive into some partitions */ -int f_putc (TCHAR c, FIL* fp); /* Put a character to the file */ -int f_puts (const TCHAR* str, FIL* cp); /* Put a string to the file */ -int f_printf (FIL* fp, const TCHAR* str, ...); /* Put a formatted string to the file */ -TCHAR* f_gets (TCHAR* buff, int len, FIL* fp); /* Get a string from the file */ - -#define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0) -#define f_error(fp) ((fp)->err) -#define f_tell(fp) ((fp)->fptr) -#define f_size(fp) ((fp)->fsize) - -#ifndef EOF -#define EOF (-1) -#endif - - - - -/*--------------------------------------------------------------*/ -/* Additional user defined functions */ - -/* RTC function */ -#if !_FS_READONLY -DWORD get_fattime (void); -#endif - -/* Unicode support functions */ -#if _USE_LFN /* Unicode - OEM code conversion */ -WCHAR ff_convert (WCHAR chr, UINT dir); /* OEM-Unicode bidirectional conversion */ -WCHAR ff_wtoupper (WCHAR chr); /* Unicode upper-case conversion */ -#if _USE_LFN == 3 /* Memory functions */ -void* ff_memalloc (UINT msize); /* Allocate memory block */ -void ff_memfree (void* mblock); /* Free memory block */ -#endif -#endif - -/* Sync functions */ -#if _FS_REENTRANT -int ff_cre_syncobj (BYTE vol, _SYNC_t* sobj); /* Create a sync object */ -int ff_req_grant (_SYNC_t sobj); /* Lock sync object */ -void ff_rel_grant (_SYNC_t sobj); /* Unlock sync object */ -int ff_del_syncobj (_SYNC_t sobj); /* Delete a sync object */ -#endif - - - - -/*--------------------------------------------------------------*/ -/* Flags and offset address */ - - -/* File access control and file status flags (FIL.flag) */ - -#define FA_READ 0x01 -#define FA_OPEN_EXISTING 0x00 - -#if !_FS_READONLY -#define FA_WRITE 0x02 -#define FA_CREATE_NEW 0x04 -#define FA_CREATE_ALWAYS 0x08 -#define FA_OPEN_ALWAYS 0x10 -#define FA__WRITTEN 0x20 -#define FA__DIRTY 0x40 -#endif - - -/* FAT sub type (FATFS.fs_type) */ - -#define FS_FAT12 1 -#define FS_FAT16 2 -#define FS_FAT32 3 - - -/* File attribute bits for directory entry */ - -#define AM_RDO 0x01 /* Read only */ -#define AM_HID 0x02 /* Hidden */ -#define AM_SYS 0x04 /* System */ -#define AM_VOL 0x08 /* Volume label */ -#define AM_LFN 0x0F /* LFN entry */ -#define AM_DIR 0x10 /* Directory */ -#define AM_ARC 0x20 /* Archive */ -#define AM_MASK 0x3F /* Mask of defined bits */ - - -/* Fast seek feature */ -#define CREATE_LINKMAP 0xFFFFFFFF - - - -/*--------------------------------*/ -/* Multi-byte word access macros */ - -#if _WORD_ACCESS == 1 /* Enable word access to the FAT structure */ -#define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr)) -#define LD_DWORD(ptr) (DWORD)(*(DWORD*)(BYTE*)(ptr)) -#define ST_WORD(ptr,val) *(WORD*)(BYTE*)(ptr)=(WORD)(val) -#define ST_DWORD(ptr,val) *(DWORD*)(BYTE*)(ptr)=(DWORD)(val) -#else /* Use byte-by-byte access to the FAT structure */ -#define LD_WORD(ptr) (WORD)(((WORD)*((BYTE*)(ptr)+1)<<8)|(WORD)*(BYTE*)(ptr)) -#define LD_DWORD(ptr) (DWORD)(((DWORD)*((BYTE*)(ptr)+3)<<24)|((DWORD)*((BYTE*)(ptr)+2)<<16)|((WORD)*((BYTE*)(ptr)+1)<<8)|*(BYTE*)(ptr)) -#define ST_WORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *((BYTE*)(ptr)+1)=(BYTE)((WORD)(val)>>8) -#define ST_DWORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *((BYTE*)(ptr)+1)=(BYTE)((WORD)(val)>>8); *((BYTE*)(ptr)+2)=(BYTE)((DWORD)(val)>>16); *((BYTE*)(ptr)+3)=(BYTE)((DWORD)(val)>>24) -#endif - - -#ifdef __cplusplus -} -#endif - -#endif /* _FATFS */ diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/include/ffconf.h b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/include/ffconf.h deleted file mode 100644 index 9018593..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/include/ffconf.h +++ /dev/null @@ -1,228 +0,0 @@ -/*---------------------------------------------------------------------------/ -/ FatFs - FAT file system module configuration file R0.10b (C)ChaN, 2014 -/---------------------------------------------------------------------------*/ - -#ifndef _FFCONF -#define _FFCONF 8051 /* Revision ID */ - - -/*---------------------------------------------------------------------------/ -/ Functions and Buffer Configurations -/---------------------------------------------------------------------------*/ - -#define _FS_TINY 0 /* 0:Normal or 1:Tiny */ -/* When _FS_TINY is set to 1, it reduces memory consumption _MAX_SS bytes each -/ file object. For file data transfer, FatFs uses the common sector buffer in -/ the file system object (FATFS) instead of private sector buffer eliminated -/ from the file object (FIL). */ - - -#define _FS_READONLY 0 /* 0:Read/Write or 1:Read only */ -/* Setting _FS_READONLY to 1 defines read only configuration. This removes -/ writing functions, f_write(), f_sync(), f_unlink(), f_mkdir(), f_chmod(), -/ f_rename(), f_truncate() and useless f_getfree(). */ - - -#define _FS_MINIMIZE 0 /* 0 to 3 */ -/* The _FS_MINIMIZE option defines minimization level to remove API functions. -/ -/ 0: All basic functions are enabled. -/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_chmod(), f_utime(), -/ f_truncate() and f_rename() function are removed. -/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1. -/ 3: f_lseek() function is removed in addition to 2. */ - - -#define _USE_STRFUNC 0 /* 0:Disable or 1-2:Enable */ -/* To enable string functions, set _USE_STRFUNC to 1 or 2. */ - - -#define _USE_MKFS 0 /* 0:Disable or 1:Enable */ -/* To enable f_mkfs() function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */ - - -#define _USE_FASTSEEK 0 /* 0:Disable or 1:Enable */ -/* To enable fast seek feature, set _USE_FASTSEEK to 1. */ - - -#define _USE_LABEL 1 /* 0:Disable or 1:Enable */ -/* To enable volume label functions, set _USE_LAVEL to 1 */ - - -#define _USE_FORWARD 0 /* 0:Disable or 1:Enable */ -/* To enable f_forward() function, set _USE_FORWARD to 1 and set _FS_TINY to 1. */ - - -/*---------------------------------------------------------------------------/ -/ Locale and Namespace Configurations -/---------------------------------------------------------------------------*/ - -#define _CODE_PAGE 866 // 437 -/* The _CODE_PAGE specifies the OEM code page to be used on the target system. -/ Incorrect setting of the code page can cause a file open failure. -/ -/ 932 - Japanese Shift_JIS (DBCS, OEM, Windows) -/ 936 - Simplified Chinese GBK (DBCS, OEM, Windows) -/ 949 - Korean (DBCS, OEM, Windows) -/ 950 - Traditional Chinese Big5 (DBCS, OEM, Windows) -/ 1250 - Central Europe (Windows) -/ 1251 - Cyrillic (Windows) -/ 1252 - Latin 1 (Windows) -/ 1253 - Greek (Windows) -/ 1254 - Turkish (Windows) -/ 1255 - Hebrew (Windows) -/ 1256 - Arabic (Windows) -/ 1257 - Baltic (Windows) -/ 1258 - Vietnam (OEM, Windows) -/ 437 - U.S. (OEM) -/ 720 - Arabic (OEM) -/ 737 - Greek (OEM) -/ 775 - Baltic (OEM) -/ 850 - Multilingual Latin 1 (OEM) -/ 858 - Multilingual Latin 1 + Euro (OEM) -/ 852 - Latin 2 (OEM) -/ 855 - Cyrillic (OEM) -/ 866 - Russian (OEM) -/ 857 - Turkish (OEM) -/ 862 - Hebrew (OEM) -/ 874 - Thai (OEM, Windows) -/ 1 - ASCII (Valid for only non-LFN configuration) */ - - -#define _USE_LFN 1 /* 0 to 3 */ -#define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */ -/* The _USE_LFN option switches the LFN feature. -/ -/ 0: Disable LFN feature. _MAX_LFN has no effect. -/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe. -/ 2: Enable LFN with dynamic working buffer on the STACK. -/ 3: Enable LFN with dynamic working buffer on the HEAP. -/ -/ When enable LFN feature, Unicode handling functions ff_convert() and ff_wtoupper() -/ function must be added to the project. -/ The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. When use stack for the -/ working buffer, take care on stack overflow. When use heap memory for the working -/ buffer, memory management functions, ff_memalloc() and ff_memfree(), must be added -/ to the project. */ - - -#define _LFN_UNICODE 0 /* 0:ANSI/OEM or 1:Unicode */ -/* To switch the character encoding on the FatFs API (TCHAR) to Unicode, enable LFN -/ feature and set _LFN_UNICODE to 1. This option affects behavior of string I/O -/ functions. This option must be 0 when LFN feature is not enabled. */ - - -#define _STRF_ENCODE 3 /* 0:ANSI/OEM, 1:UTF-16LE, 2:UTF-16BE, 3:UTF-8 */ -/* When Unicode API is enabled by _LFN_UNICODE option, this option selects the character -/ encoding on the file to be read/written via string I/O functions, f_gets(), f_putc(), -/ f_puts and f_printf(). This option has no effect when _LFN_UNICODE == 0. Note that -/ FatFs supports only BMP. */ - - -#define _FS_RPATH 2 /* 0 to 2 */ -/* The _FS_RPATH option configures relative path feature. -/ -/ 0: Disable relative path feature and remove related functions. -/ 1: Enable relative path. f_chdrive() and f_chdir() function are available. -/ 2: f_getcwd() function is available in addition to 1. -/ -/ Note that output of the f_readdir() fnction is affected by this option. */ - - -/*---------------------------------------------------------------------------/ -/ Drive/Volume Configurations -/---------------------------------------------------------------------------*/ - -#define _VOLUMES 1 -/* Number of volumes (logical drives) to be used. */ - - -#define _STR_VOLUME_ID 0 /* 0:Use only 0-9 for drive ID, 1:Use strings for drive ID */ -#define _VOLUME_STRS "RAM","NAND","CF","SD1","SD2","USB1","USB2","USB3" -/* When _STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive -/ number in the path name. _VOLUME_STRS defines the drive ID strings for each logical -/ drives. Number of items must be equal to _VOLUMES. Valid characters for the drive ID -/ strings are: 0-9 and A-Z. */ - - -#define _MULTI_PARTITION 0 /* 0:Single partition, 1:Enable multiple partition */ -/* By default(0), each logical drive number is bound to the same physical drive number -/ and only a FAT volume found on the physical drive is mounted. When it is set to 1, -/ each logical drive number is bound to arbitrary drive/partition listed in VolToPart[]. -*/ - - -#define _MIN_SS 512 -#define _MAX_SS 512 -/* These options configure the range of sector size to be supported. (512, 1024, 2048 or -/ 4096) Always set both 512 for most systems, all memory card and harddisk. But a larger -/ value may be required for on-board flash memory and some type of optical media. -/ When _MAX_SS is larger than _MIN_SS, FatFs is configured to variable sector size and -/ GET_SECTOR_SIZE command must be implemented to the disk_ioctl() function. */ - - -#define _USE_ERASE 0 /* 0:Disable or 1:Enable */ -/* To enable sector erase feature, set _USE_ERASE to 1. Also CTRL_ERASE_SECTOR command -/ should be added to the disk_ioctl() function. */ - - -#define _FS_NOFSINFO 0 /* 0 to 3 */ -/* If you need to know correct free space on the FAT32 volume, set bit 0 of this option -/ and f_getfree() function at first time after volume mount will force a full FAT scan. -/ Bit 1 controls the last allocated cluster number as bit 0. -/ -/ bit0=0: Use free cluster count in the FSINFO if available. -/ bit0=1: Do not trust free cluster count in the FSINFO. -/ bit1=0: Use last allocated cluster number in the FSINFO if available. -/ bit1=1: Do not trust last allocated cluster number in the FSINFO. -*/ - - - -/*---------------------------------------------------------------------------/ -/ System Configurations -/---------------------------------------------------------------------------*/ - -#define _FS_LOCK 0 /* 0:Disable or >=1:Enable */ -/* To enable file lock control feature, set _FS_LOCK to non-zero value. -/ The value defines how many files/sub-directories can be opened simultaneously -/ with file lock control. This feature uses bss _FS_LOCK * 12 bytes. */ - - -#define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */ -#define _FS_TIMEOUT 1000 /* Timeout period in unit of time tick */ -#define _SYNC_t HANDLE /* O/S dependent sync object type. e.g. HANDLE, OS_EVENT*, ID, SemaphoreHandle_t and etc.. */ -/* The _FS_REENTRANT option switches the re-entrancy (thread safe) of the FatFs module. -/ -/ 0: Disable re-entrancy. _FS_TIMEOUT and _SYNC_t have no effect. -/ 1: Enable re-entrancy. Also user provided synchronization handlers, -/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj() -/ function must be added to the project. -*/ - - -#define _WORD_ACCESS 0 /* 0 or 1 */ -/* The _WORD_ACCESS option is an only platform dependent option. It defines -/ which access method is used to the word data on the FAT volume. -/ -/ 0: Byte-by-byte access. Always compatible with all platforms. -/ 1: Word access. Do not choose this unless under both the following conditions. -/ -/ * Address misaligned memory access is always allowed for ALL instructions. -/ * Byte order on the memory is little-endian. -/ -/ If it is the case, _WORD_ACCESS can also be set to 1 to improve performance and -/ reduce code size. Following table shows an example of some processor types. -/ -/ ARM7TDMI 0 ColdFire 0 V850E 0 -/ Cortex-M3 0 Z80 0/1 V850ES 0/1 -/ Cortex-M0 0 RX600(LE) 0/1 TLCS-870 0/1 -/ AVR 0/1 RX600(BE) 0 TLCS-900 0/1 -/ AVR32 0 RL78 0 R32C 0 -/ PIC18 0/1 SH-2 0 M16C 0/1 -/ PIC24 0 H8S 0 MSP430 0 -/ PIC32 0 H8/300H 0 x86 0/1 -*/ - - -#endif /* _FFCONF */ diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/include/integer.h b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/include/integer.h deleted file mode 100644 index 048da92..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/include/integer.h +++ /dev/null @@ -1,34 +0,0 @@ -/*-------------------------------------------*/ -/* Integer type definitions for FatFs module */ -/*-------------------------------------------*/ - -#ifndef _FF_INTEGER -#define _FF_INTEGER - -#ifdef _WIN32 /* FatFs development platform */ - -#include -#include - -#else /* Embedded platform */ - -/* This type MUST be 8 bit */ -typedef unsigned char BYTE; - -/* These types MUST be 16 bit */ -typedef short SHORT; -typedef unsigned short WORD; -typedef unsigned short WCHAR; - -/* These types MUST be 16 bit or 32 bit */ -typedef int INT; -#undef UINT -typedef unsigned int UINT; - -/* These types MUST be 32 bit */ -typedef long LONG; -typedef unsigned long DWORD; - -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/Makefile b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/Makefile deleted file mode 100644 index cce4b19..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/Makefile +++ /dev/null @@ -1,32 +0,0 @@ - -include $(MAKE_INCLUDE_GEN) - -.PHONY: all clean - -RT_USB_OTG_DIR = $(HWLIBDIR)/usb_otg/realtek/v3_0 - -MODULE_IFLAGS = -I$(RT_USB_OTG_DIR)/include/umsc -MODULE_IFLAGS += -I../include - -#*****************************************************************************# -# Object FILE LIST # -#*****************************************************************************# -OBJS = ff.o diskio.o ff_driver.o - - -#*****************************************************************************# -# Dependency # -#*****************************************************************************# --include $(OBJS:.o=.d) - -#*****************************************************************************# -# RULES TO GENERATE TARGETS # -#*****************************************************************************# - -# Define the Rules to build the core targets -all: CORE_TARGETS COPY_RAM_OBJS - -#*****************************************************************************# -# GENERATE OBJECT FILE -#*****************************************************************************# -CORE_TARGETS: $(OBJS) diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/diskio.c b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/diskio.c deleted file mode 100644 index 7626e11..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/diskio.c +++ /dev/null @@ -1,142 +0,0 @@ -/*-----------------------------------------------------------------------*/ -/* Low level disk I/O module skeleton for FatFs (C)ChaN, 2014 */ -/*-----------------------------------------------------------------------*/ -/* If a working storage control module is available, it should be */ -/* attached to the FatFs via a glue function rather than modifying it. */ -/* This is an example of glue functions to attach various exsisting */ -/* storage control modules to the FatFs module with a defined API. */ -/*-----------------------------------------------------------------------*/ - -#include "diskio.h" /* FatFs lower layer API */ -#include "fatfs_ext/inc/ff_driver.h" -/*-----------------------------------------------------------------------*/ -/* Get Drive Status */ -/*-----------------------------------------------------------------------*/ - -DSTATUS disk_status ( - BYTE pdrv /* Physical drive nmuber to identify the drive */ -) -{ - DSTATUS stat = STA_NODISK; - - if (disk.nbr <= 0 || pdrv < 0 || pdrv >= disk.nbr) - return stat; - - stat = disk.drv[pdrv]->disk_status(); - - return stat; -} - - - -/*-----------------------------------------------------------------------*/ -/* Inidialize a Drive */ -/*-----------------------------------------------------------------------*/ - -DSTATUS disk_initialize ( - BYTE pdrv /* Physical drive nmuber to identify the drive */ -) -{ - DSTATUS stat = STA_NOINIT; - - if (disk.nbr <= 0 || pdrv < 0 || pdrv >= disk.nbr) - return stat; - - stat = disk.drv[pdrv]->disk_initialize(); - - return stat; -} - - - -/*-----------------------------------------------------------------------*/ -/* Read Sector(s) */ -/*-----------------------------------------------------------------------*/ - -DRESULT disk_read ( - BYTE pdrv, /* Physical drive nmuber to identify the drive */ - BYTE *buff, /* Data buffer to store read data */ - DWORD sector, /* Sector address in LBA */ - UINT count /* Number of sectors to read */ -) -{ - DRESULT res = RES_PARERR; - - if (pdrv < 0 || pdrv >= disk.nbr || buff == (void*)0 || count <= 0) - return RES_PARERR; // Return if the parameter is invalid - - if(disk.nbr <= 0) - return RES_NOTRDY; - - res = disk.drv[pdrv]->disk_read(buff, sector, count); - - return res; -} - - - -/*-----------------------------------------------------------------------*/ -/* Write Sector(s) */ -/*-----------------------------------------------------------------------*/ -#if _USE_WRITE -DRESULT disk_write ( - BYTE pdrv, /* Physical drive nmuber to identify the drive */ - const BYTE *buff, /* Data to be written */ - DWORD sector, /* Sector address in LBA */ - UINT count /* Number of sectors to write */ -) -{ - DRESULT res = RES_PARERR; -// int index = 0; - - if (pdrv < 0 || pdrv >= disk.nbr || buff == (void*)0 || count <= 0) - return RES_PARERR; // Return if the parameter is invalid - - if(disk.nbr <= 0) - return RES_NOTRDY; - - res = disk.drv[pdrv]->disk_write(buff, sector, count); - - return res; -} -#endif - - -/*-----------------------------------------------------------------------*/ -/* Miscellaneous Functions */ -/*-----------------------------------------------------------------------*/ - -#if _USE_IOCTL -DRESULT disk_ioctl ( - BYTE pdrv, /* Physical drive nmuber (0..) */ - BYTE cmd, /* Control code */ - void *buff /* Buffer to send/receive control data */ -) -{ - DRESULT res = RES_PARERR; - - if (pdrv < 0 || pdrv >= disk.nbr) - return RES_PARERR; // Return if the parameter is invalid - - if(disk.nbr <= 0) - return RES_NOTRDY; - - res = disk.drv[pdrv]->disk_ioctl(cmd, buff); - - return res; -} -#endif - -DWORD get_fattime (void) -{ - DWORD time_abs; - - time_abs = ((DWORD)(2016 - 1980) << 25) /* Fixed to Feb. 2, 2016 */ - | ((DWORD)2 << 21) - | ((DWORD)2 << 16) - | ((DWORD)0 << 11) - | ((DWORD)0 << 5) - | ((DWORD)0 >> 1); - - return time_abs; -} diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/ff.c b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/ff.c deleted file mode 100644 index aa13c7c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/ff.c +++ /dev/null @@ -1,4598 +0,0 @@ -/*----------------------------------------------------------------------------/ -/ FatFs - FAT file system module R0.10b (C)ChaN, 2014 -/-----------------------------------------------------------------------------/ -/ FatFs module is a generic FAT file system module for small embedded systems. -/ This is a free software that opened for education, research and commercial -/ developments under license policy of following terms. -/ -/ Copyright (C) 2014, ChaN, all right reserved. -/ -/ * The FatFs module is a free software and there is NO WARRANTY. -/ * No restriction on use. You can use, modify and redistribute it for -/ personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY. -/ * Redistributions of source code must retain the above copyright notice. -/ -/-----------------------------------------------------------------------------/ -/ Feb 26,'06 R0.00 Prototype. -/ -/ Apr 29,'06 R0.01 First stable version. -/ -/ Jun 01,'06 R0.02 Added FAT12 support. -/ Removed unbuffered mode. -/ Fixed a problem on small (<32M) partition. -/ Jun 10,'06 R0.02a Added a configuration option (_FS_MINIMUM). -/ -/ Sep 22,'06 R0.03 Added f_rename(). -/ Changed option _FS_MINIMUM to _FS_MINIMIZE. -/ Dec 11,'06 R0.03a Improved cluster scan algorithm to write files fast. -/ Fixed f_mkdir() creates incorrect directory on FAT32. -/ -/ Feb 04,'07 R0.04 Supported multiple drive system. -/ Changed some interfaces for multiple drive system. -/ Changed f_mountdrv() to f_mount(). -/ Added f_mkfs(). -/ Apr 01,'07 R0.04a Supported multiple partitions on a physical drive. -/ Added a capability of extending file size to f_lseek(). -/ Added minimization level 3. -/ Fixed an endian sensitive code in f_mkfs(). -/ May 05,'07 R0.04b Added a configuration option _USE_NTFLAG. -/ Added FSINFO support. -/ Fixed DBCS name can result FR_INVALID_NAME. -/ Fixed short seek (<= csize) collapses the file object. -/ -/ Aug 25,'07 R0.05 Changed arguments of f_read(), f_write() and f_mkfs(). -/ Fixed f_mkfs() on FAT32 creates incorrect FSINFO. -/ Fixed f_mkdir() on FAT32 creates incorrect directory. -/ Feb 03,'08 R0.05a Added f_truncate() and f_utime(). -/ Fixed off by one error at FAT sub-type determination. -/ Fixed btr in f_read() can be mistruncated. -/ Fixed cached sector is not flushed when create and close without write. -/ -/ Apr 01,'08 R0.06 Added fputc(), fputs(), fprintf() and fgets(). -/ Improved performance of f_lseek() on moving to the same or following cluster. -/ -/ Apr 01,'09 R0.07 Merged Tiny-FatFs as a configuration option. (_FS_TINY) -/ Added long file name feature. -/ Added multiple code page feature. -/ Added re-entrancy for multitask operation. -/ Added auto cluster size selection to f_mkfs(). -/ Added rewind option to f_readdir(). -/ Changed result code of critical errors. -/ Renamed string functions to avoid name collision. -/ Apr 14,'09 R0.07a Separated out OS dependent code on reentrant cfg. -/ Added multiple sector size feature. -/ Jun 21,'09 R0.07c Fixed f_unlink() can return FR_OK on error. -/ Fixed wrong cache control in f_lseek(). -/ Added relative path feature. -/ Added f_chdir() and f_chdrive(). -/ Added proper case conversion to extended character. -/ Nov 03,'09 R0.07e Separated out configuration options from ff.h to ffconf.h. -/ Fixed f_unlink() fails to remove a sub-directory on _FS_RPATH. -/ Fixed name matching error on the 13 character boundary. -/ Added a configuration option, _LFN_UNICODE. -/ Changed f_readdir() to return the SFN with always upper case on non-LFN cfg. -/ -/ May 15,'10 R0.08 Added a memory configuration option. (_USE_LFN = 3) -/ Added file lock feature. (_FS_SHARE) -/ Added fast seek feature. (_USE_FASTSEEK) -/ Changed some types on the API, XCHAR->TCHAR. -/ Changed .fname in the FILINFO structure on Unicode cfg. -/ String functions support UTF-8 encoding files on Unicode cfg. -/ Aug 16,'10 R0.08a Added f_getcwd(). -/ Added sector erase feature. (_USE_ERASE) -/ Moved file lock semaphore table from fs object to the bss. -/ Fixed a wrong directory entry is created on non-LFN cfg when the given name contains ';'. -/ Fixed f_mkfs() creates wrong FAT32 volume. -/ Jan 15,'11 R0.08b Fast seek feature is also applied to f_read() and f_write(). -/ f_lseek() reports required table size on creating CLMP. -/ Extended format syntax of f_printf(). -/ Ignores duplicated directory separators in given path name. -/ -/ Sep 06,'11 R0.09 f_mkfs() supports multiple partition to complete the multiple partition feature. -/ Added f_fdisk(). -/ Aug 27,'12 R0.09a Changed f_open() and f_opendir() reject null object pointer to avoid crash. -/ Changed option name _FS_SHARE to _FS_LOCK. -/ Fixed assertion failure due to OS/2 EA on FAT12/16 volume. -/ Jan 24,'13 R0.09b Added f_setlabel() and f_getlabel(). -/ -/ Oct 02,'13 R0.10 Added selection of character encoding on the file. (_STRF_ENCODE) -/ Added f_closedir(). -/ Added forced full FAT scan for f_getfree(). (_FS_NOFSINFO) -/ Added forced mount feature with changes of f_mount(). -/ Improved behavior of volume auto detection. -/ Improved write throughput of f_puts() and f_printf(). -/ Changed argument of f_chdrive(), f_mkfs(), disk_read() and disk_write(). -/ Fixed f_write() can be truncated when the file size is close to 4GB. -/ Fixed f_open(), f_mkdir() and f_setlabel() can return incorrect error code. -/ Jan 15,'14 R0.10a Added arbitrary strings as drive number in the path name. (_STR_VOLUME_ID) -/ Added a configuration option of minimum sector size. (_MIN_SS) -/ 2nd argument of f_rename() can have a drive number and it will be ignored. -/ Fixed f_mount() with forced mount fails when drive number is >= 1. -/ Fixed f_close() invalidates the file object without volume lock. -/ Fixed f_closedir() returns but the volume lock is left acquired. -/ Fixed creation of an entry with LFN fails on too many SFN collisions. -/ May 19,'14 R0.10b Fixed a hard error in the disk I/O layer can collapse the directory entry. -/ Fixed LFN entry is not deleted on delete/rename an object with lossy converted SFN. -/---------------------------------------------------------------------------*/ - -#include "ff.h" /* Declarations of FatFs API */ -#include "diskio.h" /* Declarations of disk I/O functions */ - - -/*-------------------------------------------------------------------------- - - Module Private Definitions - ----------------------------------------------------------------------------*/ - -#if _FATFS != 8051 /* Revision ID */ -#error Wrong include file (ff.h). -#endif - - -/* Reentrancy related */ -#if _FS_REENTRANT -#if _USE_LFN == 1 -#error Static LFN work area cannot be used at thread-safe configuration. -#endif -#define ENTER_FF(fs) { if (!lock_fs(fs)) return FR_TIMEOUT; } -#define LEAVE_FF(fs, res) { unlock_fs(fs, res); return res; } -#else -#define ENTER_FF(fs) -#define LEAVE_FF(fs, res) return res -#endif - -#define ABORT(fs, res) { fp->err = (BYTE)(res); LEAVE_FF(fs, res); } - - -/* Definitions of sector size */ -#if (_MAX_SS < _MIN_SS) || (_MAX_SS != 512 && _MAX_SS != 1024 && _MAX_SS != 2048 && _MAX_SS != 4096) || (_MIN_SS != 512 && _MIN_SS != 1024 && _MIN_SS != 2048 && _MIN_SS != 4096) -#error Wrong sector size configuration. -#endif -#if _MAX_SS == _MIN_SS -#define SS(fs) ((UINT)_MAX_SS) /* Fixed sector size */ -#else -#define SS(fs) ((fs)->ssize) /* Variable sector size */ -#endif - - -/* File access control feature */ -#if _FS_LOCK -#if _FS_READONLY -#error _FS_LOCK must be 0 at read-only cfg. -#endif -typedef struct { - FATFS *fs; /* Object ID 1, volume (NULL:blank entry) */ - DWORD clu; /* Object ID 2, directory (0:root) */ - WORD idx; /* Object ID 3, directory index */ - WORD ctr; /* Object open counter, 0:none, 0x01..0xFF:read mode open count, 0x100:write mode */ -} FILESEM; -#endif - - - -/* DBCS code ranges and SBCS extend character conversion table */ - -#if _CODE_PAGE == 932 /* Japanese Shift-JIS */ -#define _DF1S 0x81 /* DBC 1st byte range 1 start */ -#define _DF1E 0x9F /* DBC 1st byte range 1 end */ -#define _DF2S 0xE0 /* DBC 1st byte range 2 start */ -#define _DF2E 0xFC /* DBC 1st byte range 2 end */ -#define _DS1S 0x40 /* DBC 2nd byte range 1 start */ -#define _DS1E 0x7E /* DBC 2nd byte range 1 end */ -#define _DS2S 0x80 /* DBC 2nd byte range 2 start */ -#define _DS2E 0xFC /* DBC 2nd byte range 2 end */ - -#elif _CODE_PAGE == 936 /* Simplified Chinese GBK */ -#define _DF1S 0x81 -#define _DF1E 0xFE -#define _DS1S 0x40 -#define _DS1E 0x7E -#define _DS2S 0x80 -#define _DS2E 0xFE - -#elif _CODE_PAGE == 949 /* Korean */ -#define _DF1S 0x81 -#define _DF1E 0xFE -#define _DS1S 0x41 -#define _DS1E 0x5A -#define _DS2S 0x61 -#define _DS2E 0x7A -#define _DS3S 0x81 -#define _DS3E 0xFE - -#elif _CODE_PAGE == 950 /* Traditional Chinese Big5 */ -#define _DF1S 0x81 -#define _DF1E 0xFE -#define _DS1S 0x40 -#define _DS1E 0x7E -#define _DS2S 0xA1 -#define _DS2E 0xFE - -#elif _CODE_PAGE == 437 /* U.S. (OEM) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F,0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ - 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} - -#elif _CODE_PAGE == 720 /* Arabic (OEM) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x81,0x45,0x41,0x84,0x41,0x86,0x43,0x45,0x45,0x45,0x49,0x49,0x8D,0x8E,0x8F,0x90,0x92,0x92,0x93,0x94,0x95,0x49,0x49,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ - 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} - -#elif _CODE_PAGE == 737 /* Greek (OEM) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x92,0x92,0x93,0x94,0x95,0x96,0x97,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, \ - 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0xAA,0x92,0x93,0x94,0x95,0x96,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0x97,0xEA,0xEB,0xEC,0xE4,0xED,0xEE,0xE7,0xE8,0xF1,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} - -#elif _CODE_PAGE == 775 /* Baltic (OEM) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x9A,0x91,0xA0,0x8E,0x95,0x8F,0x80,0xAD,0xED,0x8A,0x8A,0xA1,0x8D,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0x95,0x96,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ - 0xA0,0xA1,0xE0,0xA3,0xA3,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xB5,0xB6,0xB7,0xB8,0xBD,0xBE,0xC6,0xC7,0xA5,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE3,0xE8,0xE8,0xEA,0xEA,0xEE,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} - -#elif _CODE_PAGE == 850 /* Multilingual Latin 1 (OEM) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x59,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ - 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} - -#elif _CODE_PAGE == 852 /* Latin 2 (OEM) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xDE,0x8F,0x80,0x9D,0xD3,0x8A,0x8A,0xD7,0x8D,0x8E,0x8F,0x90,0x91,0x91,0xE2,0x99,0x95,0x95,0x97,0x97,0x99,0x9A,0x9B,0x9B,0x9D,0x9E,0x9F, \ - 0xB5,0xD6,0xE0,0xE9,0xA4,0xA4,0xA6,0xA6,0xA8,0xA8,0xAA,0x8D,0xAC,0xB8,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBD,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC6,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD2,0xD3,0xD2,0xD5,0xD6,0xD7,0xB7,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xE0,0xE1,0xE2,0xE3,0xE3,0xD5,0xE6,0xE6,0xE8,0xE9,0xE8,0xEB,0xED,0xED,0xDD,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xEB,0xFC,0xFC,0xFE,0xFF} - -#elif _CODE_PAGE == 855 /* Cyrillic (OEM) */ -#define _DF1S 0 -#define _EXCVT {0x81,0x81,0x83,0x83,0x85,0x85,0x87,0x87,0x89,0x89,0x8B,0x8B,0x8D,0x8D,0x8F,0x8F,0x91,0x91,0x93,0x93,0x95,0x95,0x97,0x97,0x99,0x99,0x9B,0x9B,0x9D,0x9D,0x9F,0x9F, \ - 0xA1,0xA1,0xA3,0xA3,0xA5,0xA5,0xA7,0xA7,0xA9,0xA9,0xAB,0xAB,0xAD,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB6,0xB6,0xB8,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD3,0xD3,0xD5,0xD5,0xD7,0xD7,0xDD,0xD9,0xDA,0xDB,0xDC,0xDD,0xE0,0xDF, \ - 0xE0,0xE2,0xE2,0xE4,0xE4,0xE6,0xE6,0xE8,0xE8,0xEA,0xEA,0xEC,0xEC,0xEE,0xEE,0xEF,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFD,0xFE,0xFF} - -#elif _CODE_PAGE == 857 /* Turkish (OEM) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0x98,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x98,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9E, \ - 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA6,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xDE,0x59,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} - -#elif _CODE_PAGE == 858 /* Multilingual Latin 1 + Euro (OEM) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x59,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ - 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} - -#elif _CODE_PAGE == 862 /* Hebrew (OEM) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ - 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} - -#elif _CODE_PAGE == 866 /* Russian (OEM) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ - 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0x90,0x91,0x92,0x93,0x9d,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} - -#elif _CODE_PAGE == 874 /* Thai (OEM, Windows) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ - 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} - -#elif _CODE_PAGE == 1250 /* Central Europe (Windows) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, \ - 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xA3,0xB4,0xB5,0xB6,0xB7,0xB8,0xA5,0xAA,0xBB,0xBC,0xBD,0xBC,0xAF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF} - -#elif _CODE_PAGE == 1251 /* Cyrillic (Windows) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x81,0x82,0x82,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x80,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, \ - 0xA0,0xA2,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB2,0xA5,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xA3,0xBD,0xBD,0xAF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF} - -#elif _CODE_PAGE == 1252 /* Latin 1 (Windows) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xAd,0x9B,0x8C,0x9D,0xAE,0x9F, \ - 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x9F} - -#elif _CODE_PAGE == 1253 /* Greek (Windows) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ - 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xA2,0xB8,0xB9,0xBA, \ - 0xE0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xF2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xFB,0xBC,0xFD,0xBF,0xFF} - -#elif _CODE_PAGE == 1254 /* Turkish (Windows) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x9D,0x9E,0x9F, \ - 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x9F} - -#elif _CODE_PAGE == 1255 /* Hebrew (Windows) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ - 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} - -#elif _CODE_PAGE == 1256 /* Arabic (Windows) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x8C,0x9D,0x9E,0x9F, \ - 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0x41,0xE1,0x41,0xE3,0xE4,0xE5,0xE6,0x43,0x45,0x45,0x45,0x45,0xEC,0xED,0x49,0x49,0xF0,0xF1,0xF2,0xF3,0x4F,0xF5,0xF6,0xF7,0xF8,0x55,0xFA,0x55,0x55,0xFD,0xFE,0xFF} - -#elif _CODE_PAGE == 1257 /* Baltic (Windows) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ - 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xBC,0xBD,0xBE,0xAF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF} - -#elif _CODE_PAGE == 1258 /* Vietnam (OEM, Windows) */ -#define _DF1S 0 -#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0xAC,0x9D,0x9E,0x9F, \ - 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xEC,0xCD,0xCE,0xCF,0xD0,0xD1,0xF2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xFE,0x9F} - -#elif _CODE_PAGE == 1 /* ASCII (for only non-LFN cfg) */ -#if _USE_LFN -#error Cannot use LFN feature without valid code page. -#endif -#define _DF1S 0 - -#else -#error Unknown code page - -#endif - - -/* Character code support macros */ -#define IsUpper(c) (((c)>='A')&&((c)<='Z')) -#define IsLower(c) (((c)>='a')&&((c)<='z')) -#define IsDigit(c) (((c)>='0')&&((c)<='9')) - -#if _DF1S /* Code page is DBCS */ - -#ifdef _DF2S /* Two 1st byte areas */ -#define IsDBCS1(c) (((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) || ((BYTE)(c) >= _DF2S && (BYTE)(c) <= _DF2E)) -#else /* One 1st byte area */ -#define IsDBCS1(c) ((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) -#endif - -#ifdef _DS3S /* Three 2nd byte areas */ -#define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E) || ((BYTE)(c) >= _DS3S && (BYTE)(c) <= _DS3E)) -#else /* Two 2nd byte areas */ -#define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E)) -#endif - -#else /* Code page is SBCS */ - -#define IsDBCS1(c) 0 -#define IsDBCS2(c) 0 - -#endif /* _DF1S */ - - -/* Name status flags */ -#define NS 11 /* Index of name status byte in fn[] */ -#define NS_LOSS 0x01 /* Out of 8.3 format */ -#define NS_LFN 0x02 /* Force to create LFN entry */ -#define NS_LAST 0x04 /* Last segment */ -#define NS_BODY 0x08 /* Lower case flag (body) */ -#define NS_EXT 0x10 /* Lower case flag (ext) */ -#define NS_DOT 0x20 /* Dot entry */ - - -/* FAT sub-type boundaries */ -#define MIN_FAT16 4086U /* Minimum number of clusters for FAT16 */ -#define MIN_FAT32 65526U /* Minimum number of clusters for FAT32 */ - - -/* FatFs refers the members in the FAT structures as byte array instead of -/ structure member because the structure is not binary compatible between -/ different platforms */ - -#define BS_jmpBoot 0 /* Jump instruction (3) */ -#define BS_OEMName 3 /* OEM name (8) */ -#define BPB_BytsPerSec 11 /* Sector size [byte] (2) */ -#define BPB_SecPerClus 13 /* Cluster size [sector] (1) */ -#define BPB_RsvdSecCnt 14 /* Size of reserved area [sector] (2) */ -#define BPB_NumFATs 16 /* Number of FAT copies (1) */ -#define BPB_RootEntCnt 17 /* Number of root directory entries for FAT12/16 (2) */ -#define BPB_TotSec16 19 /* Volume size [sector] (2) */ -#define BPB_Media 21 /* Media descriptor (1) */ -#define BPB_FATSz16 22 /* FAT size [sector] (2) */ -#define BPB_SecPerTrk 24 /* Track size [sector] (2) */ -#define BPB_NumHeads 26 /* Number of heads (2) */ -#define BPB_HiddSec 28 /* Number of special hidden sectors (4) */ -#define BPB_TotSec32 32 /* Volume size [sector] (4) */ -#define BS_DrvNum 36 /* Physical drive number (2) */ -#define BS_BootSig 38 /* Extended boot signature (1) */ -#define BS_VolID 39 /* Volume serial number (4) */ -#define BS_VolLab 43 /* Volume label (8) */ -#define BS_FilSysType 54 /* File system type (1) */ -#define BPB_FATSz32 36 /* FAT size [sector] (4) */ -#define BPB_ExtFlags 40 /* Extended flags (2) */ -#define BPB_FSVer 42 /* File system version (2) */ -#define BPB_RootClus 44 /* Root directory first cluster (4) */ -#define BPB_FSInfo 48 /* Offset of FSINFO sector (2) */ -#define BPB_BkBootSec 50 /* Offset of backup boot sector (2) */ -#define BS_DrvNum32 64 /* Physical drive number (2) */ -#define BS_BootSig32 66 /* Extended boot signature (1) */ -#define BS_VolID32 67 /* Volume serial number (4) */ -#define BS_VolLab32 71 /* Volume label (8) */ -#define BS_FilSysType32 82 /* File system type (1) */ -#define FSI_LeadSig 0 /* FSI: Leading signature (4) */ -#define FSI_StrucSig 484 /* FSI: Structure signature (4) */ -#define FSI_Free_Count 488 /* FSI: Number of free clusters (4) */ -#define FSI_Nxt_Free 492 /* FSI: Last allocated cluster (4) */ -#define MBR_Table 446 /* MBR: Partition table offset (2) */ -#define SZ_PTE 16 /* MBR: Size of a partition table entry */ -#define BS_55AA 510 /* Signature word (2) */ - -#define DIR_Name 0 /* Short file name (11) */ -#define DIR_Attr 11 /* Attribute (1) */ -#define DIR_NTres 12 /* NT flag (1) */ -#define DIR_CrtTimeTenth 13 /* Created time sub-second (1) */ -#define DIR_CrtTime 14 /* Created time (2) */ -#define DIR_CrtDate 16 /* Created date (2) */ -#define DIR_LstAccDate 18 /* Last accessed date (2) */ -#define DIR_FstClusHI 20 /* Higher 16-bit of first cluster (2) */ -#define DIR_WrtTime 22 /* Modified time (2) */ -#define DIR_WrtDate 24 /* Modified date (2) */ -#define DIR_FstClusLO 26 /* Lower 16-bit of first cluster (2) */ -#define DIR_FileSize 28 /* File size (4) */ -#define LDIR_Ord 0 /* LFN entry order and LLE flag (1) */ -#define LDIR_Attr 11 /* LFN attribute (1) */ -#define LDIR_Type 12 /* LFN type (1) */ -#define LDIR_Chksum 13 /* Sum of corresponding SFN entry */ -#define LDIR_FstClusLO 26 /* Filled by zero (0) */ -#define SZ_DIR 32 /* Size of a directory entry */ -#define LLE 0x40 /* Last long entry flag in LDIR_Ord */ -#define DDE 0xE5 /* Deleted directory entry mark in DIR_Name[0] */ -#define NDDE 0x05 /* Replacement of the character collides with DDE */ - - - - -/*------------------------------------------------------------*/ -/* Module private work area */ -/*------------------------------------------------------------*/ -/* Note that uninitialized variables with static duration are -/ guaranteed zero/null as initial value. If not, either the -/ linker or start-up routine is out of ANSI-C standard. -*/ - -#if _VOLUMES >= 1 || _VOLUMES <= 10 -static -FATFS *FatFs[_VOLUMES]; /* Pointer to the file system objects (logical drives) */ -#else -#error Number of volumes must be 1 to 10. -#endif - -static -WORD Fsid; /* File system mount ID */ - -#if _FS_RPATH && _VOLUMES >= 2 -static -BYTE CurrVol; /* Current drive */ -#endif - -#if _FS_LOCK -static -FILESEM Files[_FS_LOCK]; /* Open object lock semaphores */ -#endif - -#if _USE_LFN == 0 /* No LFN feature */ -#define DEF_NAMEBUF BYTE sfn[12] -#define INIT_BUF(dobj) (dobj).fn = sfn -#define FREE_BUF() - -#elif _USE_LFN == 1 /* LFN feature with static working buffer */ -static -WCHAR LfnBuf[_MAX_LFN+1]; -#define DEF_NAMEBUF BYTE sfn[12] -#define INIT_BUF(dobj) { (dobj).fn = sfn; (dobj).lfn = LfnBuf; } -#define FREE_BUF() - -#elif _USE_LFN == 2 /* LFN feature with dynamic working buffer on the stack */ -#define DEF_NAMEBUF BYTE sfn[12]; WCHAR lbuf[_MAX_LFN+1] -#define INIT_BUF(dobj) { (dobj).fn = sfn; (dobj).lfn = lbuf; } -#define FREE_BUF() - -#elif _USE_LFN == 3 /* LFN feature with dynamic working buffer on the heap */ -#define DEF_NAMEBUF BYTE sfn[12]; WCHAR *lfn -#define INIT_BUF(dobj) { lfn = ff_memalloc((_MAX_LFN + 1) * 2); \ - if (!lfn) LEAVE_FF((dobj).fs, FR_NOT_ENOUGH_CORE); \ - (dobj).lfn = lfn; (dobj).fn = sfn; } -#define FREE_BUF() ff_memfree(lfn) - -#else -#error Wrong LFN configuration. -#endif - - -#ifdef _EXCVT -static -const BYTE ExCvt[] = _EXCVT; /* Upper conversion table for extended characters */ -#endif - - - - - - -/*-------------------------------------------------------------------------- - - Module Private Functions - ----------------------------------------------------------------------------*/ - - -/*-----------------------------------------------------------------------*/ -/* String functions */ -/*-----------------------------------------------------------------------*/ - -#if 0 - -/* Copy memory to memory */ -static -void mem_cpy (void* dst, const void* src, UINT cnt) { - BYTE *d = (BYTE*)dst; - const BYTE *s = (const BYTE*)src; - -#if _WORD_ACCESS == 1 - while (cnt >= sizeof (int)) { - *(int*)d = *(int*)s; - d += sizeof (int); s += sizeof (int); - cnt -= sizeof (int); - } -#endif - while (cnt--) - *d++ = *s++; -} - -/* Fill memory */ -static -void mem_set (void* dst, int val, UINT cnt) { - BYTE *d = (BYTE*)dst; - - while (cnt--) - *d++ = (BYTE)val; -} - -/* Compare memory to memory */ -static -int mem_cmp (const void* dst, const void* src, UINT cnt) { - const BYTE *d = (const BYTE *)dst, *s = (const BYTE *)src; - int r = 0; - - while (cnt-- && (r = *d++ - *s++) == 0) ; - return r; -} -#else -typedef unsigned int size_t; -extern int rtl_memcmp(const void * m1 , const void * m2 , size_t n); -extern void * rtl_memcpy(void * dst0 , const void * src0 , size_t len0); -extern void * rtl_memset(void * m , int c , size_t n); - -#define mem_cpy rtl_memcpy -#define mem_set rtl_memset -#define mem_cmp rtl_memcmp -#endif - -/* Check if chr is contained in the string */ -static -int chk_chr (const char* str, int chr) { - while (*str && *str != chr) str++; - return *str; -} - - - -/*-----------------------------------------------------------------------*/ -/* Request/Release grant to access the volume */ -/*-----------------------------------------------------------------------*/ -#if _FS_REENTRANT -static -int lock_fs ( - FATFS* fs /* File system object */ -) -{ - return ff_req_grant(fs->sobj); -} - - -static -void unlock_fs ( - FATFS* fs, /* File system object */ - FRESULT res /* Result code to be returned */ -) -{ - if (fs && - res != FR_NOT_ENABLED && - res != FR_INVALID_DRIVE && - res != FR_INVALID_OBJECT && - res != FR_TIMEOUT) { - ff_rel_grant(fs->sobj); - } -} -#endif - - - - -/*-----------------------------------------------------------------------*/ -/* File lock control functions */ -/*-----------------------------------------------------------------------*/ -#if _FS_LOCK - -static -FRESULT chk_lock ( /* Check if the file can be accessed */ - DIR* dp, /* Directory object pointing the file to be checked */ - int acc /* Desired access type (0:Read, 1:Write, 2:Delete/Rename) */ -) -{ - UINT i, be; - - /* Search file semaphore table */ - for (i = be = 0; i < _FS_LOCK; i++) { - if (Files[i].fs) { /* Existing entry */ - if (Files[i].fs == dp->fs && /* Check if the object matched with an open object */ - Files[i].clu == dp->sclust && - Files[i].idx == dp->index) break; - } else { /* Blank entry */ - be = 1; - } - } - if (i == _FS_LOCK) /* The object is not opened */ - return (be || acc == 2) ? FR_OK : FR_TOO_MANY_OPEN_FILES; /* Is there a blank entry for new object? */ - - /* The object has been opened. Reject any open against writing file and all write mode open */ - return (acc || Files[i].ctr == 0x100) ? FR_LOCKED : FR_OK; -} - - -static -int enq_lock (void) /* Check if an entry is available for a new object */ -{ - UINT i; - - for (i = 0; i < _FS_LOCK && Files[i].fs; i++) ; - return (i == _FS_LOCK) ? 0 : 1; -} - - -static -UINT inc_lock ( /* Increment object open counter and returns its index (0:Internal error) */ - DIR* dp, /* Directory object pointing the file to register or increment */ - int acc /* Desired access (0:Read, 1:Write, 2:Delete/Rename) */ -) -{ - UINT i; - - - for (i = 0; i < _FS_LOCK; i++) { /* Find the object */ - if (Files[i].fs == dp->fs && - Files[i].clu == dp->sclust && - Files[i].idx == dp->index) break; - } - - if (i == _FS_LOCK) { /* Not opened. Register it as new. */ - for (i = 0; i < _FS_LOCK && Files[i].fs; i++) ; - if (i == _FS_LOCK) return 0; /* No free entry to register (int err) */ - Files[i].fs = dp->fs; - Files[i].clu = dp->sclust; - Files[i].idx = dp->index; - Files[i].ctr = 0; - } - - if (acc && Files[i].ctr) return 0; /* Access violation (int err) */ - - Files[i].ctr = acc ? 0x100 : Files[i].ctr + 1; /* Set semaphore value */ - - return i + 1; -} - - -static -FRESULT dec_lock ( /* Decrement object open counter */ - UINT i /* Semaphore index (1..) */ -) -{ - WORD n; - FRESULT res; - - - if (--i < _FS_LOCK) { /* Shift index number origin from 0 */ - n = Files[i].ctr; - if (n == 0x100) n = 0; /* If write mode open, delete the entry */ - if (n) n--; /* Decrement read mode open count */ - Files[i].ctr = n; - if (!n) Files[i].fs = 0; /* Delete the entry if open count gets zero */ - res = FR_OK; - } else { - res = FR_INT_ERR; /* Invalid index nunber */ - } - return res; -} - - -static -void clear_lock ( /* Clear lock entries of the volume */ - FATFS *fs -) -{ - UINT i; - - for (i = 0; i < _FS_LOCK; i++) { - if (Files[i].fs == fs) Files[i].fs = 0; - } -} -#endif - - - - -/*-----------------------------------------------------------------------*/ -/* Move/Flush disk access window in the file system object */ -/*-----------------------------------------------------------------------*/ -#if !_FS_READONLY -static -FRESULT sync_window ( - FATFS* fs /* File system object */ -) -{ - DWORD wsect; - UINT nf; - - - if (fs->wflag) { /* Write back the sector if it is dirty */ - wsect = fs->winsect; /* Current sector number */ - if (disk_write(fs->drv, fs->win, wsect, 1)) - return FR_DISK_ERR; - fs->wflag = 0; - if (wsect - fs->fatbase < fs->fsize) { /* Is it in the FAT area? */ - for (nf = fs->n_fats; nf >= 2; nf--) { /* Reflect the change to all FAT copies */ - wsect += fs->fsize; - disk_write(fs->drv, fs->win, wsect, 1); - } - } - } - return FR_OK; -} -#endif - - -static -FRESULT move_window ( - FATFS* fs, /* File system object */ - DWORD sector /* Sector number to make appearance in the fs->win[] */ -) -{ - if (sector != fs->winsect) { /* Changed current window */ -#if !_FS_READONLY - if (sync_window(fs) != FR_OK) - return FR_DISK_ERR; -#endif - if (disk_read(fs->drv, fs->win, sector, 1)) - return FR_DISK_ERR; - fs->winsect = sector; - } - - return FR_OK; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Synchronize file system and strage device */ -/*-----------------------------------------------------------------------*/ -#if !_FS_READONLY -static -FRESULT sync_fs ( /* FR_OK: successful, FR_DISK_ERR: failed */ - FATFS* fs /* File system object */ -) -{ - FRESULT res; - - - res = sync_window(fs); - if (res == FR_OK) { - /* Update FSINFO sector if needed */ - if (fs->fs_type == FS_FAT32 && fs->fsi_flag == 1) { - /* Create FSINFO structure */ - mem_set(fs->win, 0, SS(fs)); - ST_WORD(fs->win+BS_55AA, 0xAA55); - ST_DWORD(fs->win+FSI_LeadSig, 0x41615252); - ST_DWORD(fs->win+FSI_StrucSig, 0x61417272); - ST_DWORD(fs->win+FSI_Free_Count, fs->free_clust); - ST_DWORD(fs->win+FSI_Nxt_Free, fs->last_clust); - /* Write it into the FSINFO sector */ - fs->winsect = fs->volbase + 1; - disk_write(fs->drv, fs->win, fs->winsect, 1); - fs->fsi_flag = 0; - } - /* Make sure that no pending write process in the physical drive */ - if (disk_ioctl(fs->drv, CTRL_SYNC, 0) != RES_OK) - res = FR_DISK_ERR; - } - - return res; -} -#endif - - - - -/*-----------------------------------------------------------------------*/ -/* Get sector# from cluster# */ -/*-----------------------------------------------------------------------*/ - - -DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */ - FATFS* fs, /* File system object */ - DWORD clst /* Cluster# to be converted */ -) -{ - clst -= 2; - if (clst >= (fs->n_fatent - 2)) return 0; /* Invalid cluster# */ - return clst * fs->csize + fs->database; -} - - - - -/*-----------------------------------------------------------------------*/ -/* FAT access - Read value of a FAT entry */ -/*-----------------------------------------------------------------------*/ - - -DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, Else:Cluster status */ - FATFS* fs, /* File system object */ - DWORD clst /* Cluster# to get the link information */ -) -{ - UINT wc, bc; - BYTE *p; - - - if (clst < 2 || clst >= fs->n_fatent) /* Check range */ - return 1; - - switch (fs->fs_type) { - case FS_FAT12 : - bc = (UINT)clst; bc += bc / 2; - if (move_window(fs, fs->fatbase + (bc / SS(fs)))) break; - wc = fs->win[bc % SS(fs)]; bc++; - if (move_window(fs, fs->fatbase + (bc / SS(fs)))) break; - wc |= fs->win[bc % SS(fs)] << 8; - return clst & 1 ? wc >> 4 : (wc & 0xFFF); - - case FS_FAT16 : - if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2)))) break; - p = &fs->win[clst * 2 % SS(fs)]; - return LD_WORD(p); - - case FS_FAT32 : - if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4)))) break; - p = &fs->win[clst * 4 % SS(fs)]; - return LD_DWORD(p) & 0x0FFFFFFF; - - default: - return 1; - } - - return 0xFFFFFFFF; /* An error occurred at the disk I/O layer */ -} - - - - -/*-----------------------------------------------------------------------*/ -/* FAT access - Change value of a FAT entry */ -/*-----------------------------------------------------------------------*/ -#if !_FS_READONLY - -FRESULT put_fat ( - FATFS* fs, /* File system object */ - DWORD clst, /* Cluster# to be changed in range of 2 to fs->n_fatent - 1 */ - DWORD val /* New value to mark the cluster */ -) -{ - UINT bc; - BYTE *p; - FRESULT res; - - - if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ - res = FR_INT_ERR; - - } else { - switch (fs->fs_type) { - case FS_FAT12 : - bc = (UINT)clst; bc += bc / 2; - res = move_window(fs, fs->fatbase + (bc / SS(fs))); - if (res != FR_OK) break; - p = &fs->win[bc % SS(fs)]; - *p = (clst & 1) ? ((*p & 0x0F) | ((BYTE)val << 4)) : (BYTE)val; - bc++; - fs->wflag = 1; - res = move_window(fs, fs->fatbase + (bc / SS(fs))); - if (res != FR_OK) break; - p = &fs->win[bc % SS(fs)]; - *p = (clst & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); - break; - - case FS_FAT16 : - res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))); - if (res != FR_OK) break; - p = &fs->win[clst * 2 % SS(fs)]; - ST_WORD(p, (WORD)val); - break; - - case FS_FAT32 : - res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))); - if (res != FR_OK) break; - p = &fs->win[clst * 4 % SS(fs)]; - val |= LD_DWORD(p) & 0xF0000000; - ST_DWORD(p, val); - break; - - default : - res = FR_INT_ERR; - } - fs->wflag = 1; - } - - return res; -} -#endif /* !_FS_READONLY */ - - - - -/*-----------------------------------------------------------------------*/ -/* FAT handling - Remove a cluster chain */ -/*-----------------------------------------------------------------------*/ -#if !_FS_READONLY -static -FRESULT remove_chain ( - FATFS* fs, /* File system object */ - DWORD clst /* Cluster# to remove a chain from */ -) -{ - FRESULT res; - DWORD nxt; -#if _USE_ERASE - DWORD scl = clst, ecl = clst, rt[2]; -#endif - - if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ - res = FR_INT_ERR; - - } else { - res = FR_OK; - while (clst < fs->n_fatent) { /* Not a last link? */ - nxt = get_fat(fs, clst); /* Get cluster status */ - if (nxt == 0) break; /* Empty cluster? */ - if (nxt == 1) { res = FR_INT_ERR; break; } /* Internal error? */ - if (nxt == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } /* Disk error? */ - res = put_fat(fs, clst, 0); /* Mark the cluster "empty" */ - if (res != FR_OK) break; - if (fs->free_clust != 0xFFFFFFFF) { /* Update FSINFO */ - fs->free_clust++; - fs->fsi_flag |= 1; - } -#if _USE_ERASE - if (ecl + 1 == nxt) { /* Is next cluster contiguous? */ - ecl = nxt; - } else { /* End of contiguous clusters */ - rt[0] = clust2sect(fs, scl); /* Start sector */ - rt[1] = clust2sect(fs, ecl) + fs->csize - 1; /* End sector */ - disk_ioctl(fs->drv, CTRL_ERASE_SECTOR, rt); /* Erase the block */ - scl = ecl = nxt; - } -#endif - clst = nxt; /* Next cluster */ - } - } - - return res; -} -#endif - - - - -/*-----------------------------------------------------------------------*/ -/* FAT handling - Stretch or Create a cluster chain */ -/*-----------------------------------------------------------------------*/ -#if !_FS_READONLY -static -DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster# */ - FATFS* fs, /* File system object */ - DWORD clst /* Cluster# to stretch. 0 means create a new chain. */ -) -{ - DWORD cs, ncl, scl; - FRESULT res; - - - if (clst == 0) { /* Create a new chain */ - scl = fs->last_clust; /* Get suggested start point */ - if (!scl || scl >= fs->n_fatent) scl = 1; - } - else { /* Stretch the current chain */ - cs = get_fat(fs, clst); /* Check the cluster status */ - if (cs < 2) return 1; /* Invalid value */ - if (cs == 0xFFFFFFFF) return cs; /* A disk error occurred */ - if (cs < fs->n_fatent) return cs; /* It is already followed by next cluster */ - scl = clst; - } - - ncl = scl; /* Start cluster */ - for (;;) { - ncl++; /* Next cluster */ - if (ncl >= fs->n_fatent) { /* Check wrap around */ - ncl = 2; - if (ncl > scl) return 0; /* No free cluster */ - } - cs = get_fat(fs, ncl); /* Get the cluster status */ - if (cs == 0) break; /* Found a free cluster */ - if (cs == 0xFFFFFFFF || cs == 1)/* An error occurred */ - return cs; - if (ncl == scl) return 0; /* No free cluster */ - } - - res = put_fat(fs, ncl, 0x0FFFFFFF); /* Mark the new cluster "last link" */ - if (res == FR_OK && clst != 0) { - res = put_fat(fs, clst, ncl); /* Link it to the previous one if needed */ - } - if (res == FR_OK) { - fs->last_clust = ncl; /* Update FSINFO */ - if (fs->free_clust != 0xFFFFFFFF) { - fs->free_clust--; - fs->fsi_flag |= 1; - } - } else { - ncl = (res == FR_DISK_ERR) ? 0xFFFFFFFF : 1; - } - - return ncl; /* Return new cluster number or error code */ -} -#endif /* !_FS_READONLY */ - - - - -/*-----------------------------------------------------------------------*/ -/* FAT handling - Convert offset into cluster with link map table */ -/*-----------------------------------------------------------------------*/ - -#if _USE_FASTSEEK -static -DWORD clmt_clust ( /* <2:Error, >=2:Cluster number */ - FIL* fp, /* Pointer to the file object */ - DWORD ofs /* File offset to be converted to cluster# */ -) -{ - DWORD cl, ncl, *tbl; - - - tbl = fp->cltbl + 1; /* Top of CLMT */ - cl = ofs / SS(fp->fs) / fp->fs->csize; /* Cluster order from top of the file */ - for (;;) { - ncl = *tbl++; /* Number of cluters in the fragment */ - if (!ncl) return 0; /* End of table? (error) */ - if (cl < ncl) break; /* In this fragment? */ - cl -= ncl; tbl++; /* Next fragment */ - } - return cl + *tbl; /* Return the cluster number */ -} -#endif /* _USE_FASTSEEK */ - - - - -/*-----------------------------------------------------------------------*/ -/* Directory handling - Set directory index */ -/*-----------------------------------------------------------------------*/ - -static -FRESULT dir_sdi ( - DIR* dp, /* Pointer to directory object */ - UINT idx /* Index of directory table */ -) -{ - DWORD clst, sect; - UINT ic; - - - dp->index = (WORD)idx; /* Current index */ - clst = dp->sclust; /* Table start cluster (0:root) */ - if (clst == 1 || clst >= dp->fs->n_fatent) /* Check start cluster range */ - return FR_INT_ERR; - if (!clst && dp->fs->fs_type == FS_FAT32) /* Replace cluster# 0 with root cluster# if in FAT32 */ - clst = dp->fs->dirbase; - - if (clst == 0) { /* Static table (root-directory in FAT12/16) */ - if (idx >= dp->fs->n_rootdir) /* Is index out of range? */ - return FR_INT_ERR; - sect = dp->fs->dirbase; - } - else { /* Dynamic table (root-directory in FAT32 or sub-directory) */ - ic = SS(dp->fs) / SZ_DIR * dp->fs->csize; /* Entries per cluster */ - while (idx >= ic) { /* Follow cluster chain */ - clst = get_fat(dp->fs, clst); /* Get next cluster */ - if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */ - if (clst < 2 || clst >= dp->fs->n_fatent) /* Reached to end of table or internal error */ - return FR_INT_ERR; - idx -= ic; - } - sect = clust2sect(dp->fs, clst); - } - dp->clust = clst; /* Current cluster# */ - if (!sect) return FR_INT_ERR; - dp->sect = sect + idx / (SS(dp->fs) / SZ_DIR); /* Sector# of the directory entry */ - dp->dir = dp->fs->win + (idx % (SS(dp->fs) / SZ_DIR)) * SZ_DIR; /* Ptr to the entry in the sector */ - - return FR_OK; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Directory handling - Move directory table index next */ -/*-----------------------------------------------------------------------*/ - -static -FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not stretch */ - DIR* dp, /* Pointer to the directory object */ - int stretch /* 0: Do not stretch table, 1: Stretch table if needed */ -) -{ - DWORD clst; - UINT i; - - - i = dp->index + 1; - if (!(i & 0xFFFF) || !dp->sect) /* Report EOT when index has reached 65535 */ - return FR_NO_FILE; - - if (!(i % (SS(dp->fs) / SZ_DIR))) { /* Sector changed? */ - dp->sect++; /* Next sector */ - - if (!dp->clust) { /* Static table */ - if (i >= dp->fs->n_rootdir) /* Report EOT if it reached end of static table */ - return FR_NO_FILE; - } - else { /* Dynamic table */ - if (((i / (SS(dp->fs) / SZ_DIR)) & (dp->fs->csize - 1)) == 0) { /* Cluster changed? */ - clst = get_fat(dp->fs, dp->clust); /* Get next cluster */ - if (clst <= 1) return FR_INT_ERR; - if (clst == 0xFFFFFFFF) return FR_DISK_ERR; - if (clst >= dp->fs->n_fatent) { /* If it reached end of dynamic table, */ -#if !_FS_READONLY - UINT c; - if (!stretch) return FR_NO_FILE; /* If do not stretch, report EOT */ - clst = create_chain(dp->fs, dp->clust); /* Stretch cluster chain */ - if (clst == 0) return FR_DENIED; /* No free cluster */ - if (clst == 1) return FR_INT_ERR; - if (clst == 0xFFFFFFFF) return FR_DISK_ERR; - /* Clean-up stretched table */ - if (sync_window(dp->fs)) return FR_DISK_ERR;/* Flush disk access window */ - mem_set(dp->fs->win, 0, SS(dp->fs)); /* Clear window buffer */ - dp->fs->winsect = clust2sect(dp->fs, clst); /* Cluster start sector */ - for (c = 0; c < dp->fs->csize; c++) { /* Fill the new cluster with 0 */ - dp->fs->wflag = 1; - if (sync_window(dp->fs)) return FR_DISK_ERR; - dp->fs->winsect++; - } - dp->fs->winsect -= c; /* Rewind window offset */ -#else - if (!stretch) return FR_NO_FILE; /* If do not stretch, report EOT (this is to suppress warning) */ - return FR_NO_FILE; /* Report EOT */ -#endif - } - dp->clust = clst; /* Initialize data for new cluster */ - dp->sect = clust2sect(dp->fs, clst); - } - } - } - - dp->index = (WORD)i; /* Current index */ - dp->dir = dp->fs->win + (i % (SS(dp->fs) / SZ_DIR)) * SZ_DIR; /* Current entry in the window */ - - return FR_OK; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Directory handling - Reserve directory entry */ -/*-----------------------------------------------------------------------*/ - -#if !_FS_READONLY -static -FRESULT dir_alloc ( - DIR* dp, /* Pointer to the directory object */ - UINT nent /* Number of contiguous entries to allocate (1-21) */ -) -{ - FRESULT res; - UINT n; - - - res = dir_sdi(dp, 0); - if (res == FR_OK) { - n = 0; - do { - res = move_window(dp->fs, dp->sect); - if (res != FR_OK) break; - if (dp->dir[0] == DDE || dp->dir[0] == 0) { /* Is it a blank entry? */ - if (++n == nent) break; /* A block of contiguous entries is found */ - } else { - n = 0; /* Not a blank entry. Restart to search */ - } - res = dir_next(dp, 1); /* Next entry with table stretch enabled */ - } while (res == FR_OK); - } - if (res == FR_NO_FILE) res = FR_DENIED; /* No directory entry to allocate */ - return res; -} -#endif - - - - -/*-----------------------------------------------------------------------*/ -/* Directory handling - Load/Store start cluster number */ -/*-----------------------------------------------------------------------*/ - -static -DWORD ld_clust ( - FATFS* fs, /* Pointer to the fs object */ - BYTE* dir /* Pointer to the directory entry */ -) -{ - DWORD cl; - - cl = LD_WORD(dir+DIR_FstClusLO); - if (fs->fs_type == FS_FAT32) - cl |= (DWORD)LD_WORD(dir+DIR_FstClusHI) << 16; - - return cl; -} - - -#if !_FS_READONLY -static -void st_clust ( - BYTE* dir, /* Pointer to the directory entry */ - DWORD cl /* Value to be set */ -) -{ - ST_WORD(dir+DIR_FstClusLO, cl); - ST_WORD(dir+DIR_FstClusHI, cl >> 16); -} -#endif - - - - -/*-----------------------------------------------------------------------*/ -/* LFN handling - Test/Pick/Fit an LFN segment from/to directory entry */ -/*-----------------------------------------------------------------------*/ -#if _USE_LFN -static -const BYTE LfnOfs[] = {1,3,5,7,9,14,16,18,20,22,24,28,30}; /* Offset of LFN characters in the directory entry */ - - -static -int cmp_lfn ( /* 1:Matched, 0:Not matched */ - WCHAR* lfnbuf, /* Pointer to the LFN to be compared */ - BYTE* dir /* Pointer to the directory entry containing a part of LFN */ -) -{ - UINT i, s; - WCHAR wc, uc; - - - i = ((dir[LDIR_Ord] & ~LLE) - 1) * 13; /* Get offset in the LFN buffer */ - s = 0; wc = 1; - do { - uc = LD_WORD(dir+LfnOfs[s]); /* Pick an LFN character from the entry */ - if (wc) { /* Last character has not been processed */ - wc = ff_wtoupper(uc); /* Convert it to upper case */ - if (i >= _MAX_LFN || wc != ff_wtoupper(lfnbuf[i++])) /* Compare it */ - return 0; /* Not matched */ - } else { - if (uc != 0xFFFF) return 0; /* Check filler */ - } - } while (++s < 13); /* Repeat until all characters in the entry are checked */ - - if ((dir[LDIR_Ord] & LLE) && wc && lfnbuf[i]) /* Last segment matched but different length */ - return 0; - - return 1; /* The part of LFN matched */ -} - - - -static -int pick_lfn ( /* 1:Succeeded, 0:Buffer overflow */ - WCHAR* lfnbuf, /* Pointer to the Unicode-LFN buffer */ - BYTE* dir /* Pointer to the directory entry */ -) -{ - UINT i, s; - WCHAR wc, uc; - - - i = ((dir[LDIR_Ord] & 0x3F) - 1) * 13; /* Offset in the LFN buffer */ - - s = 0; wc = 1; - do { - uc = LD_WORD(dir+LfnOfs[s]); /* Pick an LFN character from the entry */ - if (wc) { /* Last character has not been processed */ - if (i >= _MAX_LFN) return 0; /* Buffer overflow? */ - lfnbuf[i++] = wc = uc; /* Store it */ - } else { - if (uc != 0xFFFF) return 0; /* Check filler */ - } - } while (++s < 13); /* Read all character in the entry */ - - if (dir[LDIR_Ord] & LLE) { /* Put terminator if it is the last LFN part */ - if (i >= _MAX_LFN) return 0; /* Buffer overflow? */ - lfnbuf[i] = 0; - } - - return 1; -} - - -#if !_FS_READONLY -static -void fit_lfn ( - const WCHAR* lfnbuf, /* Pointer to the LFN buffer */ - BYTE* dir, /* Pointer to the directory entry */ - BYTE ord, /* LFN order (1-20) */ - BYTE sum /* SFN sum */ -) -{ - UINT i, s; - WCHAR wc; - - - dir[LDIR_Chksum] = sum; /* Set check sum */ - dir[LDIR_Attr] = AM_LFN; /* Set attribute. LFN entry */ - dir[LDIR_Type] = 0; - ST_WORD(dir+LDIR_FstClusLO, 0); - - i = (ord - 1) * 13; /* Get offset in the LFN buffer */ - s = wc = 0; - do { - if (wc != 0xFFFF) wc = lfnbuf[i++]; /* Get an effective character */ - ST_WORD(dir+LfnOfs[s], wc); /* Put it */ - if (!wc) wc = 0xFFFF; /* Padding characters following last character */ - } while (++s < 13); - if (wc == 0xFFFF || !lfnbuf[i]) ord |= LLE; /* Bottom LFN part is the start of LFN sequence */ - dir[LDIR_Ord] = ord; /* Set the LFN order */ -} - -#endif -#endif - - - - -/*-----------------------------------------------------------------------*/ -/* Create numbered name */ -/*-----------------------------------------------------------------------*/ -#if _USE_LFN -static -void gen_numname ( - BYTE* dst, /* Pointer to the buffer to store numbered SFN */ - const BYTE* src, /* Pointer to SFN */ - const WCHAR* lfn, /* Pointer to LFN */ - UINT seq /* Sequence number */ -) -{ - BYTE ns[8], c; - UINT i, j; - - - mem_cpy(dst, src, 11); - - if (seq > 5) { /* On many collisions, generate a hash number instead of sequential number */ - WCHAR wc; - DWORD sr = seq; - - while (*lfn) { /* Create a CRC */ - wc = *lfn++; - for (i = 0; i < 16; i++) { - sr = (sr << 1) + (wc & 1); - wc >>= 1; - if (sr & 0x10000) sr ^= 0x11021; - } - } - seq = (UINT)sr; - } - - /* itoa (hexdecimal) */ - i = 7; - do { - c = (seq % 16) + '0'; - if (c > '9') c += 7; - ns[i--] = c; - seq /= 16; - } while (seq); - ns[i] = '~'; - - /* Append the number */ - for (j = 0; j < i && dst[j] != ' '; j++) { - if (IsDBCS1(dst[j])) { - if (j == i - 1) break; - j++; - } - } - do { - dst[j++] = (i < 8) ? ns[i++] : ' '; - } while (j < 8); -} -#endif - - - - -/*-----------------------------------------------------------------------*/ -/* Calculate sum of an SFN */ -/*-----------------------------------------------------------------------*/ -#if _USE_LFN -static -BYTE sum_sfn ( - const BYTE* dir /* Pointer to the SFN entry */ -) -{ - BYTE sum = 0; - UINT n = 11; - - do sum = (sum >> 1) + (sum << 7) + *dir++; while (--n); - return sum; -} -#endif - - - - -/*-----------------------------------------------------------------------*/ -/* Directory handling - Find an object in the directory */ -/*-----------------------------------------------------------------------*/ - -static -FRESULT dir_find ( - DIR* dp /* Pointer to the directory object linked to the file name */ -) -{ - FRESULT res; - BYTE c, *dir; -#if _USE_LFN - BYTE a, ord, sum; -#endif - - res = dir_sdi(dp, 0); /* Rewind directory object */ - if (res != FR_OK) return res; - -#if _USE_LFN - ord = sum = 0xFF; dp->lfn_idx = 0xFFFF; /* Reset LFN sequence */ -#endif - do { - res = move_window(dp->fs, dp->sect); - if (res != FR_OK) break; - dir = dp->dir; /* Ptr to the directory entry of current index */ - c = dir[DIR_Name]; - if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ -#if _USE_LFN /* LFN configuration */ - a = dir[DIR_Attr] & AM_MASK; - if (c == DDE || ((a & AM_VOL) && a != AM_LFN)) { /* An entry without valid data */ - ord = 0xFF; dp->lfn_idx = 0xFFFF; /* Reset LFN sequence */ - } else { - if (a == AM_LFN) { /* An LFN entry is found */ - if (dp->lfn) { - if (c & LLE) { /* Is it start of LFN sequence? */ - sum = dir[LDIR_Chksum]; - c &= ~LLE; ord = c; /* LFN start order */ - dp->lfn_idx = dp->index; /* Start index of LFN */ - } - /* Check validity of the LFN entry and compare it with given name */ - ord = (c == ord && sum == dir[LDIR_Chksum] && cmp_lfn(dp->lfn, dir)) ? ord - 1 : 0xFF; - } - } else { /* An SFN entry is found */ - if (!ord && sum == sum_sfn(dir)) break; /* LFN matched? */ - if (!(dp->fn[NS] & NS_LOSS) && !mem_cmp(dir, dp->fn, 11)) break; /* SFN matched? */ - ord = 0xFF; dp->lfn_idx = 0xFFFF; /* Reset LFN sequence */ - } - } -#else /* Non LFN configuration */ - if (!(dir[DIR_Attr] & AM_VOL) && !mem_cmp(dir, dp->fn, 11)) /* Is it a valid entry? */ - break; -#endif - res = dir_next(dp, 0); /* Next entry */ - } while (res == FR_OK); - - return res; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Read an object from the directory */ -/*-----------------------------------------------------------------------*/ -#if _FS_MINIMIZE <= 1 || _USE_LABEL || _FS_RPATH >= 2 -static -FRESULT dir_read ( - DIR* dp, /* Pointer to the directory object */ - int vol /* Filtered by 0:file/directory or 1:volume label */ -) -{ - FRESULT res; - BYTE a, c, *dir; -#if _USE_LFN - BYTE ord = 0xFF, sum = 0xFF; -#endif - - res = FR_NO_FILE; - while (dp->sect) { - res = move_window(dp->fs, dp->sect); - if (res != FR_OK) break; - dir = dp->dir; /* Ptr to the directory entry of current index */ - c = dir[DIR_Name]; - if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ - a = dir[DIR_Attr] & AM_MASK; -#if _USE_LFN /* LFN configuration */ - if (c == DDE || (!_FS_RPATH && c == '.') || (int)(a == AM_VOL) != vol) { /* An entry without valid data */ - ord = 0xFF; - } else { - if (a == AM_LFN) { /* An LFN entry is found */ - if (c & LLE) { /* Is it start of LFN sequence? */ - sum = dir[LDIR_Chksum]; - c &= ~LLE; ord = c; - dp->lfn_idx = dp->index; - } - /* Check LFN validity and capture it */ - ord = (c == ord && sum == dir[LDIR_Chksum] && pick_lfn(dp->lfn, dir)) ? ord - 1 : 0xFF; - } else { /* An SFN entry is found */ - if (ord || sum != sum_sfn(dir)) /* Is there a valid LFN? */ - dp->lfn_idx = 0xFFFF; /* It has no LFN. */ - break; - } - } -#else /* Non LFN configuration */ - if (c != DDE && (_FS_RPATH || c != '.') && a != AM_LFN && (int)(a == AM_VOL) == vol) /* Is it a valid entry? */ - break; -#endif - res = dir_next(dp, 0); /* Next entry */ - if (res != FR_OK) break; - } - - if (res != FR_OK) dp->sect = 0; - - return res; -} -#endif /* _FS_MINIMIZE <= 1 || _USE_LABEL || _FS_RPATH >= 2 */ - - - - -/*-----------------------------------------------------------------------*/ -/* Register an object to the directory */ -/*-----------------------------------------------------------------------*/ -#if !_FS_READONLY -static -FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many SFN collision, FR_DISK_ERR:Disk error */ - DIR* dp /* Target directory with object name to be created */ -) -{ - FRESULT res; -#if _USE_LFN /* LFN configuration */ - UINT n, nent; - BYTE sn[12], *fn, sum; - WCHAR *lfn; - - - fn = dp->fn; lfn = dp->lfn; - mem_cpy(sn, fn, 12); - - if (_FS_RPATH && (sn[NS] & NS_DOT)) /* Cannot create dot entry */ - return FR_INVALID_NAME; - - if (sn[NS] & NS_LOSS) { /* When LFN is out of 8.3 format, generate a numbered name */ - fn[NS] = 0; dp->lfn = 0; /* Find only SFN */ - for (n = 1; n < 100; n++) { - gen_numname(fn, sn, lfn, n); /* Generate a numbered name */ - res = dir_find(dp); /* Check if the name collides with existing SFN */ - if (res != FR_OK) break; - } - if (n == 100) return FR_DENIED; /* Abort if too many collisions */ - if (res != FR_NO_FILE) return res; /* Abort if the result is other than 'not collided' */ - fn[NS] = sn[NS]; dp->lfn = lfn; - } - - if (sn[NS] & NS_LFN) { /* When LFN is to be created, allocate entries for an SFN + LFNs. */ - for (n = 0; lfn[n]; n++) ; - nent = (n + 25) / 13; - } else { /* Otherwise allocate an entry for an SFN */ - nent = 1; - } - res = dir_alloc(dp, nent); /* Allocate entries */ - - if (res == FR_OK && --nent) { /* Set LFN entry if needed */ - res = dir_sdi(dp, dp->index - nent); - if (res == FR_OK) { - sum = sum_sfn(dp->fn); /* Sum value of the SFN tied to the LFN */ - do { /* Store LFN entries in bottom first */ - res = move_window(dp->fs, dp->sect); - if (res != FR_OK) break; - fit_lfn(dp->lfn, dp->dir, (BYTE)nent, sum); - dp->fs->wflag = 1; - res = dir_next(dp, 0); /* Next entry */ - } while (res == FR_OK && --nent); - } - } -#else /* Non LFN configuration */ - res = dir_alloc(dp, 1); /* Allocate an entry for SFN */ -#endif - - if (res == FR_OK) { /* Set SFN entry */ - res = move_window(dp->fs, dp->sect); - if (res == FR_OK) { - mem_set(dp->dir, 0, SZ_DIR); /* Clean the entry */ - mem_cpy(dp->dir, dp->fn, 11); /* Put SFN */ -#if _USE_LFN - dp->dir[DIR_NTres] = dp->fn[NS] & (NS_BODY | NS_EXT); /* Put NT flag */ -#endif - dp->fs->wflag = 1; - } - } - - return res; -} -#endif /* !_FS_READONLY */ - - - - -/*-----------------------------------------------------------------------*/ -/* Remove an object from the directory */ -/*-----------------------------------------------------------------------*/ -#if !_FS_READONLY && !_FS_MINIMIZE -static -FRESULT dir_remove ( /* FR_OK: Successful, FR_DISK_ERR: A disk error */ - DIR* dp /* Directory object pointing the entry to be removed */ -) -{ - FRESULT res; -#if _USE_LFN /* LFN configuration */ - UINT i; - - i = dp->index; /* SFN index */ - res = dir_sdi(dp, (dp->lfn_idx == 0xFFFF) ? i : dp->lfn_idx); /* Goto the SFN or top of the LFN entries */ - if (res == FR_OK) { - do { - res = move_window(dp->fs, dp->sect); - if (res != FR_OK) break; - mem_set(dp->dir, 0, SZ_DIR); /* Clear and mark the entry "deleted" */ - *dp->dir = DDE; - dp->fs->wflag = 1; - if (dp->index >= i) break; /* When reached SFN, all entries of the object has been deleted. */ - res = dir_next(dp, 0); /* Next entry */ - } while (res == FR_OK); - if (res == FR_NO_FILE) res = FR_INT_ERR; - } - -#else /* Non LFN configuration */ - res = dir_sdi(dp, dp->index); - if (res == FR_OK) { - res = move_window(dp->fs, dp->sect); - if (res == FR_OK) { - mem_set(dp->dir, 0, SZ_DIR); /* Clear and mark the entry "deleted" */ - *dp->dir = DDE; - dp->fs->wflag = 1; - } - } -#endif - - return res; -} -#endif /* !_FS_READONLY */ - - - - -/*-----------------------------------------------------------------------*/ -/* Get file information from directory entry */ -/*-----------------------------------------------------------------------*/ -#if _FS_MINIMIZE <= 1 || _FS_RPATH >= 2 -static -void get_fileinfo ( /* No return code */ - DIR* dp, /* Pointer to the directory object */ - FILINFO* fno /* Pointer to the file information to be filled */ -) -{ - UINT i; - TCHAR *p, c; - - - p = fno->fname; - if (dp->sect) { /* Get SFN */ - BYTE *dir = dp->dir; - - i = 0; - while (i < 11) { /* Copy name body and extension */ - c = (TCHAR)dir[i++]; - if (c == ' ') continue; /* Skip padding spaces */ - if (c == NDDE) c = (TCHAR)DDE; /* Restore replaced DDE character */ - if (i == 9) *p++ = '.'; /* Insert a . if extension is exist */ -#if _USE_LFN - if (IsUpper(c) && (dir[DIR_NTres] & (i >= 9 ? NS_EXT : NS_BODY))) - c += 0x20; /* To lower */ -#if _LFN_UNICODE - if (IsDBCS1(c) && i != 8 && i != 11 && IsDBCS2(dir[i])) - c = c << 8 | dir[i++]; - c = ff_convert(c, 1); /* OEM -> Unicode */ - if (!c) c = '?'; -#endif -#endif - *p++ = c; - } - fno->fattrib = dir[DIR_Attr]; /* Attribute */ - fno->fsize = LD_DWORD(dir+DIR_FileSize); /* Size */ - fno->fdate = LD_WORD(dir+DIR_WrtDate); /* Date */ - fno->ftime = LD_WORD(dir+DIR_WrtTime); /* Time */ - } - *p = 0; /* Terminate SFN string by a \0 */ - -#if _USE_LFN - if (fno->lfname) { - WCHAR w, *lfn; - - i = 0; p = fno->lfname; - if (dp->sect && fno->lfsize && dp->lfn_idx != 0xFFFF) { /* Get LFN if available */ - lfn = dp->lfn; - while ((w = *lfn++) != 0) { /* Get an LFN character */ -#if !_LFN_UNICODE - w = ff_convert(w, 0); /* Unicode -> OEM */ - if (!w) { i = 0; break; } /* No LFN if it could not be converted */ - if (_DF1S && w >= 0x100) /* Put 1st byte if it is a DBC (always false on SBCS cfg) */ - p[i++] = (TCHAR)(w >> 8); -#endif - if (i >= fno->lfsize - 1) { i = 0; break; } /* No LFN if buffer overflow */ - p[i++] = (TCHAR)w; - } - } - p[i] = 0; /* Terminate LFN string by a \0 */ - } -#endif -} -#endif /* _FS_MINIMIZE <= 1 || _FS_RPATH >= 2*/ - - - - -/*-----------------------------------------------------------------------*/ -/* Pick a segment and create the object name in directory form */ -/*-----------------------------------------------------------------------*/ - -static -FRESULT create_name ( - DIR* dp, /* Pointer to the directory object */ - const TCHAR** path /* Pointer to pointer to the segment in the path string */ -) -{ -#if _USE_LFN /* LFN configuration */ - BYTE b, cf; - WCHAR w, *lfn; - UINT i, ni, si, di; - const TCHAR *p; - - /* Create LFN in Unicode */ - for (p = *path; *p == '/' || *p == '\\'; p++) ; /* Strip duplicated separator */ - lfn = dp->lfn; - si = di = 0; - for (;;) { - w = p[si++]; /* Get a character */ - if (w < ' ' || w == '/' || w == '\\') break; /* Break on end of segment */ - if (di >= _MAX_LFN) /* Reject too long name */ - return FR_INVALID_NAME; -#if !_LFN_UNICODE - w &= 0xFF; -#if _DF1E // modified for remove compile warning - if (IsDBCS1(w)) { /* Check if it is a DBC 1st byte (always false on SBCS cfg) */ - b = (BYTE)p[si++]; /* Get 2nd byte */ - if (!IsDBCS2(b)) - return FR_INVALID_NAME; /* Reject invalid sequence */ - w = (w << 8) + b; /* Create a DBC */ - } -#endif - w = ff_convert(w, 1); /* Convert ANSI/OEM to Unicode */ - if (!w) return FR_INVALID_NAME; /* Reject invalid code */ -#endif - if (w < 0x80 && chk_chr("\"*:<>\?|\x7F", w)) /* Reject illegal characters for LFN */ - return FR_INVALID_NAME; - lfn[di++] = w; /* Store the Unicode character */ - } - *path = &p[si]; /* Return pointer to the next segment */ - cf = (w < ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */ -#if _FS_RPATH - if ((di == 1 && lfn[di-1] == '.') || /* Is this a dot entry? */ - (di == 2 && lfn[di-1] == '.' && lfn[di-2] == '.')) { - lfn[di] = 0; - for (i = 0; i < 11; i++) - dp->fn[i] = (i < di) ? '.' : ' '; - dp->fn[i] = cf | NS_DOT; /* This is a dot entry */ - return FR_OK; - } -#endif - while (di) { /* Strip trailing spaces and dots */ - w = lfn[di-1]; - if (w != ' ' && w != '.') break; - di--; - } - if (!di) return FR_INVALID_NAME; /* Reject nul string */ - - lfn[di] = 0; /* LFN is created */ - - /* Create SFN in directory form */ - mem_set(dp->fn, ' ', 11); - for (si = 0; lfn[si] == ' ' || lfn[si] == '.'; si++) ; /* Strip leading spaces and dots */ - if (si) cf |= NS_LOSS | NS_LFN; - while (di && lfn[di - 1] != '.') di--; /* Find extension (di<=si: no extension) */ - - b = i = 0; ni = 8; - for (;;) { - w = lfn[si++]; /* Get an LFN character */ - if (!w) break; /* Break on end of the LFN */ - if (w == ' ' || (w == '.' && si != di)) { /* Remove spaces and dots */ - cf |= NS_LOSS | NS_LFN; continue; - } - - if (i >= ni || si == di) { /* Extension or end of SFN */ - if (ni == 11) { /* Long extension */ - cf |= NS_LOSS | NS_LFN; break; - } - if (si != di) cf |= NS_LOSS | NS_LFN; /* Out of 8.3 format */ - if (si > di) break; /* No extension */ - si = di; i = 8; ni = 11; /* Enter extension section */ - b <<= 2; continue; - } - - if (w >= 0x80) { /* Non ASCII character */ -#ifdef _EXCVT - w = ff_convert(w, 0); /* Unicode -> OEM code */ - if (w) w = ExCvt[w - 0x80]; /* Convert extended character to upper (SBCS) */ -#else - w = ff_convert(ff_wtoupper(w), 0); /* Upper converted Unicode -> OEM code */ -#endif - cf |= NS_LFN; /* Force create LFN entry */ - } - - if (_DF1S && w >= 0x100) { /* Double byte character (always false on SBCS cfg) */ - if (i >= ni - 1) { - cf |= NS_LOSS | NS_LFN; i = ni; continue; - } - dp->fn[i++] = (BYTE)(w >> 8); - } else { /* Single byte character */ - if (!w || chk_chr("+,;=[]", w)) { /* Replace illegal characters for SFN */ - w = '_'; cf |= NS_LOSS | NS_LFN;/* Lossy conversion */ - } else { - if (IsUpper(w)) { /* ASCII large capital */ - b |= 2; - } else { - if (IsLower(w)) { /* ASCII small capital */ - b |= 1; w -= 0x20; - } - } - } - } - dp->fn[i++] = (BYTE)w; - } - - if (dp->fn[0] == DDE) dp->fn[0] = NDDE; /* If the first character collides with deleted mark, replace it with 0x05 */ - - if (ni == 8) b <<= 2; - if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) /* Create LFN entry when there are composite capitals */ - cf |= NS_LFN; - if (!(cf & NS_LFN)) { /* When LFN is in 8.3 format without extended character, NT flags are created */ - if ((b & 0x03) == 0x01) cf |= NS_EXT; /* NT flag (Extension has only small capital) */ - if ((b & 0x0C) == 0x04) cf |= NS_BODY; /* NT flag (Filename has only small capital) */ - } - - dp->fn[NS] = cf; /* SFN is created */ - - return FR_OK; - - -#else /* Non-LFN configuration */ - BYTE b, c, d, *sfn; - UINT ni, si, i; - const char *p; - - /* Create file name in directory form */ - for (p = *path; *p == '/' || *p == '\\'; p++) ; /* Strip duplicated separator */ - sfn = dp->fn; - mem_set(sfn, ' ', 11); - si = i = b = 0; ni = 8; -#if _FS_RPATH - if (p[si] == '.') { /* Is this a dot entry? */ - for (;;) { - c = (BYTE)p[si++]; - if (c != '.' || si >= 3) break; - sfn[i++] = c; - } - if (c != '/' && c != '\\' && c > ' ') return FR_INVALID_NAME; - *path = &p[si]; /* Return pointer to the next segment */ - sfn[NS] = (c <= ' ') ? NS_LAST | NS_DOT : NS_DOT; /* Set last segment flag if end of path */ - return FR_OK; - } -#endif - for (;;) { - c = (BYTE)p[si++]; - if (c <= ' ' || c == '/' || c == '\\') break; /* Break on end of segment */ - if (c == '.' || i >= ni) { - if (ni != 8 || c != '.') return FR_INVALID_NAME; - i = 8; ni = 11; - b <<= 2; continue; - } - if (c >= 0x80) { /* Extended character? */ - b |= 3; /* Eliminate NT flag */ -#ifdef _EXCVT - c = ExCvt[c - 0x80]; /* To upper extended characters (SBCS cfg) */ -#else -#if !_DF1S - return FR_INVALID_NAME; /* Reject extended characters (ASCII cfg) */ -#endif -#endif - } - if (IsDBCS1(c)) { /* Check if it is a DBC 1st byte (always false on SBCS cfg) */ - d = (BYTE)p[si++]; /* Get 2nd byte */ - if (!IsDBCS2(d) || i >= ni - 1) /* Reject invalid DBC */ - return FR_INVALID_NAME; - sfn[i++] = c; - sfn[i++] = d; - } else { /* Single byte code */ - if (chk_chr("\"*+,:;<=>\?[]|\x7F", c)) /* Reject illegal chrs for SFN */ - return FR_INVALID_NAME; - if (IsUpper(c)) { /* ASCII large capital? */ - b |= 2; - } else { - if (IsLower(c)) { /* ASCII small capital? */ - b |= 1; c -= 0x20; - } - } - sfn[i++] = c; - } - } - *path = &p[si]; /* Return pointer to the next segment */ - c = (c <= ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */ - - if (!i) return FR_INVALID_NAME; /* Reject nul string */ - if (sfn[0] == DDE) sfn[0] = NDDE; /* When first character collides with DDE, replace it with 0x05 */ - - if (ni == 8) b <<= 2; - if ((b & 0x03) == 0x01) c |= NS_EXT; /* NT flag (Name extension has only small capital) */ - if ((b & 0x0C) == 0x04) c |= NS_BODY; /* NT flag (Name body has only small capital) */ - - sfn[NS] = c; /* Store NT flag, File name is created */ - - return FR_OK; -#endif -} - - - - -/*-----------------------------------------------------------------------*/ -/* Follow a file path */ -/*-----------------------------------------------------------------------*/ - -static -FRESULT follow_path ( /* FR_OK(0): successful, !=0: error code */ - DIR* dp, /* Directory object to return last directory and found object */ - const TCHAR* path /* Full-path string to find a file or directory */ -) -{ - FRESULT res; - BYTE *dir, ns; - - -#if _FS_RPATH - if (*path == '/' || *path == '\\') { /* There is a heading separator */ - path++; dp->sclust = 0; /* Strip it and start from the root directory */ - } else { /* No heading separator */ - dp->sclust = dp->fs->cdir; /* Start from the current directory */ - } -#else - if (*path == '/' || *path == '\\') /* Strip heading separator if exist */ - path++; - dp->sclust = 0; /* Always start from the root directory */ -#endif - - if ((UINT)*path < ' ') { /* Null path name is the origin directory itself */ - res = dir_sdi(dp, 0); - dp->dir = 0; - } else { /* Follow path */ - for (;;) { - res = create_name(dp, &path); /* Get a segment name of the path */ - if (res != FR_OK) break; - - res = dir_find(dp); /* Find an object with the sagment name */ - ns = dp->fn[NS]; - if (res != FR_OK) { /* Failed to find the object */ - if (res == FR_NO_FILE) { /* Object is not found */ - if (_FS_RPATH && (ns & NS_DOT)) { /* If dot entry is not exist, */ - dp->sclust = 0; dp->dir = 0; /* it is the root directory and stay there */ - if (!(ns & NS_LAST)) continue; /* Continue to follow if not last segment */ - res = FR_OK; /* Ended at the root directroy. Function completed. */ - } else { /* Could not find the object */ - if (!(ns & NS_LAST)) res = FR_NO_PATH; /* Adjust error code if not last segment */ - } - } - break; - } - if (ns & NS_LAST) break; /* Last segment matched. Function completed. */ - dir = dp->dir; /* Follow the sub-directory */ - if (!(dir[DIR_Attr] & AM_DIR)) { /* It is not a sub-directory and cannot follow */ - res = FR_NO_PATH; break; - } - dp->sclust = ld_clust(dp->fs, dir); - } - } - - return res; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Get logical drive number from path name */ -/*-----------------------------------------------------------------------*/ - -static -int get_ldnumber ( /* Returns logical drive number (-1:invalid drive) */ - const TCHAR** path /* Pointer to pointer to the path name */ -) -{ - const TCHAR *tp, *tt; - UINT i; - int vol = -1; - - - if (*path) { /* If the pointer is not a null */ - for (tt = *path; (UINT)*tt >= (_USE_LFN ? ' ' : '!') && *tt != ':'; tt++) ; /* Find ':' in the path */ - if (*tt == ':') { /* If a ':' is exist in the path name */ - tp = *path; - i = *tp++ - '0'; - if (i < 10 && tp == tt) { /* Is there a numeric drive id? */ - if (i < _VOLUMES) { /* If a drive id is found, get the value and strip it */ - vol = (int)i; - *path = ++tt; - } - } else { /* No numeric drive number */ -#if _STR_VOLUME_ID /* Find string drive id */ - static const char* const str[] = {_VOLUME_STRS}; - const char *sp; - char c; - TCHAR tc; - - i = 0; tt++; - do { - sp = str[i]; tp = *path; - do { /* Compare a string drive id with path name */ - c = *sp++; tc = *tp++; - if (IsLower(tc)) tc -= 0x20; - } while (c && (TCHAR)c == tc); - } while ((c || tp != tt) && ++i < _VOLUMES); /* Repeat for each id until pattern match */ - if (i < _VOLUMES) { /* If a drive id is found, get the value and strip it */ - vol = (int)i; - *path = tt; - } -#endif - } - return vol; - } -#if _FS_RPATH && _VOLUMES >= 2 - vol = CurrVol; /* Current drive */ -#else - vol = 0; /* Drive 0 */ -#endif - } - return vol; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Load a sector and check if it is an FAT boot sector */ -/*-----------------------------------------------------------------------*/ - -static -BYTE check_fs ( /* 0:FAT boor sector, 1:Valid boor sector but not FAT, 2:Not a boot sector, 3:Disk error */ - FATFS* fs, /* File system object */ - DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */ -) -{ - fs->wflag = 0; fs->winsect = 0xFFFFFFFF; /* Invaidate window */ - if (move_window(fs, sect) != FR_OK) /* Load boot record */ - return 3; - - if (LD_WORD(&fs->win[BS_55AA]) != 0xAA55) /* Check boot record signature (always placed at offset 510 even if the sector size is >512) */ - return 2; - - if ((LD_DWORD(&fs->win[BS_FilSysType]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ - return 0; - if ((LD_DWORD(&fs->win[BS_FilSysType32]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ - return 0; - - return 1; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Find logical drive and check if the volume is mounted */ -/*-----------------------------------------------------------------------*/ - -static -FRESULT find_volume ( /* FR_OK(0): successful, !=0: any error occurred */ - FATFS** rfs, /* Pointer to pointer to the found file system object */ - const TCHAR** path, /* Pointer to pointer to the path name (drive number) */ - BYTE wmode /* !=0: Check write protection for write access */ -) -{ - BYTE fmt; - int vol; - DSTATUS stat; - DWORD bsect, fasize, tsect, sysect, nclst, szbfat; - WORD nrsv; - FATFS *fs; - - - /* Get logical drive number from the path name */ - *rfs = 0; - vol = get_ldnumber(path); - if (vol < 0) return FR_INVALID_DRIVE; - - /* Check if the file system object is valid or not */ - fs = FatFs[vol]; /* Get pointer to the file system object */ - if (!fs) return FR_NOT_ENABLED; /* Is the file system object available? */ - - ENTER_FF(fs); /* Lock the volume */ - *rfs = fs; /* Return pointer to the file system object */ - - if (fs->fs_type) { /* If the volume has been mounted */ - stat = disk_status(fs->drv); - if (!(stat & STA_NOINIT)) { /* and the physical drive is kept initialized */ - if (!_FS_READONLY && wmode && (stat & STA_PROTECT)) /* Check write protection if needed */ - return FR_WRITE_PROTECTED; - return FR_OK; /* The file system object is valid */ - } - } - - /* The file system object is not valid. */ - /* Following code attempts to mount the volume. (analyze BPB and initialize the fs object) */ - - fs->fs_type = 0; /* Clear the file system object */ - fs->drv = LD2PD(vol); /* Bind the logical drive and a physical drive */ - stat = disk_initialize(fs->drv); /* Initialize the physical drive */ - if (stat & STA_NOINIT) /* Check if the initialization succeeded */ - return FR_NOT_READY; /* Failed to initialize due to no medium or hard error */ - if (!_FS_READONLY && wmode && (stat & STA_PROTECT)) /* Check disk write protection if needed */ - return FR_WRITE_PROTECTED; -#if _MAX_SS != _MIN_SS /* Get sector size (multiple sector size cfg only) */ - if (disk_ioctl(fs->drv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK - || SS(fs) < _MIN_SS || SS(fs) > _MAX_SS) return FR_DISK_ERR; -#endif - /* Find an FAT partition on the drive. Supports only generic partitioning, FDISK and SFD. */ - bsect = 0; - fmt = check_fs(fs, bsect); /* Load sector 0 and check if it is an FAT boot sector as SFD */ - if (fmt == 1 || (!fmt && (LD2PT(vol)))) { /* Not an FAT boot sector or forced partition number */ - UINT i; - DWORD br[4]; - - for (i = 0; i < 4; i++) { /* Get partition offset */ - BYTE *pt = fs->win+MBR_Table + i * SZ_PTE; - br[i] = pt[4] ? LD_DWORD(&pt[8]) : 0; - } - i = LD2PT(vol); /* Partition number: 0:auto, 1-4:forced */ - if (i) i--; - do { /* Find an FAT volume */ - bsect = br[i]; - fmt = bsect ? check_fs(fs, bsect) : 2; /* Check the partition */ - } while (!LD2PT(vol) && fmt && ++i < 4); - } - if (fmt == 3) return FR_DISK_ERR; /* An error occured in the disk I/O layer */ - if (fmt) return FR_NO_FILESYSTEM; /* No FAT volume is found */ - - /* An FAT volume is found. Following code initializes the file system object */ - - if (LD_WORD(fs->win+BPB_BytsPerSec) != SS(fs)) /* (BPB_BytsPerSec must be equal to the physical sector size) */ - return FR_NO_FILESYSTEM; - - fasize = LD_WORD(fs->win+BPB_FATSz16); /* Number of sectors per FAT */ - if (!fasize) fasize = LD_DWORD(fs->win+BPB_FATSz32); - fs->fsize = fasize; - - fs->n_fats = fs->win[BPB_NumFATs]; /* Number of FAT copies */ - if (fs->n_fats != 1 && fs->n_fats != 2) /* (Must be 1 or 2) */ - return FR_NO_FILESYSTEM; - fasize *= fs->n_fats; /* Number of sectors for FAT area */ - - fs->csize = fs->win[BPB_SecPerClus]; /* Number of sectors per cluster */ - if (!fs->csize || (fs->csize & (fs->csize - 1))) /* (Must be power of 2) */ - return FR_NO_FILESYSTEM; - - fs->n_rootdir = LD_WORD(fs->win+BPB_RootEntCnt); /* Number of root directory entries */ - if (fs->n_rootdir % (SS(fs) / SZ_DIR)) /* (Must be sector aligned) */ - return FR_NO_FILESYSTEM; - - tsect = LD_WORD(fs->win+BPB_TotSec16); /* Number of sectors on the volume */ - if (!tsect) tsect = LD_DWORD(fs->win+BPB_TotSec32); - - nrsv = LD_WORD(fs->win+BPB_RsvdSecCnt); /* Number of reserved sectors */ - if (!nrsv) return FR_NO_FILESYSTEM; /* (Must not be 0) */ - - /* Determine the FAT sub type */ - sysect = nrsv + fasize + fs->n_rootdir / (SS(fs) / SZ_DIR); /* RSV+FAT+DIR */ - if (tsect < sysect) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ - nclst = (tsect - sysect) / fs->csize; /* Number of clusters */ - if (!nclst) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ - fmt = FS_FAT12; - if (nclst >= MIN_FAT16) fmt = FS_FAT16; - if (nclst >= MIN_FAT32) fmt = FS_FAT32; - - /* Boundaries and Limits */ - fs->n_fatent = nclst + 2; /* Number of FAT entries */ - fs->volbase = bsect; /* Volume start sector */ - fs->fatbase = bsect + nrsv; /* FAT start sector */ - fs->database = bsect + sysect; /* Data start sector */ - if (fmt == FS_FAT32) { - if (fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be 0) */ - fs->dirbase = LD_DWORD(fs->win+BPB_RootClus); /* Root directory start cluster */ - szbfat = fs->n_fatent * 4; /* (Needed FAT size) */ - } else { - if (!fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must not be 0) */ - fs->dirbase = fs->fatbase + fasize; /* Root directory start sector */ - szbfat = (fmt == FS_FAT16) ? /* (Needed FAT size) */ - fs->n_fatent * 2 : fs->n_fatent * 3 / 2 + (fs->n_fatent & 1); - } - if (fs->fsize < (szbfat + (SS(fs) - 1)) / SS(fs)) /* (BPB_FATSz must not be less than needed) */ - return FR_NO_FILESYSTEM; - -#if !_FS_READONLY - /* Initialize cluster allocation information */ - fs->last_clust = fs->free_clust = 0xFFFFFFFF; - - /* Get fsinfo if available */ - fs->fsi_flag = 0x80; -#if (_FS_NOFSINFO & 3) != 3 - if (fmt == FS_FAT32 /* Enable FSINFO only if FAT32 and BPB_FSInfo is 1 */ - && LD_WORD(fs->win+BPB_FSInfo) == 1 - && move_window(fs, bsect + 1) == FR_OK) - { - fs->fsi_flag = 0; - if (LD_WORD(fs->win+BS_55AA) == 0xAA55 /* Load FSINFO data if available */ - && LD_DWORD(fs->win+FSI_LeadSig) == 0x41615252 - && LD_DWORD(fs->win+FSI_StrucSig) == 0x61417272) - { -#if (_FS_NOFSINFO & 1) == 0 - fs->free_clust = LD_DWORD(fs->win+FSI_Free_Count); -#endif -#if (_FS_NOFSINFO & 2) == 0 - fs->last_clust = LD_DWORD(fs->win+FSI_Nxt_Free); -#endif - } - } -#endif -#endif - fs->fs_type = fmt; /* FAT sub-type */ - fs->id = ++Fsid; /* File system mount ID */ -#if _FS_RPATH - fs->cdir = 0; /* Set current directory to root */ -#endif -#if _FS_LOCK /* Clear file lock semaphores */ - clear_lock(fs); -#endif - - return FR_OK; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Check if the file/directory object is valid or not */ -/*-----------------------------------------------------------------------*/ - -static -FRESULT validate ( /* FR_OK(0): The object is valid, !=0: Invalid */ - void* obj /* Pointer to the object FIL/DIR to check validity */ -) -{ - FIL *fil = (FIL*)obj; /* Assuming offset of .fs and .id in the FIL/DIR structure is identical */ - - - if (!fil || !fil->fs || !fil->fs->fs_type || fil->fs->id != fil->id) - return FR_INVALID_OBJECT; - - ENTER_FF(fil->fs); /* Lock file system */ - - if (disk_status(fil->fs->drv) & STA_NOINIT) - return FR_NOT_READY; - - return FR_OK; -} - - - - -/*-------------------------------------------------------------------------- - - Public Functions - ---------------------------------------------------------------------------*/ - - - -/*-----------------------------------------------------------------------*/ -/* Mount/Unmount a Logical Drive */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_mount ( - FATFS* fs, /* Pointer to the file system object (NULL:unmount)*/ - const TCHAR* path, /* Logical drive number to be mounted/unmounted */ - BYTE opt /* 0:Do not mount (delayed mount), 1:Mount immediately */ -) -{ - FATFS *cfs; - int vol; - FRESULT res; - const TCHAR *rp = path; - - - vol = get_ldnumber(&rp); - if (vol < 0) return FR_INVALID_DRIVE; - cfs = FatFs[vol]; /* Pointer to fs object */ - - if (cfs) { -#if _FS_LOCK - clear_lock(cfs); -#endif -#if _FS_REENTRANT /* Discard sync object of the current volume */ - if (!ff_del_syncobj(cfs->sobj)) return FR_INT_ERR; -#endif - cfs->fs_type = 0; /* Clear old fs object */ - } - - if (fs) { - fs->fs_type = 0; /* Clear new fs object */ -#if _FS_REENTRANT /* Create sync object for the new volume */ - if (!ff_cre_syncobj((BYTE)vol, &fs->sobj)) return FR_INT_ERR; -#endif - } - FatFs[vol] = fs; /* Register new fs object */ - - if (!fs || opt != 1) return FR_OK; /* Do not mount now, it will be mounted later */ - - res = find_volume(&fs, &path, 0); /* Force mounted the volume */ - LEAVE_FF(fs, res); -} - - - - -/*-----------------------------------------------------------------------*/ -/* Open or Create a File */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_open ( - FIL* fp, /* Pointer to the blank file object */ - const TCHAR* path, /* Pointer to the file name */ - BYTE mode /* Access mode and file open mode flags */ -) -{ - FRESULT res; - DIR dj; - BYTE *dir; - DEF_NAMEBUF; - - - if (!fp) return FR_INVALID_OBJECT; - fp->fs = 0; /* Clear file object */ - - /* Get logical drive number */ -#if !_FS_READONLY - mode &= FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW; - res = find_volume(&dj.fs, &path, (BYTE)(mode & ~FA_READ)); -#else - mode &= FA_READ; - res = find_volume(&dj.fs, &path, 0); -#endif - if (res == FR_OK) { - INIT_BUF(dj); - res = follow_path(&dj, path); /* Follow the file path */ - dir = dj.dir; -#if !_FS_READONLY /* R/W configuration */ - if (res == FR_OK) { - if (!dir) /* Default directory itself */ - res = FR_INVALID_NAME; -#if _FS_LOCK - else - res = chk_lock(&dj, (mode & ~FA_READ) ? 1 : 0); -#endif - } - /* Create or Open a file */ - if (mode & (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) { - DWORD dw, cl; - - if (res != FR_OK) { /* No file, create new */ - if (res == FR_NO_FILE) /* There is no file to open, create a new entry */ -#if _FS_LOCK - res = enq_lock() ? dir_register(&dj) : FR_TOO_MANY_OPEN_FILES; -#else - res = dir_register(&dj); -#endif - mode |= FA_CREATE_ALWAYS; /* File is created */ - dir = dj.dir; /* New entry */ - } - else { /* Any object is already existing */ - if (dir[DIR_Attr] & (AM_RDO | AM_DIR)) { /* Cannot overwrite it (R/O or DIR) */ - res = FR_DENIED; - } else { - if (mode & FA_CREATE_NEW) /* Cannot create as new file */ - res = FR_EXIST; - } - } - if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate it if overwrite mode */ - dw = get_fattime(); /* Created time */ - ST_DWORD(dir+DIR_CrtTime, dw); - dir[DIR_Attr] = 0; /* Reset attribute */ - ST_DWORD(dir+DIR_FileSize, 0); /* size = 0 */ - cl = ld_clust(dj.fs, dir); /* Get start cluster */ - st_clust(dir, 0); /* cluster = 0 */ - dj.fs->wflag = 1; - if (cl) { /* Remove the cluster chain if exist */ - dw = dj.fs->winsect; - res = remove_chain(dj.fs, cl); - if (res == FR_OK) { - dj.fs->last_clust = cl - 1; /* Reuse the cluster hole */ - res = move_window(dj.fs, dw); - } - } - } - } - else { /* Open an existing file */ - if (res == FR_OK) { /* Follow succeeded */ - if (dir[DIR_Attr] & AM_DIR) { /* It is a directory */ - res = FR_NO_FILE; - } else { - if ((mode & FA_WRITE) && (dir[DIR_Attr] & AM_RDO)) /* R/O violation */ - res = FR_DENIED; - } - } - } - if (res == FR_OK) { - if (mode & FA_CREATE_ALWAYS) /* Set file change flag if created or overwritten */ - mode |= FA__WRITTEN; - fp->dir_sect = dj.fs->winsect; /* Pointer to the directory entry */ - fp->dir_ptr = dir; -#if _FS_LOCK - fp->lockid = inc_lock(&dj, (mode & ~FA_READ) ? 1 : 0); - if (!fp->lockid) res = FR_INT_ERR; -#endif - } - -#else /* R/O configuration */ - if (res == FR_OK) { /* Follow succeeded */ - dir = dj.dir; - if (!dir) { /* Current directory itself */ - res = FR_INVALID_NAME; - } else { - if (dir[DIR_Attr] & AM_DIR) /* It is a directory */ - res = FR_NO_FILE; - } - } -#endif - FREE_BUF(); - - if (res == FR_OK) { - fp->flag = mode; /* File access mode */ - fp->err = 0; /* Clear error flag */ - fp->sclust = ld_clust(dj.fs, dir); /* File start cluster */ - fp->fsize = LD_DWORD(dir+DIR_FileSize); /* File size */ - fp->fptr = 0; /* File pointer */ - fp->dsect = 0; -#if _USE_FASTSEEK - fp->cltbl = 0; /* Normal seek mode */ -#endif - fp->fs = dj.fs; /* Validate file object */ - fp->id = fp->fs->id; - } - } - - LEAVE_FF(dj.fs, res); -} - - - - -/*-----------------------------------------------------------------------*/ -/* Read File */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_read ( - FIL* fp, /* Pointer to the file object */ - void* buff, /* Pointer to data buffer */ - UINT btr, /* Number of bytes to read */ - UINT* br /* Pointer to number of bytes read */ -) -{ - FRESULT res; - DWORD clst, sect, remain; - UINT rcnt, cc; - BYTE csect, *rbuff = (BYTE*)buff; - - *br = 0; /* Clear read byte counter */ - - res = validate(fp); /* Check validity */ - if (res != FR_OK) LEAVE_FF(fp->fs, res); - if (fp->err) /* Check error */ - LEAVE_FF(fp->fs, (FRESULT)fp->err); - if (!(fp->flag & FA_READ)) /* Check access mode */ - LEAVE_FF(fp->fs, FR_DENIED); - remain = fp->fsize - fp->fptr; - if (btr > remain) btr = (UINT)remain; /* Truncate btr by remaining bytes */ - - for ( ; btr; /* Repeat until all data read */ - rbuff += rcnt, fp->fptr += rcnt, *br += rcnt, btr -= rcnt) { - if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ - csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ - if (!csect) { /* On the cluster boundary? */ - if (fp->fptr == 0) { /* On the top of the file? */ - clst = fp->sclust; /* Follow from the origin */ - } else { /* Middle or end of the file */ -#if _USE_FASTSEEK - if (fp->cltbl) - clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */ - else -#endif - clst = get_fat(fp->fs, fp->clust); /* Follow cluster chain on the FAT */ - } - if (clst < 2) ABORT(fp->fs, FR_INT_ERR); - if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); - fp->clust = clst; /* Update current cluster */ - } - sect = clust2sect(fp->fs, fp->clust); /* Get current sector */ - if (!sect) ABORT(fp->fs, FR_INT_ERR); - sect += csect; - cc = btr / SS(fp->fs); /* When remaining bytes >= sector size, */ - if (cc) { /* Read maximum contiguous sectors directly */ - if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ - cc = fp->fs->csize - csect; - if (disk_read(fp->fs->drv, rbuff, sect, cc)) - ABORT(fp->fs, FR_DISK_ERR); -#if !_FS_READONLY && _FS_MINIMIZE <= 2 /* Replace one of the read sectors with cached data if it contains a dirty sector */ -#if _FS_TINY - if (fp->fs->wflag && fp->fs->winsect - sect < cc) - mem_cpy(rbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), fp->fs->win, SS(fp->fs)); -#else - if ((fp->flag & FA__DIRTY) && fp->dsect - sect < cc) - mem_cpy(rbuff + ((fp->dsect - sect) * SS(fp->fs)), fp->buf, SS(fp->fs)); -#endif -#endif - rcnt = SS(fp->fs) * cc; /* Number of bytes transferred */ - continue; - } -#if !_FS_TINY - if (fp->dsect != sect) { /* Load data sector if not in cache */ -#if !_FS_READONLY - if (fp->flag & FA__DIRTY) { /* Write-back dirty sector cache */ - if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1)) - ABORT(fp->fs, FR_DISK_ERR); - fp->flag &= ~FA__DIRTY; - } -#endif - if (disk_read(fp->fs->drv, fp->buf, sect, 1)) /* Fill sector cache */ - ABORT(fp->fs, FR_DISK_ERR); - } -#endif - fp->dsect = sect; - } - rcnt = SS(fp->fs) - ((UINT)fp->fptr % SS(fp->fs)); /* Get partial sector data from sector buffer */ - if (rcnt > btr) rcnt = btr; -#if _FS_TINY - if (move_window(fp->fs, fp->dsect)) /* Move sector window */ - ABORT(fp->fs, FR_DISK_ERR); - mem_cpy(rbuff, &fp->fs->win[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ -#else - mem_cpy(rbuff, &fp->buf[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ -#endif - } - - LEAVE_FF(fp->fs, FR_OK); -} - - - - -#if !_FS_READONLY -/*-----------------------------------------------------------------------*/ -/* Write File */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_write ( - FIL* fp, /* Pointer to the file object */ - const void *buff, /* Pointer to the data to be written */ - UINT btw, /* Number of bytes to write */ - UINT* bw /* Pointer to number of bytes written */ -) -{ - FRESULT res; - DWORD clst, sect; - UINT wcnt, cc; - const BYTE *wbuff = (const BYTE*)buff; - BYTE csect; - - *bw = 0; /* Clear write byte counter */ - -// rtl_printf("f_write(%p, %p, %d) = %d\n", fp, buff, btw); - - res = validate(fp); /* Check validity */ - if (res != FR_OK) LEAVE_FF(fp->fs, res); - if (fp->err) /* Check error */ - LEAVE_FF(fp->fs, (FRESULT)fp->err); - if (!(fp->flag & FA_WRITE)) /* Check access mode */ - LEAVE_FF(fp->fs, FR_DENIED); - if (fp->fptr + btw < fp->fptr) btw = 0; /* File size cannot reach 4GB */ - - for ( ; btw; /* Repeat until all data written */ - wbuff += wcnt, fp->fptr += wcnt, *bw += wcnt, btw -= wcnt) { - if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ - csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ - if (!csect) { /* On the cluster boundary? */ - if (fp->fptr == 0) { /* On the top of the file? */ - clst = fp->sclust; /* Follow from the origin */ - if (clst == 0) /* When no cluster is allocated, */ - clst = create_chain(fp->fs, 0); /* Create a new cluster chain */ - } else { /* Middle or end of the file */ -#if _USE_FASTSEEK - if (fp->cltbl) - clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */ - else -#endif - clst = create_chain(fp->fs, fp->clust); /* Follow or stretch cluster chain on the FAT */ - } - if (clst == 0) break; /* Could not allocate a new cluster (disk full) */ - if (clst == 1) ABORT(fp->fs, FR_INT_ERR); - if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); - fp->clust = clst; /* Update current cluster */ - if (fp->sclust == 0) fp->sclust = clst; /* Set start cluster if the first write */ - } -#if _FS_TINY - if (fp->fs->winsect == fp->dsect && sync_window(fp->fs)) /* Write-back sector cache */ - ABORT(fp->fs, FR_DISK_ERR); -#else - if (fp->flag & FA__DIRTY) { /* Write-back sector cache */ - if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1)) - ABORT(fp->fs, FR_DISK_ERR); - fp->flag &= ~FA__DIRTY; - } -#endif - sect = clust2sect(fp->fs, fp->clust); /* Get current sector */ - if (!sect) ABORT(fp->fs, FR_INT_ERR); - sect += csect; - cc = btw / SS(fp->fs); /* When remaining bytes >= sector size, */ - if (cc) { /* Write maximum contiguous sectors directly */ - if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ - cc = fp->fs->csize - csect; - if (disk_write(fp->fs->drv, wbuff, sect, cc)) - ABORT(fp->fs, FR_DISK_ERR); -#if _FS_MINIMIZE <= 2 -#if _FS_TINY - if (fp->fs->winsect - sect < cc) { /* Refill sector cache if it gets invalidated by the direct write */ - mem_cpy(fp->fs->win, wbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), SS(fp->fs)); - fp->fs->wflag = 0; - } -#else - if (fp->dsect - sect < cc) { /* Refill sector cache if it gets invalidated by the direct write */ - mem_cpy(fp->buf, wbuff + ((fp->dsect - sect) * SS(fp->fs)), SS(fp->fs)); - fp->flag &= ~FA__DIRTY; - } -#endif -#endif - wcnt = SS(fp->fs) * cc; /* Number of bytes transferred */ - continue; - } -#if _FS_TINY - if (fp->fptr >= fp->fsize) { /* Avoid silly cache filling at growing edge */ - if (sync_window(fp->fs)) ABORT(fp->fs, FR_DISK_ERR); - fp->fs->winsect = sect; - } -#else - if (fp->dsect != sect) { /* Fill sector cache with file data */ - if (fp->fptr < fp->fsize && - disk_read(fp->fs->drv, fp->buf, sect, 1)) - ABORT(fp->fs, FR_DISK_ERR); - } -#endif - fp->dsect = sect; - } - wcnt = SS(fp->fs) - ((UINT)fp->fptr % SS(fp->fs));/* Put partial sector into file I/O buffer */ - if (wcnt > btw) wcnt = btw; -#if _FS_TINY - if (move_window(fp->fs, fp->dsect)) /* Move sector window */ - ABORT(fp->fs, FR_DISK_ERR); - mem_cpy(&fp->fs->win[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */ - fp->fs->wflag = 1; -#else - mem_cpy(&fp->buf[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */ - fp->flag |= FA__DIRTY; -#endif - } - - if (fp->fptr > fp->fsize) fp->fsize = fp->fptr; /* Update file size if needed */ - fp->flag |= FA__WRITTEN; /* Set file change flag */ - - LEAVE_FF(fp->fs, FR_OK); -} - - -/*-----------------------------------------------------------------------*/ -/* Synchronize the File */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_sync ( - FIL* fp /* Pointer to the file object */ -) -{ - FRESULT res; - DWORD tm; - BYTE *dir; - - - res = validate(fp); /* Check validity of the object */ - if (res == FR_OK) { - if (fp->flag & FA__WRITTEN) { /* Has the file been written? */ - /* Write-back dirty buffer */ -#if !_FS_TINY - if (fp->flag & FA__DIRTY) { - if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1)) - LEAVE_FF(fp->fs, FR_DISK_ERR); - fp->flag &= ~FA__DIRTY; - } -#endif - /* Update the directory entry */ - res = move_window(fp->fs, fp->dir_sect); - if (res == FR_OK) { - dir = fp->dir_ptr; - dir[DIR_Attr] |= AM_ARC; /* Set archive bit */ - ST_DWORD(dir+DIR_FileSize, fp->fsize); /* Update file size */ - st_clust(dir, fp->sclust); /* Update start cluster */ - tm = get_fattime(); /* Update updated time */ - ST_DWORD(dir+DIR_WrtTime, tm); - ST_WORD(dir+DIR_LstAccDate, 0); - fp->flag &= ~FA__WRITTEN; - fp->fs->wflag = 1; - res = sync_fs(fp->fs); - } - } - } - - LEAVE_FF(fp->fs, res); -} - -#endif /* !_FS_READONLY */ - - - - -/*-----------------------------------------------------------------------*/ -/* Close File */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_close ( - FIL *fp /* Pointer to the file object to be closed */ -) -{ - FRESULT res; - - -#if !_FS_READONLY - res = f_sync(fp); /* Flush cached data */ - if (res == FR_OK) -#endif - { - res = validate(fp); /* Lock volume */ - if (res == FR_OK) { -#if _FS_REENTRANT - FATFS *fs = fp->fs; -#endif -#if _FS_LOCK - res = dec_lock(fp->lockid); /* Decrement file open counter */ - if (res == FR_OK) -#endif - fp->fs = 0; /* Invalidate file object */ -#if _FS_REENTRANT - unlock_fs(fs, FR_OK); /* Unlock volume */ -#endif - } - } - return res; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Change Current Directory or Current Drive, Get Current Directory */ -/*-----------------------------------------------------------------------*/ - -#if _FS_RPATH >= 1 -#if _VOLUMES >= 2 -FRESULT f_chdrive ( - const TCHAR* path /* Drive number */ -) -{ - int vol; - - - vol = get_ldnumber(&path); - if (vol < 0) return FR_INVALID_DRIVE; - - CurrVol = (BYTE)vol; - - return FR_OK; -} -#endif - - -FRESULT f_chdir ( - const TCHAR* path /* Pointer to the directory path */ -) -{ - FRESULT res; - DIR dj; - DEF_NAMEBUF; - - - /* Get logical drive number */ - res = find_volume(&dj.fs, &path, 0); - if (res == FR_OK) { - INIT_BUF(dj); - res = follow_path(&dj, path); /* Follow the path */ - FREE_BUF(); - if (res == FR_OK) { /* Follow completed */ - if (!dj.dir) { - dj.fs->cdir = dj.sclust; /* Start directory itself */ - } else { - if (dj.dir[DIR_Attr] & AM_DIR) /* Reached to the directory */ - dj.fs->cdir = ld_clust(dj.fs, dj.dir); - else - res = FR_NO_PATH; /* Reached but a file */ - } - } - if (res == FR_NO_FILE) res = FR_NO_PATH; - } - - LEAVE_FF(dj.fs, res); -} - - -#if _FS_RPATH >= 2 -FRESULT f_getcwd ( - TCHAR* buff, /* Pointer to the directory path */ - UINT len /* Size of path */ -) -{ - FRESULT res; - DIR dj; - UINT i, n; - DWORD ccl; - TCHAR *tp; - FILINFO fno; - DEF_NAMEBUF; - - - *buff = 0; - /* Get logical drive number */ - res = find_volume(&dj.fs, (const TCHAR**)&buff, 0); /* Get current volume */ - if (res == FR_OK) { - INIT_BUF(dj); - i = len; /* Bottom of buffer (directory stack base) */ - dj.sclust = dj.fs->cdir; /* Start to follow upper directory from current directory */ - while ((ccl = dj.sclust) != 0) { /* Repeat while current directory is a sub-directory */ - res = dir_sdi(&dj, 1); /* Get parent directory */ - if (res != FR_OK) break; - res = dir_read(&dj, 0); - if (res != FR_OK) break; - dj.sclust = ld_clust(dj.fs, dj.dir); /* Goto parent directory */ - res = dir_sdi(&dj, 0); - if (res != FR_OK) break; - do { /* Find the entry links to the child directory */ - res = dir_read(&dj, 0); - if (res != FR_OK) break; - if (ccl == ld_clust(dj.fs, dj.dir)) break; /* Found the entry */ - res = dir_next(&dj, 0); - } while (res == FR_OK); - if (res == FR_NO_FILE) res = FR_INT_ERR;/* It cannot be 'not found'. */ - if (res != FR_OK) break; -#if _USE_LFN - fno.lfname = buff; - fno.lfsize = i; -#endif - get_fileinfo(&dj, &fno); /* Get the directory name and push it to the buffer */ - tp = fno.fname; -#if _USE_LFN - if (*buff) tp = buff; -#endif - for (n = 0; tp[n]; n++) ; - if (i < n + 3) { - res = FR_NOT_ENOUGH_CORE; break; - } - while (n) buff[--i] = tp[--n]; - buff[--i] = '/'; - } - tp = buff; - if (res == FR_OK) { -#if _VOLUMES >= 2 - *tp++ = '0' + CurrVol; /* Put drive number */ - *tp++ = ':'; -#endif - if (i == len) { /* Root-directory */ - *tp++ = '/'; - } else { /* Sub-directroy */ - do /* Add stacked path str */ - *tp++ = buff[i++]; - while (i < len); - } - } - *tp = 0; - FREE_BUF(); - } - - LEAVE_FF(dj.fs, res); -} -#endif /* _FS_RPATH >= 2 */ -#endif /* _FS_RPATH >= 1 */ - - - -#if _FS_MINIMIZE <= 2 -/*-----------------------------------------------------------------------*/ -/* Seek File R/W Pointer */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_lseek ( - FIL* fp, /* Pointer to the file object */ - DWORD ofs /* File pointer from top of file */ -) -{ - FRESULT res; - - - res = validate(fp); /* Check validity of the object */ - if (res != FR_OK) LEAVE_FF(fp->fs, res); - if (fp->err) /* Check error */ - LEAVE_FF(fp->fs, (FRESULT)fp->err); - -#if _USE_FASTSEEK - if (fp->cltbl) { /* Fast seek */ - DWORD cl, pcl, ncl, tcl, dsc, tlen, ulen, *tbl; - - if (ofs == CREATE_LINKMAP) { /* Create CLMT */ - tbl = fp->cltbl; - tlen = *tbl++; ulen = 2; /* Given table size and required table size */ - cl = fp->sclust; /* Top of the chain */ - if (cl) { - do { - /* Get a fragment */ - tcl = cl; ncl = 0; ulen += 2; /* Top, length and used items */ - do { - pcl = cl; ncl++; - cl = get_fat(fp->fs, cl); - if (cl <= 1) ABORT(fp->fs, FR_INT_ERR); - if (cl == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); - } while (cl == pcl + 1); - if (ulen <= tlen) { /* Store the length and top of the fragment */ - *tbl++ = ncl; *tbl++ = tcl; - } - } while (cl < fp->fs->n_fatent); /* Repeat until end of chain */ - } - *fp->cltbl = ulen; /* Number of items used */ - if (ulen <= tlen) - *tbl = 0; /* Terminate table */ - else - res = FR_NOT_ENOUGH_CORE; /* Given table size is smaller than required */ - - } else { /* Fast seek */ - if (ofs > fp->fsize) /* Clip offset at the file size */ - ofs = fp->fsize; - fp->fptr = ofs; /* Set file pointer */ - if (ofs) { - fp->clust = clmt_clust(fp, ofs - 1); - dsc = clust2sect(fp->fs, fp->clust); - if (!dsc) ABORT(fp->fs, FR_INT_ERR); - dsc += (ofs - 1) / SS(fp->fs) & (fp->fs->csize - 1); - if (fp->fptr % SS(fp->fs) && dsc != fp->dsect) { /* Refill sector cache if needed */ -#if !_FS_TINY -#if !_FS_READONLY - if (fp->flag & FA__DIRTY) { /* Write-back dirty sector cache */ - if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1)) - ABORT(fp->fs, FR_DISK_ERR); - fp->flag &= ~FA__DIRTY; - } -#endif - if (disk_read(fp->fs->drv, fp->buf, dsc, 1)) /* Load current sector */ - ABORT(fp->fs, FR_DISK_ERR); -#endif - fp->dsect = dsc; - } - } - } - } else -#endif - - /* Normal Seek */ - { - DWORD clst, bcs, nsect, ifptr; - - if (ofs > fp->fsize /* In read-only mode, clip offset with the file size */ -#if !_FS_READONLY - && !(fp->flag & FA_WRITE) -#endif - ) ofs = fp->fsize; - - ifptr = fp->fptr; - fp->fptr = nsect = 0; - if (ofs) { - bcs = (DWORD)fp->fs->csize * SS(fp->fs); /* Cluster size (byte) */ - if (ifptr > 0 && - (ofs - 1) / bcs >= (ifptr - 1) / bcs) { /* When seek to same or following cluster, */ - fp->fptr = (ifptr - 1) & ~(bcs - 1); /* start from the current cluster */ - ofs -= fp->fptr; - clst = fp->clust; - } else { /* When seek to back cluster, */ - clst = fp->sclust; /* start from the first cluster */ -#if !_FS_READONLY - if (clst == 0) { /* If no cluster chain, create a new chain */ - clst = create_chain(fp->fs, 0); - if (clst == 1) ABORT(fp->fs, FR_INT_ERR); - if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); - fp->sclust = clst; - } -#endif - fp->clust = clst; - } - if (clst != 0) { - while (ofs > bcs) { /* Cluster following loop */ -#if !_FS_READONLY - if (fp->flag & FA_WRITE) { /* Check if in write mode or not */ - clst = create_chain(fp->fs, clst); /* Force stretch if in write mode */ - if (clst == 0) { /* When disk gets full, clip file size */ - ofs = bcs; break; - } - } else -#endif - clst = get_fat(fp->fs, clst); /* Follow cluster chain if not in write mode */ - if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); - if (clst <= 1 || clst >= fp->fs->n_fatent) ABORT(fp->fs, FR_INT_ERR); - fp->clust = clst; - fp->fptr += bcs; - ofs -= bcs; - } - fp->fptr += ofs; - if (ofs % SS(fp->fs)) { - nsect = clust2sect(fp->fs, clst); /* Current sector */ - if (!nsect) ABORT(fp->fs, FR_INT_ERR); - nsect += ofs / SS(fp->fs); - } - } - } - if (fp->fptr % SS(fp->fs) && nsect != fp->dsect) { /* Fill sector cache if needed */ -#if !_FS_TINY -#if !_FS_READONLY - if (fp->flag & FA__DIRTY) { /* Write-back dirty sector cache */ - if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1)) - ABORT(fp->fs, FR_DISK_ERR); - fp->flag &= ~FA__DIRTY; - } -#endif - if (disk_read(fp->fs->drv, fp->buf, nsect, 1)) /* Fill sector cache */ - ABORT(fp->fs, FR_DISK_ERR); -#endif - fp->dsect = nsect; - } -#if !_FS_READONLY - if (fp->fptr > fp->fsize) { /* Set file change flag if the file size is extended */ - fp->fsize = fp->fptr; - fp->flag |= FA__WRITTEN; - } -#endif - } - - LEAVE_FF(fp->fs, res); -} - - - -#if _FS_MINIMIZE <= 1 -/*-----------------------------------------------------------------------*/ -/* Create a Directory Object */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_opendir ( - DIR* dp, /* Pointer to directory object to create */ - const TCHAR* path /* Pointer to the directory path */ -) -{ - FRESULT res; - FATFS* fs; - DEF_NAMEBUF; - - - if (!dp) return FR_INVALID_OBJECT; - - /* Get logical drive number */ - res = find_volume(&fs, &path, 0); - if (res == FR_OK) { - dp->fs = fs; - INIT_BUF(*dp); - res = follow_path(dp, path); /* Follow the path to the directory */ - FREE_BUF(); - if (res == FR_OK) { /* Follow completed */ - if (dp->dir) { /* It is not the origin directory itself */ - if (dp->dir[DIR_Attr] & AM_DIR) /* The object is a sub directory */ - dp->sclust = ld_clust(fs, dp->dir); - else /* The object is a file */ - res = FR_NO_PATH; - } - if (res == FR_OK) { - dp->id = fs->id; - res = dir_sdi(dp, 0); /* Rewind directory */ -#if _FS_LOCK - if (res == FR_OK) { - if (dp->sclust) { - dp->lockid = inc_lock(dp, 0); /* Lock the sub directory */ - if (!dp->lockid) - res = FR_TOO_MANY_OPEN_FILES; - } else { - dp->lockid = 0; /* Root directory need not to be locked */ - } - } -#endif - } - } - if (res == FR_NO_FILE) res = FR_NO_PATH; - } - if (res != FR_OK) dp->fs = 0; /* Invalidate the directory object if function faild */ - - LEAVE_FF(fs, res); -} - - - - -/*-----------------------------------------------------------------------*/ -/* Close Directory */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_closedir ( - DIR *dp /* Pointer to the directory object to be closed */ -) -{ - FRESULT res; - - - res = validate(dp); - if (res == FR_OK) { -#if _FS_REENTRANT - FATFS *fs = dp->fs; -#endif -#if _FS_LOCK - if (dp->lockid) /* Decrement sub-directory open counter */ - res = dec_lock(dp->lockid); - if (res == FR_OK) -#endif - dp->fs = 0; /* Invalidate directory object */ -#if _FS_REENTRANT - unlock_fs(fs, FR_OK); /* Unlock volume */ -#endif - } - return res; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Read Directory Entries in Sequence */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_readdir ( - DIR* dp, /* Pointer to the open directory object */ - FILINFO* fno /* Pointer to file information to return */ -) -{ - FRESULT res; - DEF_NAMEBUF; - - - res = validate(dp); /* Check validity of the object */ - if (res == FR_OK) { - if (!fno) { - res = dir_sdi(dp, 0); /* Rewind the directory object */ - } else { - INIT_BUF(*dp); - res = dir_read(dp, 0); /* Read an item */ - if (res == FR_NO_FILE) { /* Reached end of directory */ - dp->sect = 0; - res = FR_OK; - } - if (res == FR_OK) { /* A valid entry is found */ - get_fileinfo(dp, fno); /* Get the object information */ - res = dir_next(dp, 0); /* Increment index for next */ - if (res == FR_NO_FILE) { - dp->sect = 0; - res = FR_OK; - } - } - FREE_BUF(); - } - } - - LEAVE_FF(dp->fs, res); -} - - - -#if _FS_MINIMIZE == 0 -/*-----------------------------------------------------------------------*/ -/* Get File Status */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_stat ( - const TCHAR* path, /* Pointer to the file path */ - FILINFO* fno /* Pointer to file information to return */ -) -{ - FRESULT res; - DIR dj; - DEF_NAMEBUF; - - - /* Get logical drive number */ - res = find_volume(&dj.fs, &path, 0); - if (res == FR_OK) { - INIT_BUF(dj); - res = follow_path(&dj, path); /* Follow the file path */ - if (res == FR_OK) { /* Follow completed */ - if (dj.dir) { /* Found an object */ - if (fno) get_fileinfo(&dj, fno); - } else { /* It is root directory */ - res = FR_INVALID_NAME; - } - } - FREE_BUF(); - } - - LEAVE_FF(dj.fs, res); -} - - - -#if !_FS_READONLY -/*-----------------------------------------------------------------------*/ -/* Get Number of Free Clusters */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_getfree ( - const TCHAR* path, /* Path name of the logical drive number */ - DWORD* nclst, /* Pointer to a variable to return number of free clusters */ - FATFS** fatfs /* Pointer to return pointer to corresponding file system object */ -) -{ - FRESULT res; - FATFS *fs; - DWORD n, clst, sect, stat; - UINT i; - BYTE fat, *p; - - - /* Get logical drive number */ - res = find_volume(fatfs, &path, 0); - fs = *fatfs; - if (res == FR_OK) { - /* If free_clust is valid, return it without full cluster scan */ - if (fs->free_clust <= fs->n_fatent - 2) { - *nclst = fs->free_clust; - } else { - /* Get number of free clusters */ - fat = fs->fs_type; - n = 0; - if (fat == FS_FAT12) { - clst = 2; - do { - stat = get_fat(fs, clst); - if (stat == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } - if (stat == 1) { res = FR_INT_ERR; break; } - if (stat == 0) n++; - } while (++clst < fs->n_fatent); - } else { - clst = fs->n_fatent; - sect = fs->fatbase; - i = 0; p = 0; - do { - if (!i) { - res = move_window(fs, sect++); - if (res != FR_OK) break; - p = fs->win; - i = SS(fs); - } - if (fat == FS_FAT16) { - if (LD_WORD(p) == 0) n++; - p += 2; i -= 2; - } else { - if ((LD_DWORD(p) & 0x0FFFFFFF) == 0) n++; - p += 4; i -= 4; - } - } while (--clst); - } - fs->free_clust = n; - fs->fsi_flag |= 1; - *nclst = n; - } - } - LEAVE_FF(fs, res); -} - - - - -/*-----------------------------------------------------------------------*/ -/* Truncate File */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_truncate ( - FIL* fp /* Pointer to the file object */ -) -{ - FRESULT res; - DWORD ncl; - - - res = validate(fp); /* Check validity of the object */ - if (res == FR_OK) { - if (fp->err) { /* Check error */ - res = (FRESULT)fp->err; - } else { - if (!(fp->flag & FA_WRITE)) /* Check access mode */ - res = FR_DENIED; - } - } - if (res == FR_OK) { - if (fp->fsize > fp->fptr) { - fp->fsize = fp->fptr; /* Set file size to current R/W point */ - fp->flag |= FA__WRITTEN; - if (fp->fptr == 0) { /* When set file size to zero, remove entire cluster chain */ - res = remove_chain(fp->fs, fp->sclust); - fp->sclust = 0; - } else { /* When truncate a part of the file, remove remaining clusters */ - ncl = get_fat(fp->fs, fp->clust); - res = FR_OK; - if (ncl == 0xFFFFFFFF) res = FR_DISK_ERR; - if (ncl == 1) res = FR_INT_ERR; - if (res == FR_OK && ncl < fp->fs->n_fatent) { - res = put_fat(fp->fs, fp->clust, 0x0FFFFFFF); - if (res == FR_OK) res = remove_chain(fp->fs, ncl); - } - } -#if !_FS_TINY - if (res == FR_OK && (fp->flag & FA__DIRTY)) { - if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1)) - res = FR_DISK_ERR; - else - fp->flag &= ~FA__DIRTY; - } -#endif - } - if (res != FR_OK) fp->err = (FRESULT)res; - } - - LEAVE_FF(fp->fs, res); -} - - - - -/*-----------------------------------------------------------------------*/ -/* Delete a File or Directory */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_unlink ( - const TCHAR* path /* Pointer to the file or directory path */ -) -{ - FRESULT res; - DIR dj, sdj; - BYTE *dir; - DWORD dclst; - DEF_NAMEBUF; - - - /* Get logical drive number */ - res = find_volume(&dj.fs, &path, 1); - if (res == FR_OK) { - INIT_BUF(dj); - res = follow_path(&dj, path); /* Follow the file path */ - if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) - res = FR_INVALID_NAME; /* Cannot remove dot entry */ -#if _FS_LOCK - if (res == FR_OK) res = chk_lock(&dj, 2); /* Cannot remove open file */ -#endif - if (res == FR_OK) { /* The object is accessible */ - dir = dj.dir; - if (!dir) { - res = FR_INVALID_NAME; /* Cannot remove the start directory */ - } else { - if (dir[DIR_Attr] & AM_RDO) - res = FR_DENIED; /* Cannot remove R/O object */ - } - dclst = ld_clust(dj.fs, dir); - if (res == FR_OK && (dir[DIR_Attr] & AM_DIR)) { /* Is it a sub-dir? */ - if (dclst < 2) { - res = FR_INT_ERR; - } else { - mem_cpy(&sdj, &dj, sizeof (DIR)); /* Check if the sub-directory is empty or not */ - sdj.sclust = dclst; - res = dir_sdi(&sdj, 2); /* Exclude dot entries */ - if (res == FR_OK) { - res = dir_read(&sdj, 0); /* Read an item */ - if (res == FR_OK /* Not empty directory */ -#if _FS_RPATH - || dclst == dj.fs->cdir /* Current directory */ -#endif - ) res = FR_DENIED; - if (res == FR_NO_FILE) res = FR_OK; /* Empty */ - } - } - } - if (res == FR_OK) { - res = dir_remove(&dj); /* Remove the directory entry */ - if (res == FR_OK) { - if (dclst) /* Remove the cluster chain if exist */ - res = remove_chain(dj.fs, dclst); - if (res == FR_OK) res = sync_fs(dj.fs); - } - } - } - FREE_BUF(); - } - - LEAVE_FF(dj.fs, res); -} - - - - -/*-----------------------------------------------------------------------*/ -/* Create a Directory */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_mkdir ( - const TCHAR* path /* Pointer to the directory path */ -) -{ - FRESULT res; - DIR dj; - BYTE *dir, n; - DWORD dsc, dcl, pcl, tm = get_fattime(); - DEF_NAMEBUF; - - - /* Get logical drive number */ - res = find_volume(&dj.fs, &path, 1); - if (res == FR_OK) { - INIT_BUF(dj); - res = follow_path(&dj, path); /* Follow the file path */ - if (res == FR_OK) res = FR_EXIST; /* Any object with same name is already existing */ - if (_FS_RPATH && res == FR_NO_FILE && (dj.fn[NS] & NS_DOT)) - res = FR_INVALID_NAME; - if (res == FR_NO_FILE) { /* Can create a new directory */ - dcl = create_chain(dj.fs, 0); /* Allocate a cluster for the new directory table */ - res = FR_OK; - if (dcl == 0) res = FR_DENIED; /* No space to allocate a new cluster */ - if (dcl == 1) res = FR_INT_ERR; - if (dcl == 0xFFFFFFFF) res = FR_DISK_ERR; - if (res == FR_OK) /* Flush FAT */ - res = sync_window(dj.fs); - if (res == FR_OK) { /* Initialize the new directory table */ - dsc = clust2sect(dj.fs, dcl); - dir = dj.fs->win; - mem_set(dir, 0, SS(dj.fs)); - mem_set(dir+DIR_Name, ' ', 11); /* Create "." entry */ - dir[DIR_Name] = '.'; - dir[DIR_Attr] = AM_DIR; - ST_DWORD(dir+DIR_WrtTime, tm); - st_clust(dir, dcl); - mem_cpy(dir+SZ_DIR, dir, SZ_DIR); /* Create ".." entry */ - dir[SZ_DIR+1] = '.'; pcl = dj.sclust; - if (dj.fs->fs_type == FS_FAT32 && pcl == dj.fs->dirbase) - pcl = 0; - st_clust(dir+SZ_DIR, pcl); - for (n = dj.fs->csize; n; n--) { /* Write dot entries and clear following sectors */ - dj.fs->winsect = dsc++; - dj.fs->wflag = 1; - res = sync_window(dj.fs); - if (res != FR_OK) break; - mem_set(dir, 0, SS(dj.fs)); - } - } - if (res == FR_OK) res = dir_register(&dj); /* Register the object to the directoy */ - if (res != FR_OK) { - remove_chain(dj.fs, dcl); /* Could not register, remove cluster chain */ - } else { - dir = dj.dir; - dir[DIR_Attr] = AM_DIR; /* Attribute */ - ST_DWORD(dir+DIR_WrtTime, tm); /* Created time */ - st_clust(dir, dcl); /* Table start cluster */ - dj.fs->wflag = 1; - res = sync_fs(dj.fs); - } - } - FREE_BUF(); - } - - LEAVE_FF(dj.fs, res); -} - - - - -/*-----------------------------------------------------------------------*/ -/* Change Attribute */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_chmod ( - const TCHAR* path, /* Pointer to the file path */ - BYTE value, /* Attribute bits */ - BYTE mask /* Attribute mask to change */ -) -{ - FRESULT res; - DIR dj; - BYTE *dir; - DEF_NAMEBUF; - - - /* Get logical drive number */ - res = find_volume(&dj.fs, &path, 1); - if (res == FR_OK) { - INIT_BUF(dj); - res = follow_path(&dj, path); /* Follow the file path */ - FREE_BUF(); - if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) - res = FR_INVALID_NAME; - if (res == FR_OK) { - dir = dj.dir; - if (!dir) { /* Is it a root directory? */ - res = FR_INVALID_NAME; - } else { /* File or sub directory */ - mask &= AM_RDO|AM_HID|AM_SYS|AM_ARC; /* Valid attribute mask */ - dir[DIR_Attr] = (value & mask) | (dir[DIR_Attr] & (BYTE)~mask); /* Apply attribute change */ - dj.fs->wflag = 1; - res = sync_fs(dj.fs); - } - } - } - - LEAVE_FF(dj.fs, res); -} - - - - -/*-----------------------------------------------------------------------*/ -/* Change Timestamp */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_utime ( - const TCHAR* path, /* Pointer to the file/directory name */ - const FILINFO* fno /* Pointer to the time stamp to be set */ -) -{ - FRESULT res; - DIR dj; - BYTE *dir; - DEF_NAMEBUF; - - - /* Get logical drive number */ - res = find_volume(&dj.fs, &path, 1); - if (res == FR_OK) { - INIT_BUF(dj); - res = follow_path(&dj, path); /* Follow the file path */ - FREE_BUF(); - if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) - res = FR_INVALID_NAME; - if (res == FR_OK) { - dir = dj.dir; - if (!dir) { /* Root directory */ - res = FR_INVALID_NAME; - } else { /* File or sub-directory */ - ST_WORD(dir+DIR_WrtTime, fno->ftime); - ST_WORD(dir+DIR_WrtDate, fno->fdate); - dj.fs->wflag = 1; - res = sync_fs(dj.fs); - } - } - } - - LEAVE_FF(dj.fs, res); -} - - - - -/*-----------------------------------------------------------------------*/ -/* Rename File/Directory */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_rename ( - const TCHAR* path_old, /* Pointer to the object to be renamed */ - const TCHAR* path_new /* Pointer to the new name */ -) -{ - FRESULT res; - DIR djo, djn; - BYTE buf[21], *dir; - DWORD dw; - DEF_NAMEBUF; - - - /* Get logical drive number of the source object */ - res = find_volume(&djo.fs, &path_old, 1); - if (res == FR_OK) { - djn.fs = djo.fs; - INIT_BUF(djo); - res = follow_path(&djo, path_old); /* Check old object */ - if (_FS_RPATH && res == FR_OK && (djo.fn[NS] & NS_DOT)) - res = FR_INVALID_NAME; -#if _FS_LOCK - if (res == FR_OK) res = chk_lock(&djo, 2); -#endif - if (res == FR_OK) { /* Old object is found */ - if (!djo.dir) { /* Is root dir? */ - res = FR_NO_FILE; - } else { - mem_cpy(buf, djo.dir+DIR_Attr, 21); /* Save the object information except name */ - mem_cpy(&djn, &djo, sizeof (DIR)); /* Duplicate the directory object */ - if (get_ldnumber(&path_new) >= 0) /* Snip drive number off and ignore it */ - res = follow_path(&djn, path_new); /* and check if new object is exist */ - else - res = FR_INVALID_DRIVE; - if (res == FR_OK) res = FR_EXIST; /* The new object name is already existing */ - if (res == FR_NO_FILE) { /* Is it a valid path and no name collision? */ -/* Start critical section that any interruption can cause a cross-link */ - res = dir_register(&djn); /* Register the new entry */ - if (res == FR_OK) { - dir = djn.dir; /* Copy object information except name */ - mem_cpy(dir+13, buf+2, 19); - dir[DIR_Attr] = buf[0] | AM_ARC; - djo.fs->wflag = 1; - if (djo.sclust != djn.sclust && (dir[DIR_Attr] & AM_DIR)) { /* Update .. entry in the directory if needed */ - dw = clust2sect(djo.fs, ld_clust(djo.fs, dir)); - if (!dw) { - res = FR_INT_ERR; - } else { - res = move_window(djo.fs, dw); - dir = djo.fs->win+SZ_DIR; /* .. entry */ - if (res == FR_OK && dir[1] == '.') { - dw = (djo.fs->fs_type == FS_FAT32 && djn.sclust == djo.fs->dirbase) ? 0 : djn.sclust; - st_clust(dir, dw); - djo.fs->wflag = 1; - } - } - } - if (res == FR_OK) { - res = dir_remove(&djo); /* Remove old entry */ - if (res == FR_OK) - res = sync_fs(djo.fs); - } - } -/* End critical section */ - } - } - } - FREE_BUF(); - } - - LEAVE_FF(djo.fs, res); -} - -#endif /* !_FS_READONLY */ -#endif /* _FS_MINIMIZE == 0 */ -#endif /* _FS_MINIMIZE <= 1 */ -#endif /* _FS_MINIMIZE <= 2 */ - - - -#if _USE_LABEL -/*-----------------------------------------------------------------------*/ -/* Get volume label */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_getlabel ( - const TCHAR* path, /* Path name of the logical drive number */ - TCHAR* label, /* Pointer to a buffer to return the volume label */ - DWORD* vsn /* Pointer to a variable to return the volume serial number */ -) -{ - FRESULT res; - DIR dj; - UINT i, j; - - - /* Get logical drive number */ - res = find_volume(&dj.fs, &path, 0); - - /* Get volume label */ - if (res == FR_OK && label) { - dj.sclust = 0; /* Open root directory */ - res = dir_sdi(&dj, 0); - if (res == FR_OK) { - res = dir_read(&dj, 1); /* Get an entry with AM_VOL */ - if (res == FR_OK) { /* A volume label is exist */ -#if _USE_LFN && _LFN_UNICODE - WCHAR w; - i = j = 0; - do { - w = (i < 11) ? dj.dir[i++] : ' '; - if (IsDBCS1(w) && i < 11 && IsDBCS2(dj.dir[i])) - w = w << 8 | dj.dir[i++]; - label[j++] = ff_convert(w, 1); /* OEM -> Unicode */ - } while (j < 11); -#else - mem_cpy(label, dj.dir, 11); -#endif - j = 11; - do { - label[j] = 0; - if (!j) break; - } while (label[--j] == ' '); - } - if (res == FR_NO_FILE) { /* No label, return nul string */ - label[0] = 0; - res = FR_OK; - } - } - } - - /* Get volume serial number */ - if (res == FR_OK && vsn) { - res = move_window(dj.fs, dj.fs->volbase); - if (res == FR_OK) { - i = dj.fs->fs_type == FS_FAT32 ? BS_VolID32 : BS_VolID; - *vsn = LD_DWORD(&dj.fs->win[i]); - } - } - - LEAVE_FF(dj.fs, res); -} - - - -#if !_FS_READONLY -/*-----------------------------------------------------------------------*/ -/* Set volume label */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_setlabel ( - const TCHAR* label /* Pointer to the volume label to set */ -) -{ - FRESULT res; - DIR dj; - BYTE vn[11]; - UINT i, j, sl; - WCHAR w; - DWORD tm; - - - /* Get logical drive number */ - res = find_volume(&dj.fs, &label, 1); - if (res) LEAVE_FF(dj.fs, res); - - /* Create a volume label in directory form */ - vn[0] = 0; - for (sl = 0; label[sl]; sl++) ; /* Get name length */ - for ( ; sl && label[sl-1] == ' '; sl--) ; /* Remove trailing spaces */ - if (sl) { /* Create volume label in directory form */ - i = j = 0; - do { -#if _USE_LFN && _LFN_UNICODE - w = ff_convert(ff_wtoupper(label[i++]), 0); -#else - w = (BYTE)label[i++]; - if (IsDBCS1(w)) - w = (j < 10 && i < sl && IsDBCS2(label[i])) ? w << 8 | (BYTE)label[i++] : 0; -#if _USE_LFN - w = ff_convert(ff_wtoupper(ff_convert(w, 1)), 0); -#else - if (IsLower(w)) w -= 0x20; /* To upper ASCII characters */ -#ifdef _EXCVT - if (w >= 0x80) w = ExCvt[w - 0x80]; /* To upper extended characters (SBCS cfg) */ -#else - if (!_DF1S && w >= 0x80) w = 0; /* Reject extended characters (ASCII cfg) */ -#endif -#endif -#endif - if (!w || chk_chr("\"*+,.:;<=>\?[]|\x7F", w) || j >= (UINT)((w >= 0x100) ? 10 : 11)) /* Reject invalid characters for volume label */ - LEAVE_FF(dj.fs, FR_INVALID_NAME); - if (w >= 0x100) vn[j++] = (BYTE)(w >> 8); - vn[j++] = (BYTE)w; - } while (i < sl); - while (j < 11) vn[j++] = ' '; - } - - /* Set volume label */ - dj.sclust = 0; /* Open root directory */ - res = dir_sdi(&dj, 0); - if (res == FR_OK) { - res = dir_read(&dj, 1); /* Get an entry with AM_VOL */ - if (res == FR_OK) { /* A volume label is found */ - if (vn[0]) { - mem_cpy(dj.dir, vn, 11); /* Change the volume label name */ - tm = get_fattime(); - ST_DWORD(dj.dir+DIR_WrtTime, tm); - } else { - dj.dir[0] = DDE; /* Remove the volume label */ - } - dj.fs->wflag = 1; - res = sync_fs(dj.fs); - } else { /* No volume label is found or error */ - if (res == FR_NO_FILE) { - res = FR_OK; - if (vn[0]) { /* Create volume label as new */ - res = dir_alloc(&dj, 1); /* Allocate an entry for volume label */ - if (res == FR_OK) { - mem_set(dj.dir, 0, SZ_DIR); /* Set volume label */ - mem_cpy(dj.dir, vn, 11); - dj.dir[DIR_Attr] = AM_VOL; - tm = get_fattime(); - ST_DWORD(dj.dir+DIR_WrtTime, tm); - dj.fs->wflag = 1; - res = sync_fs(dj.fs); - } - } - } - } - } - - LEAVE_FF(dj.fs, res); -} - -#endif /* !_FS_READONLY */ -#endif /* _USE_LABEL */ - - - -/*-----------------------------------------------------------------------*/ -/* Forward data to the stream directly (available on only tiny cfg) */ -/*-----------------------------------------------------------------------*/ -#if _USE_FORWARD && _FS_TINY - -FRESULT f_forward ( - FIL* fp, /* Pointer to the file object */ - UINT (*func)(const BYTE*,UINT), /* Pointer to the streaming function */ - UINT btf, /* Number of bytes to forward */ - UINT* bf /* Pointer to number of bytes forwarded */ -) -{ - FRESULT res; - DWORD remain, clst, sect; - UINT rcnt; - BYTE csect; - - - *bf = 0; /* Clear transfer byte counter */ - - res = validate(fp); /* Check validity of the object */ - if (res != FR_OK) LEAVE_FF(fp->fs, res); - if (fp->err) /* Check error */ - LEAVE_FF(fp->fs, (FRESULT)fp->err); - if (!(fp->flag & FA_READ)) /* Check access mode */ - LEAVE_FF(fp->fs, FR_DENIED); - - remain = fp->fsize - fp->fptr; - if (btf > remain) btf = (UINT)remain; /* Truncate btf by remaining bytes */ - - for ( ; btf && (*func)(0, 0); /* Repeat until all data transferred or stream becomes busy */ - fp->fptr += rcnt, *bf += rcnt, btf -= rcnt) { - csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ - if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ - if (!csect) { /* On the cluster boundary? */ - clst = (fp->fptr == 0) ? /* On the top of the file? */ - fp->sclust : get_fat(fp->fs, fp->clust); - if (clst <= 1) ABORT(fp->fs, FR_INT_ERR); - if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); - fp->clust = clst; /* Update current cluster */ - } - } - sect = clust2sect(fp->fs, fp->clust); /* Get current data sector */ - if (!sect) ABORT(fp->fs, FR_INT_ERR); - sect += csect; - if (move_window(fp->fs, sect)) /* Move sector window */ - ABORT(fp->fs, FR_DISK_ERR); - fp->dsect = sect; - rcnt = SS(fp->fs) - (WORD)(fp->fptr % SS(fp->fs)); /* Forward data from sector window */ - if (rcnt > btf) rcnt = btf; - rcnt = (*func)(&fp->fs->win[(WORD)fp->fptr % SS(fp->fs)], rcnt); - if (!rcnt) ABORT(fp->fs, FR_INT_ERR); - } - - LEAVE_FF(fp->fs, FR_OK); -} -#endif /* _USE_FORWARD */ - - - -#if _USE_MKFS && !_FS_READONLY -/*-----------------------------------------------------------------------*/ -/* Create File System on the Drive */ -/*-----------------------------------------------------------------------*/ -#define N_ROOTDIR 512 /* Number of root directory entries for FAT12/16 */ -#define N_FATS 1 /* Number of FAT copies (1 or 2) */ - - -FRESULT f_mkfs ( - const TCHAR* path, /* Logical drive number */ - BYTE sfd, /* Partitioning rule 0:FDISK, 1:SFD */ - UINT au /* Allocation unit [bytes] */ -) -{ - static const WORD vst[] = { 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 0}; - static const WORD cst[] = {32768, 16384, 8192, 4096, 2048, 16384, 8192, 4096, 2048, 1024, 512}; - int vol; - BYTE fmt, md, sys, *tbl, pdrv, part; - DWORD n_clst, vs, n, wsect; - UINT i; - DWORD b_vol, b_fat, b_dir, b_data; /* LBA */ - DWORD n_vol, n_rsv, n_fat, n_dir; /* Size */ - FATFS *fs; - DSTATUS stat; - - - /* Check mounted drive and clear work area */ - vol = get_ldnumber(&path); - if (vol < 0) return FR_INVALID_DRIVE; - if (sfd > 1) return FR_INVALID_PARAMETER; - if (au & (au - 1)) return FR_INVALID_PARAMETER; - fs = FatFs[vol]; - if (!fs) return FR_NOT_ENABLED; - fs->fs_type = 0; - pdrv = LD2PD(vol); /* Physical drive */ - part = LD2PT(vol); /* Partition (0:auto detect, 1-4:get from partition table)*/ - - /* Get disk statics */ - stat = disk_initialize(pdrv); - if (stat & STA_NOINIT) return FR_NOT_READY; - if (stat & STA_PROTECT) return FR_WRITE_PROTECTED; -#if _MAX_SS != _MIN_SS /* Get disk sector size */ - if (disk_ioctl(pdrv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || SS(fs) > _MAX_SS || SS(fs) < _MIN_SS) - return FR_DISK_ERR; -#endif - if (_MULTI_PARTITION && part) { - /* Get partition information from partition table in the MBR */ - if (disk_read(pdrv, fs->win, 0, 1)) return FR_DISK_ERR; - if (LD_WORD(fs->win+BS_55AA) != 0xAA55) return FR_MKFS_ABORTED; - tbl = &fs->win[MBR_Table + (part - 1) * SZ_PTE]; - if (!tbl[4]) return FR_MKFS_ABORTED; /* No partition? */ - b_vol = LD_DWORD(tbl+8); /* Volume start sector */ - n_vol = LD_DWORD(tbl+12); /* Volume size */ - } else { - /* Create a partition in this function */ - if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &n_vol) != RES_OK || n_vol < 128) - return FR_DISK_ERR; - b_vol = (sfd) ? 0 : 63; /* Volume start sector */ - n_vol -= b_vol; /* Volume size */ - } - - if (!au) { /* AU auto selection */ - vs = n_vol / (2000 / (SS(fs) / 512)); - for (i = 0; vs < vst[i]; i++) ; - au = cst[i]; - } - au /= SS(fs); /* Number of sectors per cluster */ - if (au == 0) au = 1; - if (au > 128) au = 128; - - /* Pre-compute number of clusters and FAT sub-type */ - n_clst = n_vol / au; - fmt = FS_FAT12; - if (n_clst >= MIN_FAT16) fmt = FS_FAT16; - if (n_clst >= MIN_FAT32) fmt = FS_FAT32; - - /* Determine offset and size of FAT structure */ - if (fmt == FS_FAT32) { - n_fat = ((n_clst * 4) + 8 + SS(fs) - 1) / SS(fs); - n_rsv = 32; - n_dir = 0; - } else { - n_fat = (fmt == FS_FAT12) ? (n_clst * 3 + 1) / 2 + 3 : (n_clst * 2) + 4; - n_fat = (n_fat + SS(fs) - 1) / SS(fs); - n_rsv = 1; - n_dir = (DWORD)N_ROOTDIR * SZ_DIR / SS(fs); - } - b_fat = b_vol + n_rsv; /* FAT area start sector */ - b_dir = b_fat + n_fat * N_FATS; /* Directory area start sector */ - b_data = b_dir + n_dir; /* Data area start sector */ - if (n_vol < b_data + au - b_vol) return FR_MKFS_ABORTED; /* Too small volume */ - - /* Align data start sector to erase block boundary (for flash memory media) */ - if (disk_ioctl(pdrv, GET_BLOCK_SIZE, &n) != RES_OK || !n || n > 32768) n = 1; - n = (b_data + n - 1) & ~(n - 1); /* Next nearest erase block from current data start */ - n = (n - b_data) / N_FATS; - if (fmt == FS_FAT32) { /* FAT32: Move FAT offset */ - n_rsv += n; - b_fat += n; - } else { /* FAT12/16: Expand FAT size */ - n_fat += n; - } - - /* Determine number of clusters and final check of validity of the FAT sub-type */ - n_clst = (n_vol - n_rsv - n_fat * N_FATS - n_dir) / au; - if ( (fmt == FS_FAT16 && n_clst < MIN_FAT16) - || (fmt == FS_FAT32 && n_clst < MIN_FAT32)) - return FR_MKFS_ABORTED; - - /* Determine system ID in the partition table */ - if (fmt == FS_FAT32) { - sys = 0x0C; /* FAT32X */ - } else { - if (fmt == FS_FAT12 && n_vol < 0x10000) { - sys = 0x01; /* FAT12(<65536) */ - } else { - sys = (n_vol < 0x10000) ? 0x04 : 0x06; /* FAT16(<65536) : FAT12/16(>=65536) */ - } - } - - if (_MULTI_PARTITION && part) { - /* Update system ID in the partition table */ - tbl = &fs->win[MBR_Table + (part - 1) * SZ_PTE]; - tbl[4] = sys; - if (disk_write(pdrv, fs->win, 0, 1)) /* Write it to teh MBR */ - return FR_DISK_ERR; - md = 0xF8; - } else { - if (sfd) { /* No partition table (SFD) */ - md = 0xF0; - } else { /* Create partition table (FDISK) */ - mem_set(fs->win, 0, SS(fs)); - tbl = fs->win+MBR_Table; /* Create partition table for single partition in the drive */ - tbl[1] = 1; /* Partition start head */ - tbl[2] = 1; /* Partition start sector */ - tbl[3] = 0; /* Partition start cylinder */ - tbl[4] = sys; /* System type */ - tbl[5] = 254; /* Partition end head */ - n = (b_vol + n_vol) / 63 / 255; - tbl[6] = (BYTE)(n >> 2 | 63); /* Partition end sector */ - tbl[7] = (BYTE)n; /* End cylinder */ - ST_DWORD(tbl+8, 63); /* Partition start in LBA */ - ST_DWORD(tbl+12, n_vol); /* Partition size in LBA */ - ST_WORD(fs->win+BS_55AA, 0xAA55); /* MBR signature */ - if (disk_write(pdrv, fs->win, 0, 1)) /* Write it to the MBR */ - return FR_DISK_ERR; - md = 0xF8; - } - } - - /* Create BPB in the VBR */ - tbl = fs->win; /* Clear sector */ - mem_set(tbl, 0, SS(fs)); - mem_cpy(tbl, "\xEB\xFE\x90" "MSDOS5.0", 11);/* Boot jump code, OEM name */ - i = SS(fs); /* Sector size */ - ST_WORD(tbl+BPB_BytsPerSec, i); - tbl[BPB_SecPerClus] = (BYTE)au; /* Sectors per cluster */ - ST_WORD(tbl+BPB_RsvdSecCnt, n_rsv); /* Reserved sectors */ - tbl[BPB_NumFATs] = N_FATS; /* Number of FATs */ - i = (fmt == FS_FAT32) ? 0 : N_ROOTDIR; /* Number of root directory entries */ - ST_WORD(tbl+BPB_RootEntCnt, i); - if (n_vol < 0x10000) { /* Number of total sectors */ - ST_WORD(tbl+BPB_TotSec16, n_vol); - } else { - ST_DWORD(tbl+BPB_TotSec32, n_vol); - } - tbl[BPB_Media] = md; /* Media descriptor */ - ST_WORD(tbl+BPB_SecPerTrk, 63); /* Number of sectors per track */ - ST_WORD(tbl+BPB_NumHeads, 255); /* Number of heads */ - ST_DWORD(tbl+BPB_HiddSec, b_vol); /* Hidden sectors */ - n = get_fattime(); /* Use current time as VSN */ - if (fmt == FS_FAT32) { - ST_DWORD(tbl+BS_VolID32, n); /* VSN */ - ST_DWORD(tbl+BPB_FATSz32, n_fat); /* Number of sectors per FAT */ - ST_DWORD(tbl+BPB_RootClus, 2); /* Root directory start cluster (2) */ - ST_WORD(tbl+BPB_FSInfo, 1); /* FSINFO record offset (VBR+1) */ - ST_WORD(tbl+BPB_BkBootSec, 6); /* Backup boot record offset (VBR+6) */ - tbl[BS_DrvNum32] = 0x80; /* Drive number */ - tbl[BS_BootSig32] = 0x29; /* Extended boot signature */ - mem_cpy(tbl+BS_VolLab32, "NO NAME " "FAT32 ", 19); /* Volume label, FAT signature */ - } else { - ST_DWORD(tbl+BS_VolID, n); /* VSN */ - ST_WORD(tbl+BPB_FATSz16, n_fat); /* Number of sectors per FAT */ - tbl[BS_DrvNum] = 0x80; /* Drive number */ - tbl[BS_BootSig] = 0x29; /* Extended boot signature */ - mem_cpy(tbl+BS_VolLab, "NO NAME " "FAT ", 19); /* Volume label, FAT signature */ - } - ST_WORD(tbl+BS_55AA, 0xAA55); /* Signature (Offset is fixed here regardless of sector size) */ - if (disk_write(pdrv, tbl, b_vol, 1)) /* Write it to the VBR sector */ - return FR_DISK_ERR; - if (fmt == FS_FAT32) /* Write backup VBR if needed (VBR+6) */ - disk_write(pdrv, tbl, b_vol + 6, 1); - - /* Initialize FAT area */ - wsect = b_fat; - for (i = 0; i < N_FATS; i++) { /* Initialize each FAT copy */ - mem_set(tbl, 0, SS(fs)); /* 1st sector of the FAT */ - n = md; /* Media descriptor byte */ - if (fmt != FS_FAT32) { - n |= (fmt == FS_FAT12) ? 0x00FFFF00 : 0xFFFFFF00; - ST_DWORD(tbl+0, n); /* Reserve cluster #0-1 (FAT12/16) */ - } else { - n |= 0xFFFFFF00; - ST_DWORD(tbl+0, n); /* Reserve cluster #0-1 (FAT32) */ - ST_DWORD(tbl+4, 0xFFFFFFFF); - ST_DWORD(tbl+8, 0x0FFFFFFF); /* Reserve cluster #2 for root directory */ - } - if (disk_write(pdrv, tbl, wsect++, 1)) - return FR_DISK_ERR; - mem_set(tbl, 0, SS(fs)); /* Fill following FAT entries with zero */ - for (n = 1; n < n_fat; n++) { /* This loop may take a time on FAT32 volume due to many single sector writes */ - if (disk_write(pdrv, tbl, wsect++, 1)) - return FR_DISK_ERR; - } - } - - /* Initialize root directory */ - i = (fmt == FS_FAT32) ? au : (UINT)n_dir; - do { - if (disk_write(pdrv, tbl, wsect++, 1)) - return FR_DISK_ERR; - } while (--i); - -#if _USE_ERASE /* Erase data area if needed */ - { - DWORD eb[2]; - - eb[0] = wsect; eb[1] = wsect + (n_clst - ((fmt == FS_FAT32) ? 1 : 0)) * au - 1; - disk_ioctl(pdrv, CTRL_ERASE_SECTOR, eb); - } -#endif - - /* Create FSINFO if needed */ - if (fmt == FS_FAT32) { - ST_DWORD(tbl+FSI_LeadSig, 0x41615252); - ST_DWORD(tbl+FSI_StrucSig, 0x61417272); - ST_DWORD(tbl+FSI_Free_Count, n_clst - 1); /* Number of free clusters */ - ST_DWORD(tbl+FSI_Nxt_Free, 2); /* Last allocated cluster# */ - ST_WORD(tbl+BS_55AA, 0xAA55); - disk_write(pdrv, tbl, b_vol + 1, 1); /* Write original (VBR+1) */ - disk_write(pdrv, tbl, b_vol + 7, 1); /* Write backup (VBR+7) */ - } - - return (disk_ioctl(pdrv, CTRL_SYNC, 0) == RES_OK) ? FR_OK : FR_DISK_ERR; -} - - - -#if _MULTI_PARTITION -/*-----------------------------------------------------------------------*/ -/* Divide Physical Drive */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_fdisk ( - BYTE pdrv, /* Physical drive number */ - const DWORD szt[], /* Pointer to the size table for each partitions */ - void* work /* Pointer to the working buffer */ -) -{ - UINT i, n, sz_cyl, tot_cyl, b_cyl, e_cyl, p_cyl; - BYTE s_hd, e_hd, *p, *buf = (BYTE*)work; - DSTATUS stat; - DWORD sz_disk, sz_part, s_part; - - - stat = disk_initialize(pdrv); - if (stat & STA_NOINIT) return FR_NOT_READY; - if (stat & STA_PROTECT) return FR_WRITE_PROTECTED; - if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_disk)) return FR_DISK_ERR; - - /* Determine CHS in the table regardless of the drive geometry */ - for (n = 16; n < 256 && sz_disk / n / 63 > 1024; n *= 2) ; - if (n == 256) n--; - e_hd = n - 1; - sz_cyl = 63 * n; - tot_cyl = sz_disk / sz_cyl; - - /* Create partition table */ - mem_set(buf, 0, _MAX_SS); - p = buf + MBR_Table; b_cyl = 0; - for (i = 0; i < 4; i++, p += SZ_PTE) { - p_cyl = (szt[i] <= 100U) ? (DWORD)tot_cyl * szt[i] / 100 : szt[i] / sz_cyl; - if (!p_cyl) continue; - s_part = (DWORD)sz_cyl * b_cyl; - sz_part = (DWORD)sz_cyl * p_cyl; - if (i == 0) { /* Exclude first track of cylinder 0 */ - s_hd = 1; - s_part += 63; sz_part -= 63; - } else { - s_hd = 0; - } - e_cyl = b_cyl + p_cyl - 1; - if (e_cyl >= tot_cyl) return FR_INVALID_PARAMETER; - - /* Set partition table */ - p[1] = s_hd; /* Start head */ - p[2] = (BYTE)((b_cyl >> 2) + 1); /* Start sector */ - p[3] = (BYTE)b_cyl; /* Start cylinder */ - p[4] = 0x06; /* System type (temporary setting) */ - p[5] = e_hd; /* End head */ - p[6] = (BYTE)((e_cyl >> 2) + 63); /* End sector */ - p[7] = (BYTE)e_cyl; /* End cylinder */ - ST_DWORD(p + 8, s_part); /* Start sector in LBA */ - ST_DWORD(p + 12, sz_part); /* Partition size */ - - /* Next partition */ - b_cyl += p_cyl; - } - ST_WORD(p, 0xAA55); - - /* Write it to the MBR */ - return (disk_write(pdrv, buf, 0, 1) || disk_ioctl(pdrv, CTRL_SYNC, 0)) ? FR_DISK_ERR : FR_OK; -} - - -#endif /* _MULTI_PARTITION */ -#endif /* _USE_MKFS && !_FS_READONLY */ - - - - -#if _USE_STRFUNC -/*-----------------------------------------------------------------------*/ -/* Get a string from the file */ -/*-----------------------------------------------------------------------*/ - -TCHAR* f_gets ( - TCHAR* buff, /* Pointer to the string buffer to read */ - int len, /* Size of string buffer (characters) */ - FIL* fp /* Pointer to the file object */ -) -{ - int n = 0; - TCHAR c, *p = buff; - BYTE s[2]; - UINT rc; - - - while (n < len - 1) { /* Read characters until buffer gets filled */ -#if _USE_LFN && _LFN_UNICODE -#if _STRF_ENCODE == 3 /* Read a character in UTF-8 */ - f_read(fp, s, 1, &rc); - if (rc != 1) break; - c = s[0]; - if (c >= 0x80) { - if (c < 0xC0) continue; /* Skip stray trailer */ - if (c < 0xE0) { /* Two-byte sequence */ - f_read(fp, s, 1, &rc); - if (rc != 1) break; - c = (c & 0x1F) << 6 | (s[0] & 0x3F); - if (c < 0x80) c = '?'; - } else { - if (c < 0xF0) { /* Three-byte sequence */ - f_read(fp, s, 2, &rc); - if (rc != 2) break; - c = c << 12 | (s[0] & 0x3F) << 6 | (s[1] & 0x3F); - if (c < 0x800) c = '?'; - } else { /* Reject four-byte sequence */ - c = '?'; - } - } - } -#elif _STRF_ENCODE == 2 /* Read a character in UTF-16BE */ - f_read(fp, s, 2, &rc); - if (rc != 2) break; - c = s[1] + (s[0] << 8); -#elif _STRF_ENCODE == 1 /* Read a character in UTF-16LE */ - f_read(fp, s, 2, &rc); - if (rc != 2) break; - c = s[0] + (s[1] << 8); -#else /* Read a character in ANSI/OEM */ - f_read(fp, s, 1, &rc); - if (rc != 1) break; - c = s[0]; - if (IsDBCS1(c)) { - f_read(fp, s, 1, &rc); - if (rc != 1) break; - c = (c << 8) + s[0]; - } - c = ff_convert(c, 1); /* OEM -> Unicode */ - if (!c) c = '?'; -#endif -#else /* Read a character without conversion */ - f_read(fp, s, 1, &rc); - if (rc != 1) break; - c = s[0]; -#endif - if (_USE_STRFUNC == 2 && c == '\r') continue; /* Strip '\r' */ - *p++ = c; - n++; - if (c == '\n') break; /* Break on EOL */ - } - *p = 0; - return n ? buff : 0; /* When no data read (eof or error), return with error. */ -} - - - -#if !_FS_READONLY -#include -/*-----------------------------------------------------------------------*/ -/* Put a character to the file */ -/*-----------------------------------------------------------------------*/ - -typedef struct { - FIL* fp; - int idx, nchr; - BYTE buf[64]; -} putbuff; - - -static -void putc_bfd ( - putbuff* pb, - TCHAR c -) -{ - UINT bw; - int i; - - - if (_USE_STRFUNC == 2 && c == '\n') /* LF -> CRLF conversion */ - putc_bfd(pb, '\r'); - - i = pb->idx; /* Buffer write index (-1:error) */ - if (i < 0) return; - -#if _USE_LFN && _LFN_UNICODE -#if _STRF_ENCODE == 3 /* Write a character in UTF-8 */ - if (c < 0x80) { /* 7-bit */ - pb->buf[i++] = (BYTE)c; - } else { - if (c < 0x800) { /* 11-bit */ - pb->buf[i++] = (BYTE)(0xC0 | c >> 6); - } else { /* 16-bit */ - pb->buf[i++] = (BYTE)(0xE0 | c >> 12); - pb->buf[i++] = (BYTE)(0x80 | (c >> 6 & 0x3F)); - } - pb->buf[i++] = (BYTE)(0x80 | (c & 0x3F)); - } -#elif _STRF_ENCODE == 2 /* Write a character in UTF-16BE */ - pb->buf[i++] = (BYTE)(c >> 8); - pb->buf[i++] = (BYTE)c; -#elif _STRF_ENCODE == 1 /* Write a character in UTF-16LE */ - pb->buf[i++] = (BYTE)c; - pb->buf[i++] = (BYTE)(c >> 8); -#else /* Write a character in ANSI/OEM */ - c = ff_convert(c, 0); /* Unicode -> OEM */ - if (!c) c = '?'; - if (c >= 0x100) - pb->buf[i++] = (BYTE)(c >> 8); - pb->buf[i++] = (BYTE)c; -#endif -#else /* Write a character without conversion */ - pb->buf[i++] = (BYTE)c; -#endif - - if (i >= (int)(sizeof pb->buf) - 3) { /* Write buffered characters to the file */ - f_write(pb->fp, pb->buf, (UINT)i, &bw); - i = (bw == (UINT)i) ? 0 : -1; - } - pb->idx = i; - pb->nchr++; -} - - - -int f_putc ( - TCHAR c, /* A character to be output */ - FIL* fp /* Pointer to the file object */ -) -{ - putbuff pb; - UINT nw; - - - pb.fp = fp; /* Initialize output buffer */ - pb.nchr = pb.idx = 0; - - putc_bfd(&pb, c); /* Put a character */ - - if ( pb.idx >= 0 /* Flush buffered characters to the file */ - && f_write(pb.fp, pb.buf, (UINT)pb.idx, &nw) == FR_OK - && (UINT)pb.idx == nw) return pb.nchr; - return EOF; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Put a string to the file */ -/*-----------------------------------------------------------------------*/ - -int f_puts ( - const TCHAR* str, /* Pointer to the string to be output */ - FIL* fp /* Pointer to the file object */ -) -{ - putbuff pb; - UINT nw; - - - pb.fp = fp; /* Initialize output buffer */ - pb.nchr = pb.idx = 0; - - while (*str) /* Put the string */ - putc_bfd(&pb, *str++); - - if ( pb.idx >= 0 /* Flush buffered characters to the file */ - && f_write(pb.fp, pb.buf, (UINT)pb.idx, &nw) == FR_OK - && (UINT)pb.idx == nw) return pb.nchr; - return EOF; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Put a formatted string to the file */ -/*-----------------------------------------------------------------------*/ - -int f_printf ( - FIL* fp, /* Pointer to the file object */ - const TCHAR* fmt, /* Pointer to the format string */ - ... /* Optional arguments... */ -) -{ - va_list arp; - BYTE f, r; - UINT nw, i, j, w; - DWORD v; - TCHAR c, d, s[16], *p; - putbuff pb; - - - pb.fp = fp; /* Initialize output buffer */ - pb.nchr = pb.idx = 0; - - va_start(arp, fmt); - - for (;;) { - c = *fmt++; - if (c == 0) break; /* End of string */ - if (c != '%') { /* Non escape character */ - putc_bfd(&pb, c); - continue; - } - w = f = 0; - c = *fmt++; - if (c == '0') { /* Flag: '0' padding */ - f = 1; c = *fmt++; - } else { - if (c == '-') { /* Flag: left justified */ - f = 2; c = *fmt++; - } - } - while (IsDigit(c)) { /* Precision */ - w = w * 10 + c - '0'; - c = *fmt++; - } - if (c == 'l' || c == 'L') { /* Prefix: Size is long int */ - f |= 4; c = *fmt++; - } - if (!c) break; - d = c; - if (IsLower(d)) d -= 0x20; - switch (d) { /* Type is... */ - case 'S' : /* String */ - p = va_arg(arp, TCHAR*); - for (j = 0; p[j]; j++) ; - if (!(f & 2)) { - while (j++ < w) putc_bfd(&pb, ' '); - } - while (*p) putc_bfd(&pb, *p++); - while (j++ < w) putc_bfd(&pb, ' '); - continue; - case 'C' : /* Character */ - putc_bfd(&pb, (TCHAR)va_arg(arp, int)); continue; - case 'B' : /* Binary */ - r = 2; break; - case 'O' : /* Octal */ - r = 8; break; - case 'D' : /* Signed decimal */ - case 'U' : /* Unsigned decimal */ - r = 10; break; - case 'X' : /* Hexdecimal */ - r = 16; break; - default: /* Unknown type (pass-through) */ - putc_bfd(&pb, c); continue; - } - - /* Get an argument and put it in numeral */ - v = (f & 4) ? (DWORD)va_arg(arp, long) : ((d == 'D') ? (DWORD)(long)va_arg(arp, int) : (DWORD)va_arg(arp, unsigned int)); - if (d == 'D' && (v & 0x80000000)) { - v = 0 - v; - f |= 8; - } - i = 0; - do { - d = (TCHAR)(v % r); v /= r; - if (d > 9) d += (c == 'x') ? 0x27 : 0x07; - s[i++] = d + '0'; - } while (v && i < sizeof s / sizeof s[0]); - if (f & 8) s[i++] = '-'; - j = i; d = (f & 1) ? '0' : ' '; - while (!(f & 2) && j++ < w) putc_bfd(&pb, d); - do putc_bfd(&pb, s[--i]); while (i); - while (j++ < w) putc_bfd(&pb, d); - } - - va_end(arp); - - if ( pb.idx >= 0 /* Flush buffered characters to the file */ - && f_write(pb.fp, pb.buf, (UINT)pb.idx, &nw) == FR_OK - && (UINT)pb.idx == nw) return pb.nchr; - return EOF; -} - -#endif /* !_FS_READONLY */ -#endif /* _USE_STRFUNC */ diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/cc932.c b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/cc932.c deleted file mode 100644 index 9a8d035..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/cc932.c +++ /dev/null @@ -1,3829 +0,0 @@ -/*------------------------------------------------------------------------*/ -/* Unicode - OEM code bidirectional converter (C)ChaN, 2015 */ -/* CP932 (Japanese Shift-JIS) */ -/*------------------------------------------------------------------------*/ - -#include "ff.h" - -#define _TINY_TABLE 0 - -#if !_USE_LFN || _CODE_PAGE != 932 -#error This file is not needed in current configuration. Remove from the project. -#endif - - -static -const WCHAR uni2sjis[] = { -/* Unicode - Sjis, Unicode - Sjis, Unicode - Sjis, Unicode - Sjis, */ - 0x00A7, 0x8198, 0x00A8, 0x814E, 0x00B0, 0x818B, 0x00B1, 0x817D, - 0x00B4, 0x814C, 0x00B6, 0x81F7, 0x00D7, 0x817E, 0x00F7, 0x8180, - 0x0391, 0x839F, 0x0392, 0x83A0, 0x0393, 0x83A1, 0x0394, 0x83A2, - 0x0395, 0x83A3, 0x0396, 0x83A4, 0x0397, 0x83A5, 0x0398, 0x83A6, - 0x0399, 0x83A7, 0x039A, 0x83A8, 0x039B, 0x83A9, 0x039C, 0x83AA, - 0x039D, 0x83AB, 0x039E, 0x83AC, 0x039F, 0x83AD, 0x03A0, 0x83AE, - 0x03A1, 0x83AF, 0x03A3, 0x83B0, 0x03A4, 0x83B1, 0x03A5, 0x83B2, - 0x03A6, 0x83B3, 0x03A7, 0x83B4, 0x03A8, 0x83B5, 0x03A9, 0x83B6, - 0x03B1, 0x83BF, 0x03B2, 0x83C0, 0x03B3, 0x83C1, 0x03B4, 0x83C2, - 0x03B5, 0x83C3, 0x03B6, 0x83C4, 0x03B7, 0x83C5, 0x03B8, 0x83C6, - 0x03B9, 0x83C7, 0x03BA, 0x83C8, 0x03BB, 0x83C9, 0x03BC, 0x83CA, - 0x03BD, 0x83CB, 0x03BE, 0x83CC, 0x03BF, 0x83CD, 0x03C0, 0x83CE, - 0x03C1, 0x83CF, 0x03C3, 0x83D0, 0x03C4, 0x83D1, 0x03C5, 0x83D2, - 0x03C6, 0x83D3, 0x03C7, 0x83D4, 0x03C8, 0x83D5, 0x03C9, 0x83D6, - 0x0401, 0x8446, 0x0410, 0x8440, 0x0411, 0x8441, 0x0412, 0x8442, - 0x0413, 0x8443, 0x0414, 0x8444, 0x0415, 0x8445, 0x0416, 0x8447, - 0x0417, 0x8448, 0x0418, 0x8449, 0x0419, 0x844A, 0x041A, 0x844B, - 0x041B, 0x844C, 0x041C, 0x844D, 0x041D, 0x844E, 0x041E, 0x844F, - 0x041F, 0x8450, 0x0420, 0x8451, 0x0421, 0x8452, 0x0422, 0x8453, - 0x0423, 0x8454, 0x0424, 0x8455, 0x0425, 0x8456, 0x0426, 0x8457, - 0x0427, 0x8458, 0x0428, 0x8459, 0x0429, 0x845A, 0x042A, 0x845B, - 0x042B, 0x845C, 0x042C, 0x845D, 0x042D, 0x845E, 0x042E, 0x845F, - 0x042F, 0x8460, 0x0430, 0x8470, 0x0431, 0x8471, 0x0432, 0x8472, - 0x0433, 0x8473, 0x0434, 0x8474, 0x0435, 0x8475, 0x0436, 0x8477, - 0x0437, 0x8478, 0x0438, 0x8479, 0x0439, 0x847A, 0x043A, 0x847B, - 0x043B, 0x847C, 0x043C, 0x847D, 0x043D, 0x847E, 0x043E, 0x8480, - 0x043F, 0x8481, 0x0440, 0x8482, 0x0441, 0x8483, 0x0442, 0x8484, - 0x0443, 0x8485, 0x0444, 0x8486, 0x0445, 0x8487, 0x0446, 0x8488, - 0x0447, 0x8489, 0x0448, 0x848A, 0x0449, 0x848B, 0x044A, 0x848C, - 0x044B, 0x848D, 0x044C, 0x848E, 0x044D, 0x848F, 0x044E, 0x8490, - 0x044F, 0x8491, 0x0451, 0x8476, 0x2010, 0x815D, 0x2015, 0x815C, - 0x2018, 0x8165, 0x2019, 0x8166, 0x201C, 0x8167, 0x201D, 0x8168, - 0x2020, 0x81F5, 0x2021, 0x81F6, 0x2025, 0x8164, 0x2026, 0x8163, - 0x2030, 0x81F1, 0x2032, 0x818C, 0x2033, 0x818D, 0x203B, 0x81A6, - 0x2103, 0x818E, 0x2116, 0x8782, 0x2121, 0x8784, 0x212B, 0x81F0, - 0x2160, 0x8754, 0x2161, 0x8755, 0x2162, 0x8756, 0x2163, 0x8757, - 0x2164, 0x8758, 0x2165, 0x8759, 0x2166, 0x875A, 0x2167, 0x875B, - 0x2168, 0x875C, 0x2169, 0x875D, 0x2170, 0xFA40, 0x2171, 0xFA41, - 0x2172, 0xFA42, 0x2173, 0xFA43, 0x2174, 0xFA44, 0x2175, 0xFA45, - 0x2176, 0xFA46, 0x2177, 0xFA47, 0x2178, 0xFA48, 0x2179, 0xFA49, - 0x2190, 0x81A9, 0x2191, 0x81AA, 0x2192, 0x81A8, 0x2193, 0x81AB, - 0x21D2, 0x81CB, 0x21D4, 0x81CC, 0x2200, 0x81CD, 0x2202, 0x81DD, - 0x2203, 0x81CE, 0x2207, 0x81DE, 0x2208, 0x81B8, 0x220B, 0x81B9, - 0x2211, 0x8794, 0x221A, 0x81E3, 0x221D, 0x81E5, 0x221E, 0x8187, - 0x221F, 0x8798, 0x2220, 0x81DA, 0x2225, 0x8161, 0x2227, 0x81C8, - 0x2228, 0x81C9, 0x2229, 0x81BF, 0x222A, 0x81BE, 0x222B, 0x81E7, - 0x222C, 0x81E8, 0x222E, 0x8793, 0x2234, 0x8188, 0x2235, 0x81E6, - 0x223D, 0x81E4, 0x2252, 0x81E0, 0x2260, 0x8182, 0x2261, 0x81DF, - 0x2266, 0x8185, 0x2267, 0x8186, 0x226A, 0x81E1, 0x226B, 0x81E2, - 0x2282, 0x81BC, 0x2283, 0x81BD, 0x2286, 0x81BA, 0x2287, 0x81BB, - 0x22A5, 0x81DB, 0x22BF, 0x8799, 0x2312, 0x81DC, 0x2460, 0x8740, - 0x2461, 0x8741, 0x2462, 0x8742, 0x2463, 0x8743, 0x2464, 0x8744, - 0x2465, 0x8745, 0x2466, 0x8746, 0x2467, 0x8747, 0x2468, 0x8748, - 0x2469, 0x8749, 0x246A, 0x874A, 0x246B, 0x874B, 0x246C, 0x874C, - 0x246D, 0x874D, 0x246E, 0x874E, 0x246F, 0x874F, 0x2470, 0x8750, - 0x2471, 0x8751, 0x2472, 0x8752, 0x2473, 0x8753, 0x2500, 0x849F, - 0x2501, 0x84AA, 0x2502, 0x84A0, 0x2503, 0x84AB, 0x250C, 0x84A1, - 0x250F, 0x84AC, 0x2510, 0x84A2, 0x2513, 0x84AD, 0x2514, 0x84A4, - 0x2517, 0x84AF, 0x2518, 0x84A3, 0x251B, 0x84AE, 0x251C, 0x84A5, - 0x251D, 0x84BA, 0x2520, 0x84B5, 0x2523, 0x84B0, 0x2524, 0x84A7, - 0x2525, 0x84BC, 0x2528, 0x84B7, 0x252B, 0x84B2, 0x252C, 0x84A6, - 0x252F, 0x84B6, 0x2530, 0x84BB, 0x2533, 0x84B1, 0x2534, 0x84A8, - 0x2537, 0x84B8, 0x2538, 0x84BD, 0x253B, 0x84B3, 0x253C, 0x84A9, - 0x253F, 0x84B9, 0x2542, 0x84BE, 0x254B, 0x84B4, 0x25A0, 0x81A1, - 0x25A1, 0x81A0, 0x25B2, 0x81A3, 0x25B3, 0x81A2, 0x25BC, 0x81A5, - 0x25BD, 0x81A4, 0x25C6, 0x819F, 0x25C7, 0x819E, 0x25CB, 0x819B, - 0x25CE, 0x819D, 0x25CF, 0x819C, 0x25EF, 0x81FC, 0x2605, 0x819A, - 0x2606, 0x8199, 0x2640, 0x818A, 0x2642, 0x8189, 0x266A, 0x81F4, - 0x266D, 0x81F3, 0x266F, 0x81F2, 0x3000, 0x8140, 0x3001, 0x8141, - 0x3002, 0x8142, 0x3003, 0x8156, 0x3005, 0x8158, 0x3006, 0x8159, - 0x3007, 0x815A, 0x3008, 0x8171, 0x3009, 0x8172, 0x300A, 0x8173, - 0x300B, 0x8174, 0x300C, 0x8175, 0x300D, 0x8176, 0x300E, 0x8177, - 0x300F, 0x8178, 0x3010, 0x8179, 0x3011, 0x817A, 0x3012, 0x81A7, - 0x3013, 0x81AC, 0x3014, 0x816B, 0x3015, 0x816C, 0x301D, 0x8780, - 0x301F, 0x8781, 0x3041, 0x829F, 0x3042, 0x82A0, 0x3043, 0x82A1, - 0x3044, 0x82A2, 0x3045, 0x82A3, 0x3046, 0x82A4, 0x3047, 0x82A5, - 0x3048, 0x82A6, 0x3049, 0x82A7, 0x304A, 0x82A8, 0x304B, 0x82A9, - 0x304C, 0x82AA, 0x304D, 0x82AB, 0x304E, 0x82AC, 0x304F, 0x82AD, - 0x3050, 0x82AE, 0x3051, 0x82AF, 0x3052, 0x82B0, 0x3053, 0x82B1, - 0x3054, 0x82B2, 0x3055, 0x82B3, 0x3056, 0x82B4, 0x3057, 0x82B5, - 0x3058, 0x82B6, 0x3059, 0x82B7, 0x305A, 0x82B8, 0x305B, 0x82B9, - 0x305C, 0x82BA, 0x305D, 0x82BB, 0x305E, 0x82BC, 0x305F, 0x82BD, - 0x3060, 0x82BE, 0x3061, 0x82BF, 0x3062, 0x82C0, 0x3063, 0x82C1, - 0x3064, 0x82C2, 0x3065, 0x82C3, 0x3066, 0x82C4, 0x3067, 0x82C5, - 0x3068, 0x82C6, 0x3069, 0x82C7, 0x306A, 0x82C8, 0x306B, 0x82C9, - 0x306C, 0x82CA, 0x306D, 0x82CB, 0x306E, 0x82CC, 0x306F, 0x82CD, - 0x3070, 0x82CE, 0x3071, 0x82CF, 0x3072, 0x82D0, 0x3073, 0x82D1, - 0x3074, 0x82D2, 0x3075, 0x82D3, 0x3076, 0x82D4, 0x3077, 0x82D5, - 0x3078, 0x82D6, 0x3079, 0x82D7, 0x307A, 0x82D8, 0x307B, 0x82D9, - 0x307C, 0x82DA, 0x307D, 0x82DB, 0x307E, 0x82DC, 0x307F, 0x82DD, - 0x3080, 0x82DE, 0x3081, 0x82DF, 0x3082, 0x82E0, 0x3083, 0x82E1, - 0x3084, 0x82E2, 0x3085, 0x82E3, 0x3086, 0x82E4, 0x3087, 0x82E5, - 0x3088, 0x82E6, 0x3089, 0x82E7, 0x308A, 0x82E8, 0x308B, 0x82E9, - 0x308C, 0x82EA, 0x308D, 0x82EB, 0x308E, 0x82EC, 0x308F, 0x82ED, - 0x3090, 0x82EE, 0x3091, 0x82EF, 0x3092, 0x82F0, 0x3093, 0x82F1, - 0x309B, 0x814A, 0x309C, 0x814B, 0x309D, 0x8154, 0x309E, 0x8155, - 0x30A1, 0x8340, 0x30A2, 0x8341, 0x30A3, 0x8342, 0x30A4, 0x8343, - 0x30A5, 0x8344, 0x30A6, 0x8345, 0x30A7, 0x8346, 0x30A8, 0x8347, - 0x30A9, 0x8348, 0x30AA, 0x8349, 0x30AB, 0x834A, 0x30AC, 0x834B, - 0x30AD, 0x834C, 0x30AE, 0x834D, 0x30AF, 0x834E, 0x30B0, 0x834F, - 0x30B1, 0x8350, 0x30B2, 0x8351, 0x30B3, 0x8352, 0x30B4, 0x8353, - 0x30B5, 0x8354, 0x30B6, 0x8355, 0x30B7, 0x8356, 0x30B8, 0x8357, - 0x30B9, 0x8358, 0x30BA, 0x8359, 0x30BB, 0x835A, 0x30BC, 0x835B, - 0x30BD, 0x835C, 0x30BE, 0x835D, 0x30BF, 0x835E, 0x30C0, 0x835F, - 0x30C1, 0x8360, 0x30C2, 0x8361, 0x30C3, 0x8362, 0x30C4, 0x8363, - 0x30C5, 0x8364, 0x30C6, 0x8365, 0x30C7, 0x8366, 0x30C8, 0x8367, - 0x30C9, 0x8368, 0x30CA, 0x8369, 0x30CB, 0x836A, 0x30CC, 0x836B, - 0x30CD, 0x836C, 0x30CE, 0x836D, 0x30CF, 0x836E, 0x30D0, 0x836F, - 0x30D1, 0x8370, 0x30D2, 0x8371, 0x30D3, 0x8372, 0x30D4, 0x8373, - 0x30D5, 0x8374, 0x30D6, 0x8375, 0x30D7, 0x8376, 0x30D8, 0x8377, - 0x30D9, 0x8378, 0x30DA, 0x8379, 0x30DB, 0x837A, 0x30DC, 0x837B, - 0x30DD, 0x837C, 0x30DE, 0x837D, 0x30DF, 0x837E, 0x30E0, 0x8380, - 0x30E1, 0x8381, 0x30E2, 0x8382, 0x30E3, 0x8383, 0x30E4, 0x8384, - 0x30E5, 0x8385, 0x30E6, 0x8386, 0x30E7, 0x8387, 0x30E8, 0x8388, - 0x30E9, 0x8389, 0x30EA, 0x838A, 0x30EB, 0x838B, 0x30EC, 0x838C, - 0x30ED, 0x838D, 0x30EE, 0x838E, 0x30EF, 0x838F, 0x30F0, 0x8390, - 0x30F1, 0x8391, 0x30F2, 0x8392, 0x30F3, 0x8393, 0x30F4, 0x8394, - 0x30F5, 0x8395, 0x30F6, 0x8396, 0x30FB, 0x8145, 0x30FC, 0x815B, - 0x30FD, 0x8152, 0x30FE, 0x8153, 0x3231, 0x878A, 0x3232, 0x878B, - 0x3239, 0x878C, 0x32A4, 0x8785, 0x32A5, 0x8786, 0x32A6, 0x8787, - 0x32A7, 0x8788, 0x32A8, 0x8789, 0x3303, 0x8765, 0x330D, 0x8769, - 0x3314, 0x8760, 0x3318, 0x8763, 0x3322, 0x8761, 0x3323, 0x876B, - 0x3326, 0x876A, 0x3327, 0x8764, 0x332B, 0x876C, 0x3336, 0x8766, - 0x333B, 0x876E, 0x3349, 0x875F, 0x334A, 0x876D, 0x334D, 0x8762, - 0x3351, 0x8767, 0x3357, 0x8768, 0x337B, 0x877E, 0x337C, 0x878F, - 0x337D, 0x878E, 0x337E, 0x878D, 0x338E, 0x8772, 0x338F, 0x8773, - 0x339C, 0x876F, 0x339D, 0x8770, 0x339E, 0x8771, 0x33A1, 0x8775, - 0x33C4, 0x8774, 0x33CD, 0x8783, 0x4E00, 0x88EA, 0x4E01, 0x929A, - 0x4E03, 0x8EB5, 0x4E07, 0x969C, 0x4E08, 0x8FE4, 0x4E09, 0x8E4F, - 0x4E0A, 0x8FE3, 0x4E0B, 0x89BA, 0x4E0D, 0x9573, 0x4E0E, 0x975E, - 0x4E10, 0x98A0, 0x4E11, 0x894E, 0x4E14, 0x8A8E, 0x4E15, 0x98A1, - 0x4E16, 0x90A2, 0x4E17, 0x99C0, 0x4E18, 0x8B75, 0x4E19, 0x95B8, - 0x4E1E, 0x8FE5, 0x4E21, 0x97BC, 0x4E26, 0x95C0, 0x4E28, 0xFA68, - 0x4E2A, 0x98A2, 0x4E2D, 0x9286, 0x4E31, 0x98A3, 0x4E32, 0x8BF8, - 0x4E36, 0x98A4, 0x4E38, 0x8ADB, 0x4E39, 0x924F, 0x4E3B, 0x8EE5, - 0x4E3C, 0x98A5, 0x4E3F, 0x98A6, 0x4E42, 0x98A7, 0x4E43, 0x9454, - 0x4E45, 0x8B76, 0x4E4B, 0x9456, 0x4E4D, 0x93E1, 0x4E4E, 0x8CC1, - 0x4E4F, 0x9652, 0x4E55, 0xE568, 0x4E56, 0x98A8, 0x4E57, 0x8FE6, - 0x4E58, 0x98A9, 0x4E59, 0x89B3, 0x4E5D, 0x8BE3, 0x4E5E, 0x8CEE, - 0x4E5F, 0x96E7, 0x4E62, 0x9BA4, 0x4E71, 0x9790, 0x4E73, 0x93FB, - 0x4E7E, 0x8AA3, 0x4E80, 0x8B54, 0x4E82, 0x98AA, 0x4E85, 0x98AB, - 0x4E86, 0x97B9, 0x4E88, 0x975C, 0x4E89, 0x9188, 0x4E8A, 0x98AD, - 0x4E8B, 0x8E96, 0x4E8C, 0x93F1, 0x4E8E, 0x98B0, 0x4E91, 0x895D, - 0x4E92, 0x8CDD, 0x4E94, 0x8CDC, 0x4E95, 0x88E4, 0x4E98, 0x986A, - 0x4E99, 0x9869, 0x4E9B, 0x8DB1, 0x4E9C, 0x889F, 0x4E9E, 0x98B1, - 0x4E9F, 0x98B2, 0x4EA0, 0x98B3, 0x4EA1, 0x9653, 0x4EA2, 0x98B4, - 0x4EA4, 0x8CF0, 0x4EA5, 0x88E5, 0x4EA6, 0x9692, 0x4EA8, 0x8B9C, - 0x4EAB, 0x8B9D, 0x4EAC, 0x8B9E, 0x4EAD, 0x92E0, 0x4EAE, 0x97BA, - 0x4EB0, 0x98B5, 0x4EB3, 0x98B6, 0x4EB6, 0x98B7, 0x4EBA, 0x906C, - 0x4EC0, 0x8F59, 0x4EC1, 0x906D, 0x4EC2, 0x98BC, 0x4EC4, 0x98BA, - 0x4EC6, 0x98BB, 0x4EC7, 0x8B77, 0x4ECA, 0x8DA1, 0x4ECB, 0x89EE, - 0x4ECD, 0x98B9, 0x4ECE, 0x98B8, 0x4ECF, 0x95A7, 0x4ED4, 0x8E65, - 0x4ED5, 0x8E64, 0x4ED6, 0x91BC, 0x4ED7, 0x98BD, 0x4ED8, 0x9574, - 0x4ED9, 0x90E5, 0x4EDD, 0x8157, 0x4EDE, 0x98BE, 0x4EDF, 0x98C0, - 0x4EE1, 0xFA69, 0x4EE3, 0x91E3, 0x4EE4, 0x97DF, 0x4EE5, 0x88C8, - 0x4EED, 0x98BF, 0x4EEE, 0x89BC, 0x4EF0, 0x8BC2, 0x4EF2, 0x9287, - 0x4EF6, 0x8C8F, 0x4EF7, 0x98C1, 0x4EFB, 0x9443, 0x4EFC, 0xFA6A, - 0x4F00, 0xFA6B, 0x4F01, 0x8AE9, 0x4F03, 0xFA6C, 0x4F09, 0x98C2, - 0x4F0A, 0x88C9, 0x4F0D, 0x8CDE, 0x4F0E, 0x8AEA, 0x4F0F, 0x959A, - 0x4F10, 0x94B0, 0x4F11, 0x8B78, 0x4F1A, 0x89EF, 0x4F1C, 0x98E5, - 0x4F1D, 0x9360, 0x4F2F, 0x948C, 0x4F30, 0x98C4, 0x4F34, 0x94BA, - 0x4F36, 0x97E0, 0x4F38, 0x904C, 0x4F39, 0xFA6D, 0x4F3A, 0x8E66, - 0x4F3C, 0x8E97, 0x4F3D, 0x89BE, 0x4F43, 0x92CF, 0x4F46, 0x9241, - 0x4F47, 0x98C8, 0x4F4D, 0x88CA, 0x4F4E, 0x92E1, 0x4F4F, 0x8F5A, - 0x4F50, 0x8DB2, 0x4F51, 0x9743, 0x4F53, 0x91CC, 0x4F55, 0x89BD, - 0x4F56, 0xFA6E, 0x4F57, 0x98C7, 0x4F59, 0x975D, 0x4F5A, 0x98C3, - 0x4F5B, 0x98C5, 0x4F5C, 0x8DEC, 0x4F5D, 0x98C6, 0x4F5E, 0x9B43, - 0x4F69, 0x98CE, 0x4F6F, 0x98D1, 0x4F70, 0x98CF, 0x4F73, 0x89C0, - 0x4F75, 0x95B9, 0x4F76, 0x98C9, 0x4F7B, 0x98CD, 0x4F7C, 0x8CF1, - 0x4F7F, 0x8E67, 0x4F83, 0x8AA4, 0x4F86, 0x98D2, 0x4F88, 0x98CA, - 0x4F8A, 0xFA70, 0x4F8B, 0x97E1, 0x4F8D, 0x8E98, 0x4F8F, 0x98CB, - 0x4F91, 0x98D0, 0x4F92, 0xFA6F, 0x4F94, 0xFA72, 0x4F96, 0x98D3, - 0x4F98, 0x98CC, 0x4F9A, 0xFA71, 0x4F9B, 0x8B9F, 0x4F9D, 0x88CB, - 0x4FA0, 0x8BA0, 0x4FA1, 0x89BF, 0x4FAB, 0x9B44, 0x4FAD, 0x9699, - 0x4FAE, 0x958E, 0x4FAF, 0x8CF2, 0x4FB5, 0x904E, 0x4FB6, 0x97B5, - 0x4FBF, 0x95D6, 0x4FC2, 0x8C57, 0x4FC3, 0x91A3, 0x4FC4, 0x89E2, - 0x4FC9, 0xFA61, 0x4FCA, 0x8F72, 0x4FCD, 0xFA73, 0x4FCE, 0x98D7, - 0x4FD0, 0x98DC, 0x4FD1, 0x98DA, 0x4FD4, 0x98D5, 0x4FD7, 0x91AD, - 0x4FD8, 0x98D8, 0x4FDA, 0x98DB, 0x4FDB, 0x98D9, 0x4FDD, 0x95DB, - 0x4FDF, 0x98D6, 0x4FE1, 0x904D, 0x4FE3, 0x9693, 0x4FE4, 0x98DD, - 0x4FE5, 0x98DE, 0x4FEE, 0x8F43, 0x4FEF, 0x98EB, 0x4FF3, 0x946F, - 0x4FF5, 0x9555, 0x4FF6, 0x98E6, 0x4FF8, 0x95EE, 0x4FFA, 0x89B4, - 0x4FFE, 0x98EA, 0x4FFF, 0xFA76, 0x5005, 0x98E4, 0x5006, 0x98ED, - 0x5009, 0x9171, 0x500B, 0x8CC2, 0x500D, 0x947B, 0x500F, 0xE0C5, - 0x5011, 0x98EC, 0x5012, 0x937C, 0x5014, 0x98E1, 0x5016, 0x8CF4, - 0x5019, 0x8CF3, 0x501A, 0x98DF, 0x501E, 0xFA77, 0x501F, 0x8ED8, - 0x5021, 0x98E7, 0x5022, 0xFA75, 0x5023, 0x95ED, 0x5024, 0x926C, - 0x5025, 0x98E3, 0x5026, 0x8C91, 0x5028, 0x98E0, 0x5029, 0x98E8, - 0x502A, 0x98E2, 0x502B, 0x97CF, 0x502C, 0x98E9, 0x502D, 0x9860, - 0x5036, 0x8BE4, 0x5039, 0x8C90, 0x5040, 0xFA74, 0x5042, 0xFA7A, - 0x5043, 0x98EE, 0x5046, 0xFA78, 0x5047, 0x98EF, 0x5048, 0x98F3, - 0x5049, 0x88CC, 0x504F, 0x95CE, 0x5050, 0x98F2, 0x5055, 0x98F1, - 0x5056, 0x98F5, 0x505A, 0x98F4, 0x505C, 0x92E2, 0x5065, 0x8C92, - 0x506C, 0x98F6, 0x5070, 0xFA79, 0x5072, 0x8EC3, 0x5074, 0x91A4, - 0x5075, 0x92E3, 0x5076, 0x8BF4, 0x5078, 0x98F7, 0x507D, 0x8B55, - 0x5080, 0x98F8, 0x5085, 0x98FA, 0x508D, 0x9654, 0x5091, 0x8C86, - 0x5094, 0xFA7B, 0x5098, 0x8E50, 0x5099, 0x94F5, 0x509A, 0x98F9, - 0x50AC, 0x8DC3, 0x50AD, 0x9762, 0x50B2, 0x98FC, 0x50B3, 0x9942, - 0x50B4, 0x98FB, 0x50B5, 0x8DC2, 0x50B7, 0x8F9D, 0x50BE, 0x8C58, - 0x50C2, 0x9943, 0x50C5, 0x8BCD, 0x50C9, 0x9940, 0x50CA, 0x9941, - 0x50CD, 0x93AD, 0x50CF, 0x919C, 0x50D1, 0x8BA1, 0x50D5, 0x966C, - 0x50D6, 0x9944, 0x50D8, 0xFA7D, 0x50DA, 0x97BB, 0x50DE, 0x9945, - 0x50E3, 0x9948, 0x50E5, 0x9946, 0x50E7, 0x916D, 0x50ED, 0x9947, - 0x50EE, 0x9949, 0x50F4, 0xFA7C, 0x50F5, 0x994B, 0x50F9, 0x994A, - 0x50FB, 0x95C6, 0x5100, 0x8B56, 0x5101, 0x994D, 0x5102, 0x994E, - 0x5104, 0x89AD, 0x5109, 0x994C, 0x5112, 0x8EF2, 0x5114, 0x9951, - 0x5115, 0x9950, 0x5116, 0x994F, 0x5118, 0x98D4, 0x511A, 0x9952, - 0x511F, 0x8F9E, 0x5121, 0x9953, 0x512A, 0x9744, 0x5132, 0x96D7, - 0x5137, 0x9955, 0x513A, 0x9954, 0x513B, 0x9957, 0x513C, 0x9956, - 0x513F, 0x9958, 0x5140, 0x9959, 0x5141, 0x88F2, 0x5143, 0x8CB3, - 0x5144, 0x8C5A, 0x5145, 0x8F5B, 0x5146, 0x929B, 0x5147, 0x8BA2, - 0x5148, 0x90E6, 0x5149, 0x8CF5, 0x514A, 0xFA7E, 0x514B, 0x8D8E, - 0x514C, 0x995B, 0x514D, 0x96C6, 0x514E, 0x9365, 0x5150, 0x8E99, - 0x5152, 0x995A, 0x5154, 0x995C, 0x515A, 0x937D, 0x515C, 0x8A95, - 0x5162, 0x995D, 0x5164, 0xFA80, 0x5165, 0x93FC, 0x5168, 0x9153, - 0x5169, 0x995F, 0x516A, 0x9960, 0x516B, 0x94AA, 0x516C, 0x8CF6, - 0x516D, 0x985A, 0x516E, 0x9961, 0x5171, 0x8BA4, 0x5175, 0x95BA, - 0x5176, 0x91B4, 0x5177, 0x8BEF, 0x5178, 0x9354, 0x517C, 0x8C93, - 0x5180, 0x9962, 0x5182, 0x9963, 0x5185, 0x93E0, 0x5186, 0x897E, - 0x5189, 0x9966, 0x518A, 0x8DFB, 0x518C, 0x9965, 0x518D, 0x8DC4, - 0x518F, 0x9967, 0x5190, 0xE3EC, 0x5191, 0x9968, 0x5192, 0x9660, - 0x5193, 0x9969, 0x5195, 0x996A, 0x5196, 0x996B, 0x5197, 0x8FE7, - 0x5199, 0x8ECA, 0x519D, 0xFA81, 0x51A0, 0x8AA5, 0x51A2, 0x996E, - 0x51A4, 0x996C, 0x51A5, 0x96BB, 0x51A6, 0x996D, 0x51A8, 0x9579, - 0x51A9, 0x996F, 0x51AA, 0x9970, 0x51AB, 0x9971, 0x51AC, 0x937E, - 0x51B0, 0x9975, 0x51B1, 0x9973, 0x51B2, 0x9974, 0x51B3, 0x9972, - 0x51B4, 0x8DE1, 0x51B5, 0x9976, 0x51B6, 0x96E8, 0x51B7, 0x97E2, - 0x51BD, 0x9977, 0x51BE, 0xFA82, 0x51C4, 0x90A6, 0x51C5, 0x9978, - 0x51C6, 0x8F79, 0x51C9, 0x9979, 0x51CB, 0x929C, 0x51CC, 0x97BD, - 0x51CD, 0x9380, 0x51D6, 0x99C3, 0x51DB, 0x997A, 0x51DC, 0xEAA3, - 0x51DD, 0x8BC3, 0x51E0, 0x997B, 0x51E1, 0x967D, 0x51E6, 0x8F88, - 0x51E7, 0x91FA, 0x51E9, 0x997D, 0x51EA, 0x93E2, 0x51EC, 0xFA83, - 0x51ED, 0x997E, 0x51F0, 0x9980, 0x51F1, 0x8A4D, 0x51F5, 0x9981, - 0x51F6, 0x8BA5, 0x51F8, 0x93CA, 0x51F9, 0x899A, 0x51FA, 0x8F6F, - 0x51FD, 0x949F, 0x51FE, 0x9982, 0x5200, 0x9381, 0x5203, 0x906E, - 0x5204, 0x9983, 0x5206, 0x95AA, 0x5207, 0x90D8, 0x5208, 0x8AA0, - 0x520A, 0x8AA7, 0x520B, 0x9984, 0x520E, 0x9986, 0x5211, 0x8C59, - 0x5214, 0x9985, 0x5215, 0xFA84, 0x5217, 0x97F1, 0x521D, 0x8F89, - 0x5224, 0x94BB, 0x5225, 0x95CA, 0x5227, 0x9987, 0x5229, 0x9798, - 0x522A, 0x9988, 0x522E, 0x9989, 0x5230, 0x939E, 0x5233, 0x998A, - 0x5236, 0x90A7, 0x5237, 0x8DFC, 0x5238, 0x8C94, 0x5239, 0x998B, - 0x523A, 0x8E68, 0x523B, 0x8D8F, 0x5243, 0x92E4, 0x5244, 0x998D, - 0x5247, 0x91A5, 0x524A, 0x8DED, 0x524B, 0x998E, 0x524C, 0x998F, - 0x524D, 0x914F, 0x524F, 0x998C, 0x5254, 0x9991, 0x5256, 0x9655, - 0x525B, 0x8D84, 0x525E, 0x9990, 0x5263, 0x8C95, 0x5264, 0x8DDC, - 0x5265, 0x948D, 0x5269, 0x9994, 0x526A, 0x9992, 0x526F, 0x959B, - 0x5270, 0x8FE8, 0x5271, 0x999B, 0x5272, 0x8A84, 0x5273, 0x9995, - 0x5274, 0x9993, 0x5275, 0x916E, 0x527D, 0x9997, 0x527F, 0x9996, - 0x5283, 0x8A63, 0x5287, 0x8C80, 0x5288, 0x999C, 0x5289, 0x97AB, - 0x528D, 0x9998, 0x5291, 0x999D, 0x5292, 0x999A, 0x5294, 0x9999, - 0x529B, 0x97CD, 0x529C, 0xFA85, 0x529F, 0x8CF7, 0x52A0, 0x89C1, - 0x52A3, 0x97F2, 0x52A6, 0xFA86, 0x52A9, 0x8F95, 0x52AA, 0x9377, - 0x52AB, 0x8D85, 0x52AC, 0x99A0, 0x52AD, 0x99A1, 0x52AF, 0xFB77, - 0x52B1, 0x97E3, 0x52B4, 0x984A, 0x52B5, 0x99A3, 0x52B9, 0x8CF8, - 0x52BC, 0x99A2, 0x52BE, 0x8A4E, 0x52C0, 0xFA87, 0x52C1, 0x99A4, - 0x52C3, 0x9675, 0x52C5, 0x92BA, 0x52C7, 0x9745, 0x52C9, 0x95D7, - 0x52CD, 0x99A5, 0x52D2, 0xE8D3, 0x52D5, 0x93AE, 0x52D7, 0x99A6, - 0x52D8, 0x8AA8, 0x52D9, 0x96B1, 0x52DB, 0xFA88, 0x52DD, 0x8F9F, - 0x52DE, 0x99A7, 0x52DF, 0x95E5, 0x52E0, 0x99AB, 0x52E2, 0x90A8, - 0x52E3, 0x99A8, 0x52E4, 0x8BCE, 0x52E6, 0x99A9, 0x52E7, 0x8AA9, - 0x52F2, 0x8C4D, 0x52F3, 0x99AC, 0x52F5, 0x99AD, 0x52F8, 0x99AE, - 0x52F9, 0x99AF, 0x52FA, 0x8ED9, 0x52FE, 0x8CF9, 0x52FF, 0x96DC, - 0x5300, 0xFA89, 0x5301, 0x96E6, 0x5302, 0x93F5, 0x5305, 0x95EF, - 0x5306, 0x99B0, 0x5307, 0xFA8A, 0x5308, 0x99B1, 0x530D, 0x99B3, - 0x530F, 0x99B5, 0x5310, 0x99B4, 0x5315, 0x99B6, 0x5316, 0x89BB, - 0x5317, 0x966B, 0x5319, 0x8DFA, 0x531A, 0x99B7, 0x531D, 0x9178, - 0x5320, 0x8FA0, 0x5321, 0x8BA7, 0x5323, 0x99B8, 0x5324, 0xFA8B, - 0x532A, 0x94D9, 0x532F, 0x99B9, 0x5331, 0x99BA, 0x5333, 0x99BB, - 0x5338, 0x99BC, 0x5339, 0x9543, 0x533A, 0x8BE6, 0x533B, 0x88E3, - 0x533F, 0x93BD, 0x5340, 0x99BD, 0x5341, 0x8F5C, 0x5343, 0x90E7, - 0x5345, 0x99BF, 0x5346, 0x99BE, 0x5347, 0x8FA1, 0x5348, 0x8CDF, - 0x5349, 0x99C1, 0x534A, 0x94BC, 0x534D, 0x99C2, 0x5351, 0x94DA, - 0x5352, 0x91B2, 0x5353, 0x91EC, 0x5354, 0x8BA6, 0x5357, 0x93EC, - 0x5358, 0x9250, 0x535A, 0x948E, 0x535C, 0x966D, 0x535E, 0x99C4, - 0x5360, 0x90E8, 0x5366, 0x8C54, 0x5369, 0x99C5, 0x536E, 0x99C6, - 0x536F, 0x894B, 0x5370, 0x88F3, 0x5371, 0x8AEB, 0x5372, 0xFA8C, - 0x5373, 0x91A6, 0x5374, 0x8B70, 0x5375, 0x9791, 0x5377, 0x99C9, - 0x5378, 0x89B5, 0x537B, 0x99C8, 0x537F, 0x8BA8, 0x5382, 0x99CA, - 0x5384, 0x96EF, 0x5393, 0xFA8D, 0x5396, 0x99CB, 0x5398, 0x97D0, - 0x539A, 0x8CFA, 0x539F, 0x8CB4, 0x53A0, 0x99CC, 0x53A5, 0x99CE, - 0x53A6, 0x99CD, 0x53A8, 0x907E, 0x53A9, 0x8958, 0x53AD, 0x897D, - 0x53AE, 0x99CF, 0x53B0, 0x99D0, 0x53B2, 0xFA8E, 0x53B3, 0x8CB5, - 0x53B6, 0x99D1, 0x53BB, 0x8B8E, 0x53C2, 0x8E51, 0x53C3, 0x99D2, - 0x53C8, 0x9694, 0x53C9, 0x8DB3, 0x53CA, 0x8B79, 0x53CB, 0x9746, - 0x53CC, 0x916F, 0x53CD, 0x94BD, 0x53CE, 0x8EFB, 0x53D4, 0x8F66, - 0x53D6, 0x8EE6, 0x53D7, 0x8EF3, 0x53D9, 0x8F96, 0x53DB, 0x94BE, - 0x53DD, 0xFA8F, 0x53DF, 0x99D5, 0x53E1, 0x8962, 0x53E2, 0x9170, - 0x53E3, 0x8CFB, 0x53E4, 0x8CC3, 0x53E5, 0x8BE5, 0x53E8, 0x99D9, - 0x53E9, 0x9240, 0x53EA, 0x91FC, 0x53EB, 0x8BA9, 0x53EC, 0x8FA2, - 0x53ED, 0x99DA, 0x53EE, 0x99D8, 0x53EF, 0x89C2, 0x53F0, 0x91E4, - 0x53F1, 0x8EB6, 0x53F2, 0x8E6A, 0x53F3, 0x8945, 0x53F6, 0x8A90, - 0x53F7, 0x8D86, 0x53F8, 0x8E69, 0x53FA, 0x99DB, 0x5401, 0x99DC, - 0x5403, 0x8B68, 0x5404, 0x8A65, 0x5408, 0x8D87, 0x5409, 0x8B67, - 0x540A, 0x92DD, 0x540B, 0x8944, 0x540C, 0x93AF, 0x540D, 0x96BC, - 0x540E, 0x8D40, 0x540F, 0x9799, 0x5410, 0x9366, 0x5411, 0x8CFC, - 0x541B, 0x8C4E, 0x541D, 0x99E5, 0x541F, 0x8BE1, 0x5420, 0x9669, - 0x5426, 0x94DB, 0x5429, 0x99E4, 0x542B, 0x8ADC, 0x542C, 0x99DF, - 0x542D, 0x99E0, 0x542E, 0x99E2, 0x5436, 0x99E3, 0x5438, 0x8B7A, - 0x5439, 0x9081, 0x543B, 0x95AB, 0x543C, 0x99E1, 0x543D, 0x99DD, - 0x543E, 0x8CE1, 0x5440, 0x99DE, 0x5442, 0x9843, 0x5446, 0x95F0, - 0x5448, 0x92E6, 0x5449, 0x8CE0, 0x544A, 0x8D90, 0x544E, 0x99E6, - 0x5451, 0x93DB, 0x545F, 0x99EA, 0x5468, 0x8EFC, 0x546A, 0x8EF4, - 0x5470, 0x99ED, 0x5471, 0x99EB, 0x5473, 0x96A1, 0x5475, 0x99E8, - 0x5476, 0x99F1, 0x5477, 0x99EC, 0x547B, 0x99EF, 0x547C, 0x8CC4, - 0x547D, 0x96BD, 0x5480, 0x99F0, 0x5484, 0x99F2, 0x5486, 0x99F4, - 0x548A, 0xFA92, 0x548B, 0x8DEE, 0x548C, 0x9861, 0x548E, 0x99E9, - 0x548F, 0x99E7, 0x5490, 0x99F3, 0x5492, 0x99EE, 0x549C, 0xFA91, - 0x54A2, 0x99F6, 0x54A4, 0x9A42, 0x54A5, 0x99F8, 0x54A8, 0x99FC, - 0x54A9, 0xFA93, 0x54AB, 0x9A40, 0x54AC, 0x99F9, 0x54AF, 0x9A5D, - 0x54B2, 0x8DE7, 0x54B3, 0x8A50, 0x54B8, 0x99F7, 0x54BC, 0x9A44, - 0x54BD, 0x88F4, 0x54BE, 0x9A43, 0x54C0, 0x88A3, 0x54C1, 0x9569, - 0x54C2, 0x9A41, 0x54C4, 0x99FA, 0x54C7, 0x99F5, 0x54C8, 0x99FB, - 0x54C9, 0x8DC6, 0x54D8, 0x9A45, 0x54E1, 0x88F5, 0x54E2, 0x9A4E, - 0x54E5, 0x9A46, 0x54E6, 0x9A47, 0x54E8, 0x8FA3, 0x54E9, 0x9689, - 0x54ED, 0x9A4C, 0x54EE, 0x9A4B, 0x54F2, 0x934E, 0x54FA, 0x9A4D, - 0x54FD, 0x9A4A, 0x54FF, 0xFA94, 0x5504, 0x8953, 0x5506, 0x8DB4, - 0x5507, 0x904F, 0x550F, 0x9A48, 0x5510, 0x9382, 0x5514, 0x9A49, - 0x5516, 0x88A0, 0x552E, 0x9A53, 0x552F, 0x9742, 0x5531, 0x8FA5, - 0x5533, 0x9A59, 0x5538, 0x9A58, 0x5539, 0x9A4F, 0x553E, 0x91C1, - 0x5540, 0x9A50, 0x5544, 0x91ED, 0x5545, 0x9A55, 0x5546, 0x8FA4, - 0x554C, 0x9A52, 0x554F, 0x96E2, 0x5553, 0x8C5B, 0x5556, 0x9A56, - 0x5557, 0x9A57, 0x555C, 0x9A54, 0x555D, 0x9A5A, 0x5563, 0x9A51, - 0x557B, 0x9A60, 0x557C, 0x9A65, 0x557E, 0x9A61, 0x5580, 0x9A5C, - 0x5583, 0x9A66, 0x5584, 0x9150, 0x5586, 0xFA95, 0x5587, 0x9A68, - 0x5589, 0x8D41, 0x558A, 0x9A5E, 0x558B, 0x929D, 0x5598, 0x9A62, - 0x5599, 0x9A5B, 0x559A, 0x8AAB, 0x559C, 0x8AEC, 0x559D, 0x8A85, - 0x559E, 0x9A63, 0x559F, 0x9A5F, 0x55A7, 0x8C96, 0x55A8, 0x9A69, - 0x55A9, 0x9A67, 0x55AA, 0x9172, 0x55AB, 0x8B69, 0x55AC, 0x8BAA, - 0x55AE, 0x9A64, 0x55B0, 0x8BF2, 0x55B6, 0x8963, 0x55C4, 0x9A6D, - 0x55C5, 0x9A6B, 0x55C7, 0x9AA5, 0x55D4, 0x9A70, 0x55DA, 0x9A6A, - 0x55DC, 0x9A6E, 0x55DF, 0x9A6C, 0x55E3, 0x8E6B, 0x55E4, 0x9A6F, - 0x55F7, 0x9A72, 0x55F9, 0x9A77, 0x55FD, 0x9A75, 0x55FE, 0x9A74, - 0x5606, 0x9251, 0x5609, 0x89C3, 0x5614, 0x9A71, 0x5616, 0x9A73, - 0x5617, 0x8FA6, 0x5618, 0x8952, 0x561B, 0x9A76, 0x5629, 0x89DC, - 0x562F, 0x9A82, 0x5631, 0x8FFA, 0x5632, 0x9A7D, 0x5634, 0x9A7B, - 0x5636, 0x9A7C, 0x5638, 0x9A7E, 0x5642, 0x895C, 0x564C, 0x9158, - 0x564E, 0x9A78, 0x5650, 0x9A79, 0x565B, 0x8A9A, 0x5664, 0x9A81, - 0x5668, 0x8AED, 0x566A, 0x9A84, 0x566B, 0x9A80, 0x566C, 0x9A83, - 0x5674, 0x95AC, 0x5678, 0x93D3, 0x567A, 0x94B6, 0x5680, 0x9A86, - 0x5686, 0x9A85, 0x5687, 0x8A64, 0x568A, 0x9A87, 0x568F, 0x9A8A, - 0x5694, 0x9A89, 0x56A0, 0x9A88, 0x56A2, 0x9458, 0x56A5, 0x9A8B, - 0x56AE, 0x9A8C, 0x56B4, 0x9A8E, 0x56B6, 0x9A8D, 0x56BC, 0x9A90, - 0x56C0, 0x9A93, 0x56C1, 0x9A91, 0x56C2, 0x9A8F, 0x56C3, 0x9A92, - 0x56C8, 0x9A94, 0x56CE, 0x9A95, 0x56D1, 0x9A96, 0x56D3, 0x9A97, - 0x56D7, 0x9A98, 0x56D8, 0x9964, 0x56DA, 0x8EFA, 0x56DB, 0x8E6C, - 0x56DE, 0x89F1, 0x56E0, 0x88F6, 0x56E3, 0x9263, 0x56EE, 0x9A99, - 0x56F0, 0x8DA2, 0x56F2, 0x88CD, 0x56F3, 0x907D, 0x56F9, 0x9A9A, - 0x56FA, 0x8CC5, 0x56FD, 0x8D91, 0x56FF, 0x9A9C, 0x5700, 0x9A9B, - 0x5703, 0x95DE, 0x5704, 0x9A9D, 0x5708, 0x9A9F, 0x5709, 0x9A9E, - 0x570B, 0x9AA0, 0x570D, 0x9AA1, 0x570F, 0x8C97, 0x5712, 0x8980, - 0x5713, 0x9AA2, 0x5716, 0x9AA4, 0x5718, 0x9AA3, 0x571C, 0x9AA6, - 0x571F, 0x9379, 0x5726, 0x9AA7, 0x5727, 0x88B3, 0x5728, 0x8DDD, - 0x572D, 0x8C5C, 0x5730, 0x926E, 0x5737, 0x9AA8, 0x5738, 0x9AA9, - 0x573B, 0x9AAB, 0x5740, 0x9AAC, 0x5742, 0x8DE2, 0x5747, 0x8BCF, - 0x574A, 0x9656, 0x574E, 0x9AAA, 0x574F, 0x9AAD, 0x5750, 0x8DBF, - 0x5751, 0x8D42, 0x5759, 0xFA96, 0x5761, 0x9AB1, 0x5764, 0x8DA3, - 0x5765, 0xFA97, 0x5766, 0x9252, 0x5769, 0x9AAE, 0x576A, 0x92D8, - 0x577F, 0x9AB2, 0x5782, 0x9082, 0x5788, 0x9AB0, 0x5789, 0x9AB3, - 0x578B, 0x8C5E, 0x5793, 0x9AB4, 0x57A0, 0x9AB5, 0x57A2, 0x8D43, - 0x57A3, 0x8A5F, 0x57A4, 0x9AB7, 0x57AA, 0x9AB8, 0x57AC, 0xFA98, - 0x57B0, 0x9AB9, 0x57B3, 0x9AB6, 0x57C0, 0x9AAF, 0x57C3, 0x9ABA, - 0x57C6, 0x9ABB, 0x57C7, 0xFA9A, 0x57C8, 0xFA99, 0x57CB, 0x9684, - 0x57CE, 0x8FE9, 0x57D2, 0x9ABD, 0x57D3, 0x9ABE, 0x57D4, 0x9ABC, - 0x57D6, 0x9AC0, 0x57DC, 0x9457, 0x57DF, 0x88E6, 0x57E0, 0x9575, - 0x57E3, 0x9AC1, 0x57F4, 0x8FFB, 0x57F7, 0x8EB7, 0x57F9, 0x947C, - 0x57FA, 0x8AEE, 0x57FC, 0x8DE9, 0x5800, 0x9678, 0x5802, 0x93B0, - 0x5805, 0x8C98, 0x5806, 0x91CD, 0x580A, 0x9ABF, 0x580B, 0x9AC2, - 0x5815, 0x91C2, 0x5819, 0x9AC3, 0x581D, 0x9AC4, 0x5821, 0x9AC6, - 0x5824, 0x92E7, 0x582A, 0x8AAC, 0x582F, 0xEA9F, 0x5830, 0x8981, - 0x5831, 0x95F1, 0x5834, 0x8FEA, 0x5835, 0x9367, 0x583A, 0x8DE4, - 0x583D, 0x9ACC, 0x5840, 0x95BB, 0x5841, 0x97DB, 0x584A, 0x89F2, - 0x584B, 0x9AC8, 0x5851, 0x9159, 0x5852, 0x9ACB, 0x5854, 0x9383, - 0x5857, 0x9368, 0x5858, 0x9384, 0x5859, 0x94B7, 0x585A, 0x92CB, - 0x585E, 0x8DC7, 0x5862, 0x9AC7, 0x5869, 0x8996, 0x586B, 0x9355, - 0x5870, 0x9AC9, 0x5872, 0x9AC5, 0x5875, 0x906F, 0x5879, 0x9ACD, - 0x587E, 0x8F6D, 0x5883, 0x8BAB, 0x5885, 0x9ACE, 0x5893, 0x95E6, - 0x5897, 0x919D, 0x589C, 0x92C4, 0x589E, 0xFA9D, 0x589F, 0x9AD0, - 0x58A8, 0x966E, 0x58AB, 0x9AD1, 0x58AE, 0x9AD6, 0x58B2, 0xFA9E, - 0x58B3, 0x95AD, 0x58B8, 0x9AD5, 0x58B9, 0x9ACF, 0x58BA, 0x9AD2, - 0x58BB, 0x9AD4, 0x58BE, 0x8DA4, 0x58C1, 0x95C7, 0x58C5, 0x9AD7, - 0x58C7, 0x9264, 0x58CA, 0x89F3, 0x58CC, 0x8FEB, 0x58D1, 0x9AD9, - 0x58D3, 0x9AD8, 0x58D5, 0x8D88, 0x58D7, 0x9ADA, 0x58D8, 0x9ADC, - 0x58D9, 0x9ADB, 0x58DC, 0x9ADE, 0x58DE, 0x9AD3, 0x58DF, 0x9AE0, - 0x58E4, 0x9ADF, 0x58E5, 0x9ADD, 0x58EB, 0x8E6D, 0x58EC, 0x9070, - 0x58EE, 0x9173, 0x58EF, 0x9AE1, 0x58F0, 0x90BA, 0x58F1, 0x88EB, - 0x58F2, 0x9484, 0x58F7, 0x92D9, 0x58F9, 0x9AE3, 0x58FA, 0x9AE2, - 0x58FB, 0x9AE4, 0x58FC, 0x9AE5, 0x58FD, 0x9AE6, 0x5902, 0x9AE7, - 0x5909, 0x95CF, 0x590A, 0x9AE8, 0x590B, 0xFA9F, 0x590F, 0x89C4, - 0x5910, 0x9AE9, 0x5915, 0x975B, 0x5916, 0x8A4F, 0x5918, 0x99C7, - 0x5919, 0x8F67, 0x591A, 0x91BD, 0x591B, 0x9AEA, 0x591C, 0x96E9, - 0x5922, 0x96B2, 0x5925, 0x9AEC, 0x5927, 0x91E5, 0x5929, 0x9356, - 0x592A, 0x91BE, 0x592B, 0x9576, 0x592C, 0x9AED, 0x592D, 0x9AEE, - 0x592E, 0x899B, 0x5931, 0x8EB8, 0x5932, 0x9AEF, 0x5937, 0x88CE, - 0x5938, 0x9AF0, 0x593E, 0x9AF1, 0x5944, 0x8982, 0x5947, 0x8AEF, - 0x5948, 0x93DE, 0x5949, 0x95F2, 0x594E, 0x9AF5, 0x594F, 0x9174, - 0x5950, 0x9AF4, 0x5951, 0x8C5F, 0x5953, 0xFAA0, 0x5954, 0x967A, - 0x5955, 0x9AF3, 0x5957, 0x9385, 0x5958, 0x9AF7, 0x595A, 0x9AF6, - 0x595B, 0xFAA1, 0x595D, 0xFAA2, 0x5960, 0x9AF9, 0x5962, 0x9AF8, - 0x5963, 0xFAA3, 0x5965, 0x899C, 0x5967, 0x9AFA, 0x5968, 0x8FA7, - 0x5969, 0x9AFC, 0x596A, 0x9244, 0x596C, 0x9AFB, 0x596E, 0x95B1, - 0x5973, 0x8F97, 0x5974, 0x937A, 0x5978, 0x9B40, 0x597D, 0x8D44, - 0x5981, 0x9B41, 0x5982, 0x9440, 0x5983, 0x94DC, 0x5984, 0x96CF, - 0x598A, 0x9444, 0x598D, 0x9B4A, 0x5993, 0x8B57, 0x5996, 0x9764, - 0x5999, 0x96AD, 0x599B, 0x9BAA, 0x599D, 0x9B42, 0x59A3, 0x9B45, - 0x59A4, 0xFAA4, 0x59A5, 0x91C3, 0x59A8, 0x9657, 0x59AC, 0x9369, - 0x59B2, 0x9B46, 0x59B9, 0x9685, 0x59BA, 0xFAA5, 0x59BB, 0x8DC8, - 0x59BE, 0x8FA8, 0x59C6, 0x9B47, 0x59C9, 0x8E6F, 0x59CB, 0x8E6E, - 0x59D0, 0x88B7, 0x59D1, 0x8CC6, 0x59D3, 0x90A9, 0x59D4, 0x88CF, - 0x59D9, 0x9B4B, 0x59DA, 0x9B4C, 0x59DC, 0x9B49, 0x59E5, 0x8957, - 0x59E6, 0x8AAD, 0x59E8, 0x9B48, 0x59EA, 0x96C3, 0x59EB, 0x9550, - 0x59F6, 0x88A6, 0x59FB, 0x88F7, 0x59FF, 0x8E70, 0x5A01, 0x88D0, - 0x5A03, 0x88A1, 0x5A09, 0x9B51, 0x5A11, 0x9B4F, 0x5A18, 0x96BA, - 0x5A1A, 0x9B52, 0x5A1C, 0x9B50, 0x5A1F, 0x9B4E, 0x5A20, 0x9050, - 0x5A25, 0x9B4D, 0x5A29, 0x95D8, 0x5A2F, 0x8CE2, 0x5A35, 0x9B56, - 0x5A36, 0x9B57, 0x5A3C, 0x8FA9, 0x5A40, 0x9B53, 0x5A41, 0x984B, - 0x5A46, 0x946B, 0x5A49, 0x9B55, 0x5A5A, 0x8DA5, 0x5A62, 0x9B58, - 0x5A66, 0x9577, 0x5A6A, 0x9B59, 0x5A6C, 0x9B54, 0x5A7F, 0x96B9, - 0x5A92, 0x947D, 0x5A9A, 0x9B5A, 0x5A9B, 0x9551, 0x5ABC, 0x9B5B, - 0x5ABD, 0x9B5F, 0x5ABE, 0x9B5C, 0x5AC1, 0x89C5, 0x5AC2, 0x9B5E, - 0x5AC9, 0x8EB9, 0x5ACB, 0x9B5D, 0x5ACC, 0x8C99, 0x5AD0, 0x9B6B, - 0x5AD6, 0x9B64, 0x5AD7, 0x9B61, 0x5AE1, 0x9284, 0x5AE3, 0x9B60, - 0x5AE6, 0x9B62, 0x5AE9, 0x9B63, 0x5AFA, 0x9B65, 0x5AFB, 0x9B66, - 0x5B09, 0x8AF0, 0x5B0B, 0x9B68, 0x5B0C, 0x9B67, 0x5B16, 0x9B69, - 0x5B22, 0x8FEC, 0x5B2A, 0x9B6C, 0x5B2C, 0x92DA, 0x5B30, 0x8964, - 0x5B32, 0x9B6A, 0x5B36, 0x9B6D, 0x5B3E, 0x9B6E, 0x5B40, 0x9B71, - 0x5B43, 0x9B6F, 0x5B45, 0x9B70, 0x5B50, 0x8E71, 0x5B51, 0x9B72, - 0x5B54, 0x8D45, 0x5B55, 0x9B73, 0x5B56, 0xFAA6, 0x5B57, 0x8E9A, - 0x5B58, 0x91B6, 0x5B5A, 0x9B74, 0x5B5B, 0x9B75, 0x5B5C, 0x8E79, - 0x5B5D, 0x8D46, 0x5B5F, 0x96D0, 0x5B63, 0x8B47, 0x5B64, 0x8CC7, - 0x5B65, 0x9B76, 0x5B66, 0x8A77, 0x5B69, 0x9B77, 0x5B6B, 0x91B7, - 0x5B70, 0x9B78, 0x5B71, 0x9BA1, 0x5B73, 0x9B79, 0x5B75, 0x9B7A, - 0x5B78, 0x9B7B, 0x5B7A, 0x9B7D, 0x5B80, 0x9B7E, 0x5B83, 0x9B80, - 0x5B85, 0x91EE, 0x5B87, 0x8946, 0x5B88, 0x8EE7, 0x5B89, 0x88C0, - 0x5B8B, 0x9176, 0x5B8C, 0x8AAE, 0x5B8D, 0x8EB3, 0x5B8F, 0x8D47, - 0x5B95, 0x9386, 0x5B97, 0x8F40, 0x5B98, 0x8AAF, 0x5B99, 0x9288, - 0x5B9A, 0x92E8, 0x5B9B, 0x88B6, 0x5B9C, 0x8B58, 0x5B9D, 0x95F3, - 0x5B9F, 0x8EC0, 0x5BA2, 0x8B71, 0x5BA3, 0x90E9, 0x5BA4, 0x8EBA, - 0x5BA5, 0x9747, 0x5BA6, 0x9B81, 0x5BAE, 0x8B7B, 0x5BB0, 0x8DC9, - 0x5BB3, 0x8A51, 0x5BB4, 0x8983, 0x5BB5, 0x8FAA, 0x5BB6, 0x89C6, - 0x5BB8, 0x9B82, 0x5BB9, 0x9765, 0x5BBF, 0x8F68, 0x5BC0, 0xFAA7, - 0x5BC2, 0x8EE2, 0x5BC3, 0x9B83, 0x5BC4, 0x8AF1, 0x5BC5, 0x93D0, - 0x5BC6, 0x96A7, 0x5BC7, 0x9B84, 0x5BC9, 0x9B85, 0x5BCC, 0x9578, - 0x5BD0, 0x9B87, 0x5BD2, 0x8AA6, 0x5BD3, 0x8BF5, 0x5BD4, 0x9B86, - 0x5BD8, 0xFAA9, 0x5BDB, 0x8AB0, 0x5BDD, 0x9051, 0x5BDE, 0x9B8B, - 0x5BDF, 0x8E40, 0x5BE1, 0x89C7, 0x5BE2, 0x9B8A, 0x5BE4, 0x9B88, - 0x5BE5, 0x9B8C, 0x5BE6, 0x9B89, 0x5BE7, 0x944A, 0x5BE8, 0x9ECB, - 0x5BE9, 0x9052, 0x5BEB, 0x9B8D, 0x5BEC, 0xFAAA, 0x5BEE, 0x97BE, - 0x5BF0, 0x9B8E, 0x5BF3, 0x9B90, 0x5BF5, 0x929E, 0x5BF6, 0x9B8F, - 0x5BF8, 0x90A1, 0x5BFA, 0x8E9B, 0x5BFE, 0x91CE, 0x5BFF, 0x8EF5, - 0x5C01, 0x9595, 0x5C02, 0x90EA, 0x5C04, 0x8ECB, 0x5C05, 0x9B91, - 0x5C06, 0x8FAB, 0x5C07, 0x9B92, 0x5C08, 0x9B93, 0x5C09, 0x88D1, - 0x5C0A, 0x91B8, 0x5C0B, 0x9071, 0x5C0D, 0x9B94, 0x5C0E, 0x93B1, - 0x5C0F, 0x8FAC, 0x5C11, 0x8FAD, 0x5C13, 0x9B95, 0x5C16, 0x90EB, - 0x5C1A, 0x8FAE, 0x5C1E, 0xFAAB, 0x5C20, 0x9B96, 0x5C22, 0x9B97, - 0x5C24, 0x96DE, 0x5C28, 0x9B98, 0x5C2D, 0x8BC4, 0x5C31, 0x8F41, - 0x5C38, 0x9B99, 0x5C39, 0x9B9A, 0x5C3A, 0x8EDA, 0x5C3B, 0x904B, - 0x5C3C, 0x93F2, 0x5C3D, 0x9073, 0x5C3E, 0x94F6, 0x5C3F, 0x9441, - 0x5C40, 0x8BC7, 0x5C41, 0x9B9B, 0x5C45, 0x8B8F, 0x5C46, 0x9B9C, - 0x5C48, 0x8BFC, 0x5C4A, 0x93CD, 0x5C4B, 0x89AE, 0x5C4D, 0x8E72, - 0x5C4E, 0x9B9D, 0x5C4F, 0x9BA0, 0x5C50, 0x9B9F, 0x5C51, 0x8BFB, - 0x5C53, 0x9B9E, 0x5C55, 0x9357, 0x5C5E, 0x91AE, 0x5C60, 0x936A, - 0x5C61, 0x8EC6, 0x5C64, 0x9177, 0x5C65, 0x979A, 0x5C6C, 0x9BA2, - 0x5C6E, 0x9BA3, 0x5C6F, 0x93D4, 0x5C71, 0x8E52, 0x5C76, 0x9BA5, - 0x5C79, 0x9BA6, 0x5C8C, 0x9BA7, 0x5C90, 0x8AF2, 0x5C91, 0x9BA8, - 0x5C94, 0x9BA9, 0x5CA1, 0x89AA, 0x5CA6, 0xFAAC, 0x5CA8, 0x915A, - 0x5CA9, 0x8AE2, 0x5CAB, 0x9BAB, 0x5CAC, 0x96A6, 0x5CB1, 0x91D0, - 0x5CB3, 0x8A78, 0x5CB6, 0x9BAD, 0x5CB7, 0x9BAF, 0x5CB8, 0x8ADD, - 0x5CBA, 0xFAAD, 0x5CBB, 0x9BAC, 0x5CBC, 0x9BAE, 0x5CBE, 0x9BB1, - 0x5CC5, 0x9BB0, 0x5CC7, 0x9BB2, 0x5CD9, 0x9BB3, 0x5CE0, 0x93BB, - 0x5CE1, 0x8BAC, 0x5CE8, 0x89E3, 0x5CE9, 0x9BB4, 0x5CEA, 0x9BB9, - 0x5CED, 0x9BB7, 0x5CEF, 0x95F5, 0x5CF0, 0x95F4, 0x5CF5, 0xFAAE, - 0x5CF6, 0x9387, 0x5CFA, 0x9BB6, 0x5CFB, 0x8F73, 0x5CFD, 0x9BB5, - 0x5D07, 0x9092, 0x5D0B, 0x9BBA, 0x5D0E, 0x8DE8, 0x5D11, 0x9BC0, - 0x5D14, 0x9BC1, 0x5D15, 0x9BBB, 0x5D16, 0x8A52, 0x5D17, 0x9BBC, - 0x5D18, 0x9BC5, 0x5D19, 0x9BC4, 0x5D1A, 0x9BC3, 0x5D1B, 0x9BBF, - 0x5D1F, 0x9BBE, 0x5D22, 0x9BC2, 0x5D27, 0xFAAF, 0x5D29, 0x95F6, - 0x5D42, 0xFAB2, 0x5D4B, 0x9BC9, 0x5D4C, 0x9BC6, 0x5D4E, 0x9BC8, - 0x5D50, 0x9792, 0x5D52, 0x9BC7, 0x5D53, 0xFAB0, 0x5D5C, 0x9BBD, - 0x5D69, 0x9093, 0x5D6C, 0x9BCA, 0x5D6D, 0xFAB3, 0x5D6F, 0x8DB5, - 0x5D73, 0x9BCB, 0x5D76, 0x9BCC, 0x5D82, 0x9BCF, 0x5D84, 0x9BCE, - 0x5D87, 0x9BCD, 0x5D8B, 0x9388, 0x5D8C, 0x9BB8, 0x5D90, 0x9BD5, - 0x5D9D, 0x9BD1, 0x5DA2, 0x9BD0, 0x5DAC, 0x9BD2, 0x5DAE, 0x9BD3, - 0x5DB7, 0x9BD6, 0x5DB8, 0xFAB4, 0x5DB9, 0xFAB5, 0x5DBA, 0x97E4, - 0x5DBC, 0x9BD7, 0x5DBD, 0x9BD4, 0x5DC9, 0x9BD8, 0x5DCC, 0x8ADE, - 0x5DCD, 0x9BD9, 0x5DD0, 0xFAB6, 0x5DD2, 0x9BDB, 0x5DD3, 0x9BDA, - 0x5DD6, 0x9BDC, 0x5DDB, 0x9BDD, 0x5DDD, 0x90EC, 0x5DDE, 0x8F42, - 0x5DE1, 0x8F84, 0x5DE3, 0x9183, 0x5DE5, 0x8D48, 0x5DE6, 0x8DB6, - 0x5DE7, 0x8D49, 0x5DE8, 0x8B90, 0x5DEB, 0x9BDE, 0x5DEE, 0x8DB7, - 0x5DF1, 0x8CC8, 0x5DF2, 0x9BDF, 0x5DF3, 0x96A4, 0x5DF4, 0x9462, - 0x5DF5, 0x9BE0, 0x5DF7, 0x8D4A, 0x5DFB, 0x8AAA, 0x5DFD, 0x9246, - 0x5DFE, 0x8BD0, 0x5E02, 0x8E73, 0x5E03, 0x957A, 0x5E06, 0x94BF, - 0x5E0B, 0x9BE1, 0x5E0C, 0x8AF3, 0x5E11, 0x9BE4, 0x5E16, 0x929F, - 0x5E19, 0x9BE3, 0x5E1A, 0x9BE2, 0x5E1B, 0x9BE5, 0x5E1D, 0x92E9, - 0x5E25, 0x9083, 0x5E2B, 0x8E74, 0x5E2D, 0x90C8, 0x5E2F, 0x91D1, - 0x5E30, 0x8B41, 0x5E33, 0x92A0, 0x5E36, 0x9BE6, 0x5E37, 0x9BE7, - 0x5E38, 0x8FED, 0x5E3D, 0x9658, 0x5E40, 0x9BEA, 0x5E43, 0x9BE9, - 0x5E44, 0x9BE8, 0x5E45, 0x959D, 0x5E47, 0x9BF1, 0x5E4C, 0x9679, - 0x5E4E, 0x9BEB, 0x5E54, 0x9BED, 0x5E55, 0x968B, 0x5E57, 0x9BEC, - 0x5E5F, 0x9BEE, 0x5E61, 0x94A6, 0x5E62, 0x9BEF, 0x5E63, 0x95BC, - 0x5E64, 0x9BF0, 0x5E72, 0x8AB1, 0x5E73, 0x95BD, 0x5E74, 0x944E, - 0x5E75, 0x9BF2, 0x5E76, 0x9BF3, 0x5E78, 0x8D4B, 0x5E79, 0x8AB2, - 0x5E7A, 0x9BF4, 0x5E7B, 0x8CB6, 0x5E7C, 0x9763, 0x5E7D, 0x9748, - 0x5E7E, 0x8AF4, 0x5E7F, 0x9BF6, 0x5E81, 0x92A1, 0x5E83, 0x8D4C, - 0x5E84, 0x8FAF, 0x5E87, 0x94DD, 0x5E8A, 0x8FB0, 0x5E8F, 0x8F98, - 0x5E95, 0x92EA, 0x5E96, 0x95F7, 0x5E97, 0x9358, 0x5E9A, 0x8D4D, - 0x5E9C, 0x957B, 0x5EA0, 0x9BF7, 0x5EA6, 0x9378, 0x5EA7, 0x8DC0, - 0x5EAB, 0x8CC9, 0x5EAD, 0x92EB, 0x5EB5, 0x88C1, 0x5EB6, 0x8F8E, - 0x5EB7, 0x8D4E, 0x5EB8, 0x9766, 0x5EC1, 0x9BF8, 0x5EC2, 0x9BF9, - 0x5EC3, 0x9470, 0x5EC8, 0x9BFA, 0x5EC9, 0x97F5, 0x5ECA, 0x984C, - 0x5ECF, 0x9BFC, 0x5ED0, 0x9BFB, 0x5ED3, 0x8A66, 0x5ED6, 0x9C40, - 0x5EDA, 0x9C43, 0x5EDB, 0x9C44, 0x5EDD, 0x9C42, 0x5EDF, 0x955F, - 0x5EE0, 0x8FB1, 0x5EE1, 0x9C46, 0x5EE2, 0x9C45, 0x5EE3, 0x9C41, - 0x5EE8, 0x9C47, 0x5EE9, 0x9C48, 0x5EEC, 0x9C49, 0x5EF0, 0x9C4C, - 0x5EF1, 0x9C4A, 0x5EF3, 0x9C4B, 0x5EF4, 0x9C4D, 0x5EF6, 0x8984, - 0x5EF7, 0x92EC, 0x5EF8, 0x9C4E, 0x5EFA, 0x8C9A, 0x5EFB, 0x89F4, - 0x5EFC, 0x9455, 0x5EFE, 0x9C4F, 0x5EFF, 0x93F9, 0x5F01, 0x95D9, - 0x5F03, 0x9C50, 0x5F04, 0x984D, 0x5F09, 0x9C51, 0x5F0A, 0x95BE, - 0x5F0B, 0x9C54, 0x5F0C, 0x989F, 0x5F0D, 0x98AF, 0x5F0F, 0x8EAE, - 0x5F10, 0x93F3, 0x5F11, 0x9C55, 0x5F13, 0x8B7C, 0x5F14, 0x92A2, - 0x5F15, 0x88F8, 0x5F16, 0x9C56, 0x5F17, 0x95A4, 0x5F18, 0x8D4F, - 0x5F1B, 0x926F, 0x5F1F, 0x92ED, 0x5F21, 0xFAB7, 0x5F25, 0x96ED, - 0x5F26, 0x8CB7, 0x5F27, 0x8CCA, 0x5F29, 0x9C57, 0x5F2D, 0x9C58, - 0x5F2F, 0x9C5E, 0x5F31, 0x8EE3, 0x5F34, 0xFAB8, 0x5F35, 0x92A3, - 0x5F37, 0x8BAD, 0x5F38, 0x9C59, 0x5F3C, 0x954A, 0x5F3E, 0x9265, - 0x5F41, 0x9C5A, 0x5F45, 0xFA67, 0x5F48, 0x9C5B, 0x5F4A, 0x8BAE, - 0x5F4C, 0x9C5C, 0x5F4E, 0x9C5D, 0x5F51, 0x9C5F, 0x5F53, 0x9396, - 0x5F56, 0x9C60, 0x5F57, 0x9C61, 0x5F59, 0x9C62, 0x5F5C, 0x9C53, - 0x5F5D, 0x9C52, 0x5F61, 0x9C63, 0x5F62, 0x8C60, 0x5F66, 0x9546, - 0x5F67, 0xFAB9, 0x5F69, 0x8DCA, 0x5F6A, 0x9556, 0x5F6B, 0x92A4, - 0x5F6C, 0x956A, 0x5F6D, 0x9C64, 0x5F70, 0x8FB2, 0x5F71, 0x8965, - 0x5F73, 0x9C65, 0x5F77, 0x9C66, 0x5F79, 0x96F0, 0x5F7C, 0x94DE, - 0x5F7F, 0x9C69, 0x5F80, 0x899D, 0x5F81, 0x90AA, 0x5F82, 0x9C68, - 0x5F83, 0x9C67, 0x5F84, 0x8C61, 0x5F85, 0x91D2, 0x5F87, 0x9C6D, - 0x5F88, 0x9C6B, 0x5F8A, 0x9C6A, 0x5F8B, 0x97A5, 0x5F8C, 0x8CE3, - 0x5F90, 0x8F99, 0x5F91, 0x9C6C, 0x5F92, 0x936B, 0x5F93, 0x8F5D, - 0x5F97, 0x93BE, 0x5F98, 0x9C70, 0x5F99, 0x9C6F, 0x5F9E, 0x9C6E, - 0x5FA0, 0x9C71, 0x5FA1, 0x8CE4, 0x5FA8, 0x9C72, 0x5FA9, 0x959C, - 0x5FAA, 0x8F7A, 0x5FAD, 0x9C73, 0x5FAE, 0x94F7, 0x5FB3, 0x93BF, - 0x5FB4, 0x92A5, 0x5FB7, 0xFABA, 0x5FB9, 0x934F, 0x5FBC, 0x9C74, - 0x5FBD, 0x8B4A, 0x5FC3, 0x9053, 0x5FC5, 0x954B, 0x5FCC, 0x8AF5, - 0x5FCD, 0x9445, 0x5FD6, 0x9C75, 0x5FD7, 0x8E75, 0x5FD8, 0x9659, - 0x5FD9, 0x965A, 0x5FDC, 0x899E, 0x5FDD, 0x9C7A, 0x5FDE, 0xFABB, - 0x5FE0, 0x9289, 0x5FE4, 0x9C77, 0x5FEB, 0x89F5, 0x5FF0, 0x9CAB, - 0x5FF1, 0x9C79, 0x5FF5, 0x944F, 0x5FF8, 0x9C78, 0x5FFB, 0x9C76, - 0x5FFD, 0x8D9A, 0x5FFF, 0x9C7C, 0x600E, 0x9C83, 0x600F, 0x9C89, - 0x6010, 0x9C81, 0x6012, 0x937B, 0x6015, 0x9C86, 0x6016, 0x957C, - 0x6019, 0x9C80, 0x601B, 0x9C85, 0x601C, 0x97E5, 0x601D, 0x8E76, - 0x6020, 0x91D3, 0x6021, 0x9C7D, 0x6025, 0x8B7D, 0x6026, 0x9C88, - 0x6027, 0x90AB, 0x6028, 0x8985, 0x6029, 0x9C82, 0x602A, 0x89F6, - 0x602B, 0x9C87, 0x602F, 0x8BAF, 0x6031, 0x9C84, 0x603A, 0x9C8A, - 0x6041, 0x9C8C, 0x6042, 0x9C96, 0x6043, 0x9C94, 0x6046, 0x9C91, - 0x604A, 0x9C90, 0x604B, 0x97F6, 0x604D, 0x9C92, 0x6050, 0x8BB0, - 0x6052, 0x8D50, 0x6055, 0x8F9A, 0x6059, 0x9C99, 0x605A, 0x9C8B, - 0x605D, 0xFABC, 0x605F, 0x9C8F, 0x6060, 0x9C7E, 0x6062, 0x89F8, - 0x6063, 0x9C93, 0x6064, 0x9C95, 0x6065, 0x9270, 0x6068, 0x8DA6, - 0x6069, 0x89B6, 0x606A, 0x9C8D, 0x606B, 0x9C98, 0x606C, 0x9C97, - 0x606D, 0x8BB1, 0x606F, 0x91A7, 0x6070, 0x8A86, 0x6075, 0x8C62, - 0x6077, 0x9C8E, 0x6081, 0x9C9A, 0x6083, 0x9C9D, 0x6084, 0x9C9F, - 0x6085, 0xFABD, 0x6089, 0x8EBB, 0x608A, 0xFABE, 0x608B, 0x9CA5, - 0x608C, 0x92EE, 0x608D, 0x9C9B, 0x6092, 0x9CA3, 0x6094, 0x89F7, - 0x6096, 0x9CA1, 0x6097, 0x9CA2, 0x609A, 0x9C9E, 0x609B, 0x9CA0, - 0x609F, 0x8CE5, 0x60A0, 0x9749, 0x60A3, 0x8AB3, 0x60A6, 0x8978, - 0x60A7, 0x9CA4, 0x60A9, 0x9459, 0x60AA, 0x88AB, 0x60B2, 0x94DF, - 0x60B3, 0x9C7B, 0x60B4, 0x9CAA, 0x60B5, 0x9CAE, 0x60B6, 0x96E3, - 0x60B8, 0x9CA7, 0x60BC, 0x9389, 0x60BD, 0x9CAC, 0x60C5, 0x8FEE, - 0x60C6, 0x9CAD, 0x60C7, 0x93D5, 0x60D1, 0x9866, 0x60D3, 0x9CA9, - 0x60D5, 0xFAC0, 0x60D8, 0x9CAF, 0x60DA, 0x8D9B, 0x60DC, 0x90C9, - 0x60DE, 0xFABF, 0x60DF, 0x88D2, 0x60E0, 0x9CA8, 0x60E1, 0x9CA6, - 0x60E3, 0x9179, 0x60E7, 0x9C9C, 0x60E8, 0x8E53, 0x60F0, 0x91C4, - 0x60F1, 0x9CBB, 0x60F2, 0xFAC2, 0x60F3, 0x917A, 0x60F4, 0x9CB6, - 0x60F6, 0x9CB3, 0x60F7, 0x9CB4, 0x60F9, 0x8EE4, 0x60FA, 0x9CB7, - 0x60FB, 0x9CBA, 0x6100, 0x9CB5, 0x6101, 0x8F44, 0x6103, 0x9CB8, - 0x6106, 0x9CB2, 0x6108, 0x96FA, 0x6109, 0x96F9, 0x610D, 0x9CBC, - 0x610E, 0x9CBD, 0x610F, 0x88D3, 0x6111, 0xFAC3, 0x6115, 0x9CB1, - 0x611A, 0x8BF0, 0x611B, 0x88A4, 0x611F, 0x8AB4, 0x6120, 0xFAC1, - 0x6121, 0x9CB9, 0x6127, 0x9CC1, 0x6128, 0x9CC0, 0x612C, 0x9CC5, - 0x6130, 0xFAC5, 0x6134, 0x9CC6, 0x6137, 0xFAC4, 0x613C, 0x9CC4, - 0x613D, 0x9CC7, 0x613E, 0x9CBF, 0x613F, 0x9CC3, 0x6142, 0x9CC8, - 0x6144, 0x9CC9, 0x6147, 0x9CBE, 0x6148, 0x8E9C, 0x614A, 0x9CC2, - 0x614B, 0x91D4, 0x614C, 0x8D51, 0x614D, 0x9CB0, 0x614E, 0x9054, - 0x6153, 0x9CD6, 0x6155, 0x95E7, 0x6158, 0x9CCC, 0x6159, 0x9CCD, - 0x615A, 0x9CCE, 0x615D, 0x9CD5, 0x615F, 0x9CD4, 0x6162, 0x969D, - 0x6163, 0x8AB5, 0x6165, 0x9CD2, 0x6167, 0x8C64, 0x6168, 0x8A53, - 0x616B, 0x9CCF, 0x616E, 0x97B6, 0x616F, 0x9CD1, 0x6170, 0x88D4, - 0x6171, 0x9CD3, 0x6173, 0x9CCA, 0x6174, 0x9CD0, 0x6175, 0x9CD7, - 0x6176, 0x8C63, 0x6177, 0x9CCB, 0x617E, 0x977C, 0x6182, 0x974A, - 0x6187, 0x9CDA, 0x618A, 0x9CDE, 0x618E, 0x919E, 0x6190, 0x97F7, - 0x6191, 0x9CDF, 0x6194, 0x9CDC, 0x6196, 0x9CD9, 0x6198, 0xFAC6, - 0x6199, 0x9CD8, 0x619A, 0x9CDD, 0x61A4, 0x95AE, 0x61A7, 0x93B2, - 0x61A9, 0x8C65, 0x61AB, 0x9CE0, 0x61AC, 0x9CDB, 0x61AE, 0x9CE1, - 0x61B2, 0x8C9B, 0x61B6, 0x89AF, 0x61BA, 0x9CE9, 0x61BE, 0x8AB6, - 0x61C3, 0x9CE7, 0x61C6, 0x9CE8, 0x61C7, 0x8DA7, 0x61C8, 0x9CE6, - 0x61C9, 0x9CE4, 0x61CA, 0x9CE3, 0x61CB, 0x9CEA, 0x61CC, 0x9CE2, - 0x61CD, 0x9CEC, 0x61D0, 0x89F9, 0x61E3, 0x9CEE, 0x61E6, 0x9CED, - 0x61F2, 0x92A6, 0x61F4, 0x9CF1, 0x61F6, 0x9CEF, 0x61F7, 0x9CE5, - 0x61F8, 0x8C9C, 0x61FA, 0x9CF0, 0x61FC, 0x9CF4, 0x61FD, 0x9CF3, - 0x61FE, 0x9CF5, 0x61FF, 0x9CF2, 0x6200, 0x9CF6, 0x6208, 0x9CF7, - 0x6209, 0x9CF8, 0x620A, 0x95E8, 0x620C, 0x9CFA, 0x620D, 0x9CF9, - 0x620E, 0x8F5E, 0x6210, 0x90AC, 0x6211, 0x89E4, 0x6212, 0x89FA, - 0x6213, 0xFAC7, 0x6214, 0x9CFB, 0x6216, 0x88BD, 0x621A, 0x90CA, - 0x621B, 0x9CFC, 0x621D, 0xE6C1, 0x621E, 0x9D40, 0x621F, 0x8C81, - 0x6221, 0x9D41, 0x6226, 0x90ED, 0x622A, 0x9D42, 0x622E, 0x9D43, - 0x622F, 0x8B59, 0x6230, 0x9D44, 0x6232, 0x9D45, 0x6233, 0x9D46, - 0x6234, 0x91D5, 0x6238, 0x8CCB, 0x623B, 0x96DF, 0x623F, 0x965B, - 0x6240, 0x8F8A, 0x6241, 0x9D47, 0x6247, 0x90EE, 0x6248, 0xE7BB, - 0x6249, 0x94E0, 0x624B, 0x8EE8, 0x624D, 0x8DCB, 0x624E, 0x9D48, - 0x6253, 0x91C5, 0x6255, 0x95A5, 0x6258, 0x91EF, 0x625B, 0x9D4B, - 0x625E, 0x9D49, 0x6260, 0x9D4C, 0x6263, 0x9D4A, 0x6268, 0x9D4D, - 0x626E, 0x95AF, 0x6271, 0x88B5, 0x6276, 0x957D, 0x6279, 0x94E1, - 0x627C, 0x9D4E, 0x627E, 0x9D51, 0x627F, 0x8FB3, 0x6280, 0x8B5A, - 0x6282, 0x9D4F, 0x6283, 0x9D56, 0x6284, 0x8FB4, 0x6289, 0x9D50, - 0x628A, 0x9463, 0x6291, 0x977D, 0x6292, 0x9D52, 0x6293, 0x9D53, - 0x6294, 0x9D57, 0x6295, 0x938A, 0x6296, 0x9D54, 0x6297, 0x8D52, - 0x6298, 0x90DC, 0x629B, 0x9D65, 0x629C, 0x94B2, 0x629E, 0x91F0, - 0x62A6, 0xFAC8, 0x62AB, 0x94E2, 0x62AC, 0x9DAB, 0x62B1, 0x95F8, - 0x62B5, 0x92EF, 0x62B9, 0x9695, 0x62BB, 0x9D5A, 0x62BC, 0x899F, - 0x62BD, 0x928A, 0x62C2, 0x9D63, 0x62C5, 0x9253, 0x62C6, 0x9D5D, - 0x62C7, 0x9D64, 0x62C8, 0x9D5F, 0x62C9, 0x9D66, 0x62CA, 0x9D62, - 0x62CC, 0x9D61, 0x62CD, 0x948F, 0x62CF, 0x9D5B, 0x62D0, 0x89FB, - 0x62D1, 0x9D59, 0x62D2, 0x8B91, 0x62D3, 0x91F1, 0x62D4, 0x9D55, - 0x62D7, 0x9D58, 0x62D8, 0x8D53, 0x62D9, 0x90D9, 0x62DB, 0x8FB5, - 0x62DC, 0x9D60, 0x62DD, 0x9471, 0x62E0, 0x8B92, 0x62E1, 0x8A67, - 0x62EC, 0x8A87, 0x62ED, 0x9040, 0x62EE, 0x9D68, 0x62EF, 0x9D6D, - 0x62F1, 0x9D69, 0x62F3, 0x8C9D, 0x62F5, 0x9D6E, 0x62F6, 0x8E41, - 0x62F7, 0x8D89, 0x62FE, 0x8F45, 0x62FF, 0x9D5C, 0x6301, 0x8E9D, - 0x6302, 0x9D6B, 0x6307, 0x8E77, 0x6308, 0x9D6C, 0x6309, 0x88C2, - 0x630C, 0x9D67, 0x6311, 0x92A7, 0x6319, 0x8B93, 0x631F, 0x8BB2, - 0x6327, 0x9D6A, 0x6328, 0x88A5, 0x632B, 0x8DC1, 0x632F, 0x9055, - 0x633A, 0x92F0, 0x633D, 0x94D2, 0x633E, 0x9D70, 0x633F, 0x917D, - 0x6349, 0x91A8, 0x634C, 0x8E4A, 0x634D, 0x9D71, 0x634F, 0x9D73, - 0x6350, 0x9D6F, 0x6355, 0x95DF, 0x6357, 0x92BB, 0x635C, 0x917B, - 0x6367, 0x95F9, 0x6368, 0x8ECC, 0x6369, 0x9D80, 0x636B, 0x9D7E, - 0x636E, 0x9098, 0x6372, 0x8C9E, 0x6376, 0x9D78, 0x6377, 0x8FB7, - 0x637A, 0x93E6, 0x637B, 0x9450, 0x6380, 0x9D76, 0x6383, 0x917C, - 0x6388, 0x8EF6, 0x6389, 0x9D7B, 0x638C, 0x8FB6, 0x638E, 0x9D75, - 0x638F, 0x9D7A, 0x6392, 0x9472, 0x6396, 0x9D74, 0x6398, 0x8C40, - 0x639B, 0x8A7C, 0x639F, 0x9D7C, 0x63A0, 0x97A9, 0x63A1, 0x8DCC, - 0x63A2, 0x9254, 0x63A3, 0x9D79, 0x63A5, 0x90DA, 0x63A7, 0x8D54, - 0x63A8, 0x9084, 0x63A9, 0x8986, 0x63AA, 0x915B, 0x63AB, 0x9D77, - 0x63AC, 0x8B64, 0x63B2, 0x8C66, 0x63B4, 0x92CD, 0x63B5, 0x9D7D, - 0x63BB, 0x917E, 0x63BE, 0x9D81, 0x63C0, 0x9D83, 0x63C3, 0x91B5, - 0x63C4, 0x9D89, 0x63C6, 0x9D84, 0x63C9, 0x9D86, 0x63CF, 0x9560, - 0x63D0, 0x92F1, 0x63D2, 0x9D87, 0x63D6, 0x974B, 0x63DA, 0x9767, - 0x63DB, 0x8AB7, 0x63E1, 0x88AC, 0x63E3, 0x9D85, 0x63E9, 0x9D82, - 0x63EE, 0x8AF6, 0x63F4, 0x8987, 0x63F5, 0xFAC9, 0x63F6, 0x9D88, - 0x63FA, 0x9768, 0x6406, 0x9D8C, 0x640D, 0x91B9, 0x640F, 0x9D93, - 0x6413, 0x9D8D, 0x6416, 0x9D8A, 0x6417, 0x9D91, 0x641C, 0x9D72, - 0x6426, 0x9D8E, 0x6428, 0x9D92, 0x642C, 0x94C0, 0x642D, 0x938B, - 0x6434, 0x9D8B, 0x6436, 0x9D8F, 0x643A, 0x8C67, 0x643E, 0x8DEF, - 0x6442, 0x90DB, 0x644E, 0x9D97, 0x6458, 0x9345, 0x6460, 0xFACA, - 0x6467, 0x9D94, 0x6469, 0x9680, 0x646F, 0x9D95, 0x6476, 0x9D96, - 0x6478, 0x96CC, 0x647A, 0x90A0, 0x6483, 0x8C82, 0x6488, 0x9D9D, - 0x6492, 0x8E54, 0x6493, 0x9D9A, 0x6495, 0x9D99, 0x649A, 0x9451, - 0x649D, 0xFACB, 0x649E, 0x93B3, 0x64A4, 0x9350, 0x64A5, 0x9D9B, - 0x64A9, 0x9D9C, 0x64AB, 0x958F, 0x64AD, 0x9464, 0x64AE, 0x8E42, - 0x64B0, 0x90EF, 0x64B2, 0x966F, 0x64B9, 0x8A68, 0x64BB, 0x9DA3, - 0x64BC, 0x9D9E, 0x64C1, 0x9769, 0x64C2, 0x9DA5, 0x64C5, 0x9DA1, - 0x64C7, 0x9DA2, 0x64CD, 0x9180, 0x64CE, 0xFACC, 0x64D2, 0x9DA0, - 0x64D4, 0x9D5E, 0x64D8, 0x9DA4, 0x64DA, 0x9D9F, 0x64E0, 0x9DA9, - 0x64E1, 0x9DAA, 0x64E2, 0x9346, 0x64E3, 0x9DAC, 0x64E6, 0x8E43, - 0x64E7, 0x9DA7, 0x64EC, 0x8B5B, 0x64EF, 0x9DAD, 0x64F1, 0x9DA6, - 0x64F2, 0x9DB1, 0x64F4, 0x9DB0, 0x64F6, 0x9DAF, 0x64FA, 0x9DB2, - 0x64FD, 0x9DB4, 0x64FE, 0x8FEF, 0x6500, 0x9DB3, 0x6505, 0x9DB7, - 0x6518, 0x9DB5, 0x651C, 0x9DB6, 0x651D, 0x9D90, 0x6523, 0x9DB9, - 0x6524, 0x9DB8, 0x652A, 0x9D98, 0x652B, 0x9DBA, 0x652C, 0x9DAE, - 0x652F, 0x8E78, 0x6534, 0x9DBB, 0x6535, 0x9DBC, 0x6536, 0x9DBE, - 0x6537, 0x9DBD, 0x6538, 0x9DBF, 0x6539, 0x89FC, 0x653B, 0x8D55, - 0x653E, 0x95FA, 0x653F, 0x90AD, 0x6545, 0x8CCC, 0x6548, 0x9DC1, - 0x654D, 0x9DC4, 0x654E, 0xFACD, 0x654F, 0x9571, 0x6551, 0x8B7E, - 0x6555, 0x9DC3, 0x6556, 0x9DC2, 0x6557, 0x9473, 0x6558, 0x9DC5, - 0x6559, 0x8BB3, 0x655D, 0x9DC7, 0x655E, 0x9DC6, 0x6562, 0x8AB8, - 0x6563, 0x8E55, 0x6566, 0x93D6, 0x656C, 0x8C68, 0x6570, 0x9094, - 0x6572, 0x9DC8, 0x6574, 0x90AE, 0x6575, 0x9347, 0x6577, 0x957E, - 0x6578, 0x9DC9, 0x6582, 0x9DCA, 0x6583, 0x9DCB, 0x6587, 0x95B6, - 0x6588, 0x9B7C, 0x6589, 0x90C4, 0x658C, 0x956B, 0x658E, 0x8DD6, - 0x6590, 0x94E3, 0x6591, 0x94C1, 0x6597, 0x936C, 0x6599, 0x97BF, - 0x659B, 0x9DCD, 0x659C, 0x8ECE, 0x659F, 0x9DCE, 0x65A1, 0x88B4, - 0x65A4, 0x8BD2, 0x65A5, 0x90CB, 0x65A7, 0x9580, 0x65AB, 0x9DCF, - 0x65AC, 0x8E61, 0x65AD, 0x9266, 0x65AF, 0x8E7A, 0x65B0, 0x9056, - 0x65B7, 0x9DD0, 0x65B9, 0x95FB, 0x65BC, 0x8997, 0x65BD, 0x8E7B, - 0x65C1, 0x9DD3, 0x65C3, 0x9DD1, 0x65C4, 0x9DD4, 0x65C5, 0x97B7, - 0x65C6, 0x9DD2, 0x65CB, 0x90F9, 0x65CC, 0x9DD5, 0x65CF, 0x91B0, - 0x65D2, 0x9DD6, 0x65D7, 0x8AF8, 0x65D9, 0x9DD8, 0x65DB, 0x9DD7, - 0x65E0, 0x9DD9, 0x65E1, 0x9DDA, 0x65E2, 0x8AF9, 0x65E5, 0x93FA, - 0x65E6, 0x9255, 0x65E7, 0x8B8C, 0x65E8, 0x8E7C, 0x65E9, 0x9181, - 0x65EC, 0x8F7B, 0x65ED, 0x88AE, 0x65F1, 0x9DDB, 0x65FA, 0x89A0, - 0x65FB, 0x9DDF, 0x6600, 0xFACE, 0x6602, 0x8D56, 0x6603, 0x9DDE, - 0x6606, 0x8DA9, 0x6607, 0x8FB8, 0x6609, 0xFAD1, 0x660A, 0x9DDD, - 0x660C, 0x8FB9, 0x660E, 0x96BE, 0x660F, 0x8DA8, 0x6613, 0x88D5, - 0x6614, 0x90CC, 0x6615, 0xFACF, 0x661C, 0x9DE4, 0x661E, 0xFAD3, - 0x661F, 0x90AF, 0x6620, 0x8966, 0x6624, 0xFAD4, 0x6625, 0x8F74, - 0x6627, 0x9686, 0x6628, 0x8DF0, 0x662D, 0x8FBA, 0x662E, 0xFAD2, - 0x662F, 0x90A5, 0x6631, 0xFA63, 0x6634, 0x9DE3, 0x6635, 0x9DE1, - 0x6636, 0x9DE2, 0x663B, 0xFAD0, 0x663C, 0x928B, 0x663F, 0x9E45, - 0x6641, 0x9DE8, 0x6642, 0x8E9E, 0x6643, 0x8D57, 0x6644, 0x9DE6, - 0x6649, 0x9DE7, 0x664B, 0x9057, 0x664F, 0x9DE5, 0x6652, 0x8E4E, - 0x6657, 0xFAD6, 0x6659, 0xFAD7, 0x665D, 0x9DEA, 0x665E, 0x9DE9, - 0x665F, 0x9DEE, 0x6662, 0x9DEF, 0x6664, 0x9DEB, 0x6665, 0xFAD5, - 0x6666, 0x8A41, 0x6667, 0x9DEC, 0x6668, 0x9DED, 0x6669, 0x94D3, - 0x666E, 0x9581, 0x666F, 0x8C69, 0x6670, 0x9DF0, 0x6673, 0xFAD9, - 0x6674, 0x90B0, 0x6676, 0x8FBB, 0x667A, 0x9271, 0x6681, 0x8BC5, - 0x6683, 0x9DF1, 0x6684, 0x9DF5, 0x6687, 0x89C9, 0x6688, 0x9DF2, - 0x6689, 0x9DF4, 0x668E, 0x9DF3, 0x6691, 0x8F8B, 0x6696, 0x9267, - 0x6697, 0x88C3, 0x6698, 0x9DF6, 0x6699, 0xFADA, 0x669D, 0x9DF7, - 0x66A0, 0xFADB, 0x66A2, 0x92A8, 0x66A6, 0x97EF, 0x66AB, 0x8E62, - 0x66AE, 0x95E9, 0x66B2, 0xFADC, 0x66B4, 0x965C, 0x66B8, 0x9E41, - 0x66B9, 0x9DF9, 0x66BC, 0x9DFC, 0x66BE, 0x9DFB, 0x66BF, 0xFADD, - 0x66C1, 0x9DF8, 0x66C4, 0x9E40, 0x66C7, 0x93DC, 0x66C9, 0x9DFA, - 0x66D6, 0x9E42, 0x66D9, 0x8F8C, 0x66DA, 0x9E43, 0x66DC, 0x976A, - 0x66DD, 0x9498, 0x66E0, 0x9E44, 0x66E6, 0x9E46, 0x66E9, 0x9E47, - 0x66F0, 0x9E48, 0x66F2, 0x8BC8, 0x66F3, 0x8967, 0x66F4, 0x8D58, - 0x66F5, 0x9E49, 0x66F7, 0x9E4A, 0x66F8, 0x8F91, 0x66F9, 0x9182, - 0x66FA, 0xFADE, 0x66FB, 0xFA66, 0x66FC, 0x99D6, 0x66FD, 0x915D, - 0x66FE, 0x915C, 0x66FF, 0x91D6, 0x6700, 0x8DC5, 0x6703, 0x98F0, - 0x6708, 0x8C8E, 0x6709, 0x974C, 0x670B, 0x95FC, 0x670D, 0x959E, - 0x670E, 0xFADF, 0x670F, 0x9E4B, 0x6714, 0x8DF1, 0x6715, 0x92BD, - 0x6716, 0x9E4C, 0x6717, 0x984E, 0x671B, 0x965D, 0x671D, 0x92A9, - 0x671E, 0x9E4D, 0x671F, 0x8AFA, 0x6726, 0x9E4E, 0x6727, 0x9E4F, - 0x6728, 0x96D8, 0x672A, 0x96A2, 0x672B, 0x9696, 0x672C, 0x967B, - 0x672D, 0x8E44, 0x672E, 0x9E51, 0x6731, 0x8EE9, 0x6734, 0x9670, - 0x6736, 0x9E53, 0x6737, 0x9E56, 0x6738, 0x9E55, 0x673A, 0x8AF7, - 0x673D, 0x8B80, 0x673F, 0x9E52, 0x6741, 0x9E54, 0x6746, 0x9E57, - 0x6749, 0x9099, 0x674E, 0x979B, 0x674F, 0x88C7, 0x6750, 0x8DDE, - 0x6751, 0x91BA, 0x6753, 0x8EDB, 0x6756, 0x8FF1, 0x6759, 0x9E5A, - 0x675C, 0x936D, 0x675E, 0x9E58, 0x675F, 0x91A9, 0x6760, 0x9E59, - 0x6761, 0x8FF0, 0x6762, 0x96DB, 0x6763, 0x9E5B, 0x6764, 0x9E5C, - 0x6765, 0x9788, 0x6766, 0xFAE1, 0x676A, 0x9E61, 0x676D, 0x8D59, - 0x676F, 0x9474, 0x6770, 0x9E5E, 0x6771, 0x938C, 0x6772, 0x9DDC, - 0x6773, 0x9DE0, 0x6775, 0x8B6E, 0x6777, 0x9466, 0x677C, 0x9E60, - 0x677E, 0x8FBC, 0x677F, 0x94C2, 0x6785, 0x9E66, 0x6787, 0x94F8, - 0x6789, 0x9E5D, 0x678B, 0x9E63, 0x678C, 0x9E62, 0x6790, 0x90CD, - 0x6795, 0x968D, 0x6797, 0x97D1, 0x679A, 0x9687, 0x679C, 0x89CA, - 0x679D, 0x8E7D, 0x67A0, 0x9867, 0x67A1, 0x9E65, 0x67A2, 0x9095, - 0x67A6, 0x9E64, 0x67A9, 0x9E5F, 0x67AF, 0x8CCD, 0x67B3, 0x9E6B, - 0x67B4, 0x9E69, 0x67B6, 0x89CB, 0x67B7, 0x9E67, 0x67B8, 0x9E6D, - 0x67B9, 0x9E73, 0x67BB, 0xFAE2, 0x67C0, 0xFAE4, 0x67C1, 0x91C6, - 0x67C4, 0x95BF, 0x67C6, 0x9E75, 0x67CA, 0x9541, 0x67CE, 0x9E74, - 0x67CF, 0x9490, 0x67D0, 0x965E, 0x67D1, 0x8AB9, 0x67D3, 0x90F5, - 0x67D4, 0x8F5F, 0x67D8, 0x92D1, 0x67DA, 0x974D, 0x67DD, 0x9E70, - 0x67DE, 0x9E6F, 0x67E2, 0x9E71, 0x67E4, 0x9E6E, 0x67E7, 0x9E76, - 0x67E9, 0x9E6C, 0x67EC, 0x9E6A, 0x67EE, 0x9E72, 0x67EF, 0x9E68, - 0x67F1, 0x928C, 0x67F3, 0x96F6, 0x67F4, 0x8EC4, 0x67F5, 0x8DF2, - 0x67FB, 0x8DB8, 0x67FE, 0x968F, 0x67FF, 0x8A60, 0x6801, 0xFAE5, - 0x6802, 0x92CC, 0x6803, 0x93C8, 0x6804, 0x8968, 0x6813, 0x90F0, - 0x6816, 0x90B2, 0x6817, 0x8C49, 0x681E, 0x9E78, 0x6821, 0x8D5A, - 0x6822, 0x8A9C, 0x6829, 0x9E7A, 0x682A, 0x8A94, 0x682B, 0x9E81, - 0x6832, 0x9E7D, 0x6834, 0x90F1, 0x6838, 0x8A6A, 0x6839, 0x8DAA, - 0x683C, 0x8A69, 0x683D, 0x8DCD, 0x6840, 0x9E7B, 0x6841, 0x8C85, - 0x6842, 0x8C6A, 0x6843, 0x938D, 0x6844, 0xFAE6, 0x6846, 0x9E79, - 0x6848, 0x88C4, 0x684D, 0x9E7C, 0x684E, 0x9E7E, 0x6850, 0x8BCB, - 0x6851, 0x8C4B, 0x6852, 0xFAE3, 0x6853, 0x8ABA, 0x6854, 0x8B6A, - 0x6859, 0x9E82, 0x685C, 0x8DF7, 0x685D, 0x9691, 0x685F, 0x8E56, - 0x6863, 0x9E83, 0x6867, 0x954F, 0x6874, 0x9E8F, 0x6876, 0x89B1, - 0x6877, 0x9E84, 0x687E, 0x9E95, 0x687F, 0x9E85, 0x6881, 0x97C0, - 0x6883, 0x9E8C, 0x6885, 0x947E, 0x688D, 0x9E94, 0x688F, 0x9E87, - 0x6893, 0x88B2, 0x6894, 0x9E89, 0x6897, 0x8D5B, 0x689B, 0x9E8B, - 0x689D, 0x9E8A, 0x689F, 0x9E86, 0x68A0, 0x9E91, 0x68A2, 0x8FBD, - 0x68A6, 0x9AEB, 0x68A7, 0x8CE6, 0x68A8, 0x979C, 0x68AD, 0x9E88, - 0x68AF, 0x92F2, 0x68B0, 0x8A42, 0x68B1, 0x8DAB, 0x68B3, 0x9E80, - 0x68B5, 0x9E90, 0x68B6, 0x8A81, 0x68B9, 0x9E8E, 0x68BA, 0x9E92, - 0x68BC, 0x938E, 0x68C4, 0x8AFC, 0x68C6, 0x9EB0, 0x68C8, 0xFA64, - 0x68C9, 0x96C7, 0x68CA, 0x9E97, 0x68CB, 0x8AFB, 0x68CD, 0x9E9E, - 0x68CF, 0xFAE7, 0x68D2, 0x965F, 0x68D4, 0x9E9F, 0x68D5, 0x9EA1, - 0x68D7, 0x9EA5, 0x68D8, 0x9E99, 0x68DA, 0x9249, 0x68DF, 0x938F, - 0x68E0, 0x9EA9, 0x68E1, 0x9E9C, 0x68E3, 0x9EA6, 0x68E7, 0x9EA0, - 0x68EE, 0x9058, 0x68EF, 0x9EAA, 0x68F2, 0x90B1, 0x68F9, 0x9EA8, - 0x68FA, 0x8ABB, 0x6900, 0x986F, 0x6901, 0x9E96, 0x6904, 0x9EA4, - 0x6905, 0x88D6, 0x6908, 0x9E98, 0x690B, 0x96B8, 0x690C, 0x9E9D, - 0x690D, 0x9041, 0x690E, 0x92C5, 0x690F, 0x9E93, 0x6912, 0x9EA3, - 0x6919, 0x909A, 0x691A, 0x9EAD, 0x691B, 0x8A91, 0x691C, 0x8C9F, - 0x6921, 0x9EAF, 0x6922, 0x9E9A, 0x6923, 0x9EAE, 0x6925, 0x9EA7, - 0x6926, 0x9E9B, 0x6928, 0x9EAB, 0x692A, 0x9EAC, 0x6930, 0x9EBD, - 0x6934, 0x93CC, 0x6936, 0x9EA2, 0x6939, 0x9EB9, 0x693D, 0x9EBB, - 0x693F, 0x92D6, 0x694A, 0x976B, 0x6953, 0x9596, 0x6954, 0x9EB6, - 0x6955, 0x91C8, 0x6959, 0x9EBC, 0x695A, 0x915E, 0x695C, 0x9EB3, - 0x695D, 0x9EC0, 0x695E, 0x9EBF, 0x6960, 0x93ED, 0x6961, 0x9EBE, - 0x6962, 0x93E8, 0x6968, 0xFAE9, 0x696A, 0x9EC2, 0x696B, 0x9EB5, - 0x696D, 0x8BC6, 0x696E, 0x9EB8, 0x696F, 0x8F7C, 0x6973, 0x9480, - 0x6974, 0x9EBA, 0x6975, 0x8BC9, 0x6977, 0x9EB2, 0x6978, 0x9EB4, - 0x6979, 0x9EB1, 0x697C, 0x984F, 0x697D, 0x8A79, 0x697E, 0x9EB7, - 0x6981, 0x9EC1, 0x6982, 0x8A54, 0x698A, 0x8DE5, 0x698E, 0x897C, - 0x6991, 0x9ED2, 0x6994, 0x9850, 0x6995, 0x9ED5, 0x6998, 0xFAEB, - 0x699B, 0x9059, 0x699C, 0x9ED4, 0x69A0, 0x9ED3, 0x69A7, 0x9ED0, - 0x69AE, 0x9EC4, 0x69B1, 0x9EE1, 0x69B2, 0x9EC3, 0x69B4, 0x9ED6, - 0x69BB, 0x9ECE, 0x69BE, 0x9EC9, 0x69BF, 0x9EC6, 0x69C1, 0x9EC7, - 0x69C3, 0x9ECF, 0x69C7, 0xEAA0, 0x69CA, 0x9ECC, 0x69CB, 0x8D5C, - 0x69CC, 0x92C6, 0x69CD, 0x9184, 0x69CE, 0x9ECA, 0x69D0, 0x9EC5, - 0x69D3, 0x9EC8, 0x69D8, 0x976C, 0x69D9, 0x968A, 0x69DD, 0x9ECD, - 0x69DE, 0x9ED7, 0x69E2, 0xFAEC, 0x69E7, 0x9EDF, 0x69E8, 0x9ED8, - 0x69EB, 0x9EE5, 0x69ED, 0x9EE3, 0x69F2, 0x9EDE, 0x69F9, 0x9EDD, - 0x69FB, 0x92CE, 0x69FD, 0x9185, 0x69FF, 0x9EDB, 0x6A02, 0x9ED9, - 0x6A05, 0x9EE0, 0x6A0A, 0x9EE6, 0x6A0B, 0x94F3, 0x6A0C, 0x9EEC, - 0x6A12, 0x9EE7, 0x6A13, 0x9EEA, 0x6A14, 0x9EE4, 0x6A17, 0x9294, - 0x6A19, 0x9557, 0x6A1B, 0x9EDA, 0x6A1E, 0x9EE2, 0x6A1F, 0x8FBE, - 0x6A21, 0x96CD, 0x6A22, 0x9EF6, 0x6A23, 0x9EE9, 0x6A29, 0x8CA0, - 0x6A2A, 0x89A1, 0x6A2B, 0x8A7E, 0x6A2E, 0x9ED1, 0x6A30, 0xFAED, - 0x6A35, 0x8FBF, 0x6A36, 0x9EEE, 0x6A38, 0x9EF5, 0x6A39, 0x8EF7, - 0x6A3A, 0x8A92, 0x6A3D, 0x924D, 0x6A44, 0x9EEB, 0x6A46, 0xFAEF, - 0x6A47, 0x9EF0, 0x6A48, 0x9EF4, 0x6A4B, 0x8BB4, 0x6A58, 0x8B6B, - 0x6A59, 0x9EF2, 0x6A5F, 0x8B40, 0x6A61, 0x93C9, 0x6A62, 0x9EF1, - 0x6A66, 0x9EF3, 0x6A6B, 0xFAEE, 0x6A72, 0x9EED, 0x6A73, 0xFAF0, - 0x6A78, 0x9EEF, 0x6A7E, 0xFAF1, 0x6A7F, 0x8A80, 0x6A80, 0x9268, - 0x6A84, 0x9EFA, 0x6A8D, 0x9EF8, 0x6A8E, 0x8CE7, 0x6A90, 0x9EF7, - 0x6A97, 0x9F40, 0x6A9C, 0x9E77, 0x6AA0, 0x9EF9, 0x6AA2, 0x9EFB, - 0x6AA3, 0x9EFC, 0x6AAA, 0x9F4B, 0x6AAC, 0x9F47, 0x6AAE, 0x9E8D, - 0x6AB3, 0x9F46, 0x6AB8, 0x9F45, 0x6ABB, 0x9F42, 0x6AC1, 0x9EE8, - 0x6AC2, 0x9F44, 0x6AC3, 0x9F43, 0x6AD1, 0x9F49, 0x6AD3, 0x9845, - 0x6ADA, 0x9F4C, 0x6ADB, 0x8BF9, 0x6ADE, 0x9F48, 0x6ADF, 0x9F4A, - 0x6AE2, 0xFAF2, 0x6AE4, 0xFAF3, 0x6AE8, 0x94A5, 0x6AEA, 0x9F4D, - 0x6AFA, 0x9F51, 0x6AFB, 0x9F4E, 0x6B04, 0x9793, 0x6B05, 0x9F4F, - 0x6B0A, 0x9EDC, 0x6B12, 0x9F52, 0x6B16, 0x9F53, 0x6B1D, 0x8954, - 0x6B1F, 0x9F55, 0x6B20, 0x8C87, 0x6B21, 0x8E9F, 0x6B23, 0x8BD3, - 0x6B27, 0x89A2, 0x6B32, 0x977E, 0x6B37, 0x9F57, 0x6B38, 0x9F56, - 0x6B39, 0x9F59, 0x6B3A, 0x8B5C, 0x6B3D, 0x8BD4, 0x6B3E, 0x8ABC, - 0x6B43, 0x9F5C, 0x6B47, 0x9F5B, 0x6B49, 0x9F5D, 0x6B4C, 0x89CC, - 0x6B4E, 0x9256, 0x6B50, 0x9F5E, 0x6B53, 0x8ABD, 0x6B54, 0x9F60, - 0x6B59, 0x9F5F, 0x6B5B, 0x9F61, 0x6B5F, 0x9F62, 0x6B61, 0x9F63, - 0x6B62, 0x8E7E, 0x6B63, 0x90B3, 0x6B64, 0x8D9F, 0x6B66, 0x9590, - 0x6B69, 0x95E0, 0x6B6A, 0x9863, 0x6B6F, 0x8E95, 0x6B73, 0x8DCE, - 0x6B74, 0x97F0, 0x6B78, 0x9F64, 0x6B79, 0x9F65, 0x6B7B, 0x8E80, - 0x6B7F, 0x9F66, 0x6B80, 0x9F67, 0x6B83, 0x9F69, 0x6B84, 0x9F68, - 0x6B86, 0x9677, 0x6B89, 0x8F7D, 0x6B8A, 0x8EEA, 0x6B8B, 0x8E63, - 0x6B8D, 0x9F6A, 0x6B95, 0x9F6C, 0x6B96, 0x9042, 0x6B98, 0x9F6B, - 0x6B9E, 0x9F6D, 0x6BA4, 0x9F6E, 0x6BAA, 0x9F6F, 0x6BAB, 0x9F70, - 0x6BAF, 0x9F71, 0x6BB1, 0x9F73, 0x6BB2, 0x9F72, 0x6BB3, 0x9F74, - 0x6BB4, 0x89A3, 0x6BB5, 0x9269, 0x6BB7, 0x9F75, 0x6BBA, 0x8E45, - 0x6BBB, 0x8A6B, 0x6BBC, 0x9F76, 0x6BBF, 0x9361, 0x6BC0, 0x9ACA, - 0x6BC5, 0x8B42, 0x6BC6, 0x9F77, 0x6BCB, 0x9F78, 0x6BCD, 0x95EA, - 0x6BCE, 0x9688, 0x6BD2, 0x93C5, 0x6BD3, 0x9F79, 0x6BD4, 0x94E4, - 0x6BD6, 0xFAF4, 0x6BD8, 0x94F9, 0x6BDB, 0x96D1, 0x6BDF, 0x9F7A, - 0x6BEB, 0x9F7C, 0x6BEC, 0x9F7B, 0x6BEF, 0x9F7E, 0x6BF3, 0x9F7D, - 0x6C08, 0x9F81, 0x6C0F, 0x8E81, 0x6C11, 0x96AF, 0x6C13, 0x9F82, - 0x6C14, 0x9F83, 0x6C17, 0x8B43, 0x6C1B, 0x9F84, 0x6C23, 0x9F86, - 0x6C24, 0x9F85, 0x6C34, 0x9085, 0x6C37, 0x9558, 0x6C38, 0x8969, - 0x6C3E, 0x94C3, 0x6C3F, 0xFAF5, 0x6C40, 0x92F3, 0x6C41, 0x8F60, - 0x6C42, 0x8B81, 0x6C4E, 0x94C4, 0x6C50, 0x8EAC, 0x6C55, 0x9F88, - 0x6C57, 0x8ABE, 0x6C5A, 0x8998, 0x6C5C, 0xFAF6, 0x6C5D, 0x93F0, - 0x6C5E, 0x9F87, 0x6C5F, 0x8D5D, 0x6C60, 0x9272, 0x6C62, 0x9F89, - 0x6C68, 0x9F91, 0x6C6A, 0x9F8A, 0x6C6F, 0xFAF8, 0x6C70, 0x91BF, - 0x6C72, 0x8B82, 0x6C73, 0x9F92, 0x6C7A, 0x8C88, 0x6C7D, 0x8B44, - 0x6C7E, 0x9F90, 0x6C81, 0x9F8E, 0x6C82, 0x9F8B, 0x6C83, 0x9780, - 0x6C86, 0xFAF7, 0x6C88, 0x92BE, 0x6C8C, 0x93D7, 0x6C8D, 0x9F8C, - 0x6C90, 0x9F94, 0x6C92, 0x9F93, 0x6C93, 0x8C42, 0x6C96, 0x89AB, - 0x6C99, 0x8DB9, 0x6C9A, 0x9F8D, 0x6C9B, 0x9F8F, 0x6CA1, 0x9676, - 0x6CA2, 0x91F2, 0x6CAB, 0x9697, 0x6CAE, 0x9F9C, 0x6CB1, 0x9F9D, - 0x6CB3, 0x89CD, 0x6CB8, 0x95A6, 0x6CB9, 0x96FB, 0x6CBA, 0x9F9F, - 0x6CBB, 0x8EA1, 0x6CBC, 0x8FC0, 0x6CBD, 0x9F98, 0x6CBE, 0x9F9E, - 0x6CBF, 0x8988, 0x6CC1, 0x8BB5, 0x6CC4, 0x9F95, 0x6CC5, 0x9F9A, - 0x6CC9, 0x90F2, 0x6CCA, 0x9491, 0x6CCC, 0x94E5, 0x6CD3, 0x9F97, - 0x6CD5, 0x9640, 0x6CD7, 0x9F99, 0x6CD9, 0x9FA2, 0x6CDA, 0xFAF9, - 0x6CDB, 0x9FA0, 0x6CDD, 0x9F9B, 0x6CE1, 0x9641, 0x6CE2, 0x9467, - 0x6CE3, 0x8B83, 0x6CE5, 0x9344, 0x6CE8, 0x928D, 0x6CEA, 0x9FA3, - 0x6CEF, 0x9FA1, 0x6CF0, 0x91D7, 0x6CF1, 0x9F96, 0x6CF3, 0x896A, - 0x6D04, 0xFAFA, 0x6D0B, 0x976D, 0x6D0C, 0x9FAE, 0x6D12, 0x9FAD, - 0x6D17, 0x90F4, 0x6D19, 0x9FAA, 0x6D1B, 0x978C, 0x6D1E, 0x93B4, - 0x6D1F, 0x9FA4, 0x6D25, 0x92C3, 0x6D29, 0x896B, 0x6D2A, 0x8D5E, - 0x6D2B, 0x9FA7, 0x6D32, 0x8F46, 0x6D33, 0x9FAC, 0x6D35, 0x9FAB, - 0x6D36, 0x9FA6, 0x6D38, 0x9FA9, 0x6D3B, 0x8A88, 0x6D3D, 0x9FA8, - 0x6D3E, 0x9468, 0x6D41, 0x97AC, 0x6D44, 0x8FF2, 0x6D45, 0x90F3, - 0x6D59, 0x9FB4, 0x6D5A, 0x9FB2, 0x6D5C, 0x956C, 0x6D63, 0x9FAF, - 0x6D64, 0x9FB1, 0x6D66, 0x8959, 0x6D69, 0x8D5F, 0x6D6A, 0x9851, - 0x6D6C, 0x8A5C, 0x6D6E, 0x9582, 0x6D6F, 0xFAFC, 0x6D74, 0x9781, - 0x6D77, 0x8A43, 0x6D78, 0x905A, 0x6D79, 0x9FB3, 0x6D85, 0x9FB8, - 0x6D87, 0xFAFB, 0x6D88, 0x8FC1, 0x6D8C, 0x974F, 0x6D8E, 0x9FB5, - 0x6D93, 0x9FB0, 0x6D95, 0x9FB6, 0x6D96, 0xFB40, 0x6D99, 0x97DC, - 0x6D9B, 0x9393, 0x6D9C, 0x93C0, 0x6DAC, 0xFB41, 0x6DAF, 0x8A55, - 0x6DB2, 0x8974, 0x6DB5, 0x9FBC, 0x6DB8, 0x9FBF, 0x6DBC, 0x97C1, - 0x6DC0, 0x9784, 0x6DC5, 0x9FC6, 0x6DC6, 0x9FC0, 0x6DC7, 0x9FBD, - 0x6DCB, 0x97D2, 0x6DCC, 0x9FC3, 0x6DCF, 0xFB42, 0x6DD1, 0x8F69, - 0x6DD2, 0x9FC5, 0x6DD5, 0x9FCA, 0x6DD8, 0x9391, 0x6DD9, 0x9FC8, - 0x6DDE, 0x9FC2, 0x6DE1, 0x9257, 0x6DE4, 0x9FC9, 0x6DE6, 0x9FBE, - 0x6DE8, 0x9FC4, 0x6DEA, 0x9FCB, 0x6DEB, 0x88FA, 0x6DEC, 0x9FC1, - 0x6DEE, 0x9FCC, 0x6DF1, 0x905B, 0x6DF2, 0xFB44, 0x6DF3, 0x8F7E, - 0x6DF5, 0x95A3, 0x6DF7, 0x8DAC, 0x6DF8, 0xFB43, 0x6DF9, 0x9FB9, - 0x6DFA, 0x9FC7, 0x6DFB, 0x9359, 0x6DFC, 0xFB45, 0x6E05, 0x90B4, - 0x6E07, 0x8A89, 0x6E08, 0x8DCF, 0x6E09, 0x8FC2, 0x6E0A, 0x9FBB, - 0x6E0B, 0x8F61, 0x6E13, 0x8C6B, 0x6E15, 0x9FBA, 0x6E19, 0x9FD0, - 0x6E1A, 0x8F8D, 0x6E1B, 0x8CB8, 0x6E1D, 0x9FDF, 0x6E1F, 0x9FD9, - 0x6E20, 0x8B94, 0x6E21, 0x936E, 0x6E23, 0x9FD4, 0x6E24, 0x9FDD, - 0x6E25, 0x88AD, 0x6E26, 0x8951, 0x6E27, 0xFB48, 0x6E29, 0x89B7, - 0x6E2B, 0x9FD6, 0x6E2C, 0x91AA, 0x6E2D, 0x9FCD, 0x6E2E, 0x9FCF, - 0x6E2F, 0x8D60, 0x6E38, 0x9FE0, 0x6E39, 0xFB46, 0x6E3A, 0x9FDB, - 0x6E3C, 0xFB49, 0x6E3E, 0x9FD3, 0x6E43, 0x9FDA, 0x6E4A, 0x96A9, - 0x6E4D, 0x9FD8, 0x6E4E, 0x9FDC, 0x6E56, 0x8CCE, 0x6E58, 0x8FC3, - 0x6E5B, 0x9258, 0x6E5C, 0xFB47, 0x6E5F, 0x9FD2, 0x6E67, 0x974E, - 0x6E6B, 0x9FD5, 0x6E6E, 0x9FCE, 0x6E6F, 0x9392, 0x6E72, 0x9FD1, - 0x6E76, 0x9FD7, 0x6E7E, 0x9870, 0x6E7F, 0x8EBC, 0x6E80, 0x969E, - 0x6E82, 0x9FE1, 0x6E8C, 0x94AC, 0x6E8F, 0x9FED, 0x6E90, 0x8CB9, - 0x6E96, 0x8F80, 0x6E98, 0x9FE3, 0x6E9C, 0x97AD, 0x6E9D, 0x8D61, - 0x6E9F, 0x9FF0, 0x6EA2, 0x88EC, 0x6EA5, 0x9FEE, 0x6EAA, 0x9FE2, - 0x6EAF, 0x9FE8, 0x6EB2, 0x9FEA, 0x6EB6, 0x976E, 0x6EB7, 0x9FE5, - 0x6EBA, 0x934D, 0x6EBD, 0x9FE7, 0x6EBF, 0xFB4A, 0x6EC2, 0x9FEF, - 0x6EC4, 0x9FE9, 0x6EC5, 0x96C5, 0x6EC9, 0x9FE4, 0x6ECB, 0x8EA0, - 0x6ECC, 0x9FFC, 0x6ED1, 0x8A8A, 0x6ED3, 0x9FE6, 0x6ED4, 0x9FEB, - 0x6ED5, 0x9FEC, 0x6EDD, 0x91EA, 0x6EDE, 0x91D8, 0x6EEC, 0x9FF4, - 0x6EEF, 0x9FFA, 0x6EF2, 0x9FF8, 0x6EF4, 0x9348, 0x6EF7, 0xE042, - 0x6EF8, 0x9FF5, 0x6EFE, 0x9FF6, 0x6EFF, 0x9FDE, 0x6F01, 0x8B99, - 0x6F02, 0x9559, 0x6F06, 0x8EBD, 0x6F09, 0x8D97, 0x6F0F, 0x9852, - 0x6F11, 0x9FF2, 0x6F13, 0xE041, 0x6F14, 0x8989, 0x6F15, 0x9186, - 0x6F20, 0x9499, 0x6F22, 0x8ABF, 0x6F23, 0x97F8, 0x6F2B, 0x969F, - 0x6F2C, 0x92D0, 0x6F31, 0x9FF9, 0x6F32, 0x9FFB, 0x6F38, 0x9151, - 0x6F3E, 0xE040, 0x6F3F, 0x9FF7, 0x6F41, 0x9FF1, 0x6F45, 0x8AC1, - 0x6F54, 0x8C89, 0x6F58, 0xE04E, 0x6F5B, 0xE049, 0x6F5C, 0x90F6, - 0x6F5F, 0x8A83, 0x6F64, 0x8F81, 0x6F66, 0xE052, 0x6F6D, 0xE04B, - 0x6F6E, 0x92AA, 0x6F6F, 0xE048, 0x6F70, 0x92D7, 0x6F74, 0xE06B, - 0x6F78, 0xE045, 0x6F7A, 0xE044, 0x6F7C, 0xE04D, 0x6F80, 0xE047, - 0x6F81, 0xE046, 0x6F82, 0xE04C, 0x6F84, 0x909F, 0x6F86, 0xE043, - 0x6F88, 0xFB4B, 0x6F8E, 0xE04F, 0x6F91, 0xE050, 0x6F97, 0x8AC0, - 0x6FA1, 0xE055, 0x6FA3, 0xE054, 0x6FA4, 0xE056, 0x6FAA, 0xE059, - 0x6FB1, 0x9362, 0x6FB3, 0xE053, 0x6FB5, 0xFB4C, 0x6FB9, 0xE057, - 0x6FC0, 0x8C83, 0x6FC1, 0x91F7, 0x6FC2, 0xE051, 0x6FC3, 0x945A, - 0x6FC6, 0xE058, 0x6FD4, 0xE05D, 0x6FD5, 0xE05B, 0x6FD8, 0xE05E, - 0x6FDB, 0xE061, 0x6FDF, 0xE05A, 0x6FE0, 0x8D8A, 0x6FE1, 0x9447, - 0x6FE4, 0x9FB7, 0x6FEB, 0x9794, 0x6FEC, 0xE05C, 0x6FEE, 0xE060, - 0x6FEF, 0x91F3, 0x6FF1, 0xE05F, 0x6FF3, 0xE04A, 0x6FF5, 0xFB4D, - 0x6FF6, 0xE889, 0x6FFA, 0xE064, 0x6FFE, 0xE068, 0x7001, 0xE066, - 0x7005, 0xFB4E, 0x7007, 0xFB4F, 0x7009, 0xE062, 0x700B, 0xE063, - 0x700F, 0xE067, 0x7011, 0xE065, 0x7015, 0x956D, 0x7018, 0xE06D, - 0x701A, 0xE06A, 0x701B, 0xE069, 0x701D, 0xE06C, 0x701E, 0x93D2, - 0x701F, 0xE06E, 0x7026, 0x9295, 0x7027, 0x91EB, 0x7028, 0xFB50, - 0x702C, 0x90A3, 0x7030, 0xE06F, 0x7032, 0xE071, 0x703E, 0xE070, - 0x704C, 0x9FF3, 0x7051, 0xE072, 0x7058, 0x93E5, 0x7063, 0xE073, - 0x706B, 0x89CE, 0x706F, 0x9394, 0x7070, 0x8A44, 0x7078, 0x8B84, - 0x707C, 0x8EDC, 0x707D, 0x8DD0, 0x7085, 0xFB51, 0x7089, 0x9846, - 0x708A, 0x9086, 0x708E, 0x898A, 0x7092, 0xE075, 0x7099, 0xE074, - 0x70AB, 0xFB52, 0x70AC, 0xE078, 0x70AD, 0x9259, 0x70AE, 0xE07B, - 0x70AF, 0xE076, 0x70B3, 0xE07A, 0x70B8, 0xE079, 0x70B9, 0x935F, - 0x70BA, 0x88D7, 0x70BB, 0xFA62, 0x70C8, 0x97F3, 0x70CB, 0xE07D, - 0x70CF, 0x8947, 0x70D9, 0xE080, 0x70DD, 0xE07E, 0x70DF, 0xE07C, - 0x70F1, 0xE077, 0x70F9, 0x9642, 0x70FD, 0xE082, 0x7104, 0xFB54, - 0x7109, 0xE081, 0x710F, 0xFB53, 0x7114, 0x898B, 0x7119, 0xE084, - 0x711A, 0x95B0, 0x711C, 0xE083, 0x7121, 0x96B3, 0x7126, 0x8FC5, - 0x7136, 0x9152, 0x713C, 0x8FC4, 0x7146, 0xFB56, 0x7147, 0xFB57, - 0x7149, 0x97F9, 0x714C, 0xE08A, 0x714E, 0x90F7, 0x7155, 0xE086, - 0x7156, 0xE08B, 0x7159, 0x898C, 0x715C, 0xFB55, 0x7162, 0xE089, - 0x7164, 0x9481, 0x7165, 0xE085, 0x7166, 0xE088, 0x7167, 0x8FC6, - 0x7169, 0x94CF, 0x716C, 0xE08C, 0x716E, 0x8ECF, 0x717D, 0x90F8, - 0x7184, 0xE08F, 0x7188, 0xE087, 0x718A, 0x8C46, 0x718F, 0xE08D, - 0x7194, 0x976F, 0x7195, 0xE090, 0x7199, 0xEAA4, 0x719F, 0x8F6E, - 0x71A8, 0xE091, 0x71AC, 0xE092, 0x71B1, 0x944D, 0x71B9, 0xE094, - 0x71BE, 0xE095, 0x71C1, 0xFB59, 0x71C3, 0x9452, 0x71C8, 0x9395, - 0x71C9, 0xE097, 0x71CE, 0xE099, 0x71D0, 0x97D3, 0x71D2, 0xE096, - 0x71D4, 0xE098, 0x71D5, 0x898D, 0x71D7, 0xE093, 0x71DF, 0x9A7A, - 0x71E0, 0xE09A, 0x71E5, 0x9187, 0x71E6, 0x8E57, 0x71E7, 0xE09C, - 0x71EC, 0xE09B, 0x71ED, 0x9043, 0x71EE, 0x99D7, 0x71F5, 0xE09D, - 0x71F9, 0xE09F, 0x71FB, 0xE08E, 0x71FC, 0xE09E, 0x71FE, 0xFB5A, - 0x71FF, 0xE0A0, 0x7206, 0x949A, 0x720D, 0xE0A1, 0x7210, 0xE0A2, - 0x721B, 0xE0A3, 0x7228, 0xE0A4, 0x722A, 0x92DC, 0x722C, 0xE0A6, - 0x722D, 0xE0A5, 0x7230, 0xE0A7, 0x7232, 0xE0A8, 0x7235, 0x8EDD, - 0x7236, 0x9583, 0x723A, 0x96EA, 0x723B, 0xE0A9, 0x723C, 0xE0AA, - 0x723D, 0x9175, 0x723E, 0x8EA2, 0x723F, 0xE0AB, 0x7240, 0xE0AC, - 0x7246, 0xE0AD, 0x7247, 0x95D0, 0x7248, 0x94C5, 0x724B, 0xE0AE, - 0x724C, 0x9476, 0x7252, 0x92AB, 0x7258, 0xE0AF, 0x7259, 0x89E5, - 0x725B, 0x8B8D, 0x725D, 0x96C4, 0x725F, 0x96B4, 0x7261, 0x89B2, - 0x7262, 0x9853, 0x7267, 0x9671, 0x7269, 0x95A8, 0x7272, 0x90B5, - 0x7274, 0xE0B0, 0x7279, 0x93C1, 0x727D, 0x8CA1, 0x727E, 0xE0B1, - 0x7280, 0x8DD2, 0x7281, 0xE0B3, 0x7282, 0xE0B2, 0x7287, 0xE0B4, - 0x7292, 0xE0B5, 0x7296, 0xE0B6, 0x72A0, 0x8B5D, 0x72A2, 0xE0B7, - 0x72A7, 0xE0B8, 0x72AC, 0x8CA2, 0x72AF, 0x94C6, 0x72B1, 0xFB5B, - 0x72B2, 0xE0BA, 0x72B6, 0x8FF3, 0x72B9, 0xE0B9, 0x72BE, 0xFB5C, - 0x72C2, 0x8BB6, 0x72C3, 0xE0BB, 0x72C4, 0xE0BD, 0x72C6, 0xE0BC, - 0x72CE, 0xE0BE, 0x72D0, 0x8CCF, 0x72D2, 0xE0BF, 0x72D7, 0x8BE7, - 0x72D9, 0x915F, 0x72DB, 0x8D9D, 0x72E0, 0xE0C1, 0x72E1, 0xE0C2, - 0x72E2, 0xE0C0, 0x72E9, 0x8EEB, 0x72EC, 0x93C6, 0x72ED, 0x8BB7, - 0x72F7, 0xE0C4, 0x72F8, 0x924B, 0x72F9, 0xE0C3, 0x72FC, 0x9854, - 0x72FD, 0x9482, 0x730A, 0xE0C7, 0x7316, 0xE0C9, 0x7317, 0xE0C6, - 0x731B, 0x96D2, 0x731C, 0xE0C8, 0x731D, 0xE0CA, 0x731F, 0x97C2, - 0x7324, 0xFB5D, 0x7325, 0xE0CE, 0x7329, 0xE0CD, 0x732A, 0x9296, - 0x732B, 0x944C, 0x732E, 0x8CA3, 0x732F, 0xE0CC, 0x7334, 0xE0CB, - 0x7336, 0x9750, 0x7337, 0x9751, 0x733E, 0xE0CF, 0x733F, 0x898E, - 0x7344, 0x8D96, 0x7345, 0x8E82, 0x734E, 0xE0D0, 0x734F, 0xE0D1, - 0x7357, 0xE0D3, 0x7363, 0x8F62, 0x7368, 0xE0D5, 0x736A, 0xE0D4, - 0x7370, 0xE0D6, 0x7372, 0x8A6C, 0x7375, 0xE0D8, 0x7377, 0xFB5F, - 0x7378, 0xE0D7, 0x737A, 0xE0DA, 0x737B, 0xE0D9, 0x7384, 0x8CBA, - 0x7387, 0x97A6, 0x7389, 0x8BCA, 0x738B, 0x89A4, 0x7396, 0x8BE8, - 0x73A9, 0x8ADF, 0x73B2, 0x97E6, 0x73B3, 0xE0DC, 0x73BB, 0xE0DE, - 0x73BD, 0xFB60, 0x73C0, 0xE0DF, 0x73C2, 0x89CF, 0x73C8, 0xE0DB, - 0x73C9, 0xFB61, 0x73CA, 0x8E58, 0x73CD, 0x92BF, 0x73CE, 0xE0DD, - 0x73D2, 0xFB64, 0x73D6, 0xFB62, 0x73DE, 0xE0E2, 0x73E0, 0x8EEC, - 0x73E3, 0xFB63, 0x73E5, 0xE0E0, 0x73EA, 0x8C5D, 0x73ED, 0x94C7, - 0x73EE, 0xE0E1, 0x73F1, 0xE0FC, 0x73F5, 0xFB66, 0x73F8, 0xE0E7, - 0x73FE, 0x8CBB, 0x7403, 0x8B85, 0x7405, 0xE0E4, 0x7406, 0x979D, - 0x7407, 0xFB65, 0x7409, 0x97AE, 0x7422, 0x91F4, 0x7425, 0xE0E6, - 0x7426, 0xFB67, 0x7429, 0xFB69, 0x742A, 0xFB68, 0x742E, 0xFB6A, - 0x7432, 0xE0E8, 0x7433, 0x97D4, 0x7434, 0x8BD5, 0x7435, 0x94FA, - 0x7436, 0x9469, 0x743A, 0xE0E9, 0x743F, 0xE0EB, 0x7441, 0xE0EE, - 0x7455, 0xE0EA, 0x7459, 0xE0ED, 0x745A, 0x8CE8, 0x745B, 0x896C, - 0x745C, 0xE0EF, 0x745E, 0x9090, 0x745F, 0xE0EC, 0x7460, 0x97DA, - 0x7462, 0xFB6B, 0x7463, 0xE0F2, 0x7464, 0xEAA2, 0x7469, 0xE0F0, - 0x746A, 0xE0F3, 0x746F, 0xE0E5, 0x7470, 0xE0F1, 0x7473, 0x8DBA, - 0x7476, 0xE0F4, 0x747E, 0xE0F5, 0x7483, 0x979E, 0x7489, 0xFB6C, - 0x748B, 0xE0F6, 0x749E, 0xE0F7, 0x749F, 0xFB6D, 0x74A2, 0xE0E3, - 0x74A7, 0xE0F8, 0x74B0, 0x8AC2, 0x74BD, 0x8EA3, 0x74CA, 0xE0F9, - 0x74CF, 0xE0FA, 0x74D4, 0xE0FB, 0x74DC, 0x895A, 0x74E0, 0xE140, - 0x74E2, 0x955A, 0x74E3, 0xE141, 0x74E6, 0x8AA2, 0x74E7, 0xE142, - 0x74E9, 0xE143, 0x74EE, 0xE144, 0x74F0, 0xE146, 0x74F1, 0xE147, - 0x74F2, 0xE145, 0x74F6, 0x9572, 0x74F7, 0xE149, 0x74F8, 0xE148, - 0x7501, 0xFB6E, 0x7503, 0xE14B, 0x7504, 0xE14A, 0x7505, 0xE14C, - 0x750C, 0xE14D, 0x750D, 0xE14F, 0x750E, 0xE14E, 0x7511, 0x8D99, - 0x7513, 0xE151, 0x7515, 0xE150, 0x7518, 0x8AC3, 0x751A, 0x9072, - 0x751C, 0x935B, 0x751E, 0xE152, 0x751F, 0x90B6, 0x7523, 0x8E59, - 0x7525, 0x8999, 0x7526, 0xE153, 0x7528, 0x9770, 0x752B, 0x95E1, - 0x752C, 0xE154, 0x752F, 0xFAA8, 0x7530, 0x9363, 0x7531, 0x9752, - 0x7532, 0x8D62, 0x7533, 0x905C, 0x7537, 0x926A, 0x7538, 0x99B2, - 0x753A, 0x92AC, 0x753B, 0x89E6, 0x753C, 0xE155, 0x7544, 0xE156, - 0x7546, 0xE15B, 0x7549, 0xE159, 0x754A, 0xE158, 0x754B, 0x9DC0, - 0x754C, 0x8A45, 0x754D, 0xE157, 0x754F, 0x88D8, 0x7551, 0x94A8, - 0x7554, 0x94C8, 0x7559, 0x97AF, 0x755A, 0xE15C, 0x755B, 0xE15A, - 0x755C, 0x927B, 0x755D, 0x90A4, 0x7560, 0x94A9, 0x7562, 0x954C, - 0x7564, 0xE15E, 0x7565, 0x97AA, 0x7566, 0x8C6C, 0x7567, 0xE15F, - 0x7569, 0xE15D, 0x756A, 0x94D4, 0x756B, 0xE160, 0x756D, 0xE161, - 0x756F, 0xFB6F, 0x7570, 0x88D9, 0x7573, 0x8FF4, 0x7574, 0xE166, - 0x7576, 0xE163, 0x7577, 0x93EB, 0x7578, 0xE162, 0x757F, 0x8B45, - 0x7582, 0xE169, 0x7586, 0xE164, 0x7587, 0xE165, 0x7589, 0xE168, - 0x758A, 0xE167, 0x758B, 0x9544, 0x758E, 0x9161, 0x758F, 0x9160, - 0x7591, 0x8B5E, 0x7594, 0xE16A, 0x759A, 0xE16B, 0x759D, 0xE16C, - 0x75A3, 0xE16E, 0x75A5, 0xE16D, 0x75AB, 0x8975, 0x75B1, 0xE176, - 0x75B2, 0x94E6, 0x75B3, 0xE170, 0x75B5, 0xE172, 0x75B8, 0xE174, - 0x75B9, 0x905D, 0x75BC, 0xE175, 0x75BD, 0xE173, 0x75BE, 0x8EBE, - 0x75C2, 0xE16F, 0x75C3, 0xE171, 0x75C5, 0x9561, 0x75C7, 0x8FC7, - 0x75CA, 0xE178, 0x75CD, 0xE177, 0x75D2, 0xE179, 0x75D4, 0x8EA4, - 0x75D5, 0x8DAD, 0x75D8, 0x9397, 0x75D9, 0xE17A, 0x75DB, 0x92C9, - 0x75DE, 0xE17C, 0x75E2, 0x979F, 0x75E3, 0xE17B, 0x75E9, 0x9189, - 0x75F0, 0xE182, 0x75F2, 0xE184, 0x75F3, 0xE185, 0x75F4, 0x9273, - 0x75FA, 0xE183, 0x75FC, 0xE180, 0x75FE, 0xE17D, 0x75FF, 0xE17E, - 0x7601, 0xE181, 0x7609, 0xE188, 0x760B, 0xE186, 0x760D, 0xE187, - 0x761F, 0xE189, 0x7620, 0xE18B, 0x7621, 0xE18C, 0x7622, 0xE18D, - 0x7624, 0xE18E, 0x7627, 0xE18A, 0x7630, 0xE190, 0x7634, 0xE18F, - 0x763B, 0xE191, 0x7642, 0x97C3, 0x7646, 0xE194, 0x7647, 0xE192, - 0x7648, 0xE193, 0x764C, 0x8AE0, 0x7652, 0x96FC, 0x7656, 0x95C8, - 0x7658, 0xE196, 0x765C, 0xE195, 0x7661, 0xE197, 0x7662, 0xE198, - 0x7667, 0xE19C, 0x7668, 0xE199, 0x7669, 0xE19A, 0x766A, 0xE19B, - 0x766C, 0xE19D, 0x7670, 0xE19E, 0x7672, 0xE19F, 0x7676, 0xE1A0, - 0x7678, 0xE1A1, 0x767A, 0x94AD, 0x767B, 0x936F, 0x767C, 0xE1A2, - 0x767D, 0x9492, 0x767E, 0x9553, 0x7680, 0xE1A3, 0x7682, 0xFB70, - 0x7683, 0xE1A4, 0x7684, 0x9349, 0x7686, 0x8A46, 0x7687, 0x8D63, - 0x7688, 0xE1A5, 0x768B, 0xE1A6, 0x768E, 0xE1A7, 0x7690, 0x8E48, - 0x7693, 0xE1A9, 0x7696, 0xE1A8, 0x7699, 0xE1AA, 0x769A, 0xE1AB, - 0x769B, 0xFB73, 0x769C, 0xFB71, 0x769E, 0xFB72, 0x76A6, 0xFB74, - 0x76AE, 0x94E7, 0x76B0, 0xE1AC, 0x76B4, 0xE1AD, 0x76B7, 0xEA89, - 0x76B8, 0xE1AE, 0x76B9, 0xE1AF, 0x76BA, 0xE1B0, 0x76BF, 0x8E4D, - 0x76C2, 0xE1B1, 0x76C3, 0x9475, 0x76C6, 0x967E, 0x76C8, 0x896D, - 0x76CA, 0x8976, 0x76CD, 0xE1B2, 0x76D2, 0xE1B4, 0x76D6, 0xE1B3, - 0x76D7, 0x9390, 0x76DB, 0x90B7, 0x76DC, 0x9F58, 0x76DE, 0xE1B5, - 0x76DF, 0x96BF, 0x76E1, 0xE1B6, 0x76E3, 0x8AC4, 0x76E4, 0x94D5, - 0x76E5, 0xE1B7, 0x76E7, 0xE1B8, 0x76EA, 0xE1B9, 0x76EE, 0x96DA, - 0x76F2, 0x96D3, 0x76F4, 0x92BC, 0x76F8, 0x918A, 0x76FB, 0xE1BB, - 0x76FE, 0x8F82, 0x7701, 0x8FC8, 0x7704, 0xE1BE, 0x7707, 0xE1BD, - 0x7708, 0xE1BC, 0x7709, 0x94FB, 0x770B, 0x8AC5, 0x770C, 0x8CA7, - 0x771B, 0xE1C4, 0x771E, 0xE1C1, 0x771F, 0x905E, 0x7720, 0x96B0, - 0x7724, 0xE1C0, 0x7725, 0xE1C2, 0x7726, 0xE1C3, 0x7729, 0xE1BF, - 0x7737, 0xE1C5, 0x7738, 0xE1C6, 0x773A, 0x92AD, 0x773C, 0x8AE1, - 0x7740, 0x9285, 0x7746, 0xFB76, 0x7747, 0xE1C7, 0x775A, 0xE1C8, - 0x775B, 0xE1CB, 0x7761, 0x9087, 0x7763, 0x93C2, 0x7765, 0xE1CC, - 0x7766, 0x9672, 0x7768, 0xE1C9, 0x776B, 0xE1CA, 0x7779, 0xE1CF, - 0x777E, 0xE1CE, 0x777F, 0xE1CD, 0x778B, 0xE1D1, 0x778E, 0xE1D0, - 0x7791, 0xE1D2, 0x779E, 0xE1D4, 0x77A0, 0xE1D3, 0x77A5, 0x95CB, - 0x77AC, 0x8F75, 0x77AD, 0x97C4, 0x77B0, 0xE1D5, 0x77B3, 0x93B5, - 0x77B6, 0xE1D6, 0x77B9, 0xE1D7, 0x77BB, 0xE1DB, 0x77BC, 0xE1D9, - 0x77BD, 0xE1DA, 0x77BF, 0xE1D8, 0x77C7, 0xE1DC, 0x77CD, 0xE1DD, - 0x77D7, 0xE1DE, 0x77DA, 0xE1DF, 0x77DB, 0x96B5, 0x77DC, 0xE1E0, - 0x77E2, 0x96EE, 0x77E3, 0xE1E1, 0x77E5, 0x926D, 0x77E7, 0x948A, - 0x77E9, 0x8BE9, 0x77ED, 0x925A, 0x77EE, 0xE1E2, 0x77EF, 0x8BB8, - 0x77F3, 0x90CE, 0x77FC, 0xE1E3, 0x7802, 0x8DBB, 0x780C, 0xE1E4, - 0x7812, 0xE1E5, 0x7814, 0x8CA4, 0x7815, 0x8DD3, 0x7820, 0xE1E7, - 0x7821, 0xFB78, 0x7825, 0x9375, 0x7826, 0x8DD4, 0x7827, 0x8B6D, - 0x7832, 0x9643, 0x7834, 0x946A, 0x783A, 0x9376, 0x783F, 0x8D7B, - 0x7845, 0xE1E9, 0x784E, 0xFB79, 0x785D, 0x8FC9, 0x7864, 0xFB7A, - 0x786B, 0x97B0, 0x786C, 0x8D64, 0x786F, 0x8CA5, 0x7872, 0x94A1, - 0x7874, 0xE1EB, 0x787A, 0xFB7B, 0x787C, 0xE1ED, 0x7881, 0x8CE9, - 0x7886, 0xE1EC, 0x7887, 0x92F4, 0x788C, 0xE1EF, 0x788D, 0x8A56, - 0x788E, 0xE1EA, 0x7891, 0x94E8, 0x7893, 0x894F, 0x7895, 0x8DEA, - 0x7897, 0x9871, 0x789A, 0xE1EE, 0x78A3, 0xE1F0, 0x78A7, 0x95C9, - 0x78A9, 0x90D7, 0x78AA, 0xE1F2, 0x78AF, 0xE1F3, 0x78B5, 0xE1F1, - 0x78BA, 0x8A6D, 0x78BC, 0xE1F9, 0x78BE, 0xE1F8, 0x78C1, 0x8EA5, - 0x78C5, 0xE1FA, 0x78C6, 0xE1F5, 0x78CA, 0xE1FB, 0x78CB, 0xE1F6, - 0x78D0, 0x94D6, 0x78D1, 0xE1F4, 0x78D4, 0xE1F7, 0x78DA, 0xE241, - 0x78E7, 0xE240, 0x78E8, 0x9681, 0x78EC, 0xE1FC, 0x78EF, 0x88E9, - 0x78F4, 0xE243, 0x78FD, 0xE242, 0x7901, 0x8FCA, 0x7907, 0xE244, - 0x790E, 0x9162, 0x7911, 0xE246, 0x7912, 0xE245, 0x7919, 0xE247, - 0x7926, 0xE1E6, 0x792A, 0xE1E8, 0x792B, 0xE249, 0x792C, 0xE248, - 0x7930, 0xFB7C, 0x793A, 0x8EA6, 0x793C, 0x97E7, 0x793E, 0x8ED0, - 0x7940, 0xE24A, 0x7941, 0x8C56, 0x7947, 0x8B5F, 0x7948, 0x8B46, - 0x7949, 0x8E83, 0x7950, 0x9753, 0x7953, 0xE250, 0x7955, 0xE24F, - 0x7956, 0x9163, 0x7957, 0xE24C, 0x795A, 0xE24E, 0x795D, 0x8F6A, - 0x795E, 0x905F, 0x795F, 0xE24D, 0x7960, 0xE24B, 0x7962, 0x9449, - 0x7965, 0x8FCB, 0x7968, 0x955B, 0x796D, 0x8DD5, 0x7977, 0x9398, - 0x797A, 0xE251, 0x797F, 0xE252, 0x7980, 0xE268, 0x7981, 0x8BD6, - 0x7984, 0x985C, 0x7985, 0x9154, 0x798A, 0xE253, 0x798D, 0x89D0, - 0x798E, 0x92F5, 0x798F, 0x959F, 0x7994, 0xFB81, 0x799B, 0xFB83, - 0x799D, 0xE254, 0x79A6, 0x8B9A, 0x79A7, 0xE255, 0x79AA, 0xE257, - 0x79AE, 0xE258, 0x79B0, 0x9448, 0x79B3, 0xE259, 0x79B9, 0xE25A, - 0x79BA, 0xE25B, 0x79BD, 0x8BD7, 0x79BE, 0x89D1, 0x79BF, 0x93C3, - 0x79C0, 0x8F47, 0x79C1, 0x8E84, 0x79C9, 0xE25C, 0x79CB, 0x8F48, - 0x79D1, 0x89C8, 0x79D2, 0x9562, 0x79D5, 0xE25D, 0x79D8, 0x94E9, - 0x79DF, 0x9164, 0x79E1, 0xE260, 0x79E3, 0xE261, 0x79E4, 0x9489, - 0x79E6, 0x9060, 0x79E7, 0xE25E, 0x79E9, 0x9281, 0x79EC, 0xE25F, - 0x79F0, 0x8FCC, 0x79FB, 0x88DA, 0x7A00, 0x8B48, 0x7A08, 0xE262, - 0x7A0B, 0x92F6, 0x7A0D, 0xE263, 0x7A0E, 0x90C5, 0x7A14, 0x96AB, - 0x7A17, 0x9542, 0x7A18, 0xE264, 0x7A19, 0xE265, 0x7A1A, 0x9274, - 0x7A1C, 0x97C5, 0x7A1F, 0xE267, 0x7A20, 0xE266, 0x7A2E, 0x8EED, - 0x7A31, 0xE269, 0x7A32, 0x88EE, 0x7A37, 0xE26C, 0x7A3B, 0xE26A, - 0x7A3C, 0x89D2, 0x7A3D, 0x8C6D, 0x7A3E, 0xE26B, 0x7A3F, 0x8D65, - 0x7A40, 0x8D92, 0x7A42, 0x95E4, 0x7A43, 0xE26D, 0x7A46, 0x9673, - 0x7A49, 0xE26F, 0x7A4D, 0x90CF, 0x7A4E, 0x896E, 0x7A4F, 0x89B8, - 0x7A50, 0x88AA, 0x7A57, 0xE26E, 0x7A61, 0xE270, 0x7A62, 0xE271, - 0x7A63, 0x8FF5, 0x7A69, 0xE272, 0x7A6B, 0x8A6E, 0x7A70, 0xE274, - 0x7A74, 0x8C8A, 0x7A76, 0x8B86, 0x7A79, 0xE275, 0x7A7A, 0x8BF3, - 0x7A7D, 0xE276, 0x7A7F, 0x90FA, 0x7A81, 0x93CB, 0x7A83, 0x90DE, - 0x7A84, 0x8DF3, 0x7A88, 0xE277, 0x7A92, 0x9282, 0x7A93, 0x918B, - 0x7A95, 0xE279, 0x7A96, 0xE27B, 0x7A97, 0xE278, 0x7A98, 0xE27A, - 0x7A9F, 0x8C41, 0x7AA9, 0xE27C, 0x7AAA, 0x8C45, 0x7AAE, 0x8B87, - 0x7AAF, 0x9771, 0x7AB0, 0xE27E, 0x7AB6, 0xE280, 0x7ABA, 0x894D, - 0x7ABF, 0xE283, 0x7AC3, 0x8A96, 0x7AC4, 0xE282, 0x7AC5, 0xE281, - 0x7AC7, 0xE285, 0x7AC8, 0xE27D, 0x7ACA, 0xE286, 0x7ACB, 0x97A7, - 0x7ACD, 0xE287, 0x7ACF, 0xE288, 0x7AD1, 0xFB84, 0x7AD2, 0x9AF2, - 0x7AD3, 0xE28A, 0x7AD5, 0xE289, 0x7AD9, 0xE28B, 0x7ADA, 0xE28C, - 0x7ADC, 0x97B3, 0x7ADD, 0xE28D, 0x7ADF, 0xE8ED, 0x7AE0, 0x8FCD, - 0x7AE1, 0xE28E, 0x7AE2, 0xE28F, 0x7AE3, 0x8F76, 0x7AE5, 0x93B6, - 0x7AE6, 0xE290, 0x7AE7, 0xFB85, 0x7AEA, 0x9247, 0x7AEB, 0xFB87, - 0x7AED, 0xE291, 0x7AEF, 0x925B, 0x7AF0, 0xE292, 0x7AF6, 0x8BA3, - 0x7AF8, 0x995E, 0x7AF9, 0x927C, 0x7AFA, 0x8EB1, 0x7AFF, 0x8AC6, - 0x7B02, 0xE293, 0x7B04, 0xE2A0, 0x7B06, 0xE296, 0x7B08, 0x8B88, - 0x7B0A, 0xE295, 0x7B0B, 0xE2A2, 0x7B0F, 0xE294, 0x7B11, 0x8FCE, - 0x7B18, 0xE298, 0x7B19, 0xE299, 0x7B1B, 0x934A, 0x7B1E, 0xE29A, - 0x7B20, 0x8A7D, 0x7B25, 0x9079, 0x7B26, 0x9584, 0x7B28, 0xE29C, - 0x7B2C, 0x91E6, 0x7B33, 0xE297, 0x7B35, 0xE29B, 0x7B36, 0xE29D, - 0x7B39, 0x8DF9, 0x7B45, 0xE2A4, 0x7B46, 0x954D, 0x7B48, 0x94A4, - 0x7B49, 0x9399, 0x7B4B, 0x8BD8, 0x7B4C, 0xE2A3, 0x7B4D, 0xE2A1, - 0x7B4F, 0x94B3, 0x7B50, 0xE29E, 0x7B51, 0x927D, 0x7B52, 0x939B, - 0x7B54, 0x939A, 0x7B56, 0x8DF4, 0x7B5D, 0xE2B6, 0x7B65, 0xE2A6, - 0x7B67, 0xE2A8, 0x7B6C, 0xE2AB, 0x7B6E, 0xE2AC, 0x7B70, 0xE2A9, - 0x7B71, 0xE2AA, 0x7B74, 0xE2A7, 0x7B75, 0xE2A5, 0x7B7A, 0xE29F, - 0x7B86, 0x95CD, 0x7B87, 0x89D3, 0x7B8B, 0xE2B3, 0x7B8D, 0xE2B0, - 0x7B8F, 0xE2B5, 0x7B92, 0xE2B4, 0x7B94, 0x9493, 0x7B95, 0x96A5, - 0x7B97, 0x8E5A, 0x7B98, 0xE2AE, 0x7B99, 0xE2B7, 0x7B9A, 0xE2B2, - 0x7B9C, 0xE2B1, 0x7B9D, 0xE2AD, 0x7B9E, 0xFB88, 0x7B9F, 0xE2AF, - 0x7BA1, 0x8AC7, 0x7BAA, 0x925C, 0x7BAD, 0x90FB, 0x7BB1, 0x94A0, - 0x7BB4, 0xE2BC, 0x7BB8, 0x94A2, 0x7BC0, 0x90DF, 0x7BC1, 0xE2B9, - 0x7BC4, 0x94CD, 0x7BC6, 0xE2BD, 0x7BC7, 0x95D1, 0x7BC9, 0x927A, - 0x7BCB, 0xE2B8, 0x7BCC, 0xE2BA, 0x7BCF, 0xE2BB, 0x7BDD, 0xE2BE, - 0x7BE0, 0x8EC2, 0x7BE4, 0x93C4, 0x7BE5, 0xE2C3, 0x7BE6, 0xE2C2, - 0x7BE9, 0xE2BF, 0x7BED, 0x9855, 0x7BF3, 0xE2C8, 0x7BF6, 0xE2CC, - 0x7BF7, 0xE2C9, 0x7C00, 0xE2C5, 0x7C07, 0xE2C6, 0x7C0D, 0xE2CB, - 0x7C11, 0xE2C0, 0x7C12, 0x99D3, 0x7C13, 0xE2C7, 0x7C14, 0xE2C1, - 0x7C17, 0xE2CA, 0x7C1F, 0xE2D0, 0x7C21, 0x8AC8, 0x7C23, 0xE2CD, - 0x7C27, 0xE2CE, 0x7C2A, 0xE2CF, 0x7C2B, 0xE2D2, 0x7C37, 0xE2D1, - 0x7C38, 0x94F4, 0x7C3D, 0xE2D3, 0x7C3E, 0x97FA, 0x7C3F, 0x95EB, - 0x7C40, 0xE2D8, 0x7C43, 0xE2D5, 0x7C4C, 0xE2D4, 0x7C4D, 0x90D0, - 0x7C4F, 0xE2D7, 0x7C50, 0xE2D9, 0x7C54, 0xE2D6, 0x7C56, 0xE2DD, - 0x7C58, 0xE2DA, 0x7C5F, 0xE2DB, 0x7C60, 0xE2C4, 0x7C64, 0xE2DC, - 0x7C65, 0xE2DE, 0x7C6C, 0xE2DF, 0x7C73, 0x95C4, 0x7C75, 0xE2E0, - 0x7C7E, 0x96E0, 0x7C81, 0x8BCC, 0x7C82, 0x8C48, 0x7C83, 0xE2E1, - 0x7C89, 0x95B2, 0x7C8B, 0x9088, 0x7C8D, 0x96AE, 0x7C90, 0xE2E2, - 0x7C92, 0x97B1, 0x7C95, 0x9494, 0x7C97, 0x9165, 0x7C98, 0x9453, - 0x7C9B, 0x8F6C, 0x7C9F, 0x88BE, 0x7CA1, 0xE2E7, 0x7CA2, 0xE2E5, - 0x7CA4, 0xE2E3, 0x7CA5, 0x8A9F, 0x7CA7, 0x8FCF, 0x7CA8, 0xE2E8, - 0x7CAB, 0xE2E6, 0x7CAD, 0xE2E4, 0x7CAE, 0xE2EC, 0x7CB1, 0xE2EB, - 0x7CB2, 0xE2EA, 0x7CB3, 0xE2E9, 0x7CB9, 0xE2ED, 0x7CBD, 0xE2EE, - 0x7CBE, 0x90B8, 0x7CC0, 0xE2EF, 0x7CC2, 0xE2F1, 0x7CC5, 0xE2F0, - 0x7CCA, 0x8CD0, 0x7CCE, 0x9157, 0x7CD2, 0xE2F3, 0x7CD6, 0x939C, - 0x7CD8, 0xE2F2, 0x7CDC, 0xE2F4, 0x7CDE, 0x95B3, 0x7CDF, 0x918C, - 0x7CE0, 0x8D66, 0x7CE2, 0xE2F5, 0x7CE7, 0x97C6, 0x7CEF, 0xE2F7, - 0x7CF2, 0xE2F8, 0x7CF4, 0xE2F9, 0x7CF6, 0xE2FA, 0x7CF8, 0x8E85, - 0x7CFA, 0xE2FB, 0x7CFB, 0x8C6E, 0x7CFE, 0x8B8A, 0x7D00, 0x8B49, - 0x7D02, 0xE340, 0x7D04, 0x96F1, 0x7D05, 0x8D67, 0x7D06, 0xE2FC, - 0x7D0A, 0xE343, 0x7D0B, 0x96E4, 0x7D0D, 0x945B, 0x7D10, 0x9552, - 0x7D14, 0x8F83, 0x7D15, 0xE342, 0x7D17, 0x8ED1, 0x7D18, 0x8D68, - 0x7D19, 0x8E86, 0x7D1A, 0x8B89, 0x7D1B, 0x95B4, 0x7D1C, 0xE341, - 0x7D20, 0x9166, 0x7D21, 0x9661, 0x7D22, 0x8DF5, 0x7D2B, 0x8E87, - 0x7D2C, 0x92DB, 0x7D2E, 0xE346, 0x7D2F, 0x97DD, 0x7D30, 0x8DD7, - 0x7D32, 0xE347, 0x7D33, 0x9061, 0x7D35, 0xE349, 0x7D39, 0x8FD0, - 0x7D3A, 0x8DAE, 0x7D3F, 0xE348, 0x7D42, 0x8F49, 0x7D43, 0x8CBC, - 0x7D44, 0x9167, 0x7D45, 0xE344, 0x7D46, 0xE34A, 0x7D48, 0xFB8A, - 0x7D4B, 0xE345, 0x7D4C, 0x8C6F, 0x7D4E, 0xE34D, 0x7D4F, 0xE351, - 0x7D50, 0x8C8B, 0x7D56, 0xE34C, 0x7D5B, 0xE355, 0x7D5C, 0xFB8B, - 0x7D5E, 0x8D69, 0x7D61, 0x978D, 0x7D62, 0x88BA, 0x7D63, 0xE352, - 0x7D66, 0x8B8B, 0x7D68, 0xE34F, 0x7D6E, 0xE350, 0x7D71, 0x939D, - 0x7D72, 0xE34E, 0x7D73, 0xE34B, 0x7D75, 0x8A47, 0x7D76, 0x90E2, - 0x7D79, 0x8CA6, 0x7D7D, 0xE357, 0x7D89, 0xE354, 0x7D8F, 0xE356, - 0x7D93, 0xE353, 0x7D99, 0x8C70, 0x7D9A, 0x91B1, 0x7D9B, 0xE358, - 0x7D9C, 0x918E, 0x7D9F, 0xE365, 0x7DA0, 0xFB8D, 0x7DA2, 0xE361, - 0x7DA3, 0xE35B, 0x7DAB, 0xE35F, 0x7DAC, 0x8EF8, 0x7DAD, 0x88DB, - 0x7DAE, 0xE35A, 0x7DAF, 0xE362, 0x7DB0, 0xE366, 0x7DB1, 0x8D6A, - 0x7DB2, 0x96D4, 0x7DB4, 0x92D4, 0x7DB5, 0xE35C, 0x7DB7, 0xFB8C, - 0x7DB8, 0xE364, 0x7DBA, 0xE359, 0x7DBB, 0x925D, 0x7DBD, 0xE35E, - 0x7DBE, 0x88BB, 0x7DBF, 0x96C8, 0x7DC7, 0xE35D, 0x7DCA, 0x8BD9, - 0x7DCB, 0x94EA, 0x7DCF, 0x918D, 0x7DD1, 0x97CE, 0x7DD2, 0x8F8F, - 0x7DD5, 0xE38E, 0x7DD6, 0xFB8E, 0x7DD8, 0xE367, 0x7DDA, 0x90FC, - 0x7DDC, 0xE363, 0x7DDD, 0xE368, 0x7DDE, 0xE36A, 0x7DE0, 0x92F7, - 0x7DE1, 0xE36D, 0x7DE4, 0xE369, 0x7DE8, 0x95D2, 0x7DE9, 0x8AC9, - 0x7DEC, 0x96C9, 0x7DEF, 0x88DC, 0x7DF2, 0xE36C, 0x7DF4, 0x97FB, - 0x7DFB, 0xE36B, 0x7E01, 0x898F, 0x7E04, 0x93EA, 0x7E05, 0xE36E, - 0x7E09, 0xE375, 0x7E0A, 0xE36F, 0x7E0B, 0xE376, 0x7E12, 0xE372, - 0x7E1B, 0x949B, 0x7E1E, 0x8EC8, 0x7E1F, 0xE374, 0x7E21, 0xE371, - 0x7E22, 0xE377, 0x7E23, 0xE370, 0x7E26, 0x8F63, 0x7E2B, 0x9644, - 0x7E2E, 0x8F6B, 0x7E31, 0xE373, 0x7E32, 0xE380, 0x7E35, 0xE37B, - 0x7E37, 0xE37E, 0x7E39, 0xE37C, 0x7E3A, 0xE381, 0x7E3B, 0xE37A, - 0x7E3D, 0xE360, 0x7E3E, 0x90D1, 0x7E41, 0x94C9, 0x7E43, 0xE37D, - 0x7E46, 0xE378, 0x7E4A, 0x9140, 0x7E4B, 0x8C71, 0x7E4D, 0x8F4A, - 0x7E52, 0xFB8F, 0x7E54, 0x9044, 0x7E55, 0x9155, 0x7E56, 0xE384, - 0x7E59, 0xE386, 0x7E5A, 0xE387, 0x7E5D, 0xE383, 0x7E5E, 0xE385, - 0x7E66, 0xE379, 0x7E67, 0xE382, 0x7E69, 0xE38A, 0x7E6A, 0xE389, - 0x7E6D, 0x969A, 0x7E70, 0x8C4A, 0x7E79, 0xE388, 0x7E7B, 0xE38C, - 0x7E7C, 0xE38B, 0x7E7D, 0xE38F, 0x7E7F, 0xE391, 0x7E82, 0x8E5B, - 0x7E83, 0xE38D, 0x7E88, 0xE392, 0x7E89, 0xE393, 0x7E8A, 0xFA5C, - 0x7E8C, 0xE394, 0x7E8E, 0xE39A, 0x7E8F, 0x935A, 0x7E90, 0xE396, - 0x7E92, 0xE395, 0x7E93, 0xE397, 0x7E94, 0xE398, 0x7E96, 0xE399, - 0x7E9B, 0xE39B, 0x7E9C, 0xE39C, 0x7F36, 0x8ACA, 0x7F38, 0xE39D, - 0x7F3A, 0xE39E, 0x7F45, 0xE39F, 0x7F47, 0xFB90, 0x7F4C, 0xE3A0, - 0x7F4D, 0xE3A1, 0x7F4E, 0xE3A2, 0x7F50, 0xE3A3, 0x7F51, 0xE3A4, - 0x7F54, 0xE3A6, 0x7F55, 0xE3A5, 0x7F58, 0xE3A7, 0x7F5F, 0xE3A8, - 0x7F60, 0xE3A9, 0x7F67, 0xE3AC, 0x7F68, 0xE3AA, 0x7F69, 0xE3AB, - 0x7F6A, 0x8DDF, 0x7F6B, 0x8C72, 0x7F6E, 0x9275, 0x7F70, 0x94B1, - 0x7F72, 0x8F90, 0x7F75, 0x946C, 0x7F77, 0x94EB, 0x7F78, 0xE3AD, - 0x7F79, 0x9CEB, 0x7F82, 0xE3AE, 0x7F83, 0xE3B0, 0x7F85, 0x9785, - 0x7F86, 0xE3AF, 0x7F87, 0xE3B2, 0x7F88, 0xE3B1, 0x7F8A, 0x9772, - 0x7F8C, 0xE3B3, 0x7F8E, 0x94FC, 0x7F94, 0xE3B4, 0x7F9A, 0xE3B7, - 0x7F9D, 0xE3B6, 0x7F9E, 0xE3B5, 0x7FA1, 0xFB91, 0x7FA3, 0xE3B8, - 0x7FA4, 0x8C51, 0x7FA8, 0x9141, 0x7FA9, 0x8B60, 0x7FAE, 0xE3BC, - 0x7FAF, 0xE3B9, 0x7FB2, 0xE3BA, 0x7FB6, 0xE3BD, 0x7FB8, 0xE3BE, - 0x7FB9, 0xE3BB, 0x7FBD, 0x8948, 0x7FC1, 0x89A5, 0x7FC5, 0xE3C0, - 0x7FC6, 0xE3C1, 0x7FCA, 0xE3C2, 0x7FCC, 0x9782, 0x7FD2, 0x8F4B, - 0x7FD4, 0xE3C4, 0x7FD5, 0xE3C3, 0x7FE0, 0x9089, 0x7FE1, 0xE3C5, - 0x7FE6, 0xE3C6, 0x7FE9, 0xE3C7, 0x7FEB, 0x8AE3, 0x7FF0, 0x8ACB, - 0x7FF3, 0xE3C8, 0x7FF9, 0xE3C9, 0x7FFB, 0x967C, 0x7FFC, 0x9783, - 0x8000, 0x9773, 0x8001, 0x9856, 0x8003, 0x8D6C, 0x8004, 0xE3CC, - 0x8005, 0x8ED2, 0x8006, 0xE3CB, 0x800B, 0xE3CD, 0x800C, 0x8EA7, - 0x8010, 0x91CF, 0x8012, 0xE3CE, 0x8015, 0x8D6B, 0x8017, 0x96D5, - 0x8018, 0xE3CF, 0x8019, 0xE3D0, 0x801C, 0xE3D1, 0x8021, 0xE3D2, - 0x8028, 0xE3D3, 0x8033, 0x8EA8, 0x8036, 0x96EB, 0x803B, 0xE3D5, - 0x803D, 0x925E, 0x803F, 0xE3D4, 0x8046, 0xE3D7, 0x804A, 0xE3D6, - 0x8052, 0xE3D8, 0x8056, 0x90B9, 0x8058, 0xE3D9, 0x805A, 0xE3DA, - 0x805E, 0x95B7, 0x805F, 0xE3DB, 0x8061, 0x918F, 0x8062, 0xE3DC, - 0x8068, 0xE3DD, 0x806F, 0x97FC, 0x8070, 0xE3E0, 0x8072, 0xE3DF, - 0x8073, 0xE3DE, 0x8074, 0x92AE, 0x8076, 0xE3E1, 0x8077, 0x9045, - 0x8079, 0xE3E2, 0x807D, 0xE3E3, 0x807E, 0x9857, 0x807F, 0xE3E4, - 0x8084, 0xE3E5, 0x8085, 0xE3E7, 0x8086, 0xE3E6, 0x8087, 0x94A3, - 0x8089, 0x93F7, 0x808B, 0x985D, 0x808C, 0x94A7, 0x8093, 0xE3E9, - 0x8096, 0x8FD1, 0x8098, 0x9549, 0x809A, 0xE3EA, 0x809B, 0xE3E8, - 0x809D, 0x8ACC, 0x80A1, 0x8CD2, 0x80A2, 0x8E88, 0x80A5, 0x94EC, - 0x80A9, 0x8CA8, 0x80AA, 0x9662, 0x80AC, 0xE3ED, 0x80AD, 0xE3EB, - 0x80AF, 0x8D6D, 0x80B1, 0x8D6E, 0x80B2, 0x88E7, 0x80B4, 0x8DE6, - 0x80BA, 0x9478, 0x80C3, 0x88DD, 0x80C4, 0xE3F2, 0x80C6, 0x925F, - 0x80CC, 0x9477, 0x80CE, 0x91D9, 0x80D6, 0xE3F4, 0x80D9, 0xE3F0, - 0x80DA, 0xE3F3, 0x80DB, 0xE3EE, 0x80DD, 0xE3F1, 0x80DE, 0x9645, - 0x80E1, 0x8CD3, 0x80E4, 0x88FB, 0x80E5, 0xE3EF, 0x80EF, 0xE3F6, - 0x80F1, 0xE3F7, 0x80F4, 0x93B7, 0x80F8, 0x8BB9, 0x80FC, 0xE445, - 0x80FD, 0x945C, 0x8102, 0x8E89, 0x8105, 0x8BBA, 0x8106, 0x90C6, - 0x8107, 0x9865, 0x8108, 0x96AC, 0x8109, 0xE3F5, 0x810A, 0x90D2, - 0x811A, 0x8B72, 0x811B, 0xE3F8, 0x8123, 0xE3FA, 0x8129, 0xE3F9, - 0x812F, 0xE3FB, 0x8131, 0x9245, 0x8133, 0x945D, 0x8139, 0x92AF, - 0x813E, 0xE442, 0x8146, 0xE441, 0x814B, 0xE3FC, 0x814E, 0x9074, - 0x8150, 0x9585, 0x8151, 0xE444, 0x8153, 0xE443, 0x8154, 0x8D6F, - 0x8155, 0x9872, 0x815F, 0xE454, 0x8165, 0xE448, 0x8166, 0xE449, - 0x816B, 0x8EEE, 0x816E, 0xE447, 0x8170, 0x8D98, 0x8171, 0xE446, - 0x8174, 0xE44A, 0x8178, 0x92B0, 0x8179, 0x95A0, 0x817A, 0x9142, - 0x817F, 0x91DA, 0x8180, 0xE44E, 0x8182, 0xE44F, 0x8183, 0xE44B, - 0x8188, 0xE44C, 0x818A, 0xE44D, 0x818F, 0x8D70, 0x8193, 0xE455, - 0x8195, 0xE451, 0x819A, 0x9586, 0x819C, 0x968C, 0x819D, 0x9547, - 0x81A0, 0xE450, 0x81A3, 0xE453, 0x81A4, 0xE452, 0x81A8, 0x9663, - 0x81A9, 0xE456, 0x81B0, 0xE457, 0x81B3, 0x9156, 0x81B5, 0xE458, - 0x81B8, 0xE45A, 0x81BA, 0xE45E, 0x81BD, 0xE45B, 0x81BE, 0xE459, - 0x81BF, 0x945E, 0x81C0, 0xE45C, 0x81C2, 0xE45D, 0x81C6, 0x89B0, - 0x81C8, 0xE464, 0x81C9, 0xE45F, 0x81CD, 0xE460, 0x81D1, 0xE461, - 0x81D3, 0x919F, 0x81D8, 0xE463, 0x81D9, 0xE462, 0x81DA, 0xE465, - 0x81DF, 0xE466, 0x81E0, 0xE467, 0x81E3, 0x9062, 0x81E5, 0x89E7, - 0x81E7, 0xE468, 0x81E8, 0x97D5, 0x81EA, 0x8EA9, 0x81ED, 0x8F4C, - 0x81F3, 0x8E8A, 0x81F4, 0x9276, 0x81FA, 0xE469, 0x81FB, 0xE46A, - 0x81FC, 0x8950, 0x81FE, 0xE46B, 0x8201, 0xE46C, 0x8202, 0xE46D, - 0x8205, 0xE46E, 0x8207, 0xE46F, 0x8208, 0x8BBB, 0x8209, 0x9DA8, - 0x820A, 0xE470, 0x820C, 0x90E3, 0x820D, 0xE471, 0x820E, 0x8EC9, - 0x8210, 0xE472, 0x8212, 0x98AE, 0x8216, 0xE473, 0x8217, 0x95DC, - 0x8218, 0x8ADA, 0x821B, 0x9143, 0x821C, 0x8F77, 0x821E, 0x9591, - 0x821F, 0x8F4D, 0x8229, 0xE474, 0x822A, 0x8D71, 0x822B, 0xE475, - 0x822C, 0x94CA, 0x822E, 0xE484, 0x8233, 0xE477, 0x8235, 0x91C7, - 0x8236, 0x9495, 0x8237, 0x8CBD, 0x8238, 0xE476, 0x8239, 0x9144, - 0x8240, 0xE478, 0x8247, 0x92F8, 0x8258, 0xE47A, 0x8259, 0xE479, - 0x825A, 0xE47C, 0x825D, 0xE47B, 0x825F, 0xE47D, 0x8262, 0xE480, - 0x8264, 0xE47E, 0x8266, 0x8ACD, 0x8268, 0xE481, 0x826A, 0xE482, - 0x826B, 0xE483, 0x826E, 0x8DAF, 0x826F, 0x97C7, 0x8271, 0xE485, - 0x8272, 0x9046, 0x8276, 0x8990, 0x8277, 0xE486, 0x8278, 0xE487, - 0x827E, 0xE488, 0x828B, 0x88F0, 0x828D, 0xE489, 0x8292, 0xE48A, - 0x8299, 0x9587, 0x829D, 0x8EC5, 0x829F, 0xE48C, 0x82A5, 0x8A48, - 0x82A6, 0x88B0, 0x82AB, 0xE48B, 0x82AC, 0xE48E, 0x82AD, 0x946D, - 0x82AF, 0x9063, 0x82B1, 0x89D4, 0x82B3, 0x9646, 0x82B8, 0x8C7C, - 0x82B9, 0x8BDA, 0x82BB, 0xE48D, 0x82BD, 0x89E8, 0x82C5, 0x8AA1, - 0x82D1, 0x8991, 0x82D2, 0xE492, 0x82D3, 0x97E8, 0x82D4, 0x91DB, - 0x82D7, 0x9563, 0x82D9, 0xE49E, 0x82DB, 0x89D5, 0x82DC, 0xE49C, - 0x82DE, 0xE49A, 0x82DF, 0xE491, 0x82E1, 0xE48F, 0x82E3, 0xE490, - 0x82E5, 0x8EE1, 0x82E6, 0x8BEA, 0x82E7, 0x9297, 0x82EB, 0x93CF, - 0x82F1, 0x8970, 0x82F3, 0xE494, 0x82F4, 0xE493, 0x82F9, 0xE499, - 0x82FA, 0xE495, 0x82FB, 0xE498, 0x8301, 0xFB93, 0x8302, 0x96CE, - 0x8303, 0xE497, 0x8304, 0x89D6, 0x8305, 0x8A9D, 0x8306, 0xE49B, - 0x8309, 0xE49D, 0x830E, 0x8C73, 0x8316, 0xE4A1, 0x8317, 0xE4AA, - 0x8318, 0xE4AB, 0x831C, 0x88A9, 0x8323, 0xE4B2, 0x8328, 0x88EF, - 0x832B, 0xE4A9, 0x832F, 0xE4A8, 0x8331, 0xE4A3, 0x8332, 0xE4A2, - 0x8334, 0xE4A0, 0x8335, 0xE49F, 0x8336, 0x9283, 0x8338, 0x91F9, - 0x8339, 0xE4A5, 0x8340, 0xE4A4, 0x8345, 0xE4A7, 0x8349, 0x9190, - 0x834A, 0x8C74, 0x834F, 0x8960, 0x8350, 0xE4A6, 0x8352, 0x8D72, - 0x8358, 0x9191, 0x8362, 0xFB94, 0x8373, 0xE4B8, 0x8375, 0xE4B9, - 0x8377, 0x89D7, 0x837B, 0x89AC, 0x837C, 0xE4B6, 0x837F, 0xFB95, - 0x8385, 0xE4AC, 0x8387, 0xE4B4, 0x8389, 0xE4BB, 0x838A, 0xE4B5, - 0x838E, 0xE4B3, 0x8393, 0xE496, 0x8396, 0xE4B1, 0x839A, 0xE4AD, - 0x839E, 0x8ACE, 0x839F, 0xE4AF, 0x83A0, 0xE4BA, 0x83A2, 0xE4B0, - 0x83A8, 0xE4BC, 0x83AA, 0xE4AE, 0x83AB, 0x949C, 0x83B1, 0x9789, - 0x83B5, 0xE4B7, 0x83BD, 0xE4CD, 0x83C1, 0xE4C5, 0x83C5, 0x909B, - 0x83C7, 0xFB96, 0x83CA, 0x8B65, 0x83CC, 0x8BDB, 0x83CE, 0xE4C0, - 0x83D3, 0x89D9, 0x83D6, 0x8FD2, 0x83D8, 0xE4C3, 0x83DC, 0x8DD8, - 0x83DF, 0x9370, 0x83E0, 0xE4C8, 0x83E9, 0x95EC, 0x83EB, 0xE4BF, - 0x83EF, 0x89D8, 0x83F0, 0x8CD4, 0x83F1, 0x9548, 0x83F2, 0xE4C9, - 0x83F4, 0xE4BD, 0x83F6, 0xFB97, 0x83F7, 0xE4C6, 0x83FB, 0xE4D0, - 0x83FD, 0xE4C1, 0x8403, 0xE4C2, 0x8404, 0x93B8, 0x8407, 0xE4C7, - 0x840B, 0xE4C4, 0x840C, 0x9647, 0x840D, 0xE4CA, 0x840E, 0x88DE, - 0x8413, 0xE4BE, 0x8420, 0xE4CC, 0x8422, 0xE4CB, 0x8429, 0x948B, - 0x842A, 0xE4D2, 0x842C, 0xE4DD, 0x8431, 0x8A9E, 0x8435, 0xE4E0, - 0x8438, 0xE4CE, 0x843C, 0xE4D3, 0x843D, 0x978E, 0x8446, 0xE4DC, - 0x8448, 0xFB98, 0x8449, 0x9774, 0x844E, 0x97A8, 0x8457, 0x9298, - 0x845B, 0x8A8B, 0x8461, 0x9592, 0x8462, 0xE4E2, 0x8463, 0x939F, - 0x8466, 0x88AF, 0x8469, 0xE4DB, 0x846B, 0xE4D7, 0x846C, 0x9192, - 0x846D, 0xE4D1, 0x846E, 0xE4D9, 0x846F, 0xE4DE, 0x8471, 0x944B, - 0x8475, 0x88A8, 0x8477, 0xE4D6, 0x8479, 0xE4DF, 0x847A, 0x9598, - 0x8482, 0xE4DA, 0x8484, 0xE4D5, 0x848B, 0x8FD3, 0x8490, 0x8F4E, - 0x8494, 0x8EAA, 0x8499, 0x96D6, 0x849C, 0x9566, 0x849F, 0xE4E5, - 0x84A1, 0xE4EE, 0x84AD, 0xE4D8, 0x84B2, 0x8A97, 0x84B4, 0xFB99, - 0x84B8, 0x8FF6, 0x84B9, 0xE4E3, 0x84BB, 0xE4E8, 0x84BC, 0x9193, - 0x84BF, 0xE4E4, 0x84C1, 0xE4EB, 0x84C4, 0x927E, 0x84C6, 0xE4EC, - 0x84C9, 0x9775, 0x84CA, 0xE4E1, 0x84CB, 0x8A57, 0x84CD, 0xE4E7, - 0x84D0, 0xE4EA, 0x84D1, 0x96AA, 0x84D6, 0xE4ED, 0x84D9, 0xE4E6, - 0x84DA, 0xE4E9, 0x84DC, 0xFA60, 0x84EC, 0x9648, 0x84EE, 0x9840, - 0x84F4, 0xE4F1, 0x84FC, 0xE4F8, 0x84FF, 0xE4F0, 0x8500, 0x8EC1, - 0x8506, 0xE4CF, 0x8511, 0x95CC, 0x8513, 0x96A0, 0x8514, 0xE4F7, - 0x8515, 0xE4F6, 0x8517, 0xE4F2, 0x8518, 0xE4F3, 0x851A, 0x8955, - 0x851F, 0xE4F5, 0x8521, 0xE4EF, 0x8526, 0x92D3, 0x852C, 0xE4F4, - 0x852D, 0x88FC, 0x8535, 0x91A0, 0x853D, 0x95C1, 0x8540, 0xE4F9, - 0x8541, 0xE540, 0x8543, 0x94D7, 0x8548, 0xE4FC, 0x8549, 0x8FD4, - 0x854A, 0x8EC7, 0x854B, 0xE542, 0x854E, 0x8BBC, 0x8553, 0xFB9A, - 0x8555, 0xE543, 0x8557, 0x9599, 0x8558, 0xE4FB, 0x8559, 0xFB9B, - 0x855A, 0xE4D4, 0x8563, 0xE4FA, 0x8568, 0x986E, 0x8569, 0x93A0, - 0x856A, 0x9593, 0x856B, 0xFB9C, 0x856D, 0xE54A, 0x8577, 0xE550, - 0x857E, 0xE551, 0x8580, 0xE544, 0x8584, 0x9496, 0x8587, 0xE54E, - 0x8588, 0xE546, 0x858A, 0xE548, 0x8590, 0xE552, 0x8591, 0xE547, - 0x8594, 0xE54B, 0x8597, 0x8992, 0x8599, 0x93E3, 0x859B, 0xE54C, - 0x859C, 0xE54F, 0x85A4, 0xE545, 0x85A6, 0x9145, 0x85A8, 0xE549, - 0x85A9, 0x8E46, 0x85AA, 0x9064, 0x85AB, 0x8C4F, 0x85AC, 0x96F2, - 0x85AE, 0x96F7, 0x85AF, 0x8F92, 0x85B0, 0xFB9E, 0x85B9, 0xE556, - 0x85BA, 0xE554, 0x85C1, 0x986D, 0x85C9, 0xE553, 0x85CD, 0x9795, - 0x85CF, 0xE555, 0x85D0, 0xE557, 0x85D5, 0xE558, 0x85DC, 0xE55B, - 0x85DD, 0xE559, 0x85E4, 0x93A1, 0x85E5, 0xE55A, 0x85E9, 0x94CB, - 0x85EA, 0xE54D, 0x85F7, 0x8F93, 0x85F9, 0xE55C, 0x85FA, 0xE561, - 0x85FB, 0x9194, 0x85FE, 0xE560, 0x8602, 0xE541, 0x8606, 0xE562, - 0x8607, 0x9168, 0x860A, 0xE55D, 0x860B, 0xE55F, 0x8613, 0xE55E, - 0x8616, 0x9F50, 0x8617, 0x9F41, 0x861A, 0xE564, 0x8622, 0xE563, - 0x862D, 0x9796, 0x862F, 0xE1BA, 0x8630, 0xE565, 0x863F, 0xE566, - 0x864D, 0xE567, 0x864E, 0x8CD5, 0x8650, 0x8B73, 0x8654, 0xE569, - 0x8655, 0x997C, 0x865A, 0x8B95, 0x865C, 0x97B8, 0x865E, 0x8BF1, - 0x865F, 0xE56A, 0x8667, 0xE56B, 0x866B, 0x928E, 0x8671, 0xE56C, - 0x8679, 0x93F8, 0x867B, 0x88B8, 0x868A, 0x89E1, 0x868B, 0xE571, - 0x868C, 0xE572, 0x8693, 0xE56D, 0x8695, 0x8E5C, 0x86A3, 0xE56E, - 0x86A4, 0x9461, 0x86A9, 0xE56F, 0x86AA, 0xE570, 0x86AB, 0xE57A, - 0x86AF, 0xE574, 0x86B0, 0xE577, 0x86B6, 0xE573, 0x86C4, 0xE575, - 0x86C6, 0xE576, 0x86C7, 0x8ED6, 0x86C9, 0xE578, 0x86CB, 0x9260, - 0x86CD, 0x8C75, 0x86CE, 0x8A61, 0x86D4, 0xE57B, 0x86D9, 0x8A5E, - 0x86DB, 0xE581, 0x86DE, 0xE57C, 0x86DF, 0xE580, 0x86E4, 0x94B8, - 0x86E9, 0xE57D, 0x86EC, 0xE57E, 0x86ED, 0x9567, 0x86EE, 0x94D8, - 0x86EF, 0xE582, 0x86F8, 0x91FB, 0x86F9, 0xE58C, 0x86FB, 0xE588, - 0x86FE, 0x89E9, 0x8700, 0xE586, 0x8702, 0x9649, 0x8703, 0xE587, - 0x8706, 0xE584, 0x8708, 0xE585, 0x8709, 0xE58A, 0x870A, 0xE58D, - 0x870D, 0xE58B, 0x8711, 0xE589, 0x8712, 0xE583, 0x8718, 0x9277, - 0x871A, 0xE594, 0x871C, 0x96A8, 0x8725, 0xE592, 0x8729, 0xE593, - 0x8734, 0xE58E, 0x8737, 0xE590, 0x873B, 0xE591, 0x873F, 0xE58F, - 0x8749, 0x90E4, 0x874B, 0x9858, 0x874C, 0xE598, 0x874E, 0xE599, - 0x8753, 0xE59F, 0x8755, 0x9049, 0x8757, 0xE59B, 0x8759, 0xE59E, - 0x875F, 0xE596, 0x8760, 0xE595, 0x8763, 0xE5A0, 0x8766, 0x89DA, - 0x8768, 0xE59C, 0x876A, 0xE5A1, 0x876E, 0xE59D, 0x8774, 0xE59A, - 0x8776, 0x92B1, 0x8778, 0xE597, 0x877F, 0x9488, 0x8782, 0xE5A5, - 0x878D, 0x975A, 0x879F, 0xE5A4, 0x87A2, 0xE5A3, 0x87AB, 0xE5AC, - 0x87AF, 0xE5A6, 0x87B3, 0xE5AE, 0x87BA, 0x9786, 0x87BB, 0xE5B1, - 0x87BD, 0xE5A8, 0x87C0, 0xE5A9, 0x87C4, 0xE5AD, 0x87C6, 0xE5B0, - 0x87C7, 0xE5AF, 0x87CB, 0xE5A7, 0x87D0, 0xE5AA, 0x87D2, 0xE5BB, - 0x87E0, 0xE5B4, 0x87EF, 0xE5B2, 0x87F2, 0xE5B3, 0x87F6, 0xE5B8, - 0x87F7, 0xE5B9, 0x87F9, 0x8A49, 0x87FB, 0x8B61, 0x87FE, 0xE5B7, - 0x8805, 0xE5A2, 0x8807, 0xFBA1, 0x880D, 0xE5B6, 0x880E, 0xE5BA, - 0x880F, 0xE5B5, 0x8811, 0xE5BC, 0x8815, 0xE5BE, 0x8816, 0xE5BD, - 0x8821, 0xE5C0, 0x8822, 0xE5BF, 0x8823, 0xE579, 0x8827, 0xE5C4, - 0x8831, 0xE5C1, 0x8836, 0xE5C2, 0x8839, 0xE5C3, 0x883B, 0xE5C5, - 0x8840, 0x8C8C, 0x8842, 0xE5C7, 0x8844, 0xE5C6, 0x8846, 0x8F4F, - 0x884C, 0x8D73, 0x884D, 0x9FA5, 0x8852, 0xE5C8, 0x8853, 0x8F70, - 0x8857, 0x8A58, 0x8859, 0xE5C9, 0x885B, 0x8971, 0x885D, 0x8FD5, - 0x885E, 0xE5CA, 0x8861, 0x8D74, 0x8862, 0xE5CB, 0x8863, 0x88DF, - 0x8868, 0x955C, 0x886B, 0xE5CC, 0x8870, 0x908A, 0x8872, 0xE5D3, - 0x8875, 0xE5D0, 0x8877, 0x928F, 0x887D, 0xE5D1, 0x887E, 0xE5CE, - 0x887F, 0x8BDC, 0x8881, 0xE5CD, 0x8882, 0xE5D4, 0x8888, 0x8C55, - 0x888B, 0x91DC, 0x888D, 0xE5DA, 0x8892, 0xE5D6, 0x8896, 0x91B3, - 0x8897, 0xE5D5, 0x8899, 0xE5D8, 0x889E, 0xE5CF, 0x88A2, 0xE5D9, - 0x88A4, 0xE5DB, 0x88AB, 0x94ED, 0x88AE, 0xE5D7, 0x88B0, 0xE5DC, - 0x88B1, 0xE5DE, 0x88B4, 0x8CD1, 0x88B5, 0xE5D2, 0x88B7, 0x88BF, - 0x88BF, 0xE5DD, 0x88C1, 0x8DD9, 0x88C2, 0x97F4, 0x88C3, 0xE5DF, - 0x88C4, 0xE5E0, 0x88C5, 0x9195, 0x88CF, 0x97A0, 0x88D4, 0xE5E1, - 0x88D5, 0x9754, 0x88D8, 0xE5E2, 0x88D9, 0xE5E3, 0x88DC, 0x95E2, - 0x88DD, 0xE5E4, 0x88DF, 0x8DBE, 0x88E1, 0x97A1, 0x88E8, 0xE5E9, - 0x88F2, 0xE5EA, 0x88F3, 0x8FD6, 0x88F4, 0xE5E8, 0x88F5, 0xFBA2, - 0x88F8, 0x9787, 0x88F9, 0xE5E5, 0x88FC, 0xE5E7, 0x88FD, 0x90BB, - 0x88FE, 0x909E, 0x8902, 0xE5E6, 0x8904, 0xE5EB, 0x8907, 0x95A1, - 0x890A, 0xE5ED, 0x890C, 0xE5EC, 0x8910, 0x8A8C, 0x8912, 0x964A, - 0x8913, 0xE5EE, 0x891C, 0xFA5D, 0x891D, 0xE5FA, 0x891E, 0xE5F0, - 0x8925, 0xE5F1, 0x892A, 0xE5F2, 0x892B, 0xE5F3, 0x8936, 0xE5F7, - 0x8938, 0xE5F8, 0x893B, 0xE5F6, 0x8941, 0xE5F4, 0x8943, 0xE5EF, - 0x8944, 0xE5F5, 0x894C, 0xE5F9, 0x894D, 0xE8B5, 0x8956, 0x89A6, - 0x895E, 0xE5FC, 0x895F, 0x8BDD, 0x8960, 0xE5FB, 0x8964, 0xE641, - 0x8966, 0xE640, 0x896A, 0xE643, 0x896D, 0xE642, 0x896F, 0xE644, - 0x8972, 0x8F50, 0x8974, 0xE645, 0x8977, 0xE646, 0x897E, 0xE647, - 0x897F, 0x90BC, 0x8981, 0x9776, 0x8983, 0xE648, 0x8986, 0x95A2, - 0x8987, 0x9465, 0x8988, 0xE649, 0x898A, 0xE64A, 0x898B, 0x8CA9, - 0x898F, 0x8B4B, 0x8993, 0xE64B, 0x8996, 0x8E8B, 0x8997, 0x9460, - 0x8998, 0xE64C, 0x899A, 0x8A6F, 0x89A1, 0xE64D, 0x89A6, 0xE64F, - 0x89A7, 0x9797, 0x89A9, 0xE64E, 0x89AA, 0x9065, 0x89AC, 0xE650, - 0x89AF, 0xE651, 0x89B2, 0xE652, 0x89B3, 0x8ACF, 0x89BA, 0xE653, - 0x89BD, 0xE654, 0x89BF, 0xE655, 0x89C0, 0xE656, 0x89D2, 0x8A70, - 0x89DA, 0xE657, 0x89DC, 0xE658, 0x89DD, 0xE659, 0x89E3, 0x89F0, - 0x89E6, 0x9047, 0x89E7, 0xE65A, 0x89F4, 0xE65B, 0x89F8, 0xE65C, - 0x8A00, 0x8CBE, 0x8A02, 0x92F9, 0x8A03, 0xE65D, 0x8A08, 0x8C76, - 0x8A0A, 0x9075, 0x8A0C, 0xE660, 0x8A0E, 0x93A2, 0x8A10, 0xE65F, - 0x8A12, 0xFBA3, 0x8A13, 0x8C50, 0x8A16, 0xE65E, 0x8A17, 0x91F5, - 0x8A18, 0x8B4C, 0x8A1B, 0xE661, 0x8A1D, 0xE662, 0x8A1F, 0x8FD7, - 0x8A23, 0x8C8D, 0x8A25, 0xE663, 0x8A2A, 0x964B, 0x8A2D, 0x90DD, - 0x8A31, 0x8B96, 0x8A33, 0x96F3, 0x8A34, 0x9169, 0x8A36, 0xE664, - 0x8A37, 0xFBA4, 0x8A3A, 0x9066, 0x8A3B, 0x9290, 0x8A3C, 0x8FD8, - 0x8A41, 0xE665, 0x8A46, 0xE668, 0x8A48, 0xE669, 0x8A50, 0x8DBC, - 0x8A51, 0x91C0, 0x8A52, 0xE667, 0x8A54, 0x8FD9, 0x8A55, 0x955D, - 0x8A5B, 0xE666, 0x8A5E, 0x8E8C, 0x8A60, 0x8972, 0x8A62, 0xE66D, - 0x8A63, 0x8C77, 0x8A66, 0x8E8E, 0x8A69, 0x8E8D, 0x8A6B, 0x986C, - 0x8A6C, 0xE66C, 0x8A6D, 0xE66B, 0x8A6E, 0x9146, 0x8A70, 0x8B6C, - 0x8A71, 0x9862, 0x8A72, 0x8A59, 0x8A73, 0x8FDA, 0x8A79, 0xFBA5, - 0x8A7C, 0xE66A, 0x8A82, 0xE66F, 0x8A84, 0xE670, 0x8A85, 0xE66E, - 0x8A87, 0x8CD6, 0x8A89, 0x975F, 0x8A8C, 0x8E8F, 0x8A8D, 0x9446, - 0x8A91, 0xE673, 0x8A93, 0x90BE, 0x8A95, 0x9261, 0x8A98, 0x9755, - 0x8A9A, 0xE676, 0x8A9E, 0x8CEA, 0x8AA0, 0x90BD, 0x8AA1, 0xE672, - 0x8AA3, 0xE677, 0x8AA4, 0x8CEB, 0x8AA5, 0xE674, 0x8AA6, 0xE675, - 0x8AA7, 0xFBA6, 0x8AA8, 0xE671, 0x8AAC, 0x90E0, 0x8AAD, 0x93C7, - 0x8AB0, 0x924E, 0x8AB2, 0x89DB, 0x8AB9, 0x94EE, 0x8ABC, 0x8B62, - 0x8ABE, 0xFBA7, 0x8ABF, 0x92B2, 0x8AC2, 0xE67A, 0x8AC4, 0xE678, - 0x8AC7, 0x926B, 0x8ACB, 0x90BF, 0x8ACC, 0x8AD0, 0x8ACD, 0xE679, - 0x8ACF, 0x907A, 0x8AD2, 0x97C8, 0x8AD6, 0x985F, 0x8ADA, 0xE67B, - 0x8ADB, 0xE687, 0x8ADC, 0x92B3, 0x8ADE, 0xE686, 0x8ADF, 0xFBA8, - 0x8AE0, 0xE683, 0x8AE1, 0xE68B, 0x8AE2, 0xE684, 0x8AE4, 0xE680, - 0x8AE6, 0x92FA, 0x8AE7, 0xE67E, 0x8AEB, 0xE67C, 0x8AED, 0x9740, - 0x8AEE, 0x8E90, 0x8AF1, 0xE681, 0x8AF3, 0xE67D, 0x8AF6, 0xFBAA, - 0x8AF7, 0xE685, 0x8AF8, 0x8F94, 0x8AFA, 0x8CBF, 0x8AFE, 0x91F8, - 0x8B00, 0x9664, 0x8B01, 0x8979, 0x8B02, 0x88E0, 0x8B04, 0x93A3, - 0x8B07, 0xE689, 0x8B0C, 0xE688, 0x8B0E, 0x93E4, 0x8B10, 0xE68D, - 0x8B14, 0xE682, 0x8B16, 0xE68C, 0x8B17, 0xE68E, 0x8B19, 0x8CAA, - 0x8B1A, 0xE68A, 0x8B1B, 0x8D75, 0x8B1D, 0x8ED3, 0x8B20, 0xE68F, - 0x8B21, 0x9777, 0x8B26, 0xE692, 0x8B28, 0xE695, 0x8B2B, 0xE693, - 0x8B2C, 0x9554, 0x8B33, 0xE690, 0x8B39, 0x8BDE, 0x8B3E, 0xE694, - 0x8B41, 0xE696, 0x8B49, 0xE69A, 0x8B4C, 0xE697, 0x8B4E, 0xE699, - 0x8B4F, 0xE698, 0x8B53, 0xFBAB, 0x8B56, 0xE69B, 0x8B58, 0x8EAF, - 0x8B5A, 0xE69D, 0x8B5B, 0xE69C, 0x8B5C, 0x9588, 0x8B5F, 0xE69F, - 0x8B66, 0x8C78, 0x8B6B, 0xE69E, 0x8B6C, 0xE6A0, 0x8B6F, 0xE6A1, - 0x8B70, 0x8B63, 0x8B71, 0xE3BF, 0x8B72, 0x8FF7, 0x8B74, 0xE6A2, - 0x8B77, 0x8CEC, 0x8B7D, 0xE6A3, 0x8B7F, 0xFBAC, 0x8B80, 0xE6A4, - 0x8B83, 0x8E5D, 0x8B8A, 0x9DCC, 0x8B8C, 0xE6A5, 0x8B8E, 0xE6A6, - 0x8B90, 0x8F51, 0x8B92, 0xE6A7, 0x8B93, 0xE6A8, 0x8B96, 0xE6A9, - 0x8B99, 0xE6AA, 0x8B9A, 0xE6AB, 0x8C37, 0x924A, 0x8C3A, 0xE6AC, - 0x8C3F, 0xE6AE, 0x8C41, 0xE6AD, 0x8C46, 0x93A4, 0x8C48, 0xE6AF, - 0x8C4A, 0x964C, 0x8C4C, 0xE6B0, 0x8C4E, 0xE6B1, 0x8C50, 0xE6B2, - 0x8C55, 0xE6B3, 0x8C5A, 0x93D8, 0x8C61, 0x8FDB, 0x8C62, 0xE6B4, - 0x8C6A, 0x8D8B, 0x8C6B, 0x98AC, 0x8C6C, 0xE6B5, 0x8C78, 0xE6B6, - 0x8C79, 0x955E, 0x8C7A, 0xE6B7, 0x8C7C, 0xE6BF, 0x8C82, 0xE6B8, - 0x8C85, 0xE6BA, 0x8C89, 0xE6B9, 0x8C8A, 0xE6BB, 0x8C8C, 0x9665, - 0x8C8D, 0xE6BC, 0x8C8E, 0xE6BD, 0x8C94, 0xE6BE, 0x8C98, 0xE6C0, - 0x8C9D, 0x8A4C, 0x8C9E, 0x92E5, 0x8CA0, 0x9589, 0x8CA1, 0x8DE0, - 0x8CA2, 0x8D76, 0x8CA7, 0x956E, 0x8CA8, 0x89DD, 0x8CA9, 0x94CC, - 0x8CAA, 0xE6C3, 0x8CAB, 0x8AD1, 0x8CAC, 0x90D3, 0x8CAD, 0xE6C2, - 0x8CAE, 0xE6C7, 0x8CAF, 0x9299, 0x8CB0, 0x96E1, 0x8CB2, 0xE6C5, - 0x8CB3, 0xE6C6, 0x8CB4, 0x8B4D, 0x8CB6, 0xE6C8, 0x8CB7, 0x9483, - 0x8CB8, 0x91DD, 0x8CBB, 0x94EF, 0x8CBC, 0x935C, 0x8CBD, 0xE6C4, - 0x8CBF, 0x9666, 0x8CC0, 0x89EA, 0x8CC1, 0xE6CA, 0x8CC2, 0x9847, - 0x8CC3, 0x92C0, 0x8CC4, 0x9864, 0x8CC7, 0x8E91, 0x8CC8, 0xE6C9, - 0x8CCA, 0x91AF, 0x8CCD, 0xE6DA, 0x8CCE, 0x9147, 0x8CD1, 0x93F6, - 0x8CD3, 0x956F, 0x8CDA, 0xE6CD, 0x8CDB, 0x8E5E, 0x8CDC, 0x8E92, - 0x8CDE, 0x8FDC, 0x8CE0, 0x9485, 0x8CE2, 0x8CAB, 0x8CE3, 0xE6CC, - 0x8CE4, 0xE6CB, 0x8CE6, 0x958A, 0x8CEA, 0x8EBF, 0x8CED, 0x9371, - 0x8CF0, 0xFBAD, 0x8CF4, 0xFBAE, 0x8CFA, 0xE6CF, 0x8CFB, 0xE6D0, - 0x8CFC, 0x8D77, 0x8CFD, 0xE6CE, 0x8D04, 0xE6D1, 0x8D05, 0xE6D2, - 0x8D07, 0xE6D4, 0x8D08, 0x91A1, 0x8D0A, 0xE6D3, 0x8D0B, 0x8AE4, - 0x8D0D, 0xE6D6, 0x8D0F, 0xE6D5, 0x8D10, 0xE6D7, 0x8D12, 0xFBAF, - 0x8D13, 0xE6D9, 0x8D14, 0xE6DB, 0x8D16, 0xE6DC, 0x8D64, 0x90D4, - 0x8D66, 0x8ECD, 0x8D67, 0xE6DD, 0x8D6B, 0x8A71, 0x8D6D, 0xE6DE, - 0x8D70, 0x9196, 0x8D71, 0xE6DF, 0x8D73, 0xE6E0, 0x8D74, 0x958B, - 0x8D76, 0xFBB0, 0x8D77, 0x8B4E, 0x8D81, 0xE6E1, 0x8D85, 0x92B4, - 0x8D8A, 0x897A, 0x8D99, 0xE6E2, 0x8DA3, 0x8EEF, 0x8DA8, 0x9096, - 0x8DB3, 0x91AB, 0x8DBA, 0xE6E5, 0x8DBE, 0xE6E4, 0x8DC2, 0xE6E3, - 0x8DCB, 0xE6EB, 0x8DCC, 0xE6E9, 0x8DCF, 0xE6E6, 0x8DD6, 0xE6E8, - 0x8DDA, 0xE6E7, 0x8DDB, 0xE6EA, 0x8DDD, 0x8B97, 0x8DDF, 0xE6EE, - 0x8DE1, 0x90D5, 0x8DE3, 0xE6EF, 0x8DE8, 0x8CD7, 0x8DEA, 0xE6EC, - 0x8DEB, 0xE6ED, 0x8DEF, 0x9848, 0x8DF3, 0x92B5, 0x8DF5, 0x9148, - 0x8DFC, 0xE6F0, 0x8DFF, 0xE6F3, 0x8E08, 0xE6F1, 0x8E09, 0xE6F2, - 0x8E0A, 0x9778, 0x8E0F, 0x93A5, 0x8E10, 0xE6F6, 0x8E1D, 0xE6F4, - 0x8E1E, 0xE6F5, 0x8E1F, 0xE6F7, 0x8E2A, 0xE748, 0x8E30, 0xE6FA, - 0x8E34, 0xE6FB, 0x8E35, 0xE6F9, 0x8E42, 0xE6F8, 0x8E44, 0x92FB, - 0x8E47, 0xE740, 0x8E48, 0xE744, 0x8E49, 0xE741, 0x8E4A, 0xE6FC, - 0x8E4C, 0xE742, 0x8E50, 0xE743, 0x8E55, 0xE74A, 0x8E59, 0xE745, - 0x8E5F, 0x90D6, 0x8E60, 0xE747, 0x8E63, 0xE749, 0x8E64, 0xE746, - 0x8E72, 0xE74C, 0x8E74, 0x8F52, 0x8E76, 0xE74B, 0x8E7C, 0xE74D, - 0x8E81, 0xE74E, 0x8E84, 0xE751, 0x8E85, 0xE750, 0x8E87, 0xE74F, - 0x8E8A, 0xE753, 0x8E8B, 0xE752, 0x8E8D, 0x96F4, 0x8E91, 0xE755, - 0x8E93, 0xE754, 0x8E94, 0xE756, 0x8E99, 0xE757, 0x8EA1, 0xE759, - 0x8EAA, 0xE758, 0x8EAB, 0x9067, 0x8EAC, 0xE75A, 0x8EAF, 0x8BEB, - 0x8EB0, 0xE75B, 0x8EB1, 0xE75D, 0x8EBE, 0xE75E, 0x8EC5, 0xE75F, - 0x8EC6, 0xE75C, 0x8EC8, 0xE760, 0x8ECA, 0x8ED4, 0x8ECB, 0xE761, - 0x8ECC, 0x8B4F, 0x8ECD, 0x8C52, 0x8ECF, 0xFBB2, 0x8ED2, 0x8CAC, - 0x8EDB, 0xE762, 0x8EDF, 0x93EE, 0x8EE2, 0x935D, 0x8EE3, 0xE763, - 0x8EEB, 0xE766, 0x8EF8, 0x8EB2, 0x8EFB, 0xE765, 0x8EFC, 0xE764, - 0x8EFD, 0x8C79, 0x8EFE, 0xE767, 0x8F03, 0x8A72, 0x8F05, 0xE769, - 0x8F09, 0x8DDA, 0x8F0A, 0xE768, 0x8F0C, 0xE771, 0x8F12, 0xE76B, - 0x8F13, 0xE76D, 0x8F14, 0x95E3, 0x8F15, 0xE76A, 0x8F19, 0xE76C, - 0x8F1B, 0xE770, 0x8F1C, 0xE76E, 0x8F1D, 0x8B50, 0x8F1F, 0xE76F, - 0x8F26, 0xE772, 0x8F29, 0x9479, 0x8F2A, 0x97D6, 0x8F2F, 0x8F53, - 0x8F33, 0xE773, 0x8F38, 0x9741, 0x8F39, 0xE775, 0x8F3B, 0xE774, - 0x8F3E, 0xE778, 0x8F3F, 0x9760, 0x8F42, 0xE777, 0x8F44, 0x8A8D, - 0x8F45, 0xE776, 0x8F46, 0xE77B, 0x8F49, 0xE77A, 0x8F4C, 0xE779, - 0x8F4D, 0x9351, 0x8F4E, 0xE77C, 0x8F57, 0xE77D, 0x8F5C, 0xE77E, - 0x8F5F, 0x8D8C, 0x8F61, 0x8C44, 0x8F62, 0xE780, 0x8F63, 0xE781, - 0x8F64, 0xE782, 0x8F9B, 0x9068, 0x8F9C, 0xE783, 0x8F9E, 0x8EAB, - 0x8F9F, 0xE784, 0x8FA3, 0xE785, 0x8FA7, 0x999F, 0x8FA8, 0x999E, - 0x8FAD, 0xE786, 0x8FAE, 0xE390, 0x8FAF, 0xE787, 0x8FB0, 0x9243, - 0x8FB1, 0x904A, 0x8FB2, 0x945F, 0x8FB7, 0xE788, 0x8FBA, 0x95D3, - 0x8FBB, 0x92D2, 0x8FBC, 0x8D9E, 0x8FBF, 0x9248, 0x8FC2, 0x8949, - 0x8FC4, 0x9698, 0x8FC5, 0x9076, 0x8FCE, 0x8C7D, 0x8FD1, 0x8BDF, - 0x8FD4, 0x95D4, 0x8FDA, 0xE789, 0x8FE2, 0xE78B, 0x8FE5, 0xE78A, - 0x8FE6, 0x89DE, 0x8FE9, 0x93F4, 0x8FEA, 0xE78C, 0x8FEB, 0x9497, - 0x8FED, 0x9352, 0x8FEF, 0xE78D, 0x8FF0, 0x8F71, 0x8FF4, 0xE78F, - 0x8FF7, 0x96C0, 0x8FF8, 0xE79E, 0x8FF9, 0xE791, 0x8FFA, 0xE792, - 0x8FFD, 0x92C7, 0x9000, 0x91DE, 0x9001, 0x9197, 0x9003, 0x93A6, - 0x9005, 0xE790, 0x9006, 0x8B74, 0x900B, 0xE799, 0x900D, 0xE796, - 0x900E, 0xE7A3, 0x900F, 0x93A7, 0x9010, 0x9280, 0x9011, 0xE793, - 0x9013, 0x92FC, 0x9014, 0x9372, 0x9015, 0xE794, 0x9016, 0xE798, - 0x9017, 0x9080, 0x9019, 0x9487, 0x901A, 0x92CA, 0x901D, 0x90C0, - 0x901E, 0xE797, 0x901F, 0x91AC, 0x9020, 0x91A2, 0x9021, 0xE795, - 0x9022, 0x88A7, 0x9023, 0x9841, 0x9027, 0xE79A, 0x902E, 0x91DF, - 0x9031, 0x8F54, 0x9032, 0x9069, 0x9035, 0xE79C, 0x9036, 0xE79B, - 0x9038, 0x88ED, 0x9039, 0xE79D, 0x903C, 0x954E, 0x903E, 0xE7A5, - 0x9041, 0x93D9, 0x9042, 0x908B, 0x9045, 0x9278, 0x9047, 0x8BF6, - 0x9049, 0xE7A4, 0x904A, 0x9756, 0x904B, 0x895E, 0x904D, 0x95D5, - 0x904E, 0x89DF, 0x904F, 0xE79F, 0x9050, 0xE7A0, 0x9051, 0xE7A1, - 0x9052, 0xE7A2, 0x9053, 0x93B9, 0x9054, 0x9242, 0x9055, 0x88E1, - 0x9056, 0xE7A6, 0x9058, 0xE7A7, 0x9059, 0xEAA1, 0x905C, 0x91BB, - 0x905E, 0xE7A8, 0x9060, 0x8993, 0x9061, 0x916B, 0x9063, 0x8CAD, - 0x9065, 0x9779, 0x9067, 0xFBB5, 0x9068, 0xE7A9, 0x9069, 0x934B, - 0x906D, 0x9198, 0x906E, 0x8ED5, 0x906F, 0xE7AA, 0x9072, 0xE7AD, - 0x9075, 0x8F85, 0x9076, 0xE7AB, 0x9077, 0x914A, 0x9078, 0x9149, - 0x907A, 0x88E2, 0x907C, 0x97C9, 0x907D, 0xE7AF, 0x907F, 0x94F0, - 0x9080, 0xE7B1, 0x9081, 0xE7B0, 0x9082, 0xE7AE, 0x9083, 0xE284, - 0x9084, 0x8AD2, 0x9087, 0xE78E, 0x9089, 0xE7B3, 0x908A, 0xE7B2, - 0x908F, 0xE7B4, 0x9091, 0x9757, 0x90A3, 0x93DF, 0x90A6, 0x964D, - 0x90A8, 0xE7B5, 0x90AA, 0x8ED7, 0x90AF, 0xE7B6, 0x90B1, 0xE7B7, - 0x90B5, 0xE7B8, 0x90B8, 0x9340, 0x90C1, 0x88E8, 0x90CA, 0x8D78, - 0x90CE, 0x9859, 0x90DB, 0xE7BC, 0x90DE, 0xFBB6, 0x90E1, 0x8C53, - 0x90E2, 0xE7B9, 0x90E4, 0xE7BA, 0x90E8, 0x9594, 0x90ED, 0x8A73, - 0x90F5, 0x9758, 0x90F7, 0x8BBD, 0x90FD, 0x9373, 0x9102, 0xE7BD, - 0x9112, 0xE7BE, 0x9115, 0xFBB8, 0x9119, 0xE7BF, 0x9127, 0xFBB9, - 0x912D, 0x9341, 0x9130, 0xE7C1, 0x9132, 0xE7C0, 0x9149, 0x93D1, - 0x914A, 0xE7C2, 0x914B, 0x8F55, 0x914C, 0x8EDE, 0x914D, 0x947A, - 0x914E, 0x9291, 0x9152, 0x8EF0, 0x9154, 0x908C, 0x9156, 0xE7C3, - 0x9158, 0xE7C4, 0x9162, 0x907C, 0x9163, 0xE7C5, 0x9165, 0xE7C6, - 0x9169, 0xE7C7, 0x916A, 0x978F, 0x916C, 0x8F56, 0x9172, 0xE7C9, - 0x9173, 0xE7C8, 0x9175, 0x8D79, 0x9177, 0x8D93, 0x9178, 0x8E5F, - 0x9182, 0xE7CC, 0x9187, 0x8F86, 0x9189, 0xE7CB, 0x918B, 0xE7CA, - 0x918D, 0x91E7, 0x9190, 0x8CED, 0x9192, 0x90C1, 0x9197, 0x94AE, - 0x919C, 0x8F58, 0x91A2, 0xE7CD, 0x91A4, 0x8FDD, 0x91AA, 0xE7D0, - 0x91AB, 0xE7CE, 0x91AF, 0xE7CF, 0x91B4, 0xE7D2, 0x91B5, 0xE7D1, - 0x91B8, 0x8FF8, 0x91BA, 0xE7D3, 0x91C0, 0xE7D4, 0x91C1, 0xE7D5, - 0x91C6, 0x94CE, 0x91C7, 0x8DD1, 0x91C8, 0x8EDF, 0x91C9, 0xE7D6, - 0x91CB, 0xE7D7, 0x91CC, 0x97A2, 0x91CD, 0x8F64, 0x91CE, 0x96EC, - 0x91CF, 0x97CA, 0x91D0, 0xE7D8, 0x91D1, 0x8BE0, 0x91D6, 0xE7D9, - 0x91D7, 0xFBBB, 0x91D8, 0x9342, 0x91DA, 0xFBBA, 0x91DB, 0xE7DC, - 0x91DC, 0x8A98, 0x91DD, 0x906A, 0x91DE, 0xFBBC, 0x91DF, 0xE7DA, - 0x91E1, 0xE7DB, 0x91E3, 0x92DE, 0x91E4, 0xFBBF, 0x91E5, 0xFBC0, - 0x91E6, 0x9674, 0x91E7, 0x8BFA, 0x91ED, 0xFBBD, 0x91EE, 0xFBBE, - 0x91F5, 0xE7DE, 0x91F6, 0xE7DF, 0x91FC, 0xE7DD, 0x91FF, 0xE7E1, - 0x9206, 0xFBC1, 0x920A, 0xFBC3, 0x920D, 0x93DD, 0x920E, 0x8A62, - 0x9210, 0xFBC2, 0x9211, 0xE7E5, 0x9214, 0xE7E2, 0x9215, 0xE7E4, - 0x921E, 0xE7E0, 0x9229, 0xE86E, 0x922C, 0xE7E3, 0x9234, 0x97E9, - 0x9237, 0x8CD8, 0x9239, 0xFBCA, 0x923A, 0xFBC4, 0x923C, 0xFBC6, - 0x923F, 0xE7ED, 0x9240, 0xFBC5, 0x9244, 0x9353, 0x9245, 0xE7E8, - 0x9248, 0xE7EB, 0x9249, 0xE7E9, 0x924B, 0xE7EE, 0x924E, 0xFBC7, - 0x9250, 0xE7EF, 0x9251, 0xFBC9, 0x9257, 0xE7E7, 0x9259, 0xFBC8, - 0x925A, 0xE7F4, 0x925B, 0x8994, 0x925E, 0xE7E6, 0x9262, 0x94AB, - 0x9264, 0xE7EA, 0x9266, 0x8FDE, 0x9267, 0xFBCB, 0x9271, 0x8D7A, - 0x9277, 0xFBCD, 0x9278, 0xFBCE, 0x927E, 0x9667, 0x9280, 0x8BE2, - 0x9283, 0x8F65, 0x9285, 0x93BA, 0x9288, 0xFA5F, 0x9291, 0x914C, - 0x9293, 0xE7F2, 0x9295, 0xE7EC, 0x9296, 0xE7F1, 0x9298, 0x96C1, - 0x929A, 0x92B6, 0x929B, 0xE7F3, 0x929C, 0xE7F0, 0x92A7, 0xFBCC, - 0x92AD, 0x914B, 0x92B7, 0xE7F7, 0x92B9, 0xE7F6, 0x92CF, 0xE7F5, - 0x92D0, 0xFBD2, 0x92D2, 0x964E, 0x92D3, 0xFBD6, 0x92D5, 0xFBD4, - 0x92D7, 0xFBD0, 0x92D9, 0xFBD1, 0x92E0, 0xFBD5, 0x92E4, 0x8F9B, - 0x92E7, 0xFBCF, 0x92E9, 0xE7F8, 0x92EA, 0x95DD, 0x92ED, 0x8973, - 0x92F2, 0x9565, 0x92F3, 0x9292, 0x92F8, 0x8B98, 0x92F9, 0xFA65, - 0x92FA, 0xE7FA, 0x92FB, 0xFBD9, 0x92FC, 0x8D7C, 0x92FF, 0xFBDC, - 0x9302, 0xFBDE, 0x9306, 0x8E4B, 0x930F, 0xE7F9, 0x9310, 0x908D, - 0x9318, 0x908E, 0x9319, 0xE840, 0x931A, 0xE842, 0x931D, 0xFBDD, - 0x931E, 0xFBDB, 0x9320, 0x8FF9, 0x9321, 0xFBD8, 0x9322, 0xE841, - 0x9323, 0xE843, 0x9325, 0xFBD7, 0x9326, 0x8BD1, 0x9328, 0x9564, - 0x932B, 0x8EE0, 0x932C, 0x9842, 0x932E, 0xE7FC, 0x932F, 0x8DF6, - 0x9332, 0x985E, 0x9335, 0xE845, 0x933A, 0xE844, 0x933B, 0xE846, - 0x9344, 0xE7FB, 0x9348, 0xFA5E, 0x934B, 0x93E7, 0x934D, 0x9374, - 0x9354, 0x92D5, 0x9356, 0xE84B, 0x9357, 0xFBE0, 0x935B, 0x9262, - 0x935C, 0xE847, 0x9360, 0xE848, 0x936C, 0x8C4C, 0x936E, 0xE84A, - 0x9370, 0xFBDF, 0x9375, 0x8CAE, 0x937C, 0xE849, 0x937E, 0x8FDF, - 0x938C, 0x8A99, 0x9394, 0xE84F, 0x9396, 0x8DBD, 0x9397, 0x9199, - 0x939A, 0x92C8, 0x93A4, 0xFBE1, 0x93A7, 0x8A5A, 0x93AC, 0xE84D, - 0x93AD, 0xE84E, 0x93AE, 0x92C1, 0x93B0, 0xE84C, 0x93B9, 0xE850, - 0x93C3, 0xE856, 0x93C6, 0xFBE2, 0x93C8, 0xE859, 0x93D0, 0xE858, - 0x93D1, 0x934C, 0x93D6, 0xE851, 0x93D7, 0xE852, 0x93D8, 0xE855, - 0x93DD, 0xE857, 0x93DE, 0xFBE3, 0x93E1, 0x8BBE, 0x93E4, 0xE85A, - 0x93E5, 0xE854, 0x93E8, 0xE853, 0x93F8, 0xFBE4, 0x9403, 0xE85E, - 0x9407, 0xE85F, 0x9410, 0xE860, 0x9413, 0xE85D, 0x9414, 0xE85C, - 0x9418, 0x8FE0, 0x9419, 0x93A8, 0x941A, 0xE85B, 0x9421, 0xE864, - 0x942B, 0xE862, 0x9431, 0xFBE5, 0x9435, 0xE863, 0x9436, 0xE861, - 0x9438, 0x91F6, 0x943A, 0xE865, 0x9441, 0xE866, 0x9444, 0xE868, - 0x9445, 0xFBE6, 0x9448, 0xFBE7, 0x9451, 0x8AD3, 0x9452, 0xE867, - 0x9453, 0x96F8, 0x945A, 0xE873, 0x945B, 0xE869, 0x945E, 0xE86C, - 0x9460, 0xE86A, 0x9462, 0xE86B, 0x946A, 0xE86D, 0x9470, 0xE86F, - 0x9475, 0xE870, 0x9477, 0xE871, 0x947C, 0xE874, 0x947D, 0xE872, - 0x947E, 0xE875, 0x947F, 0xE877, 0x9481, 0xE876, 0x9577, 0x92B7, - 0x9580, 0x96E5, 0x9582, 0xE878, 0x9583, 0x914D, 0x9587, 0xE879, - 0x9589, 0x95C2, 0x958A, 0xE87A, 0x958B, 0x8A4A, 0x958F, 0x895B, - 0x9591, 0x8AD5, 0x9592, 0xFBE8, 0x9593, 0x8AD4, 0x9594, 0xE87B, - 0x9596, 0xE87C, 0x9598, 0xE87D, 0x9599, 0xE87E, 0x95A0, 0xE880, - 0x95A2, 0x8AD6, 0x95A3, 0x8A74, 0x95A4, 0x8D7D, 0x95A5, 0x94B4, - 0x95A7, 0xE882, 0x95A8, 0xE881, 0x95AD, 0xE883, 0x95B2, 0x897B, - 0x95B9, 0xE886, 0x95BB, 0xE885, 0x95BC, 0xE884, 0x95BE, 0xE887, - 0x95C3, 0xE88A, 0x95C7, 0x88C5, 0x95CA, 0xE888, 0x95CC, 0xE88C, - 0x95CD, 0xE88B, 0x95D4, 0xE88E, 0x95D5, 0xE88D, 0x95D6, 0xE88F, - 0x95D8, 0x93AC, 0x95DC, 0xE890, 0x95E1, 0xE891, 0x95E2, 0xE893, - 0x95E5, 0xE892, 0x961C, 0x958C, 0x9621, 0xE894, 0x9628, 0xE895, - 0x962A, 0x8DE3, 0x962E, 0xE896, 0x962F, 0xE897, 0x9632, 0x9668, - 0x963B, 0x916A, 0x963F, 0x88A2, 0x9640, 0x91C9, 0x9642, 0xE898, - 0x9644, 0x958D, 0x964B, 0xE89B, 0x964C, 0xE899, 0x964D, 0x8D7E, - 0x964F, 0xE89A, 0x9650, 0x8CC0, 0x965B, 0x95C3, 0x965C, 0xE89D, - 0x965D, 0xE89F, 0x965E, 0xE89E, 0x965F, 0xE8A0, 0x9662, 0x8940, - 0x9663, 0x9077, 0x9664, 0x8F9C, 0x9665, 0x8AD7, 0x9666, 0xE8A1, - 0x966A, 0x9486, 0x966C, 0xE8A3, 0x9670, 0x8941, 0x9672, 0xE8A2, - 0x9673, 0x92C2, 0x9675, 0x97CB, 0x9676, 0x93A9, 0x9677, 0xE89C, - 0x9678, 0x97A4, 0x967A, 0x8CAF, 0x967D, 0x977A, 0x9685, 0x8BF7, - 0x9686, 0x97B2, 0x9688, 0x8C47, 0x968A, 0x91E0, 0x968B, 0xE440, - 0x968D, 0xE8A4, 0x968E, 0x8A4B, 0x968F, 0x908F, 0x9694, 0x8A75, - 0x9695, 0xE8A6, 0x9697, 0xE8A7, 0x9698, 0xE8A5, 0x9699, 0x8C84, - 0x969B, 0x8DDB, 0x969C, 0x8FE1, 0x969D, 0xFBEB, 0x96A0, 0x8942, - 0x96A3, 0x97D7, 0x96A7, 0xE8A9, 0x96A8, 0xE7AC, 0x96AA, 0xE8A8, - 0x96AF, 0xFBEC, 0x96B0, 0xE8AC, 0x96B1, 0xE8AA, 0x96B2, 0xE8AB, - 0x96B4, 0xE8AD, 0x96B6, 0xE8AE, 0x96B7, 0x97EA, 0x96B8, 0xE8AF, - 0x96B9, 0xE8B0, 0x96BB, 0x90C7, 0x96BC, 0x94B9, 0x96C0, 0x909D, - 0x96C1, 0x8AE5, 0x96C4, 0x9759, 0x96C5, 0x89EB, 0x96C6, 0x8F57, - 0x96C7, 0x8CD9, 0x96C9, 0xE8B3, 0x96CB, 0xE8B2, 0x96CC, 0x8E93, - 0x96CD, 0xE8B4, 0x96CE, 0xE8B1, 0x96D1, 0x8E47, 0x96D5, 0xE8B8, - 0x96D6, 0xE5AB, 0x96D9, 0x99D4, 0x96DB, 0x9097, 0x96DC, 0xE8B6, - 0x96E2, 0x97A3, 0x96E3, 0x93EF, 0x96E8, 0x894A, 0x96EA, 0x90E1, - 0x96EB, 0x8EB4, 0x96F0, 0x95B5, 0x96F2, 0x895F, 0x96F6, 0x97EB, - 0x96F7, 0x978B, 0x96F9, 0xE8B9, 0x96FB, 0x9364, 0x9700, 0x8EF9, - 0x9704, 0xE8BA, 0x9706, 0xE8BB, 0x9707, 0x906B, 0x9708, 0xE8BC, - 0x970A, 0x97EC, 0x970D, 0xE8B7, 0x970E, 0xE8BE, 0x970F, 0xE8C0, - 0x9711, 0xE8BF, 0x9713, 0xE8BD, 0x9716, 0xE8C1, 0x9719, 0xE8C2, - 0x971C, 0x919A, 0x971E, 0x89E0, 0x9724, 0xE8C3, 0x9727, 0x96B6, - 0x972A, 0xE8C4, 0x9730, 0xE8C5, 0x9732, 0x9849, 0x9733, 0xFBED, - 0x9738, 0x9E50, 0x9739, 0xE8C6, 0x973B, 0xFBEE, 0x973D, 0xE8C7, - 0x973E, 0xE8C8, 0x9742, 0xE8CC, 0x9743, 0xFBEF, 0x9744, 0xE8C9, - 0x9746, 0xE8CA, 0x9748, 0xE8CB, 0x9749, 0xE8CD, 0x974D, 0xFBF0, - 0x974F, 0xFBF1, 0x9751, 0xFBF2, 0x9752, 0x90C2, 0x9755, 0xFBF3, - 0x9756, 0x96F5, 0x9759, 0x90C3, 0x975C, 0xE8CE, 0x975E, 0x94F1, - 0x9760, 0xE8CF, 0x9761, 0xEA72, 0x9762, 0x96CA, 0x9764, 0xE8D0, - 0x9766, 0xE8D1, 0x9768, 0xE8D2, 0x9769, 0x8A76, 0x976B, 0xE8D4, - 0x976D, 0x9078, 0x9771, 0xE8D5, 0x9774, 0x8C43, 0x9779, 0xE8D6, - 0x977A, 0xE8DA, 0x977C, 0xE8D8, 0x9781, 0xE8D9, 0x9784, 0x8A93, - 0x9785, 0xE8D7, 0x9786, 0xE8DB, 0x978B, 0xE8DC, 0x978D, 0x88C6, - 0x978F, 0xE8DD, 0x9790, 0xE8DE, 0x9798, 0x8FE2, 0x979C, 0xE8DF, - 0x97A0, 0x8B66, 0x97A3, 0xE8E2, 0x97A6, 0xE8E1, 0x97A8, 0xE8E0, - 0x97AB, 0xE691, 0x97AD, 0x95DA, 0x97B3, 0xE8E3, 0x97B4, 0xE8E4, - 0x97C3, 0xE8E5, 0x97C6, 0xE8E6, 0x97C8, 0xE8E7, 0x97CB, 0xE8E8, - 0x97D3, 0x8AD8, 0x97DC, 0xE8E9, 0x97ED, 0xE8EA, 0x97EE, 0x9442, - 0x97F2, 0xE8EC, 0x97F3, 0x89B9, 0x97F5, 0xE8EF, 0x97F6, 0xE8EE, - 0x97FB, 0x8943, 0x97FF, 0x8BBF, 0x9801, 0x95C5, 0x9802, 0x92B8, - 0x9803, 0x8DA0, 0x9805, 0x8D80, 0x9806, 0x8F87, 0x9808, 0x907B, - 0x980C, 0xE8F1, 0x980F, 0xE8F0, 0x9810, 0x9761, 0x9811, 0x8AE6, - 0x9812, 0x94D0, 0x9813, 0x93DA, 0x9817, 0x909C, 0x9818, 0x97CC, - 0x981A, 0x8C7A, 0x9821, 0xE8F4, 0x9824, 0xE8F3, 0x982C, 0x966A, - 0x982D, 0x93AA, 0x9834, 0x896F, 0x9837, 0xE8F5, 0x9838, 0xE8F2, - 0x983B, 0x9570, 0x983C, 0x978A, 0x983D, 0xE8F6, 0x9846, 0xE8F7, - 0x984B, 0xE8F9, 0x984C, 0x91E8, 0x984D, 0x8A7A, 0x984E, 0x8A7B, - 0x984F, 0xE8F8, 0x9854, 0x8AE7, 0x9855, 0x8CB0, 0x9857, 0xFBF4, - 0x9858, 0x8AE8, 0x985B, 0x935E, 0x985E, 0x97DE, 0x9865, 0xFBF5, - 0x9867, 0x8CDA, 0x986B, 0xE8FA, 0x986F, 0xE8FB, 0x9870, 0xE8FC, - 0x9871, 0xE940, 0x9873, 0xE942, 0x9874, 0xE941, 0x98A8, 0x9597, - 0x98AA, 0xE943, 0x98AF, 0xE944, 0x98B1, 0xE945, 0x98B6, 0xE946, - 0x98C3, 0xE948, 0x98C4, 0xE947, 0x98C6, 0xE949, 0x98DB, 0x94F2, - 0x98DC, 0xE3CA, 0x98DF, 0x9048, 0x98E2, 0x8B51, 0x98E9, 0xE94A, - 0x98EB, 0xE94B, 0x98ED, 0x99AA, 0x98EE, 0x9F5A, 0x98EF, 0x94D1, - 0x98F2, 0x88F9, 0x98F4, 0x88B9, 0x98FC, 0x8E94, 0x98FD, 0x964F, - 0x98FE, 0x8FFC, 0x9903, 0xE94C, 0x9905, 0x96DD, 0x9909, 0xE94D, - 0x990A, 0x977B, 0x990C, 0x8961, 0x9910, 0x8E60, 0x9912, 0xE94E, - 0x9913, 0x89EC, 0x9914, 0xE94F, 0x9918, 0xE950, 0x991D, 0xE952, - 0x991E, 0xE953, 0x9920, 0xE955, 0x9921, 0xE951, 0x9924, 0xE954, - 0x9927, 0xFBF8, 0x9928, 0x8AD9, 0x992C, 0xE956, 0x992E, 0xE957, - 0x993D, 0xE958, 0x993E, 0xE959, 0x9942, 0xE95A, 0x9945, 0xE95C, - 0x9949, 0xE95B, 0x994B, 0xE95E, 0x994C, 0xE961, 0x9950, 0xE95D, - 0x9951, 0xE95F, 0x9952, 0xE960, 0x9955, 0xE962, 0x9957, 0x8BC0, - 0x9996, 0x8EF1, 0x9997, 0xE963, 0x9998, 0xE964, 0x9999, 0x8D81, - 0x999E, 0xFBFA, 0x99A5, 0xE965, 0x99A8, 0x8A5D, 0x99AC, 0x946E, - 0x99AD, 0xE966, 0x99AE, 0xE967, 0x99B3, 0x9279, 0x99B4, 0x93E9, - 0x99BC, 0xE968, 0x99C1, 0x949D, 0x99C4, 0x91CA, 0x99C5, 0x8977, - 0x99C6, 0x8BEC, 0x99C8, 0x8BED, 0x99D0, 0x9293, 0x99D1, 0xE96D, - 0x99D2, 0x8BEE, 0x99D5, 0x89ED, 0x99D8, 0xE96C, 0x99DB, 0xE96A, - 0x99DD, 0xE96B, 0x99DF, 0xE969, 0x99E2, 0xE977, 0x99ED, 0xE96E, - 0x99EE, 0xE96F, 0x99F1, 0xE970, 0x99F2, 0xE971, 0x99F8, 0xE973, - 0x99FB, 0xE972, 0x99FF, 0x8F78, 0x9A01, 0xE974, 0x9A05, 0xE976, - 0x9A0E, 0x8B52, 0x9A0F, 0xE975, 0x9A12, 0x919B, 0x9A13, 0x8CB1, - 0x9A19, 0xE978, 0x9A28, 0x91CB, 0x9A2B, 0xE979, 0x9A30, 0x93AB, - 0x9A37, 0xE97A, 0x9A3E, 0xE980, 0x9A40, 0xE97D, 0x9A42, 0xE97C, - 0x9A43, 0xE97E, 0x9A45, 0xE97B, 0x9A4D, 0xE982, 0x9A4E, 0xFBFB, - 0x9A55, 0xE981, 0x9A57, 0xE984, 0x9A5A, 0x8BC1, 0x9A5B, 0xE983, - 0x9A5F, 0xE985, 0x9A62, 0xE986, 0x9A64, 0xE988, 0x9A65, 0xE987, - 0x9A69, 0xE989, 0x9A6A, 0xE98B, 0x9A6B, 0xE98A, 0x9AA8, 0x8D9C, - 0x9AAD, 0xE98C, 0x9AB0, 0xE98D, 0x9AB8, 0x8A5B, 0x9ABC, 0xE98E, - 0x9AC0, 0xE98F, 0x9AC4, 0x9091, 0x9ACF, 0xE990, 0x9AD1, 0xE991, - 0x9AD3, 0xE992, 0x9AD4, 0xE993, 0x9AD8, 0x8D82, 0x9AD9, 0xFBFC, - 0x9ADC, 0xFC40, 0x9ADE, 0xE994, 0x9ADF, 0xE995, 0x9AE2, 0xE996, - 0x9AE3, 0xE997, 0x9AE6, 0xE998, 0x9AEA, 0x94AF, 0x9AEB, 0xE99A, - 0x9AED, 0x9545, 0x9AEE, 0xE99B, 0x9AEF, 0xE999, 0x9AF1, 0xE99D, - 0x9AF4, 0xE99C, 0x9AF7, 0xE99E, 0x9AFB, 0xE99F, 0x9B06, 0xE9A0, - 0x9B18, 0xE9A1, 0x9B1A, 0xE9A2, 0x9B1F, 0xE9A3, 0x9B22, 0xE9A4, - 0x9B23, 0xE9A5, 0x9B25, 0xE9A6, 0x9B27, 0xE9A7, 0x9B28, 0xE9A8, - 0x9B29, 0xE9A9, 0x9B2A, 0xE9AA, 0x9B2E, 0xE9AB, 0x9B2F, 0xE9AC, - 0x9B31, 0x9F54, 0x9B32, 0xE9AD, 0x9B3B, 0xE2F6, 0x9B3C, 0x8B53, - 0x9B41, 0x8A40, 0x9B42, 0x8DB0, 0x9B43, 0xE9AF, 0x9B44, 0xE9AE, - 0x9B45, 0x96A3, 0x9B4D, 0xE9B1, 0x9B4E, 0xE9B2, 0x9B4F, 0xE9B0, - 0x9B51, 0xE9B3, 0x9B54, 0x9682, 0x9B58, 0xE9B4, 0x9B5A, 0x8B9B, - 0x9B6F, 0x9844, 0x9B72, 0xFC42, 0x9B74, 0xE9B5, 0x9B75, 0xFC41, - 0x9B83, 0xE9B7, 0x9B8E, 0x88BC, 0x9B8F, 0xFC43, 0x9B91, 0xE9B8, - 0x9B92, 0x95A9, 0x9B93, 0xE9B6, 0x9B96, 0xE9B9, 0x9B97, 0xE9BA, - 0x9B9F, 0xE9BB, 0x9BA0, 0xE9BC, 0x9BA8, 0xE9BD, 0x9BAA, 0x968E, - 0x9BAB, 0x8E4C, 0x9BAD, 0x8DF8, 0x9BAE, 0x914E, 0x9BB1, 0xFC44, - 0x9BB4, 0xE9BE, 0x9BB9, 0xE9C1, 0x9BBB, 0xFC45, 0x9BC0, 0xE9BF, - 0x9BC6, 0xE9C2, 0x9BC9, 0x8CEF, 0x9BCA, 0xE9C0, 0x9BCF, 0xE9C3, - 0x9BD1, 0xE9C4, 0x9BD2, 0xE9C5, 0x9BD4, 0xE9C9, 0x9BD6, 0x8E49, - 0x9BDB, 0x91E2, 0x9BE1, 0xE9CA, 0x9BE2, 0xE9C7, 0x9BE3, 0xE9C6, - 0x9BE4, 0xE9C8, 0x9BE8, 0x8C7E, 0x9BF0, 0xE9CE, 0x9BF1, 0xE9CD, - 0x9BF2, 0xE9CC, 0x9BF5, 0x88B1, 0x9C00, 0xFC46, 0x9C04, 0xE9D8, - 0x9C06, 0xE9D4, 0x9C08, 0xE9D5, 0x9C09, 0xE9D1, 0x9C0A, 0xE9D7, - 0x9C0C, 0xE9D3, 0x9C0D, 0x8A82, 0x9C10, 0x986B, 0x9C12, 0xE9D6, - 0x9C13, 0xE9D2, 0x9C14, 0xE9D0, 0x9C15, 0xE9CF, 0x9C1B, 0xE9DA, - 0x9C21, 0xE9DD, 0x9C24, 0xE9DC, 0x9C25, 0xE9DB, 0x9C2D, 0x9568, - 0x9C2E, 0xE9D9, 0x9C2F, 0x88F1, 0x9C30, 0xE9DE, 0x9C32, 0xE9E0, - 0x9C39, 0x8A8F, 0x9C3A, 0xE9CB, 0x9C3B, 0x8956, 0x9C3E, 0xE9E2, - 0x9C46, 0xE9E1, 0x9C47, 0xE9DF, 0x9C48, 0x924C, 0x9C52, 0x9690, - 0x9C57, 0x97D8, 0x9C5A, 0xE9E3, 0x9C60, 0xE9E4, 0x9C67, 0xE9E5, - 0x9C76, 0xE9E6, 0x9C78, 0xE9E7, 0x9CE5, 0x92B9, 0x9CE7, 0xE9E8, - 0x9CE9, 0x94B5, 0x9CEB, 0xE9ED, 0x9CEC, 0xE9E9, 0x9CF0, 0xE9EA, - 0x9CF3, 0x9650, 0x9CF4, 0x96C2, 0x9CF6, 0x93CE, 0x9D03, 0xE9EE, - 0x9D06, 0xE9EF, 0x9D07, 0x93BC, 0x9D08, 0xE9EC, 0x9D09, 0xE9EB, - 0x9D0E, 0x89A8, 0x9D12, 0xE9F7, 0x9D15, 0xE9F6, 0x9D1B, 0x8995, - 0x9D1F, 0xE9F4, 0x9D23, 0xE9F3, 0x9D26, 0xE9F1, 0x9D28, 0x8A9B, - 0x9D2A, 0xE9F0, 0x9D2B, 0x8EB0, 0x9D2C, 0x89A7, 0x9D3B, 0x8D83, - 0x9D3E, 0xE9FA, 0x9D3F, 0xE9F9, 0x9D41, 0xE9F8, 0x9D44, 0xE9F5, - 0x9D46, 0xE9FB, 0x9D48, 0xE9FC, 0x9D50, 0xEA44, 0x9D51, 0xEA43, - 0x9D59, 0xEA45, 0x9D5C, 0x894C, 0x9D5D, 0xEA40, 0x9D5E, 0xEA41, - 0x9D60, 0x8D94, 0x9D61, 0x96B7, 0x9D64, 0xEA42, 0x9D6B, 0xFC48, - 0x9D6C, 0x9651, 0x9D6F, 0xEA4A, 0x9D70, 0xFC47, 0x9D72, 0xEA46, - 0x9D7A, 0xEA4B, 0x9D87, 0xEA48, 0x9D89, 0xEA47, 0x9D8F, 0x8C7B, - 0x9D9A, 0xEA4C, 0x9DA4, 0xEA4D, 0x9DA9, 0xEA4E, 0x9DAB, 0xEA49, - 0x9DAF, 0xE9F2, 0x9DB2, 0xEA4F, 0x9DB4, 0x92DF, 0x9DB8, 0xEA53, - 0x9DBA, 0xEA54, 0x9DBB, 0xEA52, 0x9DC1, 0xEA51, 0x9DC2, 0xEA57, - 0x9DC4, 0xEA50, 0x9DC6, 0xEA55, 0x9DCF, 0xEA56, 0x9DD3, 0xEA59, - 0x9DD9, 0xEA58, 0x9DE6, 0xEA5B, 0x9DED, 0xEA5C, 0x9DEF, 0xEA5D, - 0x9DF2, 0x9868, 0x9DF8, 0xEA5A, 0x9DF9, 0x91E9, 0x9DFA, 0x8DEB, - 0x9DFD, 0xEA5E, 0x9E19, 0xFC4A, 0x9E1A, 0xEA5F, 0x9E1B, 0xEA60, - 0x9E1E, 0xEA61, 0x9E75, 0xEA62, 0x9E78, 0x8CB2, 0x9E79, 0xEA63, - 0x9E7D, 0xEA64, 0x9E7F, 0x8EAD, 0x9E81, 0xEA65, 0x9E88, 0xEA66, - 0x9E8B, 0xEA67, 0x9E8C, 0xEA68, 0x9E91, 0xEA6B, 0x9E92, 0xEA69, - 0x9E93, 0x985B, 0x9E95, 0xEA6A, 0x9E97, 0x97ED, 0x9E9D, 0xEA6C, - 0x9E9F, 0x97D9, 0x9EA5, 0xEA6D, 0x9EA6, 0x949E, 0x9EA9, 0xEA6E, - 0x9EAA, 0xEA70, 0x9EAD, 0xEA71, 0x9EB8, 0xEA6F, 0x9EB9, 0x8D8D, - 0x9EBA, 0x96CB, 0x9EBB, 0x9683, 0x9EBC, 0x9BF5, 0x9EBE, 0x9F80, - 0x9EBF, 0x969B, 0x9EC4, 0x89A9, 0x9ECC, 0xEA73, 0x9ECD, 0x8B6F, - 0x9ECE, 0xEA74, 0x9ECF, 0xEA75, 0x9ED0, 0xEA76, 0x9ED1, 0xFC4B, - 0x9ED2, 0x8D95, 0x9ED4, 0xEA77, 0x9ED8, 0xE0D2, 0x9ED9, 0x96D9, - 0x9EDB, 0x91E1, 0x9EDC, 0xEA78, 0x9EDD, 0xEA7A, 0x9EDE, 0xEA79, - 0x9EE0, 0xEA7B, 0x9EE5, 0xEA7C, 0x9EE8, 0xEA7D, 0x9EEF, 0xEA7E, - 0x9EF4, 0xEA80, 0x9EF6, 0xEA81, 0x9EF7, 0xEA82, 0x9EF9, 0xEA83, - 0x9EFB, 0xEA84, 0x9EFC, 0xEA85, 0x9EFD, 0xEA86, 0x9F07, 0xEA87, - 0x9F08, 0xEA88, 0x9F0E, 0x9343, 0x9F13, 0x8CDB, 0x9F15, 0xEA8A, - 0x9F20, 0x916C, 0x9F21, 0xEA8B, 0x9F2C, 0xEA8C, 0x9F3B, 0x9540, - 0x9F3E, 0xEA8D, 0x9F4A, 0xEA8E, 0x9F4B, 0xE256, 0x9F4E, 0xE6D8, - 0x9F4F, 0xE8EB, 0x9F52, 0xEA8F, 0x9F54, 0xEA90, 0x9F5F, 0xEA92, - 0x9F60, 0xEA93, 0x9F61, 0xEA94, 0x9F62, 0x97EE, 0x9F63, 0xEA91, - 0x9F66, 0xEA95, 0x9F67, 0xEA96, 0x9F6A, 0xEA98, 0x9F6C, 0xEA97, - 0x9F72, 0xEA9A, 0x9F76, 0xEA9B, 0x9F77, 0xEA99, 0x9F8D, 0x97B4, - 0x9F95, 0xEA9C, 0x9F9C, 0xEA9D, 0x9F9D, 0xE273, 0x9FA0, 0xEA9E, - 0xF929, 0xFAE0, 0xF9DC, 0xFBE9, 0xFA0E, 0xFA90, 0xFA0F, 0xFA9B, - 0xFA10, 0xFA9C, 0xFA11, 0xFAB1, 0xFA12, 0xFAD8, 0xFA13, 0xFAE8, - 0xFA14, 0xFAEA, 0xFA15, 0xFB58, 0xFA16, 0xFB5E, 0xFA17, 0xFB75, - 0xFA18, 0xFB7D, 0xFA19, 0xFB7E, 0xFA1A, 0xFB80, 0xFA1B, 0xFB82, - 0xFA1C, 0xFB86, 0xFA1D, 0xFB89, 0xFA1E, 0xFB92, 0xFA1F, 0xFB9D, - 0xFA20, 0xFB9F, 0xFA21, 0xFBA0, 0xFA22, 0xFBA9, 0xFA23, 0xFBB1, - 0xFA24, 0xFBB3, 0xFA25, 0xFBB4, 0xFA26, 0xFBB7, 0xFA27, 0xFBD3, - 0xFA28, 0xFBDA, 0xFA29, 0xFBEA, 0xFA2A, 0xFBF6, 0xFA2B, 0xFBF7, - 0xFA2C, 0xFBF9, 0xFA2D, 0xFC49, 0xFF01, 0x8149, 0xFF02, 0xFA57, - 0xFF03, 0x8194, 0xFF04, 0x8190, 0xFF05, 0x8193, 0xFF06, 0x8195, - 0xFF07, 0xFA56, 0xFF08, 0x8169, 0xFF09, 0x816A, 0xFF0A, 0x8196, - 0xFF0B, 0x817B, 0xFF0C, 0x8143, 0xFF0D, 0x817C, 0xFF0E, 0x8144, - 0xFF0F, 0x815E, 0xFF10, 0x824F, 0xFF11, 0x8250, 0xFF12, 0x8251, - 0xFF13, 0x8252, 0xFF14, 0x8253, 0xFF15, 0x8254, 0xFF16, 0x8255, - 0xFF17, 0x8256, 0xFF18, 0x8257, 0xFF19, 0x8258, 0xFF1A, 0x8146, - 0xFF1B, 0x8147, 0xFF1C, 0x8183, 0xFF1D, 0x8181, 0xFF1E, 0x8184, - 0xFF1F, 0x8148, 0xFF20, 0x8197, 0xFF21, 0x8260, 0xFF22, 0x8261, - 0xFF23, 0x8262, 0xFF24, 0x8263, 0xFF25, 0x8264, 0xFF26, 0x8265, - 0xFF27, 0x8266, 0xFF28, 0x8267, 0xFF29, 0x8268, 0xFF2A, 0x8269, - 0xFF2B, 0x826A, 0xFF2C, 0x826B, 0xFF2D, 0x826C, 0xFF2E, 0x826D, - 0xFF2F, 0x826E, 0xFF30, 0x826F, 0xFF31, 0x8270, 0xFF32, 0x8271, - 0xFF33, 0x8272, 0xFF34, 0x8273, 0xFF35, 0x8274, 0xFF36, 0x8275, - 0xFF37, 0x8276, 0xFF38, 0x8277, 0xFF39, 0x8278, 0xFF3A, 0x8279, - 0xFF3B, 0x816D, 0xFF3C, 0x815F, 0xFF3D, 0x816E, 0xFF3E, 0x814F, - 0xFF3F, 0x8151, 0xFF40, 0x814D, 0xFF41, 0x8281, 0xFF42, 0x8282, - 0xFF43, 0x8283, 0xFF44, 0x8284, 0xFF45, 0x8285, 0xFF46, 0x8286, - 0xFF47, 0x8287, 0xFF48, 0x8288, 0xFF49, 0x8289, 0xFF4A, 0x828A, - 0xFF4B, 0x828B, 0xFF4C, 0x828C, 0xFF4D, 0x828D, 0xFF4E, 0x828E, - 0xFF4F, 0x828F, 0xFF50, 0x8290, 0xFF51, 0x8291, 0xFF52, 0x8292, - 0xFF53, 0x8293, 0xFF54, 0x8294, 0xFF55, 0x8295, 0xFF56, 0x8296, - 0xFF57, 0x8297, 0xFF58, 0x8298, 0xFF59, 0x8299, 0xFF5A, 0x829A, - 0xFF5B, 0x816F, 0xFF5C, 0x8162, 0xFF5D, 0x8170, 0xFF5E, 0x8160, - 0xFF61, 0x00A1, 0xFF62, 0x00A2, 0xFF63, 0x00A3, 0xFF64, 0x00A4, - 0xFF65, 0x00A5, 0xFF66, 0x00A6, 0xFF67, 0x00A7, 0xFF68, 0x00A8, - 0xFF69, 0x00A9, 0xFF6A, 0x00AA, 0xFF6B, 0x00AB, 0xFF6C, 0x00AC, - 0xFF6D, 0x00AD, 0xFF6E, 0x00AE, 0xFF6F, 0x00AF, 0xFF70, 0x00B0, - 0xFF71, 0x00B1, 0xFF72, 0x00B2, 0xFF73, 0x00B3, 0xFF74, 0x00B4, - 0xFF75, 0x00B5, 0xFF76, 0x00B6, 0xFF77, 0x00B7, 0xFF78, 0x00B8, - 0xFF79, 0x00B9, 0xFF7A, 0x00BA, 0xFF7B, 0x00BB, 0xFF7C, 0x00BC, - 0xFF7D, 0x00BD, 0xFF7E, 0x00BE, 0xFF7F, 0x00BF, 0xFF80, 0x00C0, - 0xFF81, 0x00C1, 0xFF82, 0x00C2, 0xFF83, 0x00C3, 0xFF84, 0x00C4, - 0xFF85, 0x00C5, 0xFF86, 0x00C6, 0xFF87, 0x00C7, 0xFF88, 0x00C8, - 0xFF89, 0x00C9, 0xFF8A, 0x00CA, 0xFF8B, 0x00CB, 0xFF8C, 0x00CC, - 0xFF8D, 0x00CD, 0xFF8E, 0x00CE, 0xFF8F, 0x00CF, 0xFF90, 0x00D0, - 0xFF91, 0x00D1, 0xFF92, 0x00D2, 0xFF93, 0x00D3, 0xFF94, 0x00D4, - 0xFF95, 0x00D5, 0xFF96, 0x00D6, 0xFF97, 0x00D7, 0xFF98, 0x00D8, - 0xFF99, 0x00D9, 0xFF9A, 0x00DA, 0xFF9B, 0x00DB, 0xFF9C, 0x00DC, - 0xFF9D, 0x00DD, 0xFF9E, 0x00DE, 0xFF9F, 0x00DF, 0xFFE0, 0x8191, - 0xFFE1, 0x8192, 0xFFE2, 0x81CA, 0xFFE3, 0x8150, 0xFFE4, 0xFA55, - 0xFFE5, 0x818F, 0, 0 -}; - -#if !_TINY_TABLE -static -const WCHAR sjis2uni[] = { -/* SJIS - Unicode, SJIS - Unicode, SJIS - Unicode, SJIS - Unicode, */ - 0x00A1, 0xFF61, 0x00A2, 0xFF62, 0x00A3, 0xFF63, 0x00A4, 0xFF64, - 0x00A5, 0xFF65, 0x00A6, 0xFF66, 0x00A7, 0xFF67, 0x00A8, 0xFF68, - 0x00A9, 0xFF69, 0x00AA, 0xFF6A, 0x00AB, 0xFF6B, 0x00AC, 0xFF6C, - 0x00AD, 0xFF6D, 0x00AE, 0xFF6E, 0x00AF, 0xFF6F, 0x00B0, 0xFF70, - 0x00B1, 0xFF71, 0x00B2, 0xFF72, 0x00B3, 0xFF73, 0x00B4, 0xFF74, - 0x00B5, 0xFF75, 0x00B6, 0xFF76, 0x00B7, 0xFF77, 0x00B8, 0xFF78, - 0x00B9, 0xFF79, 0x00BA, 0xFF7A, 0x00BB, 0xFF7B, 0x00BC, 0xFF7C, - 0x00BD, 0xFF7D, 0x00BE, 0xFF7E, 0x00BF, 0xFF7F, 0x00C0, 0xFF80, - 0x00C1, 0xFF81, 0x00C2, 0xFF82, 0x00C3, 0xFF83, 0x00C4, 0xFF84, - 0x00C5, 0xFF85, 0x00C6, 0xFF86, 0x00C7, 0xFF87, 0x00C8, 0xFF88, - 0x00C9, 0xFF89, 0x00CA, 0xFF8A, 0x00CB, 0xFF8B, 0x00CC, 0xFF8C, - 0x00CD, 0xFF8D, 0x00CE, 0xFF8E, 0x00CF, 0xFF8F, 0x00D0, 0xFF90, - 0x00D1, 0xFF91, 0x00D2, 0xFF92, 0x00D3, 0xFF93, 0x00D4, 0xFF94, - 0x00D5, 0xFF95, 0x00D6, 0xFF96, 0x00D7, 0xFF97, 0x00D8, 0xFF98, - 0x00D9, 0xFF99, 0x00DA, 0xFF9A, 0x00DB, 0xFF9B, 0x00DC, 0xFF9C, - 0x00DD, 0xFF9D, 0x00DE, 0xFF9E, 0x00DF, 0xFF9F, 0x8140, 0x3000, - 0x8141, 0x3001, 0x8142, 0x3002, 0x8143, 0xFF0C, 0x8144, 0xFF0E, - 0x8145, 0x30FB, 0x8146, 0xFF1A, 0x8147, 0xFF1B, 0x8148, 0xFF1F, - 0x8149, 0xFF01, 0x814A, 0x309B, 0x814B, 0x309C, 0x814C, 0x00B4, - 0x814D, 0xFF40, 0x814E, 0x00A8, 0x814F, 0xFF3E, 0x8150, 0xFFE3, - 0x8151, 0xFF3F, 0x8152, 0x30FD, 0x8153, 0x30FE, 0x8154, 0x309D, - 0x8155, 0x309E, 0x8156, 0x3003, 0x8157, 0x4EDD, 0x8158, 0x3005, - 0x8159, 0x3006, 0x815A, 0x3007, 0x815B, 0x30FC, 0x815C, 0x2015, - 0x815D, 0x2010, 0x815E, 0xFF0F, 0x815F, 0xFF3C, 0x8160, 0xFF5E, - 0x8161, 0x2225, 0x8162, 0xFF5C, 0x8163, 0x2026, 0x8164, 0x2025, - 0x8165, 0x2018, 0x8166, 0x2019, 0x8167, 0x201C, 0x8168, 0x201D, - 0x8169, 0xFF08, 0x816A, 0xFF09, 0x816B, 0x3014, 0x816C, 0x3015, - 0x816D, 0xFF3B, 0x816E, 0xFF3D, 0x816F, 0xFF5B, 0x8170, 0xFF5D, - 0x8171, 0x3008, 0x8172, 0x3009, 0x8173, 0x300A, 0x8174, 0x300B, - 0x8175, 0x300C, 0x8176, 0x300D, 0x8177, 0x300E, 0x8178, 0x300F, - 0x8179, 0x3010, 0x817A, 0x3011, 0x817B, 0xFF0B, 0x817C, 0xFF0D, - 0x817D, 0x00B1, 0x817E, 0x00D7, 0x8180, 0x00F7, 0x8181, 0xFF1D, - 0x8182, 0x2260, 0x8183, 0xFF1C, 0x8184, 0xFF1E, 0x8185, 0x2266, - 0x8186, 0x2267, 0x8187, 0x221E, 0x8188, 0x2234, 0x8189, 0x2642, - 0x818A, 0x2640, 0x818B, 0x00B0, 0x818C, 0x2032, 0x818D, 0x2033, - 0x818E, 0x2103, 0x818F, 0xFFE5, 0x8190, 0xFF04, 0x8191, 0xFFE0, - 0x8192, 0xFFE1, 0x8193, 0xFF05, 0x8194, 0xFF03, 0x8195, 0xFF06, - 0x8196, 0xFF0A, 0x8197, 0xFF20, 0x8198, 0x00A7, 0x8199, 0x2606, - 0x819A, 0x2605, 0x819B, 0x25CB, 0x819C, 0x25CF, 0x819D, 0x25CE, - 0x819E, 0x25C7, 0x819F, 0x25C6, 0x81A0, 0x25A1, 0x81A1, 0x25A0, - 0x81A2, 0x25B3, 0x81A3, 0x25B2, 0x81A4, 0x25BD, 0x81A5, 0x25BC, - 0x81A6, 0x203B, 0x81A7, 0x3012, 0x81A8, 0x2192, 0x81A9, 0x2190, - 0x81AA, 0x2191, 0x81AB, 0x2193, 0x81AC, 0x3013, 0x81B8, 0x2208, - 0x81B9, 0x220B, 0x81BA, 0x2286, 0x81BB, 0x2287, 0x81BC, 0x2282, - 0x81BD, 0x2283, 0x81BE, 0x222A, 0x81BF, 0x2229, 0x81C8, 0x2227, - 0x81C9, 0x2228, 0x81CA, 0xFFE2, 0x81CB, 0x21D2, 0x81CC, 0x21D4, - 0x81CD, 0x2200, 0x81CE, 0x2203, 0x81DA, 0x2220, 0x81DB, 0x22A5, - 0x81DC, 0x2312, 0x81DD, 0x2202, 0x81DE, 0x2207, 0x81DF, 0x2261, - 0x81E0, 0x2252, 0x81E1, 0x226A, 0x81E2, 0x226B, 0x81E3, 0x221A, - 0x81E4, 0x223D, 0x81E5, 0x221D, 0x81E6, 0x2235, 0x81E7, 0x222B, - 0x81E8, 0x222C, 0x81F0, 0x212B, 0x81F1, 0x2030, 0x81F2, 0x266F, - 0x81F3, 0x266D, 0x81F4, 0x266A, 0x81F5, 0x2020, 0x81F6, 0x2021, - 0x81F7, 0x00B6, 0x81FC, 0x25EF, 0x824F, 0xFF10, 0x8250, 0xFF11, - 0x8251, 0xFF12, 0x8252, 0xFF13, 0x8253, 0xFF14, 0x8254, 0xFF15, - 0x8255, 0xFF16, 0x8256, 0xFF17, 0x8257, 0xFF18, 0x8258, 0xFF19, - 0x8260, 0xFF21, 0x8261, 0xFF22, 0x8262, 0xFF23, 0x8263, 0xFF24, - 0x8264, 0xFF25, 0x8265, 0xFF26, 0x8266, 0xFF27, 0x8267, 0xFF28, - 0x8268, 0xFF29, 0x8269, 0xFF2A, 0x826A, 0xFF2B, 0x826B, 0xFF2C, - 0x826C, 0xFF2D, 0x826D, 0xFF2E, 0x826E, 0xFF2F, 0x826F, 0xFF30, - 0x8270, 0xFF31, 0x8271, 0xFF32, 0x8272, 0xFF33, 0x8273, 0xFF34, - 0x8274, 0xFF35, 0x8275, 0xFF36, 0x8276, 0xFF37, 0x8277, 0xFF38, - 0x8278, 0xFF39, 0x8279, 0xFF3A, 0x8281, 0xFF41, 0x8282, 0xFF42, - 0x8283, 0xFF43, 0x8284, 0xFF44, 0x8285, 0xFF45, 0x8286, 0xFF46, - 0x8287, 0xFF47, 0x8288, 0xFF48, 0x8289, 0xFF49, 0x828A, 0xFF4A, - 0x828B, 0xFF4B, 0x828C, 0xFF4C, 0x828D, 0xFF4D, 0x828E, 0xFF4E, - 0x828F, 0xFF4F, 0x8290, 0xFF50, 0x8291, 0xFF51, 0x8292, 0xFF52, - 0x8293, 0xFF53, 0x8294, 0xFF54, 0x8295, 0xFF55, 0x8296, 0xFF56, - 0x8297, 0xFF57, 0x8298, 0xFF58, 0x8299, 0xFF59, 0x829A, 0xFF5A, - 0x829F, 0x3041, 0x82A0, 0x3042, 0x82A1, 0x3043, 0x82A2, 0x3044, - 0x82A3, 0x3045, 0x82A4, 0x3046, 0x82A5, 0x3047, 0x82A6, 0x3048, - 0x82A7, 0x3049, 0x82A8, 0x304A, 0x82A9, 0x304B, 0x82AA, 0x304C, - 0x82AB, 0x304D, 0x82AC, 0x304E, 0x82AD, 0x304F, 0x82AE, 0x3050, - 0x82AF, 0x3051, 0x82B0, 0x3052, 0x82B1, 0x3053, 0x82B2, 0x3054, - 0x82B3, 0x3055, 0x82B4, 0x3056, 0x82B5, 0x3057, 0x82B6, 0x3058, - 0x82B7, 0x3059, 0x82B8, 0x305A, 0x82B9, 0x305B, 0x82BA, 0x305C, - 0x82BB, 0x305D, 0x82BC, 0x305E, 0x82BD, 0x305F, 0x82BE, 0x3060, - 0x82BF, 0x3061, 0x82C0, 0x3062, 0x82C1, 0x3063, 0x82C2, 0x3064, - 0x82C3, 0x3065, 0x82C4, 0x3066, 0x82C5, 0x3067, 0x82C6, 0x3068, - 0x82C7, 0x3069, 0x82C8, 0x306A, 0x82C9, 0x306B, 0x82CA, 0x306C, - 0x82CB, 0x306D, 0x82CC, 0x306E, 0x82CD, 0x306F, 0x82CE, 0x3070, - 0x82CF, 0x3071, 0x82D0, 0x3072, 0x82D1, 0x3073, 0x82D2, 0x3074, - 0x82D3, 0x3075, 0x82D4, 0x3076, 0x82D5, 0x3077, 0x82D6, 0x3078, - 0x82D7, 0x3079, 0x82D8, 0x307A, 0x82D9, 0x307B, 0x82DA, 0x307C, - 0x82DB, 0x307D, 0x82DC, 0x307E, 0x82DD, 0x307F, 0x82DE, 0x3080, - 0x82DF, 0x3081, 0x82E0, 0x3082, 0x82E1, 0x3083, 0x82E2, 0x3084, - 0x82E3, 0x3085, 0x82E4, 0x3086, 0x82E5, 0x3087, 0x82E6, 0x3088, - 0x82E7, 0x3089, 0x82E8, 0x308A, 0x82E9, 0x308B, 0x82EA, 0x308C, - 0x82EB, 0x308D, 0x82EC, 0x308E, 0x82ED, 0x308F, 0x82EE, 0x3090, - 0x82EF, 0x3091, 0x82F0, 0x3092, 0x82F1, 0x3093, 0x8340, 0x30A1, - 0x8341, 0x30A2, 0x8342, 0x30A3, 0x8343, 0x30A4, 0x8344, 0x30A5, - 0x8345, 0x30A6, 0x8346, 0x30A7, 0x8347, 0x30A8, 0x8348, 0x30A9, - 0x8349, 0x30AA, 0x834A, 0x30AB, 0x834B, 0x30AC, 0x834C, 0x30AD, - 0x834D, 0x30AE, 0x834E, 0x30AF, 0x834F, 0x30B0, 0x8350, 0x30B1, - 0x8351, 0x30B2, 0x8352, 0x30B3, 0x8353, 0x30B4, 0x8354, 0x30B5, - 0x8355, 0x30B6, 0x8356, 0x30B7, 0x8357, 0x30B8, 0x8358, 0x30B9, - 0x8359, 0x30BA, 0x835A, 0x30BB, 0x835B, 0x30BC, 0x835C, 0x30BD, - 0x835D, 0x30BE, 0x835E, 0x30BF, 0x835F, 0x30C0, 0x8360, 0x30C1, - 0x8361, 0x30C2, 0x8362, 0x30C3, 0x8363, 0x30C4, 0x8364, 0x30C5, - 0x8365, 0x30C6, 0x8366, 0x30C7, 0x8367, 0x30C8, 0x8368, 0x30C9, - 0x8369, 0x30CA, 0x836A, 0x30CB, 0x836B, 0x30CC, 0x836C, 0x30CD, - 0x836D, 0x30CE, 0x836E, 0x30CF, 0x836F, 0x30D0, 0x8370, 0x30D1, - 0x8371, 0x30D2, 0x8372, 0x30D3, 0x8373, 0x30D4, 0x8374, 0x30D5, - 0x8375, 0x30D6, 0x8376, 0x30D7, 0x8377, 0x30D8, 0x8378, 0x30D9, - 0x8379, 0x30DA, 0x837A, 0x30DB, 0x837B, 0x30DC, 0x837C, 0x30DD, - 0x837D, 0x30DE, 0x837E, 0x30DF, 0x8380, 0x30E0, 0x8381, 0x30E1, - 0x8382, 0x30E2, 0x8383, 0x30E3, 0x8384, 0x30E4, 0x8385, 0x30E5, - 0x8386, 0x30E6, 0x8387, 0x30E7, 0x8388, 0x30E8, 0x8389, 0x30E9, - 0x838A, 0x30EA, 0x838B, 0x30EB, 0x838C, 0x30EC, 0x838D, 0x30ED, - 0x838E, 0x30EE, 0x838F, 0x30EF, 0x8390, 0x30F0, 0x8391, 0x30F1, - 0x8392, 0x30F2, 0x8393, 0x30F3, 0x8394, 0x30F4, 0x8395, 0x30F5, - 0x8396, 0x30F6, 0x839F, 0x0391, 0x83A0, 0x0392, 0x83A1, 0x0393, - 0x83A2, 0x0394, 0x83A3, 0x0395, 0x83A4, 0x0396, 0x83A5, 0x0397, - 0x83A6, 0x0398, 0x83A7, 0x0399, 0x83A8, 0x039A, 0x83A9, 0x039B, - 0x83AA, 0x039C, 0x83AB, 0x039D, 0x83AC, 0x039E, 0x83AD, 0x039F, - 0x83AE, 0x03A0, 0x83AF, 0x03A1, 0x83B0, 0x03A3, 0x83B1, 0x03A4, - 0x83B2, 0x03A5, 0x83B3, 0x03A6, 0x83B4, 0x03A7, 0x83B5, 0x03A8, - 0x83B6, 0x03A9, 0x83BF, 0x03B1, 0x83C0, 0x03B2, 0x83C1, 0x03B3, - 0x83C2, 0x03B4, 0x83C3, 0x03B5, 0x83C4, 0x03B6, 0x83C5, 0x03B7, - 0x83C6, 0x03B8, 0x83C7, 0x03B9, 0x83C8, 0x03BA, 0x83C9, 0x03BB, - 0x83CA, 0x03BC, 0x83CB, 0x03BD, 0x83CC, 0x03BE, 0x83CD, 0x03BF, - 0x83CE, 0x03C0, 0x83CF, 0x03C1, 0x83D0, 0x03C3, 0x83D1, 0x03C4, - 0x83D2, 0x03C5, 0x83D3, 0x03C6, 0x83D4, 0x03C7, 0x83D5, 0x03C8, - 0x83D6, 0x03C9, 0x8440, 0x0410, 0x8441, 0x0411, 0x8442, 0x0412, - 0x8443, 0x0413, 0x8444, 0x0414, 0x8445, 0x0415, 0x8446, 0x0401, - 0x8447, 0x0416, 0x8448, 0x0417, 0x8449, 0x0418, 0x844A, 0x0419, - 0x844B, 0x041A, 0x844C, 0x041B, 0x844D, 0x041C, 0x844E, 0x041D, - 0x844F, 0x041E, 0x8450, 0x041F, 0x8451, 0x0420, 0x8452, 0x0421, - 0x8453, 0x0422, 0x8454, 0x0423, 0x8455, 0x0424, 0x8456, 0x0425, - 0x8457, 0x0426, 0x8458, 0x0427, 0x8459, 0x0428, 0x845A, 0x0429, - 0x845B, 0x042A, 0x845C, 0x042B, 0x845D, 0x042C, 0x845E, 0x042D, - 0x845F, 0x042E, 0x8460, 0x042F, 0x8470, 0x0430, 0x8471, 0x0431, - 0x8472, 0x0432, 0x8473, 0x0433, 0x8474, 0x0434, 0x8475, 0x0435, - 0x8476, 0x0451, 0x8477, 0x0436, 0x8478, 0x0437, 0x8479, 0x0438, - 0x847A, 0x0439, 0x847B, 0x043A, 0x847C, 0x043B, 0x847D, 0x043C, - 0x847E, 0x043D, 0x8480, 0x043E, 0x8481, 0x043F, 0x8482, 0x0440, - 0x8483, 0x0441, 0x8484, 0x0442, 0x8485, 0x0443, 0x8486, 0x0444, - 0x8487, 0x0445, 0x8488, 0x0446, 0x8489, 0x0447, 0x848A, 0x0448, - 0x848B, 0x0449, 0x848C, 0x044A, 0x848D, 0x044B, 0x848E, 0x044C, - 0x848F, 0x044D, 0x8490, 0x044E, 0x8491, 0x044F, 0x849F, 0x2500, - 0x84A0, 0x2502, 0x84A1, 0x250C, 0x84A2, 0x2510, 0x84A3, 0x2518, - 0x84A4, 0x2514, 0x84A5, 0x251C, 0x84A6, 0x252C, 0x84A7, 0x2524, - 0x84A8, 0x2534, 0x84A9, 0x253C, 0x84AA, 0x2501, 0x84AB, 0x2503, - 0x84AC, 0x250F, 0x84AD, 0x2513, 0x84AE, 0x251B, 0x84AF, 0x2517, - 0x84B0, 0x2523, 0x84B1, 0x2533, 0x84B2, 0x252B, 0x84B3, 0x253B, - 0x84B4, 0x254B, 0x84B5, 0x2520, 0x84B6, 0x252F, 0x84B7, 0x2528, - 0x84B8, 0x2537, 0x84B9, 0x253F, 0x84BA, 0x251D, 0x84BB, 0x2530, - 0x84BC, 0x2525, 0x84BD, 0x2538, 0x84BE, 0x2542, 0x8740, 0x2460, - 0x8741, 0x2461, 0x8742, 0x2462, 0x8743, 0x2463, 0x8744, 0x2464, - 0x8745, 0x2465, 0x8746, 0x2466, 0x8747, 0x2467, 0x8748, 0x2468, - 0x8749, 0x2469, 0x874A, 0x246A, 0x874B, 0x246B, 0x874C, 0x246C, - 0x874D, 0x246D, 0x874E, 0x246E, 0x874F, 0x246F, 0x8750, 0x2470, - 0x8751, 0x2471, 0x8752, 0x2472, 0x8753, 0x2473, 0x8754, 0x2160, - 0x8755, 0x2161, 0x8756, 0x2162, 0x8757, 0x2163, 0x8758, 0x2164, - 0x8759, 0x2165, 0x875A, 0x2166, 0x875B, 0x2167, 0x875C, 0x2168, - 0x875D, 0x2169, 0x875F, 0x3349, 0x8760, 0x3314, 0x8761, 0x3322, - 0x8762, 0x334D, 0x8763, 0x3318, 0x8764, 0x3327, 0x8765, 0x3303, - 0x8766, 0x3336, 0x8767, 0x3351, 0x8768, 0x3357, 0x8769, 0x330D, - 0x876A, 0x3326, 0x876B, 0x3323, 0x876C, 0x332B, 0x876D, 0x334A, - 0x876E, 0x333B, 0x876F, 0x339C, 0x8770, 0x339D, 0x8771, 0x339E, - 0x8772, 0x338E, 0x8773, 0x338F, 0x8774, 0x33C4, 0x8775, 0x33A1, - 0x877E, 0x337B, 0x8780, 0x301D, 0x8781, 0x301F, 0x8782, 0x2116, - 0x8783, 0x33CD, 0x8784, 0x2121, 0x8785, 0x32A4, 0x8786, 0x32A5, - 0x8787, 0x32A6, 0x8788, 0x32A7, 0x8789, 0x32A8, 0x878A, 0x3231, - 0x878B, 0x3232, 0x878C, 0x3239, 0x878D, 0x337E, 0x878E, 0x337D, - 0x878F, 0x337C, 0x8793, 0x222E, 0x8794, 0x2211, 0x8798, 0x221F, - 0x8799, 0x22BF, 0x889F, 0x4E9C, 0x88A0, 0x5516, 0x88A1, 0x5A03, - 0x88A2, 0x963F, 0x88A3, 0x54C0, 0x88A4, 0x611B, 0x88A5, 0x6328, - 0x88A6, 0x59F6, 0x88A7, 0x9022, 0x88A8, 0x8475, 0x88A9, 0x831C, - 0x88AA, 0x7A50, 0x88AB, 0x60AA, 0x88AC, 0x63E1, 0x88AD, 0x6E25, - 0x88AE, 0x65ED, 0x88AF, 0x8466, 0x88B0, 0x82A6, 0x88B1, 0x9BF5, - 0x88B2, 0x6893, 0x88B3, 0x5727, 0x88B4, 0x65A1, 0x88B5, 0x6271, - 0x88B6, 0x5B9B, 0x88B7, 0x59D0, 0x88B8, 0x867B, 0x88B9, 0x98F4, - 0x88BA, 0x7D62, 0x88BB, 0x7DBE, 0x88BC, 0x9B8E, 0x88BD, 0x6216, - 0x88BE, 0x7C9F, 0x88BF, 0x88B7, 0x88C0, 0x5B89, 0x88C1, 0x5EB5, - 0x88C2, 0x6309, 0x88C3, 0x6697, 0x88C4, 0x6848, 0x88C5, 0x95C7, - 0x88C6, 0x978D, 0x88C7, 0x674F, 0x88C8, 0x4EE5, 0x88C9, 0x4F0A, - 0x88CA, 0x4F4D, 0x88CB, 0x4F9D, 0x88CC, 0x5049, 0x88CD, 0x56F2, - 0x88CE, 0x5937, 0x88CF, 0x59D4, 0x88D0, 0x5A01, 0x88D1, 0x5C09, - 0x88D2, 0x60DF, 0x88D3, 0x610F, 0x88D4, 0x6170, 0x88D5, 0x6613, - 0x88D6, 0x6905, 0x88D7, 0x70BA, 0x88D8, 0x754F, 0x88D9, 0x7570, - 0x88DA, 0x79FB, 0x88DB, 0x7DAD, 0x88DC, 0x7DEF, 0x88DD, 0x80C3, - 0x88DE, 0x840E, 0x88DF, 0x8863, 0x88E0, 0x8B02, 0x88E1, 0x9055, - 0x88E2, 0x907A, 0x88E3, 0x533B, 0x88E4, 0x4E95, 0x88E5, 0x4EA5, - 0x88E6, 0x57DF, 0x88E7, 0x80B2, 0x88E8, 0x90C1, 0x88E9, 0x78EF, - 0x88EA, 0x4E00, 0x88EB, 0x58F1, 0x88EC, 0x6EA2, 0x88ED, 0x9038, - 0x88EE, 0x7A32, 0x88EF, 0x8328, 0x88F0, 0x828B, 0x88F1, 0x9C2F, - 0x88F2, 0x5141, 0x88F3, 0x5370, 0x88F4, 0x54BD, 0x88F5, 0x54E1, - 0x88F6, 0x56E0, 0x88F7, 0x59FB, 0x88F8, 0x5F15, 0x88F9, 0x98F2, - 0x88FA, 0x6DEB, 0x88FB, 0x80E4, 0x88FC, 0x852D, 0x8940, 0x9662, - 0x8941, 0x9670, 0x8942, 0x96A0, 0x8943, 0x97FB, 0x8944, 0x540B, - 0x8945, 0x53F3, 0x8946, 0x5B87, 0x8947, 0x70CF, 0x8948, 0x7FBD, - 0x8949, 0x8FC2, 0x894A, 0x96E8, 0x894B, 0x536F, 0x894C, 0x9D5C, - 0x894D, 0x7ABA, 0x894E, 0x4E11, 0x894F, 0x7893, 0x8950, 0x81FC, - 0x8951, 0x6E26, 0x8952, 0x5618, 0x8953, 0x5504, 0x8954, 0x6B1D, - 0x8955, 0x851A, 0x8956, 0x9C3B, 0x8957, 0x59E5, 0x8958, 0x53A9, - 0x8959, 0x6D66, 0x895A, 0x74DC, 0x895B, 0x958F, 0x895C, 0x5642, - 0x895D, 0x4E91, 0x895E, 0x904B, 0x895F, 0x96F2, 0x8960, 0x834F, - 0x8961, 0x990C, 0x8962, 0x53E1, 0x8963, 0x55B6, 0x8964, 0x5B30, - 0x8965, 0x5F71, 0x8966, 0x6620, 0x8967, 0x66F3, 0x8968, 0x6804, - 0x8969, 0x6C38, 0x896A, 0x6CF3, 0x896B, 0x6D29, 0x896C, 0x745B, - 0x896D, 0x76C8, 0x896E, 0x7A4E, 0x896F, 0x9834, 0x8970, 0x82F1, - 0x8971, 0x885B, 0x8972, 0x8A60, 0x8973, 0x92ED, 0x8974, 0x6DB2, - 0x8975, 0x75AB, 0x8976, 0x76CA, 0x8977, 0x99C5, 0x8978, 0x60A6, - 0x8979, 0x8B01, 0x897A, 0x8D8A, 0x897B, 0x95B2, 0x897C, 0x698E, - 0x897D, 0x53AD, 0x897E, 0x5186, 0x8980, 0x5712, 0x8981, 0x5830, - 0x8982, 0x5944, 0x8983, 0x5BB4, 0x8984, 0x5EF6, 0x8985, 0x6028, - 0x8986, 0x63A9, 0x8987, 0x63F4, 0x8988, 0x6CBF, 0x8989, 0x6F14, - 0x898A, 0x708E, 0x898B, 0x7114, 0x898C, 0x7159, 0x898D, 0x71D5, - 0x898E, 0x733F, 0x898F, 0x7E01, 0x8990, 0x8276, 0x8991, 0x82D1, - 0x8992, 0x8597, 0x8993, 0x9060, 0x8994, 0x925B, 0x8995, 0x9D1B, - 0x8996, 0x5869, 0x8997, 0x65BC, 0x8998, 0x6C5A, 0x8999, 0x7525, - 0x899A, 0x51F9, 0x899B, 0x592E, 0x899C, 0x5965, 0x899D, 0x5F80, - 0x899E, 0x5FDC, 0x899F, 0x62BC, 0x89A0, 0x65FA, 0x89A1, 0x6A2A, - 0x89A2, 0x6B27, 0x89A3, 0x6BB4, 0x89A4, 0x738B, 0x89A5, 0x7FC1, - 0x89A6, 0x8956, 0x89A7, 0x9D2C, 0x89A8, 0x9D0E, 0x89A9, 0x9EC4, - 0x89AA, 0x5CA1, 0x89AB, 0x6C96, 0x89AC, 0x837B, 0x89AD, 0x5104, - 0x89AE, 0x5C4B, 0x89AF, 0x61B6, 0x89B0, 0x81C6, 0x89B1, 0x6876, - 0x89B2, 0x7261, 0x89B3, 0x4E59, 0x89B4, 0x4FFA, 0x89B5, 0x5378, - 0x89B6, 0x6069, 0x89B7, 0x6E29, 0x89B8, 0x7A4F, 0x89B9, 0x97F3, - 0x89BA, 0x4E0B, 0x89BB, 0x5316, 0x89BC, 0x4EEE, 0x89BD, 0x4F55, - 0x89BE, 0x4F3D, 0x89BF, 0x4FA1, 0x89C0, 0x4F73, 0x89C1, 0x52A0, - 0x89C2, 0x53EF, 0x89C3, 0x5609, 0x89C4, 0x590F, 0x89C5, 0x5AC1, - 0x89C6, 0x5BB6, 0x89C7, 0x5BE1, 0x89C8, 0x79D1, 0x89C9, 0x6687, - 0x89CA, 0x679C, 0x89CB, 0x67B6, 0x89CC, 0x6B4C, 0x89CD, 0x6CB3, - 0x89CE, 0x706B, 0x89CF, 0x73C2, 0x89D0, 0x798D, 0x89D1, 0x79BE, - 0x89D2, 0x7A3C, 0x89D3, 0x7B87, 0x89D4, 0x82B1, 0x89D5, 0x82DB, - 0x89D6, 0x8304, 0x89D7, 0x8377, 0x89D8, 0x83EF, 0x89D9, 0x83D3, - 0x89DA, 0x8766, 0x89DB, 0x8AB2, 0x89DC, 0x5629, 0x89DD, 0x8CA8, - 0x89DE, 0x8FE6, 0x89DF, 0x904E, 0x89E0, 0x971E, 0x89E1, 0x868A, - 0x89E2, 0x4FC4, 0x89E3, 0x5CE8, 0x89E4, 0x6211, 0x89E5, 0x7259, - 0x89E6, 0x753B, 0x89E7, 0x81E5, 0x89E8, 0x82BD, 0x89E9, 0x86FE, - 0x89EA, 0x8CC0, 0x89EB, 0x96C5, 0x89EC, 0x9913, 0x89ED, 0x99D5, - 0x89EE, 0x4ECB, 0x89EF, 0x4F1A, 0x89F0, 0x89E3, 0x89F1, 0x56DE, - 0x89F2, 0x584A, 0x89F3, 0x58CA, 0x89F4, 0x5EFB, 0x89F5, 0x5FEB, - 0x89F6, 0x602A, 0x89F7, 0x6094, 0x89F8, 0x6062, 0x89F9, 0x61D0, - 0x89FA, 0x6212, 0x89FB, 0x62D0, 0x89FC, 0x6539, 0x8A40, 0x9B41, - 0x8A41, 0x6666, 0x8A42, 0x68B0, 0x8A43, 0x6D77, 0x8A44, 0x7070, - 0x8A45, 0x754C, 0x8A46, 0x7686, 0x8A47, 0x7D75, 0x8A48, 0x82A5, - 0x8A49, 0x87F9, 0x8A4A, 0x958B, 0x8A4B, 0x968E, 0x8A4C, 0x8C9D, - 0x8A4D, 0x51F1, 0x8A4E, 0x52BE, 0x8A4F, 0x5916, 0x8A50, 0x54B3, - 0x8A51, 0x5BB3, 0x8A52, 0x5D16, 0x8A53, 0x6168, 0x8A54, 0x6982, - 0x8A55, 0x6DAF, 0x8A56, 0x788D, 0x8A57, 0x84CB, 0x8A58, 0x8857, - 0x8A59, 0x8A72, 0x8A5A, 0x93A7, 0x8A5B, 0x9AB8, 0x8A5C, 0x6D6C, - 0x8A5D, 0x99A8, 0x8A5E, 0x86D9, 0x8A5F, 0x57A3, 0x8A60, 0x67FF, - 0x8A61, 0x86CE, 0x8A62, 0x920E, 0x8A63, 0x5283, 0x8A64, 0x5687, - 0x8A65, 0x5404, 0x8A66, 0x5ED3, 0x8A67, 0x62E1, 0x8A68, 0x64B9, - 0x8A69, 0x683C, 0x8A6A, 0x6838, 0x8A6B, 0x6BBB, 0x8A6C, 0x7372, - 0x8A6D, 0x78BA, 0x8A6E, 0x7A6B, 0x8A6F, 0x899A, 0x8A70, 0x89D2, - 0x8A71, 0x8D6B, 0x8A72, 0x8F03, 0x8A73, 0x90ED, 0x8A74, 0x95A3, - 0x8A75, 0x9694, 0x8A76, 0x9769, 0x8A77, 0x5B66, 0x8A78, 0x5CB3, - 0x8A79, 0x697D, 0x8A7A, 0x984D, 0x8A7B, 0x984E, 0x8A7C, 0x639B, - 0x8A7D, 0x7B20, 0x8A7E, 0x6A2B, 0x8A80, 0x6A7F, 0x8A81, 0x68B6, - 0x8A82, 0x9C0D, 0x8A83, 0x6F5F, 0x8A84, 0x5272, 0x8A85, 0x559D, - 0x8A86, 0x6070, 0x8A87, 0x62EC, 0x8A88, 0x6D3B, 0x8A89, 0x6E07, - 0x8A8A, 0x6ED1, 0x8A8B, 0x845B, 0x8A8C, 0x8910, 0x8A8D, 0x8F44, - 0x8A8E, 0x4E14, 0x8A8F, 0x9C39, 0x8A90, 0x53F6, 0x8A91, 0x691B, - 0x8A92, 0x6A3A, 0x8A93, 0x9784, 0x8A94, 0x682A, 0x8A95, 0x515C, - 0x8A96, 0x7AC3, 0x8A97, 0x84B2, 0x8A98, 0x91DC, 0x8A99, 0x938C, - 0x8A9A, 0x565B, 0x8A9B, 0x9D28, 0x8A9C, 0x6822, 0x8A9D, 0x8305, - 0x8A9E, 0x8431, 0x8A9F, 0x7CA5, 0x8AA0, 0x5208, 0x8AA1, 0x82C5, - 0x8AA2, 0x74E6, 0x8AA3, 0x4E7E, 0x8AA4, 0x4F83, 0x8AA5, 0x51A0, - 0x8AA6, 0x5BD2, 0x8AA7, 0x520A, 0x8AA8, 0x52D8, 0x8AA9, 0x52E7, - 0x8AAA, 0x5DFB, 0x8AAB, 0x559A, 0x8AAC, 0x582A, 0x8AAD, 0x59E6, - 0x8AAE, 0x5B8C, 0x8AAF, 0x5B98, 0x8AB0, 0x5BDB, 0x8AB1, 0x5E72, - 0x8AB2, 0x5E79, 0x8AB3, 0x60A3, 0x8AB4, 0x611F, 0x8AB5, 0x6163, - 0x8AB6, 0x61BE, 0x8AB7, 0x63DB, 0x8AB8, 0x6562, 0x8AB9, 0x67D1, - 0x8ABA, 0x6853, 0x8ABB, 0x68FA, 0x8ABC, 0x6B3E, 0x8ABD, 0x6B53, - 0x8ABE, 0x6C57, 0x8ABF, 0x6F22, 0x8AC0, 0x6F97, 0x8AC1, 0x6F45, - 0x8AC2, 0x74B0, 0x8AC3, 0x7518, 0x8AC4, 0x76E3, 0x8AC5, 0x770B, - 0x8AC6, 0x7AFF, 0x8AC7, 0x7BA1, 0x8AC8, 0x7C21, 0x8AC9, 0x7DE9, - 0x8ACA, 0x7F36, 0x8ACB, 0x7FF0, 0x8ACC, 0x809D, 0x8ACD, 0x8266, - 0x8ACE, 0x839E, 0x8ACF, 0x89B3, 0x8AD0, 0x8ACC, 0x8AD1, 0x8CAB, - 0x8AD2, 0x9084, 0x8AD3, 0x9451, 0x8AD4, 0x9593, 0x8AD5, 0x9591, - 0x8AD6, 0x95A2, 0x8AD7, 0x9665, 0x8AD8, 0x97D3, 0x8AD9, 0x9928, - 0x8ADA, 0x8218, 0x8ADB, 0x4E38, 0x8ADC, 0x542B, 0x8ADD, 0x5CB8, - 0x8ADE, 0x5DCC, 0x8ADF, 0x73A9, 0x8AE0, 0x764C, 0x8AE1, 0x773C, - 0x8AE2, 0x5CA9, 0x8AE3, 0x7FEB, 0x8AE4, 0x8D0B, 0x8AE5, 0x96C1, - 0x8AE6, 0x9811, 0x8AE7, 0x9854, 0x8AE8, 0x9858, 0x8AE9, 0x4F01, - 0x8AEA, 0x4F0E, 0x8AEB, 0x5371, 0x8AEC, 0x559C, 0x8AED, 0x5668, - 0x8AEE, 0x57FA, 0x8AEF, 0x5947, 0x8AF0, 0x5B09, 0x8AF1, 0x5BC4, - 0x8AF2, 0x5C90, 0x8AF3, 0x5E0C, 0x8AF4, 0x5E7E, 0x8AF5, 0x5FCC, - 0x8AF6, 0x63EE, 0x8AF7, 0x673A, 0x8AF8, 0x65D7, 0x8AF9, 0x65E2, - 0x8AFA, 0x671F, 0x8AFB, 0x68CB, 0x8AFC, 0x68C4, 0x8B40, 0x6A5F, - 0x8B41, 0x5E30, 0x8B42, 0x6BC5, 0x8B43, 0x6C17, 0x8B44, 0x6C7D, - 0x8B45, 0x757F, 0x8B46, 0x7948, 0x8B47, 0x5B63, 0x8B48, 0x7A00, - 0x8B49, 0x7D00, 0x8B4A, 0x5FBD, 0x8B4B, 0x898F, 0x8B4C, 0x8A18, - 0x8B4D, 0x8CB4, 0x8B4E, 0x8D77, 0x8B4F, 0x8ECC, 0x8B50, 0x8F1D, - 0x8B51, 0x98E2, 0x8B52, 0x9A0E, 0x8B53, 0x9B3C, 0x8B54, 0x4E80, - 0x8B55, 0x507D, 0x8B56, 0x5100, 0x8B57, 0x5993, 0x8B58, 0x5B9C, - 0x8B59, 0x622F, 0x8B5A, 0x6280, 0x8B5B, 0x64EC, 0x8B5C, 0x6B3A, - 0x8B5D, 0x72A0, 0x8B5E, 0x7591, 0x8B5F, 0x7947, 0x8B60, 0x7FA9, - 0x8B61, 0x87FB, 0x8B62, 0x8ABC, 0x8B63, 0x8B70, 0x8B64, 0x63AC, - 0x8B65, 0x83CA, 0x8B66, 0x97A0, 0x8B67, 0x5409, 0x8B68, 0x5403, - 0x8B69, 0x55AB, 0x8B6A, 0x6854, 0x8B6B, 0x6A58, 0x8B6C, 0x8A70, - 0x8B6D, 0x7827, 0x8B6E, 0x6775, 0x8B6F, 0x9ECD, 0x8B70, 0x5374, - 0x8B71, 0x5BA2, 0x8B72, 0x811A, 0x8B73, 0x8650, 0x8B74, 0x9006, - 0x8B75, 0x4E18, 0x8B76, 0x4E45, 0x8B77, 0x4EC7, 0x8B78, 0x4F11, - 0x8B79, 0x53CA, 0x8B7A, 0x5438, 0x8B7B, 0x5BAE, 0x8B7C, 0x5F13, - 0x8B7D, 0x6025, 0x8B7E, 0x6551, 0x8B80, 0x673D, 0x8B81, 0x6C42, - 0x8B82, 0x6C72, 0x8B83, 0x6CE3, 0x8B84, 0x7078, 0x8B85, 0x7403, - 0x8B86, 0x7A76, 0x8B87, 0x7AAE, 0x8B88, 0x7B08, 0x8B89, 0x7D1A, - 0x8B8A, 0x7CFE, 0x8B8B, 0x7D66, 0x8B8C, 0x65E7, 0x8B8D, 0x725B, - 0x8B8E, 0x53BB, 0x8B8F, 0x5C45, 0x8B90, 0x5DE8, 0x8B91, 0x62D2, - 0x8B92, 0x62E0, 0x8B93, 0x6319, 0x8B94, 0x6E20, 0x8B95, 0x865A, - 0x8B96, 0x8A31, 0x8B97, 0x8DDD, 0x8B98, 0x92F8, 0x8B99, 0x6F01, - 0x8B9A, 0x79A6, 0x8B9B, 0x9B5A, 0x8B9C, 0x4EA8, 0x8B9D, 0x4EAB, - 0x8B9E, 0x4EAC, 0x8B9F, 0x4F9B, 0x8BA0, 0x4FA0, 0x8BA1, 0x50D1, - 0x8BA2, 0x5147, 0x8BA3, 0x7AF6, 0x8BA4, 0x5171, 0x8BA5, 0x51F6, - 0x8BA6, 0x5354, 0x8BA7, 0x5321, 0x8BA8, 0x537F, 0x8BA9, 0x53EB, - 0x8BAA, 0x55AC, 0x8BAB, 0x5883, 0x8BAC, 0x5CE1, 0x8BAD, 0x5F37, - 0x8BAE, 0x5F4A, 0x8BAF, 0x602F, 0x8BB0, 0x6050, 0x8BB1, 0x606D, - 0x8BB2, 0x631F, 0x8BB3, 0x6559, 0x8BB4, 0x6A4B, 0x8BB5, 0x6CC1, - 0x8BB6, 0x72C2, 0x8BB7, 0x72ED, 0x8BB8, 0x77EF, 0x8BB9, 0x80F8, - 0x8BBA, 0x8105, 0x8BBB, 0x8208, 0x8BBC, 0x854E, 0x8BBD, 0x90F7, - 0x8BBE, 0x93E1, 0x8BBF, 0x97FF, 0x8BC0, 0x9957, 0x8BC1, 0x9A5A, - 0x8BC2, 0x4EF0, 0x8BC3, 0x51DD, 0x8BC4, 0x5C2D, 0x8BC5, 0x6681, - 0x8BC6, 0x696D, 0x8BC7, 0x5C40, 0x8BC8, 0x66F2, 0x8BC9, 0x6975, - 0x8BCA, 0x7389, 0x8BCB, 0x6850, 0x8BCC, 0x7C81, 0x8BCD, 0x50C5, - 0x8BCE, 0x52E4, 0x8BCF, 0x5747, 0x8BD0, 0x5DFE, 0x8BD1, 0x9326, - 0x8BD2, 0x65A4, 0x8BD3, 0x6B23, 0x8BD4, 0x6B3D, 0x8BD5, 0x7434, - 0x8BD6, 0x7981, 0x8BD7, 0x79BD, 0x8BD8, 0x7B4B, 0x8BD9, 0x7DCA, - 0x8BDA, 0x82B9, 0x8BDB, 0x83CC, 0x8BDC, 0x887F, 0x8BDD, 0x895F, - 0x8BDE, 0x8B39, 0x8BDF, 0x8FD1, 0x8BE0, 0x91D1, 0x8BE1, 0x541F, - 0x8BE2, 0x9280, 0x8BE3, 0x4E5D, 0x8BE4, 0x5036, 0x8BE5, 0x53E5, - 0x8BE6, 0x533A, 0x8BE7, 0x72D7, 0x8BE8, 0x7396, 0x8BE9, 0x77E9, - 0x8BEA, 0x82E6, 0x8BEB, 0x8EAF, 0x8BEC, 0x99C6, 0x8BED, 0x99C8, - 0x8BEE, 0x99D2, 0x8BEF, 0x5177, 0x8BF0, 0x611A, 0x8BF1, 0x865E, - 0x8BF2, 0x55B0, 0x8BF3, 0x7A7A, 0x8BF4, 0x5076, 0x8BF5, 0x5BD3, - 0x8BF6, 0x9047, 0x8BF7, 0x9685, 0x8BF8, 0x4E32, 0x8BF9, 0x6ADB, - 0x8BFA, 0x91E7, 0x8BFB, 0x5C51, 0x8BFC, 0x5C48, 0x8C40, 0x6398, - 0x8C41, 0x7A9F, 0x8C42, 0x6C93, 0x8C43, 0x9774, 0x8C44, 0x8F61, - 0x8C45, 0x7AAA, 0x8C46, 0x718A, 0x8C47, 0x9688, 0x8C48, 0x7C82, - 0x8C49, 0x6817, 0x8C4A, 0x7E70, 0x8C4B, 0x6851, 0x8C4C, 0x936C, - 0x8C4D, 0x52F2, 0x8C4E, 0x541B, 0x8C4F, 0x85AB, 0x8C50, 0x8A13, - 0x8C51, 0x7FA4, 0x8C52, 0x8ECD, 0x8C53, 0x90E1, 0x8C54, 0x5366, - 0x8C55, 0x8888, 0x8C56, 0x7941, 0x8C57, 0x4FC2, 0x8C58, 0x50BE, - 0x8C59, 0x5211, 0x8C5A, 0x5144, 0x8C5B, 0x5553, 0x8C5C, 0x572D, - 0x8C5D, 0x73EA, 0x8C5E, 0x578B, 0x8C5F, 0x5951, 0x8C60, 0x5F62, - 0x8C61, 0x5F84, 0x8C62, 0x6075, 0x8C63, 0x6176, 0x8C64, 0x6167, - 0x8C65, 0x61A9, 0x8C66, 0x63B2, 0x8C67, 0x643A, 0x8C68, 0x656C, - 0x8C69, 0x666F, 0x8C6A, 0x6842, 0x8C6B, 0x6E13, 0x8C6C, 0x7566, - 0x8C6D, 0x7A3D, 0x8C6E, 0x7CFB, 0x8C6F, 0x7D4C, 0x8C70, 0x7D99, - 0x8C71, 0x7E4B, 0x8C72, 0x7F6B, 0x8C73, 0x830E, 0x8C74, 0x834A, - 0x8C75, 0x86CD, 0x8C76, 0x8A08, 0x8C77, 0x8A63, 0x8C78, 0x8B66, - 0x8C79, 0x8EFD, 0x8C7A, 0x981A, 0x8C7B, 0x9D8F, 0x8C7C, 0x82B8, - 0x8C7D, 0x8FCE, 0x8C7E, 0x9BE8, 0x8C80, 0x5287, 0x8C81, 0x621F, - 0x8C82, 0x6483, 0x8C83, 0x6FC0, 0x8C84, 0x9699, 0x8C85, 0x6841, - 0x8C86, 0x5091, 0x8C87, 0x6B20, 0x8C88, 0x6C7A, 0x8C89, 0x6F54, - 0x8C8A, 0x7A74, 0x8C8B, 0x7D50, 0x8C8C, 0x8840, 0x8C8D, 0x8A23, - 0x8C8E, 0x6708, 0x8C8F, 0x4EF6, 0x8C90, 0x5039, 0x8C91, 0x5026, - 0x8C92, 0x5065, 0x8C93, 0x517C, 0x8C94, 0x5238, 0x8C95, 0x5263, - 0x8C96, 0x55A7, 0x8C97, 0x570F, 0x8C98, 0x5805, 0x8C99, 0x5ACC, - 0x8C9A, 0x5EFA, 0x8C9B, 0x61B2, 0x8C9C, 0x61F8, 0x8C9D, 0x62F3, - 0x8C9E, 0x6372, 0x8C9F, 0x691C, 0x8CA0, 0x6A29, 0x8CA1, 0x727D, - 0x8CA2, 0x72AC, 0x8CA3, 0x732E, 0x8CA4, 0x7814, 0x8CA5, 0x786F, - 0x8CA6, 0x7D79, 0x8CA7, 0x770C, 0x8CA8, 0x80A9, 0x8CA9, 0x898B, - 0x8CAA, 0x8B19, 0x8CAB, 0x8CE2, 0x8CAC, 0x8ED2, 0x8CAD, 0x9063, - 0x8CAE, 0x9375, 0x8CAF, 0x967A, 0x8CB0, 0x9855, 0x8CB1, 0x9A13, - 0x8CB2, 0x9E78, 0x8CB3, 0x5143, 0x8CB4, 0x539F, 0x8CB5, 0x53B3, - 0x8CB6, 0x5E7B, 0x8CB7, 0x5F26, 0x8CB8, 0x6E1B, 0x8CB9, 0x6E90, - 0x8CBA, 0x7384, 0x8CBB, 0x73FE, 0x8CBC, 0x7D43, 0x8CBD, 0x8237, - 0x8CBE, 0x8A00, 0x8CBF, 0x8AFA, 0x8CC0, 0x9650, 0x8CC1, 0x4E4E, - 0x8CC2, 0x500B, 0x8CC3, 0x53E4, 0x8CC4, 0x547C, 0x8CC5, 0x56FA, - 0x8CC6, 0x59D1, 0x8CC7, 0x5B64, 0x8CC8, 0x5DF1, 0x8CC9, 0x5EAB, - 0x8CCA, 0x5F27, 0x8CCB, 0x6238, 0x8CCC, 0x6545, 0x8CCD, 0x67AF, - 0x8CCE, 0x6E56, 0x8CCF, 0x72D0, 0x8CD0, 0x7CCA, 0x8CD1, 0x88B4, - 0x8CD2, 0x80A1, 0x8CD3, 0x80E1, 0x8CD4, 0x83F0, 0x8CD5, 0x864E, - 0x8CD6, 0x8A87, 0x8CD7, 0x8DE8, 0x8CD8, 0x9237, 0x8CD9, 0x96C7, - 0x8CDA, 0x9867, 0x8CDB, 0x9F13, 0x8CDC, 0x4E94, 0x8CDD, 0x4E92, - 0x8CDE, 0x4F0D, 0x8CDF, 0x5348, 0x8CE0, 0x5449, 0x8CE1, 0x543E, - 0x8CE2, 0x5A2F, 0x8CE3, 0x5F8C, 0x8CE4, 0x5FA1, 0x8CE5, 0x609F, - 0x8CE6, 0x68A7, 0x8CE7, 0x6A8E, 0x8CE8, 0x745A, 0x8CE9, 0x7881, - 0x8CEA, 0x8A9E, 0x8CEB, 0x8AA4, 0x8CEC, 0x8B77, 0x8CED, 0x9190, - 0x8CEE, 0x4E5E, 0x8CEF, 0x9BC9, 0x8CF0, 0x4EA4, 0x8CF1, 0x4F7C, - 0x8CF2, 0x4FAF, 0x8CF3, 0x5019, 0x8CF4, 0x5016, 0x8CF5, 0x5149, - 0x8CF6, 0x516C, 0x8CF7, 0x529F, 0x8CF8, 0x52B9, 0x8CF9, 0x52FE, - 0x8CFA, 0x539A, 0x8CFB, 0x53E3, 0x8CFC, 0x5411, 0x8D40, 0x540E, - 0x8D41, 0x5589, 0x8D42, 0x5751, 0x8D43, 0x57A2, 0x8D44, 0x597D, - 0x8D45, 0x5B54, 0x8D46, 0x5B5D, 0x8D47, 0x5B8F, 0x8D48, 0x5DE5, - 0x8D49, 0x5DE7, 0x8D4A, 0x5DF7, 0x8D4B, 0x5E78, 0x8D4C, 0x5E83, - 0x8D4D, 0x5E9A, 0x8D4E, 0x5EB7, 0x8D4F, 0x5F18, 0x8D50, 0x6052, - 0x8D51, 0x614C, 0x8D52, 0x6297, 0x8D53, 0x62D8, 0x8D54, 0x63A7, - 0x8D55, 0x653B, 0x8D56, 0x6602, 0x8D57, 0x6643, 0x8D58, 0x66F4, - 0x8D59, 0x676D, 0x8D5A, 0x6821, 0x8D5B, 0x6897, 0x8D5C, 0x69CB, - 0x8D5D, 0x6C5F, 0x8D5E, 0x6D2A, 0x8D5F, 0x6D69, 0x8D60, 0x6E2F, - 0x8D61, 0x6E9D, 0x8D62, 0x7532, 0x8D63, 0x7687, 0x8D64, 0x786C, - 0x8D65, 0x7A3F, 0x8D66, 0x7CE0, 0x8D67, 0x7D05, 0x8D68, 0x7D18, - 0x8D69, 0x7D5E, 0x8D6A, 0x7DB1, 0x8D6B, 0x8015, 0x8D6C, 0x8003, - 0x8D6D, 0x80AF, 0x8D6E, 0x80B1, 0x8D6F, 0x8154, 0x8D70, 0x818F, - 0x8D71, 0x822A, 0x8D72, 0x8352, 0x8D73, 0x884C, 0x8D74, 0x8861, - 0x8D75, 0x8B1B, 0x8D76, 0x8CA2, 0x8D77, 0x8CFC, 0x8D78, 0x90CA, - 0x8D79, 0x9175, 0x8D7A, 0x9271, 0x8D7B, 0x783F, 0x8D7C, 0x92FC, - 0x8D7D, 0x95A4, 0x8D7E, 0x964D, 0x8D80, 0x9805, 0x8D81, 0x9999, - 0x8D82, 0x9AD8, 0x8D83, 0x9D3B, 0x8D84, 0x525B, 0x8D85, 0x52AB, - 0x8D86, 0x53F7, 0x8D87, 0x5408, 0x8D88, 0x58D5, 0x8D89, 0x62F7, - 0x8D8A, 0x6FE0, 0x8D8B, 0x8C6A, 0x8D8C, 0x8F5F, 0x8D8D, 0x9EB9, - 0x8D8E, 0x514B, 0x8D8F, 0x523B, 0x8D90, 0x544A, 0x8D91, 0x56FD, - 0x8D92, 0x7A40, 0x8D93, 0x9177, 0x8D94, 0x9D60, 0x8D95, 0x9ED2, - 0x8D96, 0x7344, 0x8D97, 0x6F09, 0x8D98, 0x8170, 0x8D99, 0x7511, - 0x8D9A, 0x5FFD, 0x8D9B, 0x60DA, 0x8D9C, 0x9AA8, 0x8D9D, 0x72DB, - 0x8D9E, 0x8FBC, 0x8D9F, 0x6B64, 0x8DA0, 0x9803, 0x8DA1, 0x4ECA, - 0x8DA2, 0x56F0, 0x8DA3, 0x5764, 0x8DA4, 0x58BE, 0x8DA5, 0x5A5A, - 0x8DA6, 0x6068, 0x8DA7, 0x61C7, 0x8DA8, 0x660F, 0x8DA9, 0x6606, - 0x8DAA, 0x6839, 0x8DAB, 0x68B1, 0x8DAC, 0x6DF7, 0x8DAD, 0x75D5, - 0x8DAE, 0x7D3A, 0x8DAF, 0x826E, 0x8DB0, 0x9B42, 0x8DB1, 0x4E9B, - 0x8DB2, 0x4F50, 0x8DB3, 0x53C9, 0x8DB4, 0x5506, 0x8DB5, 0x5D6F, - 0x8DB6, 0x5DE6, 0x8DB7, 0x5DEE, 0x8DB8, 0x67FB, 0x8DB9, 0x6C99, - 0x8DBA, 0x7473, 0x8DBB, 0x7802, 0x8DBC, 0x8A50, 0x8DBD, 0x9396, - 0x8DBE, 0x88DF, 0x8DBF, 0x5750, 0x8DC0, 0x5EA7, 0x8DC1, 0x632B, - 0x8DC2, 0x50B5, 0x8DC3, 0x50AC, 0x8DC4, 0x518D, 0x8DC5, 0x6700, - 0x8DC6, 0x54C9, 0x8DC7, 0x585E, 0x8DC8, 0x59BB, 0x8DC9, 0x5BB0, - 0x8DCA, 0x5F69, 0x8DCB, 0x624D, 0x8DCC, 0x63A1, 0x8DCD, 0x683D, - 0x8DCE, 0x6B73, 0x8DCF, 0x6E08, 0x8DD0, 0x707D, 0x8DD1, 0x91C7, - 0x8DD2, 0x7280, 0x8DD3, 0x7815, 0x8DD4, 0x7826, 0x8DD5, 0x796D, - 0x8DD6, 0x658E, 0x8DD7, 0x7D30, 0x8DD8, 0x83DC, 0x8DD9, 0x88C1, - 0x8DDA, 0x8F09, 0x8DDB, 0x969B, 0x8DDC, 0x5264, 0x8DDD, 0x5728, - 0x8DDE, 0x6750, 0x8DDF, 0x7F6A, 0x8DE0, 0x8CA1, 0x8DE1, 0x51B4, - 0x8DE2, 0x5742, 0x8DE3, 0x962A, 0x8DE4, 0x583A, 0x8DE5, 0x698A, - 0x8DE6, 0x80B4, 0x8DE7, 0x54B2, 0x8DE8, 0x5D0E, 0x8DE9, 0x57FC, - 0x8DEA, 0x7895, 0x8DEB, 0x9DFA, 0x8DEC, 0x4F5C, 0x8DED, 0x524A, - 0x8DEE, 0x548B, 0x8DEF, 0x643E, 0x8DF0, 0x6628, 0x8DF1, 0x6714, - 0x8DF2, 0x67F5, 0x8DF3, 0x7A84, 0x8DF4, 0x7B56, 0x8DF5, 0x7D22, - 0x8DF6, 0x932F, 0x8DF7, 0x685C, 0x8DF8, 0x9BAD, 0x8DF9, 0x7B39, - 0x8DFA, 0x5319, 0x8DFB, 0x518A, 0x8DFC, 0x5237, 0x8E40, 0x5BDF, - 0x8E41, 0x62F6, 0x8E42, 0x64AE, 0x8E43, 0x64E6, 0x8E44, 0x672D, - 0x8E45, 0x6BBA, 0x8E46, 0x85A9, 0x8E47, 0x96D1, 0x8E48, 0x7690, - 0x8E49, 0x9BD6, 0x8E4A, 0x634C, 0x8E4B, 0x9306, 0x8E4C, 0x9BAB, - 0x8E4D, 0x76BF, 0x8E4E, 0x6652, 0x8E4F, 0x4E09, 0x8E50, 0x5098, - 0x8E51, 0x53C2, 0x8E52, 0x5C71, 0x8E53, 0x60E8, 0x8E54, 0x6492, - 0x8E55, 0x6563, 0x8E56, 0x685F, 0x8E57, 0x71E6, 0x8E58, 0x73CA, - 0x8E59, 0x7523, 0x8E5A, 0x7B97, 0x8E5B, 0x7E82, 0x8E5C, 0x8695, - 0x8E5D, 0x8B83, 0x8E5E, 0x8CDB, 0x8E5F, 0x9178, 0x8E60, 0x9910, - 0x8E61, 0x65AC, 0x8E62, 0x66AB, 0x8E63, 0x6B8B, 0x8E64, 0x4ED5, - 0x8E65, 0x4ED4, 0x8E66, 0x4F3A, 0x8E67, 0x4F7F, 0x8E68, 0x523A, - 0x8E69, 0x53F8, 0x8E6A, 0x53F2, 0x8E6B, 0x55E3, 0x8E6C, 0x56DB, - 0x8E6D, 0x58EB, 0x8E6E, 0x59CB, 0x8E6F, 0x59C9, 0x8E70, 0x59FF, - 0x8E71, 0x5B50, 0x8E72, 0x5C4D, 0x8E73, 0x5E02, 0x8E74, 0x5E2B, - 0x8E75, 0x5FD7, 0x8E76, 0x601D, 0x8E77, 0x6307, 0x8E78, 0x652F, - 0x8E79, 0x5B5C, 0x8E7A, 0x65AF, 0x8E7B, 0x65BD, 0x8E7C, 0x65E8, - 0x8E7D, 0x679D, 0x8E7E, 0x6B62, 0x8E80, 0x6B7B, 0x8E81, 0x6C0F, - 0x8E82, 0x7345, 0x8E83, 0x7949, 0x8E84, 0x79C1, 0x8E85, 0x7CF8, - 0x8E86, 0x7D19, 0x8E87, 0x7D2B, 0x8E88, 0x80A2, 0x8E89, 0x8102, - 0x8E8A, 0x81F3, 0x8E8B, 0x8996, 0x8E8C, 0x8A5E, 0x8E8D, 0x8A69, - 0x8E8E, 0x8A66, 0x8E8F, 0x8A8C, 0x8E90, 0x8AEE, 0x8E91, 0x8CC7, - 0x8E92, 0x8CDC, 0x8E93, 0x96CC, 0x8E94, 0x98FC, 0x8E95, 0x6B6F, - 0x8E96, 0x4E8B, 0x8E97, 0x4F3C, 0x8E98, 0x4F8D, 0x8E99, 0x5150, - 0x8E9A, 0x5B57, 0x8E9B, 0x5BFA, 0x8E9C, 0x6148, 0x8E9D, 0x6301, - 0x8E9E, 0x6642, 0x8E9F, 0x6B21, 0x8EA0, 0x6ECB, 0x8EA1, 0x6CBB, - 0x8EA2, 0x723E, 0x8EA3, 0x74BD, 0x8EA4, 0x75D4, 0x8EA5, 0x78C1, - 0x8EA6, 0x793A, 0x8EA7, 0x800C, 0x8EA8, 0x8033, 0x8EA9, 0x81EA, - 0x8EAA, 0x8494, 0x8EAB, 0x8F9E, 0x8EAC, 0x6C50, 0x8EAD, 0x9E7F, - 0x8EAE, 0x5F0F, 0x8EAF, 0x8B58, 0x8EB0, 0x9D2B, 0x8EB1, 0x7AFA, - 0x8EB2, 0x8EF8, 0x8EB3, 0x5B8D, 0x8EB4, 0x96EB, 0x8EB5, 0x4E03, - 0x8EB6, 0x53F1, 0x8EB7, 0x57F7, 0x8EB8, 0x5931, 0x8EB9, 0x5AC9, - 0x8EBA, 0x5BA4, 0x8EBB, 0x6089, 0x8EBC, 0x6E7F, 0x8EBD, 0x6F06, - 0x8EBE, 0x75BE, 0x8EBF, 0x8CEA, 0x8EC0, 0x5B9F, 0x8EC1, 0x8500, - 0x8EC2, 0x7BE0, 0x8EC3, 0x5072, 0x8EC4, 0x67F4, 0x8EC5, 0x829D, - 0x8EC6, 0x5C61, 0x8EC7, 0x854A, 0x8EC8, 0x7E1E, 0x8EC9, 0x820E, - 0x8ECA, 0x5199, 0x8ECB, 0x5C04, 0x8ECC, 0x6368, 0x8ECD, 0x8D66, - 0x8ECE, 0x659C, 0x8ECF, 0x716E, 0x8ED0, 0x793E, 0x8ED1, 0x7D17, - 0x8ED2, 0x8005, 0x8ED3, 0x8B1D, 0x8ED4, 0x8ECA, 0x8ED5, 0x906E, - 0x8ED6, 0x86C7, 0x8ED7, 0x90AA, 0x8ED8, 0x501F, 0x8ED9, 0x52FA, - 0x8EDA, 0x5C3A, 0x8EDB, 0x6753, 0x8EDC, 0x707C, 0x8EDD, 0x7235, - 0x8EDE, 0x914C, 0x8EDF, 0x91C8, 0x8EE0, 0x932B, 0x8EE1, 0x82E5, - 0x8EE2, 0x5BC2, 0x8EE3, 0x5F31, 0x8EE4, 0x60F9, 0x8EE5, 0x4E3B, - 0x8EE6, 0x53D6, 0x8EE7, 0x5B88, 0x8EE8, 0x624B, 0x8EE9, 0x6731, - 0x8EEA, 0x6B8A, 0x8EEB, 0x72E9, 0x8EEC, 0x73E0, 0x8EED, 0x7A2E, - 0x8EEE, 0x816B, 0x8EEF, 0x8DA3, 0x8EF0, 0x9152, 0x8EF1, 0x9996, - 0x8EF2, 0x5112, 0x8EF3, 0x53D7, 0x8EF4, 0x546A, 0x8EF5, 0x5BFF, - 0x8EF6, 0x6388, 0x8EF7, 0x6A39, 0x8EF8, 0x7DAC, 0x8EF9, 0x9700, - 0x8EFA, 0x56DA, 0x8EFB, 0x53CE, 0x8EFC, 0x5468, 0x8F40, 0x5B97, - 0x8F41, 0x5C31, 0x8F42, 0x5DDE, 0x8F43, 0x4FEE, 0x8F44, 0x6101, - 0x8F45, 0x62FE, 0x8F46, 0x6D32, 0x8F47, 0x79C0, 0x8F48, 0x79CB, - 0x8F49, 0x7D42, 0x8F4A, 0x7E4D, 0x8F4B, 0x7FD2, 0x8F4C, 0x81ED, - 0x8F4D, 0x821F, 0x8F4E, 0x8490, 0x8F4F, 0x8846, 0x8F50, 0x8972, - 0x8F51, 0x8B90, 0x8F52, 0x8E74, 0x8F53, 0x8F2F, 0x8F54, 0x9031, - 0x8F55, 0x914B, 0x8F56, 0x916C, 0x8F57, 0x96C6, 0x8F58, 0x919C, - 0x8F59, 0x4EC0, 0x8F5A, 0x4F4F, 0x8F5B, 0x5145, 0x8F5C, 0x5341, - 0x8F5D, 0x5F93, 0x8F5E, 0x620E, 0x8F5F, 0x67D4, 0x8F60, 0x6C41, - 0x8F61, 0x6E0B, 0x8F62, 0x7363, 0x8F63, 0x7E26, 0x8F64, 0x91CD, - 0x8F65, 0x9283, 0x8F66, 0x53D4, 0x8F67, 0x5919, 0x8F68, 0x5BBF, - 0x8F69, 0x6DD1, 0x8F6A, 0x795D, 0x8F6B, 0x7E2E, 0x8F6C, 0x7C9B, - 0x8F6D, 0x587E, 0x8F6E, 0x719F, 0x8F6F, 0x51FA, 0x8F70, 0x8853, - 0x8F71, 0x8FF0, 0x8F72, 0x4FCA, 0x8F73, 0x5CFB, 0x8F74, 0x6625, - 0x8F75, 0x77AC, 0x8F76, 0x7AE3, 0x8F77, 0x821C, 0x8F78, 0x99FF, - 0x8F79, 0x51C6, 0x8F7A, 0x5FAA, 0x8F7B, 0x65EC, 0x8F7C, 0x696F, - 0x8F7D, 0x6B89, 0x8F7E, 0x6DF3, 0x8F80, 0x6E96, 0x8F81, 0x6F64, - 0x8F82, 0x76FE, 0x8F83, 0x7D14, 0x8F84, 0x5DE1, 0x8F85, 0x9075, - 0x8F86, 0x9187, 0x8F87, 0x9806, 0x8F88, 0x51E6, 0x8F89, 0x521D, - 0x8F8A, 0x6240, 0x8F8B, 0x6691, 0x8F8C, 0x66D9, 0x8F8D, 0x6E1A, - 0x8F8E, 0x5EB6, 0x8F8F, 0x7DD2, 0x8F90, 0x7F72, 0x8F91, 0x66F8, - 0x8F92, 0x85AF, 0x8F93, 0x85F7, 0x8F94, 0x8AF8, 0x8F95, 0x52A9, - 0x8F96, 0x53D9, 0x8F97, 0x5973, 0x8F98, 0x5E8F, 0x8F99, 0x5F90, - 0x8F9A, 0x6055, 0x8F9B, 0x92E4, 0x8F9C, 0x9664, 0x8F9D, 0x50B7, - 0x8F9E, 0x511F, 0x8F9F, 0x52DD, 0x8FA0, 0x5320, 0x8FA1, 0x5347, - 0x8FA2, 0x53EC, 0x8FA3, 0x54E8, 0x8FA4, 0x5546, 0x8FA5, 0x5531, - 0x8FA6, 0x5617, 0x8FA7, 0x5968, 0x8FA8, 0x59BE, 0x8FA9, 0x5A3C, - 0x8FAA, 0x5BB5, 0x8FAB, 0x5C06, 0x8FAC, 0x5C0F, 0x8FAD, 0x5C11, - 0x8FAE, 0x5C1A, 0x8FAF, 0x5E84, 0x8FB0, 0x5E8A, 0x8FB1, 0x5EE0, - 0x8FB2, 0x5F70, 0x8FB3, 0x627F, 0x8FB4, 0x6284, 0x8FB5, 0x62DB, - 0x8FB6, 0x638C, 0x8FB7, 0x6377, 0x8FB8, 0x6607, 0x8FB9, 0x660C, - 0x8FBA, 0x662D, 0x8FBB, 0x6676, 0x8FBC, 0x677E, 0x8FBD, 0x68A2, - 0x8FBE, 0x6A1F, 0x8FBF, 0x6A35, 0x8FC0, 0x6CBC, 0x8FC1, 0x6D88, - 0x8FC2, 0x6E09, 0x8FC3, 0x6E58, 0x8FC4, 0x713C, 0x8FC5, 0x7126, - 0x8FC6, 0x7167, 0x8FC7, 0x75C7, 0x8FC8, 0x7701, 0x8FC9, 0x785D, - 0x8FCA, 0x7901, 0x8FCB, 0x7965, 0x8FCC, 0x79F0, 0x8FCD, 0x7AE0, - 0x8FCE, 0x7B11, 0x8FCF, 0x7CA7, 0x8FD0, 0x7D39, 0x8FD1, 0x8096, - 0x8FD2, 0x83D6, 0x8FD3, 0x848B, 0x8FD4, 0x8549, 0x8FD5, 0x885D, - 0x8FD6, 0x88F3, 0x8FD7, 0x8A1F, 0x8FD8, 0x8A3C, 0x8FD9, 0x8A54, - 0x8FDA, 0x8A73, 0x8FDB, 0x8C61, 0x8FDC, 0x8CDE, 0x8FDD, 0x91A4, - 0x8FDE, 0x9266, 0x8FDF, 0x937E, 0x8FE0, 0x9418, 0x8FE1, 0x969C, - 0x8FE2, 0x9798, 0x8FE3, 0x4E0A, 0x8FE4, 0x4E08, 0x8FE5, 0x4E1E, - 0x8FE6, 0x4E57, 0x8FE7, 0x5197, 0x8FE8, 0x5270, 0x8FE9, 0x57CE, - 0x8FEA, 0x5834, 0x8FEB, 0x58CC, 0x8FEC, 0x5B22, 0x8FED, 0x5E38, - 0x8FEE, 0x60C5, 0x8FEF, 0x64FE, 0x8FF0, 0x6761, 0x8FF1, 0x6756, - 0x8FF2, 0x6D44, 0x8FF3, 0x72B6, 0x8FF4, 0x7573, 0x8FF5, 0x7A63, - 0x8FF6, 0x84B8, 0x8FF7, 0x8B72, 0x8FF8, 0x91B8, 0x8FF9, 0x9320, - 0x8FFA, 0x5631, 0x8FFB, 0x57F4, 0x8FFC, 0x98FE, 0x9040, 0x62ED, - 0x9041, 0x690D, 0x9042, 0x6B96, 0x9043, 0x71ED, 0x9044, 0x7E54, - 0x9045, 0x8077, 0x9046, 0x8272, 0x9047, 0x89E6, 0x9048, 0x98DF, - 0x9049, 0x8755, 0x904A, 0x8FB1, 0x904B, 0x5C3B, 0x904C, 0x4F38, - 0x904D, 0x4FE1, 0x904E, 0x4FB5, 0x904F, 0x5507, 0x9050, 0x5A20, - 0x9051, 0x5BDD, 0x9052, 0x5BE9, 0x9053, 0x5FC3, 0x9054, 0x614E, - 0x9055, 0x632F, 0x9056, 0x65B0, 0x9057, 0x664B, 0x9058, 0x68EE, - 0x9059, 0x699B, 0x905A, 0x6D78, 0x905B, 0x6DF1, 0x905C, 0x7533, - 0x905D, 0x75B9, 0x905E, 0x771F, 0x905F, 0x795E, 0x9060, 0x79E6, - 0x9061, 0x7D33, 0x9062, 0x81E3, 0x9063, 0x82AF, 0x9064, 0x85AA, - 0x9065, 0x89AA, 0x9066, 0x8A3A, 0x9067, 0x8EAB, 0x9068, 0x8F9B, - 0x9069, 0x9032, 0x906A, 0x91DD, 0x906B, 0x9707, 0x906C, 0x4EBA, - 0x906D, 0x4EC1, 0x906E, 0x5203, 0x906F, 0x5875, 0x9070, 0x58EC, - 0x9071, 0x5C0B, 0x9072, 0x751A, 0x9073, 0x5C3D, 0x9074, 0x814E, - 0x9075, 0x8A0A, 0x9076, 0x8FC5, 0x9077, 0x9663, 0x9078, 0x976D, - 0x9079, 0x7B25, 0x907A, 0x8ACF, 0x907B, 0x9808, 0x907C, 0x9162, - 0x907D, 0x56F3, 0x907E, 0x53A8, 0x9080, 0x9017, 0x9081, 0x5439, - 0x9082, 0x5782, 0x9083, 0x5E25, 0x9084, 0x63A8, 0x9085, 0x6C34, - 0x9086, 0x708A, 0x9087, 0x7761, 0x9088, 0x7C8B, 0x9089, 0x7FE0, - 0x908A, 0x8870, 0x908B, 0x9042, 0x908C, 0x9154, 0x908D, 0x9310, - 0x908E, 0x9318, 0x908F, 0x968F, 0x9090, 0x745E, 0x9091, 0x9AC4, - 0x9092, 0x5D07, 0x9093, 0x5D69, 0x9094, 0x6570, 0x9095, 0x67A2, - 0x9096, 0x8DA8, 0x9097, 0x96DB, 0x9098, 0x636E, 0x9099, 0x6749, - 0x909A, 0x6919, 0x909B, 0x83C5, 0x909C, 0x9817, 0x909D, 0x96C0, - 0x909E, 0x88FE, 0x909F, 0x6F84, 0x90A0, 0x647A, 0x90A1, 0x5BF8, - 0x90A2, 0x4E16, 0x90A3, 0x702C, 0x90A4, 0x755D, 0x90A5, 0x662F, - 0x90A6, 0x51C4, 0x90A7, 0x5236, 0x90A8, 0x52E2, 0x90A9, 0x59D3, - 0x90AA, 0x5F81, 0x90AB, 0x6027, 0x90AC, 0x6210, 0x90AD, 0x653F, - 0x90AE, 0x6574, 0x90AF, 0x661F, 0x90B0, 0x6674, 0x90B1, 0x68F2, - 0x90B2, 0x6816, 0x90B3, 0x6B63, 0x90B4, 0x6E05, 0x90B5, 0x7272, - 0x90B6, 0x751F, 0x90B7, 0x76DB, 0x90B8, 0x7CBE, 0x90B9, 0x8056, - 0x90BA, 0x58F0, 0x90BB, 0x88FD, 0x90BC, 0x897F, 0x90BD, 0x8AA0, - 0x90BE, 0x8A93, 0x90BF, 0x8ACB, 0x90C0, 0x901D, 0x90C1, 0x9192, - 0x90C2, 0x9752, 0x90C3, 0x9759, 0x90C4, 0x6589, 0x90C5, 0x7A0E, - 0x90C6, 0x8106, 0x90C7, 0x96BB, 0x90C8, 0x5E2D, 0x90C9, 0x60DC, - 0x90CA, 0x621A, 0x90CB, 0x65A5, 0x90CC, 0x6614, 0x90CD, 0x6790, - 0x90CE, 0x77F3, 0x90CF, 0x7A4D, 0x90D0, 0x7C4D, 0x90D1, 0x7E3E, - 0x90D2, 0x810A, 0x90D3, 0x8CAC, 0x90D4, 0x8D64, 0x90D5, 0x8DE1, - 0x90D6, 0x8E5F, 0x90D7, 0x78A9, 0x90D8, 0x5207, 0x90D9, 0x62D9, - 0x90DA, 0x63A5, 0x90DB, 0x6442, 0x90DC, 0x6298, 0x90DD, 0x8A2D, - 0x90DE, 0x7A83, 0x90DF, 0x7BC0, 0x90E0, 0x8AAC, 0x90E1, 0x96EA, - 0x90E2, 0x7D76, 0x90E3, 0x820C, 0x90E4, 0x8749, 0x90E5, 0x4ED9, - 0x90E6, 0x5148, 0x90E7, 0x5343, 0x90E8, 0x5360, 0x90E9, 0x5BA3, - 0x90EA, 0x5C02, 0x90EB, 0x5C16, 0x90EC, 0x5DDD, 0x90ED, 0x6226, - 0x90EE, 0x6247, 0x90EF, 0x64B0, 0x90F0, 0x6813, 0x90F1, 0x6834, - 0x90F2, 0x6CC9, 0x90F3, 0x6D45, 0x90F4, 0x6D17, 0x90F5, 0x67D3, - 0x90F6, 0x6F5C, 0x90F7, 0x714E, 0x90F8, 0x717D, 0x90F9, 0x65CB, - 0x90FA, 0x7A7F, 0x90FB, 0x7BAD, 0x90FC, 0x7DDA, 0x9140, 0x7E4A, - 0x9141, 0x7FA8, 0x9142, 0x817A, 0x9143, 0x821B, 0x9144, 0x8239, - 0x9145, 0x85A6, 0x9146, 0x8A6E, 0x9147, 0x8CCE, 0x9148, 0x8DF5, - 0x9149, 0x9078, 0x914A, 0x9077, 0x914B, 0x92AD, 0x914C, 0x9291, - 0x914D, 0x9583, 0x914E, 0x9BAE, 0x914F, 0x524D, 0x9150, 0x5584, - 0x9151, 0x6F38, 0x9152, 0x7136, 0x9153, 0x5168, 0x9154, 0x7985, - 0x9155, 0x7E55, 0x9156, 0x81B3, 0x9157, 0x7CCE, 0x9158, 0x564C, - 0x9159, 0x5851, 0x915A, 0x5CA8, 0x915B, 0x63AA, 0x915C, 0x66FE, - 0x915D, 0x66FD, 0x915E, 0x695A, 0x915F, 0x72D9, 0x9160, 0x758F, - 0x9161, 0x758E, 0x9162, 0x790E, 0x9163, 0x7956, 0x9164, 0x79DF, - 0x9165, 0x7C97, 0x9166, 0x7D20, 0x9167, 0x7D44, 0x9168, 0x8607, - 0x9169, 0x8A34, 0x916A, 0x963B, 0x916B, 0x9061, 0x916C, 0x9F20, - 0x916D, 0x50E7, 0x916E, 0x5275, 0x916F, 0x53CC, 0x9170, 0x53E2, - 0x9171, 0x5009, 0x9172, 0x55AA, 0x9173, 0x58EE, 0x9174, 0x594F, - 0x9175, 0x723D, 0x9176, 0x5B8B, 0x9177, 0x5C64, 0x9178, 0x531D, - 0x9179, 0x60E3, 0x917A, 0x60F3, 0x917B, 0x635C, 0x917C, 0x6383, - 0x917D, 0x633F, 0x917E, 0x63BB, 0x9180, 0x64CD, 0x9181, 0x65E9, - 0x9182, 0x66F9, 0x9183, 0x5DE3, 0x9184, 0x69CD, 0x9185, 0x69FD, - 0x9186, 0x6F15, 0x9187, 0x71E5, 0x9188, 0x4E89, 0x9189, 0x75E9, - 0x918A, 0x76F8, 0x918B, 0x7A93, 0x918C, 0x7CDF, 0x918D, 0x7DCF, - 0x918E, 0x7D9C, 0x918F, 0x8061, 0x9190, 0x8349, 0x9191, 0x8358, - 0x9192, 0x846C, 0x9193, 0x84BC, 0x9194, 0x85FB, 0x9195, 0x88C5, - 0x9196, 0x8D70, 0x9197, 0x9001, 0x9198, 0x906D, 0x9199, 0x9397, - 0x919A, 0x971C, 0x919B, 0x9A12, 0x919C, 0x50CF, 0x919D, 0x5897, - 0x919E, 0x618E, 0x919F, 0x81D3, 0x91A0, 0x8535, 0x91A1, 0x8D08, - 0x91A2, 0x9020, 0x91A3, 0x4FC3, 0x91A4, 0x5074, 0x91A5, 0x5247, - 0x91A6, 0x5373, 0x91A7, 0x606F, 0x91A8, 0x6349, 0x91A9, 0x675F, - 0x91AA, 0x6E2C, 0x91AB, 0x8DB3, 0x91AC, 0x901F, 0x91AD, 0x4FD7, - 0x91AE, 0x5C5E, 0x91AF, 0x8CCA, 0x91B0, 0x65CF, 0x91B1, 0x7D9A, - 0x91B2, 0x5352, 0x91B3, 0x8896, 0x91B4, 0x5176, 0x91B5, 0x63C3, - 0x91B6, 0x5B58, 0x91B7, 0x5B6B, 0x91B8, 0x5C0A, 0x91B9, 0x640D, - 0x91BA, 0x6751, 0x91BB, 0x905C, 0x91BC, 0x4ED6, 0x91BD, 0x591A, - 0x91BE, 0x592A, 0x91BF, 0x6C70, 0x91C0, 0x8A51, 0x91C1, 0x553E, - 0x91C2, 0x5815, 0x91C3, 0x59A5, 0x91C4, 0x60F0, 0x91C5, 0x6253, - 0x91C6, 0x67C1, 0x91C7, 0x8235, 0x91C8, 0x6955, 0x91C9, 0x9640, - 0x91CA, 0x99C4, 0x91CB, 0x9A28, 0x91CC, 0x4F53, 0x91CD, 0x5806, - 0x91CE, 0x5BFE, 0x91CF, 0x8010, 0x91D0, 0x5CB1, 0x91D1, 0x5E2F, - 0x91D2, 0x5F85, 0x91D3, 0x6020, 0x91D4, 0x614B, 0x91D5, 0x6234, - 0x91D6, 0x66FF, 0x91D7, 0x6CF0, 0x91D8, 0x6EDE, 0x91D9, 0x80CE, - 0x91DA, 0x817F, 0x91DB, 0x82D4, 0x91DC, 0x888B, 0x91DD, 0x8CB8, - 0x91DE, 0x9000, 0x91DF, 0x902E, 0x91E0, 0x968A, 0x91E1, 0x9EDB, - 0x91E2, 0x9BDB, 0x91E3, 0x4EE3, 0x91E4, 0x53F0, 0x91E5, 0x5927, - 0x91E6, 0x7B2C, 0x91E7, 0x918D, 0x91E8, 0x984C, 0x91E9, 0x9DF9, - 0x91EA, 0x6EDD, 0x91EB, 0x7027, 0x91EC, 0x5353, 0x91ED, 0x5544, - 0x91EE, 0x5B85, 0x91EF, 0x6258, 0x91F0, 0x629E, 0x91F1, 0x62D3, - 0x91F2, 0x6CA2, 0x91F3, 0x6FEF, 0x91F4, 0x7422, 0x91F5, 0x8A17, - 0x91F6, 0x9438, 0x91F7, 0x6FC1, 0x91F8, 0x8AFE, 0x91F9, 0x8338, - 0x91FA, 0x51E7, 0x91FB, 0x86F8, 0x91FC, 0x53EA, 0x9240, 0x53E9, - 0x9241, 0x4F46, 0x9242, 0x9054, 0x9243, 0x8FB0, 0x9244, 0x596A, - 0x9245, 0x8131, 0x9246, 0x5DFD, 0x9247, 0x7AEA, 0x9248, 0x8FBF, - 0x9249, 0x68DA, 0x924A, 0x8C37, 0x924B, 0x72F8, 0x924C, 0x9C48, - 0x924D, 0x6A3D, 0x924E, 0x8AB0, 0x924F, 0x4E39, 0x9250, 0x5358, - 0x9251, 0x5606, 0x9252, 0x5766, 0x9253, 0x62C5, 0x9254, 0x63A2, - 0x9255, 0x65E6, 0x9256, 0x6B4E, 0x9257, 0x6DE1, 0x9258, 0x6E5B, - 0x9259, 0x70AD, 0x925A, 0x77ED, 0x925B, 0x7AEF, 0x925C, 0x7BAA, - 0x925D, 0x7DBB, 0x925E, 0x803D, 0x925F, 0x80C6, 0x9260, 0x86CB, - 0x9261, 0x8A95, 0x9262, 0x935B, 0x9263, 0x56E3, 0x9264, 0x58C7, - 0x9265, 0x5F3E, 0x9266, 0x65AD, 0x9267, 0x6696, 0x9268, 0x6A80, - 0x9269, 0x6BB5, 0x926A, 0x7537, 0x926B, 0x8AC7, 0x926C, 0x5024, - 0x926D, 0x77E5, 0x926E, 0x5730, 0x926F, 0x5F1B, 0x9270, 0x6065, - 0x9271, 0x667A, 0x9272, 0x6C60, 0x9273, 0x75F4, 0x9274, 0x7A1A, - 0x9275, 0x7F6E, 0x9276, 0x81F4, 0x9277, 0x8718, 0x9278, 0x9045, - 0x9279, 0x99B3, 0x927A, 0x7BC9, 0x927B, 0x755C, 0x927C, 0x7AF9, - 0x927D, 0x7B51, 0x927E, 0x84C4, 0x9280, 0x9010, 0x9281, 0x79E9, - 0x9282, 0x7A92, 0x9283, 0x8336, 0x9284, 0x5AE1, 0x9285, 0x7740, - 0x9286, 0x4E2D, 0x9287, 0x4EF2, 0x9288, 0x5B99, 0x9289, 0x5FE0, - 0x928A, 0x62BD, 0x928B, 0x663C, 0x928C, 0x67F1, 0x928D, 0x6CE8, - 0x928E, 0x866B, 0x928F, 0x8877, 0x9290, 0x8A3B, 0x9291, 0x914E, - 0x9292, 0x92F3, 0x9293, 0x99D0, 0x9294, 0x6A17, 0x9295, 0x7026, - 0x9296, 0x732A, 0x9297, 0x82E7, 0x9298, 0x8457, 0x9299, 0x8CAF, - 0x929A, 0x4E01, 0x929B, 0x5146, 0x929C, 0x51CB, 0x929D, 0x558B, - 0x929E, 0x5BF5, 0x929F, 0x5E16, 0x92A0, 0x5E33, 0x92A1, 0x5E81, - 0x92A2, 0x5F14, 0x92A3, 0x5F35, 0x92A4, 0x5F6B, 0x92A5, 0x5FB4, - 0x92A6, 0x61F2, 0x92A7, 0x6311, 0x92A8, 0x66A2, 0x92A9, 0x671D, - 0x92AA, 0x6F6E, 0x92AB, 0x7252, 0x92AC, 0x753A, 0x92AD, 0x773A, - 0x92AE, 0x8074, 0x92AF, 0x8139, 0x92B0, 0x8178, 0x92B1, 0x8776, - 0x92B2, 0x8ABF, 0x92B3, 0x8ADC, 0x92B4, 0x8D85, 0x92B5, 0x8DF3, - 0x92B6, 0x929A, 0x92B7, 0x9577, 0x92B8, 0x9802, 0x92B9, 0x9CE5, - 0x92BA, 0x52C5, 0x92BB, 0x6357, 0x92BC, 0x76F4, 0x92BD, 0x6715, - 0x92BE, 0x6C88, 0x92BF, 0x73CD, 0x92C0, 0x8CC3, 0x92C1, 0x93AE, - 0x92C2, 0x9673, 0x92C3, 0x6D25, 0x92C4, 0x589C, 0x92C5, 0x690E, - 0x92C6, 0x69CC, 0x92C7, 0x8FFD, 0x92C8, 0x939A, 0x92C9, 0x75DB, - 0x92CA, 0x901A, 0x92CB, 0x585A, 0x92CC, 0x6802, 0x92CD, 0x63B4, - 0x92CE, 0x69FB, 0x92CF, 0x4F43, 0x92D0, 0x6F2C, 0x92D1, 0x67D8, - 0x92D2, 0x8FBB, 0x92D3, 0x8526, 0x92D4, 0x7DB4, 0x92D5, 0x9354, - 0x92D6, 0x693F, 0x92D7, 0x6F70, 0x92D8, 0x576A, 0x92D9, 0x58F7, - 0x92DA, 0x5B2C, 0x92DB, 0x7D2C, 0x92DC, 0x722A, 0x92DD, 0x540A, - 0x92DE, 0x91E3, 0x92DF, 0x9DB4, 0x92E0, 0x4EAD, 0x92E1, 0x4F4E, - 0x92E2, 0x505C, 0x92E3, 0x5075, 0x92E4, 0x5243, 0x92E5, 0x8C9E, - 0x92E6, 0x5448, 0x92E7, 0x5824, 0x92E8, 0x5B9A, 0x92E9, 0x5E1D, - 0x92EA, 0x5E95, 0x92EB, 0x5EAD, 0x92EC, 0x5EF7, 0x92ED, 0x5F1F, - 0x92EE, 0x608C, 0x92EF, 0x62B5, 0x92F0, 0x633A, 0x92F1, 0x63D0, - 0x92F2, 0x68AF, 0x92F3, 0x6C40, 0x92F4, 0x7887, 0x92F5, 0x798E, - 0x92F6, 0x7A0B, 0x92F7, 0x7DE0, 0x92F8, 0x8247, 0x92F9, 0x8A02, - 0x92FA, 0x8AE6, 0x92FB, 0x8E44, 0x92FC, 0x9013, 0x9340, 0x90B8, - 0x9341, 0x912D, 0x9342, 0x91D8, 0x9343, 0x9F0E, 0x9344, 0x6CE5, - 0x9345, 0x6458, 0x9346, 0x64E2, 0x9347, 0x6575, 0x9348, 0x6EF4, - 0x9349, 0x7684, 0x934A, 0x7B1B, 0x934B, 0x9069, 0x934C, 0x93D1, - 0x934D, 0x6EBA, 0x934E, 0x54F2, 0x934F, 0x5FB9, 0x9350, 0x64A4, - 0x9351, 0x8F4D, 0x9352, 0x8FED, 0x9353, 0x9244, 0x9354, 0x5178, - 0x9355, 0x586B, 0x9356, 0x5929, 0x9357, 0x5C55, 0x9358, 0x5E97, - 0x9359, 0x6DFB, 0x935A, 0x7E8F, 0x935B, 0x751C, 0x935C, 0x8CBC, - 0x935D, 0x8EE2, 0x935E, 0x985B, 0x935F, 0x70B9, 0x9360, 0x4F1D, - 0x9361, 0x6BBF, 0x9362, 0x6FB1, 0x9363, 0x7530, 0x9364, 0x96FB, - 0x9365, 0x514E, 0x9366, 0x5410, 0x9367, 0x5835, 0x9368, 0x5857, - 0x9369, 0x59AC, 0x936A, 0x5C60, 0x936B, 0x5F92, 0x936C, 0x6597, - 0x936D, 0x675C, 0x936E, 0x6E21, 0x936F, 0x767B, 0x9370, 0x83DF, - 0x9371, 0x8CED, 0x9372, 0x9014, 0x9373, 0x90FD, 0x9374, 0x934D, - 0x9375, 0x7825, 0x9376, 0x783A, 0x9377, 0x52AA, 0x9378, 0x5EA6, - 0x9379, 0x571F, 0x937A, 0x5974, 0x937B, 0x6012, 0x937C, 0x5012, - 0x937D, 0x515A, 0x937E, 0x51AC, 0x9380, 0x51CD, 0x9381, 0x5200, - 0x9382, 0x5510, 0x9383, 0x5854, 0x9384, 0x5858, 0x9385, 0x5957, - 0x9386, 0x5B95, 0x9387, 0x5CF6, 0x9388, 0x5D8B, 0x9389, 0x60BC, - 0x938A, 0x6295, 0x938B, 0x642D, 0x938C, 0x6771, 0x938D, 0x6843, - 0x938E, 0x68BC, 0x938F, 0x68DF, 0x9390, 0x76D7, 0x9391, 0x6DD8, - 0x9392, 0x6E6F, 0x9393, 0x6D9B, 0x9394, 0x706F, 0x9395, 0x71C8, - 0x9396, 0x5F53, 0x9397, 0x75D8, 0x9398, 0x7977, 0x9399, 0x7B49, - 0x939A, 0x7B54, 0x939B, 0x7B52, 0x939C, 0x7CD6, 0x939D, 0x7D71, - 0x939E, 0x5230, 0x939F, 0x8463, 0x93A0, 0x8569, 0x93A1, 0x85E4, - 0x93A2, 0x8A0E, 0x93A3, 0x8B04, 0x93A4, 0x8C46, 0x93A5, 0x8E0F, - 0x93A6, 0x9003, 0x93A7, 0x900F, 0x93A8, 0x9419, 0x93A9, 0x9676, - 0x93AA, 0x982D, 0x93AB, 0x9A30, 0x93AC, 0x95D8, 0x93AD, 0x50CD, - 0x93AE, 0x52D5, 0x93AF, 0x540C, 0x93B0, 0x5802, 0x93B1, 0x5C0E, - 0x93B2, 0x61A7, 0x93B3, 0x649E, 0x93B4, 0x6D1E, 0x93B5, 0x77B3, - 0x93B6, 0x7AE5, 0x93B7, 0x80F4, 0x93B8, 0x8404, 0x93B9, 0x9053, - 0x93BA, 0x9285, 0x93BB, 0x5CE0, 0x93BC, 0x9D07, 0x93BD, 0x533F, - 0x93BE, 0x5F97, 0x93BF, 0x5FB3, 0x93C0, 0x6D9C, 0x93C1, 0x7279, - 0x93C2, 0x7763, 0x93C3, 0x79BF, 0x93C4, 0x7BE4, 0x93C5, 0x6BD2, - 0x93C6, 0x72EC, 0x93C7, 0x8AAD, 0x93C8, 0x6803, 0x93C9, 0x6A61, - 0x93CA, 0x51F8, 0x93CB, 0x7A81, 0x93CC, 0x6934, 0x93CD, 0x5C4A, - 0x93CE, 0x9CF6, 0x93CF, 0x82EB, 0x93D0, 0x5BC5, 0x93D1, 0x9149, - 0x93D2, 0x701E, 0x93D3, 0x5678, 0x93D4, 0x5C6F, 0x93D5, 0x60C7, - 0x93D6, 0x6566, 0x93D7, 0x6C8C, 0x93D8, 0x8C5A, 0x93D9, 0x9041, - 0x93DA, 0x9813, 0x93DB, 0x5451, 0x93DC, 0x66C7, 0x93DD, 0x920D, - 0x93DE, 0x5948, 0x93DF, 0x90A3, 0x93E0, 0x5185, 0x93E1, 0x4E4D, - 0x93E2, 0x51EA, 0x93E3, 0x8599, 0x93E4, 0x8B0E, 0x93E5, 0x7058, - 0x93E6, 0x637A, 0x93E7, 0x934B, 0x93E8, 0x6962, 0x93E9, 0x99B4, - 0x93EA, 0x7E04, 0x93EB, 0x7577, 0x93EC, 0x5357, 0x93ED, 0x6960, - 0x93EE, 0x8EDF, 0x93EF, 0x96E3, 0x93F0, 0x6C5D, 0x93F1, 0x4E8C, - 0x93F2, 0x5C3C, 0x93F3, 0x5F10, 0x93F4, 0x8FE9, 0x93F5, 0x5302, - 0x93F6, 0x8CD1, 0x93F7, 0x8089, 0x93F8, 0x8679, 0x93F9, 0x5EFF, - 0x93FA, 0x65E5, 0x93FB, 0x4E73, 0x93FC, 0x5165, 0x9440, 0x5982, - 0x9441, 0x5C3F, 0x9442, 0x97EE, 0x9443, 0x4EFB, 0x9444, 0x598A, - 0x9445, 0x5FCD, 0x9446, 0x8A8D, 0x9447, 0x6FE1, 0x9448, 0x79B0, - 0x9449, 0x7962, 0x944A, 0x5BE7, 0x944B, 0x8471, 0x944C, 0x732B, - 0x944D, 0x71B1, 0x944E, 0x5E74, 0x944F, 0x5FF5, 0x9450, 0x637B, - 0x9451, 0x649A, 0x9452, 0x71C3, 0x9453, 0x7C98, 0x9454, 0x4E43, - 0x9455, 0x5EFC, 0x9456, 0x4E4B, 0x9457, 0x57DC, 0x9458, 0x56A2, - 0x9459, 0x60A9, 0x945A, 0x6FC3, 0x945B, 0x7D0D, 0x945C, 0x80FD, - 0x945D, 0x8133, 0x945E, 0x81BF, 0x945F, 0x8FB2, 0x9460, 0x8997, - 0x9461, 0x86A4, 0x9462, 0x5DF4, 0x9463, 0x628A, 0x9464, 0x64AD, - 0x9465, 0x8987, 0x9466, 0x6777, 0x9467, 0x6CE2, 0x9468, 0x6D3E, - 0x9469, 0x7436, 0x946A, 0x7834, 0x946B, 0x5A46, 0x946C, 0x7F75, - 0x946D, 0x82AD, 0x946E, 0x99AC, 0x946F, 0x4FF3, 0x9470, 0x5EC3, - 0x9471, 0x62DD, 0x9472, 0x6392, 0x9473, 0x6557, 0x9474, 0x676F, - 0x9475, 0x76C3, 0x9476, 0x724C, 0x9477, 0x80CC, 0x9478, 0x80BA, - 0x9479, 0x8F29, 0x947A, 0x914D, 0x947B, 0x500D, 0x947C, 0x57F9, - 0x947D, 0x5A92, 0x947E, 0x6885, 0x9480, 0x6973, 0x9481, 0x7164, - 0x9482, 0x72FD, 0x9483, 0x8CB7, 0x9484, 0x58F2, 0x9485, 0x8CE0, - 0x9486, 0x966A, 0x9487, 0x9019, 0x9488, 0x877F, 0x9489, 0x79E4, - 0x948A, 0x77E7, 0x948B, 0x8429, 0x948C, 0x4F2F, 0x948D, 0x5265, - 0x948E, 0x535A, 0x948F, 0x62CD, 0x9490, 0x67CF, 0x9491, 0x6CCA, - 0x9492, 0x767D, 0x9493, 0x7B94, 0x9494, 0x7C95, 0x9495, 0x8236, - 0x9496, 0x8584, 0x9497, 0x8FEB, 0x9498, 0x66DD, 0x9499, 0x6F20, - 0x949A, 0x7206, 0x949B, 0x7E1B, 0x949C, 0x83AB, 0x949D, 0x99C1, - 0x949E, 0x9EA6, 0x949F, 0x51FD, 0x94A0, 0x7BB1, 0x94A1, 0x7872, - 0x94A2, 0x7BB8, 0x94A3, 0x8087, 0x94A4, 0x7B48, 0x94A5, 0x6AE8, - 0x94A6, 0x5E61, 0x94A7, 0x808C, 0x94A8, 0x7551, 0x94A9, 0x7560, - 0x94AA, 0x516B, 0x94AB, 0x9262, 0x94AC, 0x6E8C, 0x94AD, 0x767A, - 0x94AE, 0x9197, 0x94AF, 0x9AEA, 0x94B0, 0x4F10, 0x94B1, 0x7F70, - 0x94B2, 0x629C, 0x94B3, 0x7B4F, 0x94B4, 0x95A5, 0x94B5, 0x9CE9, - 0x94B6, 0x567A, 0x94B7, 0x5859, 0x94B8, 0x86E4, 0x94B9, 0x96BC, - 0x94BA, 0x4F34, 0x94BB, 0x5224, 0x94BC, 0x534A, 0x94BD, 0x53CD, - 0x94BE, 0x53DB, 0x94BF, 0x5E06, 0x94C0, 0x642C, 0x94C1, 0x6591, - 0x94C2, 0x677F, 0x94C3, 0x6C3E, 0x94C4, 0x6C4E, 0x94C5, 0x7248, - 0x94C6, 0x72AF, 0x94C7, 0x73ED, 0x94C8, 0x7554, 0x94C9, 0x7E41, - 0x94CA, 0x822C, 0x94CB, 0x85E9, 0x94CC, 0x8CA9, 0x94CD, 0x7BC4, - 0x94CE, 0x91C6, 0x94CF, 0x7169, 0x94D0, 0x9812, 0x94D1, 0x98EF, - 0x94D2, 0x633D, 0x94D3, 0x6669, 0x94D4, 0x756A, 0x94D5, 0x76E4, - 0x94D6, 0x78D0, 0x94D7, 0x8543, 0x94D8, 0x86EE, 0x94D9, 0x532A, - 0x94DA, 0x5351, 0x94DB, 0x5426, 0x94DC, 0x5983, 0x94DD, 0x5E87, - 0x94DE, 0x5F7C, 0x94DF, 0x60B2, 0x94E0, 0x6249, 0x94E1, 0x6279, - 0x94E2, 0x62AB, 0x94E3, 0x6590, 0x94E4, 0x6BD4, 0x94E5, 0x6CCC, - 0x94E6, 0x75B2, 0x94E7, 0x76AE, 0x94E8, 0x7891, 0x94E9, 0x79D8, - 0x94EA, 0x7DCB, 0x94EB, 0x7F77, 0x94EC, 0x80A5, 0x94ED, 0x88AB, - 0x94EE, 0x8AB9, 0x94EF, 0x8CBB, 0x94F0, 0x907F, 0x94F1, 0x975E, - 0x94F2, 0x98DB, 0x94F3, 0x6A0B, 0x94F4, 0x7C38, 0x94F5, 0x5099, - 0x94F6, 0x5C3E, 0x94F7, 0x5FAE, 0x94F8, 0x6787, 0x94F9, 0x6BD8, - 0x94FA, 0x7435, 0x94FB, 0x7709, 0x94FC, 0x7F8E, 0x9540, 0x9F3B, - 0x9541, 0x67CA, 0x9542, 0x7A17, 0x9543, 0x5339, 0x9544, 0x758B, - 0x9545, 0x9AED, 0x9546, 0x5F66, 0x9547, 0x819D, 0x9548, 0x83F1, - 0x9549, 0x8098, 0x954A, 0x5F3C, 0x954B, 0x5FC5, 0x954C, 0x7562, - 0x954D, 0x7B46, 0x954E, 0x903C, 0x954F, 0x6867, 0x9550, 0x59EB, - 0x9551, 0x5A9B, 0x9552, 0x7D10, 0x9553, 0x767E, 0x9554, 0x8B2C, - 0x9555, 0x4FF5, 0x9556, 0x5F6A, 0x9557, 0x6A19, 0x9558, 0x6C37, - 0x9559, 0x6F02, 0x955A, 0x74E2, 0x955B, 0x7968, 0x955C, 0x8868, - 0x955D, 0x8A55, 0x955E, 0x8C79, 0x955F, 0x5EDF, 0x9560, 0x63CF, - 0x9561, 0x75C5, 0x9562, 0x79D2, 0x9563, 0x82D7, 0x9564, 0x9328, - 0x9565, 0x92F2, 0x9566, 0x849C, 0x9567, 0x86ED, 0x9568, 0x9C2D, - 0x9569, 0x54C1, 0x956A, 0x5F6C, 0x956B, 0x658C, 0x956C, 0x6D5C, - 0x956D, 0x7015, 0x956E, 0x8CA7, 0x956F, 0x8CD3, 0x9570, 0x983B, - 0x9571, 0x654F, 0x9572, 0x74F6, 0x9573, 0x4E0D, 0x9574, 0x4ED8, - 0x9575, 0x57E0, 0x9576, 0x592B, 0x9577, 0x5A66, 0x9578, 0x5BCC, - 0x9579, 0x51A8, 0x957A, 0x5E03, 0x957B, 0x5E9C, 0x957C, 0x6016, - 0x957D, 0x6276, 0x957E, 0x6577, 0x9580, 0x65A7, 0x9581, 0x666E, - 0x9582, 0x6D6E, 0x9583, 0x7236, 0x9584, 0x7B26, 0x9585, 0x8150, - 0x9586, 0x819A, 0x9587, 0x8299, 0x9588, 0x8B5C, 0x9589, 0x8CA0, - 0x958A, 0x8CE6, 0x958B, 0x8D74, 0x958C, 0x961C, 0x958D, 0x9644, - 0x958E, 0x4FAE, 0x958F, 0x64AB, 0x9590, 0x6B66, 0x9591, 0x821E, - 0x9592, 0x8461, 0x9593, 0x856A, 0x9594, 0x90E8, 0x9595, 0x5C01, - 0x9596, 0x6953, 0x9597, 0x98A8, 0x9598, 0x847A, 0x9599, 0x8557, - 0x959A, 0x4F0F, 0x959B, 0x526F, 0x959C, 0x5FA9, 0x959D, 0x5E45, - 0x959E, 0x670D, 0x959F, 0x798F, 0x95A0, 0x8179, 0x95A1, 0x8907, - 0x95A2, 0x8986, 0x95A3, 0x6DF5, 0x95A4, 0x5F17, 0x95A5, 0x6255, - 0x95A6, 0x6CB8, 0x95A7, 0x4ECF, 0x95A8, 0x7269, 0x95A9, 0x9B92, - 0x95AA, 0x5206, 0x95AB, 0x543B, 0x95AC, 0x5674, 0x95AD, 0x58B3, - 0x95AE, 0x61A4, 0x95AF, 0x626E, 0x95B0, 0x711A, 0x95B1, 0x596E, - 0x95B2, 0x7C89, 0x95B3, 0x7CDE, 0x95B4, 0x7D1B, 0x95B5, 0x96F0, - 0x95B6, 0x6587, 0x95B7, 0x805E, 0x95B8, 0x4E19, 0x95B9, 0x4F75, - 0x95BA, 0x5175, 0x95BB, 0x5840, 0x95BC, 0x5E63, 0x95BD, 0x5E73, - 0x95BE, 0x5F0A, 0x95BF, 0x67C4, 0x95C0, 0x4E26, 0x95C1, 0x853D, - 0x95C2, 0x9589, 0x95C3, 0x965B, 0x95C4, 0x7C73, 0x95C5, 0x9801, - 0x95C6, 0x50FB, 0x95C7, 0x58C1, 0x95C8, 0x7656, 0x95C9, 0x78A7, - 0x95CA, 0x5225, 0x95CB, 0x77A5, 0x95CC, 0x8511, 0x95CD, 0x7B86, - 0x95CE, 0x504F, 0x95CF, 0x5909, 0x95D0, 0x7247, 0x95D1, 0x7BC7, - 0x95D2, 0x7DE8, 0x95D3, 0x8FBA, 0x95D4, 0x8FD4, 0x95D5, 0x904D, - 0x95D6, 0x4FBF, 0x95D7, 0x52C9, 0x95D8, 0x5A29, 0x95D9, 0x5F01, - 0x95DA, 0x97AD, 0x95DB, 0x4FDD, 0x95DC, 0x8217, 0x95DD, 0x92EA, - 0x95DE, 0x5703, 0x95DF, 0x6355, 0x95E0, 0x6B69, 0x95E1, 0x752B, - 0x95E2, 0x88DC, 0x95E3, 0x8F14, 0x95E4, 0x7A42, 0x95E5, 0x52DF, - 0x95E6, 0x5893, 0x95E7, 0x6155, 0x95E8, 0x620A, 0x95E9, 0x66AE, - 0x95EA, 0x6BCD, 0x95EB, 0x7C3F, 0x95EC, 0x83E9, 0x95ED, 0x5023, - 0x95EE, 0x4FF8, 0x95EF, 0x5305, 0x95F0, 0x5446, 0x95F1, 0x5831, - 0x95F2, 0x5949, 0x95F3, 0x5B9D, 0x95F4, 0x5CF0, 0x95F5, 0x5CEF, - 0x95F6, 0x5D29, 0x95F7, 0x5E96, 0x95F8, 0x62B1, 0x95F9, 0x6367, - 0x95FA, 0x653E, 0x95FB, 0x65B9, 0x95FC, 0x670B, 0x9640, 0x6CD5, - 0x9641, 0x6CE1, 0x9642, 0x70F9, 0x9643, 0x7832, 0x9644, 0x7E2B, - 0x9645, 0x80DE, 0x9646, 0x82B3, 0x9647, 0x840C, 0x9648, 0x84EC, - 0x9649, 0x8702, 0x964A, 0x8912, 0x964B, 0x8A2A, 0x964C, 0x8C4A, - 0x964D, 0x90A6, 0x964E, 0x92D2, 0x964F, 0x98FD, 0x9650, 0x9CF3, - 0x9651, 0x9D6C, 0x9652, 0x4E4F, 0x9653, 0x4EA1, 0x9654, 0x508D, - 0x9655, 0x5256, 0x9656, 0x574A, 0x9657, 0x59A8, 0x9658, 0x5E3D, - 0x9659, 0x5FD8, 0x965A, 0x5FD9, 0x965B, 0x623F, 0x965C, 0x66B4, - 0x965D, 0x671B, 0x965E, 0x67D0, 0x965F, 0x68D2, 0x9660, 0x5192, - 0x9661, 0x7D21, 0x9662, 0x80AA, 0x9663, 0x81A8, 0x9664, 0x8B00, - 0x9665, 0x8C8C, 0x9666, 0x8CBF, 0x9667, 0x927E, 0x9668, 0x9632, - 0x9669, 0x5420, 0x966A, 0x982C, 0x966B, 0x5317, 0x966C, 0x50D5, - 0x966D, 0x535C, 0x966E, 0x58A8, 0x966F, 0x64B2, 0x9670, 0x6734, - 0x9671, 0x7267, 0x9672, 0x7766, 0x9673, 0x7A46, 0x9674, 0x91E6, - 0x9675, 0x52C3, 0x9676, 0x6CA1, 0x9677, 0x6B86, 0x9678, 0x5800, - 0x9679, 0x5E4C, 0x967A, 0x5954, 0x967B, 0x672C, 0x967C, 0x7FFB, - 0x967D, 0x51E1, 0x967E, 0x76C6, 0x9680, 0x6469, 0x9681, 0x78E8, - 0x9682, 0x9B54, 0x9683, 0x9EBB, 0x9684, 0x57CB, 0x9685, 0x59B9, - 0x9686, 0x6627, 0x9687, 0x679A, 0x9688, 0x6BCE, 0x9689, 0x54E9, - 0x968A, 0x69D9, 0x968B, 0x5E55, 0x968C, 0x819C, 0x968D, 0x6795, - 0x968E, 0x9BAA, 0x968F, 0x67FE, 0x9690, 0x9C52, 0x9691, 0x685D, - 0x9692, 0x4EA6, 0x9693, 0x4FE3, 0x9694, 0x53C8, 0x9695, 0x62B9, - 0x9696, 0x672B, 0x9697, 0x6CAB, 0x9698, 0x8FC4, 0x9699, 0x4FAD, - 0x969A, 0x7E6D, 0x969B, 0x9EBF, 0x969C, 0x4E07, 0x969D, 0x6162, - 0x969E, 0x6E80, 0x969F, 0x6F2B, 0x96A0, 0x8513, 0x96A1, 0x5473, - 0x96A2, 0x672A, 0x96A3, 0x9B45, 0x96A4, 0x5DF3, 0x96A5, 0x7B95, - 0x96A6, 0x5CAC, 0x96A7, 0x5BC6, 0x96A8, 0x871C, 0x96A9, 0x6E4A, - 0x96AA, 0x84D1, 0x96AB, 0x7A14, 0x96AC, 0x8108, 0x96AD, 0x5999, - 0x96AE, 0x7C8D, 0x96AF, 0x6C11, 0x96B0, 0x7720, 0x96B1, 0x52D9, - 0x96B2, 0x5922, 0x96B3, 0x7121, 0x96B4, 0x725F, 0x96B5, 0x77DB, - 0x96B6, 0x9727, 0x96B7, 0x9D61, 0x96B8, 0x690B, 0x96B9, 0x5A7F, - 0x96BA, 0x5A18, 0x96BB, 0x51A5, 0x96BC, 0x540D, 0x96BD, 0x547D, - 0x96BE, 0x660E, 0x96BF, 0x76DF, 0x96C0, 0x8FF7, 0x96C1, 0x9298, - 0x96C2, 0x9CF4, 0x96C3, 0x59EA, 0x96C4, 0x725D, 0x96C5, 0x6EC5, - 0x96C6, 0x514D, 0x96C7, 0x68C9, 0x96C8, 0x7DBF, 0x96C9, 0x7DEC, - 0x96CA, 0x9762, 0x96CB, 0x9EBA, 0x96CC, 0x6478, 0x96CD, 0x6A21, - 0x96CE, 0x8302, 0x96CF, 0x5984, 0x96D0, 0x5B5F, 0x96D1, 0x6BDB, - 0x96D2, 0x731B, 0x96D3, 0x76F2, 0x96D4, 0x7DB2, 0x96D5, 0x8017, - 0x96D6, 0x8499, 0x96D7, 0x5132, 0x96D8, 0x6728, 0x96D9, 0x9ED9, - 0x96DA, 0x76EE, 0x96DB, 0x6762, 0x96DC, 0x52FF, 0x96DD, 0x9905, - 0x96DE, 0x5C24, 0x96DF, 0x623B, 0x96E0, 0x7C7E, 0x96E1, 0x8CB0, - 0x96E2, 0x554F, 0x96E3, 0x60B6, 0x96E4, 0x7D0B, 0x96E5, 0x9580, - 0x96E6, 0x5301, 0x96E7, 0x4E5F, 0x96E8, 0x51B6, 0x96E9, 0x591C, - 0x96EA, 0x723A, 0x96EB, 0x8036, 0x96EC, 0x91CE, 0x96ED, 0x5F25, - 0x96EE, 0x77E2, 0x96EF, 0x5384, 0x96F0, 0x5F79, 0x96F1, 0x7D04, - 0x96F2, 0x85AC, 0x96F3, 0x8A33, 0x96F4, 0x8E8D, 0x96F5, 0x9756, - 0x96F6, 0x67F3, 0x96F7, 0x85AE, 0x96F8, 0x9453, 0x96F9, 0x6109, - 0x96FA, 0x6108, 0x96FB, 0x6CB9, 0x96FC, 0x7652, 0x9740, 0x8AED, - 0x9741, 0x8F38, 0x9742, 0x552F, 0x9743, 0x4F51, 0x9744, 0x512A, - 0x9745, 0x52C7, 0x9746, 0x53CB, 0x9747, 0x5BA5, 0x9748, 0x5E7D, - 0x9749, 0x60A0, 0x974A, 0x6182, 0x974B, 0x63D6, 0x974C, 0x6709, - 0x974D, 0x67DA, 0x974E, 0x6E67, 0x974F, 0x6D8C, 0x9750, 0x7336, - 0x9751, 0x7337, 0x9752, 0x7531, 0x9753, 0x7950, 0x9754, 0x88D5, - 0x9755, 0x8A98, 0x9756, 0x904A, 0x9757, 0x9091, 0x9758, 0x90F5, - 0x9759, 0x96C4, 0x975A, 0x878D, 0x975B, 0x5915, 0x975C, 0x4E88, - 0x975D, 0x4F59, 0x975E, 0x4E0E, 0x975F, 0x8A89, 0x9760, 0x8F3F, - 0x9761, 0x9810, 0x9762, 0x50AD, 0x9763, 0x5E7C, 0x9764, 0x5996, - 0x9765, 0x5BB9, 0x9766, 0x5EB8, 0x9767, 0x63DA, 0x9768, 0x63FA, - 0x9769, 0x64C1, 0x976A, 0x66DC, 0x976B, 0x694A, 0x976C, 0x69D8, - 0x976D, 0x6D0B, 0x976E, 0x6EB6, 0x976F, 0x7194, 0x9770, 0x7528, - 0x9771, 0x7AAF, 0x9772, 0x7F8A, 0x9773, 0x8000, 0x9774, 0x8449, - 0x9775, 0x84C9, 0x9776, 0x8981, 0x9777, 0x8B21, 0x9778, 0x8E0A, - 0x9779, 0x9065, 0x977A, 0x967D, 0x977B, 0x990A, 0x977C, 0x617E, - 0x977D, 0x6291, 0x977E, 0x6B32, 0x9780, 0x6C83, 0x9781, 0x6D74, - 0x9782, 0x7FCC, 0x9783, 0x7FFC, 0x9784, 0x6DC0, 0x9785, 0x7F85, - 0x9786, 0x87BA, 0x9787, 0x88F8, 0x9788, 0x6765, 0x9789, 0x83B1, - 0x978A, 0x983C, 0x978B, 0x96F7, 0x978C, 0x6D1B, 0x978D, 0x7D61, - 0x978E, 0x843D, 0x978F, 0x916A, 0x9790, 0x4E71, 0x9791, 0x5375, - 0x9792, 0x5D50, 0x9793, 0x6B04, 0x9794, 0x6FEB, 0x9795, 0x85CD, - 0x9796, 0x862D, 0x9797, 0x89A7, 0x9798, 0x5229, 0x9799, 0x540F, - 0x979A, 0x5C65, 0x979B, 0x674E, 0x979C, 0x68A8, 0x979D, 0x7406, - 0x979E, 0x7483, 0x979F, 0x75E2, 0x97A0, 0x88CF, 0x97A1, 0x88E1, - 0x97A2, 0x91CC, 0x97A3, 0x96E2, 0x97A4, 0x9678, 0x97A5, 0x5F8B, - 0x97A6, 0x7387, 0x97A7, 0x7ACB, 0x97A8, 0x844E, 0x97A9, 0x63A0, - 0x97AA, 0x7565, 0x97AB, 0x5289, 0x97AC, 0x6D41, 0x97AD, 0x6E9C, - 0x97AE, 0x7409, 0x97AF, 0x7559, 0x97B0, 0x786B, 0x97B1, 0x7C92, - 0x97B2, 0x9686, 0x97B3, 0x7ADC, 0x97B4, 0x9F8D, 0x97B5, 0x4FB6, - 0x97B6, 0x616E, 0x97B7, 0x65C5, 0x97B8, 0x865C, 0x97B9, 0x4E86, - 0x97BA, 0x4EAE, 0x97BB, 0x50DA, 0x97BC, 0x4E21, 0x97BD, 0x51CC, - 0x97BE, 0x5BEE, 0x97BF, 0x6599, 0x97C0, 0x6881, 0x97C1, 0x6DBC, - 0x97C2, 0x731F, 0x97C3, 0x7642, 0x97C4, 0x77AD, 0x97C5, 0x7A1C, - 0x97C6, 0x7CE7, 0x97C7, 0x826F, 0x97C8, 0x8AD2, 0x97C9, 0x907C, - 0x97CA, 0x91CF, 0x97CB, 0x9675, 0x97CC, 0x9818, 0x97CD, 0x529B, - 0x97CE, 0x7DD1, 0x97CF, 0x502B, 0x97D0, 0x5398, 0x97D1, 0x6797, - 0x97D2, 0x6DCB, 0x97D3, 0x71D0, 0x97D4, 0x7433, 0x97D5, 0x81E8, - 0x97D6, 0x8F2A, 0x97D7, 0x96A3, 0x97D8, 0x9C57, 0x97D9, 0x9E9F, - 0x97DA, 0x7460, 0x97DB, 0x5841, 0x97DC, 0x6D99, 0x97DD, 0x7D2F, - 0x97DE, 0x985E, 0x97DF, 0x4EE4, 0x97E0, 0x4F36, 0x97E1, 0x4F8B, - 0x97E2, 0x51B7, 0x97E3, 0x52B1, 0x97E4, 0x5DBA, 0x97E5, 0x601C, - 0x97E6, 0x73B2, 0x97E7, 0x793C, 0x97E8, 0x82D3, 0x97E9, 0x9234, - 0x97EA, 0x96B7, 0x97EB, 0x96F6, 0x97EC, 0x970A, 0x97ED, 0x9E97, - 0x97EE, 0x9F62, 0x97EF, 0x66A6, 0x97F0, 0x6B74, 0x97F1, 0x5217, - 0x97F2, 0x52A3, 0x97F3, 0x70C8, 0x97F4, 0x88C2, 0x97F5, 0x5EC9, - 0x97F6, 0x604B, 0x97F7, 0x6190, 0x97F8, 0x6F23, 0x97F9, 0x7149, - 0x97FA, 0x7C3E, 0x97FB, 0x7DF4, 0x97FC, 0x806F, 0x9840, 0x84EE, - 0x9841, 0x9023, 0x9842, 0x932C, 0x9843, 0x5442, 0x9844, 0x9B6F, - 0x9845, 0x6AD3, 0x9846, 0x7089, 0x9847, 0x8CC2, 0x9848, 0x8DEF, - 0x9849, 0x9732, 0x984A, 0x52B4, 0x984B, 0x5A41, 0x984C, 0x5ECA, - 0x984D, 0x5F04, 0x984E, 0x6717, 0x984F, 0x697C, 0x9850, 0x6994, - 0x9851, 0x6D6A, 0x9852, 0x6F0F, 0x9853, 0x7262, 0x9854, 0x72FC, - 0x9855, 0x7BED, 0x9856, 0x8001, 0x9857, 0x807E, 0x9858, 0x874B, - 0x9859, 0x90CE, 0x985A, 0x516D, 0x985B, 0x9E93, 0x985C, 0x7984, - 0x985D, 0x808B, 0x985E, 0x9332, 0x985F, 0x8AD6, 0x9860, 0x502D, - 0x9861, 0x548C, 0x9862, 0x8A71, 0x9863, 0x6B6A, 0x9864, 0x8CC4, - 0x9865, 0x8107, 0x9866, 0x60D1, 0x9867, 0x67A0, 0x9868, 0x9DF2, - 0x9869, 0x4E99, 0x986A, 0x4E98, 0x986B, 0x9C10, 0x986C, 0x8A6B, - 0x986D, 0x85C1, 0x986E, 0x8568, 0x986F, 0x6900, 0x9870, 0x6E7E, - 0x9871, 0x7897, 0x9872, 0x8155, 0x989F, 0x5F0C, 0x98A0, 0x4E10, - 0x98A1, 0x4E15, 0x98A2, 0x4E2A, 0x98A3, 0x4E31, 0x98A4, 0x4E36, - 0x98A5, 0x4E3C, 0x98A6, 0x4E3F, 0x98A7, 0x4E42, 0x98A8, 0x4E56, - 0x98A9, 0x4E58, 0x98AA, 0x4E82, 0x98AB, 0x4E85, 0x98AC, 0x8C6B, - 0x98AD, 0x4E8A, 0x98AE, 0x8212, 0x98AF, 0x5F0D, 0x98B0, 0x4E8E, - 0x98B1, 0x4E9E, 0x98B2, 0x4E9F, 0x98B3, 0x4EA0, 0x98B4, 0x4EA2, - 0x98B5, 0x4EB0, 0x98B6, 0x4EB3, 0x98B7, 0x4EB6, 0x98B8, 0x4ECE, - 0x98B9, 0x4ECD, 0x98BA, 0x4EC4, 0x98BB, 0x4EC6, 0x98BC, 0x4EC2, - 0x98BD, 0x4ED7, 0x98BE, 0x4EDE, 0x98BF, 0x4EED, 0x98C0, 0x4EDF, - 0x98C1, 0x4EF7, 0x98C2, 0x4F09, 0x98C3, 0x4F5A, 0x98C4, 0x4F30, - 0x98C5, 0x4F5B, 0x98C6, 0x4F5D, 0x98C7, 0x4F57, 0x98C8, 0x4F47, - 0x98C9, 0x4F76, 0x98CA, 0x4F88, 0x98CB, 0x4F8F, 0x98CC, 0x4F98, - 0x98CD, 0x4F7B, 0x98CE, 0x4F69, 0x98CF, 0x4F70, 0x98D0, 0x4F91, - 0x98D1, 0x4F6F, 0x98D2, 0x4F86, 0x98D3, 0x4F96, 0x98D4, 0x5118, - 0x98D5, 0x4FD4, 0x98D6, 0x4FDF, 0x98D7, 0x4FCE, 0x98D8, 0x4FD8, - 0x98D9, 0x4FDB, 0x98DA, 0x4FD1, 0x98DB, 0x4FDA, 0x98DC, 0x4FD0, - 0x98DD, 0x4FE4, 0x98DE, 0x4FE5, 0x98DF, 0x501A, 0x98E0, 0x5028, - 0x98E1, 0x5014, 0x98E2, 0x502A, 0x98E3, 0x5025, 0x98E4, 0x5005, - 0x98E5, 0x4F1C, 0x98E6, 0x4FF6, 0x98E7, 0x5021, 0x98E8, 0x5029, - 0x98E9, 0x502C, 0x98EA, 0x4FFE, 0x98EB, 0x4FEF, 0x98EC, 0x5011, - 0x98ED, 0x5006, 0x98EE, 0x5043, 0x98EF, 0x5047, 0x98F0, 0x6703, - 0x98F1, 0x5055, 0x98F2, 0x5050, 0x98F3, 0x5048, 0x98F4, 0x505A, - 0x98F5, 0x5056, 0x98F6, 0x506C, 0x98F7, 0x5078, 0x98F8, 0x5080, - 0x98F9, 0x509A, 0x98FA, 0x5085, 0x98FB, 0x50B4, 0x98FC, 0x50B2, - 0x9940, 0x50C9, 0x9941, 0x50CA, 0x9942, 0x50B3, 0x9943, 0x50C2, - 0x9944, 0x50D6, 0x9945, 0x50DE, 0x9946, 0x50E5, 0x9947, 0x50ED, - 0x9948, 0x50E3, 0x9949, 0x50EE, 0x994A, 0x50F9, 0x994B, 0x50F5, - 0x994C, 0x5109, 0x994D, 0x5101, 0x994E, 0x5102, 0x994F, 0x5116, - 0x9950, 0x5115, 0x9951, 0x5114, 0x9952, 0x511A, 0x9953, 0x5121, - 0x9954, 0x513A, 0x9955, 0x5137, 0x9956, 0x513C, 0x9957, 0x513B, - 0x9958, 0x513F, 0x9959, 0x5140, 0x995A, 0x5152, 0x995B, 0x514C, - 0x995C, 0x5154, 0x995D, 0x5162, 0x995E, 0x7AF8, 0x995F, 0x5169, - 0x9960, 0x516A, 0x9961, 0x516E, 0x9962, 0x5180, 0x9963, 0x5182, - 0x9964, 0x56D8, 0x9965, 0x518C, 0x9966, 0x5189, 0x9967, 0x518F, - 0x9968, 0x5191, 0x9969, 0x5193, 0x996A, 0x5195, 0x996B, 0x5196, - 0x996C, 0x51A4, 0x996D, 0x51A6, 0x996E, 0x51A2, 0x996F, 0x51A9, - 0x9970, 0x51AA, 0x9971, 0x51AB, 0x9972, 0x51B3, 0x9973, 0x51B1, - 0x9974, 0x51B2, 0x9975, 0x51B0, 0x9976, 0x51B5, 0x9977, 0x51BD, - 0x9978, 0x51C5, 0x9979, 0x51C9, 0x997A, 0x51DB, 0x997B, 0x51E0, - 0x997C, 0x8655, 0x997D, 0x51E9, 0x997E, 0x51ED, 0x9980, 0x51F0, - 0x9981, 0x51F5, 0x9982, 0x51FE, 0x9983, 0x5204, 0x9984, 0x520B, - 0x9985, 0x5214, 0x9986, 0x520E, 0x9987, 0x5227, 0x9988, 0x522A, - 0x9989, 0x522E, 0x998A, 0x5233, 0x998B, 0x5239, 0x998C, 0x524F, - 0x998D, 0x5244, 0x998E, 0x524B, 0x998F, 0x524C, 0x9990, 0x525E, - 0x9991, 0x5254, 0x9992, 0x526A, 0x9993, 0x5274, 0x9994, 0x5269, - 0x9995, 0x5273, 0x9996, 0x527F, 0x9997, 0x527D, 0x9998, 0x528D, - 0x9999, 0x5294, 0x999A, 0x5292, 0x999B, 0x5271, 0x999C, 0x5288, - 0x999D, 0x5291, 0x999E, 0x8FA8, 0x999F, 0x8FA7, 0x99A0, 0x52AC, - 0x99A1, 0x52AD, 0x99A2, 0x52BC, 0x99A3, 0x52B5, 0x99A4, 0x52C1, - 0x99A5, 0x52CD, 0x99A6, 0x52D7, 0x99A7, 0x52DE, 0x99A8, 0x52E3, - 0x99A9, 0x52E6, 0x99AA, 0x98ED, 0x99AB, 0x52E0, 0x99AC, 0x52F3, - 0x99AD, 0x52F5, 0x99AE, 0x52F8, 0x99AF, 0x52F9, 0x99B0, 0x5306, - 0x99B1, 0x5308, 0x99B2, 0x7538, 0x99B3, 0x530D, 0x99B4, 0x5310, - 0x99B5, 0x530F, 0x99B6, 0x5315, 0x99B7, 0x531A, 0x99B8, 0x5323, - 0x99B9, 0x532F, 0x99BA, 0x5331, 0x99BB, 0x5333, 0x99BC, 0x5338, - 0x99BD, 0x5340, 0x99BE, 0x5346, 0x99BF, 0x5345, 0x99C0, 0x4E17, - 0x99C1, 0x5349, 0x99C2, 0x534D, 0x99C3, 0x51D6, 0x99C4, 0x535E, - 0x99C5, 0x5369, 0x99C6, 0x536E, 0x99C7, 0x5918, 0x99C8, 0x537B, - 0x99C9, 0x5377, 0x99CA, 0x5382, 0x99CB, 0x5396, 0x99CC, 0x53A0, - 0x99CD, 0x53A6, 0x99CE, 0x53A5, 0x99CF, 0x53AE, 0x99D0, 0x53B0, - 0x99D1, 0x53B6, 0x99D2, 0x53C3, 0x99D3, 0x7C12, 0x99D4, 0x96D9, - 0x99D5, 0x53DF, 0x99D6, 0x66FC, 0x99D7, 0x71EE, 0x99D8, 0x53EE, - 0x99D9, 0x53E8, 0x99DA, 0x53ED, 0x99DB, 0x53FA, 0x99DC, 0x5401, - 0x99DD, 0x543D, 0x99DE, 0x5440, 0x99DF, 0x542C, 0x99E0, 0x542D, - 0x99E1, 0x543C, 0x99E2, 0x542E, 0x99E3, 0x5436, 0x99E4, 0x5429, - 0x99E5, 0x541D, 0x99E6, 0x544E, 0x99E7, 0x548F, 0x99E8, 0x5475, - 0x99E9, 0x548E, 0x99EA, 0x545F, 0x99EB, 0x5471, 0x99EC, 0x5477, - 0x99ED, 0x5470, 0x99EE, 0x5492, 0x99EF, 0x547B, 0x99F0, 0x5480, - 0x99F1, 0x5476, 0x99F2, 0x5484, 0x99F3, 0x5490, 0x99F4, 0x5486, - 0x99F5, 0x54C7, 0x99F6, 0x54A2, 0x99F7, 0x54B8, 0x99F8, 0x54A5, - 0x99F9, 0x54AC, 0x99FA, 0x54C4, 0x99FB, 0x54C8, 0x99FC, 0x54A8, - 0x9A40, 0x54AB, 0x9A41, 0x54C2, 0x9A42, 0x54A4, 0x9A43, 0x54BE, - 0x9A44, 0x54BC, 0x9A45, 0x54D8, 0x9A46, 0x54E5, 0x9A47, 0x54E6, - 0x9A48, 0x550F, 0x9A49, 0x5514, 0x9A4A, 0x54FD, 0x9A4B, 0x54EE, - 0x9A4C, 0x54ED, 0x9A4D, 0x54FA, 0x9A4E, 0x54E2, 0x9A4F, 0x5539, - 0x9A50, 0x5540, 0x9A51, 0x5563, 0x9A52, 0x554C, 0x9A53, 0x552E, - 0x9A54, 0x555C, 0x9A55, 0x5545, 0x9A56, 0x5556, 0x9A57, 0x5557, - 0x9A58, 0x5538, 0x9A59, 0x5533, 0x9A5A, 0x555D, 0x9A5B, 0x5599, - 0x9A5C, 0x5580, 0x9A5D, 0x54AF, 0x9A5E, 0x558A, 0x9A5F, 0x559F, - 0x9A60, 0x557B, 0x9A61, 0x557E, 0x9A62, 0x5598, 0x9A63, 0x559E, - 0x9A64, 0x55AE, 0x9A65, 0x557C, 0x9A66, 0x5583, 0x9A67, 0x55A9, - 0x9A68, 0x5587, 0x9A69, 0x55A8, 0x9A6A, 0x55DA, 0x9A6B, 0x55C5, - 0x9A6C, 0x55DF, 0x9A6D, 0x55C4, 0x9A6E, 0x55DC, 0x9A6F, 0x55E4, - 0x9A70, 0x55D4, 0x9A71, 0x5614, 0x9A72, 0x55F7, 0x9A73, 0x5616, - 0x9A74, 0x55FE, 0x9A75, 0x55FD, 0x9A76, 0x561B, 0x9A77, 0x55F9, - 0x9A78, 0x564E, 0x9A79, 0x5650, 0x9A7A, 0x71DF, 0x9A7B, 0x5634, - 0x9A7C, 0x5636, 0x9A7D, 0x5632, 0x9A7E, 0x5638, 0x9A80, 0x566B, - 0x9A81, 0x5664, 0x9A82, 0x562F, 0x9A83, 0x566C, 0x9A84, 0x566A, - 0x9A85, 0x5686, 0x9A86, 0x5680, 0x9A87, 0x568A, 0x9A88, 0x56A0, - 0x9A89, 0x5694, 0x9A8A, 0x568F, 0x9A8B, 0x56A5, 0x9A8C, 0x56AE, - 0x9A8D, 0x56B6, 0x9A8E, 0x56B4, 0x9A8F, 0x56C2, 0x9A90, 0x56BC, - 0x9A91, 0x56C1, 0x9A92, 0x56C3, 0x9A93, 0x56C0, 0x9A94, 0x56C8, - 0x9A95, 0x56CE, 0x9A96, 0x56D1, 0x9A97, 0x56D3, 0x9A98, 0x56D7, - 0x9A99, 0x56EE, 0x9A9A, 0x56F9, 0x9A9B, 0x5700, 0x9A9C, 0x56FF, - 0x9A9D, 0x5704, 0x9A9E, 0x5709, 0x9A9F, 0x5708, 0x9AA0, 0x570B, - 0x9AA1, 0x570D, 0x9AA2, 0x5713, 0x9AA3, 0x5718, 0x9AA4, 0x5716, - 0x9AA5, 0x55C7, 0x9AA6, 0x571C, 0x9AA7, 0x5726, 0x9AA8, 0x5737, - 0x9AA9, 0x5738, 0x9AAA, 0x574E, 0x9AAB, 0x573B, 0x9AAC, 0x5740, - 0x9AAD, 0x574F, 0x9AAE, 0x5769, 0x9AAF, 0x57C0, 0x9AB0, 0x5788, - 0x9AB1, 0x5761, 0x9AB2, 0x577F, 0x9AB3, 0x5789, 0x9AB4, 0x5793, - 0x9AB5, 0x57A0, 0x9AB6, 0x57B3, 0x9AB7, 0x57A4, 0x9AB8, 0x57AA, - 0x9AB9, 0x57B0, 0x9ABA, 0x57C3, 0x9ABB, 0x57C6, 0x9ABC, 0x57D4, - 0x9ABD, 0x57D2, 0x9ABE, 0x57D3, 0x9ABF, 0x580A, 0x9AC0, 0x57D6, - 0x9AC1, 0x57E3, 0x9AC2, 0x580B, 0x9AC3, 0x5819, 0x9AC4, 0x581D, - 0x9AC5, 0x5872, 0x9AC6, 0x5821, 0x9AC7, 0x5862, 0x9AC8, 0x584B, - 0x9AC9, 0x5870, 0x9ACA, 0x6BC0, 0x9ACB, 0x5852, 0x9ACC, 0x583D, - 0x9ACD, 0x5879, 0x9ACE, 0x5885, 0x9ACF, 0x58B9, 0x9AD0, 0x589F, - 0x9AD1, 0x58AB, 0x9AD2, 0x58BA, 0x9AD3, 0x58DE, 0x9AD4, 0x58BB, - 0x9AD5, 0x58B8, 0x9AD6, 0x58AE, 0x9AD7, 0x58C5, 0x9AD8, 0x58D3, - 0x9AD9, 0x58D1, 0x9ADA, 0x58D7, 0x9ADB, 0x58D9, 0x9ADC, 0x58D8, - 0x9ADD, 0x58E5, 0x9ADE, 0x58DC, 0x9ADF, 0x58E4, 0x9AE0, 0x58DF, - 0x9AE1, 0x58EF, 0x9AE2, 0x58FA, 0x9AE3, 0x58F9, 0x9AE4, 0x58FB, - 0x9AE5, 0x58FC, 0x9AE6, 0x58FD, 0x9AE7, 0x5902, 0x9AE8, 0x590A, - 0x9AE9, 0x5910, 0x9AEA, 0x591B, 0x9AEB, 0x68A6, 0x9AEC, 0x5925, - 0x9AED, 0x592C, 0x9AEE, 0x592D, 0x9AEF, 0x5932, 0x9AF0, 0x5938, - 0x9AF1, 0x593E, 0x9AF2, 0x7AD2, 0x9AF3, 0x5955, 0x9AF4, 0x5950, - 0x9AF5, 0x594E, 0x9AF6, 0x595A, 0x9AF7, 0x5958, 0x9AF8, 0x5962, - 0x9AF9, 0x5960, 0x9AFA, 0x5967, 0x9AFB, 0x596C, 0x9AFC, 0x5969, - 0x9B40, 0x5978, 0x9B41, 0x5981, 0x9B42, 0x599D, 0x9B43, 0x4F5E, - 0x9B44, 0x4FAB, 0x9B45, 0x59A3, 0x9B46, 0x59B2, 0x9B47, 0x59C6, - 0x9B48, 0x59E8, 0x9B49, 0x59DC, 0x9B4A, 0x598D, 0x9B4B, 0x59D9, - 0x9B4C, 0x59DA, 0x9B4D, 0x5A25, 0x9B4E, 0x5A1F, 0x9B4F, 0x5A11, - 0x9B50, 0x5A1C, 0x9B51, 0x5A09, 0x9B52, 0x5A1A, 0x9B53, 0x5A40, - 0x9B54, 0x5A6C, 0x9B55, 0x5A49, 0x9B56, 0x5A35, 0x9B57, 0x5A36, - 0x9B58, 0x5A62, 0x9B59, 0x5A6A, 0x9B5A, 0x5A9A, 0x9B5B, 0x5ABC, - 0x9B5C, 0x5ABE, 0x9B5D, 0x5ACB, 0x9B5E, 0x5AC2, 0x9B5F, 0x5ABD, - 0x9B60, 0x5AE3, 0x9B61, 0x5AD7, 0x9B62, 0x5AE6, 0x9B63, 0x5AE9, - 0x9B64, 0x5AD6, 0x9B65, 0x5AFA, 0x9B66, 0x5AFB, 0x9B67, 0x5B0C, - 0x9B68, 0x5B0B, 0x9B69, 0x5B16, 0x9B6A, 0x5B32, 0x9B6B, 0x5AD0, - 0x9B6C, 0x5B2A, 0x9B6D, 0x5B36, 0x9B6E, 0x5B3E, 0x9B6F, 0x5B43, - 0x9B70, 0x5B45, 0x9B71, 0x5B40, 0x9B72, 0x5B51, 0x9B73, 0x5B55, - 0x9B74, 0x5B5A, 0x9B75, 0x5B5B, 0x9B76, 0x5B65, 0x9B77, 0x5B69, - 0x9B78, 0x5B70, 0x9B79, 0x5B73, 0x9B7A, 0x5B75, 0x9B7B, 0x5B78, - 0x9B7C, 0x6588, 0x9B7D, 0x5B7A, 0x9B7E, 0x5B80, 0x9B80, 0x5B83, - 0x9B81, 0x5BA6, 0x9B82, 0x5BB8, 0x9B83, 0x5BC3, 0x9B84, 0x5BC7, - 0x9B85, 0x5BC9, 0x9B86, 0x5BD4, 0x9B87, 0x5BD0, 0x9B88, 0x5BE4, - 0x9B89, 0x5BE6, 0x9B8A, 0x5BE2, 0x9B8B, 0x5BDE, 0x9B8C, 0x5BE5, - 0x9B8D, 0x5BEB, 0x9B8E, 0x5BF0, 0x9B8F, 0x5BF6, 0x9B90, 0x5BF3, - 0x9B91, 0x5C05, 0x9B92, 0x5C07, 0x9B93, 0x5C08, 0x9B94, 0x5C0D, - 0x9B95, 0x5C13, 0x9B96, 0x5C20, 0x9B97, 0x5C22, 0x9B98, 0x5C28, - 0x9B99, 0x5C38, 0x9B9A, 0x5C39, 0x9B9B, 0x5C41, 0x9B9C, 0x5C46, - 0x9B9D, 0x5C4E, 0x9B9E, 0x5C53, 0x9B9F, 0x5C50, 0x9BA0, 0x5C4F, - 0x9BA1, 0x5B71, 0x9BA2, 0x5C6C, 0x9BA3, 0x5C6E, 0x9BA4, 0x4E62, - 0x9BA5, 0x5C76, 0x9BA6, 0x5C79, 0x9BA7, 0x5C8C, 0x9BA8, 0x5C91, - 0x9BA9, 0x5C94, 0x9BAA, 0x599B, 0x9BAB, 0x5CAB, 0x9BAC, 0x5CBB, - 0x9BAD, 0x5CB6, 0x9BAE, 0x5CBC, 0x9BAF, 0x5CB7, 0x9BB0, 0x5CC5, - 0x9BB1, 0x5CBE, 0x9BB2, 0x5CC7, 0x9BB3, 0x5CD9, 0x9BB4, 0x5CE9, - 0x9BB5, 0x5CFD, 0x9BB6, 0x5CFA, 0x9BB7, 0x5CED, 0x9BB8, 0x5D8C, - 0x9BB9, 0x5CEA, 0x9BBA, 0x5D0B, 0x9BBB, 0x5D15, 0x9BBC, 0x5D17, - 0x9BBD, 0x5D5C, 0x9BBE, 0x5D1F, 0x9BBF, 0x5D1B, 0x9BC0, 0x5D11, - 0x9BC1, 0x5D14, 0x9BC2, 0x5D22, 0x9BC3, 0x5D1A, 0x9BC4, 0x5D19, - 0x9BC5, 0x5D18, 0x9BC6, 0x5D4C, 0x9BC7, 0x5D52, 0x9BC8, 0x5D4E, - 0x9BC9, 0x5D4B, 0x9BCA, 0x5D6C, 0x9BCB, 0x5D73, 0x9BCC, 0x5D76, - 0x9BCD, 0x5D87, 0x9BCE, 0x5D84, 0x9BCF, 0x5D82, 0x9BD0, 0x5DA2, - 0x9BD1, 0x5D9D, 0x9BD2, 0x5DAC, 0x9BD3, 0x5DAE, 0x9BD4, 0x5DBD, - 0x9BD5, 0x5D90, 0x9BD6, 0x5DB7, 0x9BD7, 0x5DBC, 0x9BD8, 0x5DC9, - 0x9BD9, 0x5DCD, 0x9BDA, 0x5DD3, 0x9BDB, 0x5DD2, 0x9BDC, 0x5DD6, - 0x9BDD, 0x5DDB, 0x9BDE, 0x5DEB, 0x9BDF, 0x5DF2, 0x9BE0, 0x5DF5, - 0x9BE1, 0x5E0B, 0x9BE2, 0x5E1A, 0x9BE3, 0x5E19, 0x9BE4, 0x5E11, - 0x9BE5, 0x5E1B, 0x9BE6, 0x5E36, 0x9BE7, 0x5E37, 0x9BE8, 0x5E44, - 0x9BE9, 0x5E43, 0x9BEA, 0x5E40, 0x9BEB, 0x5E4E, 0x9BEC, 0x5E57, - 0x9BED, 0x5E54, 0x9BEE, 0x5E5F, 0x9BEF, 0x5E62, 0x9BF0, 0x5E64, - 0x9BF1, 0x5E47, 0x9BF2, 0x5E75, 0x9BF3, 0x5E76, 0x9BF4, 0x5E7A, - 0x9BF5, 0x9EBC, 0x9BF6, 0x5E7F, 0x9BF7, 0x5EA0, 0x9BF8, 0x5EC1, - 0x9BF9, 0x5EC2, 0x9BFA, 0x5EC8, 0x9BFB, 0x5ED0, 0x9BFC, 0x5ECF, - 0x9C40, 0x5ED6, 0x9C41, 0x5EE3, 0x9C42, 0x5EDD, 0x9C43, 0x5EDA, - 0x9C44, 0x5EDB, 0x9C45, 0x5EE2, 0x9C46, 0x5EE1, 0x9C47, 0x5EE8, - 0x9C48, 0x5EE9, 0x9C49, 0x5EEC, 0x9C4A, 0x5EF1, 0x9C4B, 0x5EF3, - 0x9C4C, 0x5EF0, 0x9C4D, 0x5EF4, 0x9C4E, 0x5EF8, 0x9C4F, 0x5EFE, - 0x9C50, 0x5F03, 0x9C51, 0x5F09, 0x9C52, 0x5F5D, 0x9C53, 0x5F5C, - 0x9C54, 0x5F0B, 0x9C55, 0x5F11, 0x9C56, 0x5F16, 0x9C57, 0x5F29, - 0x9C58, 0x5F2D, 0x9C59, 0x5F38, 0x9C5A, 0x5F41, 0x9C5B, 0x5F48, - 0x9C5C, 0x5F4C, 0x9C5D, 0x5F4E, 0x9C5E, 0x5F2F, 0x9C5F, 0x5F51, - 0x9C60, 0x5F56, 0x9C61, 0x5F57, 0x9C62, 0x5F59, 0x9C63, 0x5F61, - 0x9C64, 0x5F6D, 0x9C65, 0x5F73, 0x9C66, 0x5F77, 0x9C67, 0x5F83, - 0x9C68, 0x5F82, 0x9C69, 0x5F7F, 0x9C6A, 0x5F8A, 0x9C6B, 0x5F88, - 0x9C6C, 0x5F91, 0x9C6D, 0x5F87, 0x9C6E, 0x5F9E, 0x9C6F, 0x5F99, - 0x9C70, 0x5F98, 0x9C71, 0x5FA0, 0x9C72, 0x5FA8, 0x9C73, 0x5FAD, - 0x9C74, 0x5FBC, 0x9C75, 0x5FD6, 0x9C76, 0x5FFB, 0x9C77, 0x5FE4, - 0x9C78, 0x5FF8, 0x9C79, 0x5FF1, 0x9C7A, 0x5FDD, 0x9C7B, 0x60B3, - 0x9C7C, 0x5FFF, 0x9C7D, 0x6021, 0x9C7E, 0x6060, 0x9C80, 0x6019, - 0x9C81, 0x6010, 0x9C82, 0x6029, 0x9C83, 0x600E, 0x9C84, 0x6031, - 0x9C85, 0x601B, 0x9C86, 0x6015, 0x9C87, 0x602B, 0x9C88, 0x6026, - 0x9C89, 0x600F, 0x9C8A, 0x603A, 0x9C8B, 0x605A, 0x9C8C, 0x6041, - 0x9C8D, 0x606A, 0x9C8E, 0x6077, 0x9C8F, 0x605F, 0x9C90, 0x604A, - 0x9C91, 0x6046, 0x9C92, 0x604D, 0x9C93, 0x6063, 0x9C94, 0x6043, - 0x9C95, 0x6064, 0x9C96, 0x6042, 0x9C97, 0x606C, 0x9C98, 0x606B, - 0x9C99, 0x6059, 0x9C9A, 0x6081, 0x9C9B, 0x608D, 0x9C9C, 0x60E7, - 0x9C9D, 0x6083, 0x9C9E, 0x609A, 0x9C9F, 0x6084, 0x9CA0, 0x609B, - 0x9CA1, 0x6096, 0x9CA2, 0x6097, 0x9CA3, 0x6092, 0x9CA4, 0x60A7, - 0x9CA5, 0x608B, 0x9CA6, 0x60E1, 0x9CA7, 0x60B8, 0x9CA8, 0x60E0, - 0x9CA9, 0x60D3, 0x9CAA, 0x60B4, 0x9CAB, 0x5FF0, 0x9CAC, 0x60BD, - 0x9CAD, 0x60C6, 0x9CAE, 0x60B5, 0x9CAF, 0x60D8, 0x9CB0, 0x614D, - 0x9CB1, 0x6115, 0x9CB2, 0x6106, 0x9CB3, 0x60F6, 0x9CB4, 0x60F7, - 0x9CB5, 0x6100, 0x9CB6, 0x60F4, 0x9CB7, 0x60FA, 0x9CB8, 0x6103, - 0x9CB9, 0x6121, 0x9CBA, 0x60FB, 0x9CBB, 0x60F1, 0x9CBC, 0x610D, - 0x9CBD, 0x610E, 0x9CBE, 0x6147, 0x9CBF, 0x613E, 0x9CC0, 0x6128, - 0x9CC1, 0x6127, 0x9CC2, 0x614A, 0x9CC3, 0x613F, 0x9CC4, 0x613C, - 0x9CC5, 0x612C, 0x9CC6, 0x6134, 0x9CC7, 0x613D, 0x9CC8, 0x6142, - 0x9CC9, 0x6144, 0x9CCA, 0x6173, 0x9CCB, 0x6177, 0x9CCC, 0x6158, - 0x9CCD, 0x6159, 0x9CCE, 0x615A, 0x9CCF, 0x616B, 0x9CD0, 0x6174, - 0x9CD1, 0x616F, 0x9CD2, 0x6165, 0x9CD3, 0x6171, 0x9CD4, 0x615F, - 0x9CD5, 0x615D, 0x9CD6, 0x6153, 0x9CD7, 0x6175, 0x9CD8, 0x6199, - 0x9CD9, 0x6196, 0x9CDA, 0x6187, 0x9CDB, 0x61AC, 0x9CDC, 0x6194, - 0x9CDD, 0x619A, 0x9CDE, 0x618A, 0x9CDF, 0x6191, 0x9CE0, 0x61AB, - 0x9CE1, 0x61AE, 0x9CE2, 0x61CC, 0x9CE3, 0x61CA, 0x9CE4, 0x61C9, - 0x9CE5, 0x61F7, 0x9CE6, 0x61C8, 0x9CE7, 0x61C3, 0x9CE8, 0x61C6, - 0x9CE9, 0x61BA, 0x9CEA, 0x61CB, 0x9CEB, 0x7F79, 0x9CEC, 0x61CD, - 0x9CED, 0x61E6, 0x9CEE, 0x61E3, 0x9CEF, 0x61F6, 0x9CF0, 0x61FA, - 0x9CF1, 0x61F4, 0x9CF2, 0x61FF, 0x9CF3, 0x61FD, 0x9CF4, 0x61FC, - 0x9CF5, 0x61FE, 0x9CF6, 0x6200, 0x9CF7, 0x6208, 0x9CF8, 0x6209, - 0x9CF9, 0x620D, 0x9CFA, 0x620C, 0x9CFB, 0x6214, 0x9CFC, 0x621B, - 0x9D40, 0x621E, 0x9D41, 0x6221, 0x9D42, 0x622A, 0x9D43, 0x622E, - 0x9D44, 0x6230, 0x9D45, 0x6232, 0x9D46, 0x6233, 0x9D47, 0x6241, - 0x9D48, 0x624E, 0x9D49, 0x625E, 0x9D4A, 0x6263, 0x9D4B, 0x625B, - 0x9D4C, 0x6260, 0x9D4D, 0x6268, 0x9D4E, 0x627C, 0x9D4F, 0x6282, - 0x9D50, 0x6289, 0x9D51, 0x627E, 0x9D52, 0x6292, 0x9D53, 0x6293, - 0x9D54, 0x6296, 0x9D55, 0x62D4, 0x9D56, 0x6283, 0x9D57, 0x6294, - 0x9D58, 0x62D7, 0x9D59, 0x62D1, 0x9D5A, 0x62BB, 0x9D5B, 0x62CF, - 0x9D5C, 0x62FF, 0x9D5D, 0x62C6, 0x9D5E, 0x64D4, 0x9D5F, 0x62C8, - 0x9D60, 0x62DC, 0x9D61, 0x62CC, 0x9D62, 0x62CA, 0x9D63, 0x62C2, - 0x9D64, 0x62C7, 0x9D65, 0x629B, 0x9D66, 0x62C9, 0x9D67, 0x630C, - 0x9D68, 0x62EE, 0x9D69, 0x62F1, 0x9D6A, 0x6327, 0x9D6B, 0x6302, - 0x9D6C, 0x6308, 0x9D6D, 0x62EF, 0x9D6E, 0x62F5, 0x9D6F, 0x6350, - 0x9D70, 0x633E, 0x9D71, 0x634D, 0x9D72, 0x641C, 0x9D73, 0x634F, - 0x9D74, 0x6396, 0x9D75, 0x638E, 0x9D76, 0x6380, 0x9D77, 0x63AB, - 0x9D78, 0x6376, 0x9D79, 0x63A3, 0x9D7A, 0x638F, 0x9D7B, 0x6389, - 0x9D7C, 0x639F, 0x9D7D, 0x63B5, 0x9D7E, 0x636B, 0x9D80, 0x6369, - 0x9D81, 0x63BE, 0x9D82, 0x63E9, 0x9D83, 0x63C0, 0x9D84, 0x63C6, - 0x9D85, 0x63E3, 0x9D86, 0x63C9, 0x9D87, 0x63D2, 0x9D88, 0x63F6, - 0x9D89, 0x63C4, 0x9D8A, 0x6416, 0x9D8B, 0x6434, 0x9D8C, 0x6406, - 0x9D8D, 0x6413, 0x9D8E, 0x6426, 0x9D8F, 0x6436, 0x9D90, 0x651D, - 0x9D91, 0x6417, 0x9D92, 0x6428, 0x9D93, 0x640F, 0x9D94, 0x6467, - 0x9D95, 0x646F, 0x9D96, 0x6476, 0x9D97, 0x644E, 0x9D98, 0x652A, - 0x9D99, 0x6495, 0x9D9A, 0x6493, 0x9D9B, 0x64A5, 0x9D9C, 0x64A9, - 0x9D9D, 0x6488, 0x9D9E, 0x64BC, 0x9D9F, 0x64DA, 0x9DA0, 0x64D2, - 0x9DA1, 0x64C5, 0x9DA2, 0x64C7, 0x9DA3, 0x64BB, 0x9DA4, 0x64D8, - 0x9DA5, 0x64C2, 0x9DA6, 0x64F1, 0x9DA7, 0x64E7, 0x9DA8, 0x8209, - 0x9DA9, 0x64E0, 0x9DAA, 0x64E1, 0x9DAB, 0x62AC, 0x9DAC, 0x64E3, - 0x9DAD, 0x64EF, 0x9DAE, 0x652C, 0x9DAF, 0x64F6, 0x9DB0, 0x64F4, - 0x9DB1, 0x64F2, 0x9DB2, 0x64FA, 0x9DB3, 0x6500, 0x9DB4, 0x64FD, - 0x9DB5, 0x6518, 0x9DB6, 0x651C, 0x9DB7, 0x6505, 0x9DB8, 0x6524, - 0x9DB9, 0x6523, 0x9DBA, 0x652B, 0x9DBB, 0x6534, 0x9DBC, 0x6535, - 0x9DBD, 0x6537, 0x9DBE, 0x6536, 0x9DBF, 0x6538, 0x9DC0, 0x754B, - 0x9DC1, 0x6548, 0x9DC2, 0x6556, 0x9DC3, 0x6555, 0x9DC4, 0x654D, - 0x9DC5, 0x6558, 0x9DC6, 0x655E, 0x9DC7, 0x655D, 0x9DC8, 0x6572, - 0x9DC9, 0x6578, 0x9DCA, 0x6582, 0x9DCB, 0x6583, 0x9DCC, 0x8B8A, - 0x9DCD, 0x659B, 0x9DCE, 0x659F, 0x9DCF, 0x65AB, 0x9DD0, 0x65B7, - 0x9DD1, 0x65C3, 0x9DD2, 0x65C6, 0x9DD3, 0x65C1, 0x9DD4, 0x65C4, - 0x9DD5, 0x65CC, 0x9DD6, 0x65D2, 0x9DD7, 0x65DB, 0x9DD8, 0x65D9, - 0x9DD9, 0x65E0, 0x9DDA, 0x65E1, 0x9DDB, 0x65F1, 0x9DDC, 0x6772, - 0x9DDD, 0x660A, 0x9DDE, 0x6603, 0x9DDF, 0x65FB, 0x9DE0, 0x6773, - 0x9DE1, 0x6635, 0x9DE2, 0x6636, 0x9DE3, 0x6634, 0x9DE4, 0x661C, - 0x9DE5, 0x664F, 0x9DE6, 0x6644, 0x9DE7, 0x6649, 0x9DE8, 0x6641, - 0x9DE9, 0x665E, 0x9DEA, 0x665D, 0x9DEB, 0x6664, 0x9DEC, 0x6667, - 0x9DED, 0x6668, 0x9DEE, 0x665F, 0x9DEF, 0x6662, 0x9DF0, 0x6670, - 0x9DF1, 0x6683, 0x9DF2, 0x6688, 0x9DF3, 0x668E, 0x9DF4, 0x6689, - 0x9DF5, 0x6684, 0x9DF6, 0x6698, 0x9DF7, 0x669D, 0x9DF8, 0x66C1, - 0x9DF9, 0x66B9, 0x9DFA, 0x66C9, 0x9DFB, 0x66BE, 0x9DFC, 0x66BC, - 0x9E40, 0x66C4, 0x9E41, 0x66B8, 0x9E42, 0x66D6, 0x9E43, 0x66DA, - 0x9E44, 0x66E0, 0x9E45, 0x663F, 0x9E46, 0x66E6, 0x9E47, 0x66E9, - 0x9E48, 0x66F0, 0x9E49, 0x66F5, 0x9E4A, 0x66F7, 0x9E4B, 0x670F, - 0x9E4C, 0x6716, 0x9E4D, 0x671E, 0x9E4E, 0x6726, 0x9E4F, 0x6727, - 0x9E50, 0x9738, 0x9E51, 0x672E, 0x9E52, 0x673F, 0x9E53, 0x6736, - 0x9E54, 0x6741, 0x9E55, 0x6738, 0x9E56, 0x6737, 0x9E57, 0x6746, - 0x9E58, 0x675E, 0x9E59, 0x6760, 0x9E5A, 0x6759, 0x9E5B, 0x6763, - 0x9E5C, 0x6764, 0x9E5D, 0x6789, 0x9E5E, 0x6770, 0x9E5F, 0x67A9, - 0x9E60, 0x677C, 0x9E61, 0x676A, 0x9E62, 0x678C, 0x9E63, 0x678B, - 0x9E64, 0x67A6, 0x9E65, 0x67A1, 0x9E66, 0x6785, 0x9E67, 0x67B7, - 0x9E68, 0x67EF, 0x9E69, 0x67B4, 0x9E6A, 0x67EC, 0x9E6B, 0x67B3, - 0x9E6C, 0x67E9, 0x9E6D, 0x67B8, 0x9E6E, 0x67E4, 0x9E6F, 0x67DE, - 0x9E70, 0x67DD, 0x9E71, 0x67E2, 0x9E72, 0x67EE, 0x9E73, 0x67B9, - 0x9E74, 0x67CE, 0x9E75, 0x67C6, 0x9E76, 0x67E7, 0x9E77, 0x6A9C, - 0x9E78, 0x681E, 0x9E79, 0x6846, 0x9E7A, 0x6829, 0x9E7B, 0x6840, - 0x9E7C, 0x684D, 0x9E7D, 0x6832, 0x9E7E, 0x684E, 0x9E80, 0x68B3, - 0x9E81, 0x682B, 0x9E82, 0x6859, 0x9E83, 0x6863, 0x9E84, 0x6877, - 0x9E85, 0x687F, 0x9E86, 0x689F, 0x9E87, 0x688F, 0x9E88, 0x68AD, - 0x9E89, 0x6894, 0x9E8A, 0x689D, 0x9E8B, 0x689B, 0x9E8C, 0x6883, - 0x9E8D, 0x6AAE, 0x9E8E, 0x68B9, 0x9E8F, 0x6874, 0x9E90, 0x68B5, - 0x9E91, 0x68A0, 0x9E92, 0x68BA, 0x9E93, 0x690F, 0x9E94, 0x688D, - 0x9E95, 0x687E, 0x9E96, 0x6901, 0x9E97, 0x68CA, 0x9E98, 0x6908, - 0x9E99, 0x68D8, 0x9E9A, 0x6922, 0x9E9B, 0x6926, 0x9E9C, 0x68E1, - 0x9E9D, 0x690C, 0x9E9E, 0x68CD, 0x9E9F, 0x68D4, 0x9EA0, 0x68E7, - 0x9EA1, 0x68D5, 0x9EA2, 0x6936, 0x9EA3, 0x6912, 0x9EA4, 0x6904, - 0x9EA5, 0x68D7, 0x9EA6, 0x68E3, 0x9EA7, 0x6925, 0x9EA8, 0x68F9, - 0x9EA9, 0x68E0, 0x9EAA, 0x68EF, 0x9EAB, 0x6928, 0x9EAC, 0x692A, - 0x9EAD, 0x691A, 0x9EAE, 0x6923, 0x9EAF, 0x6921, 0x9EB0, 0x68C6, - 0x9EB1, 0x6979, 0x9EB2, 0x6977, 0x9EB3, 0x695C, 0x9EB4, 0x6978, - 0x9EB5, 0x696B, 0x9EB6, 0x6954, 0x9EB7, 0x697E, 0x9EB8, 0x696E, - 0x9EB9, 0x6939, 0x9EBA, 0x6974, 0x9EBB, 0x693D, 0x9EBC, 0x6959, - 0x9EBD, 0x6930, 0x9EBE, 0x6961, 0x9EBF, 0x695E, 0x9EC0, 0x695D, - 0x9EC1, 0x6981, 0x9EC2, 0x696A, 0x9EC3, 0x69B2, 0x9EC4, 0x69AE, - 0x9EC5, 0x69D0, 0x9EC6, 0x69BF, 0x9EC7, 0x69C1, 0x9EC8, 0x69D3, - 0x9EC9, 0x69BE, 0x9ECA, 0x69CE, 0x9ECB, 0x5BE8, 0x9ECC, 0x69CA, - 0x9ECD, 0x69DD, 0x9ECE, 0x69BB, 0x9ECF, 0x69C3, 0x9ED0, 0x69A7, - 0x9ED1, 0x6A2E, 0x9ED2, 0x6991, 0x9ED3, 0x69A0, 0x9ED4, 0x699C, - 0x9ED5, 0x6995, 0x9ED6, 0x69B4, 0x9ED7, 0x69DE, 0x9ED8, 0x69E8, - 0x9ED9, 0x6A02, 0x9EDA, 0x6A1B, 0x9EDB, 0x69FF, 0x9EDC, 0x6B0A, - 0x9EDD, 0x69F9, 0x9EDE, 0x69F2, 0x9EDF, 0x69E7, 0x9EE0, 0x6A05, - 0x9EE1, 0x69B1, 0x9EE2, 0x6A1E, 0x9EE3, 0x69ED, 0x9EE4, 0x6A14, - 0x9EE5, 0x69EB, 0x9EE6, 0x6A0A, 0x9EE7, 0x6A12, 0x9EE8, 0x6AC1, - 0x9EE9, 0x6A23, 0x9EEA, 0x6A13, 0x9EEB, 0x6A44, 0x9EEC, 0x6A0C, - 0x9EED, 0x6A72, 0x9EEE, 0x6A36, 0x9EEF, 0x6A78, 0x9EF0, 0x6A47, - 0x9EF1, 0x6A62, 0x9EF2, 0x6A59, 0x9EF3, 0x6A66, 0x9EF4, 0x6A48, - 0x9EF5, 0x6A38, 0x9EF6, 0x6A22, 0x9EF7, 0x6A90, 0x9EF8, 0x6A8D, - 0x9EF9, 0x6AA0, 0x9EFA, 0x6A84, 0x9EFB, 0x6AA2, 0x9EFC, 0x6AA3, - 0x9F40, 0x6A97, 0x9F41, 0x8617, 0x9F42, 0x6ABB, 0x9F43, 0x6AC3, - 0x9F44, 0x6AC2, 0x9F45, 0x6AB8, 0x9F46, 0x6AB3, 0x9F47, 0x6AAC, - 0x9F48, 0x6ADE, 0x9F49, 0x6AD1, 0x9F4A, 0x6ADF, 0x9F4B, 0x6AAA, - 0x9F4C, 0x6ADA, 0x9F4D, 0x6AEA, 0x9F4E, 0x6AFB, 0x9F4F, 0x6B05, - 0x9F50, 0x8616, 0x9F51, 0x6AFA, 0x9F52, 0x6B12, 0x9F53, 0x6B16, - 0x9F54, 0x9B31, 0x9F55, 0x6B1F, 0x9F56, 0x6B38, 0x9F57, 0x6B37, - 0x9F58, 0x76DC, 0x9F59, 0x6B39, 0x9F5A, 0x98EE, 0x9F5B, 0x6B47, - 0x9F5C, 0x6B43, 0x9F5D, 0x6B49, 0x9F5E, 0x6B50, 0x9F5F, 0x6B59, - 0x9F60, 0x6B54, 0x9F61, 0x6B5B, 0x9F62, 0x6B5F, 0x9F63, 0x6B61, - 0x9F64, 0x6B78, 0x9F65, 0x6B79, 0x9F66, 0x6B7F, 0x9F67, 0x6B80, - 0x9F68, 0x6B84, 0x9F69, 0x6B83, 0x9F6A, 0x6B8D, 0x9F6B, 0x6B98, - 0x9F6C, 0x6B95, 0x9F6D, 0x6B9E, 0x9F6E, 0x6BA4, 0x9F6F, 0x6BAA, - 0x9F70, 0x6BAB, 0x9F71, 0x6BAF, 0x9F72, 0x6BB2, 0x9F73, 0x6BB1, - 0x9F74, 0x6BB3, 0x9F75, 0x6BB7, 0x9F76, 0x6BBC, 0x9F77, 0x6BC6, - 0x9F78, 0x6BCB, 0x9F79, 0x6BD3, 0x9F7A, 0x6BDF, 0x9F7B, 0x6BEC, - 0x9F7C, 0x6BEB, 0x9F7D, 0x6BF3, 0x9F7E, 0x6BEF, 0x9F80, 0x9EBE, - 0x9F81, 0x6C08, 0x9F82, 0x6C13, 0x9F83, 0x6C14, 0x9F84, 0x6C1B, - 0x9F85, 0x6C24, 0x9F86, 0x6C23, 0x9F87, 0x6C5E, 0x9F88, 0x6C55, - 0x9F89, 0x6C62, 0x9F8A, 0x6C6A, 0x9F8B, 0x6C82, 0x9F8C, 0x6C8D, - 0x9F8D, 0x6C9A, 0x9F8E, 0x6C81, 0x9F8F, 0x6C9B, 0x9F90, 0x6C7E, - 0x9F91, 0x6C68, 0x9F92, 0x6C73, 0x9F93, 0x6C92, 0x9F94, 0x6C90, - 0x9F95, 0x6CC4, 0x9F96, 0x6CF1, 0x9F97, 0x6CD3, 0x9F98, 0x6CBD, - 0x9F99, 0x6CD7, 0x9F9A, 0x6CC5, 0x9F9B, 0x6CDD, 0x9F9C, 0x6CAE, - 0x9F9D, 0x6CB1, 0x9F9E, 0x6CBE, 0x9F9F, 0x6CBA, 0x9FA0, 0x6CDB, - 0x9FA1, 0x6CEF, 0x9FA2, 0x6CD9, 0x9FA3, 0x6CEA, 0x9FA4, 0x6D1F, - 0x9FA5, 0x884D, 0x9FA6, 0x6D36, 0x9FA7, 0x6D2B, 0x9FA8, 0x6D3D, - 0x9FA9, 0x6D38, 0x9FAA, 0x6D19, 0x9FAB, 0x6D35, 0x9FAC, 0x6D33, - 0x9FAD, 0x6D12, 0x9FAE, 0x6D0C, 0x9FAF, 0x6D63, 0x9FB0, 0x6D93, - 0x9FB1, 0x6D64, 0x9FB2, 0x6D5A, 0x9FB3, 0x6D79, 0x9FB4, 0x6D59, - 0x9FB5, 0x6D8E, 0x9FB6, 0x6D95, 0x9FB7, 0x6FE4, 0x9FB8, 0x6D85, - 0x9FB9, 0x6DF9, 0x9FBA, 0x6E15, 0x9FBB, 0x6E0A, 0x9FBC, 0x6DB5, - 0x9FBD, 0x6DC7, 0x9FBE, 0x6DE6, 0x9FBF, 0x6DB8, 0x9FC0, 0x6DC6, - 0x9FC1, 0x6DEC, 0x9FC2, 0x6DDE, 0x9FC3, 0x6DCC, 0x9FC4, 0x6DE8, - 0x9FC5, 0x6DD2, 0x9FC6, 0x6DC5, 0x9FC7, 0x6DFA, 0x9FC8, 0x6DD9, - 0x9FC9, 0x6DE4, 0x9FCA, 0x6DD5, 0x9FCB, 0x6DEA, 0x9FCC, 0x6DEE, - 0x9FCD, 0x6E2D, 0x9FCE, 0x6E6E, 0x9FCF, 0x6E2E, 0x9FD0, 0x6E19, - 0x9FD1, 0x6E72, 0x9FD2, 0x6E5F, 0x9FD3, 0x6E3E, 0x9FD4, 0x6E23, - 0x9FD5, 0x6E6B, 0x9FD6, 0x6E2B, 0x9FD7, 0x6E76, 0x9FD8, 0x6E4D, - 0x9FD9, 0x6E1F, 0x9FDA, 0x6E43, 0x9FDB, 0x6E3A, 0x9FDC, 0x6E4E, - 0x9FDD, 0x6E24, 0x9FDE, 0x6EFF, 0x9FDF, 0x6E1D, 0x9FE0, 0x6E38, - 0x9FE1, 0x6E82, 0x9FE2, 0x6EAA, 0x9FE3, 0x6E98, 0x9FE4, 0x6EC9, - 0x9FE5, 0x6EB7, 0x9FE6, 0x6ED3, 0x9FE7, 0x6EBD, 0x9FE8, 0x6EAF, - 0x9FE9, 0x6EC4, 0x9FEA, 0x6EB2, 0x9FEB, 0x6ED4, 0x9FEC, 0x6ED5, - 0x9FED, 0x6E8F, 0x9FEE, 0x6EA5, 0x9FEF, 0x6EC2, 0x9FF0, 0x6E9F, - 0x9FF1, 0x6F41, 0x9FF2, 0x6F11, 0x9FF3, 0x704C, 0x9FF4, 0x6EEC, - 0x9FF5, 0x6EF8, 0x9FF6, 0x6EFE, 0x9FF7, 0x6F3F, 0x9FF8, 0x6EF2, - 0x9FF9, 0x6F31, 0x9FFA, 0x6EEF, 0x9FFB, 0x6F32, 0x9FFC, 0x6ECC, - 0xE040, 0x6F3E, 0xE041, 0x6F13, 0xE042, 0x6EF7, 0xE043, 0x6F86, - 0xE044, 0x6F7A, 0xE045, 0x6F78, 0xE046, 0x6F81, 0xE047, 0x6F80, - 0xE048, 0x6F6F, 0xE049, 0x6F5B, 0xE04A, 0x6FF3, 0xE04B, 0x6F6D, - 0xE04C, 0x6F82, 0xE04D, 0x6F7C, 0xE04E, 0x6F58, 0xE04F, 0x6F8E, - 0xE050, 0x6F91, 0xE051, 0x6FC2, 0xE052, 0x6F66, 0xE053, 0x6FB3, - 0xE054, 0x6FA3, 0xE055, 0x6FA1, 0xE056, 0x6FA4, 0xE057, 0x6FB9, - 0xE058, 0x6FC6, 0xE059, 0x6FAA, 0xE05A, 0x6FDF, 0xE05B, 0x6FD5, - 0xE05C, 0x6FEC, 0xE05D, 0x6FD4, 0xE05E, 0x6FD8, 0xE05F, 0x6FF1, - 0xE060, 0x6FEE, 0xE061, 0x6FDB, 0xE062, 0x7009, 0xE063, 0x700B, - 0xE064, 0x6FFA, 0xE065, 0x7011, 0xE066, 0x7001, 0xE067, 0x700F, - 0xE068, 0x6FFE, 0xE069, 0x701B, 0xE06A, 0x701A, 0xE06B, 0x6F74, - 0xE06C, 0x701D, 0xE06D, 0x7018, 0xE06E, 0x701F, 0xE06F, 0x7030, - 0xE070, 0x703E, 0xE071, 0x7032, 0xE072, 0x7051, 0xE073, 0x7063, - 0xE074, 0x7099, 0xE075, 0x7092, 0xE076, 0x70AF, 0xE077, 0x70F1, - 0xE078, 0x70AC, 0xE079, 0x70B8, 0xE07A, 0x70B3, 0xE07B, 0x70AE, - 0xE07C, 0x70DF, 0xE07D, 0x70CB, 0xE07E, 0x70DD, 0xE080, 0x70D9, - 0xE081, 0x7109, 0xE082, 0x70FD, 0xE083, 0x711C, 0xE084, 0x7119, - 0xE085, 0x7165, 0xE086, 0x7155, 0xE087, 0x7188, 0xE088, 0x7166, - 0xE089, 0x7162, 0xE08A, 0x714C, 0xE08B, 0x7156, 0xE08C, 0x716C, - 0xE08D, 0x718F, 0xE08E, 0x71FB, 0xE08F, 0x7184, 0xE090, 0x7195, - 0xE091, 0x71A8, 0xE092, 0x71AC, 0xE093, 0x71D7, 0xE094, 0x71B9, - 0xE095, 0x71BE, 0xE096, 0x71D2, 0xE097, 0x71C9, 0xE098, 0x71D4, - 0xE099, 0x71CE, 0xE09A, 0x71E0, 0xE09B, 0x71EC, 0xE09C, 0x71E7, - 0xE09D, 0x71F5, 0xE09E, 0x71FC, 0xE09F, 0x71F9, 0xE0A0, 0x71FF, - 0xE0A1, 0x720D, 0xE0A2, 0x7210, 0xE0A3, 0x721B, 0xE0A4, 0x7228, - 0xE0A5, 0x722D, 0xE0A6, 0x722C, 0xE0A7, 0x7230, 0xE0A8, 0x7232, - 0xE0A9, 0x723B, 0xE0AA, 0x723C, 0xE0AB, 0x723F, 0xE0AC, 0x7240, - 0xE0AD, 0x7246, 0xE0AE, 0x724B, 0xE0AF, 0x7258, 0xE0B0, 0x7274, - 0xE0B1, 0x727E, 0xE0B2, 0x7282, 0xE0B3, 0x7281, 0xE0B4, 0x7287, - 0xE0B5, 0x7292, 0xE0B6, 0x7296, 0xE0B7, 0x72A2, 0xE0B8, 0x72A7, - 0xE0B9, 0x72B9, 0xE0BA, 0x72B2, 0xE0BB, 0x72C3, 0xE0BC, 0x72C6, - 0xE0BD, 0x72C4, 0xE0BE, 0x72CE, 0xE0BF, 0x72D2, 0xE0C0, 0x72E2, - 0xE0C1, 0x72E0, 0xE0C2, 0x72E1, 0xE0C3, 0x72F9, 0xE0C4, 0x72F7, - 0xE0C5, 0x500F, 0xE0C6, 0x7317, 0xE0C7, 0x730A, 0xE0C8, 0x731C, - 0xE0C9, 0x7316, 0xE0CA, 0x731D, 0xE0CB, 0x7334, 0xE0CC, 0x732F, - 0xE0CD, 0x7329, 0xE0CE, 0x7325, 0xE0CF, 0x733E, 0xE0D0, 0x734E, - 0xE0D1, 0x734F, 0xE0D2, 0x9ED8, 0xE0D3, 0x7357, 0xE0D4, 0x736A, - 0xE0D5, 0x7368, 0xE0D6, 0x7370, 0xE0D7, 0x7378, 0xE0D8, 0x7375, - 0xE0D9, 0x737B, 0xE0DA, 0x737A, 0xE0DB, 0x73C8, 0xE0DC, 0x73B3, - 0xE0DD, 0x73CE, 0xE0DE, 0x73BB, 0xE0DF, 0x73C0, 0xE0E0, 0x73E5, - 0xE0E1, 0x73EE, 0xE0E2, 0x73DE, 0xE0E3, 0x74A2, 0xE0E4, 0x7405, - 0xE0E5, 0x746F, 0xE0E6, 0x7425, 0xE0E7, 0x73F8, 0xE0E8, 0x7432, - 0xE0E9, 0x743A, 0xE0EA, 0x7455, 0xE0EB, 0x743F, 0xE0EC, 0x745F, - 0xE0ED, 0x7459, 0xE0EE, 0x7441, 0xE0EF, 0x745C, 0xE0F0, 0x7469, - 0xE0F1, 0x7470, 0xE0F2, 0x7463, 0xE0F3, 0x746A, 0xE0F4, 0x7476, - 0xE0F5, 0x747E, 0xE0F6, 0x748B, 0xE0F7, 0x749E, 0xE0F8, 0x74A7, - 0xE0F9, 0x74CA, 0xE0FA, 0x74CF, 0xE0FB, 0x74D4, 0xE0FC, 0x73F1, - 0xE140, 0x74E0, 0xE141, 0x74E3, 0xE142, 0x74E7, 0xE143, 0x74E9, - 0xE144, 0x74EE, 0xE145, 0x74F2, 0xE146, 0x74F0, 0xE147, 0x74F1, - 0xE148, 0x74F8, 0xE149, 0x74F7, 0xE14A, 0x7504, 0xE14B, 0x7503, - 0xE14C, 0x7505, 0xE14D, 0x750C, 0xE14E, 0x750E, 0xE14F, 0x750D, - 0xE150, 0x7515, 0xE151, 0x7513, 0xE152, 0x751E, 0xE153, 0x7526, - 0xE154, 0x752C, 0xE155, 0x753C, 0xE156, 0x7544, 0xE157, 0x754D, - 0xE158, 0x754A, 0xE159, 0x7549, 0xE15A, 0x755B, 0xE15B, 0x7546, - 0xE15C, 0x755A, 0xE15D, 0x7569, 0xE15E, 0x7564, 0xE15F, 0x7567, - 0xE160, 0x756B, 0xE161, 0x756D, 0xE162, 0x7578, 0xE163, 0x7576, - 0xE164, 0x7586, 0xE165, 0x7587, 0xE166, 0x7574, 0xE167, 0x758A, - 0xE168, 0x7589, 0xE169, 0x7582, 0xE16A, 0x7594, 0xE16B, 0x759A, - 0xE16C, 0x759D, 0xE16D, 0x75A5, 0xE16E, 0x75A3, 0xE16F, 0x75C2, - 0xE170, 0x75B3, 0xE171, 0x75C3, 0xE172, 0x75B5, 0xE173, 0x75BD, - 0xE174, 0x75B8, 0xE175, 0x75BC, 0xE176, 0x75B1, 0xE177, 0x75CD, - 0xE178, 0x75CA, 0xE179, 0x75D2, 0xE17A, 0x75D9, 0xE17B, 0x75E3, - 0xE17C, 0x75DE, 0xE17D, 0x75FE, 0xE17E, 0x75FF, 0xE180, 0x75FC, - 0xE181, 0x7601, 0xE182, 0x75F0, 0xE183, 0x75FA, 0xE184, 0x75F2, - 0xE185, 0x75F3, 0xE186, 0x760B, 0xE187, 0x760D, 0xE188, 0x7609, - 0xE189, 0x761F, 0xE18A, 0x7627, 0xE18B, 0x7620, 0xE18C, 0x7621, - 0xE18D, 0x7622, 0xE18E, 0x7624, 0xE18F, 0x7634, 0xE190, 0x7630, - 0xE191, 0x763B, 0xE192, 0x7647, 0xE193, 0x7648, 0xE194, 0x7646, - 0xE195, 0x765C, 0xE196, 0x7658, 0xE197, 0x7661, 0xE198, 0x7662, - 0xE199, 0x7668, 0xE19A, 0x7669, 0xE19B, 0x766A, 0xE19C, 0x7667, - 0xE19D, 0x766C, 0xE19E, 0x7670, 0xE19F, 0x7672, 0xE1A0, 0x7676, - 0xE1A1, 0x7678, 0xE1A2, 0x767C, 0xE1A3, 0x7680, 0xE1A4, 0x7683, - 0xE1A5, 0x7688, 0xE1A6, 0x768B, 0xE1A7, 0x768E, 0xE1A8, 0x7696, - 0xE1A9, 0x7693, 0xE1AA, 0x7699, 0xE1AB, 0x769A, 0xE1AC, 0x76B0, - 0xE1AD, 0x76B4, 0xE1AE, 0x76B8, 0xE1AF, 0x76B9, 0xE1B0, 0x76BA, - 0xE1B1, 0x76C2, 0xE1B2, 0x76CD, 0xE1B3, 0x76D6, 0xE1B4, 0x76D2, - 0xE1B5, 0x76DE, 0xE1B6, 0x76E1, 0xE1B7, 0x76E5, 0xE1B8, 0x76E7, - 0xE1B9, 0x76EA, 0xE1BA, 0x862F, 0xE1BB, 0x76FB, 0xE1BC, 0x7708, - 0xE1BD, 0x7707, 0xE1BE, 0x7704, 0xE1BF, 0x7729, 0xE1C0, 0x7724, - 0xE1C1, 0x771E, 0xE1C2, 0x7725, 0xE1C3, 0x7726, 0xE1C4, 0x771B, - 0xE1C5, 0x7737, 0xE1C6, 0x7738, 0xE1C7, 0x7747, 0xE1C8, 0x775A, - 0xE1C9, 0x7768, 0xE1CA, 0x776B, 0xE1CB, 0x775B, 0xE1CC, 0x7765, - 0xE1CD, 0x777F, 0xE1CE, 0x777E, 0xE1CF, 0x7779, 0xE1D0, 0x778E, - 0xE1D1, 0x778B, 0xE1D2, 0x7791, 0xE1D3, 0x77A0, 0xE1D4, 0x779E, - 0xE1D5, 0x77B0, 0xE1D6, 0x77B6, 0xE1D7, 0x77B9, 0xE1D8, 0x77BF, - 0xE1D9, 0x77BC, 0xE1DA, 0x77BD, 0xE1DB, 0x77BB, 0xE1DC, 0x77C7, - 0xE1DD, 0x77CD, 0xE1DE, 0x77D7, 0xE1DF, 0x77DA, 0xE1E0, 0x77DC, - 0xE1E1, 0x77E3, 0xE1E2, 0x77EE, 0xE1E3, 0x77FC, 0xE1E4, 0x780C, - 0xE1E5, 0x7812, 0xE1E6, 0x7926, 0xE1E7, 0x7820, 0xE1E8, 0x792A, - 0xE1E9, 0x7845, 0xE1EA, 0x788E, 0xE1EB, 0x7874, 0xE1EC, 0x7886, - 0xE1ED, 0x787C, 0xE1EE, 0x789A, 0xE1EF, 0x788C, 0xE1F0, 0x78A3, - 0xE1F1, 0x78B5, 0xE1F2, 0x78AA, 0xE1F3, 0x78AF, 0xE1F4, 0x78D1, - 0xE1F5, 0x78C6, 0xE1F6, 0x78CB, 0xE1F7, 0x78D4, 0xE1F8, 0x78BE, - 0xE1F9, 0x78BC, 0xE1FA, 0x78C5, 0xE1FB, 0x78CA, 0xE1FC, 0x78EC, - 0xE240, 0x78E7, 0xE241, 0x78DA, 0xE242, 0x78FD, 0xE243, 0x78F4, - 0xE244, 0x7907, 0xE245, 0x7912, 0xE246, 0x7911, 0xE247, 0x7919, - 0xE248, 0x792C, 0xE249, 0x792B, 0xE24A, 0x7940, 0xE24B, 0x7960, - 0xE24C, 0x7957, 0xE24D, 0x795F, 0xE24E, 0x795A, 0xE24F, 0x7955, - 0xE250, 0x7953, 0xE251, 0x797A, 0xE252, 0x797F, 0xE253, 0x798A, - 0xE254, 0x799D, 0xE255, 0x79A7, 0xE256, 0x9F4B, 0xE257, 0x79AA, - 0xE258, 0x79AE, 0xE259, 0x79B3, 0xE25A, 0x79B9, 0xE25B, 0x79BA, - 0xE25C, 0x79C9, 0xE25D, 0x79D5, 0xE25E, 0x79E7, 0xE25F, 0x79EC, - 0xE260, 0x79E1, 0xE261, 0x79E3, 0xE262, 0x7A08, 0xE263, 0x7A0D, - 0xE264, 0x7A18, 0xE265, 0x7A19, 0xE266, 0x7A20, 0xE267, 0x7A1F, - 0xE268, 0x7980, 0xE269, 0x7A31, 0xE26A, 0x7A3B, 0xE26B, 0x7A3E, - 0xE26C, 0x7A37, 0xE26D, 0x7A43, 0xE26E, 0x7A57, 0xE26F, 0x7A49, - 0xE270, 0x7A61, 0xE271, 0x7A62, 0xE272, 0x7A69, 0xE273, 0x9F9D, - 0xE274, 0x7A70, 0xE275, 0x7A79, 0xE276, 0x7A7D, 0xE277, 0x7A88, - 0xE278, 0x7A97, 0xE279, 0x7A95, 0xE27A, 0x7A98, 0xE27B, 0x7A96, - 0xE27C, 0x7AA9, 0xE27D, 0x7AC8, 0xE27E, 0x7AB0, 0xE280, 0x7AB6, - 0xE281, 0x7AC5, 0xE282, 0x7AC4, 0xE283, 0x7ABF, 0xE284, 0x9083, - 0xE285, 0x7AC7, 0xE286, 0x7ACA, 0xE287, 0x7ACD, 0xE288, 0x7ACF, - 0xE289, 0x7AD5, 0xE28A, 0x7AD3, 0xE28B, 0x7AD9, 0xE28C, 0x7ADA, - 0xE28D, 0x7ADD, 0xE28E, 0x7AE1, 0xE28F, 0x7AE2, 0xE290, 0x7AE6, - 0xE291, 0x7AED, 0xE292, 0x7AF0, 0xE293, 0x7B02, 0xE294, 0x7B0F, - 0xE295, 0x7B0A, 0xE296, 0x7B06, 0xE297, 0x7B33, 0xE298, 0x7B18, - 0xE299, 0x7B19, 0xE29A, 0x7B1E, 0xE29B, 0x7B35, 0xE29C, 0x7B28, - 0xE29D, 0x7B36, 0xE29E, 0x7B50, 0xE29F, 0x7B7A, 0xE2A0, 0x7B04, - 0xE2A1, 0x7B4D, 0xE2A2, 0x7B0B, 0xE2A3, 0x7B4C, 0xE2A4, 0x7B45, - 0xE2A5, 0x7B75, 0xE2A6, 0x7B65, 0xE2A7, 0x7B74, 0xE2A8, 0x7B67, - 0xE2A9, 0x7B70, 0xE2AA, 0x7B71, 0xE2AB, 0x7B6C, 0xE2AC, 0x7B6E, - 0xE2AD, 0x7B9D, 0xE2AE, 0x7B98, 0xE2AF, 0x7B9F, 0xE2B0, 0x7B8D, - 0xE2B1, 0x7B9C, 0xE2B2, 0x7B9A, 0xE2B3, 0x7B8B, 0xE2B4, 0x7B92, - 0xE2B5, 0x7B8F, 0xE2B6, 0x7B5D, 0xE2B7, 0x7B99, 0xE2B8, 0x7BCB, - 0xE2B9, 0x7BC1, 0xE2BA, 0x7BCC, 0xE2BB, 0x7BCF, 0xE2BC, 0x7BB4, - 0xE2BD, 0x7BC6, 0xE2BE, 0x7BDD, 0xE2BF, 0x7BE9, 0xE2C0, 0x7C11, - 0xE2C1, 0x7C14, 0xE2C2, 0x7BE6, 0xE2C3, 0x7BE5, 0xE2C4, 0x7C60, - 0xE2C5, 0x7C00, 0xE2C6, 0x7C07, 0xE2C7, 0x7C13, 0xE2C8, 0x7BF3, - 0xE2C9, 0x7BF7, 0xE2CA, 0x7C17, 0xE2CB, 0x7C0D, 0xE2CC, 0x7BF6, - 0xE2CD, 0x7C23, 0xE2CE, 0x7C27, 0xE2CF, 0x7C2A, 0xE2D0, 0x7C1F, - 0xE2D1, 0x7C37, 0xE2D2, 0x7C2B, 0xE2D3, 0x7C3D, 0xE2D4, 0x7C4C, - 0xE2D5, 0x7C43, 0xE2D6, 0x7C54, 0xE2D7, 0x7C4F, 0xE2D8, 0x7C40, - 0xE2D9, 0x7C50, 0xE2DA, 0x7C58, 0xE2DB, 0x7C5F, 0xE2DC, 0x7C64, - 0xE2DD, 0x7C56, 0xE2DE, 0x7C65, 0xE2DF, 0x7C6C, 0xE2E0, 0x7C75, - 0xE2E1, 0x7C83, 0xE2E2, 0x7C90, 0xE2E3, 0x7CA4, 0xE2E4, 0x7CAD, - 0xE2E5, 0x7CA2, 0xE2E6, 0x7CAB, 0xE2E7, 0x7CA1, 0xE2E8, 0x7CA8, - 0xE2E9, 0x7CB3, 0xE2EA, 0x7CB2, 0xE2EB, 0x7CB1, 0xE2EC, 0x7CAE, - 0xE2ED, 0x7CB9, 0xE2EE, 0x7CBD, 0xE2EF, 0x7CC0, 0xE2F0, 0x7CC5, - 0xE2F1, 0x7CC2, 0xE2F2, 0x7CD8, 0xE2F3, 0x7CD2, 0xE2F4, 0x7CDC, - 0xE2F5, 0x7CE2, 0xE2F6, 0x9B3B, 0xE2F7, 0x7CEF, 0xE2F8, 0x7CF2, - 0xE2F9, 0x7CF4, 0xE2FA, 0x7CF6, 0xE2FB, 0x7CFA, 0xE2FC, 0x7D06, - 0xE340, 0x7D02, 0xE341, 0x7D1C, 0xE342, 0x7D15, 0xE343, 0x7D0A, - 0xE344, 0x7D45, 0xE345, 0x7D4B, 0xE346, 0x7D2E, 0xE347, 0x7D32, - 0xE348, 0x7D3F, 0xE349, 0x7D35, 0xE34A, 0x7D46, 0xE34B, 0x7D73, - 0xE34C, 0x7D56, 0xE34D, 0x7D4E, 0xE34E, 0x7D72, 0xE34F, 0x7D68, - 0xE350, 0x7D6E, 0xE351, 0x7D4F, 0xE352, 0x7D63, 0xE353, 0x7D93, - 0xE354, 0x7D89, 0xE355, 0x7D5B, 0xE356, 0x7D8F, 0xE357, 0x7D7D, - 0xE358, 0x7D9B, 0xE359, 0x7DBA, 0xE35A, 0x7DAE, 0xE35B, 0x7DA3, - 0xE35C, 0x7DB5, 0xE35D, 0x7DC7, 0xE35E, 0x7DBD, 0xE35F, 0x7DAB, - 0xE360, 0x7E3D, 0xE361, 0x7DA2, 0xE362, 0x7DAF, 0xE363, 0x7DDC, - 0xE364, 0x7DB8, 0xE365, 0x7D9F, 0xE366, 0x7DB0, 0xE367, 0x7DD8, - 0xE368, 0x7DDD, 0xE369, 0x7DE4, 0xE36A, 0x7DDE, 0xE36B, 0x7DFB, - 0xE36C, 0x7DF2, 0xE36D, 0x7DE1, 0xE36E, 0x7E05, 0xE36F, 0x7E0A, - 0xE370, 0x7E23, 0xE371, 0x7E21, 0xE372, 0x7E12, 0xE373, 0x7E31, - 0xE374, 0x7E1F, 0xE375, 0x7E09, 0xE376, 0x7E0B, 0xE377, 0x7E22, - 0xE378, 0x7E46, 0xE379, 0x7E66, 0xE37A, 0x7E3B, 0xE37B, 0x7E35, - 0xE37C, 0x7E39, 0xE37D, 0x7E43, 0xE37E, 0x7E37, 0xE380, 0x7E32, - 0xE381, 0x7E3A, 0xE382, 0x7E67, 0xE383, 0x7E5D, 0xE384, 0x7E56, - 0xE385, 0x7E5E, 0xE386, 0x7E59, 0xE387, 0x7E5A, 0xE388, 0x7E79, - 0xE389, 0x7E6A, 0xE38A, 0x7E69, 0xE38B, 0x7E7C, 0xE38C, 0x7E7B, - 0xE38D, 0x7E83, 0xE38E, 0x7DD5, 0xE38F, 0x7E7D, 0xE390, 0x8FAE, - 0xE391, 0x7E7F, 0xE392, 0x7E88, 0xE393, 0x7E89, 0xE394, 0x7E8C, - 0xE395, 0x7E92, 0xE396, 0x7E90, 0xE397, 0x7E93, 0xE398, 0x7E94, - 0xE399, 0x7E96, 0xE39A, 0x7E8E, 0xE39B, 0x7E9B, 0xE39C, 0x7E9C, - 0xE39D, 0x7F38, 0xE39E, 0x7F3A, 0xE39F, 0x7F45, 0xE3A0, 0x7F4C, - 0xE3A1, 0x7F4D, 0xE3A2, 0x7F4E, 0xE3A3, 0x7F50, 0xE3A4, 0x7F51, - 0xE3A5, 0x7F55, 0xE3A6, 0x7F54, 0xE3A7, 0x7F58, 0xE3A8, 0x7F5F, - 0xE3A9, 0x7F60, 0xE3AA, 0x7F68, 0xE3AB, 0x7F69, 0xE3AC, 0x7F67, - 0xE3AD, 0x7F78, 0xE3AE, 0x7F82, 0xE3AF, 0x7F86, 0xE3B0, 0x7F83, - 0xE3B1, 0x7F88, 0xE3B2, 0x7F87, 0xE3B3, 0x7F8C, 0xE3B4, 0x7F94, - 0xE3B5, 0x7F9E, 0xE3B6, 0x7F9D, 0xE3B7, 0x7F9A, 0xE3B8, 0x7FA3, - 0xE3B9, 0x7FAF, 0xE3BA, 0x7FB2, 0xE3BB, 0x7FB9, 0xE3BC, 0x7FAE, - 0xE3BD, 0x7FB6, 0xE3BE, 0x7FB8, 0xE3BF, 0x8B71, 0xE3C0, 0x7FC5, - 0xE3C1, 0x7FC6, 0xE3C2, 0x7FCA, 0xE3C3, 0x7FD5, 0xE3C4, 0x7FD4, - 0xE3C5, 0x7FE1, 0xE3C6, 0x7FE6, 0xE3C7, 0x7FE9, 0xE3C8, 0x7FF3, - 0xE3C9, 0x7FF9, 0xE3CA, 0x98DC, 0xE3CB, 0x8006, 0xE3CC, 0x8004, - 0xE3CD, 0x800B, 0xE3CE, 0x8012, 0xE3CF, 0x8018, 0xE3D0, 0x8019, - 0xE3D1, 0x801C, 0xE3D2, 0x8021, 0xE3D3, 0x8028, 0xE3D4, 0x803F, - 0xE3D5, 0x803B, 0xE3D6, 0x804A, 0xE3D7, 0x8046, 0xE3D8, 0x8052, - 0xE3D9, 0x8058, 0xE3DA, 0x805A, 0xE3DB, 0x805F, 0xE3DC, 0x8062, - 0xE3DD, 0x8068, 0xE3DE, 0x8073, 0xE3DF, 0x8072, 0xE3E0, 0x8070, - 0xE3E1, 0x8076, 0xE3E2, 0x8079, 0xE3E3, 0x807D, 0xE3E4, 0x807F, - 0xE3E5, 0x8084, 0xE3E6, 0x8086, 0xE3E7, 0x8085, 0xE3E8, 0x809B, - 0xE3E9, 0x8093, 0xE3EA, 0x809A, 0xE3EB, 0x80AD, 0xE3EC, 0x5190, - 0xE3ED, 0x80AC, 0xE3EE, 0x80DB, 0xE3EF, 0x80E5, 0xE3F0, 0x80D9, - 0xE3F1, 0x80DD, 0xE3F2, 0x80C4, 0xE3F3, 0x80DA, 0xE3F4, 0x80D6, - 0xE3F5, 0x8109, 0xE3F6, 0x80EF, 0xE3F7, 0x80F1, 0xE3F8, 0x811B, - 0xE3F9, 0x8129, 0xE3FA, 0x8123, 0xE3FB, 0x812F, 0xE3FC, 0x814B, - 0xE440, 0x968B, 0xE441, 0x8146, 0xE442, 0x813E, 0xE443, 0x8153, - 0xE444, 0x8151, 0xE445, 0x80FC, 0xE446, 0x8171, 0xE447, 0x816E, - 0xE448, 0x8165, 0xE449, 0x8166, 0xE44A, 0x8174, 0xE44B, 0x8183, - 0xE44C, 0x8188, 0xE44D, 0x818A, 0xE44E, 0x8180, 0xE44F, 0x8182, - 0xE450, 0x81A0, 0xE451, 0x8195, 0xE452, 0x81A4, 0xE453, 0x81A3, - 0xE454, 0x815F, 0xE455, 0x8193, 0xE456, 0x81A9, 0xE457, 0x81B0, - 0xE458, 0x81B5, 0xE459, 0x81BE, 0xE45A, 0x81B8, 0xE45B, 0x81BD, - 0xE45C, 0x81C0, 0xE45D, 0x81C2, 0xE45E, 0x81BA, 0xE45F, 0x81C9, - 0xE460, 0x81CD, 0xE461, 0x81D1, 0xE462, 0x81D9, 0xE463, 0x81D8, - 0xE464, 0x81C8, 0xE465, 0x81DA, 0xE466, 0x81DF, 0xE467, 0x81E0, - 0xE468, 0x81E7, 0xE469, 0x81FA, 0xE46A, 0x81FB, 0xE46B, 0x81FE, - 0xE46C, 0x8201, 0xE46D, 0x8202, 0xE46E, 0x8205, 0xE46F, 0x8207, - 0xE470, 0x820A, 0xE471, 0x820D, 0xE472, 0x8210, 0xE473, 0x8216, - 0xE474, 0x8229, 0xE475, 0x822B, 0xE476, 0x8238, 0xE477, 0x8233, - 0xE478, 0x8240, 0xE479, 0x8259, 0xE47A, 0x8258, 0xE47B, 0x825D, - 0xE47C, 0x825A, 0xE47D, 0x825F, 0xE47E, 0x8264, 0xE480, 0x8262, - 0xE481, 0x8268, 0xE482, 0x826A, 0xE483, 0x826B, 0xE484, 0x822E, - 0xE485, 0x8271, 0xE486, 0x8277, 0xE487, 0x8278, 0xE488, 0x827E, - 0xE489, 0x828D, 0xE48A, 0x8292, 0xE48B, 0x82AB, 0xE48C, 0x829F, - 0xE48D, 0x82BB, 0xE48E, 0x82AC, 0xE48F, 0x82E1, 0xE490, 0x82E3, - 0xE491, 0x82DF, 0xE492, 0x82D2, 0xE493, 0x82F4, 0xE494, 0x82F3, - 0xE495, 0x82FA, 0xE496, 0x8393, 0xE497, 0x8303, 0xE498, 0x82FB, - 0xE499, 0x82F9, 0xE49A, 0x82DE, 0xE49B, 0x8306, 0xE49C, 0x82DC, - 0xE49D, 0x8309, 0xE49E, 0x82D9, 0xE49F, 0x8335, 0xE4A0, 0x8334, - 0xE4A1, 0x8316, 0xE4A2, 0x8332, 0xE4A3, 0x8331, 0xE4A4, 0x8340, - 0xE4A5, 0x8339, 0xE4A6, 0x8350, 0xE4A7, 0x8345, 0xE4A8, 0x832F, - 0xE4A9, 0x832B, 0xE4AA, 0x8317, 0xE4AB, 0x8318, 0xE4AC, 0x8385, - 0xE4AD, 0x839A, 0xE4AE, 0x83AA, 0xE4AF, 0x839F, 0xE4B0, 0x83A2, - 0xE4B1, 0x8396, 0xE4B2, 0x8323, 0xE4B3, 0x838E, 0xE4B4, 0x8387, - 0xE4B5, 0x838A, 0xE4B6, 0x837C, 0xE4B7, 0x83B5, 0xE4B8, 0x8373, - 0xE4B9, 0x8375, 0xE4BA, 0x83A0, 0xE4BB, 0x8389, 0xE4BC, 0x83A8, - 0xE4BD, 0x83F4, 0xE4BE, 0x8413, 0xE4BF, 0x83EB, 0xE4C0, 0x83CE, - 0xE4C1, 0x83FD, 0xE4C2, 0x8403, 0xE4C3, 0x83D8, 0xE4C4, 0x840B, - 0xE4C5, 0x83C1, 0xE4C6, 0x83F7, 0xE4C7, 0x8407, 0xE4C8, 0x83E0, - 0xE4C9, 0x83F2, 0xE4CA, 0x840D, 0xE4CB, 0x8422, 0xE4CC, 0x8420, - 0xE4CD, 0x83BD, 0xE4CE, 0x8438, 0xE4CF, 0x8506, 0xE4D0, 0x83FB, - 0xE4D1, 0x846D, 0xE4D2, 0x842A, 0xE4D3, 0x843C, 0xE4D4, 0x855A, - 0xE4D5, 0x8484, 0xE4D6, 0x8477, 0xE4D7, 0x846B, 0xE4D8, 0x84AD, - 0xE4D9, 0x846E, 0xE4DA, 0x8482, 0xE4DB, 0x8469, 0xE4DC, 0x8446, - 0xE4DD, 0x842C, 0xE4DE, 0x846F, 0xE4DF, 0x8479, 0xE4E0, 0x8435, - 0xE4E1, 0x84CA, 0xE4E2, 0x8462, 0xE4E3, 0x84B9, 0xE4E4, 0x84BF, - 0xE4E5, 0x849F, 0xE4E6, 0x84D9, 0xE4E7, 0x84CD, 0xE4E8, 0x84BB, - 0xE4E9, 0x84DA, 0xE4EA, 0x84D0, 0xE4EB, 0x84C1, 0xE4EC, 0x84C6, - 0xE4ED, 0x84D6, 0xE4EE, 0x84A1, 0xE4EF, 0x8521, 0xE4F0, 0x84FF, - 0xE4F1, 0x84F4, 0xE4F2, 0x8517, 0xE4F3, 0x8518, 0xE4F4, 0x852C, - 0xE4F5, 0x851F, 0xE4F6, 0x8515, 0xE4F7, 0x8514, 0xE4F8, 0x84FC, - 0xE4F9, 0x8540, 0xE4FA, 0x8563, 0xE4FB, 0x8558, 0xE4FC, 0x8548, - 0xE540, 0x8541, 0xE541, 0x8602, 0xE542, 0x854B, 0xE543, 0x8555, - 0xE544, 0x8580, 0xE545, 0x85A4, 0xE546, 0x8588, 0xE547, 0x8591, - 0xE548, 0x858A, 0xE549, 0x85A8, 0xE54A, 0x856D, 0xE54B, 0x8594, - 0xE54C, 0x859B, 0xE54D, 0x85EA, 0xE54E, 0x8587, 0xE54F, 0x859C, - 0xE550, 0x8577, 0xE551, 0x857E, 0xE552, 0x8590, 0xE553, 0x85C9, - 0xE554, 0x85BA, 0xE555, 0x85CF, 0xE556, 0x85B9, 0xE557, 0x85D0, - 0xE558, 0x85D5, 0xE559, 0x85DD, 0xE55A, 0x85E5, 0xE55B, 0x85DC, - 0xE55C, 0x85F9, 0xE55D, 0x860A, 0xE55E, 0x8613, 0xE55F, 0x860B, - 0xE560, 0x85FE, 0xE561, 0x85FA, 0xE562, 0x8606, 0xE563, 0x8622, - 0xE564, 0x861A, 0xE565, 0x8630, 0xE566, 0x863F, 0xE567, 0x864D, - 0xE568, 0x4E55, 0xE569, 0x8654, 0xE56A, 0x865F, 0xE56B, 0x8667, - 0xE56C, 0x8671, 0xE56D, 0x8693, 0xE56E, 0x86A3, 0xE56F, 0x86A9, - 0xE570, 0x86AA, 0xE571, 0x868B, 0xE572, 0x868C, 0xE573, 0x86B6, - 0xE574, 0x86AF, 0xE575, 0x86C4, 0xE576, 0x86C6, 0xE577, 0x86B0, - 0xE578, 0x86C9, 0xE579, 0x8823, 0xE57A, 0x86AB, 0xE57B, 0x86D4, - 0xE57C, 0x86DE, 0xE57D, 0x86E9, 0xE57E, 0x86EC, 0xE580, 0x86DF, - 0xE581, 0x86DB, 0xE582, 0x86EF, 0xE583, 0x8712, 0xE584, 0x8706, - 0xE585, 0x8708, 0xE586, 0x8700, 0xE587, 0x8703, 0xE588, 0x86FB, - 0xE589, 0x8711, 0xE58A, 0x8709, 0xE58B, 0x870D, 0xE58C, 0x86F9, - 0xE58D, 0x870A, 0xE58E, 0x8734, 0xE58F, 0x873F, 0xE590, 0x8737, - 0xE591, 0x873B, 0xE592, 0x8725, 0xE593, 0x8729, 0xE594, 0x871A, - 0xE595, 0x8760, 0xE596, 0x875F, 0xE597, 0x8778, 0xE598, 0x874C, - 0xE599, 0x874E, 0xE59A, 0x8774, 0xE59B, 0x8757, 0xE59C, 0x8768, - 0xE59D, 0x876E, 0xE59E, 0x8759, 0xE59F, 0x8753, 0xE5A0, 0x8763, - 0xE5A1, 0x876A, 0xE5A2, 0x8805, 0xE5A3, 0x87A2, 0xE5A4, 0x879F, - 0xE5A5, 0x8782, 0xE5A6, 0x87AF, 0xE5A7, 0x87CB, 0xE5A8, 0x87BD, - 0xE5A9, 0x87C0, 0xE5AA, 0x87D0, 0xE5AB, 0x96D6, 0xE5AC, 0x87AB, - 0xE5AD, 0x87C4, 0xE5AE, 0x87B3, 0xE5AF, 0x87C7, 0xE5B0, 0x87C6, - 0xE5B1, 0x87BB, 0xE5B2, 0x87EF, 0xE5B3, 0x87F2, 0xE5B4, 0x87E0, - 0xE5B5, 0x880F, 0xE5B6, 0x880D, 0xE5B7, 0x87FE, 0xE5B8, 0x87F6, - 0xE5B9, 0x87F7, 0xE5BA, 0x880E, 0xE5BB, 0x87D2, 0xE5BC, 0x8811, - 0xE5BD, 0x8816, 0xE5BE, 0x8815, 0xE5BF, 0x8822, 0xE5C0, 0x8821, - 0xE5C1, 0x8831, 0xE5C2, 0x8836, 0xE5C3, 0x8839, 0xE5C4, 0x8827, - 0xE5C5, 0x883B, 0xE5C6, 0x8844, 0xE5C7, 0x8842, 0xE5C8, 0x8852, - 0xE5C9, 0x8859, 0xE5CA, 0x885E, 0xE5CB, 0x8862, 0xE5CC, 0x886B, - 0xE5CD, 0x8881, 0xE5CE, 0x887E, 0xE5CF, 0x889E, 0xE5D0, 0x8875, - 0xE5D1, 0x887D, 0xE5D2, 0x88B5, 0xE5D3, 0x8872, 0xE5D4, 0x8882, - 0xE5D5, 0x8897, 0xE5D6, 0x8892, 0xE5D7, 0x88AE, 0xE5D8, 0x8899, - 0xE5D9, 0x88A2, 0xE5DA, 0x888D, 0xE5DB, 0x88A4, 0xE5DC, 0x88B0, - 0xE5DD, 0x88BF, 0xE5DE, 0x88B1, 0xE5DF, 0x88C3, 0xE5E0, 0x88C4, - 0xE5E1, 0x88D4, 0xE5E2, 0x88D8, 0xE5E3, 0x88D9, 0xE5E4, 0x88DD, - 0xE5E5, 0x88F9, 0xE5E6, 0x8902, 0xE5E7, 0x88FC, 0xE5E8, 0x88F4, - 0xE5E9, 0x88E8, 0xE5EA, 0x88F2, 0xE5EB, 0x8904, 0xE5EC, 0x890C, - 0xE5ED, 0x890A, 0xE5EE, 0x8913, 0xE5EF, 0x8943, 0xE5F0, 0x891E, - 0xE5F1, 0x8925, 0xE5F2, 0x892A, 0xE5F3, 0x892B, 0xE5F4, 0x8941, - 0xE5F5, 0x8944, 0xE5F6, 0x893B, 0xE5F7, 0x8936, 0xE5F8, 0x8938, - 0xE5F9, 0x894C, 0xE5FA, 0x891D, 0xE5FB, 0x8960, 0xE5FC, 0x895E, - 0xE640, 0x8966, 0xE641, 0x8964, 0xE642, 0x896D, 0xE643, 0x896A, - 0xE644, 0x896F, 0xE645, 0x8974, 0xE646, 0x8977, 0xE647, 0x897E, - 0xE648, 0x8983, 0xE649, 0x8988, 0xE64A, 0x898A, 0xE64B, 0x8993, - 0xE64C, 0x8998, 0xE64D, 0x89A1, 0xE64E, 0x89A9, 0xE64F, 0x89A6, - 0xE650, 0x89AC, 0xE651, 0x89AF, 0xE652, 0x89B2, 0xE653, 0x89BA, - 0xE654, 0x89BD, 0xE655, 0x89BF, 0xE656, 0x89C0, 0xE657, 0x89DA, - 0xE658, 0x89DC, 0xE659, 0x89DD, 0xE65A, 0x89E7, 0xE65B, 0x89F4, - 0xE65C, 0x89F8, 0xE65D, 0x8A03, 0xE65E, 0x8A16, 0xE65F, 0x8A10, - 0xE660, 0x8A0C, 0xE661, 0x8A1B, 0xE662, 0x8A1D, 0xE663, 0x8A25, - 0xE664, 0x8A36, 0xE665, 0x8A41, 0xE666, 0x8A5B, 0xE667, 0x8A52, - 0xE668, 0x8A46, 0xE669, 0x8A48, 0xE66A, 0x8A7C, 0xE66B, 0x8A6D, - 0xE66C, 0x8A6C, 0xE66D, 0x8A62, 0xE66E, 0x8A85, 0xE66F, 0x8A82, - 0xE670, 0x8A84, 0xE671, 0x8AA8, 0xE672, 0x8AA1, 0xE673, 0x8A91, - 0xE674, 0x8AA5, 0xE675, 0x8AA6, 0xE676, 0x8A9A, 0xE677, 0x8AA3, - 0xE678, 0x8AC4, 0xE679, 0x8ACD, 0xE67A, 0x8AC2, 0xE67B, 0x8ADA, - 0xE67C, 0x8AEB, 0xE67D, 0x8AF3, 0xE67E, 0x8AE7, 0xE680, 0x8AE4, - 0xE681, 0x8AF1, 0xE682, 0x8B14, 0xE683, 0x8AE0, 0xE684, 0x8AE2, - 0xE685, 0x8AF7, 0xE686, 0x8ADE, 0xE687, 0x8ADB, 0xE688, 0x8B0C, - 0xE689, 0x8B07, 0xE68A, 0x8B1A, 0xE68B, 0x8AE1, 0xE68C, 0x8B16, - 0xE68D, 0x8B10, 0xE68E, 0x8B17, 0xE68F, 0x8B20, 0xE690, 0x8B33, - 0xE691, 0x97AB, 0xE692, 0x8B26, 0xE693, 0x8B2B, 0xE694, 0x8B3E, - 0xE695, 0x8B28, 0xE696, 0x8B41, 0xE697, 0x8B4C, 0xE698, 0x8B4F, - 0xE699, 0x8B4E, 0xE69A, 0x8B49, 0xE69B, 0x8B56, 0xE69C, 0x8B5B, - 0xE69D, 0x8B5A, 0xE69E, 0x8B6B, 0xE69F, 0x8B5F, 0xE6A0, 0x8B6C, - 0xE6A1, 0x8B6F, 0xE6A2, 0x8B74, 0xE6A3, 0x8B7D, 0xE6A4, 0x8B80, - 0xE6A5, 0x8B8C, 0xE6A6, 0x8B8E, 0xE6A7, 0x8B92, 0xE6A8, 0x8B93, - 0xE6A9, 0x8B96, 0xE6AA, 0x8B99, 0xE6AB, 0x8B9A, 0xE6AC, 0x8C3A, - 0xE6AD, 0x8C41, 0xE6AE, 0x8C3F, 0xE6AF, 0x8C48, 0xE6B0, 0x8C4C, - 0xE6B1, 0x8C4E, 0xE6B2, 0x8C50, 0xE6B3, 0x8C55, 0xE6B4, 0x8C62, - 0xE6B5, 0x8C6C, 0xE6B6, 0x8C78, 0xE6B7, 0x8C7A, 0xE6B8, 0x8C82, - 0xE6B9, 0x8C89, 0xE6BA, 0x8C85, 0xE6BB, 0x8C8A, 0xE6BC, 0x8C8D, - 0xE6BD, 0x8C8E, 0xE6BE, 0x8C94, 0xE6BF, 0x8C7C, 0xE6C0, 0x8C98, - 0xE6C1, 0x621D, 0xE6C2, 0x8CAD, 0xE6C3, 0x8CAA, 0xE6C4, 0x8CBD, - 0xE6C5, 0x8CB2, 0xE6C6, 0x8CB3, 0xE6C7, 0x8CAE, 0xE6C8, 0x8CB6, - 0xE6C9, 0x8CC8, 0xE6CA, 0x8CC1, 0xE6CB, 0x8CE4, 0xE6CC, 0x8CE3, - 0xE6CD, 0x8CDA, 0xE6CE, 0x8CFD, 0xE6CF, 0x8CFA, 0xE6D0, 0x8CFB, - 0xE6D1, 0x8D04, 0xE6D2, 0x8D05, 0xE6D3, 0x8D0A, 0xE6D4, 0x8D07, - 0xE6D5, 0x8D0F, 0xE6D6, 0x8D0D, 0xE6D7, 0x8D10, 0xE6D8, 0x9F4E, - 0xE6D9, 0x8D13, 0xE6DA, 0x8CCD, 0xE6DB, 0x8D14, 0xE6DC, 0x8D16, - 0xE6DD, 0x8D67, 0xE6DE, 0x8D6D, 0xE6DF, 0x8D71, 0xE6E0, 0x8D73, - 0xE6E1, 0x8D81, 0xE6E2, 0x8D99, 0xE6E3, 0x8DC2, 0xE6E4, 0x8DBE, - 0xE6E5, 0x8DBA, 0xE6E6, 0x8DCF, 0xE6E7, 0x8DDA, 0xE6E8, 0x8DD6, - 0xE6E9, 0x8DCC, 0xE6EA, 0x8DDB, 0xE6EB, 0x8DCB, 0xE6EC, 0x8DEA, - 0xE6ED, 0x8DEB, 0xE6EE, 0x8DDF, 0xE6EF, 0x8DE3, 0xE6F0, 0x8DFC, - 0xE6F1, 0x8E08, 0xE6F2, 0x8E09, 0xE6F3, 0x8DFF, 0xE6F4, 0x8E1D, - 0xE6F5, 0x8E1E, 0xE6F6, 0x8E10, 0xE6F7, 0x8E1F, 0xE6F8, 0x8E42, - 0xE6F9, 0x8E35, 0xE6FA, 0x8E30, 0xE6FB, 0x8E34, 0xE6FC, 0x8E4A, - 0xE740, 0x8E47, 0xE741, 0x8E49, 0xE742, 0x8E4C, 0xE743, 0x8E50, - 0xE744, 0x8E48, 0xE745, 0x8E59, 0xE746, 0x8E64, 0xE747, 0x8E60, - 0xE748, 0x8E2A, 0xE749, 0x8E63, 0xE74A, 0x8E55, 0xE74B, 0x8E76, - 0xE74C, 0x8E72, 0xE74D, 0x8E7C, 0xE74E, 0x8E81, 0xE74F, 0x8E87, - 0xE750, 0x8E85, 0xE751, 0x8E84, 0xE752, 0x8E8B, 0xE753, 0x8E8A, - 0xE754, 0x8E93, 0xE755, 0x8E91, 0xE756, 0x8E94, 0xE757, 0x8E99, - 0xE758, 0x8EAA, 0xE759, 0x8EA1, 0xE75A, 0x8EAC, 0xE75B, 0x8EB0, - 0xE75C, 0x8EC6, 0xE75D, 0x8EB1, 0xE75E, 0x8EBE, 0xE75F, 0x8EC5, - 0xE760, 0x8EC8, 0xE761, 0x8ECB, 0xE762, 0x8EDB, 0xE763, 0x8EE3, - 0xE764, 0x8EFC, 0xE765, 0x8EFB, 0xE766, 0x8EEB, 0xE767, 0x8EFE, - 0xE768, 0x8F0A, 0xE769, 0x8F05, 0xE76A, 0x8F15, 0xE76B, 0x8F12, - 0xE76C, 0x8F19, 0xE76D, 0x8F13, 0xE76E, 0x8F1C, 0xE76F, 0x8F1F, - 0xE770, 0x8F1B, 0xE771, 0x8F0C, 0xE772, 0x8F26, 0xE773, 0x8F33, - 0xE774, 0x8F3B, 0xE775, 0x8F39, 0xE776, 0x8F45, 0xE777, 0x8F42, - 0xE778, 0x8F3E, 0xE779, 0x8F4C, 0xE77A, 0x8F49, 0xE77B, 0x8F46, - 0xE77C, 0x8F4E, 0xE77D, 0x8F57, 0xE77E, 0x8F5C, 0xE780, 0x8F62, - 0xE781, 0x8F63, 0xE782, 0x8F64, 0xE783, 0x8F9C, 0xE784, 0x8F9F, - 0xE785, 0x8FA3, 0xE786, 0x8FAD, 0xE787, 0x8FAF, 0xE788, 0x8FB7, - 0xE789, 0x8FDA, 0xE78A, 0x8FE5, 0xE78B, 0x8FE2, 0xE78C, 0x8FEA, - 0xE78D, 0x8FEF, 0xE78E, 0x9087, 0xE78F, 0x8FF4, 0xE790, 0x9005, - 0xE791, 0x8FF9, 0xE792, 0x8FFA, 0xE793, 0x9011, 0xE794, 0x9015, - 0xE795, 0x9021, 0xE796, 0x900D, 0xE797, 0x901E, 0xE798, 0x9016, - 0xE799, 0x900B, 0xE79A, 0x9027, 0xE79B, 0x9036, 0xE79C, 0x9035, - 0xE79D, 0x9039, 0xE79E, 0x8FF8, 0xE79F, 0x904F, 0xE7A0, 0x9050, - 0xE7A1, 0x9051, 0xE7A2, 0x9052, 0xE7A3, 0x900E, 0xE7A4, 0x9049, - 0xE7A5, 0x903E, 0xE7A6, 0x9056, 0xE7A7, 0x9058, 0xE7A8, 0x905E, - 0xE7A9, 0x9068, 0xE7AA, 0x906F, 0xE7AB, 0x9076, 0xE7AC, 0x96A8, - 0xE7AD, 0x9072, 0xE7AE, 0x9082, 0xE7AF, 0x907D, 0xE7B0, 0x9081, - 0xE7B1, 0x9080, 0xE7B2, 0x908A, 0xE7B3, 0x9089, 0xE7B4, 0x908F, - 0xE7B5, 0x90A8, 0xE7B6, 0x90AF, 0xE7B7, 0x90B1, 0xE7B8, 0x90B5, - 0xE7B9, 0x90E2, 0xE7BA, 0x90E4, 0xE7BB, 0x6248, 0xE7BC, 0x90DB, - 0xE7BD, 0x9102, 0xE7BE, 0x9112, 0xE7BF, 0x9119, 0xE7C0, 0x9132, - 0xE7C1, 0x9130, 0xE7C2, 0x914A, 0xE7C3, 0x9156, 0xE7C4, 0x9158, - 0xE7C5, 0x9163, 0xE7C6, 0x9165, 0xE7C7, 0x9169, 0xE7C8, 0x9173, - 0xE7C9, 0x9172, 0xE7CA, 0x918B, 0xE7CB, 0x9189, 0xE7CC, 0x9182, - 0xE7CD, 0x91A2, 0xE7CE, 0x91AB, 0xE7CF, 0x91AF, 0xE7D0, 0x91AA, - 0xE7D1, 0x91B5, 0xE7D2, 0x91B4, 0xE7D3, 0x91BA, 0xE7D4, 0x91C0, - 0xE7D5, 0x91C1, 0xE7D6, 0x91C9, 0xE7D7, 0x91CB, 0xE7D8, 0x91D0, - 0xE7D9, 0x91D6, 0xE7DA, 0x91DF, 0xE7DB, 0x91E1, 0xE7DC, 0x91DB, - 0xE7DD, 0x91FC, 0xE7DE, 0x91F5, 0xE7DF, 0x91F6, 0xE7E0, 0x921E, - 0xE7E1, 0x91FF, 0xE7E2, 0x9214, 0xE7E3, 0x922C, 0xE7E4, 0x9215, - 0xE7E5, 0x9211, 0xE7E6, 0x925E, 0xE7E7, 0x9257, 0xE7E8, 0x9245, - 0xE7E9, 0x9249, 0xE7EA, 0x9264, 0xE7EB, 0x9248, 0xE7EC, 0x9295, - 0xE7ED, 0x923F, 0xE7EE, 0x924B, 0xE7EF, 0x9250, 0xE7F0, 0x929C, - 0xE7F1, 0x9296, 0xE7F2, 0x9293, 0xE7F3, 0x929B, 0xE7F4, 0x925A, - 0xE7F5, 0x92CF, 0xE7F6, 0x92B9, 0xE7F7, 0x92B7, 0xE7F8, 0x92E9, - 0xE7F9, 0x930F, 0xE7FA, 0x92FA, 0xE7FB, 0x9344, 0xE7FC, 0x932E, - 0xE840, 0x9319, 0xE841, 0x9322, 0xE842, 0x931A, 0xE843, 0x9323, - 0xE844, 0x933A, 0xE845, 0x9335, 0xE846, 0x933B, 0xE847, 0x935C, - 0xE848, 0x9360, 0xE849, 0x937C, 0xE84A, 0x936E, 0xE84B, 0x9356, - 0xE84C, 0x93B0, 0xE84D, 0x93AC, 0xE84E, 0x93AD, 0xE84F, 0x9394, - 0xE850, 0x93B9, 0xE851, 0x93D6, 0xE852, 0x93D7, 0xE853, 0x93E8, - 0xE854, 0x93E5, 0xE855, 0x93D8, 0xE856, 0x93C3, 0xE857, 0x93DD, - 0xE858, 0x93D0, 0xE859, 0x93C8, 0xE85A, 0x93E4, 0xE85B, 0x941A, - 0xE85C, 0x9414, 0xE85D, 0x9413, 0xE85E, 0x9403, 0xE85F, 0x9407, - 0xE860, 0x9410, 0xE861, 0x9436, 0xE862, 0x942B, 0xE863, 0x9435, - 0xE864, 0x9421, 0xE865, 0x943A, 0xE866, 0x9441, 0xE867, 0x9452, - 0xE868, 0x9444, 0xE869, 0x945B, 0xE86A, 0x9460, 0xE86B, 0x9462, - 0xE86C, 0x945E, 0xE86D, 0x946A, 0xE86E, 0x9229, 0xE86F, 0x9470, - 0xE870, 0x9475, 0xE871, 0x9477, 0xE872, 0x947D, 0xE873, 0x945A, - 0xE874, 0x947C, 0xE875, 0x947E, 0xE876, 0x9481, 0xE877, 0x947F, - 0xE878, 0x9582, 0xE879, 0x9587, 0xE87A, 0x958A, 0xE87B, 0x9594, - 0xE87C, 0x9596, 0xE87D, 0x9598, 0xE87E, 0x9599, 0xE880, 0x95A0, - 0xE881, 0x95A8, 0xE882, 0x95A7, 0xE883, 0x95AD, 0xE884, 0x95BC, - 0xE885, 0x95BB, 0xE886, 0x95B9, 0xE887, 0x95BE, 0xE888, 0x95CA, - 0xE889, 0x6FF6, 0xE88A, 0x95C3, 0xE88B, 0x95CD, 0xE88C, 0x95CC, - 0xE88D, 0x95D5, 0xE88E, 0x95D4, 0xE88F, 0x95D6, 0xE890, 0x95DC, - 0xE891, 0x95E1, 0xE892, 0x95E5, 0xE893, 0x95E2, 0xE894, 0x9621, - 0xE895, 0x9628, 0xE896, 0x962E, 0xE897, 0x962F, 0xE898, 0x9642, - 0xE899, 0x964C, 0xE89A, 0x964F, 0xE89B, 0x964B, 0xE89C, 0x9677, - 0xE89D, 0x965C, 0xE89E, 0x965E, 0xE89F, 0x965D, 0xE8A0, 0x965F, - 0xE8A1, 0x9666, 0xE8A2, 0x9672, 0xE8A3, 0x966C, 0xE8A4, 0x968D, - 0xE8A5, 0x9698, 0xE8A6, 0x9695, 0xE8A7, 0x9697, 0xE8A8, 0x96AA, - 0xE8A9, 0x96A7, 0xE8AA, 0x96B1, 0xE8AB, 0x96B2, 0xE8AC, 0x96B0, - 0xE8AD, 0x96B4, 0xE8AE, 0x96B6, 0xE8AF, 0x96B8, 0xE8B0, 0x96B9, - 0xE8B1, 0x96CE, 0xE8B2, 0x96CB, 0xE8B3, 0x96C9, 0xE8B4, 0x96CD, - 0xE8B5, 0x894D, 0xE8B6, 0x96DC, 0xE8B7, 0x970D, 0xE8B8, 0x96D5, - 0xE8B9, 0x96F9, 0xE8BA, 0x9704, 0xE8BB, 0x9706, 0xE8BC, 0x9708, - 0xE8BD, 0x9713, 0xE8BE, 0x970E, 0xE8BF, 0x9711, 0xE8C0, 0x970F, - 0xE8C1, 0x9716, 0xE8C2, 0x9719, 0xE8C3, 0x9724, 0xE8C4, 0x972A, - 0xE8C5, 0x9730, 0xE8C6, 0x9739, 0xE8C7, 0x973D, 0xE8C8, 0x973E, - 0xE8C9, 0x9744, 0xE8CA, 0x9746, 0xE8CB, 0x9748, 0xE8CC, 0x9742, - 0xE8CD, 0x9749, 0xE8CE, 0x975C, 0xE8CF, 0x9760, 0xE8D0, 0x9764, - 0xE8D1, 0x9766, 0xE8D2, 0x9768, 0xE8D3, 0x52D2, 0xE8D4, 0x976B, - 0xE8D5, 0x9771, 0xE8D6, 0x9779, 0xE8D7, 0x9785, 0xE8D8, 0x977C, - 0xE8D9, 0x9781, 0xE8DA, 0x977A, 0xE8DB, 0x9786, 0xE8DC, 0x978B, - 0xE8DD, 0x978F, 0xE8DE, 0x9790, 0xE8DF, 0x979C, 0xE8E0, 0x97A8, - 0xE8E1, 0x97A6, 0xE8E2, 0x97A3, 0xE8E3, 0x97B3, 0xE8E4, 0x97B4, - 0xE8E5, 0x97C3, 0xE8E6, 0x97C6, 0xE8E7, 0x97C8, 0xE8E8, 0x97CB, - 0xE8E9, 0x97DC, 0xE8EA, 0x97ED, 0xE8EB, 0x9F4F, 0xE8EC, 0x97F2, - 0xE8ED, 0x7ADF, 0xE8EE, 0x97F6, 0xE8EF, 0x97F5, 0xE8F0, 0x980F, - 0xE8F1, 0x980C, 0xE8F2, 0x9838, 0xE8F3, 0x9824, 0xE8F4, 0x9821, - 0xE8F5, 0x9837, 0xE8F6, 0x983D, 0xE8F7, 0x9846, 0xE8F8, 0x984F, - 0xE8F9, 0x984B, 0xE8FA, 0x986B, 0xE8FB, 0x986F, 0xE8FC, 0x9870, - 0xE940, 0x9871, 0xE941, 0x9874, 0xE942, 0x9873, 0xE943, 0x98AA, - 0xE944, 0x98AF, 0xE945, 0x98B1, 0xE946, 0x98B6, 0xE947, 0x98C4, - 0xE948, 0x98C3, 0xE949, 0x98C6, 0xE94A, 0x98E9, 0xE94B, 0x98EB, - 0xE94C, 0x9903, 0xE94D, 0x9909, 0xE94E, 0x9912, 0xE94F, 0x9914, - 0xE950, 0x9918, 0xE951, 0x9921, 0xE952, 0x991D, 0xE953, 0x991E, - 0xE954, 0x9924, 0xE955, 0x9920, 0xE956, 0x992C, 0xE957, 0x992E, - 0xE958, 0x993D, 0xE959, 0x993E, 0xE95A, 0x9942, 0xE95B, 0x9949, - 0xE95C, 0x9945, 0xE95D, 0x9950, 0xE95E, 0x994B, 0xE95F, 0x9951, - 0xE960, 0x9952, 0xE961, 0x994C, 0xE962, 0x9955, 0xE963, 0x9997, - 0xE964, 0x9998, 0xE965, 0x99A5, 0xE966, 0x99AD, 0xE967, 0x99AE, - 0xE968, 0x99BC, 0xE969, 0x99DF, 0xE96A, 0x99DB, 0xE96B, 0x99DD, - 0xE96C, 0x99D8, 0xE96D, 0x99D1, 0xE96E, 0x99ED, 0xE96F, 0x99EE, - 0xE970, 0x99F1, 0xE971, 0x99F2, 0xE972, 0x99FB, 0xE973, 0x99F8, - 0xE974, 0x9A01, 0xE975, 0x9A0F, 0xE976, 0x9A05, 0xE977, 0x99E2, - 0xE978, 0x9A19, 0xE979, 0x9A2B, 0xE97A, 0x9A37, 0xE97B, 0x9A45, - 0xE97C, 0x9A42, 0xE97D, 0x9A40, 0xE97E, 0x9A43, 0xE980, 0x9A3E, - 0xE981, 0x9A55, 0xE982, 0x9A4D, 0xE983, 0x9A5B, 0xE984, 0x9A57, - 0xE985, 0x9A5F, 0xE986, 0x9A62, 0xE987, 0x9A65, 0xE988, 0x9A64, - 0xE989, 0x9A69, 0xE98A, 0x9A6B, 0xE98B, 0x9A6A, 0xE98C, 0x9AAD, - 0xE98D, 0x9AB0, 0xE98E, 0x9ABC, 0xE98F, 0x9AC0, 0xE990, 0x9ACF, - 0xE991, 0x9AD1, 0xE992, 0x9AD3, 0xE993, 0x9AD4, 0xE994, 0x9ADE, - 0xE995, 0x9ADF, 0xE996, 0x9AE2, 0xE997, 0x9AE3, 0xE998, 0x9AE6, - 0xE999, 0x9AEF, 0xE99A, 0x9AEB, 0xE99B, 0x9AEE, 0xE99C, 0x9AF4, - 0xE99D, 0x9AF1, 0xE99E, 0x9AF7, 0xE99F, 0x9AFB, 0xE9A0, 0x9B06, - 0xE9A1, 0x9B18, 0xE9A2, 0x9B1A, 0xE9A3, 0x9B1F, 0xE9A4, 0x9B22, - 0xE9A5, 0x9B23, 0xE9A6, 0x9B25, 0xE9A7, 0x9B27, 0xE9A8, 0x9B28, - 0xE9A9, 0x9B29, 0xE9AA, 0x9B2A, 0xE9AB, 0x9B2E, 0xE9AC, 0x9B2F, - 0xE9AD, 0x9B32, 0xE9AE, 0x9B44, 0xE9AF, 0x9B43, 0xE9B0, 0x9B4F, - 0xE9B1, 0x9B4D, 0xE9B2, 0x9B4E, 0xE9B3, 0x9B51, 0xE9B4, 0x9B58, - 0xE9B5, 0x9B74, 0xE9B6, 0x9B93, 0xE9B7, 0x9B83, 0xE9B8, 0x9B91, - 0xE9B9, 0x9B96, 0xE9BA, 0x9B97, 0xE9BB, 0x9B9F, 0xE9BC, 0x9BA0, - 0xE9BD, 0x9BA8, 0xE9BE, 0x9BB4, 0xE9BF, 0x9BC0, 0xE9C0, 0x9BCA, - 0xE9C1, 0x9BB9, 0xE9C2, 0x9BC6, 0xE9C3, 0x9BCF, 0xE9C4, 0x9BD1, - 0xE9C5, 0x9BD2, 0xE9C6, 0x9BE3, 0xE9C7, 0x9BE2, 0xE9C8, 0x9BE4, - 0xE9C9, 0x9BD4, 0xE9CA, 0x9BE1, 0xE9CB, 0x9C3A, 0xE9CC, 0x9BF2, - 0xE9CD, 0x9BF1, 0xE9CE, 0x9BF0, 0xE9CF, 0x9C15, 0xE9D0, 0x9C14, - 0xE9D1, 0x9C09, 0xE9D2, 0x9C13, 0xE9D3, 0x9C0C, 0xE9D4, 0x9C06, - 0xE9D5, 0x9C08, 0xE9D6, 0x9C12, 0xE9D7, 0x9C0A, 0xE9D8, 0x9C04, - 0xE9D9, 0x9C2E, 0xE9DA, 0x9C1B, 0xE9DB, 0x9C25, 0xE9DC, 0x9C24, - 0xE9DD, 0x9C21, 0xE9DE, 0x9C30, 0xE9DF, 0x9C47, 0xE9E0, 0x9C32, - 0xE9E1, 0x9C46, 0xE9E2, 0x9C3E, 0xE9E3, 0x9C5A, 0xE9E4, 0x9C60, - 0xE9E5, 0x9C67, 0xE9E6, 0x9C76, 0xE9E7, 0x9C78, 0xE9E8, 0x9CE7, - 0xE9E9, 0x9CEC, 0xE9EA, 0x9CF0, 0xE9EB, 0x9D09, 0xE9EC, 0x9D08, - 0xE9ED, 0x9CEB, 0xE9EE, 0x9D03, 0xE9EF, 0x9D06, 0xE9F0, 0x9D2A, - 0xE9F1, 0x9D26, 0xE9F2, 0x9DAF, 0xE9F3, 0x9D23, 0xE9F4, 0x9D1F, - 0xE9F5, 0x9D44, 0xE9F6, 0x9D15, 0xE9F7, 0x9D12, 0xE9F8, 0x9D41, - 0xE9F9, 0x9D3F, 0xE9FA, 0x9D3E, 0xE9FB, 0x9D46, 0xE9FC, 0x9D48, - 0xEA40, 0x9D5D, 0xEA41, 0x9D5E, 0xEA42, 0x9D64, 0xEA43, 0x9D51, - 0xEA44, 0x9D50, 0xEA45, 0x9D59, 0xEA46, 0x9D72, 0xEA47, 0x9D89, - 0xEA48, 0x9D87, 0xEA49, 0x9DAB, 0xEA4A, 0x9D6F, 0xEA4B, 0x9D7A, - 0xEA4C, 0x9D9A, 0xEA4D, 0x9DA4, 0xEA4E, 0x9DA9, 0xEA4F, 0x9DB2, - 0xEA50, 0x9DC4, 0xEA51, 0x9DC1, 0xEA52, 0x9DBB, 0xEA53, 0x9DB8, - 0xEA54, 0x9DBA, 0xEA55, 0x9DC6, 0xEA56, 0x9DCF, 0xEA57, 0x9DC2, - 0xEA58, 0x9DD9, 0xEA59, 0x9DD3, 0xEA5A, 0x9DF8, 0xEA5B, 0x9DE6, - 0xEA5C, 0x9DED, 0xEA5D, 0x9DEF, 0xEA5E, 0x9DFD, 0xEA5F, 0x9E1A, - 0xEA60, 0x9E1B, 0xEA61, 0x9E1E, 0xEA62, 0x9E75, 0xEA63, 0x9E79, - 0xEA64, 0x9E7D, 0xEA65, 0x9E81, 0xEA66, 0x9E88, 0xEA67, 0x9E8B, - 0xEA68, 0x9E8C, 0xEA69, 0x9E92, 0xEA6A, 0x9E95, 0xEA6B, 0x9E91, - 0xEA6C, 0x9E9D, 0xEA6D, 0x9EA5, 0xEA6E, 0x9EA9, 0xEA6F, 0x9EB8, - 0xEA70, 0x9EAA, 0xEA71, 0x9EAD, 0xEA72, 0x9761, 0xEA73, 0x9ECC, - 0xEA74, 0x9ECE, 0xEA75, 0x9ECF, 0xEA76, 0x9ED0, 0xEA77, 0x9ED4, - 0xEA78, 0x9EDC, 0xEA79, 0x9EDE, 0xEA7A, 0x9EDD, 0xEA7B, 0x9EE0, - 0xEA7C, 0x9EE5, 0xEA7D, 0x9EE8, 0xEA7E, 0x9EEF, 0xEA80, 0x9EF4, - 0xEA81, 0x9EF6, 0xEA82, 0x9EF7, 0xEA83, 0x9EF9, 0xEA84, 0x9EFB, - 0xEA85, 0x9EFC, 0xEA86, 0x9EFD, 0xEA87, 0x9F07, 0xEA88, 0x9F08, - 0xEA89, 0x76B7, 0xEA8A, 0x9F15, 0xEA8B, 0x9F21, 0xEA8C, 0x9F2C, - 0xEA8D, 0x9F3E, 0xEA8E, 0x9F4A, 0xEA8F, 0x9F52, 0xEA90, 0x9F54, - 0xEA91, 0x9F63, 0xEA92, 0x9F5F, 0xEA93, 0x9F60, 0xEA94, 0x9F61, - 0xEA95, 0x9F66, 0xEA96, 0x9F67, 0xEA97, 0x9F6C, 0xEA98, 0x9F6A, - 0xEA99, 0x9F77, 0xEA9A, 0x9F72, 0xEA9B, 0x9F76, 0xEA9C, 0x9F95, - 0xEA9D, 0x9F9C, 0xEA9E, 0x9FA0, 0xEA9F, 0x582F, 0xEAA0, 0x69C7, - 0xEAA1, 0x9059, 0xEAA2, 0x7464, 0xEAA3, 0x51DC, 0xEAA4, 0x7199, - 0xFA40, 0x2170, 0xFA41, 0x2171, 0xFA42, 0x2172, 0xFA43, 0x2173, - 0xFA44, 0x2174, 0xFA45, 0x2175, 0xFA46, 0x2176, 0xFA47, 0x2177, - 0xFA48, 0x2178, 0xFA49, 0x2179, 0xFA55, 0xFFE4, 0xFA56, 0xFF07, - 0xFA57, 0xFF02, 0xFA5C, 0x7E8A, 0xFA5D, 0x891C, 0xFA5E, 0x9348, - 0xFA5F, 0x9288, 0xFA60, 0x84DC, 0xFA61, 0x4FC9, 0xFA62, 0x70BB, - 0xFA63, 0x6631, 0xFA64, 0x68C8, 0xFA65, 0x92F9, 0xFA66, 0x66FB, - 0xFA67, 0x5F45, 0xFA68, 0x4E28, 0xFA69, 0x4EE1, 0xFA6A, 0x4EFC, - 0xFA6B, 0x4F00, 0xFA6C, 0x4F03, 0xFA6D, 0x4F39, 0xFA6E, 0x4F56, - 0xFA6F, 0x4F92, 0xFA70, 0x4F8A, 0xFA71, 0x4F9A, 0xFA72, 0x4F94, - 0xFA73, 0x4FCD, 0xFA74, 0x5040, 0xFA75, 0x5022, 0xFA76, 0x4FFF, - 0xFA77, 0x501E, 0xFA78, 0x5046, 0xFA79, 0x5070, 0xFA7A, 0x5042, - 0xFA7B, 0x5094, 0xFA7C, 0x50F4, 0xFA7D, 0x50D8, 0xFA7E, 0x514A, - 0xFA80, 0x5164, 0xFA81, 0x519D, 0xFA82, 0x51BE, 0xFA83, 0x51EC, - 0xFA84, 0x5215, 0xFA85, 0x529C, 0xFA86, 0x52A6, 0xFA87, 0x52C0, - 0xFA88, 0x52DB, 0xFA89, 0x5300, 0xFA8A, 0x5307, 0xFA8B, 0x5324, - 0xFA8C, 0x5372, 0xFA8D, 0x5393, 0xFA8E, 0x53B2, 0xFA8F, 0x53DD, - 0xFA90, 0xFA0E, 0xFA91, 0x549C, 0xFA92, 0x548A, 0xFA93, 0x54A9, - 0xFA94, 0x54FF, 0xFA95, 0x5586, 0xFA96, 0x5759, 0xFA97, 0x5765, - 0xFA98, 0x57AC, 0xFA99, 0x57C8, 0xFA9A, 0x57C7, 0xFA9B, 0xFA0F, - 0xFA9C, 0xFA10, 0xFA9D, 0x589E, 0xFA9E, 0x58B2, 0xFA9F, 0x590B, - 0xFAA0, 0x5953, 0xFAA1, 0x595B, 0xFAA2, 0x595D, 0xFAA3, 0x5963, - 0xFAA4, 0x59A4, 0xFAA5, 0x59BA, 0xFAA6, 0x5B56, 0xFAA7, 0x5BC0, - 0xFAA8, 0x752F, 0xFAA9, 0x5BD8, 0xFAAA, 0x5BEC, 0xFAAB, 0x5C1E, - 0xFAAC, 0x5CA6, 0xFAAD, 0x5CBA, 0xFAAE, 0x5CF5, 0xFAAF, 0x5D27, - 0xFAB0, 0x5D53, 0xFAB1, 0xFA11, 0xFAB2, 0x5D42, 0xFAB3, 0x5D6D, - 0xFAB4, 0x5DB8, 0xFAB5, 0x5DB9, 0xFAB6, 0x5DD0, 0xFAB7, 0x5F21, - 0xFAB8, 0x5F34, 0xFAB9, 0x5F67, 0xFABA, 0x5FB7, 0xFABB, 0x5FDE, - 0xFABC, 0x605D, 0xFABD, 0x6085, 0xFABE, 0x608A, 0xFABF, 0x60DE, - 0xFAC0, 0x60D5, 0xFAC1, 0x6120, 0xFAC2, 0x60F2, 0xFAC3, 0x6111, - 0xFAC4, 0x6137, 0xFAC5, 0x6130, 0xFAC6, 0x6198, 0xFAC7, 0x6213, - 0xFAC8, 0x62A6, 0xFAC9, 0x63F5, 0xFACA, 0x6460, 0xFACB, 0x649D, - 0xFACC, 0x64CE, 0xFACD, 0x654E, 0xFACE, 0x6600, 0xFACF, 0x6615, - 0xFAD0, 0x663B, 0xFAD1, 0x6609, 0xFAD2, 0x662E, 0xFAD3, 0x661E, - 0xFAD4, 0x6624, 0xFAD5, 0x6665, 0xFAD6, 0x6657, 0xFAD7, 0x6659, - 0xFAD8, 0xFA12, 0xFAD9, 0x6673, 0xFADA, 0x6699, 0xFADB, 0x66A0, - 0xFADC, 0x66B2, 0xFADD, 0x66BF, 0xFADE, 0x66FA, 0xFADF, 0x670E, - 0xFAE0, 0xF929, 0xFAE1, 0x6766, 0xFAE2, 0x67BB, 0xFAE3, 0x6852, - 0xFAE4, 0x67C0, 0xFAE5, 0x6801, 0xFAE6, 0x6844, 0xFAE7, 0x68CF, - 0xFAE8, 0xFA13, 0xFAE9, 0x6968, 0xFAEA, 0xFA14, 0xFAEB, 0x6998, - 0xFAEC, 0x69E2, 0xFAED, 0x6A30, 0xFAEE, 0x6A6B, 0xFAEF, 0x6A46, - 0xFAF0, 0x6A73, 0xFAF1, 0x6A7E, 0xFAF2, 0x6AE2, 0xFAF3, 0x6AE4, - 0xFAF4, 0x6BD6, 0xFAF5, 0x6C3F, 0xFAF6, 0x6C5C, 0xFAF7, 0x6C86, - 0xFAF8, 0x6C6F, 0xFAF9, 0x6CDA, 0xFAFA, 0x6D04, 0xFAFB, 0x6D87, - 0xFAFC, 0x6D6F, 0xFB40, 0x6D96, 0xFB41, 0x6DAC, 0xFB42, 0x6DCF, - 0xFB43, 0x6DF8, 0xFB44, 0x6DF2, 0xFB45, 0x6DFC, 0xFB46, 0x6E39, - 0xFB47, 0x6E5C, 0xFB48, 0x6E27, 0xFB49, 0x6E3C, 0xFB4A, 0x6EBF, - 0xFB4B, 0x6F88, 0xFB4C, 0x6FB5, 0xFB4D, 0x6FF5, 0xFB4E, 0x7005, - 0xFB4F, 0x7007, 0xFB50, 0x7028, 0xFB51, 0x7085, 0xFB52, 0x70AB, - 0xFB53, 0x710F, 0xFB54, 0x7104, 0xFB55, 0x715C, 0xFB56, 0x7146, - 0xFB57, 0x7147, 0xFB58, 0xFA15, 0xFB59, 0x71C1, 0xFB5A, 0x71FE, - 0xFB5B, 0x72B1, 0xFB5C, 0x72BE, 0xFB5D, 0x7324, 0xFB5E, 0xFA16, - 0xFB5F, 0x7377, 0xFB60, 0x73BD, 0xFB61, 0x73C9, 0xFB62, 0x73D6, - 0xFB63, 0x73E3, 0xFB64, 0x73D2, 0xFB65, 0x7407, 0xFB66, 0x73F5, - 0xFB67, 0x7426, 0xFB68, 0x742A, 0xFB69, 0x7429, 0xFB6A, 0x742E, - 0xFB6B, 0x7462, 0xFB6C, 0x7489, 0xFB6D, 0x749F, 0xFB6E, 0x7501, - 0xFB6F, 0x756F, 0xFB70, 0x7682, 0xFB71, 0x769C, 0xFB72, 0x769E, - 0xFB73, 0x769B, 0xFB74, 0x76A6, 0xFB75, 0xFA17, 0xFB76, 0x7746, - 0xFB77, 0x52AF, 0xFB78, 0x7821, 0xFB79, 0x784E, 0xFB7A, 0x7864, - 0xFB7B, 0x787A, 0xFB7C, 0x7930, 0xFB7D, 0xFA18, 0xFB7E, 0xFA19, - 0xFB80, 0xFA1A, 0xFB81, 0x7994, 0xFB82, 0xFA1B, 0xFB83, 0x799B, - 0xFB84, 0x7AD1, 0xFB85, 0x7AE7, 0xFB86, 0xFA1C, 0xFB87, 0x7AEB, - 0xFB88, 0x7B9E, 0xFB89, 0xFA1D, 0xFB8A, 0x7D48, 0xFB8B, 0x7D5C, - 0xFB8C, 0x7DB7, 0xFB8D, 0x7DA0, 0xFB8E, 0x7DD6, 0xFB8F, 0x7E52, - 0xFB90, 0x7F47, 0xFB91, 0x7FA1, 0xFB92, 0xFA1E, 0xFB93, 0x8301, - 0xFB94, 0x8362, 0xFB95, 0x837F, 0xFB96, 0x83C7, 0xFB97, 0x83F6, - 0xFB98, 0x8448, 0xFB99, 0x84B4, 0xFB9A, 0x8553, 0xFB9B, 0x8559, - 0xFB9C, 0x856B, 0xFB9D, 0xFA1F, 0xFB9E, 0x85B0, 0xFB9F, 0xFA20, - 0xFBA0, 0xFA21, 0xFBA1, 0x8807, 0xFBA2, 0x88F5, 0xFBA3, 0x8A12, - 0xFBA4, 0x8A37, 0xFBA5, 0x8A79, 0xFBA6, 0x8AA7, 0xFBA7, 0x8ABE, - 0xFBA8, 0x8ADF, 0xFBA9, 0xFA22, 0xFBAA, 0x8AF6, 0xFBAB, 0x8B53, - 0xFBAC, 0x8B7F, 0xFBAD, 0x8CF0, 0xFBAE, 0x8CF4, 0xFBAF, 0x8D12, - 0xFBB0, 0x8D76, 0xFBB1, 0xFA23, 0xFBB2, 0x8ECF, 0xFBB3, 0xFA24, - 0xFBB4, 0xFA25, 0xFBB5, 0x9067, 0xFBB6, 0x90DE, 0xFBB7, 0xFA26, - 0xFBB8, 0x9115, 0xFBB9, 0x9127, 0xFBBA, 0x91DA, 0xFBBB, 0x91D7, - 0xFBBC, 0x91DE, 0xFBBD, 0x91ED, 0xFBBE, 0x91EE, 0xFBBF, 0x91E4, - 0xFBC0, 0x91E5, 0xFBC1, 0x9206, 0xFBC2, 0x9210, 0xFBC3, 0x920A, - 0xFBC4, 0x923A, 0xFBC5, 0x9240, 0xFBC6, 0x923C, 0xFBC7, 0x924E, - 0xFBC8, 0x9259, 0xFBC9, 0x9251, 0xFBCA, 0x9239, 0xFBCB, 0x9267, - 0xFBCC, 0x92A7, 0xFBCD, 0x9277, 0xFBCE, 0x9278, 0xFBCF, 0x92E7, - 0xFBD0, 0x92D7, 0xFBD1, 0x92D9, 0xFBD2, 0x92D0, 0xFBD3, 0xFA27, - 0xFBD4, 0x92D5, 0xFBD5, 0x92E0, 0xFBD6, 0x92D3, 0xFBD7, 0x9325, - 0xFBD8, 0x9321, 0xFBD9, 0x92FB, 0xFBDA, 0xFA28, 0xFBDB, 0x931E, - 0xFBDC, 0x92FF, 0xFBDD, 0x931D, 0xFBDE, 0x9302, 0xFBDF, 0x9370, - 0xFBE0, 0x9357, 0xFBE1, 0x93A4, 0xFBE2, 0x93C6, 0xFBE3, 0x93DE, - 0xFBE4, 0x93F8, 0xFBE5, 0x9431, 0xFBE6, 0x9445, 0xFBE7, 0x9448, - 0xFBE8, 0x9592, 0xFBE9, 0xF9DC, 0xFBEA, 0xFA29, 0xFBEB, 0x969D, - 0xFBEC, 0x96AF, 0xFBED, 0x9733, 0xFBEE, 0x973B, 0xFBEF, 0x9743, - 0xFBF0, 0x974D, 0xFBF1, 0x974F, 0xFBF2, 0x9751, 0xFBF3, 0x9755, - 0xFBF4, 0x9857, 0xFBF5, 0x9865, 0xFBF6, 0xFA2A, 0xFBF7, 0xFA2B, - 0xFBF8, 0x9927, 0xFBF9, 0xFA2C, 0xFBFA, 0x999E, 0xFBFB, 0x9A4E, - 0xFBFC, 0x9AD9, 0xFC40, 0x9ADC, 0xFC41, 0x9B75, 0xFC42, 0x9B72, - 0xFC43, 0x9B8F, 0xFC44, 0x9BB1, 0xFC45, 0x9BBB, 0xFC46, 0x9C00, - 0xFC47, 0x9D70, 0xFC48, 0x9D6B, 0xFC49, 0xFA2D, 0xFC4A, 0x9E19, - 0xFC4B, 0x9ED1, 0, 0 -}; -#endif - - - -WCHAR ff_convert ( /* Converted code, 0 means conversion error */ - WCHAR chr, /* Character code to be converted */ - UINT dir /* 0: Unicode to OEM code, 1: OEM code to Unicode */ -) -{ - const WCHAR *p; - WCHAR c; - int i, n, li, hi; - - - if (chr <= 0x80) { /* ASCII */ - c = chr; - } else { -#if !_TINY_TABLE - if (dir) { /* OEM code to unicode */ - p = sjis2uni; - hi = sizeof sjis2uni / 4 - 1; - } else { /* Unicode to OEM code */ - p = uni2sjis; - hi = sizeof uni2sjis / 4 - 1; - } - li = 0; - for (n = 16; n; n--) { - i = li + (hi - li) / 2; - if (chr == p[i * 2]) break; - if (chr > p[i * 2]) - li = i; - else - hi = i; - } - c = n ? p[i * 2 + 1] : 0; -#else - if (dir) { /* OEM code to unicode (Incremental search)*/ - p = &uni2sjis[1]; - do { - c = *p; - p += 2; - } while (c && c != chr); - p -= 3; - c = *p; - } else { /* Unicode to OEM code */ - li = 0; hi = sizeof uni2sjis / 4 - 1; - for (n = 16; n; n--) { - i = li + (hi - li) / 2; - if (chr == uni2sjis[i * 2]) break; - if (chr > uni2sjis[i * 2]) - li = i; - else - hi = i; - } - c = n ? uni2sjis[i * 2 + 1] : 0; - } -#endif - } - - return c; -} - - - -WCHAR ff_wtoupper ( - WCHAR chr /* Unicode character to be upper converted */ -) -{ - static const WCHAR lower[] = { /* Lower case characters to be converted */ - /* Latin Supplement */ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, - /* Latin Extended-A */ 0x101,0x103,0x105,0x107,0x109,0x10B,0x10D,0x10F,0x111,0x113,0x115,0x117,0x119,0x11B,0x11D,0x11F,0x121,0x123,0x125,0x127,0x129,0x12B,0x12D,0x12F,0x131,0x133,0x135,0x137,0x13A,0x13C,0x13E,0x140,0x142,0x144,0x146,0x148,0x14B,0x14D,0x14F,0x151,0x153,0x155,0x157,0x159,0x15B,0x15D,0x15F,0x161,0x163,0x165,0x167,0x169,0x16B,0x16D,0x16F,0x171,0x173,0x175,0x177,0x17A,0x17C,0x17E, - /* Latin Extended-B */ 0x183,0x185,0x188,0x18C,0x192,0x199,0x1A1,0x1A3,0x1A8,0x1AD,0x1B0,0x1B4,0x1B6,0x1B9,0x1BD,0x1C6,0x1C9,0x1CC,0x1CE,0x1D0,0x1D2,0x1D4,0x1D6,0x1D8,0x1DA,0x1DC,0x1DD,0x1DF,0x1E1,0x1E3,0x1E5,0x1E7,0x1E9,0x1EB,0x1ED,0x1EF,0x1F3,0x1F5,0x1FB,0x1FD,0x1FF,0x201,0x203,0x205,0x207,0x209,0x20B,0x20D,0x20F,0x211,0x213,0x215,0x217, - /* Greek, Coptic */ 0x3B1,0x3B2,0x3B3,0x3B4,0x3B5,0x3B6,0x3B7,0x3B8,0x3B9,0x3BA,0x3BB,0x3BC,0x3BD,0x3BE,0x3BF,0x3C0,0x3C1,0x3C3,0x3C4,0x3C5,0x3C6,0x3C7,0x3C8,0x3C9,0x3CA,0x3CB,0x3CC,0x3CD,0x3CE,0x3E3,0x3E5,0x3E7,0x3E9,0x3EB, - /* Cyrillic */ 0x430,0x431,0x432,0x433,0x434,0x435,0x436,0x437,0x438,0x439,0x43A,0x43B,0x43C,0x43D,0x43E,0x43F,0x440,0x441,0x442,0x443,0x444,0x445,0x446,0x447,0x448,0x449,0x44A,0x44B,0x44C,0x44D,0x44E,0x44F,0x452,0x453,0x454,0x455,0x456,0x457,0x458,0x459,0x45A,0x45B,0x45C,0x45E,0x45F,0x461,0x463,0x465,0x467,0x469,0x46B,0x46D,0x46F,0x471,0x473,0x475,0x477,0x479,0x47B,0x47D,0x47F,0x481,0x491,0x493,0x495,0x497,0x499,0x49B,0x49D,0x49F,0x4A1,0x4A3,0x4A5,0x4A7,0x4A9,0x4AB,0x4AD,0x4AF,0x4B1,0x4B3,0x4B5,0x4B7,0x4B9,0x4BB,0x4BD,0x4BF,0x4C2,0x4C4,0x4C8,0x4D1,0x4D3,0x4D5,0x4D7,0x4D9,0x4DB,0x4DD,0x4DF,0x4E1,0x4E3,0x4E5,0x4E7,0x4E9,0x4EB,0x4ED,0x4EF,0x4F1,0x4F3,0x4F5,0x4F9, - /* Armenian */ 0x561,0x562,0x563,0x564,0x565,0x566,0x567,0x568,0x569,0x56A,0x56B,0x56C,0x56D,0x56E,0x56F,0x570,0x571,0x572,0x573,0x574,0x575,0x576,0x577,0x578,0x579,0x57A,0x57B,0x57C,0x57D,0x57E,0x57F,0x580,0x581,0x582,0x583,0x584,0x585,0x586, - /* Latin Extended Additional */ 0x1E01,0x1E03,0x1E05,0x1E07,0x1E09,0x1E0B,0x1E0D,0x1E0F,0x1E11,0x1E13,0x1E15,0x1E17,0x1E19,0x1E1B,0x1E1D,0x1E1F,0x1E21,0x1E23,0x1E25,0x1E27,0x1E29,0x1E2B,0x1E2D,0x1E2F,0x1E31,0x1E33,0x1E35,0x1E37,0x1E39,0x1E3B,0x1E3D,0x1E3F,0x1E41,0x1E43,0x1E45,0x1E47,0x1E49,0x1E4B,0x1E4D,0x1E4F,0x1E51,0x1E53,0x1E55,0x1E57,0x1E59,0x1E5B,0x1E5D,0x1E5F,0x1E61,0x1E63,0x1E65,0x1E67,0x1E69,0x1E6B,0x1E6D,0x1E6F,0x1E71,0x1E73,0x1E75,0x1E77,0x1E79,0x1E7B,0x1E7D,0x1E7F,0x1E81,0x1E83,0x1E85,0x1E87,0x1E89,0x1E8B,0x1E8D,0x1E8F,0x1E91,0x1E93,0x1E95,0x1E97,0x1E99,0x1E9B,0x1E9D,0x1E9F,0x1EA1,0x1EA3,0x1EA5,0x1EA7,0x1EA9,0x1EAB,0x1EAD,0x1EAF,0x1EB1,0x1EB3,0x1EB5,0x1EB7,0x1EB9,0x1EBB,0x1EBD,0x1EBF,0x1EC1,0x1EC3,0x1EC5,0x1EC7,0x1EC9,0x1ECB,0x1ECD,0x1ECF,0x1ED1,0x1ED3,0x1ED5,0x1ED7,0x1ED9,0x1EDB,0x1EDD,0x1EDF,0x1EE1,0x1EE3,0x1EE5,0x1EE7,0x1EE9,0x1EEB,0x1EED,0x1EEF,0x1EF1,0x1EF3,0x1EF5,0x1EF7,0x1EF9, - /* Number forms */ 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178,0x2179,0x217A,0x217B,0x217C,0x217D,0x217E,0x217F, - /* Full-width */ 0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58,0xFF59,0xFF5A - }; - static const WCHAR upper[] = { /* Upper case characters correspond to lower[] */ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x178, - 0x100,0x102,0x104,0x106,0x108,0x10A,0x10C,0x10E,0x110,0x112,0x114,0x116,0x118,0x11A,0x11C,0x11E,0x120,0x122,0x124,0x126,0x128,0x12A,0x12C,0x12E,0x130,0x132,0x134,0x136,0x139,0x13B,0x13D,0x13F,0x141,0x143,0x145,0x147,0x14A,0x14C,0x14E,0x150,0x152,0x154,0x156,0x158,0x15A,0x15C,0x15E,0x160,0x162,0x164,0x166,0x168,0x16A,0x16C,0x16E,0x170,0x172,0x174,0x176,0x179,0x17B,0x17D, - 0x182,0x184,0x187,0x18B,0x191,0x198,0x1A0,0x1A2,0x1A7,0x1AC,0x1AF,0x1B3,0x1B5,0x1B8,0x1BC,0x1C4,0x1C7,0x1CA,0x1CD,0x1CF,0x1D1,0x1D3,0x1D5,0x1D7,0x1D9,0x1DB,0x18E,0x1DE,0x1E0,0x1E2,0x1E4,0x1E6,0x1E8,0x1EA,0x1EC,0x1EE,0x1F1,0x1F4,0x1FA,0x1FC,0x1FE,0x200,0x202,0x204,0x206,0x208,0x20A,0x20C,0x20E,0x210,0x212,0x214,0x216, - 0x391,0x392,0x393,0x394,0x395,0x396,0x397,0x398,0x399,0x39A,0x39B,0x39C,0x39D,0x39E,0x39F,0x3A0,0x3A1,0x3A3,0x3A4,0x3A5,0x3A6,0x3A7,0x3A8,0x3A9,0x3AA,0x3AB,0x38C,0x38E,0x38F,0x3E2,0x3E4,0x3E6,0x3E8,0x3EA, - 0x410,0x411,0x412,0x413,0x414,0x415,0x416,0x417,0x418,0x419,0x41A,0x41B,0x41C,0x41D,0x41E,0x41F,0x420,0x421,0x422,0x423,0x424,0x425,0x426,0x427,0x428,0x429,0x42A,0x42B,0x42C,0x42D,0x42E,0x42F,0x402,0x403,0x404,0x405,0x406,0x407,0x408,0x409,0x40A,0x40B,0x40C,0x40E,0x40F,0x460,0x462,0x464,0x466,0x468,0x46A,0x46C,0x46E,0x470,0x472,0x474,0x476,0x478,0x47A,0x47C,0x47E,0x480,0x490,0x492,0x494,0x496,0x498,0x49A,0x49C,0x49E,0x4A0,0x4A2,0x4A4,0x4A6,0x4A8,0x4AA,0x4AC,0x4AE,0x4B0,0x4B2,0x4B4,0x4B6,0x4B8,0x4BA,0x4BC,0x4BE,0x4C1,0x4C3,0x5C7,0x4D0,0x4D2,0x4D4,0x4D6,0x4D8,0x4DA,0x4DC,0x4DE,0x4E0,0x4E2,0x4E4,0x4E6,0x4E8,0x4EA,0x4EC,0x4EE,0x4F0,0x4F2,0x4F4,0x4F8, - 0x531,0x532,0x533,0x534,0x535,0x536,0x537,0x538,0x539,0x53A,0x53B,0x53C,0x53D,0x53E,0x53F,0x540,0x541,0x542,0x543,0x544,0x545,0x546,0x547,0x548,0x549,0x54A,0x54B,0x54C,0x54D,0x54E,0x54F,0x550,0x551,0x552,0x553,0x554,0x555,0x556, - 0x1E00,0x1E02,0x1E04,0x1E06,0x1E08,0x1E0A,0x1E0C,0x1E0E,0x1E10,0x1E12,0x1E14,0x1E16,0x1E18,0x1E1A,0x1E1C,0x1E1E,0x1E20,0x1E22,0x1E24,0x1E26,0x1E28,0x1E2A,0x1E2C,0x1E2E,0x1E30,0x1E32,0x1E34,0x1E36,0x1E38,0x1E3A,0x1E3C,0x1E3E,0x1E40,0x1E42,0x1E44,0x1E46,0x1E48,0x1E4A,0x1E4C,0x1E4E,0x1E50,0x1E52,0x1E54,0x1E56,0x1E58,0x1E5A,0x1E5C,0x1E5E,0x1E60,0x1E62,0x1E64,0x1E66,0x1E68,0x1E6A,0x1E6C,0x1E6E,0x1E70,0x1E72,0x1E74,0x1E76,0x1E78,0x1E7A,0x1E7C,0x1E7E,0x1E80,0x1E82,0x1E84,0x1E86,0x1E88,0x1E8A,0x1E8C,0x1E8E,0x1E90,0x1E92,0x1E94,0x1E96,0x1E98,0x1E9A,0x1E9C,0x1E9E,0x1EA0,0x1EA2,0x1EA4,0x1EA6,0x1EA8,0x1EAA,0x1EAC,0x1EAE,0x1EB0,0x1EB2,0x1EB4,0x1EB6,0x1EB8,0x1EBA,0x1EBC,0x1EBE,0x1EC0,0x1EC2,0x1EC4,0x1EC6,0x1EC8,0x1ECA,0x1ECC,0x1ECE,0x1ED0,0x1ED2,0x1ED4,0x1ED6,0x1ED8,0x1EDA,0x1EDC,0x1EDE,0x1EE0,0x1EE2,0x1EE4,0x1EE6,0x1EE8,0x1EEA,0x1EEC,0x1EEE,0x1EF0,0x1EF2,0x1EF4,0x1EF6,0x1EF8, - 0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x216A,0x216B,0x216C,0x216D,0x216E,0x216F, - 0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,0xFF3A - }; - UINT i, n, hi, li; - - - if (chr < 0x80) { /* ASCII characters (acceleration) */ - if (chr >= 0x61 && chr <= 0x7A) chr -= 0x20; - - } else { /* Extended characters */ - n = 12; li = 0; hi = sizeof lower / sizeof lower[0]; - do { - i = li + (hi - li) / 2; - if (chr == lower[i]) break; - if (chr > lower[i]) li = i; else hi = i; - } while (--n); - if (n) chr = upper[i]; - } - - return chr; -} - diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/cc936.c b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/cc936.c deleted file mode 100644 index 1a3da5d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/cc936.c +++ /dev/null @@ -1,11004 +0,0 @@ -/*------------------------------------------------------------------------*/ -/* Unicode - OEM code bidirectional converter (C)ChaN, 2015 */ -/* CP936 (Simplified Chinese GBK) */ -/*------------------------------------------------------------------------*/ - -#include "ff.h" - - -#if !_USE_LFN || _CODE_PAGE != 936 -#error This file is not needed in current configuration. Remove from the project. -#endif - -static -const WCHAR uni2oem[] = { -/* Unicode - OEM, Unicode - OEM, Unicode - OEM, Unicode - OEM */ - 0x00A4, 0xA1E8, 0x00A7, 0xA1EC, 0x00A8, 0xA1A7, 0x00B0, 0xA1E3, - 0x00B1, 0xA1C0, 0x00B7, 0xA1A4, 0x00D7, 0xA1C1, 0x00E0, 0xA8A4, - 0x00E1, 0xA8A2, 0x00E8, 0xA8A8, 0x00E9, 0xA8A6, 0x00EA, 0xA8BA, - 0x00EC, 0xA8AC, 0x00ED, 0xA8AA, 0x00F2, 0xA8B0, 0x00F3, 0xA8AE, - 0x00F7, 0xA1C2, 0x00F9, 0xA8B4, 0x00FA, 0xA8B2, 0x00FC, 0xA8B9, - 0x0101, 0xA8A1, 0x0113, 0xA8A5, 0x011B, 0xA8A7, 0x012B, 0xA8A9, - 0x0144, 0xA8BD, 0x0148, 0xA8BE, 0x014D, 0xA8AD, 0x016B, 0xA8B1, - 0x01CE, 0xA8A3, 0x01D0, 0xA8AB, 0x01D2, 0xA8AF, 0x01D4, 0xA8B3, - 0x01D6, 0xA8B5, 0x01D8, 0xA8B6, 0x01DA, 0xA8B7, 0x01DC, 0xA8B8, - 0x0251, 0xA8BB, 0x0261, 0xA8C0, 0x02C7, 0xA1A6, 0x02C9, 0xA1A5, - 0x02CA, 0xA840, 0x02CB, 0xA841, 0x02D9, 0xA842, 0x0391, 0xA6A1, - 0x0392, 0xA6A2, 0x0393, 0xA6A3, 0x0394, 0xA6A4, 0x0395, 0xA6A5, - 0x0396, 0xA6A6, 0x0397, 0xA6A7, 0x0398, 0xA6A8, 0x0399, 0xA6A9, - 0x039A, 0xA6AA, 0x039B, 0xA6AB, 0x039C, 0xA6AC, 0x039D, 0xA6AD, - 0x039E, 0xA6AE, 0x039F, 0xA6AF, 0x03A0, 0xA6B0, 0x03A1, 0xA6B1, - 0x03A3, 0xA6B2, 0x03A4, 0xA6B3, 0x03A5, 0xA6B4, 0x03A6, 0xA6B5, - 0x03A7, 0xA6B6, 0x03A8, 0xA6B7, 0x03A9, 0xA6B8, 0x03B1, 0xA6C1, - 0x03B2, 0xA6C2, 0x03B3, 0xA6C3, 0x03B4, 0xA6C4, 0x03B5, 0xA6C5, - 0x03B6, 0xA6C6, 0x03B7, 0xA6C7, 0x03B8, 0xA6C8, 0x03B9, 0xA6C9, - 0x03BA, 0xA6CA, 0x03BB, 0xA6CB, 0x03BC, 0xA6CC, 0x03BD, 0xA6CD, - 0x03BE, 0xA6CE, 0x03BF, 0xA6CF, 0x03C0, 0xA6D0, 0x03C1, 0xA6D1, - 0x03C3, 0xA6D2, 0x03C4, 0xA6D3, 0x03C5, 0xA6D4, 0x03C6, 0xA6D5, - 0x03C7, 0xA6D6, 0x03C8, 0xA6D7, 0x03C9, 0xA6D8, 0x0401, 0xA7A7, - 0x0410, 0xA7A1, 0x0411, 0xA7A2, 0x0412, 0xA7A3, 0x0413, 0xA7A4, - 0x0414, 0xA7A5, 0x0415, 0xA7A6, 0x0416, 0xA7A8, 0x0417, 0xA7A9, - 0x0418, 0xA7AA, 0x0419, 0xA7AB, 0x041A, 0xA7AC, 0x041B, 0xA7AD, - 0x041C, 0xA7AE, 0x041D, 0xA7AF, 0x041E, 0xA7B0, 0x041F, 0xA7B1, - 0x0420, 0xA7B2, 0x0421, 0xA7B3, 0x0422, 0xA7B4, 0x0423, 0xA7B5, - 0x0424, 0xA7B6, 0x0425, 0xA7B7, 0x0426, 0xA7B8, 0x0427, 0xA7B9, - 0x0428, 0xA7BA, 0x0429, 0xA7BB, 0x042A, 0xA7BC, 0x042B, 0xA7BD, - 0x042C, 0xA7BE, 0x042D, 0xA7BF, 0x042E, 0xA7C0, 0x042F, 0xA7C1, - 0x0430, 0xA7D1, 0x0431, 0xA7D2, 0x0432, 0xA7D3, 0x0433, 0xA7D4, - 0x0434, 0xA7D5, 0x0435, 0xA7D6, 0x0436, 0xA7D8, 0x0437, 0xA7D9, - 0x0438, 0xA7DA, 0x0439, 0xA7DB, 0x043A, 0xA7DC, 0x043B, 0xA7DD, - 0x043C, 0xA7DE, 0x043D, 0xA7DF, 0x043E, 0xA7E0, 0x043F, 0xA7E1, - 0x0440, 0xA7E2, 0x0441, 0xA7E3, 0x0442, 0xA7E4, 0x0443, 0xA7E5, - 0x0444, 0xA7E6, 0x0445, 0xA7E7, 0x0446, 0xA7E8, 0x0447, 0xA7E9, - 0x0448, 0xA7EA, 0x0449, 0xA7EB, 0x044A, 0xA7EC, 0x044B, 0xA7ED, - 0x044C, 0xA7EE, 0x044D, 0xA7EF, 0x044E, 0xA7F0, 0x044F, 0xA7F1, - 0x0451, 0xA7D7, 0x2010, 0xA95C, 0x2013, 0xA843, 0x2014, 0xA1AA, - 0x2015, 0xA844, 0x2016, 0xA1AC, 0x2018, 0xA1AE, 0x2019, 0xA1AF, - 0x201C, 0xA1B0, 0x201D, 0xA1B1, 0x2025, 0xA845, 0x2026, 0xA1AD, - 0x2030, 0xA1EB, 0x2032, 0xA1E4, 0x2033, 0xA1E5, 0x2035, 0xA846, - 0x203B, 0xA1F9, 0x20AC, 0x0080, 0x2103, 0xA1E6, 0x2105, 0xA847, - 0x2109, 0xA848, 0x2116, 0xA1ED, 0x2121, 0xA959, 0x2160, 0xA2F1, - 0x2161, 0xA2F2, 0x2162, 0xA2F3, 0x2163, 0xA2F4, 0x2164, 0xA2F5, - 0x2165, 0xA2F6, 0x2166, 0xA2F7, 0x2167, 0xA2F8, 0x2168, 0xA2F9, - 0x2169, 0xA2FA, 0x216A, 0xA2FB, 0x216B, 0xA2FC, 0x2170, 0xA2A1, - 0x2171, 0xA2A2, 0x2172, 0xA2A3, 0x2173, 0xA2A4, 0x2174, 0xA2A5, - 0x2175, 0xA2A6, 0x2176, 0xA2A7, 0x2177, 0xA2A8, 0x2178, 0xA2A9, - 0x2179, 0xA2AA, 0x2190, 0xA1FB, 0x2191, 0xA1FC, 0x2192, 0xA1FA, - 0x2193, 0xA1FD, 0x2196, 0xA849, 0x2197, 0xA84A, 0x2198, 0xA84B, - 0x2199, 0xA84C, 0x2208, 0xA1CA, 0x220F, 0xA1C7, 0x2211, 0xA1C6, - 0x2215, 0xA84D, 0x221A, 0xA1CC, 0x221D, 0xA1D8, 0x221E, 0xA1DE, - 0x221F, 0xA84E, 0x2220, 0xA1CF, 0x2223, 0xA84F, 0x2225, 0xA1CE, - 0x2227, 0xA1C4, 0x2228, 0xA1C5, 0x2229, 0xA1C9, 0x222A, 0xA1C8, - 0x222B, 0xA1D2, 0x222E, 0xA1D3, 0x2234, 0xA1E0, 0x2235, 0xA1DF, - 0x2236, 0xA1C3, 0x2237, 0xA1CB, 0x223D, 0xA1D7, 0x2248, 0xA1D6, - 0x224C, 0xA1D5, 0x2252, 0xA850, 0x2260, 0xA1D9, 0x2261, 0xA1D4, - 0x2264, 0xA1DC, 0x2265, 0xA1DD, 0x2266, 0xA851, 0x2267, 0xA852, - 0x226E, 0xA1DA, 0x226F, 0xA1DB, 0x2295, 0xA892, 0x2299, 0xA1D1, - 0x22A5, 0xA1CD, 0x22BF, 0xA853, 0x2312, 0xA1D0, 0x2460, 0xA2D9, - 0x2461, 0xA2DA, 0x2462, 0xA2DB, 0x2463, 0xA2DC, 0x2464, 0xA2DD, - 0x2465, 0xA2DE, 0x2466, 0xA2DF, 0x2467, 0xA2E0, 0x2468, 0xA2E1, - 0x2469, 0xA2E2, 0x2474, 0xA2C5, 0x2475, 0xA2C6, 0x2476, 0xA2C7, - 0x2477, 0xA2C8, 0x2478, 0xA2C9, 0x2479, 0xA2CA, 0x247A, 0xA2CB, - 0x247B, 0xA2CC, 0x247C, 0xA2CD, 0x247D, 0xA2CE, 0x247E, 0xA2CF, - 0x247F, 0xA2D0, 0x2480, 0xA2D1, 0x2481, 0xA2D2, 0x2482, 0xA2D3, - 0x2483, 0xA2D4, 0x2484, 0xA2D5, 0x2485, 0xA2D6, 0x2486, 0xA2D7, - 0x2487, 0xA2D8, 0x2488, 0xA2B1, 0x2489, 0xA2B2, 0x248A, 0xA2B3, - 0x248B, 0xA2B4, 0x248C, 0xA2B5, 0x248D, 0xA2B6, 0x248E, 0xA2B7, - 0x248F, 0xA2B8, 0x2490, 0xA2B9, 0x2491, 0xA2BA, 0x2492, 0xA2BB, - 0x2493, 0xA2BC, 0x2494, 0xA2BD, 0x2495, 0xA2BE, 0x2496, 0xA2BF, - 0x2497, 0xA2C0, 0x2498, 0xA2C1, 0x2499, 0xA2C2, 0x249A, 0xA2C3, - 0x249B, 0xA2C4, 0x2500, 0xA9A4, 0x2501, 0xA9A5, 0x2502, 0xA9A6, - 0x2503, 0xA9A7, 0x2504, 0xA9A8, 0x2505, 0xA9A9, 0x2506, 0xA9AA, - 0x2507, 0xA9AB, 0x2508, 0xA9AC, 0x2509, 0xA9AD, 0x250A, 0xA9AE, - 0x250B, 0xA9AF, 0x250C, 0xA9B0, 0x250D, 0xA9B1, 0x250E, 0xA9B2, - 0x250F, 0xA9B3, 0x2510, 0xA9B4, 0x2511, 0xA9B5, 0x2512, 0xA9B6, - 0x2513, 0xA9B7, 0x2514, 0xA9B8, 0x2515, 0xA9B9, 0x2516, 0xA9BA, - 0x2517, 0xA9BB, 0x2518, 0xA9BC, 0x2519, 0xA9BD, 0x251A, 0xA9BE, - 0x251B, 0xA9BF, 0x251C, 0xA9C0, 0x251D, 0xA9C1, 0x251E, 0xA9C2, - 0x251F, 0xA9C3, 0x2520, 0xA9C4, 0x2521, 0xA9C5, 0x2522, 0xA9C6, - 0x2523, 0xA9C7, 0x2524, 0xA9C8, 0x2525, 0xA9C9, 0x2526, 0xA9CA, - 0x2527, 0xA9CB, 0x2528, 0xA9CC, 0x2529, 0xA9CD, 0x252A, 0xA9CE, - 0x252B, 0xA9CF, 0x252C, 0xA9D0, 0x252D, 0xA9D1, 0x252E, 0xA9D2, - 0x252F, 0xA9D3, 0x2530, 0xA9D4, 0x2531, 0xA9D5, 0x2532, 0xA9D6, - 0x2533, 0xA9D7, 0x2534, 0xA9D8, 0x2535, 0xA9D9, 0x2536, 0xA9DA, - 0x2537, 0xA9DB, 0x2538, 0xA9DC, 0x2539, 0xA9DD, 0x253A, 0xA9DE, - 0x253B, 0xA9DF, 0x253C, 0xA9E0, 0x253D, 0xA9E1, 0x253E, 0xA9E2, - 0x253F, 0xA9E3, 0x2540, 0xA9E4, 0x2541, 0xA9E5, 0x2542, 0xA9E6, - 0x2543, 0xA9E7, 0x2544, 0xA9E8, 0x2545, 0xA9E9, 0x2546, 0xA9EA, - 0x2547, 0xA9EB, 0x2548, 0xA9EC, 0x2549, 0xA9ED, 0x254A, 0xA9EE, - 0x254B, 0xA9EF, 0x2550, 0xA854, 0x2551, 0xA855, 0x2552, 0xA856, - 0x2553, 0xA857, 0x2554, 0xA858, 0x2555, 0xA859, 0x2556, 0xA85A, - 0x2557, 0xA85B, 0x2558, 0xA85C, 0x2559, 0xA85D, 0x255A, 0xA85E, - 0x255B, 0xA85F, 0x255C, 0xA860, 0x255D, 0xA861, 0x255E, 0xA862, - 0x255F, 0xA863, 0x2560, 0xA864, 0x2561, 0xA865, 0x2562, 0xA866, - 0x2563, 0xA867, 0x2564, 0xA868, 0x2565, 0xA869, 0x2566, 0xA86A, - 0x2567, 0xA86B, 0x2568, 0xA86C, 0x2569, 0xA86D, 0x256A, 0xA86E, - 0x256B, 0xA86F, 0x256C, 0xA870, 0x256D, 0xA871, 0x256E, 0xA872, - 0x256F, 0xA873, 0x2570, 0xA874, 0x2571, 0xA875, 0x2572, 0xA876, - 0x2573, 0xA877, 0x2581, 0xA878, 0x2582, 0xA879, 0x2583, 0xA87A, - 0x2584, 0xA87B, 0x2585, 0xA87C, 0x2586, 0xA87D, 0x2587, 0xA87E, - 0x2588, 0xA880, 0x2589, 0xA881, 0x258A, 0xA882, 0x258B, 0xA883, - 0x258C, 0xA884, 0x258D, 0xA885, 0x258E, 0xA886, 0x258F, 0xA887, - 0x2593, 0xA888, 0x2594, 0xA889, 0x2595, 0xA88A, 0x25A0, 0xA1F6, - 0x25A1, 0xA1F5, 0x25B2, 0xA1F8, 0x25B3, 0xA1F7, 0x25BC, 0xA88B, - 0x25BD, 0xA88C, 0x25C6, 0xA1F4, 0x25C7, 0xA1F3, 0x25CB, 0xA1F0, - 0x25CE, 0xA1F2, 0x25CF, 0xA1F1, 0x25E2, 0xA88D, 0x25E3, 0xA88E, - 0x25E4, 0xA88F, 0x25E5, 0xA890, 0x2605, 0xA1EF, 0x2606, 0xA1EE, - 0x2609, 0xA891, 0x2640, 0xA1E2, 0x2642, 0xA1E1, 0x3000, 0xA1A1, - 0x3001, 0xA1A2, 0x3002, 0xA1A3, 0x3003, 0xA1A8, 0x3005, 0xA1A9, - 0x3006, 0xA965, 0x3007, 0xA996, 0x3008, 0xA1B4, 0x3009, 0xA1B5, - 0x300A, 0xA1B6, 0x300B, 0xA1B7, 0x300C, 0xA1B8, 0x300D, 0xA1B9, - 0x300E, 0xA1BA, 0x300F, 0xA1BB, 0x3010, 0xA1BE, 0x3011, 0xA1BF, - 0x3012, 0xA893, 0x3013, 0xA1FE, 0x3014, 0xA1B2, 0x3015, 0xA1B3, - 0x3016, 0xA1BC, 0x3017, 0xA1BD, 0x301D, 0xA894, 0x301E, 0xA895, - 0x3021, 0xA940, 0x3022, 0xA941, 0x3023, 0xA942, 0x3024, 0xA943, - 0x3025, 0xA944, 0x3026, 0xA945, 0x3027, 0xA946, 0x3028, 0xA947, - 0x3029, 0xA948, 0x3041, 0xA4A1, 0x3042, 0xA4A2, 0x3043, 0xA4A3, - 0x3044, 0xA4A4, 0x3045, 0xA4A5, 0x3046, 0xA4A6, 0x3047, 0xA4A7, - 0x3048, 0xA4A8, 0x3049, 0xA4A9, 0x304A, 0xA4AA, 0x304B, 0xA4AB, - 0x304C, 0xA4AC, 0x304D, 0xA4AD, 0x304E, 0xA4AE, 0x304F, 0xA4AF, - 0x3050, 0xA4B0, 0x3051, 0xA4B1, 0x3052, 0xA4B2, 0x3053, 0xA4B3, - 0x3054, 0xA4B4, 0x3055, 0xA4B5, 0x3056, 0xA4B6, 0x3057, 0xA4B7, - 0x3058, 0xA4B8, 0x3059, 0xA4B9, 0x305A, 0xA4BA, 0x305B, 0xA4BB, - 0x305C, 0xA4BC, 0x305D, 0xA4BD, 0x305E, 0xA4BE, 0x305F, 0xA4BF, - 0x3060, 0xA4C0, 0x3061, 0xA4C1, 0x3062, 0xA4C2, 0x3063, 0xA4C3, - 0x3064, 0xA4C4, 0x3065, 0xA4C5, 0x3066, 0xA4C6, 0x3067, 0xA4C7, - 0x3068, 0xA4C8, 0x3069, 0xA4C9, 0x306A, 0xA4CA, 0x306B, 0xA4CB, - 0x306C, 0xA4CC, 0x306D, 0xA4CD, 0x306E, 0xA4CE, 0x306F, 0xA4CF, - 0x3070, 0xA4D0, 0x3071, 0xA4D1, 0x3072, 0xA4D2, 0x3073, 0xA4D3, - 0x3074, 0xA4D4, 0x3075, 0xA4D5, 0x3076, 0xA4D6, 0x3077, 0xA4D7, - 0x3078, 0xA4D8, 0x3079, 0xA4D9, 0x307A, 0xA4DA, 0x307B, 0xA4DB, - 0x307C, 0xA4DC, 0x307D, 0xA4DD, 0x307E, 0xA4DE, 0x307F, 0xA4DF, - 0x3080, 0xA4E0, 0x3081, 0xA4E1, 0x3082, 0xA4E2, 0x3083, 0xA4E3, - 0x3084, 0xA4E4, 0x3085, 0xA4E5, 0x3086, 0xA4E6, 0x3087, 0xA4E7, - 0x3088, 0xA4E8, 0x3089, 0xA4E9, 0x308A, 0xA4EA, 0x308B, 0xA4EB, - 0x308C, 0xA4EC, 0x308D, 0xA4ED, 0x308E, 0xA4EE, 0x308F, 0xA4EF, - 0x3090, 0xA4F0, 0x3091, 0xA4F1, 0x3092, 0xA4F2, 0x3093, 0xA4F3, - 0x309B, 0xA961, 0x309C, 0xA962, 0x309D, 0xA966, 0x309E, 0xA967, - 0x30A1, 0xA5A1, 0x30A2, 0xA5A2, 0x30A3, 0xA5A3, 0x30A4, 0xA5A4, - 0x30A5, 0xA5A5, 0x30A6, 0xA5A6, 0x30A7, 0xA5A7, 0x30A8, 0xA5A8, - 0x30A9, 0xA5A9, 0x30AA, 0xA5AA, 0x30AB, 0xA5AB, 0x30AC, 0xA5AC, - 0x30AD, 0xA5AD, 0x30AE, 0xA5AE, 0x30AF, 0xA5AF, 0x30B0, 0xA5B0, - 0x30B1, 0xA5B1, 0x30B2, 0xA5B2, 0x30B3, 0xA5B3, 0x30B4, 0xA5B4, - 0x30B5, 0xA5B5, 0x30B6, 0xA5B6, 0x30B7, 0xA5B7, 0x30B8, 0xA5B8, - 0x30B9, 0xA5B9, 0x30BA, 0xA5BA, 0x30BB, 0xA5BB, 0x30BC, 0xA5BC, - 0x30BD, 0xA5BD, 0x30BE, 0xA5BE, 0x30BF, 0xA5BF, 0x30C0, 0xA5C0, - 0x30C1, 0xA5C1, 0x30C2, 0xA5C2, 0x30C3, 0xA5C3, 0x30C4, 0xA5C4, - 0x30C5, 0xA5C5, 0x30C6, 0xA5C6, 0x30C7, 0xA5C7, 0x30C8, 0xA5C8, - 0x30C9, 0xA5C9, 0x30CA, 0xA5CA, 0x30CB, 0xA5CB, 0x30CC, 0xA5CC, - 0x30CD, 0xA5CD, 0x30CE, 0xA5CE, 0x30CF, 0xA5CF, 0x30D0, 0xA5D0, - 0x30D1, 0xA5D1, 0x30D2, 0xA5D2, 0x30D3, 0xA5D3, 0x30D4, 0xA5D4, - 0x30D5, 0xA5D5, 0x30D6, 0xA5D6, 0x30D7, 0xA5D7, 0x30D8, 0xA5D8, - 0x30D9, 0xA5D9, 0x30DA, 0xA5DA, 0x30DB, 0xA5DB, 0x30DC, 0xA5DC, - 0x30DD, 0xA5DD, 0x30DE, 0xA5DE, 0x30DF, 0xA5DF, 0x30E0, 0xA5E0, - 0x30E1, 0xA5E1, 0x30E2, 0xA5E2, 0x30E3, 0xA5E3, 0x30E4, 0xA5E4, - 0x30E5, 0xA5E5, 0x30E6, 0xA5E6, 0x30E7, 0xA5E7, 0x30E8, 0xA5E8, - 0x30E9, 0xA5E9, 0x30EA, 0xA5EA, 0x30EB, 0xA5EB, 0x30EC, 0xA5EC, - 0x30ED, 0xA5ED, 0x30EE, 0xA5EE, 0x30EF, 0xA5EF, 0x30F0, 0xA5F0, - 0x30F1, 0xA5F1, 0x30F2, 0xA5F2, 0x30F3, 0xA5F3, 0x30F4, 0xA5F4, - 0x30F5, 0xA5F5, 0x30F6, 0xA5F6, 0x30FC, 0xA960, 0x30FD, 0xA963, - 0x30FE, 0xA964, 0x3105, 0xA8C5, 0x3106, 0xA8C6, 0x3107, 0xA8C7, - 0x3108, 0xA8C8, 0x3109, 0xA8C9, 0x310A, 0xA8CA, 0x310B, 0xA8CB, - 0x310C, 0xA8CC, 0x310D, 0xA8CD, 0x310E, 0xA8CE, 0x310F, 0xA8CF, - 0x3110, 0xA8D0, 0x3111, 0xA8D1, 0x3112, 0xA8D2, 0x3113, 0xA8D3, - 0x3114, 0xA8D4, 0x3115, 0xA8D5, 0x3116, 0xA8D6, 0x3117, 0xA8D7, - 0x3118, 0xA8D8, 0x3119, 0xA8D9, 0x311A, 0xA8DA, 0x311B, 0xA8DB, - 0x311C, 0xA8DC, 0x311D, 0xA8DD, 0x311E, 0xA8DE, 0x311F, 0xA8DF, - 0x3120, 0xA8E0, 0x3121, 0xA8E1, 0x3122, 0xA8E2, 0x3123, 0xA8E3, - 0x3124, 0xA8E4, 0x3125, 0xA8E5, 0x3126, 0xA8E6, 0x3127, 0xA8E7, - 0x3128, 0xA8E8, 0x3129, 0xA8E9, 0x3220, 0xA2E5, 0x3221, 0xA2E6, - 0x3222, 0xA2E7, 0x3223, 0xA2E8, 0x3224, 0xA2E9, 0x3225, 0xA2EA, - 0x3226, 0xA2EB, 0x3227, 0xA2EC, 0x3228, 0xA2ED, 0x3229, 0xA2EE, - 0x3231, 0xA95A, 0x32A3, 0xA949, 0x338E, 0xA94A, 0x338F, 0xA94B, - 0x339C, 0xA94C, 0x339D, 0xA94D, 0x339E, 0xA94E, 0x33A1, 0xA94F, - 0x33C4, 0xA950, 0x33CE, 0xA951, 0x33D1, 0xA952, 0x33D2, 0xA953, - 0x33D5, 0xA954, 0x4E00, 0xD2BB, 0x4E01, 0xB6A1, 0x4E02, 0x8140, - 0x4E03, 0xC6DF, 0x4E04, 0x8141, 0x4E05, 0x8142, 0x4E06, 0x8143, - 0x4E07, 0xCDF2, 0x4E08, 0xD5C9, 0x4E09, 0xC8FD, 0x4E0A, 0xC9CF, - 0x4E0B, 0xCFC2, 0x4E0C, 0xD8A2, 0x4E0D, 0xB2BB, 0x4E0E, 0xD3EB, - 0x4E0F, 0x8144, 0x4E10, 0xD8A4, 0x4E11, 0xB3F3, 0x4E12, 0x8145, - 0x4E13, 0xD7A8, 0x4E14, 0xC7D2, 0x4E15, 0xD8A7, 0x4E16, 0xCAC0, - 0x4E17, 0x8146, 0x4E18, 0xC7F0, 0x4E19, 0xB1FB, 0x4E1A, 0xD2B5, - 0x4E1B, 0xB4D4, 0x4E1C, 0xB6AB, 0x4E1D, 0xCBBF, 0x4E1E, 0xD8A9, - 0x4E1F, 0x8147, 0x4E20, 0x8148, 0x4E21, 0x8149, 0x4E22, 0xB6AA, - 0x4E23, 0x814A, 0x4E24, 0xC1BD, 0x4E25, 0xD1CF, 0x4E26, 0x814B, - 0x4E27, 0xC9A5, 0x4E28, 0xD8AD, 0x4E29, 0x814C, 0x4E2A, 0xB8F6, - 0x4E2B, 0xD1BE, 0x4E2C, 0xE3DC, 0x4E2D, 0xD6D0, 0x4E2E, 0x814D, - 0x4E2F, 0x814E, 0x4E30, 0xB7E1, 0x4E31, 0x814F, 0x4E32, 0xB4AE, - 0x4E33, 0x8150, 0x4E34, 0xC1D9, 0x4E35, 0x8151, 0x4E36, 0xD8BC, - 0x4E37, 0x8152, 0x4E38, 0xCDE8, 0x4E39, 0xB5A4, 0x4E3A, 0xCEAA, - 0x4E3B, 0xD6F7, 0x4E3C, 0x8153, 0x4E3D, 0xC0F6, 0x4E3E, 0xBED9, - 0x4E3F, 0xD8AF, 0x4E40, 0x8154, 0x4E41, 0x8155, 0x4E42, 0x8156, - 0x4E43, 0xC4CB, 0x4E44, 0x8157, 0x4E45, 0xBEC3, 0x4E46, 0x8158, - 0x4E47, 0xD8B1, 0x4E48, 0xC3B4, 0x4E49, 0xD2E5, 0x4E4A, 0x8159, - 0x4E4B, 0xD6AE, 0x4E4C, 0xCEDA, 0x4E4D, 0xD5A7, 0x4E4E, 0xBAF5, - 0x4E4F, 0xB7A6, 0x4E50, 0xC0D6, 0x4E51, 0x815A, 0x4E52, 0xC6B9, - 0x4E53, 0xC5D2, 0x4E54, 0xC7C7, 0x4E55, 0x815B, 0x4E56, 0xB9D4, - 0x4E57, 0x815C, 0x4E58, 0xB3CB, 0x4E59, 0xD2D2, 0x4E5A, 0x815D, - 0x4E5B, 0x815E, 0x4E5C, 0xD8BF, 0x4E5D, 0xBEC5, 0x4E5E, 0xC6F2, - 0x4E5F, 0xD2B2, 0x4E60, 0xCFB0, 0x4E61, 0xCFE7, 0x4E62, 0x815F, - 0x4E63, 0x8160, 0x4E64, 0x8161, 0x4E65, 0x8162, 0x4E66, 0xCAE9, - 0x4E67, 0x8163, 0x4E68, 0x8164, 0x4E69, 0xD8C0, 0x4E6A, 0x8165, - 0x4E6B, 0x8166, 0x4E6C, 0x8167, 0x4E6D, 0x8168, 0x4E6E, 0x8169, - 0x4E6F, 0x816A, 0x4E70, 0xC2F2, 0x4E71, 0xC2D2, 0x4E72, 0x816B, - 0x4E73, 0xC8E9, 0x4E74, 0x816C, 0x4E75, 0x816D, 0x4E76, 0x816E, - 0x4E77, 0x816F, 0x4E78, 0x8170, 0x4E79, 0x8171, 0x4E7A, 0x8172, - 0x4E7B, 0x8173, 0x4E7C, 0x8174, 0x4E7D, 0x8175, 0x4E7E, 0xC7AC, - 0x4E7F, 0x8176, 0x4E80, 0x8177, 0x4E81, 0x8178, 0x4E82, 0x8179, - 0x4E83, 0x817A, 0x4E84, 0x817B, 0x4E85, 0x817C, 0x4E86, 0xC1CB, - 0x4E87, 0x817D, 0x4E88, 0xD3E8, 0x4E89, 0xD5F9, 0x4E8A, 0x817E, - 0x4E8B, 0xCAC2, 0x4E8C, 0xB6FE, 0x4E8D, 0xD8A1, 0x4E8E, 0xD3DA, - 0x4E8F, 0xBFF7, 0x4E90, 0x8180, 0x4E91, 0xD4C6, 0x4E92, 0xBBA5, - 0x4E93, 0xD8C1, 0x4E94, 0xCEE5, 0x4E95, 0xBEAE, 0x4E96, 0x8181, - 0x4E97, 0x8182, 0x4E98, 0xD8A8, 0x4E99, 0x8183, 0x4E9A, 0xD1C7, - 0x4E9B, 0xD0A9, 0x4E9C, 0x8184, 0x4E9D, 0x8185, 0x4E9E, 0x8186, - 0x4E9F, 0xD8BD, 0x4EA0, 0xD9EF, 0x4EA1, 0xCDF6, 0x4EA2, 0xBFBA, - 0x4EA3, 0x8187, 0x4EA4, 0xBDBB, 0x4EA5, 0xBAA5, 0x4EA6, 0xD2E0, - 0x4EA7, 0xB2FA, 0x4EA8, 0xBAE0, 0x4EA9, 0xC4B6, 0x4EAA, 0x8188, - 0x4EAB, 0xCFED, 0x4EAC, 0xBEA9, 0x4EAD, 0xCDA4, 0x4EAE, 0xC1C1, - 0x4EAF, 0x8189, 0x4EB0, 0x818A, 0x4EB1, 0x818B, 0x4EB2, 0xC7D7, - 0x4EB3, 0xD9F1, 0x4EB4, 0x818C, 0x4EB5, 0xD9F4, 0x4EB6, 0x818D, - 0x4EB7, 0x818E, 0x4EB8, 0x818F, 0x4EB9, 0x8190, 0x4EBA, 0xC8CB, - 0x4EBB, 0xD8E9, 0x4EBC, 0x8191, 0x4EBD, 0x8192, 0x4EBE, 0x8193, - 0x4EBF, 0xD2DA, 0x4EC0, 0xCAB2, 0x4EC1, 0xC8CA, 0x4EC2, 0xD8EC, - 0x4EC3, 0xD8EA, 0x4EC4, 0xD8C6, 0x4EC5, 0xBDF6, 0x4EC6, 0xC6CD, - 0x4EC7, 0xB3F0, 0x4EC8, 0x8194, 0x4EC9, 0xD8EB, 0x4ECA, 0xBDF1, - 0x4ECB, 0xBDE9, 0x4ECC, 0x8195, 0x4ECD, 0xC8D4, 0x4ECE, 0xB4D3, - 0x4ECF, 0x8196, 0x4ED0, 0x8197, 0x4ED1, 0xC2D8, 0x4ED2, 0x8198, - 0x4ED3, 0xB2D6, 0x4ED4, 0xD7D0, 0x4ED5, 0xCACB, 0x4ED6, 0xCBFB, - 0x4ED7, 0xD5CC, 0x4ED8, 0xB8B6, 0x4ED9, 0xCFC9, 0x4EDA, 0x8199, - 0x4EDB, 0x819A, 0x4EDC, 0x819B, 0x4EDD, 0xD9DA, 0x4EDE, 0xD8F0, - 0x4EDF, 0xC7AA, 0x4EE0, 0x819C, 0x4EE1, 0xD8EE, 0x4EE2, 0x819D, - 0x4EE3, 0xB4FA, 0x4EE4, 0xC1EE, 0x4EE5, 0xD2D4, 0x4EE6, 0x819E, - 0x4EE7, 0x819F, 0x4EE8, 0xD8ED, 0x4EE9, 0x81A0, 0x4EEA, 0xD2C7, - 0x4EEB, 0xD8EF, 0x4EEC, 0xC3C7, 0x4EED, 0x81A1, 0x4EEE, 0x81A2, - 0x4EEF, 0x81A3, 0x4EF0, 0xD1F6, 0x4EF1, 0x81A4, 0x4EF2, 0xD6D9, - 0x4EF3, 0xD8F2, 0x4EF4, 0x81A5, 0x4EF5, 0xD8F5, 0x4EF6, 0xBCFE, - 0x4EF7, 0xBCDB, 0x4EF8, 0x81A6, 0x4EF9, 0x81A7, 0x4EFA, 0x81A8, - 0x4EFB, 0xC8CE, 0x4EFC, 0x81A9, 0x4EFD, 0xB7DD, 0x4EFE, 0x81AA, - 0x4EFF, 0xB7C2, 0x4F00, 0x81AB, 0x4F01, 0xC6F3, 0x4F02, 0x81AC, - 0x4F03, 0x81AD, 0x4F04, 0x81AE, 0x4F05, 0x81AF, 0x4F06, 0x81B0, - 0x4F07, 0x81B1, 0x4F08, 0x81B2, 0x4F09, 0xD8F8, 0x4F0A, 0xD2C1, - 0x4F0B, 0x81B3, 0x4F0C, 0x81B4, 0x4F0D, 0xCEE9, 0x4F0E, 0xBCBF, - 0x4F0F, 0xB7FC, 0x4F10, 0xB7A5, 0x4F11, 0xD0DD, 0x4F12, 0x81B5, - 0x4F13, 0x81B6, 0x4F14, 0x81B7, 0x4F15, 0x81B8, 0x4F16, 0x81B9, - 0x4F17, 0xD6DA, 0x4F18, 0xD3C5, 0x4F19, 0xBBEF, 0x4F1A, 0xBBE1, - 0x4F1B, 0xD8F1, 0x4F1C, 0x81BA, 0x4F1D, 0x81BB, 0x4F1E, 0xC9A1, - 0x4F1F, 0xCEB0, 0x4F20, 0xB4AB, 0x4F21, 0x81BC, 0x4F22, 0xD8F3, - 0x4F23, 0x81BD, 0x4F24, 0xC9CB, 0x4F25, 0xD8F6, 0x4F26, 0xC2D7, - 0x4F27, 0xD8F7, 0x4F28, 0x81BE, 0x4F29, 0x81BF, 0x4F2A, 0xCEB1, - 0x4F2B, 0xD8F9, 0x4F2C, 0x81C0, 0x4F2D, 0x81C1, 0x4F2E, 0x81C2, - 0x4F2F, 0xB2AE, 0x4F30, 0xB9C0, 0x4F31, 0x81C3, 0x4F32, 0xD9A3, - 0x4F33, 0x81C4, 0x4F34, 0xB0E9, 0x4F35, 0x81C5, 0x4F36, 0xC1E6, - 0x4F37, 0x81C6, 0x4F38, 0xC9EC, 0x4F39, 0x81C7, 0x4F3A, 0xCBC5, - 0x4F3B, 0x81C8, 0x4F3C, 0xCBC6, 0x4F3D, 0xD9A4, 0x4F3E, 0x81C9, - 0x4F3F, 0x81CA, 0x4F40, 0x81CB, 0x4F41, 0x81CC, 0x4F42, 0x81CD, - 0x4F43, 0xB5E8, 0x4F44, 0x81CE, 0x4F45, 0x81CF, 0x4F46, 0xB5AB, - 0x4F47, 0x81D0, 0x4F48, 0x81D1, 0x4F49, 0x81D2, 0x4F4A, 0x81D3, - 0x4F4B, 0x81D4, 0x4F4C, 0x81D5, 0x4F4D, 0xCEBB, 0x4F4E, 0xB5CD, - 0x4F4F, 0xD7A1, 0x4F50, 0xD7F4, 0x4F51, 0xD3D3, 0x4F52, 0x81D6, - 0x4F53, 0xCCE5, 0x4F54, 0x81D7, 0x4F55, 0xBACE, 0x4F56, 0x81D8, - 0x4F57, 0xD9A2, 0x4F58, 0xD9DC, 0x4F59, 0xD3E0, 0x4F5A, 0xD8FD, - 0x4F5B, 0xB7F0, 0x4F5C, 0xD7F7, 0x4F5D, 0xD8FE, 0x4F5E, 0xD8FA, - 0x4F5F, 0xD9A1, 0x4F60, 0xC4E3, 0x4F61, 0x81D9, 0x4F62, 0x81DA, - 0x4F63, 0xD3B6, 0x4F64, 0xD8F4, 0x4F65, 0xD9DD, 0x4F66, 0x81DB, - 0x4F67, 0xD8FB, 0x4F68, 0x81DC, 0x4F69, 0xC5E5, 0x4F6A, 0x81DD, - 0x4F6B, 0x81DE, 0x4F6C, 0xC0D0, 0x4F6D, 0x81DF, 0x4F6E, 0x81E0, - 0x4F6F, 0xD1F0, 0x4F70, 0xB0DB, 0x4F71, 0x81E1, 0x4F72, 0x81E2, - 0x4F73, 0xBCD1, 0x4F74, 0xD9A6, 0x4F75, 0x81E3, 0x4F76, 0xD9A5, - 0x4F77, 0x81E4, 0x4F78, 0x81E5, 0x4F79, 0x81E6, 0x4F7A, 0x81E7, - 0x4F7B, 0xD9AC, 0x4F7C, 0xD9AE, 0x4F7D, 0x81E8, 0x4F7E, 0xD9AB, - 0x4F7F, 0xCAB9, 0x4F80, 0x81E9, 0x4F81, 0x81EA, 0x4F82, 0x81EB, - 0x4F83, 0xD9A9, 0x4F84, 0xD6B6, 0x4F85, 0x81EC, 0x4F86, 0x81ED, - 0x4F87, 0x81EE, 0x4F88, 0xB3DE, 0x4F89, 0xD9A8, 0x4F8A, 0x81EF, - 0x4F8B, 0xC0FD, 0x4F8C, 0x81F0, 0x4F8D, 0xCACC, 0x4F8E, 0x81F1, - 0x4F8F, 0xD9AA, 0x4F90, 0x81F2, 0x4F91, 0xD9A7, 0x4F92, 0x81F3, - 0x4F93, 0x81F4, 0x4F94, 0xD9B0, 0x4F95, 0x81F5, 0x4F96, 0x81F6, - 0x4F97, 0xB6B1, 0x4F98, 0x81F7, 0x4F99, 0x81F8, 0x4F9A, 0x81F9, - 0x4F9B, 0xB9A9, 0x4F9C, 0x81FA, 0x4F9D, 0xD2C0, 0x4F9E, 0x81FB, - 0x4F9F, 0x81FC, 0x4FA0, 0xCFC0, 0x4FA1, 0x81FD, 0x4FA2, 0x81FE, - 0x4FA3, 0xC2C2, 0x4FA4, 0x8240, 0x4FA5, 0xBDC4, 0x4FA6, 0xD5EC, - 0x4FA7, 0xB2E0, 0x4FA8, 0xC7C8, 0x4FA9, 0xBFEB, 0x4FAA, 0xD9AD, - 0x4FAB, 0x8241, 0x4FAC, 0xD9AF, 0x4FAD, 0x8242, 0x4FAE, 0xCEEA, - 0x4FAF, 0xBAEE, 0x4FB0, 0x8243, 0x4FB1, 0x8244, 0x4FB2, 0x8245, - 0x4FB3, 0x8246, 0x4FB4, 0x8247, 0x4FB5, 0xC7D6, 0x4FB6, 0x8248, - 0x4FB7, 0x8249, 0x4FB8, 0x824A, 0x4FB9, 0x824B, 0x4FBA, 0x824C, - 0x4FBB, 0x824D, 0x4FBC, 0x824E, 0x4FBD, 0x824F, 0x4FBE, 0x8250, - 0x4FBF, 0xB1E3, 0x4FC0, 0x8251, 0x4FC1, 0x8252, 0x4FC2, 0x8253, - 0x4FC3, 0xB4D9, 0x4FC4, 0xB6ED, 0x4FC5, 0xD9B4, 0x4FC6, 0x8254, - 0x4FC7, 0x8255, 0x4FC8, 0x8256, 0x4FC9, 0x8257, 0x4FCA, 0xBFA1, - 0x4FCB, 0x8258, 0x4FCC, 0x8259, 0x4FCD, 0x825A, 0x4FCE, 0xD9DE, - 0x4FCF, 0xC7CE, 0x4FD0, 0xC0FE, 0x4FD1, 0xD9B8, 0x4FD2, 0x825B, - 0x4FD3, 0x825C, 0x4FD4, 0x825D, 0x4FD5, 0x825E, 0x4FD6, 0x825F, - 0x4FD7, 0xCBD7, 0x4FD8, 0xB7FD, 0x4FD9, 0x8260, 0x4FDA, 0xD9B5, - 0x4FDB, 0x8261, 0x4FDC, 0xD9B7, 0x4FDD, 0xB1A3, 0x4FDE, 0xD3E1, - 0x4FDF, 0xD9B9, 0x4FE0, 0x8262, 0x4FE1, 0xD0C5, 0x4FE2, 0x8263, - 0x4FE3, 0xD9B6, 0x4FE4, 0x8264, 0x4FE5, 0x8265, 0x4FE6, 0xD9B1, - 0x4FE7, 0x8266, 0x4FE8, 0xD9B2, 0x4FE9, 0xC1A9, 0x4FEA, 0xD9B3, - 0x4FEB, 0x8267, 0x4FEC, 0x8268, 0x4FED, 0xBCF3, 0x4FEE, 0xD0DE, - 0x4FEF, 0xB8A9, 0x4FF0, 0x8269, 0x4FF1, 0xBEE3, 0x4FF2, 0x826A, - 0x4FF3, 0xD9BD, 0x4FF4, 0x826B, 0x4FF5, 0x826C, 0x4FF6, 0x826D, - 0x4FF7, 0x826E, 0x4FF8, 0xD9BA, 0x4FF9, 0x826F, 0x4FFA, 0xB0B3, - 0x4FFB, 0x8270, 0x4FFC, 0x8271, 0x4FFD, 0x8272, 0x4FFE, 0xD9C2, - 0x4FFF, 0x8273, 0x5000, 0x8274, 0x5001, 0x8275, 0x5002, 0x8276, - 0x5003, 0x8277, 0x5004, 0x8278, 0x5005, 0x8279, 0x5006, 0x827A, - 0x5007, 0x827B, 0x5008, 0x827C, 0x5009, 0x827D, 0x500A, 0x827E, - 0x500B, 0x8280, 0x500C, 0xD9C4, 0x500D, 0xB1B6, 0x500E, 0x8281, - 0x500F, 0xD9BF, 0x5010, 0x8282, 0x5011, 0x8283, 0x5012, 0xB5B9, - 0x5013, 0x8284, 0x5014, 0xBEF3, 0x5015, 0x8285, 0x5016, 0x8286, - 0x5017, 0x8287, 0x5018, 0xCCC8, 0x5019, 0xBAF2, 0x501A, 0xD2D0, - 0x501B, 0x8288, 0x501C, 0xD9C3, 0x501D, 0x8289, 0x501E, 0x828A, - 0x501F, 0xBDE8, 0x5020, 0x828B, 0x5021, 0xB3AB, 0x5022, 0x828C, - 0x5023, 0x828D, 0x5024, 0x828E, 0x5025, 0xD9C5, 0x5026, 0xBEEB, - 0x5027, 0x828F, 0x5028, 0xD9C6, 0x5029, 0xD9BB, 0x502A, 0xC4DF, - 0x502B, 0x8290, 0x502C, 0xD9BE, 0x502D, 0xD9C1, 0x502E, 0xD9C0, - 0x502F, 0x8291, 0x5030, 0x8292, 0x5031, 0x8293, 0x5032, 0x8294, - 0x5033, 0x8295, 0x5034, 0x8296, 0x5035, 0x8297, 0x5036, 0x8298, - 0x5037, 0x8299, 0x5038, 0x829A, 0x5039, 0x829B, 0x503A, 0xD5AE, - 0x503B, 0x829C, 0x503C, 0xD6B5, 0x503D, 0x829D, 0x503E, 0xC7E3, - 0x503F, 0x829E, 0x5040, 0x829F, 0x5041, 0x82A0, 0x5042, 0x82A1, - 0x5043, 0xD9C8, 0x5044, 0x82A2, 0x5045, 0x82A3, 0x5046, 0x82A4, - 0x5047, 0xBCD9, 0x5048, 0xD9CA, 0x5049, 0x82A5, 0x504A, 0x82A6, - 0x504B, 0x82A7, 0x504C, 0xD9BC, 0x504D, 0x82A8, 0x504E, 0xD9CB, - 0x504F, 0xC6AB, 0x5050, 0x82A9, 0x5051, 0x82AA, 0x5052, 0x82AB, - 0x5053, 0x82AC, 0x5054, 0x82AD, 0x5055, 0xD9C9, 0x5056, 0x82AE, - 0x5057, 0x82AF, 0x5058, 0x82B0, 0x5059, 0x82B1, 0x505A, 0xD7F6, - 0x505B, 0x82B2, 0x505C, 0xCDA3, 0x505D, 0x82B3, 0x505E, 0x82B4, - 0x505F, 0x82B5, 0x5060, 0x82B6, 0x5061, 0x82B7, 0x5062, 0x82B8, - 0x5063, 0x82B9, 0x5064, 0x82BA, 0x5065, 0xBDA1, 0x5066, 0x82BB, - 0x5067, 0x82BC, 0x5068, 0x82BD, 0x5069, 0x82BE, 0x506A, 0x82BF, - 0x506B, 0x82C0, 0x506C, 0xD9CC, 0x506D, 0x82C1, 0x506E, 0x82C2, - 0x506F, 0x82C3, 0x5070, 0x82C4, 0x5071, 0x82C5, 0x5072, 0x82C6, - 0x5073, 0x82C7, 0x5074, 0x82C8, 0x5075, 0x82C9, 0x5076, 0xC5BC, - 0x5077, 0xCDB5, 0x5078, 0x82CA, 0x5079, 0x82CB, 0x507A, 0x82CC, - 0x507B, 0xD9CD, 0x507C, 0x82CD, 0x507D, 0x82CE, 0x507E, 0xD9C7, - 0x507F, 0xB3A5, 0x5080, 0xBFFE, 0x5081, 0x82CF, 0x5082, 0x82D0, - 0x5083, 0x82D1, 0x5084, 0x82D2, 0x5085, 0xB8B5, 0x5086, 0x82D3, - 0x5087, 0x82D4, 0x5088, 0xC0FC, 0x5089, 0x82D5, 0x508A, 0x82D6, - 0x508B, 0x82D7, 0x508C, 0x82D8, 0x508D, 0xB0F8, 0x508E, 0x82D9, - 0x508F, 0x82DA, 0x5090, 0x82DB, 0x5091, 0x82DC, 0x5092, 0x82DD, - 0x5093, 0x82DE, 0x5094, 0x82DF, 0x5095, 0x82E0, 0x5096, 0x82E1, - 0x5097, 0x82E2, 0x5098, 0x82E3, 0x5099, 0x82E4, 0x509A, 0x82E5, - 0x509B, 0x82E6, 0x509C, 0x82E7, 0x509D, 0x82E8, 0x509E, 0x82E9, - 0x509F, 0x82EA, 0x50A0, 0x82EB, 0x50A1, 0x82EC, 0x50A2, 0x82ED, - 0x50A3, 0xB4F6, 0x50A4, 0x82EE, 0x50A5, 0xD9CE, 0x50A6, 0x82EF, - 0x50A7, 0xD9CF, 0x50A8, 0xB4A2, 0x50A9, 0xD9D0, 0x50AA, 0x82F0, - 0x50AB, 0x82F1, 0x50AC, 0xB4DF, 0x50AD, 0x82F2, 0x50AE, 0x82F3, - 0x50AF, 0x82F4, 0x50B0, 0x82F5, 0x50B1, 0x82F6, 0x50B2, 0xB0C1, - 0x50B3, 0x82F7, 0x50B4, 0x82F8, 0x50B5, 0x82F9, 0x50B6, 0x82FA, - 0x50B7, 0x82FB, 0x50B8, 0x82FC, 0x50B9, 0x82FD, 0x50BA, 0xD9D1, - 0x50BB, 0xC9B5, 0x50BC, 0x82FE, 0x50BD, 0x8340, 0x50BE, 0x8341, - 0x50BF, 0x8342, 0x50C0, 0x8343, 0x50C1, 0x8344, 0x50C2, 0x8345, - 0x50C3, 0x8346, 0x50C4, 0x8347, 0x50C5, 0x8348, 0x50C6, 0x8349, - 0x50C7, 0x834A, 0x50C8, 0x834B, 0x50C9, 0x834C, 0x50CA, 0x834D, - 0x50CB, 0x834E, 0x50CC, 0x834F, 0x50CD, 0x8350, 0x50CE, 0x8351, - 0x50CF, 0xCFF1, 0x50D0, 0x8352, 0x50D1, 0x8353, 0x50D2, 0x8354, - 0x50D3, 0x8355, 0x50D4, 0x8356, 0x50D5, 0x8357, 0x50D6, 0xD9D2, - 0x50D7, 0x8358, 0x50D8, 0x8359, 0x50D9, 0x835A, 0x50DA, 0xC1C5, - 0x50DB, 0x835B, 0x50DC, 0x835C, 0x50DD, 0x835D, 0x50DE, 0x835E, - 0x50DF, 0x835F, 0x50E0, 0x8360, 0x50E1, 0x8361, 0x50E2, 0x8362, - 0x50E3, 0x8363, 0x50E4, 0x8364, 0x50E5, 0x8365, 0x50E6, 0xD9D6, - 0x50E7, 0xC9AE, 0x50E8, 0x8366, 0x50E9, 0x8367, 0x50EA, 0x8368, - 0x50EB, 0x8369, 0x50EC, 0xD9D5, 0x50ED, 0xD9D4, 0x50EE, 0xD9D7, - 0x50EF, 0x836A, 0x50F0, 0x836B, 0x50F1, 0x836C, 0x50F2, 0x836D, - 0x50F3, 0xCBDB, 0x50F4, 0x836E, 0x50F5, 0xBDA9, 0x50F6, 0x836F, - 0x50F7, 0x8370, 0x50F8, 0x8371, 0x50F9, 0x8372, 0x50FA, 0x8373, - 0x50FB, 0xC6A7, 0x50FC, 0x8374, 0x50FD, 0x8375, 0x50FE, 0x8376, - 0x50FF, 0x8377, 0x5100, 0x8378, 0x5101, 0x8379, 0x5102, 0x837A, - 0x5103, 0x837B, 0x5104, 0x837C, 0x5105, 0x837D, 0x5106, 0xD9D3, - 0x5107, 0xD9D8, 0x5108, 0x837E, 0x5109, 0x8380, 0x510A, 0x8381, - 0x510B, 0xD9D9, 0x510C, 0x8382, 0x510D, 0x8383, 0x510E, 0x8384, - 0x510F, 0x8385, 0x5110, 0x8386, 0x5111, 0x8387, 0x5112, 0xC8E5, - 0x5113, 0x8388, 0x5114, 0x8389, 0x5115, 0x838A, 0x5116, 0x838B, - 0x5117, 0x838C, 0x5118, 0x838D, 0x5119, 0x838E, 0x511A, 0x838F, - 0x511B, 0x8390, 0x511C, 0x8391, 0x511D, 0x8392, 0x511E, 0x8393, - 0x511F, 0x8394, 0x5120, 0x8395, 0x5121, 0xC0DC, 0x5122, 0x8396, - 0x5123, 0x8397, 0x5124, 0x8398, 0x5125, 0x8399, 0x5126, 0x839A, - 0x5127, 0x839B, 0x5128, 0x839C, 0x5129, 0x839D, 0x512A, 0x839E, - 0x512B, 0x839F, 0x512C, 0x83A0, 0x512D, 0x83A1, 0x512E, 0x83A2, - 0x512F, 0x83A3, 0x5130, 0x83A4, 0x5131, 0x83A5, 0x5132, 0x83A6, - 0x5133, 0x83A7, 0x5134, 0x83A8, 0x5135, 0x83A9, 0x5136, 0x83AA, - 0x5137, 0x83AB, 0x5138, 0x83AC, 0x5139, 0x83AD, 0x513A, 0x83AE, - 0x513B, 0x83AF, 0x513C, 0x83B0, 0x513D, 0x83B1, 0x513E, 0x83B2, - 0x513F, 0xB6F9, 0x5140, 0xD8A3, 0x5141, 0xD4CA, 0x5142, 0x83B3, - 0x5143, 0xD4AA, 0x5144, 0xD0D6, 0x5145, 0xB3E4, 0x5146, 0xD5D7, - 0x5147, 0x83B4, 0x5148, 0xCFC8, 0x5149, 0xB9E2, 0x514A, 0x83B5, - 0x514B, 0xBFCB, 0x514C, 0x83B6, 0x514D, 0xC3E2, 0x514E, 0x83B7, - 0x514F, 0x83B8, 0x5150, 0x83B9, 0x5151, 0xB6D2, 0x5152, 0x83BA, - 0x5153, 0x83BB, 0x5154, 0xCDC3, 0x5155, 0xD9EE, 0x5156, 0xD9F0, - 0x5157, 0x83BC, 0x5158, 0x83BD, 0x5159, 0x83BE, 0x515A, 0xB5B3, - 0x515B, 0x83BF, 0x515C, 0xB6B5, 0x515D, 0x83C0, 0x515E, 0x83C1, - 0x515F, 0x83C2, 0x5160, 0x83C3, 0x5161, 0x83C4, 0x5162, 0xBEA4, - 0x5163, 0x83C5, 0x5164, 0x83C6, 0x5165, 0xC8EB, 0x5166, 0x83C7, - 0x5167, 0x83C8, 0x5168, 0xC8AB, 0x5169, 0x83C9, 0x516A, 0x83CA, - 0x516B, 0xB0CB, 0x516C, 0xB9AB, 0x516D, 0xC1F9, 0x516E, 0xD9E2, - 0x516F, 0x83CB, 0x5170, 0xC0BC, 0x5171, 0xB9B2, 0x5172, 0x83CC, - 0x5173, 0xB9D8, 0x5174, 0xD0CB, 0x5175, 0xB1F8, 0x5176, 0xC6E4, - 0x5177, 0xBEDF, 0x5178, 0xB5E4, 0x5179, 0xD7C8, 0x517A, 0x83CD, - 0x517B, 0xD1F8, 0x517C, 0xBCE6, 0x517D, 0xCADE, 0x517E, 0x83CE, - 0x517F, 0x83CF, 0x5180, 0xBCBD, 0x5181, 0xD9E6, 0x5182, 0xD8E7, - 0x5183, 0x83D0, 0x5184, 0x83D1, 0x5185, 0xC4DA, 0x5186, 0x83D2, - 0x5187, 0x83D3, 0x5188, 0xB8D4, 0x5189, 0xC8BD, 0x518A, 0x83D4, - 0x518B, 0x83D5, 0x518C, 0xB2E1, 0x518D, 0xD4D9, 0x518E, 0x83D6, - 0x518F, 0x83D7, 0x5190, 0x83D8, 0x5191, 0x83D9, 0x5192, 0xC3B0, - 0x5193, 0x83DA, 0x5194, 0x83DB, 0x5195, 0xC3E1, 0x5196, 0xDAA2, - 0x5197, 0xC8DF, 0x5198, 0x83DC, 0x5199, 0xD0B4, 0x519A, 0x83DD, - 0x519B, 0xBEFC, 0x519C, 0xC5A9, 0x519D, 0x83DE, 0x519E, 0x83DF, - 0x519F, 0x83E0, 0x51A0, 0xB9DA, 0x51A1, 0x83E1, 0x51A2, 0xDAA3, - 0x51A3, 0x83E2, 0x51A4, 0xD4A9, 0x51A5, 0xDAA4, 0x51A6, 0x83E3, - 0x51A7, 0x83E4, 0x51A8, 0x83E5, 0x51A9, 0x83E6, 0x51AA, 0x83E7, - 0x51AB, 0xD9FB, 0x51AC, 0xB6AC, 0x51AD, 0x83E8, 0x51AE, 0x83E9, - 0x51AF, 0xB7EB, 0x51B0, 0xB1F9, 0x51B1, 0xD9FC, 0x51B2, 0xB3E5, - 0x51B3, 0xBEF6, 0x51B4, 0x83EA, 0x51B5, 0xBFF6, 0x51B6, 0xD2B1, - 0x51B7, 0xC0E4, 0x51B8, 0x83EB, 0x51B9, 0x83EC, 0x51BA, 0x83ED, - 0x51BB, 0xB6B3, 0x51BC, 0xD9FE, 0x51BD, 0xD9FD, 0x51BE, 0x83EE, - 0x51BF, 0x83EF, 0x51C0, 0xBEBB, 0x51C1, 0x83F0, 0x51C2, 0x83F1, - 0x51C3, 0x83F2, 0x51C4, 0xC6E0, 0x51C5, 0x83F3, 0x51C6, 0xD7BC, - 0x51C7, 0xDAA1, 0x51C8, 0x83F4, 0x51C9, 0xC1B9, 0x51CA, 0x83F5, - 0x51CB, 0xB5F2, 0x51CC, 0xC1E8, 0x51CD, 0x83F6, 0x51CE, 0x83F7, - 0x51CF, 0xBCF5, 0x51D0, 0x83F8, 0x51D1, 0xB4D5, 0x51D2, 0x83F9, - 0x51D3, 0x83FA, 0x51D4, 0x83FB, 0x51D5, 0x83FC, 0x51D6, 0x83FD, - 0x51D7, 0x83FE, 0x51D8, 0x8440, 0x51D9, 0x8441, 0x51DA, 0x8442, - 0x51DB, 0xC1DD, 0x51DC, 0x8443, 0x51DD, 0xC4FD, 0x51DE, 0x8444, - 0x51DF, 0x8445, 0x51E0, 0xBCB8, 0x51E1, 0xB7B2, 0x51E2, 0x8446, - 0x51E3, 0x8447, 0x51E4, 0xB7EF, 0x51E5, 0x8448, 0x51E6, 0x8449, - 0x51E7, 0x844A, 0x51E8, 0x844B, 0x51E9, 0x844C, 0x51EA, 0x844D, - 0x51EB, 0xD9EC, 0x51EC, 0x844E, 0x51ED, 0xC6BE, 0x51EE, 0x844F, - 0x51EF, 0xBFAD, 0x51F0, 0xBBCB, 0x51F1, 0x8450, 0x51F2, 0x8451, - 0x51F3, 0xB5CA, 0x51F4, 0x8452, 0x51F5, 0xDBC9, 0x51F6, 0xD0D7, - 0x51F7, 0x8453, 0x51F8, 0xCDB9, 0x51F9, 0xB0BC, 0x51FA, 0xB3F6, - 0x51FB, 0xBBF7, 0x51FC, 0xDBCA, 0x51FD, 0xBAAF, 0x51FE, 0x8454, - 0x51FF, 0xD4E4, 0x5200, 0xB5B6, 0x5201, 0xB5F3, 0x5202, 0xD8D6, - 0x5203, 0xC8D0, 0x5204, 0x8455, 0x5205, 0x8456, 0x5206, 0xB7D6, - 0x5207, 0xC7D0, 0x5208, 0xD8D7, 0x5209, 0x8457, 0x520A, 0xBFAF, - 0x520B, 0x8458, 0x520C, 0x8459, 0x520D, 0xDBBB, 0x520E, 0xD8D8, - 0x520F, 0x845A, 0x5210, 0x845B, 0x5211, 0xD0CC, 0x5212, 0xBBAE, - 0x5213, 0x845C, 0x5214, 0x845D, 0x5215, 0x845E, 0x5216, 0xEBBE, - 0x5217, 0xC1D0, 0x5218, 0xC1F5, 0x5219, 0xD4F2, 0x521A, 0xB8D5, - 0x521B, 0xB4B4, 0x521C, 0x845F, 0x521D, 0xB3F5, 0x521E, 0x8460, - 0x521F, 0x8461, 0x5220, 0xC9BE, 0x5221, 0x8462, 0x5222, 0x8463, - 0x5223, 0x8464, 0x5224, 0xC5D0, 0x5225, 0x8465, 0x5226, 0x8466, - 0x5227, 0x8467, 0x5228, 0xC5D9, 0x5229, 0xC0FB, 0x522A, 0x8468, - 0x522B, 0xB1F0, 0x522C, 0x8469, 0x522D, 0xD8D9, 0x522E, 0xB9CE, - 0x522F, 0x846A, 0x5230, 0xB5BD, 0x5231, 0x846B, 0x5232, 0x846C, - 0x5233, 0xD8DA, 0x5234, 0x846D, 0x5235, 0x846E, 0x5236, 0xD6C6, - 0x5237, 0xCBA2, 0x5238, 0xC8AF, 0x5239, 0xC9B2, 0x523A, 0xB4CC, - 0x523B, 0xBFCC, 0x523C, 0x846F, 0x523D, 0xB9F4, 0x523E, 0x8470, - 0x523F, 0xD8DB, 0x5240, 0xD8DC, 0x5241, 0xB6E7, 0x5242, 0xBCC1, - 0x5243, 0xCCEA, 0x5244, 0x8471, 0x5245, 0x8472, 0x5246, 0x8473, - 0x5247, 0x8474, 0x5248, 0x8475, 0x5249, 0x8476, 0x524A, 0xCFF7, - 0x524B, 0x8477, 0x524C, 0xD8DD, 0x524D, 0xC7B0, 0x524E, 0x8478, - 0x524F, 0x8479, 0x5250, 0xB9D0, 0x5251, 0xBDA3, 0x5252, 0x847A, - 0x5253, 0x847B, 0x5254, 0xCCDE, 0x5255, 0x847C, 0x5256, 0xC6CA, - 0x5257, 0x847D, 0x5258, 0x847E, 0x5259, 0x8480, 0x525A, 0x8481, - 0x525B, 0x8482, 0x525C, 0xD8E0, 0x525D, 0x8483, 0x525E, 0xD8DE, - 0x525F, 0x8484, 0x5260, 0x8485, 0x5261, 0xD8DF, 0x5262, 0x8486, - 0x5263, 0x8487, 0x5264, 0x8488, 0x5265, 0xB0FE, 0x5266, 0x8489, - 0x5267, 0xBEE7, 0x5268, 0x848A, 0x5269, 0xCAA3, 0x526A, 0xBCF4, - 0x526B, 0x848B, 0x526C, 0x848C, 0x526D, 0x848D, 0x526E, 0x848E, - 0x526F, 0xB8B1, 0x5270, 0x848F, 0x5271, 0x8490, 0x5272, 0xB8EE, - 0x5273, 0x8491, 0x5274, 0x8492, 0x5275, 0x8493, 0x5276, 0x8494, - 0x5277, 0x8495, 0x5278, 0x8496, 0x5279, 0x8497, 0x527A, 0x8498, - 0x527B, 0x8499, 0x527C, 0x849A, 0x527D, 0xD8E2, 0x527E, 0x849B, - 0x527F, 0xBDCB, 0x5280, 0x849C, 0x5281, 0xD8E4, 0x5282, 0xD8E3, - 0x5283, 0x849D, 0x5284, 0x849E, 0x5285, 0x849F, 0x5286, 0x84A0, - 0x5287, 0x84A1, 0x5288, 0xC5FC, 0x5289, 0x84A2, 0x528A, 0x84A3, - 0x528B, 0x84A4, 0x528C, 0x84A5, 0x528D, 0x84A6, 0x528E, 0x84A7, - 0x528F, 0x84A8, 0x5290, 0xD8E5, 0x5291, 0x84A9, 0x5292, 0x84AA, - 0x5293, 0xD8E6, 0x5294, 0x84AB, 0x5295, 0x84AC, 0x5296, 0x84AD, - 0x5297, 0x84AE, 0x5298, 0x84AF, 0x5299, 0x84B0, 0x529A, 0x84B1, - 0x529B, 0xC1A6, 0x529C, 0x84B2, 0x529D, 0xC8B0, 0x529E, 0xB0EC, - 0x529F, 0xB9A6, 0x52A0, 0xBCD3, 0x52A1, 0xCEF1, 0x52A2, 0xDBBD, - 0x52A3, 0xC1D3, 0x52A4, 0x84B3, 0x52A5, 0x84B4, 0x52A6, 0x84B5, - 0x52A7, 0x84B6, 0x52A8, 0xB6AF, 0x52A9, 0xD6FA, 0x52AA, 0xC5AC, - 0x52AB, 0xBDD9, 0x52AC, 0xDBBE, 0x52AD, 0xDBBF, 0x52AE, 0x84B7, - 0x52AF, 0x84B8, 0x52B0, 0x84B9, 0x52B1, 0xC0F8, 0x52B2, 0xBEA2, - 0x52B3, 0xC0CD, 0x52B4, 0x84BA, 0x52B5, 0x84BB, 0x52B6, 0x84BC, - 0x52B7, 0x84BD, 0x52B8, 0x84BE, 0x52B9, 0x84BF, 0x52BA, 0x84C0, - 0x52BB, 0x84C1, 0x52BC, 0x84C2, 0x52BD, 0x84C3, 0x52BE, 0xDBC0, - 0x52BF, 0xCAC6, 0x52C0, 0x84C4, 0x52C1, 0x84C5, 0x52C2, 0x84C6, - 0x52C3, 0xB2AA, 0x52C4, 0x84C7, 0x52C5, 0x84C8, 0x52C6, 0x84C9, - 0x52C7, 0xD3C2, 0x52C8, 0x84CA, 0x52C9, 0xC3E3, 0x52CA, 0x84CB, - 0x52CB, 0xD1AB, 0x52CC, 0x84CC, 0x52CD, 0x84CD, 0x52CE, 0x84CE, - 0x52CF, 0x84CF, 0x52D0, 0xDBC2, 0x52D1, 0x84D0, 0x52D2, 0xC0D5, - 0x52D3, 0x84D1, 0x52D4, 0x84D2, 0x52D5, 0x84D3, 0x52D6, 0xDBC3, - 0x52D7, 0x84D4, 0x52D8, 0xBFB1, 0x52D9, 0x84D5, 0x52DA, 0x84D6, - 0x52DB, 0x84D7, 0x52DC, 0x84D8, 0x52DD, 0x84D9, 0x52DE, 0x84DA, - 0x52DF, 0xC4BC, 0x52E0, 0x84DB, 0x52E1, 0x84DC, 0x52E2, 0x84DD, - 0x52E3, 0x84DE, 0x52E4, 0xC7DA, 0x52E5, 0x84DF, 0x52E6, 0x84E0, - 0x52E7, 0x84E1, 0x52E8, 0x84E2, 0x52E9, 0x84E3, 0x52EA, 0x84E4, - 0x52EB, 0x84E5, 0x52EC, 0x84E6, 0x52ED, 0x84E7, 0x52EE, 0x84E8, - 0x52EF, 0x84E9, 0x52F0, 0xDBC4, 0x52F1, 0x84EA, 0x52F2, 0x84EB, - 0x52F3, 0x84EC, 0x52F4, 0x84ED, 0x52F5, 0x84EE, 0x52F6, 0x84EF, - 0x52F7, 0x84F0, 0x52F8, 0x84F1, 0x52F9, 0xD9E8, 0x52FA, 0xC9D7, - 0x52FB, 0x84F2, 0x52FC, 0x84F3, 0x52FD, 0x84F4, 0x52FE, 0xB9B4, - 0x52FF, 0xCEF0, 0x5300, 0xD4C8, 0x5301, 0x84F5, 0x5302, 0x84F6, - 0x5303, 0x84F7, 0x5304, 0x84F8, 0x5305, 0xB0FC, 0x5306, 0xB4D2, - 0x5307, 0x84F9, 0x5308, 0xD0D9, 0x5309, 0x84FA, 0x530A, 0x84FB, - 0x530B, 0x84FC, 0x530C, 0x84FD, 0x530D, 0xD9E9, 0x530E, 0x84FE, - 0x530F, 0xDECB, 0x5310, 0xD9EB, 0x5311, 0x8540, 0x5312, 0x8541, - 0x5313, 0x8542, 0x5314, 0x8543, 0x5315, 0xD8B0, 0x5316, 0xBBAF, - 0x5317, 0xB1B1, 0x5318, 0x8544, 0x5319, 0xB3D7, 0x531A, 0xD8CE, - 0x531B, 0x8545, 0x531C, 0x8546, 0x531D, 0xD4D1, 0x531E, 0x8547, - 0x531F, 0x8548, 0x5320, 0xBDB3, 0x5321, 0xBFEF, 0x5322, 0x8549, - 0x5323, 0xCFBB, 0x5324, 0x854A, 0x5325, 0x854B, 0x5326, 0xD8D0, - 0x5327, 0x854C, 0x5328, 0x854D, 0x5329, 0x854E, 0x532A, 0xB7CB, - 0x532B, 0x854F, 0x532C, 0x8550, 0x532D, 0x8551, 0x532E, 0xD8D1, - 0x532F, 0x8552, 0x5330, 0x8553, 0x5331, 0x8554, 0x5332, 0x8555, - 0x5333, 0x8556, 0x5334, 0x8557, 0x5335, 0x8558, 0x5336, 0x8559, - 0x5337, 0x855A, 0x5338, 0x855B, 0x5339, 0xC6A5, 0x533A, 0xC7F8, - 0x533B, 0xD2BD, 0x533C, 0x855C, 0x533D, 0x855D, 0x533E, 0xD8D2, - 0x533F, 0xC4E4, 0x5340, 0x855E, 0x5341, 0xCAAE, 0x5342, 0x855F, - 0x5343, 0xC7A7, 0x5344, 0x8560, 0x5345, 0xD8A6, 0x5346, 0x8561, - 0x5347, 0xC9FD, 0x5348, 0xCEE7, 0x5349, 0xBBDC, 0x534A, 0xB0EB, - 0x534B, 0x8562, 0x534C, 0x8563, 0x534D, 0x8564, 0x534E, 0xBBAA, - 0x534F, 0xD0AD, 0x5350, 0x8565, 0x5351, 0xB1B0, 0x5352, 0xD7E4, - 0x5353, 0xD7BF, 0x5354, 0x8566, 0x5355, 0xB5A5, 0x5356, 0xC2F4, - 0x5357, 0xC4CF, 0x5358, 0x8567, 0x5359, 0x8568, 0x535A, 0xB2A9, - 0x535B, 0x8569, 0x535C, 0xB2B7, 0x535D, 0x856A, 0x535E, 0xB1E5, - 0x535F, 0xDFB2, 0x5360, 0xD5BC, 0x5361, 0xBFA8, 0x5362, 0xC2AC, - 0x5363, 0xD8D5, 0x5364, 0xC2B1, 0x5365, 0x856B, 0x5366, 0xD8D4, - 0x5367, 0xCED4, 0x5368, 0x856C, 0x5369, 0xDAE0, 0x536A, 0x856D, - 0x536B, 0xCEC0, 0x536C, 0x856E, 0x536D, 0x856F, 0x536E, 0xD8B4, - 0x536F, 0xC3AE, 0x5370, 0xD3A1, 0x5371, 0xCEA3, 0x5372, 0x8570, - 0x5373, 0xBCB4, 0x5374, 0xC8B4, 0x5375, 0xC2D1, 0x5376, 0x8571, - 0x5377, 0xBEED, 0x5378, 0xD0B6, 0x5379, 0x8572, 0x537A, 0xDAE1, - 0x537B, 0x8573, 0x537C, 0x8574, 0x537D, 0x8575, 0x537E, 0x8576, - 0x537F, 0xC7E4, 0x5380, 0x8577, 0x5381, 0x8578, 0x5382, 0xB3A7, - 0x5383, 0x8579, 0x5384, 0xB6F2, 0x5385, 0xCCFC, 0x5386, 0xC0FA, - 0x5387, 0x857A, 0x5388, 0x857B, 0x5389, 0xC0F7, 0x538A, 0x857C, - 0x538B, 0xD1B9, 0x538C, 0xD1E1, 0x538D, 0xD8C7, 0x538E, 0x857D, - 0x538F, 0x857E, 0x5390, 0x8580, 0x5391, 0x8581, 0x5392, 0x8582, - 0x5393, 0x8583, 0x5394, 0x8584, 0x5395, 0xB2DE, 0x5396, 0x8585, - 0x5397, 0x8586, 0x5398, 0xC0E5, 0x5399, 0x8587, 0x539A, 0xBAF1, - 0x539B, 0x8588, 0x539C, 0x8589, 0x539D, 0xD8C8, 0x539E, 0x858A, - 0x539F, 0xD4AD, 0x53A0, 0x858B, 0x53A1, 0x858C, 0x53A2, 0xCFE1, - 0x53A3, 0xD8C9, 0x53A4, 0x858D, 0x53A5, 0xD8CA, 0x53A6, 0xCFC3, - 0x53A7, 0x858E, 0x53A8, 0xB3F8, 0x53A9, 0xBEC7, 0x53AA, 0x858F, - 0x53AB, 0x8590, 0x53AC, 0x8591, 0x53AD, 0x8592, 0x53AE, 0xD8CB, - 0x53AF, 0x8593, 0x53B0, 0x8594, 0x53B1, 0x8595, 0x53B2, 0x8596, - 0x53B3, 0x8597, 0x53B4, 0x8598, 0x53B5, 0x8599, 0x53B6, 0xDBCC, - 0x53B7, 0x859A, 0x53B8, 0x859B, 0x53B9, 0x859C, 0x53BA, 0x859D, - 0x53BB, 0xC8A5, 0x53BC, 0x859E, 0x53BD, 0x859F, 0x53BE, 0x85A0, - 0x53BF, 0xCFD8, 0x53C0, 0x85A1, 0x53C1, 0xC8FE, 0x53C2, 0xB2CE, - 0x53C3, 0x85A2, 0x53C4, 0x85A3, 0x53C5, 0x85A4, 0x53C6, 0x85A5, - 0x53C7, 0x85A6, 0x53C8, 0xD3D6, 0x53C9, 0xB2E6, 0x53CA, 0xBCB0, - 0x53CB, 0xD3D1, 0x53CC, 0xCBAB, 0x53CD, 0xB7B4, 0x53CE, 0x85A7, - 0x53CF, 0x85A8, 0x53D0, 0x85A9, 0x53D1, 0xB7A2, 0x53D2, 0x85AA, - 0x53D3, 0x85AB, 0x53D4, 0xCAE5, 0x53D5, 0x85AC, 0x53D6, 0xC8A1, - 0x53D7, 0xCADC, 0x53D8, 0xB1E4, 0x53D9, 0xD0F0, 0x53DA, 0x85AD, - 0x53DB, 0xC5D1, 0x53DC, 0x85AE, 0x53DD, 0x85AF, 0x53DE, 0x85B0, - 0x53DF, 0xDBC5, 0x53E0, 0xB5FE, 0x53E1, 0x85B1, 0x53E2, 0x85B2, - 0x53E3, 0xBFDA, 0x53E4, 0xB9C5, 0x53E5, 0xBEE4, 0x53E6, 0xC1ED, - 0x53E7, 0x85B3, 0x53E8, 0xDFB6, 0x53E9, 0xDFB5, 0x53EA, 0xD6BB, - 0x53EB, 0xBDD0, 0x53EC, 0xD5D9, 0x53ED, 0xB0C8, 0x53EE, 0xB6A3, - 0x53EF, 0xBFC9, 0x53F0, 0xCCA8, 0x53F1, 0xDFB3, 0x53F2, 0xCAB7, - 0x53F3, 0xD3D2, 0x53F4, 0x85B4, 0x53F5, 0xD8CF, 0x53F6, 0xD2B6, - 0x53F7, 0xBAC5, 0x53F8, 0xCBBE, 0x53F9, 0xCCBE, 0x53FA, 0x85B5, - 0x53FB, 0xDFB7, 0x53FC, 0xB5F0, 0x53FD, 0xDFB4, 0x53FE, 0x85B6, - 0x53FF, 0x85B7, 0x5400, 0x85B8, 0x5401, 0xD3F5, 0x5402, 0x85B9, - 0x5403, 0xB3D4, 0x5404, 0xB8F7, 0x5405, 0x85BA, 0x5406, 0xDFBA, - 0x5407, 0x85BB, 0x5408, 0xBACF, 0x5409, 0xBCAA, 0x540A, 0xB5F5, - 0x540B, 0x85BC, 0x540C, 0xCDAC, 0x540D, 0xC3FB, 0x540E, 0xBAF3, - 0x540F, 0xC0F4, 0x5410, 0xCDC2, 0x5411, 0xCFF2, 0x5412, 0xDFB8, - 0x5413, 0xCFC5, 0x5414, 0x85BD, 0x5415, 0xC2C0, 0x5416, 0xDFB9, - 0x5417, 0xC2F0, 0x5418, 0x85BE, 0x5419, 0x85BF, 0x541A, 0x85C0, - 0x541B, 0xBEFD, 0x541C, 0x85C1, 0x541D, 0xC1DF, 0x541E, 0xCDCC, - 0x541F, 0xD2F7, 0x5420, 0xB7CD, 0x5421, 0xDFC1, 0x5422, 0x85C2, - 0x5423, 0xDFC4, 0x5424, 0x85C3, 0x5425, 0x85C4, 0x5426, 0xB7F1, - 0x5427, 0xB0C9, 0x5428, 0xB6D6, 0x5429, 0xB7D4, 0x542A, 0x85C5, - 0x542B, 0xBAAC, 0x542C, 0xCCFD, 0x542D, 0xBFD4, 0x542E, 0xCBB1, - 0x542F, 0xC6F4, 0x5430, 0x85C6, 0x5431, 0xD6A8, 0x5432, 0xDFC5, - 0x5433, 0x85C7, 0x5434, 0xCEE2, 0x5435, 0xB3B3, 0x5436, 0x85C8, - 0x5437, 0x85C9, 0x5438, 0xCEFC, 0x5439, 0xB4B5, 0x543A, 0x85CA, - 0x543B, 0xCEC7, 0x543C, 0xBAF0, 0x543D, 0x85CB, 0x543E, 0xCEE1, - 0x543F, 0x85CC, 0x5440, 0xD1BD, 0x5441, 0x85CD, 0x5442, 0x85CE, - 0x5443, 0xDFC0, 0x5444, 0x85CF, 0x5445, 0x85D0, 0x5446, 0xB4F4, - 0x5447, 0x85D1, 0x5448, 0xB3CA, 0x5449, 0x85D2, 0x544A, 0xB8E6, - 0x544B, 0xDFBB, 0x544C, 0x85D3, 0x544D, 0x85D4, 0x544E, 0x85D5, - 0x544F, 0x85D6, 0x5450, 0xC4C5, 0x5451, 0x85D7, 0x5452, 0xDFBC, - 0x5453, 0xDFBD, 0x5454, 0xDFBE, 0x5455, 0xC5BB, 0x5456, 0xDFBF, - 0x5457, 0xDFC2, 0x5458, 0xD4B1, 0x5459, 0xDFC3, 0x545A, 0x85D8, - 0x545B, 0xC7BA, 0x545C, 0xCED8, 0x545D, 0x85D9, 0x545E, 0x85DA, - 0x545F, 0x85DB, 0x5460, 0x85DC, 0x5461, 0x85DD, 0x5462, 0xC4D8, - 0x5463, 0x85DE, 0x5464, 0xDFCA, 0x5465, 0x85DF, 0x5466, 0xDFCF, - 0x5467, 0x85E0, 0x5468, 0xD6DC, 0x5469, 0x85E1, 0x546A, 0x85E2, - 0x546B, 0x85E3, 0x546C, 0x85E4, 0x546D, 0x85E5, 0x546E, 0x85E6, - 0x546F, 0x85E7, 0x5470, 0x85E8, 0x5471, 0xDFC9, 0x5472, 0xDFDA, - 0x5473, 0xCEB6, 0x5474, 0x85E9, 0x5475, 0xBAC7, 0x5476, 0xDFCE, - 0x5477, 0xDFC8, 0x5478, 0xC5DE, 0x5479, 0x85EA, 0x547A, 0x85EB, - 0x547B, 0xC9EB, 0x547C, 0xBAF4, 0x547D, 0xC3FC, 0x547E, 0x85EC, - 0x547F, 0x85ED, 0x5480, 0xBED7, 0x5481, 0x85EE, 0x5482, 0xDFC6, - 0x5483, 0x85EF, 0x5484, 0xDFCD, 0x5485, 0x85F0, 0x5486, 0xC5D8, - 0x5487, 0x85F1, 0x5488, 0x85F2, 0x5489, 0x85F3, 0x548A, 0x85F4, - 0x548B, 0xD5A6, 0x548C, 0xBACD, 0x548D, 0x85F5, 0x548E, 0xBECC, - 0x548F, 0xD3BD, 0x5490, 0xB8C0, 0x5491, 0x85F6, 0x5492, 0xD6E4, - 0x5493, 0x85F7, 0x5494, 0xDFC7, 0x5495, 0xB9BE, 0x5496, 0xBFA7, - 0x5497, 0x85F8, 0x5498, 0x85F9, 0x5499, 0xC1FC, 0x549A, 0xDFCB, - 0x549B, 0xDFCC, 0x549C, 0x85FA, 0x549D, 0xDFD0, 0x549E, 0x85FB, - 0x549F, 0x85FC, 0x54A0, 0x85FD, 0x54A1, 0x85FE, 0x54A2, 0x8640, - 0x54A3, 0xDFDB, 0x54A4, 0xDFE5, 0x54A5, 0x8641, 0x54A6, 0xDFD7, - 0x54A7, 0xDFD6, 0x54A8, 0xD7C9, 0x54A9, 0xDFE3, 0x54AA, 0xDFE4, - 0x54AB, 0xE5EB, 0x54AC, 0xD2A7, 0x54AD, 0xDFD2, 0x54AE, 0x8642, - 0x54AF, 0xBFA9, 0x54B0, 0x8643, 0x54B1, 0xD4DB, 0x54B2, 0x8644, - 0x54B3, 0xBFC8, 0x54B4, 0xDFD4, 0x54B5, 0x8645, 0x54B6, 0x8646, - 0x54B7, 0x8647, 0x54B8, 0xCFCC, 0x54B9, 0x8648, 0x54BA, 0x8649, - 0x54BB, 0xDFDD, 0x54BC, 0x864A, 0x54BD, 0xD1CA, 0x54BE, 0x864B, - 0x54BF, 0xDFDE, 0x54C0, 0xB0A7, 0x54C1, 0xC6B7, 0x54C2, 0xDFD3, - 0x54C3, 0x864C, 0x54C4, 0xBAE5, 0x54C5, 0x864D, 0x54C6, 0xB6DF, - 0x54C7, 0xCDDB, 0x54C8, 0xB9FE, 0x54C9, 0xD4D5, 0x54CA, 0x864E, - 0x54CB, 0x864F, 0x54CC, 0xDFDF, 0x54CD, 0xCFEC, 0x54CE, 0xB0A5, - 0x54CF, 0xDFE7, 0x54D0, 0xDFD1, 0x54D1, 0xD1C6, 0x54D2, 0xDFD5, - 0x54D3, 0xDFD8, 0x54D4, 0xDFD9, 0x54D5, 0xDFDC, 0x54D6, 0x8650, - 0x54D7, 0xBBA9, 0x54D8, 0x8651, 0x54D9, 0xDFE0, 0x54DA, 0xDFE1, - 0x54DB, 0x8652, 0x54DC, 0xDFE2, 0x54DD, 0xDFE6, 0x54DE, 0xDFE8, - 0x54DF, 0xD3B4, 0x54E0, 0x8653, 0x54E1, 0x8654, 0x54E2, 0x8655, - 0x54E3, 0x8656, 0x54E4, 0x8657, 0x54E5, 0xB8E7, 0x54E6, 0xC5B6, - 0x54E7, 0xDFEA, 0x54E8, 0xC9DA, 0x54E9, 0xC1A8, 0x54EA, 0xC4C4, - 0x54EB, 0x8658, 0x54EC, 0x8659, 0x54ED, 0xBFDE, 0x54EE, 0xCFF8, - 0x54EF, 0x865A, 0x54F0, 0x865B, 0x54F1, 0x865C, 0x54F2, 0xD5DC, - 0x54F3, 0xDFEE, 0x54F4, 0x865D, 0x54F5, 0x865E, 0x54F6, 0x865F, - 0x54F7, 0x8660, 0x54F8, 0x8661, 0x54F9, 0x8662, 0x54FA, 0xB2B8, - 0x54FB, 0x8663, 0x54FC, 0xBADF, 0x54FD, 0xDFEC, 0x54FE, 0x8664, - 0x54FF, 0xDBC1, 0x5500, 0x8665, 0x5501, 0xD1E4, 0x5502, 0x8666, - 0x5503, 0x8667, 0x5504, 0x8668, 0x5505, 0x8669, 0x5506, 0xCBF4, - 0x5507, 0xB4BD, 0x5508, 0x866A, 0x5509, 0xB0A6, 0x550A, 0x866B, - 0x550B, 0x866C, 0x550C, 0x866D, 0x550D, 0x866E, 0x550E, 0x866F, - 0x550F, 0xDFF1, 0x5510, 0xCCC6, 0x5511, 0xDFF2, 0x5512, 0x8670, - 0x5513, 0x8671, 0x5514, 0xDFED, 0x5515, 0x8672, 0x5516, 0x8673, - 0x5517, 0x8674, 0x5518, 0x8675, 0x5519, 0x8676, 0x551A, 0x8677, - 0x551B, 0xDFE9, 0x551C, 0x8678, 0x551D, 0x8679, 0x551E, 0x867A, - 0x551F, 0x867B, 0x5520, 0xDFEB, 0x5521, 0x867C, 0x5522, 0xDFEF, - 0x5523, 0xDFF0, 0x5524, 0xBBBD, 0x5525, 0x867D, 0x5526, 0x867E, - 0x5527, 0xDFF3, 0x5528, 0x8680, 0x5529, 0x8681, 0x552A, 0xDFF4, - 0x552B, 0x8682, 0x552C, 0xBBA3, 0x552D, 0x8683, 0x552E, 0xCADB, - 0x552F, 0xCEA8, 0x5530, 0xE0A7, 0x5531, 0xB3AA, 0x5532, 0x8684, - 0x5533, 0xE0A6, 0x5534, 0x8685, 0x5535, 0x8686, 0x5536, 0x8687, - 0x5537, 0xE0A1, 0x5538, 0x8688, 0x5539, 0x8689, 0x553A, 0x868A, - 0x553B, 0x868B, 0x553C, 0xDFFE, 0x553D, 0x868C, 0x553E, 0xCDD9, - 0x553F, 0xDFFC, 0x5540, 0x868D, 0x5541, 0xDFFA, 0x5542, 0x868E, - 0x5543, 0xBFD0, 0x5544, 0xD7C4, 0x5545, 0x868F, 0x5546, 0xC9CC, - 0x5547, 0x8690, 0x5548, 0x8691, 0x5549, 0xDFF8, 0x554A, 0xB0A1, - 0x554B, 0x8692, 0x554C, 0x8693, 0x554D, 0x8694, 0x554E, 0x8695, - 0x554F, 0x8696, 0x5550, 0xDFFD, 0x5551, 0x8697, 0x5552, 0x8698, - 0x5553, 0x8699, 0x5554, 0x869A, 0x5555, 0xDFFB, 0x5556, 0xE0A2, - 0x5557, 0x869B, 0x5558, 0x869C, 0x5559, 0x869D, 0x555A, 0x869E, - 0x555B, 0x869F, 0x555C, 0xE0A8, 0x555D, 0x86A0, 0x555E, 0x86A1, - 0x555F, 0x86A2, 0x5560, 0x86A3, 0x5561, 0xB7C8, 0x5562, 0x86A4, - 0x5563, 0x86A5, 0x5564, 0xC6A1, 0x5565, 0xC9B6, 0x5566, 0xC0B2, - 0x5567, 0xDFF5, 0x5568, 0x86A6, 0x5569, 0x86A7, 0x556A, 0xC5BE, - 0x556B, 0x86A8, 0x556C, 0xD8C4, 0x556D, 0xDFF9, 0x556E, 0xC4F6, - 0x556F, 0x86A9, 0x5570, 0x86AA, 0x5571, 0x86AB, 0x5572, 0x86AC, - 0x5573, 0x86AD, 0x5574, 0x86AE, 0x5575, 0xE0A3, 0x5576, 0xE0A4, - 0x5577, 0xE0A5, 0x5578, 0xD0A5, 0x5579, 0x86AF, 0x557A, 0x86B0, - 0x557B, 0xE0B4, 0x557C, 0xCCE4, 0x557D, 0x86B1, 0x557E, 0xE0B1, - 0x557F, 0x86B2, 0x5580, 0xBFA6, 0x5581, 0xE0AF, 0x5582, 0xCEB9, - 0x5583, 0xE0AB, 0x5584, 0xC9C6, 0x5585, 0x86B3, 0x5586, 0x86B4, - 0x5587, 0xC0AE, 0x5588, 0xE0AE, 0x5589, 0xBAED, 0x558A, 0xBAB0, - 0x558B, 0xE0A9, 0x558C, 0x86B5, 0x558D, 0x86B6, 0x558E, 0x86B7, - 0x558F, 0xDFF6, 0x5590, 0x86B8, 0x5591, 0xE0B3, 0x5592, 0x86B9, - 0x5593, 0x86BA, 0x5594, 0xE0B8, 0x5595, 0x86BB, 0x5596, 0x86BC, - 0x5597, 0x86BD, 0x5598, 0xB4AD, 0x5599, 0xE0B9, 0x559A, 0x86BE, - 0x559B, 0x86BF, 0x559C, 0xCFB2, 0x559D, 0xBAC8, 0x559E, 0x86C0, - 0x559F, 0xE0B0, 0x55A0, 0x86C1, 0x55A1, 0x86C2, 0x55A2, 0x86C3, - 0x55A3, 0x86C4, 0x55A4, 0x86C5, 0x55A5, 0x86C6, 0x55A6, 0x86C7, - 0x55A7, 0xD0FA, 0x55A8, 0x86C8, 0x55A9, 0x86C9, 0x55AA, 0x86CA, - 0x55AB, 0x86CB, 0x55AC, 0x86CC, 0x55AD, 0x86CD, 0x55AE, 0x86CE, - 0x55AF, 0x86CF, 0x55B0, 0x86D0, 0x55B1, 0xE0AC, 0x55B2, 0x86D1, - 0x55B3, 0xD4FB, 0x55B4, 0x86D2, 0x55B5, 0xDFF7, 0x55B6, 0x86D3, - 0x55B7, 0xC5E7, 0x55B8, 0x86D4, 0x55B9, 0xE0AD, 0x55BA, 0x86D5, - 0x55BB, 0xD3F7, 0x55BC, 0x86D6, 0x55BD, 0xE0B6, 0x55BE, 0xE0B7, - 0x55BF, 0x86D7, 0x55C0, 0x86D8, 0x55C1, 0x86D9, 0x55C2, 0x86DA, - 0x55C3, 0x86DB, 0x55C4, 0xE0C4, 0x55C5, 0xD0E1, 0x55C6, 0x86DC, - 0x55C7, 0x86DD, 0x55C8, 0x86DE, 0x55C9, 0xE0BC, 0x55CA, 0x86DF, - 0x55CB, 0x86E0, 0x55CC, 0xE0C9, 0x55CD, 0xE0CA, 0x55CE, 0x86E1, - 0x55CF, 0x86E2, 0x55D0, 0x86E3, 0x55D1, 0xE0BE, 0x55D2, 0xE0AA, - 0x55D3, 0xC9A4, 0x55D4, 0xE0C1, 0x55D5, 0x86E4, 0x55D6, 0xE0B2, - 0x55D7, 0x86E5, 0x55D8, 0x86E6, 0x55D9, 0x86E7, 0x55DA, 0x86E8, - 0x55DB, 0x86E9, 0x55DC, 0xCAC8, 0x55DD, 0xE0C3, 0x55DE, 0x86EA, - 0x55DF, 0xE0B5, 0x55E0, 0x86EB, 0x55E1, 0xCECB, 0x55E2, 0x86EC, - 0x55E3, 0xCBC3, 0x55E4, 0xE0CD, 0x55E5, 0xE0C6, 0x55E6, 0xE0C2, - 0x55E7, 0x86ED, 0x55E8, 0xE0CB, 0x55E9, 0x86EE, 0x55EA, 0xE0BA, - 0x55EB, 0xE0BF, 0x55EC, 0xE0C0, 0x55ED, 0x86EF, 0x55EE, 0x86F0, - 0x55EF, 0xE0C5, 0x55F0, 0x86F1, 0x55F1, 0x86F2, 0x55F2, 0xE0C7, - 0x55F3, 0xE0C8, 0x55F4, 0x86F3, 0x55F5, 0xE0CC, 0x55F6, 0x86F4, - 0x55F7, 0xE0BB, 0x55F8, 0x86F5, 0x55F9, 0x86F6, 0x55FA, 0x86F7, - 0x55FB, 0x86F8, 0x55FC, 0x86F9, 0x55FD, 0xCBD4, 0x55FE, 0xE0D5, - 0x55FF, 0x86FA, 0x5600, 0xE0D6, 0x5601, 0xE0D2, 0x5602, 0x86FB, - 0x5603, 0x86FC, 0x5604, 0x86FD, 0x5605, 0x86FE, 0x5606, 0x8740, - 0x5607, 0x8741, 0x5608, 0xE0D0, 0x5609, 0xBCCE, 0x560A, 0x8742, - 0x560B, 0x8743, 0x560C, 0xE0D1, 0x560D, 0x8744, 0x560E, 0xB8C2, - 0x560F, 0xD8C5, 0x5610, 0x8745, 0x5611, 0x8746, 0x5612, 0x8747, - 0x5613, 0x8748, 0x5614, 0x8749, 0x5615, 0x874A, 0x5616, 0x874B, - 0x5617, 0x874C, 0x5618, 0xD0EA, 0x5619, 0x874D, 0x561A, 0x874E, - 0x561B, 0xC2EF, 0x561C, 0x874F, 0x561D, 0x8750, 0x561E, 0xE0CF, - 0x561F, 0xE0BD, 0x5620, 0x8751, 0x5621, 0x8752, 0x5622, 0x8753, - 0x5623, 0xE0D4, 0x5624, 0xE0D3, 0x5625, 0x8754, 0x5626, 0x8755, - 0x5627, 0xE0D7, 0x5628, 0x8756, 0x5629, 0x8757, 0x562A, 0x8758, - 0x562B, 0x8759, 0x562C, 0xE0DC, 0x562D, 0xE0D8, 0x562E, 0x875A, - 0x562F, 0x875B, 0x5630, 0x875C, 0x5631, 0xD6F6, 0x5632, 0xB3B0, - 0x5633, 0x875D, 0x5634, 0xD7EC, 0x5635, 0x875E, 0x5636, 0xCBBB, - 0x5637, 0x875F, 0x5638, 0x8760, 0x5639, 0xE0DA, 0x563A, 0x8761, - 0x563B, 0xCEFB, 0x563C, 0x8762, 0x563D, 0x8763, 0x563E, 0x8764, - 0x563F, 0xBAD9, 0x5640, 0x8765, 0x5641, 0x8766, 0x5642, 0x8767, - 0x5643, 0x8768, 0x5644, 0x8769, 0x5645, 0x876A, 0x5646, 0x876B, - 0x5647, 0x876C, 0x5648, 0x876D, 0x5649, 0x876E, 0x564A, 0x876F, - 0x564B, 0x8770, 0x564C, 0xE0E1, 0x564D, 0xE0DD, 0x564E, 0xD2AD, - 0x564F, 0x8771, 0x5650, 0x8772, 0x5651, 0x8773, 0x5652, 0x8774, - 0x5653, 0x8775, 0x5654, 0xE0E2, 0x5655, 0x8776, 0x5656, 0x8777, - 0x5657, 0xE0DB, 0x5658, 0xE0D9, 0x5659, 0xE0DF, 0x565A, 0x8778, - 0x565B, 0x8779, 0x565C, 0xE0E0, 0x565D, 0x877A, 0x565E, 0x877B, - 0x565F, 0x877C, 0x5660, 0x877D, 0x5661, 0x877E, 0x5662, 0xE0DE, - 0x5663, 0x8780, 0x5664, 0xE0E4, 0x5665, 0x8781, 0x5666, 0x8782, - 0x5667, 0x8783, 0x5668, 0xC6F7, 0x5669, 0xD8AC, 0x566A, 0xD4EB, - 0x566B, 0xE0E6, 0x566C, 0xCAC9, 0x566D, 0x8784, 0x566E, 0x8785, - 0x566F, 0x8786, 0x5670, 0x8787, 0x5671, 0xE0E5, 0x5672, 0x8788, - 0x5673, 0x8789, 0x5674, 0x878A, 0x5675, 0x878B, 0x5676, 0xB8C1, - 0x5677, 0x878C, 0x5678, 0x878D, 0x5679, 0x878E, 0x567A, 0x878F, - 0x567B, 0xE0E7, 0x567C, 0xE0E8, 0x567D, 0x8790, 0x567E, 0x8791, - 0x567F, 0x8792, 0x5680, 0x8793, 0x5681, 0x8794, 0x5682, 0x8795, - 0x5683, 0x8796, 0x5684, 0x8797, 0x5685, 0xE0E9, 0x5686, 0xE0E3, - 0x5687, 0x8798, 0x5688, 0x8799, 0x5689, 0x879A, 0x568A, 0x879B, - 0x568B, 0x879C, 0x568C, 0x879D, 0x568D, 0x879E, 0x568E, 0xBABF, - 0x568F, 0xCCE7, 0x5690, 0x879F, 0x5691, 0x87A0, 0x5692, 0x87A1, - 0x5693, 0xE0EA, 0x5694, 0x87A2, 0x5695, 0x87A3, 0x5696, 0x87A4, - 0x5697, 0x87A5, 0x5698, 0x87A6, 0x5699, 0x87A7, 0x569A, 0x87A8, - 0x569B, 0x87A9, 0x569C, 0x87AA, 0x569D, 0x87AB, 0x569E, 0x87AC, - 0x569F, 0x87AD, 0x56A0, 0x87AE, 0x56A1, 0x87AF, 0x56A2, 0x87B0, - 0x56A3, 0xCFF9, 0x56A4, 0x87B1, 0x56A5, 0x87B2, 0x56A6, 0x87B3, - 0x56A7, 0x87B4, 0x56A8, 0x87B5, 0x56A9, 0x87B6, 0x56AA, 0x87B7, - 0x56AB, 0x87B8, 0x56AC, 0x87B9, 0x56AD, 0x87BA, 0x56AE, 0x87BB, - 0x56AF, 0xE0EB, 0x56B0, 0x87BC, 0x56B1, 0x87BD, 0x56B2, 0x87BE, - 0x56B3, 0x87BF, 0x56B4, 0x87C0, 0x56B5, 0x87C1, 0x56B6, 0x87C2, - 0x56B7, 0xC8C2, 0x56B8, 0x87C3, 0x56B9, 0x87C4, 0x56BA, 0x87C5, - 0x56BB, 0x87C6, 0x56BC, 0xBDC0, 0x56BD, 0x87C7, 0x56BE, 0x87C8, - 0x56BF, 0x87C9, 0x56C0, 0x87CA, 0x56C1, 0x87CB, 0x56C2, 0x87CC, - 0x56C3, 0x87CD, 0x56C4, 0x87CE, 0x56C5, 0x87CF, 0x56C6, 0x87D0, - 0x56C7, 0x87D1, 0x56C8, 0x87D2, 0x56C9, 0x87D3, 0x56CA, 0xC4D2, - 0x56CB, 0x87D4, 0x56CC, 0x87D5, 0x56CD, 0x87D6, 0x56CE, 0x87D7, - 0x56CF, 0x87D8, 0x56D0, 0x87D9, 0x56D1, 0x87DA, 0x56D2, 0x87DB, - 0x56D3, 0x87DC, 0x56D4, 0xE0EC, 0x56D5, 0x87DD, 0x56D6, 0x87DE, - 0x56D7, 0xE0ED, 0x56D8, 0x87DF, 0x56D9, 0x87E0, 0x56DA, 0xC7F4, - 0x56DB, 0xCBC4, 0x56DC, 0x87E1, 0x56DD, 0xE0EE, 0x56DE, 0xBBD8, - 0x56DF, 0xD8B6, 0x56E0, 0xD2F2, 0x56E1, 0xE0EF, 0x56E2, 0xCDC5, - 0x56E3, 0x87E2, 0x56E4, 0xB6DA, 0x56E5, 0x87E3, 0x56E6, 0x87E4, - 0x56E7, 0x87E5, 0x56E8, 0x87E6, 0x56E9, 0x87E7, 0x56EA, 0x87E8, - 0x56EB, 0xE0F1, 0x56EC, 0x87E9, 0x56ED, 0xD4B0, 0x56EE, 0x87EA, - 0x56EF, 0x87EB, 0x56F0, 0xC0A7, 0x56F1, 0xB4D1, 0x56F2, 0x87EC, - 0x56F3, 0x87ED, 0x56F4, 0xCEA7, 0x56F5, 0xE0F0, 0x56F6, 0x87EE, - 0x56F7, 0x87EF, 0x56F8, 0x87F0, 0x56F9, 0xE0F2, 0x56FA, 0xB9CC, - 0x56FB, 0x87F1, 0x56FC, 0x87F2, 0x56FD, 0xB9FA, 0x56FE, 0xCDBC, - 0x56FF, 0xE0F3, 0x5700, 0x87F3, 0x5701, 0x87F4, 0x5702, 0x87F5, - 0x5703, 0xC6D4, 0x5704, 0xE0F4, 0x5705, 0x87F6, 0x5706, 0xD4B2, - 0x5707, 0x87F7, 0x5708, 0xC8A6, 0x5709, 0xE0F6, 0x570A, 0xE0F5, - 0x570B, 0x87F8, 0x570C, 0x87F9, 0x570D, 0x87FA, 0x570E, 0x87FB, - 0x570F, 0x87FC, 0x5710, 0x87FD, 0x5711, 0x87FE, 0x5712, 0x8840, - 0x5713, 0x8841, 0x5714, 0x8842, 0x5715, 0x8843, 0x5716, 0x8844, - 0x5717, 0x8845, 0x5718, 0x8846, 0x5719, 0x8847, 0x571A, 0x8848, - 0x571B, 0x8849, 0x571C, 0xE0F7, 0x571D, 0x884A, 0x571E, 0x884B, - 0x571F, 0xCDC1, 0x5720, 0x884C, 0x5721, 0x884D, 0x5722, 0x884E, - 0x5723, 0xCAA5, 0x5724, 0x884F, 0x5725, 0x8850, 0x5726, 0x8851, - 0x5727, 0x8852, 0x5728, 0xD4DA, 0x5729, 0xDBD7, 0x572A, 0xDBD9, - 0x572B, 0x8853, 0x572C, 0xDBD8, 0x572D, 0xB9E7, 0x572E, 0xDBDC, - 0x572F, 0xDBDD, 0x5730, 0xB5D8, 0x5731, 0x8854, 0x5732, 0x8855, - 0x5733, 0xDBDA, 0x5734, 0x8856, 0x5735, 0x8857, 0x5736, 0x8858, - 0x5737, 0x8859, 0x5738, 0x885A, 0x5739, 0xDBDB, 0x573A, 0xB3A1, - 0x573B, 0xDBDF, 0x573C, 0x885B, 0x573D, 0x885C, 0x573E, 0xBBF8, - 0x573F, 0x885D, 0x5740, 0xD6B7, 0x5741, 0x885E, 0x5742, 0xDBE0, - 0x5743, 0x885F, 0x5744, 0x8860, 0x5745, 0x8861, 0x5746, 0x8862, - 0x5747, 0xBEF9, 0x5748, 0x8863, 0x5749, 0x8864, 0x574A, 0xB7BB, - 0x574B, 0x8865, 0x574C, 0xDBD0, 0x574D, 0xCCAE, 0x574E, 0xBFB2, - 0x574F, 0xBBB5, 0x5750, 0xD7F8, 0x5751, 0xBFD3, 0x5752, 0x8866, - 0x5753, 0x8867, 0x5754, 0x8868, 0x5755, 0x8869, 0x5756, 0x886A, - 0x5757, 0xBFE9, 0x5758, 0x886B, 0x5759, 0x886C, 0x575A, 0xBCE1, - 0x575B, 0xCCB3, 0x575C, 0xDBDE, 0x575D, 0xB0D3, 0x575E, 0xCEEB, - 0x575F, 0xB7D8, 0x5760, 0xD7B9, 0x5761, 0xC6C2, 0x5762, 0x886D, - 0x5763, 0x886E, 0x5764, 0xC0A4, 0x5765, 0x886F, 0x5766, 0xCCB9, - 0x5767, 0x8870, 0x5768, 0xDBE7, 0x5769, 0xDBE1, 0x576A, 0xC6BA, - 0x576B, 0xDBE3, 0x576C, 0x8871, 0x576D, 0xDBE8, 0x576E, 0x8872, - 0x576F, 0xC5F7, 0x5770, 0x8873, 0x5771, 0x8874, 0x5772, 0x8875, - 0x5773, 0xDBEA, 0x5774, 0x8876, 0x5775, 0x8877, 0x5776, 0xDBE9, - 0x5777, 0xBFC0, 0x5778, 0x8878, 0x5779, 0x8879, 0x577A, 0x887A, - 0x577B, 0xDBE6, 0x577C, 0xDBE5, 0x577D, 0x887B, 0x577E, 0x887C, - 0x577F, 0x887D, 0x5780, 0x887E, 0x5781, 0x8880, 0x5782, 0xB4B9, - 0x5783, 0xC0AC, 0x5784, 0xC2A2, 0x5785, 0xDBE2, 0x5786, 0xDBE4, - 0x5787, 0x8881, 0x5788, 0x8882, 0x5789, 0x8883, 0x578A, 0x8884, - 0x578B, 0xD0CD, 0x578C, 0xDBED, 0x578D, 0x8885, 0x578E, 0x8886, - 0x578F, 0x8887, 0x5790, 0x8888, 0x5791, 0x8889, 0x5792, 0xC0DD, - 0x5793, 0xDBF2, 0x5794, 0x888A, 0x5795, 0x888B, 0x5796, 0x888C, - 0x5797, 0x888D, 0x5798, 0x888E, 0x5799, 0x888F, 0x579A, 0x8890, - 0x579B, 0xB6E2, 0x579C, 0x8891, 0x579D, 0x8892, 0x579E, 0x8893, - 0x579F, 0x8894, 0x57A0, 0xDBF3, 0x57A1, 0xDBD2, 0x57A2, 0xB9B8, - 0x57A3, 0xD4AB, 0x57A4, 0xDBEC, 0x57A5, 0x8895, 0x57A6, 0xBFD1, - 0x57A7, 0xDBF0, 0x57A8, 0x8896, 0x57A9, 0xDBD1, 0x57AA, 0x8897, - 0x57AB, 0xB5E6, 0x57AC, 0x8898, 0x57AD, 0xDBEB, 0x57AE, 0xBFE5, - 0x57AF, 0x8899, 0x57B0, 0x889A, 0x57B1, 0x889B, 0x57B2, 0xDBEE, - 0x57B3, 0x889C, 0x57B4, 0xDBF1, 0x57B5, 0x889D, 0x57B6, 0x889E, - 0x57B7, 0x889F, 0x57B8, 0xDBF9, 0x57B9, 0x88A0, 0x57BA, 0x88A1, - 0x57BB, 0x88A2, 0x57BC, 0x88A3, 0x57BD, 0x88A4, 0x57BE, 0x88A5, - 0x57BF, 0x88A6, 0x57C0, 0x88A7, 0x57C1, 0x88A8, 0x57C2, 0xB9A1, - 0x57C3, 0xB0A3, 0x57C4, 0x88A9, 0x57C5, 0x88AA, 0x57C6, 0x88AB, - 0x57C7, 0x88AC, 0x57C8, 0x88AD, 0x57C9, 0x88AE, 0x57CA, 0x88AF, - 0x57CB, 0xC2F1, 0x57CC, 0x88B0, 0x57CD, 0x88B1, 0x57CE, 0xB3C7, - 0x57CF, 0xDBEF, 0x57D0, 0x88B2, 0x57D1, 0x88B3, 0x57D2, 0xDBF8, - 0x57D3, 0x88B4, 0x57D4, 0xC6D2, 0x57D5, 0xDBF4, 0x57D6, 0x88B5, - 0x57D7, 0x88B6, 0x57D8, 0xDBF5, 0x57D9, 0xDBF7, 0x57DA, 0xDBF6, - 0x57DB, 0x88B7, 0x57DC, 0x88B8, 0x57DD, 0xDBFE, 0x57DE, 0x88B9, - 0x57DF, 0xD3F2, 0x57E0, 0xB2BA, 0x57E1, 0x88BA, 0x57E2, 0x88BB, - 0x57E3, 0x88BC, 0x57E4, 0xDBFD, 0x57E5, 0x88BD, 0x57E6, 0x88BE, - 0x57E7, 0x88BF, 0x57E8, 0x88C0, 0x57E9, 0x88C1, 0x57EA, 0x88C2, - 0x57EB, 0x88C3, 0x57EC, 0x88C4, 0x57ED, 0xDCA4, 0x57EE, 0x88C5, - 0x57EF, 0xDBFB, 0x57F0, 0x88C6, 0x57F1, 0x88C7, 0x57F2, 0x88C8, - 0x57F3, 0x88C9, 0x57F4, 0xDBFA, 0x57F5, 0x88CA, 0x57F6, 0x88CB, - 0x57F7, 0x88CC, 0x57F8, 0xDBFC, 0x57F9, 0xC5E0, 0x57FA, 0xBBF9, - 0x57FB, 0x88CD, 0x57FC, 0x88CE, 0x57FD, 0xDCA3, 0x57FE, 0x88CF, - 0x57FF, 0x88D0, 0x5800, 0xDCA5, 0x5801, 0x88D1, 0x5802, 0xCCC3, - 0x5803, 0x88D2, 0x5804, 0x88D3, 0x5805, 0x88D4, 0x5806, 0xB6D1, - 0x5807, 0xDDC0, 0x5808, 0x88D5, 0x5809, 0x88D6, 0x580A, 0x88D7, - 0x580B, 0xDCA1, 0x580C, 0x88D8, 0x580D, 0xDCA2, 0x580E, 0x88D9, - 0x580F, 0x88DA, 0x5810, 0x88DB, 0x5811, 0xC7B5, 0x5812, 0x88DC, - 0x5813, 0x88DD, 0x5814, 0x88DE, 0x5815, 0xB6E9, 0x5816, 0x88DF, - 0x5817, 0x88E0, 0x5818, 0x88E1, 0x5819, 0xDCA7, 0x581A, 0x88E2, - 0x581B, 0x88E3, 0x581C, 0x88E4, 0x581D, 0x88E5, 0x581E, 0xDCA6, - 0x581F, 0x88E6, 0x5820, 0xDCA9, 0x5821, 0xB1A4, 0x5822, 0x88E7, - 0x5823, 0x88E8, 0x5824, 0xB5CC, 0x5825, 0x88E9, 0x5826, 0x88EA, - 0x5827, 0x88EB, 0x5828, 0x88EC, 0x5829, 0x88ED, 0x582A, 0xBFB0, - 0x582B, 0x88EE, 0x582C, 0x88EF, 0x582D, 0x88F0, 0x582E, 0x88F1, - 0x582F, 0x88F2, 0x5830, 0xD1DF, 0x5831, 0x88F3, 0x5832, 0x88F4, - 0x5833, 0x88F5, 0x5834, 0x88F6, 0x5835, 0xB6C2, 0x5836, 0x88F7, - 0x5837, 0x88F8, 0x5838, 0x88F9, 0x5839, 0x88FA, 0x583A, 0x88FB, - 0x583B, 0x88FC, 0x583C, 0x88FD, 0x583D, 0x88FE, 0x583E, 0x8940, - 0x583F, 0x8941, 0x5840, 0x8942, 0x5841, 0x8943, 0x5842, 0x8944, - 0x5843, 0x8945, 0x5844, 0xDCA8, 0x5845, 0x8946, 0x5846, 0x8947, - 0x5847, 0x8948, 0x5848, 0x8949, 0x5849, 0x894A, 0x584A, 0x894B, - 0x584B, 0x894C, 0x584C, 0xCBFA, 0x584D, 0xEBF3, 0x584E, 0x894D, - 0x584F, 0x894E, 0x5850, 0x894F, 0x5851, 0xCBDC, 0x5852, 0x8950, - 0x5853, 0x8951, 0x5854, 0xCBFE, 0x5855, 0x8952, 0x5856, 0x8953, - 0x5857, 0x8954, 0x5858, 0xCCC1, 0x5859, 0x8955, 0x585A, 0x8956, - 0x585B, 0x8957, 0x585C, 0x8958, 0x585D, 0x8959, 0x585E, 0xC8FB, - 0x585F, 0x895A, 0x5860, 0x895B, 0x5861, 0x895C, 0x5862, 0x895D, - 0x5863, 0x895E, 0x5864, 0x895F, 0x5865, 0xDCAA, 0x5866, 0x8960, - 0x5867, 0x8961, 0x5868, 0x8962, 0x5869, 0x8963, 0x586A, 0x8964, - 0x586B, 0xCCEE, 0x586C, 0xDCAB, 0x586D, 0x8965, 0x586E, 0x8966, - 0x586F, 0x8967, 0x5870, 0x8968, 0x5871, 0x8969, 0x5872, 0x896A, - 0x5873, 0x896B, 0x5874, 0x896C, 0x5875, 0x896D, 0x5876, 0x896E, - 0x5877, 0x896F, 0x5878, 0x8970, 0x5879, 0x8971, 0x587A, 0x8972, - 0x587B, 0x8973, 0x587C, 0x8974, 0x587D, 0x8975, 0x587E, 0xDBD3, - 0x587F, 0x8976, 0x5880, 0xDCAF, 0x5881, 0xDCAC, 0x5882, 0x8977, - 0x5883, 0xBEB3, 0x5884, 0x8978, 0x5885, 0xCAFB, 0x5886, 0x8979, - 0x5887, 0x897A, 0x5888, 0x897B, 0x5889, 0xDCAD, 0x588A, 0x897C, - 0x588B, 0x897D, 0x588C, 0x897E, 0x588D, 0x8980, 0x588E, 0x8981, - 0x588F, 0x8982, 0x5890, 0x8983, 0x5891, 0x8984, 0x5892, 0xC9CA, - 0x5893, 0xC4B9, 0x5894, 0x8985, 0x5895, 0x8986, 0x5896, 0x8987, - 0x5897, 0x8988, 0x5898, 0x8989, 0x5899, 0xC7BD, 0x589A, 0xDCAE, - 0x589B, 0x898A, 0x589C, 0x898B, 0x589D, 0x898C, 0x589E, 0xD4F6, - 0x589F, 0xD0E6, 0x58A0, 0x898D, 0x58A1, 0x898E, 0x58A2, 0x898F, - 0x58A3, 0x8990, 0x58A4, 0x8991, 0x58A5, 0x8992, 0x58A6, 0x8993, - 0x58A7, 0x8994, 0x58A8, 0xC4AB, 0x58A9, 0xB6D5, 0x58AA, 0x8995, - 0x58AB, 0x8996, 0x58AC, 0x8997, 0x58AD, 0x8998, 0x58AE, 0x8999, - 0x58AF, 0x899A, 0x58B0, 0x899B, 0x58B1, 0x899C, 0x58B2, 0x899D, - 0x58B3, 0x899E, 0x58B4, 0x899F, 0x58B5, 0x89A0, 0x58B6, 0x89A1, - 0x58B7, 0x89A2, 0x58B8, 0x89A3, 0x58B9, 0x89A4, 0x58BA, 0x89A5, - 0x58BB, 0x89A6, 0x58BC, 0xDBD4, 0x58BD, 0x89A7, 0x58BE, 0x89A8, - 0x58BF, 0x89A9, 0x58C0, 0x89AA, 0x58C1, 0xB1DA, 0x58C2, 0x89AB, - 0x58C3, 0x89AC, 0x58C4, 0x89AD, 0x58C5, 0xDBD5, 0x58C6, 0x89AE, - 0x58C7, 0x89AF, 0x58C8, 0x89B0, 0x58C9, 0x89B1, 0x58CA, 0x89B2, - 0x58CB, 0x89B3, 0x58CC, 0x89B4, 0x58CD, 0x89B5, 0x58CE, 0x89B6, - 0x58CF, 0x89B7, 0x58D0, 0x89B8, 0x58D1, 0xDBD6, 0x58D2, 0x89B9, - 0x58D3, 0x89BA, 0x58D4, 0x89BB, 0x58D5, 0xBABE, 0x58D6, 0x89BC, - 0x58D7, 0x89BD, 0x58D8, 0x89BE, 0x58D9, 0x89BF, 0x58DA, 0x89C0, - 0x58DB, 0x89C1, 0x58DC, 0x89C2, 0x58DD, 0x89C3, 0x58DE, 0x89C4, - 0x58DF, 0x89C5, 0x58E0, 0x89C6, 0x58E1, 0x89C7, 0x58E2, 0x89C8, - 0x58E3, 0x89C9, 0x58E4, 0xC8C0, 0x58E5, 0x89CA, 0x58E6, 0x89CB, - 0x58E7, 0x89CC, 0x58E8, 0x89CD, 0x58E9, 0x89CE, 0x58EA, 0x89CF, - 0x58EB, 0xCABF, 0x58EC, 0xC8C9, 0x58ED, 0x89D0, 0x58EE, 0xD7B3, - 0x58EF, 0x89D1, 0x58F0, 0xC9F9, 0x58F1, 0x89D2, 0x58F2, 0x89D3, - 0x58F3, 0xBFC7, 0x58F4, 0x89D4, 0x58F5, 0x89D5, 0x58F6, 0xBAF8, - 0x58F7, 0x89D6, 0x58F8, 0x89D7, 0x58F9, 0xD2BC, 0x58FA, 0x89D8, - 0x58FB, 0x89D9, 0x58FC, 0x89DA, 0x58FD, 0x89DB, 0x58FE, 0x89DC, - 0x58FF, 0x89DD, 0x5900, 0x89DE, 0x5901, 0x89DF, 0x5902, 0xE2BA, - 0x5903, 0x89E0, 0x5904, 0xB4A6, 0x5905, 0x89E1, 0x5906, 0x89E2, - 0x5907, 0xB1B8, 0x5908, 0x89E3, 0x5909, 0x89E4, 0x590A, 0x89E5, - 0x590B, 0x89E6, 0x590C, 0x89E7, 0x590D, 0xB8B4, 0x590E, 0x89E8, - 0x590F, 0xCFC4, 0x5910, 0x89E9, 0x5911, 0x89EA, 0x5912, 0x89EB, - 0x5913, 0x89EC, 0x5914, 0xD9E7, 0x5915, 0xCFA6, 0x5916, 0xCDE2, - 0x5917, 0x89ED, 0x5918, 0x89EE, 0x5919, 0xD9ED, 0x591A, 0xB6E0, - 0x591B, 0x89EF, 0x591C, 0xD2B9, 0x591D, 0x89F0, 0x591E, 0x89F1, - 0x591F, 0xB9BB, 0x5920, 0x89F2, 0x5921, 0x89F3, 0x5922, 0x89F4, - 0x5923, 0x89F5, 0x5924, 0xE2B9, 0x5925, 0xE2B7, 0x5926, 0x89F6, - 0x5927, 0xB4F3, 0x5928, 0x89F7, 0x5929, 0xCCEC, 0x592A, 0xCCAB, - 0x592B, 0xB7F2, 0x592C, 0x89F8, 0x592D, 0xD8B2, 0x592E, 0xD1EB, - 0x592F, 0xBABB, 0x5930, 0x89F9, 0x5931, 0xCAA7, 0x5932, 0x89FA, - 0x5933, 0x89FB, 0x5934, 0xCDB7, 0x5935, 0x89FC, 0x5936, 0x89FD, - 0x5937, 0xD2C4, 0x5938, 0xBFE4, 0x5939, 0xBCD0, 0x593A, 0xB6E1, - 0x593B, 0x89FE, 0x593C, 0xDEC5, 0x593D, 0x8A40, 0x593E, 0x8A41, - 0x593F, 0x8A42, 0x5940, 0x8A43, 0x5941, 0xDEC6, 0x5942, 0xDBBC, - 0x5943, 0x8A44, 0x5944, 0xD1D9, 0x5945, 0x8A45, 0x5946, 0x8A46, - 0x5947, 0xC6E6, 0x5948, 0xC4CE, 0x5949, 0xB7EE, 0x594A, 0x8A47, - 0x594B, 0xB7DC, 0x594C, 0x8A48, 0x594D, 0x8A49, 0x594E, 0xBFFC, - 0x594F, 0xD7E0, 0x5950, 0x8A4A, 0x5951, 0xC6F5, 0x5952, 0x8A4B, - 0x5953, 0x8A4C, 0x5954, 0xB1BC, 0x5955, 0xDEC8, 0x5956, 0xBDB1, - 0x5957, 0xCCD7, 0x5958, 0xDECA, 0x5959, 0x8A4D, 0x595A, 0xDEC9, - 0x595B, 0x8A4E, 0x595C, 0x8A4F, 0x595D, 0x8A50, 0x595E, 0x8A51, - 0x595F, 0x8A52, 0x5960, 0xB5EC, 0x5961, 0x8A53, 0x5962, 0xC9DD, - 0x5963, 0x8A54, 0x5964, 0x8A55, 0x5965, 0xB0C2, 0x5966, 0x8A56, - 0x5967, 0x8A57, 0x5968, 0x8A58, 0x5969, 0x8A59, 0x596A, 0x8A5A, - 0x596B, 0x8A5B, 0x596C, 0x8A5C, 0x596D, 0x8A5D, 0x596E, 0x8A5E, - 0x596F, 0x8A5F, 0x5970, 0x8A60, 0x5971, 0x8A61, 0x5972, 0x8A62, - 0x5973, 0xC5AE, 0x5974, 0xC5AB, 0x5975, 0x8A63, 0x5976, 0xC4CC, - 0x5977, 0x8A64, 0x5978, 0xBCE9, 0x5979, 0xCBFD, 0x597A, 0x8A65, - 0x597B, 0x8A66, 0x597C, 0x8A67, 0x597D, 0xBAC3, 0x597E, 0x8A68, - 0x597F, 0x8A69, 0x5980, 0x8A6A, 0x5981, 0xE5F9, 0x5982, 0xC8E7, - 0x5983, 0xE5FA, 0x5984, 0xCDFD, 0x5985, 0x8A6B, 0x5986, 0xD7B1, - 0x5987, 0xB8BE, 0x5988, 0xC2E8, 0x5989, 0x8A6C, 0x598A, 0xC8D1, - 0x598B, 0x8A6D, 0x598C, 0x8A6E, 0x598D, 0xE5FB, 0x598E, 0x8A6F, - 0x598F, 0x8A70, 0x5990, 0x8A71, 0x5991, 0x8A72, 0x5992, 0xB6CA, - 0x5993, 0xBCCB, 0x5994, 0x8A73, 0x5995, 0x8A74, 0x5996, 0xD1FD, - 0x5997, 0xE6A1, 0x5998, 0x8A75, 0x5999, 0xC3EE, 0x599A, 0x8A76, - 0x599B, 0x8A77, 0x599C, 0x8A78, 0x599D, 0x8A79, 0x599E, 0xE6A4, - 0x599F, 0x8A7A, 0x59A0, 0x8A7B, 0x59A1, 0x8A7C, 0x59A2, 0x8A7D, - 0x59A3, 0xE5FE, 0x59A4, 0xE6A5, 0x59A5, 0xCDD7, 0x59A6, 0x8A7E, - 0x59A7, 0x8A80, 0x59A8, 0xB7C1, 0x59A9, 0xE5FC, 0x59AA, 0xE5FD, - 0x59AB, 0xE6A3, 0x59AC, 0x8A81, 0x59AD, 0x8A82, 0x59AE, 0xC4DD, - 0x59AF, 0xE6A8, 0x59B0, 0x8A83, 0x59B1, 0x8A84, 0x59B2, 0xE6A7, - 0x59B3, 0x8A85, 0x59B4, 0x8A86, 0x59B5, 0x8A87, 0x59B6, 0x8A88, - 0x59B7, 0x8A89, 0x59B8, 0x8A8A, 0x59B9, 0xC3C3, 0x59BA, 0x8A8B, - 0x59BB, 0xC6DE, 0x59BC, 0x8A8C, 0x59BD, 0x8A8D, 0x59BE, 0xE6AA, - 0x59BF, 0x8A8E, 0x59C0, 0x8A8F, 0x59C1, 0x8A90, 0x59C2, 0x8A91, - 0x59C3, 0x8A92, 0x59C4, 0x8A93, 0x59C5, 0x8A94, 0x59C6, 0xC4B7, - 0x59C7, 0x8A95, 0x59C8, 0x8A96, 0x59C9, 0x8A97, 0x59CA, 0xE6A2, - 0x59CB, 0xCABC, 0x59CC, 0x8A98, 0x59CD, 0x8A99, 0x59CE, 0x8A9A, - 0x59CF, 0x8A9B, 0x59D0, 0xBDE3, 0x59D1, 0xB9C3, 0x59D2, 0xE6A6, - 0x59D3, 0xD0D5, 0x59D4, 0xCEAF, 0x59D5, 0x8A9C, 0x59D6, 0x8A9D, - 0x59D7, 0xE6A9, 0x59D8, 0xE6B0, 0x59D9, 0x8A9E, 0x59DA, 0xD2A6, - 0x59DB, 0x8A9F, 0x59DC, 0xBDAA, 0x59DD, 0xE6AD, 0x59DE, 0x8AA0, - 0x59DF, 0x8AA1, 0x59E0, 0x8AA2, 0x59E1, 0x8AA3, 0x59E2, 0x8AA4, - 0x59E3, 0xE6AF, 0x59E4, 0x8AA5, 0x59E5, 0xC0D1, 0x59E6, 0x8AA6, - 0x59E7, 0x8AA7, 0x59E8, 0xD2CC, 0x59E9, 0x8AA8, 0x59EA, 0x8AA9, - 0x59EB, 0x8AAA, 0x59EC, 0xBCA7, 0x59ED, 0x8AAB, 0x59EE, 0x8AAC, - 0x59EF, 0x8AAD, 0x59F0, 0x8AAE, 0x59F1, 0x8AAF, 0x59F2, 0x8AB0, - 0x59F3, 0x8AB1, 0x59F4, 0x8AB2, 0x59F5, 0x8AB3, 0x59F6, 0x8AB4, - 0x59F7, 0x8AB5, 0x59F8, 0x8AB6, 0x59F9, 0xE6B1, 0x59FA, 0x8AB7, - 0x59FB, 0xD2F6, 0x59FC, 0x8AB8, 0x59FD, 0x8AB9, 0x59FE, 0x8ABA, - 0x59FF, 0xD7CB, 0x5A00, 0x8ABB, 0x5A01, 0xCDFE, 0x5A02, 0x8ABC, - 0x5A03, 0xCDDE, 0x5A04, 0xC2A6, 0x5A05, 0xE6AB, 0x5A06, 0xE6AC, - 0x5A07, 0xBDBF, 0x5A08, 0xE6AE, 0x5A09, 0xE6B3, 0x5A0A, 0x8ABD, - 0x5A0B, 0x8ABE, 0x5A0C, 0xE6B2, 0x5A0D, 0x8ABF, 0x5A0E, 0x8AC0, - 0x5A0F, 0x8AC1, 0x5A10, 0x8AC2, 0x5A11, 0xE6B6, 0x5A12, 0x8AC3, - 0x5A13, 0xE6B8, 0x5A14, 0x8AC4, 0x5A15, 0x8AC5, 0x5A16, 0x8AC6, - 0x5A17, 0x8AC7, 0x5A18, 0xC4EF, 0x5A19, 0x8AC8, 0x5A1A, 0x8AC9, - 0x5A1B, 0x8ACA, 0x5A1C, 0xC4C8, 0x5A1D, 0x8ACB, 0x5A1E, 0x8ACC, - 0x5A1F, 0xBEEA, 0x5A20, 0xC9EF, 0x5A21, 0x8ACD, 0x5A22, 0x8ACE, - 0x5A23, 0xE6B7, 0x5A24, 0x8ACF, 0x5A25, 0xB6F0, 0x5A26, 0x8AD0, - 0x5A27, 0x8AD1, 0x5A28, 0x8AD2, 0x5A29, 0xC3E4, 0x5A2A, 0x8AD3, - 0x5A2B, 0x8AD4, 0x5A2C, 0x8AD5, 0x5A2D, 0x8AD6, 0x5A2E, 0x8AD7, - 0x5A2F, 0x8AD8, 0x5A30, 0x8AD9, 0x5A31, 0xD3E9, 0x5A32, 0xE6B4, - 0x5A33, 0x8ADA, 0x5A34, 0xE6B5, 0x5A35, 0x8ADB, 0x5A36, 0xC8A2, - 0x5A37, 0x8ADC, 0x5A38, 0x8ADD, 0x5A39, 0x8ADE, 0x5A3A, 0x8ADF, - 0x5A3B, 0x8AE0, 0x5A3C, 0xE6BD, 0x5A3D, 0x8AE1, 0x5A3E, 0x8AE2, - 0x5A3F, 0x8AE3, 0x5A40, 0xE6B9, 0x5A41, 0x8AE4, 0x5A42, 0x8AE5, - 0x5A43, 0x8AE6, 0x5A44, 0x8AE7, 0x5A45, 0x8AE8, 0x5A46, 0xC6C5, - 0x5A47, 0x8AE9, 0x5A48, 0x8AEA, 0x5A49, 0xCDF1, 0x5A4A, 0xE6BB, - 0x5A4B, 0x8AEB, 0x5A4C, 0x8AEC, 0x5A4D, 0x8AED, 0x5A4E, 0x8AEE, - 0x5A4F, 0x8AEF, 0x5A50, 0x8AF0, 0x5A51, 0x8AF1, 0x5A52, 0x8AF2, - 0x5A53, 0x8AF3, 0x5A54, 0x8AF4, 0x5A55, 0xE6BC, 0x5A56, 0x8AF5, - 0x5A57, 0x8AF6, 0x5A58, 0x8AF7, 0x5A59, 0x8AF8, 0x5A5A, 0xBBE9, - 0x5A5B, 0x8AF9, 0x5A5C, 0x8AFA, 0x5A5D, 0x8AFB, 0x5A5E, 0x8AFC, - 0x5A5F, 0x8AFD, 0x5A60, 0x8AFE, 0x5A61, 0x8B40, 0x5A62, 0xE6BE, - 0x5A63, 0x8B41, 0x5A64, 0x8B42, 0x5A65, 0x8B43, 0x5A66, 0x8B44, - 0x5A67, 0xE6BA, 0x5A68, 0x8B45, 0x5A69, 0x8B46, 0x5A6A, 0xC0B7, - 0x5A6B, 0x8B47, 0x5A6C, 0x8B48, 0x5A6D, 0x8B49, 0x5A6E, 0x8B4A, - 0x5A6F, 0x8B4B, 0x5A70, 0x8B4C, 0x5A71, 0x8B4D, 0x5A72, 0x8B4E, - 0x5A73, 0x8B4F, 0x5A74, 0xD3A4, 0x5A75, 0xE6BF, 0x5A76, 0xC9F4, - 0x5A77, 0xE6C3, 0x5A78, 0x8B50, 0x5A79, 0x8B51, 0x5A7A, 0xE6C4, - 0x5A7B, 0x8B52, 0x5A7C, 0x8B53, 0x5A7D, 0x8B54, 0x5A7E, 0x8B55, - 0x5A7F, 0xD0F6, 0x5A80, 0x8B56, 0x5A81, 0x8B57, 0x5A82, 0x8B58, - 0x5A83, 0x8B59, 0x5A84, 0x8B5A, 0x5A85, 0x8B5B, 0x5A86, 0x8B5C, - 0x5A87, 0x8B5D, 0x5A88, 0x8B5E, 0x5A89, 0x8B5F, 0x5A8A, 0x8B60, - 0x5A8B, 0x8B61, 0x5A8C, 0x8B62, 0x5A8D, 0x8B63, 0x5A8E, 0x8B64, - 0x5A8F, 0x8B65, 0x5A90, 0x8B66, 0x5A91, 0x8B67, 0x5A92, 0xC3BD, - 0x5A93, 0x8B68, 0x5A94, 0x8B69, 0x5A95, 0x8B6A, 0x5A96, 0x8B6B, - 0x5A97, 0x8B6C, 0x5A98, 0x8B6D, 0x5A99, 0x8B6E, 0x5A9A, 0xC3C4, - 0x5A9B, 0xE6C2, 0x5A9C, 0x8B6F, 0x5A9D, 0x8B70, 0x5A9E, 0x8B71, - 0x5A9F, 0x8B72, 0x5AA0, 0x8B73, 0x5AA1, 0x8B74, 0x5AA2, 0x8B75, - 0x5AA3, 0x8B76, 0x5AA4, 0x8B77, 0x5AA5, 0x8B78, 0x5AA6, 0x8B79, - 0x5AA7, 0x8B7A, 0x5AA8, 0x8B7B, 0x5AA9, 0x8B7C, 0x5AAA, 0xE6C1, - 0x5AAB, 0x8B7D, 0x5AAC, 0x8B7E, 0x5AAD, 0x8B80, 0x5AAE, 0x8B81, - 0x5AAF, 0x8B82, 0x5AB0, 0x8B83, 0x5AB1, 0x8B84, 0x5AB2, 0xE6C7, - 0x5AB3, 0xCFB1, 0x5AB4, 0x8B85, 0x5AB5, 0xEBF4, 0x5AB6, 0x8B86, - 0x5AB7, 0x8B87, 0x5AB8, 0xE6CA, 0x5AB9, 0x8B88, 0x5ABA, 0x8B89, - 0x5ABB, 0x8B8A, 0x5ABC, 0x8B8B, 0x5ABD, 0x8B8C, 0x5ABE, 0xE6C5, - 0x5ABF, 0x8B8D, 0x5AC0, 0x8B8E, 0x5AC1, 0xBCDE, 0x5AC2, 0xC9A9, - 0x5AC3, 0x8B8F, 0x5AC4, 0x8B90, 0x5AC5, 0x8B91, 0x5AC6, 0x8B92, - 0x5AC7, 0x8B93, 0x5AC8, 0x8B94, 0x5AC9, 0xBCB5, 0x5ACA, 0x8B95, - 0x5ACB, 0x8B96, 0x5ACC, 0xCFD3, 0x5ACD, 0x8B97, 0x5ACE, 0x8B98, - 0x5ACF, 0x8B99, 0x5AD0, 0x8B9A, 0x5AD1, 0x8B9B, 0x5AD2, 0xE6C8, - 0x5AD3, 0x8B9C, 0x5AD4, 0xE6C9, 0x5AD5, 0x8B9D, 0x5AD6, 0xE6CE, - 0x5AD7, 0x8B9E, 0x5AD8, 0xE6D0, 0x5AD9, 0x8B9F, 0x5ADA, 0x8BA0, - 0x5ADB, 0x8BA1, 0x5ADC, 0xE6D1, 0x5ADD, 0x8BA2, 0x5ADE, 0x8BA3, - 0x5ADF, 0x8BA4, 0x5AE0, 0xE6CB, 0x5AE1, 0xB5D5, 0x5AE2, 0x8BA5, - 0x5AE3, 0xE6CC, 0x5AE4, 0x8BA6, 0x5AE5, 0x8BA7, 0x5AE6, 0xE6CF, - 0x5AE7, 0x8BA8, 0x5AE8, 0x8BA9, 0x5AE9, 0xC4DB, 0x5AEA, 0x8BAA, - 0x5AEB, 0xE6C6, 0x5AEC, 0x8BAB, 0x5AED, 0x8BAC, 0x5AEE, 0x8BAD, - 0x5AEF, 0x8BAE, 0x5AF0, 0x8BAF, 0x5AF1, 0xE6CD, 0x5AF2, 0x8BB0, - 0x5AF3, 0x8BB1, 0x5AF4, 0x8BB2, 0x5AF5, 0x8BB3, 0x5AF6, 0x8BB4, - 0x5AF7, 0x8BB5, 0x5AF8, 0x8BB6, 0x5AF9, 0x8BB7, 0x5AFA, 0x8BB8, - 0x5AFB, 0x8BB9, 0x5AFC, 0x8BBA, 0x5AFD, 0x8BBB, 0x5AFE, 0x8BBC, - 0x5AFF, 0x8BBD, 0x5B00, 0x8BBE, 0x5B01, 0x8BBF, 0x5B02, 0x8BC0, - 0x5B03, 0x8BC1, 0x5B04, 0x8BC2, 0x5B05, 0x8BC3, 0x5B06, 0x8BC4, - 0x5B07, 0x8BC5, 0x5B08, 0x8BC6, 0x5B09, 0xE6D2, 0x5B0A, 0x8BC7, - 0x5B0B, 0x8BC8, 0x5B0C, 0x8BC9, 0x5B0D, 0x8BCA, 0x5B0E, 0x8BCB, - 0x5B0F, 0x8BCC, 0x5B10, 0x8BCD, 0x5B11, 0x8BCE, 0x5B12, 0x8BCF, - 0x5B13, 0x8BD0, 0x5B14, 0x8BD1, 0x5B15, 0x8BD2, 0x5B16, 0xE6D4, - 0x5B17, 0xE6D3, 0x5B18, 0x8BD3, 0x5B19, 0x8BD4, 0x5B1A, 0x8BD5, - 0x5B1B, 0x8BD6, 0x5B1C, 0x8BD7, 0x5B1D, 0x8BD8, 0x5B1E, 0x8BD9, - 0x5B1F, 0x8BDA, 0x5B20, 0x8BDB, 0x5B21, 0x8BDC, 0x5B22, 0x8BDD, - 0x5B23, 0x8BDE, 0x5B24, 0x8BDF, 0x5B25, 0x8BE0, 0x5B26, 0x8BE1, - 0x5B27, 0x8BE2, 0x5B28, 0x8BE3, 0x5B29, 0x8BE4, 0x5B2A, 0x8BE5, - 0x5B2B, 0x8BE6, 0x5B2C, 0x8BE7, 0x5B2D, 0x8BE8, 0x5B2E, 0x8BE9, - 0x5B2F, 0x8BEA, 0x5B30, 0x8BEB, 0x5B31, 0x8BEC, 0x5B32, 0xE6D5, - 0x5B33, 0x8BED, 0x5B34, 0xD9F8, 0x5B35, 0x8BEE, 0x5B36, 0x8BEF, - 0x5B37, 0xE6D6, 0x5B38, 0x8BF0, 0x5B39, 0x8BF1, 0x5B3A, 0x8BF2, - 0x5B3B, 0x8BF3, 0x5B3C, 0x8BF4, 0x5B3D, 0x8BF5, 0x5B3E, 0x8BF6, - 0x5B3F, 0x8BF7, 0x5B40, 0xE6D7, 0x5B41, 0x8BF8, 0x5B42, 0x8BF9, - 0x5B43, 0x8BFA, 0x5B44, 0x8BFB, 0x5B45, 0x8BFC, 0x5B46, 0x8BFD, - 0x5B47, 0x8BFE, 0x5B48, 0x8C40, 0x5B49, 0x8C41, 0x5B4A, 0x8C42, - 0x5B4B, 0x8C43, 0x5B4C, 0x8C44, 0x5B4D, 0x8C45, 0x5B4E, 0x8C46, - 0x5B4F, 0x8C47, 0x5B50, 0xD7D3, 0x5B51, 0xE6DD, 0x5B52, 0x8C48, - 0x5B53, 0xE6DE, 0x5B54, 0xBFD7, 0x5B55, 0xD4D0, 0x5B56, 0x8C49, - 0x5B57, 0xD7D6, 0x5B58, 0xB4E6, 0x5B59, 0xCBEF, 0x5B5A, 0xE6DA, - 0x5B5B, 0xD8C3, 0x5B5C, 0xD7CE, 0x5B5D, 0xD0A2, 0x5B5E, 0x8C4A, - 0x5B5F, 0xC3CF, 0x5B60, 0x8C4B, 0x5B61, 0x8C4C, 0x5B62, 0xE6DF, - 0x5B63, 0xBCBE, 0x5B64, 0xB9C2, 0x5B65, 0xE6DB, 0x5B66, 0xD1A7, - 0x5B67, 0x8C4D, 0x5B68, 0x8C4E, 0x5B69, 0xBAA2, 0x5B6A, 0xC2CF, - 0x5B6B, 0x8C4F, 0x5B6C, 0xD8AB, 0x5B6D, 0x8C50, 0x5B6E, 0x8C51, - 0x5B6F, 0x8C52, 0x5B70, 0xCAEB, 0x5B71, 0xE5EE, 0x5B72, 0x8C53, - 0x5B73, 0xE6DC, 0x5B74, 0x8C54, 0x5B75, 0xB7F5, 0x5B76, 0x8C55, - 0x5B77, 0x8C56, 0x5B78, 0x8C57, 0x5B79, 0x8C58, 0x5B7A, 0xC8E6, - 0x5B7B, 0x8C59, 0x5B7C, 0x8C5A, 0x5B7D, 0xC4F5, 0x5B7E, 0x8C5B, - 0x5B7F, 0x8C5C, 0x5B80, 0xE5B2, 0x5B81, 0xC4FE, 0x5B82, 0x8C5D, - 0x5B83, 0xCBFC, 0x5B84, 0xE5B3, 0x5B85, 0xD5AC, 0x5B86, 0x8C5E, - 0x5B87, 0xD3EE, 0x5B88, 0xCAD8, 0x5B89, 0xB0B2, 0x5B8A, 0x8C5F, - 0x5B8B, 0xCBCE, 0x5B8C, 0xCDEA, 0x5B8D, 0x8C60, 0x5B8E, 0x8C61, - 0x5B8F, 0xBAEA, 0x5B90, 0x8C62, 0x5B91, 0x8C63, 0x5B92, 0x8C64, - 0x5B93, 0xE5B5, 0x5B94, 0x8C65, 0x5B95, 0xE5B4, 0x5B96, 0x8C66, - 0x5B97, 0xD7DA, 0x5B98, 0xB9D9, 0x5B99, 0xD6E6, 0x5B9A, 0xB6A8, - 0x5B9B, 0xCDF0, 0x5B9C, 0xD2CB, 0x5B9D, 0xB1A6, 0x5B9E, 0xCAB5, - 0x5B9F, 0x8C67, 0x5BA0, 0xB3E8, 0x5BA1, 0xC9F3, 0x5BA2, 0xBFCD, - 0x5BA3, 0xD0FB, 0x5BA4, 0xCAD2, 0x5BA5, 0xE5B6, 0x5BA6, 0xBBC2, - 0x5BA7, 0x8C68, 0x5BA8, 0x8C69, 0x5BA9, 0x8C6A, 0x5BAA, 0xCFDC, - 0x5BAB, 0xB9AC, 0x5BAC, 0x8C6B, 0x5BAD, 0x8C6C, 0x5BAE, 0x8C6D, - 0x5BAF, 0x8C6E, 0x5BB0, 0xD4D7, 0x5BB1, 0x8C6F, 0x5BB2, 0x8C70, - 0x5BB3, 0xBAA6, 0x5BB4, 0xD1E7, 0x5BB5, 0xCFFC, 0x5BB6, 0xBCD2, - 0x5BB7, 0x8C71, 0x5BB8, 0xE5B7, 0x5BB9, 0xC8DD, 0x5BBA, 0x8C72, - 0x5BBB, 0x8C73, 0x5BBC, 0x8C74, 0x5BBD, 0xBFED, 0x5BBE, 0xB1F6, - 0x5BBF, 0xCBDE, 0x5BC0, 0x8C75, 0x5BC1, 0x8C76, 0x5BC2, 0xBCC5, - 0x5BC3, 0x8C77, 0x5BC4, 0xBCC4, 0x5BC5, 0xD2FA, 0x5BC6, 0xC3DC, - 0x5BC7, 0xBFDC, 0x5BC8, 0x8C78, 0x5BC9, 0x8C79, 0x5BCA, 0x8C7A, - 0x5BCB, 0x8C7B, 0x5BCC, 0xB8BB, 0x5BCD, 0x8C7C, 0x5BCE, 0x8C7D, - 0x5BCF, 0x8C7E, 0x5BD0, 0xC3C2, 0x5BD1, 0x8C80, 0x5BD2, 0xBAAE, - 0x5BD3, 0xD4A2, 0x5BD4, 0x8C81, 0x5BD5, 0x8C82, 0x5BD6, 0x8C83, - 0x5BD7, 0x8C84, 0x5BD8, 0x8C85, 0x5BD9, 0x8C86, 0x5BDA, 0x8C87, - 0x5BDB, 0x8C88, 0x5BDC, 0x8C89, 0x5BDD, 0xC7DE, 0x5BDE, 0xC4AF, - 0x5BDF, 0xB2EC, 0x5BE0, 0x8C8A, 0x5BE1, 0xB9D1, 0x5BE2, 0x8C8B, - 0x5BE3, 0x8C8C, 0x5BE4, 0xE5BB, 0x5BE5, 0xC1C8, 0x5BE6, 0x8C8D, - 0x5BE7, 0x8C8E, 0x5BE8, 0xD5AF, 0x5BE9, 0x8C8F, 0x5BEA, 0x8C90, - 0x5BEB, 0x8C91, 0x5BEC, 0x8C92, 0x5BED, 0x8C93, 0x5BEE, 0xE5BC, - 0x5BEF, 0x8C94, 0x5BF0, 0xE5BE, 0x5BF1, 0x8C95, 0x5BF2, 0x8C96, - 0x5BF3, 0x8C97, 0x5BF4, 0x8C98, 0x5BF5, 0x8C99, 0x5BF6, 0x8C9A, - 0x5BF7, 0x8C9B, 0x5BF8, 0xB4E7, 0x5BF9, 0xB6D4, 0x5BFA, 0xCBC2, - 0x5BFB, 0xD1B0, 0x5BFC, 0xB5BC, 0x5BFD, 0x8C9C, 0x5BFE, 0x8C9D, - 0x5BFF, 0xCAD9, 0x5C00, 0x8C9E, 0x5C01, 0xB7E2, 0x5C02, 0x8C9F, - 0x5C03, 0x8CA0, 0x5C04, 0xC9E4, 0x5C05, 0x8CA1, 0x5C06, 0xBDAB, - 0x5C07, 0x8CA2, 0x5C08, 0x8CA3, 0x5C09, 0xCEBE, 0x5C0A, 0xD7F0, - 0x5C0B, 0x8CA4, 0x5C0C, 0x8CA5, 0x5C0D, 0x8CA6, 0x5C0E, 0x8CA7, - 0x5C0F, 0xD0A1, 0x5C10, 0x8CA8, 0x5C11, 0xC9D9, 0x5C12, 0x8CA9, - 0x5C13, 0x8CAA, 0x5C14, 0xB6FB, 0x5C15, 0xE6D8, 0x5C16, 0xBCE2, - 0x5C17, 0x8CAB, 0x5C18, 0xB3BE, 0x5C19, 0x8CAC, 0x5C1A, 0xC9D0, - 0x5C1B, 0x8CAD, 0x5C1C, 0xE6D9, 0x5C1D, 0xB3A2, 0x5C1E, 0x8CAE, - 0x5C1F, 0x8CAF, 0x5C20, 0x8CB0, 0x5C21, 0x8CB1, 0x5C22, 0xDECC, - 0x5C23, 0x8CB2, 0x5C24, 0xD3C8, 0x5C25, 0xDECD, 0x5C26, 0x8CB3, - 0x5C27, 0xD2A2, 0x5C28, 0x8CB4, 0x5C29, 0x8CB5, 0x5C2A, 0x8CB6, - 0x5C2B, 0x8CB7, 0x5C2C, 0xDECE, 0x5C2D, 0x8CB8, 0x5C2E, 0x8CB9, - 0x5C2F, 0x8CBA, 0x5C30, 0x8CBB, 0x5C31, 0xBECD, 0x5C32, 0x8CBC, - 0x5C33, 0x8CBD, 0x5C34, 0xDECF, 0x5C35, 0x8CBE, 0x5C36, 0x8CBF, - 0x5C37, 0x8CC0, 0x5C38, 0xCAAC, 0x5C39, 0xD2FC, 0x5C3A, 0xB3DF, - 0x5C3B, 0xE5EA, 0x5C3C, 0xC4E1, 0x5C3D, 0xBEA1, 0x5C3E, 0xCEB2, - 0x5C3F, 0xC4F2, 0x5C40, 0xBED6, 0x5C41, 0xC6A8, 0x5C42, 0xB2E3, - 0x5C43, 0x8CC1, 0x5C44, 0x8CC2, 0x5C45, 0xBED3, 0x5C46, 0x8CC3, - 0x5C47, 0x8CC4, 0x5C48, 0xC7FC, 0x5C49, 0xCCEB, 0x5C4A, 0xBDEC, - 0x5C4B, 0xCEDD, 0x5C4C, 0x8CC5, 0x5C4D, 0x8CC6, 0x5C4E, 0xCABA, - 0x5C4F, 0xC6C1, 0x5C50, 0xE5EC, 0x5C51, 0xD0BC, 0x5C52, 0x8CC7, - 0x5C53, 0x8CC8, 0x5C54, 0x8CC9, 0x5C55, 0xD5B9, 0x5C56, 0x8CCA, - 0x5C57, 0x8CCB, 0x5C58, 0x8CCC, 0x5C59, 0xE5ED, 0x5C5A, 0x8CCD, - 0x5C5B, 0x8CCE, 0x5C5C, 0x8CCF, 0x5C5D, 0x8CD0, 0x5C5E, 0xCAF4, - 0x5C5F, 0x8CD1, 0x5C60, 0xCDC0, 0x5C61, 0xC2C5, 0x5C62, 0x8CD2, - 0x5C63, 0xE5EF, 0x5C64, 0x8CD3, 0x5C65, 0xC2C4, 0x5C66, 0xE5F0, - 0x5C67, 0x8CD4, 0x5C68, 0x8CD5, 0x5C69, 0x8CD6, 0x5C6A, 0x8CD7, - 0x5C6B, 0x8CD8, 0x5C6C, 0x8CD9, 0x5C6D, 0x8CDA, 0x5C6E, 0xE5F8, - 0x5C6F, 0xCDCD, 0x5C70, 0x8CDB, 0x5C71, 0xC9BD, 0x5C72, 0x8CDC, - 0x5C73, 0x8CDD, 0x5C74, 0x8CDE, 0x5C75, 0x8CDF, 0x5C76, 0x8CE0, - 0x5C77, 0x8CE1, 0x5C78, 0x8CE2, 0x5C79, 0xD2D9, 0x5C7A, 0xE1A8, - 0x5C7B, 0x8CE3, 0x5C7C, 0x8CE4, 0x5C7D, 0x8CE5, 0x5C7E, 0x8CE6, - 0x5C7F, 0xD3EC, 0x5C80, 0x8CE7, 0x5C81, 0xCBEA, 0x5C82, 0xC6F1, - 0x5C83, 0x8CE8, 0x5C84, 0x8CE9, 0x5C85, 0x8CEA, 0x5C86, 0x8CEB, - 0x5C87, 0x8CEC, 0x5C88, 0xE1AC, 0x5C89, 0x8CED, 0x5C8A, 0x8CEE, - 0x5C8B, 0x8CEF, 0x5C8C, 0xE1A7, 0x5C8D, 0xE1A9, 0x5C8E, 0x8CF0, - 0x5C8F, 0x8CF1, 0x5C90, 0xE1AA, 0x5C91, 0xE1AF, 0x5C92, 0x8CF2, - 0x5C93, 0x8CF3, 0x5C94, 0xB2ED, 0x5C95, 0x8CF4, 0x5C96, 0xE1AB, - 0x5C97, 0xB8DA, 0x5C98, 0xE1AD, 0x5C99, 0xE1AE, 0x5C9A, 0xE1B0, - 0x5C9B, 0xB5BA, 0x5C9C, 0xE1B1, 0x5C9D, 0x8CF5, 0x5C9E, 0x8CF6, - 0x5C9F, 0x8CF7, 0x5CA0, 0x8CF8, 0x5CA1, 0x8CF9, 0x5CA2, 0xE1B3, - 0x5CA3, 0xE1B8, 0x5CA4, 0x8CFA, 0x5CA5, 0x8CFB, 0x5CA6, 0x8CFC, - 0x5CA7, 0x8CFD, 0x5CA8, 0x8CFE, 0x5CA9, 0xD1D2, 0x5CAA, 0x8D40, - 0x5CAB, 0xE1B6, 0x5CAC, 0xE1B5, 0x5CAD, 0xC1EB, 0x5CAE, 0x8D41, - 0x5CAF, 0x8D42, 0x5CB0, 0x8D43, 0x5CB1, 0xE1B7, 0x5CB2, 0x8D44, - 0x5CB3, 0xD4C0, 0x5CB4, 0x8D45, 0x5CB5, 0xE1B2, 0x5CB6, 0x8D46, - 0x5CB7, 0xE1BA, 0x5CB8, 0xB0B6, 0x5CB9, 0x8D47, 0x5CBA, 0x8D48, - 0x5CBB, 0x8D49, 0x5CBC, 0x8D4A, 0x5CBD, 0xE1B4, 0x5CBE, 0x8D4B, - 0x5CBF, 0xBFF9, 0x5CC0, 0x8D4C, 0x5CC1, 0xE1B9, 0x5CC2, 0x8D4D, - 0x5CC3, 0x8D4E, 0x5CC4, 0xE1BB, 0x5CC5, 0x8D4F, 0x5CC6, 0x8D50, - 0x5CC7, 0x8D51, 0x5CC8, 0x8D52, 0x5CC9, 0x8D53, 0x5CCA, 0x8D54, - 0x5CCB, 0xE1BE, 0x5CCC, 0x8D55, 0x5CCD, 0x8D56, 0x5CCE, 0x8D57, - 0x5CCF, 0x8D58, 0x5CD0, 0x8D59, 0x5CD1, 0x8D5A, 0x5CD2, 0xE1BC, - 0x5CD3, 0x8D5B, 0x5CD4, 0x8D5C, 0x5CD5, 0x8D5D, 0x5CD6, 0x8D5E, - 0x5CD7, 0x8D5F, 0x5CD8, 0x8D60, 0x5CD9, 0xD6C5, 0x5CDA, 0x8D61, - 0x5CDB, 0x8D62, 0x5CDC, 0x8D63, 0x5CDD, 0x8D64, 0x5CDE, 0x8D65, - 0x5CDF, 0x8D66, 0x5CE0, 0x8D67, 0x5CE1, 0xCFBF, 0x5CE2, 0x8D68, - 0x5CE3, 0x8D69, 0x5CE4, 0xE1BD, 0x5CE5, 0xE1BF, 0x5CE6, 0xC2CD, - 0x5CE7, 0x8D6A, 0x5CE8, 0xB6EB, 0x5CE9, 0x8D6B, 0x5CEA, 0xD3F8, - 0x5CEB, 0x8D6C, 0x5CEC, 0x8D6D, 0x5CED, 0xC7CD, 0x5CEE, 0x8D6E, - 0x5CEF, 0x8D6F, 0x5CF0, 0xB7E5, 0x5CF1, 0x8D70, 0x5CF2, 0x8D71, - 0x5CF3, 0x8D72, 0x5CF4, 0x8D73, 0x5CF5, 0x8D74, 0x5CF6, 0x8D75, - 0x5CF7, 0x8D76, 0x5CF8, 0x8D77, 0x5CF9, 0x8D78, 0x5CFA, 0x8D79, - 0x5CFB, 0xBEFE, 0x5CFC, 0x8D7A, 0x5CFD, 0x8D7B, 0x5CFE, 0x8D7C, - 0x5CFF, 0x8D7D, 0x5D00, 0x8D7E, 0x5D01, 0x8D80, 0x5D02, 0xE1C0, - 0x5D03, 0xE1C1, 0x5D04, 0x8D81, 0x5D05, 0x8D82, 0x5D06, 0xE1C7, - 0x5D07, 0xB3E7, 0x5D08, 0x8D83, 0x5D09, 0x8D84, 0x5D0A, 0x8D85, - 0x5D0B, 0x8D86, 0x5D0C, 0x8D87, 0x5D0D, 0x8D88, 0x5D0E, 0xC6E9, - 0x5D0F, 0x8D89, 0x5D10, 0x8D8A, 0x5D11, 0x8D8B, 0x5D12, 0x8D8C, - 0x5D13, 0x8D8D, 0x5D14, 0xB4DE, 0x5D15, 0x8D8E, 0x5D16, 0xD1C2, - 0x5D17, 0x8D8F, 0x5D18, 0x8D90, 0x5D19, 0x8D91, 0x5D1A, 0x8D92, - 0x5D1B, 0xE1C8, 0x5D1C, 0x8D93, 0x5D1D, 0x8D94, 0x5D1E, 0xE1C6, - 0x5D1F, 0x8D95, 0x5D20, 0x8D96, 0x5D21, 0x8D97, 0x5D22, 0x8D98, - 0x5D23, 0x8D99, 0x5D24, 0xE1C5, 0x5D25, 0x8D9A, 0x5D26, 0xE1C3, - 0x5D27, 0xE1C2, 0x5D28, 0x8D9B, 0x5D29, 0xB1C0, 0x5D2A, 0x8D9C, - 0x5D2B, 0x8D9D, 0x5D2C, 0x8D9E, 0x5D2D, 0xD5B8, 0x5D2E, 0xE1C4, - 0x5D2F, 0x8D9F, 0x5D30, 0x8DA0, 0x5D31, 0x8DA1, 0x5D32, 0x8DA2, - 0x5D33, 0x8DA3, 0x5D34, 0xE1CB, 0x5D35, 0x8DA4, 0x5D36, 0x8DA5, - 0x5D37, 0x8DA6, 0x5D38, 0x8DA7, 0x5D39, 0x8DA8, 0x5D3A, 0x8DA9, - 0x5D3B, 0x8DAA, 0x5D3C, 0x8DAB, 0x5D3D, 0xE1CC, 0x5D3E, 0xE1CA, - 0x5D3F, 0x8DAC, 0x5D40, 0x8DAD, 0x5D41, 0x8DAE, 0x5D42, 0x8DAF, - 0x5D43, 0x8DB0, 0x5D44, 0x8DB1, 0x5D45, 0x8DB2, 0x5D46, 0x8DB3, - 0x5D47, 0xEFFA, 0x5D48, 0x8DB4, 0x5D49, 0x8DB5, 0x5D4A, 0xE1D3, - 0x5D4B, 0xE1D2, 0x5D4C, 0xC7B6, 0x5D4D, 0x8DB6, 0x5D4E, 0x8DB7, - 0x5D4F, 0x8DB8, 0x5D50, 0x8DB9, 0x5D51, 0x8DBA, 0x5D52, 0x8DBB, - 0x5D53, 0x8DBC, 0x5D54, 0x8DBD, 0x5D55, 0x8DBE, 0x5D56, 0x8DBF, - 0x5D57, 0x8DC0, 0x5D58, 0xE1C9, 0x5D59, 0x8DC1, 0x5D5A, 0x8DC2, - 0x5D5B, 0xE1CE, 0x5D5C, 0x8DC3, 0x5D5D, 0xE1D0, 0x5D5E, 0x8DC4, - 0x5D5F, 0x8DC5, 0x5D60, 0x8DC6, 0x5D61, 0x8DC7, 0x5D62, 0x8DC8, - 0x5D63, 0x8DC9, 0x5D64, 0x8DCA, 0x5D65, 0x8DCB, 0x5D66, 0x8DCC, - 0x5D67, 0x8DCD, 0x5D68, 0x8DCE, 0x5D69, 0xE1D4, 0x5D6A, 0x8DCF, - 0x5D6B, 0xE1D1, 0x5D6C, 0xE1CD, 0x5D6D, 0x8DD0, 0x5D6E, 0x8DD1, - 0x5D6F, 0xE1CF, 0x5D70, 0x8DD2, 0x5D71, 0x8DD3, 0x5D72, 0x8DD4, - 0x5D73, 0x8DD5, 0x5D74, 0xE1D5, 0x5D75, 0x8DD6, 0x5D76, 0x8DD7, - 0x5D77, 0x8DD8, 0x5D78, 0x8DD9, 0x5D79, 0x8DDA, 0x5D7A, 0x8DDB, - 0x5D7B, 0x8DDC, 0x5D7C, 0x8DDD, 0x5D7D, 0x8DDE, 0x5D7E, 0x8DDF, - 0x5D7F, 0x8DE0, 0x5D80, 0x8DE1, 0x5D81, 0x8DE2, 0x5D82, 0xE1D6, - 0x5D83, 0x8DE3, 0x5D84, 0x8DE4, 0x5D85, 0x8DE5, 0x5D86, 0x8DE6, - 0x5D87, 0x8DE7, 0x5D88, 0x8DE8, 0x5D89, 0x8DE9, 0x5D8A, 0x8DEA, - 0x5D8B, 0x8DEB, 0x5D8C, 0x8DEC, 0x5D8D, 0x8DED, 0x5D8E, 0x8DEE, - 0x5D8F, 0x8DEF, 0x5D90, 0x8DF0, 0x5D91, 0x8DF1, 0x5D92, 0x8DF2, - 0x5D93, 0x8DF3, 0x5D94, 0x8DF4, 0x5D95, 0x8DF5, 0x5D96, 0x8DF6, - 0x5D97, 0x8DF7, 0x5D98, 0x8DF8, 0x5D99, 0xE1D7, 0x5D9A, 0x8DF9, - 0x5D9B, 0x8DFA, 0x5D9C, 0x8DFB, 0x5D9D, 0xE1D8, 0x5D9E, 0x8DFC, - 0x5D9F, 0x8DFD, 0x5DA0, 0x8DFE, 0x5DA1, 0x8E40, 0x5DA2, 0x8E41, - 0x5DA3, 0x8E42, 0x5DA4, 0x8E43, 0x5DA5, 0x8E44, 0x5DA6, 0x8E45, - 0x5DA7, 0x8E46, 0x5DA8, 0x8E47, 0x5DA9, 0x8E48, 0x5DAA, 0x8E49, - 0x5DAB, 0x8E4A, 0x5DAC, 0x8E4B, 0x5DAD, 0x8E4C, 0x5DAE, 0x8E4D, - 0x5DAF, 0x8E4E, 0x5DB0, 0x8E4F, 0x5DB1, 0x8E50, 0x5DB2, 0x8E51, - 0x5DB3, 0x8E52, 0x5DB4, 0x8E53, 0x5DB5, 0x8E54, 0x5DB6, 0x8E55, - 0x5DB7, 0xE1DA, 0x5DB8, 0x8E56, 0x5DB9, 0x8E57, 0x5DBA, 0x8E58, - 0x5DBB, 0x8E59, 0x5DBC, 0x8E5A, 0x5DBD, 0x8E5B, 0x5DBE, 0x8E5C, - 0x5DBF, 0x8E5D, 0x5DC0, 0x8E5E, 0x5DC1, 0x8E5F, 0x5DC2, 0x8E60, - 0x5DC3, 0x8E61, 0x5DC4, 0x8E62, 0x5DC5, 0xE1DB, 0x5DC6, 0x8E63, - 0x5DC7, 0x8E64, 0x5DC8, 0x8E65, 0x5DC9, 0x8E66, 0x5DCA, 0x8E67, - 0x5DCB, 0x8E68, 0x5DCC, 0x8E69, 0x5DCD, 0xCEA1, 0x5DCE, 0x8E6A, - 0x5DCF, 0x8E6B, 0x5DD0, 0x8E6C, 0x5DD1, 0x8E6D, 0x5DD2, 0x8E6E, - 0x5DD3, 0x8E6F, 0x5DD4, 0x8E70, 0x5DD5, 0x8E71, 0x5DD6, 0x8E72, - 0x5DD7, 0x8E73, 0x5DD8, 0x8E74, 0x5DD9, 0x8E75, 0x5DDA, 0x8E76, - 0x5DDB, 0xE7DD, 0x5DDC, 0x8E77, 0x5DDD, 0xB4A8, 0x5DDE, 0xD6DD, - 0x5DDF, 0x8E78, 0x5DE0, 0x8E79, 0x5DE1, 0xD1B2, 0x5DE2, 0xB3B2, - 0x5DE3, 0x8E7A, 0x5DE4, 0x8E7B, 0x5DE5, 0xB9A4, 0x5DE6, 0xD7F3, - 0x5DE7, 0xC7C9, 0x5DE8, 0xBEDE, 0x5DE9, 0xB9AE, 0x5DEA, 0x8E7C, - 0x5DEB, 0xCED7, 0x5DEC, 0x8E7D, 0x5DED, 0x8E7E, 0x5DEE, 0xB2EE, - 0x5DEF, 0xDBCF, 0x5DF0, 0x8E80, 0x5DF1, 0xBCBA, 0x5DF2, 0xD2D1, - 0x5DF3, 0xCBC8, 0x5DF4, 0xB0CD, 0x5DF5, 0x8E81, 0x5DF6, 0x8E82, - 0x5DF7, 0xCFEF, 0x5DF8, 0x8E83, 0x5DF9, 0x8E84, 0x5DFA, 0x8E85, - 0x5DFB, 0x8E86, 0x5DFC, 0x8E87, 0x5DFD, 0xD9E3, 0x5DFE, 0xBDED, - 0x5DFF, 0x8E88, 0x5E00, 0x8E89, 0x5E01, 0xB1D2, 0x5E02, 0xCAD0, - 0x5E03, 0xB2BC, 0x5E04, 0x8E8A, 0x5E05, 0xCBA7, 0x5E06, 0xB7AB, - 0x5E07, 0x8E8B, 0x5E08, 0xCAA6, 0x5E09, 0x8E8C, 0x5E0A, 0x8E8D, - 0x5E0B, 0x8E8E, 0x5E0C, 0xCFA3, 0x5E0D, 0x8E8F, 0x5E0E, 0x8E90, - 0x5E0F, 0xE0F8, 0x5E10, 0xD5CA, 0x5E11, 0xE0FB, 0x5E12, 0x8E91, - 0x5E13, 0x8E92, 0x5E14, 0xE0FA, 0x5E15, 0xC5C1, 0x5E16, 0xCCFB, - 0x5E17, 0x8E93, 0x5E18, 0xC1B1, 0x5E19, 0xE0F9, 0x5E1A, 0xD6E3, - 0x5E1B, 0xB2AF, 0x5E1C, 0xD6C4, 0x5E1D, 0xB5DB, 0x5E1E, 0x8E94, - 0x5E1F, 0x8E95, 0x5E20, 0x8E96, 0x5E21, 0x8E97, 0x5E22, 0x8E98, - 0x5E23, 0x8E99, 0x5E24, 0x8E9A, 0x5E25, 0x8E9B, 0x5E26, 0xB4F8, - 0x5E27, 0xD6A1, 0x5E28, 0x8E9C, 0x5E29, 0x8E9D, 0x5E2A, 0x8E9E, - 0x5E2B, 0x8E9F, 0x5E2C, 0x8EA0, 0x5E2D, 0xCFAF, 0x5E2E, 0xB0EF, - 0x5E2F, 0x8EA1, 0x5E30, 0x8EA2, 0x5E31, 0xE0FC, 0x5E32, 0x8EA3, - 0x5E33, 0x8EA4, 0x5E34, 0x8EA5, 0x5E35, 0x8EA6, 0x5E36, 0x8EA7, - 0x5E37, 0xE1A1, 0x5E38, 0xB3A3, 0x5E39, 0x8EA8, 0x5E3A, 0x8EA9, - 0x5E3B, 0xE0FD, 0x5E3C, 0xE0FE, 0x5E3D, 0xC3B1, 0x5E3E, 0x8EAA, - 0x5E3F, 0x8EAB, 0x5E40, 0x8EAC, 0x5E41, 0x8EAD, 0x5E42, 0xC3DD, - 0x5E43, 0x8EAE, 0x5E44, 0xE1A2, 0x5E45, 0xB7F9, 0x5E46, 0x8EAF, - 0x5E47, 0x8EB0, 0x5E48, 0x8EB1, 0x5E49, 0x8EB2, 0x5E4A, 0x8EB3, - 0x5E4B, 0x8EB4, 0x5E4C, 0xBBCF, 0x5E4D, 0x8EB5, 0x5E4E, 0x8EB6, - 0x5E4F, 0x8EB7, 0x5E50, 0x8EB8, 0x5E51, 0x8EB9, 0x5E52, 0x8EBA, - 0x5E53, 0x8EBB, 0x5E54, 0xE1A3, 0x5E55, 0xC4BB, 0x5E56, 0x8EBC, - 0x5E57, 0x8EBD, 0x5E58, 0x8EBE, 0x5E59, 0x8EBF, 0x5E5A, 0x8EC0, - 0x5E5B, 0xE1A4, 0x5E5C, 0x8EC1, 0x5E5D, 0x8EC2, 0x5E5E, 0xE1A5, - 0x5E5F, 0x8EC3, 0x5E60, 0x8EC4, 0x5E61, 0xE1A6, 0x5E62, 0xB4B1, - 0x5E63, 0x8EC5, 0x5E64, 0x8EC6, 0x5E65, 0x8EC7, 0x5E66, 0x8EC8, - 0x5E67, 0x8EC9, 0x5E68, 0x8ECA, 0x5E69, 0x8ECB, 0x5E6A, 0x8ECC, - 0x5E6B, 0x8ECD, 0x5E6C, 0x8ECE, 0x5E6D, 0x8ECF, 0x5E6E, 0x8ED0, - 0x5E6F, 0x8ED1, 0x5E70, 0x8ED2, 0x5E71, 0x8ED3, 0x5E72, 0xB8C9, - 0x5E73, 0xC6BD, 0x5E74, 0xC4EA, 0x5E75, 0x8ED4, 0x5E76, 0xB2A2, - 0x5E77, 0x8ED5, 0x5E78, 0xD0D2, 0x5E79, 0x8ED6, 0x5E7A, 0xE7DB, - 0x5E7B, 0xBBC3, 0x5E7C, 0xD3D7, 0x5E7D, 0xD3C4, 0x5E7E, 0x8ED7, - 0x5E7F, 0xB9E3, 0x5E80, 0xE2CF, 0x5E81, 0x8ED8, 0x5E82, 0x8ED9, - 0x5E83, 0x8EDA, 0x5E84, 0xD7AF, 0x5E85, 0x8EDB, 0x5E86, 0xC7EC, - 0x5E87, 0xB1D3, 0x5E88, 0x8EDC, 0x5E89, 0x8EDD, 0x5E8A, 0xB4B2, - 0x5E8B, 0xE2D1, 0x5E8C, 0x8EDE, 0x5E8D, 0x8EDF, 0x5E8E, 0x8EE0, - 0x5E8F, 0xD0F2, 0x5E90, 0xC2AE, 0x5E91, 0xE2D0, 0x5E92, 0x8EE1, - 0x5E93, 0xBFE2, 0x5E94, 0xD3A6, 0x5E95, 0xB5D7, 0x5E96, 0xE2D2, - 0x5E97, 0xB5EA, 0x5E98, 0x8EE2, 0x5E99, 0xC3ED, 0x5E9A, 0xB8FD, - 0x5E9B, 0x8EE3, 0x5E9C, 0xB8AE, 0x5E9D, 0x8EE4, 0x5E9E, 0xC5D3, - 0x5E9F, 0xB7CF, 0x5EA0, 0xE2D4, 0x5EA1, 0x8EE5, 0x5EA2, 0x8EE6, - 0x5EA3, 0x8EE7, 0x5EA4, 0x8EE8, 0x5EA5, 0xE2D3, 0x5EA6, 0xB6C8, - 0x5EA7, 0xD7F9, 0x5EA8, 0x8EE9, 0x5EA9, 0x8EEA, 0x5EAA, 0x8EEB, - 0x5EAB, 0x8EEC, 0x5EAC, 0x8EED, 0x5EAD, 0xCDA5, 0x5EAE, 0x8EEE, - 0x5EAF, 0x8EEF, 0x5EB0, 0x8EF0, 0x5EB1, 0x8EF1, 0x5EB2, 0x8EF2, - 0x5EB3, 0xE2D8, 0x5EB4, 0x8EF3, 0x5EB5, 0xE2D6, 0x5EB6, 0xCAFC, - 0x5EB7, 0xBFB5, 0x5EB8, 0xD3B9, 0x5EB9, 0xE2D5, 0x5EBA, 0x8EF4, - 0x5EBB, 0x8EF5, 0x5EBC, 0x8EF6, 0x5EBD, 0x8EF7, 0x5EBE, 0xE2D7, - 0x5EBF, 0x8EF8, 0x5EC0, 0x8EF9, 0x5EC1, 0x8EFA, 0x5EC2, 0x8EFB, - 0x5EC3, 0x8EFC, 0x5EC4, 0x8EFD, 0x5EC5, 0x8EFE, 0x5EC6, 0x8F40, - 0x5EC7, 0x8F41, 0x5EC8, 0x8F42, 0x5EC9, 0xC1AE, 0x5ECA, 0xC0C8, - 0x5ECB, 0x8F43, 0x5ECC, 0x8F44, 0x5ECD, 0x8F45, 0x5ECE, 0x8F46, - 0x5ECF, 0x8F47, 0x5ED0, 0x8F48, 0x5ED1, 0xE2DB, 0x5ED2, 0xE2DA, - 0x5ED3, 0xC0AA, 0x5ED4, 0x8F49, 0x5ED5, 0x8F4A, 0x5ED6, 0xC1CE, - 0x5ED7, 0x8F4B, 0x5ED8, 0x8F4C, 0x5ED9, 0x8F4D, 0x5EDA, 0x8F4E, - 0x5EDB, 0xE2DC, 0x5EDC, 0x8F4F, 0x5EDD, 0x8F50, 0x5EDE, 0x8F51, - 0x5EDF, 0x8F52, 0x5EE0, 0x8F53, 0x5EE1, 0x8F54, 0x5EE2, 0x8F55, - 0x5EE3, 0x8F56, 0x5EE4, 0x8F57, 0x5EE5, 0x8F58, 0x5EE6, 0x8F59, - 0x5EE7, 0x8F5A, 0x5EE8, 0xE2DD, 0x5EE9, 0x8F5B, 0x5EEA, 0xE2DE, - 0x5EEB, 0x8F5C, 0x5EEC, 0x8F5D, 0x5EED, 0x8F5E, 0x5EEE, 0x8F5F, - 0x5EEF, 0x8F60, 0x5EF0, 0x8F61, 0x5EF1, 0x8F62, 0x5EF2, 0x8F63, - 0x5EF3, 0x8F64, 0x5EF4, 0xDBC8, 0x5EF5, 0x8F65, 0x5EF6, 0xD1D3, - 0x5EF7, 0xCDA2, 0x5EF8, 0x8F66, 0x5EF9, 0x8F67, 0x5EFA, 0xBDA8, - 0x5EFB, 0x8F68, 0x5EFC, 0x8F69, 0x5EFD, 0x8F6A, 0x5EFE, 0xDEC3, - 0x5EFF, 0xD8A5, 0x5F00, 0xBFAA, 0x5F01, 0xDBCD, 0x5F02, 0xD2EC, - 0x5F03, 0xC6FA, 0x5F04, 0xC5AA, 0x5F05, 0x8F6B, 0x5F06, 0x8F6C, - 0x5F07, 0x8F6D, 0x5F08, 0xDEC4, 0x5F09, 0x8F6E, 0x5F0A, 0xB1D7, - 0x5F0B, 0xDFAE, 0x5F0C, 0x8F6F, 0x5F0D, 0x8F70, 0x5F0E, 0x8F71, - 0x5F0F, 0xCABD, 0x5F10, 0x8F72, 0x5F11, 0xDFB1, 0x5F12, 0x8F73, - 0x5F13, 0xB9AD, 0x5F14, 0x8F74, 0x5F15, 0xD2FD, 0x5F16, 0x8F75, - 0x5F17, 0xB8A5, 0x5F18, 0xBAEB, 0x5F19, 0x8F76, 0x5F1A, 0x8F77, - 0x5F1B, 0xB3DA, 0x5F1C, 0x8F78, 0x5F1D, 0x8F79, 0x5F1E, 0x8F7A, - 0x5F1F, 0xB5DC, 0x5F20, 0xD5C5, 0x5F21, 0x8F7B, 0x5F22, 0x8F7C, - 0x5F23, 0x8F7D, 0x5F24, 0x8F7E, 0x5F25, 0xC3D6, 0x5F26, 0xCFD2, - 0x5F27, 0xBBA1, 0x5F28, 0x8F80, 0x5F29, 0xE5F3, 0x5F2A, 0xE5F2, - 0x5F2B, 0x8F81, 0x5F2C, 0x8F82, 0x5F2D, 0xE5F4, 0x5F2E, 0x8F83, - 0x5F2F, 0xCDE4, 0x5F30, 0x8F84, 0x5F31, 0xC8F5, 0x5F32, 0x8F85, - 0x5F33, 0x8F86, 0x5F34, 0x8F87, 0x5F35, 0x8F88, 0x5F36, 0x8F89, - 0x5F37, 0x8F8A, 0x5F38, 0x8F8B, 0x5F39, 0xB5AF, 0x5F3A, 0xC7BF, - 0x5F3B, 0x8F8C, 0x5F3C, 0xE5F6, 0x5F3D, 0x8F8D, 0x5F3E, 0x8F8E, - 0x5F3F, 0x8F8F, 0x5F40, 0xECB0, 0x5F41, 0x8F90, 0x5F42, 0x8F91, - 0x5F43, 0x8F92, 0x5F44, 0x8F93, 0x5F45, 0x8F94, 0x5F46, 0x8F95, - 0x5F47, 0x8F96, 0x5F48, 0x8F97, 0x5F49, 0x8F98, 0x5F4A, 0x8F99, - 0x5F4B, 0x8F9A, 0x5F4C, 0x8F9B, 0x5F4D, 0x8F9C, 0x5F4E, 0x8F9D, - 0x5F4F, 0x8F9E, 0x5F50, 0xE5E6, 0x5F51, 0x8F9F, 0x5F52, 0xB9E9, - 0x5F53, 0xB5B1, 0x5F54, 0x8FA0, 0x5F55, 0xC2BC, 0x5F56, 0xE5E8, - 0x5F57, 0xE5E7, 0x5F58, 0xE5E9, 0x5F59, 0x8FA1, 0x5F5A, 0x8FA2, - 0x5F5B, 0x8FA3, 0x5F5C, 0x8FA4, 0x5F5D, 0xD2CD, 0x5F5E, 0x8FA5, - 0x5F5F, 0x8FA6, 0x5F60, 0x8FA7, 0x5F61, 0xE1EA, 0x5F62, 0xD0CE, - 0x5F63, 0x8FA8, 0x5F64, 0xCDAE, 0x5F65, 0x8FA9, 0x5F66, 0xD1E5, - 0x5F67, 0x8FAA, 0x5F68, 0x8FAB, 0x5F69, 0xB2CA, 0x5F6A, 0xB1EB, - 0x5F6B, 0x8FAC, 0x5F6C, 0xB1F2, 0x5F6D, 0xC5ED, 0x5F6E, 0x8FAD, - 0x5F6F, 0x8FAE, 0x5F70, 0xD5C3, 0x5F71, 0xD3B0, 0x5F72, 0x8FAF, - 0x5F73, 0xE1DC, 0x5F74, 0x8FB0, 0x5F75, 0x8FB1, 0x5F76, 0x8FB2, - 0x5F77, 0xE1DD, 0x5F78, 0x8FB3, 0x5F79, 0xD2DB, 0x5F7A, 0x8FB4, - 0x5F7B, 0xB3B9, 0x5F7C, 0xB1CB, 0x5F7D, 0x8FB5, 0x5F7E, 0x8FB6, - 0x5F7F, 0x8FB7, 0x5F80, 0xCDF9, 0x5F81, 0xD5F7, 0x5F82, 0xE1DE, - 0x5F83, 0x8FB8, 0x5F84, 0xBEB6, 0x5F85, 0xB4FD, 0x5F86, 0x8FB9, - 0x5F87, 0xE1DF, 0x5F88, 0xBADC, 0x5F89, 0xE1E0, 0x5F8A, 0xBBB2, - 0x5F8B, 0xC2C9, 0x5F8C, 0xE1E1, 0x5F8D, 0x8FBA, 0x5F8E, 0x8FBB, - 0x5F8F, 0x8FBC, 0x5F90, 0xD0EC, 0x5F91, 0x8FBD, 0x5F92, 0xCDBD, - 0x5F93, 0x8FBE, 0x5F94, 0x8FBF, 0x5F95, 0xE1E2, 0x5F96, 0x8FC0, - 0x5F97, 0xB5C3, 0x5F98, 0xC5C7, 0x5F99, 0xE1E3, 0x5F9A, 0x8FC1, - 0x5F9B, 0x8FC2, 0x5F9C, 0xE1E4, 0x5F9D, 0x8FC3, 0x5F9E, 0x8FC4, - 0x5F9F, 0x8FC5, 0x5FA0, 0x8FC6, 0x5FA1, 0xD3F9, 0x5FA2, 0x8FC7, - 0x5FA3, 0x8FC8, 0x5FA4, 0x8FC9, 0x5FA5, 0x8FCA, 0x5FA6, 0x8FCB, - 0x5FA7, 0x8FCC, 0x5FA8, 0xE1E5, 0x5FA9, 0x8FCD, 0x5FAA, 0xD1AD, - 0x5FAB, 0x8FCE, 0x5FAC, 0x8FCF, 0x5FAD, 0xE1E6, 0x5FAE, 0xCEA2, - 0x5FAF, 0x8FD0, 0x5FB0, 0x8FD1, 0x5FB1, 0x8FD2, 0x5FB2, 0x8FD3, - 0x5FB3, 0x8FD4, 0x5FB4, 0x8FD5, 0x5FB5, 0xE1E7, 0x5FB6, 0x8FD6, - 0x5FB7, 0xB5C2, 0x5FB8, 0x8FD7, 0x5FB9, 0x8FD8, 0x5FBA, 0x8FD9, - 0x5FBB, 0x8FDA, 0x5FBC, 0xE1E8, 0x5FBD, 0xBBD5, 0x5FBE, 0x8FDB, - 0x5FBF, 0x8FDC, 0x5FC0, 0x8FDD, 0x5FC1, 0x8FDE, 0x5FC2, 0x8FDF, - 0x5FC3, 0xD0C4, 0x5FC4, 0xE2E0, 0x5FC5, 0xB1D8, 0x5FC6, 0xD2E4, - 0x5FC7, 0x8FE0, 0x5FC8, 0x8FE1, 0x5FC9, 0xE2E1, 0x5FCA, 0x8FE2, - 0x5FCB, 0x8FE3, 0x5FCC, 0xBCC9, 0x5FCD, 0xC8CC, 0x5FCE, 0x8FE4, - 0x5FCF, 0xE2E3, 0x5FD0, 0xECFE, 0x5FD1, 0xECFD, 0x5FD2, 0xDFAF, - 0x5FD3, 0x8FE5, 0x5FD4, 0x8FE6, 0x5FD5, 0x8FE7, 0x5FD6, 0xE2E2, - 0x5FD7, 0xD6BE, 0x5FD8, 0xCDFC, 0x5FD9, 0xC3A6, 0x5FDA, 0x8FE8, - 0x5FDB, 0x8FE9, 0x5FDC, 0x8FEA, 0x5FDD, 0xE3C3, 0x5FDE, 0x8FEB, - 0x5FDF, 0x8FEC, 0x5FE0, 0xD6D2, 0x5FE1, 0xE2E7, 0x5FE2, 0x8FED, - 0x5FE3, 0x8FEE, 0x5FE4, 0xE2E8, 0x5FE5, 0x8FEF, 0x5FE6, 0x8FF0, - 0x5FE7, 0xD3C7, 0x5FE8, 0x8FF1, 0x5FE9, 0x8FF2, 0x5FEA, 0xE2EC, - 0x5FEB, 0xBFEC, 0x5FEC, 0x8FF3, 0x5FED, 0xE2ED, 0x5FEE, 0xE2E5, - 0x5FEF, 0x8FF4, 0x5FF0, 0x8FF5, 0x5FF1, 0xB3C0, 0x5FF2, 0x8FF6, - 0x5FF3, 0x8FF7, 0x5FF4, 0x8FF8, 0x5FF5, 0xC4EE, 0x5FF6, 0x8FF9, - 0x5FF7, 0x8FFA, 0x5FF8, 0xE2EE, 0x5FF9, 0x8FFB, 0x5FFA, 0x8FFC, - 0x5FFB, 0xD0C3, 0x5FFC, 0x8FFD, 0x5FFD, 0xBAF6, 0x5FFE, 0xE2E9, - 0x5FFF, 0xB7DE, 0x6000, 0xBBB3, 0x6001, 0xCCAC, 0x6002, 0xCBCB, - 0x6003, 0xE2E4, 0x6004, 0xE2E6, 0x6005, 0xE2EA, 0x6006, 0xE2EB, - 0x6007, 0x8FFE, 0x6008, 0x9040, 0x6009, 0x9041, 0x600A, 0xE2F7, - 0x600B, 0x9042, 0x600C, 0x9043, 0x600D, 0xE2F4, 0x600E, 0xD4F5, - 0x600F, 0xE2F3, 0x6010, 0x9044, 0x6011, 0x9045, 0x6012, 0xC5AD, - 0x6013, 0x9046, 0x6014, 0xD5FA, 0x6015, 0xC5C2, 0x6016, 0xB2C0, - 0x6017, 0x9047, 0x6018, 0x9048, 0x6019, 0xE2EF, 0x601A, 0x9049, - 0x601B, 0xE2F2, 0x601C, 0xC1AF, 0x601D, 0xCBBC, 0x601E, 0x904A, - 0x601F, 0x904B, 0x6020, 0xB5A1, 0x6021, 0xE2F9, 0x6022, 0x904C, - 0x6023, 0x904D, 0x6024, 0x904E, 0x6025, 0xBCB1, 0x6026, 0xE2F1, - 0x6027, 0xD0D4, 0x6028, 0xD4B9, 0x6029, 0xE2F5, 0x602A, 0xB9D6, - 0x602B, 0xE2F6, 0x602C, 0x904F, 0x602D, 0x9050, 0x602E, 0x9051, - 0x602F, 0xC7D3, 0x6030, 0x9052, 0x6031, 0x9053, 0x6032, 0x9054, - 0x6033, 0x9055, 0x6034, 0x9056, 0x6035, 0xE2F0, 0x6036, 0x9057, - 0x6037, 0x9058, 0x6038, 0x9059, 0x6039, 0x905A, 0x603A, 0x905B, - 0x603B, 0xD7DC, 0x603C, 0xEDA1, 0x603D, 0x905C, 0x603E, 0x905D, - 0x603F, 0xE2F8, 0x6040, 0x905E, 0x6041, 0xEDA5, 0x6042, 0xE2FE, - 0x6043, 0xCAD1, 0x6044, 0x905F, 0x6045, 0x9060, 0x6046, 0x9061, - 0x6047, 0x9062, 0x6048, 0x9063, 0x6049, 0x9064, 0x604A, 0x9065, - 0x604B, 0xC1B5, 0x604C, 0x9066, 0x604D, 0xBBD0, 0x604E, 0x9067, - 0x604F, 0x9068, 0x6050, 0xBFD6, 0x6051, 0x9069, 0x6052, 0xBAE3, - 0x6053, 0x906A, 0x6054, 0x906B, 0x6055, 0xCBA1, 0x6056, 0x906C, - 0x6057, 0x906D, 0x6058, 0x906E, 0x6059, 0xEDA6, 0x605A, 0xEDA3, - 0x605B, 0x906F, 0x605C, 0x9070, 0x605D, 0xEDA2, 0x605E, 0x9071, - 0x605F, 0x9072, 0x6060, 0x9073, 0x6061, 0x9074, 0x6062, 0xBBD6, - 0x6063, 0xEDA7, 0x6064, 0xD0F4, 0x6065, 0x9075, 0x6066, 0x9076, - 0x6067, 0xEDA4, 0x6068, 0xBADE, 0x6069, 0xB6F7, 0x606A, 0xE3A1, - 0x606B, 0xB6B2, 0x606C, 0xCCF1, 0x606D, 0xB9A7, 0x606E, 0x9077, - 0x606F, 0xCFA2, 0x6070, 0xC7A1, 0x6071, 0x9078, 0x6072, 0x9079, - 0x6073, 0xBFD2, 0x6074, 0x907A, 0x6075, 0x907B, 0x6076, 0xB6F1, - 0x6077, 0x907C, 0x6078, 0xE2FA, 0x6079, 0xE2FB, 0x607A, 0xE2FD, - 0x607B, 0xE2FC, 0x607C, 0xC4D5, 0x607D, 0xE3A2, 0x607E, 0x907D, - 0x607F, 0xD3C1, 0x6080, 0x907E, 0x6081, 0x9080, 0x6082, 0x9081, - 0x6083, 0xE3A7, 0x6084, 0xC7C4, 0x6085, 0x9082, 0x6086, 0x9083, - 0x6087, 0x9084, 0x6088, 0x9085, 0x6089, 0xCFA4, 0x608A, 0x9086, - 0x608B, 0x9087, 0x608C, 0xE3A9, 0x608D, 0xBAB7, 0x608E, 0x9088, - 0x608F, 0x9089, 0x6090, 0x908A, 0x6091, 0x908B, 0x6092, 0xE3A8, - 0x6093, 0x908C, 0x6094, 0xBBDA, 0x6095, 0x908D, 0x6096, 0xE3A3, - 0x6097, 0x908E, 0x6098, 0x908F, 0x6099, 0x9090, 0x609A, 0xE3A4, - 0x609B, 0xE3AA, 0x609C, 0x9091, 0x609D, 0xE3A6, 0x609E, 0x9092, - 0x609F, 0xCEF2, 0x60A0, 0xD3C6, 0x60A1, 0x9093, 0x60A2, 0x9094, - 0x60A3, 0xBBBC, 0x60A4, 0x9095, 0x60A5, 0x9096, 0x60A6, 0xD4C3, - 0x60A7, 0x9097, 0x60A8, 0xC4FA, 0x60A9, 0x9098, 0x60AA, 0x9099, - 0x60AB, 0xEDA8, 0x60AC, 0xD0FC, 0x60AD, 0xE3A5, 0x60AE, 0x909A, - 0x60AF, 0xC3F5, 0x60B0, 0x909B, 0x60B1, 0xE3AD, 0x60B2, 0xB1AF, - 0x60B3, 0x909C, 0x60B4, 0xE3B2, 0x60B5, 0x909D, 0x60B6, 0x909E, - 0x60B7, 0x909F, 0x60B8, 0xBCC2, 0x60B9, 0x90A0, 0x60BA, 0x90A1, - 0x60BB, 0xE3AC, 0x60BC, 0xB5BF, 0x60BD, 0x90A2, 0x60BE, 0x90A3, - 0x60BF, 0x90A4, 0x60C0, 0x90A5, 0x60C1, 0x90A6, 0x60C2, 0x90A7, - 0x60C3, 0x90A8, 0x60C4, 0x90A9, 0x60C5, 0xC7E9, 0x60C6, 0xE3B0, - 0x60C7, 0x90AA, 0x60C8, 0x90AB, 0x60C9, 0x90AC, 0x60CA, 0xBEAA, - 0x60CB, 0xCDEF, 0x60CC, 0x90AD, 0x60CD, 0x90AE, 0x60CE, 0x90AF, - 0x60CF, 0x90B0, 0x60D0, 0x90B1, 0x60D1, 0xBBF3, 0x60D2, 0x90B2, - 0x60D3, 0x90B3, 0x60D4, 0x90B4, 0x60D5, 0xCCE8, 0x60D6, 0x90B5, - 0x60D7, 0x90B6, 0x60D8, 0xE3AF, 0x60D9, 0x90B7, 0x60DA, 0xE3B1, - 0x60DB, 0x90B8, 0x60DC, 0xCFA7, 0x60DD, 0xE3AE, 0x60DE, 0x90B9, - 0x60DF, 0xCEA9, 0x60E0, 0xBBDD, 0x60E1, 0x90BA, 0x60E2, 0x90BB, - 0x60E3, 0x90BC, 0x60E4, 0x90BD, 0x60E5, 0x90BE, 0x60E6, 0xB5EB, - 0x60E7, 0xBEE5, 0x60E8, 0xB2D2, 0x60E9, 0xB3CD, 0x60EA, 0x90BF, - 0x60EB, 0xB1B9, 0x60EC, 0xE3AB, 0x60ED, 0xB2D1, 0x60EE, 0xB5AC, - 0x60EF, 0xB9DF, 0x60F0, 0xB6E8, 0x60F1, 0x90C0, 0x60F2, 0x90C1, - 0x60F3, 0xCFEB, 0x60F4, 0xE3B7, 0x60F5, 0x90C2, 0x60F6, 0xBBCC, - 0x60F7, 0x90C3, 0x60F8, 0x90C4, 0x60F9, 0xC8C7, 0x60FA, 0xD0CA, - 0x60FB, 0x90C5, 0x60FC, 0x90C6, 0x60FD, 0x90C7, 0x60FE, 0x90C8, - 0x60FF, 0x90C9, 0x6100, 0xE3B8, 0x6101, 0xB3EE, 0x6102, 0x90CA, - 0x6103, 0x90CB, 0x6104, 0x90CC, 0x6105, 0x90CD, 0x6106, 0xEDA9, - 0x6107, 0x90CE, 0x6108, 0xD3FA, 0x6109, 0xD3E4, 0x610A, 0x90CF, - 0x610B, 0x90D0, 0x610C, 0x90D1, 0x610D, 0xEDAA, 0x610E, 0xE3B9, - 0x610F, 0xD2E2, 0x6110, 0x90D2, 0x6111, 0x90D3, 0x6112, 0x90D4, - 0x6113, 0x90D5, 0x6114, 0x90D6, 0x6115, 0xE3B5, 0x6116, 0x90D7, - 0x6117, 0x90D8, 0x6118, 0x90D9, 0x6119, 0x90DA, 0x611A, 0xD3DE, - 0x611B, 0x90DB, 0x611C, 0x90DC, 0x611D, 0x90DD, 0x611E, 0x90DE, - 0x611F, 0xB8D0, 0x6120, 0xE3B3, 0x6121, 0x90DF, 0x6122, 0x90E0, - 0x6123, 0xE3B6, 0x6124, 0xB7DF, 0x6125, 0x90E1, 0x6126, 0xE3B4, - 0x6127, 0xC0A2, 0x6128, 0x90E2, 0x6129, 0x90E3, 0x612A, 0x90E4, - 0x612B, 0xE3BA, 0x612C, 0x90E5, 0x612D, 0x90E6, 0x612E, 0x90E7, - 0x612F, 0x90E8, 0x6130, 0x90E9, 0x6131, 0x90EA, 0x6132, 0x90EB, - 0x6133, 0x90EC, 0x6134, 0x90ED, 0x6135, 0x90EE, 0x6136, 0x90EF, - 0x6137, 0x90F0, 0x6138, 0x90F1, 0x6139, 0x90F2, 0x613A, 0x90F3, - 0x613B, 0x90F4, 0x613C, 0x90F5, 0x613D, 0x90F6, 0x613E, 0x90F7, - 0x613F, 0xD4B8, 0x6140, 0x90F8, 0x6141, 0x90F9, 0x6142, 0x90FA, - 0x6143, 0x90FB, 0x6144, 0x90FC, 0x6145, 0x90FD, 0x6146, 0x90FE, - 0x6147, 0x9140, 0x6148, 0xB4C8, 0x6149, 0x9141, 0x614A, 0xE3BB, - 0x614B, 0x9142, 0x614C, 0xBBC5, 0x614D, 0x9143, 0x614E, 0xC9F7, - 0x614F, 0x9144, 0x6150, 0x9145, 0x6151, 0xC9E5, 0x6152, 0x9146, - 0x6153, 0x9147, 0x6154, 0x9148, 0x6155, 0xC4BD, 0x6156, 0x9149, - 0x6157, 0x914A, 0x6158, 0x914B, 0x6159, 0x914C, 0x615A, 0x914D, - 0x615B, 0x914E, 0x615C, 0x914F, 0x615D, 0xEDAB, 0x615E, 0x9150, - 0x615F, 0x9151, 0x6160, 0x9152, 0x6161, 0x9153, 0x6162, 0xC2FD, - 0x6163, 0x9154, 0x6164, 0x9155, 0x6165, 0x9156, 0x6166, 0x9157, - 0x6167, 0xBBDB, 0x6168, 0xBFAE, 0x6169, 0x9158, 0x616A, 0x9159, - 0x616B, 0x915A, 0x616C, 0x915B, 0x616D, 0x915C, 0x616E, 0x915D, - 0x616F, 0x915E, 0x6170, 0xCEBF, 0x6171, 0x915F, 0x6172, 0x9160, - 0x6173, 0x9161, 0x6174, 0x9162, 0x6175, 0xE3BC, 0x6176, 0x9163, - 0x6177, 0xBFB6, 0x6178, 0x9164, 0x6179, 0x9165, 0x617A, 0x9166, - 0x617B, 0x9167, 0x617C, 0x9168, 0x617D, 0x9169, 0x617E, 0x916A, - 0x617F, 0x916B, 0x6180, 0x916C, 0x6181, 0x916D, 0x6182, 0x916E, - 0x6183, 0x916F, 0x6184, 0x9170, 0x6185, 0x9171, 0x6186, 0x9172, - 0x6187, 0x9173, 0x6188, 0x9174, 0x6189, 0x9175, 0x618A, 0x9176, - 0x618B, 0xB1EF, 0x618C, 0x9177, 0x618D, 0x9178, 0x618E, 0xD4F7, - 0x618F, 0x9179, 0x6190, 0x917A, 0x6191, 0x917B, 0x6192, 0x917C, - 0x6193, 0x917D, 0x6194, 0xE3BE, 0x6195, 0x917E, 0x6196, 0x9180, - 0x6197, 0x9181, 0x6198, 0x9182, 0x6199, 0x9183, 0x619A, 0x9184, - 0x619B, 0x9185, 0x619C, 0x9186, 0x619D, 0xEDAD, 0x619E, 0x9187, - 0x619F, 0x9188, 0x61A0, 0x9189, 0x61A1, 0x918A, 0x61A2, 0x918B, - 0x61A3, 0x918C, 0x61A4, 0x918D, 0x61A5, 0x918E, 0x61A6, 0x918F, - 0x61A7, 0xE3BF, 0x61A8, 0xBAA9, 0x61A9, 0xEDAC, 0x61AA, 0x9190, - 0x61AB, 0x9191, 0x61AC, 0xE3BD, 0x61AD, 0x9192, 0x61AE, 0x9193, - 0x61AF, 0x9194, 0x61B0, 0x9195, 0x61B1, 0x9196, 0x61B2, 0x9197, - 0x61B3, 0x9198, 0x61B4, 0x9199, 0x61B5, 0x919A, 0x61B6, 0x919B, - 0x61B7, 0xE3C0, 0x61B8, 0x919C, 0x61B9, 0x919D, 0x61BA, 0x919E, - 0x61BB, 0x919F, 0x61BC, 0x91A0, 0x61BD, 0x91A1, 0x61BE, 0xBAB6, - 0x61BF, 0x91A2, 0x61C0, 0x91A3, 0x61C1, 0x91A4, 0x61C2, 0xB6AE, - 0x61C3, 0x91A5, 0x61C4, 0x91A6, 0x61C5, 0x91A7, 0x61C6, 0x91A8, - 0x61C7, 0x91A9, 0x61C8, 0xD0B8, 0x61C9, 0x91AA, 0x61CA, 0xB0C3, - 0x61CB, 0xEDAE, 0x61CC, 0x91AB, 0x61CD, 0x91AC, 0x61CE, 0x91AD, - 0x61CF, 0x91AE, 0x61D0, 0x91AF, 0x61D1, 0xEDAF, 0x61D2, 0xC0C1, - 0x61D3, 0x91B0, 0x61D4, 0xE3C1, 0x61D5, 0x91B1, 0x61D6, 0x91B2, - 0x61D7, 0x91B3, 0x61D8, 0x91B4, 0x61D9, 0x91B5, 0x61DA, 0x91B6, - 0x61DB, 0x91B7, 0x61DC, 0x91B8, 0x61DD, 0x91B9, 0x61DE, 0x91BA, - 0x61DF, 0x91BB, 0x61E0, 0x91BC, 0x61E1, 0x91BD, 0x61E2, 0x91BE, - 0x61E3, 0x91BF, 0x61E4, 0x91C0, 0x61E5, 0x91C1, 0x61E6, 0xC5B3, - 0x61E7, 0x91C2, 0x61E8, 0x91C3, 0x61E9, 0x91C4, 0x61EA, 0x91C5, - 0x61EB, 0x91C6, 0x61EC, 0x91C7, 0x61ED, 0x91C8, 0x61EE, 0x91C9, - 0x61EF, 0x91CA, 0x61F0, 0x91CB, 0x61F1, 0x91CC, 0x61F2, 0x91CD, - 0x61F3, 0x91CE, 0x61F4, 0x91CF, 0x61F5, 0xE3C2, 0x61F6, 0x91D0, - 0x61F7, 0x91D1, 0x61F8, 0x91D2, 0x61F9, 0x91D3, 0x61FA, 0x91D4, - 0x61FB, 0x91D5, 0x61FC, 0x91D6, 0x61FD, 0x91D7, 0x61FE, 0x91D8, - 0x61FF, 0xDCB2, 0x6200, 0x91D9, 0x6201, 0x91DA, 0x6202, 0x91DB, - 0x6203, 0x91DC, 0x6204, 0x91DD, 0x6205, 0x91DE, 0x6206, 0xEDB0, - 0x6207, 0x91DF, 0x6208, 0xB8EA, 0x6209, 0x91E0, 0x620A, 0xCEEC, - 0x620B, 0xEAA7, 0x620C, 0xD0E7, 0x620D, 0xCAF9, 0x620E, 0xC8D6, - 0x620F, 0xCFB7, 0x6210, 0xB3C9, 0x6211, 0xCED2, 0x6212, 0xBDE4, - 0x6213, 0x91E1, 0x6214, 0x91E2, 0x6215, 0xE3DE, 0x6216, 0xBBF2, - 0x6217, 0xEAA8, 0x6218, 0xD5BD, 0x6219, 0x91E3, 0x621A, 0xC6DD, - 0x621B, 0xEAA9, 0x621C, 0x91E4, 0x621D, 0x91E5, 0x621E, 0x91E6, - 0x621F, 0xEAAA, 0x6220, 0x91E7, 0x6221, 0xEAAC, 0x6222, 0xEAAB, - 0x6223, 0x91E8, 0x6224, 0xEAAE, 0x6225, 0xEAAD, 0x6226, 0x91E9, - 0x6227, 0x91EA, 0x6228, 0x91EB, 0x6229, 0x91EC, 0x622A, 0xBDD8, - 0x622B, 0x91ED, 0x622C, 0xEAAF, 0x622D, 0x91EE, 0x622E, 0xC2BE, - 0x622F, 0x91EF, 0x6230, 0x91F0, 0x6231, 0x91F1, 0x6232, 0x91F2, - 0x6233, 0xB4C1, 0x6234, 0xB4F7, 0x6235, 0x91F3, 0x6236, 0x91F4, - 0x6237, 0xBBA7, 0x6238, 0x91F5, 0x6239, 0x91F6, 0x623A, 0x91F7, - 0x623B, 0x91F8, 0x623C, 0x91F9, 0x623D, 0xECE6, 0x623E, 0xECE5, - 0x623F, 0xB7BF, 0x6240, 0xCBF9, 0x6241, 0xB1E2, 0x6242, 0x91FA, - 0x6243, 0xECE7, 0x6244, 0x91FB, 0x6245, 0x91FC, 0x6246, 0x91FD, - 0x6247, 0xC9C8, 0x6248, 0xECE8, 0x6249, 0xECE9, 0x624A, 0x91FE, - 0x624B, 0xCAD6, 0x624C, 0xDED0, 0x624D, 0xB2C5, 0x624E, 0xD4FA, - 0x624F, 0x9240, 0x6250, 0x9241, 0x6251, 0xC6CB, 0x6252, 0xB0C7, - 0x6253, 0xB4F2, 0x6254, 0xC8D3, 0x6255, 0x9242, 0x6256, 0x9243, - 0x6257, 0x9244, 0x6258, 0xCDD0, 0x6259, 0x9245, 0x625A, 0x9246, - 0x625B, 0xBFB8, 0x625C, 0x9247, 0x625D, 0x9248, 0x625E, 0x9249, - 0x625F, 0x924A, 0x6260, 0x924B, 0x6261, 0x924C, 0x6262, 0x924D, - 0x6263, 0xBFDB, 0x6264, 0x924E, 0x6265, 0x924F, 0x6266, 0xC7A4, - 0x6267, 0xD6B4, 0x6268, 0x9250, 0x6269, 0xC0A9, 0x626A, 0xDED1, - 0x626B, 0xC9A8, 0x626C, 0xD1EF, 0x626D, 0xC5A4, 0x626E, 0xB0E7, - 0x626F, 0xB3B6, 0x6270, 0xC8C5, 0x6271, 0x9251, 0x6272, 0x9252, - 0x6273, 0xB0E2, 0x6274, 0x9253, 0x6275, 0x9254, 0x6276, 0xB7F6, - 0x6277, 0x9255, 0x6278, 0x9256, 0x6279, 0xC5FA, 0x627A, 0x9257, - 0x627B, 0x9258, 0x627C, 0xB6F3, 0x627D, 0x9259, 0x627E, 0xD5D2, - 0x627F, 0xB3D0, 0x6280, 0xBCBC, 0x6281, 0x925A, 0x6282, 0x925B, - 0x6283, 0x925C, 0x6284, 0xB3AD, 0x6285, 0x925D, 0x6286, 0x925E, - 0x6287, 0x925F, 0x6288, 0x9260, 0x6289, 0xBEF1, 0x628A, 0xB0D1, - 0x628B, 0x9261, 0x628C, 0x9262, 0x628D, 0x9263, 0x628E, 0x9264, - 0x628F, 0x9265, 0x6290, 0x9266, 0x6291, 0xD2D6, 0x6292, 0xCAE3, - 0x6293, 0xD7A5, 0x6294, 0x9267, 0x6295, 0xCDB6, 0x6296, 0xB6B6, - 0x6297, 0xBFB9, 0x6298, 0xD5DB, 0x6299, 0x9268, 0x629A, 0xB8A7, - 0x629B, 0xC5D7, 0x629C, 0x9269, 0x629D, 0x926A, 0x629E, 0x926B, - 0x629F, 0xDED2, 0x62A0, 0xBFD9, 0x62A1, 0xC2D5, 0x62A2, 0xC7C0, - 0x62A3, 0x926C, 0x62A4, 0xBBA4, 0x62A5, 0xB1A8, 0x62A6, 0x926D, - 0x62A7, 0x926E, 0x62A8, 0xC5EA, 0x62A9, 0x926F, 0x62AA, 0x9270, - 0x62AB, 0xC5FB, 0x62AC, 0xCCA7, 0x62AD, 0x9271, 0x62AE, 0x9272, - 0x62AF, 0x9273, 0x62B0, 0x9274, 0x62B1, 0xB1A7, 0x62B2, 0x9275, - 0x62B3, 0x9276, 0x62B4, 0x9277, 0x62B5, 0xB5D6, 0x62B6, 0x9278, - 0x62B7, 0x9279, 0x62B8, 0x927A, 0x62B9, 0xC4A8, 0x62BA, 0x927B, - 0x62BB, 0xDED3, 0x62BC, 0xD1BA, 0x62BD, 0xB3E9, 0x62BE, 0x927C, - 0x62BF, 0xC3F2, 0x62C0, 0x927D, 0x62C1, 0x927E, 0x62C2, 0xB7F7, - 0x62C3, 0x9280, 0x62C4, 0xD6F4, 0x62C5, 0xB5A3, 0x62C6, 0xB2F0, - 0x62C7, 0xC4B4, 0x62C8, 0xC4E9, 0x62C9, 0xC0AD, 0x62CA, 0xDED4, - 0x62CB, 0x9281, 0x62CC, 0xB0E8, 0x62CD, 0xC5C4, 0x62CE, 0xC1E0, - 0x62CF, 0x9282, 0x62D0, 0xB9D5, 0x62D1, 0x9283, 0x62D2, 0xBEDC, - 0x62D3, 0xCDD8, 0x62D4, 0xB0CE, 0x62D5, 0x9284, 0x62D6, 0xCDCF, - 0x62D7, 0xDED6, 0x62D8, 0xBED0, 0x62D9, 0xD7BE, 0x62DA, 0xDED5, - 0x62DB, 0xD5D0, 0x62DC, 0xB0DD, 0x62DD, 0x9285, 0x62DE, 0x9286, - 0x62DF, 0xC4E2, 0x62E0, 0x9287, 0x62E1, 0x9288, 0x62E2, 0xC2A3, - 0x62E3, 0xBCF0, 0x62E4, 0x9289, 0x62E5, 0xD3B5, 0x62E6, 0xC0B9, - 0x62E7, 0xC5A1, 0x62E8, 0xB2A6, 0x62E9, 0xD4F1, 0x62EA, 0x928A, - 0x62EB, 0x928B, 0x62EC, 0xC0A8, 0x62ED, 0xCAC3, 0x62EE, 0xDED7, - 0x62EF, 0xD5FC, 0x62F0, 0x928C, 0x62F1, 0xB9B0, 0x62F2, 0x928D, - 0x62F3, 0xC8AD, 0x62F4, 0xCBA9, 0x62F5, 0x928E, 0x62F6, 0xDED9, - 0x62F7, 0xBFBD, 0x62F8, 0x928F, 0x62F9, 0x9290, 0x62FA, 0x9291, - 0x62FB, 0x9292, 0x62FC, 0xC6B4, 0x62FD, 0xD7A7, 0x62FE, 0xCAB0, - 0x62FF, 0xC4C3, 0x6300, 0x9293, 0x6301, 0xB3D6, 0x6302, 0xB9D2, - 0x6303, 0x9294, 0x6304, 0x9295, 0x6305, 0x9296, 0x6306, 0x9297, - 0x6307, 0xD6B8, 0x6308, 0xEAFC, 0x6309, 0xB0B4, 0x630A, 0x9298, - 0x630B, 0x9299, 0x630C, 0x929A, 0x630D, 0x929B, 0x630E, 0xBFE6, - 0x630F, 0x929C, 0x6310, 0x929D, 0x6311, 0xCCF4, 0x6312, 0x929E, - 0x6313, 0x929F, 0x6314, 0x92A0, 0x6315, 0x92A1, 0x6316, 0xCDDA, - 0x6317, 0x92A2, 0x6318, 0x92A3, 0x6319, 0x92A4, 0x631A, 0xD6BF, - 0x631B, 0xC2CE, 0x631C, 0x92A5, 0x631D, 0xCECE, 0x631E, 0xCCA2, - 0x631F, 0xD0AE, 0x6320, 0xC4D3, 0x6321, 0xB5B2, 0x6322, 0xDED8, - 0x6323, 0xD5F5, 0x6324, 0xBCB7, 0x6325, 0xBBD3, 0x6326, 0x92A6, - 0x6327, 0x92A7, 0x6328, 0xB0A4, 0x6329, 0x92A8, 0x632A, 0xC5B2, - 0x632B, 0xB4EC, 0x632C, 0x92A9, 0x632D, 0x92AA, 0x632E, 0x92AB, - 0x632F, 0xD5F1, 0x6330, 0x92AC, 0x6331, 0x92AD, 0x6332, 0xEAFD, - 0x6333, 0x92AE, 0x6334, 0x92AF, 0x6335, 0x92B0, 0x6336, 0x92B1, - 0x6337, 0x92B2, 0x6338, 0x92B3, 0x6339, 0xDEDA, 0x633A, 0xCDA6, - 0x633B, 0x92B4, 0x633C, 0x92B5, 0x633D, 0xCDEC, 0x633E, 0x92B6, - 0x633F, 0x92B7, 0x6340, 0x92B8, 0x6341, 0x92B9, 0x6342, 0xCEE6, - 0x6343, 0xDEDC, 0x6344, 0x92BA, 0x6345, 0xCDB1, 0x6346, 0xC0A6, - 0x6347, 0x92BB, 0x6348, 0x92BC, 0x6349, 0xD7BD, 0x634A, 0x92BD, - 0x634B, 0xDEDB, 0x634C, 0xB0C6, 0x634D, 0xBAB4, 0x634E, 0xC9D3, - 0x634F, 0xC4F3, 0x6350, 0xBEE8, 0x6351, 0x92BE, 0x6352, 0x92BF, - 0x6353, 0x92C0, 0x6354, 0x92C1, 0x6355, 0xB2B6, 0x6356, 0x92C2, - 0x6357, 0x92C3, 0x6358, 0x92C4, 0x6359, 0x92C5, 0x635A, 0x92C6, - 0x635B, 0x92C7, 0x635C, 0x92C8, 0x635D, 0x92C9, 0x635E, 0xC0CC, - 0x635F, 0xCBF0, 0x6360, 0x92CA, 0x6361, 0xBCF1, 0x6362, 0xBBBB, - 0x6363, 0xB5B7, 0x6364, 0x92CB, 0x6365, 0x92CC, 0x6366, 0x92CD, - 0x6367, 0xC5F5, 0x6368, 0x92CE, 0x6369, 0xDEE6, 0x636A, 0x92CF, - 0x636B, 0x92D0, 0x636C, 0x92D1, 0x636D, 0xDEE3, 0x636E, 0xBEDD, - 0x636F, 0x92D2, 0x6370, 0x92D3, 0x6371, 0xDEDF, 0x6372, 0x92D4, - 0x6373, 0x92D5, 0x6374, 0x92D6, 0x6375, 0x92D7, 0x6376, 0xB4B7, - 0x6377, 0xBDDD, 0x6378, 0x92D8, 0x6379, 0x92D9, 0x637A, 0xDEE0, - 0x637B, 0xC4ED, 0x637C, 0x92DA, 0x637D, 0x92DB, 0x637E, 0x92DC, - 0x637F, 0x92DD, 0x6380, 0xCFC6, 0x6381, 0x92DE, 0x6382, 0xB5E0, - 0x6383, 0x92DF, 0x6384, 0x92E0, 0x6385, 0x92E1, 0x6386, 0x92E2, - 0x6387, 0xB6DE, 0x6388, 0xCADA, 0x6389, 0xB5F4, 0x638A, 0xDEE5, - 0x638B, 0x92E3, 0x638C, 0xD5C6, 0x638D, 0x92E4, 0x638E, 0xDEE1, - 0x638F, 0xCCCD, 0x6390, 0xC6FE, 0x6391, 0x92E5, 0x6392, 0xC5C5, - 0x6393, 0x92E6, 0x6394, 0x92E7, 0x6395, 0x92E8, 0x6396, 0xD2B4, - 0x6397, 0x92E9, 0x6398, 0xBEF2, 0x6399, 0x92EA, 0x639A, 0x92EB, - 0x639B, 0x92EC, 0x639C, 0x92ED, 0x639D, 0x92EE, 0x639E, 0x92EF, - 0x639F, 0x92F0, 0x63A0, 0xC2D3, 0x63A1, 0x92F1, 0x63A2, 0xCCBD, - 0x63A3, 0xB3B8, 0x63A4, 0x92F2, 0x63A5, 0xBDD3, 0x63A6, 0x92F3, - 0x63A7, 0xBFD8, 0x63A8, 0xCDC6, 0x63A9, 0xD1DA, 0x63AA, 0xB4EB, - 0x63AB, 0x92F4, 0x63AC, 0xDEE4, 0x63AD, 0xDEDD, 0x63AE, 0xDEE7, - 0x63AF, 0x92F5, 0x63B0, 0xEAFE, 0x63B1, 0x92F6, 0x63B2, 0x92F7, - 0x63B3, 0xC2B0, 0x63B4, 0xDEE2, 0x63B5, 0x92F8, 0x63B6, 0x92F9, - 0x63B7, 0xD6C0, 0x63B8, 0xB5A7, 0x63B9, 0x92FA, 0x63BA, 0xB2F4, - 0x63BB, 0x92FB, 0x63BC, 0xDEE8, 0x63BD, 0x92FC, 0x63BE, 0xDEF2, - 0x63BF, 0x92FD, 0x63C0, 0x92FE, 0x63C1, 0x9340, 0x63C2, 0x9341, - 0x63C3, 0x9342, 0x63C4, 0xDEED, 0x63C5, 0x9343, 0x63C6, 0xDEF1, - 0x63C7, 0x9344, 0x63C8, 0x9345, 0x63C9, 0xC8E0, 0x63CA, 0x9346, - 0x63CB, 0x9347, 0x63CC, 0x9348, 0x63CD, 0xD7E1, 0x63CE, 0xDEEF, - 0x63CF, 0xC3E8, 0x63D0, 0xCCE1, 0x63D1, 0x9349, 0x63D2, 0xB2E5, - 0x63D3, 0x934A, 0x63D4, 0x934B, 0x63D5, 0x934C, 0x63D6, 0xD2BE, - 0x63D7, 0x934D, 0x63D8, 0x934E, 0x63D9, 0x934F, 0x63DA, 0x9350, - 0x63DB, 0x9351, 0x63DC, 0x9352, 0x63DD, 0x9353, 0x63DE, 0xDEEE, - 0x63DF, 0x9354, 0x63E0, 0xDEEB, 0x63E1, 0xCED5, 0x63E2, 0x9355, - 0x63E3, 0xB4A7, 0x63E4, 0x9356, 0x63E5, 0x9357, 0x63E6, 0x9358, - 0x63E7, 0x9359, 0x63E8, 0x935A, 0x63E9, 0xBFAB, 0x63EA, 0xBEBE, - 0x63EB, 0x935B, 0x63EC, 0x935C, 0x63ED, 0xBDD2, 0x63EE, 0x935D, - 0x63EF, 0x935E, 0x63F0, 0x935F, 0x63F1, 0x9360, 0x63F2, 0xDEE9, - 0x63F3, 0x9361, 0x63F4, 0xD4AE, 0x63F5, 0x9362, 0x63F6, 0xDEDE, - 0x63F7, 0x9363, 0x63F8, 0xDEEA, 0x63F9, 0x9364, 0x63FA, 0x9365, - 0x63FB, 0x9366, 0x63FC, 0x9367, 0x63FD, 0xC0BF, 0x63FE, 0x9368, - 0x63FF, 0xDEEC, 0x6400, 0xB2F3, 0x6401, 0xB8E9, 0x6402, 0xC2A7, - 0x6403, 0x9369, 0x6404, 0x936A, 0x6405, 0xBDC1, 0x6406, 0x936B, - 0x6407, 0x936C, 0x6408, 0x936D, 0x6409, 0x936E, 0x640A, 0x936F, - 0x640B, 0xDEF5, 0x640C, 0xDEF8, 0x640D, 0x9370, 0x640E, 0x9371, - 0x640F, 0xB2AB, 0x6410, 0xB4A4, 0x6411, 0x9372, 0x6412, 0x9373, - 0x6413, 0xB4EA, 0x6414, 0xC9A6, 0x6415, 0x9374, 0x6416, 0x9375, - 0x6417, 0x9376, 0x6418, 0x9377, 0x6419, 0x9378, 0x641A, 0x9379, - 0x641B, 0xDEF6, 0x641C, 0xCBD1, 0x641D, 0x937A, 0x641E, 0xB8E3, - 0x641F, 0x937B, 0x6420, 0xDEF7, 0x6421, 0xDEFA, 0x6422, 0x937C, - 0x6423, 0x937D, 0x6424, 0x937E, 0x6425, 0x9380, 0x6426, 0xDEF9, - 0x6427, 0x9381, 0x6428, 0x9382, 0x6429, 0x9383, 0x642A, 0xCCC2, - 0x642B, 0x9384, 0x642C, 0xB0E1, 0x642D, 0xB4EE, 0x642E, 0x9385, - 0x642F, 0x9386, 0x6430, 0x9387, 0x6431, 0x9388, 0x6432, 0x9389, - 0x6433, 0x938A, 0x6434, 0xE5BA, 0x6435, 0x938B, 0x6436, 0x938C, - 0x6437, 0x938D, 0x6438, 0x938E, 0x6439, 0x938F, 0x643A, 0xD0AF, - 0x643B, 0x9390, 0x643C, 0x9391, 0x643D, 0xB2EB, 0x643E, 0x9392, - 0x643F, 0xEBA1, 0x6440, 0x9393, 0x6441, 0xDEF4, 0x6442, 0x9394, - 0x6443, 0x9395, 0x6444, 0xC9E3, 0x6445, 0xDEF3, 0x6446, 0xB0DA, - 0x6447, 0xD2A1, 0x6448, 0xB1F7, 0x6449, 0x9396, 0x644A, 0xCCAF, - 0x644B, 0x9397, 0x644C, 0x9398, 0x644D, 0x9399, 0x644E, 0x939A, - 0x644F, 0x939B, 0x6450, 0x939C, 0x6451, 0x939D, 0x6452, 0xDEF0, - 0x6453, 0x939E, 0x6454, 0xCBA4, 0x6455, 0x939F, 0x6456, 0x93A0, - 0x6457, 0x93A1, 0x6458, 0xD5AA, 0x6459, 0x93A2, 0x645A, 0x93A3, - 0x645B, 0x93A4, 0x645C, 0x93A5, 0x645D, 0x93A6, 0x645E, 0xDEFB, - 0x645F, 0x93A7, 0x6460, 0x93A8, 0x6461, 0x93A9, 0x6462, 0x93AA, - 0x6463, 0x93AB, 0x6464, 0x93AC, 0x6465, 0x93AD, 0x6466, 0x93AE, - 0x6467, 0xB4DD, 0x6468, 0x93AF, 0x6469, 0xC4A6, 0x646A, 0x93B0, - 0x646B, 0x93B1, 0x646C, 0x93B2, 0x646D, 0xDEFD, 0x646E, 0x93B3, - 0x646F, 0x93B4, 0x6470, 0x93B5, 0x6471, 0x93B6, 0x6472, 0x93B7, - 0x6473, 0x93B8, 0x6474, 0x93B9, 0x6475, 0x93BA, 0x6476, 0x93BB, - 0x6477, 0x93BC, 0x6478, 0xC3FE, 0x6479, 0xC4A1, 0x647A, 0xDFA1, - 0x647B, 0x93BD, 0x647C, 0x93BE, 0x647D, 0x93BF, 0x647E, 0x93C0, - 0x647F, 0x93C1, 0x6480, 0x93C2, 0x6481, 0x93C3, 0x6482, 0xC1CC, - 0x6483, 0x93C4, 0x6484, 0xDEFC, 0x6485, 0xBEEF, 0x6486, 0x93C5, - 0x6487, 0xC6B2, 0x6488, 0x93C6, 0x6489, 0x93C7, 0x648A, 0x93C8, - 0x648B, 0x93C9, 0x648C, 0x93CA, 0x648D, 0x93CB, 0x648E, 0x93CC, - 0x648F, 0x93CD, 0x6490, 0x93CE, 0x6491, 0xB3C5, 0x6492, 0xC8F6, - 0x6493, 0x93CF, 0x6494, 0x93D0, 0x6495, 0xCBBA, 0x6496, 0xDEFE, - 0x6497, 0x93D1, 0x6498, 0x93D2, 0x6499, 0xDFA4, 0x649A, 0x93D3, - 0x649B, 0x93D4, 0x649C, 0x93D5, 0x649D, 0x93D6, 0x649E, 0xD7B2, - 0x649F, 0x93D7, 0x64A0, 0x93D8, 0x64A1, 0x93D9, 0x64A2, 0x93DA, - 0x64A3, 0x93DB, 0x64A4, 0xB3B7, 0x64A5, 0x93DC, 0x64A6, 0x93DD, - 0x64A7, 0x93DE, 0x64A8, 0x93DF, 0x64A9, 0xC1C3, 0x64AA, 0x93E0, - 0x64AB, 0x93E1, 0x64AC, 0xC7CB, 0x64AD, 0xB2A5, 0x64AE, 0xB4E9, - 0x64AF, 0x93E2, 0x64B0, 0xD7AB, 0x64B1, 0x93E3, 0x64B2, 0x93E4, - 0x64B3, 0x93E5, 0x64B4, 0x93E6, 0x64B5, 0xC4EC, 0x64B6, 0x93E7, - 0x64B7, 0xDFA2, 0x64B8, 0xDFA3, 0x64B9, 0x93E8, 0x64BA, 0xDFA5, - 0x64BB, 0x93E9, 0x64BC, 0xBAB3, 0x64BD, 0x93EA, 0x64BE, 0x93EB, - 0x64BF, 0x93EC, 0x64C0, 0xDFA6, 0x64C1, 0x93ED, 0x64C2, 0xC0DE, - 0x64C3, 0x93EE, 0x64C4, 0x93EF, 0x64C5, 0xC9C3, 0x64C6, 0x93F0, - 0x64C7, 0x93F1, 0x64C8, 0x93F2, 0x64C9, 0x93F3, 0x64CA, 0x93F4, - 0x64CB, 0x93F5, 0x64CC, 0x93F6, 0x64CD, 0xB2D9, 0x64CE, 0xC7E6, - 0x64CF, 0x93F7, 0x64D0, 0xDFA7, 0x64D1, 0x93F8, 0x64D2, 0xC7DC, - 0x64D3, 0x93F9, 0x64D4, 0x93FA, 0x64D5, 0x93FB, 0x64D6, 0x93FC, - 0x64D7, 0xDFA8, 0x64D8, 0xEBA2, 0x64D9, 0x93FD, 0x64DA, 0x93FE, - 0x64DB, 0x9440, 0x64DC, 0x9441, 0x64DD, 0x9442, 0x64DE, 0xCBD3, - 0x64DF, 0x9443, 0x64E0, 0x9444, 0x64E1, 0x9445, 0x64E2, 0xDFAA, - 0x64E3, 0x9446, 0x64E4, 0xDFA9, 0x64E5, 0x9447, 0x64E6, 0xB2C1, - 0x64E7, 0x9448, 0x64E8, 0x9449, 0x64E9, 0x944A, 0x64EA, 0x944B, - 0x64EB, 0x944C, 0x64EC, 0x944D, 0x64ED, 0x944E, 0x64EE, 0x944F, - 0x64EF, 0x9450, 0x64F0, 0x9451, 0x64F1, 0x9452, 0x64F2, 0x9453, - 0x64F3, 0x9454, 0x64F4, 0x9455, 0x64F5, 0x9456, 0x64F6, 0x9457, - 0x64F7, 0x9458, 0x64F8, 0x9459, 0x64F9, 0x945A, 0x64FA, 0x945B, - 0x64FB, 0x945C, 0x64FC, 0x945D, 0x64FD, 0x945E, 0x64FE, 0x945F, - 0x64FF, 0x9460, 0x6500, 0xC5CA, 0x6501, 0x9461, 0x6502, 0x9462, - 0x6503, 0x9463, 0x6504, 0x9464, 0x6505, 0x9465, 0x6506, 0x9466, - 0x6507, 0x9467, 0x6508, 0x9468, 0x6509, 0xDFAB, 0x650A, 0x9469, - 0x650B, 0x946A, 0x650C, 0x946B, 0x650D, 0x946C, 0x650E, 0x946D, - 0x650F, 0x946E, 0x6510, 0x946F, 0x6511, 0x9470, 0x6512, 0xD4DC, - 0x6513, 0x9471, 0x6514, 0x9472, 0x6515, 0x9473, 0x6516, 0x9474, - 0x6517, 0x9475, 0x6518, 0xC8C1, 0x6519, 0x9476, 0x651A, 0x9477, - 0x651B, 0x9478, 0x651C, 0x9479, 0x651D, 0x947A, 0x651E, 0x947B, - 0x651F, 0x947C, 0x6520, 0x947D, 0x6521, 0x947E, 0x6522, 0x9480, - 0x6523, 0x9481, 0x6524, 0x9482, 0x6525, 0xDFAC, 0x6526, 0x9483, - 0x6527, 0x9484, 0x6528, 0x9485, 0x6529, 0x9486, 0x652A, 0x9487, - 0x652B, 0xBEF0, 0x652C, 0x9488, 0x652D, 0x9489, 0x652E, 0xDFAD, - 0x652F, 0xD6A7, 0x6530, 0x948A, 0x6531, 0x948B, 0x6532, 0x948C, - 0x6533, 0x948D, 0x6534, 0xEAB7, 0x6535, 0xEBB6, 0x6536, 0xCAD5, - 0x6537, 0x948E, 0x6538, 0xD8FC, 0x6539, 0xB8C4, 0x653A, 0x948F, - 0x653B, 0xB9A5, 0x653C, 0x9490, 0x653D, 0x9491, 0x653E, 0xB7C5, - 0x653F, 0xD5FE, 0x6540, 0x9492, 0x6541, 0x9493, 0x6542, 0x9494, - 0x6543, 0x9495, 0x6544, 0x9496, 0x6545, 0xB9CA, 0x6546, 0x9497, - 0x6547, 0x9498, 0x6548, 0xD0A7, 0x6549, 0xF4CD, 0x654A, 0x9499, - 0x654B, 0x949A, 0x654C, 0xB5D0, 0x654D, 0x949B, 0x654E, 0x949C, - 0x654F, 0xC3F4, 0x6550, 0x949D, 0x6551, 0xBEC8, 0x6552, 0x949E, - 0x6553, 0x949F, 0x6554, 0x94A0, 0x6555, 0xEBB7, 0x6556, 0xB0BD, - 0x6557, 0x94A1, 0x6558, 0x94A2, 0x6559, 0xBDCC, 0x655A, 0x94A3, - 0x655B, 0xC1B2, 0x655C, 0x94A4, 0x655D, 0xB1D6, 0x655E, 0xB3A8, - 0x655F, 0x94A5, 0x6560, 0x94A6, 0x6561, 0x94A7, 0x6562, 0xB8D2, - 0x6563, 0xC9A2, 0x6564, 0x94A8, 0x6565, 0x94A9, 0x6566, 0xB6D8, - 0x6567, 0x94AA, 0x6568, 0x94AB, 0x6569, 0x94AC, 0x656A, 0x94AD, - 0x656B, 0xEBB8, 0x656C, 0xBEB4, 0x656D, 0x94AE, 0x656E, 0x94AF, - 0x656F, 0x94B0, 0x6570, 0xCAFD, 0x6571, 0x94B1, 0x6572, 0xC7C3, - 0x6573, 0x94B2, 0x6574, 0xD5FB, 0x6575, 0x94B3, 0x6576, 0x94B4, - 0x6577, 0xB7F3, 0x6578, 0x94B5, 0x6579, 0x94B6, 0x657A, 0x94B7, - 0x657B, 0x94B8, 0x657C, 0x94B9, 0x657D, 0x94BA, 0x657E, 0x94BB, - 0x657F, 0x94BC, 0x6580, 0x94BD, 0x6581, 0x94BE, 0x6582, 0x94BF, - 0x6583, 0x94C0, 0x6584, 0x94C1, 0x6585, 0x94C2, 0x6586, 0x94C3, - 0x6587, 0xCEC4, 0x6588, 0x94C4, 0x6589, 0x94C5, 0x658A, 0x94C6, - 0x658B, 0xD5AB, 0x658C, 0xB1F3, 0x658D, 0x94C7, 0x658E, 0x94C8, - 0x658F, 0x94C9, 0x6590, 0xECB3, 0x6591, 0xB0DF, 0x6592, 0x94CA, - 0x6593, 0xECB5, 0x6594, 0x94CB, 0x6595, 0x94CC, 0x6596, 0x94CD, - 0x6597, 0xB6B7, 0x6598, 0x94CE, 0x6599, 0xC1CF, 0x659A, 0x94CF, - 0x659B, 0xF5FA, 0x659C, 0xD0B1, 0x659D, 0x94D0, 0x659E, 0x94D1, - 0x659F, 0xD5E5, 0x65A0, 0x94D2, 0x65A1, 0xCED3, 0x65A2, 0x94D3, - 0x65A3, 0x94D4, 0x65A4, 0xBDEF, 0x65A5, 0xB3E2, 0x65A6, 0x94D5, - 0x65A7, 0xB8AB, 0x65A8, 0x94D6, 0x65A9, 0xD5B6, 0x65AA, 0x94D7, - 0x65AB, 0xEDBD, 0x65AC, 0x94D8, 0x65AD, 0xB6CF, 0x65AE, 0x94D9, - 0x65AF, 0xCBB9, 0x65B0, 0xD0C2, 0x65B1, 0x94DA, 0x65B2, 0x94DB, - 0x65B3, 0x94DC, 0x65B4, 0x94DD, 0x65B5, 0x94DE, 0x65B6, 0x94DF, - 0x65B7, 0x94E0, 0x65B8, 0x94E1, 0x65B9, 0xB7BD, 0x65BA, 0x94E2, - 0x65BB, 0x94E3, 0x65BC, 0xECB6, 0x65BD, 0xCAA9, 0x65BE, 0x94E4, - 0x65BF, 0x94E5, 0x65C0, 0x94E6, 0x65C1, 0xC5D4, 0x65C2, 0x94E7, - 0x65C3, 0xECB9, 0x65C4, 0xECB8, 0x65C5, 0xC2C3, 0x65C6, 0xECB7, - 0x65C7, 0x94E8, 0x65C8, 0x94E9, 0x65C9, 0x94EA, 0x65CA, 0x94EB, - 0x65CB, 0xD0FD, 0x65CC, 0xECBA, 0x65CD, 0x94EC, 0x65CE, 0xECBB, - 0x65CF, 0xD7E5, 0x65D0, 0x94ED, 0x65D1, 0x94EE, 0x65D2, 0xECBC, - 0x65D3, 0x94EF, 0x65D4, 0x94F0, 0x65D5, 0x94F1, 0x65D6, 0xECBD, - 0x65D7, 0xC6EC, 0x65D8, 0x94F2, 0x65D9, 0x94F3, 0x65DA, 0x94F4, - 0x65DB, 0x94F5, 0x65DC, 0x94F6, 0x65DD, 0x94F7, 0x65DE, 0x94F8, - 0x65DF, 0x94F9, 0x65E0, 0xCEDE, 0x65E1, 0x94FA, 0x65E2, 0xBCC8, - 0x65E3, 0x94FB, 0x65E4, 0x94FC, 0x65E5, 0xC8D5, 0x65E6, 0xB5A9, - 0x65E7, 0xBEC9, 0x65E8, 0xD6BC, 0x65E9, 0xD4E7, 0x65EA, 0x94FD, - 0x65EB, 0x94FE, 0x65EC, 0xD1AE, 0x65ED, 0xD0F1, 0x65EE, 0xEAB8, - 0x65EF, 0xEAB9, 0x65F0, 0xEABA, 0x65F1, 0xBAB5, 0x65F2, 0x9540, - 0x65F3, 0x9541, 0x65F4, 0x9542, 0x65F5, 0x9543, 0x65F6, 0xCAB1, - 0x65F7, 0xBFF5, 0x65F8, 0x9544, 0x65F9, 0x9545, 0x65FA, 0xCDFA, - 0x65FB, 0x9546, 0x65FC, 0x9547, 0x65FD, 0x9548, 0x65FE, 0x9549, - 0x65FF, 0x954A, 0x6600, 0xEAC0, 0x6601, 0x954B, 0x6602, 0xB0BA, - 0x6603, 0xEABE, 0x6604, 0x954C, 0x6605, 0x954D, 0x6606, 0xC0A5, - 0x6607, 0x954E, 0x6608, 0x954F, 0x6609, 0x9550, 0x660A, 0xEABB, - 0x660B, 0x9551, 0x660C, 0xB2FD, 0x660D, 0x9552, 0x660E, 0xC3F7, - 0x660F, 0xBBE8, 0x6610, 0x9553, 0x6611, 0x9554, 0x6612, 0x9555, - 0x6613, 0xD2D7, 0x6614, 0xCEF4, 0x6615, 0xEABF, 0x6616, 0x9556, - 0x6617, 0x9557, 0x6618, 0x9558, 0x6619, 0xEABC, 0x661A, 0x9559, - 0x661B, 0x955A, 0x661C, 0x955B, 0x661D, 0xEAC3, 0x661E, 0x955C, - 0x661F, 0xD0C7, 0x6620, 0xD3B3, 0x6621, 0x955D, 0x6622, 0x955E, - 0x6623, 0x955F, 0x6624, 0x9560, 0x6625, 0xB4BA, 0x6626, 0x9561, - 0x6627, 0xC3C1, 0x6628, 0xD7F2, 0x6629, 0x9562, 0x662A, 0x9563, - 0x662B, 0x9564, 0x662C, 0x9565, 0x662D, 0xD5D1, 0x662E, 0x9566, - 0x662F, 0xCAC7, 0x6630, 0x9567, 0x6631, 0xEAC5, 0x6632, 0x9568, - 0x6633, 0x9569, 0x6634, 0xEAC4, 0x6635, 0xEAC7, 0x6636, 0xEAC6, - 0x6637, 0x956A, 0x6638, 0x956B, 0x6639, 0x956C, 0x663A, 0x956D, - 0x663B, 0x956E, 0x663C, 0xD6E7, 0x663D, 0x956F, 0x663E, 0xCFD4, - 0x663F, 0x9570, 0x6640, 0x9571, 0x6641, 0xEACB, 0x6642, 0x9572, - 0x6643, 0xBBCE, 0x6644, 0x9573, 0x6645, 0x9574, 0x6646, 0x9575, - 0x6647, 0x9576, 0x6648, 0x9577, 0x6649, 0x9578, 0x664A, 0x9579, - 0x664B, 0xBDFA, 0x664C, 0xC9CE, 0x664D, 0x957A, 0x664E, 0x957B, - 0x664F, 0xEACC, 0x6650, 0x957C, 0x6651, 0x957D, 0x6652, 0xC9B9, - 0x6653, 0xCFFE, 0x6654, 0xEACA, 0x6655, 0xD4CE, 0x6656, 0xEACD, - 0x6657, 0xEACF, 0x6658, 0x957E, 0x6659, 0x9580, 0x665A, 0xCDED, - 0x665B, 0x9581, 0x665C, 0x9582, 0x665D, 0x9583, 0x665E, 0x9584, - 0x665F, 0xEAC9, 0x6660, 0x9585, 0x6661, 0xEACE, 0x6662, 0x9586, - 0x6663, 0x9587, 0x6664, 0xCEEE, 0x6665, 0x9588, 0x6666, 0xBBDE, - 0x6667, 0x9589, 0x6668, 0xB3BF, 0x6669, 0x958A, 0x666A, 0x958B, - 0x666B, 0x958C, 0x666C, 0x958D, 0x666D, 0x958E, 0x666E, 0xC6D5, - 0x666F, 0xBEB0, 0x6670, 0xCEFA, 0x6671, 0x958F, 0x6672, 0x9590, - 0x6673, 0x9591, 0x6674, 0xC7E7, 0x6675, 0x9592, 0x6676, 0xBEA7, - 0x6677, 0xEAD0, 0x6678, 0x9593, 0x6679, 0x9594, 0x667A, 0xD6C7, - 0x667B, 0x9595, 0x667C, 0x9596, 0x667D, 0x9597, 0x667E, 0xC1C0, - 0x667F, 0x9598, 0x6680, 0x9599, 0x6681, 0x959A, 0x6682, 0xD4DD, - 0x6683, 0x959B, 0x6684, 0xEAD1, 0x6685, 0x959C, 0x6686, 0x959D, - 0x6687, 0xCFBE, 0x6688, 0x959E, 0x6689, 0x959F, 0x668A, 0x95A0, - 0x668B, 0x95A1, 0x668C, 0xEAD2, 0x668D, 0x95A2, 0x668E, 0x95A3, - 0x668F, 0x95A4, 0x6690, 0x95A5, 0x6691, 0xCAEE, 0x6692, 0x95A6, - 0x6693, 0x95A7, 0x6694, 0x95A8, 0x6695, 0x95A9, 0x6696, 0xC5AF, - 0x6697, 0xB0B5, 0x6698, 0x95AA, 0x6699, 0x95AB, 0x669A, 0x95AC, - 0x669B, 0x95AD, 0x669C, 0x95AE, 0x669D, 0xEAD4, 0x669E, 0x95AF, - 0x669F, 0x95B0, 0x66A0, 0x95B1, 0x66A1, 0x95B2, 0x66A2, 0x95B3, - 0x66A3, 0x95B4, 0x66A4, 0x95B5, 0x66A5, 0x95B6, 0x66A6, 0x95B7, - 0x66A7, 0xEAD3, 0x66A8, 0xF4DF, 0x66A9, 0x95B8, 0x66AA, 0x95B9, - 0x66AB, 0x95BA, 0x66AC, 0x95BB, 0x66AD, 0x95BC, 0x66AE, 0xC4BA, - 0x66AF, 0x95BD, 0x66B0, 0x95BE, 0x66B1, 0x95BF, 0x66B2, 0x95C0, - 0x66B3, 0x95C1, 0x66B4, 0xB1A9, 0x66B5, 0x95C2, 0x66B6, 0x95C3, - 0x66B7, 0x95C4, 0x66B8, 0x95C5, 0x66B9, 0xE5DF, 0x66BA, 0x95C6, - 0x66BB, 0x95C7, 0x66BC, 0x95C8, 0x66BD, 0x95C9, 0x66BE, 0xEAD5, - 0x66BF, 0x95CA, 0x66C0, 0x95CB, 0x66C1, 0x95CC, 0x66C2, 0x95CD, - 0x66C3, 0x95CE, 0x66C4, 0x95CF, 0x66C5, 0x95D0, 0x66C6, 0x95D1, - 0x66C7, 0x95D2, 0x66C8, 0x95D3, 0x66C9, 0x95D4, 0x66CA, 0x95D5, - 0x66CB, 0x95D6, 0x66CC, 0x95D7, 0x66CD, 0x95D8, 0x66CE, 0x95D9, - 0x66CF, 0x95DA, 0x66D0, 0x95DB, 0x66D1, 0x95DC, 0x66D2, 0x95DD, - 0x66D3, 0x95DE, 0x66D4, 0x95DF, 0x66D5, 0x95E0, 0x66D6, 0x95E1, - 0x66D7, 0x95E2, 0x66D8, 0x95E3, 0x66D9, 0xCAEF, 0x66DA, 0x95E4, - 0x66DB, 0xEAD6, 0x66DC, 0xEAD7, 0x66DD, 0xC6D8, 0x66DE, 0x95E5, - 0x66DF, 0x95E6, 0x66E0, 0x95E7, 0x66E1, 0x95E8, 0x66E2, 0x95E9, - 0x66E3, 0x95EA, 0x66E4, 0x95EB, 0x66E5, 0x95EC, 0x66E6, 0xEAD8, - 0x66E7, 0x95ED, 0x66E8, 0x95EE, 0x66E9, 0xEAD9, 0x66EA, 0x95EF, - 0x66EB, 0x95F0, 0x66EC, 0x95F1, 0x66ED, 0x95F2, 0x66EE, 0x95F3, - 0x66EF, 0x95F4, 0x66F0, 0xD4BB, 0x66F1, 0x95F5, 0x66F2, 0xC7FA, - 0x66F3, 0xD2B7, 0x66F4, 0xB8FC, 0x66F5, 0x95F6, 0x66F6, 0x95F7, - 0x66F7, 0xEAC2, 0x66F8, 0x95F8, 0x66F9, 0xB2DC, 0x66FA, 0x95F9, - 0x66FB, 0x95FA, 0x66FC, 0xC2FC, 0x66FD, 0x95FB, 0x66FE, 0xD4F8, - 0x66FF, 0xCCE6, 0x6700, 0xD7EE, 0x6701, 0x95FC, 0x6702, 0x95FD, - 0x6703, 0x95FE, 0x6704, 0x9640, 0x6705, 0x9641, 0x6706, 0x9642, - 0x6707, 0x9643, 0x6708, 0xD4C2, 0x6709, 0xD3D0, 0x670A, 0xEBC3, - 0x670B, 0xC5F3, 0x670C, 0x9644, 0x670D, 0xB7FE, 0x670E, 0x9645, - 0x670F, 0x9646, 0x6710, 0xEBD4, 0x6711, 0x9647, 0x6712, 0x9648, - 0x6713, 0x9649, 0x6714, 0xCBB7, 0x6715, 0xEBDE, 0x6716, 0x964A, - 0x6717, 0xC0CA, 0x6718, 0x964B, 0x6719, 0x964C, 0x671A, 0x964D, - 0x671B, 0xCDFB, 0x671C, 0x964E, 0x671D, 0xB3AF, 0x671E, 0x964F, - 0x671F, 0xC6DA, 0x6720, 0x9650, 0x6721, 0x9651, 0x6722, 0x9652, - 0x6723, 0x9653, 0x6724, 0x9654, 0x6725, 0x9655, 0x6726, 0xEBFC, - 0x6727, 0x9656, 0x6728, 0xC4BE, 0x6729, 0x9657, 0x672A, 0xCEB4, - 0x672B, 0xC4A9, 0x672C, 0xB1BE, 0x672D, 0xD4FD, 0x672E, 0x9658, - 0x672F, 0xCAF5, 0x6730, 0x9659, 0x6731, 0xD6EC, 0x6732, 0x965A, - 0x6733, 0x965B, 0x6734, 0xC6D3, 0x6735, 0xB6E4, 0x6736, 0x965C, - 0x6737, 0x965D, 0x6738, 0x965E, 0x6739, 0x965F, 0x673A, 0xBBFA, - 0x673B, 0x9660, 0x673C, 0x9661, 0x673D, 0xD0E0, 0x673E, 0x9662, - 0x673F, 0x9663, 0x6740, 0xC9B1, 0x6741, 0x9664, 0x6742, 0xD4D3, - 0x6743, 0xC8A8, 0x6744, 0x9665, 0x6745, 0x9666, 0x6746, 0xB8CB, - 0x6747, 0x9667, 0x6748, 0xE8BE, 0x6749, 0xC9BC, 0x674A, 0x9668, - 0x674B, 0x9669, 0x674C, 0xE8BB, 0x674D, 0x966A, 0x674E, 0xC0EE, - 0x674F, 0xD0D3, 0x6750, 0xB2C4, 0x6751, 0xB4E5, 0x6752, 0x966B, - 0x6753, 0xE8BC, 0x6754, 0x966C, 0x6755, 0x966D, 0x6756, 0xD5C8, - 0x6757, 0x966E, 0x6758, 0x966F, 0x6759, 0x9670, 0x675A, 0x9671, - 0x675B, 0x9672, 0x675C, 0xB6C5, 0x675D, 0x9673, 0x675E, 0xE8BD, - 0x675F, 0xCAF8, 0x6760, 0xB8DC, 0x6761, 0xCCF5, 0x6762, 0x9674, - 0x6763, 0x9675, 0x6764, 0x9676, 0x6765, 0xC0B4, 0x6766, 0x9677, - 0x6767, 0x9678, 0x6768, 0xD1EE, 0x6769, 0xE8BF, 0x676A, 0xE8C2, - 0x676B, 0x9679, 0x676C, 0x967A, 0x676D, 0xBABC, 0x676E, 0x967B, - 0x676F, 0xB1AD, 0x6770, 0xBDDC, 0x6771, 0x967C, 0x6772, 0xEABD, - 0x6773, 0xE8C3, 0x6774, 0x967D, 0x6775, 0xE8C6, 0x6776, 0x967E, - 0x6777, 0xE8CB, 0x6778, 0x9680, 0x6779, 0x9681, 0x677A, 0x9682, - 0x677B, 0x9683, 0x677C, 0xE8CC, 0x677D, 0x9684, 0x677E, 0xCBC9, - 0x677F, 0xB0E5, 0x6780, 0x9685, 0x6781, 0xBCAB, 0x6782, 0x9686, - 0x6783, 0x9687, 0x6784, 0xB9B9, 0x6785, 0x9688, 0x6786, 0x9689, - 0x6787, 0xE8C1, 0x6788, 0x968A, 0x6789, 0xCDF7, 0x678A, 0x968B, - 0x678B, 0xE8CA, 0x678C, 0x968C, 0x678D, 0x968D, 0x678E, 0x968E, - 0x678F, 0x968F, 0x6790, 0xCEF6, 0x6791, 0x9690, 0x6792, 0x9691, - 0x6793, 0x9692, 0x6794, 0x9693, 0x6795, 0xD5ED, 0x6796, 0x9694, - 0x6797, 0xC1D6, 0x6798, 0xE8C4, 0x6799, 0x9695, 0x679A, 0xC3B6, - 0x679B, 0x9696, 0x679C, 0xB9FB, 0x679D, 0xD6A6, 0x679E, 0xE8C8, - 0x679F, 0x9697, 0x67A0, 0x9698, 0x67A1, 0x9699, 0x67A2, 0xCAE0, - 0x67A3, 0xD4E6, 0x67A4, 0x969A, 0x67A5, 0xE8C0, 0x67A6, 0x969B, - 0x67A7, 0xE8C5, 0x67A8, 0xE8C7, 0x67A9, 0x969C, 0x67AA, 0xC7B9, - 0x67AB, 0xB7E3, 0x67AC, 0x969D, 0x67AD, 0xE8C9, 0x67AE, 0x969E, - 0x67AF, 0xBFDD, 0x67B0, 0xE8D2, 0x67B1, 0x969F, 0x67B2, 0x96A0, - 0x67B3, 0xE8D7, 0x67B4, 0x96A1, 0x67B5, 0xE8D5, 0x67B6, 0xBCDC, - 0x67B7, 0xBCCF, 0x67B8, 0xE8DB, 0x67B9, 0x96A2, 0x67BA, 0x96A3, - 0x67BB, 0x96A4, 0x67BC, 0x96A5, 0x67BD, 0x96A6, 0x67BE, 0x96A7, - 0x67BF, 0x96A8, 0x67C0, 0x96A9, 0x67C1, 0xE8DE, 0x67C2, 0x96AA, - 0x67C3, 0xE8DA, 0x67C4, 0xB1FA, 0x67C5, 0x96AB, 0x67C6, 0x96AC, - 0x67C7, 0x96AD, 0x67C8, 0x96AE, 0x67C9, 0x96AF, 0x67CA, 0x96B0, - 0x67CB, 0x96B1, 0x67CC, 0x96B2, 0x67CD, 0x96B3, 0x67CE, 0x96B4, - 0x67CF, 0xB0D8, 0x67D0, 0xC4B3, 0x67D1, 0xB8CC, 0x67D2, 0xC6E2, - 0x67D3, 0xC8BE, 0x67D4, 0xC8E1, 0x67D5, 0x96B5, 0x67D6, 0x96B6, - 0x67D7, 0x96B7, 0x67D8, 0xE8CF, 0x67D9, 0xE8D4, 0x67DA, 0xE8D6, - 0x67DB, 0x96B8, 0x67DC, 0xB9F1, 0x67DD, 0xE8D8, 0x67DE, 0xD7F5, - 0x67DF, 0x96B9, 0x67E0, 0xC4FB, 0x67E1, 0x96BA, 0x67E2, 0xE8DC, - 0x67E3, 0x96BB, 0x67E4, 0x96BC, 0x67E5, 0xB2E9, 0x67E6, 0x96BD, - 0x67E7, 0x96BE, 0x67E8, 0x96BF, 0x67E9, 0xE8D1, 0x67EA, 0x96C0, - 0x67EB, 0x96C1, 0x67EC, 0xBCED, 0x67ED, 0x96C2, 0x67EE, 0x96C3, - 0x67EF, 0xBFC2, 0x67F0, 0xE8CD, 0x67F1, 0xD6F9, 0x67F2, 0x96C4, - 0x67F3, 0xC1F8, 0x67F4, 0xB2F1, 0x67F5, 0x96C5, 0x67F6, 0x96C6, - 0x67F7, 0x96C7, 0x67F8, 0x96C8, 0x67F9, 0x96C9, 0x67FA, 0x96CA, - 0x67FB, 0x96CB, 0x67FC, 0x96CC, 0x67FD, 0xE8DF, 0x67FE, 0x96CD, - 0x67FF, 0xCAC1, 0x6800, 0xE8D9, 0x6801, 0x96CE, 0x6802, 0x96CF, - 0x6803, 0x96D0, 0x6804, 0x96D1, 0x6805, 0xD5A4, 0x6806, 0x96D2, - 0x6807, 0xB1EA, 0x6808, 0xD5BB, 0x6809, 0xE8CE, 0x680A, 0xE8D0, - 0x680B, 0xB6B0, 0x680C, 0xE8D3, 0x680D, 0x96D3, 0x680E, 0xE8DD, - 0x680F, 0xC0B8, 0x6810, 0x96D4, 0x6811, 0xCAF7, 0x6812, 0x96D5, - 0x6813, 0xCBA8, 0x6814, 0x96D6, 0x6815, 0x96D7, 0x6816, 0xC6DC, - 0x6817, 0xC0F5, 0x6818, 0x96D8, 0x6819, 0x96D9, 0x681A, 0x96DA, - 0x681B, 0x96DB, 0x681C, 0x96DC, 0x681D, 0xE8E9, 0x681E, 0x96DD, - 0x681F, 0x96DE, 0x6820, 0x96DF, 0x6821, 0xD0A3, 0x6822, 0x96E0, - 0x6823, 0x96E1, 0x6824, 0x96E2, 0x6825, 0x96E3, 0x6826, 0x96E4, - 0x6827, 0x96E5, 0x6828, 0x96E6, 0x6829, 0xE8F2, 0x682A, 0xD6EA, - 0x682B, 0x96E7, 0x682C, 0x96E8, 0x682D, 0x96E9, 0x682E, 0x96EA, - 0x682F, 0x96EB, 0x6830, 0x96EC, 0x6831, 0x96ED, 0x6832, 0xE8E0, - 0x6833, 0xE8E1, 0x6834, 0x96EE, 0x6835, 0x96EF, 0x6836, 0x96F0, - 0x6837, 0xD1F9, 0x6838, 0xBACB, 0x6839, 0xB8F9, 0x683A, 0x96F1, - 0x683B, 0x96F2, 0x683C, 0xB8F1, 0x683D, 0xD4D4, 0x683E, 0xE8EF, - 0x683F, 0x96F3, 0x6840, 0xE8EE, 0x6841, 0xE8EC, 0x6842, 0xB9F0, - 0x6843, 0xCCD2, 0x6844, 0xE8E6, 0x6845, 0xCEA6, 0x6846, 0xBFF2, - 0x6847, 0x96F4, 0x6848, 0xB0B8, 0x6849, 0xE8F1, 0x684A, 0xE8F0, - 0x684B, 0x96F5, 0x684C, 0xD7C0, 0x684D, 0x96F6, 0x684E, 0xE8E4, - 0x684F, 0x96F7, 0x6850, 0xCDA9, 0x6851, 0xC9A3, 0x6852, 0x96F8, - 0x6853, 0xBBB8, 0x6854, 0xBDDB, 0x6855, 0xE8EA, 0x6856, 0x96F9, - 0x6857, 0x96FA, 0x6858, 0x96FB, 0x6859, 0x96FC, 0x685A, 0x96FD, - 0x685B, 0x96FE, 0x685C, 0x9740, 0x685D, 0x9741, 0x685E, 0x9742, - 0x685F, 0x9743, 0x6860, 0xE8E2, 0x6861, 0xE8E3, 0x6862, 0xE8E5, - 0x6863, 0xB5B5, 0x6864, 0xE8E7, 0x6865, 0xC7C5, 0x6866, 0xE8EB, - 0x6867, 0xE8ED, 0x6868, 0xBDB0, 0x6869, 0xD7AE, 0x686A, 0x9744, - 0x686B, 0xE8F8, 0x686C, 0x9745, 0x686D, 0x9746, 0x686E, 0x9747, - 0x686F, 0x9748, 0x6870, 0x9749, 0x6871, 0x974A, 0x6872, 0x974B, - 0x6873, 0x974C, 0x6874, 0xE8F5, 0x6875, 0x974D, 0x6876, 0xCDB0, - 0x6877, 0xE8F6, 0x6878, 0x974E, 0x6879, 0x974F, 0x687A, 0x9750, - 0x687B, 0x9751, 0x687C, 0x9752, 0x687D, 0x9753, 0x687E, 0x9754, - 0x687F, 0x9755, 0x6880, 0x9756, 0x6881, 0xC1BA, 0x6882, 0x9757, - 0x6883, 0xE8E8, 0x6884, 0x9758, 0x6885, 0xC3B7, 0x6886, 0xB0F0, - 0x6887, 0x9759, 0x6888, 0x975A, 0x6889, 0x975B, 0x688A, 0x975C, - 0x688B, 0x975D, 0x688C, 0x975E, 0x688D, 0x975F, 0x688E, 0x9760, - 0x688F, 0xE8F4, 0x6890, 0x9761, 0x6891, 0x9762, 0x6892, 0x9763, - 0x6893, 0xE8F7, 0x6894, 0x9764, 0x6895, 0x9765, 0x6896, 0x9766, - 0x6897, 0xB9A3, 0x6898, 0x9767, 0x6899, 0x9768, 0x689A, 0x9769, - 0x689B, 0x976A, 0x689C, 0x976B, 0x689D, 0x976C, 0x689E, 0x976D, - 0x689F, 0x976E, 0x68A0, 0x976F, 0x68A1, 0x9770, 0x68A2, 0xC9D2, - 0x68A3, 0x9771, 0x68A4, 0x9772, 0x68A5, 0x9773, 0x68A6, 0xC3CE, - 0x68A7, 0xCEE0, 0x68A8, 0xC0E6, 0x68A9, 0x9774, 0x68AA, 0x9775, - 0x68AB, 0x9776, 0x68AC, 0x9777, 0x68AD, 0xCBF3, 0x68AE, 0x9778, - 0x68AF, 0xCCDD, 0x68B0, 0xD0B5, 0x68B1, 0x9779, 0x68B2, 0x977A, - 0x68B3, 0xCAE1, 0x68B4, 0x977B, 0x68B5, 0xE8F3, 0x68B6, 0x977C, - 0x68B7, 0x977D, 0x68B8, 0x977E, 0x68B9, 0x9780, 0x68BA, 0x9781, - 0x68BB, 0x9782, 0x68BC, 0x9783, 0x68BD, 0x9784, 0x68BE, 0x9785, - 0x68BF, 0x9786, 0x68C0, 0xBCEC, 0x68C1, 0x9787, 0x68C2, 0xE8F9, - 0x68C3, 0x9788, 0x68C4, 0x9789, 0x68C5, 0x978A, 0x68C6, 0x978B, - 0x68C7, 0x978C, 0x68C8, 0x978D, 0x68C9, 0xC3DE, 0x68CA, 0x978E, - 0x68CB, 0xC6E5, 0x68CC, 0x978F, 0x68CD, 0xB9F7, 0x68CE, 0x9790, - 0x68CF, 0x9791, 0x68D0, 0x9792, 0x68D1, 0x9793, 0x68D2, 0xB0F4, - 0x68D3, 0x9794, 0x68D4, 0x9795, 0x68D5, 0xD7D8, 0x68D6, 0x9796, - 0x68D7, 0x9797, 0x68D8, 0xBCAC, 0x68D9, 0x9798, 0x68DA, 0xC5EF, - 0x68DB, 0x9799, 0x68DC, 0x979A, 0x68DD, 0x979B, 0x68DE, 0x979C, - 0x68DF, 0x979D, 0x68E0, 0xCCC4, 0x68E1, 0x979E, 0x68E2, 0x979F, - 0x68E3, 0xE9A6, 0x68E4, 0x97A0, 0x68E5, 0x97A1, 0x68E6, 0x97A2, - 0x68E7, 0x97A3, 0x68E8, 0x97A4, 0x68E9, 0x97A5, 0x68EA, 0x97A6, - 0x68EB, 0x97A7, 0x68EC, 0x97A8, 0x68ED, 0x97A9, 0x68EE, 0xC9AD, - 0x68EF, 0x97AA, 0x68F0, 0xE9A2, 0x68F1, 0xC0E2, 0x68F2, 0x97AB, - 0x68F3, 0x97AC, 0x68F4, 0x97AD, 0x68F5, 0xBFC3, 0x68F6, 0x97AE, - 0x68F7, 0x97AF, 0x68F8, 0x97B0, 0x68F9, 0xE8FE, 0x68FA, 0xB9D7, - 0x68FB, 0x97B1, 0x68FC, 0xE8FB, 0x68FD, 0x97B2, 0x68FE, 0x97B3, - 0x68FF, 0x97B4, 0x6900, 0x97B5, 0x6901, 0xE9A4, 0x6902, 0x97B6, - 0x6903, 0x97B7, 0x6904, 0x97B8, 0x6905, 0xD2CE, 0x6906, 0x97B9, - 0x6907, 0x97BA, 0x6908, 0x97BB, 0x6909, 0x97BC, 0x690A, 0x97BD, - 0x690B, 0xE9A3, 0x690C, 0x97BE, 0x690D, 0xD6B2, 0x690E, 0xD7B5, - 0x690F, 0x97BF, 0x6910, 0xE9A7, 0x6911, 0x97C0, 0x6912, 0xBDB7, - 0x6913, 0x97C1, 0x6914, 0x97C2, 0x6915, 0x97C3, 0x6916, 0x97C4, - 0x6917, 0x97C5, 0x6918, 0x97C6, 0x6919, 0x97C7, 0x691A, 0x97C8, - 0x691B, 0x97C9, 0x691C, 0x97CA, 0x691D, 0x97CB, 0x691E, 0x97CC, - 0x691F, 0xE8FC, 0x6920, 0xE8FD, 0x6921, 0x97CD, 0x6922, 0x97CE, - 0x6923, 0x97CF, 0x6924, 0xE9A1, 0x6925, 0x97D0, 0x6926, 0x97D1, - 0x6927, 0x97D2, 0x6928, 0x97D3, 0x6929, 0x97D4, 0x692A, 0x97D5, - 0x692B, 0x97D6, 0x692C, 0x97D7, 0x692D, 0xCDD6, 0x692E, 0x97D8, - 0x692F, 0x97D9, 0x6930, 0xD2AC, 0x6931, 0x97DA, 0x6932, 0x97DB, - 0x6933, 0x97DC, 0x6934, 0xE9B2, 0x6935, 0x97DD, 0x6936, 0x97DE, - 0x6937, 0x97DF, 0x6938, 0x97E0, 0x6939, 0xE9A9, 0x693A, 0x97E1, - 0x693B, 0x97E2, 0x693C, 0x97E3, 0x693D, 0xB4AA, 0x693E, 0x97E4, - 0x693F, 0xB4BB, 0x6940, 0x97E5, 0x6941, 0x97E6, 0x6942, 0xE9AB, - 0x6943, 0x97E7, 0x6944, 0x97E8, 0x6945, 0x97E9, 0x6946, 0x97EA, - 0x6947, 0x97EB, 0x6948, 0x97EC, 0x6949, 0x97ED, 0x694A, 0x97EE, - 0x694B, 0x97EF, 0x694C, 0x97F0, 0x694D, 0x97F1, 0x694E, 0x97F2, - 0x694F, 0x97F3, 0x6950, 0x97F4, 0x6951, 0x97F5, 0x6952, 0x97F6, - 0x6953, 0x97F7, 0x6954, 0xD0A8, 0x6955, 0x97F8, 0x6956, 0x97F9, - 0x6957, 0xE9A5, 0x6958, 0x97FA, 0x6959, 0x97FB, 0x695A, 0xB3FE, - 0x695B, 0x97FC, 0x695C, 0x97FD, 0x695D, 0xE9AC, 0x695E, 0xC0E3, - 0x695F, 0x97FE, 0x6960, 0xE9AA, 0x6961, 0x9840, 0x6962, 0x9841, - 0x6963, 0xE9B9, 0x6964, 0x9842, 0x6965, 0x9843, 0x6966, 0xE9B8, - 0x6967, 0x9844, 0x6968, 0x9845, 0x6969, 0x9846, 0x696A, 0x9847, - 0x696B, 0xE9AE, 0x696C, 0x9848, 0x696D, 0x9849, 0x696E, 0xE8FA, - 0x696F, 0x984A, 0x6970, 0x984B, 0x6971, 0xE9A8, 0x6972, 0x984C, - 0x6973, 0x984D, 0x6974, 0x984E, 0x6975, 0x984F, 0x6976, 0x9850, - 0x6977, 0xBFAC, 0x6978, 0xE9B1, 0x6979, 0xE9BA, 0x697A, 0x9851, - 0x697B, 0x9852, 0x697C, 0xC2A5, 0x697D, 0x9853, 0x697E, 0x9854, - 0x697F, 0x9855, 0x6980, 0xE9AF, 0x6981, 0x9856, 0x6982, 0xB8C5, - 0x6983, 0x9857, 0x6984, 0xE9AD, 0x6985, 0x9858, 0x6986, 0xD3DC, - 0x6987, 0xE9B4, 0x6988, 0xE9B5, 0x6989, 0xE9B7, 0x698A, 0x9859, - 0x698B, 0x985A, 0x698C, 0x985B, 0x698D, 0xE9C7, 0x698E, 0x985C, - 0x698F, 0x985D, 0x6990, 0x985E, 0x6991, 0x985F, 0x6992, 0x9860, - 0x6993, 0x9861, 0x6994, 0xC0C6, 0x6995, 0xE9C5, 0x6996, 0x9862, - 0x6997, 0x9863, 0x6998, 0xE9B0, 0x6999, 0x9864, 0x699A, 0x9865, - 0x699B, 0xE9BB, 0x699C, 0xB0F1, 0x699D, 0x9866, 0x699E, 0x9867, - 0x699F, 0x9868, 0x69A0, 0x9869, 0x69A1, 0x986A, 0x69A2, 0x986B, - 0x69A3, 0x986C, 0x69A4, 0x986D, 0x69A5, 0x986E, 0x69A6, 0x986F, - 0x69A7, 0xE9BC, 0x69A8, 0xD5A5, 0x69A9, 0x9870, 0x69AA, 0x9871, - 0x69AB, 0xE9BE, 0x69AC, 0x9872, 0x69AD, 0xE9BF, 0x69AE, 0x9873, - 0x69AF, 0x9874, 0x69B0, 0x9875, 0x69B1, 0xE9C1, 0x69B2, 0x9876, - 0x69B3, 0x9877, 0x69B4, 0xC1F1, 0x69B5, 0x9878, 0x69B6, 0x9879, - 0x69B7, 0xC8B6, 0x69B8, 0x987A, 0x69B9, 0x987B, 0x69BA, 0x987C, - 0x69BB, 0xE9BD, 0x69BC, 0x987D, 0x69BD, 0x987E, 0x69BE, 0x9880, - 0x69BF, 0x9881, 0x69C0, 0x9882, 0x69C1, 0xE9C2, 0x69C2, 0x9883, - 0x69C3, 0x9884, 0x69C4, 0x9885, 0x69C5, 0x9886, 0x69C6, 0x9887, - 0x69C7, 0x9888, 0x69C8, 0x9889, 0x69C9, 0x988A, 0x69CA, 0xE9C3, - 0x69CB, 0x988B, 0x69CC, 0xE9B3, 0x69CD, 0x988C, 0x69CE, 0xE9B6, - 0x69CF, 0x988D, 0x69D0, 0xBBB1, 0x69D1, 0x988E, 0x69D2, 0x988F, - 0x69D3, 0x9890, 0x69D4, 0xE9C0, 0x69D5, 0x9891, 0x69D6, 0x9892, - 0x69D7, 0x9893, 0x69D8, 0x9894, 0x69D9, 0x9895, 0x69DA, 0x9896, - 0x69DB, 0xBCF7, 0x69DC, 0x9897, 0x69DD, 0x9898, 0x69DE, 0x9899, - 0x69DF, 0xE9C4, 0x69E0, 0xE9C6, 0x69E1, 0x989A, 0x69E2, 0x989B, - 0x69E3, 0x989C, 0x69E4, 0x989D, 0x69E5, 0x989E, 0x69E6, 0x989F, - 0x69E7, 0x98A0, 0x69E8, 0x98A1, 0x69E9, 0x98A2, 0x69EA, 0x98A3, - 0x69EB, 0x98A4, 0x69EC, 0x98A5, 0x69ED, 0xE9CA, 0x69EE, 0x98A6, - 0x69EF, 0x98A7, 0x69F0, 0x98A8, 0x69F1, 0x98A9, 0x69F2, 0xE9CE, - 0x69F3, 0x98AA, 0x69F4, 0x98AB, 0x69F5, 0x98AC, 0x69F6, 0x98AD, - 0x69F7, 0x98AE, 0x69F8, 0x98AF, 0x69F9, 0x98B0, 0x69FA, 0x98B1, - 0x69FB, 0x98B2, 0x69FC, 0x98B3, 0x69FD, 0xB2DB, 0x69FE, 0x98B4, - 0x69FF, 0xE9C8, 0x6A00, 0x98B5, 0x6A01, 0x98B6, 0x6A02, 0x98B7, - 0x6A03, 0x98B8, 0x6A04, 0x98B9, 0x6A05, 0x98BA, 0x6A06, 0x98BB, - 0x6A07, 0x98BC, 0x6A08, 0x98BD, 0x6A09, 0x98BE, 0x6A0A, 0xB7AE, - 0x6A0B, 0x98BF, 0x6A0C, 0x98C0, 0x6A0D, 0x98C1, 0x6A0E, 0x98C2, - 0x6A0F, 0x98C3, 0x6A10, 0x98C4, 0x6A11, 0x98C5, 0x6A12, 0x98C6, - 0x6A13, 0x98C7, 0x6A14, 0x98C8, 0x6A15, 0x98C9, 0x6A16, 0x98CA, - 0x6A17, 0xE9CB, 0x6A18, 0xE9CC, 0x6A19, 0x98CB, 0x6A1A, 0x98CC, - 0x6A1B, 0x98CD, 0x6A1C, 0x98CE, 0x6A1D, 0x98CF, 0x6A1E, 0x98D0, - 0x6A1F, 0xD5C1, 0x6A20, 0x98D1, 0x6A21, 0xC4A3, 0x6A22, 0x98D2, - 0x6A23, 0x98D3, 0x6A24, 0x98D4, 0x6A25, 0x98D5, 0x6A26, 0x98D6, - 0x6A27, 0x98D7, 0x6A28, 0xE9D8, 0x6A29, 0x98D8, 0x6A2A, 0xBAE1, - 0x6A2B, 0x98D9, 0x6A2C, 0x98DA, 0x6A2D, 0x98DB, 0x6A2E, 0x98DC, - 0x6A2F, 0xE9C9, 0x6A30, 0x98DD, 0x6A31, 0xD3A3, 0x6A32, 0x98DE, - 0x6A33, 0x98DF, 0x6A34, 0x98E0, 0x6A35, 0xE9D4, 0x6A36, 0x98E1, - 0x6A37, 0x98E2, 0x6A38, 0x98E3, 0x6A39, 0x98E4, 0x6A3A, 0x98E5, - 0x6A3B, 0x98E6, 0x6A3C, 0x98E7, 0x6A3D, 0xE9D7, 0x6A3E, 0xE9D0, - 0x6A3F, 0x98E8, 0x6A40, 0x98E9, 0x6A41, 0x98EA, 0x6A42, 0x98EB, - 0x6A43, 0x98EC, 0x6A44, 0xE9CF, 0x6A45, 0x98ED, 0x6A46, 0x98EE, - 0x6A47, 0xC7C1, 0x6A48, 0x98EF, 0x6A49, 0x98F0, 0x6A4A, 0x98F1, - 0x6A4B, 0x98F2, 0x6A4C, 0x98F3, 0x6A4D, 0x98F4, 0x6A4E, 0x98F5, - 0x6A4F, 0x98F6, 0x6A50, 0xE9D2, 0x6A51, 0x98F7, 0x6A52, 0x98F8, - 0x6A53, 0x98F9, 0x6A54, 0x98FA, 0x6A55, 0x98FB, 0x6A56, 0x98FC, - 0x6A57, 0x98FD, 0x6A58, 0xE9D9, 0x6A59, 0xB3C8, 0x6A5A, 0x98FE, - 0x6A5B, 0xE9D3, 0x6A5C, 0x9940, 0x6A5D, 0x9941, 0x6A5E, 0x9942, - 0x6A5F, 0x9943, 0x6A60, 0x9944, 0x6A61, 0xCFF0, 0x6A62, 0x9945, - 0x6A63, 0x9946, 0x6A64, 0x9947, 0x6A65, 0xE9CD, 0x6A66, 0x9948, - 0x6A67, 0x9949, 0x6A68, 0x994A, 0x6A69, 0x994B, 0x6A6A, 0x994C, - 0x6A6B, 0x994D, 0x6A6C, 0x994E, 0x6A6D, 0x994F, 0x6A6E, 0x9950, - 0x6A6F, 0x9951, 0x6A70, 0x9952, 0x6A71, 0xB3F7, 0x6A72, 0x9953, - 0x6A73, 0x9954, 0x6A74, 0x9955, 0x6A75, 0x9956, 0x6A76, 0x9957, - 0x6A77, 0x9958, 0x6A78, 0x9959, 0x6A79, 0xE9D6, 0x6A7A, 0x995A, - 0x6A7B, 0x995B, 0x6A7C, 0xE9DA, 0x6A7D, 0x995C, 0x6A7E, 0x995D, - 0x6A7F, 0x995E, 0x6A80, 0xCCB4, 0x6A81, 0x995F, 0x6A82, 0x9960, - 0x6A83, 0x9961, 0x6A84, 0xCFAD, 0x6A85, 0x9962, 0x6A86, 0x9963, - 0x6A87, 0x9964, 0x6A88, 0x9965, 0x6A89, 0x9966, 0x6A8A, 0x9967, - 0x6A8B, 0x9968, 0x6A8C, 0x9969, 0x6A8D, 0x996A, 0x6A8E, 0xE9D5, - 0x6A8F, 0x996B, 0x6A90, 0xE9DC, 0x6A91, 0xE9DB, 0x6A92, 0x996C, - 0x6A93, 0x996D, 0x6A94, 0x996E, 0x6A95, 0x996F, 0x6A96, 0x9970, - 0x6A97, 0xE9DE, 0x6A98, 0x9971, 0x6A99, 0x9972, 0x6A9A, 0x9973, - 0x6A9B, 0x9974, 0x6A9C, 0x9975, 0x6A9D, 0x9976, 0x6A9E, 0x9977, - 0x6A9F, 0x9978, 0x6AA0, 0xE9D1, 0x6AA1, 0x9979, 0x6AA2, 0x997A, - 0x6AA3, 0x997B, 0x6AA4, 0x997C, 0x6AA5, 0x997D, 0x6AA6, 0x997E, - 0x6AA7, 0x9980, 0x6AA8, 0x9981, 0x6AA9, 0xE9DD, 0x6AAA, 0x9982, - 0x6AAB, 0xE9DF, 0x6AAC, 0xC3CA, 0x6AAD, 0x9983, 0x6AAE, 0x9984, - 0x6AAF, 0x9985, 0x6AB0, 0x9986, 0x6AB1, 0x9987, 0x6AB2, 0x9988, - 0x6AB3, 0x9989, 0x6AB4, 0x998A, 0x6AB5, 0x998B, 0x6AB6, 0x998C, - 0x6AB7, 0x998D, 0x6AB8, 0x998E, 0x6AB9, 0x998F, 0x6ABA, 0x9990, - 0x6ABB, 0x9991, 0x6ABC, 0x9992, 0x6ABD, 0x9993, 0x6ABE, 0x9994, - 0x6ABF, 0x9995, 0x6AC0, 0x9996, 0x6AC1, 0x9997, 0x6AC2, 0x9998, - 0x6AC3, 0x9999, 0x6AC4, 0x999A, 0x6AC5, 0x999B, 0x6AC6, 0x999C, - 0x6AC7, 0x999D, 0x6AC8, 0x999E, 0x6AC9, 0x999F, 0x6ACA, 0x99A0, - 0x6ACB, 0x99A1, 0x6ACC, 0x99A2, 0x6ACD, 0x99A3, 0x6ACE, 0x99A4, - 0x6ACF, 0x99A5, 0x6AD0, 0x99A6, 0x6AD1, 0x99A7, 0x6AD2, 0x99A8, - 0x6AD3, 0x99A9, 0x6AD4, 0x99AA, 0x6AD5, 0x99AB, 0x6AD6, 0x99AC, - 0x6AD7, 0x99AD, 0x6AD8, 0x99AE, 0x6AD9, 0x99AF, 0x6ADA, 0x99B0, - 0x6ADB, 0x99B1, 0x6ADC, 0x99B2, 0x6ADD, 0x99B3, 0x6ADE, 0x99B4, - 0x6ADF, 0x99B5, 0x6AE0, 0x99B6, 0x6AE1, 0x99B7, 0x6AE2, 0x99B8, - 0x6AE3, 0x99B9, 0x6AE4, 0x99BA, 0x6AE5, 0x99BB, 0x6AE6, 0x99BC, - 0x6AE7, 0x99BD, 0x6AE8, 0x99BE, 0x6AE9, 0x99BF, 0x6AEA, 0x99C0, - 0x6AEB, 0x99C1, 0x6AEC, 0x99C2, 0x6AED, 0x99C3, 0x6AEE, 0x99C4, - 0x6AEF, 0x99C5, 0x6AF0, 0x99C6, 0x6AF1, 0x99C7, 0x6AF2, 0x99C8, - 0x6AF3, 0x99C9, 0x6AF4, 0x99CA, 0x6AF5, 0x99CB, 0x6AF6, 0x99CC, - 0x6AF7, 0x99CD, 0x6AF8, 0x99CE, 0x6AF9, 0x99CF, 0x6AFA, 0x99D0, - 0x6AFB, 0x99D1, 0x6AFC, 0x99D2, 0x6AFD, 0x99D3, 0x6AFE, 0x99D4, - 0x6AFF, 0x99D5, 0x6B00, 0x99D6, 0x6B01, 0x99D7, 0x6B02, 0x99D8, - 0x6B03, 0x99D9, 0x6B04, 0x99DA, 0x6B05, 0x99DB, 0x6B06, 0x99DC, - 0x6B07, 0x99DD, 0x6B08, 0x99DE, 0x6B09, 0x99DF, 0x6B0A, 0x99E0, - 0x6B0B, 0x99E1, 0x6B0C, 0x99E2, 0x6B0D, 0x99E3, 0x6B0E, 0x99E4, - 0x6B0F, 0x99E5, 0x6B10, 0x99E6, 0x6B11, 0x99E7, 0x6B12, 0x99E8, - 0x6B13, 0x99E9, 0x6B14, 0x99EA, 0x6B15, 0x99EB, 0x6B16, 0x99EC, - 0x6B17, 0x99ED, 0x6B18, 0x99EE, 0x6B19, 0x99EF, 0x6B1A, 0x99F0, - 0x6B1B, 0x99F1, 0x6B1C, 0x99F2, 0x6B1D, 0x99F3, 0x6B1E, 0x99F4, - 0x6B1F, 0x99F5, 0x6B20, 0xC7B7, 0x6B21, 0xB4CE, 0x6B22, 0xBBB6, - 0x6B23, 0xD0C0, 0x6B24, 0xECA3, 0x6B25, 0x99F6, 0x6B26, 0x99F7, - 0x6B27, 0xC5B7, 0x6B28, 0x99F8, 0x6B29, 0x99F9, 0x6B2A, 0x99FA, - 0x6B2B, 0x99FB, 0x6B2C, 0x99FC, 0x6B2D, 0x99FD, 0x6B2E, 0x99FE, - 0x6B2F, 0x9A40, 0x6B30, 0x9A41, 0x6B31, 0x9A42, 0x6B32, 0xD3FB, - 0x6B33, 0x9A43, 0x6B34, 0x9A44, 0x6B35, 0x9A45, 0x6B36, 0x9A46, - 0x6B37, 0xECA4, 0x6B38, 0x9A47, 0x6B39, 0xECA5, 0x6B3A, 0xC6DB, - 0x6B3B, 0x9A48, 0x6B3C, 0x9A49, 0x6B3D, 0x9A4A, 0x6B3E, 0xBFEE, - 0x6B3F, 0x9A4B, 0x6B40, 0x9A4C, 0x6B41, 0x9A4D, 0x6B42, 0x9A4E, - 0x6B43, 0xECA6, 0x6B44, 0x9A4F, 0x6B45, 0x9A50, 0x6B46, 0xECA7, - 0x6B47, 0xD0AA, 0x6B48, 0x9A51, 0x6B49, 0xC7B8, 0x6B4A, 0x9A52, - 0x6B4B, 0x9A53, 0x6B4C, 0xB8E8, 0x6B4D, 0x9A54, 0x6B4E, 0x9A55, - 0x6B4F, 0x9A56, 0x6B50, 0x9A57, 0x6B51, 0x9A58, 0x6B52, 0x9A59, - 0x6B53, 0x9A5A, 0x6B54, 0x9A5B, 0x6B55, 0x9A5C, 0x6B56, 0x9A5D, - 0x6B57, 0x9A5E, 0x6B58, 0x9A5F, 0x6B59, 0xECA8, 0x6B5A, 0x9A60, - 0x6B5B, 0x9A61, 0x6B5C, 0x9A62, 0x6B5D, 0x9A63, 0x6B5E, 0x9A64, - 0x6B5F, 0x9A65, 0x6B60, 0x9A66, 0x6B61, 0x9A67, 0x6B62, 0xD6B9, - 0x6B63, 0xD5FD, 0x6B64, 0xB4CB, 0x6B65, 0xB2BD, 0x6B66, 0xCEE4, - 0x6B67, 0xC6E7, 0x6B68, 0x9A68, 0x6B69, 0x9A69, 0x6B6A, 0xCDE1, - 0x6B6B, 0x9A6A, 0x6B6C, 0x9A6B, 0x6B6D, 0x9A6C, 0x6B6E, 0x9A6D, - 0x6B6F, 0x9A6E, 0x6B70, 0x9A6F, 0x6B71, 0x9A70, 0x6B72, 0x9A71, - 0x6B73, 0x9A72, 0x6B74, 0x9A73, 0x6B75, 0x9A74, 0x6B76, 0x9A75, - 0x6B77, 0x9A76, 0x6B78, 0x9A77, 0x6B79, 0xB4F5, 0x6B7A, 0x9A78, - 0x6B7B, 0xCBC0, 0x6B7C, 0xBCDF, 0x6B7D, 0x9A79, 0x6B7E, 0x9A7A, - 0x6B7F, 0x9A7B, 0x6B80, 0x9A7C, 0x6B81, 0xE9E2, 0x6B82, 0xE9E3, - 0x6B83, 0xD1EA, 0x6B84, 0xE9E5, 0x6B85, 0x9A7D, 0x6B86, 0xB4F9, - 0x6B87, 0xE9E4, 0x6B88, 0x9A7E, 0x6B89, 0xD1B3, 0x6B8A, 0xCAE2, - 0x6B8B, 0xB2D0, 0x6B8C, 0x9A80, 0x6B8D, 0xE9E8, 0x6B8E, 0x9A81, - 0x6B8F, 0x9A82, 0x6B90, 0x9A83, 0x6B91, 0x9A84, 0x6B92, 0xE9E6, - 0x6B93, 0xE9E7, 0x6B94, 0x9A85, 0x6B95, 0x9A86, 0x6B96, 0xD6B3, - 0x6B97, 0x9A87, 0x6B98, 0x9A88, 0x6B99, 0x9A89, 0x6B9A, 0xE9E9, - 0x6B9B, 0xE9EA, 0x6B9C, 0x9A8A, 0x6B9D, 0x9A8B, 0x6B9E, 0x9A8C, - 0x6B9F, 0x9A8D, 0x6BA0, 0x9A8E, 0x6BA1, 0xE9EB, 0x6BA2, 0x9A8F, - 0x6BA3, 0x9A90, 0x6BA4, 0x9A91, 0x6BA5, 0x9A92, 0x6BA6, 0x9A93, - 0x6BA7, 0x9A94, 0x6BA8, 0x9A95, 0x6BA9, 0x9A96, 0x6BAA, 0xE9EC, - 0x6BAB, 0x9A97, 0x6BAC, 0x9A98, 0x6BAD, 0x9A99, 0x6BAE, 0x9A9A, - 0x6BAF, 0x9A9B, 0x6BB0, 0x9A9C, 0x6BB1, 0x9A9D, 0x6BB2, 0x9A9E, - 0x6BB3, 0xECAF, 0x6BB4, 0xC5B9, 0x6BB5, 0xB6CE, 0x6BB6, 0x9A9F, - 0x6BB7, 0xD2F3, 0x6BB8, 0x9AA0, 0x6BB9, 0x9AA1, 0x6BBA, 0x9AA2, - 0x6BBB, 0x9AA3, 0x6BBC, 0x9AA4, 0x6BBD, 0x9AA5, 0x6BBE, 0x9AA6, - 0x6BBF, 0xB5EE, 0x6BC0, 0x9AA7, 0x6BC1, 0xBBD9, 0x6BC2, 0xECB1, - 0x6BC3, 0x9AA8, 0x6BC4, 0x9AA9, 0x6BC5, 0xD2E3, 0x6BC6, 0x9AAA, - 0x6BC7, 0x9AAB, 0x6BC8, 0x9AAC, 0x6BC9, 0x9AAD, 0x6BCA, 0x9AAE, - 0x6BCB, 0xCEE3, 0x6BCC, 0x9AAF, 0x6BCD, 0xC4B8, 0x6BCE, 0x9AB0, - 0x6BCF, 0xC3BF, 0x6BD0, 0x9AB1, 0x6BD1, 0x9AB2, 0x6BD2, 0xB6BE, - 0x6BD3, 0xD8B9, 0x6BD4, 0xB1C8, 0x6BD5, 0xB1CF, 0x6BD6, 0xB1D1, - 0x6BD7, 0xC5FE, 0x6BD8, 0x9AB3, 0x6BD9, 0xB1D0, 0x6BDA, 0x9AB4, - 0x6BDB, 0xC3AB, 0x6BDC, 0x9AB5, 0x6BDD, 0x9AB6, 0x6BDE, 0x9AB7, - 0x6BDF, 0x9AB8, 0x6BE0, 0x9AB9, 0x6BE1, 0xD5B1, 0x6BE2, 0x9ABA, - 0x6BE3, 0x9ABB, 0x6BE4, 0x9ABC, 0x6BE5, 0x9ABD, 0x6BE6, 0x9ABE, - 0x6BE7, 0x9ABF, 0x6BE8, 0x9AC0, 0x6BE9, 0x9AC1, 0x6BEA, 0xEBA4, - 0x6BEB, 0xBAC1, 0x6BEC, 0x9AC2, 0x6BED, 0x9AC3, 0x6BEE, 0x9AC4, - 0x6BEF, 0xCCBA, 0x6BF0, 0x9AC5, 0x6BF1, 0x9AC6, 0x6BF2, 0x9AC7, - 0x6BF3, 0xEBA5, 0x6BF4, 0x9AC8, 0x6BF5, 0xEBA7, 0x6BF6, 0x9AC9, - 0x6BF7, 0x9ACA, 0x6BF8, 0x9ACB, 0x6BF9, 0xEBA8, 0x6BFA, 0x9ACC, - 0x6BFB, 0x9ACD, 0x6BFC, 0x9ACE, 0x6BFD, 0xEBA6, 0x6BFE, 0x9ACF, - 0x6BFF, 0x9AD0, 0x6C00, 0x9AD1, 0x6C01, 0x9AD2, 0x6C02, 0x9AD3, - 0x6C03, 0x9AD4, 0x6C04, 0x9AD5, 0x6C05, 0xEBA9, 0x6C06, 0xEBAB, - 0x6C07, 0xEBAA, 0x6C08, 0x9AD6, 0x6C09, 0x9AD7, 0x6C0A, 0x9AD8, - 0x6C0B, 0x9AD9, 0x6C0C, 0x9ADA, 0x6C0D, 0xEBAC, 0x6C0E, 0x9ADB, - 0x6C0F, 0xCACF, 0x6C10, 0xD8B5, 0x6C11, 0xC3F1, 0x6C12, 0x9ADC, - 0x6C13, 0xC3A5, 0x6C14, 0xC6F8, 0x6C15, 0xEBAD, 0x6C16, 0xC4CA, - 0x6C17, 0x9ADD, 0x6C18, 0xEBAE, 0x6C19, 0xEBAF, 0x6C1A, 0xEBB0, - 0x6C1B, 0xB7D5, 0x6C1C, 0x9ADE, 0x6C1D, 0x9ADF, 0x6C1E, 0x9AE0, - 0x6C1F, 0xB7FA, 0x6C20, 0x9AE1, 0x6C21, 0xEBB1, 0x6C22, 0xC7E2, - 0x6C23, 0x9AE2, 0x6C24, 0xEBB3, 0x6C25, 0x9AE3, 0x6C26, 0xBAA4, - 0x6C27, 0xD1F5, 0x6C28, 0xB0B1, 0x6C29, 0xEBB2, 0x6C2A, 0xEBB4, - 0x6C2B, 0x9AE4, 0x6C2C, 0x9AE5, 0x6C2D, 0x9AE6, 0x6C2E, 0xB5AA, - 0x6C2F, 0xC2C8, 0x6C30, 0xC7E8, 0x6C31, 0x9AE7, 0x6C32, 0xEBB5, - 0x6C33, 0x9AE8, 0x6C34, 0xCBAE, 0x6C35, 0xE3DF, 0x6C36, 0x9AE9, - 0x6C37, 0x9AEA, 0x6C38, 0xD3C0, 0x6C39, 0x9AEB, 0x6C3A, 0x9AEC, - 0x6C3B, 0x9AED, 0x6C3C, 0x9AEE, 0x6C3D, 0xD9DB, 0x6C3E, 0x9AEF, - 0x6C3F, 0x9AF0, 0x6C40, 0xCDA1, 0x6C41, 0xD6AD, 0x6C42, 0xC7F3, - 0x6C43, 0x9AF1, 0x6C44, 0x9AF2, 0x6C45, 0x9AF3, 0x6C46, 0xD9E0, - 0x6C47, 0xBBE3, 0x6C48, 0x9AF4, 0x6C49, 0xBABA, 0x6C4A, 0xE3E2, - 0x6C4B, 0x9AF5, 0x6C4C, 0x9AF6, 0x6C4D, 0x9AF7, 0x6C4E, 0x9AF8, - 0x6C4F, 0x9AF9, 0x6C50, 0xCFAB, 0x6C51, 0x9AFA, 0x6C52, 0x9AFB, - 0x6C53, 0x9AFC, 0x6C54, 0xE3E0, 0x6C55, 0xC9C7, 0x6C56, 0x9AFD, - 0x6C57, 0xBAB9, 0x6C58, 0x9AFE, 0x6C59, 0x9B40, 0x6C5A, 0x9B41, - 0x6C5B, 0xD1B4, 0x6C5C, 0xE3E1, 0x6C5D, 0xC8EA, 0x6C5E, 0xB9AF, - 0x6C5F, 0xBDAD, 0x6C60, 0xB3D8, 0x6C61, 0xCEDB, 0x6C62, 0x9B42, - 0x6C63, 0x9B43, 0x6C64, 0xCCC0, 0x6C65, 0x9B44, 0x6C66, 0x9B45, - 0x6C67, 0x9B46, 0x6C68, 0xE3E8, 0x6C69, 0xE3E9, 0x6C6A, 0xCDF4, - 0x6C6B, 0x9B47, 0x6C6C, 0x9B48, 0x6C6D, 0x9B49, 0x6C6E, 0x9B4A, - 0x6C6F, 0x9B4B, 0x6C70, 0xCCAD, 0x6C71, 0x9B4C, 0x6C72, 0xBCB3, - 0x6C73, 0x9B4D, 0x6C74, 0xE3EA, 0x6C75, 0x9B4E, 0x6C76, 0xE3EB, - 0x6C77, 0x9B4F, 0x6C78, 0x9B50, 0x6C79, 0xD0DA, 0x6C7A, 0x9B51, - 0x6C7B, 0x9B52, 0x6C7C, 0x9B53, 0x6C7D, 0xC6FB, 0x6C7E, 0xB7DA, - 0x6C7F, 0x9B54, 0x6C80, 0x9B55, 0x6C81, 0xC7DF, 0x6C82, 0xD2CA, - 0x6C83, 0xCED6, 0x6C84, 0x9B56, 0x6C85, 0xE3E4, 0x6C86, 0xE3EC, - 0x6C87, 0x9B57, 0x6C88, 0xC9F2, 0x6C89, 0xB3C1, 0x6C8A, 0x9B58, - 0x6C8B, 0x9B59, 0x6C8C, 0xE3E7, 0x6C8D, 0x9B5A, 0x6C8E, 0x9B5B, - 0x6C8F, 0xC6E3, 0x6C90, 0xE3E5, 0x6C91, 0x9B5C, 0x6C92, 0x9B5D, - 0x6C93, 0xEDB3, 0x6C94, 0xE3E6, 0x6C95, 0x9B5E, 0x6C96, 0x9B5F, - 0x6C97, 0x9B60, 0x6C98, 0x9B61, 0x6C99, 0xC9B3, 0x6C9A, 0x9B62, - 0x6C9B, 0xC5E6, 0x6C9C, 0x9B63, 0x6C9D, 0x9B64, 0x6C9E, 0x9B65, - 0x6C9F, 0xB9B5, 0x6CA0, 0x9B66, 0x6CA1, 0xC3BB, 0x6CA2, 0x9B67, - 0x6CA3, 0xE3E3, 0x6CA4, 0xC5BD, 0x6CA5, 0xC1A4, 0x6CA6, 0xC2D9, - 0x6CA7, 0xB2D7, 0x6CA8, 0x9B68, 0x6CA9, 0xE3ED, 0x6CAA, 0xBBA6, - 0x6CAB, 0xC4AD, 0x6CAC, 0x9B69, 0x6CAD, 0xE3F0, 0x6CAE, 0xBEDA, - 0x6CAF, 0x9B6A, 0x6CB0, 0x9B6B, 0x6CB1, 0xE3FB, 0x6CB2, 0xE3F5, - 0x6CB3, 0xBAD3, 0x6CB4, 0x9B6C, 0x6CB5, 0x9B6D, 0x6CB6, 0x9B6E, - 0x6CB7, 0x9B6F, 0x6CB8, 0xB7D0, 0x6CB9, 0xD3CD, 0x6CBA, 0x9B70, - 0x6CBB, 0xD6CE, 0x6CBC, 0xD5D3, 0x6CBD, 0xB9C1, 0x6CBE, 0xD5B4, - 0x6CBF, 0xD1D8, 0x6CC0, 0x9B71, 0x6CC1, 0x9B72, 0x6CC2, 0x9B73, - 0x6CC3, 0x9B74, 0x6CC4, 0xD0B9, 0x6CC5, 0xC7F6, 0x6CC6, 0x9B75, - 0x6CC7, 0x9B76, 0x6CC8, 0x9B77, 0x6CC9, 0xC8AA, 0x6CCA, 0xB2B4, - 0x6CCB, 0x9B78, 0x6CCC, 0xC3DA, 0x6CCD, 0x9B79, 0x6CCE, 0x9B7A, - 0x6CCF, 0x9B7B, 0x6CD0, 0xE3EE, 0x6CD1, 0x9B7C, 0x6CD2, 0x9B7D, - 0x6CD3, 0xE3FC, 0x6CD4, 0xE3EF, 0x6CD5, 0xB7A8, 0x6CD6, 0xE3F7, - 0x6CD7, 0xE3F4, 0x6CD8, 0x9B7E, 0x6CD9, 0x9B80, 0x6CDA, 0x9B81, - 0x6CDB, 0xB7BA, 0x6CDC, 0x9B82, 0x6CDD, 0x9B83, 0x6CDE, 0xC5A2, - 0x6CDF, 0x9B84, 0x6CE0, 0xE3F6, 0x6CE1, 0xC5DD, 0x6CE2, 0xB2A8, - 0x6CE3, 0xC6FC, 0x6CE4, 0x9B85, 0x6CE5, 0xC4E0, 0x6CE6, 0x9B86, - 0x6CE7, 0x9B87, 0x6CE8, 0xD7A2, 0x6CE9, 0x9B88, 0x6CEA, 0xC0E1, - 0x6CEB, 0xE3F9, 0x6CEC, 0x9B89, 0x6CED, 0x9B8A, 0x6CEE, 0xE3FA, - 0x6CEF, 0xE3FD, 0x6CF0, 0xCCA9, 0x6CF1, 0xE3F3, 0x6CF2, 0x9B8B, - 0x6CF3, 0xD3BE, 0x6CF4, 0x9B8C, 0x6CF5, 0xB1C3, 0x6CF6, 0xEDB4, - 0x6CF7, 0xE3F1, 0x6CF8, 0xE3F2, 0x6CF9, 0x9B8D, 0x6CFA, 0xE3F8, - 0x6CFB, 0xD0BA, 0x6CFC, 0xC6C3, 0x6CFD, 0xD4F3, 0x6CFE, 0xE3FE, - 0x6CFF, 0x9B8E, 0x6D00, 0x9B8F, 0x6D01, 0xBDE0, 0x6D02, 0x9B90, - 0x6D03, 0x9B91, 0x6D04, 0xE4A7, 0x6D05, 0x9B92, 0x6D06, 0x9B93, - 0x6D07, 0xE4A6, 0x6D08, 0x9B94, 0x6D09, 0x9B95, 0x6D0A, 0x9B96, - 0x6D0B, 0xD1F3, 0x6D0C, 0xE4A3, 0x6D0D, 0x9B97, 0x6D0E, 0xE4A9, - 0x6D0F, 0x9B98, 0x6D10, 0x9B99, 0x6D11, 0x9B9A, 0x6D12, 0xC8F7, - 0x6D13, 0x9B9B, 0x6D14, 0x9B9C, 0x6D15, 0x9B9D, 0x6D16, 0x9B9E, - 0x6D17, 0xCFB4, 0x6D18, 0x9B9F, 0x6D19, 0xE4A8, 0x6D1A, 0xE4AE, - 0x6D1B, 0xC2E5, 0x6D1C, 0x9BA0, 0x6D1D, 0x9BA1, 0x6D1E, 0xB6B4, - 0x6D1F, 0x9BA2, 0x6D20, 0x9BA3, 0x6D21, 0x9BA4, 0x6D22, 0x9BA5, - 0x6D23, 0x9BA6, 0x6D24, 0x9BA7, 0x6D25, 0xBDF2, 0x6D26, 0x9BA8, - 0x6D27, 0xE4A2, 0x6D28, 0x9BA9, 0x6D29, 0x9BAA, 0x6D2A, 0xBAE9, - 0x6D2B, 0xE4AA, 0x6D2C, 0x9BAB, 0x6D2D, 0x9BAC, 0x6D2E, 0xE4AC, - 0x6D2F, 0x9BAD, 0x6D30, 0x9BAE, 0x6D31, 0xB6FD, 0x6D32, 0xD6DE, - 0x6D33, 0xE4B2, 0x6D34, 0x9BAF, 0x6D35, 0xE4AD, 0x6D36, 0x9BB0, - 0x6D37, 0x9BB1, 0x6D38, 0x9BB2, 0x6D39, 0xE4A1, 0x6D3A, 0x9BB3, - 0x6D3B, 0xBBEE, 0x6D3C, 0xCDDD, 0x6D3D, 0xC7A2, 0x6D3E, 0xC5C9, - 0x6D3F, 0x9BB4, 0x6D40, 0x9BB5, 0x6D41, 0xC1F7, 0x6D42, 0x9BB6, - 0x6D43, 0xE4A4, 0x6D44, 0x9BB7, 0x6D45, 0xC7B3, 0x6D46, 0xBDAC, - 0x6D47, 0xBDBD, 0x6D48, 0xE4A5, 0x6D49, 0x9BB8, 0x6D4A, 0xD7C7, - 0x6D4B, 0xB2E2, 0x6D4C, 0x9BB9, 0x6D4D, 0xE4AB, 0x6D4E, 0xBCC3, - 0x6D4F, 0xE4AF, 0x6D50, 0x9BBA, 0x6D51, 0xBBEB, 0x6D52, 0xE4B0, - 0x6D53, 0xC5A8, 0x6D54, 0xE4B1, 0x6D55, 0x9BBB, 0x6D56, 0x9BBC, - 0x6D57, 0x9BBD, 0x6D58, 0x9BBE, 0x6D59, 0xD5E3, 0x6D5A, 0xBFA3, - 0x6D5B, 0x9BBF, 0x6D5C, 0xE4BA, 0x6D5D, 0x9BC0, 0x6D5E, 0xE4B7, - 0x6D5F, 0x9BC1, 0x6D60, 0xE4BB, 0x6D61, 0x9BC2, 0x6D62, 0x9BC3, - 0x6D63, 0xE4BD, 0x6D64, 0x9BC4, 0x6D65, 0x9BC5, 0x6D66, 0xC6D6, - 0x6D67, 0x9BC6, 0x6D68, 0x9BC7, 0x6D69, 0xBAC6, 0x6D6A, 0xC0CB, - 0x6D6B, 0x9BC8, 0x6D6C, 0x9BC9, 0x6D6D, 0x9BCA, 0x6D6E, 0xB8A1, - 0x6D6F, 0xE4B4, 0x6D70, 0x9BCB, 0x6D71, 0x9BCC, 0x6D72, 0x9BCD, - 0x6D73, 0x9BCE, 0x6D74, 0xD4A1, 0x6D75, 0x9BCF, 0x6D76, 0x9BD0, - 0x6D77, 0xBAA3, 0x6D78, 0xBDFE, 0x6D79, 0x9BD1, 0x6D7A, 0x9BD2, - 0x6D7B, 0x9BD3, 0x6D7C, 0xE4BC, 0x6D7D, 0x9BD4, 0x6D7E, 0x9BD5, - 0x6D7F, 0x9BD6, 0x6D80, 0x9BD7, 0x6D81, 0x9BD8, 0x6D82, 0xCDBF, - 0x6D83, 0x9BD9, 0x6D84, 0x9BDA, 0x6D85, 0xC4F9, 0x6D86, 0x9BDB, - 0x6D87, 0x9BDC, 0x6D88, 0xCFFB, 0x6D89, 0xC9E6, 0x6D8A, 0x9BDD, - 0x6D8B, 0x9BDE, 0x6D8C, 0xD3BF, 0x6D8D, 0x9BDF, 0x6D8E, 0xCFD1, - 0x6D8F, 0x9BE0, 0x6D90, 0x9BE1, 0x6D91, 0xE4B3, 0x6D92, 0x9BE2, - 0x6D93, 0xE4B8, 0x6D94, 0xE4B9, 0x6D95, 0xCCE9, 0x6D96, 0x9BE3, - 0x6D97, 0x9BE4, 0x6D98, 0x9BE5, 0x6D99, 0x9BE6, 0x6D9A, 0x9BE7, - 0x6D9B, 0xCCCE, 0x6D9C, 0x9BE8, 0x6D9D, 0xC0D4, 0x6D9E, 0xE4B5, - 0x6D9F, 0xC1B0, 0x6DA0, 0xE4B6, 0x6DA1, 0xCED0, 0x6DA2, 0x9BE9, - 0x6DA3, 0xBBC1, 0x6DA4, 0xB5D3, 0x6DA5, 0x9BEA, 0x6DA6, 0xC8F3, - 0x6DA7, 0xBDA7, 0x6DA8, 0xD5C7, 0x6DA9, 0xC9AC, 0x6DAA, 0xB8A2, - 0x6DAB, 0xE4CA, 0x6DAC, 0x9BEB, 0x6DAD, 0x9BEC, 0x6DAE, 0xE4CC, - 0x6DAF, 0xD1C4, 0x6DB0, 0x9BED, 0x6DB1, 0x9BEE, 0x6DB2, 0xD2BA, - 0x6DB3, 0x9BEF, 0x6DB4, 0x9BF0, 0x6DB5, 0xBAAD, 0x6DB6, 0x9BF1, - 0x6DB7, 0x9BF2, 0x6DB8, 0xBAD4, 0x6DB9, 0x9BF3, 0x6DBA, 0x9BF4, - 0x6DBB, 0x9BF5, 0x6DBC, 0x9BF6, 0x6DBD, 0x9BF7, 0x6DBE, 0x9BF8, - 0x6DBF, 0xE4C3, 0x6DC0, 0xB5ED, 0x6DC1, 0x9BF9, 0x6DC2, 0x9BFA, - 0x6DC3, 0x9BFB, 0x6DC4, 0xD7CD, 0x6DC5, 0xE4C0, 0x6DC6, 0xCFFD, - 0x6DC7, 0xE4BF, 0x6DC8, 0x9BFC, 0x6DC9, 0x9BFD, 0x6DCA, 0x9BFE, - 0x6DCB, 0xC1DC, 0x6DCC, 0xCCCA, 0x6DCD, 0x9C40, 0x6DCE, 0x9C41, - 0x6DCF, 0x9C42, 0x6DD0, 0x9C43, 0x6DD1, 0xCAE7, 0x6DD2, 0x9C44, - 0x6DD3, 0x9C45, 0x6DD4, 0x9C46, 0x6DD5, 0x9C47, 0x6DD6, 0xC4D7, - 0x6DD7, 0x9C48, 0x6DD8, 0xCCD4, 0x6DD9, 0xE4C8, 0x6DDA, 0x9C49, - 0x6DDB, 0x9C4A, 0x6DDC, 0x9C4B, 0x6DDD, 0xE4C7, 0x6DDE, 0xE4C1, - 0x6DDF, 0x9C4C, 0x6DE0, 0xE4C4, 0x6DE1, 0xB5AD, 0x6DE2, 0x9C4D, - 0x6DE3, 0x9C4E, 0x6DE4, 0xD3D9, 0x6DE5, 0x9C4F, 0x6DE6, 0xE4C6, - 0x6DE7, 0x9C50, 0x6DE8, 0x9C51, 0x6DE9, 0x9C52, 0x6DEA, 0x9C53, - 0x6DEB, 0xD2F9, 0x6DEC, 0xB4E3, 0x6DED, 0x9C54, 0x6DEE, 0xBBB4, - 0x6DEF, 0x9C55, 0x6DF0, 0x9C56, 0x6DF1, 0xC9EE, 0x6DF2, 0x9C57, - 0x6DF3, 0xB4BE, 0x6DF4, 0x9C58, 0x6DF5, 0x9C59, 0x6DF6, 0x9C5A, - 0x6DF7, 0xBBEC, 0x6DF8, 0x9C5B, 0x6DF9, 0xD1CD, 0x6DFA, 0x9C5C, - 0x6DFB, 0xCCED, 0x6DFC, 0xEDB5, 0x6DFD, 0x9C5D, 0x6DFE, 0x9C5E, - 0x6DFF, 0x9C5F, 0x6E00, 0x9C60, 0x6E01, 0x9C61, 0x6E02, 0x9C62, - 0x6E03, 0x9C63, 0x6E04, 0x9C64, 0x6E05, 0xC7E5, 0x6E06, 0x9C65, - 0x6E07, 0x9C66, 0x6E08, 0x9C67, 0x6E09, 0x9C68, 0x6E0A, 0xD4A8, - 0x6E0B, 0x9C69, 0x6E0C, 0xE4CB, 0x6E0D, 0xD7D5, 0x6E0E, 0xE4C2, - 0x6E0F, 0x9C6A, 0x6E10, 0xBDA5, 0x6E11, 0xE4C5, 0x6E12, 0x9C6B, - 0x6E13, 0x9C6C, 0x6E14, 0xD3E6, 0x6E15, 0x9C6D, 0x6E16, 0xE4C9, - 0x6E17, 0xC9F8, 0x6E18, 0x9C6E, 0x6E19, 0x9C6F, 0x6E1A, 0xE4BE, - 0x6E1B, 0x9C70, 0x6E1C, 0x9C71, 0x6E1D, 0xD3E5, 0x6E1E, 0x9C72, - 0x6E1F, 0x9C73, 0x6E20, 0xC7FE, 0x6E21, 0xB6C9, 0x6E22, 0x9C74, - 0x6E23, 0xD4FC, 0x6E24, 0xB2B3, 0x6E25, 0xE4D7, 0x6E26, 0x9C75, - 0x6E27, 0x9C76, 0x6E28, 0x9C77, 0x6E29, 0xCEC2, 0x6E2A, 0x9C78, - 0x6E2B, 0xE4CD, 0x6E2C, 0x9C79, 0x6E2D, 0xCEBC, 0x6E2E, 0x9C7A, - 0x6E2F, 0xB8DB, 0x6E30, 0x9C7B, 0x6E31, 0x9C7C, 0x6E32, 0xE4D6, - 0x6E33, 0x9C7D, 0x6E34, 0xBFCA, 0x6E35, 0x9C7E, 0x6E36, 0x9C80, - 0x6E37, 0x9C81, 0x6E38, 0xD3CE, 0x6E39, 0x9C82, 0x6E3A, 0xC3EC, - 0x6E3B, 0x9C83, 0x6E3C, 0x9C84, 0x6E3D, 0x9C85, 0x6E3E, 0x9C86, - 0x6E3F, 0x9C87, 0x6E40, 0x9C88, 0x6E41, 0x9C89, 0x6E42, 0x9C8A, - 0x6E43, 0xC5C8, 0x6E44, 0xE4D8, 0x6E45, 0x9C8B, 0x6E46, 0x9C8C, - 0x6E47, 0x9C8D, 0x6E48, 0x9C8E, 0x6E49, 0x9C8F, 0x6E4A, 0x9C90, - 0x6E4B, 0x9C91, 0x6E4C, 0x9C92, 0x6E4D, 0xCDC4, 0x6E4E, 0xE4CF, - 0x6E4F, 0x9C93, 0x6E50, 0x9C94, 0x6E51, 0x9C95, 0x6E52, 0x9C96, - 0x6E53, 0xE4D4, 0x6E54, 0xE4D5, 0x6E55, 0x9C97, 0x6E56, 0xBAFE, - 0x6E57, 0x9C98, 0x6E58, 0xCFE6, 0x6E59, 0x9C99, 0x6E5A, 0x9C9A, - 0x6E5B, 0xD5BF, 0x6E5C, 0x9C9B, 0x6E5D, 0x9C9C, 0x6E5E, 0x9C9D, - 0x6E5F, 0xE4D2, 0x6E60, 0x9C9E, 0x6E61, 0x9C9F, 0x6E62, 0x9CA0, - 0x6E63, 0x9CA1, 0x6E64, 0x9CA2, 0x6E65, 0x9CA3, 0x6E66, 0x9CA4, - 0x6E67, 0x9CA5, 0x6E68, 0x9CA6, 0x6E69, 0x9CA7, 0x6E6A, 0x9CA8, - 0x6E6B, 0xE4D0, 0x6E6C, 0x9CA9, 0x6E6D, 0x9CAA, 0x6E6E, 0xE4CE, - 0x6E6F, 0x9CAB, 0x6E70, 0x9CAC, 0x6E71, 0x9CAD, 0x6E72, 0x9CAE, - 0x6E73, 0x9CAF, 0x6E74, 0x9CB0, 0x6E75, 0x9CB1, 0x6E76, 0x9CB2, - 0x6E77, 0x9CB3, 0x6E78, 0x9CB4, 0x6E79, 0x9CB5, 0x6E7A, 0x9CB6, - 0x6E7B, 0x9CB7, 0x6E7C, 0x9CB8, 0x6E7D, 0x9CB9, 0x6E7E, 0xCDE5, - 0x6E7F, 0xCAAA, 0x6E80, 0x9CBA, 0x6E81, 0x9CBB, 0x6E82, 0x9CBC, - 0x6E83, 0xC0A3, 0x6E84, 0x9CBD, 0x6E85, 0xBDA6, 0x6E86, 0xE4D3, - 0x6E87, 0x9CBE, 0x6E88, 0x9CBF, 0x6E89, 0xB8C8, 0x6E8A, 0x9CC0, - 0x6E8B, 0x9CC1, 0x6E8C, 0x9CC2, 0x6E8D, 0x9CC3, 0x6E8E, 0x9CC4, - 0x6E8F, 0xE4E7, 0x6E90, 0xD4B4, 0x6E91, 0x9CC5, 0x6E92, 0x9CC6, - 0x6E93, 0x9CC7, 0x6E94, 0x9CC8, 0x6E95, 0x9CC9, 0x6E96, 0x9CCA, - 0x6E97, 0x9CCB, 0x6E98, 0xE4DB, 0x6E99, 0x9CCC, 0x6E9A, 0x9CCD, - 0x6E9B, 0x9CCE, 0x6E9C, 0xC1EF, 0x6E9D, 0x9CCF, 0x6E9E, 0x9CD0, - 0x6E9F, 0xE4E9, 0x6EA0, 0x9CD1, 0x6EA1, 0x9CD2, 0x6EA2, 0xD2E7, - 0x6EA3, 0x9CD3, 0x6EA4, 0x9CD4, 0x6EA5, 0xE4DF, 0x6EA6, 0x9CD5, - 0x6EA7, 0xE4E0, 0x6EA8, 0x9CD6, 0x6EA9, 0x9CD7, 0x6EAA, 0xCFAA, - 0x6EAB, 0x9CD8, 0x6EAC, 0x9CD9, 0x6EAD, 0x9CDA, 0x6EAE, 0x9CDB, - 0x6EAF, 0xCBDD, 0x6EB0, 0x9CDC, 0x6EB1, 0xE4DA, 0x6EB2, 0xE4D1, - 0x6EB3, 0x9CDD, 0x6EB4, 0xE4E5, 0x6EB5, 0x9CDE, 0x6EB6, 0xC8DC, - 0x6EB7, 0xE4E3, 0x6EB8, 0x9CDF, 0x6EB9, 0x9CE0, 0x6EBA, 0xC4E7, - 0x6EBB, 0xE4E2, 0x6EBC, 0x9CE1, 0x6EBD, 0xE4E1, 0x6EBE, 0x9CE2, - 0x6EBF, 0x9CE3, 0x6EC0, 0x9CE4, 0x6EC1, 0xB3FC, 0x6EC2, 0xE4E8, - 0x6EC3, 0x9CE5, 0x6EC4, 0x9CE6, 0x6EC5, 0x9CE7, 0x6EC6, 0x9CE8, - 0x6EC7, 0xB5E1, 0x6EC8, 0x9CE9, 0x6EC9, 0x9CEA, 0x6ECA, 0x9CEB, - 0x6ECB, 0xD7CC, 0x6ECC, 0x9CEC, 0x6ECD, 0x9CED, 0x6ECE, 0x9CEE, - 0x6ECF, 0xE4E6, 0x6ED0, 0x9CEF, 0x6ED1, 0xBBAC, 0x6ED2, 0x9CF0, - 0x6ED3, 0xD7D2, 0x6ED4, 0xCCCF, 0x6ED5, 0xEBF8, 0x6ED6, 0x9CF1, - 0x6ED7, 0xE4E4, 0x6ED8, 0x9CF2, 0x6ED9, 0x9CF3, 0x6EDA, 0xB9F6, - 0x6EDB, 0x9CF4, 0x6EDC, 0x9CF5, 0x6EDD, 0x9CF6, 0x6EDE, 0xD6CD, - 0x6EDF, 0xE4D9, 0x6EE0, 0xE4DC, 0x6EE1, 0xC2FA, 0x6EE2, 0xE4DE, - 0x6EE3, 0x9CF7, 0x6EE4, 0xC2CB, 0x6EE5, 0xC0C4, 0x6EE6, 0xC2D0, - 0x6EE7, 0x9CF8, 0x6EE8, 0xB1F5, 0x6EE9, 0xCCB2, 0x6EEA, 0x9CF9, - 0x6EEB, 0x9CFA, 0x6EEC, 0x9CFB, 0x6EED, 0x9CFC, 0x6EEE, 0x9CFD, - 0x6EEF, 0x9CFE, 0x6EF0, 0x9D40, 0x6EF1, 0x9D41, 0x6EF2, 0x9D42, - 0x6EF3, 0x9D43, 0x6EF4, 0xB5CE, 0x6EF5, 0x9D44, 0x6EF6, 0x9D45, - 0x6EF7, 0x9D46, 0x6EF8, 0x9D47, 0x6EF9, 0xE4EF, 0x6EFA, 0x9D48, - 0x6EFB, 0x9D49, 0x6EFC, 0x9D4A, 0x6EFD, 0x9D4B, 0x6EFE, 0x9D4C, - 0x6EFF, 0x9D4D, 0x6F00, 0x9D4E, 0x6F01, 0x9D4F, 0x6F02, 0xC6AF, - 0x6F03, 0x9D50, 0x6F04, 0x9D51, 0x6F05, 0x9D52, 0x6F06, 0xC6E1, - 0x6F07, 0x9D53, 0x6F08, 0x9D54, 0x6F09, 0xE4F5, 0x6F0A, 0x9D55, - 0x6F0B, 0x9D56, 0x6F0C, 0x9D57, 0x6F0D, 0x9D58, 0x6F0E, 0x9D59, - 0x6F0F, 0xC2A9, 0x6F10, 0x9D5A, 0x6F11, 0x9D5B, 0x6F12, 0x9D5C, - 0x6F13, 0xC0EC, 0x6F14, 0xD1DD, 0x6F15, 0xE4EE, 0x6F16, 0x9D5D, - 0x6F17, 0x9D5E, 0x6F18, 0x9D5F, 0x6F19, 0x9D60, 0x6F1A, 0x9D61, - 0x6F1B, 0x9D62, 0x6F1C, 0x9D63, 0x6F1D, 0x9D64, 0x6F1E, 0x9D65, - 0x6F1F, 0x9D66, 0x6F20, 0xC4AE, 0x6F21, 0x9D67, 0x6F22, 0x9D68, - 0x6F23, 0x9D69, 0x6F24, 0xE4ED, 0x6F25, 0x9D6A, 0x6F26, 0x9D6B, - 0x6F27, 0x9D6C, 0x6F28, 0x9D6D, 0x6F29, 0xE4F6, 0x6F2A, 0xE4F4, - 0x6F2B, 0xC2FE, 0x6F2C, 0x9D6E, 0x6F2D, 0xE4DD, 0x6F2E, 0x9D6F, - 0x6F2F, 0xE4F0, 0x6F30, 0x9D70, 0x6F31, 0xCAFE, 0x6F32, 0x9D71, - 0x6F33, 0xD5C4, 0x6F34, 0x9D72, 0x6F35, 0x9D73, 0x6F36, 0xE4F1, - 0x6F37, 0x9D74, 0x6F38, 0x9D75, 0x6F39, 0x9D76, 0x6F3A, 0x9D77, - 0x6F3B, 0x9D78, 0x6F3C, 0x9D79, 0x6F3D, 0x9D7A, 0x6F3E, 0xD1FA, - 0x6F3F, 0x9D7B, 0x6F40, 0x9D7C, 0x6F41, 0x9D7D, 0x6F42, 0x9D7E, - 0x6F43, 0x9D80, 0x6F44, 0x9D81, 0x6F45, 0x9D82, 0x6F46, 0xE4EB, - 0x6F47, 0xE4EC, 0x6F48, 0x9D83, 0x6F49, 0x9D84, 0x6F4A, 0x9D85, - 0x6F4B, 0xE4F2, 0x6F4C, 0x9D86, 0x6F4D, 0xCEAB, 0x6F4E, 0x9D87, - 0x6F4F, 0x9D88, 0x6F50, 0x9D89, 0x6F51, 0x9D8A, 0x6F52, 0x9D8B, - 0x6F53, 0x9D8C, 0x6F54, 0x9D8D, 0x6F55, 0x9D8E, 0x6F56, 0x9D8F, - 0x6F57, 0x9D90, 0x6F58, 0xC5CB, 0x6F59, 0x9D91, 0x6F5A, 0x9D92, - 0x6F5B, 0x9D93, 0x6F5C, 0xC7B1, 0x6F5D, 0x9D94, 0x6F5E, 0xC2BA, - 0x6F5F, 0x9D95, 0x6F60, 0x9D96, 0x6F61, 0x9D97, 0x6F62, 0xE4EA, - 0x6F63, 0x9D98, 0x6F64, 0x9D99, 0x6F65, 0x9D9A, 0x6F66, 0xC1CA, - 0x6F67, 0x9D9B, 0x6F68, 0x9D9C, 0x6F69, 0x9D9D, 0x6F6A, 0x9D9E, - 0x6F6B, 0x9D9F, 0x6F6C, 0x9DA0, 0x6F6D, 0xCCB6, 0x6F6E, 0xB3B1, - 0x6F6F, 0x9DA1, 0x6F70, 0x9DA2, 0x6F71, 0x9DA3, 0x6F72, 0xE4FB, - 0x6F73, 0x9DA4, 0x6F74, 0xE4F3, 0x6F75, 0x9DA5, 0x6F76, 0x9DA6, - 0x6F77, 0x9DA7, 0x6F78, 0xE4FA, 0x6F79, 0x9DA8, 0x6F7A, 0xE4FD, - 0x6F7B, 0x9DA9, 0x6F7C, 0xE4FC, 0x6F7D, 0x9DAA, 0x6F7E, 0x9DAB, - 0x6F7F, 0x9DAC, 0x6F80, 0x9DAD, 0x6F81, 0x9DAE, 0x6F82, 0x9DAF, - 0x6F83, 0x9DB0, 0x6F84, 0xB3CE, 0x6F85, 0x9DB1, 0x6F86, 0x9DB2, - 0x6F87, 0x9DB3, 0x6F88, 0xB3BA, 0x6F89, 0xE4F7, 0x6F8A, 0x9DB4, - 0x6F8B, 0x9DB5, 0x6F8C, 0xE4F9, 0x6F8D, 0xE4F8, 0x6F8E, 0xC5EC, - 0x6F8F, 0x9DB6, 0x6F90, 0x9DB7, 0x6F91, 0x9DB8, 0x6F92, 0x9DB9, - 0x6F93, 0x9DBA, 0x6F94, 0x9DBB, 0x6F95, 0x9DBC, 0x6F96, 0x9DBD, - 0x6F97, 0x9DBE, 0x6F98, 0x9DBF, 0x6F99, 0x9DC0, 0x6F9A, 0x9DC1, - 0x6F9B, 0x9DC2, 0x6F9C, 0xC0BD, 0x6F9D, 0x9DC3, 0x6F9E, 0x9DC4, - 0x6F9F, 0x9DC5, 0x6FA0, 0x9DC6, 0x6FA1, 0xD4E8, 0x6FA2, 0x9DC7, - 0x6FA3, 0x9DC8, 0x6FA4, 0x9DC9, 0x6FA5, 0x9DCA, 0x6FA6, 0x9DCB, - 0x6FA7, 0xE5A2, 0x6FA8, 0x9DCC, 0x6FA9, 0x9DCD, 0x6FAA, 0x9DCE, - 0x6FAB, 0x9DCF, 0x6FAC, 0x9DD0, 0x6FAD, 0x9DD1, 0x6FAE, 0x9DD2, - 0x6FAF, 0x9DD3, 0x6FB0, 0x9DD4, 0x6FB1, 0x9DD5, 0x6FB2, 0x9DD6, - 0x6FB3, 0xB0C4, 0x6FB4, 0x9DD7, 0x6FB5, 0x9DD8, 0x6FB6, 0xE5A4, - 0x6FB7, 0x9DD9, 0x6FB8, 0x9DDA, 0x6FB9, 0xE5A3, 0x6FBA, 0x9DDB, - 0x6FBB, 0x9DDC, 0x6FBC, 0x9DDD, 0x6FBD, 0x9DDE, 0x6FBE, 0x9DDF, - 0x6FBF, 0x9DE0, 0x6FC0, 0xBCA4, 0x6FC1, 0x9DE1, 0x6FC2, 0xE5A5, - 0x6FC3, 0x9DE2, 0x6FC4, 0x9DE3, 0x6FC5, 0x9DE4, 0x6FC6, 0x9DE5, - 0x6FC7, 0x9DE6, 0x6FC8, 0x9DE7, 0x6FC9, 0xE5A1, 0x6FCA, 0x9DE8, - 0x6FCB, 0x9DE9, 0x6FCC, 0x9DEA, 0x6FCD, 0x9DEB, 0x6FCE, 0x9DEC, - 0x6FCF, 0x9DED, 0x6FD0, 0x9DEE, 0x6FD1, 0xE4FE, 0x6FD2, 0xB1F4, - 0x6FD3, 0x9DEF, 0x6FD4, 0x9DF0, 0x6FD5, 0x9DF1, 0x6FD6, 0x9DF2, - 0x6FD7, 0x9DF3, 0x6FD8, 0x9DF4, 0x6FD9, 0x9DF5, 0x6FDA, 0x9DF6, - 0x6FDB, 0x9DF7, 0x6FDC, 0x9DF8, 0x6FDD, 0x9DF9, 0x6FDE, 0xE5A8, - 0x6FDF, 0x9DFA, 0x6FE0, 0xE5A9, 0x6FE1, 0xE5A6, 0x6FE2, 0x9DFB, - 0x6FE3, 0x9DFC, 0x6FE4, 0x9DFD, 0x6FE5, 0x9DFE, 0x6FE6, 0x9E40, - 0x6FE7, 0x9E41, 0x6FE8, 0x9E42, 0x6FE9, 0x9E43, 0x6FEA, 0x9E44, - 0x6FEB, 0x9E45, 0x6FEC, 0x9E46, 0x6FED, 0x9E47, 0x6FEE, 0xE5A7, - 0x6FEF, 0xE5AA, 0x6FF0, 0x9E48, 0x6FF1, 0x9E49, 0x6FF2, 0x9E4A, - 0x6FF3, 0x9E4B, 0x6FF4, 0x9E4C, 0x6FF5, 0x9E4D, 0x6FF6, 0x9E4E, - 0x6FF7, 0x9E4F, 0x6FF8, 0x9E50, 0x6FF9, 0x9E51, 0x6FFA, 0x9E52, - 0x6FFB, 0x9E53, 0x6FFC, 0x9E54, 0x6FFD, 0x9E55, 0x6FFE, 0x9E56, - 0x6FFF, 0x9E57, 0x7000, 0x9E58, 0x7001, 0x9E59, 0x7002, 0x9E5A, - 0x7003, 0x9E5B, 0x7004, 0x9E5C, 0x7005, 0x9E5D, 0x7006, 0x9E5E, - 0x7007, 0x9E5F, 0x7008, 0x9E60, 0x7009, 0x9E61, 0x700A, 0x9E62, - 0x700B, 0x9E63, 0x700C, 0x9E64, 0x700D, 0x9E65, 0x700E, 0x9E66, - 0x700F, 0x9E67, 0x7010, 0x9E68, 0x7011, 0xC6D9, 0x7012, 0x9E69, - 0x7013, 0x9E6A, 0x7014, 0x9E6B, 0x7015, 0x9E6C, 0x7016, 0x9E6D, - 0x7017, 0x9E6E, 0x7018, 0x9E6F, 0x7019, 0x9E70, 0x701A, 0xE5AB, - 0x701B, 0xE5AD, 0x701C, 0x9E71, 0x701D, 0x9E72, 0x701E, 0x9E73, - 0x701F, 0x9E74, 0x7020, 0x9E75, 0x7021, 0x9E76, 0x7022, 0x9E77, - 0x7023, 0xE5AC, 0x7024, 0x9E78, 0x7025, 0x9E79, 0x7026, 0x9E7A, - 0x7027, 0x9E7B, 0x7028, 0x9E7C, 0x7029, 0x9E7D, 0x702A, 0x9E7E, - 0x702B, 0x9E80, 0x702C, 0x9E81, 0x702D, 0x9E82, 0x702E, 0x9E83, - 0x702F, 0x9E84, 0x7030, 0x9E85, 0x7031, 0x9E86, 0x7032, 0x9E87, - 0x7033, 0x9E88, 0x7034, 0x9E89, 0x7035, 0xE5AF, 0x7036, 0x9E8A, - 0x7037, 0x9E8B, 0x7038, 0x9E8C, 0x7039, 0xE5AE, 0x703A, 0x9E8D, - 0x703B, 0x9E8E, 0x703C, 0x9E8F, 0x703D, 0x9E90, 0x703E, 0x9E91, - 0x703F, 0x9E92, 0x7040, 0x9E93, 0x7041, 0x9E94, 0x7042, 0x9E95, - 0x7043, 0x9E96, 0x7044, 0x9E97, 0x7045, 0x9E98, 0x7046, 0x9E99, - 0x7047, 0x9E9A, 0x7048, 0x9E9B, 0x7049, 0x9E9C, 0x704A, 0x9E9D, - 0x704B, 0x9E9E, 0x704C, 0xB9E0, 0x704D, 0x9E9F, 0x704E, 0x9EA0, - 0x704F, 0xE5B0, 0x7050, 0x9EA1, 0x7051, 0x9EA2, 0x7052, 0x9EA3, - 0x7053, 0x9EA4, 0x7054, 0x9EA5, 0x7055, 0x9EA6, 0x7056, 0x9EA7, - 0x7057, 0x9EA8, 0x7058, 0x9EA9, 0x7059, 0x9EAA, 0x705A, 0x9EAB, - 0x705B, 0x9EAC, 0x705C, 0x9EAD, 0x705D, 0x9EAE, 0x705E, 0xE5B1, - 0x705F, 0x9EAF, 0x7060, 0x9EB0, 0x7061, 0x9EB1, 0x7062, 0x9EB2, - 0x7063, 0x9EB3, 0x7064, 0x9EB4, 0x7065, 0x9EB5, 0x7066, 0x9EB6, - 0x7067, 0x9EB7, 0x7068, 0x9EB8, 0x7069, 0x9EB9, 0x706A, 0x9EBA, - 0x706B, 0xBBF0, 0x706C, 0xECE1, 0x706D, 0xC3F0, 0x706E, 0x9EBB, - 0x706F, 0xB5C6, 0x7070, 0xBBD2, 0x7071, 0x9EBC, 0x7072, 0x9EBD, - 0x7073, 0x9EBE, 0x7074, 0x9EBF, 0x7075, 0xC1E9, 0x7076, 0xD4EE, - 0x7077, 0x9EC0, 0x7078, 0xBEC4, 0x7079, 0x9EC1, 0x707A, 0x9EC2, - 0x707B, 0x9EC3, 0x707C, 0xD7C6, 0x707D, 0x9EC4, 0x707E, 0xD4D6, - 0x707F, 0xB2D3, 0x7080, 0xECBE, 0x7081, 0x9EC5, 0x7082, 0x9EC6, - 0x7083, 0x9EC7, 0x7084, 0x9EC8, 0x7085, 0xEAC1, 0x7086, 0x9EC9, - 0x7087, 0x9ECA, 0x7088, 0x9ECB, 0x7089, 0xC2AF, 0x708A, 0xB4B6, - 0x708B, 0x9ECC, 0x708C, 0x9ECD, 0x708D, 0x9ECE, 0x708E, 0xD1D7, - 0x708F, 0x9ECF, 0x7090, 0x9ED0, 0x7091, 0x9ED1, 0x7092, 0xB3B4, - 0x7093, 0x9ED2, 0x7094, 0xC8B2, 0x7095, 0xBFBB, 0x7096, 0xECC0, - 0x7097, 0x9ED3, 0x7098, 0x9ED4, 0x7099, 0xD6CB, 0x709A, 0x9ED5, - 0x709B, 0x9ED6, 0x709C, 0xECBF, 0x709D, 0xECC1, 0x709E, 0x9ED7, - 0x709F, 0x9ED8, 0x70A0, 0x9ED9, 0x70A1, 0x9EDA, 0x70A2, 0x9EDB, - 0x70A3, 0x9EDC, 0x70A4, 0x9EDD, 0x70A5, 0x9EDE, 0x70A6, 0x9EDF, - 0x70A7, 0x9EE0, 0x70A8, 0x9EE1, 0x70A9, 0x9EE2, 0x70AA, 0x9EE3, - 0x70AB, 0xECC5, 0x70AC, 0xBEE6, 0x70AD, 0xCCBF, 0x70AE, 0xC5DA, - 0x70AF, 0xBEBC, 0x70B0, 0x9EE4, 0x70B1, 0xECC6, 0x70B2, 0x9EE5, - 0x70B3, 0xB1FE, 0x70B4, 0x9EE6, 0x70B5, 0x9EE7, 0x70B6, 0x9EE8, - 0x70B7, 0xECC4, 0x70B8, 0xD5A8, 0x70B9, 0xB5E3, 0x70BA, 0x9EE9, - 0x70BB, 0xECC2, 0x70BC, 0xC1B6, 0x70BD, 0xB3E3, 0x70BE, 0x9EEA, - 0x70BF, 0x9EEB, 0x70C0, 0xECC3, 0x70C1, 0xCBB8, 0x70C2, 0xC0C3, - 0x70C3, 0xCCFE, 0x70C4, 0x9EEC, 0x70C5, 0x9EED, 0x70C6, 0x9EEE, - 0x70C7, 0x9EEF, 0x70C8, 0xC1D2, 0x70C9, 0x9EF0, 0x70CA, 0xECC8, - 0x70CB, 0x9EF1, 0x70CC, 0x9EF2, 0x70CD, 0x9EF3, 0x70CE, 0x9EF4, - 0x70CF, 0x9EF5, 0x70D0, 0x9EF6, 0x70D1, 0x9EF7, 0x70D2, 0x9EF8, - 0x70D3, 0x9EF9, 0x70D4, 0x9EFA, 0x70D5, 0x9EFB, 0x70D6, 0x9EFC, - 0x70D7, 0x9EFD, 0x70D8, 0xBAE6, 0x70D9, 0xC0D3, 0x70DA, 0x9EFE, - 0x70DB, 0xD6F2, 0x70DC, 0x9F40, 0x70DD, 0x9F41, 0x70DE, 0x9F42, - 0x70DF, 0xD1CC, 0x70E0, 0x9F43, 0x70E1, 0x9F44, 0x70E2, 0x9F45, - 0x70E3, 0x9F46, 0x70E4, 0xBFBE, 0x70E5, 0x9F47, 0x70E6, 0xB7B3, - 0x70E7, 0xC9D5, 0x70E8, 0xECC7, 0x70E9, 0xBBE2, 0x70EA, 0x9F48, - 0x70EB, 0xCCCC, 0x70EC, 0xBDFD, 0x70ED, 0xC8C8, 0x70EE, 0x9F49, - 0x70EF, 0xCFA9, 0x70F0, 0x9F4A, 0x70F1, 0x9F4B, 0x70F2, 0x9F4C, - 0x70F3, 0x9F4D, 0x70F4, 0x9F4E, 0x70F5, 0x9F4F, 0x70F6, 0x9F50, - 0x70F7, 0xCDE9, 0x70F8, 0x9F51, 0x70F9, 0xC5EB, 0x70FA, 0x9F52, - 0x70FB, 0x9F53, 0x70FC, 0x9F54, 0x70FD, 0xB7E9, 0x70FE, 0x9F55, - 0x70FF, 0x9F56, 0x7100, 0x9F57, 0x7101, 0x9F58, 0x7102, 0x9F59, - 0x7103, 0x9F5A, 0x7104, 0x9F5B, 0x7105, 0x9F5C, 0x7106, 0x9F5D, - 0x7107, 0x9F5E, 0x7108, 0x9F5F, 0x7109, 0xD1C9, 0x710A, 0xBAB8, - 0x710B, 0x9F60, 0x710C, 0x9F61, 0x710D, 0x9F62, 0x710E, 0x9F63, - 0x710F, 0x9F64, 0x7110, 0xECC9, 0x7111, 0x9F65, 0x7112, 0x9F66, - 0x7113, 0xECCA, 0x7114, 0x9F67, 0x7115, 0xBBC0, 0x7116, 0xECCB, - 0x7117, 0x9F68, 0x7118, 0xECE2, 0x7119, 0xB1BA, 0x711A, 0xB7D9, - 0x711B, 0x9F69, 0x711C, 0x9F6A, 0x711D, 0x9F6B, 0x711E, 0x9F6C, - 0x711F, 0x9F6D, 0x7120, 0x9F6E, 0x7121, 0x9F6F, 0x7122, 0x9F70, - 0x7123, 0x9F71, 0x7124, 0x9F72, 0x7125, 0x9F73, 0x7126, 0xBDB9, - 0x7127, 0x9F74, 0x7128, 0x9F75, 0x7129, 0x9F76, 0x712A, 0x9F77, - 0x712B, 0x9F78, 0x712C, 0x9F79, 0x712D, 0x9F7A, 0x712E, 0x9F7B, - 0x712F, 0xECCC, 0x7130, 0xD1E6, 0x7131, 0xECCD, 0x7132, 0x9F7C, - 0x7133, 0x9F7D, 0x7134, 0x9F7E, 0x7135, 0x9F80, 0x7136, 0xC8BB, - 0x7137, 0x9F81, 0x7138, 0x9F82, 0x7139, 0x9F83, 0x713A, 0x9F84, - 0x713B, 0x9F85, 0x713C, 0x9F86, 0x713D, 0x9F87, 0x713E, 0x9F88, - 0x713F, 0x9F89, 0x7140, 0x9F8A, 0x7141, 0x9F8B, 0x7142, 0x9F8C, - 0x7143, 0x9F8D, 0x7144, 0x9F8E, 0x7145, 0xECD1, 0x7146, 0x9F8F, - 0x7147, 0x9F90, 0x7148, 0x9F91, 0x7149, 0x9F92, 0x714A, 0xECD3, - 0x714B, 0x9F93, 0x714C, 0xBBCD, 0x714D, 0x9F94, 0x714E, 0xBCE5, - 0x714F, 0x9F95, 0x7150, 0x9F96, 0x7151, 0x9F97, 0x7152, 0x9F98, - 0x7153, 0x9F99, 0x7154, 0x9F9A, 0x7155, 0x9F9B, 0x7156, 0x9F9C, - 0x7157, 0x9F9D, 0x7158, 0x9F9E, 0x7159, 0x9F9F, 0x715A, 0x9FA0, - 0x715B, 0x9FA1, 0x715C, 0xECCF, 0x715D, 0x9FA2, 0x715E, 0xC9B7, - 0x715F, 0x9FA3, 0x7160, 0x9FA4, 0x7161, 0x9FA5, 0x7162, 0x9FA6, - 0x7163, 0x9FA7, 0x7164, 0xC3BA, 0x7165, 0x9FA8, 0x7166, 0xECE3, - 0x7167, 0xD5D5, 0x7168, 0xECD0, 0x7169, 0x9FA9, 0x716A, 0x9FAA, - 0x716B, 0x9FAB, 0x716C, 0x9FAC, 0x716D, 0x9FAD, 0x716E, 0xD6F3, - 0x716F, 0x9FAE, 0x7170, 0x9FAF, 0x7171, 0x9FB0, 0x7172, 0xECD2, - 0x7173, 0xECCE, 0x7174, 0x9FB1, 0x7175, 0x9FB2, 0x7176, 0x9FB3, - 0x7177, 0x9FB4, 0x7178, 0xECD4, 0x7179, 0x9FB5, 0x717A, 0xECD5, - 0x717B, 0x9FB6, 0x717C, 0x9FB7, 0x717D, 0xC9BF, 0x717E, 0x9FB8, - 0x717F, 0x9FB9, 0x7180, 0x9FBA, 0x7181, 0x9FBB, 0x7182, 0x9FBC, - 0x7183, 0x9FBD, 0x7184, 0xCFA8, 0x7185, 0x9FBE, 0x7186, 0x9FBF, - 0x7187, 0x9FC0, 0x7188, 0x9FC1, 0x7189, 0x9FC2, 0x718A, 0xD0DC, - 0x718B, 0x9FC3, 0x718C, 0x9FC4, 0x718D, 0x9FC5, 0x718E, 0x9FC6, - 0x718F, 0xD1AC, 0x7190, 0x9FC7, 0x7191, 0x9FC8, 0x7192, 0x9FC9, - 0x7193, 0x9FCA, 0x7194, 0xC8DB, 0x7195, 0x9FCB, 0x7196, 0x9FCC, - 0x7197, 0x9FCD, 0x7198, 0xECD6, 0x7199, 0xCEF5, 0x719A, 0x9FCE, - 0x719B, 0x9FCF, 0x719C, 0x9FD0, 0x719D, 0x9FD1, 0x719E, 0x9FD2, - 0x719F, 0xCAEC, 0x71A0, 0xECDA, 0x71A1, 0x9FD3, 0x71A2, 0x9FD4, - 0x71A3, 0x9FD5, 0x71A4, 0x9FD6, 0x71A5, 0x9FD7, 0x71A6, 0x9FD8, - 0x71A7, 0x9FD9, 0x71A8, 0xECD9, 0x71A9, 0x9FDA, 0x71AA, 0x9FDB, - 0x71AB, 0x9FDC, 0x71AC, 0xB0BE, 0x71AD, 0x9FDD, 0x71AE, 0x9FDE, - 0x71AF, 0x9FDF, 0x71B0, 0x9FE0, 0x71B1, 0x9FE1, 0x71B2, 0x9FE2, - 0x71B3, 0xECD7, 0x71B4, 0x9FE3, 0x71B5, 0xECD8, 0x71B6, 0x9FE4, - 0x71B7, 0x9FE5, 0x71B8, 0x9FE6, 0x71B9, 0xECE4, 0x71BA, 0x9FE7, - 0x71BB, 0x9FE8, 0x71BC, 0x9FE9, 0x71BD, 0x9FEA, 0x71BE, 0x9FEB, - 0x71BF, 0x9FEC, 0x71C0, 0x9FED, 0x71C1, 0x9FEE, 0x71C2, 0x9FEF, - 0x71C3, 0xC8BC, 0x71C4, 0x9FF0, 0x71C5, 0x9FF1, 0x71C6, 0x9FF2, - 0x71C7, 0x9FF3, 0x71C8, 0x9FF4, 0x71C9, 0x9FF5, 0x71CA, 0x9FF6, - 0x71CB, 0x9FF7, 0x71CC, 0x9FF8, 0x71CD, 0x9FF9, 0x71CE, 0xC1C7, - 0x71CF, 0x9FFA, 0x71D0, 0x9FFB, 0x71D1, 0x9FFC, 0x71D2, 0x9FFD, - 0x71D3, 0x9FFE, 0x71D4, 0xECDC, 0x71D5, 0xD1E0, 0x71D6, 0xA040, - 0x71D7, 0xA041, 0x71D8, 0xA042, 0x71D9, 0xA043, 0x71DA, 0xA044, - 0x71DB, 0xA045, 0x71DC, 0xA046, 0x71DD, 0xA047, 0x71DE, 0xA048, - 0x71DF, 0xA049, 0x71E0, 0xECDB, 0x71E1, 0xA04A, 0x71E2, 0xA04B, - 0x71E3, 0xA04C, 0x71E4, 0xA04D, 0x71E5, 0xD4EF, 0x71E6, 0xA04E, - 0x71E7, 0xECDD, 0x71E8, 0xA04F, 0x71E9, 0xA050, 0x71EA, 0xA051, - 0x71EB, 0xA052, 0x71EC, 0xA053, 0x71ED, 0xA054, 0x71EE, 0xDBC6, - 0x71EF, 0xA055, 0x71F0, 0xA056, 0x71F1, 0xA057, 0x71F2, 0xA058, - 0x71F3, 0xA059, 0x71F4, 0xA05A, 0x71F5, 0xA05B, 0x71F6, 0xA05C, - 0x71F7, 0xA05D, 0x71F8, 0xA05E, 0x71F9, 0xECDE, 0x71FA, 0xA05F, - 0x71FB, 0xA060, 0x71FC, 0xA061, 0x71FD, 0xA062, 0x71FE, 0xA063, - 0x71FF, 0xA064, 0x7200, 0xA065, 0x7201, 0xA066, 0x7202, 0xA067, - 0x7203, 0xA068, 0x7204, 0xA069, 0x7205, 0xA06A, 0x7206, 0xB1AC, - 0x7207, 0xA06B, 0x7208, 0xA06C, 0x7209, 0xA06D, 0x720A, 0xA06E, - 0x720B, 0xA06F, 0x720C, 0xA070, 0x720D, 0xA071, 0x720E, 0xA072, - 0x720F, 0xA073, 0x7210, 0xA074, 0x7211, 0xA075, 0x7212, 0xA076, - 0x7213, 0xA077, 0x7214, 0xA078, 0x7215, 0xA079, 0x7216, 0xA07A, - 0x7217, 0xA07B, 0x7218, 0xA07C, 0x7219, 0xA07D, 0x721A, 0xA07E, - 0x721B, 0xA080, 0x721C, 0xA081, 0x721D, 0xECDF, 0x721E, 0xA082, - 0x721F, 0xA083, 0x7220, 0xA084, 0x7221, 0xA085, 0x7222, 0xA086, - 0x7223, 0xA087, 0x7224, 0xA088, 0x7225, 0xA089, 0x7226, 0xA08A, - 0x7227, 0xA08B, 0x7228, 0xECE0, 0x7229, 0xA08C, 0x722A, 0xD7A6, - 0x722B, 0xA08D, 0x722C, 0xC5C0, 0x722D, 0xA08E, 0x722E, 0xA08F, - 0x722F, 0xA090, 0x7230, 0xEBBC, 0x7231, 0xB0AE, 0x7232, 0xA091, - 0x7233, 0xA092, 0x7234, 0xA093, 0x7235, 0xBEF4, 0x7236, 0xB8B8, - 0x7237, 0xD2AF, 0x7238, 0xB0D6, 0x7239, 0xB5F9, 0x723A, 0xA094, - 0x723B, 0xD8B3, 0x723C, 0xA095, 0x723D, 0xCBAC, 0x723E, 0xA096, - 0x723F, 0xE3DD, 0x7240, 0xA097, 0x7241, 0xA098, 0x7242, 0xA099, - 0x7243, 0xA09A, 0x7244, 0xA09B, 0x7245, 0xA09C, 0x7246, 0xA09D, - 0x7247, 0xC6AC, 0x7248, 0xB0E6, 0x7249, 0xA09E, 0x724A, 0xA09F, - 0x724B, 0xA0A0, 0x724C, 0xC5C6, 0x724D, 0xEBB9, 0x724E, 0xA0A1, - 0x724F, 0xA0A2, 0x7250, 0xA0A3, 0x7251, 0xA0A4, 0x7252, 0xEBBA, - 0x7253, 0xA0A5, 0x7254, 0xA0A6, 0x7255, 0xA0A7, 0x7256, 0xEBBB, - 0x7257, 0xA0A8, 0x7258, 0xA0A9, 0x7259, 0xD1C0, 0x725A, 0xA0AA, - 0x725B, 0xC5A3, 0x725C, 0xA0AB, 0x725D, 0xEAF2, 0x725E, 0xA0AC, - 0x725F, 0xC4B2, 0x7260, 0xA0AD, 0x7261, 0xC4B5, 0x7262, 0xC0CE, - 0x7263, 0xA0AE, 0x7264, 0xA0AF, 0x7265, 0xA0B0, 0x7266, 0xEAF3, - 0x7267, 0xC4C1, 0x7268, 0xA0B1, 0x7269, 0xCEEF, 0x726A, 0xA0B2, - 0x726B, 0xA0B3, 0x726C, 0xA0B4, 0x726D, 0xA0B5, 0x726E, 0xEAF0, - 0x726F, 0xEAF4, 0x7270, 0xA0B6, 0x7271, 0xA0B7, 0x7272, 0xC9FC, - 0x7273, 0xA0B8, 0x7274, 0xA0B9, 0x7275, 0xC7A3, 0x7276, 0xA0BA, - 0x7277, 0xA0BB, 0x7278, 0xA0BC, 0x7279, 0xCCD8, 0x727A, 0xCEFE, - 0x727B, 0xA0BD, 0x727C, 0xA0BE, 0x727D, 0xA0BF, 0x727E, 0xEAF5, - 0x727F, 0xEAF6, 0x7280, 0xCFAC, 0x7281, 0xC0E7, 0x7282, 0xA0C0, - 0x7283, 0xA0C1, 0x7284, 0xEAF7, 0x7285, 0xA0C2, 0x7286, 0xA0C3, - 0x7287, 0xA0C4, 0x7288, 0xA0C5, 0x7289, 0xA0C6, 0x728A, 0xB6BF, - 0x728B, 0xEAF8, 0x728C, 0xA0C7, 0x728D, 0xEAF9, 0x728E, 0xA0C8, - 0x728F, 0xEAFA, 0x7290, 0xA0C9, 0x7291, 0xA0CA, 0x7292, 0xEAFB, - 0x7293, 0xA0CB, 0x7294, 0xA0CC, 0x7295, 0xA0CD, 0x7296, 0xA0CE, - 0x7297, 0xA0CF, 0x7298, 0xA0D0, 0x7299, 0xA0D1, 0x729A, 0xA0D2, - 0x729B, 0xA0D3, 0x729C, 0xA0D4, 0x729D, 0xA0D5, 0x729E, 0xA0D6, - 0x729F, 0xEAF1, 0x72A0, 0xA0D7, 0x72A1, 0xA0D8, 0x72A2, 0xA0D9, - 0x72A3, 0xA0DA, 0x72A4, 0xA0DB, 0x72A5, 0xA0DC, 0x72A6, 0xA0DD, - 0x72A7, 0xA0DE, 0x72A8, 0xA0DF, 0x72A9, 0xA0E0, 0x72AA, 0xA0E1, - 0x72AB, 0xA0E2, 0x72AC, 0xC8AE, 0x72AD, 0xE1EB, 0x72AE, 0xA0E3, - 0x72AF, 0xB7B8, 0x72B0, 0xE1EC, 0x72B1, 0xA0E4, 0x72B2, 0xA0E5, - 0x72B3, 0xA0E6, 0x72B4, 0xE1ED, 0x72B5, 0xA0E7, 0x72B6, 0xD7B4, - 0x72B7, 0xE1EE, 0x72B8, 0xE1EF, 0x72B9, 0xD3CC, 0x72BA, 0xA0E8, - 0x72BB, 0xA0E9, 0x72BC, 0xA0EA, 0x72BD, 0xA0EB, 0x72BE, 0xA0EC, - 0x72BF, 0xA0ED, 0x72C0, 0xA0EE, 0x72C1, 0xE1F1, 0x72C2, 0xBFF1, - 0x72C3, 0xE1F0, 0x72C4, 0xB5D2, 0x72C5, 0xA0EF, 0x72C6, 0xA0F0, - 0x72C7, 0xA0F1, 0x72C8, 0xB1B7, 0x72C9, 0xA0F2, 0x72CA, 0xA0F3, - 0x72CB, 0xA0F4, 0x72CC, 0xA0F5, 0x72CD, 0xE1F3, 0x72CE, 0xE1F2, - 0x72CF, 0xA0F6, 0x72D0, 0xBAFC, 0x72D1, 0xA0F7, 0x72D2, 0xE1F4, - 0x72D3, 0xA0F8, 0x72D4, 0xA0F9, 0x72D5, 0xA0FA, 0x72D6, 0xA0FB, - 0x72D7, 0xB9B7, 0x72D8, 0xA0FC, 0x72D9, 0xBED1, 0x72DA, 0xA0FD, - 0x72DB, 0xA0FE, 0x72DC, 0xAA40, 0x72DD, 0xAA41, 0x72DE, 0xC4FC, - 0x72DF, 0xAA42, 0x72E0, 0xBADD, 0x72E1, 0xBDC6, 0x72E2, 0xAA43, - 0x72E3, 0xAA44, 0x72E4, 0xAA45, 0x72E5, 0xAA46, 0x72E6, 0xAA47, - 0x72E7, 0xAA48, 0x72E8, 0xE1F5, 0x72E9, 0xE1F7, 0x72EA, 0xAA49, - 0x72EB, 0xAA4A, 0x72EC, 0xB6C0, 0x72ED, 0xCFC1, 0x72EE, 0xCAA8, - 0x72EF, 0xE1F6, 0x72F0, 0xD5F8, 0x72F1, 0xD3FC, 0x72F2, 0xE1F8, - 0x72F3, 0xE1FC, 0x72F4, 0xE1F9, 0x72F5, 0xAA4B, 0x72F6, 0xAA4C, - 0x72F7, 0xE1FA, 0x72F8, 0xC0EA, 0x72F9, 0xAA4D, 0x72FA, 0xE1FE, - 0x72FB, 0xE2A1, 0x72FC, 0xC0C7, 0x72FD, 0xAA4E, 0x72FE, 0xAA4F, - 0x72FF, 0xAA50, 0x7300, 0xAA51, 0x7301, 0xE1FB, 0x7302, 0xAA52, - 0x7303, 0xE1FD, 0x7304, 0xAA53, 0x7305, 0xAA54, 0x7306, 0xAA55, - 0x7307, 0xAA56, 0x7308, 0xAA57, 0x7309, 0xAA58, 0x730A, 0xE2A5, - 0x730B, 0xAA59, 0x730C, 0xAA5A, 0x730D, 0xAA5B, 0x730E, 0xC1D4, - 0x730F, 0xAA5C, 0x7310, 0xAA5D, 0x7311, 0xAA5E, 0x7312, 0xAA5F, - 0x7313, 0xE2A3, 0x7314, 0xAA60, 0x7315, 0xE2A8, 0x7316, 0xB2FE, - 0x7317, 0xE2A2, 0x7318, 0xAA61, 0x7319, 0xAA62, 0x731A, 0xAA63, - 0x731B, 0xC3CD, 0x731C, 0xB2C2, 0x731D, 0xE2A7, 0x731E, 0xE2A6, - 0x731F, 0xAA64, 0x7320, 0xAA65, 0x7321, 0xE2A4, 0x7322, 0xE2A9, - 0x7323, 0xAA66, 0x7324, 0xAA67, 0x7325, 0xE2AB, 0x7326, 0xAA68, - 0x7327, 0xAA69, 0x7328, 0xAA6A, 0x7329, 0xD0C9, 0x732A, 0xD6ED, - 0x732B, 0xC3A8, 0x732C, 0xE2AC, 0x732D, 0xAA6B, 0x732E, 0xCFD7, - 0x732F, 0xAA6C, 0x7330, 0xAA6D, 0x7331, 0xE2AE, 0x7332, 0xAA6E, - 0x7333, 0xAA6F, 0x7334, 0xBAEF, 0x7335, 0xAA70, 0x7336, 0xAA71, - 0x7337, 0xE9E0, 0x7338, 0xE2AD, 0x7339, 0xE2AA, 0x733A, 0xAA72, - 0x733B, 0xAA73, 0x733C, 0xAA74, 0x733D, 0xAA75, 0x733E, 0xBBAB, - 0x733F, 0xD4B3, 0x7340, 0xAA76, 0x7341, 0xAA77, 0x7342, 0xAA78, - 0x7343, 0xAA79, 0x7344, 0xAA7A, 0x7345, 0xAA7B, 0x7346, 0xAA7C, - 0x7347, 0xAA7D, 0x7348, 0xAA7E, 0x7349, 0xAA80, 0x734A, 0xAA81, - 0x734B, 0xAA82, 0x734C, 0xAA83, 0x734D, 0xE2B0, 0x734E, 0xAA84, - 0x734F, 0xAA85, 0x7350, 0xE2AF, 0x7351, 0xAA86, 0x7352, 0xE9E1, - 0x7353, 0xAA87, 0x7354, 0xAA88, 0x7355, 0xAA89, 0x7356, 0xAA8A, - 0x7357, 0xE2B1, 0x7358, 0xAA8B, 0x7359, 0xAA8C, 0x735A, 0xAA8D, - 0x735B, 0xAA8E, 0x735C, 0xAA8F, 0x735D, 0xAA90, 0x735E, 0xAA91, - 0x735F, 0xAA92, 0x7360, 0xE2B2, 0x7361, 0xAA93, 0x7362, 0xAA94, - 0x7363, 0xAA95, 0x7364, 0xAA96, 0x7365, 0xAA97, 0x7366, 0xAA98, - 0x7367, 0xAA99, 0x7368, 0xAA9A, 0x7369, 0xAA9B, 0x736A, 0xAA9C, - 0x736B, 0xAA9D, 0x736C, 0xE2B3, 0x736D, 0xCCA1, 0x736E, 0xAA9E, - 0x736F, 0xE2B4, 0x7370, 0xAA9F, 0x7371, 0xAAA0, 0x7372, 0xAB40, - 0x7373, 0xAB41, 0x7374, 0xAB42, 0x7375, 0xAB43, 0x7376, 0xAB44, - 0x7377, 0xAB45, 0x7378, 0xAB46, 0x7379, 0xAB47, 0x737A, 0xAB48, - 0x737B, 0xAB49, 0x737C, 0xAB4A, 0x737D, 0xAB4B, 0x737E, 0xE2B5, - 0x737F, 0xAB4C, 0x7380, 0xAB4D, 0x7381, 0xAB4E, 0x7382, 0xAB4F, - 0x7383, 0xAB50, 0x7384, 0xD0FE, 0x7385, 0xAB51, 0x7386, 0xAB52, - 0x7387, 0xC2CA, 0x7388, 0xAB53, 0x7389, 0xD3F1, 0x738A, 0xAB54, - 0x738B, 0xCDF5, 0x738C, 0xAB55, 0x738D, 0xAB56, 0x738E, 0xE7E0, - 0x738F, 0xAB57, 0x7390, 0xAB58, 0x7391, 0xE7E1, 0x7392, 0xAB59, - 0x7393, 0xAB5A, 0x7394, 0xAB5B, 0x7395, 0xAB5C, 0x7396, 0xBEC1, - 0x7397, 0xAB5D, 0x7398, 0xAB5E, 0x7399, 0xAB5F, 0x739A, 0xAB60, - 0x739B, 0xC2EA, 0x739C, 0xAB61, 0x739D, 0xAB62, 0x739E, 0xAB63, - 0x739F, 0xE7E4, 0x73A0, 0xAB64, 0x73A1, 0xAB65, 0x73A2, 0xE7E3, - 0x73A3, 0xAB66, 0x73A4, 0xAB67, 0x73A5, 0xAB68, 0x73A6, 0xAB69, - 0x73A7, 0xAB6A, 0x73A8, 0xAB6B, 0x73A9, 0xCDE6, 0x73AA, 0xAB6C, - 0x73AB, 0xC3B5, 0x73AC, 0xAB6D, 0x73AD, 0xAB6E, 0x73AE, 0xE7E2, - 0x73AF, 0xBBB7, 0x73B0, 0xCFD6, 0x73B1, 0xAB6F, 0x73B2, 0xC1E1, - 0x73B3, 0xE7E9, 0x73B4, 0xAB70, 0x73B5, 0xAB71, 0x73B6, 0xAB72, - 0x73B7, 0xE7E8, 0x73B8, 0xAB73, 0x73B9, 0xAB74, 0x73BA, 0xE7F4, - 0x73BB, 0xB2A3, 0x73BC, 0xAB75, 0x73BD, 0xAB76, 0x73BE, 0xAB77, - 0x73BF, 0xAB78, 0x73C0, 0xE7EA, 0x73C1, 0xAB79, 0x73C2, 0xE7E6, - 0x73C3, 0xAB7A, 0x73C4, 0xAB7B, 0x73C5, 0xAB7C, 0x73C6, 0xAB7D, - 0x73C7, 0xAB7E, 0x73C8, 0xE7EC, 0x73C9, 0xE7EB, 0x73CA, 0xC9BA, - 0x73CB, 0xAB80, 0x73CC, 0xAB81, 0x73CD, 0xD5E4, 0x73CE, 0xAB82, - 0x73CF, 0xE7E5, 0x73D0, 0xB7A9, 0x73D1, 0xE7E7, 0x73D2, 0xAB83, - 0x73D3, 0xAB84, 0x73D4, 0xAB85, 0x73D5, 0xAB86, 0x73D6, 0xAB87, - 0x73D7, 0xAB88, 0x73D8, 0xAB89, 0x73D9, 0xE7EE, 0x73DA, 0xAB8A, - 0x73DB, 0xAB8B, 0x73DC, 0xAB8C, 0x73DD, 0xAB8D, 0x73DE, 0xE7F3, - 0x73DF, 0xAB8E, 0x73E0, 0xD6E9, 0x73E1, 0xAB8F, 0x73E2, 0xAB90, - 0x73E3, 0xAB91, 0x73E4, 0xAB92, 0x73E5, 0xE7ED, 0x73E6, 0xAB93, - 0x73E7, 0xE7F2, 0x73E8, 0xAB94, 0x73E9, 0xE7F1, 0x73EA, 0xAB95, - 0x73EB, 0xAB96, 0x73EC, 0xAB97, 0x73ED, 0xB0E0, 0x73EE, 0xAB98, - 0x73EF, 0xAB99, 0x73F0, 0xAB9A, 0x73F1, 0xAB9B, 0x73F2, 0xE7F5, - 0x73F3, 0xAB9C, 0x73F4, 0xAB9D, 0x73F5, 0xAB9E, 0x73F6, 0xAB9F, - 0x73F7, 0xABA0, 0x73F8, 0xAC40, 0x73F9, 0xAC41, 0x73FA, 0xAC42, - 0x73FB, 0xAC43, 0x73FC, 0xAC44, 0x73FD, 0xAC45, 0x73FE, 0xAC46, - 0x73FF, 0xAC47, 0x7400, 0xAC48, 0x7401, 0xAC49, 0x7402, 0xAC4A, - 0x7403, 0xC7F2, 0x7404, 0xAC4B, 0x7405, 0xC0C5, 0x7406, 0xC0ED, - 0x7407, 0xAC4C, 0x7408, 0xAC4D, 0x7409, 0xC1F0, 0x740A, 0xE7F0, - 0x740B, 0xAC4E, 0x740C, 0xAC4F, 0x740D, 0xAC50, 0x740E, 0xAC51, - 0x740F, 0xE7F6, 0x7410, 0xCBF6, 0x7411, 0xAC52, 0x7412, 0xAC53, - 0x7413, 0xAC54, 0x7414, 0xAC55, 0x7415, 0xAC56, 0x7416, 0xAC57, - 0x7417, 0xAC58, 0x7418, 0xAC59, 0x7419, 0xAC5A, 0x741A, 0xE8A2, - 0x741B, 0xE8A1, 0x741C, 0xAC5B, 0x741D, 0xAC5C, 0x741E, 0xAC5D, - 0x741F, 0xAC5E, 0x7420, 0xAC5F, 0x7421, 0xAC60, 0x7422, 0xD7C1, - 0x7423, 0xAC61, 0x7424, 0xAC62, 0x7425, 0xE7FA, 0x7426, 0xE7F9, - 0x7427, 0xAC63, 0x7428, 0xE7FB, 0x7429, 0xAC64, 0x742A, 0xE7F7, - 0x742B, 0xAC65, 0x742C, 0xE7FE, 0x742D, 0xAC66, 0x742E, 0xE7FD, - 0x742F, 0xAC67, 0x7430, 0xE7FC, 0x7431, 0xAC68, 0x7432, 0xAC69, - 0x7433, 0xC1D5, 0x7434, 0xC7D9, 0x7435, 0xC5FD, 0x7436, 0xC5C3, - 0x7437, 0xAC6A, 0x7438, 0xAC6B, 0x7439, 0xAC6C, 0x743A, 0xAC6D, - 0x743B, 0xAC6E, 0x743C, 0xC7ED, 0x743D, 0xAC6F, 0x743E, 0xAC70, - 0x743F, 0xAC71, 0x7440, 0xAC72, 0x7441, 0xE8A3, 0x7442, 0xAC73, - 0x7443, 0xAC74, 0x7444, 0xAC75, 0x7445, 0xAC76, 0x7446, 0xAC77, - 0x7447, 0xAC78, 0x7448, 0xAC79, 0x7449, 0xAC7A, 0x744A, 0xAC7B, - 0x744B, 0xAC7C, 0x744C, 0xAC7D, 0x744D, 0xAC7E, 0x744E, 0xAC80, - 0x744F, 0xAC81, 0x7450, 0xAC82, 0x7451, 0xAC83, 0x7452, 0xAC84, - 0x7453, 0xAC85, 0x7454, 0xAC86, 0x7455, 0xE8A6, 0x7456, 0xAC87, - 0x7457, 0xE8A5, 0x7458, 0xAC88, 0x7459, 0xE8A7, 0x745A, 0xBAF7, - 0x745B, 0xE7F8, 0x745C, 0xE8A4, 0x745D, 0xAC89, 0x745E, 0xC8F0, - 0x745F, 0xC9AA, 0x7460, 0xAC8A, 0x7461, 0xAC8B, 0x7462, 0xAC8C, - 0x7463, 0xAC8D, 0x7464, 0xAC8E, 0x7465, 0xAC8F, 0x7466, 0xAC90, - 0x7467, 0xAC91, 0x7468, 0xAC92, 0x7469, 0xAC93, 0x746A, 0xAC94, - 0x746B, 0xAC95, 0x746C, 0xAC96, 0x746D, 0xE8A9, 0x746E, 0xAC97, - 0x746F, 0xAC98, 0x7470, 0xB9E5, 0x7471, 0xAC99, 0x7472, 0xAC9A, - 0x7473, 0xAC9B, 0x7474, 0xAC9C, 0x7475, 0xAC9D, 0x7476, 0xD1FE, - 0x7477, 0xE8A8, 0x7478, 0xAC9E, 0x7479, 0xAC9F, 0x747A, 0xACA0, - 0x747B, 0xAD40, 0x747C, 0xAD41, 0x747D, 0xAD42, 0x747E, 0xE8AA, - 0x747F, 0xAD43, 0x7480, 0xE8AD, 0x7481, 0xE8AE, 0x7482, 0xAD44, - 0x7483, 0xC1A7, 0x7484, 0xAD45, 0x7485, 0xAD46, 0x7486, 0xAD47, - 0x7487, 0xE8AF, 0x7488, 0xAD48, 0x7489, 0xAD49, 0x748A, 0xAD4A, - 0x748B, 0xE8B0, 0x748C, 0xAD4B, 0x748D, 0xAD4C, 0x748E, 0xE8AC, - 0x748F, 0xAD4D, 0x7490, 0xE8B4, 0x7491, 0xAD4E, 0x7492, 0xAD4F, - 0x7493, 0xAD50, 0x7494, 0xAD51, 0x7495, 0xAD52, 0x7496, 0xAD53, - 0x7497, 0xAD54, 0x7498, 0xAD55, 0x7499, 0xAD56, 0x749A, 0xAD57, - 0x749B, 0xAD58, 0x749C, 0xE8AB, 0x749D, 0xAD59, 0x749E, 0xE8B1, - 0x749F, 0xAD5A, 0x74A0, 0xAD5B, 0x74A1, 0xAD5C, 0x74A2, 0xAD5D, - 0x74A3, 0xAD5E, 0x74A4, 0xAD5F, 0x74A5, 0xAD60, 0x74A6, 0xAD61, - 0x74A7, 0xE8B5, 0x74A8, 0xE8B2, 0x74A9, 0xE8B3, 0x74AA, 0xAD62, - 0x74AB, 0xAD63, 0x74AC, 0xAD64, 0x74AD, 0xAD65, 0x74AE, 0xAD66, - 0x74AF, 0xAD67, 0x74B0, 0xAD68, 0x74B1, 0xAD69, 0x74B2, 0xAD6A, - 0x74B3, 0xAD6B, 0x74B4, 0xAD6C, 0x74B5, 0xAD6D, 0x74B6, 0xAD6E, - 0x74B7, 0xAD6F, 0x74B8, 0xAD70, 0x74B9, 0xAD71, 0x74BA, 0xE8B7, - 0x74BB, 0xAD72, 0x74BC, 0xAD73, 0x74BD, 0xAD74, 0x74BE, 0xAD75, - 0x74BF, 0xAD76, 0x74C0, 0xAD77, 0x74C1, 0xAD78, 0x74C2, 0xAD79, - 0x74C3, 0xAD7A, 0x74C4, 0xAD7B, 0x74C5, 0xAD7C, 0x74C6, 0xAD7D, - 0x74C7, 0xAD7E, 0x74C8, 0xAD80, 0x74C9, 0xAD81, 0x74CA, 0xAD82, - 0x74CB, 0xAD83, 0x74CC, 0xAD84, 0x74CD, 0xAD85, 0x74CE, 0xAD86, - 0x74CF, 0xAD87, 0x74D0, 0xAD88, 0x74D1, 0xAD89, 0x74D2, 0xE8B6, - 0x74D3, 0xAD8A, 0x74D4, 0xAD8B, 0x74D5, 0xAD8C, 0x74D6, 0xAD8D, - 0x74D7, 0xAD8E, 0x74D8, 0xAD8F, 0x74D9, 0xAD90, 0x74DA, 0xAD91, - 0x74DB, 0xAD92, 0x74DC, 0xB9CF, 0x74DD, 0xAD93, 0x74DE, 0xF0AC, - 0x74DF, 0xAD94, 0x74E0, 0xF0AD, 0x74E1, 0xAD95, 0x74E2, 0xC6B0, - 0x74E3, 0xB0EA, 0x74E4, 0xC8BF, 0x74E5, 0xAD96, 0x74E6, 0xCDDF, - 0x74E7, 0xAD97, 0x74E8, 0xAD98, 0x74E9, 0xAD99, 0x74EA, 0xAD9A, - 0x74EB, 0xAD9B, 0x74EC, 0xAD9C, 0x74ED, 0xAD9D, 0x74EE, 0xCECD, - 0x74EF, 0xEAB1, 0x74F0, 0xAD9E, 0x74F1, 0xAD9F, 0x74F2, 0xADA0, - 0x74F3, 0xAE40, 0x74F4, 0xEAB2, 0x74F5, 0xAE41, 0x74F6, 0xC6BF, - 0x74F7, 0xB4C9, 0x74F8, 0xAE42, 0x74F9, 0xAE43, 0x74FA, 0xAE44, - 0x74FB, 0xAE45, 0x74FC, 0xAE46, 0x74FD, 0xAE47, 0x74FE, 0xAE48, - 0x74FF, 0xEAB3, 0x7500, 0xAE49, 0x7501, 0xAE4A, 0x7502, 0xAE4B, - 0x7503, 0xAE4C, 0x7504, 0xD5E7, 0x7505, 0xAE4D, 0x7506, 0xAE4E, - 0x7507, 0xAE4F, 0x7508, 0xAE50, 0x7509, 0xAE51, 0x750A, 0xAE52, - 0x750B, 0xAE53, 0x750C, 0xAE54, 0x750D, 0xDDF9, 0x750E, 0xAE55, - 0x750F, 0xEAB4, 0x7510, 0xAE56, 0x7511, 0xEAB5, 0x7512, 0xAE57, - 0x7513, 0xEAB6, 0x7514, 0xAE58, 0x7515, 0xAE59, 0x7516, 0xAE5A, - 0x7517, 0xAE5B, 0x7518, 0xB8CA, 0x7519, 0xDFB0, 0x751A, 0xC9F5, - 0x751B, 0xAE5C, 0x751C, 0xCCF0, 0x751D, 0xAE5D, 0x751E, 0xAE5E, - 0x751F, 0xC9FA, 0x7520, 0xAE5F, 0x7521, 0xAE60, 0x7522, 0xAE61, - 0x7523, 0xAE62, 0x7524, 0xAE63, 0x7525, 0xC9FB, 0x7526, 0xAE64, - 0x7527, 0xAE65, 0x7528, 0xD3C3, 0x7529, 0xCBA6, 0x752A, 0xAE66, - 0x752B, 0xB8A6, 0x752C, 0xF0AE, 0x752D, 0xB1C2, 0x752E, 0xAE67, - 0x752F, 0xE5B8, 0x7530, 0xCCEF, 0x7531, 0xD3C9, 0x7532, 0xBCD7, - 0x7533, 0xC9EA, 0x7534, 0xAE68, 0x7535, 0xB5E7, 0x7536, 0xAE69, - 0x7537, 0xC4D0, 0x7538, 0xB5E9, 0x7539, 0xAE6A, 0x753A, 0xEEAE, - 0x753B, 0xBBAD, 0x753C, 0xAE6B, 0x753D, 0xAE6C, 0x753E, 0xE7DE, - 0x753F, 0xAE6D, 0x7540, 0xEEAF, 0x7541, 0xAE6E, 0x7542, 0xAE6F, - 0x7543, 0xAE70, 0x7544, 0xAE71, 0x7545, 0xB3A9, 0x7546, 0xAE72, - 0x7547, 0xAE73, 0x7548, 0xEEB2, 0x7549, 0xAE74, 0x754A, 0xAE75, - 0x754B, 0xEEB1, 0x754C, 0xBDE7, 0x754D, 0xAE76, 0x754E, 0xEEB0, - 0x754F, 0xCEB7, 0x7550, 0xAE77, 0x7551, 0xAE78, 0x7552, 0xAE79, - 0x7553, 0xAE7A, 0x7554, 0xC5CF, 0x7555, 0xAE7B, 0x7556, 0xAE7C, - 0x7557, 0xAE7D, 0x7558, 0xAE7E, 0x7559, 0xC1F4, 0x755A, 0xDBCE, - 0x755B, 0xEEB3, 0x755C, 0xD0F3, 0x755D, 0xAE80, 0x755E, 0xAE81, - 0x755F, 0xAE82, 0x7560, 0xAE83, 0x7561, 0xAE84, 0x7562, 0xAE85, - 0x7563, 0xAE86, 0x7564, 0xAE87, 0x7565, 0xC2D4, 0x7566, 0xC6E8, - 0x7567, 0xAE88, 0x7568, 0xAE89, 0x7569, 0xAE8A, 0x756A, 0xB7AC, - 0x756B, 0xAE8B, 0x756C, 0xAE8C, 0x756D, 0xAE8D, 0x756E, 0xAE8E, - 0x756F, 0xAE8F, 0x7570, 0xAE90, 0x7571, 0xAE91, 0x7572, 0xEEB4, - 0x7573, 0xAE92, 0x7574, 0xB3EB, 0x7575, 0xAE93, 0x7576, 0xAE94, - 0x7577, 0xAE95, 0x7578, 0xBBFB, 0x7579, 0xEEB5, 0x757A, 0xAE96, - 0x757B, 0xAE97, 0x757C, 0xAE98, 0x757D, 0xAE99, 0x757E, 0xAE9A, - 0x757F, 0xE7DC, 0x7580, 0xAE9B, 0x7581, 0xAE9C, 0x7582, 0xAE9D, - 0x7583, 0xEEB6, 0x7584, 0xAE9E, 0x7585, 0xAE9F, 0x7586, 0xBDAE, - 0x7587, 0xAEA0, 0x7588, 0xAF40, 0x7589, 0xAF41, 0x758A, 0xAF42, - 0x758B, 0xF1E2, 0x758C, 0xAF43, 0x758D, 0xAF44, 0x758E, 0xAF45, - 0x758F, 0xCAE8, 0x7590, 0xAF46, 0x7591, 0xD2C9, 0x7592, 0xF0DA, - 0x7593, 0xAF47, 0x7594, 0xF0DB, 0x7595, 0xAF48, 0x7596, 0xF0DC, - 0x7597, 0xC1C6, 0x7598, 0xAF49, 0x7599, 0xB8ED, 0x759A, 0xBECE, - 0x759B, 0xAF4A, 0x759C, 0xAF4B, 0x759D, 0xF0DE, 0x759E, 0xAF4C, - 0x759F, 0xC5B1, 0x75A0, 0xF0DD, 0x75A1, 0xD1F1, 0x75A2, 0xAF4D, - 0x75A3, 0xF0E0, 0x75A4, 0xB0CC, 0x75A5, 0xBDEA, 0x75A6, 0xAF4E, - 0x75A7, 0xAF4F, 0x75A8, 0xAF50, 0x75A9, 0xAF51, 0x75AA, 0xAF52, - 0x75AB, 0xD2DF, 0x75AC, 0xF0DF, 0x75AD, 0xAF53, 0x75AE, 0xB4AF, - 0x75AF, 0xB7E8, 0x75B0, 0xF0E6, 0x75B1, 0xF0E5, 0x75B2, 0xC6A3, - 0x75B3, 0xF0E1, 0x75B4, 0xF0E2, 0x75B5, 0xB4C3, 0x75B6, 0xAF54, - 0x75B7, 0xAF55, 0x75B8, 0xF0E3, 0x75B9, 0xD5EE, 0x75BA, 0xAF56, - 0x75BB, 0xAF57, 0x75BC, 0xCCDB, 0x75BD, 0xBED2, 0x75BE, 0xBCB2, - 0x75BF, 0xAF58, 0x75C0, 0xAF59, 0x75C1, 0xAF5A, 0x75C2, 0xF0E8, - 0x75C3, 0xF0E7, 0x75C4, 0xF0E4, 0x75C5, 0xB2A1, 0x75C6, 0xAF5B, - 0x75C7, 0xD6A2, 0x75C8, 0xD3B8, 0x75C9, 0xBEB7, 0x75CA, 0xC8AC, - 0x75CB, 0xAF5C, 0x75CC, 0xAF5D, 0x75CD, 0xF0EA, 0x75CE, 0xAF5E, - 0x75CF, 0xAF5F, 0x75D0, 0xAF60, 0x75D1, 0xAF61, 0x75D2, 0xD1F7, - 0x75D3, 0xAF62, 0x75D4, 0xD6CC, 0x75D5, 0xBADB, 0x75D6, 0xF0E9, - 0x75D7, 0xAF63, 0x75D8, 0xB6BB, 0x75D9, 0xAF64, 0x75DA, 0xAF65, - 0x75DB, 0xCDB4, 0x75DC, 0xAF66, 0x75DD, 0xAF67, 0x75DE, 0xC6A6, - 0x75DF, 0xAF68, 0x75E0, 0xAF69, 0x75E1, 0xAF6A, 0x75E2, 0xC1A1, - 0x75E3, 0xF0EB, 0x75E4, 0xF0EE, 0x75E5, 0xAF6B, 0x75E6, 0xF0ED, - 0x75E7, 0xF0F0, 0x75E8, 0xF0EC, 0x75E9, 0xAF6C, 0x75EA, 0xBBBE, - 0x75EB, 0xF0EF, 0x75EC, 0xAF6D, 0x75ED, 0xAF6E, 0x75EE, 0xAF6F, - 0x75EF, 0xAF70, 0x75F0, 0xCCB5, 0x75F1, 0xF0F2, 0x75F2, 0xAF71, - 0x75F3, 0xAF72, 0x75F4, 0xB3D5, 0x75F5, 0xAF73, 0x75F6, 0xAF74, - 0x75F7, 0xAF75, 0x75F8, 0xAF76, 0x75F9, 0xB1D4, 0x75FA, 0xAF77, - 0x75FB, 0xAF78, 0x75FC, 0xF0F3, 0x75FD, 0xAF79, 0x75FE, 0xAF7A, - 0x75FF, 0xF0F4, 0x7600, 0xF0F6, 0x7601, 0xB4E1, 0x7602, 0xAF7B, - 0x7603, 0xF0F1, 0x7604, 0xAF7C, 0x7605, 0xF0F7, 0x7606, 0xAF7D, - 0x7607, 0xAF7E, 0x7608, 0xAF80, 0x7609, 0xAF81, 0x760A, 0xF0FA, - 0x760B, 0xAF82, 0x760C, 0xF0F8, 0x760D, 0xAF83, 0x760E, 0xAF84, - 0x760F, 0xAF85, 0x7610, 0xF0F5, 0x7611, 0xAF86, 0x7612, 0xAF87, - 0x7613, 0xAF88, 0x7614, 0xAF89, 0x7615, 0xF0FD, 0x7616, 0xAF8A, - 0x7617, 0xF0F9, 0x7618, 0xF0FC, 0x7619, 0xF0FE, 0x761A, 0xAF8B, - 0x761B, 0xF1A1, 0x761C, 0xAF8C, 0x761D, 0xAF8D, 0x761E, 0xAF8E, - 0x761F, 0xCEC1, 0x7620, 0xF1A4, 0x7621, 0xAF8F, 0x7622, 0xF1A3, - 0x7623, 0xAF90, 0x7624, 0xC1F6, 0x7625, 0xF0FB, 0x7626, 0xCADD, - 0x7627, 0xAF91, 0x7628, 0xAF92, 0x7629, 0xB4F1, 0x762A, 0xB1F1, - 0x762B, 0xCCB1, 0x762C, 0xAF93, 0x762D, 0xF1A6, 0x762E, 0xAF94, - 0x762F, 0xAF95, 0x7630, 0xF1A7, 0x7631, 0xAF96, 0x7632, 0xAF97, - 0x7633, 0xF1AC, 0x7634, 0xD5CE, 0x7635, 0xF1A9, 0x7636, 0xAF98, - 0x7637, 0xAF99, 0x7638, 0xC8B3, 0x7639, 0xAF9A, 0x763A, 0xAF9B, - 0x763B, 0xAF9C, 0x763C, 0xF1A2, 0x763D, 0xAF9D, 0x763E, 0xF1AB, - 0x763F, 0xF1A8, 0x7640, 0xF1A5, 0x7641, 0xAF9E, 0x7642, 0xAF9F, - 0x7643, 0xF1AA, 0x7644, 0xAFA0, 0x7645, 0xB040, 0x7646, 0xB041, - 0x7647, 0xB042, 0x7648, 0xB043, 0x7649, 0xB044, 0x764A, 0xB045, - 0x764B, 0xB046, 0x764C, 0xB0A9, 0x764D, 0xF1AD, 0x764E, 0xB047, - 0x764F, 0xB048, 0x7650, 0xB049, 0x7651, 0xB04A, 0x7652, 0xB04B, - 0x7653, 0xB04C, 0x7654, 0xF1AF, 0x7655, 0xB04D, 0x7656, 0xF1B1, - 0x7657, 0xB04E, 0x7658, 0xB04F, 0x7659, 0xB050, 0x765A, 0xB051, - 0x765B, 0xB052, 0x765C, 0xF1B0, 0x765D, 0xB053, 0x765E, 0xF1AE, - 0x765F, 0xB054, 0x7660, 0xB055, 0x7661, 0xB056, 0x7662, 0xB057, - 0x7663, 0xD1A2, 0x7664, 0xB058, 0x7665, 0xB059, 0x7666, 0xB05A, - 0x7667, 0xB05B, 0x7668, 0xB05C, 0x7669, 0xB05D, 0x766A, 0xB05E, - 0x766B, 0xF1B2, 0x766C, 0xB05F, 0x766D, 0xB060, 0x766E, 0xB061, - 0x766F, 0xF1B3, 0x7670, 0xB062, 0x7671, 0xB063, 0x7672, 0xB064, - 0x7673, 0xB065, 0x7674, 0xB066, 0x7675, 0xB067, 0x7676, 0xB068, - 0x7677, 0xB069, 0x7678, 0xB9EF, 0x7679, 0xB06A, 0x767A, 0xB06B, - 0x767B, 0xB5C7, 0x767C, 0xB06C, 0x767D, 0xB0D7, 0x767E, 0xB0D9, - 0x767F, 0xB06D, 0x7680, 0xB06E, 0x7681, 0xB06F, 0x7682, 0xD4ED, - 0x7683, 0xB070, 0x7684, 0xB5C4, 0x7685, 0xB071, 0x7686, 0xBDD4, - 0x7687, 0xBBCA, 0x7688, 0xF0A7, 0x7689, 0xB072, 0x768A, 0xB073, - 0x768B, 0xB8DE, 0x768C, 0xB074, 0x768D, 0xB075, 0x768E, 0xF0A8, - 0x768F, 0xB076, 0x7690, 0xB077, 0x7691, 0xB0A8, 0x7692, 0xB078, - 0x7693, 0xF0A9, 0x7694, 0xB079, 0x7695, 0xB07A, 0x7696, 0xCDEE, - 0x7697, 0xB07B, 0x7698, 0xB07C, 0x7699, 0xF0AA, 0x769A, 0xB07D, - 0x769B, 0xB07E, 0x769C, 0xB080, 0x769D, 0xB081, 0x769E, 0xB082, - 0x769F, 0xB083, 0x76A0, 0xB084, 0x76A1, 0xB085, 0x76A2, 0xB086, - 0x76A3, 0xB087, 0x76A4, 0xF0AB, 0x76A5, 0xB088, 0x76A6, 0xB089, - 0x76A7, 0xB08A, 0x76A8, 0xB08B, 0x76A9, 0xB08C, 0x76AA, 0xB08D, - 0x76AB, 0xB08E, 0x76AC, 0xB08F, 0x76AD, 0xB090, 0x76AE, 0xC6A4, - 0x76AF, 0xB091, 0x76B0, 0xB092, 0x76B1, 0xD6E5, 0x76B2, 0xF1E4, - 0x76B3, 0xB093, 0x76B4, 0xF1E5, 0x76B5, 0xB094, 0x76B6, 0xB095, - 0x76B7, 0xB096, 0x76B8, 0xB097, 0x76B9, 0xB098, 0x76BA, 0xB099, - 0x76BB, 0xB09A, 0x76BC, 0xB09B, 0x76BD, 0xB09C, 0x76BE, 0xB09D, - 0x76BF, 0xC3F3, 0x76C0, 0xB09E, 0x76C1, 0xB09F, 0x76C2, 0xD3DB, - 0x76C3, 0xB0A0, 0x76C4, 0xB140, 0x76C5, 0xD6D1, 0x76C6, 0xC5E8, - 0x76C7, 0xB141, 0x76C8, 0xD3AF, 0x76C9, 0xB142, 0x76CA, 0xD2E6, - 0x76CB, 0xB143, 0x76CC, 0xB144, 0x76CD, 0xEEC1, 0x76CE, 0xB0BB, - 0x76CF, 0xD5B5, 0x76D0, 0xD1CE, 0x76D1, 0xBCE0, 0x76D2, 0xBAD0, - 0x76D3, 0xB145, 0x76D4, 0xBFF8, 0x76D5, 0xB146, 0x76D6, 0xB8C7, - 0x76D7, 0xB5C1, 0x76D8, 0xC5CC, 0x76D9, 0xB147, 0x76DA, 0xB148, - 0x76DB, 0xCAA2, 0x76DC, 0xB149, 0x76DD, 0xB14A, 0x76DE, 0xB14B, - 0x76DF, 0xC3CB, 0x76E0, 0xB14C, 0x76E1, 0xB14D, 0x76E2, 0xB14E, - 0x76E3, 0xB14F, 0x76E4, 0xB150, 0x76E5, 0xEEC2, 0x76E6, 0xB151, - 0x76E7, 0xB152, 0x76E8, 0xB153, 0x76E9, 0xB154, 0x76EA, 0xB155, - 0x76EB, 0xB156, 0x76EC, 0xB157, 0x76ED, 0xB158, 0x76EE, 0xC4BF, - 0x76EF, 0xB6A2, 0x76F0, 0xB159, 0x76F1, 0xEDEC, 0x76F2, 0xC3A4, - 0x76F3, 0xB15A, 0x76F4, 0xD6B1, 0x76F5, 0xB15B, 0x76F6, 0xB15C, - 0x76F7, 0xB15D, 0x76F8, 0xCFE0, 0x76F9, 0xEDEF, 0x76FA, 0xB15E, - 0x76FB, 0xB15F, 0x76FC, 0xC5CE, 0x76FD, 0xB160, 0x76FE, 0xB6DC, - 0x76FF, 0xB161, 0x7700, 0xB162, 0x7701, 0xCAA1, 0x7702, 0xB163, - 0x7703, 0xB164, 0x7704, 0xEDED, 0x7705, 0xB165, 0x7706, 0xB166, - 0x7707, 0xEDF0, 0x7708, 0xEDF1, 0x7709, 0xC3BC, 0x770A, 0xB167, - 0x770B, 0xBFB4, 0x770C, 0xB168, 0x770D, 0xEDEE, 0x770E, 0xB169, - 0x770F, 0xB16A, 0x7710, 0xB16B, 0x7711, 0xB16C, 0x7712, 0xB16D, - 0x7713, 0xB16E, 0x7714, 0xB16F, 0x7715, 0xB170, 0x7716, 0xB171, - 0x7717, 0xB172, 0x7718, 0xB173, 0x7719, 0xEDF4, 0x771A, 0xEDF2, - 0x771B, 0xB174, 0x771C, 0xB175, 0x771D, 0xB176, 0x771E, 0xB177, - 0x771F, 0xD5E6, 0x7720, 0xC3DF, 0x7721, 0xB178, 0x7722, 0xEDF3, - 0x7723, 0xB179, 0x7724, 0xB17A, 0x7725, 0xB17B, 0x7726, 0xEDF6, - 0x7727, 0xB17C, 0x7728, 0xD5A3, 0x7729, 0xD1A3, 0x772A, 0xB17D, - 0x772B, 0xB17E, 0x772C, 0xB180, 0x772D, 0xEDF5, 0x772E, 0xB181, - 0x772F, 0xC3D0, 0x7730, 0xB182, 0x7731, 0xB183, 0x7732, 0xB184, - 0x7733, 0xB185, 0x7734, 0xB186, 0x7735, 0xEDF7, 0x7736, 0xBFF4, - 0x7737, 0xBEEC, 0x7738, 0xEDF8, 0x7739, 0xB187, 0x773A, 0xCCF7, - 0x773B, 0xB188, 0x773C, 0xD1DB, 0x773D, 0xB189, 0x773E, 0xB18A, - 0x773F, 0xB18B, 0x7740, 0xD7C5, 0x7741, 0xD5F6, 0x7742, 0xB18C, - 0x7743, 0xEDFC, 0x7744, 0xB18D, 0x7745, 0xB18E, 0x7746, 0xB18F, - 0x7747, 0xEDFB, 0x7748, 0xB190, 0x7749, 0xB191, 0x774A, 0xB192, - 0x774B, 0xB193, 0x774C, 0xB194, 0x774D, 0xB195, 0x774E, 0xB196, - 0x774F, 0xB197, 0x7750, 0xEDF9, 0x7751, 0xEDFA, 0x7752, 0xB198, - 0x7753, 0xB199, 0x7754, 0xB19A, 0x7755, 0xB19B, 0x7756, 0xB19C, - 0x7757, 0xB19D, 0x7758, 0xB19E, 0x7759, 0xB19F, 0x775A, 0xEDFD, - 0x775B, 0xBEA6, 0x775C, 0xB1A0, 0x775D, 0xB240, 0x775E, 0xB241, - 0x775F, 0xB242, 0x7760, 0xB243, 0x7761, 0xCBAF, 0x7762, 0xEEA1, - 0x7763, 0xB6BD, 0x7764, 0xB244, 0x7765, 0xEEA2, 0x7766, 0xC4C0, - 0x7767, 0xB245, 0x7768, 0xEDFE, 0x7769, 0xB246, 0x776A, 0xB247, - 0x776B, 0xBDDE, 0x776C, 0xB2C7, 0x776D, 0xB248, 0x776E, 0xB249, - 0x776F, 0xB24A, 0x7770, 0xB24B, 0x7771, 0xB24C, 0x7772, 0xB24D, - 0x7773, 0xB24E, 0x7774, 0xB24F, 0x7775, 0xB250, 0x7776, 0xB251, - 0x7777, 0xB252, 0x7778, 0xB253, 0x7779, 0xB6C3, 0x777A, 0xB254, - 0x777B, 0xB255, 0x777C, 0xB256, 0x777D, 0xEEA5, 0x777E, 0xD8BA, - 0x777F, 0xEEA3, 0x7780, 0xEEA6, 0x7781, 0xB257, 0x7782, 0xB258, - 0x7783, 0xB259, 0x7784, 0xC3E9, 0x7785, 0xB3F2, 0x7786, 0xB25A, - 0x7787, 0xB25B, 0x7788, 0xB25C, 0x7789, 0xB25D, 0x778A, 0xB25E, - 0x778B, 0xB25F, 0x778C, 0xEEA7, 0x778D, 0xEEA4, 0x778E, 0xCFB9, - 0x778F, 0xB260, 0x7790, 0xB261, 0x7791, 0xEEA8, 0x7792, 0xC2F7, - 0x7793, 0xB262, 0x7794, 0xB263, 0x7795, 0xB264, 0x7796, 0xB265, - 0x7797, 0xB266, 0x7798, 0xB267, 0x7799, 0xB268, 0x779A, 0xB269, - 0x779B, 0xB26A, 0x779C, 0xB26B, 0x779D, 0xB26C, 0x779E, 0xB26D, - 0x779F, 0xEEA9, 0x77A0, 0xEEAA, 0x77A1, 0xB26E, 0x77A2, 0xDEAB, - 0x77A3, 0xB26F, 0x77A4, 0xB270, 0x77A5, 0xC6B3, 0x77A6, 0xB271, - 0x77A7, 0xC7C6, 0x77A8, 0xB272, 0x77A9, 0xD6F5, 0x77AA, 0xB5C9, - 0x77AB, 0xB273, 0x77AC, 0xCBB2, 0x77AD, 0xB274, 0x77AE, 0xB275, - 0x77AF, 0xB276, 0x77B0, 0xEEAB, 0x77B1, 0xB277, 0x77B2, 0xB278, - 0x77B3, 0xCDAB, 0x77B4, 0xB279, 0x77B5, 0xEEAC, 0x77B6, 0xB27A, - 0x77B7, 0xB27B, 0x77B8, 0xB27C, 0x77B9, 0xB27D, 0x77BA, 0xB27E, - 0x77BB, 0xD5B0, 0x77BC, 0xB280, 0x77BD, 0xEEAD, 0x77BE, 0xB281, - 0x77BF, 0xF6C4, 0x77C0, 0xB282, 0x77C1, 0xB283, 0x77C2, 0xB284, - 0x77C3, 0xB285, 0x77C4, 0xB286, 0x77C5, 0xB287, 0x77C6, 0xB288, - 0x77C7, 0xB289, 0x77C8, 0xB28A, 0x77C9, 0xB28B, 0x77CA, 0xB28C, - 0x77CB, 0xB28D, 0x77CC, 0xB28E, 0x77CD, 0xDBC7, 0x77CE, 0xB28F, - 0x77CF, 0xB290, 0x77D0, 0xB291, 0x77D1, 0xB292, 0x77D2, 0xB293, - 0x77D3, 0xB294, 0x77D4, 0xB295, 0x77D5, 0xB296, 0x77D6, 0xB297, - 0x77D7, 0xB4A3, 0x77D8, 0xB298, 0x77D9, 0xB299, 0x77DA, 0xB29A, - 0x77DB, 0xC3AC, 0x77DC, 0xF1E6, 0x77DD, 0xB29B, 0x77DE, 0xB29C, - 0x77DF, 0xB29D, 0x77E0, 0xB29E, 0x77E1, 0xB29F, 0x77E2, 0xCAB8, - 0x77E3, 0xD2D3, 0x77E4, 0xB2A0, 0x77E5, 0xD6AA, 0x77E6, 0xB340, - 0x77E7, 0xEFF2, 0x77E8, 0xB341, 0x77E9, 0xBED8, 0x77EA, 0xB342, - 0x77EB, 0xBDC3, 0x77EC, 0xEFF3, 0x77ED, 0xB6CC, 0x77EE, 0xB0AB, - 0x77EF, 0xB343, 0x77F0, 0xB344, 0x77F1, 0xB345, 0x77F2, 0xB346, - 0x77F3, 0xCAAF, 0x77F4, 0xB347, 0x77F5, 0xB348, 0x77F6, 0xEDB6, - 0x77F7, 0xB349, 0x77F8, 0xEDB7, 0x77F9, 0xB34A, 0x77FA, 0xB34B, - 0x77FB, 0xB34C, 0x77FC, 0xB34D, 0x77FD, 0xCEF9, 0x77FE, 0xB7AF, - 0x77FF, 0xBFF3, 0x7800, 0xEDB8, 0x7801, 0xC2EB, 0x7802, 0xC9B0, - 0x7803, 0xB34E, 0x7804, 0xB34F, 0x7805, 0xB350, 0x7806, 0xB351, - 0x7807, 0xB352, 0x7808, 0xB353, 0x7809, 0xEDB9, 0x780A, 0xB354, - 0x780B, 0xB355, 0x780C, 0xC6F6, 0x780D, 0xBFB3, 0x780E, 0xB356, - 0x780F, 0xB357, 0x7810, 0xB358, 0x7811, 0xEDBC, 0x7812, 0xC5F8, - 0x7813, 0xB359, 0x7814, 0xD1D0, 0x7815, 0xB35A, 0x7816, 0xD7A9, - 0x7817, 0xEDBA, 0x7818, 0xEDBB, 0x7819, 0xB35B, 0x781A, 0xD1E2, - 0x781B, 0xB35C, 0x781C, 0xEDBF, 0x781D, 0xEDC0, 0x781E, 0xB35D, - 0x781F, 0xEDC4, 0x7820, 0xB35E, 0x7821, 0xB35F, 0x7822, 0xB360, - 0x7823, 0xEDC8, 0x7824, 0xB361, 0x7825, 0xEDC6, 0x7826, 0xEDCE, - 0x7827, 0xD5E8, 0x7828, 0xB362, 0x7829, 0xEDC9, 0x782A, 0xB363, - 0x782B, 0xB364, 0x782C, 0xEDC7, 0x782D, 0xEDBE, 0x782E, 0xB365, - 0x782F, 0xB366, 0x7830, 0xC5E9, 0x7831, 0xB367, 0x7832, 0xB368, - 0x7833, 0xB369, 0x7834, 0xC6C6, 0x7835, 0xB36A, 0x7836, 0xB36B, - 0x7837, 0xC9E9, 0x7838, 0xD4D2, 0x7839, 0xEDC1, 0x783A, 0xEDC2, - 0x783B, 0xEDC3, 0x783C, 0xEDC5, 0x783D, 0xB36C, 0x783E, 0xC0F9, - 0x783F, 0xB36D, 0x7840, 0xB4A1, 0x7841, 0xB36E, 0x7842, 0xB36F, - 0x7843, 0xB370, 0x7844, 0xB371, 0x7845, 0xB9E8, 0x7846, 0xB372, - 0x7847, 0xEDD0, 0x7848, 0xB373, 0x7849, 0xB374, 0x784A, 0xB375, - 0x784B, 0xB376, 0x784C, 0xEDD1, 0x784D, 0xB377, 0x784E, 0xEDCA, - 0x784F, 0xB378, 0x7850, 0xEDCF, 0x7851, 0xB379, 0x7852, 0xCEF8, - 0x7853, 0xB37A, 0x7854, 0xB37B, 0x7855, 0xCBB6, 0x7856, 0xEDCC, - 0x7857, 0xEDCD, 0x7858, 0xB37C, 0x7859, 0xB37D, 0x785A, 0xB37E, - 0x785B, 0xB380, 0x785C, 0xB381, 0x785D, 0xCFF5, 0x785E, 0xB382, - 0x785F, 0xB383, 0x7860, 0xB384, 0x7861, 0xB385, 0x7862, 0xB386, - 0x7863, 0xB387, 0x7864, 0xB388, 0x7865, 0xB389, 0x7866, 0xB38A, - 0x7867, 0xB38B, 0x7868, 0xB38C, 0x7869, 0xB38D, 0x786A, 0xEDD2, - 0x786B, 0xC1F2, 0x786C, 0xD3B2, 0x786D, 0xEDCB, 0x786E, 0xC8B7, - 0x786F, 0xB38E, 0x7870, 0xB38F, 0x7871, 0xB390, 0x7872, 0xB391, - 0x7873, 0xB392, 0x7874, 0xB393, 0x7875, 0xB394, 0x7876, 0xB395, - 0x7877, 0xBCEF, 0x7878, 0xB396, 0x7879, 0xB397, 0x787A, 0xB398, - 0x787B, 0xB399, 0x787C, 0xC5F0, 0x787D, 0xB39A, 0x787E, 0xB39B, - 0x787F, 0xB39C, 0x7880, 0xB39D, 0x7881, 0xB39E, 0x7882, 0xB39F, - 0x7883, 0xB3A0, 0x7884, 0xB440, 0x7885, 0xB441, 0x7886, 0xB442, - 0x7887, 0xEDD6, 0x7888, 0xB443, 0x7889, 0xB5EF, 0x788A, 0xB444, - 0x788B, 0xB445, 0x788C, 0xC2B5, 0x788D, 0xB0AD, 0x788E, 0xCBE9, - 0x788F, 0xB446, 0x7890, 0xB447, 0x7891, 0xB1AE, 0x7892, 0xB448, - 0x7893, 0xEDD4, 0x7894, 0xB449, 0x7895, 0xB44A, 0x7896, 0xB44B, - 0x7897, 0xCDEB, 0x7898, 0xB5E2, 0x7899, 0xB44C, 0x789A, 0xEDD5, - 0x789B, 0xEDD3, 0x789C, 0xEDD7, 0x789D, 0xB44D, 0x789E, 0xB44E, - 0x789F, 0xB5FA, 0x78A0, 0xB44F, 0x78A1, 0xEDD8, 0x78A2, 0xB450, - 0x78A3, 0xEDD9, 0x78A4, 0xB451, 0x78A5, 0xEDDC, 0x78A6, 0xB452, - 0x78A7, 0xB1CC, 0x78A8, 0xB453, 0x78A9, 0xB454, 0x78AA, 0xB455, - 0x78AB, 0xB456, 0x78AC, 0xB457, 0x78AD, 0xB458, 0x78AE, 0xB459, - 0x78AF, 0xB45A, 0x78B0, 0xC5F6, 0x78B1, 0xBCEE, 0x78B2, 0xEDDA, - 0x78B3, 0xCCBC, 0x78B4, 0xB2EA, 0x78B5, 0xB45B, 0x78B6, 0xB45C, - 0x78B7, 0xB45D, 0x78B8, 0xB45E, 0x78B9, 0xEDDB, 0x78BA, 0xB45F, - 0x78BB, 0xB460, 0x78BC, 0xB461, 0x78BD, 0xB462, 0x78BE, 0xC4EB, - 0x78BF, 0xB463, 0x78C0, 0xB464, 0x78C1, 0xB4C5, 0x78C2, 0xB465, - 0x78C3, 0xB466, 0x78C4, 0xB467, 0x78C5, 0xB0F5, 0x78C6, 0xB468, - 0x78C7, 0xB469, 0x78C8, 0xB46A, 0x78C9, 0xEDDF, 0x78CA, 0xC0DA, - 0x78CB, 0xB4E8, 0x78CC, 0xB46B, 0x78CD, 0xB46C, 0x78CE, 0xB46D, - 0x78CF, 0xB46E, 0x78D0, 0xC5CD, 0x78D1, 0xB46F, 0x78D2, 0xB470, - 0x78D3, 0xB471, 0x78D4, 0xEDDD, 0x78D5, 0xBFC4, 0x78D6, 0xB472, - 0x78D7, 0xB473, 0x78D8, 0xB474, 0x78D9, 0xEDDE, 0x78DA, 0xB475, - 0x78DB, 0xB476, 0x78DC, 0xB477, 0x78DD, 0xB478, 0x78DE, 0xB479, - 0x78DF, 0xB47A, 0x78E0, 0xB47B, 0x78E1, 0xB47C, 0x78E2, 0xB47D, - 0x78E3, 0xB47E, 0x78E4, 0xB480, 0x78E5, 0xB481, 0x78E6, 0xB482, - 0x78E7, 0xB483, 0x78E8, 0xC4A5, 0x78E9, 0xB484, 0x78EA, 0xB485, - 0x78EB, 0xB486, 0x78EC, 0xEDE0, 0x78ED, 0xB487, 0x78EE, 0xB488, - 0x78EF, 0xB489, 0x78F0, 0xB48A, 0x78F1, 0xB48B, 0x78F2, 0xEDE1, - 0x78F3, 0xB48C, 0x78F4, 0xEDE3, 0x78F5, 0xB48D, 0x78F6, 0xB48E, - 0x78F7, 0xC1D7, 0x78F8, 0xB48F, 0x78F9, 0xB490, 0x78FA, 0xBBC7, - 0x78FB, 0xB491, 0x78FC, 0xB492, 0x78FD, 0xB493, 0x78FE, 0xB494, - 0x78FF, 0xB495, 0x7900, 0xB496, 0x7901, 0xBDB8, 0x7902, 0xB497, - 0x7903, 0xB498, 0x7904, 0xB499, 0x7905, 0xEDE2, 0x7906, 0xB49A, - 0x7907, 0xB49B, 0x7908, 0xB49C, 0x7909, 0xB49D, 0x790A, 0xB49E, - 0x790B, 0xB49F, 0x790C, 0xB4A0, 0x790D, 0xB540, 0x790E, 0xB541, - 0x790F, 0xB542, 0x7910, 0xB543, 0x7911, 0xB544, 0x7912, 0xB545, - 0x7913, 0xEDE4, 0x7914, 0xB546, 0x7915, 0xB547, 0x7916, 0xB548, - 0x7917, 0xB549, 0x7918, 0xB54A, 0x7919, 0xB54B, 0x791A, 0xB54C, - 0x791B, 0xB54D, 0x791C, 0xB54E, 0x791D, 0xB54F, 0x791E, 0xEDE6, - 0x791F, 0xB550, 0x7920, 0xB551, 0x7921, 0xB552, 0x7922, 0xB553, - 0x7923, 0xB554, 0x7924, 0xEDE5, 0x7925, 0xB555, 0x7926, 0xB556, - 0x7927, 0xB557, 0x7928, 0xB558, 0x7929, 0xB559, 0x792A, 0xB55A, - 0x792B, 0xB55B, 0x792C, 0xB55C, 0x792D, 0xB55D, 0x792E, 0xB55E, - 0x792F, 0xB55F, 0x7930, 0xB560, 0x7931, 0xB561, 0x7932, 0xB562, - 0x7933, 0xB563, 0x7934, 0xEDE7, 0x7935, 0xB564, 0x7936, 0xB565, - 0x7937, 0xB566, 0x7938, 0xB567, 0x7939, 0xB568, 0x793A, 0xCABE, - 0x793B, 0xECEA, 0x793C, 0xC0F1, 0x793D, 0xB569, 0x793E, 0xC9E7, - 0x793F, 0xB56A, 0x7940, 0xECEB, 0x7941, 0xC6EE, 0x7942, 0xB56B, - 0x7943, 0xB56C, 0x7944, 0xB56D, 0x7945, 0xB56E, 0x7946, 0xECEC, - 0x7947, 0xB56F, 0x7948, 0xC6ED, 0x7949, 0xECED, 0x794A, 0xB570, - 0x794B, 0xB571, 0x794C, 0xB572, 0x794D, 0xB573, 0x794E, 0xB574, - 0x794F, 0xB575, 0x7950, 0xB576, 0x7951, 0xB577, 0x7952, 0xB578, - 0x7953, 0xECF0, 0x7954, 0xB579, 0x7955, 0xB57A, 0x7956, 0xD7E6, - 0x7957, 0xECF3, 0x7958, 0xB57B, 0x7959, 0xB57C, 0x795A, 0xECF1, - 0x795B, 0xECEE, 0x795C, 0xECEF, 0x795D, 0xD7A3, 0x795E, 0xC9F1, - 0x795F, 0xCBEE, 0x7960, 0xECF4, 0x7961, 0xB57D, 0x7962, 0xECF2, - 0x7963, 0xB57E, 0x7964, 0xB580, 0x7965, 0xCFE9, 0x7966, 0xB581, - 0x7967, 0xECF6, 0x7968, 0xC6B1, 0x7969, 0xB582, 0x796A, 0xB583, - 0x796B, 0xB584, 0x796C, 0xB585, 0x796D, 0xBCC0, 0x796E, 0xB586, - 0x796F, 0xECF5, 0x7970, 0xB587, 0x7971, 0xB588, 0x7972, 0xB589, - 0x7973, 0xB58A, 0x7974, 0xB58B, 0x7975, 0xB58C, 0x7976, 0xB58D, - 0x7977, 0xB5BB, 0x7978, 0xBBF6, 0x7979, 0xB58E, 0x797A, 0xECF7, - 0x797B, 0xB58F, 0x797C, 0xB590, 0x797D, 0xB591, 0x797E, 0xB592, - 0x797F, 0xB593, 0x7980, 0xD9F7, 0x7981, 0xBDFB, 0x7982, 0xB594, - 0x7983, 0xB595, 0x7984, 0xC2BB, 0x7985, 0xECF8, 0x7986, 0xB596, - 0x7987, 0xB597, 0x7988, 0xB598, 0x7989, 0xB599, 0x798A, 0xECF9, - 0x798B, 0xB59A, 0x798C, 0xB59B, 0x798D, 0xB59C, 0x798E, 0xB59D, - 0x798F, 0xB8A3, 0x7990, 0xB59E, 0x7991, 0xB59F, 0x7992, 0xB5A0, - 0x7993, 0xB640, 0x7994, 0xB641, 0x7995, 0xB642, 0x7996, 0xB643, - 0x7997, 0xB644, 0x7998, 0xB645, 0x7999, 0xB646, 0x799A, 0xECFA, - 0x799B, 0xB647, 0x799C, 0xB648, 0x799D, 0xB649, 0x799E, 0xB64A, - 0x799F, 0xB64B, 0x79A0, 0xB64C, 0x79A1, 0xB64D, 0x79A2, 0xB64E, - 0x79A3, 0xB64F, 0x79A4, 0xB650, 0x79A5, 0xB651, 0x79A6, 0xB652, - 0x79A7, 0xECFB, 0x79A8, 0xB653, 0x79A9, 0xB654, 0x79AA, 0xB655, - 0x79AB, 0xB656, 0x79AC, 0xB657, 0x79AD, 0xB658, 0x79AE, 0xB659, - 0x79AF, 0xB65A, 0x79B0, 0xB65B, 0x79B1, 0xB65C, 0x79B2, 0xB65D, - 0x79B3, 0xECFC, 0x79B4, 0xB65E, 0x79B5, 0xB65F, 0x79B6, 0xB660, - 0x79B7, 0xB661, 0x79B8, 0xB662, 0x79B9, 0xD3ED, 0x79BA, 0xD8AE, - 0x79BB, 0xC0EB, 0x79BC, 0xB663, 0x79BD, 0xC7DD, 0x79BE, 0xBACC, - 0x79BF, 0xB664, 0x79C0, 0xD0E3, 0x79C1, 0xCBBD, 0x79C2, 0xB665, - 0x79C3, 0xCDBA, 0x79C4, 0xB666, 0x79C5, 0xB667, 0x79C6, 0xB8D1, - 0x79C7, 0xB668, 0x79C8, 0xB669, 0x79C9, 0xB1FC, 0x79CA, 0xB66A, - 0x79CB, 0xC7EF, 0x79CC, 0xB66B, 0x79CD, 0xD6D6, 0x79CE, 0xB66C, - 0x79CF, 0xB66D, 0x79D0, 0xB66E, 0x79D1, 0xBFC6, 0x79D2, 0xC3EB, - 0x79D3, 0xB66F, 0x79D4, 0xB670, 0x79D5, 0xEFF5, 0x79D6, 0xB671, - 0x79D7, 0xB672, 0x79D8, 0xC3D8, 0x79D9, 0xB673, 0x79DA, 0xB674, - 0x79DB, 0xB675, 0x79DC, 0xB676, 0x79DD, 0xB677, 0x79DE, 0xB678, - 0x79DF, 0xD7E2, 0x79E0, 0xB679, 0x79E1, 0xB67A, 0x79E2, 0xB67B, - 0x79E3, 0xEFF7, 0x79E4, 0xB3D3, 0x79E5, 0xB67C, 0x79E6, 0xC7D8, - 0x79E7, 0xD1ED, 0x79E8, 0xB67D, 0x79E9, 0xD6C8, 0x79EA, 0xB67E, - 0x79EB, 0xEFF8, 0x79EC, 0xB680, 0x79ED, 0xEFF6, 0x79EE, 0xB681, - 0x79EF, 0xBBFD, 0x79F0, 0xB3C6, 0x79F1, 0xB682, 0x79F2, 0xB683, - 0x79F3, 0xB684, 0x79F4, 0xB685, 0x79F5, 0xB686, 0x79F6, 0xB687, - 0x79F7, 0xB688, 0x79F8, 0xBDD5, 0x79F9, 0xB689, 0x79FA, 0xB68A, - 0x79FB, 0xD2C6, 0x79FC, 0xB68B, 0x79FD, 0xBBE0, 0x79FE, 0xB68C, - 0x79FF, 0xB68D, 0x7A00, 0xCFA1, 0x7A01, 0xB68E, 0x7A02, 0xEFFC, - 0x7A03, 0xEFFB, 0x7A04, 0xB68F, 0x7A05, 0xB690, 0x7A06, 0xEFF9, - 0x7A07, 0xB691, 0x7A08, 0xB692, 0x7A09, 0xB693, 0x7A0A, 0xB694, - 0x7A0B, 0xB3CC, 0x7A0C, 0xB695, 0x7A0D, 0xC9D4, 0x7A0E, 0xCBB0, - 0x7A0F, 0xB696, 0x7A10, 0xB697, 0x7A11, 0xB698, 0x7A12, 0xB699, - 0x7A13, 0xB69A, 0x7A14, 0xEFFE, 0x7A15, 0xB69B, 0x7A16, 0xB69C, - 0x7A17, 0xB0DE, 0x7A18, 0xB69D, 0x7A19, 0xB69E, 0x7A1A, 0xD6C9, - 0x7A1B, 0xB69F, 0x7A1C, 0xB6A0, 0x7A1D, 0xB740, 0x7A1E, 0xEFFD, - 0x7A1F, 0xB741, 0x7A20, 0xB3ED, 0x7A21, 0xB742, 0x7A22, 0xB743, - 0x7A23, 0xF6D5, 0x7A24, 0xB744, 0x7A25, 0xB745, 0x7A26, 0xB746, - 0x7A27, 0xB747, 0x7A28, 0xB748, 0x7A29, 0xB749, 0x7A2A, 0xB74A, - 0x7A2B, 0xB74B, 0x7A2C, 0xB74C, 0x7A2D, 0xB74D, 0x7A2E, 0xB74E, - 0x7A2F, 0xB74F, 0x7A30, 0xB750, 0x7A31, 0xB751, 0x7A32, 0xB752, - 0x7A33, 0xCEC8, 0x7A34, 0xB753, 0x7A35, 0xB754, 0x7A36, 0xB755, - 0x7A37, 0xF0A2, 0x7A38, 0xB756, 0x7A39, 0xF0A1, 0x7A3A, 0xB757, - 0x7A3B, 0xB5BE, 0x7A3C, 0xBCDA, 0x7A3D, 0xBBFC, 0x7A3E, 0xB758, - 0x7A3F, 0xB8E5, 0x7A40, 0xB759, 0x7A41, 0xB75A, 0x7A42, 0xB75B, - 0x7A43, 0xB75C, 0x7A44, 0xB75D, 0x7A45, 0xB75E, 0x7A46, 0xC4C2, - 0x7A47, 0xB75F, 0x7A48, 0xB760, 0x7A49, 0xB761, 0x7A4A, 0xB762, - 0x7A4B, 0xB763, 0x7A4C, 0xB764, 0x7A4D, 0xB765, 0x7A4E, 0xB766, - 0x7A4F, 0xB767, 0x7A50, 0xB768, 0x7A51, 0xF0A3, 0x7A52, 0xB769, - 0x7A53, 0xB76A, 0x7A54, 0xB76B, 0x7A55, 0xB76C, 0x7A56, 0xB76D, - 0x7A57, 0xCBEB, 0x7A58, 0xB76E, 0x7A59, 0xB76F, 0x7A5A, 0xB770, - 0x7A5B, 0xB771, 0x7A5C, 0xB772, 0x7A5D, 0xB773, 0x7A5E, 0xB774, - 0x7A5F, 0xB775, 0x7A60, 0xB776, 0x7A61, 0xB777, 0x7A62, 0xB778, - 0x7A63, 0xB779, 0x7A64, 0xB77A, 0x7A65, 0xB77B, 0x7A66, 0xB77C, - 0x7A67, 0xB77D, 0x7A68, 0xB77E, 0x7A69, 0xB780, 0x7A6A, 0xB781, - 0x7A6B, 0xB782, 0x7A6C, 0xB783, 0x7A6D, 0xB784, 0x7A6E, 0xB785, - 0x7A6F, 0xB786, 0x7A70, 0xF0A6, 0x7A71, 0xB787, 0x7A72, 0xB788, - 0x7A73, 0xB789, 0x7A74, 0xD1A8, 0x7A75, 0xB78A, 0x7A76, 0xBEBF, - 0x7A77, 0xC7EE, 0x7A78, 0xF1B6, 0x7A79, 0xF1B7, 0x7A7A, 0xBFD5, - 0x7A7B, 0xB78B, 0x7A7C, 0xB78C, 0x7A7D, 0xB78D, 0x7A7E, 0xB78E, - 0x7A7F, 0xB4A9, 0x7A80, 0xF1B8, 0x7A81, 0xCDBB, 0x7A82, 0xB78F, - 0x7A83, 0xC7D4, 0x7A84, 0xD5AD, 0x7A85, 0xB790, 0x7A86, 0xF1B9, - 0x7A87, 0xB791, 0x7A88, 0xF1BA, 0x7A89, 0xB792, 0x7A8A, 0xB793, - 0x7A8B, 0xB794, 0x7A8C, 0xB795, 0x7A8D, 0xC7CF, 0x7A8E, 0xB796, - 0x7A8F, 0xB797, 0x7A90, 0xB798, 0x7A91, 0xD2A4, 0x7A92, 0xD6CF, - 0x7A93, 0xB799, 0x7A94, 0xB79A, 0x7A95, 0xF1BB, 0x7A96, 0xBDD1, - 0x7A97, 0xB4B0, 0x7A98, 0xBEBD, 0x7A99, 0xB79B, 0x7A9A, 0xB79C, - 0x7A9B, 0xB79D, 0x7A9C, 0xB4DC, 0x7A9D, 0xCED1, 0x7A9E, 0xB79E, - 0x7A9F, 0xBFDF, 0x7AA0, 0xF1BD, 0x7AA1, 0xB79F, 0x7AA2, 0xB7A0, - 0x7AA3, 0xB840, 0x7AA4, 0xB841, 0x7AA5, 0xBFFA, 0x7AA6, 0xF1BC, - 0x7AA7, 0xB842, 0x7AA8, 0xF1BF, 0x7AA9, 0xB843, 0x7AAA, 0xB844, - 0x7AAB, 0xB845, 0x7AAC, 0xF1BE, 0x7AAD, 0xF1C0, 0x7AAE, 0xB846, - 0x7AAF, 0xB847, 0x7AB0, 0xB848, 0x7AB1, 0xB849, 0x7AB2, 0xB84A, - 0x7AB3, 0xF1C1, 0x7AB4, 0xB84B, 0x7AB5, 0xB84C, 0x7AB6, 0xB84D, - 0x7AB7, 0xB84E, 0x7AB8, 0xB84F, 0x7AB9, 0xB850, 0x7ABA, 0xB851, - 0x7ABB, 0xB852, 0x7ABC, 0xB853, 0x7ABD, 0xB854, 0x7ABE, 0xB855, - 0x7ABF, 0xC1FE, 0x7AC0, 0xB856, 0x7AC1, 0xB857, 0x7AC2, 0xB858, - 0x7AC3, 0xB859, 0x7AC4, 0xB85A, 0x7AC5, 0xB85B, 0x7AC6, 0xB85C, - 0x7AC7, 0xB85D, 0x7AC8, 0xB85E, 0x7AC9, 0xB85F, 0x7ACA, 0xB860, - 0x7ACB, 0xC1A2, 0x7ACC, 0xB861, 0x7ACD, 0xB862, 0x7ACE, 0xB863, - 0x7ACF, 0xB864, 0x7AD0, 0xB865, 0x7AD1, 0xB866, 0x7AD2, 0xB867, - 0x7AD3, 0xB868, 0x7AD4, 0xB869, 0x7AD5, 0xB86A, 0x7AD6, 0xCAFA, - 0x7AD7, 0xB86B, 0x7AD8, 0xB86C, 0x7AD9, 0xD5BE, 0x7ADA, 0xB86D, - 0x7ADB, 0xB86E, 0x7ADC, 0xB86F, 0x7ADD, 0xB870, 0x7ADE, 0xBEBA, - 0x7ADF, 0xBEB9, 0x7AE0, 0xD5C2, 0x7AE1, 0xB871, 0x7AE2, 0xB872, - 0x7AE3, 0xBFA2, 0x7AE4, 0xB873, 0x7AE5, 0xCDAF, 0x7AE6, 0xF1B5, - 0x7AE7, 0xB874, 0x7AE8, 0xB875, 0x7AE9, 0xB876, 0x7AEA, 0xB877, - 0x7AEB, 0xB878, 0x7AEC, 0xB879, 0x7AED, 0xBDDF, 0x7AEE, 0xB87A, - 0x7AEF, 0xB6CB, 0x7AF0, 0xB87B, 0x7AF1, 0xB87C, 0x7AF2, 0xB87D, - 0x7AF3, 0xB87E, 0x7AF4, 0xB880, 0x7AF5, 0xB881, 0x7AF6, 0xB882, - 0x7AF7, 0xB883, 0x7AF8, 0xB884, 0x7AF9, 0xD6F1, 0x7AFA, 0xF3C3, - 0x7AFB, 0xB885, 0x7AFC, 0xB886, 0x7AFD, 0xF3C4, 0x7AFE, 0xB887, - 0x7AFF, 0xB8CD, 0x7B00, 0xB888, 0x7B01, 0xB889, 0x7B02, 0xB88A, - 0x7B03, 0xF3C6, 0x7B04, 0xF3C7, 0x7B05, 0xB88B, 0x7B06, 0xB0CA, - 0x7B07, 0xB88C, 0x7B08, 0xF3C5, 0x7B09, 0xB88D, 0x7B0A, 0xF3C9, - 0x7B0B, 0xCBF1, 0x7B0C, 0xB88E, 0x7B0D, 0xB88F, 0x7B0E, 0xB890, - 0x7B0F, 0xF3CB, 0x7B10, 0xB891, 0x7B11, 0xD0A6, 0x7B12, 0xB892, - 0x7B13, 0xB893, 0x7B14, 0xB1CA, 0x7B15, 0xF3C8, 0x7B16, 0xB894, - 0x7B17, 0xB895, 0x7B18, 0xB896, 0x7B19, 0xF3CF, 0x7B1A, 0xB897, - 0x7B1B, 0xB5D1, 0x7B1C, 0xB898, 0x7B1D, 0xB899, 0x7B1E, 0xF3D7, - 0x7B1F, 0xB89A, 0x7B20, 0xF3D2, 0x7B21, 0xB89B, 0x7B22, 0xB89C, - 0x7B23, 0xB89D, 0x7B24, 0xF3D4, 0x7B25, 0xF3D3, 0x7B26, 0xB7FB, - 0x7B27, 0xB89E, 0x7B28, 0xB1BF, 0x7B29, 0xB89F, 0x7B2A, 0xF3CE, - 0x7B2B, 0xF3CA, 0x7B2C, 0xB5DA, 0x7B2D, 0xB8A0, 0x7B2E, 0xF3D0, - 0x7B2F, 0xB940, 0x7B30, 0xB941, 0x7B31, 0xF3D1, 0x7B32, 0xB942, - 0x7B33, 0xF3D5, 0x7B34, 0xB943, 0x7B35, 0xB944, 0x7B36, 0xB945, - 0x7B37, 0xB946, 0x7B38, 0xF3CD, 0x7B39, 0xB947, 0x7B3A, 0xBCE3, - 0x7B3B, 0xB948, 0x7B3C, 0xC1FD, 0x7B3D, 0xB949, 0x7B3E, 0xF3D6, - 0x7B3F, 0xB94A, 0x7B40, 0xB94B, 0x7B41, 0xB94C, 0x7B42, 0xB94D, - 0x7B43, 0xB94E, 0x7B44, 0xB94F, 0x7B45, 0xF3DA, 0x7B46, 0xB950, - 0x7B47, 0xF3CC, 0x7B48, 0xB951, 0x7B49, 0xB5C8, 0x7B4A, 0xB952, - 0x7B4B, 0xBDEE, 0x7B4C, 0xF3DC, 0x7B4D, 0xB953, 0x7B4E, 0xB954, - 0x7B4F, 0xB7A4, 0x7B50, 0xBFF0, 0x7B51, 0xD6FE, 0x7B52, 0xCDB2, - 0x7B53, 0xB955, 0x7B54, 0xB4F0, 0x7B55, 0xB956, 0x7B56, 0xB2DF, - 0x7B57, 0xB957, 0x7B58, 0xF3D8, 0x7B59, 0xB958, 0x7B5A, 0xF3D9, - 0x7B5B, 0xC9B8, 0x7B5C, 0xB959, 0x7B5D, 0xF3DD, 0x7B5E, 0xB95A, - 0x7B5F, 0xB95B, 0x7B60, 0xF3DE, 0x7B61, 0xB95C, 0x7B62, 0xF3E1, - 0x7B63, 0xB95D, 0x7B64, 0xB95E, 0x7B65, 0xB95F, 0x7B66, 0xB960, - 0x7B67, 0xB961, 0x7B68, 0xB962, 0x7B69, 0xB963, 0x7B6A, 0xB964, - 0x7B6B, 0xB965, 0x7B6C, 0xB966, 0x7B6D, 0xB967, 0x7B6E, 0xF3DF, - 0x7B6F, 0xB968, 0x7B70, 0xB969, 0x7B71, 0xF3E3, 0x7B72, 0xF3E2, - 0x7B73, 0xB96A, 0x7B74, 0xB96B, 0x7B75, 0xF3DB, 0x7B76, 0xB96C, - 0x7B77, 0xBFEA, 0x7B78, 0xB96D, 0x7B79, 0xB3EF, 0x7B7A, 0xB96E, - 0x7B7B, 0xF3E0, 0x7B7C, 0xB96F, 0x7B7D, 0xB970, 0x7B7E, 0xC7A9, - 0x7B7F, 0xB971, 0x7B80, 0xBCF2, 0x7B81, 0xB972, 0x7B82, 0xB973, - 0x7B83, 0xB974, 0x7B84, 0xB975, 0x7B85, 0xF3EB, 0x7B86, 0xB976, - 0x7B87, 0xB977, 0x7B88, 0xB978, 0x7B89, 0xB979, 0x7B8A, 0xB97A, - 0x7B8B, 0xB97B, 0x7B8C, 0xB97C, 0x7B8D, 0xB9BF, 0x7B8E, 0xB97D, - 0x7B8F, 0xB97E, 0x7B90, 0xF3E4, 0x7B91, 0xB980, 0x7B92, 0xB981, - 0x7B93, 0xB982, 0x7B94, 0xB2AD, 0x7B95, 0xBBFE, 0x7B96, 0xB983, - 0x7B97, 0xCBE3, 0x7B98, 0xB984, 0x7B99, 0xB985, 0x7B9A, 0xB986, - 0x7B9B, 0xB987, 0x7B9C, 0xF3ED, 0x7B9D, 0xF3E9, 0x7B9E, 0xB988, - 0x7B9F, 0xB989, 0x7BA0, 0xB98A, 0x7BA1, 0xB9DC, 0x7BA2, 0xF3EE, - 0x7BA3, 0xB98B, 0x7BA4, 0xB98C, 0x7BA5, 0xB98D, 0x7BA6, 0xF3E5, - 0x7BA7, 0xF3E6, 0x7BA8, 0xF3EA, 0x7BA9, 0xC2E1, 0x7BAA, 0xF3EC, - 0x7BAB, 0xF3EF, 0x7BAC, 0xF3E8, 0x7BAD, 0xBCFD, 0x7BAE, 0xB98E, - 0x7BAF, 0xB98F, 0x7BB0, 0xB990, 0x7BB1, 0xCFE4, 0x7BB2, 0xB991, - 0x7BB3, 0xB992, 0x7BB4, 0xF3F0, 0x7BB5, 0xB993, 0x7BB6, 0xB994, - 0x7BB7, 0xB995, 0x7BB8, 0xF3E7, 0x7BB9, 0xB996, 0x7BBA, 0xB997, - 0x7BBB, 0xB998, 0x7BBC, 0xB999, 0x7BBD, 0xB99A, 0x7BBE, 0xB99B, - 0x7BBF, 0xB99C, 0x7BC0, 0xB99D, 0x7BC1, 0xF3F2, 0x7BC2, 0xB99E, - 0x7BC3, 0xB99F, 0x7BC4, 0xB9A0, 0x7BC5, 0xBA40, 0x7BC6, 0xD7AD, - 0x7BC7, 0xC6AA, 0x7BC8, 0xBA41, 0x7BC9, 0xBA42, 0x7BCA, 0xBA43, - 0x7BCB, 0xBA44, 0x7BCC, 0xF3F3, 0x7BCD, 0xBA45, 0x7BCE, 0xBA46, - 0x7BCF, 0xBA47, 0x7BD0, 0xBA48, 0x7BD1, 0xF3F1, 0x7BD2, 0xBA49, - 0x7BD3, 0xC2A8, 0x7BD4, 0xBA4A, 0x7BD5, 0xBA4B, 0x7BD6, 0xBA4C, - 0x7BD7, 0xBA4D, 0x7BD8, 0xBA4E, 0x7BD9, 0xB8DD, 0x7BDA, 0xF3F5, - 0x7BDB, 0xBA4F, 0x7BDC, 0xBA50, 0x7BDD, 0xF3F4, 0x7BDE, 0xBA51, - 0x7BDF, 0xBA52, 0x7BE0, 0xBA53, 0x7BE1, 0xB4DB, 0x7BE2, 0xBA54, - 0x7BE3, 0xBA55, 0x7BE4, 0xBA56, 0x7BE5, 0xF3F6, 0x7BE6, 0xF3F7, - 0x7BE7, 0xBA57, 0x7BE8, 0xBA58, 0x7BE9, 0xBA59, 0x7BEA, 0xF3F8, - 0x7BEB, 0xBA5A, 0x7BEC, 0xBA5B, 0x7BED, 0xBA5C, 0x7BEE, 0xC0BA, - 0x7BEF, 0xBA5D, 0x7BF0, 0xBA5E, 0x7BF1, 0xC0E9, 0x7BF2, 0xBA5F, - 0x7BF3, 0xBA60, 0x7BF4, 0xBA61, 0x7BF5, 0xBA62, 0x7BF6, 0xBA63, - 0x7BF7, 0xC5F1, 0x7BF8, 0xBA64, 0x7BF9, 0xBA65, 0x7BFA, 0xBA66, - 0x7BFB, 0xBA67, 0x7BFC, 0xF3FB, 0x7BFD, 0xBA68, 0x7BFE, 0xF3FA, - 0x7BFF, 0xBA69, 0x7C00, 0xBA6A, 0x7C01, 0xBA6B, 0x7C02, 0xBA6C, - 0x7C03, 0xBA6D, 0x7C04, 0xBA6E, 0x7C05, 0xBA6F, 0x7C06, 0xBA70, - 0x7C07, 0xB4D8, 0x7C08, 0xBA71, 0x7C09, 0xBA72, 0x7C0A, 0xBA73, - 0x7C0B, 0xF3FE, 0x7C0C, 0xF3F9, 0x7C0D, 0xBA74, 0x7C0E, 0xBA75, - 0x7C0F, 0xF3FC, 0x7C10, 0xBA76, 0x7C11, 0xBA77, 0x7C12, 0xBA78, - 0x7C13, 0xBA79, 0x7C14, 0xBA7A, 0x7C15, 0xBA7B, 0x7C16, 0xF3FD, - 0x7C17, 0xBA7C, 0x7C18, 0xBA7D, 0x7C19, 0xBA7E, 0x7C1A, 0xBA80, - 0x7C1B, 0xBA81, 0x7C1C, 0xBA82, 0x7C1D, 0xBA83, 0x7C1E, 0xBA84, - 0x7C1F, 0xF4A1, 0x7C20, 0xBA85, 0x7C21, 0xBA86, 0x7C22, 0xBA87, - 0x7C23, 0xBA88, 0x7C24, 0xBA89, 0x7C25, 0xBA8A, 0x7C26, 0xF4A3, - 0x7C27, 0xBBC9, 0x7C28, 0xBA8B, 0x7C29, 0xBA8C, 0x7C2A, 0xF4A2, - 0x7C2B, 0xBA8D, 0x7C2C, 0xBA8E, 0x7C2D, 0xBA8F, 0x7C2E, 0xBA90, - 0x7C2F, 0xBA91, 0x7C30, 0xBA92, 0x7C31, 0xBA93, 0x7C32, 0xBA94, - 0x7C33, 0xBA95, 0x7C34, 0xBA96, 0x7C35, 0xBA97, 0x7C36, 0xBA98, - 0x7C37, 0xBA99, 0x7C38, 0xF4A4, 0x7C39, 0xBA9A, 0x7C3A, 0xBA9B, - 0x7C3B, 0xBA9C, 0x7C3C, 0xBA9D, 0x7C3D, 0xBA9E, 0x7C3E, 0xBA9F, - 0x7C3F, 0xB2BE, 0x7C40, 0xF4A6, 0x7C41, 0xF4A5, 0x7C42, 0xBAA0, - 0x7C43, 0xBB40, 0x7C44, 0xBB41, 0x7C45, 0xBB42, 0x7C46, 0xBB43, - 0x7C47, 0xBB44, 0x7C48, 0xBB45, 0x7C49, 0xBB46, 0x7C4A, 0xBB47, - 0x7C4B, 0xBB48, 0x7C4C, 0xBB49, 0x7C4D, 0xBCAE, 0x7C4E, 0xBB4A, - 0x7C4F, 0xBB4B, 0x7C50, 0xBB4C, 0x7C51, 0xBB4D, 0x7C52, 0xBB4E, - 0x7C53, 0xBB4F, 0x7C54, 0xBB50, 0x7C55, 0xBB51, 0x7C56, 0xBB52, - 0x7C57, 0xBB53, 0x7C58, 0xBB54, 0x7C59, 0xBB55, 0x7C5A, 0xBB56, - 0x7C5B, 0xBB57, 0x7C5C, 0xBB58, 0x7C5D, 0xBB59, 0x7C5E, 0xBB5A, - 0x7C5F, 0xBB5B, 0x7C60, 0xBB5C, 0x7C61, 0xBB5D, 0x7C62, 0xBB5E, - 0x7C63, 0xBB5F, 0x7C64, 0xBB60, 0x7C65, 0xBB61, 0x7C66, 0xBB62, - 0x7C67, 0xBB63, 0x7C68, 0xBB64, 0x7C69, 0xBB65, 0x7C6A, 0xBB66, - 0x7C6B, 0xBB67, 0x7C6C, 0xBB68, 0x7C6D, 0xBB69, 0x7C6E, 0xBB6A, - 0x7C6F, 0xBB6B, 0x7C70, 0xBB6C, 0x7C71, 0xBB6D, 0x7C72, 0xBB6E, - 0x7C73, 0xC3D7, 0x7C74, 0xD9E1, 0x7C75, 0xBB6F, 0x7C76, 0xBB70, - 0x7C77, 0xBB71, 0x7C78, 0xBB72, 0x7C79, 0xBB73, 0x7C7A, 0xBB74, - 0x7C7B, 0xC0E0, 0x7C7C, 0xF4CC, 0x7C7D, 0xD7D1, 0x7C7E, 0xBB75, - 0x7C7F, 0xBB76, 0x7C80, 0xBB77, 0x7C81, 0xBB78, 0x7C82, 0xBB79, - 0x7C83, 0xBB7A, 0x7C84, 0xBB7B, 0x7C85, 0xBB7C, 0x7C86, 0xBB7D, - 0x7C87, 0xBB7E, 0x7C88, 0xBB80, 0x7C89, 0xB7DB, 0x7C8A, 0xBB81, - 0x7C8B, 0xBB82, 0x7C8C, 0xBB83, 0x7C8D, 0xBB84, 0x7C8E, 0xBB85, - 0x7C8F, 0xBB86, 0x7C90, 0xBB87, 0x7C91, 0xF4CE, 0x7C92, 0xC1A3, - 0x7C93, 0xBB88, 0x7C94, 0xBB89, 0x7C95, 0xC6C9, 0x7C96, 0xBB8A, - 0x7C97, 0xB4D6, 0x7C98, 0xD5B3, 0x7C99, 0xBB8B, 0x7C9A, 0xBB8C, - 0x7C9B, 0xBB8D, 0x7C9C, 0xF4D0, 0x7C9D, 0xF4CF, 0x7C9E, 0xF4D1, - 0x7C9F, 0xCBDA, 0x7CA0, 0xBB8E, 0x7CA1, 0xBB8F, 0x7CA2, 0xF4D2, - 0x7CA3, 0xBB90, 0x7CA4, 0xD4C1, 0x7CA5, 0xD6E0, 0x7CA6, 0xBB91, - 0x7CA7, 0xBB92, 0x7CA8, 0xBB93, 0x7CA9, 0xBB94, 0x7CAA, 0xB7E0, - 0x7CAB, 0xBB95, 0x7CAC, 0xBB96, 0x7CAD, 0xBB97, 0x7CAE, 0xC1B8, - 0x7CAF, 0xBB98, 0x7CB0, 0xBB99, 0x7CB1, 0xC1BB, 0x7CB2, 0xF4D3, - 0x7CB3, 0xBEAC, 0x7CB4, 0xBB9A, 0x7CB5, 0xBB9B, 0x7CB6, 0xBB9C, - 0x7CB7, 0xBB9D, 0x7CB8, 0xBB9E, 0x7CB9, 0xB4E2, 0x7CBA, 0xBB9F, - 0x7CBB, 0xBBA0, 0x7CBC, 0xF4D4, 0x7CBD, 0xF4D5, 0x7CBE, 0xBEAB, - 0x7CBF, 0xBC40, 0x7CC0, 0xBC41, 0x7CC1, 0xF4D6, 0x7CC2, 0xBC42, - 0x7CC3, 0xBC43, 0x7CC4, 0xBC44, 0x7CC5, 0xF4DB, 0x7CC6, 0xBC45, - 0x7CC7, 0xF4D7, 0x7CC8, 0xF4DA, 0x7CC9, 0xBC46, 0x7CCA, 0xBAFD, - 0x7CCB, 0xBC47, 0x7CCC, 0xF4D8, 0x7CCD, 0xF4D9, 0x7CCE, 0xBC48, - 0x7CCF, 0xBC49, 0x7CD0, 0xBC4A, 0x7CD1, 0xBC4B, 0x7CD2, 0xBC4C, - 0x7CD3, 0xBC4D, 0x7CD4, 0xBC4E, 0x7CD5, 0xB8E2, 0x7CD6, 0xCCC7, - 0x7CD7, 0xF4DC, 0x7CD8, 0xBC4F, 0x7CD9, 0xB2DA, 0x7CDA, 0xBC50, - 0x7CDB, 0xBC51, 0x7CDC, 0xC3D3, 0x7CDD, 0xBC52, 0x7CDE, 0xBC53, - 0x7CDF, 0xD4E3, 0x7CE0, 0xBFB7, 0x7CE1, 0xBC54, 0x7CE2, 0xBC55, - 0x7CE3, 0xBC56, 0x7CE4, 0xBC57, 0x7CE5, 0xBC58, 0x7CE6, 0xBC59, - 0x7CE7, 0xBC5A, 0x7CE8, 0xF4DD, 0x7CE9, 0xBC5B, 0x7CEA, 0xBC5C, - 0x7CEB, 0xBC5D, 0x7CEC, 0xBC5E, 0x7CED, 0xBC5F, 0x7CEE, 0xBC60, - 0x7CEF, 0xC5B4, 0x7CF0, 0xBC61, 0x7CF1, 0xBC62, 0x7CF2, 0xBC63, - 0x7CF3, 0xBC64, 0x7CF4, 0xBC65, 0x7CF5, 0xBC66, 0x7CF6, 0xBC67, - 0x7CF7, 0xBC68, 0x7CF8, 0xF4E9, 0x7CF9, 0xBC69, 0x7CFA, 0xBC6A, - 0x7CFB, 0xCFB5, 0x7CFC, 0xBC6B, 0x7CFD, 0xBC6C, 0x7CFE, 0xBC6D, - 0x7CFF, 0xBC6E, 0x7D00, 0xBC6F, 0x7D01, 0xBC70, 0x7D02, 0xBC71, - 0x7D03, 0xBC72, 0x7D04, 0xBC73, 0x7D05, 0xBC74, 0x7D06, 0xBC75, - 0x7D07, 0xBC76, 0x7D08, 0xBC77, 0x7D09, 0xBC78, 0x7D0A, 0xCEC9, - 0x7D0B, 0xBC79, 0x7D0C, 0xBC7A, 0x7D0D, 0xBC7B, 0x7D0E, 0xBC7C, - 0x7D0F, 0xBC7D, 0x7D10, 0xBC7E, 0x7D11, 0xBC80, 0x7D12, 0xBC81, - 0x7D13, 0xBC82, 0x7D14, 0xBC83, 0x7D15, 0xBC84, 0x7D16, 0xBC85, - 0x7D17, 0xBC86, 0x7D18, 0xBC87, 0x7D19, 0xBC88, 0x7D1A, 0xBC89, - 0x7D1B, 0xBC8A, 0x7D1C, 0xBC8B, 0x7D1D, 0xBC8C, 0x7D1E, 0xBC8D, - 0x7D1F, 0xBC8E, 0x7D20, 0xCBD8, 0x7D21, 0xBC8F, 0x7D22, 0xCBF7, - 0x7D23, 0xBC90, 0x7D24, 0xBC91, 0x7D25, 0xBC92, 0x7D26, 0xBC93, - 0x7D27, 0xBDF4, 0x7D28, 0xBC94, 0x7D29, 0xBC95, 0x7D2A, 0xBC96, - 0x7D2B, 0xD7CF, 0x7D2C, 0xBC97, 0x7D2D, 0xBC98, 0x7D2E, 0xBC99, - 0x7D2F, 0xC0DB, 0x7D30, 0xBC9A, 0x7D31, 0xBC9B, 0x7D32, 0xBC9C, - 0x7D33, 0xBC9D, 0x7D34, 0xBC9E, 0x7D35, 0xBC9F, 0x7D36, 0xBCA0, - 0x7D37, 0xBD40, 0x7D38, 0xBD41, 0x7D39, 0xBD42, 0x7D3A, 0xBD43, - 0x7D3B, 0xBD44, 0x7D3C, 0xBD45, 0x7D3D, 0xBD46, 0x7D3E, 0xBD47, - 0x7D3F, 0xBD48, 0x7D40, 0xBD49, 0x7D41, 0xBD4A, 0x7D42, 0xBD4B, - 0x7D43, 0xBD4C, 0x7D44, 0xBD4D, 0x7D45, 0xBD4E, 0x7D46, 0xBD4F, - 0x7D47, 0xBD50, 0x7D48, 0xBD51, 0x7D49, 0xBD52, 0x7D4A, 0xBD53, - 0x7D4B, 0xBD54, 0x7D4C, 0xBD55, 0x7D4D, 0xBD56, 0x7D4E, 0xBD57, - 0x7D4F, 0xBD58, 0x7D50, 0xBD59, 0x7D51, 0xBD5A, 0x7D52, 0xBD5B, - 0x7D53, 0xBD5C, 0x7D54, 0xBD5D, 0x7D55, 0xBD5E, 0x7D56, 0xBD5F, - 0x7D57, 0xBD60, 0x7D58, 0xBD61, 0x7D59, 0xBD62, 0x7D5A, 0xBD63, - 0x7D5B, 0xBD64, 0x7D5C, 0xBD65, 0x7D5D, 0xBD66, 0x7D5E, 0xBD67, - 0x7D5F, 0xBD68, 0x7D60, 0xBD69, 0x7D61, 0xBD6A, 0x7D62, 0xBD6B, - 0x7D63, 0xBD6C, 0x7D64, 0xBD6D, 0x7D65, 0xBD6E, 0x7D66, 0xBD6F, - 0x7D67, 0xBD70, 0x7D68, 0xBD71, 0x7D69, 0xBD72, 0x7D6A, 0xBD73, - 0x7D6B, 0xBD74, 0x7D6C, 0xBD75, 0x7D6D, 0xBD76, 0x7D6E, 0xD0F5, - 0x7D6F, 0xBD77, 0x7D70, 0xBD78, 0x7D71, 0xBD79, 0x7D72, 0xBD7A, - 0x7D73, 0xBD7B, 0x7D74, 0xBD7C, 0x7D75, 0xBD7D, 0x7D76, 0xBD7E, - 0x7D77, 0xF4EA, 0x7D78, 0xBD80, 0x7D79, 0xBD81, 0x7D7A, 0xBD82, - 0x7D7B, 0xBD83, 0x7D7C, 0xBD84, 0x7D7D, 0xBD85, 0x7D7E, 0xBD86, - 0x7D7F, 0xBD87, 0x7D80, 0xBD88, 0x7D81, 0xBD89, 0x7D82, 0xBD8A, - 0x7D83, 0xBD8B, 0x7D84, 0xBD8C, 0x7D85, 0xBD8D, 0x7D86, 0xBD8E, - 0x7D87, 0xBD8F, 0x7D88, 0xBD90, 0x7D89, 0xBD91, 0x7D8A, 0xBD92, - 0x7D8B, 0xBD93, 0x7D8C, 0xBD94, 0x7D8D, 0xBD95, 0x7D8E, 0xBD96, - 0x7D8F, 0xBD97, 0x7D90, 0xBD98, 0x7D91, 0xBD99, 0x7D92, 0xBD9A, - 0x7D93, 0xBD9B, 0x7D94, 0xBD9C, 0x7D95, 0xBD9D, 0x7D96, 0xBD9E, - 0x7D97, 0xBD9F, 0x7D98, 0xBDA0, 0x7D99, 0xBE40, 0x7D9A, 0xBE41, - 0x7D9B, 0xBE42, 0x7D9C, 0xBE43, 0x7D9D, 0xBE44, 0x7D9E, 0xBE45, - 0x7D9F, 0xBE46, 0x7DA0, 0xBE47, 0x7DA1, 0xBE48, 0x7DA2, 0xBE49, - 0x7DA3, 0xBE4A, 0x7DA4, 0xBE4B, 0x7DA5, 0xBE4C, 0x7DA6, 0xF4EB, - 0x7DA7, 0xBE4D, 0x7DA8, 0xBE4E, 0x7DA9, 0xBE4F, 0x7DAA, 0xBE50, - 0x7DAB, 0xBE51, 0x7DAC, 0xBE52, 0x7DAD, 0xBE53, 0x7DAE, 0xF4EC, - 0x7DAF, 0xBE54, 0x7DB0, 0xBE55, 0x7DB1, 0xBE56, 0x7DB2, 0xBE57, - 0x7DB3, 0xBE58, 0x7DB4, 0xBE59, 0x7DB5, 0xBE5A, 0x7DB6, 0xBE5B, - 0x7DB7, 0xBE5C, 0x7DB8, 0xBE5D, 0x7DB9, 0xBE5E, 0x7DBA, 0xBE5F, - 0x7DBB, 0xBE60, 0x7DBC, 0xBE61, 0x7DBD, 0xBE62, 0x7DBE, 0xBE63, - 0x7DBF, 0xBE64, 0x7DC0, 0xBE65, 0x7DC1, 0xBE66, 0x7DC2, 0xBE67, - 0x7DC3, 0xBE68, 0x7DC4, 0xBE69, 0x7DC5, 0xBE6A, 0x7DC6, 0xBE6B, - 0x7DC7, 0xBE6C, 0x7DC8, 0xBE6D, 0x7DC9, 0xBE6E, 0x7DCA, 0xBE6F, - 0x7DCB, 0xBE70, 0x7DCC, 0xBE71, 0x7DCD, 0xBE72, 0x7DCE, 0xBE73, - 0x7DCF, 0xBE74, 0x7DD0, 0xBE75, 0x7DD1, 0xBE76, 0x7DD2, 0xBE77, - 0x7DD3, 0xBE78, 0x7DD4, 0xBE79, 0x7DD5, 0xBE7A, 0x7DD6, 0xBE7B, - 0x7DD7, 0xBE7C, 0x7DD8, 0xBE7D, 0x7DD9, 0xBE7E, 0x7DDA, 0xBE80, - 0x7DDB, 0xBE81, 0x7DDC, 0xBE82, 0x7DDD, 0xBE83, 0x7DDE, 0xBE84, - 0x7DDF, 0xBE85, 0x7DE0, 0xBE86, 0x7DE1, 0xBE87, 0x7DE2, 0xBE88, - 0x7DE3, 0xBE89, 0x7DE4, 0xBE8A, 0x7DE5, 0xBE8B, 0x7DE6, 0xBE8C, - 0x7DE7, 0xBE8D, 0x7DE8, 0xBE8E, 0x7DE9, 0xBE8F, 0x7DEA, 0xBE90, - 0x7DEB, 0xBE91, 0x7DEC, 0xBE92, 0x7DED, 0xBE93, 0x7DEE, 0xBE94, - 0x7DEF, 0xBE95, 0x7DF0, 0xBE96, 0x7DF1, 0xBE97, 0x7DF2, 0xBE98, - 0x7DF3, 0xBE99, 0x7DF4, 0xBE9A, 0x7DF5, 0xBE9B, 0x7DF6, 0xBE9C, - 0x7DF7, 0xBE9D, 0x7DF8, 0xBE9E, 0x7DF9, 0xBE9F, 0x7DFA, 0xBEA0, - 0x7DFB, 0xBF40, 0x7DFC, 0xBF41, 0x7DFD, 0xBF42, 0x7DFE, 0xBF43, - 0x7DFF, 0xBF44, 0x7E00, 0xBF45, 0x7E01, 0xBF46, 0x7E02, 0xBF47, - 0x7E03, 0xBF48, 0x7E04, 0xBF49, 0x7E05, 0xBF4A, 0x7E06, 0xBF4B, - 0x7E07, 0xBF4C, 0x7E08, 0xBF4D, 0x7E09, 0xBF4E, 0x7E0A, 0xBF4F, - 0x7E0B, 0xBF50, 0x7E0C, 0xBF51, 0x7E0D, 0xBF52, 0x7E0E, 0xBF53, - 0x7E0F, 0xBF54, 0x7E10, 0xBF55, 0x7E11, 0xBF56, 0x7E12, 0xBF57, - 0x7E13, 0xBF58, 0x7E14, 0xBF59, 0x7E15, 0xBF5A, 0x7E16, 0xBF5B, - 0x7E17, 0xBF5C, 0x7E18, 0xBF5D, 0x7E19, 0xBF5E, 0x7E1A, 0xBF5F, - 0x7E1B, 0xBF60, 0x7E1C, 0xBF61, 0x7E1D, 0xBF62, 0x7E1E, 0xBF63, - 0x7E1F, 0xBF64, 0x7E20, 0xBF65, 0x7E21, 0xBF66, 0x7E22, 0xBF67, - 0x7E23, 0xBF68, 0x7E24, 0xBF69, 0x7E25, 0xBF6A, 0x7E26, 0xBF6B, - 0x7E27, 0xBF6C, 0x7E28, 0xBF6D, 0x7E29, 0xBF6E, 0x7E2A, 0xBF6F, - 0x7E2B, 0xBF70, 0x7E2C, 0xBF71, 0x7E2D, 0xBF72, 0x7E2E, 0xBF73, - 0x7E2F, 0xBF74, 0x7E30, 0xBF75, 0x7E31, 0xBF76, 0x7E32, 0xBF77, - 0x7E33, 0xBF78, 0x7E34, 0xBF79, 0x7E35, 0xBF7A, 0x7E36, 0xBF7B, - 0x7E37, 0xBF7C, 0x7E38, 0xBF7D, 0x7E39, 0xBF7E, 0x7E3A, 0xBF80, - 0x7E3B, 0xF7E3, 0x7E3C, 0xBF81, 0x7E3D, 0xBF82, 0x7E3E, 0xBF83, - 0x7E3F, 0xBF84, 0x7E40, 0xBF85, 0x7E41, 0xB7B1, 0x7E42, 0xBF86, - 0x7E43, 0xBF87, 0x7E44, 0xBF88, 0x7E45, 0xBF89, 0x7E46, 0xBF8A, - 0x7E47, 0xF4ED, 0x7E48, 0xBF8B, 0x7E49, 0xBF8C, 0x7E4A, 0xBF8D, - 0x7E4B, 0xBF8E, 0x7E4C, 0xBF8F, 0x7E4D, 0xBF90, 0x7E4E, 0xBF91, - 0x7E4F, 0xBF92, 0x7E50, 0xBF93, 0x7E51, 0xBF94, 0x7E52, 0xBF95, - 0x7E53, 0xBF96, 0x7E54, 0xBF97, 0x7E55, 0xBF98, 0x7E56, 0xBF99, - 0x7E57, 0xBF9A, 0x7E58, 0xBF9B, 0x7E59, 0xBF9C, 0x7E5A, 0xBF9D, - 0x7E5B, 0xBF9E, 0x7E5C, 0xBF9F, 0x7E5D, 0xBFA0, 0x7E5E, 0xC040, - 0x7E5F, 0xC041, 0x7E60, 0xC042, 0x7E61, 0xC043, 0x7E62, 0xC044, - 0x7E63, 0xC045, 0x7E64, 0xC046, 0x7E65, 0xC047, 0x7E66, 0xC048, - 0x7E67, 0xC049, 0x7E68, 0xC04A, 0x7E69, 0xC04B, 0x7E6A, 0xC04C, - 0x7E6B, 0xC04D, 0x7E6C, 0xC04E, 0x7E6D, 0xC04F, 0x7E6E, 0xC050, - 0x7E6F, 0xC051, 0x7E70, 0xC052, 0x7E71, 0xC053, 0x7E72, 0xC054, - 0x7E73, 0xC055, 0x7E74, 0xC056, 0x7E75, 0xC057, 0x7E76, 0xC058, - 0x7E77, 0xC059, 0x7E78, 0xC05A, 0x7E79, 0xC05B, 0x7E7A, 0xC05C, - 0x7E7B, 0xC05D, 0x7E7C, 0xC05E, 0x7E7D, 0xC05F, 0x7E7E, 0xC060, - 0x7E7F, 0xC061, 0x7E80, 0xC062, 0x7E81, 0xC063, 0x7E82, 0xD7EB, - 0x7E83, 0xC064, 0x7E84, 0xC065, 0x7E85, 0xC066, 0x7E86, 0xC067, - 0x7E87, 0xC068, 0x7E88, 0xC069, 0x7E89, 0xC06A, 0x7E8A, 0xC06B, - 0x7E8B, 0xC06C, 0x7E8C, 0xC06D, 0x7E8D, 0xC06E, 0x7E8E, 0xC06F, - 0x7E8F, 0xC070, 0x7E90, 0xC071, 0x7E91, 0xC072, 0x7E92, 0xC073, - 0x7E93, 0xC074, 0x7E94, 0xC075, 0x7E95, 0xC076, 0x7E96, 0xC077, - 0x7E97, 0xC078, 0x7E98, 0xC079, 0x7E99, 0xC07A, 0x7E9A, 0xC07B, - 0x7E9B, 0xF4EE, 0x7E9C, 0xC07C, 0x7E9D, 0xC07D, 0x7E9E, 0xC07E, - 0x7E9F, 0xE6F9, 0x7EA0, 0xBEC0, 0x7EA1, 0xE6FA, 0x7EA2, 0xBAEC, - 0x7EA3, 0xE6FB, 0x7EA4, 0xCFCB, 0x7EA5, 0xE6FC, 0x7EA6, 0xD4BC, - 0x7EA7, 0xBCB6, 0x7EA8, 0xE6FD, 0x7EA9, 0xE6FE, 0x7EAA, 0xBCCD, - 0x7EAB, 0xC8D2, 0x7EAC, 0xCEB3, 0x7EAD, 0xE7A1, 0x7EAE, 0xC080, - 0x7EAF, 0xB4BF, 0x7EB0, 0xE7A2, 0x7EB1, 0xC9B4, 0x7EB2, 0xB8D9, - 0x7EB3, 0xC4C9, 0x7EB4, 0xC081, 0x7EB5, 0xD7DD, 0x7EB6, 0xC2DA, - 0x7EB7, 0xB7D7, 0x7EB8, 0xD6BD, 0x7EB9, 0xCEC6, 0x7EBA, 0xB7C4, - 0x7EBB, 0xC082, 0x7EBC, 0xC083, 0x7EBD, 0xC5A6, 0x7EBE, 0xE7A3, - 0x7EBF, 0xCFDF, 0x7EC0, 0xE7A4, 0x7EC1, 0xE7A5, 0x7EC2, 0xE7A6, - 0x7EC3, 0xC1B7, 0x7EC4, 0xD7E9, 0x7EC5, 0xC9F0, 0x7EC6, 0xCFB8, - 0x7EC7, 0xD6AF, 0x7EC8, 0xD6D5, 0x7EC9, 0xE7A7, 0x7ECA, 0xB0ED, - 0x7ECB, 0xE7A8, 0x7ECC, 0xE7A9, 0x7ECD, 0xC9DC, 0x7ECE, 0xD2EF, - 0x7ECF, 0xBEAD, 0x7ED0, 0xE7AA, 0x7ED1, 0xB0F3, 0x7ED2, 0xC8DE, - 0x7ED3, 0xBDE1, 0x7ED4, 0xE7AB, 0x7ED5, 0xC8C6, 0x7ED6, 0xC084, - 0x7ED7, 0xE7AC, 0x7ED8, 0xBBE6, 0x7ED9, 0xB8F8, 0x7EDA, 0xD1A4, - 0x7EDB, 0xE7AD, 0x7EDC, 0xC2E7, 0x7EDD, 0xBEF8, 0x7EDE, 0xBDCA, - 0x7EDF, 0xCDB3, 0x7EE0, 0xE7AE, 0x7EE1, 0xE7AF, 0x7EE2, 0xBEEE, - 0x7EE3, 0xD0E5, 0x7EE4, 0xC085, 0x7EE5, 0xCBE7, 0x7EE6, 0xCCD0, - 0x7EE7, 0xBCCC, 0x7EE8, 0xE7B0, 0x7EE9, 0xBCA8, 0x7EEA, 0xD0F7, - 0x7EEB, 0xE7B1, 0x7EEC, 0xC086, 0x7EED, 0xD0F8, 0x7EEE, 0xE7B2, - 0x7EEF, 0xE7B3, 0x7EF0, 0xB4C2, 0x7EF1, 0xE7B4, 0x7EF2, 0xE7B5, - 0x7EF3, 0xC9FE, 0x7EF4, 0xCEAC, 0x7EF5, 0xC3E0, 0x7EF6, 0xE7B7, - 0x7EF7, 0xB1C1, 0x7EF8, 0xB3F1, 0x7EF9, 0xC087, 0x7EFA, 0xE7B8, - 0x7EFB, 0xE7B9, 0x7EFC, 0xD7DB, 0x7EFD, 0xD5C0, 0x7EFE, 0xE7BA, - 0x7EFF, 0xC2CC, 0x7F00, 0xD7BA, 0x7F01, 0xE7BB, 0x7F02, 0xE7BC, - 0x7F03, 0xE7BD, 0x7F04, 0xBCEA, 0x7F05, 0xC3E5, 0x7F06, 0xC0C2, - 0x7F07, 0xE7BE, 0x7F08, 0xE7BF, 0x7F09, 0xBCA9, 0x7F0A, 0xC088, - 0x7F0B, 0xE7C0, 0x7F0C, 0xE7C1, 0x7F0D, 0xE7B6, 0x7F0E, 0xB6D0, - 0x7F0F, 0xE7C2, 0x7F10, 0xC089, 0x7F11, 0xE7C3, 0x7F12, 0xE7C4, - 0x7F13, 0xBBBA, 0x7F14, 0xB5DE, 0x7F15, 0xC2C6, 0x7F16, 0xB1E0, - 0x7F17, 0xE7C5, 0x7F18, 0xD4B5, 0x7F19, 0xE7C6, 0x7F1A, 0xB8BF, - 0x7F1B, 0xE7C8, 0x7F1C, 0xE7C7, 0x7F1D, 0xB7EC, 0x7F1E, 0xC08A, - 0x7F1F, 0xE7C9, 0x7F20, 0xB2F8, 0x7F21, 0xE7CA, 0x7F22, 0xE7CB, - 0x7F23, 0xE7CC, 0x7F24, 0xE7CD, 0x7F25, 0xE7CE, 0x7F26, 0xE7CF, - 0x7F27, 0xE7D0, 0x7F28, 0xD3A7, 0x7F29, 0xCBF5, 0x7F2A, 0xE7D1, - 0x7F2B, 0xE7D2, 0x7F2C, 0xE7D3, 0x7F2D, 0xE7D4, 0x7F2E, 0xC9C9, - 0x7F2F, 0xE7D5, 0x7F30, 0xE7D6, 0x7F31, 0xE7D7, 0x7F32, 0xE7D8, - 0x7F33, 0xE7D9, 0x7F34, 0xBDC9, 0x7F35, 0xE7DA, 0x7F36, 0xF3BE, - 0x7F37, 0xC08B, 0x7F38, 0xB8D7, 0x7F39, 0xC08C, 0x7F3A, 0xC8B1, - 0x7F3B, 0xC08D, 0x7F3C, 0xC08E, 0x7F3D, 0xC08F, 0x7F3E, 0xC090, - 0x7F3F, 0xC091, 0x7F40, 0xC092, 0x7F41, 0xC093, 0x7F42, 0xF3BF, - 0x7F43, 0xC094, 0x7F44, 0xF3C0, 0x7F45, 0xF3C1, 0x7F46, 0xC095, - 0x7F47, 0xC096, 0x7F48, 0xC097, 0x7F49, 0xC098, 0x7F4A, 0xC099, - 0x7F4B, 0xC09A, 0x7F4C, 0xC09B, 0x7F4D, 0xC09C, 0x7F4E, 0xC09D, - 0x7F4F, 0xC09E, 0x7F50, 0xB9DE, 0x7F51, 0xCDF8, 0x7F52, 0xC09F, - 0x7F53, 0xC0A0, 0x7F54, 0xD8E8, 0x7F55, 0xBAB1, 0x7F56, 0xC140, - 0x7F57, 0xC2DE, 0x7F58, 0xEEB7, 0x7F59, 0xC141, 0x7F5A, 0xB7A3, - 0x7F5B, 0xC142, 0x7F5C, 0xC143, 0x7F5D, 0xC144, 0x7F5E, 0xC145, - 0x7F5F, 0xEEB9, 0x7F60, 0xC146, 0x7F61, 0xEEB8, 0x7F62, 0xB0D5, - 0x7F63, 0xC147, 0x7F64, 0xC148, 0x7F65, 0xC149, 0x7F66, 0xC14A, - 0x7F67, 0xC14B, 0x7F68, 0xEEBB, 0x7F69, 0xD5D6, 0x7F6A, 0xD7EF, - 0x7F6B, 0xC14C, 0x7F6C, 0xC14D, 0x7F6D, 0xC14E, 0x7F6E, 0xD6C3, - 0x7F6F, 0xC14F, 0x7F70, 0xC150, 0x7F71, 0xEEBD, 0x7F72, 0xCAF0, - 0x7F73, 0xC151, 0x7F74, 0xEEBC, 0x7F75, 0xC152, 0x7F76, 0xC153, - 0x7F77, 0xC154, 0x7F78, 0xC155, 0x7F79, 0xEEBE, 0x7F7A, 0xC156, - 0x7F7B, 0xC157, 0x7F7C, 0xC158, 0x7F7D, 0xC159, 0x7F7E, 0xEEC0, - 0x7F7F, 0xC15A, 0x7F80, 0xC15B, 0x7F81, 0xEEBF, 0x7F82, 0xC15C, - 0x7F83, 0xC15D, 0x7F84, 0xC15E, 0x7F85, 0xC15F, 0x7F86, 0xC160, - 0x7F87, 0xC161, 0x7F88, 0xC162, 0x7F89, 0xC163, 0x7F8A, 0xD1F2, - 0x7F8B, 0xC164, 0x7F8C, 0xC7BC, 0x7F8D, 0xC165, 0x7F8E, 0xC3C0, - 0x7F8F, 0xC166, 0x7F90, 0xC167, 0x7F91, 0xC168, 0x7F92, 0xC169, - 0x7F93, 0xC16A, 0x7F94, 0xB8E1, 0x7F95, 0xC16B, 0x7F96, 0xC16C, - 0x7F97, 0xC16D, 0x7F98, 0xC16E, 0x7F99, 0xC16F, 0x7F9A, 0xC1E7, - 0x7F9B, 0xC170, 0x7F9C, 0xC171, 0x7F9D, 0xF4C6, 0x7F9E, 0xD0DF, - 0x7F9F, 0xF4C7, 0x7FA0, 0xC172, 0x7FA1, 0xCFDB, 0x7FA2, 0xC173, - 0x7FA3, 0xC174, 0x7FA4, 0xC8BA, 0x7FA5, 0xC175, 0x7FA6, 0xC176, - 0x7FA7, 0xF4C8, 0x7FA8, 0xC177, 0x7FA9, 0xC178, 0x7FAA, 0xC179, - 0x7FAB, 0xC17A, 0x7FAC, 0xC17B, 0x7FAD, 0xC17C, 0x7FAE, 0xC17D, - 0x7FAF, 0xF4C9, 0x7FB0, 0xF4CA, 0x7FB1, 0xC17E, 0x7FB2, 0xF4CB, - 0x7FB3, 0xC180, 0x7FB4, 0xC181, 0x7FB5, 0xC182, 0x7FB6, 0xC183, - 0x7FB7, 0xC184, 0x7FB8, 0xD9FA, 0x7FB9, 0xB8FE, 0x7FBA, 0xC185, - 0x7FBB, 0xC186, 0x7FBC, 0xE5F1, 0x7FBD, 0xD3F0, 0x7FBE, 0xC187, - 0x7FBF, 0xF4E0, 0x7FC0, 0xC188, 0x7FC1, 0xCECC, 0x7FC2, 0xC189, - 0x7FC3, 0xC18A, 0x7FC4, 0xC18B, 0x7FC5, 0xB3E1, 0x7FC6, 0xC18C, - 0x7FC7, 0xC18D, 0x7FC8, 0xC18E, 0x7FC9, 0xC18F, 0x7FCA, 0xF1B4, - 0x7FCB, 0xC190, 0x7FCC, 0xD2EE, 0x7FCD, 0xC191, 0x7FCE, 0xF4E1, - 0x7FCF, 0xC192, 0x7FD0, 0xC193, 0x7FD1, 0xC194, 0x7FD2, 0xC195, - 0x7FD3, 0xC196, 0x7FD4, 0xCFE8, 0x7FD5, 0xF4E2, 0x7FD6, 0xC197, - 0x7FD7, 0xC198, 0x7FD8, 0xC7CC, 0x7FD9, 0xC199, 0x7FDA, 0xC19A, - 0x7FDB, 0xC19B, 0x7FDC, 0xC19C, 0x7FDD, 0xC19D, 0x7FDE, 0xC19E, - 0x7FDF, 0xB5D4, 0x7FE0, 0xB4E4, 0x7FE1, 0xF4E4, 0x7FE2, 0xC19F, - 0x7FE3, 0xC1A0, 0x7FE4, 0xC240, 0x7FE5, 0xF4E3, 0x7FE6, 0xF4E5, - 0x7FE7, 0xC241, 0x7FE8, 0xC242, 0x7FE9, 0xF4E6, 0x7FEA, 0xC243, - 0x7FEB, 0xC244, 0x7FEC, 0xC245, 0x7FED, 0xC246, 0x7FEE, 0xF4E7, - 0x7FEF, 0xC247, 0x7FF0, 0xBAB2, 0x7FF1, 0xB0BF, 0x7FF2, 0xC248, - 0x7FF3, 0xF4E8, 0x7FF4, 0xC249, 0x7FF5, 0xC24A, 0x7FF6, 0xC24B, - 0x7FF7, 0xC24C, 0x7FF8, 0xC24D, 0x7FF9, 0xC24E, 0x7FFA, 0xC24F, - 0x7FFB, 0xB7AD, 0x7FFC, 0xD2ED, 0x7FFD, 0xC250, 0x7FFE, 0xC251, - 0x7FFF, 0xC252, 0x8000, 0xD2AB, 0x8001, 0xC0CF, 0x8002, 0xC253, - 0x8003, 0xBFBC, 0x8004, 0xEBA3, 0x8005, 0xD5DF, 0x8006, 0xEAC8, - 0x8007, 0xC254, 0x8008, 0xC255, 0x8009, 0xC256, 0x800A, 0xC257, - 0x800B, 0xF1F3, 0x800C, 0xB6F8, 0x800D, 0xCBA3, 0x800E, 0xC258, - 0x800F, 0xC259, 0x8010, 0xC4CD, 0x8011, 0xC25A, 0x8012, 0xF1E7, - 0x8013, 0xC25B, 0x8014, 0xF1E8, 0x8015, 0xB8FB, 0x8016, 0xF1E9, - 0x8017, 0xBAC4, 0x8018, 0xD4C5, 0x8019, 0xB0D2, 0x801A, 0xC25C, - 0x801B, 0xC25D, 0x801C, 0xF1EA, 0x801D, 0xC25E, 0x801E, 0xC25F, - 0x801F, 0xC260, 0x8020, 0xF1EB, 0x8021, 0xC261, 0x8022, 0xF1EC, - 0x8023, 0xC262, 0x8024, 0xC263, 0x8025, 0xF1ED, 0x8026, 0xF1EE, - 0x8027, 0xF1EF, 0x8028, 0xF1F1, 0x8029, 0xF1F0, 0x802A, 0xC5D5, - 0x802B, 0xC264, 0x802C, 0xC265, 0x802D, 0xC266, 0x802E, 0xC267, - 0x802F, 0xC268, 0x8030, 0xC269, 0x8031, 0xF1F2, 0x8032, 0xC26A, - 0x8033, 0xB6FA, 0x8034, 0xC26B, 0x8035, 0xF1F4, 0x8036, 0xD2AE, - 0x8037, 0xDEC7, 0x8038, 0xCBCA, 0x8039, 0xC26C, 0x803A, 0xC26D, - 0x803B, 0xB3DC, 0x803C, 0xC26E, 0x803D, 0xB5A2, 0x803E, 0xC26F, - 0x803F, 0xB9A2, 0x8040, 0xC270, 0x8041, 0xC271, 0x8042, 0xC4F4, - 0x8043, 0xF1F5, 0x8044, 0xC272, 0x8045, 0xC273, 0x8046, 0xF1F6, - 0x8047, 0xC274, 0x8048, 0xC275, 0x8049, 0xC276, 0x804A, 0xC1C4, - 0x804B, 0xC1FB, 0x804C, 0xD6B0, 0x804D, 0xF1F7, 0x804E, 0xC277, - 0x804F, 0xC278, 0x8050, 0xC279, 0x8051, 0xC27A, 0x8052, 0xF1F8, - 0x8053, 0xC27B, 0x8054, 0xC1AA, 0x8055, 0xC27C, 0x8056, 0xC27D, - 0x8057, 0xC27E, 0x8058, 0xC6B8, 0x8059, 0xC280, 0x805A, 0xBEDB, - 0x805B, 0xC281, 0x805C, 0xC282, 0x805D, 0xC283, 0x805E, 0xC284, - 0x805F, 0xC285, 0x8060, 0xC286, 0x8061, 0xC287, 0x8062, 0xC288, - 0x8063, 0xC289, 0x8064, 0xC28A, 0x8065, 0xC28B, 0x8066, 0xC28C, - 0x8067, 0xC28D, 0x8068, 0xC28E, 0x8069, 0xF1F9, 0x806A, 0xB4CF, - 0x806B, 0xC28F, 0x806C, 0xC290, 0x806D, 0xC291, 0x806E, 0xC292, - 0x806F, 0xC293, 0x8070, 0xC294, 0x8071, 0xF1FA, 0x8072, 0xC295, - 0x8073, 0xC296, 0x8074, 0xC297, 0x8075, 0xC298, 0x8076, 0xC299, - 0x8077, 0xC29A, 0x8078, 0xC29B, 0x8079, 0xC29C, 0x807A, 0xC29D, - 0x807B, 0xC29E, 0x807C, 0xC29F, 0x807D, 0xC2A0, 0x807E, 0xC340, - 0x807F, 0xEDB2, 0x8080, 0xEDB1, 0x8081, 0xC341, 0x8082, 0xC342, - 0x8083, 0xCBE0, 0x8084, 0xD2DE, 0x8085, 0xC343, 0x8086, 0xCBC1, - 0x8087, 0xD5D8, 0x8088, 0xC344, 0x8089, 0xC8E2, 0x808A, 0xC345, - 0x808B, 0xC0DF, 0x808C, 0xBCA1, 0x808D, 0xC346, 0x808E, 0xC347, - 0x808F, 0xC348, 0x8090, 0xC349, 0x8091, 0xC34A, 0x8092, 0xC34B, - 0x8093, 0xEBC1, 0x8094, 0xC34C, 0x8095, 0xC34D, 0x8096, 0xD0A4, - 0x8097, 0xC34E, 0x8098, 0xD6E2, 0x8099, 0xC34F, 0x809A, 0xB6C7, - 0x809B, 0xB8D8, 0x809C, 0xEBC0, 0x809D, 0xB8CE, 0x809E, 0xC350, - 0x809F, 0xEBBF, 0x80A0, 0xB3A6, 0x80A1, 0xB9C9, 0x80A2, 0xD6AB, - 0x80A3, 0xC351, 0x80A4, 0xB7F4, 0x80A5, 0xB7CA, 0x80A6, 0xC352, - 0x80A7, 0xC353, 0x80A8, 0xC354, 0x80A9, 0xBCE7, 0x80AA, 0xB7BE, - 0x80AB, 0xEBC6, 0x80AC, 0xC355, 0x80AD, 0xEBC7, 0x80AE, 0xB0B9, - 0x80AF, 0xBFCF, 0x80B0, 0xC356, 0x80B1, 0xEBC5, 0x80B2, 0xD3FD, - 0x80B3, 0xC357, 0x80B4, 0xEBC8, 0x80B5, 0xC358, 0x80B6, 0xC359, - 0x80B7, 0xEBC9, 0x80B8, 0xC35A, 0x80B9, 0xC35B, 0x80BA, 0xB7CE, - 0x80BB, 0xC35C, 0x80BC, 0xEBC2, 0x80BD, 0xEBC4, 0x80BE, 0xC9F6, - 0x80BF, 0xD6D7, 0x80C0, 0xD5CD, 0x80C1, 0xD0B2, 0x80C2, 0xEBCF, - 0x80C3, 0xCEB8, 0x80C4, 0xEBD0, 0x80C5, 0xC35D, 0x80C6, 0xB5A8, - 0x80C7, 0xC35E, 0x80C8, 0xC35F, 0x80C9, 0xC360, 0x80CA, 0xC361, - 0x80CB, 0xC362, 0x80CC, 0xB1B3, 0x80CD, 0xEBD2, 0x80CE, 0xCCA5, - 0x80CF, 0xC363, 0x80D0, 0xC364, 0x80D1, 0xC365, 0x80D2, 0xC366, - 0x80D3, 0xC367, 0x80D4, 0xC368, 0x80D5, 0xC369, 0x80D6, 0xC5D6, - 0x80D7, 0xEBD3, 0x80D8, 0xC36A, 0x80D9, 0xEBD1, 0x80DA, 0xC5DF, - 0x80DB, 0xEBCE, 0x80DC, 0xCAA4, 0x80DD, 0xEBD5, 0x80DE, 0xB0FB, - 0x80DF, 0xC36B, 0x80E0, 0xC36C, 0x80E1, 0xBAFA, 0x80E2, 0xC36D, - 0x80E3, 0xC36E, 0x80E4, 0xD8B7, 0x80E5, 0xF1E3, 0x80E6, 0xC36F, - 0x80E7, 0xEBCA, 0x80E8, 0xEBCB, 0x80E9, 0xEBCC, 0x80EA, 0xEBCD, - 0x80EB, 0xEBD6, 0x80EC, 0xE6C0, 0x80ED, 0xEBD9, 0x80EE, 0xC370, - 0x80EF, 0xBFE8, 0x80F0, 0xD2C8, 0x80F1, 0xEBD7, 0x80F2, 0xEBDC, - 0x80F3, 0xB8EC, 0x80F4, 0xEBD8, 0x80F5, 0xC371, 0x80F6, 0xBDBA, - 0x80F7, 0xC372, 0x80F8, 0xD0D8, 0x80F9, 0xC373, 0x80FA, 0xB0B7, - 0x80FB, 0xC374, 0x80FC, 0xEBDD, 0x80FD, 0xC4DC, 0x80FE, 0xC375, - 0x80FF, 0xC376, 0x8100, 0xC377, 0x8101, 0xC378, 0x8102, 0xD6AC, - 0x8103, 0xC379, 0x8104, 0xC37A, 0x8105, 0xC37B, 0x8106, 0xB4E0, - 0x8107, 0xC37C, 0x8108, 0xC37D, 0x8109, 0xC2F6, 0x810A, 0xBCB9, - 0x810B, 0xC37E, 0x810C, 0xC380, 0x810D, 0xEBDA, 0x810E, 0xEBDB, - 0x810F, 0xD4E0, 0x8110, 0xC6EA, 0x8111, 0xC4D4, 0x8112, 0xEBDF, - 0x8113, 0xC5A7, 0x8114, 0xD9F5, 0x8115, 0xC381, 0x8116, 0xB2B1, - 0x8117, 0xC382, 0x8118, 0xEBE4, 0x8119, 0xC383, 0x811A, 0xBDC5, - 0x811B, 0xC384, 0x811C, 0xC385, 0x811D, 0xC386, 0x811E, 0xEBE2, - 0x811F, 0xC387, 0x8120, 0xC388, 0x8121, 0xC389, 0x8122, 0xC38A, - 0x8123, 0xC38B, 0x8124, 0xC38C, 0x8125, 0xC38D, 0x8126, 0xC38E, - 0x8127, 0xC38F, 0x8128, 0xC390, 0x8129, 0xC391, 0x812A, 0xC392, - 0x812B, 0xC393, 0x812C, 0xEBE3, 0x812D, 0xC394, 0x812E, 0xC395, - 0x812F, 0xB8AC, 0x8130, 0xC396, 0x8131, 0xCDD1, 0x8132, 0xEBE5, - 0x8133, 0xC397, 0x8134, 0xC398, 0x8135, 0xC399, 0x8136, 0xEBE1, - 0x8137, 0xC39A, 0x8138, 0xC1B3, 0x8139, 0xC39B, 0x813A, 0xC39C, - 0x813B, 0xC39D, 0x813C, 0xC39E, 0x813D, 0xC39F, 0x813E, 0xC6A2, - 0x813F, 0xC3A0, 0x8140, 0xC440, 0x8141, 0xC441, 0x8142, 0xC442, - 0x8143, 0xC443, 0x8144, 0xC444, 0x8145, 0xC445, 0x8146, 0xCCF3, - 0x8147, 0xC446, 0x8148, 0xEBE6, 0x8149, 0xC447, 0x814A, 0xC0B0, - 0x814B, 0xD2B8, 0x814C, 0xEBE7, 0x814D, 0xC448, 0x814E, 0xC449, - 0x814F, 0xC44A, 0x8150, 0xB8AF, 0x8151, 0xB8AD, 0x8152, 0xC44B, - 0x8153, 0xEBE8, 0x8154, 0xC7BB, 0x8155, 0xCDF3, 0x8156, 0xC44C, - 0x8157, 0xC44D, 0x8158, 0xC44E, 0x8159, 0xEBEA, 0x815A, 0xEBEB, - 0x815B, 0xC44F, 0x815C, 0xC450, 0x815D, 0xC451, 0x815E, 0xC452, - 0x815F, 0xC453, 0x8160, 0xEBED, 0x8161, 0xC454, 0x8162, 0xC455, - 0x8163, 0xC456, 0x8164, 0xC457, 0x8165, 0xD0C8, 0x8166, 0xC458, - 0x8167, 0xEBF2, 0x8168, 0xC459, 0x8169, 0xEBEE, 0x816A, 0xC45A, - 0x816B, 0xC45B, 0x816C, 0xC45C, 0x816D, 0xEBF1, 0x816E, 0xC8F9, - 0x816F, 0xC45D, 0x8170, 0xD1FC, 0x8171, 0xEBEC, 0x8172, 0xC45E, - 0x8173, 0xC45F, 0x8174, 0xEBE9, 0x8175, 0xC460, 0x8176, 0xC461, - 0x8177, 0xC462, 0x8178, 0xC463, 0x8179, 0xB8B9, 0x817A, 0xCFD9, - 0x817B, 0xC4E5, 0x817C, 0xEBEF, 0x817D, 0xEBF0, 0x817E, 0xCCDA, - 0x817F, 0xCDC8, 0x8180, 0xB0F2, 0x8181, 0xC464, 0x8182, 0xEBF6, - 0x8183, 0xC465, 0x8184, 0xC466, 0x8185, 0xC467, 0x8186, 0xC468, - 0x8187, 0xC469, 0x8188, 0xEBF5, 0x8189, 0xC46A, 0x818A, 0xB2B2, - 0x818B, 0xC46B, 0x818C, 0xC46C, 0x818D, 0xC46D, 0x818E, 0xC46E, - 0x818F, 0xB8E0, 0x8190, 0xC46F, 0x8191, 0xEBF7, 0x8192, 0xC470, - 0x8193, 0xC471, 0x8194, 0xC472, 0x8195, 0xC473, 0x8196, 0xC474, - 0x8197, 0xC475, 0x8198, 0xB1EC, 0x8199, 0xC476, 0x819A, 0xC477, - 0x819B, 0xCCC5, 0x819C, 0xC4A4, 0x819D, 0xCFA5, 0x819E, 0xC478, - 0x819F, 0xC479, 0x81A0, 0xC47A, 0x81A1, 0xC47B, 0x81A2, 0xC47C, - 0x81A3, 0xEBF9, 0x81A4, 0xC47D, 0x81A5, 0xC47E, 0x81A6, 0xECA2, - 0x81A7, 0xC480, 0x81A8, 0xC5F2, 0x81A9, 0xC481, 0x81AA, 0xEBFA, - 0x81AB, 0xC482, 0x81AC, 0xC483, 0x81AD, 0xC484, 0x81AE, 0xC485, - 0x81AF, 0xC486, 0x81B0, 0xC487, 0x81B1, 0xC488, 0x81B2, 0xC489, - 0x81B3, 0xC9C5, 0x81B4, 0xC48A, 0x81B5, 0xC48B, 0x81B6, 0xC48C, - 0x81B7, 0xC48D, 0x81B8, 0xC48E, 0x81B9, 0xC48F, 0x81BA, 0xE2DF, - 0x81BB, 0xEBFE, 0x81BC, 0xC490, 0x81BD, 0xC491, 0x81BE, 0xC492, - 0x81BF, 0xC493, 0x81C0, 0xCDCE, 0x81C1, 0xECA1, 0x81C2, 0xB1DB, - 0x81C3, 0xD3B7, 0x81C4, 0xC494, 0x81C5, 0xC495, 0x81C6, 0xD2DC, - 0x81C7, 0xC496, 0x81C8, 0xC497, 0x81C9, 0xC498, 0x81CA, 0xEBFD, - 0x81CB, 0xC499, 0x81CC, 0xEBFB, 0x81CD, 0xC49A, 0x81CE, 0xC49B, - 0x81CF, 0xC49C, 0x81D0, 0xC49D, 0x81D1, 0xC49E, 0x81D2, 0xC49F, - 0x81D3, 0xC4A0, 0x81D4, 0xC540, 0x81D5, 0xC541, 0x81D6, 0xC542, - 0x81D7, 0xC543, 0x81D8, 0xC544, 0x81D9, 0xC545, 0x81DA, 0xC546, - 0x81DB, 0xC547, 0x81DC, 0xC548, 0x81DD, 0xC549, 0x81DE, 0xC54A, - 0x81DF, 0xC54B, 0x81E0, 0xC54C, 0x81E1, 0xC54D, 0x81E2, 0xC54E, - 0x81E3, 0xB3BC, 0x81E4, 0xC54F, 0x81E5, 0xC550, 0x81E6, 0xC551, - 0x81E7, 0xEAB0, 0x81E8, 0xC552, 0x81E9, 0xC553, 0x81EA, 0xD7D4, - 0x81EB, 0xC554, 0x81EC, 0xF4AB, 0x81ED, 0xB3F4, 0x81EE, 0xC555, - 0x81EF, 0xC556, 0x81F0, 0xC557, 0x81F1, 0xC558, 0x81F2, 0xC559, - 0x81F3, 0xD6C1, 0x81F4, 0xD6C2, 0x81F5, 0xC55A, 0x81F6, 0xC55B, - 0x81F7, 0xC55C, 0x81F8, 0xC55D, 0x81F9, 0xC55E, 0x81FA, 0xC55F, - 0x81FB, 0xD5E9, 0x81FC, 0xBECA, 0x81FD, 0xC560, 0x81FE, 0xF4A7, - 0x81FF, 0xC561, 0x8200, 0xD2A8, 0x8201, 0xF4A8, 0x8202, 0xF4A9, - 0x8203, 0xC562, 0x8204, 0xF4AA, 0x8205, 0xBECB, 0x8206, 0xD3DF, - 0x8207, 0xC563, 0x8208, 0xC564, 0x8209, 0xC565, 0x820A, 0xC566, - 0x820B, 0xC567, 0x820C, 0xC9E0, 0x820D, 0xC9E1, 0x820E, 0xC568, - 0x820F, 0xC569, 0x8210, 0xF3C2, 0x8211, 0xC56A, 0x8212, 0xCAE6, - 0x8213, 0xC56B, 0x8214, 0xCCF2, 0x8215, 0xC56C, 0x8216, 0xC56D, - 0x8217, 0xC56E, 0x8218, 0xC56F, 0x8219, 0xC570, 0x821A, 0xC571, - 0x821B, 0xE2B6, 0x821C, 0xCBB4, 0x821D, 0xC572, 0x821E, 0xCEE8, - 0x821F, 0xD6DB, 0x8220, 0xC573, 0x8221, 0xF4AD, 0x8222, 0xF4AE, - 0x8223, 0xF4AF, 0x8224, 0xC574, 0x8225, 0xC575, 0x8226, 0xC576, - 0x8227, 0xC577, 0x8228, 0xF4B2, 0x8229, 0xC578, 0x822A, 0xBABD, - 0x822B, 0xF4B3, 0x822C, 0xB0E3, 0x822D, 0xF4B0, 0x822E, 0xC579, - 0x822F, 0xF4B1, 0x8230, 0xBDA2, 0x8231, 0xB2D5, 0x8232, 0xC57A, - 0x8233, 0xF4B6, 0x8234, 0xF4B7, 0x8235, 0xB6E6, 0x8236, 0xB2B0, - 0x8237, 0xCFCF, 0x8238, 0xF4B4, 0x8239, 0xB4AC, 0x823A, 0xC57B, - 0x823B, 0xF4B5, 0x823C, 0xC57C, 0x823D, 0xC57D, 0x823E, 0xF4B8, - 0x823F, 0xC57E, 0x8240, 0xC580, 0x8241, 0xC581, 0x8242, 0xC582, - 0x8243, 0xC583, 0x8244, 0xF4B9, 0x8245, 0xC584, 0x8246, 0xC585, - 0x8247, 0xCDA7, 0x8248, 0xC586, 0x8249, 0xF4BA, 0x824A, 0xC587, - 0x824B, 0xF4BB, 0x824C, 0xC588, 0x824D, 0xC589, 0x824E, 0xC58A, - 0x824F, 0xF4BC, 0x8250, 0xC58B, 0x8251, 0xC58C, 0x8252, 0xC58D, - 0x8253, 0xC58E, 0x8254, 0xC58F, 0x8255, 0xC590, 0x8256, 0xC591, - 0x8257, 0xC592, 0x8258, 0xCBD2, 0x8259, 0xC593, 0x825A, 0xF4BD, - 0x825B, 0xC594, 0x825C, 0xC595, 0x825D, 0xC596, 0x825E, 0xC597, - 0x825F, 0xF4BE, 0x8260, 0xC598, 0x8261, 0xC599, 0x8262, 0xC59A, - 0x8263, 0xC59B, 0x8264, 0xC59C, 0x8265, 0xC59D, 0x8266, 0xC59E, - 0x8267, 0xC59F, 0x8268, 0xF4BF, 0x8269, 0xC5A0, 0x826A, 0xC640, - 0x826B, 0xC641, 0x826C, 0xC642, 0x826D, 0xC643, 0x826E, 0xF4DE, - 0x826F, 0xC1BC, 0x8270, 0xBCE8, 0x8271, 0xC644, 0x8272, 0xC9AB, - 0x8273, 0xD1DE, 0x8274, 0xE5F5, 0x8275, 0xC645, 0x8276, 0xC646, - 0x8277, 0xC647, 0x8278, 0xC648, 0x8279, 0xDCB3, 0x827A, 0xD2D5, - 0x827B, 0xC649, 0x827C, 0xC64A, 0x827D, 0xDCB4, 0x827E, 0xB0AC, - 0x827F, 0xDCB5, 0x8280, 0xC64B, 0x8281, 0xC64C, 0x8282, 0xBDDA, - 0x8283, 0xC64D, 0x8284, 0xDCB9, 0x8285, 0xC64E, 0x8286, 0xC64F, - 0x8287, 0xC650, 0x8288, 0xD8C2, 0x8289, 0xC651, 0x828A, 0xDCB7, - 0x828B, 0xD3F3, 0x828C, 0xC652, 0x828D, 0xC9D6, 0x828E, 0xDCBA, - 0x828F, 0xDCB6, 0x8290, 0xC653, 0x8291, 0xDCBB, 0x8292, 0xC3A2, - 0x8293, 0xC654, 0x8294, 0xC655, 0x8295, 0xC656, 0x8296, 0xC657, - 0x8297, 0xDCBC, 0x8298, 0xDCC5, 0x8299, 0xDCBD, 0x829A, 0xC658, - 0x829B, 0xC659, 0x829C, 0xCEDF, 0x829D, 0xD6A5, 0x829E, 0xC65A, - 0x829F, 0xDCCF, 0x82A0, 0xC65B, 0x82A1, 0xDCCD, 0x82A2, 0xC65C, - 0x82A3, 0xC65D, 0x82A4, 0xDCD2, 0x82A5, 0xBDE6, 0x82A6, 0xC2AB, - 0x82A7, 0xC65E, 0x82A8, 0xDCB8, 0x82A9, 0xDCCB, 0x82AA, 0xDCCE, - 0x82AB, 0xDCBE, 0x82AC, 0xB7D2, 0x82AD, 0xB0C5, 0x82AE, 0xDCC7, - 0x82AF, 0xD0BE, 0x82B0, 0xDCC1, 0x82B1, 0xBBA8, 0x82B2, 0xC65F, - 0x82B3, 0xB7BC, 0x82B4, 0xDCCC, 0x82B5, 0xC660, 0x82B6, 0xC661, - 0x82B7, 0xDCC6, 0x82B8, 0xDCBF, 0x82B9, 0xC7DB, 0x82BA, 0xC662, - 0x82BB, 0xC663, 0x82BC, 0xC664, 0x82BD, 0xD1BF, 0x82BE, 0xDCC0, - 0x82BF, 0xC665, 0x82C0, 0xC666, 0x82C1, 0xDCCA, 0x82C2, 0xC667, - 0x82C3, 0xC668, 0x82C4, 0xDCD0, 0x82C5, 0xC669, 0x82C6, 0xC66A, - 0x82C7, 0xCEAD, 0x82C8, 0xDCC2, 0x82C9, 0xC66B, 0x82CA, 0xDCC3, - 0x82CB, 0xDCC8, 0x82CC, 0xDCC9, 0x82CD, 0xB2D4, 0x82CE, 0xDCD1, - 0x82CF, 0xCBD5, 0x82D0, 0xC66C, 0x82D1, 0xD4B7, 0x82D2, 0xDCDB, - 0x82D3, 0xDCDF, 0x82D4, 0xCCA6, 0x82D5, 0xDCE6, 0x82D6, 0xC66D, - 0x82D7, 0xC3E7, 0x82D8, 0xDCDC, 0x82D9, 0xC66E, 0x82DA, 0xC66F, - 0x82DB, 0xBFC1, 0x82DC, 0xDCD9, 0x82DD, 0xC670, 0x82DE, 0xB0FA, - 0x82DF, 0xB9B6, 0x82E0, 0xDCE5, 0x82E1, 0xDCD3, 0x82E2, 0xC671, - 0x82E3, 0xDCC4, 0x82E4, 0xDCD6, 0x82E5, 0xC8F4, 0x82E6, 0xBFE0, - 0x82E7, 0xC672, 0x82E8, 0xC673, 0x82E9, 0xC674, 0x82EA, 0xC675, - 0x82EB, 0xC9BB, 0x82EC, 0xC676, 0x82ED, 0xC677, 0x82EE, 0xC678, - 0x82EF, 0xB1BD, 0x82F0, 0xC679, 0x82F1, 0xD3A2, 0x82F2, 0xC67A, - 0x82F3, 0xC67B, 0x82F4, 0xDCDA, 0x82F5, 0xC67C, 0x82F6, 0xC67D, - 0x82F7, 0xDCD5, 0x82F8, 0xC67E, 0x82F9, 0xC6BB, 0x82FA, 0xC680, - 0x82FB, 0xDCDE, 0x82FC, 0xC681, 0x82FD, 0xC682, 0x82FE, 0xC683, - 0x82FF, 0xC684, 0x8300, 0xC685, 0x8301, 0xD7C2, 0x8302, 0xC3AF, - 0x8303, 0xB7B6, 0x8304, 0xC7D1, 0x8305, 0xC3A9, 0x8306, 0xDCE2, - 0x8307, 0xDCD8, 0x8308, 0xDCEB, 0x8309, 0xDCD4, 0x830A, 0xC686, - 0x830B, 0xC687, 0x830C, 0xDCDD, 0x830D, 0xC688, 0x830E, 0xBEA5, - 0x830F, 0xDCD7, 0x8310, 0xC689, 0x8311, 0xDCE0, 0x8312, 0xC68A, - 0x8313, 0xC68B, 0x8314, 0xDCE3, 0x8315, 0xDCE4, 0x8316, 0xC68C, - 0x8317, 0xDCF8, 0x8318, 0xC68D, 0x8319, 0xC68E, 0x831A, 0xDCE1, - 0x831B, 0xDDA2, 0x831C, 0xDCE7, 0x831D, 0xC68F, 0x831E, 0xC690, - 0x831F, 0xC691, 0x8320, 0xC692, 0x8321, 0xC693, 0x8322, 0xC694, - 0x8323, 0xC695, 0x8324, 0xC696, 0x8325, 0xC697, 0x8326, 0xC698, - 0x8327, 0xBCEB, 0x8328, 0xB4C4, 0x8329, 0xC699, 0x832A, 0xC69A, - 0x832B, 0xC3A3, 0x832C, 0xB2E7, 0x832D, 0xDCFA, 0x832E, 0xC69B, - 0x832F, 0xDCF2, 0x8330, 0xC69C, 0x8331, 0xDCEF, 0x8332, 0xC69D, - 0x8333, 0xDCFC, 0x8334, 0xDCEE, 0x8335, 0xD2F0, 0x8336, 0xB2E8, - 0x8337, 0xC69E, 0x8338, 0xC8D7, 0x8339, 0xC8E3, 0x833A, 0xDCFB, - 0x833B, 0xC69F, 0x833C, 0xDCED, 0x833D, 0xC6A0, 0x833E, 0xC740, - 0x833F, 0xC741, 0x8340, 0xDCF7, 0x8341, 0xC742, 0x8342, 0xC743, - 0x8343, 0xDCF5, 0x8344, 0xC744, 0x8345, 0xC745, 0x8346, 0xBEA3, - 0x8347, 0xDCF4, 0x8348, 0xC746, 0x8349, 0xB2DD, 0x834A, 0xC747, - 0x834B, 0xC748, 0x834C, 0xC749, 0x834D, 0xC74A, 0x834E, 0xC74B, - 0x834F, 0xDCF3, 0x8350, 0xBCF6, 0x8351, 0xDCE8, 0x8352, 0xBBC4, - 0x8353, 0xC74C, 0x8354, 0xC0F3, 0x8355, 0xC74D, 0x8356, 0xC74E, - 0x8357, 0xC74F, 0x8358, 0xC750, 0x8359, 0xC751, 0x835A, 0xBCD4, - 0x835B, 0xDCE9, 0x835C, 0xDCEA, 0x835D, 0xC752, 0x835E, 0xDCF1, - 0x835F, 0xDCF6, 0x8360, 0xDCF9, 0x8361, 0xB5B4, 0x8362, 0xC753, - 0x8363, 0xC8D9, 0x8364, 0xBBE7, 0x8365, 0xDCFE, 0x8366, 0xDCFD, - 0x8367, 0xD3AB, 0x8368, 0xDDA1, 0x8369, 0xDDA3, 0x836A, 0xDDA5, - 0x836B, 0xD2F1, 0x836C, 0xDDA4, 0x836D, 0xDDA6, 0x836E, 0xDDA7, - 0x836F, 0xD2A9, 0x8370, 0xC754, 0x8371, 0xC755, 0x8372, 0xC756, - 0x8373, 0xC757, 0x8374, 0xC758, 0x8375, 0xC759, 0x8376, 0xC75A, - 0x8377, 0xBAC9, 0x8378, 0xDDA9, 0x8379, 0xC75B, 0x837A, 0xC75C, - 0x837B, 0xDDB6, 0x837C, 0xDDB1, 0x837D, 0xDDB4, 0x837E, 0xC75D, - 0x837F, 0xC75E, 0x8380, 0xC75F, 0x8381, 0xC760, 0x8382, 0xC761, - 0x8383, 0xC762, 0x8384, 0xC763, 0x8385, 0xDDB0, 0x8386, 0xC6CE, - 0x8387, 0xC764, 0x8388, 0xC765, 0x8389, 0xC0F2, 0x838A, 0xC766, - 0x838B, 0xC767, 0x838C, 0xC768, 0x838D, 0xC769, 0x838E, 0xC9AF, - 0x838F, 0xC76A, 0x8390, 0xC76B, 0x8391, 0xC76C, 0x8392, 0xDCEC, - 0x8393, 0xDDAE, 0x8394, 0xC76D, 0x8395, 0xC76E, 0x8396, 0xC76F, - 0x8397, 0xC770, 0x8398, 0xDDB7, 0x8399, 0xC771, 0x839A, 0xC772, - 0x839B, 0xDCF0, 0x839C, 0xDDAF, 0x839D, 0xC773, 0x839E, 0xDDB8, - 0x839F, 0xC774, 0x83A0, 0xDDAC, 0x83A1, 0xC775, 0x83A2, 0xC776, - 0x83A3, 0xC777, 0x83A4, 0xC778, 0x83A5, 0xC779, 0x83A6, 0xC77A, - 0x83A7, 0xC77B, 0x83A8, 0xDDB9, 0x83A9, 0xDDB3, 0x83AA, 0xDDAD, - 0x83AB, 0xC4AA, 0x83AC, 0xC77C, 0x83AD, 0xC77D, 0x83AE, 0xC77E, - 0x83AF, 0xC780, 0x83B0, 0xDDA8, 0x83B1, 0xC0B3, 0x83B2, 0xC1AB, - 0x83B3, 0xDDAA, 0x83B4, 0xDDAB, 0x83B5, 0xC781, 0x83B6, 0xDDB2, - 0x83B7, 0xBBF1, 0x83B8, 0xDDB5, 0x83B9, 0xD3A8, 0x83BA, 0xDDBA, - 0x83BB, 0xC782, 0x83BC, 0xDDBB, 0x83BD, 0xC3A7, 0x83BE, 0xC783, - 0x83BF, 0xC784, 0x83C0, 0xDDD2, 0x83C1, 0xDDBC, 0x83C2, 0xC785, - 0x83C3, 0xC786, 0x83C4, 0xC787, 0x83C5, 0xDDD1, 0x83C6, 0xC788, - 0x83C7, 0xB9BD, 0x83C8, 0xC789, 0x83C9, 0xC78A, 0x83CA, 0xBED5, - 0x83CB, 0xC78B, 0x83CC, 0xBEFA, 0x83CD, 0xC78C, 0x83CE, 0xC78D, - 0x83CF, 0xBACA, 0x83D0, 0xC78E, 0x83D1, 0xC78F, 0x83D2, 0xC790, - 0x83D3, 0xC791, 0x83D4, 0xDDCA, 0x83D5, 0xC792, 0x83D6, 0xDDC5, - 0x83D7, 0xC793, 0x83D8, 0xDDBF, 0x83D9, 0xC794, 0x83DA, 0xC795, - 0x83DB, 0xC796, 0x83DC, 0xB2CB, 0x83DD, 0xDDC3, 0x83DE, 0xC797, - 0x83DF, 0xDDCB, 0x83E0, 0xB2A4, 0x83E1, 0xDDD5, 0x83E2, 0xC798, - 0x83E3, 0xC799, 0x83E4, 0xC79A, 0x83E5, 0xDDBE, 0x83E6, 0xC79B, - 0x83E7, 0xC79C, 0x83E8, 0xC79D, 0x83E9, 0xC6D0, 0x83EA, 0xDDD0, - 0x83EB, 0xC79E, 0x83EC, 0xC79F, 0x83ED, 0xC7A0, 0x83EE, 0xC840, - 0x83EF, 0xC841, 0x83F0, 0xDDD4, 0x83F1, 0xC1E2, 0x83F2, 0xB7C6, - 0x83F3, 0xC842, 0x83F4, 0xC843, 0x83F5, 0xC844, 0x83F6, 0xC845, - 0x83F7, 0xC846, 0x83F8, 0xDDCE, 0x83F9, 0xDDCF, 0x83FA, 0xC847, - 0x83FB, 0xC848, 0x83FC, 0xC849, 0x83FD, 0xDDC4, 0x83FE, 0xC84A, - 0x83FF, 0xC84B, 0x8400, 0xC84C, 0x8401, 0xDDBD, 0x8402, 0xC84D, - 0x8403, 0xDDCD, 0x8404, 0xCCD1, 0x8405, 0xC84E, 0x8406, 0xDDC9, - 0x8407, 0xC84F, 0x8408, 0xC850, 0x8409, 0xC851, 0x840A, 0xC852, - 0x840B, 0xDDC2, 0x840C, 0xC3C8, 0x840D, 0xC6BC, 0x840E, 0xCEAE, - 0x840F, 0xDDCC, 0x8410, 0xC853, 0x8411, 0xDDC8, 0x8412, 0xC854, - 0x8413, 0xC855, 0x8414, 0xC856, 0x8415, 0xC857, 0x8416, 0xC858, - 0x8417, 0xC859, 0x8418, 0xDDC1, 0x8419, 0xC85A, 0x841A, 0xC85B, - 0x841B, 0xC85C, 0x841C, 0xDDC6, 0x841D, 0xC2DC, 0x841E, 0xC85D, - 0x841F, 0xC85E, 0x8420, 0xC85F, 0x8421, 0xC860, 0x8422, 0xC861, - 0x8423, 0xC862, 0x8424, 0xD3A9, 0x8425, 0xD3AA, 0x8426, 0xDDD3, - 0x8427, 0xCFF4, 0x8428, 0xC8F8, 0x8429, 0xC863, 0x842A, 0xC864, - 0x842B, 0xC865, 0x842C, 0xC866, 0x842D, 0xC867, 0x842E, 0xC868, - 0x842F, 0xC869, 0x8430, 0xC86A, 0x8431, 0xDDE6, 0x8432, 0xC86B, - 0x8433, 0xC86C, 0x8434, 0xC86D, 0x8435, 0xC86E, 0x8436, 0xC86F, - 0x8437, 0xC870, 0x8438, 0xDDC7, 0x8439, 0xC871, 0x843A, 0xC872, - 0x843B, 0xC873, 0x843C, 0xDDE0, 0x843D, 0xC2E4, 0x843E, 0xC874, - 0x843F, 0xC875, 0x8440, 0xC876, 0x8441, 0xC877, 0x8442, 0xC878, - 0x8443, 0xC879, 0x8444, 0xC87A, 0x8445, 0xC87B, 0x8446, 0xDDE1, - 0x8447, 0xC87C, 0x8448, 0xC87D, 0x8449, 0xC87E, 0x844A, 0xC880, - 0x844B, 0xC881, 0x844C, 0xC882, 0x844D, 0xC883, 0x844E, 0xC884, - 0x844F, 0xC885, 0x8450, 0xC886, 0x8451, 0xDDD7, 0x8452, 0xC887, - 0x8453, 0xC888, 0x8454, 0xC889, 0x8455, 0xC88A, 0x8456, 0xC88B, - 0x8457, 0xD6F8, 0x8458, 0xC88C, 0x8459, 0xDDD9, 0x845A, 0xDDD8, - 0x845B, 0xB8F0, 0x845C, 0xDDD6, 0x845D, 0xC88D, 0x845E, 0xC88E, - 0x845F, 0xC88F, 0x8460, 0xC890, 0x8461, 0xC6CF, 0x8462, 0xC891, - 0x8463, 0xB6AD, 0x8464, 0xC892, 0x8465, 0xC893, 0x8466, 0xC894, - 0x8467, 0xC895, 0x8468, 0xC896, 0x8469, 0xDDE2, 0x846A, 0xC897, - 0x846B, 0xBAF9, 0x846C, 0xD4E1, 0x846D, 0xDDE7, 0x846E, 0xC898, - 0x846F, 0xC899, 0x8470, 0xC89A, 0x8471, 0xB4D0, 0x8472, 0xC89B, - 0x8473, 0xDDDA, 0x8474, 0xC89C, 0x8475, 0xBFFB, 0x8476, 0xDDE3, - 0x8477, 0xC89D, 0x8478, 0xDDDF, 0x8479, 0xC89E, 0x847A, 0xDDDD, - 0x847B, 0xC89F, 0x847C, 0xC8A0, 0x847D, 0xC940, 0x847E, 0xC941, - 0x847F, 0xC942, 0x8480, 0xC943, 0x8481, 0xC944, 0x8482, 0xB5D9, - 0x8483, 0xC945, 0x8484, 0xC946, 0x8485, 0xC947, 0x8486, 0xC948, - 0x8487, 0xDDDB, 0x8488, 0xDDDC, 0x8489, 0xDDDE, 0x848A, 0xC949, - 0x848B, 0xBDAF, 0x848C, 0xDDE4, 0x848D, 0xC94A, 0x848E, 0xDDE5, - 0x848F, 0xC94B, 0x8490, 0xC94C, 0x8491, 0xC94D, 0x8492, 0xC94E, - 0x8493, 0xC94F, 0x8494, 0xC950, 0x8495, 0xC951, 0x8496, 0xC952, - 0x8497, 0xDDF5, 0x8498, 0xC953, 0x8499, 0xC3C9, 0x849A, 0xC954, - 0x849B, 0xC955, 0x849C, 0xCBE2, 0x849D, 0xC956, 0x849E, 0xC957, - 0x849F, 0xC958, 0x84A0, 0xC959, 0x84A1, 0xDDF2, 0x84A2, 0xC95A, - 0x84A3, 0xC95B, 0x84A4, 0xC95C, 0x84A5, 0xC95D, 0x84A6, 0xC95E, - 0x84A7, 0xC95F, 0x84A8, 0xC960, 0x84A9, 0xC961, 0x84AA, 0xC962, - 0x84AB, 0xC963, 0x84AC, 0xC964, 0x84AD, 0xC965, 0x84AE, 0xC966, - 0x84AF, 0xD8E1, 0x84B0, 0xC967, 0x84B1, 0xC968, 0x84B2, 0xC6D1, - 0x84B3, 0xC969, 0x84B4, 0xDDF4, 0x84B5, 0xC96A, 0x84B6, 0xC96B, - 0x84B7, 0xC96C, 0x84B8, 0xD5F4, 0x84B9, 0xDDF3, 0x84BA, 0xDDF0, - 0x84BB, 0xC96D, 0x84BC, 0xC96E, 0x84BD, 0xDDEC, 0x84BE, 0xC96F, - 0x84BF, 0xDDEF, 0x84C0, 0xC970, 0x84C1, 0xDDE8, 0x84C2, 0xC971, - 0x84C3, 0xC972, 0x84C4, 0xD0EE, 0x84C5, 0xC973, 0x84C6, 0xC974, - 0x84C7, 0xC975, 0x84C8, 0xC976, 0x84C9, 0xC8D8, 0x84CA, 0xDDEE, - 0x84CB, 0xC977, 0x84CC, 0xC978, 0x84CD, 0xDDE9, 0x84CE, 0xC979, - 0x84CF, 0xC97A, 0x84D0, 0xDDEA, 0x84D1, 0xCBF2, 0x84D2, 0xC97B, - 0x84D3, 0xDDED, 0x84D4, 0xC97C, 0x84D5, 0xC97D, 0x84D6, 0xB1CD, - 0x84D7, 0xC97E, 0x84D8, 0xC980, 0x84D9, 0xC981, 0x84DA, 0xC982, - 0x84DB, 0xC983, 0x84DC, 0xC984, 0x84DD, 0xC0B6, 0x84DE, 0xC985, - 0x84DF, 0xBCBB, 0x84E0, 0xDDF1, 0x84E1, 0xC986, 0x84E2, 0xC987, - 0x84E3, 0xDDF7, 0x84E4, 0xC988, 0x84E5, 0xDDF6, 0x84E6, 0xDDEB, - 0x84E7, 0xC989, 0x84E8, 0xC98A, 0x84E9, 0xC98B, 0x84EA, 0xC98C, - 0x84EB, 0xC98D, 0x84EC, 0xC5EE, 0x84ED, 0xC98E, 0x84EE, 0xC98F, - 0x84EF, 0xC990, 0x84F0, 0xDDFB, 0x84F1, 0xC991, 0x84F2, 0xC992, - 0x84F3, 0xC993, 0x84F4, 0xC994, 0x84F5, 0xC995, 0x84F6, 0xC996, - 0x84F7, 0xC997, 0x84F8, 0xC998, 0x84F9, 0xC999, 0x84FA, 0xC99A, - 0x84FB, 0xC99B, 0x84FC, 0xDEA4, 0x84FD, 0xC99C, 0x84FE, 0xC99D, - 0x84FF, 0xDEA3, 0x8500, 0xC99E, 0x8501, 0xC99F, 0x8502, 0xC9A0, - 0x8503, 0xCA40, 0x8504, 0xCA41, 0x8505, 0xCA42, 0x8506, 0xCA43, - 0x8507, 0xCA44, 0x8508, 0xCA45, 0x8509, 0xCA46, 0x850A, 0xCA47, - 0x850B, 0xCA48, 0x850C, 0xDDF8, 0x850D, 0xCA49, 0x850E, 0xCA4A, - 0x850F, 0xCA4B, 0x8510, 0xCA4C, 0x8511, 0xC3EF, 0x8512, 0xCA4D, - 0x8513, 0xC2FB, 0x8514, 0xCA4E, 0x8515, 0xCA4F, 0x8516, 0xCA50, - 0x8517, 0xD5E1, 0x8518, 0xCA51, 0x8519, 0xCA52, 0x851A, 0xCEB5, - 0x851B, 0xCA53, 0x851C, 0xCA54, 0x851D, 0xCA55, 0x851E, 0xCA56, - 0x851F, 0xDDFD, 0x8520, 0xCA57, 0x8521, 0xB2CC, 0x8522, 0xCA58, - 0x8523, 0xCA59, 0x8524, 0xCA5A, 0x8525, 0xCA5B, 0x8526, 0xCA5C, - 0x8527, 0xCA5D, 0x8528, 0xCA5E, 0x8529, 0xCA5F, 0x852A, 0xCA60, - 0x852B, 0xC4E8, 0x852C, 0xCADF, 0x852D, 0xCA61, 0x852E, 0xCA62, - 0x852F, 0xCA63, 0x8530, 0xCA64, 0x8531, 0xCA65, 0x8532, 0xCA66, - 0x8533, 0xCA67, 0x8534, 0xCA68, 0x8535, 0xCA69, 0x8536, 0xCA6A, - 0x8537, 0xC7BE, 0x8538, 0xDDFA, 0x8539, 0xDDFC, 0x853A, 0xDDFE, - 0x853B, 0xDEA2, 0x853C, 0xB0AA, 0x853D, 0xB1CE, 0x853E, 0xCA6B, - 0x853F, 0xCA6C, 0x8540, 0xCA6D, 0x8541, 0xCA6E, 0x8542, 0xCA6F, - 0x8543, 0xDEAC, 0x8544, 0xCA70, 0x8545, 0xCA71, 0x8546, 0xCA72, - 0x8547, 0xCA73, 0x8548, 0xDEA6, 0x8549, 0xBDB6, 0x854A, 0xC8EF, - 0x854B, 0xCA74, 0x854C, 0xCA75, 0x854D, 0xCA76, 0x854E, 0xCA77, - 0x854F, 0xCA78, 0x8550, 0xCA79, 0x8551, 0xCA7A, 0x8552, 0xCA7B, - 0x8553, 0xCA7C, 0x8554, 0xCA7D, 0x8555, 0xCA7E, 0x8556, 0xDEA1, - 0x8557, 0xCA80, 0x8558, 0xCA81, 0x8559, 0xDEA5, 0x855A, 0xCA82, - 0x855B, 0xCA83, 0x855C, 0xCA84, 0x855D, 0xCA85, 0x855E, 0xDEA9, - 0x855F, 0xCA86, 0x8560, 0xCA87, 0x8561, 0xCA88, 0x8562, 0xCA89, - 0x8563, 0xCA8A, 0x8564, 0xDEA8, 0x8565, 0xCA8B, 0x8566, 0xCA8C, - 0x8567, 0xCA8D, 0x8568, 0xDEA7, 0x8569, 0xCA8E, 0x856A, 0xCA8F, - 0x856B, 0xCA90, 0x856C, 0xCA91, 0x856D, 0xCA92, 0x856E, 0xCA93, - 0x856F, 0xCA94, 0x8570, 0xCA95, 0x8571, 0xCA96, 0x8572, 0xDEAD, - 0x8573, 0xCA97, 0x8574, 0xD4CC, 0x8575, 0xCA98, 0x8576, 0xCA99, - 0x8577, 0xCA9A, 0x8578, 0xCA9B, 0x8579, 0xDEB3, 0x857A, 0xDEAA, - 0x857B, 0xDEAE, 0x857C, 0xCA9C, 0x857D, 0xCA9D, 0x857E, 0xC0D9, - 0x857F, 0xCA9E, 0x8580, 0xCA9F, 0x8581, 0xCAA0, 0x8582, 0xCB40, - 0x8583, 0xCB41, 0x8584, 0xB1A1, 0x8585, 0xDEB6, 0x8586, 0xCB42, - 0x8587, 0xDEB1, 0x8588, 0xCB43, 0x8589, 0xCB44, 0x858A, 0xCB45, - 0x858B, 0xCB46, 0x858C, 0xCB47, 0x858D, 0xCB48, 0x858E, 0xCB49, - 0x858F, 0xDEB2, 0x8590, 0xCB4A, 0x8591, 0xCB4B, 0x8592, 0xCB4C, - 0x8593, 0xCB4D, 0x8594, 0xCB4E, 0x8595, 0xCB4F, 0x8596, 0xCB50, - 0x8597, 0xCB51, 0x8598, 0xCB52, 0x8599, 0xCB53, 0x859A, 0xCB54, - 0x859B, 0xD1A6, 0x859C, 0xDEB5, 0x859D, 0xCB55, 0x859E, 0xCB56, - 0x859F, 0xCB57, 0x85A0, 0xCB58, 0x85A1, 0xCB59, 0x85A2, 0xCB5A, - 0x85A3, 0xCB5B, 0x85A4, 0xDEAF, 0x85A5, 0xCB5C, 0x85A6, 0xCB5D, - 0x85A7, 0xCB5E, 0x85A8, 0xDEB0, 0x85A9, 0xCB5F, 0x85AA, 0xD0BD, - 0x85AB, 0xCB60, 0x85AC, 0xCB61, 0x85AD, 0xCB62, 0x85AE, 0xDEB4, - 0x85AF, 0xCAED, 0x85B0, 0xDEB9, 0x85B1, 0xCB63, 0x85B2, 0xCB64, - 0x85B3, 0xCB65, 0x85B4, 0xCB66, 0x85B5, 0xCB67, 0x85B6, 0xCB68, - 0x85B7, 0xDEB8, 0x85B8, 0xCB69, 0x85B9, 0xDEB7, 0x85BA, 0xCB6A, - 0x85BB, 0xCB6B, 0x85BC, 0xCB6C, 0x85BD, 0xCB6D, 0x85BE, 0xCB6E, - 0x85BF, 0xCB6F, 0x85C0, 0xCB70, 0x85C1, 0xDEBB, 0x85C2, 0xCB71, - 0x85C3, 0xCB72, 0x85C4, 0xCB73, 0x85C5, 0xCB74, 0x85C6, 0xCB75, - 0x85C7, 0xCB76, 0x85C8, 0xCB77, 0x85C9, 0xBDE5, 0x85CA, 0xCB78, - 0x85CB, 0xCB79, 0x85CC, 0xCB7A, 0x85CD, 0xCB7B, 0x85CE, 0xCB7C, - 0x85CF, 0xB2D8, 0x85D0, 0xC3EA, 0x85D1, 0xCB7D, 0x85D2, 0xCB7E, - 0x85D3, 0xDEBA, 0x85D4, 0xCB80, 0x85D5, 0xC5BA, 0x85D6, 0xCB81, - 0x85D7, 0xCB82, 0x85D8, 0xCB83, 0x85D9, 0xCB84, 0x85DA, 0xCB85, - 0x85DB, 0xCB86, 0x85DC, 0xDEBC, 0x85DD, 0xCB87, 0x85DE, 0xCB88, - 0x85DF, 0xCB89, 0x85E0, 0xCB8A, 0x85E1, 0xCB8B, 0x85E2, 0xCB8C, - 0x85E3, 0xCB8D, 0x85E4, 0xCCD9, 0x85E5, 0xCB8E, 0x85E6, 0xCB8F, - 0x85E7, 0xCB90, 0x85E8, 0xCB91, 0x85E9, 0xB7AA, 0x85EA, 0xCB92, - 0x85EB, 0xCB93, 0x85EC, 0xCB94, 0x85ED, 0xCB95, 0x85EE, 0xCB96, - 0x85EF, 0xCB97, 0x85F0, 0xCB98, 0x85F1, 0xCB99, 0x85F2, 0xCB9A, - 0x85F3, 0xCB9B, 0x85F4, 0xCB9C, 0x85F5, 0xCB9D, 0x85F6, 0xCB9E, - 0x85F7, 0xCB9F, 0x85F8, 0xCBA0, 0x85F9, 0xCC40, 0x85FA, 0xCC41, - 0x85FB, 0xD4E5, 0x85FC, 0xCC42, 0x85FD, 0xCC43, 0x85FE, 0xCC44, - 0x85FF, 0xDEBD, 0x8600, 0xCC45, 0x8601, 0xCC46, 0x8602, 0xCC47, - 0x8603, 0xCC48, 0x8604, 0xCC49, 0x8605, 0xDEBF, 0x8606, 0xCC4A, - 0x8607, 0xCC4B, 0x8608, 0xCC4C, 0x8609, 0xCC4D, 0x860A, 0xCC4E, - 0x860B, 0xCC4F, 0x860C, 0xCC50, 0x860D, 0xCC51, 0x860E, 0xCC52, - 0x860F, 0xCC53, 0x8610, 0xCC54, 0x8611, 0xC4A2, 0x8612, 0xCC55, - 0x8613, 0xCC56, 0x8614, 0xCC57, 0x8615, 0xCC58, 0x8616, 0xDEC1, - 0x8617, 0xCC59, 0x8618, 0xCC5A, 0x8619, 0xCC5B, 0x861A, 0xCC5C, - 0x861B, 0xCC5D, 0x861C, 0xCC5E, 0x861D, 0xCC5F, 0x861E, 0xCC60, - 0x861F, 0xCC61, 0x8620, 0xCC62, 0x8621, 0xCC63, 0x8622, 0xCC64, - 0x8623, 0xCC65, 0x8624, 0xCC66, 0x8625, 0xCC67, 0x8626, 0xCC68, - 0x8627, 0xDEBE, 0x8628, 0xCC69, 0x8629, 0xDEC0, 0x862A, 0xCC6A, - 0x862B, 0xCC6B, 0x862C, 0xCC6C, 0x862D, 0xCC6D, 0x862E, 0xCC6E, - 0x862F, 0xCC6F, 0x8630, 0xCC70, 0x8631, 0xCC71, 0x8632, 0xCC72, - 0x8633, 0xCC73, 0x8634, 0xCC74, 0x8635, 0xCC75, 0x8636, 0xCC76, - 0x8637, 0xCC77, 0x8638, 0xD5BA, 0x8639, 0xCC78, 0x863A, 0xCC79, - 0x863B, 0xCC7A, 0x863C, 0xDEC2, 0x863D, 0xCC7B, 0x863E, 0xCC7C, - 0x863F, 0xCC7D, 0x8640, 0xCC7E, 0x8641, 0xCC80, 0x8642, 0xCC81, - 0x8643, 0xCC82, 0x8644, 0xCC83, 0x8645, 0xCC84, 0x8646, 0xCC85, - 0x8647, 0xCC86, 0x8648, 0xCC87, 0x8649, 0xCC88, 0x864A, 0xCC89, - 0x864B, 0xCC8A, 0x864C, 0xCC8B, 0x864D, 0xF2AE, 0x864E, 0xBBA2, - 0x864F, 0xC2B2, 0x8650, 0xC5B0, 0x8651, 0xC2C7, 0x8652, 0xCC8C, - 0x8653, 0xCC8D, 0x8654, 0xF2AF, 0x8655, 0xCC8E, 0x8656, 0xCC8F, - 0x8657, 0xCC90, 0x8658, 0xCC91, 0x8659, 0xCC92, 0x865A, 0xD0E9, - 0x865B, 0xCC93, 0x865C, 0xCC94, 0x865D, 0xCC95, 0x865E, 0xD3DD, - 0x865F, 0xCC96, 0x8660, 0xCC97, 0x8661, 0xCC98, 0x8662, 0xEBBD, - 0x8663, 0xCC99, 0x8664, 0xCC9A, 0x8665, 0xCC9B, 0x8666, 0xCC9C, - 0x8667, 0xCC9D, 0x8668, 0xCC9E, 0x8669, 0xCC9F, 0x866A, 0xCCA0, - 0x866B, 0xB3E6, 0x866C, 0xF2B0, 0x866D, 0xCD40, 0x866E, 0xF2B1, - 0x866F, 0xCD41, 0x8670, 0xCD42, 0x8671, 0xCAAD, 0x8672, 0xCD43, - 0x8673, 0xCD44, 0x8674, 0xCD45, 0x8675, 0xCD46, 0x8676, 0xCD47, - 0x8677, 0xCD48, 0x8678, 0xCD49, 0x8679, 0xBAE7, 0x867A, 0xF2B3, - 0x867B, 0xF2B5, 0x867C, 0xF2B4, 0x867D, 0xCBE4, 0x867E, 0xCFBA, - 0x867F, 0xF2B2, 0x8680, 0xCAB4, 0x8681, 0xD2CF, 0x8682, 0xC2EC, - 0x8683, 0xCD4A, 0x8684, 0xCD4B, 0x8685, 0xCD4C, 0x8686, 0xCD4D, - 0x8687, 0xCD4E, 0x8688, 0xCD4F, 0x8689, 0xCD50, 0x868A, 0xCEC3, - 0x868B, 0xF2B8, 0x868C, 0xB0F6, 0x868D, 0xF2B7, 0x868E, 0xCD51, - 0x868F, 0xCD52, 0x8690, 0xCD53, 0x8691, 0xCD54, 0x8692, 0xCD55, - 0x8693, 0xF2BE, 0x8694, 0xCD56, 0x8695, 0xB2CF, 0x8696, 0xCD57, - 0x8697, 0xCD58, 0x8698, 0xCD59, 0x8699, 0xCD5A, 0x869A, 0xCD5B, - 0x869B, 0xCD5C, 0x869C, 0xD1C1, 0x869D, 0xF2BA, 0x869E, 0xCD5D, - 0x869F, 0xCD5E, 0x86A0, 0xCD5F, 0x86A1, 0xCD60, 0x86A2, 0xCD61, - 0x86A3, 0xF2BC, 0x86A4, 0xD4E9, 0x86A5, 0xCD62, 0x86A6, 0xCD63, - 0x86A7, 0xF2BB, 0x86A8, 0xF2B6, 0x86A9, 0xF2BF, 0x86AA, 0xF2BD, - 0x86AB, 0xCD64, 0x86AC, 0xF2B9, 0x86AD, 0xCD65, 0x86AE, 0xCD66, - 0x86AF, 0xF2C7, 0x86B0, 0xF2C4, 0x86B1, 0xF2C6, 0x86B2, 0xCD67, - 0x86B3, 0xCD68, 0x86B4, 0xF2CA, 0x86B5, 0xF2C2, 0x86B6, 0xF2C0, - 0x86B7, 0xCD69, 0x86B8, 0xCD6A, 0x86B9, 0xCD6B, 0x86BA, 0xF2C5, - 0x86BB, 0xCD6C, 0x86BC, 0xCD6D, 0x86BD, 0xCD6E, 0x86BE, 0xCD6F, - 0x86BF, 0xCD70, 0x86C0, 0xD6FB, 0x86C1, 0xCD71, 0x86C2, 0xCD72, - 0x86C3, 0xCD73, 0x86C4, 0xF2C1, 0x86C5, 0xCD74, 0x86C6, 0xC7F9, - 0x86C7, 0xC9DF, 0x86C8, 0xCD75, 0x86C9, 0xF2C8, 0x86CA, 0xB9C6, - 0x86CB, 0xB5B0, 0x86CC, 0xCD76, 0x86CD, 0xCD77, 0x86CE, 0xF2C3, - 0x86CF, 0xF2C9, 0x86D0, 0xF2D0, 0x86D1, 0xF2D6, 0x86D2, 0xCD78, - 0x86D3, 0xCD79, 0x86D4, 0xBBD7, 0x86D5, 0xCD7A, 0x86D6, 0xCD7B, - 0x86D7, 0xCD7C, 0x86D8, 0xF2D5, 0x86D9, 0xCDDC, 0x86DA, 0xCD7D, - 0x86DB, 0xD6EB, 0x86DC, 0xCD7E, 0x86DD, 0xCD80, 0x86DE, 0xF2D2, - 0x86DF, 0xF2D4, 0x86E0, 0xCD81, 0x86E1, 0xCD82, 0x86E2, 0xCD83, - 0x86E3, 0xCD84, 0x86E4, 0xB8F2, 0x86E5, 0xCD85, 0x86E6, 0xCD86, - 0x86E7, 0xCD87, 0x86E8, 0xCD88, 0x86E9, 0xF2CB, 0x86EA, 0xCD89, - 0x86EB, 0xCD8A, 0x86EC, 0xCD8B, 0x86ED, 0xF2CE, 0x86EE, 0xC2F9, - 0x86EF, 0xCD8C, 0x86F0, 0xD5DD, 0x86F1, 0xF2CC, 0x86F2, 0xF2CD, - 0x86F3, 0xF2CF, 0x86F4, 0xF2D3, 0x86F5, 0xCD8D, 0x86F6, 0xCD8E, - 0x86F7, 0xCD8F, 0x86F8, 0xF2D9, 0x86F9, 0xD3BC, 0x86FA, 0xCD90, - 0x86FB, 0xCD91, 0x86FC, 0xCD92, 0x86FD, 0xCD93, 0x86FE, 0xB6EA, - 0x86FF, 0xCD94, 0x8700, 0xCAF1, 0x8701, 0xCD95, 0x8702, 0xB7E4, - 0x8703, 0xF2D7, 0x8704, 0xCD96, 0x8705, 0xCD97, 0x8706, 0xCD98, - 0x8707, 0xF2D8, 0x8708, 0xF2DA, 0x8709, 0xF2DD, 0x870A, 0xF2DB, - 0x870B, 0xCD99, 0x870C, 0xCD9A, 0x870D, 0xF2DC, 0x870E, 0xCD9B, - 0x870F, 0xCD9C, 0x8710, 0xCD9D, 0x8711, 0xCD9E, 0x8712, 0xD1D1, - 0x8713, 0xF2D1, 0x8714, 0xCD9F, 0x8715, 0xCDC9, 0x8716, 0xCDA0, - 0x8717, 0xCECF, 0x8718, 0xD6A9, 0x8719, 0xCE40, 0x871A, 0xF2E3, - 0x871B, 0xCE41, 0x871C, 0xC3DB, 0x871D, 0xCE42, 0x871E, 0xF2E0, - 0x871F, 0xCE43, 0x8720, 0xCE44, 0x8721, 0xC0AF, 0x8722, 0xF2EC, - 0x8723, 0xF2DE, 0x8724, 0xCE45, 0x8725, 0xF2E1, 0x8726, 0xCE46, - 0x8727, 0xCE47, 0x8728, 0xCE48, 0x8729, 0xF2E8, 0x872A, 0xCE49, - 0x872B, 0xCE4A, 0x872C, 0xCE4B, 0x872D, 0xCE4C, 0x872E, 0xF2E2, - 0x872F, 0xCE4D, 0x8730, 0xCE4E, 0x8731, 0xF2E7, 0x8732, 0xCE4F, - 0x8733, 0xCE50, 0x8734, 0xF2E6, 0x8735, 0xCE51, 0x8736, 0xCE52, - 0x8737, 0xF2E9, 0x8738, 0xCE53, 0x8739, 0xCE54, 0x873A, 0xCE55, - 0x873B, 0xF2DF, 0x873C, 0xCE56, 0x873D, 0xCE57, 0x873E, 0xF2E4, - 0x873F, 0xF2EA, 0x8740, 0xCE58, 0x8741, 0xCE59, 0x8742, 0xCE5A, - 0x8743, 0xCE5B, 0x8744, 0xCE5C, 0x8745, 0xCE5D, 0x8746, 0xCE5E, - 0x8747, 0xD3AC, 0x8748, 0xF2E5, 0x8749, 0xB2F5, 0x874A, 0xCE5F, - 0x874B, 0xCE60, 0x874C, 0xF2F2, 0x874D, 0xCE61, 0x874E, 0xD0AB, - 0x874F, 0xCE62, 0x8750, 0xCE63, 0x8751, 0xCE64, 0x8752, 0xCE65, - 0x8753, 0xF2F5, 0x8754, 0xCE66, 0x8755, 0xCE67, 0x8756, 0xCE68, - 0x8757, 0xBBC8, 0x8758, 0xCE69, 0x8759, 0xF2F9, 0x875A, 0xCE6A, - 0x875B, 0xCE6B, 0x875C, 0xCE6C, 0x875D, 0xCE6D, 0x875E, 0xCE6E, - 0x875F, 0xCE6F, 0x8760, 0xF2F0, 0x8761, 0xCE70, 0x8762, 0xCE71, - 0x8763, 0xF2F6, 0x8764, 0xF2F8, 0x8765, 0xF2FA, 0x8766, 0xCE72, - 0x8767, 0xCE73, 0x8768, 0xCE74, 0x8769, 0xCE75, 0x876A, 0xCE76, - 0x876B, 0xCE77, 0x876C, 0xCE78, 0x876D, 0xCE79, 0x876E, 0xF2F3, - 0x876F, 0xCE7A, 0x8770, 0xF2F1, 0x8771, 0xCE7B, 0x8772, 0xCE7C, - 0x8773, 0xCE7D, 0x8774, 0xBAFB, 0x8775, 0xCE7E, 0x8776, 0xB5FB, - 0x8777, 0xCE80, 0x8778, 0xCE81, 0x8779, 0xCE82, 0x877A, 0xCE83, - 0x877B, 0xF2EF, 0x877C, 0xF2F7, 0x877D, 0xF2ED, 0x877E, 0xF2EE, - 0x877F, 0xCE84, 0x8780, 0xCE85, 0x8781, 0xCE86, 0x8782, 0xF2EB, - 0x8783, 0xF3A6, 0x8784, 0xCE87, 0x8785, 0xF3A3, 0x8786, 0xCE88, - 0x8787, 0xCE89, 0x8788, 0xF3A2, 0x8789, 0xCE8A, 0x878A, 0xCE8B, - 0x878B, 0xF2F4, 0x878C, 0xCE8C, 0x878D, 0xC8DA, 0x878E, 0xCE8D, - 0x878F, 0xCE8E, 0x8790, 0xCE8F, 0x8791, 0xCE90, 0x8792, 0xCE91, - 0x8793, 0xF2FB, 0x8794, 0xCE92, 0x8795, 0xCE93, 0x8796, 0xCE94, - 0x8797, 0xF3A5, 0x8798, 0xCE95, 0x8799, 0xCE96, 0x879A, 0xCE97, - 0x879B, 0xCE98, 0x879C, 0xCE99, 0x879D, 0xCE9A, 0x879E, 0xCE9B, - 0x879F, 0xC3F8, 0x87A0, 0xCE9C, 0x87A1, 0xCE9D, 0x87A2, 0xCE9E, - 0x87A3, 0xCE9F, 0x87A4, 0xCEA0, 0x87A5, 0xCF40, 0x87A6, 0xCF41, - 0x87A7, 0xCF42, 0x87A8, 0xF2FD, 0x87A9, 0xCF43, 0x87AA, 0xCF44, - 0x87AB, 0xF3A7, 0x87AC, 0xF3A9, 0x87AD, 0xF3A4, 0x87AE, 0xCF45, - 0x87AF, 0xF2FC, 0x87B0, 0xCF46, 0x87B1, 0xCF47, 0x87B2, 0xCF48, - 0x87B3, 0xF3AB, 0x87B4, 0xCF49, 0x87B5, 0xF3AA, 0x87B6, 0xCF4A, - 0x87B7, 0xCF4B, 0x87B8, 0xCF4C, 0x87B9, 0xCF4D, 0x87BA, 0xC2DD, - 0x87BB, 0xCF4E, 0x87BC, 0xCF4F, 0x87BD, 0xF3AE, 0x87BE, 0xCF50, - 0x87BF, 0xCF51, 0x87C0, 0xF3B0, 0x87C1, 0xCF52, 0x87C2, 0xCF53, - 0x87C3, 0xCF54, 0x87C4, 0xCF55, 0x87C5, 0xCF56, 0x87C6, 0xF3A1, - 0x87C7, 0xCF57, 0x87C8, 0xCF58, 0x87C9, 0xCF59, 0x87CA, 0xF3B1, - 0x87CB, 0xF3AC, 0x87CC, 0xCF5A, 0x87CD, 0xCF5B, 0x87CE, 0xCF5C, - 0x87CF, 0xCF5D, 0x87D0, 0xCF5E, 0x87D1, 0xF3AF, 0x87D2, 0xF2FE, - 0x87D3, 0xF3AD, 0x87D4, 0xCF5F, 0x87D5, 0xCF60, 0x87D6, 0xCF61, - 0x87D7, 0xCF62, 0x87D8, 0xCF63, 0x87D9, 0xCF64, 0x87DA, 0xCF65, - 0x87DB, 0xF3B2, 0x87DC, 0xCF66, 0x87DD, 0xCF67, 0x87DE, 0xCF68, - 0x87DF, 0xCF69, 0x87E0, 0xF3B4, 0x87E1, 0xCF6A, 0x87E2, 0xCF6B, - 0x87E3, 0xCF6C, 0x87E4, 0xCF6D, 0x87E5, 0xF3A8, 0x87E6, 0xCF6E, - 0x87E7, 0xCF6F, 0x87E8, 0xCF70, 0x87E9, 0xCF71, 0x87EA, 0xF3B3, - 0x87EB, 0xCF72, 0x87EC, 0xCF73, 0x87ED, 0xCF74, 0x87EE, 0xF3B5, - 0x87EF, 0xCF75, 0x87F0, 0xCF76, 0x87F1, 0xCF77, 0x87F2, 0xCF78, - 0x87F3, 0xCF79, 0x87F4, 0xCF7A, 0x87F5, 0xCF7B, 0x87F6, 0xCF7C, - 0x87F7, 0xCF7D, 0x87F8, 0xCF7E, 0x87F9, 0xD0B7, 0x87FA, 0xCF80, - 0x87FB, 0xCF81, 0x87FC, 0xCF82, 0x87FD, 0xCF83, 0x87FE, 0xF3B8, - 0x87FF, 0xCF84, 0x8800, 0xCF85, 0x8801, 0xCF86, 0x8802, 0xCF87, - 0x8803, 0xD9F9, 0x8804, 0xCF88, 0x8805, 0xCF89, 0x8806, 0xCF8A, - 0x8807, 0xCF8B, 0x8808, 0xCF8C, 0x8809, 0xCF8D, 0x880A, 0xF3B9, - 0x880B, 0xCF8E, 0x880C, 0xCF8F, 0x880D, 0xCF90, 0x880E, 0xCF91, - 0x880F, 0xCF92, 0x8810, 0xCF93, 0x8811, 0xCF94, 0x8812, 0xCF95, - 0x8813, 0xF3B7, 0x8814, 0xCF96, 0x8815, 0xC8E4, 0x8816, 0xF3B6, - 0x8817, 0xCF97, 0x8818, 0xCF98, 0x8819, 0xCF99, 0x881A, 0xCF9A, - 0x881B, 0xF3BA, 0x881C, 0xCF9B, 0x881D, 0xCF9C, 0x881E, 0xCF9D, - 0x881F, 0xCF9E, 0x8820, 0xCF9F, 0x8821, 0xF3BB, 0x8822, 0xB4C0, - 0x8823, 0xCFA0, 0x8824, 0xD040, 0x8825, 0xD041, 0x8826, 0xD042, - 0x8827, 0xD043, 0x8828, 0xD044, 0x8829, 0xD045, 0x882A, 0xD046, - 0x882B, 0xD047, 0x882C, 0xD048, 0x882D, 0xD049, 0x882E, 0xD04A, - 0x882F, 0xD04B, 0x8830, 0xD04C, 0x8831, 0xD04D, 0x8832, 0xEEC3, - 0x8833, 0xD04E, 0x8834, 0xD04F, 0x8835, 0xD050, 0x8836, 0xD051, - 0x8837, 0xD052, 0x8838, 0xD053, 0x8839, 0xF3BC, 0x883A, 0xD054, - 0x883B, 0xD055, 0x883C, 0xF3BD, 0x883D, 0xD056, 0x883E, 0xD057, - 0x883F, 0xD058, 0x8840, 0xD1AA, 0x8841, 0xD059, 0x8842, 0xD05A, - 0x8843, 0xD05B, 0x8844, 0xF4AC, 0x8845, 0xD0C6, 0x8846, 0xD05C, - 0x8847, 0xD05D, 0x8848, 0xD05E, 0x8849, 0xD05F, 0x884A, 0xD060, - 0x884B, 0xD061, 0x884C, 0xD0D0, 0x884D, 0xD1DC, 0x884E, 0xD062, - 0x884F, 0xD063, 0x8850, 0xD064, 0x8851, 0xD065, 0x8852, 0xD066, - 0x8853, 0xD067, 0x8854, 0xCFCE, 0x8855, 0xD068, 0x8856, 0xD069, - 0x8857, 0xBDD6, 0x8858, 0xD06A, 0x8859, 0xD1C3, 0x885A, 0xD06B, - 0x885B, 0xD06C, 0x885C, 0xD06D, 0x885D, 0xD06E, 0x885E, 0xD06F, - 0x885F, 0xD070, 0x8860, 0xD071, 0x8861, 0xBAE2, 0x8862, 0xE1E9, - 0x8863, 0xD2C2, 0x8864, 0xF1C2, 0x8865, 0xB2B9, 0x8866, 0xD072, - 0x8867, 0xD073, 0x8868, 0xB1ED, 0x8869, 0xF1C3, 0x886A, 0xD074, - 0x886B, 0xC9C0, 0x886C, 0xB3C4, 0x886D, 0xD075, 0x886E, 0xD9F2, - 0x886F, 0xD076, 0x8870, 0xCBA5, 0x8871, 0xD077, 0x8872, 0xF1C4, - 0x8873, 0xD078, 0x8874, 0xD079, 0x8875, 0xD07A, 0x8876, 0xD07B, - 0x8877, 0xD6D4, 0x8878, 0xD07C, 0x8879, 0xD07D, 0x887A, 0xD07E, - 0x887B, 0xD080, 0x887C, 0xD081, 0x887D, 0xF1C5, 0x887E, 0xF4C0, - 0x887F, 0xF1C6, 0x8880, 0xD082, 0x8881, 0xD4AC, 0x8882, 0xF1C7, - 0x8883, 0xD083, 0x8884, 0xB0C0, 0x8885, 0xF4C1, 0x8886, 0xD084, - 0x8887, 0xD085, 0x8888, 0xF4C2, 0x8889, 0xD086, 0x888A, 0xD087, - 0x888B, 0xB4FC, 0x888C, 0xD088, 0x888D, 0xC5DB, 0x888E, 0xD089, - 0x888F, 0xD08A, 0x8890, 0xD08B, 0x8891, 0xD08C, 0x8892, 0xCCBB, - 0x8893, 0xD08D, 0x8894, 0xD08E, 0x8895, 0xD08F, 0x8896, 0xD0E4, - 0x8897, 0xD090, 0x8898, 0xD091, 0x8899, 0xD092, 0x889A, 0xD093, - 0x889B, 0xD094, 0x889C, 0xCDE0, 0x889D, 0xD095, 0x889E, 0xD096, - 0x889F, 0xD097, 0x88A0, 0xD098, 0x88A1, 0xD099, 0x88A2, 0xF1C8, - 0x88A3, 0xD09A, 0x88A4, 0xD9F3, 0x88A5, 0xD09B, 0x88A6, 0xD09C, - 0x88A7, 0xD09D, 0x88A8, 0xD09E, 0x88A9, 0xD09F, 0x88AA, 0xD0A0, - 0x88AB, 0xB1BB, 0x88AC, 0xD140, 0x88AD, 0xCFAE, 0x88AE, 0xD141, - 0x88AF, 0xD142, 0x88B0, 0xD143, 0x88B1, 0xB8A4, 0x88B2, 0xD144, - 0x88B3, 0xD145, 0x88B4, 0xD146, 0x88B5, 0xD147, 0x88B6, 0xD148, - 0x88B7, 0xF1CA, 0x88B8, 0xD149, 0x88B9, 0xD14A, 0x88BA, 0xD14B, - 0x88BB, 0xD14C, 0x88BC, 0xF1CB, 0x88BD, 0xD14D, 0x88BE, 0xD14E, - 0x88BF, 0xD14F, 0x88C0, 0xD150, 0x88C1, 0xB2C3, 0x88C2, 0xC1D1, - 0x88C3, 0xD151, 0x88C4, 0xD152, 0x88C5, 0xD7B0, 0x88C6, 0xF1C9, - 0x88C7, 0xD153, 0x88C8, 0xD154, 0x88C9, 0xF1CC, 0x88CA, 0xD155, - 0x88CB, 0xD156, 0x88CC, 0xD157, 0x88CD, 0xD158, 0x88CE, 0xF1CE, - 0x88CF, 0xD159, 0x88D0, 0xD15A, 0x88D1, 0xD15B, 0x88D2, 0xD9F6, - 0x88D3, 0xD15C, 0x88D4, 0xD2E1, 0x88D5, 0xD4A3, 0x88D6, 0xD15D, - 0x88D7, 0xD15E, 0x88D8, 0xF4C3, 0x88D9, 0xC8B9, 0x88DA, 0xD15F, - 0x88DB, 0xD160, 0x88DC, 0xD161, 0x88DD, 0xD162, 0x88DE, 0xD163, - 0x88DF, 0xF4C4, 0x88E0, 0xD164, 0x88E1, 0xD165, 0x88E2, 0xF1CD, - 0x88E3, 0xF1CF, 0x88E4, 0xBFE3, 0x88E5, 0xF1D0, 0x88E6, 0xD166, - 0x88E7, 0xD167, 0x88E8, 0xF1D4, 0x88E9, 0xD168, 0x88EA, 0xD169, - 0x88EB, 0xD16A, 0x88EC, 0xD16B, 0x88ED, 0xD16C, 0x88EE, 0xD16D, - 0x88EF, 0xD16E, 0x88F0, 0xF1D6, 0x88F1, 0xF1D1, 0x88F2, 0xD16F, - 0x88F3, 0xC9D1, 0x88F4, 0xC5E1, 0x88F5, 0xD170, 0x88F6, 0xD171, - 0x88F7, 0xD172, 0x88F8, 0xC2E3, 0x88F9, 0xB9FC, 0x88FA, 0xD173, - 0x88FB, 0xD174, 0x88FC, 0xF1D3, 0x88FD, 0xD175, 0x88FE, 0xF1D5, - 0x88FF, 0xD176, 0x8900, 0xD177, 0x8901, 0xD178, 0x8902, 0xB9D3, - 0x8903, 0xD179, 0x8904, 0xD17A, 0x8905, 0xD17B, 0x8906, 0xD17C, - 0x8907, 0xD17D, 0x8908, 0xD17E, 0x8909, 0xD180, 0x890A, 0xF1DB, - 0x890B, 0xD181, 0x890C, 0xD182, 0x890D, 0xD183, 0x890E, 0xD184, - 0x890F, 0xD185, 0x8910, 0xBAD6, 0x8911, 0xD186, 0x8912, 0xB0FD, - 0x8913, 0xF1D9, 0x8914, 0xD187, 0x8915, 0xD188, 0x8916, 0xD189, - 0x8917, 0xD18A, 0x8918, 0xD18B, 0x8919, 0xF1D8, 0x891A, 0xF1D2, - 0x891B, 0xF1DA, 0x891C, 0xD18C, 0x891D, 0xD18D, 0x891E, 0xD18E, - 0x891F, 0xD18F, 0x8920, 0xD190, 0x8921, 0xF1D7, 0x8922, 0xD191, - 0x8923, 0xD192, 0x8924, 0xD193, 0x8925, 0xC8EC, 0x8926, 0xD194, - 0x8927, 0xD195, 0x8928, 0xD196, 0x8929, 0xD197, 0x892A, 0xCDCA, - 0x892B, 0xF1DD, 0x892C, 0xD198, 0x892D, 0xD199, 0x892E, 0xD19A, - 0x892F, 0xD19B, 0x8930, 0xE5BD, 0x8931, 0xD19C, 0x8932, 0xD19D, - 0x8933, 0xD19E, 0x8934, 0xF1DC, 0x8935, 0xD19F, 0x8936, 0xF1DE, - 0x8937, 0xD1A0, 0x8938, 0xD240, 0x8939, 0xD241, 0x893A, 0xD242, - 0x893B, 0xD243, 0x893C, 0xD244, 0x893D, 0xD245, 0x893E, 0xD246, - 0x893F, 0xD247, 0x8940, 0xD248, 0x8941, 0xF1DF, 0x8942, 0xD249, - 0x8943, 0xD24A, 0x8944, 0xCFE5, 0x8945, 0xD24B, 0x8946, 0xD24C, - 0x8947, 0xD24D, 0x8948, 0xD24E, 0x8949, 0xD24F, 0x894A, 0xD250, - 0x894B, 0xD251, 0x894C, 0xD252, 0x894D, 0xD253, 0x894E, 0xD254, - 0x894F, 0xD255, 0x8950, 0xD256, 0x8951, 0xD257, 0x8952, 0xD258, - 0x8953, 0xD259, 0x8954, 0xD25A, 0x8955, 0xD25B, 0x8956, 0xD25C, - 0x8957, 0xD25D, 0x8958, 0xD25E, 0x8959, 0xD25F, 0x895A, 0xD260, - 0x895B, 0xD261, 0x895C, 0xD262, 0x895D, 0xD263, 0x895E, 0xF4C5, - 0x895F, 0xBDF3, 0x8960, 0xD264, 0x8961, 0xD265, 0x8962, 0xD266, - 0x8963, 0xD267, 0x8964, 0xD268, 0x8965, 0xD269, 0x8966, 0xF1E0, - 0x8967, 0xD26A, 0x8968, 0xD26B, 0x8969, 0xD26C, 0x896A, 0xD26D, - 0x896B, 0xD26E, 0x896C, 0xD26F, 0x896D, 0xD270, 0x896E, 0xD271, - 0x896F, 0xD272, 0x8970, 0xD273, 0x8971, 0xD274, 0x8972, 0xD275, - 0x8973, 0xD276, 0x8974, 0xD277, 0x8975, 0xD278, 0x8976, 0xD279, - 0x8977, 0xD27A, 0x8978, 0xD27B, 0x8979, 0xD27C, 0x897A, 0xD27D, - 0x897B, 0xF1E1, 0x897C, 0xD27E, 0x897D, 0xD280, 0x897E, 0xD281, - 0x897F, 0xCEF7, 0x8980, 0xD282, 0x8981, 0xD2AA, 0x8982, 0xD283, - 0x8983, 0xF1FB, 0x8984, 0xD284, 0x8985, 0xD285, 0x8986, 0xB8B2, - 0x8987, 0xD286, 0x8988, 0xD287, 0x8989, 0xD288, 0x898A, 0xD289, - 0x898B, 0xD28A, 0x898C, 0xD28B, 0x898D, 0xD28C, 0x898E, 0xD28D, - 0x898F, 0xD28E, 0x8990, 0xD28F, 0x8991, 0xD290, 0x8992, 0xD291, - 0x8993, 0xD292, 0x8994, 0xD293, 0x8995, 0xD294, 0x8996, 0xD295, - 0x8997, 0xD296, 0x8998, 0xD297, 0x8999, 0xD298, 0x899A, 0xD299, - 0x899B, 0xD29A, 0x899C, 0xD29B, 0x899D, 0xD29C, 0x899E, 0xD29D, - 0x899F, 0xD29E, 0x89A0, 0xD29F, 0x89A1, 0xD2A0, 0x89A2, 0xD340, - 0x89A3, 0xD341, 0x89A4, 0xD342, 0x89A5, 0xD343, 0x89A6, 0xD344, - 0x89A7, 0xD345, 0x89A8, 0xD346, 0x89A9, 0xD347, 0x89AA, 0xD348, - 0x89AB, 0xD349, 0x89AC, 0xD34A, 0x89AD, 0xD34B, 0x89AE, 0xD34C, - 0x89AF, 0xD34D, 0x89B0, 0xD34E, 0x89B1, 0xD34F, 0x89B2, 0xD350, - 0x89B3, 0xD351, 0x89B4, 0xD352, 0x89B5, 0xD353, 0x89B6, 0xD354, - 0x89B7, 0xD355, 0x89B8, 0xD356, 0x89B9, 0xD357, 0x89BA, 0xD358, - 0x89BB, 0xD359, 0x89BC, 0xD35A, 0x89BD, 0xD35B, 0x89BE, 0xD35C, - 0x89BF, 0xD35D, 0x89C0, 0xD35E, 0x89C1, 0xBCFB, 0x89C2, 0xB9DB, - 0x89C3, 0xD35F, 0x89C4, 0xB9E6, 0x89C5, 0xC3D9, 0x89C6, 0xCAD3, - 0x89C7, 0xEAE8, 0x89C8, 0xC0C0, 0x89C9, 0xBEF5, 0x89CA, 0xEAE9, - 0x89CB, 0xEAEA, 0x89CC, 0xEAEB, 0x89CD, 0xD360, 0x89CE, 0xEAEC, - 0x89CF, 0xEAED, 0x89D0, 0xEAEE, 0x89D1, 0xEAEF, 0x89D2, 0xBDC7, - 0x89D3, 0xD361, 0x89D4, 0xD362, 0x89D5, 0xD363, 0x89D6, 0xF5FB, - 0x89D7, 0xD364, 0x89D8, 0xD365, 0x89D9, 0xD366, 0x89DA, 0xF5FD, - 0x89DB, 0xD367, 0x89DC, 0xF5FE, 0x89DD, 0xD368, 0x89DE, 0xF5FC, - 0x89DF, 0xD369, 0x89E0, 0xD36A, 0x89E1, 0xD36B, 0x89E2, 0xD36C, - 0x89E3, 0xBDE2, 0x89E4, 0xD36D, 0x89E5, 0xF6A1, 0x89E6, 0xB4A5, - 0x89E7, 0xD36E, 0x89E8, 0xD36F, 0x89E9, 0xD370, 0x89EA, 0xD371, - 0x89EB, 0xF6A2, 0x89EC, 0xD372, 0x89ED, 0xD373, 0x89EE, 0xD374, - 0x89EF, 0xF6A3, 0x89F0, 0xD375, 0x89F1, 0xD376, 0x89F2, 0xD377, - 0x89F3, 0xECB2, 0x89F4, 0xD378, 0x89F5, 0xD379, 0x89F6, 0xD37A, - 0x89F7, 0xD37B, 0x89F8, 0xD37C, 0x89F9, 0xD37D, 0x89FA, 0xD37E, - 0x89FB, 0xD380, 0x89FC, 0xD381, 0x89FD, 0xD382, 0x89FE, 0xD383, - 0x89FF, 0xD384, 0x8A00, 0xD1D4, 0x8A01, 0xD385, 0x8A02, 0xD386, - 0x8A03, 0xD387, 0x8A04, 0xD388, 0x8A05, 0xD389, 0x8A06, 0xD38A, - 0x8A07, 0xD9EA, 0x8A08, 0xD38B, 0x8A09, 0xD38C, 0x8A0A, 0xD38D, - 0x8A0B, 0xD38E, 0x8A0C, 0xD38F, 0x8A0D, 0xD390, 0x8A0E, 0xD391, - 0x8A0F, 0xD392, 0x8A10, 0xD393, 0x8A11, 0xD394, 0x8A12, 0xD395, - 0x8A13, 0xD396, 0x8A14, 0xD397, 0x8A15, 0xD398, 0x8A16, 0xD399, - 0x8A17, 0xD39A, 0x8A18, 0xD39B, 0x8A19, 0xD39C, 0x8A1A, 0xD39D, - 0x8A1B, 0xD39E, 0x8A1C, 0xD39F, 0x8A1D, 0xD3A0, 0x8A1E, 0xD440, - 0x8A1F, 0xD441, 0x8A20, 0xD442, 0x8A21, 0xD443, 0x8A22, 0xD444, - 0x8A23, 0xD445, 0x8A24, 0xD446, 0x8A25, 0xD447, 0x8A26, 0xD448, - 0x8A27, 0xD449, 0x8A28, 0xD44A, 0x8A29, 0xD44B, 0x8A2A, 0xD44C, - 0x8A2B, 0xD44D, 0x8A2C, 0xD44E, 0x8A2D, 0xD44F, 0x8A2E, 0xD450, - 0x8A2F, 0xD451, 0x8A30, 0xD452, 0x8A31, 0xD453, 0x8A32, 0xD454, - 0x8A33, 0xD455, 0x8A34, 0xD456, 0x8A35, 0xD457, 0x8A36, 0xD458, - 0x8A37, 0xD459, 0x8A38, 0xD45A, 0x8A39, 0xD45B, 0x8A3A, 0xD45C, - 0x8A3B, 0xD45D, 0x8A3C, 0xD45E, 0x8A3D, 0xD45F, 0x8A3E, 0xF6A4, - 0x8A3F, 0xD460, 0x8A40, 0xD461, 0x8A41, 0xD462, 0x8A42, 0xD463, - 0x8A43, 0xD464, 0x8A44, 0xD465, 0x8A45, 0xD466, 0x8A46, 0xD467, - 0x8A47, 0xD468, 0x8A48, 0xEEBA, 0x8A49, 0xD469, 0x8A4A, 0xD46A, - 0x8A4B, 0xD46B, 0x8A4C, 0xD46C, 0x8A4D, 0xD46D, 0x8A4E, 0xD46E, - 0x8A4F, 0xD46F, 0x8A50, 0xD470, 0x8A51, 0xD471, 0x8A52, 0xD472, - 0x8A53, 0xD473, 0x8A54, 0xD474, 0x8A55, 0xD475, 0x8A56, 0xD476, - 0x8A57, 0xD477, 0x8A58, 0xD478, 0x8A59, 0xD479, 0x8A5A, 0xD47A, - 0x8A5B, 0xD47B, 0x8A5C, 0xD47C, 0x8A5D, 0xD47D, 0x8A5E, 0xD47E, - 0x8A5F, 0xD480, 0x8A60, 0xD481, 0x8A61, 0xD482, 0x8A62, 0xD483, - 0x8A63, 0xD484, 0x8A64, 0xD485, 0x8A65, 0xD486, 0x8A66, 0xD487, - 0x8A67, 0xD488, 0x8A68, 0xD489, 0x8A69, 0xD48A, 0x8A6A, 0xD48B, - 0x8A6B, 0xD48C, 0x8A6C, 0xD48D, 0x8A6D, 0xD48E, 0x8A6E, 0xD48F, - 0x8A6F, 0xD490, 0x8A70, 0xD491, 0x8A71, 0xD492, 0x8A72, 0xD493, - 0x8A73, 0xD494, 0x8A74, 0xD495, 0x8A75, 0xD496, 0x8A76, 0xD497, - 0x8A77, 0xD498, 0x8A78, 0xD499, 0x8A79, 0xD5B2, 0x8A7A, 0xD49A, - 0x8A7B, 0xD49B, 0x8A7C, 0xD49C, 0x8A7D, 0xD49D, 0x8A7E, 0xD49E, - 0x8A7F, 0xD49F, 0x8A80, 0xD4A0, 0x8A81, 0xD540, 0x8A82, 0xD541, - 0x8A83, 0xD542, 0x8A84, 0xD543, 0x8A85, 0xD544, 0x8A86, 0xD545, - 0x8A87, 0xD546, 0x8A88, 0xD547, 0x8A89, 0xD3FE, 0x8A8A, 0xCCDC, - 0x8A8B, 0xD548, 0x8A8C, 0xD549, 0x8A8D, 0xD54A, 0x8A8E, 0xD54B, - 0x8A8F, 0xD54C, 0x8A90, 0xD54D, 0x8A91, 0xD54E, 0x8A92, 0xD54F, - 0x8A93, 0xCAC4, 0x8A94, 0xD550, 0x8A95, 0xD551, 0x8A96, 0xD552, - 0x8A97, 0xD553, 0x8A98, 0xD554, 0x8A99, 0xD555, 0x8A9A, 0xD556, - 0x8A9B, 0xD557, 0x8A9C, 0xD558, 0x8A9D, 0xD559, 0x8A9E, 0xD55A, - 0x8A9F, 0xD55B, 0x8AA0, 0xD55C, 0x8AA1, 0xD55D, 0x8AA2, 0xD55E, - 0x8AA3, 0xD55F, 0x8AA4, 0xD560, 0x8AA5, 0xD561, 0x8AA6, 0xD562, - 0x8AA7, 0xD563, 0x8AA8, 0xD564, 0x8AA9, 0xD565, 0x8AAA, 0xD566, - 0x8AAB, 0xD567, 0x8AAC, 0xD568, 0x8AAD, 0xD569, 0x8AAE, 0xD56A, - 0x8AAF, 0xD56B, 0x8AB0, 0xD56C, 0x8AB1, 0xD56D, 0x8AB2, 0xD56E, - 0x8AB3, 0xD56F, 0x8AB4, 0xD570, 0x8AB5, 0xD571, 0x8AB6, 0xD572, - 0x8AB7, 0xD573, 0x8AB8, 0xD574, 0x8AB9, 0xD575, 0x8ABA, 0xD576, - 0x8ABB, 0xD577, 0x8ABC, 0xD578, 0x8ABD, 0xD579, 0x8ABE, 0xD57A, - 0x8ABF, 0xD57B, 0x8AC0, 0xD57C, 0x8AC1, 0xD57D, 0x8AC2, 0xD57E, - 0x8AC3, 0xD580, 0x8AC4, 0xD581, 0x8AC5, 0xD582, 0x8AC6, 0xD583, - 0x8AC7, 0xD584, 0x8AC8, 0xD585, 0x8AC9, 0xD586, 0x8ACA, 0xD587, - 0x8ACB, 0xD588, 0x8ACC, 0xD589, 0x8ACD, 0xD58A, 0x8ACE, 0xD58B, - 0x8ACF, 0xD58C, 0x8AD0, 0xD58D, 0x8AD1, 0xD58E, 0x8AD2, 0xD58F, - 0x8AD3, 0xD590, 0x8AD4, 0xD591, 0x8AD5, 0xD592, 0x8AD6, 0xD593, - 0x8AD7, 0xD594, 0x8AD8, 0xD595, 0x8AD9, 0xD596, 0x8ADA, 0xD597, - 0x8ADB, 0xD598, 0x8ADC, 0xD599, 0x8ADD, 0xD59A, 0x8ADE, 0xD59B, - 0x8ADF, 0xD59C, 0x8AE0, 0xD59D, 0x8AE1, 0xD59E, 0x8AE2, 0xD59F, - 0x8AE3, 0xD5A0, 0x8AE4, 0xD640, 0x8AE5, 0xD641, 0x8AE6, 0xD642, - 0x8AE7, 0xD643, 0x8AE8, 0xD644, 0x8AE9, 0xD645, 0x8AEA, 0xD646, - 0x8AEB, 0xD647, 0x8AEC, 0xD648, 0x8AED, 0xD649, 0x8AEE, 0xD64A, - 0x8AEF, 0xD64B, 0x8AF0, 0xD64C, 0x8AF1, 0xD64D, 0x8AF2, 0xD64E, - 0x8AF3, 0xD64F, 0x8AF4, 0xD650, 0x8AF5, 0xD651, 0x8AF6, 0xD652, - 0x8AF7, 0xD653, 0x8AF8, 0xD654, 0x8AF9, 0xD655, 0x8AFA, 0xD656, - 0x8AFB, 0xD657, 0x8AFC, 0xD658, 0x8AFD, 0xD659, 0x8AFE, 0xD65A, - 0x8AFF, 0xD65B, 0x8B00, 0xD65C, 0x8B01, 0xD65D, 0x8B02, 0xD65E, - 0x8B03, 0xD65F, 0x8B04, 0xD660, 0x8B05, 0xD661, 0x8B06, 0xD662, - 0x8B07, 0xE5C0, 0x8B08, 0xD663, 0x8B09, 0xD664, 0x8B0A, 0xD665, - 0x8B0B, 0xD666, 0x8B0C, 0xD667, 0x8B0D, 0xD668, 0x8B0E, 0xD669, - 0x8B0F, 0xD66A, 0x8B10, 0xD66B, 0x8B11, 0xD66C, 0x8B12, 0xD66D, - 0x8B13, 0xD66E, 0x8B14, 0xD66F, 0x8B15, 0xD670, 0x8B16, 0xD671, - 0x8B17, 0xD672, 0x8B18, 0xD673, 0x8B19, 0xD674, 0x8B1A, 0xD675, - 0x8B1B, 0xD676, 0x8B1C, 0xD677, 0x8B1D, 0xD678, 0x8B1E, 0xD679, - 0x8B1F, 0xD67A, 0x8B20, 0xD67B, 0x8B21, 0xD67C, 0x8B22, 0xD67D, - 0x8B23, 0xD67E, 0x8B24, 0xD680, 0x8B25, 0xD681, 0x8B26, 0xF6A5, - 0x8B27, 0xD682, 0x8B28, 0xD683, 0x8B29, 0xD684, 0x8B2A, 0xD685, - 0x8B2B, 0xD686, 0x8B2C, 0xD687, 0x8B2D, 0xD688, 0x8B2E, 0xD689, - 0x8B2F, 0xD68A, 0x8B30, 0xD68B, 0x8B31, 0xD68C, 0x8B32, 0xD68D, - 0x8B33, 0xD68E, 0x8B34, 0xD68F, 0x8B35, 0xD690, 0x8B36, 0xD691, - 0x8B37, 0xD692, 0x8B38, 0xD693, 0x8B39, 0xD694, 0x8B3A, 0xD695, - 0x8B3B, 0xD696, 0x8B3C, 0xD697, 0x8B3D, 0xD698, 0x8B3E, 0xD699, - 0x8B3F, 0xD69A, 0x8B40, 0xD69B, 0x8B41, 0xD69C, 0x8B42, 0xD69D, - 0x8B43, 0xD69E, 0x8B44, 0xD69F, 0x8B45, 0xD6A0, 0x8B46, 0xD740, - 0x8B47, 0xD741, 0x8B48, 0xD742, 0x8B49, 0xD743, 0x8B4A, 0xD744, - 0x8B4B, 0xD745, 0x8B4C, 0xD746, 0x8B4D, 0xD747, 0x8B4E, 0xD748, - 0x8B4F, 0xD749, 0x8B50, 0xD74A, 0x8B51, 0xD74B, 0x8B52, 0xD74C, - 0x8B53, 0xD74D, 0x8B54, 0xD74E, 0x8B55, 0xD74F, 0x8B56, 0xD750, - 0x8B57, 0xD751, 0x8B58, 0xD752, 0x8B59, 0xD753, 0x8B5A, 0xD754, - 0x8B5B, 0xD755, 0x8B5C, 0xD756, 0x8B5D, 0xD757, 0x8B5E, 0xD758, - 0x8B5F, 0xD759, 0x8B60, 0xD75A, 0x8B61, 0xD75B, 0x8B62, 0xD75C, - 0x8B63, 0xD75D, 0x8B64, 0xD75E, 0x8B65, 0xD75F, 0x8B66, 0xBEAF, - 0x8B67, 0xD760, 0x8B68, 0xD761, 0x8B69, 0xD762, 0x8B6A, 0xD763, - 0x8B6B, 0xD764, 0x8B6C, 0xC6A9, 0x8B6D, 0xD765, 0x8B6E, 0xD766, - 0x8B6F, 0xD767, 0x8B70, 0xD768, 0x8B71, 0xD769, 0x8B72, 0xD76A, - 0x8B73, 0xD76B, 0x8B74, 0xD76C, 0x8B75, 0xD76D, 0x8B76, 0xD76E, - 0x8B77, 0xD76F, 0x8B78, 0xD770, 0x8B79, 0xD771, 0x8B7A, 0xD772, - 0x8B7B, 0xD773, 0x8B7C, 0xD774, 0x8B7D, 0xD775, 0x8B7E, 0xD776, - 0x8B7F, 0xD777, 0x8B80, 0xD778, 0x8B81, 0xD779, 0x8B82, 0xD77A, - 0x8B83, 0xD77B, 0x8B84, 0xD77C, 0x8B85, 0xD77D, 0x8B86, 0xD77E, - 0x8B87, 0xD780, 0x8B88, 0xD781, 0x8B89, 0xD782, 0x8B8A, 0xD783, - 0x8B8B, 0xD784, 0x8B8C, 0xD785, 0x8B8D, 0xD786, 0x8B8E, 0xD787, - 0x8B8F, 0xD788, 0x8B90, 0xD789, 0x8B91, 0xD78A, 0x8B92, 0xD78B, - 0x8B93, 0xD78C, 0x8B94, 0xD78D, 0x8B95, 0xD78E, 0x8B96, 0xD78F, - 0x8B97, 0xD790, 0x8B98, 0xD791, 0x8B99, 0xD792, 0x8B9A, 0xD793, - 0x8B9B, 0xD794, 0x8B9C, 0xD795, 0x8B9D, 0xD796, 0x8B9E, 0xD797, - 0x8B9F, 0xD798, 0x8BA0, 0xDAA5, 0x8BA1, 0xBCC6, 0x8BA2, 0xB6A9, - 0x8BA3, 0xB8BC, 0x8BA4, 0xC8CF, 0x8BA5, 0xBCA5, 0x8BA6, 0xDAA6, - 0x8BA7, 0xDAA7, 0x8BA8, 0xCCD6, 0x8BA9, 0xC8C3, 0x8BAA, 0xDAA8, - 0x8BAB, 0xC6FD, 0x8BAC, 0xD799, 0x8BAD, 0xD1B5, 0x8BAE, 0xD2E9, - 0x8BAF, 0xD1B6, 0x8BB0, 0xBCC7, 0x8BB1, 0xD79A, 0x8BB2, 0xBDB2, - 0x8BB3, 0xBBE4, 0x8BB4, 0xDAA9, 0x8BB5, 0xDAAA, 0x8BB6, 0xD1C8, - 0x8BB7, 0xDAAB, 0x8BB8, 0xD0ED, 0x8BB9, 0xB6EF, 0x8BBA, 0xC2DB, - 0x8BBB, 0xD79B, 0x8BBC, 0xCBCF, 0x8BBD, 0xB7ED, 0x8BBE, 0xC9E8, - 0x8BBF, 0xB7C3, 0x8BC0, 0xBEF7, 0x8BC1, 0xD6A4, 0x8BC2, 0xDAAC, - 0x8BC3, 0xDAAD, 0x8BC4, 0xC6C0, 0x8BC5, 0xD7E7, 0x8BC6, 0xCAB6, - 0x8BC7, 0xD79C, 0x8BC8, 0xD5A9, 0x8BC9, 0xCBDF, 0x8BCA, 0xD5EF, - 0x8BCB, 0xDAAE, 0x8BCC, 0xD6DF, 0x8BCD, 0xB4CA, 0x8BCE, 0xDAB0, - 0x8BCF, 0xDAAF, 0x8BD0, 0xD79D, 0x8BD1, 0xD2EB, 0x8BD2, 0xDAB1, - 0x8BD3, 0xDAB2, 0x8BD4, 0xDAB3, 0x8BD5, 0xCAD4, 0x8BD6, 0xDAB4, - 0x8BD7, 0xCAAB, 0x8BD8, 0xDAB5, 0x8BD9, 0xDAB6, 0x8BDA, 0xB3CF, - 0x8BDB, 0xD6EF, 0x8BDC, 0xDAB7, 0x8BDD, 0xBBB0, 0x8BDE, 0xB5AE, - 0x8BDF, 0xDAB8, 0x8BE0, 0xDAB9, 0x8BE1, 0xB9EE, 0x8BE2, 0xD1AF, - 0x8BE3, 0xD2E8, 0x8BE4, 0xDABA, 0x8BE5, 0xB8C3, 0x8BE6, 0xCFEA, - 0x8BE7, 0xB2EF, 0x8BE8, 0xDABB, 0x8BE9, 0xDABC, 0x8BEA, 0xD79E, - 0x8BEB, 0xBDEB, 0x8BEC, 0xCEDC, 0x8BED, 0xD3EF, 0x8BEE, 0xDABD, - 0x8BEF, 0xCEF3, 0x8BF0, 0xDABE, 0x8BF1, 0xD3D5, 0x8BF2, 0xBBE5, - 0x8BF3, 0xDABF, 0x8BF4, 0xCBB5, 0x8BF5, 0xCBD0, 0x8BF6, 0xDAC0, - 0x8BF7, 0xC7EB, 0x8BF8, 0xD6EE, 0x8BF9, 0xDAC1, 0x8BFA, 0xC5B5, - 0x8BFB, 0xB6C1, 0x8BFC, 0xDAC2, 0x8BFD, 0xB7CC, 0x8BFE, 0xBFCE, - 0x8BFF, 0xDAC3, 0x8C00, 0xDAC4, 0x8C01, 0xCBAD, 0x8C02, 0xDAC5, - 0x8C03, 0xB5F7, 0x8C04, 0xDAC6, 0x8C05, 0xC1C2, 0x8C06, 0xD7BB, - 0x8C07, 0xDAC7, 0x8C08, 0xCCB8, 0x8C09, 0xD79F, 0x8C0A, 0xD2EA, - 0x8C0B, 0xC4B1, 0x8C0C, 0xDAC8, 0x8C0D, 0xB5FD, 0x8C0E, 0xBBD1, - 0x8C0F, 0xDAC9, 0x8C10, 0xD0B3, 0x8C11, 0xDACA, 0x8C12, 0xDACB, - 0x8C13, 0xCEBD, 0x8C14, 0xDACC, 0x8C15, 0xDACD, 0x8C16, 0xDACE, - 0x8C17, 0xB2F7, 0x8C18, 0xDAD1, 0x8C19, 0xDACF, 0x8C1A, 0xD1E8, - 0x8C1B, 0xDAD0, 0x8C1C, 0xC3D5, 0x8C1D, 0xDAD2, 0x8C1E, 0xD7A0, - 0x8C1F, 0xDAD3, 0x8C20, 0xDAD4, 0x8C21, 0xDAD5, 0x8C22, 0xD0BB, - 0x8C23, 0xD2A5, 0x8C24, 0xB0F9, 0x8C25, 0xDAD6, 0x8C26, 0xC7AB, - 0x8C27, 0xDAD7, 0x8C28, 0xBDF7, 0x8C29, 0xC3A1, 0x8C2A, 0xDAD8, - 0x8C2B, 0xDAD9, 0x8C2C, 0xC3FD, 0x8C2D, 0xCCB7, 0x8C2E, 0xDADA, - 0x8C2F, 0xDADB, 0x8C30, 0xC0BE, 0x8C31, 0xC6D7, 0x8C32, 0xDADC, - 0x8C33, 0xDADD, 0x8C34, 0xC7B4, 0x8C35, 0xDADE, 0x8C36, 0xDADF, - 0x8C37, 0xB9C8, 0x8C38, 0xD840, 0x8C39, 0xD841, 0x8C3A, 0xD842, - 0x8C3B, 0xD843, 0x8C3C, 0xD844, 0x8C3D, 0xD845, 0x8C3E, 0xD846, - 0x8C3F, 0xD847, 0x8C40, 0xD848, 0x8C41, 0xBBED, 0x8C42, 0xD849, - 0x8C43, 0xD84A, 0x8C44, 0xD84B, 0x8C45, 0xD84C, 0x8C46, 0xB6B9, - 0x8C47, 0xF4F8, 0x8C48, 0xD84D, 0x8C49, 0xF4F9, 0x8C4A, 0xD84E, - 0x8C4B, 0xD84F, 0x8C4C, 0xCDE3, 0x8C4D, 0xD850, 0x8C4E, 0xD851, - 0x8C4F, 0xD852, 0x8C50, 0xD853, 0x8C51, 0xD854, 0x8C52, 0xD855, - 0x8C53, 0xD856, 0x8C54, 0xD857, 0x8C55, 0xF5B9, 0x8C56, 0xD858, - 0x8C57, 0xD859, 0x8C58, 0xD85A, 0x8C59, 0xD85B, 0x8C5A, 0xEBE0, - 0x8C5B, 0xD85C, 0x8C5C, 0xD85D, 0x8C5D, 0xD85E, 0x8C5E, 0xD85F, - 0x8C5F, 0xD860, 0x8C60, 0xD861, 0x8C61, 0xCFF3, 0x8C62, 0xBBBF, - 0x8C63, 0xD862, 0x8C64, 0xD863, 0x8C65, 0xD864, 0x8C66, 0xD865, - 0x8C67, 0xD866, 0x8C68, 0xD867, 0x8C69, 0xD868, 0x8C6A, 0xBAC0, - 0x8C6B, 0xD4A5, 0x8C6C, 0xD869, 0x8C6D, 0xD86A, 0x8C6E, 0xD86B, - 0x8C6F, 0xD86C, 0x8C70, 0xD86D, 0x8C71, 0xD86E, 0x8C72, 0xD86F, - 0x8C73, 0xE1D9, 0x8C74, 0xD870, 0x8C75, 0xD871, 0x8C76, 0xD872, - 0x8C77, 0xD873, 0x8C78, 0xF5F4, 0x8C79, 0xB1AA, 0x8C7A, 0xB2F2, - 0x8C7B, 0xD874, 0x8C7C, 0xD875, 0x8C7D, 0xD876, 0x8C7E, 0xD877, - 0x8C7F, 0xD878, 0x8C80, 0xD879, 0x8C81, 0xD87A, 0x8C82, 0xF5F5, - 0x8C83, 0xD87B, 0x8C84, 0xD87C, 0x8C85, 0xF5F7, 0x8C86, 0xD87D, - 0x8C87, 0xD87E, 0x8C88, 0xD880, 0x8C89, 0xBAD1, 0x8C8A, 0xF5F6, - 0x8C8B, 0xD881, 0x8C8C, 0xC3B2, 0x8C8D, 0xD882, 0x8C8E, 0xD883, - 0x8C8F, 0xD884, 0x8C90, 0xD885, 0x8C91, 0xD886, 0x8C92, 0xD887, - 0x8C93, 0xD888, 0x8C94, 0xF5F9, 0x8C95, 0xD889, 0x8C96, 0xD88A, - 0x8C97, 0xD88B, 0x8C98, 0xF5F8, 0x8C99, 0xD88C, 0x8C9A, 0xD88D, - 0x8C9B, 0xD88E, 0x8C9C, 0xD88F, 0x8C9D, 0xD890, 0x8C9E, 0xD891, - 0x8C9F, 0xD892, 0x8CA0, 0xD893, 0x8CA1, 0xD894, 0x8CA2, 0xD895, - 0x8CA3, 0xD896, 0x8CA4, 0xD897, 0x8CA5, 0xD898, 0x8CA6, 0xD899, - 0x8CA7, 0xD89A, 0x8CA8, 0xD89B, 0x8CA9, 0xD89C, 0x8CAA, 0xD89D, - 0x8CAB, 0xD89E, 0x8CAC, 0xD89F, 0x8CAD, 0xD8A0, 0x8CAE, 0xD940, - 0x8CAF, 0xD941, 0x8CB0, 0xD942, 0x8CB1, 0xD943, 0x8CB2, 0xD944, - 0x8CB3, 0xD945, 0x8CB4, 0xD946, 0x8CB5, 0xD947, 0x8CB6, 0xD948, - 0x8CB7, 0xD949, 0x8CB8, 0xD94A, 0x8CB9, 0xD94B, 0x8CBA, 0xD94C, - 0x8CBB, 0xD94D, 0x8CBC, 0xD94E, 0x8CBD, 0xD94F, 0x8CBE, 0xD950, - 0x8CBF, 0xD951, 0x8CC0, 0xD952, 0x8CC1, 0xD953, 0x8CC2, 0xD954, - 0x8CC3, 0xD955, 0x8CC4, 0xD956, 0x8CC5, 0xD957, 0x8CC6, 0xD958, - 0x8CC7, 0xD959, 0x8CC8, 0xD95A, 0x8CC9, 0xD95B, 0x8CCA, 0xD95C, - 0x8CCB, 0xD95D, 0x8CCC, 0xD95E, 0x8CCD, 0xD95F, 0x8CCE, 0xD960, - 0x8CCF, 0xD961, 0x8CD0, 0xD962, 0x8CD1, 0xD963, 0x8CD2, 0xD964, - 0x8CD3, 0xD965, 0x8CD4, 0xD966, 0x8CD5, 0xD967, 0x8CD6, 0xD968, - 0x8CD7, 0xD969, 0x8CD8, 0xD96A, 0x8CD9, 0xD96B, 0x8CDA, 0xD96C, - 0x8CDB, 0xD96D, 0x8CDC, 0xD96E, 0x8CDD, 0xD96F, 0x8CDE, 0xD970, - 0x8CDF, 0xD971, 0x8CE0, 0xD972, 0x8CE1, 0xD973, 0x8CE2, 0xD974, - 0x8CE3, 0xD975, 0x8CE4, 0xD976, 0x8CE5, 0xD977, 0x8CE6, 0xD978, - 0x8CE7, 0xD979, 0x8CE8, 0xD97A, 0x8CE9, 0xD97B, 0x8CEA, 0xD97C, - 0x8CEB, 0xD97D, 0x8CEC, 0xD97E, 0x8CED, 0xD980, 0x8CEE, 0xD981, - 0x8CEF, 0xD982, 0x8CF0, 0xD983, 0x8CF1, 0xD984, 0x8CF2, 0xD985, - 0x8CF3, 0xD986, 0x8CF4, 0xD987, 0x8CF5, 0xD988, 0x8CF6, 0xD989, - 0x8CF7, 0xD98A, 0x8CF8, 0xD98B, 0x8CF9, 0xD98C, 0x8CFA, 0xD98D, - 0x8CFB, 0xD98E, 0x8CFC, 0xD98F, 0x8CFD, 0xD990, 0x8CFE, 0xD991, - 0x8CFF, 0xD992, 0x8D00, 0xD993, 0x8D01, 0xD994, 0x8D02, 0xD995, - 0x8D03, 0xD996, 0x8D04, 0xD997, 0x8D05, 0xD998, 0x8D06, 0xD999, - 0x8D07, 0xD99A, 0x8D08, 0xD99B, 0x8D09, 0xD99C, 0x8D0A, 0xD99D, - 0x8D0B, 0xD99E, 0x8D0C, 0xD99F, 0x8D0D, 0xD9A0, 0x8D0E, 0xDA40, - 0x8D0F, 0xDA41, 0x8D10, 0xDA42, 0x8D11, 0xDA43, 0x8D12, 0xDA44, - 0x8D13, 0xDA45, 0x8D14, 0xDA46, 0x8D15, 0xDA47, 0x8D16, 0xDA48, - 0x8D17, 0xDA49, 0x8D18, 0xDA4A, 0x8D19, 0xDA4B, 0x8D1A, 0xDA4C, - 0x8D1B, 0xDA4D, 0x8D1C, 0xDA4E, 0x8D1D, 0xB1B4, 0x8D1E, 0xD5EA, - 0x8D1F, 0xB8BA, 0x8D20, 0xDA4F, 0x8D21, 0xB9B1, 0x8D22, 0xB2C6, - 0x8D23, 0xD4F0, 0x8D24, 0xCFCD, 0x8D25, 0xB0DC, 0x8D26, 0xD5CB, - 0x8D27, 0xBBF5, 0x8D28, 0xD6CA, 0x8D29, 0xB7B7, 0x8D2A, 0xCCB0, - 0x8D2B, 0xC6B6, 0x8D2C, 0xB1E1, 0x8D2D, 0xB9BA, 0x8D2E, 0xD6FC, - 0x8D2F, 0xB9E1, 0x8D30, 0xB7A1, 0x8D31, 0xBCFA, 0x8D32, 0xEADA, - 0x8D33, 0xEADB, 0x8D34, 0xCCF9, 0x8D35, 0xB9F3, 0x8D36, 0xEADC, - 0x8D37, 0xB4FB, 0x8D38, 0xC3B3, 0x8D39, 0xB7D1, 0x8D3A, 0xBAD8, - 0x8D3B, 0xEADD, 0x8D3C, 0xD4F4, 0x8D3D, 0xEADE, 0x8D3E, 0xBCD6, - 0x8D3F, 0xBBDF, 0x8D40, 0xEADF, 0x8D41, 0xC1DE, 0x8D42, 0xC2B8, - 0x8D43, 0xD4DF, 0x8D44, 0xD7CA, 0x8D45, 0xEAE0, 0x8D46, 0xEAE1, - 0x8D47, 0xEAE4, 0x8D48, 0xEAE2, 0x8D49, 0xEAE3, 0x8D4A, 0xC9DE, - 0x8D4B, 0xB8B3, 0x8D4C, 0xB6C4, 0x8D4D, 0xEAE5, 0x8D4E, 0xCAEA, - 0x8D4F, 0xC9CD, 0x8D50, 0xB4CD, 0x8D51, 0xDA50, 0x8D52, 0xDA51, - 0x8D53, 0xE2D9, 0x8D54, 0xC5E2, 0x8D55, 0xEAE6, 0x8D56, 0xC0B5, - 0x8D57, 0xDA52, 0x8D58, 0xD7B8, 0x8D59, 0xEAE7, 0x8D5A, 0xD7AC, - 0x8D5B, 0xC8FC, 0x8D5C, 0xD8D3, 0x8D5D, 0xD8CD, 0x8D5E, 0xD4DE, - 0x8D5F, 0xDA53, 0x8D60, 0xD4F9, 0x8D61, 0xC9C4, 0x8D62, 0xD3AE, - 0x8D63, 0xB8D3, 0x8D64, 0xB3E0, 0x8D65, 0xDA54, 0x8D66, 0xC9E2, - 0x8D67, 0xF4F6, 0x8D68, 0xDA55, 0x8D69, 0xDA56, 0x8D6A, 0xDA57, - 0x8D6B, 0xBAD5, 0x8D6C, 0xDA58, 0x8D6D, 0xF4F7, 0x8D6E, 0xDA59, - 0x8D6F, 0xDA5A, 0x8D70, 0xD7DF, 0x8D71, 0xDA5B, 0x8D72, 0xDA5C, - 0x8D73, 0xF4F1, 0x8D74, 0xB8B0, 0x8D75, 0xD5D4, 0x8D76, 0xB8CF, - 0x8D77, 0xC6F0, 0x8D78, 0xDA5D, 0x8D79, 0xDA5E, 0x8D7A, 0xDA5F, - 0x8D7B, 0xDA60, 0x8D7C, 0xDA61, 0x8D7D, 0xDA62, 0x8D7E, 0xDA63, - 0x8D7F, 0xDA64, 0x8D80, 0xDA65, 0x8D81, 0xB3C3, 0x8D82, 0xDA66, - 0x8D83, 0xDA67, 0x8D84, 0xF4F2, 0x8D85, 0xB3AC, 0x8D86, 0xDA68, - 0x8D87, 0xDA69, 0x8D88, 0xDA6A, 0x8D89, 0xDA6B, 0x8D8A, 0xD4BD, - 0x8D8B, 0xC7F7, 0x8D8C, 0xDA6C, 0x8D8D, 0xDA6D, 0x8D8E, 0xDA6E, - 0x8D8F, 0xDA6F, 0x8D90, 0xDA70, 0x8D91, 0xF4F4, 0x8D92, 0xDA71, - 0x8D93, 0xDA72, 0x8D94, 0xF4F3, 0x8D95, 0xDA73, 0x8D96, 0xDA74, - 0x8D97, 0xDA75, 0x8D98, 0xDA76, 0x8D99, 0xDA77, 0x8D9A, 0xDA78, - 0x8D9B, 0xDA79, 0x8D9C, 0xDA7A, 0x8D9D, 0xDA7B, 0x8D9E, 0xDA7C, - 0x8D9F, 0xCCCB, 0x8DA0, 0xDA7D, 0x8DA1, 0xDA7E, 0x8DA2, 0xDA80, - 0x8DA3, 0xC8A4, 0x8DA4, 0xDA81, 0x8DA5, 0xDA82, 0x8DA6, 0xDA83, - 0x8DA7, 0xDA84, 0x8DA8, 0xDA85, 0x8DA9, 0xDA86, 0x8DAA, 0xDA87, - 0x8DAB, 0xDA88, 0x8DAC, 0xDA89, 0x8DAD, 0xDA8A, 0x8DAE, 0xDA8B, - 0x8DAF, 0xDA8C, 0x8DB0, 0xDA8D, 0x8DB1, 0xF4F5, 0x8DB2, 0xDA8E, - 0x8DB3, 0xD7E3, 0x8DB4, 0xC5BF, 0x8DB5, 0xF5C0, 0x8DB6, 0xDA8F, - 0x8DB7, 0xDA90, 0x8DB8, 0xF5BB, 0x8DB9, 0xDA91, 0x8DBA, 0xF5C3, - 0x8DBB, 0xDA92, 0x8DBC, 0xF5C2, 0x8DBD, 0xDA93, 0x8DBE, 0xD6BA, - 0x8DBF, 0xF5C1, 0x8DC0, 0xDA94, 0x8DC1, 0xDA95, 0x8DC2, 0xDA96, - 0x8DC3, 0xD4BE, 0x8DC4, 0xF5C4, 0x8DC5, 0xDA97, 0x8DC6, 0xF5CC, - 0x8DC7, 0xDA98, 0x8DC8, 0xDA99, 0x8DC9, 0xDA9A, 0x8DCA, 0xDA9B, - 0x8DCB, 0xB0CF, 0x8DCC, 0xB5F8, 0x8DCD, 0xDA9C, 0x8DCE, 0xF5C9, - 0x8DCF, 0xF5CA, 0x8DD0, 0xDA9D, 0x8DD1, 0xC5DC, 0x8DD2, 0xDA9E, - 0x8DD3, 0xDA9F, 0x8DD4, 0xDAA0, 0x8DD5, 0xDB40, 0x8DD6, 0xF5C5, - 0x8DD7, 0xF5C6, 0x8DD8, 0xDB41, 0x8DD9, 0xDB42, 0x8DDA, 0xF5C7, - 0x8DDB, 0xF5CB, 0x8DDC, 0xDB43, 0x8DDD, 0xBEE0, 0x8DDE, 0xF5C8, - 0x8DDF, 0xB8FA, 0x8DE0, 0xDB44, 0x8DE1, 0xDB45, 0x8DE2, 0xDB46, - 0x8DE3, 0xF5D0, 0x8DE4, 0xF5D3, 0x8DE5, 0xDB47, 0x8DE6, 0xDB48, - 0x8DE7, 0xDB49, 0x8DE8, 0xBFE7, 0x8DE9, 0xDB4A, 0x8DEA, 0xB9F2, - 0x8DEB, 0xF5BC, 0x8DEC, 0xF5CD, 0x8DED, 0xDB4B, 0x8DEE, 0xDB4C, - 0x8DEF, 0xC2B7, 0x8DF0, 0xDB4D, 0x8DF1, 0xDB4E, 0x8DF2, 0xDB4F, - 0x8DF3, 0xCCF8, 0x8DF4, 0xDB50, 0x8DF5, 0xBCF9, 0x8DF6, 0xDB51, - 0x8DF7, 0xF5CE, 0x8DF8, 0xF5CF, 0x8DF9, 0xF5D1, 0x8DFA, 0xB6E5, - 0x8DFB, 0xF5D2, 0x8DFC, 0xDB52, 0x8DFD, 0xF5D5, 0x8DFE, 0xDB53, - 0x8DFF, 0xDB54, 0x8E00, 0xDB55, 0x8E01, 0xDB56, 0x8E02, 0xDB57, - 0x8E03, 0xDB58, 0x8E04, 0xDB59, 0x8E05, 0xF5BD, 0x8E06, 0xDB5A, - 0x8E07, 0xDB5B, 0x8E08, 0xDB5C, 0x8E09, 0xF5D4, 0x8E0A, 0xD3BB, - 0x8E0B, 0xDB5D, 0x8E0C, 0xB3EC, 0x8E0D, 0xDB5E, 0x8E0E, 0xDB5F, - 0x8E0F, 0xCCA4, 0x8E10, 0xDB60, 0x8E11, 0xDB61, 0x8E12, 0xDB62, - 0x8E13, 0xDB63, 0x8E14, 0xF5D6, 0x8E15, 0xDB64, 0x8E16, 0xDB65, - 0x8E17, 0xDB66, 0x8E18, 0xDB67, 0x8E19, 0xDB68, 0x8E1A, 0xDB69, - 0x8E1B, 0xDB6A, 0x8E1C, 0xDB6B, 0x8E1D, 0xF5D7, 0x8E1E, 0xBEE1, - 0x8E1F, 0xF5D8, 0x8E20, 0xDB6C, 0x8E21, 0xDB6D, 0x8E22, 0xCCDF, - 0x8E23, 0xF5DB, 0x8E24, 0xDB6E, 0x8E25, 0xDB6F, 0x8E26, 0xDB70, - 0x8E27, 0xDB71, 0x8E28, 0xDB72, 0x8E29, 0xB2C8, 0x8E2A, 0xD7D9, - 0x8E2B, 0xDB73, 0x8E2C, 0xF5D9, 0x8E2D, 0xDB74, 0x8E2E, 0xF5DA, - 0x8E2F, 0xF5DC, 0x8E30, 0xDB75, 0x8E31, 0xF5E2, 0x8E32, 0xDB76, - 0x8E33, 0xDB77, 0x8E34, 0xDB78, 0x8E35, 0xF5E0, 0x8E36, 0xDB79, - 0x8E37, 0xDB7A, 0x8E38, 0xDB7B, 0x8E39, 0xF5DF, 0x8E3A, 0xF5DD, - 0x8E3B, 0xDB7C, 0x8E3C, 0xDB7D, 0x8E3D, 0xF5E1, 0x8E3E, 0xDB7E, - 0x8E3F, 0xDB80, 0x8E40, 0xF5DE, 0x8E41, 0xF5E4, 0x8E42, 0xF5E5, - 0x8E43, 0xDB81, 0x8E44, 0xCCE3, 0x8E45, 0xDB82, 0x8E46, 0xDB83, - 0x8E47, 0xE5BF, 0x8E48, 0xB5B8, 0x8E49, 0xF5E3, 0x8E4A, 0xF5E8, - 0x8E4B, 0xCCA3, 0x8E4C, 0xDB84, 0x8E4D, 0xDB85, 0x8E4E, 0xDB86, - 0x8E4F, 0xDB87, 0x8E50, 0xDB88, 0x8E51, 0xF5E6, 0x8E52, 0xF5E7, - 0x8E53, 0xDB89, 0x8E54, 0xDB8A, 0x8E55, 0xDB8B, 0x8E56, 0xDB8C, - 0x8E57, 0xDB8D, 0x8E58, 0xDB8E, 0x8E59, 0xF5BE, 0x8E5A, 0xDB8F, - 0x8E5B, 0xDB90, 0x8E5C, 0xDB91, 0x8E5D, 0xDB92, 0x8E5E, 0xDB93, - 0x8E5F, 0xDB94, 0x8E60, 0xDB95, 0x8E61, 0xDB96, 0x8E62, 0xDB97, - 0x8E63, 0xDB98, 0x8E64, 0xDB99, 0x8E65, 0xDB9A, 0x8E66, 0xB1C4, - 0x8E67, 0xDB9B, 0x8E68, 0xDB9C, 0x8E69, 0xF5BF, 0x8E6A, 0xDB9D, - 0x8E6B, 0xDB9E, 0x8E6C, 0xB5C5, 0x8E6D, 0xB2E4, 0x8E6E, 0xDB9F, - 0x8E6F, 0xF5EC, 0x8E70, 0xF5E9, 0x8E71, 0xDBA0, 0x8E72, 0xB6D7, - 0x8E73, 0xDC40, 0x8E74, 0xF5ED, 0x8E75, 0xDC41, 0x8E76, 0xF5EA, - 0x8E77, 0xDC42, 0x8E78, 0xDC43, 0x8E79, 0xDC44, 0x8E7A, 0xDC45, - 0x8E7B, 0xDC46, 0x8E7C, 0xF5EB, 0x8E7D, 0xDC47, 0x8E7E, 0xDC48, - 0x8E7F, 0xB4DA, 0x8E80, 0xDC49, 0x8E81, 0xD4EA, 0x8E82, 0xDC4A, - 0x8E83, 0xDC4B, 0x8E84, 0xDC4C, 0x8E85, 0xF5EE, 0x8E86, 0xDC4D, - 0x8E87, 0xB3F9, 0x8E88, 0xDC4E, 0x8E89, 0xDC4F, 0x8E8A, 0xDC50, - 0x8E8B, 0xDC51, 0x8E8C, 0xDC52, 0x8E8D, 0xDC53, 0x8E8E, 0xDC54, - 0x8E8F, 0xF5EF, 0x8E90, 0xF5F1, 0x8E91, 0xDC55, 0x8E92, 0xDC56, - 0x8E93, 0xDC57, 0x8E94, 0xF5F0, 0x8E95, 0xDC58, 0x8E96, 0xDC59, - 0x8E97, 0xDC5A, 0x8E98, 0xDC5B, 0x8E99, 0xDC5C, 0x8E9A, 0xDC5D, - 0x8E9B, 0xDC5E, 0x8E9C, 0xF5F2, 0x8E9D, 0xDC5F, 0x8E9E, 0xF5F3, - 0x8E9F, 0xDC60, 0x8EA0, 0xDC61, 0x8EA1, 0xDC62, 0x8EA2, 0xDC63, - 0x8EA3, 0xDC64, 0x8EA4, 0xDC65, 0x8EA5, 0xDC66, 0x8EA6, 0xDC67, - 0x8EA7, 0xDC68, 0x8EA8, 0xDC69, 0x8EA9, 0xDC6A, 0x8EAA, 0xDC6B, - 0x8EAB, 0xC9ED, 0x8EAC, 0xB9AA, 0x8EAD, 0xDC6C, 0x8EAE, 0xDC6D, - 0x8EAF, 0xC7FB, 0x8EB0, 0xDC6E, 0x8EB1, 0xDC6F, 0x8EB2, 0xB6E3, - 0x8EB3, 0xDC70, 0x8EB4, 0xDC71, 0x8EB5, 0xDC72, 0x8EB6, 0xDC73, - 0x8EB7, 0xDC74, 0x8EB8, 0xDC75, 0x8EB9, 0xDC76, 0x8EBA, 0xCCC9, - 0x8EBB, 0xDC77, 0x8EBC, 0xDC78, 0x8EBD, 0xDC79, 0x8EBE, 0xDC7A, - 0x8EBF, 0xDC7B, 0x8EC0, 0xDC7C, 0x8EC1, 0xDC7D, 0x8EC2, 0xDC7E, - 0x8EC3, 0xDC80, 0x8EC4, 0xDC81, 0x8EC5, 0xDC82, 0x8EC6, 0xDC83, - 0x8EC7, 0xDC84, 0x8EC8, 0xDC85, 0x8EC9, 0xDC86, 0x8ECA, 0xDC87, - 0x8ECB, 0xDC88, 0x8ECC, 0xDC89, 0x8ECD, 0xDC8A, 0x8ECE, 0xEAA6, - 0x8ECF, 0xDC8B, 0x8ED0, 0xDC8C, 0x8ED1, 0xDC8D, 0x8ED2, 0xDC8E, - 0x8ED3, 0xDC8F, 0x8ED4, 0xDC90, 0x8ED5, 0xDC91, 0x8ED6, 0xDC92, - 0x8ED7, 0xDC93, 0x8ED8, 0xDC94, 0x8ED9, 0xDC95, 0x8EDA, 0xDC96, - 0x8EDB, 0xDC97, 0x8EDC, 0xDC98, 0x8EDD, 0xDC99, 0x8EDE, 0xDC9A, - 0x8EDF, 0xDC9B, 0x8EE0, 0xDC9C, 0x8EE1, 0xDC9D, 0x8EE2, 0xDC9E, - 0x8EE3, 0xDC9F, 0x8EE4, 0xDCA0, 0x8EE5, 0xDD40, 0x8EE6, 0xDD41, - 0x8EE7, 0xDD42, 0x8EE8, 0xDD43, 0x8EE9, 0xDD44, 0x8EEA, 0xDD45, - 0x8EEB, 0xDD46, 0x8EEC, 0xDD47, 0x8EED, 0xDD48, 0x8EEE, 0xDD49, - 0x8EEF, 0xDD4A, 0x8EF0, 0xDD4B, 0x8EF1, 0xDD4C, 0x8EF2, 0xDD4D, - 0x8EF3, 0xDD4E, 0x8EF4, 0xDD4F, 0x8EF5, 0xDD50, 0x8EF6, 0xDD51, - 0x8EF7, 0xDD52, 0x8EF8, 0xDD53, 0x8EF9, 0xDD54, 0x8EFA, 0xDD55, - 0x8EFB, 0xDD56, 0x8EFC, 0xDD57, 0x8EFD, 0xDD58, 0x8EFE, 0xDD59, - 0x8EFF, 0xDD5A, 0x8F00, 0xDD5B, 0x8F01, 0xDD5C, 0x8F02, 0xDD5D, - 0x8F03, 0xDD5E, 0x8F04, 0xDD5F, 0x8F05, 0xDD60, 0x8F06, 0xDD61, - 0x8F07, 0xDD62, 0x8F08, 0xDD63, 0x8F09, 0xDD64, 0x8F0A, 0xDD65, - 0x8F0B, 0xDD66, 0x8F0C, 0xDD67, 0x8F0D, 0xDD68, 0x8F0E, 0xDD69, - 0x8F0F, 0xDD6A, 0x8F10, 0xDD6B, 0x8F11, 0xDD6C, 0x8F12, 0xDD6D, - 0x8F13, 0xDD6E, 0x8F14, 0xDD6F, 0x8F15, 0xDD70, 0x8F16, 0xDD71, - 0x8F17, 0xDD72, 0x8F18, 0xDD73, 0x8F19, 0xDD74, 0x8F1A, 0xDD75, - 0x8F1B, 0xDD76, 0x8F1C, 0xDD77, 0x8F1D, 0xDD78, 0x8F1E, 0xDD79, - 0x8F1F, 0xDD7A, 0x8F20, 0xDD7B, 0x8F21, 0xDD7C, 0x8F22, 0xDD7D, - 0x8F23, 0xDD7E, 0x8F24, 0xDD80, 0x8F25, 0xDD81, 0x8F26, 0xDD82, - 0x8F27, 0xDD83, 0x8F28, 0xDD84, 0x8F29, 0xDD85, 0x8F2A, 0xDD86, - 0x8F2B, 0xDD87, 0x8F2C, 0xDD88, 0x8F2D, 0xDD89, 0x8F2E, 0xDD8A, - 0x8F2F, 0xDD8B, 0x8F30, 0xDD8C, 0x8F31, 0xDD8D, 0x8F32, 0xDD8E, - 0x8F33, 0xDD8F, 0x8F34, 0xDD90, 0x8F35, 0xDD91, 0x8F36, 0xDD92, - 0x8F37, 0xDD93, 0x8F38, 0xDD94, 0x8F39, 0xDD95, 0x8F3A, 0xDD96, - 0x8F3B, 0xDD97, 0x8F3C, 0xDD98, 0x8F3D, 0xDD99, 0x8F3E, 0xDD9A, - 0x8F3F, 0xDD9B, 0x8F40, 0xDD9C, 0x8F41, 0xDD9D, 0x8F42, 0xDD9E, - 0x8F43, 0xDD9F, 0x8F44, 0xDDA0, 0x8F45, 0xDE40, 0x8F46, 0xDE41, - 0x8F47, 0xDE42, 0x8F48, 0xDE43, 0x8F49, 0xDE44, 0x8F4A, 0xDE45, - 0x8F4B, 0xDE46, 0x8F4C, 0xDE47, 0x8F4D, 0xDE48, 0x8F4E, 0xDE49, - 0x8F4F, 0xDE4A, 0x8F50, 0xDE4B, 0x8F51, 0xDE4C, 0x8F52, 0xDE4D, - 0x8F53, 0xDE4E, 0x8F54, 0xDE4F, 0x8F55, 0xDE50, 0x8F56, 0xDE51, - 0x8F57, 0xDE52, 0x8F58, 0xDE53, 0x8F59, 0xDE54, 0x8F5A, 0xDE55, - 0x8F5B, 0xDE56, 0x8F5C, 0xDE57, 0x8F5D, 0xDE58, 0x8F5E, 0xDE59, - 0x8F5F, 0xDE5A, 0x8F60, 0xDE5B, 0x8F61, 0xDE5C, 0x8F62, 0xDE5D, - 0x8F63, 0xDE5E, 0x8F64, 0xDE5F, 0x8F65, 0xDE60, 0x8F66, 0xB3B5, - 0x8F67, 0xD4FE, 0x8F68, 0xB9EC, 0x8F69, 0xD0F9, 0x8F6A, 0xDE61, - 0x8F6B, 0xE9ED, 0x8F6C, 0xD7AA, 0x8F6D, 0xE9EE, 0x8F6E, 0xC2D6, - 0x8F6F, 0xC8ED, 0x8F70, 0xBAE4, 0x8F71, 0xE9EF, 0x8F72, 0xE9F0, - 0x8F73, 0xE9F1, 0x8F74, 0xD6E1, 0x8F75, 0xE9F2, 0x8F76, 0xE9F3, - 0x8F77, 0xE9F5, 0x8F78, 0xE9F4, 0x8F79, 0xE9F6, 0x8F7A, 0xE9F7, - 0x8F7B, 0xC7E1, 0x8F7C, 0xE9F8, 0x8F7D, 0xD4D8, 0x8F7E, 0xE9F9, - 0x8F7F, 0xBDCE, 0x8F80, 0xDE62, 0x8F81, 0xE9FA, 0x8F82, 0xE9FB, - 0x8F83, 0xBDCF, 0x8F84, 0xE9FC, 0x8F85, 0xB8A8, 0x8F86, 0xC1BE, - 0x8F87, 0xE9FD, 0x8F88, 0xB1B2, 0x8F89, 0xBBD4, 0x8F8A, 0xB9F5, - 0x8F8B, 0xE9FE, 0x8F8C, 0xDE63, 0x8F8D, 0xEAA1, 0x8F8E, 0xEAA2, - 0x8F8F, 0xEAA3, 0x8F90, 0xB7F8, 0x8F91, 0xBCAD, 0x8F92, 0xDE64, - 0x8F93, 0xCAE4, 0x8F94, 0xE0CE, 0x8F95, 0xD4AF, 0x8F96, 0xCFBD, - 0x8F97, 0xD5B7, 0x8F98, 0xEAA4, 0x8F99, 0xD5DE, 0x8F9A, 0xEAA5, - 0x8F9B, 0xD0C1, 0x8F9C, 0xB9BC, 0x8F9D, 0xDE65, 0x8F9E, 0xB4C7, - 0x8F9F, 0xB1D9, 0x8FA0, 0xDE66, 0x8FA1, 0xDE67, 0x8FA2, 0xDE68, - 0x8FA3, 0xC0B1, 0x8FA4, 0xDE69, 0x8FA5, 0xDE6A, 0x8FA6, 0xDE6B, - 0x8FA7, 0xDE6C, 0x8FA8, 0xB1E6, 0x8FA9, 0xB1E7, 0x8FAA, 0xDE6D, - 0x8FAB, 0xB1E8, 0x8FAC, 0xDE6E, 0x8FAD, 0xDE6F, 0x8FAE, 0xDE70, - 0x8FAF, 0xDE71, 0x8FB0, 0xB3BD, 0x8FB1, 0xC8E8, 0x8FB2, 0xDE72, - 0x8FB3, 0xDE73, 0x8FB4, 0xDE74, 0x8FB5, 0xDE75, 0x8FB6, 0xE5C1, - 0x8FB7, 0xDE76, 0x8FB8, 0xDE77, 0x8FB9, 0xB1DF, 0x8FBA, 0xDE78, - 0x8FBB, 0xDE79, 0x8FBC, 0xDE7A, 0x8FBD, 0xC1C9, 0x8FBE, 0xB4EF, - 0x8FBF, 0xDE7B, 0x8FC0, 0xDE7C, 0x8FC1, 0xC7A8, 0x8FC2, 0xD3D8, - 0x8FC3, 0xDE7D, 0x8FC4, 0xC6F9, 0x8FC5, 0xD1B8, 0x8FC6, 0xDE7E, - 0x8FC7, 0xB9FD, 0x8FC8, 0xC2F5, 0x8FC9, 0xDE80, 0x8FCA, 0xDE81, - 0x8FCB, 0xDE82, 0x8FCC, 0xDE83, 0x8FCD, 0xDE84, 0x8FCE, 0xD3AD, - 0x8FCF, 0xDE85, 0x8FD0, 0xD4CB, 0x8FD1, 0xBDFC, 0x8FD2, 0xDE86, - 0x8FD3, 0xE5C2, 0x8FD4, 0xB7B5, 0x8FD5, 0xE5C3, 0x8FD6, 0xDE87, - 0x8FD7, 0xDE88, 0x8FD8, 0xBBB9, 0x8FD9, 0xD5E2, 0x8FDA, 0xDE89, - 0x8FDB, 0xBDF8, 0x8FDC, 0xD4B6, 0x8FDD, 0xCEA5, 0x8FDE, 0xC1AC, - 0x8FDF, 0xB3D9, 0x8FE0, 0xDE8A, 0x8FE1, 0xDE8B, 0x8FE2, 0xCCF6, - 0x8FE3, 0xDE8C, 0x8FE4, 0xE5C6, 0x8FE5, 0xE5C4, 0x8FE6, 0xE5C8, - 0x8FE7, 0xDE8D, 0x8FE8, 0xE5CA, 0x8FE9, 0xE5C7, 0x8FEA, 0xB5CF, - 0x8FEB, 0xC6C8, 0x8FEC, 0xDE8E, 0x8FED, 0xB5FC, 0x8FEE, 0xE5C5, - 0x8FEF, 0xDE8F, 0x8FF0, 0xCAF6, 0x8FF1, 0xDE90, 0x8FF2, 0xDE91, - 0x8FF3, 0xE5C9, 0x8FF4, 0xDE92, 0x8FF5, 0xDE93, 0x8FF6, 0xDE94, - 0x8FF7, 0xC3D4, 0x8FF8, 0xB1C5, 0x8FF9, 0xBCA3, 0x8FFA, 0xDE95, - 0x8FFB, 0xDE96, 0x8FFC, 0xDE97, 0x8FFD, 0xD7B7, 0x8FFE, 0xDE98, - 0x8FFF, 0xDE99, 0x9000, 0xCDCB, 0x9001, 0xCBCD, 0x9002, 0xCACA, - 0x9003, 0xCCD3, 0x9004, 0xE5CC, 0x9005, 0xE5CB, 0x9006, 0xC4E6, - 0x9007, 0xDE9A, 0x9008, 0xDE9B, 0x9009, 0xD1A1, 0x900A, 0xD1B7, - 0x900B, 0xE5CD, 0x900C, 0xDE9C, 0x900D, 0xE5D0, 0x900E, 0xDE9D, - 0x900F, 0xCDB8, 0x9010, 0xD6F0, 0x9011, 0xE5CF, 0x9012, 0xB5DD, - 0x9013, 0xDE9E, 0x9014, 0xCDBE, 0x9015, 0xDE9F, 0x9016, 0xE5D1, - 0x9017, 0xB6BA, 0x9018, 0xDEA0, 0x9019, 0xDF40, 0x901A, 0xCDA8, - 0x901B, 0xB9E4, 0x901C, 0xDF41, 0x901D, 0xCAC5, 0x901E, 0xB3D1, - 0x901F, 0xCBD9, 0x9020, 0xD4EC, 0x9021, 0xE5D2, 0x9022, 0xB7EA, - 0x9023, 0xDF42, 0x9024, 0xDF43, 0x9025, 0xDF44, 0x9026, 0xE5CE, - 0x9027, 0xDF45, 0x9028, 0xDF46, 0x9029, 0xDF47, 0x902A, 0xDF48, - 0x902B, 0xDF49, 0x902C, 0xDF4A, 0x902D, 0xE5D5, 0x902E, 0xB4FE, - 0x902F, 0xE5D6, 0x9030, 0xDF4B, 0x9031, 0xDF4C, 0x9032, 0xDF4D, - 0x9033, 0xDF4E, 0x9034, 0xDF4F, 0x9035, 0xE5D3, 0x9036, 0xE5D4, - 0x9037, 0xDF50, 0x9038, 0xD2DD, 0x9039, 0xDF51, 0x903A, 0xDF52, - 0x903B, 0xC2DF, 0x903C, 0xB1C6, 0x903D, 0xDF53, 0x903E, 0xD3E2, - 0x903F, 0xDF54, 0x9040, 0xDF55, 0x9041, 0xB6DD, 0x9042, 0xCBEC, - 0x9043, 0xDF56, 0x9044, 0xE5D7, 0x9045, 0xDF57, 0x9046, 0xDF58, - 0x9047, 0xD3F6, 0x9048, 0xDF59, 0x9049, 0xDF5A, 0x904A, 0xDF5B, - 0x904B, 0xDF5C, 0x904C, 0xDF5D, 0x904D, 0xB1E9, 0x904E, 0xDF5E, - 0x904F, 0xB6F4, 0x9050, 0xE5DA, 0x9051, 0xE5D8, 0x9052, 0xE5D9, - 0x9053, 0xB5C0, 0x9054, 0xDF5F, 0x9055, 0xDF60, 0x9056, 0xDF61, - 0x9057, 0xD2C5, 0x9058, 0xE5DC, 0x9059, 0xDF62, 0x905A, 0xDF63, - 0x905B, 0xE5DE, 0x905C, 0xDF64, 0x905D, 0xDF65, 0x905E, 0xDF66, - 0x905F, 0xDF67, 0x9060, 0xDF68, 0x9061, 0xDF69, 0x9062, 0xE5DD, - 0x9063, 0xC7B2, 0x9064, 0xDF6A, 0x9065, 0xD2A3, 0x9066, 0xDF6B, - 0x9067, 0xDF6C, 0x9068, 0xE5DB, 0x9069, 0xDF6D, 0x906A, 0xDF6E, - 0x906B, 0xDF6F, 0x906C, 0xDF70, 0x906D, 0xD4E2, 0x906E, 0xD5DA, - 0x906F, 0xDF71, 0x9070, 0xDF72, 0x9071, 0xDF73, 0x9072, 0xDF74, - 0x9073, 0xDF75, 0x9074, 0xE5E0, 0x9075, 0xD7F1, 0x9076, 0xDF76, - 0x9077, 0xDF77, 0x9078, 0xDF78, 0x9079, 0xDF79, 0x907A, 0xDF7A, - 0x907B, 0xDF7B, 0x907C, 0xDF7C, 0x907D, 0xE5E1, 0x907E, 0xDF7D, - 0x907F, 0xB1DC, 0x9080, 0xD1FB, 0x9081, 0xDF7E, 0x9082, 0xE5E2, - 0x9083, 0xE5E4, 0x9084, 0xDF80, 0x9085, 0xDF81, 0x9086, 0xDF82, - 0x9087, 0xDF83, 0x9088, 0xE5E3, 0x9089, 0xDF84, 0x908A, 0xDF85, - 0x908B, 0xE5E5, 0x908C, 0xDF86, 0x908D, 0xDF87, 0x908E, 0xDF88, - 0x908F, 0xDF89, 0x9090, 0xDF8A, 0x9091, 0xD2D8, 0x9092, 0xDF8B, - 0x9093, 0xB5CB, 0x9094, 0xDF8C, 0x9095, 0xE7DF, 0x9096, 0xDF8D, - 0x9097, 0xDAF5, 0x9098, 0xDF8E, 0x9099, 0xDAF8, 0x909A, 0xDF8F, - 0x909B, 0xDAF6, 0x909C, 0xDF90, 0x909D, 0xDAF7, 0x909E, 0xDF91, - 0x909F, 0xDF92, 0x90A0, 0xDF93, 0x90A1, 0xDAFA, 0x90A2, 0xD0CF, - 0x90A3, 0xC4C7, 0x90A4, 0xDF94, 0x90A5, 0xDF95, 0x90A6, 0xB0EE, - 0x90A7, 0xDF96, 0x90A8, 0xDF97, 0x90A9, 0xDF98, 0x90AA, 0xD0B0, - 0x90AB, 0xDF99, 0x90AC, 0xDAF9, 0x90AD, 0xDF9A, 0x90AE, 0xD3CA, - 0x90AF, 0xBAAA, 0x90B0, 0xDBA2, 0x90B1, 0xC7F1, 0x90B2, 0xDF9B, - 0x90B3, 0xDAFC, 0x90B4, 0xDAFB, 0x90B5, 0xC9DB, 0x90B6, 0xDAFD, - 0x90B7, 0xDF9C, 0x90B8, 0xDBA1, 0x90B9, 0xD7DE, 0x90BA, 0xDAFE, - 0x90BB, 0xC1DA, 0x90BC, 0xDF9D, 0x90BD, 0xDF9E, 0x90BE, 0xDBA5, - 0x90BF, 0xDF9F, 0x90C0, 0xDFA0, 0x90C1, 0xD3F4, 0x90C2, 0xE040, - 0x90C3, 0xE041, 0x90C4, 0xDBA7, 0x90C5, 0xDBA4, 0x90C6, 0xE042, - 0x90C7, 0xDBA8, 0x90C8, 0xE043, 0x90C9, 0xE044, 0x90CA, 0xBDBC, - 0x90CB, 0xE045, 0x90CC, 0xE046, 0x90CD, 0xE047, 0x90CE, 0xC0C9, - 0x90CF, 0xDBA3, 0x90D0, 0xDBA6, 0x90D1, 0xD6A3, 0x90D2, 0xE048, - 0x90D3, 0xDBA9, 0x90D4, 0xE049, 0x90D5, 0xE04A, 0x90D6, 0xE04B, - 0x90D7, 0xDBAD, 0x90D8, 0xE04C, 0x90D9, 0xE04D, 0x90DA, 0xE04E, - 0x90DB, 0xDBAE, 0x90DC, 0xDBAC, 0x90DD, 0xBAC2, 0x90DE, 0xE04F, - 0x90DF, 0xE050, 0x90E0, 0xE051, 0x90E1, 0xBFA4, 0x90E2, 0xDBAB, - 0x90E3, 0xE052, 0x90E4, 0xE053, 0x90E5, 0xE054, 0x90E6, 0xDBAA, - 0x90E7, 0xD4C7, 0x90E8, 0xB2BF, 0x90E9, 0xE055, 0x90EA, 0xE056, - 0x90EB, 0xDBAF, 0x90EC, 0xE057, 0x90ED, 0xB9F9, 0x90EE, 0xE058, - 0x90EF, 0xDBB0, 0x90F0, 0xE059, 0x90F1, 0xE05A, 0x90F2, 0xE05B, - 0x90F3, 0xE05C, 0x90F4, 0xB3BB, 0x90F5, 0xE05D, 0x90F6, 0xE05E, - 0x90F7, 0xE05F, 0x90F8, 0xB5A6, 0x90F9, 0xE060, 0x90FA, 0xE061, - 0x90FB, 0xE062, 0x90FC, 0xE063, 0x90FD, 0xB6BC, 0x90FE, 0xDBB1, - 0x90FF, 0xE064, 0x9100, 0xE065, 0x9101, 0xE066, 0x9102, 0xB6F5, - 0x9103, 0xE067, 0x9104, 0xDBB2, 0x9105, 0xE068, 0x9106, 0xE069, - 0x9107, 0xE06A, 0x9108, 0xE06B, 0x9109, 0xE06C, 0x910A, 0xE06D, - 0x910B, 0xE06E, 0x910C, 0xE06F, 0x910D, 0xE070, 0x910E, 0xE071, - 0x910F, 0xE072, 0x9110, 0xE073, 0x9111, 0xE074, 0x9112, 0xE075, - 0x9113, 0xE076, 0x9114, 0xE077, 0x9115, 0xE078, 0x9116, 0xE079, - 0x9117, 0xE07A, 0x9118, 0xE07B, 0x9119, 0xB1C9, 0x911A, 0xE07C, - 0x911B, 0xE07D, 0x911C, 0xE07E, 0x911D, 0xE080, 0x911E, 0xDBB4, - 0x911F, 0xE081, 0x9120, 0xE082, 0x9121, 0xE083, 0x9122, 0xDBB3, - 0x9123, 0xDBB5, 0x9124, 0xE084, 0x9125, 0xE085, 0x9126, 0xE086, - 0x9127, 0xE087, 0x9128, 0xE088, 0x9129, 0xE089, 0x912A, 0xE08A, - 0x912B, 0xE08B, 0x912C, 0xE08C, 0x912D, 0xE08D, 0x912E, 0xE08E, - 0x912F, 0xDBB7, 0x9130, 0xE08F, 0x9131, 0xDBB6, 0x9132, 0xE090, - 0x9133, 0xE091, 0x9134, 0xE092, 0x9135, 0xE093, 0x9136, 0xE094, - 0x9137, 0xE095, 0x9138, 0xE096, 0x9139, 0xDBB8, 0x913A, 0xE097, - 0x913B, 0xE098, 0x913C, 0xE099, 0x913D, 0xE09A, 0x913E, 0xE09B, - 0x913F, 0xE09C, 0x9140, 0xE09D, 0x9141, 0xE09E, 0x9142, 0xE09F, - 0x9143, 0xDBB9, 0x9144, 0xE0A0, 0x9145, 0xE140, 0x9146, 0xDBBA, - 0x9147, 0xE141, 0x9148, 0xE142, 0x9149, 0xD3CF, 0x914A, 0xF4FA, - 0x914B, 0xC7F5, 0x914C, 0xD7C3, 0x914D, 0xC5E4, 0x914E, 0xF4FC, - 0x914F, 0xF4FD, 0x9150, 0xF4FB, 0x9151, 0xE143, 0x9152, 0xBEC6, - 0x9153, 0xE144, 0x9154, 0xE145, 0x9155, 0xE146, 0x9156, 0xE147, - 0x9157, 0xD0EF, 0x9158, 0xE148, 0x9159, 0xE149, 0x915A, 0xB7D3, - 0x915B, 0xE14A, 0x915C, 0xE14B, 0x915D, 0xD4CD, 0x915E, 0xCCAA, - 0x915F, 0xE14C, 0x9160, 0xE14D, 0x9161, 0xF5A2, 0x9162, 0xF5A1, - 0x9163, 0xBAA8, 0x9164, 0xF4FE, 0x9165, 0xCBD6, 0x9166, 0xE14E, - 0x9167, 0xE14F, 0x9168, 0xE150, 0x9169, 0xF5A4, 0x916A, 0xC0D2, - 0x916B, 0xE151, 0x916C, 0xB3EA, 0x916D, 0xE152, 0x916E, 0xCDAA, - 0x916F, 0xF5A5, 0x9170, 0xF5A3, 0x9171, 0xBDB4, 0x9172, 0xF5A8, - 0x9173, 0xE153, 0x9174, 0xF5A9, 0x9175, 0xBDCD, 0x9176, 0xC3B8, - 0x9177, 0xBFE1, 0x9178, 0xCBE1, 0x9179, 0xF5AA, 0x917A, 0xE154, - 0x917B, 0xE155, 0x917C, 0xE156, 0x917D, 0xF5A6, 0x917E, 0xF5A7, - 0x917F, 0xC4F0, 0x9180, 0xE157, 0x9181, 0xE158, 0x9182, 0xE159, - 0x9183, 0xE15A, 0x9184, 0xE15B, 0x9185, 0xF5AC, 0x9186, 0xE15C, - 0x9187, 0xB4BC, 0x9188, 0xE15D, 0x9189, 0xD7ED, 0x918A, 0xE15E, - 0x918B, 0xB4D7, 0x918C, 0xF5AB, 0x918D, 0xF5AE, 0x918E, 0xE15F, - 0x918F, 0xE160, 0x9190, 0xF5AD, 0x9191, 0xF5AF, 0x9192, 0xD0D1, - 0x9193, 0xE161, 0x9194, 0xE162, 0x9195, 0xE163, 0x9196, 0xE164, - 0x9197, 0xE165, 0x9198, 0xE166, 0x9199, 0xE167, 0x919A, 0xC3D1, - 0x919B, 0xC8A9, 0x919C, 0xE168, 0x919D, 0xE169, 0x919E, 0xE16A, - 0x919F, 0xE16B, 0x91A0, 0xE16C, 0x91A1, 0xE16D, 0x91A2, 0xF5B0, - 0x91A3, 0xF5B1, 0x91A4, 0xE16E, 0x91A5, 0xE16F, 0x91A6, 0xE170, - 0x91A7, 0xE171, 0x91A8, 0xE172, 0x91A9, 0xE173, 0x91AA, 0xF5B2, - 0x91AB, 0xE174, 0x91AC, 0xE175, 0x91AD, 0xF5B3, 0x91AE, 0xF5B4, - 0x91AF, 0xF5B5, 0x91B0, 0xE176, 0x91B1, 0xE177, 0x91B2, 0xE178, - 0x91B3, 0xE179, 0x91B4, 0xF5B7, 0x91B5, 0xF5B6, 0x91B6, 0xE17A, - 0x91B7, 0xE17B, 0x91B8, 0xE17C, 0x91B9, 0xE17D, 0x91BA, 0xF5B8, - 0x91BB, 0xE17E, 0x91BC, 0xE180, 0x91BD, 0xE181, 0x91BE, 0xE182, - 0x91BF, 0xE183, 0x91C0, 0xE184, 0x91C1, 0xE185, 0x91C2, 0xE186, - 0x91C3, 0xE187, 0x91C4, 0xE188, 0x91C5, 0xE189, 0x91C6, 0xE18A, - 0x91C7, 0xB2C9, 0x91C8, 0xE18B, 0x91C9, 0xD3D4, 0x91CA, 0xCACD, - 0x91CB, 0xE18C, 0x91CC, 0xC0EF, 0x91CD, 0xD6D8, 0x91CE, 0xD2B0, - 0x91CF, 0xC1BF, 0x91D0, 0xE18D, 0x91D1, 0xBDF0, 0x91D2, 0xE18E, - 0x91D3, 0xE18F, 0x91D4, 0xE190, 0x91D5, 0xE191, 0x91D6, 0xE192, - 0x91D7, 0xE193, 0x91D8, 0xE194, 0x91D9, 0xE195, 0x91DA, 0xE196, - 0x91DB, 0xE197, 0x91DC, 0xB8AA, 0x91DD, 0xE198, 0x91DE, 0xE199, - 0x91DF, 0xE19A, 0x91E0, 0xE19B, 0x91E1, 0xE19C, 0x91E2, 0xE19D, - 0x91E3, 0xE19E, 0x91E4, 0xE19F, 0x91E5, 0xE1A0, 0x91E6, 0xE240, - 0x91E7, 0xE241, 0x91E8, 0xE242, 0x91E9, 0xE243, 0x91EA, 0xE244, - 0x91EB, 0xE245, 0x91EC, 0xE246, 0x91ED, 0xE247, 0x91EE, 0xE248, - 0x91EF, 0xE249, 0x91F0, 0xE24A, 0x91F1, 0xE24B, 0x91F2, 0xE24C, - 0x91F3, 0xE24D, 0x91F4, 0xE24E, 0x91F5, 0xE24F, 0x91F6, 0xE250, - 0x91F7, 0xE251, 0x91F8, 0xE252, 0x91F9, 0xE253, 0x91FA, 0xE254, - 0x91FB, 0xE255, 0x91FC, 0xE256, 0x91FD, 0xE257, 0x91FE, 0xE258, - 0x91FF, 0xE259, 0x9200, 0xE25A, 0x9201, 0xE25B, 0x9202, 0xE25C, - 0x9203, 0xE25D, 0x9204, 0xE25E, 0x9205, 0xE25F, 0x9206, 0xE260, - 0x9207, 0xE261, 0x9208, 0xE262, 0x9209, 0xE263, 0x920A, 0xE264, - 0x920B, 0xE265, 0x920C, 0xE266, 0x920D, 0xE267, 0x920E, 0xE268, - 0x920F, 0xE269, 0x9210, 0xE26A, 0x9211, 0xE26B, 0x9212, 0xE26C, - 0x9213, 0xE26D, 0x9214, 0xE26E, 0x9215, 0xE26F, 0x9216, 0xE270, - 0x9217, 0xE271, 0x9218, 0xE272, 0x9219, 0xE273, 0x921A, 0xE274, - 0x921B, 0xE275, 0x921C, 0xE276, 0x921D, 0xE277, 0x921E, 0xE278, - 0x921F, 0xE279, 0x9220, 0xE27A, 0x9221, 0xE27B, 0x9222, 0xE27C, - 0x9223, 0xE27D, 0x9224, 0xE27E, 0x9225, 0xE280, 0x9226, 0xE281, - 0x9227, 0xE282, 0x9228, 0xE283, 0x9229, 0xE284, 0x922A, 0xE285, - 0x922B, 0xE286, 0x922C, 0xE287, 0x922D, 0xE288, 0x922E, 0xE289, - 0x922F, 0xE28A, 0x9230, 0xE28B, 0x9231, 0xE28C, 0x9232, 0xE28D, - 0x9233, 0xE28E, 0x9234, 0xE28F, 0x9235, 0xE290, 0x9236, 0xE291, - 0x9237, 0xE292, 0x9238, 0xE293, 0x9239, 0xE294, 0x923A, 0xE295, - 0x923B, 0xE296, 0x923C, 0xE297, 0x923D, 0xE298, 0x923E, 0xE299, - 0x923F, 0xE29A, 0x9240, 0xE29B, 0x9241, 0xE29C, 0x9242, 0xE29D, - 0x9243, 0xE29E, 0x9244, 0xE29F, 0x9245, 0xE2A0, 0x9246, 0xE340, - 0x9247, 0xE341, 0x9248, 0xE342, 0x9249, 0xE343, 0x924A, 0xE344, - 0x924B, 0xE345, 0x924C, 0xE346, 0x924D, 0xE347, 0x924E, 0xE348, - 0x924F, 0xE349, 0x9250, 0xE34A, 0x9251, 0xE34B, 0x9252, 0xE34C, - 0x9253, 0xE34D, 0x9254, 0xE34E, 0x9255, 0xE34F, 0x9256, 0xE350, - 0x9257, 0xE351, 0x9258, 0xE352, 0x9259, 0xE353, 0x925A, 0xE354, - 0x925B, 0xE355, 0x925C, 0xE356, 0x925D, 0xE357, 0x925E, 0xE358, - 0x925F, 0xE359, 0x9260, 0xE35A, 0x9261, 0xE35B, 0x9262, 0xE35C, - 0x9263, 0xE35D, 0x9264, 0xE35E, 0x9265, 0xE35F, 0x9266, 0xE360, - 0x9267, 0xE361, 0x9268, 0xE362, 0x9269, 0xE363, 0x926A, 0xE364, - 0x926B, 0xE365, 0x926C, 0xE366, 0x926D, 0xE367, 0x926E, 0xE368, - 0x926F, 0xE369, 0x9270, 0xE36A, 0x9271, 0xE36B, 0x9272, 0xE36C, - 0x9273, 0xE36D, 0x9274, 0xBCF8, 0x9275, 0xE36E, 0x9276, 0xE36F, - 0x9277, 0xE370, 0x9278, 0xE371, 0x9279, 0xE372, 0x927A, 0xE373, - 0x927B, 0xE374, 0x927C, 0xE375, 0x927D, 0xE376, 0x927E, 0xE377, - 0x927F, 0xE378, 0x9280, 0xE379, 0x9281, 0xE37A, 0x9282, 0xE37B, - 0x9283, 0xE37C, 0x9284, 0xE37D, 0x9285, 0xE37E, 0x9286, 0xE380, - 0x9287, 0xE381, 0x9288, 0xE382, 0x9289, 0xE383, 0x928A, 0xE384, - 0x928B, 0xE385, 0x928C, 0xE386, 0x928D, 0xE387, 0x928E, 0xF6C6, - 0x928F, 0xE388, 0x9290, 0xE389, 0x9291, 0xE38A, 0x9292, 0xE38B, - 0x9293, 0xE38C, 0x9294, 0xE38D, 0x9295, 0xE38E, 0x9296, 0xE38F, - 0x9297, 0xE390, 0x9298, 0xE391, 0x9299, 0xE392, 0x929A, 0xE393, - 0x929B, 0xE394, 0x929C, 0xE395, 0x929D, 0xE396, 0x929E, 0xE397, - 0x929F, 0xE398, 0x92A0, 0xE399, 0x92A1, 0xE39A, 0x92A2, 0xE39B, - 0x92A3, 0xE39C, 0x92A4, 0xE39D, 0x92A5, 0xE39E, 0x92A6, 0xE39F, - 0x92A7, 0xE3A0, 0x92A8, 0xE440, 0x92A9, 0xE441, 0x92AA, 0xE442, - 0x92AB, 0xE443, 0x92AC, 0xE444, 0x92AD, 0xE445, 0x92AE, 0xF6C7, - 0x92AF, 0xE446, 0x92B0, 0xE447, 0x92B1, 0xE448, 0x92B2, 0xE449, - 0x92B3, 0xE44A, 0x92B4, 0xE44B, 0x92B5, 0xE44C, 0x92B6, 0xE44D, - 0x92B7, 0xE44E, 0x92B8, 0xE44F, 0x92B9, 0xE450, 0x92BA, 0xE451, - 0x92BB, 0xE452, 0x92BC, 0xE453, 0x92BD, 0xE454, 0x92BE, 0xE455, - 0x92BF, 0xE456, 0x92C0, 0xE457, 0x92C1, 0xE458, 0x92C2, 0xE459, - 0x92C3, 0xE45A, 0x92C4, 0xE45B, 0x92C5, 0xE45C, 0x92C6, 0xE45D, - 0x92C7, 0xE45E, 0x92C8, 0xF6C8, 0x92C9, 0xE45F, 0x92CA, 0xE460, - 0x92CB, 0xE461, 0x92CC, 0xE462, 0x92CD, 0xE463, 0x92CE, 0xE464, - 0x92CF, 0xE465, 0x92D0, 0xE466, 0x92D1, 0xE467, 0x92D2, 0xE468, - 0x92D3, 0xE469, 0x92D4, 0xE46A, 0x92D5, 0xE46B, 0x92D6, 0xE46C, - 0x92D7, 0xE46D, 0x92D8, 0xE46E, 0x92D9, 0xE46F, 0x92DA, 0xE470, - 0x92DB, 0xE471, 0x92DC, 0xE472, 0x92DD, 0xE473, 0x92DE, 0xE474, - 0x92DF, 0xE475, 0x92E0, 0xE476, 0x92E1, 0xE477, 0x92E2, 0xE478, - 0x92E3, 0xE479, 0x92E4, 0xE47A, 0x92E5, 0xE47B, 0x92E6, 0xE47C, - 0x92E7, 0xE47D, 0x92E8, 0xE47E, 0x92E9, 0xE480, 0x92EA, 0xE481, - 0x92EB, 0xE482, 0x92EC, 0xE483, 0x92ED, 0xE484, 0x92EE, 0xE485, - 0x92EF, 0xE486, 0x92F0, 0xE487, 0x92F1, 0xE488, 0x92F2, 0xE489, - 0x92F3, 0xE48A, 0x92F4, 0xE48B, 0x92F5, 0xE48C, 0x92F6, 0xE48D, - 0x92F7, 0xE48E, 0x92F8, 0xE48F, 0x92F9, 0xE490, 0x92FA, 0xE491, - 0x92FB, 0xE492, 0x92FC, 0xE493, 0x92FD, 0xE494, 0x92FE, 0xE495, - 0x92FF, 0xE496, 0x9300, 0xE497, 0x9301, 0xE498, 0x9302, 0xE499, - 0x9303, 0xE49A, 0x9304, 0xE49B, 0x9305, 0xE49C, 0x9306, 0xE49D, - 0x9307, 0xE49E, 0x9308, 0xE49F, 0x9309, 0xE4A0, 0x930A, 0xE540, - 0x930B, 0xE541, 0x930C, 0xE542, 0x930D, 0xE543, 0x930E, 0xE544, - 0x930F, 0xE545, 0x9310, 0xE546, 0x9311, 0xE547, 0x9312, 0xE548, - 0x9313, 0xE549, 0x9314, 0xE54A, 0x9315, 0xE54B, 0x9316, 0xE54C, - 0x9317, 0xE54D, 0x9318, 0xE54E, 0x9319, 0xE54F, 0x931A, 0xE550, - 0x931B, 0xE551, 0x931C, 0xE552, 0x931D, 0xE553, 0x931E, 0xE554, - 0x931F, 0xE555, 0x9320, 0xE556, 0x9321, 0xE557, 0x9322, 0xE558, - 0x9323, 0xE559, 0x9324, 0xE55A, 0x9325, 0xE55B, 0x9326, 0xE55C, - 0x9327, 0xE55D, 0x9328, 0xE55E, 0x9329, 0xE55F, 0x932A, 0xE560, - 0x932B, 0xE561, 0x932C, 0xE562, 0x932D, 0xE563, 0x932E, 0xE564, - 0x932F, 0xE565, 0x9330, 0xE566, 0x9331, 0xE567, 0x9332, 0xE568, - 0x9333, 0xE569, 0x9334, 0xE56A, 0x9335, 0xE56B, 0x9336, 0xE56C, - 0x9337, 0xE56D, 0x9338, 0xE56E, 0x9339, 0xE56F, 0x933A, 0xE570, - 0x933B, 0xE571, 0x933C, 0xE572, 0x933D, 0xE573, 0x933E, 0xF6C9, - 0x933F, 0xE574, 0x9340, 0xE575, 0x9341, 0xE576, 0x9342, 0xE577, - 0x9343, 0xE578, 0x9344, 0xE579, 0x9345, 0xE57A, 0x9346, 0xE57B, - 0x9347, 0xE57C, 0x9348, 0xE57D, 0x9349, 0xE57E, 0x934A, 0xE580, - 0x934B, 0xE581, 0x934C, 0xE582, 0x934D, 0xE583, 0x934E, 0xE584, - 0x934F, 0xE585, 0x9350, 0xE586, 0x9351, 0xE587, 0x9352, 0xE588, - 0x9353, 0xE589, 0x9354, 0xE58A, 0x9355, 0xE58B, 0x9356, 0xE58C, - 0x9357, 0xE58D, 0x9358, 0xE58E, 0x9359, 0xE58F, 0x935A, 0xE590, - 0x935B, 0xE591, 0x935C, 0xE592, 0x935D, 0xE593, 0x935E, 0xE594, - 0x935F, 0xE595, 0x9360, 0xE596, 0x9361, 0xE597, 0x9362, 0xE598, - 0x9363, 0xE599, 0x9364, 0xE59A, 0x9365, 0xE59B, 0x9366, 0xE59C, - 0x9367, 0xE59D, 0x9368, 0xE59E, 0x9369, 0xE59F, 0x936A, 0xF6CA, - 0x936B, 0xE5A0, 0x936C, 0xE640, 0x936D, 0xE641, 0x936E, 0xE642, - 0x936F, 0xE643, 0x9370, 0xE644, 0x9371, 0xE645, 0x9372, 0xE646, - 0x9373, 0xE647, 0x9374, 0xE648, 0x9375, 0xE649, 0x9376, 0xE64A, - 0x9377, 0xE64B, 0x9378, 0xE64C, 0x9379, 0xE64D, 0x937A, 0xE64E, - 0x937B, 0xE64F, 0x937C, 0xE650, 0x937D, 0xE651, 0x937E, 0xE652, - 0x937F, 0xE653, 0x9380, 0xE654, 0x9381, 0xE655, 0x9382, 0xE656, - 0x9383, 0xE657, 0x9384, 0xE658, 0x9385, 0xE659, 0x9386, 0xE65A, - 0x9387, 0xE65B, 0x9388, 0xE65C, 0x9389, 0xE65D, 0x938A, 0xE65E, - 0x938B, 0xE65F, 0x938C, 0xE660, 0x938D, 0xE661, 0x938E, 0xE662, - 0x938F, 0xF6CC, 0x9390, 0xE663, 0x9391, 0xE664, 0x9392, 0xE665, - 0x9393, 0xE666, 0x9394, 0xE667, 0x9395, 0xE668, 0x9396, 0xE669, - 0x9397, 0xE66A, 0x9398, 0xE66B, 0x9399, 0xE66C, 0x939A, 0xE66D, - 0x939B, 0xE66E, 0x939C, 0xE66F, 0x939D, 0xE670, 0x939E, 0xE671, - 0x939F, 0xE672, 0x93A0, 0xE673, 0x93A1, 0xE674, 0x93A2, 0xE675, - 0x93A3, 0xE676, 0x93A4, 0xE677, 0x93A5, 0xE678, 0x93A6, 0xE679, - 0x93A7, 0xE67A, 0x93A8, 0xE67B, 0x93A9, 0xE67C, 0x93AA, 0xE67D, - 0x93AB, 0xE67E, 0x93AC, 0xE680, 0x93AD, 0xE681, 0x93AE, 0xE682, - 0x93AF, 0xE683, 0x93B0, 0xE684, 0x93B1, 0xE685, 0x93B2, 0xE686, - 0x93B3, 0xE687, 0x93B4, 0xE688, 0x93B5, 0xE689, 0x93B6, 0xE68A, - 0x93B7, 0xE68B, 0x93B8, 0xE68C, 0x93B9, 0xE68D, 0x93BA, 0xE68E, - 0x93BB, 0xE68F, 0x93BC, 0xE690, 0x93BD, 0xE691, 0x93BE, 0xE692, - 0x93BF, 0xE693, 0x93C0, 0xE694, 0x93C1, 0xE695, 0x93C2, 0xE696, - 0x93C3, 0xE697, 0x93C4, 0xE698, 0x93C5, 0xE699, 0x93C6, 0xE69A, - 0x93C7, 0xE69B, 0x93C8, 0xE69C, 0x93C9, 0xE69D, 0x93CA, 0xF6CB, - 0x93CB, 0xE69E, 0x93CC, 0xE69F, 0x93CD, 0xE6A0, 0x93CE, 0xE740, - 0x93CF, 0xE741, 0x93D0, 0xE742, 0x93D1, 0xE743, 0x93D2, 0xE744, - 0x93D3, 0xE745, 0x93D4, 0xE746, 0x93D5, 0xE747, 0x93D6, 0xF7E9, - 0x93D7, 0xE748, 0x93D8, 0xE749, 0x93D9, 0xE74A, 0x93DA, 0xE74B, - 0x93DB, 0xE74C, 0x93DC, 0xE74D, 0x93DD, 0xE74E, 0x93DE, 0xE74F, - 0x93DF, 0xE750, 0x93E0, 0xE751, 0x93E1, 0xE752, 0x93E2, 0xE753, - 0x93E3, 0xE754, 0x93E4, 0xE755, 0x93E5, 0xE756, 0x93E6, 0xE757, - 0x93E7, 0xE758, 0x93E8, 0xE759, 0x93E9, 0xE75A, 0x93EA, 0xE75B, - 0x93EB, 0xE75C, 0x93EC, 0xE75D, 0x93ED, 0xE75E, 0x93EE, 0xE75F, - 0x93EF, 0xE760, 0x93F0, 0xE761, 0x93F1, 0xE762, 0x93F2, 0xE763, - 0x93F3, 0xE764, 0x93F4, 0xE765, 0x93F5, 0xE766, 0x93F6, 0xE767, - 0x93F7, 0xE768, 0x93F8, 0xE769, 0x93F9, 0xE76A, 0x93FA, 0xE76B, - 0x93FB, 0xE76C, 0x93FC, 0xE76D, 0x93FD, 0xE76E, 0x93FE, 0xE76F, - 0x93FF, 0xE770, 0x9400, 0xE771, 0x9401, 0xE772, 0x9402, 0xE773, - 0x9403, 0xE774, 0x9404, 0xE775, 0x9405, 0xE776, 0x9406, 0xE777, - 0x9407, 0xE778, 0x9408, 0xE779, 0x9409, 0xE77A, 0x940A, 0xE77B, - 0x940B, 0xE77C, 0x940C, 0xE77D, 0x940D, 0xE77E, 0x940E, 0xE780, - 0x940F, 0xE781, 0x9410, 0xE782, 0x9411, 0xE783, 0x9412, 0xE784, - 0x9413, 0xE785, 0x9414, 0xE786, 0x9415, 0xE787, 0x9416, 0xE788, - 0x9417, 0xE789, 0x9418, 0xE78A, 0x9419, 0xE78B, 0x941A, 0xE78C, - 0x941B, 0xE78D, 0x941C, 0xE78E, 0x941D, 0xE78F, 0x941E, 0xE790, - 0x941F, 0xE791, 0x9420, 0xE792, 0x9421, 0xE793, 0x9422, 0xE794, - 0x9423, 0xE795, 0x9424, 0xE796, 0x9425, 0xE797, 0x9426, 0xE798, - 0x9427, 0xE799, 0x9428, 0xE79A, 0x9429, 0xE79B, 0x942A, 0xE79C, - 0x942B, 0xE79D, 0x942C, 0xE79E, 0x942D, 0xE79F, 0x942E, 0xE7A0, - 0x942F, 0xE840, 0x9430, 0xE841, 0x9431, 0xE842, 0x9432, 0xE843, - 0x9433, 0xE844, 0x9434, 0xE845, 0x9435, 0xE846, 0x9436, 0xE847, - 0x9437, 0xE848, 0x9438, 0xE849, 0x9439, 0xE84A, 0x943A, 0xE84B, - 0x943B, 0xE84C, 0x943C, 0xE84D, 0x943D, 0xE84E, 0x943E, 0xF6CD, - 0x943F, 0xE84F, 0x9440, 0xE850, 0x9441, 0xE851, 0x9442, 0xE852, - 0x9443, 0xE853, 0x9444, 0xE854, 0x9445, 0xE855, 0x9446, 0xE856, - 0x9447, 0xE857, 0x9448, 0xE858, 0x9449, 0xE859, 0x944A, 0xE85A, - 0x944B, 0xE85B, 0x944C, 0xE85C, 0x944D, 0xE85D, 0x944E, 0xE85E, - 0x944F, 0xE85F, 0x9450, 0xE860, 0x9451, 0xE861, 0x9452, 0xE862, - 0x9453, 0xE863, 0x9454, 0xE864, 0x9455, 0xE865, 0x9456, 0xE866, - 0x9457, 0xE867, 0x9458, 0xE868, 0x9459, 0xE869, 0x945A, 0xE86A, - 0x945B, 0xE86B, 0x945C, 0xE86C, 0x945D, 0xE86D, 0x945E, 0xE86E, - 0x945F, 0xE86F, 0x9460, 0xE870, 0x9461, 0xE871, 0x9462, 0xE872, - 0x9463, 0xE873, 0x9464, 0xE874, 0x9465, 0xE875, 0x9466, 0xE876, - 0x9467, 0xE877, 0x9468, 0xE878, 0x9469, 0xE879, 0x946A, 0xE87A, - 0x946B, 0xF6CE, 0x946C, 0xE87B, 0x946D, 0xE87C, 0x946E, 0xE87D, - 0x946F, 0xE87E, 0x9470, 0xE880, 0x9471, 0xE881, 0x9472, 0xE882, - 0x9473, 0xE883, 0x9474, 0xE884, 0x9475, 0xE885, 0x9476, 0xE886, - 0x9477, 0xE887, 0x9478, 0xE888, 0x9479, 0xE889, 0x947A, 0xE88A, - 0x947B, 0xE88B, 0x947C, 0xE88C, 0x947D, 0xE88D, 0x947E, 0xE88E, - 0x947F, 0xE88F, 0x9480, 0xE890, 0x9481, 0xE891, 0x9482, 0xE892, - 0x9483, 0xE893, 0x9484, 0xE894, 0x9485, 0xEEC4, 0x9486, 0xEEC5, - 0x9487, 0xEEC6, 0x9488, 0xD5EB, 0x9489, 0xB6A4, 0x948A, 0xEEC8, - 0x948B, 0xEEC7, 0x948C, 0xEEC9, 0x948D, 0xEECA, 0x948E, 0xC7A5, - 0x948F, 0xEECB, 0x9490, 0xEECC, 0x9491, 0xE895, 0x9492, 0xB7B0, - 0x9493, 0xB5F6, 0x9494, 0xEECD, 0x9495, 0xEECF, 0x9496, 0xE896, - 0x9497, 0xEECE, 0x9498, 0xE897, 0x9499, 0xB8C6, 0x949A, 0xEED0, - 0x949B, 0xEED1, 0x949C, 0xEED2, 0x949D, 0xB6DB, 0x949E, 0xB3AE, - 0x949F, 0xD6D3, 0x94A0, 0xC4C6, 0x94A1, 0xB1B5, 0x94A2, 0xB8D6, - 0x94A3, 0xEED3, 0x94A4, 0xEED4, 0x94A5, 0xD4BF, 0x94A6, 0xC7D5, - 0x94A7, 0xBEFB, 0x94A8, 0xCED9, 0x94A9, 0xB9B3, 0x94AA, 0xEED6, - 0x94AB, 0xEED5, 0x94AC, 0xEED8, 0x94AD, 0xEED7, 0x94AE, 0xC5A5, - 0x94AF, 0xEED9, 0x94B0, 0xEEDA, 0x94B1, 0xC7AE, 0x94B2, 0xEEDB, - 0x94B3, 0xC7AF, 0x94B4, 0xEEDC, 0x94B5, 0xB2A7, 0x94B6, 0xEEDD, - 0x94B7, 0xEEDE, 0x94B8, 0xEEDF, 0x94B9, 0xEEE0, 0x94BA, 0xEEE1, - 0x94BB, 0xD7EA, 0x94BC, 0xEEE2, 0x94BD, 0xEEE3, 0x94BE, 0xBCD8, - 0x94BF, 0xEEE4, 0x94C0, 0xD3CB, 0x94C1, 0xCCFA, 0x94C2, 0xB2AC, - 0x94C3, 0xC1E5, 0x94C4, 0xEEE5, 0x94C5, 0xC7A6, 0x94C6, 0xC3AD, - 0x94C7, 0xE898, 0x94C8, 0xEEE6, 0x94C9, 0xEEE7, 0x94CA, 0xEEE8, - 0x94CB, 0xEEE9, 0x94CC, 0xEEEA, 0x94CD, 0xEEEB, 0x94CE, 0xEEEC, - 0x94CF, 0xE899, 0x94D0, 0xEEED, 0x94D1, 0xEEEE, 0x94D2, 0xEEEF, - 0x94D3, 0xE89A, 0x94D4, 0xE89B, 0x94D5, 0xEEF0, 0x94D6, 0xEEF1, - 0x94D7, 0xEEF2, 0x94D8, 0xEEF4, 0x94D9, 0xEEF3, 0x94DA, 0xE89C, - 0x94DB, 0xEEF5, 0x94DC, 0xCDAD, 0x94DD, 0xC2C1, 0x94DE, 0xEEF6, - 0x94DF, 0xEEF7, 0x94E0, 0xEEF8, 0x94E1, 0xD5A1, 0x94E2, 0xEEF9, - 0x94E3, 0xCFB3, 0x94E4, 0xEEFA, 0x94E5, 0xEEFB, 0x94E6, 0xE89D, - 0x94E7, 0xEEFC, 0x94E8, 0xEEFD, 0x94E9, 0xEFA1, 0x94EA, 0xEEFE, - 0x94EB, 0xEFA2, 0x94EC, 0xB8F5, 0x94ED, 0xC3FA, 0x94EE, 0xEFA3, - 0x94EF, 0xEFA4, 0x94F0, 0xBDC2, 0x94F1, 0xD2BF, 0x94F2, 0xB2F9, - 0x94F3, 0xEFA5, 0x94F4, 0xEFA6, 0x94F5, 0xEFA7, 0x94F6, 0xD2F8, - 0x94F7, 0xEFA8, 0x94F8, 0xD6FD, 0x94F9, 0xEFA9, 0x94FA, 0xC6CC, - 0x94FB, 0xE89E, 0x94FC, 0xEFAA, 0x94FD, 0xEFAB, 0x94FE, 0xC1B4, - 0x94FF, 0xEFAC, 0x9500, 0xCFFA, 0x9501, 0xCBF8, 0x9502, 0xEFAE, - 0x9503, 0xEFAD, 0x9504, 0xB3FA, 0x9505, 0xB9F8, 0x9506, 0xEFAF, - 0x9507, 0xEFB0, 0x9508, 0xD0E2, 0x9509, 0xEFB1, 0x950A, 0xEFB2, - 0x950B, 0xB7E6, 0x950C, 0xD0BF, 0x950D, 0xEFB3, 0x950E, 0xEFB4, - 0x950F, 0xEFB5, 0x9510, 0xC8F1, 0x9511, 0xCCE0, 0x9512, 0xEFB6, - 0x9513, 0xEFB7, 0x9514, 0xEFB8, 0x9515, 0xEFB9, 0x9516, 0xEFBA, - 0x9517, 0xD5E0, 0x9518, 0xEFBB, 0x9519, 0xB4ED, 0x951A, 0xC3AA, - 0x951B, 0xEFBC, 0x951C, 0xE89F, 0x951D, 0xEFBD, 0x951E, 0xEFBE, - 0x951F, 0xEFBF, 0x9520, 0xE8A0, 0x9521, 0xCEFD, 0x9522, 0xEFC0, - 0x9523, 0xC2E0, 0x9524, 0xB4B8, 0x9525, 0xD7B6, 0x9526, 0xBDF5, - 0x9527, 0xE940, 0x9528, 0xCFC7, 0x9529, 0xEFC3, 0x952A, 0xEFC1, - 0x952B, 0xEFC2, 0x952C, 0xEFC4, 0x952D, 0xB6A7, 0x952E, 0xBCFC, - 0x952F, 0xBEE2, 0x9530, 0xC3CC, 0x9531, 0xEFC5, 0x9532, 0xEFC6, - 0x9533, 0xE941, 0x9534, 0xEFC7, 0x9535, 0xEFCF, 0x9536, 0xEFC8, - 0x9537, 0xEFC9, 0x9538, 0xEFCA, 0x9539, 0xC7C2, 0x953A, 0xEFF1, - 0x953B, 0xB6CD, 0x953C, 0xEFCB, 0x953D, 0xE942, 0x953E, 0xEFCC, - 0x953F, 0xEFCD, 0x9540, 0xB6C6, 0x9541, 0xC3BE, 0x9542, 0xEFCE, - 0x9543, 0xE943, 0x9544, 0xEFD0, 0x9545, 0xEFD1, 0x9546, 0xEFD2, - 0x9547, 0xD5F2, 0x9548, 0xE944, 0x9549, 0xEFD3, 0x954A, 0xC4F7, - 0x954B, 0xE945, 0x954C, 0xEFD4, 0x954D, 0xC4F8, 0x954E, 0xEFD5, - 0x954F, 0xEFD6, 0x9550, 0xB8E4, 0x9551, 0xB0F7, 0x9552, 0xEFD7, - 0x9553, 0xEFD8, 0x9554, 0xEFD9, 0x9555, 0xE946, 0x9556, 0xEFDA, - 0x9557, 0xEFDB, 0x9558, 0xEFDC, 0x9559, 0xEFDD, 0x955A, 0xE947, - 0x955B, 0xEFDE, 0x955C, 0xBEB5, 0x955D, 0xEFE1, 0x955E, 0xEFDF, - 0x955F, 0xEFE0, 0x9560, 0xE948, 0x9561, 0xEFE2, 0x9562, 0xEFE3, - 0x9563, 0xC1CD, 0x9564, 0xEFE4, 0x9565, 0xEFE5, 0x9566, 0xEFE6, - 0x9567, 0xEFE7, 0x9568, 0xEFE8, 0x9569, 0xEFE9, 0x956A, 0xEFEA, - 0x956B, 0xEFEB, 0x956C, 0xEFEC, 0x956D, 0xC0D8, 0x956E, 0xE949, - 0x956F, 0xEFED, 0x9570, 0xC1AD, 0x9571, 0xEFEE, 0x9572, 0xEFEF, - 0x9573, 0xEFF0, 0x9574, 0xE94A, 0x9575, 0xE94B, 0x9576, 0xCFE2, - 0x9577, 0xE94C, 0x9578, 0xE94D, 0x9579, 0xE94E, 0x957A, 0xE94F, - 0x957B, 0xE950, 0x957C, 0xE951, 0x957D, 0xE952, 0x957E, 0xE953, - 0x957F, 0xB3A4, 0x9580, 0xE954, 0x9581, 0xE955, 0x9582, 0xE956, - 0x9583, 0xE957, 0x9584, 0xE958, 0x9585, 0xE959, 0x9586, 0xE95A, - 0x9587, 0xE95B, 0x9588, 0xE95C, 0x9589, 0xE95D, 0x958A, 0xE95E, - 0x958B, 0xE95F, 0x958C, 0xE960, 0x958D, 0xE961, 0x958E, 0xE962, - 0x958F, 0xE963, 0x9590, 0xE964, 0x9591, 0xE965, 0x9592, 0xE966, - 0x9593, 0xE967, 0x9594, 0xE968, 0x9595, 0xE969, 0x9596, 0xE96A, - 0x9597, 0xE96B, 0x9598, 0xE96C, 0x9599, 0xE96D, 0x959A, 0xE96E, - 0x959B, 0xE96F, 0x959C, 0xE970, 0x959D, 0xE971, 0x959E, 0xE972, - 0x959F, 0xE973, 0x95A0, 0xE974, 0x95A1, 0xE975, 0x95A2, 0xE976, - 0x95A3, 0xE977, 0x95A4, 0xE978, 0x95A5, 0xE979, 0x95A6, 0xE97A, - 0x95A7, 0xE97B, 0x95A8, 0xE97C, 0x95A9, 0xE97D, 0x95AA, 0xE97E, - 0x95AB, 0xE980, 0x95AC, 0xE981, 0x95AD, 0xE982, 0x95AE, 0xE983, - 0x95AF, 0xE984, 0x95B0, 0xE985, 0x95B1, 0xE986, 0x95B2, 0xE987, - 0x95B3, 0xE988, 0x95B4, 0xE989, 0x95B5, 0xE98A, 0x95B6, 0xE98B, - 0x95B7, 0xE98C, 0x95B8, 0xE98D, 0x95B9, 0xE98E, 0x95BA, 0xE98F, - 0x95BB, 0xE990, 0x95BC, 0xE991, 0x95BD, 0xE992, 0x95BE, 0xE993, - 0x95BF, 0xE994, 0x95C0, 0xE995, 0x95C1, 0xE996, 0x95C2, 0xE997, - 0x95C3, 0xE998, 0x95C4, 0xE999, 0x95C5, 0xE99A, 0x95C6, 0xE99B, - 0x95C7, 0xE99C, 0x95C8, 0xE99D, 0x95C9, 0xE99E, 0x95CA, 0xE99F, - 0x95CB, 0xE9A0, 0x95CC, 0xEA40, 0x95CD, 0xEA41, 0x95CE, 0xEA42, - 0x95CF, 0xEA43, 0x95D0, 0xEA44, 0x95D1, 0xEA45, 0x95D2, 0xEA46, - 0x95D3, 0xEA47, 0x95D4, 0xEA48, 0x95D5, 0xEA49, 0x95D6, 0xEA4A, - 0x95D7, 0xEA4B, 0x95D8, 0xEA4C, 0x95D9, 0xEA4D, 0x95DA, 0xEA4E, - 0x95DB, 0xEA4F, 0x95DC, 0xEA50, 0x95DD, 0xEA51, 0x95DE, 0xEA52, - 0x95DF, 0xEA53, 0x95E0, 0xEA54, 0x95E1, 0xEA55, 0x95E2, 0xEA56, - 0x95E3, 0xEA57, 0x95E4, 0xEA58, 0x95E5, 0xEA59, 0x95E6, 0xEA5A, - 0x95E7, 0xEA5B, 0x95E8, 0xC3C5, 0x95E9, 0xE3C5, 0x95EA, 0xC9C1, - 0x95EB, 0xE3C6, 0x95EC, 0xEA5C, 0x95ED, 0xB1D5, 0x95EE, 0xCECA, - 0x95EF, 0xB4B3, 0x95F0, 0xC8F2, 0x95F1, 0xE3C7, 0x95F2, 0xCFD0, - 0x95F3, 0xE3C8, 0x95F4, 0xBCE4, 0x95F5, 0xE3C9, 0x95F6, 0xE3CA, - 0x95F7, 0xC3C6, 0x95F8, 0xD5A2, 0x95F9, 0xC4D6, 0x95FA, 0xB9EB, - 0x95FB, 0xCEC5, 0x95FC, 0xE3CB, 0x95FD, 0xC3F6, 0x95FE, 0xE3CC, - 0x95FF, 0xEA5D, 0x9600, 0xB7A7, 0x9601, 0xB8F3, 0x9602, 0xBAD2, - 0x9603, 0xE3CD, 0x9604, 0xE3CE, 0x9605, 0xD4C4, 0x9606, 0xE3CF, - 0x9607, 0xEA5E, 0x9608, 0xE3D0, 0x9609, 0xD1CB, 0x960A, 0xE3D1, - 0x960B, 0xE3D2, 0x960C, 0xE3D3, 0x960D, 0xE3D4, 0x960E, 0xD1D6, - 0x960F, 0xE3D5, 0x9610, 0xB2FB, 0x9611, 0xC0BB, 0x9612, 0xE3D6, - 0x9613, 0xEA5F, 0x9614, 0xC0AB, 0x9615, 0xE3D7, 0x9616, 0xE3D8, - 0x9617, 0xE3D9, 0x9618, 0xEA60, 0x9619, 0xE3DA, 0x961A, 0xE3DB, - 0x961B, 0xEA61, 0x961C, 0xB8B7, 0x961D, 0xDAE2, 0x961E, 0xEA62, - 0x961F, 0xB6D3, 0x9620, 0xEA63, 0x9621, 0xDAE4, 0x9622, 0xDAE3, - 0x9623, 0xEA64, 0x9624, 0xEA65, 0x9625, 0xEA66, 0x9626, 0xEA67, - 0x9627, 0xEA68, 0x9628, 0xEA69, 0x9629, 0xEA6A, 0x962A, 0xDAE6, - 0x962B, 0xEA6B, 0x962C, 0xEA6C, 0x962D, 0xEA6D, 0x962E, 0xC8EE, - 0x962F, 0xEA6E, 0x9630, 0xEA6F, 0x9631, 0xDAE5, 0x9632, 0xB7C0, - 0x9633, 0xD1F4, 0x9634, 0xD2F5, 0x9635, 0xD5F3, 0x9636, 0xBDD7, - 0x9637, 0xEA70, 0x9638, 0xEA71, 0x9639, 0xEA72, 0x963A, 0xEA73, - 0x963B, 0xD7E8, 0x963C, 0xDAE8, 0x963D, 0xDAE7, 0x963E, 0xEA74, - 0x963F, 0xB0A2, 0x9640, 0xCDD3, 0x9641, 0xEA75, 0x9642, 0xDAE9, - 0x9643, 0xEA76, 0x9644, 0xB8BD, 0x9645, 0xBCCA, 0x9646, 0xC2BD, - 0x9647, 0xC2A4, 0x9648, 0xB3C2, 0x9649, 0xDAEA, 0x964A, 0xEA77, - 0x964B, 0xC2AA, 0x964C, 0xC4B0, 0x964D, 0xBDB5, 0x964E, 0xEA78, - 0x964F, 0xEA79, 0x9650, 0xCFDE, 0x9651, 0xEA7A, 0x9652, 0xEA7B, - 0x9653, 0xEA7C, 0x9654, 0xDAEB, 0x9655, 0xC9C2, 0x9656, 0xEA7D, - 0x9657, 0xEA7E, 0x9658, 0xEA80, 0x9659, 0xEA81, 0x965A, 0xEA82, - 0x965B, 0xB1DD, 0x965C, 0xEA83, 0x965D, 0xEA84, 0x965E, 0xEA85, - 0x965F, 0xDAEC, 0x9660, 0xEA86, 0x9661, 0xB6B8, 0x9662, 0xD4BA, - 0x9663, 0xEA87, 0x9664, 0xB3FD, 0x9665, 0xEA88, 0x9666, 0xEA89, - 0x9667, 0xDAED, 0x9668, 0xD4C9, 0x9669, 0xCFD5, 0x966A, 0xC5E3, - 0x966B, 0xEA8A, 0x966C, 0xDAEE, 0x966D, 0xEA8B, 0x966E, 0xEA8C, - 0x966F, 0xEA8D, 0x9670, 0xEA8E, 0x9671, 0xEA8F, 0x9672, 0xDAEF, - 0x9673, 0xEA90, 0x9674, 0xDAF0, 0x9675, 0xC1EA, 0x9676, 0xCCD5, - 0x9677, 0xCFDD, 0x9678, 0xEA91, 0x9679, 0xEA92, 0x967A, 0xEA93, - 0x967B, 0xEA94, 0x967C, 0xEA95, 0x967D, 0xEA96, 0x967E, 0xEA97, - 0x967F, 0xEA98, 0x9680, 0xEA99, 0x9681, 0xEA9A, 0x9682, 0xEA9B, - 0x9683, 0xEA9C, 0x9684, 0xEA9D, 0x9685, 0xD3E7, 0x9686, 0xC2A1, - 0x9687, 0xEA9E, 0x9688, 0xDAF1, 0x9689, 0xEA9F, 0x968A, 0xEAA0, - 0x968B, 0xCBE5, 0x968C, 0xEB40, 0x968D, 0xDAF2, 0x968E, 0xEB41, - 0x968F, 0xCBE6, 0x9690, 0xD2FE, 0x9691, 0xEB42, 0x9692, 0xEB43, - 0x9693, 0xEB44, 0x9694, 0xB8F4, 0x9695, 0xEB45, 0x9696, 0xEB46, - 0x9697, 0xDAF3, 0x9698, 0xB0AF, 0x9699, 0xCFB6, 0x969A, 0xEB47, - 0x969B, 0xEB48, 0x969C, 0xD5CF, 0x969D, 0xEB49, 0x969E, 0xEB4A, - 0x969F, 0xEB4B, 0x96A0, 0xEB4C, 0x96A1, 0xEB4D, 0x96A2, 0xEB4E, - 0x96A3, 0xEB4F, 0x96A4, 0xEB50, 0x96A5, 0xEB51, 0x96A6, 0xEB52, - 0x96A7, 0xCBED, 0x96A8, 0xEB53, 0x96A9, 0xEB54, 0x96AA, 0xEB55, - 0x96AB, 0xEB56, 0x96AC, 0xEB57, 0x96AD, 0xEB58, 0x96AE, 0xEB59, - 0x96AF, 0xEB5A, 0x96B0, 0xDAF4, 0x96B1, 0xEB5B, 0x96B2, 0xEB5C, - 0x96B3, 0xE3C4, 0x96B4, 0xEB5D, 0x96B5, 0xEB5E, 0x96B6, 0xC1A5, - 0x96B7, 0xEB5F, 0x96B8, 0xEB60, 0x96B9, 0xF6BF, 0x96BA, 0xEB61, - 0x96BB, 0xEB62, 0x96BC, 0xF6C0, 0x96BD, 0xF6C1, 0x96BE, 0xC4D1, - 0x96BF, 0xEB63, 0x96C0, 0xC8B8, 0x96C1, 0xD1E3, 0x96C2, 0xEB64, - 0x96C3, 0xEB65, 0x96C4, 0xD0DB, 0x96C5, 0xD1C5, 0x96C6, 0xBCAF, - 0x96C7, 0xB9CD, 0x96C8, 0xEB66, 0x96C9, 0xEFF4, 0x96CA, 0xEB67, - 0x96CB, 0xEB68, 0x96CC, 0xB4C6, 0x96CD, 0xD3BA, 0x96CE, 0xF6C2, - 0x96CF, 0xB3FB, 0x96D0, 0xEB69, 0x96D1, 0xEB6A, 0x96D2, 0xF6C3, - 0x96D3, 0xEB6B, 0x96D4, 0xEB6C, 0x96D5, 0xB5F1, 0x96D6, 0xEB6D, - 0x96D7, 0xEB6E, 0x96D8, 0xEB6F, 0x96D9, 0xEB70, 0x96DA, 0xEB71, - 0x96DB, 0xEB72, 0x96DC, 0xEB73, 0x96DD, 0xEB74, 0x96DE, 0xEB75, - 0x96DF, 0xEB76, 0x96E0, 0xF6C5, 0x96E1, 0xEB77, 0x96E2, 0xEB78, - 0x96E3, 0xEB79, 0x96E4, 0xEB7A, 0x96E5, 0xEB7B, 0x96E6, 0xEB7C, - 0x96E7, 0xEB7D, 0x96E8, 0xD3EA, 0x96E9, 0xF6A7, 0x96EA, 0xD1A9, - 0x96EB, 0xEB7E, 0x96EC, 0xEB80, 0x96ED, 0xEB81, 0x96EE, 0xEB82, - 0x96EF, 0xF6A9, 0x96F0, 0xEB83, 0x96F1, 0xEB84, 0x96F2, 0xEB85, - 0x96F3, 0xF6A8, 0x96F4, 0xEB86, 0x96F5, 0xEB87, 0x96F6, 0xC1E3, - 0x96F7, 0xC0D7, 0x96F8, 0xEB88, 0x96F9, 0xB1A2, 0x96FA, 0xEB89, - 0x96FB, 0xEB8A, 0x96FC, 0xEB8B, 0x96FD, 0xEB8C, 0x96FE, 0xCEED, - 0x96FF, 0xEB8D, 0x9700, 0xD0E8, 0x9701, 0xF6AB, 0x9702, 0xEB8E, - 0x9703, 0xEB8F, 0x9704, 0xCFF6, 0x9705, 0xEB90, 0x9706, 0xF6AA, - 0x9707, 0xD5F0, 0x9708, 0xF6AC, 0x9709, 0xC3B9, 0x970A, 0xEB91, - 0x970B, 0xEB92, 0x970C, 0xEB93, 0x970D, 0xBBF4, 0x970E, 0xF6AE, - 0x970F, 0xF6AD, 0x9710, 0xEB94, 0x9711, 0xEB95, 0x9712, 0xEB96, - 0x9713, 0xC4DE, 0x9714, 0xEB97, 0x9715, 0xEB98, 0x9716, 0xC1D8, - 0x9717, 0xEB99, 0x9718, 0xEB9A, 0x9719, 0xEB9B, 0x971A, 0xEB9C, - 0x971B, 0xEB9D, 0x971C, 0xCBAA, 0x971D, 0xEB9E, 0x971E, 0xCFBC, - 0x971F, 0xEB9F, 0x9720, 0xEBA0, 0x9721, 0xEC40, 0x9722, 0xEC41, - 0x9723, 0xEC42, 0x9724, 0xEC43, 0x9725, 0xEC44, 0x9726, 0xEC45, - 0x9727, 0xEC46, 0x9728, 0xEC47, 0x9729, 0xEC48, 0x972A, 0xF6AF, - 0x972B, 0xEC49, 0x972C, 0xEC4A, 0x972D, 0xF6B0, 0x972E, 0xEC4B, - 0x972F, 0xEC4C, 0x9730, 0xF6B1, 0x9731, 0xEC4D, 0x9732, 0xC2B6, - 0x9733, 0xEC4E, 0x9734, 0xEC4F, 0x9735, 0xEC50, 0x9736, 0xEC51, - 0x9737, 0xEC52, 0x9738, 0xB0D4, 0x9739, 0xC5F9, 0x973A, 0xEC53, - 0x973B, 0xEC54, 0x973C, 0xEC55, 0x973D, 0xEC56, 0x973E, 0xF6B2, - 0x973F, 0xEC57, 0x9740, 0xEC58, 0x9741, 0xEC59, 0x9742, 0xEC5A, - 0x9743, 0xEC5B, 0x9744, 0xEC5C, 0x9745, 0xEC5D, 0x9746, 0xEC5E, - 0x9747, 0xEC5F, 0x9748, 0xEC60, 0x9749, 0xEC61, 0x974A, 0xEC62, - 0x974B, 0xEC63, 0x974C, 0xEC64, 0x974D, 0xEC65, 0x974E, 0xEC66, - 0x974F, 0xEC67, 0x9750, 0xEC68, 0x9751, 0xEC69, 0x9752, 0xC7E0, - 0x9753, 0xF6A6, 0x9754, 0xEC6A, 0x9755, 0xEC6B, 0x9756, 0xBEB8, - 0x9757, 0xEC6C, 0x9758, 0xEC6D, 0x9759, 0xBEB2, 0x975A, 0xEC6E, - 0x975B, 0xB5E5, 0x975C, 0xEC6F, 0x975D, 0xEC70, 0x975E, 0xB7C7, - 0x975F, 0xEC71, 0x9760, 0xBFBF, 0x9761, 0xC3D2, 0x9762, 0xC3E6, - 0x9763, 0xEC72, 0x9764, 0xEC73, 0x9765, 0xD8CC, 0x9766, 0xEC74, - 0x9767, 0xEC75, 0x9768, 0xEC76, 0x9769, 0xB8EF, 0x976A, 0xEC77, - 0x976B, 0xEC78, 0x976C, 0xEC79, 0x976D, 0xEC7A, 0x976E, 0xEC7B, - 0x976F, 0xEC7C, 0x9770, 0xEC7D, 0x9771, 0xEC7E, 0x9772, 0xEC80, - 0x9773, 0xBDF9, 0x9774, 0xD1A5, 0x9775, 0xEC81, 0x9776, 0xB0D0, - 0x9777, 0xEC82, 0x9778, 0xEC83, 0x9779, 0xEC84, 0x977A, 0xEC85, - 0x977B, 0xEC86, 0x977C, 0xF7B0, 0x977D, 0xEC87, 0x977E, 0xEC88, - 0x977F, 0xEC89, 0x9780, 0xEC8A, 0x9781, 0xEC8B, 0x9782, 0xEC8C, - 0x9783, 0xEC8D, 0x9784, 0xEC8E, 0x9785, 0xF7B1, 0x9786, 0xEC8F, - 0x9787, 0xEC90, 0x9788, 0xEC91, 0x9789, 0xEC92, 0x978A, 0xEC93, - 0x978B, 0xD0AC, 0x978C, 0xEC94, 0x978D, 0xB0B0, 0x978E, 0xEC95, - 0x978F, 0xEC96, 0x9790, 0xEC97, 0x9791, 0xF7B2, 0x9792, 0xF7B3, - 0x9793, 0xEC98, 0x9794, 0xF7B4, 0x9795, 0xEC99, 0x9796, 0xEC9A, - 0x9797, 0xEC9B, 0x9798, 0xC7CA, 0x9799, 0xEC9C, 0x979A, 0xEC9D, - 0x979B, 0xEC9E, 0x979C, 0xEC9F, 0x979D, 0xECA0, 0x979E, 0xED40, - 0x979F, 0xED41, 0x97A0, 0xBECF, 0x97A1, 0xED42, 0x97A2, 0xED43, - 0x97A3, 0xF7B7, 0x97A4, 0xED44, 0x97A5, 0xED45, 0x97A6, 0xED46, - 0x97A7, 0xED47, 0x97A8, 0xED48, 0x97A9, 0xED49, 0x97AA, 0xED4A, - 0x97AB, 0xF7B6, 0x97AC, 0xED4B, 0x97AD, 0xB1DE, 0x97AE, 0xED4C, - 0x97AF, 0xF7B5, 0x97B0, 0xED4D, 0x97B1, 0xED4E, 0x97B2, 0xF7B8, - 0x97B3, 0xED4F, 0x97B4, 0xF7B9, 0x97B5, 0xED50, 0x97B6, 0xED51, - 0x97B7, 0xED52, 0x97B8, 0xED53, 0x97B9, 0xED54, 0x97BA, 0xED55, - 0x97BB, 0xED56, 0x97BC, 0xED57, 0x97BD, 0xED58, 0x97BE, 0xED59, - 0x97BF, 0xED5A, 0x97C0, 0xED5B, 0x97C1, 0xED5C, 0x97C2, 0xED5D, - 0x97C3, 0xED5E, 0x97C4, 0xED5F, 0x97C5, 0xED60, 0x97C6, 0xED61, - 0x97C7, 0xED62, 0x97C8, 0xED63, 0x97C9, 0xED64, 0x97CA, 0xED65, - 0x97CB, 0xED66, 0x97CC, 0xED67, 0x97CD, 0xED68, 0x97CE, 0xED69, - 0x97CF, 0xED6A, 0x97D0, 0xED6B, 0x97D1, 0xED6C, 0x97D2, 0xED6D, - 0x97D3, 0xED6E, 0x97D4, 0xED6F, 0x97D5, 0xED70, 0x97D6, 0xED71, - 0x97D7, 0xED72, 0x97D8, 0xED73, 0x97D9, 0xED74, 0x97DA, 0xED75, - 0x97DB, 0xED76, 0x97DC, 0xED77, 0x97DD, 0xED78, 0x97DE, 0xED79, - 0x97DF, 0xED7A, 0x97E0, 0xED7B, 0x97E1, 0xED7C, 0x97E2, 0xED7D, - 0x97E3, 0xED7E, 0x97E4, 0xED80, 0x97E5, 0xED81, 0x97E6, 0xCEA4, - 0x97E7, 0xC8CD, 0x97E8, 0xED82, 0x97E9, 0xBAAB, 0x97EA, 0xE8B8, - 0x97EB, 0xE8B9, 0x97EC, 0xE8BA, 0x97ED, 0xBEC2, 0x97EE, 0xED83, - 0x97EF, 0xED84, 0x97F0, 0xED85, 0x97F1, 0xED86, 0x97F2, 0xED87, - 0x97F3, 0xD2F4, 0x97F4, 0xED88, 0x97F5, 0xD4CF, 0x97F6, 0xC9D8, - 0x97F7, 0xED89, 0x97F8, 0xED8A, 0x97F9, 0xED8B, 0x97FA, 0xED8C, - 0x97FB, 0xED8D, 0x97FC, 0xED8E, 0x97FD, 0xED8F, 0x97FE, 0xED90, - 0x97FF, 0xED91, 0x9800, 0xED92, 0x9801, 0xED93, 0x9802, 0xED94, - 0x9803, 0xED95, 0x9804, 0xED96, 0x9805, 0xED97, 0x9806, 0xED98, - 0x9807, 0xED99, 0x9808, 0xED9A, 0x9809, 0xED9B, 0x980A, 0xED9C, - 0x980B, 0xED9D, 0x980C, 0xED9E, 0x980D, 0xED9F, 0x980E, 0xEDA0, - 0x980F, 0xEE40, 0x9810, 0xEE41, 0x9811, 0xEE42, 0x9812, 0xEE43, - 0x9813, 0xEE44, 0x9814, 0xEE45, 0x9815, 0xEE46, 0x9816, 0xEE47, - 0x9817, 0xEE48, 0x9818, 0xEE49, 0x9819, 0xEE4A, 0x981A, 0xEE4B, - 0x981B, 0xEE4C, 0x981C, 0xEE4D, 0x981D, 0xEE4E, 0x981E, 0xEE4F, - 0x981F, 0xEE50, 0x9820, 0xEE51, 0x9821, 0xEE52, 0x9822, 0xEE53, - 0x9823, 0xEE54, 0x9824, 0xEE55, 0x9825, 0xEE56, 0x9826, 0xEE57, - 0x9827, 0xEE58, 0x9828, 0xEE59, 0x9829, 0xEE5A, 0x982A, 0xEE5B, - 0x982B, 0xEE5C, 0x982C, 0xEE5D, 0x982D, 0xEE5E, 0x982E, 0xEE5F, - 0x982F, 0xEE60, 0x9830, 0xEE61, 0x9831, 0xEE62, 0x9832, 0xEE63, - 0x9833, 0xEE64, 0x9834, 0xEE65, 0x9835, 0xEE66, 0x9836, 0xEE67, - 0x9837, 0xEE68, 0x9838, 0xEE69, 0x9839, 0xEE6A, 0x983A, 0xEE6B, - 0x983B, 0xEE6C, 0x983C, 0xEE6D, 0x983D, 0xEE6E, 0x983E, 0xEE6F, - 0x983F, 0xEE70, 0x9840, 0xEE71, 0x9841, 0xEE72, 0x9842, 0xEE73, - 0x9843, 0xEE74, 0x9844, 0xEE75, 0x9845, 0xEE76, 0x9846, 0xEE77, - 0x9847, 0xEE78, 0x9848, 0xEE79, 0x9849, 0xEE7A, 0x984A, 0xEE7B, - 0x984B, 0xEE7C, 0x984C, 0xEE7D, 0x984D, 0xEE7E, 0x984E, 0xEE80, - 0x984F, 0xEE81, 0x9850, 0xEE82, 0x9851, 0xEE83, 0x9852, 0xEE84, - 0x9853, 0xEE85, 0x9854, 0xEE86, 0x9855, 0xEE87, 0x9856, 0xEE88, - 0x9857, 0xEE89, 0x9858, 0xEE8A, 0x9859, 0xEE8B, 0x985A, 0xEE8C, - 0x985B, 0xEE8D, 0x985C, 0xEE8E, 0x985D, 0xEE8F, 0x985E, 0xEE90, - 0x985F, 0xEE91, 0x9860, 0xEE92, 0x9861, 0xEE93, 0x9862, 0xEE94, - 0x9863, 0xEE95, 0x9864, 0xEE96, 0x9865, 0xEE97, 0x9866, 0xEE98, - 0x9867, 0xEE99, 0x9868, 0xEE9A, 0x9869, 0xEE9B, 0x986A, 0xEE9C, - 0x986B, 0xEE9D, 0x986C, 0xEE9E, 0x986D, 0xEE9F, 0x986E, 0xEEA0, - 0x986F, 0xEF40, 0x9870, 0xEF41, 0x9871, 0xEF42, 0x9872, 0xEF43, - 0x9873, 0xEF44, 0x9874, 0xEF45, 0x9875, 0xD2B3, 0x9876, 0xB6A5, - 0x9877, 0xC7EA, 0x9878, 0xF1FC, 0x9879, 0xCFEE, 0x987A, 0xCBB3, - 0x987B, 0xD0EB, 0x987C, 0xE7EF, 0x987D, 0xCDE7, 0x987E, 0xB9CB, - 0x987F, 0xB6D9, 0x9880, 0xF1FD, 0x9881, 0xB0E4, 0x9882, 0xCBCC, - 0x9883, 0xF1FE, 0x9884, 0xD4A4, 0x9885, 0xC2AD, 0x9886, 0xC1EC, - 0x9887, 0xC6C4, 0x9888, 0xBEB1, 0x9889, 0xF2A1, 0x988A, 0xBCD5, - 0x988B, 0xEF46, 0x988C, 0xF2A2, 0x988D, 0xF2A3, 0x988E, 0xEF47, - 0x988F, 0xF2A4, 0x9890, 0xD2C3, 0x9891, 0xC6B5, 0x9892, 0xEF48, - 0x9893, 0xCDC7, 0x9894, 0xF2A5, 0x9895, 0xEF49, 0x9896, 0xD3B1, - 0x9897, 0xBFC5, 0x9898, 0xCCE2, 0x9899, 0xEF4A, 0x989A, 0xF2A6, - 0x989B, 0xF2A7, 0x989C, 0xD1D5, 0x989D, 0xB6EE, 0x989E, 0xF2A8, - 0x989F, 0xF2A9, 0x98A0, 0xB5DF, 0x98A1, 0xF2AA, 0x98A2, 0xF2AB, - 0x98A3, 0xEF4B, 0x98A4, 0xB2FC, 0x98A5, 0xF2AC, 0x98A6, 0xF2AD, - 0x98A7, 0xC8A7, 0x98A8, 0xEF4C, 0x98A9, 0xEF4D, 0x98AA, 0xEF4E, - 0x98AB, 0xEF4F, 0x98AC, 0xEF50, 0x98AD, 0xEF51, 0x98AE, 0xEF52, - 0x98AF, 0xEF53, 0x98B0, 0xEF54, 0x98B1, 0xEF55, 0x98B2, 0xEF56, - 0x98B3, 0xEF57, 0x98B4, 0xEF58, 0x98B5, 0xEF59, 0x98B6, 0xEF5A, - 0x98B7, 0xEF5B, 0x98B8, 0xEF5C, 0x98B9, 0xEF5D, 0x98BA, 0xEF5E, - 0x98BB, 0xEF5F, 0x98BC, 0xEF60, 0x98BD, 0xEF61, 0x98BE, 0xEF62, - 0x98BF, 0xEF63, 0x98C0, 0xEF64, 0x98C1, 0xEF65, 0x98C2, 0xEF66, - 0x98C3, 0xEF67, 0x98C4, 0xEF68, 0x98C5, 0xEF69, 0x98C6, 0xEF6A, - 0x98C7, 0xEF6B, 0x98C8, 0xEF6C, 0x98C9, 0xEF6D, 0x98CA, 0xEF6E, - 0x98CB, 0xEF6F, 0x98CC, 0xEF70, 0x98CD, 0xEF71, 0x98CE, 0xB7E7, - 0x98CF, 0xEF72, 0x98D0, 0xEF73, 0x98D1, 0xECA9, 0x98D2, 0xECAA, - 0x98D3, 0xECAB, 0x98D4, 0xEF74, 0x98D5, 0xECAC, 0x98D6, 0xEF75, - 0x98D7, 0xEF76, 0x98D8, 0xC6AE, 0x98D9, 0xECAD, 0x98DA, 0xECAE, - 0x98DB, 0xEF77, 0x98DC, 0xEF78, 0x98DD, 0xEF79, 0x98DE, 0xB7C9, - 0x98DF, 0xCAB3, 0x98E0, 0xEF7A, 0x98E1, 0xEF7B, 0x98E2, 0xEF7C, - 0x98E3, 0xEF7D, 0x98E4, 0xEF7E, 0x98E5, 0xEF80, 0x98E6, 0xEF81, - 0x98E7, 0xE2B8, 0x98E8, 0xF7CF, 0x98E9, 0xEF82, 0x98EA, 0xEF83, - 0x98EB, 0xEF84, 0x98EC, 0xEF85, 0x98ED, 0xEF86, 0x98EE, 0xEF87, - 0x98EF, 0xEF88, 0x98F0, 0xEF89, 0x98F1, 0xEF8A, 0x98F2, 0xEF8B, - 0x98F3, 0xEF8C, 0x98F4, 0xEF8D, 0x98F5, 0xEF8E, 0x98F6, 0xEF8F, - 0x98F7, 0xEF90, 0x98F8, 0xEF91, 0x98F9, 0xEF92, 0x98FA, 0xEF93, - 0x98FB, 0xEF94, 0x98FC, 0xEF95, 0x98FD, 0xEF96, 0x98FE, 0xEF97, - 0x98FF, 0xEF98, 0x9900, 0xEF99, 0x9901, 0xEF9A, 0x9902, 0xEF9B, - 0x9903, 0xEF9C, 0x9904, 0xEF9D, 0x9905, 0xEF9E, 0x9906, 0xEF9F, - 0x9907, 0xEFA0, 0x9908, 0xF040, 0x9909, 0xF041, 0x990A, 0xF042, - 0x990B, 0xF043, 0x990C, 0xF044, 0x990D, 0xF7D0, 0x990E, 0xF045, - 0x990F, 0xF046, 0x9910, 0xB2CD, 0x9911, 0xF047, 0x9912, 0xF048, - 0x9913, 0xF049, 0x9914, 0xF04A, 0x9915, 0xF04B, 0x9916, 0xF04C, - 0x9917, 0xF04D, 0x9918, 0xF04E, 0x9919, 0xF04F, 0x991A, 0xF050, - 0x991B, 0xF051, 0x991C, 0xF052, 0x991D, 0xF053, 0x991E, 0xF054, - 0x991F, 0xF055, 0x9920, 0xF056, 0x9921, 0xF057, 0x9922, 0xF058, - 0x9923, 0xF059, 0x9924, 0xF05A, 0x9925, 0xF05B, 0x9926, 0xF05C, - 0x9927, 0xF05D, 0x9928, 0xF05E, 0x9929, 0xF05F, 0x992A, 0xF060, - 0x992B, 0xF061, 0x992C, 0xF062, 0x992D, 0xF063, 0x992E, 0xF7D1, - 0x992F, 0xF064, 0x9930, 0xF065, 0x9931, 0xF066, 0x9932, 0xF067, - 0x9933, 0xF068, 0x9934, 0xF069, 0x9935, 0xF06A, 0x9936, 0xF06B, - 0x9937, 0xF06C, 0x9938, 0xF06D, 0x9939, 0xF06E, 0x993A, 0xF06F, - 0x993B, 0xF070, 0x993C, 0xF071, 0x993D, 0xF072, 0x993E, 0xF073, - 0x993F, 0xF074, 0x9940, 0xF075, 0x9941, 0xF076, 0x9942, 0xF077, - 0x9943, 0xF078, 0x9944, 0xF079, 0x9945, 0xF07A, 0x9946, 0xF07B, - 0x9947, 0xF07C, 0x9948, 0xF07D, 0x9949, 0xF07E, 0x994A, 0xF080, - 0x994B, 0xF081, 0x994C, 0xF082, 0x994D, 0xF083, 0x994E, 0xF084, - 0x994F, 0xF085, 0x9950, 0xF086, 0x9951, 0xF087, 0x9952, 0xF088, - 0x9953, 0xF089, 0x9954, 0xF7D3, 0x9955, 0xF7D2, 0x9956, 0xF08A, - 0x9957, 0xF08B, 0x9958, 0xF08C, 0x9959, 0xF08D, 0x995A, 0xF08E, - 0x995B, 0xF08F, 0x995C, 0xF090, 0x995D, 0xF091, 0x995E, 0xF092, - 0x995F, 0xF093, 0x9960, 0xF094, 0x9961, 0xF095, 0x9962, 0xF096, - 0x9963, 0xE2BB, 0x9964, 0xF097, 0x9965, 0xBCA2, 0x9966, 0xF098, - 0x9967, 0xE2BC, 0x9968, 0xE2BD, 0x9969, 0xE2BE, 0x996A, 0xE2BF, - 0x996B, 0xE2C0, 0x996C, 0xE2C1, 0x996D, 0xB7B9, 0x996E, 0xD2FB, - 0x996F, 0xBDA4, 0x9970, 0xCACE, 0x9971, 0xB1A5, 0x9972, 0xCBC7, - 0x9973, 0xF099, 0x9974, 0xE2C2, 0x9975, 0xB6FC, 0x9976, 0xC8C4, - 0x9977, 0xE2C3, 0x9978, 0xF09A, 0x9979, 0xF09B, 0x997A, 0xBDC8, - 0x997B, 0xF09C, 0x997C, 0xB1FD, 0x997D, 0xE2C4, 0x997E, 0xF09D, - 0x997F, 0xB6F6, 0x9980, 0xE2C5, 0x9981, 0xC4D9, 0x9982, 0xF09E, - 0x9983, 0xF09F, 0x9984, 0xE2C6, 0x9985, 0xCFDA, 0x9986, 0xB9DD, - 0x9987, 0xE2C7, 0x9988, 0xC0A1, 0x9989, 0xF0A0, 0x998A, 0xE2C8, - 0x998B, 0xB2F6, 0x998C, 0xF140, 0x998D, 0xE2C9, 0x998E, 0xF141, - 0x998F, 0xC1F3, 0x9990, 0xE2CA, 0x9991, 0xE2CB, 0x9992, 0xC2F8, - 0x9993, 0xE2CC, 0x9994, 0xE2CD, 0x9995, 0xE2CE, 0x9996, 0xCAD7, - 0x9997, 0xD8B8, 0x9998, 0xD9E5, 0x9999, 0xCFE3, 0x999A, 0xF142, - 0x999B, 0xF143, 0x999C, 0xF144, 0x999D, 0xF145, 0x999E, 0xF146, - 0x999F, 0xF147, 0x99A0, 0xF148, 0x99A1, 0xF149, 0x99A2, 0xF14A, - 0x99A3, 0xF14B, 0x99A4, 0xF14C, 0x99A5, 0xF0A5, 0x99A6, 0xF14D, - 0x99A7, 0xF14E, 0x99A8, 0xDCB0, 0x99A9, 0xF14F, 0x99AA, 0xF150, - 0x99AB, 0xF151, 0x99AC, 0xF152, 0x99AD, 0xF153, 0x99AE, 0xF154, - 0x99AF, 0xF155, 0x99B0, 0xF156, 0x99B1, 0xF157, 0x99B2, 0xF158, - 0x99B3, 0xF159, 0x99B4, 0xF15A, 0x99B5, 0xF15B, 0x99B6, 0xF15C, - 0x99B7, 0xF15D, 0x99B8, 0xF15E, 0x99B9, 0xF15F, 0x99BA, 0xF160, - 0x99BB, 0xF161, 0x99BC, 0xF162, 0x99BD, 0xF163, 0x99BE, 0xF164, - 0x99BF, 0xF165, 0x99C0, 0xF166, 0x99C1, 0xF167, 0x99C2, 0xF168, - 0x99C3, 0xF169, 0x99C4, 0xF16A, 0x99C5, 0xF16B, 0x99C6, 0xF16C, - 0x99C7, 0xF16D, 0x99C8, 0xF16E, 0x99C9, 0xF16F, 0x99CA, 0xF170, - 0x99CB, 0xF171, 0x99CC, 0xF172, 0x99CD, 0xF173, 0x99CE, 0xF174, - 0x99CF, 0xF175, 0x99D0, 0xF176, 0x99D1, 0xF177, 0x99D2, 0xF178, - 0x99D3, 0xF179, 0x99D4, 0xF17A, 0x99D5, 0xF17B, 0x99D6, 0xF17C, - 0x99D7, 0xF17D, 0x99D8, 0xF17E, 0x99D9, 0xF180, 0x99DA, 0xF181, - 0x99DB, 0xF182, 0x99DC, 0xF183, 0x99DD, 0xF184, 0x99DE, 0xF185, - 0x99DF, 0xF186, 0x99E0, 0xF187, 0x99E1, 0xF188, 0x99E2, 0xF189, - 0x99E3, 0xF18A, 0x99E4, 0xF18B, 0x99E5, 0xF18C, 0x99E6, 0xF18D, - 0x99E7, 0xF18E, 0x99E8, 0xF18F, 0x99E9, 0xF190, 0x99EA, 0xF191, - 0x99EB, 0xF192, 0x99EC, 0xF193, 0x99ED, 0xF194, 0x99EE, 0xF195, - 0x99EF, 0xF196, 0x99F0, 0xF197, 0x99F1, 0xF198, 0x99F2, 0xF199, - 0x99F3, 0xF19A, 0x99F4, 0xF19B, 0x99F5, 0xF19C, 0x99F6, 0xF19D, - 0x99F7, 0xF19E, 0x99F8, 0xF19F, 0x99F9, 0xF1A0, 0x99FA, 0xF240, - 0x99FB, 0xF241, 0x99FC, 0xF242, 0x99FD, 0xF243, 0x99FE, 0xF244, - 0x99FF, 0xF245, 0x9A00, 0xF246, 0x9A01, 0xF247, 0x9A02, 0xF248, - 0x9A03, 0xF249, 0x9A04, 0xF24A, 0x9A05, 0xF24B, 0x9A06, 0xF24C, - 0x9A07, 0xF24D, 0x9A08, 0xF24E, 0x9A09, 0xF24F, 0x9A0A, 0xF250, - 0x9A0B, 0xF251, 0x9A0C, 0xF252, 0x9A0D, 0xF253, 0x9A0E, 0xF254, - 0x9A0F, 0xF255, 0x9A10, 0xF256, 0x9A11, 0xF257, 0x9A12, 0xF258, - 0x9A13, 0xF259, 0x9A14, 0xF25A, 0x9A15, 0xF25B, 0x9A16, 0xF25C, - 0x9A17, 0xF25D, 0x9A18, 0xF25E, 0x9A19, 0xF25F, 0x9A1A, 0xF260, - 0x9A1B, 0xF261, 0x9A1C, 0xF262, 0x9A1D, 0xF263, 0x9A1E, 0xF264, - 0x9A1F, 0xF265, 0x9A20, 0xF266, 0x9A21, 0xF267, 0x9A22, 0xF268, - 0x9A23, 0xF269, 0x9A24, 0xF26A, 0x9A25, 0xF26B, 0x9A26, 0xF26C, - 0x9A27, 0xF26D, 0x9A28, 0xF26E, 0x9A29, 0xF26F, 0x9A2A, 0xF270, - 0x9A2B, 0xF271, 0x9A2C, 0xF272, 0x9A2D, 0xF273, 0x9A2E, 0xF274, - 0x9A2F, 0xF275, 0x9A30, 0xF276, 0x9A31, 0xF277, 0x9A32, 0xF278, - 0x9A33, 0xF279, 0x9A34, 0xF27A, 0x9A35, 0xF27B, 0x9A36, 0xF27C, - 0x9A37, 0xF27D, 0x9A38, 0xF27E, 0x9A39, 0xF280, 0x9A3A, 0xF281, - 0x9A3B, 0xF282, 0x9A3C, 0xF283, 0x9A3D, 0xF284, 0x9A3E, 0xF285, - 0x9A3F, 0xF286, 0x9A40, 0xF287, 0x9A41, 0xF288, 0x9A42, 0xF289, - 0x9A43, 0xF28A, 0x9A44, 0xF28B, 0x9A45, 0xF28C, 0x9A46, 0xF28D, - 0x9A47, 0xF28E, 0x9A48, 0xF28F, 0x9A49, 0xF290, 0x9A4A, 0xF291, - 0x9A4B, 0xF292, 0x9A4C, 0xF293, 0x9A4D, 0xF294, 0x9A4E, 0xF295, - 0x9A4F, 0xF296, 0x9A50, 0xF297, 0x9A51, 0xF298, 0x9A52, 0xF299, - 0x9A53, 0xF29A, 0x9A54, 0xF29B, 0x9A55, 0xF29C, 0x9A56, 0xF29D, - 0x9A57, 0xF29E, 0x9A58, 0xF29F, 0x9A59, 0xF2A0, 0x9A5A, 0xF340, - 0x9A5B, 0xF341, 0x9A5C, 0xF342, 0x9A5D, 0xF343, 0x9A5E, 0xF344, - 0x9A5F, 0xF345, 0x9A60, 0xF346, 0x9A61, 0xF347, 0x9A62, 0xF348, - 0x9A63, 0xF349, 0x9A64, 0xF34A, 0x9A65, 0xF34B, 0x9A66, 0xF34C, - 0x9A67, 0xF34D, 0x9A68, 0xF34E, 0x9A69, 0xF34F, 0x9A6A, 0xF350, - 0x9A6B, 0xF351, 0x9A6C, 0xC2ED, 0x9A6D, 0xD4A6, 0x9A6E, 0xCDD4, - 0x9A6F, 0xD1B1, 0x9A70, 0xB3DB, 0x9A71, 0xC7FD, 0x9A72, 0xF352, - 0x9A73, 0xB2B5, 0x9A74, 0xC2BF, 0x9A75, 0xE6E0, 0x9A76, 0xCABB, - 0x9A77, 0xE6E1, 0x9A78, 0xE6E2, 0x9A79, 0xBED4, 0x9A7A, 0xE6E3, - 0x9A7B, 0xD7A4, 0x9A7C, 0xCDD5, 0x9A7D, 0xE6E5, 0x9A7E, 0xBCDD, - 0x9A7F, 0xE6E4, 0x9A80, 0xE6E6, 0x9A81, 0xE6E7, 0x9A82, 0xC2EE, - 0x9A83, 0xF353, 0x9A84, 0xBDBE, 0x9A85, 0xE6E8, 0x9A86, 0xC2E6, - 0x9A87, 0xBAA7, 0x9A88, 0xE6E9, 0x9A89, 0xF354, 0x9A8A, 0xE6EA, - 0x9A8B, 0xB3D2, 0x9A8C, 0xD1E9, 0x9A8D, 0xF355, 0x9A8E, 0xF356, - 0x9A8F, 0xBFA5, 0x9A90, 0xE6EB, 0x9A91, 0xC6EF, 0x9A92, 0xE6EC, - 0x9A93, 0xE6ED, 0x9A94, 0xF357, 0x9A95, 0xF358, 0x9A96, 0xE6EE, - 0x9A97, 0xC6AD, 0x9A98, 0xE6EF, 0x9A99, 0xF359, 0x9A9A, 0xC9A7, - 0x9A9B, 0xE6F0, 0x9A9C, 0xE6F1, 0x9A9D, 0xE6F2, 0x9A9E, 0xE5B9, - 0x9A9F, 0xE6F3, 0x9AA0, 0xE6F4, 0x9AA1, 0xC2E2, 0x9AA2, 0xE6F5, - 0x9AA3, 0xE6F6, 0x9AA4, 0xD6E8, 0x9AA5, 0xE6F7, 0x9AA6, 0xF35A, - 0x9AA7, 0xE6F8, 0x9AA8, 0xB9C7, 0x9AA9, 0xF35B, 0x9AAA, 0xF35C, - 0x9AAB, 0xF35D, 0x9AAC, 0xF35E, 0x9AAD, 0xF35F, 0x9AAE, 0xF360, - 0x9AAF, 0xF361, 0x9AB0, 0xF7BB, 0x9AB1, 0xF7BA, 0x9AB2, 0xF362, - 0x9AB3, 0xF363, 0x9AB4, 0xF364, 0x9AB5, 0xF365, 0x9AB6, 0xF7BE, - 0x9AB7, 0xF7BC, 0x9AB8, 0xBAA1, 0x9AB9, 0xF366, 0x9ABA, 0xF7BF, - 0x9ABB, 0xF367, 0x9ABC, 0xF7C0, 0x9ABD, 0xF368, 0x9ABE, 0xF369, - 0x9ABF, 0xF36A, 0x9AC0, 0xF7C2, 0x9AC1, 0xF7C1, 0x9AC2, 0xF7C4, - 0x9AC3, 0xF36B, 0x9AC4, 0xF36C, 0x9AC5, 0xF7C3, 0x9AC6, 0xF36D, - 0x9AC7, 0xF36E, 0x9AC8, 0xF36F, 0x9AC9, 0xF370, 0x9ACA, 0xF371, - 0x9ACB, 0xF7C5, 0x9ACC, 0xF7C6, 0x9ACD, 0xF372, 0x9ACE, 0xF373, - 0x9ACF, 0xF374, 0x9AD0, 0xF375, 0x9AD1, 0xF7C7, 0x9AD2, 0xF376, - 0x9AD3, 0xCBE8, 0x9AD4, 0xF377, 0x9AD5, 0xF378, 0x9AD6, 0xF379, - 0x9AD7, 0xF37A, 0x9AD8, 0xB8DF, 0x9AD9, 0xF37B, 0x9ADA, 0xF37C, - 0x9ADB, 0xF37D, 0x9ADC, 0xF37E, 0x9ADD, 0xF380, 0x9ADE, 0xF381, - 0x9ADF, 0xF7D4, 0x9AE0, 0xF382, 0x9AE1, 0xF7D5, 0x9AE2, 0xF383, - 0x9AE3, 0xF384, 0x9AE4, 0xF385, 0x9AE5, 0xF386, 0x9AE6, 0xF7D6, - 0x9AE7, 0xF387, 0x9AE8, 0xF388, 0x9AE9, 0xF389, 0x9AEA, 0xF38A, - 0x9AEB, 0xF7D8, 0x9AEC, 0xF38B, 0x9AED, 0xF7DA, 0x9AEE, 0xF38C, - 0x9AEF, 0xF7D7, 0x9AF0, 0xF38D, 0x9AF1, 0xF38E, 0x9AF2, 0xF38F, - 0x9AF3, 0xF390, 0x9AF4, 0xF391, 0x9AF5, 0xF392, 0x9AF6, 0xF393, - 0x9AF7, 0xF394, 0x9AF8, 0xF395, 0x9AF9, 0xF7DB, 0x9AFA, 0xF396, - 0x9AFB, 0xF7D9, 0x9AFC, 0xF397, 0x9AFD, 0xF398, 0x9AFE, 0xF399, - 0x9AFF, 0xF39A, 0x9B00, 0xF39B, 0x9B01, 0xF39C, 0x9B02, 0xF39D, - 0x9B03, 0xD7D7, 0x9B04, 0xF39E, 0x9B05, 0xF39F, 0x9B06, 0xF3A0, - 0x9B07, 0xF440, 0x9B08, 0xF7DC, 0x9B09, 0xF441, 0x9B0A, 0xF442, - 0x9B0B, 0xF443, 0x9B0C, 0xF444, 0x9B0D, 0xF445, 0x9B0E, 0xF446, - 0x9B0F, 0xF7DD, 0x9B10, 0xF447, 0x9B11, 0xF448, 0x9B12, 0xF449, - 0x9B13, 0xF7DE, 0x9B14, 0xF44A, 0x9B15, 0xF44B, 0x9B16, 0xF44C, - 0x9B17, 0xF44D, 0x9B18, 0xF44E, 0x9B19, 0xF44F, 0x9B1A, 0xF450, - 0x9B1B, 0xF451, 0x9B1C, 0xF452, 0x9B1D, 0xF453, 0x9B1E, 0xF454, - 0x9B1F, 0xF7DF, 0x9B20, 0xF455, 0x9B21, 0xF456, 0x9B22, 0xF457, - 0x9B23, 0xF7E0, 0x9B24, 0xF458, 0x9B25, 0xF459, 0x9B26, 0xF45A, - 0x9B27, 0xF45B, 0x9B28, 0xF45C, 0x9B29, 0xF45D, 0x9B2A, 0xF45E, - 0x9B2B, 0xF45F, 0x9B2C, 0xF460, 0x9B2D, 0xF461, 0x9B2E, 0xF462, - 0x9B2F, 0xDBCB, 0x9B30, 0xF463, 0x9B31, 0xF464, 0x9B32, 0xD8AA, - 0x9B33, 0xF465, 0x9B34, 0xF466, 0x9B35, 0xF467, 0x9B36, 0xF468, - 0x9B37, 0xF469, 0x9B38, 0xF46A, 0x9B39, 0xF46B, 0x9B3A, 0xF46C, - 0x9B3B, 0xE5F7, 0x9B3C, 0xB9ED, 0x9B3D, 0xF46D, 0x9B3E, 0xF46E, - 0x9B3F, 0xF46F, 0x9B40, 0xF470, 0x9B41, 0xBFFD, 0x9B42, 0xBBEA, - 0x9B43, 0xF7C9, 0x9B44, 0xC6C7, 0x9B45, 0xF7C8, 0x9B46, 0xF471, - 0x9B47, 0xF7CA, 0x9B48, 0xF7CC, 0x9B49, 0xF7CB, 0x9B4A, 0xF472, - 0x9B4B, 0xF473, 0x9B4C, 0xF474, 0x9B4D, 0xF7CD, 0x9B4E, 0xF475, - 0x9B4F, 0xCEBA, 0x9B50, 0xF476, 0x9B51, 0xF7CE, 0x9B52, 0xF477, - 0x9B53, 0xF478, 0x9B54, 0xC4A7, 0x9B55, 0xF479, 0x9B56, 0xF47A, - 0x9B57, 0xF47B, 0x9B58, 0xF47C, 0x9B59, 0xF47D, 0x9B5A, 0xF47E, - 0x9B5B, 0xF480, 0x9B5C, 0xF481, 0x9B5D, 0xF482, 0x9B5E, 0xF483, - 0x9B5F, 0xF484, 0x9B60, 0xF485, 0x9B61, 0xF486, 0x9B62, 0xF487, - 0x9B63, 0xF488, 0x9B64, 0xF489, 0x9B65, 0xF48A, 0x9B66, 0xF48B, - 0x9B67, 0xF48C, 0x9B68, 0xF48D, 0x9B69, 0xF48E, 0x9B6A, 0xF48F, - 0x9B6B, 0xF490, 0x9B6C, 0xF491, 0x9B6D, 0xF492, 0x9B6E, 0xF493, - 0x9B6F, 0xF494, 0x9B70, 0xF495, 0x9B71, 0xF496, 0x9B72, 0xF497, - 0x9B73, 0xF498, 0x9B74, 0xF499, 0x9B75, 0xF49A, 0x9B76, 0xF49B, - 0x9B77, 0xF49C, 0x9B78, 0xF49D, 0x9B79, 0xF49E, 0x9B7A, 0xF49F, - 0x9B7B, 0xF4A0, 0x9B7C, 0xF540, 0x9B7D, 0xF541, 0x9B7E, 0xF542, - 0x9B7F, 0xF543, 0x9B80, 0xF544, 0x9B81, 0xF545, 0x9B82, 0xF546, - 0x9B83, 0xF547, 0x9B84, 0xF548, 0x9B85, 0xF549, 0x9B86, 0xF54A, - 0x9B87, 0xF54B, 0x9B88, 0xF54C, 0x9B89, 0xF54D, 0x9B8A, 0xF54E, - 0x9B8B, 0xF54F, 0x9B8C, 0xF550, 0x9B8D, 0xF551, 0x9B8E, 0xF552, - 0x9B8F, 0xF553, 0x9B90, 0xF554, 0x9B91, 0xF555, 0x9B92, 0xF556, - 0x9B93, 0xF557, 0x9B94, 0xF558, 0x9B95, 0xF559, 0x9B96, 0xF55A, - 0x9B97, 0xF55B, 0x9B98, 0xF55C, 0x9B99, 0xF55D, 0x9B9A, 0xF55E, - 0x9B9B, 0xF55F, 0x9B9C, 0xF560, 0x9B9D, 0xF561, 0x9B9E, 0xF562, - 0x9B9F, 0xF563, 0x9BA0, 0xF564, 0x9BA1, 0xF565, 0x9BA2, 0xF566, - 0x9BA3, 0xF567, 0x9BA4, 0xF568, 0x9BA5, 0xF569, 0x9BA6, 0xF56A, - 0x9BA7, 0xF56B, 0x9BA8, 0xF56C, 0x9BA9, 0xF56D, 0x9BAA, 0xF56E, - 0x9BAB, 0xF56F, 0x9BAC, 0xF570, 0x9BAD, 0xF571, 0x9BAE, 0xF572, - 0x9BAF, 0xF573, 0x9BB0, 0xF574, 0x9BB1, 0xF575, 0x9BB2, 0xF576, - 0x9BB3, 0xF577, 0x9BB4, 0xF578, 0x9BB5, 0xF579, 0x9BB6, 0xF57A, - 0x9BB7, 0xF57B, 0x9BB8, 0xF57C, 0x9BB9, 0xF57D, 0x9BBA, 0xF57E, - 0x9BBB, 0xF580, 0x9BBC, 0xF581, 0x9BBD, 0xF582, 0x9BBE, 0xF583, - 0x9BBF, 0xF584, 0x9BC0, 0xF585, 0x9BC1, 0xF586, 0x9BC2, 0xF587, - 0x9BC3, 0xF588, 0x9BC4, 0xF589, 0x9BC5, 0xF58A, 0x9BC6, 0xF58B, - 0x9BC7, 0xF58C, 0x9BC8, 0xF58D, 0x9BC9, 0xF58E, 0x9BCA, 0xF58F, - 0x9BCB, 0xF590, 0x9BCC, 0xF591, 0x9BCD, 0xF592, 0x9BCE, 0xF593, - 0x9BCF, 0xF594, 0x9BD0, 0xF595, 0x9BD1, 0xF596, 0x9BD2, 0xF597, - 0x9BD3, 0xF598, 0x9BD4, 0xF599, 0x9BD5, 0xF59A, 0x9BD6, 0xF59B, - 0x9BD7, 0xF59C, 0x9BD8, 0xF59D, 0x9BD9, 0xF59E, 0x9BDA, 0xF59F, - 0x9BDB, 0xF5A0, 0x9BDC, 0xF640, 0x9BDD, 0xF641, 0x9BDE, 0xF642, - 0x9BDF, 0xF643, 0x9BE0, 0xF644, 0x9BE1, 0xF645, 0x9BE2, 0xF646, - 0x9BE3, 0xF647, 0x9BE4, 0xF648, 0x9BE5, 0xF649, 0x9BE6, 0xF64A, - 0x9BE7, 0xF64B, 0x9BE8, 0xF64C, 0x9BE9, 0xF64D, 0x9BEA, 0xF64E, - 0x9BEB, 0xF64F, 0x9BEC, 0xF650, 0x9BED, 0xF651, 0x9BEE, 0xF652, - 0x9BEF, 0xF653, 0x9BF0, 0xF654, 0x9BF1, 0xF655, 0x9BF2, 0xF656, - 0x9BF3, 0xF657, 0x9BF4, 0xF658, 0x9BF5, 0xF659, 0x9BF6, 0xF65A, - 0x9BF7, 0xF65B, 0x9BF8, 0xF65C, 0x9BF9, 0xF65D, 0x9BFA, 0xF65E, - 0x9BFB, 0xF65F, 0x9BFC, 0xF660, 0x9BFD, 0xF661, 0x9BFE, 0xF662, - 0x9BFF, 0xF663, 0x9C00, 0xF664, 0x9C01, 0xF665, 0x9C02, 0xF666, - 0x9C03, 0xF667, 0x9C04, 0xF668, 0x9C05, 0xF669, 0x9C06, 0xF66A, - 0x9C07, 0xF66B, 0x9C08, 0xF66C, 0x9C09, 0xF66D, 0x9C0A, 0xF66E, - 0x9C0B, 0xF66F, 0x9C0C, 0xF670, 0x9C0D, 0xF671, 0x9C0E, 0xF672, - 0x9C0F, 0xF673, 0x9C10, 0xF674, 0x9C11, 0xF675, 0x9C12, 0xF676, - 0x9C13, 0xF677, 0x9C14, 0xF678, 0x9C15, 0xF679, 0x9C16, 0xF67A, - 0x9C17, 0xF67B, 0x9C18, 0xF67C, 0x9C19, 0xF67D, 0x9C1A, 0xF67E, - 0x9C1B, 0xF680, 0x9C1C, 0xF681, 0x9C1D, 0xF682, 0x9C1E, 0xF683, - 0x9C1F, 0xF684, 0x9C20, 0xF685, 0x9C21, 0xF686, 0x9C22, 0xF687, - 0x9C23, 0xF688, 0x9C24, 0xF689, 0x9C25, 0xF68A, 0x9C26, 0xF68B, - 0x9C27, 0xF68C, 0x9C28, 0xF68D, 0x9C29, 0xF68E, 0x9C2A, 0xF68F, - 0x9C2B, 0xF690, 0x9C2C, 0xF691, 0x9C2D, 0xF692, 0x9C2E, 0xF693, - 0x9C2F, 0xF694, 0x9C30, 0xF695, 0x9C31, 0xF696, 0x9C32, 0xF697, - 0x9C33, 0xF698, 0x9C34, 0xF699, 0x9C35, 0xF69A, 0x9C36, 0xF69B, - 0x9C37, 0xF69C, 0x9C38, 0xF69D, 0x9C39, 0xF69E, 0x9C3A, 0xF69F, - 0x9C3B, 0xF6A0, 0x9C3C, 0xF740, 0x9C3D, 0xF741, 0x9C3E, 0xF742, - 0x9C3F, 0xF743, 0x9C40, 0xF744, 0x9C41, 0xF745, 0x9C42, 0xF746, - 0x9C43, 0xF747, 0x9C44, 0xF748, 0x9C45, 0xF749, 0x9C46, 0xF74A, - 0x9C47, 0xF74B, 0x9C48, 0xF74C, 0x9C49, 0xF74D, 0x9C4A, 0xF74E, - 0x9C4B, 0xF74F, 0x9C4C, 0xF750, 0x9C4D, 0xF751, 0x9C4E, 0xF752, - 0x9C4F, 0xF753, 0x9C50, 0xF754, 0x9C51, 0xF755, 0x9C52, 0xF756, - 0x9C53, 0xF757, 0x9C54, 0xF758, 0x9C55, 0xF759, 0x9C56, 0xF75A, - 0x9C57, 0xF75B, 0x9C58, 0xF75C, 0x9C59, 0xF75D, 0x9C5A, 0xF75E, - 0x9C5B, 0xF75F, 0x9C5C, 0xF760, 0x9C5D, 0xF761, 0x9C5E, 0xF762, - 0x9C5F, 0xF763, 0x9C60, 0xF764, 0x9C61, 0xF765, 0x9C62, 0xF766, - 0x9C63, 0xF767, 0x9C64, 0xF768, 0x9C65, 0xF769, 0x9C66, 0xF76A, - 0x9C67, 0xF76B, 0x9C68, 0xF76C, 0x9C69, 0xF76D, 0x9C6A, 0xF76E, - 0x9C6B, 0xF76F, 0x9C6C, 0xF770, 0x9C6D, 0xF771, 0x9C6E, 0xF772, - 0x9C6F, 0xF773, 0x9C70, 0xF774, 0x9C71, 0xF775, 0x9C72, 0xF776, - 0x9C73, 0xF777, 0x9C74, 0xF778, 0x9C75, 0xF779, 0x9C76, 0xF77A, - 0x9C77, 0xF77B, 0x9C78, 0xF77C, 0x9C79, 0xF77D, 0x9C7A, 0xF77E, - 0x9C7B, 0xF780, 0x9C7C, 0xD3E3, 0x9C7D, 0xF781, 0x9C7E, 0xF782, - 0x9C7F, 0xF6CF, 0x9C80, 0xF783, 0x9C81, 0xC2B3, 0x9C82, 0xF6D0, - 0x9C83, 0xF784, 0x9C84, 0xF785, 0x9C85, 0xF6D1, 0x9C86, 0xF6D2, - 0x9C87, 0xF6D3, 0x9C88, 0xF6D4, 0x9C89, 0xF786, 0x9C8A, 0xF787, - 0x9C8B, 0xF6D6, 0x9C8C, 0xF788, 0x9C8D, 0xB1AB, 0x9C8E, 0xF6D7, - 0x9C8F, 0xF789, 0x9C90, 0xF6D8, 0x9C91, 0xF6D9, 0x9C92, 0xF6DA, - 0x9C93, 0xF78A, 0x9C94, 0xF6DB, 0x9C95, 0xF6DC, 0x9C96, 0xF78B, - 0x9C97, 0xF78C, 0x9C98, 0xF78D, 0x9C99, 0xF78E, 0x9C9A, 0xF6DD, - 0x9C9B, 0xF6DE, 0x9C9C, 0xCFCA, 0x9C9D, 0xF78F, 0x9C9E, 0xF6DF, - 0x9C9F, 0xF6E0, 0x9CA0, 0xF6E1, 0x9CA1, 0xF6E2, 0x9CA2, 0xF6E3, - 0x9CA3, 0xF6E4, 0x9CA4, 0xC0F0, 0x9CA5, 0xF6E5, 0x9CA6, 0xF6E6, - 0x9CA7, 0xF6E7, 0x9CA8, 0xF6E8, 0x9CA9, 0xF6E9, 0x9CAA, 0xF790, - 0x9CAB, 0xF6EA, 0x9CAC, 0xF791, 0x9CAD, 0xF6EB, 0x9CAE, 0xF6EC, - 0x9CAF, 0xF792, 0x9CB0, 0xF6ED, 0x9CB1, 0xF6EE, 0x9CB2, 0xF6EF, - 0x9CB3, 0xF6F0, 0x9CB4, 0xF6F1, 0x9CB5, 0xF6F2, 0x9CB6, 0xF6F3, - 0x9CB7, 0xF6F4, 0x9CB8, 0xBEA8, 0x9CB9, 0xF793, 0x9CBA, 0xF6F5, - 0x9CBB, 0xF6F6, 0x9CBC, 0xF6F7, 0x9CBD, 0xF6F8, 0x9CBE, 0xF794, - 0x9CBF, 0xF795, 0x9CC0, 0xF796, 0x9CC1, 0xF797, 0x9CC2, 0xF798, - 0x9CC3, 0xC8FA, 0x9CC4, 0xF6F9, 0x9CC5, 0xF6FA, 0x9CC6, 0xF6FB, - 0x9CC7, 0xF6FC, 0x9CC8, 0xF799, 0x9CC9, 0xF79A, 0x9CCA, 0xF6FD, - 0x9CCB, 0xF6FE, 0x9CCC, 0xF7A1, 0x9CCD, 0xF7A2, 0x9CCE, 0xF7A3, - 0x9CCF, 0xF7A4, 0x9CD0, 0xF7A5, 0x9CD1, 0xF79B, 0x9CD2, 0xF79C, - 0x9CD3, 0xF7A6, 0x9CD4, 0xF7A7, 0x9CD5, 0xF7A8, 0x9CD6, 0xB1EE, - 0x9CD7, 0xF7A9, 0x9CD8, 0xF7AA, 0x9CD9, 0xF7AB, 0x9CDA, 0xF79D, - 0x9CDB, 0xF79E, 0x9CDC, 0xF7AC, 0x9CDD, 0xF7AD, 0x9CDE, 0xC1DB, - 0x9CDF, 0xF7AE, 0x9CE0, 0xF79F, 0x9CE1, 0xF7A0, 0x9CE2, 0xF7AF, - 0x9CE3, 0xF840, 0x9CE4, 0xF841, 0x9CE5, 0xF842, 0x9CE6, 0xF843, - 0x9CE7, 0xF844, 0x9CE8, 0xF845, 0x9CE9, 0xF846, 0x9CEA, 0xF847, - 0x9CEB, 0xF848, 0x9CEC, 0xF849, 0x9CED, 0xF84A, 0x9CEE, 0xF84B, - 0x9CEF, 0xF84C, 0x9CF0, 0xF84D, 0x9CF1, 0xF84E, 0x9CF2, 0xF84F, - 0x9CF3, 0xF850, 0x9CF4, 0xF851, 0x9CF5, 0xF852, 0x9CF6, 0xF853, - 0x9CF7, 0xF854, 0x9CF8, 0xF855, 0x9CF9, 0xF856, 0x9CFA, 0xF857, - 0x9CFB, 0xF858, 0x9CFC, 0xF859, 0x9CFD, 0xF85A, 0x9CFE, 0xF85B, - 0x9CFF, 0xF85C, 0x9D00, 0xF85D, 0x9D01, 0xF85E, 0x9D02, 0xF85F, - 0x9D03, 0xF860, 0x9D04, 0xF861, 0x9D05, 0xF862, 0x9D06, 0xF863, - 0x9D07, 0xF864, 0x9D08, 0xF865, 0x9D09, 0xF866, 0x9D0A, 0xF867, - 0x9D0B, 0xF868, 0x9D0C, 0xF869, 0x9D0D, 0xF86A, 0x9D0E, 0xF86B, - 0x9D0F, 0xF86C, 0x9D10, 0xF86D, 0x9D11, 0xF86E, 0x9D12, 0xF86F, - 0x9D13, 0xF870, 0x9D14, 0xF871, 0x9D15, 0xF872, 0x9D16, 0xF873, - 0x9D17, 0xF874, 0x9D18, 0xF875, 0x9D19, 0xF876, 0x9D1A, 0xF877, - 0x9D1B, 0xF878, 0x9D1C, 0xF879, 0x9D1D, 0xF87A, 0x9D1E, 0xF87B, - 0x9D1F, 0xF87C, 0x9D20, 0xF87D, 0x9D21, 0xF87E, 0x9D22, 0xF880, - 0x9D23, 0xF881, 0x9D24, 0xF882, 0x9D25, 0xF883, 0x9D26, 0xF884, - 0x9D27, 0xF885, 0x9D28, 0xF886, 0x9D29, 0xF887, 0x9D2A, 0xF888, - 0x9D2B, 0xF889, 0x9D2C, 0xF88A, 0x9D2D, 0xF88B, 0x9D2E, 0xF88C, - 0x9D2F, 0xF88D, 0x9D30, 0xF88E, 0x9D31, 0xF88F, 0x9D32, 0xF890, - 0x9D33, 0xF891, 0x9D34, 0xF892, 0x9D35, 0xF893, 0x9D36, 0xF894, - 0x9D37, 0xF895, 0x9D38, 0xF896, 0x9D39, 0xF897, 0x9D3A, 0xF898, - 0x9D3B, 0xF899, 0x9D3C, 0xF89A, 0x9D3D, 0xF89B, 0x9D3E, 0xF89C, - 0x9D3F, 0xF89D, 0x9D40, 0xF89E, 0x9D41, 0xF89F, 0x9D42, 0xF8A0, - 0x9D43, 0xF940, 0x9D44, 0xF941, 0x9D45, 0xF942, 0x9D46, 0xF943, - 0x9D47, 0xF944, 0x9D48, 0xF945, 0x9D49, 0xF946, 0x9D4A, 0xF947, - 0x9D4B, 0xF948, 0x9D4C, 0xF949, 0x9D4D, 0xF94A, 0x9D4E, 0xF94B, - 0x9D4F, 0xF94C, 0x9D50, 0xF94D, 0x9D51, 0xF94E, 0x9D52, 0xF94F, - 0x9D53, 0xF950, 0x9D54, 0xF951, 0x9D55, 0xF952, 0x9D56, 0xF953, - 0x9D57, 0xF954, 0x9D58, 0xF955, 0x9D59, 0xF956, 0x9D5A, 0xF957, - 0x9D5B, 0xF958, 0x9D5C, 0xF959, 0x9D5D, 0xF95A, 0x9D5E, 0xF95B, - 0x9D5F, 0xF95C, 0x9D60, 0xF95D, 0x9D61, 0xF95E, 0x9D62, 0xF95F, - 0x9D63, 0xF960, 0x9D64, 0xF961, 0x9D65, 0xF962, 0x9D66, 0xF963, - 0x9D67, 0xF964, 0x9D68, 0xF965, 0x9D69, 0xF966, 0x9D6A, 0xF967, - 0x9D6B, 0xF968, 0x9D6C, 0xF969, 0x9D6D, 0xF96A, 0x9D6E, 0xF96B, - 0x9D6F, 0xF96C, 0x9D70, 0xF96D, 0x9D71, 0xF96E, 0x9D72, 0xF96F, - 0x9D73, 0xF970, 0x9D74, 0xF971, 0x9D75, 0xF972, 0x9D76, 0xF973, - 0x9D77, 0xF974, 0x9D78, 0xF975, 0x9D79, 0xF976, 0x9D7A, 0xF977, - 0x9D7B, 0xF978, 0x9D7C, 0xF979, 0x9D7D, 0xF97A, 0x9D7E, 0xF97B, - 0x9D7F, 0xF97C, 0x9D80, 0xF97D, 0x9D81, 0xF97E, 0x9D82, 0xF980, - 0x9D83, 0xF981, 0x9D84, 0xF982, 0x9D85, 0xF983, 0x9D86, 0xF984, - 0x9D87, 0xF985, 0x9D88, 0xF986, 0x9D89, 0xF987, 0x9D8A, 0xF988, - 0x9D8B, 0xF989, 0x9D8C, 0xF98A, 0x9D8D, 0xF98B, 0x9D8E, 0xF98C, - 0x9D8F, 0xF98D, 0x9D90, 0xF98E, 0x9D91, 0xF98F, 0x9D92, 0xF990, - 0x9D93, 0xF991, 0x9D94, 0xF992, 0x9D95, 0xF993, 0x9D96, 0xF994, - 0x9D97, 0xF995, 0x9D98, 0xF996, 0x9D99, 0xF997, 0x9D9A, 0xF998, - 0x9D9B, 0xF999, 0x9D9C, 0xF99A, 0x9D9D, 0xF99B, 0x9D9E, 0xF99C, - 0x9D9F, 0xF99D, 0x9DA0, 0xF99E, 0x9DA1, 0xF99F, 0x9DA2, 0xF9A0, - 0x9DA3, 0xFA40, 0x9DA4, 0xFA41, 0x9DA5, 0xFA42, 0x9DA6, 0xFA43, - 0x9DA7, 0xFA44, 0x9DA8, 0xFA45, 0x9DA9, 0xFA46, 0x9DAA, 0xFA47, - 0x9DAB, 0xFA48, 0x9DAC, 0xFA49, 0x9DAD, 0xFA4A, 0x9DAE, 0xFA4B, - 0x9DAF, 0xFA4C, 0x9DB0, 0xFA4D, 0x9DB1, 0xFA4E, 0x9DB2, 0xFA4F, - 0x9DB3, 0xFA50, 0x9DB4, 0xFA51, 0x9DB5, 0xFA52, 0x9DB6, 0xFA53, - 0x9DB7, 0xFA54, 0x9DB8, 0xFA55, 0x9DB9, 0xFA56, 0x9DBA, 0xFA57, - 0x9DBB, 0xFA58, 0x9DBC, 0xFA59, 0x9DBD, 0xFA5A, 0x9DBE, 0xFA5B, - 0x9DBF, 0xFA5C, 0x9DC0, 0xFA5D, 0x9DC1, 0xFA5E, 0x9DC2, 0xFA5F, - 0x9DC3, 0xFA60, 0x9DC4, 0xFA61, 0x9DC5, 0xFA62, 0x9DC6, 0xFA63, - 0x9DC7, 0xFA64, 0x9DC8, 0xFA65, 0x9DC9, 0xFA66, 0x9DCA, 0xFA67, - 0x9DCB, 0xFA68, 0x9DCC, 0xFA69, 0x9DCD, 0xFA6A, 0x9DCE, 0xFA6B, - 0x9DCF, 0xFA6C, 0x9DD0, 0xFA6D, 0x9DD1, 0xFA6E, 0x9DD2, 0xFA6F, - 0x9DD3, 0xFA70, 0x9DD4, 0xFA71, 0x9DD5, 0xFA72, 0x9DD6, 0xFA73, - 0x9DD7, 0xFA74, 0x9DD8, 0xFA75, 0x9DD9, 0xFA76, 0x9DDA, 0xFA77, - 0x9DDB, 0xFA78, 0x9DDC, 0xFA79, 0x9DDD, 0xFA7A, 0x9DDE, 0xFA7B, - 0x9DDF, 0xFA7C, 0x9DE0, 0xFA7D, 0x9DE1, 0xFA7E, 0x9DE2, 0xFA80, - 0x9DE3, 0xFA81, 0x9DE4, 0xFA82, 0x9DE5, 0xFA83, 0x9DE6, 0xFA84, - 0x9DE7, 0xFA85, 0x9DE8, 0xFA86, 0x9DE9, 0xFA87, 0x9DEA, 0xFA88, - 0x9DEB, 0xFA89, 0x9DEC, 0xFA8A, 0x9DED, 0xFA8B, 0x9DEE, 0xFA8C, - 0x9DEF, 0xFA8D, 0x9DF0, 0xFA8E, 0x9DF1, 0xFA8F, 0x9DF2, 0xFA90, - 0x9DF3, 0xFA91, 0x9DF4, 0xFA92, 0x9DF5, 0xFA93, 0x9DF6, 0xFA94, - 0x9DF7, 0xFA95, 0x9DF8, 0xFA96, 0x9DF9, 0xFA97, 0x9DFA, 0xFA98, - 0x9DFB, 0xFA99, 0x9DFC, 0xFA9A, 0x9DFD, 0xFA9B, 0x9DFE, 0xFA9C, - 0x9DFF, 0xFA9D, 0x9E00, 0xFA9E, 0x9E01, 0xFA9F, 0x9E02, 0xFAA0, - 0x9E03, 0xFB40, 0x9E04, 0xFB41, 0x9E05, 0xFB42, 0x9E06, 0xFB43, - 0x9E07, 0xFB44, 0x9E08, 0xFB45, 0x9E09, 0xFB46, 0x9E0A, 0xFB47, - 0x9E0B, 0xFB48, 0x9E0C, 0xFB49, 0x9E0D, 0xFB4A, 0x9E0E, 0xFB4B, - 0x9E0F, 0xFB4C, 0x9E10, 0xFB4D, 0x9E11, 0xFB4E, 0x9E12, 0xFB4F, - 0x9E13, 0xFB50, 0x9E14, 0xFB51, 0x9E15, 0xFB52, 0x9E16, 0xFB53, - 0x9E17, 0xFB54, 0x9E18, 0xFB55, 0x9E19, 0xFB56, 0x9E1A, 0xFB57, - 0x9E1B, 0xFB58, 0x9E1C, 0xFB59, 0x9E1D, 0xFB5A, 0x9E1E, 0xFB5B, - 0x9E1F, 0xC4F1, 0x9E20, 0xF0AF, 0x9E21, 0xBCA6, 0x9E22, 0xF0B0, - 0x9E23, 0xC3F9, 0x9E24, 0xFB5C, 0x9E25, 0xC5B8, 0x9E26, 0xD1BB, - 0x9E27, 0xFB5D, 0x9E28, 0xF0B1, 0x9E29, 0xF0B2, 0x9E2A, 0xF0B3, - 0x9E2B, 0xF0B4, 0x9E2C, 0xF0B5, 0x9E2D, 0xD1BC, 0x9E2E, 0xFB5E, - 0x9E2F, 0xD1EC, 0x9E30, 0xFB5F, 0x9E31, 0xF0B7, 0x9E32, 0xF0B6, - 0x9E33, 0xD4A7, 0x9E34, 0xFB60, 0x9E35, 0xCDD2, 0x9E36, 0xF0B8, - 0x9E37, 0xF0BA, 0x9E38, 0xF0B9, 0x9E39, 0xF0BB, 0x9E3A, 0xF0BC, - 0x9E3B, 0xFB61, 0x9E3C, 0xFB62, 0x9E3D, 0xB8EB, 0x9E3E, 0xF0BD, - 0x9E3F, 0xBAE8, 0x9E40, 0xFB63, 0x9E41, 0xF0BE, 0x9E42, 0xF0BF, - 0x9E43, 0xBEE9, 0x9E44, 0xF0C0, 0x9E45, 0xB6EC, 0x9E46, 0xF0C1, - 0x9E47, 0xF0C2, 0x9E48, 0xF0C3, 0x9E49, 0xF0C4, 0x9E4A, 0xC8B5, - 0x9E4B, 0xF0C5, 0x9E4C, 0xF0C6, 0x9E4D, 0xFB64, 0x9E4E, 0xF0C7, - 0x9E4F, 0xC5F4, 0x9E50, 0xFB65, 0x9E51, 0xF0C8, 0x9E52, 0xFB66, - 0x9E53, 0xFB67, 0x9E54, 0xFB68, 0x9E55, 0xF0C9, 0x9E56, 0xFB69, - 0x9E57, 0xF0CA, 0x9E58, 0xF7BD, 0x9E59, 0xFB6A, 0x9E5A, 0xF0CB, - 0x9E5B, 0xF0CC, 0x9E5C, 0xF0CD, 0x9E5D, 0xFB6B, 0x9E5E, 0xF0CE, - 0x9E5F, 0xFB6C, 0x9E60, 0xFB6D, 0x9E61, 0xFB6E, 0x9E62, 0xFB6F, - 0x9E63, 0xF0CF, 0x9E64, 0xBAD7, 0x9E65, 0xFB70, 0x9E66, 0xF0D0, - 0x9E67, 0xF0D1, 0x9E68, 0xF0D2, 0x9E69, 0xF0D3, 0x9E6A, 0xF0D4, - 0x9E6B, 0xF0D5, 0x9E6C, 0xF0D6, 0x9E6D, 0xF0D8, 0x9E6E, 0xFB71, - 0x9E6F, 0xFB72, 0x9E70, 0xD3A5, 0x9E71, 0xF0D7, 0x9E72, 0xFB73, - 0x9E73, 0xF0D9, 0x9E74, 0xFB74, 0x9E75, 0xFB75, 0x9E76, 0xFB76, - 0x9E77, 0xFB77, 0x9E78, 0xFB78, 0x9E79, 0xFB79, 0x9E7A, 0xFB7A, - 0x9E7B, 0xFB7B, 0x9E7C, 0xFB7C, 0x9E7D, 0xFB7D, 0x9E7E, 0xF5BA, - 0x9E7F, 0xC2B9, 0x9E80, 0xFB7E, 0x9E81, 0xFB80, 0x9E82, 0xF7E4, - 0x9E83, 0xFB81, 0x9E84, 0xFB82, 0x9E85, 0xFB83, 0x9E86, 0xFB84, - 0x9E87, 0xF7E5, 0x9E88, 0xF7E6, 0x9E89, 0xFB85, 0x9E8A, 0xFB86, - 0x9E8B, 0xF7E7, 0x9E8C, 0xFB87, 0x9E8D, 0xFB88, 0x9E8E, 0xFB89, - 0x9E8F, 0xFB8A, 0x9E90, 0xFB8B, 0x9E91, 0xFB8C, 0x9E92, 0xF7E8, - 0x9E93, 0xC2B4, 0x9E94, 0xFB8D, 0x9E95, 0xFB8E, 0x9E96, 0xFB8F, - 0x9E97, 0xFB90, 0x9E98, 0xFB91, 0x9E99, 0xFB92, 0x9E9A, 0xFB93, - 0x9E9B, 0xFB94, 0x9E9C, 0xFB95, 0x9E9D, 0xF7EA, 0x9E9E, 0xFB96, - 0x9E9F, 0xF7EB, 0x9EA0, 0xFB97, 0x9EA1, 0xFB98, 0x9EA2, 0xFB99, - 0x9EA3, 0xFB9A, 0x9EA4, 0xFB9B, 0x9EA5, 0xFB9C, 0x9EA6, 0xC2F3, - 0x9EA7, 0xFB9D, 0x9EA8, 0xFB9E, 0x9EA9, 0xFB9F, 0x9EAA, 0xFBA0, - 0x9EAB, 0xFC40, 0x9EAC, 0xFC41, 0x9EAD, 0xFC42, 0x9EAE, 0xFC43, - 0x9EAF, 0xFC44, 0x9EB0, 0xFC45, 0x9EB1, 0xFC46, 0x9EB2, 0xFC47, - 0x9EB3, 0xFC48, 0x9EB4, 0xF4F0, 0x9EB5, 0xFC49, 0x9EB6, 0xFC4A, - 0x9EB7, 0xFC4B, 0x9EB8, 0xF4EF, 0x9EB9, 0xFC4C, 0x9EBA, 0xFC4D, - 0x9EBB, 0xC2E9, 0x9EBC, 0xFC4E, 0x9EBD, 0xF7E1, 0x9EBE, 0xF7E2, - 0x9EBF, 0xFC4F, 0x9EC0, 0xFC50, 0x9EC1, 0xFC51, 0x9EC2, 0xFC52, - 0x9EC3, 0xFC53, 0x9EC4, 0xBBC6, 0x9EC5, 0xFC54, 0x9EC6, 0xFC55, - 0x9EC7, 0xFC56, 0x9EC8, 0xFC57, 0x9EC9, 0xD9E4, 0x9ECA, 0xFC58, - 0x9ECB, 0xFC59, 0x9ECC, 0xFC5A, 0x9ECD, 0xCAF2, 0x9ECE, 0xC0E8, - 0x9ECF, 0xF0A4, 0x9ED0, 0xFC5B, 0x9ED1, 0xBADA, 0x9ED2, 0xFC5C, - 0x9ED3, 0xFC5D, 0x9ED4, 0xC7AD, 0x9ED5, 0xFC5E, 0x9ED6, 0xFC5F, - 0x9ED7, 0xFC60, 0x9ED8, 0xC4AC, 0x9ED9, 0xFC61, 0x9EDA, 0xFC62, - 0x9EDB, 0xF7EC, 0x9EDC, 0xF7ED, 0x9EDD, 0xF7EE, 0x9EDE, 0xFC63, - 0x9EDF, 0xF7F0, 0x9EE0, 0xF7EF, 0x9EE1, 0xFC64, 0x9EE2, 0xF7F1, - 0x9EE3, 0xFC65, 0x9EE4, 0xFC66, 0x9EE5, 0xF7F4, 0x9EE6, 0xFC67, - 0x9EE7, 0xF7F3, 0x9EE8, 0xFC68, 0x9EE9, 0xF7F2, 0x9EEA, 0xF7F5, - 0x9EEB, 0xFC69, 0x9EEC, 0xFC6A, 0x9EED, 0xFC6B, 0x9EEE, 0xFC6C, - 0x9EEF, 0xF7F6, 0x9EF0, 0xFC6D, 0x9EF1, 0xFC6E, 0x9EF2, 0xFC6F, - 0x9EF3, 0xFC70, 0x9EF4, 0xFC71, 0x9EF5, 0xFC72, 0x9EF6, 0xFC73, - 0x9EF7, 0xFC74, 0x9EF8, 0xFC75, 0x9EF9, 0xEDE9, 0x9EFA, 0xFC76, - 0x9EFB, 0xEDEA, 0x9EFC, 0xEDEB, 0x9EFD, 0xFC77, 0x9EFE, 0xF6BC, - 0x9EFF, 0xFC78, 0x9F00, 0xFC79, 0x9F01, 0xFC7A, 0x9F02, 0xFC7B, - 0x9F03, 0xFC7C, 0x9F04, 0xFC7D, 0x9F05, 0xFC7E, 0x9F06, 0xFC80, - 0x9F07, 0xFC81, 0x9F08, 0xFC82, 0x9F09, 0xFC83, 0x9F0A, 0xFC84, - 0x9F0B, 0xF6BD, 0x9F0C, 0xFC85, 0x9F0D, 0xF6BE, 0x9F0E, 0xB6A6, - 0x9F0F, 0xFC86, 0x9F10, 0xD8BE, 0x9F11, 0xFC87, 0x9F12, 0xFC88, - 0x9F13, 0xB9C4, 0x9F14, 0xFC89, 0x9F15, 0xFC8A, 0x9F16, 0xFC8B, - 0x9F17, 0xD8BB, 0x9F18, 0xFC8C, 0x9F19, 0xDCB1, 0x9F1A, 0xFC8D, - 0x9F1B, 0xFC8E, 0x9F1C, 0xFC8F, 0x9F1D, 0xFC90, 0x9F1E, 0xFC91, - 0x9F1F, 0xFC92, 0x9F20, 0xCAF3, 0x9F21, 0xFC93, 0x9F22, 0xF7F7, - 0x9F23, 0xFC94, 0x9F24, 0xFC95, 0x9F25, 0xFC96, 0x9F26, 0xFC97, - 0x9F27, 0xFC98, 0x9F28, 0xFC99, 0x9F29, 0xFC9A, 0x9F2A, 0xFC9B, - 0x9F2B, 0xFC9C, 0x9F2C, 0xF7F8, 0x9F2D, 0xFC9D, 0x9F2E, 0xFC9E, - 0x9F2F, 0xF7F9, 0x9F30, 0xFC9F, 0x9F31, 0xFCA0, 0x9F32, 0xFD40, - 0x9F33, 0xFD41, 0x9F34, 0xFD42, 0x9F35, 0xFD43, 0x9F36, 0xFD44, - 0x9F37, 0xF7FB, 0x9F38, 0xFD45, 0x9F39, 0xF7FA, 0x9F3A, 0xFD46, - 0x9F3B, 0xB1C7, 0x9F3C, 0xFD47, 0x9F3D, 0xF7FC, 0x9F3E, 0xF7FD, - 0x9F3F, 0xFD48, 0x9F40, 0xFD49, 0x9F41, 0xFD4A, 0x9F42, 0xFD4B, - 0x9F43, 0xFD4C, 0x9F44, 0xF7FE, 0x9F45, 0xFD4D, 0x9F46, 0xFD4E, - 0x9F47, 0xFD4F, 0x9F48, 0xFD50, 0x9F49, 0xFD51, 0x9F4A, 0xFD52, - 0x9F4B, 0xFD53, 0x9F4C, 0xFD54, 0x9F4D, 0xFD55, 0x9F4E, 0xFD56, - 0x9F4F, 0xFD57, 0x9F50, 0xC6EB, 0x9F51, 0xECB4, 0x9F52, 0xFD58, - 0x9F53, 0xFD59, 0x9F54, 0xFD5A, 0x9F55, 0xFD5B, 0x9F56, 0xFD5C, - 0x9F57, 0xFD5D, 0x9F58, 0xFD5E, 0x9F59, 0xFD5F, 0x9F5A, 0xFD60, - 0x9F5B, 0xFD61, 0x9F5C, 0xFD62, 0x9F5D, 0xFD63, 0x9F5E, 0xFD64, - 0x9F5F, 0xFD65, 0x9F60, 0xFD66, 0x9F61, 0xFD67, 0x9F62, 0xFD68, - 0x9F63, 0xFD69, 0x9F64, 0xFD6A, 0x9F65, 0xFD6B, 0x9F66, 0xFD6C, - 0x9F67, 0xFD6D, 0x9F68, 0xFD6E, 0x9F69, 0xFD6F, 0x9F6A, 0xFD70, - 0x9F6B, 0xFD71, 0x9F6C, 0xFD72, 0x9F6D, 0xFD73, 0x9F6E, 0xFD74, - 0x9F6F, 0xFD75, 0x9F70, 0xFD76, 0x9F71, 0xFD77, 0x9F72, 0xFD78, - 0x9F73, 0xFD79, 0x9F74, 0xFD7A, 0x9F75, 0xFD7B, 0x9F76, 0xFD7C, - 0x9F77, 0xFD7D, 0x9F78, 0xFD7E, 0x9F79, 0xFD80, 0x9F7A, 0xFD81, - 0x9F7B, 0xFD82, 0x9F7C, 0xFD83, 0x9F7D, 0xFD84, 0x9F7E, 0xFD85, - 0x9F7F, 0xB3DD, 0x9F80, 0xF6B3, 0x9F81, 0xFD86, 0x9F82, 0xFD87, - 0x9F83, 0xF6B4, 0x9F84, 0xC1E4, 0x9F85, 0xF6B5, 0x9F86, 0xF6B6, - 0x9F87, 0xF6B7, 0x9F88, 0xF6B8, 0x9F89, 0xF6B9, 0x9F8A, 0xF6BA, - 0x9F8B, 0xC8A3, 0x9F8C, 0xF6BB, 0x9F8D, 0xFD88, 0x9F8E, 0xFD89, - 0x9F8F, 0xFD8A, 0x9F90, 0xFD8B, 0x9F91, 0xFD8C, 0x9F92, 0xFD8D, - 0x9F93, 0xFD8E, 0x9F94, 0xFD8F, 0x9F95, 0xFD90, 0x9F96, 0xFD91, - 0x9F97, 0xFD92, 0x9F98, 0xFD93, 0x9F99, 0xC1FA, 0x9F9A, 0xB9A8, - 0x9F9B, 0xEDE8, 0x9F9C, 0xFD94, 0x9F9D, 0xFD95, 0x9F9E, 0xFD96, - 0x9F9F, 0xB9EA, 0x9FA0, 0xD9DF, 0x9FA1, 0xFD97, 0x9FA2, 0xFD98, - 0x9FA3, 0xFD99, 0x9FA4, 0xFD9A, 0x9FA5, 0xFD9B, 0xF92C, 0xFD9C, - 0xF979, 0xFD9D, 0xF995, 0xFD9E, 0xF9E7, 0xFD9F, 0xF9F1, 0xFDA0, - 0xFA0C, 0xFE40, 0xFA0D, 0xFE41, 0xFA0E, 0xFE42, 0xFA0F, 0xFE43, - 0xFA11, 0xFE44, 0xFA13, 0xFE45, 0xFA14, 0xFE46, 0xFA18, 0xFE47, - 0xFA1F, 0xFE48, 0xFA20, 0xFE49, 0xFA21, 0xFE4A, 0xFA23, 0xFE4B, - 0xFA24, 0xFE4C, 0xFA27, 0xFE4D, 0xFA28, 0xFE4E, 0xFA29, 0xFE4F, - 0xFE30, 0xA955, 0xFE31, 0xA6F2, 0xFE33, 0xA6F4, 0xFE34, 0xA6F5, - 0xFE35, 0xA6E0, 0xFE36, 0xA6E1, 0xFE37, 0xA6F0, 0xFE38, 0xA6F1, - 0xFE39, 0xA6E2, 0xFE3A, 0xA6E3, 0xFE3B, 0xA6EE, 0xFE3C, 0xA6EF, - 0xFE3D, 0xA6E6, 0xFE3E, 0xA6E7, 0xFE3F, 0xA6E4, 0xFE40, 0xA6E5, - 0xFE41, 0xA6E8, 0xFE42, 0xA6E9, 0xFE43, 0xA6EA, 0xFE44, 0xA6EB, - 0xFE49, 0xA968, 0xFE4A, 0xA969, 0xFE4B, 0xA96A, 0xFE4C, 0xA96B, - 0xFE4D, 0xA96C, 0xFE4E, 0xA96D, 0xFE4F, 0xA96E, 0xFE50, 0xA96F, - 0xFE51, 0xA970, 0xFE52, 0xA971, 0xFE54, 0xA972, 0xFE55, 0xA973, - 0xFE56, 0xA974, 0xFE57, 0xA975, 0xFE59, 0xA976, 0xFE5A, 0xA977, - 0xFE5B, 0xA978, 0xFE5C, 0xA979, 0xFE5D, 0xA97A, 0xFE5E, 0xA97B, - 0xFE5F, 0xA97C, 0xFE60, 0xA97D, 0xFE61, 0xA97E, 0xFE62, 0xA980, - 0xFE63, 0xA981, 0xFE64, 0xA982, 0xFE65, 0xA983, 0xFE66, 0xA984, - 0xFE68, 0xA985, 0xFE69, 0xA986, 0xFE6A, 0xA987, 0xFE6B, 0xA988, - 0xFF01, 0xA3A1, 0xFF02, 0xA3A2, 0xFF03, 0xA3A3, 0xFF04, 0xA1E7, - 0xFF05, 0xA3A5, 0xFF06, 0xA3A6, 0xFF07, 0xA3A7, 0xFF08, 0xA3A8, - 0xFF09, 0xA3A9, 0xFF0A, 0xA3AA, 0xFF0B, 0xA3AB, 0xFF0C, 0xA3AC, - 0xFF0D, 0xA3AD, 0xFF0E, 0xA3AE, 0xFF0F, 0xA3AF, 0xFF10, 0xA3B0, - 0xFF11, 0xA3B1, 0xFF12, 0xA3B2, 0xFF13, 0xA3B3, 0xFF14, 0xA3B4, - 0xFF15, 0xA3B5, 0xFF16, 0xA3B6, 0xFF17, 0xA3B7, 0xFF18, 0xA3B8, - 0xFF19, 0xA3B9, 0xFF1A, 0xA3BA, 0xFF1B, 0xA3BB, 0xFF1C, 0xA3BC, - 0xFF1D, 0xA3BD, 0xFF1E, 0xA3BE, 0xFF1F, 0xA3BF, 0xFF20, 0xA3C0, - 0xFF21, 0xA3C1, 0xFF22, 0xA3C2, 0xFF23, 0xA3C3, 0xFF24, 0xA3C4, - 0xFF25, 0xA3C5, 0xFF26, 0xA3C6, 0xFF27, 0xA3C7, 0xFF28, 0xA3C8, - 0xFF29, 0xA3C9, 0xFF2A, 0xA3CA, 0xFF2B, 0xA3CB, 0xFF2C, 0xA3CC, - 0xFF2D, 0xA3CD, 0xFF2E, 0xA3CE, 0xFF2F, 0xA3CF, 0xFF30, 0xA3D0, - 0xFF31, 0xA3D1, 0xFF32, 0xA3D2, 0xFF33, 0xA3D3, 0xFF34, 0xA3D4, - 0xFF35, 0xA3D5, 0xFF36, 0xA3D6, 0xFF37, 0xA3D7, 0xFF38, 0xA3D8, - 0xFF39, 0xA3D9, 0xFF3A, 0xA3DA, 0xFF3B, 0xA3DB, 0xFF3C, 0xA3DC, - 0xFF3D, 0xA3DD, 0xFF3E, 0xA3DE, 0xFF3F, 0xA3DF, 0xFF40, 0xA3E0, - 0xFF41, 0xA3E1, 0xFF42, 0xA3E2, 0xFF43, 0xA3E3, 0xFF44, 0xA3E4, - 0xFF45, 0xA3E5, 0xFF46, 0xA3E6, 0xFF47, 0xA3E7, 0xFF48, 0xA3E8, - 0xFF49, 0xA3E9, 0xFF4A, 0xA3EA, 0xFF4B, 0xA3EB, 0xFF4C, 0xA3EC, - 0xFF4D, 0xA3ED, 0xFF4E, 0xA3EE, 0xFF4F, 0xA3EF, 0xFF50, 0xA3F0, - 0xFF51, 0xA3F1, 0xFF52, 0xA3F2, 0xFF53, 0xA3F3, 0xFF54, 0xA3F4, - 0xFF55, 0xA3F5, 0xFF56, 0xA3F6, 0xFF57, 0xA3F7, 0xFF58, 0xA3F8, - 0xFF59, 0xA3F9, 0xFF5A, 0xA3FA, 0xFF5B, 0xA3FB, 0xFF5C, 0xA3FC, - 0xFF5D, 0xA3FD, 0xFF5E, 0xA1AB, 0xFFE0, 0xA1E9, 0xFFE1, 0xA1EA, - 0xFFE2, 0xA956, 0xFFE3, 0xA3FE, 0xFFE4, 0xA957, 0xFFE5, 0xA3A4, - 0, 0 -}; - -static -const WCHAR oem2uni[] = { -/* OEM - Unicode, OEM - Unicode, OEM - Unicode, OEM - Unicode */ - 0x0080, 0x20AC, 0x8140, 0x4E02, 0x8141, 0x4E04, 0x8142, 0x4E05, - 0x8143, 0x4E06, 0x8144, 0x4E0F, 0x8145, 0x4E12, 0x8146, 0x4E17, - 0x8147, 0x4E1F, 0x8148, 0x4E20, 0x8149, 0x4E21, 0x814A, 0x4E23, - 0x814B, 0x4E26, 0x814C, 0x4E29, 0x814D, 0x4E2E, 0x814E, 0x4E2F, - 0x814F, 0x4E31, 0x8150, 0x4E33, 0x8151, 0x4E35, 0x8152, 0x4E37, - 0x8153, 0x4E3C, 0x8154, 0x4E40, 0x8155, 0x4E41, 0x8156, 0x4E42, - 0x8157, 0x4E44, 0x8158, 0x4E46, 0x8159, 0x4E4A, 0x815A, 0x4E51, - 0x815B, 0x4E55, 0x815C, 0x4E57, 0x815D, 0x4E5A, 0x815E, 0x4E5B, - 0x815F, 0x4E62, 0x8160, 0x4E63, 0x8161, 0x4E64, 0x8162, 0x4E65, - 0x8163, 0x4E67, 0x8164, 0x4E68, 0x8165, 0x4E6A, 0x8166, 0x4E6B, - 0x8167, 0x4E6C, 0x8168, 0x4E6D, 0x8169, 0x4E6E, 0x816A, 0x4E6F, - 0x816B, 0x4E72, 0x816C, 0x4E74, 0x816D, 0x4E75, 0x816E, 0x4E76, - 0x816F, 0x4E77, 0x8170, 0x4E78, 0x8171, 0x4E79, 0x8172, 0x4E7A, - 0x8173, 0x4E7B, 0x8174, 0x4E7C, 0x8175, 0x4E7D, 0x8176, 0x4E7F, - 0x8177, 0x4E80, 0x8178, 0x4E81, 0x8179, 0x4E82, 0x817A, 0x4E83, - 0x817B, 0x4E84, 0x817C, 0x4E85, 0x817D, 0x4E87, 0x817E, 0x4E8A, - 0x8180, 0x4E90, 0x8181, 0x4E96, 0x8182, 0x4E97, 0x8183, 0x4E99, - 0x8184, 0x4E9C, 0x8185, 0x4E9D, 0x8186, 0x4E9E, 0x8187, 0x4EA3, - 0x8188, 0x4EAA, 0x8189, 0x4EAF, 0x818A, 0x4EB0, 0x818B, 0x4EB1, - 0x818C, 0x4EB4, 0x818D, 0x4EB6, 0x818E, 0x4EB7, 0x818F, 0x4EB8, - 0x8190, 0x4EB9, 0x8191, 0x4EBC, 0x8192, 0x4EBD, 0x8193, 0x4EBE, - 0x8194, 0x4EC8, 0x8195, 0x4ECC, 0x8196, 0x4ECF, 0x8197, 0x4ED0, - 0x8198, 0x4ED2, 0x8199, 0x4EDA, 0x819A, 0x4EDB, 0x819B, 0x4EDC, - 0x819C, 0x4EE0, 0x819D, 0x4EE2, 0x819E, 0x4EE6, 0x819F, 0x4EE7, - 0x81A0, 0x4EE9, 0x81A1, 0x4EED, 0x81A2, 0x4EEE, 0x81A3, 0x4EEF, - 0x81A4, 0x4EF1, 0x81A5, 0x4EF4, 0x81A6, 0x4EF8, 0x81A7, 0x4EF9, - 0x81A8, 0x4EFA, 0x81A9, 0x4EFC, 0x81AA, 0x4EFE, 0x81AB, 0x4F00, - 0x81AC, 0x4F02, 0x81AD, 0x4F03, 0x81AE, 0x4F04, 0x81AF, 0x4F05, - 0x81B0, 0x4F06, 0x81B1, 0x4F07, 0x81B2, 0x4F08, 0x81B3, 0x4F0B, - 0x81B4, 0x4F0C, 0x81B5, 0x4F12, 0x81B6, 0x4F13, 0x81B7, 0x4F14, - 0x81B8, 0x4F15, 0x81B9, 0x4F16, 0x81BA, 0x4F1C, 0x81BB, 0x4F1D, - 0x81BC, 0x4F21, 0x81BD, 0x4F23, 0x81BE, 0x4F28, 0x81BF, 0x4F29, - 0x81C0, 0x4F2C, 0x81C1, 0x4F2D, 0x81C2, 0x4F2E, 0x81C3, 0x4F31, - 0x81C4, 0x4F33, 0x81C5, 0x4F35, 0x81C6, 0x4F37, 0x81C7, 0x4F39, - 0x81C8, 0x4F3B, 0x81C9, 0x4F3E, 0x81CA, 0x4F3F, 0x81CB, 0x4F40, - 0x81CC, 0x4F41, 0x81CD, 0x4F42, 0x81CE, 0x4F44, 0x81CF, 0x4F45, - 0x81D0, 0x4F47, 0x81D1, 0x4F48, 0x81D2, 0x4F49, 0x81D3, 0x4F4A, - 0x81D4, 0x4F4B, 0x81D5, 0x4F4C, 0x81D6, 0x4F52, 0x81D7, 0x4F54, - 0x81D8, 0x4F56, 0x81D9, 0x4F61, 0x81DA, 0x4F62, 0x81DB, 0x4F66, - 0x81DC, 0x4F68, 0x81DD, 0x4F6A, 0x81DE, 0x4F6B, 0x81DF, 0x4F6D, - 0x81E0, 0x4F6E, 0x81E1, 0x4F71, 0x81E2, 0x4F72, 0x81E3, 0x4F75, - 0x81E4, 0x4F77, 0x81E5, 0x4F78, 0x81E6, 0x4F79, 0x81E7, 0x4F7A, - 0x81E8, 0x4F7D, 0x81E9, 0x4F80, 0x81EA, 0x4F81, 0x81EB, 0x4F82, - 0x81EC, 0x4F85, 0x81ED, 0x4F86, 0x81EE, 0x4F87, 0x81EF, 0x4F8A, - 0x81F0, 0x4F8C, 0x81F1, 0x4F8E, 0x81F2, 0x4F90, 0x81F3, 0x4F92, - 0x81F4, 0x4F93, 0x81F5, 0x4F95, 0x81F6, 0x4F96, 0x81F7, 0x4F98, - 0x81F8, 0x4F99, 0x81F9, 0x4F9A, 0x81FA, 0x4F9C, 0x81FB, 0x4F9E, - 0x81FC, 0x4F9F, 0x81FD, 0x4FA1, 0x81FE, 0x4FA2, 0x8240, 0x4FA4, - 0x8241, 0x4FAB, 0x8242, 0x4FAD, 0x8243, 0x4FB0, 0x8244, 0x4FB1, - 0x8245, 0x4FB2, 0x8246, 0x4FB3, 0x8247, 0x4FB4, 0x8248, 0x4FB6, - 0x8249, 0x4FB7, 0x824A, 0x4FB8, 0x824B, 0x4FB9, 0x824C, 0x4FBA, - 0x824D, 0x4FBB, 0x824E, 0x4FBC, 0x824F, 0x4FBD, 0x8250, 0x4FBE, - 0x8251, 0x4FC0, 0x8252, 0x4FC1, 0x8253, 0x4FC2, 0x8254, 0x4FC6, - 0x8255, 0x4FC7, 0x8256, 0x4FC8, 0x8257, 0x4FC9, 0x8258, 0x4FCB, - 0x8259, 0x4FCC, 0x825A, 0x4FCD, 0x825B, 0x4FD2, 0x825C, 0x4FD3, - 0x825D, 0x4FD4, 0x825E, 0x4FD5, 0x825F, 0x4FD6, 0x8260, 0x4FD9, - 0x8261, 0x4FDB, 0x8262, 0x4FE0, 0x8263, 0x4FE2, 0x8264, 0x4FE4, - 0x8265, 0x4FE5, 0x8266, 0x4FE7, 0x8267, 0x4FEB, 0x8268, 0x4FEC, - 0x8269, 0x4FF0, 0x826A, 0x4FF2, 0x826B, 0x4FF4, 0x826C, 0x4FF5, - 0x826D, 0x4FF6, 0x826E, 0x4FF7, 0x826F, 0x4FF9, 0x8270, 0x4FFB, - 0x8271, 0x4FFC, 0x8272, 0x4FFD, 0x8273, 0x4FFF, 0x8274, 0x5000, - 0x8275, 0x5001, 0x8276, 0x5002, 0x8277, 0x5003, 0x8278, 0x5004, - 0x8279, 0x5005, 0x827A, 0x5006, 0x827B, 0x5007, 0x827C, 0x5008, - 0x827D, 0x5009, 0x827E, 0x500A, 0x8280, 0x500B, 0x8281, 0x500E, - 0x8282, 0x5010, 0x8283, 0x5011, 0x8284, 0x5013, 0x8285, 0x5015, - 0x8286, 0x5016, 0x8287, 0x5017, 0x8288, 0x501B, 0x8289, 0x501D, - 0x828A, 0x501E, 0x828B, 0x5020, 0x828C, 0x5022, 0x828D, 0x5023, - 0x828E, 0x5024, 0x828F, 0x5027, 0x8290, 0x502B, 0x8291, 0x502F, - 0x8292, 0x5030, 0x8293, 0x5031, 0x8294, 0x5032, 0x8295, 0x5033, - 0x8296, 0x5034, 0x8297, 0x5035, 0x8298, 0x5036, 0x8299, 0x5037, - 0x829A, 0x5038, 0x829B, 0x5039, 0x829C, 0x503B, 0x829D, 0x503D, - 0x829E, 0x503F, 0x829F, 0x5040, 0x82A0, 0x5041, 0x82A1, 0x5042, - 0x82A2, 0x5044, 0x82A3, 0x5045, 0x82A4, 0x5046, 0x82A5, 0x5049, - 0x82A6, 0x504A, 0x82A7, 0x504B, 0x82A8, 0x504D, 0x82A9, 0x5050, - 0x82AA, 0x5051, 0x82AB, 0x5052, 0x82AC, 0x5053, 0x82AD, 0x5054, - 0x82AE, 0x5056, 0x82AF, 0x5057, 0x82B0, 0x5058, 0x82B1, 0x5059, - 0x82B2, 0x505B, 0x82B3, 0x505D, 0x82B4, 0x505E, 0x82B5, 0x505F, - 0x82B6, 0x5060, 0x82B7, 0x5061, 0x82B8, 0x5062, 0x82B9, 0x5063, - 0x82BA, 0x5064, 0x82BB, 0x5066, 0x82BC, 0x5067, 0x82BD, 0x5068, - 0x82BE, 0x5069, 0x82BF, 0x506A, 0x82C0, 0x506B, 0x82C1, 0x506D, - 0x82C2, 0x506E, 0x82C3, 0x506F, 0x82C4, 0x5070, 0x82C5, 0x5071, - 0x82C6, 0x5072, 0x82C7, 0x5073, 0x82C8, 0x5074, 0x82C9, 0x5075, - 0x82CA, 0x5078, 0x82CB, 0x5079, 0x82CC, 0x507A, 0x82CD, 0x507C, - 0x82CE, 0x507D, 0x82CF, 0x5081, 0x82D0, 0x5082, 0x82D1, 0x5083, - 0x82D2, 0x5084, 0x82D3, 0x5086, 0x82D4, 0x5087, 0x82D5, 0x5089, - 0x82D6, 0x508A, 0x82D7, 0x508B, 0x82D8, 0x508C, 0x82D9, 0x508E, - 0x82DA, 0x508F, 0x82DB, 0x5090, 0x82DC, 0x5091, 0x82DD, 0x5092, - 0x82DE, 0x5093, 0x82DF, 0x5094, 0x82E0, 0x5095, 0x82E1, 0x5096, - 0x82E2, 0x5097, 0x82E3, 0x5098, 0x82E4, 0x5099, 0x82E5, 0x509A, - 0x82E6, 0x509B, 0x82E7, 0x509C, 0x82E8, 0x509D, 0x82E9, 0x509E, - 0x82EA, 0x509F, 0x82EB, 0x50A0, 0x82EC, 0x50A1, 0x82ED, 0x50A2, - 0x82EE, 0x50A4, 0x82EF, 0x50A6, 0x82F0, 0x50AA, 0x82F1, 0x50AB, - 0x82F2, 0x50AD, 0x82F3, 0x50AE, 0x82F4, 0x50AF, 0x82F5, 0x50B0, - 0x82F6, 0x50B1, 0x82F7, 0x50B3, 0x82F8, 0x50B4, 0x82F9, 0x50B5, - 0x82FA, 0x50B6, 0x82FB, 0x50B7, 0x82FC, 0x50B8, 0x82FD, 0x50B9, - 0x82FE, 0x50BC, 0x8340, 0x50BD, 0x8341, 0x50BE, 0x8342, 0x50BF, - 0x8343, 0x50C0, 0x8344, 0x50C1, 0x8345, 0x50C2, 0x8346, 0x50C3, - 0x8347, 0x50C4, 0x8348, 0x50C5, 0x8349, 0x50C6, 0x834A, 0x50C7, - 0x834B, 0x50C8, 0x834C, 0x50C9, 0x834D, 0x50CA, 0x834E, 0x50CB, - 0x834F, 0x50CC, 0x8350, 0x50CD, 0x8351, 0x50CE, 0x8352, 0x50D0, - 0x8353, 0x50D1, 0x8354, 0x50D2, 0x8355, 0x50D3, 0x8356, 0x50D4, - 0x8357, 0x50D5, 0x8358, 0x50D7, 0x8359, 0x50D8, 0x835A, 0x50D9, - 0x835B, 0x50DB, 0x835C, 0x50DC, 0x835D, 0x50DD, 0x835E, 0x50DE, - 0x835F, 0x50DF, 0x8360, 0x50E0, 0x8361, 0x50E1, 0x8362, 0x50E2, - 0x8363, 0x50E3, 0x8364, 0x50E4, 0x8365, 0x50E5, 0x8366, 0x50E8, - 0x8367, 0x50E9, 0x8368, 0x50EA, 0x8369, 0x50EB, 0x836A, 0x50EF, - 0x836B, 0x50F0, 0x836C, 0x50F1, 0x836D, 0x50F2, 0x836E, 0x50F4, - 0x836F, 0x50F6, 0x8370, 0x50F7, 0x8371, 0x50F8, 0x8372, 0x50F9, - 0x8373, 0x50FA, 0x8374, 0x50FC, 0x8375, 0x50FD, 0x8376, 0x50FE, - 0x8377, 0x50FF, 0x8378, 0x5100, 0x8379, 0x5101, 0x837A, 0x5102, - 0x837B, 0x5103, 0x837C, 0x5104, 0x837D, 0x5105, 0x837E, 0x5108, - 0x8380, 0x5109, 0x8381, 0x510A, 0x8382, 0x510C, 0x8383, 0x510D, - 0x8384, 0x510E, 0x8385, 0x510F, 0x8386, 0x5110, 0x8387, 0x5111, - 0x8388, 0x5113, 0x8389, 0x5114, 0x838A, 0x5115, 0x838B, 0x5116, - 0x838C, 0x5117, 0x838D, 0x5118, 0x838E, 0x5119, 0x838F, 0x511A, - 0x8390, 0x511B, 0x8391, 0x511C, 0x8392, 0x511D, 0x8393, 0x511E, - 0x8394, 0x511F, 0x8395, 0x5120, 0x8396, 0x5122, 0x8397, 0x5123, - 0x8398, 0x5124, 0x8399, 0x5125, 0x839A, 0x5126, 0x839B, 0x5127, - 0x839C, 0x5128, 0x839D, 0x5129, 0x839E, 0x512A, 0x839F, 0x512B, - 0x83A0, 0x512C, 0x83A1, 0x512D, 0x83A2, 0x512E, 0x83A3, 0x512F, - 0x83A4, 0x5130, 0x83A5, 0x5131, 0x83A6, 0x5132, 0x83A7, 0x5133, - 0x83A8, 0x5134, 0x83A9, 0x5135, 0x83AA, 0x5136, 0x83AB, 0x5137, - 0x83AC, 0x5138, 0x83AD, 0x5139, 0x83AE, 0x513A, 0x83AF, 0x513B, - 0x83B0, 0x513C, 0x83B1, 0x513D, 0x83B2, 0x513E, 0x83B3, 0x5142, - 0x83B4, 0x5147, 0x83B5, 0x514A, 0x83B6, 0x514C, 0x83B7, 0x514E, - 0x83B8, 0x514F, 0x83B9, 0x5150, 0x83BA, 0x5152, 0x83BB, 0x5153, - 0x83BC, 0x5157, 0x83BD, 0x5158, 0x83BE, 0x5159, 0x83BF, 0x515B, - 0x83C0, 0x515D, 0x83C1, 0x515E, 0x83C2, 0x515F, 0x83C3, 0x5160, - 0x83C4, 0x5161, 0x83C5, 0x5163, 0x83C6, 0x5164, 0x83C7, 0x5166, - 0x83C8, 0x5167, 0x83C9, 0x5169, 0x83CA, 0x516A, 0x83CB, 0x516F, - 0x83CC, 0x5172, 0x83CD, 0x517A, 0x83CE, 0x517E, 0x83CF, 0x517F, - 0x83D0, 0x5183, 0x83D1, 0x5184, 0x83D2, 0x5186, 0x83D3, 0x5187, - 0x83D4, 0x518A, 0x83D5, 0x518B, 0x83D6, 0x518E, 0x83D7, 0x518F, - 0x83D8, 0x5190, 0x83D9, 0x5191, 0x83DA, 0x5193, 0x83DB, 0x5194, - 0x83DC, 0x5198, 0x83DD, 0x519A, 0x83DE, 0x519D, 0x83DF, 0x519E, - 0x83E0, 0x519F, 0x83E1, 0x51A1, 0x83E2, 0x51A3, 0x83E3, 0x51A6, - 0x83E4, 0x51A7, 0x83E5, 0x51A8, 0x83E6, 0x51A9, 0x83E7, 0x51AA, - 0x83E8, 0x51AD, 0x83E9, 0x51AE, 0x83EA, 0x51B4, 0x83EB, 0x51B8, - 0x83EC, 0x51B9, 0x83ED, 0x51BA, 0x83EE, 0x51BE, 0x83EF, 0x51BF, - 0x83F0, 0x51C1, 0x83F1, 0x51C2, 0x83F2, 0x51C3, 0x83F3, 0x51C5, - 0x83F4, 0x51C8, 0x83F5, 0x51CA, 0x83F6, 0x51CD, 0x83F7, 0x51CE, - 0x83F8, 0x51D0, 0x83F9, 0x51D2, 0x83FA, 0x51D3, 0x83FB, 0x51D4, - 0x83FC, 0x51D5, 0x83FD, 0x51D6, 0x83FE, 0x51D7, 0x8440, 0x51D8, - 0x8441, 0x51D9, 0x8442, 0x51DA, 0x8443, 0x51DC, 0x8444, 0x51DE, - 0x8445, 0x51DF, 0x8446, 0x51E2, 0x8447, 0x51E3, 0x8448, 0x51E5, - 0x8449, 0x51E6, 0x844A, 0x51E7, 0x844B, 0x51E8, 0x844C, 0x51E9, - 0x844D, 0x51EA, 0x844E, 0x51EC, 0x844F, 0x51EE, 0x8450, 0x51F1, - 0x8451, 0x51F2, 0x8452, 0x51F4, 0x8453, 0x51F7, 0x8454, 0x51FE, - 0x8455, 0x5204, 0x8456, 0x5205, 0x8457, 0x5209, 0x8458, 0x520B, - 0x8459, 0x520C, 0x845A, 0x520F, 0x845B, 0x5210, 0x845C, 0x5213, - 0x845D, 0x5214, 0x845E, 0x5215, 0x845F, 0x521C, 0x8460, 0x521E, - 0x8461, 0x521F, 0x8462, 0x5221, 0x8463, 0x5222, 0x8464, 0x5223, - 0x8465, 0x5225, 0x8466, 0x5226, 0x8467, 0x5227, 0x8468, 0x522A, - 0x8469, 0x522C, 0x846A, 0x522F, 0x846B, 0x5231, 0x846C, 0x5232, - 0x846D, 0x5234, 0x846E, 0x5235, 0x846F, 0x523C, 0x8470, 0x523E, - 0x8471, 0x5244, 0x8472, 0x5245, 0x8473, 0x5246, 0x8474, 0x5247, - 0x8475, 0x5248, 0x8476, 0x5249, 0x8477, 0x524B, 0x8478, 0x524E, - 0x8479, 0x524F, 0x847A, 0x5252, 0x847B, 0x5253, 0x847C, 0x5255, - 0x847D, 0x5257, 0x847E, 0x5258, 0x8480, 0x5259, 0x8481, 0x525A, - 0x8482, 0x525B, 0x8483, 0x525D, 0x8484, 0x525F, 0x8485, 0x5260, - 0x8486, 0x5262, 0x8487, 0x5263, 0x8488, 0x5264, 0x8489, 0x5266, - 0x848A, 0x5268, 0x848B, 0x526B, 0x848C, 0x526C, 0x848D, 0x526D, - 0x848E, 0x526E, 0x848F, 0x5270, 0x8490, 0x5271, 0x8491, 0x5273, - 0x8492, 0x5274, 0x8493, 0x5275, 0x8494, 0x5276, 0x8495, 0x5277, - 0x8496, 0x5278, 0x8497, 0x5279, 0x8498, 0x527A, 0x8499, 0x527B, - 0x849A, 0x527C, 0x849B, 0x527E, 0x849C, 0x5280, 0x849D, 0x5283, - 0x849E, 0x5284, 0x849F, 0x5285, 0x84A0, 0x5286, 0x84A1, 0x5287, - 0x84A2, 0x5289, 0x84A3, 0x528A, 0x84A4, 0x528B, 0x84A5, 0x528C, - 0x84A6, 0x528D, 0x84A7, 0x528E, 0x84A8, 0x528F, 0x84A9, 0x5291, - 0x84AA, 0x5292, 0x84AB, 0x5294, 0x84AC, 0x5295, 0x84AD, 0x5296, - 0x84AE, 0x5297, 0x84AF, 0x5298, 0x84B0, 0x5299, 0x84B1, 0x529A, - 0x84B2, 0x529C, 0x84B3, 0x52A4, 0x84B4, 0x52A5, 0x84B5, 0x52A6, - 0x84B6, 0x52A7, 0x84B7, 0x52AE, 0x84B8, 0x52AF, 0x84B9, 0x52B0, - 0x84BA, 0x52B4, 0x84BB, 0x52B5, 0x84BC, 0x52B6, 0x84BD, 0x52B7, - 0x84BE, 0x52B8, 0x84BF, 0x52B9, 0x84C0, 0x52BA, 0x84C1, 0x52BB, - 0x84C2, 0x52BC, 0x84C3, 0x52BD, 0x84C4, 0x52C0, 0x84C5, 0x52C1, - 0x84C6, 0x52C2, 0x84C7, 0x52C4, 0x84C8, 0x52C5, 0x84C9, 0x52C6, - 0x84CA, 0x52C8, 0x84CB, 0x52CA, 0x84CC, 0x52CC, 0x84CD, 0x52CD, - 0x84CE, 0x52CE, 0x84CF, 0x52CF, 0x84D0, 0x52D1, 0x84D1, 0x52D3, - 0x84D2, 0x52D4, 0x84D3, 0x52D5, 0x84D4, 0x52D7, 0x84D5, 0x52D9, - 0x84D6, 0x52DA, 0x84D7, 0x52DB, 0x84D8, 0x52DC, 0x84D9, 0x52DD, - 0x84DA, 0x52DE, 0x84DB, 0x52E0, 0x84DC, 0x52E1, 0x84DD, 0x52E2, - 0x84DE, 0x52E3, 0x84DF, 0x52E5, 0x84E0, 0x52E6, 0x84E1, 0x52E7, - 0x84E2, 0x52E8, 0x84E3, 0x52E9, 0x84E4, 0x52EA, 0x84E5, 0x52EB, - 0x84E6, 0x52EC, 0x84E7, 0x52ED, 0x84E8, 0x52EE, 0x84E9, 0x52EF, - 0x84EA, 0x52F1, 0x84EB, 0x52F2, 0x84EC, 0x52F3, 0x84ED, 0x52F4, - 0x84EE, 0x52F5, 0x84EF, 0x52F6, 0x84F0, 0x52F7, 0x84F1, 0x52F8, - 0x84F2, 0x52FB, 0x84F3, 0x52FC, 0x84F4, 0x52FD, 0x84F5, 0x5301, - 0x84F6, 0x5302, 0x84F7, 0x5303, 0x84F8, 0x5304, 0x84F9, 0x5307, - 0x84FA, 0x5309, 0x84FB, 0x530A, 0x84FC, 0x530B, 0x84FD, 0x530C, - 0x84FE, 0x530E, 0x8540, 0x5311, 0x8541, 0x5312, 0x8542, 0x5313, - 0x8543, 0x5314, 0x8544, 0x5318, 0x8545, 0x531B, 0x8546, 0x531C, - 0x8547, 0x531E, 0x8548, 0x531F, 0x8549, 0x5322, 0x854A, 0x5324, - 0x854B, 0x5325, 0x854C, 0x5327, 0x854D, 0x5328, 0x854E, 0x5329, - 0x854F, 0x532B, 0x8550, 0x532C, 0x8551, 0x532D, 0x8552, 0x532F, - 0x8553, 0x5330, 0x8554, 0x5331, 0x8555, 0x5332, 0x8556, 0x5333, - 0x8557, 0x5334, 0x8558, 0x5335, 0x8559, 0x5336, 0x855A, 0x5337, - 0x855B, 0x5338, 0x855C, 0x533C, 0x855D, 0x533D, 0x855E, 0x5340, - 0x855F, 0x5342, 0x8560, 0x5344, 0x8561, 0x5346, 0x8562, 0x534B, - 0x8563, 0x534C, 0x8564, 0x534D, 0x8565, 0x5350, 0x8566, 0x5354, - 0x8567, 0x5358, 0x8568, 0x5359, 0x8569, 0x535B, 0x856A, 0x535D, - 0x856B, 0x5365, 0x856C, 0x5368, 0x856D, 0x536A, 0x856E, 0x536C, - 0x856F, 0x536D, 0x8570, 0x5372, 0x8571, 0x5376, 0x8572, 0x5379, - 0x8573, 0x537B, 0x8574, 0x537C, 0x8575, 0x537D, 0x8576, 0x537E, - 0x8577, 0x5380, 0x8578, 0x5381, 0x8579, 0x5383, 0x857A, 0x5387, - 0x857B, 0x5388, 0x857C, 0x538A, 0x857D, 0x538E, 0x857E, 0x538F, - 0x8580, 0x5390, 0x8581, 0x5391, 0x8582, 0x5392, 0x8583, 0x5393, - 0x8584, 0x5394, 0x8585, 0x5396, 0x8586, 0x5397, 0x8587, 0x5399, - 0x8588, 0x539B, 0x8589, 0x539C, 0x858A, 0x539E, 0x858B, 0x53A0, - 0x858C, 0x53A1, 0x858D, 0x53A4, 0x858E, 0x53A7, 0x858F, 0x53AA, - 0x8590, 0x53AB, 0x8591, 0x53AC, 0x8592, 0x53AD, 0x8593, 0x53AF, - 0x8594, 0x53B0, 0x8595, 0x53B1, 0x8596, 0x53B2, 0x8597, 0x53B3, - 0x8598, 0x53B4, 0x8599, 0x53B5, 0x859A, 0x53B7, 0x859B, 0x53B8, - 0x859C, 0x53B9, 0x859D, 0x53BA, 0x859E, 0x53BC, 0x859F, 0x53BD, - 0x85A0, 0x53BE, 0x85A1, 0x53C0, 0x85A2, 0x53C3, 0x85A3, 0x53C4, - 0x85A4, 0x53C5, 0x85A5, 0x53C6, 0x85A6, 0x53C7, 0x85A7, 0x53CE, - 0x85A8, 0x53CF, 0x85A9, 0x53D0, 0x85AA, 0x53D2, 0x85AB, 0x53D3, - 0x85AC, 0x53D5, 0x85AD, 0x53DA, 0x85AE, 0x53DC, 0x85AF, 0x53DD, - 0x85B0, 0x53DE, 0x85B1, 0x53E1, 0x85B2, 0x53E2, 0x85B3, 0x53E7, - 0x85B4, 0x53F4, 0x85B5, 0x53FA, 0x85B6, 0x53FE, 0x85B7, 0x53FF, - 0x85B8, 0x5400, 0x85B9, 0x5402, 0x85BA, 0x5405, 0x85BB, 0x5407, - 0x85BC, 0x540B, 0x85BD, 0x5414, 0x85BE, 0x5418, 0x85BF, 0x5419, - 0x85C0, 0x541A, 0x85C1, 0x541C, 0x85C2, 0x5422, 0x85C3, 0x5424, - 0x85C4, 0x5425, 0x85C5, 0x542A, 0x85C6, 0x5430, 0x85C7, 0x5433, - 0x85C8, 0x5436, 0x85C9, 0x5437, 0x85CA, 0x543A, 0x85CB, 0x543D, - 0x85CC, 0x543F, 0x85CD, 0x5441, 0x85CE, 0x5442, 0x85CF, 0x5444, - 0x85D0, 0x5445, 0x85D1, 0x5447, 0x85D2, 0x5449, 0x85D3, 0x544C, - 0x85D4, 0x544D, 0x85D5, 0x544E, 0x85D6, 0x544F, 0x85D7, 0x5451, - 0x85D8, 0x545A, 0x85D9, 0x545D, 0x85DA, 0x545E, 0x85DB, 0x545F, - 0x85DC, 0x5460, 0x85DD, 0x5461, 0x85DE, 0x5463, 0x85DF, 0x5465, - 0x85E0, 0x5467, 0x85E1, 0x5469, 0x85E2, 0x546A, 0x85E3, 0x546B, - 0x85E4, 0x546C, 0x85E5, 0x546D, 0x85E6, 0x546E, 0x85E7, 0x546F, - 0x85E8, 0x5470, 0x85E9, 0x5474, 0x85EA, 0x5479, 0x85EB, 0x547A, - 0x85EC, 0x547E, 0x85ED, 0x547F, 0x85EE, 0x5481, 0x85EF, 0x5483, - 0x85F0, 0x5485, 0x85F1, 0x5487, 0x85F2, 0x5488, 0x85F3, 0x5489, - 0x85F4, 0x548A, 0x85F5, 0x548D, 0x85F6, 0x5491, 0x85F7, 0x5493, - 0x85F8, 0x5497, 0x85F9, 0x5498, 0x85FA, 0x549C, 0x85FB, 0x549E, - 0x85FC, 0x549F, 0x85FD, 0x54A0, 0x85FE, 0x54A1, 0x8640, 0x54A2, - 0x8641, 0x54A5, 0x8642, 0x54AE, 0x8643, 0x54B0, 0x8644, 0x54B2, - 0x8645, 0x54B5, 0x8646, 0x54B6, 0x8647, 0x54B7, 0x8648, 0x54B9, - 0x8649, 0x54BA, 0x864A, 0x54BC, 0x864B, 0x54BE, 0x864C, 0x54C3, - 0x864D, 0x54C5, 0x864E, 0x54CA, 0x864F, 0x54CB, 0x8650, 0x54D6, - 0x8651, 0x54D8, 0x8652, 0x54DB, 0x8653, 0x54E0, 0x8654, 0x54E1, - 0x8655, 0x54E2, 0x8656, 0x54E3, 0x8657, 0x54E4, 0x8658, 0x54EB, - 0x8659, 0x54EC, 0x865A, 0x54EF, 0x865B, 0x54F0, 0x865C, 0x54F1, - 0x865D, 0x54F4, 0x865E, 0x54F5, 0x865F, 0x54F6, 0x8660, 0x54F7, - 0x8661, 0x54F8, 0x8662, 0x54F9, 0x8663, 0x54FB, 0x8664, 0x54FE, - 0x8665, 0x5500, 0x8666, 0x5502, 0x8667, 0x5503, 0x8668, 0x5504, - 0x8669, 0x5505, 0x866A, 0x5508, 0x866B, 0x550A, 0x866C, 0x550B, - 0x866D, 0x550C, 0x866E, 0x550D, 0x866F, 0x550E, 0x8670, 0x5512, - 0x8671, 0x5513, 0x8672, 0x5515, 0x8673, 0x5516, 0x8674, 0x5517, - 0x8675, 0x5518, 0x8676, 0x5519, 0x8677, 0x551A, 0x8678, 0x551C, - 0x8679, 0x551D, 0x867A, 0x551E, 0x867B, 0x551F, 0x867C, 0x5521, - 0x867D, 0x5525, 0x867E, 0x5526, 0x8680, 0x5528, 0x8681, 0x5529, - 0x8682, 0x552B, 0x8683, 0x552D, 0x8684, 0x5532, 0x8685, 0x5534, - 0x8686, 0x5535, 0x8687, 0x5536, 0x8688, 0x5538, 0x8689, 0x5539, - 0x868A, 0x553A, 0x868B, 0x553B, 0x868C, 0x553D, 0x868D, 0x5540, - 0x868E, 0x5542, 0x868F, 0x5545, 0x8690, 0x5547, 0x8691, 0x5548, - 0x8692, 0x554B, 0x8693, 0x554C, 0x8694, 0x554D, 0x8695, 0x554E, - 0x8696, 0x554F, 0x8697, 0x5551, 0x8698, 0x5552, 0x8699, 0x5553, - 0x869A, 0x5554, 0x869B, 0x5557, 0x869C, 0x5558, 0x869D, 0x5559, - 0x869E, 0x555A, 0x869F, 0x555B, 0x86A0, 0x555D, 0x86A1, 0x555E, - 0x86A2, 0x555F, 0x86A3, 0x5560, 0x86A4, 0x5562, 0x86A5, 0x5563, - 0x86A6, 0x5568, 0x86A7, 0x5569, 0x86A8, 0x556B, 0x86A9, 0x556F, - 0x86AA, 0x5570, 0x86AB, 0x5571, 0x86AC, 0x5572, 0x86AD, 0x5573, - 0x86AE, 0x5574, 0x86AF, 0x5579, 0x86B0, 0x557A, 0x86B1, 0x557D, - 0x86B2, 0x557F, 0x86B3, 0x5585, 0x86B4, 0x5586, 0x86B5, 0x558C, - 0x86B6, 0x558D, 0x86B7, 0x558E, 0x86B8, 0x5590, 0x86B9, 0x5592, - 0x86BA, 0x5593, 0x86BB, 0x5595, 0x86BC, 0x5596, 0x86BD, 0x5597, - 0x86BE, 0x559A, 0x86BF, 0x559B, 0x86C0, 0x559E, 0x86C1, 0x55A0, - 0x86C2, 0x55A1, 0x86C3, 0x55A2, 0x86C4, 0x55A3, 0x86C5, 0x55A4, - 0x86C6, 0x55A5, 0x86C7, 0x55A6, 0x86C8, 0x55A8, 0x86C9, 0x55A9, - 0x86CA, 0x55AA, 0x86CB, 0x55AB, 0x86CC, 0x55AC, 0x86CD, 0x55AD, - 0x86CE, 0x55AE, 0x86CF, 0x55AF, 0x86D0, 0x55B0, 0x86D1, 0x55B2, - 0x86D2, 0x55B4, 0x86D3, 0x55B6, 0x86D4, 0x55B8, 0x86D5, 0x55BA, - 0x86D6, 0x55BC, 0x86D7, 0x55BF, 0x86D8, 0x55C0, 0x86D9, 0x55C1, - 0x86DA, 0x55C2, 0x86DB, 0x55C3, 0x86DC, 0x55C6, 0x86DD, 0x55C7, - 0x86DE, 0x55C8, 0x86DF, 0x55CA, 0x86E0, 0x55CB, 0x86E1, 0x55CE, - 0x86E2, 0x55CF, 0x86E3, 0x55D0, 0x86E4, 0x55D5, 0x86E5, 0x55D7, - 0x86E6, 0x55D8, 0x86E7, 0x55D9, 0x86E8, 0x55DA, 0x86E9, 0x55DB, - 0x86EA, 0x55DE, 0x86EB, 0x55E0, 0x86EC, 0x55E2, 0x86ED, 0x55E7, - 0x86EE, 0x55E9, 0x86EF, 0x55ED, 0x86F0, 0x55EE, 0x86F1, 0x55F0, - 0x86F2, 0x55F1, 0x86F3, 0x55F4, 0x86F4, 0x55F6, 0x86F5, 0x55F8, - 0x86F6, 0x55F9, 0x86F7, 0x55FA, 0x86F8, 0x55FB, 0x86F9, 0x55FC, - 0x86FA, 0x55FF, 0x86FB, 0x5602, 0x86FC, 0x5603, 0x86FD, 0x5604, - 0x86FE, 0x5605, 0x8740, 0x5606, 0x8741, 0x5607, 0x8742, 0x560A, - 0x8743, 0x560B, 0x8744, 0x560D, 0x8745, 0x5610, 0x8746, 0x5611, - 0x8747, 0x5612, 0x8748, 0x5613, 0x8749, 0x5614, 0x874A, 0x5615, - 0x874B, 0x5616, 0x874C, 0x5617, 0x874D, 0x5619, 0x874E, 0x561A, - 0x874F, 0x561C, 0x8750, 0x561D, 0x8751, 0x5620, 0x8752, 0x5621, - 0x8753, 0x5622, 0x8754, 0x5625, 0x8755, 0x5626, 0x8756, 0x5628, - 0x8757, 0x5629, 0x8758, 0x562A, 0x8759, 0x562B, 0x875A, 0x562E, - 0x875B, 0x562F, 0x875C, 0x5630, 0x875D, 0x5633, 0x875E, 0x5635, - 0x875F, 0x5637, 0x8760, 0x5638, 0x8761, 0x563A, 0x8762, 0x563C, - 0x8763, 0x563D, 0x8764, 0x563E, 0x8765, 0x5640, 0x8766, 0x5641, - 0x8767, 0x5642, 0x8768, 0x5643, 0x8769, 0x5644, 0x876A, 0x5645, - 0x876B, 0x5646, 0x876C, 0x5647, 0x876D, 0x5648, 0x876E, 0x5649, - 0x876F, 0x564A, 0x8770, 0x564B, 0x8771, 0x564F, 0x8772, 0x5650, - 0x8773, 0x5651, 0x8774, 0x5652, 0x8775, 0x5653, 0x8776, 0x5655, - 0x8777, 0x5656, 0x8778, 0x565A, 0x8779, 0x565B, 0x877A, 0x565D, - 0x877B, 0x565E, 0x877C, 0x565F, 0x877D, 0x5660, 0x877E, 0x5661, - 0x8780, 0x5663, 0x8781, 0x5665, 0x8782, 0x5666, 0x8783, 0x5667, - 0x8784, 0x566D, 0x8785, 0x566E, 0x8786, 0x566F, 0x8787, 0x5670, - 0x8788, 0x5672, 0x8789, 0x5673, 0x878A, 0x5674, 0x878B, 0x5675, - 0x878C, 0x5677, 0x878D, 0x5678, 0x878E, 0x5679, 0x878F, 0x567A, - 0x8790, 0x567D, 0x8791, 0x567E, 0x8792, 0x567F, 0x8793, 0x5680, - 0x8794, 0x5681, 0x8795, 0x5682, 0x8796, 0x5683, 0x8797, 0x5684, - 0x8798, 0x5687, 0x8799, 0x5688, 0x879A, 0x5689, 0x879B, 0x568A, - 0x879C, 0x568B, 0x879D, 0x568C, 0x879E, 0x568D, 0x879F, 0x5690, - 0x87A0, 0x5691, 0x87A1, 0x5692, 0x87A2, 0x5694, 0x87A3, 0x5695, - 0x87A4, 0x5696, 0x87A5, 0x5697, 0x87A6, 0x5698, 0x87A7, 0x5699, - 0x87A8, 0x569A, 0x87A9, 0x569B, 0x87AA, 0x569C, 0x87AB, 0x569D, - 0x87AC, 0x569E, 0x87AD, 0x569F, 0x87AE, 0x56A0, 0x87AF, 0x56A1, - 0x87B0, 0x56A2, 0x87B1, 0x56A4, 0x87B2, 0x56A5, 0x87B3, 0x56A6, - 0x87B4, 0x56A7, 0x87B5, 0x56A8, 0x87B6, 0x56A9, 0x87B7, 0x56AA, - 0x87B8, 0x56AB, 0x87B9, 0x56AC, 0x87BA, 0x56AD, 0x87BB, 0x56AE, - 0x87BC, 0x56B0, 0x87BD, 0x56B1, 0x87BE, 0x56B2, 0x87BF, 0x56B3, - 0x87C0, 0x56B4, 0x87C1, 0x56B5, 0x87C2, 0x56B6, 0x87C3, 0x56B8, - 0x87C4, 0x56B9, 0x87C5, 0x56BA, 0x87C6, 0x56BB, 0x87C7, 0x56BD, - 0x87C8, 0x56BE, 0x87C9, 0x56BF, 0x87CA, 0x56C0, 0x87CB, 0x56C1, - 0x87CC, 0x56C2, 0x87CD, 0x56C3, 0x87CE, 0x56C4, 0x87CF, 0x56C5, - 0x87D0, 0x56C6, 0x87D1, 0x56C7, 0x87D2, 0x56C8, 0x87D3, 0x56C9, - 0x87D4, 0x56CB, 0x87D5, 0x56CC, 0x87D6, 0x56CD, 0x87D7, 0x56CE, - 0x87D8, 0x56CF, 0x87D9, 0x56D0, 0x87DA, 0x56D1, 0x87DB, 0x56D2, - 0x87DC, 0x56D3, 0x87DD, 0x56D5, 0x87DE, 0x56D6, 0x87DF, 0x56D8, - 0x87E0, 0x56D9, 0x87E1, 0x56DC, 0x87E2, 0x56E3, 0x87E3, 0x56E5, - 0x87E4, 0x56E6, 0x87E5, 0x56E7, 0x87E6, 0x56E8, 0x87E7, 0x56E9, - 0x87E8, 0x56EA, 0x87E9, 0x56EC, 0x87EA, 0x56EE, 0x87EB, 0x56EF, - 0x87EC, 0x56F2, 0x87ED, 0x56F3, 0x87EE, 0x56F6, 0x87EF, 0x56F7, - 0x87F0, 0x56F8, 0x87F1, 0x56FB, 0x87F2, 0x56FC, 0x87F3, 0x5700, - 0x87F4, 0x5701, 0x87F5, 0x5702, 0x87F6, 0x5705, 0x87F7, 0x5707, - 0x87F8, 0x570B, 0x87F9, 0x570C, 0x87FA, 0x570D, 0x87FB, 0x570E, - 0x87FC, 0x570F, 0x87FD, 0x5710, 0x87FE, 0x5711, 0x8840, 0x5712, - 0x8841, 0x5713, 0x8842, 0x5714, 0x8843, 0x5715, 0x8844, 0x5716, - 0x8845, 0x5717, 0x8846, 0x5718, 0x8847, 0x5719, 0x8848, 0x571A, - 0x8849, 0x571B, 0x884A, 0x571D, 0x884B, 0x571E, 0x884C, 0x5720, - 0x884D, 0x5721, 0x884E, 0x5722, 0x884F, 0x5724, 0x8850, 0x5725, - 0x8851, 0x5726, 0x8852, 0x5727, 0x8853, 0x572B, 0x8854, 0x5731, - 0x8855, 0x5732, 0x8856, 0x5734, 0x8857, 0x5735, 0x8858, 0x5736, - 0x8859, 0x5737, 0x885A, 0x5738, 0x885B, 0x573C, 0x885C, 0x573D, - 0x885D, 0x573F, 0x885E, 0x5741, 0x885F, 0x5743, 0x8860, 0x5744, - 0x8861, 0x5745, 0x8862, 0x5746, 0x8863, 0x5748, 0x8864, 0x5749, - 0x8865, 0x574B, 0x8866, 0x5752, 0x8867, 0x5753, 0x8868, 0x5754, - 0x8869, 0x5755, 0x886A, 0x5756, 0x886B, 0x5758, 0x886C, 0x5759, - 0x886D, 0x5762, 0x886E, 0x5763, 0x886F, 0x5765, 0x8870, 0x5767, - 0x8871, 0x576C, 0x8872, 0x576E, 0x8873, 0x5770, 0x8874, 0x5771, - 0x8875, 0x5772, 0x8876, 0x5774, 0x8877, 0x5775, 0x8878, 0x5778, - 0x8879, 0x5779, 0x887A, 0x577A, 0x887B, 0x577D, 0x887C, 0x577E, - 0x887D, 0x577F, 0x887E, 0x5780, 0x8880, 0x5781, 0x8881, 0x5787, - 0x8882, 0x5788, 0x8883, 0x5789, 0x8884, 0x578A, 0x8885, 0x578D, - 0x8886, 0x578E, 0x8887, 0x578F, 0x8888, 0x5790, 0x8889, 0x5791, - 0x888A, 0x5794, 0x888B, 0x5795, 0x888C, 0x5796, 0x888D, 0x5797, - 0x888E, 0x5798, 0x888F, 0x5799, 0x8890, 0x579A, 0x8891, 0x579C, - 0x8892, 0x579D, 0x8893, 0x579E, 0x8894, 0x579F, 0x8895, 0x57A5, - 0x8896, 0x57A8, 0x8897, 0x57AA, 0x8898, 0x57AC, 0x8899, 0x57AF, - 0x889A, 0x57B0, 0x889B, 0x57B1, 0x889C, 0x57B3, 0x889D, 0x57B5, - 0x889E, 0x57B6, 0x889F, 0x57B7, 0x88A0, 0x57B9, 0x88A1, 0x57BA, - 0x88A2, 0x57BB, 0x88A3, 0x57BC, 0x88A4, 0x57BD, 0x88A5, 0x57BE, - 0x88A6, 0x57BF, 0x88A7, 0x57C0, 0x88A8, 0x57C1, 0x88A9, 0x57C4, - 0x88AA, 0x57C5, 0x88AB, 0x57C6, 0x88AC, 0x57C7, 0x88AD, 0x57C8, - 0x88AE, 0x57C9, 0x88AF, 0x57CA, 0x88B0, 0x57CC, 0x88B1, 0x57CD, - 0x88B2, 0x57D0, 0x88B3, 0x57D1, 0x88B4, 0x57D3, 0x88B5, 0x57D6, - 0x88B6, 0x57D7, 0x88B7, 0x57DB, 0x88B8, 0x57DC, 0x88B9, 0x57DE, - 0x88BA, 0x57E1, 0x88BB, 0x57E2, 0x88BC, 0x57E3, 0x88BD, 0x57E5, - 0x88BE, 0x57E6, 0x88BF, 0x57E7, 0x88C0, 0x57E8, 0x88C1, 0x57E9, - 0x88C2, 0x57EA, 0x88C3, 0x57EB, 0x88C4, 0x57EC, 0x88C5, 0x57EE, - 0x88C6, 0x57F0, 0x88C7, 0x57F1, 0x88C8, 0x57F2, 0x88C9, 0x57F3, - 0x88CA, 0x57F5, 0x88CB, 0x57F6, 0x88CC, 0x57F7, 0x88CD, 0x57FB, - 0x88CE, 0x57FC, 0x88CF, 0x57FE, 0x88D0, 0x57FF, 0x88D1, 0x5801, - 0x88D2, 0x5803, 0x88D3, 0x5804, 0x88D4, 0x5805, 0x88D5, 0x5808, - 0x88D6, 0x5809, 0x88D7, 0x580A, 0x88D8, 0x580C, 0x88D9, 0x580E, - 0x88DA, 0x580F, 0x88DB, 0x5810, 0x88DC, 0x5812, 0x88DD, 0x5813, - 0x88DE, 0x5814, 0x88DF, 0x5816, 0x88E0, 0x5817, 0x88E1, 0x5818, - 0x88E2, 0x581A, 0x88E3, 0x581B, 0x88E4, 0x581C, 0x88E5, 0x581D, - 0x88E6, 0x581F, 0x88E7, 0x5822, 0x88E8, 0x5823, 0x88E9, 0x5825, - 0x88EA, 0x5826, 0x88EB, 0x5827, 0x88EC, 0x5828, 0x88ED, 0x5829, - 0x88EE, 0x582B, 0x88EF, 0x582C, 0x88F0, 0x582D, 0x88F1, 0x582E, - 0x88F2, 0x582F, 0x88F3, 0x5831, 0x88F4, 0x5832, 0x88F5, 0x5833, - 0x88F6, 0x5834, 0x88F7, 0x5836, 0x88F8, 0x5837, 0x88F9, 0x5838, - 0x88FA, 0x5839, 0x88FB, 0x583A, 0x88FC, 0x583B, 0x88FD, 0x583C, - 0x88FE, 0x583D, 0x8940, 0x583E, 0x8941, 0x583F, 0x8942, 0x5840, - 0x8943, 0x5841, 0x8944, 0x5842, 0x8945, 0x5843, 0x8946, 0x5845, - 0x8947, 0x5846, 0x8948, 0x5847, 0x8949, 0x5848, 0x894A, 0x5849, - 0x894B, 0x584A, 0x894C, 0x584B, 0x894D, 0x584E, 0x894E, 0x584F, - 0x894F, 0x5850, 0x8950, 0x5852, 0x8951, 0x5853, 0x8952, 0x5855, - 0x8953, 0x5856, 0x8954, 0x5857, 0x8955, 0x5859, 0x8956, 0x585A, - 0x8957, 0x585B, 0x8958, 0x585C, 0x8959, 0x585D, 0x895A, 0x585F, - 0x895B, 0x5860, 0x895C, 0x5861, 0x895D, 0x5862, 0x895E, 0x5863, - 0x895F, 0x5864, 0x8960, 0x5866, 0x8961, 0x5867, 0x8962, 0x5868, - 0x8963, 0x5869, 0x8964, 0x586A, 0x8965, 0x586D, 0x8966, 0x586E, - 0x8967, 0x586F, 0x8968, 0x5870, 0x8969, 0x5871, 0x896A, 0x5872, - 0x896B, 0x5873, 0x896C, 0x5874, 0x896D, 0x5875, 0x896E, 0x5876, - 0x896F, 0x5877, 0x8970, 0x5878, 0x8971, 0x5879, 0x8972, 0x587A, - 0x8973, 0x587B, 0x8974, 0x587C, 0x8975, 0x587D, 0x8976, 0x587F, - 0x8977, 0x5882, 0x8978, 0x5884, 0x8979, 0x5886, 0x897A, 0x5887, - 0x897B, 0x5888, 0x897C, 0x588A, 0x897D, 0x588B, 0x897E, 0x588C, - 0x8980, 0x588D, 0x8981, 0x588E, 0x8982, 0x588F, 0x8983, 0x5890, - 0x8984, 0x5891, 0x8985, 0x5894, 0x8986, 0x5895, 0x8987, 0x5896, - 0x8988, 0x5897, 0x8989, 0x5898, 0x898A, 0x589B, 0x898B, 0x589C, - 0x898C, 0x589D, 0x898D, 0x58A0, 0x898E, 0x58A1, 0x898F, 0x58A2, - 0x8990, 0x58A3, 0x8991, 0x58A4, 0x8992, 0x58A5, 0x8993, 0x58A6, - 0x8994, 0x58A7, 0x8995, 0x58AA, 0x8996, 0x58AB, 0x8997, 0x58AC, - 0x8998, 0x58AD, 0x8999, 0x58AE, 0x899A, 0x58AF, 0x899B, 0x58B0, - 0x899C, 0x58B1, 0x899D, 0x58B2, 0x899E, 0x58B3, 0x899F, 0x58B4, - 0x89A0, 0x58B5, 0x89A1, 0x58B6, 0x89A2, 0x58B7, 0x89A3, 0x58B8, - 0x89A4, 0x58B9, 0x89A5, 0x58BA, 0x89A6, 0x58BB, 0x89A7, 0x58BD, - 0x89A8, 0x58BE, 0x89A9, 0x58BF, 0x89AA, 0x58C0, 0x89AB, 0x58C2, - 0x89AC, 0x58C3, 0x89AD, 0x58C4, 0x89AE, 0x58C6, 0x89AF, 0x58C7, - 0x89B0, 0x58C8, 0x89B1, 0x58C9, 0x89B2, 0x58CA, 0x89B3, 0x58CB, - 0x89B4, 0x58CC, 0x89B5, 0x58CD, 0x89B6, 0x58CE, 0x89B7, 0x58CF, - 0x89B8, 0x58D0, 0x89B9, 0x58D2, 0x89BA, 0x58D3, 0x89BB, 0x58D4, - 0x89BC, 0x58D6, 0x89BD, 0x58D7, 0x89BE, 0x58D8, 0x89BF, 0x58D9, - 0x89C0, 0x58DA, 0x89C1, 0x58DB, 0x89C2, 0x58DC, 0x89C3, 0x58DD, - 0x89C4, 0x58DE, 0x89C5, 0x58DF, 0x89C6, 0x58E0, 0x89C7, 0x58E1, - 0x89C8, 0x58E2, 0x89C9, 0x58E3, 0x89CA, 0x58E5, 0x89CB, 0x58E6, - 0x89CC, 0x58E7, 0x89CD, 0x58E8, 0x89CE, 0x58E9, 0x89CF, 0x58EA, - 0x89D0, 0x58ED, 0x89D1, 0x58EF, 0x89D2, 0x58F1, 0x89D3, 0x58F2, - 0x89D4, 0x58F4, 0x89D5, 0x58F5, 0x89D6, 0x58F7, 0x89D7, 0x58F8, - 0x89D8, 0x58FA, 0x89D9, 0x58FB, 0x89DA, 0x58FC, 0x89DB, 0x58FD, - 0x89DC, 0x58FE, 0x89DD, 0x58FF, 0x89DE, 0x5900, 0x89DF, 0x5901, - 0x89E0, 0x5903, 0x89E1, 0x5905, 0x89E2, 0x5906, 0x89E3, 0x5908, - 0x89E4, 0x5909, 0x89E5, 0x590A, 0x89E6, 0x590B, 0x89E7, 0x590C, - 0x89E8, 0x590E, 0x89E9, 0x5910, 0x89EA, 0x5911, 0x89EB, 0x5912, - 0x89EC, 0x5913, 0x89ED, 0x5917, 0x89EE, 0x5918, 0x89EF, 0x591B, - 0x89F0, 0x591D, 0x89F1, 0x591E, 0x89F2, 0x5920, 0x89F3, 0x5921, - 0x89F4, 0x5922, 0x89F5, 0x5923, 0x89F6, 0x5926, 0x89F7, 0x5928, - 0x89F8, 0x592C, 0x89F9, 0x5930, 0x89FA, 0x5932, 0x89FB, 0x5933, - 0x89FC, 0x5935, 0x89FD, 0x5936, 0x89FE, 0x593B, 0x8A40, 0x593D, - 0x8A41, 0x593E, 0x8A42, 0x593F, 0x8A43, 0x5940, 0x8A44, 0x5943, - 0x8A45, 0x5945, 0x8A46, 0x5946, 0x8A47, 0x594A, 0x8A48, 0x594C, - 0x8A49, 0x594D, 0x8A4A, 0x5950, 0x8A4B, 0x5952, 0x8A4C, 0x5953, - 0x8A4D, 0x5959, 0x8A4E, 0x595B, 0x8A4F, 0x595C, 0x8A50, 0x595D, - 0x8A51, 0x595E, 0x8A52, 0x595F, 0x8A53, 0x5961, 0x8A54, 0x5963, - 0x8A55, 0x5964, 0x8A56, 0x5966, 0x8A57, 0x5967, 0x8A58, 0x5968, - 0x8A59, 0x5969, 0x8A5A, 0x596A, 0x8A5B, 0x596B, 0x8A5C, 0x596C, - 0x8A5D, 0x596D, 0x8A5E, 0x596E, 0x8A5F, 0x596F, 0x8A60, 0x5970, - 0x8A61, 0x5971, 0x8A62, 0x5972, 0x8A63, 0x5975, 0x8A64, 0x5977, - 0x8A65, 0x597A, 0x8A66, 0x597B, 0x8A67, 0x597C, 0x8A68, 0x597E, - 0x8A69, 0x597F, 0x8A6A, 0x5980, 0x8A6B, 0x5985, 0x8A6C, 0x5989, - 0x8A6D, 0x598B, 0x8A6E, 0x598C, 0x8A6F, 0x598E, 0x8A70, 0x598F, - 0x8A71, 0x5990, 0x8A72, 0x5991, 0x8A73, 0x5994, 0x8A74, 0x5995, - 0x8A75, 0x5998, 0x8A76, 0x599A, 0x8A77, 0x599B, 0x8A78, 0x599C, - 0x8A79, 0x599D, 0x8A7A, 0x599F, 0x8A7B, 0x59A0, 0x8A7C, 0x59A1, - 0x8A7D, 0x59A2, 0x8A7E, 0x59A6, 0x8A80, 0x59A7, 0x8A81, 0x59AC, - 0x8A82, 0x59AD, 0x8A83, 0x59B0, 0x8A84, 0x59B1, 0x8A85, 0x59B3, - 0x8A86, 0x59B4, 0x8A87, 0x59B5, 0x8A88, 0x59B6, 0x8A89, 0x59B7, - 0x8A8A, 0x59B8, 0x8A8B, 0x59BA, 0x8A8C, 0x59BC, 0x8A8D, 0x59BD, - 0x8A8E, 0x59BF, 0x8A8F, 0x59C0, 0x8A90, 0x59C1, 0x8A91, 0x59C2, - 0x8A92, 0x59C3, 0x8A93, 0x59C4, 0x8A94, 0x59C5, 0x8A95, 0x59C7, - 0x8A96, 0x59C8, 0x8A97, 0x59C9, 0x8A98, 0x59CC, 0x8A99, 0x59CD, - 0x8A9A, 0x59CE, 0x8A9B, 0x59CF, 0x8A9C, 0x59D5, 0x8A9D, 0x59D6, - 0x8A9E, 0x59D9, 0x8A9F, 0x59DB, 0x8AA0, 0x59DE, 0x8AA1, 0x59DF, - 0x8AA2, 0x59E0, 0x8AA3, 0x59E1, 0x8AA4, 0x59E2, 0x8AA5, 0x59E4, - 0x8AA6, 0x59E6, 0x8AA7, 0x59E7, 0x8AA8, 0x59E9, 0x8AA9, 0x59EA, - 0x8AAA, 0x59EB, 0x8AAB, 0x59ED, 0x8AAC, 0x59EE, 0x8AAD, 0x59EF, - 0x8AAE, 0x59F0, 0x8AAF, 0x59F1, 0x8AB0, 0x59F2, 0x8AB1, 0x59F3, - 0x8AB2, 0x59F4, 0x8AB3, 0x59F5, 0x8AB4, 0x59F6, 0x8AB5, 0x59F7, - 0x8AB6, 0x59F8, 0x8AB7, 0x59FA, 0x8AB8, 0x59FC, 0x8AB9, 0x59FD, - 0x8ABA, 0x59FE, 0x8ABB, 0x5A00, 0x8ABC, 0x5A02, 0x8ABD, 0x5A0A, - 0x8ABE, 0x5A0B, 0x8ABF, 0x5A0D, 0x8AC0, 0x5A0E, 0x8AC1, 0x5A0F, - 0x8AC2, 0x5A10, 0x8AC3, 0x5A12, 0x8AC4, 0x5A14, 0x8AC5, 0x5A15, - 0x8AC6, 0x5A16, 0x8AC7, 0x5A17, 0x8AC8, 0x5A19, 0x8AC9, 0x5A1A, - 0x8ACA, 0x5A1B, 0x8ACB, 0x5A1D, 0x8ACC, 0x5A1E, 0x8ACD, 0x5A21, - 0x8ACE, 0x5A22, 0x8ACF, 0x5A24, 0x8AD0, 0x5A26, 0x8AD1, 0x5A27, - 0x8AD2, 0x5A28, 0x8AD3, 0x5A2A, 0x8AD4, 0x5A2B, 0x8AD5, 0x5A2C, - 0x8AD6, 0x5A2D, 0x8AD7, 0x5A2E, 0x8AD8, 0x5A2F, 0x8AD9, 0x5A30, - 0x8ADA, 0x5A33, 0x8ADB, 0x5A35, 0x8ADC, 0x5A37, 0x8ADD, 0x5A38, - 0x8ADE, 0x5A39, 0x8ADF, 0x5A3A, 0x8AE0, 0x5A3B, 0x8AE1, 0x5A3D, - 0x8AE2, 0x5A3E, 0x8AE3, 0x5A3F, 0x8AE4, 0x5A41, 0x8AE5, 0x5A42, - 0x8AE6, 0x5A43, 0x8AE7, 0x5A44, 0x8AE8, 0x5A45, 0x8AE9, 0x5A47, - 0x8AEA, 0x5A48, 0x8AEB, 0x5A4B, 0x8AEC, 0x5A4C, 0x8AED, 0x5A4D, - 0x8AEE, 0x5A4E, 0x8AEF, 0x5A4F, 0x8AF0, 0x5A50, 0x8AF1, 0x5A51, - 0x8AF2, 0x5A52, 0x8AF3, 0x5A53, 0x8AF4, 0x5A54, 0x8AF5, 0x5A56, - 0x8AF6, 0x5A57, 0x8AF7, 0x5A58, 0x8AF8, 0x5A59, 0x8AF9, 0x5A5B, - 0x8AFA, 0x5A5C, 0x8AFB, 0x5A5D, 0x8AFC, 0x5A5E, 0x8AFD, 0x5A5F, - 0x8AFE, 0x5A60, 0x8B40, 0x5A61, 0x8B41, 0x5A63, 0x8B42, 0x5A64, - 0x8B43, 0x5A65, 0x8B44, 0x5A66, 0x8B45, 0x5A68, 0x8B46, 0x5A69, - 0x8B47, 0x5A6B, 0x8B48, 0x5A6C, 0x8B49, 0x5A6D, 0x8B4A, 0x5A6E, - 0x8B4B, 0x5A6F, 0x8B4C, 0x5A70, 0x8B4D, 0x5A71, 0x8B4E, 0x5A72, - 0x8B4F, 0x5A73, 0x8B50, 0x5A78, 0x8B51, 0x5A79, 0x8B52, 0x5A7B, - 0x8B53, 0x5A7C, 0x8B54, 0x5A7D, 0x8B55, 0x5A7E, 0x8B56, 0x5A80, - 0x8B57, 0x5A81, 0x8B58, 0x5A82, 0x8B59, 0x5A83, 0x8B5A, 0x5A84, - 0x8B5B, 0x5A85, 0x8B5C, 0x5A86, 0x8B5D, 0x5A87, 0x8B5E, 0x5A88, - 0x8B5F, 0x5A89, 0x8B60, 0x5A8A, 0x8B61, 0x5A8B, 0x8B62, 0x5A8C, - 0x8B63, 0x5A8D, 0x8B64, 0x5A8E, 0x8B65, 0x5A8F, 0x8B66, 0x5A90, - 0x8B67, 0x5A91, 0x8B68, 0x5A93, 0x8B69, 0x5A94, 0x8B6A, 0x5A95, - 0x8B6B, 0x5A96, 0x8B6C, 0x5A97, 0x8B6D, 0x5A98, 0x8B6E, 0x5A99, - 0x8B6F, 0x5A9C, 0x8B70, 0x5A9D, 0x8B71, 0x5A9E, 0x8B72, 0x5A9F, - 0x8B73, 0x5AA0, 0x8B74, 0x5AA1, 0x8B75, 0x5AA2, 0x8B76, 0x5AA3, - 0x8B77, 0x5AA4, 0x8B78, 0x5AA5, 0x8B79, 0x5AA6, 0x8B7A, 0x5AA7, - 0x8B7B, 0x5AA8, 0x8B7C, 0x5AA9, 0x8B7D, 0x5AAB, 0x8B7E, 0x5AAC, - 0x8B80, 0x5AAD, 0x8B81, 0x5AAE, 0x8B82, 0x5AAF, 0x8B83, 0x5AB0, - 0x8B84, 0x5AB1, 0x8B85, 0x5AB4, 0x8B86, 0x5AB6, 0x8B87, 0x5AB7, - 0x8B88, 0x5AB9, 0x8B89, 0x5ABA, 0x8B8A, 0x5ABB, 0x8B8B, 0x5ABC, - 0x8B8C, 0x5ABD, 0x8B8D, 0x5ABF, 0x8B8E, 0x5AC0, 0x8B8F, 0x5AC3, - 0x8B90, 0x5AC4, 0x8B91, 0x5AC5, 0x8B92, 0x5AC6, 0x8B93, 0x5AC7, - 0x8B94, 0x5AC8, 0x8B95, 0x5ACA, 0x8B96, 0x5ACB, 0x8B97, 0x5ACD, - 0x8B98, 0x5ACE, 0x8B99, 0x5ACF, 0x8B9A, 0x5AD0, 0x8B9B, 0x5AD1, - 0x8B9C, 0x5AD3, 0x8B9D, 0x5AD5, 0x8B9E, 0x5AD7, 0x8B9F, 0x5AD9, - 0x8BA0, 0x5ADA, 0x8BA1, 0x5ADB, 0x8BA2, 0x5ADD, 0x8BA3, 0x5ADE, - 0x8BA4, 0x5ADF, 0x8BA5, 0x5AE2, 0x8BA6, 0x5AE4, 0x8BA7, 0x5AE5, - 0x8BA8, 0x5AE7, 0x8BA9, 0x5AE8, 0x8BAA, 0x5AEA, 0x8BAB, 0x5AEC, - 0x8BAC, 0x5AED, 0x8BAD, 0x5AEE, 0x8BAE, 0x5AEF, 0x8BAF, 0x5AF0, - 0x8BB0, 0x5AF2, 0x8BB1, 0x5AF3, 0x8BB2, 0x5AF4, 0x8BB3, 0x5AF5, - 0x8BB4, 0x5AF6, 0x8BB5, 0x5AF7, 0x8BB6, 0x5AF8, 0x8BB7, 0x5AF9, - 0x8BB8, 0x5AFA, 0x8BB9, 0x5AFB, 0x8BBA, 0x5AFC, 0x8BBB, 0x5AFD, - 0x8BBC, 0x5AFE, 0x8BBD, 0x5AFF, 0x8BBE, 0x5B00, 0x8BBF, 0x5B01, - 0x8BC0, 0x5B02, 0x8BC1, 0x5B03, 0x8BC2, 0x5B04, 0x8BC3, 0x5B05, - 0x8BC4, 0x5B06, 0x8BC5, 0x5B07, 0x8BC6, 0x5B08, 0x8BC7, 0x5B0A, - 0x8BC8, 0x5B0B, 0x8BC9, 0x5B0C, 0x8BCA, 0x5B0D, 0x8BCB, 0x5B0E, - 0x8BCC, 0x5B0F, 0x8BCD, 0x5B10, 0x8BCE, 0x5B11, 0x8BCF, 0x5B12, - 0x8BD0, 0x5B13, 0x8BD1, 0x5B14, 0x8BD2, 0x5B15, 0x8BD3, 0x5B18, - 0x8BD4, 0x5B19, 0x8BD5, 0x5B1A, 0x8BD6, 0x5B1B, 0x8BD7, 0x5B1C, - 0x8BD8, 0x5B1D, 0x8BD9, 0x5B1E, 0x8BDA, 0x5B1F, 0x8BDB, 0x5B20, - 0x8BDC, 0x5B21, 0x8BDD, 0x5B22, 0x8BDE, 0x5B23, 0x8BDF, 0x5B24, - 0x8BE0, 0x5B25, 0x8BE1, 0x5B26, 0x8BE2, 0x5B27, 0x8BE3, 0x5B28, - 0x8BE4, 0x5B29, 0x8BE5, 0x5B2A, 0x8BE6, 0x5B2B, 0x8BE7, 0x5B2C, - 0x8BE8, 0x5B2D, 0x8BE9, 0x5B2E, 0x8BEA, 0x5B2F, 0x8BEB, 0x5B30, - 0x8BEC, 0x5B31, 0x8BED, 0x5B33, 0x8BEE, 0x5B35, 0x8BEF, 0x5B36, - 0x8BF0, 0x5B38, 0x8BF1, 0x5B39, 0x8BF2, 0x5B3A, 0x8BF3, 0x5B3B, - 0x8BF4, 0x5B3C, 0x8BF5, 0x5B3D, 0x8BF6, 0x5B3E, 0x8BF7, 0x5B3F, - 0x8BF8, 0x5B41, 0x8BF9, 0x5B42, 0x8BFA, 0x5B43, 0x8BFB, 0x5B44, - 0x8BFC, 0x5B45, 0x8BFD, 0x5B46, 0x8BFE, 0x5B47, 0x8C40, 0x5B48, - 0x8C41, 0x5B49, 0x8C42, 0x5B4A, 0x8C43, 0x5B4B, 0x8C44, 0x5B4C, - 0x8C45, 0x5B4D, 0x8C46, 0x5B4E, 0x8C47, 0x5B4F, 0x8C48, 0x5B52, - 0x8C49, 0x5B56, 0x8C4A, 0x5B5E, 0x8C4B, 0x5B60, 0x8C4C, 0x5B61, - 0x8C4D, 0x5B67, 0x8C4E, 0x5B68, 0x8C4F, 0x5B6B, 0x8C50, 0x5B6D, - 0x8C51, 0x5B6E, 0x8C52, 0x5B6F, 0x8C53, 0x5B72, 0x8C54, 0x5B74, - 0x8C55, 0x5B76, 0x8C56, 0x5B77, 0x8C57, 0x5B78, 0x8C58, 0x5B79, - 0x8C59, 0x5B7B, 0x8C5A, 0x5B7C, 0x8C5B, 0x5B7E, 0x8C5C, 0x5B7F, - 0x8C5D, 0x5B82, 0x8C5E, 0x5B86, 0x8C5F, 0x5B8A, 0x8C60, 0x5B8D, - 0x8C61, 0x5B8E, 0x8C62, 0x5B90, 0x8C63, 0x5B91, 0x8C64, 0x5B92, - 0x8C65, 0x5B94, 0x8C66, 0x5B96, 0x8C67, 0x5B9F, 0x8C68, 0x5BA7, - 0x8C69, 0x5BA8, 0x8C6A, 0x5BA9, 0x8C6B, 0x5BAC, 0x8C6C, 0x5BAD, - 0x8C6D, 0x5BAE, 0x8C6E, 0x5BAF, 0x8C6F, 0x5BB1, 0x8C70, 0x5BB2, - 0x8C71, 0x5BB7, 0x8C72, 0x5BBA, 0x8C73, 0x5BBB, 0x8C74, 0x5BBC, - 0x8C75, 0x5BC0, 0x8C76, 0x5BC1, 0x8C77, 0x5BC3, 0x8C78, 0x5BC8, - 0x8C79, 0x5BC9, 0x8C7A, 0x5BCA, 0x8C7B, 0x5BCB, 0x8C7C, 0x5BCD, - 0x8C7D, 0x5BCE, 0x8C7E, 0x5BCF, 0x8C80, 0x5BD1, 0x8C81, 0x5BD4, - 0x8C82, 0x5BD5, 0x8C83, 0x5BD6, 0x8C84, 0x5BD7, 0x8C85, 0x5BD8, - 0x8C86, 0x5BD9, 0x8C87, 0x5BDA, 0x8C88, 0x5BDB, 0x8C89, 0x5BDC, - 0x8C8A, 0x5BE0, 0x8C8B, 0x5BE2, 0x8C8C, 0x5BE3, 0x8C8D, 0x5BE6, - 0x8C8E, 0x5BE7, 0x8C8F, 0x5BE9, 0x8C90, 0x5BEA, 0x8C91, 0x5BEB, - 0x8C92, 0x5BEC, 0x8C93, 0x5BED, 0x8C94, 0x5BEF, 0x8C95, 0x5BF1, - 0x8C96, 0x5BF2, 0x8C97, 0x5BF3, 0x8C98, 0x5BF4, 0x8C99, 0x5BF5, - 0x8C9A, 0x5BF6, 0x8C9B, 0x5BF7, 0x8C9C, 0x5BFD, 0x8C9D, 0x5BFE, - 0x8C9E, 0x5C00, 0x8C9F, 0x5C02, 0x8CA0, 0x5C03, 0x8CA1, 0x5C05, - 0x8CA2, 0x5C07, 0x8CA3, 0x5C08, 0x8CA4, 0x5C0B, 0x8CA5, 0x5C0C, - 0x8CA6, 0x5C0D, 0x8CA7, 0x5C0E, 0x8CA8, 0x5C10, 0x8CA9, 0x5C12, - 0x8CAA, 0x5C13, 0x8CAB, 0x5C17, 0x8CAC, 0x5C19, 0x8CAD, 0x5C1B, - 0x8CAE, 0x5C1E, 0x8CAF, 0x5C1F, 0x8CB0, 0x5C20, 0x8CB1, 0x5C21, - 0x8CB2, 0x5C23, 0x8CB3, 0x5C26, 0x8CB4, 0x5C28, 0x8CB5, 0x5C29, - 0x8CB6, 0x5C2A, 0x8CB7, 0x5C2B, 0x8CB8, 0x5C2D, 0x8CB9, 0x5C2E, - 0x8CBA, 0x5C2F, 0x8CBB, 0x5C30, 0x8CBC, 0x5C32, 0x8CBD, 0x5C33, - 0x8CBE, 0x5C35, 0x8CBF, 0x5C36, 0x8CC0, 0x5C37, 0x8CC1, 0x5C43, - 0x8CC2, 0x5C44, 0x8CC3, 0x5C46, 0x8CC4, 0x5C47, 0x8CC5, 0x5C4C, - 0x8CC6, 0x5C4D, 0x8CC7, 0x5C52, 0x8CC8, 0x5C53, 0x8CC9, 0x5C54, - 0x8CCA, 0x5C56, 0x8CCB, 0x5C57, 0x8CCC, 0x5C58, 0x8CCD, 0x5C5A, - 0x8CCE, 0x5C5B, 0x8CCF, 0x5C5C, 0x8CD0, 0x5C5D, 0x8CD1, 0x5C5F, - 0x8CD2, 0x5C62, 0x8CD3, 0x5C64, 0x8CD4, 0x5C67, 0x8CD5, 0x5C68, - 0x8CD6, 0x5C69, 0x8CD7, 0x5C6A, 0x8CD8, 0x5C6B, 0x8CD9, 0x5C6C, - 0x8CDA, 0x5C6D, 0x8CDB, 0x5C70, 0x8CDC, 0x5C72, 0x8CDD, 0x5C73, - 0x8CDE, 0x5C74, 0x8CDF, 0x5C75, 0x8CE0, 0x5C76, 0x8CE1, 0x5C77, - 0x8CE2, 0x5C78, 0x8CE3, 0x5C7B, 0x8CE4, 0x5C7C, 0x8CE5, 0x5C7D, - 0x8CE6, 0x5C7E, 0x8CE7, 0x5C80, 0x8CE8, 0x5C83, 0x8CE9, 0x5C84, - 0x8CEA, 0x5C85, 0x8CEB, 0x5C86, 0x8CEC, 0x5C87, 0x8CED, 0x5C89, - 0x8CEE, 0x5C8A, 0x8CEF, 0x5C8B, 0x8CF0, 0x5C8E, 0x8CF1, 0x5C8F, - 0x8CF2, 0x5C92, 0x8CF3, 0x5C93, 0x8CF4, 0x5C95, 0x8CF5, 0x5C9D, - 0x8CF6, 0x5C9E, 0x8CF7, 0x5C9F, 0x8CF8, 0x5CA0, 0x8CF9, 0x5CA1, - 0x8CFA, 0x5CA4, 0x8CFB, 0x5CA5, 0x8CFC, 0x5CA6, 0x8CFD, 0x5CA7, - 0x8CFE, 0x5CA8, 0x8D40, 0x5CAA, 0x8D41, 0x5CAE, 0x8D42, 0x5CAF, - 0x8D43, 0x5CB0, 0x8D44, 0x5CB2, 0x8D45, 0x5CB4, 0x8D46, 0x5CB6, - 0x8D47, 0x5CB9, 0x8D48, 0x5CBA, 0x8D49, 0x5CBB, 0x8D4A, 0x5CBC, - 0x8D4B, 0x5CBE, 0x8D4C, 0x5CC0, 0x8D4D, 0x5CC2, 0x8D4E, 0x5CC3, - 0x8D4F, 0x5CC5, 0x8D50, 0x5CC6, 0x8D51, 0x5CC7, 0x8D52, 0x5CC8, - 0x8D53, 0x5CC9, 0x8D54, 0x5CCA, 0x8D55, 0x5CCC, 0x8D56, 0x5CCD, - 0x8D57, 0x5CCE, 0x8D58, 0x5CCF, 0x8D59, 0x5CD0, 0x8D5A, 0x5CD1, - 0x8D5B, 0x5CD3, 0x8D5C, 0x5CD4, 0x8D5D, 0x5CD5, 0x8D5E, 0x5CD6, - 0x8D5F, 0x5CD7, 0x8D60, 0x5CD8, 0x8D61, 0x5CDA, 0x8D62, 0x5CDB, - 0x8D63, 0x5CDC, 0x8D64, 0x5CDD, 0x8D65, 0x5CDE, 0x8D66, 0x5CDF, - 0x8D67, 0x5CE0, 0x8D68, 0x5CE2, 0x8D69, 0x5CE3, 0x8D6A, 0x5CE7, - 0x8D6B, 0x5CE9, 0x8D6C, 0x5CEB, 0x8D6D, 0x5CEC, 0x8D6E, 0x5CEE, - 0x8D6F, 0x5CEF, 0x8D70, 0x5CF1, 0x8D71, 0x5CF2, 0x8D72, 0x5CF3, - 0x8D73, 0x5CF4, 0x8D74, 0x5CF5, 0x8D75, 0x5CF6, 0x8D76, 0x5CF7, - 0x8D77, 0x5CF8, 0x8D78, 0x5CF9, 0x8D79, 0x5CFA, 0x8D7A, 0x5CFC, - 0x8D7B, 0x5CFD, 0x8D7C, 0x5CFE, 0x8D7D, 0x5CFF, 0x8D7E, 0x5D00, - 0x8D80, 0x5D01, 0x8D81, 0x5D04, 0x8D82, 0x5D05, 0x8D83, 0x5D08, - 0x8D84, 0x5D09, 0x8D85, 0x5D0A, 0x8D86, 0x5D0B, 0x8D87, 0x5D0C, - 0x8D88, 0x5D0D, 0x8D89, 0x5D0F, 0x8D8A, 0x5D10, 0x8D8B, 0x5D11, - 0x8D8C, 0x5D12, 0x8D8D, 0x5D13, 0x8D8E, 0x5D15, 0x8D8F, 0x5D17, - 0x8D90, 0x5D18, 0x8D91, 0x5D19, 0x8D92, 0x5D1A, 0x8D93, 0x5D1C, - 0x8D94, 0x5D1D, 0x8D95, 0x5D1F, 0x8D96, 0x5D20, 0x8D97, 0x5D21, - 0x8D98, 0x5D22, 0x8D99, 0x5D23, 0x8D9A, 0x5D25, 0x8D9B, 0x5D28, - 0x8D9C, 0x5D2A, 0x8D9D, 0x5D2B, 0x8D9E, 0x5D2C, 0x8D9F, 0x5D2F, - 0x8DA0, 0x5D30, 0x8DA1, 0x5D31, 0x8DA2, 0x5D32, 0x8DA3, 0x5D33, - 0x8DA4, 0x5D35, 0x8DA5, 0x5D36, 0x8DA6, 0x5D37, 0x8DA7, 0x5D38, - 0x8DA8, 0x5D39, 0x8DA9, 0x5D3A, 0x8DAA, 0x5D3B, 0x8DAB, 0x5D3C, - 0x8DAC, 0x5D3F, 0x8DAD, 0x5D40, 0x8DAE, 0x5D41, 0x8DAF, 0x5D42, - 0x8DB0, 0x5D43, 0x8DB1, 0x5D44, 0x8DB2, 0x5D45, 0x8DB3, 0x5D46, - 0x8DB4, 0x5D48, 0x8DB5, 0x5D49, 0x8DB6, 0x5D4D, 0x8DB7, 0x5D4E, - 0x8DB8, 0x5D4F, 0x8DB9, 0x5D50, 0x8DBA, 0x5D51, 0x8DBB, 0x5D52, - 0x8DBC, 0x5D53, 0x8DBD, 0x5D54, 0x8DBE, 0x5D55, 0x8DBF, 0x5D56, - 0x8DC0, 0x5D57, 0x8DC1, 0x5D59, 0x8DC2, 0x5D5A, 0x8DC3, 0x5D5C, - 0x8DC4, 0x5D5E, 0x8DC5, 0x5D5F, 0x8DC6, 0x5D60, 0x8DC7, 0x5D61, - 0x8DC8, 0x5D62, 0x8DC9, 0x5D63, 0x8DCA, 0x5D64, 0x8DCB, 0x5D65, - 0x8DCC, 0x5D66, 0x8DCD, 0x5D67, 0x8DCE, 0x5D68, 0x8DCF, 0x5D6A, - 0x8DD0, 0x5D6D, 0x8DD1, 0x5D6E, 0x8DD2, 0x5D70, 0x8DD3, 0x5D71, - 0x8DD4, 0x5D72, 0x8DD5, 0x5D73, 0x8DD6, 0x5D75, 0x8DD7, 0x5D76, - 0x8DD8, 0x5D77, 0x8DD9, 0x5D78, 0x8DDA, 0x5D79, 0x8DDB, 0x5D7A, - 0x8DDC, 0x5D7B, 0x8DDD, 0x5D7C, 0x8DDE, 0x5D7D, 0x8DDF, 0x5D7E, - 0x8DE0, 0x5D7F, 0x8DE1, 0x5D80, 0x8DE2, 0x5D81, 0x8DE3, 0x5D83, - 0x8DE4, 0x5D84, 0x8DE5, 0x5D85, 0x8DE6, 0x5D86, 0x8DE7, 0x5D87, - 0x8DE8, 0x5D88, 0x8DE9, 0x5D89, 0x8DEA, 0x5D8A, 0x8DEB, 0x5D8B, - 0x8DEC, 0x5D8C, 0x8DED, 0x5D8D, 0x8DEE, 0x5D8E, 0x8DEF, 0x5D8F, - 0x8DF0, 0x5D90, 0x8DF1, 0x5D91, 0x8DF2, 0x5D92, 0x8DF3, 0x5D93, - 0x8DF4, 0x5D94, 0x8DF5, 0x5D95, 0x8DF6, 0x5D96, 0x8DF7, 0x5D97, - 0x8DF8, 0x5D98, 0x8DF9, 0x5D9A, 0x8DFA, 0x5D9B, 0x8DFB, 0x5D9C, - 0x8DFC, 0x5D9E, 0x8DFD, 0x5D9F, 0x8DFE, 0x5DA0, 0x8E40, 0x5DA1, - 0x8E41, 0x5DA2, 0x8E42, 0x5DA3, 0x8E43, 0x5DA4, 0x8E44, 0x5DA5, - 0x8E45, 0x5DA6, 0x8E46, 0x5DA7, 0x8E47, 0x5DA8, 0x8E48, 0x5DA9, - 0x8E49, 0x5DAA, 0x8E4A, 0x5DAB, 0x8E4B, 0x5DAC, 0x8E4C, 0x5DAD, - 0x8E4D, 0x5DAE, 0x8E4E, 0x5DAF, 0x8E4F, 0x5DB0, 0x8E50, 0x5DB1, - 0x8E51, 0x5DB2, 0x8E52, 0x5DB3, 0x8E53, 0x5DB4, 0x8E54, 0x5DB5, - 0x8E55, 0x5DB6, 0x8E56, 0x5DB8, 0x8E57, 0x5DB9, 0x8E58, 0x5DBA, - 0x8E59, 0x5DBB, 0x8E5A, 0x5DBC, 0x8E5B, 0x5DBD, 0x8E5C, 0x5DBE, - 0x8E5D, 0x5DBF, 0x8E5E, 0x5DC0, 0x8E5F, 0x5DC1, 0x8E60, 0x5DC2, - 0x8E61, 0x5DC3, 0x8E62, 0x5DC4, 0x8E63, 0x5DC6, 0x8E64, 0x5DC7, - 0x8E65, 0x5DC8, 0x8E66, 0x5DC9, 0x8E67, 0x5DCA, 0x8E68, 0x5DCB, - 0x8E69, 0x5DCC, 0x8E6A, 0x5DCE, 0x8E6B, 0x5DCF, 0x8E6C, 0x5DD0, - 0x8E6D, 0x5DD1, 0x8E6E, 0x5DD2, 0x8E6F, 0x5DD3, 0x8E70, 0x5DD4, - 0x8E71, 0x5DD5, 0x8E72, 0x5DD6, 0x8E73, 0x5DD7, 0x8E74, 0x5DD8, - 0x8E75, 0x5DD9, 0x8E76, 0x5DDA, 0x8E77, 0x5DDC, 0x8E78, 0x5DDF, - 0x8E79, 0x5DE0, 0x8E7A, 0x5DE3, 0x8E7B, 0x5DE4, 0x8E7C, 0x5DEA, - 0x8E7D, 0x5DEC, 0x8E7E, 0x5DED, 0x8E80, 0x5DF0, 0x8E81, 0x5DF5, - 0x8E82, 0x5DF6, 0x8E83, 0x5DF8, 0x8E84, 0x5DF9, 0x8E85, 0x5DFA, - 0x8E86, 0x5DFB, 0x8E87, 0x5DFC, 0x8E88, 0x5DFF, 0x8E89, 0x5E00, - 0x8E8A, 0x5E04, 0x8E8B, 0x5E07, 0x8E8C, 0x5E09, 0x8E8D, 0x5E0A, - 0x8E8E, 0x5E0B, 0x8E8F, 0x5E0D, 0x8E90, 0x5E0E, 0x8E91, 0x5E12, - 0x8E92, 0x5E13, 0x8E93, 0x5E17, 0x8E94, 0x5E1E, 0x8E95, 0x5E1F, - 0x8E96, 0x5E20, 0x8E97, 0x5E21, 0x8E98, 0x5E22, 0x8E99, 0x5E23, - 0x8E9A, 0x5E24, 0x8E9B, 0x5E25, 0x8E9C, 0x5E28, 0x8E9D, 0x5E29, - 0x8E9E, 0x5E2A, 0x8E9F, 0x5E2B, 0x8EA0, 0x5E2C, 0x8EA1, 0x5E2F, - 0x8EA2, 0x5E30, 0x8EA3, 0x5E32, 0x8EA4, 0x5E33, 0x8EA5, 0x5E34, - 0x8EA6, 0x5E35, 0x8EA7, 0x5E36, 0x8EA8, 0x5E39, 0x8EA9, 0x5E3A, - 0x8EAA, 0x5E3E, 0x8EAB, 0x5E3F, 0x8EAC, 0x5E40, 0x8EAD, 0x5E41, - 0x8EAE, 0x5E43, 0x8EAF, 0x5E46, 0x8EB0, 0x5E47, 0x8EB1, 0x5E48, - 0x8EB2, 0x5E49, 0x8EB3, 0x5E4A, 0x8EB4, 0x5E4B, 0x8EB5, 0x5E4D, - 0x8EB6, 0x5E4E, 0x8EB7, 0x5E4F, 0x8EB8, 0x5E50, 0x8EB9, 0x5E51, - 0x8EBA, 0x5E52, 0x8EBB, 0x5E53, 0x8EBC, 0x5E56, 0x8EBD, 0x5E57, - 0x8EBE, 0x5E58, 0x8EBF, 0x5E59, 0x8EC0, 0x5E5A, 0x8EC1, 0x5E5C, - 0x8EC2, 0x5E5D, 0x8EC3, 0x5E5F, 0x8EC4, 0x5E60, 0x8EC5, 0x5E63, - 0x8EC6, 0x5E64, 0x8EC7, 0x5E65, 0x8EC8, 0x5E66, 0x8EC9, 0x5E67, - 0x8ECA, 0x5E68, 0x8ECB, 0x5E69, 0x8ECC, 0x5E6A, 0x8ECD, 0x5E6B, - 0x8ECE, 0x5E6C, 0x8ECF, 0x5E6D, 0x8ED0, 0x5E6E, 0x8ED1, 0x5E6F, - 0x8ED2, 0x5E70, 0x8ED3, 0x5E71, 0x8ED4, 0x5E75, 0x8ED5, 0x5E77, - 0x8ED6, 0x5E79, 0x8ED7, 0x5E7E, 0x8ED8, 0x5E81, 0x8ED9, 0x5E82, - 0x8EDA, 0x5E83, 0x8EDB, 0x5E85, 0x8EDC, 0x5E88, 0x8EDD, 0x5E89, - 0x8EDE, 0x5E8C, 0x8EDF, 0x5E8D, 0x8EE0, 0x5E8E, 0x8EE1, 0x5E92, - 0x8EE2, 0x5E98, 0x8EE3, 0x5E9B, 0x8EE4, 0x5E9D, 0x8EE5, 0x5EA1, - 0x8EE6, 0x5EA2, 0x8EE7, 0x5EA3, 0x8EE8, 0x5EA4, 0x8EE9, 0x5EA8, - 0x8EEA, 0x5EA9, 0x8EEB, 0x5EAA, 0x8EEC, 0x5EAB, 0x8EED, 0x5EAC, - 0x8EEE, 0x5EAE, 0x8EEF, 0x5EAF, 0x8EF0, 0x5EB0, 0x8EF1, 0x5EB1, - 0x8EF2, 0x5EB2, 0x8EF3, 0x5EB4, 0x8EF4, 0x5EBA, 0x8EF5, 0x5EBB, - 0x8EF6, 0x5EBC, 0x8EF7, 0x5EBD, 0x8EF8, 0x5EBF, 0x8EF9, 0x5EC0, - 0x8EFA, 0x5EC1, 0x8EFB, 0x5EC2, 0x8EFC, 0x5EC3, 0x8EFD, 0x5EC4, - 0x8EFE, 0x5EC5, 0x8F40, 0x5EC6, 0x8F41, 0x5EC7, 0x8F42, 0x5EC8, - 0x8F43, 0x5ECB, 0x8F44, 0x5ECC, 0x8F45, 0x5ECD, 0x8F46, 0x5ECE, - 0x8F47, 0x5ECF, 0x8F48, 0x5ED0, 0x8F49, 0x5ED4, 0x8F4A, 0x5ED5, - 0x8F4B, 0x5ED7, 0x8F4C, 0x5ED8, 0x8F4D, 0x5ED9, 0x8F4E, 0x5EDA, - 0x8F4F, 0x5EDC, 0x8F50, 0x5EDD, 0x8F51, 0x5EDE, 0x8F52, 0x5EDF, - 0x8F53, 0x5EE0, 0x8F54, 0x5EE1, 0x8F55, 0x5EE2, 0x8F56, 0x5EE3, - 0x8F57, 0x5EE4, 0x8F58, 0x5EE5, 0x8F59, 0x5EE6, 0x8F5A, 0x5EE7, - 0x8F5B, 0x5EE9, 0x8F5C, 0x5EEB, 0x8F5D, 0x5EEC, 0x8F5E, 0x5EED, - 0x8F5F, 0x5EEE, 0x8F60, 0x5EEF, 0x8F61, 0x5EF0, 0x8F62, 0x5EF1, - 0x8F63, 0x5EF2, 0x8F64, 0x5EF3, 0x8F65, 0x5EF5, 0x8F66, 0x5EF8, - 0x8F67, 0x5EF9, 0x8F68, 0x5EFB, 0x8F69, 0x5EFC, 0x8F6A, 0x5EFD, - 0x8F6B, 0x5F05, 0x8F6C, 0x5F06, 0x8F6D, 0x5F07, 0x8F6E, 0x5F09, - 0x8F6F, 0x5F0C, 0x8F70, 0x5F0D, 0x8F71, 0x5F0E, 0x8F72, 0x5F10, - 0x8F73, 0x5F12, 0x8F74, 0x5F14, 0x8F75, 0x5F16, 0x8F76, 0x5F19, - 0x8F77, 0x5F1A, 0x8F78, 0x5F1C, 0x8F79, 0x5F1D, 0x8F7A, 0x5F1E, - 0x8F7B, 0x5F21, 0x8F7C, 0x5F22, 0x8F7D, 0x5F23, 0x8F7E, 0x5F24, - 0x8F80, 0x5F28, 0x8F81, 0x5F2B, 0x8F82, 0x5F2C, 0x8F83, 0x5F2E, - 0x8F84, 0x5F30, 0x8F85, 0x5F32, 0x8F86, 0x5F33, 0x8F87, 0x5F34, - 0x8F88, 0x5F35, 0x8F89, 0x5F36, 0x8F8A, 0x5F37, 0x8F8B, 0x5F38, - 0x8F8C, 0x5F3B, 0x8F8D, 0x5F3D, 0x8F8E, 0x5F3E, 0x8F8F, 0x5F3F, - 0x8F90, 0x5F41, 0x8F91, 0x5F42, 0x8F92, 0x5F43, 0x8F93, 0x5F44, - 0x8F94, 0x5F45, 0x8F95, 0x5F46, 0x8F96, 0x5F47, 0x8F97, 0x5F48, - 0x8F98, 0x5F49, 0x8F99, 0x5F4A, 0x8F9A, 0x5F4B, 0x8F9B, 0x5F4C, - 0x8F9C, 0x5F4D, 0x8F9D, 0x5F4E, 0x8F9E, 0x5F4F, 0x8F9F, 0x5F51, - 0x8FA0, 0x5F54, 0x8FA1, 0x5F59, 0x8FA2, 0x5F5A, 0x8FA3, 0x5F5B, - 0x8FA4, 0x5F5C, 0x8FA5, 0x5F5E, 0x8FA6, 0x5F5F, 0x8FA7, 0x5F60, - 0x8FA8, 0x5F63, 0x8FA9, 0x5F65, 0x8FAA, 0x5F67, 0x8FAB, 0x5F68, - 0x8FAC, 0x5F6B, 0x8FAD, 0x5F6E, 0x8FAE, 0x5F6F, 0x8FAF, 0x5F72, - 0x8FB0, 0x5F74, 0x8FB1, 0x5F75, 0x8FB2, 0x5F76, 0x8FB3, 0x5F78, - 0x8FB4, 0x5F7A, 0x8FB5, 0x5F7D, 0x8FB6, 0x5F7E, 0x8FB7, 0x5F7F, - 0x8FB8, 0x5F83, 0x8FB9, 0x5F86, 0x8FBA, 0x5F8D, 0x8FBB, 0x5F8E, - 0x8FBC, 0x5F8F, 0x8FBD, 0x5F91, 0x8FBE, 0x5F93, 0x8FBF, 0x5F94, - 0x8FC0, 0x5F96, 0x8FC1, 0x5F9A, 0x8FC2, 0x5F9B, 0x8FC3, 0x5F9D, - 0x8FC4, 0x5F9E, 0x8FC5, 0x5F9F, 0x8FC6, 0x5FA0, 0x8FC7, 0x5FA2, - 0x8FC8, 0x5FA3, 0x8FC9, 0x5FA4, 0x8FCA, 0x5FA5, 0x8FCB, 0x5FA6, - 0x8FCC, 0x5FA7, 0x8FCD, 0x5FA9, 0x8FCE, 0x5FAB, 0x8FCF, 0x5FAC, - 0x8FD0, 0x5FAF, 0x8FD1, 0x5FB0, 0x8FD2, 0x5FB1, 0x8FD3, 0x5FB2, - 0x8FD4, 0x5FB3, 0x8FD5, 0x5FB4, 0x8FD6, 0x5FB6, 0x8FD7, 0x5FB8, - 0x8FD8, 0x5FB9, 0x8FD9, 0x5FBA, 0x8FDA, 0x5FBB, 0x8FDB, 0x5FBE, - 0x8FDC, 0x5FBF, 0x8FDD, 0x5FC0, 0x8FDE, 0x5FC1, 0x8FDF, 0x5FC2, - 0x8FE0, 0x5FC7, 0x8FE1, 0x5FC8, 0x8FE2, 0x5FCA, 0x8FE3, 0x5FCB, - 0x8FE4, 0x5FCE, 0x8FE5, 0x5FD3, 0x8FE6, 0x5FD4, 0x8FE7, 0x5FD5, - 0x8FE8, 0x5FDA, 0x8FE9, 0x5FDB, 0x8FEA, 0x5FDC, 0x8FEB, 0x5FDE, - 0x8FEC, 0x5FDF, 0x8FED, 0x5FE2, 0x8FEE, 0x5FE3, 0x8FEF, 0x5FE5, - 0x8FF0, 0x5FE6, 0x8FF1, 0x5FE8, 0x8FF2, 0x5FE9, 0x8FF3, 0x5FEC, - 0x8FF4, 0x5FEF, 0x8FF5, 0x5FF0, 0x8FF6, 0x5FF2, 0x8FF7, 0x5FF3, - 0x8FF8, 0x5FF4, 0x8FF9, 0x5FF6, 0x8FFA, 0x5FF7, 0x8FFB, 0x5FF9, - 0x8FFC, 0x5FFA, 0x8FFD, 0x5FFC, 0x8FFE, 0x6007, 0x9040, 0x6008, - 0x9041, 0x6009, 0x9042, 0x600B, 0x9043, 0x600C, 0x9044, 0x6010, - 0x9045, 0x6011, 0x9046, 0x6013, 0x9047, 0x6017, 0x9048, 0x6018, - 0x9049, 0x601A, 0x904A, 0x601E, 0x904B, 0x601F, 0x904C, 0x6022, - 0x904D, 0x6023, 0x904E, 0x6024, 0x904F, 0x602C, 0x9050, 0x602D, - 0x9051, 0x602E, 0x9052, 0x6030, 0x9053, 0x6031, 0x9054, 0x6032, - 0x9055, 0x6033, 0x9056, 0x6034, 0x9057, 0x6036, 0x9058, 0x6037, - 0x9059, 0x6038, 0x905A, 0x6039, 0x905B, 0x603A, 0x905C, 0x603D, - 0x905D, 0x603E, 0x905E, 0x6040, 0x905F, 0x6044, 0x9060, 0x6045, - 0x9061, 0x6046, 0x9062, 0x6047, 0x9063, 0x6048, 0x9064, 0x6049, - 0x9065, 0x604A, 0x9066, 0x604C, 0x9067, 0x604E, 0x9068, 0x604F, - 0x9069, 0x6051, 0x906A, 0x6053, 0x906B, 0x6054, 0x906C, 0x6056, - 0x906D, 0x6057, 0x906E, 0x6058, 0x906F, 0x605B, 0x9070, 0x605C, - 0x9071, 0x605E, 0x9072, 0x605F, 0x9073, 0x6060, 0x9074, 0x6061, - 0x9075, 0x6065, 0x9076, 0x6066, 0x9077, 0x606E, 0x9078, 0x6071, - 0x9079, 0x6072, 0x907A, 0x6074, 0x907B, 0x6075, 0x907C, 0x6077, - 0x907D, 0x607E, 0x907E, 0x6080, 0x9080, 0x6081, 0x9081, 0x6082, - 0x9082, 0x6085, 0x9083, 0x6086, 0x9084, 0x6087, 0x9085, 0x6088, - 0x9086, 0x608A, 0x9087, 0x608B, 0x9088, 0x608E, 0x9089, 0x608F, - 0x908A, 0x6090, 0x908B, 0x6091, 0x908C, 0x6093, 0x908D, 0x6095, - 0x908E, 0x6097, 0x908F, 0x6098, 0x9090, 0x6099, 0x9091, 0x609C, - 0x9092, 0x609E, 0x9093, 0x60A1, 0x9094, 0x60A2, 0x9095, 0x60A4, - 0x9096, 0x60A5, 0x9097, 0x60A7, 0x9098, 0x60A9, 0x9099, 0x60AA, - 0x909A, 0x60AE, 0x909B, 0x60B0, 0x909C, 0x60B3, 0x909D, 0x60B5, - 0x909E, 0x60B6, 0x909F, 0x60B7, 0x90A0, 0x60B9, 0x90A1, 0x60BA, - 0x90A2, 0x60BD, 0x90A3, 0x60BE, 0x90A4, 0x60BF, 0x90A5, 0x60C0, - 0x90A6, 0x60C1, 0x90A7, 0x60C2, 0x90A8, 0x60C3, 0x90A9, 0x60C4, - 0x90AA, 0x60C7, 0x90AB, 0x60C8, 0x90AC, 0x60C9, 0x90AD, 0x60CC, - 0x90AE, 0x60CD, 0x90AF, 0x60CE, 0x90B0, 0x60CF, 0x90B1, 0x60D0, - 0x90B2, 0x60D2, 0x90B3, 0x60D3, 0x90B4, 0x60D4, 0x90B5, 0x60D6, - 0x90B6, 0x60D7, 0x90B7, 0x60D9, 0x90B8, 0x60DB, 0x90B9, 0x60DE, - 0x90BA, 0x60E1, 0x90BB, 0x60E2, 0x90BC, 0x60E3, 0x90BD, 0x60E4, - 0x90BE, 0x60E5, 0x90BF, 0x60EA, 0x90C0, 0x60F1, 0x90C1, 0x60F2, - 0x90C2, 0x60F5, 0x90C3, 0x60F7, 0x90C4, 0x60F8, 0x90C5, 0x60FB, - 0x90C6, 0x60FC, 0x90C7, 0x60FD, 0x90C8, 0x60FE, 0x90C9, 0x60FF, - 0x90CA, 0x6102, 0x90CB, 0x6103, 0x90CC, 0x6104, 0x90CD, 0x6105, - 0x90CE, 0x6107, 0x90CF, 0x610A, 0x90D0, 0x610B, 0x90D1, 0x610C, - 0x90D2, 0x6110, 0x90D3, 0x6111, 0x90D4, 0x6112, 0x90D5, 0x6113, - 0x90D6, 0x6114, 0x90D7, 0x6116, 0x90D8, 0x6117, 0x90D9, 0x6118, - 0x90DA, 0x6119, 0x90DB, 0x611B, 0x90DC, 0x611C, 0x90DD, 0x611D, - 0x90DE, 0x611E, 0x90DF, 0x6121, 0x90E0, 0x6122, 0x90E1, 0x6125, - 0x90E2, 0x6128, 0x90E3, 0x6129, 0x90E4, 0x612A, 0x90E5, 0x612C, - 0x90E6, 0x612D, 0x90E7, 0x612E, 0x90E8, 0x612F, 0x90E9, 0x6130, - 0x90EA, 0x6131, 0x90EB, 0x6132, 0x90EC, 0x6133, 0x90ED, 0x6134, - 0x90EE, 0x6135, 0x90EF, 0x6136, 0x90F0, 0x6137, 0x90F1, 0x6138, - 0x90F2, 0x6139, 0x90F3, 0x613A, 0x90F4, 0x613B, 0x90F5, 0x613C, - 0x90F6, 0x613D, 0x90F7, 0x613E, 0x90F8, 0x6140, 0x90F9, 0x6141, - 0x90FA, 0x6142, 0x90FB, 0x6143, 0x90FC, 0x6144, 0x90FD, 0x6145, - 0x90FE, 0x6146, 0x9140, 0x6147, 0x9141, 0x6149, 0x9142, 0x614B, - 0x9143, 0x614D, 0x9144, 0x614F, 0x9145, 0x6150, 0x9146, 0x6152, - 0x9147, 0x6153, 0x9148, 0x6154, 0x9149, 0x6156, 0x914A, 0x6157, - 0x914B, 0x6158, 0x914C, 0x6159, 0x914D, 0x615A, 0x914E, 0x615B, - 0x914F, 0x615C, 0x9150, 0x615E, 0x9151, 0x615F, 0x9152, 0x6160, - 0x9153, 0x6161, 0x9154, 0x6163, 0x9155, 0x6164, 0x9156, 0x6165, - 0x9157, 0x6166, 0x9158, 0x6169, 0x9159, 0x616A, 0x915A, 0x616B, - 0x915B, 0x616C, 0x915C, 0x616D, 0x915D, 0x616E, 0x915E, 0x616F, - 0x915F, 0x6171, 0x9160, 0x6172, 0x9161, 0x6173, 0x9162, 0x6174, - 0x9163, 0x6176, 0x9164, 0x6178, 0x9165, 0x6179, 0x9166, 0x617A, - 0x9167, 0x617B, 0x9168, 0x617C, 0x9169, 0x617D, 0x916A, 0x617E, - 0x916B, 0x617F, 0x916C, 0x6180, 0x916D, 0x6181, 0x916E, 0x6182, - 0x916F, 0x6183, 0x9170, 0x6184, 0x9171, 0x6185, 0x9172, 0x6186, - 0x9173, 0x6187, 0x9174, 0x6188, 0x9175, 0x6189, 0x9176, 0x618A, - 0x9177, 0x618C, 0x9178, 0x618D, 0x9179, 0x618F, 0x917A, 0x6190, - 0x917B, 0x6191, 0x917C, 0x6192, 0x917D, 0x6193, 0x917E, 0x6195, - 0x9180, 0x6196, 0x9181, 0x6197, 0x9182, 0x6198, 0x9183, 0x6199, - 0x9184, 0x619A, 0x9185, 0x619B, 0x9186, 0x619C, 0x9187, 0x619E, - 0x9188, 0x619F, 0x9189, 0x61A0, 0x918A, 0x61A1, 0x918B, 0x61A2, - 0x918C, 0x61A3, 0x918D, 0x61A4, 0x918E, 0x61A5, 0x918F, 0x61A6, - 0x9190, 0x61AA, 0x9191, 0x61AB, 0x9192, 0x61AD, 0x9193, 0x61AE, - 0x9194, 0x61AF, 0x9195, 0x61B0, 0x9196, 0x61B1, 0x9197, 0x61B2, - 0x9198, 0x61B3, 0x9199, 0x61B4, 0x919A, 0x61B5, 0x919B, 0x61B6, - 0x919C, 0x61B8, 0x919D, 0x61B9, 0x919E, 0x61BA, 0x919F, 0x61BB, - 0x91A0, 0x61BC, 0x91A1, 0x61BD, 0x91A2, 0x61BF, 0x91A3, 0x61C0, - 0x91A4, 0x61C1, 0x91A5, 0x61C3, 0x91A6, 0x61C4, 0x91A7, 0x61C5, - 0x91A8, 0x61C6, 0x91A9, 0x61C7, 0x91AA, 0x61C9, 0x91AB, 0x61CC, - 0x91AC, 0x61CD, 0x91AD, 0x61CE, 0x91AE, 0x61CF, 0x91AF, 0x61D0, - 0x91B0, 0x61D3, 0x91B1, 0x61D5, 0x91B2, 0x61D6, 0x91B3, 0x61D7, - 0x91B4, 0x61D8, 0x91B5, 0x61D9, 0x91B6, 0x61DA, 0x91B7, 0x61DB, - 0x91B8, 0x61DC, 0x91B9, 0x61DD, 0x91BA, 0x61DE, 0x91BB, 0x61DF, - 0x91BC, 0x61E0, 0x91BD, 0x61E1, 0x91BE, 0x61E2, 0x91BF, 0x61E3, - 0x91C0, 0x61E4, 0x91C1, 0x61E5, 0x91C2, 0x61E7, 0x91C3, 0x61E8, - 0x91C4, 0x61E9, 0x91C5, 0x61EA, 0x91C6, 0x61EB, 0x91C7, 0x61EC, - 0x91C8, 0x61ED, 0x91C9, 0x61EE, 0x91CA, 0x61EF, 0x91CB, 0x61F0, - 0x91CC, 0x61F1, 0x91CD, 0x61F2, 0x91CE, 0x61F3, 0x91CF, 0x61F4, - 0x91D0, 0x61F6, 0x91D1, 0x61F7, 0x91D2, 0x61F8, 0x91D3, 0x61F9, - 0x91D4, 0x61FA, 0x91D5, 0x61FB, 0x91D6, 0x61FC, 0x91D7, 0x61FD, - 0x91D8, 0x61FE, 0x91D9, 0x6200, 0x91DA, 0x6201, 0x91DB, 0x6202, - 0x91DC, 0x6203, 0x91DD, 0x6204, 0x91DE, 0x6205, 0x91DF, 0x6207, - 0x91E0, 0x6209, 0x91E1, 0x6213, 0x91E2, 0x6214, 0x91E3, 0x6219, - 0x91E4, 0x621C, 0x91E5, 0x621D, 0x91E6, 0x621E, 0x91E7, 0x6220, - 0x91E8, 0x6223, 0x91E9, 0x6226, 0x91EA, 0x6227, 0x91EB, 0x6228, - 0x91EC, 0x6229, 0x91ED, 0x622B, 0x91EE, 0x622D, 0x91EF, 0x622F, - 0x91F0, 0x6230, 0x91F1, 0x6231, 0x91F2, 0x6232, 0x91F3, 0x6235, - 0x91F4, 0x6236, 0x91F5, 0x6238, 0x91F6, 0x6239, 0x91F7, 0x623A, - 0x91F8, 0x623B, 0x91F9, 0x623C, 0x91FA, 0x6242, 0x91FB, 0x6244, - 0x91FC, 0x6245, 0x91FD, 0x6246, 0x91FE, 0x624A, 0x9240, 0x624F, - 0x9241, 0x6250, 0x9242, 0x6255, 0x9243, 0x6256, 0x9244, 0x6257, - 0x9245, 0x6259, 0x9246, 0x625A, 0x9247, 0x625C, 0x9248, 0x625D, - 0x9249, 0x625E, 0x924A, 0x625F, 0x924B, 0x6260, 0x924C, 0x6261, - 0x924D, 0x6262, 0x924E, 0x6264, 0x924F, 0x6265, 0x9250, 0x6268, - 0x9251, 0x6271, 0x9252, 0x6272, 0x9253, 0x6274, 0x9254, 0x6275, - 0x9255, 0x6277, 0x9256, 0x6278, 0x9257, 0x627A, 0x9258, 0x627B, - 0x9259, 0x627D, 0x925A, 0x6281, 0x925B, 0x6282, 0x925C, 0x6283, - 0x925D, 0x6285, 0x925E, 0x6286, 0x925F, 0x6287, 0x9260, 0x6288, - 0x9261, 0x628B, 0x9262, 0x628C, 0x9263, 0x628D, 0x9264, 0x628E, - 0x9265, 0x628F, 0x9266, 0x6290, 0x9267, 0x6294, 0x9268, 0x6299, - 0x9269, 0x629C, 0x926A, 0x629D, 0x926B, 0x629E, 0x926C, 0x62A3, - 0x926D, 0x62A6, 0x926E, 0x62A7, 0x926F, 0x62A9, 0x9270, 0x62AA, - 0x9271, 0x62AD, 0x9272, 0x62AE, 0x9273, 0x62AF, 0x9274, 0x62B0, - 0x9275, 0x62B2, 0x9276, 0x62B3, 0x9277, 0x62B4, 0x9278, 0x62B6, - 0x9279, 0x62B7, 0x927A, 0x62B8, 0x927B, 0x62BA, 0x927C, 0x62BE, - 0x927D, 0x62C0, 0x927E, 0x62C1, 0x9280, 0x62C3, 0x9281, 0x62CB, - 0x9282, 0x62CF, 0x9283, 0x62D1, 0x9284, 0x62D5, 0x9285, 0x62DD, - 0x9286, 0x62DE, 0x9287, 0x62E0, 0x9288, 0x62E1, 0x9289, 0x62E4, - 0x928A, 0x62EA, 0x928B, 0x62EB, 0x928C, 0x62F0, 0x928D, 0x62F2, - 0x928E, 0x62F5, 0x928F, 0x62F8, 0x9290, 0x62F9, 0x9291, 0x62FA, - 0x9292, 0x62FB, 0x9293, 0x6300, 0x9294, 0x6303, 0x9295, 0x6304, - 0x9296, 0x6305, 0x9297, 0x6306, 0x9298, 0x630A, 0x9299, 0x630B, - 0x929A, 0x630C, 0x929B, 0x630D, 0x929C, 0x630F, 0x929D, 0x6310, - 0x929E, 0x6312, 0x929F, 0x6313, 0x92A0, 0x6314, 0x92A1, 0x6315, - 0x92A2, 0x6317, 0x92A3, 0x6318, 0x92A4, 0x6319, 0x92A5, 0x631C, - 0x92A6, 0x6326, 0x92A7, 0x6327, 0x92A8, 0x6329, 0x92A9, 0x632C, - 0x92AA, 0x632D, 0x92AB, 0x632E, 0x92AC, 0x6330, 0x92AD, 0x6331, - 0x92AE, 0x6333, 0x92AF, 0x6334, 0x92B0, 0x6335, 0x92B1, 0x6336, - 0x92B2, 0x6337, 0x92B3, 0x6338, 0x92B4, 0x633B, 0x92B5, 0x633C, - 0x92B6, 0x633E, 0x92B7, 0x633F, 0x92B8, 0x6340, 0x92B9, 0x6341, - 0x92BA, 0x6344, 0x92BB, 0x6347, 0x92BC, 0x6348, 0x92BD, 0x634A, - 0x92BE, 0x6351, 0x92BF, 0x6352, 0x92C0, 0x6353, 0x92C1, 0x6354, - 0x92C2, 0x6356, 0x92C3, 0x6357, 0x92C4, 0x6358, 0x92C5, 0x6359, - 0x92C6, 0x635A, 0x92C7, 0x635B, 0x92C8, 0x635C, 0x92C9, 0x635D, - 0x92CA, 0x6360, 0x92CB, 0x6364, 0x92CC, 0x6365, 0x92CD, 0x6366, - 0x92CE, 0x6368, 0x92CF, 0x636A, 0x92D0, 0x636B, 0x92D1, 0x636C, - 0x92D2, 0x636F, 0x92D3, 0x6370, 0x92D4, 0x6372, 0x92D5, 0x6373, - 0x92D6, 0x6374, 0x92D7, 0x6375, 0x92D8, 0x6378, 0x92D9, 0x6379, - 0x92DA, 0x637C, 0x92DB, 0x637D, 0x92DC, 0x637E, 0x92DD, 0x637F, - 0x92DE, 0x6381, 0x92DF, 0x6383, 0x92E0, 0x6384, 0x92E1, 0x6385, - 0x92E2, 0x6386, 0x92E3, 0x638B, 0x92E4, 0x638D, 0x92E5, 0x6391, - 0x92E6, 0x6393, 0x92E7, 0x6394, 0x92E8, 0x6395, 0x92E9, 0x6397, - 0x92EA, 0x6399, 0x92EB, 0x639A, 0x92EC, 0x639B, 0x92ED, 0x639C, - 0x92EE, 0x639D, 0x92EF, 0x639E, 0x92F0, 0x639F, 0x92F1, 0x63A1, - 0x92F2, 0x63A4, 0x92F3, 0x63A6, 0x92F4, 0x63AB, 0x92F5, 0x63AF, - 0x92F6, 0x63B1, 0x92F7, 0x63B2, 0x92F8, 0x63B5, 0x92F9, 0x63B6, - 0x92FA, 0x63B9, 0x92FB, 0x63BB, 0x92FC, 0x63BD, 0x92FD, 0x63BF, - 0x92FE, 0x63C0, 0x9340, 0x63C1, 0x9341, 0x63C2, 0x9342, 0x63C3, - 0x9343, 0x63C5, 0x9344, 0x63C7, 0x9345, 0x63C8, 0x9346, 0x63CA, - 0x9347, 0x63CB, 0x9348, 0x63CC, 0x9349, 0x63D1, 0x934A, 0x63D3, - 0x934B, 0x63D4, 0x934C, 0x63D5, 0x934D, 0x63D7, 0x934E, 0x63D8, - 0x934F, 0x63D9, 0x9350, 0x63DA, 0x9351, 0x63DB, 0x9352, 0x63DC, - 0x9353, 0x63DD, 0x9354, 0x63DF, 0x9355, 0x63E2, 0x9356, 0x63E4, - 0x9357, 0x63E5, 0x9358, 0x63E6, 0x9359, 0x63E7, 0x935A, 0x63E8, - 0x935B, 0x63EB, 0x935C, 0x63EC, 0x935D, 0x63EE, 0x935E, 0x63EF, - 0x935F, 0x63F0, 0x9360, 0x63F1, 0x9361, 0x63F3, 0x9362, 0x63F5, - 0x9363, 0x63F7, 0x9364, 0x63F9, 0x9365, 0x63FA, 0x9366, 0x63FB, - 0x9367, 0x63FC, 0x9368, 0x63FE, 0x9369, 0x6403, 0x936A, 0x6404, - 0x936B, 0x6406, 0x936C, 0x6407, 0x936D, 0x6408, 0x936E, 0x6409, - 0x936F, 0x640A, 0x9370, 0x640D, 0x9371, 0x640E, 0x9372, 0x6411, - 0x9373, 0x6412, 0x9374, 0x6415, 0x9375, 0x6416, 0x9376, 0x6417, - 0x9377, 0x6418, 0x9378, 0x6419, 0x9379, 0x641A, 0x937A, 0x641D, - 0x937B, 0x641F, 0x937C, 0x6422, 0x937D, 0x6423, 0x937E, 0x6424, - 0x9380, 0x6425, 0x9381, 0x6427, 0x9382, 0x6428, 0x9383, 0x6429, - 0x9384, 0x642B, 0x9385, 0x642E, 0x9386, 0x642F, 0x9387, 0x6430, - 0x9388, 0x6431, 0x9389, 0x6432, 0x938A, 0x6433, 0x938B, 0x6435, - 0x938C, 0x6436, 0x938D, 0x6437, 0x938E, 0x6438, 0x938F, 0x6439, - 0x9390, 0x643B, 0x9391, 0x643C, 0x9392, 0x643E, 0x9393, 0x6440, - 0x9394, 0x6442, 0x9395, 0x6443, 0x9396, 0x6449, 0x9397, 0x644B, - 0x9398, 0x644C, 0x9399, 0x644D, 0x939A, 0x644E, 0x939B, 0x644F, - 0x939C, 0x6450, 0x939D, 0x6451, 0x939E, 0x6453, 0x939F, 0x6455, - 0x93A0, 0x6456, 0x93A1, 0x6457, 0x93A2, 0x6459, 0x93A3, 0x645A, - 0x93A4, 0x645B, 0x93A5, 0x645C, 0x93A6, 0x645D, 0x93A7, 0x645F, - 0x93A8, 0x6460, 0x93A9, 0x6461, 0x93AA, 0x6462, 0x93AB, 0x6463, - 0x93AC, 0x6464, 0x93AD, 0x6465, 0x93AE, 0x6466, 0x93AF, 0x6468, - 0x93B0, 0x646A, 0x93B1, 0x646B, 0x93B2, 0x646C, 0x93B3, 0x646E, - 0x93B4, 0x646F, 0x93B5, 0x6470, 0x93B6, 0x6471, 0x93B7, 0x6472, - 0x93B8, 0x6473, 0x93B9, 0x6474, 0x93BA, 0x6475, 0x93BB, 0x6476, - 0x93BC, 0x6477, 0x93BD, 0x647B, 0x93BE, 0x647C, 0x93BF, 0x647D, - 0x93C0, 0x647E, 0x93C1, 0x647F, 0x93C2, 0x6480, 0x93C3, 0x6481, - 0x93C4, 0x6483, 0x93C5, 0x6486, 0x93C6, 0x6488, 0x93C7, 0x6489, - 0x93C8, 0x648A, 0x93C9, 0x648B, 0x93CA, 0x648C, 0x93CB, 0x648D, - 0x93CC, 0x648E, 0x93CD, 0x648F, 0x93CE, 0x6490, 0x93CF, 0x6493, - 0x93D0, 0x6494, 0x93D1, 0x6497, 0x93D2, 0x6498, 0x93D3, 0x649A, - 0x93D4, 0x649B, 0x93D5, 0x649C, 0x93D6, 0x649D, 0x93D7, 0x649F, - 0x93D8, 0x64A0, 0x93D9, 0x64A1, 0x93DA, 0x64A2, 0x93DB, 0x64A3, - 0x93DC, 0x64A5, 0x93DD, 0x64A6, 0x93DE, 0x64A7, 0x93DF, 0x64A8, - 0x93E0, 0x64AA, 0x93E1, 0x64AB, 0x93E2, 0x64AF, 0x93E3, 0x64B1, - 0x93E4, 0x64B2, 0x93E5, 0x64B3, 0x93E6, 0x64B4, 0x93E7, 0x64B6, - 0x93E8, 0x64B9, 0x93E9, 0x64BB, 0x93EA, 0x64BD, 0x93EB, 0x64BE, - 0x93EC, 0x64BF, 0x93ED, 0x64C1, 0x93EE, 0x64C3, 0x93EF, 0x64C4, - 0x93F0, 0x64C6, 0x93F1, 0x64C7, 0x93F2, 0x64C8, 0x93F3, 0x64C9, - 0x93F4, 0x64CA, 0x93F5, 0x64CB, 0x93F6, 0x64CC, 0x93F7, 0x64CF, - 0x93F8, 0x64D1, 0x93F9, 0x64D3, 0x93FA, 0x64D4, 0x93FB, 0x64D5, - 0x93FC, 0x64D6, 0x93FD, 0x64D9, 0x93FE, 0x64DA, 0x9440, 0x64DB, - 0x9441, 0x64DC, 0x9442, 0x64DD, 0x9443, 0x64DF, 0x9444, 0x64E0, - 0x9445, 0x64E1, 0x9446, 0x64E3, 0x9447, 0x64E5, 0x9448, 0x64E7, - 0x9449, 0x64E8, 0x944A, 0x64E9, 0x944B, 0x64EA, 0x944C, 0x64EB, - 0x944D, 0x64EC, 0x944E, 0x64ED, 0x944F, 0x64EE, 0x9450, 0x64EF, - 0x9451, 0x64F0, 0x9452, 0x64F1, 0x9453, 0x64F2, 0x9454, 0x64F3, - 0x9455, 0x64F4, 0x9456, 0x64F5, 0x9457, 0x64F6, 0x9458, 0x64F7, - 0x9459, 0x64F8, 0x945A, 0x64F9, 0x945B, 0x64FA, 0x945C, 0x64FB, - 0x945D, 0x64FC, 0x945E, 0x64FD, 0x945F, 0x64FE, 0x9460, 0x64FF, - 0x9461, 0x6501, 0x9462, 0x6502, 0x9463, 0x6503, 0x9464, 0x6504, - 0x9465, 0x6505, 0x9466, 0x6506, 0x9467, 0x6507, 0x9468, 0x6508, - 0x9469, 0x650A, 0x946A, 0x650B, 0x946B, 0x650C, 0x946C, 0x650D, - 0x946D, 0x650E, 0x946E, 0x650F, 0x946F, 0x6510, 0x9470, 0x6511, - 0x9471, 0x6513, 0x9472, 0x6514, 0x9473, 0x6515, 0x9474, 0x6516, - 0x9475, 0x6517, 0x9476, 0x6519, 0x9477, 0x651A, 0x9478, 0x651B, - 0x9479, 0x651C, 0x947A, 0x651D, 0x947B, 0x651E, 0x947C, 0x651F, - 0x947D, 0x6520, 0x947E, 0x6521, 0x9480, 0x6522, 0x9481, 0x6523, - 0x9482, 0x6524, 0x9483, 0x6526, 0x9484, 0x6527, 0x9485, 0x6528, - 0x9486, 0x6529, 0x9487, 0x652A, 0x9488, 0x652C, 0x9489, 0x652D, - 0x948A, 0x6530, 0x948B, 0x6531, 0x948C, 0x6532, 0x948D, 0x6533, - 0x948E, 0x6537, 0x948F, 0x653A, 0x9490, 0x653C, 0x9491, 0x653D, - 0x9492, 0x6540, 0x9493, 0x6541, 0x9494, 0x6542, 0x9495, 0x6543, - 0x9496, 0x6544, 0x9497, 0x6546, 0x9498, 0x6547, 0x9499, 0x654A, - 0x949A, 0x654B, 0x949B, 0x654D, 0x949C, 0x654E, 0x949D, 0x6550, - 0x949E, 0x6552, 0x949F, 0x6553, 0x94A0, 0x6554, 0x94A1, 0x6557, - 0x94A2, 0x6558, 0x94A3, 0x655A, 0x94A4, 0x655C, 0x94A5, 0x655F, - 0x94A6, 0x6560, 0x94A7, 0x6561, 0x94A8, 0x6564, 0x94A9, 0x6565, - 0x94AA, 0x6567, 0x94AB, 0x6568, 0x94AC, 0x6569, 0x94AD, 0x656A, - 0x94AE, 0x656D, 0x94AF, 0x656E, 0x94B0, 0x656F, 0x94B1, 0x6571, - 0x94B2, 0x6573, 0x94B3, 0x6575, 0x94B4, 0x6576, 0x94B5, 0x6578, - 0x94B6, 0x6579, 0x94B7, 0x657A, 0x94B8, 0x657B, 0x94B9, 0x657C, - 0x94BA, 0x657D, 0x94BB, 0x657E, 0x94BC, 0x657F, 0x94BD, 0x6580, - 0x94BE, 0x6581, 0x94BF, 0x6582, 0x94C0, 0x6583, 0x94C1, 0x6584, - 0x94C2, 0x6585, 0x94C3, 0x6586, 0x94C4, 0x6588, 0x94C5, 0x6589, - 0x94C6, 0x658A, 0x94C7, 0x658D, 0x94C8, 0x658E, 0x94C9, 0x658F, - 0x94CA, 0x6592, 0x94CB, 0x6594, 0x94CC, 0x6595, 0x94CD, 0x6596, - 0x94CE, 0x6598, 0x94CF, 0x659A, 0x94D0, 0x659D, 0x94D1, 0x659E, - 0x94D2, 0x65A0, 0x94D3, 0x65A2, 0x94D4, 0x65A3, 0x94D5, 0x65A6, - 0x94D6, 0x65A8, 0x94D7, 0x65AA, 0x94D8, 0x65AC, 0x94D9, 0x65AE, - 0x94DA, 0x65B1, 0x94DB, 0x65B2, 0x94DC, 0x65B3, 0x94DD, 0x65B4, - 0x94DE, 0x65B5, 0x94DF, 0x65B6, 0x94E0, 0x65B7, 0x94E1, 0x65B8, - 0x94E2, 0x65BA, 0x94E3, 0x65BB, 0x94E4, 0x65BE, 0x94E5, 0x65BF, - 0x94E6, 0x65C0, 0x94E7, 0x65C2, 0x94E8, 0x65C7, 0x94E9, 0x65C8, - 0x94EA, 0x65C9, 0x94EB, 0x65CA, 0x94EC, 0x65CD, 0x94ED, 0x65D0, - 0x94EE, 0x65D1, 0x94EF, 0x65D3, 0x94F0, 0x65D4, 0x94F1, 0x65D5, - 0x94F2, 0x65D8, 0x94F3, 0x65D9, 0x94F4, 0x65DA, 0x94F5, 0x65DB, - 0x94F6, 0x65DC, 0x94F7, 0x65DD, 0x94F8, 0x65DE, 0x94F9, 0x65DF, - 0x94FA, 0x65E1, 0x94FB, 0x65E3, 0x94FC, 0x65E4, 0x94FD, 0x65EA, - 0x94FE, 0x65EB, 0x9540, 0x65F2, 0x9541, 0x65F3, 0x9542, 0x65F4, - 0x9543, 0x65F5, 0x9544, 0x65F8, 0x9545, 0x65F9, 0x9546, 0x65FB, - 0x9547, 0x65FC, 0x9548, 0x65FD, 0x9549, 0x65FE, 0x954A, 0x65FF, - 0x954B, 0x6601, 0x954C, 0x6604, 0x954D, 0x6605, 0x954E, 0x6607, - 0x954F, 0x6608, 0x9550, 0x6609, 0x9551, 0x660B, 0x9552, 0x660D, - 0x9553, 0x6610, 0x9554, 0x6611, 0x9555, 0x6612, 0x9556, 0x6616, - 0x9557, 0x6617, 0x9558, 0x6618, 0x9559, 0x661A, 0x955A, 0x661B, - 0x955B, 0x661C, 0x955C, 0x661E, 0x955D, 0x6621, 0x955E, 0x6622, - 0x955F, 0x6623, 0x9560, 0x6624, 0x9561, 0x6626, 0x9562, 0x6629, - 0x9563, 0x662A, 0x9564, 0x662B, 0x9565, 0x662C, 0x9566, 0x662E, - 0x9567, 0x6630, 0x9568, 0x6632, 0x9569, 0x6633, 0x956A, 0x6637, - 0x956B, 0x6638, 0x956C, 0x6639, 0x956D, 0x663A, 0x956E, 0x663B, - 0x956F, 0x663D, 0x9570, 0x663F, 0x9571, 0x6640, 0x9572, 0x6642, - 0x9573, 0x6644, 0x9574, 0x6645, 0x9575, 0x6646, 0x9576, 0x6647, - 0x9577, 0x6648, 0x9578, 0x6649, 0x9579, 0x664A, 0x957A, 0x664D, - 0x957B, 0x664E, 0x957C, 0x6650, 0x957D, 0x6651, 0x957E, 0x6658, - 0x9580, 0x6659, 0x9581, 0x665B, 0x9582, 0x665C, 0x9583, 0x665D, - 0x9584, 0x665E, 0x9585, 0x6660, 0x9586, 0x6662, 0x9587, 0x6663, - 0x9588, 0x6665, 0x9589, 0x6667, 0x958A, 0x6669, 0x958B, 0x666A, - 0x958C, 0x666B, 0x958D, 0x666C, 0x958E, 0x666D, 0x958F, 0x6671, - 0x9590, 0x6672, 0x9591, 0x6673, 0x9592, 0x6675, 0x9593, 0x6678, - 0x9594, 0x6679, 0x9595, 0x667B, 0x9596, 0x667C, 0x9597, 0x667D, - 0x9598, 0x667F, 0x9599, 0x6680, 0x959A, 0x6681, 0x959B, 0x6683, - 0x959C, 0x6685, 0x959D, 0x6686, 0x959E, 0x6688, 0x959F, 0x6689, - 0x95A0, 0x668A, 0x95A1, 0x668B, 0x95A2, 0x668D, 0x95A3, 0x668E, - 0x95A4, 0x668F, 0x95A5, 0x6690, 0x95A6, 0x6692, 0x95A7, 0x6693, - 0x95A8, 0x6694, 0x95A9, 0x6695, 0x95AA, 0x6698, 0x95AB, 0x6699, - 0x95AC, 0x669A, 0x95AD, 0x669B, 0x95AE, 0x669C, 0x95AF, 0x669E, - 0x95B0, 0x669F, 0x95B1, 0x66A0, 0x95B2, 0x66A1, 0x95B3, 0x66A2, - 0x95B4, 0x66A3, 0x95B5, 0x66A4, 0x95B6, 0x66A5, 0x95B7, 0x66A6, - 0x95B8, 0x66A9, 0x95B9, 0x66AA, 0x95BA, 0x66AB, 0x95BB, 0x66AC, - 0x95BC, 0x66AD, 0x95BD, 0x66AF, 0x95BE, 0x66B0, 0x95BF, 0x66B1, - 0x95C0, 0x66B2, 0x95C1, 0x66B3, 0x95C2, 0x66B5, 0x95C3, 0x66B6, - 0x95C4, 0x66B7, 0x95C5, 0x66B8, 0x95C6, 0x66BA, 0x95C7, 0x66BB, - 0x95C8, 0x66BC, 0x95C9, 0x66BD, 0x95CA, 0x66BF, 0x95CB, 0x66C0, - 0x95CC, 0x66C1, 0x95CD, 0x66C2, 0x95CE, 0x66C3, 0x95CF, 0x66C4, - 0x95D0, 0x66C5, 0x95D1, 0x66C6, 0x95D2, 0x66C7, 0x95D3, 0x66C8, - 0x95D4, 0x66C9, 0x95D5, 0x66CA, 0x95D6, 0x66CB, 0x95D7, 0x66CC, - 0x95D8, 0x66CD, 0x95D9, 0x66CE, 0x95DA, 0x66CF, 0x95DB, 0x66D0, - 0x95DC, 0x66D1, 0x95DD, 0x66D2, 0x95DE, 0x66D3, 0x95DF, 0x66D4, - 0x95E0, 0x66D5, 0x95E1, 0x66D6, 0x95E2, 0x66D7, 0x95E3, 0x66D8, - 0x95E4, 0x66DA, 0x95E5, 0x66DE, 0x95E6, 0x66DF, 0x95E7, 0x66E0, - 0x95E8, 0x66E1, 0x95E9, 0x66E2, 0x95EA, 0x66E3, 0x95EB, 0x66E4, - 0x95EC, 0x66E5, 0x95ED, 0x66E7, 0x95EE, 0x66E8, 0x95EF, 0x66EA, - 0x95F0, 0x66EB, 0x95F1, 0x66EC, 0x95F2, 0x66ED, 0x95F3, 0x66EE, - 0x95F4, 0x66EF, 0x95F5, 0x66F1, 0x95F6, 0x66F5, 0x95F7, 0x66F6, - 0x95F8, 0x66F8, 0x95F9, 0x66FA, 0x95FA, 0x66FB, 0x95FB, 0x66FD, - 0x95FC, 0x6701, 0x95FD, 0x6702, 0x95FE, 0x6703, 0x9640, 0x6704, - 0x9641, 0x6705, 0x9642, 0x6706, 0x9643, 0x6707, 0x9644, 0x670C, - 0x9645, 0x670E, 0x9646, 0x670F, 0x9647, 0x6711, 0x9648, 0x6712, - 0x9649, 0x6713, 0x964A, 0x6716, 0x964B, 0x6718, 0x964C, 0x6719, - 0x964D, 0x671A, 0x964E, 0x671C, 0x964F, 0x671E, 0x9650, 0x6720, - 0x9651, 0x6721, 0x9652, 0x6722, 0x9653, 0x6723, 0x9654, 0x6724, - 0x9655, 0x6725, 0x9656, 0x6727, 0x9657, 0x6729, 0x9658, 0x672E, - 0x9659, 0x6730, 0x965A, 0x6732, 0x965B, 0x6733, 0x965C, 0x6736, - 0x965D, 0x6737, 0x965E, 0x6738, 0x965F, 0x6739, 0x9660, 0x673B, - 0x9661, 0x673C, 0x9662, 0x673E, 0x9663, 0x673F, 0x9664, 0x6741, - 0x9665, 0x6744, 0x9666, 0x6745, 0x9667, 0x6747, 0x9668, 0x674A, - 0x9669, 0x674B, 0x966A, 0x674D, 0x966B, 0x6752, 0x966C, 0x6754, - 0x966D, 0x6755, 0x966E, 0x6757, 0x966F, 0x6758, 0x9670, 0x6759, - 0x9671, 0x675A, 0x9672, 0x675B, 0x9673, 0x675D, 0x9674, 0x6762, - 0x9675, 0x6763, 0x9676, 0x6764, 0x9677, 0x6766, 0x9678, 0x6767, - 0x9679, 0x676B, 0x967A, 0x676C, 0x967B, 0x676E, 0x967C, 0x6771, - 0x967D, 0x6774, 0x967E, 0x6776, 0x9680, 0x6778, 0x9681, 0x6779, - 0x9682, 0x677A, 0x9683, 0x677B, 0x9684, 0x677D, 0x9685, 0x6780, - 0x9686, 0x6782, 0x9687, 0x6783, 0x9688, 0x6785, 0x9689, 0x6786, - 0x968A, 0x6788, 0x968B, 0x678A, 0x968C, 0x678C, 0x968D, 0x678D, - 0x968E, 0x678E, 0x968F, 0x678F, 0x9690, 0x6791, 0x9691, 0x6792, - 0x9692, 0x6793, 0x9693, 0x6794, 0x9694, 0x6796, 0x9695, 0x6799, - 0x9696, 0x679B, 0x9697, 0x679F, 0x9698, 0x67A0, 0x9699, 0x67A1, - 0x969A, 0x67A4, 0x969B, 0x67A6, 0x969C, 0x67A9, 0x969D, 0x67AC, - 0x969E, 0x67AE, 0x969F, 0x67B1, 0x96A0, 0x67B2, 0x96A1, 0x67B4, - 0x96A2, 0x67B9, 0x96A3, 0x67BA, 0x96A4, 0x67BB, 0x96A5, 0x67BC, - 0x96A6, 0x67BD, 0x96A7, 0x67BE, 0x96A8, 0x67BF, 0x96A9, 0x67C0, - 0x96AA, 0x67C2, 0x96AB, 0x67C5, 0x96AC, 0x67C6, 0x96AD, 0x67C7, - 0x96AE, 0x67C8, 0x96AF, 0x67C9, 0x96B0, 0x67CA, 0x96B1, 0x67CB, - 0x96B2, 0x67CC, 0x96B3, 0x67CD, 0x96B4, 0x67CE, 0x96B5, 0x67D5, - 0x96B6, 0x67D6, 0x96B7, 0x67D7, 0x96B8, 0x67DB, 0x96B9, 0x67DF, - 0x96BA, 0x67E1, 0x96BB, 0x67E3, 0x96BC, 0x67E4, 0x96BD, 0x67E6, - 0x96BE, 0x67E7, 0x96BF, 0x67E8, 0x96C0, 0x67EA, 0x96C1, 0x67EB, - 0x96C2, 0x67ED, 0x96C3, 0x67EE, 0x96C4, 0x67F2, 0x96C5, 0x67F5, - 0x96C6, 0x67F6, 0x96C7, 0x67F7, 0x96C8, 0x67F8, 0x96C9, 0x67F9, - 0x96CA, 0x67FA, 0x96CB, 0x67FB, 0x96CC, 0x67FC, 0x96CD, 0x67FE, - 0x96CE, 0x6801, 0x96CF, 0x6802, 0x96D0, 0x6803, 0x96D1, 0x6804, - 0x96D2, 0x6806, 0x96D3, 0x680D, 0x96D4, 0x6810, 0x96D5, 0x6812, - 0x96D6, 0x6814, 0x96D7, 0x6815, 0x96D8, 0x6818, 0x96D9, 0x6819, - 0x96DA, 0x681A, 0x96DB, 0x681B, 0x96DC, 0x681C, 0x96DD, 0x681E, - 0x96DE, 0x681F, 0x96DF, 0x6820, 0x96E0, 0x6822, 0x96E1, 0x6823, - 0x96E2, 0x6824, 0x96E3, 0x6825, 0x96E4, 0x6826, 0x96E5, 0x6827, - 0x96E6, 0x6828, 0x96E7, 0x682B, 0x96E8, 0x682C, 0x96E9, 0x682D, - 0x96EA, 0x682E, 0x96EB, 0x682F, 0x96EC, 0x6830, 0x96ED, 0x6831, - 0x96EE, 0x6834, 0x96EF, 0x6835, 0x96F0, 0x6836, 0x96F1, 0x683A, - 0x96F2, 0x683B, 0x96F3, 0x683F, 0x96F4, 0x6847, 0x96F5, 0x684B, - 0x96F6, 0x684D, 0x96F7, 0x684F, 0x96F8, 0x6852, 0x96F9, 0x6856, - 0x96FA, 0x6857, 0x96FB, 0x6858, 0x96FC, 0x6859, 0x96FD, 0x685A, - 0x96FE, 0x685B, 0x9740, 0x685C, 0x9741, 0x685D, 0x9742, 0x685E, - 0x9743, 0x685F, 0x9744, 0x686A, 0x9745, 0x686C, 0x9746, 0x686D, - 0x9747, 0x686E, 0x9748, 0x686F, 0x9749, 0x6870, 0x974A, 0x6871, - 0x974B, 0x6872, 0x974C, 0x6873, 0x974D, 0x6875, 0x974E, 0x6878, - 0x974F, 0x6879, 0x9750, 0x687A, 0x9751, 0x687B, 0x9752, 0x687C, - 0x9753, 0x687D, 0x9754, 0x687E, 0x9755, 0x687F, 0x9756, 0x6880, - 0x9757, 0x6882, 0x9758, 0x6884, 0x9759, 0x6887, 0x975A, 0x6888, - 0x975B, 0x6889, 0x975C, 0x688A, 0x975D, 0x688B, 0x975E, 0x688C, - 0x975F, 0x688D, 0x9760, 0x688E, 0x9761, 0x6890, 0x9762, 0x6891, - 0x9763, 0x6892, 0x9764, 0x6894, 0x9765, 0x6895, 0x9766, 0x6896, - 0x9767, 0x6898, 0x9768, 0x6899, 0x9769, 0x689A, 0x976A, 0x689B, - 0x976B, 0x689C, 0x976C, 0x689D, 0x976D, 0x689E, 0x976E, 0x689F, - 0x976F, 0x68A0, 0x9770, 0x68A1, 0x9771, 0x68A3, 0x9772, 0x68A4, - 0x9773, 0x68A5, 0x9774, 0x68A9, 0x9775, 0x68AA, 0x9776, 0x68AB, - 0x9777, 0x68AC, 0x9778, 0x68AE, 0x9779, 0x68B1, 0x977A, 0x68B2, - 0x977B, 0x68B4, 0x977C, 0x68B6, 0x977D, 0x68B7, 0x977E, 0x68B8, - 0x9780, 0x68B9, 0x9781, 0x68BA, 0x9782, 0x68BB, 0x9783, 0x68BC, - 0x9784, 0x68BD, 0x9785, 0x68BE, 0x9786, 0x68BF, 0x9787, 0x68C1, - 0x9788, 0x68C3, 0x9789, 0x68C4, 0x978A, 0x68C5, 0x978B, 0x68C6, - 0x978C, 0x68C7, 0x978D, 0x68C8, 0x978E, 0x68CA, 0x978F, 0x68CC, - 0x9790, 0x68CE, 0x9791, 0x68CF, 0x9792, 0x68D0, 0x9793, 0x68D1, - 0x9794, 0x68D3, 0x9795, 0x68D4, 0x9796, 0x68D6, 0x9797, 0x68D7, - 0x9798, 0x68D9, 0x9799, 0x68DB, 0x979A, 0x68DC, 0x979B, 0x68DD, - 0x979C, 0x68DE, 0x979D, 0x68DF, 0x979E, 0x68E1, 0x979F, 0x68E2, - 0x97A0, 0x68E4, 0x97A1, 0x68E5, 0x97A2, 0x68E6, 0x97A3, 0x68E7, - 0x97A4, 0x68E8, 0x97A5, 0x68E9, 0x97A6, 0x68EA, 0x97A7, 0x68EB, - 0x97A8, 0x68EC, 0x97A9, 0x68ED, 0x97AA, 0x68EF, 0x97AB, 0x68F2, - 0x97AC, 0x68F3, 0x97AD, 0x68F4, 0x97AE, 0x68F6, 0x97AF, 0x68F7, - 0x97B0, 0x68F8, 0x97B1, 0x68FB, 0x97B2, 0x68FD, 0x97B3, 0x68FE, - 0x97B4, 0x68FF, 0x97B5, 0x6900, 0x97B6, 0x6902, 0x97B7, 0x6903, - 0x97B8, 0x6904, 0x97B9, 0x6906, 0x97BA, 0x6907, 0x97BB, 0x6908, - 0x97BC, 0x6909, 0x97BD, 0x690A, 0x97BE, 0x690C, 0x97BF, 0x690F, - 0x97C0, 0x6911, 0x97C1, 0x6913, 0x97C2, 0x6914, 0x97C3, 0x6915, - 0x97C4, 0x6916, 0x97C5, 0x6917, 0x97C6, 0x6918, 0x97C7, 0x6919, - 0x97C8, 0x691A, 0x97C9, 0x691B, 0x97CA, 0x691C, 0x97CB, 0x691D, - 0x97CC, 0x691E, 0x97CD, 0x6921, 0x97CE, 0x6922, 0x97CF, 0x6923, - 0x97D0, 0x6925, 0x97D1, 0x6926, 0x97D2, 0x6927, 0x97D3, 0x6928, - 0x97D4, 0x6929, 0x97D5, 0x692A, 0x97D6, 0x692B, 0x97D7, 0x692C, - 0x97D8, 0x692E, 0x97D9, 0x692F, 0x97DA, 0x6931, 0x97DB, 0x6932, - 0x97DC, 0x6933, 0x97DD, 0x6935, 0x97DE, 0x6936, 0x97DF, 0x6937, - 0x97E0, 0x6938, 0x97E1, 0x693A, 0x97E2, 0x693B, 0x97E3, 0x693C, - 0x97E4, 0x693E, 0x97E5, 0x6940, 0x97E6, 0x6941, 0x97E7, 0x6943, - 0x97E8, 0x6944, 0x97E9, 0x6945, 0x97EA, 0x6946, 0x97EB, 0x6947, - 0x97EC, 0x6948, 0x97ED, 0x6949, 0x97EE, 0x694A, 0x97EF, 0x694B, - 0x97F0, 0x694C, 0x97F1, 0x694D, 0x97F2, 0x694E, 0x97F3, 0x694F, - 0x97F4, 0x6950, 0x97F5, 0x6951, 0x97F6, 0x6952, 0x97F7, 0x6953, - 0x97F8, 0x6955, 0x97F9, 0x6956, 0x97FA, 0x6958, 0x97FB, 0x6959, - 0x97FC, 0x695B, 0x97FD, 0x695C, 0x97FE, 0x695F, 0x9840, 0x6961, - 0x9841, 0x6962, 0x9842, 0x6964, 0x9843, 0x6965, 0x9844, 0x6967, - 0x9845, 0x6968, 0x9846, 0x6969, 0x9847, 0x696A, 0x9848, 0x696C, - 0x9849, 0x696D, 0x984A, 0x696F, 0x984B, 0x6970, 0x984C, 0x6972, - 0x984D, 0x6973, 0x984E, 0x6974, 0x984F, 0x6975, 0x9850, 0x6976, - 0x9851, 0x697A, 0x9852, 0x697B, 0x9853, 0x697D, 0x9854, 0x697E, - 0x9855, 0x697F, 0x9856, 0x6981, 0x9857, 0x6983, 0x9858, 0x6985, - 0x9859, 0x698A, 0x985A, 0x698B, 0x985B, 0x698C, 0x985C, 0x698E, - 0x985D, 0x698F, 0x985E, 0x6990, 0x985F, 0x6991, 0x9860, 0x6992, - 0x9861, 0x6993, 0x9862, 0x6996, 0x9863, 0x6997, 0x9864, 0x6999, - 0x9865, 0x699A, 0x9866, 0x699D, 0x9867, 0x699E, 0x9868, 0x699F, - 0x9869, 0x69A0, 0x986A, 0x69A1, 0x986B, 0x69A2, 0x986C, 0x69A3, - 0x986D, 0x69A4, 0x986E, 0x69A5, 0x986F, 0x69A6, 0x9870, 0x69A9, - 0x9871, 0x69AA, 0x9872, 0x69AC, 0x9873, 0x69AE, 0x9874, 0x69AF, - 0x9875, 0x69B0, 0x9876, 0x69B2, 0x9877, 0x69B3, 0x9878, 0x69B5, - 0x9879, 0x69B6, 0x987A, 0x69B8, 0x987B, 0x69B9, 0x987C, 0x69BA, - 0x987D, 0x69BC, 0x987E, 0x69BD, 0x9880, 0x69BE, 0x9881, 0x69BF, - 0x9882, 0x69C0, 0x9883, 0x69C2, 0x9884, 0x69C3, 0x9885, 0x69C4, - 0x9886, 0x69C5, 0x9887, 0x69C6, 0x9888, 0x69C7, 0x9889, 0x69C8, - 0x988A, 0x69C9, 0x988B, 0x69CB, 0x988C, 0x69CD, 0x988D, 0x69CF, - 0x988E, 0x69D1, 0x988F, 0x69D2, 0x9890, 0x69D3, 0x9891, 0x69D5, - 0x9892, 0x69D6, 0x9893, 0x69D7, 0x9894, 0x69D8, 0x9895, 0x69D9, - 0x9896, 0x69DA, 0x9897, 0x69DC, 0x9898, 0x69DD, 0x9899, 0x69DE, - 0x989A, 0x69E1, 0x989B, 0x69E2, 0x989C, 0x69E3, 0x989D, 0x69E4, - 0x989E, 0x69E5, 0x989F, 0x69E6, 0x98A0, 0x69E7, 0x98A1, 0x69E8, - 0x98A2, 0x69E9, 0x98A3, 0x69EA, 0x98A4, 0x69EB, 0x98A5, 0x69EC, - 0x98A6, 0x69EE, 0x98A7, 0x69EF, 0x98A8, 0x69F0, 0x98A9, 0x69F1, - 0x98AA, 0x69F3, 0x98AB, 0x69F4, 0x98AC, 0x69F5, 0x98AD, 0x69F6, - 0x98AE, 0x69F7, 0x98AF, 0x69F8, 0x98B0, 0x69F9, 0x98B1, 0x69FA, - 0x98B2, 0x69FB, 0x98B3, 0x69FC, 0x98B4, 0x69FE, 0x98B5, 0x6A00, - 0x98B6, 0x6A01, 0x98B7, 0x6A02, 0x98B8, 0x6A03, 0x98B9, 0x6A04, - 0x98BA, 0x6A05, 0x98BB, 0x6A06, 0x98BC, 0x6A07, 0x98BD, 0x6A08, - 0x98BE, 0x6A09, 0x98BF, 0x6A0B, 0x98C0, 0x6A0C, 0x98C1, 0x6A0D, - 0x98C2, 0x6A0E, 0x98C3, 0x6A0F, 0x98C4, 0x6A10, 0x98C5, 0x6A11, - 0x98C6, 0x6A12, 0x98C7, 0x6A13, 0x98C8, 0x6A14, 0x98C9, 0x6A15, - 0x98CA, 0x6A16, 0x98CB, 0x6A19, 0x98CC, 0x6A1A, 0x98CD, 0x6A1B, - 0x98CE, 0x6A1C, 0x98CF, 0x6A1D, 0x98D0, 0x6A1E, 0x98D1, 0x6A20, - 0x98D2, 0x6A22, 0x98D3, 0x6A23, 0x98D4, 0x6A24, 0x98D5, 0x6A25, - 0x98D6, 0x6A26, 0x98D7, 0x6A27, 0x98D8, 0x6A29, 0x98D9, 0x6A2B, - 0x98DA, 0x6A2C, 0x98DB, 0x6A2D, 0x98DC, 0x6A2E, 0x98DD, 0x6A30, - 0x98DE, 0x6A32, 0x98DF, 0x6A33, 0x98E0, 0x6A34, 0x98E1, 0x6A36, - 0x98E2, 0x6A37, 0x98E3, 0x6A38, 0x98E4, 0x6A39, 0x98E5, 0x6A3A, - 0x98E6, 0x6A3B, 0x98E7, 0x6A3C, 0x98E8, 0x6A3F, 0x98E9, 0x6A40, - 0x98EA, 0x6A41, 0x98EB, 0x6A42, 0x98EC, 0x6A43, 0x98ED, 0x6A45, - 0x98EE, 0x6A46, 0x98EF, 0x6A48, 0x98F0, 0x6A49, 0x98F1, 0x6A4A, - 0x98F2, 0x6A4B, 0x98F3, 0x6A4C, 0x98F4, 0x6A4D, 0x98F5, 0x6A4E, - 0x98F6, 0x6A4F, 0x98F7, 0x6A51, 0x98F8, 0x6A52, 0x98F9, 0x6A53, - 0x98FA, 0x6A54, 0x98FB, 0x6A55, 0x98FC, 0x6A56, 0x98FD, 0x6A57, - 0x98FE, 0x6A5A, 0x9940, 0x6A5C, 0x9941, 0x6A5D, 0x9942, 0x6A5E, - 0x9943, 0x6A5F, 0x9944, 0x6A60, 0x9945, 0x6A62, 0x9946, 0x6A63, - 0x9947, 0x6A64, 0x9948, 0x6A66, 0x9949, 0x6A67, 0x994A, 0x6A68, - 0x994B, 0x6A69, 0x994C, 0x6A6A, 0x994D, 0x6A6B, 0x994E, 0x6A6C, - 0x994F, 0x6A6D, 0x9950, 0x6A6E, 0x9951, 0x6A6F, 0x9952, 0x6A70, - 0x9953, 0x6A72, 0x9954, 0x6A73, 0x9955, 0x6A74, 0x9956, 0x6A75, - 0x9957, 0x6A76, 0x9958, 0x6A77, 0x9959, 0x6A78, 0x995A, 0x6A7A, - 0x995B, 0x6A7B, 0x995C, 0x6A7D, 0x995D, 0x6A7E, 0x995E, 0x6A7F, - 0x995F, 0x6A81, 0x9960, 0x6A82, 0x9961, 0x6A83, 0x9962, 0x6A85, - 0x9963, 0x6A86, 0x9964, 0x6A87, 0x9965, 0x6A88, 0x9966, 0x6A89, - 0x9967, 0x6A8A, 0x9968, 0x6A8B, 0x9969, 0x6A8C, 0x996A, 0x6A8D, - 0x996B, 0x6A8F, 0x996C, 0x6A92, 0x996D, 0x6A93, 0x996E, 0x6A94, - 0x996F, 0x6A95, 0x9970, 0x6A96, 0x9971, 0x6A98, 0x9972, 0x6A99, - 0x9973, 0x6A9A, 0x9974, 0x6A9B, 0x9975, 0x6A9C, 0x9976, 0x6A9D, - 0x9977, 0x6A9E, 0x9978, 0x6A9F, 0x9979, 0x6AA1, 0x997A, 0x6AA2, - 0x997B, 0x6AA3, 0x997C, 0x6AA4, 0x997D, 0x6AA5, 0x997E, 0x6AA6, - 0x9980, 0x6AA7, 0x9981, 0x6AA8, 0x9982, 0x6AAA, 0x9983, 0x6AAD, - 0x9984, 0x6AAE, 0x9985, 0x6AAF, 0x9986, 0x6AB0, 0x9987, 0x6AB1, - 0x9988, 0x6AB2, 0x9989, 0x6AB3, 0x998A, 0x6AB4, 0x998B, 0x6AB5, - 0x998C, 0x6AB6, 0x998D, 0x6AB7, 0x998E, 0x6AB8, 0x998F, 0x6AB9, - 0x9990, 0x6ABA, 0x9991, 0x6ABB, 0x9992, 0x6ABC, 0x9993, 0x6ABD, - 0x9994, 0x6ABE, 0x9995, 0x6ABF, 0x9996, 0x6AC0, 0x9997, 0x6AC1, - 0x9998, 0x6AC2, 0x9999, 0x6AC3, 0x999A, 0x6AC4, 0x999B, 0x6AC5, - 0x999C, 0x6AC6, 0x999D, 0x6AC7, 0x999E, 0x6AC8, 0x999F, 0x6AC9, - 0x99A0, 0x6ACA, 0x99A1, 0x6ACB, 0x99A2, 0x6ACC, 0x99A3, 0x6ACD, - 0x99A4, 0x6ACE, 0x99A5, 0x6ACF, 0x99A6, 0x6AD0, 0x99A7, 0x6AD1, - 0x99A8, 0x6AD2, 0x99A9, 0x6AD3, 0x99AA, 0x6AD4, 0x99AB, 0x6AD5, - 0x99AC, 0x6AD6, 0x99AD, 0x6AD7, 0x99AE, 0x6AD8, 0x99AF, 0x6AD9, - 0x99B0, 0x6ADA, 0x99B1, 0x6ADB, 0x99B2, 0x6ADC, 0x99B3, 0x6ADD, - 0x99B4, 0x6ADE, 0x99B5, 0x6ADF, 0x99B6, 0x6AE0, 0x99B7, 0x6AE1, - 0x99B8, 0x6AE2, 0x99B9, 0x6AE3, 0x99BA, 0x6AE4, 0x99BB, 0x6AE5, - 0x99BC, 0x6AE6, 0x99BD, 0x6AE7, 0x99BE, 0x6AE8, 0x99BF, 0x6AE9, - 0x99C0, 0x6AEA, 0x99C1, 0x6AEB, 0x99C2, 0x6AEC, 0x99C3, 0x6AED, - 0x99C4, 0x6AEE, 0x99C5, 0x6AEF, 0x99C6, 0x6AF0, 0x99C7, 0x6AF1, - 0x99C8, 0x6AF2, 0x99C9, 0x6AF3, 0x99CA, 0x6AF4, 0x99CB, 0x6AF5, - 0x99CC, 0x6AF6, 0x99CD, 0x6AF7, 0x99CE, 0x6AF8, 0x99CF, 0x6AF9, - 0x99D0, 0x6AFA, 0x99D1, 0x6AFB, 0x99D2, 0x6AFC, 0x99D3, 0x6AFD, - 0x99D4, 0x6AFE, 0x99D5, 0x6AFF, 0x99D6, 0x6B00, 0x99D7, 0x6B01, - 0x99D8, 0x6B02, 0x99D9, 0x6B03, 0x99DA, 0x6B04, 0x99DB, 0x6B05, - 0x99DC, 0x6B06, 0x99DD, 0x6B07, 0x99DE, 0x6B08, 0x99DF, 0x6B09, - 0x99E0, 0x6B0A, 0x99E1, 0x6B0B, 0x99E2, 0x6B0C, 0x99E3, 0x6B0D, - 0x99E4, 0x6B0E, 0x99E5, 0x6B0F, 0x99E6, 0x6B10, 0x99E7, 0x6B11, - 0x99E8, 0x6B12, 0x99E9, 0x6B13, 0x99EA, 0x6B14, 0x99EB, 0x6B15, - 0x99EC, 0x6B16, 0x99ED, 0x6B17, 0x99EE, 0x6B18, 0x99EF, 0x6B19, - 0x99F0, 0x6B1A, 0x99F1, 0x6B1B, 0x99F2, 0x6B1C, 0x99F3, 0x6B1D, - 0x99F4, 0x6B1E, 0x99F5, 0x6B1F, 0x99F6, 0x6B25, 0x99F7, 0x6B26, - 0x99F8, 0x6B28, 0x99F9, 0x6B29, 0x99FA, 0x6B2A, 0x99FB, 0x6B2B, - 0x99FC, 0x6B2C, 0x99FD, 0x6B2D, 0x99FE, 0x6B2E, 0x9A40, 0x6B2F, - 0x9A41, 0x6B30, 0x9A42, 0x6B31, 0x9A43, 0x6B33, 0x9A44, 0x6B34, - 0x9A45, 0x6B35, 0x9A46, 0x6B36, 0x9A47, 0x6B38, 0x9A48, 0x6B3B, - 0x9A49, 0x6B3C, 0x9A4A, 0x6B3D, 0x9A4B, 0x6B3F, 0x9A4C, 0x6B40, - 0x9A4D, 0x6B41, 0x9A4E, 0x6B42, 0x9A4F, 0x6B44, 0x9A50, 0x6B45, - 0x9A51, 0x6B48, 0x9A52, 0x6B4A, 0x9A53, 0x6B4B, 0x9A54, 0x6B4D, - 0x9A55, 0x6B4E, 0x9A56, 0x6B4F, 0x9A57, 0x6B50, 0x9A58, 0x6B51, - 0x9A59, 0x6B52, 0x9A5A, 0x6B53, 0x9A5B, 0x6B54, 0x9A5C, 0x6B55, - 0x9A5D, 0x6B56, 0x9A5E, 0x6B57, 0x9A5F, 0x6B58, 0x9A60, 0x6B5A, - 0x9A61, 0x6B5B, 0x9A62, 0x6B5C, 0x9A63, 0x6B5D, 0x9A64, 0x6B5E, - 0x9A65, 0x6B5F, 0x9A66, 0x6B60, 0x9A67, 0x6B61, 0x9A68, 0x6B68, - 0x9A69, 0x6B69, 0x9A6A, 0x6B6B, 0x9A6B, 0x6B6C, 0x9A6C, 0x6B6D, - 0x9A6D, 0x6B6E, 0x9A6E, 0x6B6F, 0x9A6F, 0x6B70, 0x9A70, 0x6B71, - 0x9A71, 0x6B72, 0x9A72, 0x6B73, 0x9A73, 0x6B74, 0x9A74, 0x6B75, - 0x9A75, 0x6B76, 0x9A76, 0x6B77, 0x9A77, 0x6B78, 0x9A78, 0x6B7A, - 0x9A79, 0x6B7D, 0x9A7A, 0x6B7E, 0x9A7B, 0x6B7F, 0x9A7C, 0x6B80, - 0x9A7D, 0x6B85, 0x9A7E, 0x6B88, 0x9A80, 0x6B8C, 0x9A81, 0x6B8E, - 0x9A82, 0x6B8F, 0x9A83, 0x6B90, 0x9A84, 0x6B91, 0x9A85, 0x6B94, - 0x9A86, 0x6B95, 0x9A87, 0x6B97, 0x9A88, 0x6B98, 0x9A89, 0x6B99, - 0x9A8A, 0x6B9C, 0x9A8B, 0x6B9D, 0x9A8C, 0x6B9E, 0x9A8D, 0x6B9F, - 0x9A8E, 0x6BA0, 0x9A8F, 0x6BA2, 0x9A90, 0x6BA3, 0x9A91, 0x6BA4, - 0x9A92, 0x6BA5, 0x9A93, 0x6BA6, 0x9A94, 0x6BA7, 0x9A95, 0x6BA8, - 0x9A96, 0x6BA9, 0x9A97, 0x6BAB, 0x9A98, 0x6BAC, 0x9A99, 0x6BAD, - 0x9A9A, 0x6BAE, 0x9A9B, 0x6BAF, 0x9A9C, 0x6BB0, 0x9A9D, 0x6BB1, - 0x9A9E, 0x6BB2, 0x9A9F, 0x6BB6, 0x9AA0, 0x6BB8, 0x9AA1, 0x6BB9, - 0x9AA2, 0x6BBA, 0x9AA3, 0x6BBB, 0x9AA4, 0x6BBC, 0x9AA5, 0x6BBD, - 0x9AA6, 0x6BBE, 0x9AA7, 0x6BC0, 0x9AA8, 0x6BC3, 0x9AA9, 0x6BC4, - 0x9AAA, 0x6BC6, 0x9AAB, 0x6BC7, 0x9AAC, 0x6BC8, 0x9AAD, 0x6BC9, - 0x9AAE, 0x6BCA, 0x9AAF, 0x6BCC, 0x9AB0, 0x6BCE, 0x9AB1, 0x6BD0, - 0x9AB2, 0x6BD1, 0x9AB3, 0x6BD8, 0x9AB4, 0x6BDA, 0x9AB5, 0x6BDC, - 0x9AB6, 0x6BDD, 0x9AB7, 0x6BDE, 0x9AB8, 0x6BDF, 0x9AB9, 0x6BE0, - 0x9ABA, 0x6BE2, 0x9ABB, 0x6BE3, 0x9ABC, 0x6BE4, 0x9ABD, 0x6BE5, - 0x9ABE, 0x6BE6, 0x9ABF, 0x6BE7, 0x9AC0, 0x6BE8, 0x9AC1, 0x6BE9, - 0x9AC2, 0x6BEC, 0x9AC3, 0x6BED, 0x9AC4, 0x6BEE, 0x9AC5, 0x6BF0, - 0x9AC6, 0x6BF1, 0x9AC7, 0x6BF2, 0x9AC8, 0x6BF4, 0x9AC9, 0x6BF6, - 0x9ACA, 0x6BF7, 0x9ACB, 0x6BF8, 0x9ACC, 0x6BFA, 0x9ACD, 0x6BFB, - 0x9ACE, 0x6BFC, 0x9ACF, 0x6BFE, 0x9AD0, 0x6BFF, 0x9AD1, 0x6C00, - 0x9AD2, 0x6C01, 0x9AD3, 0x6C02, 0x9AD4, 0x6C03, 0x9AD5, 0x6C04, - 0x9AD6, 0x6C08, 0x9AD7, 0x6C09, 0x9AD8, 0x6C0A, 0x9AD9, 0x6C0B, - 0x9ADA, 0x6C0C, 0x9ADB, 0x6C0E, 0x9ADC, 0x6C12, 0x9ADD, 0x6C17, - 0x9ADE, 0x6C1C, 0x9ADF, 0x6C1D, 0x9AE0, 0x6C1E, 0x9AE1, 0x6C20, - 0x9AE2, 0x6C23, 0x9AE3, 0x6C25, 0x9AE4, 0x6C2B, 0x9AE5, 0x6C2C, - 0x9AE6, 0x6C2D, 0x9AE7, 0x6C31, 0x9AE8, 0x6C33, 0x9AE9, 0x6C36, - 0x9AEA, 0x6C37, 0x9AEB, 0x6C39, 0x9AEC, 0x6C3A, 0x9AED, 0x6C3B, - 0x9AEE, 0x6C3C, 0x9AEF, 0x6C3E, 0x9AF0, 0x6C3F, 0x9AF1, 0x6C43, - 0x9AF2, 0x6C44, 0x9AF3, 0x6C45, 0x9AF4, 0x6C48, 0x9AF5, 0x6C4B, - 0x9AF6, 0x6C4C, 0x9AF7, 0x6C4D, 0x9AF8, 0x6C4E, 0x9AF9, 0x6C4F, - 0x9AFA, 0x6C51, 0x9AFB, 0x6C52, 0x9AFC, 0x6C53, 0x9AFD, 0x6C56, - 0x9AFE, 0x6C58, 0x9B40, 0x6C59, 0x9B41, 0x6C5A, 0x9B42, 0x6C62, - 0x9B43, 0x6C63, 0x9B44, 0x6C65, 0x9B45, 0x6C66, 0x9B46, 0x6C67, - 0x9B47, 0x6C6B, 0x9B48, 0x6C6C, 0x9B49, 0x6C6D, 0x9B4A, 0x6C6E, - 0x9B4B, 0x6C6F, 0x9B4C, 0x6C71, 0x9B4D, 0x6C73, 0x9B4E, 0x6C75, - 0x9B4F, 0x6C77, 0x9B50, 0x6C78, 0x9B51, 0x6C7A, 0x9B52, 0x6C7B, - 0x9B53, 0x6C7C, 0x9B54, 0x6C7F, 0x9B55, 0x6C80, 0x9B56, 0x6C84, - 0x9B57, 0x6C87, 0x9B58, 0x6C8A, 0x9B59, 0x6C8B, 0x9B5A, 0x6C8D, - 0x9B5B, 0x6C8E, 0x9B5C, 0x6C91, 0x9B5D, 0x6C92, 0x9B5E, 0x6C95, - 0x9B5F, 0x6C96, 0x9B60, 0x6C97, 0x9B61, 0x6C98, 0x9B62, 0x6C9A, - 0x9B63, 0x6C9C, 0x9B64, 0x6C9D, 0x9B65, 0x6C9E, 0x9B66, 0x6CA0, - 0x9B67, 0x6CA2, 0x9B68, 0x6CA8, 0x9B69, 0x6CAC, 0x9B6A, 0x6CAF, - 0x9B6B, 0x6CB0, 0x9B6C, 0x6CB4, 0x9B6D, 0x6CB5, 0x9B6E, 0x6CB6, - 0x9B6F, 0x6CB7, 0x9B70, 0x6CBA, 0x9B71, 0x6CC0, 0x9B72, 0x6CC1, - 0x9B73, 0x6CC2, 0x9B74, 0x6CC3, 0x9B75, 0x6CC6, 0x9B76, 0x6CC7, - 0x9B77, 0x6CC8, 0x9B78, 0x6CCB, 0x9B79, 0x6CCD, 0x9B7A, 0x6CCE, - 0x9B7B, 0x6CCF, 0x9B7C, 0x6CD1, 0x9B7D, 0x6CD2, 0x9B7E, 0x6CD8, - 0x9B80, 0x6CD9, 0x9B81, 0x6CDA, 0x9B82, 0x6CDC, 0x9B83, 0x6CDD, - 0x9B84, 0x6CDF, 0x9B85, 0x6CE4, 0x9B86, 0x6CE6, 0x9B87, 0x6CE7, - 0x9B88, 0x6CE9, 0x9B89, 0x6CEC, 0x9B8A, 0x6CED, 0x9B8B, 0x6CF2, - 0x9B8C, 0x6CF4, 0x9B8D, 0x6CF9, 0x9B8E, 0x6CFF, 0x9B8F, 0x6D00, - 0x9B90, 0x6D02, 0x9B91, 0x6D03, 0x9B92, 0x6D05, 0x9B93, 0x6D06, - 0x9B94, 0x6D08, 0x9B95, 0x6D09, 0x9B96, 0x6D0A, 0x9B97, 0x6D0D, - 0x9B98, 0x6D0F, 0x9B99, 0x6D10, 0x9B9A, 0x6D11, 0x9B9B, 0x6D13, - 0x9B9C, 0x6D14, 0x9B9D, 0x6D15, 0x9B9E, 0x6D16, 0x9B9F, 0x6D18, - 0x9BA0, 0x6D1C, 0x9BA1, 0x6D1D, 0x9BA2, 0x6D1F, 0x9BA3, 0x6D20, - 0x9BA4, 0x6D21, 0x9BA5, 0x6D22, 0x9BA6, 0x6D23, 0x9BA7, 0x6D24, - 0x9BA8, 0x6D26, 0x9BA9, 0x6D28, 0x9BAA, 0x6D29, 0x9BAB, 0x6D2C, - 0x9BAC, 0x6D2D, 0x9BAD, 0x6D2F, 0x9BAE, 0x6D30, 0x9BAF, 0x6D34, - 0x9BB0, 0x6D36, 0x9BB1, 0x6D37, 0x9BB2, 0x6D38, 0x9BB3, 0x6D3A, - 0x9BB4, 0x6D3F, 0x9BB5, 0x6D40, 0x9BB6, 0x6D42, 0x9BB7, 0x6D44, - 0x9BB8, 0x6D49, 0x9BB9, 0x6D4C, 0x9BBA, 0x6D50, 0x9BBB, 0x6D55, - 0x9BBC, 0x6D56, 0x9BBD, 0x6D57, 0x9BBE, 0x6D58, 0x9BBF, 0x6D5B, - 0x9BC0, 0x6D5D, 0x9BC1, 0x6D5F, 0x9BC2, 0x6D61, 0x9BC3, 0x6D62, - 0x9BC4, 0x6D64, 0x9BC5, 0x6D65, 0x9BC6, 0x6D67, 0x9BC7, 0x6D68, - 0x9BC8, 0x6D6B, 0x9BC9, 0x6D6C, 0x9BCA, 0x6D6D, 0x9BCB, 0x6D70, - 0x9BCC, 0x6D71, 0x9BCD, 0x6D72, 0x9BCE, 0x6D73, 0x9BCF, 0x6D75, - 0x9BD0, 0x6D76, 0x9BD1, 0x6D79, 0x9BD2, 0x6D7A, 0x9BD3, 0x6D7B, - 0x9BD4, 0x6D7D, 0x9BD5, 0x6D7E, 0x9BD6, 0x6D7F, 0x9BD7, 0x6D80, - 0x9BD8, 0x6D81, 0x9BD9, 0x6D83, 0x9BDA, 0x6D84, 0x9BDB, 0x6D86, - 0x9BDC, 0x6D87, 0x9BDD, 0x6D8A, 0x9BDE, 0x6D8B, 0x9BDF, 0x6D8D, - 0x9BE0, 0x6D8F, 0x9BE1, 0x6D90, 0x9BE2, 0x6D92, 0x9BE3, 0x6D96, - 0x9BE4, 0x6D97, 0x9BE5, 0x6D98, 0x9BE6, 0x6D99, 0x9BE7, 0x6D9A, - 0x9BE8, 0x6D9C, 0x9BE9, 0x6DA2, 0x9BEA, 0x6DA5, 0x9BEB, 0x6DAC, - 0x9BEC, 0x6DAD, 0x9BED, 0x6DB0, 0x9BEE, 0x6DB1, 0x9BEF, 0x6DB3, - 0x9BF0, 0x6DB4, 0x9BF1, 0x6DB6, 0x9BF2, 0x6DB7, 0x9BF3, 0x6DB9, - 0x9BF4, 0x6DBA, 0x9BF5, 0x6DBB, 0x9BF6, 0x6DBC, 0x9BF7, 0x6DBD, - 0x9BF8, 0x6DBE, 0x9BF9, 0x6DC1, 0x9BFA, 0x6DC2, 0x9BFB, 0x6DC3, - 0x9BFC, 0x6DC8, 0x9BFD, 0x6DC9, 0x9BFE, 0x6DCA, 0x9C40, 0x6DCD, - 0x9C41, 0x6DCE, 0x9C42, 0x6DCF, 0x9C43, 0x6DD0, 0x9C44, 0x6DD2, - 0x9C45, 0x6DD3, 0x9C46, 0x6DD4, 0x9C47, 0x6DD5, 0x9C48, 0x6DD7, - 0x9C49, 0x6DDA, 0x9C4A, 0x6DDB, 0x9C4B, 0x6DDC, 0x9C4C, 0x6DDF, - 0x9C4D, 0x6DE2, 0x9C4E, 0x6DE3, 0x9C4F, 0x6DE5, 0x9C50, 0x6DE7, - 0x9C51, 0x6DE8, 0x9C52, 0x6DE9, 0x9C53, 0x6DEA, 0x9C54, 0x6DED, - 0x9C55, 0x6DEF, 0x9C56, 0x6DF0, 0x9C57, 0x6DF2, 0x9C58, 0x6DF4, - 0x9C59, 0x6DF5, 0x9C5A, 0x6DF6, 0x9C5B, 0x6DF8, 0x9C5C, 0x6DFA, - 0x9C5D, 0x6DFD, 0x9C5E, 0x6DFE, 0x9C5F, 0x6DFF, 0x9C60, 0x6E00, - 0x9C61, 0x6E01, 0x9C62, 0x6E02, 0x9C63, 0x6E03, 0x9C64, 0x6E04, - 0x9C65, 0x6E06, 0x9C66, 0x6E07, 0x9C67, 0x6E08, 0x9C68, 0x6E09, - 0x9C69, 0x6E0B, 0x9C6A, 0x6E0F, 0x9C6B, 0x6E12, 0x9C6C, 0x6E13, - 0x9C6D, 0x6E15, 0x9C6E, 0x6E18, 0x9C6F, 0x6E19, 0x9C70, 0x6E1B, - 0x9C71, 0x6E1C, 0x9C72, 0x6E1E, 0x9C73, 0x6E1F, 0x9C74, 0x6E22, - 0x9C75, 0x6E26, 0x9C76, 0x6E27, 0x9C77, 0x6E28, 0x9C78, 0x6E2A, - 0x9C79, 0x6E2C, 0x9C7A, 0x6E2E, 0x9C7B, 0x6E30, 0x9C7C, 0x6E31, - 0x9C7D, 0x6E33, 0x9C7E, 0x6E35, 0x9C80, 0x6E36, 0x9C81, 0x6E37, - 0x9C82, 0x6E39, 0x9C83, 0x6E3B, 0x9C84, 0x6E3C, 0x9C85, 0x6E3D, - 0x9C86, 0x6E3E, 0x9C87, 0x6E3F, 0x9C88, 0x6E40, 0x9C89, 0x6E41, - 0x9C8A, 0x6E42, 0x9C8B, 0x6E45, 0x9C8C, 0x6E46, 0x9C8D, 0x6E47, - 0x9C8E, 0x6E48, 0x9C8F, 0x6E49, 0x9C90, 0x6E4A, 0x9C91, 0x6E4B, - 0x9C92, 0x6E4C, 0x9C93, 0x6E4F, 0x9C94, 0x6E50, 0x9C95, 0x6E51, - 0x9C96, 0x6E52, 0x9C97, 0x6E55, 0x9C98, 0x6E57, 0x9C99, 0x6E59, - 0x9C9A, 0x6E5A, 0x9C9B, 0x6E5C, 0x9C9C, 0x6E5D, 0x9C9D, 0x6E5E, - 0x9C9E, 0x6E60, 0x9C9F, 0x6E61, 0x9CA0, 0x6E62, 0x9CA1, 0x6E63, - 0x9CA2, 0x6E64, 0x9CA3, 0x6E65, 0x9CA4, 0x6E66, 0x9CA5, 0x6E67, - 0x9CA6, 0x6E68, 0x9CA7, 0x6E69, 0x9CA8, 0x6E6A, 0x9CA9, 0x6E6C, - 0x9CAA, 0x6E6D, 0x9CAB, 0x6E6F, 0x9CAC, 0x6E70, 0x9CAD, 0x6E71, - 0x9CAE, 0x6E72, 0x9CAF, 0x6E73, 0x9CB0, 0x6E74, 0x9CB1, 0x6E75, - 0x9CB2, 0x6E76, 0x9CB3, 0x6E77, 0x9CB4, 0x6E78, 0x9CB5, 0x6E79, - 0x9CB6, 0x6E7A, 0x9CB7, 0x6E7B, 0x9CB8, 0x6E7C, 0x9CB9, 0x6E7D, - 0x9CBA, 0x6E80, 0x9CBB, 0x6E81, 0x9CBC, 0x6E82, 0x9CBD, 0x6E84, - 0x9CBE, 0x6E87, 0x9CBF, 0x6E88, 0x9CC0, 0x6E8A, 0x9CC1, 0x6E8B, - 0x9CC2, 0x6E8C, 0x9CC3, 0x6E8D, 0x9CC4, 0x6E8E, 0x9CC5, 0x6E91, - 0x9CC6, 0x6E92, 0x9CC7, 0x6E93, 0x9CC8, 0x6E94, 0x9CC9, 0x6E95, - 0x9CCA, 0x6E96, 0x9CCB, 0x6E97, 0x9CCC, 0x6E99, 0x9CCD, 0x6E9A, - 0x9CCE, 0x6E9B, 0x9CCF, 0x6E9D, 0x9CD0, 0x6E9E, 0x9CD1, 0x6EA0, - 0x9CD2, 0x6EA1, 0x9CD3, 0x6EA3, 0x9CD4, 0x6EA4, 0x9CD5, 0x6EA6, - 0x9CD6, 0x6EA8, 0x9CD7, 0x6EA9, 0x9CD8, 0x6EAB, 0x9CD9, 0x6EAC, - 0x9CDA, 0x6EAD, 0x9CDB, 0x6EAE, 0x9CDC, 0x6EB0, 0x9CDD, 0x6EB3, - 0x9CDE, 0x6EB5, 0x9CDF, 0x6EB8, 0x9CE0, 0x6EB9, 0x9CE1, 0x6EBC, - 0x9CE2, 0x6EBE, 0x9CE3, 0x6EBF, 0x9CE4, 0x6EC0, 0x9CE5, 0x6EC3, - 0x9CE6, 0x6EC4, 0x9CE7, 0x6EC5, 0x9CE8, 0x6EC6, 0x9CE9, 0x6EC8, - 0x9CEA, 0x6EC9, 0x9CEB, 0x6ECA, 0x9CEC, 0x6ECC, 0x9CED, 0x6ECD, - 0x9CEE, 0x6ECE, 0x9CEF, 0x6ED0, 0x9CF0, 0x6ED2, 0x9CF1, 0x6ED6, - 0x9CF2, 0x6ED8, 0x9CF3, 0x6ED9, 0x9CF4, 0x6EDB, 0x9CF5, 0x6EDC, - 0x9CF6, 0x6EDD, 0x9CF7, 0x6EE3, 0x9CF8, 0x6EE7, 0x9CF9, 0x6EEA, - 0x9CFA, 0x6EEB, 0x9CFB, 0x6EEC, 0x9CFC, 0x6EED, 0x9CFD, 0x6EEE, - 0x9CFE, 0x6EEF, 0x9D40, 0x6EF0, 0x9D41, 0x6EF1, 0x9D42, 0x6EF2, - 0x9D43, 0x6EF3, 0x9D44, 0x6EF5, 0x9D45, 0x6EF6, 0x9D46, 0x6EF7, - 0x9D47, 0x6EF8, 0x9D48, 0x6EFA, 0x9D49, 0x6EFB, 0x9D4A, 0x6EFC, - 0x9D4B, 0x6EFD, 0x9D4C, 0x6EFE, 0x9D4D, 0x6EFF, 0x9D4E, 0x6F00, - 0x9D4F, 0x6F01, 0x9D50, 0x6F03, 0x9D51, 0x6F04, 0x9D52, 0x6F05, - 0x9D53, 0x6F07, 0x9D54, 0x6F08, 0x9D55, 0x6F0A, 0x9D56, 0x6F0B, - 0x9D57, 0x6F0C, 0x9D58, 0x6F0D, 0x9D59, 0x6F0E, 0x9D5A, 0x6F10, - 0x9D5B, 0x6F11, 0x9D5C, 0x6F12, 0x9D5D, 0x6F16, 0x9D5E, 0x6F17, - 0x9D5F, 0x6F18, 0x9D60, 0x6F19, 0x9D61, 0x6F1A, 0x9D62, 0x6F1B, - 0x9D63, 0x6F1C, 0x9D64, 0x6F1D, 0x9D65, 0x6F1E, 0x9D66, 0x6F1F, - 0x9D67, 0x6F21, 0x9D68, 0x6F22, 0x9D69, 0x6F23, 0x9D6A, 0x6F25, - 0x9D6B, 0x6F26, 0x9D6C, 0x6F27, 0x9D6D, 0x6F28, 0x9D6E, 0x6F2C, - 0x9D6F, 0x6F2E, 0x9D70, 0x6F30, 0x9D71, 0x6F32, 0x9D72, 0x6F34, - 0x9D73, 0x6F35, 0x9D74, 0x6F37, 0x9D75, 0x6F38, 0x9D76, 0x6F39, - 0x9D77, 0x6F3A, 0x9D78, 0x6F3B, 0x9D79, 0x6F3C, 0x9D7A, 0x6F3D, - 0x9D7B, 0x6F3F, 0x9D7C, 0x6F40, 0x9D7D, 0x6F41, 0x9D7E, 0x6F42, - 0x9D80, 0x6F43, 0x9D81, 0x6F44, 0x9D82, 0x6F45, 0x9D83, 0x6F48, - 0x9D84, 0x6F49, 0x9D85, 0x6F4A, 0x9D86, 0x6F4C, 0x9D87, 0x6F4E, - 0x9D88, 0x6F4F, 0x9D89, 0x6F50, 0x9D8A, 0x6F51, 0x9D8B, 0x6F52, - 0x9D8C, 0x6F53, 0x9D8D, 0x6F54, 0x9D8E, 0x6F55, 0x9D8F, 0x6F56, - 0x9D90, 0x6F57, 0x9D91, 0x6F59, 0x9D92, 0x6F5A, 0x9D93, 0x6F5B, - 0x9D94, 0x6F5D, 0x9D95, 0x6F5F, 0x9D96, 0x6F60, 0x9D97, 0x6F61, - 0x9D98, 0x6F63, 0x9D99, 0x6F64, 0x9D9A, 0x6F65, 0x9D9B, 0x6F67, - 0x9D9C, 0x6F68, 0x9D9D, 0x6F69, 0x9D9E, 0x6F6A, 0x9D9F, 0x6F6B, - 0x9DA0, 0x6F6C, 0x9DA1, 0x6F6F, 0x9DA2, 0x6F70, 0x9DA3, 0x6F71, - 0x9DA4, 0x6F73, 0x9DA5, 0x6F75, 0x9DA6, 0x6F76, 0x9DA7, 0x6F77, - 0x9DA8, 0x6F79, 0x9DA9, 0x6F7B, 0x9DAA, 0x6F7D, 0x9DAB, 0x6F7E, - 0x9DAC, 0x6F7F, 0x9DAD, 0x6F80, 0x9DAE, 0x6F81, 0x9DAF, 0x6F82, - 0x9DB0, 0x6F83, 0x9DB1, 0x6F85, 0x9DB2, 0x6F86, 0x9DB3, 0x6F87, - 0x9DB4, 0x6F8A, 0x9DB5, 0x6F8B, 0x9DB6, 0x6F8F, 0x9DB7, 0x6F90, - 0x9DB8, 0x6F91, 0x9DB9, 0x6F92, 0x9DBA, 0x6F93, 0x9DBB, 0x6F94, - 0x9DBC, 0x6F95, 0x9DBD, 0x6F96, 0x9DBE, 0x6F97, 0x9DBF, 0x6F98, - 0x9DC0, 0x6F99, 0x9DC1, 0x6F9A, 0x9DC2, 0x6F9B, 0x9DC3, 0x6F9D, - 0x9DC4, 0x6F9E, 0x9DC5, 0x6F9F, 0x9DC6, 0x6FA0, 0x9DC7, 0x6FA2, - 0x9DC8, 0x6FA3, 0x9DC9, 0x6FA4, 0x9DCA, 0x6FA5, 0x9DCB, 0x6FA6, - 0x9DCC, 0x6FA8, 0x9DCD, 0x6FA9, 0x9DCE, 0x6FAA, 0x9DCF, 0x6FAB, - 0x9DD0, 0x6FAC, 0x9DD1, 0x6FAD, 0x9DD2, 0x6FAE, 0x9DD3, 0x6FAF, - 0x9DD4, 0x6FB0, 0x9DD5, 0x6FB1, 0x9DD6, 0x6FB2, 0x9DD7, 0x6FB4, - 0x9DD8, 0x6FB5, 0x9DD9, 0x6FB7, 0x9DDA, 0x6FB8, 0x9DDB, 0x6FBA, - 0x9DDC, 0x6FBB, 0x9DDD, 0x6FBC, 0x9DDE, 0x6FBD, 0x9DDF, 0x6FBE, - 0x9DE0, 0x6FBF, 0x9DE1, 0x6FC1, 0x9DE2, 0x6FC3, 0x9DE3, 0x6FC4, - 0x9DE4, 0x6FC5, 0x9DE5, 0x6FC6, 0x9DE6, 0x6FC7, 0x9DE7, 0x6FC8, - 0x9DE8, 0x6FCA, 0x9DE9, 0x6FCB, 0x9DEA, 0x6FCC, 0x9DEB, 0x6FCD, - 0x9DEC, 0x6FCE, 0x9DED, 0x6FCF, 0x9DEE, 0x6FD0, 0x9DEF, 0x6FD3, - 0x9DF0, 0x6FD4, 0x9DF1, 0x6FD5, 0x9DF2, 0x6FD6, 0x9DF3, 0x6FD7, - 0x9DF4, 0x6FD8, 0x9DF5, 0x6FD9, 0x9DF6, 0x6FDA, 0x9DF7, 0x6FDB, - 0x9DF8, 0x6FDC, 0x9DF9, 0x6FDD, 0x9DFA, 0x6FDF, 0x9DFB, 0x6FE2, - 0x9DFC, 0x6FE3, 0x9DFD, 0x6FE4, 0x9DFE, 0x6FE5, 0x9E40, 0x6FE6, - 0x9E41, 0x6FE7, 0x9E42, 0x6FE8, 0x9E43, 0x6FE9, 0x9E44, 0x6FEA, - 0x9E45, 0x6FEB, 0x9E46, 0x6FEC, 0x9E47, 0x6FED, 0x9E48, 0x6FF0, - 0x9E49, 0x6FF1, 0x9E4A, 0x6FF2, 0x9E4B, 0x6FF3, 0x9E4C, 0x6FF4, - 0x9E4D, 0x6FF5, 0x9E4E, 0x6FF6, 0x9E4F, 0x6FF7, 0x9E50, 0x6FF8, - 0x9E51, 0x6FF9, 0x9E52, 0x6FFA, 0x9E53, 0x6FFB, 0x9E54, 0x6FFC, - 0x9E55, 0x6FFD, 0x9E56, 0x6FFE, 0x9E57, 0x6FFF, 0x9E58, 0x7000, - 0x9E59, 0x7001, 0x9E5A, 0x7002, 0x9E5B, 0x7003, 0x9E5C, 0x7004, - 0x9E5D, 0x7005, 0x9E5E, 0x7006, 0x9E5F, 0x7007, 0x9E60, 0x7008, - 0x9E61, 0x7009, 0x9E62, 0x700A, 0x9E63, 0x700B, 0x9E64, 0x700C, - 0x9E65, 0x700D, 0x9E66, 0x700E, 0x9E67, 0x700F, 0x9E68, 0x7010, - 0x9E69, 0x7012, 0x9E6A, 0x7013, 0x9E6B, 0x7014, 0x9E6C, 0x7015, - 0x9E6D, 0x7016, 0x9E6E, 0x7017, 0x9E6F, 0x7018, 0x9E70, 0x7019, - 0x9E71, 0x701C, 0x9E72, 0x701D, 0x9E73, 0x701E, 0x9E74, 0x701F, - 0x9E75, 0x7020, 0x9E76, 0x7021, 0x9E77, 0x7022, 0x9E78, 0x7024, - 0x9E79, 0x7025, 0x9E7A, 0x7026, 0x9E7B, 0x7027, 0x9E7C, 0x7028, - 0x9E7D, 0x7029, 0x9E7E, 0x702A, 0x9E80, 0x702B, 0x9E81, 0x702C, - 0x9E82, 0x702D, 0x9E83, 0x702E, 0x9E84, 0x702F, 0x9E85, 0x7030, - 0x9E86, 0x7031, 0x9E87, 0x7032, 0x9E88, 0x7033, 0x9E89, 0x7034, - 0x9E8A, 0x7036, 0x9E8B, 0x7037, 0x9E8C, 0x7038, 0x9E8D, 0x703A, - 0x9E8E, 0x703B, 0x9E8F, 0x703C, 0x9E90, 0x703D, 0x9E91, 0x703E, - 0x9E92, 0x703F, 0x9E93, 0x7040, 0x9E94, 0x7041, 0x9E95, 0x7042, - 0x9E96, 0x7043, 0x9E97, 0x7044, 0x9E98, 0x7045, 0x9E99, 0x7046, - 0x9E9A, 0x7047, 0x9E9B, 0x7048, 0x9E9C, 0x7049, 0x9E9D, 0x704A, - 0x9E9E, 0x704B, 0x9E9F, 0x704D, 0x9EA0, 0x704E, 0x9EA1, 0x7050, - 0x9EA2, 0x7051, 0x9EA3, 0x7052, 0x9EA4, 0x7053, 0x9EA5, 0x7054, - 0x9EA6, 0x7055, 0x9EA7, 0x7056, 0x9EA8, 0x7057, 0x9EA9, 0x7058, - 0x9EAA, 0x7059, 0x9EAB, 0x705A, 0x9EAC, 0x705B, 0x9EAD, 0x705C, - 0x9EAE, 0x705D, 0x9EAF, 0x705F, 0x9EB0, 0x7060, 0x9EB1, 0x7061, - 0x9EB2, 0x7062, 0x9EB3, 0x7063, 0x9EB4, 0x7064, 0x9EB5, 0x7065, - 0x9EB6, 0x7066, 0x9EB7, 0x7067, 0x9EB8, 0x7068, 0x9EB9, 0x7069, - 0x9EBA, 0x706A, 0x9EBB, 0x706E, 0x9EBC, 0x7071, 0x9EBD, 0x7072, - 0x9EBE, 0x7073, 0x9EBF, 0x7074, 0x9EC0, 0x7077, 0x9EC1, 0x7079, - 0x9EC2, 0x707A, 0x9EC3, 0x707B, 0x9EC4, 0x707D, 0x9EC5, 0x7081, - 0x9EC6, 0x7082, 0x9EC7, 0x7083, 0x9EC8, 0x7084, 0x9EC9, 0x7086, - 0x9ECA, 0x7087, 0x9ECB, 0x7088, 0x9ECC, 0x708B, 0x9ECD, 0x708C, - 0x9ECE, 0x708D, 0x9ECF, 0x708F, 0x9ED0, 0x7090, 0x9ED1, 0x7091, - 0x9ED2, 0x7093, 0x9ED3, 0x7097, 0x9ED4, 0x7098, 0x9ED5, 0x709A, - 0x9ED6, 0x709B, 0x9ED7, 0x709E, 0x9ED8, 0x709F, 0x9ED9, 0x70A0, - 0x9EDA, 0x70A1, 0x9EDB, 0x70A2, 0x9EDC, 0x70A3, 0x9EDD, 0x70A4, - 0x9EDE, 0x70A5, 0x9EDF, 0x70A6, 0x9EE0, 0x70A7, 0x9EE1, 0x70A8, - 0x9EE2, 0x70A9, 0x9EE3, 0x70AA, 0x9EE4, 0x70B0, 0x9EE5, 0x70B2, - 0x9EE6, 0x70B4, 0x9EE7, 0x70B5, 0x9EE8, 0x70B6, 0x9EE9, 0x70BA, - 0x9EEA, 0x70BE, 0x9EEB, 0x70BF, 0x9EEC, 0x70C4, 0x9EED, 0x70C5, - 0x9EEE, 0x70C6, 0x9EEF, 0x70C7, 0x9EF0, 0x70C9, 0x9EF1, 0x70CB, - 0x9EF2, 0x70CC, 0x9EF3, 0x70CD, 0x9EF4, 0x70CE, 0x9EF5, 0x70CF, - 0x9EF6, 0x70D0, 0x9EF7, 0x70D1, 0x9EF8, 0x70D2, 0x9EF9, 0x70D3, - 0x9EFA, 0x70D4, 0x9EFB, 0x70D5, 0x9EFC, 0x70D6, 0x9EFD, 0x70D7, - 0x9EFE, 0x70DA, 0x9F40, 0x70DC, 0x9F41, 0x70DD, 0x9F42, 0x70DE, - 0x9F43, 0x70E0, 0x9F44, 0x70E1, 0x9F45, 0x70E2, 0x9F46, 0x70E3, - 0x9F47, 0x70E5, 0x9F48, 0x70EA, 0x9F49, 0x70EE, 0x9F4A, 0x70F0, - 0x9F4B, 0x70F1, 0x9F4C, 0x70F2, 0x9F4D, 0x70F3, 0x9F4E, 0x70F4, - 0x9F4F, 0x70F5, 0x9F50, 0x70F6, 0x9F51, 0x70F8, 0x9F52, 0x70FA, - 0x9F53, 0x70FB, 0x9F54, 0x70FC, 0x9F55, 0x70FE, 0x9F56, 0x70FF, - 0x9F57, 0x7100, 0x9F58, 0x7101, 0x9F59, 0x7102, 0x9F5A, 0x7103, - 0x9F5B, 0x7104, 0x9F5C, 0x7105, 0x9F5D, 0x7106, 0x9F5E, 0x7107, - 0x9F5F, 0x7108, 0x9F60, 0x710B, 0x9F61, 0x710C, 0x9F62, 0x710D, - 0x9F63, 0x710E, 0x9F64, 0x710F, 0x9F65, 0x7111, 0x9F66, 0x7112, - 0x9F67, 0x7114, 0x9F68, 0x7117, 0x9F69, 0x711B, 0x9F6A, 0x711C, - 0x9F6B, 0x711D, 0x9F6C, 0x711E, 0x9F6D, 0x711F, 0x9F6E, 0x7120, - 0x9F6F, 0x7121, 0x9F70, 0x7122, 0x9F71, 0x7123, 0x9F72, 0x7124, - 0x9F73, 0x7125, 0x9F74, 0x7127, 0x9F75, 0x7128, 0x9F76, 0x7129, - 0x9F77, 0x712A, 0x9F78, 0x712B, 0x9F79, 0x712C, 0x9F7A, 0x712D, - 0x9F7B, 0x712E, 0x9F7C, 0x7132, 0x9F7D, 0x7133, 0x9F7E, 0x7134, - 0x9F80, 0x7135, 0x9F81, 0x7137, 0x9F82, 0x7138, 0x9F83, 0x7139, - 0x9F84, 0x713A, 0x9F85, 0x713B, 0x9F86, 0x713C, 0x9F87, 0x713D, - 0x9F88, 0x713E, 0x9F89, 0x713F, 0x9F8A, 0x7140, 0x9F8B, 0x7141, - 0x9F8C, 0x7142, 0x9F8D, 0x7143, 0x9F8E, 0x7144, 0x9F8F, 0x7146, - 0x9F90, 0x7147, 0x9F91, 0x7148, 0x9F92, 0x7149, 0x9F93, 0x714B, - 0x9F94, 0x714D, 0x9F95, 0x714F, 0x9F96, 0x7150, 0x9F97, 0x7151, - 0x9F98, 0x7152, 0x9F99, 0x7153, 0x9F9A, 0x7154, 0x9F9B, 0x7155, - 0x9F9C, 0x7156, 0x9F9D, 0x7157, 0x9F9E, 0x7158, 0x9F9F, 0x7159, - 0x9FA0, 0x715A, 0x9FA1, 0x715B, 0x9FA2, 0x715D, 0x9FA3, 0x715F, - 0x9FA4, 0x7160, 0x9FA5, 0x7161, 0x9FA6, 0x7162, 0x9FA7, 0x7163, - 0x9FA8, 0x7165, 0x9FA9, 0x7169, 0x9FAA, 0x716A, 0x9FAB, 0x716B, - 0x9FAC, 0x716C, 0x9FAD, 0x716D, 0x9FAE, 0x716F, 0x9FAF, 0x7170, - 0x9FB0, 0x7171, 0x9FB1, 0x7174, 0x9FB2, 0x7175, 0x9FB3, 0x7176, - 0x9FB4, 0x7177, 0x9FB5, 0x7179, 0x9FB6, 0x717B, 0x9FB7, 0x717C, - 0x9FB8, 0x717E, 0x9FB9, 0x717F, 0x9FBA, 0x7180, 0x9FBB, 0x7181, - 0x9FBC, 0x7182, 0x9FBD, 0x7183, 0x9FBE, 0x7185, 0x9FBF, 0x7186, - 0x9FC0, 0x7187, 0x9FC1, 0x7188, 0x9FC2, 0x7189, 0x9FC3, 0x718B, - 0x9FC4, 0x718C, 0x9FC5, 0x718D, 0x9FC6, 0x718E, 0x9FC7, 0x7190, - 0x9FC8, 0x7191, 0x9FC9, 0x7192, 0x9FCA, 0x7193, 0x9FCB, 0x7195, - 0x9FCC, 0x7196, 0x9FCD, 0x7197, 0x9FCE, 0x719A, 0x9FCF, 0x719B, - 0x9FD0, 0x719C, 0x9FD1, 0x719D, 0x9FD2, 0x719E, 0x9FD3, 0x71A1, - 0x9FD4, 0x71A2, 0x9FD5, 0x71A3, 0x9FD6, 0x71A4, 0x9FD7, 0x71A5, - 0x9FD8, 0x71A6, 0x9FD9, 0x71A7, 0x9FDA, 0x71A9, 0x9FDB, 0x71AA, - 0x9FDC, 0x71AB, 0x9FDD, 0x71AD, 0x9FDE, 0x71AE, 0x9FDF, 0x71AF, - 0x9FE0, 0x71B0, 0x9FE1, 0x71B1, 0x9FE2, 0x71B2, 0x9FE3, 0x71B4, - 0x9FE4, 0x71B6, 0x9FE5, 0x71B7, 0x9FE6, 0x71B8, 0x9FE7, 0x71BA, - 0x9FE8, 0x71BB, 0x9FE9, 0x71BC, 0x9FEA, 0x71BD, 0x9FEB, 0x71BE, - 0x9FEC, 0x71BF, 0x9FED, 0x71C0, 0x9FEE, 0x71C1, 0x9FEF, 0x71C2, - 0x9FF0, 0x71C4, 0x9FF1, 0x71C5, 0x9FF2, 0x71C6, 0x9FF3, 0x71C7, - 0x9FF4, 0x71C8, 0x9FF5, 0x71C9, 0x9FF6, 0x71CA, 0x9FF7, 0x71CB, - 0x9FF8, 0x71CC, 0x9FF9, 0x71CD, 0x9FFA, 0x71CF, 0x9FFB, 0x71D0, - 0x9FFC, 0x71D1, 0x9FFD, 0x71D2, 0x9FFE, 0x71D3, 0xA040, 0x71D6, - 0xA041, 0x71D7, 0xA042, 0x71D8, 0xA043, 0x71D9, 0xA044, 0x71DA, - 0xA045, 0x71DB, 0xA046, 0x71DC, 0xA047, 0x71DD, 0xA048, 0x71DE, - 0xA049, 0x71DF, 0xA04A, 0x71E1, 0xA04B, 0x71E2, 0xA04C, 0x71E3, - 0xA04D, 0x71E4, 0xA04E, 0x71E6, 0xA04F, 0x71E8, 0xA050, 0x71E9, - 0xA051, 0x71EA, 0xA052, 0x71EB, 0xA053, 0x71EC, 0xA054, 0x71ED, - 0xA055, 0x71EF, 0xA056, 0x71F0, 0xA057, 0x71F1, 0xA058, 0x71F2, - 0xA059, 0x71F3, 0xA05A, 0x71F4, 0xA05B, 0x71F5, 0xA05C, 0x71F6, - 0xA05D, 0x71F7, 0xA05E, 0x71F8, 0xA05F, 0x71FA, 0xA060, 0x71FB, - 0xA061, 0x71FC, 0xA062, 0x71FD, 0xA063, 0x71FE, 0xA064, 0x71FF, - 0xA065, 0x7200, 0xA066, 0x7201, 0xA067, 0x7202, 0xA068, 0x7203, - 0xA069, 0x7204, 0xA06A, 0x7205, 0xA06B, 0x7207, 0xA06C, 0x7208, - 0xA06D, 0x7209, 0xA06E, 0x720A, 0xA06F, 0x720B, 0xA070, 0x720C, - 0xA071, 0x720D, 0xA072, 0x720E, 0xA073, 0x720F, 0xA074, 0x7210, - 0xA075, 0x7211, 0xA076, 0x7212, 0xA077, 0x7213, 0xA078, 0x7214, - 0xA079, 0x7215, 0xA07A, 0x7216, 0xA07B, 0x7217, 0xA07C, 0x7218, - 0xA07D, 0x7219, 0xA07E, 0x721A, 0xA080, 0x721B, 0xA081, 0x721C, - 0xA082, 0x721E, 0xA083, 0x721F, 0xA084, 0x7220, 0xA085, 0x7221, - 0xA086, 0x7222, 0xA087, 0x7223, 0xA088, 0x7224, 0xA089, 0x7225, - 0xA08A, 0x7226, 0xA08B, 0x7227, 0xA08C, 0x7229, 0xA08D, 0x722B, - 0xA08E, 0x722D, 0xA08F, 0x722E, 0xA090, 0x722F, 0xA091, 0x7232, - 0xA092, 0x7233, 0xA093, 0x7234, 0xA094, 0x723A, 0xA095, 0x723C, - 0xA096, 0x723E, 0xA097, 0x7240, 0xA098, 0x7241, 0xA099, 0x7242, - 0xA09A, 0x7243, 0xA09B, 0x7244, 0xA09C, 0x7245, 0xA09D, 0x7246, - 0xA09E, 0x7249, 0xA09F, 0x724A, 0xA0A0, 0x724B, 0xA0A1, 0x724E, - 0xA0A2, 0x724F, 0xA0A3, 0x7250, 0xA0A4, 0x7251, 0xA0A5, 0x7253, - 0xA0A6, 0x7254, 0xA0A7, 0x7255, 0xA0A8, 0x7257, 0xA0A9, 0x7258, - 0xA0AA, 0x725A, 0xA0AB, 0x725C, 0xA0AC, 0x725E, 0xA0AD, 0x7260, - 0xA0AE, 0x7263, 0xA0AF, 0x7264, 0xA0B0, 0x7265, 0xA0B1, 0x7268, - 0xA0B2, 0x726A, 0xA0B3, 0x726B, 0xA0B4, 0x726C, 0xA0B5, 0x726D, - 0xA0B6, 0x7270, 0xA0B7, 0x7271, 0xA0B8, 0x7273, 0xA0B9, 0x7274, - 0xA0BA, 0x7276, 0xA0BB, 0x7277, 0xA0BC, 0x7278, 0xA0BD, 0x727B, - 0xA0BE, 0x727C, 0xA0BF, 0x727D, 0xA0C0, 0x7282, 0xA0C1, 0x7283, - 0xA0C2, 0x7285, 0xA0C3, 0x7286, 0xA0C4, 0x7287, 0xA0C5, 0x7288, - 0xA0C6, 0x7289, 0xA0C7, 0x728C, 0xA0C8, 0x728E, 0xA0C9, 0x7290, - 0xA0CA, 0x7291, 0xA0CB, 0x7293, 0xA0CC, 0x7294, 0xA0CD, 0x7295, - 0xA0CE, 0x7296, 0xA0CF, 0x7297, 0xA0D0, 0x7298, 0xA0D1, 0x7299, - 0xA0D2, 0x729A, 0xA0D3, 0x729B, 0xA0D4, 0x729C, 0xA0D5, 0x729D, - 0xA0D6, 0x729E, 0xA0D7, 0x72A0, 0xA0D8, 0x72A1, 0xA0D9, 0x72A2, - 0xA0DA, 0x72A3, 0xA0DB, 0x72A4, 0xA0DC, 0x72A5, 0xA0DD, 0x72A6, - 0xA0DE, 0x72A7, 0xA0DF, 0x72A8, 0xA0E0, 0x72A9, 0xA0E1, 0x72AA, - 0xA0E2, 0x72AB, 0xA0E3, 0x72AE, 0xA0E4, 0x72B1, 0xA0E5, 0x72B2, - 0xA0E6, 0x72B3, 0xA0E7, 0x72B5, 0xA0E8, 0x72BA, 0xA0E9, 0x72BB, - 0xA0EA, 0x72BC, 0xA0EB, 0x72BD, 0xA0EC, 0x72BE, 0xA0ED, 0x72BF, - 0xA0EE, 0x72C0, 0xA0EF, 0x72C5, 0xA0F0, 0x72C6, 0xA0F1, 0x72C7, - 0xA0F2, 0x72C9, 0xA0F3, 0x72CA, 0xA0F4, 0x72CB, 0xA0F5, 0x72CC, - 0xA0F6, 0x72CF, 0xA0F7, 0x72D1, 0xA0F8, 0x72D3, 0xA0F9, 0x72D4, - 0xA0FA, 0x72D5, 0xA0FB, 0x72D6, 0xA0FC, 0x72D8, 0xA0FD, 0x72DA, - 0xA0FE, 0x72DB, 0xA1A1, 0x3000, 0xA1A2, 0x3001, 0xA1A3, 0x3002, - 0xA1A4, 0x00B7, 0xA1A5, 0x02C9, 0xA1A6, 0x02C7, 0xA1A7, 0x00A8, - 0xA1A8, 0x3003, 0xA1A9, 0x3005, 0xA1AA, 0x2014, 0xA1AB, 0xFF5E, - 0xA1AC, 0x2016, 0xA1AD, 0x2026, 0xA1AE, 0x2018, 0xA1AF, 0x2019, - 0xA1B0, 0x201C, 0xA1B1, 0x201D, 0xA1B2, 0x3014, 0xA1B3, 0x3015, - 0xA1B4, 0x3008, 0xA1B5, 0x3009, 0xA1B6, 0x300A, 0xA1B7, 0x300B, - 0xA1B8, 0x300C, 0xA1B9, 0x300D, 0xA1BA, 0x300E, 0xA1BB, 0x300F, - 0xA1BC, 0x3016, 0xA1BD, 0x3017, 0xA1BE, 0x3010, 0xA1BF, 0x3011, - 0xA1C0, 0x00B1, 0xA1C1, 0x00D7, 0xA1C2, 0x00F7, 0xA1C3, 0x2236, - 0xA1C4, 0x2227, 0xA1C5, 0x2228, 0xA1C6, 0x2211, 0xA1C7, 0x220F, - 0xA1C8, 0x222A, 0xA1C9, 0x2229, 0xA1CA, 0x2208, 0xA1CB, 0x2237, - 0xA1CC, 0x221A, 0xA1CD, 0x22A5, 0xA1CE, 0x2225, 0xA1CF, 0x2220, - 0xA1D0, 0x2312, 0xA1D1, 0x2299, 0xA1D2, 0x222B, 0xA1D3, 0x222E, - 0xA1D4, 0x2261, 0xA1D5, 0x224C, 0xA1D6, 0x2248, 0xA1D7, 0x223D, - 0xA1D8, 0x221D, 0xA1D9, 0x2260, 0xA1DA, 0x226E, 0xA1DB, 0x226F, - 0xA1DC, 0x2264, 0xA1DD, 0x2265, 0xA1DE, 0x221E, 0xA1DF, 0x2235, - 0xA1E0, 0x2234, 0xA1E1, 0x2642, 0xA1E2, 0x2640, 0xA1E3, 0x00B0, - 0xA1E4, 0x2032, 0xA1E5, 0x2033, 0xA1E6, 0x2103, 0xA1E7, 0xFF04, - 0xA1E8, 0x00A4, 0xA1E9, 0xFFE0, 0xA1EA, 0xFFE1, 0xA1EB, 0x2030, - 0xA1EC, 0x00A7, 0xA1ED, 0x2116, 0xA1EE, 0x2606, 0xA1EF, 0x2605, - 0xA1F0, 0x25CB, 0xA1F1, 0x25CF, 0xA1F2, 0x25CE, 0xA1F3, 0x25C7, - 0xA1F4, 0x25C6, 0xA1F5, 0x25A1, 0xA1F6, 0x25A0, 0xA1F7, 0x25B3, - 0xA1F8, 0x25B2, 0xA1F9, 0x203B, 0xA1FA, 0x2192, 0xA1FB, 0x2190, - 0xA1FC, 0x2191, 0xA1FD, 0x2193, 0xA1FE, 0x3013, 0xA2A1, 0x2170, - 0xA2A2, 0x2171, 0xA2A3, 0x2172, 0xA2A4, 0x2173, 0xA2A5, 0x2174, - 0xA2A6, 0x2175, 0xA2A7, 0x2176, 0xA2A8, 0x2177, 0xA2A9, 0x2178, - 0xA2AA, 0x2179, 0xA2B1, 0x2488, 0xA2B2, 0x2489, 0xA2B3, 0x248A, - 0xA2B4, 0x248B, 0xA2B5, 0x248C, 0xA2B6, 0x248D, 0xA2B7, 0x248E, - 0xA2B8, 0x248F, 0xA2B9, 0x2490, 0xA2BA, 0x2491, 0xA2BB, 0x2492, - 0xA2BC, 0x2493, 0xA2BD, 0x2494, 0xA2BE, 0x2495, 0xA2BF, 0x2496, - 0xA2C0, 0x2497, 0xA2C1, 0x2498, 0xA2C2, 0x2499, 0xA2C3, 0x249A, - 0xA2C4, 0x249B, 0xA2C5, 0x2474, 0xA2C6, 0x2475, 0xA2C7, 0x2476, - 0xA2C8, 0x2477, 0xA2C9, 0x2478, 0xA2CA, 0x2479, 0xA2CB, 0x247A, - 0xA2CC, 0x247B, 0xA2CD, 0x247C, 0xA2CE, 0x247D, 0xA2CF, 0x247E, - 0xA2D0, 0x247F, 0xA2D1, 0x2480, 0xA2D2, 0x2481, 0xA2D3, 0x2482, - 0xA2D4, 0x2483, 0xA2D5, 0x2484, 0xA2D6, 0x2485, 0xA2D7, 0x2486, - 0xA2D8, 0x2487, 0xA2D9, 0x2460, 0xA2DA, 0x2461, 0xA2DB, 0x2462, - 0xA2DC, 0x2463, 0xA2DD, 0x2464, 0xA2DE, 0x2465, 0xA2DF, 0x2466, - 0xA2E0, 0x2467, 0xA2E1, 0x2468, 0xA2E2, 0x2469, 0xA2E5, 0x3220, - 0xA2E6, 0x3221, 0xA2E7, 0x3222, 0xA2E8, 0x3223, 0xA2E9, 0x3224, - 0xA2EA, 0x3225, 0xA2EB, 0x3226, 0xA2EC, 0x3227, 0xA2ED, 0x3228, - 0xA2EE, 0x3229, 0xA2F1, 0x2160, 0xA2F2, 0x2161, 0xA2F3, 0x2162, - 0xA2F4, 0x2163, 0xA2F5, 0x2164, 0xA2F6, 0x2165, 0xA2F7, 0x2166, - 0xA2F8, 0x2167, 0xA2F9, 0x2168, 0xA2FA, 0x2169, 0xA2FB, 0x216A, - 0xA2FC, 0x216B, 0xA3A1, 0xFF01, 0xA3A2, 0xFF02, 0xA3A3, 0xFF03, - 0xA3A4, 0xFFE5, 0xA3A5, 0xFF05, 0xA3A6, 0xFF06, 0xA3A7, 0xFF07, - 0xA3A8, 0xFF08, 0xA3A9, 0xFF09, 0xA3AA, 0xFF0A, 0xA3AB, 0xFF0B, - 0xA3AC, 0xFF0C, 0xA3AD, 0xFF0D, 0xA3AE, 0xFF0E, 0xA3AF, 0xFF0F, - 0xA3B0, 0xFF10, 0xA3B1, 0xFF11, 0xA3B2, 0xFF12, 0xA3B3, 0xFF13, - 0xA3B4, 0xFF14, 0xA3B5, 0xFF15, 0xA3B6, 0xFF16, 0xA3B7, 0xFF17, - 0xA3B8, 0xFF18, 0xA3B9, 0xFF19, 0xA3BA, 0xFF1A, 0xA3BB, 0xFF1B, - 0xA3BC, 0xFF1C, 0xA3BD, 0xFF1D, 0xA3BE, 0xFF1E, 0xA3BF, 0xFF1F, - 0xA3C0, 0xFF20, 0xA3C1, 0xFF21, 0xA3C2, 0xFF22, 0xA3C3, 0xFF23, - 0xA3C4, 0xFF24, 0xA3C5, 0xFF25, 0xA3C6, 0xFF26, 0xA3C7, 0xFF27, - 0xA3C8, 0xFF28, 0xA3C9, 0xFF29, 0xA3CA, 0xFF2A, 0xA3CB, 0xFF2B, - 0xA3CC, 0xFF2C, 0xA3CD, 0xFF2D, 0xA3CE, 0xFF2E, 0xA3CF, 0xFF2F, - 0xA3D0, 0xFF30, 0xA3D1, 0xFF31, 0xA3D2, 0xFF32, 0xA3D3, 0xFF33, - 0xA3D4, 0xFF34, 0xA3D5, 0xFF35, 0xA3D6, 0xFF36, 0xA3D7, 0xFF37, - 0xA3D8, 0xFF38, 0xA3D9, 0xFF39, 0xA3DA, 0xFF3A, 0xA3DB, 0xFF3B, - 0xA3DC, 0xFF3C, 0xA3DD, 0xFF3D, 0xA3DE, 0xFF3E, 0xA3DF, 0xFF3F, - 0xA3E0, 0xFF40, 0xA3E1, 0xFF41, 0xA3E2, 0xFF42, 0xA3E3, 0xFF43, - 0xA3E4, 0xFF44, 0xA3E5, 0xFF45, 0xA3E6, 0xFF46, 0xA3E7, 0xFF47, - 0xA3E8, 0xFF48, 0xA3E9, 0xFF49, 0xA3EA, 0xFF4A, 0xA3EB, 0xFF4B, - 0xA3EC, 0xFF4C, 0xA3ED, 0xFF4D, 0xA3EE, 0xFF4E, 0xA3EF, 0xFF4F, - 0xA3F0, 0xFF50, 0xA3F1, 0xFF51, 0xA3F2, 0xFF52, 0xA3F3, 0xFF53, - 0xA3F4, 0xFF54, 0xA3F5, 0xFF55, 0xA3F6, 0xFF56, 0xA3F7, 0xFF57, - 0xA3F8, 0xFF58, 0xA3F9, 0xFF59, 0xA3FA, 0xFF5A, 0xA3FB, 0xFF5B, - 0xA3FC, 0xFF5C, 0xA3FD, 0xFF5D, 0xA3FE, 0xFFE3, 0xA4A1, 0x3041, - 0xA4A2, 0x3042, 0xA4A3, 0x3043, 0xA4A4, 0x3044, 0xA4A5, 0x3045, - 0xA4A6, 0x3046, 0xA4A7, 0x3047, 0xA4A8, 0x3048, 0xA4A9, 0x3049, - 0xA4AA, 0x304A, 0xA4AB, 0x304B, 0xA4AC, 0x304C, 0xA4AD, 0x304D, - 0xA4AE, 0x304E, 0xA4AF, 0x304F, 0xA4B0, 0x3050, 0xA4B1, 0x3051, - 0xA4B2, 0x3052, 0xA4B3, 0x3053, 0xA4B4, 0x3054, 0xA4B5, 0x3055, - 0xA4B6, 0x3056, 0xA4B7, 0x3057, 0xA4B8, 0x3058, 0xA4B9, 0x3059, - 0xA4BA, 0x305A, 0xA4BB, 0x305B, 0xA4BC, 0x305C, 0xA4BD, 0x305D, - 0xA4BE, 0x305E, 0xA4BF, 0x305F, 0xA4C0, 0x3060, 0xA4C1, 0x3061, - 0xA4C2, 0x3062, 0xA4C3, 0x3063, 0xA4C4, 0x3064, 0xA4C5, 0x3065, - 0xA4C6, 0x3066, 0xA4C7, 0x3067, 0xA4C8, 0x3068, 0xA4C9, 0x3069, - 0xA4CA, 0x306A, 0xA4CB, 0x306B, 0xA4CC, 0x306C, 0xA4CD, 0x306D, - 0xA4CE, 0x306E, 0xA4CF, 0x306F, 0xA4D0, 0x3070, 0xA4D1, 0x3071, - 0xA4D2, 0x3072, 0xA4D3, 0x3073, 0xA4D4, 0x3074, 0xA4D5, 0x3075, - 0xA4D6, 0x3076, 0xA4D7, 0x3077, 0xA4D8, 0x3078, 0xA4D9, 0x3079, - 0xA4DA, 0x307A, 0xA4DB, 0x307B, 0xA4DC, 0x307C, 0xA4DD, 0x307D, - 0xA4DE, 0x307E, 0xA4DF, 0x307F, 0xA4E0, 0x3080, 0xA4E1, 0x3081, - 0xA4E2, 0x3082, 0xA4E3, 0x3083, 0xA4E4, 0x3084, 0xA4E5, 0x3085, - 0xA4E6, 0x3086, 0xA4E7, 0x3087, 0xA4E8, 0x3088, 0xA4E9, 0x3089, - 0xA4EA, 0x308A, 0xA4EB, 0x308B, 0xA4EC, 0x308C, 0xA4ED, 0x308D, - 0xA4EE, 0x308E, 0xA4EF, 0x308F, 0xA4F0, 0x3090, 0xA4F1, 0x3091, - 0xA4F2, 0x3092, 0xA4F3, 0x3093, 0xA5A1, 0x30A1, 0xA5A2, 0x30A2, - 0xA5A3, 0x30A3, 0xA5A4, 0x30A4, 0xA5A5, 0x30A5, 0xA5A6, 0x30A6, - 0xA5A7, 0x30A7, 0xA5A8, 0x30A8, 0xA5A9, 0x30A9, 0xA5AA, 0x30AA, - 0xA5AB, 0x30AB, 0xA5AC, 0x30AC, 0xA5AD, 0x30AD, 0xA5AE, 0x30AE, - 0xA5AF, 0x30AF, 0xA5B0, 0x30B0, 0xA5B1, 0x30B1, 0xA5B2, 0x30B2, - 0xA5B3, 0x30B3, 0xA5B4, 0x30B4, 0xA5B5, 0x30B5, 0xA5B6, 0x30B6, - 0xA5B7, 0x30B7, 0xA5B8, 0x30B8, 0xA5B9, 0x30B9, 0xA5BA, 0x30BA, - 0xA5BB, 0x30BB, 0xA5BC, 0x30BC, 0xA5BD, 0x30BD, 0xA5BE, 0x30BE, - 0xA5BF, 0x30BF, 0xA5C0, 0x30C0, 0xA5C1, 0x30C1, 0xA5C2, 0x30C2, - 0xA5C3, 0x30C3, 0xA5C4, 0x30C4, 0xA5C5, 0x30C5, 0xA5C6, 0x30C6, - 0xA5C7, 0x30C7, 0xA5C8, 0x30C8, 0xA5C9, 0x30C9, 0xA5CA, 0x30CA, - 0xA5CB, 0x30CB, 0xA5CC, 0x30CC, 0xA5CD, 0x30CD, 0xA5CE, 0x30CE, - 0xA5CF, 0x30CF, 0xA5D0, 0x30D0, 0xA5D1, 0x30D1, 0xA5D2, 0x30D2, - 0xA5D3, 0x30D3, 0xA5D4, 0x30D4, 0xA5D5, 0x30D5, 0xA5D6, 0x30D6, - 0xA5D7, 0x30D7, 0xA5D8, 0x30D8, 0xA5D9, 0x30D9, 0xA5DA, 0x30DA, - 0xA5DB, 0x30DB, 0xA5DC, 0x30DC, 0xA5DD, 0x30DD, 0xA5DE, 0x30DE, - 0xA5DF, 0x30DF, 0xA5E0, 0x30E0, 0xA5E1, 0x30E1, 0xA5E2, 0x30E2, - 0xA5E3, 0x30E3, 0xA5E4, 0x30E4, 0xA5E5, 0x30E5, 0xA5E6, 0x30E6, - 0xA5E7, 0x30E7, 0xA5E8, 0x30E8, 0xA5E9, 0x30E9, 0xA5EA, 0x30EA, - 0xA5EB, 0x30EB, 0xA5EC, 0x30EC, 0xA5ED, 0x30ED, 0xA5EE, 0x30EE, - 0xA5EF, 0x30EF, 0xA5F0, 0x30F0, 0xA5F1, 0x30F1, 0xA5F2, 0x30F2, - 0xA5F3, 0x30F3, 0xA5F4, 0x30F4, 0xA5F5, 0x30F5, 0xA5F6, 0x30F6, - 0xA6A1, 0x0391, 0xA6A2, 0x0392, 0xA6A3, 0x0393, 0xA6A4, 0x0394, - 0xA6A5, 0x0395, 0xA6A6, 0x0396, 0xA6A7, 0x0397, 0xA6A8, 0x0398, - 0xA6A9, 0x0399, 0xA6AA, 0x039A, 0xA6AB, 0x039B, 0xA6AC, 0x039C, - 0xA6AD, 0x039D, 0xA6AE, 0x039E, 0xA6AF, 0x039F, 0xA6B0, 0x03A0, - 0xA6B1, 0x03A1, 0xA6B2, 0x03A3, 0xA6B3, 0x03A4, 0xA6B4, 0x03A5, - 0xA6B5, 0x03A6, 0xA6B6, 0x03A7, 0xA6B7, 0x03A8, 0xA6B8, 0x03A9, - 0xA6C1, 0x03B1, 0xA6C2, 0x03B2, 0xA6C3, 0x03B3, 0xA6C4, 0x03B4, - 0xA6C5, 0x03B5, 0xA6C6, 0x03B6, 0xA6C7, 0x03B7, 0xA6C8, 0x03B8, - 0xA6C9, 0x03B9, 0xA6CA, 0x03BA, 0xA6CB, 0x03BB, 0xA6CC, 0x03BC, - 0xA6CD, 0x03BD, 0xA6CE, 0x03BE, 0xA6CF, 0x03BF, 0xA6D0, 0x03C0, - 0xA6D1, 0x03C1, 0xA6D2, 0x03C3, 0xA6D3, 0x03C4, 0xA6D4, 0x03C5, - 0xA6D5, 0x03C6, 0xA6D6, 0x03C7, 0xA6D7, 0x03C8, 0xA6D8, 0x03C9, - 0xA6E0, 0xFE35, 0xA6E1, 0xFE36, 0xA6E2, 0xFE39, 0xA6E3, 0xFE3A, - 0xA6E4, 0xFE3F, 0xA6E5, 0xFE40, 0xA6E6, 0xFE3D, 0xA6E7, 0xFE3E, - 0xA6E8, 0xFE41, 0xA6E9, 0xFE42, 0xA6EA, 0xFE43, 0xA6EB, 0xFE44, - 0xA6EE, 0xFE3B, 0xA6EF, 0xFE3C, 0xA6F0, 0xFE37, 0xA6F1, 0xFE38, - 0xA6F2, 0xFE31, 0xA6F4, 0xFE33, 0xA6F5, 0xFE34, 0xA7A1, 0x0410, - 0xA7A2, 0x0411, 0xA7A3, 0x0412, 0xA7A4, 0x0413, 0xA7A5, 0x0414, - 0xA7A6, 0x0415, 0xA7A7, 0x0401, 0xA7A8, 0x0416, 0xA7A9, 0x0417, - 0xA7AA, 0x0418, 0xA7AB, 0x0419, 0xA7AC, 0x041A, 0xA7AD, 0x041B, - 0xA7AE, 0x041C, 0xA7AF, 0x041D, 0xA7B0, 0x041E, 0xA7B1, 0x041F, - 0xA7B2, 0x0420, 0xA7B3, 0x0421, 0xA7B4, 0x0422, 0xA7B5, 0x0423, - 0xA7B6, 0x0424, 0xA7B7, 0x0425, 0xA7B8, 0x0426, 0xA7B9, 0x0427, - 0xA7BA, 0x0428, 0xA7BB, 0x0429, 0xA7BC, 0x042A, 0xA7BD, 0x042B, - 0xA7BE, 0x042C, 0xA7BF, 0x042D, 0xA7C0, 0x042E, 0xA7C1, 0x042F, - 0xA7D1, 0x0430, 0xA7D2, 0x0431, 0xA7D3, 0x0432, 0xA7D4, 0x0433, - 0xA7D5, 0x0434, 0xA7D6, 0x0435, 0xA7D7, 0x0451, 0xA7D8, 0x0436, - 0xA7D9, 0x0437, 0xA7DA, 0x0438, 0xA7DB, 0x0439, 0xA7DC, 0x043A, - 0xA7DD, 0x043B, 0xA7DE, 0x043C, 0xA7DF, 0x043D, 0xA7E0, 0x043E, - 0xA7E1, 0x043F, 0xA7E2, 0x0440, 0xA7E3, 0x0441, 0xA7E4, 0x0442, - 0xA7E5, 0x0443, 0xA7E6, 0x0444, 0xA7E7, 0x0445, 0xA7E8, 0x0446, - 0xA7E9, 0x0447, 0xA7EA, 0x0448, 0xA7EB, 0x0449, 0xA7EC, 0x044A, - 0xA7ED, 0x044B, 0xA7EE, 0x044C, 0xA7EF, 0x044D, 0xA7F0, 0x044E, - 0xA7F1, 0x044F, 0xA840, 0x02CA, 0xA841, 0x02CB, 0xA842, 0x02D9, - 0xA843, 0x2013, 0xA844, 0x2015, 0xA845, 0x2025, 0xA846, 0x2035, - 0xA847, 0x2105, 0xA848, 0x2109, 0xA849, 0x2196, 0xA84A, 0x2197, - 0xA84B, 0x2198, 0xA84C, 0x2199, 0xA84D, 0x2215, 0xA84E, 0x221F, - 0xA84F, 0x2223, 0xA850, 0x2252, 0xA851, 0x2266, 0xA852, 0x2267, - 0xA853, 0x22BF, 0xA854, 0x2550, 0xA855, 0x2551, 0xA856, 0x2552, - 0xA857, 0x2553, 0xA858, 0x2554, 0xA859, 0x2555, 0xA85A, 0x2556, - 0xA85B, 0x2557, 0xA85C, 0x2558, 0xA85D, 0x2559, 0xA85E, 0x255A, - 0xA85F, 0x255B, 0xA860, 0x255C, 0xA861, 0x255D, 0xA862, 0x255E, - 0xA863, 0x255F, 0xA864, 0x2560, 0xA865, 0x2561, 0xA866, 0x2562, - 0xA867, 0x2563, 0xA868, 0x2564, 0xA869, 0x2565, 0xA86A, 0x2566, - 0xA86B, 0x2567, 0xA86C, 0x2568, 0xA86D, 0x2569, 0xA86E, 0x256A, - 0xA86F, 0x256B, 0xA870, 0x256C, 0xA871, 0x256D, 0xA872, 0x256E, - 0xA873, 0x256F, 0xA874, 0x2570, 0xA875, 0x2571, 0xA876, 0x2572, - 0xA877, 0x2573, 0xA878, 0x2581, 0xA879, 0x2582, 0xA87A, 0x2583, - 0xA87B, 0x2584, 0xA87C, 0x2585, 0xA87D, 0x2586, 0xA87E, 0x2587, - 0xA880, 0x2588, 0xA881, 0x2589, 0xA882, 0x258A, 0xA883, 0x258B, - 0xA884, 0x258C, 0xA885, 0x258D, 0xA886, 0x258E, 0xA887, 0x258F, - 0xA888, 0x2593, 0xA889, 0x2594, 0xA88A, 0x2595, 0xA88B, 0x25BC, - 0xA88C, 0x25BD, 0xA88D, 0x25E2, 0xA88E, 0x25E3, 0xA88F, 0x25E4, - 0xA890, 0x25E5, 0xA891, 0x2609, 0xA892, 0x2295, 0xA893, 0x3012, - 0xA894, 0x301D, 0xA895, 0x301E, 0xA8A1, 0x0101, 0xA8A2, 0x00E1, - 0xA8A3, 0x01CE, 0xA8A4, 0x00E0, 0xA8A5, 0x0113, 0xA8A6, 0x00E9, - 0xA8A7, 0x011B, 0xA8A8, 0x00E8, 0xA8A9, 0x012B, 0xA8AA, 0x00ED, - 0xA8AB, 0x01D0, 0xA8AC, 0x00EC, 0xA8AD, 0x014D, 0xA8AE, 0x00F3, - 0xA8AF, 0x01D2, 0xA8B0, 0x00F2, 0xA8B1, 0x016B, 0xA8B2, 0x00FA, - 0xA8B3, 0x01D4, 0xA8B4, 0x00F9, 0xA8B5, 0x01D6, 0xA8B6, 0x01D8, - 0xA8B7, 0x01DA, 0xA8B8, 0x01DC, 0xA8B9, 0x00FC, 0xA8BA, 0x00EA, - 0xA8BB, 0x0251, 0xA8BD, 0x0144, 0xA8BE, 0x0148, 0xA8C0, 0x0261, - 0xA8C5, 0x3105, 0xA8C6, 0x3106, 0xA8C7, 0x3107, 0xA8C8, 0x3108, - 0xA8C9, 0x3109, 0xA8CA, 0x310A, 0xA8CB, 0x310B, 0xA8CC, 0x310C, - 0xA8CD, 0x310D, 0xA8CE, 0x310E, 0xA8CF, 0x310F, 0xA8D0, 0x3110, - 0xA8D1, 0x3111, 0xA8D2, 0x3112, 0xA8D3, 0x3113, 0xA8D4, 0x3114, - 0xA8D5, 0x3115, 0xA8D6, 0x3116, 0xA8D7, 0x3117, 0xA8D8, 0x3118, - 0xA8D9, 0x3119, 0xA8DA, 0x311A, 0xA8DB, 0x311B, 0xA8DC, 0x311C, - 0xA8DD, 0x311D, 0xA8DE, 0x311E, 0xA8DF, 0x311F, 0xA8E0, 0x3120, - 0xA8E1, 0x3121, 0xA8E2, 0x3122, 0xA8E3, 0x3123, 0xA8E4, 0x3124, - 0xA8E5, 0x3125, 0xA8E6, 0x3126, 0xA8E7, 0x3127, 0xA8E8, 0x3128, - 0xA8E9, 0x3129, 0xA940, 0x3021, 0xA941, 0x3022, 0xA942, 0x3023, - 0xA943, 0x3024, 0xA944, 0x3025, 0xA945, 0x3026, 0xA946, 0x3027, - 0xA947, 0x3028, 0xA948, 0x3029, 0xA949, 0x32A3, 0xA94A, 0x338E, - 0xA94B, 0x338F, 0xA94C, 0x339C, 0xA94D, 0x339D, 0xA94E, 0x339E, - 0xA94F, 0x33A1, 0xA950, 0x33C4, 0xA951, 0x33CE, 0xA952, 0x33D1, - 0xA953, 0x33D2, 0xA954, 0x33D5, 0xA955, 0xFE30, 0xA956, 0xFFE2, - 0xA957, 0xFFE4, 0xA959, 0x2121, 0xA95A, 0x3231, 0xA95C, 0x2010, - 0xA960, 0x30FC, 0xA961, 0x309B, 0xA962, 0x309C, 0xA963, 0x30FD, - 0xA964, 0x30FE, 0xA965, 0x3006, 0xA966, 0x309D, 0xA967, 0x309E, - 0xA968, 0xFE49, 0xA969, 0xFE4A, 0xA96A, 0xFE4B, 0xA96B, 0xFE4C, - 0xA96C, 0xFE4D, 0xA96D, 0xFE4E, 0xA96E, 0xFE4F, 0xA96F, 0xFE50, - 0xA970, 0xFE51, 0xA971, 0xFE52, 0xA972, 0xFE54, 0xA973, 0xFE55, - 0xA974, 0xFE56, 0xA975, 0xFE57, 0xA976, 0xFE59, 0xA977, 0xFE5A, - 0xA978, 0xFE5B, 0xA979, 0xFE5C, 0xA97A, 0xFE5D, 0xA97B, 0xFE5E, - 0xA97C, 0xFE5F, 0xA97D, 0xFE60, 0xA97E, 0xFE61, 0xA980, 0xFE62, - 0xA981, 0xFE63, 0xA982, 0xFE64, 0xA983, 0xFE65, 0xA984, 0xFE66, - 0xA985, 0xFE68, 0xA986, 0xFE69, 0xA987, 0xFE6A, 0xA988, 0xFE6B, - 0xA996, 0x3007, 0xA9A4, 0x2500, 0xA9A5, 0x2501, 0xA9A6, 0x2502, - 0xA9A7, 0x2503, 0xA9A8, 0x2504, 0xA9A9, 0x2505, 0xA9AA, 0x2506, - 0xA9AB, 0x2507, 0xA9AC, 0x2508, 0xA9AD, 0x2509, 0xA9AE, 0x250A, - 0xA9AF, 0x250B, 0xA9B0, 0x250C, 0xA9B1, 0x250D, 0xA9B2, 0x250E, - 0xA9B3, 0x250F, 0xA9B4, 0x2510, 0xA9B5, 0x2511, 0xA9B6, 0x2512, - 0xA9B7, 0x2513, 0xA9B8, 0x2514, 0xA9B9, 0x2515, 0xA9BA, 0x2516, - 0xA9BB, 0x2517, 0xA9BC, 0x2518, 0xA9BD, 0x2519, 0xA9BE, 0x251A, - 0xA9BF, 0x251B, 0xA9C0, 0x251C, 0xA9C1, 0x251D, 0xA9C2, 0x251E, - 0xA9C3, 0x251F, 0xA9C4, 0x2520, 0xA9C5, 0x2521, 0xA9C6, 0x2522, - 0xA9C7, 0x2523, 0xA9C8, 0x2524, 0xA9C9, 0x2525, 0xA9CA, 0x2526, - 0xA9CB, 0x2527, 0xA9CC, 0x2528, 0xA9CD, 0x2529, 0xA9CE, 0x252A, - 0xA9CF, 0x252B, 0xA9D0, 0x252C, 0xA9D1, 0x252D, 0xA9D2, 0x252E, - 0xA9D3, 0x252F, 0xA9D4, 0x2530, 0xA9D5, 0x2531, 0xA9D6, 0x2532, - 0xA9D7, 0x2533, 0xA9D8, 0x2534, 0xA9D9, 0x2535, 0xA9DA, 0x2536, - 0xA9DB, 0x2537, 0xA9DC, 0x2538, 0xA9DD, 0x2539, 0xA9DE, 0x253A, - 0xA9DF, 0x253B, 0xA9E0, 0x253C, 0xA9E1, 0x253D, 0xA9E2, 0x253E, - 0xA9E3, 0x253F, 0xA9E4, 0x2540, 0xA9E5, 0x2541, 0xA9E6, 0x2542, - 0xA9E7, 0x2543, 0xA9E8, 0x2544, 0xA9E9, 0x2545, 0xA9EA, 0x2546, - 0xA9EB, 0x2547, 0xA9EC, 0x2548, 0xA9ED, 0x2549, 0xA9EE, 0x254A, - 0xA9EF, 0x254B, 0xAA40, 0x72DC, 0xAA41, 0x72DD, 0xAA42, 0x72DF, - 0xAA43, 0x72E2, 0xAA44, 0x72E3, 0xAA45, 0x72E4, 0xAA46, 0x72E5, - 0xAA47, 0x72E6, 0xAA48, 0x72E7, 0xAA49, 0x72EA, 0xAA4A, 0x72EB, - 0xAA4B, 0x72F5, 0xAA4C, 0x72F6, 0xAA4D, 0x72F9, 0xAA4E, 0x72FD, - 0xAA4F, 0x72FE, 0xAA50, 0x72FF, 0xAA51, 0x7300, 0xAA52, 0x7302, - 0xAA53, 0x7304, 0xAA54, 0x7305, 0xAA55, 0x7306, 0xAA56, 0x7307, - 0xAA57, 0x7308, 0xAA58, 0x7309, 0xAA59, 0x730B, 0xAA5A, 0x730C, - 0xAA5B, 0x730D, 0xAA5C, 0x730F, 0xAA5D, 0x7310, 0xAA5E, 0x7311, - 0xAA5F, 0x7312, 0xAA60, 0x7314, 0xAA61, 0x7318, 0xAA62, 0x7319, - 0xAA63, 0x731A, 0xAA64, 0x731F, 0xAA65, 0x7320, 0xAA66, 0x7323, - 0xAA67, 0x7324, 0xAA68, 0x7326, 0xAA69, 0x7327, 0xAA6A, 0x7328, - 0xAA6B, 0x732D, 0xAA6C, 0x732F, 0xAA6D, 0x7330, 0xAA6E, 0x7332, - 0xAA6F, 0x7333, 0xAA70, 0x7335, 0xAA71, 0x7336, 0xAA72, 0x733A, - 0xAA73, 0x733B, 0xAA74, 0x733C, 0xAA75, 0x733D, 0xAA76, 0x7340, - 0xAA77, 0x7341, 0xAA78, 0x7342, 0xAA79, 0x7343, 0xAA7A, 0x7344, - 0xAA7B, 0x7345, 0xAA7C, 0x7346, 0xAA7D, 0x7347, 0xAA7E, 0x7348, - 0xAA80, 0x7349, 0xAA81, 0x734A, 0xAA82, 0x734B, 0xAA83, 0x734C, - 0xAA84, 0x734E, 0xAA85, 0x734F, 0xAA86, 0x7351, 0xAA87, 0x7353, - 0xAA88, 0x7354, 0xAA89, 0x7355, 0xAA8A, 0x7356, 0xAA8B, 0x7358, - 0xAA8C, 0x7359, 0xAA8D, 0x735A, 0xAA8E, 0x735B, 0xAA8F, 0x735C, - 0xAA90, 0x735D, 0xAA91, 0x735E, 0xAA92, 0x735F, 0xAA93, 0x7361, - 0xAA94, 0x7362, 0xAA95, 0x7363, 0xAA96, 0x7364, 0xAA97, 0x7365, - 0xAA98, 0x7366, 0xAA99, 0x7367, 0xAA9A, 0x7368, 0xAA9B, 0x7369, - 0xAA9C, 0x736A, 0xAA9D, 0x736B, 0xAA9E, 0x736E, 0xAA9F, 0x7370, - 0xAAA0, 0x7371, 0xAB40, 0x7372, 0xAB41, 0x7373, 0xAB42, 0x7374, - 0xAB43, 0x7375, 0xAB44, 0x7376, 0xAB45, 0x7377, 0xAB46, 0x7378, - 0xAB47, 0x7379, 0xAB48, 0x737A, 0xAB49, 0x737B, 0xAB4A, 0x737C, - 0xAB4B, 0x737D, 0xAB4C, 0x737F, 0xAB4D, 0x7380, 0xAB4E, 0x7381, - 0xAB4F, 0x7382, 0xAB50, 0x7383, 0xAB51, 0x7385, 0xAB52, 0x7386, - 0xAB53, 0x7388, 0xAB54, 0x738A, 0xAB55, 0x738C, 0xAB56, 0x738D, - 0xAB57, 0x738F, 0xAB58, 0x7390, 0xAB59, 0x7392, 0xAB5A, 0x7393, - 0xAB5B, 0x7394, 0xAB5C, 0x7395, 0xAB5D, 0x7397, 0xAB5E, 0x7398, - 0xAB5F, 0x7399, 0xAB60, 0x739A, 0xAB61, 0x739C, 0xAB62, 0x739D, - 0xAB63, 0x739E, 0xAB64, 0x73A0, 0xAB65, 0x73A1, 0xAB66, 0x73A3, - 0xAB67, 0x73A4, 0xAB68, 0x73A5, 0xAB69, 0x73A6, 0xAB6A, 0x73A7, - 0xAB6B, 0x73A8, 0xAB6C, 0x73AA, 0xAB6D, 0x73AC, 0xAB6E, 0x73AD, - 0xAB6F, 0x73B1, 0xAB70, 0x73B4, 0xAB71, 0x73B5, 0xAB72, 0x73B6, - 0xAB73, 0x73B8, 0xAB74, 0x73B9, 0xAB75, 0x73BC, 0xAB76, 0x73BD, - 0xAB77, 0x73BE, 0xAB78, 0x73BF, 0xAB79, 0x73C1, 0xAB7A, 0x73C3, - 0xAB7B, 0x73C4, 0xAB7C, 0x73C5, 0xAB7D, 0x73C6, 0xAB7E, 0x73C7, - 0xAB80, 0x73CB, 0xAB81, 0x73CC, 0xAB82, 0x73CE, 0xAB83, 0x73D2, - 0xAB84, 0x73D3, 0xAB85, 0x73D4, 0xAB86, 0x73D5, 0xAB87, 0x73D6, - 0xAB88, 0x73D7, 0xAB89, 0x73D8, 0xAB8A, 0x73DA, 0xAB8B, 0x73DB, - 0xAB8C, 0x73DC, 0xAB8D, 0x73DD, 0xAB8E, 0x73DF, 0xAB8F, 0x73E1, - 0xAB90, 0x73E2, 0xAB91, 0x73E3, 0xAB92, 0x73E4, 0xAB93, 0x73E6, - 0xAB94, 0x73E8, 0xAB95, 0x73EA, 0xAB96, 0x73EB, 0xAB97, 0x73EC, - 0xAB98, 0x73EE, 0xAB99, 0x73EF, 0xAB9A, 0x73F0, 0xAB9B, 0x73F1, - 0xAB9C, 0x73F3, 0xAB9D, 0x73F4, 0xAB9E, 0x73F5, 0xAB9F, 0x73F6, - 0xABA0, 0x73F7, 0xAC40, 0x73F8, 0xAC41, 0x73F9, 0xAC42, 0x73FA, - 0xAC43, 0x73FB, 0xAC44, 0x73FC, 0xAC45, 0x73FD, 0xAC46, 0x73FE, - 0xAC47, 0x73FF, 0xAC48, 0x7400, 0xAC49, 0x7401, 0xAC4A, 0x7402, - 0xAC4B, 0x7404, 0xAC4C, 0x7407, 0xAC4D, 0x7408, 0xAC4E, 0x740B, - 0xAC4F, 0x740C, 0xAC50, 0x740D, 0xAC51, 0x740E, 0xAC52, 0x7411, - 0xAC53, 0x7412, 0xAC54, 0x7413, 0xAC55, 0x7414, 0xAC56, 0x7415, - 0xAC57, 0x7416, 0xAC58, 0x7417, 0xAC59, 0x7418, 0xAC5A, 0x7419, - 0xAC5B, 0x741C, 0xAC5C, 0x741D, 0xAC5D, 0x741E, 0xAC5E, 0x741F, - 0xAC5F, 0x7420, 0xAC60, 0x7421, 0xAC61, 0x7423, 0xAC62, 0x7424, - 0xAC63, 0x7427, 0xAC64, 0x7429, 0xAC65, 0x742B, 0xAC66, 0x742D, - 0xAC67, 0x742F, 0xAC68, 0x7431, 0xAC69, 0x7432, 0xAC6A, 0x7437, - 0xAC6B, 0x7438, 0xAC6C, 0x7439, 0xAC6D, 0x743A, 0xAC6E, 0x743B, - 0xAC6F, 0x743D, 0xAC70, 0x743E, 0xAC71, 0x743F, 0xAC72, 0x7440, - 0xAC73, 0x7442, 0xAC74, 0x7443, 0xAC75, 0x7444, 0xAC76, 0x7445, - 0xAC77, 0x7446, 0xAC78, 0x7447, 0xAC79, 0x7448, 0xAC7A, 0x7449, - 0xAC7B, 0x744A, 0xAC7C, 0x744B, 0xAC7D, 0x744C, 0xAC7E, 0x744D, - 0xAC80, 0x744E, 0xAC81, 0x744F, 0xAC82, 0x7450, 0xAC83, 0x7451, - 0xAC84, 0x7452, 0xAC85, 0x7453, 0xAC86, 0x7454, 0xAC87, 0x7456, - 0xAC88, 0x7458, 0xAC89, 0x745D, 0xAC8A, 0x7460, 0xAC8B, 0x7461, - 0xAC8C, 0x7462, 0xAC8D, 0x7463, 0xAC8E, 0x7464, 0xAC8F, 0x7465, - 0xAC90, 0x7466, 0xAC91, 0x7467, 0xAC92, 0x7468, 0xAC93, 0x7469, - 0xAC94, 0x746A, 0xAC95, 0x746B, 0xAC96, 0x746C, 0xAC97, 0x746E, - 0xAC98, 0x746F, 0xAC99, 0x7471, 0xAC9A, 0x7472, 0xAC9B, 0x7473, - 0xAC9C, 0x7474, 0xAC9D, 0x7475, 0xAC9E, 0x7478, 0xAC9F, 0x7479, - 0xACA0, 0x747A, 0xAD40, 0x747B, 0xAD41, 0x747C, 0xAD42, 0x747D, - 0xAD43, 0x747F, 0xAD44, 0x7482, 0xAD45, 0x7484, 0xAD46, 0x7485, - 0xAD47, 0x7486, 0xAD48, 0x7488, 0xAD49, 0x7489, 0xAD4A, 0x748A, - 0xAD4B, 0x748C, 0xAD4C, 0x748D, 0xAD4D, 0x748F, 0xAD4E, 0x7491, - 0xAD4F, 0x7492, 0xAD50, 0x7493, 0xAD51, 0x7494, 0xAD52, 0x7495, - 0xAD53, 0x7496, 0xAD54, 0x7497, 0xAD55, 0x7498, 0xAD56, 0x7499, - 0xAD57, 0x749A, 0xAD58, 0x749B, 0xAD59, 0x749D, 0xAD5A, 0x749F, - 0xAD5B, 0x74A0, 0xAD5C, 0x74A1, 0xAD5D, 0x74A2, 0xAD5E, 0x74A3, - 0xAD5F, 0x74A4, 0xAD60, 0x74A5, 0xAD61, 0x74A6, 0xAD62, 0x74AA, - 0xAD63, 0x74AB, 0xAD64, 0x74AC, 0xAD65, 0x74AD, 0xAD66, 0x74AE, - 0xAD67, 0x74AF, 0xAD68, 0x74B0, 0xAD69, 0x74B1, 0xAD6A, 0x74B2, - 0xAD6B, 0x74B3, 0xAD6C, 0x74B4, 0xAD6D, 0x74B5, 0xAD6E, 0x74B6, - 0xAD6F, 0x74B7, 0xAD70, 0x74B8, 0xAD71, 0x74B9, 0xAD72, 0x74BB, - 0xAD73, 0x74BC, 0xAD74, 0x74BD, 0xAD75, 0x74BE, 0xAD76, 0x74BF, - 0xAD77, 0x74C0, 0xAD78, 0x74C1, 0xAD79, 0x74C2, 0xAD7A, 0x74C3, - 0xAD7B, 0x74C4, 0xAD7C, 0x74C5, 0xAD7D, 0x74C6, 0xAD7E, 0x74C7, - 0xAD80, 0x74C8, 0xAD81, 0x74C9, 0xAD82, 0x74CA, 0xAD83, 0x74CB, - 0xAD84, 0x74CC, 0xAD85, 0x74CD, 0xAD86, 0x74CE, 0xAD87, 0x74CF, - 0xAD88, 0x74D0, 0xAD89, 0x74D1, 0xAD8A, 0x74D3, 0xAD8B, 0x74D4, - 0xAD8C, 0x74D5, 0xAD8D, 0x74D6, 0xAD8E, 0x74D7, 0xAD8F, 0x74D8, - 0xAD90, 0x74D9, 0xAD91, 0x74DA, 0xAD92, 0x74DB, 0xAD93, 0x74DD, - 0xAD94, 0x74DF, 0xAD95, 0x74E1, 0xAD96, 0x74E5, 0xAD97, 0x74E7, - 0xAD98, 0x74E8, 0xAD99, 0x74E9, 0xAD9A, 0x74EA, 0xAD9B, 0x74EB, - 0xAD9C, 0x74EC, 0xAD9D, 0x74ED, 0xAD9E, 0x74F0, 0xAD9F, 0x74F1, - 0xADA0, 0x74F2, 0xAE40, 0x74F3, 0xAE41, 0x74F5, 0xAE42, 0x74F8, - 0xAE43, 0x74F9, 0xAE44, 0x74FA, 0xAE45, 0x74FB, 0xAE46, 0x74FC, - 0xAE47, 0x74FD, 0xAE48, 0x74FE, 0xAE49, 0x7500, 0xAE4A, 0x7501, - 0xAE4B, 0x7502, 0xAE4C, 0x7503, 0xAE4D, 0x7505, 0xAE4E, 0x7506, - 0xAE4F, 0x7507, 0xAE50, 0x7508, 0xAE51, 0x7509, 0xAE52, 0x750A, - 0xAE53, 0x750B, 0xAE54, 0x750C, 0xAE55, 0x750E, 0xAE56, 0x7510, - 0xAE57, 0x7512, 0xAE58, 0x7514, 0xAE59, 0x7515, 0xAE5A, 0x7516, - 0xAE5B, 0x7517, 0xAE5C, 0x751B, 0xAE5D, 0x751D, 0xAE5E, 0x751E, - 0xAE5F, 0x7520, 0xAE60, 0x7521, 0xAE61, 0x7522, 0xAE62, 0x7523, - 0xAE63, 0x7524, 0xAE64, 0x7526, 0xAE65, 0x7527, 0xAE66, 0x752A, - 0xAE67, 0x752E, 0xAE68, 0x7534, 0xAE69, 0x7536, 0xAE6A, 0x7539, - 0xAE6B, 0x753C, 0xAE6C, 0x753D, 0xAE6D, 0x753F, 0xAE6E, 0x7541, - 0xAE6F, 0x7542, 0xAE70, 0x7543, 0xAE71, 0x7544, 0xAE72, 0x7546, - 0xAE73, 0x7547, 0xAE74, 0x7549, 0xAE75, 0x754A, 0xAE76, 0x754D, - 0xAE77, 0x7550, 0xAE78, 0x7551, 0xAE79, 0x7552, 0xAE7A, 0x7553, - 0xAE7B, 0x7555, 0xAE7C, 0x7556, 0xAE7D, 0x7557, 0xAE7E, 0x7558, - 0xAE80, 0x755D, 0xAE81, 0x755E, 0xAE82, 0x755F, 0xAE83, 0x7560, - 0xAE84, 0x7561, 0xAE85, 0x7562, 0xAE86, 0x7563, 0xAE87, 0x7564, - 0xAE88, 0x7567, 0xAE89, 0x7568, 0xAE8A, 0x7569, 0xAE8B, 0x756B, - 0xAE8C, 0x756C, 0xAE8D, 0x756D, 0xAE8E, 0x756E, 0xAE8F, 0x756F, - 0xAE90, 0x7570, 0xAE91, 0x7571, 0xAE92, 0x7573, 0xAE93, 0x7575, - 0xAE94, 0x7576, 0xAE95, 0x7577, 0xAE96, 0x757A, 0xAE97, 0x757B, - 0xAE98, 0x757C, 0xAE99, 0x757D, 0xAE9A, 0x757E, 0xAE9B, 0x7580, - 0xAE9C, 0x7581, 0xAE9D, 0x7582, 0xAE9E, 0x7584, 0xAE9F, 0x7585, - 0xAEA0, 0x7587, 0xAF40, 0x7588, 0xAF41, 0x7589, 0xAF42, 0x758A, - 0xAF43, 0x758C, 0xAF44, 0x758D, 0xAF45, 0x758E, 0xAF46, 0x7590, - 0xAF47, 0x7593, 0xAF48, 0x7595, 0xAF49, 0x7598, 0xAF4A, 0x759B, - 0xAF4B, 0x759C, 0xAF4C, 0x759E, 0xAF4D, 0x75A2, 0xAF4E, 0x75A6, - 0xAF4F, 0x75A7, 0xAF50, 0x75A8, 0xAF51, 0x75A9, 0xAF52, 0x75AA, - 0xAF53, 0x75AD, 0xAF54, 0x75B6, 0xAF55, 0x75B7, 0xAF56, 0x75BA, - 0xAF57, 0x75BB, 0xAF58, 0x75BF, 0xAF59, 0x75C0, 0xAF5A, 0x75C1, - 0xAF5B, 0x75C6, 0xAF5C, 0x75CB, 0xAF5D, 0x75CC, 0xAF5E, 0x75CE, - 0xAF5F, 0x75CF, 0xAF60, 0x75D0, 0xAF61, 0x75D1, 0xAF62, 0x75D3, - 0xAF63, 0x75D7, 0xAF64, 0x75D9, 0xAF65, 0x75DA, 0xAF66, 0x75DC, - 0xAF67, 0x75DD, 0xAF68, 0x75DF, 0xAF69, 0x75E0, 0xAF6A, 0x75E1, - 0xAF6B, 0x75E5, 0xAF6C, 0x75E9, 0xAF6D, 0x75EC, 0xAF6E, 0x75ED, - 0xAF6F, 0x75EE, 0xAF70, 0x75EF, 0xAF71, 0x75F2, 0xAF72, 0x75F3, - 0xAF73, 0x75F5, 0xAF74, 0x75F6, 0xAF75, 0x75F7, 0xAF76, 0x75F8, - 0xAF77, 0x75FA, 0xAF78, 0x75FB, 0xAF79, 0x75FD, 0xAF7A, 0x75FE, - 0xAF7B, 0x7602, 0xAF7C, 0x7604, 0xAF7D, 0x7606, 0xAF7E, 0x7607, - 0xAF80, 0x7608, 0xAF81, 0x7609, 0xAF82, 0x760B, 0xAF83, 0x760D, - 0xAF84, 0x760E, 0xAF85, 0x760F, 0xAF86, 0x7611, 0xAF87, 0x7612, - 0xAF88, 0x7613, 0xAF89, 0x7614, 0xAF8A, 0x7616, 0xAF8B, 0x761A, - 0xAF8C, 0x761C, 0xAF8D, 0x761D, 0xAF8E, 0x761E, 0xAF8F, 0x7621, - 0xAF90, 0x7623, 0xAF91, 0x7627, 0xAF92, 0x7628, 0xAF93, 0x762C, - 0xAF94, 0x762E, 0xAF95, 0x762F, 0xAF96, 0x7631, 0xAF97, 0x7632, - 0xAF98, 0x7636, 0xAF99, 0x7637, 0xAF9A, 0x7639, 0xAF9B, 0x763A, - 0xAF9C, 0x763B, 0xAF9D, 0x763D, 0xAF9E, 0x7641, 0xAF9F, 0x7642, - 0xAFA0, 0x7644, 0xB040, 0x7645, 0xB041, 0x7646, 0xB042, 0x7647, - 0xB043, 0x7648, 0xB044, 0x7649, 0xB045, 0x764A, 0xB046, 0x764B, - 0xB047, 0x764E, 0xB048, 0x764F, 0xB049, 0x7650, 0xB04A, 0x7651, - 0xB04B, 0x7652, 0xB04C, 0x7653, 0xB04D, 0x7655, 0xB04E, 0x7657, - 0xB04F, 0x7658, 0xB050, 0x7659, 0xB051, 0x765A, 0xB052, 0x765B, - 0xB053, 0x765D, 0xB054, 0x765F, 0xB055, 0x7660, 0xB056, 0x7661, - 0xB057, 0x7662, 0xB058, 0x7664, 0xB059, 0x7665, 0xB05A, 0x7666, - 0xB05B, 0x7667, 0xB05C, 0x7668, 0xB05D, 0x7669, 0xB05E, 0x766A, - 0xB05F, 0x766C, 0xB060, 0x766D, 0xB061, 0x766E, 0xB062, 0x7670, - 0xB063, 0x7671, 0xB064, 0x7672, 0xB065, 0x7673, 0xB066, 0x7674, - 0xB067, 0x7675, 0xB068, 0x7676, 0xB069, 0x7677, 0xB06A, 0x7679, - 0xB06B, 0x767A, 0xB06C, 0x767C, 0xB06D, 0x767F, 0xB06E, 0x7680, - 0xB06F, 0x7681, 0xB070, 0x7683, 0xB071, 0x7685, 0xB072, 0x7689, - 0xB073, 0x768A, 0xB074, 0x768C, 0xB075, 0x768D, 0xB076, 0x768F, - 0xB077, 0x7690, 0xB078, 0x7692, 0xB079, 0x7694, 0xB07A, 0x7695, - 0xB07B, 0x7697, 0xB07C, 0x7698, 0xB07D, 0x769A, 0xB07E, 0x769B, - 0xB080, 0x769C, 0xB081, 0x769D, 0xB082, 0x769E, 0xB083, 0x769F, - 0xB084, 0x76A0, 0xB085, 0x76A1, 0xB086, 0x76A2, 0xB087, 0x76A3, - 0xB088, 0x76A5, 0xB089, 0x76A6, 0xB08A, 0x76A7, 0xB08B, 0x76A8, - 0xB08C, 0x76A9, 0xB08D, 0x76AA, 0xB08E, 0x76AB, 0xB08F, 0x76AC, - 0xB090, 0x76AD, 0xB091, 0x76AF, 0xB092, 0x76B0, 0xB093, 0x76B3, - 0xB094, 0x76B5, 0xB095, 0x76B6, 0xB096, 0x76B7, 0xB097, 0x76B8, - 0xB098, 0x76B9, 0xB099, 0x76BA, 0xB09A, 0x76BB, 0xB09B, 0x76BC, - 0xB09C, 0x76BD, 0xB09D, 0x76BE, 0xB09E, 0x76C0, 0xB09F, 0x76C1, - 0xB0A0, 0x76C3, 0xB0A1, 0x554A, 0xB0A2, 0x963F, 0xB0A3, 0x57C3, - 0xB0A4, 0x6328, 0xB0A5, 0x54CE, 0xB0A6, 0x5509, 0xB0A7, 0x54C0, - 0xB0A8, 0x7691, 0xB0A9, 0x764C, 0xB0AA, 0x853C, 0xB0AB, 0x77EE, - 0xB0AC, 0x827E, 0xB0AD, 0x788D, 0xB0AE, 0x7231, 0xB0AF, 0x9698, - 0xB0B0, 0x978D, 0xB0B1, 0x6C28, 0xB0B2, 0x5B89, 0xB0B3, 0x4FFA, - 0xB0B4, 0x6309, 0xB0B5, 0x6697, 0xB0B6, 0x5CB8, 0xB0B7, 0x80FA, - 0xB0B8, 0x6848, 0xB0B9, 0x80AE, 0xB0BA, 0x6602, 0xB0BB, 0x76CE, - 0xB0BC, 0x51F9, 0xB0BD, 0x6556, 0xB0BE, 0x71AC, 0xB0BF, 0x7FF1, - 0xB0C0, 0x8884, 0xB0C1, 0x50B2, 0xB0C2, 0x5965, 0xB0C3, 0x61CA, - 0xB0C4, 0x6FB3, 0xB0C5, 0x82AD, 0xB0C6, 0x634C, 0xB0C7, 0x6252, - 0xB0C8, 0x53ED, 0xB0C9, 0x5427, 0xB0CA, 0x7B06, 0xB0CB, 0x516B, - 0xB0CC, 0x75A4, 0xB0CD, 0x5DF4, 0xB0CE, 0x62D4, 0xB0CF, 0x8DCB, - 0xB0D0, 0x9776, 0xB0D1, 0x628A, 0xB0D2, 0x8019, 0xB0D3, 0x575D, - 0xB0D4, 0x9738, 0xB0D5, 0x7F62, 0xB0D6, 0x7238, 0xB0D7, 0x767D, - 0xB0D8, 0x67CF, 0xB0D9, 0x767E, 0xB0DA, 0x6446, 0xB0DB, 0x4F70, - 0xB0DC, 0x8D25, 0xB0DD, 0x62DC, 0xB0DE, 0x7A17, 0xB0DF, 0x6591, - 0xB0E0, 0x73ED, 0xB0E1, 0x642C, 0xB0E2, 0x6273, 0xB0E3, 0x822C, - 0xB0E4, 0x9881, 0xB0E5, 0x677F, 0xB0E6, 0x7248, 0xB0E7, 0x626E, - 0xB0E8, 0x62CC, 0xB0E9, 0x4F34, 0xB0EA, 0x74E3, 0xB0EB, 0x534A, - 0xB0EC, 0x529E, 0xB0ED, 0x7ECA, 0xB0EE, 0x90A6, 0xB0EF, 0x5E2E, - 0xB0F0, 0x6886, 0xB0F1, 0x699C, 0xB0F2, 0x8180, 0xB0F3, 0x7ED1, - 0xB0F4, 0x68D2, 0xB0F5, 0x78C5, 0xB0F6, 0x868C, 0xB0F7, 0x9551, - 0xB0F8, 0x508D, 0xB0F9, 0x8C24, 0xB0FA, 0x82DE, 0xB0FB, 0x80DE, - 0xB0FC, 0x5305, 0xB0FD, 0x8912, 0xB0FE, 0x5265, 0xB140, 0x76C4, - 0xB141, 0x76C7, 0xB142, 0x76C9, 0xB143, 0x76CB, 0xB144, 0x76CC, - 0xB145, 0x76D3, 0xB146, 0x76D5, 0xB147, 0x76D9, 0xB148, 0x76DA, - 0xB149, 0x76DC, 0xB14A, 0x76DD, 0xB14B, 0x76DE, 0xB14C, 0x76E0, - 0xB14D, 0x76E1, 0xB14E, 0x76E2, 0xB14F, 0x76E3, 0xB150, 0x76E4, - 0xB151, 0x76E6, 0xB152, 0x76E7, 0xB153, 0x76E8, 0xB154, 0x76E9, - 0xB155, 0x76EA, 0xB156, 0x76EB, 0xB157, 0x76EC, 0xB158, 0x76ED, - 0xB159, 0x76F0, 0xB15A, 0x76F3, 0xB15B, 0x76F5, 0xB15C, 0x76F6, - 0xB15D, 0x76F7, 0xB15E, 0x76FA, 0xB15F, 0x76FB, 0xB160, 0x76FD, - 0xB161, 0x76FF, 0xB162, 0x7700, 0xB163, 0x7702, 0xB164, 0x7703, - 0xB165, 0x7705, 0xB166, 0x7706, 0xB167, 0x770A, 0xB168, 0x770C, - 0xB169, 0x770E, 0xB16A, 0x770F, 0xB16B, 0x7710, 0xB16C, 0x7711, - 0xB16D, 0x7712, 0xB16E, 0x7713, 0xB16F, 0x7714, 0xB170, 0x7715, - 0xB171, 0x7716, 0xB172, 0x7717, 0xB173, 0x7718, 0xB174, 0x771B, - 0xB175, 0x771C, 0xB176, 0x771D, 0xB177, 0x771E, 0xB178, 0x7721, - 0xB179, 0x7723, 0xB17A, 0x7724, 0xB17B, 0x7725, 0xB17C, 0x7727, - 0xB17D, 0x772A, 0xB17E, 0x772B, 0xB180, 0x772C, 0xB181, 0x772E, - 0xB182, 0x7730, 0xB183, 0x7731, 0xB184, 0x7732, 0xB185, 0x7733, - 0xB186, 0x7734, 0xB187, 0x7739, 0xB188, 0x773B, 0xB189, 0x773D, - 0xB18A, 0x773E, 0xB18B, 0x773F, 0xB18C, 0x7742, 0xB18D, 0x7744, - 0xB18E, 0x7745, 0xB18F, 0x7746, 0xB190, 0x7748, 0xB191, 0x7749, - 0xB192, 0x774A, 0xB193, 0x774B, 0xB194, 0x774C, 0xB195, 0x774D, - 0xB196, 0x774E, 0xB197, 0x774F, 0xB198, 0x7752, 0xB199, 0x7753, - 0xB19A, 0x7754, 0xB19B, 0x7755, 0xB19C, 0x7756, 0xB19D, 0x7757, - 0xB19E, 0x7758, 0xB19F, 0x7759, 0xB1A0, 0x775C, 0xB1A1, 0x8584, - 0xB1A2, 0x96F9, 0xB1A3, 0x4FDD, 0xB1A4, 0x5821, 0xB1A5, 0x9971, - 0xB1A6, 0x5B9D, 0xB1A7, 0x62B1, 0xB1A8, 0x62A5, 0xB1A9, 0x66B4, - 0xB1AA, 0x8C79, 0xB1AB, 0x9C8D, 0xB1AC, 0x7206, 0xB1AD, 0x676F, - 0xB1AE, 0x7891, 0xB1AF, 0x60B2, 0xB1B0, 0x5351, 0xB1B1, 0x5317, - 0xB1B2, 0x8F88, 0xB1B3, 0x80CC, 0xB1B4, 0x8D1D, 0xB1B5, 0x94A1, - 0xB1B6, 0x500D, 0xB1B7, 0x72C8, 0xB1B8, 0x5907, 0xB1B9, 0x60EB, - 0xB1BA, 0x7119, 0xB1BB, 0x88AB, 0xB1BC, 0x5954, 0xB1BD, 0x82EF, - 0xB1BE, 0x672C, 0xB1BF, 0x7B28, 0xB1C0, 0x5D29, 0xB1C1, 0x7EF7, - 0xB1C2, 0x752D, 0xB1C3, 0x6CF5, 0xB1C4, 0x8E66, 0xB1C5, 0x8FF8, - 0xB1C6, 0x903C, 0xB1C7, 0x9F3B, 0xB1C8, 0x6BD4, 0xB1C9, 0x9119, - 0xB1CA, 0x7B14, 0xB1CB, 0x5F7C, 0xB1CC, 0x78A7, 0xB1CD, 0x84D6, - 0xB1CE, 0x853D, 0xB1CF, 0x6BD5, 0xB1D0, 0x6BD9, 0xB1D1, 0x6BD6, - 0xB1D2, 0x5E01, 0xB1D3, 0x5E87, 0xB1D4, 0x75F9, 0xB1D5, 0x95ED, - 0xB1D6, 0x655D, 0xB1D7, 0x5F0A, 0xB1D8, 0x5FC5, 0xB1D9, 0x8F9F, - 0xB1DA, 0x58C1, 0xB1DB, 0x81C2, 0xB1DC, 0x907F, 0xB1DD, 0x965B, - 0xB1DE, 0x97AD, 0xB1DF, 0x8FB9, 0xB1E0, 0x7F16, 0xB1E1, 0x8D2C, - 0xB1E2, 0x6241, 0xB1E3, 0x4FBF, 0xB1E4, 0x53D8, 0xB1E5, 0x535E, - 0xB1E6, 0x8FA8, 0xB1E7, 0x8FA9, 0xB1E8, 0x8FAB, 0xB1E9, 0x904D, - 0xB1EA, 0x6807, 0xB1EB, 0x5F6A, 0xB1EC, 0x8198, 0xB1ED, 0x8868, - 0xB1EE, 0x9CD6, 0xB1EF, 0x618B, 0xB1F0, 0x522B, 0xB1F1, 0x762A, - 0xB1F2, 0x5F6C, 0xB1F3, 0x658C, 0xB1F4, 0x6FD2, 0xB1F5, 0x6EE8, - 0xB1F6, 0x5BBE, 0xB1F7, 0x6448, 0xB1F8, 0x5175, 0xB1F9, 0x51B0, - 0xB1FA, 0x67C4, 0xB1FB, 0x4E19, 0xB1FC, 0x79C9, 0xB1FD, 0x997C, - 0xB1FE, 0x70B3, 0xB240, 0x775D, 0xB241, 0x775E, 0xB242, 0x775F, - 0xB243, 0x7760, 0xB244, 0x7764, 0xB245, 0x7767, 0xB246, 0x7769, - 0xB247, 0x776A, 0xB248, 0x776D, 0xB249, 0x776E, 0xB24A, 0x776F, - 0xB24B, 0x7770, 0xB24C, 0x7771, 0xB24D, 0x7772, 0xB24E, 0x7773, - 0xB24F, 0x7774, 0xB250, 0x7775, 0xB251, 0x7776, 0xB252, 0x7777, - 0xB253, 0x7778, 0xB254, 0x777A, 0xB255, 0x777B, 0xB256, 0x777C, - 0xB257, 0x7781, 0xB258, 0x7782, 0xB259, 0x7783, 0xB25A, 0x7786, - 0xB25B, 0x7787, 0xB25C, 0x7788, 0xB25D, 0x7789, 0xB25E, 0x778A, - 0xB25F, 0x778B, 0xB260, 0x778F, 0xB261, 0x7790, 0xB262, 0x7793, - 0xB263, 0x7794, 0xB264, 0x7795, 0xB265, 0x7796, 0xB266, 0x7797, - 0xB267, 0x7798, 0xB268, 0x7799, 0xB269, 0x779A, 0xB26A, 0x779B, - 0xB26B, 0x779C, 0xB26C, 0x779D, 0xB26D, 0x779E, 0xB26E, 0x77A1, - 0xB26F, 0x77A3, 0xB270, 0x77A4, 0xB271, 0x77A6, 0xB272, 0x77A8, - 0xB273, 0x77AB, 0xB274, 0x77AD, 0xB275, 0x77AE, 0xB276, 0x77AF, - 0xB277, 0x77B1, 0xB278, 0x77B2, 0xB279, 0x77B4, 0xB27A, 0x77B6, - 0xB27B, 0x77B7, 0xB27C, 0x77B8, 0xB27D, 0x77B9, 0xB27E, 0x77BA, - 0xB280, 0x77BC, 0xB281, 0x77BE, 0xB282, 0x77C0, 0xB283, 0x77C1, - 0xB284, 0x77C2, 0xB285, 0x77C3, 0xB286, 0x77C4, 0xB287, 0x77C5, - 0xB288, 0x77C6, 0xB289, 0x77C7, 0xB28A, 0x77C8, 0xB28B, 0x77C9, - 0xB28C, 0x77CA, 0xB28D, 0x77CB, 0xB28E, 0x77CC, 0xB28F, 0x77CE, - 0xB290, 0x77CF, 0xB291, 0x77D0, 0xB292, 0x77D1, 0xB293, 0x77D2, - 0xB294, 0x77D3, 0xB295, 0x77D4, 0xB296, 0x77D5, 0xB297, 0x77D6, - 0xB298, 0x77D8, 0xB299, 0x77D9, 0xB29A, 0x77DA, 0xB29B, 0x77DD, - 0xB29C, 0x77DE, 0xB29D, 0x77DF, 0xB29E, 0x77E0, 0xB29F, 0x77E1, - 0xB2A0, 0x77E4, 0xB2A1, 0x75C5, 0xB2A2, 0x5E76, 0xB2A3, 0x73BB, - 0xB2A4, 0x83E0, 0xB2A5, 0x64AD, 0xB2A6, 0x62E8, 0xB2A7, 0x94B5, - 0xB2A8, 0x6CE2, 0xB2A9, 0x535A, 0xB2AA, 0x52C3, 0xB2AB, 0x640F, - 0xB2AC, 0x94C2, 0xB2AD, 0x7B94, 0xB2AE, 0x4F2F, 0xB2AF, 0x5E1B, - 0xB2B0, 0x8236, 0xB2B1, 0x8116, 0xB2B2, 0x818A, 0xB2B3, 0x6E24, - 0xB2B4, 0x6CCA, 0xB2B5, 0x9A73, 0xB2B6, 0x6355, 0xB2B7, 0x535C, - 0xB2B8, 0x54FA, 0xB2B9, 0x8865, 0xB2BA, 0x57E0, 0xB2BB, 0x4E0D, - 0xB2BC, 0x5E03, 0xB2BD, 0x6B65, 0xB2BE, 0x7C3F, 0xB2BF, 0x90E8, - 0xB2C0, 0x6016, 0xB2C1, 0x64E6, 0xB2C2, 0x731C, 0xB2C3, 0x88C1, - 0xB2C4, 0x6750, 0xB2C5, 0x624D, 0xB2C6, 0x8D22, 0xB2C7, 0x776C, - 0xB2C8, 0x8E29, 0xB2C9, 0x91C7, 0xB2CA, 0x5F69, 0xB2CB, 0x83DC, - 0xB2CC, 0x8521, 0xB2CD, 0x9910, 0xB2CE, 0x53C2, 0xB2CF, 0x8695, - 0xB2D0, 0x6B8B, 0xB2D1, 0x60ED, 0xB2D2, 0x60E8, 0xB2D3, 0x707F, - 0xB2D4, 0x82CD, 0xB2D5, 0x8231, 0xB2D6, 0x4ED3, 0xB2D7, 0x6CA7, - 0xB2D8, 0x85CF, 0xB2D9, 0x64CD, 0xB2DA, 0x7CD9, 0xB2DB, 0x69FD, - 0xB2DC, 0x66F9, 0xB2DD, 0x8349, 0xB2DE, 0x5395, 0xB2DF, 0x7B56, - 0xB2E0, 0x4FA7, 0xB2E1, 0x518C, 0xB2E2, 0x6D4B, 0xB2E3, 0x5C42, - 0xB2E4, 0x8E6D, 0xB2E5, 0x63D2, 0xB2E6, 0x53C9, 0xB2E7, 0x832C, - 0xB2E8, 0x8336, 0xB2E9, 0x67E5, 0xB2EA, 0x78B4, 0xB2EB, 0x643D, - 0xB2EC, 0x5BDF, 0xB2ED, 0x5C94, 0xB2EE, 0x5DEE, 0xB2EF, 0x8BE7, - 0xB2F0, 0x62C6, 0xB2F1, 0x67F4, 0xB2F2, 0x8C7A, 0xB2F3, 0x6400, - 0xB2F4, 0x63BA, 0xB2F5, 0x8749, 0xB2F6, 0x998B, 0xB2F7, 0x8C17, - 0xB2F8, 0x7F20, 0xB2F9, 0x94F2, 0xB2FA, 0x4EA7, 0xB2FB, 0x9610, - 0xB2FC, 0x98A4, 0xB2FD, 0x660C, 0xB2FE, 0x7316, 0xB340, 0x77E6, - 0xB341, 0x77E8, 0xB342, 0x77EA, 0xB343, 0x77EF, 0xB344, 0x77F0, - 0xB345, 0x77F1, 0xB346, 0x77F2, 0xB347, 0x77F4, 0xB348, 0x77F5, - 0xB349, 0x77F7, 0xB34A, 0x77F9, 0xB34B, 0x77FA, 0xB34C, 0x77FB, - 0xB34D, 0x77FC, 0xB34E, 0x7803, 0xB34F, 0x7804, 0xB350, 0x7805, - 0xB351, 0x7806, 0xB352, 0x7807, 0xB353, 0x7808, 0xB354, 0x780A, - 0xB355, 0x780B, 0xB356, 0x780E, 0xB357, 0x780F, 0xB358, 0x7810, - 0xB359, 0x7813, 0xB35A, 0x7815, 0xB35B, 0x7819, 0xB35C, 0x781B, - 0xB35D, 0x781E, 0xB35E, 0x7820, 0xB35F, 0x7821, 0xB360, 0x7822, - 0xB361, 0x7824, 0xB362, 0x7828, 0xB363, 0x782A, 0xB364, 0x782B, - 0xB365, 0x782E, 0xB366, 0x782F, 0xB367, 0x7831, 0xB368, 0x7832, - 0xB369, 0x7833, 0xB36A, 0x7835, 0xB36B, 0x7836, 0xB36C, 0x783D, - 0xB36D, 0x783F, 0xB36E, 0x7841, 0xB36F, 0x7842, 0xB370, 0x7843, - 0xB371, 0x7844, 0xB372, 0x7846, 0xB373, 0x7848, 0xB374, 0x7849, - 0xB375, 0x784A, 0xB376, 0x784B, 0xB377, 0x784D, 0xB378, 0x784F, - 0xB379, 0x7851, 0xB37A, 0x7853, 0xB37B, 0x7854, 0xB37C, 0x7858, - 0xB37D, 0x7859, 0xB37E, 0x785A, 0xB380, 0x785B, 0xB381, 0x785C, - 0xB382, 0x785E, 0xB383, 0x785F, 0xB384, 0x7860, 0xB385, 0x7861, - 0xB386, 0x7862, 0xB387, 0x7863, 0xB388, 0x7864, 0xB389, 0x7865, - 0xB38A, 0x7866, 0xB38B, 0x7867, 0xB38C, 0x7868, 0xB38D, 0x7869, - 0xB38E, 0x786F, 0xB38F, 0x7870, 0xB390, 0x7871, 0xB391, 0x7872, - 0xB392, 0x7873, 0xB393, 0x7874, 0xB394, 0x7875, 0xB395, 0x7876, - 0xB396, 0x7878, 0xB397, 0x7879, 0xB398, 0x787A, 0xB399, 0x787B, - 0xB39A, 0x787D, 0xB39B, 0x787E, 0xB39C, 0x787F, 0xB39D, 0x7880, - 0xB39E, 0x7881, 0xB39F, 0x7882, 0xB3A0, 0x7883, 0xB3A1, 0x573A, - 0xB3A2, 0x5C1D, 0xB3A3, 0x5E38, 0xB3A4, 0x957F, 0xB3A5, 0x507F, - 0xB3A6, 0x80A0, 0xB3A7, 0x5382, 0xB3A8, 0x655E, 0xB3A9, 0x7545, - 0xB3AA, 0x5531, 0xB3AB, 0x5021, 0xB3AC, 0x8D85, 0xB3AD, 0x6284, - 0xB3AE, 0x949E, 0xB3AF, 0x671D, 0xB3B0, 0x5632, 0xB3B1, 0x6F6E, - 0xB3B2, 0x5DE2, 0xB3B3, 0x5435, 0xB3B4, 0x7092, 0xB3B5, 0x8F66, - 0xB3B6, 0x626F, 0xB3B7, 0x64A4, 0xB3B8, 0x63A3, 0xB3B9, 0x5F7B, - 0xB3BA, 0x6F88, 0xB3BB, 0x90F4, 0xB3BC, 0x81E3, 0xB3BD, 0x8FB0, - 0xB3BE, 0x5C18, 0xB3BF, 0x6668, 0xB3C0, 0x5FF1, 0xB3C1, 0x6C89, - 0xB3C2, 0x9648, 0xB3C3, 0x8D81, 0xB3C4, 0x886C, 0xB3C5, 0x6491, - 0xB3C6, 0x79F0, 0xB3C7, 0x57CE, 0xB3C8, 0x6A59, 0xB3C9, 0x6210, - 0xB3CA, 0x5448, 0xB3CB, 0x4E58, 0xB3CC, 0x7A0B, 0xB3CD, 0x60E9, - 0xB3CE, 0x6F84, 0xB3CF, 0x8BDA, 0xB3D0, 0x627F, 0xB3D1, 0x901E, - 0xB3D2, 0x9A8B, 0xB3D3, 0x79E4, 0xB3D4, 0x5403, 0xB3D5, 0x75F4, - 0xB3D6, 0x6301, 0xB3D7, 0x5319, 0xB3D8, 0x6C60, 0xB3D9, 0x8FDF, - 0xB3DA, 0x5F1B, 0xB3DB, 0x9A70, 0xB3DC, 0x803B, 0xB3DD, 0x9F7F, - 0xB3DE, 0x4F88, 0xB3DF, 0x5C3A, 0xB3E0, 0x8D64, 0xB3E1, 0x7FC5, - 0xB3E2, 0x65A5, 0xB3E3, 0x70BD, 0xB3E4, 0x5145, 0xB3E5, 0x51B2, - 0xB3E6, 0x866B, 0xB3E7, 0x5D07, 0xB3E8, 0x5BA0, 0xB3E9, 0x62BD, - 0xB3EA, 0x916C, 0xB3EB, 0x7574, 0xB3EC, 0x8E0C, 0xB3ED, 0x7A20, - 0xB3EE, 0x6101, 0xB3EF, 0x7B79, 0xB3F0, 0x4EC7, 0xB3F1, 0x7EF8, - 0xB3F2, 0x7785, 0xB3F3, 0x4E11, 0xB3F4, 0x81ED, 0xB3F5, 0x521D, - 0xB3F6, 0x51FA, 0xB3F7, 0x6A71, 0xB3F8, 0x53A8, 0xB3F9, 0x8E87, - 0xB3FA, 0x9504, 0xB3FB, 0x96CF, 0xB3FC, 0x6EC1, 0xB3FD, 0x9664, - 0xB3FE, 0x695A, 0xB440, 0x7884, 0xB441, 0x7885, 0xB442, 0x7886, - 0xB443, 0x7888, 0xB444, 0x788A, 0xB445, 0x788B, 0xB446, 0x788F, - 0xB447, 0x7890, 0xB448, 0x7892, 0xB449, 0x7894, 0xB44A, 0x7895, - 0xB44B, 0x7896, 0xB44C, 0x7899, 0xB44D, 0x789D, 0xB44E, 0x789E, - 0xB44F, 0x78A0, 0xB450, 0x78A2, 0xB451, 0x78A4, 0xB452, 0x78A6, - 0xB453, 0x78A8, 0xB454, 0x78A9, 0xB455, 0x78AA, 0xB456, 0x78AB, - 0xB457, 0x78AC, 0xB458, 0x78AD, 0xB459, 0x78AE, 0xB45A, 0x78AF, - 0xB45B, 0x78B5, 0xB45C, 0x78B6, 0xB45D, 0x78B7, 0xB45E, 0x78B8, - 0xB45F, 0x78BA, 0xB460, 0x78BB, 0xB461, 0x78BC, 0xB462, 0x78BD, - 0xB463, 0x78BF, 0xB464, 0x78C0, 0xB465, 0x78C2, 0xB466, 0x78C3, - 0xB467, 0x78C4, 0xB468, 0x78C6, 0xB469, 0x78C7, 0xB46A, 0x78C8, - 0xB46B, 0x78CC, 0xB46C, 0x78CD, 0xB46D, 0x78CE, 0xB46E, 0x78CF, - 0xB46F, 0x78D1, 0xB470, 0x78D2, 0xB471, 0x78D3, 0xB472, 0x78D6, - 0xB473, 0x78D7, 0xB474, 0x78D8, 0xB475, 0x78DA, 0xB476, 0x78DB, - 0xB477, 0x78DC, 0xB478, 0x78DD, 0xB479, 0x78DE, 0xB47A, 0x78DF, - 0xB47B, 0x78E0, 0xB47C, 0x78E1, 0xB47D, 0x78E2, 0xB47E, 0x78E3, - 0xB480, 0x78E4, 0xB481, 0x78E5, 0xB482, 0x78E6, 0xB483, 0x78E7, - 0xB484, 0x78E9, 0xB485, 0x78EA, 0xB486, 0x78EB, 0xB487, 0x78ED, - 0xB488, 0x78EE, 0xB489, 0x78EF, 0xB48A, 0x78F0, 0xB48B, 0x78F1, - 0xB48C, 0x78F3, 0xB48D, 0x78F5, 0xB48E, 0x78F6, 0xB48F, 0x78F8, - 0xB490, 0x78F9, 0xB491, 0x78FB, 0xB492, 0x78FC, 0xB493, 0x78FD, - 0xB494, 0x78FE, 0xB495, 0x78FF, 0xB496, 0x7900, 0xB497, 0x7902, - 0xB498, 0x7903, 0xB499, 0x7904, 0xB49A, 0x7906, 0xB49B, 0x7907, - 0xB49C, 0x7908, 0xB49D, 0x7909, 0xB49E, 0x790A, 0xB49F, 0x790B, - 0xB4A0, 0x790C, 0xB4A1, 0x7840, 0xB4A2, 0x50A8, 0xB4A3, 0x77D7, - 0xB4A4, 0x6410, 0xB4A5, 0x89E6, 0xB4A6, 0x5904, 0xB4A7, 0x63E3, - 0xB4A8, 0x5DDD, 0xB4A9, 0x7A7F, 0xB4AA, 0x693D, 0xB4AB, 0x4F20, - 0xB4AC, 0x8239, 0xB4AD, 0x5598, 0xB4AE, 0x4E32, 0xB4AF, 0x75AE, - 0xB4B0, 0x7A97, 0xB4B1, 0x5E62, 0xB4B2, 0x5E8A, 0xB4B3, 0x95EF, - 0xB4B4, 0x521B, 0xB4B5, 0x5439, 0xB4B6, 0x708A, 0xB4B7, 0x6376, - 0xB4B8, 0x9524, 0xB4B9, 0x5782, 0xB4BA, 0x6625, 0xB4BB, 0x693F, - 0xB4BC, 0x9187, 0xB4BD, 0x5507, 0xB4BE, 0x6DF3, 0xB4BF, 0x7EAF, - 0xB4C0, 0x8822, 0xB4C1, 0x6233, 0xB4C2, 0x7EF0, 0xB4C3, 0x75B5, - 0xB4C4, 0x8328, 0xB4C5, 0x78C1, 0xB4C6, 0x96CC, 0xB4C7, 0x8F9E, - 0xB4C8, 0x6148, 0xB4C9, 0x74F7, 0xB4CA, 0x8BCD, 0xB4CB, 0x6B64, - 0xB4CC, 0x523A, 0xB4CD, 0x8D50, 0xB4CE, 0x6B21, 0xB4CF, 0x806A, - 0xB4D0, 0x8471, 0xB4D1, 0x56F1, 0xB4D2, 0x5306, 0xB4D3, 0x4ECE, - 0xB4D4, 0x4E1B, 0xB4D5, 0x51D1, 0xB4D6, 0x7C97, 0xB4D7, 0x918B, - 0xB4D8, 0x7C07, 0xB4D9, 0x4FC3, 0xB4DA, 0x8E7F, 0xB4DB, 0x7BE1, - 0xB4DC, 0x7A9C, 0xB4DD, 0x6467, 0xB4DE, 0x5D14, 0xB4DF, 0x50AC, - 0xB4E0, 0x8106, 0xB4E1, 0x7601, 0xB4E2, 0x7CB9, 0xB4E3, 0x6DEC, - 0xB4E4, 0x7FE0, 0xB4E5, 0x6751, 0xB4E6, 0x5B58, 0xB4E7, 0x5BF8, - 0xB4E8, 0x78CB, 0xB4E9, 0x64AE, 0xB4EA, 0x6413, 0xB4EB, 0x63AA, - 0xB4EC, 0x632B, 0xB4ED, 0x9519, 0xB4EE, 0x642D, 0xB4EF, 0x8FBE, - 0xB4F0, 0x7B54, 0xB4F1, 0x7629, 0xB4F2, 0x6253, 0xB4F3, 0x5927, - 0xB4F4, 0x5446, 0xB4F5, 0x6B79, 0xB4F6, 0x50A3, 0xB4F7, 0x6234, - 0xB4F8, 0x5E26, 0xB4F9, 0x6B86, 0xB4FA, 0x4EE3, 0xB4FB, 0x8D37, - 0xB4FC, 0x888B, 0xB4FD, 0x5F85, 0xB4FE, 0x902E, 0xB540, 0x790D, - 0xB541, 0x790E, 0xB542, 0x790F, 0xB543, 0x7910, 0xB544, 0x7911, - 0xB545, 0x7912, 0xB546, 0x7914, 0xB547, 0x7915, 0xB548, 0x7916, - 0xB549, 0x7917, 0xB54A, 0x7918, 0xB54B, 0x7919, 0xB54C, 0x791A, - 0xB54D, 0x791B, 0xB54E, 0x791C, 0xB54F, 0x791D, 0xB550, 0x791F, - 0xB551, 0x7920, 0xB552, 0x7921, 0xB553, 0x7922, 0xB554, 0x7923, - 0xB555, 0x7925, 0xB556, 0x7926, 0xB557, 0x7927, 0xB558, 0x7928, - 0xB559, 0x7929, 0xB55A, 0x792A, 0xB55B, 0x792B, 0xB55C, 0x792C, - 0xB55D, 0x792D, 0xB55E, 0x792E, 0xB55F, 0x792F, 0xB560, 0x7930, - 0xB561, 0x7931, 0xB562, 0x7932, 0xB563, 0x7933, 0xB564, 0x7935, - 0xB565, 0x7936, 0xB566, 0x7937, 0xB567, 0x7938, 0xB568, 0x7939, - 0xB569, 0x793D, 0xB56A, 0x793F, 0xB56B, 0x7942, 0xB56C, 0x7943, - 0xB56D, 0x7944, 0xB56E, 0x7945, 0xB56F, 0x7947, 0xB570, 0x794A, - 0xB571, 0x794B, 0xB572, 0x794C, 0xB573, 0x794D, 0xB574, 0x794E, - 0xB575, 0x794F, 0xB576, 0x7950, 0xB577, 0x7951, 0xB578, 0x7952, - 0xB579, 0x7954, 0xB57A, 0x7955, 0xB57B, 0x7958, 0xB57C, 0x7959, - 0xB57D, 0x7961, 0xB57E, 0x7963, 0xB580, 0x7964, 0xB581, 0x7966, - 0xB582, 0x7969, 0xB583, 0x796A, 0xB584, 0x796B, 0xB585, 0x796C, - 0xB586, 0x796E, 0xB587, 0x7970, 0xB588, 0x7971, 0xB589, 0x7972, - 0xB58A, 0x7973, 0xB58B, 0x7974, 0xB58C, 0x7975, 0xB58D, 0x7976, - 0xB58E, 0x7979, 0xB58F, 0x797B, 0xB590, 0x797C, 0xB591, 0x797D, - 0xB592, 0x797E, 0xB593, 0x797F, 0xB594, 0x7982, 0xB595, 0x7983, - 0xB596, 0x7986, 0xB597, 0x7987, 0xB598, 0x7988, 0xB599, 0x7989, - 0xB59A, 0x798B, 0xB59B, 0x798C, 0xB59C, 0x798D, 0xB59D, 0x798E, - 0xB59E, 0x7990, 0xB59F, 0x7991, 0xB5A0, 0x7992, 0xB5A1, 0x6020, - 0xB5A2, 0x803D, 0xB5A3, 0x62C5, 0xB5A4, 0x4E39, 0xB5A5, 0x5355, - 0xB5A6, 0x90F8, 0xB5A7, 0x63B8, 0xB5A8, 0x80C6, 0xB5A9, 0x65E6, - 0xB5AA, 0x6C2E, 0xB5AB, 0x4F46, 0xB5AC, 0x60EE, 0xB5AD, 0x6DE1, - 0xB5AE, 0x8BDE, 0xB5AF, 0x5F39, 0xB5B0, 0x86CB, 0xB5B1, 0x5F53, - 0xB5B2, 0x6321, 0xB5B3, 0x515A, 0xB5B4, 0x8361, 0xB5B5, 0x6863, - 0xB5B6, 0x5200, 0xB5B7, 0x6363, 0xB5B8, 0x8E48, 0xB5B9, 0x5012, - 0xB5BA, 0x5C9B, 0xB5BB, 0x7977, 0xB5BC, 0x5BFC, 0xB5BD, 0x5230, - 0xB5BE, 0x7A3B, 0xB5BF, 0x60BC, 0xB5C0, 0x9053, 0xB5C1, 0x76D7, - 0xB5C2, 0x5FB7, 0xB5C3, 0x5F97, 0xB5C4, 0x7684, 0xB5C5, 0x8E6C, - 0xB5C6, 0x706F, 0xB5C7, 0x767B, 0xB5C8, 0x7B49, 0xB5C9, 0x77AA, - 0xB5CA, 0x51F3, 0xB5CB, 0x9093, 0xB5CC, 0x5824, 0xB5CD, 0x4F4E, - 0xB5CE, 0x6EF4, 0xB5CF, 0x8FEA, 0xB5D0, 0x654C, 0xB5D1, 0x7B1B, - 0xB5D2, 0x72C4, 0xB5D3, 0x6DA4, 0xB5D4, 0x7FDF, 0xB5D5, 0x5AE1, - 0xB5D6, 0x62B5, 0xB5D7, 0x5E95, 0xB5D8, 0x5730, 0xB5D9, 0x8482, - 0xB5DA, 0x7B2C, 0xB5DB, 0x5E1D, 0xB5DC, 0x5F1F, 0xB5DD, 0x9012, - 0xB5DE, 0x7F14, 0xB5DF, 0x98A0, 0xB5E0, 0x6382, 0xB5E1, 0x6EC7, - 0xB5E2, 0x7898, 0xB5E3, 0x70B9, 0xB5E4, 0x5178, 0xB5E5, 0x975B, - 0xB5E6, 0x57AB, 0xB5E7, 0x7535, 0xB5E8, 0x4F43, 0xB5E9, 0x7538, - 0xB5EA, 0x5E97, 0xB5EB, 0x60E6, 0xB5EC, 0x5960, 0xB5ED, 0x6DC0, - 0xB5EE, 0x6BBF, 0xB5EF, 0x7889, 0xB5F0, 0x53FC, 0xB5F1, 0x96D5, - 0xB5F2, 0x51CB, 0xB5F3, 0x5201, 0xB5F4, 0x6389, 0xB5F5, 0x540A, - 0xB5F6, 0x9493, 0xB5F7, 0x8C03, 0xB5F8, 0x8DCC, 0xB5F9, 0x7239, - 0xB5FA, 0x789F, 0xB5FB, 0x8776, 0xB5FC, 0x8FED, 0xB5FD, 0x8C0D, - 0xB5FE, 0x53E0, 0xB640, 0x7993, 0xB641, 0x7994, 0xB642, 0x7995, - 0xB643, 0x7996, 0xB644, 0x7997, 0xB645, 0x7998, 0xB646, 0x7999, - 0xB647, 0x799B, 0xB648, 0x799C, 0xB649, 0x799D, 0xB64A, 0x799E, - 0xB64B, 0x799F, 0xB64C, 0x79A0, 0xB64D, 0x79A1, 0xB64E, 0x79A2, - 0xB64F, 0x79A3, 0xB650, 0x79A4, 0xB651, 0x79A5, 0xB652, 0x79A6, - 0xB653, 0x79A8, 0xB654, 0x79A9, 0xB655, 0x79AA, 0xB656, 0x79AB, - 0xB657, 0x79AC, 0xB658, 0x79AD, 0xB659, 0x79AE, 0xB65A, 0x79AF, - 0xB65B, 0x79B0, 0xB65C, 0x79B1, 0xB65D, 0x79B2, 0xB65E, 0x79B4, - 0xB65F, 0x79B5, 0xB660, 0x79B6, 0xB661, 0x79B7, 0xB662, 0x79B8, - 0xB663, 0x79BC, 0xB664, 0x79BF, 0xB665, 0x79C2, 0xB666, 0x79C4, - 0xB667, 0x79C5, 0xB668, 0x79C7, 0xB669, 0x79C8, 0xB66A, 0x79CA, - 0xB66B, 0x79CC, 0xB66C, 0x79CE, 0xB66D, 0x79CF, 0xB66E, 0x79D0, - 0xB66F, 0x79D3, 0xB670, 0x79D4, 0xB671, 0x79D6, 0xB672, 0x79D7, - 0xB673, 0x79D9, 0xB674, 0x79DA, 0xB675, 0x79DB, 0xB676, 0x79DC, - 0xB677, 0x79DD, 0xB678, 0x79DE, 0xB679, 0x79E0, 0xB67A, 0x79E1, - 0xB67B, 0x79E2, 0xB67C, 0x79E5, 0xB67D, 0x79E8, 0xB67E, 0x79EA, - 0xB680, 0x79EC, 0xB681, 0x79EE, 0xB682, 0x79F1, 0xB683, 0x79F2, - 0xB684, 0x79F3, 0xB685, 0x79F4, 0xB686, 0x79F5, 0xB687, 0x79F6, - 0xB688, 0x79F7, 0xB689, 0x79F9, 0xB68A, 0x79FA, 0xB68B, 0x79FC, - 0xB68C, 0x79FE, 0xB68D, 0x79FF, 0xB68E, 0x7A01, 0xB68F, 0x7A04, - 0xB690, 0x7A05, 0xB691, 0x7A07, 0xB692, 0x7A08, 0xB693, 0x7A09, - 0xB694, 0x7A0A, 0xB695, 0x7A0C, 0xB696, 0x7A0F, 0xB697, 0x7A10, - 0xB698, 0x7A11, 0xB699, 0x7A12, 0xB69A, 0x7A13, 0xB69B, 0x7A15, - 0xB69C, 0x7A16, 0xB69D, 0x7A18, 0xB69E, 0x7A19, 0xB69F, 0x7A1B, - 0xB6A0, 0x7A1C, 0xB6A1, 0x4E01, 0xB6A2, 0x76EF, 0xB6A3, 0x53EE, - 0xB6A4, 0x9489, 0xB6A5, 0x9876, 0xB6A6, 0x9F0E, 0xB6A7, 0x952D, - 0xB6A8, 0x5B9A, 0xB6A9, 0x8BA2, 0xB6AA, 0x4E22, 0xB6AB, 0x4E1C, - 0xB6AC, 0x51AC, 0xB6AD, 0x8463, 0xB6AE, 0x61C2, 0xB6AF, 0x52A8, - 0xB6B0, 0x680B, 0xB6B1, 0x4F97, 0xB6B2, 0x606B, 0xB6B3, 0x51BB, - 0xB6B4, 0x6D1E, 0xB6B5, 0x515C, 0xB6B6, 0x6296, 0xB6B7, 0x6597, - 0xB6B8, 0x9661, 0xB6B9, 0x8C46, 0xB6BA, 0x9017, 0xB6BB, 0x75D8, - 0xB6BC, 0x90FD, 0xB6BD, 0x7763, 0xB6BE, 0x6BD2, 0xB6BF, 0x728A, - 0xB6C0, 0x72EC, 0xB6C1, 0x8BFB, 0xB6C2, 0x5835, 0xB6C3, 0x7779, - 0xB6C4, 0x8D4C, 0xB6C5, 0x675C, 0xB6C6, 0x9540, 0xB6C7, 0x809A, - 0xB6C8, 0x5EA6, 0xB6C9, 0x6E21, 0xB6CA, 0x5992, 0xB6CB, 0x7AEF, - 0xB6CC, 0x77ED, 0xB6CD, 0x953B, 0xB6CE, 0x6BB5, 0xB6CF, 0x65AD, - 0xB6D0, 0x7F0E, 0xB6D1, 0x5806, 0xB6D2, 0x5151, 0xB6D3, 0x961F, - 0xB6D4, 0x5BF9, 0xB6D5, 0x58A9, 0xB6D6, 0x5428, 0xB6D7, 0x8E72, - 0xB6D8, 0x6566, 0xB6D9, 0x987F, 0xB6DA, 0x56E4, 0xB6DB, 0x949D, - 0xB6DC, 0x76FE, 0xB6DD, 0x9041, 0xB6DE, 0x6387, 0xB6DF, 0x54C6, - 0xB6E0, 0x591A, 0xB6E1, 0x593A, 0xB6E2, 0x579B, 0xB6E3, 0x8EB2, - 0xB6E4, 0x6735, 0xB6E5, 0x8DFA, 0xB6E6, 0x8235, 0xB6E7, 0x5241, - 0xB6E8, 0x60F0, 0xB6E9, 0x5815, 0xB6EA, 0x86FE, 0xB6EB, 0x5CE8, - 0xB6EC, 0x9E45, 0xB6ED, 0x4FC4, 0xB6EE, 0x989D, 0xB6EF, 0x8BB9, - 0xB6F0, 0x5A25, 0xB6F1, 0x6076, 0xB6F2, 0x5384, 0xB6F3, 0x627C, - 0xB6F4, 0x904F, 0xB6F5, 0x9102, 0xB6F6, 0x997F, 0xB6F7, 0x6069, - 0xB6F8, 0x800C, 0xB6F9, 0x513F, 0xB6FA, 0x8033, 0xB6FB, 0x5C14, - 0xB6FC, 0x9975, 0xB6FD, 0x6D31, 0xB6FE, 0x4E8C, 0xB740, 0x7A1D, - 0xB741, 0x7A1F, 0xB742, 0x7A21, 0xB743, 0x7A22, 0xB744, 0x7A24, - 0xB745, 0x7A25, 0xB746, 0x7A26, 0xB747, 0x7A27, 0xB748, 0x7A28, - 0xB749, 0x7A29, 0xB74A, 0x7A2A, 0xB74B, 0x7A2B, 0xB74C, 0x7A2C, - 0xB74D, 0x7A2D, 0xB74E, 0x7A2E, 0xB74F, 0x7A2F, 0xB750, 0x7A30, - 0xB751, 0x7A31, 0xB752, 0x7A32, 0xB753, 0x7A34, 0xB754, 0x7A35, - 0xB755, 0x7A36, 0xB756, 0x7A38, 0xB757, 0x7A3A, 0xB758, 0x7A3E, - 0xB759, 0x7A40, 0xB75A, 0x7A41, 0xB75B, 0x7A42, 0xB75C, 0x7A43, - 0xB75D, 0x7A44, 0xB75E, 0x7A45, 0xB75F, 0x7A47, 0xB760, 0x7A48, - 0xB761, 0x7A49, 0xB762, 0x7A4A, 0xB763, 0x7A4B, 0xB764, 0x7A4C, - 0xB765, 0x7A4D, 0xB766, 0x7A4E, 0xB767, 0x7A4F, 0xB768, 0x7A50, - 0xB769, 0x7A52, 0xB76A, 0x7A53, 0xB76B, 0x7A54, 0xB76C, 0x7A55, - 0xB76D, 0x7A56, 0xB76E, 0x7A58, 0xB76F, 0x7A59, 0xB770, 0x7A5A, - 0xB771, 0x7A5B, 0xB772, 0x7A5C, 0xB773, 0x7A5D, 0xB774, 0x7A5E, - 0xB775, 0x7A5F, 0xB776, 0x7A60, 0xB777, 0x7A61, 0xB778, 0x7A62, - 0xB779, 0x7A63, 0xB77A, 0x7A64, 0xB77B, 0x7A65, 0xB77C, 0x7A66, - 0xB77D, 0x7A67, 0xB77E, 0x7A68, 0xB780, 0x7A69, 0xB781, 0x7A6A, - 0xB782, 0x7A6B, 0xB783, 0x7A6C, 0xB784, 0x7A6D, 0xB785, 0x7A6E, - 0xB786, 0x7A6F, 0xB787, 0x7A71, 0xB788, 0x7A72, 0xB789, 0x7A73, - 0xB78A, 0x7A75, 0xB78B, 0x7A7B, 0xB78C, 0x7A7C, 0xB78D, 0x7A7D, - 0xB78E, 0x7A7E, 0xB78F, 0x7A82, 0xB790, 0x7A85, 0xB791, 0x7A87, - 0xB792, 0x7A89, 0xB793, 0x7A8A, 0xB794, 0x7A8B, 0xB795, 0x7A8C, - 0xB796, 0x7A8E, 0xB797, 0x7A8F, 0xB798, 0x7A90, 0xB799, 0x7A93, - 0xB79A, 0x7A94, 0xB79B, 0x7A99, 0xB79C, 0x7A9A, 0xB79D, 0x7A9B, - 0xB79E, 0x7A9E, 0xB79F, 0x7AA1, 0xB7A0, 0x7AA2, 0xB7A1, 0x8D30, - 0xB7A2, 0x53D1, 0xB7A3, 0x7F5A, 0xB7A4, 0x7B4F, 0xB7A5, 0x4F10, - 0xB7A6, 0x4E4F, 0xB7A7, 0x9600, 0xB7A8, 0x6CD5, 0xB7A9, 0x73D0, - 0xB7AA, 0x85E9, 0xB7AB, 0x5E06, 0xB7AC, 0x756A, 0xB7AD, 0x7FFB, - 0xB7AE, 0x6A0A, 0xB7AF, 0x77FE, 0xB7B0, 0x9492, 0xB7B1, 0x7E41, - 0xB7B2, 0x51E1, 0xB7B3, 0x70E6, 0xB7B4, 0x53CD, 0xB7B5, 0x8FD4, - 0xB7B6, 0x8303, 0xB7B7, 0x8D29, 0xB7B8, 0x72AF, 0xB7B9, 0x996D, - 0xB7BA, 0x6CDB, 0xB7BB, 0x574A, 0xB7BC, 0x82B3, 0xB7BD, 0x65B9, - 0xB7BE, 0x80AA, 0xB7BF, 0x623F, 0xB7C0, 0x9632, 0xB7C1, 0x59A8, - 0xB7C2, 0x4EFF, 0xB7C3, 0x8BBF, 0xB7C4, 0x7EBA, 0xB7C5, 0x653E, - 0xB7C6, 0x83F2, 0xB7C7, 0x975E, 0xB7C8, 0x5561, 0xB7C9, 0x98DE, - 0xB7CA, 0x80A5, 0xB7CB, 0x532A, 0xB7CC, 0x8BFD, 0xB7CD, 0x5420, - 0xB7CE, 0x80BA, 0xB7CF, 0x5E9F, 0xB7D0, 0x6CB8, 0xB7D1, 0x8D39, - 0xB7D2, 0x82AC, 0xB7D3, 0x915A, 0xB7D4, 0x5429, 0xB7D5, 0x6C1B, - 0xB7D6, 0x5206, 0xB7D7, 0x7EB7, 0xB7D8, 0x575F, 0xB7D9, 0x711A, - 0xB7DA, 0x6C7E, 0xB7DB, 0x7C89, 0xB7DC, 0x594B, 0xB7DD, 0x4EFD, - 0xB7DE, 0x5FFF, 0xB7DF, 0x6124, 0xB7E0, 0x7CAA, 0xB7E1, 0x4E30, - 0xB7E2, 0x5C01, 0xB7E3, 0x67AB, 0xB7E4, 0x8702, 0xB7E5, 0x5CF0, - 0xB7E6, 0x950B, 0xB7E7, 0x98CE, 0xB7E8, 0x75AF, 0xB7E9, 0x70FD, - 0xB7EA, 0x9022, 0xB7EB, 0x51AF, 0xB7EC, 0x7F1D, 0xB7ED, 0x8BBD, - 0xB7EE, 0x5949, 0xB7EF, 0x51E4, 0xB7F0, 0x4F5B, 0xB7F1, 0x5426, - 0xB7F2, 0x592B, 0xB7F3, 0x6577, 0xB7F4, 0x80A4, 0xB7F5, 0x5B75, - 0xB7F6, 0x6276, 0xB7F7, 0x62C2, 0xB7F8, 0x8F90, 0xB7F9, 0x5E45, - 0xB7FA, 0x6C1F, 0xB7FB, 0x7B26, 0xB7FC, 0x4F0F, 0xB7FD, 0x4FD8, - 0xB7FE, 0x670D, 0xB840, 0x7AA3, 0xB841, 0x7AA4, 0xB842, 0x7AA7, - 0xB843, 0x7AA9, 0xB844, 0x7AAA, 0xB845, 0x7AAB, 0xB846, 0x7AAE, - 0xB847, 0x7AAF, 0xB848, 0x7AB0, 0xB849, 0x7AB1, 0xB84A, 0x7AB2, - 0xB84B, 0x7AB4, 0xB84C, 0x7AB5, 0xB84D, 0x7AB6, 0xB84E, 0x7AB7, - 0xB84F, 0x7AB8, 0xB850, 0x7AB9, 0xB851, 0x7ABA, 0xB852, 0x7ABB, - 0xB853, 0x7ABC, 0xB854, 0x7ABD, 0xB855, 0x7ABE, 0xB856, 0x7AC0, - 0xB857, 0x7AC1, 0xB858, 0x7AC2, 0xB859, 0x7AC3, 0xB85A, 0x7AC4, - 0xB85B, 0x7AC5, 0xB85C, 0x7AC6, 0xB85D, 0x7AC7, 0xB85E, 0x7AC8, - 0xB85F, 0x7AC9, 0xB860, 0x7ACA, 0xB861, 0x7ACC, 0xB862, 0x7ACD, - 0xB863, 0x7ACE, 0xB864, 0x7ACF, 0xB865, 0x7AD0, 0xB866, 0x7AD1, - 0xB867, 0x7AD2, 0xB868, 0x7AD3, 0xB869, 0x7AD4, 0xB86A, 0x7AD5, - 0xB86B, 0x7AD7, 0xB86C, 0x7AD8, 0xB86D, 0x7ADA, 0xB86E, 0x7ADB, - 0xB86F, 0x7ADC, 0xB870, 0x7ADD, 0xB871, 0x7AE1, 0xB872, 0x7AE2, - 0xB873, 0x7AE4, 0xB874, 0x7AE7, 0xB875, 0x7AE8, 0xB876, 0x7AE9, - 0xB877, 0x7AEA, 0xB878, 0x7AEB, 0xB879, 0x7AEC, 0xB87A, 0x7AEE, - 0xB87B, 0x7AF0, 0xB87C, 0x7AF1, 0xB87D, 0x7AF2, 0xB87E, 0x7AF3, - 0xB880, 0x7AF4, 0xB881, 0x7AF5, 0xB882, 0x7AF6, 0xB883, 0x7AF7, - 0xB884, 0x7AF8, 0xB885, 0x7AFB, 0xB886, 0x7AFC, 0xB887, 0x7AFE, - 0xB888, 0x7B00, 0xB889, 0x7B01, 0xB88A, 0x7B02, 0xB88B, 0x7B05, - 0xB88C, 0x7B07, 0xB88D, 0x7B09, 0xB88E, 0x7B0C, 0xB88F, 0x7B0D, - 0xB890, 0x7B0E, 0xB891, 0x7B10, 0xB892, 0x7B12, 0xB893, 0x7B13, - 0xB894, 0x7B16, 0xB895, 0x7B17, 0xB896, 0x7B18, 0xB897, 0x7B1A, - 0xB898, 0x7B1C, 0xB899, 0x7B1D, 0xB89A, 0x7B1F, 0xB89B, 0x7B21, - 0xB89C, 0x7B22, 0xB89D, 0x7B23, 0xB89E, 0x7B27, 0xB89F, 0x7B29, - 0xB8A0, 0x7B2D, 0xB8A1, 0x6D6E, 0xB8A2, 0x6DAA, 0xB8A3, 0x798F, - 0xB8A4, 0x88B1, 0xB8A5, 0x5F17, 0xB8A6, 0x752B, 0xB8A7, 0x629A, - 0xB8A8, 0x8F85, 0xB8A9, 0x4FEF, 0xB8AA, 0x91DC, 0xB8AB, 0x65A7, - 0xB8AC, 0x812F, 0xB8AD, 0x8151, 0xB8AE, 0x5E9C, 0xB8AF, 0x8150, - 0xB8B0, 0x8D74, 0xB8B1, 0x526F, 0xB8B2, 0x8986, 0xB8B3, 0x8D4B, - 0xB8B4, 0x590D, 0xB8B5, 0x5085, 0xB8B6, 0x4ED8, 0xB8B7, 0x961C, - 0xB8B8, 0x7236, 0xB8B9, 0x8179, 0xB8BA, 0x8D1F, 0xB8BB, 0x5BCC, - 0xB8BC, 0x8BA3, 0xB8BD, 0x9644, 0xB8BE, 0x5987, 0xB8BF, 0x7F1A, - 0xB8C0, 0x5490, 0xB8C1, 0x5676, 0xB8C2, 0x560E, 0xB8C3, 0x8BE5, - 0xB8C4, 0x6539, 0xB8C5, 0x6982, 0xB8C6, 0x9499, 0xB8C7, 0x76D6, - 0xB8C8, 0x6E89, 0xB8C9, 0x5E72, 0xB8CA, 0x7518, 0xB8CB, 0x6746, - 0xB8CC, 0x67D1, 0xB8CD, 0x7AFF, 0xB8CE, 0x809D, 0xB8CF, 0x8D76, - 0xB8D0, 0x611F, 0xB8D1, 0x79C6, 0xB8D2, 0x6562, 0xB8D3, 0x8D63, - 0xB8D4, 0x5188, 0xB8D5, 0x521A, 0xB8D6, 0x94A2, 0xB8D7, 0x7F38, - 0xB8D8, 0x809B, 0xB8D9, 0x7EB2, 0xB8DA, 0x5C97, 0xB8DB, 0x6E2F, - 0xB8DC, 0x6760, 0xB8DD, 0x7BD9, 0xB8DE, 0x768B, 0xB8DF, 0x9AD8, - 0xB8E0, 0x818F, 0xB8E1, 0x7F94, 0xB8E2, 0x7CD5, 0xB8E3, 0x641E, - 0xB8E4, 0x9550, 0xB8E5, 0x7A3F, 0xB8E6, 0x544A, 0xB8E7, 0x54E5, - 0xB8E8, 0x6B4C, 0xB8E9, 0x6401, 0xB8EA, 0x6208, 0xB8EB, 0x9E3D, - 0xB8EC, 0x80F3, 0xB8ED, 0x7599, 0xB8EE, 0x5272, 0xB8EF, 0x9769, - 0xB8F0, 0x845B, 0xB8F1, 0x683C, 0xB8F2, 0x86E4, 0xB8F3, 0x9601, - 0xB8F4, 0x9694, 0xB8F5, 0x94EC, 0xB8F6, 0x4E2A, 0xB8F7, 0x5404, - 0xB8F8, 0x7ED9, 0xB8F9, 0x6839, 0xB8FA, 0x8DDF, 0xB8FB, 0x8015, - 0xB8FC, 0x66F4, 0xB8FD, 0x5E9A, 0xB8FE, 0x7FB9, 0xB940, 0x7B2F, - 0xB941, 0x7B30, 0xB942, 0x7B32, 0xB943, 0x7B34, 0xB944, 0x7B35, - 0xB945, 0x7B36, 0xB946, 0x7B37, 0xB947, 0x7B39, 0xB948, 0x7B3B, - 0xB949, 0x7B3D, 0xB94A, 0x7B3F, 0xB94B, 0x7B40, 0xB94C, 0x7B41, - 0xB94D, 0x7B42, 0xB94E, 0x7B43, 0xB94F, 0x7B44, 0xB950, 0x7B46, - 0xB951, 0x7B48, 0xB952, 0x7B4A, 0xB953, 0x7B4D, 0xB954, 0x7B4E, - 0xB955, 0x7B53, 0xB956, 0x7B55, 0xB957, 0x7B57, 0xB958, 0x7B59, - 0xB959, 0x7B5C, 0xB95A, 0x7B5E, 0xB95B, 0x7B5F, 0xB95C, 0x7B61, - 0xB95D, 0x7B63, 0xB95E, 0x7B64, 0xB95F, 0x7B65, 0xB960, 0x7B66, - 0xB961, 0x7B67, 0xB962, 0x7B68, 0xB963, 0x7B69, 0xB964, 0x7B6A, - 0xB965, 0x7B6B, 0xB966, 0x7B6C, 0xB967, 0x7B6D, 0xB968, 0x7B6F, - 0xB969, 0x7B70, 0xB96A, 0x7B73, 0xB96B, 0x7B74, 0xB96C, 0x7B76, - 0xB96D, 0x7B78, 0xB96E, 0x7B7A, 0xB96F, 0x7B7C, 0xB970, 0x7B7D, - 0xB971, 0x7B7F, 0xB972, 0x7B81, 0xB973, 0x7B82, 0xB974, 0x7B83, - 0xB975, 0x7B84, 0xB976, 0x7B86, 0xB977, 0x7B87, 0xB978, 0x7B88, - 0xB979, 0x7B89, 0xB97A, 0x7B8A, 0xB97B, 0x7B8B, 0xB97C, 0x7B8C, - 0xB97D, 0x7B8E, 0xB97E, 0x7B8F, 0xB980, 0x7B91, 0xB981, 0x7B92, - 0xB982, 0x7B93, 0xB983, 0x7B96, 0xB984, 0x7B98, 0xB985, 0x7B99, - 0xB986, 0x7B9A, 0xB987, 0x7B9B, 0xB988, 0x7B9E, 0xB989, 0x7B9F, - 0xB98A, 0x7BA0, 0xB98B, 0x7BA3, 0xB98C, 0x7BA4, 0xB98D, 0x7BA5, - 0xB98E, 0x7BAE, 0xB98F, 0x7BAF, 0xB990, 0x7BB0, 0xB991, 0x7BB2, - 0xB992, 0x7BB3, 0xB993, 0x7BB5, 0xB994, 0x7BB6, 0xB995, 0x7BB7, - 0xB996, 0x7BB9, 0xB997, 0x7BBA, 0xB998, 0x7BBB, 0xB999, 0x7BBC, - 0xB99A, 0x7BBD, 0xB99B, 0x7BBE, 0xB99C, 0x7BBF, 0xB99D, 0x7BC0, - 0xB99E, 0x7BC2, 0xB99F, 0x7BC3, 0xB9A0, 0x7BC4, 0xB9A1, 0x57C2, - 0xB9A2, 0x803F, 0xB9A3, 0x6897, 0xB9A4, 0x5DE5, 0xB9A5, 0x653B, - 0xB9A6, 0x529F, 0xB9A7, 0x606D, 0xB9A8, 0x9F9A, 0xB9A9, 0x4F9B, - 0xB9AA, 0x8EAC, 0xB9AB, 0x516C, 0xB9AC, 0x5BAB, 0xB9AD, 0x5F13, - 0xB9AE, 0x5DE9, 0xB9AF, 0x6C5E, 0xB9B0, 0x62F1, 0xB9B1, 0x8D21, - 0xB9B2, 0x5171, 0xB9B3, 0x94A9, 0xB9B4, 0x52FE, 0xB9B5, 0x6C9F, - 0xB9B6, 0x82DF, 0xB9B7, 0x72D7, 0xB9B8, 0x57A2, 0xB9B9, 0x6784, - 0xB9BA, 0x8D2D, 0xB9BB, 0x591F, 0xB9BC, 0x8F9C, 0xB9BD, 0x83C7, - 0xB9BE, 0x5495, 0xB9BF, 0x7B8D, 0xB9C0, 0x4F30, 0xB9C1, 0x6CBD, - 0xB9C2, 0x5B64, 0xB9C3, 0x59D1, 0xB9C4, 0x9F13, 0xB9C5, 0x53E4, - 0xB9C6, 0x86CA, 0xB9C7, 0x9AA8, 0xB9C8, 0x8C37, 0xB9C9, 0x80A1, - 0xB9CA, 0x6545, 0xB9CB, 0x987E, 0xB9CC, 0x56FA, 0xB9CD, 0x96C7, - 0xB9CE, 0x522E, 0xB9CF, 0x74DC, 0xB9D0, 0x5250, 0xB9D1, 0x5BE1, - 0xB9D2, 0x6302, 0xB9D3, 0x8902, 0xB9D4, 0x4E56, 0xB9D5, 0x62D0, - 0xB9D6, 0x602A, 0xB9D7, 0x68FA, 0xB9D8, 0x5173, 0xB9D9, 0x5B98, - 0xB9DA, 0x51A0, 0xB9DB, 0x89C2, 0xB9DC, 0x7BA1, 0xB9DD, 0x9986, - 0xB9DE, 0x7F50, 0xB9DF, 0x60EF, 0xB9E0, 0x704C, 0xB9E1, 0x8D2F, - 0xB9E2, 0x5149, 0xB9E3, 0x5E7F, 0xB9E4, 0x901B, 0xB9E5, 0x7470, - 0xB9E6, 0x89C4, 0xB9E7, 0x572D, 0xB9E8, 0x7845, 0xB9E9, 0x5F52, - 0xB9EA, 0x9F9F, 0xB9EB, 0x95FA, 0xB9EC, 0x8F68, 0xB9ED, 0x9B3C, - 0xB9EE, 0x8BE1, 0xB9EF, 0x7678, 0xB9F0, 0x6842, 0xB9F1, 0x67DC, - 0xB9F2, 0x8DEA, 0xB9F3, 0x8D35, 0xB9F4, 0x523D, 0xB9F5, 0x8F8A, - 0xB9F6, 0x6EDA, 0xB9F7, 0x68CD, 0xB9F8, 0x9505, 0xB9F9, 0x90ED, - 0xB9FA, 0x56FD, 0xB9FB, 0x679C, 0xB9FC, 0x88F9, 0xB9FD, 0x8FC7, - 0xB9FE, 0x54C8, 0xBA40, 0x7BC5, 0xBA41, 0x7BC8, 0xBA42, 0x7BC9, - 0xBA43, 0x7BCA, 0xBA44, 0x7BCB, 0xBA45, 0x7BCD, 0xBA46, 0x7BCE, - 0xBA47, 0x7BCF, 0xBA48, 0x7BD0, 0xBA49, 0x7BD2, 0xBA4A, 0x7BD4, - 0xBA4B, 0x7BD5, 0xBA4C, 0x7BD6, 0xBA4D, 0x7BD7, 0xBA4E, 0x7BD8, - 0xBA4F, 0x7BDB, 0xBA50, 0x7BDC, 0xBA51, 0x7BDE, 0xBA52, 0x7BDF, - 0xBA53, 0x7BE0, 0xBA54, 0x7BE2, 0xBA55, 0x7BE3, 0xBA56, 0x7BE4, - 0xBA57, 0x7BE7, 0xBA58, 0x7BE8, 0xBA59, 0x7BE9, 0xBA5A, 0x7BEB, - 0xBA5B, 0x7BEC, 0xBA5C, 0x7BED, 0xBA5D, 0x7BEF, 0xBA5E, 0x7BF0, - 0xBA5F, 0x7BF2, 0xBA60, 0x7BF3, 0xBA61, 0x7BF4, 0xBA62, 0x7BF5, - 0xBA63, 0x7BF6, 0xBA64, 0x7BF8, 0xBA65, 0x7BF9, 0xBA66, 0x7BFA, - 0xBA67, 0x7BFB, 0xBA68, 0x7BFD, 0xBA69, 0x7BFF, 0xBA6A, 0x7C00, - 0xBA6B, 0x7C01, 0xBA6C, 0x7C02, 0xBA6D, 0x7C03, 0xBA6E, 0x7C04, - 0xBA6F, 0x7C05, 0xBA70, 0x7C06, 0xBA71, 0x7C08, 0xBA72, 0x7C09, - 0xBA73, 0x7C0A, 0xBA74, 0x7C0D, 0xBA75, 0x7C0E, 0xBA76, 0x7C10, - 0xBA77, 0x7C11, 0xBA78, 0x7C12, 0xBA79, 0x7C13, 0xBA7A, 0x7C14, - 0xBA7B, 0x7C15, 0xBA7C, 0x7C17, 0xBA7D, 0x7C18, 0xBA7E, 0x7C19, - 0xBA80, 0x7C1A, 0xBA81, 0x7C1B, 0xBA82, 0x7C1C, 0xBA83, 0x7C1D, - 0xBA84, 0x7C1E, 0xBA85, 0x7C20, 0xBA86, 0x7C21, 0xBA87, 0x7C22, - 0xBA88, 0x7C23, 0xBA89, 0x7C24, 0xBA8A, 0x7C25, 0xBA8B, 0x7C28, - 0xBA8C, 0x7C29, 0xBA8D, 0x7C2B, 0xBA8E, 0x7C2C, 0xBA8F, 0x7C2D, - 0xBA90, 0x7C2E, 0xBA91, 0x7C2F, 0xBA92, 0x7C30, 0xBA93, 0x7C31, - 0xBA94, 0x7C32, 0xBA95, 0x7C33, 0xBA96, 0x7C34, 0xBA97, 0x7C35, - 0xBA98, 0x7C36, 0xBA99, 0x7C37, 0xBA9A, 0x7C39, 0xBA9B, 0x7C3A, - 0xBA9C, 0x7C3B, 0xBA9D, 0x7C3C, 0xBA9E, 0x7C3D, 0xBA9F, 0x7C3E, - 0xBAA0, 0x7C42, 0xBAA1, 0x9AB8, 0xBAA2, 0x5B69, 0xBAA3, 0x6D77, - 0xBAA4, 0x6C26, 0xBAA5, 0x4EA5, 0xBAA6, 0x5BB3, 0xBAA7, 0x9A87, - 0xBAA8, 0x9163, 0xBAA9, 0x61A8, 0xBAAA, 0x90AF, 0xBAAB, 0x97E9, - 0xBAAC, 0x542B, 0xBAAD, 0x6DB5, 0xBAAE, 0x5BD2, 0xBAAF, 0x51FD, - 0xBAB0, 0x558A, 0xBAB1, 0x7F55, 0xBAB2, 0x7FF0, 0xBAB3, 0x64BC, - 0xBAB4, 0x634D, 0xBAB5, 0x65F1, 0xBAB6, 0x61BE, 0xBAB7, 0x608D, - 0xBAB8, 0x710A, 0xBAB9, 0x6C57, 0xBABA, 0x6C49, 0xBABB, 0x592F, - 0xBABC, 0x676D, 0xBABD, 0x822A, 0xBABE, 0x58D5, 0xBABF, 0x568E, - 0xBAC0, 0x8C6A, 0xBAC1, 0x6BEB, 0xBAC2, 0x90DD, 0xBAC3, 0x597D, - 0xBAC4, 0x8017, 0xBAC5, 0x53F7, 0xBAC6, 0x6D69, 0xBAC7, 0x5475, - 0xBAC8, 0x559D, 0xBAC9, 0x8377, 0xBACA, 0x83CF, 0xBACB, 0x6838, - 0xBACC, 0x79BE, 0xBACD, 0x548C, 0xBACE, 0x4F55, 0xBACF, 0x5408, - 0xBAD0, 0x76D2, 0xBAD1, 0x8C89, 0xBAD2, 0x9602, 0xBAD3, 0x6CB3, - 0xBAD4, 0x6DB8, 0xBAD5, 0x8D6B, 0xBAD6, 0x8910, 0xBAD7, 0x9E64, - 0xBAD8, 0x8D3A, 0xBAD9, 0x563F, 0xBADA, 0x9ED1, 0xBADB, 0x75D5, - 0xBADC, 0x5F88, 0xBADD, 0x72E0, 0xBADE, 0x6068, 0xBADF, 0x54FC, - 0xBAE0, 0x4EA8, 0xBAE1, 0x6A2A, 0xBAE2, 0x8861, 0xBAE3, 0x6052, - 0xBAE4, 0x8F70, 0xBAE5, 0x54C4, 0xBAE6, 0x70D8, 0xBAE7, 0x8679, - 0xBAE8, 0x9E3F, 0xBAE9, 0x6D2A, 0xBAEA, 0x5B8F, 0xBAEB, 0x5F18, - 0xBAEC, 0x7EA2, 0xBAED, 0x5589, 0xBAEE, 0x4FAF, 0xBAEF, 0x7334, - 0xBAF0, 0x543C, 0xBAF1, 0x539A, 0xBAF2, 0x5019, 0xBAF3, 0x540E, - 0xBAF4, 0x547C, 0xBAF5, 0x4E4E, 0xBAF6, 0x5FFD, 0xBAF7, 0x745A, - 0xBAF8, 0x58F6, 0xBAF9, 0x846B, 0xBAFA, 0x80E1, 0xBAFB, 0x8774, - 0xBAFC, 0x72D0, 0xBAFD, 0x7CCA, 0xBAFE, 0x6E56, 0xBB40, 0x7C43, - 0xBB41, 0x7C44, 0xBB42, 0x7C45, 0xBB43, 0x7C46, 0xBB44, 0x7C47, - 0xBB45, 0x7C48, 0xBB46, 0x7C49, 0xBB47, 0x7C4A, 0xBB48, 0x7C4B, - 0xBB49, 0x7C4C, 0xBB4A, 0x7C4E, 0xBB4B, 0x7C4F, 0xBB4C, 0x7C50, - 0xBB4D, 0x7C51, 0xBB4E, 0x7C52, 0xBB4F, 0x7C53, 0xBB50, 0x7C54, - 0xBB51, 0x7C55, 0xBB52, 0x7C56, 0xBB53, 0x7C57, 0xBB54, 0x7C58, - 0xBB55, 0x7C59, 0xBB56, 0x7C5A, 0xBB57, 0x7C5B, 0xBB58, 0x7C5C, - 0xBB59, 0x7C5D, 0xBB5A, 0x7C5E, 0xBB5B, 0x7C5F, 0xBB5C, 0x7C60, - 0xBB5D, 0x7C61, 0xBB5E, 0x7C62, 0xBB5F, 0x7C63, 0xBB60, 0x7C64, - 0xBB61, 0x7C65, 0xBB62, 0x7C66, 0xBB63, 0x7C67, 0xBB64, 0x7C68, - 0xBB65, 0x7C69, 0xBB66, 0x7C6A, 0xBB67, 0x7C6B, 0xBB68, 0x7C6C, - 0xBB69, 0x7C6D, 0xBB6A, 0x7C6E, 0xBB6B, 0x7C6F, 0xBB6C, 0x7C70, - 0xBB6D, 0x7C71, 0xBB6E, 0x7C72, 0xBB6F, 0x7C75, 0xBB70, 0x7C76, - 0xBB71, 0x7C77, 0xBB72, 0x7C78, 0xBB73, 0x7C79, 0xBB74, 0x7C7A, - 0xBB75, 0x7C7E, 0xBB76, 0x7C7F, 0xBB77, 0x7C80, 0xBB78, 0x7C81, - 0xBB79, 0x7C82, 0xBB7A, 0x7C83, 0xBB7B, 0x7C84, 0xBB7C, 0x7C85, - 0xBB7D, 0x7C86, 0xBB7E, 0x7C87, 0xBB80, 0x7C88, 0xBB81, 0x7C8A, - 0xBB82, 0x7C8B, 0xBB83, 0x7C8C, 0xBB84, 0x7C8D, 0xBB85, 0x7C8E, - 0xBB86, 0x7C8F, 0xBB87, 0x7C90, 0xBB88, 0x7C93, 0xBB89, 0x7C94, - 0xBB8A, 0x7C96, 0xBB8B, 0x7C99, 0xBB8C, 0x7C9A, 0xBB8D, 0x7C9B, - 0xBB8E, 0x7CA0, 0xBB8F, 0x7CA1, 0xBB90, 0x7CA3, 0xBB91, 0x7CA6, - 0xBB92, 0x7CA7, 0xBB93, 0x7CA8, 0xBB94, 0x7CA9, 0xBB95, 0x7CAB, - 0xBB96, 0x7CAC, 0xBB97, 0x7CAD, 0xBB98, 0x7CAF, 0xBB99, 0x7CB0, - 0xBB9A, 0x7CB4, 0xBB9B, 0x7CB5, 0xBB9C, 0x7CB6, 0xBB9D, 0x7CB7, - 0xBB9E, 0x7CB8, 0xBB9F, 0x7CBA, 0xBBA0, 0x7CBB, 0xBBA1, 0x5F27, - 0xBBA2, 0x864E, 0xBBA3, 0x552C, 0xBBA4, 0x62A4, 0xBBA5, 0x4E92, - 0xBBA6, 0x6CAA, 0xBBA7, 0x6237, 0xBBA8, 0x82B1, 0xBBA9, 0x54D7, - 0xBBAA, 0x534E, 0xBBAB, 0x733E, 0xBBAC, 0x6ED1, 0xBBAD, 0x753B, - 0xBBAE, 0x5212, 0xBBAF, 0x5316, 0xBBB0, 0x8BDD, 0xBBB1, 0x69D0, - 0xBBB2, 0x5F8A, 0xBBB3, 0x6000, 0xBBB4, 0x6DEE, 0xBBB5, 0x574F, - 0xBBB6, 0x6B22, 0xBBB7, 0x73AF, 0xBBB8, 0x6853, 0xBBB9, 0x8FD8, - 0xBBBA, 0x7F13, 0xBBBB, 0x6362, 0xBBBC, 0x60A3, 0xBBBD, 0x5524, - 0xBBBE, 0x75EA, 0xBBBF, 0x8C62, 0xBBC0, 0x7115, 0xBBC1, 0x6DA3, - 0xBBC2, 0x5BA6, 0xBBC3, 0x5E7B, 0xBBC4, 0x8352, 0xBBC5, 0x614C, - 0xBBC6, 0x9EC4, 0xBBC7, 0x78FA, 0xBBC8, 0x8757, 0xBBC9, 0x7C27, - 0xBBCA, 0x7687, 0xBBCB, 0x51F0, 0xBBCC, 0x60F6, 0xBBCD, 0x714C, - 0xBBCE, 0x6643, 0xBBCF, 0x5E4C, 0xBBD0, 0x604D, 0xBBD1, 0x8C0E, - 0xBBD2, 0x7070, 0xBBD3, 0x6325, 0xBBD4, 0x8F89, 0xBBD5, 0x5FBD, - 0xBBD6, 0x6062, 0xBBD7, 0x86D4, 0xBBD8, 0x56DE, 0xBBD9, 0x6BC1, - 0xBBDA, 0x6094, 0xBBDB, 0x6167, 0xBBDC, 0x5349, 0xBBDD, 0x60E0, - 0xBBDE, 0x6666, 0xBBDF, 0x8D3F, 0xBBE0, 0x79FD, 0xBBE1, 0x4F1A, - 0xBBE2, 0x70E9, 0xBBE3, 0x6C47, 0xBBE4, 0x8BB3, 0xBBE5, 0x8BF2, - 0xBBE6, 0x7ED8, 0xBBE7, 0x8364, 0xBBE8, 0x660F, 0xBBE9, 0x5A5A, - 0xBBEA, 0x9B42, 0xBBEB, 0x6D51, 0xBBEC, 0x6DF7, 0xBBED, 0x8C41, - 0xBBEE, 0x6D3B, 0xBBEF, 0x4F19, 0xBBF0, 0x706B, 0xBBF1, 0x83B7, - 0xBBF2, 0x6216, 0xBBF3, 0x60D1, 0xBBF4, 0x970D, 0xBBF5, 0x8D27, - 0xBBF6, 0x7978, 0xBBF7, 0x51FB, 0xBBF8, 0x573E, 0xBBF9, 0x57FA, - 0xBBFA, 0x673A, 0xBBFB, 0x7578, 0xBBFC, 0x7A3D, 0xBBFD, 0x79EF, - 0xBBFE, 0x7B95, 0xBC40, 0x7CBF, 0xBC41, 0x7CC0, 0xBC42, 0x7CC2, - 0xBC43, 0x7CC3, 0xBC44, 0x7CC4, 0xBC45, 0x7CC6, 0xBC46, 0x7CC9, - 0xBC47, 0x7CCB, 0xBC48, 0x7CCE, 0xBC49, 0x7CCF, 0xBC4A, 0x7CD0, - 0xBC4B, 0x7CD1, 0xBC4C, 0x7CD2, 0xBC4D, 0x7CD3, 0xBC4E, 0x7CD4, - 0xBC4F, 0x7CD8, 0xBC50, 0x7CDA, 0xBC51, 0x7CDB, 0xBC52, 0x7CDD, - 0xBC53, 0x7CDE, 0xBC54, 0x7CE1, 0xBC55, 0x7CE2, 0xBC56, 0x7CE3, - 0xBC57, 0x7CE4, 0xBC58, 0x7CE5, 0xBC59, 0x7CE6, 0xBC5A, 0x7CE7, - 0xBC5B, 0x7CE9, 0xBC5C, 0x7CEA, 0xBC5D, 0x7CEB, 0xBC5E, 0x7CEC, - 0xBC5F, 0x7CED, 0xBC60, 0x7CEE, 0xBC61, 0x7CF0, 0xBC62, 0x7CF1, - 0xBC63, 0x7CF2, 0xBC64, 0x7CF3, 0xBC65, 0x7CF4, 0xBC66, 0x7CF5, - 0xBC67, 0x7CF6, 0xBC68, 0x7CF7, 0xBC69, 0x7CF9, 0xBC6A, 0x7CFA, - 0xBC6B, 0x7CFC, 0xBC6C, 0x7CFD, 0xBC6D, 0x7CFE, 0xBC6E, 0x7CFF, - 0xBC6F, 0x7D00, 0xBC70, 0x7D01, 0xBC71, 0x7D02, 0xBC72, 0x7D03, - 0xBC73, 0x7D04, 0xBC74, 0x7D05, 0xBC75, 0x7D06, 0xBC76, 0x7D07, - 0xBC77, 0x7D08, 0xBC78, 0x7D09, 0xBC79, 0x7D0B, 0xBC7A, 0x7D0C, - 0xBC7B, 0x7D0D, 0xBC7C, 0x7D0E, 0xBC7D, 0x7D0F, 0xBC7E, 0x7D10, - 0xBC80, 0x7D11, 0xBC81, 0x7D12, 0xBC82, 0x7D13, 0xBC83, 0x7D14, - 0xBC84, 0x7D15, 0xBC85, 0x7D16, 0xBC86, 0x7D17, 0xBC87, 0x7D18, - 0xBC88, 0x7D19, 0xBC89, 0x7D1A, 0xBC8A, 0x7D1B, 0xBC8B, 0x7D1C, - 0xBC8C, 0x7D1D, 0xBC8D, 0x7D1E, 0xBC8E, 0x7D1F, 0xBC8F, 0x7D21, - 0xBC90, 0x7D23, 0xBC91, 0x7D24, 0xBC92, 0x7D25, 0xBC93, 0x7D26, - 0xBC94, 0x7D28, 0xBC95, 0x7D29, 0xBC96, 0x7D2A, 0xBC97, 0x7D2C, - 0xBC98, 0x7D2D, 0xBC99, 0x7D2E, 0xBC9A, 0x7D30, 0xBC9B, 0x7D31, - 0xBC9C, 0x7D32, 0xBC9D, 0x7D33, 0xBC9E, 0x7D34, 0xBC9F, 0x7D35, - 0xBCA0, 0x7D36, 0xBCA1, 0x808C, 0xBCA2, 0x9965, 0xBCA3, 0x8FF9, - 0xBCA4, 0x6FC0, 0xBCA5, 0x8BA5, 0xBCA6, 0x9E21, 0xBCA7, 0x59EC, - 0xBCA8, 0x7EE9, 0xBCA9, 0x7F09, 0xBCAA, 0x5409, 0xBCAB, 0x6781, - 0xBCAC, 0x68D8, 0xBCAD, 0x8F91, 0xBCAE, 0x7C4D, 0xBCAF, 0x96C6, - 0xBCB0, 0x53CA, 0xBCB1, 0x6025, 0xBCB2, 0x75BE, 0xBCB3, 0x6C72, - 0xBCB4, 0x5373, 0xBCB5, 0x5AC9, 0xBCB6, 0x7EA7, 0xBCB7, 0x6324, - 0xBCB8, 0x51E0, 0xBCB9, 0x810A, 0xBCBA, 0x5DF1, 0xBCBB, 0x84DF, - 0xBCBC, 0x6280, 0xBCBD, 0x5180, 0xBCBE, 0x5B63, 0xBCBF, 0x4F0E, - 0xBCC0, 0x796D, 0xBCC1, 0x5242, 0xBCC2, 0x60B8, 0xBCC3, 0x6D4E, - 0xBCC4, 0x5BC4, 0xBCC5, 0x5BC2, 0xBCC6, 0x8BA1, 0xBCC7, 0x8BB0, - 0xBCC8, 0x65E2, 0xBCC9, 0x5FCC, 0xBCCA, 0x9645, 0xBCCB, 0x5993, - 0xBCCC, 0x7EE7, 0xBCCD, 0x7EAA, 0xBCCE, 0x5609, 0xBCCF, 0x67B7, - 0xBCD0, 0x5939, 0xBCD1, 0x4F73, 0xBCD2, 0x5BB6, 0xBCD3, 0x52A0, - 0xBCD4, 0x835A, 0xBCD5, 0x988A, 0xBCD6, 0x8D3E, 0xBCD7, 0x7532, - 0xBCD8, 0x94BE, 0xBCD9, 0x5047, 0xBCDA, 0x7A3C, 0xBCDB, 0x4EF7, - 0xBCDC, 0x67B6, 0xBCDD, 0x9A7E, 0xBCDE, 0x5AC1, 0xBCDF, 0x6B7C, - 0xBCE0, 0x76D1, 0xBCE1, 0x575A, 0xBCE2, 0x5C16, 0xBCE3, 0x7B3A, - 0xBCE4, 0x95F4, 0xBCE5, 0x714E, 0xBCE6, 0x517C, 0xBCE7, 0x80A9, - 0xBCE8, 0x8270, 0xBCE9, 0x5978, 0xBCEA, 0x7F04, 0xBCEB, 0x8327, - 0xBCEC, 0x68C0, 0xBCED, 0x67EC, 0xBCEE, 0x78B1, 0xBCEF, 0x7877, - 0xBCF0, 0x62E3, 0xBCF1, 0x6361, 0xBCF2, 0x7B80, 0xBCF3, 0x4FED, - 0xBCF4, 0x526A, 0xBCF5, 0x51CF, 0xBCF6, 0x8350, 0xBCF7, 0x69DB, - 0xBCF8, 0x9274, 0xBCF9, 0x8DF5, 0xBCFA, 0x8D31, 0xBCFB, 0x89C1, - 0xBCFC, 0x952E, 0xBCFD, 0x7BAD, 0xBCFE, 0x4EF6, 0xBD40, 0x7D37, - 0xBD41, 0x7D38, 0xBD42, 0x7D39, 0xBD43, 0x7D3A, 0xBD44, 0x7D3B, - 0xBD45, 0x7D3C, 0xBD46, 0x7D3D, 0xBD47, 0x7D3E, 0xBD48, 0x7D3F, - 0xBD49, 0x7D40, 0xBD4A, 0x7D41, 0xBD4B, 0x7D42, 0xBD4C, 0x7D43, - 0xBD4D, 0x7D44, 0xBD4E, 0x7D45, 0xBD4F, 0x7D46, 0xBD50, 0x7D47, - 0xBD51, 0x7D48, 0xBD52, 0x7D49, 0xBD53, 0x7D4A, 0xBD54, 0x7D4B, - 0xBD55, 0x7D4C, 0xBD56, 0x7D4D, 0xBD57, 0x7D4E, 0xBD58, 0x7D4F, - 0xBD59, 0x7D50, 0xBD5A, 0x7D51, 0xBD5B, 0x7D52, 0xBD5C, 0x7D53, - 0xBD5D, 0x7D54, 0xBD5E, 0x7D55, 0xBD5F, 0x7D56, 0xBD60, 0x7D57, - 0xBD61, 0x7D58, 0xBD62, 0x7D59, 0xBD63, 0x7D5A, 0xBD64, 0x7D5B, - 0xBD65, 0x7D5C, 0xBD66, 0x7D5D, 0xBD67, 0x7D5E, 0xBD68, 0x7D5F, - 0xBD69, 0x7D60, 0xBD6A, 0x7D61, 0xBD6B, 0x7D62, 0xBD6C, 0x7D63, - 0xBD6D, 0x7D64, 0xBD6E, 0x7D65, 0xBD6F, 0x7D66, 0xBD70, 0x7D67, - 0xBD71, 0x7D68, 0xBD72, 0x7D69, 0xBD73, 0x7D6A, 0xBD74, 0x7D6B, - 0xBD75, 0x7D6C, 0xBD76, 0x7D6D, 0xBD77, 0x7D6F, 0xBD78, 0x7D70, - 0xBD79, 0x7D71, 0xBD7A, 0x7D72, 0xBD7B, 0x7D73, 0xBD7C, 0x7D74, - 0xBD7D, 0x7D75, 0xBD7E, 0x7D76, 0xBD80, 0x7D78, 0xBD81, 0x7D79, - 0xBD82, 0x7D7A, 0xBD83, 0x7D7B, 0xBD84, 0x7D7C, 0xBD85, 0x7D7D, - 0xBD86, 0x7D7E, 0xBD87, 0x7D7F, 0xBD88, 0x7D80, 0xBD89, 0x7D81, - 0xBD8A, 0x7D82, 0xBD8B, 0x7D83, 0xBD8C, 0x7D84, 0xBD8D, 0x7D85, - 0xBD8E, 0x7D86, 0xBD8F, 0x7D87, 0xBD90, 0x7D88, 0xBD91, 0x7D89, - 0xBD92, 0x7D8A, 0xBD93, 0x7D8B, 0xBD94, 0x7D8C, 0xBD95, 0x7D8D, - 0xBD96, 0x7D8E, 0xBD97, 0x7D8F, 0xBD98, 0x7D90, 0xBD99, 0x7D91, - 0xBD9A, 0x7D92, 0xBD9B, 0x7D93, 0xBD9C, 0x7D94, 0xBD9D, 0x7D95, - 0xBD9E, 0x7D96, 0xBD9F, 0x7D97, 0xBDA0, 0x7D98, 0xBDA1, 0x5065, - 0xBDA2, 0x8230, 0xBDA3, 0x5251, 0xBDA4, 0x996F, 0xBDA5, 0x6E10, - 0xBDA6, 0x6E85, 0xBDA7, 0x6DA7, 0xBDA8, 0x5EFA, 0xBDA9, 0x50F5, - 0xBDAA, 0x59DC, 0xBDAB, 0x5C06, 0xBDAC, 0x6D46, 0xBDAD, 0x6C5F, - 0xBDAE, 0x7586, 0xBDAF, 0x848B, 0xBDB0, 0x6868, 0xBDB1, 0x5956, - 0xBDB2, 0x8BB2, 0xBDB3, 0x5320, 0xBDB4, 0x9171, 0xBDB5, 0x964D, - 0xBDB6, 0x8549, 0xBDB7, 0x6912, 0xBDB8, 0x7901, 0xBDB9, 0x7126, - 0xBDBA, 0x80F6, 0xBDBB, 0x4EA4, 0xBDBC, 0x90CA, 0xBDBD, 0x6D47, - 0xBDBE, 0x9A84, 0xBDBF, 0x5A07, 0xBDC0, 0x56BC, 0xBDC1, 0x6405, - 0xBDC2, 0x94F0, 0xBDC3, 0x77EB, 0xBDC4, 0x4FA5, 0xBDC5, 0x811A, - 0xBDC6, 0x72E1, 0xBDC7, 0x89D2, 0xBDC8, 0x997A, 0xBDC9, 0x7F34, - 0xBDCA, 0x7EDE, 0xBDCB, 0x527F, 0xBDCC, 0x6559, 0xBDCD, 0x9175, - 0xBDCE, 0x8F7F, 0xBDCF, 0x8F83, 0xBDD0, 0x53EB, 0xBDD1, 0x7A96, - 0xBDD2, 0x63ED, 0xBDD3, 0x63A5, 0xBDD4, 0x7686, 0xBDD5, 0x79F8, - 0xBDD6, 0x8857, 0xBDD7, 0x9636, 0xBDD8, 0x622A, 0xBDD9, 0x52AB, - 0xBDDA, 0x8282, 0xBDDB, 0x6854, 0xBDDC, 0x6770, 0xBDDD, 0x6377, - 0xBDDE, 0x776B, 0xBDDF, 0x7AED, 0xBDE0, 0x6D01, 0xBDE1, 0x7ED3, - 0xBDE2, 0x89E3, 0xBDE3, 0x59D0, 0xBDE4, 0x6212, 0xBDE5, 0x85C9, - 0xBDE6, 0x82A5, 0xBDE7, 0x754C, 0xBDE8, 0x501F, 0xBDE9, 0x4ECB, - 0xBDEA, 0x75A5, 0xBDEB, 0x8BEB, 0xBDEC, 0x5C4A, 0xBDED, 0x5DFE, - 0xBDEE, 0x7B4B, 0xBDEF, 0x65A4, 0xBDF0, 0x91D1, 0xBDF1, 0x4ECA, - 0xBDF2, 0x6D25, 0xBDF3, 0x895F, 0xBDF4, 0x7D27, 0xBDF5, 0x9526, - 0xBDF6, 0x4EC5, 0xBDF7, 0x8C28, 0xBDF8, 0x8FDB, 0xBDF9, 0x9773, - 0xBDFA, 0x664B, 0xBDFB, 0x7981, 0xBDFC, 0x8FD1, 0xBDFD, 0x70EC, - 0xBDFE, 0x6D78, 0xBE40, 0x7D99, 0xBE41, 0x7D9A, 0xBE42, 0x7D9B, - 0xBE43, 0x7D9C, 0xBE44, 0x7D9D, 0xBE45, 0x7D9E, 0xBE46, 0x7D9F, - 0xBE47, 0x7DA0, 0xBE48, 0x7DA1, 0xBE49, 0x7DA2, 0xBE4A, 0x7DA3, - 0xBE4B, 0x7DA4, 0xBE4C, 0x7DA5, 0xBE4D, 0x7DA7, 0xBE4E, 0x7DA8, - 0xBE4F, 0x7DA9, 0xBE50, 0x7DAA, 0xBE51, 0x7DAB, 0xBE52, 0x7DAC, - 0xBE53, 0x7DAD, 0xBE54, 0x7DAF, 0xBE55, 0x7DB0, 0xBE56, 0x7DB1, - 0xBE57, 0x7DB2, 0xBE58, 0x7DB3, 0xBE59, 0x7DB4, 0xBE5A, 0x7DB5, - 0xBE5B, 0x7DB6, 0xBE5C, 0x7DB7, 0xBE5D, 0x7DB8, 0xBE5E, 0x7DB9, - 0xBE5F, 0x7DBA, 0xBE60, 0x7DBB, 0xBE61, 0x7DBC, 0xBE62, 0x7DBD, - 0xBE63, 0x7DBE, 0xBE64, 0x7DBF, 0xBE65, 0x7DC0, 0xBE66, 0x7DC1, - 0xBE67, 0x7DC2, 0xBE68, 0x7DC3, 0xBE69, 0x7DC4, 0xBE6A, 0x7DC5, - 0xBE6B, 0x7DC6, 0xBE6C, 0x7DC7, 0xBE6D, 0x7DC8, 0xBE6E, 0x7DC9, - 0xBE6F, 0x7DCA, 0xBE70, 0x7DCB, 0xBE71, 0x7DCC, 0xBE72, 0x7DCD, - 0xBE73, 0x7DCE, 0xBE74, 0x7DCF, 0xBE75, 0x7DD0, 0xBE76, 0x7DD1, - 0xBE77, 0x7DD2, 0xBE78, 0x7DD3, 0xBE79, 0x7DD4, 0xBE7A, 0x7DD5, - 0xBE7B, 0x7DD6, 0xBE7C, 0x7DD7, 0xBE7D, 0x7DD8, 0xBE7E, 0x7DD9, - 0xBE80, 0x7DDA, 0xBE81, 0x7DDB, 0xBE82, 0x7DDC, 0xBE83, 0x7DDD, - 0xBE84, 0x7DDE, 0xBE85, 0x7DDF, 0xBE86, 0x7DE0, 0xBE87, 0x7DE1, - 0xBE88, 0x7DE2, 0xBE89, 0x7DE3, 0xBE8A, 0x7DE4, 0xBE8B, 0x7DE5, - 0xBE8C, 0x7DE6, 0xBE8D, 0x7DE7, 0xBE8E, 0x7DE8, 0xBE8F, 0x7DE9, - 0xBE90, 0x7DEA, 0xBE91, 0x7DEB, 0xBE92, 0x7DEC, 0xBE93, 0x7DED, - 0xBE94, 0x7DEE, 0xBE95, 0x7DEF, 0xBE96, 0x7DF0, 0xBE97, 0x7DF1, - 0xBE98, 0x7DF2, 0xBE99, 0x7DF3, 0xBE9A, 0x7DF4, 0xBE9B, 0x7DF5, - 0xBE9C, 0x7DF6, 0xBE9D, 0x7DF7, 0xBE9E, 0x7DF8, 0xBE9F, 0x7DF9, - 0xBEA0, 0x7DFA, 0xBEA1, 0x5C3D, 0xBEA2, 0x52B2, 0xBEA3, 0x8346, - 0xBEA4, 0x5162, 0xBEA5, 0x830E, 0xBEA6, 0x775B, 0xBEA7, 0x6676, - 0xBEA8, 0x9CB8, 0xBEA9, 0x4EAC, 0xBEAA, 0x60CA, 0xBEAB, 0x7CBE, - 0xBEAC, 0x7CB3, 0xBEAD, 0x7ECF, 0xBEAE, 0x4E95, 0xBEAF, 0x8B66, - 0xBEB0, 0x666F, 0xBEB1, 0x9888, 0xBEB2, 0x9759, 0xBEB3, 0x5883, - 0xBEB4, 0x656C, 0xBEB5, 0x955C, 0xBEB6, 0x5F84, 0xBEB7, 0x75C9, - 0xBEB8, 0x9756, 0xBEB9, 0x7ADF, 0xBEBA, 0x7ADE, 0xBEBB, 0x51C0, - 0xBEBC, 0x70AF, 0xBEBD, 0x7A98, 0xBEBE, 0x63EA, 0xBEBF, 0x7A76, - 0xBEC0, 0x7EA0, 0xBEC1, 0x7396, 0xBEC2, 0x97ED, 0xBEC3, 0x4E45, - 0xBEC4, 0x7078, 0xBEC5, 0x4E5D, 0xBEC6, 0x9152, 0xBEC7, 0x53A9, - 0xBEC8, 0x6551, 0xBEC9, 0x65E7, 0xBECA, 0x81FC, 0xBECB, 0x8205, - 0xBECC, 0x548E, 0xBECD, 0x5C31, 0xBECE, 0x759A, 0xBECF, 0x97A0, - 0xBED0, 0x62D8, 0xBED1, 0x72D9, 0xBED2, 0x75BD, 0xBED3, 0x5C45, - 0xBED4, 0x9A79, 0xBED5, 0x83CA, 0xBED6, 0x5C40, 0xBED7, 0x5480, - 0xBED8, 0x77E9, 0xBED9, 0x4E3E, 0xBEDA, 0x6CAE, 0xBEDB, 0x805A, - 0xBEDC, 0x62D2, 0xBEDD, 0x636E, 0xBEDE, 0x5DE8, 0xBEDF, 0x5177, - 0xBEE0, 0x8DDD, 0xBEE1, 0x8E1E, 0xBEE2, 0x952F, 0xBEE3, 0x4FF1, - 0xBEE4, 0x53E5, 0xBEE5, 0x60E7, 0xBEE6, 0x70AC, 0xBEE7, 0x5267, - 0xBEE8, 0x6350, 0xBEE9, 0x9E43, 0xBEEA, 0x5A1F, 0xBEEB, 0x5026, - 0xBEEC, 0x7737, 0xBEED, 0x5377, 0xBEEE, 0x7EE2, 0xBEEF, 0x6485, - 0xBEF0, 0x652B, 0xBEF1, 0x6289, 0xBEF2, 0x6398, 0xBEF3, 0x5014, - 0xBEF4, 0x7235, 0xBEF5, 0x89C9, 0xBEF6, 0x51B3, 0xBEF7, 0x8BC0, - 0xBEF8, 0x7EDD, 0xBEF9, 0x5747, 0xBEFA, 0x83CC, 0xBEFB, 0x94A7, - 0xBEFC, 0x519B, 0xBEFD, 0x541B, 0xBEFE, 0x5CFB, 0xBF40, 0x7DFB, - 0xBF41, 0x7DFC, 0xBF42, 0x7DFD, 0xBF43, 0x7DFE, 0xBF44, 0x7DFF, - 0xBF45, 0x7E00, 0xBF46, 0x7E01, 0xBF47, 0x7E02, 0xBF48, 0x7E03, - 0xBF49, 0x7E04, 0xBF4A, 0x7E05, 0xBF4B, 0x7E06, 0xBF4C, 0x7E07, - 0xBF4D, 0x7E08, 0xBF4E, 0x7E09, 0xBF4F, 0x7E0A, 0xBF50, 0x7E0B, - 0xBF51, 0x7E0C, 0xBF52, 0x7E0D, 0xBF53, 0x7E0E, 0xBF54, 0x7E0F, - 0xBF55, 0x7E10, 0xBF56, 0x7E11, 0xBF57, 0x7E12, 0xBF58, 0x7E13, - 0xBF59, 0x7E14, 0xBF5A, 0x7E15, 0xBF5B, 0x7E16, 0xBF5C, 0x7E17, - 0xBF5D, 0x7E18, 0xBF5E, 0x7E19, 0xBF5F, 0x7E1A, 0xBF60, 0x7E1B, - 0xBF61, 0x7E1C, 0xBF62, 0x7E1D, 0xBF63, 0x7E1E, 0xBF64, 0x7E1F, - 0xBF65, 0x7E20, 0xBF66, 0x7E21, 0xBF67, 0x7E22, 0xBF68, 0x7E23, - 0xBF69, 0x7E24, 0xBF6A, 0x7E25, 0xBF6B, 0x7E26, 0xBF6C, 0x7E27, - 0xBF6D, 0x7E28, 0xBF6E, 0x7E29, 0xBF6F, 0x7E2A, 0xBF70, 0x7E2B, - 0xBF71, 0x7E2C, 0xBF72, 0x7E2D, 0xBF73, 0x7E2E, 0xBF74, 0x7E2F, - 0xBF75, 0x7E30, 0xBF76, 0x7E31, 0xBF77, 0x7E32, 0xBF78, 0x7E33, - 0xBF79, 0x7E34, 0xBF7A, 0x7E35, 0xBF7B, 0x7E36, 0xBF7C, 0x7E37, - 0xBF7D, 0x7E38, 0xBF7E, 0x7E39, 0xBF80, 0x7E3A, 0xBF81, 0x7E3C, - 0xBF82, 0x7E3D, 0xBF83, 0x7E3E, 0xBF84, 0x7E3F, 0xBF85, 0x7E40, - 0xBF86, 0x7E42, 0xBF87, 0x7E43, 0xBF88, 0x7E44, 0xBF89, 0x7E45, - 0xBF8A, 0x7E46, 0xBF8B, 0x7E48, 0xBF8C, 0x7E49, 0xBF8D, 0x7E4A, - 0xBF8E, 0x7E4B, 0xBF8F, 0x7E4C, 0xBF90, 0x7E4D, 0xBF91, 0x7E4E, - 0xBF92, 0x7E4F, 0xBF93, 0x7E50, 0xBF94, 0x7E51, 0xBF95, 0x7E52, - 0xBF96, 0x7E53, 0xBF97, 0x7E54, 0xBF98, 0x7E55, 0xBF99, 0x7E56, - 0xBF9A, 0x7E57, 0xBF9B, 0x7E58, 0xBF9C, 0x7E59, 0xBF9D, 0x7E5A, - 0xBF9E, 0x7E5B, 0xBF9F, 0x7E5C, 0xBFA0, 0x7E5D, 0xBFA1, 0x4FCA, - 0xBFA2, 0x7AE3, 0xBFA3, 0x6D5A, 0xBFA4, 0x90E1, 0xBFA5, 0x9A8F, - 0xBFA6, 0x5580, 0xBFA7, 0x5496, 0xBFA8, 0x5361, 0xBFA9, 0x54AF, - 0xBFAA, 0x5F00, 0xBFAB, 0x63E9, 0xBFAC, 0x6977, 0xBFAD, 0x51EF, - 0xBFAE, 0x6168, 0xBFAF, 0x520A, 0xBFB0, 0x582A, 0xBFB1, 0x52D8, - 0xBFB2, 0x574E, 0xBFB3, 0x780D, 0xBFB4, 0x770B, 0xBFB5, 0x5EB7, - 0xBFB6, 0x6177, 0xBFB7, 0x7CE0, 0xBFB8, 0x625B, 0xBFB9, 0x6297, - 0xBFBA, 0x4EA2, 0xBFBB, 0x7095, 0xBFBC, 0x8003, 0xBFBD, 0x62F7, - 0xBFBE, 0x70E4, 0xBFBF, 0x9760, 0xBFC0, 0x5777, 0xBFC1, 0x82DB, - 0xBFC2, 0x67EF, 0xBFC3, 0x68F5, 0xBFC4, 0x78D5, 0xBFC5, 0x9897, - 0xBFC6, 0x79D1, 0xBFC7, 0x58F3, 0xBFC8, 0x54B3, 0xBFC9, 0x53EF, - 0xBFCA, 0x6E34, 0xBFCB, 0x514B, 0xBFCC, 0x523B, 0xBFCD, 0x5BA2, - 0xBFCE, 0x8BFE, 0xBFCF, 0x80AF, 0xBFD0, 0x5543, 0xBFD1, 0x57A6, - 0xBFD2, 0x6073, 0xBFD3, 0x5751, 0xBFD4, 0x542D, 0xBFD5, 0x7A7A, - 0xBFD6, 0x6050, 0xBFD7, 0x5B54, 0xBFD8, 0x63A7, 0xBFD9, 0x62A0, - 0xBFDA, 0x53E3, 0xBFDB, 0x6263, 0xBFDC, 0x5BC7, 0xBFDD, 0x67AF, - 0xBFDE, 0x54ED, 0xBFDF, 0x7A9F, 0xBFE0, 0x82E6, 0xBFE1, 0x9177, - 0xBFE2, 0x5E93, 0xBFE3, 0x88E4, 0xBFE4, 0x5938, 0xBFE5, 0x57AE, - 0xBFE6, 0x630E, 0xBFE7, 0x8DE8, 0xBFE8, 0x80EF, 0xBFE9, 0x5757, - 0xBFEA, 0x7B77, 0xBFEB, 0x4FA9, 0xBFEC, 0x5FEB, 0xBFED, 0x5BBD, - 0xBFEE, 0x6B3E, 0xBFEF, 0x5321, 0xBFF0, 0x7B50, 0xBFF1, 0x72C2, - 0xBFF2, 0x6846, 0xBFF3, 0x77FF, 0xBFF4, 0x7736, 0xBFF5, 0x65F7, - 0xBFF6, 0x51B5, 0xBFF7, 0x4E8F, 0xBFF8, 0x76D4, 0xBFF9, 0x5CBF, - 0xBFFA, 0x7AA5, 0xBFFB, 0x8475, 0xBFFC, 0x594E, 0xBFFD, 0x9B41, - 0xBFFE, 0x5080, 0xC040, 0x7E5E, 0xC041, 0x7E5F, 0xC042, 0x7E60, - 0xC043, 0x7E61, 0xC044, 0x7E62, 0xC045, 0x7E63, 0xC046, 0x7E64, - 0xC047, 0x7E65, 0xC048, 0x7E66, 0xC049, 0x7E67, 0xC04A, 0x7E68, - 0xC04B, 0x7E69, 0xC04C, 0x7E6A, 0xC04D, 0x7E6B, 0xC04E, 0x7E6C, - 0xC04F, 0x7E6D, 0xC050, 0x7E6E, 0xC051, 0x7E6F, 0xC052, 0x7E70, - 0xC053, 0x7E71, 0xC054, 0x7E72, 0xC055, 0x7E73, 0xC056, 0x7E74, - 0xC057, 0x7E75, 0xC058, 0x7E76, 0xC059, 0x7E77, 0xC05A, 0x7E78, - 0xC05B, 0x7E79, 0xC05C, 0x7E7A, 0xC05D, 0x7E7B, 0xC05E, 0x7E7C, - 0xC05F, 0x7E7D, 0xC060, 0x7E7E, 0xC061, 0x7E7F, 0xC062, 0x7E80, - 0xC063, 0x7E81, 0xC064, 0x7E83, 0xC065, 0x7E84, 0xC066, 0x7E85, - 0xC067, 0x7E86, 0xC068, 0x7E87, 0xC069, 0x7E88, 0xC06A, 0x7E89, - 0xC06B, 0x7E8A, 0xC06C, 0x7E8B, 0xC06D, 0x7E8C, 0xC06E, 0x7E8D, - 0xC06F, 0x7E8E, 0xC070, 0x7E8F, 0xC071, 0x7E90, 0xC072, 0x7E91, - 0xC073, 0x7E92, 0xC074, 0x7E93, 0xC075, 0x7E94, 0xC076, 0x7E95, - 0xC077, 0x7E96, 0xC078, 0x7E97, 0xC079, 0x7E98, 0xC07A, 0x7E99, - 0xC07B, 0x7E9A, 0xC07C, 0x7E9C, 0xC07D, 0x7E9D, 0xC07E, 0x7E9E, - 0xC080, 0x7EAE, 0xC081, 0x7EB4, 0xC082, 0x7EBB, 0xC083, 0x7EBC, - 0xC084, 0x7ED6, 0xC085, 0x7EE4, 0xC086, 0x7EEC, 0xC087, 0x7EF9, - 0xC088, 0x7F0A, 0xC089, 0x7F10, 0xC08A, 0x7F1E, 0xC08B, 0x7F37, - 0xC08C, 0x7F39, 0xC08D, 0x7F3B, 0xC08E, 0x7F3C, 0xC08F, 0x7F3D, - 0xC090, 0x7F3E, 0xC091, 0x7F3F, 0xC092, 0x7F40, 0xC093, 0x7F41, - 0xC094, 0x7F43, 0xC095, 0x7F46, 0xC096, 0x7F47, 0xC097, 0x7F48, - 0xC098, 0x7F49, 0xC099, 0x7F4A, 0xC09A, 0x7F4B, 0xC09B, 0x7F4C, - 0xC09C, 0x7F4D, 0xC09D, 0x7F4E, 0xC09E, 0x7F4F, 0xC09F, 0x7F52, - 0xC0A0, 0x7F53, 0xC0A1, 0x9988, 0xC0A2, 0x6127, 0xC0A3, 0x6E83, - 0xC0A4, 0x5764, 0xC0A5, 0x6606, 0xC0A6, 0x6346, 0xC0A7, 0x56F0, - 0xC0A8, 0x62EC, 0xC0A9, 0x6269, 0xC0AA, 0x5ED3, 0xC0AB, 0x9614, - 0xC0AC, 0x5783, 0xC0AD, 0x62C9, 0xC0AE, 0x5587, 0xC0AF, 0x8721, - 0xC0B0, 0x814A, 0xC0B1, 0x8FA3, 0xC0B2, 0x5566, 0xC0B3, 0x83B1, - 0xC0B4, 0x6765, 0xC0B5, 0x8D56, 0xC0B6, 0x84DD, 0xC0B7, 0x5A6A, - 0xC0B8, 0x680F, 0xC0B9, 0x62E6, 0xC0BA, 0x7BEE, 0xC0BB, 0x9611, - 0xC0BC, 0x5170, 0xC0BD, 0x6F9C, 0xC0BE, 0x8C30, 0xC0BF, 0x63FD, - 0xC0C0, 0x89C8, 0xC0C1, 0x61D2, 0xC0C2, 0x7F06, 0xC0C3, 0x70C2, - 0xC0C4, 0x6EE5, 0xC0C5, 0x7405, 0xC0C6, 0x6994, 0xC0C7, 0x72FC, - 0xC0C8, 0x5ECA, 0xC0C9, 0x90CE, 0xC0CA, 0x6717, 0xC0CB, 0x6D6A, - 0xC0CC, 0x635E, 0xC0CD, 0x52B3, 0xC0CE, 0x7262, 0xC0CF, 0x8001, - 0xC0D0, 0x4F6C, 0xC0D1, 0x59E5, 0xC0D2, 0x916A, 0xC0D3, 0x70D9, - 0xC0D4, 0x6D9D, 0xC0D5, 0x52D2, 0xC0D6, 0x4E50, 0xC0D7, 0x96F7, - 0xC0D8, 0x956D, 0xC0D9, 0x857E, 0xC0DA, 0x78CA, 0xC0DB, 0x7D2F, - 0xC0DC, 0x5121, 0xC0DD, 0x5792, 0xC0DE, 0x64C2, 0xC0DF, 0x808B, - 0xC0E0, 0x7C7B, 0xC0E1, 0x6CEA, 0xC0E2, 0x68F1, 0xC0E3, 0x695E, - 0xC0E4, 0x51B7, 0xC0E5, 0x5398, 0xC0E6, 0x68A8, 0xC0E7, 0x7281, - 0xC0E8, 0x9ECE, 0xC0E9, 0x7BF1, 0xC0EA, 0x72F8, 0xC0EB, 0x79BB, - 0xC0EC, 0x6F13, 0xC0ED, 0x7406, 0xC0EE, 0x674E, 0xC0EF, 0x91CC, - 0xC0F0, 0x9CA4, 0xC0F1, 0x793C, 0xC0F2, 0x8389, 0xC0F3, 0x8354, - 0xC0F4, 0x540F, 0xC0F5, 0x6817, 0xC0F6, 0x4E3D, 0xC0F7, 0x5389, - 0xC0F8, 0x52B1, 0xC0F9, 0x783E, 0xC0FA, 0x5386, 0xC0FB, 0x5229, - 0xC0FC, 0x5088, 0xC0FD, 0x4F8B, 0xC0FE, 0x4FD0, 0xC140, 0x7F56, - 0xC141, 0x7F59, 0xC142, 0x7F5B, 0xC143, 0x7F5C, 0xC144, 0x7F5D, - 0xC145, 0x7F5E, 0xC146, 0x7F60, 0xC147, 0x7F63, 0xC148, 0x7F64, - 0xC149, 0x7F65, 0xC14A, 0x7F66, 0xC14B, 0x7F67, 0xC14C, 0x7F6B, - 0xC14D, 0x7F6C, 0xC14E, 0x7F6D, 0xC14F, 0x7F6F, 0xC150, 0x7F70, - 0xC151, 0x7F73, 0xC152, 0x7F75, 0xC153, 0x7F76, 0xC154, 0x7F77, - 0xC155, 0x7F78, 0xC156, 0x7F7A, 0xC157, 0x7F7B, 0xC158, 0x7F7C, - 0xC159, 0x7F7D, 0xC15A, 0x7F7F, 0xC15B, 0x7F80, 0xC15C, 0x7F82, - 0xC15D, 0x7F83, 0xC15E, 0x7F84, 0xC15F, 0x7F85, 0xC160, 0x7F86, - 0xC161, 0x7F87, 0xC162, 0x7F88, 0xC163, 0x7F89, 0xC164, 0x7F8B, - 0xC165, 0x7F8D, 0xC166, 0x7F8F, 0xC167, 0x7F90, 0xC168, 0x7F91, - 0xC169, 0x7F92, 0xC16A, 0x7F93, 0xC16B, 0x7F95, 0xC16C, 0x7F96, - 0xC16D, 0x7F97, 0xC16E, 0x7F98, 0xC16F, 0x7F99, 0xC170, 0x7F9B, - 0xC171, 0x7F9C, 0xC172, 0x7FA0, 0xC173, 0x7FA2, 0xC174, 0x7FA3, - 0xC175, 0x7FA5, 0xC176, 0x7FA6, 0xC177, 0x7FA8, 0xC178, 0x7FA9, - 0xC179, 0x7FAA, 0xC17A, 0x7FAB, 0xC17B, 0x7FAC, 0xC17C, 0x7FAD, - 0xC17D, 0x7FAE, 0xC17E, 0x7FB1, 0xC180, 0x7FB3, 0xC181, 0x7FB4, - 0xC182, 0x7FB5, 0xC183, 0x7FB6, 0xC184, 0x7FB7, 0xC185, 0x7FBA, - 0xC186, 0x7FBB, 0xC187, 0x7FBE, 0xC188, 0x7FC0, 0xC189, 0x7FC2, - 0xC18A, 0x7FC3, 0xC18B, 0x7FC4, 0xC18C, 0x7FC6, 0xC18D, 0x7FC7, - 0xC18E, 0x7FC8, 0xC18F, 0x7FC9, 0xC190, 0x7FCB, 0xC191, 0x7FCD, - 0xC192, 0x7FCF, 0xC193, 0x7FD0, 0xC194, 0x7FD1, 0xC195, 0x7FD2, - 0xC196, 0x7FD3, 0xC197, 0x7FD6, 0xC198, 0x7FD7, 0xC199, 0x7FD9, - 0xC19A, 0x7FDA, 0xC19B, 0x7FDB, 0xC19C, 0x7FDC, 0xC19D, 0x7FDD, - 0xC19E, 0x7FDE, 0xC19F, 0x7FE2, 0xC1A0, 0x7FE3, 0xC1A1, 0x75E2, - 0xC1A2, 0x7ACB, 0xC1A3, 0x7C92, 0xC1A4, 0x6CA5, 0xC1A5, 0x96B6, - 0xC1A6, 0x529B, 0xC1A7, 0x7483, 0xC1A8, 0x54E9, 0xC1A9, 0x4FE9, - 0xC1AA, 0x8054, 0xC1AB, 0x83B2, 0xC1AC, 0x8FDE, 0xC1AD, 0x9570, - 0xC1AE, 0x5EC9, 0xC1AF, 0x601C, 0xC1B0, 0x6D9F, 0xC1B1, 0x5E18, - 0xC1B2, 0x655B, 0xC1B3, 0x8138, 0xC1B4, 0x94FE, 0xC1B5, 0x604B, - 0xC1B6, 0x70BC, 0xC1B7, 0x7EC3, 0xC1B8, 0x7CAE, 0xC1B9, 0x51C9, - 0xC1BA, 0x6881, 0xC1BB, 0x7CB1, 0xC1BC, 0x826F, 0xC1BD, 0x4E24, - 0xC1BE, 0x8F86, 0xC1BF, 0x91CF, 0xC1C0, 0x667E, 0xC1C1, 0x4EAE, - 0xC1C2, 0x8C05, 0xC1C3, 0x64A9, 0xC1C4, 0x804A, 0xC1C5, 0x50DA, - 0xC1C6, 0x7597, 0xC1C7, 0x71CE, 0xC1C8, 0x5BE5, 0xC1C9, 0x8FBD, - 0xC1CA, 0x6F66, 0xC1CB, 0x4E86, 0xC1CC, 0x6482, 0xC1CD, 0x9563, - 0xC1CE, 0x5ED6, 0xC1CF, 0x6599, 0xC1D0, 0x5217, 0xC1D1, 0x88C2, - 0xC1D2, 0x70C8, 0xC1D3, 0x52A3, 0xC1D4, 0x730E, 0xC1D5, 0x7433, - 0xC1D6, 0x6797, 0xC1D7, 0x78F7, 0xC1D8, 0x9716, 0xC1D9, 0x4E34, - 0xC1DA, 0x90BB, 0xC1DB, 0x9CDE, 0xC1DC, 0x6DCB, 0xC1DD, 0x51DB, - 0xC1DE, 0x8D41, 0xC1DF, 0x541D, 0xC1E0, 0x62CE, 0xC1E1, 0x73B2, - 0xC1E2, 0x83F1, 0xC1E3, 0x96F6, 0xC1E4, 0x9F84, 0xC1E5, 0x94C3, - 0xC1E6, 0x4F36, 0xC1E7, 0x7F9A, 0xC1E8, 0x51CC, 0xC1E9, 0x7075, - 0xC1EA, 0x9675, 0xC1EB, 0x5CAD, 0xC1EC, 0x9886, 0xC1ED, 0x53E6, - 0xC1EE, 0x4EE4, 0xC1EF, 0x6E9C, 0xC1F0, 0x7409, 0xC1F1, 0x69B4, - 0xC1F2, 0x786B, 0xC1F3, 0x998F, 0xC1F4, 0x7559, 0xC1F5, 0x5218, - 0xC1F6, 0x7624, 0xC1F7, 0x6D41, 0xC1F8, 0x67F3, 0xC1F9, 0x516D, - 0xC1FA, 0x9F99, 0xC1FB, 0x804B, 0xC1FC, 0x5499, 0xC1FD, 0x7B3C, - 0xC1FE, 0x7ABF, 0xC240, 0x7FE4, 0xC241, 0x7FE7, 0xC242, 0x7FE8, - 0xC243, 0x7FEA, 0xC244, 0x7FEB, 0xC245, 0x7FEC, 0xC246, 0x7FED, - 0xC247, 0x7FEF, 0xC248, 0x7FF2, 0xC249, 0x7FF4, 0xC24A, 0x7FF5, - 0xC24B, 0x7FF6, 0xC24C, 0x7FF7, 0xC24D, 0x7FF8, 0xC24E, 0x7FF9, - 0xC24F, 0x7FFA, 0xC250, 0x7FFD, 0xC251, 0x7FFE, 0xC252, 0x7FFF, - 0xC253, 0x8002, 0xC254, 0x8007, 0xC255, 0x8008, 0xC256, 0x8009, - 0xC257, 0x800A, 0xC258, 0x800E, 0xC259, 0x800F, 0xC25A, 0x8011, - 0xC25B, 0x8013, 0xC25C, 0x801A, 0xC25D, 0x801B, 0xC25E, 0x801D, - 0xC25F, 0x801E, 0xC260, 0x801F, 0xC261, 0x8021, 0xC262, 0x8023, - 0xC263, 0x8024, 0xC264, 0x802B, 0xC265, 0x802C, 0xC266, 0x802D, - 0xC267, 0x802E, 0xC268, 0x802F, 0xC269, 0x8030, 0xC26A, 0x8032, - 0xC26B, 0x8034, 0xC26C, 0x8039, 0xC26D, 0x803A, 0xC26E, 0x803C, - 0xC26F, 0x803E, 0xC270, 0x8040, 0xC271, 0x8041, 0xC272, 0x8044, - 0xC273, 0x8045, 0xC274, 0x8047, 0xC275, 0x8048, 0xC276, 0x8049, - 0xC277, 0x804E, 0xC278, 0x804F, 0xC279, 0x8050, 0xC27A, 0x8051, - 0xC27B, 0x8053, 0xC27C, 0x8055, 0xC27D, 0x8056, 0xC27E, 0x8057, - 0xC280, 0x8059, 0xC281, 0x805B, 0xC282, 0x805C, 0xC283, 0x805D, - 0xC284, 0x805E, 0xC285, 0x805F, 0xC286, 0x8060, 0xC287, 0x8061, - 0xC288, 0x8062, 0xC289, 0x8063, 0xC28A, 0x8064, 0xC28B, 0x8065, - 0xC28C, 0x8066, 0xC28D, 0x8067, 0xC28E, 0x8068, 0xC28F, 0x806B, - 0xC290, 0x806C, 0xC291, 0x806D, 0xC292, 0x806E, 0xC293, 0x806F, - 0xC294, 0x8070, 0xC295, 0x8072, 0xC296, 0x8073, 0xC297, 0x8074, - 0xC298, 0x8075, 0xC299, 0x8076, 0xC29A, 0x8077, 0xC29B, 0x8078, - 0xC29C, 0x8079, 0xC29D, 0x807A, 0xC29E, 0x807B, 0xC29F, 0x807C, - 0xC2A0, 0x807D, 0xC2A1, 0x9686, 0xC2A2, 0x5784, 0xC2A3, 0x62E2, - 0xC2A4, 0x9647, 0xC2A5, 0x697C, 0xC2A6, 0x5A04, 0xC2A7, 0x6402, - 0xC2A8, 0x7BD3, 0xC2A9, 0x6F0F, 0xC2AA, 0x964B, 0xC2AB, 0x82A6, - 0xC2AC, 0x5362, 0xC2AD, 0x9885, 0xC2AE, 0x5E90, 0xC2AF, 0x7089, - 0xC2B0, 0x63B3, 0xC2B1, 0x5364, 0xC2B2, 0x864F, 0xC2B3, 0x9C81, - 0xC2B4, 0x9E93, 0xC2B5, 0x788C, 0xC2B6, 0x9732, 0xC2B7, 0x8DEF, - 0xC2B8, 0x8D42, 0xC2B9, 0x9E7F, 0xC2BA, 0x6F5E, 0xC2BB, 0x7984, - 0xC2BC, 0x5F55, 0xC2BD, 0x9646, 0xC2BE, 0x622E, 0xC2BF, 0x9A74, - 0xC2C0, 0x5415, 0xC2C1, 0x94DD, 0xC2C2, 0x4FA3, 0xC2C3, 0x65C5, - 0xC2C4, 0x5C65, 0xC2C5, 0x5C61, 0xC2C6, 0x7F15, 0xC2C7, 0x8651, - 0xC2C8, 0x6C2F, 0xC2C9, 0x5F8B, 0xC2CA, 0x7387, 0xC2CB, 0x6EE4, - 0xC2CC, 0x7EFF, 0xC2CD, 0x5CE6, 0xC2CE, 0x631B, 0xC2CF, 0x5B6A, - 0xC2D0, 0x6EE6, 0xC2D1, 0x5375, 0xC2D2, 0x4E71, 0xC2D3, 0x63A0, - 0xC2D4, 0x7565, 0xC2D5, 0x62A1, 0xC2D6, 0x8F6E, 0xC2D7, 0x4F26, - 0xC2D8, 0x4ED1, 0xC2D9, 0x6CA6, 0xC2DA, 0x7EB6, 0xC2DB, 0x8BBA, - 0xC2DC, 0x841D, 0xC2DD, 0x87BA, 0xC2DE, 0x7F57, 0xC2DF, 0x903B, - 0xC2E0, 0x9523, 0xC2E1, 0x7BA9, 0xC2E2, 0x9AA1, 0xC2E3, 0x88F8, - 0xC2E4, 0x843D, 0xC2E5, 0x6D1B, 0xC2E6, 0x9A86, 0xC2E7, 0x7EDC, - 0xC2E8, 0x5988, 0xC2E9, 0x9EBB, 0xC2EA, 0x739B, 0xC2EB, 0x7801, - 0xC2EC, 0x8682, 0xC2ED, 0x9A6C, 0xC2EE, 0x9A82, 0xC2EF, 0x561B, - 0xC2F0, 0x5417, 0xC2F1, 0x57CB, 0xC2F2, 0x4E70, 0xC2F3, 0x9EA6, - 0xC2F4, 0x5356, 0xC2F5, 0x8FC8, 0xC2F6, 0x8109, 0xC2F7, 0x7792, - 0xC2F8, 0x9992, 0xC2F9, 0x86EE, 0xC2FA, 0x6EE1, 0xC2FB, 0x8513, - 0xC2FC, 0x66FC, 0xC2FD, 0x6162, 0xC2FE, 0x6F2B, 0xC340, 0x807E, - 0xC341, 0x8081, 0xC342, 0x8082, 0xC343, 0x8085, 0xC344, 0x8088, - 0xC345, 0x808A, 0xC346, 0x808D, 0xC347, 0x808E, 0xC348, 0x808F, - 0xC349, 0x8090, 0xC34A, 0x8091, 0xC34B, 0x8092, 0xC34C, 0x8094, - 0xC34D, 0x8095, 0xC34E, 0x8097, 0xC34F, 0x8099, 0xC350, 0x809E, - 0xC351, 0x80A3, 0xC352, 0x80A6, 0xC353, 0x80A7, 0xC354, 0x80A8, - 0xC355, 0x80AC, 0xC356, 0x80B0, 0xC357, 0x80B3, 0xC358, 0x80B5, - 0xC359, 0x80B6, 0xC35A, 0x80B8, 0xC35B, 0x80B9, 0xC35C, 0x80BB, - 0xC35D, 0x80C5, 0xC35E, 0x80C7, 0xC35F, 0x80C8, 0xC360, 0x80C9, - 0xC361, 0x80CA, 0xC362, 0x80CB, 0xC363, 0x80CF, 0xC364, 0x80D0, - 0xC365, 0x80D1, 0xC366, 0x80D2, 0xC367, 0x80D3, 0xC368, 0x80D4, - 0xC369, 0x80D5, 0xC36A, 0x80D8, 0xC36B, 0x80DF, 0xC36C, 0x80E0, - 0xC36D, 0x80E2, 0xC36E, 0x80E3, 0xC36F, 0x80E6, 0xC370, 0x80EE, - 0xC371, 0x80F5, 0xC372, 0x80F7, 0xC373, 0x80F9, 0xC374, 0x80FB, - 0xC375, 0x80FE, 0xC376, 0x80FF, 0xC377, 0x8100, 0xC378, 0x8101, - 0xC379, 0x8103, 0xC37A, 0x8104, 0xC37B, 0x8105, 0xC37C, 0x8107, - 0xC37D, 0x8108, 0xC37E, 0x810B, 0xC380, 0x810C, 0xC381, 0x8115, - 0xC382, 0x8117, 0xC383, 0x8119, 0xC384, 0x811B, 0xC385, 0x811C, - 0xC386, 0x811D, 0xC387, 0x811F, 0xC388, 0x8120, 0xC389, 0x8121, - 0xC38A, 0x8122, 0xC38B, 0x8123, 0xC38C, 0x8124, 0xC38D, 0x8125, - 0xC38E, 0x8126, 0xC38F, 0x8127, 0xC390, 0x8128, 0xC391, 0x8129, - 0xC392, 0x812A, 0xC393, 0x812B, 0xC394, 0x812D, 0xC395, 0x812E, - 0xC396, 0x8130, 0xC397, 0x8133, 0xC398, 0x8134, 0xC399, 0x8135, - 0xC39A, 0x8137, 0xC39B, 0x8139, 0xC39C, 0x813A, 0xC39D, 0x813B, - 0xC39E, 0x813C, 0xC39F, 0x813D, 0xC3A0, 0x813F, 0xC3A1, 0x8C29, - 0xC3A2, 0x8292, 0xC3A3, 0x832B, 0xC3A4, 0x76F2, 0xC3A5, 0x6C13, - 0xC3A6, 0x5FD9, 0xC3A7, 0x83BD, 0xC3A8, 0x732B, 0xC3A9, 0x8305, - 0xC3AA, 0x951A, 0xC3AB, 0x6BDB, 0xC3AC, 0x77DB, 0xC3AD, 0x94C6, - 0xC3AE, 0x536F, 0xC3AF, 0x8302, 0xC3B0, 0x5192, 0xC3B1, 0x5E3D, - 0xC3B2, 0x8C8C, 0xC3B3, 0x8D38, 0xC3B4, 0x4E48, 0xC3B5, 0x73AB, - 0xC3B6, 0x679A, 0xC3B7, 0x6885, 0xC3B8, 0x9176, 0xC3B9, 0x9709, - 0xC3BA, 0x7164, 0xC3BB, 0x6CA1, 0xC3BC, 0x7709, 0xC3BD, 0x5A92, - 0xC3BE, 0x9541, 0xC3BF, 0x6BCF, 0xC3C0, 0x7F8E, 0xC3C1, 0x6627, - 0xC3C2, 0x5BD0, 0xC3C3, 0x59B9, 0xC3C4, 0x5A9A, 0xC3C5, 0x95E8, - 0xC3C6, 0x95F7, 0xC3C7, 0x4EEC, 0xC3C8, 0x840C, 0xC3C9, 0x8499, - 0xC3CA, 0x6AAC, 0xC3CB, 0x76DF, 0xC3CC, 0x9530, 0xC3CD, 0x731B, - 0xC3CE, 0x68A6, 0xC3CF, 0x5B5F, 0xC3D0, 0x772F, 0xC3D1, 0x919A, - 0xC3D2, 0x9761, 0xC3D3, 0x7CDC, 0xC3D4, 0x8FF7, 0xC3D5, 0x8C1C, - 0xC3D6, 0x5F25, 0xC3D7, 0x7C73, 0xC3D8, 0x79D8, 0xC3D9, 0x89C5, - 0xC3DA, 0x6CCC, 0xC3DB, 0x871C, 0xC3DC, 0x5BC6, 0xC3DD, 0x5E42, - 0xC3DE, 0x68C9, 0xC3DF, 0x7720, 0xC3E0, 0x7EF5, 0xC3E1, 0x5195, - 0xC3E2, 0x514D, 0xC3E3, 0x52C9, 0xC3E4, 0x5A29, 0xC3E5, 0x7F05, - 0xC3E6, 0x9762, 0xC3E7, 0x82D7, 0xC3E8, 0x63CF, 0xC3E9, 0x7784, - 0xC3EA, 0x85D0, 0xC3EB, 0x79D2, 0xC3EC, 0x6E3A, 0xC3ED, 0x5E99, - 0xC3EE, 0x5999, 0xC3EF, 0x8511, 0xC3F0, 0x706D, 0xC3F1, 0x6C11, - 0xC3F2, 0x62BF, 0xC3F3, 0x76BF, 0xC3F4, 0x654F, 0xC3F5, 0x60AF, - 0xC3F6, 0x95FD, 0xC3F7, 0x660E, 0xC3F8, 0x879F, 0xC3F9, 0x9E23, - 0xC3FA, 0x94ED, 0xC3FB, 0x540D, 0xC3FC, 0x547D, 0xC3FD, 0x8C2C, - 0xC3FE, 0x6478, 0xC440, 0x8140, 0xC441, 0x8141, 0xC442, 0x8142, - 0xC443, 0x8143, 0xC444, 0x8144, 0xC445, 0x8145, 0xC446, 0x8147, - 0xC447, 0x8149, 0xC448, 0x814D, 0xC449, 0x814E, 0xC44A, 0x814F, - 0xC44B, 0x8152, 0xC44C, 0x8156, 0xC44D, 0x8157, 0xC44E, 0x8158, - 0xC44F, 0x815B, 0xC450, 0x815C, 0xC451, 0x815D, 0xC452, 0x815E, - 0xC453, 0x815F, 0xC454, 0x8161, 0xC455, 0x8162, 0xC456, 0x8163, - 0xC457, 0x8164, 0xC458, 0x8166, 0xC459, 0x8168, 0xC45A, 0x816A, - 0xC45B, 0x816B, 0xC45C, 0x816C, 0xC45D, 0x816F, 0xC45E, 0x8172, - 0xC45F, 0x8173, 0xC460, 0x8175, 0xC461, 0x8176, 0xC462, 0x8177, - 0xC463, 0x8178, 0xC464, 0x8181, 0xC465, 0x8183, 0xC466, 0x8184, - 0xC467, 0x8185, 0xC468, 0x8186, 0xC469, 0x8187, 0xC46A, 0x8189, - 0xC46B, 0x818B, 0xC46C, 0x818C, 0xC46D, 0x818D, 0xC46E, 0x818E, - 0xC46F, 0x8190, 0xC470, 0x8192, 0xC471, 0x8193, 0xC472, 0x8194, - 0xC473, 0x8195, 0xC474, 0x8196, 0xC475, 0x8197, 0xC476, 0x8199, - 0xC477, 0x819A, 0xC478, 0x819E, 0xC479, 0x819F, 0xC47A, 0x81A0, - 0xC47B, 0x81A1, 0xC47C, 0x81A2, 0xC47D, 0x81A4, 0xC47E, 0x81A5, - 0xC480, 0x81A7, 0xC481, 0x81A9, 0xC482, 0x81AB, 0xC483, 0x81AC, - 0xC484, 0x81AD, 0xC485, 0x81AE, 0xC486, 0x81AF, 0xC487, 0x81B0, - 0xC488, 0x81B1, 0xC489, 0x81B2, 0xC48A, 0x81B4, 0xC48B, 0x81B5, - 0xC48C, 0x81B6, 0xC48D, 0x81B7, 0xC48E, 0x81B8, 0xC48F, 0x81B9, - 0xC490, 0x81BC, 0xC491, 0x81BD, 0xC492, 0x81BE, 0xC493, 0x81BF, - 0xC494, 0x81C4, 0xC495, 0x81C5, 0xC496, 0x81C7, 0xC497, 0x81C8, - 0xC498, 0x81C9, 0xC499, 0x81CB, 0xC49A, 0x81CD, 0xC49B, 0x81CE, - 0xC49C, 0x81CF, 0xC49D, 0x81D0, 0xC49E, 0x81D1, 0xC49F, 0x81D2, - 0xC4A0, 0x81D3, 0xC4A1, 0x6479, 0xC4A2, 0x8611, 0xC4A3, 0x6A21, - 0xC4A4, 0x819C, 0xC4A5, 0x78E8, 0xC4A6, 0x6469, 0xC4A7, 0x9B54, - 0xC4A8, 0x62B9, 0xC4A9, 0x672B, 0xC4AA, 0x83AB, 0xC4AB, 0x58A8, - 0xC4AC, 0x9ED8, 0xC4AD, 0x6CAB, 0xC4AE, 0x6F20, 0xC4AF, 0x5BDE, - 0xC4B0, 0x964C, 0xC4B1, 0x8C0B, 0xC4B2, 0x725F, 0xC4B3, 0x67D0, - 0xC4B4, 0x62C7, 0xC4B5, 0x7261, 0xC4B6, 0x4EA9, 0xC4B7, 0x59C6, - 0xC4B8, 0x6BCD, 0xC4B9, 0x5893, 0xC4BA, 0x66AE, 0xC4BB, 0x5E55, - 0xC4BC, 0x52DF, 0xC4BD, 0x6155, 0xC4BE, 0x6728, 0xC4BF, 0x76EE, - 0xC4C0, 0x7766, 0xC4C1, 0x7267, 0xC4C2, 0x7A46, 0xC4C3, 0x62FF, - 0xC4C4, 0x54EA, 0xC4C5, 0x5450, 0xC4C6, 0x94A0, 0xC4C7, 0x90A3, - 0xC4C8, 0x5A1C, 0xC4C9, 0x7EB3, 0xC4CA, 0x6C16, 0xC4CB, 0x4E43, - 0xC4CC, 0x5976, 0xC4CD, 0x8010, 0xC4CE, 0x5948, 0xC4CF, 0x5357, - 0xC4D0, 0x7537, 0xC4D1, 0x96BE, 0xC4D2, 0x56CA, 0xC4D3, 0x6320, - 0xC4D4, 0x8111, 0xC4D5, 0x607C, 0xC4D6, 0x95F9, 0xC4D7, 0x6DD6, - 0xC4D8, 0x5462, 0xC4D9, 0x9981, 0xC4DA, 0x5185, 0xC4DB, 0x5AE9, - 0xC4DC, 0x80FD, 0xC4DD, 0x59AE, 0xC4DE, 0x9713, 0xC4DF, 0x502A, - 0xC4E0, 0x6CE5, 0xC4E1, 0x5C3C, 0xC4E2, 0x62DF, 0xC4E3, 0x4F60, - 0xC4E4, 0x533F, 0xC4E5, 0x817B, 0xC4E6, 0x9006, 0xC4E7, 0x6EBA, - 0xC4E8, 0x852B, 0xC4E9, 0x62C8, 0xC4EA, 0x5E74, 0xC4EB, 0x78BE, - 0xC4EC, 0x64B5, 0xC4ED, 0x637B, 0xC4EE, 0x5FF5, 0xC4EF, 0x5A18, - 0xC4F0, 0x917F, 0xC4F1, 0x9E1F, 0xC4F2, 0x5C3F, 0xC4F3, 0x634F, - 0xC4F4, 0x8042, 0xC4F5, 0x5B7D, 0xC4F6, 0x556E, 0xC4F7, 0x954A, - 0xC4F8, 0x954D, 0xC4F9, 0x6D85, 0xC4FA, 0x60A8, 0xC4FB, 0x67E0, - 0xC4FC, 0x72DE, 0xC4FD, 0x51DD, 0xC4FE, 0x5B81, 0xC540, 0x81D4, - 0xC541, 0x81D5, 0xC542, 0x81D6, 0xC543, 0x81D7, 0xC544, 0x81D8, - 0xC545, 0x81D9, 0xC546, 0x81DA, 0xC547, 0x81DB, 0xC548, 0x81DC, - 0xC549, 0x81DD, 0xC54A, 0x81DE, 0xC54B, 0x81DF, 0xC54C, 0x81E0, - 0xC54D, 0x81E1, 0xC54E, 0x81E2, 0xC54F, 0x81E4, 0xC550, 0x81E5, - 0xC551, 0x81E6, 0xC552, 0x81E8, 0xC553, 0x81E9, 0xC554, 0x81EB, - 0xC555, 0x81EE, 0xC556, 0x81EF, 0xC557, 0x81F0, 0xC558, 0x81F1, - 0xC559, 0x81F2, 0xC55A, 0x81F5, 0xC55B, 0x81F6, 0xC55C, 0x81F7, - 0xC55D, 0x81F8, 0xC55E, 0x81F9, 0xC55F, 0x81FA, 0xC560, 0x81FD, - 0xC561, 0x81FF, 0xC562, 0x8203, 0xC563, 0x8207, 0xC564, 0x8208, - 0xC565, 0x8209, 0xC566, 0x820A, 0xC567, 0x820B, 0xC568, 0x820E, - 0xC569, 0x820F, 0xC56A, 0x8211, 0xC56B, 0x8213, 0xC56C, 0x8215, - 0xC56D, 0x8216, 0xC56E, 0x8217, 0xC56F, 0x8218, 0xC570, 0x8219, - 0xC571, 0x821A, 0xC572, 0x821D, 0xC573, 0x8220, 0xC574, 0x8224, - 0xC575, 0x8225, 0xC576, 0x8226, 0xC577, 0x8227, 0xC578, 0x8229, - 0xC579, 0x822E, 0xC57A, 0x8232, 0xC57B, 0x823A, 0xC57C, 0x823C, - 0xC57D, 0x823D, 0xC57E, 0x823F, 0xC580, 0x8240, 0xC581, 0x8241, - 0xC582, 0x8242, 0xC583, 0x8243, 0xC584, 0x8245, 0xC585, 0x8246, - 0xC586, 0x8248, 0xC587, 0x824A, 0xC588, 0x824C, 0xC589, 0x824D, - 0xC58A, 0x824E, 0xC58B, 0x8250, 0xC58C, 0x8251, 0xC58D, 0x8252, - 0xC58E, 0x8253, 0xC58F, 0x8254, 0xC590, 0x8255, 0xC591, 0x8256, - 0xC592, 0x8257, 0xC593, 0x8259, 0xC594, 0x825B, 0xC595, 0x825C, - 0xC596, 0x825D, 0xC597, 0x825E, 0xC598, 0x8260, 0xC599, 0x8261, - 0xC59A, 0x8262, 0xC59B, 0x8263, 0xC59C, 0x8264, 0xC59D, 0x8265, - 0xC59E, 0x8266, 0xC59F, 0x8267, 0xC5A0, 0x8269, 0xC5A1, 0x62E7, - 0xC5A2, 0x6CDE, 0xC5A3, 0x725B, 0xC5A4, 0x626D, 0xC5A5, 0x94AE, - 0xC5A6, 0x7EBD, 0xC5A7, 0x8113, 0xC5A8, 0x6D53, 0xC5A9, 0x519C, - 0xC5AA, 0x5F04, 0xC5AB, 0x5974, 0xC5AC, 0x52AA, 0xC5AD, 0x6012, - 0xC5AE, 0x5973, 0xC5AF, 0x6696, 0xC5B0, 0x8650, 0xC5B1, 0x759F, - 0xC5B2, 0x632A, 0xC5B3, 0x61E6, 0xC5B4, 0x7CEF, 0xC5B5, 0x8BFA, - 0xC5B6, 0x54E6, 0xC5B7, 0x6B27, 0xC5B8, 0x9E25, 0xC5B9, 0x6BB4, - 0xC5BA, 0x85D5, 0xC5BB, 0x5455, 0xC5BC, 0x5076, 0xC5BD, 0x6CA4, - 0xC5BE, 0x556A, 0xC5BF, 0x8DB4, 0xC5C0, 0x722C, 0xC5C1, 0x5E15, - 0xC5C2, 0x6015, 0xC5C3, 0x7436, 0xC5C4, 0x62CD, 0xC5C5, 0x6392, - 0xC5C6, 0x724C, 0xC5C7, 0x5F98, 0xC5C8, 0x6E43, 0xC5C9, 0x6D3E, - 0xC5CA, 0x6500, 0xC5CB, 0x6F58, 0xC5CC, 0x76D8, 0xC5CD, 0x78D0, - 0xC5CE, 0x76FC, 0xC5CF, 0x7554, 0xC5D0, 0x5224, 0xC5D1, 0x53DB, - 0xC5D2, 0x4E53, 0xC5D3, 0x5E9E, 0xC5D4, 0x65C1, 0xC5D5, 0x802A, - 0xC5D6, 0x80D6, 0xC5D7, 0x629B, 0xC5D8, 0x5486, 0xC5D9, 0x5228, - 0xC5DA, 0x70AE, 0xC5DB, 0x888D, 0xC5DC, 0x8DD1, 0xC5DD, 0x6CE1, - 0xC5DE, 0x5478, 0xC5DF, 0x80DA, 0xC5E0, 0x57F9, 0xC5E1, 0x88F4, - 0xC5E2, 0x8D54, 0xC5E3, 0x966A, 0xC5E4, 0x914D, 0xC5E5, 0x4F69, - 0xC5E6, 0x6C9B, 0xC5E7, 0x55B7, 0xC5E8, 0x76C6, 0xC5E9, 0x7830, - 0xC5EA, 0x62A8, 0xC5EB, 0x70F9, 0xC5EC, 0x6F8E, 0xC5ED, 0x5F6D, - 0xC5EE, 0x84EC, 0xC5EF, 0x68DA, 0xC5F0, 0x787C, 0xC5F1, 0x7BF7, - 0xC5F2, 0x81A8, 0xC5F3, 0x670B, 0xC5F4, 0x9E4F, 0xC5F5, 0x6367, - 0xC5F6, 0x78B0, 0xC5F7, 0x576F, 0xC5F8, 0x7812, 0xC5F9, 0x9739, - 0xC5FA, 0x6279, 0xC5FB, 0x62AB, 0xC5FC, 0x5288, 0xC5FD, 0x7435, - 0xC5FE, 0x6BD7, 0xC640, 0x826A, 0xC641, 0x826B, 0xC642, 0x826C, - 0xC643, 0x826D, 0xC644, 0x8271, 0xC645, 0x8275, 0xC646, 0x8276, - 0xC647, 0x8277, 0xC648, 0x8278, 0xC649, 0x827B, 0xC64A, 0x827C, - 0xC64B, 0x8280, 0xC64C, 0x8281, 0xC64D, 0x8283, 0xC64E, 0x8285, - 0xC64F, 0x8286, 0xC650, 0x8287, 0xC651, 0x8289, 0xC652, 0x828C, - 0xC653, 0x8290, 0xC654, 0x8293, 0xC655, 0x8294, 0xC656, 0x8295, - 0xC657, 0x8296, 0xC658, 0x829A, 0xC659, 0x829B, 0xC65A, 0x829E, - 0xC65B, 0x82A0, 0xC65C, 0x82A2, 0xC65D, 0x82A3, 0xC65E, 0x82A7, - 0xC65F, 0x82B2, 0xC660, 0x82B5, 0xC661, 0x82B6, 0xC662, 0x82BA, - 0xC663, 0x82BB, 0xC664, 0x82BC, 0xC665, 0x82BF, 0xC666, 0x82C0, - 0xC667, 0x82C2, 0xC668, 0x82C3, 0xC669, 0x82C5, 0xC66A, 0x82C6, - 0xC66B, 0x82C9, 0xC66C, 0x82D0, 0xC66D, 0x82D6, 0xC66E, 0x82D9, - 0xC66F, 0x82DA, 0xC670, 0x82DD, 0xC671, 0x82E2, 0xC672, 0x82E7, - 0xC673, 0x82E8, 0xC674, 0x82E9, 0xC675, 0x82EA, 0xC676, 0x82EC, - 0xC677, 0x82ED, 0xC678, 0x82EE, 0xC679, 0x82F0, 0xC67A, 0x82F2, - 0xC67B, 0x82F3, 0xC67C, 0x82F5, 0xC67D, 0x82F6, 0xC67E, 0x82F8, - 0xC680, 0x82FA, 0xC681, 0x82FC, 0xC682, 0x82FD, 0xC683, 0x82FE, - 0xC684, 0x82FF, 0xC685, 0x8300, 0xC686, 0x830A, 0xC687, 0x830B, - 0xC688, 0x830D, 0xC689, 0x8310, 0xC68A, 0x8312, 0xC68B, 0x8313, - 0xC68C, 0x8316, 0xC68D, 0x8318, 0xC68E, 0x8319, 0xC68F, 0x831D, - 0xC690, 0x831E, 0xC691, 0x831F, 0xC692, 0x8320, 0xC693, 0x8321, - 0xC694, 0x8322, 0xC695, 0x8323, 0xC696, 0x8324, 0xC697, 0x8325, - 0xC698, 0x8326, 0xC699, 0x8329, 0xC69A, 0x832A, 0xC69B, 0x832E, - 0xC69C, 0x8330, 0xC69D, 0x8332, 0xC69E, 0x8337, 0xC69F, 0x833B, - 0xC6A0, 0x833D, 0xC6A1, 0x5564, 0xC6A2, 0x813E, 0xC6A3, 0x75B2, - 0xC6A4, 0x76AE, 0xC6A5, 0x5339, 0xC6A6, 0x75DE, 0xC6A7, 0x50FB, - 0xC6A8, 0x5C41, 0xC6A9, 0x8B6C, 0xC6AA, 0x7BC7, 0xC6AB, 0x504F, - 0xC6AC, 0x7247, 0xC6AD, 0x9A97, 0xC6AE, 0x98D8, 0xC6AF, 0x6F02, - 0xC6B0, 0x74E2, 0xC6B1, 0x7968, 0xC6B2, 0x6487, 0xC6B3, 0x77A5, - 0xC6B4, 0x62FC, 0xC6B5, 0x9891, 0xC6B6, 0x8D2B, 0xC6B7, 0x54C1, - 0xC6B8, 0x8058, 0xC6B9, 0x4E52, 0xC6BA, 0x576A, 0xC6BB, 0x82F9, - 0xC6BC, 0x840D, 0xC6BD, 0x5E73, 0xC6BE, 0x51ED, 0xC6BF, 0x74F6, - 0xC6C0, 0x8BC4, 0xC6C1, 0x5C4F, 0xC6C2, 0x5761, 0xC6C3, 0x6CFC, - 0xC6C4, 0x9887, 0xC6C5, 0x5A46, 0xC6C6, 0x7834, 0xC6C7, 0x9B44, - 0xC6C8, 0x8FEB, 0xC6C9, 0x7C95, 0xC6CA, 0x5256, 0xC6CB, 0x6251, - 0xC6CC, 0x94FA, 0xC6CD, 0x4EC6, 0xC6CE, 0x8386, 0xC6CF, 0x8461, - 0xC6D0, 0x83E9, 0xC6D1, 0x84B2, 0xC6D2, 0x57D4, 0xC6D3, 0x6734, - 0xC6D4, 0x5703, 0xC6D5, 0x666E, 0xC6D6, 0x6D66, 0xC6D7, 0x8C31, - 0xC6D8, 0x66DD, 0xC6D9, 0x7011, 0xC6DA, 0x671F, 0xC6DB, 0x6B3A, - 0xC6DC, 0x6816, 0xC6DD, 0x621A, 0xC6DE, 0x59BB, 0xC6DF, 0x4E03, - 0xC6E0, 0x51C4, 0xC6E1, 0x6F06, 0xC6E2, 0x67D2, 0xC6E3, 0x6C8F, - 0xC6E4, 0x5176, 0xC6E5, 0x68CB, 0xC6E6, 0x5947, 0xC6E7, 0x6B67, - 0xC6E8, 0x7566, 0xC6E9, 0x5D0E, 0xC6EA, 0x8110, 0xC6EB, 0x9F50, - 0xC6EC, 0x65D7, 0xC6ED, 0x7948, 0xC6EE, 0x7941, 0xC6EF, 0x9A91, - 0xC6F0, 0x8D77, 0xC6F1, 0x5C82, 0xC6F2, 0x4E5E, 0xC6F3, 0x4F01, - 0xC6F4, 0x542F, 0xC6F5, 0x5951, 0xC6F6, 0x780C, 0xC6F7, 0x5668, - 0xC6F8, 0x6C14, 0xC6F9, 0x8FC4, 0xC6FA, 0x5F03, 0xC6FB, 0x6C7D, - 0xC6FC, 0x6CE3, 0xC6FD, 0x8BAB, 0xC6FE, 0x6390, 0xC740, 0x833E, - 0xC741, 0x833F, 0xC742, 0x8341, 0xC743, 0x8342, 0xC744, 0x8344, - 0xC745, 0x8345, 0xC746, 0x8348, 0xC747, 0x834A, 0xC748, 0x834B, - 0xC749, 0x834C, 0xC74A, 0x834D, 0xC74B, 0x834E, 0xC74C, 0x8353, - 0xC74D, 0x8355, 0xC74E, 0x8356, 0xC74F, 0x8357, 0xC750, 0x8358, - 0xC751, 0x8359, 0xC752, 0x835D, 0xC753, 0x8362, 0xC754, 0x8370, - 0xC755, 0x8371, 0xC756, 0x8372, 0xC757, 0x8373, 0xC758, 0x8374, - 0xC759, 0x8375, 0xC75A, 0x8376, 0xC75B, 0x8379, 0xC75C, 0x837A, - 0xC75D, 0x837E, 0xC75E, 0x837F, 0xC75F, 0x8380, 0xC760, 0x8381, - 0xC761, 0x8382, 0xC762, 0x8383, 0xC763, 0x8384, 0xC764, 0x8387, - 0xC765, 0x8388, 0xC766, 0x838A, 0xC767, 0x838B, 0xC768, 0x838C, - 0xC769, 0x838D, 0xC76A, 0x838F, 0xC76B, 0x8390, 0xC76C, 0x8391, - 0xC76D, 0x8394, 0xC76E, 0x8395, 0xC76F, 0x8396, 0xC770, 0x8397, - 0xC771, 0x8399, 0xC772, 0x839A, 0xC773, 0x839D, 0xC774, 0x839F, - 0xC775, 0x83A1, 0xC776, 0x83A2, 0xC777, 0x83A3, 0xC778, 0x83A4, - 0xC779, 0x83A5, 0xC77A, 0x83A6, 0xC77B, 0x83A7, 0xC77C, 0x83AC, - 0xC77D, 0x83AD, 0xC77E, 0x83AE, 0xC780, 0x83AF, 0xC781, 0x83B5, - 0xC782, 0x83BB, 0xC783, 0x83BE, 0xC784, 0x83BF, 0xC785, 0x83C2, - 0xC786, 0x83C3, 0xC787, 0x83C4, 0xC788, 0x83C6, 0xC789, 0x83C8, - 0xC78A, 0x83C9, 0xC78B, 0x83CB, 0xC78C, 0x83CD, 0xC78D, 0x83CE, - 0xC78E, 0x83D0, 0xC78F, 0x83D1, 0xC790, 0x83D2, 0xC791, 0x83D3, - 0xC792, 0x83D5, 0xC793, 0x83D7, 0xC794, 0x83D9, 0xC795, 0x83DA, - 0xC796, 0x83DB, 0xC797, 0x83DE, 0xC798, 0x83E2, 0xC799, 0x83E3, - 0xC79A, 0x83E4, 0xC79B, 0x83E6, 0xC79C, 0x83E7, 0xC79D, 0x83E8, - 0xC79E, 0x83EB, 0xC79F, 0x83EC, 0xC7A0, 0x83ED, 0xC7A1, 0x6070, - 0xC7A2, 0x6D3D, 0xC7A3, 0x7275, 0xC7A4, 0x6266, 0xC7A5, 0x948E, - 0xC7A6, 0x94C5, 0xC7A7, 0x5343, 0xC7A8, 0x8FC1, 0xC7A9, 0x7B7E, - 0xC7AA, 0x4EDF, 0xC7AB, 0x8C26, 0xC7AC, 0x4E7E, 0xC7AD, 0x9ED4, - 0xC7AE, 0x94B1, 0xC7AF, 0x94B3, 0xC7B0, 0x524D, 0xC7B1, 0x6F5C, - 0xC7B2, 0x9063, 0xC7B3, 0x6D45, 0xC7B4, 0x8C34, 0xC7B5, 0x5811, - 0xC7B6, 0x5D4C, 0xC7B7, 0x6B20, 0xC7B8, 0x6B49, 0xC7B9, 0x67AA, - 0xC7BA, 0x545B, 0xC7BB, 0x8154, 0xC7BC, 0x7F8C, 0xC7BD, 0x5899, - 0xC7BE, 0x8537, 0xC7BF, 0x5F3A, 0xC7C0, 0x62A2, 0xC7C1, 0x6A47, - 0xC7C2, 0x9539, 0xC7C3, 0x6572, 0xC7C4, 0x6084, 0xC7C5, 0x6865, - 0xC7C6, 0x77A7, 0xC7C7, 0x4E54, 0xC7C8, 0x4FA8, 0xC7C9, 0x5DE7, - 0xC7CA, 0x9798, 0xC7CB, 0x64AC, 0xC7CC, 0x7FD8, 0xC7CD, 0x5CED, - 0xC7CE, 0x4FCF, 0xC7CF, 0x7A8D, 0xC7D0, 0x5207, 0xC7D1, 0x8304, - 0xC7D2, 0x4E14, 0xC7D3, 0x602F, 0xC7D4, 0x7A83, 0xC7D5, 0x94A6, - 0xC7D6, 0x4FB5, 0xC7D7, 0x4EB2, 0xC7D8, 0x79E6, 0xC7D9, 0x7434, - 0xC7DA, 0x52E4, 0xC7DB, 0x82B9, 0xC7DC, 0x64D2, 0xC7DD, 0x79BD, - 0xC7DE, 0x5BDD, 0xC7DF, 0x6C81, 0xC7E0, 0x9752, 0xC7E1, 0x8F7B, - 0xC7E2, 0x6C22, 0xC7E3, 0x503E, 0xC7E4, 0x537F, 0xC7E5, 0x6E05, - 0xC7E6, 0x64CE, 0xC7E7, 0x6674, 0xC7E8, 0x6C30, 0xC7E9, 0x60C5, - 0xC7EA, 0x9877, 0xC7EB, 0x8BF7, 0xC7EC, 0x5E86, 0xC7ED, 0x743C, - 0xC7EE, 0x7A77, 0xC7EF, 0x79CB, 0xC7F0, 0x4E18, 0xC7F1, 0x90B1, - 0xC7F2, 0x7403, 0xC7F3, 0x6C42, 0xC7F4, 0x56DA, 0xC7F5, 0x914B, - 0xC7F6, 0x6CC5, 0xC7F7, 0x8D8B, 0xC7F8, 0x533A, 0xC7F9, 0x86C6, - 0xC7FA, 0x66F2, 0xC7FB, 0x8EAF, 0xC7FC, 0x5C48, 0xC7FD, 0x9A71, - 0xC7FE, 0x6E20, 0xC840, 0x83EE, 0xC841, 0x83EF, 0xC842, 0x83F3, - 0xC843, 0x83F4, 0xC844, 0x83F5, 0xC845, 0x83F6, 0xC846, 0x83F7, - 0xC847, 0x83FA, 0xC848, 0x83FB, 0xC849, 0x83FC, 0xC84A, 0x83FE, - 0xC84B, 0x83FF, 0xC84C, 0x8400, 0xC84D, 0x8402, 0xC84E, 0x8405, - 0xC84F, 0x8407, 0xC850, 0x8408, 0xC851, 0x8409, 0xC852, 0x840A, - 0xC853, 0x8410, 0xC854, 0x8412, 0xC855, 0x8413, 0xC856, 0x8414, - 0xC857, 0x8415, 0xC858, 0x8416, 0xC859, 0x8417, 0xC85A, 0x8419, - 0xC85B, 0x841A, 0xC85C, 0x841B, 0xC85D, 0x841E, 0xC85E, 0x841F, - 0xC85F, 0x8420, 0xC860, 0x8421, 0xC861, 0x8422, 0xC862, 0x8423, - 0xC863, 0x8429, 0xC864, 0x842A, 0xC865, 0x842B, 0xC866, 0x842C, - 0xC867, 0x842D, 0xC868, 0x842E, 0xC869, 0x842F, 0xC86A, 0x8430, - 0xC86B, 0x8432, 0xC86C, 0x8433, 0xC86D, 0x8434, 0xC86E, 0x8435, - 0xC86F, 0x8436, 0xC870, 0x8437, 0xC871, 0x8439, 0xC872, 0x843A, - 0xC873, 0x843B, 0xC874, 0x843E, 0xC875, 0x843F, 0xC876, 0x8440, - 0xC877, 0x8441, 0xC878, 0x8442, 0xC879, 0x8443, 0xC87A, 0x8444, - 0xC87B, 0x8445, 0xC87C, 0x8447, 0xC87D, 0x8448, 0xC87E, 0x8449, - 0xC880, 0x844A, 0xC881, 0x844B, 0xC882, 0x844C, 0xC883, 0x844D, - 0xC884, 0x844E, 0xC885, 0x844F, 0xC886, 0x8450, 0xC887, 0x8452, - 0xC888, 0x8453, 0xC889, 0x8454, 0xC88A, 0x8455, 0xC88B, 0x8456, - 0xC88C, 0x8458, 0xC88D, 0x845D, 0xC88E, 0x845E, 0xC88F, 0x845F, - 0xC890, 0x8460, 0xC891, 0x8462, 0xC892, 0x8464, 0xC893, 0x8465, - 0xC894, 0x8466, 0xC895, 0x8467, 0xC896, 0x8468, 0xC897, 0x846A, - 0xC898, 0x846E, 0xC899, 0x846F, 0xC89A, 0x8470, 0xC89B, 0x8472, - 0xC89C, 0x8474, 0xC89D, 0x8477, 0xC89E, 0x8479, 0xC89F, 0x847B, - 0xC8A0, 0x847C, 0xC8A1, 0x53D6, 0xC8A2, 0x5A36, 0xC8A3, 0x9F8B, - 0xC8A4, 0x8DA3, 0xC8A5, 0x53BB, 0xC8A6, 0x5708, 0xC8A7, 0x98A7, - 0xC8A8, 0x6743, 0xC8A9, 0x919B, 0xC8AA, 0x6CC9, 0xC8AB, 0x5168, - 0xC8AC, 0x75CA, 0xC8AD, 0x62F3, 0xC8AE, 0x72AC, 0xC8AF, 0x5238, - 0xC8B0, 0x529D, 0xC8B1, 0x7F3A, 0xC8B2, 0x7094, 0xC8B3, 0x7638, - 0xC8B4, 0x5374, 0xC8B5, 0x9E4A, 0xC8B6, 0x69B7, 0xC8B7, 0x786E, - 0xC8B8, 0x96C0, 0xC8B9, 0x88D9, 0xC8BA, 0x7FA4, 0xC8BB, 0x7136, - 0xC8BC, 0x71C3, 0xC8BD, 0x5189, 0xC8BE, 0x67D3, 0xC8BF, 0x74E4, - 0xC8C0, 0x58E4, 0xC8C1, 0x6518, 0xC8C2, 0x56B7, 0xC8C3, 0x8BA9, - 0xC8C4, 0x9976, 0xC8C5, 0x6270, 0xC8C6, 0x7ED5, 0xC8C7, 0x60F9, - 0xC8C8, 0x70ED, 0xC8C9, 0x58EC, 0xC8CA, 0x4EC1, 0xC8CB, 0x4EBA, - 0xC8CC, 0x5FCD, 0xC8CD, 0x97E7, 0xC8CE, 0x4EFB, 0xC8CF, 0x8BA4, - 0xC8D0, 0x5203, 0xC8D1, 0x598A, 0xC8D2, 0x7EAB, 0xC8D3, 0x6254, - 0xC8D4, 0x4ECD, 0xC8D5, 0x65E5, 0xC8D6, 0x620E, 0xC8D7, 0x8338, - 0xC8D8, 0x84C9, 0xC8D9, 0x8363, 0xC8DA, 0x878D, 0xC8DB, 0x7194, - 0xC8DC, 0x6EB6, 0xC8DD, 0x5BB9, 0xC8DE, 0x7ED2, 0xC8DF, 0x5197, - 0xC8E0, 0x63C9, 0xC8E1, 0x67D4, 0xC8E2, 0x8089, 0xC8E3, 0x8339, - 0xC8E4, 0x8815, 0xC8E5, 0x5112, 0xC8E6, 0x5B7A, 0xC8E7, 0x5982, - 0xC8E8, 0x8FB1, 0xC8E9, 0x4E73, 0xC8EA, 0x6C5D, 0xC8EB, 0x5165, - 0xC8EC, 0x8925, 0xC8ED, 0x8F6F, 0xC8EE, 0x962E, 0xC8EF, 0x854A, - 0xC8F0, 0x745E, 0xC8F1, 0x9510, 0xC8F2, 0x95F0, 0xC8F3, 0x6DA6, - 0xC8F4, 0x82E5, 0xC8F5, 0x5F31, 0xC8F6, 0x6492, 0xC8F7, 0x6D12, - 0xC8F8, 0x8428, 0xC8F9, 0x816E, 0xC8FA, 0x9CC3, 0xC8FB, 0x585E, - 0xC8FC, 0x8D5B, 0xC8FD, 0x4E09, 0xC8FE, 0x53C1, 0xC940, 0x847D, - 0xC941, 0x847E, 0xC942, 0x847F, 0xC943, 0x8480, 0xC944, 0x8481, - 0xC945, 0x8483, 0xC946, 0x8484, 0xC947, 0x8485, 0xC948, 0x8486, - 0xC949, 0x848A, 0xC94A, 0x848D, 0xC94B, 0x848F, 0xC94C, 0x8490, - 0xC94D, 0x8491, 0xC94E, 0x8492, 0xC94F, 0x8493, 0xC950, 0x8494, - 0xC951, 0x8495, 0xC952, 0x8496, 0xC953, 0x8498, 0xC954, 0x849A, - 0xC955, 0x849B, 0xC956, 0x849D, 0xC957, 0x849E, 0xC958, 0x849F, - 0xC959, 0x84A0, 0xC95A, 0x84A2, 0xC95B, 0x84A3, 0xC95C, 0x84A4, - 0xC95D, 0x84A5, 0xC95E, 0x84A6, 0xC95F, 0x84A7, 0xC960, 0x84A8, - 0xC961, 0x84A9, 0xC962, 0x84AA, 0xC963, 0x84AB, 0xC964, 0x84AC, - 0xC965, 0x84AD, 0xC966, 0x84AE, 0xC967, 0x84B0, 0xC968, 0x84B1, - 0xC969, 0x84B3, 0xC96A, 0x84B5, 0xC96B, 0x84B6, 0xC96C, 0x84B7, - 0xC96D, 0x84BB, 0xC96E, 0x84BC, 0xC96F, 0x84BE, 0xC970, 0x84C0, - 0xC971, 0x84C2, 0xC972, 0x84C3, 0xC973, 0x84C5, 0xC974, 0x84C6, - 0xC975, 0x84C7, 0xC976, 0x84C8, 0xC977, 0x84CB, 0xC978, 0x84CC, - 0xC979, 0x84CE, 0xC97A, 0x84CF, 0xC97B, 0x84D2, 0xC97C, 0x84D4, - 0xC97D, 0x84D5, 0xC97E, 0x84D7, 0xC980, 0x84D8, 0xC981, 0x84D9, - 0xC982, 0x84DA, 0xC983, 0x84DB, 0xC984, 0x84DC, 0xC985, 0x84DE, - 0xC986, 0x84E1, 0xC987, 0x84E2, 0xC988, 0x84E4, 0xC989, 0x84E7, - 0xC98A, 0x84E8, 0xC98B, 0x84E9, 0xC98C, 0x84EA, 0xC98D, 0x84EB, - 0xC98E, 0x84ED, 0xC98F, 0x84EE, 0xC990, 0x84EF, 0xC991, 0x84F1, - 0xC992, 0x84F2, 0xC993, 0x84F3, 0xC994, 0x84F4, 0xC995, 0x84F5, - 0xC996, 0x84F6, 0xC997, 0x84F7, 0xC998, 0x84F8, 0xC999, 0x84F9, - 0xC99A, 0x84FA, 0xC99B, 0x84FB, 0xC99C, 0x84FD, 0xC99D, 0x84FE, - 0xC99E, 0x8500, 0xC99F, 0x8501, 0xC9A0, 0x8502, 0xC9A1, 0x4F1E, - 0xC9A2, 0x6563, 0xC9A3, 0x6851, 0xC9A4, 0x55D3, 0xC9A5, 0x4E27, - 0xC9A6, 0x6414, 0xC9A7, 0x9A9A, 0xC9A8, 0x626B, 0xC9A9, 0x5AC2, - 0xC9AA, 0x745F, 0xC9AB, 0x8272, 0xC9AC, 0x6DA9, 0xC9AD, 0x68EE, - 0xC9AE, 0x50E7, 0xC9AF, 0x838E, 0xC9B0, 0x7802, 0xC9B1, 0x6740, - 0xC9B2, 0x5239, 0xC9B3, 0x6C99, 0xC9B4, 0x7EB1, 0xC9B5, 0x50BB, - 0xC9B6, 0x5565, 0xC9B7, 0x715E, 0xC9B8, 0x7B5B, 0xC9B9, 0x6652, - 0xC9BA, 0x73CA, 0xC9BB, 0x82EB, 0xC9BC, 0x6749, 0xC9BD, 0x5C71, - 0xC9BE, 0x5220, 0xC9BF, 0x717D, 0xC9C0, 0x886B, 0xC9C1, 0x95EA, - 0xC9C2, 0x9655, 0xC9C3, 0x64C5, 0xC9C4, 0x8D61, 0xC9C5, 0x81B3, - 0xC9C6, 0x5584, 0xC9C7, 0x6C55, 0xC9C8, 0x6247, 0xC9C9, 0x7F2E, - 0xC9CA, 0x5892, 0xC9CB, 0x4F24, 0xC9CC, 0x5546, 0xC9CD, 0x8D4F, - 0xC9CE, 0x664C, 0xC9CF, 0x4E0A, 0xC9D0, 0x5C1A, 0xC9D1, 0x88F3, - 0xC9D2, 0x68A2, 0xC9D3, 0x634E, 0xC9D4, 0x7A0D, 0xC9D5, 0x70E7, - 0xC9D6, 0x828D, 0xC9D7, 0x52FA, 0xC9D8, 0x97F6, 0xC9D9, 0x5C11, - 0xC9DA, 0x54E8, 0xC9DB, 0x90B5, 0xC9DC, 0x7ECD, 0xC9DD, 0x5962, - 0xC9DE, 0x8D4A, 0xC9DF, 0x86C7, 0xC9E0, 0x820C, 0xC9E1, 0x820D, - 0xC9E2, 0x8D66, 0xC9E3, 0x6444, 0xC9E4, 0x5C04, 0xC9E5, 0x6151, - 0xC9E6, 0x6D89, 0xC9E7, 0x793E, 0xC9E8, 0x8BBE, 0xC9E9, 0x7837, - 0xC9EA, 0x7533, 0xC9EB, 0x547B, 0xC9EC, 0x4F38, 0xC9ED, 0x8EAB, - 0xC9EE, 0x6DF1, 0xC9EF, 0x5A20, 0xC9F0, 0x7EC5, 0xC9F1, 0x795E, - 0xC9F2, 0x6C88, 0xC9F3, 0x5BA1, 0xC9F4, 0x5A76, 0xC9F5, 0x751A, - 0xC9F6, 0x80BE, 0xC9F7, 0x614E, 0xC9F8, 0x6E17, 0xC9F9, 0x58F0, - 0xC9FA, 0x751F, 0xC9FB, 0x7525, 0xC9FC, 0x7272, 0xC9FD, 0x5347, - 0xC9FE, 0x7EF3, 0xCA40, 0x8503, 0xCA41, 0x8504, 0xCA42, 0x8505, - 0xCA43, 0x8506, 0xCA44, 0x8507, 0xCA45, 0x8508, 0xCA46, 0x8509, - 0xCA47, 0x850A, 0xCA48, 0x850B, 0xCA49, 0x850D, 0xCA4A, 0x850E, - 0xCA4B, 0x850F, 0xCA4C, 0x8510, 0xCA4D, 0x8512, 0xCA4E, 0x8514, - 0xCA4F, 0x8515, 0xCA50, 0x8516, 0xCA51, 0x8518, 0xCA52, 0x8519, - 0xCA53, 0x851B, 0xCA54, 0x851C, 0xCA55, 0x851D, 0xCA56, 0x851E, - 0xCA57, 0x8520, 0xCA58, 0x8522, 0xCA59, 0x8523, 0xCA5A, 0x8524, - 0xCA5B, 0x8525, 0xCA5C, 0x8526, 0xCA5D, 0x8527, 0xCA5E, 0x8528, - 0xCA5F, 0x8529, 0xCA60, 0x852A, 0xCA61, 0x852D, 0xCA62, 0x852E, - 0xCA63, 0x852F, 0xCA64, 0x8530, 0xCA65, 0x8531, 0xCA66, 0x8532, - 0xCA67, 0x8533, 0xCA68, 0x8534, 0xCA69, 0x8535, 0xCA6A, 0x8536, - 0xCA6B, 0x853E, 0xCA6C, 0x853F, 0xCA6D, 0x8540, 0xCA6E, 0x8541, - 0xCA6F, 0x8542, 0xCA70, 0x8544, 0xCA71, 0x8545, 0xCA72, 0x8546, - 0xCA73, 0x8547, 0xCA74, 0x854B, 0xCA75, 0x854C, 0xCA76, 0x854D, - 0xCA77, 0x854E, 0xCA78, 0x854F, 0xCA79, 0x8550, 0xCA7A, 0x8551, - 0xCA7B, 0x8552, 0xCA7C, 0x8553, 0xCA7D, 0x8554, 0xCA7E, 0x8555, - 0xCA80, 0x8557, 0xCA81, 0x8558, 0xCA82, 0x855A, 0xCA83, 0x855B, - 0xCA84, 0x855C, 0xCA85, 0x855D, 0xCA86, 0x855F, 0xCA87, 0x8560, - 0xCA88, 0x8561, 0xCA89, 0x8562, 0xCA8A, 0x8563, 0xCA8B, 0x8565, - 0xCA8C, 0x8566, 0xCA8D, 0x8567, 0xCA8E, 0x8569, 0xCA8F, 0x856A, - 0xCA90, 0x856B, 0xCA91, 0x856C, 0xCA92, 0x856D, 0xCA93, 0x856E, - 0xCA94, 0x856F, 0xCA95, 0x8570, 0xCA96, 0x8571, 0xCA97, 0x8573, - 0xCA98, 0x8575, 0xCA99, 0x8576, 0xCA9A, 0x8577, 0xCA9B, 0x8578, - 0xCA9C, 0x857C, 0xCA9D, 0x857D, 0xCA9E, 0x857F, 0xCA9F, 0x8580, - 0xCAA0, 0x8581, 0xCAA1, 0x7701, 0xCAA2, 0x76DB, 0xCAA3, 0x5269, - 0xCAA4, 0x80DC, 0xCAA5, 0x5723, 0xCAA6, 0x5E08, 0xCAA7, 0x5931, - 0xCAA8, 0x72EE, 0xCAA9, 0x65BD, 0xCAAA, 0x6E7F, 0xCAAB, 0x8BD7, - 0xCAAC, 0x5C38, 0xCAAD, 0x8671, 0xCAAE, 0x5341, 0xCAAF, 0x77F3, - 0xCAB0, 0x62FE, 0xCAB1, 0x65F6, 0xCAB2, 0x4EC0, 0xCAB3, 0x98DF, - 0xCAB4, 0x8680, 0xCAB5, 0x5B9E, 0xCAB6, 0x8BC6, 0xCAB7, 0x53F2, - 0xCAB8, 0x77E2, 0xCAB9, 0x4F7F, 0xCABA, 0x5C4E, 0xCABB, 0x9A76, - 0xCABC, 0x59CB, 0xCABD, 0x5F0F, 0xCABE, 0x793A, 0xCABF, 0x58EB, - 0xCAC0, 0x4E16, 0xCAC1, 0x67FF, 0xCAC2, 0x4E8B, 0xCAC3, 0x62ED, - 0xCAC4, 0x8A93, 0xCAC5, 0x901D, 0xCAC6, 0x52BF, 0xCAC7, 0x662F, - 0xCAC8, 0x55DC, 0xCAC9, 0x566C, 0xCACA, 0x9002, 0xCACB, 0x4ED5, - 0xCACC, 0x4F8D, 0xCACD, 0x91CA, 0xCACE, 0x9970, 0xCACF, 0x6C0F, - 0xCAD0, 0x5E02, 0xCAD1, 0x6043, 0xCAD2, 0x5BA4, 0xCAD3, 0x89C6, - 0xCAD4, 0x8BD5, 0xCAD5, 0x6536, 0xCAD6, 0x624B, 0xCAD7, 0x9996, - 0xCAD8, 0x5B88, 0xCAD9, 0x5BFF, 0xCADA, 0x6388, 0xCADB, 0x552E, - 0xCADC, 0x53D7, 0xCADD, 0x7626, 0xCADE, 0x517D, 0xCADF, 0x852C, - 0xCAE0, 0x67A2, 0xCAE1, 0x68B3, 0xCAE2, 0x6B8A, 0xCAE3, 0x6292, - 0xCAE4, 0x8F93, 0xCAE5, 0x53D4, 0xCAE6, 0x8212, 0xCAE7, 0x6DD1, - 0xCAE8, 0x758F, 0xCAE9, 0x4E66, 0xCAEA, 0x8D4E, 0xCAEB, 0x5B70, - 0xCAEC, 0x719F, 0xCAED, 0x85AF, 0xCAEE, 0x6691, 0xCAEF, 0x66D9, - 0xCAF0, 0x7F72, 0xCAF1, 0x8700, 0xCAF2, 0x9ECD, 0xCAF3, 0x9F20, - 0xCAF4, 0x5C5E, 0xCAF5, 0x672F, 0xCAF6, 0x8FF0, 0xCAF7, 0x6811, - 0xCAF8, 0x675F, 0xCAF9, 0x620D, 0xCAFA, 0x7AD6, 0xCAFB, 0x5885, - 0xCAFC, 0x5EB6, 0xCAFD, 0x6570, 0xCAFE, 0x6F31, 0xCB40, 0x8582, - 0xCB41, 0x8583, 0xCB42, 0x8586, 0xCB43, 0x8588, 0xCB44, 0x8589, - 0xCB45, 0x858A, 0xCB46, 0x858B, 0xCB47, 0x858C, 0xCB48, 0x858D, - 0xCB49, 0x858E, 0xCB4A, 0x8590, 0xCB4B, 0x8591, 0xCB4C, 0x8592, - 0xCB4D, 0x8593, 0xCB4E, 0x8594, 0xCB4F, 0x8595, 0xCB50, 0x8596, - 0xCB51, 0x8597, 0xCB52, 0x8598, 0xCB53, 0x8599, 0xCB54, 0x859A, - 0xCB55, 0x859D, 0xCB56, 0x859E, 0xCB57, 0x859F, 0xCB58, 0x85A0, - 0xCB59, 0x85A1, 0xCB5A, 0x85A2, 0xCB5B, 0x85A3, 0xCB5C, 0x85A5, - 0xCB5D, 0x85A6, 0xCB5E, 0x85A7, 0xCB5F, 0x85A9, 0xCB60, 0x85AB, - 0xCB61, 0x85AC, 0xCB62, 0x85AD, 0xCB63, 0x85B1, 0xCB64, 0x85B2, - 0xCB65, 0x85B3, 0xCB66, 0x85B4, 0xCB67, 0x85B5, 0xCB68, 0x85B6, - 0xCB69, 0x85B8, 0xCB6A, 0x85BA, 0xCB6B, 0x85BB, 0xCB6C, 0x85BC, - 0xCB6D, 0x85BD, 0xCB6E, 0x85BE, 0xCB6F, 0x85BF, 0xCB70, 0x85C0, - 0xCB71, 0x85C2, 0xCB72, 0x85C3, 0xCB73, 0x85C4, 0xCB74, 0x85C5, - 0xCB75, 0x85C6, 0xCB76, 0x85C7, 0xCB77, 0x85C8, 0xCB78, 0x85CA, - 0xCB79, 0x85CB, 0xCB7A, 0x85CC, 0xCB7B, 0x85CD, 0xCB7C, 0x85CE, - 0xCB7D, 0x85D1, 0xCB7E, 0x85D2, 0xCB80, 0x85D4, 0xCB81, 0x85D6, - 0xCB82, 0x85D7, 0xCB83, 0x85D8, 0xCB84, 0x85D9, 0xCB85, 0x85DA, - 0xCB86, 0x85DB, 0xCB87, 0x85DD, 0xCB88, 0x85DE, 0xCB89, 0x85DF, - 0xCB8A, 0x85E0, 0xCB8B, 0x85E1, 0xCB8C, 0x85E2, 0xCB8D, 0x85E3, - 0xCB8E, 0x85E5, 0xCB8F, 0x85E6, 0xCB90, 0x85E7, 0xCB91, 0x85E8, - 0xCB92, 0x85EA, 0xCB93, 0x85EB, 0xCB94, 0x85EC, 0xCB95, 0x85ED, - 0xCB96, 0x85EE, 0xCB97, 0x85EF, 0xCB98, 0x85F0, 0xCB99, 0x85F1, - 0xCB9A, 0x85F2, 0xCB9B, 0x85F3, 0xCB9C, 0x85F4, 0xCB9D, 0x85F5, - 0xCB9E, 0x85F6, 0xCB9F, 0x85F7, 0xCBA0, 0x85F8, 0xCBA1, 0x6055, - 0xCBA2, 0x5237, 0xCBA3, 0x800D, 0xCBA4, 0x6454, 0xCBA5, 0x8870, - 0xCBA6, 0x7529, 0xCBA7, 0x5E05, 0xCBA8, 0x6813, 0xCBA9, 0x62F4, - 0xCBAA, 0x971C, 0xCBAB, 0x53CC, 0xCBAC, 0x723D, 0xCBAD, 0x8C01, - 0xCBAE, 0x6C34, 0xCBAF, 0x7761, 0xCBB0, 0x7A0E, 0xCBB1, 0x542E, - 0xCBB2, 0x77AC, 0xCBB3, 0x987A, 0xCBB4, 0x821C, 0xCBB5, 0x8BF4, - 0xCBB6, 0x7855, 0xCBB7, 0x6714, 0xCBB8, 0x70C1, 0xCBB9, 0x65AF, - 0xCBBA, 0x6495, 0xCBBB, 0x5636, 0xCBBC, 0x601D, 0xCBBD, 0x79C1, - 0xCBBE, 0x53F8, 0xCBBF, 0x4E1D, 0xCBC0, 0x6B7B, 0xCBC1, 0x8086, - 0xCBC2, 0x5BFA, 0xCBC3, 0x55E3, 0xCBC4, 0x56DB, 0xCBC5, 0x4F3A, - 0xCBC6, 0x4F3C, 0xCBC7, 0x9972, 0xCBC8, 0x5DF3, 0xCBC9, 0x677E, - 0xCBCA, 0x8038, 0xCBCB, 0x6002, 0xCBCC, 0x9882, 0xCBCD, 0x9001, - 0xCBCE, 0x5B8B, 0xCBCF, 0x8BBC, 0xCBD0, 0x8BF5, 0xCBD1, 0x641C, - 0xCBD2, 0x8258, 0xCBD3, 0x64DE, 0xCBD4, 0x55FD, 0xCBD5, 0x82CF, - 0xCBD6, 0x9165, 0xCBD7, 0x4FD7, 0xCBD8, 0x7D20, 0xCBD9, 0x901F, - 0xCBDA, 0x7C9F, 0xCBDB, 0x50F3, 0xCBDC, 0x5851, 0xCBDD, 0x6EAF, - 0xCBDE, 0x5BBF, 0xCBDF, 0x8BC9, 0xCBE0, 0x8083, 0xCBE1, 0x9178, - 0xCBE2, 0x849C, 0xCBE3, 0x7B97, 0xCBE4, 0x867D, 0xCBE5, 0x968B, - 0xCBE6, 0x968F, 0xCBE7, 0x7EE5, 0xCBE8, 0x9AD3, 0xCBE9, 0x788E, - 0xCBEA, 0x5C81, 0xCBEB, 0x7A57, 0xCBEC, 0x9042, 0xCBED, 0x96A7, - 0xCBEE, 0x795F, 0xCBEF, 0x5B59, 0xCBF0, 0x635F, 0xCBF1, 0x7B0B, - 0xCBF2, 0x84D1, 0xCBF3, 0x68AD, 0xCBF4, 0x5506, 0xCBF5, 0x7F29, - 0xCBF6, 0x7410, 0xCBF7, 0x7D22, 0xCBF8, 0x9501, 0xCBF9, 0x6240, - 0xCBFA, 0x584C, 0xCBFB, 0x4ED6, 0xCBFC, 0x5B83, 0xCBFD, 0x5979, - 0xCBFE, 0x5854, 0xCC40, 0x85F9, 0xCC41, 0x85FA, 0xCC42, 0x85FC, - 0xCC43, 0x85FD, 0xCC44, 0x85FE, 0xCC45, 0x8600, 0xCC46, 0x8601, - 0xCC47, 0x8602, 0xCC48, 0x8603, 0xCC49, 0x8604, 0xCC4A, 0x8606, - 0xCC4B, 0x8607, 0xCC4C, 0x8608, 0xCC4D, 0x8609, 0xCC4E, 0x860A, - 0xCC4F, 0x860B, 0xCC50, 0x860C, 0xCC51, 0x860D, 0xCC52, 0x860E, - 0xCC53, 0x860F, 0xCC54, 0x8610, 0xCC55, 0x8612, 0xCC56, 0x8613, - 0xCC57, 0x8614, 0xCC58, 0x8615, 0xCC59, 0x8617, 0xCC5A, 0x8618, - 0xCC5B, 0x8619, 0xCC5C, 0x861A, 0xCC5D, 0x861B, 0xCC5E, 0x861C, - 0xCC5F, 0x861D, 0xCC60, 0x861E, 0xCC61, 0x861F, 0xCC62, 0x8620, - 0xCC63, 0x8621, 0xCC64, 0x8622, 0xCC65, 0x8623, 0xCC66, 0x8624, - 0xCC67, 0x8625, 0xCC68, 0x8626, 0xCC69, 0x8628, 0xCC6A, 0x862A, - 0xCC6B, 0x862B, 0xCC6C, 0x862C, 0xCC6D, 0x862D, 0xCC6E, 0x862E, - 0xCC6F, 0x862F, 0xCC70, 0x8630, 0xCC71, 0x8631, 0xCC72, 0x8632, - 0xCC73, 0x8633, 0xCC74, 0x8634, 0xCC75, 0x8635, 0xCC76, 0x8636, - 0xCC77, 0x8637, 0xCC78, 0x8639, 0xCC79, 0x863A, 0xCC7A, 0x863B, - 0xCC7B, 0x863D, 0xCC7C, 0x863E, 0xCC7D, 0x863F, 0xCC7E, 0x8640, - 0xCC80, 0x8641, 0xCC81, 0x8642, 0xCC82, 0x8643, 0xCC83, 0x8644, - 0xCC84, 0x8645, 0xCC85, 0x8646, 0xCC86, 0x8647, 0xCC87, 0x8648, - 0xCC88, 0x8649, 0xCC89, 0x864A, 0xCC8A, 0x864B, 0xCC8B, 0x864C, - 0xCC8C, 0x8652, 0xCC8D, 0x8653, 0xCC8E, 0x8655, 0xCC8F, 0x8656, - 0xCC90, 0x8657, 0xCC91, 0x8658, 0xCC92, 0x8659, 0xCC93, 0x865B, - 0xCC94, 0x865C, 0xCC95, 0x865D, 0xCC96, 0x865F, 0xCC97, 0x8660, - 0xCC98, 0x8661, 0xCC99, 0x8663, 0xCC9A, 0x8664, 0xCC9B, 0x8665, - 0xCC9C, 0x8666, 0xCC9D, 0x8667, 0xCC9E, 0x8668, 0xCC9F, 0x8669, - 0xCCA0, 0x866A, 0xCCA1, 0x736D, 0xCCA2, 0x631E, 0xCCA3, 0x8E4B, - 0xCCA4, 0x8E0F, 0xCCA5, 0x80CE, 0xCCA6, 0x82D4, 0xCCA7, 0x62AC, - 0xCCA8, 0x53F0, 0xCCA9, 0x6CF0, 0xCCAA, 0x915E, 0xCCAB, 0x592A, - 0xCCAC, 0x6001, 0xCCAD, 0x6C70, 0xCCAE, 0x574D, 0xCCAF, 0x644A, - 0xCCB0, 0x8D2A, 0xCCB1, 0x762B, 0xCCB2, 0x6EE9, 0xCCB3, 0x575B, - 0xCCB4, 0x6A80, 0xCCB5, 0x75F0, 0xCCB6, 0x6F6D, 0xCCB7, 0x8C2D, - 0xCCB8, 0x8C08, 0xCCB9, 0x5766, 0xCCBA, 0x6BEF, 0xCCBB, 0x8892, - 0xCCBC, 0x78B3, 0xCCBD, 0x63A2, 0xCCBE, 0x53F9, 0xCCBF, 0x70AD, - 0xCCC0, 0x6C64, 0xCCC1, 0x5858, 0xCCC2, 0x642A, 0xCCC3, 0x5802, - 0xCCC4, 0x68E0, 0xCCC5, 0x819B, 0xCCC6, 0x5510, 0xCCC7, 0x7CD6, - 0xCCC8, 0x5018, 0xCCC9, 0x8EBA, 0xCCCA, 0x6DCC, 0xCCCB, 0x8D9F, - 0xCCCC, 0x70EB, 0xCCCD, 0x638F, 0xCCCE, 0x6D9B, 0xCCCF, 0x6ED4, - 0xCCD0, 0x7EE6, 0xCCD1, 0x8404, 0xCCD2, 0x6843, 0xCCD3, 0x9003, - 0xCCD4, 0x6DD8, 0xCCD5, 0x9676, 0xCCD6, 0x8BA8, 0xCCD7, 0x5957, - 0xCCD8, 0x7279, 0xCCD9, 0x85E4, 0xCCDA, 0x817E, 0xCCDB, 0x75BC, - 0xCCDC, 0x8A8A, 0xCCDD, 0x68AF, 0xCCDE, 0x5254, 0xCCDF, 0x8E22, - 0xCCE0, 0x9511, 0xCCE1, 0x63D0, 0xCCE2, 0x9898, 0xCCE3, 0x8E44, - 0xCCE4, 0x557C, 0xCCE5, 0x4F53, 0xCCE6, 0x66FF, 0xCCE7, 0x568F, - 0xCCE8, 0x60D5, 0xCCE9, 0x6D95, 0xCCEA, 0x5243, 0xCCEB, 0x5C49, - 0xCCEC, 0x5929, 0xCCED, 0x6DFB, 0xCCEE, 0x586B, 0xCCEF, 0x7530, - 0xCCF0, 0x751C, 0xCCF1, 0x606C, 0xCCF2, 0x8214, 0xCCF3, 0x8146, - 0xCCF4, 0x6311, 0xCCF5, 0x6761, 0xCCF6, 0x8FE2, 0xCCF7, 0x773A, - 0xCCF8, 0x8DF3, 0xCCF9, 0x8D34, 0xCCFA, 0x94C1, 0xCCFB, 0x5E16, - 0xCCFC, 0x5385, 0xCCFD, 0x542C, 0xCCFE, 0x70C3, 0xCD40, 0x866D, - 0xCD41, 0x866F, 0xCD42, 0x8670, 0xCD43, 0x8672, 0xCD44, 0x8673, - 0xCD45, 0x8674, 0xCD46, 0x8675, 0xCD47, 0x8676, 0xCD48, 0x8677, - 0xCD49, 0x8678, 0xCD4A, 0x8683, 0xCD4B, 0x8684, 0xCD4C, 0x8685, - 0xCD4D, 0x8686, 0xCD4E, 0x8687, 0xCD4F, 0x8688, 0xCD50, 0x8689, - 0xCD51, 0x868E, 0xCD52, 0x868F, 0xCD53, 0x8690, 0xCD54, 0x8691, - 0xCD55, 0x8692, 0xCD56, 0x8694, 0xCD57, 0x8696, 0xCD58, 0x8697, - 0xCD59, 0x8698, 0xCD5A, 0x8699, 0xCD5B, 0x869A, 0xCD5C, 0x869B, - 0xCD5D, 0x869E, 0xCD5E, 0x869F, 0xCD5F, 0x86A0, 0xCD60, 0x86A1, - 0xCD61, 0x86A2, 0xCD62, 0x86A5, 0xCD63, 0x86A6, 0xCD64, 0x86AB, - 0xCD65, 0x86AD, 0xCD66, 0x86AE, 0xCD67, 0x86B2, 0xCD68, 0x86B3, - 0xCD69, 0x86B7, 0xCD6A, 0x86B8, 0xCD6B, 0x86B9, 0xCD6C, 0x86BB, - 0xCD6D, 0x86BC, 0xCD6E, 0x86BD, 0xCD6F, 0x86BE, 0xCD70, 0x86BF, - 0xCD71, 0x86C1, 0xCD72, 0x86C2, 0xCD73, 0x86C3, 0xCD74, 0x86C5, - 0xCD75, 0x86C8, 0xCD76, 0x86CC, 0xCD77, 0x86CD, 0xCD78, 0x86D2, - 0xCD79, 0x86D3, 0xCD7A, 0x86D5, 0xCD7B, 0x86D6, 0xCD7C, 0x86D7, - 0xCD7D, 0x86DA, 0xCD7E, 0x86DC, 0xCD80, 0x86DD, 0xCD81, 0x86E0, - 0xCD82, 0x86E1, 0xCD83, 0x86E2, 0xCD84, 0x86E3, 0xCD85, 0x86E5, - 0xCD86, 0x86E6, 0xCD87, 0x86E7, 0xCD88, 0x86E8, 0xCD89, 0x86EA, - 0xCD8A, 0x86EB, 0xCD8B, 0x86EC, 0xCD8C, 0x86EF, 0xCD8D, 0x86F5, - 0xCD8E, 0x86F6, 0xCD8F, 0x86F7, 0xCD90, 0x86FA, 0xCD91, 0x86FB, - 0xCD92, 0x86FC, 0xCD93, 0x86FD, 0xCD94, 0x86FF, 0xCD95, 0x8701, - 0xCD96, 0x8704, 0xCD97, 0x8705, 0xCD98, 0x8706, 0xCD99, 0x870B, - 0xCD9A, 0x870C, 0xCD9B, 0x870E, 0xCD9C, 0x870F, 0xCD9D, 0x8710, - 0xCD9E, 0x8711, 0xCD9F, 0x8714, 0xCDA0, 0x8716, 0xCDA1, 0x6C40, - 0xCDA2, 0x5EF7, 0xCDA3, 0x505C, 0xCDA4, 0x4EAD, 0xCDA5, 0x5EAD, - 0xCDA6, 0x633A, 0xCDA7, 0x8247, 0xCDA8, 0x901A, 0xCDA9, 0x6850, - 0xCDAA, 0x916E, 0xCDAB, 0x77B3, 0xCDAC, 0x540C, 0xCDAD, 0x94DC, - 0xCDAE, 0x5F64, 0xCDAF, 0x7AE5, 0xCDB0, 0x6876, 0xCDB1, 0x6345, - 0xCDB2, 0x7B52, 0xCDB3, 0x7EDF, 0xCDB4, 0x75DB, 0xCDB5, 0x5077, - 0xCDB6, 0x6295, 0xCDB7, 0x5934, 0xCDB8, 0x900F, 0xCDB9, 0x51F8, - 0xCDBA, 0x79C3, 0xCDBB, 0x7A81, 0xCDBC, 0x56FE, 0xCDBD, 0x5F92, - 0xCDBE, 0x9014, 0xCDBF, 0x6D82, 0xCDC0, 0x5C60, 0xCDC1, 0x571F, - 0xCDC2, 0x5410, 0xCDC3, 0x5154, 0xCDC4, 0x6E4D, 0xCDC5, 0x56E2, - 0xCDC6, 0x63A8, 0xCDC7, 0x9893, 0xCDC8, 0x817F, 0xCDC9, 0x8715, - 0xCDCA, 0x892A, 0xCDCB, 0x9000, 0xCDCC, 0x541E, 0xCDCD, 0x5C6F, - 0xCDCE, 0x81C0, 0xCDCF, 0x62D6, 0xCDD0, 0x6258, 0xCDD1, 0x8131, - 0xCDD2, 0x9E35, 0xCDD3, 0x9640, 0xCDD4, 0x9A6E, 0xCDD5, 0x9A7C, - 0xCDD6, 0x692D, 0xCDD7, 0x59A5, 0xCDD8, 0x62D3, 0xCDD9, 0x553E, - 0xCDDA, 0x6316, 0xCDDB, 0x54C7, 0xCDDC, 0x86D9, 0xCDDD, 0x6D3C, - 0xCDDE, 0x5A03, 0xCDDF, 0x74E6, 0xCDE0, 0x889C, 0xCDE1, 0x6B6A, - 0xCDE2, 0x5916, 0xCDE3, 0x8C4C, 0xCDE4, 0x5F2F, 0xCDE5, 0x6E7E, - 0xCDE6, 0x73A9, 0xCDE7, 0x987D, 0xCDE8, 0x4E38, 0xCDE9, 0x70F7, - 0xCDEA, 0x5B8C, 0xCDEB, 0x7897, 0xCDEC, 0x633D, 0xCDED, 0x665A, - 0xCDEE, 0x7696, 0xCDEF, 0x60CB, 0xCDF0, 0x5B9B, 0xCDF1, 0x5A49, - 0xCDF2, 0x4E07, 0xCDF3, 0x8155, 0xCDF4, 0x6C6A, 0xCDF5, 0x738B, - 0xCDF6, 0x4EA1, 0xCDF7, 0x6789, 0xCDF8, 0x7F51, 0xCDF9, 0x5F80, - 0xCDFA, 0x65FA, 0xCDFB, 0x671B, 0xCDFC, 0x5FD8, 0xCDFD, 0x5984, - 0xCDFE, 0x5A01, 0xCE40, 0x8719, 0xCE41, 0x871B, 0xCE42, 0x871D, - 0xCE43, 0x871F, 0xCE44, 0x8720, 0xCE45, 0x8724, 0xCE46, 0x8726, - 0xCE47, 0x8727, 0xCE48, 0x8728, 0xCE49, 0x872A, 0xCE4A, 0x872B, - 0xCE4B, 0x872C, 0xCE4C, 0x872D, 0xCE4D, 0x872F, 0xCE4E, 0x8730, - 0xCE4F, 0x8732, 0xCE50, 0x8733, 0xCE51, 0x8735, 0xCE52, 0x8736, - 0xCE53, 0x8738, 0xCE54, 0x8739, 0xCE55, 0x873A, 0xCE56, 0x873C, - 0xCE57, 0x873D, 0xCE58, 0x8740, 0xCE59, 0x8741, 0xCE5A, 0x8742, - 0xCE5B, 0x8743, 0xCE5C, 0x8744, 0xCE5D, 0x8745, 0xCE5E, 0x8746, - 0xCE5F, 0x874A, 0xCE60, 0x874B, 0xCE61, 0x874D, 0xCE62, 0x874F, - 0xCE63, 0x8750, 0xCE64, 0x8751, 0xCE65, 0x8752, 0xCE66, 0x8754, - 0xCE67, 0x8755, 0xCE68, 0x8756, 0xCE69, 0x8758, 0xCE6A, 0x875A, - 0xCE6B, 0x875B, 0xCE6C, 0x875C, 0xCE6D, 0x875D, 0xCE6E, 0x875E, - 0xCE6F, 0x875F, 0xCE70, 0x8761, 0xCE71, 0x8762, 0xCE72, 0x8766, - 0xCE73, 0x8767, 0xCE74, 0x8768, 0xCE75, 0x8769, 0xCE76, 0x876A, - 0xCE77, 0x876B, 0xCE78, 0x876C, 0xCE79, 0x876D, 0xCE7A, 0x876F, - 0xCE7B, 0x8771, 0xCE7C, 0x8772, 0xCE7D, 0x8773, 0xCE7E, 0x8775, - 0xCE80, 0x8777, 0xCE81, 0x8778, 0xCE82, 0x8779, 0xCE83, 0x877A, - 0xCE84, 0x877F, 0xCE85, 0x8780, 0xCE86, 0x8781, 0xCE87, 0x8784, - 0xCE88, 0x8786, 0xCE89, 0x8787, 0xCE8A, 0x8789, 0xCE8B, 0x878A, - 0xCE8C, 0x878C, 0xCE8D, 0x878E, 0xCE8E, 0x878F, 0xCE8F, 0x8790, - 0xCE90, 0x8791, 0xCE91, 0x8792, 0xCE92, 0x8794, 0xCE93, 0x8795, - 0xCE94, 0x8796, 0xCE95, 0x8798, 0xCE96, 0x8799, 0xCE97, 0x879A, - 0xCE98, 0x879B, 0xCE99, 0x879C, 0xCE9A, 0x879D, 0xCE9B, 0x879E, - 0xCE9C, 0x87A0, 0xCE9D, 0x87A1, 0xCE9E, 0x87A2, 0xCE9F, 0x87A3, - 0xCEA0, 0x87A4, 0xCEA1, 0x5DCD, 0xCEA2, 0x5FAE, 0xCEA3, 0x5371, - 0xCEA4, 0x97E6, 0xCEA5, 0x8FDD, 0xCEA6, 0x6845, 0xCEA7, 0x56F4, - 0xCEA8, 0x552F, 0xCEA9, 0x60DF, 0xCEAA, 0x4E3A, 0xCEAB, 0x6F4D, - 0xCEAC, 0x7EF4, 0xCEAD, 0x82C7, 0xCEAE, 0x840E, 0xCEAF, 0x59D4, - 0xCEB0, 0x4F1F, 0xCEB1, 0x4F2A, 0xCEB2, 0x5C3E, 0xCEB3, 0x7EAC, - 0xCEB4, 0x672A, 0xCEB5, 0x851A, 0xCEB6, 0x5473, 0xCEB7, 0x754F, - 0xCEB8, 0x80C3, 0xCEB9, 0x5582, 0xCEBA, 0x9B4F, 0xCEBB, 0x4F4D, - 0xCEBC, 0x6E2D, 0xCEBD, 0x8C13, 0xCEBE, 0x5C09, 0xCEBF, 0x6170, - 0xCEC0, 0x536B, 0xCEC1, 0x761F, 0xCEC2, 0x6E29, 0xCEC3, 0x868A, - 0xCEC4, 0x6587, 0xCEC5, 0x95FB, 0xCEC6, 0x7EB9, 0xCEC7, 0x543B, - 0xCEC8, 0x7A33, 0xCEC9, 0x7D0A, 0xCECA, 0x95EE, 0xCECB, 0x55E1, - 0xCECC, 0x7FC1, 0xCECD, 0x74EE, 0xCECE, 0x631D, 0xCECF, 0x8717, - 0xCED0, 0x6DA1, 0xCED1, 0x7A9D, 0xCED2, 0x6211, 0xCED3, 0x65A1, - 0xCED4, 0x5367, 0xCED5, 0x63E1, 0xCED6, 0x6C83, 0xCED7, 0x5DEB, - 0xCED8, 0x545C, 0xCED9, 0x94A8, 0xCEDA, 0x4E4C, 0xCEDB, 0x6C61, - 0xCEDC, 0x8BEC, 0xCEDD, 0x5C4B, 0xCEDE, 0x65E0, 0xCEDF, 0x829C, - 0xCEE0, 0x68A7, 0xCEE1, 0x543E, 0xCEE2, 0x5434, 0xCEE3, 0x6BCB, - 0xCEE4, 0x6B66, 0xCEE5, 0x4E94, 0xCEE6, 0x6342, 0xCEE7, 0x5348, - 0xCEE8, 0x821E, 0xCEE9, 0x4F0D, 0xCEEA, 0x4FAE, 0xCEEB, 0x575E, - 0xCEEC, 0x620A, 0xCEED, 0x96FE, 0xCEEE, 0x6664, 0xCEEF, 0x7269, - 0xCEF0, 0x52FF, 0xCEF1, 0x52A1, 0xCEF2, 0x609F, 0xCEF3, 0x8BEF, - 0xCEF4, 0x6614, 0xCEF5, 0x7199, 0xCEF6, 0x6790, 0xCEF7, 0x897F, - 0xCEF8, 0x7852, 0xCEF9, 0x77FD, 0xCEFA, 0x6670, 0xCEFB, 0x563B, - 0xCEFC, 0x5438, 0xCEFD, 0x9521, 0xCEFE, 0x727A, 0xCF40, 0x87A5, - 0xCF41, 0x87A6, 0xCF42, 0x87A7, 0xCF43, 0x87A9, 0xCF44, 0x87AA, - 0xCF45, 0x87AE, 0xCF46, 0x87B0, 0xCF47, 0x87B1, 0xCF48, 0x87B2, - 0xCF49, 0x87B4, 0xCF4A, 0x87B6, 0xCF4B, 0x87B7, 0xCF4C, 0x87B8, - 0xCF4D, 0x87B9, 0xCF4E, 0x87BB, 0xCF4F, 0x87BC, 0xCF50, 0x87BE, - 0xCF51, 0x87BF, 0xCF52, 0x87C1, 0xCF53, 0x87C2, 0xCF54, 0x87C3, - 0xCF55, 0x87C4, 0xCF56, 0x87C5, 0xCF57, 0x87C7, 0xCF58, 0x87C8, - 0xCF59, 0x87C9, 0xCF5A, 0x87CC, 0xCF5B, 0x87CD, 0xCF5C, 0x87CE, - 0xCF5D, 0x87CF, 0xCF5E, 0x87D0, 0xCF5F, 0x87D4, 0xCF60, 0x87D5, - 0xCF61, 0x87D6, 0xCF62, 0x87D7, 0xCF63, 0x87D8, 0xCF64, 0x87D9, - 0xCF65, 0x87DA, 0xCF66, 0x87DC, 0xCF67, 0x87DD, 0xCF68, 0x87DE, - 0xCF69, 0x87DF, 0xCF6A, 0x87E1, 0xCF6B, 0x87E2, 0xCF6C, 0x87E3, - 0xCF6D, 0x87E4, 0xCF6E, 0x87E6, 0xCF6F, 0x87E7, 0xCF70, 0x87E8, - 0xCF71, 0x87E9, 0xCF72, 0x87EB, 0xCF73, 0x87EC, 0xCF74, 0x87ED, - 0xCF75, 0x87EF, 0xCF76, 0x87F0, 0xCF77, 0x87F1, 0xCF78, 0x87F2, - 0xCF79, 0x87F3, 0xCF7A, 0x87F4, 0xCF7B, 0x87F5, 0xCF7C, 0x87F6, - 0xCF7D, 0x87F7, 0xCF7E, 0x87F8, 0xCF80, 0x87FA, 0xCF81, 0x87FB, - 0xCF82, 0x87FC, 0xCF83, 0x87FD, 0xCF84, 0x87FF, 0xCF85, 0x8800, - 0xCF86, 0x8801, 0xCF87, 0x8802, 0xCF88, 0x8804, 0xCF89, 0x8805, - 0xCF8A, 0x8806, 0xCF8B, 0x8807, 0xCF8C, 0x8808, 0xCF8D, 0x8809, - 0xCF8E, 0x880B, 0xCF8F, 0x880C, 0xCF90, 0x880D, 0xCF91, 0x880E, - 0xCF92, 0x880F, 0xCF93, 0x8810, 0xCF94, 0x8811, 0xCF95, 0x8812, - 0xCF96, 0x8814, 0xCF97, 0x8817, 0xCF98, 0x8818, 0xCF99, 0x8819, - 0xCF9A, 0x881A, 0xCF9B, 0x881C, 0xCF9C, 0x881D, 0xCF9D, 0x881E, - 0xCF9E, 0x881F, 0xCF9F, 0x8820, 0xCFA0, 0x8823, 0xCFA1, 0x7A00, - 0xCFA2, 0x606F, 0xCFA3, 0x5E0C, 0xCFA4, 0x6089, 0xCFA5, 0x819D, - 0xCFA6, 0x5915, 0xCFA7, 0x60DC, 0xCFA8, 0x7184, 0xCFA9, 0x70EF, - 0xCFAA, 0x6EAA, 0xCFAB, 0x6C50, 0xCFAC, 0x7280, 0xCFAD, 0x6A84, - 0xCFAE, 0x88AD, 0xCFAF, 0x5E2D, 0xCFB0, 0x4E60, 0xCFB1, 0x5AB3, - 0xCFB2, 0x559C, 0xCFB3, 0x94E3, 0xCFB4, 0x6D17, 0xCFB5, 0x7CFB, - 0xCFB6, 0x9699, 0xCFB7, 0x620F, 0xCFB8, 0x7EC6, 0xCFB9, 0x778E, - 0xCFBA, 0x867E, 0xCFBB, 0x5323, 0xCFBC, 0x971E, 0xCFBD, 0x8F96, - 0xCFBE, 0x6687, 0xCFBF, 0x5CE1, 0xCFC0, 0x4FA0, 0xCFC1, 0x72ED, - 0xCFC2, 0x4E0B, 0xCFC3, 0x53A6, 0xCFC4, 0x590F, 0xCFC5, 0x5413, - 0xCFC6, 0x6380, 0xCFC7, 0x9528, 0xCFC8, 0x5148, 0xCFC9, 0x4ED9, - 0xCFCA, 0x9C9C, 0xCFCB, 0x7EA4, 0xCFCC, 0x54B8, 0xCFCD, 0x8D24, - 0xCFCE, 0x8854, 0xCFCF, 0x8237, 0xCFD0, 0x95F2, 0xCFD1, 0x6D8E, - 0xCFD2, 0x5F26, 0xCFD3, 0x5ACC, 0xCFD4, 0x663E, 0xCFD5, 0x9669, - 0xCFD6, 0x73B0, 0xCFD7, 0x732E, 0xCFD8, 0x53BF, 0xCFD9, 0x817A, - 0xCFDA, 0x9985, 0xCFDB, 0x7FA1, 0xCFDC, 0x5BAA, 0xCFDD, 0x9677, - 0xCFDE, 0x9650, 0xCFDF, 0x7EBF, 0xCFE0, 0x76F8, 0xCFE1, 0x53A2, - 0xCFE2, 0x9576, 0xCFE3, 0x9999, 0xCFE4, 0x7BB1, 0xCFE5, 0x8944, - 0xCFE6, 0x6E58, 0xCFE7, 0x4E61, 0xCFE8, 0x7FD4, 0xCFE9, 0x7965, - 0xCFEA, 0x8BE6, 0xCFEB, 0x60F3, 0xCFEC, 0x54CD, 0xCFED, 0x4EAB, - 0xCFEE, 0x9879, 0xCFEF, 0x5DF7, 0xCFF0, 0x6A61, 0xCFF1, 0x50CF, - 0xCFF2, 0x5411, 0xCFF3, 0x8C61, 0xCFF4, 0x8427, 0xCFF5, 0x785D, - 0xCFF6, 0x9704, 0xCFF7, 0x524A, 0xCFF8, 0x54EE, 0xCFF9, 0x56A3, - 0xCFFA, 0x9500, 0xCFFB, 0x6D88, 0xCFFC, 0x5BB5, 0xCFFD, 0x6DC6, - 0xCFFE, 0x6653, 0xD040, 0x8824, 0xD041, 0x8825, 0xD042, 0x8826, - 0xD043, 0x8827, 0xD044, 0x8828, 0xD045, 0x8829, 0xD046, 0x882A, - 0xD047, 0x882B, 0xD048, 0x882C, 0xD049, 0x882D, 0xD04A, 0x882E, - 0xD04B, 0x882F, 0xD04C, 0x8830, 0xD04D, 0x8831, 0xD04E, 0x8833, - 0xD04F, 0x8834, 0xD050, 0x8835, 0xD051, 0x8836, 0xD052, 0x8837, - 0xD053, 0x8838, 0xD054, 0x883A, 0xD055, 0x883B, 0xD056, 0x883D, - 0xD057, 0x883E, 0xD058, 0x883F, 0xD059, 0x8841, 0xD05A, 0x8842, - 0xD05B, 0x8843, 0xD05C, 0x8846, 0xD05D, 0x8847, 0xD05E, 0x8848, - 0xD05F, 0x8849, 0xD060, 0x884A, 0xD061, 0x884B, 0xD062, 0x884E, - 0xD063, 0x884F, 0xD064, 0x8850, 0xD065, 0x8851, 0xD066, 0x8852, - 0xD067, 0x8853, 0xD068, 0x8855, 0xD069, 0x8856, 0xD06A, 0x8858, - 0xD06B, 0x885A, 0xD06C, 0x885B, 0xD06D, 0x885C, 0xD06E, 0x885D, - 0xD06F, 0x885E, 0xD070, 0x885F, 0xD071, 0x8860, 0xD072, 0x8866, - 0xD073, 0x8867, 0xD074, 0x886A, 0xD075, 0x886D, 0xD076, 0x886F, - 0xD077, 0x8871, 0xD078, 0x8873, 0xD079, 0x8874, 0xD07A, 0x8875, - 0xD07B, 0x8876, 0xD07C, 0x8878, 0xD07D, 0x8879, 0xD07E, 0x887A, - 0xD080, 0x887B, 0xD081, 0x887C, 0xD082, 0x8880, 0xD083, 0x8883, - 0xD084, 0x8886, 0xD085, 0x8887, 0xD086, 0x8889, 0xD087, 0x888A, - 0xD088, 0x888C, 0xD089, 0x888E, 0xD08A, 0x888F, 0xD08B, 0x8890, - 0xD08C, 0x8891, 0xD08D, 0x8893, 0xD08E, 0x8894, 0xD08F, 0x8895, - 0xD090, 0x8897, 0xD091, 0x8898, 0xD092, 0x8899, 0xD093, 0x889A, - 0xD094, 0x889B, 0xD095, 0x889D, 0xD096, 0x889E, 0xD097, 0x889F, - 0xD098, 0x88A0, 0xD099, 0x88A1, 0xD09A, 0x88A3, 0xD09B, 0x88A5, - 0xD09C, 0x88A6, 0xD09D, 0x88A7, 0xD09E, 0x88A8, 0xD09F, 0x88A9, - 0xD0A0, 0x88AA, 0xD0A1, 0x5C0F, 0xD0A2, 0x5B5D, 0xD0A3, 0x6821, - 0xD0A4, 0x8096, 0xD0A5, 0x5578, 0xD0A6, 0x7B11, 0xD0A7, 0x6548, - 0xD0A8, 0x6954, 0xD0A9, 0x4E9B, 0xD0AA, 0x6B47, 0xD0AB, 0x874E, - 0xD0AC, 0x978B, 0xD0AD, 0x534F, 0xD0AE, 0x631F, 0xD0AF, 0x643A, - 0xD0B0, 0x90AA, 0xD0B1, 0x659C, 0xD0B2, 0x80C1, 0xD0B3, 0x8C10, - 0xD0B4, 0x5199, 0xD0B5, 0x68B0, 0xD0B6, 0x5378, 0xD0B7, 0x87F9, - 0xD0B8, 0x61C8, 0xD0B9, 0x6CC4, 0xD0BA, 0x6CFB, 0xD0BB, 0x8C22, - 0xD0BC, 0x5C51, 0xD0BD, 0x85AA, 0xD0BE, 0x82AF, 0xD0BF, 0x950C, - 0xD0C0, 0x6B23, 0xD0C1, 0x8F9B, 0xD0C2, 0x65B0, 0xD0C3, 0x5FFB, - 0xD0C4, 0x5FC3, 0xD0C5, 0x4FE1, 0xD0C6, 0x8845, 0xD0C7, 0x661F, - 0xD0C8, 0x8165, 0xD0C9, 0x7329, 0xD0CA, 0x60FA, 0xD0CB, 0x5174, - 0xD0CC, 0x5211, 0xD0CD, 0x578B, 0xD0CE, 0x5F62, 0xD0CF, 0x90A2, - 0xD0D0, 0x884C, 0xD0D1, 0x9192, 0xD0D2, 0x5E78, 0xD0D3, 0x674F, - 0xD0D4, 0x6027, 0xD0D5, 0x59D3, 0xD0D6, 0x5144, 0xD0D7, 0x51F6, - 0xD0D8, 0x80F8, 0xD0D9, 0x5308, 0xD0DA, 0x6C79, 0xD0DB, 0x96C4, - 0xD0DC, 0x718A, 0xD0DD, 0x4F11, 0xD0DE, 0x4FEE, 0xD0DF, 0x7F9E, - 0xD0E0, 0x673D, 0xD0E1, 0x55C5, 0xD0E2, 0x9508, 0xD0E3, 0x79C0, - 0xD0E4, 0x8896, 0xD0E5, 0x7EE3, 0xD0E6, 0x589F, 0xD0E7, 0x620C, - 0xD0E8, 0x9700, 0xD0E9, 0x865A, 0xD0EA, 0x5618, 0xD0EB, 0x987B, - 0xD0EC, 0x5F90, 0xD0ED, 0x8BB8, 0xD0EE, 0x84C4, 0xD0EF, 0x9157, - 0xD0F0, 0x53D9, 0xD0F1, 0x65ED, 0xD0F2, 0x5E8F, 0xD0F3, 0x755C, - 0xD0F4, 0x6064, 0xD0F5, 0x7D6E, 0xD0F6, 0x5A7F, 0xD0F7, 0x7EEA, - 0xD0F8, 0x7EED, 0xD0F9, 0x8F69, 0xD0FA, 0x55A7, 0xD0FB, 0x5BA3, - 0xD0FC, 0x60AC, 0xD0FD, 0x65CB, 0xD0FE, 0x7384, 0xD140, 0x88AC, - 0xD141, 0x88AE, 0xD142, 0x88AF, 0xD143, 0x88B0, 0xD144, 0x88B2, - 0xD145, 0x88B3, 0xD146, 0x88B4, 0xD147, 0x88B5, 0xD148, 0x88B6, - 0xD149, 0x88B8, 0xD14A, 0x88B9, 0xD14B, 0x88BA, 0xD14C, 0x88BB, - 0xD14D, 0x88BD, 0xD14E, 0x88BE, 0xD14F, 0x88BF, 0xD150, 0x88C0, - 0xD151, 0x88C3, 0xD152, 0x88C4, 0xD153, 0x88C7, 0xD154, 0x88C8, - 0xD155, 0x88CA, 0xD156, 0x88CB, 0xD157, 0x88CC, 0xD158, 0x88CD, - 0xD159, 0x88CF, 0xD15A, 0x88D0, 0xD15B, 0x88D1, 0xD15C, 0x88D3, - 0xD15D, 0x88D6, 0xD15E, 0x88D7, 0xD15F, 0x88DA, 0xD160, 0x88DB, - 0xD161, 0x88DC, 0xD162, 0x88DD, 0xD163, 0x88DE, 0xD164, 0x88E0, - 0xD165, 0x88E1, 0xD166, 0x88E6, 0xD167, 0x88E7, 0xD168, 0x88E9, - 0xD169, 0x88EA, 0xD16A, 0x88EB, 0xD16B, 0x88EC, 0xD16C, 0x88ED, - 0xD16D, 0x88EE, 0xD16E, 0x88EF, 0xD16F, 0x88F2, 0xD170, 0x88F5, - 0xD171, 0x88F6, 0xD172, 0x88F7, 0xD173, 0x88FA, 0xD174, 0x88FB, - 0xD175, 0x88FD, 0xD176, 0x88FF, 0xD177, 0x8900, 0xD178, 0x8901, - 0xD179, 0x8903, 0xD17A, 0x8904, 0xD17B, 0x8905, 0xD17C, 0x8906, - 0xD17D, 0x8907, 0xD17E, 0x8908, 0xD180, 0x8909, 0xD181, 0x890B, - 0xD182, 0x890C, 0xD183, 0x890D, 0xD184, 0x890E, 0xD185, 0x890F, - 0xD186, 0x8911, 0xD187, 0x8914, 0xD188, 0x8915, 0xD189, 0x8916, - 0xD18A, 0x8917, 0xD18B, 0x8918, 0xD18C, 0x891C, 0xD18D, 0x891D, - 0xD18E, 0x891E, 0xD18F, 0x891F, 0xD190, 0x8920, 0xD191, 0x8922, - 0xD192, 0x8923, 0xD193, 0x8924, 0xD194, 0x8926, 0xD195, 0x8927, - 0xD196, 0x8928, 0xD197, 0x8929, 0xD198, 0x892C, 0xD199, 0x892D, - 0xD19A, 0x892E, 0xD19B, 0x892F, 0xD19C, 0x8931, 0xD19D, 0x8932, - 0xD19E, 0x8933, 0xD19F, 0x8935, 0xD1A0, 0x8937, 0xD1A1, 0x9009, - 0xD1A2, 0x7663, 0xD1A3, 0x7729, 0xD1A4, 0x7EDA, 0xD1A5, 0x9774, - 0xD1A6, 0x859B, 0xD1A7, 0x5B66, 0xD1A8, 0x7A74, 0xD1A9, 0x96EA, - 0xD1AA, 0x8840, 0xD1AB, 0x52CB, 0xD1AC, 0x718F, 0xD1AD, 0x5FAA, - 0xD1AE, 0x65EC, 0xD1AF, 0x8BE2, 0xD1B0, 0x5BFB, 0xD1B1, 0x9A6F, - 0xD1B2, 0x5DE1, 0xD1B3, 0x6B89, 0xD1B4, 0x6C5B, 0xD1B5, 0x8BAD, - 0xD1B6, 0x8BAF, 0xD1B7, 0x900A, 0xD1B8, 0x8FC5, 0xD1B9, 0x538B, - 0xD1BA, 0x62BC, 0xD1BB, 0x9E26, 0xD1BC, 0x9E2D, 0xD1BD, 0x5440, - 0xD1BE, 0x4E2B, 0xD1BF, 0x82BD, 0xD1C0, 0x7259, 0xD1C1, 0x869C, - 0xD1C2, 0x5D16, 0xD1C3, 0x8859, 0xD1C4, 0x6DAF, 0xD1C5, 0x96C5, - 0xD1C6, 0x54D1, 0xD1C7, 0x4E9A, 0xD1C8, 0x8BB6, 0xD1C9, 0x7109, - 0xD1CA, 0x54BD, 0xD1CB, 0x9609, 0xD1CC, 0x70DF, 0xD1CD, 0x6DF9, - 0xD1CE, 0x76D0, 0xD1CF, 0x4E25, 0xD1D0, 0x7814, 0xD1D1, 0x8712, - 0xD1D2, 0x5CA9, 0xD1D3, 0x5EF6, 0xD1D4, 0x8A00, 0xD1D5, 0x989C, - 0xD1D6, 0x960E, 0xD1D7, 0x708E, 0xD1D8, 0x6CBF, 0xD1D9, 0x5944, - 0xD1DA, 0x63A9, 0xD1DB, 0x773C, 0xD1DC, 0x884D, 0xD1DD, 0x6F14, - 0xD1DE, 0x8273, 0xD1DF, 0x5830, 0xD1E0, 0x71D5, 0xD1E1, 0x538C, - 0xD1E2, 0x781A, 0xD1E3, 0x96C1, 0xD1E4, 0x5501, 0xD1E5, 0x5F66, - 0xD1E6, 0x7130, 0xD1E7, 0x5BB4, 0xD1E8, 0x8C1A, 0xD1E9, 0x9A8C, - 0xD1EA, 0x6B83, 0xD1EB, 0x592E, 0xD1EC, 0x9E2F, 0xD1ED, 0x79E7, - 0xD1EE, 0x6768, 0xD1EF, 0x626C, 0xD1F0, 0x4F6F, 0xD1F1, 0x75A1, - 0xD1F2, 0x7F8A, 0xD1F3, 0x6D0B, 0xD1F4, 0x9633, 0xD1F5, 0x6C27, - 0xD1F6, 0x4EF0, 0xD1F7, 0x75D2, 0xD1F8, 0x517B, 0xD1F9, 0x6837, - 0xD1FA, 0x6F3E, 0xD1FB, 0x9080, 0xD1FC, 0x8170, 0xD1FD, 0x5996, - 0xD1FE, 0x7476, 0xD240, 0x8938, 0xD241, 0x8939, 0xD242, 0x893A, - 0xD243, 0x893B, 0xD244, 0x893C, 0xD245, 0x893D, 0xD246, 0x893E, - 0xD247, 0x893F, 0xD248, 0x8940, 0xD249, 0x8942, 0xD24A, 0x8943, - 0xD24B, 0x8945, 0xD24C, 0x8946, 0xD24D, 0x8947, 0xD24E, 0x8948, - 0xD24F, 0x8949, 0xD250, 0x894A, 0xD251, 0x894B, 0xD252, 0x894C, - 0xD253, 0x894D, 0xD254, 0x894E, 0xD255, 0x894F, 0xD256, 0x8950, - 0xD257, 0x8951, 0xD258, 0x8952, 0xD259, 0x8953, 0xD25A, 0x8954, - 0xD25B, 0x8955, 0xD25C, 0x8956, 0xD25D, 0x8957, 0xD25E, 0x8958, - 0xD25F, 0x8959, 0xD260, 0x895A, 0xD261, 0x895B, 0xD262, 0x895C, - 0xD263, 0x895D, 0xD264, 0x8960, 0xD265, 0x8961, 0xD266, 0x8962, - 0xD267, 0x8963, 0xD268, 0x8964, 0xD269, 0x8965, 0xD26A, 0x8967, - 0xD26B, 0x8968, 0xD26C, 0x8969, 0xD26D, 0x896A, 0xD26E, 0x896B, - 0xD26F, 0x896C, 0xD270, 0x896D, 0xD271, 0x896E, 0xD272, 0x896F, - 0xD273, 0x8970, 0xD274, 0x8971, 0xD275, 0x8972, 0xD276, 0x8973, - 0xD277, 0x8974, 0xD278, 0x8975, 0xD279, 0x8976, 0xD27A, 0x8977, - 0xD27B, 0x8978, 0xD27C, 0x8979, 0xD27D, 0x897A, 0xD27E, 0x897C, - 0xD280, 0x897D, 0xD281, 0x897E, 0xD282, 0x8980, 0xD283, 0x8982, - 0xD284, 0x8984, 0xD285, 0x8985, 0xD286, 0x8987, 0xD287, 0x8988, - 0xD288, 0x8989, 0xD289, 0x898A, 0xD28A, 0x898B, 0xD28B, 0x898C, - 0xD28C, 0x898D, 0xD28D, 0x898E, 0xD28E, 0x898F, 0xD28F, 0x8990, - 0xD290, 0x8991, 0xD291, 0x8992, 0xD292, 0x8993, 0xD293, 0x8994, - 0xD294, 0x8995, 0xD295, 0x8996, 0xD296, 0x8997, 0xD297, 0x8998, - 0xD298, 0x8999, 0xD299, 0x899A, 0xD29A, 0x899B, 0xD29B, 0x899C, - 0xD29C, 0x899D, 0xD29D, 0x899E, 0xD29E, 0x899F, 0xD29F, 0x89A0, - 0xD2A0, 0x89A1, 0xD2A1, 0x6447, 0xD2A2, 0x5C27, 0xD2A3, 0x9065, - 0xD2A4, 0x7A91, 0xD2A5, 0x8C23, 0xD2A6, 0x59DA, 0xD2A7, 0x54AC, - 0xD2A8, 0x8200, 0xD2A9, 0x836F, 0xD2AA, 0x8981, 0xD2AB, 0x8000, - 0xD2AC, 0x6930, 0xD2AD, 0x564E, 0xD2AE, 0x8036, 0xD2AF, 0x7237, - 0xD2B0, 0x91CE, 0xD2B1, 0x51B6, 0xD2B2, 0x4E5F, 0xD2B3, 0x9875, - 0xD2B4, 0x6396, 0xD2B5, 0x4E1A, 0xD2B6, 0x53F6, 0xD2B7, 0x66F3, - 0xD2B8, 0x814B, 0xD2B9, 0x591C, 0xD2BA, 0x6DB2, 0xD2BB, 0x4E00, - 0xD2BC, 0x58F9, 0xD2BD, 0x533B, 0xD2BE, 0x63D6, 0xD2BF, 0x94F1, - 0xD2C0, 0x4F9D, 0xD2C1, 0x4F0A, 0xD2C2, 0x8863, 0xD2C3, 0x9890, - 0xD2C4, 0x5937, 0xD2C5, 0x9057, 0xD2C6, 0x79FB, 0xD2C7, 0x4EEA, - 0xD2C8, 0x80F0, 0xD2C9, 0x7591, 0xD2CA, 0x6C82, 0xD2CB, 0x5B9C, - 0xD2CC, 0x59E8, 0xD2CD, 0x5F5D, 0xD2CE, 0x6905, 0xD2CF, 0x8681, - 0xD2D0, 0x501A, 0xD2D1, 0x5DF2, 0xD2D2, 0x4E59, 0xD2D3, 0x77E3, - 0xD2D4, 0x4EE5, 0xD2D5, 0x827A, 0xD2D6, 0x6291, 0xD2D7, 0x6613, - 0xD2D8, 0x9091, 0xD2D9, 0x5C79, 0xD2DA, 0x4EBF, 0xD2DB, 0x5F79, - 0xD2DC, 0x81C6, 0xD2DD, 0x9038, 0xD2DE, 0x8084, 0xD2DF, 0x75AB, - 0xD2E0, 0x4EA6, 0xD2E1, 0x88D4, 0xD2E2, 0x610F, 0xD2E3, 0x6BC5, - 0xD2E4, 0x5FC6, 0xD2E5, 0x4E49, 0xD2E6, 0x76CA, 0xD2E7, 0x6EA2, - 0xD2E8, 0x8BE3, 0xD2E9, 0x8BAE, 0xD2EA, 0x8C0A, 0xD2EB, 0x8BD1, - 0xD2EC, 0x5F02, 0xD2ED, 0x7FFC, 0xD2EE, 0x7FCC, 0xD2EF, 0x7ECE, - 0xD2F0, 0x8335, 0xD2F1, 0x836B, 0xD2F2, 0x56E0, 0xD2F3, 0x6BB7, - 0xD2F4, 0x97F3, 0xD2F5, 0x9634, 0xD2F6, 0x59FB, 0xD2F7, 0x541F, - 0xD2F8, 0x94F6, 0xD2F9, 0x6DEB, 0xD2FA, 0x5BC5, 0xD2FB, 0x996E, - 0xD2FC, 0x5C39, 0xD2FD, 0x5F15, 0xD2FE, 0x9690, 0xD340, 0x89A2, - 0xD341, 0x89A3, 0xD342, 0x89A4, 0xD343, 0x89A5, 0xD344, 0x89A6, - 0xD345, 0x89A7, 0xD346, 0x89A8, 0xD347, 0x89A9, 0xD348, 0x89AA, - 0xD349, 0x89AB, 0xD34A, 0x89AC, 0xD34B, 0x89AD, 0xD34C, 0x89AE, - 0xD34D, 0x89AF, 0xD34E, 0x89B0, 0xD34F, 0x89B1, 0xD350, 0x89B2, - 0xD351, 0x89B3, 0xD352, 0x89B4, 0xD353, 0x89B5, 0xD354, 0x89B6, - 0xD355, 0x89B7, 0xD356, 0x89B8, 0xD357, 0x89B9, 0xD358, 0x89BA, - 0xD359, 0x89BB, 0xD35A, 0x89BC, 0xD35B, 0x89BD, 0xD35C, 0x89BE, - 0xD35D, 0x89BF, 0xD35E, 0x89C0, 0xD35F, 0x89C3, 0xD360, 0x89CD, - 0xD361, 0x89D3, 0xD362, 0x89D4, 0xD363, 0x89D5, 0xD364, 0x89D7, - 0xD365, 0x89D8, 0xD366, 0x89D9, 0xD367, 0x89DB, 0xD368, 0x89DD, - 0xD369, 0x89DF, 0xD36A, 0x89E0, 0xD36B, 0x89E1, 0xD36C, 0x89E2, - 0xD36D, 0x89E4, 0xD36E, 0x89E7, 0xD36F, 0x89E8, 0xD370, 0x89E9, - 0xD371, 0x89EA, 0xD372, 0x89EC, 0xD373, 0x89ED, 0xD374, 0x89EE, - 0xD375, 0x89F0, 0xD376, 0x89F1, 0xD377, 0x89F2, 0xD378, 0x89F4, - 0xD379, 0x89F5, 0xD37A, 0x89F6, 0xD37B, 0x89F7, 0xD37C, 0x89F8, - 0xD37D, 0x89F9, 0xD37E, 0x89FA, 0xD380, 0x89FB, 0xD381, 0x89FC, - 0xD382, 0x89FD, 0xD383, 0x89FE, 0xD384, 0x89FF, 0xD385, 0x8A01, - 0xD386, 0x8A02, 0xD387, 0x8A03, 0xD388, 0x8A04, 0xD389, 0x8A05, - 0xD38A, 0x8A06, 0xD38B, 0x8A08, 0xD38C, 0x8A09, 0xD38D, 0x8A0A, - 0xD38E, 0x8A0B, 0xD38F, 0x8A0C, 0xD390, 0x8A0D, 0xD391, 0x8A0E, - 0xD392, 0x8A0F, 0xD393, 0x8A10, 0xD394, 0x8A11, 0xD395, 0x8A12, - 0xD396, 0x8A13, 0xD397, 0x8A14, 0xD398, 0x8A15, 0xD399, 0x8A16, - 0xD39A, 0x8A17, 0xD39B, 0x8A18, 0xD39C, 0x8A19, 0xD39D, 0x8A1A, - 0xD39E, 0x8A1B, 0xD39F, 0x8A1C, 0xD3A0, 0x8A1D, 0xD3A1, 0x5370, - 0xD3A2, 0x82F1, 0xD3A3, 0x6A31, 0xD3A4, 0x5A74, 0xD3A5, 0x9E70, - 0xD3A6, 0x5E94, 0xD3A7, 0x7F28, 0xD3A8, 0x83B9, 0xD3A9, 0x8424, - 0xD3AA, 0x8425, 0xD3AB, 0x8367, 0xD3AC, 0x8747, 0xD3AD, 0x8FCE, - 0xD3AE, 0x8D62, 0xD3AF, 0x76C8, 0xD3B0, 0x5F71, 0xD3B1, 0x9896, - 0xD3B2, 0x786C, 0xD3B3, 0x6620, 0xD3B4, 0x54DF, 0xD3B5, 0x62E5, - 0xD3B6, 0x4F63, 0xD3B7, 0x81C3, 0xD3B8, 0x75C8, 0xD3B9, 0x5EB8, - 0xD3BA, 0x96CD, 0xD3BB, 0x8E0A, 0xD3BC, 0x86F9, 0xD3BD, 0x548F, - 0xD3BE, 0x6CF3, 0xD3BF, 0x6D8C, 0xD3C0, 0x6C38, 0xD3C1, 0x607F, - 0xD3C2, 0x52C7, 0xD3C3, 0x7528, 0xD3C4, 0x5E7D, 0xD3C5, 0x4F18, - 0xD3C6, 0x60A0, 0xD3C7, 0x5FE7, 0xD3C8, 0x5C24, 0xD3C9, 0x7531, - 0xD3CA, 0x90AE, 0xD3CB, 0x94C0, 0xD3CC, 0x72B9, 0xD3CD, 0x6CB9, - 0xD3CE, 0x6E38, 0xD3CF, 0x9149, 0xD3D0, 0x6709, 0xD3D1, 0x53CB, - 0xD3D2, 0x53F3, 0xD3D3, 0x4F51, 0xD3D4, 0x91C9, 0xD3D5, 0x8BF1, - 0xD3D6, 0x53C8, 0xD3D7, 0x5E7C, 0xD3D8, 0x8FC2, 0xD3D9, 0x6DE4, - 0xD3DA, 0x4E8E, 0xD3DB, 0x76C2, 0xD3DC, 0x6986, 0xD3DD, 0x865E, - 0xD3DE, 0x611A, 0xD3DF, 0x8206, 0xD3E0, 0x4F59, 0xD3E1, 0x4FDE, - 0xD3E2, 0x903E, 0xD3E3, 0x9C7C, 0xD3E4, 0x6109, 0xD3E5, 0x6E1D, - 0xD3E6, 0x6E14, 0xD3E7, 0x9685, 0xD3E8, 0x4E88, 0xD3E9, 0x5A31, - 0xD3EA, 0x96E8, 0xD3EB, 0x4E0E, 0xD3EC, 0x5C7F, 0xD3ED, 0x79B9, - 0xD3EE, 0x5B87, 0xD3EF, 0x8BED, 0xD3F0, 0x7FBD, 0xD3F1, 0x7389, - 0xD3F2, 0x57DF, 0xD3F3, 0x828B, 0xD3F4, 0x90C1, 0xD3F5, 0x5401, - 0xD3F6, 0x9047, 0xD3F7, 0x55BB, 0xD3F8, 0x5CEA, 0xD3F9, 0x5FA1, - 0xD3FA, 0x6108, 0xD3FB, 0x6B32, 0xD3FC, 0x72F1, 0xD3FD, 0x80B2, - 0xD3FE, 0x8A89, 0xD440, 0x8A1E, 0xD441, 0x8A1F, 0xD442, 0x8A20, - 0xD443, 0x8A21, 0xD444, 0x8A22, 0xD445, 0x8A23, 0xD446, 0x8A24, - 0xD447, 0x8A25, 0xD448, 0x8A26, 0xD449, 0x8A27, 0xD44A, 0x8A28, - 0xD44B, 0x8A29, 0xD44C, 0x8A2A, 0xD44D, 0x8A2B, 0xD44E, 0x8A2C, - 0xD44F, 0x8A2D, 0xD450, 0x8A2E, 0xD451, 0x8A2F, 0xD452, 0x8A30, - 0xD453, 0x8A31, 0xD454, 0x8A32, 0xD455, 0x8A33, 0xD456, 0x8A34, - 0xD457, 0x8A35, 0xD458, 0x8A36, 0xD459, 0x8A37, 0xD45A, 0x8A38, - 0xD45B, 0x8A39, 0xD45C, 0x8A3A, 0xD45D, 0x8A3B, 0xD45E, 0x8A3C, - 0xD45F, 0x8A3D, 0xD460, 0x8A3F, 0xD461, 0x8A40, 0xD462, 0x8A41, - 0xD463, 0x8A42, 0xD464, 0x8A43, 0xD465, 0x8A44, 0xD466, 0x8A45, - 0xD467, 0x8A46, 0xD468, 0x8A47, 0xD469, 0x8A49, 0xD46A, 0x8A4A, - 0xD46B, 0x8A4B, 0xD46C, 0x8A4C, 0xD46D, 0x8A4D, 0xD46E, 0x8A4E, - 0xD46F, 0x8A4F, 0xD470, 0x8A50, 0xD471, 0x8A51, 0xD472, 0x8A52, - 0xD473, 0x8A53, 0xD474, 0x8A54, 0xD475, 0x8A55, 0xD476, 0x8A56, - 0xD477, 0x8A57, 0xD478, 0x8A58, 0xD479, 0x8A59, 0xD47A, 0x8A5A, - 0xD47B, 0x8A5B, 0xD47C, 0x8A5C, 0xD47D, 0x8A5D, 0xD47E, 0x8A5E, - 0xD480, 0x8A5F, 0xD481, 0x8A60, 0xD482, 0x8A61, 0xD483, 0x8A62, - 0xD484, 0x8A63, 0xD485, 0x8A64, 0xD486, 0x8A65, 0xD487, 0x8A66, - 0xD488, 0x8A67, 0xD489, 0x8A68, 0xD48A, 0x8A69, 0xD48B, 0x8A6A, - 0xD48C, 0x8A6B, 0xD48D, 0x8A6C, 0xD48E, 0x8A6D, 0xD48F, 0x8A6E, - 0xD490, 0x8A6F, 0xD491, 0x8A70, 0xD492, 0x8A71, 0xD493, 0x8A72, - 0xD494, 0x8A73, 0xD495, 0x8A74, 0xD496, 0x8A75, 0xD497, 0x8A76, - 0xD498, 0x8A77, 0xD499, 0x8A78, 0xD49A, 0x8A7A, 0xD49B, 0x8A7B, - 0xD49C, 0x8A7C, 0xD49D, 0x8A7D, 0xD49E, 0x8A7E, 0xD49F, 0x8A7F, - 0xD4A0, 0x8A80, 0xD4A1, 0x6D74, 0xD4A2, 0x5BD3, 0xD4A3, 0x88D5, - 0xD4A4, 0x9884, 0xD4A5, 0x8C6B, 0xD4A6, 0x9A6D, 0xD4A7, 0x9E33, - 0xD4A8, 0x6E0A, 0xD4A9, 0x51A4, 0xD4AA, 0x5143, 0xD4AB, 0x57A3, - 0xD4AC, 0x8881, 0xD4AD, 0x539F, 0xD4AE, 0x63F4, 0xD4AF, 0x8F95, - 0xD4B0, 0x56ED, 0xD4B1, 0x5458, 0xD4B2, 0x5706, 0xD4B3, 0x733F, - 0xD4B4, 0x6E90, 0xD4B5, 0x7F18, 0xD4B6, 0x8FDC, 0xD4B7, 0x82D1, - 0xD4B8, 0x613F, 0xD4B9, 0x6028, 0xD4BA, 0x9662, 0xD4BB, 0x66F0, - 0xD4BC, 0x7EA6, 0xD4BD, 0x8D8A, 0xD4BE, 0x8DC3, 0xD4BF, 0x94A5, - 0xD4C0, 0x5CB3, 0xD4C1, 0x7CA4, 0xD4C2, 0x6708, 0xD4C3, 0x60A6, - 0xD4C4, 0x9605, 0xD4C5, 0x8018, 0xD4C6, 0x4E91, 0xD4C7, 0x90E7, - 0xD4C8, 0x5300, 0xD4C9, 0x9668, 0xD4CA, 0x5141, 0xD4CB, 0x8FD0, - 0xD4CC, 0x8574, 0xD4CD, 0x915D, 0xD4CE, 0x6655, 0xD4CF, 0x97F5, - 0xD4D0, 0x5B55, 0xD4D1, 0x531D, 0xD4D2, 0x7838, 0xD4D3, 0x6742, - 0xD4D4, 0x683D, 0xD4D5, 0x54C9, 0xD4D6, 0x707E, 0xD4D7, 0x5BB0, - 0xD4D8, 0x8F7D, 0xD4D9, 0x518D, 0xD4DA, 0x5728, 0xD4DB, 0x54B1, - 0xD4DC, 0x6512, 0xD4DD, 0x6682, 0xD4DE, 0x8D5E, 0xD4DF, 0x8D43, - 0xD4E0, 0x810F, 0xD4E1, 0x846C, 0xD4E2, 0x906D, 0xD4E3, 0x7CDF, - 0xD4E4, 0x51FF, 0xD4E5, 0x85FB, 0xD4E6, 0x67A3, 0xD4E7, 0x65E9, - 0xD4E8, 0x6FA1, 0xD4E9, 0x86A4, 0xD4EA, 0x8E81, 0xD4EB, 0x566A, - 0xD4EC, 0x9020, 0xD4ED, 0x7682, 0xD4EE, 0x7076, 0xD4EF, 0x71E5, - 0xD4F0, 0x8D23, 0xD4F1, 0x62E9, 0xD4F2, 0x5219, 0xD4F3, 0x6CFD, - 0xD4F4, 0x8D3C, 0xD4F5, 0x600E, 0xD4F6, 0x589E, 0xD4F7, 0x618E, - 0xD4F8, 0x66FE, 0xD4F9, 0x8D60, 0xD4FA, 0x624E, 0xD4FB, 0x55B3, - 0xD4FC, 0x6E23, 0xD4FD, 0x672D, 0xD4FE, 0x8F67, 0xD540, 0x8A81, - 0xD541, 0x8A82, 0xD542, 0x8A83, 0xD543, 0x8A84, 0xD544, 0x8A85, - 0xD545, 0x8A86, 0xD546, 0x8A87, 0xD547, 0x8A88, 0xD548, 0x8A8B, - 0xD549, 0x8A8C, 0xD54A, 0x8A8D, 0xD54B, 0x8A8E, 0xD54C, 0x8A8F, - 0xD54D, 0x8A90, 0xD54E, 0x8A91, 0xD54F, 0x8A92, 0xD550, 0x8A94, - 0xD551, 0x8A95, 0xD552, 0x8A96, 0xD553, 0x8A97, 0xD554, 0x8A98, - 0xD555, 0x8A99, 0xD556, 0x8A9A, 0xD557, 0x8A9B, 0xD558, 0x8A9C, - 0xD559, 0x8A9D, 0xD55A, 0x8A9E, 0xD55B, 0x8A9F, 0xD55C, 0x8AA0, - 0xD55D, 0x8AA1, 0xD55E, 0x8AA2, 0xD55F, 0x8AA3, 0xD560, 0x8AA4, - 0xD561, 0x8AA5, 0xD562, 0x8AA6, 0xD563, 0x8AA7, 0xD564, 0x8AA8, - 0xD565, 0x8AA9, 0xD566, 0x8AAA, 0xD567, 0x8AAB, 0xD568, 0x8AAC, - 0xD569, 0x8AAD, 0xD56A, 0x8AAE, 0xD56B, 0x8AAF, 0xD56C, 0x8AB0, - 0xD56D, 0x8AB1, 0xD56E, 0x8AB2, 0xD56F, 0x8AB3, 0xD570, 0x8AB4, - 0xD571, 0x8AB5, 0xD572, 0x8AB6, 0xD573, 0x8AB7, 0xD574, 0x8AB8, - 0xD575, 0x8AB9, 0xD576, 0x8ABA, 0xD577, 0x8ABB, 0xD578, 0x8ABC, - 0xD579, 0x8ABD, 0xD57A, 0x8ABE, 0xD57B, 0x8ABF, 0xD57C, 0x8AC0, - 0xD57D, 0x8AC1, 0xD57E, 0x8AC2, 0xD580, 0x8AC3, 0xD581, 0x8AC4, - 0xD582, 0x8AC5, 0xD583, 0x8AC6, 0xD584, 0x8AC7, 0xD585, 0x8AC8, - 0xD586, 0x8AC9, 0xD587, 0x8ACA, 0xD588, 0x8ACB, 0xD589, 0x8ACC, - 0xD58A, 0x8ACD, 0xD58B, 0x8ACE, 0xD58C, 0x8ACF, 0xD58D, 0x8AD0, - 0xD58E, 0x8AD1, 0xD58F, 0x8AD2, 0xD590, 0x8AD3, 0xD591, 0x8AD4, - 0xD592, 0x8AD5, 0xD593, 0x8AD6, 0xD594, 0x8AD7, 0xD595, 0x8AD8, - 0xD596, 0x8AD9, 0xD597, 0x8ADA, 0xD598, 0x8ADB, 0xD599, 0x8ADC, - 0xD59A, 0x8ADD, 0xD59B, 0x8ADE, 0xD59C, 0x8ADF, 0xD59D, 0x8AE0, - 0xD59E, 0x8AE1, 0xD59F, 0x8AE2, 0xD5A0, 0x8AE3, 0xD5A1, 0x94E1, - 0xD5A2, 0x95F8, 0xD5A3, 0x7728, 0xD5A4, 0x6805, 0xD5A5, 0x69A8, - 0xD5A6, 0x548B, 0xD5A7, 0x4E4D, 0xD5A8, 0x70B8, 0xD5A9, 0x8BC8, - 0xD5AA, 0x6458, 0xD5AB, 0x658B, 0xD5AC, 0x5B85, 0xD5AD, 0x7A84, - 0xD5AE, 0x503A, 0xD5AF, 0x5BE8, 0xD5B0, 0x77BB, 0xD5B1, 0x6BE1, - 0xD5B2, 0x8A79, 0xD5B3, 0x7C98, 0xD5B4, 0x6CBE, 0xD5B5, 0x76CF, - 0xD5B6, 0x65A9, 0xD5B7, 0x8F97, 0xD5B8, 0x5D2D, 0xD5B9, 0x5C55, - 0xD5BA, 0x8638, 0xD5BB, 0x6808, 0xD5BC, 0x5360, 0xD5BD, 0x6218, - 0xD5BE, 0x7AD9, 0xD5BF, 0x6E5B, 0xD5C0, 0x7EFD, 0xD5C1, 0x6A1F, - 0xD5C2, 0x7AE0, 0xD5C3, 0x5F70, 0xD5C4, 0x6F33, 0xD5C5, 0x5F20, - 0xD5C6, 0x638C, 0xD5C7, 0x6DA8, 0xD5C8, 0x6756, 0xD5C9, 0x4E08, - 0xD5CA, 0x5E10, 0xD5CB, 0x8D26, 0xD5CC, 0x4ED7, 0xD5CD, 0x80C0, - 0xD5CE, 0x7634, 0xD5CF, 0x969C, 0xD5D0, 0x62DB, 0xD5D1, 0x662D, - 0xD5D2, 0x627E, 0xD5D3, 0x6CBC, 0xD5D4, 0x8D75, 0xD5D5, 0x7167, - 0xD5D6, 0x7F69, 0xD5D7, 0x5146, 0xD5D8, 0x8087, 0xD5D9, 0x53EC, - 0xD5DA, 0x906E, 0xD5DB, 0x6298, 0xD5DC, 0x54F2, 0xD5DD, 0x86F0, - 0xD5DE, 0x8F99, 0xD5DF, 0x8005, 0xD5E0, 0x9517, 0xD5E1, 0x8517, - 0xD5E2, 0x8FD9, 0xD5E3, 0x6D59, 0xD5E4, 0x73CD, 0xD5E5, 0x659F, - 0xD5E6, 0x771F, 0xD5E7, 0x7504, 0xD5E8, 0x7827, 0xD5E9, 0x81FB, - 0xD5EA, 0x8D1E, 0xD5EB, 0x9488, 0xD5EC, 0x4FA6, 0xD5ED, 0x6795, - 0xD5EE, 0x75B9, 0xD5EF, 0x8BCA, 0xD5F0, 0x9707, 0xD5F1, 0x632F, - 0xD5F2, 0x9547, 0xD5F3, 0x9635, 0xD5F4, 0x84B8, 0xD5F5, 0x6323, - 0xD5F6, 0x7741, 0xD5F7, 0x5F81, 0xD5F8, 0x72F0, 0xD5F9, 0x4E89, - 0xD5FA, 0x6014, 0xD5FB, 0x6574, 0xD5FC, 0x62EF, 0xD5FD, 0x6B63, - 0xD5FE, 0x653F, 0xD640, 0x8AE4, 0xD641, 0x8AE5, 0xD642, 0x8AE6, - 0xD643, 0x8AE7, 0xD644, 0x8AE8, 0xD645, 0x8AE9, 0xD646, 0x8AEA, - 0xD647, 0x8AEB, 0xD648, 0x8AEC, 0xD649, 0x8AED, 0xD64A, 0x8AEE, - 0xD64B, 0x8AEF, 0xD64C, 0x8AF0, 0xD64D, 0x8AF1, 0xD64E, 0x8AF2, - 0xD64F, 0x8AF3, 0xD650, 0x8AF4, 0xD651, 0x8AF5, 0xD652, 0x8AF6, - 0xD653, 0x8AF7, 0xD654, 0x8AF8, 0xD655, 0x8AF9, 0xD656, 0x8AFA, - 0xD657, 0x8AFB, 0xD658, 0x8AFC, 0xD659, 0x8AFD, 0xD65A, 0x8AFE, - 0xD65B, 0x8AFF, 0xD65C, 0x8B00, 0xD65D, 0x8B01, 0xD65E, 0x8B02, - 0xD65F, 0x8B03, 0xD660, 0x8B04, 0xD661, 0x8B05, 0xD662, 0x8B06, - 0xD663, 0x8B08, 0xD664, 0x8B09, 0xD665, 0x8B0A, 0xD666, 0x8B0B, - 0xD667, 0x8B0C, 0xD668, 0x8B0D, 0xD669, 0x8B0E, 0xD66A, 0x8B0F, - 0xD66B, 0x8B10, 0xD66C, 0x8B11, 0xD66D, 0x8B12, 0xD66E, 0x8B13, - 0xD66F, 0x8B14, 0xD670, 0x8B15, 0xD671, 0x8B16, 0xD672, 0x8B17, - 0xD673, 0x8B18, 0xD674, 0x8B19, 0xD675, 0x8B1A, 0xD676, 0x8B1B, - 0xD677, 0x8B1C, 0xD678, 0x8B1D, 0xD679, 0x8B1E, 0xD67A, 0x8B1F, - 0xD67B, 0x8B20, 0xD67C, 0x8B21, 0xD67D, 0x8B22, 0xD67E, 0x8B23, - 0xD680, 0x8B24, 0xD681, 0x8B25, 0xD682, 0x8B27, 0xD683, 0x8B28, - 0xD684, 0x8B29, 0xD685, 0x8B2A, 0xD686, 0x8B2B, 0xD687, 0x8B2C, - 0xD688, 0x8B2D, 0xD689, 0x8B2E, 0xD68A, 0x8B2F, 0xD68B, 0x8B30, - 0xD68C, 0x8B31, 0xD68D, 0x8B32, 0xD68E, 0x8B33, 0xD68F, 0x8B34, - 0xD690, 0x8B35, 0xD691, 0x8B36, 0xD692, 0x8B37, 0xD693, 0x8B38, - 0xD694, 0x8B39, 0xD695, 0x8B3A, 0xD696, 0x8B3B, 0xD697, 0x8B3C, - 0xD698, 0x8B3D, 0xD699, 0x8B3E, 0xD69A, 0x8B3F, 0xD69B, 0x8B40, - 0xD69C, 0x8B41, 0xD69D, 0x8B42, 0xD69E, 0x8B43, 0xD69F, 0x8B44, - 0xD6A0, 0x8B45, 0xD6A1, 0x5E27, 0xD6A2, 0x75C7, 0xD6A3, 0x90D1, - 0xD6A4, 0x8BC1, 0xD6A5, 0x829D, 0xD6A6, 0x679D, 0xD6A7, 0x652F, - 0xD6A8, 0x5431, 0xD6A9, 0x8718, 0xD6AA, 0x77E5, 0xD6AB, 0x80A2, - 0xD6AC, 0x8102, 0xD6AD, 0x6C41, 0xD6AE, 0x4E4B, 0xD6AF, 0x7EC7, - 0xD6B0, 0x804C, 0xD6B1, 0x76F4, 0xD6B2, 0x690D, 0xD6B3, 0x6B96, - 0xD6B4, 0x6267, 0xD6B5, 0x503C, 0xD6B6, 0x4F84, 0xD6B7, 0x5740, - 0xD6B8, 0x6307, 0xD6B9, 0x6B62, 0xD6BA, 0x8DBE, 0xD6BB, 0x53EA, - 0xD6BC, 0x65E8, 0xD6BD, 0x7EB8, 0xD6BE, 0x5FD7, 0xD6BF, 0x631A, - 0xD6C0, 0x63B7, 0xD6C1, 0x81F3, 0xD6C2, 0x81F4, 0xD6C3, 0x7F6E, - 0xD6C4, 0x5E1C, 0xD6C5, 0x5CD9, 0xD6C6, 0x5236, 0xD6C7, 0x667A, - 0xD6C8, 0x79E9, 0xD6C9, 0x7A1A, 0xD6CA, 0x8D28, 0xD6CB, 0x7099, - 0xD6CC, 0x75D4, 0xD6CD, 0x6EDE, 0xD6CE, 0x6CBB, 0xD6CF, 0x7A92, - 0xD6D0, 0x4E2D, 0xD6D1, 0x76C5, 0xD6D2, 0x5FE0, 0xD6D3, 0x949F, - 0xD6D4, 0x8877, 0xD6D5, 0x7EC8, 0xD6D6, 0x79CD, 0xD6D7, 0x80BF, - 0xD6D8, 0x91CD, 0xD6D9, 0x4EF2, 0xD6DA, 0x4F17, 0xD6DB, 0x821F, - 0xD6DC, 0x5468, 0xD6DD, 0x5DDE, 0xD6DE, 0x6D32, 0xD6DF, 0x8BCC, - 0xD6E0, 0x7CA5, 0xD6E1, 0x8F74, 0xD6E2, 0x8098, 0xD6E3, 0x5E1A, - 0xD6E4, 0x5492, 0xD6E5, 0x76B1, 0xD6E6, 0x5B99, 0xD6E7, 0x663C, - 0xD6E8, 0x9AA4, 0xD6E9, 0x73E0, 0xD6EA, 0x682A, 0xD6EB, 0x86DB, - 0xD6EC, 0x6731, 0xD6ED, 0x732A, 0xD6EE, 0x8BF8, 0xD6EF, 0x8BDB, - 0xD6F0, 0x9010, 0xD6F1, 0x7AF9, 0xD6F2, 0x70DB, 0xD6F3, 0x716E, - 0xD6F4, 0x62C4, 0xD6F5, 0x77A9, 0xD6F6, 0x5631, 0xD6F7, 0x4E3B, - 0xD6F8, 0x8457, 0xD6F9, 0x67F1, 0xD6FA, 0x52A9, 0xD6FB, 0x86C0, - 0xD6FC, 0x8D2E, 0xD6FD, 0x94F8, 0xD6FE, 0x7B51, 0xD740, 0x8B46, - 0xD741, 0x8B47, 0xD742, 0x8B48, 0xD743, 0x8B49, 0xD744, 0x8B4A, - 0xD745, 0x8B4B, 0xD746, 0x8B4C, 0xD747, 0x8B4D, 0xD748, 0x8B4E, - 0xD749, 0x8B4F, 0xD74A, 0x8B50, 0xD74B, 0x8B51, 0xD74C, 0x8B52, - 0xD74D, 0x8B53, 0xD74E, 0x8B54, 0xD74F, 0x8B55, 0xD750, 0x8B56, - 0xD751, 0x8B57, 0xD752, 0x8B58, 0xD753, 0x8B59, 0xD754, 0x8B5A, - 0xD755, 0x8B5B, 0xD756, 0x8B5C, 0xD757, 0x8B5D, 0xD758, 0x8B5E, - 0xD759, 0x8B5F, 0xD75A, 0x8B60, 0xD75B, 0x8B61, 0xD75C, 0x8B62, - 0xD75D, 0x8B63, 0xD75E, 0x8B64, 0xD75F, 0x8B65, 0xD760, 0x8B67, - 0xD761, 0x8B68, 0xD762, 0x8B69, 0xD763, 0x8B6A, 0xD764, 0x8B6B, - 0xD765, 0x8B6D, 0xD766, 0x8B6E, 0xD767, 0x8B6F, 0xD768, 0x8B70, - 0xD769, 0x8B71, 0xD76A, 0x8B72, 0xD76B, 0x8B73, 0xD76C, 0x8B74, - 0xD76D, 0x8B75, 0xD76E, 0x8B76, 0xD76F, 0x8B77, 0xD770, 0x8B78, - 0xD771, 0x8B79, 0xD772, 0x8B7A, 0xD773, 0x8B7B, 0xD774, 0x8B7C, - 0xD775, 0x8B7D, 0xD776, 0x8B7E, 0xD777, 0x8B7F, 0xD778, 0x8B80, - 0xD779, 0x8B81, 0xD77A, 0x8B82, 0xD77B, 0x8B83, 0xD77C, 0x8B84, - 0xD77D, 0x8B85, 0xD77E, 0x8B86, 0xD780, 0x8B87, 0xD781, 0x8B88, - 0xD782, 0x8B89, 0xD783, 0x8B8A, 0xD784, 0x8B8B, 0xD785, 0x8B8C, - 0xD786, 0x8B8D, 0xD787, 0x8B8E, 0xD788, 0x8B8F, 0xD789, 0x8B90, - 0xD78A, 0x8B91, 0xD78B, 0x8B92, 0xD78C, 0x8B93, 0xD78D, 0x8B94, - 0xD78E, 0x8B95, 0xD78F, 0x8B96, 0xD790, 0x8B97, 0xD791, 0x8B98, - 0xD792, 0x8B99, 0xD793, 0x8B9A, 0xD794, 0x8B9B, 0xD795, 0x8B9C, - 0xD796, 0x8B9D, 0xD797, 0x8B9E, 0xD798, 0x8B9F, 0xD799, 0x8BAC, - 0xD79A, 0x8BB1, 0xD79B, 0x8BBB, 0xD79C, 0x8BC7, 0xD79D, 0x8BD0, - 0xD79E, 0x8BEA, 0xD79F, 0x8C09, 0xD7A0, 0x8C1E, 0xD7A1, 0x4F4F, - 0xD7A2, 0x6CE8, 0xD7A3, 0x795D, 0xD7A4, 0x9A7B, 0xD7A5, 0x6293, - 0xD7A6, 0x722A, 0xD7A7, 0x62FD, 0xD7A8, 0x4E13, 0xD7A9, 0x7816, - 0xD7AA, 0x8F6C, 0xD7AB, 0x64B0, 0xD7AC, 0x8D5A, 0xD7AD, 0x7BC6, - 0xD7AE, 0x6869, 0xD7AF, 0x5E84, 0xD7B0, 0x88C5, 0xD7B1, 0x5986, - 0xD7B2, 0x649E, 0xD7B3, 0x58EE, 0xD7B4, 0x72B6, 0xD7B5, 0x690E, - 0xD7B6, 0x9525, 0xD7B7, 0x8FFD, 0xD7B8, 0x8D58, 0xD7B9, 0x5760, - 0xD7BA, 0x7F00, 0xD7BB, 0x8C06, 0xD7BC, 0x51C6, 0xD7BD, 0x6349, - 0xD7BE, 0x62D9, 0xD7BF, 0x5353, 0xD7C0, 0x684C, 0xD7C1, 0x7422, - 0xD7C2, 0x8301, 0xD7C3, 0x914C, 0xD7C4, 0x5544, 0xD7C5, 0x7740, - 0xD7C6, 0x707C, 0xD7C7, 0x6D4A, 0xD7C8, 0x5179, 0xD7C9, 0x54A8, - 0xD7CA, 0x8D44, 0xD7CB, 0x59FF, 0xD7CC, 0x6ECB, 0xD7CD, 0x6DC4, - 0xD7CE, 0x5B5C, 0xD7CF, 0x7D2B, 0xD7D0, 0x4ED4, 0xD7D1, 0x7C7D, - 0xD7D2, 0x6ED3, 0xD7D3, 0x5B50, 0xD7D4, 0x81EA, 0xD7D5, 0x6E0D, - 0xD7D6, 0x5B57, 0xD7D7, 0x9B03, 0xD7D8, 0x68D5, 0xD7D9, 0x8E2A, - 0xD7DA, 0x5B97, 0xD7DB, 0x7EFC, 0xD7DC, 0x603B, 0xD7DD, 0x7EB5, - 0xD7DE, 0x90B9, 0xD7DF, 0x8D70, 0xD7E0, 0x594F, 0xD7E1, 0x63CD, - 0xD7E2, 0x79DF, 0xD7E3, 0x8DB3, 0xD7E4, 0x5352, 0xD7E5, 0x65CF, - 0xD7E6, 0x7956, 0xD7E7, 0x8BC5, 0xD7E8, 0x963B, 0xD7E9, 0x7EC4, - 0xD7EA, 0x94BB, 0xD7EB, 0x7E82, 0xD7EC, 0x5634, 0xD7ED, 0x9189, - 0xD7EE, 0x6700, 0xD7EF, 0x7F6A, 0xD7F0, 0x5C0A, 0xD7F1, 0x9075, - 0xD7F2, 0x6628, 0xD7F3, 0x5DE6, 0xD7F4, 0x4F50, 0xD7F5, 0x67DE, - 0xD7F6, 0x505A, 0xD7F7, 0x4F5C, 0xD7F8, 0x5750, 0xD7F9, 0x5EA7, - 0xD840, 0x8C38, 0xD841, 0x8C39, 0xD842, 0x8C3A, 0xD843, 0x8C3B, - 0xD844, 0x8C3C, 0xD845, 0x8C3D, 0xD846, 0x8C3E, 0xD847, 0x8C3F, - 0xD848, 0x8C40, 0xD849, 0x8C42, 0xD84A, 0x8C43, 0xD84B, 0x8C44, - 0xD84C, 0x8C45, 0xD84D, 0x8C48, 0xD84E, 0x8C4A, 0xD84F, 0x8C4B, - 0xD850, 0x8C4D, 0xD851, 0x8C4E, 0xD852, 0x8C4F, 0xD853, 0x8C50, - 0xD854, 0x8C51, 0xD855, 0x8C52, 0xD856, 0x8C53, 0xD857, 0x8C54, - 0xD858, 0x8C56, 0xD859, 0x8C57, 0xD85A, 0x8C58, 0xD85B, 0x8C59, - 0xD85C, 0x8C5B, 0xD85D, 0x8C5C, 0xD85E, 0x8C5D, 0xD85F, 0x8C5E, - 0xD860, 0x8C5F, 0xD861, 0x8C60, 0xD862, 0x8C63, 0xD863, 0x8C64, - 0xD864, 0x8C65, 0xD865, 0x8C66, 0xD866, 0x8C67, 0xD867, 0x8C68, - 0xD868, 0x8C69, 0xD869, 0x8C6C, 0xD86A, 0x8C6D, 0xD86B, 0x8C6E, - 0xD86C, 0x8C6F, 0xD86D, 0x8C70, 0xD86E, 0x8C71, 0xD86F, 0x8C72, - 0xD870, 0x8C74, 0xD871, 0x8C75, 0xD872, 0x8C76, 0xD873, 0x8C77, - 0xD874, 0x8C7B, 0xD875, 0x8C7C, 0xD876, 0x8C7D, 0xD877, 0x8C7E, - 0xD878, 0x8C7F, 0xD879, 0x8C80, 0xD87A, 0x8C81, 0xD87B, 0x8C83, - 0xD87C, 0x8C84, 0xD87D, 0x8C86, 0xD87E, 0x8C87, 0xD880, 0x8C88, - 0xD881, 0x8C8B, 0xD882, 0x8C8D, 0xD883, 0x8C8E, 0xD884, 0x8C8F, - 0xD885, 0x8C90, 0xD886, 0x8C91, 0xD887, 0x8C92, 0xD888, 0x8C93, - 0xD889, 0x8C95, 0xD88A, 0x8C96, 0xD88B, 0x8C97, 0xD88C, 0x8C99, - 0xD88D, 0x8C9A, 0xD88E, 0x8C9B, 0xD88F, 0x8C9C, 0xD890, 0x8C9D, - 0xD891, 0x8C9E, 0xD892, 0x8C9F, 0xD893, 0x8CA0, 0xD894, 0x8CA1, - 0xD895, 0x8CA2, 0xD896, 0x8CA3, 0xD897, 0x8CA4, 0xD898, 0x8CA5, - 0xD899, 0x8CA6, 0xD89A, 0x8CA7, 0xD89B, 0x8CA8, 0xD89C, 0x8CA9, - 0xD89D, 0x8CAA, 0xD89E, 0x8CAB, 0xD89F, 0x8CAC, 0xD8A0, 0x8CAD, - 0xD8A1, 0x4E8D, 0xD8A2, 0x4E0C, 0xD8A3, 0x5140, 0xD8A4, 0x4E10, - 0xD8A5, 0x5EFF, 0xD8A6, 0x5345, 0xD8A7, 0x4E15, 0xD8A8, 0x4E98, - 0xD8A9, 0x4E1E, 0xD8AA, 0x9B32, 0xD8AB, 0x5B6C, 0xD8AC, 0x5669, - 0xD8AD, 0x4E28, 0xD8AE, 0x79BA, 0xD8AF, 0x4E3F, 0xD8B0, 0x5315, - 0xD8B1, 0x4E47, 0xD8B2, 0x592D, 0xD8B3, 0x723B, 0xD8B4, 0x536E, - 0xD8B5, 0x6C10, 0xD8B6, 0x56DF, 0xD8B7, 0x80E4, 0xD8B8, 0x9997, - 0xD8B9, 0x6BD3, 0xD8BA, 0x777E, 0xD8BB, 0x9F17, 0xD8BC, 0x4E36, - 0xD8BD, 0x4E9F, 0xD8BE, 0x9F10, 0xD8BF, 0x4E5C, 0xD8C0, 0x4E69, - 0xD8C1, 0x4E93, 0xD8C2, 0x8288, 0xD8C3, 0x5B5B, 0xD8C4, 0x556C, - 0xD8C5, 0x560F, 0xD8C6, 0x4EC4, 0xD8C7, 0x538D, 0xD8C8, 0x539D, - 0xD8C9, 0x53A3, 0xD8CA, 0x53A5, 0xD8CB, 0x53AE, 0xD8CC, 0x9765, - 0xD8CD, 0x8D5D, 0xD8CE, 0x531A, 0xD8CF, 0x53F5, 0xD8D0, 0x5326, - 0xD8D1, 0x532E, 0xD8D2, 0x533E, 0xD8D3, 0x8D5C, 0xD8D4, 0x5366, - 0xD8D5, 0x5363, 0xD8D6, 0x5202, 0xD8D7, 0x5208, 0xD8D8, 0x520E, - 0xD8D9, 0x522D, 0xD8DA, 0x5233, 0xD8DB, 0x523F, 0xD8DC, 0x5240, - 0xD8DD, 0x524C, 0xD8DE, 0x525E, 0xD8DF, 0x5261, 0xD8E0, 0x525C, - 0xD8E1, 0x84AF, 0xD8E2, 0x527D, 0xD8E3, 0x5282, 0xD8E4, 0x5281, - 0xD8E5, 0x5290, 0xD8E6, 0x5293, 0xD8E7, 0x5182, 0xD8E8, 0x7F54, - 0xD8E9, 0x4EBB, 0xD8EA, 0x4EC3, 0xD8EB, 0x4EC9, 0xD8EC, 0x4EC2, - 0xD8ED, 0x4EE8, 0xD8EE, 0x4EE1, 0xD8EF, 0x4EEB, 0xD8F0, 0x4EDE, - 0xD8F1, 0x4F1B, 0xD8F2, 0x4EF3, 0xD8F3, 0x4F22, 0xD8F4, 0x4F64, - 0xD8F5, 0x4EF5, 0xD8F6, 0x4F25, 0xD8F7, 0x4F27, 0xD8F8, 0x4F09, - 0xD8F9, 0x4F2B, 0xD8FA, 0x4F5E, 0xD8FB, 0x4F67, 0xD8FC, 0x6538, - 0xD8FD, 0x4F5A, 0xD8FE, 0x4F5D, 0xD940, 0x8CAE, 0xD941, 0x8CAF, - 0xD942, 0x8CB0, 0xD943, 0x8CB1, 0xD944, 0x8CB2, 0xD945, 0x8CB3, - 0xD946, 0x8CB4, 0xD947, 0x8CB5, 0xD948, 0x8CB6, 0xD949, 0x8CB7, - 0xD94A, 0x8CB8, 0xD94B, 0x8CB9, 0xD94C, 0x8CBA, 0xD94D, 0x8CBB, - 0xD94E, 0x8CBC, 0xD94F, 0x8CBD, 0xD950, 0x8CBE, 0xD951, 0x8CBF, - 0xD952, 0x8CC0, 0xD953, 0x8CC1, 0xD954, 0x8CC2, 0xD955, 0x8CC3, - 0xD956, 0x8CC4, 0xD957, 0x8CC5, 0xD958, 0x8CC6, 0xD959, 0x8CC7, - 0xD95A, 0x8CC8, 0xD95B, 0x8CC9, 0xD95C, 0x8CCA, 0xD95D, 0x8CCB, - 0xD95E, 0x8CCC, 0xD95F, 0x8CCD, 0xD960, 0x8CCE, 0xD961, 0x8CCF, - 0xD962, 0x8CD0, 0xD963, 0x8CD1, 0xD964, 0x8CD2, 0xD965, 0x8CD3, - 0xD966, 0x8CD4, 0xD967, 0x8CD5, 0xD968, 0x8CD6, 0xD969, 0x8CD7, - 0xD96A, 0x8CD8, 0xD96B, 0x8CD9, 0xD96C, 0x8CDA, 0xD96D, 0x8CDB, - 0xD96E, 0x8CDC, 0xD96F, 0x8CDD, 0xD970, 0x8CDE, 0xD971, 0x8CDF, - 0xD972, 0x8CE0, 0xD973, 0x8CE1, 0xD974, 0x8CE2, 0xD975, 0x8CE3, - 0xD976, 0x8CE4, 0xD977, 0x8CE5, 0xD978, 0x8CE6, 0xD979, 0x8CE7, - 0xD97A, 0x8CE8, 0xD97B, 0x8CE9, 0xD97C, 0x8CEA, 0xD97D, 0x8CEB, - 0xD97E, 0x8CEC, 0xD980, 0x8CED, 0xD981, 0x8CEE, 0xD982, 0x8CEF, - 0xD983, 0x8CF0, 0xD984, 0x8CF1, 0xD985, 0x8CF2, 0xD986, 0x8CF3, - 0xD987, 0x8CF4, 0xD988, 0x8CF5, 0xD989, 0x8CF6, 0xD98A, 0x8CF7, - 0xD98B, 0x8CF8, 0xD98C, 0x8CF9, 0xD98D, 0x8CFA, 0xD98E, 0x8CFB, - 0xD98F, 0x8CFC, 0xD990, 0x8CFD, 0xD991, 0x8CFE, 0xD992, 0x8CFF, - 0xD993, 0x8D00, 0xD994, 0x8D01, 0xD995, 0x8D02, 0xD996, 0x8D03, - 0xD997, 0x8D04, 0xD998, 0x8D05, 0xD999, 0x8D06, 0xD99A, 0x8D07, - 0xD99B, 0x8D08, 0xD99C, 0x8D09, 0xD99D, 0x8D0A, 0xD99E, 0x8D0B, - 0xD99F, 0x8D0C, 0xD9A0, 0x8D0D, 0xD9A1, 0x4F5F, 0xD9A2, 0x4F57, - 0xD9A3, 0x4F32, 0xD9A4, 0x4F3D, 0xD9A5, 0x4F76, 0xD9A6, 0x4F74, - 0xD9A7, 0x4F91, 0xD9A8, 0x4F89, 0xD9A9, 0x4F83, 0xD9AA, 0x4F8F, - 0xD9AB, 0x4F7E, 0xD9AC, 0x4F7B, 0xD9AD, 0x4FAA, 0xD9AE, 0x4F7C, - 0xD9AF, 0x4FAC, 0xD9B0, 0x4F94, 0xD9B1, 0x4FE6, 0xD9B2, 0x4FE8, - 0xD9B3, 0x4FEA, 0xD9B4, 0x4FC5, 0xD9B5, 0x4FDA, 0xD9B6, 0x4FE3, - 0xD9B7, 0x4FDC, 0xD9B8, 0x4FD1, 0xD9B9, 0x4FDF, 0xD9BA, 0x4FF8, - 0xD9BB, 0x5029, 0xD9BC, 0x504C, 0xD9BD, 0x4FF3, 0xD9BE, 0x502C, - 0xD9BF, 0x500F, 0xD9C0, 0x502E, 0xD9C1, 0x502D, 0xD9C2, 0x4FFE, - 0xD9C3, 0x501C, 0xD9C4, 0x500C, 0xD9C5, 0x5025, 0xD9C6, 0x5028, - 0xD9C7, 0x507E, 0xD9C8, 0x5043, 0xD9C9, 0x5055, 0xD9CA, 0x5048, - 0xD9CB, 0x504E, 0xD9CC, 0x506C, 0xD9CD, 0x507B, 0xD9CE, 0x50A5, - 0xD9CF, 0x50A7, 0xD9D0, 0x50A9, 0xD9D1, 0x50BA, 0xD9D2, 0x50D6, - 0xD9D3, 0x5106, 0xD9D4, 0x50ED, 0xD9D5, 0x50EC, 0xD9D6, 0x50E6, - 0xD9D7, 0x50EE, 0xD9D8, 0x5107, 0xD9D9, 0x510B, 0xD9DA, 0x4EDD, - 0xD9DB, 0x6C3D, 0xD9DC, 0x4F58, 0xD9DD, 0x4F65, 0xD9DE, 0x4FCE, - 0xD9DF, 0x9FA0, 0xD9E0, 0x6C46, 0xD9E1, 0x7C74, 0xD9E2, 0x516E, - 0xD9E3, 0x5DFD, 0xD9E4, 0x9EC9, 0xD9E5, 0x9998, 0xD9E6, 0x5181, - 0xD9E7, 0x5914, 0xD9E8, 0x52F9, 0xD9E9, 0x530D, 0xD9EA, 0x8A07, - 0xD9EB, 0x5310, 0xD9EC, 0x51EB, 0xD9ED, 0x5919, 0xD9EE, 0x5155, - 0xD9EF, 0x4EA0, 0xD9F0, 0x5156, 0xD9F1, 0x4EB3, 0xD9F2, 0x886E, - 0xD9F3, 0x88A4, 0xD9F4, 0x4EB5, 0xD9F5, 0x8114, 0xD9F6, 0x88D2, - 0xD9F7, 0x7980, 0xD9F8, 0x5B34, 0xD9F9, 0x8803, 0xD9FA, 0x7FB8, - 0xD9FB, 0x51AB, 0xD9FC, 0x51B1, 0xD9FD, 0x51BD, 0xD9FE, 0x51BC, - 0xDA40, 0x8D0E, 0xDA41, 0x8D0F, 0xDA42, 0x8D10, 0xDA43, 0x8D11, - 0xDA44, 0x8D12, 0xDA45, 0x8D13, 0xDA46, 0x8D14, 0xDA47, 0x8D15, - 0xDA48, 0x8D16, 0xDA49, 0x8D17, 0xDA4A, 0x8D18, 0xDA4B, 0x8D19, - 0xDA4C, 0x8D1A, 0xDA4D, 0x8D1B, 0xDA4E, 0x8D1C, 0xDA4F, 0x8D20, - 0xDA50, 0x8D51, 0xDA51, 0x8D52, 0xDA52, 0x8D57, 0xDA53, 0x8D5F, - 0xDA54, 0x8D65, 0xDA55, 0x8D68, 0xDA56, 0x8D69, 0xDA57, 0x8D6A, - 0xDA58, 0x8D6C, 0xDA59, 0x8D6E, 0xDA5A, 0x8D6F, 0xDA5B, 0x8D71, - 0xDA5C, 0x8D72, 0xDA5D, 0x8D78, 0xDA5E, 0x8D79, 0xDA5F, 0x8D7A, - 0xDA60, 0x8D7B, 0xDA61, 0x8D7C, 0xDA62, 0x8D7D, 0xDA63, 0x8D7E, - 0xDA64, 0x8D7F, 0xDA65, 0x8D80, 0xDA66, 0x8D82, 0xDA67, 0x8D83, - 0xDA68, 0x8D86, 0xDA69, 0x8D87, 0xDA6A, 0x8D88, 0xDA6B, 0x8D89, - 0xDA6C, 0x8D8C, 0xDA6D, 0x8D8D, 0xDA6E, 0x8D8E, 0xDA6F, 0x8D8F, - 0xDA70, 0x8D90, 0xDA71, 0x8D92, 0xDA72, 0x8D93, 0xDA73, 0x8D95, - 0xDA74, 0x8D96, 0xDA75, 0x8D97, 0xDA76, 0x8D98, 0xDA77, 0x8D99, - 0xDA78, 0x8D9A, 0xDA79, 0x8D9B, 0xDA7A, 0x8D9C, 0xDA7B, 0x8D9D, - 0xDA7C, 0x8D9E, 0xDA7D, 0x8DA0, 0xDA7E, 0x8DA1, 0xDA80, 0x8DA2, - 0xDA81, 0x8DA4, 0xDA82, 0x8DA5, 0xDA83, 0x8DA6, 0xDA84, 0x8DA7, - 0xDA85, 0x8DA8, 0xDA86, 0x8DA9, 0xDA87, 0x8DAA, 0xDA88, 0x8DAB, - 0xDA89, 0x8DAC, 0xDA8A, 0x8DAD, 0xDA8B, 0x8DAE, 0xDA8C, 0x8DAF, - 0xDA8D, 0x8DB0, 0xDA8E, 0x8DB2, 0xDA8F, 0x8DB6, 0xDA90, 0x8DB7, - 0xDA91, 0x8DB9, 0xDA92, 0x8DBB, 0xDA93, 0x8DBD, 0xDA94, 0x8DC0, - 0xDA95, 0x8DC1, 0xDA96, 0x8DC2, 0xDA97, 0x8DC5, 0xDA98, 0x8DC7, - 0xDA99, 0x8DC8, 0xDA9A, 0x8DC9, 0xDA9B, 0x8DCA, 0xDA9C, 0x8DCD, - 0xDA9D, 0x8DD0, 0xDA9E, 0x8DD2, 0xDA9F, 0x8DD3, 0xDAA0, 0x8DD4, - 0xDAA1, 0x51C7, 0xDAA2, 0x5196, 0xDAA3, 0x51A2, 0xDAA4, 0x51A5, - 0xDAA5, 0x8BA0, 0xDAA6, 0x8BA6, 0xDAA7, 0x8BA7, 0xDAA8, 0x8BAA, - 0xDAA9, 0x8BB4, 0xDAAA, 0x8BB5, 0xDAAB, 0x8BB7, 0xDAAC, 0x8BC2, - 0xDAAD, 0x8BC3, 0xDAAE, 0x8BCB, 0xDAAF, 0x8BCF, 0xDAB0, 0x8BCE, - 0xDAB1, 0x8BD2, 0xDAB2, 0x8BD3, 0xDAB3, 0x8BD4, 0xDAB4, 0x8BD6, - 0xDAB5, 0x8BD8, 0xDAB6, 0x8BD9, 0xDAB7, 0x8BDC, 0xDAB8, 0x8BDF, - 0xDAB9, 0x8BE0, 0xDABA, 0x8BE4, 0xDABB, 0x8BE8, 0xDABC, 0x8BE9, - 0xDABD, 0x8BEE, 0xDABE, 0x8BF0, 0xDABF, 0x8BF3, 0xDAC0, 0x8BF6, - 0xDAC1, 0x8BF9, 0xDAC2, 0x8BFC, 0xDAC3, 0x8BFF, 0xDAC4, 0x8C00, - 0xDAC5, 0x8C02, 0xDAC6, 0x8C04, 0xDAC7, 0x8C07, 0xDAC8, 0x8C0C, - 0xDAC9, 0x8C0F, 0xDACA, 0x8C11, 0xDACB, 0x8C12, 0xDACC, 0x8C14, - 0xDACD, 0x8C15, 0xDACE, 0x8C16, 0xDACF, 0x8C19, 0xDAD0, 0x8C1B, - 0xDAD1, 0x8C18, 0xDAD2, 0x8C1D, 0xDAD3, 0x8C1F, 0xDAD4, 0x8C20, - 0xDAD5, 0x8C21, 0xDAD6, 0x8C25, 0xDAD7, 0x8C27, 0xDAD8, 0x8C2A, - 0xDAD9, 0x8C2B, 0xDADA, 0x8C2E, 0xDADB, 0x8C2F, 0xDADC, 0x8C32, - 0xDADD, 0x8C33, 0xDADE, 0x8C35, 0xDADF, 0x8C36, 0xDAE0, 0x5369, - 0xDAE1, 0x537A, 0xDAE2, 0x961D, 0xDAE3, 0x9622, 0xDAE4, 0x9621, - 0xDAE5, 0x9631, 0xDAE6, 0x962A, 0xDAE7, 0x963D, 0xDAE8, 0x963C, - 0xDAE9, 0x9642, 0xDAEA, 0x9649, 0xDAEB, 0x9654, 0xDAEC, 0x965F, - 0xDAED, 0x9667, 0xDAEE, 0x966C, 0xDAEF, 0x9672, 0xDAF0, 0x9674, - 0xDAF1, 0x9688, 0xDAF2, 0x968D, 0xDAF3, 0x9697, 0xDAF4, 0x96B0, - 0xDAF5, 0x9097, 0xDAF6, 0x909B, 0xDAF7, 0x909D, 0xDAF8, 0x9099, - 0xDAF9, 0x90AC, 0xDAFA, 0x90A1, 0xDAFB, 0x90B4, 0xDAFC, 0x90B3, - 0xDAFD, 0x90B6, 0xDAFE, 0x90BA, 0xDB40, 0x8DD5, 0xDB41, 0x8DD8, - 0xDB42, 0x8DD9, 0xDB43, 0x8DDC, 0xDB44, 0x8DE0, 0xDB45, 0x8DE1, - 0xDB46, 0x8DE2, 0xDB47, 0x8DE5, 0xDB48, 0x8DE6, 0xDB49, 0x8DE7, - 0xDB4A, 0x8DE9, 0xDB4B, 0x8DED, 0xDB4C, 0x8DEE, 0xDB4D, 0x8DF0, - 0xDB4E, 0x8DF1, 0xDB4F, 0x8DF2, 0xDB50, 0x8DF4, 0xDB51, 0x8DF6, - 0xDB52, 0x8DFC, 0xDB53, 0x8DFE, 0xDB54, 0x8DFF, 0xDB55, 0x8E00, - 0xDB56, 0x8E01, 0xDB57, 0x8E02, 0xDB58, 0x8E03, 0xDB59, 0x8E04, - 0xDB5A, 0x8E06, 0xDB5B, 0x8E07, 0xDB5C, 0x8E08, 0xDB5D, 0x8E0B, - 0xDB5E, 0x8E0D, 0xDB5F, 0x8E0E, 0xDB60, 0x8E10, 0xDB61, 0x8E11, - 0xDB62, 0x8E12, 0xDB63, 0x8E13, 0xDB64, 0x8E15, 0xDB65, 0x8E16, - 0xDB66, 0x8E17, 0xDB67, 0x8E18, 0xDB68, 0x8E19, 0xDB69, 0x8E1A, - 0xDB6A, 0x8E1B, 0xDB6B, 0x8E1C, 0xDB6C, 0x8E20, 0xDB6D, 0x8E21, - 0xDB6E, 0x8E24, 0xDB6F, 0x8E25, 0xDB70, 0x8E26, 0xDB71, 0x8E27, - 0xDB72, 0x8E28, 0xDB73, 0x8E2B, 0xDB74, 0x8E2D, 0xDB75, 0x8E30, - 0xDB76, 0x8E32, 0xDB77, 0x8E33, 0xDB78, 0x8E34, 0xDB79, 0x8E36, - 0xDB7A, 0x8E37, 0xDB7B, 0x8E38, 0xDB7C, 0x8E3B, 0xDB7D, 0x8E3C, - 0xDB7E, 0x8E3E, 0xDB80, 0x8E3F, 0xDB81, 0x8E43, 0xDB82, 0x8E45, - 0xDB83, 0x8E46, 0xDB84, 0x8E4C, 0xDB85, 0x8E4D, 0xDB86, 0x8E4E, - 0xDB87, 0x8E4F, 0xDB88, 0x8E50, 0xDB89, 0x8E53, 0xDB8A, 0x8E54, - 0xDB8B, 0x8E55, 0xDB8C, 0x8E56, 0xDB8D, 0x8E57, 0xDB8E, 0x8E58, - 0xDB8F, 0x8E5A, 0xDB90, 0x8E5B, 0xDB91, 0x8E5C, 0xDB92, 0x8E5D, - 0xDB93, 0x8E5E, 0xDB94, 0x8E5F, 0xDB95, 0x8E60, 0xDB96, 0x8E61, - 0xDB97, 0x8E62, 0xDB98, 0x8E63, 0xDB99, 0x8E64, 0xDB9A, 0x8E65, - 0xDB9B, 0x8E67, 0xDB9C, 0x8E68, 0xDB9D, 0x8E6A, 0xDB9E, 0x8E6B, - 0xDB9F, 0x8E6E, 0xDBA0, 0x8E71, 0xDBA1, 0x90B8, 0xDBA2, 0x90B0, - 0xDBA3, 0x90CF, 0xDBA4, 0x90C5, 0xDBA5, 0x90BE, 0xDBA6, 0x90D0, - 0xDBA7, 0x90C4, 0xDBA8, 0x90C7, 0xDBA9, 0x90D3, 0xDBAA, 0x90E6, - 0xDBAB, 0x90E2, 0xDBAC, 0x90DC, 0xDBAD, 0x90D7, 0xDBAE, 0x90DB, - 0xDBAF, 0x90EB, 0xDBB0, 0x90EF, 0xDBB1, 0x90FE, 0xDBB2, 0x9104, - 0xDBB3, 0x9122, 0xDBB4, 0x911E, 0xDBB5, 0x9123, 0xDBB6, 0x9131, - 0xDBB7, 0x912F, 0xDBB8, 0x9139, 0xDBB9, 0x9143, 0xDBBA, 0x9146, - 0xDBBB, 0x520D, 0xDBBC, 0x5942, 0xDBBD, 0x52A2, 0xDBBE, 0x52AC, - 0xDBBF, 0x52AD, 0xDBC0, 0x52BE, 0xDBC1, 0x54FF, 0xDBC2, 0x52D0, - 0xDBC3, 0x52D6, 0xDBC4, 0x52F0, 0xDBC5, 0x53DF, 0xDBC6, 0x71EE, - 0xDBC7, 0x77CD, 0xDBC8, 0x5EF4, 0xDBC9, 0x51F5, 0xDBCA, 0x51FC, - 0xDBCB, 0x9B2F, 0xDBCC, 0x53B6, 0xDBCD, 0x5F01, 0xDBCE, 0x755A, - 0xDBCF, 0x5DEF, 0xDBD0, 0x574C, 0xDBD1, 0x57A9, 0xDBD2, 0x57A1, - 0xDBD3, 0x587E, 0xDBD4, 0x58BC, 0xDBD5, 0x58C5, 0xDBD6, 0x58D1, - 0xDBD7, 0x5729, 0xDBD8, 0x572C, 0xDBD9, 0x572A, 0xDBDA, 0x5733, - 0xDBDB, 0x5739, 0xDBDC, 0x572E, 0xDBDD, 0x572F, 0xDBDE, 0x575C, - 0xDBDF, 0x573B, 0xDBE0, 0x5742, 0xDBE1, 0x5769, 0xDBE2, 0x5785, - 0xDBE3, 0x576B, 0xDBE4, 0x5786, 0xDBE5, 0x577C, 0xDBE6, 0x577B, - 0xDBE7, 0x5768, 0xDBE8, 0x576D, 0xDBE9, 0x5776, 0xDBEA, 0x5773, - 0xDBEB, 0x57AD, 0xDBEC, 0x57A4, 0xDBED, 0x578C, 0xDBEE, 0x57B2, - 0xDBEF, 0x57CF, 0xDBF0, 0x57A7, 0xDBF1, 0x57B4, 0xDBF2, 0x5793, - 0xDBF3, 0x57A0, 0xDBF4, 0x57D5, 0xDBF5, 0x57D8, 0xDBF6, 0x57DA, - 0xDBF7, 0x57D9, 0xDBF8, 0x57D2, 0xDBF9, 0x57B8, 0xDBFA, 0x57F4, - 0xDBFB, 0x57EF, 0xDBFC, 0x57F8, 0xDBFD, 0x57E4, 0xDBFE, 0x57DD, - 0xDC40, 0x8E73, 0xDC41, 0x8E75, 0xDC42, 0x8E77, 0xDC43, 0x8E78, - 0xDC44, 0x8E79, 0xDC45, 0x8E7A, 0xDC46, 0x8E7B, 0xDC47, 0x8E7D, - 0xDC48, 0x8E7E, 0xDC49, 0x8E80, 0xDC4A, 0x8E82, 0xDC4B, 0x8E83, - 0xDC4C, 0x8E84, 0xDC4D, 0x8E86, 0xDC4E, 0x8E88, 0xDC4F, 0x8E89, - 0xDC50, 0x8E8A, 0xDC51, 0x8E8B, 0xDC52, 0x8E8C, 0xDC53, 0x8E8D, - 0xDC54, 0x8E8E, 0xDC55, 0x8E91, 0xDC56, 0x8E92, 0xDC57, 0x8E93, - 0xDC58, 0x8E95, 0xDC59, 0x8E96, 0xDC5A, 0x8E97, 0xDC5B, 0x8E98, - 0xDC5C, 0x8E99, 0xDC5D, 0x8E9A, 0xDC5E, 0x8E9B, 0xDC5F, 0x8E9D, - 0xDC60, 0x8E9F, 0xDC61, 0x8EA0, 0xDC62, 0x8EA1, 0xDC63, 0x8EA2, - 0xDC64, 0x8EA3, 0xDC65, 0x8EA4, 0xDC66, 0x8EA5, 0xDC67, 0x8EA6, - 0xDC68, 0x8EA7, 0xDC69, 0x8EA8, 0xDC6A, 0x8EA9, 0xDC6B, 0x8EAA, - 0xDC6C, 0x8EAD, 0xDC6D, 0x8EAE, 0xDC6E, 0x8EB0, 0xDC6F, 0x8EB1, - 0xDC70, 0x8EB3, 0xDC71, 0x8EB4, 0xDC72, 0x8EB5, 0xDC73, 0x8EB6, - 0xDC74, 0x8EB7, 0xDC75, 0x8EB8, 0xDC76, 0x8EB9, 0xDC77, 0x8EBB, - 0xDC78, 0x8EBC, 0xDC79, 0x8EBD, 0xDC7A, 0x8EBE, 0xDC7B, 0x8EBF, - 0xDC7C, 0x8EC0, 0xDC7D, 0x8EC1, 0xDC7E, 0x8EC2, 0xDC80, 0x8EC3, - 0xDC81, 0x8EC4, 0xDC82, 0x8EC5, 0xDC83, 0x8EC6, 0xDC84, 0x8EC7, - 0xDC85, 0x8EC8, 0xDC86, 0x8EC9, 0xDC87, 0x8ECA, 0xDC88, 0x8ECB, - 0xDC89, 0x8ECC, 0xDC8A, 0x8ECD, 0xDC8B, 0x8ECF, 0xDC8C, 0x8ED0, - 0xDC8D, 0x8ED1, 0xDC8E, 0x8ED2, 0xDC8F, 0x8ED3, 0xDC90, 0x8ED4, - 0xDC91, 0x8ED5, 0xDC92, 0x8ED6, 0xDC93, 0x8ED7, 0xDC94, 0x8ED8, - 0xDC95, 0x8ED9, 0xDC96, 0x8EDA, 0xDC97, 0x8EDB, 0xDC98, 0x8EDC, - 0xDC99, 0x8EDD, 0xDC9A, 0x8EDE, 0xDC9B, 0x8EDF, 0xDC9C, 0x8EE0, - 0xDC9D, 0x8EE1, 0xDC9E, 0x8EE2, 0xDC9F, 0x8EE3, 0xDCA0, 0x8EE4, - 0xDCA1, 0x580B, 0xDCA2, 0x580D, 0xDCA3, 0x57FD, 0xDCA4, 0x57ED, - 0xDCA5, 0x5800, 0xDCA6, 0x581E, 0xDCA7, 0x5819, 0xDCA8, 0x5844, - 0xDCA9, 0x5820, 0xDCAA, 0x5865, 0xDCAB, 0x586C, 0xDCAC, 0x5881, - 0xDCAD, 0x5889, 0xDCAE, 0x589A, 0xDCAF, 0x5880, 0xDCB0, 0x99A8, - 0xDCB1, 0x9F19, 0xDCB2, 0x61FF, 0xDCB3, 0x8279, 0xDCB4, 0x827D, - 0xDCB5, 0x827F, 0xDCB6, 0x828F, 0xDCB7, 0x828A, 0xDCB8, 0x82A8, - 0xDCB9, 0x8284, 0xDCBA, 0x828E, 0xDCBB, 0x8291, 0xDCBC, 0x8297, - 0xDCBD, 0x8299, 0xDCBE, 0x82AB, 0xDCBF, 0x82B8, 0xDCC0, 0x82BE, - 0xDCC1, 0x82B0, 0xDCC2, 0x82C8, 0xDCC3, 0x82CA, 0xDCC4, 0x82E3, - 0xDCC5, 0x8298, 0xDCC6, 0x82B7, 0xDCC7, 0x82AE, 0xDCC8, 0x82CB, - 0xDCC9, 0x82CC, 0xDCCA, 0x82C1, 0xDCCB, 0x82A9, 0xDCCC, 0x82B4, - 0xDCCD, 0x82A1, 0xDCCE, 0x82AA, 0xDCCF, 0x829F, 0xDCD0, 0x82C4, - 0xDCD1, 0x82CE, 0xDCD2, 0x82A4, 0xDCD3, 0x82E1, 0xDCD4, 0x8309, - 0xDCD5, 0x82F7, 0xDCD6, 0x82E4, 0xDCD7, 0x830F, 0xDCD8, 0x8307, - 0xDCD9, 0x82DC, 0xDCDA, 0x82F4, 0xDCDB, 0x82D2, 0xDCDC, 0x82D8, - 0xDCDD, 0x830C, 0xDCDE, 0x82FB, 0xDCDF, 0x82D3, 0xDCE0, 0x8311, - 0xDCE1, 0x831A, 0xDCE2, 0x8306, 0xDCE3, 0x8314, 0xDCE4, 0x8315, - 0xDCE5, 0x82E0, 0xDCE6, 0x82D5, 0xDCE7, 0x831C, 0xDCE8, 0x8351, - 0xDCE9, 0x835B, 0xDCEA, 0x835C, 0xDCEB, 0x8308, 0xDCEC, 0x8392, - 0xDCED, 0x833C, 0xDCEE, 0x8334, 0xDCEF, 0x8331, 0xDCF0, 0x839B, - 0xDCF1, 0x835E, 0xDCF2, 0x832F, 0xDCF3, 0x834F, 0xDCF4, 0x8347, - 0xDCF5, 0x8343, 0xDCF6, 0x835F, 0xDCF7, 0x8340, 0xDCF8, 0x8317, - 0xDCF9, 0x8360, 0xDCFA, 0x832D, 0xDCFB, 0x833A, 0xDCFC, 0x8333, - 0xDCFD, 0x8366, 0xDCFE, 0x8365, 0xDD40, 0x8EE5, 0xDD41, 0x8EE6, - 0xDD42, 0x8EE7, 0xDD43, 0x8EE8, 0xDD44, 0x8EE9, 0xDD45, 0x8EEA, - 0xDD46, 0x8EEB, 0xDD47, 0x8EEC, 0xDD48, 0x8EED, 0xDD49, 0x8EEE, - 0xDD4A, 0x8EEF, 0xDD4B, 0x8EF0, 0xDD4C, 0x8EF1, 0xDD4D, 0x8EF2, - 0xDD4E, 0x8EF3, 0xDD4F, 0x8EF4, 0xDD50, 0x8EF5, 0xDD51, 0x8EF6, - 0xDD52, 0x8EF7, 0xDD53, 0x8EF8, 0xDD54, 0x8EF9, 0xDD55, 0x8EFA, - 0xDD56, 0x8EFB, 0xDD57, 0x8EFC, 0xDD58, 0x8EFD, 0xDD59, 0x8EFE, - 0xDD5A, 0x8EFF, 0xDD5B, 0x8F00, 0xDD5C, 0x8F01, 0xDD5D, 0x8F02, - 0xDD5E, 0x8F03, 0xDD5F, 0x8F04, 0xDD60, 0x8F05, 0xDD61, 0x8F06, - 0xDD62, 0x8F07, 0xDD63, 0x8F08, 0xDD64, 0x8F09, 0xDD65, 0x8F0A, - 0xDD66, 0x8F0B, 0xDD67, 0x8F0C, 0xDD68, 0x8F0D, 0xDD69, 0x8F0E, - 0xDD6A, 0x8F0F, 0xDD6B, 0x8F10, 0xDD6C, 0x8F11, 0xDD6D, 0x8F12, - 0xDD6E, 0x8F13, 0xDD6F, 0x8F14, 0xDD70, 0x8F15, 0xDD71, 0x8F16, - 0xDD72, 0x8F17, 0xDD73, 0x8F18, 0xDD74, 0x8F19, 0xDD75, 0x8F1A, - 0xDD76, 0x8F1B, 0xDD77, 0x8F1C, 0xDD78, 0x8F1D, 0xDD79, 0x8F1E, - 0xDD7A, 0x8F1F, 0xDD7B, 0x8F20, 0xDD7C, 0x8F21, 0xDD7D, 0x8F22, - 0xDD7E, 0x8F23, 0xDD80, 0x8F24, 0xDD81, 0x8F25, 0xDD82, 0x8F26, - 0xDD83, 0x8F27, 0xDD84, 0x8F28, 0xDD85, 0x8F29, 0xDD86, 0x8F2A, - 0xDD87, 0x8F2B, 0xDD88, 0x8F2C, 0xDD89, 0x8F2D, 0xDD8A, 0x8F2E, - 0xDD8B, 0x8F2F, 0xDD8C, 0x8F30, 0xDD8D, 0x8F31, 0xDD8E, 0x8F32, - 0xDD8F, 0x8F33, 0xDD90, 0x8F34, 0xDD91, 0x8F35, 0xDD92, 0x8F36, - 0xDD93, 0x8F37, 0xDD94, 0x8F38, 0xDD95, 0x8F39, 0xDD96, 0x8F3A, - 0xDD97, 0x8F3B, 0xDD98, 0x8F3C, 0xDD99, 0x8F3D, 0xDD9A, 0x8F3E, - 0xDD9B, 0x8F3F, 0xDD9C, 0x8F40, 0xDD9D, 0x8F41, 0xDD9E, 0x8F42, - 0xDD9F, 0x8F43, 0xDDA0, 0x8F44, 0xDDA1, 0x8368, 0xDDA2, 0x831B, - 0xDDA3, 0x8369, 0xDDA4, 0x836C, 0xDDA5, 0x836A, 0xDDA6, 0x836D, - 0xDDA7, 0x836E, 0xDDA8, 0x83B0, 0xDDA9, 0x8378, 0xDDAA, 0x83B3, - 0xDDAB, 0x83B4, 0xDDAC, 0x83A0, 0xDDAD, 0x83AA, 0xDDAE, 0x8393, - 0xDDAF, 0x839C, 0xDDB0, 0x8385, 0xDDB1, 0x837C, 0xDDB2, 0x83B6, - 0xDDB3, 0x83A9, 0xDDB4, 0x837D, 0xDDB5, 0x83B8, 0xDDB6, 0x837B, - 0xDDB7, 0x8398, 0xDDB8, 0x839E, 0xDDB9, 0x83A8, 0xDDBA, 0x83BA, - 0xDDBB, 0x83BC, 0xDDBC, 0x83C1, 0xDDBD, 0x8401, 0xDDBE, 0x83E5, - 0xDDBF, 0x83D8, 0xDDC0, 0x5807, 0xDDC1, 0x8418, 0xDDC2, 0x840B, - 0xDDC3, 0x83DD, 0xDDC4, 0x83FD, 0xDDC5, 0x83D6, 0xDDC6, 0x841C, - 0xDDC7, 0x8438, 0xDDC8, 0x8411, 0xDDC9, 0x8406, 0xDDCA, 0x83D4, - 0xDDCB, 0x83DF, 0xDDCC, 0x840F, 0xDDCD, 0x8403, 0xDDCE, 0x83F8, - 0xDDCF, 0x83F9, 0xDDD0, 0x83EA, 0xDDD1, 0x83C5, 0xDDD2, 0x83C0, - 0xDDD3, 0x8426, 0xDDD4, 0x83F0, 0xDDD5, 0x83E1, 0xDDD6, 0x845C, - 0xDDD7, 0x8451, 0xDDD8, 0x845A, 0xDDD9, 0x8459, 0xDDDA, 0x8473, - 0xDDDB, 0x8487, 0xDDDC, 0x8488, 0xDDDD, 0x847A, 0xDDDE, 0x8489, - 0xDDDF, 0x8478, 0xDDE0, 0x843C, 0xDDE1, 0x8446, 0xDDE2, 0x8469, - 0xDDE3, 0x8476, 0xDDE4, 0x848C, 0xDDE5, 0x848E, 0xDDE6, 0x8431, - 0xDDE7, 0x846D, 0xDDE8, 0x84C1, 0xDDE9, 0x84CD, 0xDDEA, 0x84D0, - 0xDDEB, 0x84E6, 0xDDEC, 0x84BD, 0xDDED, 0x84D3, 0xDDEE, 0x84CA, - 0xDDEF, 0x84BF, 0xDDF0, 0x84BA, 0xDDF1, 0x84E0, 0xDDF2, 0x84A1, - 0xDDF3, 0x84B9, 0xDDF4, 0x84B4, 0xDDF5, 0x8497, 0xDDF6, 0x84E5, - 0xDDF7, 0x84E3, 0xDDF8, 0x850C, 0xDDF9, 0x750D, 0xDDFA, 0x8538, - 0xDDFB, 0x84F0, 0xDDFC, 0x8539, 0xDDFD, 0x851F, 0xDDFE, 0x853A, - 0xDE40, 0x8F45, 0xDE41, 0x8F46, 0xDE42, 0x8F47, 0xDE43, 0x8F48, - 0xDE44, 0x8F49, 0xDE45, 0x8F4A, 0xDE46, 0x8F4B, 0xDE47, 0x8F4C, - 0xDE48, 0x8F4D, 0xDE49, 0x8F4E, 0xDE4A, 0x8F4F, 0xDE4B, 0x8F50, - 0xDE4C, 0x8F51, 0xDE4D, 0x8F52, 0xDE4E, 0x8F53, 0xDE4F, 0x8F54, - 0xDE50, 0x8F55, 0xDE51, 0x8F56, 0xDE52, 0x8F57, 0xDE53, 0x8F58, - 0xDE54, 0x8F59, 0xDE55, 0x8F5A, 0xDE56, 0x8F5B, 0xDE57, 0x8F5C, - 0xDE58, 0x8F5D, 0xDE59, 0x8F5E, 0xDE5A, 0x8F5F, 0xDE5B, 0x8F60, - 0xDE5C, 0x8F61, 0xDE5D, 0x8F62, 0xDE5E, 0x8F63, 0xDE5F, 0x8F64, - 0xDE60, 0x8F65, 0xDE61, 0x8F6A, 0xDE62, 0x8F80, 0xDE63, 0x8F8C, - 0xDE64, 0x8F92, 0xDE65, 0x8F9D, 0xDE66, 0x8FA0, 0xDE67, 0x8FA1, - 0xDE68, 0x8FA2, 0xDE69, 0x8FA4, 0xDE6A, 0x8FA5, 0xDE6B, 0x8FA6, - 0xDE6C, 0x8FA7, 0xDE6D, 0x8FAA, 0xDE6E, 0x8FAC, 0xDE6F, 0x8FAD, - 0xDE70, 0x8FAE, 0xDE71, 0x8FAF, 0xDE72, 0x8FB2, 0xDE73, 0x8FB3, - 0xDE74, 0x8FB4, 0xDE75, 0x8FB5, 0xDE76, 0x8FB7, 0xDE77, 0x8FB8, - 0xDE78, 0x8FBA, 0xDE79, 0x8FBB, 0xDE7A, 0x8FBC, 0xDE7B, 0x8FBF, - 0xDE7C, 0x8FC0, 0xDE7D, 0x8FC3, 0xDE7E, 0x8FC6, 0xDE80, 0x8FC9, - 0xDE81, 0x8FCA, 0xDE82, 0x8FCB, 0xDE83, 0x8FCC, 0xDE84, 0x8FCD, - 0xDE85, 0x8FCF, 0xDE86, 0x8FD2, 0xDE87, 0x8FD6, 0xDE88, 0x8FD7, - 0xDE89, 0x8FDA, 0xDE8A, 0x8FE0, 0xDE8B, 0x8FE1, 0xDE8C, 0x8FE3, - 0xDE8D, 0x8FE7, 0xDE8E, 0x8FEC, 0xDE8F, 0x8FEF, 0xDE90, 0x8FF1, - 0xDE91, 0x8FF2, 0xDE92, 0x8FF4, 0xDE93, 0x8FF5, 0xDE94, 0x8FF6, - 0xDE95, 0x8FFA, 0xDE96, 0x8FFB, 0xDE97, 0x8FFC, 0xDE98, 0x8FFE, - 0xDE99, 0x8FFF, 0xDE9A, 0x9007, 0xDE9B, 0x9008, 0xDE9C, 0x900C, - 0xDE9D, 0x900E, 0xDE9E, 0x9013, 0xDE9F, 0x9015, 0xDEA0, 0x9018, - 0xDEA1, 0x8556, 0xDEA2, 0x853B, 0xDEA3, 0x84FF, 0xDEA4, 0x84FC, - 0xDEA5, 0x8559, 0xDEA6, 0x8548, 0xDEA7, 0x8568, 0xDEA8, 0x8564, - 0xDEA9, 0x855E, 0xDEAA, 0x857A, 0xDEAB, 0x77A2, 0xDEAC, 0x8543, - 0xDEAD, 0x8572, 0xDEAE, 0x857B, 0xDEAF, 0x85A4, 0xDEB0, 0x85A8, - 0xDEB1, 0x8587, 0xDEB2, 0x858F, 0xDEB3, 0x8579, 0xDEB4, 0x85AE, - 0xDEB5, 0x859C, 0xDEB6, 0x8585, 0xDEB7, 0x85B9, 0xDEB8, 0x85B7, - 0xDEB9, 0x85B0, 0xDEBA, 0x85D3, 0xDEBB, 0x85C1, 0xDEBC, 0x85DC, - 0xDEBD, 0x85FF, 0xDEBE, 0x8627, 0xDEBF, 0x8605, 0xDEC0, 0x8629, - 0xDEC1, 0x8616, 0xDEC2, 0x863C, 0xDEC3, 0x5EFE, 0xDEC4, 0x5F08, - 0xDEC5, 0x593C, 0xDEC6, 0x5941, 0xDEC7, 0x8037, 0xDEC8, 0x5955, - 0xDEC9, 0x595A, 0xDECA, 0x5958, 0xDECB, 0x530F, 0xDECC, 0x5C22, - 0xDECD, 0x5C25, 0xDECE, 0x5C2C, 0xDECF, 0x5C34, 0xDED0, 0x624C, - 0xDED1, 0x626A, 0xDED2, 0x629F, 0xDED3, 0x62BB, 0xDED4, 0x62CA, - 0xDED5, 0x62DA, 0xDED6, 0x62D7, 0xDED7, 0x62EE, 0xDED8, 0x6322, - 0xDED9, 0x62F6, 0xDEDA, 0x6339, 0xDEDB, 0x634B, 0xDEDC, 0x6343, - 0xDEDD, 0x63AD, 0xDEDE, 0x63F6, 0xDEDF, 0x6371, 0xDEE0, 0x637A, - 0xDEE1, 0x638E, 0xDEE2, 0x63B4, 0xDEE3, 0x636D, 0xDEE4, 0x63AC, - 0xDEE5, 0x638A, 0xDEE6, 0x6369, 0xDEE7, 0x63AE, 0xDEE8, 0x63BC, - 0xDEE9, 0x63F2, 0xDEEA, 0x63F8, 0xDEEB, 0x63E0, 0xDEEC, 0x63FF, - 0xDEED, 0x63C4, 0xDEEE, 0x63DE, 0xDEEF, 0x63CE, 0xDEF0, 0x6452, - 0xDEF1, 0x63C6, 0xDEF2, 0x63BE, 0xDEF3, 0x6445, 0xDEF4, 0x6441, - 0xDEF5, 0x640B, 0xDEF6, 0x641B, 0xDEF7, 0x6420, 0xDEF8, 0x640C, - 0xDEF9, 0x6426, 0xDEFA, 0x6421, 0xDEFB, 0x645E, 0xDEFC, 0x6484, - 0xDEFD, 0x646D, 0xDEFE, 0x6496, 0xDF40, 0x9019, 0xDF41, 0x901C, - 0xDF42, 0x9023, 0xDF43, 0x9024, 0xDF44, 0x9025, 0xDF45, 0x9027, - 0xDF46, 0x9028, 0xDF47, 0x9029, 0xDF48, 0x902A, 0xDF49, 0x902B, - 0xDF4A, 0x902C, 0xDF4B, 0x9030, 0xDF4C, 0x9031, 0xDF4D, 0x9032, - 0xDF4E, 0x9033, 0xDF4F, 0x9034, 0xDF50, 0x9037, 0xDF51, 0x9039, - 0xDF52, 0x903A, 0xDF53, 0x903D, 0xDF54, 0x903F, 0xDF55, 0x9040, - 0xDF56, 0x9043, 0xDF57, 0x9045, 0xDF58, 0x9046, 0xDF59, 0x9048, - 0xDF5A, 0x9049, 0xDF5B, 0x904A, 0xDF5C, 0x904B, 0xDF5D, 0x904C, - 0xDF5E, 0x904E, 0xDF5F, 0x9054, 0xDF60, 0x9055, 0xDF61, 0x9056, - 0xDF62, 0x9059, 0xDF63, 0x905A, 0xDF64, 0x905C, 0xDF65, 0x905D, - 0xDF66, 0x905E, 0xDF67, 0x905F, 0xDF68, 0x9060, 0xDF69, 0x9061, - 0xDF6A, 0x9064, 0xDF6B, 0x9066, 0xDF6C, 0x9067, 0xDF6D, 0x9069, - 0xDF6E, 0x906A, 0xDF6F, 0x906B, 0xDF70, 0x906C, 0xDF71, 0x906F, - 0xDF72, 0x9070, 0xDF73, 0x9071, 0xDF74, 0x9072, 0xDF75, 0x9073, - 0xDF76, 0x9076, 0xDF77, 0x9077, 0xDF78, 0x9078, 0xDF79, 0x9079, - 0xDF7A, 0x907A, 0xDF7B, 0x907B, 0xDF7C, 0x907C, 0xDF7D, 0x907E, - 0xDF7E, 0x9081, 0xDF80, 0x9084, 0xDF81, 0x9085, 0xDF82, 0x9086, - 0xDF83, 0x9087, 0xDF84, 0x9089, 0xDF85, 0x908A, 0xDF86, 0x908C, - 0xDF87, 0x908D, 0xDF88, 0x908E, 0xDF89, 0x908F, 0xDF8A, 0x9090, - 0xDF8B, 0x9092, 0xDF8C, 0x9094, 0xDF8D, 0x9096, 0xDF8E, 0x9098, - 0xDF8F, 0x909A, 0xDF90, 0x909C, 0xDF91, 0x909E, 0xDF92, 0x909F, - 0xDF93, 0x90A0, 0xDF94, 0x90A4, 0xDF95, 0x90A5, 0xDF96, 0x90A7, - 0xDF97, 0x90A8, 0xDF98, 0x90A9, 0xDF99, 0x90AB, 0xDF9A, 0x90AD, - 0xDF9B, 0x90B2, 0xDF9C, 0x90B7, 0xDF9D, 0x90BC, 0xDF9E, 0x90BD, - 0xDF9F, 0x90BF, 0xDFA0, 0x90C0, 0xDFA1, 0x647A, 0xDFA2, 0x64B7, - 0xDFA3, 0x64B8, 0xDFA4, 0x6499, 0xDFA5, 0x64BA, 0xDFA6, 0x64C0, - 0xDFA7, 0x64D0, 0xDFA8, 0x64D7, 0xDFA9, 0x64E4, 0xDFAA, 0x64E2, - 0xDFAB, 0x6509, 0xDFAC, 0x6525, 0xDFAD, 0x652E, 0xDFAE, 0x5F0B, - 0xDFAF, 0x5FD2, 0xDFB0, 0x7519, 0xDFB1, 0x5F11, 0xDFB2, 0x535F, - 0xDFB3, 0x53F1, 0xDFB4, 0x53FD, 0xDFB5, 0x53E9, 0xDFB6, 0x53E8, - 0xDFB7, 0x53FB, 0xDFB8, 0x5412, 0xDFB9, 0x5416, 0xDFBA, 0x5406, - 0xDFBB, 0x544B, 0xDFBC, 0x5452, 0xDFBD, 0x5453, 0xDFBE, 0x5454, - 0xDFBF, 0x5456, 0xDFC0, 0x5443, 0xDFC1, 0x5421, 0xDFC2, 0x5457, - 0xDFC3, 0x5459, 0xDFC4, 0x5423, 0xDFC5, 0x5432, 0xDFC6, 0x5482, - 0xDFC7, 0x5494, 0xDFC8, 0x5477, 0xDFC9, 0x5471, 0xDFCA, 0x5464, - 0xDFCB, 0x549A, 0xDFCC, 0x549B, 0xDFCD, 0x5484, 0xDFCE, 0x5476, - 0xDFCF, 0x5466, 0xDFD0, 0x549D, 0xDFD1, 0x54D0, 0xDFD2, 0x54AD, - 0xDFD3, 0x54C2, 0xDFD4, 0x54B4, 0xDFD5, 0x54D2, 0xDFD6, 0x54A7, - 0xDFD7, 0x54A6, 0xDFD8, 0x54D3, 0xDFD9, 0x54D4, 0xDFDA, 0x5472, - 0xDFDB, 0x54A3, 0xDFDC, 0x54D5, 0xDFDD, 0x54BB, 0xDFDE, 0x54BF, - 0xDFDF, 0x54CC, 0xDFE0, 0x54D9, 0xDFE1, 0x54DA, 0xDFE2, 0x54DC, - 0xDFE3, 0x54A9, 0xDFE4, 0x54AA, 0xDFE5, 0x54A4, 0xDFE6, 0x54DD, - 0xDFE7, 0x54CF, 0xDFE8, 0x54DE, 0xDFE9, 0x551B, 0xDFEA, 0x54E7, - 0xDFEB, 0x5520, 0xDFEC, 0x54FD, 0xDFED, 0x5514, 0xDFEE, 0x54F3, - 0xDFEF, 0x5522, 0xDFF0, 0x5523, 0xDFF1, 0x550F, 0xDFF2, 0x5511, - 0xDFF3, 0x5527, 0xDFF4, 0x552A, 0xDFF5, 0x5567, 0xDFF6, 0x558F, - 0xDFF7, 0x55B5, 0xDFF8, 0x5549, 0xDFF9, 0x556D, 0xDFFA, 0x5541, - 0xDFFB, 0x5555, 0xDFFC, 0x553F, 0xDFFD, 0x5550, 0xDFFE, 0x553C, - 0xE040, 0x90C2, 0xE041, 0x90C3, 0xE042, 0x90C6, 0xE043, 0x90C8, - 0xE044, 0x90C9, 0xE045, 0x90CB, 0xE046, 0x90CC, 0xE047, 0x90CD, - 0xE048, 0x90D2, 0xE049, 0x90D4, 0xE04A, 0x90D5, 0xE04B, 0x90D6, - 0xE04C, 0x90D8, 0xE04D, 0x90D9, 0xE04E, 0x90DA, 0xE04F, 0x90DE, - 0xE050, 0x90DF, 0xE051, 0x90E0, 0xE052, 0x90E3, 0xE053, 0x90E4, - 0xE054, 0x90E5, 0xE055, 0x90E9, 0xE056, 0x90EA, 0xE057, 0x90EC, - 0xE058, 0x90EE, 0xE059, 0x90F0, 0xE05A, 0x90F1, 0xE05B, 0x90F2, - 0xE05C, 0x90F3, 0xE05D, 0x90F5, 0xE05E, 0x90F6, 0xE05F, 0x90F7, - 0xE060, 0x90F9, 0xE061, 0x90FA, 0xE062, 0x90FB, 0xE063, 0x90FC, - 0xE064, 0x90FF, 0xE065, 0x9100, 0xE066, 0x9101, 0xE067, 0x9103, - 0xE068, 0x9105, 0xE069, 0x9106, 0xE06A, 0x9107, 0xE06B, 0x9108, - 0xE06C, 0x9109, 0xE06D, 0x910A, 0xE06E, 0x910B, 0xE06F, 0x910C, - 0xE070, 0x910D, 0xE071, 0x910E, 0xE072, 0x910F, 0xE073, 0x9110, - 0xE074, 0x9111, 0xE075, 0x9112, 0xE076, 0x9113, 0xE077, 0x9114, - 0xE078, 0x9115, 0xE079, 0x9116, 0xE07A, 0x9117, 0xE07B, 0x9118, - 0xE07C, 0x911A, 0xE07D, 0x911B, 0xE07E, 0x911C, 0xE080, 0x911D, - 0xE081, 0x911F, 0xE082, 0x9120, 0xE083, 0x9121, 0xE084, 0x9124, - 0xE085, 0x9125, 0xE086, 0x9126, 0xE087, 0x9127, 0xE088, 0x9128, - 0xE089, 0x9129, 0xE08A, 0x912A, 0xE08B, 0x912B, 0xE08C, 0x912C, - 0xE08D, 0x912D, 0xE08E, 0x912E, 0xE08F, 0x9130, 0xE090, 0x9132, - 0xE091, 0x9133, 0xE092, 0x9134, 0xE093, 0x9135, 0xE094, 0x9136, - 0xE095, 0x9137, 0xE096, 0x9138, 0xE097, 0x913A, 0xE098, 0x913B, - 0xE099, 0x913C, 0xE09A, 0x913D, 0xE09B, 0x913E, 0xE09C, 0x913F, - 0xE09D, 0x9140, 0xE09E, 0x9141, 0xE09F, 0x9142, 0xE0A0, 0x9144, - 0xE0A1, 0x5537, 0xE0A2, 0x5556, 0xE0A3, 0x5575, 0xE0A4, 0x5576, - 0xE0A5, 0x5577, 0xE0A6, 0x5533, 0xE0A7, 0x5530, 0xE0A8, 0x555C, - 0xE0A9, 0x558B, 0xE0AA, 0x55D2, 0xE0AB, 0x5583, 0xE0AC, 0x55B1, - 0xE0AD, 0x55B9, 0xE0AE, 0x5588, 0xE0AF, 0x5581, 0xE0B0, 0x559F, - 0xE0B1, 0x557E, 0xE0B2, 0x55D6, 0xE0B3, 0x5591, 0xE0B4, 0x557B, - 0xE0B5, 0x55DF, 0xE0B6, 0x55BD, 0xE0B7, 0x55BE, 0xE0B8, 0x5594, - 0xE0B9, 0x5599, 0xE0BA, 0x55EA, 0xE0BB, 0x55F7, 0xE0BC, 0x55C9, - 0xE0BD, 0x561F, 0xE0BE, 0x55D1, 0xE0BF, 0x55EB, 0xE0C0, 0x55EC, - 0xE0C1, 0x55D4, 0xE0C2, 0x55E6, 0xE0C3, 0x55DD, 0xE0C4, 0x55C4, - 0xE0C5, 0x55EF, 0xE0C6, 0x55E5, 0xE0C7, 0x55F2, 0xE0C8, 0x55F3, - 0xE0C9, 0x55CC, 0xE0CA, 0x55CD, 0xE0CB, 0x55E8, 0xE0CC, 0x55F5, - 0xE0CD, 0x55E4, 0xE0CE, 0x8F94, 0xE0CF, 0x561E, 0xE0D0, 0x5608, - 0xE0D1, 0x560C, 0xE0D2, 0x5601, 0xE0D3, 0x5624, 0xE0D4, 0x5623, - 0xE0D5, 0x55FE, 0xE0D6, 0x5600, 0xE0D7, 0x5627, 0xE0D8, 0x562D, - 0xE0D9, 0x5658, 0xE0DA, 0x5639, 0xE0DB, 0x5657, 0xE0DC, 0x562C, - 0xE0DD, 0x564D, 0xE0DE, 0x5662, 0xE0DF, 0x5659, 0xE0E0, 0x565C, - 0xE0E1, 0x564C, 0xE0E2, 0x5654, 0xE0E3, 0x5686, 0xE0E4, 0x5664, - 0xE0E5, 0x5671, 0xE0E6, 0x566B, 0xE0E7, 0x567B, 0xE0E8, 0x567C, - 0xE0E9, 0x5685, 0xE0EA, 0x5693, 0xE0EB, 0x56AF, 0xE0EC, 0x56D4, - 0xE0ED, 0x56D7, 0xE0EE, 0x56DD, 0xE0EF, 0x56E1, 0xE0F0, 0x56F5, - 0xE0F1, 0x56EB, 0xE0F2, 0x56F9, 0xE0F3, 0x56FF, 0xE0F4, 0x5704, - 0xE0F5, 0x570A, 0xE0F6, 0x5709, 0xE0F7, 0x571C, 0xE0F8, 0x5E0F, - 0xE0F9, 0x5E19, 0xE0FA, 0x5E14, 0xE0FB, 0x5E11, 0xE0FC, 0x5E31, - 0xE0FD, 0x5E3B, 0xE0FE, 0x5E3C, 0xE140, 0x9145, 0xE141, 0x9147, - 0xE142, 0x9148, 0xE143, 0x9151, 0xE144, 0x9153, 0xE145, 0x9154, - 0xE146, 0x9155, 0xE147, 0x9156, 0xE148, 0x9158, 0xE149, 0x9159, - 0xE14A, 0x915B, 0xE14B, 0x915C, 0xE14C, 0x915F, 0xE14D, 0x9160, - 0xE14E, 0x9166, 0xE14F, 0x9167, 0xE150, 0x9168, 0xE151, 0x916B, - 0xE152, 0x916D, 0xE153, 0x9173, 0xE154, 0x917A, 0xE155, 0x917B, - 0xE156, 0x917C, 0xE157, 0x9180, 0xE158, 0x9181, 0xE159, 0x9182, - 0xE15A, 0x9183, 0xE15B, 0x9184, 0xE15C, 0x9186, 0xE15D, 0x9188, - 0xE15E, 0x918A, 0xE15F, 0x918E, 0xE160, 0x918F, 0xE161, 0x9193, - 0xE162, 0x9194, 0xE163, 0x9195, 0xE164, 0x9196, 0xE165, 0x9197, - 0xE166, 0x9198, 0xE167, 0x9199, 0xE168, 0x919C, 0xE169, 0x919D, - 0xE16A, 0x919E, 0xE16B, 0x919F, 0xE16C, 0x91A0, 0xE16D, 0x91A1, - 0xE16E, 0x91A4, 0xE16F, 0x91A5, 0xE170, 0x91A6, 0xE171, 0x91A7, - 0xE172, 0x91A8, 0xE173, 0x91A9, 0xE174, 0x91AB, 0xE175, 0x91AC, - 0xE176, 0x91B0, 0xE177, 0x91B1, 0xE178, 0x91B2, 0xE179, 0x91B3, - 0xE17A, 0x91B6, 0xE17B, 0x91B7, 0xE17C, 0x91B8, 0xE17D, 0x91B9, - 0xE17E, 0x91BB, 0xE180, 0x91BC, 0xE181, 0x91BD, 0xE182, 0x91BE, - 0xE183, 0x91BF, 0xE184, 0x91C0, 0xE185, 0x91C1, 0xE186, 0x91C2, - 0xE187, 0x91C3, 0xE188, 0x91C4, 0xE189, 0x91C5, 0xE18A, 0x91C6, - 0xE18B, 0x91C8, 0xE18C, 0x91CB, 0xE18D, 0x91D0, 0xE18E, 0x91D2, - 0xE18F, 0x91D3, 0xE190, 0x91D4, 0xE191, 0x91D5, 0xE192, 0x91D6, - 0xE193, 0x91D7, 0xE194, 0x91D8, 0xE195, 0x91D9, 0xE196, 0x91DA, - 0xE197, 0x91DB, 0xE198, 0x91DD, 0xE199, 0x91DE, 0xE19A, 0x91DF, - 0xE19B, 0x91E0, 0xE19C, 0x91E1, 0xE19D, 0x91E2, 0xE19E, 0x91E3, - 0xE19F, 0x91E4, 0xE1A0, 0x91E5, 0xE1A1, 0x5E37, 0xE1A2, 0x5E44, - 0xE1A3, 0x5E54, 0xE1A4, 0x5E5B, 0xE1A5, 0x5E5E, 0xE1A6, 0x5E61, - 0xE1A7, 0x5C8C, 0xE1A8, 0x5C7A, 0xE1A9, 0x5C8D, 0xE1AA, 0x5C90, - 0xE1AB, 0x5C96, 0xE1AC, 0x5C88, 0xE1AD, 0x5C98, 0xE1AE, 0x5C99, - 0xE1AF, 0x5C91, 0xE1B0, 0x5C9A, 0xE1B1, 0x5C9C, 0xE1B2, 0x5CB5, - 0xE1B3, 0x5CA2, 0xE1B4, 0x5CBD, 0xE1B5, 0x5CAC, 0xE1B6, 0x5CAB, - 0xE1B7, 0x5CB1, 0xE1B8, 0x5CA3, 0xE1B9, 0x5CC1, 0xE1BA, 0x5CB7, - 0xE1BB, 0x5CC4, 0xE1BC, 0x5CD2, 0xE1BD, 0x5CE4, 0xE1BE, 0x5CCB, - 0xE1BF, 0x5CE5, 0xE1C0, 0x5D02, 0xE1C1, 0x5D03, 0xE1C2, 0x5D27, - 0xE1C3, 0x5D26, 0xE1C4, 0x5D2E, 0xE1C5, 0x5D24, 0xE1C6, 0x5D1E, - 0xE1C7, 0x5D06, 0xE1C8, 0x5D1B, 0xE1C9, 0x5D58, 0xE1CA, 0x5D3E, - 0xE1CB, 0x5D34, 0xE1CC, 0x5D3D, 0xE1CD, 0x5D6C, 0xE1CE, 0x5D5B, - 0xE1CF, 0x5D6F, 0xE1D0, 0x5D5D, 0xE1D1, 0x5D6B, 0xE1D2, 0x5D4B, - 0xE1D3, 0x5D4A, 0xE1D4, 0x5D69, 0xE1D5, 0x5D74, 0xE1D6, 0x5D82, - 0xE1D7, 0x5D99, 0xE1D8, 0x5D9D, 0xE1D9, 0x8C73, 0xE1DA, 0x5DB7, - 0xE1DB, 0x5DC5, 0xE1DC, 0x5F73, 0xE1DD, 0x5F77, 0xE1DE, 0x5F82, - 0xE1DF, 0x5F87, 0xE1E0, 0x5F89, 0xE1E1, 0x5F8C, 0xE1E2, 0x5F95, - 0xE1E3, 0x5F99, 0xE1E4, 0x5F9C, 0xE1E5, 0x5FA8, 0xE1E6, 0x5FAD, - 0xE1E7, 0x5FB5, 0xE1E8, 0x5FBC, 0xE1E9, 0x8862, 0xE1EA, 0x5F61, - 0xE1EB, 0x72AD, 0xE1EC, 0x72B0, 0xE1ED, 0x72B4, 0xE1EE, 0x72B7, - 0xE1EF, 0x72B8, 0xE1F0, 0x72C3, 0xE1F1, 0x72C1, 0xE1F2, 0x72CE, - 0xE1F3, 0x72CD, 0xE1F4, 0x72D2, 0xE1F5, 0x72E8, 0xE1F6, 0x72EF, - 0xE1F7, 0x72E9, 0xE1F8, 0x72F2, 0xE1F9, 0x72F4, 0xE1FA, 0x72F7, - 0xE1FB, 0x7301, 0xE1FC, 0x72F3, 0xE1FD, 0x7303, 0xE1FE, 0x72FA, - 0xE240, 0x91E6, 0xE241, 0x91E7, 0xE242, 0x91E8, 0xE243, 0x91E9, - 0xE244, 0x91EA, 0xE245, 0x91EB, 0xE246, 0x91EC, 0xE247, 0x91ED, - 0xE248, 0x91EE, 0xE249, 0x91EF, 0xE24A, 0x91F0, 0xE24B, 0x91F1, - 0xE24C, 0x91F2, 0xE24D, 0x91F3, 0xE24E, 0x91F4, 0xE24F, 0x91F5, - 0xE250, 0x91F6, 0xE251, 0x91F7, 0xE252, 0x91F8, 0xE253, 0x91F9, - 0xE254, 0x91FA, 0xE255, 0x91FB, 0xE256, 0x91FC, 0xE257, 0x91FD, - 0xE258, 0x91FE, 0xE259, 0x91FF, 0xE25A, 0x9200, 0xE25B, 0x9201, - 0xE25C, 0x9202, 0xE25D, 0x9203, 0xE25E, 0x9204, 0xE25F, 0x9205, - 0xE260, 0x9206, 0xE261, 0x9207, 0xE262, 0x9208, 0xE263, 0x9209, - 0xE264, 0x920A, 0xE265, 0x920B, 0xE266, 0x920C, 0xE267, 0x920D, - 0xE268, 0x920E, 0xE269, 0x920F, 0xE26A, 0x9210, 0xE26B, 0x9211, - 0xE26C, 0x9212, 0xE26D, 0x9213, 0xE26E, 0x9214, 0xE26F, 0x9215, - 0xE270, 0x9216, 0xE271, 0x9217, 0xE272, 0x9218, 0xE273, 0x9219, - 0xE274, 0x921A, 0xE275, 0x921B, 0xE276, 0x921C, 0xE277, 0x921D, - 0xE278, 0x921E, 0xE279, 0x921F, 0xE27A, 0x9220, 0xE27B, 0x9221, - 0xE27C, 0x9222, 0xE27D, 0x9223, 0xE27E, 0x9224, 0xE280, 0x9225, - 0xE281, 0x9226, 0xE282, 0x9227, 0xE283, 0x9228, 0xE284, 0x9229, - 0xE285, 0x922A, 0xE286, 0x922B, 0xE287, 0x922C, 0xE288, 0x922D, - 0xE289, 0x922E, 0xE28A, 0x922F, 0xE28B, 0x9230, 0xE28C, 0x9231, - 0xE28D, 0x9232, 0xE28E, 0x9233, 0xE28F, 0x9234, 0xE290, 0x9235, - 0xE291, 0x9236, 0xE292, 0x9237, 0xE293, 0x9238, 0xE294, 0x9239, - 0xE295, 0x923A, 0xE296, 0x923B, 0xE297, 0x923C, 0xE298, 0x923D, - 0xE299, 0x923E, 0xE29A, 0x923F, 0xE29B, 0x9240, 0xE29C, 0x9241, - 0xE29D, 0x9242, 0xE29E, 0x9243, 0xE29F, 0x9244, 0xE2A0, 0x9245, - 0xE2A1, 0x72FB, 0xE2A2, 0x7317, 0xE2A3, 0x7313, 0xE2A4, 0x7321, - 0xE2A5, 0x730A, 0xE2A6, 0x731E, 0xE2A7, 0x731D, 0xE2A8, 0x7315, - 0xE2A9, 0x7322, 0xE2AA, 0x7339, 0xE2AB, 0x7325, 0xE2AC, 0x732C, - 0xE2AD, 0x7338, 0xE2AE, 0x7331, 0xE2AF, 0x7350, 0xE2B0, 0x734D, - 0xE2B1, 0x7357, 0xE2B2, 0x7360, 0xE2B3, 0x736C, 0xE2B4, 0x736F, - 0xE2B5, 0x737E, 0xE2B6, 0x821B, 0xE2B7, 0x5925, 0xE2B8, 0x98E7, - 0xE2B9, 0x5924, 0xE2BA, 0x5902, 0xE2BB, 0x9963, 0xE2BC, 0x9967, - 0xE2BD, 0x9968, 0xE2BE, 0x9969, 0xE2BF, 0x996A, 0xE2C0, 0x996B, - 0xE2C1, 0x996C, 0xE2C2, 0x9974, 0xE2C3, 0x9977, 0xE2C4, 0x997D, - 0xE2C5, 0x9980, 0xE2C6, 0x9984, 0xE2C7, 0x9987, 0xE2C8, 0x998A, - 0xE2C9, 0x998D, 0xE2CA, 0x9990, 0xE2CB, 0x9991, 0xE2CC, 0x9993, - 0xE2CD, 0x9994, 0xE2CE, 0x9995, 0xE2CF, 0x5E80, 0xE2D0, 0x5E91, - 0xE2D1, 0x5E8B, 0xE2D2, 0x5E96, 0xE2D3, 0x5EA5, 0xE2D4, 0x5EA0, - 0xE2D5, 0x5EB9, 0xE2D6, 0x5EB5, 0xE2D7, 0x5EBE, 0xE2D8, 0x5EB3, - 0xE2D9, 0x8D53, 0xE2DA, 0x5ED2, 0xE2DB, 0x5ED1, 0xE2DC, 0x5EDB, - 0xE2DD, 0x5EE8, 0xE2DE, 0x5EEA, 0xE2DF, 0x81BA, 0xE2E0, 0x5FC4, - 0xE2E1, 0x5FC9, 0xE2E2, 0x5FD6, 0xE2E3, 0x5FCF, 0xE2E4, 0x6003, - 0xE2E5, 0x5FEE, 0xE2E6, 0x6004, 0xE2E7, 0x5FE1, 0xE2E8, 0x5FE4, - 0xE2E9, 0x5FFE, 0xE2EA, 0x6005, 0xE2EB, 0x6006, 0xE2EC, 0x5FEA, - 0xE2ED, 0x5FED, 0xE2EE, 0x5FF8, 0xE2EF, 0x6019, 0xE2F0, 0x6035, - 0xE2F1, 0x6026, 0xE2F2, 0x601B, 0xE2F3, 0x600F, 0xE2F4, 0x600D, - 0xE2F5, 0x6029, 0xE2F6, 0x602B, 0xE2F7, 0x600A, 0xE2F8, 0x603F, - 0xE2F9, 0x6021, 0xE2FA, 0x6078, 0xE2FB, 0x6079, 0xE2FC, 0x607B, - 0xE2FD, 0x607A, 0xE2FE, 0x6042, 0xE340, 0x9246, 0xE341, 0x9247, - 0xE342, 0x9248, 0xE343, 0x9249, 0xE344, 0x924A, 0xE345, 0x924B, - 0xE346, 0x924C, 0xE347, 0x924D, 0xE348, 0x924E, 0xE349, 0x924F, - 0xE34A, 0x9250, 0xE34B, 0x9251, 0xE34C, 0x9252, 0xE34D, 0x9253, - 0xE34E, 0x9254, 0xE34F, 0x9255, 0xE350, 0x9256, 0xE351, 0x9257, - 0xE352, 0x9258, 0xE353, 0x9259, 0xE354, 0x925A, 0xE355, 0x925B, - 0xE356, 0x925C, 0xE357, 0x925D, 0xE358, 0x925E, 0xE359, 0x925F, - 0xE35A, 0x9260, 0xE35B, 0x9261, 0xE35C, 0x9262, 0xE35D, 0x9263, - 0xE35E, 0x9264, 0xE35F, 0x9265, 0xE360, 0x9266, 0xE361, 0x9267, - 0xE362, 0x9268, 0xE363, 0x9269, 0xE364, 0x926A, 0xE365, 0x926B, - 0xE366, 0x926C, 0xE367, 0x926D, 0xE368, 0x926E, 0xE369, 0x926F, - 0xE36A, 0x9270, 0xE36B, 0x9271, 0xE36C, 0x9272, 0xE36D, 0x9273, - 0xE36E, 0x9275, 0xE36F, 0x9276, 0xE370, 0x9277, 0xE371, 0x9278, - 0xE372, 0x9279, 0xE373, 0x927A, 0xE374, 0x927B, 0xE375, 0x927C, - 0xE376, 0x927D, 0xE377, 0x927E, 0xE378, 0x927F, 0xE379, 0x9280, - 0xE37A, 0x9281, 0xE37B, 0x9282, 0xE37C, 0x9283, 0xE37D, 0x9284, - 0xE37E, 0x9285, 0xE380, 0x9286, 0xE381, 0x9287, 0xE382, 0x9288, - 0xE383, 0x9289, 0xE384, 0x928A, 0xE385, 0x928B, 0xE386, 0x928C, - 0xE387, 0x928D, 0xE388, 0x928F, 0xE389, 0x9290, 0xE38A, 0x9291, - 0xE38B, 0x9292, 0xE38C, 0x9293, 0xE38D, 0x9294, 0xE38E, 0x9295, - 0xE38F, 0x9296, 0xE390, 0x9297, 0xE391, 0x9298, 0xE392, 0x9299, - 0xE393, 0x929A, 0xE394, 0x929B, 0xE395, 0x929C, 0xE396, 0x929D, - 0xE397, 0x929E, 0xE398, 0x929F, 0xE399, 0x92A0, 0xE39A, 0x92A1, - 0xE39B, 0x92A2, 0xE39C, 0x92A3, 0xE39D, 0x92A4, 0xE39E, 0x92A5, - 0xE39F, 0x92A6, 0xE3A0, 0x92A7, 0xE3A1, 0x606A, 0xE3A2, 0x607D, - 0xE3A3, 0x6096, 0xE3A4, 0x609A, 0xE3A5, 0x60AD, 0xE3A6, 0x609D, - 0xE3A7, 0x6083, 0xE3A8, 0x6092, 0xE3A9, 0x608C, 0xE3AA, 0x609B, - 0xE3AB, 0x60EC, 0xE3AC, 0x60BB, 0xE3AD, 0x60B1, 0xE3AE, 0x60DD, - 0xE3AF, 0x60D8, 0xE3B0, 0x60C6, 0xE3B1, 0x60DA, 0xE3B2, 0x60B4, - 0xE3B3, 0x6120, 0xE3B4, 0x6126, 0xE3B5, 0x6115, 0xE3B6, 0x6123, - 0xE3B7, 0x60F4, 0xE3B8, 0x6100, 0xE3B9, 0x610E, 0xE3BA, 0x612B, - 0xE3BB, 0x614A, 0xE3BC, 0x6175, 0xE3BD, 0x61AC, 0xE3BE, 0x6194, - 0xE3BF, 0x61A7, 0xE3C0, 0x61B7, 0xE3C1, 0x61D4, 0xE3C2, 0x61F5, - 0xE3C3, 0x5FDD, 0xE3C4, 0x96B3, 0xE3C5, 0x95E9, 0xE3C6, 0x95EB, - 0xE3C7, 0x95F1, 0xE3C8, 0x95F3, 0xE3C9, 0x95F5, 0xE3CA, 0x95F6, - 0xE3CB, 0x95FC, 0xE3CC, 0x95FE, 0xE3CD, 0x9603, 0xE3CE, 0x9604, - 0xE3CF, 0x9606, 0xE3D0, 0x9608, 0xE3D1, 0x960A, 0xE3D2, 0x960B, - 0xE3D3, 0x960C, 0xE3D4, 0x960D, 0xE3D5, 0x960F, 0xE3D6, 0x9612, - 0xE3D7, 0x9615, 0xE3D8, 0x9616, 0xE3D9, 0x9617, 0xE3DA, 0x9619, - 0xE3DB, 0x961A, 0xE3DC, 0x4E2C, 0xE3DD, 0x723F, 0xE3DE, 0x6215, - 0xE3DF, 0x6C35, 0xE3E0, 0x6C54, 0xE3E1, 0x6C5C, 0xE3E2, 0x6C4A, - 0xE3E3, 0x6CA3, 0xE3E4, 0x6C85, 0xE3E5, 0x6C90, 0xE3E6, 0x6C94, - 0xE3E7, 0x6C8C, 0xE3E8, 0x6C68, 0xE3E9, 0x6C69, 0xE3EA, 0x6C74, - 0xE3EB, 0x6C76, 0xE3EC, 0x6C86, 0xE3ED, 0x6CA9, 0xE3EE, 0x6CD0, - 0xE3EF, 0x6CD4, 0xE3F0, 0x6CAD, 0xE3F1, 0x6CF7, 0xE3F2, 0x6CF8, - 0xE3F3, 0x6CF1, 0xE3F4, 0x6CD7, 0xE3F5, 0x6CB2, 0xE3F6, 0x6CE0, - 0xE3F7, 0x6CD6, 0xE3F8, 0x6CFA, 0xE3F9, 0x6CEB, 0xE3FA, 0x6CEE, - 0xE3FB, 0x6CB1, 0xE3FC, 0x6CD3, 0xE3FD, 0x6CEF, 0xE3FE, 0x6CFE, - 0xE440, 0x92A8, 0xE441, 0x92A9, 0xE442, 0x92AA, 0xE443, 0x92AB, - 0xE444, 0x92AC, 0xE445, 0x92AD, 0xE446, 0x92AF, 0xE447, 0x92B0, - 0xE448, 0x92B1, 0xE449, 0x92B2, 0xE44A, 0x92B3, 0xE44B, 0x92B4, - 0xE44C, 0x92B5, 0xE44D, 0x92B6, 0xE44E, 0x92B7, 0xE44F, 0x92B8, - 0xE450, 0x92B9, 0xE451, 0x92BA, 0xE452, 0x92BB, 0xE453, 0x92BC, - 0xE454, 0x92BD, 0xE455, 0x92BE, 0xE456, 0x92BF, 0xE457, 0x92C0, - 0xE458, 0x92C1, 0xE459, 0x92C2, 0xE45A, 0x92C3, 0xE45B, 0x92C4, - 0xE45C, 0x92C5, 0xE45D, 0x92C6, 0xE45E, 0x92C7, 0xE45F, 0x92C9, - 0xE460, 0x92CA, 0xE461, 0x92CB, 0xE462, 0x92CC, 0xE463, 0x92CD, - 0xE464, 0x92CE, 0xE465, 0x92CF, 0xE466, 0x92D0, 0xE467, 0x92D1, - 0xE468, 0x92D2, 0xE469, 0x92D3, 0xE46A, 0x92D4, 0xE46B, 0x92D5, - 0xE46C, 0x92D6, 0xE46D, 0x92D7, 0xE46E, 0x92D8, 0xE46F, 0x92D9, - 0xE470, 0x92DA, 0xE471, 0x92DB, 0xE472, 0x92DC, 0xE473, 0x92DD, - 0xE474, 0x92DE, 0xE475, 0x92DF, 0xE476, 0x92E0, 0xE477, 0x92E1, - 0xE478, 0x92E2, 0xE479, 0x92E3, 0xE47A, 0x92E4, 0xE47B, 0x92E5, - 0xE47C, 0x92E6, 0xE47D, 0x92E7, 0xE47E, 0x92E8, 0xE480, 0x92E9, - 0xE481, 0x92EA, 0xE482, 0x92EB, 0xE483, 0x92EC, 0xE484, 0x92ED, - 0xE485, 0x92EE, 0xE486, 0x92EF, 0xE487, 0x92F0, 0xE488, 0x92F1, - 0xE489, 0x92F2, 0xE48A, 0x92F3, 0xE48B, 0x92F4, 0xE48C, 0x92F5, - 0xE48D, 0x92F6, 0xE48E, 0x92F7, 0xE48F, 0x92F8, 0xE490, 0x92F9, - 0xE491, 0x92FA, 0xE492, 0x92FB, 0xE493, 0x92FC, 0xE494, 0x92FD, - 0xE495, 0x92FE, 0xE496, 0x92FF, 0xE497, 0x9300, 0xE498, 0x9301, - 0xE499, 0x9302, 0xE49A, 0x9303, 0xE49B, 0x9304, 0xE49C, 0x9305, - 0xE49D, 0x9306, 0xE49E, 0x9307, 0xE49F, 0x9308, 0xE4A0, 0x9309, - 0xE4A1, 0x6D39, 0xE4A2, 0x6D27, 0xE4A3, 0x6D0C, 0xE4A4, 0x6D43, - 0xE4A5, 0x6D48, 0xE4A6, 0x6D07, 0xE4A7, 0x6D04, 0xE4A8, 0x6D19, - 0xE4A9, 0x6D0E, 0xE4AA, 0x6D2B, 0xE4AB, 0x6D4D, 0xE4AC, 0x6D2E, - 0xE4AD, 0x6D35, 0xE4AE, 0x6D1A, 0xE4AF, 0x6D4F, 0xE4B0, 0x6D52, - 0xE4B1, 0x6D54, 0xE4B2, 0x6D33, 0xE4B3, 0x6D91, 0xE4B4, 0x6D6F, - 0xE4B5, 0x6D9E, 0xE4B6, 0x6DA0, 0xE4B7, 0x6D5E, 0xE4B8, 0x6D93, - 0xE4B9, 0x6D94, 0xE4BA, 0x6D5C, 0xE4BB, 0x6D60, 0xE4BC, 0x6D7C, - 0xE4BD, 0x6D63, 0xE4BE, 0x6E1A, 0xE4BF, 0x6DC7, 0xE4C0, 0x6DC5, - 0xE4C1, 0x6DDE, 0xE4C2, 0x6E0E, 0xE4C3, 0x6DBF, 0xE4C4, 0x6DE0, - 0xE4C5, 0x6E11, 0xE4C6, 0x6DE6, 0xE4C7, 0x6DDD, 0xE4C8, 0x6DD9, - 0xE4C9, 0x6E16, 0xE4CA, 0x6DAB, 0xE4CB, 0x6E0C, 0xE4CC, 0x6DAE, - 0xE4CD, 0x6E2B, 0xE4CE, 0x6E6E, 0xE4CF, 0x6E4E, 0xE4D0, 0x6E6B, - 0xE4D1, 0x6EB2, 0xE4D2, 0x6E5F, 0xE4D3, 0x6E86, 0xE4D4, 0x6E53, - 0xE4D5, 0x6E54, 0xE4D6, 0x6E32, 0xE4D7, 0x6E25, 0xE4D8, 0x6E44, - 0xE4D9, 0x6EDF, 0xE4DA, 0x6EB1, 0xE4DB, 0x6E98, 0xE4DC, 0x6EE0, - 0xE4DD, 0x6F2D, 0xE4DE, 0x6EE2, 0xE4DF, 0x6EA5, 0xE4E0, 0x6EA7, - 0xE4E1, 0x6EBD, 0xE4E2, 0x6EBB, 0xE4E3, 0x6EB7, 0xE4E4, 0x6ED7, - 0xE4E5, 0x6EB4, 0xE4E6, 0x6ECF, 0xE4E7, 0x6E8F, 0xE4E8, 0x6EC2, - 0xE4E9, 0x6E9F, 0xE4EA, 0x6F62, 0xE4EB, 0x6F46, 0xE4EC, 0x6F47, - 0xE4ED, 0x6F24, 0xE4EE, 0x6F15, 0xE4EF, 0x6EF9, 0xE4F0, 0x6F2F, - 0xE4F1, 0x6F36, 0xE4F2, 0x6F4B, 0xE4F3, 0x6F74, 0xE4F4, 0x6F2A, - 0xE4F5, 0x6F09, 0xE4F6, 0x6F29, 0xE4F7, 0x6F89, 0xE4F8, 0x6F8D, - 0xE4F9, 0x6F8C, 0xE4FA, 0x6F78, 0xE4FB, 0x6F72, 0xE4FC, 0x6F7C, - 0xE4FD, 0x6F7A, 0xE4FE, 0x6FD1, 0xE540, 0x930A, 0xE541, 0x930B, - 0xE542, 0x930C, 0xE543, 0x930D, 0xE544, 0x930E, 0xE545, 0x930F, - 0xE546, 0x9310, 0xE547, 0x9311, 0xE548, 0x9312, 0xE549, 0x9313, - 0xE54A, 0x9314, 0xE54B, 0x9315, 0xE54C, 0x9316, 0xE54D, 0x9317, - 0xE54E, 0x9318, 0xE54F, 0x9319, 0xE550, 0x931A, 0xE551, 0x931B, - 0xE552, 0x931C, 0xE553, 0x931D, 0xE554, 0x931E, 0xE555, 0x931F, - 0xE556, 0x9320, 0xE557, 0x9321, 0xE558, 0x9322, 0xE559, 0x9323, - 0xE55A, 0x9324, 0xE55B, 0x9325, 0xE55C, 0x9326, 0xE55D, 0x9327, - 0xE55E, 0x9328, 0xE55F, 0x9329, 0xE560, 0x932A, 0xE561, 0x932B, - 0xE562, 0x932C, 0xE563, 0x932D, 0xE564, 0x932E, 0xE565, 0x932F, - 0xE566, 0x9330, 0xE567, 0x9331, 0xE568, 0x9332, 0xE569, 0x9333, - 0xE56A, 0x9334, 0xE56B, 0x9335, 0xE56C, 0x9336, 0xE56D, 0x9337, - 0xE56E, 0x9338, 0xE56F, 0x9339, 0xE570, 0x933A, 0xE571, 0x933B, - 0xE572, 0x933C, 0xE573, 0x933D, 0xE574, 0x933F, 0xE575, 0x9340, - 0xE576, 0x9341, 0xE577, 0x9342, 0xE578, 0x9343, 0xE579, 0x9344, - 0xE57A, 0x9345, 0xE57B, 0x9346, 0xE57C, 0x9347, 0xE57D, 0x9348, - 0xE57E, 0x9349, 0xE580, 0x934A, 0xE581, 0x934B, 0xE582, 0x934C, - 0xE583, 0x934D, 0xE584, 0x934E, 0xE585, 0x934F, 0xE586, 0x9350, - 0xE587, 0x9351, 0xE588, 0x9352, 0xE589, 0x9353, 0xE58A, 0x9354, - 0xE58B, 0x9355, 0xE58C, 0x9356, 0xE58D, 0x9357, 0xE58E, 0x9358, - 0xE58F, 0x9359, 0xE590, 0x935A, 0xE591, 0x935B, 0xE592, 0x935C, - 0xE593, 0x935D, 0xE594, 0x935E, 0xE595, 0x935F, 0xE596, 0x9360, - 0xE597, 0x9361, 0xE598, 0x9362, 0xE599, 0x9363, 0xE59A, 0x9364, - 0xE59B, 0x9365, 0xE59C, 0x9366, 0xE59D, 0x9367, 0xE59E, 0x9368, - 0xE59F, 0x9369, 0xE5A0, 0x936B, 0xE5A1, 0x6FC9, 0xE5A2, 0x6FA7, - 0xE5A3, 0x6FB9, 0xE5A4, 0x6FB6, 0xE5A5, 0x6FC2, 0xE5A6, 0x6FE1, - 0xE5A7, 0x6FEE, 0xE5A8, 0x6FDE, 0xE5A9, 0x6FE0, 0xE5AA, 0x6FEF, - 0xE5AB, 0x701A, 0xE5AC, 0x7023, 0xE5AD, 0x701B, 0xE5AE, 0x7039, - 0xE5AF, 0x7035, 0xE5B0, 0x704F, 0xE5B1, 0x705E, 0xE5B2, 0x5B80, - 0xE5B3, 0x5B84, 0xE5B4, 0x5B95, 0xE5B5, 0x5B93, 0xE5B6, 0x5BA5, - 0xE5B7, 0x5BB8, 0xE5B8, 0x752F, 0xE5B9, 0x9A9E, 0xE5BA, 0x6434, - 0xE5BB, 0x5BE4, 0xE5BC, 0x5BEE, 0xE5BD, 0x8930, 0xE5BE, 0x5BF0, - 0xE5BF, 0x8E47, 0xE5C0, 0x8B07, 0xE5C1, 0x8FB6, 0xE5C2, 0x8FD3, - 0xE5C3, 0x8FD5, 0xE5C4, 0x8FE5, 0xE5C5, 0x8FEE, 0xE5C6, 0x8FE4, - 0xE5C7, 0x8FE9, 0xE5C8, 0x8FE6, 0xE5C9, 0x8FF3, 0xE5CA, 0x8FE8, - 0xE5CB, 0x9005, 0xE5CC, 0x9004, 0xE5CD, 0x900B, 0xE5CE, 0x9026, - 0xE5CF, 0x9011, 0xE5D0, 0x900D, 0xE5D1, 0x9016, 0xE5D2, 0x9021, - 0xE5D3, 0x9035, 0xE5D4, 0x9036, 0xE5D5, 0x902D, 0xE5D6, 0x902F, - 0xE5D7, 0x9044, 0xE5D8, 0x9051, 0xE5D9, 0x9052, 0xE5DA, 0x9050, - 0xE5DB, 0x9068, 0xE5DC, 0x9058, 0xE5DD, 0x9062, 0xE5DE, 0x905B, - 0xE5DF, 0x66B9, 0xE5E0, 0x9074, 0xE5E1, 0x907D, 0xE5E2, 0x9082, - 0xE5E3, 0x9088, 0xE5E4, 0x9083, 0xE5E5, 0x908B, 0xE5E6, 0x5F50, - 0xE5E7, 0x5F57, 0xE5E8, 0x5F56, 0xE5E9, 0x5F58, 0xE5EA, 0x5C3B, - 0xE5EB, 0x54AB, 0xE5EC, 0x5C50, 0xE5ED, 0x5C59, 0xE5EE, 0x5B71, - 0xE5EF, 0x5C63, 0xE5F0, 0x5C66, 0xE5F1, 0x7FBC, 0xE5F2, 0x5F2A, - 0xE5F3, 0x5F29, 0xE5F4, 0x5F2D, 0xE5F5, 0x8274, 0xE5F6, 0x5F3C, - 0xE5F7, 0x9B3B, 0xE5F8, 0x5C6E, 0xE5F9, 0x5981, 0xE5FA, 0x5983, - 0xE5FB, 0x598D, 0xE5FC, 0x59A9, 0xE5FD, 0x59AA, 0xE5FE, 0x59A3, - 0xE640, 0x936C, 0xE641, 0x936D, 0xE642, 0x936E, 0xE643, 0x936F, - 0xE644, 0x9370, 0xE645, 0x9371, 0xE646, 0x9372, 0xE647, 0x9373, - 0xE648, 0x9374, 0xE649, 0x9375, 0xE64A, 0x9376, 0xE64B, 0x9377, - 0xE64C, 0x9378, 0xE64D, 0x9379, 0xE64E, 0x937A, 0xE64F, 0x937B, - 0xE650, 0x937C, 0xE651, 0x937D, 0xE652, 0x937E, 0xE653, 0x937F, - 0xE654, 0x9380, 0xE655, 0x9381, 0xE656, 0x9382, 0xE657, 0x9383, - 0xE658, 0x9384, 0xE659, 0x9385, 0xE65A, 0x9386, 0xE65B, 0x9387, - 0xE65C, 0x9388, 0xE65D, 0x9389, 0xE65E, 0x938A, 0xE65F, 0x938B, - 0xE660, 0x938C, 0xE661, 0x938D, 0xE662, 0x938E, 0xE663, 0x9390, - 0xE664, 0x9391, 0xE665, 0x9392, 0xE666, 0x9393, 0xE667, 0x9394, - 0xE668, 0x9395, 0xE669, 0x9396, 0xE66A, 0x9397, 0xE66B, 0x9398, - 0xE66C, 0x9399, 0xE66D, 0x939A, 0xE66E, 0x939B, 0xE66F, 0x939C, - 0xE670, 0x939D, 0xE671, 0x939E, 0xE672, 0x939F, 0xE673, 0x93A0, - 0xE674, 0x93A1, 0xE675, 0x93A2, 0xE676, 0x93A3, 0xE677, 0x93A4, - 0xE678, 0x93A5, 0xE679, 0x93A6, 0xE67A, 0x93A7, 0xE67B, 0x93A8, - 0xE67C, 0x93A9, 0xE67D, 0x93AA, 0xE67E, 0x93AB, 0xE680, 0x93AC, - 0xE681, 0x93AD, 0xE682, 0x93AE, 0xE683, 0x93AF, 0xE684, 0x93B0, - 0xE685, 0x93B1, 0xE686, 0x93B2, 0xE687, 0x93B3, 0xE688, 0x93B4, - 0xE689, 0x93B5, 0xE68A, 0x93B6, 0xE68B, 0x93B7, 0xE68C, 0x93B8, - 0xE68D, 0x93B9, 0xE68E, 0x93BA, 0xE68F, 0x93BB, 0xE690, 0x93BC, - 0xE691, 0x93BD, 0xE692, 0x93BE, 0xE693, 0x93BF, 0xE694, 0x93C0, - 0xE695, 0x93C1, 0xE696, 0x93C2, 0xE697, 0x93C3, 0xE698, 0x93C4, - 0xE699, 0x93C5, 0xE69A, 0x93C6, 0xE69B, 0x93C7, 0xE69C, 0x93C8, - 0xE69D, 0x93C9, 0xE69E, 0x93CB, 0xE69F, 0x93CC, 0xE6A0, 0x93CD, - 0xE6A1, 0x5997, 0xE6A2, 0x59CA, 0xE6A3, 0x59AB, 0xE6A4, 0x599E, - 0xE6A5, 0x59A4, 0xE6A6, 0x59D2, 0xE6A7, 0x59B2, 0xE6A8, 0x59AF, - 0xE6A9, 0x59D7, 0xE6AA, 0x59BE, 0xE6AB, 0x5A05, 0xE6AC, 0x5A06, - 0xE6AD, 0x59DD, 0xE6AE, 0x5A08, 0xE6AF, 0x59E3, 0xE6B0, 0x59D8, - 0xE6B1, 0x59F9, 0xE6B2, 0x5A0C, 0xE6B3, 0x5A09, 0xE6B4, 0x5A32, - 0xE6B5, 0x5A34, 0xE6B6, 0x5A11, 0xE6B7, 0x5A23, 0xE6B8, 0x5A13, - 0xE6B9, 0x5A40, 0xE6BA, 0x5A67, 0xE6BB, 0x5A4A, 0xE6BC, 0x5A55, - 0xE6BD, 0x5A3C, 0xE6BE, 0x5A62, 0xE6BF, 0x5A75, 0xE6C0, 0x80EC, - 0xE6C1, 0x5AAA, 0xE6C2, 0x5A9B, 0xE6C3, 0x5A77, 0xE6C4, 0x5A7A, - 0xE6C5, 0x5ABE, 0xE6C6, 0x5AEB, 0xE6C7, 0x5AB2, 0xE6C8, 0x5AD2, - 0xE6C9, 0x5AD4, 0xE6CA, 0x5AB8, 0xE6CB, 0x5AE0, 0xE6CC, 0x5AE3, - 0xE6CD, 0x5AF1, 0xE6CE, 0x5AD6, 0xE6CF, 0x5AE6, 0xE6D0, 0x5AD8, - 0xE6D1, 0x5ADC, 0xE6D2, 0x5B09, 0xE6D3, 0x5B17, 0xE6D4, 0x5B16, - 0xE6D5, 0x5B32, 0xE6D6, 0x5B37, 0xE6D7, 0x5B40, 0xE6D8, 0x5C15, - 0xE6D9, 0x5C1C, 0xE6DA, 0x5B5A, 0xE6DB, 0x5B65, 0xE6DC, 0x5B73, - 0xE6DD, 0x5B51, 0xE6DE, 0x5B53, 0xE6DF, 0x5B62, 0xE6E0, 0x9A75, - 0xE6E1, 0x9A77, 0xE6E2, 0x9A78, 0xE6E3, 0x9A7A, 0xE6E4, 0x9A7F, - 0xE6E5, 0x9A7D, 0xE6E6, 0x9A80, 0xE6E7, 0x9A81, 0xE6E8, 0x9A85, - 0xE6E9, 0x9A88, 0xE6EA, 0x9A8A, 0xE6EB, 0x9A90, 0xE6EC, 0x9A92, - 0xE6ED, 0x9A93, 0xE6EE, 0x9A96, 0xE6EF, 0x9A98, 0xE6F0, 0x9A9B, - 0xE6F1, 0x9A9C, 0xE6F2, 0x9A9D, 0xE6F3, 0x9A9F, 0xE6F4, 0x9AA0, - 0xE6F5, 0x9AA2, 0xE6F6, 0x9AA3, 0xE6F7, 0x9AA5, 0xE6F8, 0x9AA7, - 0xE6F9, 0x7E9F, 0xE6FA, 0x7EA1, 0xE6FB, 0x7EA3, 0xE6FC, 0x7EA5, - 0xE6FD, 0x7EA8, 0xE6FE, 0x7EA9, 0xE740, 0x93CE, 0xE741, 0x93CF, - 0xE742, 0x93D0, 0xE743, 0x93D1, 0xE744, 0x93D2, 0xE745, 0x93D3, - 0xE746, 0x93D4, 0xE747, 0x93D5, 0xE748, 0x93D7, 0xE749, 0x93D8, - 0xE74A, 0x93D9, 0xE74B, 0x93DA, 0xE74C, 0x93DB, 0xE74D, 0x93DC, - 0xE74E, 0x93DD, 0xE74F, 0x93DE, 0xE750, 0x93DF, 0xE751, 0x93E0, - 0xE752, 0x93E1, 0xE753, 0x93E2, 0xE754, 0x93E3, 0xE755, 0x93E4, - 0xE756, 0x93E5, 0xE757, 0x93E6, 0xE758, 0x93E7, 0xE759, 0x93E8, - 0xE75A, 0x93E9, 0xE75B, 0x93EA, 0xE75C, 0x93EB, 0xE75D, 0x93EC, - 0xE75E, 0x93ED, 0xE75F, 0x93EE, 0xE760, 0x93EF, 0xE761, 0x93F0, - 0xE762, 0x93F1, 0xE763, 0x93F2, 0xE764, 0x93F3, 0xE765, 0x93F4, - 0xE766, 0x93F5, 0xE767, 0x93F6, 0xE768, 0x93F7, 0xE769, 0x93F8, - 0xE76A, 0x93F9, 0xE76B, 0x93FA, 0xE76C, 0x93FB, 0xE76D, 0x93FC, - 0xE76E, 0x93FD, 0xE76F, 0x93FE, 0xE770, 0x93FF, 0xE771, 0x9400, - 0xE772, 0x9401, 0xE773, 0x9402, 0xE774, 0x9403, 0xE775, 0x9404, - 0xE776, 0x9405, 0xE777, 0x9406, 0xE778, 0x9407, 0xE779, 0x9408, - 0xE77A, 0x9409, 0xE77B, 0x940A, 0xE77C, 0x940B, 0xE77D, 0x940C, - 0xE77E, 0x940D, 0xE780, 0x940E, 0xE781, 0x940F, 0xE782, 0x9410, - 0xE783, 0x9411, 0xE784, 0x9412, 0xE785, 0x9413, 0xE786, 0x9414, - 0xE787, 0x9415, 0xE788, 0x9416, 0xE789, 0x9417, 0xE78A, 0x9418, - 0xE78B, 0x9419, 0xE78C, 0x941A, 0xE78D, 0x941B, 0xE78E, 0x941C, - 0xE78F, 0x941D, 0xE790, 0x941E, 0xE791, 0x941F, 0xE792, 0x9420, - 0xE793, 0x9421, 0xE794, 0x9422, 0xE795, 0x9423, 0xE796, 0x9424, - 0xE797, 0x9425, 0xE798, 0x9426, 0xE799, 0x9427, 0xE79A, 0x9428, - 0xE79B, 0x9429, 0xE79C, 0x942A, 0xE79D, 0x942B, 0xE79E, 0x942C, - 0xE79F, 0x942D, 0xE7A0, 0x942E, 0xE7A1, 0x7EAD, 0xE7A2, 0x7EB0, - 0xE7A3, 0x7EBE, 0xE7A4, 0x7EC0, 0xE7A5, 0x7EC1, 0xE7A6, 0x7EC2, - 0xE7A7, 0x7EC9, 0xE7A8, 0x7ECB, 0xE7A9, 0x7ECC, 0xE7AA, 0x7ED0, - 0xE7AB, 0x7ED4, 0xE7AC, 0x7ED7, 0xE7AD, 0x7EDB, 0xE7AE, 0x7EE0, - 0xE7AF, 0x7EE1, 0xE7B0, 0x7EE8, 0xE7B1, 0x7EEB, 0xE7B2, 0x7EEE, - 0xE7B3, 0x7EEF, 0xE7B4, 0x7EF1, 0xE7B5, 0x7EF2, 0xE7B6, 0x7F0D, - 0xE7B7, 0x7EF6, 0xE7B8, 0x7EFA, 0xE7B9, 0x7EFB, 0xE7BA, 0x7EFE, - 0xE7BB, 0x7F01, 0xE7BC, 0x7F02, 0xE7BD, 0x7F03, 0xE7BE, 0x7F07, - 0xE7BF, 0x7F08, 0xE7C0, 0x7F0B, 0xE7C1, 0x7F0C, 0xE7C2, 0x7F0F, - 0xE7C3, 0x7F11, 0xE7C4, 0x7F12, 0xE7C5, 0x7F17, 0xE7C6, 0x7F19, - 0xE7C7, 0x7F1C, 0xE7C8, 0x7F1B, 0xE7C9, 0x7F1F, 0xE7CA, 0x7F21, - 0xE7CB, 0x7F22, 0xE7CC, 0x7F23, 0xE7CD, 0x7F24, 0xE7CE, 0x7F25, - 0xE7CF, 0x7F26, 0xE7D0, 0x7F27, 0xE7D1, 0x7F2A, 0xE7D2, 0x7F2B, - 0xE7D3, 0x7F2C, 0xE7D4, 0x7F2D, 0xE7D5, 0x7F2F, 0xE7D6, 0x7F30, - 0xE7D7, 0x7F31, 0xE7D8, 0x7F32, 0xE7D9, 0x7F33, 0xE7DA, 0x7F35, - 0xE7DB, 0x5E7A, 0xE7DC, 0x757F, 0xE7DD, 0x5DDB, 0xE7DE, 0x753E, - 0xE7DF, 0x9095, 0xE7E0, 0x738E, 0xE7E1, 0x7391, 0xE7E2, 0x73AE, - 0xE7E3, 0x73A2, 0xE7E4, 0x739F, 0xE7E5, 0x73CF, 0xE7E6, 0x73C2, - 0xE7E7, 0x73D1, 0xE7E8, 0x73B7, 0xE7E9, 0x73B3, 0xE7EA, 0x73C0, - 0xE7EB, 0x73C9, 0xE7EC, 0x73C8, 0xE7ED, 0x73E5, 0xE7EE, 0x73D9, - 0xE7EF, 0x987C, 0xE7F0, 0x740A, 0xE7F1, 0x73E9, 0xE7F2, 0x73E7, - 0xE7F3, 0x73DE, 0xE7F4, 0x73BA, 0xE7F5, 0x73F2, 0xE7F6, 0x740F, - 0xE7F7, 0x742A, 0xE7F8, 0x745B, 0xE7F9, 0x7426, 0xE7FA, 0x7425, - 0xE7FB, 0x7428, 0xE7FC, 0x7430, 0xE7FD, 0x742E, 0xE7FE, 0x742C, - 0xE840, 0x942F, 0xE841, 0x9430, 0xE842, 0x9431, 0xE843, 0x9432, - 0xE844, 0x9433, 0xE845, 0x9434, 0xE846, 0x9435, 0xE847, 0x9436, - 0xE848, 0x9437, 0xE849, 0x9438, 0xE84A, 0x9439, 0xE84B, 0x943A, - 0xE84C, 0x943B, 0xE84D, 0x943C, 0xE84E, 0x943D, 0xE84F, 0x943F, - 0xE850, 0x9440, 0xE851, 0x9441, 0xE852, 0x9442, 0xE853, 0x9443, - 0xE854, 0x9444, 0xE855, 0x9445, 0xE856, 0x9446, 0xE857, 0x9447, - 0xE858, 0x9448, 0xE859, 0x9449, 0xE85A, 0x944A, 0xE85B, 0x944B, - 0xE85C, 0x944C, 0xE85D, 0x944D, 0xE85E, 0x944E, 0xE85F, 0x944F, - 0xE860, 0x9450, 0xE861, 0x9451, 0xE862, 0x9452, 0xE863, 0x9453, - 0xE864, 0x9454, 0xE865, 0x9455, 0xE866, 0x9456, 0xE867, 0x9457, - 0xE868, 0x9458, 0xE869, 0x9459, 0xE86A, 0x945A, 0xE86B, 0x945B, - 0xE86C, 0x945C, 0xE86D, 0x945D, 0xE86E, 0x945E, 0xE86F, 0x945F, - 0xE870, 0x9460, 0xE871, 0x9461, 0xE872, 0x9462, 0xE873, 0x9463, - 0xE874, 0x9464, 0xE875, 0x9465, 0xE876, 0x9466, 0xE877, 0x9467, - 0xE878, 0x9468, 0xE879, 0x9469, 0xE87A, 0x946A, 0xE87B, 0x946C, - 0xE87C, 0x946D, 0xE87D, 0x946E, 0xE87E, 0x946F, 0xE880, 0x9470, - 0xE881, 0x9471, 0xE882, 0x9472, 0xE883, 0x9473, 0xE884, 0x9474, - 0xE885, 0x9475, 0xE886, 0x9476, 0xE887, 0x9477, 0xE888, 0x9478, - 0xE889, 0x9479, 0xE88A, 0x947A, 0xE88B, 0x947B, 0xE88C, 0x947C, - 0xE88D, 0x947D, 0xE88E, 0x947E, 0xE88F, 0x947F, 0xE890, 0x9480, - 0xE891, 0x9481, 0xE892, 0x9482, 0xE893, 0x9483, 0xE894, 0x9484, - 0xE895, 0x9491, 0xE896, 0x9496, 0xE897, 0x9498, 0xE898, 0x94C7, - 0xE899, 0x94CF, 0xE89A, 0x94D3, 0xE89B, 0x94D4, 0xE89C, 0x94DA, - 0xE89D, 0x94E6, 0xE89E, 0x94FB, 0xE89F, 0x951C, 0xE8A0, 0x9520, - 0xE8A1, 0x741B, 0xE8A2, 0x741A, 0xE8A3, 0x7441, 0xE8A4, 0x745C, - 0xE8A5, 0x7457, 0xE8A6, 0x7455, 0xE8A7, 0x7459, 0xE8A8, 0x7477, - 0xE8A9, 0x746D, 0xE8AA, 0x747E, 0xE8AB, 0x749C, 0xE8AC, 0x748E, - 0xE8AD, 0x7480, 0xE8AE, 0x7481, 0xE8AF, 0x7487, 0xE8B0, 0x748B, - 0xE8B1, 0x749E, 0xE8B2, 0x74A8, 0xE8B3, 0x74A9, 0xE8B4, 0x7490, - 0xE8B5, 0x74A7, 0xE8B6, 0x74D2, 0xE8B7, 0x74BA, 0xE8B8, 0x97EA, - 0xE8B9, 0x97EB, 0xE8BA, 0x97EC, 0xE8BB, 0x674C, 0xE8BC, 0x6753, - 0xE8BD, 0x675E, 0xE8BE, 0x6748, 0xE8BF, 0x6769, 0xE8C0, 0x67A5, - 0xE8C1, 0x6787, 0xE8C2, 0x676A, 0xE8C3, 0x6773, 0xE8C4, 0x6798, - 0xE8C5, 0x67A7, 0xE8C6, 0x6775, 0xE8C7, 0x67A8, 0xE8C8, 0x679E, - 0xE8C9, 0x67AD, 0xE8CA, 0x678B, 0xE8CB, 0x6777, 0xE8CC, 0x677C, - 0xE8CD, 0x67F0, 0xE8CE, 0x6809, 0xE8CF, 0x67D8, 0xE8D0, 0x680A, - 0xE8D1, 0x67E9, 0xE8D2, 0x67B0, 0xE8D3, 0x680C, 0xE8D4, 0x67D9, - 0xE8D5, 0x67B5, 0xE8D6, 0x67DA, 0xE8D7, 0x67B3, 0xE8D8, 0x67DD, - 0xE8D9, 0x6800, 0xE8DA, 0x67C3, 0xE8DB, 0x67B8, 0xE8DC, 0x67E2, - 0xE8DD, 0x680E, 0xE8DE, 0x67C1, 0xE8DF, 0x67FD, 0xE8E0, 0x6832, - 0xE8E1, 0x6833, 0xE8E2, 0x6860, 0xE8E3, 0x6861, 0xE8E4, 0x684E, - 0xE8E5, 0x6862, 0xE8E6, 0x6844, 0xE8E7, 0x6864, 0xE8E8, 0x6883, - 0xE8E9, 0x681D, 0xE8EA, 0x6855, 0xE8EB, 0x6866, 0xE8EC, 0x6841, - 0xE8ED, 0x6867, 0xE8EE, 0x6840, 0xE8EF, 0x683E, 0xE8F0, 0x684A, - 0xE8F1, 0x6849, 0xE8F2, 0x6829, 0xE8F3, 0x68B5, 0xE8F4, 0x688F, - 0xE8F5, 0x6874, 0xE8F6, 0x6877, 0xE8F7, 0x6893, 0xE8F8, 0x686B, - 0xE8F9, 0x68C2, 0xE8FA, 0x696E, 0xE8FB, 0x68FC, 0xE8FC, 0x691F, - 0xE8FD, 0x6920, 0xE8FE, 0x68F9, 0xE940, 0x9527, 0xE941, 0x9533, - 0xE942, 0x953D, 0xE943, 0x9543, 0xE944, 0x9548, 0xE945, 0x954B, - 0xE946, 0x9555, 0xE947, 0x955A, 0xE948, 0x9560, 0xE949, 0x956E, - 0xE94A, 0x9574, 0xE94B, 0x9575, 0xE94C, 0x9577, 0xE94D, 0x9578, - 0xE94E, 0x9579, 0xE94F, 0x957A, 0xE950, 0x957B, 0xE951, 0x957C, - 0xE952, 0x957D, 0xE953, 0x957E, 0xE954, 0x9580, 0xE955, 0x9581, - 0xE956, 0x9582, 0xE957, 0x9583, 0xE958, 0x9584, 0xE959, 0x9585, - 0xE95A, 0x9586, 0xE95B, 0x9587, 0xE95C, 0x9588, 0xE95D, 0x9589, - 0xE95E, 0x958A, 0xE95F, 0x958B, 0xE960, 0x958C, 0xE961, 0x958D, - 0xE962, 0x958E, 0xE963, 0x958F, 0xE964, 0x9590, 0xE965, 0x9591, - 0xE966, 0x9592, 0xE967, 0x9593, 0xE968, 0x9594, 0xE969, 0x9595, - 0xE96A, 0x9596, 0xE96B, 0x9597, 0xE96C, 0x9598, 0xE96D, 0x9599, - 0xE96E, 0x959A, 0xE96F, 0x959B, 0xE970, 0x959C, 0xE971, 0x959D, - 0xE972, 0x959E, 0xE973, 0x959F, 0xE974, 0x95A0, 0xE975, 0x95A1, - 0xE976, 0x95A2, 0xE977, 0x95A3, 0xE978, 0x95A4, 0xE979, 0x95A5, - 0xE97A, 0x95A6, 0xE97B, 0x95A7, 0xE97C, 0x95A8, 0xE97D, 0x95A9, - 0xE97E, 0x95AA, 0xE980, 0x95AB, 0xE981, 0x95AC, 0xE982, 0x95AD, - 0xE983, 0x95AE, 0xE984, 0x95AF, 0xE985, 0x95B0, 0xE986, 0x95B1, - 0xE987, 0x95B2, 0xE988, 0x95B3, 0xE989, 0x95B4, 0xE98A, 0x95B5, - 0xE98B, 0x95B6, 0xE98C, 0x95B7, 0xE98D, 0x95B8, 0xE98E, 0x95B9, - 0xE98F, 0x95BA, 0xE990, 0x95BB, 0xE991, 0x95BC, 0xE992, 0x95BD, - 0xE993, 0x95BE, 0xE994, 0x95BF, 0xE995, 0x95C0, 0xE996, 0x95C1, - 0xE997, 0x95C2, 0xE998, 0x95C3, 0xE999, 0x95C4, 0xE99A, 0x95C5, - 0xE99B, 0x95C6, 0xE99C, 0x95C7, 0xE99D, 0x95C8, 0xE99E, 0x95C9, - 0xE99F, 0x95CA, 0xE9A0, 0x95CB, 0xE9A1, 0x6924, 0xE9A2, 0x68F0, - 0xE9A3, 0x690B, 0xE9A4, 0x6901, 0xE9A5, 0x6957, 0xE9A6, 0x68E3, - 0xE9A7, 0x6910, 0xE9A8, 0x6971, 0xE9A9, 0x6939, 0xE9AA, 0x6960, - 0xE9AB, 0x6942, 0xE9AC, 0x695D, 0xE9AD, 0x6984, 0xE9AE, 0x696B, - 0xE9AF, 0x6980, 0xE9B0, 0x6998, 0xE9B1, 0x6978, 0xE9B2, 0x6934, - 0xE9B3, 0x69CC, 0xE9B4, 0x6987, 0xE9B5, 0x6988, 0xE9B6, 0x69CE, - 0xE9B7, 0x6989, 0xE9B8, 0x6966, 0xE9B9, 0x6963, 0xE9BA, 0x6979, - 0xE9BB, 0x699B, 0xE9BC, 0x69A7, 0xE9BD, 0x69BB, 0xE9BE, 0x69AB, - 0xE9BF, 0x69AD, 0xE9C0, 0x69D4, 0xE9C1, 0x69B1, 0xE9C2, 0x69C1, - 0xE9C3, 0x69CA, 0xE9C4, 0x69DF, 0xE9C5, 0x6995, 0xE9C6, 0x69E0, - 0xE9C7, 0x698D, 0xE9C8, 0x69FF, 0xE9C9, 0x6A2F, 0xE9CA, 0x69ED, - 0xE9CB, 0x6A17, 0xE9CC, 0x6A18, 0xE9CD, 0x6A65, 0xE9CE, 0x69F2, - 0xE9CF, 0x6A44, 0xE9D0, 0x6A3E, 0xE9D1, 0x6AA0, 0xE9D2, 0x6A50, - 0xE9D3, 0x6A5B, 0xE9D4, 0x6A35, 0xE9D5, 0x6A8E, 0xE9D6, 0x6A79, - 0xE9D7, 0x6A3D, 0xE9D8, 0x6A28, 0xE9D9, 0x6A58, 0xE9DA, 0x6A7C, - 0xE9DB, 0x6A91, 0xE9DC, 0x6A90, 0xE9DD, 0x6AA9, 0xE9DE, 0x6A97, - 0xE9DF, 0x6AAB, 0xE9E0, 0x7337, 0xE9E1, 0x7352, 0xE9E2, 0x6B81, - 0xE9E3, 0x6B82, 0xE9E4, 0x6B87, 0xE9E5, 0x6B84, 0xE9E6, 0x6B92, - 0xE9E7, 0x6B93, 0xE9E8, 0x6B8D, 0xE9E9, 0x6B9A, 0xE9EA, 0x6B9B, - 0xE9EB, 0x6BA1, 0xE9EC, 0x6BAA, 0xE9ED, 0x8F6B, 0xE9EE, 0x8F6D, - 0xE9EF, 0x8F71, 0xE9F0, 0x8F72, 0xE9F1, 0x8F73, 0xE9F2, 0x8F75, - 0xE9F3, 0x8F76, 0xE9F4, 0x8F78, 0xE9F5, 0x8F77, 0xE9F6, 0x8F79, - 0xE9F7, 0x8F7A, 0xE9F8, 0x8F7C, 0xE9F9, 0x8F7E, 0xE9FA, 0x8F81, - 0xE9FB, 0x8F82, 0xE9FC, 0x8F84, 0xE9FD, 0x8F87, 0xE9FE, 0x8F8B, - 0xEA40, 0x95CC, 0xEA41, 0x95CD, 0xEA42, 0x95CE, 0xEA43, 0x95CF, - 0xEA44, 0x95D0, 0xEA45, 0x95D1, 0xEA46, 0x95D2, 0xEA47, 0x95D3, - 0xEA48, 0x95D4, 0xEA49, 0x95D5, 0xEA4A, 0x95D6, 0xEA4B, 0x95D7, - 0xEA4C, 0x95D8, 0xEA4D, 0x95D9, 0xEA4E, 0x95DA, 0xEA4F, 0x95DB, - 0xEA50, 0x95DC, 0xEA51, 0x95DD, 0xEA52, 0x95DE, 0xEA53, 0x95DF, - 0xEA54, 0x95E0, 0xEA55, 0x95E1, 0xEA56, 0x95E2, 0xEA57, 0x95E3, - 0xEA58, 0x95E4, 0xEA59, 0x95E5, 0xEA5A, 0x95E6, 0xEA5B, 0x95E7, - 0xEA5C, 0x95EC, 0xEA5D, 0x95FF, 0xEA5E, 0x9607, 0xEA5F, 0x9613, - 0xEA60, 0x9618, 0xEA61, 0x961B, 0xEA62, 0x961E, 0xEA63, 0x9620, - 0xEA64, 0x9623, 0xEA65, 0x9624, 0xEA66, 0x9625, 0xEA67, 0x9626, - 0xEA68, 0x9627, 0xEA69, 0x9628, 0xEA6A, 0x9629, 0xEA6B, 0x962B, - 0xEA6C, 0x962C, 0xEA6D, 0x962D, 0xEA6E, 0x962F, 0xEA6F, 0x9630, - 0xEA70, 0x9637, 0xEA71, 0x9638, 0xEA72, 0x9639, 0xEA73, 0x963A, - 0xEA74, 0x963E, 0xEA75, 0x9641, 0xEA76, 0x9643, 0xEA77, 0x964A, - 0xEA78, 0x964E, 0xEA79, 0x964F, 0xEA7A, 0x9651, 0xEA7B, 0x9652, - 0xEA7C, 0x9653, 0xEA7D, 0x9656, 0xEA7E, 0x9657, 0xEA80, 0x9658, - 0xEA81, 0x9659, 0xEA82, 0x965A, 0xEA83, 0x965C, 0xEA84, 0x965D, - 0xEA85, 0x965E, 0xEA86, 0x9660, 0xEA87, 0x9663, 0xEA88, 0x9665, - 0xEA89, 0x9666, 0xEA8A, 0x966B, 0xEA8B, 0x966D, 0xEA8C, 0x966E, - 0xEA8D, 0x966F, 0xEA8E, 0x9670, 0xEA8F, 0x9671, 0xEA90, 0x9673, - 0xEA91, 0x9678, 0xEA92, 0x9679, 0xEA93, 0x967A, 0xEA94, 0x967B, - 0xEA95, 0x967C, 0xEA96, 0x967D, 0xEA97, 0x967E, 0xEA98, 0x967F, - 0xEA99, 0x9680, 0xEA9A, 0x9681, 0xEA9B, 0x9682, 0xEA9C, 0x9683, - 0xEA9D, 0x9684, 0xEA9E, 0x9687, 0xEA9F, 0x9689, 0xEAA0, 0x968A, - 0xEAA1, 0x8F8D, 0xEAA2, 0x8F8E, 0xEAA3, 0x8F8F, 0xEAA4, 0x8F98, - 0xEAA5, 0x8F9A, 0xEAA6, 0x8ECE, 0xEAA7, 0x620B, 0xEAA8, 0x6217, - 0xEAA9, 0x621B, 0xEAAA, 0x621F, 0xEAAB, 0x6222, 0xEAAC, 0x6221, - 0xEAAD, 0x6225, 0xEAAE, 0x6224, 0xEAAF, 0x622C, 0xEAB0, 0x81E7, - 0xEAB1, 0x74EF, 0xEAB2, 0x74F4, 0xEAB3, 0x74FF, 0xEAB4, 0x750F, - 0xEAB5, 0x7511, 0xEAB6, 0x7513, 0xEAB7, 0x6534, 0xEAB8, 0x65EE, - 0xEAB9, 0x65EF, 0xEABA, 0x65F0, 0xEABB, 0x660A, 0xEABC, 0x6619, - 0xEABD, 0x6772, 0xEABE, 0x6603, 0xEABF, 0x6615, 0xEAC0, 0x6600, - 0xEAC1, 0x7085, 0xEAC2, 0x66F7, 0xEAC3, 0x661D, 0xEAC4, 0x6634, - 0xEAC5, 0x6631, 0xEAC6, 0x6636, 0xEAC7, 0x6635, 0xEAC8, 0x8006, - 0xEAC9, 0x665F, 0xEACA, 0x6654, 0xEACB, 0x6641, 0xEACC, 0x664F, - 0xEACD, 0x6656, 0xEACE, 0x6661, 0xEACF, 0x6657, 0xEAD0, 0x6677, - 0xEAD1, 0x6684, 0xEAD2, 0x668C, 0xEAD3, 0x66A7, 0xEAD4, 0x669D, - 0xEAD5, 0x66BE, 0xEAD6, 0x66DB, 0xEAD7, 0x66DC, 0xEAD8, 0x66E6, - 0xEAD9, 0x66E9, 0xEADA, 0x8D32, 0xEADB, 0x8D33, 0xEADC, 0x8D36, - 0xEADD, 0x8D3B, 0xEADE, 0x8D3D, 0xEADF, 0x8D40, 0xEAE0, 0x8D45, - 0xEAE1, 0x8D46, 0xEAE2, 0x8D48, 0xEAE3, 0x8D49, 0xEAE4, 0x8D47, - 0xEAE5, 0x8D4D, 0xEAE6, 0x8D55, 0xEAE7, 0x8D59, 0xEAE8, 0x89C7, - 0xEAE9, 0x89CA, 0xEAEA, 0x89CB, 0xEAEB, 0x89CC, 0xEAEC, 0x89CE, - 0xEAED, 0x89CF, 0xEAEE, 0x89D0, 0xEAEF, 0x89D1, 0xEAF0, 0x726E, - 0xEAF1, 0x729F, 0xEAF2, 0x725D, 0xEAF3, 0x7266, 0xEAF4, 0x726F, - 0xEAF5, 0x727E, 0xEAF6, 0x727F, 0xEAF7, 0x7284, 0xEAF8, 0x728B, - 0xEAF9, 0x728D, 0xEAFA, 0x728F, 0xEAFB, 0x7292, 0xEAFC, 0x6308, - 0xEAFD, 0x6332, 0xEAFE, 0x63B0, 0xEB40, 0x968C, 0xEB41, 0x968E, - 0xEB42, 0x9691, 0xEB43, 0x9692, 0xEB44, 0x9693, 0xEB45, 0x9695, - 0xEB46, 0x9696, 0xEB47, 0x969A, 0xEB48, 0x969B, 0xEB49, 0x969D, - 0xEB4A, 0x969E, 0xEB4B, 0x969F, 0xEB4C, 0x96A0, 0xEB4D, 0x96A1, - 0xEB4E, 0x96A2, 0xEB4F, 0x96A3, 0xEB50, 0x96A4, 0xEB51, 0x96A5, - 0xEB52, 0x96A6, 0xEB53, 0x96A8, 0xEB54, 0x96A9, 0xEB55, 0x96AA, - 0xEB56, 0x96AB, 0xEB57, 0x96AC, 0xEB58, 0x96AD, 0xEB59, 0x96AE, - 0xEB5A, 0x96AF, 0xEB5B, 0x96B1, 0xEB5C, 0x96B2, 0xEB5D, 0x96B4, - 0xEB5E, 0x96B5, 0xEB5F, 0x96B7, 0xEB60, 0x96B8, 0xEB61, 0x96BA, - 0xEB62, 0x96BB, 0xEB63, 0x96BF, 0xEB64, 0x96C2, 0xEB65, 0x96C3, - 0xEB66, 0x96C8, 0xEB67, 0x96CA, 0xEB68, 0x96CB, 0xEB69, 0x96D0, - 0xEB6A, 0x96D1, 0xEB6B, 0x96D3, 0xEB6C, 0x96D4, 0xEB6D, 0x96D6, - 0xEB6E, 0x96D7, 0xEB6F, 0x96D8, 0xEB70, 0x96D9, 0xEB71, 0x96DA, - 0xEB72, 0x96DB, 0xEB73, 0x96DC, 0xEB74, 0x96DD, 0xEB75, 0x96DE, - 0xEB76, 0x96DF, 0xEB77, 0x96E1, 0xEB78, 0x96E2, 0xEB79, 0x96E3, - 0xEB7A, 0x96E4, 0xEB7B, 0x96E5, 0xEB7C, 0x96E6, 0xEB7D, 0x96E7, - 0xEB7E, 0x96EB, 0xEB80, 0x96EC, 0xEB81, 0x96ED, 0xEB82, 0x96EE, - 0xEB83, 0x96F0, 0xEB84, 0x96F1, 0xEB85, 0x96F2, 0xEB86, 0x96F4, - 0xEB87, 0x96F5, 0xEB88, 0x96F8, 0xEB89, 0x96FA, 0xEB8A, 0x96FB, - 0xEB8B, 0x96FC, 0xEB8C, 0x96FD, 0xEB8D, 0x96FF, 0xEB8E, 0x9702, - 0xEB8F, 0x9703, 0xEB90, 0x9705, 0xEB91, 0x970A, 0xEB92, 0x970B, - 0xEB93, 0x970C, 0xEB94, 0x9710, 0xEB95, 0x9711, 0xEB96, 0x9712, - 0xEB97, 0x9714, 0xEB98, 0x9715, 0xEB99, 0x9717, 0xEB9A, 0x9718, - 0xEB9B, 0x9719, 0xEB9C, 0x971A, 0xEB9D, 0x971B, 0xEB9E, 0x971D, - 0xEB9F, 0x971F, 0xEBA0, 0x9720, 0xEBA1, 0x643F, 0xEBA2, 0x64D8, - 0xEBA3, 0x8004, 0xEBA4, 0x6BEA, 0xEBA5, 0x6BF3, 0xEBA6, 0x6BFD, - 0xEBA7, 0x6BF5, 0xEBA8, 0x6BF9, 0xEBA9, 0x6C05, 0xEBAA, 0x6C07, - 0xEBAB, 0x6C06, 0xEBAC, 0x6C0D, 0xEBAD, 0x6C15, 0xEBAE, 0x6C18, - 0xEBAF, 0x6C19, 0xEBB0, 0x6C1A, 0xEBB1, 0x6C21, 0xEBB2, 0x6C29, - 0xEBB3, 0x6C24, 0xEBB4, 0x6C2A, 0xEBB5, 0x6C32, 0xEBB6, 0x6535, - 0xEBB7, 0x6555, 0xEBB8, 0x656B, 0xEBB9, 0x724D, 0xEBBA, 0x7252, - 0xEBBB, 0x7256, 0xEBBC, 0x7230, 0xEBBD, 0x8662, 0xEBBE, 0x5216, - 0xEBBF, 0x809F, 0xEBC0, 0x809C, 0xEBC1, 0x8093, 0xEBC2, 0x80BC, - 0xEBC3, 0x670A, 0xEBC4, 0x80BD, 0xEBC5, 0x80B1, 0xEBC6, 0x80AB, - 0xEBC7, 0x80AD, 0xEBC8, 0x80B4, 0xEBC9, 0x80B7, 0xEBCA, 0x80E7, - 0xEBCB, 0x80E8, 0xEBCC, 0x80E9, 0xEBCD, 0x80EA, 0xEBCE, 0x80DB, - 0xEBCF, 0x80C2, 0xEBD0, 0x80C4, 0xEBD1, 0x80D9, 0xEBD2, 0x80CD, - 0xEBD3, 0x80D7, 0xEBD4, 0x6710, 0xEBD5, 0x80DD, 0xEBD6, 0x80EB, - 0xEBD7, 0x80F1, 0xEBD8, 0x80F4, 0xEBD9, 0x80ED, 0xEBDA, 0x810D, - 0xEBDB, 0x810E, 0xEBDC, 0x80F2, 0xEBDD, 0x80FC, 0xEBDE, 0x6715, - 0xEBDF, 0x8112, 0xEBE0, 0x8C5A, 0xEBE1, 0x8136, 0xEBE2, 0x811E, - 0xEBE3, 0x812C, 0xEBE4, 0x8118, 0xEBE5, 0x8132, 0xEBE6, 0x8148, - 0xEBE7, 0x814C, 0xEBE8, 0x8153, 0xEBE9, 0x8174, 0xEBEA, 0x8159, - 0xEBEB, 0x815A, 0xEBEC, 0x8171, 0xEBED, 0x8160, 0xEBEE, 0x8169, - 0xEBEF, 0x817C, 0xEBF0, 0x817D, 0xEBF1, 0x816D, 0xEBF2, 0x8167, - 0xEBF3, 0x584D, 0xEBF4, 0x5AB5, 0xEBF5, 0x8188, 0xEBF6, 0x8182, - 0xEBF7, 0x8191, 0xEBF8, 0x6ED5, 0xEBF9, 0x81A3, 0xEBFA, 0x81AA, - 0xEBFB, 0x81CC, 0xEBFC, 0x6726, 0xEBFD, 0x81CA, 0xEBFE, 0x81BB, - 0xEC40, 0x9721, 0xEC41, 0x9722, 0xEC42, 0x9723, 0xEC43, 0x9724, - 0xEC44, 0x9725, 0xEC45, 0x9726, 0xEC46, 0x9727, 0xEC47, 0x9728, - 0xEC48, 0x9729, 0xEC49, 0x972B, 0xEC4A, 0x972C, 0xEC4B, 0x972E, - 0xEC4C, 0x972F, 0xEC4D, 0x9731, 0xEC4E, 0x9733, 0xEC4F, 0x9734, - 0xEC50, 0x9735, 0xEC51, 0x9736, 0xEC52, 0x9737, 0xEC53, 0x973A, - 0xEC54, 0x973B, 0xEC55, 0x973C, 0xEC56, 0x973D, 0xEC57, 0x973F, - 0xEC58, 0x9740, 0xEC59, 0x9741, 0xEC5A, 0x9742, 0xEC5B, 0x9743, - 0xEC5C, 0x9744, 0xEC5D, 0x9745, 0xEC5E, 0x9746, 0xEC5F, 0x9747, - 0xEC60, 0x9748, 0xEC61, 0x9749, 0xEC62, 0x974A, 0xEC63, 0x974B, - 0xEC64, 0x974C, 0xEC65, 0x974D, 0xEC66, 0x974E, 0xEC67, 0x974F, - 0xEC68, 0x9750, 0xEC69, 0x9751, 0xEC6A, 0x9754, 0xEC6B, 0x9755, - 0xEC6C, 0x9757, 0xEC6D, 0x9758, 0xEC6E, 0x975A, 0xEC6F, 0x975C, - 0xEC70, 0x975D, 0xEC71, 0x975F, 0xEC72, 0x9763, 0xEC73, 0x9764, - 0xEC74, 0x9766, 0xEC75, 0x9767, 0xEC76, 0x9768, 0xEC77, 0x976A, - 0xEC78, 0x976B, 0xEC79, 0x976C, 0xEC7A, 0x976D, 0xEC7B, 0x976E, - 0xEC7C, 0x976F, 0xEC7D, 0x9770, 0xEC7E, 0x9771, 0xEC80, 0x9772, - 0xEC81, 0x9775, 0xEC82, 0x9777, 0xEC83, 0x9778, 0xEC84, 0x9779, - 0xEC85, 0x977A, 0xEC86, 0x977B, 0xEC87, 0x977D, 0xEC88, 0x977E, - 0xEC89, 0x977F, 0xEC8A, 0x9780, 0xEC8B, 0x9781, 0xEC8C, 0x9782, - 0xEC8D, 0x9783, 0xEC8E, 0x9784, 0xEC8F, 0x9786, 0xEC90, 0x9787, - 0xEC91, 0x9788, 0xEC92, 0x9789, 0xEC93, 0x978A, 0xEC94, 0x978C, - 0xEC95, 0x978E, 0xEC96, 0x978F, 0xEC97, 0x9790, 0xEC98, 0x9793, - 0xEC99, 0x9795, 0xEC9A, 0x9796, 0xEC9B, 0x9797, 0xEC9C, 0x9799, - 0xEC9D, 0x979A, 0xEC9E, 0x979B, 0xEC9F, 0x979C, 0xECA0, 0x979D, - 0xECA1, 0x81C1, 0xECA2, 0x81A6, 0xECA3, 0x6B24, 0xECA4, 0x6B37, - 0xECA5, 0x6B39, 0xECA6, 0x6B43, 0xECA7, 0x6B46, 0xECA8, 0x6B59, - 0xECA9, 0x98D1, 0xECAA, 0x98D2, 0xECAB, 0x98D3, 0xECAC, 0x98D5, - 0xECAD, 0x98D9, 0xECAE, 0x98DA, 0xECAF, 0x6BB3, 0xECB0, 0x5F40, - 0xECB1, 0x6BC2, 0xECB2, 0x89F3, 0xECB3, 0x6590, 0xECB4, 0x9F51, - 0xECB5, 0x6593, 0xECB6, 0x65BC, 0xECB7, 0x65C6, 0xECB8, 0x65C4, - 0xECB9, 0x65C3, 0xECBA, 0x65CC, 0xECBB, 0x65CE, 0xECBC, 0x65D2, - 0xECBD, 0x65D6, 0xECBE, 0x7080, 0xECBF, 0x709C, 0xECC0, 0x7096, - 0xECC1, 0x709D, 0xECC2, 0x70BB, 0xECC3, 0x70C0, 0xECC4, 0x70B7, - 0xECC5, 0x70AB, 0xECC6, 0x70B1, 0xECC7, 0x70E8, 0xECC8, 0x70CA, - 0xECC9, 0x7110, 0xECCA, 0x7113, 0xECCB, 0x7116, 0xECCC, 0x712F, - 0xECCD, 0x7131, 0xECCE, 0x7173, 0xECCF, 0x715C, 0xECD0, 0x7168, - 0xECD1, 0x7145, 0xECD2, 0x7172, 0xECD3, 0x714A, 0xECD4, 0x7178, - 0xECD5, 0x717A, 0xECD6, 0x7198, 0xECD7, 0x71B3, 0xECD8, 0x71B5, - 0xECD9, 0x71A8, 0xECDA, 0x71A0, 0xECDB, 0x71E0, 0xECDC, 0x71D4, - 0xECDD, 0x71E7, 0xECDE, 0x71F9, 0xECDF, 0x721D, 0xECE0, 0x7228, - 0xECE1, 0x706C, 0xECE2, 0x7118, 0xECE3, 0x7166, 0xECE4, 0x71B9, - 0xECE5, 0x623E, 0xECE6, 0x623D, 0xECE7, 0x6243, 0xECE8, 0x6248, - 0xECE9, 0x6249, 0xECEA, 0x793B, 0xECEB, 0x7940, 0xECEC, 0x7946, - 0xECED, 0x7949, 0xECEE, 0x795B, 0xECEF, 0x795C, 0xECF0, 0x7953, - 0xECF1, 0x795A, 0xECF2, 0x7962, 0xECF3, 0x7957, 0xECF4, 0x7960, - 0xECF5, 0x796F, 0xECF6, 0x7967, 0xECF7, 0x797A, 0xECF8, 0x7985, - 0xECF9, 0x798A, 0xECFA, 0x799A, 0xECFB, 0x79A7, 0xECFC, 0x79B3, - 0xECFD, 0x5FD1, 0xECFE, 0x5FD0, 0xED40, 0x979E, 0xED41, 0x979F, - 0xED42, 0x97A1, 0xED43, 0x97A2, 0xED44, 0x97A4, 0xED45, 0x97A5, - 0xED46, 0x97A6, 0xED47, 0x97A7, 0xED48, 0x97A8, 0xED49, 0x97A9, - 0xED4A, 0x97AA, 0xED4B, 0x97AC, 0xED4C, 0x97AE, 0xED4D, 0x97B0, - 0xED4E, 0x97B1, 0xED4F, 0x97B3, 0xED50, 0x97B5, 0xED51, 0x97B6, - 0xED52, 0x97B7, 0xED53, 0x97B8, 0xED54, 0x97B9, 0xED55, 0x97BA, - 0xED56, 0x97BB, 0xED57, 0x97BC, 0xED58, 0x97BD, 0xED59, 0x97BE, - 0xED5A, 0x97BF, 0xED5B, 0x97C0, 0xED5C, 0x97C1, 0xED5D, 0x97C2, - 0xED5E, 0x97C3, 0xED5F, 0x97C4, 0xED60, 0x97C5, 0xED61, 0x97C6, - 0xED62, 0x97C7, 0xED63, 0x97C8, 0xED64, 0x97C9, 0xED65, 0x97CA, - 0xED66, 0x97CB, 0xED67, 0x97CC, 0xED68, 0x97CD, 0xED69, 0x97CE, - 0xED6A, 0x97CF, 0xED6B, 0x97D0, 0xED6C, 0x97D1, 0xED6D, 0x97D2, - 0xED6E, 0x97D3, 0xED6F, 0x97D4, 0xED70, 0x97D5, 0xED71, 0x97D6, - 0xED72, 0x97D7, 0xED73, 0x97D8, 0xED74, 0x97D9, 0xED75, 0x97DA, - 0xED76, 0x97DB, 0xED77, 0x97DC, 0xED78, 0x97DD, 0xED79, 0x97DE, - 0xED7A, 0x97DF, 0xED7B, 0x97E0, 0xED7C, 0x97E1, 0xED7D, 0x97E2, - 0xED7E, 0x97E3, 0xED80, 0x97E4, 0xED81, 0x97E5, 0xED82, 0x97E8, - 0xED83, 0x97EE, 0xED84, 0x97EF, 0xED85, 0x97F0, 0xED86, 0x97F1, - 0xED87, 0x97F2, 0xED88, 0x97F4, 0xED89, 0x97F7, 0xED8A, 0x97F8, - 0xED8B, 0x97F9, 0xED8C, 0x97FA, 0xED8D, 0x97FB, 0xED8E, 0x97FC, - 0xED8F, 0x97FD, 0xED90, 0x97FE, 0xED91, 0x97FF, 0xED92, 0x9800, - 0xED93, 0x9801, 0xED94, 0x9802, 0xED95, 0x9803, 0xED96, 0x9804, - 0xED97, 0x9805, 0xED98, 0x9806, 0xED99, 0x9807, 0xED9A, 0x9808, - 0xED9B, 0x9809, 0xED9C, 0x980A, 0xED9D, 0x980B, 0xED9E, 0x980C, - 0xED9F, 0x980D, 0xEDA0, 0x980E, 0xEDA1, 0x603C, 0xEDA2, 0x605D, - 0xEDA3, 0x605A, 0xEDA4, 0x6067, 0xEDA5, 0x6041, 0xEDA6, 0x6059, - 0xEDA7, 0x6063, 0xEDA8, 0x60AB, 0xEDA9, 0x6106, 0xEDAA, 0x610D, - 0xEDAB, 0x615D, 0xEDAC, 0x61A9, 0xEDAD, 0x619D, 0xEDAE, 0x61CB, - 0xEDAF, 0x61D1, 0xEDB0, 0x6206, 0xEDB1, 0x8080, 0xEDB2, 0x807F, - 0xEDB3, 0x6C93, 0xEDB4, 0x6CF6, 0xEDB5, 0x6DFC, 0xEDB6, 0x77F6, - 0xEDB7, 0x77F8, 0xEDB8, 0x7800, 0xEDB9, 0x7809, 0xEDBA, 0x7817, - 0xEDBB, 0x7818, 0xEDBC, 0x7811, 0xEDBD, 0x65AB, 0xEDBE, 0x782D, - 0xEDBF, 0x781C, 0xEDC0, 0x781D, 0xEDC1, 0x7839, 0xEDC2, 0x783A, - 0xEDC3, 0x783B, 0xEDC4, 0x781F, 0xEDC5, 0x783C, 0xEDC6, 0x7825, - 0xEDC7, 0x782C, 0xEDC8, 0x7823, 0xEDC9, 0x7829, 0xEDCA, 0x784E, - 0xEDCB, 0x786D, 0xEDCC, 0x7856, 0xEDCD, 0x7857, 0xEDCE, 0x7826, - 0xEDCF, 0x7850, 0xEDD0, 0x7847, 0xEDD1, 0x784C, 0xEDD2, 0x786A, - 0xEDD3, 0x789B, 0xEDD4, 0x7893, 0xEDD5, 0x789A, 0xEDD6, 0x7887, - 0xEDD7, 0x789C, 0xEDD8, 0x78A1, 0xEDD9, 0x78A3, 0xEDDA, 0x78B2, - 0xEDDB, 0x78B9, 0xEDDC, 0x78A5, 0xEDDD, 0x78D4, 0xEDDE, 0x78D9, - 0xEDDF, 0x78C9, 0xEDE0, 0x78EC, 0xEDE1, 0x78F2, 0xEDE2, 0x7905, - 0xEDE3, 0x78F4, 0xEDE4, 0x7913, 0xEDE5, 0x7924, 0xEDE6, 0x791E, - 0xEDE7, 0x7934, 0xEDE8, 0x9F9B, 0xEDE9, 0x9EF9, 0xEDEA, 0x9EFB, - 0xEDEB, 0x9EFC, 0xEDEC, 0x76F1, 0xEDED, 0x7704, 0xEDEE, 0x770D, - 0xEDEF, 0x76F9, 0xEDF0, 0x7707, 0xEDF1, 0x7708, 0xEDF2, 0x771A, - 0xEDF3, 0x7722, 0xEDF4, 0x7719, 0xEDF5, 0x772D, 0xEDF6, 0x7726, - 0xEDF7, 0x7735, 0xEDF8, 0x7738, 0xEDF9, 0x7750, 0xEDFA, 0x7751, - 0xEDFB, 0x7747, 0xEDFC, 0x7743, 0xEDFD, 0x775A, 0xEDFE, 0x7768, - 0xEE40, 0x980F, 0xEE41, 0x9810, 0xEE42, 0x9811, 0xEE43, 0x9812, - 0xEE44, 0x9813, 0xEE45, 0x9814, 0xEE46, 0x9815, 0xEE47, 0x9816, - 0xEE48, 0x9817, 0xEE49, 0x9818, 0xEE4A, 0x9819, 0xEE4B, 0x981A, - 0xEE4C, 0x981B, 0xEE4D, 0x981C, 0xEE4E, 0x981D, 0xEE4F, 0x981E, - 0xEE50, 0x981F, 0xEE51, 0x9820, 0xEE52, 0x9821, 0xEE53, 0x9822, - 0xEE54, 0x9823, 0xEE55, 0x9824, 0xEE56, 0x9825, 0xEE57, 0x9826, - 0xEE58, 0x9827, 0xEE59, 0x9828, 0xEE5A, 0x9829, 0xEE5B, 0x982A, - 0xEE5C, 0x982B, 0xEE5D, 0x982C, 0xEE5E, 0x982D, 0xEE5F, 0x982E, - 0xEE60, 0x982F, 0xEE61, 0x9830, 0xEE62, 0x9831, 0xEE63, 0x9832, - 0xEE64, 0x9833, 0xEE65, 0x9834, 0xEE66, 0x9835, 0xEE67, 0x9836, - 0xEE68, 0x9837, 0xEE69, 0x9838, 0xEE6A, 0x9839, 0xEE6B, 0x983A, - 0xEE6C, 0x983B, 0xEE6D, 0x983C, 0xEE6E, 0x983D, 0xEE6F, 0x983E, - 0xEE70, 0x983F, 0xEE71, 0x9840, 0xEE72, 0x9841, 0xEE73, 0x9842, - 0xEE74, 0x9843, 0xEE75, 0x9844, 0xEE76, 0x9845, 0xEE77, 0x9846, - 0xEE78, 0x9847, 0xEE79, 0x9848, 0xEE7A, 0x9849, 0xEE7B, 0x984A, - 0xEE7C, 0x984B, 0xEE7D, 0x984C, 0xEE7E, 0x984D, 0xEE80, 0x984E, - 0xEE81, 0x984F, 0xEE82, 0x9850, 0xEE83, 0x9851, 0xEE84, 0x9852, - 0xEE85, 0x9853, 0xEE86, 0x9854, 0xEE87, 0x9855, 0xEE88, 0x9856, - 0xEE89, 0x9857, 0xEE8A, 0x9858, 0xEE8B, 0x9859, 0xEE8C, 0x985A, - 0xEE8D, 0x985B, 0xEE8E, 0x985C, 0xEE8F, 0x985D, 0xEE90, 0x985E, - 0xEE91, 0x985F, 0xEE92, 0x9860, 0xEE93, 0x9861, 0xEE94, 0x9862, - 0xEE95, 0x9863, 0xEE96, 0x9864, 0xEE97, 0x9865, 0xEE98, 0x9866, - 0xEE99, 0x9867, 0xEE9A, 0x9868, 0xEE9B, 0x9869, 0xEE9C, 0x986A, - 0xEE9D, 0x986B, 0xEE9E, 0x986C, 0xEE9F, 0x986D, 0xEEA0, 0x986E, - 0xEEA1, 0x7762, 0xEEA2, 0x7765, 0xEEA3, 0x777F, 0xEEA4, 0x778D, - 0xEEA5, 0x777D, 0xEEA6, 0x7780, 0xEEA7, 0x778C, 0xEEA8, 0x7791, - 0xEEA9, 0x779F, 0xEEAA, 0x77A0, 0xEEAB, 0x77B0, 0xEEAC, 0x77B5, - 0xEEAD, 0x77BD, 0xEEAE, 0x753A, 0xEEAF, 0x7540, 0xEEB0, 0x754E, - 0xEEB1, 0x754B, 0xEEB2, 0x7548, 0xEEB3, 0x755B, 0xEEB4, 0x7572, - 0xEEB5, 0x7579, 0xEEB6, 0x7583, 0xEEB7, 0x7F58, 0xEEB8, 0x7F61, - 0xEEB9, 0x7F5F, 0xEEBA, 0x8A48, 0xEEBB, 0x7F68, 0xEEBC, 0x7F74, - 0xEEBD, 0x7F71, 0xEEBE, 0x7F79, 0xEEBF, 0x7F81, 0xEEC0, 0x7F7E, - 0xEEC1, 0x76CD, 0xEEC2, 0x76E5, 0xEEC3, 0x8832, 0xEEC4, 0x9485, - 0xEEC5, 0x9486, 0xEEC6, 0x9487, 0xEEC7, 0x948B, 0xEEC8, 0x948A, - 0xEEC9, 0x948C, 0xEECA, 0x948D, 0xEECB, 0x948F, 0xEECC, 0x9490, - 0xEECD, 0x9494, 0xEECE, 0x9497, 0xEECF, 0x9495, 0xEED0, 0x949A, - 0xEED1, 0x949B, 0xEED2, 0x949C, 0xEED3, 0x94A3, 0xEED4, 0x94A4, - 0xEED5, 0x94AB, 0xEED6, 0x94AA, 0xEED7, 0x94AD, 0xEED8, 0x94AC, - 0xEED9, 0x94AF, 0xEEDA, 0x94B0, 0xEEDB, 0x94B2, 0xEEDC, 0x94B4, - 0xEEDD, 0x94B6, 0xEEDE, 0x94B7, 0xEEDF, 0x94B8, 0xEEE0, 0x94B9, - 0xEEE1, 0x94BA, 0xEEE2, 0x94BC, 0xEEE3, 0x94BD, 0xEEE4, 0x94BF, - 0xEEE5, 0x94C4, 0xEEE6, 0x94C8, 0xEEE7, 0x94C9, 0xEEE8, 0x94CA, - 0xEEE9, 0x94CB, 0xEEEA, 0x94CC, 0xEEEB, 0x94CD, 0xEEEC, 0x94CE, - 0xEEED, 0x94D0, 0xEEEE, 0x94D1, 0xEEEF, 0x94D2, 0xEEF0, 0x94D5, - 0xEEF1, 0x94D6, 0xEEF2, 0x94D7, 0xEEF3, 0x94D9, 0xEEF4, 0x94D8, - 0xEEF5, 0x94DB, 0xEEF6, 0x94DE, 0xEEF7, 0x94DF, 0xEEF8, 0x94E0, - 0xEEF9, 0x94E2, 0xEEFA, 0x94E4, 0xEEFB, 0x94E5, 0xEEFC, 0x94E7, - 0xEEFD, 0x94E8, 0xEEFE, 0x94EA, 0xEF40, 0x986F, 0xEF41, 0x9870, - 0xEF42, 0x9871, 0xEF43, 0x9872, 0xEF44, 0x9873, 0xEF45, 0x9874, - 0xEF46, 0x988B, 0xEF47, 0x988E, 0xEF48, 0x9892, 0xEF49, 0x9895, - 0xEF4A, 0x9899, 0xEF4B, 0x98A3, 0xEF4C, 0x98A8, 0xEF4D, 0x98A9, - 0xEF4E, 0x98AA, 0xEF4F, 0x98AB, 0xEF50, 0x98AC, 0xEF51, 0x98AD, - 0xEF52, 0x98AE, 0xEF53, 0x98AF, 0xEF54, 0x98B0, 0xEF55, 0x98B1, - 0xEF56, 0x98B2, 0xEF57, 0x98B3, 0xEF58, 0x98B4, 0xEF59, 0x98B5, - 0xEF5A, 0x98B6, 0xEF5B, 0x98B7, 0xEF5C, 0x98B8, 0xEF5D, 0x98B9, - 0xEF5E, 0x98BA, 0xEF5F, 0x98BB, 0xEF60, 0x98BC, 0xEF61, 0x98BD, - 0xEF62, 0x98BE, 0xEF63, 0x98BF, 0xEF64, 0x98C0, 0xEF65, 0x98C1, - 0xEF66, 0x98C2, 0xEF67, 0x98C3, 0xEF68, 0x98C4, 0xEF69, 0x98C5, - 0xEF6A, 0x98C6, 0xEF6B, 0x98C7, 0xEF6C, 0x98C8, 0xEF6D, 0x98C9, - 0xEF6E, 0x98CA, 0xEF6F, 0x98CB, 0xEF70, 0x98CC, 0xEF71, 0x98CD, - 0xEF72, 0x98CF, 0xEF73, 0x98D0, 0xEF74, 0x98D4, 0xEF75, 0x98D6, - 0xEF76, 0x98D7, 0xEF77, 0x98DB, 0xEF78, 0x98DC, 0xEF79, 0x98DD, - 0xEF7A, 0x98E0, 0xEF7B, 0x98E1, 0xEF7C, 0x98E2, 0xEF7D, 0x98E3, - 0xEF7E, 0x98E4, 0xEF80, 0x98E5, 0xEF81, 0x98E6, 0xEF82, 0x98E9, - 0xEF83, 0x98EA, 0xEF84, 0x98EB, 0xEF85, 0x98EC, 0xEF86, 0x98ED, - 0xEF87, 0x98EE, 0xEF88, 0x98EF, 0xEF89, 0x98F0, 0xEF8A, 0x98F1, - 0xEF8B, 0x98F2, 0xEF8C, 0x98F3, 0xEF8D, 0x98F4, 0xEF8E, 0x98F5, - 0xEF8F, 0x98F6, 0xEF90, 0x98F7, 0xEF91, 0x98F8, 0xEF92, 0x98F9, - 0xEF93, 0x98FA, 0xEF94, 0x98FB, 0xEF95, 0x98FC, 0xEF96, 0x98FD, - 0xEF97, 0x98FE, 0xEF98, 0x98FF, 0xEF99, 0x9900, 0xEF9A, 0x9901, - 0xEF9B, 0x9902, 0xEF9C, 0x9903, 0xEF9D, 0x9904, 0xEF9E, 0x9905, - 0xEF9F, 0x9906, 0xEFA0, 0x9907, 0xEFA1, 0x94E9, 0xEFA2, 0x94EB, - 0xEFA3, 0x94EE, 0xEFA4, 0x94EF, 0xEFA5, 0x94F3, 0xEFA6, 0x94F4, - 0xEFA7, 0x94F5, 0xEFA8, 0x94F7, 0xEFA9, 0x94F9, 0xEFAA, 0x94FC, - 0xEFAB, 0x94FD, 0xEFAC, 0x94FF, 0xEFAD, 0x9503, 0xEFAE, 0x9502, - 0xEFAF, 0x9506, 0xEFB0, 0x9507, 0xEFB1, 0x9509, 0xEFB2, 0x950A, - 0xEFB3, 0x950D, 0xEFB4, 0x950E, 0xEFB5, 0x950F, 0xEFB6, 0x9512, - 0xEFB7, 0x9513, 0xEFB8, 0x9514, 0xEFB9, 0x9515, 0xEFBA, 0x9516, - 0xEFBB, 0x9518, 0xEFBC, 0x951B, 0xEFBD, 0x951D, 0xEFBE, 0x951E, - 0xEFBF, 0x951F, 0xEFC0, 0x9522, 0xEFC1, 0x952A, 0xEFC2, 0x952B, - 0xEFC3, 0x9529, 0xEFC4, 0x952C, 0xEFC5, 0x9531, 0xEFC6, 0x9532, - 0xEFC7, 0x9534, 0xEFC8, 0x9536, 0xEFC9, 0x9537, 0xEFCA, 0x9538, - 0xEFCB, 0x953C, 0xEFCC, 0x953E, 0xEFCD, 0x953F, 0xEFCE, 0x9542, - 0xEFCF, 0x9535, 0xEFD0, 0x9544, 0xEFD1, 0x9545, 0xEFD2, 0x9546, - 0xEFD3, 0x9549, 0xEFD4, 0x954C, 0xEFD5, 0x954E, 0xEFD6, 0x954F, - 0xEFD7, 0x9552, 0xEFD8, 0x9553, 0xEFD9, 0x9554, 0xEFDA, 0x9556, - 0xEFDB, 0x9557, 0xEFDC, 0x9558, 0xEFDD, 0x9559, 0xEFDE, 0x955B, - 0xEFDF, 0x955E, 0xEFE0, 0x955F, 0xEFE1, 0x955D, 0xEFE2, 0x9561, - 0xEFE3, 0x9562, 0xEFE4, 0x9564, 0xEFE5, 0x9565, 0xEFE6, 0x9566, - 0xEFE7, 0x9567, 0xEFE8, 0x9568, 0xEFE9, 0x9569, 0xEFEA, 0x956A, - 0xEFEB, 0x956B, 0xEFEC, 0x956C, 0xEFED, 0x956F, 0xEFEE, 0x9571, - 0xEFEF, 0x9572, 0xEFF0, 0x9573, 0xEFF1, 0x953A, 0xEFF2, 0x77E7, - 0xEFF3, 0x77EC, 0xEFF4, 0x96C9, 0xEFF5, 0x79D5, 0xEFF6, 0x79ED, - 0xEFF7, 0x79E3, 0xEFF8, 0x79EB, 0xEFF9, 0x7A06, 0xEFFA, 0x5D47, - 0xEFFB, 0x7A03, 0xEFFC, 0x7A02, 0xEFFD, 0x7A1E, 0xEFFE, 0x7A14, - 0xF040, 0x9908, 0xF041, 0x9909, 0xF042, 0x990A, 0xF043, 0x990B, - 0xF044, 0x990C, 0xF045, 0x990E, 0xF046, 0x990F, 0xF047, 0x9911, - 0xF048, 0x9912, 0xF049, 0x9913, 0xF04A, 0x9914, 0xF04B, 0x9915, - 0xF04C, 0x9916, 0xF04D, 0x9917, 0xF04E, 0x9918, 0xF04F, 0x9919, - 0xF050, 0x991A, 0xF051, 0x991B, 0xF052, 0x991C, 0xF053, 0x991D, - 0xF054, 0x991E, 0xF055, 0x991F, 0xF056, 0x9920, 0xF057, 0x9921, - 0xF058, 0x9922, 0xF059, 0x9923, 0xF05A, 0x9924, 0xF05B, 0x9925, - 0xF05C, 0x9926, 0xF05D, 0x9927, 0xF05E, 0x9928, 0xF05F, 0x9929, - 0xF060, 0x992A, 0xF061, 0x992B, 0xF062, 0x992C, 0xF063, 0x992D, - 0xF064, 0x992F, 0xF065, 0x9930, 0xF066, 0x9931, 0xF067, 0x9932, - 0xF068, 0x9933, 0xF069, 0x9934, 0xF06A, 0x9935, 0xF06B, 0x9936, - 0xF06C, 0x9937, 0xF06D, 0x9938, 0xF06E, 0x9939, 0xF06F, 0x993A, - 0xF070, 0x993B, 0xF071, 0x993C, 0xF072, 0x993D, 0xF073, 0x993E, - 0xF074, 0x993F, 0xF075, 0x9940, 0xF076, 0x9941, 0xF077, 0x9942, - 0xF078, 0x9943, 0xF079, 0x9944, 0xF07A, 0x9945, 0xF07B, 0x9946, - 0xF07C, 0x9947, 0xF07D, 0x9948, 0xF07E, 0x9949, 0xF080, 0x994A, - 0xF081, 0x994B, 0xF082, 0x994C, 0xF083, 0x994D, 0xF084, 0x994E, - 0xF085, 0x994F, 0xF086, 0x9950, 0xF087, 0x9951, 0xF088, 0x9952, - 0xF089, 0x9953, 0xF08A, 0x9956, 0xF08B, 0x9957, 0xF08C, 0x9958, - 0xF08D, 0x9959, 0xF08E, 0x995A, 0xF08F, 0x995B, 0xF090, 0x995C, - 0xF091, 0x995D, 0xF092, 0x995E, 0xF093, 0x995F, 0xF094, 0x9960, - 0xF095, 0x9961, 0xF096, 0x9962, 0xF097, 0x9964, 0xF098, 0x9966, - 0xF099, 0x9973, 0xF09A, 0x9978, 0xF09B, 0x9979, 0xF09C, 0x997B, - 0xF09D, 0x997E, 0xF09E, 0x9982, 0xF09F, 0x9983, 0xF0A0, 0x9989, - 0xF0A1, 0x7A39, 0xF0A2, 0x7A37, 0xF0A3, 0x7A51, 0xF0A4, 0x9ECF, - 0xF0A5, 0x99A5, 0xF0A6, 0x7A70, 0xF0A7, 0x7688, 0xF0A8, 0x768E, - 0xF0A9, 0x7693, 0xF0AA, 0x7699, 0xF0AB, 0x76A4, 0xF0AC, 0x74DE, - 0xF0AD, 0x74E0, 0xF0AE, 0x752C, 0xF0AF, 0x9E20, 0xF0B0, 0x9E22, - 0xF0B1, 0x9E28, 0xF0B2, 0x9E29, 0xF0B3, 0x9E2A, 0xF0B4, 0x9E2B, - 0xF0B5, 0x9E2C, 0xF0B6, 0x9E32, 0xF0B7, 0x9E31, 0xF0B8, 0x9E36, - 0xF0B9, 0x9E38, 0xF0BA, 0x9E37, 0xF0BB, 0x9E39, 0xF0BC, 0x9E3A, - 0xF0BD, 0x9E3E, 0xF0BE, 0x9E41, 0xF0BF, 0x9E42, 0xF0C0, 0x9E44, - 0xF0C1, 0x9E46, 0xF0C2, 0x9E47, 0xF0C3, 0x9E48, 0xF0C4, 0x9E49, - 0xF0C5, 0x9E4B, 0xF0C6, 0x9E4C, 0xF0C7, 0x9E4E, 0xF0C8, 0x9E51, - 0xF0C9, 0x9E55, 0xF0CA, 0x9E57, 0xF0CB, 0x9E5A, 0xF0CC, 0x9E5B, - 0xF0CD, 0x9E5C, 0xF0CE, 0x9E5E, 0xF0CF, 0x9E63, 0xF0D0, 0x9E66, - 0xF0D1, 0x9E67, 0xF0D2, 0x9E68, 0xF0D3, 0x9E69, 0xF0D4, 0x9E6A, - 0xF0D5, 0x9E6B, 0xF0D6, 0x9E6C, 0xF0D7, 0x9E71, 0xF0D8, 0x9E6D, - 0xF0D9, 0x9E73, 0xF0DA, 0x7592, 0xF0DB, 0x7594, 0xF0DC, 0x7596, - 0xF0DD, 0x75A0, 0xF0DE, 0x759D, 0xF0DF, 0x75AC, 0xF0E0, 0x75A3, - 0xF0E1, 0x75B3, 0xF0E2, 0x75B4, 0xF0E3, 0x75B8, 0xF0E4, 0x75C4, - 0xF0E5, 0x75B1, 0xF0E6, 0x75B0, 0xF0E7, 0x75C3, 0xF0E8, 0x75C2, - 0xF0E9, 0x75D6, 0xF0EA, 0x75CD, 0xF0EB, 0x75E3, 0xF0EC, 0x75E8, - 0xF0ED, 0x75E6, 0xF0EE, 0x75E4, 0xF0EF, 0x75EB, 0xF0F0, 0x75E7, - 0xF0F1, 0x7603, 0xF0F2, 0x75F1, 0xF0F3, 0x75FC, 0xF0F4, 0x75FF, - 0xF0F5, 0x7610, 0xF0F6, 0x7600, 0xF0F7, 0x7605, 0xF0F8, 0x760C, - 0xF0F9, 0x7617, 0xF0FA, 0x760A, 0xF0FB, 0x7625, 0xF0FC, 0x7618, - 0xF0FD, 0x7615, 0xF0FE, 0x7619, 0xF140, 0x998C, 0xF141, 0x998E, - 0xF142, 0x999A, 0xF143, 0x999B, 0xF144, 0x999C, 0xF145, 0x999D, - 0xF146, 0x999E, 0xF147, 0x999F, 0xF148, 0x99A0, 0xF149, 0x99A1, - 0xF14A, 0x99A2, 0xF14B, 0x99A3, 0xF14C, 0x99A4, 0xF14D, 0x99A6, - 0xF14E, 0x99A7, 0xF14F, 0x99A9, 0xF150, 0x99AA, 0xF151, 0x99AB, - 0xF152, 0x99AC, 0xF153, 0x99AD, 0xF154, 0x99AE, 0xF155, 0x99AF, - 0xF156, 0x99B0, 0xF157, 0x99B1, 0xF158, 0x99B2, 0xF159, 0x99B3, - 0xF15A, 0x99B4, 0xF15B, 0x99B5, 0xF15C, 0x99B6, 0xF15D, 0x99B7, - 0xF15E, 0x99B8, 0xF15F, 0x99B9, 0xF160, 0x99BA, 0xF161, 0x99BB, - 0xF162, 0x99BC, 0xF163, 0x99BD, 0xF164, 0x99BE, 0xF165, 0x99BF, - 0xF166, 0x99C0, 0xF167, 0x99C1, 0xF168, 0x99C2, 0xF169, 0x99C3, - 0xF16A, 0x99C4, 0xF16B, 0x99C5, 0xF16C, 0x99C6, 0xF16D, 0x99C7, - 0xF16E, 0x99C8, 0xF16F, 0x99C9, 0xF170, 0x99CA, 0xF171, 0x99CB, - 0xF172, 0x99CC, 0xF173, 0x99CD, 0xF174, 0x99CE, 0xF175, 0x99CF, - 0xF176, 0x99D0, 0xF177, 0x99D1, 0xF178, 0x99D2, 0xF179, 0x99D3, - 0xF17A, 0x99D4, 0xF17B, 0x99D5, 0xF17C, 0x99D6, 0xF17D, 0x99D7, - 0xF17E, 0x99D8, 0xF180, 0x99D9, 0xF181, 0x99DA, 0xF182, 0x99DB, - 0xF183, 0x99DC, 0xF184, 0x99DD, 0xF185, 0x99DE, 0xF186, 0x99DF, - 0xF187, 0x99E0, 0xF188, 0x99E1, 0xF189, 0x99E2, 0xF18A, 0x99E3, - 0xF18B, 0x99E4, 0xF18C, 0x99E5, 0xF18D, 0x99E6, 0xF18E, 0x99E7, - 0xF18F, 0x99E8, 0xF190, 0x99E9, 0xF191, 0x99EA, 0xF192, 0x99EB, - 0xF193, 0x99EC, 0xF194, 0x99ED, 0xF195, 0x99EE, 0xF196, 0x99EF, - 0xF197, 0x99F0, 0xF198, 0x99F1, 0xF199, 0x99F2, 0xF19A, 0x99F3, - 0xF19B, 0x99F4, 0xF19C, 0x99F5, 0xF19D, 0x99F6, 0xF19E, 0x99F7, - 0xF19F, 0x99F8, 0xF1A0, 0x99F9, 0xF1A1, 0x761B, 0xF1A2, 0x763C, - 0xF1A3, 0x7622, 0xF1A4, 0x7620, 0xF1A5, 0x7640, 0xF1A6, 0x762D, - 0xF1A7, 0x7630, 0xF1A8, 0x763F, 0xF1A9, 0x7635, 0xF1AA, 0x7643, - 0xF1AB, 0x763E, 0xF1AC, 0x7633, 0xF1AD, 0x764D, 0xF1AE, 0x765E, - 0xF1AF, 0x7654, 0xF1B0, 0x765C, 0xF1B1, 0x7656, 0xF1B2, 0x766B, - 0xF1B3, 0x766F, 0xF1B4, 0x7FCA, 0xF1B5, 0x7AE6, 0xF1B6, 0x7A78, - 0xF1B7, 0x7A79, 0xF1B8, 0x7A80, 0xF1B9, 0x7A86, 0xF1BA, 0x7A88, - 0xF1BB, 0x7A95, 0xF1BC, 0x7AA6, 0xF1BD, 0x7AA0, 0xF1BE, 0x7AAC, - 0xF1BF, 0x7AA8, 0xF1C0, 0x7AAD, 0xF1C1, 0x7AB3, 0xF1C2, 0x8864, - 0xF1C3, 0x8869, 0xF1C4, 0x8872, 0xF1C5, 0x887D, 0xF1C6, 0x887F, - 0xF1C7, 0x8882, 0xF1C8, 0x88A2, 0xF1C9, 0x88C6, 0xF1CA, 0x88B7, - 0xF1CB, 0x88BC, 0xF1CC, 0x88C9, 0xF1CD, 0x88E2, 0xF1CE, 0x88CE, - 0xF1CF, 0x88E3, 0xF1D0, 0x88E5, 0xF1D1, 0x88F1, 0xF1D2, 0x891A, - 0xF1D3, 0x88FC, 0xF1D4, 0x88E8, 0xF1D5, 0x88FE, 0xF1D6, 0x88F0, - 0xF1D7, 0x8921, 0xF1D8, 0x8919, 0xF1D9, 0x8913, 0xF1DA, 0x891B, - 0xF1DB, 0x890A, 0xF1DC, 0x8934, 0xF1DD, 0x892B, 0xF1DE, 0x8936, - 0xF1DF, 0x8941, 0xF1E0, 0x8966, 0xF1E1, 0x897B, 0xF1E2, 0x758B, - 0xF1E3, 0x80E5, 0xF1E4, 0x76B2, 0xF1E5, 0x76B4, 0xF1E6, 0x77DC, - 0xF1E7, 0x8012, 0xF1E8, 0x8014, 0xF1E9, 0x8016, 0xF1EA, 0x801C, - 0xF1EB, 0x8020, 0xF1EC, 0x8022, 0xF1ED, 0x8025, 0xF1EE, 0x8026, - 0xF1EF, 0x8027, 0xF1F0, 0x8029, 0xF1F1, 0x8028, 0xF1F2, 0x8031, - 0xF1F3, 0x800B, 0xF1F4, 0x8035, 0xF1F5, 0x8043, 0xF1F6, 0x8046, - 0xF1F7, 0x804D, 0xF1F8, 0x8052, 0xF1F9, 0x8069, 0xF1FA, 0x8071, - 0xF1FB, 0x8983, 0xF1FC, 0x9878, 0xF1FD, 0x9880, 0xF1FE, 0x9883, - 0xF240, 0x99FA, 0xF241, 0x99FB, 0xF242, 0x99FC, 0xF243, 0x99FD, - 0xF244, 0x99FE, 0xF245, 0x99FF, 0xF246, 0x9A00, 0xF247, 0x9A01, - 0xF248, 0x9A02, 0xF249, 0x9A03, 0xF24A, 0x9A04, 0xF24B, 0x9A05, - 0xF24C, 0x9A06, 0xF24D, 0x9A07, 0xF24E, 0x9A08, 0xF24F, 0x9A09, - 0xF250, 0x9A0A, 0xF251, 0x9A0B, 0xF252, 0x9A0C, 0xF253, 0x9A0D, - 0xF254, 0x9A0E, 0xF255, 0x9A0F, 0xF256, 0x9A10, 0xF257, 0x9A11, - 0xF258, 0x9A12, 0xF259, 0x9A13, 0xF25A, 0x9A14, 0xF25B, 0x9A15, - 0xF25C, 0x9A16, 0xF25D, 0x9A17, 0xF25E, 0x9A18, 0xF25F, 0x9A19, - 0xF260, 0x9A1A, 0xF261, 0x9A1B, 0xF262, 0x9A1C, 0xF263, 0x9A1D, - 0xF264, 0x9A1E, 0xF265, 0x9A1F, 0xF266, 0x9A20, 0xF267, 0x9A21, - 0xF268, 0x9A22, 0xF269, 0x9A23, 0xF26A, 0x9A24, 0xF26B, 0x9A25, - 0xF26C, 0x9A26, 0xF26D, 0x9A27, 0xF26E, 0x9A28, 0xF26F, 0x9A29, - 0xF270, 0x9A2A, 0xF271, 0x9A2B, 0xF272, 0x9A2C, 0xF273, 0x9A2D, - 0xF274, 0x9A2E, 0xF275, 0x9A2F, 0xF276, 0x9A30, 0xF277, 0x9A31, - 0xF278, 0x9A32, 0xF279, 0x9A33, 0xF27A, 0x9A34, 0xF27B, 0x9A35, - 0xF27C, 0x9A36, 0xF27D, 0x9A37, 0xF27E, 0x9A38, 0xF280, 0x9A39, - 0xF281, 0x9A3A, 0xF282, 0x9A3B, 0xF283, 0x9A3C, 0xF284, 0x9A3D, - 0xF285, 0x9A3E, 0xF286, 0x9A3F, 0xF287, 0x9A40, 0xF288, 0x9A41, - 0xF289, 0x9A42, 0xF28A, 0x9A43, 0xF28B, 0x9A44, 0xF28C, 0x9A45, - 0xF28D, 0x9A46, 0xF28E, 0x9A47, 0xF28F, 0x9A48, 0xF290, 0x9A49, - 0xF291, 0x9A4A, 0xF292, 0x9A4B, 0xF293, 0x9A4C, 0xF294, 0x9A4D, - 0xF295, 0x9A4E, 0xF296, 0x9A4F, 0xF297, 0x9A50, 0xF298, 0x9A51, - 0xF299, 0x9A52, 0xF29A, 0x9A53, 0xF29B, 0x9A54, 0xF29C, 0x9A55, - 0xF29D, 0x9A56, 0xF29E, 0x9A57, 0xF29F, 0x9A58, 0xF2A0, 0x9A59, - 0xF2A1, 0x9889, 0xF2A2, 0x988C, 0xF2A3, 0x988D, 0xF2A4, 0x988F, - 0xF2A5, 0x9894, 0xF2A6, 0x989A, 0xF2A7, 0x989B, 0xF2A8, 0x989E, - 0xF2A9, 0x989F, 0xF2AA, 0x98A1, 0xF2AB, 0x98A2, 0xF2AC, 0x98A5, - 0xF2AD, 0x98A6, 0xF2AE, 0x864D, 0xF2AF, 0x8654, 0xF2B0, 0x866C, - 0xF2B1, 0x866E, 0xF2B2, 0x867F, 0xF2B3, 0x867A, 0xF2B4, 0x867C, - 0xF2B5, 0x867B, 0xF2B6, 0x86A8, 0xF2B7, 0x868D, 0xF2B8, 0x868B, - 0xF2B9, 0x86AC, 0xF2BA, 0x869D, 0xF2BB, 0x86A7, 0xF2BC, 0x86A3, - 0xF2BD, 0x86AA, 0xF2BE, 0x8693, 0xF2BF, 0x86A9, 0xF2C0, 0x86B6, - 0xF2C1, 0x86C4, 0xF2C2, 0x86B5, 0xF2C3, 0x86CE, 0xF2C4, 0x86B0, - 0xF2C5, 0x86BA, 0xF2C6, 0x86B1, 0xF2C7, 0x86AF, 0xF2C8, 0x86C9, - 0xF2C9, 0x86CF, 0xF2CA, 0x86B4, 0xF2CB, 0x86E9, 0xF2CC, 0x86F1, - 0xF2CD, 0x86F2, 0xF2CE, 0x86ED, 0xF2CF, 0x86F3, 0xF2D0, 0x86D0, - 0xF2D1, 0x8713, 0xF2D2, 0x86DE, 0xF2D3, 0x86F4, 0xF2D4, 0x86DF, - 0xF2D5, 0x86D8, 0xF2D6, 0x86D1, 0xF2D7, 0x8703, 0xF2D8, 0x8707, - 0xF2D9, 0x86F8, 0xF2DA, 0x8708, 0xF2DB, 0x870A, 0xF2DC, 0x870D, - 0xF2DD, 0x8709, 0xF2DE, 0x8723, 0xF2DF, 0x873B, 0xF2E0, 0x871E, - 0xF2E1, 0x8725, 0xF2E2, 0x872E, 0xF2E3, 0x871A, 0xF2E4, 0x873E, - 0xF2E5, 0x8748, 0xF2E6, 0x8734, 0xF2E7, 0x8731, 0xF2E8, 0x8729, - 0xF2E9, 0x8737, 0xF2EA, 0x873F, 0xF2EB, 0x8782, 0xF2EC, 0x8722, - 0xF2ED, 0x877D, 0xF2EE, 0x877E, 0xF2EF, 0x877B, 0xF2F0, 0x8760, - 0xF2F1, 0x8770, 0xF2F2, 0x874C, 0xF2F3, 0x876E, 0xF2F4, 0x878B, - 0xF2F5, 0x8753, 0xF2F6, 0x8763, 0xF2F7, 0x877C, 0xF2F8, 0x8764, - 0xF2F9, 0x8759, 0xF2FA, 0x8765, 0xF2FB, 0x8793, 0xF2FC, 0x87AF, - 0xF2FD, 0x87A8, 0xF2FE, 0x87D2, 0xF340, 0x9A5A, 0xF341, 0x9A5B, - 0xF342, 0x9A5C, 0xF343, 0x9A5D, 0xF344, 0x9A5E, 0xF345, 0x9A5F, - 0xF346, 0x9A60, 0xF347, 0x9A61, 0xF348, 0x9A62, 0xF349, 0x9A63, - 0xF34A, 0x9A64, 0xF34B, 0x9A65, 0xF34C, 0x9A66, 0xF34D, 0x9A67, - 0xF34E, 0x9A68, 0xF34F, 0x9A69, 0xF350, 0x9A6A, 0xF351, 0x9A6B, - 0xF352, 0x9A72, 0xF353, 0x9A83, 0xF354, 0x9A89, 0xF355, 0x9A8D, - 0xF356, 0x9A8E, 0xF357, 0x9A94, 0xF358, 0x9A95, 0xF359, 0x9A99, - 0xF35A, 0x9AA6, 0xF35B, 0x9AA9, 0xF35C, 0x9AAA, 0xF35D, 0x9AAB, - 0xF35E, 0x9AAC, 0xF35F, 0x9AAD, 0xF360, 0x9AAE, 0xF361, 0x9AAF, - 0xF362, 0x9AB2, 0xF363, 0x9AB3, 0xF364, 0x9AB4, 0xF365, 0x9AB5, - 0xF366, 0x9AB9, 0xF367, 0x9ABB, 0xF368, 0x9ABD, 0xF369, 0x9ABE, - 0xF36A, 0x9ABF, 0xF36B, 0x9AC3, 0xF36C, 0x9AC4, 0xF36D, 0x9AC6, - 0xF36E, 0x9AC7, 0xF36F, 0x9AC8, 0xF370, 0x9AC9, 0xF371, 0x9ACA, - 0xF372, 0x9ACD, 0xF373, 0x9ACE, 0xF374, 0x9ACF, 0xF375, 0x9AD0, - 0xF376, 0x9AD2, 0xF377, 0x9AD4, 0xF378, 0x9AD5, 0xF379, 0x9AD6, - 0xF37A, 0x9AD7, 0xF37B, 0x9AD9, 0xF37C, 0x9ADA, 0xF37D, 0x9ADB, - 0xF37E, 0x9ADC, 0xF380, 0x9ADD, 0xF381, 0x9ADE, 0xF382, 0x9AE0, - 0xF383, 0x9AE2, 0xF384, 0x9AE3, 0xF385, 0x9AE4, 0xF386, 0x9AE5, - 0xF387, 0x9AE7, 0xF388, 0x9AE8, 0xF389, 0x9AE9, 0xF38A, 0x9AEA, - 0xF38B, 0x9AEC, 0xF38C, 0x9AEE, 0xF38D, 0x9AF0, 0xF38E, 0x9AF1, - 0xF38F, 0x9AF2, 0xF390, 0x9AF3, 0xF391, 0x9AF4, 0xF392, 0x9AF5, - 0xF393, 0x9AF6, 0xF394, 0x9AF7, 0xF395, 0x9AF8, 0xF396, 0x9AFA, - 0xF397, 0x9AFC, 0xF398, 0x9AFD, 0xF399, 0x9AFE, 0xF39A, 0x9AFF, - 0xF39B, 0x9B00, 0xF39C, 0x9B01, 0xF39D, 0x9B02, 0xF39E, 0x9B04, - 0xF39F, 0x9B05, 0xF3A0, 0x9B06, 0xF3A1, 0x87C6, 0xF3A2, 0x8788, - 0xF3A3, 0x8785, 0xF3A4, 0x87AD, 0xF3A5, 0x8797, 0xF3A6, 0x8783, - 0xF3A7, 0x87AB, 0xF3A8, 0x87E5, 0xF3A9, 0x87AC, 0xF3AA, 0x87B5, - 0xF3AB, 0x87B3, 0xF3AC, 0x87CB, 0xF3AD, 0x87D3, 0xF3AE, 0x87BD, - 0xF3AF, 0x87D1, 0xF3B0, 0x87C0, 0xF3B1, 0x87CA, 0xF3B2, 0x87DB, - 0xF3B3, 0x87EA, 0xF3B4, 0x87E0, 0xF3B5, 0x87EE, 0xF3B6, 0x8816, - 0xF3B7, 0x8813, 0xF3B8, 0x87FE, 0xF3B9, 0x880A, 0xF3BA, 0x881B, - 0xF3BB, 0x8821, 0xF3BC, 0x8839, 0xF3BD, 0x883C, 0xF3BE, 0x7F36, - 0xF3BF, 0x7F42, 0xF3C0, 0x7F44, 0xF3C1, 0x7F45, 0xF3C2, 0x8210, - 0xF3C3, 0x7AFA, 0xF3C4, 0x7AFD, 0xF3C5, 0x7B08, 0xF3C6, 0x7B03, - 0xF3C7, 0x7B04, 0xF3C8, 0x7B15, 0xF3C9, 0x7B0A, 0xF3CA, 0x7B2B, - 0xF3CB, 0x7B0F, 0xF3CC, 0x7B47, 0xF3CD, 0x7B38, 0xF3CE, 0x7B2A, - 0xF3CF, 0x7B19, 0xF3D0, 0x7B2E, 0xF3D1, 0x7B31, 0xF3D2, 0x7B20, - 0xF3D3, 0x7B25, 0xF3D4, 0x7B24, 0xF3D5, 0x7B33, 0xF3D6, 0x7B3E, - 0xF3D7, 0x7B1E, 0xF3D8, 0x7B58, 0xF3D9, 0x7B5A, 0xF3DA, 0x7B45, - 0xF3DB, 0x7B75, 0xF3DC, 0x7B4C, 0xF3DD, 0x7B5D, 0xF3DE, 0x7B60, - 0xF3DF, 0x7B6E, 0xF3E0, 0x7B7B, 0xF3E1, 0x7B62, 0xF3E2, 0x7B72, - 0xF3E3, 0x7B71, 0xF3E4, 0x7B90, 0xF3E5, 0x7BA6, 0xF3E6, 0x7BA7, - 0xF3E7, 0x7BB8, 0xF3E8, 0x7BAC, 0xF3E9, 0x7B9D, 0xF3EA, 0x7BA8, - 0xF3EB, 0x7B85, 0xF3EC, 0x7BAA, 0xF3ED, 0x7B9C, 0xF3EE, 0x7BA2, - 0xF3EF, 0x7BAB, 0xF3F0, 0x7BB4, 0xF3F1, 0x7BD1, 0xF3F2, 0x7BC1, - 0xF3F3, 0x7BCC, 0xF3F4, 0x7BDD, 0xF3F5, 0x7BDA, 0xF3F6, 0x7BE5, - 0xF3F7, 0x7BE6, 0xF3F8, 0x7BEA, 0xF3F9, 0x7C0C, 0xF3FA, 0x7BFE, - 0xF3FB, 0x7BFC, 0xF3FC, 0x7C0F, 0xF3FD, 0x7C16, 0xF3FE, 0x7C0B, - 0xF440, 0x9B07, 0xF441, 0x9B09, 0xF442, 0x9B0A, 0xF443, 0x9B0B, - 0xF444, 0x9B0C, 0xF445, 0x9B0D, 0xF446, 0x9B0E, 0xF447, 0x9B10, - 0xF448, 0x9B11, 0xF449, 0x9B12, 0xF44A, 0x9B14, 0xF44B, 0x9B15, - 0xF44C, 0x9B16, 0xF44D, 0x9B17, 0xF44E, 0x9B18, 0xF44F, 0x9B19, - 0xF450, 0x9B1A, 0xF451, 0x9B1B, 0xF452, 0x9B1C, 0xF453, 0x9B1D, - 0xF454, 0x9B1E, 0xF455, 0x9B20, 0xF456, 0x9B21, 0xF457, 0x9B22, - 0xF458, 0x9B24, 0xF459, 0x9B25, 0xF45A, 0x9B26, 0xF45B, 0x9B27, - 0xF45C, 0x9B28, 0xF45D, 0x9B29, 0xF45E, 0x9B2A, 0xF45F, 0x9B2B, - 0xF460, 0x9B2C, 0xF461, 0x9B2D, 0xF462, 0x9B2E, 0xF463, 0x9B30, - 0xF464, 0x9B31, 0xF465, 0x9B33, 0xF466, 0x9B34, 0xF467, 0x9B35, - 0xF468, 0x9B36, 0xF469, 0x9B37, 0xF46A, 0x9B38, 0xF46B, 0x9B39, - 0xF46C, 0x9B3A, 0xF46D, 0x9B3D, 0xF46E, 0x9B3E, 0xF46F, 0x9B3F, - 0xF470, 0x9B40, 0xF471, 0x9B46, 0xF472, 0x9B4A, 0xF473, 0x9B4B, - 0xF474, 0x9B4C, 0xF475, 0x9B4E, 0xF476, 0x9B50, 0xF477, 0x9B52, - 0xF478, 0x9B53, 0xF479, 0x9B55, 0xF47A, 0x9B56, 0xF47B, 0x9B57, - 0xF47C, 0x9B58, 0xF47D, 0x9B59, 0xF47E, 0x9B5A, 0xF480, 0x9B5B, - 0xF481, 0x9B5C, 0xF482, 0x9B5D, 0xF483, 0x9B5E, 0xF484, 0x9B5F, - 0xF485, 0x9B60, 0xF486, 0x9B61, 0xF487, 0x9B62, 0xF488, 0x9B63, - 0xF489, 0x9B64, 0xF48A, 0x9B65, 0xF48B, 0x9B66, 0xF48C, 0x9B67, - 0xF48D, 0x9B68, 0xF48E, 0x9B69, 0xF48F, 0x9B6A, 0xF490, 0x9B6B, - 0xF491, 0x9B6C, 0xF492, 0x9B6D, 0xF493, 0x9B6E, 0xF494, 0x9B6F, - 0xF495, 0x9B70, 0xF496, 0x9B71, 0xF497, 0x9B72, 0xF498, 0x9B73, - 0xF499, 0x9B74, 0xF49A, 0x9B75, 0xF49B, 0x9B76, 0xF49C, 0x9B77, - 0xF49D, 0x9B78, 0xF49E, 0x9B79, 0xF49F, 0x9B7A, 0xF4A0, 0x9B7B, - 0xF4A1, 0x7C1F, 0xF4A2, 0x7C2A, 0xF4A3, 0x7C26, 0xF4A4, 0x7C38, - 0xF4A5, 0x7C41, 0xF4A6, 0x7C40, 0xF4A7, 0x81FE, 0xF4A8, 0x8201, - 0xF4A9, 0x8202, 0xF4AA, 0x8204, 0xF4AB, 0x81EC, 0xF4AC, 0x8844, - 0xF4AD, 0x8221, 0xF4AE, 0x8222, 0xF4AF, 0x8223, 0xF4B0, 0x822D, - 0xF4B1, 0x822F, 0xF4B2, 0x8228, 0xF4B3, 0x822B, 0xF4B4, 0x8238, - 0xF4B5, 0x823B, 0xF4B6, 0x8233, 0xF4B7, 0x8234, 0xF4B8, 0x823E, - 0xF4B9, 0x8244, 0xF4BA, 0x8249, 0xF4BB, 0x824B, 0xF4BC, 0x824F, - 0xF4BD, 0x825A, 0xF4BE, 0x825F, 0xF4BF, 0x8268, 0xF4C0, 0x887E, - 0xF4C1, 0x8885, 0xF4C2, 0x8888, 0xF4C3, 0x88D8, 0xF4C4, 0x88DF, - 0xF4C5, 0x895E, 0xF4C6, 0x7F9D, 0xF4C7, 0x7F9F, 0xF4C8, 0x7FA7, - 0xF4C9, 0x7FAF, 0xF4CA, 0x7FB0, 0xF4CB, 0x7FB2, 0xF4CC, 0x7C7C, - 0xF4CD, 0x6549, 0xF4CE, 0x7C91, 0xF4CF, 0x7C9D, 0xF4D0, 0x7C9C, - 0xF4D1, 0x7C9E, 0xF4D2, 0x7CA2, 0xF4D3, 0x7CB2, 0xF4D4, 0x7CBC, - 0xF4D5, 0x7CBD, 0xF4D6, 0x7CC1, 0xF4D7, 0x7CC7, 0xF4D8, 0x7CCC, - 0xF4D9, 0x7CCD, 0xF4DA, 0x7CC8, 0xF4DB, 0x7CC5, 0xF4DC, 0x7CD7, - 0xF4DD, 0x7CE8, 0xF4DE, 0x826E, 0xF4DF, 0x66A8, 0xF4E0, 0x7FBF, - 0xF4E1, 0x7FCE, 0xF4E2, 0x7FD5, 0xF4E3, 0x7FE5, 0xF4E4, 0x7FE1, - 0xF4E5, 0x7FE6, 0xF4E6, 0x7FE9, 0xF4E7, 0x7FEE, 0xF4E8, 0x7FF3, - 0xF4E9, 0x7CF8, 0xF4EA, 0x7D77, 0xF4EB, 0x7DA6, 0xF4EC, 0x7DAE, - 0xF4ED, 0x7E47, 0xF4EE, 0x7E9B, 0xF4EF, 0x9EB8, 0xF4F0, 0x9EB4, - 0xF4F1, 0x8D73, 0xF4F2, 0x8D84, 0xF4F3, 0x8D94, 0xF4F4, 0x8D91, - 0xF4F5, 0x8DB1, 0xF4F6, 0x8D67, 0xF4F7, 0x8D6D, 0xF4F8, 0x8C47, - 0xF4F9, 0x8C49, 0xF4FA, 0x914A, 0xF4FB, 0x9150, 0xF4FC, 0x914E, - 0xF4FD, 0x914F, 0xF4FE, 0x9164, 0xF540, 0x9B7C, 0xF541, 0x9B7D, - 0xF542, 0x9B7E, 0xF543, 0x9B7F, 0xF544, 0x9B80, 0xF545, 0x9B81, - 0xF546, 0x9B82, 0xF547, 0x9B83, 0xF548, 0x9B84, 0xF549, 0x9B85, - 0xF54A, 0x9B86, 0xF54B, 0x9B87, 0xF54C, 0x9B88, 0xF54D, 0x9B89, - 0xF54E, 0x9B8A, 0xF54F, 0x9B8B, 0xF550, 0x9B8C, 0xF551, 0x9B8D, - 0xF552, 0x9B8E, 0xF553, 0x9B8F, 0xF554, 0x9B90, 0xF555, 0x9B91, - 0xF556, 0x9B92, 0xF557, 0x9B93, 0xF558, 0x9B94, 0xF559, 0x9B95, - 0xF55A, 0x9B96, 0xF55B, 0x9B97, 0xF55C, 0x9B98, 0xF55D, 0x9B99, - 0xF55E, 0x9B9A, 0xF55F, 0x9B9B, 0xF560, 0x9B9C, 0xF561, 0x9B9D, - 0xF562, 0x9B9E, 0xF563, 0x9B9F, 0xF564, 0x9BA0, 0xF565, 0x9BA1, - 0xF566, 0x9BA2, 0xF567, 0x9BA3, 0xF568, 0x9BA4, 0xF569, 0x9BA5, - 0xF56A, 0x9BA6, 0xF56B, 0x9BA7, 0xF56C, 0x9BA8, 0xF56D, 0x9BA9, - 0xF56E, 0x9BAA, 0xF56F, 0x9BAB, 0xF570, 0x9BAC, 0xF571, 0x9BAD, - 0xF572, 0x9BAE, 0xF573, 0x9BAF, 0xF574, 0x9BB0, 0xF575, 0x9BB1, - 0xF576, 0x9BB2, 0xF577, 0x9BB3, 0xF578, 0x9BB4, 0xF579, 0x9BB5, - 0xF57A, 0x9BB6, 0xF57B, 0x9BB7, 0xF57C, 0x9BB8, 0xF57D, 0x9BB9, - 0xF57E, 0x9BBA, 0xF580, 0x9BBB, 0xF581, 0x9BBC, 0xF582, 0x9BBD, - 0xF583, 0x9BBE, 0xF584, 0x9BBF, 0xF585, 0x9BC0, 0xF586, 0x9BC1, - 0xF587, 0x9BC2, 0xF588, 0x9BC3, 0xF589, 0x9BC4, 0xF58A, 0x9BC5, - 0xF58B, 0x9BC6, 0xF58C, 0x9BC7, 0xF58D, 0x9BC8, 0xF58E, 0x9BC9, - 0xF58F, 0x9BCA, 0xF590, 0x9BCB, 0xF591, 0x9BCC, 0xF592, 0x9BCD, - 0xF593, 0x9BCE, 0xF594, 0x9BCF, 0xF595, 0x9BD0, 0xF596, 0x9BD1, - 0xF597, 0x9BD2, 0xF598, 0x9BD3, 0xF599, 0x9BD4, 0xF59A, 0x9BD5, - 0xF59B, 0x9BD6, 0xF59C, 0x9BD7, 0xF59D, 0x9BD8, 0xF59E, 0x9BD9, - 0xF59F, 0x9BDA, 0xF5A0, 0x9BDB, 0xF5A1, 0x9162, 0xF5A2, 0x9161, - 0xF5A3, 0x9170, 0xF5A4, 0x9169, 0xF5A5, 0x916F, 0xF5A6, 0x917D, - 0xF5A7, 0x917E, 0xF5A8, 0x9172, 0xF5A9, 0x9174, 0xF5AA, 0x9179, - 0xF5AB, 0x918C, 0xF5AC, 0x9185, 0xF5AD, 0x9190, 0xF5AE, 0x918D, - 0xF5AF, 0x9191, 0xF5B0, 0x91A2, 0xF5B1, 0x91A3, 0xF5B2, 0x91AA, - 0xF5B3, 0x91AD, 0xF5B4, 0x91AE, 0xF5B5, 0x91AF, 0xF5B6, 0x91B5, - 0xF5B7, 0x91B4, 0xF5B8, 0x91BA, 0xF5B9, 0x8C55, 0xF5BA, 0x9E7E, - 0xF5BB, 0x8DB8, 0xF5BC, 0x8DEB, 0xF5BD, 0x8E05, 0xF5BE, 0x8E59, - 0xF5BF, 0x8E69, 0xF5C0, 0x8DB5, 0xF5C1, 0x8DBF, 0xF5C2, 0x8DBC, - 0xF5C3, 0x8DBA, 0xF5C4, 0x8DC4, 0xF5C5, 0x8DD6, 0xF5C6, 0x8DD7, - 0xF5C7, 0x8DDA, 0xF5C8, 0x8DDE, 0xF5C9, 0x8DCE, 0xF5CA, 0x8DCF, - 0xF5CB, 0x8DDB, 0xF5CC, 0x8DC6, 0xF5CD, 0x8DEC, 0xF5CE, 0x8DF7, - 0xF5CF, 0x8DF8, 0xF5D0, 0x8DE3, 0xF5D1, 0x8DF9, 0xF5D2, 0x8DFB, - 0xF5D3, 0x8DE4, 0xF5D4, 0x8E09, 0xF5D5, 0x8DFD, 0xF5D6, 0x8E14, - 0xF5D7, 0x8E1D, 0xF5D8, 0x8E1F, 0xF5D9, 0x8E2C, 0xF5DA, 0x8E2E, - 0xF5DB, 0x8E23, 0xF5DC, 0x8E2F, 0xF5DD, 0x8E3A, 0xF5DE, 0x8E40, - 0xF5DF, 0x8E39, 0xF5E0, 0x8E35, 0xF5E1, 0x8E3D, 0xF5E2, 0x8E31, - 0xF5E3, 0x8E49, 0xF5E4, 0x8E41, 0xF5E5, 0x8E42, 0xF5E6, 0x8E51, - 0xF5E7, 0x8E52, 0xF5E8, 0x8E4A, 0xF5E9, 0x8E70, 0xF5EA, 0x8E76, - 0xF5EB, 0x8E7C, 0xF5EC, 0x8E6F, 0xF5ED, 0x8E74, 0xF5EE, 0x8E85, - 0xF5EF, 0x8E8F, 0xF5F0, 0x8E94, 0xF5F1, 0x8E90, 0xF5F2, 0x8E9C, - 0xF5F3, 0x8E9E, 0xF5F4, 0x8C78, 0xF5F5, 0x8C82, 0xF5F6, 0x8C8A, - 0xF5F7, 0x8C85, 0xF5F8, 0x8C98, 0xF5F9, 0x8C94, 0xF5FA, 0x659B, - 0xF5FB, 0x89D6, 0xF5FC, 0x89DE, 0xF5FD, 0x89DA, 0xF5FE, 0x89DC, - 0xF640, 0x9BDC, 0xF641, 0x9BDD, 0xF642, 0x9BDE, 0xF643, 0x9BDF, - 0xF644, 0x9BE0, 0xF645, 0x9BE1, 0xF646, 0x9BE2, 0xF647, 0x9BE3, - 0xF648, 0x9BE4, 0xF649, 0x9BE5, 0xF64A, 0x9BE6, 0xF64B, 0x9BE7, - 0xF64C, 0x9BE8, 0xF64D, 0x9BE9, 0xF64E, 0x9BEA, 0xF64F, 0x9BEB, - 0xF650, 0x9BEC, 0xF651, 0x9BED, 0xF652, 0x9BEE, 0xF653, 0x9BEF, - 0xF654, 0x9BF0, 0xF655, 0x9BF1, 0xF656, 0x9BF2, 0xF657, 0x9BF3, - 0xF658, 0x9BF4, 0xF659, 0x9BF5, 0xF65A, 0x9BF6, 0xF65B, 0x9BF7, - 0xF65C, 0x9BF8, 0xF65D, 0x9BF9, 0xF65E, 0x9BFA, 0xF65F, 0x9BFB, - 0xF660, 0x9BFC, 0xF661, 0x9BFD, 0xF662, 0x9BFE, 0xF663, 0x9BFF, - 0xF664, 0x9C00, 0xF665, 0x9C01, 0xF666, 0x9C02, 0xF667, 0x9C03, - 0xF668, 0x9C04, 0xF669, 0x9C05, 0xF66A, 0x9C06, 0xF66B, 0x9C07, - 0xF66C, 0x9C08, 0xF66D, 0x9C09, 0xF66E, 0x9C0A, 0xF66F, 0x9C0B, - 0xF670, 0x9C0C, 0xF671, 0x9C0D, 0xF672, 0x9C0E, 0xF673, 0x9C0F, - 0xF674, 0x9C10, 0xF675, 0x9C11, 0xF676, 0x9C12, 0xF677, 0x9C13, - 0xF678, 0x9C14, 0xF679, 0x9C15, 0xF67A, 0x9C16, 0xF67B, 0x9C17, - 0xF67C, 0x9C18, 0xF67D, 0x9C19, 0xF67E, 0x9C1A, 0xF680, 0x9C1B, - 0xF681, 0x9C1C, 0xF682, 0x9C1D, 0xF683, 0x9C1E, 0xF684, 0x9C1F, - 0xF685, 0x9C20, 0xF686, 0x9C21, 0xF687, 0x9C22, 0xF688, 0x9C23, - 0xF689, 0x9C24, 0xF68A, 0x9C25, 0xF68B, 0x9C26, 0xF68C, 0x9C27, - 0xF68D, 0x9C28, 0xF68E, 0x9C29, 0xF68F, 0x9C2A, 0xF690, 0x9C2B, - 0xF691, 0x9C2C, 0xF692, 0x9C2D, 0xF693, 0x9C2E, 0xF694, 0x9C2F, - 0xF695, 0x9C30, 0xF696, 0x9C31, 0xF697, 0x9C32, 0xF698, 0x9C33, - 0xF699, 0x9C34, 0xF69A, 0x9C35, 0xF69B, 0x9C36, 0xF69C, 0x9C37, - 0xF69D, 0x9C38, 0xF69E, 0x9C39, 0xF69F, 0x9C3A, 0xF6A0, 0x9C3B, - 0xF6A1, 0x89E5, 0xF6A2, 0x89EB, 0xF6A3, 0x89EF, 0xF6A4, 0x8A3E, - 0xF6A5, 0x8B26, 0xF6A6, 0x9753, 0xF6A7, 0x96E9, 0xF6A8, 0x96F3, - 0xF6A9, 0x96EF, 0xF6AA, 0x9706, 0xF6AB, 0x9701, 0xF6AC, 0x9708, - 0xF6AD, 0x970F, 0xF6AE, 0x970E, 0xF6AF, 0x972A, 0xF6B0, 0x972D, - 0xF6B1, 0x9730, 0xF6B2, 0x973E, 0xF6B3, 0x9F80, 0xF6B4, 0x9F83, - 0xF6B5, 0x9F85, 0xF6B6, 0x9F86, 0xF6B7, 0x9F87, 0xF6B8, 0x9F88, - 0xF6B9, 0x9F89, 0xF6BA, 0x9F8A, 0xF6BB, 0x9F8C, 0xF6BC, 0x9EFE, - 0xF6BD, 0x9F0B, 0xF6BE, 0x9F0D, 0xF6BF, 0x96B9, 0xF6C0, 0x96BC, - 0xF6C1, 0x96BD, 0xF6C2, 0x96CE, 0xF6C3, 0x96D2, 0xF6C4, 0x77BF, - 0xF6C5, 0x96E0, 0xF6C6, 0x928E, 0xF6C7, 0x92AE, 0xF6C8, 0x92C8, - 0xF6C9, 0x933E, 0xF6CA, 0x936A, 0xF6CB, 0x93CA, 0xF6CC, 0x938F, - 0xF6CD, 0x943E, 0xF6CE, 0x946B, 0xF6CF, 0x9C7F, 0xF6D0, 0x9C82, - 0xF6D1, 0x9C85, 0xF6D2, 0x9C86, 0xF6D3, 0x9C87, 0xF6D4, 0x9C88, - 0xF6D5, 0x7A23, 0xF6D6, 0x9C8B, 0xF6D7, 0x9C8E, 0xF6D8, 0x9C90, - 0xF6D9, 0x9C91, 0xF6DA, 0x9C92, 0xF6DB, 0x9C94, 0xF6DC, 0x9C95, - 0xF6DD, 0x9C9A, 0xF6DE, 0x9C9B, 0xF6DF, 0x9C9E, 0xF6E0, 0x9C9F, - 0xF6E1, 0x9CA0, 0xF6E2, 0x9CA1, 0xF6E3, 0x9CA2, 0xF6E4, 0x9CA3, - 0xF6E5, 0x9CA5, 0xF6E6, 0x9CA6, 0xF6E7, 0x9CA7, 0xF6E8, 0x9CA8, - 0xF6E9, 0x9CA9, 0xF6EA, 0x9CAB, 0xF6EB, 0x9CAD, 0xF6EC, 0x9CAE, - 0xF6ED, 0x9CB0, 0xF6EE, 0x9CB1, 0xF6EF, 0x9CB2, 0xF6F0, 0x9CB3, - 0xF6F1, 0x9CB4, 0xF6F2, 0x9CB5, 0xF6F3, 0x9CB6, 0xF6F4, 0x9CB7, - 0xF6F5, 0x9CBA, 0xF6F6, 0x9CBB, 0xF6F7, 0x9CBC, 0xF6F8, 0x9CBD, - 0xF6F9, 0x9CC4, 0xF6FA, 0x9CC5, 0xF6FB, 0x9CC6, 0xF6FC, 0x9CC7, - 0xF6FD, 0x9CCA, 0xF6FE, 0x9CCB, 0xF740, 0x9C3C, 0xF741, 0x9C3D, - 0xF742, 0x9C3E, 0xF743, 0x9C3F, 0xF744, 0x9C40, 0xF745, 0x9C41, - 0xF746, 0x9C42, 0xF747, 0x9C43, 0xF748, 0x9C44, 0xF749, 0x9C45, - 0xF74A, 0x9C46, 0xF74B, 0x9C47, 0xF74C, 0x9C48, 0xF74D, 0x9C49, - 0xF74E, 0x9C4A, 0xF74F, 0x9C4B, 0xF750, 0x9C4C, 0xF751, 0x9C4D, - 0xF752, 0x9C4E, 0xF753, 0x9C4F, 0xF754, 0x9C50, 0xF755, 0x9C51, - 0xF756, 0x9C52, 0xF757, 0x9C53, 0xF758, 0x9C54, 0xF759, 0x9C55, - 0xF75A, 0x9C56, 0xF75B, 0x9C57, 0xF75C, 0x9C58, 0xF75D, 0x9C59, - 0xF75E, 0x9C5A, 0xF75F, 0x9C5B, 0xF760, 0x9C5C, 0xF761, 0x9C5D, - 0xF762, 0x9C5E, 0xF763, 0x9C5F, 0xF764, 0x9C60, 0xF765, 0x9C61, - 0xF766, 0x9C62, 0xF767, 0x9C63, 0xF768, 0x9C64, 0xF769, 0x9C65, - 0xF76A, 0x9C66, 0xF76B, 0x9C67, 0xF76C, 0x9C68, 0xF76D, 0x9C69, - 0xF76E, 0x9C6A, 0xF76F, 0x9C6B, 0xF770, 0x9C6C, 0xF771, 0x9C6D, - 0xF772, 0x9C6E, 0xF773, 0x9C6F, 0xF774, 0x9C70, 0xF775, 0x9C71, - 0xF776, 0x9C72, 0xF777, 0x9C73, 0xF778, 0x9C74, 0xF779, 0x9C75, - 0xF77A, 0x9C76, 0xF77B, 0x9C77, 0xF77C, 0x9C78, 0xF77D, 0x9C79, - 0xF77E, 0x9C7A, 0xF780, 0x9C7B, 0xF781, 0x9C7D, 0xF782, 0x9C7E, - 0xF783, 0x9C80, 0xF784, 0x9C83, 0xF785, 0x9C84, 0xF786, 0x9C89, - 0xF787, 0x9C8A, 0xF788, 0x9C8C, 0xF789, 0x9C8F, 0xF78A, 0x9C93, - 0xF78B, 0x9C96, 0xF78C, 0x9C97, 0xF78D, 0x9C98, 0xF78E, 0x9C99, - 0xF78F, 0x9C9D, 0xF790, 0x9CAA, 0xF791, 0x9CAC, 0xF792, 0x9CAF, - 0xF793, 0x9CB9, 0xF794, 0x9CBE, 0xF795, 0x9CBF, 0xF796, 0x9CC0, - 0xF797, 0x9CC1, 0xF798, 0x9CC2, 0xF799, 0x9CC8, 0xF79A, 0x9CC9, - 0xF79B, 0x9CD1, 0xF79C, 0x9CD2, 0xF79D, 0x9CDA, 0xF79E, 0x9CDB, - 0xF79F, 0x9CE0, 0xF7A0, 0x9CE1, 0xF7A1, 0x9CCC, 0xF7A2, 0x9CCD, - 0xF7A3, 0x9CCE, 0xF7A4, 0x9CCF, 0xF7A5, 0x9CD0, 0xF7A6, 0x9CD3, - 0xF7A7, 0x9CD4, 0xF7A8, 0x9CD5, 0xF7A9, 0x9CD7, 0xF7AA, 0x9CD8, - 0xF7AB, 0x9CD9, 0xF7AC, 0x9CDC, 0xF7AD, 0x9CDD, 0xF7AE, 0x9CDF, - 0xF7AF, 0x9CE2, 0xF7B0, 0x977C, 0xF7B1, 0x9785, 0xF7B2, 0x9791, - 0xF7B3, 0x9792, 0xF7B4, 0x9794, 0xF7B5, 0x97AF, 0xF7B6, 0x97AB, - 0xF7B7, 0x97A3, 0xF7B8, 0x97B2, 0xF7B9, 0x97B4, 0xF7BA, 0x9AB1, - 0xF7BB, 0x9AB0, 0xF7BC, 0x9AB7, 0xF7BD, 0x9E58, 0xF7BE, 0x9AB6, - 0xF7BF, 0x9ABA, 0xF7C0, 0x9ABC, 0xF7C1, 0x9AC1, 0xF7C2, 0x9AC0, - 0xF7C3, 0x9AC5, 0xF7C4, 0x9AC2, 0xF7C5, 0x9ACB, 0xF7C6, 0x9ACC, - 0xF7C7, 0x9AD1, 0xF7C8, 0x9B45, 0xF7C9, 0x9B43, 0xF7CA, 0x9B47, - 0xF7CB, 0x9B49, 0xF7CC, 0x9B48, 0xF7CD, 0x9B4D, 0xF7CE, 0x9B51, - 0xF7CF, 0x98E8, 0xF7D0, 0x990D, 0xF7D1, 0x992E, 0xF7D2, 0x9955, - 0xF7D3, 0x9954, 0xF7D4, 0x9ADF, 0xF7D5, 0x9AE1, 0xF7D6, 0x9AE6, - 0xF7D7, 0x9AEF, 0xF7D8, 0x9AEB, 0xF7D9, 0x9AFB, 0xF7DA, 0x9AED, - 0xF7DB, 0x9AF9, 0xF7DC, 0x9B08, 0xF7DD, 0x9B0F, 0xF7DE, 0x9B13, - 0xF7DF, 0x9B1F, 0xF7E0, 0x9B23, 0xF7E1, 0x9EBD, 0xF7E2, 0x9EBE, - 0xF7E3, 0x7E3B, 0xF7E4, 0x9E82, 0xF7E5, 0x9E87, 0xF7E6, 0x9E88, - 0xF7E7, 0x9E8B, 0xF7E8, 0x9E92, 0xF7E9, 0x93D6, 0xF7EA, 0x9E9D, - 0xF7EB, 0x9E9F, 0xF7EC, 0x9EDB, 0xF7ED, 0x9EDC, 0xF7EE, 0x9EDD, - 0xF7EF, 0x9EE0, 0xF7F0, 0x9EDF, 0xF7F1, 0x9EE2, 0xF7F2, 0x9EE9, - 0xF7F3, 0x9EE7, 0xF7F4, 0x9EE5, 0xF7F5, 0x9EEA, 0xF7F6, 0x9EEF, - 0xF7F7, 0x9F22, 0xF7F8, 0x9F2C, 0xF7F9, 0x9F2F, 0xF7FA, 0x9F39, - 0xF7FB, 0x9F37, 0xF7FC, 0x9F3D, 0xF7FD, 0x9F3E, 0xF7FE, 0x9F44, - 0xF840, 0x9CE3, 0xF841, 0x9CE4, 0xF842, 0x9CE5, 0xF843, 0x9CE6, - 0xF844, 0x9CE7, 0xF845, 0x9CE8, 0xF846, 0x9CE9, 0xF847, 0x9CEA, - 0xF848, 0x9CEB, 0xF849, 0x9CEC, 0xF84A, 0x9CED, 0xF84B, 0x9CEE, - 0xF84C, 0x9CEF, 0xF84D, 0x9CF0, 0xF84E, 0x9CF1, 0xF84F, 0x9CF2, - 0xF850, 0x9CF3, 0xF851, 0x9CF4, 0xF852, 0x9CF5, 0xF853, 0x9CF6, - 0xF854, 0x9CF7, 0xF855, 0x9CF8, 0xF856, 0x9CF9, 0xF857, 0x9CFA, - 0xF858, 0x9CFB, 0xF859, 0x9CFC, 0xF85A, 0x9CFD, 0xF85B, 0x9CFE, - 0xF85C, 0x9CFF, 0xF85D, 0x9D00, 0xF85E, 0x9D01, 0xF85F, 0x9D02, - 0xF860, 0x9D03, 0xF861, 0x9D04, 0xF862, 0x9D05, 0xF863, 0x9D06, - 0xF864, 0x9D07, 0xF865, 0x9D08, 0xF866, 0x9D09, 0xF867, 0x9D0A, - 0xF868, 0x9D0B, 0xF869, 0x9D0C, 0xF86A, 0x9D0D, 0xF86B, 0x9D0E, - 0xF86C, 0x9D0F, 0xF86D, 0x9D10, 0xF86E, 0x9D11, 0xF86F, 0x9D12, - 0xF870, 0x9D13, 0xF871, 0x9D14, 0xF872, 0x9D15, 0xF873, 0x9D16, - 0xF874, 0x9D17, 0xF875, 0x9D18, 0xF876, 0x9D19, 0xF877, 0x9D1A, - 0xF878, 0x9D1B, 0xF879, 0x9D1C, 0xF87A, 0x9D1D, 0xF87B, 0x9D1E, - 0xF87C, 0x9D1F, 0xF87D, 0x9D20, 0xF87E, 0x9D21, 0xF880, 0x9D22, - 0xF881, 0x9D23, 0xF882, 0x9D24, 0xF883, 0x9D25, 0xF884, 0x9D26, - 0xF885, 0x9D27, 0xF886, 0x9D28, 0xF887, 0x9D29, 0xF888, 0x9D2A, - 0xF889, 0x9D2B, 0xF88A, 0x9D2C, 0xF88B, 0x9D2D, 0xF88C, 0x9D2E, - 0xF88D, 0x9D2F, 0xF88E, 0x9D30, 0xF88F, 0x9D31, 0xF890, 0x9D32, - 0xF891, 0x9D33, 0xF892, 0x9D34, 0xF893, 0x9D35, 0xF894, 0x9D36, - 0xF895, 0x9D37, 0xF896, 0x9D38, 0xF897, 0x9D39, 0xF898, 0x9D3A, - 0xF899, 0x9D3B, 0xF89A, 0x9D3C, 0xF89B, 0x9D3D, 0xF89C, 0x9D3E, - 0xF89D, 0x9D3F, 0xF89E, 0x9D40, 0xF89F, 0x9D41, 0xF8A0, 0x9D42, - 0xF940, 0x9D43, 0xF941, 0x9D44, 0xF942, 0x9D45, 0xF943, 0x9D46, - 0xF944, 0x9D47, 0xF945, 0x9D48, 0xF946, 0x9D49, 0xF947, 0x9D4A, - 0xF948, 0x9D4B, 0xF949, 0x9D4C, 0xF94A, 0x9D4D, 0xF94B, 0x9D4E, - 0xF94C, 0x9D4F, 0xF94D, 0x9D50, 0xF94E, 0x9D51, 0xF94F, 0x9D52, - 0xF950, 0x9D53, 0xF951, 0x9D54, 0xF952, 0x9D55, 0xF953, 0x9D56, - 0xF954, 0x9D57, 0xF955, 0x9D58, 0xF956, 0x9D59, 0xF957, 0x9D5A, - 0xF958, 0x9D5B, 0xF959, 0x9D5C, 0xF95A, 0x9D5D, 0xF95B, 0x9D5E, - 0xF95C, 0x9D5F, 0xF95D, 0x9D60, 0xF95E, 0x9D61, 0xF95F, 0x9D62, - 0xF960, 0x9D63, 0xF961, 0x9D64, 0xF962, 0x9D65, 0xF963, 0x9D66, - 0xF964, 0x9D67, 0xF965, 0x9D68, 0xF966, 0x9D69, 0xF967, 0x9D6A, - 0xF968, 0x9D6B, 0xF969, 0x9D6C, 0xF96A, 0x9D6D, 0xF96B, 0x9D6E, - 0xF96C, 0x9D6F, 0xF96D, 0x9D70, 0xF96E, 0x9D71, 0xF96F, 0x9D72, - 0xF970, 0x9D73, 0xF971, 0x9D74, 0xF972, 0x9D75, 0xF973, 0x9D76, - 0xF974, 0x9D77, 0xF975, 0x9D78, 0xF976, 0x9D79, 0xF977, 0x9D7A, - 0xF978, 0x9D7B, 0xF979, 0x9D7C, 0xF97A, 0x9D7D, 0xF97B, 0x9D7E, - 0xF97C, 0x9D7F, 0xF97D, 0x9D80, 0xF97E, 0x9D81, 0xF980, 0x9D82, - 0xF981, 0x9D83, 0xF982, 0x9D84, 0xF983, 0x9D85, 0xF984, 0x9D86, - 0xF985, 0x9D87, 0xF986, 0x9D88, 0xF987, 0x9D89, 0xF988, 0x9D8A, - 0xF989, 0x9D8B, 0xF98A, 0x9D8C, 0xF98B, 0x9D8D, 0xF98C, 0x9D8E, - 0xF98D, 0x9D8F, 0xF98E, 0x9D90, 0xF98F, 0x9D91, 0xF990, 0x9D92, - 0xF991, 0x9D93, 0xF992, 0x9D94, 0xF993, 0x9D95, 0xF994, 0x9D96, - 0xF995, 0x9D97, 0xF996, 0x9D98, 0xF997, 0x9D99, 0xF998, 0x9D9A, - 0xF999, 0x9D9B, 0xF99A, 0x9D9C, 0xF99B, 0x9D9D, 0xF99C, 0x9D9E, - 0xF99D, 0x9D9F, 0xF99E, 0x9DA0, 0xF99F, 0x9DA1, 0xF9A0, 0x9DA2, - 0xFA40, 0x9DA3, 0xFA41, 0x9DA4, 0xFA42, 0x9DA5, 0xFA43, 0x9DA6, - 0xFA44, 0x9DA7, 0xFA45, 0x9DA8, 0xFA46, 0x9DA9, 0xFA47, 0x9DAA, - 0xFA48, 0x9DAB, 0xFA49, 0x9DAC, 0xFA4A, 0x9DAD, 0xFA4B, 0x9DAE, - 0xFA4C, 0x9DAF, 0xFA4D, 0x9DB0, 0xFA4E, 0x9DB1, 0xFA4F, 0x9DB2, - 0xFA50, 0x9DB3, 0xFA51, 0x9DB4, 0xFA52, 0x9DB5, 0xFA53, 0x9DB6, - 0xFA54, 0x9DB7, 0xFA55, 0x9DB8, 0xFA56, 0x9DB9, 0xFA57, 0x9DBA, - 0xFA58, 0x9DBB, 0xFA59, 0x9DBC, 0xFA5A, 0x9DBD, 0xFA5B, 0x9DBE, - 0xFA5C, 0x9DBF, 0xFA5D, 0x9DC0, 0xFA5E, 0x9DC1, 0xFA5F, 0x9DC2, - 0xFA60, 0x9DC3, 0xFA61, 0x9DC4, 0xFA62, 0x9DC5, 0xFA63, 0x9DC6, - 0xFA64, 0x9DC7, 0xFA65, 0x9DC8, 0xFA66, 0x9DC9, 0xFA67, 0x9DCA, - 0xFA68, 0x9DCB, 0xFA69, 0x9DCC, 0xFA6A, 0x9DCD, 0xFA6B, 0x9DCE, - 0xFA6C, 0x9DCF, 0xFA6D, 0x9DD0, 0xFA6E, 0x9DD1, 0xFA6F, 0x9DD2, - 0xFA70, 0x9DD3, 0xFA71, 0x9DD4, 0xFA72, 0x9DD5, 0xFA73, 0x9DD6, - 0xFA74, 0x9DD7, 0xFA75, 0x9DD8, 0xFA76, 0x9DD9, 0xFA77, 0x9DDA, - 0xFA78, 0x9DDB, 0xFA79, 0x9DDC, 0xFA7A, 0x9DDD, 0xFA7B, 0x9DDE, - 0xFA7C, 0x9DDF, 0xFA7D, 0x9DE0, 0xFA7E, 0x9DE1, 0xFA80, 0x9DE2, - 0xFA81, 0x9DE3, 0xFA82, 0x9DE4, 0xFA83, 0x9DE5, 0xFA84, 0x9DE6, - 0xFA85, 0x9DE7, 0xFA86, 0x9DE8, 0xFA87, 0x9DE9, 0xFA88, 0x9DEA, - 0xFA89, 0x9DEB, 0xFA8A, 0x9DEC, 0xFA8B, 0x9DED, 0xFA8C, 0x9DEE, - 0xFA8D, 0x9DEF, 0xFA8E, 0x9DF0, 0xFA8F, 0x9DF1, 0xFA90, 0x9DF2, - 0xFA91, 0x9DF3, 0xFA92, 0x9DF4, 0xFA93, 0x9DF5, 0xFA94, 0x9DF6, - 0xFA95, 0x9DF7, 0xFA96, 0x9DF8, 0xFA97, 0x9DF9, 0xFA98, 0x9DFA, - 0xFA99, 0x9DFB, 0xFA9A, 0x9DFC, 0xFA9B, 0x9DFD, 0xFA9C, 0x9DFE, - 0xFA9D, 0x9DFF, 0xFA9E, 0x9E00, 0xFA9F, 0x9E01, 0xFAA0, 0x9E02, - 0xFB40, 0x9E03, 0xFB41, 0x9E04, 0xFB42, 0x9E05, 0xFB43, 0x9E06, - 0xFB44, 0x9E07, 0xFB45, 0x9E08, 0xFB46, 0x9E09, 0xFB47, 0x9E0A, - 0xFB48, 0x9E0B, 0xFB49, 0x9E0C, 0xFB4A, 0x9E0D, 0xFB4B, 0x9E0E, - 0xFB4C, 0x9E0F, 0xFB4D, 0x9E10, 0xFB4E, 0x9E11, 0xFB4F, 0x9E12, - 0xFB50, 0x9E13, 0xFB51, 0x9E14, 0xFB52, 0x9E15, 0xFB53, 0x9E16, - 0xFB54, 0x9E17, 0xFB55, 0x9E18, 0xFB56, 0x9E19, 0xFB57, 0x9E1A, - 0xFB58, 0x9E1B, 0xFB59, 0x9E1C, 0xFB5A, 0x9E1D, 0xFB5B, 0x9E1E, - 0xFB5C, 0x9E24, 0xFB5D, 0x9E27, 0xFB5E, 0x9E2E, 0xFB5F, 0x9E30, - 0xFB60, 0x9E34, 0xFB61, 0x9E3B, 0xFB62, 0x9E3C, 0xFB63, 0x9E40, - 0xFB64, 0x9E4D, 0xFB65, 0x9E50, 0xFB66, 0x9E52, 0xFB67, 0x9E53, - 0xFB68, 0x9E54, 0xFB69, 0x9E56, 0xFB6A, 0x9E59, 0xFB6B, 0x9E5D, - 0xFB6C, 0x9E5F, 0xFB6D, 0x9E60, 0xFB6E, 0x9E61, 0xFB6F, 0x9E62, - 0xFB70, 0x9E65, 0xFB71, 0x9E6E, 0xFB72, 0x9E6F, 0xFB73, 0x9E72, - 0xFB74, 0x9E74, 0xFB75, 0x9E75, 0xFB76, 0x9E76, 0xFB77, 0x9E77, - 0xFB78, 0x9E78, 0xFB79, 0x9E79, 0xFB7A, 0x9E7A, 0xFB7B, 0x9E7B, - 0xFB7C, 0x9E7C, 0xFB7D, 0x9E7D, 0xFB7E, 0x9E80, 0xFB80, 0x9E81, - 0xFB81, 0x9E83, 0xFB82, 0x9E84, 0xFB83, 0x9E85, 0xFB84, 0x9E86, - 0xFB85, 0x9E89, 0xFB86, 0x9E8A, 0xFB87, 0x9E8C, 0xFB88, 0x9E8D, - 0xFB89, 0x9E8E, 0xFB8A, 0x9E8F, 0xFB8B, 0x9E90, 0xFB8C, 0x9E91, - 0xFB8D, 0x9E94, 0xFB8E, 0x9E95, 0xFB8F, 0x9E96, 0xFB90, 0x9E97, - 0xFB91, 0x9E98, 0xFB92, 0x9E99, 0xFB93, 0x9E9A, 0xFB94, 0x9E9B, - 0xFB95, 0x9E9C, 0xFB96, 0x9E9E, 0xFB97, 0x9EA0, 0xFB98, 0x9EA1, - 0xFB99, 0x9EA2, 0xFB9A, 0x9EA3, 0xFB9B, 0x9EA4, 0xFB9C, 0x9EA5, - 0xFB9D, 0x9EA7, 0xFB9E, 0x9EA8, 0xFB9F, 0x9EA9, 0xFBA0, 0x9EAA, - 0xFC40, 0x9EAB, 0xFC41, 0x9EAC, 0xFC42, 0x9EAD, 0xFC43, 0x9EAE, - 0xFC44, 0x9EAF, 0xFC45, 0x9EB0, 0xFC46, 0x9EB1, 0xFC47, 0x9EB2, - 0xFC48, 0x9EB3, 0xFC49, 0x9EB5, 0xFC4A, 0x9EB6, 0xFC4B, 0x9EB7, - 0xFC4C, 0x9EB9, 0xFC4D, 0x9EBA, 0xFC4E, 0x9EBC, 0xFC4F, 0x9EBF, - 0xFC50, 0x9EC0, 0xFC51, 0x9EC1, 0xFC52, 0x9EC2, 0xFC53, 0x9EC3, - 0xFC54, 0x9EC5, 0xFC55, 0x9EC6, 0xFC56, 0x9EC7, 0xFC57, 0x9EC8, - 0xFC58, 0x9ECA, 0xFC59, 0x9ECB, 0xFC5A, 0x9ECC, 0xFC5B, 0x9ED0, - 0xFC5C, 0x9ED2, 0xFC5D, 0x9ED3, 0xFC5E, 0x9ED5, 0xFC5F, 0x9ED6, - 0xFC60, 0x9ED7, 0xFC61, 0x9ED9, 0xFC62, 0x9EDA, 0xFC63, 0x9EDE, - 0xFC64, 0x9EE1, 0xFC65, 0x9EE3, 0xFC66, 0x9EE4, 0xFC67, 0x9EE6, - 0xFC68, 0x9EE8, 0xFC69, 0x9EEB, 0xFC6A, 0x9EEC, 0xFC6B, 0x9EED, - 0xFC6C, 0x9EEE, 0xFC6D, 0x9EF0, 0xFC6E, 0x9EF1, 0xFC6F, 0x9EF2, - 0xFC70, 0x9EF3, 0xFC71, 0x9EF4, 0xFC72, 0x9EF5, 0xFC73, 0x9EF6, - 0xFC74, 0x9EF7, 0xFC75, 0x9EF8, 0xFC76, 0x9EFA, 0xFC77, 0x9EFD, - 0xFC78, 0x9EFF, 0xFC79, 0x9F00, 0xFC7A, 0x9F01, 0xFC7B, 0x9F02, - 0xFC7C, 0x9F03, 0xFC7D, 0x9F04, 0xFC7E, 0x9F05, 0xFC80, 0x9F06, - 0xFC81, 0x9F07, 0xFC82, 0x9F08, 0xFC83, 0x9F09, 0xFC84, 0x9F0A, - 0xFC85, 0x9F0C, 0xFC86, 0x9F0F, 0xFC87, 0x9F11, 0xFC88, 0x9F12, - 0xFC89, 0x9F14, 0xFC8A, 0x9F15, 0xFC8B, 0x9F16, 0xFC8C, 0x9F18, - 0xFC8D, 0x9F1A, 0xFC8E, 0x9F1B, 0xFC8F, 0x9F1C, 0xFC90, 0x9F1D, - 0xFC91, 0x9F1E, 0xFC92, 0x9F1F, 0xFC93, 0x9F21, 0xFC94, 0x9F23, - 0xFC95, 0x9F24, 0xFC96, 0x9F25, 0xFC97, 0x9F26, 0xFC98, 0x9F27, - 0xFC99, 0x9F28, 0xFC9A, 0x9F29, 0xFC9B, 0x9F2A, 0xFC9C, 0x9F2B, - 0xFC9D, 0x9F2D, 0xFC9E, 0x9F2E, 0xFC9F, 0x9F30, 0xFCA0, 0x9F31, - 0xFD40, 0x9F32, 0xFD41, 0x9F33, 0xFD42, 0x9F34, 0xFD43, 0x9F35, - 0xFD44, 0x9F36, 0xFD45, 0x9F38, 0xFD46, 0x9F3A, 0xFD47, 0x9F3C, - 0xFD48, 0x9F3F, 0xFD49, 0x9F40, 0xFD4A, 0x9F41, 0xFD4B, 0x9F42, - 0xFD4C, 0x9F43, 0xFD4D, 0x9F45, 0xFD4E, 0x9F46, 0xFD4F, 0x9F47, - 0xFD50, 0x9F48, 0xFD51, 0x9F49, 0xFD52, 0x9F4A, 0xFD53, 0x9F4B, - 0xFD54, 0x9F4C, 0xFD55, 0x9F4D, 0xFD56, 0x9F4E, 0xFD57, 0x9F4F, - 0xFD58, 0x9F52, 0xFD59, 0x9F53, 0xFD5A, 0x9F54, 0xFD5B, 0x9F55, - 0xFD5C, 0x9F56, 0xFD5D, 0x9F57, 0xFD5E, 0x9F58, 0xFD5F, 0x9F59, - 0xFD60, 0x9F5A, 0xFD61, 0x9F5B, 0xFD62, 0x9F5C, 0xFD63, 0x9F5D, - 0xFD64, 0x9F5E, 0xFD65, 0x9F5F, 0xFD66, 0x9F60, 0xFD67, 0x9F61, - 0xFD68, 0x9F62, 0xFD69, 0x9F63, 0xFD6A, 0x9F64, 0xFD6B, 0x9F65, - 0xFD6C, 0x9F66, 0xFD6D, 0x9F67, 0xFD6E, 0x9F68, 0xFD6F, 0x9F69, - 0xFD70, 0x9F6A, 0xFD71, 0x9F6B, 0xFD72, 0x9F6C, 0xFD73, 0x9F6D, - 0xFD74, 0x9F6E, 0xFD75, 0x9F6F, 0xFD76, 0x9F70, 0xFD77, 0x9F71, - 0xFD78, 0x9F72, 0xFD79, 0x9F73, 0xFD7A, 0x9F74, 0xFD7B, 0x9F75, - 0xFD7C, 0x9F76, 0xFD7D, 0x9F77, 0xFD7E, 0x9F78, 0xFD80, 0x9F79, - 0xFD81, 0x9F7A, 0xFD82, 0x9F7B, 0xFD83, 0x9F7C, 0xFD84, 0x9F7D, - 0xFD85, 0x9F7E, 0xFD86, 0x9F81, 0xFD87, 0x9F82, 0xFD88, 0x9F8D, - 0xFD89, 0x9F8E, 0xFD8A, 0x9F8F, 0xFD8B, 0x9F90, 0xFD8C, 0x9F91, - 0xFD8D, 0x9F92, 0xFD8E, 0x9F93, 0xFD8F, 0x9F94, 0xFD90, 0x9F95, - 0xFD91, 0x9F96, 0xFD92, 0x9F97, 0xFD93, 0x9F98, 0xFD94, 0x9F9C, - 0xFD95, 0x9F9D, 0xFD96, 0x9F9E, 0xFD97, 0x9FA1, 0xFD98, 0x9FA2, - 0xFD99, 0x9FA3, 0xFD9A, 0x9FA4, 0xFD9B, 0x9FA5, 0xFD9C, 0xF92C, - 0xFD9D, 0xF979, 0xFD9E, 0xF995, 0xFD9F, 0xF9E7, 0xFDA0, 0xF9F1, - 0xFE40, 0xFA0C, 0xFE41, 0xFA0D, 0xFE42, 0xFA0E, 0xFE43, 0xFA0F, - 0xFE44, 0xFA11, 0xFE45, 0xFA13, 0xFE46, 0xFA14, 0xFE47, 0xFA18, - 0xFE48, 0xFA1F, 0xFE49, 0xFA20, 0xFE4A, 0xFA21, 0xFE4B, 0xFA23, - 0xFE4C, 0xFA24, 0xFE4D, 0xFA27, 0xFE4E, 0xFA28, 0xFE4F, 0xFA29, - 0, 0 -}; - - - -WCHAR ff_convert ( /* Converted code, 0 means conversion error */ - WCHAR chr, /* Character code to be converted */ - UINT dir /* 0: Unicode to OEM code, 1: OEM code to Unicode */ -) -{ - const WCHAR *p; - WCHAR c; - int i, n, li, hi; - - - if (chr < 0x80) { /* ASCII */ - c = chr; - } else { - if (dir) { /* OEM code to unicode */ - p = oem2uni; - hi = sizeof oem2uni / 4 - 1; - } else { /* Unicode to OEM code */ - p = uni2oem; - hi = sizeof uni2oem / 4 - 1; - } - li = 0; - for (n = 16; n; n--) { - i = li + (hi - li) / 2; - if (chr == p[i * 2]) break; - if (chr > p[i * 2]) - li = i; - else - hi = i; - } - c = n ? p[i * 2 + 1] : 0; - } - - return c; -} - - - -WCHAR ff_wtoupper ( - WCHAR chr /* Unicode character to be upper converted */ -) -{ - static const WCHAR lower[] = { /* Lower case characters to be converted */ - /* Latin Supplement */ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, - /* Latin Extended-A */ 0x101,0x103,0x105,0x107,0x109,0x10B,0x10D,0x10F,0x111,0x113,0x115,0x117,0x119,0x11B,0x11D,0x11F,0x121,0x123,0x125,0x127,0x129,0x12B,0x12D,0x12F,0x131,0x133,0x135,0x137,0x13A,0x13C,0x13E,0x140,0x142,0x144,0x146,0x148,0x14B,0x14D,0x14F,0x151,0x153,0x155,0x157,0x159,0x15B,0x15D,0x15F,0x161,0x163,0x165,0x167,0x169,0x16B,0x16D,0x16F,0x171,0x173,0x175,0x177,0x17A,0x17C,0x17E, - /* Latin Extended-B */ 0x183,0x185,0x188,0x18C,0x192,0x199,0x1A1,0x1A3,0x1A8,0x1AD,0x1B0,0x1B4,0x1B6,0x1B9,0x1BD,0x1C6,0x1C9,0x1CC,0x1CE,0x1D0,0x1D2,0x1D4,0x1D6,0x1D8,0x1DA,0x1DC,0x1DD,0x1DF,0x1E1,0x1E3,0x1E5,0x1E7,0x1E9,0x1EB,0x1ED,0x1EF,0x1F3,0x1F5,0x1FB,0x1FD,0x1FF,0x201,0x203,0x205,0x207,0x209,0x20B,0x20D,0x20F,0x211,0x213,0x215,0x217, - /* Greek, Coptic */ 0x3B1,0x3B2,0x3B3,0x3B4,0x3B5,0x3B6,0x3B7,0x3B8,0x3B9,0x3BA,0x3BB,0x3BC,0x3BD,0x3BE,0x3BF,0x3C0,0x3C1,0x3C3,0x3C4,0x3C5,0x3C6,0x3C7,0x3C8,0x3C9,0x3CA,0x3CB,0x3CC,0x3CD,0x3CE,0x3E3,0x3E5,0x3E7,0x3E9,0x3EB, - /* Cyrillic */ 0x430,0x431,0x432,0x433,0x434,0x435,0x436,0x437,0x438,0x439,0x43A,0x43B,0x43C,0x43D,0x43E,0x43F,0x440,0x441,0x442,0x443,0x444,0x445,0x446,0x447,0x448,0x449,0x44A,0x44B,0x44C,0x44D,0x44E,0x44F,0x452,0x453,0x454,0x455,0x456,0x457,0x458,0x459,0x45A,0x45B,0x45C,0x45E,0x45F,0x461,0x463,0x465,0x467,0x469,0x46B,0x46D,0x46F,0x471,0x473,0x475,0x477,0x479,0x47B,0x47D,0x47F,0x481,0x491,0x493,0x495,0x497,0x499,0x49B,0x49D,0x49F,0x4A1,0x4A3,0x4A5,0x4A7,0x4A9,0x4AB,0x4AD,0x4AF,0x4B1,0x4B3,0x4B5,0x4B7,0x4B9,0x4BB,0x4BD,0x4BF,0x4C2,0x4C4,0x4C8,0x4D1,0x4D3,0x4D5,0x4D7,0x4D9,0x4DB,0x4DD,0x4DF,0x4E1,0x4E3,0x4E5,0x4E7,0x4E9,0x4EB,0x4ED,0x4EF,0x4F1,0x4F3,0x4F5,0x4F9, - /* Armenian */ 0x561,0x562,0x563,0x564,0x565,0x566,0x567,0x568,0x569,0x56A,0x56B,0x56C,0x56D,0x56E,0x56F,0x570,0x571,0x572,0x573,0x574,0x575,0x576,0x577,0x578,0x579,0x57A,0x57B,0x57C,0x57D,0x57E,0x57F,0x580,0x581,0x582,0x583,0x584,0x585,0x586, - /* Latin Extended Additional */ 0x1E01,0x1E03,0x1E05,0x1E07,0x1E09,0x1E0B,0x1E0D,0x1E0F,0x1E11,0x1E13,0x1E15,0x1E17,0x1E19,0x1E1B,0x1E1D,0x1E1F,0x1E21,0x1E23,0x1E25,0x1E27,0x1E29,0x1E2B,0x1E2D,0x1E2F,0x1E31,0x1E33,0x1E35,0x1E37,0x1E39,0x1E3B,0x1E3D,0x1E3F,0x1E41,0x1E43,0x1E45,0x1E47,0x1E49,0x1E4B,0x1E4D,0x1E4F,0x1E51,0x1E53,0x1E55,0x1E57,0x1E59,0x1E5B,0x1E5D,0x1E5F,0x1E61,0x1E63,0x1E65,0x1E67,0x1E69,0x1E6B,0x1E6D,0x1E6F,0x1E71,0x1E73,0x1E75,0x1E77,0x1E79,0x1E7B,0x1E7D,0x1E7F,0x1E81,0x1E83,0x1E85,0x1E87,0x1E89,0x1E8B,0x1E8D,0x1E8F,0x1E91,0x1E93,0x1E95,0x1E97,0x1E99,0x1E9B,0x1E9D,0x1E9F,0x1EA1,0x1EA3,0x1EA5,0x1EA7,0x1EA9,0x1EAB,0x1EAD,0x1EAF,0x1EB1,0x1EB3,0x1EB5,0x1EB7,0x1EB9,0x1EBB,0x1EBD,0x1EBF,0x1EC1,0x1EC3,0x1EC5,0x1EC7,0x1EC9,0x1ECB,0x1ECD,0x1ECF,0x1ED1,0x1ED3,0x1ED5,0x1ED7,0x1ED9,0x1EDB,0x1EDD,0x1EDF,0x1EE1,0x1EE3,0x1EE5,0x1EE7,0x1EE9,0x1EEB,0x1EED,0x1EEF,0x1EF1,0x1EF3,0x1EF5,0x1EF7,0x1EF9, - /* Number forms */ 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178,0x2179,0x217A,0x217B,0x217C,0x217D,0x217E,0x217F, - /* Full-width */ 0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58,0xFF59,0xFF5A - }; - static const WCHAR upper[] = { /* Upper case characters correspond to lower[] */ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x178, - 0x100,0x102,0x104,0x106,0x108,0x10A,0x10C,0x10E,0x110,0x112,0x114,0x116,0x118,0x11A,0x11C,0x11E,0x120,0x122,0x124,0x126,0x128,0x12A,0x12C,0x12E,0x130,0x132,0x134,0x136,0x139,0x13B,0x13D,0x13F,0x141,0x143,0x145,0x147,0x14A,0x14C,0x14E,0x150,0x152,0x154,0x156,0x158,0x15A,0x15C,0x15E,0x160,0x162,0x164,0x166,0x168,0x16A,0x16C,0x16E,0x170,0x172,0x174,0x176,0x179,0x17B,0x17D, - 0x182,0x184,0x187,0x18B,0x191,0x198,0x1A0,0x1A2,0x1A7,0x1AC,0x1AF,0x1B3,0x1B5,0x1B8,0x1BC,0x1C4,0x1C7,0x1CA,0x1CD,0x1CF,0x1D1,0x1D3,0x1D5,0x1D7,0x1D9,0x1DB,0x18E,0x1DE,0x1E0,0x1E2,0x1E4,0x1E6,0x1E8,0x1EA,0x1EC,0x1EE,0x1F1,0x1F4,0x1FA,0x1FC,0x1FE,0x200,0x202,0x204,0x206,0x208,0x20A,0x20C,0x20E,0x210,0x212,0x214,0x216, - 0x391,0x392,0x393,0x394,0x395,0x396,0x397,0x398,0x399,0x39A,0x39B,0x39C,0x39D,0x39E,0x39F,0x3A0,0x3A1,0x3A3,0x3A4,0x3A5,0x3A6,0x3A7,0x3A8,0x3A9,0x3AA,0x3AB,0x38C,0x38E,0x38F,0x3E2,0x3E4,0x3E6,0x3E8,0x3EA, - 0x410,0x411,0x412,0x413,0x414,0x415,0x416,0x417,0x418,0x419,0x41A,0x41B,0x41C,0x41D,0x41E,0x41F,0x420,0x421,0x422,0x423,0x424,0x425,0x426,0x427,0x428,0x429,0x42A,0x42B,0x42C,0x42D,0x42E,0x42F,0x402,0x403,0x404,0x405,0x406,0x407,0x408,0x409,0x40A,0x40B,0x40C,0x40E,0x40F,0x460,0x462,0x464,0x466,0x468,0x46A,0x46C,0x46E,0x470,0x472,0x474,0x476,0x478,0x47A,0x47C,0x47E,0x480,0x490,0x492,0x494,0x496,0x498,0x49A,0x49C,0x49E,0x4A0,0x4A2,0x4A4,0x4A6,0x4A8,0x4AA,0x4AC,0x4AE,0x4B0,0x4B2,0x4B4,0x4B6,0x4B8,0x4BA,0x4BC,0x4BE,0x4C1,0x4C3,0x5C7,0x4D0,0x4D2,0x4D4,0x4D6,0x4D8,0x4DA,0x4DC,0x4DE,0x4E0,0x4E2,0x4E4,0x4E6,0x4E8,0x4EA,0x4EC,0x4EE,0x4F0,0x4F2,0x4F4,0x4F8, - 0x531,0x532,0x533,0x534,0x535,0x536,0x537,0x538,0x539,0x53A,0x53B,0x53C,0x53D,0x53E,0x53F,0x540,0x541,0x542,0x543,0x544,0x545,0x546,0x547,0x548,0x549,0x54A,0x54B,0x54C,0x54D,0x54E,0x54F,0x550,0x551,0x552,0x553,0x554,0x555,0x556, - 0x1E00,0x1E02,0x1E04,0x1E06,0x1E08,0x1E0A,0x1E0C,0x1E0E,0x1E10,0x1E12,0x1E14,0x1E16,0x1E18,0x1E1A,0x1E1C,0x1E1E,0x1E20,0x1E22,0x1E24,0x1E26,0x1E28,0x1E2A,0x1E2C,0x1E2E,0x1E30,0x1E32,0x1E34,0x1E36,0x1E38,0x1E3A,0x1E3C,0x1E3E,0x1E40,0x1E42,0x1E44,0x1E46,0x1E48,0x1E4A,0x1E4C,0x1E4E,0x1E50,0x1E52,0x1E54,0x1E56,0x1E58,0x1E5A,0x1E5C,0x1E5E,0x1E60,0x1E62,0x1E64,0x1E66,0x1E68,0x1E6A,0x1E6C,0x1E6E,0x1E70,0x1E72,0x1E74,0x1E76,0x1E78,0x1E7A,0x1E7C,0x1E7E,0x1E80,0x1E82,0x1E84,0x1E86,0x1E88,0x1E8A,0x1E8C,0x1E8E,0x1E90,0x1E92,0x1E94,0x1E96,0x1E98,0x1E9A,0x1E9C,0x1E9E,0x1EA0,0x1EA2,0x1EA4,0x1EA6,0x1EA8,0x1EAA,0x1EAC,0x1EAE,0x1EB0,0x1EB2,0x1EB4,0x1EB6,0x1EB8,0x1EBA,0x1EBC,0x1EBE,0x1EC0,0x1EC2,0x1EC4,0x1EC6,0x1EC8,0x1ECA,0x1ECC,0x1ECE,0x1ED0,0x1ED2,0x1ED4,0x1ED6,0x1ED8,0x1EDA,0x1EDC,0x1EDE,0x1EE0,0x1EE2,0x1EE4,0x1EE6,0x1EE8,0x1EEA,0x1EEC,0x1EEE,0x1EF0,0x1EF2,0x1EF4,0x1EF6,0x1EF8, - 0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x216A,0x216B,0x216C,0x216D,0x216E,0x216F, - 0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,0xFF3A - }; - UINT i, n, hi, li; - - - if (chr < 0x80) { /* ASCII characters (acceleration) */ - if (chr >= 0x61 && chr <= 0x7A) chr -= 0x20; - - } else { /* Extended characters */ - n = 12; li = 0; hi = sizeof lower / sizeof lower[0]; - do { - i = li + (hi - li) / 2; - if (chr == lower[i]) break; - if (chr > lower[i]) li = i; else hi = i; - } while (--n); - if (n) chr = upper[i]; - } - - return chr; -} - diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/cc949.c b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/cc949.c deleted file mode 100644 index 0d94566..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/cc949.c +++ /dev/null @@ -1,8634 +0,0 @@ -/*------------------------------------------------------------------------*/ -/* Unicode - OEM code bidirectional converter (C)ChaN, 2015 */ -/* CP949 (Korean EUC-KR) */ -/*------------------------------------------------------------------------*/ - -#include "ff.h" - - -#if !_USE_LFN || _CODE_PAGE != 949 -#error This file is not needed in current configuration. Remove from the project. -#endif - - -static -const WCHAR uni2oem[] = { -/* Unicode - OEM, Unicode - OEM, Unicode - OEM, Unicode - OEM */ - 0x00A1, 0xA2AE, 0x00A4, 0xA2B4, 0x00A7, 0xA1D7, 0x00A8, 0xA1A7, - 0x00AA, 0xA8A3, 0x00AD, 0xA1A9, 0x00AE, 0xA2E7, 0x00B0, 0xA1C6, - 0x00B1, 0xA1BE, 0x00B2, 0xA9F7, 0x00B3, 0xA9F8, 0x00B4, 0xA2A5, - 0x00B6, 0xA2D2, 0x00B7, 0xA1A4, 0x00B8, 0xA2AC, 0x00B9, 0xA9F6, - 0x00BA, 0xA8AC, 0x00BC, 0xA8F9, 0x00BD, 0xA8F6, 0x00BE, 0xA8FA, - 0x00BF, 0xA2AF, 0x00C6, 0xA8A1, 0x00D0, 0xA8A2, 0x00D7, 0xA1BF, - 0x00D8, 0xA8AA, 0x00DE, 0xA8AD, 0x00DF, 0xA9AC, 0x00E6, 0xA9A1, - 0x00F0, 0xA9A3, 0x00F7, 0xA1C0, 0x00F8, 0xA9AA, 0x00FE, 0xA9AD, - 0x0111, 0xA9A2, 0x0126, 0xA8A4, 0x0127, 0xA9A4, 0x0131, 0xA9A5, - 0x0132, 0xA8A6, 0x0133, 0xA9A6, 0x0138, 0xA9A7, 0x013F, 0xA8A8, - 0x0140, 0xA9A8, 0x0141, 0xA8A9, 0x0142, 0xA9A9, 0x0149, 0xA9B0, - 0x014A, 0xA8AF, 0x014B, 0xA9AF, 0x0152, 0xA8AB, 0x0153, 0xA9AB, - 0x0166, 0xA8AE, 0x0167, 0xA9AE, 0x02C7, 0xA2A7, 0x02D0, 0xA2B0, - 0x02D8, 0xA2A8, 0x02D9, 0xA2AB, 0x02DA, 0xA2AA, 0x02DB, 0xA2AD, - 0x02DD, 0xA2A9, 0x0391, 0xA5C1, 0x0392, 0xA5C2, 0x0393, 0xA5C3, - 0x0394, 0xA5C4, 0x0395, 0xA5C5, 0x0396, 0xA5C6, 0x0397, 0xA5C7, - 0x0398, 0xA5C8, 0x0399, 0xA5C9, 0x039A, 0xA5CA, 0x039B, 0xA5CB, - 0x039C, 0xA5CC, 0x039D, 0xA5CD, 0x039E, 0xA5CE, 0x039F, 0xA5CF, - 0x03A0, 0xA5D0, 0x03A1, 0xA5D1, 0x03A3, 0xA5D2, 0x03A4, 0xA5D3, - 0x03A5, 0xA5D4, 0x03A6, 0xA5D5, 0x03A7, 0xA5D6, 0x03A8, 0xA5D7, - 0x03A9, 0xA5D8, 0x03B1, 0xA5E1, 0x03B2, 0xA5E2, 0x03B3, 0xA5E3, - 0x03B4, 0xA5E4, 0x03B5, 0xA5E5, 0x03B6, 0xA5E6, 0x03B7, 0xA5E7, - 0x03B8, 0xA5E8, 0x03B9, 0xA5E9, 0x03BA, 0xA5EA, 0x03BB, 0xA5EB, - 0x03BC, 0xA5EC, 0x03BD, 0xA5ED, 0x03BE, 0xA5EE, 0x03BF, 0xA5EF, - 0x03C0, 0xA5F0, 0x03C1, 0xA5F1, 0x03C3, 0xA5F2, 0x03C4, 0xA5F3, - 0x03C5, 0xA5F4, 0x03C6, 0xA5F5, 0x03C7, 0xA5F6, 0x03C8, 0xA5F7, - 0x03C9, 0xA5F8, 0x0401, 0xACA7, 0x0410, 0xACA1, 0x0411, 0xACA2, - 0x0412, 0xACA3, 0x0413, 0xACA4, 0x0414, 0xACA5, 0x0415, 0xACA6, - 0x0416, 0xACA8, 0x0417, 0xACA9, 0x0418, 0xACAA, 0x0419, 0xACAB, - 0x041A, 0xACAC, 0x041B, 0xACAD, 0x041C, 0xACAE, 0x041D, 0xACAF, - 0x041E, 0xACB0, 0x041F, 0xACB1, 0x0420, 0xACB2, 0x0421, 0xACB3, - 0x0422, 0xACB4, 0x0423, 0xACB5, 0x0424, 0xACB6, 0x0425, 0xACB7, - 0x0426, 0xACB8, 0x0427, 0xACB9, 0x0428, 0xACBA, 0x0429, 0xACBB, - 0x042A, 0xACBC, 0x042B, 0xACBD, 0x042C, 0xACBE, 0x042D, 0xACBF, - 0x042E, 0xACC0, 0x042F, 0xACC1, 0x0430, 0xACD1, 0x0431, 0xACD2, - 0x0432, 0xACD3, 0x0433, 0xACD4, 0x0434, 0xACD5, 0x0435, 0xACD6, - 0x0436, 0xACD8, 0x0437, 0xACD9, 0x0438, 0xACDA, 0x0439, 0xACDB, - 0x043A, 0xACDC, 0x043B, 0xACDD, 0x043C, 0xACDE, 0x043D, 0xACDF, - 0x043E, 0xACE0, 0x043F, 0xACE1, 0x0440, 0xACE2, 0x0441, 0xACE3, - 0x0442, 0xACE4, 0x0443, 0xACE5, 0x0444, 0xACE6, 0x0445, 0xACE7, - 0x0446, 0xACE8, 0x0447, 0xACE9, 0x0448, 0xACEA, 0x0449, 0xACEB, - 0x044A, 0xACEC, 0x044B, 0xACED, 0x044C, 0xACEE, 0x044D, 0xACEF, - 0x044E, 0xACF0, 0x044F, 0xACF1, 0x0451, 0xACD7, 0x2015, 0xA1AA, - 0x2018, 0xA1AE, 0x2019, 0xA1AF, 0x201C, 0xA1B0, 0x201D, 0xA1B1, - 0x2020, 0xA2D3, 0x2021, 0xA2D4, 0x2025, 0xA1A5, 0x2026, 0xA1A6, - 0x2030, 0xA2B6, 0x2032, 0xA1C7, 0x2033, 0xA1C8, 0x203B, 0xA1D8, - 0x2074, 0xA9F9, 0x207F, 0xA9FA, 0x2081, 0xA9FB, 0x2082, 0xA9FC, - 0x2083, 0xA9FD, 0x2084, 0xA9FE, 0x20AC, 0xA2E6, 0x2103, 0xA1C9, - 0x2109, 0xA2B5, 0x2113, 0xA7A4, 0x2116, 0xA2E0, 0x2121, 0xA2E5, - 0x2122, 0xA2E2, 0x2126, 0xA7D9, 0x212B, 0xA1CA, 0x2153, 0xA8F7, - 0x2154, 0xA8F8, 0x215B, 0xA8FB, 0x215C, 0xA8FC, 0x215D, 0xA8FD, - 0x215E, 0xA8FE, 0x2160, 0xA5B0, 0x2161, 0xA5B1, 0x2162, 0xA5B2, - 0x2163, 0xA5B3, 0x2164, 0xA5B4, 0x2165, 0xA5B5, 0x2166, 0xA5B6, - 0x2167, 0xA5B7, 0x2168, 0xA5B8, 0x2169, 0xA5B9, 0x2170, 0xA5A1, - 0x2171, 0xA5A2, 0x2172, 0xA5A3, 0x2173, 0xA5A4, 0x2174, 0xA5A5, - 0x2175, 0xA5A6, 0x2176, 0xA5A7, 0x2177, 0xA5A8, 0x2178, 0xA5A9, - 0x2179, 0xA5AA, 0x2190, 0xA1E7, 0x2191, 0xA1E8, 0x2192, 0xA1E6, - 0x2193, 0xA1E9, 0x2194, 0xA1EA, 0x2195, 0xA2D5, 0x2196, 0xA2D8, - 0x2197, 0xA2D6, 0x2198, 0xA2D9, 0x2199, 0xA2D7, 0x21D2, 0xA2A1, - 0x21D4, 0xA2A2, 0x2200, 0xA2A3, 0x2202, 0xA1D3, 0x2203, 0xA2A4, - 0x2207, 0xA1D4, 0x2208, 0xA1F4, 0x220B, 0xA1F5, 0x220F, 0xA2B3, - 0x2211, 0xA2B2, 0x221A, 0xA1EE, 0x221D, 0xA1F0, 0x221E, 0xA1C4, - 0x2220, 0xA1D0, 0x2225, 0xA1AB, 0x2227, 0xA1FC, 0x2228, 0xA1FD, - 0x2229, 0xA1FB, 0x222A, 0xA1FA, 0x222B, 0xA1F2, 0x222C, 0xA1F3, - 0x222E, 0xA2B1, 0x2234, 0xA1C5, 0x2235, 0xA1F1, 0x223C, 0xA1AD, - 0x223D, 0xA1EF, 0x2252, 0xA1D6, 0x2260, 0xA1C1, 0x2261, 0xA1D5, - 0x2264, 0xA1C2, 0x2265, 0xA1C3, 0x226A, 0xA1EC, 0x226B, 0xA1ED, - 0x2282, 0xA1F8, 0x2283, 0xA1F9, 0x2286, 0xA1F6, 0x2287, 0xA1F7, - 0x2299, 0xA2C1, 0x22A5, 0xA1D1, 0x2312, 0xA1D2, 0x2460, 0xA8E7, - 0x2461, 0xA8E8, 0x2462, 0xA8E9, 0x2463, 0xA8EA, 0x2464, 0xA8EB, - 0x2465, 0xA8EC, 0x2466, 0xA8ED, 0x2467, 0xA8EE, 0x2468, 0xA8EF, - 0x2469, 0xA8F0, 0x246A, 0xA8F1, 0x246B, 0xA8F2, 0x246C, 0xA8F3, - 0x246D, 0xA8F4, 0x246E, 0xA8F5, 0x2474, 0xA9E7, 0x2475, 0xA9E8, - 0x2476, 0xA9E9, 0x2477, 0xA9EA, 0x2478, 0xA9EB, 0x2479, 0xA9EC, - 0x247A, 0xA9ED, 0x247B, 0xA9EE, 0x247C, 0xA9EF, 0x247D, 0xA9F0, - 0x247E, 0xA9F1, 0x247F, 0xA9F2, 0x2480, 0xA9F3, 0x2481, 0xA9F4, - 0x2482, 0xA9F5, 0x249C, 0xA9CD, 0x249D, 0xA9CE, 0x249E, 0xA9CF, - 0x249F, 0xA9D0, 0x24A0, 0xA9D1, 0x24A1, 0xA9D2, 0x24A2, 0xA9D3, - 0x24A3, 0xA9D4, 0x24A4, 0xA9D5, 0x24A5, 0xA9D6, 0x24A6, 0xA9D7, - 0x24A7, 0xA9D8, 0x24A8, 0xA9D9, 0x24A9, 0xA9DA, 0x24AA, 0xA9DB, - 0x24AB, 0xA9DC, 0x24AC, 0xA9DD, 0x24AD, 0xA9DE, 0x24AE, 0xA9DF, - 0x24AF, 0xA9E0, 0x24B0, 0xA9E1, 0x24B1, 0xA9E2, 0x24B2, 0xA9E3, - 0x24B3, 0xA9E4, 0x24B4, 0xA9E5, 0x24B5, 0xA9E6, 0x24D0, 0xA8CD, - 0x24D1, 0xA8CE, 0x24D2, 0xA8CF, 0x24D3, 0xA8D0, 0x24D4, 0xA8D1, - 0x24D5, 0xA8D2, 0x24D6, 0xA8D3, 0x24D7, 0xA8D4, 0x24D8, 0xA8D5, - 0x24D9, 0xA8D6, 0x24DA, 0xA8D7, 0x24DB, 0xA8D8, 0x24DC, 0xA8D9, - 0x24DD, 0xA8DA, 0x24DE, 0xA8DB, 0x24DF, 0xA8DC, 0x24E0, 0xA8DD, - 0x24E1, 0xA8DE, 0x24E2, 0xA8DF, 0x24E3, 0xA8E0, 0x24E4, 0xA8E1, - 0x24E5, 0xA8E2, 0x24E6, 0xA8E3, 0x24E7, 0xA8E4, 0x24E8, 0xA8E5, - 0x24E9, 0xA8E6, 0x2500, 0xA6A1, 0x2501, 0xA6AC, 0x2502, 0xA6A2, - 0x2503, 0xA6AD, 0x250C, 0xA6A3, 0x250D, 0xA6C8, 0x250E, 0xA6C7, - 0x250F, 0xA6AE, 0x2510, 0xA6A4, 0x2511, 0xA6C2, 0x2512, 0xA6C1, - 0x2513, 0xA6AF, 0x2514, 0xA6A6, 0x2515, 0xA6C6, 0x2516, 0xA6C5, - 0x2517, 0xA6B1, 0x2518, 0xA6A5, 0x2519, 0xA6C4, 0x251A, 0xA6C3, - 0x251B, 0xA6B0, 0x251C, 0xA6A7, 0x251D, 0xA6BC, 0x251E, 0xA6C9, - 0x251F, 0xA6CA, 0x2520, 0xA6B7, 0x2521, 0xA6CB, 0x2522, 0xA6CC, - 0x2523, 0xA6B2, 0x2524, 0xA6A9, 0x2525, 0xA6BE, 0x2526, 0xA6CD, - 0x2527, 0xA6CE, 0x2528, 0xA6B9, 0x2529, 0xA6CF, 0x252A, 0xA6D0, - 0x252B, 0xA6B4, 0x252C, 0xA6A8, 0x252D, 0xA6D1, 0x252E, 0xA6D2, - 0x252F, 0xA6B8, 0x2530, 0xA6BD, 0x2531, 0xA6D3, 0x2532, 0xA6D4, - 0x2533, 0xA6B3, 0x2534, 0xA6AA, 0x2535, 0xA6D5, 0x2536, 0xA6D6, - 0x2537, 0xA6BA, 0x2538, 0xA6BF, 0x2539, 0xA6D7, 0x253A, 0xA6D8, - 0x253B, 0xA6B5, 0x253C, 0xA6AB, 0x253D, 0xA6D9, 0x253E, 0xA6DA, - 0x253F, 0xA6BB, 0x2540, 0xA6DB, 0x2541, 0xA6DC, 0x2542, 0xA6C0, - 0x2543, 0xA6DD, 0x2544, 0xA6DE, 0x2545, 0xA6DF, 0x2546, 0xA6E0, - 0x2547, 0xA6E1, 0x2548, 0xA6E2, 0x2549, 0xA6E3, 0x254A, 0xA6E4, - 0x254B, 0xA6B6, 0x2592, 0xA2C6, 0x25A0, 0xA1E1, 0x25A1, 0xA1E0, - 0x25A3, 0xA2C3, 0x25A4, 0xA2C7, 0x25A5, 0xA2C8, 0x25A6, 0xA2CB, - 0x25A7, 0xA2CA, 0x25A8, 0xA2C9, 0x25A9, 0xA2CC, 0x25B2, 0xA1E3, - 0x25B3, 0xA1E2, 0x25B6, 0xA2BA, 0x25B7, 0xA2B9, 0x25BC, 0xA1E5, - 0x25BD, 0xA1E4, 0x25C0, 0xA2B8, 0x25C1, 0xA2B7, 0x25C6, 0xA1DF, - 0x25C7, 0xA1DE, 0x25C8, 0xA2C2, 0x25CB, 0xA1DB, 0x25CE, 0xA1DD, - 0x25CF, 0xA1DC, 0x25D0, 0xA2C4, 0x25D1, 0xA2C5, 0x2605, 0xA1DA, - 0x2606, 0xA1D9, 0x260E, 0xA2CF, 0x260F, 0xA2CE, 0x261C, 0xA2D0, - 0x261E, 0xA2D1, 0x2640, 0xA1CF, 0x2642, 0xA1CE, 0x2660, 0xA2BC, - 0x2661, 0xA2BD, 0x2663, 0xA2C0, 0x2664, 0xA2BB, 0x2665, 0xA2BE, - 0x2667, 0xA2BF, 0x2668, 0xA2CD, 0x2669, 0xA2DB, 0x266A, 0xA2DC, - 0x266C, 0xA2DD, 0x266D, 0xA2DA, 0x3000, 0xA1A1, 0x3001, 0xA1A2, - 0x3002, 0xA1A3, 0x3003, 0xA1A8, 0x3008, 0xA1B4, 0x3009, 0xA1B5, - 0x300A, 0xA1B6, 0x300B, 0xA1B7, 0x300C, 0xA1B8, 0x300D, 0xA1B9, - 0x300E, 0xA1BA, 0x300F, 0xA1BB, 0x3010, 0xA1BC, 0x3011, 0xA1BD, - 0x3013, 0xA1EB, 0x3014, 0xA1B2, 0x3015, 0xA1B3, 0x3041, 0xAAA1, - 0x3042, 0xAAA2, 0x3043, 0xAAA3, 0x3044, 0xAAA4, 0x3045, 0xAAA5, - 0x3046, 0xAAA6, 0x3047, 0xAAA7, 0x3048, 0xAAA8, 0x3049, 0xAAA9, - 0x304A, 0xAAAA, 0x304B, 0xAAAB, 0x304C, 0xAAAC, 0x304D, 0xAAAD, - 0x304E, 0xAAAE, 0x304F, 0xAAAF, 0x3050, 0xAAB0, 0x3051, 0xAAB1, - 0x3052, 0xAAB2, 0x3053, 0xAAB3, 0x3054, 0xAAB4, 0x3055, 0xAAB5, - 0x3056, 0xAAB6, 0x3057, 0xAAB7, 0x3058, 0xAAB8, 0x3059, 0xAAB9, - 0x305A, 0xAABA, 0x305B, 0xAABB, 0x305C, 0xAABC, 0x305D, 0xAABD, - 0x305E, 0xAABE, 0x305F, 0xAABF, 0x3060, 0xAAC0, 0x3061, 0xAAC1, - 0x3062, 0xAAC2, 0x3063, 0xAAC3, 0x3064, 0xAAC4, 0x3065, 0xAAC5, - 0x3066, 0xAAC6, 0x3067, 0xAAC7, 0x3068, 0xAAC8, 0x3069, 0xAAC9, - 0x306A, 0xAACA, 0x306B, 0xAACB, 0x306C, 0xAACC, 0x306D, 0xAACD, - 0x306E, 0xAACE, 0x306F, 0xAACF, 0x3070, 0xAAD0, 0x3071, 0xAAD1, - 0x3072, 0xAAD2, 0x3073, 0xAAD3, 0x3074, 0xAAD4, 0x3075, 0xAAD5, - 0x3076, 0xAAD6, 0x3077, 0xAAD7, 0x3078, 0xAAD8, 0x3079, 0xAAD9, - 0x307A, 0xAADA, 0x307B, 0xAADB, 0x307C, 0xAADC, 0x307D, 0xAADD, - 0x307E, 0xAADE, 0x307F, 0xAADF, 0x3080, 0xAAE0, 0x3081, 0xAAE1, - 0x3082, 0xAAE2, 0x3083, 0xAAE3, 0x3084, 0xAAE4, 0x3085, 0xAAE5, - 0x3086, 0xAAE6, 0x3087, 0xAAE7, 0x3088, 0xAAE8, 0x3089, 0xAAE9, - 0x308A, 0xAAEA, 0x308B, 0xAAEB, 0x308C, 0xAAEC, 0x308D, 0xAAED, - 0x308E, 0xAAEE, 0x308F, 0xAAEF, 0x3090, 0xAAF0, 0x3091, 0xAAF1, - 0x3092, 0xAAF2, 0x3093, 0xAAF3, 0x30A1, 0xABA1, 0x30A2, 0xABA2, - 0x30A3, 0xABA3, 0x30A4, 0xABA4, 0x30A5, 0xABA5, 0x30A6, 0xABA6, - 0x30A7, 0xABA7, 0x30A8, 0xABA8, 0x30A9, 0xABA9, 0x30AA, 0xABAA, - 0x30AB, 0xABAB, 0x30AC, 0xABAC, 0x30AD, 0xABAD, 0x30AE, 0xABAE, - 0x30AF, 0xABAF, 0x30B0, 0xABB0, 0x30B1, 0xABB1, 0x30B2, 0xABB2, - 0x30B3, 0xABB3, 0x30B4, 0xABB4, 0x30B5, 0xABB5, 0x30B6, 0xABB6, - 0x30B7, 0xABB7, 0x30B8, 0xABB8, 0x30B9, 0xABB9, 0x30BA, 0xABBA, - 0x30BB, 0xABBB, 0x30BC, 0xABBC, 0x30BD, 0xABBD, 0x30BE, 0xABBE, - 0x30BF, 0xABBF, 0x30C0, 0xABC0, 0x30C1, 0xABC1, 0x30C2, 0xABC2, - 0x30C3, 0xABC3, 0x30C4, 0xABC4, 0x30C5, 0xABC5, 0x30C6, 0xABC6, - 0x30C7, 0xABC7, 0x30C8, 0xABC8, 0x30C9, 0xABC9, 0x30CA, 0xABCA, - 0x30CB, 0xABCB, 0x30CC, 0xABCC, 0x30CD, 0xABCD, 0x30CE, 0xABCE, - 0x30CF, 0xABCF, 0x30D0, 0xABD0, 0x30D1, 0xABD1, 0x30D2, 0xABD2, - 0x30D3, 0xABD3, 0x30D4, 0xABD4, 0x30D5, 0xABD5, 0x30D6, 0xABD6, - 0x30D7, 0xABD7, 0x30D8, 0xABD8, 0x30D9, 0xABD9, 0x30DA, 0xABDA, - 0x30DB, 0xABDB, 0x30DC, 0xABDC, 0x30DD, 0xABDD, 0x30DE, 0xABDE, - 0x30DF, 0xABDF, 0x30E0, 0xABE0, 0x30E1, 0xABE1, 0x30E2, 0xABE2, - 0x30E3, 0xABE3, 0x30E4, 0xABE4, 0x30E5, 0xABE5, 0x30E6, 0xABE6, - 0x30E7, 0xABE7, 0x30E8, 0xABE8, 0x30E9, 0xABE9, 0x30EA, 0xABEA, - 0x30EB, 0xABEB, 0x30EC, 0xABEC, 0x30ED, 0xABED, 0x30EE, 0xABEE, - 0x30EF, 0xABEF, 0x30F0, 0xABF0, 0x30F1, 0xABF1, 0x30F2, 0xABF2, - 0x30F3, 0xABF3, 0x30F4, 0xABF4, 0x30F5, 0xABF5, 0x30F6, 0xABF6, - 0x3131, 0xA4A1, 0x3132, 0xA4A2, 0x3133, 0xA4A3, 0x3134, 0xA4A4, - 0x3135, 0xA4A5, 0x3136, 0xA4A6, 0x3137, 0xA4A7, 0x3138, 0xA4A8, - 0x3139, 0xA4A9, 0x313A, 0xA4AA, 0x313B, 0xA4AB, 0x313C, 0xA4AC, - 0x313D, 0xA4AD, 0x313E, 0xA4AE, 0x313F, 0xA4AF, 0x3140, 0xA4B0, - 0x3141, 0xA4B1, 0x3142, 0xA4B2, 0x3143, 0xA4B3, 0x3144, 0xA4B4, - 0x3145, 0xA4B5, 0x3146, 0xA4B6, 0x3147, 0xA4B7, 0x3148, 0xA4B8, - 0x3149, 0xA4B9, 0x314A, 0xA4BA, 0x314B, 0xA4BB, 0x314C, 0xA4BC, - 0x314D, 0xA4BD, 0x314E, 0xA4BE, 0x314F, 0xA4BF, 0x3150, 0xA4C0, - 0x3151, 0xA4C1, 0x3152, 0xA4C2, 0x3153, 0xA4C3, 0x3154, 0xA4C4, - 0x3155, 0xA4C5, 0x3156, 0xA4C6, 0x3157, 0xA4C7, 0x3158, 0xA4C8, - 0x3159, 0xA4C9, 0x315A, 0xA4CA, 0x315B, 0xA4CB, 0x315C, 0xA4CC, - 0x315D, 0xA4CD, 0x315E, 0xA4CE, 0x315F, 0xA4CF, 0x3160, 0xA4D0, - 0x3161, 0xA4D1, 0x3162, 0xA4D2, 0x3163, 0xA4D3, 0x3164, 0xA4D4, - 0x3165, 0xA4D5, 0x3166, 0xA4D6, 0x3167, 0xA4D7, 0x3168, 0xA4D8, - 0x3169, 0xA4D9, 0x316A, 0xA4DA, 0x316B, 0xA4DB, 0x316C, 0xA4DC, - 0x316D, 0xA4DD, 0x316E, 0xA4DE, 0x316F, 0xA4DF, 0x3170, 0xA4E0, - 0x3171, 0xA4E1, 0x3172, 0xA4E2, 0x3173, 0xA4E3, 0x3174, 0xA4E4, - 0x3175, 0xA4E5, 0x3176, 0xA4E6, 0x3177, 0xA4E7, 0x3178, 0xA4E8, - 0x3179, 0xA4E9, 0x317A, 0xA4EA, 0x317B, 0xA4EB, 0x317C, 0xA4EC, - 0x317D, 0xA4ED, 0x317E, 0xA4EE, 0x317F, 0xA4EF, 0x3180, 0xA4F0, - 0x3181, 0xA4F1, 0x3182, 0xA4F2, 0x3183, 0xA4F3, 0x3184, 0xA4F4, - 0x3185, 0xA4F5, 0x3186, 0xA4F6, 0x3187, 0xA4F7, 0x3188, 0xA4F8, - 0x3189, 0xA4F9, 0x318A, 0xA4FA, 0x318B, 0xA4FB, 0x318C, 0xA4FC, - 0x318D, 0xA4FD, 0x318E, 0xA4FE, 0x3200, 0xA9B1, 0x3201, 0xA9B2, - 0x3202, 0xA9B3, 0x3203, 0xA9B4, 0x3204, 0xA9B5, 0x3205, 0xA9B6, - 0x3206, 0xA9B7, 0x3207, 0xA9B8, 0x3208, 0xA9B9, 0x3209, 0xA9BA, - 0x320A, 0xA9BB, 0x320B, 0xA9BC, 0x320C, 0xA9BD, 0x320D, 0xA9BE, - 0x320E, 0xA9BF, 0x320F, 0xA9C0, 0x3210, 0xA9C1, 0x3211, 0xA9C2, - 0x3212, 0xA9C3, 0x3213, 0xA9C4, 0x3214, 0xA9C5, 0x3215, 0xA9C6, - 0x3216, 0xA9C7, 0x3217, 0xA9C8, 0x3218, 0xA9C9, 0x3219, 0xA9CA, - 0x321A, 0xA9CB, 0x321B, 0xA9CC, 0x321C, 0xA2DF, 0x3260, 0xA8B1, - 0x3261, 0xA8B2, 0x3262, 0xA8B3, 0x3263, 0xA8B4, 0x3264, 0xA8B5, - 0x3265, 0xA8B6, 0x3266, 0xA8B7, 0x3267, 0xA8B8, 0x3268, 0xA8B9, - 0x3269, 0xA8BA, 0x326A, 0xA8BB, 0x326B, 0xA8BC, 0x326C, 0xA8BD, - 0x326D, 0xA8BE, 0x326E, 0xA8BF, 0x326F, 0xA8C0, 0x3270, 0xA8C1, - 0x3271, 0xA8C2, 0x3272, 0xA8C3, 0x3273, 0xA8C4, 0x3274, 0xA8C5, - 0x3275, 0xA8C6, 0x3276, 0xA8C7, 0x3277, 0xA8C8, 0x3278, 0xA8C9, - 0x3279, 0xA8CA, 0x327A, 0xA8CB, 0x327B, 0xA8CC, 0x327F, 0xA2DE, - 0x3380, 0xA7C9, 0x3381, 0xA7CA, 0x3382, 0xA7CB, 0x3383, 0xA7CC, - 0x3384, 0xA7CD, 0x3388, 0xA7BA, 0x3389, 0xA7BB, 0x338A, 0xA7DC, - 0x338B, 0xA7DD, 0x338C, 0xA7DE, 0x338D, 0xA7B6, 0x338E, 0xA7B7, - 0x338F, 0xA7B8, 0x3390, 0xA7D4, 0x3391, 0xA7D5, 0x3392, 0xA7D6, - 0x3393, 0xA7D7, 0x3394, 0xA7D8, 0x3395, 0xA7A1, 0x3396, 0xA7A2, - 0x3397, 0xA7A3, 0x3398, 0xA7A5, 0x3399, 0xA7AB, 0x339A, 0xA7AC, - 0x339B, 0xA7AD, 0x339C, 0xA7AE, 0x339D, 0xA7AF, 0x339E, 0xA7B0, - 0x339F, 0xA7B1, 0x33A0, 0xA7B2, 0x33A1, 0xA7B3, 0x33A2, 0xA7B4, - 0x33A3, 0xA7A7, 0x33A4, 0xA7A8, 0x33A5, 0xA7A9, 0x33A6, 0xA7AA, - 0x33A7, 0xA7BD, 0x33A8, 0xA7BE, 0x33A9, 0xA7E5, 0x33AA, 0xA7E6, - 0x33AB, 0xA7E7, 0x33AC, 0xA7E8, 0x33AD, 0xA7E1, 0x33AE, 0xA7E2, - 0x33AF, 0xA7E3, 0x33B0, 0xA7BF, 0x33B1, 0xA7C0, 0x33B2, 0xA7C1, - 0x33B3, 0xA7C2, 0x33B4, 0xA7C3, 0x33B5, 0xA7C4, 0x33B6, 0xA7C5, - 0x33B7, 0xA7C6, 0x33B8, 0xA7C7, 0x33B9, 0xA7C8, 0x33BA, 0xA7CE, - 0x33BB, 0xA7CF, 0x33BC, 0xA7D0, 0x33BD, 0xA7D1, 0x33BE, 0xA7D2, - 0x33BF, 0xA7D3, 0x33C0, 0xA7DA, 0x33C1, 0xA7DB, 0x33C2, 0xA2E3, - 0x33C3, 0xA7EC, 0x33C4, 0xA7A6, 0x33C5, 0xA7E0, 0x33C6, 0xA7EF, - 0x33C7, 0xA2E1, 0x33C8, 0xA7BC, 0x33C9, 0xA7ED, 0x33CA, 0xA7B5, - 0x33CF, 0xA7B9, 0x33D0, 0xA7EA, 0x33D3, 0xA7EB, 0x33D6, 0xA7DF, - 0x33D8, 0xA2E4, 0x33DB, 0xA7E4, 0x33DC, 0xA7EE, 0x33DD, 0xA7E9, - 0x4E00, 0xECE9, 0x4E01, 0xEFCB, 0x4E03, 0xF6D2, 0x4E07, 0xD8B2, - 0x4E08, 0xEDDB, 0x4E09, 0xDFB2, 0x4E0A, 0xDFBE, 0x4E0B, 0xF9BB, - 0x4E0D, 0xDCF4, 0x4E11, 0xF5E4, 0x4E14, 0xF3A6, 0x4E15, 0xDDE0, - 0x4E16, 0xE1A6, 0x4E18, 0xCEF8, 0x4E19, 0xDCB0, 0x4E1E, 0xE3AA, - 0x4E2D, 0xF1E9, 0x4E32, 0xCDFA, 0x4E38, 0xFCAF, 0x4E39, 0xD3A1, - 0x4E3B, 0xF1AB, 0x4E42, 0xE7D1, 0x4E43, 0xD2AC, 0x4E45, 0xCEF9, - 0x4E4B, 0xF1FD, 0x4E4D, 0xDEBF, 0x4E4E, 0xFBBA, 0x4E4F, 0xF9B9, - 0x4E56, 0xCED2, 0x4E58, 0xE3AB, 0x4E59, 0xEBE0, 0x4E5D, 0xCEFA, - 0x4E5E, 0xCBF7, 0x4E5F, 0xE5A5, 0x4E6B, 0xCAE1, 0x4E6D, 0xD4CC, - 0x4E73, 0xEAE1, 0x4E76, 0xDCE3, 0x4E77, 0xDFAD, 0x4E7E, 0xCBEB, - 0x4E82, 0xD5AF, 0x4E86, 0xD6F5, 0x4E88, 0xE5F8, 0x4E8B, 0xDEC0, - 0x4E8C, 0xECA3, 0x4E8E, 0xE9CD, 0x4E90, 0xEAA7, 0x4E91, 0xE9F6, - 0x4E92, 0xFBBB, 0x4E94, 0xE7E9, 0x4E95, 0xEFCC, 0x4E98, 0xD0E6, - 0x4E9B, 0xDEC1, 0x4E9E, 0xE4AC, 0x4EA1, 0xD8CC, 0x4EA2, 0xF9F1, - 0x4EA4, 0xCEDF, 0x4EA5, 0xFAA4, 0x4EA6, 0xE6B2, 0x4EA8, 0xFAFB, - 0x4EAB, 0xFABD, 0x4EAC, 0xCCC8, 0x4EAD, 0xEFCD, 0x4EAE, 0xD5D5, - 0x4EB6, 0xD3A2, 0x4EBA, 0xECD1, 0x4EC0, 0xE4A7, 0x4EC1, 0xECD2, - 0x4EC4, 0xF6B1, 0x4EC7, 0xCEFB, 0x4ECA, 0xD0D1, 0x4ECB, 0xCBBF, - 0x4ECD, 0xEDA4, 0x4ED4, 0xEDA8, 0x4ED5, 0xDEC2, 0x4ED6, 0xF6E2, - 0x4ED7, 0xEDDC, 0x4ED8, 0xDCF5, 0x4ED9, 0xE0B9, 0x4EDD, 0xD4CE, - 0x4EDF, 0xF4B5, 0x4EE3, 0xD3DB, 0x4EE4, 0xD6B5, 0x4EE5, 0xECA4, - 0x4EF0, 0xE4E6, 0x4EF2, 0xF1EA, 0x4EF6, 0xCBEC, 0x4EF7, 0xCBC0, - 0x4EFB, 0xECF2, 0x4F01, 0xD0EA, 0x4F09, 0xF9F2, 0x4F0A, 0xECA5, - 0x4F0B, 0xD0DF, 0x4F0D, 0xE7EA, 0x4F0E, 0xD0EB, 0x4F0F, 0xDCD1, - 0x4F10, 0xDBE9, 0x4F11, 0xFDCC, 0x4F2F, 0xDBD7, 0x4F34, 0xDAE1, - 0x4F36, 0xD6B6, 0x4F38, 0xE3DF, 0x4F3A, 0xDEC3, 0x4F3C, 0xDEC4, - 0x4F3D, 0xCAA1, 0x4F43, 0xEEEC, 0x4F46, 0xD3A3, 0x4F47, 0xEEB7, - 0x4F48, 0xF8CF, 0x4F4D, 0xEAC8, 0x4F4E, 0xEEB8, 0x4F4F, 0xF1AC, - 0x4F50, 0xF1A5, 0x4F51, 0xE9CE, 0x4F55, 0xF9BC, 0x4F59, 0xE5F9, - 0x4F5A, 0xECEA, 0x4F5B, 0xDDD6, 0x4F5C, 0xEDC2, 0x4F69, 0xF8A5, - 0x4F6F, 0xE5BA, 0x4F70, 0xDBD8, 0x4F73, 0xCAA2, 0x4F76, 0xD1CD, - 0x4F7A, 0xEEED, 0x4F7E, 0xECEB, 0x4F7F, 0xDEC5, 0x4F81, 0xE3E0, - 0x4F83, 0xCAC9, 0x4F84, 0xF2E9, 0x4F86, 0xD5CE, 0x4F88, 0xF6B6, - 0x4F8A, 0xCEC2, 0x4F8B, 0xD6C7, 0x4F8D, 0xE3B4, 0x4F8F, 0xF1AD, - 0x4F91, 0xEAE2, 0x4F96, 0xD7C2, 0x4F98, 0xF3A7, 0x4F9B, 0xCDEA, - 0x4F9D, 0xEBEE, 0x4FAE, 0xD9B2, 0x4FAF, 0xFDA5, 0x4FB5, 0xF6D5, - 0x4FB6, 0xD5E2, 0x4FBF, 0xF8B5, 0x4FC2, 0xCCF5, 0x4FC3, 0xF5B5, - 0x4FC4, 0xE4AD, 0x4FC9, 0xE7EB, 0x4FCA, 0xF1D5, 0x4FCE, 0xF0BB, - 0x4FD1, 0xE9B5, 0x4FD3, 0xCCC9, 0x4FD4, 0xFAD5, 0x4FD7, 0xE1D4, - 0x4FDA, 0xD7D6, 0x4FDD, 0xDCC1, 0x4FDF, 0xDEC6, 0x4FE0, 0xFAEF, - 0x4FE1, 0xE3E1, 0x4FEE, 0xE1F3, 0x4FEF, 0xDCF6, 0x4FF1, 0xCEFC, - 0x4FF3, 0xDBC4, 0x4FF5, 0xF8F1, 0x4FF8, 0xDCE4, 0x4FFA, 0xE5EF, - 0x5002, 0xDCB1, 0x5006, 0xD5D6, 0x5009, 0xF3DA, 0x500B, 0xCBC1, - 0x500D, 0xDBC3, 0x5011, 0xD9FA, 0x5012, 0xD3EE, 0x5016, 0xFAB8, - 0x5019, 0xFDA6, 0x501A, 0xEBEF, 0x501C, 0xF4A6, 0x501E, 0xCCCA, - 0x501F, 0xF3A8, 0x5021, 0xF3DB, 0x5023, 0xDBA7, 0x5024, 0xF6B7, - 0x5026, 0xCFE6, 0x5027, 0xF0F2, 0x5028, 0xCBDA, 0x502A, 0xE7D2, - 0x502B, 0xD7C3, 0x502C, 0xF6F0, 0x502D, 0xE8DE, 0x503B, 0xE5A6, - 0x5043, 0xE5E7, 0x5047, 0xCAA3, 0x5048, 0xCCA7, 0x5049, 0xEAC9, - 0x504F, 0xF8B6, 0x5055, 0xFAA5, 0x505A, 0xF1AE, 0x505C, 0xEFCE, - 0x5065, 0xCBED, 0x5074, 0xF6B0, 0x5075, 0xEFCF, 0x5076, 0xE9CF, - 0x5078, 0xF7DE, 0x5080, 0xCED3, 0x5085, 0xDCF7, 0x508D, 0xDBA8, - 0x5091, 0xCBF8, 0x5098, 0xDFA1, 0x5099, 0xDDE1, 0x50AC, 0xF5CA, - 0x50AD, 0xE9B6, 0x50B2, 0xE7EC, 0x50B3, 0xEEEE, 0x50B5, 0xF3F0, - 0x50B7, 0xDFBF, 0x50BE, 0xCCCB, 0x50C5, 0xD0C1, 0x50C9, 0xF4D2, - 0x50CA, 0xE0BA, 0x50CF, 0xDFC0, 0x50D1, 0xCEE0, 0x50D5, 0xDCD2, - 0x50D6, 0xFDEA, 0x50DA, 0xD6F6, 0x50DE, 0xEACA, 0x50E5, 0xE8E9, - 0x50E7, 0xE3AC, 0x50ED, 0xF3D0, 0x50F9, 0xCAA4, 0x50FB, 0xDBF8, - 0x50FF, 0xDEC7, 0x5100, 0xEBF0, 0x5101, 0xF1D6, 0x5104, 0xE5E2, - 0x5106, 0xCCCC, 0x5109, 0xCBFB, 0x5112, 0xEAE3, 0x511F, 0xDFC1, - 0x5121, 0xD6ED, 0x512A, 0xE9D0, 0x5132, 0xEEB9, 0x5137, 0xD5E3, - 0x513A, 0xD1D3, 0x513C, 0xE5F0, 0x5140, 0xE8B4, 0x5141, 0xEBC3, - 0x5143, 0xEAAA, 0x5144, 0xFAFC, 0x5145, 0xF5F6, 0x5146, 0xF0BC, - 0x5147, 0xFDD4, 0x5148, 0xE0BB, 0x5149, 0xCEC3, 0x514B, 0xD0BA, - 0x514C, 0xF7BA, 0x514D, 0xD8F3, 0x514E, 0xF7CD, 0x5152, 0xE4AE, - 0x515C, 0xD4DF, 0x5162, 0xD0E7, 0x5165, 0xECFD, 0x5167, 0xD2AE, - 0x5168, 0xEEEF, 0x5169, 0xD5D7, 0x516A, 0xEAE4, 0x516B, 0xF8A2, - 0x516C, 0xCDEB, 0x516D, 0xD7BF, 0x516E, 0xFBB1, 0x5171, 0xCDEC, - 0x5175, 0xDCB2, 0x5176, 0xD0EC, 0x5177, 0xCEFD, 0x5178, 0xEEF0, - 0x517C, 0xCCC2, 0x5180, 0xD0ED, 0x5186, 0xE5F7, 0x518A, 0xF3FC, - 0x518D, 0xEEA2, 0x5192, 0xD9B3, 0x5195, 0xD8F4, 0x5197, 0xE9B7, - 0x51A0, 0xCEAE, 0x51A5, 0xD9A2, 0x51AA, 0xD8F1, 0x51AC, 0xD4CF, - 0x51B6, 0xE5A7, 0x51B7, 0xD5D2, 0x51BD, 0xD6A9, 0x51C4, 0xF4A2, - 0x51C6, 0xF1D7, 0x51C9, 0xD5D8, 0x51CB, 0xF0BD, 0x51CC, 0xD7D0, - 0x51CD, 0xD4D0, 0x51DC, 0xD7CF, 0x51DD, 0xEBEA, 0x51DE, 0xFDEB, - 0x51E1, 0xDBED, 0x51F0, 0xFCC5, 0x51F1, 0xCBC2, 0x51F6, 0xFDD5, - 0x51F8, 0xF4C8, 0x51F9, 0xE8EA, 0x51FA, 0xF5F3, 0x51FD, 0xF9DE, - 0x5200, 0xD3EF, 0x5203, 0xECD3, 0x5206, 0xDDC2, 0x5207, 0xEFB7, - 0x5208, 0xE7D4, 0x520A, 0xCACA, 0x520E, 0xD9FB, 0x5211, 0xFAFD, - 0x5217, 0xD6AA, 0x521D, 0xF4F8, 0x5224, 0xF7F7, 0x5225, 0xDCAC, - 0x5229, 0xD7D7, 0x522A, 0xDFA2, 0x522E, 0xCEBE, 0x5230, 0xD3F0, - 0x5236, 0xF0A4, 0x5237, 0xE1EC, 0x5238, 0xCFE7, 0x5239, 0xF3CB, - 0x523A, 0xEDA9, 0x523B, 0xCABE, 0x5243, 0xF4EF, 0x5247, 0xF6CE, - 0x524A, 0xDEFB, 0x524B, 0xD0BB, 0x524C, 0xD5B7, 0x524D, 0xEEF1, - 0x5254, 0xF4A8, 0x5256, 0xDCF8, 0x525B, 0xCBA7, 0x525D, 0xDACE, - 0x5261, 0xE0E6, 0x5269, 0xEDA5, 0x526A, 0xEEF2, 0x526F, 0xDCF9, - 0x5272, 0xF9DC, 0x5275, 0xF3DC, 0x527D, 0xF8F2, 0x527F, 0xF4F9, - 0x5283, 0xFCF1, 0x5287, 0xD0BC, 0x5288, 0xDBF9, 0x5289, 0xD7B1, - 0x528D, 0xCBFC, 0x5291, 0xF0A5, 0x5292, 0xCBFD, 0x529B, 0xD5F4, - 0x529F, 0xCDED, 0x52A0, 0xCAA5, 0x52A3, 0xD6AB, 0x52A4, 0xD0C2, - 0x52A9, 0xF0BE, 0x52AA, 0xD2BD, 0x52AB, 0xCCA4, 0x52BE, 0xFAB6, - 0x52C1, 0xCCCD, 0x52C3, 0xDAFA, 0x52C5, 0xF6CF, 0x52C7, 0xE9B8, - 0x52C9, 0xD8F5, 0x52CD, 0xCCCE, 0x52D2, 0xD7CD, 0x52D5, 0xD4D1, - 0x52D6, 0xE9ED, 0x52D8, 0xCAEB, 0x52D9, 0xD9E2, 0x52DB, 0xFDB2, - 0x52DD, 0xE3AD, 0x52DE, 0xD6CC, 0x52DF, 0xD9B4, 0x52E2, 0xE1A7, - 0x52E3, 0xEED3, 0x52E4, 0xD0C3, 0x52F3, 0xFDB3, 0x52F5, 0xD5E4, - 0x52F8, 0xCFE8, 0x52FA, 0xEDC3, 0x52FB, 0xD0B2, 0x52FE, 0xCEFE, - 0x52FF, 0xDAA8, 0x5305, 0xF8D0, 0x5308, 0xFDD6, 0x530D, 0xF8D1, - 0x530F, 0xF8D2, 0x5310, 0xDCD3, 0x5315, 0xDDE2, 0x5316, 0xFBF9, - 0x5317, 0xDDC1, 0x5319, 0xE3B5, 0x5320, 0xEDDD, 0x5321, 0xCEC4, - 0x5323, 0xCBA1, 0x532A, 0xDDE3, 0x532F, 0xFCDD, 0x5339, 0xF9AF, - 0x533F, 0xD2FB, 0x5340, 0xCFA1, 0x5341, 0xE4A8, 0x5343, 0xF4B6, - 0x5344, 0xECFE, 0x5347, 0xE3AE, 0x5348, 0xE7ED, 0x5349, 0xFDC1, - 0x534A, 0xDAE2, 0x534D, 0xD8B3, 0x5351, 0xDDE4, 0x5352, 0xF0EF, - 0x5353, 0xF6F1, 0x5354, 0xFAF0, 0x5357, 0xD1F5, 0x535A, 0xDACF, - 0x535C, 0xDCD4, 0x535E, 0xDCA6, 0x5360, 0xEFBF, 0x5366, 0xCECF, - 0x5368, 0xE0D9, 0x536F, 0xD9D6, 0x5370, 0xECD4, 0x5371, 0xEACB, - 0x5374, 0xCABF, 0x5375, 0xD5B0, 0x5377, 0xCFE9, 0x537D, 0xF1ED, - 0x537F, 0xCCCF, 0x5384, 0xE4F8, 0x5393, 0xE4ED, 0x5398, 0xD7D8, - 0x539A, 0xFDA7, 0x539F, 0xEAAB, 0x53A0, 0xF6B2, 0x53A5, 0xCFF0, - 0x53A6, 0xF9BD, 0x53AD, 0xE6F4, 0x53BB, 0xCBDB, 0x53C3, 0xF3D1, - 0x53C8, 0xE9D1, 0x53C9, 0xF3A9, 0x53CA, 0xD0E0, 0x53CB, 0xE9D2, - 0x53CD, 0xDAE3, 0x53D4, 0xE2D2, 0x53D6, 0xF6A2, 0x53D7, 0xE1F4, - 0x53DB, 0xDAE4, 0x53E1, 0xE7D5, 0x53E2, 0xF5BF, 0x53E3, 0xCFA2, - 0x53E4, 0xCDAF, 0x53E5, 0xCFA3, 0x53E9, 0xCDB0, 0x53EA, 0xF1FE, - 0x53EB, 0xD0A3, 0x53EC, 0xE1AF, 0x53ED, 0xF8A3, 0x53EF, 0xCAA6, - 0x53F0, 0xF7BB, 0x53F1, 0xF2EA, 0x53F2, 0xDEC8, 0x53F3, 0xE9D3, - 0x53F8, 0xDEC9, 0x5403, 0xFDDE, 0x5404, 0xCAC0, 0x5408, 0xF9EA, - 0x5409, 0xD1CE, 0x540A, 0xEED4, 0x540C, 0xD4D2, 0x540D, 0xD9A3, - 0x540E, 0xFDA8, 0x540F, 0xD7D9, 0x5410, 0xF7CE, 0x5411, 0xFABE, - 0x541B, 0xCFD6, 0x541D, 0xD7F0, 0x541F, 0xEBE1, 0x5420, 0xF8C5, - 0x5426, 0xDCFA, 0x5429, 0xDDC3, 0x542B, 0xF9DF, 0x5433, 0xE7EF, - 0x5438, 0xFDE5, 0x5439, 0xF6A3, 0x543B, 0xD9FC, 0x543C, 0xFDA9, - 0x543E, 0xE7EE, 0x5442, 0xD5E5, 0x5448, 0xEFD0, 0x544A, 0xCDB1, - 0x5451, 0xF7A2, 0x5468, 0xF1B2, 0x546A, 0xF1B1, 0x5471, 0xCDB2, - 0x5473, 0xDAAB, 0x5475, 0xCAA7, 0x547B, 0xE3E2, 0x547C, 0xFBBC, - 0x547D, 0xD9A4, 0x5480, 0xEEBA, 0x5486, 0xF8D3, 0x548C, 0xFBFA, - 0x548E, 0xCFA4, 0x5490, 0xDCFB, 0x54A4, 0xF6E3, 0x54A8, 0xEDAA, - 0x54AB, 0xF2A1, 0x54AC, 0xCEE1, 0x54B3, 0xFAA6, 0x54B8, 0xF9E0, - 0x54BD, 0xECD6, 0x54C0, 0xE4EE, 0x54C1, 0xF9A1, 0x54C4, 0xFBEF, - 0x54C8, 0xF9EB, 0x54C9, 0xEEA3, 0x54E1, 0xEAAC, 0x54E5, 0xCAA8, - 0x54E8, 0xF4FA, 0x54ED, 0xCDD6, 0x54EE, 0xFCF6, 0x54F2, 0xF4C9, - 0x54FA, 0xF8D4, 0x5504, 0xF8A6, 0x5506, 0xDECA, 0x5507, 0xF2C6, - 0x550E, 0xD7DA, 0x5510, 0xD3D0, 0x551C, 0xD8C5, 0x552F, 0xEAE6, - 0x5531, 0xF3DD, 0x5535, 0xE4DA, 0x553E, 0xF6E4, 0x5544, 0xF6F2, - 0x5546, 0xDFC2, 0x554F, 0xD9FD, 0x5553, 0xCCF6, 0x5556, 0xD3BA, - 0x555E, 0xE4AF, 0x5563, 0xF9E1, 0x557C, 0xF0A6, 0x5580, 0xCBD3, - 0x5584, 0xE0BC, 0x5586, 0xF4CA, 0x5587, 0xD4FA, 0x5589, 0xFDAA, - 0x558A, 0xF9E2, 0x5598, 0xF4B7, 0x5599, 0xFDC2, 0x559A, 0xFCB0, - 0x559C, 0xFDEC, 0x559D, 0xCAE2, 0x55A7, 0xFDBD, 0x55A9, 0xEAE7, - 0x55AA, 0xDFC3, 0x55AB, 0xD1D2, 0x55AC, 0xCEE2, 0x55AE, 0xD3A4, - 0x55C5, 0xFDAB, 0x55C7, 0xDFE0, 0x55D4, 0xF2C7, 0x55DA, 0xE7F0, - 0x55DC, 0xD0EE, 0x55DF, 0xF3AA, 0x55E3, 0xDECB, 0x55E4, 0xF6B8, - 0x55FD, 0xE1F5, 0x55FE, 0xF1B3, 0x5606, 0xF7A3, 0x5609, 0xCAA9, - 0x5614, 0xCFA5, 0x5617, 0xDFC4, 0x562F, 0xE1B0, 0x5632, 0xF0BF, - 0x5634, 0xF6A4, 0x5636, 0xE3B6, 0x5653, 0xFAC6, 0x5668, 0xD0EF, - 0x566B, 0xFDED, 0x5674, 0xDDC4, 0x5686, 0xFCF7, 0x56A5, 0xE6BF, - 0x56AC, 0xDEAD, 0x56AE, 0xFABF, 0x56B4, 0xE5F1, 0x56BC, 0xEDC4, - 0x56CA, 0xD2A5, 0x56CD, 0xFDEE, 0x56D1, 0xF5B6, 0x56DA, 0xE1F6, - 0x56DB, 0xDECC, 0x56DE, 0xFCDE, 0x56E0, 0xECD7, 0x56F0, 0xCDDD, - 0x56F9, 0xD6B7, 0x56FA, 0xCDB3, 0x5703, 0xF8D5, 0x5704, 0xE5D8, - 0x5708, 0xCFEA, 0x570B, 0xCFD0, 0x570D, 0xEACC, 0x5712, 0xEAAE, - 0x5713, 0xEAAD, 0x5716, 0xD3F1, 0x5718, 0xD3A5, 0x571F, 0xF7CF, - 0x5728, 0xEEA4, 0x572D, 0xD0A4, 0x5730, 0xF2A2, 0x573B, 0xD0F0, - 0x5740, 0xF2A3, 0x5742, 0xF7F8, 0x5747, 0xD0B3, 0x574A, 0xDBA9, - 0x574D, 0xD3BB, 0x574E, 0xCAEC, 0x5750, 0xF1A6, 0x5751, 0xCBD5, - 0x5761, 0xF7E7, 0x5764, 0xCDDE, 0x5766, 0xF7A4, 0x576A, 0xF8C0, - 0x576E, 0xD3DD, 0x5770, 0xCCD0, 0x5775, 0xCFA6, 0x577C, 0xF6F3, - 0x5782, 0xE1F7, 0x5788, 0xD3DC, 0x578B, 0xFAFE, 0x5793, 0xFAA7, - 0x57A0, 0xEBD9, 0x57A2, 0xCFA7, 0x57A3, 0xEAAF, 0x57C3, 0xE4EF, - 0x57C7, 0xE9B9, 0x57C8, 0xF1D8, 0x57CB, 0xD8D8, 0x57CE, 0xE0F2, - 0x57DF, 0xE6B4, 0x57E0, 0xDCFC, 0x57F0, 0xF3F1, 0x57F4, 0xE3D0, - 0x57F7, 0xF2FB, 0x57F9, 0xDBC6, 0x57FA, 0xD0F1, 0x57FC, 0xD0F2, - 0x5800, 0xCFDC, 0x5802, 0xD3D1, 0x5805, 0xCCB1, 0x5806, 0xF7D8, - 0x5808, 0xCBA8, 0x5809, 0xEBBC, 0x580A, 0xE4BE, 0x581E, 0xF4DC, - 0x5821, 0xDCC2, 0x5824, 0xF0A7, 0x5827, 0xE6C0, 0x582A, 0xCAED, - 0x582F, 0xE8EB, 0x5830, 0xE5E8, 0x5831, 0xDCC3, 0x5834, 0xEDDE, - 0x5835, 0xD3F2, 0x583A, 0xCCF7, 0x584A, 0xCED4, 0x584B, 0xE7AB, - 0x584F, 0xCBC3, 0x5851, 0xE1B1, 0x5854, 0xF7B2, 0x5857, 0xD3F3, - 0x5858, 0xD3D2, 0x585A, 0xF5C0, 0x585E, 0xDFDD, 0x5861, 0xEEF3, - 0x5862, 0xE7F1, 0x5864, 0xFDB4, 0x5875, 0xF2C8, 0x5879, 0xF3D2, - 0x587C, 0xEEF4, 0x587E, 0xE2D3, 0x5883, 0xCCD1, 0x5885, 0xDFEA, - 0x5889, 0xE9BA, 0x5893, 0xD9D7, 0x589C, 0xF5CD, 0x589E, 0xF1F2, - 0x589F, 0xFAC7, 0x58A8, 0xD9F8, 0x58A9, 0xD4C2, 0x58AE, 0xF6E5, - 0x58B3, 0xDDC5, 0x58BA, 0xE7F2, 0x58BB, 0xEDDF, 0x58BE, 0xCACB, - 0x58C1, 0xDBFA, 0x58C5, 0xE8B5, 0x58C7, 0xD3A6, 0x58CE, 0xFDB5, - 0x58D1, 0xF9C9, 0x58D3, 0xE4E2, 0x58D5, 0xFBBD, 0x58D8, 0xD7A4, - 0x58D9, 0xCEC5, 0x58DE, 0xCED5, 0x58DF, 0xD6E6, 0x58E4, 0xE5BD, - 0x58EB, 0xDECD, 0x58EC, 0xECF3, 0x58EF, 0xEDE0, 0x58F9, 0xECEC, - 0x58FA, 0xFBBE, 0x58FB, 0xDFEB, 0x58FD, 0xE1F8, 0x590F, 0xF9BE, - 0x5914, 0xD0F3, 0x5915, 0xE0AA, 0x5916, 0xE8E2, 0x5919, 0xE2D4, - 0x591A, 0xD2FD, 0x591C, 0xE5A8, 0x5922, 0xD9D3, 0x5927, 0xD3DE, - 0x5929, 0xF4B8, 0x592A, 0xF7BC, 0x592B, 0xDCFD, 0x592D, 0xE8EC, - 0x592E, 0xE4E7, 0x5931, 0xE3F7, 0x5937, 0xECA8, 0x593E, 0xFAF1, - 0x5944, 0xE5F2, 0x5947, 0xD0F4, 0x5948, 0xD2AF, 0x5949, 0xDCE5, - 0x594E, 0xD0A5, 0x594F, 0xF1B4, 0x5950, 0xFCB1, 0x5951, 0xCCF8, - 0x5954, 0xDDC6, 0x5955, 0xFAD1, 0x5957, 0xF7DF, 0x595A, 0xFAA8, - 0x5960, 0xEEF5, 0x5962, 0xDECE, 0x5967, 0xE7F3, 0x596A, 0xF7AC, - 0x596B, 0xEBC4, 0x596C, 0xEDE1, 0x596D, 0xE0AB, 0x596E, 0xDDC7, - 0x5973, 0xD2B3, 0x5974, 0xD2BF, 0x5978, 0xCACC, 0x597D, 0xFBBF, - 0x5982, 0xE5FD, 0x5983, 0xDDE5, 0x5984, 0xD8CD, 0x598A, 0xECF4, - 0x5993, 0xD0F5, 0x5996, 0xE8ED, 0x5997, 0xD0D2, 0x5999, 0xD9D8, - 0x59A5, 0xF6E6, 0x59A8, 0xDBAA, 0x59AC, 0xF7E0, 0x59B9, 0xD8D9, - 0x59BB, 0xF4A3, 0x59BE, 0xF4DD, 0x59C3, 0xEFD1, 0x59C6, 0xD9B5, - 0x59C9, 0xEDAB, 0x59CB, 0xE3B7, 0x59D0, 0xEEBB, 0x59D1, 0xCDB4, - 0x59D3, 0xE0F3, 0x59D4, 0xEACD, 0x59D9, 0xECF5, 0x59DA, 0xE8EE, - 0x59DC, 0xCBA9, 0x59DD, 0xF1AF, 0x59E6, 0xCACD, 0x59E8, 0xECA9, - 0x59EA, 0xF2EB, 0x59EC, 0xFDEF, 0x59EE, 0xF9F3, 0x59F8, 0xE6C1, - 0x59FB, 0xECD8, 0x59FF, 0xEDAC, 0x5A01, 0xEACE, 0x5A03, 0xE8DF, - 0x5A11, 0xDECF, 0x5A18, 0xD2A6, 0x5A1B, 0xE7F4, 0x5A1C, 0xD1D6, - 0x5A1F, 0xE6C2, 0x5A20, 0xE3E3, 0x5A25, 0xE4B0, 0x5A29, 0xD8B4, - 0x5A36, 0xF6A5, 0x5A3C, 0xF3DE, 0x5A41, 0xD7A5, 0x5A46, 0xF7E8, - 0x5A49, 0xE8C6, 0x5A5A, 0xFBE6, 0x5A62, 0xDDE6, 0x5A66, 0xDCFE, - 0x5A92, 0xD8DA, 0x5A9A, 0xDAAC, 0x5A9B, 0xEAB0, 0x5AA4, 0xE3B8, - 0x5AC1, 0xCAAA, 0x5AC2, 0xE1F9, 0x5AC4, 0xEAB1, 0x5AC9, 0xF2EC, - 0x5ACC, 0xFAEE, 0x5AE1, 0xEED5, 0x5AE6, 0xF9F4, 0x5AE9, 0xD2EC, - 0x5B05, 0xFBFB, 0x5B09, 0xFDF0, 0x5B0B, 0xE0BD, 0x5B0C, 0xCEE3, - 0x5B16, 0xF8C6, 0x5B2A, 0xDEAE, 0x5B40, 0xDFC5, 0x5B43, 0xE5BE, - 0x5B50, 0xEDAD, 0x5B51, 0xFAEA, 0x5B54, 0xCDEE, 0x5B55, 0xEDA6, - 0x5B57, 0xEDAE, 0x5B58, 0xF0ED, 0x5B5A, 0xDDA1, 0x5B5C, 0xEDAF, - 0x5B5D, 0xFCF8, 0x5B5F, 0xD8EB, 0x5B63, 0xCCF9, 0x5B64, 0xCDB5, - 0x5B69, 0xFAA9, 0x5B6B, 0xE1DD, 0x5B70, 0xE2D5, 0x5B71, 0xEDCF, - 0x5B75, 0xDDA2, 0x5B78, 0xF9CA, 0x5B7A, 0xEAE8, 0x5B7C, 0xE5ED, - 0x5B85, 0xD3EB, 0x5B87, 0xE9D4, 0x5B88, 0xE1FA, 0x5B89, 0xE4CC, - 0x5B8B, 0xE1E4, 0x5B8C, 0xE8C7, 0x5B8F, 0xCEDB, 0x5B93, 0xDCD5, - 0x5B95, 0xF7B5, 0x5B96, 0xFCF3, 0x5B97, 0xF0F3, 0x5B98, 0xCEAF, - 0x5B99, 0xF1B5, 0x5B9A, 0xEFD2, 0x5B9B, 0xE8C8, 0x5B9C, 0xEBF1, - 0x5BA2, 0xCBD4, 0x5BA3, 0xE0BE, 0x5BA4, 0xE3F8, 0x5BA5, 0xEAE9, - 0x5BA6, 0xFCB2, 0x5BAC, 0xE0F4, 0x5BAE, 0xCFE0, 0x5BB0, 0xEEA5, - 0x5BB3, 0xFAAA, 0x5BB4, 0xE6C3, 0x5BB5, 0xE1B2, 0x5BB6, 0xCAAB, - 0x5BB8, 0xE3E4, 0x5BB9, 0xE9BB, 0x5BBF, 0xE2D6, 0x5BC0, 0xF3F2, - 0x5BC2, 0xEED6, 0x5BC3, 0xEAB2, 0x5BC4, 0xD0F6, 0x5BC5, 0xECD9, - 0x5BC6, 0xDACB, 0x5BC7, 0xCFA8, 0x5BCC, 0xDDA3, 0x5BD0, 0xD8DB, - 0x5BD2, 0xF9CE, 0x5BD3, 0xE9D5, 0x5BD4, 0xE3D1, 0x5BD7, 0xD2BC, - 0x5BDE, 0xD8AC, 0x5BDF, 0xF3CC, 0x5BE1, 0xCDFB, 0x5BE2, 0xF6D6, - 0x5BE4, 0xE7F5, 0x5BE5, 0xE8EF, 0x5BE6, 0xE3F9, 0x5BE7, 0xD2BB, - 0x5BE8, 0xF3F3, 0x5BE9, 0xE3FB, 0x5BEB, 0xDED0, 0x5BEC, 0xCEB0, - 0x5BEE, 0xD6F7, 0x5BEF, 0xF1D9, 0x5BF5, 0xF5C1, 0x5BF6, 0xDCC4, - 0x5BF8, 0xF5BB, 0x5BFA, 0xDED1, 0x5C01, 0xDCE6, 0x5C04, 0xDED2, - 0x5C07, 0xEDE2, 0x5C08, 0xEEF6, 0x5C09, 0xEACF, 0x5C0A, 0xF0EE, - 0x5C0B, 0xE3FC, 0x5C0D, 0xD3DF, 0x5C0E, 0xD3F4, 0x5C0F, 0xE1B3, - 0x5C11, 0xE1B4, 0x5C16, 0xF4D3, 0x5C19, 0xDFC6, 0x5C24, 0xE9D6, - 0x5C28, 0xDBAB, 0x5C31, 0xF6A6, 0x5C38, 0xE3B9, 0x5C39, 0xEBC5, - 0x5C3A, 0xF4A9, 0x5C3B, 0xCDB6, 0x5C3C, 0xD2F9, 0x5C3E, 0xDAAD, - 0x5C3F, 0xD2E3, 0x5C40, 0xCFD1, 0x5C45, 0xCBDC, 0x5C46, 0xCCFA, - 0x5C48, 0xCFDD, 0x5C4B, 0xE8A9, 0x5C4D, 0xE3BB, 0x5C4E, 0xE3BA, - 0x5C51, 0xE0DA, 0x5C55, 0xEEF7, 0x5C5B, 0xDCB3, 0x5C60, 0xD3F5, - 0x5C62, 0xD7A6, 0x5C64, 0xF6B5, 0x5C65, 0xD7DB, 0x5C6C, 0xE1D5, - 0x5C6F, 0xD4EA, 0x5C71, 0xDFA3, 0x5C79, 0xFDDF, 0x5C90, 0xD0F7, - 0x5C91, 0xEDD4, 0x5CA1, 0xCBAA, 0x5CA9, 0xE4DB, 0x5CAB, 0xE1FB, - 0x5CAC, 0xCBA2, 0x5CB1, 0xD3E0, 0x5CB3, 0xE4BF, 0x5CB5, 0xFBC0, - 0x5CB7, 0xDABE, 0x5CB8, 0xE4CD, 0x5CBA, 0xD6B9, 0x5CBE, 0xEFC0, - 0x5CC0, 0xE1FC, 0x5CD9, 0xF6B9, 0x5CE0, 0xDFC7, 0x5CE8, 0xE4B1, - 0x5CEF, 0xDCE7, 0x5CF0, 0xDCE8, 0x5CF4, 0xFAD6, 0x5CF6, 0xD3F6, - 0x5CFB, 0xF1DA, 0x5CFD, 0xFAF2, 0x5D07, 0xE2FD, 0x5D0D, 0xD5CF, - 0x5D0E, 0xD0F8, 0x5D11, 0xCDDF, 0x5D14, 0xF5CB, 0x5D16, 0xE4F0, - 0x5D17, 0xCBAB, 0x5D19, 0xD7C4, 0x5D27, 0xE2FE, 0x5D29, 0xDDDA, - 0x5D4B, 0xDAAE, 0x5D4C, 0xCAEE, 0x5D50, 0xD5B9, 0x5D69, 0xE3A1, - 0x5D6C, 0xE8E3, 0x5D6F, 0xF3AB, 0x5D87, 0xCFA9, 0x5D8B, 0xD3F7, - 0x5D9D, 0xD4F1, 0x5DA0, 0xCEE4, 0x5DA2, 0xE8F2, 0x5DAA, 0xE5F5, - 0x5DB8, 0xE7AE, 0x5DBA, 0xD6BA, 0x5DBC, 0xDFEC, 0x5DBD, 0xE4C0, - 0x5DCD, 0xE8E4, 0x5DD2, 0xD8B5, 0x5DD6, 0xE4DC, 0x5DDD, 0xF4B9, - 0x5DDE, 0xF1B6, 0x5DE1, 0xE2DE, 0x5DE2, 0xE1B5, 0x5DE5, 0xCDEF, - 0x5DE6, 0xF1A7, 0x5DE7, 0xCEE5, 0x5DE8, 0xCBDD, 0x5DEB, 0xD9E3, - 0x5DEE, 0xF3AC, 0x5DF1, 0xD0F9, 0x5DF2, 0xECAB, 0x5DF3, 0xDED3, - 0x5DF4, 0xF7E9, 0x5DF7, 0xF9F5, 0x5DFD, 0xE1DE, 0x5DFE, 0xCBEE, - 0x5E02, 0xE3BC, 0x5E03, 0xF8D6, 0x5E06, 0xDBEE, 0x5E0C, 0xFDF1, - 0x5E11, 0xF7B6, 0x5E16, 0xF4DE, 0x5E19, 0xF2ED, 0x5E1B, 0xDBD9, - 0x5E1D, 0xF0A8, 0x5E25, 0xE1FD, 0x5E2B, 0xDED4, 0x5E2D, 0xE0AC, - 0x5E33, 0xEDE3, 0x5E36, 0xD3E1, 0x5E38, 0xDFC8, 0x5E3D, 0xD9B6, - 0x5E3F, 0xFDAC, 0x5E40, 0xEFD3, 0x5E44, 0xE4C1, 0x5E45, 0xF8EB, - 0x5E47, 0xDBAC, 0x5E4C, 0xFCC6, 0x5E55, 0xD8AD, 0x5E5F, 0xF6BA, - 0x5E61, 0xDBDF, 0x5E62, 0xD3D3, 0x5E63, 0xF8C7, 0x5E72, 0xCACE, - 0x5E73, 0xF8C1, 0x5E74, 0xD2B4, 0x5E77, 0xDCB4, 0x5E78, 0xFAB9, - 0x5E79, 0xCACF, 0x5E7B, 0xFCB3, 0x5E7C, 0xEAEA, 0x5E7D, 0xEAEB, - 0x5E7E, 0xD0FA, 0x5E84, 0xEDE4, 0x5E87, 0xDDE7, 0x5E8A, 0xDFC9, - 0x5E8F, 0xDFED, 0x5E95, 0xEEBC, 0x5E97, 0xEFC1, 0x5E9A, 0xCCD2, - 0x5E9C, 0xDDA4, 0x5EA0, 0xDFCA, 0x5EA6, 0xD3F8, 0x5EA7, 0xF1A8, - 0x5EAB, 0xCDB7, 0x5EAD, 0xEFD4, 0x5EB5, 0xE4DD, 0x5EB6, 0xDFEE, - 0x5EB7, 0xCBAC, 0x5EB8, 0xE9BC, 0x5EBE, 0xEAEC, 0x5EC2, 0xDFCB, - 0x5EC8, 0xF9BF, 0x5EC9, 0xD6AF, 0x5ECA, 0xD5C6, 0x5ED0, 0xCFAA, - 0x5ED3, 0xCEA9, 0x5ED6, 0xD6F8, 0x5EDA, 0xF1B7, 0x5EDB, 0xEEF8, - 0x5EDF, 0xD9D9, 0x5EE0, 0xF3DF, 0x5EE2, 0xF8C8, 0x5EE3, 0xCEC6, - 0x5EEC, 0xD5E6, 0x5EF3, 0xF4E6, 0x5EF6, 0xE6C5, 0x5EF7, 0xEFD5, - 0x5EFA, 0xCBEF, 0x5EFB, 0xFCDF, 0x5F01, 0xDCA7, 0x5F04, 0xD6E7, - 0x5F0A, 0xF8C9, 0x5F0F, 0xE3D2, 0x5F11, 0xE3BD, 0x5F13, 0xCFE1, - 0x5F14, 0xF0C0, 0x5F15, 0xECDA, 0x5F17, 0xDDD7, 0x5F18, 0xFBF0, - 0x5F1B, 0xECAC, 0x5F1F, 0xF0A9, 0x5F26, 0xFAD7, 0x5F27, 0xFBC1, - 0x5F29, 0xD2C0, 0x5F31, 0xE5B0, 0x5F35, 0xEDE5, 0x5F3A, 0xCBAD, - 0x5F3C, 0xF9B0, 0x5F48, 0xF7A5, 0x5F4A, 0xCBAE, 0x5F4C, 0xDAAF, - 0x5F4E, 0xD8B6, 0x5F56, 0xD3A7, 0x5F57, 0xFBB2, 0x5F59, 0xFDC4, - 0x5F5B, 0xECAD, 0x5F62, 0xFBA1, 0x5F66, 0xE5E9, 0x5F67, 0xE9EE, - 0x5F69, 0xF3F4, 0x5F6A, 0xF8F3, 0x5F6B, 0xF0C1, 0x5F6C, 0xDEAF, - 0x5F6D, 0xF8B0, 0x5F70, 0xF3E0, 0x5F71, 0xE7AF, 0x5F77, 0xDBAD, - 0x5F79, 0xE6B5, 0x5F7C, 0xF9A8, 0x5F7F, 0xDDD8, 0x5F80, 0xE8D9, - 0x5F81, 0xEFD6, 0x5F85, 0xD3E2, 0x5F87, 0xE2DF, 0x5F8A, 0xFCE0, - 0x5F8B, 0xD7C8, 0x5F8C, 0xFDAD, 0x5F90, 0xDFEF, 0x5F91, 0xCCD3, - 0x5F92, 0xD3F9, 0x5F97, 0xD4F0, 0x5F98, 0xDBC7, 0x5F99, 0xDED5, - 0x5F9E, 0xF0F4, 0x5FA0, 0xD5D0, 0x5FA1, 0xE5D9, 0x5FA8, 0xFCC7, - 0x5FA9, 0xDCD6, 0x5FAA, 0xE2E0, 0x5FAE, 0xDAB0, 0x5FB5, 0xF3A3, - 0x5FB7, 0xD3EC, 0x5FB9, 0xF4CB, 0x5FBD, 0xFDC5, 0x5FC3, 0xE3FD, - 0x5FC5, 0xF9B1, 0x5FCC, 0xD0FB, 0x5FCD, 0xECDB, 0x5FD6, 0xF5BC, - 0x5FD7, 0xF2A4, 0x5FD8, 0xD8CE, 0x5FD9, 0xD8CF, 0x5FE0, 0xF5F7, - 0x5FEB, 0xF6E1, 0x5FF5, 0xD2B7, 0x5FFD, 0xFBEC, 0x5FFF, 0xDDC8, - 0x600F, 0xE4E8, 0x6012, 0xD2C1, 0x6016, 0xF8D7, 0x601C, 0xD6BB, - 0x601D, 0xDED6, 0x6020, 0xF7BD, 0x6021, 0xECAE, 0x6025, 0xD0E1, - 0x6027, 0xE0F5, 0x6028, 0xEAB3, 0x602A, 0xCED6, 0x602F, 0xCCA5, - 0x6041, 0xECF6, 0x6042, 0xE2E1, 0x6043, 0xE3BE, 0x604D, 0xFCC8, - 0x6050, 0xCDF0, 0x6052, 0xF9F6, 0x6055, 0xDFF0, 0x6059, 0xE5BF, - 0x605D, 0xCEBF, 0x6062, 0xFCE1, 0x6063, 0xEDB0, 0x6064, 0xFDD1, - 0x6065, 0xF6BB, 0x6068, 0xF9CF, 0x6069, 0xEBDA, 0x606A, 0xCAC1, - 0x606C, 0xD2B8, 0x606D, 0xCDF1, 0x606F, 0xE3D3, 0x6070, 0xFDE6, - 0x6085, 0xE6ED, 0x6089, 0xE3FA, 0x608C, 0xF0AA, 0x608D, 0xF9D0, - 0x6094, 0xFCE2, 0x6096, 0xF8A7, 0x609A, 0xE1E5, 0x609B, 0xEEF9, - 0x609F, 0xE7F6, 0x60A0, 0xEAED, 0x60A3, 0xFCB4, 0x60A4, 0xF5C2, - 0x60A7, 0xD7DC, 0x60B0, 0xF0F5, 0x60B2, 0xDDE8, 0x60B3, 0xD3ED, - 0x60B4, 0xF5FC, 0x60B6, 0xDABF, 0x60B8, 0xCCFB, 0x60BC, 0xD3FA, - 0x60BD, 0xF4A4, 0x60C5, 0xEFD7, 0x60C7, 0xD4C3, 0x60D1, 0xFBE3, - 0x60DA, 0xFBED, 0x60DC, 0xE0AD, 0x60DF, 0xEAEE, 0x60E0, 0xFBB3, - 0x60E1, 0xE4C2, 0x60F0, 0xF6E7, 0x60F1, 0xD2DD, 0x60F3, 0xDFCC, - 0x60F6, 0xFCC9, 0x60F9, 0xE5A9, 0x60FA, 0xE0F6, 0x60FB, 0xF6B3, - 0x6101, 0xE1FE, 0x6106, 0xCBF0, 0x6108, 0xEAEF, 0x6109, 0xEAF0, - 0x610D, 0xDAC0, 0x610E, 0xF8B4, 0x610F, 0xEBF2, 0x6115, 0xE4C3, - 0x611A, 0xE9D7, 0x611B, 0xE4F1, 0x611F, 0xCAEF, 0x6127, 0xCED7, - 0x6130, 0xFCCA, 0x6134, 0xF3E1, 0x6137, 0xCBC4, 0x613C, 0xE3E5, - 0x613E, 0xCBC5, 0x613F, 0xEAB4, 0x6142, 0xE9BD, 0x6144, 0xD7C9, - 0x6147, 0xEBDB, 0x6148, 0xEDB1, 0x614A, 0xCCC3, 0x614B, 0xF7BE, - 0x614C, 0xFCCB, 0x6153, 0xF8F4, 0x6155, 0xD9B7, 0x6158, 0xF3D3, - 0x6159, 0xF3D4, 0x615D, 0xF7E4, 0x615F, 0xF7D1, 0x6162, 0xD8B7, - 0x6163, 0xCEB1, 0x6164, 0xCAC2, 0x6167, 0xFBB4, 0x6168, 0xCBC6, - 0x616B, 0xF0F6, 0x616E, 0xD5E7, 0x6170, 0xEAD0, 0x6176, 0xCCD4, - 0x6177, 0xCBAF, 0x617D, 0xF4AA, 0x617E, 0xE9AF, 0x6181, 0xF5C3, - 0x6182, 0xE9D8, 0x618A, 0xDDE9, 0x618E, 0xF1F3, 0x6190, 0xD5FB, - 0x6191, 0xDEBB, 0x6194, 0xF4FB, 0x6198, 0xFDF3, 0x6199, 0xFDF2, - 0x619A, 0xF7A6, 0x61A4, 0xDDC9, 0x61A7, 0xD4D3, 0x61A9, 0xCCA8, - 0x61AB, 0xDAC1, 0x61AC, 0xCCD5, 0x61AE, 0xD9E4, 0x61B2, 0xFACA, - 0x61B6, 0xE5E3, 0x61BA, 0xD3BC, 0x61BE, 0xCAF0, 0x61C3, 0xD0C4, - 0x61C7, 0xCAD0, 0x61C8, 0xFAAB, 0x61C9, 0xEBEB, 0x61CA, 0xE7F8, - 0x61CB, 0xD9E5, 0x61E6, 0xD1D7, 0x61F2, 0xF3A4, 0x61F6, 0xD4FB, - 0x61F7, 0xFCE3, 0x61F8, 0xFAD8, 0x61FA, 0xF3D5, 0x61FC, 0xCFAB, - 0x61FF, 0xEBF3, 0x6200, 0xD5FC, 0x6207, 0xD3D4, 0x6208, 0xCDFC, - 0x620A, 0xD9E6, 0x620C, 0xE2F9, 0x620D, 0xE2A1, 0x620E, 0xEBD4, - 0x6210, 0xE0F7, 0x6211, 0xE4B2, 0x6212, 0xCCFC, 0x6216, 0xFBE4, - 0x621A, 0xF4AB, 0x621F, 0xD0BD, 0x6221, 0xCAF1, 0x622A, 0xEFB8, - 0x622E, 0xD7C0, 0x6230, 0xEEFA, 0x6231, 0xFDF4, 0x6234, 0xD3E3, - 0x6236, 0xFBC2, 0x623E, 0xD5E8, 0x623F, 0xDBAE, 0x6240, 0xE1B6, - 0x6241, 0xF8B7, 0x6247, 0xE0BF, 0x6248, 0xFBC3, 0x6249, 0xDDEA, - 0x624B, 0xE2A2, 0x624D, 0xEEA6, 0x6253, 0xF6E8, 0x6258, 0xF6F5, - 0x626E, 0xDDCA, 0x6271, 0xD0E2, 0x6276, 0xDDA6, 0x6279, 0xDDEB, - 0x627C, 0xE4F9, 0x627F, 0xE3AF, 0x6280, 0xD0FC, 0x6284, 0xF4FC, - 0x6289, 0xCCBC, 0x628A, 0xF7EA, 0x6291, 0xE5E4, 0x6292, 0xDFF1, - 0x6295, 0xF7E1, 0x6297, 0xF9F7, 0x6298, 0xEFB9, 0x629B, 0xF8D8, - 0x62AB, 0xF9A9, 0x62B1, 0xF8D9, 0x62B5, 0xEEBD, 0x62B9, 0xD8C6, - 0x62BC, 0xE4E3, 0x62BD, 0xF5CE, 0x62C2, 0xDDD9, 0x62C7, 0xD9E7, - 0x62C8, 0xD2B9, 0x62C9, 0xD5C3, 0x62CC, 0xDAE5, 0x62CD, 0xDAD0, - 0x62CF, 0xD1D9, 0x62D0, 0xCED8, 0x62D2, 0xCBDE, 0x62D3, 0xF4AC, - 0x62D4, 0xDAFB, 0x62D6, 0xF6E9, 0x62D7, 0xE8F3, 0x62D8, 0xCFAC, - 0x62D9, 0xF0F0, 0x62DB, 0xF4FD, 0x62DC, 0xDBC8, 0x62EC, 0xCEC0, - 0x62ED, 0xE3D4, 0x62EE, 0xD1CF, 0x62EF, 0xF1F5, 0x62F1, 0xCDF2, - 0x62F3, 0xCFEB, 0x62F7, 0xCDB8, 0x62FE, 0xE3A6, 0x62FF, 0xD1DA, - 0x6301, 0xF2A5, 0x6307, 0xF2A6, 0x6309, 0xE4CE, 0x6311, 0xD3FB, - 0x632B, 0xF1A9, 0x632F, 0xF2C9, 0x633A, 0xEFD8, 0x633B, 0xE6C9, - 0x633D, 0xD8B8, 0x633E, 0xFAF3, 0x6349, 0xF3B5, 0x634C, 0xF8A4, - 0x634F, 0xD1F3, 0x6350, 0xE6C8, 0x6355, 0xF8DA, 0x6367, 0xDCE9, - 0x6368, 0xDED7, 0x636E, 0xCBDF, 0x6372, 0xCFEC, 0x6377, 0xF4DF, - 0x637A, 0xD1F4, 0x637B, 0xD2BA, 0x637F, 0xDFF2, 0x6383, 0xE1B7, - 0x6388, 0xE2A3, 0x6389, 0xD3FC, 0x638C, 0xEDE6, 0x6392, 0xDBC9, - 0x6396, 0xE4FA, 0x6398, 0xCFDE, 0x639B, 0xCED0, 0x63A0, 0xD5D3, - 0x63A1, 0xF3F5, 0x63A2, 0xF7AE, 0x63A5, 0xEFC8, 0x63A7, 0xCDF3, - 0x63A8, 0xF5CF, 0x63A9, 0xE5F3, 0x63AA, 0xF0C2, 0x63C0, 0xCAD1, - 0x63C4, 0xEAF1, 0x63C6, 0xD0A6, 0x63CF, 0xD9DA, 0x63D0, 0xF0AB, - 0x63D6, 0xEBE7, 0x63DA, 0xE5C0, 0x63DB, 0xFCB5, 0x63E1, 0xE4C4, - 0x63ED, 0xCCA9, 0x63EE, 0xFDC6, 0x63F4, 0xEAB5, 0x63F6, 0xE5AA, - 0x63F7, 0xDFBA, 0x640D, 0xE1DF, 0x640F, 0xDAD1, 0x6414, 0xE1B8, - 0x6416, 0xE8F4, 0x6417, 0xD3FD, 0x641C, 0xE2A4, 0x6422, 0xF2CA, - 0x642C, 0xDAE6, 0x642D, 0xF7B3, 0x643A, 0xFDCD, 0x643E, 0xF3B6, - 0x6458, 0xEED7, 0x6460, 0xF5C4, 0x6469, 0xD8A4, 0x646F, 0xF2A7, - 0x6478, 0xD9B8, 0x6479, 0xD9B9, 0x647A, 0xEFC9, 0x6488, 0xD6CE, - 0x6491, 0xF7CB, 0x6492, 0xDFAE, 0x6493, 0xE8F5, 0x649A, 0xD2B5, - 0x649E, 0xD3D5, 0x64A4, 0xF4CC, 0x64A5, 0xDAFC, 0x64AB, 0xD9E8, - 0x64AD, 0xF7EB, 0x64AE, 0xF5C9, 0x64B0, 0xF3BC, 0x64B2, 0xDAD2, - 0x64BB, 0xD3B5, 0x64C1, 0xE8B6, 0x64C4, 0xD6CF, 0x64C5, 0xF4BA, - 0x64C7, 0xF7C9, 0x64CA, 0xCCAA, 0x64CD, 0xF0C3, 0x64CE, 0xCCD6, - 0x64D2, 0xD0D3, 0x64D4, 0xD3BD, 0x64D8, 0xDBFB, 0x64DA, 0xCBE0, - 0x64E1, 0xD3E4, 0x64E2, 0xF6F7, 0x64E5, 0xD5BA, 0x64E6, 0xF3CD, - 0x64E7, 0xCBE1, 0x64EC, 0xEBF4, 0x64F2, 0xF4AD, 0x64F4, 0xFCAA, - 0x64FA, 0xF7EC, 0x64FE, 0xE8F6, 0x6500, 0xDAE7, 0x6504, 0xF7CC, - 0x6518, 0xE5C1, 0x651D, 0xE0EE, 0x6523, 0xD5FD, 0x652A, 0xCEE6, - 0x652B, 0xFCAB, 0x652C, 0xD5BB, 0x652F, 0xF2A8, 0x6536, 0xE2A5, - 0x6537, 0xCDB9, 0x6538, 0xEAF2, 0x6539, 0xCBC7, 0x653B, 0xCDF4, - 0x653E, 0xDBAF, 0x653F, 0xEFD9, 0x6545, 0xCDBA, 0x6548, 0xFCF9, - 0x654D, 0xDFF3, 0x654E, 0xCEE7, 0x654F, 0xDAC2, 0x6551, 0xCFAD, - 0x6556, 0xE7F9, 0x6557, 0xF8A8, 0x655E, 0xF3E2, 0x6562, 0xCAF2, - 0x6563, 0xDFA4, 0x6566, 0xD4C4, 0x656C, 0xCCD7, 0x656D, 0xE5C2, - 0x6572, 0xCDBB, 0x6574, 0xEFDA, 0x6575, 0xEED8, 0x6577, 0xDDA7, - 0x6578, 0xE2A6, 0x657E, 0xE0C0, 0x6582, 0xD6B0, 0x6583, 0xF8CA, - 0x6585, 0xFCFA, 0x6587, 0xD9FE, 0x658C, 0xDEB0, 0x6590, 0xDDEC, - 0x6591, 0xDAE8, 0x6597, 0xD4E0, 0x6599, 0xD6F9, 0x659B, 0xCDD7, - 0x659C, 0xDED8, 0x659F, 0xF2F8, 0x65A1, 0xE4D6, 0x65A4, 0xD0C5, - 0x65A5, 0xF4AE, 0x65A7, 0xDDA8, 0x65AB, 0xEDC5, 0x65AC, 0xF3D6, - 0x65AF, 0xDED9, 0x65B0, 0xE3E6, 0x65B7, 0xD3A8, 0x65B9, 0xDBB0, - 0x65BC, 0xE5DA, 0x65BD, 0xE3BF, 0x65C1, 0xDBB1, 0x65C5, 0xD5E9, - 0x65CB, 0xE0C1, 0x65CC, 0xEFDB, 0x65CF, 0xF0E9, 0x65D2, 0xD7B2, - 0x65D7, 0xD0FD, 0x65E0, 0xD9E9, 0x65E3, 0xD0FE, 0x65E5, 0xECED, - 0x65E6, 0xD3A9, 0x65E8, 0xF2A9, 0x65E9, 0xF0C4, 0x65EC, 0xE2E2, - 0x65ED, 0xE9EF, 0x65F1, 0xF9D1, 0x65F4, 0xE9D9, 0x65FA, 0xE8DA, - 0x65FB, 0xDAC3, 0x65FC, 0xDAC4, 0x65FD, 0xD4C5, 0x65FF, 0xE7FA, - 0x6606, 0xCDE0, 0x6607, 0xE3B0, 0x6609, 0xDBB2, 0x660A, 0xFBC4, - 0x660C, 0xF3E3, 0x660E, 0xD9A5, 0x660F, 0xFBE7, 0x6610, 0xDDCB, - 0x6611, 0xD0D4, 0x6613, 0xE6B6, 0x6614, 0xE0AE, 0x6615, 0xFDDA, - 0x661E, 0xDCB5, 0x661F, 0xE0F8, 0x6620, 0xE7B1, 0x6625, 0xF5F0, - 0x6627, 0xD8DC, 0x6628, 0xEDC6, 0x662D, 0xE1B9, 0x662F, 0xE3C0, - 0x6630, 0xF9C0, 0x6631, 0xE9F0, 0x6634, 0xD9DB, 0x6636, 0xF3E4, - 0x663A, 0xDCB6, 0x663B, 0xE4E9, 0x6641, 0xF0C5, 0x6642, 0xE3C1, - 0x6643, 0xFCCC, 0x6644, 0xFCCD, 0x6649, 0xF2CB, 0x664B, 0xF2CC, - 0x664F, 0xE4CF, 0x6659, 0xF1DB, 0x665B, 0xFAD9, 0x665D, 0xF1B8, - 0x665E, 0xFDF5, 0x665F, 0xE0F9, 0x6664, 0xE7FB, 0x6665, 0xFCB7, - 0x6666, 0xFCE4, 0x6667, 0xFBC5, 0x6668, 0xE3E7, 0x6669, 0xD8B9, - 0x666B, 0xF6F8, 0x666E, 0xDCC5, 0x666F, 0xCCD8, 0x6673, 0xE0AF, - 0x6674, 0xF4E7, 0x6676, 0xEFDC, 0x6677, 0xCFFC, 0x6678, 0xEFDD, - 0x667A, 0xF2AA, 0x6684, 0xFDBE, 0x6687, 0xCAAC, 0x6688, 0xFDBB, - 0x6689, 0xFDC7, 0x668E, 0xE7B2, 0x6690, 0xEAD1, 0x6691, 0xDFF4, - 0x6696, 0xD1EC, 0x6697, 0xE4DE, 0x6698, 0xE5C3, 0x669D, 0xD9A6, - 0x66A0, 0xCDBC, 0x66A2, 0xF3E5, 0x66AB, 0xEDD5, 0x66AE, 0xD9BA, - 0x66B2, 0xEDE7, 0x66B3, 0xFBB5, 0x66B4, 0xF8EC, 0x66B9, 0xE0E7, - 0x66BB, 0xCCD9, 0x66BE, 0xD4C6, 0x66C4, 0xE7A5, 0x66C6, 0xD5F5, - 0x66C7, 0xD3BE, 0x66C9, 0xFCFB, 0x66D6, 0xE4F2, 0x66D9, 0xDFF5, - 0x66DC, 0xE8F8, 0x66DD, 0xF8ED, 0x66E0, 0xCEC7, 0x66E6, 0xFDF6, - 0x66F0, 0xE8D8, 0x66F2, 0xCDD8, 0x66F3, 0xE7D6, 0x66F4, 0xCCDA, - 0x66F7, 0xCAE3, 0x66F8, 0xDFF6, 0x66F9, 0xF0C7, 0x66FA, 0xF0C6, - 0x66FC, 0xD8BA, 0x66FE, 0xF1F4, 0x66FF, 0xF4F0, 0x6700, 0xF5CC, - 0x6703, 0xFCE5, 0x6708, 0xEAC5, 0x6709, 0xEAF3, 0x670B, 0xDDDB, - 0x670D, 0xDCD7, 0x6714, 0xDEFD, 0x6715, 0xF2F9, 0x6717, 0xD5C7, - 0x671B, 0xD8D0, 0x671D, 0xF0C8, 0x671E, 0xD1A1, 0x671F, 0xD1A2, - 0x6726, 0xD9D4, 0x6727, 0xD6E8, 0x6728, 0xD9CA, 0x672A, 0xDAB1, - 0x672B, 0xD8C7, 0x672C, 0xDCE2, 0x672D, 0xF3CE, 0x672E, 0xF5F4, - 0x6731, 0xF1B9, 0x6734, 0xDAD3, 0x6736, 0xF6EA, 0x673A, 0xCFF5, - 0x673D, 0xFDAE, 0x6746, 0xCAD2, 0x6749, 0xDFB4, 0x674E, 0xD7DD, - 0x674F, 0xFABA, 0x6750, 0xEEA7, 0x6751, 0xF5BD, 0x6753, 0xF8F5, - 0x6756, 0xEDE8, 0x675C, 0xD4E1, 0x675E, 0xD1A3, 0x675F, 0xE1D6, - 0x676D, 0xF9F8, 0x676F, 0xDBCA, 0x6770, 0xCBF9, 0x6771, 0xD4D4, - 0x6773, 0xD9DC, 0x6775, 0xEEBE, 0x6777, 0xF7ED, 0x677B, 0xD2EE, - 0x677E, 0xE1E6, 0x677F, 0xF7F9, 0x6787, 0xDDED, 0x6789, 0xE8DB, - 0x678B, 0xDBB3, 0x678F, 0xD1F7, 0x6790, 0xE0B0, 0x6793, 0xD4E2, - 0x6795, 0xF6D7, 0x6797, 0xD7F9, 0x679A, 0xD8DD, 0x679C, 0xCDFD, - 0x679D, 0xF2AB, 0x67AF, 0xCDBD, 0x67B0, 0xF8C2, 0x67B3, 0xF2AC, - 0x67B6, 0xCAAD, 0x67B7, 0xCAAE, 0x67B8, 0xCFAE, 0x67BE, 0xE3C2, - 0x67C4, 0xDCB7, 0x67CF, 0xDBDA, 0x67D0, 0xD9BB, 0x67D1, 0xCAF3, - 0x67D2, 0xF6D3, 0x67D3, 0xE6F8, 0x67D4, 0xEAF5, 0x67DA, 0xEAF6, - 0x67DD, 0xF6F9, 0x67E9, 0xCFAF, 0x67EC, 0xCAD3, 0x67EF, 0xCAAF, - 0x67F0, 0xD2B0, 0x67F1, 0xF1BA, 0x67F3, 0xD7B3, 0x67F4, 0xE3C3, - 0x67F5, 0xF3FD, 0x67F6, 0xDEDA, 0x67FB, 0xDEDB, 0x67FE, 0xEFDE, - 0x6812, 0xE2E3, 0x6813, 0xEEFB, 0x6816, 0xDFF7, 0x6817, 0xD7CA, - 0x6821, 0xCEE8, 0x6822, 0xDBDB, 0x682A, 0xF1BB, 0x682F, 0xE9F1, - 0x6838, 0xFAB7, 0x6839, 0xD0C6, 0x683C, 0xCCAB, 0x683D, 0xEEA8, - 0x6840, 0xCBFA, 0x6841, 0xF9F9, 0x6842, 0xCCFD, 0x6843, 0xD3FE, - 0x6848, 0xE4D0, 0x684E, 0xF2EE, 0x6850, 0xD4D5, 0x6851, 0xDFCD, - 0x6853, 0xFCB8, 0x6854, 0xD1D0, 0x686D, 0xF2CD, 0x6876, 0xF7D2, - 0x687F, 0xCAD4, 0x6881, 0xD5D9, 0x6885, 0xD8DE, 0x688F, 0xCDD9, - 0x6893, 0xEEA9, 0x6894, 0xF6BC, 0x6897, 0xCCDB, 0x689D, 0xF0C9, - 0x689F, 0xFCFC, 0x68A1, 0xE8C9, 0x68A2, 0xF4FE, 0x68A7, 0xE7FC, - 0x68A8, 0xD7DE, 0x68AD, 0xDEDC, 0x68AF, 0xF0AC, 0x68B0, 0xCCFE, - 0x68B1, 0xCDE1, 0x68B3, 0xE1BA, 0x68B5, 0xDBEF, 0x68B6, 0xDAB2, - 0x68C4, 0xD1A5, 0x68C5, 0xDCB8, 0x68C9, 0xD8F6, 0x68CB, 0xD1A4, - 0x68CD, 0xCDE2, 0x68D2, 0xDCEA, 0x68D5, 0xF0F7, 0x68D7, 0xF0CA, - 0x68D8, 0xD0BE, 0x68DA, 0xDDDC, 0x68DF, 0xD4D6, 0x68E0, 0xD3D6, - 0x68E7, 0xEDD0, 0x68E8, 0xCDA1, 0x68EE, 0xDFB5, 0x68F2, 0xDFF8, - 0x68F9, 0xD4A1, 0x68FA, 0xCEB2, 0x6900, 0xE8CA, 0x6905, 0xEBF5, - 0x690D, 0xE3D5, 0x690E, 0xF5D0, 0x6912, 0xF5A1, 0x6927, 0xD9A7, - 0x6930, 0xE5AB, 0x693D, 0xE6CB, 0x693F, 0xF5F1, 0x694A, 0xE5C5, - 0x6953, 0xF9A3, 0x6954, 0xE0DB, 0x6955, 0xF6EB, 0x6957, 0xCBF1, - 0x6959, 0xD9EA, 0x695A, 0xF5A2, 0x695E, 0xD7D1, 0x6960, 0xD1F8, - 0x6961, 0xEAF8, 0x6962, 0xEAF9, 0x6963, 0xDAB3, 0x6968, 0xEFDF, - 0x696B, 0xF1EF, 0x696D, 0xE5F6, 0x696E, 0xEEBF, 0x696F, 0xE2E4, - 0x6975, 0xD0BF, 0x6977, 0xFAAC, 0x6978, 0xF5D1, 0x6979, 0xE7B3, - 0x6995, 0xE9BE, 0x699B, 0xF2CE, 0x699C, 0xDBB4, 0x69A5, 0xFCCE, - 0x69A7, 0xDDEE, 0x69AE, 0xE7B4, 0x69B4, 0xD7B4, 0x69BB, 0xF7B4, - 0x69C1, 0xCDBE, 0x69C3, 0xDAE9, 0x69CB, 0xCFB0, 0x69CC, 0xF7D9, - 0x69CD, 0xF3E6, 0x69D0, 0xCED9, 0x69E8, 0xCEAA, 0x69EA, 0xCBC8, - 0x69FB, 0xD0A7, 0x69FD, 0xF0CB, 0x69FF, 0xD0C7, 0x6A02, 0xE4C5, - 0x6A0A, 0xDBE0, 0x6A11, 0xD5DA, 0x6A13, 0xD7A7, 0x6A17, 0xEEC0, - 0x6A19, 0xF8F6, 0x6A1E, 0xF5D2, 0x6A1F, 0xEDE9, 0x6A21, 0xD9BC, - 0x6A23, 0xE5C6, 0x6A35, 0xF5A3, 0x6A38, 0xDAD4, 0x6A39, 0xE2A7, - 0x6A3A, 0xFBFC, 0x6A3D, 0xF1DC, 0x6A44, 0xCAF4, 0x6A48, 0xE8FA, - 0x6A4B, 0xCEE9, 0x6A52, 0xE9F8, 0x6A53, 0xE2E5, 0x6A58, 0xD0B9, - 0x6A59, 0xD4F2, 0x6A5F, 0xD1A6, 0x6A61, 0xDFCE, 0x6A6B, 0xFCF4, - 0x6A80, 0xD3AA, 0x6A84, 0xCCAC, 0x6A89, 0xEFE0, 0x6A8D, 0xE5E5, - 0x6A8E, 0xD0D5, 0x6A97, 0xDBFC, 0x6A9C, 0xFCE6, 0x6AA2, 0xCBFE, - 0x6AA3, 0xEDEA, 0x6AB3, 0xDEB1, 0x6ABB, 0xF9E3, 0x6AC2, 0xD4A2, - 0x6AC3, 0xCFF6, 0x6AD3, 0xD6D0, 0x6ADA, 0xD5EA, 0x6ADB, 0xF1EE, - 0x6AF6, 0xFACB, 0x6AFB, 0xE5A1, 0x6B04, 0xD5B1, 0x6B0A, 0xCFED, - 0x6B0C, 0xEDEB, 0x6B12, 0xD5B2, 0x6B16, 0xD5BC, 0x6B20, 0xFDE2, - 0x6B21, 0xF3AD, 0x6B23, 0xFDDB, 0x6B32, 0xE9B0, 0x6B3A, 0xD1A7, - 0x6B3D, 0xFDE3, 0x6B3E, 0xCEB3, 0x6B46, 0xFDE4, 0x6B47, 0xFACE, - 0x6B4C, 0xCAB0, 0x6B4E, 0xF7A7, 0x6B50, 0xCFB1, 0x6B5F, 0xE6A2, - 0x6B61, 0xFCB6, 0x6B62, 0xF2AD, 0x6B63, 0xEFE1, 0x6B64, 0xF3AE, - 0x6B65, 0xDCC6, 0x6B66, 0xD9EB, 0x6B6A, 0xE8E0, 0x6B72, 0xE1A8, - 0x6B77, 0xD5F6, 0x6B78, 0xCFFD, 0x6B7B, 0xDEDD, 0x6B7F, 0xD9D1, - 0x6B83, 0xE4EA, 0x6B84, 0xF2CF, 0x6B86, 0xF7BF, 0x6B89, 0xE2E6, - 0x6B8A, 0xE2A8, 0x6B96, 0xE3D6, 0x6B98, 0xEDD1, 0x6B9E, 0xE9F9, - 0x6BAE, 0xD6B1, 0x6BAF, 0xDEB2, 0x6BB2, 0xE0E8, 0x6BB5, 0xD3AB, - 0x6BB7, 0xEBDC, 0x6BBA, 0xDFAF, 0x6BBC, 0xCAC3, 0x6BBF, 0xEEFC, - 0x6BC1, 0xFDC3, 0x6BC5, 0xEBF6, 0x6BC6, 0xCFB2, 0x6BCB, 0xD9EC, - 0x6BCD, 0xD9BD, 0x6BCF, 0xD8DF, 0x6BD2, 0xD4B8, 0x6BD3, 0xEBBE, - 0x6BD4, 0xDDEF, 0x6BD6, 0xDDF0, 0x6BD7, 0xDDF1, 0x6BD8, 0xDDF2, - 0x6BDB, 0xD9BE, 0x6BEB, 0xFBC6, 0x6BEC, 0xCFB3, 0x6C08, 0xEEFD, - 0x6C0F, 0xE4AB, 0x6C11, 0xDAC5, 0x6C13, 0xD8EC, 0x6C23, 0xD1A8, - 0x6C34, 0xE2A9, 0x6C37, 0xDEBC, 0x6C38, 0xE7B5, 0x6C3E, 0xDBF0, - 0x6C40, 0xEFE2, 0x6C41, 0xF1F0, 0x6C42, 0xCFB4, 0x6C4E, 0xDBF1, - 0x6C50, 0xE0B1, 0x6C55, 0xDFA5, 0x6C57, 0xF9D2, 0x6C5A, 0xE7FD, - 0x6C5D, 0xE6A3, 0x6C5E, 0xFBF1, 0x6C5F, 0xCBB0, 0x6C60, 0xF2AE, - 0x6C68, 0xCDE7, 0x6C6A, 0xE8DC, 0x6C6D, 0xE7D7, 0x6C70, 0xF7C0, - 0x6C72, 0xD0E3, 0x6C76, 0xDAA1, 0x6C7A, 0xCCBD, 0x6C7D, 0xD1A9, - 0x6C7E, 0xDDCC, 0x6C81, 0xE3FE, 0x6C82, 0xD1AA, 0x6C83, 0xE8AA, - 0x6C85, 0xEAB6, 0x6C86, 0xF9FA, 0x6C87, 0xE6CC, 0x6C88, 0xF6D8, - 0x6C8C, 0xD4C7, 0x6C90, 0xD9CB, 0x6C92, 0xD9D2, 0x6C93, 0xD3CB, - 0x6C94, 0xD8F7, 0x6C95, 0xDAA9, 0x6C96, 0xF5F8, 0x6C99, 0xDEDE, - 0x6C9A, 0xF2AF, 0x6C9B, 0xF8A9, 0x6CAB, 0xD8C8, 0x6CAE, 0xEEC1, - 0x6CB3, 0xF9C1, 0x6CB8, 0xDDF3, 0x6CB9, 0xEAFA, 0x6CBB, 0xF6BD, - 0x6CBC, 0xE1BB, 0x6CBD, 0xCDBF, 0x6CBE, 0xF4D4, 0x6CBF, 0xE6CD, - 0x6CC1, 0xFCCF, 0x6CC2, 0xFBA2, 0x6CC4, 0xE0DC, 0x6CC9, 0xF4BB, - 0x6CCA, 0xDAD5, 0x6CCC, 0xF9B2, 0x6CD3, 0xFBF2, 0x6CD5, 0xDBF6, - 0x6CD7, 0xDEDF, 0x6CDB, 0xDBF2, 0x6CE1, 0xF8DC, 0x6CE2, 0xF7EE, - 0x6CE3, 0xEBE8, 0x6CE5, 0xD2FA, 0x6CE8, 0xF1BC, 0x6CEB, 0xFADA, - 0x6CEE, 0xDAEA, 0x6CEF, 0xDAC6, 0x6CF0, 0xF7C1, 0x6CF3, 0xE7B6, - 0x6D0B, 0xE5C7, 0x6D0C, 0xD6AC, 0x6D11, 0xDCC7, 0x6D17, 0xE1A9, - 0x6D19, 0xE2AA, 0x6D1B, 0xD5A6, 0x6D1E, 0xD4D7, 0x6D25, 0xF2D0, - 0x6D27, 0xEAFB, 0x6D29, 0xE0DD, 0x6D2A, 0xFBF3, 0x6D32, 0xF1BD, - 0x6D35, 0xE2E7, 0x6D36, 0xFDD7, 0x6D38, 0xCEC8, 0x6D39, 0xEAB7, - 0x6D3B, 0xFCC0, 0x6D3D, 0xFDE7, 0x6D3E, 0xF7EF, 0x6D41, 0xD7B5, - 0x6D59, 0xEFBA, 0x6D5A, 0xF1DD, 0x6D5C, 0xDEB3, 0x6D63, 0xE8CB, - 0x6D66, 0xF8DD, 0x6D69, 0xFBC7, 0x6D6A, 0xD5C8, 0x6D6C, 0xD7DF, - 0x6D6E, 0xDDA9, 0x6D74, 0xE9B1, 0x6D77, 0xFAAD, 0x6D78, 0xF6D9, - 0x6D79, 0xFAF4, 0x6D7F, 0xF8AA, 0x6D85, 0xE6EE, 0x6D87, 0xCCDC, - 0x6D88, 0xE1BC, 0x6D89, 0xE0EF, 0x6D8C, 0xE9BF, 0x6D8D, 0xFCFD, - 0x6D8E, 0xE6CE, 0x6D91, 0xE1D7, 0x6D93, 0xE6CF, 0x6D95, 0xF4F1, - 0x6DAF, 0xE4F3, 0x6DB2, 0xE4FB, 0x6DB5, 0xF9E4, 0x6DC0, 0xEFE3, - 0x6DC3, 0xCFEE, 0x6DC4, 0xF6BE, 0x6DC5, 0xE0B2, 0x6DC6, 0xFCFE, - 0x6DC7, 0xD1AB, 0x6DCB, 0xD7FA, 0x6DCF, 0xFBC8, 0x6DD1, 0xE2D7, - 0x6DD8, 0xD4A3, 0x6DD9, 0xF0F8, 0x6DDA, 0xD7A8, 0x6DDE, 0xE1E7, - 0x6DE1, 0xD3BF, 0x6DE8, 0xEFE4, 0x6DEA, 0xD7C5, 0x6DEB, 0xEBE2, - 0x6DEE, 0xFCE7, 0x6DF1, 0xE4A2, 0x6DF3, 0xE2E8, 0x6DF5, 0xE6D0, - 0x6DF7, 0xFBE8, 0x6DF8, 0xF4E8, 0x6DF9, 0xE5F4, 0x6DFA, 0xF4BC, - 0x6DFB, 0xF4D5, 0x6E17, 0xDFB6, 0x6E19, 0xFCB9, 0x6E1A, 0xEEC2, - 0x6E1B, 0xCAF5, 0x6E1F, 0xEFE5, 0x6E20, 0xCBE2, 0x6E21, 0xD4A4, - 0x6E23, 0xDEE0, 0x6E24, 0xDAFD, 0x6E25, 0xE4C6, 0x6E26, 0xE8BE, - 0x6E2B, 0xE0DE, 0x6E2C, 0xF6B4, 0x6E2D, 0xEAD2, 0x6E2F, 0xF9FB, - 0x6E32, 0xE0C2, 0x6E34, 0xCAE4, 0x6E36, 0xE7B7, 0x6E38, 0xEAFD, - 0x6E3A, 0xD9DD, 0x6E3C, 0xDAB4, 0x6E3D, 0xEEAA, 0x6E3E, 0xFBE9, - 0x6E43, 0xDBCB, 0x6E44, 0xDAB5, 0x6E4A, 0xF1BE, 0x6E4D, 0xD3AC, - 0x6E56, 0xFBC9, 0x6E58, 0xDFCF, 0x6E5B, 0xD3C0, 0x6E5C, 0xE3D7, - 0x6E5E, 0xEFE6, 0x6E5F, 0xFCD0, 0x6E67, 0xE9C0, 0x6E6B, 0xF5D3, - 0x6E6E, 0xECDC, 0x6E6F, 0xF7B7, 0x6E72, 0xEAB8, 0x6E73, 0xD1F9, - 0x6E7A, 0xDCC8, 0x6E90, 0xEAB9, 0x6E96, 0xF1DE, 0x6E9C, 0xD7B6, - 0x6E9D, 0xCFB5, 0x6E9F, 0xD9A8, 0x6EA2, 0xECEE, 0x6EA5, 0xDDAA, - 0x6EAA, 0xCDA2, 0x6EAB, 0xE8AE, 0x6EAF, 0xE1BD, 0x6EB1, 0xF2D1, - 0x6EB6, 0xE9C1, 0x6EBA, 0xD2FC, 0x6EC2, 0xDBB5, 0x6EC4, 0xF3E7, - 0x6EC5, 0xD8FE, 0x6EC9, 0xFCD1, 0x6ECB, 0xEDB2, 0x6ECC, 0xF4AF, - 0x6ECE, 0xFBA3, 0x6ED1, 0xFCC1, 0x6ED3, 0xEEAB, 0x6ED4, 0xD4A5, - 0x6EEF, 0xF4F2, 0x6EF4, 0xEED9, 0x6EF8, 0xFBCA, 0x6EFE, 0xCDE3, - 0x6EFF, 0xD8BB, 0x6F01, 0xE5DB, 0x6F02, 0xF8F7, 0x6F06, 0xF6D4, - 0x6F0F, 0xD7A9, 0x6F11, 0xCBC9, 0x6F14, 0xE6D1, 0x6F15, 0xF0CC, - 0x6F20, 0xD8AE, 0x6F22, 0xF9D3, 0x6F23, 0xD5FE, 0x6F2B, 0xD8BC, - 0x6F2C, 0xF2B0, 0x6F31, 0xE2AB, 0x6F32, 0xF3E8, 0x6F38, 0xEFC2, - 0x6F3F, 0xEDEC, 0x6F41, 0xE7B8, 0x6F51, 0xDAFE, 0x6F54, 0xCCBE, - 0x6F57, 0xF2FC, 0x6F58, 0xDAEB, 0x6F5A, 0xE2D8, 0x6F5B, 0xEDD6, - 0x6F5E, 0xD6D1, 0x6F5F, 0xE0B3, 0x6F62, 0xFCD2, 0x6F64, 0xEBC8, - 0x6F6D, 0xD3C1, 0x6F6E, 0xF0CD, 0x6F70, 0xCFF7, 0x6F7A, 0xEDD2, - 0x6F7C, 0xD4D8, 0x6F7D, 0xDCC9, 0x6F7E, 0xD7F1, 0x6F81, 0xDFBB, - 0x6F84, 0xF3A5, 0x6F88, 0xF4CD, 0x6F8D, 0xF1BF, 0x6F8E, 0xF8B1, - 0x6F90, 0xE9FA, 0x6F94, 0xFBCB, 0x6F97, 0xCAD5, 0x6FA3, 0xF9D4, - 0x6FA4, 0xF7CA, 0x6FA7, 0xD6C8, 0x6FAE, 0xFCE8, 0x6FAF, 0xF3BD, - 0x6FB1, 0xEEFE, 0x6FB3, 0xE7FE, 0x6FB9, 0xD3C2, 0x6FBE, 0xD3B6, - 0x6FC0, 0xCCAD, 0x6FC1, 0xF6FA, 0x6FC2, 0xD6B2, 0x6FC3, 0xD2D8, - 0x6FCA, 0xE7D8, 0x6FD5, 0xE3A5, 0x6FDA, 0xE7B9, 0x6FDF, 0xF0AD, - 0x6FE0, 0xFBCC, 0x6FE1, 0xEBA1, 0x6FE4, 0xD4A6, 0x6FE9, 0xFBCD, - 0x6FEB, 0xD5BD, 0x6FEC, 0xF1DF, 0x6FEF, 0xF6FB, 0x6FF1, 0xDEB4, - 0x6FFE, 0xD5EB, 0x7001, 0xE5C8, 0x7005, 0xFBA4, 0x7006, 0xD4B9, - 0x7009, 0xDEE1, 0x700B, 0xE4A3, 0x700F, 0xD7B7, 0x7011, 0xF8EE, - 0x7015, 0xDEB5, 0x7018, 0xD6D2, 0x701A, 0xF9D5, 0x701B, 0xE7BA, - 0x701C, 0xEBD5, 0x701D, 0xD5F7, 0x701E, 0xEFE7, 0x701F, 0xE1BE, - 0x7023, 0xFAAE, 0x7027, 0xD6E9, 0x7028, 0xD6EE, 0x702F, 0xE7BB, - 0x7037, 0xECCB, 0x703E, 0xD5B3, 0x704C, 0xCEB4, 0x7050, 0xFBA5, - 0x7051, 0xE1EE, 0x7058, 0xF7A8, 0x705D, 0xFBCE, 0x7063, 0xD8BD, - 0x706B, 0xFBFD, 0x7070, 0xFCE9, 0x7078, 0xCFB6, 0x707C, 0xEDC7, - 0x707D, 0xEEAC, 0x7085, 0xCCDD, 0x708A, 0xF6A7, 0x708E, 0xE6FA, - 0x7092, 0xF5A4, 0x7098, 0xFDDC, 0x7099, 0xEDB3, 0x709A, 0xCEC9, - 0x70A1, 0xEFE8, 0x70A4, 0xE1BF, 0x70AB, 0xFADB, 0x70AC, 0xCBE3, - 0x70AD, 0xF7A9, 0x70AF, 0xFBA6, 0x70B3, 0xDCB9, 0x70B7, 0xF1C0, - 0x70B8, 0xEDC8, 0x70B9, 0xEFC3, 0x70C8, 0xD6AD, 0x70CB, 0xFDCE, - 0x70CF, 0xE8A1, 0x70D8, 0xFBF4, 0x70D9, 0xD5A7, 0x70DD, 0xF1F6, - 0x70DF, 0xE6D3, 0x70F1, 0xCCDE, 0x70F9, 0xF8B2, 0x70FD, 0xDCEB, - 0x7104, 0xFDB6, 0x7109, 0xE5EA, 0x710C, 0xF1E0, 0x7119, 0xDBCC, - 0x711A, 0xDDCD, 0x711E, 0xD4C8, 0x7121, 0xD9ED, 0x7126, 0xF5A5, - 0x7130, 0xE6FB, 0x7136, 0xE6D4, 0x7147, 0xFDC8, 0x7149, 0xD6A1, - 0x714A, 0xFDBF, 0x714C, 0xFCD3, 0x714E, 0xEFA1, 0x7150, 0xE7BC, - 0x7156, 0xD1EE, 0x7159, 0xE6D5, 0x715C, 0xE9F2, 0x715E, 0xDFB0, - 0x7164, 0xD8E0, 0x7165, 0xFCBA, 0x7166, 0xFDAF, 0x7167, 0xF0CE, - 0x7169, 0xDBE1, 0x716C, 0xE5C9, 0x716E, 0xEDB4, 0x717D, 0xE0C3, - 0x7184, 0xE3D8, 0x7189, 0xE9FB, 0x718A, 0xEAA8, 0x718F, 0xFDB7, - 0x7192, 0xFBA7, 0x7194, 0xE9C2, 0x7199, 0xFDF7, 0x719F, 0xE2D9, - 0x71A2, 0xDCEC, 0x71AC, 0xE8A2, 0x71B1, 0xE6F0, 0x71B9, 0xFDF8, - 0x71BA, 0xFDF9, 0x71BE, 0xF6BF, 0x71C1, 0xE7A7, 0x71C3, 0xE6D7, - 0x71C8, 0xD4F3, 0x71C9, 0xD4C9, 0x71CE, 0xD6FA, 0x71D0, 0xD7F2, - 0x71D2, 0xE1C0, 0x71D4, 0xDBE2, 0x71D5, 0xE6D8, 0x71DF, 0xE7BD, - 0x71E5, 0xF0CF, 0x71E6, 0xF3BE, 0x71E7, 0xE2AC, 0x71ED, 0xF5B7, - 0x71EE, 0xE0F0, 0x71FB, 0xFDB8, 0x71FC, 0xE3E8, 0x71FE, 0xD4A7, - 0x71FF, 0xE8FC, 0x7200, 0xFAD2, 0x7206, 0xF8EF, 0x7210, 0xD6D3, - 0x721B, 0xD5B4, 0x722A, 0xF0D0, 0x722C, 0xF7F0, 0x722D, 0xEEB3, - 0x7230, 0xEABA, 0x7232, 0xEAD3, 0x7235, 0xEDC9, 0x7236, 0xDDAB, - 0x723A, 0xE5AC, 0x723B, 0xFDA1, 0x723D, 0xDFD0, 0x723E, 0xECB3, - 0x7240, 0xDFD1, 0x7246, 0xEDED, 0x7247, 0xF8B8, 0x7248, 0xF7FA, - 0x724C, 0xF8AB, 0x7252, 0xF4E0, 0x7258, 0xD4BA, 0x7259, 0xE4B3, - 0x725B, 0xE9DA, 0x725D, 0xDEB6, 0x725F, 0xD9BF, 0x7261, 0xD9C0, - 0x7262, 0xD6EF, 0x7267, 0xD9CC, 0x7269, 0xDAAA, 0x7272, 0xDFE5, - 0x7279, 0xF7E5, 0x727D, 0xCCB2, 0x7280, 0xDFF9, 0x7281, 0xD7E0, - 0x72A2, 0xD4BB, 0x72A7, 0xFDFA, 0x72AC, 0xCCB3, 0x72AF, 0xDBF3, - 0x72C0, 0xDFD2, 0x72C2, 0xCECA, 0x72C4, 0xEEDA, 0x72CE, 0xE4E4, - 0x72D0, 0xFBCF, 0x72D7, 0xCFB7, 0x72D9, 0xEEC3, 0x72E1, 0xCEEA, - 0x72E9, 0xE2AD, 0x72F8, 0xD7E1, 0x72F9, 0xFAF5, 0x72FC, 0xD5C9, - 0x72FD, 0xF8AC, 0x730A, 0xE7D9, 0x7316, 0xF3E9, 0x731B, 0xD8ED, - 0x731C, 0xE3C4, 0x731D, 0xF0F1, 0x7325, 0xE8E5, 0x7329, 0xE0FA, - 0x732A, 0xEEC4, 0x732B, 0xD9DE, 0x7336, 0xEBA2, 0x7337, 0xEBA3, - 0x733E, 0xFCC2, 0x733F, 0xEABB, 0x7344, 0xE8AB, 0x7345, 0xDEE2, - 0x7350, 0xEDEF, 0x7352, 0xE8A3, 0x7357, 0xCFF1, 0x7368, 0xD4BC, - 0x736A, 0xFCEA, 0x7370, 0xE7BE, 0x7372, 0xFCF2, 0x7375, 0xD6B4, - 0x7378, 0xE2AE, 0x737A, 0xD3B7, 0x737B, 0xFACC, 0x7384, 0xFADC, - 0x7386, 0xEDB5, 0x7387, 0xE1E3, 0x7389, 0xE8AC, 0x738B, 0xE8DD, - 0x738E, 0xEFE9, 0x7394, 0xF4BD, 0x7396, 0xCFB8, 0x7397, 0xE9DB, - 0x7398, 0xD1AC, 0x739F, 0xDAC7, 0x73A7, 0xEBC9, 0x73A9, 0xE8CC, - 0x73AD, 0xDEB7, 0x73B2, 0xD6BC, 0x73B3, 0xD3E5, 0x73B9, 0xFADD, - 0x73C0, 0xDAD6, 0x73C2, 0xCAB1, 0x73C9, 0xDAC8, 0x73CA, 0xDFA6, - 0x73CC, 0xF9B3, 0x73CD, 0xF2D2, 0x73CF, 0xCAC4, 0x73D6, 0xCECB, - 0x73D9, 0xCDF5, 0x73DD, 0xFDB0, 0x73DE, 0xD5A8, 0x73E0, 0xF1C1, - 0x73E3, 0xE2E9, 0x73E4, 0xDCCA, 0x73E5, 0xECB4, 0x73E6, 0xFAC0, - 0x73E9, 0xFBA8, 0x73EA, 0xD0A8, 0x73ED, 0xDAEC, 0x73F7, 0xD9EE, - 0x73F9, 0xE0FB, 0x73FD, 0xEFEA, 0x73FE, 0xFADE, 0x7401, 0xE0C4, - 0x7403, 0xCFB9, 0x7405, 0xD5CA, 0x7406, 0xD7E2, 0x7407, 0xE2AF, - 0x7409, 0xD7B8, 0x7413, 0xE8CD, 0x741B, 0xF6DA, 0x7420, 0xEFA2, - 0x7421, 0xE2DA, 0x7422, 0xF6FC, 0x7425, 0xFBD0, 0x7426, 0xD1AD, - 0x7428, 0xCDE4, 0x742A, 0xD1AE, 0x742B, 0xDCED, 0x742C, 0xE8CE, - 0x742E, 0xF0F9, 0x742F, 0xCEB5, 0x7430, 0xE6FC, 0x7433, 0xD7FB, - 0x7434, 0xD0D6, 0x7435, 0xDDF5, 0x7436, 0xF7F1, 0x7438, 0xF6FD, - 0x743A, 0xDBF7, 0x743F, 0xFBEA, 0x7440, 0xE9DC, 0x7441, 0xD9C1, - 0x7443, 0xF5F2, 0x7444, 0xE0C5, 0x744B, 0xEAD4, 0x7455, 0xF9C2, - 0x7457, 0xEABC, 0x7459, 0xD2C5, 0x745A, 0xFBD1, 0x745B, 0xE7C0, - 0x745C, 0xEBA5, 0x745E, 0xDFFA, 0x745F, 0xE3A2, 0x7460, 0xD7B9, - 0x7462, 0xE9C3, 0x7464, 0xE8FD, 0x7465, 0xE8AF, 0x7468, 0xF2D3, - 0x7469, 0xFBA9, 0x746A, 0xD8A5, 0x746F, 0xD5CB, 0x747E, 0xD0C8, - 0x7482, 0xD1AF, 0x7483, 0xD7E3, 0x7487, 0xE0C6, 0x7489, 0xD6A2, - 0x748B, 0xEDF0, 0x7498, 0xD7F3, 0x749C, 0xFCD4, 0x749E, 0xDAD7, - 0x749F, 0xCCDF, 0x74A1, 0xF2D4, 0x74A3, 0xD1B0, 0x74A5, 0xCCE0, - 0x74A7, 0xDBFD, 0x74A8, 0xF3BF, 0x74AA, 0xF0D1, 0x74B0, 0xFCBB, - 0x74B2, 0xE2B0, 0x74B5, 0xE6A5, 0x74B9, 0xE2DB, 0x74BD, 0xDFDE, - 0x74BF, 0xE0C7, 0x74C6, 0xF2EF, 0x74CA, 0xCCE1, 0x74CF, 0xD6EA, - 0x74D4, 0xE7C2, 0x74D8, 0xCEB6, 0x74DA, 0xF3C0, 0x74DC, 0xCDFE, - 0x74E0, 0xFBD2, 0x74E2, 0xF8F8, 0x74E3, 0xF7FB, 0x74E6, 0xE8BF, - 0x74EE, 0xE8B7, 0x74F7, 0xEDB6, 0x7501, 0xDCBA, 0x7504, 0xCCB4, - 0x7511, 0xF1F7, 0x7515, 0xE8B8, 0x7518, 0xCAF6, 0x751A, 0xE4A4, - 0x751B, 0xF4D6, 0x751F, 0xDFE6, 0x7523, 0xDFA7, 0x7525, 0xDFE7, - 0x7526, 0xE1C1, 0x7528, 0xE9C4, 0x752B, 0xDCCB, 0x752C, 0xE9C5, - 0x7530, 0xEFA3, 0x7531, 0xEBA6, 0x7532, 0xCBA3, 0x7533, 0xE3E9, - 0x7537, 0xD1FB, 0x7538, 0xEFA4, 0x753A, 0xEFEB, 0x7547, 0xD0B4, - 0x754C, 0xCDA3, 0x754F, 0xE8E6, 0x7551, 0xEFA5, 0x7553, 0xD3CC, - 0x7554, 0xDAED, 0x7559, 0xD7BA, 0x755B, 0xF2D5, 0x755C, 0xF5E5, - 0x755D, 0xD9EF, 0x7562, 0xF9B4, 0x7565, 0xD5D4, 0x7566, 0xFDCF, - 0x756A, 0xDBE3, 0x756F, 0xF1E1, 0x7570, 0xECB6, 0x7575, 0xFBFE, - 0x7576, 0xD3D7, 0x7578, 0xD1B1, 0x757A, 0xCBB1, 0x757F, 0xD1B2, - 0x7586, 0xCBB2, 0x7587, 0xF1C2, 0x758A, 0xF4E1, 0x758B, 0xF9B5, - 0x758E, 0xE1C3, 0x758F, 0xE1C2, 0x7591, 0xEBF7, 0x759D, 0xDFA8, - 0x75A5, 0xCBCA, 0x75AB, 0xE6B9, 0x75B1, 0xF8DE, 0x75B2, 0xF9AA, - 0x75B3, 0xCAF7, 0x75B5, 0xEDB7, 0x75B8, 0xD3B8, 0x75B9, 0xF2D6, - 0x75BC, 0xD4D9, 0x75BD, 0xEEC5, 0x75BE, 0xF2F0, 0x75C2, 0xCAB2, - 0x75C5, 0xDCBB, 0x75C7, 0xF1F8, 0x75CD, 0xECB7, 0x75D2, 0xE5CA, - 0x75D4, 0xF6C0, 0x75D5, 0xFDDD, 0x75D8, 0xD4E3, 0x75D9, 0xCCE2, - 0x75DB, 0xF7D4, 0x75E2, 0xD7E5, 0x75F0, 0xD3C3, 0x75F2, 0xD8A6, - 0x75F4, 0xF6C1, 0x75FA, 0xDDF6, 0x75FC, 0xCDC0, 0x7600, 0xE5DC, - 0x760D, 0xE5CB, 0x7619, 0xE1C4, 0x761F, 0xE8B0, 0x7620, 0xF4B0, - 0x7621, 0xF3EA, 0x7622, 0xDAEE, 0x7624, 0xD7BB, 0x7626, 0xE2B1, - 0x763B, 0xD7AA, 0x7642, 0xD6FB, 0x764C, 0xE4DF, 0x764E, 0xCAD6, - 0x7652, 0xEBA8, 0x7656, 0xDBFE, 0x7661, 0xF6C2, 0x7664, 0xEFBB, - 0x7669, 0xD4FD, 0x766C, 0xE0C8, 0x7670, 0xE8B9, 0x7672, 0xEFA6, - 0x7678, 0xCDA4, 0x767B, 0xD4F4, 0x767C, 0xDBA1, 0x767D, 0xDBDC, - 0x767E, 0xDBDD, 0x7684, 0xEEDC, 0x7686, 0xCBCB, 0x7687, 0xFCD5, - 0x768E, 0xCEEB, 0x7690, 0xCDC1, 0x7693, 0xFBD3, 0x76AE, 0xF9AB, - 0x76BA, 0xF5D4, 0x76BF, 0xD9A9, 0x76C2, 0xE9DD, 0x76C3, 0xDBCD, - 0x76C6, 0xDDCE, 0x76C8, 0xE7C3, 0x76CA, 0xECCC, 0x76D2, 0xF9EC, - 0x76D6, 0xCBCC, 0x76DB, 0xE0FC, 0x76DC, 0xD4A8, 0x76DE, 0xEDD3, - 0x76DF, 0xD8EF, 0x76E1, 0xF2D7, 0x76E3, 0xCAF8, 0x76E4, 0xDAEF, - 0x76E7, 0xD6D4, 0x76EE, 0xD9CD, 0x76F2, 0xD8EE, 0x76F4, 0xF2C1, - 0x76F8, 0xDFD3, 0x76FC, 0xDAF0, 0x76FE, 0xE2EA, 0x7701, 0xE0FD, - 0x7704, 0xD8F8, 0x7708, 0xF7AF, 0x7709, 0xDAB6, 0x770B, 0xCAD7, - 0x771E, 0xF2D8, 0x7720, 0xD8F9, 0x7729, 0xFADF, 0x7737, 0xCFEF, - 0x7738, 0xD9C2, 0x773A, 0xF0D2, 0x773C, 0xE4D1, 0x7740, 0xF3B7, - 0x774D, 0xFAE0, 0x775B, 0xEFEC, 0x7761, 0xE2B2, 0x7763, 0xD4BD, - 0x7766, 0xD9CE, 0x776B, 0xF4E2, 0x7779, 0xD4A9, 0x777E, 0xCDC2, - 0x777F, 0xE7DA, 0x778B, 0xF2D9, 0x7791, 0xD9AA, 0x779E, 0xD8BE, - 0x77A5, 0xDCAD, 0x77AC, 0xE2EB, 0x77AD, 0xD6FC, 0x77B0, 0xCAF9, - 0x77B3, 0xD4DA, 0x77BB, 0xF4D7, 0x77BC, 0xCCA1, 0x77BF, 0xCFBA, - 0x77D7, 0xF5B8, 0x77DB, 0xD9C3, 0x77DC, 0xD0E8, 0x77E2, 0xE3C5, - 0x77E3, 0xEBF8, 0x77E5, 0xF2B1, 0x77E9, 0xCFBB, 0x77ED, 0xD3AD, - 0x77EE, 0xE8E1, 0x77EF, 0xCEEC, 0x77F3, 0xE0B4, 0x7802, 0xDEE3, - 0x7812, 0xDDF7, 0x7825, 0xF2B2, 0x7826, 0xF3F6, 0x7827, 0xF6DB, - 0x782C, 0xD7FE, 0x7832, 0xF8DF, 0x7834, 0xF7F2, 0x7845, 0xD0A9, - 0x784F, 0xE6DA, 0x785D, 0xF5A6, 0x786B, 0xD7BC, 0x786C, 0xCCE3, - 0x786F, 0xE6DB, 0x787C, 0xDDDD, 0x7881, 0xD1B3, 0x7887, 0xEFED, - 0x788C, 0xD6DE, 0x788D, 0xE4F4, 0x788E, 0xE1EF, 0x7891, 0xDDF8, - 0x7897, 0xE8CF, 0x78A3, 0xCAE5, 0x78A7, 0xDCA1, 0x78A9, 0xE0B5, - 0x78BA, 0xFCAC, 0x78BB, 0xFCAD, 0x78BC, 0xD8A7, 0x78C1, 0xEDB8, - 0x78C5, 0xDBB6, 0x78CA, 0xD6F0, 0x78CB, 0xF3AF, 0x78CE, 0xCDA5, - 0x78D0, 0xDAF1, 0x78E8, 0xD8A8, 0x78EC, 0xCCE4, 0x78EF, 0xD1B4, - 0x78F5, 0xCAD8, 0x78FB, 0xDAF2, 0x7901, 0xF5A7, 0x790E, 0xF5A8, - 0x7916, 0xE6A6, 0x792A, 0xD5EC, 0x792B, 0xD5F8, 0x792C, 0xDAF3, - 0x793A, 0xE3C6, 0x793E, 0xDEE4, 0x7940, 0xDEE5, 0x7941, 0xD1B5, - 0x7947, 0xD1B6, 0x7948, 0xD1B7, 0x7949, 0xF2B3, 0x7950, 0xE9DE, - 0x7956, 0xF0D3, 0x7957, 0xF2B4, 0x795A, 0xF0D4, 0x795B, 0xCBE4, - 0x795C, 0xFBD4, 0x795D, 0xF5E6, 0x795E, 0xE3EA, 0x7960, 0xDEE6, - 0x7965, 0xDFD4, 0x7968, 0xF8F9, 0x796D, 0xF0AE, 0x797A, 0xD1B8, - 0x797F, 0xD6DF, 0x7981, 0xD0D7, 0x798D, 0xFCA1, 0x798E, 0xEFEE, - 0x798F, 0xDCD8, 0x7991, 0xE9DF, 0x79A6, 0xE5DD, 0x79A7, 0xFDFB, - 0x79AA, 0xE0C9, 0x79AE, 0xD6C9, 0x79B1, 0xD4AA, 0x79B3, 0xE5CC, - 0x79B9, 0xE9E0, 0x79BD, 0xD0D8, 0x79BE, 0xFCA2, 0x79BF, 0xD4BE, - 0x79C0, 0xE2B3, 0x79C1, 0xDEE7, 0x79C9, 0xDCBC, 0x79CA, 0xD2B6, - 0x79CB, 0xF5D5, 0x79D1, 0xCEA1, 0x79D2, 0xF5A9, 0x79D5, 0xDDF9, - 0x79D8, 0xDDFA, 0x79DF, 0xF0D5, 0x79E4, 0xF6DF, 0x79E6, 0xF2DA, - 0x79E7, 0xE4EB, 0x79E9, 0xF2F1, 0x79FB, 0xECB9, 0x7A00, 0xFDFC, - 0x7A05, 0xE1AA, 0x7A08, 0xCAD9, 0x7A0B, 0xEFEF, 0x7A0D, 0xF5AA, - 0x7A14, 0xECF9, 0x7A17, 0xF8AD, 0x7A19, 0xF2C2, 0x7A1A, 0xF6C3, - 0x7A1C, 0xD7D2, 0x7A1F, 0xF9A2, 0x7A20, 0xF0D6, 0x7A2E, 0xF0FA, - 0x7A31, 0xF6E0, 0x7A36, 0xE9F3, 0x7A37, 0xF2C3, 0x7A3B, 0xD4AB, - 0x7A3C, 0xCAB3, 0x7A3D, 0xCDA6, 0x7A3F, 0xCDC3, 0x7A40, 0xCDDA, - 0x7A46, 0xD9CF, 0x7A49, 0xF6C4, 0x7A4D, 0xEEDD, 0x7A4E, 0xE7C4, - 0x7A57, 0xE2B4, 0x7A61, 0xDFE2, 0x7A62, 0xE7DB, 0x7A69, 0xE8B1, - 0x7A6B, 0xFCAE, 0x7A70, 0xE5CD, 0x7A74, 0xFAEB, 0x7A76, 0xCFBC, - 0x7A79, 0xCFE2, 0x7A7A, 0xCDF6, 0x7A7D, 0xEFF0, 0x7A7F, 0xF4BE, - 0x7A81, 0xD4CD, 0x7A84, 0xF3B8, 0x7A88, 0xE9A1, 0x7A92, 0xF2F2, - 0x7A93, 0xF3EB, 0x7A95, 0xF0D7, 0x7A98, 0xCFD7, 0x7A9F, 0xCFDF, - 0x7AA9, 0xE8C0, 0x7AAA, 0xE8C1, 0x7AAE, 0xCFE3, 0x7AAF, 0xE9A2, - 0x7ABA, 0xD0AA, 0x7AC4, 0xF3C1, 0x7AC5, 0xD0AB, 0x7AC7, 0xD4E4, - 0x7ACA, 0xEFBC, 0x7ACB, 0xD8A1, 0x7AD7, 0xD9DF, 0x7AD9, 0xF3D7, - 0x7ADD, 0xDCBD, 0x7ADF, 0xCCE5, 0x7AE0, 0xEDF1, 0x7AE3, 0xF1E2, - 0x7AE5, 0xD4DB, 0x7AEA, 0xE2B5, 0x7AED, 0xCAE6, 0x7AEF, 0xD3AE, - 0x7AF6, 0xCCE6, 0x7AF9, 0xF1D3, 0x7AFA, 0xF5E7, 0x7AFF, 0xCADA, - 0x7B0F, 0xFBEE, 0x7B11, 0xE1C5, 0x7B19, 0xDFE9, 0x7B1B, 0xEEDE, - 0x7B1E, 0xF7C2, 0x7B20, 0xD8A2, 0x7B26, 0xDDAC, 0x7B2C, 0xF0AF, - 0x7B2D, 0xD6BD, 0x7B39, 0xE1AB, 0x7B46, 0xF9B6, 0x7B49, 0xD4F5, - 0x7B4B, 0xD0C9, 0x7B4C, 0xEFA7, 0x7B4D, 0xE2EC, 0x7B4F, 0xDBEA, - 0x7B50, 0xCECC, 0x7B51, 0xF5E8, 0x7B52, 0xF7D5, 0x7B54, 0xD3CD, - 0x7B56, 0xF3FE, 0x7B60, 0xD0B5, 0x7B6C, 0xE0FE, 0x7B6E, 0xDFFB, - 0x7B75, 0xE6DD, 0x7B7D, 0xE8A4, 0x7B87, 0xCBCD, 0x7B8B, 0xEFA8, - 0x7B8F, 0xEEB4, 0x7B94, 0xDAD8, 0x7B95, 0xD1B9, 0x7B97, 0xDFA9, - 0x7B9A, 0xF3B0, 0x7B9D, 0xCCC4, 0x7BA1, 0xCEB7, 0x7BAD, 0xEFA9, - 0x7BB1, 0xDFD5, 0x7BB4, 0xEDD7, 0x7BB8, 0xEEC6, 0x7BC0, 0xEFBD, - 0x7BC1, 0xFCD6, 0x7BC4, 0xDBF4, 0x7BC6, 0xEFAA, 0x7BC7, 0xF8B9, - 0x7BC9, 0xF5E9, 0x7BD2, 0xE3D9, 0x7BE0, 0xE1C6, 0x7BE4, 0xD4BF, - 0x7BE9, 0xDEE8, 0x7C07, 0xF0EA, 0x7C12, 0xF3C2, 0x7C1E, 0xD3AF, - 0x7C21, 0xCADB, 0x7C27, 0xFCD7, 0x7C2A, 0xEDD8, 0x7C2B, 0xE1C7, - 0x7C3D, 0xF4D8, 0x7C3E, 0xD6B3, 0x7C3F, 0xDDAD, 0x7C43, 0xD5BE, - 0x7C4C, 0xF1C3, 0x7C4D, 0xEEDF, 0x7C60, 0xD6EB, 0x7C64, 0xF4D9, - 0x7C6C, 0xD7E6, 0x7C73, 0xDAB7, 0x7C83, 0xDDFB, 0x7C89, 0xDDCF, - 0x7C92, 0xD8A3, 0x7C95, 0xDAD9, 0x7C97, 0xF0D8, 0x7C98, 0xEFC4, - 0x7C9F, 0xE1D8, 0x7CA5, 0xF1D4, 0x7CA7, 0xEDF2, 0x7CAE, 0xD5DB, - 0x7CB1, 0xD5DC, 0x7CB2, 0xF3C4, 0x7CB3, 0xCBD7, 0x7CB9, 0xE2B6, - 0x7CBE, 0xEFF1, 0x7CCA, 0xFBD5, 0x7CD6, 0xD3D8, 0x7CDE, 0xDDD0, - 0x7CDF, 0xF0D9, 0x7CE0, 0xCBB3, 0x7CE7, 0xD5DD, 0x7CFB, 0xCDA7, - 0x7CFE, 0xD0AC, 0x7D00, 0xD1BA, 0x7D02, 0xF1C4, 0x7D04, 0xE5B3, - 0x7D05, 0xFBF5, 0x7D06, 0xE9E1, 0x7D07, 0xFDE0, 0x7D08, 0xFCBC, - 0x7D0A, 0xDAA2, 0x7D0B, 0xDAA3, 0x7D0D, 0xD2A1, 0x7D10, 0xD2EF, - 0x7D14, 0xE2ED, 0x7D17, 0xDEE9, 0x7D18, 0xCEDC, 0x7D19, 0xF2B5, - 0x7D1A, 0xD0E4, 0x7D1B, 0xDDD1, 0x7D20, 0xE1C8, 0x7D21, 0xDBB7, - 0x7D22, 0xDFE3, 0x7D2B, 0xEDB9, 0x7D2C, 0xF1C5, 0x7D2E, 0xF3CF, - 0x7D2F, 0xD7AB, 0x7D30, 0xE1AC, 0x7D33, 0xE3EB, 0x7D35, 0xEEC7, - 0x7D39, 0xE1C9, 0x7D3A, 0xCAFA, 0x7D42, 0xF0FB, 0x7D43, 0xFAE1, - 0x7D44, 0xF0DA, 0x7D45, 0xCCE7, 0x7D46, 0xDAF4, 0x7D50, 0xCCBF, - 0x7D5E, 0xCEED, 0x7D61, 0xD5A9, 0x7D62, 0xFAE2, 0x7D66, 0xD0E5, - 0x7D68, 0xEBD6, 0x7D6A, 0xECDF, 0x7D6E, 0xDFFC, 0x7D71, 0xF7D6, - 0x7D72, 0xDEEA, 0x7D73, 0xCBB4, 0x7D76, 0xEFBE, 0x7D79, 0xCCB5, - 0x7D7F, 0xCFBD, 0x7D8E, 0xEFF2, 0x7D8F, 0xE2B7, 0x7D93, 0xCCE8, - 0x7D9C, 0xF0FC, 0x7DA0, 0xD6E0, 0x7DA2, 0xF1C6, 0x7DAC, 0xE2B8, - 0x7DAD, 0xEBAB, 0x7DB1, 0xCBB5, 0x7DB2, 0xD8D1, 0x7DB4, 0xF4CE, - 0x7DB5, 0xF3F7, 0x7DB8, 0xD7C6, 0x7DBA, 0xD1BB, 0x7DBB, 0xF7AA, - 0x7DBD, 0xEDCA, 0x7DBE, 0xD7D3, 0x7DBF, 0xD8FA, 0x7DC7, 0xF6C5, - 0x7DCA, 0xD1CC, 0x7DCB, 0xDDFC, 0x7DD6, 0xDFFD, 0x7DD8, 0xF9E5, - 0x7DDA, 0xE0CA, 0x7DDD, 0xF2FD, 0x7DDE, 0xD3B0, 0x7DE0, 0xF4F3, - 0x7DE1, 0xDAC9, 0x7DE3, 0xE6DE, 0x7DE8, 0xF8BA, 0x7DE9, 0xE8D0, - 0x7DEC, 0xD8FB, 0x7DEF, 0xEAD5, 0x7DF4, 0xD6A3, 0x7DFB, 0xF6C6, - 0x7E09, 0xF2DB, 0x7E0A, 0xE4FC, 0x7E15, 0xE8B2, 0x7E1B, 0xDADA, - 0x7E1D, 0xF2DC, 0x7E1E, 0xFBD6, 0x7E1F, 0xE9B2, 0x7E21, 0xEEAD, - 0x7E23, 0xFAE3, 0x7E2B, 0xDCEE, 0x7E2E, 0xF5EA, 0x7E2F, 0xE6E0, - 0x7E31, 0xF0FD, 0x7E37, 0xD7AC, 0x7E3D, 0xF5C5, 0x7E3E, 0xEEE0, - 0x7E41, 0xDBE5, 0x7E43, 0xDDDE, 0x7E46, 0xD9F0, 0x7E47, 0xE9A3, - 0x7E52, 0xF1F9, 0x7E54, 0xF2C4, 0x7E55, 0xE0CB, 0x7E5E, 0xE9A4, - 0x7E61, 0xE2B9, 0x7E69, 0xE3B1, 0x7E6A, 0xFCEB, 0x7E6B, 0xCDA8, - 0x7E6D, 0xCCB6, 0x7E70, 0xF0DB, 0x7E79, 0xE6BA, 0x7E7C, 0xCDA9, - 0x7E82, 0xF3C3, 0x7E8C, 0xE1D9, 0x7E8F, 0xEFAB, 0x7E93, 0xE7C5, - 0x7E96, 0xE0E9, 0x7E98, 0xF3C5, 0x7E9B, 0xD4C0, 0x7E9C, 0xD5BF, - 0x7F36, 0xDDAE, 0x7F38, 0xF9FC, 0x7F3A, 0xCCC0, 0x7F4C, 0xE5A2, - 0x7F50, 0xCEB8, 0x7F54, 0xD8D2, 0x7F55, 0xF9D6, 0x7F6A, 0xF1AA, - 0x7F6B, 0xCED1, 0x7F6E, 0xF6C7, 0x7F70, 0xDBEB, 0x7F72, 0xDFFE, - 0x7F75, 0xD8E1, 0x7F77, 0xF7F3, 0x7F79, 0xD7E7, 0x7F85, 0xD4FE, - 0x7F88, 0xD1BC, 0x7F8A, 0xE5CF, 0x7F8C, 0xCBB6, 0x7F8E, 0xDAB8, - 0x7F94, 0xCDC4, 0x7F9A, 0xD6BE, 0x7F9E, 0xE2BA, 0x7FA4, 0xCFD8, - 0x7FA8, 0xE0CC, 0x7FA9, 0xEBF9, 0x7FB2, 0xFDFD, 0x7FB8, 0xD7E8, - 0x7FB9, 0xCBD8, 0x7FBD, 0xE9E2, 0x7FC1, 0xE8BA, 0x7FC5, 0xE3C7, - 0x7FCA, 0xECCD, 0x7FCC, 0xECCE, 0x7FCE, 0xD6BF, 0x7FD2, 0xE3A7, - 0x7FD4, 0xDFD6, 0x7FD5, 0xFDE8, 0x7FDF, 0xEEE1, 0x7FE0, 0xF6A8, - 0x7FE1, 0xDDFD, 0x7FE9, 0xF8BB, 0x7FEB, 0xE8D1, 0x7FF0, 0xF9D7, - 0x7FF9, 0xCEEE, 0x7FFC, 0xECCF, 0x8000, 0xE9A5, 0x8001, 0xD6D5, - 0x8003, 0xCDC5, 0x8005, 0xEDBA, 0x8006, 0xD1BD, 0x8009, 0xCFBE, - 0x800C, 0xECBB, 0x8010, 0xD2B1, 0x8015, 0xCCE9, 0x8017, 0xD9C4, - 0x8018, 0xE9FC, 0x802D, 0xD1BE, 0x8033, 0xECBC, 0x8036, 0xE5AD, - 0x803D, 0xF7B0, 0x803F, 0xCCEA, 0x8043, 0xD3C4, 0x8046, 0xD6C0, - 0x804A, 0xD6FD, 0x8056, 0xE1A1, 0x8058, 0xDEBD, 0x805A, 0xF6A9, - 0x805E, 0xDAA4, 0x806F, 0xD6A4, 0x8070, 0xF5C6, 0x8072, 0xE1A2, - 0x8073, 0xE9C6, 0x8077, 0xF2C5, 0x807D, 0xF4E9, 0x807E, 0xD6EC, - 0x807F, 0xEBD3, 0x8084, 0xECBD, 0x8085, 0xE2DC, 0x8086, 0xDEEB, - 0x8087, 0xF0DC, 0x8089, 0xEBBF, 0x808B, 0xD7CE, 0x808C, 0xD1BF, - 0x8096, 0xF5AB, 0x809B, 0xF9FD, 0x809D, 0xCADC, 0x80A1, 0xCDC6, - 0x80A2, 0xF2B6, 0x80A5, 0xDDFE, 0x80A9, 0xCCB7, 0x80AA, 0xDBB8, - 0x80AF, 0xD0E9, 0x80B1, 0xCEDD, 0x80B2, 0xEBC0, 0x80B4, 0xFDA2, - 0x80BA, 0xF8CB, 0x80C3, 0xEAD6, 0x80C4, 0xF1B0, 0x80CC, 0xDBCE, - 0x80CE, 0xF7C3, 0x80DA, 0xDBCF, 0x80DB, 0xCBA4, 0x80DE, 0xF8E0, - 0x80E1, 0xFBD7, 0x80E4, 0xEBCA, 0x80E5, 0xE0A1, 0x80F1, 0xCECD, - 0x80F4, 0xD4DC, 0x80F8, 0xFDD8, 0x80FD, 0xD2F6, 0x8102, 0xF2B7, - 0x8105, 0xFAF6, 0x8106, 0xF6AA, 0x8107, 0xFAF7, 0x8108, 0xD8E6, - 0x810A, 0xF4B1, 0x8118, 0xE8D2, 0x811A, 0xCAC5, 0x811B, 0xCCEB, - 0x8123, 0xE2EE, 0x8129, 0xE2BB, 0x812B, 0xF7AD, 0x812F, 0xF8E1, - 0x8139, 0xF3EC, 0x813E, 0xDEA1, 0x814B, 0xE4FD, 0x814E, 0xE3EC, - 0x8150, 0xDDAF, 0x8151, 0xDDB0, 0x8154, 0xCBB7, 0x8155, 0xE8D3, - 0x8165, 0xE1A3, 0x8166, 0xD2E0, 0x816B, 0xF0FE, 0x8170, 0xE9A6, - 0x8171, 0xCBF2, 0x8178, 0xEDF3, 0x8179, 0xDCD9, 0x817A, 0xE0CD, - 0x817F, 0xF7DA, 0x8180, 0xDBB9, 0x8188, 0xCCAE, 0x818A, 0xDADB, - 0x818F, 0xCDC7, 0x819A, 0xDDB1, 0x819C, 0xD8AF, 0x819D, 0xE3A3, - 0x81A0, 0xCEEF, 0x81A3, 0xF2F3, 0x81A8, 0xF8B3, 0x81B3, 0xE0CE, - 0x81B5, 0xF5FD, 0x81BA, 0xEBEC, 0x81BD, 0xD3C5, 0x81BE, 0xFCEC, - 0x81BF, 0xD2DB, 0x81C0, 0xD4EB, 0x81C2, 0xDEA2, 0x81C6, 0xE5E6, - 0x81CD, 0xF0B0, 0x81D8, 0xD5C4, 0x81DF, 0xEDF4, 0x81E3, 0xE3ED, - 0x81E5, 0xE8C2, 0x81E7, 0xEDF5, 0x81E8, 0xD7FC, 0x81EA, 0xEDBB, - 0x81ED, 0xF6AB, 0x81F3, 0xF2B8, 0x81F4, 0xF6C8, 0x81FA, 0xD3E6, - 0x81FB, 0xF2DD, 0x81FC, 0xCFBF, 0x81FE, 0xEBAC, 0x8205, 0xCFC0, - 0x8207, 0xE6A8, 0x8208, 0xFDE9, 0x820A, 0xCFC1, 0x820C, 0xE0DF, - 0x820D, 0xDEEC, 0x8212, 0xE0A2, 0x821B, 0xF4BF, 0x821C, 0xE2EF, - 0x821E, 0xD9F1, 0x821F, 0xF1C7, 0x8221, 0xCBB8, 0x822A, 0xF9FE, - 0x822B, 0xDBBA, 0x822C, 0xDAF5, 0x8235, 0xF6EC, 0x8236, 0xDADC, - 0x8237, 0xFAE4, 0x8239, 0xE0CF, 0x8240, 0xDDB2, 0x8245, 0xE6A9, - 0x8247, 0xEFF3, 0x8259, 0xF3ED, 0x8264, 0xEBFA, 0x8266, 0xF9E6, - 0x826E, 0xCADD, 0x826F, 0xD5DE, 0x8271, 0xCADE, 0x8272, 0xDFE4, - 0x8276, 0xE6FD, 0x8278, 0xF5AC, 0x827E, 0xE4F5, 0x828B, 0xE9E3, - 0x828D, 0xEDCB, 0x828E, 0xCFE4, 0x8292, 0xD8D3, 0x8299, 0xDDB3, - 0x829A, 0xD4EC, 0x829D, 0xF2B9, 0x829F, 0xDFB7, 0x82A5, 0xCBCE, - 0x82A6, 0xFBD8, 0x82A9, 0xD0D9, 0x82AC, 0xDDD2, 0x82AD, 0xF7F4, - 0x82AE, 0xE7DC, 0x82AF, 0xE4A5, 0x82B1, 0xFCA3, 0x82B3, 0xDBBB, - 0x82B7, 0xF2BA, 0x82B8, 0xE9FD, 0x82B9, 0xD0CA, 0x82BB, 0xF5D6, - 0x82BC, 0xD9C5, 0x82BD, 0xE4B4, 0x82BF, 0xEDA7, 0x82D1, 0xEABD, - 0x82D2, 0xE6FE, 0x82D4, 0xF7C4, 0x82D5, 0xF5AD, 0x82D7, 0xD9E0, - 0x82DB, 0xCAB4, 0x82DE, 0xF8E2, 0x82DF, 0xCFC2, 0x82E1, 0xECBE, - 0x82E5, 0xE5B4, 0x82E6, 0xCDC8, 0x82E7, 0xEEC8, 0x82F1, 0xE7C8, - 0x82FD, 0xCDC9, 0x82FE, 0xF9B7, 0x8301, 0xF1E8, 0x8302, 0xD9F2, - 0x8303, 0xDBF5, 0x8304, 0xCAB5, 0x8305, 0xD9C6, 0x8309, 0xD8C9, - 0x8317, 0xD9AB, 0x8328, 0xEDBC, 0x832B, 0xD8D4, 0x832F, 0xDCDA, - 0x8331, 0xE2BC, 0x8334, 0xFCED, 0x8335, 0xECE0, 0x8336, 0xD2FE, - 0x8338, 0xE9C7, 0x8339, 0xE6AA, 0x8340, 0xE2F0, 0x8347, 0xFABB, - 0x8349, 0xF5AE, 0x834A, 0xFBAA, 0x834F, 0xECFB, 0x8351, 0xECBF, - 0x8352, 0xFCD8, 0x8373, 0xD4E5, 0x8377, 0xF9C3, 0x837B, 0xEEE2, - 0x8389, 0xD7E9, 0x838A, 0xEDF6, 0x838E, 0xDEED, 0x8396, 0xCCEC, - 0x8398, 0xE3EE, 0x839E, 0xE8D4, 0x83A2, 0xFAF8, 0x83A9, 0xDDB4, - 0x83AA, 0xE4B5, 0x83AB, 0xD8B0, 0x83BD, 0xD8D5, 0x83C1, 0xF4EA, - 0x83C5, 0xCEB9, 0x83C9, 0xD6E1, 0x83CA, 0xCFD2, 0x83CC, 0xD0B6, - 0x83D3, 0xCEA2, 0x83D6, 0xF3EE, 0x83DC, 0xF3F8, 0x83E9, 0xDCCC, - 0x83EB, 0xD0CB, 0x83EF, 0xFCA4, 0x83F0, 0xCDCA, 0x83F1, 0xD7D4, - 0x83F2, 0xDEA3, 0x83F4, 0xE4E0, 0x83F9, 0xEEC9, 0x83FD, 0xE2DD, - 0x8403, 0xF5FE, 0x8404, 0xD4AC, 0x840A, 0xD5D1, 0x840C, 0xD8F0, - 0x840D, 0xF8C3, 0x840E, 0xEAD7, 0x8429, 0xF5D7, 0x842C, 0xD8BF, - 0x8431, 0xFDC0, 0x8438, 0xEBAD, 0x843D, 0xD5AA, 0x8449, 0xE7A8, - 0x8457, 0xEECA, 0x845B, 0xCAE7, 0x8461, 0xF8E3, 0x8463, 0xD4DD, - 0x8466, 0xEAD8, 0x846B, 0xFBD9, 0x846C, 0xEDF7, 0x846F, 0xE5B5, - 0x8475, 0xD0AD, 0x847A, 0xF1F1, 0x8490, 0xE2BD, 0x8494, 0xE3C8, - 0x8499, 0xD9D5, 0x849C, 0xDFAA, 0x84A1, 0xDBBC, 0x84B2, 0xF8E4, - 0x84B8, 0xF1FA, 0x84BB, 0xE5B6, 0x84BC, 0xF3EF, 0x84BF, 0xFBDA, - 0x84C0, 0xE1E0, 0x84C2, 0xD9AC, 0x84C4, 0xF5EB, 0x84C6, 0xE0B6, - 0x84C9, 0xE9C8, 0x84CB, 0xCBCF, 0x84CD, 0xE3C9, 0x84D1, 0xDEEE, - 0x84DA, 0xE2BE, 0x84EC, 0xDCEF, 0x84EE, 0xD6A5, 0x84F4, 0xE2F1, - 0x84FC, 0xD6FE, 0x8511, 0xD9A1, 0x8513, 0xD8C0, 0x8514, 0xDCDB, - 0x8517, 0xEDBD, 0x8518, 0xDFB8, 0x851A, 0xEAA5, 0x851E, 0xD7AD, - 0x8521, 0xF3F9, 0x8523, 0xEDF8, 0x8525, 0xF5C7, 0x852C, 0xE1CA, - 0x852D, 0xEBE3, 0x852F, 0xF2DE, 0x853D, 0xF8CC, 0x853F, 0xEAD9, - 0x8541, 0xD3C6, 0x8543, 0xDBE6, 0x8549, 0xF5AF, 0x854E, 0xCEF0, - 0x8553, 0xE9FE, 0x8559, 0xFBB6, 0x8563, 0xE2F2, 0x8568, 0xCFF2, - 0x8569, 0xF7B9, 0x856A, 0xD9F3, 0x856D, 0xE1CB, 0x8584, 0xDADD, - 0x8587, 0xDAB9, 0x858F, 0xEBFB, 0x8591, 0xCBB9, 0x8594, 0xEDF9, - 0x859B, 0xE0E0, 0x85A6, 0xF4C0, 0x85A8, 0xFDBC, 0x85A9, 0xDFB1, - 0x85AA, 0xE3EF, 0x85AF, 0xE0A3, 0x85B0, 0xFDB9, 0x85BA, 0xF0B1, - 0x85C1, 0xCDCB, 0x85C9, 0xEDBE, 0x85CD, 0xD5C0, 0x85CE, 0xE3F0, - 0x85CF, 0xEDFA, 0x85D5, 0xE9E4, 0x85DC, 0xD5ED, 0x85DD, 0xE7DD, - 0x85E4, 0xD4F6, 0x85E5, 0xE5B7, 0x85E9, 0xDBE7, 0x85EA, 0xE2BF, - 0x85F7, 0xEECB, 0x85FA, 0xD7F4, 0x85FB, 0xF0DD, 0x85FF, 0xCEAB, - 0x8602, 0xE7DE, 0x8606, 0xD6D6, 0x8607, 0xE1CC, 0x860A, 0xE8B3, - 0x8616, 0xE5EE, 0x8617, 0xDCA2, 0x861A, 0xE0D0, 0x862D, 0xD5B5, - 0x863F, 0xD5A1, 0x864E, 0xFBDB, 0x8650, 0xF9CB, 0x8654, 0xCBF3, - 0x8655, 0xF4A5, 0x865B, 0xFAC8, 0x865C, 0xD6D7, 0x865E, 0xE9E5, - 0x865F, 0xFBDC, 0x8667, 0xFDD0, 0x8679, 0xFBF6, 0x868A, 0xDAA5, - 0x868C, 0xDBBD, 0x8693, 0xECE2, 0x86A3, 0xCDF7, 0x86A4, 0xF0DE, - 0x86A9, 0xF6C9, 0x86C7, 0xDEEF, 0x86CB, 0xD3B1, 0x86D4, 0xFCEE, - 0x86D9, 0xE8C3, 0x86DB, 0xF1C8, 0x86DF, 0xCEF1, 0x86E4, 0xF9ED, - 0x86ED, 0xF2F4, 0x86FE, 0xE4B6, 0x8700, 0xF5B9, 0x8702, 0xDCF0, - 0x8703, 0xE3F1, 0x8708, 0xE8A5, 0x8718, 0xF2BB, 0x871A, 0xDEA4, - 0x871C, 0xDACC, 0x874E, 0xCAE9, 0x8755, 0xE3DA, 0x8757, 0xFCD9, - 0x875F, 0xEADA, 0x8766, 0xF9C4, 0x8768, 0xE3A4, 0x8774, 0xFBDD, - 0x8776, 0xEFCA, 0x8778, 0xE8C4, 0x8782, 0xD5CC, 0x878D, 0xEBD7, - 0x879F, 0xD9AD, 0x87A2, 0xFBAB, 0x87B3, 0xD3D9, 0x87BA, 0xD5A2, - 0x87C4, 0xF6DE, 0x87E0, 0xDAF6, 0x87EC, 0xE0D1, 0x87EF, 0xE9A8, - 0x87F2, 0xF5F9, 0x87F9, 0xFAAF, 0x87FB, 0xEBFC, 0x87FE, 0xE0EA, - 0x8805, 0xE3B2, 0x881F, 0xD5C5, 0x8822, 0xF1E3, 0x8823, 0xD5EE, - 0x8831, 0xCDCC, 0x8836, 0xEDD9, 0x883B, 0xD8C1, 0x8840, 0xFAEC, - 0x8846, 0xF1EB, 0x884C, 0xFABC, 0x884D, 0xE6E2, 0x8852, 0xFAE5, - 0x8853, 0xE2FA, 0x8857, 0xCAB6, 0x8859, 0xE4B7, 0x885B, 0xEADB, - 0x885D, 0xF5FA, 0x8861, 0xFBAC, 0x8862, 0xCFC3, 0x8863, 0xEBFD, - 0x8868, 0xF8FA, 0x886B, 0xDFB9, 0x8870, 0xE1F1, 0x8872, 0xD2A4, - 0x8877, 0xF5FB, 0x887E, 0xD0DA, 0x887F, 0xD0DB, 0x8881, 0xEABE, - 0x8882, 0xD9B1, 0x8888, 0xCAB7, 0x888B, 0xD3E7, 0x888D, 0xF8E5, - 0x8892, 0xD3B2, 0x8896, 0xE2C0, 0x8897, 0xF2DF, 0x889E, 0xCDE5, - 0x88AB, 0xF9AC, 0x88B4, 0xCDCD, 0x88C1, 0xEEAE, 0x88C2, 0xD6AE, - 0x88CF, 0xD7EA, 0x88D4, 0xE7E0, 0x88D5, 0xEBAE, 0x88D9, 0xCFD9, - 0x88DC, 0xDCCD, 0x88DD, 0xEDFB, 0x88DF, 0xDEF0, 0x88E1, 0xD7EB, - 0x88E8, 0xDEA5, 0x88F3, 0xDFD7, 0x88F4, 0xDBD0, 0x88F5, 0xDBD1, - 0x88F8, 0xD5A3, 0x88FD, 0xF0B2, 0x8907, 0xDCDC, 0x8910, 0xCAE8, - 0x8912, 0xF8E6, 0x8913, 0xDCCE, 0x8918, 0xEADC, 0x8919, 0xDBD2, - 0x8925, 0xE9B3, 0x892A, 0xF7DB, 0x8936, 0xE3A8, 0x8938, 0xD7AE, - 0x893B, 0xE0E1, 0x8941, 0xCBBA, 0x8944, 0xE5D1, 0x895F, 0xD0DC, - 0x8964, 0xD5C1, 0x896A, 0xD8CA, 0x8972, 0xE3A9, 0x897F, 0xE0A4, - 0x8981, 0xE9A9, 0x8983, 0xD3C7, 0x8986, 0xDCDD, 0x8987, 0xF8AE, - 0x898B, 0xCCB8, 0x898F, 0xD0AE, 0x8993, 0xD8F2, 0x8996, 0xE3CA, - 0x89A1, 0xCCAF, 0x89A9, 0xD4AD, 0x89AA, 0xF6D1, 0x89B2, 0xD0CC, - 0x89BA, 0xCAC6, 0x89BD, 0xD5C2, 0x89C0, 0xCEBA, 0x89D2, 0xCAC7, - 0x89E3, 0xFAB0, 0x89F4, 0xDFD8, 0x89F8, 0xF5BA, 0x8A00, 0xE5EB, - 0x8A02, 0xEFF4, 0x8A03, 0xDDB5, 0x8A08, 0xCDAA, 0x8A0A, 0xE3F2, - 0x8A0C, 0xFBF7, 0x8A0E, 0xF7D0, 0x8A13, 0xFDBA, 0x8A16, 0xFDE1, - 0x8A17, 0xF6FE, 0x8A18, 0xD1C0, 0x8A1B, 0xE8C5, 0x8A1D, 0xE4B8, - 0x8A1F, 0xE1E8, 0x8A23, 0xCCC1, 0x8A25, 0xD2ED, 0x8A2A, 0xDBBE, - 0x8A2D, 0xE0E2, 0x8A31, 0xFAC9, 0x8A34, 0xE1CD, 0x8A36, 0xCAB8, - 0x8A3A, 0xF2E0, 0x8A3B, 0xF1C9, 0x8A50, 0xDEF1, 0x8A54, 0xF0DF, - 0x8A55, 0xF8C4, 0x8A5B, 0xEECC, 0x8A5E, 0xDEF2, 0x8A60, 0xE7C9, - 0x8A62, 0xE2F3, 0x8A63, 0xE7E1, 0x8A66, 0xE3CB, 0x8A69, 0xE3CC, - 0x8A6D, 0xCFF8, 0x8A6E, 0xEFAC, 0x8A70, 0xFDFE, 0x8A71, 0xFCA5, - 0x8A72, 0xFAB1, 0x8A73, 0xDFD9, 0x8A75, 0xE0D2, 0x8A79, 0xF4DA, - 0x8A85, 0xF1CA, 0x8A87, 0xCEA3, 0x8A8C, 0xF2BC, 0x8A8D, 0xECE3, - 0x8A93, 0xE0A5, 0x8A95, 0xF7AB, 0x8A98, 0xEBAF, 0x8A9E, 0xE5DE, - 0x8AA0, 0xE1A4, 0x8AA1, 0xCDAB, 0x8AA3, 0xD9F4, 0x8AA4, 0xE8A6, - 0x8AA5, 0xCDCE, 0x8AA6, 0xE1E9, 0x8AA8, 0xFCEF, 0x8AAA, 0xE0E3, - 0x8AB0, 0xE2C1, 0x8AB2, 0xCEA4, 0x8AB9, 0xDEA6, 0x8ABC, 0xEBFE, - 0x8ABE, 0xEBDD, 0x8ABF, 0xF0E0, 0x8AC2, 0xF4DB, 0x8AC4, 0xE2F4, - 0x8AC7, 0xD3C8, 0x8ACB, 0xF4EB, 0x8ACD, 0xEEB5, 0x8ACF, 0xF5D8, - 0x8AD2, 0xD5DF, 0x8AD6, 0xD6E5, 0x8ADB, 0xEBB0, 0x8ADC, 0xF4E3, - 0x8AE1, 0xE3CD, 0x8AE6, 0xF4F4, 0x8AE7, 0xFAB2, 0x8AEA, 0xEFF5, - 0x8AEB, 0xCADF, 0x8AED, 0xEBB1, 0x8AEE, 0xEDBF, 0x8AF1, 0xFDC9, - 0x8AF6, 0xE4A6, 0x8AF7, 0xF9A4, 0x8AF8, 0xF0B3, 0x8AFA, 0xE5EC, - 0x8AFE, 0xD1E7, 0x8B00, 0xD9C7, 0x8B01, 0xE4D7, 0x8B02, 0xEADD, - 0x8B04, 0xD4F7, 0x8B0E, 0xDABA, 0x8B10, 0xDACD, 0x8B14, 0xF9CC, - 0x8B16, 0xE1DA, 0x8B17, 0xDBBF, 0x8B19, 0xCCC5, 0x8B1A, 0xECD0, - 0x8B1B, 0xCBBB, 0x8B1D, 0xDEF3, 0x8B20, 0xE9AA, 0x8B28, 0xD9C8, - 0x8B2B, 0xEEE3, 0x8B2C, 0xD7BD, 0x8B33, 0xCFC4, 0x8B39, 0xD0CD, - 0x8B41, 0xFCA6, 0x8B49, 0xF1FB, 0x8B4E, 0xFDD2, 0x8B4F, 0xD1C1, - 0x8B58, 0xE3DB, 0x8B5A, 0xD3C9, 0x8B5C, 0xDCCF, 0x8B66, 0xCCED, - 0x8B6C, 0xDEA7, 0x8B6F, 0xE6BB, 0x8B70, 0xECA1, 0x8B74, 0xCCB9, - 0x8B77, 0xFBDE, 0x8B7D, 0xE7E2, 0x8B80, 0xD4C1, 0x8B8A, 0xDCA8, - 0x8B90, 0xE2C2, 0x8B92, 0xF3D8, 0x8B93, 0xE5D3, 0x8B96, 0xF3D9, - 0x8B9A, 0xF3C6, 0x8C37, 0xCDDB, 0x8C3F, 0xCDAC, 0x8C41, 0xFCC3, - 0x8C46, 0xD4E7, 0x8C48, 0xD1C2, 0x8C4A, 0xF9A5, 0x8C4C, 0xE8D5, - 0x8C55, 0xE3CE, 0x8C5A, 0xD4CA, 0x8C61, 0xDFDA, 0x8C6A, 0xFBDF, - 0x8C6B, 0xE7E3, 0x8C79, 0xF8FB, 0x8C7A, 0xE3CF, 0x8C82, 0xF5B0, - 0x8C8A, 0xD8E7, 0x8C8C, 0xD9C9, 0x8C9D, 0xF8AF, 0x8C9E, 0xEFF6, - 0x8CA0, 0xDDB6, 0x8CA1, 0xEEAF, 0x8CA2, 0xCDF8, 0x8CA7, 0xDEB8, - 0x8CA8, 0xFCA7, 0x8CA9, 0xF7FC, 0x8CAA, 0xF7B1, 0x8CAB, 0xCEBB, - 0x8CAC, 0xF4A1, 0x8CAF, 0xEECD, 0x8CB0, 0xE1AE, 0x8CB3, 0xECC3, - 0x8CB4, 0xCFFE, 0x8CB6, 0xF8BF, 0x8CB7, 0xD8E2, 0x8CB8, 0xD3E8, - 0x8CBB, 0xDEA8, 0x8CBC, 0xF4E4, 0x8CBD, 0xECC2, 0x8CBF, 0xD9F5, - 0x8CC0, 0xF9C5, 0x8CC1, 0xDDD3, 0x8CC2, 0xD6F1, 0x8CC3, 0xECFC, - 0x8CC4, 0xFCF0, 0x8CC7, 0xEDC0, 0x8CC8, 0xCAB9, 0x8CCA, 0xEEE4, - 0x8CD1, 0xF2E1, 0x8CD3, 0xDEB9, 0x8CDA, 0xD6F2, 0x8CDC, 0xDEF4, - 0x8CDE, 0xDFDB, 0x8CE0, 0xDBD3, 0x8CE2, 0xFAE7, 0x8CE3, 0xD8E3, - 0x8CE4, 0xF4C1, 0x8CE6, 0xDDB7, 0x8CEA, 0xF2F5, 0x8CED, 0xD4AE, - 0x8CF4, 0xD6F3, 0x8CFB, 0xDDB8, 0x8CFC, 0xCFC5, 0x8CFD, 0xDFDF, - 0x8D04, 0xF2BE, 0x8D05, 0xF6A1, 0x8D07, 0xEBCB, 0x8D08, 0xF1FC, - 0x8D0A, 0xF3C7, 0x8D0D, 0xE0EB, 0x8D13, 0xEDFC, 0x8D16, 0xE1DB, - 0x8D64, 0xEEE5, 0x8D66, 0xDEF5, 0x8D6B, 0xFAD3, 0x8D70, 0xF1CB, - 0x8D73, 0xD0AF, 0x8D74, 0xDDB9, 0x8D77, 0xD1C3, 0x8D85, 0xF5B1, - 0x8D8A, 0xEAC6, 0x8D99, 0xF0E1, 0x8DA3, 0xF6AC, 0x8DA8, 0xF5D9, - 0x8DB3, 0xF0EB, 0x8DBA, 0xDDBA, 0x8DBE, 0xF2BF, 0x8DC6, 0xF7C5, - 0x8DCB, 0xDBA2, 0x8DCC, 0xF2F6, 0x8DCF, 0xCABA, 0x8DDB, 0xF7F5, - 0x8DDD, 0xCBE5, 0x8DE1, 0xEEE6, 0x8DE3, 0xE0D3, 0x8DE8, 0xCEA5, - 0x8DEF, 0xD6D8, 0x8DF3, 0xD4AF, 0x8E0A, 0xE9C9, 0x8E0F, 0xD3CE, - 0x8E10, 0xF4C2, 0x8E1E, 0xCBE6, 0x8E2A, 0xF1A1, 0x8E30, 0xEBB2, - 0x8E35, 0xF1A2, 0x8E42, 0xEBB3, 0x8E44, 0xF0B4, 0x8E47, 0xCBF4, - 0x8E48, 0xD4B0, 0x8E49, 0xF3B2, 0x8E4A, 0xFBB7, 0x8E59, 0xF5EC, - 0x8E5F, 0xEEE7, 0x8E60, 0xF4B2, 0x8E74, 0xF5ED, 0x8E76, 0xCFF3, - 0x8E81, 0xF0E2, 0x8E87, 0xEECE, 0x8E8A, 0xF1CC, 0x8E8D, 0xE5B8, - 0x8EAA, 0xD7F5, 0x8EAB, 0xE3F3, 0x8EAC, 0xCFE5, 0x8EC0, 0xCFC6, - 0x8ECA, 0xF3B3, 0x8ECB, 0xE4D8, 0x8ECC, 0xCFF9, 0x8ECD, 0xCFDA, - 0x8ED2, 0xFACD, 0x8EDF, 0xE6E3, 0x8EEB, 0xF2E2, 0x8EF8, 0xF5EE, - 0x8EFB, 0xCABB, 0x8EFE, 0xE3DC, 0x8F03, 0xCEF2, 0x8F05, 0xD6D9, - 0x8F09, 0xEEB0, 0x8F12, 0xF4E5, 0x8F13, 0xD8C2, 0x8F14, 0xDCD0, - 0x8F15, 0xCCEE, 0x8F1B, 0xD5E0, 0x8F1C, 0xF6CA, 0x8F1D, 0xFDCA, - 0x8F1E, 0xD8D6, 0x8F1F, 0xF4CF, 0x8F26, 0xD6A6, 0x8F27, 0xDCBE, - 0x8F29, 0xDBD4, 0x8F2A, 0xD7C7, 0x8F2F, 0xF2FE, 0x8F33, 0xF1CD, - 0x8F38, 0xE2C3, 0x8F39, 0xDCDE, 0x8F3B, 0xDCDF, 0x8F3E, 0xEFAD, - 0x8F3F, 0xE6AB, 0x8F44, 0xF9DD, 0x8F45, 0xEABF, 0x8F49, 0xEFAE, - 0x8F4D, 0xF4D0, 0x8F4E, 0xCEF3, 0x8F5D, 0xE6AC, 0x8F5F, 0xCEDE, - 0x8F62, 0xD5F9, 0x8F9B, 0xE3F4, 0x8F9C, 0xCDD0, 0x8FA3, 0xD5B8, - 0x8FA6, 0xF7FD, 0x8FA8, 0xDCA9, 0x8FAD, 0xDEF6, 0x8FAF, 0xDCAA, - 0x8FB0, 0xF2E3, 0x8FB1, 0xE9B4, 0x8FB2, 0xD2DC, 0x8FC2, 0xE9E6, - 0x8FC5, 0xE3F6, 0x8FCE, 0xE7CA, 0x8FD1, 0xD0CE, 0x8FD4, 0xDAF7, - 0x8FE6, 0xCABC, 0x8FEA, 0xEEE8, 0x8FEB, 0xDADE, 0x8FED, 0xF2F7, - 0x8FF0, 0xE2FB, 0x8FF2, 0xCCA6, 0x8FF7, 0xDABB, 0x8FF9, 0xEEE9, - 0x8FFD, 0xF5DA, 0x9000, 0xF7DC, 0x9001, 0xE1EA, 0x9002, 0xCEC1, - 0x9003, 0xD4B1, 0x9005, 0xFDB1, 0x9006, 0xE6BD, 0x9008, 0xFBAD, - 0x900B, 0xF8E7, 0x900D, 0xE1CE, 0x900F, 0xF7E2, 0x9010, 0xF5EF, - 0x9011, 0xCFC7, 0x9014, 0xD4B2, 0x9015, 0xCCEF, 0x9017, 0xD4E8, - 0x9019, 0xEECF, 0x901A, 0xF7D7, 0x901D, 0xE0A6, 0x901E, 0xD6C1, - 0x901F, 0xE1DC, 0x9020, 0xF0E3, 0x9021, 0xF1E4, 0x9022, 0xDCF1, - 0x9023, 0xD6A7, 0x902E, 0xF4F5, 0x9031, 0xF1CE, 0x9032, 0xF2E4, - 0x9035, 0xD0B0, 0x9038, 0xECEF, 0x903C, 0xF9BA, 0x903E, 0xEBB5, - 0x9041, 0xD4ED, 0x9042, 0xE2C4, 0x9047, 0xE9E7, 0x904A, 0xEBB4, - 0x904B, 0xEAA1, 0x904D, 0xF8BC, 0x904E, 0xCEA6, 0x9050, 0xF9C6, - 0x9051, 0xFCDA, 0x9053, 0xD4B3, 0x9054, 0xD3B9, 0x9055, 0xEADE, - 0x9059, 0xE9AB, 0x905C, 0xE1E1, 0x905D, 0xD3CF, 0x905E, 0xF4F6, - 0x9060, 0xEAC0, 0x9061, 0xE1CF, 0x9063, 0xCCBA, 0x9069, 0xEEEA, - 0x906D, 0xF0E4, 0x906E, 0xF3B4, 0x906F, 0xD4EE, 0x9072, 0xF2C0, - 0x9075, 0xF1E5, 0x9077, 0xF4C3, 0x9078, 0xE0D4, 0x907A, 0xEBB6, - 0x907C, 0xD7A1, 0x907D, 0xCBE8, 0x907F, 0xF9AD, 0x9080, 0xE9AD, - 0x9081, 0xD8E4, 0x9082, 0xFAB3, 0x9083, 0xE2C5, 0x9084, 0xFCBD, - 0x9087, 0xECC4, 0x9088, 0xD8B1, 0x908A, 0xDCAB, 0x908F, 0xD5A4, - 0x9091, 0xEBE9, 0x9095, 0xE8BB, 0x9099, 0xD8D7, 0x90A2, 0xFBAE, - 0x90A3, 0xD1E1, 0x90A6, 0xDBC0, 0x90A8, 0xF5BE, 0x90AA, 0xDEF7, - 0x90AF, 0xCAFB, 0x90B0, 0xF7C6, 0x90B1, 0xCFC8, 0x90B5, 0xE1D0, - 0x90B8, 0xEED0, 0x90C1, 0xE9F4, 0x90CA, 0xCEF4, 0x90DE, 0xD5CD, - 0x90E1, 0xCFDB, 0x90E8, 0xDDBB, 0x90ED, 0xCEAC, 0x90F5, 0xE9E8, - 0x90FD, 0xD4B4, 0x9102, 0xE4C7, 0x9112, 0xF5DB, 0x9115, 0xFAC1, - 0x9119, 0xDEA9, 0x9127, 0xD4F8, 0x912D, 0xEFF7, 0x9132, 0xD3B3, - 0x9149, 0xEBB7, 0x914A, 0xEFF8, 0x914B, 0xF5DC, 0x914C, 0xEDCC, - 0x914D, 0xDBD5, 0x914E, 0xF1CF, 0x9152, 0xF1D0, 0x9162, 0xF5B2, - 0x9169, 0xD9AE, 0x916A, 0xD5AC, 0x916C, 0xE2C6, 0x9175, 0xFDA3, - 0x9177, 0xFBE5, 0x9178, 0xDFAB, 0x9187, 0xE2F5, 0x9189, 0xF6AD, - 0x918B, 0xF5B3, 0x918D, 0xF0B5, 0x9192, 0xE1A5, 0x919C, 0xF5DD, - 0x91AB, 0xECA2, 0x91AC, 0xEDFD, 0x91AE, 0xF5B4, 0x91AF, 0xFBB8, - 0x91B1, 0xDBA3, 0x91B4, 0xD6CA, 0x91B5, 0xCBD9, 0x91C0, 0xE5D4, - 0x91C7, 0xF3FA, 0x91C9, 0xEBB8, 0x91CB, 0xE0B7, 0x91CC, 0xD7EC, - 0x91CD, 0xF1EC, 0x91CE, 0xE5AF, 0x91CF, 0xD5E1, 0x91D0, 0xD7ED, - 0x91D1, 0xD1D1, 0x91D7, 0xE1F2, 0x91D8, 0xEFF9, 0x91DC, 0xDDBC, - 0x91DD, 0xF6DC, 0x91E3, 0xF0E5, 0x91E7, 0xF4C4, 0x91EA, 0xE9E9, - 0x91F5, 0xF3FB, 0x920D, 0xD4EF, 0x9210, 0xCCA2, 0x9211, 0xF7FE, - 0x9212, 0xDFBC, 0x9217, 0xEBCD, 0x921E, 0xD0B7, 0x9234, 0xD6C2, - 0x923A, 0xE8AD, 0x923F, 0xEFAF, 0x9240, 0xCBA5, 0x9245, 0xCBE9, - 0x9249, 0xFAE8, 0x9257, 0xCCC6, 0x925B, 0xE6E7, 0x925E, 0xEAC7, - 0x9262, 0xDBA4, 0x9264, 0xCFC9, 0x9265, 0xE2FC, 0x9266, 0xEFFA, - 0x9280, 0xEBDE, 0x9283, 0xF5C8, 0x9285, 0xD4DE, 0x9291, 0xE0D5, - 0x9293, 0xEFB0, 0x9296, 0xE2C7, 0x9298, 0xD9AF, 0x929C, 0xF9E7, - 0x92B3, 0xE7E5, 0x92B6, 0xCFCA, 0x92B7, 0xE1D1, 0x92B9, 0xE2C8, - 0x92CC, 0xEFFB, 0x92CF, 0xFAF9, 0x92D2, 0xDCF2, 0x92E4, 0xE0A7, - 0x92EA, 0xF8E8, 0x92F8, 0xCBEA, 0x92FC, 0xCBBC, 0x9304, 0xD6E2, - 0x9310, 0xF5DE, 0x9318, 0xF5DF, 0x931A, 0xEEB6, 0x931E, 0xE2F6, - 0x931F, 0xD3CA, 0x9320, 0xEFFC, 0x9321, 0xD1C4, 0x9322, 0xEFB1, - 0x9324, 0xD1C5, 0x9326, 0xD0DE, 0x9328, 0xD9E1, 0x932B, 0xE0B8, - 0x932E, 0xCDD1, 0x932F, 0xF3B9, 0x9348, 0xE7CC, 0x934A, 0xD6A8, - 0x934B, 0xCEA7, 0x934D, 0xD4B5, 0x9354, 0xE4C8, 0x935B, 0xD3B4, - 0x936E, 0xEBB9, 0x9375, 0xCBF5, 0x937C, 0xF6DD, 0x937E, 0xF1A3, - 0x938C, 0xCCC7, 0x9394, 0xE9CA, 0x9396, 0xE1F0, 0x939A, 0xF5E0, - 0x93A3, 0xFBAF, 0x93A7, 0xCBD1, 0x93AC, 0xFBE0, 0x93AD, 0xF2E5, - 0x93B0, 0xECF0, 0x93C3, 0xF0EC, 0x93D1, 0xEEEB, 0x93DE, 0xE9CB, - 0x93E1, 0xCCF0, 0x93E4, 0xD7AF, 0x93F6, 0xF3A1, 0x9404, 0xFCF5, - 0x9418, 0xF1A4, 0x9425, 0xE0D6, 0x942B, 0xEFB2, 0x9435, 0xF4D1, - 0x9438, 0xF7A1, 0x9444, 0xF1D1, 0x9451, 0xCAFC, 0x9452, 0xCAFD, - 0x945B, 0xCECE, 0x947D, 0xF3C8, 0x947F, 0xF3BA, 0x9577, 0xEDFE, - 0x9580, 0xDAA6, 0x9583, 0xE0EC, 0x9589, 0xF8CD, 0x958B, 0xCBD2, - 0x958F, 0xEBCE, 0x9591, 0xF9D8, 0x9592, 0xF9D9, 0x9593, 0xCAE0, - 0x9594, 0xDACA, 0x9598, 0xCBA6, 0x95A3, 0xCAC8, 0x95A4, 0xF9EE, - 0x95A5, 0xDBEC, 0x95A8, 0xD0B1, 0x95AD, 0xD5EF, 0x95B1, 0xE6F3, - 0x95BB, 0xE7A2, 0x95BC, 0xE4D9, 0x95C7, 0xE4E1, 0x95CA, 0xFCC4, - 0x95D4, 0xF9EF, 0x95D5, 0xCFF4, 0x95D6, 0xF7E6, 0x95DC, 0xCEBC, - 0x95E1, 0xF4C5, 0x95E2, 0xDCA3, 0x961C, 0xDDBD, 0x9621, 0xF4C6, - 0x962A, 0xF8A1, 0x962E, 0xE8D6, 0x9632, 0xDBC1, 0x963B, 0xF0E6, - 0x963F, 0xE4B9, 0x9640, 0xF6ED, 0x9642, 0xF9AE, 0x9644, 0xDDBE, - 0x964B, 0xD7B0, 0x964C, 0xD8E8, 0x964D, 0xCBBD, 0x9650, 0xF9DA, - 0x965B, 0xF8CE, 0x965C, 0xF9F0, 0x965D, 0xE0ED, 0x965E, 0xE3B3, - 0x965F, 0xF4B3, 0x9662, 0xEAC2, 0x9663, 0xF2E6, 0x9664, 0xF0B6, - 0x966A, 0xDBD6, 0x9670, 0xEBE4, 0x9673, 0xF2E7, 0x9675, 0xD7D5, - 0x9676, 0xD4B6, 0x9677, 0xF9E8, 0x9678, 0xD7C1, 0x967D, 0xE5D5, - 0x9685, 0xE9EA, 0x9686, 0xD7CC, 0x968A, 0xD3E9, 0x968B, 0xE2C9, - 0x968D, 0xFCDB, 0x968E, 0xCDAD, 0x9694, 0xCCB0, 0x9695, 0xEAA2, - 0x9698, 0xE4F6, 0x9699, 0xD0C0, 0x969B, 0xF0B7, 0x969C, 0xEEA1, - 0x96A3, 0xD7F6, 0x96A7, 0xE2CA, 0x96A8, 0xE2CB, 0x96AA, 0xFACF, - 0x96B1, 0xEBDF, 0x96B7, 0xD6CB, 0x96BB, 0xF4B4, 0x96C0, 0xEDCD, - 0x96C1, 0xE4D2, 0x96C4, 0xEAA9, 0x96C5, 0xE4BA, 0x96C6, 0xF3A2, - 0x96C7, 0xCDD2, 0x96C9, 0xF6CB, 0x96CB, 0xF1E6, 0x96CC, 0xEDC1, - 0x96CD, 0xE8BC, 0x96CE, 0xEED1, 0x96D5, 0xF0E7, 0x96D6, 0xE2CC, - 0x96D9, 0xE4AA, 0x96DB, 0xF5E1, 0x96DC, 0xEDDA, 0x96E2, 0xD7EE, - 0x96E3, 0xD1F1, 0x96E8, 0xE9EB, 0x96E9, 0xE9EC, 0x96EA, 0xE0E4, - 0x96EF, 0xDAA7, 0x96F0, 0xDDD4, 0x96F2, 0xEAA3, 0x96F6, 0xD6C3, - 0x96F7, 0xD6F4, 0x96F9, 0xDADF, 0x96FB, 0xEFB3, 0x9700, 0xE2CD, - 0x9706, 0xEFFD, 0x9707, 0xF2E8, 0x9711, 0xEFC5, 0x9713, 0xE7E7, - 0x9716, 0xD7FD, 0x9719, 0xE7CE, 0x971C, 0xDFDC, 0x971E, 0xF9C7, - 0x9727, 0xD9F6, 0x9730, 0xDFAC, 0x9732, 0xD6DA, 0x9739, 0xDCA4, - 0x973D, 0xF0B8, 0x9742, 0xD5FA, 0x9744, 0xE4F7, 0x9748, 0xD6C4, - 0x9751, 0xF4EC, 0x9756, 0xEFFE, 0x975C, 0xF0A1, 0x975E, 0xDEAA, - 0x9761, 0xDABC, 0x9762, 0xD8FC, 0x9769, 0xFAD4, 0x976D, 0xECE5, - 0x9774, 0xFCA8, 0x9777, 0xECE6, 0x977A, 0xD8CB, 0x978B, 0xFBB9, - 0x978D, 0xE4D3, 0x978F, 0xCDF9, 0x97A0, 0xCFD3, 0x97A8, 0xCAEA, - 0x97AB, 0xCFD4, 0x97AD, 0xF8BD, 0x97C6, 0xF4C7, 0x97CB, 0xEADF, - 0x97D3, 0xF9DB, 0x97DC, 0xD4B7, 0x97F3, 0xEBE5, 0x97F6, 0xE1D2, - 0x97FB, 0xEAA4, 0x97FF, 0xFAC2, 0x9800, 0xFBE1, 0x9801, 0xFAED, - 0x9802, 0xF0A2, 0x9803, 0xCCF1, 0x9805, 0xFAA3, 0x9806, 0xE2F7, - 0x9808, 0xE2CE, 0x980A, 0xE9F5, 0x980C, 0xE1EB, 0x9810, 0xE7E8, - 0x9811, 0xE8D7, 0x9812, 0xDAF8, 0x9813, 0xD4CB, 0x9817, 0xF7F6, - 0x9818, 0xD6C5, 0x982D, 0xD4E9, 0x9830, 0xFAFA, 0x9838, 0xCCF2, - 0x9839, 0xF7DD, 0x983B, 0xDEBA, 0x9846, 0xCEA8, 0x984C, 0xF0B9, - 0x984D, 0xE4FE, 0x984E, 0xE4C9, 0x9854, 0xE4D4, 0x9858, 0xEAC3, - 0x985A, 0xEFB4, 0x985E, 0xD7BE, 0x9865, 0xFBE2, 0x9867, 0xCDD3, - 0x986B, 0xEFB5, 0x986F, 0xFAE9, 0x98A8, 0xF9A6, 0x98AF, 0xDFBD, - 0x98B1, 0xF7C7, 0x98C4, 0xF8FD, 0x98C7, 0xF8FC, 0x98DB, 0xDEAB, - 0x98DC, 0xDBE8, 0x98DF, 0xE3DD, 0x98E1, 0xE1E2, 0x98E2, 0xD1C6, - 0x98ED, 0xF6D0, 0x98EE, 0xEBE6, 0x98EF, 0xDAF9, 0x98F4, 0xECC7, - 0x98FC, 0xDEF8, 0x98FD, 0xF8E9, 0x98FE, 0xE3DE, 0x9903, 0xCEF5, - 0x9909, 0xFAC3, 0x990A, 0xE5D7, 0x990C, 0xECC8, 0x9910, 0xF3C9, - 0x9913, 0xE4BB, 0x9918, 0xE6AE, 0x991E, 0xEFB6, 0x9920, 0xDCBF, - 0x9928, 0xCEBD, 0x9945, 0xD8C3, 0x9949, 0xD0CF, 0x994B, 0xCFFA, - 0x994C, 0xF3CA, 0x994D, 0xE0D7, 0x9951, 0xD1C7, 0x9952, 0xE9AE, - 0x9954, 0xE8BD, 0x9957, 0xFAC4, 0x9996, 0xE2CF, 0x9999, 0xFAC5, - 0x999D, 0xF9B8, 0x99A5, 0xDCE0, 0x99A8, 0xFBB0, 0x99AC, 0xD8A9, - 0x99AD, 0xE5DF, 0x99AE, 0xF9A7, 0x99B1, 0xF6EE, 0x99B3, 0xF6CC, - 0x99B4, 0xE2F8, 0x99B9, 0xECF1, 0x99C1, 0xDAE0, 0x99D0, 0xF1D2, - 0x99D1, 0xD2CC, 0x99D2, 0xCFCB, 0x99D5, 0xCABD, 0x99D9, 0xDDBF, - 0x99DD, 0xF6EF, 0x99DF, 0xDEF9, 0x99ED, 0xFAB4, 0x99F1, 0xD5AD, - 0x99FF, 0xF1E7, 0x9A01, 0xDEBE, 0x9A08, 0xDCC0, 0x9A0E, 0xD1C8, - 0x9A0F, 0xD1C9, 0x9A19, 0xF8BE, 0x9A2B, 0xCBF6, 0x9A30, 0xD4F9, - 0x9A36, 0xF5E2, 0x9A37, 0xE1D3, 0x9A40, 0xD8E9, 0x9A43, 0xF8FE, - 0x9A45, 0xCFCC, 0x9A4D, 0xFDA4, 0x9A55, 0xCEF6, 0x9A57, 0xFAD0, - 0x9A5A, 0xCCF3, 0x9A5B, 0xE6BE, 0x9A5F, 0xF6AE, 0x9A62, 0xD5F0, - 0x9A65, 0xD1CA, 0x9A69, 0xFCBE, 0x9A6A, 0xD5F1, 0x9AA8, 0xCDE9, - 0x9AB8, 0xFAB5, 0x9AD3, 0xE2D0, 0x9AD4, 0xF4F7, 0x9AD8, 0xCDD4, - 0x9AE5, 0xE7A3, 0x9AEE, 0xDBA5, 0x9B1A, 0xE2D1, 0x9B27, 0xD7A2, - 0x9B2A, 0xF7E3, 0x9B31, 0xEAA6, 0x9B3C, 0xD0A1, 0x9B41, 0xCEDA, - 0x9B42, 0xFBEB, 0x9B43, 0xDBA6, 0x9B44, 0xDBDE, 0x9B45, 0xD8E5, - 0x9B4F, 0xEAE0, 0x9B54, 0xD8AA, 0x9B5A, 0xE5E0, 0x9B6F, 0xD6DB, - 0x9B8E, 0xEFC6, 0x9B91, 0xF8EA, 0x9B9F, 0xE4D5, 0x9BAB, 0xCEF7, - 0x9BAE, 0xE0D8, 0x9BC9, 0xD7EF, 0x9BD6, 0xF4ED, 0x9BE4, 0xCDE6, - 0x9BE8, 0xCCF4, 0x9C0D, 0xF5E3, 0x9C10, 0xE4CA, 0x9C12, 0xDCE1, - 0x9C15, 0xF9C8, 0x9C25, 0xFCBF, 0x9C32, 0xE8A7, 0x9C3B, 0xD8C4, - 0x9C47, 0xCBBE, 0x9C49, 0xDCAE, 0x9C57, 0xD7F7, 0x9CE5, 0xF0E8, - 0x9CE7, 0xDDC0, 0x9CE9, 0xCFCD, 0x9CF3, 0xDCF3, 0x9CF4, 0xD9B0, - 0x9CF6, 0xE6E9, 0x9D09, 0xE4BC, 0x9D1B, 0xEAC4, 0x9D26, 0xE4EC, - 0x9D28, 0xE4E5, 0x9D3B, 0xFBF8, 0x9D51, 0xCCBB, 0x9D5D, 0xE4BD, - 0x9D60, 0xCDDC, 0x9D61, 0xD9F7, 0x9D6C, 0xDDDF, 0x9D72, 0xEDCE, - 0x9DA9, 0xD9D0, 0x9DAF, 0xE5A3, 0x9DB4, 0xF9CD, 0x9DC4, 0xCDAE, - 0x9DD7, 0xCFCE, 0x9DF2, 0xF6AF, 0x9DF8, 0xFDD3, 0x9DF9, 0xEBED, - 0x9DFA, 0xD6DC, 0x9E1A, 0xE5A4, 0x9E1E, 0xD5B6, 0x9E75, 0xD6DD, - 0x9E79, 0xF9E9, 0x9E7D, 0xE7A4, 0x9E7F, 0xD6E3, 0x9E92, 0xD1CB, - 0x9E93, 0xD6E4, 0x9E97, 0xD5F2, 0x9E9D, 0xDEFA, 0x9E9F, 0xD7F8, - 0x9EA5, 0xD8EA, 0x9EB4, 0xCFD5, 0x9EB5, 0xD8FD, 0x9EBB, 0xD8AB, - 0x9EBE, 0xFDCB, 0x9EC3, 0xFCDC, 0x9ECD, 0xE0A8, 0x9ECE, 0xD5F3, - 0x9ED1, 0xFDD9, 0x9ED4, 0xCCA3, 0x9ED8, 0xD9F9, 0x9EDB, 0xD3EA, - 0x9EDC, 0xF5F5, 0x9EDE, 0xEFC7, 0x9EE8, 0xD3DA, 0x9EF4, 0xDABD, - 0x9F07, 0xE8A8, 0x9F08, 0xDCAF, 0x9F0E, 0xF0A3, 0x9F13, 0xCDD5, - 0x9F20, 0xE0A9, 0x9F3B, 0xDEAC, 0x9F4A, 0xF0BA, 0x9F4B, 0xEEB1, - 0x9F4E, 0xEEB2, 0x9F52, 0xF6CD, 0x9F5F, 0xEED2, 0x9F61, 0xD6C6, - 0x9F67, 0xE0E5, 0x9F6A, 0xF3BB, 0x9F6C, 0xE5E1, 0x9F77, 0xE4CB, - 0x9F8D, 0xD7A3, 0x9F90, 0xDBC2, 0x9F95, 0xCAFE, 0x9F9C, 0xCFCF, - 0xAC00, 0xB0A1, 0xAC01, 0xB0A2, 0xAC02, 0x8141, 0xAC03, 0x8142, - 0xAC04, 0xB0A3, 0xAC05, 0x8143, 0xAC06, 0x8144, 0xAC07, 0xB0A4, - 0xAC08, 0xB0A5, 0xAC09, 0xB0A6, 0xAC0A, 0xB0A7, 0xAC0B, 0x8145, - 0xAC0C, 0x8146, 0xAC0D, 0x8147, 0xAC0E, 0x8148, 0xAC0F, 0x8149, - 0xAC10, 0xB0A8, 0xAC11, 0xB0A9, 0xAC12, 0xB0AA, 0xAC13, 0xB0AB, - 0xAC14, 0xB0AC, 0xAC15, 0xB0AD, 0xAC16, 0xB0AE, 0xAC17, 0xB0AF, - 0xAC18, 0x814A, 0xAC19, 0xB0B0, 0xAC1A, 0xB0B1, 0xAC1B, 0xB0B2, - 0xAC1C, 0xB0B3, 0xAC1D, 0xB0B4, 0xAC1E, 0x814B, 0xAC1F, 0x814C, - 0xAC20, 0xB0B5, 0xAC21, 0x814D, 0xAC22, 0x814E, 0xAC23, 0x814F, - 0xAC24, 0xB0B6, 0xAC25, 0x8150, 0xAC26, 0x8151, 0xAC27, 0x8152, - 0xAC28, 0x8153, 0xAC29, 0x8154, 0xAC2A, 0x8155, 0xAC2B, 0x8156, - 0xAC2C, 0xB0B7, 0xAC2D, 0xB0B8, 0xAC2E, 0x8157, 0xAC2F, 0xB0B9, - 0xAC30, 0xB0BA, 0xAC31, 0xB0BB, 0xAC32, 0x8158, 0xAC33, 0x8159, - 0xAC34, 0x815A, 0xAC35, 0x8161, 0xAC36, 0x8162, 0xAC37, 0x8163, - 0xAC38, 0xB0BC, 0xAC39, 0xB0BD, 0xAC3A, 0x8164, 0xAC3B, 0x8165, - 0xAC3C, 0xB0BE, 0xAC3D, 0x8166, 0xAC3E, 0x8167, 0xAC3F, 0x8168, - 0xAC40, 0xB0BF, 0xAC41, 0x8169, 0xAC42, 0x816A, 0xAC43, 0x816B, - 0xAC44, 0x816C, 0xAC45, 0x816D, 0xAC46, 0x816E, 0xAC47, 0x816F, - 0xAC48, 0x8170, 0xAC49, 0x8171, 0xAC4A, 0x8172, 0xAC4B, 0xB0C0, - 0xAC4C, 0x8173, 0xAC4D, 0xB0C1, 0xAC4E, 0x8174, 0xAC4F, 0x8175, - 0xAC50, 0x8176, 0xAC51, 0x8177, 0xAC52, 0x8178, 0xAC53, 0x8179, - 0xAC54, 0xB0C2, 0xAC55, 0x817A, 0xAC56, 0x8181, 0xAC57, 0x8182, - 0xAC58, 0xB0C3, 0xAC59, 0x8183, 0xAC5A, 0x8184, 0xAC5B, 0x8185, - 0xAC5C, 0xB0C4, 0xAC5D, 0x8186, 0xAC5E, 0x8187, 0xAC5F, 0x8188, - 0xAC60, 0x8189, 0xAC61, 0x818A, 0xAC62, 0x818B, 0xAC63, 0x818C, - 0xAC64, 0x818D, 0xAC65, 0x818E, 0xAC66, 0x818F, 0xAC67, 0x8190, - 0xAC68, 0x8191, 0xAC69, 0x8192, 0xAC6A, 0x8193, 0xAC6B, 0x8194, - 0xAC6C, 0x8195, 0xAC6D, 0x8196, 0xAC6E, 0x8197, 0xAC6F, 0x8198, - 0xAC70, 0xB0C5, 0xAC71, 0xB0C6, 0xAC72, 0x8199, 0xAC73, 0x819A, - 0xAC74, 0xB0C7, 0xAC75, 0x819B, 0xAC76, 0x819C, 0xAC77, 0xB0C8, - 0xAC78, 0xB0C9, 0xAC79, 0x819D, 0xAC7A, 0xB0CA, 0xAC7B, 0x819E, - 0xAC7C, 0x819F, 0xAC7D, 0x81A0, 0xAC7E, 0x81A1, 0xAC7F, 0x81A2, - 0xAC80, 0xB0CB, 0xAC81, 0xB0CC, 0xAC82, 0x81A3, 0xAC83, 0xB0CD, - 0xAC84, 0xB0CE, 0xAC85, 0xB0CF, 0xAC86, 0xB0D0, 0xAC87, 0x81A4, - 0xAC88, 0x81A5, 0xAC89, 0xB0D1, 0xAC8A, 0xB0D2, 0xAC8B, 0xB0D3, - 0xAC8C, 0xB0D4, 0xAC8D, 0x81A6, 0xAC8E, 0x81A7, 0xAC8F, 0x81A8, - 0xAC90, 0xB0D5, 0xAC91, 0x81A9, 0xAC92, 0x81AA, 0xAC93, 0x81AB, - 0xAC94, 0xB0D6, 0xAC95, 0x81AC, 0xAC96, 0x81AD, 0xAC97, 0x81AE, - 0xAC98, 0x81AF, 0xAC99, 0x81B0, 0xAC9A, 0x81B1, 0xAC9B, 0x81B2, - 0xAC9C, 0xB0D7, 0xAC9D, 0xB0D8, 0xAC9E, 0x81B3, 0xAC9F, 0xB0D9, - 0xACA0, 0xB0DA, 0xACA1, 0xB0DB, 0xACA2, 0x81B4, 0xACA3, 0x81B5, - 0xACA4, 0x81B6, 0xACA5, 0x81B7, 0xACA6, 0x81B8, 0xACA7, 0x81B9, - 0xACA8, 0xB0DC, 0xACA9, 0xB0DD, 0xACAA, 0xB0DE, 0xACAB, 0x81BA, - 0xACAC, 0xB0DF, 0xACAD, 0x81BB, 0xACAE, 0x81BC, 0xACAF, 0xB0E0, - 0xACB0, 0xB0E1, 0xACB1, 0x81BD, 0xACB2, 0x81BE, 0xACB3, 0x81BF, - 0xACB4, 0x81C0, 0xACB5, 0x81C1, 0xACB6, 0x81C2, 0xACB7, 0x81C3, - 0xACB8, 0xB0E2, 0xACB9, 0xB0E3, 0xACBA, 0x81C4, 0xACBB, 0xB0E4, - 0xACBC, 0xB0E5, 0xACBD, 0xB0E6, 0xACBE, 0x81C5, 0xACBF, 0x81C6, - 0xACC0, 0x81C7, 0xACC1, 0xB0E7, 0xACC2, 0x81C8, 0xACC3, 0x81C9, - 0xACC4, 0xB0E8, 0xACC5, 0x81CA, 0xACC6, 0x81CB, 0xACC7, 0x81CC, - 0xACC8, 0xB0E9, 0xACC9, 0x81CD, 0xACCA, 0x81CE, 0xACCB, 0x81CF, - 0xACCC, 0xB0EA, 0xACCD, 0x81D0, 0xACCE, 0x81D1, 0xACCF, 0x81D2, - 0xACD0, 0x81D3, 0xACD1, 0x81D4, 0xACD2, 0x81D5, 0xACD3, 0x81D6, - 0xACD4, 0x81D7, 0xACD5, 0xB0EB, 0xACD6, 0x81D8, 0xACD7, 0xB0EC, - 0xACD8, 0x81D9, 0xACD9, 0x81DA, 0xACDA, 0x81DB, 0xACDB, 0x81DC, - 0xACDC, 0x81DD, 0xACDD, 0x81DE, 0xACDE, 0x81DF, 0xACDF, 0x81E0, - 0xACE0, 0xB0ED, 0xACE1, 0xB0EE, 0xACE2, 0x81E1, 0xACE3, 0x81E2, - 0xACE4, 0xB0EF, 0xACE5, 0x81E3, 0xACE6, 0x81E4, 0xACE7, 0xB0F0, - 0xACE8, 0xB0F1, 0xACE9, 0x81E5, 0xACEA, 0xB0F2, 0xACEB, 0x81E6, - 0xACEC, 0xB0F3, 0xACED, 0x81E7, 0xACEE, 0x81E8, 0xACEF, 0xB0F4, - 0xACF0, 0xB0F5, 0xACF1, 0xB0F6, 0xACF2, 0x81E9, 0xACF3, 0xB0F7, - 0xACF4, 0x81EA, 0xACF5, 0xB0F8, 0xACF6, 0xB0F9, 0xACF7, 0x81EB, - 0xACF8, 0x81EC, 0xACF9, 0x81ED, 0xACFA, 0x81EE, 0xACFB, 0x81EF, - 0xACFC, 0xB0FA, 0xACFD, 0xB0FB, 0xACFE, 0x81F0, 0xACFF, 0x81F1, - 0xAD00, 0xB0FC, 0xAD01, 0x81F2, 0xAD02, 0x81F3, 0xAD03, 0x81F4, - 0xAD04, 0xB0FD, 0xAD05, 0x81F5, 0xAD06, 0xB0FE, 0xAD07, 0x81F6, - 0xAD08, 0x81F7, 0xAD09, 0x81F8, 0xAD0A, 0x81F9, 0xAD0B, 0x81FA, - 0xAD0C, 0xB1A1, 0xAD0D, 0xB1A2, 0xAD0E, 0x81FB, 0xAD0F, 0xB1A3, - 0xAD10, 0x81FC, 0xAD11, 0xB1A4, 0xAD12, 0x81FD, 0xAD13, 0x81FE, - 0xAD14, 0x8241, 0xAD15, 0x8242, 0xAD16, 0x8243, 0xAD17, 0x8244, - 0xAD18, 0xB1A5, 0xAD19, 0x8245, 0xAD1A, 0x8246, 0xAD1B, 0x8247, - 0xAD1C, 0xB1A6, 0xAD1D, 0x8248, 0xAD1E, 0x8249, 0xAD1F, 0x824A, - 0xAD20, 0xB1A7, 0xAD21, 0x824B, 0xAD22, 0x824C, 0xAD23, 0x824D, - 0xAD24, 0x824E, 0xAD25, 0x824F, 0xAD26, 0x8250, 0xAD27, 0x8251, - 0xAD28, 0x8252, 0xAD29, 0xB1A8, 0xAD2A, 0x8253, 0xAD2B, 0x8254, - 0xAD2C, 0xB1A9, 0xAD2D, 0xB1AA, 0xAD2E, 0x8255, 0xAD2F, 0x8256, - 0xAD30, 0x8257, 0xAD31, 0x8258, 0xAD32, 0x8259, 0xAD33, 0x825A, - 0xAD34, 0xB1AB, 0xAD35, 0xB1AC, 0xAD36, 0x8261, 0xAD37, 0x8262, - 0xAD38, 0xB1AD, 0xAD39, 0x8263, 0xAD3A, 0x8264, 0xAD3B, 0x8265, - 0xAD3C, 0xB1AE, 0xAD3D, 0x8266, 0xAD3E, 0x8267, 0xAD3F, 0x8268, - 0xAD40, 0x8269, 0xAD41, 0x826A, 0xAD42, 0x826B, 0xAD43, 0x826C, - 0xAD44, 0xB1AF, 0xAD45, 0xB1B0, 0xAD46, 0x826D, 0xAD47, 0xB1B1, - 0xAD48, 0x826E, 0xAD49, 0xB1B2, 0xAD4A, 0x826F, 0xAD4B, 0x8270, - 0xAD4C, 0x8271, 0xAD4D, 0x8272, 0xAD4E, 0x8273, 0xAD4F, 0x8274, - 0xAD50, 0xB1B3, 0xAD51, 0x8275, 0xAD52, 0x8276, 0xAD53, 0x8277, - 0xAD54, 0xB1B4, 0xAD55, 0x8278, 0xAD56, 0x8279, 0xAD57, 0x827A, - 0xAD58, 0xB1B5, 0xAD59, 0x8281, 0xAD5A, 0x8282, 0xAD5B, 0x8283, - 0xAD5C, 0x8284, 0xAD5D, 0x8285, 0xAD5E, 0x8286, 0xAD5F, 0x8287, - 0xAD60, 0x8288, 0xAD61, 0xB1B6, 0xAD62, 0x8289, 0xAD63, 0xB1B7, - 0xAD64, 0x828A, 0xAD65, 0x828B, 0xAD66, 0x828C, 0xAD67, 0x828D, - 0xAD68, 0x828E, 0xAD69, 0x828F, 0xAD6A, 0x8290, 0xAD6B, 0x8291, - 0xAD6C, 0xB1B8, 0xAD6D, 0xB1B9, 0xAD6E, 0x8292, 0xAD6F, 0x8293, - 0xAD70, 0xB1BA, 0xAD71, 0x8294, 0xAD72, 0x8295, 0xAD73, 0xB1BB, - 0xAD74, 0xB1BC, 0xAD75, 0xB1BD, 0xAD76, 0xB1BE, 0xAD77, 0x8296, - 0xAD78, 0x8297, 0xAD79, 0x8298, 0xAD7A, 0x8299, 0xAD7B, 0xB1BF, - 0xAD7C, 0xB1C0, 0xAD7D, 0xB1C1, 0xAD7E, 0x829A, 0xAD7F, 0xB1C2, - 0xAD80, 0x829B, 0xAD81, 0xB1C3, 0xAD82, 0xB1C4, 0xAD83, 0x829C, - 0xAD84, 0x829D, 0xAD85, 0x829E, 0xAD86, 0x829F, 0xAD87, 0x82A0, - 0xAD88, 0xB1C5, 0xAD89, 0xB1C6, 0xAD8A, 0x82A1, 0xAD8B, 0x82A2, - 0xAD8C, 0xB1C7, 0xAD8D, 0x82A3, 0xAD8E, 0x82A4, 0xAD8F, 0x82A5, - 0xAD90, 0xB1C8, 0xAD91, 0x82A6, 0xAD92, 0x82A7, 0xAD93, 0x82A8, - 0xAD94, 0x82A9, 0xAD95, 0x82AA, 0xAD96, 0x82AB, 0xAD97, 0x82AC, - 0xAD98, 0x82AD, 0xAD99, 0x82AE, 0xAD9A, 0x82AF, 0xAD9B, 0x82B0, - 0xAD9C, 0xB1C9, 0xAD9D, 0xB1CA, 0xAD9E, 0x82B1, 0xAD9F, 0x82B2, - 0xADA0, 0x82B3, 0xADA1, 0x82B4, 0xADA2, 0x82B5, 0xADA3, 0x82B6, - 0xADA4, 0xB1CB, 0xADA5, 0x82B7, 0xADA6, 0x82B8, 0xADA7, 0x82B9, - 0xADA8, 0x82BA, 0xADA9, 0x82BB, 0xADAA, 0x82BC, 0xADAB, 0x82BD, - 0xADAC, 0x82BE, 0xADAD, 0x82BF, 0xADAE, 0x82C0, 0xADAF, 0x82C1, - 0xADB0, 0x82C2, 0xADB1, 0x82C3, 0xADB2, 0x82C4, 0xADB3, 0x82C5, - 0xADB4, 0x82C6, 0xADB5, 0x82C7, 0xADB6, 0x82C8, 0xADB7, 0xB1CC, - 0xADB8, 0x82C9, 0xADB9, 0x82CA, 0xADBA, 0x82CB, 0xADBB, 0x82CC, - 0xADBC, 0x82CD, 0xADBD, 0x82CE, 0xADBE, 0x82CF, 0xADBF, 0x82D0, - 0xADC0, 0xB1CD, 0xADC1, 0xB1CE, 0xADC2, 0x82D1, 0xADC3, 0x82D2, - 0xADC4, 0xB1CF, 0xADC5, 0x82D3, 0xADC6, 0x82D4, 0xADC7, 0x82D5, - 0xADC8, 0xB1D0, 0xADC9, 0x82D6, 0xADCA, 0x82D7, 0xADCB, 0x82D8, - 0xADCC, 0x82D9, 0xADCD, 0x82DA, 0xADCE, 0x82DB, 0xADCF, 0x82DC, - 0xADD0, 0xB1D1, 0xADD1, 0xB1D2, 0xADD2, 0x82DD, 0xADD3, 0xB1D3, - 0xADD4, 0x82DE, 0xADD5, 0x82DF, 0xADD6, 0x82E0, 0xADD7, 0x82E1, - 0xADD8, 0x82E2, 0xADD9, 0x82E3, 0xADDA, 0x82E4, 0xADDB, 0x82E5, - 0xADDC, 0xB1D4, 0xADDD, 0x82E6, 0xADDE, 0x82E7, 0xADDF, 0x82E8, - 0xADE0, 0xB1D5, 0xADE1, 0x82E9, 0xADE2, 0x82EA, 0xADE3, 0x82EB, - 0xADE4, 0xB1D6, 0xADE5, 0x82EC, 0xADE6, 0x82ED, 0xADE7, 0x82EE, - 0xADE8, 0x82EF, 0xADE9, 0x82F0, 0xADEA, 0x82F1, 0xADEB, 0x82F2, - 0xADEC, 0x82F3, 0xADED, 0x82F4, 0xADEE, 0x82F5, 0xADEF, 0x82F6, - 0xADF0, 0x82F7, 0xADF1, 0x82F8, 0xADF2, 0x82F9, 0xADF3, 0x82FA, - 0xADF4, 0x82FB, 0xADF5, 0x82FC, 0xADF6, 0x82FD, 0xADF7, 0x82FE, - 0xADF8, 0xB1D7, 0xADF9, 0xB1D8, 0xADFA, 0x8341, 0xADFB, 0x8342, - 0xADFC, 0xB1D9, 0xADFD, 0x8343, 0xADFE, 0x8344, 0xADFF, 0xB1DA, - 0xAE00, 0xB1DB, 0xAE01, 0xB1DC, 0xAE02, 0x8345, 0xAE03, 0x8346, - 0xAE04, 0x8347, 0xAE05, 0x8348, 0xAE06, 0x8349, 0xAE07, 0x834A, - 0xAE08, 0xB1DD, 0xAE09, 0xB1DE, 0xAE0A, 0x834B, 0xAE0B, 0xB1DF, - 0xAE0C, 0x834C, 0xAE0D, 0xB1E0, 0xAE0E, 0x834D, 0xAE0F, 0x834E, - 0xAE10, 0x834F, 0xAE11, 0x8350, 0xAE12, 0x8351, 0xAE13, 0x8352, - 0xAE14, 0xB1E1, 0xAE15, 0x8353, 0xAE16, 0x8354, 0xAE17, 0x8355, - 0xAE18, 0x8356, 0xAE19, 0x8357, 0xAE1A, 0x8358, 0xAE1B, 0x8359, - 0xAE1C, 0x835A, 0xAE1D, 0x8361, 0xAE1E, 0x8362, 0xAE1F, 0x8363, - 0xAE20, 0x8364, 0xAE21, 0x8365, 0xAE22, 0x8366, 0xAE23, 0x8367, - 0xAE24, 0x8368, 0xAE25, 0x8369, 0xAE26, 0x836A, 0xAE27, 0x836B, - 0xAE28, 0x836C, 0xAE29, 0x836D, 0xAE2A, 0x836E, 0xAE2B, 0x836F, - 0xAE2C, 0x8370, 0xAE2D, 0x8371, 0xAE2E, 0x8372, 0xAE2F, 0x8373, - 0xAE30, 0xB1E2, 0xAE31, 0xB1E3, 0xAE32, 0x8374, 0xAE33, 0x8375, - 0xAE34, 0xB1E4, 0xAE35, 0x8376, 0xAE36, 0x8377, 0xAE37, 0xB1E5, - 0xAE38, 0xB1E6, 0xAE39, 0x8378, 0xAE3A, 0xB1E7, 0xAE3B, 0x8379, - 0xAE3C, 0x837A, 0xAE3D, 0x8381, 0xAE3E, 0x8382, 0xAE3F, 0x8383, - 0xAE40, 0xB1E8, 0xAE41, 0xB1E9, 0xAE42, 0x8384, 0xAE43, 0xB1EA, - 0xAE44, 0x8385, 0xAE45, 0xB1EB, 0xAE46, 0xB1EC, 0xAE47, 0x8386, - 0xAE48, 0x8387, 0xAE49, 0x8388, 0xAE4A, 0xB1ED, 0xAE4B, 0x8389, - 0xAE4C, 0xB1EE, 0xAE4D, 0xB1EF, 0xAE4E, 0xB1F0, 0xAE4F, 0x838A, - 0xAE50, 0xB1F1, 0xAE51, 0x838B, 0xAE52, 0x838C, 0xAE53, 0x838D, - 0xAE54, 0xB1F2, 0xAE55, 0x838E, 0xAE56, 0xB1F3, 0xAE57, 0x838F, - 0xAE58, 0x8390, 0xAE59, 0x8391, 0xAE5A, 0x8392, 0xAE5B, 0x8393, - 0xAE5C, 0xB1F4, 0xAE5D, 0xB1F5, 0xAE5E, 0x8394, 0xAE5F, 0xB1F6, - 0xAE60, 0xB1F7, 0xAE61, 0xB1F8, 0xAE62, 0x8395, 0xAE63, 0x8396, - 0xAE64, 0x8397, 0xAE65, 0xB1F9, 0xAE66, 0x8398, 0xAE67, 0x8399, - 0xAE68, 0xB1FA, 0xAE69, 0xB1FB, 0xAE6A, 0x839A, 0xAE6B, 0x839B, - 0xAE6C, 0xB1FC, 0xAE6D, 0x839C, 0xAE6E, 0x839D, 0xAE6F, 0x839E, - 0xAE70, 0xB1FD, 0xAE71, 0x839F, 0xAE72, 0x83A0, 0xAE73, 0x83A1, - 0xAE74, 0x83A2, 0xAE75, 0x83A3, 0xAE76, 0x83A4, 0xAE77, 0x83A5, - 0xAE78, 0xB1FE, 0xAE79, 0xB2A1, 0xAE7A, 0x83A6, 0xAE7B, 0xB2A2, - 0xAE7C, 0xB2A3, 0xAE7D, 0xB2A4, 0xAE7E, 0x83A7, 0xAE7F, 0x83A8, - 0xAE80, 0x83A9, 0xAE81, 0x83AA, 0xAE82, 0x83AB, 0xAE83, 0x83AC, - 0xAE84, 0xB2A5, 0xAE85, 0xB2A6, 0xAE86, 0x83AD, 0xAE87, 0x83AE, - 0xAE88, 0x83AF, 0xAE89, 0x83B0, 0xAE8A, 0x83B1, 0xAE8B, 0x83B2, - 0xAE8C, 0xB2A7, 0xAE8D, 0x83B3, 0xAE8E, 0x83B4, 0xAE8F, 0x83B5, - 0xAE90, 0x83B6, 0xAE91, 0x83B7, 0xAE92, 0x83B8, 0xAE93, 0x83B9, - 0xAE94, 0x83BA, 0xAE95, 0x83BB, 0xAE96, 0x83BC, 0xAE97, 0x83BD, - 0xAE98, 0x83BE, 0xAE99, 0x83BF, 0xAE9A, 0x83C0, 0xAE9B, 0x83C1, - 0xAE9C, 0x83C2, 0xAE9D, 0x83C3, 0xAE9E, 0x83C4, 0xAE9F, 0x83C5, - 0xAEA0, 0x83C6, 0xAEA1, 0x83C7, 0xAEA2, 0x83C8, 0xAEA3, 0x83C9, - 0xAEA4, 0x83CA, 0xAEA5, 0x83CB, 0xAEA6, 0x83CC, 0xAEA7, 0x83CD, - 0xAEA8, 0x83CE, 0xAEA9, 0x83CF, 0xAEAA, 0x83D0, 0xAEAB, 0x83D1, - 0xAEAC, 0x83D2, 0xAEAD, 0x83D3, 0xAEAE, 0x83D4, 0xAEAF, 0x83D5, - 0xAEB0, 0x83D6, 0xAEB1, 0x83D7, 0xAEB2, 0x83D8, 0xAEB3, 0x83D9, - 0xAEB4, 0x83DA, 0xAEB5, 0x83DB, 0xAEB6, 0x83DC, 0xAEB7, 0x83DD, - 0xAEB8, 0x83DE, 0xAEB9, 0x83DF, 0xAEBA, 0x83E0, 0xAEBB, 0x83E1, - 0xAEBC, 0xB2A8, 0xAEBD, 0xB2A9, 0xAEBE, 0xB2AA, 0xAEBF, 0x83E2, - 0xAEC0, 0xB2AB, 0xAEC1, 0x83E3, 0xAEC2, 0x83E4, 0xAEC3, 0x83E5, - 0xAEC4, 0xB2AC, 0xAEC5, 0x83E6, 0xAEC6, 0x83E7, 0xAEC7, 0x83E8, - 0xAEC8, 0x83E9, 0xAEC9, 0x83EA, 0xAECA, 0x83EB, 0xAECB, 0x83EC, - 0xAECC, 0xB2AD, 0xAECD, 0xB2AE, 0xAECE, 0x83ED, 0xAECF, 0xB2AF, - 0xAED0, 0xB2B0, 0xAED1, 0xB2B1, 0xAED2, 0x83EE, 0xAED3, 0x83EF, - 0xAED4, 0x83F0, 0xAED5, 0x83F1, 0xAED6, 0x83F2, 0xAED7, 0x83F3, - 0xAED8, 0xB2B2, 0xAED9, 0xB2B3, 0xAEDA, 0x83F4, 0xAEDB, 0x83F5, - 0xAEDC, 0xB2B4, 0xAEDD, 0x83F6, 0xAEDE, 0x83F7, 0xAEDF, 0x83F8, - 0xAEE0, 0x83F9, 0xAEE1, 0x83FA, 0xAEE2, 0x83FB, 0xAEE3, 0x83FC, - 0xAEE4, 0x83FD, 0xAEE5, 0x83FE, 0xAEE6, 0x8441, 0xAEE7, 0x8442, - 0xAEE8, 0xB2B5, 0xAEE9, 0x8443, 0xAEEA, 0x8444, 0xAEEB, 0xB2B6, - 0xAEEC, 0x8445, 0xAEED, 0xB2B7, 0xAEEE, 0x8446, 0xAEEF, 0x8447, - 0xAEF0, 0x8448, 0xAEF1, 0x8449, 0xAEF2, 0x844A, 0xAEF3, 0x844B, - 0xAEF4, 0xB2B8, 0xAEF5, 0x844C, 0xAEF6, 0x844D, 0xAEF7, 0x844E, - 0xAEF8, 0xB2B9, 0xAEF9, 0x844F, 0xAEFA, 0x8450, 0xAEFB, 0x8451, - 0xAEFC, 0xB2BA, 0xAEFD, 0x8452, 0xAEFE, 0x8453, 0xAEFF, 0x8454, - 0xAF00, 0x8455, 0xAF01, 0x8456, 0xAF02, 0x8457, 0xAF03, 0x8458, - 0xAF04, 0x8459, 0xAF05, 0x845A, 0xAF06, 0x8461, 0xAF07, 0xB2BB, - 0xAF08, 0xB2BC, 0xAF09, 0x8462, 0xAF0A, 0x8463, 0xAF0B, 0x8464, - 0xAF0C, 0x8465, 0xAF0D, 0xB2BD, 0xAF0E, 0x8466, 0xAF0F, 0x8467, - 0xAF10, 0xB2BE, 0xAF11, 0x8468, 0xAF12, 0x8469, 0xAF13, 0x846A, - 0xAF14, 0x846B, 0xAF15, 0x846C, 0xAF16, 0x846D, 0xAF17, 0x846E, - 0xAF18, 0x846F, 0xAF19, 0x8470, 0xAF1A, 0x8471, 0xAF1B, 0x8472, - 0xAF1C, 0x8473, 0xAF1D, 0x8474, 0xAF1E, 0x8475, 0xAF1F, 0x8476, - 0xAF20, 0x8477, 0xAF21, 0x8478, 0xAF22, 0x8479, 0xAF23, 0x847A, - 0xAF24, 0x8481, 0xAF25, 0x8482, 0xAF26, 0x8483, 0xAF27, 0x8484, - 0xAF28, 0x8485, 0xAF29, 0x8486, 0xAF2A, 0x8487, 0xAF2B, 0x8488, - 0xAF2C, 0xB2BF, 0xAF2D, 0xB2C0, 0xAF2E, 0x8489, 0xAF2F, 0x848A, - 0xAF30, 0xB2C1, 0xAF31, 0x848B, 0xAF32, 0xB2C2, 0xAF33, 0x848C, - 0xAF34, 0xB2C3, 0xAF35, 0x848D, 0xAF36, 0x848E, 0xAF37, 0x848F, - 0xAF38, 0x8490, 0xAF39, 0x8491, 0xAF3A, 0x8492, 0xAF3B, 0x8493, - 0xAF3C, 0xB2C4, 0xAF3D, 0xB2C5, 0xAF3E, 0x8494, 0xAF3F, 0xB2C6, - 0xAF40, 0x8495, 0xAF41, 0xB2C7, 0xAF42, 0xB2C8, 0xAF43, 0xB2C9, - 0xAF44, 0x8496, 0xAF45, 0x8497, 0xAF46, 0x8498, 0xAF47, 0x8499, - 0xAF48, 0xB2CA, 0xAF49, 0xB2CB, 0xAF4A, 0x849A, 0xAF4B, 0x849B, - 0xAF4C, 0x849C, 0xAF4D, 0x849D, 0xAF4E, 0x849E, 0xAF4F, 0x849F, - 0xAF50, 0xB2CC, 0xAF51, 0x84A0, 0xAF52, 0x84A1, 0xAF53, 0x84A2, - 0xAF54, 0x84A3, 0xAF55, 0x84A4, 0xAF56, 0x84A5, 0xAF57, 0x84A6, - 0xAF58, 0x84A7, 0xAF59, 0x84A8, 0xAF5A, 0x84A9, 0xAF5B, 0x84AA, - 0xAF5C, 0xB2CD, 0xAF5D, 0xB2CE, 0xAF5E, 0x84AB, 0xAF5F, 0x84AC, - 0xAF60, 0x84AD, 0xAF61, 0x84AE, 0xAF62, 0x84AF, 0xAF63, 0x84B0, - 0xAF64, 0xB2CF, 0xAF65, 0xB2D0, 0xAF66, 0x84B1, 0xAF67, 0x84B2, - 0xAF68, 0x84B3, 0xAF69, 0x84B4, 0xAF6A, 0x84B5, 0xAF6B, 0x84B6, - 0xAF6C, 0x84B7, 0xAF6D, 0x84B8, 0xAF6E, 0x84B9, 0xAF6F, 0x84BA, - 0xAF70, 0x84BB, 0xAF71, 0x84BC, 0xAF72, 0x84BD, 0xAF73, 0x84BE, - 0xAF74, 0x84BF, 0xAF75, 0x84C0, 0xAF76, 0x84C1, 0xAF77, 0x84C2, - 0xAF78, 0x84C3, 0xAF79, 0xB2D1, 0xAF7A, 0x84C4, 0xAF7B, 0x84C5, - 0xAF7C, 0x84C6, 0xAF7D, 0x84C7, 0xAF7E, 0x84C8, 0xAF7F, 0x84C9, - 0xAF80, 0xB2D2, 0xAF81, 0x84CA, 0xAF82, 0x84CB, 0xAF83, 0x84CC, - 0xAF84, 0xB2D3, 0xAF85, 0x84CD, 0xAF86, 0x84CE, 0xAF87, 0x84CF, - 0xAF88, 0xB2D4, 0xAF89, 0x84D0, 0xAF8A, 0x84D1, 0xAF8B, 0x84D2, - 0xAF8C, 0x84D3, 0xAF8D, 0x84D4, 0xAF8E, 0x84D5, 0xAF8F, 0x84D6, - 0xAF90, 0xB2D5, 0xAF91, 0xB2D6, 0xAF92, 0x84D7, 0xAF93, 0x84D8, - 0xAF94, 0x84D9, 0xAF95, 0xB2D7, 0xAF96, 0x84DA, 0xAF97, 0x84DB, - 0xAF98, 0x84DC, 0xAF99, 0x84DD, 0xAF9A, 0x84DE, 0xAF9B, 0x84DF, - 0xAF9C, 0xB2D8, 0xAF9D, 0x84E0, 0xAF9E, 0x84E1, 0xAF9F, 0x84E2, - 0xAFA0, 0x84E3, 0xAFA1, 0x84E4, 0xAFA2, 0x84E5, 0xAFA3, 0x84E6, - 0xAFA4, 0x84E7, 0xAFA5, 0x84E8, 0xAFA6, 0x84E9, 0xAFA7, 0x84EA, - 0xAFA8, 0x84EB, 0xAFA9, 0x84EC, 0xAFAA, 0x84ED, 0xAFAB, 0x84EE, - 0xAFAC, 0x84EF, 0xAFAD, 0x84F0, 0xAFAE, 0x84F1, 0xAFAF, 0x84F2, - 0xAFB0, 0x84F3, 0xAFB1, 0x84F4, 0xAFB2, 0x84F5, 0xAFB3, 0x84F6, - 0xAFB4, 0x84F7, 0xAFB5, 0x84F8, 0xAFB6, 0x84F9, 0xAFB7, 0x84FA, - 0xAFB8, 0xB2D9, 0xAFB9, 0xB2DA, 0xAFBA, 0x84FB, 0xAFBB, 0x84FC, - 0xAFBC, 0xB2DB, 0xAFBD, 0x84FD, 0xAFBE, 0x84FE, 0xAFBF, 0x8541, - 0xAFC0, 0xB2DC, 0xAFC1, 0x8542, 0xAFC2, 0x8543, 0xAFC3, 0x8544, - 0xAFC4, 0x8545, 0xAFC5, 0x8546, 0xAFC6, 0x8547, 0xAFC7, 0xB2DD, - 0xAFC8, 0xB2DE, 0xAFC9, 0xB2DF, 0xAFCA, 0x8548, 0xAFCB, 0xB2E0, - 0xAFCC, 0x8549, 0xAFCD, 0xB2E1, 0xAFCE, 0xB2E2, 0xAFCF, 0x854A, - 0xAFD0, 0x854B, 0xAFD1, 0x854C, 0xAFD2, 0x854D, 0xAFD3, 0x854E, - 0xAFD4, 0xB2E3, 0xAFD5, 0x854F, 0xAFD6, 0x8550, 0xAFD7, 0x8551, - 0xAFD8, 0x8552, 0xAFD9, 0x8553, 0xAFDA, 0x8554, 0xAFDB, 0x8555, - 0xAFDC, 0xB2E4, 0xAFDD, 0x8556, 0xAFDE, 0x8557, 0xAFDF, 0x8558, - 0xAFE0, 0x8559, 0xAFE1, 0x855A, 0xAFE2, 0x8561, 0xAFE3, 0x8562, - 0xAFE4, 0x8563, 0xAFE5, 0x8564, 0xAFE6, 0x8565, 0xAFE7, 0x8566, - 0xAFE8, 0xB2E5, 0xAFE9, 0xB2E6, 0xAFEA, 0x8567, 0xAFEB, 0x8568, - 0xAFEC, 0x8569, 0xAFED, 0x856A, 0xAFEE, 0x856B, 0xAFEF, 0x856C, - 0xAFF0, 0xB2E7, 0xAFF1, 0xB2E8, 0xAFF2, 0x856D, 0xAFF3, 0x856E, - 0xAFF4, 0xB2E9, 0xAFF5, 0x856F, 0xAFF6, 0x8570, 0xAFF7, 0x8571, - 0xAFF8, 0xB2EA, 0xAFF9, 0x8572, 0xAFFA, 0x8573, 0xAFFB, 0x8574, - 0xAFFC, 0x8575, 0xAFFD, 0x8576, 0xAFFE, 0x8577, 0xAFFF, 0x8578, - 0xB000, 0xB2EB, 0xB001, 0xB2EC, 0xB002, 0x8579, 0xB003, 0x857A, - 0xB004, 0xB2ED, 0xB005, 0x8581, 0xB006, 0x8582, 0xB007, 0x8583, - 0xB008, 0x8584, 0xB009, 0x8585, 0xB00A, 0x8586, 0xB00B, 0x8587, - 0xB00C, 0xB2EE, 0xB00D, 0x8588, 0xB00E, 0x8589, 0xB00F, 0x858A, - 0xB010, 0xB2EF, 0xB011, 0x858B, 0xB012, 0x858C, 0xB013, 0x858D, - 0xB014, 0xB2F0, 0xB015, 0x858E, 0xB016, 0x858F, 0xB017, 0x8590, - 0xB018, 0x8591, 0xB019, 0x8592, 0xB01A, 0x8593, 0xB01B, 0x8594, - 0xB01C, 0xB2F1, 0xB01D, 0xB2F2, 0xB01E, 0x8595, 0xB01F, 0x8596, - 0xB020, 0x8597, 0xB021, 0x8598, 0xB022, 0x8599, 0xB023, 0x859A, - 0xB024, 0x859B, 0xB025, 0x859C, 0xB026, 0x859D, 0xB027, 0x859E, - 0xB028, 0xB2F3, 0xB029, 0x859F, 0xB02A, 0x85A0, 0xB02B, 0x85A1, - 0xB02C, 0x85A2, 0xB02D, 0x85A3, 0xB02E, 0x85A4, 0xB02F, 0x85A5, - 0xB030, 0x85A6, 0xB031, 0x85A7, 0xB032, 0x85A8, 0xB033, 0x85A9, - 0xB034, 0x85AA, 0xB035, 0x85AB, 0xB036, 0x85AC, 0xB037, 0x85AD, - 0xB038, 0x85AE, 0xB039, 0x85AF, 0xB03A, 0x85B0, 0xB03B, 0x85B1, - 0xB03C, 0x85B2, 0xB03D, 0x85B3, 0xB03E, 0x85B4, 0xB03F, 0x85B5, - 0xB040, 0x85B6, 0xB041, 0x85B7, 0xB042, 0x85B8, 0xB043, 0x85B9, - 0xB044, 0xB2F4, 0xB045, 0xB2F5, 0xB046, 0x85BA, 0xB047, 0x85BB, - 0xB048, 0xB2F6, 0xB049, 0x85BC, 0xB04A, 0xB2F7, 0xB04B, 0x85BD, - 0xB04C, 0xB2F8, 0xB04D, 0x85BE, 0xB04E, 0xB2F9, 0xB04F, 0x85BF, - 0xB050, 0x85C0, 0xB051, 0x85C1, 0xB052, 0x85C2, 0xB053, 0xB2FA, - 0xB054, 0xB2FB, 0xB055, 0xB2FC, 0xB056, 0x85C3, 0xB057, 0xB2FD, - 0xB058, 0x85C4, 0xB059, 0xB2FE, 0xB05A, 0x85C5, 0xB05B, 0x85C6, - 0xB05C, 0x85C7, 0xB05D, 0xB3A1, 0xB05E, 0x85C8, 0xB05F, 0x85C9, - 0xB060, 0x85CA, 0xB061, 0x85CB, 0xB062, 0x85CC, 0xB063, 0x85CD, - 0xB064, 0x85CE, 0xB065, 0x85CF, 0xB066, 0x85D0, 0xB067, 0x85D1, - 0xB068, 0x85D2, 0xB069, 0x85D3, 0xB06A, 0x85D4, 0xB06B, 0x85D5, - 0xB06C, 0x85D6, 0xB06D, 0x85D7, 0xB06E, 0x85D8, 0xB06F, 0x85D9, - 0xB070, 0x85DA, 0xB071, 0x85DB, 0xB072, 0x85DC, 0xB073, 0x85DD, - 0xB074, 0x85DE, 0xB075, 0x85DF, 0xB076, 0x85E0, 0xB077, 0x85E1, - 0xB078, 0x85E2, 0xB079, 0x85E3, 0xB07A, 0x85E4, 0xB07B, 0x85E5, - 0xB07C, 0xB3A2, 0xB07D, 0xB3A3, 0xB07E, 0x85E6, 0xB07F, 0x85E7, - 0xB080, 0xB3A4, 0xB081, 0x85E8, 0xB082, 0x85E9, 0xB083, 0x85EA, - 0xB084, 0xB3A5, 0xB085, 0x85EB, 0xB086, 0x85EC, 0xB087, 0x85ED, - 0xB088, 0x85EE, 0xB089, 0x85EF, 0xB08A, 0x85F0, 0xB08B, 0x85F1, - 0xB08C, 0xB3A6, 0xB08D, 0xB3A7, 0xB08E, 0x85F2, 0xB08F, 0xB3A8, - 0xB090, 0x85F3, 0xB091, 0xB3A9, 0xB092, 0x85F4, 0xB093, 0x85F5, - 0xB094, 0x85F6, 0xB095, 0x85F7, 0xB096, 0x85F8, 0xB097, 0x85F9, - 0xB098, 0xB3AA, 0xB099, 0xB3AB, 0xB09A, 0xB3AC, 0xB09B, 0x85FA, - 0xB09C, 0xB3AD, 0xB09D, 0x85FB, 0xB09E, 0x85FC, 0xB09F, 0xB3AE, - 0xB0A0, 0xB3AF, 0xB0A1, 0xB3B0, 0xB0A2, 0xB3B1, 0xB0A3, 0x85FD, - 0xB0A4, 0x85FE, 0xB0A5, 0x8641, 0xB0A6, 0x8642, 0xB0A7, 0x8643, - 0xB0A8, 0xB3B2, 0xB0A9, 0xB3B3, 0xB0AA, 0x8644, 0xB0AB, 0xB3B4, - 0xB0AC, 0xB3B5, 0xB0AD, 0xB3B6, 0xB0AE, 0xB3B7, 0xB0AF, 0xB3B8, - 0xB0B0, 0x8645, 0xB0B1, 0xB3B9, 0xB0B2, 0x8646, 0xB0B3, 0xB3BA, - 0xB0B4, 0xB3BB, 0xB0B5, 0xB3BC, 0xB0B6, 0x8647, 0xB0B7, 0x8648, - 0xB0B8, 0xB3BD, 0xB0B9, 0x8649, 0xB0BA, 0x864A, 0xB0BB, 0x864B, - 0xB0BC, 0xB3BE, 0xB0BD, 0x864C, 0xB0BE, 0x864D, 0xB0BF, 0x864E, - 0xB0C0, 0x864F, 0xB0C1, 0x8650, 0xB0C2, 0x8651, 0xB0C3, 0x8652, - 0xB0C4, 0xB3BF, 0xB0C5, 0xB3C0, 0xB0C6, 0x8653, 0xB0C7, 0xB3C1, - 0xB0C8, 0xB3C2, 0xB0C9, 0xB3C3, 0xB0CA, 0x8654, 0xB0CB, 0x8655, - 0xB0CC, 0x8656, 0xB0CD, 0x8657, 0xB0CE, 0x8658, 0xB0CF, 0x8659, - 0xB0D0, 0xB3C4, 0xB0D1, 0xB3C5, 0xB0D2, 0x865A, 0xB0D3, 0x8661, - 0xB0D4, 0xB3C6, 0xB0D5, 0x8662, 0xB0D6, 0x8663, 0xB0D7, 0x8664, - 0xB0D8, 0xB3C7, 0xB0D9, 0x8665, 0xB0DA, 0x8666, 0xB0DB, 0x8667, - 0xB0DC, 0x8668, 0xB0DD, 0x8669, 0xB0DE, 0x866A, 0xB0DF, 0x866B, - 0xB0E0, 0xB3C8, 0xB0E1, 0x866C, 0xB0E2, 0x866D, 0xB0E3, 0x866E, - 0xB0E4, 0x866F, 0xB0E5, 0xB3C9, 0xB0E6, 0x8670, 0xB0E7, 0x8671, - 0xB0E8, 0x8672, 0xB0E9, 0x8673, 0xB0EA, 0x8674, 0xB0EB, 0x8675, - 0xB0EC, 0x8676, 0xB0ED, 0x8677, 0xB0EE, 0x8678, 0xB0EF, 0x8679, - 0xB0F0, 0x867A, 0xB0F1, 0x8681, 0xB0F2, 0x8682, 0xB0F3, 0x8683, - 0xB0F4, 0x8684, 0xB0F5, 0x8685, 0xB0F6, 0x8686, 0xB0F7, 0x8687, - 0xB0F8, 0x8688, 0xB0F9, 0x8689, 0xB0FA, 0x868A, 0xB0FB, 0x868B, - 0xB0FC, 0x868C, 0xB0FD, 0x868D, 0xB0FE, 0x868E, 0xB0FF, 0x868F, - 0xB100, 0x8690, 0xB101, 0x8691, 0xB102, 0x8692, 0xB103, 0x8693, - 0xB104, 0x8694, 0xB105, 0x8695, 0xB106, 0x8696, 0xB107, 0x8697, - 0xB108, 0xB3CA, 0xB109, 0xB3CB, 0xB10A, 0x8698, 0xB10B, 0xB3CC, - 0xB10C, 0xB3CD, 0xB10D, 0x8699, 0xB10E, 0x869A, 0xB10F, 0x869B, - 0xB110, 0xB3CE, 0xB111, 0x869C, 0xB112, 0xB3CF, 0xB113, 0xB3D0, - 0xB114, 0x869D, 0xB115, 0x869E, 0xB116, 0x869F, 0xB117, 0x86A0, - 0xB118, 0xB3D1, 0xB119, 0xB3D2, 0xB11A, 0x86A1, 0xB11B, 0xB3D3, - 0xB11C, 0xB3D4, 0xB11D, 0xB3D5, 0xB11E, 0x86A2, 0xB11F, 0x86A3, - 0xB120, 0x86A4, 0xB121, 0x86A5, 0xB122, 0x86A6, 0xB123, 0xB3D6, - 0xB124, 0xB3D7, 0xB125, 0xB3D8, 0xB126, 0x86A7, 0xB127, 0x86A8, - 0xB128, 0xB3D9, 0xB129, 0x86A9, 0xB12A, 0x86AA, 0xB12B, 0x86AB, - 0xB12C, 0xB3DA, 0xB12D, 0x86AC, 0xB12E, 0x86AD, 0xB12F, 0x86AE, - 0xB130, 0x86AF, 0xB131, 0x86B0, 0xB132, 0x86B1, 0xB133, 0x86B2, - 0xB134, 0xB3DB, 0xB135, 0xB3DC, 0xB136, 0x86B3, 0xB137, 0xB3DD, - 0xB138, 0xB3DE, 0xB139, 0xB3DF, 0xB13A, 0x86B4, 0xB13B, 0x86B5, - 0xB13C, 0x86B6, 0xB13D, 0x86B7, 0xB13E, 0x86B8, 0xB13F, 0x86B9, - 0xB140, 0xB3E0, 0xB141, 0xB3E1, 0xB142, 0x86BA, 0xB143, 0x86BB, - 0xB144, 0xB3E2, 0xB145, 0x86BC, 0xB146, 0x86BD, 0xB147, 0x86BE, - 0xB148, 0xB3E3, 0xB149, 0x86BF, 0xB14A, 0x86C0, 0xB14B, 0x86C1, - 0xB14C, 0x86C2, 0xB14D, 0x86C3, 0xB14E, 0x86C4, 0xB14F, 0x86C5, - 0xB150, 0xB3E4, 0xB151, 0xB3E5, 0xB152, 0x86C6, 0xB153, 0x86C7, - 0xB154, 0xB3E6, 0xB155, 0xB3E7, 0xB156, 0x86C8, 0xB157, 0x86C9, - 0xB158, 0xB3E8, 0xB159, 0x86CA, 0xB15A, 0x86CB, 0xB15B, 0x86CC, - 0xB15C, 0xB3E9, 0xB15D, 0x86CD, 0xB15E, 0x86CE, 0xB15F, 0x86CF, - 0xB160, 0xB3EA, 0xB161, 0x86D0, 0xB162, 0x86D1, 0xB163, 0x86D2, - 0xB164, 0x86D3, 0xB165, 0x86D4, 0xB166, 0x86D5, 0xB167, 0x86D6, - 0xB168, 0x86D7, 0xB169, 0x86D8, 0xB16A, 0x86D9, 0xB16B, 0x86DA, - 0xB16C, 0x86DB, 0xB16D, 0x86DC, 0xB16E, 0x86DD, 0xB16F, 0x86DE, - 0xB170, 0x86DF, 0xB171, 0x86E0, 0xB172, 0x86E1, 0xB173, 0x86E2, - 0xB174, 0x86E3, 0xB175, 0x86E4, 0xB176, 0x86E5, 0xB177, 0x86E6, - 0xB178, 0xB3EB, 0xB179, 0xB3EC, 0xB17A, 0x86E7, 0xB17B, 0x86E8, - 0xB17C, 0xB3ED, 0xB17D, 0x86E9, 0xB17E, 0x86EA, 0xB17F, 0x86EB, - 0xB180, 0xB3EE, 0xB181, 0x86EC, 0xB182, 0xB3EF, 0xB183, 0x86ED, - 0xB184, 0x86EE, 0xB185, 0x86EF, 0xB186, 0x86F0, 0xB187, 0x86F1, - 0xB188, 0xB3F0, 0xB189, 0xB3F1, 0xB18A, 0x86F2, 0xB18B, 0xB3F2, - 0xB18C, 0x86F3, 0xB18D, 0xB3F3, 0xB18E, 0x86F4, 0xB18F, 0x86F5, - 0xB190, 0x86F6, 0xB191, 0x86F7, 0xB192, 0xB3F4, 0xB193, 0xB3F5, - 0xB194, 0xB3F6, 0xB195, 0x86F8, 0xB196, 0x86F9, 0xB197, 0x86FA, - 0xB198, 0xB3F7, 0xB199, 0x86FB, 0xB19A, 0x86FC, 0xB19B, 0x86FD, - 0xB19C, 0xB3F8, 0xB19D, 0x86FE, 0xB19E, 0x8741, 0xB19F, 0x8742, - 0xB1A0, 0x8743, 0xB1A1, 0x8744, 0xB1A2, 0x8745, 0xB1A3, 0x8746, - 0xB1A4, 0x8747, 0xB1A5, 0x8748, 0xB1A6, 0x8749, 0xB1A7, 0x874A, - 0xB1A8, 0xB3F9, 0xB1A9, 0x874B, 0xB1AA, 0x874C, 0xB1AB, 0x874D, - 0xB1AC, 0x874E, 0xB1AD, 0x874F, 0xB1AE, 0x8750, 0xB1AF, 0x8751, - 0xB1B0, 0x8752, 0xB1B1, 0x8753, 0xB1B2, 0x8754, 0xB1B3, 0x8755, - 0xB1B4, 0x8756, 0xB1B5, 0x8757, 0xB1B6, 0x8758, 0xB1B7, 0x8759, - 0xB1B8, 0x875A, 0xB1B9, 0x8761, 0xB1BA, 0x8762, 0xB1BB, 0x8763, - 0xB1BC, 0x8764, 0xB1BD, 0x8765, 0xB1BE, 0x8766, 0xB1BF, 0x8767, - 0xB1C0, 0x8768, 0xB1C1, 0x8769, 0xB1C2, 0x876A, 0xB1C3, 0x876B, - 0xB1C4, 0x876C, 0xB1C5, 0x876D, 0xB1C6, 0x876E, 0xB1C7, 0x876F, - 0xB1C8, 0x8770, 0xB1C9, 0x8771, 0xB1CA, 0x8772, 0xB1CB, 0x8773, - 0xB1CC, 0xB3FA, 0xB1CD, 0x8774, 0xB1CE, 0x8775, 0xB1CF, 0x8776, - 0xB1D0, 0xB3FB, 0xB1D1, 0x8777, 0xB1D2, 0x8778, 0xB1D3, 0x8779, - 0xB1D4, 0xB3FC, 0xB1D5, 0x877A, 0xB1D6, 0x8781, 0xB1D7, 0x8782, - 0xB1D8, 0x8783, 0xB1D9, 0x8784, 0xB1DA, 0x8785, 0xB1DB, 0x8786, - 0xB1DC, 0xB3FD, 0xB1DD, 0xB3FE, 0xB1DE, 0x8787, 0xB1DF, 0xB4A1, - 0xB1E0, 0x8788, 0xB1E1, 0x8789, 0xB1E2, 0x878A, 0xB1E3, 0x878B, - 0xB1E4, 0x878C, 0xB1E5, 0x878D, 0xB1E6, 0x878E, 0xB1E7, 0x878F, - 0xB1E8, 0xB4A2, 0xB1E9, 0xB4A3, 0xB1EA, 0x8790, 0xB1EB, 0x8791, - 0xB1EC, 0xB4A4, 0xB1ED, 0x8792, 0xB1EE, 0x8793, 0xB1EF, 0x8794, - 0xB1F0, 0xB4A5, 0xB1F1, 0x8795, 0xB1F2, 0x8796, 0xB1F3, 0x8797, - 0xB1F4, 0x8798, 0xB1F5, 0x8799, 0xB1F6, 0x879A, 0xB1F7, 0x879B, - 0xB1F8, 0x879C, 0xB1F9, 0xB4A6, 0xB1FA, 0x879D, 0xB1FB, 0xB4A7, - 0xB1FC, 0x879E, 0xB1FD, 0xB4A8, 0xB1FE, 0x879F, 0xB1FF, 0x87A0, - 0xB200, 0x87A1, 0xB201, 0x87A2, 0xB202, 0x87A3, 0xB203, 0x87A4, - 0xB204, 0xB4A9, 0xB205, 0xB4AA, 0xB206, 0x87A5, 0xB207, 0x87A6, - 0xB208, 0xB4AB, 0xB209, 0x87A7, 0xB20A, 0x87A8, 0xB20B, 0xB4AC, - 0xB20C, 0xB4AD, 0xB20D, 0x87A9, 0xB20E, 0x87AA, 0xB20F, 0x87AB, - 0xB210, 0x87AC, 0xB211, 0x87AD, 0xB212, 0x87AE, 0xB213, 0x87AF, - 0xB214, 0xB4AE, 0xB215, 0xB4AF, 0xB216, 0x87B0, 0xB217, 0xB4B0, - 0xB218, 0x87B1, 0xB219, 0xB4B1, 0xB21A, 0x87B2, 0xB21B, 0x87B3, - 0xB21C, 0x87B4, 0xB21D, 0x87B5, 0xB21E, 0x87B6, 0xB21F, 0x87B7, - 0xB220, 0xB4B2, 0xB221, 0x87B8, 0xB222, 0x87B9, 0xB223, 0x87BA, - 0xB224, 0x87BB, 0xB225, 0x87BC, 0xB226, 0x87BD, 0xB227, 0x87BE, - 0xB228, 0x87BF, 0xB229, 0x87C0, 0xB22A, 0x87C1, 0xB22B, 0x87C2, - 0xB22C, 0x87C3, 0xB22D, 0x87C4, 0xB22E, 0x87C5, 0xB22F, 0x87C6, - 0xB230, 0x87C7, 0xB231, 0x87C8, 0xB232, 0x87C9, 0xB233, 0x87CA, - 0xB234, 0xB4B3, 0xB235, 0x87CB, 0xB236, 0x87CC, 0xB237, 0x87CD, - 0xB238, 0x87CE, 0xB239, 0x87CF, 0xB23A, 0x87D0, 0xB23B, 0x87D1, - 0xB23C, 0xB4B4, 0xB23D, 0x87D2, 0xB23E, 0x87D3, 0xB23F, 0x87D4, - 0xB240, 0x87D5, 0xB241, 0x87D6, 0xB242, 0x87D7, 0xB243, 0x87D8, - 0xB244, 0x87D9, 0xB245, 0x87DA, 0xB246, 0x87DB, 0xB247, 0x87DC, - 0xB248, 0x87DD, 0xB249, 0x87DE, 0xB24A, 0x87DF, 0xB24B, 0x87E0, - 0xB24C, 0x87E1, 0xB24D, 0x87E2, 0xB24E, 0x87E3, 0xB24F, 0x87E4, - 0xB250, 0x87E5, 0xB251, 0x87E6, 0xB252, 0x87E7, 0xB253, 0x87E8, - 0xB254, 0x87E9, 0xB255, 0x87EA, 0xB256, 0x87EB, 0xB257, 0x87EC, - 0xB258, 0xB4B5, 0xB259, 0x87ED, 0xB25A, 0x87EE, 0xB25B, 0x87EF, - 0xB25C, 0xB4B6, 0xB25D, 0x87F0, 0xB25E, 0x87F1, 0xB25F, 0x87F2, - 0xB260, 0xB4B7, 0xB261, 0x87F3, 0xB262, 0x87F4, 0xB263, 0x87F5, - 0xB264, 0x87F6, 0xB265, 0x87F7, 0xB266, 0x87F8, 0xB267, 0x87F9, - 0xB268, 0xB4B8, 0xB269, 0xB4B9, 0xB26A, 0x87FA, 0xB26B, 0x87FB, - 0xB26C, 0x87FC, 0xB26D, 0x87FD, 0xB26E, 0x87FE, 0xB26F, 0x8841, - 0xB270, 0x8842, 0xB271, 0x8843, 0xB272, 0x8844, 0xB273, 0x8845, - 0xB274, 0xB4BA, 0xB275, 0xB4BB, 0xB276, 0x8846, 0xB277, 0x8847, - 0xB278, 0x8848, 0xB279, 0x8849, 0xB27A, 0x884A, 0xB27B, 0x884B, - 0xB27C, 0xB4BC, 0xB27D, 0x884C, 0xB27E, 0x884D, 0xB27F, 0x884E, - 0xB280, 0x884F, 0xB281, 0x8850, 0xB282, 0x8851, 0xB283, 0x8852, - 0xB284, 0xB4BD, 0xB285, 0xB4BE, 0xB286, 0x8853, 0xB287, 0x8854, - 0xB288, 0x8855, 0xB289, 0xB4BF, 0xB28A, 0x8856, 0xB28B, 0x8857, - 0xB28C, 0x8858, 0xB28D, 0x8859, 0xB28E, 0x885A, 0xB28F, 0x8861, - 0xB290, 0xB4C0, 0xB291, 0xB4C1, 0xB292, 0x8862, 0xB293, 0x8863, - 0xB294, 0xB4C2, 0xB295, 0x8864, 0xB296, 0x8865, 0xB297, 0x8866, - 0xB298, 0xB4C3, 0xB299, 0xB4C4, 0xB29A, 0xB4C5, 0xB29B, 0x8867, - 0xB29C, 0x8868, 0xB29D, 0x8869, 0xB29E, 0x886A, 0xB29F, 0x886B, - 0xB2A0, 0xB4C6, 0xB2A1, 0xB4C7, 0xB2A2, 0x886C, 0xB2A3, 0xB4C8, - 0xB2A4, 0x886D, 0xB2A5, 0xB4C9, 0xB2A6, 0xB4CA, 0xB2A7, 0x886E, - 0xB2A8, 0x886F, 0xB2A9, 0x8870, 0xB2AA, 0xB4CB, 0xB2AB, 0x8871, - 0xB2AC, 0xB4CC, 0xB2AD, 0x8872, 0xB2AE, 0x8873, 0xB2AF, 0x8874, - 0xB2B0, 0xB4CD, 0xB2B1, 0x8875, 0xB2B2, 0x8876, 0xB2B3, 0x8877, - 0xB2B4, 0xB4CE, 0xB2B5, 0x8878, 0xB2B6, 0x8879, 0xB2B7, 0x887A, - 0xB2B8, 0x8881, 0xB2B9, 0x8882, 0xB2BA, 0x8883, 0xB2BB, 0x8884, - 0xB2BC, 0x8885, 0xB2BD, 0x8886, 0xB2BE, 0x8887, 0xB2BF, 0x8888, - 0xB2C0, 0x8889, 0xB2C1, 0x888A, 0xB2C2, 0x888B, 0xB2C3, 0x888C, - 0xB2C4, 0x888D, 0xB2C5, 0x888E, 0xB2C6, 0x888F, 0xB2C7, 0x8890, - 0xB2C8, 0xB4CF, 0xB2C9, 0xB4D0, 0xB2CA, 0x8891, 0xB2CB, 0x8892, - 0xB2CC, 0xB4D1, 0xB2CD, 0x8893, 0xB2CE, 0x8894, 0xB2CF, 0x8895, - 0xB2D0, 0xB4D2, 0xB2D1, 0x8896, 0xB2D2, 0xB4D3, 0xB2D3, 0x8897, - 0xB2D4, 0x8898, 0xB2D5, 0x8899, 0xB2D6, 0x889A, 0xB2D7, 0x889B, - 0xB2D8, 0xB4D4, 0xB2D9, 0xB4D5, 0xB2DA, 0x889C, 0xB2DB, 0xB4D6, - 0xB2DC, 0x889D, 0xB2DD, 0xB4D7, 0xB2DE, 0x889E, 0xB2DF, 0x889F, - 0xB2E0, 0x88A0, 0xB2E1, 0x88A1, 0xB2E2, 0xB4D8, 0xB2E3, 0x88A2, - 0xB2E4, 0xB4D9, 0xB2E5, 0xB4DA, 0xB2E6, 0xB4DB, 0xB2E7, 0x88A3, - 0xB2E8, 0xB4DC, 0xB2E9, 0x88A4, 0xB2EA, 0x88A5, 0xB2EB, 0xB4DD, - 0xB2EC, 0xB4DE, 0xB2ED, 0xB4DF, 0xB2EE, 0xB4E0, 0xB2EF, 0xB4E1, - 0xB2F0, 0x88A6, 0xB2F1, 0x88A7, 0xB2F2, 0x88A8, 0xB2F3, 0xB4E2, - 0xB2F4, 0xB4E3, 0xB2F5, 0xB4E4, 0xB2F6, 0x88A9, 0xB2F7, 0xB4E5, - 0xB2F8, 0xB4E6, 0xB2F9, 0xB4E7, 0xB2FA, 0xB4E8, 0xB2FB, 0xB4E9, - 0xB2FC, 0x88AA, 0xB2FD, 0x88AB, 0xB2FE, 0x88AC, 0xB2FF, 0xB4EA, - 0xB300, 0xB4EB, 0xB301, 0xB4EC, 0xB302, 0x88AD, 0xB303, 0x88AE, - 0xB304, 0xB4ED, 0xB305, 0x88AF, 0xB306, 0x88B0, 0xB307, 0x88B1, - 0xB308, 0xB4EE, 0xB309, 0x88B2, 0xB30A, 0x88B3, 0xB30B, 0x88B4, - 0xB30C, 0x88B5, 0xB30D, 0x88B6, 0xB30E, 0x88B7, 0xB30F, 0x88B8, - 0xB310, 0xB4EF, 0xB311, 0xB4F0, 0xB312, 0x88B9, 0xB313, 0xB4F1, - 0xB314, 0xB4F2, 0xB315, 0xB4F3, 0xB316, 0x88BA, 0xB317, 0x88BB, - 0xB318, 0x88BC, 0xB319, 0x88BD, 0xB31A, 0x88BE, 0xB31B, 0x88BF, - 0xB31C, 0xB4F4, 0xB31D, 0x88C0, 0xB31E, 0x88C1, 0xB31F, 0x88C2, - 0xB320, 0x88C3, 0xB321, 0x88C4, 0xB322, 0x88C5, 0xB323, 0x88C6, - 0xB324, 0x88C7, 0xB325, 0x88C8, 0xB326, 0x88C9, 0xB327, 0x88CA, - 0xB328, 0x88CB, 0xB329, 0x88CC, 0xB32A, 0x88CD, 0xB32B, 0x88CE, - 0xB32C, 0x88CF, 0xB32D, 0x88D0, 0xB32E, 0x88D1, 0xB32F, 0x88D2, - 0xB330, 0x88D3, 0xB331, 0x88D4, 0xB332, 0x88D5, 0xB333, 0x88D6, - 0xB334, 0x88D7, 0xB335, 0x88D8, 0xB336, 0x88D9, 0xB337, 0x88DA, - 0xB338, 0x88DB, 0xB339, 0x88DC, 0xB33A, 0x88DD, 0xB33B, 0x88DE, - 0xB33C, 0x88DF, 0xB33D, 0x88E0, 0xB33E, 0x88E1, 0xB33F, 0x88E2, - 0xB340, 0x88E3, 0xB341, 0x88E4, 0xB342, 0x88E5, 0xB343, 0x88E6, - 0xB344, 0x88E7, 0xB345, 0x88E8, 0xB346, 0x88E9, 0xB347, 0x88EA, - 0xB348, 0x88EB, 0xB349, 0x88EC, 0xB34A, 0x88ED, 0xB34B, 0x88EE, - 0xB34C, 0x88EF, 0xB34D, 0x88F0, 0xB34E, 0x88F1, 0xB34F, 0x88F2, - 0xB350, 0x88F3, 0xB351, 0x88F4, 0xB352, 0x88F5, 0xB353, 0x88F6, - 0xB354, 0xB4F5, 0xB355, 0xB4F6, 0xB356, 0xB4F7, 0xB357, 0x88F7, - 0xB358, 0xB4F8, 0xB359, 0x88F8, 0xB35A, 0x88F9, 0xB35B, 0xB4F9, - 0xB35C, 0xB4FA, 0xB35D, 0x88FA, 0xB35E, 0xB4FB, 0xB35F, 0xB4FC, - 0xB360, 0x88FB, 0xB361, 0x88FC, 0xB362, 0x88FD, 0xB363, 0x88FE, - 0xB364, 0xB4FD, 0xB365, 0xB4FE, 0xB366, 0x8941, 0xB367, 0xB5A1, - 0xB368, 0x8942, 0xB369, 0xB5A2, 0xB36A, 0x8943, 0xB36B, 0xB5A3, - 0xB36C, 0x8944, 0xB36D, 0x8945, 0xB36E, 0xB5A4, 0xB36F, 0x8946, - 0xB370, 0xB5A5, 0xB371, 0xB5A6, 0xB372, 0x8947, 0xB373, 0x8948, - 0xB374, 0xB5A7, 0xB375, 0x8949, 0xB376, 0x894A, 0xB377, 0x894B, - 0xB378, 0xB5A8, 0xB379, 0x894C, 0xB37A, 0x894D, 0xB37B, 0x894E, - 0xB37C, 0x894F, 0xB37D, 0x8950, 0xB37E, 0x8951, 0xB37F, 0x8952, - 0xB380, 0xB5A9, 0xB381, 0xB5AA, 0xB382, 0x8953, 0xB383, 0xB5AB, - 0xB384, 0xB5AC, 0xB385, 0xB5AD, 0xB386, 0x8954, 0xB387, 0x8955, - 0xB388, 0x8956, 0xB389, 0x8957, 0xB38A, 0x8958, 0xB38B, 0x8959, - 0xB38C, 0xB5AE, 0xB38D, 0x895A, 0xB38E, 0x8961, 0xB38F, 0x8962, - 0xB390, 0xB5AF, 0xB391, 0x8963, 0xB392, 0x8964, 0xB393, 0x8965, - 0xB394, 0xB5B0, 0xB395, 0x8966, 0xB396, 0x8967, 0xB397, 0x8968, - 0xB398, 0x8969, 0xB399, 0x896A, 0xB39A, 0x896B, 0xB39B, 0x896C, - 0xB39C, 0x896D, 0xB39D, 0x896E, 0xB39E, 0x896F, 0xB39F, 0x8970, - 0xB3A0, 0xB5B1, 0xB3A1, 0xB5B2, 0xB3A2, 0x8971, 0xB3A3, 0x8972, - 0xB3A4, 0x8973, 0xB3A5, 0x8974, 0xB3A6, 0x8975, 0xB3A7, 0x8976, - 0xB3A8, 0xB5B3, 0xB3A9, 0x8977, 0xB3AA, 0x8978, 0xB3AB, 0x8979, - 0xB3AC, 0xB5B4, 0xB3AD, 0x897A, 0xB3AE, 0x8981, 0xB3AF, 0x8982, - 0xB3B0, 0x8983, 0xB3B1, 0x8984, 0xB3B2, 0x8985, 0xB3B3, 0x8986, - 0xB3B4, 0x8987, 0xB3B5, 0x8988, 0xB3B6, 0x8989, 0xB3B7, 0x898A, - 0xB3B8, 0x898B, 0xB3B9, 0x898C, 0xB3BA, 0x898D, 0xB3BB, 0x898E, - 0xB3BC, 0x898F, 0xB3BD, 0x8990, 0xB3BE, 0x8991, 0xB3BF, 0x8992, - 0xB3C0, 0x8993, 0xB3C1, 0x8994, 0xB3C2, 0x8995, 0xB3C3, 0x8996, - 0xB3C4, 0xB5B5, 0xB3C5, 0xB5B6, 0xB3C6, 0x8997, 0xB3C7, 0x8998, - 0xB3C8, 0xB5B7, 0xB3C9, 0x8999, 0xB3CA, 0x899A, 0xB3CB, 0xB5B8, - 0xB3CC, 0xB5B9, 0xB3CD, 0x899B, 0xB3CE, 0xB5BA, 0xB3CF, 0x899C, - 0xB3D0, 0xB5BB, 0xB3D1, 0x899D, 0xB3D2, 0x899E, 0xB3D3, 0x899F, - 0xB3D4, 0xB5BC, 0xB3D5, 0xB5BD, 0xB3D6, 0x89A0, 0xB3D7, 0xB5BE, - 0xB3D8, 0x89A1, 0xB3D9, 0xB5BF, 0xB3DA, 0x89A2, 0xB3DB, 0xB5C0, - 0xB3DC, 0x89A3, 0xB3DD, 0xB5C1, 0xB3DE, 0x89A4, 0xB3DF, 0x89A5, - 0xB3E0, 0xB5C2, 0xB3E1, 0x89A6, 0xB3E2, 0x89A7, 0xB3E3, 0x89A8, - 0xB3E4, 0xB5C3, 0xB3E5, 0x89A9, 0xB3E6, 0x89AA, 0xB3E7, 0x89AB, - 0xB3E8, 0xB5C4, 0xB3E9, 0x89AC, 0xB3EA, 0x89AD, 0xB3EB, 0x89AE, - 0xB3EC, 0x89AF, 0xB3ED, 0x89B0, 0xB3EE, 0x89B1, 0xB3EF, 0x89B2, - 0xB3F0, 0x89B3, 0xB3F1, 0x89B4, 0xB3F2, 0x89B5, 0xB3F3, 0x89B6, - 0xB3F4, 0x89B7, 0xB3F5, 0x89B8, 0xB3F6, 0x89B9, 0xB3F7, 0x89BA, - 0xB3F8, 0x89BB, 0xB3F9, 0x89BC, 0xB3FA, 0x89BD, 0xB3FB, 0x89BE, - 0xB3FC, 0xB5C5, 0xB3FD, 0x89BF, 0xB3FE, 0x89C0, 0xB3FF, 0x89C1, - 0xB400, 0x89C2, 0xB401, 0x89C3, 0xB402, 0x89C4, 0xB403, 0x89C5, - 0xB404, 0x89C6, 0xB405, 0x89C7, 0xB406, 0x89C8, 0xB407, 0x89C9, - 0xB408, 0x89CA, 0xB409, 0x89CB, 0xB40A, 0x89CC, 0xB40B, 0x89CD, - 0xB40C, 0x89CE, 0xB40D, 0x89CF, 0xB40E, 0x89D0, 0xB40F, 0x89D1, - 0xB410, 0xB5C6, 0xB411, 0x89D2, 0xB412, 0x89D3, 0xB413, 0x89D4, - 0xB414, 0x89D5, 0xB415, 0x89D6, 0xB416, 0x89D7, 0xB417, 0x89D8, - 0xB418, 0xB5C7, 0xB419, 0x89D9, 0xB41A, 0x89DA, 0xB41B, 0x89DB, - 0xB41C, 0xB5C8, 0xB41D, 0x89DC, 0xB41E, 0x89DD, 0xB41F, 0x89DE, - 0xB420, 0xB5C9, 0xB421, 0x89DF, 0xB422, 0x89E0, 0xB423, 0x89E1, - 0xB424, 0x89E2, 0xB425, 0x89E3, 0xB426, 0x89E4, 0xB427, 0x89E5, - 0xB428, 0xB5CA, 0xB429, 0xB5CB, 0xB42A, 0x89E6, 0xB42B, 0xB5CC, - 0xB42C, 0x89E7, 0xB42D, 0x89E8, 0xB42E, 0x89E9, 0xB42F, 0x89EA, - 0xB430, 0x89EB, 0xB431, 0x89EC, 0xB432, 0x89ED, 0xB433, 0x89EE, - 0xB434, 0xB5CD, 0xB435, 0x89EF, 0xB436, 0x89F0, 0xB437, 0x89F1, - 0xB438, 0x89F2, 0xB439, 0x89F3, 0xB43A, 0x89F4, 0xB43B, 0x89F5, - 0xB43C, 0x89F6, 0xB43D, 0x89F7, 0xB43E, 0x89F8, 0xB43F, 0x89F9, - 0xB440, 0x89FA, 0xB441, 0x89FB, 0xB442, 0x89FC, 0xB443, 0x89FD, - 0xB444, 0x89FE, 0xB445, 0x8A41, 0xB446, 0x8A42, 0xB447, 0x8A43, - 0xB448, 0x8A44, 0xB449, 0x8A45, 0xB44A, 0x8A46, 0xB44B, 0x8A47, - 0xB44C, 0x8A48, 0xB44D, 0x8A49, 0xB44E, 0x8A4A, 0xB44F, 0x8A4B, - 0xB450, 0xB5CE, 0xB451, 0xB5CF, 0xB452, 0x8A4C, 0xB453, 0x8A4D, - 0xB454, 0xB5D0, 0xB455, 0x8A4E, 0xB456, 0x8A4F, 0xB457, 0x8A50, - 0xB458, 0xB5D1, 0xB459, 0x8A51, 0xB45A, 0x8A52, 0xB45B, 0x8A53, - 0xB45C, 0x8A54, 0xB45D, 0x8A55, 0xB45E, 0x8A56, 0xB45F, 0x8A57, - 0xB460, 0xB5D2, 0xB461, 0xB5D3, 0xB462, 0x8A58, 0xB463, 0xB5D4, - 0xB464, 0x8A59, 0xB465, 0xB5D5, 0xB466, 0x8A5A, 0xB467, 0x8A61, - 0xB468, 0x8A62, 0xB469, 0x8A63, 0xB46A, 0x8A64, 0xB46B, 0x8A65, - 0xB46C, 0xB5D6, 0xB46D, 0x8A66, 0xB46E, 0x8A67, 0xB46F, 0x8A68, - 0xB470, 0x8A69, 0xB471, 0x8A6A, 0xB472, 0x8A6B, 0xB473, 0x8A6C, - 0xB474, 0x8A6D, 0xB475, 0x8A6E, 0xB476, 0x8A6F, 0xB477, 0x8A70, - 0xB478, 0x8A71, 0xB479, 0x8A72, 0xB47A, 0x8A73, 0xB47B, 0x8A74, - 0xB47C, 0x8A75, 0xB47D, 0x8A76, 0xB47E, 0x8A77, 0xB47F, 0x8A78, - 0xB480, 0xB5D7, 0xB481, 0x8A79, 0xB482, 0x8A7A, 0xB483, 0x8A81, - 0xB484, 0x8A82, 0xB485, 0x8A83, 0xB486, 0x8A84, 0xB487, 0x8A85, - 0xB488, 0xB5D8, 0xB489, 0x8A86, 0xB48A, 0x8A87, 0xB48B, 0x8A88, - 0xB48C, 0x8A89, 0xB48D, 0x8A8A, 0xB48E, 0x8A8B, 0xB48F, 0x8A8C, - 0xB490, 0x8A8D, 0xB491, 0x8A8E, 0xB492, 0x8A8F, 0xB493, 0x8A90, - 0xB494, 0x8A91, 0xB495, 0x8A92, 0xB496, 0x8A93, 0xB497, 0x8A94, - 0xB498, 0x8A95, 0xB499, 0x8A96, 0xB49A, 0x8A97, 0xB49B, 0x8A98, - 0xB49C, 0x8A99, 0xB49D, 0xB5D9, 0xB49E, 0x8A9A, 0xB49F, 0x8A9B, - 0xB4A0, 0x8A9C, 0xB4A1, 0x8A9D, 0xB4A2, 0x8A9E, 0xB4A3, 0x8A9F, - 0xB4A4, 0xB5DA, 0xB4A5, 0x8AA0, 0xB4A6, 0x8AA1, 0xB4A7, 0x8AA2, - 0xB4A8, 0xB5DB, 0xB4A9, 0x8AA3, 0xB4AA, 0x8AA4, 0xB4AB, 0x8AA5, - 0xB4AC, 0xB5DC, 0xB4AD, 0x8AA6, 0xB4AE, 0x8AA7, 0xB4AF, 0x8AA8, - 0xB4B0, 0x8AA9, 0xB4B1, 0x8AAA, 0xB4B2, 0x8AAB, 0xB4B3, 0x8AAC, - 0xB4B4, 0x8AAD, 0xB4B5, 0xB5DD, 0xB4B6, 0x8AAE, 0xB4B7, 0xB5DE, - 0xB4B8, 0x8AAF, 0xB4B9, 0xB5DF, 0xB4BA, 0x8AB0, 0xB4BB, 0x8AB1, - 0xB4BC, 0x8AB2, 0xB4BD, 0x8AB3, 0xB4BE, 0x8AB4, 0xB4BF, 0x8AB5, - 0xB4C0, 0xB5E0, 0xB4C1, 0x8AB6, 0xB4C2, 0x8AB7, 0xB4C3, 0x8AB8, - 0xB4C4, 0xB5E1, 0xB4C5, 0x8AB9, 0xB4C6, 0x8ABA, 0xB4C7, 0x8ABB, - 0xB4C8, 0xB5E2, 0xB4C9, 0x8ABC, 0xB4CA, 0x8ABD, 0xB4CB, 0x8ABE, - 0xB4CC, 0x8ABF, 0xB4CD, 0x8AC0, 0xB4CE, 0x8AC1, 0xB4CF, 0x8AC2, - 0xB4D0, 0xB5E3, 0xB4D1, 0x8AC3, 0xB4D2, 0x8AC4, 0xB4D3, 0x8AC5, - 0xB4D4, 0x8AC6, 0xB4D5, 0xB5E4, 0xB4D6, 0x8AC7, 0xB4D7, 0x8AC8, - 0xB4D8, 0x8AC9, 0xB4D9, 0x8ACA, 0xB4DA, 0x8ACB, 0xB4DB, 0x8ACC, - 0xB4DC, 0xB5E5, 0xB4DD, 0xB5E6, 0xB4DE, 0x8ACD, 0xB4DF, 0x8ACE, - 0xB4E0, 0xB5E7, 0xB4E1, 0x8ACF, 0xB4E2, 0x8AD0, 0xB4E3, 0xB5E8, - 0xB4E4, 0xB5E9, 0xB4E5, 0x8AD1, 0xB4E6, 0xB5EA, 0xB4E7, 0x8AD2, - 0xB4E8, 0x8AD3, 0xB4E9, 0x8AD4, 0xB4EA, 0x8AD5, 0xB4EB, 0x8AD6, - 0xB4EC, 0xB5EB, 0xB4ED, 0xB5EC, 0xB4EE, 0x8AD7, 0xB4EF, 0xB5ED, - 0xB4F0, 0x8AD8, 0xB4F1, 0xB5EE, 0xB4F2, 0x8AD9, 0xB4F3, 0x8ADA, - 0xB4F4, 0x8ADB, 0xB4F5, 0x8ADC, 0xB4F6, 0x8ADD, 0xB4F7, 0x8ADE, - 0xB4F8, 0xB5EF, 0xB4F9, 0x8ADF, 0xB4FA, 0x8AE0, 0xB4FB, 0x8AE1, - 0xB4FC, 0x8AE2, 0xB4FD, 0x8AE3, 0xB4FE, 0x8AE4, 0xB4FF, 0x8AE5, - 0xB500, 0x8AE6, 0xB501, 0x8AE7, 0xB502, 0x8AE8, 0xB503, 0x8AE9, - 0xB504, 0x8AEA, 0xB505, 0x8AEB, 0xB506, 0x8AEC, 0xB507, 0x8AED, - 0xB508, 0x8AEE, 0xB509, 0x8AEF, 0xB50A, 0x8AF0, 0xB50B, 0x8AF1, - 0xB50C, 0x8AF2, 0xB50D, 0x8AF3, 0xB50E, 0x8AF4, 0xB50F, 0x8AF5, - 0xB510, 0x8AF6, 0xB511, 0x8AF7, 0xB512, 0x8AF8, 0xB513, 0x8AF9, - 0xB514, 0xB5F0, 0xB515, 0xB5F1, 0xB516, 0x8AFA, 0xB517, 0x8AFB, - 0xB518, 0xB5F2, 0xB519, 0x8AFC, 0xB51A, 0x8AFD, 0xB51B, 0xB5F3, - 0xB51C, 0xB5F4, 0xB51D, 0x8AFE, 0xB51E, 0x8B41, 0xB51F, 0x8B42, - 0xB520, 0x8B43, 0xB521, 0x8B44, 0xB522, 0x8B45, 0xB523, 0x8B46, - 0xB524, 0xB5F5, 0xB525, 0xB5F6, 0xB526, 0x8B47, 0xB527, 0xB5F7, - 0xB528, 0xB5F8, 0xB529, 0xB5F9, 0xB52A, 0xB5FA, 0xB52B, 0x8B48, - 0xB52C, 0x8B49, 0xB52D, 0x8B4A, 0xB52E, 0x8B4B, 0xB52F, 0x8B4C, - 0xB530, 0xB5FB, 0xB531, 0xB5FC, 0xB532, 0x8B4D, 0xB533, 0x8B4E, - 0xB534, 0xB5FD, 0xB535, 0x8B4F, 0xB536, 0x8B50, 0xB537, 0x8B51, - 0xB538, 0xB5FE, 0xB539, 0x8B52, 0xB53A, 0x8B53, 0xB53B, 0x8B54, - 0xB53C, 0x8B55, 0xB53D, 0x8B56, 0xB53E, 0x8B57, 0xB53F, 0x8B58, - 0xB540, 0xB6A1, 0xB541, 0xB6A2, 0xB542, 0x8B59, 0xB543, 0xB6A3, - 0xB544, 0xB6A4, 0xB545, 0xB6A5, 0xB546, 0x8B5A, 0xB547, 0x8B61, - 0xB548, 0x8B62, 0xB549, 0x8B63, 0xB54A, 0x8B64, 0xB54B, 0xB6A6, - 0xB54C, 0xB6A7, 0xB54D, 0xB6A8, 0xB54E, 0x8B65, 0xB54F, 0x8B66, - 0xB550, 0xB6A9, 0xB551, 0x8B67, 0xB552, 0x8B68, 0xB553, 0x8B69, - 0xB554, 0xB6AA, 0xB555, 0x8B6A, 0xB556, 0x8B6B, 0xB557, 0x8B6C, - 0xB558, 0x8B6D, 0xB559, 0x8B6E, 0xB55A, 0x8B6F, 0xB55B, 0x8B70, - 0xB55C, 0xB6AB, 0xB55D, 0xB6AC, 0xB55E, 0x8B71, 0xB55F, 0xB6AD, - 0xB560, 0xB6AE, 0xB561, 0xB6AF, 0xB562, 0x8B72, 0xB563, 0x8B73, - 0xB564, 0x8B74, 0xB565, 0x8B75, 0xB566, 0x8B76, 0xB567, 0x8B77, - 0xB568, 0x8B78, 0xB569, 0x8B79, 0xB56A, 0x8B7A, 0xB56B, 0x8B81, - 0xB56C, 0x8B82, 0xB56D, 0x8B83, 0xB56E, 0x8B84, 0xB56F, 0x8B85, - 0xB570, 0x8B86, 0xB571, 0x8B87, 0xB572, 0x8B88, 0xB573, 0x8B89, - 0xB574, 0x8B8A, 0xB575, 0x8B8B, 0xB576, 0x8B8C, 0xB577, 0x8B8D, - 0xB578, 0x8B8E, 0xB579, 0x8B8F, 0xB57A, 0x8B90, 0xB57B, 0x8B91, - 0xB57C, 0x8B92, 0xB57D, 0x8B93, 0xB57E, 0x8B94, 0xB57F, 0x8B95, - 0xB580, 0x8B96, 0xB581, 0x8B97, 0xB582, 0x8B98, 0xB583, 0x8B99, - 0xB584, 0x8B9A, 0xB585, 0x8B9B, 0xB586, 0x8B9C, 0xB587, 0x8B9D, - 0xB588, 0x8B9E, 0xB589, 0x8B9F, 0xB58A, 0x8BA0, 0xB58B, 0x8BA1, - 0xB58C, 0x8BA2, 0xB58D, 0x8BA3, 0xB58E, 0x8BA4, 0xB58F, 0x8BA5, - 0xB590, 0x8BA6, 0xB591, 0x8BA7, 0xB592, 0x8BA8, 0xB593, 0x8BA9, - 0xB594, 0x8BAA, 0xB595, 0x8BAB, 0xB596, 0x8BAC, 0xB597, 0x8BAD, - 0xB598, 0x8BAE, 0xB599, 0x8BAF, 0xB59A, 0x8BB0, 0xB59B, 0x8BB1, - 0xB59C, 0x8BB2, 0xB59D, 0x8BB3, 0xB59E, 0x8BB4, 0xB59F, 0x8BB5, - 0xB5A0, 0xB6B0, 0xB5A1, 0xB6B1, 0xB5A2, 0x8BB6, 0xB5A3, 0x8BB7, - 0xB5A4, 0xB6B2, 0xB5A5, 0x8BB8, 0xB5A6, 0x8BB9, 0xB5A7, 0x8BBA, - 0xB5A8, 0xB6B3, 0xB5A9, 0x8BBB, 0xB5AA, 0xB6B4, 0xB5AB, 0xB6B5, - 0xB5AC, 0x8BBC, 0xB5AD, 0x8BBD, 0xB5AE, 0x8BBE, 0xB5AF, 0x8BBF, - 0xB5B0, 0xB6B6, 0xB5B1, 0xB6B7, 0xB5B2, 0x8BC0, 0xB5B3, 0xB6B8, - 0xB5B4, 0xB6B9, 0xB5B5, 0xB6BA, 0xB5B6, 0x8BC1, 0xB5B7, 0x8BC2, - 0xB5B8, 0x8BC3, 0xB5B9, 0x8BC4, 0xB5BA, 0x8BC5, 0xB5BB, 0xB6BB, - 0xB5BC, 0xB6BC, 0xB5BD, 0xB6BD, 0xB5BE, 0x8BC6, 0xB5BF, 0x8BC7, - 0xB5C0, 0xB6BE, 0xB5C1, 0x8BC8, 0xB5C2, 0x8BC9, 0xB5C3, 0x8BCA, - 0xB5C4, 0xB6BF, 0xB5C5, 0x8BCB, 0xB5C6, 0x8BCC, 0xB5C7, 0x8BCD, - 0xB5C8, 0x8BCE, 0xB5C9, 0x8BCF, 0xB5CA, 0x8BD0, 0xB5CB, 0x8BD1, - 0xB5CC, 0xB6C0, 0xB5CD, 0xB6C1, 0xB5CE, 0x8BD2, 0xB5CF, 0xB6C2, - 0xB5D0, 0xB6C3, 0xB5D1, 0xB6C4, 0xB5D2, 0x8BD3, 0xB5D3, 0x8BD4, - 0xB5D4, 0x8BD5, 0xB5D5, 0x8BD6, 0xB5D6, 0x8BD7, 0xB5D7, 0x8BD8, - 0xB5D8, 0xB6C5, 0xB5D9, 0x8BD9, 0xB5DA, 0x8BDA, 0xB5DB, 0x8BDB, - 0xB5DC, 0x8BDC, 0xB5DD, 0x8BDD, 0xB5DE, 0x8BDE, 0xB5DF, 0x8BDF, - 0xB5E0, 0x8BE0, 0xB5E1, 0x8BE1, 0xB5E2, 0x8BE2, 0xB5E3, 0x8BE3, - 0xB5E4, 0x8BE4, 0xB5E5, 0x8BE5, 0xB5E6, 0x8BE6, 0xB5E7, 0x8BE7, - 0xB5E8, 0x8BE8, 0xB5E9, 0x8BE9, 0xB5EA, 0x8BEA, 0xB5EB, 0x8BEB, - 0xB5EC, 0xB6C6, 0xB5ED, 0x8BEC, 0xB5EE, 0x8BED, 0xB5EF, 0x8BEE, - 0xB5F0, 0x8BEF, 0xB5F1, 0x8BF0, 0xB5F2, 0x8BF1, 0xB5F3, 0x8BF2, - 0xB5F4, 0x8BF3, 0xB5F5, 0x8BF4, 0xB5F6, 0x8BF5, 0xB5F7, 0x8BF6, - 0xB5F8, 0x8BF7, 0xB5F9, 0x8BF8, 0xB5FA, 0x8BF9, 0xB5FB, 0x8BFA, - 0xB5FC, 0x8BFB, 0xB5FD, 0x8BFC, 0xB5FE, 0x8BFD, 0xB5FF, 0x8BFE, - 0xB600, 0x8C41, 0xB601, 0x8C42, 0xB602, 0x8C43, 0xB603, 0x8C44, - 0xB604, 0x8C45, 0xB605, 0x8C46, 0xB606, 0x8C47, 0xB607, 0x8C48, - 0xB608, 0x8C49, 0xB609, 0x8C4A, 0xB60A, 0x8C4B, 0xB60B, 0x8C4C, - 0xB60C, 0x8C4D, 0xB60D, 0x8C4E, 0xB60E, 0x8C4F, 0xB60F, 0x8C50, - 0xB610, 0xB6C7, 0xB611, 0xB6C8, 0xB612, 0x8C51, 0xB613, 0x8C52, - 0xB614, 0xB6C9, 0xB615, 0x8C53, 0xB616, 0x8C54, 0xB617, 0x8C55, - 0xB618, 0xB6CA, 0xB619, 0x8C56, 0xB61A, 0x8C57, 0xB61B, 0x8C58, - 0xB61C, 0x8C59, 0xB61D, 0x8C5A, 0xB61E, 0x8C61, 0xB61F, 0x8C62, - 0xB620, 0x8C63, 0xB621, 0x8C64, 0xB622, 0x8C65, 0xB623, 0x8C66, - 0xB624, 0x8C67, 0xB625, 0xB6CB, 0xB626, 0x8C68, 0xB627, 0x8C69, - 0xB628, 0x8C6A, 0xB629, 0x8C6B, 0xB62A, 0x8C6C, 0xB62B, 0x8C6D, - 0xB62C, 0xB6CC, 0xB62D, 0x8C6E, 0xB62E, 0x8C6F, 0xB62F, 0x8C70, - 0xB630, 0x8C71, 0xB631, 0x8C72, 0xB632, 0x8C73, 0xB633, 0x8C74, - 0xB634, 0xB6CD, 0xB635, 0x8C75, 0xB636, 0x8C76, 0xB637, 0x8C77, - 0xB638, 0x8C78, 0xB639, 0x8C79, 0xB63A, 0x8C7A, 0xB63B, 0x8C81, - 0xB63C, 0x8C82, 0xB63D, 0x8C83, 0xB63E, 0x8C84, 0xB63F, 0x8C85, - 0xB640, 0x8C86, 0xB641, 0x8C87, 0xB642, 0x8C88, 0xB643, 0x8C89, - 0xB644, 0x8C8A, 0xB645, 0x8C8B, 0xB646, 0x8C8C, 0xB647, 0x8C8D, - 0xB648, 0xB6CE, 0xB649, 0x8C8E, 0xB64A, 0x8C8F, 0xB64B, 0x8C90, - 0xB64C, 0x8C91, 0xB64D, 0x8C92, 0xB64E, 0x8C93, 0xB64F, 0x8C94, - 0xB650, 0x8C95, 0xB651, 0x8C96, 0xB652, 0x8C97, 0xB653, 0x8C98, - 0xB654, 0x8C99, 0xB655, 0x8C9A, 0xB656, 0x8C9B, 0xB657, 0x8C9C, - 0xB658, 0x8C9D, 0xB659, 0x8C9E, 0xB65A, 0x8C9F, 0xB65B, 0x8CA0, - 0xB65C, 0x8CA1, 0xB65D, 0x8CA2, 0xB65E, 0x8CA3, 0xB65F, 0x8CA4, - 0xB660, 0x8CA5, 0xB661, 0x8CA6, 0xB662, 0x8CA7, 0xB663, 0x8CA8, - 0xB664, 0xB6CF, 0xB665, 0x8CA9, 0xB666, 0x8CAA, 0xB667, 0x8CAB, - 0xB668, 0xB6D0, 0xB669, 0x8CAC, 0xB66A, 0x8CAD, 0xB66B, 0x8CAE, - 0xB66C, 0x8CAF, 0xB66D, 0x8CB0, 0xB66E, 0x8CB1, 0xB66F, 0x8CB2, - 0xB670, 0x8CB3, 0xB671, 0x8CB4, 0xB672, 0x8CB5, 0xB673, 0x8CB6, - 0xB674, 0x8CB7, 0xB675, 0x8CB8, 0xB676, 0x8CB9, 0xB677, 0x8CBA, - 0xB678, 0x8CBB, 0xB679, 0x8CBC, 0xB67A, 0x8CBD, 0xB67B, 0x8CBE, - 0xB67C, 0x8CBF, 0xB67D, 0x8CC0, 0xB67E, 0x8CC1, 0xB67F, 0x8CC2, - 0xB680, 0x8CC3, 0xB681, 0x8CC4, 0xB682, 0x8CC5, 0xB683, 0x8CC6, - 0xB684, 0x8CC7, 0xB685, 0x8CC8, 0xB686, 0x8CC9, 0xB687, 0x8CCA, - 0xB688, 0x8CCB, 0xB689, 0x8CCC, 0xB68A, 0x8CCD, 0xB68B, 0x8CCE, - 0xB68C, 0x8CCF, 0xB68D, 0x8CD0, 0xB68E, 0x8CD1, 0xB68F, 0x8CD2, - 0xB690, 0x8CD3, 0xB691, 0x8CD4, 0xB692, 0x8CD5, 0xB693, 0x8CD6, - 0xB694, 0x8CD7, 0xB695, 0x8CD8, 0xB696, 0x8CD9, 0xB697, 0x8CDA, - 0xB698, 0x8CDB, 0xB699, 0x8CDC, 0xB69A, 0x8CDD, 0xB69B, 0x8CDE, - 0xB69C, 0xB6D1, 0xB69D, 0xB6D2, 0xB69E, 0x8CDF, 0xB69F, 0x8CE0, - 0xB6A0, 0xB6D3, 0xB6A1, 0x8CE1, 0xB6A2, 0x8CE2, 0xB6A3, 0x8CE3, - 0xB6A4, 0xB6D4, 0xB6A5, 0x8CE4, 0xB6A6, 0x8CE5, 0xB6A7, 0x8CE6, - 0xB6A8, 0x8CE7, 0xB6A9, 0x8CE8, 0xB6AA, 0x8CE9, 0xB6AB, 0xB6D5, - 0xB6AC, 0xB6D6, 0xB6AD, 0x8CEA, 0xB6AE, 0x8CEB, 0xB6AF, 0x8CEC, - 0xB6B0, 0x8CED, 0xB6B1, 0xB6D7, 0xB6B2, 0x8CEE, 0xB6B3, 0x8CEF, - 0xB6B4, 0x8CF0, 0xB6B5, 0x8CF1, 0xB6B6, 0x8CF2, 0xB6B7, 0x8CF3, - 0xB6B8, 0x8CF4, 0xB6B9, 0x8CF5, 0xB6BA, 0x8CF6, 0xB6BB, 0x8CF7, - 0xB6BC, 0x8CF8, 0xB6BD, 0x8CF9, 0xB6BE, 0x8CFA, 0xB6BF, 0x8CFB, - 0xB6C0, 0x8CFC, 0xB6C1, 0x8CFD, 0xB6C2, 0x8CFE, 0xB6C3, 0x8D41, - 0xB6C4, 0x8D42, 0xB6C5, 0x8D43, 0xB6C6, 0x8D44, 0xB6C7, 0x8D45, - 0xB6C8, 0x8D46, 0xB6C9, 0x8D47, 0xB6CA, 0x8D48, 0xB6CB, 0x8D49, - 0xB6CC, 0x8D4A, 0xB6CD, 0x8D4B, 0xB6CE, 0x8D4C, 0xB6CF, 0x8D4D, - 0xB6D0, 0x8D4E, 0xB6D1, 0x8D4F, 0xB6D2, 0x8D50, 0xB6D3, 0x8D51, - 0xB6D4, 0xB6D8, 0xB6D5, 0x8D52, 0xB6D6, 0x8D53, 0xB6D7, 0x8D54, - 0xB6D8, 0x8D55, 0xB6D9, 0x8D56, 0xB6DA, 0x8D57, 0xB6DB, 0x8D58, - 0xB6DC, 0x8D59, 0xB6DD, 0x8D5A, 0xB6DE, 0x8D61, 0xB6DF, 0x8D62, - 0xB6E0, 0x8D63, 0xB6E1, 0x8D64, 0xB6E2, 0x8D65, 0xB6E3, 0x8D66, - 0xB6E4, 0x8D67, 0xB6E5, 0x8D68, 0xB6E6, 0x8D69, 0xB6E7, 0x8D6A, - 0xB6E8, 0x8D6B, 0xB6E9, 0x8D6C, 0xB6EA, 0x8D6D, 0xB6EB, 0x8D6E, - 0xB6EC, 0x8D6F, 0xB6ED, 0x8D70, 0xB6EE, 0x8D71, 0xB6EF, 0x8D72, - 0xB6F0, 0xB6D9, 0xB6F1, 0x8D73, 0xB6F2, 0x8D74, 0xB6F3, 0x8D75, - 0xB6F4, 0xB6DA, 0xB6F5, 0x8D76, 0xB6F6, 0x8D77, 0xB6F7, 0x8D78, - 0xB6F8, 0xB6DB, 0xB6F9, 0x8D79, 0xB6FA, 0x8D7A, 0xB6FB, 0x8D81, - 0xB6FC, 0x8D82, 0xB6FD, 0x8D83, 0xB6FE, 0x8D84, 0xB6FF, 0x8D85, - 0xB700, 0xB6DC, 0xB701, 0xB6DD, 0xB702, 0x8D86, 0xB703, 0x8D87, - 0xB704, 0x8D88, 0xB705, 0xB6DE, 0xB706, 0x8D89, 0xB707, 0x8D8A, - 0xB708, 0x8D8B, 0xB709, 0x8D8C, 0xB70A, 0x8D8D, 0xB70B, 0x8D8E, - 0xB70C, 0x8D8F, 0xB70D, 0x8D90, 0xB70E, 0x8D91, 0xB70F, 0x8D92, - 0xB710, 0x8D93, 0xB711, 0x8D94, 0xB712, 0x8D95, 0xB713, 0x8D96, - 0xB714, 0x8D97, 0xB715, 0x8D98, 0xB716, 0x8D99, 0xB717, 0x8D9A, - 0xB718, 0x8D9B, 0xB719, 0x8D9C, 0xB71A, 0x8D9D, 0xB71B, 0x8D9E, - 0xB71C, 0x8D9F, 0xB71D, 0x8DA0, 0xB71E, 0x8DA1, 0xB71F, 0x8DA2, - 0xB720, 0x8DA3, 0xB721, 0x8DA4, 0xB722, 0x8DA5, 0xB723, 0x8DA6, - 0xB724, 0x8DA7, 0xB725, 0x8DA8, 0xB726, 0x8DA9, 0xB727, 0x8DAA, - 0xB728, 0xB6DF, 0xB729, 0xB6E0, 0xB72A, 0x8DAB, 0xB72B, 0x8DAC, - 0xB72C, 0xB6E1, 0xB72D, 0x8DAD, 0xB72E, 0x8DAE, 0xB72F, 0xB6E2, - 0xB730, 0xB6E3, 0xB731, 0x8DAF, 0xB732, 0x8DB0, 0xB733, 0x8DB1, - 0xB734, 0x8DB2, 0xB735, 0x8DB3, 0xB736, 0x8DB4, 0xB737, 0x8DB5, - 0xB738, 0xB6E4, 0xB739, 0xB6E5, 0xB73A, 0x8DB6, 0xB73B, 0xB6E6, - 0xB73C, 0x8DB7, 0xB73D, 0x8DB8, 0xB73E, 0x8DB9, 0xB73F, 0x8DBA, - 0xB740, 0x8DBB, 0xB741, 0x8DBC, 0xB742, 0x8DBD, 0xB743, 0x8DBE, - 0xB744, 0xB6E7, 0xB745, 0x8DBF, 0xB746, 0x8DC0, 0xB747, 0x8DC1, - 0xB748, 0xB6E8, 0xB749, 0x8DC2, 0xB74A, 0x8DC3, 0xB74B, 0x8DC4, - 0xB74C, 0xB6E9, 0xB74D, 0x8DC5, 0xB74E, 0x8DC6, 0xB74F, 0x8DC7, - 0xB750, 0x8DC8, 0xB751, 0x8DC9, 0xB752, 0x8DCA, 0xB753, 0x8DCB, - 0xB754, 0xB6EA, 0xB755, 0xB6EB, 0xB756, 0x8DCC, 0xB757, 0x8DCD, - 0xB758, 0x8DCE, 0xB759, 0x8DCF, 0xB75A, 0x8DD0, 0xB75B, 0x8DD1, - 0xB75C, 0x8DD2, 0xB75D, 0x8DD3, 0xB75E, 0x8DD4, 0xB75F, 0x8DD5, - 0xB760, 0xB6EC, 0xB761, 0x8DD6, 0xB762, 0x8DD7, 0xB763, 0x8DD8, - 0xB764, 0xB6ED, 0xB765, 0x8DD9, 0xB766, 0x8DDA, 0xB767, 0x8DDB, - 0xB768, 0xB6EE, 0xB769, 0x8DDC, 0xB76A, 0x8DDD, 0xB76B, 0x8DDE, - 0xB76C, 0x8DDF, 0xB76D, 0x8DE0, 0xB76E, 0x8DE1, 0xB76F, 0x8DE2, - 0xB770, 0xB6EF, 0xB771, 0xB6F0, 0xB772, 0x8DE3, 0xB773, 0xB6F1, - 0xB774, 0x8DE4, 0xB775, 0xB6F2, 0xB776, 0x8DE5, 0xB777, 0x8DE6, - 0xB778, 0x8DE7, 0xB779, 0x8DE8, 0xB77A, 0x8DE9, 0xB77B, 0x8DEA, - 0xB77C, 0xB6F3, 0xB77D, 0xB6F4, 0xB77E, 0x8DEB, 0xB77F, 0x8DEC, - 0xB780, 0xB6F5, 0xB781, 0x8DED, 0xB782, 0x8DEE, 0xB783, 0x8DEF, - 0xB784, 0xB6F6, 0xB785, 0x8DF0, 0xB786, 0x8DF1, 0xB787, 0x8DF2, - 0xB788, 0x8DF3, 0xB789, 0x8DF4, 0xB78A, 0x8DF5, 0xB78B, 0x8DF6, - 0xB78C, 0xB6F7, 0xB78D, 0xB6F8, 0xB78E, 0x8DF7, 0xB78F, 0xB6F9, - 0xB790, 0xB6FA, 0xB791, 0xB6FB, 0xB792, 0xB6FC, 0xB793, 0x8DF8, - 0xB794, 0x8DF9, 0xB795, 0x8DFA, 0xB796, 0xB6FD, 0xB797, 0xB6FE, - 0xB798, 0xB7A1, 0xB799, 0xB7A2, 0xB79A, 0x8DFB, 0xB79B, 0x8DFC, - 0xB79C, 0xB7A3, 0xB79D, 0x8DFD, 0xB79E, 0x8DFE, 0xB79F, 0x8E41, - 0xB7A0, 0xB7A4, 0xB7A1, 0x8E42, 0xB7A2, 0x8E43, 0xB7A3, 0x8E44, - 0xB7A4, 0x8E45, 0xB7A5, 0x8E46, 0xB7A6, 0x8E47, 0xB7A7, 0x8E48, - 0xB7A8, 0xB7A5, 0xB7A9, 0xB7A6, 0xB7AA, 0x8E49, 0xB7AB, 0xB7A7, - 0xB7AC, 0xB7A8, 0xB7AD, 0xB7A9, 0xB7AE, 0x8E4A, 0xB7AF, 0x8E4B, - 0xB7B0, 0x8E4C, 0xB7B1, 0x8E4D, 0xB7B2, 0x8E4E, 0xB7B3, 0x8E4F, - 0xB7B4, 0xB7AA, 0xB7B5, 0xB7AB, 0xB7B6, 0x8E50, 0xB7B7, 0x8E51, - 0xB7B8, 0xB7AC, 0xB7B9, 0x8E52, 0xB7BA, 0x8E53, 0xB7BB, 0x8E54, - 0xB7BC, 0x8E55, 0xB7BD, 0x8E56, 0xB7BE, 0x8E57, 0xB7BF, 0x8E58, - 0xB7C0, 0x8E59, 0xB7C1, 0x8E5A, 0xB7C2, 0x8E61, 0xB7C3, 0x8E62, - 0xB7C4, 0x8E63, 0xB7C5, 0x8E64, 0xB7C6, 0x8E65, 0xB7C7, 0xB7AD, - 0xB7C8, 0x8E66, 0xB7C9, 0xB7AE, 0xB7CA, 0x8E67, 0xB7CB, 0x8E68, - 0xB7CC, 0x8E69, 0xB7CD, 0x8E6A, 0xB7CE, 0x8E6B, 0xB7CF, 0x8E6C, - 0xB7D0, 0x8E6D, 0xB7D1, 0x8E6E, 0xB7D2, 0x8E6F, 0xB7D3, 0x8E70, - 0xB7D4, 0x8E71, 0xB7D5, 0x8E72, 0xB7D6, 0x8E73, 0xB7D7, 0x8E74, - 0xB7D8, 0x8E75, 0xB7D9, 0x8E76, 0xB7DA, 0x8E77, 0xB7DB, 0x8E78, - 0xB7DC, 0x8E79, 0xB7DD, 0x8E7A, 0xB7DE, 0x8E81, 0xB7DF, 0x8E82, - 0xB7E0, 0x8E83, 0xB7E1, 0x8E84, 0xB7E2, 0x8E85, 0xB7E3, 0x8E86, - 0xB7E4, 0x8E87, 0xB7E5, 0x8E88, 0xB7E6, 0x8E89, 0xB7E7, 0x8E8A, - 0xB7E8, 0x8E8B, 0xB7E9, 0x8E8C, 0xB7EA, 0x8E8D, 0xB7EB, 0x8E8E, - 0xB7EC, 0xB7AF, 0xB7ED, 0xB7B0, 0xB7EE, 0x8E8F, 0xB7EF, 0x8E90, - 0xB7F0, 0xB7B1, 0xB7F1, 0x8E91, 0xB7F2, 0x8E92, 0xB7F3, 0x8E93, - 0xB7F4, 0xB7B2, 0xB7F5, 0x8E94, 0xB7F6, 0x8E95, 0xB7F7, 0x8E96, - 0xB7F8, 0x8E97, 0xB7F9, 0x8E98, 0xB7FA, 0x8E99, 0xB7FB, 0x8E9A, - 0xB7FC, 0xB7B3, 0xB7FD, 0xB7B4, 0xB7FE, 0x8E9B, 0xB7FF, 0xB7B5, - 0xB800, 0xB7B6, 0xB801, 0xB7B7, 0xB802, 0x8E9C, 0xB803, 0x8E9D, - 0xB804, 0x8E9E, 0xB805, 0x8E9F, 0xB806, 0x8EA0, 0xB807, 0xB7B8, - 0xB808, 0xB7B9, 0xB809, 0xB7BA, 0xB80A, 0x8EA1, 0xB80B, 0x8EA2, - 0xB80C, 0xB7BB, 0xB80D, 0x8EA3, 0xB80E, 0x8EA4, 0xB80F, 0x8EA5, - 0xB810, 0xB7BC, 0xB811, 0x8EA6, 0xB812, 0x8EA7, 0xB813, 0x8EA8, - 0xB814, 0x8EA9, 0xB815, 0x8EAA, 0xB816, 0x8EAB, 0xB817, 0x8EAC, - 0xB818, 0xB7BD, 0xB819, 0xB7BE, 0xB81A, 0x8EAD, 0xB81B, 0xB7BF, - 0xB81C, 0x8EAE, 0xB81D, 0xB7C0, 0xB81E, 0x8EAF, 0xB81F, 0x8EB0, - 0xB820, 0x8EB1, 0xB821, 0x8EB2, 0xB822, 0x8EB3, 0xB823, 0x8EB4, - 0xB824, 0xB7C1, 0xB825, 0xB7C2, 0xB826, 0x8EB5, 0xB827, 0x8EB6, - 0xB828, 0xB7C3, 0xB829, 0x8EB7, 0xB82A, 0x8EB8, 0xB82B, 0x8EB9, - 0xB82C, 0xB7C4, 0xB82D, 0x8EBA, 0xB82E, 0x8EBB, 0xB82F, 0x8EBC, - 0xB830, 0x8EBD, 0xB831, 0x8EBE, 0xB832, 0x8EBF, 0xB833, 0x8EC0, - 0xB834, 0xB7C5, 0xB835, 0xB7C6, 0xB836, 0x8EC1, 0xB837, 0xB7C7, - 0xB838, 0xB7C8, 0xB839, 0xB7C9, 0xB83A, 0x8EC2, 0xB83B, 0x8EC3, - 0xB83C, 0x8EC4, 0xB83D, 0x8EC5, 0xB83E, 0x8EC6, 0xB83F, 0x8EC7, - 0xB840, 0xB7CA, 0xB841, 0x8EC8, 0xB842, 0x8EC9, 0xB843, 0x8ECA, - 0xB844, 0xB7CB, 0xB845, 0x8ECB, 0xB846, 0x8ECC, 0xB847, 0x8ECD, - 0xB848, 0x8ECE, 0xB849, 0x8ECF, 0xB84A, 0x8ED0, 0xB84B, 0x8ED1, - 0xB84C, 0x8ED2, 0xB84D, 0x8ED3, 0xB84E, 0x8ED4, 0xB84F, 0x8ED5, - 0xB850, 0x8ED6, 0xB851, 0xB7CC, 0xB852, 0x8ED7, 0xB853, 0xB7CD, - 0xB854, 0x8ED8, 0xB855, 0x8ED9, 0xB856, 0x8EDA, 0xB857, 0x8EDB, - 0xB858, 0x8EDC, 0xB859, 0x8EDD, 0xB85A, 0x8EDE, 0xB85B, 0x8EDF, - 0xB85C, 0xB7CE, 0xB85D, 0xB7CF, 0xB85E, 0x8EE0, 0xB85F, 0x8EE1, - 0xB860, 0xB7D0, 0xB861, 0x8EE2, 0xB862, 0x8EE3, 0xB863, 0x8EE4, - 0xB864, 0xB7D1, 0xB865, 0x8EE5, 0xB866, 0x8EE6, 0xB867, 0x8EE7, - 0xB868, 0x8EE8, 0xB869, 0x8EE9, 0xB86A, 0x8EEA, 0xB86B, 0x8EEB, - 0xB86C, 0xB7D2, 0xB86D, 0xB7D3, 0xB86E, 0x8EEC, 0xB86F, 0xB7D4, - 0xB870, 0x8EED, 0xB871, 0xB7D5, 0xB872, 0x8EEE, 0xB873, 0x8EEF, - 0xB874, 0x8EF0, 0xB875, 0x8EF1, 0xB876, 0x8EF2, 0xB877, 0x8EF3, - 0xB878, 0xB7D6, 0xB879, 0x8EF4, 0xB87A, 0x8EF5, 0xB87B, 0x8EF6, - 0xB87C, 0xB7D7, 0xB87D, 0x8EF7, 0xB87E, 0x8EF8, 0xB87F, 0x8EF9, - 0xB880, 0x8EFA, 0xB881, 0x8EFB, 0xB882, 0x8EFC, 0xB883, 0x8EFD, - 0xB884, 0x8EFE, 0xB885, 0x8F41, 0xB886, 0x8F42, 0xB887, 0x8F43, - 0xB888, 0x8F44, 0xB889, 0x8F45, 0xB88A, 0x8F46, 0xB88B, 0x8F47, - 0xB88C, 0x8F48, 0xB88D, 0xB7D8, 0xB88E, 0x8F49, 0xB88F, 0x8F4A, - 0xB890, 0x8F4B, 0xB891, 0x8F4C, 0xB892, 0x8F4D, 0xB893, 0x8F4E, - 0xB894, 0x8F4F, 0xB895, 0x8F50, 0xB896, 0x8F51, 0xB897, 0x8F52, - 0xB898, 0x8F53, 0xB899, 0x8F54, 0xB89A, 0x8F55, 0xB89B, 0x8F56, - 0xB89C, 0x8F57, 0xB89D, 0x8F58, 0xB89E, 0x8F59, 0xB89F, 0x8F5A, - 0xB8A0, 0x8F61, 0xB8A1, 0x8F62, 0xB8A2, 0x8F63, 0xB8A3, 0x8F64, - 0xB8A4, 0x8F65, 0xB8A5, 0x8F66, 0xB8A6, 0x8F67, 0xB8A7, 0x8F68, - 0xB8A8, 0xB7D9, 0xB8A9, 0x8F69, 0xB8AA, 0x8F6A, 0xB8AB, 0x8F6B, - 0xB8AC, 0x8F6C, 0xB8AD, 0x8F6D, 0xB8AE, 0x8F6E, 0xB8AF, 0x8F6F, - 0xB8B0, 0xB7DA, 0xB8B1, 0x8F70, 0xB8B2, 0x8F71, 0xB8B3, 0x8F72, - 0xB8B4, 0xB7DB, 0xB8B5, 0x8F73, 0xB8B6, 0x8F74, 0xB8B7, 0x8F75, - 0xB8B8, 0xB7DC, 0xB8B9, 0x8F76, 0xB8BA, 0x8F77, 0xB8BB, 0x8F78, - 0xB8BC, 0x8F79, 0xB8BD, 0x8F7A, 0xB8BE, 0x8F81, 0xB8BF, 0x8F82, - 0xB8C0, 0xB7DD, 0xB8C1, 0xB7DE, 0xB8C2, 0x8F83, 0xB8C3, 0xB7DF, - 0xB8C4, 0x8F84, 0xB8C5, 0xB7E0, 0xB8C6, 0x8F85, 0xB8C7, 0x8F86, - 0xB8C8, 0x8F87, 0xB8C9, 0x8F88, 0xB8CA, 0x8F89, 0xB8CB, 0x8F8A, - 0xB8CC, 0xB7E1, 0xB8CD, 0x8F8B, 0xB8CE, 0x8F8C, 0xB8CF, 0x8F8D, - 0xB8D0, 0xB7E2, 0xB8D1, 0x8F8E, 0xB8D2, 0x8F8F, 0xB8D3, 0x8F90, - 0xB8D4, 0xB7E3, 0xB8D5, 0x8F91, 0xB8D6, 0x8F92, 0xB8D7, 0x8F93, - 0xB8D8, 0x8F94, 0xB8D9, 0x8F95, 0xB8DA, 0x8F96, 0xB8DB, 0x8F97, - 0xB8DC, 0x8F98, 0xB8DD, 0xB7E4, 0xB8DE, 0x8F99, 0xB8DF, 0xB7E5, - 0xB8E0, 0x8F9A, 0xB8E1, 0xB7E6, 0xB8E2, 0x8F9B, 0xB8E3, 0x8F9C, - 0xB8E4, 0x8F9D, 0xB8E5, 0x8F9E, 0xB8E6, 0x8F9F, 0xB8E7, 0x8FA0, - 0xB8E8, 0xB7E7, 0xB8E9, 0xB7E8, 0xB8EA, 0x8FA1, 0xB8EB, 0x8FA2, - 0xB8EC, 0xB7E9, 0xB8ED, 0x8FA3, 0xB8EE, 0x8FA4, 0xB8EF, 0x8FA5, - 0xB8F0, 0xB7EA, 0xB8F1, 0x8FA6, 0xB8F2, 0x8FA7, 0xB8F3, 0x8FA8, - 0xB8F4, 0x8FA9, 0xB8F5, 0x8FAA, 0xB8F6, 0x8FAB, 0xB8F7, 0x8FAC, - 0xB8F8, 0xB7EB, 0xB8F9, 0xB7EC, 0xB8FA, 0x8FAD, 0xB8FB, 0xB7ED, - 0xB8FC, 0x8FAE, 0xB8FD, 0xB7EE, 0xB8FE, 0x8FAF, 0xB8FF, 0x8FB0, - 0xB900, 0x8FB1, 0xB901, 0x8FB2, 0xB902, 0x8FB3, 0xB903, 0x8FB4, - 0xB904, 0xB7EF, 0xB905, 0x8FB5, 0xB906, 0x8FB6, 0xB907, 0x8FB7, - 0xB908, 0x8FB8, 0xB909, 0x8FB9, 0xB90A, 0x8FBA, 0xB90B, 0x8FBB, - 0xB90C, 0x8FBC, 0xB90D, 0x8FBD, 0xB90E, 0x8FBE, 0xB90F, 0x8FBF, - 0xB910, 0x8FC0, 0xB911, 0x8FC1, 0xB912, 0x8FC2, 0xB913, 0x8FC3, - 0xB914, 0x8FC4, 0xB915, 0x8FC5, 0xB916, 0x8FC6, 0xB917, 0x8FC7, - 0xB918, 0xB7F0, 0xB919, 0x8FC8, 0xB91A, 0x8FC9, 0xB91B, 0x8FCA, - 0xB91C, 0x8FCB, 0xB91D, 0x8FCC, 0xB91E, 0x8FCD, 0xB91F, 0x8FCE, - 0xB920, 0xB7F1, 0xB921, 0x8FCF, 0xB922, 0x8FD0, 0xB923, 0x8FD1, - 0xB924, 0x8FD2, 0xB925, 0x8FD3, 0xB926, 0x8FD4, 0xB927, 0x8FD5, - 0xB928, 0x8FD6, 0xB929, 0x8FD7, 0xB92A, 0x8FD8, 0xB92B, 0x8FD9, - 0xB92C, 0x8FDA, 0xB92D, 0x8FDB, 0xB92E, 0x8FDC, 0xB92F, 0x8FDD, - 0xB930, 0x8FDE, 0xB931, 0x8FDF, 0xB932, 0x8FE0, 0xB933, 0x8FE1, - 0xB934, 0x8FE2, 0xB935, 0x8FE3, 0xB936, 0x8FE4, 0xB937, 0x8FE5, - 0xB938, 0x8FE6, 0xB939, 0x8FE7, 0xB93A, 0x8FE8, 0xB93B, 0x8FE9, - 0xB93C, 0xB7F2, 0xB93D, 0xB7F3, 0xB93E, 0x8FEA, 0xB93F, 0x8FEB, - 0xB940, 0xB7F4, 0xB941, 0x8FEC, 0xB942, 0x8FED, 0xB943, 0x8FEE, - 0xB944, 0xB7F5, 0xB945, 0x8FEF, 0xB946, 0x8FF0, 0xB947, 0x8FF1, - 0xB948, 0x8FF2, 0xB949, 0x8FF3, 0xB94A, 0x8FF4, 0xB94B, 0x8FF5, - 0xB94C, 0xB7F6, 0xB94D, 0x8FF6, 0xB94E, 0x8FF7, 0xB94F, 0xB7F7, - 0xB950, 0x8FF8, 0xB951, 0xB7F8, 0xB952, 0x8FF9, 0xB953, 0x8FFA, - 0xB954, 0x8FFB, 0xB955, 0x8FFC, 0xB956, 0x8FFD, 0xB957, 0x8FFE, - 0xB958, 0xB7F9, 0xB959, 0xB7FA, 0xB95A, 0x9041, 0xB95B, 0x9042, - 0xB95C, 0xB7FB, 0xB95D, 0x9043, 0xB95E, 0x9044, 0xB95F, 0x9045, - 0xB960, 0xB7FC, 0xB961, 0x9046, 0xB962, 0x9047, 0xB963, 0x9048, - 0xB964, 0x9049, 0xB965, 0x904A, 0xB966, 0x904B, 0xB967, 0x904C, - 0xB968, 0xB7FD, 0xB969, 0xB7FE, 0xB96A, 0x904D, 0xB96B, 0xB8A1, - 0xB96C, 0x904E, 0xB96D, 0xB8A2, 0xB96E, 0x904F, 0xB96F, 0x9050, - 0xB970, 0x9051, 0xB971, 0x9052, 0xB972, 0x9053, 0xB973, 0x9054, - 0xB974, 0xB8A3, 0xB975, 0xB8A4, 0xB976, 0x9055, 0xB977, 0x9056, - 0xB978, 0xB8A5, 0xB979, 0x9057, 0xB97A, 0x9058, 0xB97B, 0x9059, - 0xB97C, 0xB8A6, 0xB97D, 0x905A, 0xB97E, 0x9061, 0xB97F, 0x9062, - 0xB980, 0x9063, 0xB981, 0x9064, 0xB982, 0x9065, 0xB983, 0x9066, - 0xB984, 0xB8A7, 0xB985, 0xB8A8, 0xB986, 0x9067, 0xB987, 0xB8A9, - 0xB988, 0x9068, 0xB989, 0xB8AA, 0xB98A, 0xB8AB, 0xB98B, 0x9069, - 0xB98C, 0x906A, 0xB98D, 0xB8AC, 0xB98E, 0xB8AD, 0xB98F, 0x906B, - 0xB990, 0x906C, 0xB991, 0x906D, 0xB992, 0x906E, 0xB993, 0x906F, - 0xB994, 0x9070, 0xB995, 0x9071, 0xB996, 0x9072, 0xB997, 0x9073, - 0xB998, 0x9074, 0xB999, 0x9075, 0xB99A, 0x9076, 0xB99B, 0x9077, - 0xB99C, 0x9078, 0xB99D, 0x9079, 0xB99E, 0x907A, 0xB99F, 0x9081, - 0xB9A0, 0x9082, 0xB9A1, 0x9083, 0xB9A2, 0x9084, 0xB9A3, 0x9085, - 0xB9A4, 0x9086, 0xB9A5, 0x9087, 0xB9A6, 0x9088, 0xB9A7, 0x9089, - 0xB9A8, 0x908A, 0xB9A9, 0x908B, 0xB9AA, 0x908C, 0xB9AB, 0x908D, - 0xB9AC, 0xB8AE, 0xB9AD, 0xB8AF, 0xB9AE, 0x908E, 0xB9AF, 0x908F, - 0xB9B0, 0xB8B0, 0xB9B1, 0x9090, 0xB9B2, 0x9091, 0xB9B3, 0x9092, - 0xB9B4, 0xB8B1, 0xB9B5, 0x9093, 0xB9B6, 0x9094, 0xB9B7, 0x9095, - 0xB9B8, 0x9096, 0xB9B9, 0x9097, 0xB9BA, 0x9098, 0xB9BB, 0x9099, - 0xB9BC, 0xB8B2, 0xB9BD, 0xB8B3, 0xB9BE, 0x909A, 0xB9BF, 0xB8B4, - 0xB9C0, 0x909B, 0xB9C1, 0xB8B5, 0xB9C2, 0x909C, 0xB9C3, 0x909D, - 0xB9C4, 0x909E, 0xB9C5, 0x909F, 0xB9C6, 0x90A0, 0xB9C7, 0x90A1, - 0xB9C8, 0xB8B6, 0xB9C9, 0xB8B7, 0xB9CA, 0x90A2, 0xB9CB, 0x90A3, - 0xB9CC, 0xB8B8, 0xB9CD, 0x90A4, 0xB9CE, 0xB8B9, 0xB9CF, 0xB8BA, - 0xB9D0, 0xB8BB, 0xB9D1, 0xB8BC, 0xB9D2, 0xB8BD, 0xB9D3, 0x90A5, - 0xB9D4, 0x90A6, 0xB9D5, 0x90A7, 0xB9D6, 0x90A8, 0xB9D7, 0x90A9, - 0xB9D8, 0xB8BE, 0xB9D9, 0xB8BF, 0xB9DA, 0x90AA, 0xB9DB, 0xB8C0, - 0xB9DC, 0x90AB, 0xB9DD, 0xB8C1, 0xB9DE, 0xB8C2, 0xB9DF, 0x90AC, - 0xB9E0, 0x90AD, 0xB9E1, 0xB8C3, 0xB9E2, 0x90AE, 0xB9E3, 0xB8C4, - 0xB9E4, 0xB8C5, 0xB9E5, 0xB8C6, 0xB9E6, 0x90AF, 0xB9E7, 0x90B0, - 0xB9E8, 0xB8C7, 0xB9E9, 0x90B1, 0xB9EA, 0x90B2, 0xB9EB, 0x90B3, - 0xB9EC, 0xB8C8, 0xB9ED, 0x90B4, 0xB9EE, 0x90B5, 0xB9EF, 0x90B6, - 0xB9F0, 0x90B7, 0xB9F1, 0x90B8, 0xB9F2, 0x90B9, 0xB9F3, 0x90BA, - 0xB9F4, 0xB8C9, 0xB9F5, 0xB8CA, 0xB9F6, 0x90BB, 0xB9F7, 0xB8CB, - 0xB9F8, 0xB8CC, 0xB9F9, 0xB8CD, 0xB9FA, 0xB8CE, 0xB9FB, 0x90BC, - 0xB9FC, 0x90BD, 0xB9FD, 0x90BE, 0xB9FE, 0x90BF, 0xB9FF, 0x90C0, - 0xBA00, 0xB8CF, 0xBA01, 0xB8D0, 0xBA02, 0x90C1, 0xBA03, 0x90C2, - 0xBA04, 0x90C3, 0xBA05, 0x90C4, 0xBA06, 0x90C5, 0xBA07, 0x90C6, - 0xBA08, 0xB8D1, 0xBA09, 0x90C7, 0xBA0A, 0x90C8, 0xBA0B, 0x90C9, - 0xBA0C, 0x90CA, 0xBA0D, 0x90CB, 0xBA0E, 0x90CC, 0xBA0F, 0x90CD, - 0xBA10, 0x90CE, 0xBA11, 0x90CF, 0xBA12, 0x90D0, 0xBA13, 0x90D1, - 0xBA14, 0x90D2, 0xBA15, 0xB8D2, 0xBA16, 0x90D3, 0xBA17, 0x90D4, - 0xBA18, 0x90D5, 0xBA19, 0x90D6, 0xBA1A, 0x90D7, 0xBA1B, 0x90D8, - 0xBA1C, 0x90D9, 0xBA1D, 0x90DA, 0xBA1E, 0x90DB, 0xBA1F, 0x90DC, - 0xBA20, 0x90DD, 0xBA21, 0x90DE, 0xBA22, 0x90DF, 0xBA23, 0x90E0, - 0xBA24, 0x90E1, 0xBA25, 0x90E2, 0xBA26, 0x90E3, 0xBA27, 0x90E4, - 0xBA28, 0x90E5, 0xBA29, 0x90E6, 0xBA2A, 0x90E7, 0xBA2B, 0x90E8, - 0xBA2C, 0x90E9, 0xBA2D, 0x90EA, 0xBA2E, 0x90EB, 0xBA2F, 0x90EC, - 0xBA30, 0x90ED, 0xBA31, 0x90EE, 0xBA32, 0x90EF, 0xBA33, 0x90F0, - 0xBA34, 0x90F1, 0xBA35, 0x90F2, 0xBA36, 0x90F3, 0xBA37, 0x90F4, - 0xBA38, 0xB8D3, 0xBA39, 0xB8D4, 0xBA3A, 0x90F5, 0xBA3B, 0x90F6, - 0xBA3C, 0xB8D5, 0xBA3D, 0x90F7, 0xBA3E, 0x90F8, 0xBA3F, 0x90F9, - 0xBA40, 0xB8D6, 0xBA41, 0x90FA, 0xBA42, 0xB8D7, 0xBA43, 0x90FB, - 0xBA44, 0x90FC, 0xBA45, 0x90FD, 0xBA46, 0x90FE, 0xBA47, 0x9141, - 0xBA48, 0xB8D8, 0xBA49, 0xB8D9, 0xBA4A, 0x9142, 0xBA4B, 0xB8DA, - 0xBA4C, 0x9143, 0xBA4D, 0xB8DB, 0xBA4E, 0xB8DC, 0xBA4F, 0x9144, - 0xBA50, 0x9145, 0xBA51, 0x9146, 0xBA52, 0x9147, 0xBA53, 0xB8DD, - 0xBA54, 0xB8DE, 0xBA55, 0xB8DF, 0xBA56, 0x9148, 0xBA57, 0x9149, - 0xBA58, 0xB8E0, 0xBA59, 0x914A, 0xBA5A, 0x914B, 0xBA5B, 0x914C, - 0xBA5C, 0xB8E1, 0xBA5D, 0x914D, 0xBA5E, 0x914E, 0xBA5F, 0x914F, - 0xBA60, 0x9150, 0xBA61, 0x9151, 0xBA62, 0x9152, 0xBA63, 0x9153, - 0xBA64, 0xB8E2, 0xBA65, 0xB8E3, 0xBA66, 0x9154, 0xBA67, 0xB8E4, - 0xBA68, 0xB8E5, 0xBA69, 0xB8E6, 0xBA6A, 0x9155, 0xBA6B, 0x9156, - 0xBA6C, 0x9157, 0xBA6D, 0x9158, 0xBA6E, 0x9159, 0xBA6F, 0x915A, - 0xBA70, 0xB8E7, 0xBA71, 0xB8E8, 0xBA72, 0x9161, 0xBA73, 0x9162, - 0xBA74, 0xB8E9, 0xBA75, 0x9163, 0xBA76, 0x9164, 0xBA77, 0x9165, - 0xBA78, 0xB8EA, 0xBA79, 0x9166, 0xBA7A, 0x9167, 0xBA7B, 0x9168, - 0xBA7C, 0x9169, 0xBA7D, 0x916A, 0xBA7E, 0x916B, 0xBA7F, 0x916C, - 0xBA80, 0x916D, 0xBA81, 0x916E, 0xBA82, 0x916F, 0xBA83, 0xB8EB, - 0xBA84, 0xB8EC, 0xBA85, 0xB8ED, 0xBA86, 0x9170, 0xBA87, 0xB8EE, - 0xBA88, 0x9171, 0xBA89, 0x9172, 0xBA8A, 0x9173, 0xBA8B, 0x9174, - 0xBA8C, 0xB8EF, 0xBA8D, 0x9175, 0xBA8E, 0x9176, 0xBA8F, 0x9177, - 0xBA90, 0x9178, 0xBA91, 0x9179, 0xBA92, 0x917A, 0xBA93, 0x9181, - 0xBA94, 0x9182, 0xBA95, 0x9183, 0xBA96, 0x9184, 0xBA97, 0x9185, - 0xBA98, 0x9186, 0xBA99, 0x9187, 0xBA9A, 0x9188, 0xBA9B, 0x9189, - 0xBA9C, 0x918A, 0xBA9D, 0x918B, 0xBA9E, 0x918C, 0xBA9F, 0x918D, - 0xBAA0, 0x918E, 0xBAA1, 0x918F, 0xBAA2, 0x9190, 0xBAA3, 0x9191, - 0xBAA4, 0x9192, 0xBAA5, 0x9193, 0xBAA6, 0x9194, 0xBAA7, 0x9195, - 0xBAA8, 0xB8F0, 0xBAA9, 0xB8F1, 0xBAAA, 0x9196, 0xBAAB, 0xB8F2, - 0xBAAC, 0xB8F3, 0xBAAD, 0x9197, 0xBAAE, 0x9198, 0xBAAF, 0x9199, - 0xBAB0, 0xB8F4, 0xBAB1, 0x919A, 0xBAB2, 0xB8F5, 0xBAB3, 0x919B, - 0xBAB4, 0x919C, 0xBAB5, 0x919D, 0xBAB6, 0x919E, 0xBAB7, 0x919F, - 0xBAB8, 0xB8F6, 0xBAB9, 0xB8F7, 0xBABA, 0x91A0, 0xBABB, 0xB8F8, - 0xBABC, 0x91A1, 0xBABD, 0xB8F9, 0xBABE, 0x91A2, 0xBABF, 0x91A3, - 0xBAC0, 0x91A4, 0xBAC1, 0x91A5, 0xBAC2, 0x91A6, 0xBAC3, 0x91A7, - 0xBAC4, 0xB8FA, 0xBAC5, 0x91A8, 0xBAC6, 0x91A9, 0xBAC7, 0x91AA, - 0xBAC8, 0xB8FB, 0xBAC9, 0x91AB, 0xBACA, 0x91AC, 0xBACB, 0x91AD, - 0xBACC, 0x91AE, 0xBACD, 0x91AF, 0xBACE, 0x91B0, 0xBACF, 0x91B1, - 0xBAD0, 0x91B2, 0xBAD1, 0x91B3, 0xBAD2, 0x91B4, 0xBAD3, 0x91B5, - 0xBAD4, 0x91B6, 0xBAD5, 0x91B7, 0xBAD6, 0x91B8, 0xBAD7, 0x91B9, - 0xBAD8, 0xB8FC, 0xBAD9, 0xB8FD, 0xBADA, 0x91BA, 0xBADB, 0x91BB, - 0xBADC, 0x91BC, 0xBADD, 0x91BD, 0xBADE, 0x91BE, 0xBADF, 0x91BF, - 0xBAE0, 0x91C0, 0xBAE1, 0x91C1, 0xBAE2, 0x91C2, 0xBAE3, 0x91C3, - 0xBAE4, 0x91C4, 0xBAE5, 0x91C5, 0xBAE6, 0x91C6, 0xBAE7, 0x91C7, - 0xBAE8, 0x91C8, 0xBAE9, 0x91C9, 0xBAEA, 0x91CA, 0xBAEB, 0x91CB, - 0xBAEC, 0x91CC, 0xBAED, 0x91CD, 0xBAEE, 0x91CE, 0xBAEF, 0x91CF, - 0xBAF0, 0x91D0, 0xBAF1, 0x91D1, 0xBAF2, 0x91D2, 0xBAF3, 0x91D3, - 0xBAF4, 0x91D4, 0xBAF5, 0x91D5, 0xBAF6, 0x91D6, 0xBAF7, 0x91D7, - 0xBAF8, 0x91D8, 0xBAF9, 0x91D9, 0xBAFA, 0x91DA, 0xBAFB, 0x91DB, - 0xBAFC, 0xB8FE, 0xBAFD, 0x91DC, 0xBAFE, 0x91DD, 0xBAFF, 0x91DE, - 0xBB00, 0xB9A1, 0xBB01, 0x91DF, 0xBB02, 0x91E0, 0xBB03, 0x91E1, - 0xBB04, 0xB9A2, 0xBB05, 0x91E2, 0xBB06, 0x91E3, 0xBB07, 0x91E4, - 0xBB08, 0x91E5, 0xBB09, 0x91E6, 0xBB0A, 0x91E7, 0xBB0B, 0x91E8, - 0xBB0C, 0x91E9, 0xBB0D, 0xB9A3, 0xBB0E, 0x91EA, 0xBB0F, 0xB9A4, - 0xBB10, 0x91EB, 0xBB11, 0xB9A5, 0xBB12, 0x91EC, 0xBB13, 0x91ED, - 0xBB14, 0x91EE, 0xBB15, 0x91EF, 0xBB16, 0x91F0, 0xBB17, 0x91F1, - 0xBB18, 0xB9A6, 0xBB19, 0x91F2, 0xBB1A, 0x91F3, 0xBB1B, 0x91F4, - 0xBB1C, 0xB9A7, 0xBB1D, 0x91F5, 0xBB1E, 0x91F6, 0xBB1F, 0x91F7, - 0xBB20, 0xB9A8, 0xBB21, 0x91F8, 0xBB22, 0x91F9, 0xBB23, 0x91FA, - 0xBB24, 0x91FB, 0xBB25, 0x91FC, 0xBB26, 0x91FD, 0xBB27, 0x91FE, - 0xBB28, 0x9241, 0xBB29, 0xB9A9, 0xBB2A, 0x9242, 0xBB2B, 0xB9AA, - 0xBB2C, 0x9243, 0xBB2D, 0x9244, 0xBB2E, 0x9245, 0xBB2F, 0x9246, - 0xBB30, 0x9247, 0xBB31, 0x9248, 0xBB32, 0x9249, 0xBB33, 0x924A, - 0xBB34, 0xB9AB, 0xBB35, 0xB9AC, 0xBB36, 0xB9AD, 0xBB37, 0x924B, - 0xBB38, 0xB9AE, 0xBB39, 0x924C, 0xBB3A, 0x924D, 0xBB3B, 0xB9AF, - 0xBB3C, 0xB9B0, 0xBB3D, 0xB9B1, 0xBB3E, 0xB9B2, 0xBB3F, 0x924E, - 0xBB40, 0x924F, 0xBB41, 0x9250, 0xBB42, 0x9251, 0xBB43, 0x9252, - 0xBB44, 0xB9B3, 0xBB45, 0xB9B4, 0xBB46, 0x9253, 0xBB47, 0xB9B5, - 0xBB48, 0x9254, 0xBB49, 0xB9B6, 0xBB4A, 0x9255, 0xBB4B, 0x9256, - 0xBB4C, 0x9257, 0xBB4D, 0xB9B7, 0xBB4E, 0x9258, 0xBB4F, 0xB9B8, - 0xBB50, 0xB9B9, 0xBB51, 0x9259, 0xBB52, 0x925A, 0xBB53, 0x9261, - 0xBB54, 0xB9BA, 0xBB55, 0x9262, 0xBB56, 0x9263, 0xBB57, 0x9264, - 0xBB58, 0xB9BB, 0xBB59, 0x9265, 0xBB5A, 0x9266, 0xBB5B, 0x9267, - 0xBB5C, 0x9268, 0xBB5D, 0x9269, 0xBB5E, 0x926A, 0xBB5F, 0x926B, - 0xBB60, 0x926C, 0xBB61, 0xB9BC, 0xBB62, 0x926D, 0xBB63, 0xB9BD, - 0xBB64, 0x926E, 0xBB65, 0x926F, 0xBB66, 0x9270, 0xBB67, 0x9271, - 0xBB68, 0x9272, 0xBB69, 0x9273, 0xBB6A, 0x9274, 0xBB6B, 0x9275, - 0xBB6C, 0xB9BE, 0xBB6D, 0x9276, 0xBB6E, 0x9277, 0xBB6F, 0x9278, - 0xBB70, 0x9279, 0xBB71, 0x927A, 0xBB72, 0x9281, 0xBB73, 0x9282, - 0xBB74, 0x9283, 0xBB75, 0x9284, 0xBB76, 0x9285, 0xBB77, 0x9286, - 0xBB78, 0x9287, 0xBB79, 0x9288, 0xBB7A, 0x9289, 0xBB7B, 0x928A, - 0xBB7C, 0x928B, 0xBB7D, 0x928C, 0xBB7E, 0x928D, 0xBB7F, 0x928E, - 0xBB80, 0x928F, 0xBB81, 0x9290, 0xBB82, 0x9291, 0xBB83, 0x9292, - 0xBB84, 0x9293, 0xBB85, 0x9294, 0xBB86, 0x9295, 0xBB87, 0x9296, - 0xBB88, 0xB9BF, 0xBB89, 0x9297, 0xBB8A, 0x9298, 0xBB8B, 0x9299, - 0xBB8C, 0xB9C0, 0xBB8D, 0x929A, 0xBB8E, 0x929B, 0xBB8F, 0x929C, - 0xBB90, 0xB9C1, 0xBB91, 0x929D, 0xBB92, 0x929E, 0xBB93, 0x929F, - 0xBB94, 0x92A0, 0xBB95, 0x92A1, 0xBB96, 0x92A2, 0xBB97, 0x92A3, - 0xBB98, 0x92A4, 0xBB99, 0x92A5, 0xBB9A, 0x92A6, 0xBB9B, 0x92A7, - 0xBB9C, 0x92A8, 0xBB9D, 0x92A9, 0xBB9E, 0x92AA, 0xBB9F, 0x92AB, - 0xBBA0, 0x92AC, 0xBBA1, 0x92AD, 0xBBA2, 0x92AE, 0xBBA3, 0x92AF, - 0xBBA4, 0xB9C2, 0xBBA5, 0x92B0, 0xBBA6, 0x92B1, 0xBBA7, 0x92B2, - 0xBBA8, 0xB9C3, 0xBBA9, 0x92B3, 0xBBAA, 0x92B4, 0xBBAB, 0x92B5, - 0xBBAC, 0xB9C4, 0xBBAD, 0x92B6, 0xBBAE, 0x92B7, 0xBBAF, 0x92B8, - 0xBBB0, 0x92B9, 0xBBB1, 0x92BA, 0xBBB2, 0x92BB, 0xBBB3, 0x92BC, - 0xBBB4, 0xB9C5, 0xBBB5, 0x92BD, 0xBBB6, 0x92BE, 0xBBB7, 0xB9C6, - 0xBBB8, 0x92BF, 0xBBB9, 0x92C0, 0xBBBA, 0x92C1, 0xBBBB, 0x92C2, - 0xBBBC, 0x92C3, 0xBBBD, 0x92C4, 0xBBBE, 0x92C5, 0xBBBF, 0x92C6, - 0xBBC0, 0xB9C7, 0xBBC1, 0x92C7, 0xBBC2, 0x92C8, 0xBBC3, 0x92C9, - 0xBBC4, 0xB9C8, 0xBBC5, 0x92CA, 0xBBC6, 0x92CB, 0xBBC7, 0x92CC, - 0xBBC8, 0xB9C9, 0xBBC9, 0x92CD, 0xBBCA, 0x92CE, 0xBBCB, 0x92CF, - 0xBBCC, 0x92D0, 0xBBCD, 0x92D1, 0xBBCE, 0x92D2, 0xBBCF, 0x92D3, - 0xBBD0, 0xB9CA, 0xBBD1, 0x92D4, 0xBBD2, 0x92D5, 0xBBD3, 0xB9CB, - 0xBBD4, 0x92D6, 0xBBD5, 0x92D7, 0xBBD6, 0x92D8, 0xBBD7, 0x92D9, - 0xBBD8, 0x92DA, 0xBBD9, 0x92DB, 0xBBDA, 0x92DC, 0xBBDB, 0x92DD, - 0xBBDC, 0x92DE, 0xBBDD, 0x92DF, 0xBBDE, 0x92E0, 0xBBDF, 0x92E1, - 0xBBE0, 0x92E2, 0xBBE1, 0x92E3, 0xBBE2, 0x92E4, 0xBBE3, 0x92E5, - 0xBBE4, 0x92E6, 0xBBE5, 0x92E7, 0xBBE6, 0x92E8, 0xBBE7, 0x92E9, - 0xBBE8, 0x92EA, 0xBBE9, 0x92EB, 0xBBEA, 0x92EC, 0xBBEB, 0x92ED, - 0xBBEC, 0x92EE, 0xBBED, 0x92EF, 0xBBEE, 0x92F0, 0xBBEF, 0x92F1, - 0xBBF0, 0x92F2, 0xBBF1, 0x92F3, 0xBBF2, 0x92F4, 0xBBF3, 0x92F5, - 0xBBF4, 0x92F6, 0xBBF5, 0x92F7, 0xBBF6, 0x92F8, 0xBBF7, 0x92F9, - 0xBBF8, 0xB9CC, 0xBBF9, 0xB9CD, 0xBBFA, 0x92FA, 0xBBFB, 0x92FB, - 0xBBFC, 0xB9CE, 0xBBFD, 0x92FC, 0xBBFE, 0x92FD, 0xBBFF, 0xB9CF, - 0xBC00, 0xB9D0, 0xBC01, 0x92FE, 0xBC02, 0xB9D1, 0xBC03, 0x9341, - 0xBC04, 0x9342, 0xBC05, 0x9343, 0xBC06, 0x9344, 0xBC07, 0x9345, - 0xBC08, 0xB9D2, 0xBC09, 0xB9D3, 0xBC0A, 0x9346, 0xBC0B, 0xB9D4, - 0xBC0C, 0xB9D5, 0xBC0D, 0xB9D6, 0xBC0E, 0x9347, 0xBC0F, 0xB9D7, - 0xBC10, 0x9348, 0xBC11, 0xB9D8, 0xBC12, 0x9349, 0xBC13, 0x934A, - 0xBC14, 0xB9D9, 0xBC15, 0xB9DA, 0xBC16, 0xB9DB, 0xBC17, 0xB9DC, - 0xBC18, 0xB9DD, 0xBC19, 0x934B, 0xBC1A, 0x934C, 0xBC1B, 0xB9DE, - 0xBC1C, 0xB9DF, 0xBC1D, 0xB9E0, 0xBC1E, 0xB9E1, 0xBC1F, 0xB9E2, - 0xBC20, 0x934D, 0xBC21, 0x934E, 0xBC22, 0x934F, 0xBC23, 0x9350, - 0xBC24, 0xB9E3, 0xBC25, 0xB9E4, 0xBC26, 0x9351, 0xBC27, 0xB9E5, - 0xBC28, 0x9352, 0xBC29, 0xB9E6, 0xBC2A, 0x9353, 0xBC2B, 0x9354, - 0xBC2C, 0x9355, 0xBC2D, 0xB9E7, 0xBC2E, 0x9356, 0xBC2F, 0x9357, - 0xBC30, 0xB9E8, 0xBC31, 0xB9E9, 0xBC32, 0x9358, 0xBC33, 0x9359, - 0xBC34, 0xB9EA, 0xBC35, 0x935A, 0xBC36, 0x9361, 0xBC37, 0x9362, - 0xBC38, 0xB9EB, 0xBC39, 0x9363, 0xBC3A, 0x9364, 0xBC3B, 0x9365, - 0xBC3C, 0x9366, 0xBC3D, 0x9367, 0xBC3E, 0x9368, 0xBC3F, 0x9369, - 0xBC40, 0xB9EC, 0xBC41, 0xB9ED, 0xBC42, 0x936A, 0xBC43, 0xB9EE, - 0xBC44, 0xB9EF, 0xBC45, 0xB9F0, 0xBC46, 0x936B, 0xBC47, 0x936C, - 0xBC48, 0x936D, 0xBC49, 0xB9F1, 0xBC4A, 0x936E, 0xBC4B, 0x936F, - 0xBC4C, 0xB9F2, 0xBC4D, 0xB9F3, 0xBC4E, 0x9370, 0xBC4F, 0x9371, - 0xBC50, 0xB9F4, 0xBC51, 0x9372, 0xBC52, 0x9373, 0xBC53, 0x9374, - 0xBC54, 0x9375, 0xBC55, 0x9376, 0xBC56, 0x9377, 0xBC57, 0x9378, - 0xBC58, 0x9379, 0xBC59, 0x937A, 0xBC5A, 0x9381, 0xBC5B, 0x9382, - 0xBC5C, 0x9383, 0xBC5D, 0xB9F5, 0xBC5E, 0x9384, 0xBC5F, 0x9385, - 0xBC60, 0x9386, 0xBC61, 0x9387, 0xBC62, 0x9388, 0xBC63, 0x9389, - 0xBC64, 0x938A, 0xBC65, 0x938B, 0xBC66, 0x938C, 0xBC67, 0x938D, - 0xBC68, 0x938E, 0xBC69, 0x938F, 0xBC6A, 0x9390, 0xBC6B, 0x9391, - 0xBC6C, 0x9392, 0xBC6D, 0x9393, 0xBC6E, 0x9394, 0xBC6F, 0x9395, - 0xBC70, 0x9396, 0xBC71, 0x9397, 0xBC72, 0x9398, 0xBC73, 0x9399, - 0xBC74, 0x939A, 0xBC75, 0x939B, 0xBC76, 0x939C, 0xBC77, 0x939D, - 0xBC78, 0x939E, 0xBC79, 0x939F, 0xBC7A, 0x93A0, 0xBC7B, 0x93A1, - 0xBC7C, 0x93A2, 0xBC7D, 0x93A3, 0xBC7E, 0x93A4, 0xBC7F, 0x93A5, - 0xBC80, 0x93A6, 0xBC81, 0x93A7, 0xBC82, 0x93A8, 0xBC83, 0x93A9, - 0xBC84, 0xB9F6, 0xBC85, 0xB9F7, 0xBC86, 0x93AA, 0xBC87, 0x93AB, - 0xBC88, 0xB9F8, 0xBC89, 0x93AC, 0xBC8A, 0x93AD, 0xBC8B, 0xB9F9, - 0xBC8C, 0xB9FA, 0xBC8D, 0x93AE, 0xBC8E, 0xB9FB, 0xBC8F, 0x93AF, - 0xBC90, 0x93B0, 0xBC91, 0x93B1, 0xBC92, 0x93B2, 0xBC93, 0x93B3, - 0xBC94, 0xB9FC, 0xBC95, 0xB9FD, 0xBC96, 0x93B4, 0xBC97, 0xB9FE, - 0xBC98, 0x93B5, 0xBC99, 0xBAA1, 0xBC9A, 0xBAA2, 0xBC9B, 0x93B6, - 0xBC9C, 0x93B7, 0xBC9D, 0x93B8, 0xBC9E, 0x93B9, 0xBC9F, 0x93BA, - 0xBCA0, 0xBAA3, 0xBCA1, 0xBAA4, 0xBCA2, 0x93BB, 0xBCA3, 0x93BC, - 0xBCA4, 0xBAA5, 0xBCA5, 0x93BD, 0xBCA6, 0x93BE, 0xBCA7, 0xBAA6, - 0xBCA8, 0xBAA7, 0xBCA9, 0x93BF, 0xBCAA, 0x93C0, 0xBCAB, 0x93C1, - 0xBCAC, 0x93C2, 0xBCAD, 0x93C3, 0xBCAE, 0x93C4, 0xBCAF, 0x93C5, - 0xBCB0, 0xBAA8, 0xBCB1, 0xBAA9, 0xBCB2, 0x93C6, 0xBCB3, 0xBAAA, - 0xBCB4, 0xBAAB, 0xBCB5, 0xBAAC, 0xBCB6, 0x93C7, 0xBCB7, 0x93C8, - 0xBCB8, 0x93C9, 0xBCB9, 0x93CA, 0xBCBA, 0x93CB, 0xBCBB, 0x93CC, - 0xBCBC, 0xBAAD, 0xBCBD, 0xBAAE, 0xBCBE, 0x93CD, 0xBCBF, 0x93CE, - 0xBCC0, 0xBAAF, 0xBCC1, 0x93CF, 0xBCC2, 0x93D0, 0xBCC3, 0x93D1, - 0xBCC4, 0xBAB0, 0xBCC5, 0x93D2, 0xBCC6, 0x93D3, 0xBCC7, 0x93D4, - 0xBCC8, 0x93D5, 0xBCC9, 0x93D6, 0xBCCA, 0x93D7, 0xBCCB, 0x93D8, - 0xBCCC, 0x93D9, 0xBCCD, 0xBAB1, 0xBCCE, 0x93DA, 0xBCCF, 0xBAB2, - 0xBCD0, 0xBAB3, 0xBCD1, 0xBAB4, 0xBCD2, 0x93DB, 0xBCD3, 0x93DC, - 0xBCD4, 0x93DD, 0xBCD5, 0xBAB5, 0xBCD6, 0x93DE, 0xBCD7, 0x93DF, - 0xBCD8, 0xBAB6, 0xBCD9, 0x93E0, 0xBCDA, 0x93E1, 0xBCDB, 0x93E2, - 0xBCDC, 0xBAB7, 0xBCDD, 0x93E3, 0xBCDE, 0x93E4, 0xBCDF, 0x93E5, - 0xBCE0, 0x93E6, 0xBCE1, 0x93E7, 0xBCE2, 0x93E8, 0xBCE3, 0x93E9, - 0xBCE4, 0x93EA, 0xBCE5, 0x93EB, 0xBCE6, 0x93EC, 0xBCE7, 0x93ED, - 0xBCE8, 0x93EE, 0xBCE9, 0x93EF, 0xBCEA, 0x93F0, 0xBCEB, 0x93F1, - 0xBCEC, 0x93F2, 0xBCED, 0x93F3, 0xBCEE, 0x93F4, 0xBCEF, 0x93F5, - 0xBCF0, 0x93F6, 0xBCF1, 0x93F7, 0xBCF2, 0x93F8, 0xBCF3, 0x93F9, - 0xBCF4, 0xBAB8, 0xBCF5, 0xBAB9, 0xBCF6, 0xBABA, 0xBCF7, 0x93FA, - 0xBCF8, 0xBABB, 0xBCF9, 0x93FB, 0xBCFA, 0x93FC, 0xBCFB, 0x93FD, - 0xBCFC, 0xBABC, 0xBCFD, 0x93FE, 0xBCFE, 0x9441, 0xBCFF, 0x9442, - 0xBD00, 0x9443, 0xBD01, 0x9444, 0xBD02, 0x9445, 0xBD03, 0x9446, - 0xBD04, 0xBABD, 0xBD05, 0xBABE, 0xBD06, 0x9447, 0xBD07, 0xBABF, - 0xBD08, 0x9448, 0xBD09, 0xBAC0, 0xBD0A, 0x9449, 0xBD0B, 0x944A, - 0xBD0C, 0x944B, 0xBD0D, 0x944C, 0xBD0E, 0x944D, 0xBD0F, 0x944E, - 0xBD10, 0xBAC1, 0xBD11, 0x944F, 0xBD12, 0x9450, 0xBD13, 0x9451, - 0xBD14, 0xBAC2, 0xBD15, 0x9452, 0xBD16, 0x9453, 0xBD17, 0x9454, - 0xBD18, 0x9455, 0xBD19, 0x9456, 0xBD1A, 0x9457, 0xBD1B, 0x9458, - 0xBD1C, 0x9459, 0xBD1D, 0x945A, 0xBD1E, 0x9461, 0xBD1F, 0x9462, - 0xBD20, 0x9463, 0xBD21, 0x9464, 0xBD22, 0x9465, 0xBD23, 0x9466, - 0xBD24, 0xBAC3, 0xBD25, 0x9467, 0xBD26, 0x9468, 0xBD27, 0x9469, - 0xBD28, 0x946A, 0xBD29, 0x946B, 0xBD2A, 0x946C, 0xBD2B, 0x946D, - 0xBD2C, 0xBAC4, 0xBD2D, 0x946E, 0xBD2E, 0x946F, 0xBD2F, 0x9470, - 0xBD30, 0x9471, 0xBD31, 0x9472, 0xBD32, 0x9473, 0xBD33, 0x9474, - 0xBD34, 0x9475, 0xBD35, 0x9476, 0xBD36, 0x9477, 0xBD37, 0x9478, - 0xBD38, 0x9479, 0xBD39, 0x947A, 0xBD3A, 0x9481, 0xBD3B, 0x9482, - 0xBD3C, 0x9483, 0xBD3D, 0x9484, 0xBD3E, 0x9485, 0xBD3F, 0x9486, - 0xBD40, 0xBAC5, 0xBD41, 0x9487, 0xBD42, 0x9488, 0xBD43, 0x9489, - 0xBD44, 0x948A, 0xBD45, 0x948B, 0xBD46, 0x948C, 0xBD47, 0x948D, - 0xBD48, 0xBAC6, 0xBD49, 0xBAC7, 0xBD4A, 0x948E, 0xBD4B, 0x948F, - 0xBD4C, 0xBAC8, 0xBD4D, 0x9490, 0xBD4E, 0x9491, 0xBD4F, 0x9492, - 0xBD50, 0xBAC9, 0xBD51, 0x9493, 0xBD52, 0x9494, 0xBD53, 0x9495, - 0xBD54, 0x9496, 0xBD55, 0x9497, 0xBD56, 0x9498, 0xBD57, 0x9499, - 0xBD58, 0xBACA, 0xBD59, 0xBACB, 0xBD5A, 0x949A, 0xBD5B, 0x949B, - 0xBD5C, 0x949C, 0xBD5D, 0x949D, 0xBD5E, 0x949E, 0xBD5F, 0x949F, - 0xBD60, 0x94A0, 0xBD61, 0x94A1, 0xBD62, 0x94A2, 0xBD63, 0x94A3, - 0xBD64, 0xBACC, 0xBD65, 0x94A4, 0xBD66, 0x94A5, 0xBD67, 0x94A6, - 0xBD68, 0xBACD, 0xBD69, 0x94A7, 0xBD6A, 0x94A8, 0xBD6B, 0x94A9, - 0xBD6C, 0x94AA, 0xBD6D, 0x94AB, 0xBD6E, 0x94AC, 0xBD6F, 0x94AD, - 0xBD70, 0x94AE, 0xBD71, 0x94AF, 0xBD72, 0x94B0, 0xBD73, 0x94B1, - 0xBD74, 0x94B2, 0xBD75, 0x94B3, 0xBD76, 0x94B4, 0xBD77, 0x94B5, - 0xBD78, 0x94B6, 0xBD79, 0x94B7, 0xBD7A, 0x94B8, 0xBD7B, 0x94B9, - 0xBD7C, 0x94BA, 0xBD7D, 0x94BB, 0xBD7E, 0x94BC, 0xBD7F, 0x94BD, - 0xBD80, 0xBACE, 0xBD81, 0xBACF, 0xBD82, 0x94BE, 0xBD83, 0x94BF, - 0xBD84, 0xBAD0, 0xBD85, 0x94C0, 0xBD86, 0x94C1, 0xBD87, 0xBAD1, - 0xBD88, 0xBAD2, 0xBD89, 0xBAD3, 0xBD8A, 0xBAD4, 0xBD8B, 0x94C2, - 0xBD8C, 0x94C3, 0xBD8D, 0x94C4, 0xBD8E, 0x94C5, 0xBD8F, 0x94C6, - 0xBD90, 0xBAD5, 0xBD91, 0xBAD6, 0xBD92, 0x94C7, 0xBD93, 0xBAD7, - 0xBD94, 0x94C8, 0xBD95, 0xBAD8, 0xBD96, 0x94C9, 0xBD97, 0x94CA, - 0xBD98, 0x94CB, 0xBD99, 0xBAD9, 0xBD9A, 0xBADA, 0xBD9B, 0x94CC, - 0xBD9C, 0xBADB, 0xBD9D, 0x94CD, 0xBD9E, 0x94CE, 0xBD9F, 0x94CF, - 0xBDA0, 0x94D0, 0xBDA1, 0x94D1, 0xBDA2, 0x94D2, 0xBDA3, 0x94D3, - 0xBDA4, 0xBADC, 0xBDA5, 0x94D4, 0xBDA6, 0x94D5, 0xBDA7, 0x94D6, - 0xBDA8, 0x94D7, 0xBDA9, 0x94D8, 0xBDAA, 0x94D9, 0xBDAB, 0x94DA, - 0xBDAC, 0x94DB, 0xBDAD, 0x94DC, 0xBDAE, 0x94DD, 0xBDAF, 0x94DE, - 0xBDB0, 0xBADD, 0xBDB1, 0x94DF, 0xBDB2, 0x94E0, 0xBDB3, 0x94E1, - 0xBDB4, 0x94E2, 0xBDB5, 0x94E3, 0xBDB6, 0x94E4, 0xBDB7, 0x94E5, - 0xBDB8, 0xBADE, 0xBDB9, 0x94E6, 0xBDBA, 0x94E7, 0xBDBB, 0x94E8, - 0xBDBC, 0x94E9, 0xBDBD, 0x94EA, 0xBDBE, 0x94EB, 0xBDBF, 0x94EC, - 0xBDC0, 0x94ED, 0xBDC1, 0x94EE, 0xBDC2, 0x94EF, 0xBDC3, 0x94F0, - 0xBDC4, 0x94F1, 0xBDC5, 0x94F2, 0xBDC6, 0x94F3, 0xBDC7, 0x94F4, - 0xBDC8, 0x94F5, 0xBDC9, 0x94F6, 0xBDCA, 0x94F7, 0xBDCB, 0x94F8, - 0xBDCC, 0x94F9, 0xBDCD, 0x94FA, 0xBDCE, 0x94FB, 0xBDCF, 0x94FC, - 0xBDD0, 0x94FD, 0xBDD1, 0x94FE, 0xBDD2, 0x9541, 0xBDD3, 0x9542, - 0xBDD4, 0xBADF, 0xBDD5, 0xBAE0, 0xBDD6, 0x9543, 0xBDD7, 0x9544, - 0xBDD8, 0xBAE1, 0xBDD9, 0x9545, 0xBDDA, 0x9546, 0xBDDB, 0x9547, - 0xBDDC, 0xBAE2, 0xBDDD, 0x9548, 0xBDDE, 0x9549, 0xBDDF, 0x954A, - 0xBDE0, 0x954B, 0xBDE1, 0x954C, 0xBDE2, 0x954D, 0xBDE3, 0x954E, - 0xBDE4, 0x954F, 0xBDE5, 0x9550, 0xBDE6, 0x9551, 0xBDE7, 0x9552, - 0xBDE8, 0x9553, 0xBDE9, 0xBAE3, 0xBDEA, 0x9554, 0xBDEB, 0x9555, - 0xBDEC, 0x9556, 0xBDED, 0x9557, 0xBDEE, 0x9558, 0xBDEF, 0x9559, - 0xBDF0, 0xBAE4, 0xBDF1, 0x955A, 0xBDF2, 0x9561, 0xBDF3, 0x9562, - 0xBDF4, 0xBAE5, 0xBDF5, 0x9563, 0xBDF6, 0x9564, 0xBDF7, 0x9565, - 0xBDF8, 0xBAE6, 0xBDF9, 0x9566, 0xBDFA, 0x9567, 0xBDFB, 0x9568, - 0xBDFC, 0x9569, 0xBDFD, 0x956A, 0xBDFE, 0x956B, 0xBDFF, 0x956C, - 0xBE00, 0xBAE7, 0xBE01, 0x956D, 0xBE02, 0x956E, 0xBE03, 0xBAE8, - 0xBE04, 0x956F, 0xBE05, 0xBAE9, 0xBE06, 0x9570, 0xBE07, 0x9571, - 0xBE08, 0x9572, 0xBE09, 0x9573, 0xBE0A, 0x9574, 0xBE0B, 0x9575, - 0xBE0C, 0xBAEA, 0xBE0D, 0xBAEB, 0xBE0E, 0x9576, 0xBE0F, 0x9577, - 0xBE10, 0xBAEC, 0xBE11, 0x9578, 0xBE12, 0x9579, 0xBE13, 0x957A, - 0xBE14, 0xBAED, 0xBE15, 0x9581, 0xBE16, 0x9582, 0xBE17, 0x9583, - 0xBE18, 0x9584, 0xBE19, 0x9585, 0xBE1A, 0x9586, 0xBE1B, 0x9587, - 0xBE1C, 0xBAEE, 0xBE1D, 0xBAEF, 0xBE1E, 0x9588, 0xBE1F, 0xBAF0, - 0xBE20, 0x9589, 0xBE21, 0x958A, 0xBE22, 0x958B, 0xBE23, 0x958C, - 0xBE24, 0x958D, 0xBE25, 0x958E, 0xBE26, 0x958F, 0xBE27, 0x9590, - 0xBE28, 0x9591, 0xBE29, 0x9592, 0xBE2A, 0x9593, 0xBE2B, 0x9594, - 0xBE2C, 0x9595, 0xBE2D, 0x9596, 0xBE2E, 0x9597, 0xBE2F, 0x9598, - 0xBE30, 0x9599, 0xBE31, 0x959A, 0xBE32, 0x959B, 0xBE33, 0x959C, - 0xBE34, 0x959D, 0xBE35, 0x959E, 0xBE36, 0x959F, 0xBE37, 0x95A0, - 0xBE38, 0x95A1, 0xBE39, 0x95A2, 0xBE3A, 0x95A3, 0xBE3B, 0x95A4, - 0xBE3C, 0x95A5, 0xBE3D, 0x95A6, 0xBE3E, 0x95A7, 0xBE3F, 0x95A8, - 0xBE40, 0x95A9, 0xBE41, 0x95AA, 0xBE42, 0x95AB, 0xBE43, 0x95AC, - 0xBE44, 0xBAF1, 0xBE45, 0xBAF2, 0xBE46, 0x95AD, 0xBE47, 0x95AE, - 0xBE48, 0xBAF3, 0xBE49, 0x95AF, 0xBE4A, 0x95B0, 0xBE4B, 0x95B1, - 0xBE4C, 0xBAF4, 0xBE4D, 0x95B2, 0xBE4E, 0xBAF5, 0xBE4F, 0x95B3, - 0xBE50, 0x95B4, 0xBE51, 0x95B5, 0xBE52, 0x95B6, 0xBE53, 0x95B7, - 0xBE54, 0xBAF6, 0xBE55, 0xBAF7, 0xBE56, 0x95B8, 0xBE57, 0xBAF8, - 0xBE58, 0x95B9, 0xBE59, 0xBAF9, 0xBE5A, 0xBAFA, 0xBE5B, 0xBAFB, - 0xBE5C, 0x95BA, 0xBE5D, 0x95BB, 0xBE5E, 0x95BC, 0xBE5F, 0x95BD, - 0xBE60, 0xBAFC, 0xBE61, 0xBAFD, 0xBE62, 0x95BE, 0xBE63, 0x95BF, - 0xBE64, 0xBAFE, 0xBE65, 0x95C0, 0xBE66, 0x95C1, 0xBE67, 0x95C2, - 0xBE68, 0xBBA1, 0xBE69, 0x95C3, 0xBE6A, 0xBBA2, 0xBE6B, 0x95C4, - 0xBE6C, 0x95C5, 0xBE6D, 0x95C6, 0xBE6E, 0x95C7, 0xBE6F, 0x95C8, - 0xBE70, 0xBBA3, 0xBE71, 0xBBA4, 0xBE72, 0x95C9, 0xBE73, 0xBBA5, - 0xBE74, 0xBBA6, 0xBE75, 0xBBA7, 0xBE76, 0x95CA, 0xBE77, 0x95CB, - 0xBE78, 0x95CC, 0xBE79, 0x95CD, 0xBE7A, 0x95CE, 0xBE7B, 0xBBA8, - 0xBE7C, 0xBBA9, 0xBE7D, 0xBBAA, 0xBE7E, 0x95CF, 0xBE7F, 0x95D0, - 0xBE80, 0xBBAB, 0xBE81, 0x95D1, 0xBE82, 0x95D2, 0xBE83, 0x95D3, - 0xBE84, 0xBBAC, 0xBE85, 0x95D4, 0xBE86, 0x95D5, 0xBE87, 0x95D6, - 0xBE88, 0x95D7, 0xBE89, 0x95D8, 0xBE8A, 0x95D9, 0xBE8B, 0x95DA, - 0xBE8C, 0xBBAD, 0xBE8D, 0xBBAE, 0xBE8E, 0x95DB, 0xBE8F, 0xBBAF, - 0xBE90, 0xBBB0, 0xBE91, 0xBBB1, 0xBE92, 0x95DC, 0xBE93, 0x95DD, - 0xBE94, 0x95DE, 0xBE95, 0x95DF, 0xBE96, 0x95E0, 0xBE97, 0x95E1, - 0xBE98, 0xBBB2, 0xBE99, 0xBBB3, 0xBE9A, 0x95E2, 0xBE9B, 0x95E3, - 0xBE9C, 0x95E4, 0xBE9D, 0x95E5, 0xBE9E, 0x95E6, 0xBE9F, 0x95E7, - 0xBEA0, 0x95E8, 0xBEA1, 0x95E9, 0xBEA2, 0x95EA, 0xBEA3, 0x95EB, - 0xBEA4, 0x95EC, 0xBEA5, 0x95ED, 0xBEA6, 0x95EE, 0xBEA7, 0x95EF, - 0xBEA8, 0xBBB4, 0xBEA9, 0x95F0, 0xBEAA, 0x95F1, 0xBEAB, 0x95F2, - 0xBEAC, 0x95F3, 0xBEAD, 0x95F4, 0xBEAE, 0x95F5, 0xBEAF, 0x95F6, - 0xBEB0, 0x95F7, 0xBEB1, 0x95F8, 0xBEB2, 0x95F9, 0xBEB3, 0x95FA, - 0xBEB4, 0x95FB, 0xBEB5, 0x95FC, 0xBEB6, 0x95FD, 0xBEB7, 0x95FE, - 0xBEB8, 0x9641, 0xBEB9, 0x9642, 0xBEBA, 0x9643, 0xBEBB, 0x9644, - 0xBEBC, 0x9645, 0xBEBD, 0x9646, 0xBEBE, 0x9647, 0xBEBF, 0x9648, - 0xBEC0, 0x9649, 0xBEC1, 0x964A, 0xBEC2, 0x964B, 0xBEC3, 0x964C, - 0xBEC4, 0x964D, 0xBEC5, 0x964E, 0xBEC6, 0x964F, 0xBEC7, 0x9650, - 0xBEC8, 0x9651, 0xBEC9, 0x9652, 0xBECA, 0x9653, 0xBECB, 0x9654, - 0xBECC, 0x9655, 0xBECD, 0x9656, 0xBECE, 0x9657, 0xBECF, 0x9658, - 0xBED0, 0xBBB5, 0xBED1, 0xBBB6, 0xBED2, 0x9659, 0xBED3, 0x965A, - 0xBED4, 0xBBB7, 0xBED5, 0x9661, 0xBED6, 0x9662, 0xBED7, 0xBBB8, - 0xBED8, 0xBBB9, 0xBED9, 0x9663, 0xBEDA, 0x9664, 0xBEDB, 0x9665, - 0xBEDC, 0x9666, 0xBEDD, 0x9667, 0xBEDE, 0x9668, 0xBEDF, 0x9669, - 0xBEE0, 0xBBBA, 0xBEE1, 0x966A, 0xBEE2, 0x966B, 0xBEE3, 0xBBBB, - 0xBEE4, 0xBBBC, 0xBEE5, 0xBBBD, 0xBEE6, 0x966C, 0xBEE7, 0x966D, - 0xBEE8, 0x966E, 0xBEE9, 0x966F, 0xBEEA, 0x9670, 0xBEEB, 0x9671, - 0xBEEC, 0xBBBE, 0xBEED, 0x9672, 0xBEEE, 0x9673, 0xBEEF, 0x9674, - 0xBEF0, 0x9675, 0xBEF1, 0x9676, 0xBEF2, 0x9677, 0xBEF3, 0x9678, - 0xBEF4, 0x9679, 0xBEF5, 0x967A, 0xBEF6, 0x9681, 0xBEF7, 0x9682, - 0xBEF8, 0x9683, 0xBEF9, 0x9684, 0xBEFA, 0x9685, 0xBEFB, 0x9686, - 0xBEFC, 0x9687, 0xBEFD, 0x9688, 0xBEFE, 0x9689, 0xBEFF, 0x968A, - 0xBF00, 0x968B, 0xBF01, 0xBBBF, 0xBF02, 0x968C, 0xBF03, 0x968D, - 0xBF04, 0x968E, 0xBF05, 0x968F, 0xBF06, 0x9690, 0xBF07, 0x9691, - 0xBF08, 0xBBC0, 0xBF09, 0xBBC1, 0xBF0A, 0x9692, 0xBF0B, 0x9693, - 0xBF0C, 0x9694, 0xBF0D, 0x9695, 0xBF0E, 0x9696, 0xBF0F, 0x9697, - 0xBF10, 0x9698, 0xBF11, 0x9699, 0xBF12, 0x969A, 0xBF13, 0x969B, - 0xBF14, 0x969C, 0xBF15, 0x969D, 0xBF16, 0x969E, 0xBF17, 0x969F, - 0xBF18, 0xBBC2, 0xBF19, 0xBBC3, 0xBF1A, 0x96A0, 0xBF1B, 0xBBC4, - 0xBF1C, 0xBBC5, 0xBF1D, 0xBBC6, 0xBF1E, 0x96A1, 0xBF1F, 0x96A2, - 0xBF20, 0x96A3, 0xBF21, 0x96A4, 0xBF22, 0x96A5, 0xBF23, 0x96A6, - 0xBF24, 0x96A7, 0xBF25, 0x96A8, 0xBF26, 0x96A9, 0xBF27, 0x96AA, - 0xBF28, 0x96AB, 0xBF29, 0x96AC, 0xBF2A, 0x96AD, 0xBF2B, 0x96AE, - 0xBF2C, 0x96AF, 0xBF2D, 0x96B0, 0xBF2E, 0x96B1, 0xBF2F, 0x96B2, - 0xBF30, 0x96B3, 0xBF31, 0x96B4, 0xBF32, 0x96B5, 0xBF33, 0x96B6, - 0xBF34, 0x96B7, 0xBF35, 0x96B8, 0xBF36, 0x96B9, 0xBF37, 0x96BA, - 0xBF38, 0x96BB, 0xBF39, 0x96BC, 0xBF3A, 0x96BD, 0xBF3B, 0x96BE, - 0xBF3C, 0x96BF, 0xBF3D, 0x96C0, 0xBF3E, 0x96C1, 0xBF3F, 0x96C2, - 0xBF40, 0xBBC7, 0xBF41, 0xBBC8, 0xBF42, 0x96C3, 0xBF43, 0x96C4, - 0xBF44, 0xBBC9, 0xBF45, 0x96C5, 0xBF46, 0x96C6, 0xBF47, 0x96C7, - 0xBF48, 0xBBCA, 0xBF49, 0x96C8, 0xBF4A, 0x96C9, 0xBF4B, 0x96CA, - 0xBF4C, 0x96CB, 0xBF4D, 0x96CC, 0xBF4E, 0x96CD, 0xBF4F, 0x96CE, - 0xBF50, 0xBBCB, 0xBF51, 0xBBCC, 0xBF52, 0x96CF, 0xBF53, 0x96D0, - 0xBF54, 0x96D1, 0xBF55, 0xBBCD, 0xBF56, 0x96D2, 0xBF57, 0x96D3, - 0xBF58, 0x96D4, 0xBF59, 0x96D5, 0xBF5A, 0x96D6, 0xBF5B, 0x96D7, - 0xBF5C, 0x96D8, 0xBF5D, 0x96D9, 0xBF5E, 0x96DA, 0xBF5F, 0x96DB, - 0xBF60, 0x96DC, 0xBF61, 0x96DD, 0xBF62, 0x96DE, 0xBF63, 0x96DF, - 0xBF64, 0x96E0, 0xBF65, 0x96E1, 0xBF66, 0x96E2, 0xBF67, 0x96E3, - 0xBF68, 0x96E4, 0xBF69, 0x96E5, 0xBF6A, 0x96E6, 0xBF6B, 0x96E7, - 0xBF6C, 0x96E8, 0xBF6D, 0x96E9, 0xBF6E, 0x96EA, 0xBF6F, 0x96EB, - 0xBF70, 0x96EC, 0xBF71, 0x96ED, 0xBF72, 0x96EE, 0xBF73, 0x96EF, - 0xBF74, 0x96F0, 0xBF75, 0x96F1, 0xBF76, 0x96F2, 0xBF77, 0x96F3, - 0xBF78, 0x96F4, 0xBF79, 0x96F5, 0xBF7A, 0x96F6, 0xBF7B, 0x96F7, - 0xBF7C, 0x96F8, 0xBF7D, 0x96F9, 0xBF7E, 0x96FA, 0xBF7F, 0x96FB, - 0xBF80, 0x96FC, 0xBF81, 0x96FD, 0xBF82, 0x96FE, 0xBF83, 0x9741, - 0xBF84, 0x9742, 0xBF85, 0x9743, 0xBF86, 0x9744, 0xBF87, 0x9745, - 0xBF88, 0x9746, 0xBF89, 0x9747, 0xBF8A, 0x9748, 0xBF8B, 0x9749, - 0xBF8C, 0x974A, 0xBF8D, 0x974B, 0xBF8E, 0x974C, 0xBF8F, 0x974D, - 0xBF90, 0x974E, 0xBF91, 0x974F, 0xBF92, 0x9750, 0xBF93, 0x9751, - 0xBF94, 0xBBCE, 0xBF95, 0x9752, 0xBF96, 0x9753, 0xBF97, 0x9754, - 0xBF98, 0x9755, 0xBF99, 0x9756, 0xBF9A, 0x9757, 0xBF9B, 0x9758, - 0xBF9C, 0x9759, 0xBF9D, 0x975A, 0xBF9E, 0x9761, 0xBF9F, 0x9762, - 0xBFA0, 0x9763, 0xBFA1, 0x9764, 0xBFA2, 0x9765, 0xBFA3, 0x9766, - 0xBFA4, 0x9767, 0xBFA5, 0x9768, 0xBFA6, 0x9769, 0xBFA7, 0x976A, - 0xBFA8, 0x976B, 0xBFA9, 0x976C, 0xBFAA, 0x976D, 0xBFAB, 0x976E, - 0xBFAC, 0x976F, 0xBFAD, 0x9770, 0xBFAE, 0x9771, 0xBFAF, 0x9772, - 0xBFB0, 0xBBCF, 0xBFB1, 0x9773, 0xBFB2, 0x9774, 0xBFB3, 0x9775, - 0xBFB4, 0x9776, 0xBFB5, 0x9777, 0xBFB6, 0x9778, 0xBFB7, 0x9779, - 0xBFB8, 0x977A, 0xBFB9, 0x9781, 0xBFBA, 0x9782, 0xBFBB, 0x9783, - 0xBFBC, 0x9784, 0xBFBD, 0x9785, 0xBFBE, 0x9786, 0xBFBF, 0x9787, - 0xBFC0, 0x9788, 0xBFC1, 0x9789, 0xBFC2, 0x978A, 0xBFC3, 0x978B, - 0xBFC4, 0x978C, 0xBFC5, 0xBBD0, 0xBFC6, 0x978D, 0xBFC7, 0x978E, - 0xBFC8, 0x978F, 0xBFC9, 0x9790, 0xBFCA, 0x9791, 0xBFCB, 0x9792, - 0xBFCC, 0xBBD1, 0xBFCD, 0xBBD2, 0xBFCE, 0x9793, 0xBFCF, 0x9794, - 0xBFD0, 0xBBD3, 0xBFD1, 0x9795, 0xBFD2, 0x9796, 0xBFD3, 0x9797, - 0xBFD4, 0xBBD4, 0xBFD5, 0x9798, 0xBFD6, 0x9799, 0xBFD7, 0x979A, - 0xBFD8, 0x979B, 0xBFD9, 0x979C, 0xBFDA, 0x979D, 0xBFDB, 0x979E, - 0xBFDC, 0xBBD5, 0xBFDD, 0x979F, 0xBFDE, 0x97A0, 0xBFDF, 0xBBD6, - 0xBFE0, 0x97A1, 0xBFE1, 0xBBD7, 0xBFE2, 0x97A2, 0xBFE3, 0x97A3, - 0xBFE4, 0x97A4, 0xBFE5, 0x97A5, 0xBFE6, 0x97A6, 0xBFE7, 0x97A7, - 0xBFE8, 0x97A8, 0xBFE9, 0x97A9, 0xBFEA, 0x97AA, 0xBFEB, 0x97AB, - 0xBFEC, 0x97AC, 0xBFED, 0x97AD, 0xBFEE, 0x97AE, 0xBFEF, 0x97AF, - 0xBFF0, 0x97B0, 0xBFF1, 0x97B1, 0xBFF2, 0x97B2, 0xBFF3, 0x97B3, - 0xBFF4, 0x97B4, 0xBFF5, 0x97B5, 0xBFF6, 0x97B6, 0xBFF7, 0x97B7, - 0xBFF8, 0x97B8, 0xBFF9, 0x97B9, 0xBFFA, 0x97BA, 0xBFFB, 0x97BB, - 0xBFFC, 0x97BC, 0xBFFD, 0x97BD, 0xBFFE, 0x97BE, 0xBFFF, 0x97BF, - 0xC000, 0x97C0, 0xC001, 0x97C1, 0xC002, 0x97C2, 0xC003, 0x97C3, - 0xC004, 0x97C4, 0xC005, 0x97C5, 0xC006, 0x97C6, 0xC007, 0x97C7, - 0xC008, 0x97C8, 0xC009, 0x97C9, 0xC00A, 0x97CA, 0xC00B, 0x97CB, - 0xC00C, 0x97CC, 0xC00D, 0x97CD, 0xC00E, 0x97CE, 0xC00F, 0x97CF, - 0xC010, 0x97D0, 0xC011, 0x97D1, 0xC012, 0x97D2, 0xC013, 0x97D3, - 0xC014, 0x97D4, 0xC015, 0x97D5, 0xC016, 0x97D6, 0xC017, 0x97D7, - 0xC018, 0x97D8, 0xC019, 0x97D9, 0xC01A, 0x97DA, 0xC01B, 0x97DB, - 0xC01C, 0x97DC, 0xC01D, 0x97DD, 0xC01E, 0x97DE, 0xC01F, 0x97DF, - 0xC020, 0x97E0, 0xC021, 0x97E1, 0xC022, 0x97E2, 0xC023, 0x97E3, - 0xC024, 0x97E4, 0xC025, 0x97E5, 0xC026, 0x97E6, 0xC027, 0x97E7, - 0xC028, 0x97E8, 0xC029, 0x97E9, 0xC02A, 0x97EA, 0xC02B, 0x97EB, - 0xC02C, 0x97EC, 0xC02D, 0x97ED, 0xC02E, 0x97EE, 0xC02F, 0x97EF, - 0xC030, 0x97F0, 0xC031, 0x97F1, 0xC032, 0x97F2, 0xC033, 0x97F3, - 0xC034, 0x97F4, 0xC035, 0x97F5, 0xC036, 0x97F6, 0xC037, 0x97F7, - 0xC038, 0x97F8, 0xC039, 0x97F9, 0xC03A, 0x97FA, 0xC03B, 0x97FB, - 0xC03C, 0xBBD8, 0xC03D, 0x97FC, 0xC03E, 0x97FD, 0xC03F, 0x97FE, - 0xC040, 0x9841, 0xC041, 0x9842, 0xC042, 0x9843, 0xC043, 0x9844, - 0xC044, 0x9845, 0xC045, 0x9846, 0xC046, 0x9847, 0xC047, 0x9848, - 0xC048, 0x9849, 0xC049, 0x984A, 0xC04A, 0x984B, 0xC04B, 0x984C, - 0xC04C, 0x984D, 0xC04D, 0x984E, 0xC04E, 0x984F, 0xC04F, 0x9850, - 0xC050, 0x9851, 0xC051, 0xBBD9, 0xC052, 0x9852, 0xC053, 0x9853, - 0xC054, 0x9854, 0xC055, 0x9855, 0xC056, 0x9856, 0xC057, 0x9857, - 0xC058, 0xBBDA, 0xC059, 0x9858, 0xC05A, 0x9859, 0xC05B, 0x985A, - 0xC05C, 0xBBDB, 0xC05D, 0x9861, 0xC05E, 0x9862, 0xC05F, 0x9863, - 0xC060, 0xBBDC, 0xC061, 0x9864, 0xC062, 0x9865, 0xC063, 0x9866, - 0xC064, 0x9867, 0xC065, 0x9868, 0xC066, 0x9869, 0xC067, 0x986A, - 0xC068, 0xBBDD, 0xC069, 0xBBDE, 0xC06A, 0x986B, 0xC06B, 0x986C, - 0xC06C, 0x986D, 0xC06D, 0x986E, 0xC06E, 0x986F, 0xC06F, 0x9870, - 0xC070, 0x9871, 0xC071, 0x9872, 0xC072, 0x9873, 0xC073, 0x9874, - 0xC074, 0x9875, 0xC075, 0x9876, 0xC076, 0x9877, 0xC077, 0x9878, - 0xC078, 0x9879, 0xC079, 0x987A, 0xC07A, 0x9881, 0xC07B, 0x9882, - 0xC07C, 0x9883, 0xC07D, 0x9884, 0xC07E, 0x9885, 0xC07F, 0x9886, - 0xC080, 0x9887, 0xC081, 0x9888, 0xC082, 0x9889, 0xC083, 0x988A, - 0xC084, 0x988B, 0xC085, 0x988C, 0xC086, 0x988D, 0xC087, 0x988E, - 0xC088, 0x988F, 0xC089, 0x9890, 0xC08A, 0x9891, 0xC08B, 0x9892, - 0xC08C, 0x9893, 0xC08D, 0x9894, 0xC08E, 0x9895, 0xC08F, 0x9896, - 0xC090, 0xBBDF, 0xC091, 0xBBE0, 0xC092, 0x9897, 0xC093, 0x9898, - 0xC094, 0xBBE1, 0xC095, 0x9899, 0xC096, 0x989A, 0xC097, 0x989B, - 0xC098, 0xBBE2, 0xC099, 0x989C, 0xC09A, 0x989D, 0xC09B, 0x989E, - 0xC09C, 0x989F, 0xC09D, 0x98A0, 0xC09E, 0x98A1, 0xC09F, 0x98A2, - 0xC0A0, 0xBBE3, 0xC0A1, 0xBBE4, 0xC0A2, 0x98A3, 0xC0A3, 0xBBE5, - 0xC0A4, 0x98A4, 0xC0A5, 0xBBE6, 0xC0A6, 0x98A5, 0xC0A7, 0x98A6, - 0xC0A8, 0x98A7, 0xC0A9, 0x98A8, 0xC0AA, 0x98A9, 0xC0AB, 0x98AA, - 0xC0AC, 0xBBE7, 0xC0AD, 0xBBE8, 0xC0AE, 0x98AB, 0xC0AF, 0xBBE9, - 0xC0B0, 0xBBEA, 0xC0B1, 0x98AC, 0xC0B2, 0x98AD, 0xC0B3, 0xBBEB, - 0xC0B4, 0xBBEC, 0xC0B5, 0xBBED, 0xC0B6, 0xBBEE, 0xC0B7, 0x98AE, - 0xC0B8, 0x98AF, 0xC0B9, 0x98B0, 0xC0BA, 0x98B1, 0xC0BB, 0x98B2, - 0xC0BC, 0xBBEF, 0xC0BD, 0xBBF0, 0xC0BE, 0x98B3, 0xC0BF, 0xBBF1, - 0xC0C0, 0xBBF2, 0xC0C1, 0xBBF3, 0xC0C2, 0x98B4, 0xC0C3, 0x98B5, - 0xC0C4, 0x98B6, 0xC0C5, 0xBBF4, 0xC0C6, 0x98B7, 0xC0C7, 0x98B8, - 0xC0C8, 0xBBF5, 0xC0C9, 0xBBF6, 0xC0CA, 0x98B9, 0xC0CB, 0x98BA, - 0xC0CC, 0xBBF7, 0xC0CD, 0x98BB, 0xC0CE, 0x98BC, 0xC0CF, 0x98BD, - 0xC0D0, 0xBBF8, 0xC0D1, 0x98BE, 0xC0D2, 0x98BF, 0xC0D3, 0x98C0, - 0xC0D4, 0x98C1, 0xC0D5, 0x98C2, 0xC0D6, 0x98C3, 0xC0D7, 0x98C4, - 0xC0D8, 0xBBF9, 0xC0D9, 0xBBFA, 0xC0DA, 0x98C5, 0xC0DB, 0xBBFB, - 0xC0DC, 0xBBFC, 0xC0DD, 0xBBFD, 0xC0DE, 0x98C6, 0xC0DF, 0x98C7, - 0xC0E0, 0x98C8, 0xC0E1, 0x98C9, 0xC0E2, 0x98CA, 0xC0E3, 0x98CB, - 0xC0E4, 0xBBFE, 0xC0E5, 0xBCA1, 0xC0E6, 0x98CC, 0xC0E7, 0x98CD, - 0xC0E8, 0xBCA2, 0xC0E9, 0x98CE, 0xC0EA, 0x98CF, 0xC0EB, 0x98D0, - 0xC0EC, 0xBCA3, 0xC0ED, 0x98D1, 0xC0EE, 0x98D2, 0xC0EF, 0x98D3, - 0xC0F0, 0x98D4, 0xC0F1, 0x98D5, 0xC0F2, 0x98D6, 0xC0F3, 0x98D7, - 0xC0F4, 0xBCA4, 0xC0F5, 0xBCA5, 0xC0F6, 0x98D8, 0xC0F7, 0xBCA6, - 0xC0F8, 0x98D9, 0xC0F9, 0xBCA7, 0xC0FA, 0x98DA, 0xC0FB, 0x98DB, - 0xC0FC, 0x98DC, 0xC0FD, 0x98DD, 0xC0FE, 0x98DE, 0xC0FF, 0x98DF, - 0xC100, 0xBCA8, 0xC101, 0x98E0, 0xC102, 0x98E1, 0xC103, 0x98E2, - 0xC104, 0xBCA9, 0xC105, 0x98E3, 0xC106, 0x98E4, 0xC107, 0x98E5, - 0xC108, 0xBCAA, 0xC109, 0x98E6, 0xC10A, 0x98E7, 0xC10B, 0x98E8, - 0xC10C, 0x98E9, 0xC10D, 0x98EA, 0xC10E, 0x98EB, 0xC10F, 0x98EC, - 0xC110, 0xBCAB, 0xC111, 0x98ED, 0xC112, 0x98EE, 0xC113, 0x98EF, - 0xC114, 0x98F0, 0xC115, 0xBCAC, 0xC116, 0x98F1, 0xC117, 0x98F2, - 0xC118, 0x98F3, 0xC119, 0x98F4, 0xC11A, 0x98F5, 0xC11B, 0x98F6, - 0xC11C, 0xBCAD, 0xC11D, 0xBCAE, 0xC11E, 0xBCAF, 0xC11F, 0xBCB0, - 0xC120, 0xBCB1, 0xC121, 0x98F7, 0xC122, 0x98F8, 0xC123, 0xBCB2, - 0xC124, 0xBCB3, 0xC125, 0x98F9, 0xC126, 0xBCB4, 0xC127, 0xBCB5, - 0xC128, 0x98FA, 0xC129, 0x98FB, 0xC12A, 0x98FC, 0xC12B, 0x98FD, - 0xC12C, 0xBCB6, 0xC12D, 0xBCB7, 0xC12E, 0x98FE, 0xC12F, 0xBCB8, - 0xC130, 0xBCB9, 0xC131, 0xBCBA, 0xC132, 0x9941, 0xC133, 0x9942, - 0xC134, 0x9943, 0xC135, 0x9944, 0xC136, 0xBCBB, 0xC137, 0x9945, - 0xC138, 0xBCBC, 0xC139, 0xBCBD, 0xC13A, 0x9946, 0xC13B, 0x9947, - 0xC13C, 0xBCBE, 0xC13D, 0x9948, 0xC13E, 0x9949, 0xC13F, 0x994A, - 0xC140, 0xBCBF, 0xC141, 0x994B, 0xC142, 0x994C, 0xC143, 0x994D, - 0xC144, 0x994E, 0xC145, 0x994F, 0xC146, 0x9950, 0xC147, 0x9951, - 0xC148, 0xBCC0, 0xC149, 0xBCC1, 0xC14A, 0x9952, 0xC14B, 0xBCC2, - 0xC14C, 0xBCC3, 0xC14D, 0xBCC4, 0xC14E, 0x9953, 0xC14F, 0x9954, - 0xC150, 0x9955, 0xC151, 0x9956, 0xC152, 0x9957, 0xC153, 0x9958, - 0xC154, 0xBCC5, 0xC155, 0xBCC6, 0xC156, 0x9959, 0xC157, 0x995A, - 0xC158, 0xBCC7, 0xC159, 0x9961, 0xC15A, 0x9962, 0xC15B, 0x9963, - 0xC15C, 0xBCC8, 0xC15D, 0x9964, 0xC15E, 0x9965, 0xC15F, 0x9966, - 0xC160, 0x9967, 0xC161, 0x9968, 0xC162, 0x9969, 0xC163, 0x996A, - 0xC164, 0xBCC9, 0xC165, 0xBCCA, 0xC166, 0x996B, 0xC167, 0xBCCB, - 0xC168, 0xBCCC, 0xC169, 0xBCCD, 0xC16A, 0x996C, 0xC16B, 0x996D, - 0xC16C, 0x996E, 0xC16D, 0x996F, 0xC16E, 0x9970, 0xC16F, 0x9971, - 0xC170, 0xBCCE, 0xC171, 0x9972, 0xC172, 0x9973, 0xC173, 0x9974, - 0xC174, 0xBCCF, 0xC175, 0x9975, 0xC176, 0x9976, 0xC177, 0x9977, - 0xC178, 0xBCD0, 0xC179, 0x9978, 0xC17A, 0x9979, 0xC17B, 0x997A, - 0xC17C, 0x9981, 0xC17D, 0x9982, 0xC17E, 0x9983, 0xC17F, 0x9984, - 0xC180, 0x9985, 0xC181, 0x9986, 0xC182, 0x9987, 0xC183, 0x9988, - 0xC184, 0x9989, 0xC185, 0xBCD1, 0xC186, 0x998A, 0xC187, 0x998B, - 0xC188, 0x998C, 0xC189, 0x998D, 0xC18A, 0x998E, 0xC18B, 0x998F, - 0xC18C, 0xBCD2, 0xC18D, 0xBCD3, 0xC18E, 0xBCD4, 0xC18F, 0x9990, - 0xC190, 0xBCD5, 0xC191, 0x9991, 0xC192, 0x9992, 0xC193, 0x9993, - 0xC194, 0xBCD6, 0xC195, 0x9994, 0xC196, 0xBCD7, 0xC197, 0x9995, - 0xC198, 0x9996, 0xC199, 0x9997, 0xC19A, 0x9998, 0xC19B, 0x9999, - 0xC19C, 0xBCD8, 0xC19D, 0xBCD9, 0xC19E, 0x999A, 0xC19F, 0xBCDA, - 0xC1A0, 0x999B, 0xC1A1, 0xBCDB, 0xC1A2, 0x999C, 0xC1A3, 0x999D, - 0xC1A4, 0x999E, 0xC1A5, 0xBCDC, 0xC1A6, 0x999F, 0xC1A7, 0x99A0, - 0xC1A8, 0xBCDD, 0xC1A9, 0xBCDE, 0xC1AA, 0x99A1, 0xC1AB, 0x99A2, - 0xC1AC, 0xBCDF, 0xC1AD, 0x99A3, 0xC1AE, 0x99A4, 0xC1AF, 0x99A5, - 0xC1B0, 0xBCE0, 0xC1B1, 0x99A6, 0xC1B2, 0x99A7, 0xC1B3, 0x99A8, - 0xC1B4, 0x99A9, 0xC1B5, 0x99AA, 0xC1B6, 0x99AB, 0xC1B7, 0x99AC, - 0xC1B8, 0x99AD, 0xC1B9, 0x99AE, 0xC1BA, 0x99AF, 0xC1BB, 0x99B0, - 0xC1BC, 0x99B1, 0xC1BD, 0xBCE1, 0xC1BE, 0x99B2, 0xC1BF, 0x99B3, - 0xC1C0, 0x99B4, 0xC1C1, 0x99B5, 0xC1C2, 0x99B6, 0xC1C3, 0x99B7, - 0xC1C4, 0xBCE2, 0xC1C5, 0x99B8, 0xC1C6, 0x99B9, 0xC1C7, 0x99BA, - 0xC1C8, 0xBCE3, 0xC1C9, 0x99BB, 0xC1CA, 0x99BC, 0xC1CB, 0x99BD, - 0xC1CC, 0xBCE4, 0xC1CD, 0x99BE, 0xC1CE, 0x99BF, 0xC1CF, 0x99C0, - 0xC1D0, 0x99C1, 0xC1D1, 0x99C2, 0xC1D2, 0x99C3, 0xC1D3, 0x99C4, - 0xC1D4, 0xBCE5, 0xC1D5, 0x99C5, 0xC1D6, 0x99C6, 0xC1D7, 0xBCE6, - 0xC1D8, 0xBCE7, 0xC1D9, 0x99C7, 0xC1DA, 0x99C8, 0xC1DB, 0x99C9, - 0xC1DC, 0x99CA, 0xC1DD, 0x99CB, 0xC1DE, 0x99CC, 0xC1DF, 0x99CD, - 0xC1E0, 0xBCE8, 0xC1E1, 0x99CE, 0xC1E2, 0x99CF, 0xC1E3, 0x99D0, - 0xC1E4, 0xBCE9, 0xC1E5, 0x99D1, 0xC1E6, 0x99D2, 0xC1E7, 0x99D3, - 0xC1E8, 0xBCEA, 0xC1E9, 0x99D4, 0xC1EA, 0x99D5, 0xC1EB, 0x99D6, - 0xC1EC, 0x99D7, 0xC1ED, 0x99D8, 0xC1EE, 0x99D9, 0xC1EF, 0x99DA, - 0xC1F0, 0xBCEB, 0xC1F1, 0xBCEC, 0xC1F2, 0x99DB, 0xC1F3, 0xBCED, - 0xC1F4, 0x99DC, 0xC1F5, 0x99DD, 0xC1F6, 0x99DE, 0xC1F7, 0x99DF, - 0xC1F8, 0x99E0, 0xC1F9, 0x99E1, 0xC1FA, 0x99E2, 0xC1FB, 0x99E3, - 0xC1FC, 0xBCEE, 0xC1FD, 0xBCEF, 0xC1FE, 0x99E4, 0xC1FF, 0x99E5, - 0xC200, 0xBCF0, 0xC201, 0x99E6, 0xC202, 0x99E7, 0xC203, 0x99E8, - 0xC204, 0xBCF1, 0xC205, 0x99E9, 0xC206, 0x99EA, 0xC207, 0x99EB, - 0xC208, 0x99EC, 0xC209, 0x99ED, 0xC20A, 0x99EE, 0xC20B, 0x99EF, - 0xC20C, 0xBCF2, 0xC20D, 0xBCF3, 0xC20E, 0x99F0, 0xC20F, 0xBCF4, - 0xC210, 0x99F1, 0xC211, 0xBCF5, 0xC212, 0x99F2, 0xC213, 0x99F3, - 0xC214, 0x99F4, 0xC215, 0x99F5, 0xC216, 0x99F6, 0xC217, 0x99F7, - 0xC218, 0xBCF6, 0xC219, 0xBCF7, 0xC21A, 0x99F8, 0xC21B, 0x99F9, - 0xC21C, 0xBCF8, 0xC21D, 0x99FA, 0xC21E, 0x99FB, 0xC21F, 0xBCF9, - 0xC220, 0xBCFA, 0xC221, 0x99FC, 0xC222, 0x99FD, 0xC223, 0x99FE, - 0xC224, 0x9A41, 0xC225, 0x9A42, 0xC226, 0x9A43, 0xC227, 0x9A44, - 0xC228, 0xBCFB, 0xC229, 0xBCFC, 0xC22A, 0x9A45, 0xC22B, 0xBCFD, - 0xC22C, 0x9A46, 0xC22D, 0xBCFE, 0xC22E, 0x9A47, 0xC22F, 0xBDA1, - 0xC230, 0x9A48, 0xC231, 0xBDA2, 0xC232, 0xBDA3, 0xC233, 0x9A49, - 0xC234, 0xBDA4, 0xC235, 0x9A4A, 0xC236, 0x9A4B, 0xC237, 0x9A4C, - 0xC238, 0x9A4D, 0xC239, 0x9A4E, 0xC23A, 0x9A4F, 0xC23B, 0x9A50, - 0xC23C, 0x9A51, 0xC23D, 0x9A52, 0xC23E, 0x9A53, 0xC23F, 0x9A54, - 0xC240, 0x9A55, 0xC241, 0x9A56, 0xC242, 0x9A57, 0xC243, 0x9A58, - 0xC244, 0x9A59, 0xC245, 0x9A5A, 0xC246, 0x9A61, 0xC247, 0x9A62, - 0xC248, 0xBDA5, 0xC249, 0x9A63, 0xC24A, 0x9A64, 0xC24B, 0x9A65, - 0xC24C, 0x9A66, 0xC24D, 0x9A67, 0xC24E, 0x9A68, 0xC24F, 0x9A69, - 0xC250, 0xBDA6, 0xC251, 0xBDA7, 0xC252, 0x9A6A, 0xC253, 0x9A6B, - 0xC254, 0xBDA8, 0xC255, 0x9A6C, 0xC256, 0x9A6D, 0xC257, 0x9A6E, - 0xC258, 0xBDA9, 0xC259, 0x9A6F, 0xC25A, 0x9A70, 0xC25B, 0x9A71, - 0xC25C, 0x9A72, 0xC25D, 0x9A73, 0xC25E, 0x9A74, 0xC25F, 0x9A75, - 0xC260, 0xBDAA, 0xC261, 0x9A76, 0xC262, 0x9A77, 0xC263, 0x9A78, - 0xC264, 0x9A79, 0xC265, 0xBDAB, 0xC266, 0x9A7A, 0xC267, 0x9A81, - 0xC268, 0x9A82, 0xC269, 0x9A83, 0xC26A, 0x9A84, 0xC26B, 0x9A85, - 0xC26C, 0xBDAC, 0xC26D, 0xBDAD, 0xC26E, 0x9A86, 0xC26F, 0x9A87, - 0xC270, 0xBDAE, 0xC271, 0x9A88, 0xC272, 0x9A89, 0xC273, 0x9A8A, - 0xC274, 0xBDAF, 0xC275, 0x9A8B, 0xC276, 0x9A8C, 0xC277, 0x9A8D, - 0xC278, 0x9A8E, 0xC279, 0x9A8F, 0xC27A, 0x9A90, 0xC27B, 0x9A91, - 0xC27C, 0xBDB0, 0xC27D, 0xBDB1, 0xC27E, 0x9A92, 0xC27F, 0xBDB2, - 0xC280, 0x9A93, 0xC281, 0xBDB3, 0xC282, 0x9A94, 0xC283, 0x9A95, - 0xC284, 0x9A96, 0xC285, 0x9A97, 0xC286, 0x9A98, 0xC287, 0x9A99, - 0xC288, 0xBDB4, 0xC289, 0xBDB5, 0xC28A, 0x9A9A, 0xC28B, 0x9A9B, - 0xC28C, 0x9A9C, 0xC28D, 0x9A9D, 0xC28E, 0x9A9E, 0xC28F, 0x9A9F, - 0xC290, 0xBDB6, 0xC291, 0x9AA0, 0xC292, 0x9AA1, 0xC293, 0x9AA2, - 0xC294, 0x9AA3, 0xC295, 0x9AA4, 0xC296, 0x9AA5, 0xC297, 0x9AA6, - 0xC298, 0xBDB7, 0xC299, 0x9AA7, 0xC29A, 0x9AA8, 0xC29B, 0xBDB8, - 0xC29C, 0x9AA9, 0xC29D, 0xBDB9, 0xC29E, 0x9AAA, 0xC29F, 0x9AAB, - 0xC2A0, 0x9AAC, 0xC2A1, 0x9AAD, 0xC2A2, 0x9AAE, 0xC2A3, 0x9AAF, - 0xC2A4, 0xBDBA, 0xC2A5, 0xBDBB, 0xC2A6, 0x9AB0, 0xC2A7, 0x9AB1, - 0xC2A8, 0xBDBC, 0xC2A9, 0x9AB2, 0xC2AA, 0x9AB3, 0xC2AB, 0x9AB4, - 0xC2AC, 0xBDBD, 0xC2AD, 0xBDBE, 0xC2AE, 0x9AB5, 0xC2AF, 0x9AB6, - 0xC2B0, 0x9AB7, 0xC2B1, 0x9AB8, 0xC2B2, 0x9AB9, 0xC2B3, 0x9ABA, - 0xC2B4, 0xBDBF, 0xC2B5, 0xBDC0, 0xC2B6, 0x9ABB, 0xC2B7, 0xBDC1, - 0xC2B8, 0x9ABC, 0xC2B9, 0xBDC2, 0xC2BA, 0x9ABD, 0xC2BB, 0x9ABE, - 0xC2BC, 0x9ABF, 0xC2BD, 0x9AC0, 0xC2BE, 0x9AC1, 0xC2BF, 0x9AC2, - 0xC2C0, 0x9AC3, 0xC2C1, 0x9AC4, 0xC2C2, 0x9AC5, 0xC2C3, 0x9AC6, - 0xC2C4, 0x9AC7, 0xC2C5, 0x9AC8, 0xC2C6, 0x9AC9, 0xC2C7, 0x9ACA, - 0xC2C8, 0x9ACB, 0xC2C9, 0x9ACC, 0xC2CA, 0x9ACD, 0xC2CB, 0x9ACE, - 0xC2CC, 0x9ACF, 0xC2CD, 0x9AD0, 0xC2CE, 0x9AD1, 0xC2CF, 0x9AD2, - 0xC2D0, 0x9AD3, 0xC2D1, 0x9AD4, 0xC2D2, 0x9AD5, 0xC2D3, 0x9AD6, - 0xC2D4, 0x9AD7, 0xC2D5, 0x9AD8, 0xC2D6, 0x9AD9, 0xC2D7, 0x9ADA, - 0xC2D8, 0x9ADB, 0xC2D9, 0x9ADC, 0xC2DA, 0x9ADD, 0xC2DB, 0x9ADE, - 0xC2DC, 0xBDC3, 0xC2DD, 0xBDC4, 0xC2DE, 0x9ADF, 0xC2DF, 0x9AE0, - 0xC2E0, 0xBDC5, 0xC2E1, 0x9AE1, 0xC2E2, 0x9AE2, 0xC2E3, 0xBDC6, - 0xC2E4, 0xBDC7, 0xC2E5, 0x9AE3, 0xC2E6, 0x9AE4, 0xC2E7, 0x9AE5, - 0xC2E8, 0x9AE6, 0xC2E9, 0x9AE7, 0xC2EA, 0x9AE8, 0xC2EB, 0xBDC8, - 0xC2EC, 0xBDC9, 0xC2ED, 0xBDCA, 0xC2EE, 0x9AE9, 0xC2EF, 0xBDCB, - 0xC2F0, 0x9AEA, 0xC2F1, 0xBDCC, 0xC2F2, 0x9AEB, 0xC2F3, 0x9AEC, - 0xC2F4, 0x9AED, 0xC2F5, 0x9AEE, 0xC2F6, 0xBDCD, 0xC2F7, 0x9AEF, - 0xC2F8, 0xBDCE, 0xC2F9, 0xBDCF, 0xC2FA, 0x9AF0, 0xC2FB, 0xBDD0, - 0xC2FC, 0xBDD1, 0xC2FD, 0x9AF1, 0xC2FE, 0x9AF2, 0xC2FF, 0x9AF3, - 0xC300, 0xBDD2, 0xC301, 0x9AF4, 0xC302, 0x9AF5, 0xC303, 0x9AF6, - 0xC304, 0x9AF7, 0xC305, 0x9AF8, 0xC306, 0x9AF9, 0xC307, 0x9AFA, - 0xC308, 0xBDD3, 0xC309, 0xBDD4, 0xC30A, 0x9AFB, 0xC30B, 0x9AFC, - 0xC30C, 0xBDD5, 0xC30D, 0xBDD6, 0xC30E, 0x9AFD, 0xC30F, 0x9AFE, - 0xC310, 0x9B41, 0xC311, 0x9B42, 0xC312, 0x9B43, 0xC313, 0xBDD7, - 0xC314, 0xBDD8, 0xC315, 0xBDD9, 0xC316, 0x9B44, 0xC317, 0x9B45, - 0xC318, 0xBDDA, 0xC319, 0x9B46, 0xC31A, 0x9B47, 0xC31B, 0x9B48, - 0xC31C, 0xBDDB, 0xC31D, 0x9B49, 0xC31E, 0x9B4A, 0xC31F, 0x9B4B, - 0xC320, 0x9B4C, 0xC321, 0x9B4D, 0xC322, 0x9B4E, 0xC323, 0x9B4F, - 0xC324, 0xBDDC, 0xC325, 0xBDDD, 0xC326, 0x9B50, 0xC327, 0x9B51, - 0xC328, 0xBDDE, 0xC329, 0xBDDF, 0xC32A, 0x9B52, 0xC32B, 0x9B53, - 0xC32C, 0x9B54, 0xC32D, 0x9B55, 0xC32E, 0x9B56, 0xC32F, 0x9B57, - 0xC330, 0x9B58, 0xC331, 0x9B59, 0xC332, 0x9B5A, 0xC333, 0x9B61, - 0xC334, 0x9B62, 0xC335, 0x9B63, 0xC336, 0x9B64, 0xC337, 0x9B65, - 0xC338, 0x9B66, 0xC339, 0x9B67, 0xC33A, 0x9B68, 0xC33B, 0x9B69, - 0xC33C, 0x9B6A, 0xC33D, 0x9B6B, 0xC33E, 0x9B6C, 0xC33F, 0x9B6D, - 0xC340, 0x9B6E, 0xC341, 0x9B6F, 0xC342, 0x9B70, 0xC343, 0x9B71, - 0xC344, 0x9B72, 0xC345, 0xBDE0, 0xC346, 0x9B73, 0xC347, 0x9B74, - 0xC348, 0x9B75, 0xC349, 0x9B76, 0xC34A, 0x9B77, 0xC34B, 0x9B78, - 0xC34C, 0x9B79, 0xC34D, 0x9B7A, 0xC34E, 0x9B81, 0xC34F, 0x9B82, - 0xC350, 0x9B83, 0xC351, 0x9B84, 0xC352, 0x9B85, 0xC353, 0x9B86, - 0xC354, 0x9B87, 0xC355, 0x9B88, 0xC356, 0x9B89, 0xC357, 0x9B8A, - 0xC358, 0x9B8B, 0xC359, 0x9B8C, 0xC35A, 0x9B8D, 0xC35B, 0x9B8E, - 0xC35C, 0x9B8F, 0xC35D, 0x9B90, 0xC35E, 0x9B91, 0xC35F, 0x9B92, - 0xC360, 0x9B93, 0xC361, 0x9B94, 0xC362, 0x9B95, 0xC363, 0x9B96, - 0xC364, 0x9B97, 0xC365, 0x9B98, 0xC366, 0x9B99, 0xC367, 0x9B9A, - 0xC368, 0xBDE1, 0xC369, 0xBDE2, 0xC36A, 0x9B9B, 0xC36B, 0x9B9C, - 0xC36C, 0xBDE3, 0xC36D, 0x9B9D, 0xC36E, 0x9B9E, 0xC36F, 0x9B9F, - 0xC370, 0xBDE4, 0xC371, 0x9BA0, 0xC372, 0xBDE5, 0xC373, 0x9BA1, - 0xC374, 0x9BA2, 0xC375, 0x9BA3, 0xC376, 0x9BA4, 0xC377, 0x9BA5, - 0xC378, 0xBDE6, 0xC379, 0xBDE7, 0xC37A, 0x9BA6, 0xC37B, 0x9BA7, - 0xC37C, 0xBDE8, 0xC37D, 0xBDE9, 0xC37E, 0x9BA8, 0xC37F, 0x9BA9, - 0xC380, 0x9BAA, 0xC381, 0x9BAB, 0xC382, 0x9BAC, 0xC383, 0x9BAD, - 0xC384, 0xBDEA, 0xC385, 0x9BAE, 0xC386, 0x9BAF, 0xC387, 0x9BB0, - 0xC388, 0xBDEB, 0xC389, 0x9BB1, 0xC38A, 0x9BB2, 0xC38B, 0x9BB3, - 0xC38C, 0xBDEC, 0xC38D, 0x9BB4, 0xC38E, 0x9BB5, 0xC38F, 0x9BB6, - 0xC390, 0x9BB7, 0xC391, 0x9BB8, 0xC392, 0x9BB9, 0xC393, 0x9BBA, - 0xC394, 0x9BBB, 0xC395, 0x9BBC, 0xC396, 0x9BBD, 0xC397, 0x9BBE, - 0xC398, 0x9BBF, 0xC399, 0x9BC0, 0xC39A, 0x9BC1, 0xC39B, 0x9BC2, - 0xC39C, 0x9BC3, 0xC39D, 0x9BC4, 0xC39E, 0x9BC5, 0xC39F, 0x9BC6, - 0xC3A0, 0x9BC7, 0xC3A1, 0x9BC8, 0xC3A2, 0x9BC9, 0xC3A3, 0x9BCA, - 0xC3A4, 0x9BCB, 0xC3A5, 0x9BCC, 0xC3A6, 0x9BCD, 0xC3A7, 0x9BCE, - 0xC3A8, 0x9BCF, 0xC3A9, 0x9BD0, 0xC3AA, 0x9BD1, 0xC3AB, 0x9BD2, - 0xC3AC, 0x9BD3, 0xC3AD, 0x9BD4, 0xC3AE, 0x9BD5, 0xC3AF, 0x9BD6, - 0xC3B0, 0x9BD7, 0xC3B1, 0x9BD8, 0xC3B2, 0x9BD9, 0xC3B3, 0x9BDA, - 0xC3B4, 0x9BDB, 0xC3B5, 0x9BDC, 0xC3B6, 0x9BDD, 0xC3B7, 0x9BDE, - 0xC3B8, 0x9BDF, 0xC3B9, 0x9BE0, 0xC3BA, 0x9BE1, 0xC3BB, 0x9BE2, - 0xC3BC, 0x9BE3, 0xC3BD, 0x9BE4, 0xC3BE, 0x9BE5, 0xC3BF, 0x9BE6, - 0xC3C0, 0xBDED, 0xC3C1, 0x9BE7, 0xC3C2, 0x9BE8, 0xC3C3, 0x9BE9, - 0xC3C4, 0x9BEA, 0xC3C5, 0x9BEB, 0xC3C6, 0x9BEC, 0xC3C7, 0x9BED, - 0xC3C8, 0x9BEE, 0xC3C9, 0x9BEF, 0xC3CA, 0x9BF0, 0xC3CB, 0x9BF1, - 0xC3CC, 0x9BF2, 0xC3CD, 0x9BF3, 0xC3CE, 0x9BF4, 0xC3CF, 0x9BF5, - 0xC3D0, 0x9BF6, 0xC3D1, 0x9BF7, 0xC3D2, 0x9BF8, 0xC3D3, 0x9BF9, - 0xC3D4, 0x9BFA, 0xC3D5, 0x9BFB, 0xC3D6, 0x9BFC, 0xC3D7, 0x9BFD, - 0xC3D8, 0xBDEE, 0xC3D9, 0xBDEF, 0xC3DA, 0x9BFE, 0xC3DB, 0x9C41, - 0xC3DC, 0xBDF0, 0xC3DD, 0x9C42, 0xC3DE, 0x9C43, 0xC3DF, 0xBDF1, - 0xC3E0, 0xBDF2, 0xC3E1, 0x9C44, 0xC3E2, 0xBDF3, 0xC3E3, 0x9C45, - 0xC3E4, 0x9C46, 0xC3E5, 0x9C47, 0xC3E6, 0x9C48, 0xC3E7, 0x9C49, - 0xC3E8, 0xBDF4, 0xC3E9, 0xBDF5, 0xC3EA, 0x9C4A, 0xC3EB, 0x9C4B, - 0xC3EC, 0x9C4C, 0xC3ED, 0xBDF6, 0xC3EE, 0x9C4D, 0xC3EF, 0x9C4E, - 0xC3F0, 0x9C4F, 0xC3F1, 0x9C50, 0xC3F2, 0x9C51, 0xC3F3, 0x9C52, - 0xC3F4, 0xBDF7, 0xC3F5, 0xBDF8, 0xC3F6, 0x9C53, 0xC3F7, 0x9C54, - 0xC3F8, 0xBDF9, 0xC3F9, 0x9C55, 0xC3FA, 0x9C56, 0xC3FB, 0x9C57, - 0xC3FC, 0x9C58, 0xC3FD, 0x9C59, 0xC3FE, 0x9C5A, 0xC3FF, 0x9C61, - 0xC400, 0x9C62, 0xC401, 0x9C63, 0xC402, 0x9C64, 0xC403, 0x9C65, - 0xC404, 0x9C66, 0xC405, 0x9C67, 0xC406, 0x9C68, 0xC407, 0x9C69, - 0xC408, 0xBDFA, 0xC409, 0x9C6A, 0xC40A, 0x9C6B, 0xC40B, 0x9C6C, - 0xC40C, 0x9C6D, 0xC40D, 0x9C6E, 0xC40E, 0x9C6F, 0xC40F, 0x9C70, - 0xC410, 0xBDFB, 0xC411, 0x9C71, 0xC412, 0x9C72, 0xC413, 0x9C73, - 0xC414, 0x9C74, 0xC415, 0x9C75, 0xC416, 0x9C76, 0xC417, 0x9C77, - 0xC418, 0x9C78, 0xC419, 0x9C79, 0xC41A, 0x9C7A, 0xC41B, 0x9C81, - 0xC41C, 0x9C82, 0xC41D, 0x9C83, 0xC41E, 0x9C84, 0xC41F, 0x9C85, - 0xC420, 0x9C86, 0xC421, 0x9C87, 0xC422, 0x9C88, 0xC423, 0x9C89, - 0xC424, 0xBDFC, 0xC425, 0x9C8A, 0xC426, 0x9C8B, 0xC427, 0x9C8C, - 0xC428, 0x9C8D, 0xC429, 0x9C8E, 0xC42A, 0x9C8F, 0xC42B, 0x9C90, - 0xC42C, 0xBDFD, 0xC42D, 0x9C91, 0xC42E, 0x9C92, 0xC42F, 0x9C93, - 0xC430, 0xBDFE, 0xC431, 0x9C94, 0xC432, 0x9C95, 0xC433, 0x9C96, - 0xC434, 0xBEA1, 0xC435, 0x9C97, 0xC436, 0x9C98, 0xC437, 0x9C99, - 0xC438, 0x9C9A, 0xC439, 0x9C9B, 0xC43A, 0x9C9C, 0xC43B, 0x9C9D, - 0xC43C, 0xBEA2, 0xC43D, 0xBEA3, 0xC43E, 0x9C9E, 0xC43F, 0x9C9F, - 0xC440, 0x9CA0, 0xC441, 0x9CA1, 0xC442, 0x9CA2, 0xC443, 0x9CA3, - 0xC444, 0x9CA4, 0xC445, 0x9CA5, 0xC446, 0x9CA6, 0xC447, 0x9CA7, - 0xC448, 0xBEA4, 0xC449, 0x9CA8, 0xC44A, 0x9CA9, 0xC44B, 0x9CAA, - 0xC44C, 0x9CAB, 0xC44D, 0x9CAC, 0xC44E, 0x9CAD, 0xC44F, 0x9CAE, - 0xC450, 0x9CAF, 0xC451, 0x9CB0, 0xC452, 0x9CB1, 0xC453, 0x9CB2, - 0xC454, 0x9CB3, 0xC455, 0x9CB4, 0xC456, 0x9CB5, 0xC457, 0x9CB6, - 0xC458, 0x9CB7, 0xC459, 0x9CB8, 0xC45A, 0x9CB9, 0xC45B, 0x9CBA, - 0xC45C, 0x9CBB, 0xC45D, 0x9CBC, 0xC45E, 0x9CBD, 0xC45F, 0x9CBE, - 0xC460, 0x9CBF, 0xC461, 0x9CC0, 0xC462, 0x9CC1, 0xC463, 0x9CC2, - 0xC464, 0xBEA5, 0xC465, 0xBEA6, 0xC466, 0x9CC3, 0xC467, 0x9CC4, - 0xC468, 0xBEA7, 0xC469, 0x9CC5, 0xC46A, 0x9CC6, 0xC46B, 0x9CC7, - 0xC46C, 0xBEA8, 0xC46D, 0x9CC8, 0xC46E, 0x9CC9, 0xC46F, 0x9CCA, - 0xC470, 0x9CCB, 0xC471, 0x9CCC, 0xC472, 0x9CCD, 0xC473, 0x9CCE, - 0xC474, 0xBEA9, 0xC475, 0xBEAA, 0xC476, 0x9CCF, 0xC477, 0x9CD0, - 0xC478, 0x9CD1, 0xC479, 0xBEAB, 0xC47A, 0x9CD2, 0xC47B, 0x9CD3, - 0xC47C, 0x9CD4, 0xC47D, 0x9CD5, 0xC47E, 0x9CD6, 0xC47F, 0x9CD7, - 0xC480, 0xBEAC, 0xC481, 0x9CD8, 0xC482, 0x9CD9, 0xC483, 0x9CDA, - 0xC484, 0x9CDB, 0xC485, 0x9CDC, 0xC486, 0x9CDD, 0xC487, 0x9CDE, - 0xC488, 0x9CDF, 0xC489, 0x9CE0, 0xC48A, 0x9CE1, 0xC48B, 0x9CE2, - 0xC48C, 0x9CE3, 0xC48D, 0x9CE4, 0xC48E, 0x9CE5, 0xC48F, 0x9CE6, - 0xC490, 0x9CE7, 0xC491, 0x9CE8, 0xC492, 0x9CE9, 0xC493, 0x9CEA, - 0xC494, 0xBEAD, 0xC495, 0x9CEB, 0xC496, 0x9CEC, 0xC497, 0x9CED, - 0xC498, 0x9CEE, 0xC499, 0x9CEF, 0xC49A, 0x9CF0, 0xC49B, 0x9CF1, - 0xC49C, 0xBEAE, 0xC49D, 0x9CF2, 0xC49E, 0x9CF3, 0xC49F, 0x9CF4, - 0xC4A0, 0x9CF5, 0xC4A1, 0x9CF6, 0xC4A2, 0x9CF7, 0xC4A3, 0x9CF8, - 0xC4A4, 0x9CF9, 0xC4A5, 0x9CFA, 0xC4A6, 0x9CFB, 0xC4A7, 0x9CFC, - 0xC4A8, 0x9CFD, 0xC4A9, 0x9CFE, 0xC4AA, 0x9D41, 0xC4AB, 0x9D42, - 0xC4AC, 0x9D43, 0xC4AD, 0x9D44, 0xC4AE, 0x9D45, 0xC4AF, 0x9D46, - 0xC4B0, 0x9D47, 0xC4B1, 0x9D48, 0xC4B2, 0x9D49, 0xC4B3, 0x9D4A, - 0xC4B4, 0x9D4B, 0xC4B5, 0x9D4C, 0xC4B6, 0x9D4D, 0xC4B7, 0x9D4E, - 0xC4B8, 0xBEAF, 0xC4B9, 0x9D4F, 0xC4BA, 0x9D50, 0xC4BB, 0x9D51, - 0xC4BC, 0xBEB0, 0xC4BD, 0x9D52, 0xC4BE, 0x9D53, 0xC4BF, 0x9D54, - 0xC4C0, 0x9D55, 0xC4C1, 0x9D56, 0xC4C2, 0x9D57, 0xC4C3, 0x9D58, - 0xC4C4, 0x9D59, 0xC4C5, 0x9D5A, 0xC4C6, 0x9D61, 0xC4C7, 0x9D62, - 0xC4C8, 0x9D63, 0xC4C9, 0x9D64, 0xC4CA, 0x9D65, 0xC4CB, 0x9D66, - 0xC4CC, 0x9D67, 0xC4CD, 0x9D68, 0xC4CE, 0x9D69, 0xC4CF, 0x9D6A, - 0xC4D0, 0x9D6B, 0xC4D1, 0x9D6C, 0xC4D2, 0x9D6D, 0xC4D3, 0x9D6E, - 0xC4D4, 0x9D6F, 0xC4D5, 0x9D70, 0xC4D6, 0x9D71, 0xC4D7, 0x9D72, - 0xC4D8, 0x9D73, 0xC4D9, 0x9D74, 0xC4DA, 0x9D75, 0xC4DB, 0x9D76, - 0xC4DC, 0x9D77, 0xC4DD, 0x9D78, 0xC4DE, 0x9D79, 0xC4DF, 0x9D7A, - 0xC4E0, 0x9D81, 0xC4E1, 0x9D82, 0xC4E2, 0x9D83, 0xC4E3, 0x9D84, - 0xC4E4, 0x9D85, 0xC4E5, 0x9D86, 0xC4E6, 0x9D87, 0xC4E7, 0x9D88, - 0xC4E8, 0x9D89, 0xC4E9, 0xBEB1, 0xC4EA, 0x9D8A, 0xC4EB, 0x9D8B, - 0xC4EC, 0x9D8C, 0xC4ED, 0x9D8D, 0xC4EE, 0x9D8E, 0xC4EF, 0x9D8F, - 0xC4F0, 0xBEB2, 0xC4F1, 0xBEB3, 0xC4F2, 0x9D90, 0xC4F3, 0x9D91, - 0xC4F4, 0xBEB4, 0xC4F5, 0x9D92, 0xC4F6, 0x9D93, 0xC4F7, 0x9D94, - 0xC4F8, 0xBEB5, 0xC4F9, 0x9D95, 0xC4FA, 0xBEB6, 0xC4FB, 0x9D96, - 0xC4FC, 0x9D97, 0xC4FD, 0x9D98, 0xC4FE, 0x9D99, 0xC4FF, 0xBEB7, - 0xC500, 0xBEB8, 0xC501, 0xBEB9, 0xC502, 0x9D9A, 0xC503, 0x9D9B, - 0xC504, 0x9D9C, 0xC505, 0x9D9D, 0xC506, 0x9D9E, 0xC507, 0x9D9F, - 0xC508, 0x9DA0, 0xC509, 0x9DA1, 0xC50A, 0x9DA2, 0xC50B, 0x9DA3, - 0xC50C, 0xBEBA, 0xC50D, 0x9DA4, 0xC50E, 0x9DA5, 0xC50F, 0x9DA6, - 0xC510, 0xBEBB, 0xC511, 0x9DA7, 0xC512, 0x9DA8, 0xC513, 0x9DA9, - 0xC514, 0xBEBC, 0xC515, 0x9DAA, 0xC516, 0x9DAB, 0xC517, 0x9DAC, - 0xC518, 0x9DAD, 0xC519, 0x9DAE, 0xC51A, 0x9DAF, 0xC51B, 0x9DB0, - 0xC51C, 0xBEBD, 0xC51D, 0x9DB1, 0xC51E, 0x9DB2, 0xC51F, 0x9DB3, - 0xC520, 0x9DB4, 0xC521, 0x9DB5, 0xC522, 0x9DB6, 0xC523, 0x9DB7, - 0xC524, 0x9DB8, 0xC525, 0x9DB9, 0xC526, 0x9DBA, 0xC527, 0x9DBB, - 0xC528, 0xBEBE, 0xC529, 0xBEBF, 0xC52A, 0x9DBC, 0xC52B, 0x9DBD, - 0xC52C, 0xBEC0, 0xC52D, 0x9DBE, 0xC52E, 0x9DBF, 0xC52F, 0x9DC0, - 0xC530, 0xBEC1, 0xC531, 0x9DC1, 0xC532, 0x9DC2, 0xC533, 0x9DC3, - 0xC534, 0x9DC4, 0xC535, 0x9DC5, 0xC536, 0x9DC6, 0xC537, 0x9DC7, - 0xC538, 0xBEC2, 0xC539, 0xBEC3, 0xC53A, 0x9DC8, 0xC53B, 0xBEC4, - 0xC53C, 0x9DC9, 0xC53D, 0xBEC5, 0xC53E, 0x9DCA, 0xC53F, 0x9DCB, - 0xC540, 0x9DCC, 0xC541, 0x9DCD, 0xC542, 0x9DCE, 0xC543, 0x9DCF, - 0xC544, 0xBEC6, 0xC545, 0xBEC7, 0xC546, 0x9DD0, 0xC547, 0x9DD1, - 0xC548, 0xBEC8, 0xC549, 0xBEC9, 0xC54A, 0xBECA, 0xC54B, 0x9DD2, - 0xC54C, 0xBECB, 0xC54D, 0xBECC, 0xC54E, 0xBECD, 0xC54F, 0x9DD3, - 0xC550, 0x9DD4, 0xC551, 0x9DD5, 0xC552, 0x9DD6, 0xC553, 0xBECE, - 0xC554, 0xBECF, 0xC555, 0xBED0, 0xC556, 0x9DD7, 0xC557, 0xBED1, - 0xC558, 0xBED2, 0xC559, 0xBED3, 0xC55A, 0x9DD8, 0xC55B, 0x9DD9, - 0xC55C, 0x9DDA, 0xC55D, 0xBED4, 0xC55E, 0xBED5, 0xC55F, 0x9DDB, - 0xC560, 0xBED6, 0xC561, 0xBED7, 0xC562, 0x9DDC, 0xC563, 0x9DDD, - 0xC564, 0xBED8, 0xC565, 0x9DDE, 0xC566, 0x9DDF, 0xC567, 0x9DE0, - 0xC568, 0xBED9, 0xC569, 0x9DE1, 0xC56A, 0x9DE2, 0xC56B, 0x9DE3, - 0xC56C, 0x9DE4, 0xC56D, 0x9DE5, 0xC56E, 0x9DE6, 0xC56F, 0x9DE7, - 0xC570, 0xBEDA, 0xC571, 0xBEDB, 0xC572, 0x9DE8, 0xC573, 0xBEDC, - 0xC574, 0xBEDD, 0xC575, 0xBEDE, 0xC576, 0x9DE9, 0xC577, 0x9DEA, - 0xC578, 0x9DEB, 0xC579, 0x9DEC, 0xC57A, 0x9DED, 0xC57B, 0x9DEE, - 0xC57C, 0xBEDF, 0xC57D, 0xBEE0, 0xC57E, 0x9DEF, 0xC57F, 0x9DF0, - 0xC580, 0xBEE1, 0xC581, 0x9DF1, 0xC582, 0x9DF2, 0xC583, 0x9DF3, - 0xC584, 0xBEE2, 0xC585, 0x9DF4, 0xC586, 0x9DF5, 0xC587, 0xBEE3, - 0xC588, 0x9DF6, 0xC589, 0x9DF7, 0xC58A, 0x9DF8, 0xC58B, 0x9DF9, - 0xC58C, 0xBEE4, 0xC58D, 0xBEE5, 0xC58E, 0x9DFA, 0xC58F, 0xBEE6, - 0xC590, 0x9DFB, 0xC591, 0xBEE7, 0xC592, 0x9DFC, 0xC593, 0x9DFD, - 0xC594, 0x9DFE, 0xC595, 0xBEE8, 0xC596, 0x9E41, 0xC597, 0xBEE9, - 0xC598, 0xBEEA, 0xC599, 0x9E42, 0xC59A, 0x9E43, 0xC59B, 0x9E44, - 0xC59C, 0xBEEB, 0xC59D, 0x9E45, 0xC59E, 0x9E46, 0xC59F, 0x9E47, - 0xC5A0, 0xBEEC, 0xC5A1, 0x9E48, 0xC5A2, 0x9E49, 0xC5A3, 0x9E4A, - 0xC5A4, 0x9E4B, 0xC5A5, 0x9E4C, 0xC5A6, 0x9E4D, 0xC5A7, 0x9E4E, - 0xC5A8, 0x9E4F, 0xC5A9, 0xBEED, 0xC5AA, 0x9E50, 0xC5AB, 0x9E51, - 0xC5AC, 0x9E52, 0xC5AD, 0x9E53, 0xC5AE, 0x9E54, 0xC5AF, 0x9E55, - 0xC5B0, 0x9E56, 0xC5B1, 0x9E57, 0xC5B2, 0x9E58, 0xC5B3, 0x9E59, - 0xC5B4, 0xBEEE, 0xC5B5, 0xBEEF, 0xC5B6, 0x9E5A, 0xC5B7, 0x9E61, - 0xC5B8, 0xBEF0, 0xC5B9, 0xBEF1, 0xC5BA, 0x9E62, 0xC5BB, 0xBEF2, - 0xC5BC, 0xBEF3, 0xC5BD, 0xBEF4, 0xC5BE, 0xBEF5, 0xC5BF, 0x9E63, - 0xC5C0, 0x9E64, 0xC5C1, 0x9E65, 0xC5C2, 0x9E66, 0xC5C3, 0x9E67, - 0xC5C4, 0xBEF6, 0xC5C5, 0xBEF7, 0xC5C6, 0xBEF8, 0xC5C7, 0xBEF9, - 0xC5C8, 0xBEFA, 0xC5C9, 0xBEFB, 0xC5CA, 0xBEFC, 0xC5CB, 0x9E68, - 0xC5CC, 0xBEFD, 0xC5CD, 0x9E69, 0xC5CE, 0xBEFE, 0xC5CF, 0x9E6A, - 0xC5D0, 0xBFA1, 0xC5D1, 0xBFA2, 0xC5D2, 0x9E6B, 0xC5D3, 0x9E6C, - 0xC5D4, 0xBFA3, 0xC5D5, 0x9E6D, 0xC5D6, 0x9E6E, 0xC5D7, 0x9E6F, - 0xC5D8, 0xBFA4, 0xC5D9, 0x9E70, 0xC5DA, 0x9E71, 0xC5DB, 0x9E72, - 0xC5DC, 0x9E73, 0xC5DD, 0x9E74, 0xC5DE, 0x9E75, 0xC5DF, 0x9E76, - 0xC5E0, 0xBFA5, 0xC5E1, 0xBFA6, 0xC5E2, 0x9E77, 0xC5E3, 0xBFA7, - 0xC5E4, 0x9E78, 0xC5E5, 0xBFA8, 0xC5E6, 0x9E79, 0xC5E7, 0x9E7A, - 0xC5E8, 0x9E81, 0xC5E9, 0x9E82, 0xC5EA, 0x9E83, 0xC5EB, 0x9E84, - 0xC5EC, 0xBFA9, 0xC5ED, 0xBFAA, 0xC5EE, 0xBFAB, 0xC5EF, 0x9E85, - 0xC5F0, 0xBFAC, 0xC5F1, 0x9E86, 0xC5F2, 0x9E87, 0xC5F3, 0x9E88, - 0xC5F4, 0xBFAD, 0xC5F5, 0x9E89, 0xC5F6, 0xBFAE, 0xC5F7, 0xBFAF, - 0xC5F8, 0x9E8A, 0xC5F9, 0x9E8B, 0xC5FA, 0x9E8C, 0xC5FB, 0x9E8D, - 0xC5FC, 0xBFB0, 0xC5FD, 0xBFB1, 0xC5FE, 0xBFB2, 0xC5FF, 0xBFB3, - 0xC600, 0xBFB4, 0xC601, 0xBFB5, 0xC602, 0x9E8E, 0xC603, 0x9E8F, - 0xC604, 0x9E90, 0xC605, 0xBFB6, 0xC606, 0xBFB7, 0xC607, 0xBFB8, - 0xC608, 0xBFB9, 0xC609, 0x9E91, 0xC60A, 0x9E92, 0xC60B, 0x9E93, - 0xC60C, 0xBFBA, 0xC60D, 0x9E94, 0xC60E, 0x9E95, 0xC60F, 0x9E96, - 0xC610, 0xBFBB, 0xC611, 0x9E97, 0xC612, 0x9E98, 0xC613, 0x9E99, - 0xC614, 0x9E9A, 0xC615, 0x9E9B, 0xC616, 0x9E9C, 0xC617, 0x9E9D, - 0xC618, 0xBFBC, 0xC619, 0xBFBD, 0xC61A, 0x9E9E, 0xC61B, 0xBFBE, - 0xC61C, 0xBFBF, 0xC61D, 0x9E9F, 0xC61E, 0x9EA0, 0xC61F, 0x9EA1, - 0xC620, 0x9EA2, 0xC621, 0x9EA3, 0xC622, 0x9EA4, 0xC623, 0x9EA5, - 0xC624, 0xBFC0, 0xC625, 0xBFC1, 0xC626, 0x9EA6, 0xC627, 0x9EA7, - 0xC628, 0xBFC2, 0xC629, 0x9EA8, 0xC62A, 0x9EA9, 0xC62B, 0x9EAA, - 0xC62C, 0xBFC3, 0xC62D, 0xBFC4, 0xC62E, 0xBFC5, 0xC62F, 0x9EAB, - 0xC630, 0xBFC6, 0xC631, 0x9EAC, 0xC632, 0x9EAD, 0xC633, 0xBFC7, - 0xC634, 0xBFC8, 0xC635, 0xBFC9, 0xC636, 0x9EAE, 0xC637, 0xBFCA, - 0xC638, 0x9EAF, 0xC639, 0xBFCB, 0xC63A, 0x9EB0, 0xC63B, 0xBFCC, - 0xC63C, 0x9EB1, 0xC63D, 0x9EB2, 0xC63E, 0x9EB3, 0xC63F, 0x9EB4, - 0xC640, 0xBFCD, 0xC641, 0xBFCE, 0xC642, 0x9EB5, 0xC643, 0x9EB6, - 0xC644, 0xBFCF, 0xC645, 0x9EB7, 0xC646, 0x9EB8, 0xC647, 0x9EB9, - 0xC648, 0xBFD0, 0xC649, 0x9EBA, 0xC64A, 0x9EBB, 0xC64B, 0x9EBC, - 0xC64C, 0x9EBD, 0xC64D, 0x9EBE, 0xC64E, 0x9EBF, 0xC64F, 0x9EC0, - 0xC650, 0xBFD1, 0xC651, 0xBFD2, 0xC652, 0x9EC1, 0xC653, 0xBFD3, - 0xC654, 0xBFD4, 0xC655, 0xBFD5, 0xC656, 0x9EC2, 0xC657, 0x9EC3, - 0xC658, 0x9EC4, 0xC659, 0x9EC5, 0xC65A, 0x9EC6, 0xC65B, 0x9EC7, - 0xC65C, 0xBFD6, 0xC65D, 0xBFD7, 0xC65E, 0x9EC8, 0xC65F, 0x9EC9, - 0xC660, 0xBFD8, 0xC661, 0x9ECA, 0xC662, 0x9ECB, 0xC663, 0x9ECC, - 0xC664, 0x9ECD, 0xC665, 0x9ECE, 0xC666, 0x9ECF, 0xC667, 0x9ED0, - 0xC668, 0x9ED1, 0xC669, 0x9ED2, 0xC66A, 0x9ED3, 0xC66B, 0x9ED4, - 0xC66C, 0xBFD9, 0xC66D, 0x9ED5, 0xC66E, 0x9ED6, 0xC66F, 0xBFDA, - 0xC670, 0x9ED7, 0xC671, 0xBFDB, 0xC672, 0x9ED8, 0xC673, 0x9ED9, - 0xC674, 0x9EDA, 0xC675, 0x9EDB, 0xC676, 0x9EDC, 0xC677, 0x9EDD, - 0xC678, 0xBFDC, 0xC679, 0xBFDD, 0xC67A, 0x9EDE, 0xC67B, 0x9EDF, - 0xC67C, 0xBFDE, 0xC67D, 0x9EE0, 0xC67E, 0x9EE1, 0xC67F, 0x9EE2, - 0xC680, 0xBFDF, 0xC681, 0x9EE3, 0xC682, 0x9EE4, 0xC683, 0x9EE5, - 0xC684, 0x9EE6, 0xC685, 0x9EE7, 0xC686, 0x9EE8, 0xC687, 0x9EE9, - 0xC688, 0xBFE0, 0xC689, 0xBFE1, 0xC68A, 0x9EEA, 0xC68B, 0xBFE2, - 0xC68C, 0x9EEB, 0xC68D, 0xBFE3, 0xC68E, 0x9EEC, 0xC68F, 0x9EED, - 0xC690, 0x9EEE, 0xC691, 0x9EEF, 0xC692, 0x9EF0, 0xC693, 0x9EF1, - 0xC694, 0xBFE4, 0xC695, 0xBFE5, 0xC696, 0x9EF2, 0xC697, 0x9EF3, - 0xC698, 0xBFE6, 0xC699, 0x9EF4, 0xC69A, 0x9EF5, 0xC69B, 0x9EF6, - 0xC69C, 0xBFE7, 0xC69D, 0x9EF7, 0xC69E, 0x9EF8, 0xC69F, 0x9EF9, - 0xC6A0, 0x9EFA, 0xC6A1, 0x9EFB, 0xC6A2, 0x9EFC, 0xC6A3, 0x9EFD, - 0xC6A4, 0xBFE8, 0xC6A5, 0xBFE9, 0xC6A6, 0x9EFE, 0xC6A7, 0xBFEA, - 0xC6A8, 0x9F41, 0xC6A9, 0xBFEB, 0xC6AA, 0x9F42, 0xC6AB, 0x9F43, - 0xC6AC, 0x9F44, 0xC6AD, 0x9F45, 0xC6AE, 0x9F46, 0xC6AF, 0x9F47, - 0xC6B0, 0xBFEC, 0xC6B1, 0xBFED, 0xC6B2, 0x9F48, 0xC6B3, 0x9F49, - 0xC6B4, 0xBFEE, 0xC6B5, 0x9F4A, 0xC6B6, 0x9F4B, 0xC6B7, 0x9F4C, - 0xC6B8, 0xBFEF, 0xC6B9, 0xBFF0, 0xC6BA, 0xBFF1, 0xC6BB, 0x9F4D, - 0xC6BC, 0x9F4E, 0xC6BD, 0x9F4F, 0xC6BE, 0x9F50, 0xC6BF, 0x9F51, - 0xC6C0, 0xBFF2, 0xC6C1, 0xBFF3, 0xC6C2, 0x9F52, 0xC6C3, 0xBFF4, - 0xC6C4, 0x9F53, 0xC6C5, 0xBFF5, 0xC6C6, 0x9F54, 0xC6C7, 0x9F55, - 0xC6C8, 0x9F56, 0xC6C9, 0x9F57, 0xC6CA, 0x9F58, 0xC6CB, 0x9F59, - 0xC6CC, 0xBFF6, 0xC6CD, 0xBFF7, 0xC6CE, 0x9F5A, 0xC6CF, 0x9F61, - 0xC6D0, 0xBFF8, 0xC6D1, 0x9F62, 0xC6D2, 0x9F63, 0xC6D3, 0x9F64, - 0xC6D4, 0xBFF9, 0xC6D5, 0x9F65, 0xC6D6, 0x9F66, 0xC6D7, 0x9F67, - 0xC6D8, 0x9F68, 0xC6D9, 0x9F69, 0xC6DA, 0x9F6A, 0xC6DB, 0x9F6B, - 0xC6DC, 0xBFFA, 0xC6DD, 0xBFFB, 0xC6DE, 0x9F6C, 0xC6DF, 0x9F6D, - 0xC6E0, 0xBFFC, 0xC6E1, 0xBFFD, 0xC6E2, 0x9F6E, 0xC6E3, 0x9F6F, - 0xC6E4, 0x9F70, 0xC6E5, 0x9F71, 0xC6E6, 0x9F72, 0xC6E7, 0x9F73, - 0xC6E8, 0xBFFE, 0xC6E9, 0xC0A1, 0xC6EA, 0x9F74, 0xC6EB, 0x9F75, - 0xC6EC, 0xC0A2, 0xC6ED, 0x9F76, 0xC6EE, 0x9F77, 0xC6EF, 0x9F78, - 0xC6F0, 0xC0A3, 0xC6F1, 0x9F79, 0xC6F2, 0x9F7A, 0xC6F3, 0x9F81, - 0xC6F4, 0x9F82, 0xC6F5, 0x9F83, 0xC6F6, 0x9F84, 0xC6F7, 0x9F85, - 0xC6F8, 0xC0A4, 0xC6F9, 0xC0A5, 0xC6FA, 0x9F86, 0xC6FB, 0x9F87, - 0xC6FC, 0x9F88, 0xC6FD, 0xC0A6, 0xC6FE, 0x9F89, 0xC6FF, 0x9F8A, - 0xC700, 0x9F8B, 0xC701, 0x9F8C, 0xC702, 0x9F8D, 0xC703, 0x9F8E, - 0xC704, 0xC0A7, 0xC705, 0xC0A8, 0xC706, 0x9F8F, 0xC707, 0x9F90, - 0xC708, 0xC0A9, 0xC709, 0x9F91, 0xC70A, 0x9F92, 0xC70B, 0x9F93, - 0xC70C, 0xC0AA, 0xC70D, 0x9F94, 0xC70E, 0x9F95, 0xC70F, 0x9F96, - 0xC710, 0x9F97, 0xC711, 0x9F98, 0xC712, 0x9F99, 0xC713, 0x9F9A, - 0xC714, 0xC0AB, 0xC715, 0xC0AC, 0xC716, 0x9F9B, 0xC717, 0xC0AD, - 0xC718, 0x9F9C, 0xC719, 0xC0AE, 0xC71A, 0x9F9D, 0xC71B, 0x9F9E, - 0xC71C, 0x9F9F, 0xC71D, 0x9FA0, 0xC71E, 0x9FA1, 0xC71F, 0x9FA2, - 0xC720, 0xC0AF, 0xC721, 0xC0B0, 0xC722, 0x9FA3, 0xC723, 0x9FA4, - 0xC724, 0xC0B1, 0xC725, 0x9FA5, 0xC726, 0x9FA6, 0xC727, 0x9FA7, - 0xC728, 0xC0B2, 0xC729, 0x9FA8, 0xC72A, 0x9FA9, 0xC72B, 0x9FAA, - 0xC72C, 0x9FAB, 0xC72D, 0x9FAC, 0xC72E, 0x9FAD, 0xC72F, 0x9FAE, - 0xC730, 0xC0B3, 0xC731, 0xC0B4, 0xC732, 0x9FAF, 0xC733, 0xC0B5, - 0xC734, 0x9FB0, 0xC735, 0xC0B6, 0xC736, 0x9FB1, 0xC737, 0xC0B7, - 0xC738, 0x9FB2, 0xC739, 0x9FB3, 0xC73A, 0x9FB4, 0xC73B, 0x9FB5, - 0xC73C, 0xC0B8, 0xC73D, 0xC0B9, 0xC73E, 0x9FB6, 0xC73F, 0x9FB7, - 0xC740, 0xC0BA, 0xC741, 0x9FB8, 0xC742, 0x9FB9, 0xC743, 0x9FBA, - 0xC744, 0xC0BB, 0xC745, 0x9FBB, 0xC746, 0x9FBC, 0xC747, 0x9FBD, - 0xC748, 0x9FBE, 0xC749, 0x9FBF, 0xC74A, 0xC0BC, 0xC74B, 0x9FC0, - 0xC74C, 0xC0BD, 0xC74D, 0xC0BE, 0xC74E, 0x9FC1, 0xC74F, 0xC0BF, - 0xC750, 0x9FC2, 0xC751, 0xC0C0, 0xC752, 0xC0C1, 0xC753, 0xC0C2, - 0xC754, 0xC0C3, 0xC755, 0xC0C4, 0xC756, 0xC0C5, 0xC757, 0xC0C6, - 0xC758, 0xC0C7, 0xC759, 0x9FC3, 0xC75A, 0x9FC4, 0xC75B, 0x9FC5, - 0xC75C, 0xC0C8, 0xC75D, 0x9FC6, 0xC75E, 0x9FC7, 0xC75F, 0x9FC8, - 0xC760, 0xC0C9, 0xC761, 0x9FC9, 0xC762, 0x9FCA, 0xC763, 0x9FCB, - 0xC764, 0x9FCC, 0xC765, 0x9FCD, 0xC766, 0x9FCE, 0xC767, 0x9FCF, - 0xC768, 0xC0CA, 0xC769, 0x9FD0, 0xC76A, 0x9FD1, 0xC76B, 0xC0CB, - 0xC76C, 0x9FD2, 0xC76D, 0x9FD3, 0xC76E, 0x9FD4, 0xC76F, 0x9FD5, - 0xC770, 0x9FD6, 0xC771, 0x9FD7, 0xC772, 0x9FD8, 0xC773, 0x9FD9, - 0xC774, 0xC0CC, 0xC775, 0xC0CD, 0xC776, 0x9FDA, 0xC777, 0x9FDB, - 0xC778, 0xC0CE, 0xC779, 0x9FDC, 0xC77A, 0x9FDD, 0xC77B, 0x9FDE, - 0xC77C, 0xC0CF, 0xC77D, 0xC0D0, 0xC77E, 0xC0D1, 0xC77F, 0x9FDF, - 0xC780, 0x9FE0, 0xC781, 0x9FE1, 0xC782, 0x9FE2, 0xC783, 0xC0D2, - 0xC784, 0xC0D3, 0xC785, 0xC0D4, 0xC786, 0x9FE3, 0xC787, 0xC0D5, - 0xC788, 0xC0D6, 0xC789, 0xC0D7, 0xC78A, 0xC0D8, 0xC78B, 0x9FE4, - 0xC78C, 0x9FE5, 0xC78D, 0x9FE6, 0xC78E, 0xC0D9, 0xC78F, 0x9FE7, - 0xC790, 0xC0DA, 0xC791, 0xC0DB, 0xC792, 0x9FE8, 0xC793, 0x9FE9, - 0xC794, 0xC0DC, 0xC795, 0x9FEA, 0xC796, 0xC0DD, 0xC797, 0xC0DE, - 0xC798, 0xC0DF, 0xC799, 0x9FEB, 0xC79A, 0xC0E0, 0xC79B, 0x9FEC, - 0xC79C, 0x9FED, 0xC79D, 0x9FEE, 0xC79E, 0x9FEF, 0xC79F, 0x9FF0, - 0xC7A0, 0xC0E1, 0xC7A1, 0xC0E2, 0xC7A2, 0x9FF1, 0xC7A3, 0xC0E3, - 0xC7A4, 0xC0E4, 0xC7A5, 0xC0E5, 0xC7A6, 0xC0E6, 0xC7A7, 0x9FF2, - 0xC7A8, 0x9FF3, 0xC7A9, 0x9FF4, 0xC7AA, 0x9FF5, 0xC7AB, 0x9FF6, - 0xC7AC, 0xC0E7, 0xC7AD, 0xC0E8, 0xC7AE, 0x9FF7, 0xC7AF, 0x9FF8, - 0xC7B0, 0xC0E9, 0xC7B1, 0x9FF9, 0xC7B2, 0x9FFA, 0xC7B3, 0x9FFB, - 0xC7B4, 0xC0EA, 0xC7B5, 0x9FFC, 0xC7B6, 0x9FFD, 0xC7B7, 0x9FFE, - 0xC7B8, 0xA041, 0xC7B9, 0xA042, 0xC7BA, 0xA043, 0xC7BB, 0xA044, - 0xC7BC, 0xC0EB, 0xC7BD, 0xC0EC, 0xC7BE, 0xA045, 0xC7BF, 0xC0ED, - 0xC7C0, 0xC0EE, 0xC7C1, 0xC0EF, 0xC7C2, 0xA046, 0xC7C3, 0xA047, - 0xC7C4, 0xA048, 0xC7C5, 0xA049, 0xC7C6, 0xA04A, 0xC7C7, 0xA04B, - 0xC7C8, 0xC0F0, 0xC7C9, 0xC0F1, 0xC7CA, 0xA04C, 0xC7CB, 0xA04D, - 0xC7CC, 0xC0F2, 0xC7CD, 0xA04E, 0xC7CE, 0xC0F3, 0xC7CF, 0xA04F, - 0xC7D0, 0xC0F4, 0xC7D1, 0xA050, 0xC7D2, 0xA051, 0xC7D3, 0xA052, - 0xC7D4, 0xA053, 0xC7D5, 0xA054, 0xC7D6, 0xA055, 0xC7D7, 0xA056, - 0xC7D8, 0xC0F5, 0xC7D9, 0xA057, 0xC7DA, 0xA058, 0xC7DB, 0xA059, - 0xC7DC, 0xA05A, 0xC7DD, 0xC0F6, 0xC7DE, 0xA061, 0xC7DF, 0xA062, - 0xC7E0, 0xA063, 0xC7E1, 0xA064, 0xC7E2, 0xA065, 0xC7E3, 0xA066, - 0xC7E4, 0xC0F7, 0xC7E5, 0xA067, 0xC7E6, 0xA068, 0xC7E7, 0xA069, - 0xC7E8, 0xC0F8, 0xC7E9, 0xA06A, 0xC7EA, 0xA06B, 0xC7EB, 0xA06C, - 0xC7EC, 0xC0F9, 0xC7ED, 0xA06D, 0xC7EE, 0xA06E, 0xC7EF, 0xA06F, - 0xC7F0, 0xA070, 0xC7F1, 0xA071, 0xC7F2, 0xA072, 0xC7F3, 0xA073, - 0xC7F4, 0xA074, 0xC7F5, 0xA075, 0xC7F6, 0xA076, 0xC7F7, 0xA077, - 0xC7F8, 0xA078, 0xC7F9, 0xA079, 0xC7FA, 0xA07A, 0xC7FB, 0xA081, - 0xC7FC, 0xA082, 0xC7FD, 0xA083, 0xC7FE, 0xA084, 0xC7FF, 0xA085, - 0xC800, 0xC0FA, 0xC801, 0xC0FB, 0xC802, 0xA086, 0xC803, 0xA087, - 0xC804, 0xC0FC, 0xC805, 0xA088, 0xC806, 0xA089, 0xC807, 0xA08A, - 0xC808, 0xC0FD, 0xC809, 0xA08B, 0xC80A, 0xC0FE, 0xC80B, 0xA08C, - 0xC80C, 0xA08D, 0xC80D, 0xA08E, 0xC80E, 0xA08F, 0xC80F, 0xA090, - 0xC810, 0xC1A1, 0xC811, 0xC1A2, 0xC812, 0xA091, 0xC813, 0xC1A3, - 0xC814, 0xA092, 0xC815, 0xC1A4, 0xC816, 0xC1A5, 0xC817, 0xA093, - 0xC818, 0xA094, 0xC819, 0xA095, 0xC81A, 0xA096, 0xC81B, 0xA097, - 0xC81C, 0xC1A6, 0xC81D, 0xC1A7, 0xC81E, 0xA098, 0xC81F, 0xA099, - 0xC820, 0xC1A8, 0xC821, 0xA09A, 0xC822, 0xA09B, 0xC823, 0xA09C, - 0xC824, 0xC1A9, 0xC825, 0xA09D, 0xC826, 0xA09E, 0xC827, 0xA09F, - 0xC828, 0xA0A0, 0xC829, 0xA0A1, 0xC82A, 0xA0A2, 0xC82B, 0xA0A3, - 0xC82C, 0xC1AA, 0xC82D, 0xC1AB, 0xC82E, 0xA0A4, 0xC82F, 0xC1AC, - 0xC830, 0xA0A5, 0xC831, 0xC1AD, 0xC832, 0xA0A6, 0xC833, 0xA0A7, - 0xC834, 0xA0A8, 0xC835, 0xA0A9, 0xC836, 0xA0AA, 0xC837, 0xA0AB, - 0xC838, 0xC1AE, 0xC839, 0xA0AC, 0xC83A, 0xA0AD, 0xC83B, 0xA0AE, - 0xC83C, 0xC1AF, 0xC83D, 0xA0AF, 0xC83E, 0xA0B0, 0xC83F, 0xA0B1, - 0xC840, 0xC1B0, 0xC841, 0xA0B2, 0xC842, 0xA0B3, 0xC843, 0xA0B4, - 0xC844, 0xA0B5, 0xC845, 0xA0B6, 0xC846, 0xA0B7, 0xC847, 0xA0B8, - 0xC848, 0xC1B1, 0xC849, 0xC1B2, 0xC84A, 0xA0B9, 0xC84B, 0xA0BA, - 0xC84C, 0xC1B3, 0xC84D, 0xC1B4, 0xC84E, 0xA0BB, 0xC84F, 0xA0BC, - 0xC850, 0xA0BD, 0xC851, 0xA0BE, 0xC852, 0xA0BF, 0xC853, 0xA0C0, - 0xC854, 0xC1B5, 0xC855, 0xA0C1, 0xC856, 0xA0C2, 0xC857, 0xA0C3, - 0xC858, 0xA0C4, 0xC859, 0xA0C5, 0xC85A, 0xA0C6, 0xC85B, 0xA0C7, - 0xC85C, 0xA0C8, 0xC85D, 0xA0C9, 0xC85E, 0xA0CA, 0xC85F, 0xA0CB, - 0xC860, 0xA0CC, 0xC861, 0xA0CD, 0xC862, 0xA0CE, 0xC863, 0xA0CF, - 0xC864, 0xA0D0, 0xC865, 0xA0D1, 0xC866, 0xA0D2, 0xC867, 0xA0D3, - 0xC868, 0xA0D4, 0xC869, 0xA0D5, 0xC86A, 0xA0D6, 0xC86B, 0xA0D7, - 0xC86C, 0xA0D8, 0xC86D, 0xA0D9, 0xC86E, 0xA0DA, 0xC86F, 0xA0DB, - 0xC870, 0xC1B6, 0xC871, 0xC1B7, 0xC872, 0xA0DC, 0xC873, 0xA0DD, - 0xC874, 0xC1B8, 0xC875, 0xA0DE, 0xC876, 0xA0DF, 0xC877, 0xA0E0, - 0xC878, 0xC1B9, 0xC879, 0xA0E1, 0xC87A, 0xC1BA, 0xC87B, 0xA0E2, - 0xC87C, 0xA0E3, 0xC87D, 0xA0E4, 0xC87E, 0xA0E5, 0xC87F, 0xA0E6, - 0xC880, 0xC1BB, 0xC881, 0xC1BC, 0xC882, 0xA0E7, 0xC883, 0xC1BD, - 0xC884, 0xA0E8, 0xC885, 0xC1BE, 0xC886, 0xC1BF, 0xC887, 0xC1C0, - 0xC888, 0xA0E9, 0xC889, 0xA0EA, 0xC88A, 0xA0EB, 0xC88B, 0xC1C1, - 0xC88C, 0xC1C2, 0xC88D, 0xC1C3, 0xC88E, 0xA0EC, 0xC88F, 0xA0ED, - 0xC890, 0xA0EE, 0xC891, 0xA0EF, 0xC892, 0xA0F0, 0xC893, 0xA0F1, - 0xC894, 0xC1C4, 0xC895, 0xA0F2, 0xC896, 0xA0F3, 0xC897, 0xA0F4, - 0xC898, 0xA0F5, 0xC899, 0xA0F6, 0xC89A, 0xA0F7, 0xC89B, 0xA0F8, - 0xC89C, 0xA0F9, 0xC89D, 0xC1C5, 0xC89E, 0xA0FA, 0xC89F, 0xC1C6, - 0xC8A0, 0xA0FB, 0xC8A1, 0xC1C7, 0xC8A2, 0xA0FC, 0xC8A3, 0xA0FD, - 0xC8A4, 0xA0FE, 0xC8A5, 0xA141, 0xC8A6, 0xA142, 0xC8A7, 0xA143, - 0xC8A8, 0xC1C8, 0xC8A9, 0xA144, 0xC8AA, 0xA145, 0xC8AB, 0xA146, - 0xC8AC, 0xA147, 0xC8AD, 0xA148, 0xC8AE, 0xA149, 0xC8AF, 0xA14A, - 0xC8B0, 0xA14B, 0xC8B1, 0xA14C, 0xC8B2, 0xA14D, 0xC8B3, 0xA14E, - 0xC8B4, 0xA14F, 0xC8B5, 0xA150, 0xC8B6, 0xA151, 0xC8B7, 0xA152, - 0xC8B8, 0xA153, 0xC8B9, 0xA154, 0xC8BA, 0xA155, 0xC8BB, 0xA156, - 0xC8BC, 0xC1C9, 0xC8BD, 0xC1CA, 0xC8BE, 0xA157, 0xC8BF, 0xA158, - 0xC8C0, 0xA159, 0xC8C1, 0xA15A, 0xC8C2, 0xA161, 0xC8C3, 0xA162, - 0xC8C4, 0xC1CB, 0xC8C5, 0xA163, 0xC8C6, 0xA164, 0xC8C7, 0xA165, - 0xC8C8, 0xC1CC, 0xC8C9, 0xA166, 0xC8CA, 0xA167, 0xC8CB, 0xA168, - 0xC8CC, 0xC1CD, 0xC8CD, 0xA169, 0xC8CE, 0xA16A, 0xC8CF, 0xA16B, - 0xC8D0, 0xA16C, 0xC8D1, 0xA16D, 0xC8D2, 0xA16E, 0xC8D3, 0xA16F, - 0xC8D4, 0xC1CE, 0xC8D5, 0xC1CF, 0xC8D6, 0xA170, 0xC8D7, 0xC1D0, - 0xC8D8, 0xA171, 0xC8D9, 0xC1D1, 0xC8DA, 0xA172, 0xC8DB, 0xA173, - 0xC8DC, 0xA174, 0xC8DD, 0xA175, 0xC8DE, 0xA176, 0xC8DF, 0xA177, - 0xC8E0, 0xC1D2, 0xC8E1, 0xC1D3, 0xC8E2, 0xA178, 0xC8E3, 0xA179, - 0xC8E4, 0xC1D4, 0xC8E5, 0xA17A, 0xC8E6, 0xA181, 0xC8E7, 0xA182, - 0xC8E8, 0xA183, 0xC8E9, 0xA184, 0xC8EA, 0xA185, 0xC8EB, 0xA186, - 0xC8EC, 0xA187, 0xC8ED, 0xA188, 0xC8EE, 0xA189, 0xC8EF, 0xA18A, - 0xC8F0, 0xA18B, 0xC8F1, 0xA18C, 0xC8F2, 0xA18D, 0xC8F3, 0xA18E, - 0xC8F4, 0xA18F, 0xC8F5, 0xC1D5, 0xC8F6, 0xA190, 0xC8F7, 0xA191, - 0xC8F8, 0xA192, 0xC8F9, 0xA193, 0xC8FA, 0xA194, 0xC8FB, 0xA195, - 0xC8FC, 0xC1D6, 0xC8FD, 0xC1D7, 0xC8FE, 0xA196, 0xC8FF, 0xA197, - 0xC900, 0xC1D8, 0xC901, 0xA198, 0xC902, 0xA199, 0xC903, 0xA19A, - 0xC904, 0xC1D9, 0xC905, 0xC1DA, 0xC906, 0xC1DB, 0xC907, 0xA19B, - 0xC908, 0xA19C, 0xC909, 0xA19D, 0xC90A, 0xA19E, 0xC90B, 0xA19F, - 0xC90C, 0xC1DC, 0xC90D, 0xC1DD, 0xC90E, 0xA1A0, 0xC90F, 0xC1DE, - 0xC910, 0xA241, 0xC911, 0xC1DF, 0xC912, 0xA242, 0xC913, 0xA243, - 0xC914, 0xA244, 0xC915, 0xA245, 0xC916, 0xA246, 0xC917, 0xA247, - 0xC918, 0xC1E0, 0xC919, 0xA248, 0xC91A, 0xA249, 0xC91B, 0xA24A, - 0xC91C, 0xA24B, 0xC91D, 0xA24C, 0xC91E, 0xA24D, 0xC91F, 0xA24E, - 0xC920, 0xA24F, 0xC921, 0xA250, 0xC922, 0xA251, 0xC923, 0xA252, - 0xC924, 0xA253, 0xC925, 0xA254, 0xC926, 0xA255, 0xC927, 0xA256, - 0xC928, 0xA257, 0xC929, 0xA258, 0xC92A, 0xA259, 0xC92B, 0xA25A, - 0xC92C, 0xC1E1, 0xC92D, 0xA261, 0xC92E, 0xA262, 0xC92F, 0xA263, - 0xC930, 0xA264, 0xC931, 0xA265, 0xC932, 0xA266, 0xC933, 0xA267, - 0xC934, 0xC1E2, 0xC935, 0xA268, 0xC936, 0xA269, 0xC937, 0xA26A, - 0xC938, 0xA26B, 0xC939, 0xA26C, 0xC93A, 0xA26D, 0xC93B, 0xA26E, - 0xC93C, 0xA26F, 0xC93D, 0xA270, 0xC93E, 0xA271, 0xC93F, 0xA272, - 0xC940, 0xA273, 0xC941, 0xA274, 0xC942, 0xA275, 0xC943, 0xA276, - 0xC944, 0xA277, 0xC945, 0xA278, 0xC946, 0xA279, 0xC947, 0xA27A, - 0xC948, 0xA281, 0xC949, 0xA282, 0xC94A, 0xA283, 0xC94B, 0xA284, - 0xC94C, 0xA285, 0xC94D, 0xA286, 0xC94E, 0xA287, 0xC94F, 0xA288, - 0xC950, 0xC1E3, 0xC951, 0xC1E4, 0xC952, 0xA289, 0xC953, 0xA28A, - 0xC954, 0xC1E5, 0xC955, 0xA28B, 0xC956, 0xA28C, 0xC957, 0xA28D, - 0xC958, 0xC1E6, 0xC959, 0xA28E, 0xC95A, 0xA28F, 0xC95B, 0xA290, - 0xC95C, 0xA291, 0xC95D, 0xA292, 0xC95E, 0xA293, 0xC95F, 0xA294, - 0xC960, 0xC1E7, 0xC961, 0xC1E8, 0xC962, 0xA295, 0xC963, 0xC1E9, - 0xC964, 0xA296, 0xC965, 0xA297, 0xC966, 0xA298, 0xC967, 0xA299, - 0xC968, 0xA29A, 0xC969, 0xA29B, 0xC96A, 0xA29C, 0xC96B, 0xA29D, - 0xC96C, 0xC1EA, 0xC96D, 0xA29E, 0xC96E, 0xA29F, 0xC96F, 0xA2A0, - 0xC970, 0xC1EB, 0xC971, 0xA341, 0xC972, 0xA342, 0xC973, 0xA343, - 0xC974, 0xC1EC, 0xC975, 0xA344, 0xC976, 0xA345, 0xC977, 0xA346, - 0xC978, 0xA347, 0xC979, 0xA348, 0xC97A, 0xA349, 0xC97B, 0xA34A, - 0xC97C, 0xC1ED, 0xC97D, 0xA34B, 0xC97E, 0xA34C, 0xC97F, 0xA34D, - 0xC980, 0xA34E, 0xC981, 0xA34F, 0xC982, 0xA350, 0xC983, 0xA351, - 0xC984, 0xA352, 0xC985, 0xA353, 0xC986, 0xA354, 0xC987, 0xA355, - 0xC988, 0xC1EE, 0xC989, 0xC1EF, 0xC98A, 0xA356, 0xC98B, 0xA357, - 0xC98C, 0xC1F0, 0xC98D, 0xA358, 0xC98E, 0xA359, 0xC98F, 0xA35A, - 0xC990, 0xC1F1, 0xC991, 0xA361, 0xC992, 0xA362, 0xC993, 0xA363, - 0xC994, 0xA364, 0xC995, 0xA365, 0xC996, 0xA366, 0xC997, 0xA367, - 0xC998, 0xC1F2, 0xC999, 0xC1F3, 0xC99A, 0xA368, 0xC99B, 0xC1F4, - 0xC99C, 0xA369, 0xC99D, 0xC1F5, 0xC99E, 0xA36A, 0xC99F, 0xA36B, - 0xC9A0, 0xA36C, 0xC9A1, 0xA36D, 0xC9A2, 0xA36E, 0xC9A3, 0xA36F, - 0xC9A4, 0xA370, 0xC9A5, 0xA371, 0xC9A6, 0xA372, 0xC9A7, 0xA373, - 0xC9A8, 0xA374, 0xC9A9, 0xA375, 0xC9AA, 0xA376, 0xC9AB, 0xA377, - 0xC9AC, 0xA378, 0xC9AD, 0xA379, 0xC9AE, 0xA37A, 0xC9AF, 0xA381, - 0xC9B0, 0xA382, 0xC9B1, 0xA383, 0xC9B2, 0xA384, 0xC9B3, 0xA385, - 0xC9B4, 0xA386, 0xC9B5, 0xA387, 0xC9B6, 0xA388, 0xC9B7, 0xA389, - 0xC9B8, 0xA38A, 0xC9B9, 0xA38B, 0xC9BA, 0xA38C, 0xC9BB, 0xA38D, - 0xC9BC, 0xA38E, 0xC9BD, 0xA38F, 0xC9BE, 0xA390, 0xC9BF, 0xA391, - 0xC9C0, 0xC1F6, 0xC9C1, 0xC1F7, 0xC9C2, 0xA392, 0xC9C3, 0xA393, - 0xC9C4, 0xC1F8, 0xC9C5, 0xA394, 0xC9C6, 0xA395, 0xC9C7, 0xC1F9, - 0xC9C8, 0xC1FA, 0xC9C9, 0xA396, 0xC9CA, 0xC1FB, 0xC9CB, 0xA397, - 0xC9CC, 0xA398, 0xC9CD, 0xA399, 0xC9CE, 0xA39A, 0xC9CF, 0xA39B, - 0xC9D0, 0xC1FC, 0xC9D1, 0xC1FD, 0xC9D2, 0xA39C, 0xC9D3, 0xC1FE, - 0xC9D4, 0xA39D, 0xC9D5, 0xC2A1, 0xC9D6, 0xC2A2, 0xC9D7, 0xA39E, - 0xC9D8, 0xA39F, 0xC9D9, 0xC2A3, 0xC9DA, 0xC2A4, 0xC9DB, 0xA3A0, - 0xC9DC, 0xC2A5, 0xC9DD, 0xC2A6, 0xC9DE, 0xA441, 0xC9DF, 0xA442, - 0xC9E0, 0xC2A7, 0xC9E1, 0xA443, 0xC9E2, 0xC2A8, 0xC9E3, 0xA444, - 0xC9E4, 0xC2A9, 0xC9E5, 0xA445, 0xC9E6, 0xA446, 0xC9E7, 0xC2AA, - 0xC9E8, 0xA447, 0xC9E9, 0xA448, 0xC9EA, 0xA449, 0xC9EB, 0xA44A, - 0xC9EC, 0xC2AB, 0xC9ED, 0xC2AC, 0xC9EE, 0xA44B, 0xC9EF, 0xC2AD, - 0xC9F0, 0xC2AE, 0xC9F1, 0xC2AF, 0xC9F2, 0xA44C, 0xC9F3, 0xA44D, - 0xC9F4, 0xA44E, 0xC9F5, 0xA44F, 0xC9F6, 0xA450, 0xC9F7, 0xA451, - 0xC9F8, 0xC2B0, 0xC9F9, 0xC2B1, 0xC9FA, 0xA452, 0xC9FB, 0xA453, - 0xC9FC, 0xC2B2, 0xC9FD, 0xA454, 0xC9FE, 0xA455, 0xC9FF, 0xA456, - 0xCA00, 0xC2B3, 0xCA01, 0xA457, 0xCA02, 0xA458, 0xCA03, 0xA459, - 0xCA04, 0xA45A, 0xCA05, 0xA461, 0xCA06, 0xA462, 0xCA07, 0xA463, - 0xCA08, 0xC2B4, 0xCA09, 0xC2B5, 0xCA0A, 0xA464, 0xCA0B, 0xC2B6, - 0xCA0C, 0xC2B7, 0xCA0D, 0xC2B8, 0xCA0E, 0xA465, 0xCA0F, 0xA466, - 0xCA10, 0xA467, 0xCA11, 0xA468, 0xCA12, 0xA469, 0xCA13, 0xA46A, - 0xCA14, 0xC2B9, 0xCA15, 0xA46B, 0xCA16, 0xA46C, 0xCA17, 0xA46D, - 0xCA18, 0xC2BA, 0xCA19, 0xA46E, 0xCA1A, 0xA46F, 0xCA1B, 0xA470, - 0xCA1C, 0xA471, 0xCA1D, 0xA472, 0xCA1E, 0xA473, 0xCA1F, 0xA474, - 0xCA20, 0xA475, 0xCA21, 0xA476, 0xCA22, 0xA477, 0xCA23, 0xA478, - 0xCA24, 0xA479, 0xCA25, 0xA47A, 0xCA26, 0xA481, 0xCA27, 0xA482, - 0xCA28, 0xA483, 0xCA29, 0xC2BB, 0xCA2A, 0xA484, 0xCA2B, 0xA485, - 0xCA2C, 0xA486, 0xCA2D, 0xA487, 0xCA2E, 0xA488, 0xCA2F, 0xA489, - 0xCA30, 0xA48A, 0xCA31, 0xA48B, 0xCA32, 0xA48C, 0xCA33, 0xA48D, - 0xCA34, 0xA48E, 0xCA35, 0xA48F, 0xCA36, 0xA490, 0xCA37, 0xA491, - 0xCA38, 0xA492, 0xCA39, 0xA493, 0xCA3A, 0xA494, 0xCA3B, 0xA495, - 0xCA3C, 0xA496, 0xCA3D, 0xA497, 0xCA3E, 0xA498, 0xCA3F, 0xA499, - 0xCA40, 0xA49A, 0xCA41, 0xA49B, 0xCA42, 0xA49C, 0xCA43, 0xA49D, - 0xCA44, 0xA49E, 0xCA45, 0xA49F, 0xCA46, 0xA4A0, 0xCA47, 0xA541, - 0xCA48, 0xA542, 0xCA49, 0xA543, 0xCA4A, 0xA544, 0xCA4B, 0xA545, - 0xCA4C, 0xC2BC, 0xCA4D, 0xC2BD, 0xCA4E, 0xA546, 0xCA4F, 0xA547, - 0xCA50, 0xC2BE, 0xCA51, 0xA548, 0xCA52, 0xA549, 0xCA53, 0xA54A, - 0xCA54, 0xC2BF, 0xCA55, 0xA54B, 0xCA56, 0xA54C, 0xCA57, 0xA54D, - 0xCA58, 0xA54E, 0xCA59, 0xA54F, 0xCA5A, 0xA550, 0xCA5B, 0xA551, - 0xCA5C, 0xC2C0, 0xCA5D, 0xC2C1, 0xCA5E, 0xA552, 0xCA5F, 0xC2C2, - 0xCA60, 0xC2C3, 0xCA61, 0xC2C4, 0xCA62, 0xA553, 0xCA63, 0xA554, - 0xCA64, 0xA555, 0xCA65, 0xA556, 0xCA66, 0xA557, 0xCA67, 0xA558, - 0xCA68, 0xC2C5, 0xCA69, 0xA559, 0xCA6A, 0xA55A, 0xCA6B, 0xA561, - 0xCA6C, 0xA562, 0xCA6D, 0xA563, 0xCA6E, 0xA564, 0xCA6F, 0xA565, - 0xCA70, 0xA566, 0xCA71, 0xA567, 0xCA72, 0xA568, 0xCA73, 0xA569, - 0xCA74, 0xA56A, 0xCA75, 0xA56B, 0xCA76, 0xA56C, 0xCA77, 0xA56D, - 0xCA78, 0xA56E, 0xCA79, 0xA56F, 0xCA7A, 0xA570, 0xCA7B, 0xA571, - 0xCA7C, 0xA572, 0xCA7D, 0xC2C6, 0xCA7E, 0xA573, 0xCA7F, 0xA574, - 0xCA80, 0xA575, 0xCA81, 0xA576, 0xCA82, 0xA577, 0xCA83, 0xA578, - 0xCA84, 0xC2C7, 0xCA85, 0xA579, 0xCA86, 0xA57A, 0xCA87, 0xA581, - 0xCA88, 0xA582, 0xCA89, 0xA583, 0xCA8A, 0xA584, 0xCA8B, 0xA585, - 0xCA8C, 0xA586, 0xCA8D, 0xA587, 0xCA8E, 0xA588, 0xCA8F, 0xA589, - 0xCA90, 0xA58A, 0xCA91, 0xA58B, 0xCA92, 0xA58C, 0xCA93, 0xA58D, - 0xCA94, 0xA58E, 0xCA95, 0xA58F, 0xCA96, 0xA590, 0xCA97, 0xA591, - 0xCA98, 0xC2C8, 0xCA99, 0xA592, 0xCA9A, 0xA593, 0xCA9B, 0xA594, - 0xCA9C, 0xA595, 0xCA9D, 0xA596, 0xCA9E, 0xA597, 0xCA9F, 0xA598, - 0xCAA0, 0xA599, 0xCAA1, 0xA59A, 0xCAA2, 0xA59B, 0xCAA3, 0xA59C, - 0xCAA4, 0xA59D, 0xCAA5, 0xA59E, 0xCAA6, 0xA59F, 0xCAA7, 0xA5A0, - 0xCAA8, 0xA641, 0xCAA9, 0xA642, 0xCAAA, 0xA643, 0xCAAB, 0xA644, - 0xCAAC, 0xA645, 0xCAAD, 0xA646, 0xCAAE, 0xA647, 0xCAAF, 0xA648, - 0xCAB0, 0xA649, 0xCAB1, 0xA64A, 0xCAB2, 0xA64B, 0xCAB3, 0xA64C, - 0xCAB4, 0xA64D, 0xCAB5, 0xA64E, 0xCAB6, 0xA64F, 0xCAB7, 0xA650, - 0xCAB8, 0xA651, 0xCAB9, 0xA652, 0xCABA, 0xA653, 0xCABB, 0xA654, - 0xCABC, 0xC2C9, 0xCABD, 0xC2CA, 0xCABE, 0xA655, 0xCABF, 0xA656, - 0xCAC0, 0xC2CB, 0xCAC1, 0xA657, 0xCAC2, 0xA658, 0xCAC3, 0xA659, - 0xCAC4, 0xC2CC, 0xCAC5, 0xA65A, 0xCAC6, 0xA661, 0xCAC7, 0xA662, - 0xCAC8, 0xA663, 0xCAC9, 0xA664, 0xCACA, 0xA665, 0xCACB, 0xA666, - 0xCACC, 0xC2CD, 0xCACD, 0xC2CE, 0xCACE, 0xA667, 0xCACF, 0xC2CF, - 0xCAD0, 0xA668, 0xCAD1, 0xC2D0, 0xCAD2, 0xA669, 0xCAD3, 0xC2D1, - 0xCAD4, 0xA66A, 0xCAD5, 0xA66B, 0xCAD6, 0xA66C, 0xCAD7, 0xA66D, - 0xCAD8, 0xC2D2, 0xCAD9, 0xC2D3, 0xCADA, 0xA66E, 0xCADB, 0xA66F, - 0xCADC, 0xA670, 0xCADD, 0xA671, 0xCADE, 0xA672, 0xCADF, 0xA673, - 0xCAE0, 0xC2D4, 0xCAE1, 0xA674, 0xCAE2, 0xA675, 0xCAE3, 0xA676, - 0xCAE4, 0xA677, 0xCAE5, 0xA678, 0xCAE6, 0xA679, 0xCAE7, 0xA67A, - 0xCAE8, 0xA681, 0xCAE9, 0xA682, 0xCAEA, 0xA683, 0xCAEB, 0xA684, - 0xCAEC, 0xC2D5, 0xCAED, 0xA685, 0xCAEE, 0xA686, 0xCAEF, 0xA687, - 0xCAF0, 0xA688, 0xCAF1, 0xA689, 0xCAF2, 0xA68A, 0xCAF3, 0xA68B, - 0xCAF4, 0xC2D6, 0xCAF5, 0xA68C, 0xCAF6, 0xA68D, 0xCAF7, 0xA68E, - 0xCAF8, 0xA68F, 0xCAF9, 0xA690, 0xCAFA, 0xA691, 0xCAFB, 0xA692, - 0xCAFC, 0xA693, 0xCAFD, 0xA694, 0xCAFE, 0xA695, 0xCAFF, 0xA696, - 0xCB00, 0xA697, 0xCB01, 0xA698, 0xCB02, 0xA699, 0xCB03, 0xA69A, - 0xCB04, 0xA69B, 0xCB05, 0xA69C, 0xCB06, 0xA69D, 0xCB07, 0xA69E, - 0xCB08, 0xC2D7, 0xCB09, 0xA69F, 0xCB0A, 0xA6A0, 0xCB0B, 0xA741, - 0xCB0C, 0xA742, 0xCB0D, 0xA743, 0xCB0E, 0xA744, 0xCB0F, 0xA745, - 0xCB10, 0xC2D8, 0xCB11, 0xA746, 0xCB12, 0xA747, 0xCB13, 0xA748, - 0xCB14, 0xC2D9, 0xCB15, 0xA749, 0xCB16, 0xA74A, 0xCB17, 0xA74B, - 0xCB18, 0xC2DA, 0xCB19, 0xA74C, 0xCB1A, 0xA74D, 0xCB1B, 0xA74E, - 0xCB1C, 0xA74F, 0xCB1D, 0xA750, 0xCB1E, 0xA751, 0xCB1F, 0xA752, - 0xCB20, 0xC2DB, 0xCB21, 0xC2DC, 0xCB22, 0xA753, 0xCB23, 0xA754, - 0xCB24, 0xA755, 0xCB25, 0xA756, 0xCB26, 0xA757, 0xCB27, 0xA758, - 0xCB28, 0xA759, 0xCB29, 0xA75A, 0xCB2A, 0xA761, 0xCB2B, 0xA762, - 0xCB2C, 0xA763, 0xCB2D, 0xA764, 0xCB2E, 0xA765, 0xCB2F, 0xA766, - 0xCB30, 0xA767, 0xCB31, 0xA768, 0xCB32, 0xA769, 0xCB33, 0xA76A, - 0xCB34, 0xA76B, 0xCB35, 0xA76C, 0xCB36, 0xA76D, 0xCB37, 0xA76E, - 0xCB38, 0xA76F, 0xCB39, 0xA770, 0xCB3A, 0xA771, 0xCB3B, 0xA772, - 0xCB3C, 0xA773, 0xCB3D, 0xA774, 0xCB3E, 0xA775, 0xCB3F, 0xA776, - 0xCB40, 0xA777, 0xCB41, 0xC2DD, 0xCB42, 0xA778, 0xCB43, 0xA779, - 0xCB44, 0xA77A, 0xCB45, 0xA781, 0xCB46, 0xA782, 0xCB47, 0xA783, - 0xCB48, 0xC2DE, 0xCB49, 0xC2DF, 0xCB4A, 0xA784, 0xCB4B, 0xA785, - 0xCB4C, 0xC2E0, 0xCB4D, 0xA786, 0xCB4E, 0xA787, 0xCB4F, 0xA788, - 0xCB50, 0xC2E1, 0xCB51, 0xA789, 0xCB52, 0xA78A, 0xCB53, 0xA78B, - 0xCB54, 0xA78C, 0xCB55, 0xA78D, 0xCB56, 0xA78E, 0xCB57, 0xA78F, - 0xCB58, 0xC2E2, 0xCB59, 0xC2E3, 0xCB5A, 0xA790, 0xCB5B, 0xA791, - 0xCB5C, 0xA792, 0xCB5D, 0xC2E4, 0xCB5E, 0xA793, 0xCB5F, 0xA794, - 0xCB60, 0xA795, 0xCB61, 0xA796, 0xCB62, 0xA797, 0xCB63, 0xA798, - 0xCB64, 0xC2E5, 0xCB65, 0xA799, 0xCB66, 0xA79A, 0xCB67, 0xA79B, - 0xCB68, 0xA79C, 0xCB69, 0xA79D, 0xCB6A, 0xA79E, 0xCB6B, 0xA79F, - 0xCB6C, 0xA7A0, 0xCB6D, 0xA841, 0xCB6E, 0xA842, 0xCB6F, 0xA843, - 0xCB70, 0xA844, 0xCB71, 0xA845, 0xCB72, 0xA846, 0xCB73, 0xA847, - 0xCB74, 0xA848, 0xCB75, 0xA849, 0xCB76, 0xA84A, 0xCB77, 0xA84B, - 0xCB78, 0xC2E6, 0xCB79, 0xC2E7, 0xCB7A, 0xA84C, 0xCB7B, 0xA84D, - 0xCB7C, 0xA84E, 0xCB7D, 0xA84F, 0xCB7E, 0xA850, 0xCB7F, 0xA851, - 0xCB80, 0xA852, 0xCB81, 0xA853, 0xCB82, 0xA854, 0xCB83, 0xA855, - 0xCB84, 0xA856, 0xCB85, 0xA857, 0xCB86, 0xA858, 0xCB87, 0xA859, - 0xCB88, 0xA85A, 0xCB89, 0xA861, 0xCB8A, 0xA862, 0xCB8B, 0xA863, - 0xCB8C, 0xA864, 0xCB8D, 0xA865, 0xCB8E, 0xA866, 0xCB8F, 0xA867, - 0xCB90, 0xA868, 0xCB91, 0xA869, 0xCB92, 0xA86A, 0xCB93, 0xA86B, - 0xCB94, 0xA86C, 0xCB95, 0xA86D, 0xCB96, 0xA86E, 0xCB97, 0xA86F, - 0xCB98, 0xA870, 0xCB99, 0xA871, 0xCB9A, 0xA872, 0xCB9B, 0xA873, - 0xCB9C, 0xC2E8, 0xCB9D, 0xA874, 0xCB9E, 0xA875, 0xCB9F, 0xA876, - 0xCBA0, 0xA877, 0xCBA1, 0xA878, 0xCBA2, 0xA879, 0xCBA3, 0xA87A, - 0xCBA4, 0xA881, 0xCBA5, 0xA882, 0xCBA6, 0xA883, 0xCBA7, 0xA884, - 0xCBA8, 0xA885, 0xCBA9, 0xA886, 0xCBAA, 0xA887, 0xCBAB, 0xA888, - 0xCBAC, 0xA889, 0xCBAD, 0xA88A, 0xCBAE, 0xA88B, 0xCBAF, 0xA88C, - 0xCBB0, 0xA88D, 0xCBB1, 0xA88E, 0xCBB2, 0xA88F, 0xCBB3, 0xA890, - 0xCBB4, 0xA891, 0xCBB5, 0xA892, 0xCBB6, 0xA893, 0xCBB7, 0xA894, - 0xCBB8, 0xC2E9, 0xCBB9, 0xA895, 0xCBBA, 0xA896, 0xCBBB, 0xA897, - 0xCBBC, 0xA898, 0xCBBD, 0xA899, 0xCBBE, 0xA89A, 0xCBBF, 0xA89B, - 0xCBC0, 0xA89C, 0xCBC1, 0xA89D, 0xCBC2, 0xA89E, 0xCBC3, 0xA89F, - 0xCBC4, 0xA8A0, 0xCBC5, 0xA941, 0xCBC6, 0xA942, 0xCBC7, 0xA943, - 0xCBC8, 0xA944, 0xCBC9, 0xA945, 0xCBCA, 0xA946, 0xCBCB, 0xA947, - 0xCBCC, 0xA948, 0xCBCD, 0xA949, 0xCBCE, 0xA94A, 0xCBCF, 0xA94B, - 0xCBD0, 0xA94C, 0xCBD1, 0xA94D, 0xCBD2, 0xA94E, 0xCBD3, 0xA94F, - 0xCBD4, 0xC2EA, 0xCBD5, 0xA950, 0xCBD6, 0xA951, 0xCBD7, 0xA952, - 0xCBD8, 0xA953, 0xCBD9, 0xA954, 0xCBDA, 0xA955, 0xCBDB, 0xA956, - 0xCBDC, 0xA957, 0xCBDD, 0xA958, 0xCBDE, 0xA959, 0xCBDF, 0xA95A, - 0xCBE0, 0xA961, 0xCBE1, 0xA962, 0xCBE2, 0xA963, 0xCBE3, 0xA964, - 0xCBE4, 0xC2EB, 0xCBE5, 0xA965, 0xCBE6, 0xA966, 0xCBE7, 0xC2EC, - 0xCBE8, 0xA967, 0xCBE9, 0xC2ED, 0xCBEA, 0xA968, 0xCBEB, 0xA969, - 0xCBEC, 0xA96A, 0xCBED, 0xA96B, 0xCBEE, 0xA96C, 0xCBEF, 0xA96D, - 0xCBF0, 0xA96E, 0xCBF1, 0xA96F, 0xCBF2, 0xA970, 0xCBF3, 0xA971, - 0xCBF4, 0xA972, 0xCBF5, 0xA973, 0xCBF6, 0xA974, 0xCBF7, 0xA975, - 0xCBF8, 0xA976, 0xCBF9, 0xA977, 0xCBFA, 0xA978, 0xCBFB, 0xA979, - 0xCBFC, 0xA97A, 0xCBFD, 0xA981, 0xCBFE, 0xA982, 0xCBFF, 0xA983, - 0xCC00, 0xA984, 0xCC01, 0xA985, 0xCC02, 0xA986, 0xCC03, 0xA987, - 0xCC04, 0xA988, 0xCC05, 0xA989, 0xCC06, 0xA98A, 0xCC07, 0xA98B, - 0xCC08, 0xA98C, 0xCC09, 0xA98D, 0xCC0A, 0xA98E, 0xCC0B, 0xA98F, - 0xCC0C, 0xC2EE, 0xCC0D, 0xC2EF, 0xCC0E, 0xA990, 0xCC0F, 0xA991, - 0xCC10, 0xC2F0, 0xCC11, 0xA992, 0xCC12, 0xA993, 0xCC13, 0xA994, - 0xCC14, 0xC2F1, 0xCC15, 0xA995, 0xCC16, 0xA996, 0xCC17, 0xA997, - 0xCC18, 0xA998, 0xCC19, 0xA999, 0xCC1A, 0xA99A, 0xCC1B, 0xA99B, - 0xCC1C, 0xC2F2, 0xCC1D, 0xC2F3, 0xCC1E, 0xA99C, 0xCC1F, 0xA99D, - 0xCC20, 0xA99E, 0xCC21, 0xC2F4, 0xCC22, 0xC2F5, 0xCC23, 0xA99F, - 0xCC24, 0xA9A0, 0xCC25, 0xAA41, 0xCC26, 0xAA42, 0xCC27, 0xC2F6, - 0xCC28, 0xC2F7, 0xCC29, 0xC2F8, 0xCC2A, 0xAA43, 0xCC2B, 0xAA44, - 0xCC2C, 0xC2F9, 0xCC2D, 0xAA45, 0xCC2E, 0xC2FA, 0xCC2F, 0xAA46, - 0xCC30, 0xC2FB, 0xCC31, 0xAA47, 0xCC32, 0xAA48, 0xCC33, 0xAA49, - 0xCC34, 0xAA4A, 0xCC35, 0xAA4B, 0xCC36, 0xAA4C, 0xCC37, 0xAA4D, - 0xCC38, 0xC2FC, 0xCC39, 0xC2FD, 0xCC3A, 0xAA4E, 0xCC3B, 0xC2FE, - 0xCC3C, 0xC3A1, 0xCC3D, 0xC3A2, 0xCC3E, 0xC3A3, 0xCC3F, 0xAA4F, - 0xCC40, 0xAA50, 0xCC41, 0xAA51, 0xCC42, 0xAA52, 0xCC43, 0xAA53, - 0xCC44, 0xC3A4, 0xCC45, 0xC3A5, 0xCC46, 0xAA54, 0xCC47, 0xAA55, - 0xCC48, 0xC3A6, 0xCC49, 0xAA56, 0xCC4A, 0xAA57, 0xCC4B, 0xAA58, - 0xCC4C, 0xC3A7, 0xCC4D, 0xAA59, 0xCC4E, 0xAA5A, 0xCC4F, 0xAA61, - 0xCC50, 0xAA62, 0xCC51, 0xAA63, 0xCC52, 0xAA64, 0xCC53, 0xAA65, - 0xCC54, 0xC3A8, 0xCC55, 0xC3A9, 0xCC56, 0xAA66, 0xCC57, 0xC3AA, - 0xCC58, 0xC3AB, 0xCC59, 0xC3AC, 0xCC5A, 0xAA67, 0xCC5B, 0xAA68, - 0xCC5C, 0xAA69, 0xCC5D, 0xAA6A, 0xCC5E, 0xAA6B, 0xCC5F, 0xAA6C, - 0xCC60, 0xC3AD, 0xCC61, 0xAA6D, 0xCC62, 0xAA6E, 0xCC63, 0xAA6F, - 0xCC64, 0xC3AE, 0xCC65, 0xAA70, 0xCC66, 0xC3AF, 0xCC67, 0xAA71, - 0xCC68, 0xC3B0, 0xCC69, 0xAA72, 0xCC6A, 0xAA73, 0xCC6B, 0xAA74, - 0xCC6C, 0xAA75, 0xCC6D, 0xAA76, 0xCC6E, 0xAA77, 0xCC6F, 0xAA78, - 0xCC70, 0xC3B1, 0xCC71, 0xAA79, 0xCC72, 0xAA7A, 0xCC73, 0xAA81, - 0xCC74, 0xAA82, 0xCC75, 0xC3B2, 0xCC76, 0xAA83, 0xCC77, 0xAA84, - 0xCC78, 0xAA85, 0xCC79, 0xAA86, 0xCC7A, 0xAA87, 0xCC7B, 0xAA88, - 0xCC7C, 0xAA89, 0xCC7D, 0xAA8A, 0xCC7E, 0xAA8B, 0xCC7F, 0xAA8C, - 0xCC80, 0xAA8D, 0xCC81, 0xAA8E, 0xCC82, 0xAA8F, 0xCC83, 0xAA90, - 0xCC84, 0xAA91, 0xCC85, 0xAA92, 0xCC86, 0xAA93, 0xCC87, 0xAA94, - 0xCC88, 0xAA95, 0xCC89, 0xAA96, 0xCC8A, 0xAA97, 0xCC8B, 0xAA98, - 0xCC8C, 0xAA99, 0xCC8D, 0xAA9A, 0xCC8E, 0xAA9B, 0xCC8F, 0xAA9C, - 0xCC90, 0xAA9D, 0xCC91, 0xAA9E, 0xCC92, 0xAA9F, 0xCC93, 0xAAA0, - 0xCC94, 0xAB41, 0xCC95, 0xAB42, 0xCC96, 0xAB43, 0xCC97, 0xAB44, - 0xCC98, 0xC3B3, 0xCC99, 0xC3B4, 0xCC9A, 0xAB45, 0xCC9B, 0xAB46, - 0xCC9C, 0xC3B5, 0xCC9D, 0xAB47, 0xCC9E, 0xAB48, 0xCC9F, 0xAB49, - 0xCCA0, 0xC3B6, 0xCCA1, 0xAB4A, 0xCCA2, 0xAB4B, 0xCCA3, 0xAB4C, - 0xCCA4, 0xAB4D, 0xCCA5, 0xAB4E, 0xCCA6, 0xAB4F, 0xCCA7, 0xAB50, - 0xCCA8, 0xC3B7, 0xCCA9, 0xC3B8, 0xCCAA, 0xAB51, 0xCCAB, 0xC3B9, - 0xCCAC, 0xC3BA, 0xCCAD, 0xC3BB, 0xCCAE, 0xAB52, 0xCCAF, 0xAB53, - 0xCCB0, 0xAB54, 0xCCB1, 0xAB55, 0xCCB2, 0xAB56, 0xCCB3, 0xAB57, - 0xCCB4, 0xC3BC, 0xCCB5, 0xC3BD, 0xCCB6, 0xAB58, 0xCCB7, 0xAB59, - 0xCCB8, 0xC3BE, 0xCCB9, 0xAB5A, 0xCCBA, 0xAB61, 0xCCBB, 0xAB62, - 0xCCBC, 0xC3BF, 0xCCBD, 0xAB63, 0xCCBE, 0xAB64, 0xCCBF, 0xAB65, - 0xCCC0, 0xAB66, 0xCCC1, 0xAB67, 0xCCC2, 0xAB68, 0xCCC3, 0xAB69, - 0xCCC4, 0xC3C0, 0xCCC5, 0xC3C1, 0xCCC6, 0xAB6A, 0xCCC7, 0xC3C2, - 0xCCC8, 0xAB6B, 0xCCC9, 0xC3C3, 0xCCCA, 0xAB6C, 0xCCCB, 0xAB6D, - 0xCCCC, 0xAB6E, 0xCCCD, 0xAB6F, 0xCCCE, 0xAB70, 0xCCCF, 0xAB71, - 0xCCD0, 0xC3C4, 0xCCD1, 0xAB72, 0xCCD2, 0xAB73, 0xCCD3, 0xAB74, - 0xCCD4, 0xC3C5, 0xCCD5, 0xAB75, 0xCCD6, 0xAB76, 0xCCD7, 0xAB77, - 0xCCD8, 0xAB78, 0xCCD9, 0xAB79, 0xCCDA, 0xAB7A, 0xCCDB, 0xAB81, - 0xCCDC, 0xAB82, 0xCCDD, 0xAB83, 0xCCDE, 0xAB84, 0xCCDF, 0xAB85, - 0xCCE0, 0xAB86, 0xCCE1, 0xAB87, 0xCCE2, 0xAB88, 0xCCE3, 0xAB89, - 0xCCE4, 0xC3C6, 0xCCE5, 0xAB8A, 0xCCE6, 0xAB8B, 0xCCE7, 0xAB8C, - 0xCCE8, 0xAB8D, 0xCCE9, 0xAB8E, 0xCCEA, 0xAB8F, 0xCCEB, 0xAB90, - 0xCCEC, 0xC3C7, 0xCCED, 0xAB91, 0xCCEE, 0xAB92, 0xCCEF, 0xAB93, - 0xCCF0, 0xC3C8, 0xCCF1, 0xAB94, 0xCCF2, 0xAB95, 0xCCF3, 0xAB96, - 0xCCF4, 0xAB97, 0xCCF5, 0xAB98, 0xCCF6, 0xAB99, 0xCCF7, 0xAB9A, - 0xCCF8, 0xAB9B, 0xCCF9, 0xAB9C, 0xCCFA, 0xAB9D, 0xCCFB, 0xAB9E, - 0xCCFC, 0xAB9F, 0xCCFD, 0xABA0, 0xCCFE, 0xAC41, 0xCCFF, 0xAC42, - 0xCD00, 0xAC43, 0xCD01, 0xC3C9, 0xCD02, 0xAC44, 0xCD03, 0xAC45, - 0xCD04, 0xAC46, 0xCD05, 0xAC47, 0xCD06, 0xAC48, 0xCD07, 0xAC49, - 0xCD08, 0xC3CA, 0xCD09, 0xC3CB, 0xCD0A, 0xAC4A, 0xCD0B, 0xAC4B, - 0xCD0C, 0xC3CC, 0xCD0D, 0xAC4C, 0xCD0E, 0xAC4D, 0xCD0F, 0xAC4E, - 0xCD10, 0xC3CD, 0xCD11, 0xAC4F, 0xCD12, 0xAC50, 0xCD13, 0xAC51, - 0xCD14, 0xAC52, 0xCD15, 0xAC53, 0xCD16, 0xAC54, 0xCD17, 0xAC55, - 0xCD18, 0xC3CE, 0xCD19, 0xC3CF, 0xCD1A, 0xAC56, 0xCD1B, 0xC3D0, - 0xCD1C, 0xAC57, 0xCD1D, 0xC3D1, 0xCD1E, 0xAC58, 0xCD1F, 0xAC59, - 0xCD20, 0xAC5A, 0xCD21, 0xAC61, 0xCD22, 0xAC62, 0xCD23, 0xAC63, - 0xCD24, 0xC3D2, 0xCD25, 0xAC64, 0xCD26, 0xAC65, 0xCD27, 0xAC66, - 0xCD28, 0xC3D3, 0xCD29, 0xAC67, 0xCD2A, 0xAC68, 0xCD2B, 0xAC69, - 0xCD2C, 0xC3D4, 0xCD2D, 0xAC6A, 0xCD2E, 0xAC6B, 0xCD2F, 0xAC6C, - 0xCD30, 0xAC6D, 0xCD31, 0xAC6E, 0xCD32, 0xAC6F, 0xCD33, 0xAC70, - 0xCD34, 0xAC71, 0xCD35, 0xAC72, 0xCD36, 0xAC73, 0xCD37, 0xAC74, - 0xCD38, 0xAC75, 0xCD39, 0xC3D5, 0xCD3A, 0xAC76, 0xCD3B, 0xAC77, - 0xCD3C, 0xAC78, 0xCD3D, 0xAC79, 0xCD3E, 0xAC7A, 0xCD3F, 0xAC81, - 0xCD40, 0xAC82, 0xCD41, 0xAC83, 0xCD42, 0xAC84, 0xCD43, 0xAC85, - 0xCD44, 0xAC86, 0xCD45, 0xAC87, 0xCD46, 0xAC88, 0xCD47, 0xAC89, - 0xCD48, 0xAC8A, 0xCD49, 0xAC8B, 0xCD4A, 0xAC8C, 0xCD4B, 0xAC8D, - 0xCD4C, 0xAC8E, 0xCD4D, 0xAC8F, 0xCD4E, 0xAC90, 0xCD4F, 0xAC91, - 0xCD50, 0xAC92, 0xCD51, 0xAC93, 0xCD52, 0xAC94, 0xCD53, 0xAC95, - 0xCD54, 0xAC96, 0xCD55, 0xAC97, 0xCD56, 0xAC98, 0xCD57, 0xAC99, - 0xCD58, 0xAC9A, 0xCD59, 0xAC9B, 0xCD5A, 0xAC9C, 0xCD5B, 0xAC9D, - 0xCD5C, 0xC3D6, 0xCD5D, 0xAC9E, 0xCD5E, 0xAC9F, 0xCD5F, 0xACA0, - 0xCD60, 0xC3D7, 0xCD61, 0xAD41, 0xCD62, 0xAD42, 0xCD63, 0xAD43, - 0xCD64, 0xC3D8, 0xCD65, 0xAD44, 0xCD66, 0xAD45, 0xCD67, 0xAD46, - 0xCD68, 0xAD47, 0xCD69, 0xAD48, 0xCD6A, 0xAD49, 0xCD6B, 0xAD4A, - 0xCD6C, 0xC3D9, 0xCD6D, 0xC3DA, 0xCD6E, 0xAD4B, 0xCD6F, 0xC3DB, - 0xCD70, 0xAD4C, 0xCD71, 0xC3DC, 0xCD72, 0xAD4D, 0xCD73, 0xAD4E, - 0xCD74, 0xAD4F, 0xCD75, 0xAD50, 0xCD76, 0xAD51, 0xCD77, 0xAD52, - 0xCD78, 0xC3DD, 0xCD79, 0xAD53, 0xCD7A, 0xAD54, 0xCD7B, 0xAD55, - 0xCD7C, 0xAD56, 0xCD7D, 0xAD57, 0xCD7E, 0xAD58, 0xCD7F, 0xAD59, - 0xCD80, 0xAD5A, 0xCD81, 0xAD61, 0xCD82, 0xAD62, 0xCD83, 0xAD63, - 0xCD84, 0xAD64, 0xCD85, 0xAD65, 0xCD86, 0xAD66, 0xCD87, 0xAD67, - 0xCD88, 0xC3DE, 0xCD89, 0xAD68, 0xCD8A, 0xAD69, 0xCD8B, 0xAD6A, - 0xCD8C, 0xAD6B, 0xCD8D, 0xAD6C, 0xCD8E, 0xAD6D, 0xCD8F, 0xAD6E, - 0xCD90, 0xAD6F, 0xCD91, 0xAD70, 0xCD92, 0xAD71, 0xCD93, 0xAD72, - 0xCD94, 0xC3DF, 0xCD95, 0xC3E0, 0xCD96, 0xAD73, 0xCD97, 0xAD74, - 0xCD98, 0xC3E1, 0xCD99, 0xAD75, 0xCD9A, 0xAD76, 0xCD9B, 0xAD77, - 0xCD9C, 0xC3E2, 0xCD9D, 0xAD78, 0xCD9E, 0xAD79, 0xCD9F, 0xAD7A, - 0xCDA0, 0xAD81, 0xCDA1, 0xAD82, 0xCDA2, 0xAD83, 0xCDA3, 0xAD84, - 0xCDA4, 0xC3E3, 0xCDA5, 0xC3E4, 0xCDA6, 0xAD85, 0xCDA7, 0xC3E5, - 0xCDA8, 0xAD86, 0xCDA9, 0xC3E6, 0xCDAA, 0xAD87, 0xCDAB, 0xAD88, - 0xCDAC, 0xAD89, 0xCDAD, 0xAD8A, 0xCDAE, 0xAD8B, 0xCDAF, 0xAD8C, - 0xCDB0, 0xC3E7, 0xCDB1, 0xAD8D, 0xCDB2, 0xAD8E, 0xCDB3, 0xAD8F, - 0xCDB4, 0xAD90, 0xCDB5, 0xAD91, 0xCDB6, 0xAD92, 0xCDB7, 0xAD93, - 0xCDB8, 0xAD94, 0xCDB9, 0xAD95, 0xCDBA, 0xAD96, 0xCDBB, 0xAD97, - 0xCDBC, 0xAD98, 0xCDBD, 0xAD99, 0xCDBE, 0xAD9A, 0xCDBF, 0xAD9B, - 0xCDC0, 0xAD9C, 0xCDC1, 0xAD9D, 0xCDC2, 0xAD9E, 0xCDC3, 0xAD9F, - 0xCDC4, 0xC3E8, 0xCDC5, 0xADA0, 0xCDC6, 0xAE41, 0xCDC7, 0xAE42, - 0xCDC8, 0xAE43, 0xCDC9, 0xAE44, 0xCDCA, 0xAE45, 0xCDCB, 0xAE46, - 0xCDCC, 0xC3E9, 0xCDCD, 0xAE47, 0xCDCE, 0xAE48, 0xCDCF, 0xAE49, - 0xCDD0, 0xC3EA, 0xCDD1, 0xAE4A, 0xCDD2, 0xAE4B, 0xCDD3, 0xAE4C, - 0xCDD4, 0xAE4D, 0xCDD5, 0xAE4E, 0xCDD6, 0xAE4F, 0xCDD7, 0xAE50, - 0xCDD8, 0xAE51, 0xCDD9, 0xAE52, 0xCDDA, 0xAE53, 0xCDDB, 0xAE54, - 0xCDDC, 0xAE55, 0xCDDD, 0xAE56, 0xCDDE, 0xAE57, 0xCDDF, 0xAE58, - 0xCDE0, 0xAE59, 0xCDE1, 0xAE5A, 0xCDE2, 0xAE61, 0xCDE3, 0xAE62, - 0xCDE4, 0xAE63, 0xCDE5, 0xAE64, 0xCDE6, 0xAE65, 0xCDE7, 0xAE66, - 0xCDE8, 0xC3EB, 0xCDE9, 0xAE67, 0xCDEA, 0xAE68, 0xCDEB, 0xAE69, - 0xCDEC, 0xC3EC, 0xCDED, 0xAE6A, 0xCDEE, 0xAE6B, 0xCDEF, 0xAE6C, - 0xCDF0, 0xC3ED, 0xCDF1, 0xAE6D, 0xCDF2, 0xAE6E, 0xCDF3, 0xAE6F, - 0xCDF4, 0xAE70, 0xCDF5, 0xAE71, 0xCDF6, 0xAE72, 0xCDF7, 0xAE73, - 0xCDF8, 0xC3EE, 0xCDF9, 0xC3EF, 0xCDFA, 0xAE74, 0xCDFB, 0xC3F0, - 0xCDFC, 0xAE75, 0xCDFD, 0xC3F1, 0xCDFE, 0xAE76, 0xCDFF, 0xAE77, - 0xCE00, 0xAE78, 0xCE01, 0xAE79, 0xCE02, 0xAE7A, 0xCE03, 0xAE81, - 0xCE04, 0xC3F2, 0xCE05, 0xAE82, 0xCE06, 0xAE83, 0xCE07, 0xAE84, - 0xCE08, 0xC3F3, 0xCE09, 0xAE85, 0xCE0A, 0xAE86, 0xCE0B, 0xAE87, - 0xCE0C, 0xC3F4, 0xCE0D, 0xAE88, 0xCE0E, 0xAE89, 0xCE0F, 0xAE8A, - 0xCE10, 0xAE8B, 0xCE11, 0xAE8C, 0xCE12, 0xAE8D, 0xCE13, 0xAE8E, - 0xCE14, 0xC3F5, 0xCE15, 0xAE8F, 0xCE16, 0xAE90, 0xCE17, 0xAE91, - 0xCE18, 0xAE92, 0xCE19, 0xC3F6, 0xCE1A, 0xAE93, 0xCE1B, 0xAE94, - 0xCE1C, 0xAE95, 0xCE1D, 0xAE96, 0xCE1E, 0xAE97, 0xCE1F, 0xAE98, - 0xCE20, 0xC3F7, 0xCE21, 0xC3F8, 0xCE22, 0xAE99, 0xCE23, 0xAE9A, - 0xCE24, 0xC3F9, 0xCE25, 0xAE9B, 0xCE26, 0xAE9C, 0xCE27, 0xAE9D, - 0xCE28, 0xC3FA, 0xCE29, 0xAE9E, 0xCE2A, 0xAE9F, 0xCE2B, 0xAEA0, - 0xCE2C, 0xAF41, 0xCE2D, 0xAF42, 0xCE2E, 0xAF43, 0xCE2F, 0xAF44, - 0xCE30, 0xC3FB, 0xCE31, 0xC3FC, 0xCE32, 0xAF45, 0xCE33, 0xC3FD, - 0xCE34, 0xAF46, 0xCE35, 0xC3FE, 0xCE36, 0xAF47, 0xCE37, 0xAF48, - 0xCE38, 0xAF49, 0xCE39, 0xAF4A, 0xCE3A, 0xAF4B, 0xCE3B, 0xAF4C, - 0xCE3C, 0xAF4D, 0xCE3D, 0xAF4E, 0xCE3E, 0xAF4F, 0xCE3F, 0xAF50, - 0xCE40, 0xAF51, 0xCE41, 0xAF52, 0xCE42, 0xAF53, 0xCE43, 0xAF54, - 0xCE44, 0xAF55, 0xCE45, 0xAF56, 0xCE46, 0xAF57, 0xCE47, 0xAF58, - 0xCE48, 0xAF59, 0xCE49, 0xAF5A, 0xCE4A, 0xAF61, 0xCE4B, 0xAF62, - 0xCE4C, 0xAF63, 0xCE4D, 0xAF64, 0xCE4E, 0xAF65, 0xCE4F, 0xAF66, - 0xCE50, 0xAF67, 0xCE51, 0xAF68, 0xCE52, 0xAF69, 0xCE53, 0xAF6A, - 0xCE54, 0xAF6B, 0xCE55, 0xAF6C, 0xCE56, 0xAF6D, 0xCE57, 0xAF6E, - 0xCE58, 0xC4A1, 0xCE59, 0xC4A2, 0xCE5A, 0xAF6F, 0xCE5B, 0xAF70, - 0xCE5C, 0xC4A3, 0xCE5D, 0xAF71, 0xCE5E, 0xAF72, 0xCE5F, 0xC4A4, - 0xCE60, 0xC4A5, 0xCE61, 0xC4A6, 0xCE62, 0xAF73, 0xCE63, 0xAF74, - 0xCE64, 0xAF75, 0xCE65, 0xAF76, 0xCE66, 0xAF77, 0xCE67, 0xAF78, - 0xCE68, 0xC4A7, 0xCE69, 0xC4A8, 0xCE6A, 0xAF79, 0xCE6B, 0xC4A9, - 0xCE6C, 0xAF7A, 0xCE6D, 0xC4AA, 0xCE6E, 0xAF81, 0xCE6F, 0xAF82, - 0xCE70, 0xAF83, 0xCE71, 0xAF84, 0xCE72, 0xAF85, 0xCE73, 0xAF86, - 0xCE74, 0xC4AB, 0xCE75, 0xC4AC, 0xCE76, 0xAF87, 0xCE77, 0xAF88, - 0xCE78, 0xC4AD, 0xCE79, 0xAF89, 0xCE7A, 0xAF8A, 0xCE7B, 0xAF8B, - 0xCE7C, 0xC4AE, 0xCE7D, 0xAF8C, 0xCE7E, 0xAF8D, 0xCE7F, 0xAF8E, - 0xCE80, 0xAF8F, 0xCE81, 0xAF90, 0xCE82, 0xAF91, 0xCE83, 0xAF92, - 0xCE84, 0xC4AF, 0xCE85, 0xC4B0, 0xCE86, 0xAF93, 0xCE87, 0xC4B1, - 0xCE88, 0xAF94, 0xCE89, 0xC4B2, 0xCE8A, 0xAF95, 0xCE8B, 0xAF96, - 0xCE8C, 0xAF97, 0xCE8D, 0xAF98, 0xCE8E, 0xAF99, 0xCE8F, 0xAF9A, - 0xCE90, 0xC4B3, 0xCE91, 0xC4B4, 0xCE92, 0xAF9B, 0xCE93, 0xAF9C, - 0xCE94, 0xC4B5, 0xCE95, 0xAF9D, 0xCE96, 0xAF9E, 0xCE97, 0xAF9F, - 0xCE98, 0xC4B6, 0xCE99, 0xAFA0, 0xCE9A, 0xB041, 0xCE9B, 0xB042, - 0xCE9C, 0xB043, 0xCE9D, 0xB044, 0xCE9E, 0xB045, 0xCE9F, 0xB046, - 0xCEA0, 0xC4B7, 0xCEA1, 0xC4B8, 0xCEA2, 0xB047, 0xCEA3, 0xC4B9, - 0xCEA4, 0xC4BA, 0xCEA5, 0xC4BB, 0xCEA6, 0xB048, 0xCEA7, 0xB049, - 0xCEA8, 0xB04A, 0xCEA9, 0xB04B, 0xCEAA, 0xB04C, 0xCEAB, 0xB04D, - 0xCEAC, 0xC4BC, 0xCEAD, 0xC4BD, 0xCEAE, 0xB04E, 0xCEAF, 0xB04F, - 0xCEB0, 0xB050, 0xCEB1, 0xB051, 0xCEB2, 0xB052, 0xCEB3, 0xB053, - 0xCEB4, 0xB054, 0xCEB5, 0xB055, 0xCEB6, 0xB056, 0xCEB7, 0xB057, - 0xCEB8, 0xB058, 0xCEB9, 0xB059, 0xCEBA, 0xB05A, 0xCEBB, 0xB061, - 0xCEBC, 0xB062, 0xCEBD, 0xB063, 0xCEBE, 0xB064, 0xCEBF, 0xB065, - 0xCEC0, 0xB066, 0xCEC1, 0xC4BE, 0xCEC2, 0xB067, 0xCEC3, 0xB068, - 0xCEC4, 0xB069, 0xCEC5, 0xB06A, 0xCEC6, 0xB06B, 0xCEC7, 0xB06C, - 0xCEC8, 0xB06D, 0xCEC9, 0xB06E, 0xCECA, 0xB06F, 0xCECB, 0xB070, - 0xCECC, 0xB071, 0xCECD, 0xB072, 0xCECE, 0xB073, 0xCECF, 0xB074, - 0xCED0, 0xB075, 0xCED1, 0xB076, 0xCED2, 0xB077, 0xCED3, 0xB078, - 0xCED4, 0xB079, 0xCED5, 0xB07A, 0xCED6, 0xB081, 0xCED7, 0xB082, - 0xCED8, 0xB083, 0xCED9, 0xB084, 0xCEDA, 0xB085, 0xCEDB, 0xB086, - 0xCEDC, 0xB087, 0xCEDD, 0xB088, 0xCEDE, 0xB089, 0xCEDF, 0xB08A, - 0xCEE0, 0xB08B, 0xCEE1, 0xB08C, 0xCEE2, 0xB08D, 0xCEE3, 0xB08E, - 0xCEE4, 0xC4BF, 0xCEE5, 0xC4C0, 0xCEE6, 0xB08F, 0xCEE7, 0xB090, - 0xCEE8, 0xC4C1, 0xCEE9, 0xB091, 0xCEEA, 0xB092, 0xCEEB, 0xC4C2, - 0xCEEC, 0xC4C3, 0xCEED, 0xB093, 0xCEEE, 0xB094, 0xCEEF, 0xB095, - 0xCEF0, 0xB096, 0xCEF1, 0xB097, 0xCEF2, 0xB098, 0xCEF3, 0xB099, - 0xCEF4, 0xC4C4, 0xCEF5, 0xC4C5, 0xCEF6, 0xB09A, 0xCEF7, 0xC4C6, - 0xCEF8, 0xC4C7, 0xCEF9, 0xC4C8, 0xCEFA, 0xB09B, 0xCEFB, 0xB09C, - 0xCEFC, 0xB09D, 0xCEFD, 0xB09E, 0xCEFE, 0xB09F, 0xCEFF, 0xB0A0, - 0xCF00, 0xC4C9, 0xCF01, 0xC4CA, 0xCF02, 0xB141, 0xCF03, 0xB142, - 0xCF04, 0xC4CB, 0xCF05, 0xB143, 0xCF06, 0xB144, 0xCF07, 0xB145, - 0xCF08, 0xC4CC, 0xCF09, 0xB146, 0xCF0A, 0xB147, 0xCF0B, 0xB148, - 0xCF0C, 0xB149, 0xCF0D, 0xB14A, 0xCF0E, 0xB14B, 0xCF0F, 0xB14C, - 0xCF10, 0xC4CD, 0xCF11, 0xC4CE, 0xCF12, 0xB14D, 0xCF13, 0xC4CF, - 0xCF14, 0xB14E, 0xCF15, 0xC4D0, 0xCF16, 0xB14F, 0xCF17, 0xB150, - 0xCF18, 0xB151, 0xCF19, 0xB152, 0xCF1A, 0xB153, 0xCF1B, 0xB154, - 0xCF1C, 0xC4D1, 0xCF1D, 0xB155, 0xCF1E, 0xB156, 0xCF1F, 0xB157, - 0xCF20, 0xC4D2, 0xCF21, 0xB158, 0xCF22, 0xB159, 0xCF23, 0xB15A, - 0xCF24, 0xC4D3, 0xCF25, 0xB161, 0xCF26, 0xB162, 0xCF27, 0xB163, - 0xCF28, 0xB164, 0xCF29, 0xB165, 0xCF2A, 0xB166, 0xCF2B, 0xB167, - 0xCF2C, 0xC4D4, 0xCF2D, 0xC4D5, 0xCF2E, 0xB168, 0xCF2F, 0xC4D6, - 0xCF30, 0xC4D7, 0xCF31, 0xC4D8, 0xCF32, 0xB169, 0xCF33, 0xB16A, - 0xCF34, 0xB16B, 0xCF35, 0xB16C, 0xCF36, 0xB16D, 0xCF37, 0xB16E, - 0xCF38, 0xC4D9, 0xCF39, 0xB16F, 0xCF3A, 0xB170, 0xCF3B, 0xB171, - 0xCF3C, 0xB172, 0xCF3D, 0xB173, 0xCF3E, 0xB174, 0xCF3F, 0xB175, - 0xCF40, 0xB176, 0xCF41, 0xB177, 0xCF42, 0xB178, 0xCF43, 0xB179, - 0xCF44, 0xB17A, 0xCF45, 0xB181, 0xCF46, 0xB182, 0xCF47, 0xB183, - 0xCF48, 0xB184, 0xCF49, 0xB185, 0xCF4A, 0xB186, 0xCF4B, 0xB187, - 0xCF4C, 0xB188, 0xCF4D, 0xB189, 0xCF4E, 0xB18A, 0xCF4F, 0xB18B, - 0xCF50, 0xB18C, 0xCF51, 0xB18D, 0xCF52, 0xB18E, 0xCF53, 0xB18F, - 0xCF54, 0xC4DA, 0xCF55, 0xC4DB, 0xCF56, 0xB190, 0xCF57, 0xB191, - 0xCF58, 0xC4DC, 0xCF59, 0xB192, 0xCF5A, 0xB193, 0xCF5B, 0xB194, - 0xCF5C, 0xC4DD, 0xCF5D, 0xB195, 0xCF5E, 0xB196, 0xCF5F, 0xB197, - 0xCF60, 0xB198, 0xCF61, 0xB199, 0xCF62, 0xB19A, 0xCF63, 0xB19B, - 0xCF64, 0xC4DE, 0xCF65, 0xC4DF, 0xCF66, 0xB19C, 0xCF67, 0xC4E0, - 0xCF68, 0xB19D, 0xCF69, 0xC4E1, 0xCF6A, 0xB19E, 0xCF6B, 0xB19F, - 0xCF6C, 0xB1A0, 0xCF6D, 0xB241, 0xCF6E, 0xB242, 0xCF6F, 0xB243, - 0xCF70, 0xC4E2, 0xCF71, 0xC4E3, 0xCF72, 0xB244, 0xCF73, 0xB245, - 0xCF74, 0xC4E4, 0xCF75, 0xB246, 0xCF76, 0xB247, 0xCF77, 0xB248, - 0xCF78, 0xC4E5, 0xCF79, 0xB249, 0xCF7A, 0xB24A, 0xCF7B, 0xB24B, - 0xCF7C, 0xB24C, 0xCF7D, 0xB24D, 0xCF7E, 0xB24E, 0xCF7F, 0xB24F, - 0xCF80, 0xC4E6, 0xCF81, 0xB250, 0xCF82, 0xB251, 0xCF83, 0xB252, - 0xCF84, 0xB253, 0xCF85, 0xC4E7, 0xCF86, 0xB254, 0xCF87, 0xB255, - 0xCF88, 0xB256, 0xCF89, 0xB257, 0xCF8A, 0xB258, 0xCF8B, 0xB259, - 0xCF8C, 0xC4E8, 0xCF8D, 0xB25A, 0xCF8E, 0xB261, 0xCF8F, 0xB262, - 0xCF90, 0xB263, 0xCF91, 0xB264, 0xCF92, 0xB265, 0xCF93, 0xB266, - 0xCF94, 0xB267, 0xCF95, 0xB268, 0xCF96, 0xB269, 0xCF97, 0xB26A, - 0xCF98, 0xB26B, 0xCF99, 0xB26C, 0xCF9A, 0xB26D, 0xCF9B, 0xB26E, - 0xCF9C, 0xB26F, 0xCF9D, 0xB270, 0xCF9E, 0xB271, 0xCF9F, 0xB272, - 0xCFA0, 0xB273, 0xCFA1, 0xC4E9, 0xCFA2, 0xB274, 0xCFA3, 0xB275, - 0xCFA4, 0xB276, 0xCFA5, 0xB277, 0xCFA6, 0xB278, 0xCFA7, 0xB279, - 0xCFA8, 0xC4EA, 0xCFA9, 0xB27A, 0xCFAA, 0xB281, 0xCFAB, 0xB282, - 0xCFAC, 0xB283, 0xCFAD, 0xB284, 0xCFAE, 0xB285, 0xCFAF, 0xB286, - 0xCFB0, 0xC4EB, 0xCFB1, 0xB287, 0xCFB2, 0xB288, 0xCFB3, 0xB289, - 0xCFB4, 0xB28A, 0xCFB5, 0xB28B, 0xCFB6, 0xB28C, 0xCFB7, 0xB28D, - 0xCFB8, 0xB28E, 0xCFB9, 0xB28F, 0xCFBA, 0xB290, 0xCFBB, 0xB291, - 0xCFBC, 0xB292, 0xCFBD, 0xB293, 0xCFBE, 0xB294, 0xCFBF, 0xB295, - 0xCFC0, 0xB296, 0xCFC1, 0xB297, 0xCFC2, 0xB298, 0xCFC3, 0xB299, - 0xCFC4, 0xC4EC, 0xCFC5, 0xB29A, 0xCFC6, 0xB29B, 0xCFC7, 0xB29C, - 0xCFC8, 0xB29D, 0xCFC9, 0xB29E, 0xCFCA, 0xB29F, 0xCFCB, 0xB2A0, - 0xCFCC, 0xB341, 0xCFCD, 0xB342, 0xCFCE, 0xB343, 0xCFCF, 0xB344, - 0xCFD0, 0xB345, 0xCFD1, 0xB346, 0xCFD2, 0xB347, 0xCFD3, 0xB348, - 0xCFD4, 0xB349, 0xCFD5, 0xB34A, 0xCFD6, 0xB34B, 0xCFD7, 0xB34C, - 0xCFD8, 0xB34D, 0xCFD9, 0xB34E, 0xCFDA, 0xB34F, 0xCFDB, 0xB350, - 0xCFDC, 0xB351, 0xCFDD, 0xB352, 0xCFDE, 0xB353, 0xCFDF, 0xB354, - 0xCFE0, 0xC4ED, 0xCFE1, 0xC4EE, 0xCFE2, 0xB355, 0xCFE3, 0xB356, - 0xCFE4, 0xC4EF, 0xCFE5, 0xB357, 0xCFE6, 0xB358, 0xCFE7, 0xB359, - 0xCFE8, 0xC4F0, 0xCFE9, 0xB35A, 0xCFEA, 0xB361, 0xCFEB, 0xB362, - 0xCFEC, 0xB363, 0xCFED, 0xB364, 0xCFEE, 0xB365, 0xCFEF, 0xB366, - 0xCFF0, 0xC4F1, 0xCFF1, 0xC4F2, 0xCFF2, 0xB367, 0xCFF3, 0xC4F3, - 0xCFF4, 0xB368, 0xCFF5, 0xC4F4, 0xCFF6, 0xB369, 0xCFF7, 0xB36A, - 0xCFF8, 0xB36B, 0xCFF9, 0xB36C, 0xCFFA, 0xB36D, 0xCFFB, 0xB36E, - 0xCFFC, 0xC4F5, 0xCFFD, 0xB36F, 0xCFFE, 0xB370, 0xCFFF, 0xB371, - 0xD000, 0xC4F6, 0xD001, 0xB372, 0xD002, 0xB373, 0xD003, 0xB374, - 0xD004, 0xC4F7, 0xD005, 0xB375, 0xD006, 0xB376, 0xD007, 0xB377, - 0xD008, 0xB378, 0xD009, 0xB379, 0xD00A, 0xB37A, 0xD00B, 0xB381, - 0xD00C, 0xB382, 0xD00D, 0xB383, 0xD00E, 0xB384, 0xD00F, 0xB385, - 0xD010, 0xB386, 0xD011, 0xC4F8, 0xD012, 0xB387, 0xD013, 0xB388, - 0xD014, 0xB389, 0xD015, 0xB38A, 0xD016, 0xB38B, 0xD017, 0xB38C, - 0xD018, 0xC4F9, 0xD019, 0xB38D, 0xD01A, 0xB38E, 0xD01B, 0xB38F, - 0xD01C, 0xB390, 0xD01D, 0xB391, 0xD01E, 0xB392, 0xD01F, 0xB393, - 0xD020, 0xB394, 0xD021, 0xB395, 0xD022, 0xB396, 0xD023, 0xB397, - 0xD024, 0xB398, 0xD025, 0xB399, 0xD026, 0xB39A, 0xD027, 0xB39B, - 0xD028, 0xB39C, 0xD029, 0xB39D, 0xD02A, 0xB39E, 0xD02B, 0xB39F, - 0xD02C, 0xB3A0, 0xD02D, 0xC4FA, 0xD02E, 0xB441, 0xD02F, 0xB442, - 0xD030, 0xB443, 0xD031, 0xB444, 0xD032, 0xB445, 0xD033, 0xB446, - 0xD034, 0xC4FB, 0xD035, 0xC4FC, 0xD036, 0xB447, 0xD037, 0xB448, - 0xD038, 0xC4FD, 0xD039, 0xB449, 0xD03A, 0xB44A, 0xD03B, 0xB44B, - 0xD03C, 0xC4FE, 0xD03D, 0xB44C, 0xD03E, 0xB44D, 0xD03F, 0xB44E, - 0xD040, 0xB44F, 0xD041, 0xB450, 0xD042, 0xB451, 0xD043, 0xB452, - 0xD044, 0xC5A1, 0xD045, 0xC5A2, 0xD046, 0xB453, 0xD047, 0xC5A3, - 0xD048, 0xB454, 0xD049, 0xC5A4, 0xD04A, 0xB455, 0xD04B, 0xB456, - 0xD04C, 0xB457, 0xD04D, 0xB458, 0xD04E, 0xB459, 0xD04F, 0xB45A, - 0xD050, 0xC5A5, 0xD051, 0xB461, 0xD052, 0xB462, 0xD053, 0xB463, - 0xD054, 0xC5A6, 0xD055, 0xB464, 0xD056, 0xB465, 0xD057, 0xB466, - 0xD058, 0xC5A7, 0xD059, 0xB467, 0xD05A, 0xB468, 0xD05B, 0xB469, - 0xD05C, 0xB46A, 0xD05D, 0xB46B, 0xD05E, 0xB46C, 0xD05F, 0xB46D, - 0xD060, 0xC5A8, 0xD061, 0xB46E, 0xD062, 0xB46F, 0xD063, 0xB470, - 0xD064, 0xB471, 0xD065, 0xB472, 0xD066, 0xB473, 0xD067, 0xB474, - 0xD068, 0xB475, 0xD069, 0xB476, 0xD06A, 0xB477, 0xD06B, 0xB478, - 0xD06C, 0xC5A9, 0xD06D, 0xC5AA, 0xD06E, 0xB479, 0xD06F, 0xB47A, - 0xD070, 0xC5AB, 0xD071, 0xB481, 0xD072, 0xB482, 0xD073, 0xB483, - 0xD074, 0xC5AC, 0xD075, 0xB484, 0xD076, 0xB485, 0xD077, 0xB486, - 0xD078, 0xB487, 0xD079, 0xB488, 0xD07A, 0xB489, 0xD07B, 0xB48A, - 0xD07C, 0xC5AD, 0xD07D, 0xC5AE, 0xD07E, 0xB48B, 0xD07F, 0xB48C, - 0xD080, 0xB48D, 0xD081, 0xC5AF, 0xD082, 0xB48E, 0xD083, 0xB48F, - 0xD084, 0xB490, 0xD085, 0xB491, 0xD086, 0xB492, 0xD087, 0xB493, - 0xD088, 0xB494, 0xD089, 0xB495, 0xD08A, 0xB496, 0xD08B, 0xB497, - 0xD08C, 0xB498, 0xD08D, 0xB499, 0xD08E, 0xB49A, 0xD08F, 0xB49B, - 0xD090, 0xB49C, 0xD091, 0xB49D, 0xD092, 0xB49E, 0xD093, 0xB49F, - 0xD094, 0xB4A0, 0xD095, 0xB541, 0xD096, 0xB542, 0xD097, 0xB543, - 0xD098, 0xB544, 0xD099, 0xB545, 0xD09A, 0xB546, 0xD09B, 0xB547, - 0xD09C, 0xB548, 0xD09D, 0xB549, 0xD09E, 0xB54A, 0xD09F, 0xB54B, - 0xD0A0, 0xB54C, 0xD0A1, 0xB54D, 0xD0A2, 0xB54E, 0xD0A3, 0xB54F, - 0xD0A4, 0xC5B0, 0xD0A5, 0xC5B1, 0xD0A6, 0xB550, 0xD0A7, 0xB551, - 0xD0A8, 0xC5B2, 0xD0A9, 0xB552, 0xD0AA, 0xB553, 0xD0AB, 0xB554, - 0xD0AC, 0xC5B3, 0xD0AD, 0xB555, 0xD0AE, 0xB556, 0xD0AF, 0xB557, - 0xD0B0, 0xB558, 0xD0B1, 0xB559, 0xD0B2, 0xB55A, 0xD0B3, 0xB561, - 0xD0B4, 0xC5B4, 0xD0B5, 0xC5B5, 0xD0B6, 0xB562, 0xD0B7, 0xC5B6, - 0xD0B8, 0xB563, 0xD0B9, 0xC5B7, 0xD0BA, 0xB564, 0xD0BB, 0xB565, - 0xD0BC, 0xB566, 0xD0BD, 0xB567, 0xD0BE, 0xB568, 0xD0BF, 0xB569, - 0xD0C0, 0xC5B8, 0xD0C1, 0xC5B9, 0xD0C2, 0xB56A, 0xD0C3, 0xB56B, - 0xD0C4, 0xC5BA, 0xD0C5, 0xB56C, 0xD0C6, 0xB56D, 0xD0C7, 0xB56E, - 0xD0C8, 0xC5BB, 0xD0C9, 0xC5BC, 0xD0CA, 0xB56F, 0xD0CB, 0xB570, - 0xD0CC, 0xB571, 0xD0CD, 0xB572, 0xD0CE, 0xB573, 0xD0CF, 0xB574, - 0xD0D0, 0xC5BD, 0xD0D1, 0xC5BE, 0xD0D2, 0xB575, 0xD0D3, 0xC5BF, - 0xD0D4, 0xC5C0, 0xD0D5, 0xC5C1, 0xD0D6, 0xB576, 0xD0D7, 0xB577, - 0xD0D8, 0xB578, 0xD0D9, 0xB579, 0xD0DA, 0xB57A, 0xD0DB, 0xB581, - 0xD0DC, 0xC5C2, 0xD0DD, 0xC5C3, 0xD0DE, 0xB582, 0xD0DF, 0xB583, - 0xD0E0, 0xC5C4, 0xD0E1, 0xB584, 0xD0E2, 0xB585, 0xD0E3, 0xB586, - 0xD0E4, 0xC5C5, 0xD0E5, 0xB587, 0xD0E6, 0xB588, 0xD0E7, 0xB589, - 0xD0E8, 0xB58A, 0xD0E9, 0xB58B, 0xD0EA, 0xB58C, 0xD0EB, 0xB58D, - 0xD0EC, 0xC5C6, 0xD0ED, 0xC5C7, 0xD0EE, 0xB58E, 0xD0EF, 0xC5C8, - 0xD0F0, 0xC5C9, 0xD0F1, 0xC5CA, 0xD0F2, 0xB58F, 0xD0F3, 0xB590, - 0xD0F4, 0xB591, 0xD0F5, 0xB592, 0xD0F6, 0xB593, 0xD0F7, 0xB594, - 0xD0F8, 0xC5CB, 0xD0F9, 0xB595, 0xD0FA, 0xB596, 0xD0FB, 0xB597, - 0xD0FC, 0xB598, 0xD0FD, 0xB599, 0xD0FE, 0xB59A, 0xD0FF, 0xB59B, - 0xD100, 0xB59C, 0xD101, 0xB59D, 0xD102, 0xB59E, 0xD103, 0xB59F, - 0xD104, 0xB5A0, 0xD105, 0xB641, 0xD106, 0xB642, 0xD107, 0xB643, - 0xD108, 0xB644, 0xD109, 0xB645, 0xD10A, 0xB646, 0xD10B, 0xB647, - 0xD10C, 0xB648, 0xD10D, 0xC5CC, 0xD10E, 0xB649, 0xD10F, 0xB64A, - 0xD110, 0xB64B, 0xD111, 0xB64C, 0xD112, 0xB64D, 0xD113, 0xB64E, - 0xD114, 0xB64F, 0xD115, 0xB650, 0xD116, 0xB651, 0xD117, 0xB652, - 0xD118, 0xB653, 0xD119, 0xB654, 0xD11A, 0xB655, 0xD11B, 0xB656, - 0xD11C, 0xB657, 0xD11D, 0xB658, 0xD11E, 0xB659, 0xD11F, 0xB65A, - 0xD120, 0xB661, 0xD121, 0xB662, 0xD122, 0xB663, 0xD123, 0xB664, - 0xD124, 0xB665, 0xD125, 0xB666, 0xD126, 0xB667, 0xD127, 0xB668, - 0xD128, 0xB669, 0xD129, 0xB66A, 0xD12A, 0xB66B, 0xD12B, 0xB66C, - 0xD12C, 0xB66D, 0xD12D, 0xB66E, 0xD12E, 0xB66F, 0xD12F, 0xB670, - 0xD130, 0xC5CD, 0xD131, 0xC5CE, 0xD132, 0xB671, 0xD133, 0xB672, - 0xD134, 0xC5CF, 0xD135, 0xB673, 0xD136, 0xB674, 0xD137, 0xB675, - 0xD138, 0xC5D0, 0xD139, 0xB676, 0xD13A, 0xC5D1, 0xD13B, 0xB677, - 0xD13C, 0xB678, 0xD13D, 0xB679, 0xD13E, 0xB67A, 0xD13F, 0xB681, - 0xD140, 0xC5D2, 0xD141, 0xC5D3, 0xD142, 0xB682, 0xD143, 0xC5D4, - 0xD144, 0xC5D5, 0xD145, 0xC5D6, 0xD146, 0xB683, 0xD147, 0xB684, - 0xD148, 0xB685, 0xD149, 0xB686, 0xD14A, 0xB687, 0xD14B, 0xB688, - 0xD14C, 0xC5D7, 0xD14D, 0xC5D8, 0xD14E, 0xB689, 0xD14F, 0xB68A, - 0xD150, 0xC5D9, 0xD151, 0xB68B, 0xD152, 0xB68C, 0xD153, 0xB68D, - 0xD154, 0xC5DA, 0xD155, 0xB68E, 0xD156, 0xB68F, 0xD157, 0xB690, - 0xD158, 0xB691, 0xD159, 0xB692, 0xD15A, 0xB693, 0xD15B, 0xB694, - 0xD15C, 0xC5DB, 0xD15D, 0xC5DC, 0xD15E, 0xB695, 0xD15F, 0xC5DD, - 0xD160, 0xB696, 0xD161, 0xC5DE, 0xD162, 0xB697, 0xD163, 0xB698, - 0xD164, 0xB699, 0xD165, 0xB69A, 0xD166, 0xB69B, 0xD167, 0xB69C, - 0xD168, 0xC5DF, 0xD169, 0xB69D, 0xD16A, 0xB69E, 0xD16B, 0xB69F, - 0xD16C, 0xC5E0, 0xD16D, 0xB6A0, 0xD16E, 0xB741, 0xD16F, 0xB742, - 0xD170, 0xB743, 0xD171, 0xB744, 0xD172, 0xB745, 0xD173, 0xB746, - 0xD174, 0xB747, 0xD175, 0xB748, 0xD176, 0xB749, 0xD177, 0xB74A, - 0xD178, 0xB74B, 0xD179, 0xB74C, 0xD17A, 0xB74D, 0xD17B, 0xB74E, - 0xD17C, 0xC5E1, 0xD17D, 0xB74F, 0xD17E, 0xB750, 0xD17F, 0xB751, - 0xD180, 0xB752, 0xD181, 0xB753, 0xD182, 0xB754, 0xD183, 0xB755, - 0xD184, 0xC5E2, 0xD185, 0xB756, 0xD186, 0xB757, 0xD187, 0xB758, - 0xD188, 0xC5E3, 0xD189, 0xB759, 0xD18A, 0xB75A, 0xD18B, 0xB761, - 0xD18C, 0xB762, 0xD18D, 0xB763, 0xD18E, 0xB764, 0xD18F, 0xB765, - 0xD190, 0xB766, 0xD191, 0xB767, 0xD192, 0xB768, 0xD193, 0xB769, - 0xD194, 0xB76A, 0xD195, 0xB76B, 0xD196, 0xB76C, 0xD197, 0xB76D, - 0xD198, 0xB76E, 0xD199, 0xB76F, 0xD19A, 0xB770, 0xD19B, 0xB771, - 0xD19C, 0xB772, 0xD19D, 0xB773, 0xD19E, 0xB774, 0xD19F, 0xB775, - 0xD1A0, 0xC5E4, 0xD1A1, 0xC5E5, 0xD1A2, 0xB776, 0xD1A3, 0xB777, - 0xD1A4, 0xC5E6, 0xD1A5, 0xB778, 0xD1A6, 0xB779, 0xD1A7, 0xB77A, - 0xD1A8, 0xC5E7, 0xD1A9, 0xB781, 0xD1AA, 0xB782, 0xD1AB, 0xB783, - 0xD1AC, 0xB784, 0xD1AD, 0xB785, 0xD1AE, 0xB786, 0xD1AF, 0xB787, - 0xD1B0, 0xC5E8, 0xD1B1, 0xC5E9, 0xD1B2, 0xB788, 0xD1B3, 0xC5EA, - 0xD1B4, 0xB789, 0xD1B5, 0xC5EB, 0xD1B6, 0xB78A, 0xD1B7, 0xB78B, - 0xD1B8, 0xB78C, 0xD1B9, 0xB78D, 0xD1BA, 0xC5EC, 0xD1BB, 0xB78E, - 0xD1BC, 0xC5ED, 0xD1BD, 0xB78F, 0xD1BE, 0xB790, 0xD1BF, 0xB791, - 0xD1C0, 0xC5EE, 0xD1C1, 0xB792, 0xD1C2, 0xB793, 0xD1C3, 0xB794, - 0xD1C4, 0xB795, 0xD1C5, 0xB796, 0xD1C6, 0xB797, 0xD1C7, 0xB798, - 0xD1C8, 0xB799, 0xD1C9, 0xB79A, 0xD1CA, 0xB79B, 0xD1CB, 0xB79C, - 0xD1CC, 0xB79D, 0xD1CD, 0xB79E, 0xD1CE, 0xB79F, 0xD1CF, 0xB7A0, - 0xD1D0, 0xB841, 0xD1D1, 0xB842, 0xD1D2, 0xB843, 0xD1D3, 0xB844, - 0xD1D4, 0xB845, 0xD1D5, 0xB846, 0xD1D6, 0xB847, 0xD1D7, 0xB848, - 0xD1D8, 0xC5EF, 0xD1D9, 0xB849, 0xD1DA, 0xB84A, 0xD1DB, 0xB84B, - 0xD1DC, 0xB84C, 0xD1DD, 0xB84D, 0xD1DE, 0xB84E, 0xD1DF, 0xB84F, - 0xD1E0, 0xB850, 0xD1E1, 0xB851, 0xD1E2, 0xB852, 0xD1E3, 0xB853, - 0xD1E4, 0xB854, 0xD1E5, 0xB855, 0xD1E6, 0xB856, 0xD1E7, 0xB857, - 0xD1E8, 0xB858, 0xD1E9, 0xB859, 0xD1EA, 0xB85A, 0xD1EB, 0xB861, - 0xD1EC, 0xB862, 0xD1ED, 0xB863, 0xD1EE, 0xB864, 0xD1EF, 0xB865, - 0xD1F0, 0xB866, 0xD1F1, 0xB867, 0xD1F2, 0xB868, 0xD1F3, 0xB869, - 0xD1F4, 0xC5F0, 0xD1F5, 0xB86A, 0xD1F6, 0xB86B, 0xD1F7, 0xB86C, - 0xD1F8, 0xC5F1, 0xD1F9, 0xB86D, 0xD1FA, 0xB86E, 0xD1FB, 0xB86F, - 0xD1FC, 0xB870, 0xD1FD, 0xB871, 0xD1FE, 0xB872, 0xD1FF, 0xB873, - 0xD200, 0xB874, 0xD201, 0xB875, 0xD202, 0xB876, 0xD203, 0xB877, - 0xD204, 0xB878, 0xD205, 0xB879, 0xD206, 0xB87A, 0xD207, 0xC5F2, - 0xD208, 0xB881, 0xD209, 0xC5F3, 0xD20A, 0xB882, 0xD20B, 0xB883, - 0xD20C, 0xB884, 0xD20D, 0xB885, 0xD20E, 0xB886, 0xD20F, 0xB887, - 0xD210, 0xC5F4, 0xD211, 0xB888, 0xD212, 0xB889, 0xD213, 0xB88A, - 0xD214, 0xB88B, 0xD215, 0xB88C, 0xD216, 0xB88D, 0xD217, 0xB88E, - 0xD218, 0xB88F, 0xD219, 0xB890, 0xD21A, 0xB891, 0xD21B, 0xB892, - 0xD21C, 0xB893, 0xD21D, 0xB894, 0xD21E, 0xB895, 0xD21F, 0xB896, - 0xD220, 0xB897, 0xD221, 0xB898, 0xD222, 0xB899, 0xD223, 0xB89A, - 0xD224, 0xB89B, 0xD225, 0xB89C, 0xD226, 0xB89D, 0xD227, 0xB89E, - 0xD228, 0xB89F, 0xD229, 0xB8A0, 0xD22A, 0xB941, 0xD22B, 0xB942, - 0xD22C, 0xC5F5, 0xD22D, 0xC5F6, 0xD22E, 0xB943, 0xD22F, 0xB944, - 0xD230, 0xC5F7, 0xD231, 0xB945, 0xD232, 0xB946, 0xD233, 0xB947, - 0xD234, 0xC5F8, 0xD235, 0xB948, 0xD236, 0xB949, 0xD237, 0xB94A, - 0xD238, 0xB94B, 0xD239, 0xB94C, 0xD23A, 0xB94D, 0xD23B, 0xB94E, - 0xD23C, 0xC5F9, 0xD23D, 0xC5FA, 0xD23E, 0xB94F, 0xD23F, 0xC5FB, - 0xD240, 0xB950, 0xD241, 0xC5FC, 0xD242, 0xB951, 0xD243, 0xB952, - 0xD244, 0xB953, 0xD245, 0xB954, 0xD246, 0xB955, 0xD247, 0xB956, - 0xD248, 0xC5FD, 0xD249, 0xB957, 0xD24A, 0xB958, 0xD24B, 0xB959, - 0xD24C, 0xB95A, 0xD24D, 0xB961, 0xD24E, 0xB962, 0xD24F, 0xB963, - 0xD250, 0xB964, 0xD251, 0xB965, 0xD252, 0xB966, 0xD253, 0xB967, - 0xD254, 0xB968, 0xD255, 0xB969, 0xD256, 0xB96A, 0xD257, 0xB96B, - 0xD258, 0xB96C, 0xD259, 0xB96D, 0xD25A, 0xB96E, 0xD25B, 0xB96F, - 0xD25C, 0xC5FE, 0xD25D, 0xB970, 0xD25E, 0xB971, 0xD25F, 0xB972, - 0xD260, 0xB973, 0xD261, 0xB974, 0xD262, 0xB975, 0xD263, 0xB976, - 0xD264, 0xC6A1, 0xD265, 0xB977, 0xD266, 0xB978, 0xD267, 0xB979, - 0xD268, 0xB97A, 0xD269, 0xB981, 0xD26A, 0xB982, 0xD26B, 0xB983, - 0xD26C, 0xB984, 0xD26D, 0xB985, 0xD26E, 0xB986, 0xD26F, 0xB987, - 0xD270, 0xB988, 0xD271, 0xB989, 0xD272, 0xB98A, 0xD273, 0xB98B, - 0xD274, 0xB98C, 0xD275, 0xB98D, 0xD276, 0xB98E, 0xD277, 0xB98F, - 0xD278, 0xB990, 0xD279, 0xB991, 0xD27A, 0xB992, 0xD27B, 0xB993, - 0xD27C, 0xB994, 0xD27D, 0xB995, 0xD27E, 0xB996, 0xD27F, 0xB997, - 0xD280, 0xC6A2, 0xD281, 0xC6A3, 0xD282, 0xB998, 0xD283, 0xB999, - 0xD284, 0xC6A4, 0xD285, 0xB99A, 0xD286, 0xB99B, 0xD287, 0xB99C, - 0xD288, 0xC6A5, 0xD289, 0xB99D, 0xD28A, 0xB99E, 0xD28B, 0xB99F, - 0xD28C, 0xB9A0, 0xD28D, 0xBA41, 0xD28E, 0xBA42, 0xD28F, 0xBA43, - 0xD290, 0xC6A6, 0xD291, 0xC6A7, 0xD292, 0xBA44, 0xD293, 0xBA45, - 0xD294, 0xBA46, 0xD295, 0xC6A8, 0xD296, 0xBA47, 0xD297, 0xBA48, - 0xD298, 0xBA49, 0xD299, 0xBA4A, 0xD29A, 0xBA4B, 0xD29B, 0xBA4C, - 0xD29C, 0xC6A9, 0xD29D, 0xBA4D, 0xD29E, 0xBA4E, 0xD29F, 0xBA4F, - 0xD2A0, 0xC6AA, 0xD2A1, 0xBA50, 0xD2A2, 0xBA51, 0xD2A3, 0xBA52, - 0xD2A4, 0xC6AB, 0xD2A5, 0xBA53, 0xD2A6, 0xBA54, 0xD2A7, 0xBA55, - 0xD2A8, 0xBA56, 0xD2A9, 0xBA57, 0xD2AA, 0xBA58, 0xD2AB, 0xBA59, - 0xD2AC, 0xC6AC, 0xD2AD, 0xBA5A, 0xD2AE, 0xBA61, 0xD2AF, 0xBA62, - 0xD2B0, 0xBA63, 0xD2B1, 0xC6AD, 0xD2B2, 0xBA64, 0xD2B3, 0xBA65, - 0xD2B4, 0xBA66, 0xD2B5, 0xBA67, 0xD2B6, 0xBA68, 0xD2B7, 0xBA69, - 0xD2B8, 0xC6AE, 0xD2B9, 0xC6AF, 0xD2BA, 0xBA6A, 0xD2BB, 0xBA6B, - 0xD2BC, 0xC6B0, 0xD2BD, 0xBA6C, 0xD2BE, 0xBA6D, 0xD2BF, 0xC6B1, - 0xD2C0, 0xC6B2, 0xD2C1, 0xBA6E, 0xD2C2, 0xC6B3, 0xD2C3, 0xBA6F, - 0xD2C4, 0xBA70, 0xD2C5, 0xBA71, 0xD2C6, 0xBA72, 0xD2C7, 0xBA73, - 0xD2C8, 0xC6B4, 0xD2C9, 0xC6B5, 0xD2CA, 0xBA74, 0xD2CB, 0xC6B6, - 0xD2CC, 0xBA75, 0xD2CD, 0xBA76, 0xD2CE, 0xBA77, 0xD2CF, 0xBA78, - 0xD2D0, 0xBA79, 0xD2D1, 0xBA7A, 0xD2D2, 0xBA81, 0xD2D3, 0xBA82, - 0xD2D4, 0xC6B7, 0xD2D5, 0xBA83, 0xD2D6, 0xBA84, 0xD2D7, 0xBA85, - 0xD2D8, 0xC6B8, 0xD2D9, 0xBA86, 0xD2DA, 0xBA87, 0xD2DB, 0xBA88, - 0xD2DC, 0xC6B9, 0xD2DD, 0xBA89, 0xD2DE, 0xBA8A, 0xD2DF, 0xBA8B, - 0xD2E0, 0xBA8C, 0xD2E1, 0xBA8D, 0xD2E2, 0xBA8E, 0xD2E3, 0xBA8F, - 0xD2E4, 0xC6BA, 0xD2E5, 0xC6BB, 0xD2E6, 0xBA90, 0xD2E7, 0xBA91, - 0xD2E8, 0xBA92, 0xD2E9, 0xBA93, 0xD2EA, 0xBA94, 0xD2EB, 0xBA95, - 0xD2EC, 0xBA96, 0xD2ED, 0xBA97, 0xD2EE, 0xBA98, 0xD2EF, 0xBA99, - 0xD2F0, 0xC6BC, 0xD2F1, 0xC6BD, 0xD2F2, 0xBA9A, 0xD2F3, 0xBA9B, - 0xD2F4, 0xC6BE, 0xD2F5, 0xBA9C, 0xD2F6, 0xBA9D, 0xD2F7, 0xBA9E, - 0xD2F8, 0xC6BF, 0xD2F9, 0xBA9F, 0xD2FA, 0xBAA0, 0xD2FB, 0xBB41, - 0xD2FC, 0xBB42, 0xD2FD, 0xBB43, 0xD2FE, 0xBB44, 0xD2FF, 0xBB45, - 0xD300, 0xC6C0, 0xD301, 0xC6C1, 0xD302, 0xBB46, 0xD303, 0xC6C2, - 0xD304, 0xBB47, 0xD305, 0xC6C3, 0xD306, 0xBB48, 0xD307, 0xBB49, - 0xD308, 0xBB4A, 0xD309, 0xBB4B, 0xD30A, 0xBB4C, 0xD30B, 0xBB4D, - 0xD30C, 0xC6C4, 0xD30D, 0xC6C5, 0xD30E, 0xC6C6, 0xD30F, 0xBB4E, - 0xD310, 0xC6C7, 0xD311, 0xBB4F, 0xD312, 0xBB50, 0xD313, 0xBB51, - 0xD314, 0xC6C8, 0xD315, 0xBB52, 0xD316, 0xC6C9, 0xD317, 0xBB53, - 0xD318, 0xBB54, 0xD319, 0xBB55, 0xD31A, 0xBB56, 0xD31B, 0xBB57, - 0xD31C, 0xC6CA, 0xD31D, 0xC6CB, 0xD31E, 0xBB58, 0xD31F, 0xC6CC, - 0xD320, 0xC6CD, 0xD321, 0xC6CE, 0xD322, 0xBB59, 0xD323, 0xBB5A, - 0xD324, 0xBB61, 0xD325, 0xC6CF, 0xD326, 0xBB62, 0xD327, 0xBB63, - 0xD328, 0xC6D0, 0xD329, 0xC6D1, 0xD32A, 0xBB64, 0xD32B, 0xBB65, - 0xD32C, 0xC6D2, 0xD32D, 0xBB66, 0xD32E, 0xBB67, 0xD32F, 0xBB68, - 0xD330, 0xC6D3, 0xD331, 0xBB69, 0xD332, 0xBB6A, 0xD333, 0xBB6B, - 0xD334, 0xBB6C, 0xD335, 0xBB6D, 0xD336, 0xBB6E, 0xD337, 0xBB6F, - 0xD338, 0xC6D4, 0xD339, 0xC6D5, 0xD33A, 0xBB70, 0xD33B, 0xC6D6, - 0xD33C, 0xC6D7, 0xD33D, 0xC6D8, 0xD33E, 0xBB71, 0xD33F, 0xBB72, - 0xD340, 0xBB73, 0xD341, 0xBB74, 0xD342, 0xBB75, 0xD343, 0xBB76, - 0xD344, 0xC6D9, 0xD345, 0xC6DA, 0xD346, 0xBB77, 0xD347, 0xBB78, - 0xD348, 0xBB79, 0xD349, 0xBB7A, 0xD34A, 0xBB81, 0xD34B, 0xBB82, - 0xD34C, 0xBB83, 0xD34D, 0xBB84, 0xD34E, 0xBB85, 0xD34F, 0xBB86, - 0xD350, 0xBB87, 0xD351, 0xBB88, 0xD352, 0xBB89, 0xD353, 0xBB8A, - 0xD354, 0xBB8B, 0xD355, 0xBB8C, 0xD356, 0xBB8D, 0xD357, 0xBB8E, - 0xD358, 0xBB8F, 0xD359, 0xBB90, 0xD35A, 0xBB91, 0xD35B, 0xBB92, - 0xD35C, 0xBB93, 0xD35D, 0xBB94, 0xD35E, 0xBB95, 0xD35F, 0xBB96, - 0xD360, 0xBB97, 0xD361, 0xBB98, 0xD362, 0xBB99, 0xD363, 0xBB9A, - 0xD364, 0xBB9B, 0xD365, 0xBB9C, 0xD366, 0xBB9D, 0xD367, 0xBB9E, - 0xD368, 0xBB9F, 0xD369, 0xBBA0, 0xD36A, 0xBC41, 0xD36B, 0xBC42, - 0xD36C, 0xBC43, 0xD36D, 0xBC44, 0xD36E, 0xBC45, 0xD36F, 0xBC46, - 0xD370, 0xBC47, 0xD371, 0xBC48, 0xD372, 0xBC49, 0xD373, 0xBC4A, - 0xD374, 0xBC4B, 0xD375, 0xBC4C, 0xD376, 0xBC4D, 0xD377, 0xBC4E, - 0xD378, 0xBC4F, 0xD379, 0xBC50, 0xD37A, 0xBC51, 0xD37B, 0xBC52, - 0xD37C, 0xC6DB, 0xD37D, 0xC6DC, 0xD37E, 0xBC53, 0xD37F, 0xBC54, - 0xD380, 0xC6DD, 0xD381, 0xBC55, 0xD382, 0xBC56, 0xD383, 0xBC57, - 0xD384, 0xC6DE, 0xD385, 0xBC58, 0xD386, 0xBC59, 0xD387, 0xBC5A, - 0xD388, 0xBC61, 0xD389, 0xBC62, 0xD38A, 0xBC63, 0xD38B, 0xBC64, - 0xD38C, 0xC6DF, 0xD38D, 0xC6E0, 0xD38E, 0xBC65, 0xD38F, 0xC6E1, - 0xD390, 0xC6E2, 0xD391, 0xC6E3, 0xD392, 0xBC66, 0xD393, 0xBC67, - 0xD394, 0xBC68, 0xD395, 0xBC69, 0xD396, 0xBC6A, 0xD397, 0xBC6B, - 0xD398, 0xC6E4, 0xD399, 0xC6E5, 0xD39A, 0xBC6C, 0xD39B, 0xBC6D, - 0xD39C, 0xC6E6, 0xD39D, 0xBC6E, 0xD39E, 0xBC6F, 0xD39F, 0xBC70, - 0xD3A0, 0xC6E7, 0xD3A1, 0xBC71, 0xD3A2, 0xBC72, 0xD3A3, 0xBC73, - 0xD3A4, 0xBC74, 0xD3A5, 0xBC75, 0xD3A6, 0xBC76, 0xD3A7, 0xBC77, - 0xD3A8, 0xC6E8, 0xD3A9, 0xC6E9, 0xD3AA, 0xBC78, 0xD3AB, 0xC6EA, - 0xD3AC, 0xBC79, 0xD3AD, 0xC6EB, 0xD3AE, 0xBC7A, 0xD3AF, 0xBC81, - 0xD3B0, 0xBC82, 0xD3B1, 0xBC83, 0xD3B2, 0xBC84, 0xD3B3, 0xBC85, - 0xD3B4, 0xC6EC, 0xD3B5, 0xBC86, 0xD3B6, 0xBC87, 0xD3B7, 0xBC88, - 0xD3B8, 0xC6ED, 0xD3B9, 0xBC89, 0xD3BA, 0xBC8A, 0xD3BB, 0xBC8B, - 0xD3BC, 0xC6EE, 0xD3BD, 0xBC8C, 0xD3BE, 0xBC8D, 0xD3BF, 0xBC8E, - 0xD3C0, 0xBC8F, 0xD3C1, 0xBC90, 0xD3C2, 0xBC91, 0xD3C3, 0xBC92, - 0xD3C4, 0xC6EF, 0xD3C5, 0xC6F0, 0xD3C6, 0xBC93, 0xD3C7, 0xBC94, - 0xD3C8, 0xC6F1, 0xD3C9, 0xC6F2, 0xD3CA, 0xBC95, 0xD3CB, 0xBC96, - 0xD3CC, 0xBC97, 0xD3CD, 0xBC98, 0xD3CE, 0xBC99, 0xD3CF, 0xBC9A, - 0xD3D0, 0xC6F3, 0xD3D1, 0xBC9B, 0xD3D2, 0xBC9C, 0xD3D3, 0xBC9D, - 0xD3D4, 0xBC9E, 0xD3D5, 0xBC9F, 0xD3D6, 0xBCA0, 0xD3D7, 0xBD41, - 0xD3D8, 0xC6F4, 0xD3D9, 0xBD42, 0xD3DA, 0xBD43, 0xD3DB, 0xBD44, - 0xD3DC, 0xBD45, 0xD3DD, 0xBD46, 0xD3DE, 0xBD47, 0xD3DF, 0xBD48, - 0xD3E0, 0xBD49, 0xD3E1, 0xC6F5, 0xD3E2, 0xBD4A, 0xD3E3, 0xC6F6, - 0xD3E4, 0xBD4B, 0xD3E5, 0xBD4C, 0xD3E6, 0xBD4D, 0xD3E7, 0xBD4E, - 0xD3E8, 0xBD4F, 0xD3E9, 0xBD50, 0xD3EA, 0xBD51, 0xD3EB, 0xBD52, - 0xD3EC, 0xC6F7, 0xD3ED, 0xC6F8, 0xD3EE, 0xBD53, 0xD3EF, 0xBD54, - 0xD3F0, 0xC6F9, 0xD3F1, 0xBD55, 0xD3F2, 0xBD56, 0xD3F3, 0xBD57, - 0xD3F4, 0xC6FA, 0xD3F5, 0xBD58, 0xD3F6, 0xBD59, 0xD3F7, 0xBD5A, - 0xD3F8, 0xBD61, 0xD3F9, 0xBD62, 0xD3FA, 0xBD63, 0xD3FB, 0xBD64, - 0xD3FC, 0xC6FB, 0xD3FD, 0xC6FC, 0xD3FE, 0xBD65, 0xD3FF, 0xC6FD, - 0xD400, 0xBD66, 0xD401, 0xC6FE, 0xD402, 0xBD67, 0xD403, 0xBD68, - 0xD404, 0xBD69, 0xD405, 0xBD6A, 0xD406, 0xBD6B, 0xD407, 0xBD6C, - 0xD408, 0xC7A1, 0xD409, 0xBD6D, 0xD40A, 0xBD6E, 0xD40B, 0xBD6F, - 0xD40C, 0xBD70, 0xD40D, 0xBD71, 0xD40E, 0xBD72, 0xD40F, 0xBD73, - 0xD410, 0xBD74, 0xD411, 0xBD75, 0xD412, 0xBD76, 0xD413, 0xBD77, - 0xD414, 0xBD78, 0xD415, 0xBD79, 0xD416, 0xBD7A, 0xD417, 0xBD81, - 0xD418, 0xBD82, 0xD419, 0xBD83, 0xD41A, 0xBD84, 0xD41B, 0xBD85, - 0xD41C, 0xBD86, 0xD41D, 0xC7A2, 0xD41E, 0xBD87, 0xD41F, 0xBD88, - 0xD420, 0xBD89, 0xD421, 0xBD8A, 0xD422, 0xBD8B, 0xD423, 0xBD8C, - 0xD424, 0xBD8D, 0xD425, 0xBD8E, 0xD426, 0xBD8F, 0xD427, 0xBD90, - 0xD428, 0xBD91, 0xD429, 0xBD92, 0xD42A, 0xBD93, 0xD42B, 0xBD94, - 0xD42C, 0xBD95, 0xD42D, 0xBD96, 0xD42E, 0xBD97, 0xD42F, 0xBD98, - 0xD430, 0xBD99, 0xD431, 0xBD9A, 0xD432, 0xBD9B, 0xD433, 0xBD9C, - 0xD434, 0xBD9D, 0xD435, 0xBD9E, 0xD436, 0xBD9F, 0xD437, 0xBDA0, - 0xD438, 0xBE41, 0xD439, 0xBE42, 0xD43A, 0xBE43, 0xD43B, 0xBE44, - 0xD43C, 0xBE45, 0xD43D, 0xBE46, 0xD43E, 0xBE47, 0xD43F, 0xBE48, - 0xD440, 0xC7A3, 0xD441, 0xBE49, 0xD442, 0xBE4A, 0xD443, 0xBE4B, - 0xD444, 0xC7A4, 0xD445, 0xBE4C, 0xD446, 0xBE4D, 0xD447, 0xBE4E, - 0xD448, 0xBE4F, 0xD449, 0xBE50, 0xD44A, 0xBE51, 0xD44B, 0xBE52, - 0xD44C, 0xBE53, 0xD44D, 0xBE54, 0xD44E, 0xBE55, 0xD44F, 0xBE56, - 0xD450, 0xBE57, 0xD451, 0xBE58, 0xD452, 0xBE59, 0xD453, 0xBE5A, - 0xD454, 0xBE61, 0xD455, 0xBE62, 0xD456, 0xBE63, 0xD457, 0xBE64, - 0xD458, 0xBE65, 0xD459, 0xBE66, 0xD45A, 0xBE67, 0xD45B, 0xBE68, - 0xD45C, 0xC7A5, 0xD45D, 0xBE69, 0xD45E, 0xBE6A, 0xD45F, 0xBE6B, - 0xD460, 0xC7A6, 0xD461, 0xBE6C, 0xD462, 0xBE6D, 0xD463, 0xBE6E, - 0xD464, 0xC7A7, 0xD465, 0xBE6F, 0xD466, 0xBE70, 0xD467, 0xBE71, - 0xD468, 0xBE72, 0xD469, 0xBE73, 0xD46A, 0xBE74, 0xD46B, 0xBE75, - 0xD46C, 0xBE76, 0xD46D, 0xC7A8, 0xD46E, 0xBE77, 0xD46F, 0xC7A9, - 0xD470, 0xBE78, 0xD471, 0xBE79, 0xD472, 0xBE7A, 0xD473, 0xBE81, - 0xD474, 0xBE82, 0xD475, 0xBE83, 0xD476, 0xBE84, 0xD477, 0xBE85, - 0xD478, 0xC7AA, 0xD479, 0xC7AB, 0xD47A, 0xBE86, 0xD47B, 0xBE87, - 0xD47C, 0xC7AC, 0xD47D, 0xBE88, 0xD47E, 0xBE89, 0xD47F, 0xC7AD, - 0xD480, 0xC7AE, 0xD481, 0xBE8A, 0xD482, 0xC7AF, 0xD483, 0xBE8B, - 0xD484, 0xBE8C, 0xD485, 0xBE8D, 0xD486, 0xBE8E, 0xD487, 0xBE8F, - 0xD488, 0xC7B0, 0xD489, 0xC7B1, 0xD48A, 0xBE90, 0xD48B, 0xC7B2, - 0xD48C, 0xBE91, 0xD48D, 0xC7B3, 0xD48E, 0xBE92, 0xD48F, 0xBE93, - 0xD490, 0xBE94, 0xD491, 0xBE95, 0xD492, 0xBE96, 0xD493, 0xBE97, - 0xD494, 0xC7B4, 0xD495, 0xBE98, 0xD496, 0xBE99, 0xD497, 0xBE9A, - 0xD498, 0xBE9B, 0xD499, 0xBE9C, 0xD49A, 0xBE9D, 0xD49B, 0xBE9E, - 0xD49C, 0xBE9F, 0xD49D, 0xBEA0, 0xD49E, 0xBF41, 0xD49F, 0xBF42, - 0xD4A0, 0xBF43, 0xD4A1, 0xBF44, 0xD4A2, 0xBF45, 0xD4A3, 0xBF46, - 0xD4A4, 0xBF47, 0xD4A5, 0xBF48, 0xD4A6, 0xBF49, 0xD4A7, 0xBF4A, - 0xD4A8, 0xBF4B, 0xD4A9, 0xC7B5, 0xD4AA, 0xBF4C, 0xD4AB, 0xBF4D, - 0xD4AC, 0xBF4E, 0xD4AD, 0xBF4F, 0xD4AE, 0xBF50, 0xD4AF, 0xBF51, - 0xD4B0, 0xBF52, 0xD4B1, 0xBF53, 0xD4B2, 0xBF54, 0xD4B3, 0xBF55, - 0xD4B4, 0xBF56, 0xD4B5, 0xBF57, 0xD4B6, 0xBF58, 0xD4B7, 0xBF59, - 0xD4B8, 0xBF5A, 0xD4B9, 0xBF61, 0xD4BA, 0xBF62, 0xD4BB, 0xBF63, - 0xD4BC, 0xBF64, 0xD4BD, 0xBF65, 0xD4BE, 0xBF66, 0xD4BF, 0xBF67, - 0xD4C0, 0xBF68, 0xD4C1, 0xBF69, 0xD4C2, 0xBF6A, 0xD4C3, 0xBF6B, - 0xD4C4, 0xBF6C, 0xD4C5, 0xBF6D, 0xD4C6, 0xBF6E, 0xD4C7, 0xBF6F, - 0xD4C8, 0xBF70, 0xD4C9, 0xBF71, 0xD4CA, 0xBF72, 0xD4CB, 0xBF73, - 0xD4CC, 0xC7B6, 0xD4CD, 0xBF74, 0xD4CE, 0xBF75, 0xD4CF, 0xBF76, - 0xD4D0, 0xC7B7, 0xD4D1, 0xBF77, 0xD4D2, 0xBF78, 0xD4D3, 0xBF79, - 0xD4D4, 0xC7B8, 0xD4D5, 0xBF7A, 0xD4D6, 0xBF81, 0xD4D7, 0xBF82, - 0xD4D8, 0xBF83, 0xD4D9, 0xBF84, 0xD4DA, 0xBF85, 0xD4DB, 0xBF86, - 0xD4DC, 0xC7B9, 0xD4DD, 0xBF87, 0xD4DE, 0xBF88, 0xD4DF, 0xC7BA, - 0xD4E0, 0xBF89, 0xD4E1, 0xBF8A, 0xD4E2, 0xBF8B, 0xD4E3, 0xBF8C, - 0xD4E4, 0xBF8D, 0xD4E5, 0xBF8E, 0xD4E6, 0xBF8F, 0xD4E7, 0xBF90, - 0xD4E8, 0xC7BB, 0xD4E9, 0xBF91, 0xD4EA, 0xBF92, 0xD4EB, 0xBF93, - 0xD4EC, 0xC7BC, 0xD4ED, 0xBF94, 0xD4EE, 0xBF95, 0xD4EF, 0xBF96, - 0xD4F0, 0xC7BD, 0xD4F1, 0xBF97, 0xD4F2, 0xBF98, 0xD4F3, 0xBF99, - 0xD4F4, 0xBF9A, 0xD4F5, 0xBF9B, 0xD4F6, 0xBF9C, 0xD4F7, 0xBF9D, - 0xD4F8, 0xC7BE, 0xD4F9, 0xBF9E, 0xD4FA, 0xBF9F, 0xD4FB, 0xC7BF, - 0xD4FC, 0xBFA0, 0xD4FD, 0xC7C0, 0xD4FE, 0xC041, 0xD4FF, 0xC042, - 0xD500, 0xC043, 0xD501, 0xC044, 0xD502, 0xC045, 0xD503, 0xC046, - 0xD504, 0xC7C1, 0xD505, 0xC047, 0xD506, 0xC048, 0xD507, 0xC049, - 0xD508, 0xC7C2, 0xD509, 0xC04A, 0xD50A, 0xC04B, 0xD50B, 0xC04C, - 0xD50C, 0xC7C3, 0xD50D, 0xC04D, 0xD50E, 0xC04E, 0xD50F, 0xC04F, - 0xD510, 0xC050, 0xD511, 0xC051, 0xD512, 0xC052, 0xD513, 0xC053, - 0xD514, 0xC7C4, 0xD515, 0xC7C5, 0xD516, 0xC054, 0xD517, 0xC7C6, - 0xD518, 0xC055, 0xD519, 0xC056, 0xD51A, 0xC057, 0xD51B, 0xC058, - 0xD51C, 0xC059, 0xD51D, 0xC05A, 0xD51E, 0xC061, 0xD51F, 0xC062, - 0xD520, 0xC063, 0xD521, 0xC064, 0xD522, 0xC065, 0xD523, 0xC066, - 0xD524, 0xC067, 0xD525, 0xC068, 0xD526, 0xC069, 0xD527, 0xC06A, - 0xD528, 0xC06B, 0xD529, 0xC06C, 0xD52A, 0xC06D, 0xD52B, 0xC06E, - 0xD52C, 0xC06F, 0xD52D, 0xC070, 0xD52E, 0xC071, 0xD52F, 0xC072, - 0xD530, 0xC073, 0xD531, 0xC074, 0xD532, 0xC075, 0xD533, 0xC076, - 0xD534, 0xC077, 0xD535, 0xC078, 0xD536, 0xC079, 0xD537, 0xC07A, - 0xD538, 0xC081, 0xD539, 0xC082, 0xD53A, 0xC083, 0xD53B, 0xC084, - 0xD53C, 0xC7C7, 0xD53D, 0xC7C8, 0xD53E, 0xC085, 0xD53F, 0xC086, - 0xD540, 0xC7C9, 0xD541, 0xC087, 0xD542, 0xC088, 0xD543, 0xC089, - 0xD544, 0xC7CA, 0xD545, 0xC08A, 0xD546, 0xC08B, 0xD547, 0xC08C, - 0xD548, 0xC08D, 0xD549, 0xC08E, 0xD54A, 0xC08F, 0xD54B, 0xC090, - 0xD54C, 0xC7CB, 0xD54D, 0xC7CC, 0xD54E, 0xC091, 0xD54F, 0xC7CD, - 0xD550, 0xC092, 0xD551, 0xC7CE, 0xD552, 0xC093, 0xD553, 0xC094, - 0xD554, 0xC095, 0xD555, 0xC096, 0xD556, 0xC097, 0xD557, 0xC098, - 0xD558, 0xC7CF, 0xD559, 0xC7D0, 0xD55A, 0xC099, 0xD55B, 0xC09A, - 0xD55C, 0xC7D1, 0xD55D, 0xC09B, 0xD55E, 0xC09C, 0xD55F, 0xC09D, - 0xD560, 0xC7D2, 0xD561, 0xC09E, 0xD562, 0xC09F, 0xD563, 0xC0A0, - 0xD564, 0xC141, 0xD565, 0xC7D3, 0xD566, 0xC142, 0xD567, 0xC143, - 0xD568, 0xC7D4, 0xD569, 0xC7D5, 0xD56A, 0xC144, 0xD56B, 0xC7D6, - 0xD56C, 0xC145, 0xD56D, 0xC7D7, 0xD56E, 0xC146, 0xD56F, 0xC147, - 0xD570, 0xC148, 0xD571, 0xC149, 0xD572, 0xC14A, 0xD573, 0xC14B, - 0xD574, 0xC7D8, 0xD575, 0xC7D9, 0xD576, 0xC14C, 0xD577, 0xC14D, - 0xD578, 0xC7DA, 0xD579, 0xC14E, 0xD57A, 0xC14F, 0xD57B, 0xC150, - 0xD57C, 0xC7DB, 0xD57D, 0xC151, 0xD57E, 0xC152, 0xD57F, 0xC153, - 0xD580, 0xC154, 0xD581, 0xC155, 0xD582, 0xC156, 0xD583, 0xC157, - 0xD584, 0xC7DC, 0xD585, 0xC7DD, 0xD586, 0xC158, 0xD587, 0xC7DE, - 0xD588, 0xC7DF, 0xD589, 0xC7E0, 0xD58A, 0xC159, 0xD58B, 0xC15A, - 0xD58C, 0xC161, 0xD58D, 0xC162, 0xD58E, 0xC163, 0xD58F, 0xC164, - 0xD590, 0xC7E1, 0xD591, 0xC165, 0xD592, 0xC166, 0xD593, 0xC167, - 0xD594, 0xC168, 0xD595, 0xC169, 0xD596, 0xC16A, 0xD597, 0xC16B, - 0xD598, 0xC16C, 0xD599, 0xC16D, 0xD59A, 0xC16E, 0xD59B, 0xC16F, - 0xD59C, 0xC170, 0xD59D, 0xC171, 0xD59E, 0xC172, 0xD59F, 0xC173, - 0xD5A0, 0xC174, 0xD5A1, 0xC175, 0xD5A2, 0xC176, 0xD5A3, 0xC177, - 0xD5A4, 0xC178, 0xD5A5, 0xC7E2, 0xD5A6, 0xC179, 0xD5A7, 0xC17A, - 0xD5A8, 0xC181, 0xD5A9, 0xC182, 0xD5AA, 0xC183, 0xD5AB, 0xC184, - 0xD5AC, 0xC185, 0xD5AD, 0xC186, 0xD5AE, 0xC187, 0xD5AF, 0xC188, - 0xD5B0, 0xC189, 0xD5B1, 0xC18A, 0xD5B2, 0xC18B, 0xD5B3, 0xC18C, - 0xD5B4, 0xC18D, 0xD5B5, 0xC18E, 0xD5B6, 0xC18F, 0xD5B7, 0xC190, - 0xD5B8, 0xC191, 0xD5B9, 0xC192, 0xD5BA, 0xC193, 0xD5BB, 0xC194, - 0xD5BC, 0xC195, 0xD5BD, 0xC196, 0xD5BE, 0xC197, 0xD5BF, 0xC198, - 0xD5C0, 0xC199, 0xD5C1, 0xC19A, 0xD5C2, 0xC19B, 0xD5C3, 0xC19C, - 0xD5C4, 0xC19D, 0xD5C5, 0xC19E, 0xD5C6, 0xC19F, 0xD5C7, 0xC1A0, - 0xD5C8, 0xC7E3, 0xD5C9, 0xC7E4, 0xD5CA, 0xC241, 0xD5CB, 0xC242, - 0xD5CC, 0xC7E5, 0xD5CD, 0xC243, 0xD5CE, 0xC244, 0xD5CF, 0xC245, - 0xD5D0, 0xC7E6, 0xD5D1, 0xC246, 0xD5D2, 0xC7E7, 0xD5D3, 0xC247, - 0xD5D4, 0xC248, 0xD5D5, 0xC249, 0xD5D6, 0xC24A, 0xD5D7, 0xC24B, - 0xD5D8, 0xC7E8, 0xD5D9, 0xC7E9, 0xD5DA, 0xC24C, 0xD5DB, 0xC7EA, - 0xD5DC, 0xC24D, 0xD5DD, 0xC7EB, 0xD5DE, 0xC24E, 0xD5DF, 0xC24F, - 0xD5E0, 0xC250, 0xD5E1, 0xC251, 0xD5E2, 0xC252, 0xD5E3, 0xC253, - 0xD5E4, 0xC7EC, 0xD5E5, 0xC7ED, 0xD5E6, 0xC254, 0xD5E7, 0xC255, - 0xD5E8, 0xC7EE, 0xD5E9, 0xC256, 0xD5EA, 0xC257, 0xD5EB, 0xC258, - 0xD5EC, 0xC7EF, 0xD5ED, 0xC259, 0xD5EE, 0xC25A, 0xD5EF, 0xC261, - 0xD5F0, 0xC262, 0xD5F1, 0xC263, 0xD5F2, 0xC264, 0xD5F3, 0xC265, - 0xD5F4, 0xC7F0, 0xD5F5, 0xC7F1, 0xD5F6, 0xC266, 0xD5F7, 0xC7F2, - 0xD5F8, 0xC267, 0xD5F9, 0xC7F3, 0xD5FA, 0xC268, 0xD5FB, 0xC269, - 0xD5FC, 0xC26A, 0xD5FD, 0xC26B, 0xD5FE, 0xC26C, 0xD5FF, 0xC26D, - 0xD600, 0xC7F4, 0xD601, 0xC7F5, 0xD602, 0xC26E, 0xD603, 0xC26F, - 0xD604, 0xC7F6, 0xD605, 0xC270, 0xD606, 0xC271, 0xD607, 0xC272, - 0xD608, 0xC7F7, 0xD609, 0xC273, 0xD60A, 0xC274, 0xD60B, 0xC275, - 0xD60C, 0xC276, 0xD60D, 0xC277, 0xD60E, 0xC278, 0xD60F, 0xC279, - 0xD610, 0xC7F8, 0xD611, 0xC7F9, 0xD612, 0xC27A, 0xD613, 0xC7FA, - 0xD614, 0xC7FB, 0xD615, 0xC7FC, 0xD616, 0xC281, 0xD617, 0xC282, - 0xD618, 0xC283, 0xD619, 0xC284, 0xD61A, 0xC285, 0xD61B, 0xC286, - 0xD61C, 0xC7FD, 0xD61D, 0xC287, 0xD61E, 0xC288, 0xD61F, 0xC289, - 0xD620, 0xC7FE, 0xD621, 0xC28A, 0xD622, 0xC28B, 0xD623, 0xC28C, - 0xD624, 0xC8A1, 0xD625, 0xC28D, 0xD626, 0xC28E, 0xD627, 0xC28F, - 0xD628, 0xC290, 0xD629, 0xC291, 0xD62A, 0xC292, 0xD62B, 0xC293, - 0xD62C, 0xC294, 0xD62D, 0xC8A2, 0xD62E, 0xC295, 0xD62F, 0xC296, - 0xD630, 0xC297, 0xD631, 0xC298, 0xD632, 0xC299, 0xD633, 0xC29A, - 0xD634, 0xC29B, 0xD635, 0xC29C, 0xD636, 0xC29D, 0xD637, 0xC29E, - 0xD638, 0xC8A3, 0xD639, 0xC8A4, 0xD63A, 0xC29F, 0xD63B, 0xC2A0, - 0xD63C, 0xC8A5, 0xD63D, 0xC341, 0xD63E, 0xC342, 0xD63F, 0xC343, - 0xD640, 0xC8A6, 0xD641, 0xC344, 0xD642, 0xC345, 0xD643, 0xC346, - 0xD644, 0xC347, 0xD645, 0xC8A7, 0xD646, 0xC348, 0xD647, 0xC349, - 0xD648, 0xC8A8, 0xD649, 0xC8A9, 0xD64A, 0xC34A, 0xD64B, 0xC8AA, - 0xD64C, 0xC34B, 0xD64D, 0xC8AB, 0xD64E, 0xC34C, 0xD64F, 0xC34D, - 0xD650, 0xC34E, 0xD651, 0xC8AC, 0xD652, 0xC34F, 0xD653, 0xC350, - 0xD654, 0xC8AD, 0xD655, 0xC8AE, 0xD656, 0xC351, 0xD657, 0xC352, - 0xD658, 0xC8AF, 0xD659, 0xC353, 0xD65A, 0xC354, 0xD65B, 0xC355, - 0xD65C, 0xC8B0, 0xD65D, 0xC356, 0xD65E, 0xC357, 0xD65F, 0xC358, - 0xD660, 0xC359, 0xD661, 0xC35A, 0xD662, 0xC361, 0xD663, 0xC362, - 0xD664, 0xC363, 0xD665, 0xC364, 0xD666, 0xC365, 0xD667, 0xC8B1, - 0xD668, 0xC366, 0xD669, 0xC8B2, 0xD66A, 0xC367, 0xD66B, 0xC368, - 0xD66C, 0xC369, 0xD66D, 0xC36A, 0xD66E, 0xC36B, 0xD66F, 0xC36C, - 0xD670, 0xC8B3, 0xD671, 0xC8B4, 0xD672, 0xC36D, 0xD673, 0xC36E, - 0xD674, 0xC8B5, 0xD675, 0xC36F, 0xD676, 0xC370, 0xD677, 0xC371, - 0xD678, 0xC372, 0xD679, 0xC373, 0xD67A, 0xC374, 0xD67B, 0xC375, - 0xD67C, 0xC376, 0xD67D, 0xC377, 0xD67E, 0xC378, 0xD67F, 0xC379, - 0xD680, 0xC37A, 0xD681, 0xC381, 0xD682, 0xC382, 0xD683, 0xC8B6, - 0xD684, 0xC383, 0xD685, 0xC8B7, 0xD686, 0xC384, 0xD687, 0xC385, - 0xD688, 0xC386, 0xD689, 0xC387, 0xD68A, 0xC388, 0xD68B, 0xC389, - 0xD68C, 0xC8B8, 0xD68D, 0xC8B9, 0xD68E, 0xC38A, 0xD68F, 0xC38B, - 0xD690, 0xC8BA, 0xD691, 0xC38C, 0xD692, 0xC38D, 0xD693, 0xC38E, - 0xD694, 0xC8BB, 0xD695, 0xC38F, 0xD696, 0xC390, 0xD697, 0xC391, - 0xD698, 0xC392, 0xD699, 0xC393, 0xD69A, 0xC394, 0xD69B, 0xC395, - 0xD69C, 0xC396, 0xD69D, 0xC8BC, 0xD69E, 0xC397, 0xD69F, 0xC8BD, - 0xD6A0, 0xC398, 0xD6A1, 0xC8BE, 0xD6A2, 0xC399, 0xD6A3, 0xC39A, - 0xD6A4, 0xC39B, 0xD6A5, 0xC39C, 0xD6A6, 0xC39D, 0xD6A7, 0xC39E, - 0xD6A8, 0xC8BF, 0xD6A9, 0xC39F, 0xD6AA, 0xC3A0, 0xD6AB, 0xC441, - 0xD6AC, 0xC8C0, 0xD6AD, 0xC442, 0xD6AE, 0xC443, 0xD6AF, 0xC444, - 0xD6B0, 0xC8C1, 0xD6B1, 0xC445, 0xD6B2, 0xC446, 0xD6B3, 0xC447, - 0xD6B4, 0xC448, 0xD6B5, 0xC449, 0xD6B6, 0xC44A, 0xD6B7, 0xC44B, - 0xD6B8, 0xC44C, 0xD6B9, 0xC8C2, 0xD6BA, 0xC44D, 0xD6BB, 0xC8C3, - 0xD6BC, 0xC44E, 0xD6BD, 0xC44F, 0xD6BE, 0xC450, 0xD6BF, 0xC451, - 0xD6C0, 0xC452, 0xD6C1, 0xC453, 0xD6C2, 0xC454, 0xD6C3, 0xC455, - 0xD6C4, 0xC8C4, 0xD6C5, 0xC8C5, 0xD6C6, 0xC456, 0xD6C7, 0xC457, - 0xD6C8, 0xC8C6, 0xD6C9, 0xC458, 0xD6CA, 0xC459, 0xD6CB, 0xC45A, - 0xD6CC, 0xC8C7, 0xD6CD, 0xC461, 0xD6CE, 0xC462, 0xD6CF, 0xC463, - 0xD6D0, 0xC464, 0xD6D1, 0xC8C8, 0xD6D2, 0xC465, 0xD6D3, 0xC466, - 0xD6D4, 0xC8C9, 0xD6D5, 0xC467, 0xD6D6, 0xC468, 0xD6D7, 0xC8CA, - 0xD6D8, 0xC469, 0xD6D9, 0xC8CB, 0xD6DA, 0xC46A, 0xD6DB, 0xC46B, - 0xD6DC, 0xC46C, 0xD6DD, 0xC46D, 0xD6DE, 0xC46E, 0xD6DF, 0xC46F, - 0xD6E0, 0xC8CC, 0xD6E1, 0xC470, 0xD6E2, 0xC471, 0xD6E3, 0xC472, - 0xD6E4, 0xC8CD, 0xD6E5, 0xC473, 0xD6E6, 0xC474, 0xD6E7, 0xC475, - 0xD6E8, 0xC8CE, 0xD6E9, 0xC476, 0xD6EA, 0xC477, 0xD6EB, 0xC478, - 0xD6EC, 0xC479, 0xD6ED, 0xC47A, 0xD6EE, 0xC481, 0xD6EF, 0xC482, - 0xD6F0, 0xC8CF, 0xD6F1, 0xC483, 0xD6F2, 0xC484, 0xD6F3, 0xC485, - 0xD6F4, 0xC486, 0xD6F5, 0xC8D0, 0xD6F6, 0xC487, 0xD6F7, 0xC488, - 0xD6F8, 0xC489, 0xD6F9, 0xC48A, 0xD6FA, 0xC48B, 0xD6FB, 0xC48C, - 0xD6FC, 0xC8D1, 0xD6FD, 0xC8D2, 0xD6FE, 0xC48D, 0xD6FF, 0xC48E, - 0xD700, 0xC8D3, 0xD701, 0xC48F, 0xD702, 0xC490, 0xD703, 0xC491, - 0xD704, 0xC8D4, 0xD705, 0xC492, 0xD706, 0xC493, 0xD707, 0xC494, - 0xD708, 0xC495, 0xD709, 0xC496, 0xD70A, 0xC497, 0xD70B, 0xC498, - 0xD70C, 0xC499, 0xD70D, 0xC49A, 0xD70E, 0xC49B, 0xD70F, 0xC49C, - 0xD710, 0xC49D, 0xD711, 0xC8D5, 0xD712, 0xC49E, 0xD713, 0xC49F, - 0xD714, 0xC4A0, 0xD715, 0xC541, 0xD716, 0xC542, 0xD717, 0xC543, - 0xD718, 0xC8D6, 0xD719, 0xC8D7, 0xD71A, 0xC544, 0xD71B, 0xC545, - 0xD71C, 0xC8D8, 0xD71D, 0xC546, 0xD71E, 0xC547, 0xD71F, 0xC548, - 0xD720, 0xC8D9, 0xD721, 0xC549, 0xD722, 0xC54A, 0xD723, 0xC54B, - 0xD724, 0xC54C, 0xD725, 0xC54D, 0xD726, 0xC54E, 0xD727, 0xC54F, - 0xD728, 0xC8DA, 0xD729, 0xC8DB, 0xD72A, 0xC550, 0xD72B, 0xC8DC, - 0xD72C, 0xC551, 0xD72D, 0xC8DD, 0xD72E, 0xC552, 0xD72F, 0xC553, - 0xD730, 0xC554, 0xD731, 0xC555, 0xD732, 0xC556, 0xD733, 0xC557, - 0xD734, 0xC8DE, 0xD735, 0xC8DF, 0xD736, 0xC558, 0xD737, 0xC559, - 0xD738, 0xC8E0, 0xD739, 0xC55A, 0xD73A, 0xC561, 0xD73B, 0xC562, - 0xD73C, 0xC8E1, 0xD73D, 0xC563, 0xD73E, 0xC564, 0xD73F, 0xC565, - 0xD740, 0xC566, 0xD741, 0xC567, 0xD742, 0xC568, 0xD743, 0xC569, - 0xD744, 0xC8E2, 0xD745, 0xC56A, 0xD746, 0xC56B, 0xD747, 0xC8E3, - 0xD748, 0xC56C, 0xD749, 0xC8E4, 0xD74A, 0xC56D, 0xD74B, 0xC56E, - 0xD74C, 0xC56F, 0xD74D, 0xC570, 0xD74E, 0xC571, 0xD74F, 0xC572, - 0xD750, 0xC8E5, 0xD751, 0xC8E6, 0xD752, 0xC573, 0xD753, 0xC574, - 0xD754, 0xC8E7, 0xD755, 0xC575, 0xD756, 0xC8E8, 0xD757, 0xC8E9, - 0xD758, 0xC8EA, 0xD759, 0xC8EB, 0xD75A, 0xC576, 0xD75B, 0xC577, - 0xD75C, 0xC578, 0xD75D, 0xC579, 0xD75E, 0xC57A, 0xD75F, 0xC581, - 0xD760, 0xC8EC, 0xD761, 0xC8ED, 0xD762, 0xC582, 0xD763, 0xC8EE, - 0xD764, 0xC583, 0xD765, 0xC8EF, 0xD766, 0xC584, 0xD767, 0xC585, - 0xD768, 0xC586, 0xD769, 0xC8F0, 0xD76A, 0xC587, 0xD76B, 0xC588, - 0xD76C, 0xC8F1, 0xD76D, 0xC589, 0xD76E, 0xC58A, 0xD76F, 0xC58B, - 0xD770, 0xC8F2, 0xD771, 0xC58C, 0xD772, 0xC58D, 0xD773, 0xC58E, - 0xD774, 0xC8F3, 0xD775, 0xC58F, 0xD776, 0xC590, 0xD777, 0xC591, - 0xD778, 0xC592, 0xD779, 0xC593, 0xD77A, 0xC594, 0xD77B, 0xC595, - 0xD77C, 0xC8F4, 0xD77D, 0xC8F5, 0xD77E, 0xC596, 0xD77F, 0xC597, - 0xD780, 0xC598, 0xD781, 0xC8F6, 0xD782, 0xC599, 0xD783, 0xC59A, - 0xD784, 0xC59B, 0xD785, 0xC59C, 0xD786, 0xC59D, 0xD787, 0xC59E, - 0xD788, 0xC8F7, 0xD789, 0xC8F8, 0xD78A, 0xC59F, 0xD78B, 0xC5A0, - 0xD78C, 0xC8F9, 0xD78D, 0xC641, 0xD78E, 0xC642, 0xD78F, 0xC643, - 0xD790, 0xC8FA, 0xD791, 0xC644, 0xD792, 0xC645, 0xD793, 0xC646, - 0xD794, 0xC647, 0xD795, 0xC648, 0xD796, 0xC649, 0xD797, 0xC64A, - 0xD798, 0xC8FB, 0xD799, 0xC8FC, 0xD79A, 0xC64B, 0xD79B, 0xC8FD, - 0xD79C, 0xC64C, 0xD79D, 0xC8FE, 0xD79E, 0xC64D, 0xD79F, 0xC64E, - 0xD7A0, 0xC64F, 0xD7A1, 0xC650, 0xD7A2, 0xC651, 0xD7A3, 0xC652, - 0xF900, 0xCBD0, 0xF901, 0xCBD6, 0xF902, 0xCBE7, 0xF903, 0xCDCF, - 0xF904, 0xCDE8, 0xF905, 0xCEAD, 0xF906, 0xCFFB, 0xF907, 0xD0A2, - 0xF908, 0xD0B8, 0xF909, 0xD0D0, 0xF90A, 0xD0DD, 0xF90B, 0xD1D4, - 0xF90C, 0xD1D5, 0xF90D, 0xD1D8, 0xF90E, 0xD1DB, 0xF90F, 0xD1DC, - 0xF910, 0xD1DD, 0xF911, 0xD1DE, 0xF912, 0xD1DF, 0xF913, 0xD1E0, - 0xF914, 0xD1E2, 0xF915, 0xD1E3, 0xF916, 0xD1E4, 0xF917, 0xD1E5, - 0xF918, 0xD1E6, 0xF919, 0xD1E8, 0xF91A, 0xD1E9, 0xF91B, 0xD1EA, - 0xF91C, 0xD1EB, 0xF91D, 0xD1ED, 0xF91E, 0xD1EF, 0xF91F, 0xD1F0, - 0xF920, 0xD1F2, 0xF921, 0xD1F6, 0xF922, 0xD1FA, 0xF923, 0xD1FC, - 0xF924, 0xD1FD, 0xF925, 0xD1FE, 0xF926, 0xD2A2, 0xF927, 0xD2A3, - 0xF928, 0xD2A7, 0xF929, 0xD2A8, 0xF92A, 0xD2A9, 0xF92B, 0xD2AA, - 0xF92C, 0xD2AB, 0xF92D, 0xD2AD, 0xF92E, 0xD2B2, 0xF92F, 0xD2BE, - 0xF930, 0xD2C2, 0xF931, 0xD2C3, 0xF932, 0xD2C4, 0xF933, 0xD2C6, - 0xF934, 0xD2C7, 0xF935, 0xD2C8, 0xF936, 0xD2C9, 0xF937, 0xD2CA, - 0xF938, 0xD2CB, 0xF939, 0xD2CD, 0xF93A, 0xD2CE, 0xF93B, 0xD2CF, - 0xF93C, 0xD2D0, 0xF93D, 0xD2D1, 0xF93E, 0xD2D2, 0xF93F, 0xD2D3, - 0xF940, 0xD2D4, 0xF941, 0xD2D5, 0xF942, 0xD2D6, 0xF943, 0xD2D7, - 0xF944, 0xD2D9, 0xF945, 0xD2DA, 0xF946, 0xD2DE, 0xF947, 0xD2DF, - 0xF948, 0xD2E1, 0xF949, 0xD2E2, 0xF94A, 0xD2E4, 0xF94B, 0xD2E5, - 0xF94C, 0xD2E6, 0xF94D, 0xD2E7, 0xF94E, 0xD2E8, 0xF94F, 0xD2E9, - 0xF950, 0xD2EA, 0xF951, 0xD2EB, 0xF952, 0xD2F0, 0xF953, 0xD2F1, - 0xF954, 0xD2F2, 0xF955, 0xD2F3, 0xF956, 0xD2F4, 0xF957, 0xD2F5, - 0xF958, 0xD2F7, 0xF959, 0xD2F8, 0xF95A, 0xD4E6, 0xF95B, 0xD4FC, - 0xF95C, 0xD5A5, 0xF95D, 0xD5AB, 0xF95E, 0xD5AE, 0xF95F, 0xD6B8, - 0xF960, 0xD6CD, 0xF961, 0xD7CB, 0xF962, 0xD7E4, 0xF963, 0xDBC5, - 0xF964, 0xDBE4, 0xF965, 0xDCA5, 0xF966, 0xDDA5, 0xF967, 0xDDD5, - 0xF968, 0xDDF4, 0xF969, 0xDEFC, 0xF96A, 0xDEFE, 0xF96B, 0xDFB3, - 0xF96C, 0xDFE1, 0xF96D, 0xDFE8, 0xF96E, 0xE0F1, 0xF96F, 0xE1AD, - 0xF970, 0xE1ED, 0xF971, 0xE3F5, 0xF972, 0xE4A1, 0xF973, 0xE4A9, - 0xF974, 0xE5AE, 0xF975, 0xE5B1, 0xF976, 0xE5B2, 0xF977, 0xE5B9, - 0xF978, 0xE5BB, 0xF979, 0xE5BC, 0xF97A, 0xE5C4, 0xF97B, 0xE5CE, - 0xF97C, 0xE5D0, 0xF97D, 0xE5D2, 0xF97E, 0xE5D6, 0xF97F, 0xE5FA, - 0xF980, 0xE5FB, 0xF981, 0xE5FC, 0xF982, 0xE5FE, 0xF983, 0xE6A1, - 0xF984, 0xE6A4, 0xF985, 0xE6A7, 0xF986, 0xE6AD, 0xF987, 0xE6AF, - 0xF988, 0xE6B0, 0xF989, 0xE6B1, 0xF98A, 0xE6B3, 0xF98B, 0xE6B7, - 0xF98C, 0xE6B8, 0xF98D, 0xE6BC, 0xF98E, 0xE6C4, 0xF98F, 0xE6C6, - 0xF990, 0xE6C7, 0xF991, 0xE6CA, 0xF992, 0xE6D2, 0xF993, 0xE6D6, - 0xF994, 0xE6D9, 0xF995, 0xE6DC, 0xF996, 0xE6DF, 0xF997, 0xE6E1, - 0xF998, 0xE6E4, 0xF999, 0xE6E5, 0xF99A, 0xE6E6, 0xF99B, 0xE6E8, - 0xF99C, 0xE6EA, 0xF99D, 0xE6EB, 0xF99E, 0xE6EC, 0xF99F, 0xE6EF, - 0xF9A0, 0xE6F1, 0xF9A1, 0xE6F2, 0xF9A2, 0xE6F5, 0xF9A3, 0xE6F6, - 0xF9A4, 0xE6F7, 0xF9A5, 0xE6F9, 0xF9A6, 0xE7A1, 0xF9A7, 0xE7A6, - 0xF9A8, 0xE7A9, 0xF9A9, 0xE7AA, 0xF9AA, 0xE7AC, 0xF9AB, 0xE7AD, - 0xF9AC, 0xE7B0, 0xF9AD, 0xE7BF, 0xF9AE, 0xE7C1, 0xF9AF, 0xE7C6, - 0xF9B0, 0xE7C7, 0xF9B1, 0xE7CB, 0xF9B2, 0xE7CD, 0xF9B3, 0xE7CF, - 0xF9B4, 0xE7D0, 0xF9B5, 0xE7D3, 0xF9B6, 0xE7DF, 0xF9B7, 0xE7E4, - 0xF9B8, 0xE7E6, 0xF9B9, 0xE7F7, 0xF9BA, 0xE8E7, 0xF9BB, 0xE8E8, - 0xF9BC, 0xE8F0, 0xF9BD, 0xE8F1, 0xF9BE, 0xE8F7, 0xF9BF, 0xE8F9, - 0xF9C0, 0xE8FB, 0xF9C1, 0xE8FE, 0xF9C2, 0xE9A7, 0xF9C3, 0xE9AC, - 0xF9C4, 0xE9CC, 0xF9C5, 0xE9F7, 0xF9C6, 0xEAC1, 0xF9C7, 0xEAE5, - 0xF9C8, 0xEAF4, 0xF9C9, 0xEAF7, 0xF9CA, 0xEAFC, 0xF9CB, 0xEAFE, - 0xF9CC, 0xEBA4, 0xF9CD, 0xEBA7, 0xF9CE, 0xEBA9, 0xF9CF, 0xEBAA, - 0xF9D0, 0xEBBA, 0xF9D1, 0xEBBB, 0xF9D2, 0xEBBD, 0xF9D3, 0xEBC1, - 0xF9D4, 0xEBC2, 0xF9D5, 0xEBC6, 0xF9D6, 0xEBC7, 0xF9D7, 0xEBCC, - 0xF9D8, 0xEBCF, 0xF9D9, 0xEBD0, 0xF9DA, 0xEBD1, 0xF9DB, 0xEBD2, - 0xF9DC, 0xEBD8, 0xF9DD, 0xECA6, 0xF9DE, 0xECA7, 0xF9DF, 0xECAA, - 0xF9E0, 0xECAF, 0xF9E1, 0xECB0, 0xF9E2, 0xECB1, 0xF9E3, 0xECB2, - 0xF9E4, 0xECB5, 0xF9E5, 0xECB8, 0xF9E6, 0xECBA, 0xF9E7, 0xECC0, - 0xF9E8, 0xECC1, 0xF9E9, 0xECC5, 0xF9EA, 0xECC6, 0xF9EB, 0xECC9, - 0xF9EC, 0xECCA, 0xF9ED, 0xECD5, 0xF9EE, 0xECDD, 0xF9EF, 0xECDE, - 0xF9F0, 0xECE1, 0xF9F1, 0xECE4, 0xF9F2, 0xECE7, 0xF9F3, 0xECE8, - 0xF9F4, 0xECF7, 0xF9F5, 0xECF8, 0xF9F6, 0xECFA, 0xF9F7, 0xEDA1, - 0xF9F8, 0xEDA2, 0xF9F9, 0xEDA3, 0xF9FA, 0xEDEE, 0xF9FB, 0xEEDB, - 0xF9FC, 0xF2BD, 0xF9FD, 0xF2FA, 0xF9FE, 0xF3B1, 0xF9FF, 0xF4A7, - 0xFA00, 0xF4EE, 0xFA01, 0xF6F4, 0xFA02, 0xF6F6, 0xFA03, 0xF7B8, - 0xFA04, 0xF7C8, 0xFA05, 0xF7D3, 0xFA06, 0xF8DB, 0xFA07, 0xF8F0, - 0xFA08, 0xFAA1, 0xFA09, 0xFAA2, 0xFA0A, 0xFAE6, 0xFA0B, 0xFCA9, - 0xFF01, 0xA3A1, 0xFF02, 0xA3A2, 0xFF03, 0xA3A3, 0xFF04, 0xA3A4, - 0xFF05, 0xA3A5, 0xFF06, 0xA3A6, 0xFF07, 0xA3A7, 0xFF08, 0xA3A8, - 0xFF09, 0xA3A9, 0xFF0A, 0xA3AA, 0xFF0B, 0xA3AB, 0xFF0C, 0xA3AC, - 0xFF0D, 0xA3AD, 0xFF0E, 0xA3AE, 0xFF0F, 0xA3AF, 0xFF10, 0xA3B0, - 0xFF11, 0xA3B1, 0xFF12, 0xA3B2, 0xFF13, 0xA3B3, 0xFF14, 0xA3B4, - 0xFF15, 0xA3B5, 0xFF16, 0xA3B6, 0xFF17, 0xA3B7, 0xFF18, 0xA3B8, - 0xFF19, 0xA3B9, 0xFF1A, 0xA3BA, 0xFF1B, 0xA3BB, 0xFF1C, 0xA3BC, - 0xFF1D, 0xA3BD, 0xFF1E, 0xA3BE, 0xFF1F, 0xA3BF, 0xFF20, 0xA3C0, - 0xFF21, 0xA3C1, 0xFF22, 0xA3C2, 0xFF23, 0xA3C3, 0xFF24, 0xA3C4, - 0xFF25, 0xA3C5, 0xFF26, 0xA3C6, 0xFF27, 0xA3C7, 0xFF28, 0xA3C8, - 0xFF29, 0xA3C9, 0xFF2A, 0xA3CA, 0xFF2B, 0xA3CB, 0xFF2C, 0xA3CC, - 0xFF2D, 0xA3CD, 0xFF2E, 0xA3CE, 0xFF2F, 0xA3CF, 0xFF30, 0xA3D0, - 0xFF31, 0xA3D1, 0xFF32, 0xA3D2, 0xFF33, 0xA3D3, 0xFF34, 0xA3D4, - 0xFF35, 0xA3D5, 0xFF36, 0xA3D6, 0xFF37, 0xA3D7, 0xFF38, 0xA3D8, - 0xFF39, 0xA3D9, 0xFF3A, 0xA3DA, 0xFF3B, 0xA3DB, 0xFF3C, 0xA1AC, - 0xFF3D, 0xA3DD, 0xFF3E, 0xA3DE, 0xFF3F, 0xA3DF, 0xFF40, 0xA3E0, - 0xFF41, 0xA3E1, 0xFF42, 0xA3E2, 0xFF43, 0xA3E3, 0xFF44, 0xA3E4, - 0xFF45, 0xA3E5, 0xFF46, 0xA3E6, 0xFF47, 0xA3E7, 0xFF48, 0xA3E8, - 0xFF49, 0xA3E9, 0xFF4A, 0xA3EA, 0xFF4B, 0xA3EB, 0xFF4C, 0xA3EC, - 0xFF4D, 0xA3ED, 0xFF4E, 0xA3EE, 0xFF4F, 0xA3EF, 0xFF50, 0xA3F0, - 0xFF51, 0xA3F1, 0xFF52, 0xA3F2, 0xFF53, 0xA3F3, 0xFF54, 0xA3F4, - 0xFF55, 0xA3F5, 0xFF56, 0xA3F6, 0xFF57, 0xA3F7, 0xFF58, 0xA3F8, - 0xFF59, 0xA3F9, 0xFF5A, 0xA3FA, 0xFF5B, 0xA3FB, 0xFF5C, 0xA3FC, - 0xFF5D, 0xA3FD, 0xFF5E, 0xA2A6, 0xFFE0, 0xA1CB, 0xFFE1, 0xA1CC, - 0xFFE2, 0xA1FE, 0xFFE3, 0xA3FE, 0xFFE5, 0xA1CD, 0xFFE6, 0xA3DC, - 0, 0 -}; - -static -const WCHAR oem2uni[] = { -/* OEM - Unicode, OEM - Unicode, OEM - Unicode, OEM - Unicode */ - 0x8141, 0xAC02, 0x8142, 0xAC03, 0x8143, 0xAC05, 0x8144, 0xAC06, - 0x8145, 0xAC0B, 0x8146, 0xAC0C, 0x8147, 0xAC0D, 0x8148, 0xAC0E, - 0x8149, 0xAC0F, 0x814A, 0xAC18, 0x814B, 0xAC1E, 0x814C, 0xAC1F, - 0x814D, 0xAC21, 0x814E, 0xAC22, 0x814F, 0xAC23, 0x8150, 0xAC25, - 0x8151, 0xAC26, 0x8152, 0xAC27, 0x8153, 0xAC28, 0x8154, 0xAC29, - 0x8155, 0xAC2A, 0x8156, 0xAC2B, 0x8157, 0xAC2E, 0x8158, 0xAC32, - 0x8159, 0xAC33, 0x815A, 0xAC34, 0x8161, 0xAC35, 0x8162, 0xAC36, - 0x8163, 0xAC37, 0x8164, 0xAC3A, 0x8165, 0xAC3B, 0x8166, 0xAC3D, - 0x8167, 0xAC3E, 0x8168, 0xAC3F, 0x8169, 0xAC41, 0x816A, 0xAC42, - 0x816B, 0xAC43, 0x816C, 0xAC44, 0x816D, 0xAC45, 0x816E, 0xAC46, - 0x816F, 0xAC47, 0x8170, 0xAC48, 0x8171, 0xAC49, 0x8172, 0xAC4A, - 0x8173, 0xAC4C, 0x8174, 0xAC4E, 0x8175, 0xAC4F, 0x8176, 0xAC50, - 0x8177, 0xAC51, 0x8178, 0xAC52, 0x8179, 0xAC53, 0x817A, 0xAC55, - 0x8181, 0xAC56, 0x8182, 0xAC57, 0x8183, 0xAC59, 0x8184, 0xAC5A, - 0x8185, 0xAC5B, 0x8186, 0xAC5D, 0x8187, 0xAC5E, 0x8188, 0xAC5F, - 0x8189, 0xAC60, 0x818A, 0xAC61, 0x818B, 0xAC62, 0x818C, 0xAC63, - 0x818D, 0xAC64, 0x818E, 0xAC65, 0x818F, 0xAC66, 0x8190, 0xAC67, - 0x8191, 0xAC68, 0x8192, 0xAC69, 0x8193, 0xAC6A, 0x8194, 0xAC6B, - 0x8195, 0xAC6C, 0x8196, 0xAC6D, 0x8197, 0xAC6E, 0x8198, 0xAC6F, - 0x8199, 0xAC72, 0x819A, 0xAC73, 0x819B, 0xAC75, 0x819C, 0xAC76, - 0x819D, 0xAC79, 0x819E, 0xAC7B, 0x819F, 0xAC7C, 0x81A0, 0xAC7D, - 0x81A1, 0xAC7E, 0x81A2, 0xAC7F, 0x81A3, 0xAC82, 0x81A4, 0xAC87, - 0x81A5, 0xAC88, 0x81A6, 0xAC8D, 0x81A7, 0xAC8E, 0x81A8, 0xAC8F, - 0x81A9, 0xAC91, 0x81AA, 0xAC92, 0x81AB, 0xAC93, 0x81AC, 0xAC95, - 0x81AD, 0xAC96, 0x81AE, 0xAC97, 0x81AF, 0xAC98, 0x81B0, 0xAC99, - 0x81B1, 0xAC9A, 0x81B2, 0xAC9B, 0x81B3, 0xAC9E, 0x81B4, 0xACA2, - 0x81B5, 0xACA3, 0x81B6, 0xACA4, 0x81B7, 0xACA5, 0x81B8, 0xACA6, - 0x81B9, 0xACA7, 0x81BA, 0xACAB, 0x81BB, 0xACAD, 0x81BC, 0xACAE, - 0x81BD, 0xACB1, 0x81BE, 0xACB2, 0x81BF, 0xACB3, 0x81C0, 0xACB4, - 0x81C1, 0xACB5, 0x81C2, 0xACB6, 0x81C3, 0xACB7, 0x81C4, 0xACBA, - 0x81C5, 0xACBE, 0x81C6, 0xACBF, 0x81C7, 0xACC0, 0x81C8, 0xACC2, - 0x81C9, 0xACC3, 0x81CA, 0xACC5, 0x81CB, 0xACC6, 0x81CC, 0xACC7, - 0x81CD, 0xACC9, 0x81CE, 0xACCA, 0x81CF, 0xACCB, 0x81D0, 0xACCD, - 0x81D1, 0xACCE, 0x81D2, 0xACCF, 0x81D3, 0xACD0, 0x81D4, 0xACD1, - 0x81D5, 0xACD2, 0x81D6, 0xACD3, 0x81D7, 0xACD4, 0x81D8, 0xACD6, - 0x81D9, 0xACD8, 0x81DA, 0xACD9, 0x81DB, 0xACDA, 0x81DC, 0xACDB, - 0x81DD, 0xACDC, 0x81DE, 0xACDD, 0x81DF, 0xACDE, 0x81E0, 0xACDF, - 0x81E1, 0xACE2, 0x81E2, 0xACE3, 0x81E3, 0xACE5, 0x81E4, 0xACE6, - 0x81E5, 0xACE9, 0x81E6, 0xACEB, 0x81E7, 0xACED, 0x81E8, 0xACEE, - 0x81E9, 0xACF2, 0x81EA, 0xACF4, 0x81EB, 0xACF7, 0x81EC, 0xACF8, - 0x81ED, 0xACF9, 0x81EE, 0xACFA, 0x81EF, 0xACFB, 0x81F0, 0xACFE, - 0x81F1, 0xACFF, 0x81F2, 0xAD01, 0x81F3, 0xAD02, 0x81F4, 0xAD03, - 0x81F5, 0xAD05, 0x81F6, 0xAD07, 0x81F7, 0xAD08, 0x81F8, 0xAD09, - 0x81F9, 0xAD0A, 0x81FA, 0xAD0B, 0x81FB, 0xAD0E, 0x81FC, 0xAD10, - 0x81FD, 0xAD12, 0x81FE, 0xAD13, 0x8241, 0xAD14, 0x8242, 0xAD15, - 0x8243, 0xAD16, 0x8244, 0xAD17, 0x8245, 0xAD19, 0x8246, 0xAD1A, - 0x8247, 0xAD1B, 0x8248, 0xAD1D, 0x8249, 0xAD1E, 0x824A, 0xAD1F, - 0x824B, 0xAD21, 0x824C, 0xAD22, 0x824D, 0xAD23, 0x824E, 0xAD24, - 0x824F, 0xAD25, 0x8250, 0xAD26, 0x8251, 0xAD27, 0x8252, 0xAD28, - 0x8253, 0xAD2A, 0x8254, 0xAD2B, 0x8255, 0xAD2E, 0x8256, 0xAD2F, - 0x8257, 0xAD30, 0x8258, 0xAD31, 0x8259, 0xAD32, 0x825A, 0xAD33, - 0x8261, 0xAD36, 0x8262, 0xAD37, 0x8263, 0xAD39, 0x8264, 0xAD3A, - 0x8265, 0xAD3B, 0x8266, 0xAD3D, 0x8267, 0xAD3E, 0x8268, 0xAD3F, - 0x8269, 0xAD40, 0x826A, 0xAD41, 0x826B, 0xAD42, 0x826C, 0xAD43, - 0x826D, 0xAD46, 0x826E, 0xAD48, 0x826F, 0xAD4A, 0x8270, 0xAD4B, - 0x8271, 0xAD4C, 0x8272, 0xAD4D, 0x8273, 0xAD4E, 0x8274, 0xAD4F, - 0x8275, 0xAD51, 0x8276, 0xAD52, 0x8277, 0xAD53, 0x8278, 0xAD55, - 0x8279, 0xAD56, 0x827A, 0xAD57, 0x8281, 0xAD59, 0x8282, 0xAD5A, - 0x8283, 0xAD5B, 0x8284, 0xAD5C, 0x8285, 0xAD5D, 0x8286, 0xAD5E, - 0x8287, 0xAD5F, 0x8288, 0xAD60, 0x8289, 0xAD62, 0x828A, 0xAD64, - 0x828B, 0xAD65, 0x828C, 0xAD66, 0x828D, 0xAD67, 0x828E, 0xAD68, - 0x828F, 0xAD69, 0x8290, 0xAD6A, 0x8291, 0xAD6B, 0x8292, 0xAD6E, - 0x8293, 0xAD6F, 0x8294, 0xAD71, 0x8295, 0xAD72, 0x8296, 0xAD77, - 0x8297, 0xAD78, 0x8298, 0xAD79, 0x8299, 0xAD7A, 0x829A, 0xAD7E, - 0x829B, 0xAD80, 0x829C, 0xAD83, 0x829D, 0xAD84, 0x829E, 0xAD85, - 0x829F, 0xAD86, 0x82A0, 0xAD87, 0x82A1, 0xAD8A, 0x82A2, 0xAD8B, - 0x82A3, 0xAD8D, 0x82A4, 0xAD8E, 0x82A5, 0xAD8F, 0x82A6, 0xAD91, - 0x82A7, 0xAD92, 0x82A8, 0xAD93, 0x82A9, 0xAD94, 0x82AA, 0xAD95, - 0x82AB, 0xAD96, 0x82AC, 0xAD97, 0x82AD, 0xAD98, 0x82AE, 0xAD99, - 0x82AF, 0xAD9A, 0x82B0, 0xAD9B, 0x82B1, 0xAD9E, 0x82B2, 0xAD9F, - 0x82B3, 0xADA0, 0x82B4, 0xADA1, 0x82B5, 0xADA2, 0x82B6, 0xADA3, - 0x82B7, 0xADA5, 0x82B8, 0xADA6, 0x82B9, 0xADA7, 0x82BA, 0xADA8, - 0x82BB, 0xADA9, 0x82BC, 0xADAA, 0x82BD, 0xADAB, 0x82BE, 0xADAC, - 0x82BF, 0xADAD, 0x82C0, 0xADAE, 0x82C1, 0xADAF, 0x82C2, 0xADB0, - 0x82C3, 0xADB1, 0x82C4, 0xADB2, 0x82C5, 0xADB3, 0x82C6, 0xADB4, - 0x82C7, 0xADB5, 0x82C8, 0xADB6, 0x82C9, 0xADB8, 0x82CA, 0xADB9, - 0x82CB, 0xADBA, 0x82CC, 0xADBB, 0x82CD, 0xADBC, 0x82CE, 0xADBD, - 0x82CF, 0xADBE, 0x82D0, 0xADBF, 0x82D1, 0xADC2, 0x82D2, 0xADC3, - 0x82D3, 0xADC5, 0x82D4, 0xADC6, 0x82D5, 0xADC7, 0x82D6, 0xADC9, - 0x82D7, 0xADCA, 0x82D8, 0xADCB, 0x82D9, 0xADCC, 0x82DA, 0xADCD, - 0x82DB, 0xADCE, 0x82DC, 0xADCF, 0x82DD, 0xADD2, 0x82DE, 0xADD4, - 0x82DF, 0xADD5, 0x82E0, 0xADD6, 0x82E1, 0xADD7, 0x82E2, 0xADD8, - 0x82E3, 0xADD9, 0x82E4, 0xADDA, 0x82E5, 0xADDB, 0x82E6, 0xADDD, - 0x82E7, 0xADDE, 0x82E8, 0xADDF, 0x82E9, 0xADE1, 0x82EA, 0xADE2, - 0x82EB, 0xADE3, 0x82EC, 0xADE5, 0x82ED, 0xADE6, 0x82EE, 0xADE7, - 0x82EF, 0xADE8, 0x82F0, 0xADE9, 0x82F1, 0xADEA, 0x82F2, 0xADEB, - 0x82F3, 0xADEC, 0x82F4, 0xADED, 0x82F5, 0xADEE, 0x82F6, 0xADEF, - 0x82F7, 0xADF0, 0x82F8, 0xADF1, 0x82F9, 0xADF2, 0x82FA, 0xADF3, - 0x82FB, 0xADF4, 0x82FC, 0xADF5, 0x82FD, 0xADF6, 0x82FE, 0xADF7, - 0x8341, 0xADFA, 0x8342, 0xADFB, 0x8343, 0xADFD, 0x8344, 0xADFE, - 0x8345, 0xAE02, 0x8346, 0xAE03, 0x8347, 0xAE04, 0x8348, 0xAE05, - 0x8349, 0xAE06, 0x834A, 0xAE07, 0x834B, 0xAE0A, 0x834C, 0xAE0C, - 0x834D, 0xAE0E, 0x834E, 0xAE0F, 0x834F, 0xAE10, 0x8350, 0xAE11, - 0x8351, 0xAE12, 0x8352, 0xAE13, 0x8353, 0xAE15, 0x8354, 0xAE16, - 0x8355, 0xAE17, 0x8356, 0xAE18, 0x8357, 0xAE19, 0x8358, 0xAE1A, - 0x8359, 0xAE1B, 0x835A, 0xAE1C, 0x8361, 0xAE1D, 0x8362, 0xAE1E, - 0x8363, 0xAE1F, 0x8364, 0xAE20, 0x8365, 0xAE21, 0x8366, 0xAE22, - 0x8367, 0xAE23, 0x8368, 0xAE24, 0x8369, 0xAE25, 0x836A, 0xAE26, - 0x836B, 0xAE27, 0x836C, 0xAE28, 0x836D, 0xAE29, 0x836E, 0xAE2A, - 0x836F, 0xAE2B, 0x8370, 0xAE2C, 0x8371, 0xAE2D, 0x8372, 0xAE2E, - 0x8373, 0xAE2F, 0x8374, 0xAE32, 0x8375, 0xAE33, 0x8376, 0xAE35, - 0x8377, 0xAE36, 0x8378, 0xAE39, 0x8379, 0xAE3B, 0x837A, 0xAE3C, - 0x8381, 0xAE3D, 0x8382, 0xAE3E, 0x8383, 0xAE3F, 0x8384, 0xAE42, - 0x8385, 0xAE44, 0x8386, 0xAE47, 0x8387, 0xAE48, 0x8388, 0xAE49, - 0x8389, 0xAE4B, 0x838A, 0xAE4F, 0x838B, 0xAE51, 0x838C, 0xAE52, - 0x838D, 0xAE53, 0x838E, 0xAE55, 0x838F, 0xAE57, 0x8390, 0xAE58, - 0x8391, 0xAE59, 0x8392, 0xAE5A, 0x8393, 0xAE5B, 0x8394, 0xAE5E, - 0x8395, 0xAE62, 0x8396, 0xAE63, 0x8397, 0xAE64, 0x8398, 0xAE66, - 0x8399, 0xAE67, 0x839A, 0xAE6A, 0x839B, 0xAE6B, 0x839C, 0xAE6D, - 0x839D, 0xAE6E, 0x839E, 0xAE6F, 0x839F, 0xAE71, 0x83A0, 0xAE72, - 0x83A1, 0xAE73, 0x83A2, 0xAE74, 0x83A3, 0xAE75, 0x83A4, 0xAE76, - 0x83A5, 0xAE77, 0x83A6, 0xAE7A, 0x83A7, 0xAE7E, 0x83A8, 0xAE7F, - 0x83A9, 0xAE80, 0x83AA, 0xAE81, 0x83AB, 0xAE82, 0x83AC, 0xAE83, - 0x83AD, 0xAE86, 0x83AE, 0xAE87, 0x83AF, 0xAE88, 0x83B0, 0xAE89, - 0x83B1, 0xAE8A, 0x83B2, 0xAE8B, 0x83B3, 0xAE8D, 0x83B4, 0xAE8E, - 0x83B5, 0xAE8F, 0x83B6, 0xAE90, 0x83B7, 0xAE91, 0x83B8, 0xAE92, - 0x83B9, 0xAE93, 0x83BA, 0xAE94, 0x83BB, 0xAE95, 0x83BC, 0xAE96, - 0x83BD, 0xAE97, 0x83BE, 0xAE98, 0x83BF, 0xAE99, 0x83C0, 0xAE9A, - 0x83C1, 0xAE9B, 0x83C2, 0xAE9C, 0x83C3, 0xAE9D, 0x83C4, 0xAE9E, - 0x83C5, 0xAE9F, 0x83C6, 0xAEA0, 0x83C7, 0xAEA1, 0x83C8, 0xAEA2, - 0x83C9, 0xAEA3, 0x83CA, 0xAEA4, 0x83CB, 0xAEA5, 0x83CC, 0xAEA6, - 0x83CD, 0xAEA7, 0x83CE, 0xAEA8, 0x83CF, 0xAEA9, 0x83D0, 0xAEAA, - 0x83D1, 0xAEAB, 0x83D2, 0xAEAC, 0x83D3, 0xAEAD, 0x83D4, 0xAEAE, - 0x83D5, 0xAEAF, 0x83D6, 0xAEB0, 0x83D7, 0xAEB1, 0x83D8, 0xAEB2, - 0x83D9, 0xAEB3, 0x83DA, 0xAEB4, 0x83DB, 0xAEB5, 0x83DC, 0xAEB6, - 0x83DD, 0xAEB7, 0x83DE, 0xAEB8, 0x83DF, 0xAEB9, 0x83E0, 0xAEBA, - 0x83E1, 0xAEBB, 0x83E2, 0xAEBF, 0x83E3, 0xAEC1, 0x83E4, 0xAEC2, - 0x83E5, 0xAEC3, 0x83E6, 0xAEC5, 0x83E7, 0xAEC6, 0x83E8, 0xAEC7, - 0x83E9, 0xAEC8, 0x83EA, 0xAEC9, 0x83EB, 0xAECA, 0x83EC, 0xAECB, - 0x83ED, 0xAECE, 0x83EE, 0xAED2, 0x83EF, 0xAED3, 0x83F0, 0xAED4, - 0x83F1, 0xAED5, 0x83F2, 0xAED6, 0x83F3, 0xAED7, 0x83F4, 0xAEDA, - 0x83F5, 0xAEDB, 0x83F6, 0xAEDD, 0x83F7, 0xAEDE, 0x83F8, 0xAEDF, - 0x83F9, 0xAEE0, 0x83FA, 0xAEE1, 0x83FB, 0xAEE2, 0x83FC, 0xAEE3, - 0x83FD, 0xAEE4, 0x83FE, 0xAEE5, 0x8441, 0xAEE6, 0x8442, 0xAEE7, - 0x8443, 0xAEE9, 0x8444, 0xAEEA, 0x8445, 0xAEEC, 0x8446, 0xAEEE, - 0x8447, 0xAEEF, 0x8448, 0xAEF0, 0x8449, 0xAEF1, 0x844A, 0xAEF2, - 0x844B, 0xAEF3, 0x844C, 0xAEF5, 0x844D, 0xAEF6, 0x844E, 0xAEF7, - 0x844F, 0xAEF9, 0x8450, 0xAEFA, 0x8451, 0xAEFB, 0x8452, 0xAEFD, - 0x8453, 0xAEFE, 0x8454, 0xAEFF, 0x8455, 0xAF00, 0x8456, 0xAF01, - 0x8457, 0xAF02, 0x8458, 0xAF03, 0x8459, 0xAF04, 0x845A, 0xAF05, - 0x8461, 0xAF06, 0x8462, 0xAF09, 0x8463, 0xAF0A, 0x8464, 0xAF0B, - 0x8465, 0xAF0C, 0x8466, 0xAF0E, 0x8467, 0xAF0F, 0x8468, 0xAF11, - 0x8469, 0xAF12, 0x846A, 0xAF13, 0x846B, 0xAF14, 0x846C, 0xAF15, - 0x846D, 0xAF16, 0x846E, 0xAF17, 0x846F, 0xAF18, 0x8470, 0xAF19, - 0x8471, 0xAF1A, 0x8472, 0xAF1B, 0x8473, 0xAF1C, 0x8474, 0xAF1D, - 0x8475, 0xAF1E, 0x8476, 0xAF1F, 0x8477, 0xAF20, 0x8478, 0xAF21, - 0x8479, 0xAF22, 0x847A, 0xAF23, 0x8481, 0xAF24, 0x8482, 0xAF25, - 0x8483, 0xAF26, 0x8484, 0xAF27, 0x8485, 0xAF28, 0x8486, 0xAF29, - 0x8487, 0xAF2A, 0x8488, 0xAF2B, 0x8489, 0xAF2E, 0x848A, 0xAF2F, - 0x848B, 0xAF31, 0x848C, 0xAF33, 0x848D, 0xAF35, 0x848E, 0xAF36, - 0x848F, 0xAF37, 0x8490, 0xAF38, 0x8491, 0xAF39, 0x8492, 0xAF3A, - 0x8493, 0xAF3B, 0x8494, 0xAF3E, 0x8495, 0xAF40, 0x8496, 0xAF44, - 0x8497, 0xAF45, 0x8498, 0xAF46, 0x8499, 0xAF47, 0x849A, 0xAF4A, - 0x849B, 0xAF4B, 0x849C, 0xAF4C, 0x849D, 0xAF4D, 0x849E, 0xAF4E, - 0x849F, 0xAF4F, 0x84A0, 0xAF51, 0x84A1, 0xAF52, 0x84A2, 0xAF53, - 0x84A3, 0xAF54, 0x84A4, 0xAF55, 0x84A5, 0xAF56, 0x84A6, 0xAF57, - 0x84A7, 0xAF58, 0x84A8, 0xAF59, 0x84A9, 0xAF5A, 0x84AA, 0xAF5B, - 0x84AB, 0xAF5E, 0x84AC, 0xAF5F, 0x84AD, 0xAF60, 0x84AE, 0xAF61, - 0x84AF, 0xAF62, 0x84B0, 0xAF63, 0x84B1, 0xAF66, 0x84B2, 0xAF67, - 0x84B3, 0xAF68, 0x84B4, 0xAF69, 0x84B5, 0xAF6A, 0x84B6, 0xAF6B, - 0x84B7, 0xAF6C, 0x84B8, 0xAF6D, 0x84B9, 0xAF6E, 0x84BA, 0xAF6F, - 0x84BB, 0xAF70, 0x84BC, 0xAF71, 0x84BD, 0xAF72, 0x84BE, 0xAF73, - 0x84BF, 0xAF74, 0x84C0, 0xAF75, 0x84C1, 0xAF76, 0x84C2, 0xAF77, - 0x84C3, 0xAF78, 0x84C4, 0xAF7A, 0x84C5, 0xAF7B, 0x84C6, 0xAF7C, - 0x84C7, 0xAF7D, 0x84C8, 0xAF7E, 0x84C9, 0xAF7F, 0x84CA, 0xAF81, - 0x84CB, 0xAF82, 0x84CC, 0xAF83, 0x84CD, 0xAF85, 0x84CE, 0xAF86, - 0x84CF, 0xAF87, 0x84D0, 0xAF89, 0x84D1, 0xAF8A, 0x84D2, 0xAF8B, - 0x84D3, 0xAF8C, 0x84D4, 0xAF8D, 0x84D5, 0xAF8E, 0x84D6, 0xAF8F, - 0x84D7, 0xAF92, 0x84D8, 0xAF93, 0x84D9, 0xAF94, 0x84DA, 0xAF96, - 0x84DB, 0xAF97, 0x84DC, 0xAF98, 0x84DD, 0xAF99, 0x84DE, 0xAF9A, - 0x84DF, 0xAF9B, 0x84E0, 0xAF9D, 0x84E1, 0xAF9E, 0x84E2, 0xAF9F, - 0x84E3, 0xAFA0, 0x84E4, 0xAFA1, 0x84E5, 0xAFA2, 0x84E6, 0xAFA3, - 0x84E7, 0xAFA4, 0x84E8, 0xAFA5, 0x84E9, 0xAFA6, 0x84EA, 0xAFA7, - 0x84EB, 0xAFA8, 0x84EC, 0xAFA9, 0x84ED, 0xAFAA, 0x84EE, 0xAFAB, - 0x84EF, 0xAFAC, 0x84F0, 0xAFAD, 0x84F1, 0xAFAE, 0x84F2, 0xAFAF, - 0x84F3, 0xAFB0, 0x84F4, 0xAFB1, 0x84F5, 0xAFB2, 0x84F6, 0xAFB3, - 0x84F7, 0xAFB4, 0x84F8, 0xAFB5, 0x84F9, 0xAFB6, 0x84FA, 0xAFB7, - 0x84FB, 0xAFBA, 0x84FC, 0xAFBB, 0x84FD, 0xAFBD, 0x84FE, 0xAFBE, - 0x8541, 0xAFBF, 0x8542, 0xAFC1, 0x8543, 0xAFC2, 0x8544, 0xAFC3, - 0x8545, 0xAFC4, 0x8546, 0xAFC5, 0x8547, 0xAFC6, 0x8548, 0xAFCA, - 0x8549, 0xAFCC, 0x854A, 0xAFCF, 0x854B, 0xAFD0, 0x854C, 0xAFD1, - 0x854D, 0xAFD2, 0x854E, 0xAFD3, 0x854F, 0xAFD5, 0x8550, 0xAFD6, - 0x8551, 0xAFD7, 0x8552, 0xAFD8, 0x8553, 0xAFD9, 0x8554, 0xAFDA, - 0x8555, 0xAFDB, 0x8556, 0xAFDD, 0x8557, 0xAFDE, 0x8558, 0xAFDF, - 0x8559, 0xAFE0, 0x855A, 0xAFE1, 0x8561, 0xAFE2, 0x8562, 0xAFE3, - 0x8563, 0xAFE4, 0x8564, 0xAFE5, 0x8565, 0xAFE6, 0x8566, 0xAFE7, - 0x8567, 0xAFEA, 0x8568, 0xAFEB, 0x8569, 0xAFEC, 0x856A, 0xAFED, - 0x856B, 0xAFEE, 0x856C, 0xAFEF, 0x856D, 0xAFF2, 0x856E, 0xAFF3, - 0x856F, 0xAFF5, 0x8570, 0xAFF6, 0x8571, 0xAFF7, 0x8572, 0xAFF9, - 0x8573, 0xAFFA, 0x8574, 0xAFFB, 0x8575, 0xAFFC, 0x8576, 0xAFFD, - 0x8577, 0xAFFE, 0x8578, 0xAFFF, 0x8579, 0xB002, 0x857A, 0xB003, - 0x8581, 0xB005, 0x8582, 0xB006, 0x8583, 0xB007, 0x8584, 0xB008, - 0x8585, 0xB009, 0x8586, 0xB00A, 0x8587, 0xB00B, 0x8588, 0xB00D, - 0x8589, 0xB00E, 0x858A, 0xB00F, 0x858B, 0xB011, 0x858C, 0xB012, - 0x858D, 0xB013, 0x858E, 0xB015, 0x858F, 0xB016, 0x8590, 0xB017, - 0x8591, 0xB018, 0x8592, 0xB019, 0x8593, 0xB01A, 0x8594, 0xB01B, - 0x8595, 0xB01E, 0x8596, 0xB01F, 0x8597, 0xB020, 0x8598, 0xB021, - 0x8599, 0xB022, 0x859A, 0xB023, 0x859B, 0xB024, 0x859C, 0xB025, - 0x859D, 0xB026, 0x859E, 0xB027, 0x859F, 0xB029, 0x85A0, 0xB02A, - 0x85A1, 0xB02B, 0x85A2, 0xB02C, 0x85A3, 0xB02D, 0x85A4, 0xB02E, - 0x85A5, 0xB02F, 0x85A6, 0xB030, 0x85A7, 0xB031, 0x85A8, 0xB032, - 0x85A9, 0xB033, 0x85AA, 0xB034, 0x85AB, 0xB035, 0x85AC, 0xB036, - 0x85AD, 0xB037, 0x85AE, 0xB038, 0x85AF, 0xB039, 0x85B0, 0xB03A, - 0x85B1, 0xB03B, 0x85B2, 0xB03C, 0x85B3, 0xB03D, 0x85B4, 0xB03E, - 0x85B5, 0xB03F, 0x85B6, 0xB040, 0x85B7, 0xB041, 0x85B8, 0xB042, - 0x85B9, 0xB043, 0x85BA, 0xB046, 0x85BB, 0xB047, 0x85BC, 0xB049, - 0x85BD, 0xB04B, 0x85BE, 0xB04D, 0x85BF, 0xB04F, 0x85C0, 0xB050, - 0x85C1, 0xB051, 0x85C2, 0xB052, 0x85C3, 0xB056, 0x85C4, 0xB058, - 0x85C5, 0xB05A, 0x85C6, 0xB05B, 0x85C7, 0xB05C, 0x85C8, 0xB05E, - 0x85C9, 0xB05F, 0x85CA, 0xB060, 0x85CB, 0xB061, 0x85CC, 0xB062, - 0x85CD, 0xB063, 0x85CE, 0xB064, 0x85CF, 0xB065, 0x85D0, 0xB066, - 0x85D1, 0xB067, 0x85D2, 0xB068, 0x85D3, 0xB069, 0x85D4, 0xB06A, - 0x85D5, 0xB06B, 0x85D6, 0xB06C, 0x85D7, 0xB06D, 0x85D8, 0xB06E, - 0x85D9, 0xB06F, 0x85DA, 0xB070, 0x85DB, 0xB071, 0x85DC, 0xB072, - 0x85DD, 0xB073, 0x85DE, 0xB074, 0x85DF, 0xB075, 0x85E0, 0xB076, - 0x85E1, 0xB077, 0x85E2, 0xB078, 0x85E3, 0xB079, 0x85E4, 0xB07A, - 0x85E5, 0xB07B, 0x85E6, 0xB07E, 0x85E7, 0xB07F, 0x85E8, 0xB081, - 0x85E9, 0xB082, 0x85EA, 0xB083, 0x85EB, 0xB085, 0x85EC, 0xB086, - 0x85ED, 0xB087, 0x85EE, 0xB088, 0x85EF, 0xB089, 0x85F0, 0xB08A, - 0x85F1, 0xB08B, 0x85F2, 0xB08E, 0x85F3, 0xB090, 0x85F4, 0xB092, - 0x85F5, 0xB093, 0x85F6, 0xB094, 0x85F7, 0xB095, 0x85F8, 0xB096, - 0x85F9, 0xB097, 0x85FA, 0xB09B, 0x85FB, 0xB09D, 0x85FC, 0xB09E, - 0x85FD, 0xB0A3, 0x85FE, 0xB0A4, 0x8641, 0xB0A5, 0x8642, 0xB0A6, - 0x8643, 0xB0A7, 0x8644, 0xB0AA, 0x8645, 0xB0B0, 0x8646, 0xB0B2, - 0x8647, 0xB0B6, 0x8648, 0xB0B7, 0x8649, 0xB0B9, 0x864A, 0xB0BA, - 0x864B, 0xB0BB, 0x864C, 0xB0BD, 0x864D, 0xB0BE, 0x864E, 0xB0BF, - 0x864F, 0xB0C0, 0x8650, 0xB0C1, 0x8651, 0xB0C2, 0x8652, 0xB0C3, - 0x8653, 0xB0C6, 0x8654, 0xB0CA, 0x8655, 0xB0CB, 0x8656, 0xB0CC, - 0x8657, 0xB0CD, 0x8658, 0xB0CE, 0x8659, 0xB0CF, 0x865A, 0xB0D2, - 0x8661, 0xB0D3, 0x8662, 0xB0D5, 0x8663, 0xB0D6, 0x8664, 0xB0D7, - 0x8665, 0xB0D9, 0x8666, 0xB0DA, 0x8667, 0xB0DB, 0x8668, 0xB0DC, - 0x8669, 0xB0DD, 0x866A, 0xB0DE, 0x866B, 0xB0DF, 0x866C, 0xB0E1, - 0x866D, 0xB0E2, 0x866E, 0xB0E3, 0x866F, 0xB0E4, 0x8670, 0xB0E6, - 0x8671, 0xB0E7, 0x8672, 0xB0E8, 0x8673, 0xB0E9, 0x8674, 0xB0EA, - 0x8675, 0xB0EB, 0x8676, 0xB0EC, 0x8677, 0xB0ED, 0x8678, 0xB0EE, - 0x8679, 0xB0EF, 0x867A, 0xB0F0, 0x8681, 0xB0F1, 0x8682, 0xB0F2, - 0x8683, 0xB0F3, 0x8684, 0xB0F4, 0x8685, 0xB0F5, 0x8686, 0xB0F6, - 0x8687, 0xB0F7, 0x8688, 0xB0F8, 0x8689, 0xB0F9, 0x868A, 0xB0FA, - 0x868B, 0xB0FB, 0x868C, 0xB0FC, 0x868D, 0xB0FD, 0x868E, 0xB0FE, - 0x868F, 0xB0FF, 0x8690, 0xB100, 0x8691, 0xB101, 0x8692, 0xB102, - 0x8693, 0xB103, 0x8694, 0xB104, 0x8695, 0xB105, 0x8696, 0xB106, - 0x8697, 0xB107, 0x8698, 0xB10A, 0x8699, 0xB10D, 0x869A, 0xB10E, - 0x869B, 0xB10F, 0x869C, 0xB111, 0x869D, 0xB114, 0x869E, 0xB115, - 0x869F, 0xB116, 0x86A0, 0xB117, 0x86A1, 0xB11A, 0x86A2, 0xB11E, - 0x86A3, 0xB11F, 0x86A4, 0xB120, 0x86A5, 0xB121, 0x86A6, 0xB122, - 0x86A7, 0xB126, 0x86A8, 0xB127, 0x86A9, 0xB129, 0x86AA, 0xB12A, - 0x86AB, 0xB12B, 0x86AC, 0xB12D, 0x86AD, 0xB12E, 0x86AE, 0xB12F, - 0x86AF, 0xB130, 0x86B0, 0xB131, 0x86B1, 0xB132, 0x86B2, 0xB133, - 0x86B3, 0xB136, 0x86B4, 0xB13A, 0x86B5, 0xB13B, 0x86B6, 0xB13C, - 0x86B7, 0xB13D, 0x86B8, 0xB13E, 0x86B9, 0xB13F, 0x86BA, 0xB142, - 0x86BB, 0xB143, 0x86BC, 0xB145, 0x86BD, 0xB146, 0x86BE, 0xB147, - 0x86BF, 0xB149, 0x86C0, 0xB14A, 0x86C1, 0xB14B, 0x86C2, 0xB14C, - 0x86C3, 0xB14D, 0x86C4, 0xB14E, 0x86C5, 0xB14F, 0x86C6, 0xB152, - 0x86C7, 0xB153, 0x86C8, 0xB156, 0x86C9, 0xB157, 0x86CA, 0xB159, - 0x86CB, 0xB15A, 0x86CC, 0xB15B, 0x86CD, 0xB15D, 0x86CE, 0xB15E, - 0x86CF, 0xB15F, 0x86D0, 0xB161, 0x86D1, 0xB162, 0x86D2, 0xB163, - 0x86D3, 0xB164, 0x86D4, 0xB165, 0x86D5, 0xB166, 0x86D6, 0xB167, - 0x86D7, 0xB168, 0x86D8, 0xB169, 0x86D9, 0xB16A, 0x86DA, 0xB16B, - 0x86DB, 0xB16C, 0x86DC, 0xB16D, 0x86DD, 0xB16E, 0x86DE, 0xB16F, - 0x86DF, 0xB170, 0x86E0, 0xB171, 0x86E1, 0xB172, 0x86E2, 0xB173, - 0x86E3, 0xB174, 0x86E4, 0xB175, 0x86E5, 0xB176, 0x86E6, 0xB177, - 0x86E7, 0xB17A, 0x86E8, 0xB17B, 0x86E9, 0xB17D, 0x86EA, 0xB17E, - 0x86EB, 0xB17F, 0x86EC, 0xB181, 0x86ED, 0xB183, 0x86EE, 0xB184, - 0x86EF, 0xB185, 0x86F0, 0xB186, 0x86F1, 0xB187, 0x86F2, 0xB18A, - 0x86F3, 0xB18C, 0x86F4, 0xB18E, 0x86F5, 0xB18F, 0x86F6, 0xB190, - 0x86F7, 0xB191, 0x86F8, 0xB195, 0x86F9, 0xB196, 0x86FA, 0xB197, - 0x86FB, 0xB199, 0x86FC, 0xB19A, 0x86FD, 0xB19B, 0x86FE, 0xB19D, - 0x8741, 0xB19E, 0x8742, 0xB19F, 0x8743, 0xB1A0, 0x8744, 0xB1A1, - 0x8745, 0xB1A2, 0x8746, 0xB1A3, 0x8747, 0xB1A4, 0x8748, 0xB1A5, - 0x8749, 0xB1A6, 0x874A, 0xB1A7, 0x874B, 0xB1A9, 0x874C, 0xB1AA, - 0x874D, 0xB1AB, 0x874E, 0xB1AC, 0x874F, 0xB1AD, 0x8750, 0xB1AE, - 0x8751, 0xB1AF, 0x8752, 0xB1B0, 0x8753, 0xB1B1, 0x8754, 0xB1B2, - 0x8755, 0xB1B3, 0x8756, 0xB1B4, 0x8757, 0xB1B5, 0x8758, 0xB1B6, - 0x8759, 0xB1B7, 0x875A, 0xB1B8, 0x8761, 0xB1B9, 0x8762, 0xB1BA, - 0x8763, 0xB1BB, 0x8764, 0xB1BC, 0x8765, 0xB1BD, 0x8766, 0xB1BE, - 0x8767, 0xB1BF, 0x8768, 0xB1C0, 0x8769, 0xB1C1, 0x876A, 0xB1C2, - 0x876B, 0xB1C3, 0x876C, 0xB1C4, 0x876D, 0xB1C5, 0x876E, 0xB1C6, - 0x876F, 0xB1C7, 0x8770, 0xB1C8, 0x8771, 0xB1C9, 0x8772, 0xB1CA, - 0x8773, 0xB1CB, 0x8774, 0xB1CD, 0x8775, 0xB1CE, 0x8776, 0xB1CF, - 0x8777, 0xB1D1, 0x8778, 0xB1D2, 0x8779, 0xB1D3, 0x877A, 0xB1D5, - 0x8781, 0xB1D6, 0x8782, 0xB1D7, 0x8783, 0xB1D8, 0x8784, 0xB1D9, - 0x8785, 0xB1DA, 0x8786, 0xB1DB, 0x8787, 0xB1DE, 0x8788, 0xB1E0, - 0x8789, 0xB1E1, 0x878A, 0xB1E2, 0x878B, 0xB1E3, 0x878C, 0xB1E4, - 0x878D, 0xB1E5, 0x878E, 0xB1E6, 0x878F, 0xB1E7, 0x8790, 0xB1EA, - 0x8791, 0xB1EB, 0x8792, 0xB1ED, 0x8793, 0xB1EE, 0x8794, 0xB1EF, - 0x8795, 0xB1F1, 0x8796, 0xB1F2, 0x8797, 0xB1F3, 0x8798, 0xB1F4, - 0x8799, 0xB1F5, 0x879A, 0xB1F6, 0x879B, 0xB1F7, 0x879C, 0xB1F8, - 0x879D, 0xB1FA, 0x879E, 0xB1FC, 0x879F, 0xB1FE, 0x87A0, 0xB1FF, - 0x87A1, 0xB200, 0x87A2, 0xB201, 0x87A3, 0xB202, 0x87A4, 0xB203, - 0x87A5, 0xB206, 0x87A6, 0xB207, 0x87A7, 0xB209, 0x87A8, 0xB20A, - 0x87A9, 0xB20D, 0x87AA, 0xB20E, 0x87AB, 0xB20F, 0x87AC, 0xB210, - 0x87AD, 0xB211, 0x87AE, 0xB212, 0x87AF, 0xB213, 0x87B0, 0xB216, - 0x87B1, 0xB218, 0x87B2, 0xB21A, 0x87B3, 0xB21B, 0x87B4, 0xB21C, - 0x87B5, 0xB21D, 0x87B6, 0xB21E, 0x87B7, 0xB21F, 0x87B8, 0xB221, - 0x87B9, 0xB222, 0x87BA, 0xB223, 0x87BB, 0xB224, 0x87BC, 0xB225, - 0x87BD, 0xB226, 0x87BE, 0xB227, 0x87BF, 0xB228, 0x87C0, 0xB229, - 0x87C1, 0xB22A, 0x87C2, 0xB22B, 0x87C3, 0xB22C, 0x87C4, 0xB22D, - 0x87C5, 0xB22E, 0x87C6, 0xB22F, 0x87C7, 0xB230, 0x87C8, 0xB231, - 0x87C9, 0xB232, 0x87CA, 0xB233, 0x87CB, 0xB235, 0x87CC, 0xB236, - 0x87CD, 0xB237, 0x87CE, 0xB238, 0x87CF, 0xB239, 0x87D0, 0xB23A, - 0x87D1, 0xB23B, 0x87D2, 0xB23D, 0x87D3, 0xB23E, 0x87D4, 0xB23F, - 0x87D5, 0xB240, 0x87D6, 0xB241, 0x87D7, 0xB242, 0x87D8, 0xB243, - 0x87D9, 0xB244, 0x87DA, 0xB245, 0x87DB, 0xB246, 0x87DC, 0xB247, - 0x87DD, 0xB248, 0x87DE, 0xB249, 0x87DF, 0xB24A, 0x87E0, 0xB24B, - 0x87E1, 0xB24C, 0x87E2, 0xB24D, 0x87E3, 0xB24E, 0x87E4, 0xB24F, - 0x87E5, 0xB250, 0x87E6, 0xB251, 0x87E7, 0xB252, 0x87E8, 0xB253, - 0x87E9, 0xB254, 0x87EA, 0xB255, 0x87EB, 0xB256, 0x87EC, 0xB257, - 0x87ED, 0xB259, 0x87EE, 0xB25A, 0x87EF, 0xB25B, 0x87F0, 0xB25D, - 0x87F1, 0xB25E, 0x87F2, 0xB25F, 0x87F3, 0xB261, 0x87F4, 0xB262, - 0x87F5, 0xB263, 0x87F6, 0xB264, 0x87F7, 0xB265, 0x87F8, 0xB266, - 0x87F9, 0xB267, 0x87FA, 0xB26A, 0x87FB, 0xB26B, 0x87FC, 0xB26C, - 0x87FD, 0xB26D, 0x87FE, 0xB26E, 0x8841, 0xB26F, 0x8842, 0xB270, - 0x8843, 0xB271, 0x8844, 0xB272, 0x8845, 0xB273, 0x8846, 0xB276, - 0x8847, 0xB277, 0x8848, 0xB278, 0x8849, 0xB279, 0x884A, 0xB27A, - 0x884B, 0xB27B, 0x884C, 0xB27D, 0x884D, 0xB27E, 0x884E, 0xB27F, - 0x884F, 0xB280, 0x8850, 0xB281, 0x8851, 0xB282, 0x8852, 0xB283, - 0x8853, 0xB286, 0x8854, 0xB287, 0x8855, 0xB288, 0x8856, 0xB28A, - 0x8857, 0xB28B, 0x8858, 0xB28C, 0x8859, 0xB28D, 0x885A, 0xB28E, - 0x8861, 0xB28F, 0x8862, 0xB292, 0x8863, 0xB293, 0x8864, 0xB295, - 0x8865, 0xB296, 0x8866, 0xB297, 0x8867, 0xB29B, 0x8868, 0xB29C, - 0x8869, 0xB29D, 0x886A, 0xB29E, 0x886B, 0xB29F, 0x886C, 0xB2A2, - 0x886D, 0xB2A4, 0x886E, 0xB2A7, 0x886F, 0xB2A8, 0x8870, 0xB2A9, - 0x8871, 0xB2AB, 0x8872, 0xB2AD, 0x8873, 0xB2AE, 0x8874, 0xB2AF, - 0x8875, 0xB2B1, 0x8876, 0xB2B2, 0x8877, 0xB2B3, 0x8878, 0xB2B5, - 0x8879, 0xB2B6, 0x887A, 0xB2B7, 0x8881, 0xB2B8, 0x8882, 0xB2B9, - 0x8883, 0xB2BA, 0x8884, 0xB2BB, 0x8885, 0xB2BC, 0x8886, 0xB2BD, - 0x8887, 0xB2BE, 0x8888, 0xB2BF, 0x8889, 0xB2C0, 0x888A, 0xB2C1, - 0x888B, 0xB2C2, 0x888C, 0xB2C3, 0x888D, 0xB2C4, 0x888E, 0xB2C5, - 0x888F, 0xB2C6, 0x8890, 0xB2C7, 0x8891, 0xB2CA, 0x8892, 0xB2CB, - 0x8893, 0xB2CD, 0x8894, 0xB2CE, 0x8895, 0xB2CF, 0x8896, 0xB2D1, - 0x8897, 0xB2D3, 0x8898, 0xB2D4, 0x8899, 0xB2D5, 0x889A, 0xB2D6, - 0x889B, 0xB2D7, 0x889C, 0xB2DA, 0x889D, 0xB2DC, 0x889E, 0xB2DE, - 0x889F, 0xB2DF, 0x88A0, 0xB2E0, 0x88A1, 0xB2E1, 0x88A2, 0xB2E3, - 0x88A3, 0xB2E7, 0x88A4, 0xB2E9, 0x88A5, 0xB2EA, 0x88A6, 0xB2F0, - 0x88A7, 0xB2F1, 0x88A8, 0xB2F2, 0x88A9, 0xB2F6, 0x88AA, 0xB2FC, - 0x88AB, 0xB2FD, 0x88AC, 0xB2FE, 0x88AD, 0xB302, 0x88AE, 0xB303, - 0x88AF, 0xB305, 0x88B0, 0xB306, 0x88B1, 0xB307, 0x88B2, 0xB309, - 0x88B3, 0xB30A, 0x88B4, 0xB30B, 0x88B5, 0xB30C, 0x88B6, 0xB30D, - 0x88B7, 0xB30E, 0x88B8, 0xB30F, 0x88B9, 0xB312, 0x88BA, 0xB316, - 0x88BB, 0xB317, 0x88BC, 0xB318, 0x88BD, 0xB319, 0x88BE, 0xB31A, - 0x88BF, 0xB31B, 0x88C0, 0xB31D, 0x88C1, 0xB31E, 0x88C2, 0xB31F, - 0x88C3, 0xB320, 0x88C4, 0xB321, 0x88C5, 0xB322, 0x88C6, 0xB323, - 0x88C7, 0xB324, 0x88C8, 0xB325, 0x88C9, 0xB326, 0x88CA, 0xB327, - 0x88CB, 0xB328, 0x88CC, 0xB329, 0x88CD, 0xB32A, 0x88CE, 0xB32B, - 0x88CF, 0xB32C, 0x88D0, 0xB32D, 0x88D1, 0xB32E, 0x88D2, 0xB32F, - 0x88D3, 0xB330, 0x88D4, 0xB331, 0x88D5, 0xB332, 0x88D6, 0xB333, - 0x88D7, 0xB334, 0x88D8, 0xB335, 0x88D9, 0xB336, 0x88DA, 0xB337, - 0x88DB, 0xB338, 0x88DC, 0xB339, 0x88DD, 0xB33A, 0x88DE, 0xB33B, - 0x88DF, 0xB33C, 0x88E0, 0xB33D, 0x88E1, 0xB33E, 0x88E2, 0xB33F, - 0x88E3, 0xB340, 0x88E4, 0xB341, 0x88E5, 0xB342, 0x88E6, 0xB343, - 0x88E7, 0xB344, 0x88E8, 0xB345, 0x88E9, 0xB346, 0x88EA, 0xB347, - 0x88EB, 0xB348, 0x88EC, 0xB349, 0x88ED, 0xB34A, 0x88EE, 0xB34B, - 0x88EF, 0xB34C, 0x88F0, 0xB34D, 0x88F1, 0xB34E, 0x88F2, 0xB34F, - 0x88F3, 0xB350, 0x88F4, 0xB351, 0x88F5, 0xB352, 0x88F6, 0xB353, - 0x88F7, 0xB357, 0x88F8, 0xB359, 0x88F9, 0xB35A, 0x88FA, 0xB35D, - 0x88FB, 0xB360, 0x88FC, 0xB361, 0x88FD, 0xB362, 0x88FE, 0xB363, - 0x8941, 0xB366, 0x8942, 0xB368, 0x8943, 0xB36A, 0x8944, 0xB36C, - 0x8945, 0xB36D, 0x8946, 0xB36F, 0x8947, 0xB372, 0x8948, 0xB373, - 0x8949, 0xB375, 0x894A, 0xB376, 0x894B, 0xB377, 0x894C, 0xB379, - 0x894D, 0xB37A, 0x894E, 0xB37B, 0x894F, 0xB37C, 0x8950, 0xB37D, - 0x8951, 0xB37E, 0x8952, 0xB37F, 0x8953, 0xB382, 0x8954, 0xB386, - 0x8955, 0xB387, 0x8956, 0xB388, 0x8957, 0xB389, 0x8958, 0xB38A, - 0x8959, 0xB38B, 0x895A, 0xB38D, 0x8961, 0xB38E, 0x8962, 0xB38F, - 0x8963, 0xB391, 0x8964, 0xB392, 0x8965, 0xB393, 0x8966, 0xB395, - 0x8967, 0xB396, 0x8968, 0xB397, 0x8969, 0xB398, 0x896A, 0xB399, - 0x896B, 0xB39A, 0x896C, 0xB39B, 0x896D, 0xB39C, 0x896E, 0xB39D, - 0x896F, 0xB39E, 0x8970, 0xB39F, 0x8971, 0xB3A2, 0x8972, 0xB3A3, - 0x8973, 0xB3A4, 0x8974, 0xB3A5, 0x8975, 0xB3A6, 0x8976, 0xB3A7, - 0x8977, 0xB3A9, 0x8978, 0xB3AA, 0x8979, 0xB3AB, 0x897A, 0xB3AD, - 0x8981, 0xB3AE, 0x8982, 0xB3AF, 0x8983, 0xB3B0, 0x8984, 0xB3B1, - 0x8985, 0xB3B2, 0x8986, 0xB3B3, 0x8987, 0xB3B4, 0x8988, 0xB3B5, - 0x8989, 0xB3B6, 0x898A, 0xB3B7, 0x898B, 0xB3B8, 0x898C, 0xB3B9, - 0x898D, 0xB3BA, 0x898E, 0xB3BB, 0x898F, 0xB3BC, 0x8990, 0xB3BD, - 0x8991, 0xB3BE, 0x8992, 0xB3BF, 0x8993, 0xB3C0, 0x8994, 0xB3C1, - 0x8995, 0xB3C2, 0x8996, 0xB3C3, 0x8997, 0xB3C6, 0x8998, 0xB3C7, - 0x8999, 0xB3C9, 0x899A, 0xB3CA, 0x899B, 0xB3CD, 0x899C, 0xB3CF, - 0x899D, 0xB3D1, 0x899E, 0xB3D2, 0x899F, 0xB3D3, 0x89A0, 0xB3D6, - 0x89A1, 0xB3D8, 0x89A2, 0xB3DA, 0x89A3, 0xB3DC, 0x89A4, 0xB3DE, - 0x89A5, 0xB3DF, 0x89A6, 0xB3E1, 0x89A7, 0xB3E2, 0x89A8, 0xB3E3, - 0x89A9, 0xB3E5, 0x89AA, 0xB3E6, 0x89AB, 0xB3E7, 0x89AC, 0xB3E9, - 0x89AD, 0xB3EA, 0x89AE, 0xB3EB, 0x89AF, 0xB3EC, 0x89B0, 0xB3ED, - 0x89B1, 0xB3EE, 0x89B2, 0xB3EF, 0x89B3, 0xB3F0, 0x89B4, 0xB3F1, - 0x89B5, 0xB3F2, 0x89B6, 0xB3F3, 0x89B7, 0xB3F4, 0x89B8, 0xB3F5, - 0x89B9, 0xB3F6, 0x89BA, 0xB3F7, 0x89BB, 0xB3F8, 0x89BC, 0xB3F9, - 0x89BD, 0xB3FA, 0x89BE, 0xB3FB, 0x89BF, 0xB3FD, 0x89C0, 0xB3FE, - 0x89C1, 0xB3FF, 0x89C2, 0xB400, 0x89C3, 0xB401, 0x89C4, 0xB402, - 0x89C5, 0xB403, 0x89C6, 0xB404, 0x89C7, 0xB405, 0x89C8, 0xB406, - 0x89C9, 0xB407, 0x89CA, 0xB408, 0x89CB, 0xB409, 0x89CC, 0xB40A, - 0x89CD, 0xB40B, 0x89CE, 0xB40C, 0x89CF, 0xB40D, 0x89D0, 0xB40E, - 0x89D1, 0xB40F, 0x89D2, 0xB411, 0x89D3, 0xB412, 0x89D4, 0xB413, - 0x89D5, 0xB414, 0x89D6, 0xB415, 0x89D7, 0xB416, 0x89D8, 0xB417, - 0x89D9, 0xB419, 0x89DA, 0xB41A, 0x89DB, 0xB41B, 0x89DC, 0xB41D, - 0x89DD, 0xB41E, 0x89DE, 0xB41F, 0x89DF, 0xB421, 0x89E0, 0xB422, - 0x89E1, 0xB423, 0x89E2, 0xB424, 0x89E3, 0xB425, 0x89E4, 0xB426, - 0x89E5, 0xB427, 0x89E6, 0xB42A, 0x89E7, 0xB42C, 0x89E8, 0xB42D, - 0x89E9, 0xB42E, 0x89EA, 0xB42F, 0x89EB, 0xB430, 0x89EC, 0xB431, - 0x89ED, 0xB432, 0x89EE, 0xB433, 0x89EF, 0xB435, 0x89F0, 0xB436, - 0x89F1, 0xB437, 0x89F2, 0xB438, 0x89F3, 0xB439, 0x89F4, 0xB43A, - 0x89F5, 0xB43B, 0x89F6, 0xB43C, 0x89F7, 0xB43D, 0x89F8, 0xB43E, - 0x89F9, 0xB43F, 0x89FA, 0xB440, 0x89FB, 0xB441, 0x89FC, 0xB442, - 0x89FD, 0xB443, 0x89FE, 0xB444, 0x8A41, 0xB445, 0x8A42, 0xB446, - 0x8A43, 0xB447, 0x8A44, 0xB448, 0x8A45, 0xB449, 0x8A46, 0xB44A, - 0x8A47, 0xB44B, 0x8A48, 0xB44C, 0x8A49, 0xB44D, 0x8A4A, 0xB44E, - 0x8A4B, 0xB44F, 0x8A4C, 0xB452, 0x8A4D, 0xB453, 0x8A4E, 0xB455, - 0x8A4F, 0xB456, 0x8A50, 0xB457, 0x8A51, 0xB459, 0x8A52, 0xB45A, - 0x8A53, 0xB45B, 0x8A54, 0xB45C, 0x8A55, 0xB45D, 0x8A56, 0xB45E, - 0x8A57, 0xB45F, 0x8A58, 0xB462, 0x8A59, 0xB464, 0x8A5A, 0xB466, - 0x8A61, 0xB467, 0x8A62, 0xB468, 0x8A63, 0xB469, 0x8A64, 0xB46A, - 0x8A65, 0xB46B, 0x8A66, 0xB46D, 0x8A67, 0xB46E, 0x8A68, 0xB46F, - 0x8A69, 0xB470, 0x8A6A, 0xB471, 0x8A6B, 0xB472, 0x8A6C, 0xB473, - 0x8A6D, 0xB474, 0x8A6E, 0xB475, 0x8A6F, 0xB476, 0x8A70, 0xB477, - 0x8A71, 0xB478, 0x8A72, 0xB479, 0x8A73, 0xB47A, 0x8A74, 0xB47B, - 0x8A75, 0xB47C, 0x8A76, 0xB47D, 0x8A77, 0xB47E, 0x8A78, 0xB47F, - 0x8A79, 0xB481, 0x8A7A, 0xB482, 0x8A81, 0xB483, 0x8A82, 0xB484, - 0x8A83, 0xB485, 0x8A84, 0xB486, 0x8A85, 0xB487, 0x8A86, 0xB489, - 0x8A87, 0xB48A, 0x8A88, 0xB48B, 0x8A89, 0xB48C, 0x8A8A, 0xB48D, - 0x8A8B, 0xB48E, 0x8A8C, 0xB48F, 0x8A8D, 0xB490, 0x8A8E, 0xB491, - 0x8A8F, 0xB492, 0x8A90, 0xB493, 0x8A91, 0xB494, 0x8A92, 0xB495, - 0x8A93, 0xB496, 0x8A94, 0xB497, 0x8A95, 0xB498, 0x8A96, 0xB499, - 0x8A97, 0xB49A, 0x8A98, 0xB49B, 0x8A99, 0xB49C, 0x8A9A, 0xB49E, - 0x8A9B, 0xB49F, 0x8A9C, 0xB4A0, 0x8A9D, 0xB4A1, 0x8A9E, 0xB4A2, - 0x8A9F, 0xB4A3, 0x8AA0, 0xB4A5, 0x8AA1, 0xB4A6, 0x8AA2, 0xB4A7, - 0x8AA3, 0xB4A9, 0x8AA4, 0xB4AA, 0x8AA5, 0xB4AB, 0x8AA6, 0xB4AD, - 0x8AA7, 0xB4AE, 0x8AA8, 0xB4AF, 0x8AA9, 0xB4B0, 0x8AAA, 0xB4B1, - 0x8AAB, 0xB4B2, 0x8AAC, 0xB4B3, 0x8AAD, 0xB4B4, 0x8AAE, 0xB4B6, - 0x8AAF, 0xB4B8, 0x8AB0, 0xB4BA, 0x8AB1, 0xB4BB, 0x8AB2, 0xB4BC, - 0x8AB3, 0xB4BD, 0x8AB4, 0xB4BE, 0x8AB5, 0xB4BF, 0x8AB6, 0xB4C1, - 0x8AB7, 0xB4C2, 0x8AB8, 0xB4C3, 0x8AB9, 0xB4C5, 0x8ABA, 0xB4C6, - 0x8ABB, 0xB4C7, 0x8ABC, 0xB4C9, 0x8ABD, 0xB4CA, 0x8ABE, 0xB4CB, - 0x8ABF, 0xB4CC, 0x8AC0, 0xB4CD, 0x8AC1, 0xB4CE, 0x8AC2, 0xB4CF, - 0x8AC3, 0xB4D1, 0x8AC4, 0xB4D2, 0x8AC5, 0xB4D3, 0x8AC6, 0xB4D4, - 0x8AC7, 0xB4D6, 0x8AC8, 0xB4D7, 0x8AC9, 0xB4D8, 0x8ACA, 0xB4D9, - 0x8ACB, 0xB4DA, 0x8ACC, 0xB4DB, 0x8ACD, 0xB4DE, 0x8ACE, 0xB4DF, - 0x8ACF, 0xB4E1, 0x8AD0, 0xB4E2, 0x8AD1, 0xB4E5, 0x8AD2, 0xB4E7, - 0x8AD3, 0xB4E8, 0x8AD4, 0xB4E9, 0x8AD5, 0xB4EA, 0x8AD6, 0xB4EB, - 0x8AD7, 0xB4EE, 0x8AD8, 0xB4F0, 0x8AD9, 0xB4F2, 0x8ADA, 0xB4F3, - 0x8ADB, 0xB4F4, 0x8ADC, 0xB4F5, 0x8ADD, 0xB4F6, 0x8ADE, 0xB4F7, - 0x8ADF, 0xB4F9, 0x8AE0, 0xB4FA, 0x8AE1, 0xB4FB, 0x8AE2, 0xB4FC, - 0x8AE3, 0xB4FD, 0x8AE4, 0xB4FE, 0x8AE5, 0xB4FF, 0x8AE6, 0xB500, - 0x8AE7, 0xB501, 0x8AE8, 0xB502, 0x8AE9, 0xB503, 0x8AEA, 0xB504, - 0x8AEB, 0xB505, 0x8AEC, 0xB506, 0x8AED, 0xB507, 0x8AEE, 0xB508, - 0x8AEF, 0xB509, 0x8AF0, 0xB50A, 0x8AF1, 0xB50B, 0x8AF2, 0xB50C, - 0x8AF3, 0xB50D, 0x8AF4, 0xB50E, 0x8AF5, 0xB50F, 0x8AF6, 0xB510, - 0x8AF7, 0xB511, 0x8AF8, 0xB512, 0x8AF9, 0xB513, 0x8AFA, 0xB516, - 0x8AFB, 0xB517, 0x8AFC, 0xB519, 0x8AFD, 0xB51A, 0x8AFE, 0xB51D, - 0x8B41, 0xB51E, 0x8B42, 0xB51F, 0x8B43, 0xB520, 0x8B44, 0xB521, - 0x8B45, 0xB522, 0x8B46, 0xB523, 0x8B47, 0xB526, 0x8B48, 0xB52B, - 0x8B49, 0xB52C, 0x8B4A, 0xB52D, 0x8B4B, 0xB52E, 0x8B4C, 0xB52F, - 0x8B4D, 0xB532, 0x8B4E, 0xB533, 0x8B4F, 0xB535, 0x8B50, 0xB536, - 0x8B51, 0xB537, 0x8B52, 0xB539, 0x8B53, 0xB53A, 0x8B54, 0xB53B, - 0x8B55, 0xB53C, 0x8B56, 0xB53D, 0x8B57, 0xB53E, 0x8B58, 0xB53F, - 0x8B59, 0xB542, 0x8B5A, 0xB546, 0x8B61, 0xB547, 0x8B62, 0xB548, - 0x8B63, 0xB549, 0x8B64, 0xB54A, 0x8B65, 0xB54E, 0x8B66, 0xB54F, - 0x8B67, 0xB551, 0x8B68, 0xB552, 0x8B69, 0xB553, 0x8B6A, 0xB555, - 0x8B6B, 0xB556, 0x8B6C, 0xB557, 0x8B6D, 0xB558, 0x8B6E, 0xB559, - 0x8B6F, 0xB55A, 0x8B70, 0xB55B, 0x8B71, 0xB55E, 0x8B72, 0xB562, - 0x8B73, 0xB563, 0x8B74, 0xB564, 0x8B75, 0xB565, 0x8B76, 0xB566, - 0x8B77, 0xB567, 0x8B78, 0xB568, 0x8B79, 0xB569, 0x8B7A, 0xB56A, - 0x8B81, 0xB56B, 0x8B82, 0xB56C, 0x8B83, 0xB56D, 0x8B84, 0xB56E, - 0x8B85, 0xB56F, 0x8B86, 0xB570, 0x8B87, 0xB571, 0x8B88, 0xB572, - 0x8B89, 0xB573, 0x8B8A, 0xB574, 0x8B8B, 0xB575, 0x8B8C, 0xB576, - 0x8B8D, 0xB577, 0x8B8E, 0xB578, 0x8B8F, 0xB579, 0x8B90, 0xB57A, - 0x8B91, 0xB57B, 0x8B92, 0xB57C, 0x8B93, 0xB57D, 0x8B94, 0xB57E, - 0x8B95, 0xB57F, 0x8B96, 0xB580, 0x8B97, 0xB581, 0x8B98, 0xB582, - 0x8B99, 0xB583, 0x8B9A, 0xB584, 0x8B9B, 0xB585, 0x8B9C, 0xB586, - 0x8B9D, 0xB587, 0x8B9E, 0xB588, 0x8B9F, 0xB589, 0x8BA0, 0xB58A, - 0x8BA1, 0xB58B, 0x8BA2, 0xB58C, 0x8BA3, 0xB58D, 0x8BA4, 0xB58E, - 0x8BA5, 0xB58F, 0x8BA6, 0xB590, 0x8BA7, 0xB591, 0x8BA8, 0xB592, - 0x8BA9, 0xB593, 0x8BAA, 0xB594, 0x8BAB, 0xB595, 0x8BAC, 0xB596, - 0x8BAD, 0xB597, 0x8BAE, 0xB598, 0x8BAF, 0xB599, 0x8BB0, 0xB59A, - 0x8BB1, 0xB59B, 0x8BB2, 0xB59C, 0x8BB3, 0xB59D, 0x8BB4, 0xB59E, - 0x8BB5, 0xB59F, 0x8BB6, 0xB5A2, 0x8BB7, 0xB5A3, 0x8BB8, 0xB5A5, - 0x8BB9, 0xB5A6, 0x8BBA, 0xB5A7, 0x8BBB, 0xB5A9, 0x8BBC, 0xB5AC, - 0x8BBD, 0xB5AD, 0x8BBE, 0xB5AE, 0x8BBF, 0xB5AF, 0x8BC0, 0xB5B2, - 0x8BC1, 0xB5B6, 0x8BC2, 0xB5B7, 0x8BC3, 0xB5B8, 0x8BC4, 0xB5B9, - 0x8BC5, 0xB5BA, 0x8BC6, 0xB5BE, 0x8BC7, 0xB5BF, 0x8BC8, 0xB5C1, - 0x8BC9, 0xB5C2, 0x8BCA, 0xB5C3, 0x8BCB, 0xB5C5, 0x8BCC, 0xB5C6, - 0x8BCD, 0xB5C7, 0x8BCE, 0xB5C8, 0x8BCF, 0xB5C9, 0x8BD0, 0xB5CA, - 0x8BD1, 0xB5CB, 0x8BD2, 0xB5CE, 0x8BD3, 0xB5D2, 0x8BD4, 0xB5D3, - 0x8BD5, 0xB5D4, 0x8BD6, 0xB5D5, 0x8BD7, 0xB5D6, 0x8BD8, 0xB5D7, - 0x8BD9, 0xB5D9, 0x8BDA, 0xB5DA, 0x8BDB, 0xB5DB, 0x8BDC, 0xB5DC, - 0x8BDD, 0xB5DD, 0x8BDE, 0xB5DE, 0x8BDF, 0xB5DF, 0x8BE0, 0xB5E0, - 0x8BE1, 0xB5E1, 0x8BE2, 0xB5E2, 0x8BE3, 0xB5E3, 0x8BE4, 0xB5E4, - 0x8BE5, 0xB5E5, 0x8BE6, 0xB5E6, 0x8BE7, 0xB5E7, 0x8BE8, 0xB5E8, - 0x8BE9, 0xB5E9, 0x8BEA, 0xB5EA, 0x8BEB, 0xB5EB, 0x8BEC, 0xB5ED, - 0x8BED, 0xB5EE, 0x8BEE, 0xB5EF, 0x8BEF, 0xB5F0, 0x8BF0, 0xB5F1, - 0x8BF1, 0xB5F2, 0x8BF2, 0xB5F3, 0x8BF3, 0xB5F4, 0x8BF4, 0xB5F5, - 0x8BF5, 0xB5F6, 0x8BF6, 0xB5F7, 0x8BF7, 0xB5F8, 0x8BF8, 0xB5F9, - 0x8BF9, 0xB5FA, 0x8BFA, 0xB5FB, 0x8BFB, 0xB5FC, 0x8BFC, 0xB5FD, - 0x8BFD, 0xB5FE, 0x8BFE, 0xB5FF, 0x8C41, 0xB600, 0x8C42, 0xB601, - 0x8C43, 0xB602, 0x8C44, 0xB603, 0x8C45, 0xB604, 0x8C46, 0xB605, - 0x8C47, 0xB606, 0x8C48, 0xB607, 0x8C49, 0xB608, 0x8C4A, 0xB609, - 0x8C4B, 0xB60A, 0x8C4C, 0xB60B, 0x8C4D, 0xB60C, 0x8C4E, 0xB60D, - 0x8C4F, 0xB60E, 0x8C50, 0xB60F, 0x8C51, 0xB612, 0x8C52, 0xB613, - 0x8C53, 0xB615, 0x8C54, 0xB616, 0x8C55, 0xB617, 0x8C56, 0xB619, - 0x8C57, 0xB61A, 0x8C58, 0xB61B, 0x8C59, 0xB61C, 0x8C5A, 0xB61D, - 0x8C61, 0xB61E, 0x8C62, 0xB61F, 0x8C63, 0xB620, 0x8C64, 0xB621, - 0x8C65, 0xB622, 0x8C66, 0xB623, 0x8C67, 0xB624, 0x8C68, 0xB626, - 0x8C69, 0xB627, 0x8C6A, 0xB628, 0x8C6B, 0xB629, 0x8C6C, 0xB62A, - 0x8C6D, 0xB62B, 0x8C6E, 0xB62D, 0x8C6F, 0xB62E, 0x8C70, 0xB62F, - 0x8C71, 0xB630, 0x8C72, 0xB631, 0x8C73, 0xB632, 0x8C74, 0xB633, - 0x8C75, 0xB635, 0x8C76, 0xB636, 0x8C77, 0xB637, 0x8C78, 0xB638, - 0x8C79, 0xB639, 0x8C7A, 0xB63A, 0x8C81, 0xB63B, 0x8C82, 0xB63C, - 0x8C83, 0xB63D, 0x8C84, 0xB63E, 0x8C85, 0xB63F, 0x8C86, 0xB640, - 0x8C87, 0xB641, 0x8C88, 0xB642, 0x8C89, 0xB643, 0x8C8A, 0xB644, - 0x8C8B, 0xB645, 0x8C8C, 0xB646, 0x8C8D, 0xB647, 0x8C8E, 0xB649, - 0x8C8F, 0xB64A, 0x8C90, 0xB64B, 0x8C91, 0xB64C, 0x8C92, 0xB64D, - 0x8C93, 0xB64E, 0x8C94, 0xB64F, 0x8C95, 0xB650, 0x8C96, 0xB651, - 0x8C97, 0xB652, 0x8C98, 0xB653, 0x8C99, 0xB654, 0x8C9A, 0xB655, - 0x8C9B, 0xB656, 0x8C9C, 0xB657, 0x8C9D, 0xB658, 0x8C9E, 0xB659, - 0x8C9F, 0xB65A, 0x8CA0, 0xB65B, 0x8CA1, 0xB65C, 0x8CA2, 0xB65D, - 0x8CA3, 0xB65E, 0x8CA4, 0xB65F, 0x8CA5, 0xB660, 0x8CA6, 0xB661, - 0x8CA7, 0xB662, 0x8CA8, 0xB663, 0x8CA9, 0xB665, 0x8CAA, 0xB666, - 0x8CAB, 0xB667, 0x8CAC, 0xB669, 0x8CAD, 0xB66A, 0x8CAE, 0xB66B, - 0x8CAF, 0xB66C, 0x8CB0, 0xB66D, 0x8CB1, 0xB66E, 0x8CB2, 0xB66F, - 0x8CB3, 0xB670, 0x8CB4, 0xB671, 0x8CB5, 0xB672, 0x8CB6, 0xB673, - 0x8CB7, 0xB674, 0x8CB8, 0xB675, 0x8CB9, 0xB676, 0x8CBA, 0xB677, - 0x8CBB, 0xB678, 0x8CBC, 0xB679, 0x8CBD, 0xB67A, 0x8CBE, 0xB67B, - 0x8CBF, 0xB67C, 0x8CC0, 0xB67D, 0x8CC1, 0xB67E, 0x8CC2, 0xB67F, - 0x8CC3, 0xB680, 0x8CC4, 0xB681, 0x8CC5, 0xB682, 0x8CC6, 0xB683, - 0x8CC7, 0xB684, 0x8CC8, 0xB685, 0x8CC9, 0xB686, 0x8CCA, 0xB687, - 0x8CCB, 0xB688, 0x8CCC, 0xB689, 0x8CCD, 0xB68A, 0x8CCE, 0xB68B, - 0x8CCF, 0xB68C, 0x8CD0, 0xB68D, 0x8CD1, 0xB68E, 0x8CD2, 0xB68F, - 0x8CD3, 0xB690, 0x8CD4, 0xB691, 0x8CD5, 0xB692, 0x8CD6, 0xB693, - 0x8CD7, 0xB694, 0x8CD8, 0xB695, 0x8CD9, 0xB696, 0x8CDA, 0xB697, - 0x8CDB, 0xB698, 0x8CDC, 0xB699, 0x8CDD, 0xB69A, 0x8CDE, 0xB69B, - 0x8CDF, 0xB69E, 0x8CE0, 0xB69F, 0x8CE1, 0xB6A1, 0x8CE2, 0xB6A2, - 0x8CE3, 0xB6A3, 0x8CE4, 0xB6A5, 0x8CE5, 0xB6A6, 0x8CE6, 0xB6A7, - 0x8CE7, 0xB6A8, 0x8CE8, 0xB6A9, 0x8CE9, 0xB6AA, 0x8CEA, 0xB6AD, - 0x8CEB, 0xB6AE, 0x8CEC, 0xB6AF, 0x8CED, 0xB6B0, 0x8CEE, 0xB6B2, - 0x8CEF, 0xB6B3, 0x8CF0, 0xB6B4, 0x8CF1, 0xB6B5, 0x8CF2, 0xB6B6, - 0x8CF3, 0xB6B7, 0x8CF4, 0xB6B8, 0x8CF5, 0xB6B9, 0x8CF6, 0xB6BA, - 0x8CF7, 0xB6BB, 0x8CF8, 0xB6BC, 0x8CF9, 0xB6BD, 0x8CFA, 0xB6BE, - 0x8CFB, 0xB6BF, 0x8CFC, 0xB6C0, 0x8CFD, 0xB6C1, 0x8CFE, 0xB6C2, - 0x8D41, 0xB6C3, 0x8D42, 0xB6C4, 0x8D43, 0xB6C5, 0x8D44, 0xB6C6, - 0x8D45, 0xB6C7, 0x8D46, 0xB6C8, 0x8D47, 0xB6C9, 0x8D48, 0xB6CA, - 0x8D49, 0xB6CB, 0x8D4A, 0xB6CC, 0x8D4B, 0xB6CD, 0x8D4C, 0xB6CE, - 0x8D4D, 0xB6CF, 0x8D4E, 0xB6D0, 0x8D4F, 0xB6D1, 0x8D50, 0xB6D2, - 0x8D51, 0xB6D3, 0x8D52, 0xB6D5, 0x8D53, 0xB6D6, 0x8D54, 0xB6D7, - 0x8D55, 0xB6D8, 0x8D56, 0xB6D9, 0x8D57, 0xB6DA, 0x8D58, 0xB6DB, - 0x8D59, 0xB6DC, 0x8D5A, 0xB6DD, 0x8D61, 0xB6DE, 0x8D62, 0xB6DF, - 0x8D63, 0xB6E0, 0x8D64, 0xB6E1, 0x8D65, 0xB6E2, 0x8D66, 0xB6E3, - 0x8D67, 0xB6E4, 0x8D68, 0xB6E5, 0x8D69, 0xB6E6, 0x8D6A, 0xB6E7, - 0x8D6B, 0xB6E8, 0x8D6C, 0xB6E9, 0x8D6D, 0xB6EA, 0x8D6E, 0xB6EB, - 0x8D6F, 0xB6EC, 0x8D70, 0xB6ED, 0x8D71, 0xB6EE, 0x8D72, 0xB6EF, - 0x8D73, 0xB6F1, 0x8D74, 0xB6F2, 0x8D75, 0xB6F3, 0x8D76, 0xB6F5, - 0x8D77, 0xB6F6, 0x8D78, 0xB6F7, 0x8D79, 0xB6F9, 0x8D7A, 0xB6FA, - 0x8D81, 0xB6FB, 0x8D82, 0xB6FC, 0x8D83, 0xB6FD, 0x8D84, 0xB6FE, - 0x8D85, 0xB6FF, 0x8D86, 0xB702, 0x8D87, 0xB703, 0x8D88, 0xB704, - 0x8D89, 0xB706, 0x8D8A, 0xB707, 0x8D8B, 0xB708, 0x8D8C, 0xB709, - 0x8D8D, 0xB70A, 0x8D8E, 0xB70B, 0x8D8F, 0xB70C, 0x8D90, 0xB70D, - 0x8D91, 0xB70E, 0x8D92, 0xB70F, 0x8D93, 0xB710, 0x8D94, 0xB711, - 0x8D95, 0xB712, 0x8D96, 0xB713, 0x8D97, 0xB714, 0x8D98, 0xB715, - 0x8D99, 0xB716, 0x8D9A, 0xB717, 0x8D9B, 0xB718, 0x8D9C, 0xB719, - 0x8D9D, 0xB71A, 0x8D9E, 0xB71B, 0x8D9F, 0xB71C, 0x8DA0, 0xB71D, - 0x8DA1, 0xB71E, 0x8DA2, 0xB71F, 0x8DA3, 0xB720, 0x8DA4, 0xB721, - 0x8DA5, 0xB722, 0x8DA6, 0xB723, 0x8DA7, 0xB724, 0x8DA8, 0xB725, - 0x8DA9, 0xB726, 0x8DAA, 0xB727, 0x8DAB, 0xB72A, 0x8DAC, 0xB72B, - 0x8DAD, 0xB72D, 0x8DAE, 0xB72E, 0x8DAF, 0xB731, 0x8DB0, 0xB732, - 0x8DB1, 0xB733, 0x8DB2, 0xB734, 0x8DB3, 0xB735, 0x8DB4, 0xB736, - 0x8DB5, 0xB737, 0x8DB6, 0xB73A, 0x8DB7, 0xB73C, 0x8DB8, 0xB73D, - 0x8DB9, 0xB73E, 0x8DBA, 0xB73F, 0x8DBB, 0xB740, 0x8DBC, 0xB741, - 0x8DBD, 0xB742, 0x8DBE, 0xB743, 0x8DBF, 0xB745, 0x8DC0, 0xB746, - 0x8DC1, 0xB747, 0x8DC2, 0xB749, 0x8DC3, 0xB74A, 0x8DC4, 0xB74B, - 0x8DC5, 0xB74D, 0x8DC6, 0xB74E, 0x8DC7, 0xB74F, 0x8DC8, 0xB750, - 0x8DC9, 0xB751, 0x8DCA, 0xB752, 0x8DCB, 0xB753, 0x8DCC, 0xB756, - 0x8DCD, 0xB757, 0x8DCE, 0xB758, 0x8DCF, 0xB759, 0x8DD0, 0xB75A, - 0x8DD1, 0xB75B, 0x8DD2, 0xB75C, 0x8DD3, 0xB75D, 0x8DD4, 0xB75E, - 0x8DD5, 0xB75F, 0x8DD6, 0xB761, 0x8DD7, 0xB762, 0x8DD8, 0xB763, - 0x8DD9, 0xB765, 0x8DDA, 0xB766, 0x8DDB, 0xB767, 0x8DDC, 0xB769, - 0x8DDD, 0xB76A, 0x8DDE, 0xB76B, 0x8DDF, 0xB76C, 0x8DE0, 0xB76D, - 0x8DE1, 0xB76E, 0x8DE2, 0xB76F, 0x8DE3, 0xB772, 0x8DE4, 0xB774, - 0x8DE5, 0xB776, 0x8DE6, 0xB777, 0x8DE7, 0xB778, 0x8DE8, 0xB779, - 0x8DE9, 0xB77A, 0x8DEA, 0xB77B, 0x8DEB, 0xB77E, 0x8DEC, 0xB77F, - 0x8DED, 0xB781, 0x8DEE, 0xB782, 0x8DEF, 0xB783, 0x8DF0, 0xB785, - 0x8DF1, 0xB786, 0x8DF2, 0xB787, 0x8DF3, 0xB788, 0x8DF4, 0xB789, - 0x8DF5, 0xB78A, 0x8DF6, 0xB78B, 0x8DF7, 0xB78E, 0x8DF8, 0xB793, - 0x8DF9, 0xB794, 0x8DFA, 0xB795, 0x8DFB, 0xB79A, 0x8DFC, 0xB79B, - 0x8DFD, 0xB79D, 0x8DFE, 0xB79E, 0x8E41, 0xB79F, 0x8E42, 0xB7A1, - 0x8E43, 0xB7A2, 0x8E44, 0xB7A3, 0x8E45, 0xB7A4, 0x8E46, 0xB7A5, - 0x8E47, 0xB7A6, 0x8E48, 0xB7A7, 0x8E49, 0xB7AA, 0x8E4A, 0xB7AE, - 0x8E4B, 0xB7AF, 0x8E4C, 0xB7B0, 0x8E4D, 0xB7B1, 0x8E4E, 0xB7B2, - 0x8E4F, 0xB7B3, 0x8E50, 0xB7B6, 0x8E51, 0xB7B7, 0x8E52, 0xB7B9, - 0x8E53, 0xB7BA, 0x8E54, 0xB7BB, 0x8E55, 0xB7BC, 0x8E56, 0xB7BD, - 0x8E57, 0xB7BE, 0x8E58, 0xB7BF, 0x8E59, 0xB7C0, 0x8E5A, 0xB7C1, - 0x8E61, 0xB7C2, 0x8E62, 0xB7C3, 0x8E63, 0xB7C4, 0x8E64, 0xB7C5, - 0x8E65, 0xB7C6, 0x8E66, 0xB7C8, 0x8E67, 0xB7CA, 0x8E68, 0xB7CB, - 0x8E69, 0xB7CC, 0x8E6A, 0xB7CD, 0x8E6B, 0xB7CE, 0x8E6C, 0xB7CF, - 0x8E6D, 0xB7D0, 0x8E6E, 0xB7D1, 0x8E6F, 0xB7D2, 0x8E70, 0xB7D3, - 0x8E71, 0xB7D4, 0x8E72, 0xB7D5, 0x8E73, 0xB7D6, 0x8E74, 0xB7D7, - 0x8E75, 0xB7D8, 0x8E76, 0xB7D9, 0x8E77, 0xB7DA, 0x8E78, 0xB7DB, - 0x8E79, 0xB7DC, 0x8E7A, 0xB7DD, 0x8E81, 0xB7DE, 0x8E82, 0xB7DF, - 0x8E83, 0xB7E0, 0x8E84, 0xB7E1, 0x8E85, 0xB7E2, 0x8E86, 0xB7E3, - 0x8E87, 0xB7E4, 0x8E88, 0xB7E5, 0x8E89, 0xB7E6, 0x8E8A, 0xB7E7, - 0x8E8B, 0xB7E8, 0x8E8C, 0xB7E9, 0x8E8D, 0xB7EA, 0x8E8E, 0xB7EB, - 0x8E8F, 0xB7EE, 0x8E90, 0xB7EF, 0x8E91, 0xB7F1, 0x8E92, 0xB7F2, - 0x8E93, 0xB7F3, 0x8E94, 0xB7F5, 0x8E95, 0xB7F6, 0x8E96, 0xB7F7, - 0x8E97, 0xB7F8, 0x8E98, 0xB7F9, 0x8E99, 0xB7FA, 0x8E9A, 0xB7FB, - 0x8E9B, 0xB7FE, 0x8E9C, 0xB802, 0x8E9D, 0xB803, 0x8E9E, 0xB804, - 0x8E9F, 0xB805, 0x8EA0, 0xB806, 0x8EA1, 0xB80A, 0x8EA2, 0xB80B, - 0x8EA3, 0xB80D, 0x8EA4, 0xB80E, 0x8EA5, 0xB80F, 0x8EA6, 0xB811, - 0x8EA7, 0xB812, 0x8EA8, 0xB813, 0x8EA9, 0xB814, 0x8EAA, 0xB815, - 0x8EAB, 0xB816, 0x8EAC, 0xB817, 0x8EAD, 0xB81A, 0x8EAE, 0xB81C, - 0x8EAF, 0xB81E, 0x8EB0, 0xB81F, 0x8EB1, 0xB820, 0x8EB2, 0xB821, - 0x8EB3, 0xB822, 0x8EB4, 0xB823, 0x8EB5, 0xB826, 0x8EB6, 0xB827, - 0x8EB7, 0xB829, 0x8EB8, 0xB82A, 0x8EB9, 0xB82B, 0x8EBA, 0xB82D, - 0x8EBB, 0xB82E, 0x8EBC, 0xB82F, 0x8EBD, 0xB830, 0x8EBE, 0xB831, - 0x8EBF, 0xB832, 0x8EC0, 0xB833, 0x8EC1, 0xB836, 0x8EC2, 0xB83A, - 0x8EC3, 0xB83B, 0x8EC4, 0xB83C, 0x8EC5, 0xB83D, 0x8EC6, 0xB83E, - 0x8EC7, 0xB83F, 0x8EC8, 0xB841, 0x8EC9, 0xB842, 0x8ECA, 0xB843, - 0x8ECB, 0xB845, 0x8ECC, 0xB846, 0x8ECD, 0xB847, 0x8ECE, 0xB848, - 0x8ECF, 0xB849, 0x8ED0, 0xB84A, 0x8ED1, 0xB84B, 0x8ED2, 0xB84C, - 0x8ED3, 0xB84D, 0x8ED4, 0xB84E, 0x8ED5, 0xB84F, 0x8ED6, 0xB850, - 0x8ED7, 0xB852, 0x8ED8, 0xB854, 0x8ED9, 0xB855, 0x8EDA, 0xB856, - 0x8EDB, 0xB857, 0x8EDC, 0xB858, 0x8EDD, 0xB859, 0x8EDE, 0xB85A, - 0x8EDF, 0xB85B, 0x8EE0, 0xB85E, 0x8EE1, 0xB85F, 0x8EE2, 0xB861, - 0x8EE3, 0xB862, 0x8EE4, 0xB863, 0x8EE5, 0xB865, 0x8EE6, 0xB866, - 0x8EE7, 0xB867, 0x8EE8, 0xB868, 0x8EE9, 0xB869, 0x8EEA, 0xB86A, - 0x8EEB, 0xB86B, 0x8EEC, 0xB86E, 0x8EED, 0xB870, 0x8EEE, 0xB872, - 0x8EEF, 0xB873, 0x8EF0, 0xB874, 0x8EF1, 0xB875, 0x8EF2, 0xB876, - 0x8EF3, 0xB877, 0x8EF4, 0xB879, 0x8EF5, 0xB87A, 0x8EF6, 0xB87B, - 0x8EF7, 0xB87D, 0x8EF8, 0xB87E, 0x8EF9, 0xB87F, 0x8EFA, 0xB880, - 0x8EFB, 0xB881, 0x8EFC, 0xB882, 0x8EFD, 0xB883, 0x8EFE, 0xB884, - 0x8F41, 0xB885, 0x8F42, 0xB886, 0x8F43, 0xB887, 0x8F44, 0xB888, - 0x8F45, 0xB889, 0x8F46, 0xB88A, 0x8F47, 0xB88B, 0x8F48, 0xB88C, - 0x8F49, 0xB88E, 0x8F4A, 0xB88F, 0x8F4B, 0xB890, 0x8F4C, 0xB891, - 0x8F4D, 0xB892, 0x8F4E, 0xB893, 0x8F4F, 0xB894, 0x8F50, 0xB895, - 0x8F51, 0xB896, 0x8F52, 0xB897, 0x8F53, 0xB898, 0x8F54, 0xB899, - 0x8F55, 0xB89A, 0x8F56, 0xB89B, 0x8F57, 0xB89C, 0x8F58, 0xB89D, - 0x8F59, 0xB89E, 0x8F5A, 0xB89F, 0x8F61, 0xB8A0, 0x8F62, 0xB8A1, - 0x8F63, 0xB8A2, 0x8F64, 0xB8A3, 0x8F65, 0xB8A4, 0x8F66, 0xB8A5, - 0x8F67, 0xB8A6, 0x8F68, 0xB8A7, 0x8F69, 0xB8A9, 0x8F6A, 0xB8AA, - 0x8F6B, 0xB8AB, 0x8F6C, 0xB8AC, 0x8F6D, 0xB8AD, 0x8F6E, 0xB8AE, - 0x8F6F, 0xB8AF, 0x8F70, 0xB8B1, 0x8F71, 0xB8B2, 0x8F72, 0xB8B3, - 0x8F73, 0xB8B5, 0x8F74, 0xB8B6, 0x8F75, 0xB8B7, 0x8F76, 0xB8B9, - 0x8F77, 0xB8BA, 0x8F78, 0xB8BB, 0x8F79, 0xB8BC, 0x8F7A, 0xB8BD, - 0x8F81, 0xB8BE, 0x8F82, 0xB8BF, 0x8F83, 0xB8C2, 0x8F84, 0xB8C4, - 0x8F85, 0xB8C6, 0x8F86, 0xB8C7, 0x8F87, 0xB8C8, 0x8F88, 0xB8C9, - 0x8F89, 0xB8CA, 0x8F8A, 0xB8CB, 0x8F8B, 0xB8CD, 0x8F8C, 0xB8CE, - 0x8F8D, 0xB8CF, 0x8F8E, 0xB8D1, 0x8F8F, 0xB8D2, 0x8F90, 0xB8D3, - 0x8F91, 0xB8D5, 0x8F92, 0xB8D6, 0x8F93, 0xB8D7, 0x8F94, 0xB8D8, - 0x8F95, 0xB8D9, 0x8F96, 0xB8DA, 0x8F97, 0xB8DB, 0x8F98, 0xB8DC, - 0x8F99, 0xB8DE, 0x8F9A, 0xB8E0, 0x8F9B, 0xB8E2, 0x8F9C, 0xB8E3, - 0x8F9D, 0xB8E4, 0x8F9E, 0xB8E5, 0x8F9F, 0xB8E6, 0x8FA0, 0xB8E7, - 0x8FA1, 0xB8EA, 0x8FA2, 0xB8EB, 0x8FA3, 0xB8ED, 0x8FA4, 0xB8EE, - 0x8FA5, 0xB8EF, 0x8FA6, 0xB8F1, 0x8FA7, 0xB8F2, 0x8FA8, 0xB8F3, - 0x8FA9, 0xB8F4, 0x8FAA, 0xB8F5, 0x8FAB, 0xB8F6, 0x8FAC, 0xB8F7, - 0x8FAD, 0xB8FA, 0x8FAE, 0xB8FC, 0x8FAF, 0xB8FE, 0x8FB0, 0xB8FF, - 0x8FB1, 0xB900, 0x8FB2, 0xB901, 0x8FB3, 0xB902, 0x8FB4, 0xB903, - 0x8FB5, 0xB905, 0x8FB6, 0xB906, 0x8FB7, 0xB907, 0x8FB8, 0xB908, - 0x8FB9, 0xB909, 0x8FBA, 0xB90A, 0x8FBB, 0xB90B, 0x8FBC, 0xB90C, - 0x8FBD, 0xB90D, 0x8FBE, 0xB90E, 0x8FBF, 0xB90F, 0x8FC0, 0xB910, - 0x8FC1, 0xB911, 0x8FC2, 0xB912, 0x8FC3, 0xB913, 0x8FC4, 0xB914, - 0x8FC5, 0xB915, 0x8FC6, 0xB916, 0x8FC7, 0xB917, 0x8FC8, 0xB919, - 0x8FC9, 0xB91A, 0x8FCA, 0xB91B, 0x8FCB, 0xB91C, 0x8FCC, 0xB91D, - 0x8FCD, 0xB91E, 0x8FCE, 0xB91F, 0x8FCF, 0xB921, 0x8FD0, 0xB922, - 0x8FD1, 0xB923, 0x8FD2, 0xB924, 0x8FD3, 0xB925, 0x8FD4, 0xB926, - 0x8FD5, 0xB927, 0x8FD6, 0xB928, 0x8FD7, 0xB929, 0x8FD8, 0xB92A, - 0x8FD9, 0xB92B, 0x8FDA, 0xB92C, 0x8FDB, 0xB92D, 0x8FDC, 0xB92E, - 0x8FDD, 0xB92F, 0x8FDE, 0xB930, 0x8FDF, 0xB931, 0x8FE0, 0xB932, - 0x8FE1, 0xB933, 0x8FE2, 0xB934, 0x8FE3, 0xB935, 0x8FE4, 0xB936, - 0x8FE5, 0xB937, 0x8FE6, 0xB938, 0x8FE7, 0xB939, 0x8FE8, 0xB93A, - 0x8FE9, 0xB93B, 0x8FEA, 0xB93E, 0x8FEB, 0xB93F, 0x8FEC, 0xB941, - 0x8FED, 0xB942, 0x8FEE, 0xB943, 0x8FEF, 0xB945, 0x8FF0, 0xB946, - 0x8FF1, 0xB947, 0x8FF2, 0xB948, 0x8FF3, 0xB949, 0x8FF4, 0xB94A, - 0x8FF5, 0xB94B, 0x8FF6, 0xB94D, 0x8FF7, 0xB94E, 0x8FF8, 0xB950, - 0x8FF9, 0xB952, 0x8FFA, 0xB953, 0x8FFB, 0xB954, 0x8FFC, 0xB955, - 0x8FFD, 0xB956, 0x8FFE, 0xB957, 0x9041, 0xB95A, 0x9042, 0xB95B, - 0x9043, 0xB95D, 0x9044, 0xB95E, 0x9045, 0xB95F, 0x9046, 0xB961, - 0x9047, 0xB962, 0x9048, 0xB963, 0x9049, 0xB964, 0x904A, 0xB965, - 0x904B, 0xB966, 0x904C, 0xB967, 0x904D, 0xB96A, 0x904E, 0xB96C, - 0x904F, 0xB96E, 0x9050, 0xB96F, 0x9051, 0xB970, 0x9052, 0xB971, - 0x9053, 0xB972, 0x9054, 0xB973, 0x9055, 0xB976, 0x9056, 0xB977, - 0x9057, 0xB979, 0x9058, 0xB97A, 0x9059, 0xB97B, 0x905A, 0xB97D, - 0x9061, 0xB97E, 0x9062, 0xB97F, 0x9063, 0xB980, 0x9064, 0xB981, - 0x9065, 0xB982, 0x9066, 0xB983, 0x9067, 0xB986, 0x9068, 0xB988, - 0x9069, 0xB98B, 0x906A, 0xB98C, 0x906B, 0xB98F, 0x906C, 0xB990, - 0x906D, 0xB991, 0x906E, 0xB992, 0x906F, 0xB993, 0x9070, 0xB994, - 0x9071, 0xB995, 0x9072, 0xB996, 0x9073, 0xB997, 0x9074, 0xB998, - 0x9075, 0xB999, 0x9076, 0xB99A, 0x9077, 0xB99B, 0x9078, 0xB99C, - 0x9079, 0xB99D, 0x907A, 0xB99E, 0x9081, 0xB99F, 0x9082, 0xB9A0, - 0x9083, 0xB9A1, 0x9084, 0xB9A2, 0x9085, 0xB9A3, 0x9086, 0xB9A4, - 0x9087, 0xB9A5, 0x9088, 0xB9A6, 0x9089, 0xB9A7, 0x908A, 0xB9A8, - 0x908B, 0xB9A9, 0x908C, 0xB9AA, 0x908D, 0xB9AB, 0x908E, 0xB9AE, - 0x908F, 0xB9AF, 0x9090, 0xB9B1, 0x9091, 0xB9B2, 0x9092, 0xB9B3, - 0x9093, 0xB9B5, 0x9094, 0xB9B6, 0x9095, 0xB9B7, 0x9096, 0xB9B8, - 0x9097, 0xB9B9, 0x9098, 0xB9BA, 0x9099, 0xB9BB, 0x909A, 0xB9BE, - 0x909B, 0xB9C0, 0x909C, 0xB9C2, 0x909D, 0xB9C3, 0x909E, 0xB9C4, - 0x909F, 0xB9C5, 0x90A0, 0xB9C6, 0x90A1, 0xB9C7, 0x90A2, 0xB9CA, - 0x90A3, 0xB9CB, 0x90A4, 0xB9CD, 0x90A5, 0xB9D3, 0x90A6, 0xB9D4, - 0x90A7, 0xB9D5, 0x90A8, 0xB9D6, 0x90A9, 0xB9D7, 0x90AA, 0xB9DA, - 0x90AB, 0xB9DC, 0x90AC, 0xB9DF, 0x90AD, 0xB9E0, 0x90AE, 0xB9E2, - 0x90AF, 0xB9E6, 0x90B0, 0xB9E7, 0x90B1, 0xB9E9, 0x90B2, 0xB9EA, - 0x90B3, 0xB9EB, 0x90B4, 0xB9ED, 0x90B5, 0xB9EE, 0x90B6, 0xB9EF, - 0x90B7, 0xB9F0, 0x90B8, 0xB9F1, 0x90B9, 0xB9F2, 0x90BA, 0xB9F3, - 0x90BB, 0xB9F6, 0x90BC, 0xB9FB, 0x90BD, 0xB9FC, 0x90BE, 0xB9FD, - 0x90BF, 0xB9FE, 0x90C0, 0xB9FF, 0x90C1, 0xBA02, 0x90C2, 0xBA03, - 0x90C3, 0xBA04, 0x90C4, 0xBA05, 0x90C5, 0xBA06, 0x90C6, 0xBA07, - 0x90C7, 0xBA09, 0x90C8, 0xBA0A, 0x90C9, 0xBA0B, 0x90CA, 0xBA0C, - 0x90CB, 0xBA0D, 0x90CC, 0xBA0E, 0x90CD, 0xBA0F, 0x90CE, 0xBA10, - 0x90CF, 0xBA11, 0x90D0, 0xBA12, 0x90D1, 0xBA13, 0x90D2, 0xBA14, - 0x90D3, 0xBA16, 0x90D4, 0xBA17, 0x90D5, 0xBA18, 0x90D6, 0xBA19, - 0x90D7, 0xBA1A, 0x90D8, 0xBA1B, 0x90D9, 0xBA1C, 0x90DA, 0xBA1D, - 0x90DB, 0xBA1E, 0x90DC, 0xBA1F, 0x90DD, 0xBA20, 0x90DE, 0xBA21, - 0x90DF, 0xBA22, 0x90E0, 0xBA23, 0x90E1, 0xBA24, 0x90E2, 0xBA25, - 0x90E3, 0xBA26, 0x90E4, 0xBA27, 0x90E5, 0xBA28, 0x90E6, 0xBA29, - 0x90E7, 0xBA2A, 0x90E8, 0xBA2B, 0x90E9, 0xBA2C, 0x90EA, 0xBA2D, - 0x90EB, 0xBA2E, 0x90EC, 0xBA2F, 0x90ED, 0xBA30, 0x90EE, 0xBA31, - 0x90EF, 0xBA32, 0x90F0, 0xBA33, 0x90F1, 0xBA34, 0x90F2, 0xBA35, - 0x90F3, 0xBA36, 0x90F4, 0xBA37, 0x90F5, 0xBA3A, 0x90F6, 0xBA3B, - 0x90F7, 0xBA3D, 0x90F8, 0xBA3E, 0x90F9, 0xBA3F, 0x90FA, 0xBA41, - 0x90FB, 0xBA43, 0x90FC, 0xBA44, 0x90FD, 0xBA45, 0x90FE, 0xBA46, - 0x9141, 0xBA47, 0x9142, 0xBA4A, 0x9143, 0xBA4C, 0x9144, 0xBA4F, - 0x9145, 0xBA50, 0x9146, 0xBA51, 0x9147, 0xBA52, 0x9148, 0xBA56, - 0x9149, 0xBA57, 0x914A, 0xBA59, 0x914B, 0xBA5A, 0x914C, 0xBA5B, - 0x914D, 0xBA5D, 0x914E, 0xBA5E, 0x914F, 0xBA5F, 0x9150, 0xBA60, - 0x9151, 0xBA61, 0x9152, 0xBA62, 0x9153, 0xBA63, 0x9154, 0xBA66, - 0x9155, 0xBA6A, 0x9156, 0xBA6B, 0x9157, 0xBA6C, 0x9158, 0xBA6D, - 0x9159, 0xBA6E, 0x915A, 0xBA6F, 0x9161, 0xBA72, 0x9162, 0xBA73, - 0x9163, 0xBA75, 0x9164, 0xBA76, 0x9165, 0xBA77, 0x9166, 0xBA79, - 0x9167, 0xBA7A, 0x9168, 0xBA7B, 0x9169, 0xBA7C, 0x916A, 0xBA7D, - 0x916B, 0xBA7E, 0x916C, 0xBA7F, 0x916D, 0xBA80, 0x916E, 0xBA81, - 0x916F, 0xBA82, 0x9170, 0xBA86, 0x9171, 0xBA88, 0x9172, 0xBA89, - 0x9173, 0xBA8A, 0x9174, 0xBA8B, 0x9175, 0xBA8D, 0x9176, 0xBA8E, - 0x9177, 0xBA8F, 0x9178, 0xBA90, 0x9179, 0xBA91, 0x917A, 0xBA92, - 0x9181, 0xBA93, 0x9182, 0xBA94, 0x9183, 0xBA95, 0x9184, 0xBA96, - 0x9185, 0xBA97, 0x9186, 0xBA98, 0x9187, 0xBA99, 0x9188, 0xBA9A, - 0x9189, 0xBA9B, 0x918A, 0xBA9C, 0x918B, 0xBA9D, 0x918C, 0xBA9E, - 0x918D, 0xBA9F, 0x918E, 0xBAA0, 0x918F, 0xBAA1, 0x9190, 0xBAA2, - 0x9191, 0xBAA3, 0x9192, 0xBAA4, 0x9193, 0xBAA5, 0x9194, 0xBAA6, - 0x9195, 0xBAA7, 0x9196, 0xBAAA, 0x9197, 0xBAAD, 0x9198, 0xBAAE, - 0x9199, 0xBAAF, 0x919A, 0xBAB1, 0x919B, 0xBAB3, 0x919C, 0xBAB4, - 0x919D, 0xBAB5, 0x919E, 0xBAB6, 0x919F, 0xBAB7, 0x91A0, 0xBABA, - 0x91A1, 0xBABC, 0x91A2, 0xBABE, 0x91A3, 0xBABF, 0x91A4, 0xBAC0, - 0x91A5, 0xBAC1, 0x91A6, 0xBAC2, 0x91A7, 0xBAC3, 0x91A8, 0xBAC5, - 0x91A9, 0xBAC6, 0x91AA, 0xBAC7, 0x91AB, 0xBAC9, 0x91AC, 0xBACA, - 0x91AD, 0xBACB, 0x91AE, 0xBACC, 0x91AF, 0xBACD, 0x91B0, 0xBACE, - 0x91B1, 0xBACF, 0x91B2, 0xBAD0, 0x91B3, 0xBAD1, 0x91B4, 0xBAD2, - 0x91B5, 0xBAD3, 0x91B6, 0xBAD4, 0x91B7, 0xBAD5, 0x91B8, 0xBAD6, - 0x91B9, 0xBAD7, 0x91BA, 0xBADA, 0x91BB, 0xBADB, 0x91BC, 0xBADC, - 0x91BD, 0xBADD, 0x91BE, 0xBADE, 0x91BF, 0xBADF, 0x91C0, 0xBAE0, - 0x91C1, 0xBAE1, 0x91C2, 0xBAE2, 0x91C3, 0xBAE3, 0x91C4, 0xBAE4, - 0x91C5, 0xBAE5, 0x91C6, 0xBAE6, 0x91C7, 0xBAE7, 0x91C8, 0xBAE8, - 0x91C9, 0xBAE9, 0x91CA, 0xBAEA, 0x91CB, 0xBAEB, 0x91CC, 0xBAEC, - 0x91CD, 0xBAED, 0x91CE, 0xBAEE, 0x91CF, 0xBAEF, 0x91D0, 0xBAF0, - 0x91D1, 0xBAF1, 0x91D2, 0xBAF2, 0x91D3, 0xBAF3, 0x91D4, 0xBAF4, - 0x91D5, 0xBAF5, 0x91D6, 0xBAF6, 0x91D7, 0xBAF7, 0x91D8, 0xBAF8, - 0x91D9, 0xBAF9, 0x91DA, 0xBAFA, 0x91DB, 0xBAFB, 0x91DC, 0xBAFD, - 0x91DD, 0xBAFE, 0x91DE, 0xBAFF, 0x91DF, 0xBB01, 0x91E0, 0xBB02, - 0x91E1, 0xBB03, 0x91E2, 0xBB05, 0x91E3, 0xBB06, 0x91E4, 0xBB07, - 0x91E5, 0xBB08, 0x91E6, 0xBB09, 0x91E7, 0xBB0A, 0x91E8, 0xBB0B, - 0x91E9, 0xBB0C, 0x91EA, 0xBB0E, 0x91EB, 0xBB10, 0x91EC, 0xBB12, - 0x91ED, 0xBB13, 0x91EE, 0xBB14, 0x91EF, 0xBB15, 0x91F0, 0xBB16, - 0x91F1, 0xBB17, 0x91F2, 0xBB19, 0x91F3, 0xBB1A, 0x91F4, 0xBB1B, - 0x91F5, 0xBB1D, 0x91F6, 0xBB1E, 0x91F7, 0xBB1F, 0x91F8, 0xBB21, - 0x91F9, 0xBB22, 0x91FA, 0xBB23, 0x91FB, 0xBB24, 0x91FC, 0xBB25, - 0x91FD, 0xBB26, 0x91FE, 0xBB27, 0x9241, 0xBB28, 0x9242, 0xBB2A, - 0x9243, 0xBB2C, 0x9244, 0xBB2D, 0x9245, 0xBB2E, 0x9246, 0xBB2F, - 0x9247, 0xBB30, 0x9248, 0xBB31, 0x9249, 0xBB32, 0x924A, 0xBB33, - 0x924B, 0xBB37, 0x924C, 0xBB39, 0x924D, 0xBB3A, 0x924E, 0xBB3F, - 0x924F, 0xBB40, 0x9250, 0xBB41, 0x9251, 0xBB42, 0x9252, 0xBB43, - 0x9253, 0xBB46, 0x9254, 0xBB48, 0x9255, 0xBB4A, 0x9256, 0xBB4B, - 0x9257, 0xBB4C, 0x9258, 0xBB4E, 0x9259, 0xBB51, 0x925A, 0xBB52, - 0x9261, 0xBB53, 0x9262, 0xBB55, 0x9263, 0xBB56, 0x9264, 0xBB57, - 0x9265, 0xBB59, 0x9266, 0xBB5A, 0x9267, 0xBB5B, 0x9268, 0xBB5C, - 0x9269, 0xBB5D, 0x926A, 0xBB5E, 0x926B, 0xBB5F, 0x926C, 0xBB60, - 0x926D, 0xBB62, 0x926E, 0xBB64, 0x926F, 0xBB65, 0x9270, 0xBB66, - 0x9271, 0xBB67, 0x9272, 0xBB68, 0x9273, 0xBB69, 0x9274, 0xBB6A, - 0x9275, 0xBB6B, 0x9276, 0xBB6D, 0x9277, 0xBB6E, 0x9278, 0xBB6F, - 0x9279, 0xBB70, 0x927A, 0xBB71, 0x9281, 0xBB72, 0x9282, 0xBB73, - 0x9283, 0xBB74, 0x9284, 0xBB75, 0x9285, 0xBB76, 0x9286, 0xBB77, - 0x9287, 0xBB78, 0x9288, 0xBB79, 0x9289, 0xBB7A, 0x928A, 0xBB7B, - 0x928B, 0xBB7C, 0x928C, 0xBB7D, 0x928D, 0xBB7E, 0x928E, 0xBB7F, - 0x928F, 0xBB80, 0x9290, 0xBB81, 0x9291, 0xBB82, 0x9292, 0xBB83, - 0x9293, 0xBB84, 0x9294, 0xBB85, 0x9295, 0xBB86, 0x9296, 0xBB87, - 0x9297, 0xBB89, 0x9298, 0xBB8A, 0x9299, 0xBB8B, 0x929A, 0xBB8D, - 0x929B, 0xBB8E, 0x929C, 0xBB8F, 0x929D, 0xBB91, 0x929E, 0xBB92, - 0x929F, 0xBB93, 0x92A0, 0xBB94, 0x92A1, 0xBB95, 0x92A2, 0xBB96, - 0x92A3, 0xBB97, 0x92A4, 0xBB98, 0x92A5, 0xBB99, 0x92A6, 0xBB9A, - 0x92A7, 0xBB9B, 0x92A8, 0xBB9C, 0x92A9, 0xBB9D, 0x92AA, 0xBB9E, - 0x92AB, 0xBB9F, 0x92AC, 0xBBA0, 0x92AD, 0xBBA1, 0x92AE, 0xBBA2, - 0x92AF, 0xBBA3, 0x92B0, 0xBBA5, 0x92B1, 0xBBA6, 0x92B2, 0xBBA7, - 0x92B3, 0xBBA9, 0x92B4, 0xBBAA, 0x92B5, 0xBBAB, 0x92B6, 0xBBAD, - 0x92B7, 0xBBAE, 0x92B8, 0xBBAF, 0x92B9, 0xBBB0, 0x92BA, 0xBBB1, - 0x92BB, 0xBBB2, 0x92BC, 0xBBB3, 0x92BD, 0xBBB5, 0x92BE, 0xBBB6, - 0x92BF, 0xBBB8, 0x92C0, 0xBBB9, 0x92C1, 0xBBBA, 0x92C2, 0xBBBB, - 0x92C3, 0xBBBC, 0x92C4, 0xBBBD, 0x92C5, 0xBBBE, 0x92C6, 0xBBBF, - 0x92C7, 0xBBC1, 0x92C8, 0xBBC2, 0x92C9, 0xBBC3, 0x92CA, 0xBBC5, - 0x92CB, 0xBBC6, 0x92CC, 0xBBC7, 0x92CD, 0xBBC9, 0x92CE, 0xBBCA, - 0x92CF, 0xBBCB, 0x92D0, 0xBBCC, 0x92D1, 0xBBCD, 0x92D2, 0xBBCE, - 0x92D3, 0xBBCF, 0x92D4, 0xBBD1, 0x92D5, 0xBBD2, 0x92D6, 0xBBD4, - 0x92D7, 0xBBD5, 0x92D8, 0xBBD6, 0x92D9, 0xBBD7, 0x92DA, 0xBBD8, - 0x92DB, 0xBBD9, 0x92DC, 0xBBDA, 0x92DD, 0xBBDB, 0x92DE, 0xBBDC, - 0x92DF, 0xBBDD, 0x92E0, 0xBBDE, 0x92E1, 0xBBDF, 0x92E2, 0xBBE0, - 0x92E3, 0xBBE1, 0x92E4, 0xBBE2, 0x92E5, 0xBBE3, 0x92E6, 0xBBE4, - 0x92E7, 0xBBE5, 0x92E8, 0xBBE6, 0x92E9, 0xBBE7, 0x92EA, 0xBBE8, - 0x92EB, 0xBBE9, 0x92EC, 0xBBEA, 0x92ED, 0xBBEB, 0x92EE, 0xBBEC, - 0x92EF, 0xBBED, 0x92F0, 0xBBEE, 0x92F1, 0xBBEF, 0x92F2, 0xBBF0, - 0x92F3, 0xBBF1, 0x92F4, 0xBBF2, 0x92F5, 0xBBF3, 0x92F6, 0xBBF4, - 0x92F7, 0xBBF5, 0x92F8, 0xBBF6, 0x92F9, 0xBBF7, 0x92FA, 0xBBFA, - 0x92FB, 0xBBFB, 0x92FC, 0xBBFD, 0x92FD, 0xBBFE, 0x92FE, 0xBC01, - 0x9341, 0xBC03, 0x9342, 0xBC04, 0x9343, 0xBC05, 0x9344, 0xBC06, - 0x9345, 0xBC07, 0x9346, 0xBC0A, 0x9347, 0xBC0E, 0x9348, 0xBC10, - 0x9349, 0xBC12, 0x934A, 0xBC13, 0x934B, 0xBC19, 0x934C, 0xBC1A, - 0x934D, 0xBC20, 0x934E, 0xBC21, 0x934F, 0xBC22, 0x9350, 0xBC23, - 0x9351, 0xBC26, 0x9352, 0xBC28, 0x9353, 0xBC2A, 0x9354, 0xBC2B, - 0x9355, 0xBC2C, 0x9356, 0xBC2E, 0x9357, 0xBC2F, 0x9358, 0xBC32, - 0x9359, 0xBC33, 0x935A, 0xBC35, 0x9361, 0xBC36, 0x9362, 0xBC37, - 0x9363, 0xBC39, 0x9364, 0xBC3A, 0x9365, 0xBC3B, 0x9366, 0xBC3C, - 0x9367, 0xBC3D, 0x9368, 0xBC3E, 0x9369, 0xBC3F, 0x936A, 0xBC42, - 0x936B, 0xBC46, 0x936C, 0xBC47, 0x936D, 0xBC48, 0x936E, 0xBC4A, - 0x936F, 0xBC4B, 0x9370, 0xBC4E, 0x9371, 0xBC4F, 0x9372, 0xBC51, - 0x9373, 0xBC52, 0x9374, 0xBC53, 0x9375, 0xBC54, 0x9376, 0xBC55, - 0x9377, 0xBC56, 0x9378, 0xBC57, 0x9379, 0xBC58, 0x937A, 0xBC59, - 0x9381, 0xBC5A, 0x9382, 0xBC5B, 0x9383, 0xBC5C, 0x9384, 0xBC5E, - 0x9385, 0xBC5F, 0x9386, 0xBC60, 0x9387, 0xBC61, 0x9388, 0xBC62, - 0x9389, 0xBC63, 0x938A, 0xBC64, 0x938B, 0xBC65, 0x938C, 0xBC66, - 0x938D, 0xBC67, 0x938E, 0xBC68, 0x938F, 0xBC69, 0x9390, 0xBC6A, - 0x9391, 0xBC6B, 0x9392, 0xBC6C, 0x9393, 0xBC6D, 0x9394, 0xBC6E, - 0x9395, 0xBC6F, 0x9396, 0xBC70, 0x9397, 0xBC71, 0x9398, 0xBC72, - 0x9399, 0xBC73, 0x939A, 0xBC74, 0x939B, 0xBC75, 0x939C, 0xBC76, - 0x939D, 0xBC77, 0x939E, 0xBC78, 0x939F, 0xBC79, 0x93A0, 0xBC7A, - 0x93A1, 0xBC7B, 0x93A2, 0xBC7C, 0x93A3, 0xBC7D, 0x93A4, 0xBC7E, - 0x93A5, 0xBC7F, 0x93A6, 0xBC80, 0x93A7, 0xBC81, 0x93A8, 0xBC82, - 0x93A9, 0xBC83, 0x93AA, 0xBC86, 0x93AB, 0xBC87, 0x93AC, 0xBC89, - 0x93AD, 0xBC8A, 0x93AE, 0xBC8D, 0x93AF, 0xBC8F, 0x93B0, 0xBC90, - 0x93B1, 0xBC91, 0x93B2, 0xBC92, 0x93B3, 0xBC93, 0x93B4, 0xBC96, - 0x93B5, 0xBC98, 0x93B6, 0xBC9B, 0x93B7, 0xBC9C, 0x93B8, 0xBC9D, - 0x93B9, 0xBC9E, 0x93BA, 0xBC9F, 0x93BB, 0xBCA2, 0x93BC, 0xBCA3, - 0x93BD, 0xBCA5, 0x93BE, 0xBCA6, 0x93BF, 0xBCA9, 0x93C0, 0xBCAA, - 0x93C1, 0xBCAB, 0x93C2, 0xBCAC, 0x93C3, 0xBCAD, 0x93C4, 0xBCAE, - 0x93C5, 0xBCAF, 0x93C6, 0xBCB2, 0x93C7, 0xBCB6, 0x93C8, 0xBCB7, - 0x93C9, 0xBCB8, 0x93CA, 0xBCB9, 0x93CB, 0xBCBA, 0x93CC, 0xBCBB, - 0x93CD, 0xBCBE, 0x93CE, 0xBCBF, 0x93CF, 0xBCC1, 0x93D0, 0xBCC2, - 0x93D1, 0xBCC3, 0x93D2, 0xBCC5, 0x93D3, 0xBCC6, 0x93D4, 0xBCC7, - 0x93D5, 0xBCC8, 0x93D6, 0xBCC9, 0x93D7, 0xBCCA, 0x93D8, 0xBCCB, - 0x93D9, 0xBCCC, 0x93DA, 0xBCCE, 0x93DB, 0xBCD2, 0x93DC, 0xBCD3, - 0x93DD, 0xBCD4, 0x93DE, 0xBCD6, 0x93DF, 0xBCD7, 0x93E0, 0xBCD9, - 0x93E1, 0xBCDA, 0x93E2, 0xBCDB, 0x93E3, 0xBCDD, 0x93E4, 0xBCDE, - 0x93E5, 0xBCDF, 0x93E6, 0xBCE0, 0x93E7, 0xBCE1, 0x93E8, 0xBCE2, - 0x93E9, 0xBCE3, 0x93EA, 0xBCE4, 0x93EB, 0xBCE5, 0x93EC, 0xBCE6, - 0x93ED, 0xBCE7, 0x93EE, 0xBCE8, 0x93EF, 0xBCE9, 0x93F0, 0xBCEA, - 0x93F1, 0xBCEB, 0x93F2, 0xBCEC, 0x93F3, 0xBCED, 0x93F4, 0xBCEE, - 0x93F5, 0xBCEF, 0x93F6, 0xBCF0, 0x93F7, 0xBCF1, 0x93F8, 0xBCF2, - 0x93F9, 0xBCF3, 0x93FA, 0xBCF7, 0x93FB, 0xBCF9, 0x93FC, 0xBCFA, - 0x93FD, 0xBCFB, 0x93FE, 0xBCFD, 0x9441, 0xBCFE, 0x9442, 0xBCFF, - 0x9443, 0xBD00, 0x9444, 0xBD01, 0x9445, 0xBD02, 0x9446, 0xBD03, - 0x9447, 0xBD06, 0x9448, 0xBD08, 0x9449, 0xBD0A, 0x944A, 0xBD0B, - 0x944B, 0xBD0C, 0x944C, 0xBD0D, 0x944D, 0xBD0E, 0x944E, 0xBD0F, - 0x944F, 0xBD11, 0x9450, 0xBD12, 0x9451, 0xBD13, 0x9452, 0xBD15, - 0x9453, 0xBD16, 0x9454, 0xBD17, 0x9455, 0xBD18, 0x9456, 0xBD19, - 0x9457, 0xBD1A, 0x9458, 0xBD1B, 0x9459, 0xBD1C, 0x945A, 0xBD1D, - 0x9461, 0xBD1E, 0x9462, 0xBD1F, 0x9463, 0xBD20, 0x9464, 0xBD21, - 0x9465, 0xBD22, 0x9466, 0xBD23, 0x9467, 0xBD25, 0x9468, 0xBD26, - 0x9469, 0xBD27, 0x946A, 0xBD28, 0x946B, 0xBD29, 0x946C, 0xBD2A, - 0x946D, 0xBD2B, 0x946E, 0xBD2D, 0x946F, 0xBD2E, 0x9470, 0xBD2F, - 0x9471, 0xBD30, 0x9472, 0xBD31, 0x9473, 0xBD32, 0x9474, 0xBD33, - 0x9475, 0xBD34, 0x9476, 0xBD35, 0x9477, 0xBD36, 0x9478, 0xBD37, - 0x9479, 0xBD38, 0x947A, 0xBD39, 0x9481, 0xBD3A, 0x9482, 0xBD3B, - 0x9483, 0xBD3C, 0x9484, 0xBD3D, 0x9485, 0xBD3E, 0x9486, 0xBD3F, - 0x9487, 0xBD41, 0x9488, 0xBD42, 0x9489, 0xBD43, 0x948A, 0xBD44, - 0x948B, 0xBD45, 0x948C, 0xBD46, 0x948D, 0xBD47, 0x948E, 0xBD4A, - 0x948F, 0xBD4B, 0x9490, 0xBD4D, 0x9491, 0xBD4E, 0x9492, 0xBD4F, - 0x9493, 0xBD51, 0x9494, 0xBD52, 0x9495, 0xBD53, 0x9496, 0xBD54, - 0x9497, 0xBD55, 0x9498, 0xBD56, 0x9499, 0xBD57, 0x949A, 0xBD5A, - 0x949B, 0xBD5B, 0x949C, 0xBD5C, 0x949D, 0xBD5D, 0x949E, 0xBD5E, - 0x949F, 0xBD5F, 0x94A0, 0xBD60, 0x94A1, 0xBD61, 0x94A2, 0xBD62, - 0x94A3, 0xBD63, 0x94A4, 0xBD65, 0x94A5, 0xBD66, 0x94A6, 0xBD67, - 0x94A7, 0xBD69, 0x94A8, 0xBD6A, 0x94A9, 0xBD6B, 0x94AA, 0xBD6C, - 0x94AB, 0xBD6D, 0x94AC, 0xBD6E, 0x94AD, 0xBD6F, 0x94AE, 0xBD70, - 0x94AF, 0xBD71, 0x94B0, 0xBD72, 0x94B1, 0xBD73, 0x94B2, 0xBD74, - 0x94B3, 0xBD75, 0x94B4, 0xBD76, 0x94B5, 0xBD77, 0x94B6, 0xBD78, - 0x94B7, 0xBD79, 0x94B8, 0xBD7A, 0x94B9, 0xBD7B, 0x94BA, 0xBD7C, - 0x94BB, 0xBD7D, 0x94BC, 0xBD7E, 0x94BD, 0xBD7F, 0x94BE, 0xBD82, - 0x94BF, 0xBD83, 0x94C0, 0xBD85, 0x94C1, 0xBD86, 0x94C2, 0xBD8B, - 0x94C3, 0xBD8C, 0x94C4, 0xBD8D, 0x94C5, 0xBD8E, 0x94C6, 0xBD8F, - 0x94C7, 0xBD92, 0x94C8, 0xBD94, 0x94C9, 0xBD96, 0x94CA, 0xBD97, - 0x94CB, 0xBD98, 0x94CC, 0xBD9B, 0x94CD, 0xBD9D, 0x94CE, 0xBD9E, - 0x94CF, 0xBD9F, 0x94D0, 0xBDA0, 0x94D1, 0xBDA1, 0x94D2, 0xBDA2, - 0x94D3, 0xBDA3, 0x94D4, 0xBDA5, 0x94D5, 0xBDA6, 0x94D6, 0xBDA7, - 0x94D7, 0xBDA8, 0x94D8, 0xBDA9, 0x94D9, 0xBDAA, 0x94DA, 0xBDAB, - 0x94DB, 0xBDAC, 0x94DC, 0xBDAD, 0x94DD, 0xBDAE, 0x94DE, 0xBDAF, - 0x94DF, 0xBDB1, 0x94E0, 0xBDB2, 0x94E1, 0xBDB3, 0x94E2, 0xBDB4, - 0x94E3, 0xBDB5, 0x94E4, 0xBDB6, 0x94E5, 0xBDB7, 0x94E6, 0xBDB9, - 0x94E7, 0xBDBA, 0x94E8, 0xBDBB, 0x94E9, 0xBDBC, 0x94EA, 0xBDBD, - 0x94EB, 0xBDBE, 0x94EC, 0xBDBF, 0x94ED, 0xBDC0, 0x94EE, 0xBDC1, - 0x94EF, 0xBDC2, 0x94F0, 0xBDC3, 0x94F1, 0xBDC4, 0x94F2, 0xBDC5, - 0x94F3, 0xBDC6, 0x94F4, 0xBDC7, 0x94F5, 0xBDC8, 0x94F6, 0xBDC9, - 0x94F7, 0xBDCA, 0x94F8, 0xBDCB, 0x94F9, 0xBDCC, 0x94FA, 0xBDCD, - 0x94FB, 0xBDCE, 0x94FC, 0xBDCF, 0x94FD, 0xBDD0, 0x94FE, 0xBDD1, - 0x9541, 0xBDD2, 0x9542, 0xBDD3, 0x9543, 0xBDD6, 0x9544, 0xBDD7, - 0x9545, 0xBDD9, 0x9546, 0xBDDA, 0x9547, 0xBDDB, 0x9548, 0xBDDD, - 0x9549, 0xBDDE, 0x954A, 0xBDDF, 0x954B, 0xBDE0, 0x954C, 0xBDE1, - 0x954D, 0xBDE2, 0x954E, 0xBDE3, 0x954F, 0xBDE4, 0x9550, 0xBDE5, - 0x9551, 0xBDE6, 0x9552, 0xBDE7, 0x9553, 0xBDE8, 0x9554, 0xBDEA, - 0x9555, 0xBDEB, 0x9556, 0xBDEC, 0x9557, 0xBDED, 0x9558, 0xBDEE, - 0x9559, 0xBDEF, 0x955A, 0xBDF1, 0x9561, 0xBDF2, 0x9562, 0xBDF3, - 0x9563, 0xBDF5, 0x9564, 0xBDF6, 0x9565, 0xBDF7, 0x9566, 0xBDF9, - 0x9567, 0xBDFA, 0x9568, 0xBDFB, 0x9569, 0xBDFC, 0x956A, 0xBDFD, - 0x956B, 0xBDFE, 0x956C, 0xBDFF, 0x956D, 0xBE01, 0x956E, 0xBE02, - 0x956F, 0xBE04, 0x9570, 0xBE06, 0x9571, 0xBE07, 0x9572, 0xBE08, - 0x9573, 0xBE09, 0x9574, 0xBE0A, 0x9575, 0xBE0B, 0x9576, 0xBE0E, - 0x9577, 0xBE0F, 0x9578, 0xBE11, 0x9579, 0xBE12, 0x957A, 0xBE13, - 0x9581, 0xBE15, 0x9582, 0xBE16, 0x9583, 0xBE17, 0x9584, 0xBE18, - 0x9585, 0xBE19, 0x9586, 0xBE1A, 0x9587, 0xBE1B, 0x9588, 0xBE1E, - 0x9589, 0xBE20, 0x958A, 0xBE21, 0x958B, 0xBE22, 0x958C, 0xBE23, - 0x958D, 0xBE24, 0x958E, 0xBE25, 0x958F, 0xBE26, 0x9590, 0xBE27, - 0x9591, 0xBE28, 0x9592, 0xBE29, 0x9593, 0xBE2A, 0x9594, 0xBE2B, - 0x9595, 0xBE2C, 0x9596, 0xBE2D, 0x9597, 0xBE2E, 0x9598, 0xBE2F, - 0x9599, 0xBE30, 0x959A, 0xBE31, 0x959B, 0xBE32, 0x959C, 0xBE33, - 0x959D, 0xBE34, 0x959E, 0xBE35, 0x959F, 0xBE36, 0x95A0, 0xBE37, - 0x95A1, 0xBE38, 0x95A2, 0xBE39, 0x95A3, 0xBE3A, 0x95A4, 0xBE3B, - 0x95A5, 0xBE3C, 0x95A6, 0xBE3D, 0x95A7, 0xBE3E, 0x95A8, 0xBE3F, - 0x95A9, 0xBE40, 0x95AA, 0xBE41, 0x95AB, 0xBE42, 0x95AC, 0xBE43, - 0x95AD, 0xBE46, 0x95AE, 0xBE47, 0x95AF, 0xBE49, 0x95B0, 0xBE4A, - 0x95B1, 0xBE4B, 0x95B2, 0xBE4D, 0x95B3, 0xBE4F, 0x95B4, 0xBE50, - 0x95B5, 0xBE51, 0x95B6, 0xBE52, 0x95B7, 0xBE53, 0x95B8, 0xBE56, - 0x95B9, 0xBE58, 0x95BA, 0xBE5C, 0x95BB, 0xBE5D, 0x95BC, 0xBE5E, - 0x95BD, 0xBE5F, 0x95BE, 0xBE62, 0x95BF, 0xBE63, 0x95C0, 0xBE65, - 0x95C1, 0xBE66, 0x95C2, 0xBE67, 0x95C3, 0xBE69, 0x95C4, 0xBE6B, - 0x95C5, 0xBE6C, 0x95C6, 0xBE6D, 0x95C7, 0xBE6E, 0x95C8, 0xBE6F, - 0x95C9, 0xBE72, 0x95CA, 0xBE76, 0x95CB, 0xBE77, 0x95CC, 0xBE78, - 0x95CD, 0xBE79, 0x95CE, 0xBE7A, 0x95CF, 0xBE7E, 0x95D0, 0xBE7F, - 0x95D1, 0xBE81, 0x95D2, 0xBE82, 0x95D3, 0xBE83, 0x95D4, 0xBE85, - 0x95D5, 0xBE86, 0x95D6, 0xBE87, 0x95D7, 0xBE88, 0x95D8, 0xBE89, - 0x95D9, 0xBE8A, 0x95DA, 0xBE8B, 0x95DB, 0xBE8E, 0x95DC, 0xBE92, - 0x95DD, 0xBE93, 0x95DE, 0xBE94, 0x95DF, 0xBE95, 0x95E0, 0xBE96, - 0x95E1, 0xBE97, 0x95E2, 0xBE9A, 0x95E3, 0xBE9B, 0x95E4, 0xBE9C, - 0x95E5, 0xBE9D, 0x95E6, 0xBE9E, 0x95E7, 0xBE9F, 0x95E8, 0xBEA0, - 0x95E9, 0xBEA1, 0x95EA, 0xBEA2, 0x95EB, 0xBEA3, 0x95EC, 0xBEA4, - 0x95ED, 0xBEA5, 0x95EE, 0xBEA6, 0x95EF, 0xBEA7, 0x95F0, 0xBEA9, - 0x95F1, 0xBEAA, 0x95F2, 0xBEAB, 0x95F3, 0xBEAC, 0x95F4, 0xBEAD, - 0x95F5, 0xBEAE, 0x95F6, 0xBEAF, 0x95F7, 0xBEB0, 0x95F8, 0xBEB1, - 0x95F9, 0xBEB2, 0x95FA, 0xBEB3, 0x95FB, 0xBEB4, 0x95FC, 0xBEB5, - 0x95FD, 0xBEB6, 0x95FE, 0xBEB7, 0x9641, 0xBEB8, 0x9642, 0xBEB9, - 0x9643, 0xBEBA, 0x9644, 0xBEBB, 0x9645, 0xBEBC, 0x9646, 0xBEBD, - 0x9647, 0xBEBE, 0x9648, 0xBEBF, 0x9649, 0xBEC0, 0x964A, 0xBEC1, - 0x964B, 0xBEC2, 0x964C, 0xBEC3, 0x964D, 0xBEC4, 0x964E, 0xBEC5, - 0x964F, 0xBEC6, 0x9650, 0xBEC7, 0x9651, 0xBEC8, 0x9652, 0xBEC9, - 0x9653, 0xBECA, 0x9654, 0xBECB, 0x9655, 0xBECC, 0x9656, 0xBECD, - 0x9657, 0xBECE, 0x9658, 0xBECF, 0x9659, 0xBED2, 0x965A, 0xBED3, - 0x9661, 0xBED5, 0x9662, 0xBED6, 0x9663, 0xBED9, 0x9664, 0xBEDA, - 0x9665, 0xBEDB, 0x9666, 0xBEDC, 0x9667, 0xBEDD, 0x9668, 0xBEDE, - 0x9669, 0xBEDF, 0x966A, 0xBEE1, 0x966B, 0xBEE2, 0x966C, 0xBEE6, - 0x966D, 0xBEE7, 0x966E, 0xBEE8, 0x966F, 0xBEE9, 0x9670, 0xBEEA, - 0x9671, 0xBEEB, 0x9672, 0xBEED, 0x9673, 0xBEEE, 0x9674, 0xBEEF, - 0x9675, 0xBEF0, 0x9676, 0xBEF1, 0x9677, 0xBEF2, 0x9678, 0xBEF3, - 0x9679, 0xBEF4, 0x967A, 0xBEF5, 0x9681, 0xBEF6, 0x9682, 0xBEF7, - 0x9683, 0xBEF8, 0x9684, 0xBEF9, 0x9685, 0xBEFA, 0x9686, 0xBEFB, - 0x9687, 0xBEFC, 0x9688, 0xBEFD, 0x9689, 0xBEFE, 0x968A, 0xBEFF, - 0x968B, 0xBF00, 0x968C, 0xBF02, 0x968D, 0xBF03, 0x968E, 0xBF04, - 0x968F, 0xBF05, 0x9690, 0xBF06, 0x9691, 0xBF07, 0x9692, 0xBF0A, - 0x9693, 0xBF0B, 0x9694, 0xBF0C, 0x9695, 0xBF0D, 0x9696, 0xBF0E, - 0x9697, 0xBF0F, 0x9698, 0xBF10, 0x9699, 0xBF11, 0x969A, 0xBF12, - 0x969B, 0xBF13, 0x969C, 0xBF14, 0x969D, 0xBF15, 0x969E, 0xBF16, - 0x969F, 0xBF17, 0x96A0, 0xBF1A, 0x96A1, 0xBF1E, 0x96A2, 0xBF1F, - 0x96A3, 0xBF20, 0x96A4, 0xBF21, 0x96A5, 0xBF22, 0x96A6, 0xBF23, - 0x96A7, 0xBF24, 0x96A8, 0xBF25, 0x96A9, 0xBF26, 0x96AA, 0xBF27, - 0x96AB, 0xBF28, 0x96AC, 0xBF29, 0x96AD, 0xBF2A, 0x96AE, 0xBF2B, - 0x96AF, 0xBF2C, 0x96B0, 0xBF2D, 0x96B1, 0xBF2E, 0x96B2, 0xBF2F, - 0x96B3, 0xBF30, 0x96B4, 0xBF31, 0x96B5, 0xBF32, 0x96B6, 0xBF33, - 0x96B7, 0xBF34, 0x96B8, 0xBF35, 0x96B9, 0xBF36, 0x96BA, 0xBF37, - 0x96BB, 0xBF38, 0x96BC, 0xBF39, 0x96BD, 0xBF3A, 0x96BE, 0xBF3B, - 0x96BF, 0xBF3C, 0x96C0, 0xBF3D, 0x96C1, 0xBF3E, 0x96C2, 0xBF3F, - 0x96C3, 0xBF42, 0x96C4, 0xBF43, 0x96C5, 0xBF45, 0x96C6, 0xBF46, - 0x96C7, 0xBF47, 0x96C8, 0xBF49, 0x96C9, 0xBF4A, 0x96CA, 0xBF4B, - 0x96CB, 0xBF4C, 0x96CC, 0xBF4D, 0x96CD, 0xBF4E, 0x96CE, 0xBF4F, - 0x96CF, 0xBF52, 0x96D0, 0xBF53, 0x96D1, 0xBF54, 0x96D2, 0xBF56, - 0x96D3, 0xBF57, 0x96D4, 0xBF58, 0x96D5, 0xBF59, 0x96D6, 0xBF5A, - 0x96D7, 0xBF5B, 0x96D8, 0xBF5C, 0x96D9, 0xBF5D, 0x96DA, 0xBF5E, - 0x96DB, 0xBF5F, 0x96DC, 0xBF60, 0x96DD, 0xBF61, 0x96DE, 0xBF62, - 0x96DF, 0xBF63, 0x96E0, 0xBF64, 0x96E1, 0xBF65, 0x96E2, 0xBF66, - 0x96E3, 0xBF67, 0x96E4, 0xBF68, 0x96E5, 0xBF69, 0x96E6, 0xBF6A, - 0x96E7, 0xBF6B, 0x96E8, 0xBF6C, 0x96E9, 0xBF6D, 0x96EA, 0xBF6E, - 0x96EB, 0xBF6F, 0x96EC, 0xBF70, 0x96ED, 0xBF71, 0x96EE, 0xBF72, - 0x96EF, 0xBF73, 0x96F0, 0xBF74, 0x96F1, 0xBF75, 0x96F2, 0xBF76, - 0x96F3, 0xBF77, 0x96F4, 0xBF78, 0x96F5, 0xBF79, 0x96F6, 0xBF7A, - 0x96F7, 0xBF7B, 0x96F8, 0xBF7C, 0x96F9, 0xBF7D, 0x96FA, 0xBF7E, - 0x96FB, 0xBF7F, 0x96FC, 0xBF80, 0x96FD, 0xBF81, 0x96FE, 0xBF82, - 0x9741, 0xBF83, 0x9742, 0xBF84, 0x9743, 0xBF85, 0x9744, 0xBF86, - 0x9745, 0xBF87, 0x9746, 0xBF88, 0x9747, 0xBF89, 0x9748, 0xBF8A, - 0x9749, 0xBF8B, 0x974A, 0xBF8C, 0x974B, 0xBF8D, 0x974C, 0xBF8E, - 0x974D, 0xBF8F, 0x974E, 0xBF90, 0x974F, 0xBF91, 0x9750, 0xBF92, - 0x9751, 0xBF93, 0x9752, 0xBF95, 0x9753, 0xBF96, 0x9754, 0xBF97, - 0x9755, 0xBF98, 0x9756, 0xBF99, 0x9757, 0xBF9A, 0x9758, 0xBF9B, - 0x9759, 0xBF9C, 0x975A, 0xBF9D, 0x9761, 0xBF9E, 0x9762, 0xBF9F, - 0x9763, 0xBFA0, 0x9764, 0xBFA1, 0x9765, 0xBFA2, 0x9766, 0xBFA3, - 0x9767, 0xBFA4, 0x9768, 0xBFA5, 0x9769, 0xBFA6, 0x976A, 0xBFA7, - 0x976B, 0xBFA8, 0x976C, 0xBFA9, 0x976D, 0xBFAA, 0x976E, 0xBFAB, - 0x976F, 0xBFAC, 0x9770, 0xBFAD, 0x9771, 0xBFAE, 0x9772, 0xBFAF, - 0x9773, 0xBFB1, 0x9774, 0xBFB2, 0x9775, 0xBFB3, 0x9776, 0xBFB4, - 0x9777, 0xBFB5, 0x9778, 0xBFB6, 0x9779, 0xBFB7, 0x977A, 0xBFB8, - 0x9781, 0xBFB9, 0x9782, 0xBFBA, 0x9783, 0xBFBB, 0x9784, 0xBFBC, - 0x9785, 0xBFBD, 0x9786, 0xBFBE, 0x9787, 0xBFBF, 0x9788, 0xBFC0, - 0x9789, 0xBFC1, 0x978A, 0xBFC2, 0x978B, 0xBFC3, 0x978C, 0xBFC4, - 0x978D, 0xBFC6, 0x978E, 0xBFC7, 0x978F, 0xBFC8, 0x9790, 0xBFC9, - 0x9791, 0xBFCA, 0x9792, 0xBFCB, 0x9793, 0xBFCE, 0x9794, 0xBFCF, - 0x9795, 0xBFD1, 0x9796, 0xBFD2, 0x9797, 0xBFD3, 0x9798, 0xBFD5, - 0x9799, 0xBFD6, 0x979A, 0xBFD7, 0x979B, 0xBFD8, 0x979C, 0xBFD9, - 0x979D, 0xBFDA, 0x979E, 0xBFDB, 0x979F, 0xBFDD, 0x97A0, 0xBFDE, - 0x97A1, 0xBFE0, 0x97A2, 0xBFE2, 0x97A3, 0xBFE3, 0x97A4, 0xBFE4, - 0x97A5, 0xBFE5, 0x97A6, 0xBFE6, 0x97A7, 0xBFE7, 0x97A8, 0xBFE8, - 0x97A9, 0xBFE9, 0x97AA, 0xBFEA, 0x97AB, 0xBFEB, 0x97AC, 0xBFEC, - 0x97AD, 0xBFED, 0x97AE, 0xBFEE, 0x97AF, 0xBFEF, 0x97B0, 0xBFF0, - 0x97B1, 0xBFF1, 0x97B2, 0xBFF2, 0x97B3, 0xBFF3, 0x97B4, 0xBFF4, - 0x97B5, 0xBFF5, 0x97B6, 0xBFF6, 0x97B7, 0xBFF7, 0x97B8, 0xBFF8, - 0x97B9, 0xBFF9, 0x97BA, 0xBFFA, 0x97BB, 0xBFFB, 0x97BC, 0xBFFC, - 0x97BD, 0xBFFD, 0x97BE, 0xBFFE, 0x97BF, 0xBFFF, 0x97C0, 0xC000, - 0x97C1, 0xC001, 0x97C2, 0xC002, 0x97C3, 0xC003, 0x97C4, 0xC004, - 0x97C5, 0xC005, 0x97C6, 0xC006, 0x97C7, 0xC007, 0x97C8, 0xC008, - 0x97C9, 0xC009, 0x97CA, 0xC00A, 0x97CB, 0xC00B, 0x97CC, 0xC00C, - 0x97CD, 0xC00D, 0x97CE, 0xC00E, 0x97CF, 0xC00F, 0x97D0, 0xC010, - 0x97D1, 0xC011, 0x97D2, 0xC012, 0x97D3, 0xC013, 0x97D4, 0xC014, - 0x97D5, 0xC015, 0x97D6, 0xC016, 0x97D7, 0xC017, 0x97D8, 0xC018, - 0x97D9, 0xC019, 0x97DA, 0xC01A, 0x97DB, 0xC01B, 0x97DC, 0xC01C, - 0x97DD, 0xC01D, 0x97DE, 0xC01E, 0x97DF, 0xC01F, 0x97E0, 0xC020, - 0x97E1, 0xC021, 0x97E2, 0xC022, 0x97E3, 0xC023, 0x97E4, 0xC024, - 0x97E5, 0xC025, 0x97E6, 0xC026, 0x97E7, 0xC027, 0x97E8, 0xC028, - 0x97E9, 0xC029, 0x97EA, 0xC02A, 0x97EB, 0xC02B, 0x97EC, 0xC02C, - 0x97ED, 0xC02D, 0x97EE, 0xC02E, 0x97EF, 0xC02F, 0x97F0, 0xC030, - 0x97F1, 0xC031, 0x97F2, 0xC032, 0x97F3, 0xC033, 0x97F4, 0xC034, - 0x97F5, 0xC035, 0x97F6, 0xC036, 0x97F7, 0xC037, 0x97F8, 0xC038, - 0x97F9, 0xC039, 0x97FA, 0xC03A, 0x97FB, 0xC03B, 0x97FC, 0xC03D, - 0x97FD, 0xC03E, 0x97FE, 0xC03F, 0x9841, 0xC040, 0x9842, 0xC041, - 0x9843, 0xC042, 0x9844, 0xC043, 0x9845, 0xC044, 0x9846, 0xC045, - 0x9847, 0xC046, 0x9848, 0xC047, 0x9849, 0xC048, 0x984A, 0xC049, - 0x984B, 0xC04A, 0x984C, 0xC04B, 0x984D, 0xC04C, 0x984E, 0xC04D, - 0x984F, 0xC04E, 0x9850, 0xC04F, 0x9851, 0xC050, 0x9852, 0xC052, - 0x9853, 0xC053, 0x9854, 0xC054, 0x9855, 0xC055, 0x9856, 0xC056, - 0x9857, 0xC057, 0x9858, 0xC059, 0x9859, 0xC05A, 0x985A, 0xC05B, - 0x9861, 0xC05D, 0x9862, 0xC05E, 0x9863, 0xC05F, 0x9864, 0xC061, - 0x9865, 0xC062, 0x9866, 0xC063, 0x9867, 0xC064, 0x9868, 0xC065, - 0x9869, 0xC066, 0x986A, 0xC067, 0x986B, 0xC06A, 0x986C, 0xC06B, - 0x986D, 0xC06C, 0x986E, 0xC06D, 0x986F, 0xC06E, 0x9870, 0xC06F, - 0x9871, 0xC070, 0x9872, 0xC071, 0x9873, 0xC072, 0x9874, 0xC073, - 0x9875, 0xC074, 0x9876, 0xC075, 0x9877, 0xC076, 0x9878, 0xC077, - 0x9879, 0xC078, 0x987A, 0xC079, 0x9881, 0xC07A, 0x9882, 0xC07B, - 0x9883, 0xC07C, 0x9884, 0xC07D, 0x9885, 0xC07E, 0x9886, 0xC07F, - 0x9887, 0xC080, 0x9888, 0xC081, 0x9889, 0xC082, 0x988A, 0xC083, - 0x988B, 0xC084, 0x988C, 0xC085, 0x988D, 0xC086, 0x988E, 0xC087, - 0x988F, 0xC088, 0x9890, 0xC089, 0x9891, 0xC08A, 0x9892, 0xC08B, - 0x9893, 0xC08C, 0x9894, 0xC08D, 0x9895, 0xC08E, 0x9896, 0xC08F, - 0x9897, 0xC092, 0x9898, 0xC093, 0x9899, 0xC095, 0x989A, 0xC096, - 0x989B, 0xC097, 0x989C, 0xC099, 0x989D, 0xC09A, 0x989E, 0xC09B, - 0x989F, 0xC09C, 0x98A0, 0xC09D, 0x98A1, 0xC09E, 0x98A2, 0xC09F, - 0x98A3, 0xC0A2, 0x98A4, 0xC0A4, 0x98A5, 0xC0A6, 0x98A6, 0xC0A7, - 0x98A7, 0xC0A8, 0x98A8, 0xC0A9, 0x98A9, 0xC0AA, 0x98AA, 0xC0AB, - 0x98AB, 0xC0AE, 0x98AC, 0xC0B1, 0x98AD, 0xC0B2, 0x98AE, 0xC0B7, - 0x98AF, 0xC0B8, 0x98B0, 0xC0B9, 0x98B1, 0xC0BA, 0x98B2, 0xC0BB, - 0x98B3, 0xC0BE, 0x98B4, 0xC0C2, 0x98B5, 0xC0C3, 0x98B6, 0xC0C4, - 0x98B7, 0xC0C6, 0x98B8, 0xC0C7, 0x98B9, 0xC0CA, 0x98BA, 0xC0CB, - 0x98BB, 0xC0CD, 0x98BC, 0xC0CE, 0x98BD, 0xC0CF, 0x98BE, 0xC0D1, - 0x98BF, 0xC0D2, 0x98C0, 0xC0D3, 0x98C1, 0xC0D4, 0x98C2, 0xC0D5, - 0x98C3, 0xC0D6, 0x98C4, 0xC0D7, 0x98C5, 0xC0DA, 0x98C6, 0xC0DE, - 0x98C7, 0xC0DF, 0x98C8, 0xC0E0, 0x98C9, 0xC0E1, 0x98CA, 0xC0E2, - 0x98CB, 0xC0E3, 0x98CC, 0xC0E6, 0x98CD, 0xC0E7, 0x98CE, 0xC0E9, - 0x98CF, 0xC0EA, 0x98D0, 0xC0EB, 0x98D1, 0xC0ED, 0x98D2, 0xC0EE, - 0x98D3, 0xC0EF, 0x98D4, 0xC0F0, 0x98D5, 0xC0F1, 0x98D6, 0xC0F2, - 0x98D7, 0xC0F3, 0x98D8, 0xC0F6, 0x98D9, 0xC0F8, 0x98DA, 0xC0FA, - 0x98DB, 0xC0FB, 0x98DC, 0xC0FC, 0x98DD, 0xC0FD, 0x98DE, 0xC0FE, - 0x98DF, 0xC0FF, 0x98E0, 0xC101, 0x98E1, 0xC102, 0x98E2, 0xC103, - 0x98E3, 0xC105, 0x98E4, 0xC106, 0x98E5, 0xC107, 0x98E6, 0xC109, - 0x98E7, 0xC10A, 0x98E8, 0xC10B, 0x98E9, 0xC10C, 0x98EA, 0xC10D, - 0x98EB, 0xC10E, 0x98EC, 0xC10F, 0x98ED, 0xC111, 0x98EE, 0xC112, - 0x98EF, 0xC113, 0x98F0, 0xC114, 0x98F1, 0xC116, 0x98F2, 0xC117, - 0x98F3, 0xC118, 0x98F4, 0xC119, 0x98F5, 0xC11A, 0x98F6, 0xC11B, - 0x98F7, 0xC121, 0x98F8, 0xC122, 0x98F9, 0xC125, 0x98FA, 0xC128, - 0x98FB, 0xC129, 0x98FC, 0xC12A, 0x98FD, 0xC12B, 0x98FE, 0xC12E, - 0x9941, 0xC132, 0x9942, 0xC133, 0x9943, 0xC134, 0x9944, 0xC135, - 0x9945, 0xC137, 0x9946, 0xC13A, 0x9947, 0xC13B, 0x9948, 0xC13D, - 0x9949, 0xC13E, 0x994A, 0xC13F, 0x994B, 0xC141, 0x994C, 0xC142, - 0x994D, 0xC143, 0x994E, 0xC144, 0x994F, 0xC145, 0x9950, 0xC146, - 0x9951, 0xC147, 0x9952, 0xC14A, 0x9953, 0xC14E, 0x9954, 0xC14F, - 0x9955, 0xC150, 0x9956, 0xC151, 0x9957, 0xC152, 0x9958, 0xC153, - 0x9959, 0xC156, 0x995A, 0xC157, 0x9961, 0xC159, 0x9962, 0xC15A, - 0x9963, 0xC15B, 0x9964, 0xC15D, 0x9965, 0xC15E, 0x9966, 0xC15F, - 0x9967, 0xC160, 0x9968, 0xC161, 0x9969, 0xC162, 0x996A, 0xC163, - 0x996B, 0xC166, 0x996C, 0xC16A, 0x996D, 0xC16B, 0x996E, 0xC16C, - 0x996F, 0xC16D, 0x9970, 0xC16E, 0x9971, 0xC16F, 0x9972, 0xC171, - 0x9973, 0xC172, 0x9974, 0xC173, 0x9975, 0xC175, 0x9976, 0xC176, - 0x9977, 0xC177, 0x9978, 0xC179, 0x9979, 0xC17A, 0x997A, 0xC17B, - 0x9981, 0xC17C, 0x9982, 0xC17D, 0x9983, 0xC17E, 0x9984, 0xC17F, - 0x9985, 0xC180, 0x9986, 0xC181, 0x9987, 0xC182, 0x9988, 0xC183, - 0x9989, 0xC184, 0x998A, 0xC186, 0x998B, 0xC187, 0x998C, 0xC188, - 0x998D, 0xC189, 0x998E, 0xC18A, 0x998F, 0xC18B, 0x9990, 0xC18F, - 0x9991, 0xC191, 0x9992, 0xC192, 0x9993, 0xC193, 0x9994, 0xC195, - 0x9995, 0xC197, 0x9996, 0xC198, 0x9997, 0xC199, 0x9998, 0xC19A, - 0x9999, 0xC19B, 0x999A, 0xC19E, 0x999B, 0xC1A0, 0x999C, 0xC1A2, - 0x999D, 0xC1A3, 0x999E, 0xC1A4, 0x999F, 0xC1A6, 0x99A0, 0xC1A7, - 0x99A1, 0xC1AA, 0x99A2, 0xC1AB, 0x99A3, 0xC1AD, 0x99A4, 0xC1AE, - 0x99A5, 0xC1AF, 0x99A6, 0xC1B1, 0x99A7, 0xC1B2, 0x99A8, 0xC1B3, - 0x99A9, 0xC1B4, 0x99AA, 0xC1B5, 0x99AB, 0xC1B6, 0x99AC, 0xC1B7, - 0x99AD, 0xC1B8, 0x99AE, 0xC1B9, 0x99AF, 0xC1BA, 0x99B0, 0xC1BB, - 0x99B1, 0xC1BC, 0x99B2, 0xC1BE, 0x99B3, 0xC1BF, 0x99B4, 0xC1C0, - 0x99B5, 0xC1C1, 0x99B6, 0xC1C2, 0x99B7, 0xC1C3, 0x99B8, 0xC1C5, - 0x99B9, 0xC1C6, 0x99BA, 0xC1C7, 0x99BB, 0xC1C9, 0x99BC, 0xC1CA, - 0x99BD, 0xC1CB, 0x99BE, 0xC1CD, 0x99BF, 0xC1CE, 0x99C0, 0xC1CF, - 0x99C1, 0xC1D0, 0x99C2, 0xC1D1, 0x99C3, 0xC1D2, 0x99C4, 0xC1D3, - 0x99C5, 0xC1D5, 0x99C6, 0xC1D6, 0x99C7, 0xC1D9, 0x99C8, 0xC1DA, - 0x99C9, 0xC1DB, 0x99CA, 0xC1DC, 0x99CB, 0xC1DD, 0x99CC, 0xC1DE, - 0x99CD, 0xC1DF, 0x99CE, 0xC1E1, 0x99CF, 0xC1E2, 0x99D0, 0xC1E3, - 0x99D1, 0xC1E5, 0x99D2, 0xC1E6, 0x99D3, 0xC1E7, 0x99D4, 0xC1E9, - 0x99D5, 0xC1EA, 0x99D6, 0xC1EB, 0x99D7, 0xC1EC, 0x99D8, 0xC1ED, - 0x99D9, 0xC1EE, 0x99DA, 0xC1EF, 0x99DB, 0xC1F2, 0x99DC, 0xC1F4, - 0x99DD, 0xC1F5, 0x99DE, 0xC1F6, 0x99DF, 0xC1F7, 0x99E0, 0xC1F8, - 0x99E1, 0xC1F9, 0x99E2, 0xC1FA, 0x99E3, 0xC1FB, 0x99E4, 0xC1FE, - 0x99E5, 0xC1FF, 0x99E6, 0xC201, 0x99E7, 0xC202, 0x99E8, 0xC203, - 0x99E9, 0xC205, 0x99EA, 0xC206, 0x99EB, 0xC207, 0x99EC, 0xC208, - 0x99ED, 0xC209, 0x99EE, 0xC20A, 0x99EF, 0xC20B, 0x99F0, 0xC20E, - 0x99F1, 0xC210, 0x99F2, 0xC212, 0x99F3, 0xC213, 0x99F4, 0xC214, - 0x99F5, 0xC215, 0x99F6, 0xC216, 0x99F7, 0xC217, 0x99F8, 0xC21A, - 0x99F9, 0xC21B, 0x99FA, 0xC21D, 0x99FB, 0xC21E, 0x99FC, 0xC221, - 0x99FD, 0xC222, 0x99FE, 0xC223, 0x9A41, 0xC224, 0x9A42, 0xC225, - 0x9A43, 0xC226, 0x9A44, 0xC227, 0x9A45, 0xC22A, 0x9A46, 0xC22C, - 0x9A47, 0xC22E, 0x9A48, 0xC230, 0x9A49, 0xC233, 0x9A4A, 0xC235, - 0x9A4B, 0xC236, 0x9A4C, 0xC237, 0x9A4D, 0xC238, 0x9A4E, 0xC239, - 0x9A4F, 0xC23A, 0x9A50, 0xC23B, 0x9A51, 0xC23C, 0x9A52, 0xC23D, - 0x9A53, 0xC23E, 0x9A54, 0xC23F, 0x9A55, 0xC240, 0x9A56, 0xC241, - 0x9A57, 0xC242, 0x9A58, 0xC243, 0x9A59, 0xC244, 0x9A5A, 0xC245, - 0x9A61, 0xC246, 0x9A62, 0xC247, 0x9A63, 0xC249, 0x9A64, 0xC24A, - 0x9A65, 0xC24B, 0x9A66, 0xC24C, 0x9A67, 0xC24D, 0x9A68, 0xC24E, - 0x9A69, 0xC24F, 0x9A6A, 0xC252, 0x9A6B, 0xC253, 0x9A6C, 0xC255, - 0x9A6D, 0xC256, 0x9A6E, 0xC257, 0x9A6F, 0xC259, 0x9A70, 0xC25A, - 0x9A71, 0xC25B, 0x9A72, 0xC25C, 0x9A73, 0xC25D, 0x9A74, 0xC25E, - 0x9A75, 0xC25F, 0x9A76, 0xC261, 0x9A77, 0xC262, 0x9A78, 0xC263, - 0x9A79, 0xC264, 0x9A7A, 0xC266, 0x9A81, 0xC267, 0x9A82, 0xC268, - 0x9A83, 0xC269, 0x9A84, 0xC26A, 0x9A85, 0xC26B, 0x9A86, 0xC26E, - 0x9A87, 0xC26F, 0x9A88, 0xC271, 0x9A89, 0xC272, 0x9A8A, 0xC273, - 0x9A8B, 0xC275, 0x9A8C, 0xC276, 0x9A8D, 0xC277, 0x9A8E, 0xC278, - 0x9A8F, 0xC279, 0x9A90, 0xC27A, 0x9A91, 0xC27B, 0x9A92, 0xC27E, - 0x9A93, 0xC280, 0x9A94, 0xC282, 0x9A95, 0xC283, 0x9A96, 0xC284, - 0x9A97, 0xC285, 0x9A98, 0xC286, 0x9A99, 0xC287, 0x9A9A, 0xC28A, - 0x9A9B, 0xC28B, 0x9A9C, 0xC28C, 0x9A9D, 0xC28D, 0x9A9E, 0xC28E, - 0x9A9F, 0xC28F, 0x9AA0, 0xC291, 0x9AA1, 0xC292, 0x9AA2, 0xC293, - 0x9AA3, 0xC294, 0x9AA4, 0xC295, 0x9AA5, 0xC296, 0x9AA6, 0xC297, - 0x9AA7, 0xC299, 0x9AA8, 0xC29A, 0x9AA9, 0xC29C, 0x9AAA, 0xC29E, - 0x9AAB, 0xC29F, 0x9AAC, 0xC2A0, 0x9AAD, 0xC2A1, 0x9AAE, 0xC2A2, - 0x9AAF, 0xC2A3, 0x9AB0, 0xC2A6, 0x9AB1, 0xC2A7, 0x9AB2, 0xC2A9, - 0x9AB3, 0xC2AA, 0x9AB4, 0xC2AB, 0x9AB5, 0xC2AE, 0x9AB6, 0xC2AF, - 0x9AB7, 0xC2B0, 0x9AB8, 0xC2B1, 0x9AB9, 0xC2B2, 0x9ABA, 0xC2B3, - 0x9ABB, 0xC2B6, 0x9ABC, 0xC2B8, 0x9ABD, 0xC2BA, 0x9ABE, 0xC2BB, - 0x9ABF, 0xC2BC, 0x9AC0, 0xC2BD, 0x9AC1, 0xC2BE, 0x9AC2, 0xC2BF, - 0x9AC3, 0xC2C0, 0x9AC4, 0xC2C1, 0x9AC5, 0xC2C2, 0x9AC6, 0xC2C3, - 0x9AC7, 0xC2C4, 0x9AC8, 0xC2C5, 0x9AC9, 0xC2C6, 0x9ACA, 0xC2C7, - 0x9ACB, 0xC2C8, 0x9ACC, 0xC2C9, 0x9ACD, 0xC2CA, 0x9ACE, 0xC2CB, - 0x9ACF, 0xC2CC, 0x9AD0, 0xC2CD, 0x9AD1, 0xC2CE, 0x9AD2, 0xC2CF, - 0x9AD3, 0xC2D0, 0x9AD4, 0xC2D1, 0x9AD5, 0xC2D2, 0x9AD6, 0xC2D3, - 0x9AD7, 0xC2D4, 0x9AD8, 0xC2D5, 0x9AD9, 0xC2D6, 0x9ADA, 0xC2D7, - 0x9ADB, 0xC2D8, 0x9ADC, 0xC2D9, 0x9ADD, 0xC2DA, 0x9ADE, 0xC2DB, - 0x9ADF, 0xC2DE, 0x9AE0, 0xC2DF, 0x9AE1, 0xC2E1, 0x9AE2, 0xC2E2, - 0x9AE3, 0xC2E5, 0x9AE4, 0xC2E6, 0x9AE5, 0xC2E7, 0x9AE6, 0xC2E8, - 0x9AE7, 0xC2E9, 0x9AE8, 0xC2EA, 0x9AE9, 0xC2EE, 0x9AEA, 0xC2F0, - 0x9AEB, 0xC2F2, 0x9AEC, 0xC2F3, 0x9AED, 0xC2F4, 0x9AEE, 0xC2F5, - 0x9AEF, 0xC2F7, 0x9AF0, 0xC2FA, 0x9AF1, 0xC2FD, 0x9AF2, 0xC2FE, - 0x9AF3, 0xC2FF, 0x9AF4, 0xC301, 0x9AF5, 0xC302, 0x9AF6, 0xC303, - 0x9AF7, 0xC304, 0x9AF8, 0xC305, 0x9AF9, 0xC306, 0x9AFA, 0xC307, - 0x9AFB, 0xC30A, 0x9AFC, 0xC30B, 0x9AFD, 0xC30E, 0x9AFE, 0xC30F, - 0x9B41, 0xC310, 0x9B42, 0xC311, 0x9B43, 0xC312, 0x9B44, 0xC316, - 0x9B45, 0xC317, 0x9B46, 0xC319, 0x9B47, 0xC31A, 0x9B48, 0xC31B, - 0x9B49, 0xC31D, 0x9B4A, 0xC31E, 0x9B4B, 0xC31F, 0x9B4C, 0xC320, - 0x9B4D, 0xC321, 0x9B4E, 0xC322, 0x9B4F, 0xC323, 0x9B50, 0xC326, - 0x9B51, 0xC327, 0x9B52, 0xC32A, 0x9B53, 0xC32B, 0x9B54, 0xC32C, - 0x9B55, 0xC32D, 0x9B56, 0xC32E, 0x9B57, 0xC32F, 0x9B58, 0xC330, - 0x9B59, 0xC331, 0x9B5A, 0xC332, 0x9B61, 0xC333, 0x9B62, 0xC334, - 0x9B63, 0xC335, 0x9B64, 0xC336, 0x9B65, 0xC337, 0x9B66, 0xC338, - 0x9B67, 0xC339, 0x9B68, 0xC33A, 0x9B69, 0xC33B, 0x9B6A, 0xC33C, - 0x9B6B, 0xC33D, 0x9B6C, 0xC33E, 0x9B6D, 0xC33F, 0x9B6E, 0xC340, - 0x9B6F, 0xC341, 0x9B70, 0xC342, 0x9B71, 0xC343, 0x9B72, 0xC344, - 0x9B73, 0xC346, 0x9B74, 0xC347, 0x9B75, 0xC348, 0x9B76, 0xC349, - 0x9B77, 0xC34A, 0x9B78, 0xC34B, 0x9B79, 0xC34C, 0x9B7A, 0xC34D, - 0x9B81, 0xC34E, 0x9B82, 0xC34F, 0x9B83, 0xC350, 0x9B84, 0xC351, - 0x9B85, 0xC352, 0x9B86, 0xC353, 0x9B87, 0xC354, 0x9B88, 0xC355, - 0x9B89, 0xC356, 0x9B8A, 0xC357, 0x9B8B, 0xC358, 0x9B8C, 0xC359, - 0x9B8D, 0xC35A, 0x9B8E, 0xC35B, 0x9B8F, 0xC35C, 0x9B90, 0xC35D, - 0x9B91, 0xC35E, 0x9B92, 0xC35F, 0x9B93, 0xC360, 0x9B94, 0xC361, - 0x9B95, 0xC362, 0x9B96, 0xC363, 0x9B97, 0xC364, 0x9B98, 0xC365, - 0x9B99, 0xC366, 0x9B9A, 0xC367, 0x9B9B, 0xC36A, 0x9B9C, 0xC36B, - 0x9B9D, 0xC36D, 0x9B9E, 0xC36E, 0x9B9F, 0xC36F, 0x9BA0, 0xC371, - 0x9BA1, 0xC373, 0x9BA2, 0xC374, 0x9BA3, 0xC375, 0x9BA4, 0xC376, - 0x9BA5, 0xC377, 0x9BA6, 0xC37A, 0x9BA7, 0xC37B, 0x9BA8, 0xC37E, - 0x9BA9, 0xC37F, 0x9BAA, 0xC380, 0x9BAB, 0xC381, 0x9BAC, 0xC382, - 0x9BAD, 0xC383, 0x9BAE, 0xC385, 0x9BAF, 0xC386, 0x9BB0, 0xC387, - 0x9BB1, 0xC389, 0x9BB2, 0xC38A, 0x9BB3, 0xC38B, 0x9BB4, 0xC38D, - 0x9BB5, 0xC38E, 0x9BB6, 0xC38F, 0x9BB7, 0xC390, 0x9BB8, 0xC391, - 0x9BB9, 0xC392, 0x9BBA, 0xC393, 0x9BBB, 0xC394, 0x9BBC, 0xC395, - 0x9BBD, 0xC396, 0x9BBE, 0xC397, 0x9BBF, 0xC398, 0x9BC0, 0xC399, - 0x9BC1, 0xC39A, 0x9BC2, 0xC39B, 0x9BC3, 0xC39C, 0x9BC4, 0xC39D, - 0x9BC5, 0xC39E, 0x9BC6, 0xC39F, 0x9BC7, 0xC3A0, 0x9BC8, 0xC3A1, - 0x9BC9, 0xC3A2, 0x9BCA, 0xC3A3, 0x9BCB, 0xC3A4, 0x9BCC, 0xC3A5, - 0x9BCD, 0xC3A6, 0x9BCE, 0xC3A7, 0x9BCF, 0xC3A8, 0x9BD0, 0xC3A9, - 0x9BD1, 0xC3AA, 0x9BD2, 0xC3AB, 0x9BD3, 0xC3AC, 0x9BD4, 0xC3AD, - 0x9BD5, 0xC3AE, 0x9BD6, 0xC3AF, 0x9BD7, 0xC3B0, 0x9BD8, 0xC3B1, - 0x9BD9, 0xC3B2, 0x9BDA, 0xC3B3, 0x9BDB, 0xC3B4, 0x9BDC, 0xC3B5, - 0x9BDD, 0xC3B6, 0x9BDE, 0xC3B7, 0x9BDF, 0xC3B8, 0x9BE0, 0xC3B9, - 0x9BE1, 0xC3BA, 0x9BE2, 0xC3BB, 0x9BE3, 0xC3BC, 0x9BE4, 0xC3BD, - 0x9BE5, 0xC3BE, 0x9BE6, 0xC3BF, 0x9BE7, 0xC3C1, 0x9BE8, 0xC3C2, - 0x9BE9, 0xC3C3, 0x9BEA, 0xC3C4, 0x9BEB, 0xC3C5, 0x9BEC, 0xC3C6, - 0x9BED, 0xC3C7, 0x9BEE, 0xC3C8, 0x9BEF, 0xC3C9, 0x9BF0, 0xC3CA, - 0x9BF1, 0xC3CB, 0x9BF2, 0xC3CC, 0x9BF3, 0xC3CD, 0x9BF4, 0xC3CE, - 0x9BF5, 0xC3CF, 0x9BF6, 0xC3D0, 0x9BF7, 0xC3D1, 0x9BF8, 0xC3D2, - 0x9BF9, 0xC3D3, 0x9BFA, 0xC3D4, 0x9BFB, 0xC3D5, 0x9BFC, 0xC3D6, - 0x9BFD, 0xC3D7, 0x9BFE, 0xC3DA, 0x9C41, 0xC3DB, 0x9C42, 0xC3DD, - 0x9C43, 0xC3DE, 0x9C44, 0xC3E1, 0x9C45, 0xC3E3, 0x9C46, 0xC3E4, - 0x9C47, 0xC3E5, 0x9C48, 0xC3E6, 0x9C49, 0xC3E7, 0x9C4A, 0xC3EA, - 0x9C4B, 0xC3EB, 0x9C4C, 0xC3EC, 0x9C4D, 0xC3EE, 0x9C4E, 0xC3EF, - 0x9C4F, 0xC3F0, 0x9C50, 0xC3F1, 0x9C51, 0xC3F2, 0x9C52, 0xC3F3, - 0x9C53, 0xC3F6, 0x9C54, 0xC3F7, 0x9C55, 0xC3F9, 0x9C56, 0xC3FA, - 0x9C57, 0xC3FB, 0x9C58, 0xC3FC, 0x9C59, 0xC3FD, 0x9C5A, 0xC3FE, - 0x9C61, 0xC3FF, 0x9C62, 0xC400, 0x9C63, 0xC401, 0x9C64, 0xC402, - 0x9C65, 0xC403, 0x9C66, 0xC404, 0x9C67, 0xC405, 0x9C68, 0xC406, - 0x9C69, 0xC407, 0x9C6A, 0xC409, 0x9C6B, 0xC40A, 0x9C6C, 0xC40B, - 0x9C6D, 0xC40C, 0x9C6E, 0xC40D, 0x9C6F, 0xC40E, 0x9C70, 0xC40F, - 0x9C71, 0xC411, 0x9C72, 0xC412, 0x9C73, 0xC413, 0x9C74, 0xC414, - 0x9C75, 0xC415, 0x9C76, 0xC416, 0x9C77, 0xC417, 0x9C78, 0xC418, - 0x9C79, 0xC419, 0x9C7A, 0xC41A, 0x9C81, 0xC41B, 0x9C82, 0xC41C, - 0x9C83, 0xC41D, 0x9C84, 0xC41E, 0x9C85, 0xC41F, 0x9C86, 0xC420, - 0x9C87, 0xC421, 0x9C88, 0xC422, 0x9C89, 0xC423, 0x9C8A, 0xC425, - 0x9C8B, 0xC426, 0x9C8C, 0xC427, 0x9C8D, 0xC428, 0x9C8E, 0xC429, - 0x9C8F, 0xC42A, 0x9C90, 0xC42B, 0x9C91, 0xC42D, 0x9C92, 0xC42E, - 0x9C93, 0xC42F, 0x9C94, 0xC431, 0x9C95, 0xC432, 0x9C96, 0xC433, - 0x9C97, 0xC435, 0x9C98, 0xC436, 0x9C99, 0xC437, 0x9C9A, 0xC438, - 0x9C9B, 0xC439, 0x9C9C, 0xC43A, 0x9C9D, 0xC43B, 0x9C9E, 0xC43E, - 0x9C9F, 0xC43F, 0x9CA0, 0xC440, 0x9CA1, 0xC441, 0x9CA2, 0xC442, - 0x9CA3, 0xC443, 0x9CA4, 0xC444, 0x9CA5, 0xC445, 0x9CA6, 0xC446, - 0x9CA7, 0xC447, 0x9CA8, 0xC449, 0x9CA9, 0xC44A, 0x9CAA, 0xC44B, - 0x9CAB, 0xC44C, 0x9CAC, 0xC44D, 0x9CAD, 0xC44E, 0x9CAE, 0xC44F, - 0x9CAF, 0xC450, 0x9CB0, 0xC451, 0x9CB1, 0xC452, 0x9CB2, 0xC453, - 0x9CB3, 0xC454, 0x9CB4, 0xC455, 0x9CB5, 0xC456, 0x9CB6, 0xC457, - 0x9CB7, 0xC458, 0x9CB8, 0xC459, 0x9CB9, 0xC45A, 0x9CBA, 0xC45B, - 0x9CBB, 0xC45C, 0x9CBC, 0xC45D, 0x9CBD, 0xC45E, 0x9CBE, 0xC45F, - 0x9CBF, 0xC460, 0x9CC0, 0xC461, 0x9CC1, 0xC462, 0x9CC2, 0xC463, - 0x9CC3, 0xC466, 0x9CC4, 0xC467, 0x9CC5, 0xC469, 0x9CC6, 0xC46A, - 0x9CC7, 0xC46B, 0x9CC8, 0xC46D, 0x9CC9, 0xC46E, 0x9CCA, 0xC46F, - 0x9CCB, 0xC470, 0x9CCC, 0xC471, 0x9CCD, 0xC472, 0x9CCE, 0xC473, - 0x9CCF, 0xC476, 0x9CD0, 0xC477, 0x9CD1, 0xC478, 0x9CD2, 0xC47A, - 0x9CD3, 0xC47B, 0x9CD4, 0xC47C, 0x9CD5, 0xC47D, 0x9CD6, 0xC47E, - 0x9CD7, 0xC47F, 0x9CD8, 0xC481, 0x9CD9, 0xC482, 0x9CDA, 0xC483, - 0x9CDB, 0xC484, 0x9CDC, 0xC485, 0x9CDD, 0xC486, 0x9CDE, 0xC487, - 0x9CDF, 0xC488, 0x9CE0, 0xC489, 0x9CE1, 0xC48A, 0x9CE2, 0xC48B, - 0x9CE3, 0xC48C, 0x9CE4, 0xC48D, 0x9CE5, 0xC48E, 0x9CE6, 0xC48F, - 0x9CE7, 0xC490, 0x9CE8, 0xC491, 0x9CE9, 0xC492, 0x9CEA, 0xC493, - 0x9CEB, 0xC495, 0x9CEC, 0xC496, 0x9CED, 0xC497, 0x9CEE, 0xC498, - 0x9CEF, 0xC499, 0x9CF0, 0xC49A, 0x9CF1, 0xC49B, 0x9CF2, 0xC49D, - 0x9CF3, 0xC49E, 0x9CF4, 0xC49F, 0x9CF5, 0xC4A0, 0x9CF6, 0xC4A1, - 0x9CF7, 0xC4A2, 0x9CF8, 0xC4A3, 0x9CF9, 0xC4A4, 0x9CFA, 0xC4A5, - 0x9CFB, 0xC4A6, 0x9CFC, 0xC4A7, 0x9CFD, 0xC4A8, 0x9CFE, 0xC4A9, - 0x9D41, 0xC4AA, 0x9D42, 0xC4AB, 0x9D43, 0xC4AC, 0x9D44, 0xC4AD, - 0x9D45, 0xC4AE, 0x9D46, 0xC4AF, 0x9D47, 0xC4B0, 0x9D48, 0xC4B1, - 0x9D49, 0xC4B2, 0x9D4A, 0xC4B3, 0x9D4B, 0xC4B4, 0x9D4C, 0xC4B5, - 0x9D4D, 0xC4B6, 0x9D4E, 0xC4B7, 0x9D4F, 0xC4B9, 0x9D50, 0xC4BA, - 0x9D51, 0xC4BB, 0x9D52, 0xC4BD, 0x9D53, 0xC4BE, 0x9D54, 0xC4BF, - 0x9D55, 0xC4C0, 0x9D56, 0xC4C1, 0x9D57, 0xC4C2, 0x9D58, 0xC4C3, - 0x9D59, 0xC4C4, 0x9D5A, 0xC4C5, 0x9D61, 0xC4C6, 0x9D62, 0xC4C7, - 0x9D63, 0xC4C8, 0x9D64, 0xC4C9, 0x9D65, 0xC4CA, 0x9D66, 0xC4CB, - 0x9D67, 0xC4CC, 0x9D68, 0xC4CD, 0x9D69, 0xC4CE, 0x9D6A, 0xC4CF, - 0x9D6B, 0xC4D0, 0x9D6C, 0xC4D1, 0x9D6D, 0xC4D2, 0x9D6E, 0xC4D3, - 0x9D6F, 0xC4D4, 0x9D70, 0xC4D5, 0x9D71, 0xC4D6, 0x9D72, 0xC4D7, - 0x9D73, 0xC4D8, 0x9D74, 0xC4D9, 0x9D75, 0xC4DA, 0x9D76, 0xC4DB, - 0x9D77, 0xC4DC, 0x9D78, 0xC4DD, 0x9D79, 0xC4DE, 0x9D7A, 0xC4DF, - 0x9D81, 0xC4E0, 0x9D82, 0xC4E1, 0x9D83, 0xC4E2, 0x9D84, 0xC4E3, - 0x9D85, 0xC4E4, 0x9D86, 0xC4E5, 0x9D87, 0xC4E6, 0x9D88, 0xC4E7, - 0x9D89, 0xC4E8, 0x9D8A, 0xC4EA, 0x9D8B, 0xC4EB, 0x9D8C, 0xC4EC, - 0x9D8D, 0xC4ED, 0x9D8E, 0xC4EE, 0x9D8F, 0xC4EF, 0x9D90, 0xC4F2, - 0x9D91, 0xC4F3, 0x9D92, 0xC4F5, 0x9D93, 0xC4F6, 0x9D94, 0xC4F7, - 0x9D95, 0xC4F9, 0x9D96, 0xC4FB, 0x9D97, 0xC4FC, 0x9D98, 0xC4FD, - 0x9D99, 0xC4FE, 0x9D9A, 0xC502, 0x9D9B, 0xC503, 0x9D9C, 0xC504, - 0x9D9D, 0xC505, 0x9D9E, 0xC506, 0x9D9F, 0xC507, 0x9DA0, 0xC508, - 0x9DA1, 0xC509, 0x9DA2, 0xC50A, 0x9DA3, 0xC50B, 0x9DA4, 0xC50D, - 0x9DA5, 0xC50E, 0x9DA6, 0xC50F, 0x9DA7, 0xC511, 0x9DA8, 0xC512, - 0x9DA9, 0xC513, 0x9DAA, 0xC515, 0x9DAB, 0xC516, 0x9DAC, 0xC517, - 0x9DAD, 0xC518, 0x9DAE, 0xC519, 0x9DAF, 0xC51A, 0x9DB0, 0xC51B, - 0x9DB1, 0xC51D, 0x9DB2, 0xC51E, 0x9DB3, 0xC51F, 0x9DB4, 0xC520, - 0x9DB5, 0xC521, 0x9DB6, 0xC522, 0x9DB7, 0xC523, 0x9DB8, 0xC524, - 0x9DB9, 0xC525, 0x9DBA, 0xC526, 0x9DBB, 0xC527, 0x9DBC, 0xC52A, - 0x9DBD, 0xC52B, 0x9DBE, 0xC52D, 0x9DBF, 0xC52E, 0x9DC0, 0xC52F, - 0x9DC1, 0xC531, 0x9DC2, 0xC532, 0x9DC3, 0xC533, 0x9DC4, 0xC534, - 0x9DC5, 0xC535, 0x9DC6, 0xC536, 0x9DC7, 0xC537, 0x9DC8, 0xC53A, - 0x9DC9, 0xC53C, 0x9DCA, 0xC53E, 0x9DCB, 0xC53F, 0x9DCC, 0xC540, - 0x9DCD, 0xC541, 0x9DCE, 0xC542, 0x9DCF, 0xC543, 0x9DD0, 0xC546, - 0x9DD1, 0xC547, 0x9DD2, 0xC54B, 0x9DD3, 0xC54F, 0x9DD4, 0xC550, - 0x9DD5, 0xC551, 0x9DD6, 0xC552, 0x9DD7, 0xC556, 0x9DD8, 0xC55A, - 0x9DD9, 0xC55B, 0x9DDA, 0xC55C, 0x9DDB, 0xC55F, 0x9DDC, 0xC562, - 0x9DDD, 0xC563, 0x9DDE, 0xC565, 0x9DDF, 0xC566, 0x9DE0, 0xC567, - 0x9DE1, 0xC569, 0x9DE2, 0xC56A, 0x9DE3, 0xC56B, 0x9DE4, 0xC56C, - 0x9DE5, 0xC56D, 0x9DE6, 0xC56E, 0x9DE7, 0xC56F, 0x9DE8, 0xC572, - 0x9DE9, 0xC576, 0x9DEA, 0xC577, 0x9DEB, 0xC578, 0x9DEC, 0xC579, - 0x9DED, 0xC57A, 0x9DEE, 0xC57B, 0x9DEF, 0xC57E, 0x9DF0, 0xC57F, - 0x9DF1, 0xC581, 0x9DF2, 0xC582, 0x9DF3, 0xC583, 0x9DF4, 0xC585, - 0x9DF5, 0xC586, 0x9DF6, 0xC588, 0x9DF7, 0xC589, 0x9DF8, 0xC58A, - 0x9DF9, 0xC58B, 0x9DFA, 0xC58E, 0x9DFB, 0xC590, 0x9DFC, 0xC592, - 0x9DFD, 0xC593, 0x9DFE, 0xC594, 0x9E41, 0xC596, 0x9E42, 0xC599, - 0x9E43, 0xC59A, 0x9E44, 0xC59B, 0x9E45, 0xC59D, 0x9E46, 0xC59E, - 0x9E47, 0xC59F, 0x9E48, 0xC5A1, 0x9E49, 0xC5A2, 0x9E4A, 0xC5A3, - 0x9E4B, 0xC5A4, 0x9E4C, 0xC5A5, 0x9E4D, 0xC5A6, 0x9E4E, 0xC5A7, - 0x9E4F, 0xC5A8, 0x9E50, 0xC5AA, 0x9E51, 0xC5AB, 0x9E52, 0xC5AC, - 0x9E53, 0xC5AD, 0x9E54, 0xC5AE, 0x9E55, 0xC5AF, 0x9E56, 0xC5B0, - 0x9E57, 0xC5B1, 0x9E58, 0xC5B2, 0x9E59, 0xC5B3, 0x9E5A, 0xC5B6, - 0x9E61, 0xC5B7, 0x9E62, 0xC5BA, 0x9E63, 0xC5BF, 0x9E64, 0xC5C0, - 0x9E65, 0xC5C1, 0x9E66, 0xC5C2, 0x9E67, 0xC5C3, 0x9E68, 0xC5CB, - 0x9E69, 0xC5CD, 0x9E6A, 0xC5CF, 0x9E6B, 0xC5D2, 0x9E6C, 0xC5D3, - 0x9E6D, 0xC5D5, 0x9E6E, 0xC5D6, 0x9E6F, 0xC5D7, 0x9E70, 0xC5D9, - 0x9E71, 0xC5DA, 0x9E72, 0xC5DB, 0x9E73, 0xC5DC, 0x9E74, 0xC5DD, - 0x9E75, 0xC5DE, 0x9E76, 0xC5DF, 0x9E77, 0xC5E2, 0x9E78, 0xC5E4, - 0x9E79, 0xC5E6, 0x9E7A, 0xC5E7, 0x9E81, 0xC5E8, 0x9E82, 0xC5E9, - 0x9E83, 0xC5EA, 0x9E84, 0xC5EB, 0x9E85, 0xC5EF, 0x9E86, 0xC5F1, - 0x9E87, 0xC5F2, 0x9E88, 0xC5F3, 0x9E89, 0xC5F5, 0x9E8A, 0xC5F8, - 0x9E8B, 0xC5F9, 0x9E8C, 0xC5FA, 0x9E8D, 0xC5FB, 0x9E8E, 0xC602, - 0x9E8F, 0xC603, 0x9E90, 0xC604, 0x9E91, 0xC609, 0x9E92, 0xC60A, - 0x9E93, 0xC60B, 0x9E94, 0xC60D, 0x9E95, 0xC60E, 0x9E96, 0xC60F, - 0x9E97, 0xC611, 0x9E98, 0xC612, 0x9E99, 0xC613, 0x9E9A, 0xC614, - 0x9E9B, 0xC615, 0x9E9C, 0xC616, 0x9E9D, 0xC617, 0x9E9E, 0xC61A, - 0x9E9F, 0xC61D, 0x9EA0, 0xC61E, 0x9EA1, 0xC61F, 0x9EA2, 0xC620, - 0x9EA3, 0xC621, 0x9EA4, 0xC622, 0x9EA5, 0xC623, 0x9EA6, 0xC626, - 0x9EA7, 0xC627, 0x9EA8, 0xC629, 0x9EA9, 0xC62A, 0x9EAA, 0xC62B, - 0x9EAB, 0xC62F, 0x9EAC, 0xC631, 0x9EAD, 0xC632, 0x9EAE, 0xC636, - 0x9EAF, 0xC638, 0x9EB0, 0xC63A, 0x9EB1, 0xC63C, 0x9EB2, 0xC63D, - 0x9EB3, 0xC63E, 0x9EB4, 0xC63F, 0x9EB5, 0xC642, 0x9EB6, 0xC643, - 0x9EB7, 0xC645, 0x9EB8, 0xC646, 0x9EB9, 0xC647, 0x9EBA, 0xC649, - 0x9EBB, 0xC64A, 0x9EBC, 0xC64B, 0x9EBD, 0xC64C, 0x9EBE, 0xC64D, - 0x9EBF, 0xC64E, 0x9EC0, 0xC64F, 0x9EC1, 0xC652, 0x9EC2, 0xC656, - 0x9EC3, 0xC657, 0x9EC4, 0xC658, 0x9EC5, 0xC659, 0x9EC6, 0xC65A, - 0x9EC7, 0xC65B, 0x9EC8, 0xC65E, 0x9EC9, 0xC65F, 0x9ECA, 0xC661, - 0x9ECB, 0xC662, 0x9ECC, 0xC663, 0x9ECD, 0xC664, 0x9ECE, 0xC665, - 0x9ECF, 0xC666, 0x9ED0, 0xC667, 0x9ED1, 0xC668, 0x9ED2, 0xC669, - 0x9ED3, 0xC66A, 0x9ED4, 0xC66B, 0x9ED5, 0xC66D, 0x9ED6, 0xC66E, - 0x9ED7, 0xC670, 0x9ED8, 0xC672, 0x9ED9, 0xC673, 0x9EDA, 0xC674, - 0x9EDB, 0xC675, 0x9EDC, 0xC676, 0x9EDD, 0xC677, 0x9EDE, 0xC67A, - 0x9EDF, 0xC67B, 0x9EE0, 0xC67D, 0x9EE1, 0xC67E, 0x9EE2, 0xC67F, - 0x9EE3, 0xC681, 0x9EE4, 0xC682, 0x9EE5, 0xC683, 0x9EE6, 0xC684, - 0x9EE7, 0xC685, 0x9EE8, 0xC686, 0x9EE9, 0xC687, 0x9EEA, 0xC68A, - 0x9EEB, 0xC68C, 0x9EEC, 0xC68E, 0x9EED, 0xC68F, 0x9EEE, 0xC690, - 0x9EEF, 0xC691, 0x9EF0, 0xC692, 0x9EF1, 0xC693, 0x9EF2, 0xC696, - 0x9EF3, 0xC697, 0x9EF4, 0xC699, 0x9EF5, 0xC69A, 0x9EF6, 0xC69B, - 0x9EF7, 0xC69D, 0x9EF8, 0xC69E, 0x9EF9, 0xC69F, 0x9EFA, 0xC6A0, - 0x9EFB, 0xC6A1, 0x9EFC, 0xC6A2, 0x9EFD, 0xC6A3, 0x9EFE, 0xC6A6, - 0x9F41, 0xC6A8, 0x9F42, 0xC6AA, 0x9F43, 0xC6AB, 0x9F44, 0xC6AC, - 0x9F45, 0xC6AD, 0x9F46, 0xC6AE, 0x9F47, 0xC6AF, 0x9F48, 0xC6B2, - 0x9F49, 0xC6B3, 0x9F4A, 0xC6B5, 0x9F4B, 0xC6B6, 0x9F4C, 0xC6B7, - 0x9F4D, 0xC6BB, 0x9F4E, 0xC6BC, 0x9F4F, 0xC6BD, 0x9F50, 0xC6BE, - 0x9F51, 0xC6BF, 0x9F52, 0xC6C2, 0x9F53, 0xC6C4, 0x9F54, 0xC6C6, - 0x9F55, 0xC6C7, 0x9F56, 0xC6C8, 0x9F57, 0xC6C9, 0x9F58, 0xC6CA, - 0x9F59, 0xC6CB, 0x9F5A, 0xC6CE, 0x9F61, 0xC6CF, 0x9F62, 0xC6D1, - 0x9F63, 0xC6D2, 0x9F64, 0xC6D3, 0x9F65, 0xC6D5, 0x9F66, 0xC6D6, - 0x9F67, 0xC6D7, 0x9F68, 0xC6D8, 0x9F69, 0xC6D9, 0x9F6A, 0xC6DA, - 0x9F6B, 0xC6DB, 0x9F6C, 0xC6DE, 0x9F6D, 0xC6DF, 0x9F6E, 0xC6E2, - 0x9F6F, 0xC6E3, 0x9F70, 0xC6E4, 0x9F71, 0xC6E5, 0x9F72, 0xC6E6, - 0x9F73, 0xC6E7, 0x9F74, 0xC6EA, 0x9F75, 0xC6EB, 0x9F76, 0xC6ED, - 0x9F77, 0xC6EE, 0x9F78, 0xC6EF, 0x9F79, 0xC6F1, 0x9F7A, 0xC6F2, - 0x9F81, 0xC6F3, 0x9F82, 0xC6F4, 0x9F83, 0xC6F5, 0x9F84, 0xC6F6, - 0x9F85, 0xC6F7, 0x9F86, 0xC6FA, 0x9F87, 0xC6FB, 0x9F88, 0xC6FC, - 0x9F89, 0xC6FE, 0x9F8A, 0xC6FF, 0x9F8B, 0xC700, 0x9F8C, 0xC701, - 0x9F8D, 0xC702, 0x9F8E, 0xC703, 0x9F8F, 0xC706, 0x9F90, 0xC707, - 0x9F91, 0xC709, 0x9F92, 0xC70A, 0x9F93, 0xC70B, 0x9F94, 0xC70D, - 0x9F95, 0xC70E, 0x9F96, 0xC70F, 0x9F97, 0xC710, 0x9F98, 0xC711, - 0x9F99, 0xC712, 0x9F9A, 0xC713, 0x9F9B, 0xC716, 0x9F9C, 0xC718, - 0x9F9D, 0xC71A, 0x9F9E, 0xC71B, 0x9F9F, 0xC71C, 0x9FA0, 0xC71D, - 0x9FA1, 0xC71E, 0x9FA2, 0xC71F, 0x9FA3, 0xC722, 0x9FA4, 0xC723, - 0x9FA5, 0xC725, 0x9FA6, 0xC726, 0x9FA7, 0xC727, 0x9FA8, 0xC729, - 0x9FA9, 0xC72A, 0x9FAA, 0xC72B, 0x9FAB, 0xC72C, 0x9FAC, 0xC72D, - 0x9FAD, 0xC72E, 0x9FAE, 0xC72F, 0x9FAF, 0xC732, 0x9FB0, 0xC734, - 0x9FB1, 0xC736, 0x9FB2, 0xC738, 0x9FB3, 0xC739, 0x9FB4, 0xC73A, - 0x9FB5, 0xC73B, 0x9FB6, 0xC73E, 0x9FB7, 0xC73F, 0x9FB8, 0xC741, - 0x9FB9, 0xC742, 0x9FBA, 0xC743, 0x9FBB, 0xC745, 0x9FBC, 0xC746, - 0x9FBD, 0xC747, 0x9FBE, 0xC748, 0x9FBF, 0xC749, 0x9FC0, 0xC74B, - 0x9FC1, 0xC74E, 0x9FC2, 0xC750, 0x9FC3, 0xC759, 0x9FC4, 0xC75A, - 0x9FC5, 0xC75B, 0x9FC6, 0xC75D, 0x9FC7, 0xC75E, 0x9FC8, 0xC75F, - 0x9FC9, 0xC761, 0x9FCA, 0xC762, 0x9FCB, 0xC763, 0x9FCC, 0xC764, - 0x9FCD, 0xC765, 0x9FCE, 0xC766, 0x9FCF, 0xC767, 0x9FD0, 0xC769, - 0x9FD1, 0xC76A, 0x9FD2, 0xC76C, 0x9FD3, 0xC76D, 0x9FD4, 0xC76E, - 0x9FD5, 0xC76F, 0x9FD6, 0xC770, 0x9FD7, 0xC771, 0x9FD8, 0xC772, - 0x9FD9, 0xC773, 0x9FDA, 0xC776, 0x9FDB, 0xC777, 0x9FDC, 0xC779, - 0x9FDD, 0xC77A, 0x9FDE, 0xC77B, 0x9FDF, 0xC77F, 0x9FE0, 0xC780, - 0x9FE1, 0xC781, 0x9FE2, 0xC782, 0x9FE3, 0xC786, 0x9FE4, 0xC78B, - 0x9FE5, 0xC78C, 0x9FE6, 0xC78D, 0x9FE7, 0xC78F, 0x9FE8, 0xC792, - 0x9FE9, 0xC793, 0x9FEA, 0xC795, 0x9FEB, 0xC799, 0x9FEC, 0xC79B, - 0x9FED, 0xC79C, 0x9FEE, 0xC79D, 0x9FEF, 0xC79E, 0x9FF0, 0xC79F, - 0x9FF1, 0xC7A2, 0x9FF2, 0xC7A7, 0x9FF3, 0xC7A8, 0x9FF4, 0xC7A9, - 0x9FF5, 0xC7AA, 0x9FF6, 0xC7AB, 0x9FF7, 0xC7AE, 0x9FF8, 0xC7AF, - 0x9FF9, 0xC7B1, 0x9FFA, 0xC7B2, 0x9FFB, 0xC7B3, 0x9FFC, 0xC7B5, - 0x9FFD, 0xC7B6, 0x9FFE, 0xC7B7, 0xA041, 0xC7B8, 0xA042, 0xC7B9, - 0xA043, 0xC7BA, 0xA044, 0xC7BB, 0xA045, 0xC7BE, 0xA046, 0xC7C2, - 0xA047, 0xC7C3, 0xA048, 0xC7C4, 0xA049, 0xC7C5, 0xA04A, 0xC7C6, - 0xA04B, 0xC7C7, 0xA04C, 0xC7CA, 0xA04D, 0xC7CB, 0xA04E, 0xC7CD, - 0xA04F, 0xC7CF, 0xA050, 0xC7D1, 0xA051, 0xC7D2, 0xA052, 0xC7D3, - 0xA053, 0xC7D4, 0xA054, 0xC7D5, 0xA055, 0xC7D6, 0xA056, 0xC7D7, - 0xA057, 0xC7D9, 0xA058, 0xC7DA, 0xA059, 0xC7DB, 0xA05A, 0xC7DC, - 0xA061, 0xC7DE, 0xA062, 0xC7DF, 0xA063, 0xC7E0, 0xA064, 0xC7E1, - 0xA065, 0xC7E2, 0xA066, 0xC7E3, 0xA067, 0xC7E5, 0xA068, 0xC7E6, - 0xA069, 0xC7E7, 0xA06A, 0xC7E9, 0xA06B, 0xC7EA, 0xA06C, 0xC7EB, - 0xA06D, 0xC7ED, 0xA06E, 0xC7EE, 0xA06F, 0xC7EF, 0xA070, 0xC7F0, - 0xA071, 0xC7F1, 0xA072, 0xC7F2, 0xA073, 0xC7F3, 0xA074, 0xC7F4, - 0xA075, 0xC7F5, 0xA076, 0xC7F6, 0xA077, 0xC7F7, 0xA078, 0xC7F8, - 0xA079, 0xC7F9, 0xA07A, 0xC7FA, 0xA081, 0xC7FB, 0xA082, 0xC7FC, - 0xA083, 0xC7FD, 0xA084, 0xC7FE, 0xA085, 0xC7FF, 0xA086, 0xC802, - 0xA087, 0xC803, 0xA088, 0xC805, 0xA089, 0xC806, 0xA08A, 0xC807, - 0xA08B, 0xC809, 0xA08C, 0xC80B, 0xA08D, 0xC80C, 0xA08E, 0xC80D, - 0xA08F, 0xC80E, 0xA090, 0xC80F, 0xA091, 0xC812, 0xA092, 0xC814, - 0xA093, 0xC817, 0xA094, 0xC818, 0xA095, 0xC819, 0xA096, 0xC81A, - 0xA097, 0xC81B, 0xA098, 0xC81E, 0xA099, 0xC81F, 0xA09A, 0xC821, - 0xA09B, 0xC822, 0xA09C, 0xC823, 0xA09D, 0xC825, 0xA09E, 0xC826, - 0xA09F, 0xC827, 0xA0A0, 0xC828, 0xA0A1, 0xC829, 0xA0A2, 0xC82A, - 0xA0A3, 0xC82B, 0xA0A4, 0xC82E, 0xA0A5, 0xC830, 0xA0A6, 0xC832, - 0xA0A7, 0xC833, 0xA0A8, 0xC834, 0xA0A9, 0xC835, 0xA0AA, 0xC836, - 0xA0AB, 0xC837, 0xA0AC, 0xC839, 0xA0AD, 0xC83A, 0xA0AE, 0xC83B, - 0xA0AF, 0xC83D, 0xA0B0, 0xC83E, 0xA0B1, 0xC83F, 0xA0B2, 0xC841, - 0xA0B3, 0xC842, 0xA0B4, 0xC843, 0xA0B5, 0xC844, 0xA0B6, 0xC845, - 0xA0B7, 0xC846, 0xA0B8, 0xC847, 0xA0B9, 0xC84A, 0xA0BA, 0xC84B, - 0xA0BB, 0xC84E, 0xA0BC, 0xC84F, 0xA0BD, 0xC850, 0xA0BE, 0xC851, - 0xA0BF, 0xC852, 0xA0C0, 0xC853, 0xA0C1, 0xC855, 0xA0C2, 0xC856, - 0xA0C3, 0xC857, 0xA0C4, 0xC858, 0xA0C5, 0xC859, 0xA0C6, 0xC85A, - 0xA0C7, 0xC85B, 0xA0C8, 0xC85C, 0xA0C9, 0xC85D, 0xA0CA, 0xC85E, - 0xA0CB, 0xC85F, 0xA0CC, 0xC860, 0xA0CD, 0xC861, 0xA0CE, 0xC862, - 0xA0CF, 0xC863, 0xA0D0, 0xC864, 0xA0D1, 0xC865, 0xA0D2, 0xC866, - 0xA0D3, 0xC867, 0xA0D4, 0xC868, 0xA0D5, 0xC869, 0xA0D6, 0xC86A, - 0xA0D7, 0xC86B, 0xA0D8, 0xC86C, 0xA0D9, 0xC86D, 0xA0DA, 0xC86E, - 0xA0DB, 0xC86F, 0xA0DC, 0xC872, 0xA0DD, 0xC873, 0xA0DE, 0xC875, - 0xA0DF, 0xC876, 0xA0E0, 0xC877, 0xA0E1, 0xC879, 0xA0E2, 0xC87B, - 0xA0E3, 0xC87C, 0xA0E4, 0xC87D, 0xA0E5, 0xC87E, 0xA0E6, 0xC87F, - 0xA0E7, 0xC882, 0xA0E8, 0xC884, 0xA0E9, 0xC888, 0xA0EA, 0xC889, - 0xA0EB, 0xC88A, 0xA0EC, 0xC88E, 0xA0ED, 0xC88F, 0xA0EE, 0xC890, - 0xA0EF, 0xC891, 0xA0F0, 0xC892, 0xA0F1, 0xC893, 0xA0F2, 0xC895, - 0xA0F3, 0xC896, 0xA0F4, 0xC897, 0xA0F5, 0xC898, 0xA0F6, 0xC899, - 0xA0F7, 0xC89A, 0xA0F8, 0xC89B, 0xA0F9, 0xC89C, 0xA0FA, 0xC89E, - 0xA0FB, 0xC8A0, 0xA0FC, 0xC8A2, 0xA0FD, 0xC8A3, 0xA0FE, 0xC8A4, - 0xA141, 0xC8A5, 0xA142, 0xC8A6, 0xA143, 0xC8A7, 0xA144, 0xC8A9, - 0xA145, 0xC8AA, 0xA146, 0xC8AB, 0xA147, 0xC8AC, 0xA148, 0xC8AD, - 0xA149, 0xC8AE, 0xA14A, 0xC8AF, 0xA14B, 0xC8B0, 0xA14C, 0xC8B1, - 0xA14D, 0xC8B2, 0xA14E, 0xC8B3, 0xA14F, 0xC8B4, 0xA150, 0xC8B5, - 0xA151, 0xC8B6, 0xA152, 0xC8B7, 0xA153, 0xC8B8, 0xA154, 0xC8B9, - 0xA155, 0xC8BA, 0xA156, 0xC8BB, 0xA157, 0xC8BE, 0xA158, 0xC8BF, - 0xA159, 0xC8C0, 0xA15A, 0xC8C1, 0xA161, 0xC8C2, 0xA162, 0xC8C3, - 0xA163, 0xC8C5, 0xA164, 0xC8C6, 0xA165, 0xC8C7, 0xA166, 0xC8C9, - 0xA167, 0xC8CA, 0xA168, 0xC8CB, 0xA169, 0xC8CD, 0xA16A, 0xC8CE, - 0xA16B, 0xC8CF, 0xA16C, 0xC8D0, 0xA16D, 0xC8D1, 0xA16E, 0xC8D2, - 0xA16F, 0xC8D3, 0xA170, 0xC8D6, 0xA171, 0xC8D8, 0xA172, 0xC8DA, - 0xA173, 0xC8DB, 0xA174, 0xC8DC, 0xA175, 0xC8DD, 0xA176, 0xC8DE, - 0xA177, 0xC8DF, 0xA178, 0xC8E2, 0xA179, 0xC8E3, 0xA17A, 0xC8E5, - 0xA181, 0xC8E6, 0xA182, 0xC8E7, 0xA183, 0xC8E8, 0xA184, 0xC8E9, - 0xA185, 0xC8EA, 0xA186, 0xC8EB, 0xA187, 0xC8EC, 0xA188, 0xC8ED, - 0xA189, 0xC8EE, 0xA18A, 0xC8EF, 0xA18B, 0xC8F0, 0xA18C, 0xC8F1, - 0xA18D, 0xC8F2, 0xA18E, 0xC8F3, 0xA18F, 0xC8F4, 0xA190, 0xC8F6, - 0xA191, 0xC8F7, 0xA192, 0xC8F8, 0xA193, 0xC8F9, 0xA194, 0xC8FA, - 0xA195, 0xC8FB, 0xA196, 0xC8FE, 0xA197, 0xC8FF, 0xA198, 0xC901, - 0xA199, 0xC902, 0xA19A, 0xC903, 0xA19B, 0xC907, 0xA19C, 0xC908, - 0xA19D, 0xC909, 0xA19E, 0xC90A, 0xA19F, 0xC90B, 0xA1A0, 0xC90E, - 0xA1A1, 0x3000, 0xA1A2, 0x3001, 0xA1A3, 0x3002, 0xA1A4, 0x00B7, - 0xA1A5, 0x2025, 0xA1A6, 0x2026, 0xA1A7, 0x00A8, 0xA1A8, 0x3003, - 0xA1A9, 0x00AD, 0xA1AA, 0x2015, 0xA1AB, 0x2225, 0xA1AC, 0xFF3C, - 0xA1AD, 0x223C, 0xA1AE, 0x2018, 0xA1AF, 0x2019, 0xA1B0, 0x201C, - 0xA1B1, 0x201D, 0xA1B2, 0x3014, 0xA1B3, 0x3015, 0xA1B4, 0x3008, - 0xA1B5, 0x3009, 0xA1B6, 0x300A, 0xA1B7, 0x300B, 0xA1B8, 0x300C, - 0xA1B9, 0x300D, 0xA1BA, 0x300E, 0xA1BB, 0x300F, 0xA1BC, 0x3010, - 0xA1BD, 0x3011, 0xA1BE, 0x00B1, 0xA1BF, 0x00D7, 0xA1C0, 0x00F7, - 0xA1C1, 0x2260, 0xA1C2, 0x2264, 0xA1C3, 0x2265, 0xA1C4, 0x221E, - 0xA1C5, 0x2234, 0xA1C6, 0x00B0, 0xA1C7, 0x2032, 0xA1C8, 0x2033, - 0xA1C9, 0x2103, 0xA1CA, 0x212B, 0xA1CB, 0xFFE0, 0xA1CC, 0xFFE1, - 0xA1CD, 0xFFE5, 0xA1CE, 0x2642, 0xA1CF, 0x2640, 0xA1D0, 0x2220, - 0xA1D1, 0x22A5, 0xA1D2, 0x2312, 0xA1D3, 0x2202, 0xA1D4, 0x2207, - 0xA1D5, 0x2261, 0xA1D6, 0x2252, 0xA1D7, 0x00A7, 0xA1D8, 0x203B, - 0xA1D9, 0x2606, 0xA1DA, 0x2605, 0xA1DB, 0x25CB, 0xA1DC, 0x25CF, - 0xA1DD, 0x25CE, 0xA1DE, 0x25C7, 0xA1DF, 0x25C6, 0xA1E0, 0x25A1, - 0xA1E1, 0x25A0, 0xA1E2, 0x25B3, 0xA1E3, 0x25B2, 0xA1E4, 0x25BD, - 0xA1E5, 0x25BC, 0xA1E6, 0x2192, 0xA1E7, 0x2190, 0xA1E8, 0x2191, - 0xA1E9, 0x2193, 0xA1EA, 0x2194, 0xA1EB, 0x3013, 0xA1EC, 0x226A, - 0xA1ED, 0x226B, 0xA1EE, 0x221A, 0xA1EF, 0x223D, 0xA1F0, 0x221D, - 0xA1F1, 0x2235, 0xA1F2, 0x222B, 0xA1F3, 0x222C, 0xA1F4, 0x2208, - 0xA1F5, 0x220B, 0xA1F6, 0x2286, 0xA1F7, 0x2287, 0xA1F8, 0x2282, - 0xA1F9, 0x2283, 0xA1FA, 0x222A, 0xA1FB, 0x2229, 0xA1FC, 0x2227, - 0xA1FD, 0x2228, 0xA1FE, 0xFFE2, 0xA241, 0xC910, 0xA242, 0xC912, - 0xA243, 0xC913, 0xA244, 0xC914, 0xA245, 0xC915, 0xA246, 0xC916, - 0xA247, 0xC917, 0xA248, 0xC919, 0xA249, 0xC91A, 0xA24A, 0xC91B, - 0xA24B, 0xC91C, 0xA24C, 0xC91D, 0xA24D, 0xC91E, 0xA24E, 0xC91F, - 0xA24F, 0xC920, 0xA250, 0xC921, 0xA251, 0xC922, 0xA252, 0xC923, - 0xA253, 0xC924, 0xA254, 0xC925, 0xA255, 0xC926, 0xA256, 0xC927, - 0xA257, 0xC928, 0xA258, 0xC929, 0xA259, 0xC92A, 0xA25A, 0xC92B, - 0xA261, 0xC92D, 0xA262, 0xC92E, 0xA263, 0xC92F, 0xA264, 0xC930, - 0xA265, 0xC931, 0xA266, 0xC932, 0xA267, 0xC933, 0xA268, 0xC935, - 0xA269, 0xC936, 0xA26A, 0xC937, 0xA26B, 0xC938, 0xA26C, 0xC939, - 0xA26D, 0xC93A, 0xA26E, 0xC93B, 0xA26F, 0xC93C, 0xA270, 0xC93D, - 0xA271, 0xC93E, 0xA272, 0xC93F, 0xA273, 0xC940, 0xA274, 0xC941, - 0xA275, 0xC942, 0xA276, 0xC943, 0xA277, 0xC944, 0xA278, 0xC945, - 0xA279, 0xC946, 0xA27A, 0xC947, 0xA281, 0xC948, 0xA282, 0xC949, - 0xA283, 0xC94A, 0xA284, 0xC94B, 0xA285, 0xC94C, 0xA286, 0xC94D, - 0xA287, 0xC94E, 0xA288, 0xC94F, 0xA289, 0xC952, 0xA28A, 0xC953, - 0xA28B, 0xC955, 0xA28C, 0xC956, 0xA28D, 0xC957, 0xA28E, 0xC959, - 0xA28F, 0xC95A, 0xA290, 0xC95B, 0xA291, 0xC95C, 0xA292, 0xC95D, - 0xA293, 0xC95E, 0xA294, 0xC95F, 0xA295, 0xC962, 0xA296, 0xC964, - 0xA297, 0xC965, 0xA298, 0xC966, 0xA299, 0xC967, 0xA29A, 0xC968, - 0xA29B, 0xC969, 0xA29C, 0xC96A, 0xA29D, 0xC96B, 0xA29E, 0xC96D, - 0xA29F, 0xC96E, 0xA2A0, 0xC96F, 0xA2A1, 0x21D2, 0xA2A2, 0x21D4, - 0xA2A3, 0x2200, 0xA2A4, 0x2203, 0xA2A5, 0x00B4, 0xA2A6, 0xFF5E, - 0xA2A7, 0x02C7, 0xA2A8, 0x02D8, 0xA2A9, 0x02DD, 0xA2AA, 0x02DA, - 0xA2AB, 0x02D9, 0xA2AC, 0x00B8, 0xA2AD, 0x02DB, 0xA2AE, 0x00A1, - 0xA2AF, 0x00BF, 0xA2B0, 0x02D0, 0xA2B1, 0x222E, 0xA2B2, 0x2211, - 0xA2B3, 0x220F, 0xA2B4, 0x00A4, 0xA2B5, 0x2109, 0xA2B6, 0x2030, - 0xA2B7, 0x25C1, 0xA2B8, 0x25C0, 0xA2B9, 0x25B7, 0xA2BA, 0x25B6, - 0xA2BB, 0x2664, 0xA2BC, 0x2660, 0xA2BD, 0x2661, 0xA2BE, 0x2665, - 0xA2BF, 0x2667, 0xA2C0, 0x2663, 0xA2C1, 0x2299, 0xA2C2, 0x25C8, - 0xA2C3, 0x25A3, 0xA2C4, 0x25D0, 0xA2C5, 0x25D1, 0xA2C6, 0x2592, - 0xA2C7, 0x25A4, 0xA2C8, 0x25A5, 0xA2C9, 0x25A8, 0xA2CA, 0x25A7, - 0xA2CB, 0x25A6, 0xA2CC, 0x25A9, 0xA2CD, 0x2668, 0xA2CE, 0x260F, - 0xA2CF, 0x260E, 0xA2D0, 0x261C, 0xA2D1, 0x261E, 0xA2D2, 0x00B6, - 0xA2D3, 0x2020, 0xA2D4, 0x2021, 0xA2D5, 0x2195, 0xA2D6, 0x2197, - 0xA2D7, 0x2199, 0xA2D8, 0x2196, 0xA2D9, 0x2198, 0xA2DA, 0x266D, - 0xA2DB, 0x2669, 0xA2DC, 0x266A, 0xA2DD, 0x266C, 0xA2DE, 0x327F, - 0xA2DF, 0x321C, 0xA2E0, 0x2116, 0xA2E1, 0x33C7, 0xA2E2, 0x2122, - 0xA2E3, 0x33C2, 0xA2E4, 0x33D8, 0xA2E5, 0x2121, 0xA2E6, 0x20AC, - 0xA2E7, 0x00AE, 0xA341, 0xC971, 0xA342, 0xC972, 0xA343, 0xC973, - 0xA344, 0xC975, 0xA345, 0xC976, 0xA346, 0xC977, 0xA347, 0xC978, - 0xA348, 0xC979, 0xA349, 0xC97A, 0xA34A, 0xC97B, 0xA34B, 0xC97D, - 0xA34C, 0xC97E, 0xA34D, 0xC97F, 0xA34E, 0xC980, 0xA34F, 0xC981, - 0xA350, 0xC982, 0xA351, 0xC983, 0xA352, 0xC984, 0xA353, 0xC985, - 0xA354, 0xC986, 0xA355, 0xC987, 0xA356, 0xC98A, 0xA357, 0xC98B, - 0xA358, 0xC98D, 0xA359, 0xC98E, 0xA35A, 0xC98F, 0xA361, 0xC991, - 0xA362, 0xC992, 0xA363, 0xC993, 0xA364, 0xC994, 0xA365, 0xC995, - 0xA366, 0xC996, 0xA367, 0xC997, 0xA368, 0xC99A, 0xA369, 0xC99C, - 0xA36A, 0xC99E, 0xA36B, 0xC99F, 0xA36C, 0xC9A0, 0xA36D, 0xC9A1, - 0xA36E, 0xC9A2, 0xA36F, 0xC9A3, 0xA370, 0xC9A4, 0xA371, 0xC9A5, - 0xA372, 0xC9A6, 0xA373, 0xC9A7, 0xA374, 0xC9A8, 0xA375, 0xC9A9, - 0xA376, 0xC9AA, 0xA377, 0xC9AB, 0xA378, 0xC9AC, 0xA379, 0xC9AD, - 0xA37A, 0xC9AE, 0xA381, 0xC9AF, 0xA382, 0xC9B0, 0xA383, 0xC9B1, - 0xA384, 0xC9B2, 0xA385, 0xC9B3, 0xA386, 0xC9B4, 0xA387, 0xC9B5, - 0xA388, 0xC9B6, 0xA389, 0xC9B7, 0xA38A, 0xC9B8, 0xA38B, 0xC9B9, - 0xA38C, 0xC9BA, 0xA38D, 0xC9BB, 0xA38E, 0xC9BC, 0xA38F, 0xC9BD, - 0xA390, 0xC9BE, 0xA391, 0xC9BF, 0xA392, 0xC9C2, 0xA393, 0xC9C3, - 0xA394, 0xC9C5, 0xA395, 0xC9C6, 0xA396, 0xC9C9, 0xA397, 0xC9CB, - 0xA398, 0xC9CC, 0xA399, 0xC9CD, 0xA39A, 0xC9CE, 0xA39B, 0xC9CF, - 0xA39C, 0xC9D2, 0xA39D, 0xC9D4, 0xA39E, 0xC9D7, 0xA39F, 0xC9D8, - 0xA3A0, 0xC9DB, 0xA3A1, 0xFF01, 0xA3A2, 0xFF02, 0xA3A3, 0xFF03, - 0xA3A4, 0xFF04, 0xA3A5, 0xFF05, 0xA3A6, 0xFF06, 0xA3A7, 0xFF07, - 0xA3A8, 0xFF08, 0xA3A9, 0xFF09, 0xA3AA, 0xFF0A, 0xA3AB, 0xFF0B, - 0xA3AC, 0xFF0C, 0xA3AD, 0xFF0D, 0xA3AE, 0xFF0E, 0xA3AF, 0xFF0F, - 0xA3B0, 0xFF10, 0xA3B1, 0xFF11, 0xA3B2, 0xFF12, 0xA3B3, 0xFF13, - 0xA3B4, 0xFF14, 0xA3B5, 0xFF15, 0xA3B6, 0xFF16, 0xA3B7, 0xFF17, - 0xA3B8, 0xFF18, 0xA3B9, 0xFF19, 0xA3BA, 0xFF1A, 0xA3BB, 0xFF1B, - 0xA3BC, 0xFF1C, 0xA3BD, 0xFF1D, 0xA3BE, 0xFF1E, 0xA3BF, 0xFF1F, - 0xA3C0, 0xFF20, 0xA3C1, 0xFF21, 0xA3C2, 0xFF22, 0xA3C3, 0xFF23, - 0xA3C4, 0xFF24, 0xA3C5, 0xFF25, 0xA3C6, 0xFF26, 0xA3C7, 0xFF27, - 0xA3C8, 0xFF28, 0xA3C9, 0xFF29, 0xA3CA, 0xFF2A, 0xA3CB, 0xFF2B, - 0xA3CC, 0xFF2C, 0xA3CD, 0xFF2D, 0xA3CE, 0xFF2E, 0xA3CF, 0xFF2F, - 0xA3D0, 0xFF30, 0xA3D1, 0xFF31, 0xA3D2, 0xFF32, 0xA3D3, 0xFF33, - 0xA3D4, 0xFF34, 0xA3D5, 0xFF35, 0xA3D6, 0xFF36, 0xA3D7, 0xFF37, - 0xA3D8, 0xFF38, 0xA3D9, 0xFF39, 0xA3DA, 0xFF3A, 0xA3DB, 0xFF3B, - 0xA3DC, 0xFFE6, 0xA3DD, 0xFF3D, 0xA3DE, 0xFF3E, 0xA3DF, 0xFF3F, - 0xA3E0, 0xFF40, 0xA3E1, 0xFF41, 0xA3E2, 0xFF42, 0xA3E3, 0xFF43, - 0xA3E4, 0xFF44, 0xA3E5, 0xFF45, 0xA3E6, 0xFF46, 0xA3E7, 0xFF47, - 0xA3E8, 0xFF48, 0xA3E9, 0xFF49, 0xA3EA, 0xFF4A, 0xA3EB, 0xFF4B, - 0xA3EC, 0xFF4C, 0xA3ED, 0xFF4D, 0xA3EE, 0xFF4E, 0xA3EF, 0xFF4F, - 0xA3F0, 0xFF50, 0xA3F1, 0xFF51, 0xA3F2, 0xFF52, 0xA3F3, 0xFF53, - 0xA3F4, 0xFF54, 0xA3F5, 0xFF55, 0xA3F6, 0xFF56, 0xA3F7, 0xFF57, - 0xA3F8, 0xFF58, 0xA3F9, 0xFF59, 0xA3FA, 0xFF5A, 0xA3FB, 0xFF5B, - 0xA3FC, 0xFF5C, 0xA3FD, 0xFF5D, 0xA3FE, 0xFFE3, 0xA441, 0xC9DE, - 0xA442, 0xC9DF, 0xA443, 0xC9E1, 0xA444, 0xC9E3, 0xA445, 0xC9E5, - 0xA446, 0xC9E6, 0xA447, 0xC9E8, 0xA448, 0xC9E9, 0xA449, 0xC9EA, - 0xA44A, 0xC9EB, 0xA44B, 0xC9EE, 0xA44C, 0xC9F2, 0xA44D, 0xC9F3, - 0xA44E, 0xC9F4, 0xA44F, 0xC9F5, 0xA450, 0xC9F6, 0xA451, 0xC9F7, - 0xA452, 0xC9FA, 0xA453, 0xC9FB, 0xA454, 0xC9FD, 0xA455, 0xC9FE, - 0xA456, 0xC9FF, 0xA457, 0xCA01, 0xA458, 0xCA02, 0xA459, 0xCA03, - 0xA45A, 0xCA04, 0xA461, 0xCA05, 0xA462, 0xCA06, 0xA463, 0xCA07, - 0xA464, 0xCA0A, 0xA465, 0xCA0E, 0xA466, 0xCA0F, 0xA467, 0xCA10, - 0xA468, 0xCA11, 0xA469, 0xCA12, 0xA46A, 0xCA13, 0xA46B, 0xCA15, - 0xA46C, 0xCA16, 0xA46D, 0xCA17, 0xA46E, 0xCA19, 0xA46F, 0xCA1A, - 0xA470, 0xCA1B, 0xA471, 0xCA1C, 0xA472, 0xCA1D, 0xA473, 0xCA1E, - 0xA474, 0xCA1F, 0xA475, 0xCA20, 0xA476, 0xCA21, 0xA477, 0xCA22, - 0xA478, 0xCA23, 0xA479, 0xCA24, 0xA47A, 0xCA25, 0xA481, 0xCA26, - 0xA482, 0xCA27, 0xA483, 0xCA28, 0xA484, 0xCA2A, 0xA485, 0xCA2B, - 0xA486, 0xCA2C, 0xA487, 0xCA2D, 0xA488, 0xCA2E, 0xA489, 0xCA2F, - 0xA48A, 0xCA30, 0xA48B, 0xCA31, 0xA48C, 0xCA32, 0xA48D, 0xCA33, - 0xA48E, 0xCA34, 0xA48F, 0xCA35, 0xA490, 0xCA36, 0xA491, 0xCA37, - 0xA492, 0xCA38, 0xA493, 0xCA39, 0xA494, 0xCA3A, 0xA495, 0xCA3B, - 0xA496, 0xCA3C, 0xA497, 0xCA3D, 0xA498, 0xCA3E, 0xA499, 0xCA3F, - 0xA49A, 0xCA40, 0xA49B, 0xCA41, 0xA49C, 0xCA42, 0xA49D, 0xCA43, - 0xA49E, 0xCA44, 0xA49F, 0xCA45, 0xA4A0, 0xCA46, 0xA4A1, 0x3131, - 0xA4A2, 0x3132, 0xA4A3, 0x3133, 0xA4A4, 0x3134, 0xA4A5, 0x3135, - 0xA4A6, 0x3136, 0xA4A7, 0x3137, 0xA4A8, 0x3138, 0xA4A9, 0x3139, - 0xA4AA, 0x313A, 0xA4AB, 0x313B, 0xA4AC, 0x313C, 0xA4AD, 0x313D, - 0xA4AE, 0x313E, 0xA4AF, 0x313F, 0xA4B0, 0x3140, 0xA4B1, 0x3141, - 0xA4B2, 0x3142, 0xA4B3, 0x3143, 0xA4B4, 0x3144, 0xA4B5, 0x3145, - 0xA4B6, 0x3146, 0xA4B7, 0x3147, 0xA4B8, 0x3148, 0xA4B9, 0x3149, - 0xA4BA, 0x314A, 0xA4BB, 0x314B, 0xA4BC, 0x314C, 0xA4BD, 0x314D, - 0xA4BE, 0x314E, 0xA4BF, 0x314F, 0xA4C0, 0x3150, 0xA4C1, 0x3151, - 0xA4C2, 0x3152, 0xA4C3, 0x3153, 0xA4C4, 0x3154, 0xA4C5, 0x3155, - 0xA4C6, 0x3156, 0xA4C7, 0x3157, 0xA4C8, 0x3158, 0xA4C9, 0x3159, - 0xA4CA, 0x315A, 0xA4CB, 0x315B, 0xA4CC, 0x315C, 0xA4CD, 0x315D, - 0xA4CE, 0x315E, 0xA4CF, 0x315F, 0xA4D0, 0x3160, 0xA4D1, 0x3161, - 0xA4D2, 0x3162, 0xA4D3, 0x3163, 0xA4D4, 0x3164, 0xA4D5, 0x3165, - 0xA4D6, 0x3166, 0xA4D7, 0x3167, 0xA4D8, 0x3168, 0xA4D9, 0x3169, - 0xA4DA, 0x316A, 0xA4DB, 0x316B, 0xA4DC, 0x316C, 0xA4DD, 0x316D, - 0xA4DE, 0x316E, 0xA4DF, 0x316F, 0xA4E0, 0x3170, 0xA4E1, 0x3171, - 0xA4E2, 0x3172, 0xA4E3, 0x3173, 0xA4E4, 0x3174, 0xA4E5, 0x3175, - 0xA4E6, 0x3176, 0xA4E7, 0x3177, 0xA4E8, 0x3178, 0xA4E9, 0x3179, - 0xA4EA, 0x317A, 0xA4EB, 0x317B, 0xA4EC, 0x317C, 0xA4ED, 0x317D, - 0xA4EE, 0x317E, 0xA4EF, 0x317F, 0xA4F0, 0x3180, 0xA4F1, 0x3181, - 0xA4F2, 0x3182, 0xA4F3, 0x3183, 0xA4F4, 0x3184, 0xA4F5, 0x3185, - 0xA4F6, 0x3186, 0xA4F7, 0x3187, 0xA4F8, 0x3188, 0xA4F9, 0x3189, - 0xA4FA, 0x318A, 0xA4FB, 0x318B, 0xA4FC, 0x318C, 0xA4FD, 0x318D, - 0xA4FE, 0x318E, 0xA541, 0xCA47, 0xA542, 0xCA48, 0xA543, 0xCA49, - 0xA544, 0xCA4A, 0xA545, 0xCA4B, 0xA546, 0xCA4E, 0xA547, 0xCA4F, - 0xA548, 0xCA51, 0xA549, 0xCA52, 0xA54A, 0xCA53, 0xA54B, 0xCA55, - 0xA54C, 0xCA56, 0xA54D, 0xCA57, 0xA54E, 0xCA58, 0xA54F, 0xCA59, - 0xA550, 0xCA5A, 0xA551, 0xCA5B, 0xA552, 0xCA5E, 0xA553, 0xCA62, - 0xA554, 0xCA63, 0xA555, 0xCA64, 0xA556, 0xCA65, 0xA557, 0xCA66, - 0xA558, 0xCA67, 0xA559, 0xCA69, 0xA55A, 0xCA6A, 0xA561, 0xCA6B, - 0xA562, 0xCA6C, 0xA563, 0xCA6D, 0xA564, 0xCA6E, 0xA565, 0xCA6F, - 0xA566, 0xCA70, 0xA567, 0xCA71, 0xA568, 0xCA72, 0xA569, 0xCA73, - 0xA56A, 0xCA74, 0xA56B, 0xCA75, 0xA56C, 0xCA76, 0xA56D, 0xCA77, - 0xA56E, 0xCA78, 0xA56F, 0xCA79, 0xA570, 0xCA7A, 0xA571, 0xCA7B, - 0xA572, 0xCA7C, 0xA573, 0xCA7E, 0xA574, 0xCA7F, 0xA575, 0xCA80, - 0xA576, 0xCA81, 0xA577, 0xCA82, 0xA578, 0xCA83, 0xA579, 0xCA85, - 0xA57A, 0xCA86, 0xA581, 0xCA87, 0xA582, 0xCA88, 0xA583, 0xCA89, - 0xA584, 0xCA8A, 0xA585, 0xCA8B, 0xA586, 0xCA8C, 0xA587, 0xCA8D, - 0xA588, 0xCA8E, 0xA589, 0xCA8F, 0xA58A, 0xCA90, 0xA58B, 0xCA91, - 0xA58C, 0xCA92, 0xA58D, 0xCA93, 0xA58E, 0xCA94, 0xA58F, 0xCA95, - 0xA590, 0xCA96, 0xA591, 0xCA97, 0xA592, 0xCA99, 0xA593, 0xCA9A, - 0xA594, 0xCA9B, 0xA595, 0xCA9C, 0xA596, 0xCA9D, 0xA597, 0xCA9E, - 0xA598, 0xCA9F, 0xA599, 0xCAA0, 0xA59A, 0xCAA1, 0xA59B, 0xCAA2, - 0xA59C, 0xCAA3, 0xA59D, 0xCAA4, 0xA59E, 0xCAA5, 0xA59F, 0xCAA6, - 0xA5A0, 0xCAA7, 0xA5A1, 0x2170, 0xA5A2, 0x2171, 0xA5A3, 0x2172, - 0xA5A4, 0x2173, 0xA5A5, 0x2174, 0xA5A6, 0x2175, 0xA5A7, 0x2176, - 0xA5A8, 0x2177, 0xA5A9, 0x2178, 0xA5AA, 0x2179, 0xA5B0, 0x2160, - 0xA5B1, 0x2161, 0xA5B2, 0x2162, 0xA5B3, 0x2163, 0xA5B4, 0x2164, - 0xA5B5, 0x2165, 0xA5B6, 0x2166, 0xA5B7, 0x2167, 0xA5B8, 0x2168, - 0xA5B9, 0x2169, 0xA5C1, 0x0391, 0xA5C2, 0x0392, 0xA5C3, 0x0393, - 0xA5C4, 0x0394, 0xA5C5, 0x0395, 0xA5C6, 0x0396, 0xA5C7, 0x0397, - 0xA5C8, 0x0398, 0xA5C9, 0x0399, 0xA5CA, 0x039A, 0xA5CB, 0x039B, - 0xA5CC, 0x039C, 0xA5CD, 0x039D, 0xA5CE, 0x039E, 0xA5CF, 0x039F, - 0xA5D0, 0x03A0, 0xA5D1, 0x03A1, 0xA5D2, 0x03A3, 0xA5D3, 0x03A4, - 0xA5D4, 0x03A5, 0xA5D5, 0x03A6, 0xA5D6, 0x03A7, 0xA5D7, 0x03A8, - 0xA5D8, 0x03A9, 0xA5E1, 0x03B1, 0xA5E2, 0x03B2, 0xA5E3, 0x03B3, - 0xA5E4, 0x03B4, 0xA5E5, 0x03B5, 0xA5E6, 0x03B6, 0xA5E7, 0x03B7, - 0xA5E8, 0x03B8, 0xA5E9, 0x03B9, 0xA5EA, 0x03BA, 0xA5EB, 0x03BB, - 0xA5EC, 0x03BC, 0xA5ED, 0x03BD, 0xA5EE, 0x03BE, 0xA5EF, 0x03BF, - 0xA5F0, 0x03C0, 0xA5F1, 0x03C1, 0xA5F2, 0x03C3, 0xA5F3, 0x03C4, - 0xA5F4, 0x03C5, 0xA5F5, 0x03C6, 0xA5F6, 0x03C7, 0xA5F7, 0x03C8, - 0xA5F8, 0x03C9, 0xA641, 0xCAA8, 0xA642, 0xCAA9, 0xA643, 0xCAAA, - 0xA644, 0xCAAB, 0xA645, 0xCAAC, 0xA646, 0xCAAD, 0xA647, 0xCAAE, - 0xA648, 0xCAAF, 0xA649, 0xCAB0, 0xA64A, 0xCAB1, 0xA64B, 0xCAB2, - 0xA64C, 0xCAB3, 0xA64D, 0xCAB4, 0xA64E, 0xCAB5, 0xA64F, 0xCAB6, - 0xA650, 0xCAB7, 0xA651, 0xCAB8, 0xA652, 0xCAB9, 0xA653, 0xCABA, - 0xA654, 0xCABB, 0xA655, 0xCABE, 0xA656, 0xCABF, 0xA657, 0xCAC1, - 0xA658, 0xCAC2, 0xA659, 0xCAC3, 0xA65A, 0xCAC5, 0xA661, 0xCAC6, - 0xA662, 0xCAC7, 0xA663, 0xCAC8, 0xA664, 0xCAC9, 0xA665, 0xCACA, - 0xA666, 0xCACB, 0xA667, 0xCACE, 0xA668, 0xCAD0, 0xA669, 0xCAD2, - 0xA66A, 0xCAD4, 0xA66B, 0xCAD5, 0xA66C, 0xCAD6, 0xA66D, 0xCAD7, - 0xA66E, 0xCADA, 0xA66F, 0xCADB, 0xA670, 0xCADC, 0xA671, 0xCADD, - 0xA672, 0xCADE, 0xA673, 0xCADF, 0xA674, 0xCAE1, 0xA675, 0xCAE2, - 0xA676, 0xCAE3, 0xA677, 0xCAE4, 0xA678, 0xCAE5, 0xA679, 0xCAE6, - 0xA67A, 0xCAE7, 0xA681, 0xCAE8, 0xA682, 0xCAE9, 0xA683, 0xCAEA, - 0xA684, 0xCAEB, 0xA685, 0xCAED, 0xA686, 0xCAEE, 0xA687, 0xCAEF, - 0xA688, 0xCAF0, 0xA689, 0xCAF1, 0xA68A, 0xCAF2, 0xA68B, 0xCAF3, - 0xA68C, 0xCAF5, 0xA68D, 0xCAF6, 0xA68E, 0xCAF7, 0xA68F, 0xCAF8, - 0xA690, 0xCAF9, 0xA691, 0xCAFA, 0xA692, 0xCAFB, 0xA693, 0xCAFC, - 0xA694, 0xCAFD, 0xA695, 0xCAFE, 0xA696, 0xCAFF, 0xA697, 0xCB00, - 0xA698, 0xCB01, 0xA699, 0xCB02, 0xA69A, 0xCB03, 0xA69B, 0xCB04, - 0xA69C, 0xCB05, 0xA69D, 0xCB06, 0xA69E, 0xCB07, 0xA69F, 0xCB09, - 0xA6A0, 0xCB0A, 0xA6A1, 0x2500, 0xA6A2, 0x2502, 0xA6A3, 0x250C, - 0xA6A4, 0x2510, 0xA6A5, 0x2518, 0xA6A6, 0x2514, 0xA6A7, 0x251C, - 0xA6A8, 0x252C, 0xA6A9, 0x2524, 0xA6AA, 0x2534, 0xA6AB, 0x253C, - 0xA6AC, 0x2501, 0xA6AD, 0x2503, 0xA6AE, 0x250F, 0xA6AF, 0x2513, - 0xA6B0, 0x251B, 0xA6B1, 0x2517, 0xA6B2, 0x2523, 0xA6B3, 0x2533, - 0xA6B4, 0x252B, 0xA6B5, 0x253B, 0xA6B6, 0x254B, 0xA6B7, 0x2520, - 0xA6B8, 0x252F, 0xA6B9, 0x2528, 0xA6BA, 0x2537, 0xA6BB, 0x253F, - 0xA6BC, 0x251D, 0xA6BD, 0x2530, 0xA6BE, 0x2525, 0xA6BF, 0x2538, - 0xA6C0, 0x2542, 0xA6C1, 0x2512, 0xA6C2, 0x2511, 0xA6C3, 0x251A, - 0xA6C4, 0x2519, 0xA6C5, 0x2516, 0xA6C6, 0x2515, 0xA6C7, 0x250E, - 0xA6C8, 0x250D, 0xA6C9, 0x251E, 0xA6CA, 0x251F, 0xA6CB, 0x2521, - 0xA6CC, 0x2522, 0xA6CD, 0x2526, 0xA6CE, 0x2527, 0xA6CF, 0x2529, - 0xA6D0, 0x252A, 0xA6D1, 0x252D, 0xA6D2, 0x252E, 0xA6D3, 0x2531, - 0xA6D4, 0x2532, 0xA6D5, 0x2535, 0xA6D6, 0x2536, 0xA6D7, 0x2539, - 0xA6D8, 0x253A, 0xA6D9, 0x253D, 0xA6DA, 0x253E, 0xA6DB, 0x2540, - 0xA6DC, 0x2541, 0xA6DD, 0x2543, 0xA6DE, 0x2544, 0xA6DF, 0x2545, - 0xA6E0, 0x2546, 0xA6E1, 0x2547, 0xA6E2, 0x2548, 0xA6E3, 0x2549, - 0xA6E4, 0x254A, 0xA741, 0xCB0B, 0xA742, 0xCB0C, 0xA743, 0xCB0D, - 0xA744, 0xCB0E, 0xA745, 0xCB0F, 0xA746, 0xCB11, 0xA747, 0xCB12, - 0xA748, 0xCB13, 0xA749, 0xCB15, 0xA74A, 0xCB16, 0xA74B, 0xCB17, - 0xA74C, 0xCB19, 0xA74D, 0xCB1A, 0xA74E, 0xCB1B, 0xA74F, 0xCB1C, - 0xA750, 0xCB1D, 0xA751, 0xCB1E, 0xA752, 0xCB1F, 0xA753, 0xCB22, - 0xA754, 0xCB23, 0xA755, 0xCB24, 0xA756, 0xCB25, 0xA757, 0xCB26, - 0xA758, 0xCB27, 0xA759, 0xCB28, 0xA75A, 0xCB29, 0xA761, 0xCB2A, - 0xA762, 0xCB2B, 0xA763, 0xCB2C, 0xA764, 0xCB2D, 0xA765, 0xCB2E, - 0xA766, 0xCB2F, 0xA767, 0xCB30, 0xA768, 0xCB31, 0xA769, 0xCB32, - 0xA76A, 0xCB33, 0xA76B, 0xCB34, 0xA76C, 0xCB35, 0xA76D, 0xCB36, - 0xA76E, 0xCB37, 0xA76F, 0xCB38, 0xA770, 0xCB39, 0xA771, 0xCB3A, - 0xA772, 0xCB3B, 0xA773, 0xCB3C, 0xA774, 0xCB3D, 0xA775, 0xCB3E, - 0xA776, 0xCB3F, 0xA777, 0xCB40, 0xA778, 0xCB42, 0xA779, 0xCB43, - 0xA77A, 0xCB44, 0xA781, 0xCB45, 0xA782, 0xCB46, 0xA783, 0xCB47, - 0xA784, 0xCB4A, 0xA785, 0xCB4B, 0xA786, 0xCB4D, 0xA787, 0xCB4E, - 0xA788, 0xCB4F, 0xA789, 0xCB51, 0xA78A, 0xCB52, 0xA78B, 0xCB53, - 0xA78C, 0xCB54, 0xA78D, 0xCB55, 0xA78E, 0xCB56, 0xA78F, 0xCB57, - 0xA790, 0xCB5A, 0xA791, 0xCB5B, 0xA792, 0xCB5C, 0xA793, 0xCB5E, - 0xA794, 0xCB5F, 0xA795, 0xCB60, 0xA796, 0xCB61, 0xA797, 0xCB62, - 0xA798, 0xCB63, 0xA799, 0xCB65, 0xA79A, 0xCB66, 0xA79B, 0xCB67, - 0xA79C, 0xCB68, 0xA79D, 0xCB69, 0xA79E, 0xCB6A, 0xA79F, 0xCB6B, - 0xA7A0, 0xCB6C, 0xA7A1, 0x3395, 0xA7A2, 0x3396, 0xA7A3, 0x3397, - 0xA7A4, 0x2113, 0xA7A5, 0x3398, 0xA7A6, 0x33C4, 0xA7A7, 0x33A3, - 0xA7A8, 0x33A4, 0xA7A9, 0x33A5, 0xA7AA, 0x33A6, 0xA7AB, 0x3399, - 0xA7AC, 0x339A, 0xA7AD, 0x339B, 0xA7AE, 0x339C, 0xA7AF, 0x339D, - 0xA7B0, 0x339E, 0xA7B1, 0x339F, 0xA7B2, 0x33A0, 0xA7B3, 0x33A1, - 0xA7B4, 0x33A2, 0xA7B5, 0x33CA, 0xA7B6, 0x338D, 0xA7B7, 0x338E, - 0xA7B8, 0x338F, 0xA7B9, 0x33CF, 0xA7BA, 0x3388, 0xA7BB, 0x3389, - 0xA7BC, 0x33C8, 0xA7BD, 0x33A7, 0xA7BE, 0x33A8, 0xA7BF, 0x33B0, - 0xA7C0, 0x33B1, 0xA7C1, 0x33B2, 0xA7C2, 0x33B3, 0xA7C3, 0x33B4, - 0xA7C4, 0x33B5, 0xA7C5, 0x33B6, 0xA7C6, 0x33B7, 0xA7C7, 0x33B8, - 0xA7C8, 0x33B9, 0xA7C9, 0x3380, 0xA7CA, 0x3381, 0xA7CB, 0x3382, - 0xA7CC, 0x3383, 0xA7CD, 0x3384, 0xA7CE, 0x33BA, 0xA7CF, 0x33BB, - 0xA7D0, 0x33BC, 0xA7D1, 0x33BD, 0xA7D2, 0x33BE, 0xA7D3, 0x33BF, - 0xA7D4, 0x3390, 0xA7D5, 0x3391, 0xA7D6, 0x3392, 0xA7D7, 0x3393, - 0xA7D8, 0x3394, 0xA7D9, 0x2126, 0xA7DA, 0x33C0, 0xA7DB, 0x33C1, - 0xA7DC, 0x338A, 0xA7DD, 0x338B, 0xA7DE, 0x338C, 0xA7DF, 0x33D6, - 0xA7E0, 0x33C5, 0xA7E1, 0x33AD, 0xA7E2, 0x33AE, 0xA7E3, 0x33AF, - 0xA7E4, 0x33DB, 0xA7E5, 0x33A9, 0xA7E6, 0x33AA, 0xA7E7, 0x33AB, - 0xA7E8, 0x33AC, 0xA7E9, 0x33DD, 0xA7EA, 0x33D0, 0xA7EB, 0x33D3, - 0xA7EC, 0x33C3, 0xA7ED, 0x33C9, 0xA7EE, 0x33DC, 0xA7EF, 0x33C6, - 0xA841, 0xCB6D, 0xA842, 0xCB6E, 0xA843, 0xCB6F, 0xA844, 0xCB70, - 0xA845, 0xCB71, 0xA846, 0xCB72, 0xA847, 0xCB73, 0xA848, 0xCB74, - 0xA849, 0xCB75, 0xA84A, 0xCB76, 0xA84B, 0xCB77, 0xA84C, 0xCB7A, - 0xA84D, 0xCB7B, 0xA84E, 0xCB7C, 0xA84F, 0xCB7D, 0xA850, 0xCB7E, - 0xA851, 0xCB7F, 0xA852, 0xCB80, 0xA853, 0xCB81, 0xA854, 0xCB82, - 0xA855, 0xCB83, 0xA856, 0xCB84, 0xA857, 0xCB85, 0xA858, 0xCB86, - 0xA859, 0xCB87, 0xA85A, 0xCB88, 0xA861, 0xCB89, 0xA862, 0xCB8A, - 0xA863, 0xCB8B, 0xA864, 0xCB8C, 0xA865, 0xCB8D, 0xA866, 0xCB8E, - 0xA867, 0xCB8F, 0xA868, 0xCB90, 0xA869, 0xCB91, 0xA86A, 0xCB92, - 0xA86B, 0xCB93, 0xA86C, 0xCB94, 0xA86D, 0xCB95, 0xA86E, 0xCB96, - 0xA86F, 0xCB97, 0xA870, 0xCB98, 0xA871, 0xCB99, 0xA872, 0xCB9A, - 0xA873, 0xCB9B, 0xA874, 0xCB9D, 0xA875, 0xCB9E, 0xA876, 0xCB9F, - 0xA877, 0xCBA0, 0xA878, 0xCBA1, 0xA879, 0xCBA2, 0xA87A, 0xCBA3, - 0xA881, 0xCBA4, 0xA882, 0xCBA5, 0xA883, 0xCBA6, 0xA884, 0xCBA7, - 0xA885, 0xCBA8, 0xA886, 0xCBA9, 0xA887, 0xCBAA, 0xA888, 0xCBAB, - 0xA889, 0xCBAC, 0xA88A, 0xCBAD, 0xA88B, 0xCBAE, 0xA88C, 0xCBAF, - 0xA88D, 0xCBB0, 0xA88E, 0xCBB1, 0xA88F, 0xCBB2, 0xA890, 0xCBB3, - 0xA891, 0xCBB4, 0xA892, 0xCBB5, 0xA893, 0xCBB6, 0xA894, 0xCBB7, - 0xA895, 0xCBB9, 0xA896, 0xCBBA, 0xA897, 0xCBBB, 0xA898, 0xCBBC, - 0xA899, 0xCBBD, 0xA89A, 0xCBBE, 0xA89B, 0xCBBF, 0xA89C, 0xCBC0, - 0xA89D, 0xCBC1, 0xA89E, 0xCBC2, 0xA89F, 0xCBC3, 0xA8A0, 0xCBC4, - 0xA8A1, 0x00C6, 0xA8A2, 0x00D0, 0xA8A3, 0x00AA, 0xA8A4, 0x0126, - 0xA8A6, 0x0132, 0xA8A8, 0x013F, 0xA8A9, 0x0141, 0xA8AA, 0x00D8, - 0xA8AB, 0x0152, 0xA8AC, 0x00BA, 0xA8AD, 0x00DE, 0xA8AE, 0x0166, - 0xA8AF, 0x014A, 0xA8B1, 0x3260, 0xA8B2, 0x3261, 0xA8B3, 0x3262, - 0xA8B4, 0x3263, 0xA8B5, 0x3264, 0xA8B6, 0x3265, 0xA8B7, 0x3266, - 0xA8B8, 0x3267, 0xA8B9, 0x3268, 0xA8BA, 0x3269, 0xA8BB, 0x326A, - 0xA8BC, 0x326B, 0xA8BD, 0x326C, 0xA8BE, 0x326D, 0xA8BF, 0x326E, - 0xA8C0, 0x326F, 0xA8C1, 0x3270, 0xA8C2, 0x3271, 0xA8C3, 0x3272, - 0xA8C4, 0x3273, 0xA8C5, 0x3274, 0xA8C6, 0x3275, 0xA8C7, 0x3276, - 0xA8C8, 0x3277, 0xA8C9, 0x3278, 0xA8CA, 0x3279, 0xA8CB, 0x327A, - 0xA8CC, 0x327B, 0xA8CD, 0x24D0, 0xA8CE, 0x24D1, 0xA8CF, 0x24D2, - 0xA8D0, 0x24D3, 0xA8D1, 0x24D4, 0xA8D2, 0x24D5, 0xA8D3, 0x24D6, - 0xA8D4, 0x24D7, 0xA8D5, 0x24D8, 0xA8D6, 0x24D9, 0xA8D7, 0x24DA, - 0xA8D8, 0x24DB, 0xA8D9, 0x24DC, 0xA8DA, 0x24DD, 0xA8DB, 0x24DE, - 0xA8DC, 0x24DF, 0xA8DD, 0x24E0, 0xA8DE, 0x24E1, 0xA8DF, 0x24E2, - 0xA8E0, 0x24E3, 0xA8E1, 0x24E4, 0xA8E2, 0x24E5, 0xA8E3, 0x24E6, - 0xA8E4, 0x24E7, 0xA8E5, 0x24E8, 0xA8E6, 0x24E9, 0xA8E7, 0x2460, - 0xA8E8, 0x2461, 0xA8E9, 0x2462, 0xA8EA, 0x2463, 0xA8EB, 0x2464, - 0xA8EC, 0x2465, 0xA8ED, 0x2466, 0xA8EE, 0x2467, 0xA8EF, 0x2468, - 0xA8F0, 0x2469, 0xA8F1, 0x246A, 0xA8F2, 0x246B, 0xA8F3, 0x246C, - 0xA8F4, 0x246D, 0xA8F5, 0x246E, 0xA8F6, 0x00BD, 0xA8F7, 0x2153, - 0xA8F8, 0x2154, 0xA8F9, 0x00BC, 0xA8FA, 0x00BE, 0xA8FB, 0x215B, - 0xA8FC, 0x215C, 0xA8FD, 0x215D, 0xA8FE, 0x215E, 0xA941, 0xCBC5, - 0xA942, 0xCBC6, 0xA943, 0xCBC7, 0xA944, 0xCBC8, 0xA945, 0xCBC9, - 0xA946, 0xCBCA, 0xA947, 0xCBCB, 0xA948, 0xCBCC, 0xA949, 0xCBCD, - 0xA94A, 0xCBCE, 0xA94B, 0xCBCF, 0xA94C, 0xCBD0, 0xA94D, 0xCBD1, - 0xA94E, 0xCBD2, 0xA94F, 0xCBD3, 0xA950, 0xCBD5, 0xA951, 0xCBD6, - 0xA952, 0xCBD7, 0xA953, 0xCBD8, 0xA954, 0xCBD9, 0xA955, 0xCBDA, - 0xA956, 0xCBDB, 0xA957, 0xCBDC, 0xA958, 0xCBDD, 0xA959, 0xCBDE, - 0xA95A, 0xCBDF, 0xA961, 0xCBE0, 0xA962, 0xCBE1, 0xA963, 0xCBE2, - 0xA964, 0xCBE3, 0xA965, 0xCBE5, 0xA966, 0xCBE6, 0xA967, 0xCBE8, - 0xA968, 0xCBEA, 0xA969, 0xCBEB, 0xA96A, 0xCBEC, 0xA96B, 0xCBED, - 0xA96C, 0xCBEE, 0xA96D, 0xCBEF, 0xA96E, 0xCBF0, 0xA96F, 0xCBF1, - 0xA970, 0xCBF2, 0xA971, 0xCBF3, 0xA972, 0xCBF4, 0xA973, 0xCBF5, - 0xA974, 0xCBF6, 0xA975, 0xCBF7, 0xA976, 0xCBF8, 0xA977, 0xCBF9, - 0xA978, 0xCBFA, 0xA979, 0xCBFB, 0xA97A, 0xCBFC, 0xA981, 0xCBFD, - 0xA982, 0xCBFE, 0xA983, 0xCBFF, 0xA984, 0xCC00, 0xA985, 0xCC01, - 0xA986, 0xCC02, 0xA987, 0xCC03, 0xA988, 0xCC04, 0xA989, 0xCC05, - 0xA98A, 0xCC06, 0xA98B, 0xCC07, 0xA98C, 0xCC08, 0xA98D, 0xCC09, - 0xA98E, 0xCC0A, 0xA98F, 0xCC0B, 0xA990, 0xCC0E, 0xA991, 0xCC0F, - 0xA992, 0xCC11, 0xA993, 0xCC12, 0xA994, 0xCC13, 0xA995, 0xCC15, - 0xA996, 0xCC16, 0xA997, 0xCC17, 0xA998, 0xCC18, 0xA999, 0xCC19, - 0xA99A, 0xCC1A, 0xA99B, 0xCC1B, 0xA99C, 0xCC1E, 0xA99D, 0xCC1F, - 0xA99E, 0xCC20, 0xA99F, 0xCC23, 0xA9A0, 0xCC24, 0xA9A1, 0x00E6, - 0xA9A2, 0x0111, 0xA9A3, 0x00F0, 0xA9A4, 0x0127, 0xA9A5, 0x0131, - 0xA9A6, 0x0133, 0xA9A7, 0x0138, 0xA9A8, 0x0140, 0xA9A9, 0x0142, - 0xA9AA, 0x00F8, 0xA9AB, 0x0153, 0xA9AC, 0x00DF, 0xA9AD, 0x00FE, - 0xA9AE, 0x0167, 0xA9AF, 0x014B, 0xA9B0, 0x0149, 0xA9B1, 0x3200, - 0xA9B2, 0x3201, 0xA9B3, 0x3202, 0xA9B4, 0x3203, 0xA9B5, 0x3204, - 0xA9B6, 0x3205, 0xA9B7, 0x3206, 0xA9B8, 0x3207, 0xA9B9, 0x3208, - 0xA9BA, 0x3209, 0xA9BB, 0x320A, 0xA9BC, 0x320B, 0xA9BD, 0x320C, - 0xA9BE, 0x320D, 0xA9BF, 0x320E, 0xA9C0, 0x320F, 0xA9C1, 0x3210, - 0xA9C2, 0x3211, 0xA9C3, 0x3212, 0xA9C4, 0x3213, 0xA9C5, 0x3214, - 0xA9C6, 0x3215, 0xA9C7, 0x3216, 0xA9C8, 0x3217, 0xA9C9, 0x3218, - 0xA9CA, 0x3219, 0xA9CB, 0x321A, 0xA9CC, 0x321B, 0xA9CD, 0x249C, - 0xA9CE, 0x249D, 0xA9CF, 0x249E, 0xA9D0, 0x249F, 0xA9D1, 0x24A0, - 0xA9D2, 0x24A1, 0xA9D3, 0x24A2, 0xA9D4, 0x24A3, 0xA9D5, 0x24A4, - 0xA9D6, 0x24A5, 0xA9D7, 0x24A6, 0xA9D8, 0x24A7, 0xA9D9, 0x24A8, - 0xA9DA, 0x24A9, 0xA9DB, 0x24AA, 0xA9DC, 0x24AB, 0xA9DD, 0x24AC, - 0xA9DE, 0x24AD, 0xA9DF, 0x24AE, 0xA9E0, 0x24AF, 0xA9E1, 0x24B0, - 0xA9E2, 0x24B1, 0xA9E3, 0x24B2, 0xA9E4, 0x24B3, 0xA9E5, 0x24B4, - 0xA9E6, 0x24B5, 0xA9E7, 0x2474, 0xA9E8, 0x2475, 0xA9E9, 0x2476, - 0xA9EA, 0x2477, 0xA9EB, 0x2478, 0xA9EC, 0x2479, 0xA9ED, 0x247A, - 0xA9EE, 0x247B, 0xA9EF, 0x247C, 0xA9F0, 0x247D, 0xA9F1, 0x247E, - 0xA9F2, 0x247F, 0xA9F3, 0x2480, 0xA9F4, 0x2481, 0xA9F5, 0x2482, - 0xA9F6, 0x00B9, 0xA9F7, 0x00B2, 0xA9F8, 0x00B3, 0xA9F9, 0x2074, - 0xA9FA, 0x207F, 0xA9FB, 0x2081, 0xA9FC, 0x2082, 0xA9FD, 0x2083, - 0xA9FE, 0x2084, 0xAA41, 0xCC25, 0xAA42, 0xCC26, 0xAA43, 0xCC2A, - 0xAA44, 0xCC2B, 0xAA45, 0xCC2D, 0xAA46, 0xCC2F, 0xAA47, 0xCC31, - 0xAA48, 0xCC32, 0xAA49, 0xCC33, 0xAA4A, 0xCC34, 0xAA4B, 0xCC35, - 0xAA4C, 0xCC36, 0xAA4D, 0xCC37, 0xAA4E, 0xCC3A, 0xAA4F, 0xCC3F, - 0xAA50, 0xCC40, 0xAA51, 0xCC41, 0xAA52, 0xCC42, 0xAA53, 0xCC43, - 0xAA54, 0xCC46, 0xAA55, 0xCC47, 0xAA56, 0xCC49, 0xAA57, 0xCC4A, - 0xAA58, 0xCC4B, 0xAA59, 0xCC4D, 0xAA5A, 0xCC4E, 0xAA61, 0xCC4F, - 0xAA62, 0xCC50, 0xAA63, 0xCC51, 0xAA64, 0xCC52, 0xAA65, 0xCC53, - 0xAA66, 0xCC56, 0xAA67, 0xCC5A, 0xAA68, 0xCC5B, 0xAA69, 0xCC5C, - 0xAA6A, 0xCC5D, 0xAA6B, 0xCC5E, 0xAA6C, 0xCC5F, 0xAA6D, 0xCC61, - 0xAA6E, 0xCC62, 0xAA6F, 0xCC63, 0xAA70, 0xCC65, 0xAA71, 0xCC67, - 0xAA72, 0xCC69, 0xAA73, 0xCC6A, 0xAA74, 0xCC6B, 0xAA75, 0xCC6C, - 0xAA76, 0xCC6D, 0xAA77, 0xCC6E, 0xAA78, 0xCC6F, 0xAA79, 0xCC71, - 0xAA7A, 0xCC72, 0xAA81, 0xCC73, 0xAA82, 0xCC74, 0xAA83, 0xCC76, - 0xAA84, 0xCC77, 0xAA85, 0xCC78, 0xAA86, 0xCC79, 0xAA87, 0xCC7A, - 0xAA88, 0xCC7B, 0xAA89, 0xCC7C, 0xAA8A, 0xCC7D, 0xAA8B, 0xCC7E, - 0xAA8C, 0xCC7F, 0xAA8D, 0xCC80, 0xAA8E, 0xCC81, 0xAA8F, 0xCC82, - 0xAA90, 0xCC83, 0xAA91, 0xCC84, 0xAA92, 0xCC85, 0xAA93, 0xCC86, - 0xAA94, 0xCC87, 0xAA95, 0xCC88, 0xAA96, 0xCC89, 0xAA97, 0xCC8A, - 0xAA98, 0xCC8B, 0xAA99, 0xCC8C, 0xAA9A, 0xCC8D, 0xAA9B, 0xCC8E, - 0xAA9C, 0xCC8F, 0xAA9D, 0xCC90, 0xAA9E, 0xCC91, 0xAA9F, 0xCC92, - 0xAAA0, 0xCC93, 0xAAA1, 0x3041, 0xAAA2, 0x3042, 0xAAA3, 0x3043, - 0xAAA4, 0x3044, 0xAAA5, 0x3045, 0xAAA6, 0x3046, 0xAAA7, 0x3047, - 0xAAA8, 0x3048, 0xAAA9, 0x3049, 0xAAAA, 0x304A, 0xAAAB, 0x304B, - 0xAAAC, 0x304C, 0xAAAD, 0x304D, 0xAAAE, 0x304E, 0xAAAF, 0x304F, - 0xAAB0, 0x3050, 0xAAB1, 0x3051, 0xAAB2, 0x3052, 0xAAB3, 0x3053, - 0xAAB4, 0x3054, 0xAAB5, 0x3055, 0xAAB6, 0x3056, 0xAAB7, 0x3057, - 0xAAB8, 0x3058, 0xAAB9, 0x3059, 0xAABA, 0x305A, 0xAABB, 0x305B, - 0xAABC, 0x305C, 0xAABD, 0x305D, 0xAABE, 0x305E, 0xAABF, 0x305F, - 0xAAC0, 0x3060, 0xAAC1, 0x3061, 0xAAC2, 0x3062, 0xAAC3, 0x3063, - 0xAAC4, 0x3064, 0xAAC5, 0x3065, 0xAAC6, 0x3066, 0xAAC7, 0x3067, - 0xAAC8, 0x3068, 0xAAC9, 0x3069, 0xAACA, 0x306A, 0xAACB, 0x306B, - 0xAACC, 0x306C, 0xAACD, 0x306D, 0xAACE, 0x306E, 0xAACF, 0x306F, - 0xAAD0, 0x3070, 0xAAD1, 0x3071, 0xAAD2, 0x3072, 0xAAD3, 0x3073, - 0xAAD4, 0x3074, 0xAAD5, 0x3075, 0xAAD6, 0x3076, 0xAAD7, 0x3077, - 0xAAD8, 0x3078, 0xAAD9, 0x3079, 0xAADA, 0x307A, 0xAADB, 0x307B, - 0xAADC, 0x307C, 0xAADD, 0x307D, 0xAADE, 0x307E, 0xAADF, 0x307F, - 0xAAE0, 0x3080, 0xAAE1, 0x3081, 0xAAE2, 0x3082, 0xAAE3, 0x3083, - 0xAAE4, 0x3084, 0xAAE5, 0x3085, 0xAAE6, 0x3086, 0xAAE7, 0x3087, - 0xAAE8, 0x3088, 0xAAE9, 0x3089, 0xAAEA, 0x308A, 0xAAEB, 0x308B, - 0xAAEC, 0x308C, 0xAAED, 0x308D, 0xAAEE, 0x308E, 0xAAEF, 0x308F, - 0xAAF0, 0x3090, 0xAAF1, 0x3091, 0xAAF2, 0x3092, 0xAAF3, 0x3093, - 0xAB41, 0xCC94, 0xAB42, 0xCC95, 0xAB43, 0xCC96, 0xAB44, 0xCC97, - 0xAB45, 0xCC9A, 0xAB46, 0xCC9B, 0xAB47, 0xCC9D, 0xAB48, 0xCC9E, - 0xAB49, 0xCC9F, 0xAB4A, 0xCCA1, 0xAB4B, 0xCCA2, 0xAB4C, 0xCCA3, - 0xAB4D, 0xCCA4, 0xAB4E, 0xCCA5, 0xAB4F, 0xCCA6, 0xAB50, 0xCCA7, - 0xAB51, 0xCCAA, 0xAB52, 0xCCAE, 0xAB53, 0xCCAF, 0xAB54, 0xCCB0, - 0xAB55, 0xCCB1, 0xAB56, 0xCCB2, 0xAB57, 0xCCB3, 0xAB58, 0xCCB6, - 0xAB59, 0xCCB7, 0xAB5A, 0xCCB9, 0xAB61, 0xCCBA, 0xAB62, 0xCCBB, - 0xAB63, 0xCCBD, 0xAB64, 0xCCBE, 0xAB65, 0xCCBF, 0xAB66, 0xCCC0, - 0xAB67, 0xCCC1, 0xAB68, 0xCCC2, 0xAB69, 0xCCC3, 0xAB6A, 0xCCC6, - 0xAB6B, 0xCCC8, 0xAB6C, 0xCCCA, 0xAB6D, 0xCCCB, 0xAB6E, 0xCCCC, - 0xAB6F, 0xCCCD, 0xAB70, 0xCCCE, 0xAB71, 0xCCCF, 0xAB72, 0xCCD1, - 0xAB73, 0xCCD2, 0xAB74, 0xCCD3, 0xAB75, 0xCCD5, 0xAB76, 0xCCD6, - 0xAB77, 0xCCD7, 0xAB78, 0xCCD8, 0xAB79, 0xCCD9, 0xAB7A, 0xCCDA, - 0xAB81, 0xCCDB, 0xAB82, 0xCCDC, 0xAB83, 0xCCDD, 0xAB84, 0xCCDE, - 0xAB85, 0xCCDF, 0xAB86, 0xCCE0, 0xAB87, 0xCCE1, 0xAB88, 0xCCE2, - 0xAB89, 0xCCE3, 0xAB8A, 0xCCE5, 0xAB8B, 0xCCE6, 0xAB8C, 0xCCE7, - 0xAB8D, 0xCCE8, 0xAB8E, 0xCCE9, 0xAB8F, 0xCCEA, 0xAB90, 0xCCEB, - 0xAB91, 0xCCED, 0xAB92, 0xCCEE, 0xAB93, 0xCCEF, 0xAB94, 0xCCF1, - 0xAB95, 0xCCF2, 0xAB96, 0xCCF3, 0xAB97, 0xCCF4, 0xAB98, 0xCCF5, - 0xAB99, 0xCCF6, 0xAB9A, 0xCCF7, 0xAB9B, 0xCCF8, 0xAB9C, 0xCCF9, - 0xAB9D, 0xCCFA, 0xAB9E, 0xCCFB, 0xAB9F, 0xCCFC, 0xABA0, 0xCCFD, - 0xABA1, 0x30A1, 0xABA2, 0x30A2, 0xABA3, 0x30A3, 0xABA4, 0x30A4, - 0xABA5, 0x30A5, 0xABA6, 0x30A6, 0xABA7, 0x30A7, 0xABA8, 0x30A8, - 0xABA9, 0x30A9, 0xABAA, 0x30AA, 0xABAB, 0x30AB, 0xABAC, 0x30AC, - 0xABAD, 0x30AD, 0xABAE, 0x30AE, 0xABAF, 0x30AF, 0xABB0, 0x30B0, - 0xABB1, 0x30B1, 0xABB2, 0x30B2, 0xABB3, 0x30B3, 0xABB4, 0x30B4, - 0xABB5, 0x30B5, 0xABB6, 0x30B6, 0xABB7, 0x30B7, 0xABB8, 0x30B8, - 0xABB9, 0x30B9, 0xABBA, 0x30BA, 0xABBB, 0x30BB, 0xABBC, 0x30BC, - 0xABBD, 0x30BD, 0xABBE, 0x30BE, 0xABBF, 0x30BF, 0xABC0, 0x30C0, - 0xABC1, 0x30C1, 0xABC2, 0x30C2, 0xABC3, 0x30C3, 0xABC4, 0x30C4, - 0xABC5, 0x30C5, 0xABC6, 0x30C6, 0xABC7, 0x30C7, 0xABC8, 0x30C8, - 0xABC9, 0x30C9, 0xABCA, 0x30CA, 0xABCB, 0x30CB, 0xABCC, 0x30CC, - 0xABCD, 0x30CD, 0xABCE, 0x30CE, 0xABCF, 0x30CF, 0xABD0, 0x30D0, - 0xABD1, 0x30D1, 0xABD2, 0x30D2, 0xABD3, 0x30D3, 0xABD4, 0x30D4, - 0xABD5, 0x30D5, 0xABD6, 0x30D6, 0xABD7, 0x30D7, 0xABD8, 0x30D8, - 0xABD9, 0x30D9, 0xABDA, 0x30DA, 0xABDB, 0x30DB, 0xABDC, 0x30DC, - 0xABDD, 0x30DD, 0xABDE, 0x30DE, 0xABDF, 0x30DF, 0xABE0, 0x30E0, - 0xABE1, 0x30E1, 0xABE2, 0x30E2, 0xABE3, 0x30E3, 0xABE4, 0x30E4, - 0xABE5, 0x30E5, 0xABE6, 0x30E6, 0xABE7, 0x30E7, 0xABE8, 0x30E8, - 0xABE9, 0x30E9, 0xABEA, 0x30EA, 0xABEB, 0x30EB, 0xABEC, 0x30EC, - 0xABED, 0x30ED, 0xABEE, 0x30EE, 0xABEF, 0x30EF, 0xABF0, 0x30F0, - 0xABF1, 0x30F1, 0xABF2, 0x30F2, 0xABF3, 0x30F3, 0xABF4, 0x30F4, - 0xABF5, 0x30F5, 0xABF6, 0x30F6, 0xAC41, 0xCCFE, 0xAC42, 0xCCFF, - 0xAC43, 0xCD00, 0xAC44, 0xCD02, 0xAC45, 0xCD03, 0xAC46, 0xCD04, - 0xAC47, 0xCD05, 0xAC48, 0xCD06, 0xAC49, 0xCD07, 0xAC4A, 0xCD0A, - 0xAC4B, 0xCD0B, 0xAC4C, 0xCD0D, 0xAC4D, 0xCD0E, 0xAC4E, 0xCD0F, - 0xAC4F, 0xCD11, 0xAC50, 0xCD12, 0xAC51, 0xCD13, 0xAC52, 0xCD14, - 0xAC53, 0xCD15, 0xAC54, 0xCD16, 0xAC55, 0xCD17, 0xAC56, 0xCD1A, - 0xAC57, 0xCD1C, 0xAC58, 0xCD1E, 0xAC59, 0xCD1F, 0xAC5A, 0xCD20, - 0xAC61, 0xCD21, 0xAC62, 0xCD22, 0xAC63, 0xCD23, 0xAC64, 0xCD25, - 0xAC65, 0xCD26, 0xAC66, 0xCD27, 0xAC67, 0xCD29, 0xAC68, 0xCD2A, - 0xAC69, 0xCD2B, 0xAC6A, 0xCD2D, 0xAC6B, 0xCD2E, 0xAC6C, 0xCD2F, - 0xAC6D, 0xCD30, 0xAC6E, 0xCD31, 0xAC6F, 0xCD32, 0xAC70, 0xCD33, - 0xAC71, 0xCD34, 0xAC72, 0xCD35, 0xAC73, 0xCD36, 0xAC74, 0xCD37, - 0xAC75, 0xCD38, 0xAC76, 0xCD3A, 0xAC77, 0xCD3B, 0xAC78, 0xCD3C, - 0xAC79, 0xCD3D, 0xAC7A, 0xCD3E, 0xAC81, 0xCD3F, 0xAC82, 0xCD40, - 0xAC83, 0xCD41, 0xAC84, 0xCD42, 0xAC85, 0xCD43, 0xAC86, 0xCD44, - 0xAC87, 0xCD45, 0xAC88, 0xCD46, 0xAC89, 0xCD47, 0xAC8A, 0xCD48, - 0xAC8B, 0xCD49, 0xAC8C, 0xCD4A, 0xAC8D, 0xCD4B, 0xAC8E, 0xCD4C, - 0xAC8F, 0xCD4D, 0xAC90, 0xCD4E, 0xAC91, 0xCD4F, 0xAC92, 0xCD50, - 0xAC93, 0xCD51, 0xAC94, 0xCD52, 0xAC95, 0xCD53, 0xAC96, 0xCD54, - 0xAC97, 0xCD55, 0xAC98, 0xCD56, 0xAC99, 0xCD57, 0xAC9A, 0xCD58, - 0xAC9B, 0xCD59, 0xAC9C, 0xCD5A, 0xAC9D, 0xCD5B, 0xAC9E, 0xCD5D, - 0xAC9F, 0xCD5E, 0xACA0, 0xCD5F, 0xACA1, 0x0410, 0xACA2, 0x0411, - 0xACA3, 0x0412, 0xACA4, 0x0413, 0xACA5, 0x0414, 0xACA6, 0x0415, - 0xACA7, 0x0401, 0xACA8, 0x0416, 0xACA9, 0x0417, 0xACAA, 0x0418, - 0xACAB, 0x0419, 0xACAC, 0x041A, 0xACAD, 0x041B, 0xACAE, 0x041C, - 0xACAF, 0x041D, 0xACB0, 0x041E, 0xACB1, 0x041F, 0xACB2, 0x0420, - 0xACB3, 0x0421, 0xACB4, 0x0422, 0xACB5, 0x0423, 0xACB6, 0x0424, - 0xACB7, 0x0425, 0xACB8, 0x0426, 0xACB9, 0x0427, 0xACBA, 0x0428, - 0xACBB, 0x0429, 0xACBC, 0x042A, 0xACBD, 0x042B, 0xACBE, 0x042C, - 0xACBF, 0x042D, 0xACC0, 0x042E, 0xACC1, 0x042F, 0xACD1, 0x0430, - 0xACD2, 0x0431, 0xACD3, 0x0432, 0xACD4, 0x0433, 0xACD5, 0x0434, - 0xACD6, 0x0435, 0xACD7, 0x0451, 0xACD8, 0x0436, 0xACD9, 0x0437, - 0xACDA, 0x0438, 0xACDB, 0x0439, 0xACDC, 0x043A, 0xACDD, 0x043B, - 0xACDE, 0x043C, 0xACDF, 0x043D, 0xACE0, 0x043E, 0xACE1, 0x043F, - 0xACE2, 0x0440, 0xACE3, 0x0441, 0xACE4, 0x0442, 0xACE5, 0x0443, - 0xACE6, 0x0444, 0xACE7, 0x0445, 0xACE8, 0x0446, 0xACE9, 0x0447, - 0xACEA, 0x0448, 0xACEB, 0x0449, 0xACEC, 0x044A, 0xACED, 0x044B, - 0xACEE, 0x044C, 0xACEF, 0x044D, 0xACF0, 0x044E, 0xACF1, 0x044F, - 0xAD41, 0xCD61, 0xAD42, 0xCD62, 0xAD43, 0xCD63, 0xAD44, 0xCD65, - 0xAD45, 0xCD66, 0xAD46, 0xCD67, 0xAD47, 0xCD68, 0xAD48, 0xCD69, - 0xAD49, 0xCD6A, 0xAD4A, 0xCD6B, 0xAD4B, 0xCD6E, 0xAD4C, 0xCD70, - 0xAD4D, 0xCD72, 0xAD4E, 0xCD73, 0xAD4F, 0xCD74, 0xAD50, 0xCD75, - 0xAD51, 0xCD76, 0xAD52, 0xCD77, 0xAD53, 0xCD79, 0xAD54, 0xCD7A, - 0xAD55, 0xCD7B, 0xAD56, 0xCD7C, 0xAD57, 0xCD7D, 0xAD58, 0xCD7E, - 0xAD59, 0xCD7F, 0xAD5A, 0xCD80, 0xAD61, 0xCD81, 0xAD62, 0xCD82, - 0xAD63, 0xCD83, 0xAD64, 0xCD84, 0xAD65, 0xCD85, 0xAD66, 0xCD86, - 0xAD67, 0xCD87, 0xAD68, 0xCD89, 0xAD69, 0xCD8A, 0xAD6A, 0xCD8B, - 0xAD6B, 0xCD8C, 0xAD6C, 0xCD8D, 0xAD6D, 0xCD8E, 0xAD6E, 0xCD8F, - 0xAD6F, 0xCD90, 0xAD70, 0xCD91, 0xAD71, 0xCD92, 0xAD72, 0xCD93, - 0xAD73, 0xCD96, 0xAD74, 0xCD97, 0xAD75, 0xCD99, 0xAD76, 0xCD9A, - 0xAD77, 0xCD9B, 0xAD78, 0xCD9D, 0xAD79, 0xCD9E, 0xAD7A, 0xCD9F, - 0xAD81, 0xCDA0, 0xAD82, 0xCDA1, 0xAD83, 0xCDA2, 0xAD84, 0xCDA3, - 0xAD85, 0xCDA6, 0xAD86, 0xCDA8, 0xAD87, 0xCDAA, 0xAD88, 0xCDAB, - 0xAD89, 0xCDAC, 0xAD8A, 0xCDAD, 0xAD8B, 0xCDAE, 0xAD8C, 0xCDAF, - 0xAD8D, 0xCDB1, 0xAD8E, 0xCDB2, 0xAD8F, 0xCDB3, 0xAD90, 0xCDB4, - 0xAD91, 0xCDB5, 0xAD92, 0xCDB6, 0xAD93, 0xCDB7, 0xAD94, 0xCDB8, - 0xAD95, 0xCDB9, 0xAD96, 0xCDBA, 0xAD97, 0xCDBB, 0xAD98, 0xCDBC, - 0xAD99, 0xCDBD, 0xAD9A, 0xCDBE, 0xAD9B, 0xCDBF, 0xAD9C, 0xCDC0, - 0xAD9D, 0xCDC1, 0xAD9E, 0xCDC2, 0xAD9F, 0xCDC3, 0xADA0, 0xCDC5, - 0xAE41, 0xCDC6, 0xAE42, 0xCDC7, 0xAE43, 0xCDC8, 0xAE44, 0xCDC9, - 0xAE45, 0xCDCA, 0xAE46, 0xCDCB, 0xAE47, 0xCDCD, 0xAE48, 0xCDCE, - 0xAE49, 0xCDCF, 0xAE4A, 0xCDD1, 0xAE4B, 0xCDD2, 0xAE4C, 0xCDD3, - 0xAE4D, 0xCDD4, 0xAE4E, 0xCDD5, 0xAE4F, 0xCDD6, 0xAE50, 0xCDD7, - 0xAE51, 0xCDD8, 0xAE52, 0xCDD9, 0xAE53, 0xCDDA, 0xAE54, 0xCDDB, - 0xAE55, 0xCDDC, 0xAE56, 0xCDDD, 0xAE57, 0xCDDE, 0xAE58, 0xCDDF, - 0xAE59, 0xCDE0, 0xAE5A, 0xCDE1, 0xAE61, 0xCDE2, 0xAE62, 0xCDE3, - 0xAE63, 0xCDE4, 0xAE64, 0xCDE5, 0xAE65, 0xCDE6, 0xAE66, 0xCDE7, - 0xAE67, 0xCDE9, 0xAE68, 0xCDEA, 0xAE69, 0xCDEB, 0xAE6A, 0xCDED, - 0xAE6B, 0xCDEE, 0xAE6C, 0xCDEF, 0xAE6D, 0xCDF1, 0xAE6E, 0xCDF2, - 0xAE6F, 0xCDF3, 0xAE70, 0xCDF4, 0xAE71, 0xCDF5, 0xAE72, 0xCDF6, - 0xAE73, 0xCDF7, 0xAE74, 0xCDFA, 0xAE75, 0xCDFC, 0xAE76, 0xCDFE, - 0xAE77, 0xCDFF, 0xAE78, 0xCE00, 0xAE79, 0xCE01, 0xAE7A, 0xCE02, - 0xAE81, 0xCE03, 0xAE82, 0xCE05, 0xAE83, 0xCE06, 0xAE84, 0xCE07, - 0xAE85, 0xCE09, 0xAE86, 0xCE0A, 0xAE87, 0xCE0B, 0xAE88, 0xCE0D, - 0xAE89, 0xCE0E, 0xAE8A, 0xCE0F, 0xAE8B, 0xCE10, 0xAE8C, 0xCE11, - 0xAE8D, 0xCE12, 0xAE8E, 0xCE13, 0xAE8F, 0xCE15, 0xAE90, 0xCE16, - 0xAE91, 0xCE17, 0xAE92, 0xCE18, 0xAE93, 0xCE1A, 0xAE94, 0xCE1B, - 0xAE95, 0xCE1C, 0xAE96, 0xCE1D, 0xAE97, 0xCE1E, 0xAE98, 0xCE1F, - 0xAE99, 0xCE22, 0xAE9A, 0xCE23, 0xAE9B, 0xCE25, 0xAE9C, 0xCE26, - 0xAE9D, 0xCE27, 0xAE9E, 0xCE29, 0xAE9F, 0xCE2A, 0xAEA0, 0xCE2B, - 0xAF41, 0xCE2C, 0xAF42, 0xCE2D, 0xAF43, 0xCE2E, 0xAF44, 0xCE2F, - 0xAF45, 0xCE32, 0xAF46, 0xCE34, 0xAF47, 0xCE36, 0xAF48, 0xCE37, - 0xAF49, 0xCE38, 0xAF4A, 0xCE39, 0xAF4B, 0xCE3A, 0xAF4C, 0xCE3B, - 0xAF4D, 0xCE3C, 0xAF4E, 0xCE3D, 0xAF4F, 0xCE3E, 0xAF50, 0xCE3F, - 0xAF51, 0xCE40, 0xAF52, 0xCE41, 0xAF53, 0xCE42, 0xAF54, 0xCE43, - 0xAF55, 0xCE44, 0xAF56, 0xCE45, 0xAF57, 0xCE46, 0xAF58, 0xCE47, - 0xAF59, 0xCE48, 0xAF5A, 0xCE49, 0xAF61, 0xCE4A, 0xAF62, 0xCE4B, - 0xAF63, 0xCE4C, 0xAF64, 0xCE4D, 0xAF65, 0xCE4E, 0xAF66, 0xCE4F, - 0xAF67, 0xCE50, 0xAF68, 0xCE51, 0xAF69, 0xCE52, 0xAF6A, 0xCE53, - 0xAF6B, 0xCE54, 0xAF6C, 0xCE55, 0xAF6D, 0xCE56, 0xAF6E, 0xCE57, - 0xAF6F, 0xCE5A, 0xAF70, 0xCE5B, 0xAF71, 0xCE5D, 0xAF72, 0xCE5E, - 0xAF73, 0xCE62, 0xAF74, 0xCE63, 0xAF75, 0xCE64, 0xAF76, 0xCE65, - 0xAF77, 0xCE66, 0xAF78, 0xCE67, 0xAF79, 0xCE6A, 0xAF7A, 0xCE6C, - 0xAF81, 0xCE6E, 0xAF82, 0xCE6F, 0xAF83, 0xCE70, 0xAF84, 0xCE71, - 0xAF85, 0xCE72, 0xAF86, 0xCE73, 0xAF87, 0xCE76, 0xAF88, 0xCE77, - 0xAF89, 0xCE79, 0xAF8A, 0xCE7A, 0xAF8B, 0xCE7B, 0xAF8C, 0xCE7D, - 0xAF8D, 0xCE7E, 0xAF8E, 0xCE7F, 0xAF8F, 0xCE80, 0xAF90, 0xCE81, - 0xAF91, 0xCE82, 0xAF92, 0xCE83, 0xAF93, 0xCE86, 0xAF94, 0xCE88, - 0xAF95, 0xCE8A, 0xAF96, 0xCE8B, 0xAF97, 0xCE8C, 0xAF98, 0xCE8D, - 0xAF99, 0xCE8E, 0xAF9A, 0xCE8F, 0xAF9B, 0xCE92, 0xAF9C, 0xCE93, - 0xAF9D, 0xCE95, 0xAF9E, 0xCE96, 0xAF9F, 0xCE97, 0xAFA0, 0xCE99, - 0xB041, 0xCE9A, 0xB042, 0xCE9B, 0xB043, 0xCE9C, 0xB044, 0xCE9D, - 0xB045, 0xCE9E, 0xB046, 0xCE9F, 0xB047, 0xCEA2, 0xB048, 0xCEA6, - 0xB049, 0xCEA7, 0xB04A, 0xCEA8, 0xB04B, 0xCEA9, 0xB04C, 0xCEAA, - 0xB04D, 0xCEAB, 0xB04E, 0xCEAE, 0xB04F, 0xCEAF, 0xB050, 0xCEB0, - 0xB051, 0xCEB1, 0xB052, 0xCEB2, 0xB053, 0xCEB3, 0xB054, 0xCEB4, - 0xB055, 0xCEB5, 0xB056, 0xCEB6, 0xB057, 0xCEB7, 0xB058, 0xCEB8, - 0xB059, 0xCEB9, 0xB05A, 0xCEBA, 0xB061, 0xCEBB, 0xB062, 0xCEBC, - 0xB063, 0xCEBD, 0xB064, 0xCEBE, 0xB065, 0xCEBF, 0xB066, 0xCEC0, - 0xB067, 0xCEC2, 0xB068, 0xCEC3, 0xB069, 0xCEC4, 0xB06A, 0xCEC5, - 0xB06B, 0xCEC6, 0xB06C, 0xCEC7, 0xB06D, 0xCEC8, 0xB06E, 0xCEC9, - 0xB06F, 0xCECA, 0xB070, 0xCECB, 0xB071, 0xCECC, 0xB072, 0xCECD, - 0xB073, 0xCECE, 0xB074, 0xCECF, 0xB075, 0xCED0, 0xB076, 0xCED1, - 0xB077, 0xCED2, 0xB078, 0xCED3, 0xB079, 0xCED4, 0xB07A, 0xCED5, - 0xB081, 0xCED6, 0xB082, 0xCED7, 0xB083, 0xCED8, 0xB084, 0xCED9, - 0xB085, 0xCEDA, 0xB086, 0xCEDB, 0xB087, 0xCEDC, 0xB088, 0xCEDD, - 0xB089, 0xCEDE, 0xB08A, 0xCEDF, 0xB08B, 0xCEE0, 0xB08C, 0xCEE1, - 0xB08D, 0xCEE2, 0xB08E, 0xCEE3, 0xB08F, 0xCEE6, 0xB090, 0xCEE7, - 0xB091, 0xCEE9, 0xB092, 0xCEEA, 0xB093, 0xCEED, 0xB094, 0xCEEE, - 0xB095, 0xCEEF, 0xB096, 0xCEF0, 0xB097, 0xCEF1, 0xB098, 0xCEF2, - 0xB099, 0xCEF3, 0xB09A, 0xCEF6, 0xB09B, 0xCEFA, 0xB09C, 0xCEFB, - 0xB09D, 0xCEFC, 0xB09E, 0xCEFD, 0xB09F, 0xCEFE, 0xB0A0, 0xCEFF, - 0xB0A1, 0xAC00, 0xB0A2, 0xAC01, 0xB0A3, 0xAC04, 0xB0A4, 0xAC07, - 0xB0A5, 0xAC08, 0xB0A6, 0xAC09, 0xB0A7, 0xAC0A, 0xB0A8, 0xAC10, - 0xB0A9, 0xAC11, 0xB0AA, 0xAC12, 0xB0AB, 0xAC13, 0xB0AC, 0xAC14, - 0xB0AD, 0xAC15, 0xB0AE, 0xAC16, 0xB0AF, 0xAC17, 0xB0B0, 0xAC19, - 0xB0B1, 0xAC1A, 0xB0B2, 0xAC1B, 0xB0B3, 0xAC1C, 0xB0B4, 0xAC1D, - 0xB0B5, 0xAC20, 0xB0B6, 0xAC24, 0xB0B7, 0xAC2C, 0xB0B8, 0xAC2D, - 0xB0B9, 0xAC2F, 0xB0BA, 0xAC30, 0xB0BB, 0xAC31, 0xB0BC, 0xAC38, - 0xB0BD, 0xAC39, 0xB0BE, 0xAC3C, 0xB0BF, 0xAC40, 0xB0C0, 0xAC4B, - 0xB0C1, 0xAC4D, 0xB0C2, 0xAC54, 0xB0C3, 0xAC58, 0xB0C4, 0xAC5C, - 0xB0C5, 0xAC70, 0xB0C6, 0xAC71, 0xB0C7, 0xAC74, 0xB0C8, 0xAC77, - 0xB0C9, 0xAC78, 0xB0CA, 0xAC7A, 0xB0CB, 0xAC80, 0xB0CC, 0xAC81, - 0xB0CD, 0xAC83, 0xB0CE, 0xAC84, 0xB0CF, 0xAC85, 0xB0D0, 0xAC86, - 0xB0D1, 0xAC89, 0xB0D2, 0xAC8A, 0xB0D3, 0xAC8B, 0xB0D4, 0xAC8C, - 0xB0D5, 0xAC90, 0xB0D6, 0xAC94, 0xB0D7, 0xAC9C, 0xB0D8, 0xAC9D, - 0xB0D9, 0xAC9F, 0xB0DA, 0xACA0, 0xB0DB, 0xACA1, 0xB0DC, 0xACA8, - 0xB0DD, 0xACA9, 0xB0DE, 0xACAA, 0xB0DF, 0xACAC, 0xB0E0, 0xACAF, - 0xB0E1, 0xACB0, 0xB0E2, 0xACB8, 0xB0E3, 0xACB9, 0xB0E4, 0xACBB, - 0xB0E5, 0xACBC, 0xB0E6, 0xACBD, 0xB0E7, 0xACC1, 0xB0E8, 0xACC4, - 0xB0E9, 0xACC8, 0xB0EA, 0xACCC, 0xB0EB, 0xACD5, 0xB0EC, 0xACD7, - 0xB0ED, 0xACE0, 0xB0EE, 0xACE1, 0xB0EF, 0xACE4, 0xB0F0, 0xACE7, - 0xB0F1, 0xACE8, 0xB0F2, 0xACEA, 0xB0F3, 0xACEC, 0xB0F4, 0xACEF, - 0xB0F5, 0xACF0, 0xB0F6, 0xACF1, 0xB0F7, 0xACF3, 0xB0F8, 0xACF5, - 0xB0F9, 0xACF6, 0xB0FA, 0xACFC, 0xB0FB, 0xACFD, 0xB0FC, 0xAD00, - 0xB0FD, 0xAD04, 0xB0FE, 0xAD06, 0xB141, 0xCF02, 0xB142, 0xCF03, - 0xB143, 0xCF05, 0xB144, 0xCF06, 0xB145, 0xCF07, 0xB146, 0xCF09, - 0xB147, 0xCF0A, 0xB148, 0xCF0B, 0xB149, 0xCF0C, 0xB14A, 0xCF0D, - 0xB14B, 0xCF0E, 0xB14C, 0xCF0F, 0xB14D, 0xCF12, 0xB14E, 0xCF14, - 0xB14F, 0xCF16, 0xB150, 0xCF17, 0xB151, 0xCF18, 0xB152, 0xCF19, - 0xB153, 0xCF1A, 0xB154, 0xCF1B, 0xB155, 0xCF1D, 0xB156, 0xCF1E, - 0xB157, 0xCF1F, 0xB158, 0xCF21, 0xB159, 0xCF22, 0xB15A, 0xCF23, - 0xB161, 0xCF25, 0xB162, 0xCF26, 0xB163, 0xCF27, 0xB164, 0xCF28, - 0xB165, 0xCF29, 0xB166, 0xCF2A, 0xB167, 0xCF2B, 0xB168, 0xCF2E, - 0xB169, 0xCF32, 0xB16A, 0xCF33, 0xB16B, 0xCF34, 0xB16C, 0xCF35, - 0xB16D, 0xCF36, 0xB16E, 0xCF37, 0xB16F, 0xCF39, 0xB170, 0xCF3A, - 0xB171, 0xCF3B, 0xB172, 0xCF3C, 0xB173, 0xCF3D, 0xB174, 0xCF3E, - 0xB175, 0xCF3F, 0xB176, 0xCF40, 0xB177, 0xCF41, 0xB178, 0xCF42, - 0xB179, 0xCF43, 0xB17A, 0xCF44, 0xB181, 0xCF45, 0xB182, 0xCF46, - 0xB183, 0xCF47, 0xB184, 0xCF48, 0xB185, 0xCF49, 0xB186, 0xCF4A, - 0xB187, 0xCF4B, 0xB188, 0xCF4C, 0xB189, 0xCF4D, 0xB18A, 0xCF4E, - 0xB18B, 0xCF4F, 0xB18C, 0xCF50, 0xB18D, 0xCF51, 0xB18E, 0xCF52, - 0xB18F, 0xCF53, 0xB190, 0xCF56, 0xB191, 0xCF57, 0xB192, 0xCF59, - 0xB193, 0xCF5A, 0xB194, 0xCF5B, 0xB195, 0xCF5D, 0xB196, 0xCF5E, - 0xB197, 0xCF5F, 0xB198, 0xCF60, 0xB199, 0xCF61, 0xB19A, 0xCF62, - 0xB19B, 0xCF63, 0xB19C, 0xCF66, 0xB19D, 0xCF68, 0xB19E, 0xCF6A, - 0xB19F, 0xCF6B, 0xB1A0, 0xCF6C, 0xB1A1, 0xAD0C, 0xB1A2, 0xAD0D, - 0xB1A3, 0xAD0F, 0xB1A4, 0xAD11, 0xB1A5, 0xAD18, 0xB1A6, 0xAD1C, - 0xB1A7, 0xAD20, 0xB1A8, 0xAD29, 0xB1A9, 0xAD2C, 0xB1AA, 0xAD2D, - 0xB1AB, 0xAD34, 0xB1AC, 0xAD35, 0xB1AD, 0xAD38, 0xB1AE, 0xAD3C, - 0xB1AF, 0xAD44, 0xB1B0, 0xAD45, 0xB1B1, 0xAD47, 0xB1B2, 0xAD49, - 0xB1B3, 0xAD50, 0xB1B4, 0xAD54, 0xB1B5, 0xAD58, 0xB1B6, 0xAD61, - 0xB1B7, 0xAD63, 0xB1B8, 0xAD6C, 0xB1B9, 0xAD6D, 0xB1BA, 0xAD70, - 0xB1BB, 0xAD73, 0xB1BC, 0xAD74, 0xB1BD, 0xAD75, 0xB1BE, 0xAD76, - 0xB1BF, 0xAD7B, 0xB1C0, 0xAD7C, 0xB1C1, 0xAD7D, 0xB1C2, 0xAD7F, - 0xB1C3, 0xAD81, 0xB1C4, 0xAD82, 0xB1C5, 0xAD88, 0xB1C6, 0xAD89, - 0xB1C7, 0xAD8C, 0xB1C8, 0xAD90, 0xB1C9, 0xAD9C, 0xB1CA, 0xAD9D, - 0xB1CB, 0xADA4, 0xB1CC, 0xADB7, 0xB1CD, 0xADC0, 0xB1CE, 0xADC1, - 0xB1CF, 0xADC4, 0xB1D0, 0xADC8, 0xB1D1, 0xADD0, 0xB1D2, 0xADD1, - 0xB1D3, 0xADD3, 0xB1D4, 0xADDC, 0xB1D5, 0xADE0, 0xB1D6, 0xADE4, - 0xB1D7, 0xADF8, 0xB1D8, 0xADF9, 0xB1D9, 0xADFC, 0xB1DA, 0xADFF, - 0xB1DB, 0xAE00, 0xB1DC, 0xAE01, 0xB1DD, 0xAE08, 0xB1DE, 0xAE09, - 0xB1DF, 0xAE0B, 0xB1E0, 0xAE0D, 0xB1E1, 0xAE14, 0xB1E2, 0xAE30, - 0xB1E3, 0xAE31, 0xB1E4, 0xAE34, 0xB1E5, 0xAE37, 0xB1E6, 0xAE38, - 0xB1E7, 0xAE3A, 0xB1E8, 0xAE40, 0xB1E9, 0xAE41, 0xB1EA, 0xAE43, - 0xB1EB, 0xAE45, 0xB1EC, 0xAE46, 0xB1ED, 0xAE4A, 0xB1EE, 0xAE4C, - 0xB1EF, 0xAE4D, 0xB1F0, 0xAE4E, 0xB1F1, 0xAE50, 0xB1F2, 0xAE54, - 0xB1F3, 0xAE56, 0xB1F4, 0xAE5C, 0xB1F5, 0xAE5D, 0xB1F6, 0xAE5F, - 0xB1F7, 0xAE60, 0xB1F8, 0xAE61, 0xB1F9, 0xAE65, 0xB1FA, 0xAE68, - 0xB1FB, 0xAE69, 0xB1FC, 0xAE6C, 0xB1FD, 0xAE70, 0xB1FE, 0xAE78, - 0xB241, 0xCF6D, 0xB242, 0xCF6E, 0xB243, 0xCF6F, 0xB244, 0xCF72, - 0xB245, 0xCF73, 0xB246, 0xCF75, 0xB247, 0xCF76, 0xB248, 0xCF77, - 0xB249, 0xCF79, 0xB24A, 0xCF7A, 0xB24B, 0xCF7B, 0xB24C, 0xCF7C, - 0xB24D, 0xCF7D, 0xB24E, 0xCF7E, 0xB24F, 0xCF7F, 0xB250, 0xCF81, - 0xB251, 0xCF82, 0xB252, 0xCF83, 0xB253, 0xCF84, 0xB254, 0xCF86, - 0xB255, 0xCF87, 0xB256, 0xCF88, 0xB257, 0xCF89, 0xB258, 0xCF8A, - 0xB259, 0xCF8B, 0xB25A, 0xCF8D, 0xB261, 0xCF8E, 0xB262, 0xCF8F, - 0xB263, 0xCF90, 0xB264, 0xCF91, 0xB265, 0xCF92, 0xB266, 0xCF93, - 0xB267, 0xCF94, 0xB268, 0xCF95, 0xB269, 0xCF96, 0xB26A, 0xCF97, - 0xB26B, 0xCF98, 0xB26C, 0xCF99, 0xB26D, 0xCF9A, 0xB26E, 0xCF9B, - 0xB26F, 0xCF9C, 0xB270, 0xCF9D, 0xB271, 0xCF9E, 0xB272, 0xCF9F, - 0xB273, 0xCFA0, 0xB274, 0xCFA2, 0xB275, 0xCFA3, 0xB276, 0xCFA4, - 0xB277, 0xCFA5, 0xB278, 0xCFA6, 0xB279, 0xCFA7, 0xB27A, 0xCFA9, - 0xB281, 0xCFAA, 0xB282, 0xCFAB, 0xB283, 0xCFAC, 0xB284, 0xCFAD, - 0xB285, 0xCFAE, 0xB286, 0xCFAF, 0xB287, 0xCFB1, 0xB288, 0xCFB2, - 0xB289, 0xCFB3, 0xB28A, 0xCFB4, 0xB28B, 0xCFB5, 0xB28C, 0xCFB6, - 0xB28D, 0xCFB7, 0xB28E, 0xCFB8, 0xB28F, 0xCFB9, 0xB290, 0xCFBA, - 0xB291, 0xCFBB, 0xB292, 0xCFBC, 0xB293, 0xCFBD, 0xB294, 0xCFBE, - 0xB295, 0xCFBF, 0xB296, 0xCFC0, 0xB297, 0xCFC1, 0xB298, 0xCFC2, - 0xB299, 0xCFC3, 0xB29A, 0xCFC5, 0xB29B, 0xCFC6, 0xB29C, 0xCFC7, - 0xB29D, 0xCFC8, 0xB29E, 0xCFC9, 0xB29F, 0xCFCA, 0xB2A0, 0xCFCB, - 0xB2A1, 0xAE79, 0xB2A2, 0xAE7B, 0xB2A3, 0xAE7C, 0xB2A4, 0xAE7D, - 0xB2A5, 0xAE84, 0xB2A6, 0xAE85, 0xB2A7, 0xAE8C, 0xB2A8, 0xAEBC, - 0xB2A9, 0xAEBD, 0xB2AA, 0xAEBE, 0xB2AB, 0xAEC0, 0xB2AC, 0xAEC4, - 0xB2AD, 0xAECC, 0xB2AE, 0xAECD, 0xB2AF, 0xAECF, 0xB2B0, 0xAED0, - 0xB2B1, 0xAED1, 0xB2B2, 0xAED8, 0xB2B3, 0xAED9, 0xB2B4, 0xAEDC, - 0xB2B5, 0xAEE8, 0xB2B6, 0xAEEB, 0xB2B7, 0xAEED, 0xB2B8, 0xAEF4, - 0xB2B9, 0xAEF8, 0xB2BA, 0xAEFC, 0xB2BB, 0xAF07, 0xB2BC, 0xAF08, - 0xB2BD, 0xAF0D, 0xB2BE, 0xAF10, 0xB2BF, 0xAF2C, 0xB2C0, 0xAF2D, - 0xB2C1, 0xAF30, 0xB2C2, 0xAF32, 0xB2C3, 0xAF34, 0xB2C4, 0xAF3C, - 0xB2C5, 0xAF3D, 0xB2C6, 0xAF3F, 0xB2C7, 0xAF41, 0xB2C8, 0xAF42, - 0xB2C9, 0xAF43, 0xB2CA, 0xAF48, 0xB2CB, 0xAF49, 0xB2CC, 0xAF50, - 0xB2CD, 0xAF5C, 0xB2CE, 0xAF5D, 0xB2CF, 0xAF64, 0xB2D0, 0xAF65, - 0xB2D1, 0xAF79, 0xB2D2, 0xAF80, 0xB2D3, 0xAF84, 0xB2D4, 0xAF88, - 0xB2D5, 0xAF90, 0xB2D6, 0xAF91, 0xB2D7, 0xAF95, 0xB2D8, 0xAF9C, - 0xB2D9, 0xAFB8, 0xB2DA, 0xAFB9, 0xB2DB, 0xAFBC, 0xB2DC, 0xAFC0, - 0xB2DD, 0xAFC7, 0xB2DE, 0xAFC8, 0xB2DF, 0xAFC9, 0xB2E0, 0xAFCB, - 0xB2E1, 0xAFCD, 0xB2E2, 0xAFCE, 0xB2E3, 0xAFD4, 0xB2E4, 0xAFDC, - 0xB2E5, 0xAFE8, 0xB2E6, 0xAFE9, 0xB2E7, 0xAFF0, 0xB2E8, 0xAFF1, - 0xB2E9, 0xAFF4, 0xB2EA, 0xAFF8, 0xB2EB, 0xB000, 0xB2EC, 0xB001, - 0xB2ED, 0xB004, 0xB2EE, 0xB00C, 0xB2EF, 0xB010, 0xB2F0, 0xB014, - 0xB2F1, 0xB01C, 0xB2F2, 0xB01D, 0xB2F3, 0xB028, 0xB2F4, 0xB044, - 0xB2F5, 0xB045, 0xB2F6, 0xB048, 0xB2F7, 0xB04A, 0xB2F8, 0xB04C, - 0xB2F9, 0xB04E, 0xB2FA, 0xB053, 0xB2FB, 0xB054, 0xB2FC, 0xB055, - 0xB2FD, 0xB057, 0xB2FE, 0xB059, 0xB341, 0xCFCC, 0xB342, 0xCFCD, - 0xB343, 0xCFCE, 0xB344, 0xCFCF, 0xB345, 0xCFD0, 0xB346, 0xCFD1, - 0xB347, 0xCFD2, 0xB348, 0xCFD3, 0xB349, 0xCFD4, 0xB34A, 0xCFD5, - 0xB34B, 0xCFD6, 0xB34C, 0xCFD7, 0xB34D, 0xCFD8, 0xB34E, 0xCFD9, - 0xB34F, 0xCFDA, 0xB350, 0xCFDB, 0xB351, 0xCFDC, 0xB352, 0xCFDD, - 0xB353, 0xCFDE, 0xB354, 0xCFDF, 0xB355, 0xCFE2, 0xB356, 0xCFE3, - 0xB357, 0xCFE5, 0xB358, 0xCFE6, 0xB359, 0xCFE7, 0xB35A, 0xCFE9, - 0xB361, 0xCFEA, 0xB362, 0xCFEB, 0xB363, 0xCFEC, 0xB364, 0xCFED, - 0xB365, 0xCFEE, 0xB366, 0xCFEF, 0xB367, 0xCFF2, 0xB368, 0xCFF4, - 0xB369, 0xCFF6, 0xB36A, 0xCFF7, 0xB36B, 0xCFF8, 0xB36C, 0xCFF9, - 0xB36D, 0xCFFA, 0xB36E, 0xCFFB, 0xB36F, 0xCFFD, 0xB370, 0xCFFE, - 0xB371, 0xCFFF, 0xB372, 0xD001, 0xB373, 0xD002, 0xB374, 0xD003, - 0xB375, 0xD005, 0xB376, 0xD006, 0xB377, 0xD007, 0xB378, 0xD008, - 0xB379, 0xD009, 0xB37A, 0xD00A, 0xB381, 0xD00B, 0xB382, 0xD00C, - 0xB383, 0xD00D, 0xB384, 0xD00E, 0xB385, 0xD00F, 0xB386, 0xD010, - 0xB387, 0xD012, 0xB388, 0xD013, 0xB389, 0xD014, 0xB38A, 0xD015, - 0xB38B, 0xD016, 0xB38C, 0xD017, 0xB38D, 0xD019, 0xB38E, 0xD01A, - 0xB38F, 0xD01B, 0xB390, 0xD01C, 0xB391, 0xD01D, 0xB392, 0xD01E, - 0xB393, 0xD01F, 0xB394, 0xD020, 0xB395, 0xD021, 0xB396, 0xD022, - 0xB397, 0xD023, 0xB398, 0xD024, 0xB399, 0xD025, 0xB39A, 0xD026, - 0xB39B, 0xD027, 0xB39C, 0xD028, 0xB39D, 0xD029, 0xB39E, 0xD02A, - 0xB39F, 0xD02B, 0xB3A0, 0xD02C, 0xB3A1, 0xB05D, 0xB3A2, 0xB07C, - 0xB3A3, 0xB07D, 0xB3A4, 0xB080, 0xB3A5, 0xB084, 0xB3A6, 0xB08C, - 0xB3A7, 0xB08D, 0xB3A8, 0xB08F, 0xB3A9, 0xB091, 0xB3AA, 0xB098, - 0xB3AB, 0xB099, 0xB3AC, 0xB09A, 0xB3AD, 0xB09C, 0xB3AE, 0xB09F, - 0xB3AF, 0xB0A0, 0xB3B0, 0xB0A1, 0xB3B1, 0xB0A2, 0xB3B2, 0xB0A8, - 0xB3B3, 0xB0A9, 0xB3B4, 0xB0AB, 0xB3B5, 0xB0AC, 0xB3B6, 0xB0AD, - 0xB3B7, 0xB0AE, 0xB3B8, 0xB0AF, 0xB3B9, 0xB0B1, 0xB3BA, 0xB0B3, - 0xB3BB, 0xB0B4, 0xB3BC, 0xB0B5, 0xB3BD, 0xB0B8, 0xB3BE, 0xB0BC, - 0xB3BF, 0xB0C4, 0xB3C0, 0xB0C5, 0xB3C1, 0xB0C7, 0xB3C2, 0xB0C8, - 0xB3C3, 0xB0C9, 0xB3C4, 0xB0D0, 0xB3C5, 0xB0D1, 0xB3C6, 0xB0D4, - 0xB3C7, 0xB0D8, 0xB3C8, 0xB0E0, 0xB3C9, 0xB0E5, 0xB3CA, 0xB108, - 0xB3CB, 0xB109, 0xB3CC, 0xB10B, 0xB3CD, 0xB10C, 0xB3CE, 0xB110, - 0xB3CF, 0xB112, 0xB3D0, 0xB113, 0xB3D1, 0xB118, 0xB3D2, 0xB119, - 0xB3D3, 0xB11B, 0xB3D4, 0xB11C, 0xB3D5, 0xB11D, 0xB3D6, 0xB123, - 0xB3D7, 0xB124, 0xB3D8, 0xB125, 0xB3D9, 0xB128, 0xB3DA, 0xB12C, - 0xB3DB, 0xB134, 0xB3DC, 0xB135, 0xB3DD, 0xB137, 0xB3DE, 0xB138, - 0xB3DF, 0xB139, 0xB3E0, 0xB140, 0xB3E1, 0xB141, 0xB3E2, 0xB144, - 0xB3E3, 0xB148, 0xB3E4, 0xB150, 0xB3E5, 0xB151, 0xB3E6, 0xB154, - 0xB3E7, 0xB155, 0xB3E8, 0xB158, 0xB3E9, 0xB15C, 0xB3EA, 0xB160, - 0xB3EB, 0xB178, 0xB3EC, 0xB179, 0xB3ED, 0xB17C, 0xB3EE, 0xB180, - 0xB3EF, 0xB182, 0xB3F0, 0xB188, 0xB3F1, 0xB189, 0xB3F2, 0xB18B, - 0xB3F3, 0xB18D, 0xB3F4, 0xB192, 0xB3F5, 0xB193, 0xB3F6, 0xB194, - 0xB3F7, 0xB198, 0xB3F8, 0xB19C, 0xB3F9, 0xB1A8, 0xB3FA, 0xB1CC, - 0xB3FB, 0xB1D0, 0xB3FC, 0xB1D4, 0xB3FD, 0xB1DC, 0xB3FE, 0xB1DD, - 0xB441, 0xD02E, 0xB442, 0xD02F, 0xB443, 0xD030, 0xB444, 0xD031, - 0xB445, 0xD032, 0xB446, 0xD033, 0xB447, 0xD036, 0xB448, 0xD037, - 0xB449, 0xD039, 0xB44A, 0xD03A, 0xB44B, 0xD03B, 0xB44C, 0xD03D, - 0xB44D, 0xD03E, 0xB44E, 0xD03F, 0xB44F, 0xD040, 0xB450, 0xD041, - 0xB451, 0xD042, 0xB452, 0xD043, 0xB453, 0xD046, 0xB454, 0xD048, - 0xB455, 0xD04A, 0xB456, 0xD04B, 0xB457, 0xD04C, 0xB458, 0xD04D, - 0xB459, 0xD04E, 0xB45A, 0xD04F, 0xB461, 0xD051, 0xB462, 0xD052, - 0xB463, 0xD053, 0xB464, 0xD055, 0xB465, 0xD056, 0xB466, 0xD057, - 0xB467, 0xD059, 0xB468, 0xD05A, 0xB469, 0xD05B, 0xB46A, 0xD05C, - 0xB46B, 0xD05D, 0xB46C, 0xD05E, 0xB46D, 0xD05F, 0xB46E, 0xD061, - 0xB46F, 0xD062, 0xB470, 0xD063, 0xB471, 0xD064, 0xB472, 0xD065, - 0xB473, 0xD066, 0xB474, 0xD067, 0xB475, 0xD068, 0xB476, 0xD069, - 0xB477, 0xD06A, 0xB478, 0xD06B, 0xB479, 0xD06E, 0xB47A, 0xD06F, - 0xB481, 0xD071, 0xB482, 0xD072, 0xB483, 0xD073, 0xB484, 0xD075, - 0xB485, 0xD076, 0xB486, 0xD077, 0xB487, 0xD078, 0xB488, 0xD079, - 0xB489, 0xD07A, 0xB48A, 0xD07B, 0xB48B, 0xD07E, 0xB48C, 0xD07F, - 0xB48D, 0xD080, 0xB48E, 0xD082, 0xB48F, 0xD083, 0xB490, 0xD084, - 0xB491, 0xD085, 0xB492, 0xD086, 0xB493, 0xD087, 0xB494, 0xD088, - 0xB495, 0xD089, 0xB496, 0xD08A, 0xB497, 0xD08B, 0xB498, 0xD08C, - 0xB499, 0xD08D, 0xB49A, 0xD08E, 0xB49B, 0xD08F, 0xB49C, 0xD090, - 0xB49D, 0xD091, 0xB49E, 0xD092, 0xB49F, 0xD093, 0xB4A0, 0xD094, - 0xB4A1, 0xB1DF, 0xB4A2, 0xB1E8, 0xB4A3, 0xB1E9, 0xB4A4, 0xB1EC, - 0xB4A5, 0xB1F0, 0xB4A6, 0xB1F9, 0xB4A7, 0xB1FB, 0xB4A8, 0xB1FD, - 0xB4A9, 0xB204, 0xB4AA, 0xB205, 0xB4AB, 0xB208, 0xB4AC, 0xB20B, - 0xB4AD, 0xB20C, 0xB4AE, 0xB214, 0xB4AF, 0xB215, 0xB4B0, 0xB217, - 0xB4B1, 0xB219, 0xB4B2, 0xB220, 0xB4B3, 0xB234, 0xB4B4, 0xB23C, - 0xB4B5, 0xB258, 0xB4B6, 0xB25C, 0xB4B7, 0xB260, 0xB4B8, 0xB268, - 0xB4B9, 0xB269, 0xB4BA, 0xB274, 0xB4BB, 0xB275, 0xB4BC, 0xB27C, - 0xB4BD, 0xB284, 0xB4BE, 0xB285, 0xB4BF, 0xB289, 0xB4C0, 0xB290, - 0xB4C1, 0xB291, 0xB4C2, 0xB294, 0xB4C3, 0xB298, 0xB4C4, 0xB299, - 0xB4C5, 0xB29A, 0xB4C6, 0xB2A0, 0xB4C7, 0xB2A1, 0xB4C8, 0xB2A3, - 0xB4C9, 0xB2A5, 0xB4CA, 0xB2A6, 0xB4CB, 0xB2AA, 0xB4CC, 0xB2AC, - 0xB4CD, 0xB2B0, 0xB4CE, 0xB2B4, 0xB4CF, 0xB2C8, 0xB4D0, 0xB2C9, - 0xB4D1, 0xB2CC, 0xB4D2, 0xB2D0, 0xB4D3, 0xB2D2, 0xB4D4, 0xB2D8, - 0xB4D5, 0xB2D9, 0xB4D6, 0xB2DB, 0xB4D7, 0xB2DD, 0xB4D8, 0xB2E2, - 0xB4D9, 0xB2E4, 0xB4DA, 0xB2E5, 0xB4DB, 0xB2E6, 0xB4DC, 0xB2E8, - 0xB4DD, 0xB2EB, 0xB4DE, 0xB2EC, 0xB4DF, 0xB2ED, 0xB4E0, 0xB2EE, - 0xB4E1, 0xB2EF, 0xB4E2, 0xB2F3, 0xB4E3, 0xB2F4, 0xB4E4, 0xB2F5, - 0xB4E5, 0xB2F7, 0xB4E6, 0xB2F8, 0xB4E7, 0xB2F9, 0xB4E8, 0xB2FA, - 0xB4E9, 0xB2FB, 0xB4EA, 0xB2FF, 0xB4EB, 0xB300, 0xB4EC, 0xB301, - 0xB4ED, 0xB304, 0xB4EE, 0xB308, 0xB4EF, 0xB310, 0xB4F0, 0xB311, - 0xB4F1, 0xB313, 0xB4F2, 0xB314, 0xB4F3, 0xB315, 0xB4F4, 0xB31C, - 0xB4F5, 0xB354, 0xB4F6, 0xB355, 0xB4F7, 0xB356, 0xB4F8, 0xB358, - 0xB4F9, 0xB35B, 0xB4FA, 0xB35C, 0xB4FB, 0xB35E, 0xB4FC, 0xB35F, - 0xB4FD, 0xB364, 0xB4FE, 0xB365, 0xB541, 0xD095, 0xB542, 0xD096, - 0xB543, 0xD097, 0xB544, 0xD098, 0xB545, 0xD099, 0xB546, 0xD09A, - 0xB547, 0xD09B, 0xB548, 0xD09C, 0xB549, 0xD09D, 0xB54A, 0xD09E, - 0xB54B, 0xD09F, 0xB54C, 0xD0A0, 0xB54D, 0xD0A1, 0xB54E, 0xD0A2, - 0xB54F, 0xD0A3, 0xB550, 0xD0A6, 0xB551, 0xD0A7, 0xB552, 0xD0A9, - 0xB553, 0xD0AA, 0xB554, 0xD0AB, 0xB555, 0xD0AD, 0xB556, 0xD0AE, - 0xB557, 0xD0AF, 0xB558, 0xD0B0, 0xB559, 0xD0B1, 0xB55A, 0xD0B2, - 0xB561, 0xD0B3, 0xB562, 0xD0B6, 0xB563, 0xD0B8, 0xB564, 0xD0BA, - 0xB565, 0xD0BB, 0xB566, 0xD0BC, 0xB567, 0xD0BD, 0xB568, 0xD0BE, - 0xB569, 0xD0BF, 0xB56A, 0xD0C2, 0xB56B, 0xD0C3, 0xB56C, 0xD0C5, - 0xB56D, 0xD0C6, 0xB56E, 0xD0C7, 0xB56F, 0xD0CA, 0xB570, 0xD0CB, - 0xB571, 0xD0CC, 0xB572, 0xD0CD, 0xB573, 0xD0CE, 0xB574, 0xD0CF, - 0xB575, 0xD0D2, 0xB576, 0xD0D6, 0xB577, 0xD0D7, 0xB578, 0xD0D8, - 0xB579, 0xD0D9, 0xB57A, 0xD0DA, 0xB581, 0xD0DB, 0xB582, 0xD0DE, - 0xB583, 0xD0DF, 0xB584, 0xD0E1, 0xB585, 0xD0E2, 0xB586, 0xD0E3, - 0xB587, 0xD0E5, 0xB588, 0xD0E6, 0xB589, 0xD0E7, 0xB58A, 0xD0E8, - 0xB58B, 0xD0E9, 0xB58C, 0xD0EA, 0xB58D, 0xD0EB, 0xB58E, 0xD0EE, - 0xB58F, 0xD0F2, 0xB590, 0xD0F3, 0xB591, 0xD0F4, 0xB592, 0xD0F5, - 0xB593, 0xD0F6, 0xB594, 0xD0F7, 0xB595, 0xD0F9, 0xB596, 0xD0FA, - 0xB597, 0xD0FB, 0xB598, 0xD0FC, 0xB599, 0xD0FD, 0xB59A, 0xD0FE, - 0xB59B, 0xD0FF, 0xB59C, 0xD100, 0xB59D, 0xD101, 0xB59E, 0xD102, - 0xB59F, 0xD103, 0xB5A0, 0xD104, 0xB5A1, 0xB367, 0xB5A2, 0xB369, - 0xB5A3, 0xB36B, 0xB5A4, 0xB36E, 0xB5A5, 0xB370, 0xB5A6, 0xB371, - 0xB5A7, 0xB374, 0xB5A8, 0xB378, 0xB5A9, 0xB380, 0xB5AA, 0xB381, - 0xB5AB, 0xB383, 0xB5AC, 0xB384, 0xB5AD, 0xB385, 0xB5AE, 0xB38C, - 0xB5AF, 0xB390, 0xB5B0, 0xB394, 0xB5B1, 0xB3A0, 0xB5B2, 0xB3A1, - 0xB5B3, 0xB3A8, 0xB5B4, 0xB3AC, 0xB5B5, 0xB3C4, 0xB5B6, 0xB3C5, - 0xB5B7, 0xB3C8, 0xB5B8, 0xB3CB, 0xB5B9, 0xB3CC, 0xB5BA, 0xB3CE, - 0xB5BB, 0xB3D0, 0xB5BC, 0xB3D4, 0xB5BD, 0xB3D5, 0xB5BE, 0xB3D7, - 0xB5BF, 0xB3D9, 0xB5C0, 0xB3DB, 0xB5C1, 0xB3DD, 0xB5C2, 0xB3E0, - 0xB5C3, 0xB3E4, 0xB5C4, 0xB3E8, 0xB5C5, 0xB3FC, 0xB5C6, 0xB410, - 0xB5C7, 0xB418, 0xB5C8, 0xB41C, 0xB5C9, 0xB420, 0xB5CA, 0xB428, - 0xB5CB, 0xB429, 0xB5CC, 0xB42B, 0xB5CD, 0xB434, 0xB5CE, 0xB450, - 0xB5CF, 0xB451, 0xB5D0, 0xB454, 0xB5D1, 0xB458, 0xB5D2, 0xB460, - 0xB5D3, 0xB461, 0xB5D4, 0xB463, 0xB5D5, 0xB465, 0xB5D6, 0xB46C, - 0xB5D7, 0xB480, 0xB5D8, 0xB488, 0xB5D9, 0xB49D, 0xB5DA, 0xB4A4, - 0xB5DB, 0xB4A8, 0xB5DC, 0xB4AC, 0xB5DD, 0xB4B5, 0xB5DE, 0xB4B7, - 0xB5DF, 0xB4B9, 0xB5E0, 0xB4C0, 0xB5E1, 0xB4C4, 0xB5E2, 0xB4C8, - 0xB5E3, 0xB4D0, 0xB5E4, 0xB4D5, 0xB5E5, 0xB4DC, 0xB5E6, 0xB4DD, - 0xB5E7, 0xB4E0, 0xB5E8, 0xB4E3, 0xB5E9, 0xB4E4, 0xB5EA, 0xB4E6, - 0xB5EB, 0xB4EC, 0xB5EC, 0xB4ED, 0xB5ED, 0xB4EF, 0xB5EE, 0xB4F1, - 0xB5EF, 0xB4F8, 0xB5F0, 0xB514, 0xB5F1, 0xB515, 0xB5F2, 0xB518, - 0xB5F3, 0xB51B, 0xB5F4, 0xB51C, 0xB5F5, 0xB524, 0xB5F6, 0xB525, - 0xB5F7, 0xB527, 0xB5F8, 0xB528, 0xB5F9, 0xB529, 0xB5FA, 0xB52A, - 0xB5FB, 0xB530, 0xB5FC, 0xB531, 0xB5FD, 0xB534, 0xB5FE, 0xB538, - 0xB641, 0xD105, 0xB642, 0xD106, 0xB643, 0xD107, 0xB644, 0xD108, - 0xB645, 0xD109, 0xB646, 0xD10A, 0xB647, 0xD10B, 0xB648, 0xD10C, - 0xB649, 0xD10E, 0xB64A, 0xD10F, 0xB64B, 0xD110, 0xB64C, 0xD111, - 0xB64D, 0xD112, 0xB64E, 0xD113, 0xB64F, 0xD114, 0xB650, 0xD115, - 0xB651, 0xD116, 0xB652, 0xD117, 0xB653, 0xD118, 0xB654, 0xD119, - 0xB655, 0xD11A, 0xB656, 0xD11B, 0xB657, 0xD11C, 0xB658, 0xD11D, - 0xB659, 0xD11E, 0xB65A, 0xD11F, 0xB661, 0xD120, 0xB662, 0xD121, - 0xB663, 0xD122, 0xB664, 0xD123, 0xB665, 0xD124, 0xB666, 0xD125, - 0xB667, 0xD126, 0xB668, 0xD127, 0xB669, 0xD128, 0xB66A, 0xD129, - 0xB66B, 0xD12A, 0xB66C, 0xD12B, 0xB66D, 0xD12C, 0xB66E, 0xD12D, - 0xB66F, 0xD12E, 0xB670, 0xD12F, 0xB671, 0xD132, 0xB672, 0xD133, - 0xB673, 0xD135, 0xB674, 0xD136, 0xB675, 0xD137, 0xB676, 0xD139, - 0xB677, 0xD13B, 0xB678, 0xD13C, 0xB679, 0xD13D, 0xB67A, 0xD13E, - 0xB681, 0xD13F, 0xB682, 0xD142, 0xB683, 0xD146, 0xB684, 0xD147, - 0xB685, 0xD148, 0xB686, 0xD149, 0xB687, 0xD14A, 0xB688, 0xD14B, - 0xB689, 0xD14E, 0xB68A, 0xD14F, 0xB68B, 0xD151, 0xB68C, 0xD152, - 0xB68D, 0xD153, 0xB68E, 0xD155, 0xB68F, 0xD156, 0xB690, 0xD157, - 0xB691, 0xD158, 0xB692, 0xD159, 0xB693, 0xD15A, 0xB694, 0xD15B, - 0xB695, 0xD15E, 0xB696, 0xD160, 0xB697, 0xD162, 0xB698, 0xD163, - 0xB699, 0xD164, 0xB69A, 0xD165, 0xB69B, 0xD166, 0xB69C, 0xD167, - 0xB69D, 0xD169, 0xB69E, 0xD16A, 0xB69F, 0xD16B, 0xB6A0, 0xD16D, - 0xB6A1, 0xB540, 0xB6A2, 0xB541, 0xB6A3, 0xB543, 0xB6A4, 0xB544, - 0xB6A5, 0xB545, 0xB6A6, 0xB54B, 0xB6A7, 0xB54C, 0xB6A8, 0xB54D, - 0xB6A9, 0xB550, 0xB6AA, 0xB554, 0xB6AB, 0xB55C, 0xB6AC, 0xB55D, - 0xB6AD, 0xB55F, 0xB6AE, 0xB560, 0xB6AF, 0xB561, 0xB6B0, 0xB5A0, - 0xB6B1, 0xB5A1, 0xB6B2, 0xB5A4, 0xB6B3, 0xB5A8, 0xB6B4, 0xB5AA, - 0xB6B5, 0xB5AB, 0xB6B6, 0xB5B0, 0xB6B7, 0xB5B1, 0xB6B8, 0xB5B3, - 0xB6B9, 0xB5B4, 0xB6BA, 0xB5B5, 0xB6BB, 0xB5BB, 0xB6BC, 0xB5BC, - 0xB6BD, 0xB5BD, 0xB6BE, 0xB5C0, 0xB6BF, 0xB5C4, 0xB6C0, 0xB5CC, - 0xB6C1, 0xB5CD, 0xB6C2, 0xB5CF, 0xB6C3, 0xB5D0, 0xB6C4, 0xB5D1, - 0xB6C5, 0xB5D8, 0xB6C6, 0xB5EC, 0xB6C7, 0xB610, 0xB6C8, 0xB611, - 0xB6C9, 0xB614, 0xB6CA, 0xB618, 0xB6CB, 0xB625, 0xB6CC, 0xB62C, - 0xB6CD, 0xB634, 0xB6CE, 0xB648, 0xB6CF, 0xB664, 0xB6D0, 0xB668, - 0xB6D1, 0xB69C, 0xB6D2, 0xB69D, 0xB6D3, 0xB6A0, 0xB6D4, 0xB6A4, - 0xB6D5, 0xB6AB, 0xB6D6, 0xB6AC, 0xB6D7, 0xB6B1, 0xB6D8, 0xB6D4, - 0xB6D9, 0xB6F0, 0xB6DA, 0xB6F4, 0xB6DB, 0xB6F8, 0xB6DC, 0xB700, - 0xB6DD, 0xB701, 0xB6DE, 0xB705, 0xB6DF, 0xB728, 0xB6E0, 0xB729, - 0xB6E1, 0xB72C, 0xB6E2, 0xB72F, 0xB6E3, 0xB730, 0xB6E4, 0xB738, - 0xB6E5, 0xB739, 0xB6E6, 0xB73B, 0xB6E7, 0xB744, 0xB6E8, 0xB748, - 0xB6E9, 0xB74C, 0xB6EA, 0xB754, 0xB6EB, 0xB755, 0xB6EC, 0xB760, - 0xB6ED, 0xB764, 0xB6EE, 0xB768, 0xB6EF, 0xB770, 0xB6F0, 0xB771, - 0xB6F1, 0xB773, 0xB6F2, 0xB775, 0xB6F3, 0xB77C, 0xB6F4, 0xB77D, - 0xB6F5, 0xB780, 0xB6F6, 0xB784, 0xB6F7, 0xB78C, 0xB6F8, 0xB78D, - 0xB6F9, 0xB78F, 0xB6FA, 0xB790, 0xB6FB, 0xB791, 0xB6FC, 0xB792, - 0xB6FD, 0xB796, 0xB6FE, 0xB797, 0xB741, 0xD16E, 0xB742, 0xD16F, - 0xB743, 0xD170, 0xB744, 0xD171, 0xB745, 0xD172, 0xB746, 0xD173, - 0xB747, 0xD174, 0xB748, 0xD175, 0xB749, 0xD176, 0xB74A, 0xD177, - 0xB74B, 0xD178, 0xB74C, 0xD179, 0xB74D, 0xD17A, 0xB74E, 0xD17B, - 0xB74F, 0xD17D, 0xB750, 0xD17E, 0xB751, 0xD17F, 0xB752, 0xD180, - 0xB753, 0xD181, 0xB754, 0xD182, 0xB755, 0xD183, 0xB756, 0xD185, - 0xB757, 0xD186, 0xB758, 0xD187, 0xB759, 0xD189, 0xB75A, 0xD18A, - 0xB761, 0xD18B, 0xB762, 0xD18C, 0xB763, 0xD18D, 0xB764, 0xD18E, - 0xB765, 0xD18F, 0xB766, 0xD190, 0xB767, 0xD191, 0xB768, 0xD192, - 0xB769, 0xD193, 0xB76A, 0xD194, 0xB76B, 0xD195, 0xB76C, 0xD196, - 0xB76D, 0xD197, 0xB76E, 0xD198, 0xB76F, 0xD199, 0xB770, 0xD19A, - 0xB771, 0xD19B, 0xB772, 0xD19C, 0xB773, 0xD19D, 0xB774, 0xD19E, - 0xB775, 0xD19F, 0xB776, 0xD1A2, 0xB777, 0xD1A3, 0xB778, 0xD1A5, - 0xB779, 0xD1A6, 0xB77A, 0xD1A7, 0xB781, 0xD1A9, 0xB782, 0xD1AA, - 0xB783, 0xD1AB, 0xB784, 0xD1AC, 0xB785, 0xD1AD, 0xB786, 0xD1AE, - 0xB787, 0xD1AF, 0xB788, 0xD1B2, 0xB789, 0xD1B4, 0xB78A, 0xD1B6, - 0xB78B, 0xD1B7, 0xB78C, 0xD1B8, 0xB78D, 0xD1B9, 0xB78E, 0xD1BB, - 0xB78F, 0xD1BD, 0xB790, 0xD1BE, 0xB791, 0xD1BF, 0xB792, 0xD1C1, - 0xB793, 0xD1C2, 0xB794, 0xD1C3, 0xB795, 0xD1C4, 0xB796, 0xD1C5, - 0xB797, 0xD1C6, 0xB798, 0xD1C7, 0xB799, 0xD1C8, 0xB79A, 0xD1C9, - 0xB79B, 0xD1CA, 0xB79C, 0xD1CB, 0xB79D, 0xD1CC, 0xB79E, 0xD1CD, - 0xB79F, 0xD1CE, 0xB7A0, 0xD1CF, 0xB7A1, 0xB798, 0xB7A2, 0xB799, - 0xB7A3, 0xB79C, 0xB7A4, 0xB7A0, 0xB7A5, 0xB7A8, 0xB7A6, 0xB7A9, - 0xB7A7, 0xB7AB, 0xB7A8, 0xB7AC, 0xB7A9, 0xB7AD, 0xB7AA, 0xB7B4, - 0xB7AB, 0xB7B5, 0xB7AC, 0xB7B8, 0xB7AD, 0xB7C7, 0xB7AE, 0xB7C9, - 0xB7AF, 0xB7EC, 0xB7B0, 0xB7ED, 0xB7B1, 0xB7F0, 0xB7B2, 0xB7F4, - 0xB7B3, 0xB7FC, 0xB7B4, 0xB7FD, 0xB7B5, 0xB7FF, 0xB7B6, 0xB800, - 0xB7B7, 0xB801, 0xB7B8, 0xB807, 0xB7B9, 0xB808, 0xB7BA, 0xB809, - 0xB7BB, 0xB80C, 0xB7BC, 0xB810, 0xB7BD, 0xB818, 0xB7BE, 0xB819, - 0xB7BF, 0xB81B, 0xB7C0, 0xB81D, 0xB7C1, 0xB824, 0xB7C2, 0xB825, - 0xB7C3, 0xB828, 0xB7C4, 0xB82C, 0xB7C5, 0xB834, 0xB7C6, 0xB835, - 0xB7C7, 0xB837, 0xB7C8, 0xB838, 0xB7C9, 0xB839, 0xB7CA, 0xB840, - 0xB7CB, 0xB844, 0xB7CC, 0xB851, 0xB7CD, 0xB853, 0xB7CE, 0xB85C, - 0xB7CF, 0xB85D, 0xB7D0, 0xB860, 0xB7D1, 0xB864, 0xB7D2, 0xB86C, - 0xB7D3, 0xB86D, 0xB7D4, 0xB86F, 0xB7D5, 0xB871, 0xB7D6, 0xB878, - 0xB7D7, 0xB87C, 0xB7D8, 0xB88D, 0xB7D9, 0xB8A8, 0xB7DA, 0xB8B0, - 0xB7DB, 0xB8B4, 0xB7DC, 0xB8B8, 0xB7DD, 0xB8C0, 0xB7DE, 0xB8C1, - 0xB7DF, 0xB8C3, 0xB7E0, 0xB8C5, 0xB7E1, 0xB8CC, 0xB7E2, 0xB8D0, - 0xB7E3, 0xB8D4, 0xB7E4, 0xB8DD, 0xB7E5, 0xB8DF, 0xB7E6, 0xB8E1, - 0xB7E7, 0xB8E8, 0xB7E8, 0xB8E9, 0xB7E9, 0xB8EC, 0xB7EA, 0xB8F0, - 0xB7EB, 0xB8F8, 0xB7EC, 0xB8F9, 0xB7ED, 0xB8FB, 0xB7EE, 0xB8FD, - 0xB7EF, 0xB904, 0xB7F0, 0xB918, 0xB7F1, 0xB920, 0xB7F2, 0xB93C, - 0xB7F3, 0xB93D, 0xB7F4, 0xB940, 0xB7F5, 0xB944, 0xB7F6, 0xB94C, - 0xB7F7, 0xB94F, 0xB7F8, 0xB951, 0xB7F9, 0xB958, 0xB7FA, 0xB959, - 0xB7FB, 0xB95C, 0xB7FC, 0xB960, 0xB7FD, 0xB968, 0xB7FE, 0xB969, - 0xB841, 0xD1D0, 0xB842, 0xD1D1, 0xB843, 0xD1D2, 0xB844, 0xD1D3, - 0xB845, 0xD1D4, 0xB846, 0xD1D5, 0xB847, 0xD1D6, 0xB848, 0xD1D7, - 0xB849, 0xD1D9, 0xB84A, 0xD1DA, 0xB84B, 0xD1DB, 0xB84C, 0xD1DC, - 0xB84D, 0xD1DD, 0xB84E, 0xD1DE, 0xB84F, 0xD1DF, 0xB850, 0xD1E0, - 0xB851, 0xD1E1, 0xB852, 0xD1E2, 0xB853, 0xD1E3, 0xB854, 0xD1E4, - 0xB855, 0xD1E5, 0xB856, 0xD1E6, 0xB857, 0xD1E7, 0xB858, 0xD1E8, - 0xB859, 0xD1E9, 0xB85A, 0xD1EA, 0xB861, 0xD1EB, 0xB862, 0xD1EC, - 0xB863, 0xD1ED, 0xB864, 0xD1EE, 0xB865, 0xD1EF, 0xB866, 0xD1F0, - 0xB867, 0xD1F1, 0xB868, 0xD1F2, 0xB869, 0xD1F3, 0xB86A, 0xD1F5, - 0xB86B, 0xD1F6, 0xB86C, 0xD1F7, 0xB86D, 0xD1F9, 0xB86E, 0xD1FA, - 0xB86F, 0xD1FB, 0xB870, 0xD1FC, 0xB871, 0xD1FD, 0xB872, 0xD1FE, - 0xB873, 0xD1FF, 0xB874, 0xD200, 0xB875, 0xD201, 0xB876, 0xD202, - 0xB877, 0xD203, 0xB878, 0xD204, 0xB879, 0xD205, 0xB87A, 0xD206, - 0xB881, 0xD208, 0xB882, 0xD20A, 0xB883, 0xD20B, 0xB884, 0xD20C, - 0xB885, 0xD20D, 0xB886, 0xD20E, 0xB887, 0xD20F, 0xB888, 0xD211, - 0xB889, 0xD212, 0xB88A, 0xD213, 0xB88B, 0xD214, 0xB88C, 0xD215, - 0xB88D, 0xD216, 0xB88E, 0xD217, 0xB88F, 0xD218, 0xB890, 0xD219, - 0xB891, 0xD21A, 0xB892, 0xD21B, 0xB893, 0xD21C, 0xB894, 0xD21D, - 0xB895, 0xD21E, 0xB896, 0xD21F, 0xB897, 0xD220, 0xB898, 0xD221, - 0xB899, 0xD222, 0xB89A, 0xD223, 0xB89B, 0xD224, 0xB89C, 0xD225, - 0xB89D, 0xD226, 0xB89E, 0xD227, 0xB89F, 0xD228, 0xB8A0, 0xD229, - 0xB8A1, 0xB96B, 0xB8A2, 0xB96D, 0xB8A3, 0xB974, 0xB8A4, 0xB975, - 0xB8A5, 0xB978, 0xB8A6, 0xB97C, 0xB8A7, 0xB984, 0xB8A8, 0xB985, - 0xB8A9, 0xB987, 0xB8AA, 0xB989, 0xB8AB, 0xB98A, 0xB8AC, 0xB98D, - 0xB8AD, 0xB98E, 0xB8AE, 0xB9AC, 0xB8AF, 0xB9AD, 0xB8B0, 0xB9B0, - 0xB8B1, 0xB9B4, 0xB8B2, 0xB9BC, 0xB8B3, 0xB9BD, 0xB8B4, 0xB9BF, - 0xB8B5, 0xB9C1, 0xB8B6, 0xB9C8, 0xB8B7, 0xB9C9, 0xB8B8, 0xB9CC, - 0xB8B9, 0xB9CE, 0xB8BA, 0xB9CF, 0xB8BB, 0xB9D0, 0xB8BC, 0xB9D1, - 0xB8BD, 0xB9D2, 0xB8BE, 0xB9D8, 0xB8BF, 0xB9D9, 0xB8C0, 0xB9DB, - 0xB8C1, 0xB9DD, 0xB8C2, 0xB9DE, 0xB8C3, 0xB9E1, 0xB8C4, 0xB9E3, - 0xB8C5, 0xB9E4, 0xB8C6, 0xB9E5, 0xB8C7, 0xB9E8, 0xB8C8, 0xB9EC, - 0xB8C9, 0xB9F4, 0xB8CA, 0xB9F5, 0xB8CB, 0xB9F7, 0xB8CC, 0xB9F8, - 0xB8CD, 0xB9F9, 0xB8CE, 0xB9FA, 0xB8CF, 0xBA00, 0xB8D0, 0xBA01, - 0xB8D1, 0xBA08, 0xB8D2, 0xBA15, 0xB8D3, 0xBA38, 0xB8D4, 0xBA39, - 0xB8D5, 0xBA3C, 0xB8D6, 0xBA40, 0xB8D7, 0xBA42, 0xB8D8, 0xBA48, - 0xB8D9, 0xBA49, 0xB8DA, 0xBA4B, 0xB8DB, 0xBA4D, 0xB8DC, 0xBA4E, - 0xB8DD, 0xBA53, 0xB8DE, 0xBA54, 0xB8DF, 0xBA55, 0xB8E0, 0xBA58, - 0xB8E1, 0xBA5C, 0xB8E2, 0xBA64, 0xB8E3, 0xBA65, 0xB8E4, 0xBA67, - 0xB8E5, 0xBA68, 0xB8E6, 0xBA69, 0xB8E7, 0xBA70, 0xB8E8, 0xBA71, - 0xB8E9, 0xBA74, 0xB8EA, 0xBA78, 0xB8EB, 0xBA83, 0xB8EC, 0xBA84, - 0xB8ED, 0xBA85, 0xB8EE, 0xBA87, 0xB8EF, 0xBA8C, 0xB8F0, 0xBAA8, - 0xB8F1, 0xBAA9, 0xB8F2, 0xBAAB, 0xB8F3, 0xBAAC, 0xB8F4, 0xBAB0, - 0xB8F5, 0xBAB2, 0xB8F6, 0xBAB8, 0xB8F7, 0xBAB9, 0xB8F8, 0xBABB, - 0xB8F9, 0xBABD, 0xB8FA, 0xBAC4, 0xB8FB, 0xBAC8, 0xB8FC, 0xBAD8, - 0xB8FD, 0xBAD9, 0xB8FE, 0xBAFC, 0xB941, 0xD22A, 0xB942, 0xD22B, - 0xB943, 0xD22E, 0xB944, 0xD22F, 0xB945, 0xD231, 0xB946, 0xD232, - 0xB947, 0xD233, 0xB948, 0xD235, 0xB949, 0xD236, 0xB94A, 0xD237, - 0xB94B, 0xD238, 0xB94C, 0xD239, 0xB94D, 0xD23A, 0xB94E, 0xD23B, - 0xB94F, 0xD23E, 0xB950, 0xD240, 0xB951, 0xD242, 0xB952, 0xD243, - 0xB953, 0xD244, 0xB954, 0xD245, 0xB955, 0xD246, 0xB956, 0xD247, - 0xB957, 0xD249, 0xB958, 0xD24A, 0xB959, 0xD24B, 0xB95A, 0xD24C, - 0xB961, 0xD24D, 0xB962, 0xD24E, 0xB963, 0xD24F, 0xB964, 0xD250, - 0xB965, 0xD251, 0xB966, 0xD252, 0xB967, 0xD253, 0xB968, 0xD254, - 0xB969, 0xD255, 0xB96A, 0xD256, 0xB96B, 0xD257, 0xB96C, 0xD258, - 0xB96D, 0xD259, 0xB96E, 0xD25A, 0xB96F, 0xD25B, 0xB970, 0xD25D, - 0xB971, 0xD25E, 0xB972, 0xD25F, 0xB973, 0xD260, 0xB974, 0xD261, - 0xB975, 0xD262, 0xB976, 0xD263, 0xB977, 0xD265, 0xB978, 0xD266, - 0xB979, 0xD267, 0xB97A, 0xD268, 0xB981, 0xD269, 0xB982, 0xD26A, - 0xB983, 0xD26B, 0xB984, 0xD26C, 0xB985, 0xD26D, 0xB986, 0xD26E, - 0xB987, 0xD26F, 0xB988, 0xD270, 0xB989, 0xD271, 0xB98A, 0xD272, - 0xB98B, 0xD273, 0xB98C, 0xD274, 0xB98D, 0xD275, 0xB98E, 0xD276, - 0xB98F, 0xD277, 0xB990, 0xD278, 0xB991, 0xD279, 0xB992, 0xD27A, - 0xB993, 0xD27B, 0xB994, 0xD27C, 0xB995, 0xD27D, 0xB996, 0xD27E, - 0xB997, 0xD27F, 0xB998, 0xD282, 0xB999, 0xD283, 0xB99A, 0xD285, - 0xB99B, 0xD286, 0xB99C, 0xD287, 0xB99D, 0xD289, 0xB99E, 0xD28A, - 0xB99F, 0xD28B, 0xB9A0, 0xD28C, 0xB9A1, 0xBB00, 0xB9A2, 0xBB04, - 0xB9A3, 0xBB0D, 0xB9A4, 0xBB0F, 0xB9A5, 0xBB11, 0xB9A6, 0xBB18, - 0xB9A7, 0xBB1C, 0xB9A8, 0xBB20, 0xB9A9, 0xBB29, 0xB9AA, 0xBB2B, - 0xB9AB, 0xBB34, 0xB9AC, 0xBB35, 0xB9AD, 0xBB36, 0xB9AE, 0xBB38, - 0xB9AF, 0xBB3B, 0xB9B0, 0xBB3C, 0xB9B1, 0xBB3D, 0xB9B2, 0xBB3E, - 0xB9B3, 0xBB44, 0xB9B4, 0xBB45, 0xB9B5, 0xBB47, 0xB9B6, 0xBB49, - 0xB9B7, 0xBB4D, 0xB9B8, 0xBB4F, 0xB9B9, 0xBB50, 0xB9BA, 0xBB54, - 0xB9BB, 0xBB58, 0xB9BC, 0xBB61, 0xB9BD, 0xBB63, 0xB9BE, 0xBB6C, - 0xB9BF, 0xBB88, 0xB9C0, 0xBB8C, 0xB9C1, 0xBB90, 0xB9C2, 0xBBA4, - 0xB9C3, 0xBBA8, 0xB9C4, 0xBBAC, 0xB9C5, 0xBBB4, 0xB9C6, 0xBBB7, - 0xB9C7, 0xBBC0, 0xB9C8, 0xBBC4, 0xB9C9, 0xBBC8, 0xB9CA, 0xBBD0, - 0xB9CB, 0xBBD3, 0xB9CC, 0xBBF8, 0xB9CD, 0xBBF9, 0xB9CE, 0xBBFC, - 0xB9CF, 0xBBFF, 0xB9D0, 0xBC00, 0xB9D1, 0xBC02, 0xB9D2, 0xBC08, - 0xB9D3, 0xBC09, 0xB9D4, 0xBC0B, 0xB9D5, 0xBC0C, 0xB9D6, 0xBC0D, - 0xB9D7, 0xBC0F, 0xB9D8, 0xBC11, 0xB9D9, 0xBC14, 0xB9DA, 0xBC15, - 0xB9DB, 0xBC16, 0xB9DC, 0xBC17, 0xB9DD, 0xBC18, 0xB9DE, 0xBC1B, - 0xB9DF, 0xBC1C, 0xB9E0, 0xBC1D, 0xB9E1, 0xBC1E, 0xB9E2, 0xBC1F, - 0xB9E3, 0xBC24, 0xB9E4, 0xBC25, 0xB9E5, 0xBC27, 0xB9E6, 0xBC29, - 0xB9E7, 0xBC2D, 0xB9E8, 0xBC30, 0xB9E9, 0xBC31, 0xB9EA, 0xBC34, - 0xB9EB, 0xBC38, 0xB9EC, 0xBC40, 0xB9ED, 0xBC41, 0xB9EE, 0xBC43, - 0xB9EF, 0xBC44, 0xB9F0, 0xBC45, 0xB9F1, 0xBC49, 0xB9F2, 0xBC4C, - 0xB9F3, 0xBC4D, 0xB9F4, 0xBC50, 0xB9F5, 0xBC5D, 0xB9F6, 0xBC84, - 0xB9F7, 0xBC85, 0xB9F8, 0xBC88, 0xB9F9, 0xBC8B, 0xB9FA, 0xBC8C, - 0xB9FB, 0xBC8E, 0xB9FC, 0xBC94, 0xB9FD, 0xBC95, 0xB9FE, 0xBC97, - 0xBA41, 0xD28D, 0xBA42, 0xD28E, 0xBA43, 0xD28F, 0xBA44, 0xD292, - 0xBA45, 0xD293, 0xBA46, 0xD294, 0xBA47, 0xD296, 0xBA48, 0xD297, - 0xBA49, 0xD298, 0xBA4A, 0xD299, 0xBA4B, 0xD29A, 0xBA4C, 0xD29B, - 0xBA4D, 0xD29D, 0xBA4E, 0xD29E, 0xBA4F, 0xD29F, 0xBA50, 0xD2A1, - 0xBA51, 0xD2A2, 0xBA52, 0xD2A3, 0xBA53, 0xD2A5, 0xBA54, 0xD2A6, - 0xBA55, 0xD2A7, 0xBA56, 0xD2A8, 0xBA57, 0xD2A9, 0xBA58, 0xD2AA, - 0xBA59, 0xD2AB, 0xBA5A, 0xD2AD, 0xBA61, 0xD2AE, 0xBA62, 0xD2AF, - 0xBA63, 0xD2B0, 0xBA64, 0xD2B2, 0xBA65, 0xD2B3, 0xBA66, 0xD2B4, - 0xBA67, 0xD2B5, 0xBA68, 0xD2B6, 0xBA69, 0xD2B7, 0xBA6A, 0xD2BA, - 0xBA6B, 0xD2BB, 0xBA6C, 0xD2BD, 0xBA6D, 0xD2BE, 0xBA6E, 0xD2C1, - 0xBA6F, 0xD2C3, 0xBA70, 0xD2C4, 0xBA71, 0xD2C5, 0xBA72, 0xD2C6, - 0xBA73, 0xD2C7, 0xBA74, 0xD2CA, 0xBA75, 0xD2CC, 0xBA76, 0xD2CD, - 0xBA77, 0xD2CE, 0xBA78, 0xD2CF, 0xBA79, 0xD2D0, 0xBA7A, 0xD2D1, - 0xBA81, 0xD2D2, 0xBA82, 0xD2D3, 0xBA83, 0xD2D5, 0xBA84, 0xD2D6, - 0xBA85, 0xD2D7, 0xBA86, 0xD2D9, 0xBA87, 0xD2DA, 0xBA88, 0xD2DB, - 0xBA89, 0xD2DD, 0xBA8A, 0xD2DE, 0xBA8B, 0xD2DF, 0xBA8C, 0xD2E0, - 0xBA8D, 0xD2E1, 0xBA8E, 0xD2E2, 0xBA8F, 0xD2E3, 0xBA90, 0xD2E6, - 0xBA91, 0xD2E7, 0xBA92, 0xD2E8, 0xBA93, 0xD2E9, 0xBA94, 0xD2EA, - 0xBA95, 0xD2EB, 0xBA96, 0xD2EC, 0xBA97, 0xD2ED, 0xBA98, 0xD2EE, - 0xBA99, 0xD2EF, 0xBA9A, 0xD2F2, 0xBA9B, 0xD2F3, 0xBA9C, 0xD2F5, - 0xBA9D, 0xD2F6, 0xBA9E, 0xD2F7, 0xBA9F, 0xD2F9, 0xBAA0, 0xD2FA, - 0xBAA1, 0xBC99, 0xBAA2, 0xBC9A, 0xBAA3, 0xBCA0, 0xBAA4, 0xBCA1, - 0xBAA5, 0xBCA4, 0xBAA6, 0xBCA7, 0xBAA7, 0xBCA8, 0xBAA8, 0xBCB0, - 0xBAA9, 0xBCB1, 0xBAAA, 0xBCB3, 0xBAAB, 0xBCB4, 0xBAAC, 0xBCB5, - 0xBAAD, 0xBCBC, 0xBAAE, 0xBCBD, 0xBAAF, 0xBCC0, 0xBAB0, 0xBCC4, - 0xBAB1, 0xBCCD, 0xBAB2, 0xBCCF, 0xBAB3, 0xBCD0, 0xBAB4, 0xBCD1, - 0xBAB5, 0xBCD5, 0xBAB6, 0xBCD8, 0xBAB7, 0xBCDC, 0xBAB8, 0xBCF4, - 0xBAB9, 0xBCF5, 0xBABA, 0xBCF6, 0xBABB, 0xBCF8, 0xBABC, 0xBCFC, - 0xBABD, 0xBD04, 0xBABE, 0xBD05, 0xBABF, 0xBD07, 0xBAC0, 0xBD09, - 0xBAC1, 0xBD10, 0xBAC2, 0xBD14, 0xBAC3, 0xBD24, 0xBAC4, 0xBD2C, - 0xBAC5, 0xBD40, 0xBAC6, 0xBD48, 0xBAC7, 0xBD49, 0xBAC8, 0xBD4C, - 0xBAC9, 0xBD50, 0xBACA, 0xBD58, 0xBACB, 0xBD59, 0xBACC, 0xBD64, - 0xBACD, 0xBD68, 0xBACE, 0xBD80, 0xBACF, 0xBD81, 0xBAD0, 0xBD84, - 0xBAD1, 0xBD87, 0xBAD2, 0xBD88, 0xBAD3, 0xBD89, 0xBAD4, 0xBD8A, - 0xBAD5, 0xBD90, 0xBAD6, 0xBD91, 0xBAD7, 0xBD93, 0xBAD8, 0xBD95, - 0xBAD9, 0xBD99, 0xBADA, 0xBD9A, 0xBADB, 0xBD9C, 0xBADC, 0xBDA4, - 0xBADD, 0xBDB0, 0xBADE, 0xBDB8, 0xBADF, 0xBDD4, 0xBAE0, 0xBDD5, - 0xBAE1, 0xBDD8, 0xBAE2, 0xBDDC, 0xBAE3, 0xBDE9, 0xBAE4, 0xBDF0, - 0xBAE5, 0xBDF4, 0xBAE6, 0xBDF8, 0xBAE7, 0xBE00, 0xBAE8, 0xBE03, - 0xBAE9, 0xBE05, 0xBAEA, 0xBE0C, 0xBAEB, 0xBE0D, 0xBAEC, 0xBE10, - 0xBAED, 0xBE14, 0xBAEE, 0xBE1C, 0xBAEF, 0xBE1D, 0xBAF0, 0xBE1F, - 0xBAF1, 0xBE44, 0xBAF2, 0xBE45, 0xBAF3, 0xBE48, 0xBAF4, 0xBE4C, - 0xBAF5, 0xBE4E, 0xBAF6, 0xBE54, 0xBAF7, 0xBE55, 0xBAF8, 0xBE57, - 0xBAF9, 0xBE59, 0xBAFA, 0xBE5A, 0xBAFB, 0xBE5B, 0xBAFC, 0xBE60, - 0xBAFD, 0xBE61, 0xBAFE, 0xBE64, 0xBB41, 0xD2FB, 0xBB42, 0xD2FC, - 0xBB43, 0xD2FD, 0xBB44, 0xD2FE, 0xBB45, 0xD2FF, 0xBB46, 0xD302, - 0xBB47, 0xD304, 0xBB48, 0xD306, 0xBB49, 0xD307, 0xBB4A, 0xD308, - 0xBB4B, 0xD309, 0xBB4C, 0xD30A, 0xBB4D, 0xD30B, 0xBB4E, 0xD30F, - 0xBB4F, 0xD311, 0xBB50, 0xD312, 0xBB51, 0xD313, 0xBB52, 0xD315, - 0xBB53, 0xD317, 0xBB54, 0xD318, 0xBB55, 0xD319, 0xBB56, 0xD31A, - 0xBB57, 0xD31B, 0xBB58, 0xD31E, 0xBB59, 0xD322, 0xBB5A, 0xD323, - 0xBB61, 0xD324, 0xBB62, 0xD326, 0xBB63, 0xD327, 0xBB64, 0xD32A, - 0xBB65, 0xD32B, 0xBB66, 0xD32D, 0xBB67, 0xD32E, 0xBB68, 0xD32F, - 0xBB69, 0xD331, 0xBB6A, 0xD332, 0xBB6B, 0xD333, 0xBB6C, 0xD334, - 0xBB6D, 0xD335, 0xBB6E, 0xD336, 0xBB6F, 0xD337, 0xBB70, 0xD33A, - 0xBB71, 0xD33E, 0xBB72, 0xD33F, 0xBB73, 0xD340, 0xBB74, 0xD341, - 0xBB75, 0xD342, 0xBB76, 0xD343, 0xBB77, 0xD346, 0xBB78, 0xD347, - 0xBB79, 0xD348, 0xBB7A, 0xD349, 0xBB81, 0xD34A, 0xBB82, 0xD34B, - 0xBB83, 0xD34C, 0xBB84, 0xD34D, 0xBB85, 0xD34E, 0xBB86, 0xD34F, - 0xBB87, 0xD350, 0xBB88, 0xD351, 0xBB89, 0xD352, 0xBB8A, 0xD353, - 0xBB8B, 0xD354, 0xBB8C, 0xD355, 0xBB8D, 0xD356, 0xBB8E, 0xD357, - 0xBB8F, 0xD358, 0xBB90, 0xD359, 0xBB91, 0xD35A, 0xBB92, 0xD35B, - 0xBB93, 0xD35C, 0xBB94, 0xD35D, 0xBB95, 0xD35E, 0xBB96, 0xD35F, - 0xBB97, 0xD360, 0xBB98, 0xD361, 0xBB99, 0xD362, 0xBB9A, 0xD363, - 0xBB9B, 0xD364, 0xBB9C, 0xD365, 0xBB9D, 0xD366, 0xBB9E, 0xD367, - 0xBB9F, 0xD368, 0xBBA0, 0xD369, 0xBBA1, 0xBE68, 0xBBA2, 0xBE6A, - 0xBBA3, 0xBE70, 0xBBA4, 0xBE71, 0xBBA5, 0xBE73, 0xBBA6, 0xBE74, - 0xBBA7, 0xBE75, 0xBBA8, 0xBE7B, 0xBBA9, 0xBE7C, 0xBBAA, 0xBE7D, - 0xBBAB, 0xBE80, 0xBBAC, 0xBE84, 0xBBAD, 0xBE8C, 0xBBAE, 0xBE8D, - 0xBBAF, 0xBE8F, 0xBBB0, 0xBE90, 0xBBB1, 0xBE91, 0xBBB2, 0xBE98, - 0xBBB3, 0xBE99, 0xBBB4, 0xBEA8, 0xBBB5, 0xBED0, 0xBBB6, 0xBED1, - 0xBBB7, 0xBED4, 0xBBB8, 0xBED7, 0xBBB9, 0xBED8, 0xBBBA, 0xBEE0, - 0xBBBB, 0xBEE3, 0xBBBC, 0xBEE4, 0xBBBD, 0xBEE5, 0xBBBE, 0xBEEC, - 0xBBBF, 0xBF01, 0xBBC0, 0xBF08, 0xBBC1, 0xBF09, 0xBBC2, 0xBF18, - 0xBBC3, 0xBF19, 0xBBC4, 0xBF1B, 0xBBC5, 0xBF1C, 0xBBC6, 0xBF1D, - 0xBBC7, 0xBF40, 0xBBC8, 0xBF41, 0xBBC9, 0xBF44, 0xBBCA, 0xBF48, - 0xBBCB, 0xBF50, 0xBBCC, 0xBF51, 0xBBCD, 0xBF55, 0xBBCE, 0xBF94, - 0xBBCF, 0xBFB0, 0xBBD0, 0xBFC5, 0xBBD1, 0xBFCC, 0xBBD2, 0xBFCD, - 0xBBD3, 0xBFD0, 0xBBD4, 0xBFD4, 0xBBD5, 0xBFDC, 0xBBD6, 0xBFDF, - 0xBBD7, 0xBFE1, 0xBBD8, 0xC03C, 0xBBD9, 0xC051, 0xBBDA, 0xC058, - 0xBBDB, 0xC05C, 0xBBDC, 0xC060, 0xBBDD, 0xC068, 0xBBDE, 0xC069, - 0xBBDF, 0xC090, 0xBBE0, 0xC091, 0xBBE1, 0xC094, 0xBBE2, 0xC098, - 0xBBE3, 0xC0A0, 0xBBE4, 0xC0A1, 0xBBE5, 0xC0A3, 0xBBE6, 0xC0A5, - 0xBBE7, 0xC0AC, 0xBBE8, 0xC0AD, 0xBBE9, 0xC0AF, 0xBBEA, 0xC0B0, - 0xBBEB, 0xC0B3, 0xBBEC, 0xC0B4, 0xBBED, 0xC0B5, 0xBBEE, 0xC0B6, - 0xBBEF, 0xC0BC, 0xBBF0, 0xC0BD, 0xBBF1, 0xC0BF, 0xBBF2, 0xC0C0, - 0xBBF3, 0xC0C1, 0xBBF4, 0xC0C5, 0xBBF5, 0xC0C8, 0xBBF6, 0xC0C9, - 0xBBF7, 0xC0CC, 0xBBF8, 0xC0D0, 0xBBF9, 0xC0D8, 0xBBFA, 0xC0D9, - 0xBBFB, 0xC0DB, 0xBBFC, 0xC0DC, 0xBBFD, 0xC0DD, 0xBBFE, 0xC0E4, - 0xBC41, 0xD36A, 0xBC42, 0xD36B, 0xBC43, 0xD36C, 0xBC44, 0xD36D, - 0xBC45, 0xD36E, 0xBC46, 0xD36F, 0xBC47, 0xD370, 0xBC48, 0xD371, - 0xBC49, 0xD372, 0xBC4A, 0xD373, 0xBC4B, 0xD374, 0xBC4C, 0xD375, - 0xBC4D, 0xD376, 0xBC4E, 0xD377, 0xBC4F, 0xD378, 0xBC50, 0xD379, - 0xBC51, 0xD37A, 0xBC52, 0xD37B, 0xBC53, 0xD37E, 0xBC54, 0xD37F, - 0xBC55, 0xD381, 0xBC56, 0xD382, 0xBC57, 0xD383, 0xBC58, 0xD385, - 0xBC59, 0xD386, 0xBC5A, 0xD387, 0xBC61, 0xD388, 0xBC62, 0xD389, - 0xBC63, 0xD38A, 0xBC64, 0xD38B, 0xBC65, 0xD38E, 0xBC66, 0xD392, - 0xBC67, 0xD393, 0xBC68, 0xD394, 0xBC69, 0xD395, 0xBC6A, 0xD396, - 0xBC6B, 0xD397, 0xBC6C, 0xD39A, 0xBC6D, 0xD39B, 0xBC6E, 0xD39D, - 0xBC6F, 0xD39E, 0xBC70, 0xD39F, 0xBC71, 0xD3A1, 0xBC72, 0xD3A2, - 0xBC73, 0xD3A3, 0xBC74, 0xD3A4, 0xBC75, 0xD3A5, 0xBC76, 0xD3A6, - 0xBC77, 0xD3A7, 0xBC78, 0xD3AA, 0xBC79, 0xD3AC, 0xBC7A, 0xD3AE, - 0xBC81, 0xD3AF, 0xBC82, 0xD3B0, 0xBC83, 0xD3B1, 0xBC84, 0xD3B2, - 0xBC85, 0xD3B3, 0xBC86, 0xD3B5, 0xBC87, 0xD3B6, 0xBC88, 0xD3B7, - 0xBC89, 0xD3B9, 0xBC8A, 0xD3BA, 0xBC8B, 0xD3BB, 0xBC8C, 0xD3BD, - 0xBC8D, 0xD3BE, 0xBC8E, 0xD3BF, 0xBC8F, 0xD3C0, 0xBC90, 0xD3C1, - 0xBC91, 0xD3C2, 0xBC92, 0xD3C3, 0xBC93, 0xD3C6, 0xBC94, 0xD3C7, - 0xBC95, 0xD3CA, 0xBC96, 0xD3CB, 0xBC97, 0xD3CC, 0xBC98, 0xD3CD, - 0xBC99, 0xD3CE, 0xBC9A, 0xD3CF, 0xBC9B, 0xD3D1, 0xBC9C, 0xD3D2, - 0xBC9D, 0xD3D3, 0xBC9E, 0xD3D4, 0xBC9F, 0xD3D5, 0xBCA0, 0xD3D6, - 0xBCA1, 0xC0E5, 0xBCA2, 0xC0E8, 0xBCA3, 0xC0EC, 0xBCA4, 0xC0F4, - 0xBCA5, 0xC0F5, 0xBCA6, 0xC0F7, 0xBCA7, 0xC0F9, 0xBCA8, 0xC100, - 0xBCA9, 0xC104, 0xBCAA, 0xC108, 0xBCAB, 0xC110, 0xBCAC, 0xC115, - 0xBCAD, 0xC11C, 0xBCAE, 0xC11D, 0xBCAF, 0xC11E, 0xBCB0, 0xC11F, - 0xBCB1, 0xC120, 0xBCB2, 0xC123, 0xBCB3, 0xC124, 0xBCB4, 0xC126, - 0xBCB5, 0xC127, 0xBCB6, 0xC12C, 0xBCB7, 0xC12D, 0xBCB8, 0xC12F, - 0xBCB9, 0xC130, 0xBCBA, 0xC131, 0xBCBB, 0xC136, 0xBCBC, 0xC138, - 0xBCBD, 0xC139, 0xBCBE, 0xC13C, 0xBCBF, 0xC140, 0xBCC0, 0xC148, - 0xBCC1, 0xC149, 0xBCC2, 0xC14B, 0xBCC3, 0xC14C, 0xBCC4, 0xC14D, - 0xBCC5, 0xC154, 0xBCC6, 0xC155, 0xBCC7, 0xC158, 0xBCC8, 0xC15C, - 0xBCC9, 0xC164, 0xBCCA, 0xC165, 0xBCCB, 0xC167, 0xBCCC, 0xC168, - 0xBCCD, 0xC169, 0xBCCE, 0xC170, 0xBCCF, 0xC174, 0xBCD0, 0xC178, - 0xBCD1, 0xC185, 0xBCD2, 0xC18C, 0xBCD3, 0xC18D, 0xBCD4, 0xC18E, - 0xBCD5, 0xC190, 0xBCD6, 0xC194, 0xBCD7, 0xC196, 0xBCD8, 0xC19C, - 0xBCD9, 0xC19D, 0xBCDA, 0xC19F, 0xBCDB, 0xC1A1, 0xBCDC, 0xC1A5, - 0xBCDD, 0xC1A8, 0xBCDE, 0xC1A9, 0xBCDF, 0xC1AC, 0xBCE0, 0xC1B0, - 0xBCE1, 0xC1BD, 0xBCE2, 0xC1C4, 0xBCE3, 0xC1C8, 0xBCE4, 0xC1CC, - 0xBCE5, 0xC1D4, 0xBCE6, 0xC1D7, 0xBCE7, 0xC1D8, 0xBCE8, 0xC1E0, - 0xBCE9, 0xC1E4, 0xBCEA, 0xC1E8, 0xBCEB, 0xC1F0, 0xBCEC, 0xC1F1, - 0xBCED, 0xC1F3, 0xBCEE, 0xC1FC, 0xBCEF, 0xC1FD, 0xBCF0, 0xC200, - 0xBCF1, 0xC204, 0xBCF2, 0xC20C, 0xBCF3, 0xC20D, 0xBCF4, 0xC20F, - 0xBCF5, 0xC211, 0xBCF6, 0xC218, 0xBCF7, 0xC219, 0xBCF8, 0xC21C, - 0xBCF9, 0xC21F, 0xBCFA, 0xC220, 0xBCFB, 0xC228, 0xBCFC, 0xC229, - 0xBCFD, 0xC22B, 0xBCFE, 0xC22D, 0xBD41, 0xD3D7, 0xBD42, 0xD3D9, - 0xBD43, 0xD3DA, 0xBD44, 0xD3DB, 0xBD45, 0xD3DC, 0xBD46, 0xD3DD, - 0xBD47, 0xD3DE, 0xBD48, 0xD3DF, 0xBD49, 0xD3E0, 0xBD4A, 0xD3E2, - 0xBD4B, 0xD3E4, 0xBD4C, 0xD3E5, 0xBD4D, 0xD3E6, 0xBD4E, 0xD3E7, - 0xBD4F, 0xD3E8, 0xBD50, 0xD3E9, 0xBD51, 0xD3EA, 0xBD52, 0xD3EB, - 0xBD53, 0xD3EE, 0xBD54, 0xD3EF, 0xBD55, 0xD3F1, 0xBD56, 0xD3F2, - 0xBD57, 0xD3F3, 0xBD58, 0xD3F5, 0xBD59, 0xD3F6, 0xBD5A, 0xD3F7, - 0xBD61, 0xD3F8, 0xBD62, 0xD3F9, 0xBD63, 0xD3FA, 0xBD64, 0xD3FB, - 0xBD65, 0xD3FE, 0xBD66, 0xD400, 0xBD67, 0xD402, 0xBD68, 0xD403, - 0xBD69, 0xD404, 0xBD6A, 0xD405, 0xBD6B, 0xD406, 0xBD6C, 0xD407, - 0xBD6D, 0xD409, 0xBD6E, 0xD40A, 0xBD6F, 0xD40B, 0xBD70, 0xD40C, - 0xBD71, 0xD40D, 0xBD72, 0xD40E, 0xBD73, 0xD40F, 0xBD74, 0xD410, - 0xBD75, 0xD411, 0xBD76, 0xD412, 0xBD77, 0xD413, 0xBD78, 0xD414, - 0xBD79, 0xD415, 0xBD7A, 0xD416, 0xBD81, 0xD417, 0xBD82, 0xD418, - 0xBD83, 0xD419, 0xBD84, 0xD41A, 0xBD85, 0xD41B, 0xBD86, 0xD41C, - 0xBD87, 0xD41E, 0xBD88, 0xD41F, 0xBD89, 0xD420, 0xBD8A, 0xD421, - 0xBD8B, 0xD422, 0xBD8C, 0xD423, 0xBD8D, 0xD424, 0xBD8E, 0xD425, - 0xBD8F, 0xD426, 0xBD90, 0xD427, 0xBD91, 0xD428, 0xBD92, 0xD429, - 0xBD93, 0xD42A, 0xBD94, 0xD42B, 0xBD95, 0xD42C, 0xBD96, 0xD42D, - 0xBD97, 0xD42E, 0xBD98, 0xD42F, 0xBD99, 0xD430, 0xBD9A, 0xD431, - 0xBD9B, 0xD432, 0xBD9C, 0xD433, 0xBD9D, 0xD434, 0xBD9E, 0xD435, - 0xBD9F, 0xD436, 0xBDA0, 0xD437, 0xBDA1, 0xC22F, 0xBDA2, 0xC231, - 0xBDA3, 0xC232, 0xBDA4, 0xC234, 0xBDA5, 0xC248, 0xBDA6, 0xC250, - 0xBDA7, 0xC251, 0xBDA8, 0xC254, 0xBDA9, 0xC258, 0xBDAA, 0xC260, - 0xBDAB, 0xC265, 0xBDAC, 0xC26C, 0xBDAD, 0xC26D, 0xBDAE, 0xC270, - 0xBDAF, 0xC274, 0xBDB0, 0xC27C, 0xBDB1, 0xC27D, 0xBDB2, 0xC27F, - 0xBDB3, 0xC281, 0xBDB4, 0xC288, 0xBDB5, 0xC289, 0xBDB6, 0xC290, - 0xBDB7, 0xC298, 0xBDB8, 0xC29B, 0xBDB9, 0xC29D, 0xBDBA, 0xC2A4, - 0xBDBB, 0xC2A5, 0xBDBC, 0xC2A8, 0xBDBD, 0xC2AC, 0xBDBE, 0xC2AD, - 0xBDBF, 0xC2B4, 0xBDC0, 0xC2B5, 0xBDC1, 0xC2B7, 0xBDC2, 0xC2B9, - 0xBDC3, 0xC2DC, 0xBDC4, 0xC2DD, 0xBDC5, 0xC2E0, 0xBDC6, 0xC2E3, - 0xBDC7, 0xC2E4, 0xBDC8, 0xC2EB, 0xBDC9, 0xC2EC, 0xBDCA, 0xC2ED, - 0xBDCB, 0xC2EF, 0xBDCC, 0xC2F1, 0xBDCD, 0xC2F6, 0xBDCE, 0xC2F8, - 0xBDCF, 0xC2F9, 0xBDD0, 0xC2FB, 0xBDD1, 0xC2FC, 0xBDD2, 0xC300, - 0xBDD3, 0xC308, 0xBDD4, 0xC309, 0xBDD5, 0xC30C, 0xBDD6, 0xC30D, - 0xBDD7, 0xC313, 0xBDD8, 0xC314, 0xBDD9, 0xC315, 0xBDDA, 0xC318, - 0xBDDB, 0xC31C, 0xBDDC, 0xC324, 0xBDDD, 0xC325, 0xBDDE, 0xC328, - 0xBDDF, 0xC329, 0xBDE0, 0xC345, 0xBDE1, 0xC368, 0xBDE2, 0xC369, - 0xBDE3, 0xC36C, 0xBDE4, 0xC370, 0xBDE5, 0xC372, 0xBDE6, 0xC378, - 0xBDE7, 0xC379, 0xBDE8, 0xC37C, 0xBDE9, 0xC37D, 0xBDEA, 0xC384, - 0xBDEB, 0xC388, 0xBDEC, 0xC38C, 0xBDED, 0xC3C0, 0xBDEE, 0xC3D8, - 0xBDEF, 0xC3D9, 0xBDF0, 0xC3DC, 0xBDF1, 0xC3DF, 0xBDF2, 0xC3E0, - 0xBDF3, 0xC3E2, 0xBDF4, 0xC3E8, 0xBDF5, 0xC3E9, 0xBDF6, 0xC3ED, - 0xBDF7, 0xC3F4, 0xBDF8, 0xC3F5, 0xBDF9, 0xC3F8, 0xBDFA, 0xC408, - 0xBDFB, 0xC410, 0xBDFC, 0xC424, 0xBDFD, 0xC42C, 0xBDFE, 0xC430, - 0xBE41, 0xD438, 0xBE42, 0xD439, 0xBE43, 0xD43A, 0xBE44, 0xD43B, - 0xBE45, 0xD43C, 0xBE46, 0xD43D, 0xBE47, 0xD43E, 0xBE48, 0xD43F, - 0xBE49, 0xD441, 0xBE4A, 0xD442, 0xBE4B, 0xD443, 0xBE4C, 0xD445, - 0xBE4D, 0xD446, 0xBE4E, 0xD447, 0xBE4F, 0xD448, 0xBE50, 0xD449, - 0xBE51, 0xD44A, 0xBE52, 0xD44B, 0xBE53, 0xD44C, 0xBE54, 0xD44D, - 0xBE55, 0xD44E, 0xBE56, 0xD44F, 0xBE57, 0xD450, 0xBE58, 0xD451, - 0xBE59, 0xD452, 0xBE5A, 0xD453, 0xBE61, 0xD454, 0xBE62, 0xD455, - 0xBE63, 0xD456, 0xBE64, 0xD457, 0xBE65, 0xD458, 0xBE66, 0xD459, - 0xBE67, 0xD45A, 0xBE68, 0xD45B, 0xBE69, 0xD45D, 0xBE6A, 0xD45E, - 0xBE6B, 0xD45F, 0xBE6C, 0xD461, 0xBE6D, 0xD462, 0xBE6E, 0xD463, - 0xBE6F, 0xD465, 0xBE70, 0xD466, 0xBE71, 0xD467, 0xBE72, 0xD468, - 0xBE73, 0xD469, 0xBE74, 0xD46A, 0xBE75, 0xD46B, 0xBE76, 0xD46C, - 0xBE77, 0xD46E, 0xBE78, 0xD470, 0xBE79, 0xD471, 0xBE7A, 0xD472, - 0xBE81, 0xD473, 0xBE82, 0xD474, 0xBE83, 0xD475, 0xBE84, 0xD476, - 0xBE85, 0xD477, 0xBE86, 0xD47A, 0xBE87, 0xD47B, 0xBE88, 0xD47D, - 0xBE89, 0xD47E, 0xBE8A, 0xD481, 0xBE8B, 0xD483, 0xBE8C, 0xD484, - 0xBE8D, 0xD485, 0xBE8E, 0xD486, 0xBE8F, 0xD487, 0xBE90, 0xD48A, - 0xBE91, 0xD48C, 0xBE92, 0xD48E, 0xBE93, 0xD48F, 0xBE94, 0xD490, - 0xBE95, 0xD491, 0xBE96, 0xD492, 0xBE97, 0xD493, 0xBE98, 0xD495, - 0xBE99, 0xD496, 0xBE9A, 0xD497, 0xBE9B, 0xD498, 0xBE9C, 0xD499, - 0xBE9D, 0xD49A, 0xBE9E, 0xD49B, 0xBE9F, 0xD49C, 0xBEA0, 0xD49D, - 0xBEA1, 0xC434, 0xBEA2, 0xC43C, 0xBEA3, 0xC43D, 0xBEA4, 0xC448, - 0xBEA5, 0xC464, 0xBEA6, 0xC465, 0xBEA7, 0xC468, 0xBEA8, 0xC46C, - 0xBEA9, 0xC474, 0xBEAA, 0xC475, 0xBEAB, 0xC479, 0xBEAC, 0xC480, - 0xBEAD, 0xC494, 0xBEAE, 0xC49C, 0xBEAF, 0xC4B8, 0xBEB0, 0xC4BC, - 0xBEB1, 0xC4E9, 0xBEB2, 0xC4F0, 0xBEB3, 0xC4F1, 0xBEB4, 0xC4F4, - 0xBEB5, 0xC4F8, 0xBEB6, 0xC4FA, 0xBEB7, 0xC4FF, 0xBEB8, 0xC500, - 0xBEB9, 0xC501, 0xBEBA, 0xC50C, 0xBEBB, 0xC510, 0xBEBC, 0xC514, - 0xBEBD, 0xC51C, 0xBEBE, 0xC528, 0xBEBF, 0xC529, 0xBEC0, 0xC52C, - 0xBEC1, 0xC530, 0xBEC2, 0xC538, 0xBEC3, 0xC539, 0xBEC4, 0xC53B, - 0xBEC5, 0xC53D, 0xBEC6, 0xC544, 0xBEC7, 0xC545, 0xBEC8, 0xC548, - 0xBEC9, 0xC549, 0xBECA, 0xC54A, 0xBECB, 0xC54C, 0xBECC, 0xC54D, - 0xBECD, 0xC54E, 0xBECE, 0xC553, 0xBECF, 0xC554, 0xBED0, 0xC555, - 0xBED1, 0xC557, 0xBED2, 0xC558, 0xBED3, 0xC559, 0xBED4, 0xC55D, - 0xBED5, 0xC55E, 0xBED6, 0xC560, 0xBED7, 0xC561, 0xBED8, 0xC564, - 0xBED9, 0xC568, 0xBEDA, 0xC570, 0xBEDB, 0xC571, 0xBEDC, 0xC573, - 0xBEDD, 0xC574, 0xBEDE, 0xC575, 0xBEDF, 0xC57C, 0xBEE0, 0xC57D, - 0xBEE1, 0xC580, 0xBEE2, 0xC584, 0xBEE3, 0xC587, 0xBEE4, 0xC58C, - 0xBEE5, 0xC58D, 0xBEE6, 0xC58F, 0xBEE7, 0xC591, 0xBEE8, 0xC595, - 0xBEE9, 0xC597, 0xBEEA, 0xC598, 0xBEEB, 0xC59C, 0xBEEC, 0xC5A0, - 0xBEED, 0xC5A9, 0xBEEE, 0xC5B4, 0xBEEF, 0xC5B5, 0xBEF0, 0xC5B8, - 0xBEF1, 0xC5B9, 0xBEF2, 0xC5BB, 0xBEF3, 0xC5BC, 0xBEF4, 0xC5BD, - 0xBEF5, 0xC5BE, 0xBEF6, 0xC5C4, 0xBEF7, 0xC5C5, 0xBEF8, 0xC5C6, - 0xBEF9, 0xC5C7, 0xBEFA, 0xC5C8, 0xBEFB, 0xC5C9, 0xBEFC, 0xC5CA, - 0xBEFD, 0xC5CC, 0xBEFE, 0xC5CE, 0xBF41, 0xD49E, 0xBF42, 0xD49F, - 0xBF43, 0xD4A0, 0xBF44, 0xD4A1, 0xBF45, 0xD4A2, 0xBF46, 0xD4A3, - 0xBF47, 0xD4A4, 0xBF48, 0xD4A5, 0xBF49, 0xD4A6, 0xBF4A, 0xD4A7, - 0xBF4B, 0xD4A8, 0xBF4C, 0xD4AA, 0xBF4D, 0xD4AB, 0xBF4E, 0xD4AC, - 0xBF4F, 0xD4AD, 0xBF50, 0xD4AE, 0xBF51, 0xD4AF, 0xBF52, 0xD4B0, - 0xBF53, 0xD4B1, 0xBF54, 0xD4B2, 0xBF55, 0xD4B3, 0xBF56, 0xD4B4, - 0xBF57, 0xD4B5, 0xBF58, 0xD4B6, 0xBF59, 0xD4B7, 0xBF5A, 0xD4B8, - 0xBF61, 0xD4B9, 0xBF62, 0xD4BA, 0xBF63, 0xD4BB, 0xBF64, 0xD4BC, - 0xBF65, 0xD4BD, 0xBF66, 0xD4BE, 0xBF67, 0xD4BF, 0xBF68, 0xD4C0, - 0xBF69, 0xD4C1, 0xBF6A, 0xD4C2, 0xBF6B, 0xD4C3, 0xBF6C, 0xD4C4, - 0xBF6D, 0xD4C5, 0xBF6E, 0xD4C6, 0xBF6F, 0xD4C7, 0xBF70, 0xD4C8, - 0xBF71, 0xD4C9, 0xBF72, 0xD4CA, 0xBF73, 0xD4CB, 0xBF74, 0xD4CD, - 0xBF75, 0xD4CE, 0xBF76, 0xD4CF, 0xBF77, 0xD4D1, 0xBF78, 0xD4D2, - 0xBF79, 0xD4D3, 0xBF7A, 0xD4D5, 0xBF81, 0xD4D6, 0xBF82, 0xD4D7, - 0xBF83, 0xD4D8, 0xBF84, 0xD4D9, 0xBF85, 0xD4DA, 0xBF86, 0xD4DB, - 0xBF87, 0xD4DD, 0xBF88, 0xD4DE, 0xBF89, 0xD4E0, 0xBF8A, 0xD4E1, - 0xBF8B, 0xD4E2, 0xBF8C, 0xD4E3, 0xBF8D, 0xD4E4, 0xBF8E, 0xD4E5, - 0xBF8F, 0xD4E6, 0xBF90, 0xD4E7, 0xBF91, 0xD4E9, 0xBF92, 0xD4EA, - 0xBF93, 0xD4EB, 0xBF94, 0xD4ED, 0xBF95, 0xD4EE, 0xBF96, 0xD4EF, - 0xBF97, 0xD4F1, 0xBF98, 0xD4F2, 0xBF99, 0xD4F3, 0xBF9A, 0xD4F4, - 0xBF9B, 0xD4F5, 0xBF9C, 0xD4F6, 0xBF9D, 0xD4F7, 0xBF9E, 0xD4F9, - 0xBF9F, 0xD4FA, 0xBFA0, 0xD4FC, 0xBFA1, 0xC5D0, 0xBFA2, 0xC5D1, - 0xBFA3, 0xC5D4, 0xBFA4, 0xC5D8, 0xBFA5, 0xC5E0, 0xBFA6, 0xC5E1, - 0xBFA7, 0xC5E3, 0xBFA8, 0xC5E5, 0xBFA9, 0xC5EC, 0xBFAA, 0xC5ED, - 0xBFAB, 0xC5EE, 0xBFAC, 0xC5F0, 0xBFAD, 0xC5F4, 0xBFAE, 0xC5F6, - 0xBFAF, 0xC5F7, 0xBFB0, 0xC5FC, 0xBFB1, 0xC5FD, 0xBFB2, 0xC5FE, - 0xBFB3, 0xC5FF, 0xBFB4, 0xC600, 0xBFB5, 0xC601, 0xBFB6, 0xC605, - 0xBFB7, 0xC606, 0xBFB8, 0xC607, 0xBFB9, 0xC608, 0xBFBA, 0xC60C, - 0xBFBB, 0xC610, 0xBFBC, 0xC618, 0xBFBD, 0xC619, 0xBFBE, 0xC61B, - 0xBFBF, 0xC61C, 0xBFC0, 0xC624, 0xBFC1, 0xC625, 0xBFC2, 0xC628, - 0xBFC3, 0xC62C, 0xBFC4, 0xC62D, 0xBFC5, 0xC62E, 0xBFC6, 0xC630, - 0xBFC7, 0xC633, 0xBFC8, 0xC634, 0xBFC9, 0xC635, 0xBFCA, 0xC637, - 0xBFCB, 0xC639, 0xBFCC, 0xC63B, 0xBFCD, 0xC640, 0xBFCE, 0xC641, - 0xBFCF, 0xC644, 0xBFD0, 0xC648, 0xBFD1, 0xC650, 0xBFD2, 0xC651, - 0xBFD3, 0xC653, 0xBFD4, 0xC654, 0xBFD5, 0xC655, 0xBFD6, 0xC65C, - 0xBFD7, 0xC65D, 0xBFD8, 0xC660, 0xBFD9, 0xC66C, 0xBFDA, 0xC66F, - 0xBFDB, 0xC671, 0xBFDC, 0xC678, 0xBFDD, 0xC679, 0xBFDE, 0xC67C, - 0xBFDF, 0xC680, 0xBFE0, 0xC688, 0xBFE1, 0xC689, 0xBFE2, 0xC68B, - 0xBFE3, 0xC68D, 0xBFE4, 0xC694, 0xBFE5, 0xC695, 0xBFE6, 0xC698, - 0xBFE7, 0xC69C, 0xBFE8, 0xC6A4, 0xBFE9, 0xC6A5, 0xBFEA, 0xC6A7, - 0xBFEB, 0xC6A9, 0xBFEC, 0xC6B0, 0xBFED, 0xC6B1, 0xBFEE, 0xC6B4, - 0xBFEF, 0xC6B8, 0xBFF0, 0xC6B9, 0xBFF1, 0xC6BA, 0xBFF2, 0xC6C0, - 0xBFF3, 0xC6C1, 0xBFF4, 0xC6C3, 0xBFF5, 0xC6C5, 0xBFF6, 0xC6CC, - 0xBFF7, 0xC6CD, 0xBFF8, 0xC6D0, 0xBFF9, 0xC6D4, 0xBFFA, 0xC6DC, - 0xBFFB, 0xC6DD, 0xBFFC, 0xC6E0, 0xBFFD, 0xC6E1, 0xBFFE, 0xC6E8, - 0xC041, 0xD4FE, 0xC042, 0xD4FF, 0xC043, 0xD500, 0xC044, 0xD501, - 0xC045, 0xD502, 0xC046, 0xD503, 0xC047, 0xD505, 0xC048, 0xD506, - 0xC049, 0xD507, 0xC04A, 0xD509, 0xC04B, 0xD50A, 0xC04C, 0xD50B, - 0xC04D, 0xD50D, 0xC04E, 0xD50E, 0xC04F, 0xD50F, 0xC050, 0xD510, - 0xC051, 0xD511, 0xC052, 0xD512, 0xC053, 0xD513, 0xC054, 0xD516, - 0xC055, 0xD518, 0xC056, 0xD519, 0xC057, 0xD51A, 0xC058, 0xD51B, - 0xC059, 0xD51C, 0xC05A, 0xD51D, 0xC061, 0xD51E, 0xC062, 0xD51F, - 0xC063, 0xD520, 0xC064, 0xD521, 0xC065, 0xD522, 0xC066, 0xD523, - 0xC067, 0xD524, 0xC068, 0xD525, 0xC069, 0xD526, 0xC06A, 0xD527, - 0xC06B, 0xD528, 0xC06C, 0xD529, 0xC06D, 0xD52A, 0xC06E, 0xD52B, - 0xC06F, 0xD52C, 0xC070, 0xD52D, 0xC071, 0xD52E, 0xC072, 0xD52F, - 0xC073, 0xD530, 0xC074, 0xD531, 0xC075, 0xD532, 0xC076, 0xD533, - 0xC077, 0xD534, 0xC078, 0xD535, 0xC079, 0xD536, 0xC07A, 0xD537, - 0xC081, 0xD538, 0xC082, 0xD539, 0xC083, 0xD53A, 0xC084, 0xD53B, - 0xC085, 0xD53E, 0xC086, 0xD53F, 0xC087, 0xD541, 0xC088, 0xD542, - 0xC089, 0xD543, 0xC08A, 0xD545, 0xC08B, 0xD546, 0xC08C, 0xD547, - 0xC08D, 0xD548, 0xC08E, 0xD549, 0xC08F, 0xD54A, 0xC090, 0xD54B, - 0xC091, 0xD54E, 0xC092, 0xD550, 0xC093, 0xD552, 0xC094, 0xD553, - 0xC095, 0xD554, 0xC096, 0xD555, 0xC097, 0xD556, 0xC098, 0xD557, - 0xC099, 0xD55A, 0xC09A, 0xD55B, 0xC09B, 0xD55D, 0xC09C, 0xD55E, - 0xC09D, 0xD55F, 0xC09E, 0xD561, 0xC09F, 0xD562, 0xC0A0, 0xD563, - 0xC0A1, 0xC6E9, 0xC0A2, 0xC6EC, 0xC0A3, 0xC6F0, 0xC0A4, 0xC6F8, - 0xC0A5, 0xC6F9, 0xC0A6, 0xC6FD, 0xC0A7, 0xC704, 0xC0A8, 0xC705, - 0xC0A9, 0xC708, 0xC0AA, 0xC70C, 0xC0AB, 0xC714, 0xC0AC, 0xC715, - 0xC0AD, 0xC717, 0xC0AE, 0xC719, 0xC0AF, 0xC720, 0xC0B0, 0xC721, - 0xC0B1, 0xC724, 0xC0B2, 0xC728, 0xC0B3, 0xC730, 0xC0B4, 0xC731, - 0xC0B5, 0xC733, 0xC0B6, 0xC735, 0xC0B7, 0xC737, 0xC0B8, 0xC73C, - 0xC0B9, 0xC73D, 0xC0BA, 0xC740, 0xC0BB, 0xC744, 0xC0BC, 0xC74A, - 0xC0BD, 0xC74C, 0xC0BE, 0xC74D, 0xC0BF, 0xC74F, 0xC0C0, 0xC751, - 0xC0C1, 0xC752, 0xC0C2, 0xC753, 0xC0C3, 0xC754, 0xC0C4, 0xC755, - 0xC0C5, 0xC756, 0xC0C6, 0xC757, 0xC0C7, 0xC758, 0xC0C8, 0xC75C, - 0xC0C9, 0xC760, 0xC0CA, 0xC768, 0xC0CB, 0xC76B, 0xC0CC, 0xC774, - 0xC0CD, 0xC775, 0xC0CE, 0xC778, 0xC0CF, 0xC77C, 0xC0D0, 0xC77D, - 0xC0D1, 0xC77E, 0xC0D2, 0xC783, 0xC0D3, 0xC784, 0xC0D4, 0xC785, - 0xC0D5, 0xC787, 0xC0D6, 0xC788, 0xC0D7, 0xC789, 0xC0D8, 0xC78A, - 0xC0D9, 0xC78E, 0xC0DA, 0xC790, 0xC0DB, 0xC791, 0xC0DC, 0xC794, - 0xC0DD, 0xC796, 0xC0DE, 0xC797, 0xC0DF, 0xC798, 0xC0E0, 0xC79A, - 0xC0E1, 0xC7A0, 0xC0E2, 0xC7A1, 0xC0E3, 0xC7A3, 0xC0E4, 0xC7A4, - 0xC0E5, 0xC7A5, 0xC0E6, 0xC7A6, 0xC0E7, 0xC7AC, 0xC0E8, 0xC7AD, - 0xC0E9, 0xC7B0, 0xC0EA, 0xC7B4, 0xC0EB, 0xC7BC, 0xC0EC, 0xC7BD, - 0xC0ED, 0xC7BF, 0xC0EE, 0xC7C0, 0xC0EF, 0xC7C1, 0xC0F0, 0xC7C8, - 0xC0F1, 0xC7C9, 0xC0F2, 0xC7CC, 0xC0F3, 0xC7CE, 0xC0F4, 0xC7D0, - 0xC0F5, 0xC7D8, 0xC0F6, 0xC7DD, 0xC0F7, 0xC7E4, 0xC0F8, 0xC7E8, - 0xC0F9, 0xC7EC, 0xC0FA, 0xC800, 0xC0FB, 0xC801, 0xC0FC, 0xC804, - 0xC0FD, 0xC808, 0xC0FE, 0xC80A, 0xC141, 0xD564, 0xC142, 0xD566, - 0xC143, 0xD567, 0xC144, 0xD56A, 0xC145, 0xD56C, 0xC146, 0xD56E, - 0xC147, 0xD56F, 0xC148, 0xD570, 0xC149, 0xD571, 0xC14A, 0xD572, - 0xC14B, 0xD573, 0xC14C, 0xD576, 0xC14D, 0xD577, 0xC14E, 0xD579, - 0xC14F, 0xD57A, 0xC150, 0xD57B, 0xC151, 0xD57D, 0xC152, 0xD57E, - 0xC153, 0xD57F, 0xC154, 0xD580, 0xC155, 0xD581, 0xC156, 0xD582, - 0xC157, 0xD583, 0xC158, 0xD586, 0xC159, 0xD58A, 0xC15A, 0xD58B, - 0xC161, 0xD58C, 0xC162, 0xD58D, 0xC163, 0xD58E, 0xC164, 0xD58F, - 0xC165, 0xD591, 0xC166, 0xD592, 0xC167, 0xD593, 0xC168, 0xD594, - 0xC169, 0xD595, 0xC16A, 0xD596, 0xC16B, 0xD597, 0xC16C, 0xD598, - 0xC16D, 0xD599, 0xC16E, 0xD59A, 0xC16F, 0xD59B, 0xC170, 0xD59C, - 0xC171, 0xD59D, 0xC172, 0xD59E, 0xC173, 0xD59F, 0xC174, 0xD5A0, - 0xC175, 0xD5A1, 0xC176, 0xD5A2, 0xC177, 0xD5A3, 0xC178, 0xD5A4, - 0xC179, 0xD5A6, 0xC17A, 0xD5A7, 0xC181, 0xD5A8, 0xC182, 0xD5A9, - 0xC183, 0xD5AA, 0xC184, 0xD5AB, 0xC185, 0xD5AC, 0xC186, 0xD5AD, - 0xC187, 0xD5AE, 0xC188, 0xD5AF, 0xC189, 0xD5B0, 0xC18A, 0xD5B1, - 0xC18B, 0xD5B2, 0xC18C, 0xD5B3, 0xC18D, 0xD5B4, 0xC18E, 0xD5B5, - 0xC18F, 0xD5B6, 0xC190, 0xD5B7, 0xC191, 0xD5B8, 0xC192, 0xD5B9, - 0xC193, 0xD5BA, 0xC194, 0xD5BB, 0xC195, 0xD5BC, 0xC196, 0xD5BD, - 0xC197, 0xD5BE, 0xC198, 0xD5BF, 0xC199, 0xD5C0, 0xC19A, 0xD5C1, - 0xC19B, 0xD5C2, 0xC19C, 0xD5C3, 0xC19D, 0xD5C4, 0xC19E, 0xD5C5, - 0xC19F, 0xD5C6, 0xC1A0, 0xD5C7, 0xC1A1, 0xC810, 0xC1A2, 0xC811, - 0xC1A3, 0xC813, 0xC1A4, 0xC815, 0xC1A5, 0xC816, 0xC1A6, 0xC81C, - 0xC1A7, 0xC81D, 0xC1A8, 0xC820, 0xC1A9, 0xC824, 0xC1AA, 0xC82C, - 0xC1AB, 0xC82D, 0xC1AC, 0xC82F, 0xC1AD, 0xC831, 0xC1AE, 0xC838, - 0xC1AF, 0xC83C, 0xC1B0, 0xC840, 0xC1B1, 0xC848, 0xC1B2, 0xC849, - 0xC1B3, 0xC84C, 0xC1B4, 0xC84D, 0xC1B5, 0xC854, 0xC1B6, 0xC870, - 0xC1B7, 0xC871, 0xC1B8, 0xC874, 0xC1B9, 0xC878, 0xC1BA, 0xC87A, - 0xC1BB, 0xC880, 0xC1BC, 0xC881, 0xC1BD, 0xC883, 0xC1BE, 0xC885, - 0xC1BF, 0xC886, 0xC1C0, 0xC887, 0xC1C1, 0xC88B, 0xC1C2, 0xC88C, - 0xC1C3, 0xC88D, 0xC1C4, 0xC894, 0xC1C5, 0xC89D, 0xC1C6, 0xC89F, - 0xC1C7, 0xC8A1, 0xC1C8, 0xC8A8, 0xC1C9, 0xC8BC, 0xC1CA, 0xC8BD, - 0xC1CB, 0xC8C4, 0xC1CC, 0xC8C8, 0xC1CD, 0xC8CC, 0xC1CE, 0xC8D4, - 0xC1CF, 0xC8D5, 0xC1D0, 0xC8D7, 0xC1D1, 0xC8D9, 0xC1D2, 0xC8E0, - 0xC1D3, 0xC8E1, 0xC1D4, 0xC8E4, 0xC1D5, 0xC8F5, 0xC1D6, 0xC8FC, - 0xC1D7, 0xC8FD, 0xC1D8, 0xC900, 0xC1D9, 0xC904, 0xC1DA, 0xC905, - 0xC1DB, 0xC906, 0xC1DC, 0xC90C, 0xC1DD, 0xC90D, 0xC1DE, 0xC90F, - 0xC1DF, 0xC911, 0xC1E0, 0xC918, 0xC1E1, 0xC92C, 0xC1E2, 0xC934, - 0xC1E3, 0xC950, 0xC1E4, 0xC951, 0xC1E5, 0xC954, 0xC1E6, 0xC958, - 0xC1E7, 0xC960, 0xC1E8, 0xC961, 0xC1E9, 0xC963, 0xC1EA, 0xC96C, - 0xC1EB, 0xC970, 0xC1EC, 0xC974, 0xC1ED, 0xC97C, 0xC1EE, 0xC988, - 0xC1EF, 0xC989, 0xC1F0, 0xC98C, 0xC1F1, 0xC990, 0xC1F2, 0xC998, - 0xC1F3, 0xC999, 0xC1F4, 0xC99B, 0xC1F5, 0xC99D, 0xC1F6, 0xC9C0, - 0xC1F7, 0xC9C1, 0xC1F8, 0xC9C4, 0xC1F9, 0xC9C7, 0xC1FA, 0xC9C8, - 0xC1FB, 0xC9CA, 0xC1FC, 0xC9D0, 0xC1FD, 0xC9D1, 0xC1FE, 0xC9D3, - 0xC241, 0xD5CA, 0xC242, 0xD5CB, 0xC243, 0xD5CD, 0xC244, 0xD5CE, - 0xC245, 0xD5CF, 0xC246, 0xD5D1, 0xC247, 0xD5D3, 0xC248, 0xD5D4, - 0xC249, 0xD5D5, 0xC24A, 0xD5D6, 0xC24B, 0xD5D7, 0xC24C, 0xD5DA, - 0xC24D, 0xD5DC, 0xC24E, 0xD5DE, 0xC24F, 0xD5DF, 0xC250, 0xD5E0, - 0xC251, 0xD5E1, 0xC252, 0xD5E2, 0xC253, 0xD5E3, 0xC254, 0xD5E6, - 0xC255, 0xD5E7, 0xC256, 0xD5E9, 0xC257, 0xD5EA, 0xC258, 0xD5EB, - 0xC259, 0xD5ED, 0xC25A, 0xD5EE, 0xC261, 0xD5EF, 0xC262, 0xD5F0, - 0xC263, 0xD5F1, 0xC264, 0xD5F2, 0xC265, 0xD5F3, 0xC266, 0xD5F6, - 0xC267, 0xD5F8, 0xC268, 0xD5FA, 0xC269, 0xD5FB, 0xC26A, 0xD5FC, - 0xC26B, 0xD5FD, 0xC26C, 0xD5FE, 0xC26D, 0xD5FF, 0xC26E, 0xD602, - 0xC26F, 0xD603, 0xC270, 0xD605, 0xC271, 0xD606, 0xC272, 0xD607, - 0xC273, 0xD609, 0xC274, 0xD60A, 0xC275, 0xD60B, 0xC276, 0xD60C, - 0xC277, 0xD60D, 0xC278, 0xD60E, 0xC279, 0xD60F, 0xC27A, 0xD612, - 0xC281, 0xD616, 0xC282, 0xD617, 0xC283, 0xD618, 0xC284, 0xD619, - 0xC285, 0xD61A, 0xC286, 0xD61B, 0xC287, 0xD61D, 0xC288, 0xD61E, - 0xC289, 0xD61F, 0xC28A, 0xD621, 0xC28B, 0xD622, 0xC28C, 0xD623, - 0xC28D, 0xD625, 0xC28E, 0xD626, 0xC28F, 0xD627, 0xC290, 0xD628, - 0xC291, 0xD629, 0xC292, 0xD62A, 0xC293, 0xD62B, 0xC294, 0xD62C, - 0xC295, 0xD62E, 0xC296, 0xD62F, 0xC297, 0xD630, 0xC298, 0xD631, - 0xC299, 0xD632, 0xC29A, 0xD633, 0xC29B, 0xD634, 0xC29C, 0xD635, - 0xC29D, 0xD636, 0xC29E, 0xD637, 0xC29F, 0xD63A, 0xC2A0, 0xD63B, - 0xC2A1, 0xC9D5, 0xC2A2, 0xC9D6, 0xC2A3, 0xC9D9, 0xC2A4, 0xC9DA, - 0xC2A5, 0xC9DC, 0xC2A6, 0xC9DD, 0xC2A7, 0xC9E0, 0xC2A8, 0xC9E2, - 0xC2A9, 0xC9E4, 0xC2AA, 0xC9E7, 0xC2AB, 0xC9EC, 0xC2AC, 0xC9ED, - 0xC2AD, 0xC9EF, 0xC2AE, 0xC9F0, 0xC2AF, 0xC9F1, 0xC2B0, 0xC9F8, - 0xC2B1, 0xC9F9, 0xC2B2, 0xC9FC, 0xC2B3, 0xCA00, 0xC2B4, 0xCA08, - 0xC2B5, 0xCA09, 0xC2B6, 0xCA0B, 0xC2B7, 0xCA0C, 0xC2B8, 0xCA0D, - 0xC2B9, 0xCA14, 0xC2BA, 0xCA18, 0xC2BB, 0xCA29, 0xC2BC, 0xCA4C, - 0xC2BD, 0xCA4D, 0xC2BE, 0xCA50, 0xC2BF, 0xCA54, 0xC2C0, 0xCA5C, - 0xC2C1, 0xCA5D, 0xC2C2, 0xCA5F, 0xC2C3, 0xCA60, 0xC2C4, 0xCA61, - 0xC2C5, 0xCA68, 0xC2C6, 0xCA7D, 0xC2C7, 0xCA84, 0xC2C8, 0xCA98, - 0xC2C9, 0xCABC, 0xC2CA, 0xCABD, 0xC2CB, 0xCAC0, 0xC2CC, 0xCAC4, - 0xC2CD, 0xCACC, 0xC2CE, 0xCACD, 0xC2CF, 0xCACF, 0xC2D0, 0xCAD1, - 0xC2D1, 0xCAD3, 0xC2D2, 0xCAD8, 0xC2D3, 0xCAD9, 0xC2D4, 0xCAE0, - 0xC2D5, 0xCAEC, 0xC2D6, 0xCAF4, 0xC2D7, 0xCB08, 0xC2D8, 0xCB10, - 0xC2D9, 0xCB14, 0xC2DA, 0xCB18, 0xC2DB, 0xCB20, 0xC2DC, 0xCB21, - 0xC2DD, 0xCB41, 0xC2DE, 0xCB48, 0xC2DF, 0xCB49, 0xC2E0, 0xCB4C, - 0xC2E1, 0xCB50, 0xC2E2, 0xCB58, 0xC2E3, 0xCB59, 0xC2E4, 0xCB5D, - 0xC2E5, 0xCB64, 0xC2E6, 0xCB78, 0xC2E7, 0xCB79, 0xC2E8, 0xCB9C, - 0xC2E9, 0xCBB8, 0xC2EA, 0xCBD4, 0xC2EB, 0xCBE4, 0xC2EC, 0xCBE7, - 0xC2ED, 0xCBE9, 0xC2EE, 0xCC0C, 0xC2EF, 0xCC0D, 0xC2F0, 0xCC10, - 0xC2F1, 0xCC14, 0xC2F2, 0xCC1C, 0xC2F3, 0xCC1D, 0xC2F4, 0xCC21, - 0xC2F5, 0xCC22, 0xC2F6, 0xCC27, 0xC2F7, 0xCC28, 0xC2F8, 0xCC29, - 0xC2F9, 0xCC2C, 0xC2FA, 0xCC2E, 0xC2FB, 0xCC30, 0xC2FC, 0xCC38, - 0xC2FD, 0xCC39, 0xC2FE, 0xCC3B, 0xC341, 0xD63D, 0xC342, 0xD63E, - 0xC343, 0xD63F, 0xC344, 0xD641, 0xC345, 0xD642, 0xC346, 0xD643, - 0xC347, 0xD644, 0xC348, 0xD646, 0xC349, 0xD647, 0xC34A, 0xD64A, - 0xC34B, 0xD64C, 0xC34C, 0xD64E, 0xC34D, 0xD64F, 0xC34E, 0xD650, - 0xC34F, 0xD652, 0xC350, 0xD653, 0xC351, 0xD656, 0xC352, 0xD657, - 0xC353, 0xD659, 0xC354, 0xD65A, 0xC355, 0xD65B, 0xC356, 0xD65D, - 0xC357, 0xD65E, 0xC358, 0xD65F, 0xC359, 0xD660, 0xC35A, 0xD661, - 0xC361, 0xD662, 0xC362, 0xD663, 0xC363, 0xD664, 0xC364, 0xD665, - 0xC365, 0xD666, 0xC366, 0xD668, 0xC367, 0xD66A, 0xC368, 0xD66B, - 0xC369, 0xD66C, 0xC36A, 0xD66D, 0xC36B, 0xD66E, 0xC36C, 0xD66F, - 0xC36D, 0xD672, 0xC36E, 0xD673, 0xC36F, 0xD675, 0xC370, 0xD676, - 0xC371, 0xD677, 0xC372, 0xD678, 0xC373, 0xD679, 0xC374, 0xD67A, - 0xC375, 0xD67B, 0xC376, 0xD67C, 0xC377, 0xD67D, 0xC378, 0xD67E, - 0xC379, 0xD67F, 0xC37A, 0xD680, 0xC381, 0xD681, 0xC382, 0xD682, - 0xC383, 0xD684, 0xC384, 0xD686, 0xC385, 0xD687, 0xC386, 0xD688, - 0xC387, 0xD689, 0xC388, 0xD68A, 0xC389, 0xD68B, 0xC38A, 0xD68E, - 0xC38B, 0xD68F, 0xC38C, 0xD691, 0xC38D, 0xD692, 0xC38E, 0xD693, - 0xC38F, 0xD695, 0xC390, 0xD696, 0xC391, 0xD697, 0xC392, 0xD698, - 0xC393, 0xD699, 0xC394, 0xD69A, 0xC395, 0xD69B, 0xC396, 0xD69C, - 0xC397, 0xD69E, 0xC398, 0xD6A0, 0xC399, 0xD6A2, 0xC39A, 0xD6A3, - 0xC39B, 0xD6A4, 0xC39C, 0xD6A5, 0xC39D, 0xD6A6, 0xC39E, 0xD6A7, - 0xC39F, 0xD6A9, 0xC3A0, 0xD6AA, 0xC3A1, 0xCC3C, 0xC3A2, 0xCC3D, - 0xC3A3, 0xCC3E, 0xC3A4, 0xCC44, 0xC3A5, 0xCC45, 0xC3A6, 0xCC48, - 0xC3A7, 0xCC4C, 0xC3A8, 0xCC54, 0xC3A9, 0xCC55, 0xC3AA, 0xCC57, - 0xC3AB, 0xCC58, 0xC3AC, 0xCC59, 0xC3AD, 0xCC60, 0xC3AE, 0xCC64, - 0xC3AF, 0xCC66, 0xC3B0, 0xCC68, 0xC3B1, 0xCC70, 0xC3B2, 0xCC75, - 0xC3B3, 0xCC98, 0xC3B4, 0xCC99, 0xC3B5, 0xCC9C, 0xC3B6, 0xCCA0, - 0xC3B7, 0xCCA8, 0xC3B8, 0xCCA9, 0xC3B9, 0xCCAB, 0xC3BA, 0xCCAC, - 0xC3BB, 0xCCAD, 0xC3BC, 0xCCB4, 0xC3BD, 0xCCB5, 0xC3BE, 0xCCB8, - 0xC3BF, 0xCCBC, 0xC3C0, 0xCCC4, 0xC3C1, 0xCCC5, 0xC3C2, 0xCCC7, - 0xC3C3, 0xCCC9, 0xC3C4, 0xCCD0, 0xC3C5, 0xCCD4, 0xC3C6, 0xCCE4, - 0xC3C7, 0xCCEC, 0xC3C8, 0xCCF0, 0xC3C9, 0xCD01, 0xC3CA, 0xCD08, - 0xC3CB, 0xCD09, 0xC3CC, 0xCD0C, 0xC3CD, 0xCD10, 0xC3CE, 0xCD18, - 0xC3CF, 0xCD19, 0xC3D0, 0xCD1B, 0xC3D1, 0xCD1D, 0xC3D2, 0xCD24, - 0xC3D3, 0xCD28, 0xC3D4, 0xCD2C, 0xC3D5, 0xCD39, 0xC3D6, 0xCD5C, - 0xC3D7, 0xCD60, 0xC3D8, 0xCD64, 0xC3D9, 0xCD6C, 0xC3DA, 0xCD6D, - 0xC3DB, 0xCD6F, 0xC3DC, 0xCD71, 0xC3DD, 0xCD78, 0xC3DE, 0xCD88, - 0xC3DF, 0xCD94, 0xC3E0, 0xCD95, 0xC3E1, 0xCD98, 0xC3E2, 0xCD9C, - 0xC3E3, 0xCDA4, 0xC3E4, 0xCDA5, 0xC3E5, 0xCDA7, 0xC3E6, 0xCDA9, - 0xC3E7, 0xCDB0, 0xC3E8, 0xCDC4, 0xC3E9, 0xCDCC, 0xC3EA, 0xCDD0, - 0xC3EB, 0xCDE8, 0xC3EC, 0xCDEC, 0xC3ED, 0xCDF0, 0xC3EE, 0xCDF8, - 0xC3EF, 0xCDF9, 0xC3F0, 0xCDFB, 0xC3F1, 0xCDFD, 0xC3F2, 0xCE04, - 0xC3F3, 0xCE08, 0xC3F4, 0xCE0C, 0xC3F5, 0xCE14, 0xC3F6, 0xCE19, - 0xC3F7, 0xCE20, 0xC3F8, 0xCE21, 0xC3F9, 0xCE24, 0xC3FA, 0xCE28, - 0xC3FB, 0xCE30, 0xC3FC, 0xCE31, 0xC3FD, 0xCE33, 0xC3FE, 0xCE35, - 0xC441, 0xD6AB, 0xC442, 0xD6AD, 0xC443, 0xD6AE, 0xC444, 0xD6AF, - 0xC445, 0xD6B1, 0xC446, 0xD6B2, 0xC447, 0xD6B3, 0xC448, 0xD6B4, - 0xC449, 0xD6B5, 0xC44A, 0xD6B6, 0xC44B, 0xD6B7, 0xC44C, 0xD6B8, - 0xC44D, 0xD6BA, 0xC44E, 0xD6BC, 0xC44F, 0xD6BD, 0xC450, 0xD6BE, - 0xC451, 0xD6BF, 0xC452, 0xD6C0, 0xC453, 0xD6C1, 0xC454, 0xD6C2, - 0xC455, 0xD6C3, 0xC456, 0xD6C6, 0xC457, 0xD6C7, 0xC458, 0xD6C9, - 0xC459, 0xD6CA, 0xC45A, 0xD6CB, 0xC461, 0xD6CD, 0xC462, 0xD6CE, - 0xC463, 0xD6CF, 0xC464, 0xD6D0, 0xC465, 0xD6D2, 0xC466, 0xD6D3, - 0xC467, 0xD6D5, 0xC468, 0xD6D6, 0xC469, 0xD6D8, 0xC46A, 0xD6DA, - 0xC46B, 0xD6DB, 0xC46C, 0xD6DC, 0xC46D, 0xD6DD, 0xC46E, 0xD6DE, - 0xC46F, 0xD6DF, 0xC470, 0xD6E1, 0xC471, 0xD6E2, 0xC472, 0xD6E3, - 0xC473, 0xD6E5, 0xC474, 0xD6E6, 0xC475, 0xD6E7, 0xC476, 0xD6E9, - 0xC477, 0xD6EA, 0xC478, 0xD6EB, 0xC479, 0xD6EC, 0xC47A, 0xD6ED, - 0xC481, 0xD6EE, 0xC482, 0xD6EF, 0xC483, 0xD6F1, 0xC484, 0xD6F2, - 0xC485, 0xD6F3, 0xC486, 0xD6F4, 0xC487, 0xD6F6, 0xC488, 0xD6F7, - 0xC489, 0xD6F8, 0xC48A, 0xD6F9, 0xC48B, 0xD6FA, 0xC48C, 0xD6FB, - 0xC48D, 0xD6FE, 0xC48E, 0xD6FF, 0xC48F, 0xD701, 0xC490, 0xD702, - 0xC491, 0xD703, 0xC492, 0xD705, 0xC493, 0xD706, 0xC494, 0xD707, - 0xC495, 0xD708, 0xC496, 0xD709, 0xC497, 0xD70A, 0xC498, 0xD70B, - 0xC499, 0xD70C, 0xC49A, 0xD70D, 0xC49B, 0xD70E, 0xC49C, 0xD70F, - 0xC49D, 0xD710, 0xC49E, 0xD712, 0xC49F, 0xD713, 0xC4A0, 0xD714, - 0xC4A1, 0xCE58, 0xC4A2, 0xCE59, 0xC4A3, 0xCE5C, 0xC4A4, 0xCE5F, - 0xC4A5, 0xCE60, 0xC4A6, 0xCE61, 0xC4A7, 0xCE68, 0xC4A8, 0xCE69, - 0xC4A9, 0xCE6B, 0xC4AA, 0xCE6D, 0xC4AB, 0xCE74, 0xC4AC, 0xCE75, - 0xC4AD, 0xCE78, 0xC4AE, 0xCE7C, 0xC4AF, 0xCE84, 0xC4B0, 0xCE85, - 0xC4B1, 0xCE87, 0xC4B2, 0xCE89, 0xC4B3, 0xCE90, 0xC4B4, 0xCE91, - 0xC4B5, 0xCE94, 0xC4B6, 0xCE98, 0xC4B7, 0xCEA0, 0xC4B8, 0xCEA1, - 0xC4B9, 0xCEA3, 0xC4BA, 0xCEA4, 0xC4BB, 0xCEA5, 0xC4BC, 0xCEAC, - 0xC4BD, 0xCEAD, 0xC4BE, 0xCEC1, 0xC4BF, 0xCEE4, 0xC4C0, 0xCEE5, - 0xC4C1, 0xCEE8, 0xC4C2, 0xCEEB, 0xC4C3, 0xCEEC, 0xC4C4, 0xCEF4, - 0xC4C5, 0xCEF5, 0xC4C6, 0xCEF7, 0xC4C7, 0xCEF8, 0xC4C8, 0xCEF9, - 0xC4C9, 0xCF00, 0xC4CA, 0xCF01, 0xC4CB, 0xCF04, 0xC4CC, 0xCF08, - 0xC4CD, 0xCF10, 0xC4CE, 0xCF11, 0xC4CF, 0xCF13, 0xC4D0, 0xCF15, - 0xC4D1, 0xCF1C, 0xC4D2, 0xCF20, 0xC4D3, 0xCF24, 0xC4D4, 0xCF2C, - 0xC4D5, 0xCF2D, 0xC4D6, 0xCF2F, 0xC4D7, 0xCF30, 0xC4D8, 0xCF31, - 0xC4D9, 0xCF38, 0xC4DA, 0xCF54, 0xC4DB, 0xCF55, 0xC4DC, 0xCF58, - 0xC4DD, 0xCF5C, 0xC4DE, 0xCF64, 0xC4DF, 0xCF65, 0xC4E0, 0xCF67, - 0xC4E1, 0xCF69, 0xC4E2, 0xCF70, 0xC4E3, 0xCF71, 0xC4E4, 0xCF74, - 0xC4E5, 0xCF78, 0xC4E6, 0xCF80, 0xC4E7, 0xCF85, 0xC4E8, 0xCF8C, - 0xC4E9, 0xCFA1, 0xC4EA, 0xCFA8, 0xC4EB, 0xCFB0, 0xC4EC, 0xCFC4, - 0xC4ED, 0xCFE0, 0xC4EE, 0xCFE1, 0xC4EF, 0xCFE4, 0xC4F0, 0xCFE8, - 0xC4F1, 0xCFF0, 0xC4F2, 0xCFF1, 0xC4F3, 0xCFF3, 0xC4F4, 0xCFF5, - 0xC4F5, 0xCFFC, 0xC4F6, 0xD000, 0xC4F7, 0xD004, 0xC4F8, 0xD011, - 0xC4F9, 0xD018, 0xC4FA, 0xD02D, 0xC4FB, 0xD034, 0xC4FC, 0xD035, - 0xC4FD, 0xD038, 0xC4FE, 0xD03C, 0xC541, 0xD715, 0xC542, 0xD716, - 0xC543, 0xD717, 0xC544, 0xD71A, 0xC545, 0xD71B, 0xC546, 0xD71D, - 0xC547, 0xD71E, 0xC548, 0xD71F, 0xC549, 0xD721, 0xC54A, 0xD722, - 0xC54B, 0xD723, 0xC54C, 0xD724, 0xC54D, 0xD725, 0xC54E, 0xD726, - 0xC54F, 0xD727, 0xC550, 0xD72A, 0xC551, 0xD72C, 0xC552, 0xD72E, - 0xC553, 0xD72F, 0xC554, 0xD730, 0xC555, 0xD731, 0xC556, 0xD732, - 0xC557, 0xD733, 0xC558, 0xD736, 0xC559, 0xD737, 0xC55A, 0xD739, - 0xC561, 0xD73A, 0xC562, 0xD73B, 0xC563, 0xD73D, 0xC564, 0xD73E, - 0xC565, 0xD73F, 0xC566, 0xD740, 0xC567, 0xD741, 0xC568, 0xD742, - 0xC569, 0xD743, 0xC56A, 0xD745, 0xC56B, 0xD746, 0xC56C, 0xD748, - 0xC56D, 0xD74A, 0xC56E, 0xD74B, 0xC56F, 0xD74C, 0xC570, 0xD74D, - 0xC571, 0xD74E, 0xC572, 0xD74F, 0xC573, 0xD752, 0xC574, 0xD753, - 0xC575, 0xD755, 0xC576, 0xD75A, 0xC577, 0xD75B, 0xC578, 0xD75C, - 0xC579, 0xD75D, 0xC57A, 0xD75E, 0xC581, 0xD75F, 0xC582, 0xD762, - 0xC583, 0xD764, 0xC584, 0xD766, 0xC585, 0xD767, 0xC586, 0xD768, - 0xC587, 0xD76A, 0xC588, 0xD76B, 0xC589, 0xD76D, 0xC58A, 0xD76E, - 0xC58B, 0xD76F, 0xC58C, 0xD771, 0xC58D, 0xD772, 0xC58E, 0xD773, - 0xC58F, 0xD775, 0xC590, 0xD776, 0xC591, 0xD777, 0xC592, 0xD778, - 0xC593, 0xD779, 0xC594, 0xD77A, 0xC595, 0xD77B, 0xC596, 0xD77E, - 0xC597, 0xD77F, 0xC598, 0xD780, 0xC599, 0xD782, 0xC59A, 0xD783, - 0xC59B, 0xD784, 0xC59C, 0xD785, 0xC59D, 0xD786, 0xC59E, 0xD787, - 0xC59F, 0xD78A, 0xC5A0, 0xD78B, 0xC5A1, 0xD044, 0xC5A2, 0xD045, - 0xC5A3, 0xD047, 0xC5A4, 0xD049, 0xC5A5, 0xD050, 0xC5A6, 0xD054, - 0xC5A7, 0xD058, 0xC5A8, 0xD060, 0xC5A9, 0xD06C, 0xC5AA, 0xD06D, - 0xC5AB, 0xD070, 0xC5AC, 0xD074, 0xC5AD, 0xD07C, 0xC5AE, 0xD07D, - 0xC5AF, 0xD081, 0xC5B0, 0xD0A4, 0xC5B1, 0xD0A5, 0xC5B2, 0xD0A8, - 0xC5B3, 0xD0AC, 0xC5B4, 0xD0B4, 0xC5B5, 0xD0B5, 0xC5B6, 0xD0B7, - 0xC5B7, 0xD0B9, 0xC5B8, 0xD0C0, 0xC5B9, 0xD0C1, 0xC5BA, 0xD0C4, - 0xC5BB, 0xD0C8, 0xC5BC, 0xD0C9, 0xC5BD, 0xD0D0, 0xC5BE, 0xD0D1, - 0xC5BF, 0xD0D3, 0xC5C0, 0xD0D4, 0xC5C1, 0xD0D5, 0xC5C2, 0xD0DC, - 0xC5C3, 0xD0DD, 0xC5C4, 0xD0E0, 0xC5C5, 0xD0E4, 0xC5C6, 0xD0EC, - 0xC5C7, 0xD0ED, 0xC5C8, 0xD0EF, 0xC5C9, 0xD0F0, 0xC5CA, 0xD0F1, - 0xC5CB, 0xD0F8, 0xC5CC, 0xD10D, 0xC5CD, 0xD130, 0xC5CE, 0xD131, - 0xC5CF, 0xD134, 0xC5D0, 0xD138, 0xC5D1, 0xD13A, 0xC5D2, 0xD140, - 0xC5D3, 0xD141, 0xC5D4, 0xD143, 0xC5D5, 0xD144, 0xC5D6, 0xD145, - 0xC5D7, 0xD14C, 0xC5D8, 0xD14D, 0xC5D9, 0xD150, 0xC5DA, 0xD154, - 0xC5DB, 0xD15C, 0xC5DC, 0xD15D, 0xC5DD, 0xD15F, 0xC5DE, 0xD161, - 0xC5DF, 0xD168, 0xC5E0, 0xD16C, 0xC5E1, 0xD17C, 0xC5E2, 0xD184, - 0xC5E3, 0xD188, 0xC5E4, 0xD1A0, 0xC5E5, 0xD1A1, 0xC5E6, 0xD1A4, - 0xC5E7, 0xD1A8, 0xC5E8, 0xD1B0, 0xC5E9, 0xD1B1, 0xC5EA, 0xD1B3, - 0xC5EB, 0xD1B5, 0xC5EC, 0xD1BA, 0xC5ED, 0xD1BC, 0xC5EE, 0xD1C0, - 0xC5EF, 0xD1D8, 0xC5F0, 0xD1F4, 0xC5F1, 0xD1F8, 0xC5F2, 0xD207, - 0xC5F3, 0xD209, 0xC5F4, 0xD210, 0xC5F5, 0xD22C, 0xC5F6, 0xD22D, - 0xC5F7, 0xD230, 0xC5F8, 0xD234, 0xC5F9, 0xD23C, 0xC5FA, 0xD23D, - 0xC5FB, 0xD23F, 0xC5FC, 0xD241, 0xC5FD, 0xD248, 0xC5FE, 0xD25C, - 0xC641, 0xD78D, 0xC642, 0xD78E, 0xC643, 0xD78F, 0xC644, 0xD791, - 0xC645, 0xD792, 0xC646, 0xD793, 0xC647, 0xD794, 0xC648, 0xD795, - 0xC649, 0xD796, 0xC64A, 0xD797, 0xC64B, 0xD79A, 0xC64C, 0xD79C, - 0xC64D, 0xD79E, 0xC64E, 0xD79F, 0xC64F, 0xD7A0, 0xC650, 0xD7A1, - 0xC651, 0xD7A2, 0xC652, 0xD7A3, 0xC6A1, 0xD264, 0xC6A2, 0xD280, - 0xC6A3, 0xD281, 0xC6A4, 0xD284, 0xC6A5, 0xD288, 0xC6A6, 0xD290, - 0xC6A7, 0xD291, 0xC6A8, 0xD295, 0xC6A9, 0xD29C, 0xC6AA, 0xD2A0, - 0xC6AB, 0xD2A4, 0xC6AC, 0xD2AC, 0xC6AD, 0xD2B1, 0xC6AE, 0xD2B8, - 0xC6AF, 0xD2B9, 0xC6B0, 0xD2BC, 0xC6B1, 0xD2BF, 0xC6B2, 0xD2C0, - 0xC6B3, 0xD2C2, 0xC6B4, 0xD2C8, 0xC6B5, 0xD2C9, 0xC6B6, 0xD2CB, - 0xC6B7, 0xD2D4, 0xC6B8, 0xD2D8, 0xC6B9, 0xD2DC, 0xC6BA, 0xD2E4, - 0xC6BB, 0xD2E5, 0xC6BC, 0xD2F0, 0xC6BD, 0xD2F1, 0xC6BE, 0xD2F4, - 0xC6BF, 0xD2F8, 0xC6C0, 0xD300, 0xC6C1, 0xD301, 0xC6C2, 0xD303, - 0xC6C3, 0xD305, 0xC6C4, 0xD30C, 0xC6C5, 0xD30D, 0xC6C6, 0xD30E, - 0xC6C7, 0xD310, 0xC6C8, 0xD314, 0xC6C9, 0xD316, 0xC6CA, 0xD31C, - 0xC6CB, 0xD31D, 0xC6CC, 0xD31F, 0xC6CD, 0xD320, 0xC6CE, 0xD321, - 0xC6CF, 0xD325, 0xC6D0, 0xD328, 0xC6D1, 0xD329, 0xC6D2, 0xD32C, - 0xC6D3, 0xD330, 0xC6D4, 0xD338, 0xC6D5, 0xD339, 0xC6D6, 0xD33B, - 0xC6D7, 0xD33C, 0xC6D8, 0xD33D, 0xC6D9, 0xD344, 0xC6DA, 0xD345, - 0xC6DB, 0xD37C, 0xC6DC, 0xD37D, 0xC6DD, 0xD380, 0xC6DE, 0xD384, - 0xC6DF, 0xD38C, 0xC6E0, 0xD38D, 0xC6E1, 0xD38F, 0xC6E2, 0xD390, - 0xC6E3, 0xD391, 0xC6E4, 0xD398, 0xC6E5, 0xD399, 0xC6E6, 0xD39C, - 0xC6E7, 0xD3A0, 0xC6E8, 0xD3A8, 0xC6E9, 0xD3A9, 0xC6EA, 0xD3AB, - 0xC6EB, 0xD3AD, 0xC6EC, 0xD3B4, 0xC6ED, 0xD3B8, 0xC6EE, 0xD3BC, - 0xC6EF, 0xD3C4, 0xC6F0, 0xD3C5, 0xC6F1, 0xD3C8, 0xC6F2, 0xD3C9, - 0xC6F3, 0xD3D0, 0xC6F4, 0xD3D8, 0xC6F5, 0xD3E1, 0xC6F6, 0xD3E3, - 0xC6F7, 0xD3EC, 0xC6F8, 0xD3ED, 0xC6F9, 0xD3F0, 0xC6FA, 0xD3F4, - 0xC6FB, 0xD3FC, 0xC6FC, 0xD3FD, 0xC6FD, 0xD3FF, 0xC6FE, 0xD401, - 0xC7A1, 0xD408, 0xC7A2, 0xD41D, 0xC7A3, 0xD440, 0xC7A4, 0xD444, - 0xC7A5, 0xD45C, 0xC7A6, 0xD460, 0xC7A7, 0xD464, 0xC7A8, 0xD46D, - 0xC7A9, 0xD46F, 0xC7AA, 0xD478, 0xC7AB, 0xD479, 0xC7AC, 0xD47C, - 0xC7AD, 0xD47F, 0xC7AE, 0xD480, 0xC7AF, 0xD482, 0xC7B0, 0xD488, - 0xC7B1, 0xD489, 0xC7B2, 0xD48B, 0xC7B3, 0xD48D, 0xC7B4, 0xD494, - 0xC7B5, 0xD4A9, 0xC7B6, 0xD4CC, 0xC7B7, 0xD4D0, 0xC7B8, 0xD4D4, - 0xC7B9, 0xD4DC, 0xC7BA, 0xD4DF, 0xC7BB, 0xD4E8, 0xC7BC, 0xD4EC, - 0xC7BD, 0xD4F0, 0xC7BE, 0xD4F8, 0xC7BF, 0xD4FB, 0xC7C0, 0xD4FD, - 0xC7C1, 0xD504, 0xC7C2, 0xD508, 0xC7C3, 0xD50C, 0xC7C4, 0xD514, - 0xC7C5, 0xD515, 0xC7C6, 0xD517, 0xC7C7, 0xD53C, 0xC7C8, 0xD53D, - 0xC7C9, 0xD540, 0xC7CA, 0xD544, 0xC7CB, 0xD54C, 0xC7CC, 0xD54D, - 0xC7CD, 0xD54F, 0xC7CE, 0xD551, 0xC7CF, 0xD558, 0xC7D0, 0xD559, - 0xC7D1, 0xD55C, 0xC7D2, 0xD560, 0xC7D3, 0xD565, 0xC7D4, 0xD568, - 0xC7D5, 0xD569, 0xC7D6, 0xD56B, 0xC7D7, 0xD56D, 0xC7D8, 0xD574, - 0xC7D9, 0xD575, 0xC7DA, 0xD578, 0xC7DB, 0xD57C, 0xC7DC, 0xD584, - 0xC7DD, 0xD585, 0xC7DE, 0xD587, 0xC7DF, 0xD588, 0xC7E0, 0xD589, - 0xC7E1, 0xD590, 0xC7E2, 0xD5A5, 0xC7E3, 0xD5C8, 0xC7E4, 0xD5C9, - 0xC7E5, 0xD5CC, 0xC7E6, 0xD5D0, 0xC7E7, 0xD5D2, 0xC7E8, 0xD5D8, - 0xC7E9, 0xD5D9, 0xC7EA, 0xD5DB, 0xC7EB, 0xD5DD, 0xC7EC, 0xD5E4, - 0xC7ED, 0xD5E5, 0xC7EE, 0xD5E8, 0xC7EF, 0xD5EC, 0xC7F0, 0xD5F4, - 0xC7F1, 0xD5F5, 0xC7F2, 0xD5F7, 0xC7F3, 0xD5F9, 0xC7F4, 0xD600, - 0xC7F5, 0xD601, 0xC7F6, 0xD604, 0xC7F7, 0xD608, 0xC7F8, 0xD610, - 0xC7F9, 0xD611, 0xC7FA, 0xD613, 0xC7FB, 0xD614, 0xC7FC, 0xD615, - 0xC7FD, 0xD61C, 0xC7FE, 0xD620, 0xC8A1, 0xD624, 0xC8A2, 0xD62D, - 0xC8A3, 0xD638, 0xC8A4, 0xD639, 0xC8A5, 0xD63C, 0xC8A6, 0xD640, - 0xC8A7, 0xD645, 0xC8A8, 0xD648, 0xC8A9, 0xD649, 0xC8AA, 0xD64B, - 0xC8AB, 0xD64D, 0xC8AC, 0xD651, 0xC8AD, 0xD654, 0xC8AE, 0xD655, - 0xC8AF, 0xD658, 0xC8B0, 0xD65C, 0xC8B1, 0xD667, 0xC8B2, 0xD669, - 0xC8B3, 0xD670, 0xC8B4, 0xD671, 0xC8B5, 0xD674, 0xC8B6, 0xD683, - 0xC8B7, 0xD685, 0xC8B8, 0xD68C, 0xC8B9, 0xD68D, 0xC8BA, 0xD690, - 0xC8BB, 0xD694, 0xC8BC, 0xD69D, 0xC8BD, 0xD69F, 0xC8BE, 0xD6A1, - 0xC8BF, 0xD6A8, 0xC8C0, 0xD6AC, 0xC8C1, 0xD6B0, 0xC8C2, 0xD6B9, - 0xC8C3, 0xD6BB, 0xC8C4, 0xD6C4, 0xC8C5, 0xD6C5, 0xC8C6, 0xD6C8, - 0xC8C7, 0xD6CC, 0xC8C8, 0xD6D1, 0xC8C9, 0xD6D4, 0xC8CA, 0xD6D7, - 0xC8CB, 0xD6D9, 0xC8CC, 0xD6E0, 0xC8CD, 0xD6E4, 0xC8CE, 0xD6E8, - 0xC8CF, 0xD6F0, 0xC8D0, 0xD6F5, 0xC8D1, 0xD6FC, 0xC8D2, 0xD6FD, - 0xC8D3, 0xD700, 0xC8D4, 0xD704, 0xC8D5, 0xD711, 0xC8D6, 0xD718, - 0xC8D7, 0xD719, 0xC8D8, 0xD71C, 0xC8D9, 0xD720, 0xC8DA, 0xD728, - 0xC8DB, 0xD729, 0xC8DC, 0xD72B, 0xC8DD, 0xD72D, 0xC8DE, 0xD734, - 0xC8DF, 0xD735, 0xC8E0, 0xD738, 0xC8E1, 0xD73C, 0xC8E2, 0xD744, - 0xC8E3, 0xD747, 0xC8E4, 0xD749, 0xC8E5, 0xD750, 0xC8E6, 0xD751, - 0xC8E7, 0xD754, 0xC8E8, 0xD756, 0xC8E9, 0xD757, 0xC8EA, 0xD758, - 0xC8EB, 0xD759, 0xC8EC, 0xD760, 0xC8ED, 0xD761, 0xC8EE, 0xD763, - 0xC8EF, 0xD765, 0xC8F0, 0xD769, 0xC8F1, 0xD76C, 0xC8F2, 0xD770, - 0xC8F3, 0xD774, 0xC8F4, 0xD77C, 0xC8F5, 0xD77D, 0xC8F6, 0xD781, - 0xC8F7, 0xD788, 0xC8F8, 0xD789, 0xC8F9, 0xD78C, 0xC8FA, 0xD790, - 0xC8FB, 0xD798, 0xC8FC, 0xD799, 0xC8FD, 0xD79B, 0xC8FE, 0xD79D, - 0xCAA1, 0x4F3D, 0xCAA2, 0x4F73, 0xCAA3, 0x5047, 0xCAA4, 0x50F9, - 0xCAA5, 0x52A0, 0xCAA6, 0x53EF, 0xCAA7, 0x5475, 0xCAA8, 0x54E5, - 0xCAA9, 0x5609, 0xCAAA, 0x5AC1, 0xCAAB, 0x5BB6, 0xCAAC, 0x6687, - 0xCAAD, 0x67B6, 0xCAAE, 0x67B7, 0xCAAF, 0x67EF, 0xCAB0, 0x6B4C, - 0xCAB1, 0x73C2, 0xCAB2, 0x75C2, 0xCAB3, 0x7A3C, 0xCAB4, 0x82DB, - 0xCAB5, 0x8304, 0xCAB6, 0x8857, 0xCAB7, 0x8888, 0xCAB8, 0x8A36, - 0xCAB9, 0x8CC8, 0xCABA, 0x8DCF, 0xCABB, 0x8EFB, 0xCABC, 0x8FE6, - 0xCABD, 0x99D5, 0xCABE, 0x523B, 0xCABF, 0x5374, 0xCAC0, 0x5404, - 0xCAC1, 0x606A, 0xCAC2, 0x6164, 0xCAC3, 0x6BBC, 0xCAC4, 0x73CF, - 0xCAC5, 0x811A, 0xCAC6, 0x89BA, 0xCAC7, 0x89D2, 0xCAC8, 0x95A3, - 0xCAC9, 0x4F83, 0xCACA, 0x520A, 0xCACB, 0x58BE, 0xCACC, 0x5978, - 0xCACD, 0x59E6, 0xCACE, 0x5E72, 0xCACF, 0x5E79, 0xCAD0, 0x61C7, - 0xCAD1, 0x63C0, 0xCAD2, 0x6746, 0xCAD3, 0x67EC, 0xCAD4, 0x687F, - 0xCAD5, 0x6F97, 0xCAD6, 0x764E, 0xCAD7, 0x770B, 0xCAD8, 0x78F5, - 0xCAD9, 0x7A08, 0xCADA, 0x7AFF, 0xCADB, 0x7C21, 0xCADC, 0x809D, - 0xCADD, 0x826E, 0xCADE, 0x8271, 0xCADF, 0x8AEB, 0xCAE0, 0x9593, - 0xCAE1, 0x4E6B, 0xCAE2, 0x559D, 0xCAE3, 0x66F7, 0xCAE4, 0x6E34, - 0xCAE5, 0x78A3, 0xCAE6, 0x7AED, 0xCAE7, 0x845B, 0xCAE8, 0x8910, - 0xCAE9, 0x874E, 0xCAEA, 0x97A8, 0xCAEB, 0x52D8, 0xCAEC, 0x574E, - 0xCAED, 0x582A, 0xCAEE, 0x5D4C, 0xCAEF, 0x611F, 0xCAF0, 0x61BE, - 0xCAF1, 0x6221, 0xCAF2, 0x6562, 0xCAF3, 0x67D1, 0xCAF4, 0x6A44, - 0xCAF5, 0x6E1B, 0xCAF6, 0x7518, 0xCAF7, 0x75B3, 0xCAF8, 0x76E3, - 0xCAF9, 0x77B0, 0xCAFA, 0x7D3A, 0xCAFB, 0x90AF, 0xCAFC, 0x9451, - 0xCAFD, 0x9452, 0xCAFE, 0x9F95, 0xCBA1, 0x5323, 0xCBA2, 0x5CAC, - 0xCBA3, 0x7532, 0xCBA4, 0x80DB, 0xCBA5, 0x9240, 0xCBA6, 0x9598, - 0xCBA7, 0x525B, 0xCBA8, 0x5808, 0xCBA9, 0x59DC, 0xCBAA, 0x5CA1, - 0xCBAB, 0x5D17, 0xCBAC, 0x5EB7, 0xCBAD, 0x5F3A, 0xCBAE, 0x5F4A, - 0xCBAF, 0x6177, 0xCBB0, 0x6C5F, 0xCBB1, 0x757A, 0xCBB2, 0x7586, - 0xCBB3, 0x7CE0, 0xCBB4, 0x7D73, 0xCBB5, 0x7DB1, 0xCBB6, 0x7F8C, - 0xCBB7, 0x8154, 0xCBB8, 0x8221, 0xCBB9, 0x8591, 0xCBBA, 0x8941, - 0xCBBB, 0x8B1B, 0xCBBC, 0x92FC, 0xCBBD, 0x964D, 0xCBBE, 0x9C47, - 0xCBBF, 0x4ECB, 0xCBC0, 0x4EF7, 0xCBC1, 0x500B, 0xCBC2, 0x51F1, - 0xCBC3, 0x584F, 0xCBC4, 0x6137, 0xCBC5, 0x613E, 0xCBC6, 0x6168, - 0xCBC7, 0x6539, 0xCBC8, 0x69EA, 0xCBC9, 0x6F11, 0xCBCA, 0x75A5, - 0xCBCB, 0x7686, 0xCBCC, 0x76D6, 0xCBCD, 0x7B87, 0xCBCE, 0x82A5, - 0xCBCF, 0x84CB, 0xCBD0, 0xF900, 0xCBD1, 0x93A7, 0xCBD2, 0x958B, - 0xCBD3, 0x5580, 0xCBD4, 0x5BA2, 0xCBD5, 0x5751, 0xCBD6, 0xF901, - 0xCBD7, 0x7CB3, 0xCBD8, 0x7FB9, 0xCBD9, 0x91B5, 0xCBDA, 0x5028, - 0xCBDB, 0x53BB, 0xCBDC, 0x5C45, 0xCBDD, 0x5DE8, 0xCBDE, 0x62D2, - 0xCBDF, 0x636E, 0xCBE0, 0x64DA, 0xCBE1, 0x64E7, 0xCBE2, 0x6E20, - 0xCBE3, 0x70AC, 0xCBE4, 0x795B, 0xCBE5, 0x8DDD, 0xCBE6, 0x8E1E, - 0xCBE7, 0xF902, 0xCBE8, 0x907D, 0xCBE9, 0x9245, 0xCBEA, 0x92F8, - 0xCBEB, 0x4E7E, 0xCBEC, 0x4EF6, 0xCBED, 0x5065, 0xCBEE, 0x5DFE, - 0xCBEF, 0x5EFA, 0xCBF0, 0x6106, 0xCBF1, 0x6957, 0xCBF2, 0x8171, - 0xCBF3, 0x8654, 0xCBF4, 0x8E47, 0xCBF5, 0x9375, 0xCBF6, 0x9A2B, - 0xCBF7, 0x4E5E, 0xCBF8, 0x5091, 0xCBF9, 0x6770, 0xCBFA, 0x6840, - 0xCBFB, 0x5109, 0xCBFC, 0x528D, 0xCBFD, 0x5292, 0xCBFE, 0x6AA2, - 0xCCA1, 0x77BC, 0xCCA2, 0x9210, 0xCCA3, 0x9ED4, 0xCCA4, 0x52AB, - 0xCCA5, 0x602F, 0xCCA6, 0x8FF2, 0xCCA7, 0x5048, 0xCCA8, 0x61A9, - 0xCCA9, 0x63ED, 0xCCAA, 0x64CA, 0xCCAB, 0x683C, 0xCCAC, 0x6A84, - 0xCCAD, 0x6FC0, 0xCCAE, 0x8188, 0xCCAF, 0x89A1, 0xCCB0, 0x9694, - 0xCCB1, 0x5805, 0xCCB2, 0x727D, 0xCCB3, 0x72AC, 0xCCB4, 0x7504, - 0xCCB5, 0x7D79, 0xCCB6, 0x7E6D, 0xCCB7, 0x80A9, 0xCCB8, 0x898B, - 0xCCB9, 0x8B74, 0xCCBA, 0x9063, 0xCCBB, 0x9D51, 0xCCBC, 0x6289, - 0xCCBD, 0x6C7A, 0xCCBE, 0x6F54, 0xCCBF, 0x7D50, 0xCCC0, 0x7F3A, - 0xCCC1, 0x8A23, 0xCCC2, 0x517C, 0xCCC3, 0x614A, 0xCCC4, 0x7B9D, - 0xCCC5, 0x8B19, 0xCCC6, 0x9257, 0xCCC7, 0x938C, 0xCCC8, 0x4EAC, - 0xCCC9, 0x4FD3, 0xCCCA, 0x501E, 0xCCCB, 0x50BE, 0xCCCC, 0x5106, - 0xCCCD, 0x52C1, 0xCCCE, 0x52CD, 0xCCCF, 0x537F, 0xCCD0, 0x5770, - 0xCCD1, 0x5883, 0xCCD2, 0x5E9A, 0xCCD3, 0x5F91, 0xCCD4, 0x6176, - 0xCCD5, 0x61AC, 0xCCD6, 0x64CE, 0xCCD7, 0x656C, 0xCCD8, 0x666F, - 0xCCD9, 0x66BB, 0xCCDA, 0x66F4, 0xCCDB, 0x6897, 0xCCDC, 0x6D87, - 0xCCDD, 0x7085, 0xCCDE, 0x70F1, 0xCCDF, 0x749F, 0xCCE0, 0x74A5, - 0xCCE1, 0x74CA, 0xCCE2, 0x75D9, 0xCCE3, 0x786C, 0xCCE4, 0x78EC, - 0xCCE5, 0x7ADF, 0xCCE6, 0x7AF6, 0xCCE7, 0x7D45, 0xCCE8, 0x7D93, - 0xCCE9, 0x8015, 0xCCEA, 0x803F, 0xCCEB, 0x811B, 0xCCEC, 0x8396, - 0xCCED, 0x8B66, 0xCCEE, 0x8F15, 0xCCEF, 0x9015, 0xCCF0, 0x93E1, - 0xCCF1, 0x9803, 0xCCF2, 0x9838, 0xCCF3, 0x9A5A, 0xCCF4, 0x9BE8, - 0xCCF5, 0x4FC2, 0xCCF6, 0x5553, 0xCCF7, 0x583A, 0xCCF8, 0x5951, - 0xCCF9, 0x5B63, 0xCCFA, 0x5C46, 0xCCFB, 0x60B8, 0xCCFC, 0x6212, - 0xCCFD, 0x6842, 0xCCFE, 0x68B0, 0xCDA1, 0x68E8, 0xCDA2, 0x6EAA, - 0xCDA3, 0x754C, 0xCDA4, 0x7678, 0xCDA5, 0x78CE, 0xCDA6, 0x7A3D, - 0xCDA7, 0x7CFB, 0xCDA8, 0x7E6B, 0xCDA9, 0x7E7C, 0xCDAA, 0x8A08, - 0xCDAB, 0x8AA1, 0xCDAC, 0x8C3F, 0xCDAD, 0x968E, 0xCDAE, 0x9DC4, - 0xCDAF, 0x53E4, 0xCDB0, 0x53E9, 0xCDB1, 0x544A, 0xCDB2, 0x5471, - 0xCDB3, 0x56FA, 0xCDB4, 0x59D1, 0xCDB5, 0x5B64, 0xCDB6, 0x5C3B, - 0xCDB7, 0x5EAB, 0xCDB8, 0x62F7, 0xCDB9, 0x6537, 0xCDBA, 0x6545, - 0xCDBB, 0x6572, 0xCDBC, 0x66A0, 0xCDBD, 0x67AF, 0xCDBE, 0x69C1, - 0xCDBF, 0x6CBD, 0xCDC0, 0x75FC, 0xCDC1, 0x7690, 0xCDC2, 0x777E, - 0xCDC3, 0x7A3F, 0xCDC4, 0x7F94, 0xCDC5, 0x8003, 0xCDC6, 0x80A1, - 0xCDC7, 0x818F, 0xCDC8, 0x82E6, 0xCDC9, 0x82FD, 0xCDCA, 0x83F0, - 0xCDCB, 0x85C1, 0xCDCC, 0x8831, 0xCDCD, 0x88B4, 0xCDCE, 0x8AA5, - 0xCDCF, 0xF903, 0xCDD0, 0x8F9C, 0xCDD1, 0x932E, 0xCDD2, 0x96C7, - 0xCDD3, 0x9867, 0xCDD4, 0x9AD8, 0xCDD5, 0x9F13, 0xCDD6, 0x54ED, - 0xCDD7, 0x659B, 0xCDD8, 0x66F2, 0xCDD9, 0x688F, 0xCDDA, 0x7A40, - 0xCDDB, 0x8C37, 0xCDDC, 0x9D60, 0xCDDD, 0x56F0, 0xCDDE, 0x5764, - 0xCDDF, 0x5D11, 0xCDE0, 0x6606, 0xCDE1, 0x68B1, 0xCDE2, 0x68CD, - 0xCDE3, 0x6EFE, 0xCDE4, 0x7428, 0xCDE5, 0x889E, 0xCDE6, 0x9BE4, - 0xCDE7, 0x6C68, 0xCDE8, 0xF904, 0xCDE9, 0x9AA8, 0xCDEA, 0x4F9B, - 0xCDEB, 0x516C, 0xCDEC, 0x5171, 0xCDED, 0x529F, 0xCDEE, 0x5B54, - 0xCDEF, 0x5DE5, 0xCDF0, 0x6050, 0xCDF1, 0x606D, 0xCDF2, 0x62F1, - 0xCDF3, 0x63A7, 0xCDF4, 0x653B, 0xCDF5, 0x73D9, 0xCDF6, 0x7A7A, - 0xCDF7, 0x86A3, 0xCDF8, 0x8CA2, 0xCDF9, 0x978F, 0xCDFA, 0x4E32, - 0xCDFB, 0x5BE1, 0xCDFC, 0x6208, 0xCDFD, 0x679C, 0xCDFE, 0x74DC, - 0xCEA1, 0x79D1, 0xCEA2, 0x83D3, 0xCEA3, 0x8A87, 0xCEA4, 0x8AB2, - 0xCEA5, 0x8DE8, 0xCEA6, 0x904E, 0xCEA7, 0x934B, 0xCEA8, 0x9846, - 0xCEA9, 0x5ED3, 0xCEAA, 0x69E8, 0xCEAB, 0x85FF, 0xCEAC, 0x90ED, - 0xCEAD, 0xF905, 0xCEAE, 0x51A0, 0xCEAF, 0x5B98, 0xCEB0, 0x5BEC, - 0xCEB1, 0x6163, 0xCEB2, 0x68FA, 0xCEB3, 0x6B3E, 0xCEB4, 0x704C, - 0xCEB5, 0x742F, 0xCEB6, 0x74D8, 0xCEB7, 0x7BA1, 0xCEB8, 0x7F50, - 0xCEB9, 0x83C5, 0xCEBA, 0x89C0, 0xCEBB, 0x8CAB, 0xCEBC, 0x95DC, - 0xCEBD, 0x9928, 0xCEBE, 0x522E, 0xCEBF, 0x605D, 0xCEC0, 0x62EC, - 0xCEC1, 0x9002, 0xCEC2, 0x4F8A, 0xCEC3, 0x5149, 0xCEC4, 0x5321, - 0xCEC5, 0x58D9, 0xCEC6, 0x5EE3, 0xCEC7, 0x66E0, 0xCEC8, 0x6D38, - 0xCEC9, 0x709A, 0xCECA, 0x72C2, 0xCECB, 0x73D6, 0xCECC, 0x7B50, - 0xCECD, 0x80F1, 0xCECE, 0x945B, 0xCECF, 0x5366, 0xCED0, 0x639B, - 0xCED1, 0x7F6B, 0xCED2, 0x4E56, 0xCED3, 0x5080, 0xCED4, 0x584A, - 0xCED5, 0x58DE, 0xCED6, 0x602A, 0xCED7, 0x6127, 0xCED8, 0x62D0, - 0xCED9, 0x69D0, 0xCEDA, 0x9B41, 0xCEDB, 0x5B8F, 0xCEDC, 0x7D18, - 0xCEDD, 0x80B1, 0xCEDE, 0x8F5F, 0xCEDF, 0x4EA4, 0xCEE0, 0x50D1, - 0xCEE1, 0x54AC, 0xCEE2, 0x55AC, 0xCEE3, 0x5B0C, 0xCEE4, 0x5DA0, - 0xCEE5, 0x5DE7, 0xCEE6, 0x652A, 0xCEE7, 0x654E, 0xCEE8, 0x6821, - 0xCEE9, 0x6A4B, 0xCEEA, 0x72E1, 0xCEEB, 0x768E, 0xCEEC, 0x77EF, - 0xCEED, 0x7D5E, 0xCEEE, 0x7FF9, 0xCEEF, 0x81A0, 0xCEF0, 0x854E, - 0xCEF1, 0x86DF, 0xCEF2, 0x8F03, 0xCEF3, 0x8F4E, 0xCEF4, 0x90CA, - 0xCEF5, 0x9903, 0xCEF6, 0x9A55, 0xCEF7, 0x9BAB, 0xCEF8, 0x4E18, - 0xCEF9, 0x4E45, 0xCEFA, 0x4E5D, 0xCEFB, 0x4EC7, 0xCEFC, 0x4FF1, - 0xCEFD, 0x5177, 0xCEFE, 0x52FE, 0xCFA1, 0x5340, 0xCFA2, 0x53E3, - 0xCFA3, 0x53E5, 0xCFA4, 0x548E, 0xCFA5, 0x5614, 0xCFA6, 0x5775, - 0xCFA7, 0x57A2, 0xCFA8, 0x5BC7, 0xCFA9, 0x5D87, 0xCFAA, 0x5ED0, - 0xCFAB, 0x61FC, 0xCFAC, 0x62D8, 0xCFAD, 0x6551, 0xCFAE, 0x67B8, - 0xCFAF, 0x67E9, 0xCFB0, 0x69CB, 0xCFB1, 0x6B50, 0xCFB2, 0x6BC6, - 0xCFB3, 0x6BEC, 0xCFB4, 0x6C42, 0xCFB5, 0x6E9D, 0xCFB6, 0x7078, - 0xCFB7, 0x72D7, 0xCFB8, 0x7396, 0xCFB9, 0x7403, 0xCFBA, 0x77BF, - 0xCFBB, 0x77E9, 0xCFBC, 0x7A76, 0xCFBD, 0x7D7F, 0xCFBE, 0x8009, - 0xCFBF, 0x81FC, 0xCFC0, 0x8205, 0xCFC1, 0x820A, 0xCFC2, 0x82DF, - 0xCFC3, 0x8862, 0xCFC4, 0x8B33, 0xCFC5, 0x8CFC, 0xCFC6, 0x8EC0, - 0xCFC7, 0x9011, 0xCFC8, 0x90B1, 0xCFC9, 0x9264, 0xCFCA, 0x92B6, - 0xCFCB, 0x99D2, 0xCFCC, 0x9A45, 0xCFCD, 0x9CE9, 0xCFCE, 0x9DD7, - 0xCFCF, 0x9F9C, 0xCFD0, 0x570B, 0xCFD1, 0x5C40, 0xCFD2, 0x83CA, - 0xCFD3, 0x97A0, 0xCFD4, 0x97AB, 0xCFD5, 0x9EB4, 0xCFD6, 0x541B, - 0xCFD7, 0x7A98, 0xCFD8, 0x7FA4, 0xCFD9, 0x88D9, 0xCFDA, 0x8ECD, - 0xCFDB, 0x90E1, 0xCFDC, 0x5800, 0xCFDD, 0x5C48, 0xCFDE, 0x6398, - 0xCFDF, 0x7A9F, 0xCFE0, 0x5BAE, 0xCFE1, 0x5F13, 0xCFE2, 0x7A79, - 0xCFE3, 0x7AAE, 0xCFE4, 0x828E, 0xCFE5, 0x8EAC, 0xCFE6, 0x5026, - 0xCFE7, 0x5238, 0xCFE8, 0x52F8, 0xCFE9, 0x5377, 0xCFEA, 0x5708, - 0xCFEB, 0x62F3, 0xCFEC, 0x6372, 0xCFED, 0x6B0A, 0xCFEE, 0x6DC3, - 0xCFEF, 0x7737, 0xCFF0, 0x53A5, 0xCFF1, 0x7357, 0xCFF2, 0x8568, - 0xCFF3, 0x8E76, 0xCFF4, 0x95D5, 0xCFF5, 0x673A, 0xCFF6, 0x6AC3, - 0xCFF7, 0x6F70, 0xCFF8, 0x8A6D, 0xCFF9, 0x8ECC, 0xCFFA, 0x994B, - 0xCFFB, 0xF906, 0xCFFC, 0x6677, 0xCFFD, 0x6B78, 0xCFFE, 0x8CB4, - 0xD0A1, 0x9B3C, 0xD0A2, 0xF907, 0xD0A3, 0x53EB, 0xD0A4, 0x572D, - 0xD0A5, 0x594E, 0xD0A6, 0x63C6, 0xD0A7, 0x69FB, 0xD0A8, 0x73EA, - 0xD0A9, 0x7845, 0xD0AA, 0x7ABA, 0xD0AB, 0x7AC5, 0xD0AC, 0x7CFE, - 0xD0AD, 0x8475, 0xD0AE, 0x898F, 0xD0AF, 0x8D73, 0xD0B0, 0x9035, - 0xD0B1, 0x95A8, 0xD0B2, 0x52FB, 0xD0B3, 0x5747, 0xD0B4, 0x7547, - 0xD0B5, 0x7B60, 0xD0B6, 0x83CC, 0xD0B7, 0x921E, 0xD0B8, 0xF908, - 0xD0B9, 0x6A58, 0xD0BA, 0x514B, 0xD0BB, 0x524B, 0xD0BC, 0x5287, - 0xD0BD, 0x621F, 0xD0BE, 0x68D8, 0xD0BF, 0x6975, 0xD0C0, 0x9699, - 0xD0C1, 0x50C5, 0xD0C2, 0x52A4, 0xD0C3, 0x52E4, 0xD0C4, 0x61C3, - 0xD0C5, 0x65A4, 0xD0C6, 0x6839, 0xD0C7, 0x69FF, 0xD0C8, 0x747E, - 0xD0C9, 0x7B4B, 0xD0CA, 0x82B9, 0xD0CB, 0x83EB, 0xD0CC, 0x89B2, - 0xD0CD, 0x8B39, 0xD0CE, 0x8FD1, 0xD0CF, 0x9949, 0xD0D0, 0xF909, - 0xD0D1, 0x4ECA, 0xD0D2, 0x5997, 0xD0D3, 0x64D2, 0xD0D4, 0x6611, - 0xD0D5, 0x6A8E, 0xD0D6, 0x7434, 0xD0D7, 0x7981, 0xD0D8, 0x79BD, - 0xD0D9, 0x82A9, 0xD0DA, 0x887E, 0xD0DB, 0x887F, 0xD0DC, 0x895F, - 0xD0DD, 0xF90A, 0xD0DE, 0x9326, 0xD0DF, 0x4F0B, 0xD0E0, 0x53CA, - 0xD0E1, 0x6025, 0xD0E2, 0x6271, 0xD0E3, 0x6C72, 0xD0E4, 0x7D1A, - 0xD0E5, 0x7D66, 0xD0E6, 0x4E98, 0xD0E7, 0x5162, 0xD0E8, 0x77DC, - 0xD0E9, 0x80AF, 0xD0EA, 0x4F01, 0xD0EB, 0x4F0E, 0xD0EC, 0x5176, - 0xD0ED, 0x5180, 0xD0EE, 0x55DC, 0xD0EF, 0x5668, 0xD0F0, 0x573B, - 0xD0F1, 0x57FA, 0xD0F2, 0x57FC, 0xD0F3, 0x5914, 0xD0F4, 0x5947, - 0xD0F5, 0x5993, 0xD0F6, 0x5BC4, 0xD0F7, 0x5C90, 0xD0F8, 0x5D0E, - 0xD0F9, 0x5DF1, 0xD0FA, 0x5E7E, 0xD0FB, 0x5FCC, 0xD0FC, 0x6280, - 0xD0FD, 0x65D7, 0xD0FE, 0x65E3, 0xD1A1, 0x671E, 0xD1A2, 0x671F, - 0xD1A3, 0x675E, 0xD1A4, 0x68CB, 0xD1A5, 0x68C4, 0xD1A6, 0x6A5F, - 0xD1A7, 0x6B3A, 0xD1A8, 0x6C23, 0xD1A9, 0x6C7D, 0xD1AA, 0x6C82, - 0xD1AB, 0x6DC7, 0xD1AC, 0x7398, 0xD1AD, 0x7426, 0xD1AE, 0x742A, - 0xD1AF, 0x7482, 0xD1B0, 0x74A3, 0xD1B1, 0x7578, 0xD1B2, 0x757F, - 0xD1B3, 0x7881, 0xD1B4, 0x78EF, 0xD1B5, 0x7941, 0xD1B6, 0x7947, - 0xD1B7, 0x7948, 0xD1B8, 0x797A, 0xD1B9, 0x7B95, 0xD1BA, 0x7D00, - 0xD1BB, 0x7DBA, 0xD1BC, 0x7F88, 0xD1BD, 0x8006, 0xD1BE, 0x802D, - 0xD1BF, 0x808C, 0xD1C0, 0x8A18, 0xD1C1, 0x8B4F, 0xD1C2, 0x8C48, - 0xD1C3, 0x8D77, 0xD1C4, 0x9321, 0xD1C5, 0x9324, 0xD1C6, 0x98E2, - 0xD1C7, 0x9951, 0xD1C8, 0x9A0E, 0xD1C9, 0x9A0F, 0xD1CA, 0x9A65, - 0xD1CB, 0x9E92, 0xD1CC, 0x7DCA, 0xD1CD, 0x4F76, 0xD1CE, 0x5409, - 0xD1CF, 0x62EE, 0xD1D0, 0x6854, 0xD1D1, 0x91D1, 0xD1D2, 0x55AB, - 0xD1D3, 0x513A, 0xD1D4, 0xF90B, 0xD1D5, 0xF90C, 0xD1D6, 0x5A1C, - 0xD1D7, 0x61E6, 0xD1D8, 0xF90D, 0xD1D9, 0x62CF, 0xD1DA, 0x62FF, - 0xD1DB, 0xF90E, 0xD1DC, 0xF90F, 0xD1DD, 0xF910, 0xD1DE, 0xF911, - 0xD1DF, 0xF912, 0xD1E0, 0xF913, 0xD1E1, 0x90A3, 0xD1E2, 0xF914, - 0xD1E3, 0xF915, 0xD1E4, 0xF916, 0xD1E5, 0xF917, 0xD1E6, 0xF918, - 0xD1E7, 0x8AFE, 0xD1E8, 0xF919, 0xD1E9, 0xF91A, 0xD1EA, 0xF91B, - 0xD1EB, 0xF91C, 0xD1EC, 0x6696, 0xD1ED, 0xF91D, 0xD1EE, 0x7156, - 0xD1EF, 0xF91E, 0xD1F0, 0xF91F, 0xD1F1, 0x96E3, 0xD1F2, 0xF920, - 0xD1F3, 0x634F, 0xD1F4, 0x637A, 0xD1F5, 0x5357, 0xD1F6, 0xF921, - 0xD1F7, 0x678F, 0xD1F8, 0x6960, 0xD1F9, 0x6E73, 0xD1FA, 0xF922, - 0xD1FB, 0x7537, 0xD1FC, 0xF923, 0xD1FD, 0xF924, 0xD1FE, 0xF925, - 0xD2A1, 0x7D0D, 0xD2A2, 0xF926, 0xD2A3, 0xF927, 0xD2A4, 0x8872, - 0xD2A5, 0x56CA, 0xD2A6, 0x5A18, 0xD2A7, 0xF928, 0xD2A8, 0xF929, - 0xD2A9, 0xF92A, 0xD2AA, 0xF92B, 0xD2AB, 0xF92C, 0xD2AC, 0x4E43, - 0xD2AD, 0xF92D, 0xD2AE, 0x5167, 0xD2AF, 0x5948, 0xD2B0, 0x67F0, - 0xD2B1, 0x8010, 0xD2B2, 0xF92E, 0xD2B3, 0x5973, 0xD2B4, 0x5E74, - 0xD2B5, 0x649A, 0xD2B6, 0x79CA, 0xD2B7, 0x5FF5, 0xD2B8, 0x606C, - 0xD2B9, 0x62C8, 0xD2BA, 0x637B, 0xD2BB, 0x5BE7, 0xD2BC, 0x5BD7, - 0xD2BD, 0x52AA, 0xD2BE, 0xF92F, 0xD2BF, 0x5974, 0xD2C0, 0x5F29, - 0xD2C1, 0x6012, 0xD2C2, 0xF930, 0xD2C3, 0xF931, 0xD2C4, 0xF932, - 0xD2C5, 0x7459, 0xD2C6, 0xF933, 0xD2C7, 0xF934, 0xD2C8, 0xF935, - 0xD2C9, 0xF936, 0xD2CA, 0xF937, 0xD2CB, 0xF938, 0xD2CC, 0x99D1, - 0xD2CD, 0xF939, 0xD2CE, 0xF93A, 0xD2CF, 0xF93B, 0xD2D0, 0xF93C, - 0xD2D1, 0xF93D, 0xD2D2, 0xF93E, 0xD2D3, 0xF93F, 0xD2D4, 0xF940, - 0xD2D5, 0xF941, 0xD2D6, 0xF942, 0xD2D7, 0xF943, 0xD2D8, 0x6FC3, - 0xD2D9, 0xF944, 0xD2DA, 0xF945, 0xD2DB, 0x81BF, 0xD2DC, 0x8FB2, - 0xD2DD, 0x60F1, 0xD2DE, 0xF946, 0xD2DF, 0xF947, 0xD2E0, 0x8166, - 0xD2E1, 0xF948, 0xD2E2, 0xF949, 0xD2E3, 0x5C3F, 0xD2E4, 0xF94A, - 0xD2E5, 0xF94B, 0xD2E6, 0xF94C, 0xD2E7, 0xF94D, 0xD2E8, 0xF94E, - 0xD2E9, 0xF94F, 0xD2EA, 0xF950, 0xD2EB, 0xF951, 0xD2EC, 0x5AE9, - 0xD2ED, 0x8A25, 0xD2EE, 0x677B, 0xD2EF, 0x7D10, 0xD2F0, 0xF952, - 0xD2F1, 0xF953, 0xD2F2, 0xF954, 0xD2F3, 0xF955, 0xD2F4, 0xF956, - 0xD2F5, 0xF957, 0xD2F6, 0x80FD, 0xD2F7, 0xF958, 0xD2F8, 0xF959, - 0xD2F9, 0x5C3C, 0xD2FA, 0x6CE5, 0xD2FB, 0x533F, 0xD2FC, 0x6EBA, - 0xD2FD, 0x591A, 0xD2FE, 0x8336, 0xD3A1, 0x4E39, 0xD3A2, 0x4EB6, - 0xD3A3, 0x4F46, 0xD3A4, 0x55AE, 0xD3A5, 0x5718, 0xD3A6, 0x58C7, - 0xD3A7, 0x5F56, 0xD3A8, 0x65B7, 0xD3A9, 0x65E6, 0xD3AA, 0x6A80, - 0xD3AB, 0x6BB5, 0xD3AC, 0x6E4D, 0xD3AD, 0x77ED, 0xD3AE, 0x7AEF, - 0xD3AF, 0x7C1E, 0xD3B0, 0x7DDE, 0xD3B1, 0x86CB, 0xD3B2, 0x8892, - 0xD3B3, 0x9132, 0xD3B4, 0x935B, 0xD3B5, 0x64BB, 0xD3B6, 0x6FBE, - 0xD3B7, 0x737A, 0xD3B8, 0x75B8, 0xD3B9, 0x9054, 0xD3BA, 0x5556, - 0xD3BB, 0x574D, 0xD3BC, 0x61BA, 0xD3BD, 0x64D4, 0xD3BE, 0x66C7, - 0xD3BF, 0x6DE1, 0xD3C0, 0x6E5B, 0xD3C1, 0x6F6D, 0xD3C2, 0x6FB9, - 0xD3C3, 0x75F0, 0xD3C4, 0x8043, 0xD3C5, 0x81BD, 0xD3C6, 0x8541, - 0xD3C7, 0x8983, 0xD3C8, 0x8AC7, 0xD3C9, 0x8B5A, 0xD3CA, 0x931F, - 0xD3CB, 0x6C93, 0xD3CC, 0x7553, 0xD3CD, 0x7B54, 0xD3CE, 0x8E0F, - 0xD3CF, 0x905D, 0xD3D0, 0x5510, 0xD3D1, 0x5802, 0xD3D2, 0x5858, - 0xD3D3, 0x5E62, 0xD3D4, 0x6207, 0xD3D5, 0x649E, 0xD3D6, 0x68E0, - 0xD3D7, 0x7576, 0xD3D8, 0x7CD6, 0xD3D9, 0x87B3, 0xD3DA, 0x9EE8, - 0xD3DB, 0x4EE3, 0xD3DC, 0x5788, 0xD3DD, 0x576E, 0xD3DE, 0x5927, - 0xD3DF, 0x5C0D, 0xD3E0, 0x5CB1, 0xD3E1, 0x5E36, 0xD3E2, 0x5F85, - 0xD3E3, 0x6234, 0xD3E4, 0x64E1, 0xD3E5, 0x73B3, 0xD3E6, 0x81FA, - 0xD3E7, 0x888B, 0xD3E8, 0x8CB8, 0xD3E9, 0x968A, 0xD3EA, 0x9EDB, - 0xD3EB, 0x5B85, 0xD3EC, 0x5FB7, 0xD3ED, 0x60B3, 0xD3EE, 0x5012, - 0xD3EF, 0x5200, 0xD3F0, 0x5230, 0xD3F1, 0x5716, 0xD3F2, 0x5835, - 0xD3F3, 0x5857, 0xD3F4, 0x5C0E, 0xD3F5, 0x5C60, 0xD3F6, 0x5CF6, - 0xD3F7, 0x5D8B, 0xD3F8, 0x5EA6, 0xD3F9, 0x5F92, 0xD3FA, 0x60BC, - 0xD3FB, 0x6311, 0xD3FC, 0x6389, 0xD3FD, 0x6417, 0xD3FE, 0x6843, - 0xD4A1, 0x68F9, 0xD4A2, 0x6AC2, 0xD4A3, 0x6DD8, 0xD4A4, 0x6E21, - 0xD4A5, 0x6ED4, 0xD4A6, 0x6FE4, 0xD4A7, 0x71FE, 0xD4A8, 0x76DC, - 0xD4A9, 0x7779, 0xD4AA, 0x79B1, 0xD4AB, 0x7A3B, 0xD4AC, 0x8404, - 0xD4AD, 0x89A9, 0xD4AE, 0x8CED, 0xD4AF, 0x8DF3, 0xD4B0, 0x8E48, - 0xD4B1, 0x9003, 0xD4B2, 0x9014, 0xD4B3, 0x9053, 0xD4B4, 0x90FD, - 0xD4B5, 0x934D, 0xD4B6, 0x9676, 0xD4B7, 0x97DC, 0xD4B8, 0x6BD2, - 0xD4B9, 0x7006, 0xD4BA, 0x7258, 0xD4BB, 0x72A2, 0xD4BC, 0x7368, - 0xD4BD, 0x7763, 0xD4BE, 0x79BF, 0xD4BF, 0x7BE4, 0xD4C0, 0x7E9B, - 0xD4C1, 0x8B80, 0xD4C2, 0x58A9, 0xD4C3, 0x60C7, 0xD4C4, 0x6566, - 0xD4C5, 0x65FD, 0xD4C6, 0x66BE, 0xD4C7, 0x6C8C, 0xD4C8, 0x711E, - 0xD4C9, 0x71C9, 0xD4CA, 0x8C5A, 0xD4CB, 0x9813, 0xD4CC, 0x4E6D, - 0xD4CD, 0x7A81, 0xD4CE, 0x4EDD, 0xD4CF, 0x51AC, 0xD4D0, 0x51CD, - 0xD4D1, 0x52D5, 0xD4D2, 0x540C, 0xD4D3, 0x61A7, 0xD4D4, 0x6771, - 0xD4D5, 0x6850, 0xD4D6, 0x68DF, 0xD4D7, 0x6D1E, 0xD4D8, 0x6F7C, - 0xD4D9, 0x75BC, 0xD4DA, 0x77B3, 0xD4DB, 0x7AE5, 0xD4DC, 0x80F4, - 0xD4DD, 0x8463, 0xD4DE, 0x9285, 0xD4DF, 0x515C, 0xD4E0, 0x6597, - 0xD4E1, 0x675C, 0xD4E2, 0x6793, 0xD4E3, 0x75D8, 0xD4E4, 0x7AC7, - 0xD4E5, 0x8373, 0xD4E6, 0xF95A, 0xD4E7, 0x8C46, 0xD4E8, 0x9017, - 0xD4E9, 0x982D, 0xD4EA, 0x5C6F, 0xD4EB, 0x81C0, 0xD4EC, 0x829A, - 0xD4ED, 0x9041, 0xD4EE, 0x906F, 0xD4EF, 0x920D, 0xD4F0, 0x5F97, - 0xD4F1, 0x5D9D, 0xD4F2, 0x6A59, 0xD4F3, 0x71C8, 0xD4F4, 0x767B, - 0xD4F5, 0x7B49, 0xD4F6, 0x85E4, 0xD4F7, 0x8B04, 0xD4F8, 0x9127, - 0xD4F9, 0x9A30, 0xD4FA, 0x5587, 0xD4FB, 0x61F6, 0xD4FC, 0xF95B, - 0xD4FD, 0x7669, 0xD4FE, 0x7F85, 0xD5A1, 0x863F, 0xD5A2, 0x87BA, - 0xD5A3, 0x88F8, 0xD5A4, 0x908F, 0xD5A5, 0xF95C, 0xD5A6, 0x6D1B, - 0xD5A7, 0x70D9, 0xD5A8, 0x73DE, 0xD5A9, 0x7D61, 0xD5AA, 0x843D, - 0xD5AB, 0xF95D, 0xD5AC, 0x916A, 0xD5AD, 0x99F1, 0xD5AE, 0xF95E, - 0xD5AF, 0x4E82, 0xD5B0, 0x5375, 0xD5B1, 0x6B04, 0xD5B2, 0x6B12, - 0xD5B3, 0x703E, 0xD5B4, 0x721B, 0xD5B5, 0x862D, 0xD5B6, 0x9E1E, - 0xD5B7, 0x524C, 0xD5B8, 0x8FA3, 0xD5B9, 0x5D50, 0xD5BA, 0x64E5, - 0xD5BB, 0x652C, 0xD5BC, 0x6B16, 0xD5BD, 0x6FEB, 0xD5BE, 0x7C43, - 0xD5BF, 0x7E9C, 0xD5C0, 0x85CD, 0xD5C1, 0x8964, 0xD5C2, 0x89BD, - 0xD5C3, 0x62C9, 0xD5C4, 0x81D8, 0xD5C5, 0x881F, 0xD5C6, 0x5ECA, - 0xD5C7, 0x6717, 0xD5C8, 0x6D6A, 0xD5C9, 0x72FC, 0xD5CA, 0x7405, - 0xD5CB, 0x746F, 0xD5CC, 0x8782, 0xD5CD, 0x90DE, 0xD5CE, 0x4F86, - 0xD5CF, 0x5D0D, 0xD5D0, 0x5FA0, 0xD5D1, 0x840A, 0xD5D2, 0x51B7, - 0xD5D3, 0x63A0, 0xD5D4, 0x7565, 0xD5D5, 0x4EAE, 0xD5D6, 0x5006, - 0xD5D7, 0x5169, 0xD5D8, 0x51C9, 0xD5D9, 0x6881, 0xD5DA, 0x6A11, - 0xD5DB, 0x7CAE, 0xD5DC, 0x7CB1, 0xD5DD, 0x7CE7, 0xD5DE, 0x826F, - 0xD5DF, 0x8AD2, 0xD5E0, 0x8F1B, 0xD5E1, 0x91CF, 0xD5E2, 0x4FB6, - 0xD5E3, 0x5137, 0xD5E4, 0x52F5, 0xD5E5, 0x5442, 0xD5E6, 0x5EEC, - 0xD5E7, 0x616E, 0xD5E8, 0x623E, 0xD5E9, 0x65C5, 0xD5EA, 0x6ADA, - 0xD5EB, 0x6FFE, 0xD5EC, 0x792A, 0xD5ED, 0x85DC, 0xD5EE, 0x8823, - 0xD5EF, 0x95AD, 0xD5F0, 0x9A62, 0xD5F1, 0x9A6A, 0xD5F2, 0x9E97, - 0xD5F3, 0x9ECE, 0xD5F4, 0x529B, 0xD5F5, 0x66C6, 0xD5F6, 0x6B77, - 0xD5F7, 0x701D, 0xD5F8, 0x792B, 0xD5F9, 0x8F62, 0xD5FA, 0x9742, - 0xD5FB, 0x6190, 0xD5FC, 0x6200, 0xD5FD, 0x6523, 0xD5FE, 0x6F23, - 0xD6A1, 0x7149, 0xD6A2, 0x7489, 0xD6A3, 0x7DF4, 0xD6A4, 0x806F, - 0xD6A5, 0x84EE, 0xD6A6, 0x8F26, 0xD6A7, 0x9023, 0xD6A8, 0x934A, - 0xD6A9, 0x51BD, 0xD6AA, 0x5217, 0xD6AB, 0x52A3, 0xD6AC, 0x6D0C, - 0xD6AD, 0x70C8, 0xD6AE, 0x88C2, 0xD6AF, 0x5EC9, 0xD6B0, 0x6582, - 0xD6B1, 0x6BAE, 0xD6B2, 0x6FC2, 0xD6B3, 0x7C3E, 0xD6B4, 0x7375, - 0xD6B5, 0x4EE4, 0xD6B6, 0x4F36, 0xD6B7, 0x56F9, 0xD6B8, 0xF95F, - 0xD6B9, 0x5CBA, 0xD6BA, 0x5DBA, 0xD6BB, 0x601C, 0xD6BC, 0x73B2, - 0xD6BD, 0x7B2D, 0xD6BE, 0x7F9A, 0xD6BF, 0x7FCE, 0xD6C0, 0x8046, - 0xD6C1, 0x901E, 0xD6C2, 0x9234, 0xD6C3, 0x96F6, 0xD6C4, 0x9748, - 0xD6C5, 0x9818, 0xD6C6, 0x9F61, 0xD6C7, 0x4F8B, 0xD6C8, 0x6FA7, - 0xD6C9, 0x79AE, 0xD6CA, 0x91B4, 0xD6CB, 0x96B7, 0xD6CC, 0x52DE, - 0xD6CD, 0xF960, 0xD6CE, 0x6488, 0xD6CF, 0x64C4, 0xD6D0, 0x6AD3, - 0xD6D1, 0x6F5E, 0xD6D2, 0x7018, 0xD6D3, 0x7210, 0xD6D4, 0x76E7, - 0xD6D5, 0x8001, 0xD6D6, 0x8606, 0xD6D7, 0x865C, 0xD6D8, 0x8DEF, - 0xD6D9, 0x8F05, 0xD6DA, 0x9732, 0xD6DB, 0x9B6F, 0xD6DC, 0x9DFA, - 0xD6DD, 0x9E75, 0xD6DE, 0x788C, 0xD6DF, 0x797F, 0xD6E0, 0x7DA0, - 0xD6E1, 0x83C9, 0xD6E2, 0x9304, 0xD6E3, 0x9E7F, 0xD6E4, 0x9E93, - 0xD6E5, 0x8AD6, 0xD6E6, 0x58DF, 0xD6E7, 0x5F04, 0xD6E8, 0x6727, - 0xD6E9, 0x7027, 0xD6EA, 0x74CF, 0xD6EB, 0x7C60, 0xD6EC, 0x807E, - 0xD6ED, 0x5121, 0xD6EE, 0x7028, 0xD6EF, 0x7262, 0xD6F0, 0x78CA, - 0xD6F1, 0x8CC2, 0xD6F2, 0x8CDA, 0xD6F3, 0x8CF4, 0xD6F4, 0x96F7, - 0xD6F5, 0x4E86, 0xD6F6, 0x50DA, 0xD6F7, 0x5BEE, 0xD6F8, 0x5ED6, - 0xD6F9, 0x6599, 0xD6FA, 0x71CE, 0xD6FB, 0x7642, 0xD6FC, 0x77AD, - 0xD6FD, 0x804A, 0xD6FE, 0x84FC, 0xD7A1, 0x907C, 0xD7A2, 0x9B27, - 0xD7A3, 0x9F8D, 0xD7A4, 0x58D8, 0xD7A5, 0x5A41, 0xD7A6, 0x5C62, - 0xD7A7, 0x6A13, 0xD7A8, 0x6DDA, 0xD7A9, 0x6F0F, 0xD7AA, 0x763B, - 0xD7AB, 0x7D2F, 0xD7AC, 0x7E37, 0xD7AD, 0x851E, 0xD7AE, 0x8938, - 0xD7AF, 0x93E4, 0xD7B0, 0x964B, 0xD7B1, 0x5289, 0xD7B2, 0x65D2, - 0xD7B3, 0x67F3, 0xD7B4, 0x69B4, 0xD7B5, 0x6D41, 0xD7B6, 0x6E9C, - 0xD7B7, 0x700F, 0xD7B8, 0x7409, 0xD7B9, 0x7460, 0xD7BA, 0x7559, - 0xD7BB, 0x7624, 0xD7BC, 0x786B, 0xD7BD, 0x8B2C, 0xD7BE, 0x985E, - 0xD7BF, 0x516D, 0xD7C0, 0x622E, 0xD7C1, 0x9678, 0xD7C2, 0x4F96, - 0xD7C3, 0x502B, 0xD7C4, 0x5D19, 0xD7C5, 0x6DEA, 0xD7C6, 0x7DB8, - 0xD7C7, 0x8F2A, 0xD7C8, 0x5F8B, 0xD7C9, 0x6144, 0xD7CA, 0x6817, - 0xD7CB, 0xF961, 0xD7CC, 0x9686, 0xD7CD, 0x52D2, 0xD7CE, 0x808B, - 0xD7CF, 0x51DC, 0xD7D0, 0x51CC, 0xD7D1, 0x695E, 0xD7D2, 0x7A1C, - 0xD7D3, 0x7DBE, 0xD7D4, 0x83F1, 0xD7D5, 0x9675, 0xD7D6, 0x4FDA, - 0xD7D7, 0x5229, 0xD7D8, 0x5398, 0xD7D9, 0x540F, 0xD7DA, 0x550E, - 0xD7DB, 0x5C65, 0xD7DC, 0x60A7, 0xD7DD, 0x674E, 0xD7DE, 0x68A8, - 0xD7DF, 0x6D6C, 0xD7E0, 0x7281, 0xD7E1, 0x72F8, 0xD7E2, 0x7406, - 0xD7E3, 0x7483, 0xD7E4, 0xF962, 0xD7E5, 0x75E2, 0xD7E6, 0x7C6C, - 0xD7E7, 0x7F79, 0xD7E8, 0x7FB8, 0xD7E9, 0x8389, 0xD7EA, 0x88CF, - 0xD7EB, 0x88E1, 0xD7EC, 0x91CC, 0xD7ED, 0x91D0, 0xD7EE, 0x96E2, - 0xD7EF, 0x9BC9, 0xD7F0, 0x541D, 0xD7F1, 0x6F7E, 0xD7F2, 0x71D0, - 0xD7F3, 0x7498, 0xD7F4, 0x85FA, 0xD7F5, 0x8EAA, 0xD7F6, 0x96A3, - 0xD7F7, 0x9C57, 0xD7F8, 0x9E9F, 0xD7F9, 0x6797, 0xD7FA, 0x6DCB, - 0xD7FB, 0x7433, 0xD7FC, 0x81E8, 0xD7FD, 0x9716, 0xD7FE, 0x782C, - 0xD8A1, 0x7ACB, 0xD8A2, 0x7B20, 0xD8A3, 0x7C92, 0xD8A4, 0x6469, - 0xD8A5, 0x746A, 0xD8A6, 0x75F2, 0xD8A7, 0x78BC, 0xD8A8, 0x78E8, - 0xD8A9, 0x99AC, 0xD8AA, 0x9B54, 0xD8AB, 0x9EBB, 0xD8AC, 0x5BDE, - 0xD8AD, 0x5E55, 0xD8AE, 0x6F20, 0xD8AF, 0x819C, 0xD8B0, 0x83AB, - 0xD8B1, 0x9088, 0xD8B2, 0x4E07, 0xD8B3, 0x534D, 0xD8B4, 0x5A29, - 0xD8B5, 0x5DD2, 0xD8B6, 0x5F4E, 0xD8B7, 0x6162, 0xD8B8, 0x633D, - 0xD8B9, 0x6669, 0xD8BA, 0x66FC, 0xD8BB, 0x6EFF, 0xD8BC, 0x6F2B, - 0xD8BD, 0x7063, 0xD8BE, 0x779E, 0xD8BF, 0x842C, 0xD8C0, 0x8513, - 0xD8C1, 0x883B, 0xD8C2, 0x8F13, 0xD8C3, 0x9945, 0xD8C4, 0x9C3B, - 0xD8C5, 0x551C, 0xD8C6, 0x62B9, 0xD8C7, 0x672B, 0xD8C8, 0x6CAB, - 0xD8C9, 0x8309, 0xD8CA, 0x896A, 0xD8CB, 0x977A, 0xD8CC, 0x4EA1, - 0xD8CD, 0x5984, 0xD8CE, 0x5FD8, 0xD8CF, 0x5FD9, 0xD8D0, 0x671B, - 0xD8D1, 0x7DB2, 0xD8D2, 0x7F54, 0xD8D3, 0x8292, 0xD8D4, 0x832B, - 0xD8D5, 0x83BD, 0xD8D6, 0x8F1E, 0xD8D7, 0x9099, 0xD8D8, 0x57CB, - 0xD8D9, 0x59B9, 0xD8DA, 0x5A92, 0xD8DB, 0x5BD0, 0xD8DC, 0x6627, - 0xD8DD, 0x679A, 0xD8DE, 0x6885, 0xD8DF, 0x6BCF, 0xD8E0, 0x7164, - 0xD8E1, 0x7F75, 0xD8E2, 0x8CB7, 0xD8E3, 0x8CE3, 0xD8E4, 0x9081, - 0xD8E5, 0x9B45, 0xD8E6, 0x8108, 0xD8E7, 0x8C8A, 0xD8E8, 0x964C, - 0xD8E9, 0x9A40, 0xD8EA, 0x9EA5, 0xD8EB, 0x5B5F, 0xD8EC, 0x6C13, - 0xD8ED, 0x731B, 0xD8EE, 0x76F2, 0xD8EF, 0x76DF, 0xD8F0, 0x840C, - 0xD8F1, 0x51AA, 0xD8F2, 0x8993, 0xD8F3, 0x514D, 0xD8F4, 0x5195, - 0xD8F5, 0x52C9, 0xD8F6, 0x68C9, 0xD8F7, 0x6C94, 0xD8F8, 0x7704, - 0xD8F9, 0x7720, 0xD8FA, 0x7DBF, 0xD8FB, 0x7DEC, 0xD8FC, 0x9762, - 0xD8FD, 0x9EB5, 0xD8FE, 0x6EC5, 0xD9A1, 0x8511, 0xD9A2, 0x51A5, - 0xD9A3, 0x540D, 0xD9A4, 0x547D, 0xD9A5, 0x660E, 0xD9A6, 0x669D, - 0xD9A7, 0x6927, 0xD9A8, 0x6E9F, 0xD9A9, 0x76BF, 0xD9AA, 0x7791, - 0xD9AB, 0x8317, 0xD9AC, 0x84C2, 0xD9AD, 0x879F, 0xD9AE, 0x9169, - 0xD9AF, 0x9298, 0xD9B0, 0x9CF4, 0xD9B1, 0x8882, 0xD9B2, 0x4FAE, - 0xD9B3, 0x5192, 0xD9B4, 0x52DF, 0xD9B5, 0x59C6, 0xD9B6, 0x5E3D, - 0xD9B7, 0x6155, 0xD9B8, 0x6478, 0xD9B9, 0x6479, 0xD9BA, 0x66AE, - 0xD9BB, 0x67D0, 0xD9BC, 0x6A21, 0xD9BD, 0x6BCD, 0xD9BE, 0x6BDB, - 0xD9BF, 0x725F, 0xD9C0, 0x7261, 0xD9C1, 0x7441, 0xD9C2, 0x7738, - 0xD9C3, 0x77DB, 0xD9C4, 0x8017, 0xD9C5, 0x82BC, 0xD9C6, 0x8305, - 0xD9C7, 0x8B00, 0xD9C8, 0x8B28, 0xD9C9, 0x8C8C, 0xD9CA, 0x6728, - 0xD9CB, 0x6C90, 0xD9CC, 0x7267, 0xD9CD, 0x76EE, 0xD9CE, 0x7766, - 0xD9CF, 0x7A46, 0xD9D0, 0x9DA9, 0xD9D1, 0x6B7F, 0xD9D2, 0x6C92, - 0xD9D3, 0x5922, 0xD9D4, 0x6726, 0xD9D5, 0x8499, 0xD9D6, 0x536F, - 0xD9D7, 0x5893, 0xD9D8, 0x5999, 0xD9D9, 0x5EDF, 0xD9DA, 0x63CF, - 0xD9DB, 0x6634, 0xD9DC, 0x6773, 0xD9DD, 0x6E3A, 0xD9DE, 0x732B, - 0xD9DF, 0x7AD7, 0xD9E0, 0x82D7, 0xD9E1, 0x9328, 0xD9E2, 0x52D9, - 0xD9E3, 0x5DEB, 0xD9E4, 0x61AE, 0xD9E5, 0x61CB, 0xD9E6, 0x620A, - 0xD9E7, 0x62C7, 0xD9E8, 0x64AB, 0xD9E9, 0x65E0, 0xD9EA, 0x6959, - 0xD9EB, 0x6B66, 0xD9EC, 0x6BCB, 0xD9ED, 0x7121, 0xD9EE, 0x73F7, - 0xD9EF, 0x755D, 0xD9F0, 0x7E46, 0xD9F1, 0x821E, 0xD9F2, 0x8302, - 0xD9F3, 0x856A, 0xD9F4, 0x8AA3, 0xD9F5, 0x8CBF, 0xD9F6, 0x9727, - 0xD9F7, 0x9D61, 0xD9F8, 0x58A8, 0xD9F9, 0x9ED8, 0xD9FA, 0x5011, - 0xD9FB, 0x520E, 0xD9FC, 0x543B, 0xD9FD, 0x554F, 0xD9FE, 0x6587, - 0xDAA1, 0x6C76, 0xDAA2, 0x7D0A, 0xDAA3, 0x7D0B, 0xDAA4, 0x805E, - 0xDAA5, 0x868A, 0xDAA6, 0x9580, 0xDAA7, 0x96EF, 0xDAA8, 0x52FF, - 0xDAA9, 0x6C95, 0xDAAA, 0x7269, 0xDAAB, 0x5473, 0xDAAC, 0x5A9A, - 0xDAAD, 0x5C3E, 0xDAAE, 0x5D4B, 0xDAAF, 0x5F4C, 0xDAB0, 0x5FAE, - 0xDAB1, 0x672A, 0xDAB2, 0x68B6, 0xDAB3, 0x6963, 0xDAB4, 0x6E3C, - 0xDAB5, 0x6E44, 0xDAB6, 0x7709, 0xDAB7, 0x7C73, 0xDAB8, 0x7F8E, - 0xDAB9, 0x8587, 0xDABA, 0x8B0E, 0xDABB, 0x8FF7, 0xDABC, 0x9761, - 0xDABD, 0x9EF4, 0xDABE, 0x5CB7, 0xDABF, 0x60B6, 0xDAC0, 0x610D, - 0xDAC1, 0x61AB, 0xDAC2, 0x654F, 0xDAC3, 0x65FB, 0xDAC4, 0x65FC, - 0xDAC5, 0x6C11, 0xDAC6, 0x6CEF, 0xDAC7, 0x739F, 0xDAC8, 0x73C9, - 0xDAC9, 0x7DE1, 0xDACA, 0x9594, 0xDACB, 0x5BC6, 0xDACC, 0x871C, - 0xDACD, 0x8B10, 0xDACE, 0x525D, 0xDACF, 0x535A, 0xDAD0, 0x62CD, - 0xDAD1, 0x640F, 0xDAD2, 0x64B2, 0xDAD3, 0x6734, 0xDAD4, 0x6A38, - 0xDAD5, 0x6CCA, 0xDAD6, 0x73C0, 0xDAD7, 0x749E, 0xDAD8, 0x7B94, - 0xDAD9, 0x7C95, 0xDADA, 0x7E1B, 0xDADB, 0x818A, 0xDADC, 0x8236, - 0xDADD, 0x8584, 0xDADE, 0x8FEB, 0xDADF, 0x96F9, 0xDAE0, 0x99C1, - 0xDAE1, 0x4F34, 0xDAE2, 0x534A, 0xDAE3, 0x53CD, 0xDAE4, 0x53DB, - 0xDAE5, 0x62CC, 0xDAE6, 0x642C, 0xDAE7, 0x6500, 0xDAE8, 0x6591, - 0xDAE9, 0x69C3, 0xDAEA, 0x6CEE, 0xDAEB, 0x6F58, 0xDAEC, 0x73ED, - 0xDAED, 0x7554, 0xDAEE, 0x7622, 0xDAEF, 0x76E4, 0xDAF0, 0x76FC, - 0xDAF1, 0x78D0, 0xDAF2, 0x78FB, 0xDAF3, 0x792C, 0xDAF4, 0x7D46, - 0xDAF5, 0x822C, 0xDAF6, 0x87E0, 0xDAF7, 0x8FD4, 0xDAF8, 0x9812, - 0xDAF9, 0x98EF, 0xDAFA, 0x52C3, 0xDAFB, 0x62D4, 0xDAFC, 0x64A5, - 0xDAFD, 0x6E24, 0xDAFE, 0x6F51, 0xDBA1, 0x767C, 0xDBA2, 0x8DCB, - 0xDBA3, 0x91B1, 0xDBA4, 0x9262, 0xDBA5, 0x9AEE, 0xDBA6, 0x9B43, - 0xDBA7, 0x5023, 0xDBA8, 0x508D, 0xDBA9, 0x574A, 0xDBAA, 0x59A8, - 0xDBAB, 0x5C28, 0xDBAC, 0x5E47, 0xDBAD, 0x5F77, 0xDBAE, 0x623F, - 0xDBAF, 0x653E, 0xDBB0, 0x65B9, 0xDBB1, 0x65C1, 0xDBB2, 0x6609, - 0xDBB3, 0x678B, 0xDBB4, 0x699C, 0xDBB5, 0x6EC2, 0xDBB6, 0x78C5, - 0xDBB7, 0x7D21, 0xDBB8, 0x80AA, 0xDBB9, 0x8180, 0xDBBA, 0x822B, - 0xDBBB, 0x82B3, 0xDBBC, 0x84A1, 0xDBBD, 0x868C, 0xDBBE, 0x8A2A, - 0xDBBF, 0x8B17, 0xDBC0, 0x90A6, 0xDBC1, 0x9632, 0xDBC2, 0x9F90, - 0xDBC3, 0x500D, 0xDBC4, 0x4FF3, 0xDBC5, 0xF963, 0xDBC6, 0x57F9, - 0xDBC7, 0x5F98, 0xDBC8, 0x62DC, 0xDBC9, 0x6392, 0xDBCA, 0x676F, - 0xDBCB, 0x6E43, 0xDBCC, 0x7119, 0xDBCD, 0x76C3, 0xDBCE, 0x80CC, - 0xDBCF, 0x80DA, 0xDBD0, 0x88F4, 0xDBD1, 0x88F5, 0xDBD2, 0x8919, - 0xDBD3, 0x8CE0, 0xDBD4, 0x8F29, 0xDBD5, 0x914D, 0xDBD6, 0x966A, - 0xDBD7, 0x4F2F, 0xDBD8, 0x4F70, 0xDBD9, 0x5E1B, 0xDBDA, 0x67CF, - 0xDBDB, 0x6822, 0xDBDC, 0x767D, 0xDBDD, 0x767E, 0xDBDE, 0x9B44, - 0xDBDF, 0x5E61, 0xDBE0, 0x6A0A, 0xDBE1, 0x7169, 0xDBE2, 0x71D4, - 0xDBE3, 0x756A, 0xDBE4, 0xF964, 0xDBE5, 0x7E41, 0xDBE6, 0x8543, - 0xDBE7, 0x85E9, 0xDBE8, 0x98DC, 0xDBE9, 0x4F10, 0xDBEA, 0x7B4F, - 0xDBEB, 0x7F70, 0xDBEC, 0x95A5, 0xDBED, 0x51E1, 0xDBEE, 0x5E06, - 0xDBEF, 0x68B5, 0xDBF0, 0x6C3E, 0xDBF1, 0x6C4E, 0xDBF2, 0x6CDB, - 0xDBF3, 0x72AF, 0xDBF4, 0x7BC4, 0xDBF5, 0x8303, 0xDBF6, 0x6CD5, - 0xDBF7, 0x743A, 0xDBF8, 0x50FB, 0xDBF9, 0x5288, 0xDBFA, 0x58C1, - 0xDBFB, 0x64D8, 0xDBFC, 0x6A97, 0xDBFD, 0x74A7, 0xDBFE, 0x7656, - 0xDCA1, 0x78A7, 0xDCA2, 0x8617, 0xDCA3, 0x95E2, 0xDCA4, 0x9739, - 0xDCA5, 0xF965, 0xDCA6, 0x535E, 0xDCA7, 0x5F01, 0xDCA8, 0x8B8A, - 0xDCA9, 0x8FA8, 0xDCAA, 0x8FAF, 0xDCAB, 0x908A, 0xDCAC, 0x5225, - 0xDCAD, 0x77A5, 0xDCAE, 0x9C49, 0xDCAF, 0x9F08, 0xDCB0, 0x4E19, - 0xDCB1, 0x5002, 0xDCB2, 0x5175, 0xDCB3, 0x5C5B, 0xDCB4, 0x5E77, - 0xDCB5, 0x661E, 0xDCB6, 0x663A, 0xDCB7, 0x67C4, 0xDCB8, 0x68C5, - 0xDCB9, 0x70B3, 0xDCBA, 0x7501, 0xDCBB, 0x75C5, 0xDCBC, 0x79C9, - 0xDCBD, 0x7ADD, 0xDCBE, 0x8F27, 0xDCBF, 0x9920, 0xDCC0, 0x9A08, - 0xDCC1, 0x4FDD, 0xDCC2, 0x5821, 0xDCC3, 0x5831, 0xDCC4, 0x5BF6, - 0xDCC5, 0x666E, 0xDCC6, 0x6B65, 0xDCC7, 0x6D11, 0xDCC8, 0x6E7A, - 0xDCC9, 0x6F7D, 0xDCCA, 0x73E4, 0xDCCB, 0x752B, 0xDCCC, 0x83E9, - 0xDCCD, 0x88DC, 0xDCCE, 0x8913, 0xDCCF, 0x8B5C, 0xDCD0, 0x8F14, - 0xDCD1, 0x4F0F, 0xDCD2, 0x50D5, 0xDCD3, 0x5310, 0xDCD4, 0x535C, - 0xDCD5, 0x5B93, 0xDCD6, 0x5FA9, 0xDCD7, 0x670D, 0xDCD8, 0x798F, - 0xDCD9, 0x8179, 0xDCDA, 0x832F, 0xDCDB, 0x8514, 0xDCDC, 0x8907, - 0xDCDD, 0x8986, 0xDCDE, 0x8F39, 0xDCDF, 0x8F3B, 0xDCE0, 0x99A5, - 0xDCE1, 0x9C12, 0xDCE2, 0x672C, 0xDCE3, 0x4E76, 0xDCE4, 0x4FF8, - 0xDCE5, 0x5949, 0xDCE6, 0x5C01, 0xDCE7, 0x5CEF, 0xDCE8, 0x5CF0, - 0xDCE9, 0x6367, 0xDCEA, 0x68D2, 0xDCEB, 0x70FD, 0xDCEC, 0x71A2, - 0xDCED, 0x742B, 0xDCEE, 0x7E2B, 0xDCEF, 0x84EC, 0xDCF0, 0x8702, - 0xDCF1, 0x9022, 0xDCF2, 0x92D2, 0xDCF3, 0x9CF3, 0xDCF4, 0x4E0D, - 0xDCF5, 0x4ED8, 0xDCF6, 0x4FEF, 0xDCF7, 0x5085, 0xDCF8, 0x5256, - 0xDCF9, 0x526F, 0xDCFA, 0x5426, 0xDCFB, 0x5490, 0xDCFC, 0x57E0, - 0xDCFD, 0x592B, 0xDCFE, 0x5A66, 0xDDA1, 0x5B5A, 0xDDA2, 0x5B75, - 0xDDA3, 0x5BCC, 0xDDA4, 0x5E9C, 0xDDA5, 0xF966, 0xDDA6, 0x6276, - 0xDDA7, 0x6577, 0xDDA8, 0x65A7, 0xDDA9, 0x6D6E, 0xDDAA, 0x6EA5, - 0xDDAB, 0x7236, 0xDDAC, 0x7B26, 0xDDAD, 0x7C3F, 0xDDAE, 0x7F36, - 0xDDAF, 0x8150, 0xDDB0, 0x8151, 0xDDB1, 0x819A, 0xDDB2, 0x8240, - 0xDDB3, 0x8299, 0xDDB4, 0x83A9, 0xDDB5, 0x8A03, 0xDDB6, 0x8CA0, - 0xDDB7, 0x8CE6, 0xDDB8, 0x8CFB, 0xDDB9, 0x8D74, 0xDDBA, 0x8DBA, - 0xDDBB, 0x90E8, 0xDDBC, 0x91DC, 0xDDBD, 0x961C, 0xDDBE, 0x9644, - 0xDDBF, 0x99D9, 0xDDC0, 0x9CE7, 0xDDC1, 0x5317, 0xDDC2, 0x5206, - 0xDDC3, 0x5429, 0xDDC4, 0x5674, 0xDDC5, 0x58B3, 0xDDC6, 0x5954, - 0xDDC7, 0x596E, 0xDDC8, 0x5FFF, 0xDDC9, 0x61A4, 0xDDCA, 0x626E, - 0xDDCB, 0x6610, 0xDDCC, 0x6C7E, 0xDDCD, 0x711A, 0xDDCE, 0x76C6, - 0xDDCF, 0x7C89, 0xDDD0, 0x7CDE, 0xDDD1, 0x7D1B, 0xDDD2, 0x82AC, - 0xDDD3, 0x8CC1, 0xDDD4, 0x96F0, 0xDDD5, 0xF967, 0xDDD6, 0x4F5B, - 0xDDD7, 0x5F17, 0xDDD8, 0x5F7F, 0xDDD9, 0x62C2, 0xDDDA, 0x5D29, - 0xDDDB, 0x670B, 0xDDDC, 0x68DA, 0xDDDD, 0x787C, 0xDDDE, 0x7E43, - 0xDDDF, 0x9D6C, 0xDDE0, 0x4E15, 0xDDE1, 0x5099, 0xDDE2, 0x5315, - 0xDDE3, 0x532A, 0xDDE4, 0x5351, 0xDDE5, 0x5983, 0xDDE6, 0x5A62, - 0xDDE7, 0x5E87, 0xDDE8, 0x60B2, 0xDDE9, 0x618A, 0xDDEA, 0x6249, - 0xDDEB, 0x6279, 0xDDEC, 0x6590, 0xDDED, 0x6787, 0xDDEE, 0x69A7, - 0xDDEF, 0x6BD4, 0xDDF0, 0x6BD6, 0xDDF1, 0x6BD7, 0xDDF2, 0x6BD8, - 0xDDF3, 0x6CB8, 0xDDF4, 0xF968, 0xDDF5, 0x7435, 0xDDF6, 0x75FA, - 0xDDF7, 0x7812, 0xDDF8, 0x7891, 0xDDF9, 0x79D5, 0xDDFA, 0x79D8, - 0xDDFB, 0x7C83, 0xDDFC, 0x7DCB, 0xDDFD, 0x7FE1, 0xDDFE, 0x80A5, - 0xDEA1, 0x813E, 0xDEA2, 0x81C2, 0xDEA3, 0x83F2, 0xDEA4, 0x871A, - 0xDEA5, 0x88E8, 0xDEA6, 0x8AB9, 0xDEA7, 0x8B6C, 0xDEA8, 0x8CBB, - 0xDEA9, 0x9119, 0xDEAA, 0x975E, 0xDEAB, 0x98DB, 0xDEAC, 0x9F3B, - 0xDEAD, 0x56AC, 0xDEAE, 0x5B2A, 0xDEAF, 0x5F6C, 0xDEB0, 0x658C, - 0xDEB1, 0x6AB3, 0xDEB2, 0x6BAF, 0xDEB3, 0x6D5C, 0xDEB4, 0x6FF1, - 0xDEB5, 0x7015, 0xDEB6, 0x725D, 0xDEB7, 0x73AD, 0xDEB8, 0x8CA7, - 0xDEB9, 0x8CD3, 0xDEBA, 0x983B, 0xDEBB, 0x6191, 0xDEBC, 0x6C37, - 0xDEBD, 0x8058, 0xDEBE, 0x9A01, 0xDEBF, 0x4E4D, 0xDEC0, 0x4E8B, - 0xDEC1, 0x4E9B, 0xDEC2, 0x4ED5, 0xDEC3, 0x4F3A, 0xDEC4, 0x4F3C, - 0xDEC5, 0x4F7F, 0xDEC6, 0x4FDF, 0xDEC7, 0x50FF, 0xDEC8, 0x53F2, - 0xDEC9, 0x53F8, 0xDECA, 0x5506, 0xDECB, 0x55E3, 0xDECC, 0x56DB, - 0xDECD, 0x58EB, 0xDECE, 0x5962, 0xDECF, 0x5A11, 0xDED0, 0x5BEB, - 0xDED1, 0x5BFA, 0xDED2, 0x5C04, 0xDED3, 0x5DF3, 0xDED4, 0x5E2B, - 0xDED5, 0x5F99, 0xDED6, 0x601D, 0xDED7, 0x6368, 0xDED8, 0x659C, - 0xDED9, 0x65AF, 0xDEDA, 0x67F6, 0xDEDB, 0x67FB, 0xDEDC, 0x68AD, - 0xDEDD, 0x6B7B, 0xDEDE, 0x6C99, 0xDEDF, 0x6CD7, 0xDEE0, 0x6E23, - 0xDEE1, 0x7009, 0xDEE2, 0x7345, 0xDEE3, 0x7802, 0xDEE4, 0x793E, - 0xDEE5, 0x7940, 0xDEE6, 0x7960, 0xDEE7, 0x79C1, 0xDEE8, 0x7BE9, - 0xDEE9, 0x7D17, 0xDEEA, 0x7D72, 0xDEEB, 0x8086, 0xDEEC, 0x820D, - 0xDEED, 0x838E, 0xDEEE, 0x84D1, 0xDEEF, 0x86C7, 0xDEF0, 0x88DF, - 0xDEF1, 0x8A50, 0xDEF2, 0x8A5E, 0xDEF3, 0x8B1D, 0xDEF4, 0x8CDC, - 0xDEF5, 0x8D66, 0xDEF6, 0x8FAD, 0xDEF7, 0x90AA, 0xDEF8, 0x98FC, - 0xDEF9, 0x99DF, 0xDEFA, 0x9E9D, 0xDEFB, 0x524A, 0xDEFC, 0xF969, - 0xDEFD, 0x6714, 0xDEFE, 0xF96A, 0xDFA1, 0x5098, 0xDFA2, 0x522A, - 0xDFA3, 0x5C71, 0xDFA4, 0x6563, 0xDFA5, 0x6C55, 0xDFA6, 0x73CA, - 0xDFA7, 0x7523, 0xDFA8, 0x759D, 0xDFA9, 0x7B97, 0xDFAA, 0x849C, - 0xDFAB, 0x9178, 0xDFAC, 0x9730, 0xDFAD, 0x4E77, 0xDFAE, 0x6492, - 0xDFAF, 0x6BBA, 0xDFB0, 0x715E, 0xDFB1, 0x85A9, 0xDFB2, 0x4E09, - 0xDFB3, 0xF96B, 0xDFB4, 0x6749, 0xDFB5, 0x68EE, 0xDFB6, 0x6E17, - 0xDFB7, 0x829F, 0xDFB8, 0x8518, 0xDFB9, 0x886B, 0xDFBA, 0x63F7, - 0xDFBB, 0x6F81, 0xDFBC, 0x9212, 0xDFBD, 0x98AF, 0xDFBE, 0x4E0A, - 0xDFBF, 0x50B7, 0xDFC0, 0x50CF, 0xDFC1, 0x511F, 0xDFC2, 0x5546, - 0xDFC3, 0x55AA, 0xDFC4, 0x5617, 0xDFC5, 0x5B40, 0xDFC6, 0x5C19, - 0xDFC7, 0x5CE0, 0xDFC8, 0x5E38, 0xDFC9, 0x5E8A, 0xDFCA, 0x5EA0, - 0xDFCB, 0x5EC2, 0xDFCC, 0x60F3, 0xDFCD, 0x6851, 0xDFCE, 0x6A61, - 0xDFCF, 0x6E58, 0xDFD0, 0x723D, 0xDFD1, 0x7240, 0xDFD2, 0x72C0, - 0xDFD3, 0x76F8, 0xDFD4, 0x7965, 0xDFD5, 0x7BB1, 0xDFD6, 0x7FD4, - 0xDFD7, 0x88F3, 0xDFD8, 0x89F4, 0xDFD9, 0x8A73, 0xDFDA, 0x8C61, - 0xDFDB, 0x8CDE, 0xDFDC, 0x971C, 0xDFDD, 0x585E, 0xDFDE, 0x74BD, - 0xDFDF, 0x8CFD, 0xDFE0, 0x55C7, 0xDFE1, 0xF96C, 0xDFE2, 0x7A61, - 0xDFE3, 0x7D22, 0xDFE4, 0x8272, 0xDFE5, 0x7272, 0xDFE6, 0x751F, - 0xDFE7, 0x7525, 0xDFE8, 0xF96D, 0xDFE9, 0x7B19, 0xDFEA, 0x5885, - 0xDFEB, 0x58FB, 0xDFEC, 0x5DBC, 0xDFED, 0x5E8F, 0xDFEE, 0x5EB6, - 0xDFEF, 0x5F90, 0xDFF0, 0x6055, 0xDFF1, 0x6292, 0xDFF2, 0x637F, - 0xDFF3, 0x654D, 0xDFF4, 0x6691, 0xDFF5, 0x66D9, 0xDFF6, 0x66F8, - 0xDFF7, 0x6816, 0xDFF8, 0x68F2, 0xDFF9, 0x7280, 0xDFFA, 0x745E, - 0xDFFB, 0x7B6E, 0xDFFC, 0x7D6E, 0xDFFD, 0x7DD6, 0xDFFE, 0x7F72, - 0xE0A1, 0x80E5, 0xE0A2, 0x8212, 0xE0A3, 0x85AF, 0xE0A4, 0x897F, - 0xE0A5, 0x8A93, 0xE0A6, 0x901D, 0xE0A7, 0x92E4, 0xE0A8, 0x9ECD, - 0xE0A9, 0x9F20, 0xE0AA, 0x5915, 0xE0AB, 0x596D, 0xE0AC, 0x5E2D, - 0xE0AD, 0x60DC, 0xE0AE, 0x6614, 0xE0AF, 0x6673, 0xE0B0, 0x6790, - 0xE0B1, 0x6C50, 0xE0B2, 0x6DC5, 0xE0B3, 0x6F5F, 0xE0B4, 0x77F3, - 0xE0B5, 0x78A9, 0xE0B6, 0x84C6, 0xE0B7, 0x91CB, 0xE0B8, 0x932B, - 0xE0B9, 0x4ED9, 0xE0BA, 0x50CA, 0xE0BB, 0x5148, 0xE0BC, 0x5584, - 0xE0BD, 0x5B0B, 0xE0BE, 0x5BA3, 0xE0BF, 0x6247, 0xE0C0, 0x657E, - 0xE0C1, 0x65CB, 0xE0C2, 0x6E32, 0xE0C3, 0x717D, 0xE0C4, 0x7401, - 0xE0C5, 0x7444, 0xE0C6, 0x7487, 0xE0C7, 0x74BF, 0xE0C8, 0x766C, - 0xE0C9, 0x79AA, 0xE0CA, 0x7DDA, 0xE0CB, 0x7E55, 0xE0CC, 0x7FA8, - 0xE0CD, 0x817A, 0xE0CE, 0x81B3, 0xE0CF, 0x8239, 0xE0D0, 0x861A, - 0xE0D1, 0x87EC, 0xE0D2, 0x8A75, 0xE0D3, 0x8DE3, 0xE0D4, 0x9078, - 0xE0D5, 0x9291, 0xE0D6, 0x9425, 0xE0D7, 0x994D, 0xE0D8, 0x9BAE, - 0xE0D9, 0x5368, 0xE0DA, 0x5C51, 0xE0DB, 0x6954, 0xE0DC, 0x6CC4, - 0xE0DD, 0x6D29, 0xE0DE, 0x6E2B, 0xE0DF, 0x820C, 0xE0E0, 0x859B, - 0xE0E1, 0x893B, 0xE0E2, 0x8A2D, 0xE0E3, 0x8AAA, 0xE0E4, 0x96EA, - 0xE0E5, 0x9F67, 0xE0E6, 0x5261, 0xE0E7, 0x66B9, 0xE0E8, 0x6BB2, - 0xE0E9, 0x7E96, 0xE0EA, 0x87FE, 0xE0EB, 0x8D0D, 0xE0EC, 0x9583, - 0xE0ED, 0x965D, 0xE0EE, 0x651D, 0xE0EF, 0x6D89, 0xE0F0, 0x71EE, - 0xE0F1, 0xF96E, 0xE0F2, 0x57CE, 0xE0F3, 0x59D3, 0xE0F4, 0x5BAC, - 0xE0F5, 0x6027, 0xE0F6, 0x60FA, 0xE0F7, 0x6210, 0xE0F8, 0x661F, - 0xE0F9, 0x665F, 0xE0FA, 0x7329, 0xE0FB, 0x73F9, 0xE0FC, 0x76DB, - 0xE0FD, 0x7701, 0xE0FE, 0x7B6C, 0xE1A1, 0x8056, 0xE1A2, 0x8072, - 0xE1A3, 0x8165, 0xE1A4, 0x8AA0, 0xE1A5, 0x9192, 0xE1A6, 0x4E16, - 0xE1A7, 0x52E2, 0xE1A8, 0x6B72, 0xE1A9, 0x6D17, 0xE1AA, 0x7A05, - 0xE1AB, 0x7B39, 0xE1AC, 0x7D30, 0xE1AD, 0xF96F, 0xE1AE, 0x8CB0, - 0xE1AF, 0x53EC, 0xE1B0, 0x562F, 0xE1B1, 0x5851, 0xE1B2, 0x5BB5, - 0xE1B3, 0x5C0F, 0xE1B4, 0x5C11, 0xE1B5, 0x5DE2, 0xE1B6, 0x6240, - 0xE1B7, 0x6383, 0xE1B8, 0x6414, 0xE1B9, 0x662D, 0xE1BA, 0x68B3, - 0xE1BB, 0x6CBC, 0xE1BC, 0x6D88, 0xE1BD, 0x6EAF, 0xE1BE, 0x701F, - 0xE1BF, 0x70A4, 0xE1C0, 0x71D2, 0xE1C1, 0x7526, 0xE1C2, 0x758F, - 0xE1C3, 0x758E, 0xE1C4, 0x7619, 0xE1C5, 0x7B11, 0xE1C6, 0x7BE0, - 0xE1C7, 0x7C2B, 0xE1C8, 0x7D20, 0xE1C9, 0x7D39, 0xE1CA, 0x852C, - 0xE1CB, 0x856D, 0xE1CC, 0x8607, 0xE1CD, 0x8A34, 0xE1CE, 0x900D, - 0xE1CF, 0x9061, 0xE1D0, 0x90B5, 0xE1D1, 0x92B7, 0xE1D2, 0x97F6, - 0xE1D3, 0x9A37, 0xE1D4, 0x4FD7, 0xE1D5, 0x5C6C, 0xE1D6, 0x675F, - 0xE1D7, 0x6D91, 0xE1D8, 0x7C9F, 0xE1D9, 0x7E8C, 0xE1DA, 0x8B16, - 0xE1DB, 0x8D16, 0xE1DC, 0x901F, 0xE1DD, 0x5B6B, 0xE1DE, 0x5DFD, - 0xE1DF, 0x640D, 0xE1E0, 0x84C0, 0xE1E1, 0x905C, 0xE1E2, 0x98E1, - 0xE1E3, 0x7387, 0xE1E4, 0x5B8B, 0xE1E5, 0x609A, 0xE1E6, 0x677E, - 0xE1E7, 0x6DDE, 0xE1E8, 0x8A1F, 0xE1E9, 0x8AA6, 0xE1EA, 0x9001, - 0xE1EB, 0x980C, 0xE1EC, 0x5237, 0xE1ED, 0xF970, 0xE1EE, 0x7051, - 0xE1EF, 0x788E, 0xE1F0, 0x9396, 0xE1F1, 0x8870, 0xE1F2, 0x91D7, - 0xE1F3, 0x4FEE, 0xE1F4, 0x53D7, 0xE1F5, 0x55FD, 0xE1F6, 0x56DA, - 0xE1F7, 0x5782, 0xE1F8, 0x58FD, 0xE1F9, 0x5AC2, 0xE1FA, 0x5B88, - 0xE1FB, 0x5CAB, 0xE1FC, 0x5CC0, 0xE1FD, 0x5E25, 0xE1FE, 0x6101, - 0xE2A1, 0x620D, 0xE2A2, 0x624B, 0xE2A3, 0x6388, 0xE2A4, 0x641C, - 0xE2A5, 0x6536, 0xE2A6, 0x6578, 0xE2A7, 0x6A39, 0xE2A8, 0x6B8A, - 0xE2A9, 0x6C34, 0xE2AA, 0x6D19, 0xE2AB, 0x6F31, 0xE2AC, 0x71E7, - 0xE2AD, 0x72E9, 0xE2AE, 0x7378, 0xE2AF, 0x7407, 0xE2B0, 0x74B2, - 0xE2B1, 0x7626, 0xE2B2, 0x7761, 0xE2B3, 0x79C0, 0xE2B4, 0x7A57, - 0xE2B5, 0x7AEA, 0xE2B6, 0x7CB9, 0xE2B7, 0x7D8F, 0xE2B8, 0x7DAC, - 0xE2B9, 0x7E61, 0xE2BA, 0x7F9E, 0xE2BB, 0x8129, 0xE2BC, 0x8331, - 0xE2BD, 0x8490, 0xE2BE, 0x84DA, 0xE2BF, 0x85EA, 0xE2C0, 0x8896, - 0xE2C1, 0x8AB0, 0xE2C2, 0x8B90, 0xE2C3, 0x8F38, 0xE2C4, 0x9042, - 0xE2C5, 0x9083, 0xE2C6, 0x916C, 0xE2C7, 0x9296, 0xE2C8, 0x92B9, - 0xE2C9, 0x968B, 0xE2CA, 0x96A7, 0xE2CB, 0x96A8, 0xE2CC, 0x96D6, - 0xE2CD, 0x9700, 0xE2CE, 0x9808, 0xE2CF, 0x9996, 0xE2D0, 0x9AD3, - 0xE2D1, 0x9B1A, 0xE2D2, 0x53D4, 0xE2D3, 0x587E, 0xE2D4, 0x5919, - 0xE2D5, 0x5B70, 0xE2D6, 0x5BBF, 0xE2D7, 0x6DD1, 0xE2D8, 0x6F5A, - 0xE2D9, 0x719F, 0xE2DA, 0x7421, 0xE2DB, 0x74B9, 0xE2DC, 0x8085, - 0xE2DD, 0x83FD, 0xE2DE, 0x5DE1, 0xE2DF, 0x5F87, 0xE2E0, 0x5FAA, - 0xE2E1, 0x6042, 0xE2E2, 0x65EC, 0xE2E3, 0x6812, 0xE2E4, 0x696F, - 0xE2E5, 0x6A53, 0xE2E6, 0x6B89, 0xE2E7, 0x6D35, 0xE2E8, 0x6DF3, - 0xE2E9, 0x73E3, 0xE2EA, 0x76FE, 0xE2EB, 0x77AC, 0xE2EC, 0x7B4D, - 0xE2ED, 0x7D14, 0xE2EE, 0x8123, 0xE2EF, 0x821C, 0xE2F0, 0x8340, - 0xE2F1, 0x84F4, 0xE2F2, 0x8563, 0xE2F3, 0x8A62, 0xE2F4, 0x8AC4, - 0xE2F5, 0x9187, 0xE2F6, 0x931E, 0xE2F7, 0x9806, 0xE2F8, 0x99B4, - 0xE2F9, 0x620C, 0xE2FA, 0x8853, 0xE2FB, 0x8FF0, 0xE2FC, 0x9265, - 0xE2FD, 0x5D07, 0xE2FE, 0x5D27, 0xE3A1, 0x5D69, 0xE3A2, 0x745F, - 0xE3A3, 0x819D, 0xE3A4, 0x8768, 0xE3A5, 0x6FD5, 0xE3A6, 0x62FE, - 0xE3A7, 0x7FD2, 0xE3A8, 0x8936, 0xE3A9, 0x8972, 0xE3AA, 0x4E1E, - 0xE3AB, 0x4E58, 0xE3AC, 0x50E7, 0xE3AD, 0x52DD, 0xE3AE, 0x5347, - 0xE3AF, 0x627F, 0xE3B0, 0x6607, 0xE3B1, 0x7E69, 0xE3B2, 0x8805, - 0xE3B3, 0x965E, 0xE3B4, 0x4F8D, 0xE3B5, 0x5319, 0xE3B6, 0x5636, - 0xE3B7, 0x59CB, 0xE3B8, 0x5AA4, 0xE3B9, 0x5C38, 0xE3BA, 0x5C4E, - 0xE3BB, 0x5C4D, 0xE3BC, 0x5E02, 0xE3BD, 0x5F11, 0xE3BE, 0x6043, - 0xE3BF, 0x65BD, 0xE3C0, 0x662F, 0xE3C1, 0x6642, 0xE3C2, 0x67BE, - 0xE3C3, 0x67F4, 0xE3C4, 0x731C, 0xE3C5, 0x77E2, 0xE3C6, 0x793A, - 0xE3C7, 0x7FC5, 0xE3C8, 0x8494, 0xE3C9, 0x84CD, 0xE3CA, 0x8996, - 0xE3CB, 0x8A66, 0xE3CC, 0x8A69, 0xE3CD, 0x8AE1, 0xE3CE, 0x8C55, - 0xE3CF, 0x8C7A, 0xE3D0, 0x57F4, 0xE3D1, 0x5BD4, 0xE3D2, 0x5F0F, - 0xE3D3, 0x606F, 0xE3D4, 0x62ED, 0xE3D5, 0x690D, 0xE3D6, 0x6B96, - 0xE3D7, 0x6E5C, 0xE3D8, 0x7184, 0xE3D9, 0x7BD2, 0xE3DA, 0x8755, - 0xE3DB, 0x8B58, 0xE3DC, 0x8EFE, 0xE3DD, 0x98DF, 0xE3DE, 0x98FE, - 0xE3DF, 0x4F38, 0xE3E0, 0x4F81, 0xE3E1, 0x4FE1, 0xE3E2, 0x547B, - 0xE3E3, 0x5A20, 0xE3E4, 0x5BB8, 0xE3E5, 0x613C, 0xE3E6, 0x65B0, - 0xE3E7, 0x6668, 0xE3E8, 0x71FC, 0xE3E9, 0x7533, 0xE3EA, 0x795E, - 0xE3EB, 0x7D33, 0xE3EC, 0x814E, 0xE3ED, 0x81E3, 0xE3EE, 0x8398, - 0xE3EF, 0x85AA, 0xE3F0, 0x85CE, 0xE3F1, 0x8703, 0xE3F2, 0x8A0A, - 0xE3F3, 0x8EAB, 0xE3F4, 0x8F9B, 0xE3F5, 0xF971, 0xE3F6, 0x8FC5, - 0xE3F7, 0x5931, 0xE3F8, 0x5BA4, 0xE3F9, 0x5BE6, 0xE3FA, 0x6089, - 0xE3FB, 0x5BE9, 0xE3FC, 0x5C0B, 0xE3FD, 0x5FC3, 0xE3FE, 0x6C81, - 0xE4A1, 0xF972, 0xE4A2, 0x6DF1, 0xE4A3, 0x700B, 0xE4A4, 0x751A, - 0xE4A5, 0x82AF, 0xE4A6, 0x8AF6, 0xE4A7, 0x4EC0, 0xE4A8, 0x5341, - 0xE4A9, 0xF973, 0xE4AA, 0x96D9, 0xE4AB, 0x6C0F, 0xE4AC, 0x4E9E, - 0xE4AD, 0x4FC4, 0xE4AE, 0x5152, 0xE4AF, 0x555E, 0xE4B0, 0x5A25, - 0xE4B1, 0x5CE8, 0xE4B2, 0x6211, 0xE4B3, 0x7259, 0xE4B4, 0x82BD, - 0xE4B5, 0x83AA, 0xE4B6, 0x86FE, 0xE4B7, 0x8859, 0xE4B8, 0x8A1D, - 0xE4B9, 0x963F, 0xE4BA, 0x96C5, 0xE4BB, 0x9913, 0xE4BC, 0x9D09, - 0xE4BD, 0x9D5D, 0xE4BE, 0x580A, 0xE4BF, 0x5CB3, 0xE4C0, 0x5DBD, - 0xE4C1, 0x5E44, 0xE4C2, 0x60E1, 0xE4C3, 0x6115, 0xE4C4, 0x63E1, - 0xE4C5, 0x6A02, 0xE4C6, 0x6E25, 0xE4C7, 0x9102, 0xE4C8, 0x9354, - 0xE4C9, 0x984E, 0xE4CA, 0x9C10, 0xE4CB, 0x9F77, 0xE4CC, 0x5B89, - 0xE4CD, 0x5CB8, 0xE4CE, 0x6309, 0xE4CF, 0x664F, 0xE4D0, 0x6848, - 0xE4D1, 0x773C, 0xE4D2, 0x96C1, 0xE4D3, 0x978D, 0xE4D4, 0x9854, - 0xE4D5, 0x9B9F, 0xE4D6, 0x65A1, 0xE4D7, 0x8B01, 0xE4D8, 0x8ECB, - 0xE4D9, 0x95BC, 0xE4DA, 0x5535, 0xE4DB, 0x5CA9, 0xE4DC, 0x5DD6, - 0xE4DD, 0x5EB5, 0xE4DE, 0x6697, 0xE4DF, 0x764C, 0xE4E0, 0x83F4, - 0xE4E1, 0x95C7, 0xE4E2, 0x58D3, 0xE4E3, 0x62BC, 0xE4E4, 0x72CE, - 0xE4E5, 0x9D28, 0xE4E6, 0x4EF0, 0xE4E7, 0x592E, 0xE4E8, 0x600F, - 0xE4E9, 0x663B, 0xE4EA, 0x6B83, 0xE4EB, 0x79E7, 0xE4EC, 0x9D26, - 0xE4ED, 0x5393, 0xE4EE, 0x54C0, 0xE4EF, 0x57C3, 0xE4F0, 0x5D16, - 0xE4F1, 0x611B, 0xE4F2, 0x66D6, 0xE4F3, 0x6DAF, 0xE4F4, 0x788D, - 0xE4F5, 0x827E, 0xE4F6, 0x9698, 0xE4F7, 0x9744, 0xE4F8, 0x5384, - 0xE4F9, 0x627C, 0xE4FA, 0x6396, 0xE4FB, 0x6DB2, 0xE4FC, 0x7E0A, - 0xE4FD, 0x814B, 0xE4FE, 0x984D, 0xE5A1, 0x6AFB, 0xE5A2, 0x7F4C, - 0xE5A3, 0x9DAF, 0xE5A4, 0x9E1A, 0xE5A5, 0x4E5F, 0xE5A6, 0x503B, - 0xE5A7, 0x51B6, 0xE5A8, 0x591C, 0xE5A9, 0x60F9, 0xE5AA, 0x63F6, - 0xE5AB, 0x6930, 0xE5AC, 0x723A, 0xE5AD, 0x8036, 0xE5AE, 0xF974, - 0xE5AF, 0x91CE, 0xE5B0, 0x5F31, 0xE5B1, 0xF975, 0xE5B2, 0xF976, - 0xE5B3, 0x7D04, 0xE5B4, 0x82E5, 0xE5B5, 0x846F, 0xE5B6, 0x84BB, - 0xE5B7, 0x85E5, 0xE5B8, 0x8E8D, 0xE5B9, 0xF977, 0xE5BA, 0x4F6F, - 0xE5BB, 0xF978, 0xE5BC, 0xF979, 0xE5BD, 0x58E4, 0xE5BE, 0x5B43, - 0xE5BF, 0x6059, 0xE5C0, 0x63DA, 0xE5C1, 0x6518, 0xE5C2, 0x656D, - 0xE5C3, 0x6698, 0xE5C4, 0xF97A, 0xE5C5, 0x694A, 0xE5C6, 0x6A23, - 0xE5C7, 0x6D0B, 0xE5C8, 0x7001, 0xE5C9, 0x716C, 0xE5CA, 0x75D2, - 0xE5CB, 0x760D, 0xE5CC, 0x79B3, 0xE5CD, 0x7A70, 0xE5CE, 0xF97B, - 0xE5CF, 0x7F8A, 0xE5D0, 0xF97C, 0xE5D1, 0x8944, 0xE5D2, 0xF97D, - 0xE5D3, 0x8B93, 0xE5D4, 0x91C0, 0xE5D5, 0x967D, 0xE5D6, 0xF97E, - 0xE5D7, 0x990A, 0xE5D8, 0x5704, 0xE5D9, 0x5FA1, 0xE5DA, 0x65BC, - 0xE5DB, 0x6F01, 0xE5DC, 0x7600, 0xE5DD, 0x79A6, 0xE5DE, 0x8A9E, - 0xE5DF, 0x99AD, 0xE5E0, 0x9B5A, 0xE5E1, 0x9F6C, 0xE5E2, 0x5104, - 0xE5E3, 0x61B6, 0xE5E4, 0x6291, 0xE5E5, 0x6A8D, 0xE5E6, 0x81C6, - 0xE5E7, 0x5043, 0xE5E8, 0x5830, 0xE5E9, 0x5F66, 0xE5EA, 0x7109, - 0xE5EB, 0x8A00, 0xE5EC, 0x8AFA, 0xE5ED, 0x5B7C, 0xE5EE, 0x8616, - 0xE5EF, 0x4FFA, 0xE5F0, 0x513C, 0xE5F1, 0x56B4, 0xE5F2, 0x5944, - 0xE5F3, 0x63A9, 0xE5F4, 0x6DF9, 0xE5F5, 0x5DAA, 0xE5F6, 0x696D, - 0xE5F7, 0x5186, 0xE5F8, 0x4E88, 0xE5F9, 0x4F59, 0xE5FA, 0xF97F, - 0xE5FB, 0xF980, 0xE5FC, 0xF981, 0xE5FD, 0x5982, 0xE5FE, 0xF982, - 0xE6A1, 0xF983, 0xE6A2, 0x6B5F, 0xE6A3, 0x6C5D, 0xE6A4, 0xF984, - 0xE6A5, 0x74B5, 0xE6A6, 0x7916, 0xE6A7, 0xF985, 0xE6A8, 0x8207, - 0xE6A9, 0x8245, 0xE6AA, 0x8339, 0xE6AB, 0x8F3F, 0xE6AC, 0x8F5D, - 0xE6AD, 0xF986, 0xE6AE, 0x9918, 0xE6AF, 0xF987, 0xE6B0, 0xF988, - 0xE6B1, 0xF989, 0xE6B2, 0x4EA6, 0xE6B3, 0xF98A, 0xE6B4, 0x57DF, - 0xE6B5, 0x5F79, 0xE6B6, 0x6613, 0xE6B7, 0xF98B, 0xE6B8, 0xF98C, - 0xE6B9, 0x75AB, 0xE6BA, 0x7E79, 0xE6BB, 0x8B6F, 0xE6BC, 0xF98D, - 0xE6BD, 0x9006, 0xE6BE, 0x9A5B, 0xE6BF, 0x56A5, 0xE6C0, 0x5827, - 0xE6C1, 0x59F8, 0xE6C2, 0x5A1F, 0xE6C3, 0x5BB4, 0xE6C4, 0xF98E, - 0xE6C5, 0x5EF6, 0xE6C6, 0xF98F, 0xE6C7, 0xF990, 0xE6C8, 0x6350, - 0xE6C9, 0x633B, 0xE6CA, 0xF991, 0xE6CB, 0x693D, 0xE6CC, 0x6C87, - 0xE6CD, 0x6CBF, 0xE6CE, 0x6D8E, 0xE6CF, 0x6D93, 0xE6D0, 0x6DF5, - 0xE6D1, 0x6F14, 0xE6D2, 0xF992, 0xE6D3, 0x70DF, 0xE6D4, 0x7136, - 0xE6D5, 0x7159, 0xE6D6, 0xF993, 0xE6D7, 0x71C3, 0xE6D8, 0x71D5, - 0xE6D9, 0xF994, 0xE6DA, 0x784F, 0xE6DB, 0x786F, 0xE6DC, 0xF995, - 0xE6DD, 0x7B75, 0xE6DE, 0x7DE3, 0xE6DF, 0xF996, 0xE6E0, 0x7E2F, - 0xE6E1, 0xF997, 0xE6E2, 0x884D, 0xE6E3, 0x8EDF, 0xE6E4, 0xF998, - 0xE6E5, 0xF999, 0xE6E6, 0xF99A, 0xE6E7, 0x925B, 0xE6E8, 0xF99B, - 0xE6E9, 0x9CF6, 0xE6EA, 0xF99C, 0xE6EB, 0xF99D, 0xE6EC, 0xF99E, - 0xE6ED, 0x6085, 0xE6EE, 0x6D85, 0xE6EF, 0xF99F, 0xE6F0, 0x71B1, - 0xE6F1, 0xF9A0, 0xE6F2, 0xF9A1, 0xE6F3, 0x95B1, 0xE6F4, 0x53AD, - 0xE6F5, 0xF9A2, 0xE6F6, 0xF9A3, 0xE6F7, 0xF9A4, 0xE6F8, 0x67D3, - 0xE6F9, 0xF9A5, 0xE6FA, 0x708E, 0xE6FB, 0x7130, 0xE6FC, 0x7430, - 0xE6FD, 0x8276, 0xE6FE, 0x82D2, 0xE7A1, 0xF9A6, 0xE7A2, 0x95BB, - 0xE7A3, 0x9AE5, 0xE7A4, 0x9E7D, 0xE7A5, 0x66C4, 0xE7A6, 0xF9A7, - 0xE7A7, 0x71C1, 0xE7A8, 0x8449, 0xE7A9, 0xF9A8, 0xE7AA, 0xF9A9, - 0xE7AB, 0x584B, 0xE7AC, 0xF9AA, 0xE7AD, 0xF9AB, 0xE7AE, 0x5DB8, - 0xE7AF, 0x5F71, 0xE7B0, 0xF9AC, 0xE7B1, 0x6620, 0xE7B2, 0x668E, - 0xE7B3, 0x6979, 0xE7B4, 0x69AE, 0xE7B5, 0x6C38, 0xE7B6, 0x6CF3, - 0xE7B7, 0x6E36, 0xE7B8, 0x6F41, 0xE7B9, 0x6FDA, 0xE7BA, 0x701B, - 0xE7BB, 0x702F, 0xE7BC, 0x7150, 0xE7BD, 0x71DF, 0xE7BE, 0x7370, - 0xE7BF, 0xF9AD, 0xE7C0, 0x745B, 0xE7C1, 0xF9AE, 0xE7C2, 0x74D4, - 0xE7C3, 0x76C8, 0xE7C4, 0x7A4E, 0xE7C5, 0x7E93, 0xE7C6, 0xF9AF, - 0xE7C7, 0xF9B0, 0xE7C8, 0x82F1, 0xE7C9, 0x8A60, 0xE7CA, 0x8FCE, - 0xE7CB, 0xF9B1, 0xE7CC, 0x9348, 0xE7CD, 0xF9B2, 0xE7CE, 0x9719, - 0xE7CF, 0xF9B3, 0xE7D0, 0xF9B4, 0xE7D1, 0x4E42, 0xE7D2, 0x502A, - 0xE7D3, 0xF9B5, 0xE7D4, 0x5208, 0xE7D5, 0x53E1, 0xE7D6, 0x66F3, - 0xE7D7, 0x6C6D, 0xE7D8, 0x6FCA, 0xE7D9, 0x730A, 0xE7DA, 0x777F, - 0xE7DB, 0x7A62, 0xE7DC, 0x82AE, 0xE7DD, 0x85DD, 0xE7DE, 0x8602, - 0xE7DF, 0xF9B6, 0xE7E0, 0x88D4, 0xE7E1, 0x8A63, 0xE7E2, 0x8B7D, - 0xE7E3, 0x8C6B, 0xE7E4, 0xF9B7, 0xE7E5, 0x92B3, 0xE7E6, 0xF9B8, - 0xE7E7, 0x9713, 0xE7E8, 0x9810, 0xE7E9, 0x4E94, 0xE7EA, 0x4F0D, - 0xE7EB, 0x4FC9, 0xE7EC, 0x50B2, 0xE7ED, 0x5348, 0xE7EE, 0x543E, - 0xE7EF, 0x5433, 0xE7F0, 0x55DA, 0xE7F1, 0x5862, 0xE7F2, 0x58BA, - 0xE7F3, 0x5967, 0xE7F4, 0x5A1B, 0xE7F5, 0x5BE4, 0xE7F6, 0x609F, - 0xE7F7, 0xF9B9, 0xE7F8, 0x61CA, 0xE7F9, 0x6556, 0xE7FA, 0x65FF, - 0xE7FB, 0x6664, 0xE7FC, 0x68A7, 0xE7FD, 0x6C5A, 0xE7FE, 0x6FB3, - 0xE8A1, 0x70CF, 0xE8A2, 0x71AC, 0xE8A3, 0x7352, 0xE8A4, 0x7B7D, - 0xE8A5, 0x8708, 0xE8A6, 0x8AA4, 0xE8A7, 0x9C32, 0xE8A8, 0x9F07, - 0xE8A9, 0x5C4B, 0xE8AA, 0x6C83, 0xE8AB, 0x7344, 0xE8AC, 0x7389, - 0xE8AD, 0x923A, 0xE8AE, 0x6EAB, 0xE8AF, 0x7465, 0xE8B0, 0x761F, - 0xE8B1, 0x7A69, 0xE8B2, 0x7E15, 0xE8B3, 0x860A, 0xE8B4, 0x5140, - 0xE8B5, 0x58C5, 0xE8B6, 0x64C1, 0xE8B7, 0x74EE, 0xE8B8, 0x7515, - 0xE8B9, 0x7670, 0xE8BA, 0x7FC1, 0xE8BB, 0x9095, 0xE8BC, 0x96CD, - 0xE8BD, 0x9954, 0xE8BE, 0x6E26, 0xE8BF, 0x74E6, 0xE8C0, 0x7AA9, - 0xE8C1, 0x7AAA, 0xE8C2, 0x81E5, 0xE8C3, 0x86D9, 0xE8C4, 0x8778, - 0xE8C5, 0x8A1B, 0xE8C6, 0x5A49, 0xE8C7, 0x5B8C, 0xE8C8, 0x5B9B, - 0xE8C9, 0x68A1, 0xE8CA, 0x6900, 0xE8CB, 0x6D63, 0xE8CC, 0x73A9, - 0xE8CD, 0x7413, 0xE8CE, 0x742C, 0xE8CF, 0x7897, 0xE8D0, 0x7DE9, - 0xE8D1, 0x7FEB, 0xE8D2, 0x8118, 0xE8D3, 0x8155, 0xE8D4, 0x839E, - 0xE8D5, 0x8C4C, 0xE8D6, 0x962E, 0xE8D7, 0x9811, 0xE8D8, 0x66F0, - 0xE8D9, 0x5F80, 0xE8DA, 0x65FA, 0xE8DB, 0x6789, 0xE8DC, 0x6C6A, - 0xE8DD, 0x738B, 0xE8DE, 0x502D, 0xE8DF, 0x5A03, 0xE8E0, 0x6B6A, - 0xE8E1, 0x77EE, 0xE8E2, 0x5916, 0xE8E3, 0x5D6C, 0xE8E4, 0x5DCD, - 0xE8E5, 0x7325, 0xE8E6, 0x754F, 0xE8E7, 0xF9BA, 0xE8E8, 0xF9BB, - 0xE8E9, 0x50E5, 0xE8EA, 0x51F9, 0xE8EB, 0x582F, 0xE8EC, 0x592D, - 0xE8ED, 0x5996, 0xE8EE, 0x59DA, 0xE8EF, 0x5BE5, 0xE8F0, 0xF9BC, - 0xE8F1, 0xF9BD, 0xE8F2, 0x5DA2, 0xE8F3, 0x62D7, 0xE8F4, 0x6416, - 0xE8F5, 0x6493, 0xE8F6, 0x64FE, 0xE8F7, 0xF9BE, 0xE8F8, 0x66DC, - 0xE8F9, 0xF9BF, 0xE8FA, 0x6A48, 0xE8FB, 0xF9C0, 0xE8FC, 0x71FF, - 0xE8FD, 0x7464, 0xE8FE, 0xF9C1, 0xE9A1, 0x7A88, 0xE9A2, 0x7AAF, - 0xE9A3, 0x7E47, 0xE9A4, 0x7E5E, 0xE9A5, 0x8000, 0xE9A6, 0x8170, - 0xE9A7, 0xF9C2, 0xE9A8, 0x87EF, 0xE9A9, 0x8981, 0xE9AA, 0x8B20, - 0xE9AB, 0x9059, 0xE9AC, 0xF9C3, 0xE9AD, 0x9080, 0xE9AE, 0x9952, - 0xE9AF, 0x617E, 0xE9B0, 0x6B32, 0xE9B1, 0x6D74, 0xE9B2, 0x7E1F, - 0xE9B3, 0x8925, 0xE9B4, 0x8FB1, 0xE9B5, 0x4FD1, 0xE9B6, 0x50AD, - 0xE9B7, 0x5197, 0xE9B8, 0x52C7, 0xE9B9, 0x57C7, 0xE9BA, 0x5889, - 0xE9BB, 0x5BB9, 0xE9BC, 0x5EB8, 0xE9BD, 0x6142, 0xE9BE, 0x6995, - 0xE9BF, 0x6D8C, 0xE9C0, 0x6E67, 0xE9C1, 0x6EB6, 0xE9C2, 0x7194, - 0xE9C3, 0x7462, 0xE9C4, 0x7528, 0xE9C5, 0x752C, 0xE9C6, 0x8073, - 0xE9C7, 0x8338, 0xE9C8, 0x84C9, 0xE9C9, 0x8E0A, 0xE9CA, 0x9394, - 0xE9CB, 0x93DE, 0xE9CC, 0xF9C4, 0xE9CD, 0x4E8E, 0xE9CE, 0x4F51, - 0xE9CF, 0x5076, 0xE9D0, 0x512A, 0xE9D1, 0x53C8, 0xE9D2, 0x53CB, - 0xE9D3, 0x53F3, 0xE9D4, 0x5B87, 0xE9D5, 0x5BD3, 0xE9D6, 0x5C24, - 0xE9D7, 0x611A, 0xE9D8, 0x6182, 0xE9D9, 0x65F4, 0xE9DA, 0x725B, - 0xE9DB, 0x7397, 0xE9DC, 0x7440, 0xE9DD, 0x76C2, 0xE9DE, 0x7950, - 0xE9DF, 0x7991, 0xE9E0, 0x79B9, 0xE9E1, 0x7D06, 0xE9E2, 0x7FBD, - 0xE9E3, 0x828B, 0xE9E4, 0x85D5, 0xE9E5, 0x865E, 0xE9E6, 0x8FC2, - 0xE9E7, 0x9047, 0xE9E8, 0x90F5, 0xE9E9, 0x91EA, 0xE9EA, 0x9685, - 0xE9EB, 0x96E8, 0xE9EC, 0x96E9, 0xE9ED, 0x52D6, 0xE9EE, 0x5F67, - 0xE9EF, 0x65ED, 0xE9F0, 0x6631, 0xE9F1, 0x682F, 0xE9F2, 0x715C, - 0xE9F3, 0x7A36, 0xE9F4, 0x90C1, 0xE9F5, 0x980A, 0xE9F6, 0x4E91, - 0xE9F7, 0xF9C5, 0xE9F8, 0x6A52, 0xE9F9, 0x6B9E, 0xE9FA, 0x6F90, - 0xE9FB, 0x7189, 0xE9FC, 0x8018, 0xE9FD, 0x82B8, 0xE9FE, 0x8553, - 0xEAA1, 0x904B, 0xEAA2, 0x9695, 0xEAA3, 0x96F2, 0xEAA4, 0x97FB, - 0xEAA5, 0x851A, 0xEAA6, 0x9B31, 0xEAA7, 0x4E90, 0xEAA8, 0x718A, - 0xEAA9, 0x96C4, 0xEAAA, 0x5143, 0xEAAB, 0x539F, 0xEAAC, 0x54E1, - 0xEAAD, 0x5713, 0xEAAE, 0x5712, 0xEAAF, 0x57A3, 0xEAB0, 0x5A9B, - 0xEAB1, 0x5AC4, 0xEAB2, 0x5BC3, 0xEAB3, 0x6028, 0xEAB4, 0x613F, - 0xEAB5, 0x63F4, 0xEAB6, 0x6C85, 0xEAB7, 0x6D39, 0xEAB8, 0x6E72, - 0xEAB9, 0x6E90, 0xEABA, 0x7230, 0xEABB, 0x733F, 0xEABC, 0x7457, - 0xEABD, 0x82D1, 0xEABE, 0x8881, 0xEABF, 0x8F45, 0xEAC0, 0x9060, - 0xEAC1, 0xF9C6, 0xEAC2, 0x9662, 0xEAC3, 0x9858, 0xEAC4, 0x9D1B, - 0xEAC5, 0x6708, 0xEAC6, 0x8D8A, 0xEAC7, 0x925E, 0xEAC8, 0x4F4D, - 0xEAC9, 0x5049, 0xEACA, 0x50DE, 0xEACB, 0x5371, 0xEACC, 0x570D, - 0xEACD, 0x59D4, 0xEACE, 0x5A01, 0xEACF, 0x5C09, 0xEAD0, 0x6170, - 0xEAD1, 0x6690, 0xEAD2, 0x6E2D, 0xEAD3, 0x7232, 0xEAD4, 0x744B, - 0xEAD5, 0x7DEF, 0xEAD6, 0x80C3, 0xEAD7, 0x840E, 0xEAD8, 0x8466, - 0xEAD9, 0x853F, 0xEADA, 0x875F, 0xEADB, 0x885B, 0xEADC, 0x8918, - 0xEADD, 0x8B02, 0xEADE, 0x9055, 0xEADF, 0x97CB, 0xEAE0, 0x9B4F, - 0xEAE1, 0x4E73, 0xEAE2, 0x4F91, 0xEAE3, 0x5112, 0xEAE4, 0x516A, - 0xEAE5, 0xF9C7, 0xEAE6, 0x552F, 0xEAE7, 0x55A9, 0xEAE8, 0x5B7A, - 0xEAE9, 0x5BA5, 0xEAEA, 0x5E7C, 0xEAEB, 0x5E7D, 0xEAEC, 0x5EBE, - 0xEAED, 0x60A0, 0xEAEE, 0x60DF, 0xEAEF, 0x6108, 0xEAF0, 0x6109, - 0xEAF1, 0x63C4, 0xEAF2, 0x6538, 0xEAF3, 0x6709, 0xEAF4, 0xF9C8, - 0xEAF5, 0x67D4, 0xEAF6, 0x67DA, 0xEAF7, 0xF9C9, 0xEAF8, 0x6961, - 0xEAF9, 0x6962, 0xEAFA, 0x6CB9, 0xEAFB, 0x6D27, 0xEAFC, 0xF9CA, - 0xEAFD, 0x6E38, 0xEAFE, 0xF9CB, 0xEBA1, 0x6FE1, 0xEBA2, 0x7336, - 0xEBA3, 0x7337, 0xEBA4, 0xF9CC, 0xEBA5, 0x745C, 0xEBA6, 0x7531, - 0xEBA7, 0xF9CD, 0xEBA8, 0x7652, 0xEBA9, 0xF9CE, 0xEBAA, 0xF9CF, - 0xEBAB, 0x7DAD, 0xEBAC, 0x81FE, 0xEBAD, 0x8438, 0xEBAE, 0x88D5, - 0xEBAF, 0x8A98, 0xEBB0, 0x8ADB, 0xEBB1, 0x8AED, 0xEBB2, 0x8E30, - 0xEBB3, 0x8E42, 0xEBB4, 0x904A, 0xEBB5, 0x903E, 0xEBB6, 0x907A, - 0xEBB7, 0x9149, 0xEBB8, 0x91C9, 0xEBB9, 0x936E, 0xEBBA, 0xF9D0, - 0xEBBB, 0xF9D1, 0xEBBC, 0x5809, 0xEBBD, 0xF9D2, 0xEBBE, 0x6BD3, - 0xEBBF, 0x8089, 0xEBC0, 0x80B2, 0xEBC1, 0xF9D3, 0xEBC2, 0xF9D4, - 0xEBC3, 0x5141, 0xEBC4, 0x596B, 0xEBC5, 0x5C39, 0xEBC6, 0xF9D5, - 0xEBC7, 0xF9D6, 0xEBC8, 0x6F64, 0xEBC9, 0x73A7, 0xEBCA, 0x80E4, - 0xEBCB, 0x8D07, 0xEBCC, 0xF9D7, 0xEBCD, 0x9217, 0xEBCE, 0x958F, - 0xEBCF, 0xF9D8, 0xEBD0, 0xF9D9, 0xEBD1, 0xF9DA, 0xEBD2, 0xF9DB, - 0xEBD3, 0x807F, 0xEBD4, 0x620E, 0xEBD5, 0x701C, 0xEBD6, 0x7D68, - 0xEBD7, 0x878D, 0xEBD8, 0xF9DC, 0xEBD9, 0x57A0, 0xEBDA, 0x6069, - 0xEBDB, 0x6147, 0xEBDC, 0x6BB7, 0xEBDD, 0x8ABE, 0xEBDE, 0x9280, - 0xEBDF, 0x96B1, 0xEBE0, 0x4E59, 0xEBE1, 0x541F, 0xEBE2, 0x6DEB, - 0xEBE3, 0x852D, 0xEBE4, 0x9670, 0xEBE5, 0x97F3, 0xEBE6, 0x98EE, - 0xEBE7, 0x63D6, 0xEBE8, 0x6CE3, 0xEBE9, 0x9091, 0xEBEA, 0x51DD, - 0xEBEB, 0x61C9, 0xEBEC, 0x81BA, 0xEBED, 0x9DF9, 0xEBEE, 0x4F9D, - 0xEBEF, 0x501A, 0xEBF0, 0x5100, 0xEBF1, 0x5B9C, 0xEBF2, 0x610F, - 0xEBF3, 0x61FF, 0xEBF4, 0x64EC, 0xEBF5, 0x6905, 0xEBF6, 0x6BC5, - 0xEBF7, 0x7591, 0xEBF8, 0x77E3, 0xEBF9, 0x7FA9, 0xEBFA, 0x8264, - 0xEBFB, 0x858F, 0xEBFC, 0x87FB, 0xEBFD, 0x8863, 0xEBFE, 0x8ABC, - 0xECA1, 0x8B70, 0xECA2, 0x91AB, 0xECA3, 0x4E8C, 0xECA4, 0x4EE5, - 0xECA5, 0x4F0A, 0xECA6, 0xF9DD, 0xECA7, 0xF9DE, 0xECA8, 0x5937, - 0xECA9, 0x59E8, 0xECAA, 0xF9DF, 0xECAB, 0x5DF2, 0xECAC, 0x5F1B, - 0xECAD, 0x5F5B, 0xECAE, 0x6021, 0xECAF, 0xF9E0, 0xECB0, 0xF9E1, - 0xECB1, 0xF9E2, 0xECB2, 0xF9E3, 0xECB3, 0x723E, 0xECB4, 0x73E5, - 0xECB5, 0xF9E4, 0xECB6, 0x7570, 0xECB7, 0x75CD, 0xECB8, 0xF9E5, - 0xECB9, 0x79FB, 0xECBA, 0xF9E6, 0xECBB, 0x800C, 0xECBC, 0x8033, - 0xECBD, 0x8084, 0xECBE, 0x82E1, 0xECBF, 0x8351, 0xECC0, 0xF9E7, - 0xECC1, 0xF9E8, 0xECC2, 0x8CBD, 0xECC3, 0x8CB3, 0xECC4, 0x9087, - 0xECC5, 0xF9E9, 0xECC6, 0xF9EA, 0xECC7, 0x98F4, 0xECC8, 0x990C, - 0xECC9, 0xF9EB, 0xECCA, 0xF9EC, 0xECCB, 0x7037, 0xECCC, 0x76CA, - 0xECCD, 0x7FCA, 0xECCE, 0x7FCC, 0xECCF, 0x7FFC, 0xECD0, 0x8B1A, - 0xECD1, 0x4EBA, 0xECD2, 0x4EC1, 0xECD3, 0x5203, 0xECD4, 0x5370, - 0xECD5, 0xF9ED, 0xECD6, 0x54BD, 0xECD7, 0x56E0, 0xECD8, 0x59FB, - 0xECD9, 0x5BC5, 0xECDA, 0x5F15, 0xECDB, 0x5FCD, 0xECDC, 0x6E6E, - 0xECDD, 0xF9EE, 0xECDE, 0xF9EF, 0xECDF, 0x7D6A, 0xECE0, 0x8335, - 0xECE1, 0xF9F0, 0xECE2, 0x8693, 0xECE3, 0x8A8D, 0xECE4, 0xF9F1, - 0xECE5, 0x976D, 0xECE6, 0x9777, 0xECE7, 0xF9F2, 0xECE8, 0xF9F3, - 0xECE9, 0x4E00, 0xECEA, 0x4F5A, 0xECEB, 0x4F7E, 0xECEC, 0x58F9, - 0xECED, 0x65E5, 0xECEE, 0x6EA2, 0xECEF, 0x9038, 0xECF0, 0x93B0, - 0xECF1, 0x99B9, 0xECF2, 0x4EFB, 0xECF3, 0x58EC, 0xECF4, 0x598A, - 0xECF5, 0x59D9, 0xECF6, 0x6041, 0xECF7, 0xF9F4, 0xECF8, 0xF9F5, - 0xECF9, 0x7A14, 0xECFA, 0xF9F6, 0xECFB, 0x834F, 0xECFC, 0x8CC3, - 0xECFD, 0x5165, 0xECFE, 0x5344, 0xEDA1, 0xF9F7, 0xEDA2, 0xF9F8, - 0xEDA3, 0xF9F9, 0xEDA4, 0x4ECD, 0xEDA5, 0x5269, 0xEDA6, 0x5B55, - 0xEDA7, 0x82BF, 0xEDA8, 0x4ED4, 0xEDA9, 0x523A, 0xEDAA, 0x54A8, - 0xEDAB, 0x59C9, 0xEDAC, 0x59FF, 0xEDAD, 0x5B50, 0xEDAE, 0x5B57, - 0xEDAF, 0x5B5C, 0xEDB0, 0x6063, 0xEDB1, 0x6148, 0xEDB2, 0x6ECB, - 0xEDB3, 0x7099, 0xEDB4, 0x716E, 0xEDB5, 0x7386, 0xEDB6, 0x74F7, - 0xEDB7, 0x75B5, 0xEDB8, 0x78C1, 0xEDB9, 0x7D2B, 0xEDBA, 0x8005, - 0xEDBB, 0x81EA, 0xEDBC, 0x8328, 0xEDBD, 0x8517, 0xEDBE, 0x85C9, - 0xEDBF, 0x8AEE, 0xEDC0, 0x8CC7, 0xEDC1, 0x96CC, 0xEDC2, 0x4F5C, - 0xEDC3, 0x52FA, 0xEDC4, 0x56BC, 0xEDC5, 0x65AB, 0xEDC6, 0x6628, - 0xEDC7, 0x707C, 0xEDC8, 0x70B8, 0xEDC9, 0x7235, 0xEDCA, 0x7DBD, - 0xEDCB, 0x828D, 0xEDCC, 0x914C, 0xEDCD, 0x96C0, 0xEDCE, 0x9D72, - 0xEDCF, 0x5B71, 0xEDD0, 0x68E7, 0xEDD1, 0x6B98, 0xEDD2, 0x6F7A, - 0xEDD3, 0x76DE, 0xEDD4, 0x5C91, 0xEDD5, 0x66AB, 0xEDD6, 0x6F5B, - 0xEDD7, 0x7BB4, 0xEDD8, 0x7C2A, 0xEDD9, 0x8836, 0xEDDA, 0x96DC, - 0xEDDB, 0x4E08, 0xEDDC, 0x4ED7, 0xEDDD, 0x5320, 0xEDDE, 0x5834, - 0xEDDF, 0x58BB, 0xEDE0, 0x58EF, 0xEDE1, 0x596C, 0xEDE2, 0x5C07, - 0xEDE3, 0x5E33, 0xEDE4, 0x5E84, 0xEDE5, 0x5F35, 0xEDE6, 0x638C, - 0xEDE7, 0x66B2, 0xEDE8, 0x6756, 0xEDE9, 0x6A1F, 0xEDEA, 0x6AA3, - 0xEDEB, 0x6B0C, 0xEDEC, 0x6F3F, 0xEDED, 0x7246, 0xEDEE, 0xF9FA, - 0xEDEF, 0x7350, 0xEDF0, 0x748B, 0xEDF1, 0x7AE0, 0xEDF2, 0x7CA7, - 0xEDF3, 0x8178, 0xEDF4, 0x81DF, 0xEDF5, 0x81E7, 0xEDF6, 0x838A, - 0xEDF7, 0x846C, 0xEDF8, 0x8523, 0xEDF9, 0x8594, 0xEDFA, 0x85CF, - 0xEDFB, 0x88DD, 0xEDFC, 0x8D13, 0xEDFD, 0x91AC, 0xEDFE, 0x9577, - 0xEEA1, 0x969C, 0xEEA2, 0x518D, 0xEEA3, 0x54C9, 0xEEA4, 0x5728, - 0xEEA5, 0x5BB0, 0xEEA6, 0x624D, 0xEEA7, 0x6750, 0xEEA8, 0x683D, - 0xEEA9, 0x6893, 0xEEAA, 0x6E3D, 0xEEAB, 0x6ED3, 0xEEAC, 0x707D, - 0xEEAD, 0x7E21, 0xEEAE, 0x88C1, 0xEEAF, 0x8CA1, 0xEEB0, 0x8F09, - 0xEEB1, 0x9F4B, 0xEEB2, 0x9F4E, 0xEEB3, 0x722D, 0xEEB4, 0x7B8F, - 0xEEB5, 0x8ACD, 0xEEB6, 0x931A, 0xEEB7, 0x4F47, 0xEEB8, 0x4F4E, - 0xEEB9, 0x5132, 0xEEBA, 0x5480, 0xEEBB, 0x59D0, 0xEEBC, 0x5E95, - 0xEEBD, 0x62B5, 0xEEBE, 0x6775, 0xEEBF, 0x696E, 0xEEC0, 0x6A17, - 0xEEC1, 0x6CAE, 0xEEC2, 0x6E1A, 0xEEC3, 0x72D9, 0xEEC4, 0x732A, - 0xEEC5, 0x75BD, 0xEEC6, 0x7BB8, 0xEEC7, 0x7D35, 0xEEC8, 0x82E7, - 0xEEC9, 0x83F9, 0xEECA, 0x8457, 0xEECB, 0x85F7, 0xEECC, 0x8A5B, - 0xEECD, 0x8CAF, 0xEECE, 0x8E87, 0xEECF, 0x9019, 0xEED0, 0x90B8, - 0xEED1, 0x96CE, 0xEED2, 0x9F5F, 0xEED3, 0x52E3, 0xEED4, 0x540A, - 0xEED5, 0x5AE1, 0xEED6, 0x5BC2, 0xEED7, 0x6458, 0xEED8, 0x6575, - 0xEED9, 0x6EF4, 0xEEDA, 0x72C4, 0xEEDB, 0xF9FB, 0xEEDC, 0x7684, - 0xEEDD, 0x7A4D, 0xEEDE, 0x7B1B, 0xEEDF, 0x7C4D, 0xEEE0, 0x7E3E, - 0xEEE1, 0x7FDF, 0xEEE2, 0x837B, 0xEEE3, 0x8B2B, 0xEEE4, 0x8CCA, - 0xEEE5, 0x8D64, 0xEEE6, 0x8DE1, 0xEEE7, 0x8E5F, 0xEEE8, 0x8FEA, - 0xEEE9, 0x8FF9, 0xEEEA, 0x9069, 0xEEEB, 0x93D1, 0xEEEC, 0x4F43, - 0xEEED, 0x4F7A, 0xEEEE, 0x50B3, 0xEEEF, 0x5168, 0xEEF0, 0x5178, - 0xEEF1, 0x524D, 0xEEF2, 0x526A, 0xEEF3, 0x5861, 0xEEF4, 0x587C, - 0xEEF5, 0x5960, 0xEEF6, 0x5C08, 0xEEF7, 0x5C55, 0xEEF8, 0x5EDB, - 0xEEF9, 0x609B, 0xEEFA, 0x6230, 0xEEFB, 0x6813, 0xEEFC, 0x6BBF, - 0xEEFD, 0x6C08, 0xEEFE, 0x6FB1, 0xEFA1, 0x714E, 0xEFA2, 0x7420, - 0xEFA3, 0x7530, 0xEFA4, 0x7538, 0xEFA5, 0x7551, 0xEFA6, 0x7672, - 0xEFA7, 0x7B4C, 0xEFA8, 0x7B8B, 0xEFA9, 0x7BAD, 0xEFAA, 0x7BC6, - 0xEFAB, 0x7E8F, 0xEFAC, 0x8A6E, 0xEFAD, 0x8F3E, 0xEFAE, 0x8F49, - 0xEFAF, 0x923F, 0xEFB0, 0x9293, 0xEFB1, 0x9322, 0xEFB2, 0x942B, - 0xEFB3, 0x96FB, 0xEFB4, 0x985A, 0xEFB5, 0x986B, 0xEFB6, 0x991E, - 0xEFB7, 0x5207, 0xEFB8, 0x622A, 0xEFB9, 0x6298, 0xEFBA, 0x6D59, - 0xEFBB, 0x7664, 0xEFBC, 0x7ACA, 0xEFBD, 0x7BC0, 0xEFBE, 0x7D76, - 0xEFBF, 0x5360, 0xEFC0, 0x5CBE, 0xEFC1, 0x5E97, 0xEFC2, 0x6F38, - 0xEFC3, 0x70B9, 0xEFC4, 0x7C98, 0xEFC5, 0x9711, 0xEFC6, 0x9B8E, - 0xEFC7, 0x9EDE, 0xEFC8, 0x63A5, 0xEFC9, 0x647A, 0xEFCA, 0x8776, - 0xEFCB, 0x4E01, 0xEFCC, 0x4E95, 0xEFCD, 0x4EAD, 0xEFCE, 0x505C, - 0xEFCF, 0x5075, 0xEFD0, 0x5448, 0xEFD1, 0x59C3, 0xEFD2, 0x5B9A, - 0xEFD3, 0x5E40, 0xEFD4, 0x5EAD, 0xEFD5, 0x5EF7, 0xEFD6, 0x5F81, - 0xEFD7, 0x60C5, 0xEFD8, 0x633A, 0xEFD9, 0x653F, 0xEFDA, 0x6574, - 0xEFDB, 0x65CC, 0xEFDC, 0x6676, 0xEFDD, 0x6678, 0xEFDE, 0x67FE, - 0xEFDF, 0x6968, 0xEFE0, 0x6A89, 0xEFE1, 0x6B63, 0xEFE2, 0x6C40, - 0xEFE3, 0x6DC0, 0xEFE4, 0x6DE8, 0xEFE5, 0x6E1F, 0xEFE6, 0x6E5E, - 0xEFE7, 0x701E, 0xEFE8, 0x70A1, 0xEFE9, 0x738E, 0xEFEA, 0x73FD, - 0xEFEB, 0x753A, 0xEFEC, 0x775B, 0xEFED, 0x7887, 0xEFEE, 0x798E, - 0xEFEF, 0x7A0B, 0xEFF0, 0x7A7D, 0xEFF1, 0x7CBE, 0xEFF2, 0x7D8E, - 0xEFF3, 0x8247, 0xEFF4, 0x8A02, 0xEFF5, 0x8AEA, 0xEFF6, 0x8C9E, - 0xEFF7, 0x912D, 0xEFF8, 0x914A, 0xEFF9, 0x91D8, 0xEFFA, 0x9266, - 0xEFFB, 0x92CC, 0xEFFC, 0x9320, 0xEFFD, 0x9706, 0xEFFE, 0x9756, - 0xF0A1, 0x975C, 0xF0A2, 0x9802, 0xF0A3, 0x9F0E, 0xF0A4, 0x5236, - 0xF0A5, 0x5291, 0xF0A6, 0x557C, 0xF0A7, 0x5824, 0xF0A8, 0x5E1D, - 0xF0A9, 0x5F1F, 0xF0AA, 0x608C, 0xF0AB, 0x63D0, 0xF0AC, 0x68AF, - 0xF0AD, 0x6FDF, 0xF0AE, 0x796D, 0xF0AF, 0x7B2C, 0xF0B0, 0x81CD, - 0xF0B1, 0x85BA, 0xF0B2, 0x88FD, 0xF0B3, 0x8AF8, 0xF0B4, 0x8E44, - 0xF0B5, 0x918D, 0xF0B6, 0x9664, 0xF0B7, 0x969B, 0xF0B8, 0x973D, - 0xF0B9, 0x984C, 0xF0BA, 0x9F4A, 0xF0BB, 0x4FCE, 0xF0BC, 0x5146, - 0xF0BD, 0x51CB, 0xF0BE, 0x52A9, 0xF0BF, 0x5632, 0xF0C0, 0x5F14, - 0xF0C1, 0x5F6B, 0xF0C2, 0x63AA, 0xF0C3, 0x64CD, 0xF0C4, 0x65E9, - 0xF0C5, 0x6641, 0xF0C6, 0x66FA, 0xF0C7, 0x66F9, 0xF0C8, 0x671D, - 0xF0C9, 0x689D, 0xF0CA, 0x68D7, 0xF0CB, 0x69FD, 0xF0CC, 0x6F15, - 0xF0CD, 0x6F6E, 0xF0CE, 0x7167, 0xF0CF, 0x71E5, 0xF0D0, 0x722A, - 0xF0D1, 0x74AA, 0xF0D2, 0x773A, 0xF0D3, 0x7956, 0xF0D4, 0x795A, - 0xF0D5, 0x79DF, 0xF0D6, 0x7A20, 0xF0D7, 0x7A95, 0xF0D8, 0x7C97, - 0xF0D9, 0x7CDF, 0xF0DA, 0x7D44, 0xF0DB, 0x7E70, 0xF0DC, 0x8087, - 0xF0DD, 0x85FB, 0xF0DE, 0x86A4, 0xF0DF, 0x8A54, 0xF0E0, 0x8ABF, - 0xF0E1, 0x8D99, 0xF0E2, 0x8E81, 0xF0E3, 0x9020, 0xF0E4, 0x906D, - 0xF0E5, 0x91E3, 0xF0E6, 0x963B, 0xF0E7, 0x96D5, 0xF0E8, 0x9CE5, - 0xF0E9, 0x65CF, 0xF0EA, 0x7C07, 0xF0EB, 0x8DB3, 0xF0EC, 0x93C3, - 0xF0ED, 0x5B58, 0xF0EE, 0x5C0A, 0xF0EF, 0x5352, 0xF0F0, 0x62D9, - 0xF0F1, 0x731D, 0xF0F2, 0x5027, 0xF0F3, 0x5B97, 0xF0F4, 0x5F9E, - 0xF0F5, 0x60B0, 0xF0F6, 0x616B, 0xF0F7, 0x68D5, 0xF0F8, 0x6DD9, - 0xF0F9, 0x742E, 0xF0FA, 0x7A2E, 0xF0FB, 0x7D42, 0xF0FC, 0x7D9C, - 0xF0FD, 0x7E31, 0xF0FE, 0x816B, 0xF1A1, 0x8E2A, 0xF1A2, 0x8E35, - 0xF1A3, 0x937E, 0xF1A4, 0x9418, 0xF1A5, 0x4F50, 0xF1A6, 0x5750, - 0xF1A7, 0x5DE6, 0xF1A8, 0x5EA7, 0xF1A9, 0x632B, 0xF1AA, 0x7F6A, - 0xF1AB, 0x4E3B, 0xF1AC, 0x4F4F, 0xF1AD, 0x4F8F, 0xF1AE, 0x505A, - 0xF1AF, 0x59DD, 0xF1B0, 0x80C4, 0xF1B1, 0x546A, 0xF1B2, 0x5468, - 0xF1B3, 0x55FE, 0xF1B4, 0x594F, 0xF1B5, 0x5B99, 0xF1B6, 0x5DDE, - 0xF1B7, 0x5EDA, 0xF1B8, 0x665D, 0xF1B9, 0x6731, 0xF1BA, 0x67F1, - 0xF1BB, 0x682A, 0xF1BC, 0x6CE8, 0xF1BD, 0x6D32, 0xF1BE, 0x6E4A, - 0xF1BF, 0x6F8D, 0xF1C0, 0x70B7, 0xF1C1, 0x73E0, 0xF1C2, 0x7587, - 0xF1C3, 0x7C4C, 0xF1C4, 0x7D02, 0xF1C5, 0x7D2C, 0xF1C6, 0x7DA2, - 0xF1C7, 0x821F, 0xF1C8, 0x86DB, 0xF1C9, 0x8A3B, 0xF1CA, 0x8A85, - 0xF1CB, 0x8D70, 0xF1CC, 0x8E8A, 0xF1CD, 0x8F33, 0xF1CE, 0x9031, - 0xF1CF, 0x914E, 0xF1D0, 0x9152, 0xF1D1, 0x9444, 0xF1D2, 0x99D0, - 0xF1D3, 0x7AF9, 0xF1D4, 0x7CA5, 0xF1D5, 0x4FCA, 0xF1D6, 0x5101, - 0xF1D7, 0x51C6, 0xF1D8, 0x57C8, 0xF1D9, 0x5BEF, 0xF1DA, 0x5CFB, - 0xF1DB, 0x6659, 0xF1DC, 0x6A3D, 0xF1DD, 0x6D5A, 0xF1DE, 0x6E96, - 0xF1DF, 0x6FEC, 0xF1E0, 0x710C, 0xF1E1, 0x756F, 0xF1E2, 0x7AE3, - 0xF1E3, 0x8822, 0xF1E4, 0x9021, 0xF1E5, 0x9075, 0xF1E6, 0x96CB, - 0xF1E7, 0x99FF, 0xF1E8, 0x8301, 0xF1E9, 0x4E2D, 0xF1EA, 0x4EF2, - 0xF1EB, 0x8846, 0xF1EC, 0x91CD, 0xF1ED, 0x537D, 0xF1EE, 0x6ADB, - 0xF1EF, 0x696B, 0xF1F0, 0x6C41, 0xF1F1, 0x847A, 0xF1F2, 0x589E, - 0xF1F3, 0x618E, 0xF1F4, 0x66FE, 0xF1F5, 0x62EF, 0xF1F6, 0x70DD, - 0xF1F7, 0x7511, 0xF1F8, 0x75C7, 0xF1F9, 0x7E52, 0xF1FA, 0x84B8, - 0xF1FB, 0x8B49, 0xF1FC, 0x8D08, 0xF1FD, 0x4E4B, 0xF1FE, 0x53EA, - 0xF2A1, 0x54AB, 0xF2A2, 0x5730, 0xF2A3, 0x5740, 0xF2A4, 0x5FD7, - 0xF2A5, 0x6301, 0xF2A6, 0x6307, 0xF2A7, 0x646F, 0xF2A8, 0x652F, - 0xF2A9, 0x65E8, 0xF2AA, 0x667A, 0xF2AB, 0x679D, 0xF2AC, 0x67B3, - 0xF2AD, 0x6B62, 0xF2AE, 0x6C60, 0xF2AF, 0x6C9A, 0xF2B0, 0x6F2C, - 0xF2B1, 0x77E5, 0xF2B2, 0x7825, 0xF2B3, 0x7949, 0xF2B4, 0x7957, - 0xF2B5, 0x7D19, 0xF2B6, 0x80A2, 0xF2B7, 0x8102, 0xF2B8, 0x81F3, - 0xF2B9, 0x829D, 0xF2BA, 0x82B7, 0xF2BB, 0x8718, 0xF2BC, 0x8A8C, - 0xF2BD, 0xF9FC, 0xF2BE, 0x8D04, 0xF2BF, 0x8DBE, 0xF2C0, 0x9072, - 0xF2C1, 0x76F4, 0xF2C2, 0x7A19, 0xF2C3, 0x7A37, 0xF2C4, 0x7E54, - 0xF2C5, 0x8077, 0xF2C6, 0x5507, 0xF2C7, 0x55D4, 0xF2C8, 0x5875, - 0xF2C9, 0x632F, 0xF2CA, 0x6422, 0xF2CB, 0x6649, 0xF2CC, 0x664B, - 0xF2CD, 0x686D, 0xF2CE, 0x699B, 0xF2CF, 0x6B84, 0xF2D0, 0x6D25, - 0xF2D1, 0x6EB1, 0xF2D2, 0x73CD, 0xF2D3, 0x7468, 0xF2D4, 0x74A1, - 0xF2D5, 0x755B, 0xF2D6, 0x75B9, 0xF2D7, 0x76E1, 0xF2D8, 0x771E, - 0xF2D9, 0x778B, 0xF2DA, 0x79E6, 0xF2DB, 0x7E09, 0xF2DC, 0x7E1D, - 0xF2DD, 0x81FB, 0xF2DE, 0x852F, 0xF2DF, 0x8897, 0xF2E0, 0x8A3A, - 0xF2E1, 0x8CD1, 0xF2E2, 0x8EEB, 0xF2E3, 0x8FB0, 0xF2E4, 0x9032, - 0xF2E5, 0x93AD, 0xF2E6, 0x9663, 0xF2E7, 0x9673, 0xF2E8, 0x9707, - 0xF2E9, 0x4F84, 0xF2EA, 0x53F1, 0xF2EB, 0x59EA, 0xF2EC, 0x5AC9, - 0xF2ED, 0x5E19, 0xF2EE, 0x684E, 0xF2EF, 0x74C6, 0xF2F0, 0x75BE, - 0xF2F1, 0x79E9, 0xF2F2, 0x7A92, 0xF2F3, 0x81A3, 0xF2F4, 0x86ED, - 0xF2F5, 0x8CEA, 0xF2F6, 0x8DCC, 0xF2F7, 0x8FED, 0xF2F8, 0x659F, - 0xF2F9, 0x6715, 0xF2FA, 0xF9FD, 0xF2FB, 0x57F7, 0xF2FC, 0x6F57, - 0xF2FD, 0x7DDD, 0xF2FE, 0x8F2F, 0xF3A1, 0x93F6, 0xF3A2, 0x96C6, - 0xF3A3, 0x5FB5, 0xF3A4, 0x61F2, 0xF3A5, 0x6F84, 0xF3A6, 0x4E14, - 0xF3A7, 0x4F98, 0xF3A8, 0x501F, 0xF3A9, 0x53C9, 0xF3AA, 0x55DF, - 0xF3AB, 0x5D6F, 0xF3AC, 0x5DEE, 0xF3AD, 0x6B21, 0xF3AE, 0x6B64, - 0xF3AF, 0x78CB, 0xF3B0, 0x7B9A, 0xF3B1, 0xF9FE, 0xF3B2, 0x8E49, - 0xF3B3, 0x8ECA, 0xF3B4, 0x906E, 0xF3B5, 0x6349, 0xF3B6, 0x643E, - 0xF3B7, 0x7740, 0xF3B8, 0x7A84, 0xF3B9, 0x932F, 0xF3BA, 0x947F, - 0xF3BB, 0x9F6A, 0xF3BC, 0x64B0, 0xF3BD, 0x6FAF, 0xF3BE, 0x71E6, - 0xF3BF, 0x74A8, 0xF3C0, 0x74DA, 0xF3C1, 0x7AC4, 0xF3C2, 0x7C12, - 0xF3C3, 0x7E82, 0xF3C4, 0x7CB2, 0xF3C5, 0x7E98, 0xF3C6, 0x8B9A, - 0xF3C7, 0x8D0A, 0xF3C8, 0x947D, 0xF3C9, 0x9910, 0xF3CA, 0x994C, - 0xF3CB, 0x5239, 0xF3CC, 0x5BDF, 0xF3CD, 0x64E6, 0xF3CE, 0x672D, - 0xF3CF, 0x7D2E, 0xF3D0, 0x50ED, 0xF3D1, 0x53C3, 0xF3D2, 0x5879, - 0xF3D3, 0x6158, 0xF3D4, 0x6159, 0xF3D5, 0x61FA, 0xF3D6, 0x65AC, - 0xF3D7, 0x7AD9, 0xF3D8, 0x8B92, 0xF3D9, 0x8B96, 0xF3DA, 0x5009, - 0xF3DB, 0x5021, 0xF3DC, 0x5275, 0xF3DD, 0x5531, 0xF3DE, 0x5A3C, - 0xF3DF, 0x5EE0, 0xF3E0, 0x5F70, 0xF3E1, 0x6134, 0xF3E2, 0x655E, - 0xF3E3, 0x660C, 0xF3E4, 0x6636, 0xF3E5, 0x66A2, 0xF3E6, 0x69CD, - 0xF3E7, 0x6EC4, 0xF3E8, 0x6F32, 0xF3E9, 0x7316, 0xF3EA, 0x7621, - 0xF3EB, 0x7A93, 0xF3EC, 0x8139, 0xF3ED, 0x8259, 0xF3EE, 0x83D6, - 0xF3EF, 0x84BC, 0xF3F0, 0x50B5, 0xF3F1, 0x57F0, 0xF3F2, 0x5BC0, - 0xF3F3, 0x5BE8, 0xF3F4, 0x5F69, 0xF3F5, 0x63A1, 0xF3F6, 0x7826, - 0xF3F7, 0x7DB5, 0xF3F8, 0x83DC, 0xF3F9, 0x8521, 0xF3FA, 0x91C7, - 0xF3FB, 0x91F5, 0xF3FC, 0x518A, 0xF3FD, 0x67F5, 0xF3FE, 0x7B56, - 0xF4A1, 0x8CAC, 0xF4A2, 0x51C4, 0xF4A3, 0x59BB, 0xF4A4, 0x60BD, - 0xF4A5, 0x8655, 0xF4A6, 0x501C, 0xF4A7, 0xF9FF, 0xF4A8, 0x5254, - 0xF4A9, 0x5C3A, 0xF4AA, 0x617D, 0xF4AB, 0x621A, 0xF4AC, 0x62D3, - 0xF4AD, 0x64F2, 0xF4AE, 0x65A5, 0xF4AF, 0x6ECC, 0xF4B0, 0x7620, - 0xF4B1, 0x810A, 0xF4B2, 0x8E60, 0xF4B3, 0x965F, 0xF4B4, 0x96BB, - 0xF4B5, 0x4EDF, 0xF4B6, 0x5343, 0xF4B7, 0x5598, 0xF4B8, 0x5929, - 0xF4B9, 0x5DDD, 0xF4BA, 0x64C5, 0xF4BB, 0x6CC9, 0xF4BC, 0x6DFA, - 0xF4BD, 0x7394, 0xF4BE, 0x7A7F, 0xF4BF, 0x821B, 0xF4C0, 0x85A6, - 0xF4C1, 0x8CE4, 0xF4C2, 0x8E10, 0xF4C3, 0x9077, 0xF4C4, 0x91E7, - 0xF4C5, 0x95E1, 0xF4C6, 0x9621, 0xF4C7, 0x97C6, 0xF4C8, 0x51F8, - 0xF4C9, 0x54F2, 0xF4CA, 0x5586, 0xF4CB, 0x5FB9, 0xF4CC, 0x64A4, - 0xF4CD, 0x6F88, 0xF4CE, 0x7DB4, 0xF4CF, 0x8F1F, 0xF4D0, 0x8F4D, - 0xF4D1, 0x9435, 0xF4D2, 0x50C9, 0xF4D3, 0x5C16, 0xF4D4, 0x6CBE, - 0xF4D5, 0x6DFB, 0xF4D6, 0x751B, 0xF4D7, 0x77BB, 0xF4D8, 0x7C3D, - 0xF4D9, 0x7C64, 0xF4DA, 0x8A79, 0xF4DB, 0x8AC2, 0xF4DC, 0x581E, - 0xF4DD, 0x59BE, 0xF4DE, 0x5E16, 0xF4DF, 0x6377, 0xF4E0, 0x7252, - 0xF4E1, 0x758A, 0xF4E2, 0x776B, 0xF4E3, 0x8ADC, 0xF4E4, 0x8CBC, - 0xF4E5, 0x8F12, 0xF4E6, 0x5EF3, 0xF4E7, 0x6674, 0xF4E8, 0x6DF8, - 0xF4E9, 0x807D, 0xF4EA, 0x83C1, 0xF4EB, 0x8ACB, 0xF4EC, 0x9751, - 0xF4ED, 0x9BD6, 0xF4EE, 0xFA00, 0xF4EF, 0x5243, 0xF4F0, 0x66FF, - 0xF4F1, 0x6D95, 0xF4F2, 0x6EEF, 0xF4F3, 0x7DE0, 0xF4F4, 0x8AE6, - 0xF4F5, 0x902E, 0xF4F6, 0x905E, 0xF4F7, 0x9AD4, 0xF4F8, 0x521D, - 0xF4F9, 0x527F, 0xF4FA, 0x54E8, 0xF4FB, 0x6194, 0xF4FC, 0x6284, - 0xF4FD, 0x62DB, 0xF4FE, 0x68A2, 0xF5A1, 0x6912, 0xF5A2, 0x695A, - 0xF5A3, 0x6A35, 0xF5A4, 0x7092, 0xF5A5, 0x7126, 0xF5A6, 0x785D, - 0xF5A7, 0x7901, 0xF5A8, 0x790E, 0xF5A9, 0x79D2, 0xF5AA, 0x7A0D, - 0xF5AB, 0x8096, 0xF5AC, 0x8278, 0xF5AD, 0x82D5, 0xF5AE, 0x8349, - 0xF5AF, 0x8549, 0xF5B0, 0x8C82, 0xF5B1, 0x8D85, 0xF5B2, 0x9162, - 0xF5B3, 0x918B, 0xF5B4, 0x91AE, 0xF5B5, 0x4FC3, 0xF5B6, 0x56D1, - 0xF5B7, 0x71ED, 0xF5B8, 0x77D7, 0xF5B9, 0x8700, 0xF5BA, 0x89F8, - 0xF5BB, 0x5BF8, 0xF5BC, 0x5FD6, 0xF5BD, 0x6751, 0xF5BE, 0x90A8, - 0xF5BF, 0x53E2, 0xF5C0, 0x585A, 0xF5C1, 0x5BF5, 0xF5C2, 0x60A4, - 0xF5C3, 0x6181, 0xF5C4, 0x6460, 0xF5C5, 0x7E3D, 0xF5C6, 0x8070, - 0xF5C7, 0x8525, 0xF5C8, 0x9283, 0xF5C9, 0x64AE, 0xF5CA, 0x50AC, - 0xF5CB, 0x5D14, 0xF5CC, 0x6700, 0xF5CD, 0x589C, 0xF5CE, 0x62BD, - 0xF5CF, 0x63A8, 0xF5D0, 0x690E, 0xF5D1, 0x6978, 0xF5D2, 0x6A1E, - 0xF5D3, 0x6E6B, 0xF5D4, 0x76BA, 0xF5D5, 0x79CB, 0xF5D6, 0x82BB, - 0xF5D7, 0x8429, 0xF5D8, 0x8ACF, 0xF5D9, 0x8DA8, 0xF5DA, 0x8FFD, - 0xF5DB, 0x9112, 0xF5DC, 0x914B, 0xF5DD, 0x919C, 0xF5DE, 0x9310, - 0xF5DF, 0x9318, 0xF5E0, 0x939A, 0xF5E1, 0x96DB, 0xF5E2, 0x9A36, - 0xF5E3, 0x9C0D, 0xF5E4, 0x4E11, 0xF5E5, 0x755C, 0xF5E6, 0x795D, - 0xF5E7, 0x7AFA, 0xF5E8, 0x7B51, 0xF5E9, 0x7BC9, 0xF5EA, 0x7E2E, - 0xF5EB, 0x84C4, 0xF5EC, 0x8E59, 0xF5ED, 0x8E74, 0xF5EE, 0x8EF8, - 0xF5EF, 0x9010, 0xF5F0, 0x6625, 0xF5F1, 0x693F, 0xF5F2, 0x7443, - 0xF5F3, 0x51FA, 0xF5F4, 0x672E, 0xF5F5, 0x9EDC, 0xF5F6, 0x5145, - 0xF5F7, 0x5FE0, 0xF5F8, 0x6C96, 0xF5F9, 0x87F2, 0xF5FA, 0x885D, - 0xF5FB, 0x8877, 0xF5FC, 0x60B4, 0xF5FD, 0x81B5, 0xF5FE, 0x8403, - 0xF6A1, 0x8D05, 0xF6A2, 0x53D6, 0xF6A3, 0x5439, 0xF6A4, 0x5634, - 0xF6A5, 0x5A36, 0xF6A6, 0x5C31, 0xF6A7, 0x708A, 0xF6A8, 0x7FE0, - 0xF6A9, 0x805A, 0xF6AA, 0x8106, 0xF6AB, 0x81ED, 0xF6AC, 0x8DA3, - 0xF6AD, 0x9189, 0xF6AE, 0x9A5F, 0xF6AF, 0x9DF2, 0xF6B0, 0x5074, - 0xF6B1, 0x4EC4, 0xF6B2, 0x53A0, 0xF6B3, 0x60FB, 0xF6B4, 0x6E2C, - 0xF6B5, 0x5C64, 0xF6B6, 0x4F88, 0xF6B7, 0x5024, 0xF6B8, 0x55E4, - 0xF6B9, 0x5CD9, 0xF6BA, 0x5E5F, 0xF6BB, 0x6065, 0xF6BC, 0x6894, - 0xF6BD, 0x6CBB, 0xF6BE, 0x6DC4, 0xF6BF, 0x71BE, 0xF6C0, 0x75D4, - 0xF6C1, 0x75F4, 0xF6C2, 0x7661, 0xF6C3, 0x7A1A, 0xF6C4, 0x7A49, - 0xF6C5, 0x7DC7, 0xF6C6, 0x7DFB, 0xF6C7, 0x7F6E, 0xF6C8, 0x81F4, - 0xF6C9, 0x86A9, 0xF6CA, 0x8F1C, 0xF6CB, 0x96C9, 0xF6CC, 0x99B3, - 0xF6CD, 0x9F52, 0xF6CE, 0x5247, 0xF6CF, 0x52C5, 0xF6D0, 0x98ED, - 0xF6D1, 0x89AA, 0xF6D2, 0x4E03, 0xF6D3, 0x67D2, 0xF6D4, 0x6F06, - 0xF6D5, 0x4FB5, 0xF6D6, 0x5BE2, 0xF6D7, 0x6795, 0xF6D8, 0x6C88, - 0xF6D9, 0x6D78, 0xF6DA, 0x741B, 0xF6DB, 0x7827, 0xF6DC, 0x91DD, - 0xF6DD, 0x937C, 0xF6DE, 0x87C4, 0xF6DF, 0x79E4, 0xF6E0, 0x7A31, - 0xF6E1, 0x5FEB, 0xF6E2, 0x4ED6, 0xF6E3, 0x54A4, 0xF6E4, 0x553E, - 0xF6E5, 0x58AE, 0xF6E6, 0x59A5, 0xF6E7, 0x60F0, 0xF6E8, 0x6253, - 0xF6E9, 0x62D6, 0xF6EA, 0x6736, 0xF6EB, 0x6955, 0xF6EC, 0x8235, - 0xF6ED, 0x9640, 0xF6EE, 0x99B1, 0xF6EF, 0x99DD, 0xF6F0, 0x502C, - 0xF6F1, 0x5353, 0xF6F2, 0x5544, 0xF6F3, 0x577C, 0xF6F4, 0xFA01, - 0xF6F5, 0x6258, 0xF6F6, 0xFA02, 0xF6F7, 0x64E2, 0xF6F8, 0x666B, - 0xF6F9, 0x67DD, 0xF6FA, 0x6FC1, 0xF6FB, 0x6FEF, 0xF6FC, 0x7422, - 0xF6FD, 0x7438, 0xF6FE, 0x8A17, 0xF7A1, 0x9438, 0xF7A2, 0x5451, - 0xF7A3, 0x5606, 0xF7A4, 0x5766, 0xF7A5, 0x5F48, 0xF7A6, 0x619A, - 0xF7A7, 0x6B4E, 0xF7A8, 0x7058, 0xF7A9, 0x70AD, 0xF7AA, 0x7DBB, - 0xF7AB, 0x8A95, 0xF7AC, 0x596A, 0xF7AD, 0x812B, 0xF7AE, 0x63A2, - 0xF7AF, 0x7708, 0xF7B0, 0x803D, 0xF7B1, 0x8CAA, 0xF7B2, 0x5854, - 0xF7B3, 0x642D, 0xF7B4, 0x69BB, 0xF7B5, 0x5B95, 0xF7B6, 0x5E11, - 0xF7B7, 0x6E6F, 0xF7B8, 0xFA03, 0xF7B9, 0x8569, 0xF7BA, 0x514C, - 0xF7BB, 0x53F0, 0xF7BC, 0x592A, 0xF7BD, 0x6020, 0xF7BE, 0x614B, - 0xF7BF, 0x6B86, 0xF7C0, 0x6C70, 0xF7C1, 0x6CF0, 0xF7C2, 0x7B1E, - 0xF7C3, 0x80CE, 0xF7C4, 0x82D4, 0xF7C5, 0x8DC6, 0xF7C6, 0x90B0, - 0xF7C7, 0x98B1, 0xF7C8, 0xFA04, 0xF7C9, 0x64C7, 0xF7CA, 0x6FA4, - 0xF7CB, 0x6491, 0xF7CC, 0x6504, 0xF7CD, 0x514E, 0xF7CE, 0x5410, - 0xF7CF, 0x571F, 0xF7D0, 0x8A0E, 0xF7D1, 0x615F, 0xF7D2, 0x6876, - 0xF7D3, 0xFA05, 0xF7D4, 0x75DB, 0xF7D5, 0x7B52, 0xF7D6, 0x7D71, - 0xF7D7, 0x901A, 0xF7D8, 0x5806, 0xF7D9, 0x69CC, 0xF7DA, 0x817F, - 0xF7DB, 0x892A, 0xF7DC, 0x9000, 0xF7DD, 0x9839, 0xF7DE, 0x5078, - 0xF7DF, 0x5957, 0xF7E0, 0x59AC, 0xF7E1, 0x6295, 0xF7E2, 0x900F, - 0xF7E3, 0x9B2A, 0xF7E4, 0x615D, 0xF7E5, 0x7279, 0xF7E6, 0x95D6, - 0xF7E7, 0x5761, 0xF7E8, 0x5A46, 0xF7E9, 0x5DF4, 0xF7EA, 0x628A, - 0xF7EB, 0x64AD, 0xF7EC, 0x64FA, 0xF7ED, 0x6777, 0xF7EE, 0x6CE2, - 0xF7EF, 0x6D3E, 0xF7F0, 0x722C, 0xF7F1, 0x7436, 0xF7F2, 0x7834, - 0xF7F3, 0x7F77, 0xF7F4, 0x82AD, 0xF7F5, 0x8DDB, 0xF7F6, 0x9817, - 0xF7F7, 0x5224, 0xF7F8, 0x5742, 0xF7F9, 0x677F, 0xF7FA, 0x7248, - 0xF7FB, 0x74E3, 0xF7FC, 0x8CA9, 0xF7FD, 0x8FA6, 0xF7FE, 0x9211, - 0xF8A1, 0x962A, 0xF8A2, 0x516B, 0xF8A3, 0x53ED, 0xF8A4, 0x634C, - 0xF8A5, 0x4F69, 0xF8A6, 0x5504, 0xF8A7, 0x6096, 0xF8A8, 0x6557, - 0xF8A9, 0x6C9B, 0xF8AA, 0x6D7F, 0xF8AB, 0x724C, 0xF8AC, 0x72FD, - 0xF8AD, 0x7A17, 0xF8AE, 0x8987, 0xF8AF, 0x8C9D, 0xF8B0, 0x5F6D, - 0xF8B1, 0x6F8E, 0xF8B2, 0x70F9, 0xF8B3, 0x81A8, 0xF8B4, 0x610E, - 0xF8B5, 0x4FBF, 0xF8B6, 0x504F, 0xF8B7, 0x6241, 0xF8B8, 0x7247, - 0xF8B9, 0x7BC7, 0xF8BA, 0x7DE8, 0xF8BB, 0x7FE9, 0xF8BC, 0x904D, - 0xF8BD, 0x97AD, 0xF8BE, 0x9A19, 0xF8BF, 0x8CB6, 0xF8C0, 0x576A, - 0xF8C1, 0x5E73, 0xF8C2, 0x67B0, 0xF8C3, 0x840D, 0xF8C4, 0x8A55, - 0xF8C5, 0x5420, 0xF8C6, 0x5B16, 0xF8C7, 0x5E63, 0xF8C8, 0x5EE2, - 0xF8C9, 0x5F0A, 0xF8CA, 0x6583, 0xF8CB, 0x80BA, 0xF8CC, 0x853D, - 0xF8CD, 0x9589, 0xF8CE, 0x965B, 0xF8CF, 0x4F48, 0xF8D0, 0x5305, - 0xF8D1, 0x530D, 0xF8D2, 0x530F, 0xF8D3, 0x5486, 0xF8D4, 0x54FA, - 0xF8D5, 0x5703, 0xF8D6, 0x5E03, 0xF8D7, 0x6016, 0xF8D8, 0x629B, - 0xF8D9, 0x62B1, 0xF8DA, 0x6355, 0xF8DB, 0xFA06, 0xF8DC, 0x6CE1, - 0xF8DD, 0x6D66, 0xF8DE, 0x75B1, 0xF8DF, 0x7832, 0xF8E0, 0x80DE, - 0xF8E1, 0x812F, 0xF8E2, 0x82DE, 0xF8E3, 0x8461, 0xF8E4, 0x84B2, - 0xF8E5, 0x888D, 0xF8E6, 0x8912, 0xF8E7, 0x900B, 0xF8E8, 0x92EA, - 0xF8E9, 0x98FD, 0xF8EA, 0x9B91, 0xF8EB, 0x5E45, 0xF8EC, 0x66B4, - 0xF8ED, 0x66DD, 0xF8EE, 0x7011, 0xF8EF, 0x7206, 0xF8F0, 0xFA07, - 0xF8F1, 0x4FF5, 0xF8F2, 0x527D, 0xF8F3, 0x5F6A, 0xF8F4, 0x6153, - 0xF8F5, 0x6753, 0xF8F6, 0x6A19, 0xF8F7, 0x6F02, 0xF8F8, 0x74E2, - 0xF8F9, 0x7968, 0xF8FA, 0x8868, 0xF8FB, 0x8C79, 0xF8FC, 0x98C7, - 0xF8FD, 0x98C4, 0xF8FE, 0x9A43, 0xF9A1, 0x54C1, 0xF9A2, 0x7A1F, - 0xF9A3, 0x6953, 0xF9A4, 0x8AF7, 0xF9A5, 0x8C4A, 0xF9A6, 0x98A8, - 0xF9A7, 0x99AE, 0xF9A8, 0x5F7C, 0xF9A9, 0x62AB, 0xF9AA, 0x75B2, - 0xF9AB, 0x76AE, 0xF9AC, 0x88AB, 0xF9AD, 0x907F, 0xF9AE, 0x9642, - 0xF9AF, 0x5339, 0xF9B0, 0x5F3C, 0xF9B1, 0x5FC5, 0xF9B2, 0x6CCC, - 0xF9B3, 0x73CC, 0xF9B4, 0x7562, 0xF9B5, 0x758B, 0xF9B6, 0x7B46, - 0xF9B7, 0x82FE, 0xF9B8, 0x999D, 0xF9B9, 0x4E4F, 0xF9BA, 0x903C, - 0xF9BB, 0x4E0B, 0xF9BC, 0x4F55, 0xF9BD, 0x53A6, 0xF9BE, 0x590F, - 0xF9BF, 0x5EC8, 0xF9C0, 0x6630, 0xF9C1, 0x6CB3, 0xF9C2, 0x7455, - 0xF9C3, 0x8377, 0xF9C4, 0x8766, 0xF9C5, 0x8CC0, 0xF9C6, 0x9050, - 0xF9C7, 0x971E, 0xF9C8, 0x9C15, 0xF9C9, 0x58D1, 0xF9CA, 0x5B78, - 0xF9CB, 0x8650, 0xF9CC, 0x8B14, 0xF9CD, 0x9DB4, 0xF9CE, 0x5BD2, - 0xF9CF, 0x6068, 0xF9D0, 0x608D, 0xF9D1, 0x65F1, 0xF9D2, 0x6C57, - 0xF9D3, 0x6F22, 0xF9D4, 0x6FA3, 0xF9D5, 0x701A, 0xF9D6, 0x7F55, - 0xF9D7, 0x7FF0, 0xF9D8, 0x9591, 0xF9D9, 0x9592, 0xF9DA, 0x9650, - 0xF9DB, 0x97D3, 0xF9DC, 0x5272, 0xF9DD, 0x8F44, 0xF9DE, 0x51FD, - 0xF9DF, 0x542B, 0xF9E0, 0x54B8, 0xF9E1, 0x5563, 0xF9E2, 0x558A, - 0xF9E3, 0x6ABB, 0xF9E4, 0x6DB5, 0xF9E5, 0x7DD8, 0xF9E6, 0x8266, - 0xF9E7, 0x929C, 0xF9E8, 0x9677, 0xF9E9, 0x9E79, 0xF9EA, 0x5408, - 0xF9EB, 0x54C8, 0xF9EC, 0x76D2, 0xF9ED, 0x86E4, 0xF9EE, 0x95A4, - 0xF9EF, 0x95D4, 0xF9F0, 0x965C, 0xF9F1, 0x4EA2, 0xF9F2, 0x4F09, - 0xF9F3, 0x59EE, 0xF9F4, 0x5AE6, 0xF9F5, 0x5DF7, 0xF9F6, 0x6052, - 0xF9F7, 0x6297, 0xF9F8, 0x676D, 0xF9F9, 0x6841, 0xF9FA, 0x6C86, - 0xF9FB, 0x6E2F, 0xF9FC, 0x7F38, 0xF9FD, 0x809B, 0xF9FE, 0x822A, - 0xFAA1, 0xFA08, 0xFAA2, 0xFA09, 0xFAA3, 0x9805, 0xFAA4, 0x4EA5, - 0xFAA5, 0x5055, 0xFAA6, 0x54B3, 0xFAA7, 0x5793, 0xFAA8, 0x595A, - 0xFAA9, 0x5B69, 0xFAAA, 0x5BB3, 0xFAAB, 0x61C8, 0xFAAC, 0x6977, - 0xFAAD, 0x6D77, 0xFAAE, 0x7023, 0xFAAF, 0x87F9, 0xFAB0, 0x89E3, - 0xFAB1, 0x8A72, 0xFAB2, 0x8AE7, 0xFAB3, 0x9082, 0xFAB4, 0x99ED, - 0xFAB5, 0x9AB8, 0xFAB6, 0x52BE, 0xFAB7, 0x6838, 0xFAB8, 0x5016, - 0xFAB9, 0x5E78, 0xFABA, 0x674F, 0xFABB, 0x8347, 0xFABC, 0x884C, - 0xFABD, 0x4EAB, 0xFABE, 0x5411, 0xFABF, 0x56AE, 0xFAC0, 0x73E6, - 0xFAC1, 0x9115, 0xFAC2, 0x97FF, 0xFAC3, 0x9909, 0xFAC4, 0x9957, - 0xFAC5, 0x9999, 0xFAC6, 0x5653, 0xFAC7, 0x589F, 0xFAC8, 0x865B, - 0xFAC9, 0x8A31, 0xFACA, 0x61B2, 0xFACB, 0x6AF6, 0xFACC, 0x737B, - 0xFACD, 0x8ED2, 0xFACE, 0x6B47, 0xFACF, 0x96AA, 0xFAD0, 0x9A57, - 0xFAD1, 0x5955, 0xFAD2, 0x7200, 0xFAD3, 0x8D6B, 0xFAD4, 0x9769, - 0xFAD5, 0x4FD4, 0xFAD6, 0x5CF4, 0xFAD7, 0x5F26, 0xFAD8, 0x61F8, - 0xFAD9, 0x665B, 0xFADA, 0x6CEB, 0xFADB, 0x70AB, 0xFADC, 0x7384, - 0xFADD, 0x73B9, 0xFADE, 0x73FE, 0xFADF, 0x7729, 0xFAE0, 0x774D, - 0xFAE1, 0x7D43, 0xFAE2, 0x7D62, 0xFAE3, 0x7E23, 0xFAE4, 0x8237, - 0xFAE5, 0x8852, 0xFAE6, 0xFA0A, 0xFAE7, 0x8CE2, 0xFAE8, 0x9249, - 0xFAE9, 0x986F, 0xFAEA, 0x5B51, 0xFAEB, 0x7A74, 0xFAEC, 0x8840, - 0xFAED, 0x9801, 0xFAEE, 0x5ACC, 0xFAEF, 0x4FE0, 0xFAF0, 0x5354, - 0xFAF1, 0x593E, 0xFAF2, 0x5CFD, 0xFAF3, 0x633E, 0xFAF4, 0x6D79, - 0xFAF5, 0x72F9, 0xFAF6, 0x8105, 0xFAF7, 0x8107, 0xFAF8, 0x83A2, - 0xFAF9, 0x92CF, 0xFAFA, 0x9830, 0xFAFB, 0x4EA8, 0xFAFC, 0x5144, - 0xFAFD, 0x5211, 0xFAFE, 0x578B, 0xFBA1, 0x5F62, 0xFBA2, 0x6CC2, - 0xFBA3, 0x6ECE, 0xFBA4, 0x7005, 0xFBA5, 0x7050, 0xFBA6, 0x70AF, - 0xFBA7, 0x7192, 0xFBA8, 0x73E9, 0xFBA9, 0x7469, 0xFBAA, 0x834A, - 0xFBAB, 0x87A2, 0xFBAC, 0x8861, 0xFBAD, 0x9008, 0xFBAE, 0x90A2, - 0xFBAF, 0x93A3, 0xFBB0, 0x99A8, 0xFBB1, 0x516E, 0xFBB2, 0x5F57, - 0xFBB3, 0x60E0, 0xFBB4, 0x6167, 0xFBB5, 0x66B3, 0xFBB6, 0x8559, - 0xFBB7, 0x8E4A, 0xFBB8, 0x91AF, 0xFBB9, 0x978B, 0xFBBA, 0x4E4E, - 0xFBBB, 0x4E92, 0xFBBC, 0x547C, 0xFBBD, 0x58D5, 0xFBBE, 0x58FA, - 0xFBBF, 0x597D, 0xFBC0, 0x5CB5, 0xFBC1, 0x5F27, 0xFBC2, 0x6236, - 0xFBC3, 0x6248, 0xFBC4, 0x660A, 0xFBC5, 0x6667, 0xFBC6, 0x6BEB, - 0xFBC7, 0x6D69, 0xFBC8, 0x6DCF, 0xFBC9, 0x6E56, 0xFBCA, 0x6EF8, - 0xFBCB, 0x6F94, 0xFBCC, 0x6FE0, 0xFBCD, 0x6FE9, 0xFBCE, 0x705D, - 0xFBCF, 0x72D0, 0xFBD0, 0x7425, 0xFBD1, 0x745A, 0xFBD2, 0x74E0, - 0xFBD3, 0x7693, 0xFBD4, 0x795C, 0xFBD5, 0x7CCA, 0xFBD6, 0x7E1E, - 0xFBD7, 0x80E1, 0xFBD8, 0x82A6, 0xFBD9, 0x846B, 0xFBDA, 0x84BF, - 0xFBDB, 0x864E, 0xFBDC, 0x865F, 0xFBDD, 0x8774, 0xFBDE, 0x8B77, - 0xFBDF, 0x8C6A, 0xFBE0, 0x93AC, 0xFBE1, 0x9800, 0xFBE2, 0x9865, - 0xFBE3, 0x60D1, 0xFBE4, 0x6216, 0xFBE5, 0x9177, 0xFBE6, 0x5A5A, - 0xFBE7, 0x660F, 0xFBE8, 0x6DF7, 0xFBE9, 0x6E3E, 0xFBEA, 0x743F, - 0xFBEB, 0x9B42, 0xFBEC, 0x5FFD, 0xFBED, 0x60DA, 0xFBEE, 0x7B0F, - 0xFBEF, 0x54C4, 0xFBF0, 0x5F18, 0xFBF1, 0x6C5E, 0xFBF2, 0x6CD3, - 0xFBF3, 0x6D2A, 0xFBF4, 0x70D8, 0xFBF5, 0x7D05, 0xFBF6, 0x8679, - 0xFBF7, 0x8A0C, 0xFBF8, 0x9D3B, 0xFBF9, 0x5316, 0xFBFA, 0x548C, - 0xFBFB, 0x5B05, 0xFBFC, 0x6A3A, 0xFBFD, 0x706B, 0xFBFE, 0x7575, - 0xFCA1, 0x798D, 0xFCA2, 0x79BE, 0xFCA3, 0x82B1, 0xFCA4, 0x83EF, - 0xFCA5, 0x8A71, 0xFCA6, 0x8B41, 0xFCA7, 0x8CA8, 0xFCA8, 0x9774, - 0xFCA9, 0xFA0B, 0xFCAA, 0x64F4, 0xFCAB, 0x652B, 0xFCAC, 0x78BA, - 0xFCAD, 0x78BB, 0xFCAE, 0x7A6B, 0xFCAF, 0x4E38, 0xFCB0, 0x559A, - 0xFCB1, 0x5950, 0xFCB2, 0x5BA6, 0xFCB3, 0x5E7B, 0xFCB4, 0x60A3, - 0xFCB5, 0x63DB, 0xFCB6, 0x6B61, 0xFCB7, 0x6665, 0xFCB8, 0x6853, - 0xFCB9, 0x6E19, 0xFCBA, 0x7165, 0xFCBB, 0x74B0, 0xFCBC, 0x7D08, - 0xFCBD, 0x9084, 0xFCBE, 0x9A69, 0xFCBF, 0x9C25, 0xFCC0, 0x6D3B, - 0xFCC1, 0x6ED1, 0xFCC2, 0x733E, 0xFCC3, 0x8C41, 0xFCC4, 0x95CA, - 0xFCC5, 0x51F0, 0xFCC6, 0x5E4C, 0xFCC7, 0x5FA8, 0xFCC8, 0x604D, - 0xFCC9, 0x60F6, 0xFCCA, 0x6130, 0xFCCB, 0x614C, 0xFCCC, 0x6643, - 0xFCCD, 0x6644, 0xFCCE, 0x69A5, 0xFCCF, 0x6CC1, 0xFCD0, 0x6E5F, - 0xFCD1, 0x6EC9, 0xFCD2, 0x6F62, 0xFCD3, 0x714C, 0xFCD4, 0x749C, - 0xFCD5, 0x7687, 0xFCD6, 0x7BC1, 0xFCD7, 0x7C27, 0xFCD8, 0x8352, - 0xFCD9, 0x8757, 0xFCDA, 0x9051, 0xFCDB, 0x968D, 0xFCDC, 0x9EC3, - 0xFCDD, 0x532F, 0xFCDE, 0x56DE, 0xFCDF, 0x5EFB, 0xFCE0, 0x5F8A, - 0xFCE1, 0x6062, 0xFCE2, 0x6094, 0xFCE3, 0x61F7, 0xFCE4, 0x6666, - 0xFCE5, 0x6703, 0xFCE6, 0x6A9C, 0xFCE7, 0x6DEE, 0xFCE8, 0x6FAE, - 0xFCE9, 0x7070, 0xFCEA, 0x736A, 0xFCEB, 0x7E6A, 0xFCEC, 0x81BE, - 0xFCED, 0x8334, 0xFCEE, 0x86D4, 0xFCEF, 0x8AA8, 0xFCF0, 0x8CC4, - 0xFCF1, 0x5283, 0xFCF2, 0x7372, 0xFCF3, 0x5B96, 0xFCF4, 0x6A6B, - 0xFCF5, 0x9404, 0xFCF6, 0x54EE, 0xFCF7, 0x5686, 0xFCF8, 0x5B5D, - 0xFCF9, 0x6548, 0xFCFA, 0x6585, 0xFCFB, 0x66C9, 0xFCFC, 0x689F, - 0xFCFD, 0x6D8D, 0xFCFE, 0x6DC6, 0xFDA1, 0x723B, 0xFDA2, 0x80B4, - 0xFDA3, 0x9175, 0xFDA4, 0x9A4D, 0xFDA5, 0x4FAF, 0xFDA6, 0x5019, - 0xFDA7, 0x539A, 0xFDA8, 0x540E, 0xFDA9, 0x543C, 0xFDAA, 0x5589, - 0xFDAB, 0x55C5, 0xFDAC, 0x5E3F, 0xFDAD, 0x5F8C, 0xFDAE, 0x673D, - 0xFDAF, 0x7166, 0xFDB0, 0x73DD, 0xFDB1, 0x9005, 0xFDB2, 0x52DB, - 0xFDB3, 0x52F3, 0xFDB4, 0x5864, 0xFDB5, 0x58CE, 0xFDB6, 0x7104, - 0xFDB7, 0x718F, 0xFDB8, 0x71FB, 0xFDB9, 0x85B0, 0xFDBA, 0x8A13, - 0xFDBB, 0x6688, 0xFDBC, 0x85A8, 0xFDBD, 0x55A7, 0xFDBE, 0x6684, - 0xFDBF, 0x714A, 0xFDC0, 0x8431, 0xFDC1, 0x5349, 0xFDC2, 0x5599, - 0xFDC3, 0x6BC1, 0xFDC4, 0x5F59, 0xFDC5, 0x5FBD, 0xFDC6, 0x63EE, - 0xFDC7, 0x6689, 0xFDC8, 0x7147, 0xFDC9, 0x8AF1, 0xFDCA, 0x8F1D, - 0xFDCB, 0x9EBE, 0xFDCC, 0x4F11, 0xFDCD, 0x643A, 0xFDCE, 0x70CB, - 0xFDCF, 0x7566, 0xFDD0, 0x8667, 0xFDD1, 0x6064, 0xFDD2, 0x8B4E, - 0xFDD3, 0x9DF8, 0xFDD4, 0x5147, 0xFDD5, 0x51F6, 0xFDD6, 0x5308, - 0xFDD7, 0x6D36, 0xFDD8, 0x80F8, 0xFDD9, 0x9ED1, 0xFDDA, 0x6615, - 0xFDDB, 0x6B23, 0xFDDC, 0x7098, 0xFDDD, 0x75D5, 0xFDDE, 0x5403, - 0xFDDF, 0x5C79, 0xFDE0, 0x7D07, 0xFDE1, 0x8A16, 0xFDE2, 0x6B20, - 0xFDE3, 0x6B3D, 0xFDE4, 0x6B46, 0xFDE5, 0x5438, 0xFDE6, 0x6070, - 0xFDE7, 0x6D3D, 0xFDE8, 0x7FD5, 0xFDE9, 0x8208, 0xFDEA, 0x50D6, - 0xFDEB, 0x51DE, 0xFDEC, 0x559C, 0xFDED, 0x566B, 0xFDEE, 0x56CD, - 0xFDEF, 0x59EC, 0xFDF0, 0x5B09, 0xFDF1, 0x5E0C, 0xFDF2, 0x6199, - 0xFDF3, 0x6198, 0xFDF4, 0x6231, 0xFDF5, 0x665E, 0xFDF6, 0x66E6, - 0xFDF7, 0x7199, 0xFDF8, 0x71B9, 0xFDF9, 0x71BA, 0xFDFA, 0x72A7, - 0xFDFB, 0x79A7, 0xFDFC, 0x7A00, 0xFDFD, 0x7FB2, 0xFDFE, 0x8A70, - 0, 0 -}; - - - -WCHAR ff_convert ( /* Converted code, 0 means conversion error */ - WCHAR chr, /* Character code to be converted */ - UINT dir /* 0: Unicode to OEM code, 1: OEM code to Unicode */ -) -{ - const WCHAR *p; - WCHAR c; - int i, n, li, hi; - - - if (chr < 0x80) { /* ASCII */ - c = chr; - } else { - if (dir) { /* OEM code to unicode */ - p = oem2uni; - hi = sizeof oem2uni / 4 - 1; - } else { /* Unicode to OEM code */ - p = uni2oem; - hi = sizeof uni2oem / 4 - 1; - } - li = 0; - for (n = 16; n; n--) { - i = li + (hi - li) / 2; - if (chr == p[i * 2]) break; - if (chr > p[i * 2]) - li = i; - else - hi = i; - } - c = n ? p[i * 2 + 1] : 0; - } - - return c; -} - - - - -WCHAR ff_wtoupper ( - WCHAR chr /* Unicode character to be upper converted */ -) -{ - static const WCHAR lower[] = { /* Lower case characters to be converted */ - /* Latin Supplement */ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, - /* Latin Extended-A */ 0x101,0x103,0x105,0x107,0x109,0x10B,0x10D,0x10F,0x111,0x113,0x115,0x117,0x119,0x11B,0x11D,0x11F,0x121,0x123,0x125,0x127,0x129,0x12B,0x12D,0x12F,0x131,0x133,0x135,0x137,0x13A,0x13C,0x13E,0x140,0x142,0x144,0x146,0x148,0x14B,0x14D,0x14F,0x151,0x153,0x155,0x157,0x159,0x15B,0x15D,0x15F,0x161,0x163,0x165,0x167,0x169,0x16B,0x16D,0x16F,0x171,0x173,0x175,0x177,0x17A,0x17C,0x17E, - /* Latin Extended-B */ 0x183,0x185,0x188,0x18C,0x192,0x199,0x1A1,0x1A3,0x1A8,0x1AD,0x1B0,0x1B4,0x1B6,0x1B9,0x1BD,0x1C6,0x1C9,0x1CC,0x1CE,0x1D0,0x1D2,0x1D4,0x1D6,0x1D8,0x1DA,0x1DC,0x1DD,0x1DF,0x1E1,0x1E3,0x1E5,0x1E7,0x1E9,0x1EB,0x1ED,0x1EF,0x1F3,0x1F5,0x1FB,0x1FD,0x1FF,0x201,0x203,0x205,0x207,0x209,0x20B,0x20D,0x20F,0x211,0x213,0x215,0x217, - /* Greek, Coptic */ 0x3B1,0x3B2,0x3B3,0x3B4,0x3B5,0x3B6,0x3B7,0x3B8,0x3B9,0x3BA,0x3BB,0x3BC,0x3BD,0x3BE,0x3BF,0x3C0,0x3C1,0x3C3,0x3C4,0x3C5,0x3C6,0x3C7,0x3C8,0x3C9,0x3CA,0x3CB,0x3CC,0x3CD,0x3CE,0x3E3,0x3E5,0x3E7,0x3E9,0x3EB, - /* Cyrillic */ 0x430,0x431,0x432,0x433,0x434,0x435,0x436,0x437,0x438,0x439,0x43A,0x43B,0x43C,0x43D,0x43E,0x43F,0x440,0x441,0x442,0x443,0x444,0x445,0x446,0x447,0x448,0x449,0x44A,0x44B,0x44C,0x44D,0x44E,0x44F,0x452,0x453,0x454,0x455,0x456,0x457,0x458,0x459,0x45A,0x45B,0x45C,0x45E,0x45F,0x461,0x463,0x465,0x467,0x469,0x46B,0x46D,0x46F,0x471,0x473,0x475,0x477,0x479,0x47B,0x47D,0x47F,0x481,0x491,0x493,0x495,0x497,0x499,0x49B,0x49D,0x49F,0x4A1,0x4A3,0x4A5,0x4A7,0x4A9,0x4AB,0x4AD,0x4AF,0x4B1,0x4B3,0x4B5,0x4B7,0x4B9,0x4BB,0x4BD,0x4BF,0x4C2,0x4C4,0x4C8,0x4D1,0x4D3,0x4D5,0x4D7,0x4D9,0x4DB,0x4DD,0x4DF,0x4E1,0x4E3,0x4E5,0x4E7,0x4E9,0x4EB,0x4ED,0x4EF,0x4F1,0x4F3,0x4F5,0x4F9, - /* Armenian */ 0x561,0x562,0x563,0x564,0x565,0x566,0x567,0x568,0x569,0x56A,0x56B,0x56C,0x56D,0x56E,0x56F,0x570,0x571,0x572,0x573,0x574,0x575,0x576,0x577,0x578,0x579,0x57A,0x57B,0x57C,0x57D,0x57E,0x57F,0x580,0x581,0x582,0x583,0x584,0x585,0x586, - /* Latin Extended Additional */ 0x1E01,0x1E03,0x1E05,0x1E07,0x1E09,0x1E0B,0x1E0D,0x1E0F,0x1E11,0x1E13,0x1E15,0x1E17,0x1E19,0x1E1B,0x1E1D,0x1E1F,0x1E21,0x1E23,0x1E25,0x1E27,0x1E29,0x1E2B,0x1E2D,0x1E2F,0x1E31,0x1E33,0x1E35,0x1E37,0x1E39,0x1E3B,0x1E3D,0x1E3F,0x1E41,0x1E43,0x1E45,0x1E47,0x1E49,0x1E4B,0x1E4D,0x1E4F,0x1E51,0x1E53,0x1E55,0x1E57,0x1E59,0x1E5B,0x1E5D,0x1E5F,0x1E61,0x1E63,0x1E65,0x1E67,0x1E69,0x1E6B,0x1E6D,0x1E6F,0x1E71,0x1E73,0x1E75,0x1E77,0x1E79,0x1E7B,0x1E7D,0x1E7F,0x1E81,0x1E83,0x1E85,0x1E87,0x1E89,0x1E8B,0x1E8D,0x1E8F,0x1E91,0x1E93,0x1E95,0x1E97,0x1E99,0x1E9B,0x1E9D,0x1E9F,0x1EA1,0x1EA3,0x1EA5,0x1EA7,0x1EA9,0x1EAB,0x1EAD,0x1EAF,0x1EB1,0x1EB3,0x1EB5,0x1EB7,0x1EB9,0x1EBB,0x1EBD,0x1EBF,0x1EC1,0x1EC3,0x1EC5,0x1EC7,0x1EC9,0x1ECB,0x1ECD,0x1ECF,0x1ED1,0x1ED3,0x1ED5,0x1ED7,0x1ED9,0x1EDB,0x1EDD,0x1EDF,0x1EE1,0x1EE3,0x1EE5,0x1EE7,0x1EE9,0x1EEB,0x1EED,0x1EEF,0x1EF1,0x1EF3,0x1EF5,0x1EF7,0x1EF9, - /* Number forms */ 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178,0x2179,0x217A,0x217B,0x217C,0x217D,0x217E,0x217F, - /* Full-width */ 0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58,0xFF59,0xFF5A - }; - static const WCHAR upper[] = { /* Upper case characters correspond to lower[] */ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x178, - 0x100,0x102,0x104,0x106,0x108,0x10A,0x10C,0x10E,0x110,0x112,0x114,0x116,0x118,0x11A,0x11C,0x11E,0x120,0x122,0x124,0x126,0x128,0x12A,0x12C,0x12E,0x130,0x132,0x134,0x136,0x139,0x13B,0x13D,0x13F,0x141,0x143,0x145,0x147,0x14A,0x14C,0x14E,0x150,0x152,0x154,0x156,0x158,0x15A,0x15C,0x15E,0x160,0x162,0x164,0x166,0x168,0x16A,0x16C,0x16E,0x170,0x172,0x174,0x176,0x179,0x17B,0x17D, - 0x182,0x184,0x187,0x18B,0x191,0x198,0x1A0,0x1A2,0x1A7,0x1AC,0x1AF,0x1B3,0x1B5,0x1B8,0x1BC,0x1C4,0x1C7,0x1CA,0x1CD,0x1CF,0x1D1,0x1D3,0x1D5,0x1D7,0x1D9,0x1DB,0x18E,0x1DE,0x1E0,0x1E2,0x1E4,0x1E6,0x1E8,0x1EA,0x1EC,0x1EE,0x1F1,0x1F4,0x1FA,0x1FC,0x1FE,0x200,0x202,0x204,0x206,0x208,0x20A,0x20C,0x20E,0x210,0x212,0x214,0x216, - 0x391,0x392,0x393,0x394,0x395,0x396,0x397,0x398,0x399,0x39A,0x39B,0x39C,0x39D,0x39E,0x39F,0x3A0,0x3A1,0x3A3,0x3A4,0x3A5,0x3A6,0x3A7,0x3A8,0x3A9,0x3AA,0x3AB,0x38C,0x38E,0x38F,0x3E2,0x3E4,0x3E6,0x3E8,0x3EA, - 0x410,0x411,0x412,0x413,0x414,0x415,0x416,0x417,0x418,0x419,0x41A,0x41B,0x41C,0x41D,0x41E,0x41F,0x420,0x421,0x422,0x423,0x424,0x425,0x426,0x427,0x428,0x429,0x42A,0x42B,0x42C,0x42D,0x42E,0x42F,0x402,0x403,0x404,0x405,0x406,0x407,0x408,0x409,0x40A,0x40B,0x40C,0x40E,0x40F,0x460,0x462,0x464,0x466,0x468,0x46A,0x46C,0x46E,0x470,0x472,0x474,0x476,0x478,0x47A,0x47C,0x47E,0x480,0x490,0x492,0x494,0x496,0x498,0x49A,0x49C,0x49E,0x4A0,0x4A2,0x4A4,0x4A6,0x4A8,0x4AA,0x4AC,0x4AE,0x4B0,0x4B2,0x4B4,0x4B6,0x4B8,0x4BA,0x4BC,0x4BE,0x4C1,0x4C3,0x5C7,0x4D0,0x4D2,0x4D4,0x4D6,0x4D8,0x4DA,0x4DC,0x4DE,0x4E0,0x4E2,0x4E4,0x4E6,0x4E8,0x4EA,0x4EC,0x4EE,0x4F0,0x4F2,0x4F4,0x4F8, - 0x531,0x532,0x533,0x534,0x535,0x536,0x537,0x538,0x539,0x53A,0x53B,0x53C,0x53D,0x53E,0x53F,0x540,0x541,0x542,0x543,0x544,0x545,0x546,0x547,0x548,0x549,0x54A,0x54B,0x54C,0x54D,0x54E,0x54F,0x550,0x551,0x552,0x553,0x554,0x555,0x556, - 0x1E00,0x1E02,0x1E04,0x1E06,0x1E08,0x1E0A,0x1E0C,0x1E0E,0x1E10,0x1E12,0x1E14,0x1E16,0x1E18,0x1E1A,0x1E1C,0x1E1E,0x1E20,0x1E22,0x1E24,0x1E26,0x1E28,0x1E2A,0x1E2C,0x1E2E,0x1E30,0x1E32,0x1E34,0x1E36,0x1E38,0x1E3A,0x1E3C,0x1E3E,0x1E40,0x1E42,0x1E44,0x1E46,0x1E48,0x1E4A,0x1E4C,0x1E4E,0x1E50,0x1E52,0x1E54,0x1E56,0x1E58,0x1E5A,0x1E5C,0x1E5E,0x1E60,0x1E62,0x1E64,0x1E66,0x1E68,0x1E6A,0x1E6C,0x1E6E,0x1E70,0x1E72,0x1E74,0x1E76,0x1E78,0x1E7A,0x1E7C,0x1E7E,0x1E80,0x1E82,0x1E84,0x1E86,0x1E88,0x1E8A,0x1E8C,0x1E8E,0x1E90,0x1E92,0x1E94,0x1E96,0x1E98,0x1E9A,0x1E9C,0x1E9E,0x1EA0,0x1EA2,0x1EA4,0x1EA6,0x1EA8,0x1EAA,0x1EAC,0x1EAE,0x1EB0,0x1EB2,0x1EB4,0x1EB6,0x1EB8,0x1EBA,0x1EBC,0x1EBE,0x1EC0,0x1EC2,0x1EC4,0x1EC6,0x1EC8,0x1ECA,0x1ECC,0x1ECE,0x1ED0,0x1ED2,0x1ED4,0x1ED6,0x1ED8,0x1EDA,0x1EDC,0x1EDE,0x1EE0,0x1EE2,0x1EE4,0x1EE6,0x1EE8,0x1EEA,0x1EEC,0x1EEE,0x1EF0,0x1EF2,0x1EF4,0x1EF6,0x1EF8, - 0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x216A,0x216B,0x216C,0x216D,0x216E,0x216F, - 0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,0xFF3A - }; - UINT i, n, hi, li; - - - if (chr < 0x80) { /* ASCII characters (acceleration) */ - if (chr >= 0x61 && chr <= 0x7A) chr -= 0x20; - - } else { /* Extended characters */ - n = 12; li = 0; hi = sizeof lower / sizeof lower[0]; - do { - i = li + (hi - li) / 2; - if (chr == lower[i]) break; - if (chr > lower[i]) li = i; else hi = i; - } while (--n); - if (n) chr = upper[i]; - } - - return chr; -} - diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/cc950.c b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/cc950.c deleted file mode 100644 index c61f994..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/cc950.c +++ /dev/null @@ -1,6860 +0,0 @@ -/*------------------------------------------------------------------------*/ -/* Unicode - OEM code bidirectional converter (C)ChaN, 2015 */ -/* CP950 (Traditional Chinese Big5) */ -/*------------------------------------------------------------------------*/ - -#include "ff.h" - - -#if !_USE_LFN || _CODE_PAGE != 950 -#error This file is not needed in current configuration. Remove from the project. -#endif - - -static -const WCHAR uni2oem[] = { -/* Unicode - OEM, Unicode - OEM, Unicode - OEM, Unicode - OEM */ - 0x00A7, 0xA1B1, 0x00AF, 0xA1C2, 0x00B0, 0xA258, 0x00B1, 0xA1D3, - 0x00B7, 0xA150, 0x00D7, 0xA1D1, 0x00F7, 0xA1D2, 0x02C7, 0xA3BE, - 0x02C9, 0xA3BC, 0x02CA, 0xA3BD, 0x02CB, 0xA3BF, 0x02CD, 0xA1C5, - 0x02D9, 0xA3BB, 0x0391, 0xA344, 0x0392, 0xA345, 0x0393, 0xA346, - 0x0394, 0xA347, 0x0395, 0xA348, 0x0396, 0xA349, 0x0397, 0xA34A, - 0x0398, 0xA34B, 0x0399, 0xA34C, 0x039A, 0xA34D, 0x039B, 0xA34E, - 0x039C, 0xA34F, 0x039D, 0xA350, 0x039E, 0xA351, 0x039F, 0xA352, - 0x03A0, 0xA353, 0x03A1, 0xA354, 0x03A3, 0xA355, 0x03A4, 0xA356, - 0x03A5, 0xA357, 0x03A6, 0xA358, 0x03A7, 0xA359, 0x03A8, 0xA35A, - 0x03A9, 0xA35B, 0x03B1, 0xA35C, 0x03B2, 0xA35D, 0x03B3, 0xA35E, - 0x03B4, 0xA35F, 0x03B5, 0xA360, 0x03B6, 0xA361, 0x03B7, 0xA362, - 0x03B8, 0xA363, 0x03B9, 0xA364, 0x03BA, 0xA365, 0x03BB, 0xA366, - 0x03BC, 0xA367, 0x03BD, 0xA368, 0x03BE, 0xA369, 0x03BF, 0xA36A, - 0x03C0, 0xA36B, 0x03C1, 0xA36C, 0x03C3, 0xA36D, 0x03C4, 0xA36E, - 0x03C5, 0xA36F, 0x03C6, 0xA370, 0x03C7, 0xA371, 0x03C8, 0xA372, - 0x03C9, 0xA373, 0x2013, 0xA156, 0x2014, 0xA158, 0x2018, 0xA1A5, - 0x2019, 0xA1A6, 0x201C, 0xA1A7, 0x201D, 0xA1A8, 0x2025, 0xA14C, - 0x2026, 0xA14B, 0x2027, 0xA145, 0x2032, 0xA1AC, 0x2035, 0xA1AB, - 0x203B, 0xA1B0, 0x20AC, 0xA3E1, 0x2103, 0xA24A, 0x2105, 0xA1C1, - 0x2109, 0xA24B, 0x2160, 0xA2B9, 0x2161, 0xA2BA, 0x2162, 0xA2BB, - 0x2163, 0xA2BC, 0x2164, 0xA2BD, 0x2165, 0xA2BE, 0x2166, 0xA2BF, - 0x2167, 0xA2C0, 0x2168, 0xA2C1, 0x2169, 0xA2C2, 0x2190, 0xA1F6, - 0x2191, 0xA1F4, 0x2192, 0xA1F7, 0x2193, 0xA1F5, 0x2196, 0xA1F8, - 0x2197, 0xA1F9, 0x2198, 0xA1FB, 0x2199, 0xA1FA, 0x2215, 0xA241, - 0x221A, 0xA1D4, 0x221E, 0xA1DB, 0x221F, 0xA1E8, 0x2220, 0xA1E7, - 0x2223, 0xA1FD, 0x2225, 0xA1FC, 0x2229, 0xA1E4, 0x222A, 0xA1E5, - 0x222B, 0xA1EC, 0x222E, 0xA1ED, 0x2234, 0xA1EF, 0x2235, 0xA1EE, - 0x2252, 0xA1DC, 0x2260, 0xA1DA, 0x2261, 0xA1DD, 0x2266, 0xA1D8, - 0x2267, 0xA1D9, 0x2295, 0xA1F2, 0x2299, 0xA1F3, 0x22A5, 0xA1E6, - 0x22BF, 0xA1E9, 0x2500, 0xA277, 0x2502, 0xA278, 0x250C, 0xA27A, - 0x2510, 0xA27B, 0x2514, 0xA27C, 0x2518, 0xA27D, 0x251C, 0xA275, - 0x2524, 0xA274, 0x252C, 0xA273, 0x2534, 0xA272, 0x253C, 0xA271, - 0x2550, 0xA2A4, 0x2550, 0xF9F9, 0x2551, 0xF9F8, 0x2552, 0xF9E6, - 0x2553, 0xF9EF, 0x2554, 0xF9DD, 0x2555, 0xF9E8, 0x2556, 0xF9F1, - 0x2557, 0xF9DF, 0x2558, 0xF9EC, 0x2559, 0xF9F5, 0x255A, 0xF9E3, - 0x255B, 0xF9EE, 0x255C, 0xF9F7, 0x255D, 0xF9E5, 0x255E, 0xA2A5, - 0x255E, 0xF9E9, 0x255F, 0xF9F2, 0x2560, 0xF9E0, 0x2561, 0xA2A7, - 0x2561, 0xF9EB, 0x2562, 0xF9F4, 0x2563, 0xF9E2, 0x2564, 0xF9E7, - 0x2565, 0xF9F0, 0x2566, 0xF9DE, 0x2567, 0xF9ED, 0x2568, 0xF9F6, - 0x2569, 0xF9E4, 0x256A, 0xA2A6, 0x256A, 0xF9EA, 0x256B, 0xF9F3, - 0x256C, 0xF9E1, 0x256D, 0xA27E, 0x256D, 0xF9FA, 0x256E, 0xA2A1, - 0x256E, 0xF9FB, 0x256F, 0xA2A3, 0x256F, 0xF9FD, 0x2570, 0xA2A2, - 0x2570, 0xF9FC, 0x2571, 0xA2AC, 0x2572, 0xA2AD, 0x2573, 0xA2AE, - 0x2574, 0xA15A, 0x2581, 0xA262, 0x2582, 0xA263, 0x2583, 0xA264, - 0x2584, 0xA265, 0x2585, 0xA266, 0x2586, 0xA267, 0x2587, 0xA268, - 0x2588, 0xA269, 0x2589, 0xA270, 0x258A, 0xA26F, 0x258B, 0xA26E, - 0x258C, 0xA26D, 0x258D, 0xA26C, 0x258E, 0xA26B, 0x258F, 0xA26A, - 0x2593, 0xF9FE, 0x2594, 0xA276, 0x2595, 0xA279, 0x25A0, 0xA1BD, - 0x25A1, 0xA1BC, 0x25B2, 0xA1B6, 0x25B3, 0xA1B5, 0x25BC, 0xA1BF, - 0x25BD, 0xA1BE, 0x25C6, 0xA1BB, 0x25C7, 0xA1BA, 0x25CB, 0xA1B3, - 0x25CE, 0xA1B7, 0x25CF, 0xA1B4, 0x25E2, 0xA2A8, 0x25E3, 0xA2A9, - 0x25E4, 0xA2AB, 0x25E5, 0xA2AA, 0x2605, 0xA1B9, 0x2606, 0xA1B8, - 0x2640, 0xA1F0, 0x2642, 0xA1F1, 0x3000, 0xA140, 0x3001, 0xA142, - 0x3002, 0xA143, 0x3003, 0xA1B2, 0x3008, 0xA171, 0x3009, 0xA172, - 0x300A, 0xA16D, 0x300B, 0xA16E, 0x300C, 0xA175, 0x300D, 0xA176, - 0x300E, 0xA179, 0x300F, 0xA17A, 0x3010, 0xA169, 0x3011, 0xA16A, - 0x3012, 0xA245, 0x3014, 0xA165, 0x3015, 0xA166, 0x301D, 0xA1A9, - 0x301E, 0xA1AA, 0x3021, 0xA2C3, 0x3022, 0xA2C4, 0x3023, 0xA2C5, - 0x3024, 0xA2C6, 0x3025, 0xA2C7, 0x3026, 0xA2C8, 0x3027, 0xA2C9, - 0x3028, 0xA2CA, 0x3029, 0xA2CB, 0x3105, 0xA374, 0x3106, 0xA375, - 0x3107, 0xA376, 0x3108, 0xA377, 0x3109, 0xA378, 0x310A, 0xA379, - 0x310B, 0xA37A, 0x310C, 0xA37B, 0x310D, 0xA37C, 0x310E, 0xA37D, - 0x310F, 0xA37E, 0x3110, 0xA3A1, 0x3111, 0xA3A2, 0x3112, 0xA3A3, - 0x3113, 0xA3A4, 0x3114, 0xA3A5, 0x3115, 0xA3A6, 0x3116, 0xA3A7, - 0x3117, 0xA3A8, 0x3118, 0xA3A9, 0x3119, 0xA3AA, 0x311A, 0xA3AB, - 0x311B, 0xA3AC, 0x311C, 0xA3AD, 0x311D, 0xA3AE, 0x311E, 0xA3AF, - 0x311F, 0xA3B0, 0x3120, 0xA3B1, 0x3121, 0xA3B2, 0x3122, 0xA3B3, - 0x3123, 0xA3B4, 0x3124, 0xA3B5, 0x3125, 0xA3B6, 0x3126, 0xA3B7, - 0x3127, 0xA3B8, 0x3128, 0xA3B9, 0x3129, 0xA3BA, 0x32A3, 0xA1C0, - 0x338E, 0xA255, 0x338F, 0xA256, 0x339C, 0xA250, 0x339D, 0xA251, - 0x339E, 0xA252, 0x33A1, 0xA254, 0x33C4, 0xA257, 0x33CE, 0xA253, - 0x33D1, 0xA1EB, 0x33D2, 0xA1EA, 0x33D5, 0xA24F, 0x4E00, 0xA440, - 0x4E01, 0xA442, 0x4E03, 0xA443, 0x4E07, 0xC945, 0x4E08, 0xA456, - 0x4E09, 0xA454, 0x4E0A, 0xA457, 0x4E0B, 0xA455, 0x4E0C, 0xC946, - 0x4E0D, 0xA4A3, 0x4E0E, 0xC94F, 0x4E0F, 0xC94D, 0x4E10, 0xA4A2, - 0x4E11, 0xA4A1, 0x4E14, 0xA542, 0x4E15, 0xA541, 0x4E16, 0xA540, - 0x4E18, 0xA543, 0x4E19, 0xA4FE, 0x4E1E, 0xA5E0, 0x4E1F, 0xA5E1, - 0x4E26, 0xA8C3, 0x4E2B, 0xA458, 0x4E2D, 0xA4A4, 0x4E2E, 0xC950, - 0x4E30, 0xA4A5, 0x4E31, 0xC963, 0x4E32, 0xA6EA, 0x4E33, 0xCBB1, - 0x4E38, 0xA459, 0x4E39, 0xA4A6, 0x4E3B, 0xA544, 0x4E3C, 0xC964, - 0x4E42, 0xC940, 0x4E43, 0xA444, 0x4E45, 0xA45B, 0x4E47, 0xC947, - 0x4E48, 0xA45C, 0x4E4B, 0xA4A7, 0x4E4D, 0xA545, 0x4E4E, 0xA547, - 0x4E4F, 0xA546, 0x4E52, 0xA5E2, 0x4E53, 0xA5E3, 0x4E56, 0xA8C4, - 0x4E58, 0xADBC, 0x4E59, 0xA441, 0x4E5C, 0xC941, 0x4E5D, 0xA445, - 0x4E5E, 0xA45E, 0x4E5F, 0xA45D, 0x4E69, 0xA5E4, 0x4E73, 0xA8C5, - 0x4E7E, 0xB0AE, 0x4E7F, 0xD44B, 0x4E82, 0xB6C3, 0x4E83, 0xDCB1, - 0x4E84, 0xDCB2, 0x4E86, 0xA446, 0x4E88, 0xA4A9, 0x4E8B, 0xA8C6, - 0x4E8C, 0xA447, 0x4E8D, 0xC948, 0x4E8E, 0xA45F, 0x4E91, 0xA4AA, - 0x4E92, 0xA4AC, 0x4E93, 0xC951, 0x4E94, 0xA4AD, 0x4E95, 0xA4AB, - 0x4E99, 0xA5E5, 0x4E9B, 0xA8C7, 0x4E9E, 0xA8C8, 0x4E9F, 0xAB45, - 0x4EA1, 0xA460, 0x4EA2, 0xA4AE, 0x4EA4, 0xA5E6, 0x4EA5, 0xA5E8, - 0x4EA6, 0xA5E7, 0x4EA8, 0xA6EB, 0x4EAB, 0xA8C9, 0x4EAC, 0xA8CA, - 0x4EAD, 0xAB46, 0x4EAE, 0xAB47, 0x4EB3, 0xADBD, 0x4EB6, 0xDCB3, - 0x4EB9, 0xF6D6, 0x4EBA, 0xA448, 0x4EC0, 0xA4B0, 0x4EC1, 0xA4AF, - 0x4EC2, 0xC952, 0x4EC3, 0xA4B1, 0x4EC4, 0xA4B7, 0x4EC6, 0xA4B2, - 0x4EC7, 0xA4B3, 0x4EC8, 0xC954, 0x4EC9, 0xC953, 0x4ECA, 0xA4B5, - 0x4ECB, 0xA4B6, 0x4ECD, 0xA4B4, 0x4ED4, 0xA54A, 0x4ED5, 0xA54B, - 0x4ED6, 0xA54C, 0x4ED7, 0xA54D, 0x4ED8, 0xA549, 0x4ED9, 0xA550, - 0x4EDA, 0xC96A, 0x4EDC, 0xC966, 0x4EDD, 0xC969, 0x4EDE, 0xA551, - 0x4EDF, 0xA561, 0x4EE1, 0xC968, 0x4EE3, 0xA54E, 0x4EE4, 0xA54F, - 0x4EE5, 0xA548, 0x4EE8, 0xC965, 0x4EE9, 0xC967, 0x4EF0, 0xA5F5, - 0x4EF1, 0xC9B0, 0x4EF2, 0xA5F2, 0x4EF3, 0xA5F6, 0x4EF4, 0xC9BA, - 0x4EF5, 0xC9AE, 0x4EF6, 0xA5F3, 0x4EF7, 0xC9B2, 0x4EFB, 0xA5F4, - 0x4EFD, 0xA5F7, 0x4EFF, 0xA5E9, 0x4F00, 0xC9B1, 0x4F01, 0xA5F8, - 0x4F02, 0xC9B5, 0x4F04, 0xC9B9, 0x4F05, 0xC9B6, 0x4F08, 0xC9B3, - 0x4F09, 0xA5EA, 0x4F0A, 0xA5EC, 0x4F0B, 0xA5F9, 0x4F0D, 0xA5EE, - 0x4F0E, 0xC9AB, 0x4F0F, 0xA5F1, 0x4F10, 0xA5EF, 0x4F11, 0xA5F0, - 0x4F12, 0xC9BB, 0x4F13, 0xC9B8, 0x4F14, 0xC9AF, 0x4F15, 0xA5ED, - 0x4F18, 0xC9AC, 0x4F19, 0xA5EB, 0x4F1D, 0xC9B4, 0x4F22, 0xC9B7, - 0x4F2C, 0xC9AD, 0x4F2D, 0xCA66, 0x4F2F, 0xA742, 0x4F30, 0xA6F4, - 0x4F33, 0xCA67, 0x4F34, 0xA6F1, 0x4F36, 0xA744, 0x4F38, 0xA6F9, - 0x4F3A, 0xA6F8, 0x4F3B, 0xCA5B, 0x4F3C, 0xA6FC, 0x4F3D, 0xA6F7, - 0x4F3E, 0xCA60, 0x4F3F, 0xCA68, 0x4F41, 0xCA64, 0x4F43, 0xA6FA, - 0x4F46, 0xA6FD, 0x4F47, 0xA6EE, 0x4F48, 0xA747, 0x4F49, 0xCA5D, - 0x4F4C, 0xCBBD, 0x4F4D, 0xA6EC, 0x4F4E, 0xA743, 0x4F4F, 0xA6ED, - 0x4F50, 0xA6F5, 0x4F51, 0xA6F6, 0x4F52, 0xCA62, 0x4F53, 0xCA5E, - 0x4F54, 0xA6FB, 0x4F55, 0xA6F3, 0x4F56, 0xCA5A, 0x4F57, 0xA6EF, - 0x4F58, 0xCA65, 0x4F59, 0xA745, 0x4F5A, 0xA748, 0x4F5B, 0xA6F2, - 0x4F5C, 0xA740, 0x4F5D, 0xA746, 0x4F5E, 0xA6F0, 0x4F5F, 0xCA63, - 0x4F60, 0xA741, 0x4F61, 0xCA69, 0x4F62, 0xCA5C, 0x4F63, 0xA6FE, - 0x4F64, 0xCA5F, 0x4F67, 0xCA61, 0x4F69, 0xA8D8, 0x4F6A, 0xCBBF, - 0x4F6B, 0xCBCB, 0x4F6C, 0xA8D0, 0x4F6E, 0xCBCC, 0x4F6F, 0xA8CB, - 0x4F70, 0xA8D5, 0x4F73, 0xA8CE, 0x4F74, 0xCBB9, 0x4F75, 0xA8D6, - 0x4F76, 0xCBB8, 0x4F77, 0xCBBC, 0x4F78, 0xCBC3, 0x4F79, 0xCBC1, - 0x4F7A, 0xA8DE, 0x4F7B, 0xA8D9, 0x4F7C, 0xCBB3, 0x4F7D, 0xCBB5, - 0x4F7E, 0xA8DB, 0x4F7F, 0xA8CF, 0x4F80, 0xCBB6, 0x4F81, 0xCBC2, - 0x4F82, 0xCBC9, 0x4F83, 0xA8D4, 0x4F84, 0xCBBB, 0x4F85, 0xCBB4, - 0x4F86, 0xA8D3, 0x4F87, 0xCBB7, 0x4F88, 0xA8D7, 0x4F89, 0xCBBA, - 0x4F8B, 0xA8D2, 0x4F8D, 0xA8CD, 0x4F8F, 0xA8DC, 0x4F90, 0xCBC4, - 0x4F91, 0xA8DD, 0x4F92, 0xCBC8, 0x4F94, 0xCBC6, 0x4F95, 0xCBCA, - 0x4F96, 0xA8DA, 0x4F97, 0xCBBE, 0x4F98, 0xCBB2, 0x4F9A, 0xCBC0, - 0x4F9B, 0xA8D1, 0x4F9C, 0xCBC5, 0x4F9D, 0xA8CC, 0x4F9E, 0xCBC7, - 0x4FAE, 0xAB56, 0x4FAF, 0xAB4A, 0x4FB2, 0xCDE0, 0x4FB3, 0xCDE8, - 0x4FB5, 0xAB49, 0x4FB6, 0xAB51, 0x4FB7, 0xAB5D, 0x4FB9, 0xCDEE, - 0x4FBA, 0xCDEC, 0x4FBB, 0xCDE7, 0x4FBF, 0xAB4B, 0x4FC0, 0xCDED, - 0x4FC1, 0xCDE3, 0x4FC2, 0xAB59, 0x4FC3, 0xAB50, 0x4FC4, 0xAB58, - 0x4FC5, 0xCDDE, 0x4FC7, 0xCDEA, 0x4FC9, 0xCDE1, 0x4FCA, 0xAB54, - 0x4FCB, 0xCDE2, 0x4FCD, 0xCDDD, 0x4FCE, 0xAB5B, 0x4FCF, 0xAB4E, - 0x4FD0, 0xAB57, 0x4FD1, 0xAB4D, 0x4FD3, 0xCDDF, 0x4FD4, 0xCDE4, - 0x4FD6, 0xCDEB, 0x4FD7, 0xAB55, 0x4FD8, 0xAB52, 0x4FD9, 0xCDE6, - 0x4FDA, 0xAB5A, 0x4FDB, 0xCDE9, 0x4FDC, 0xCDE5, 0x4FDD, 0xAB4F, - 0x4FDE, 0xAB5C, 0x4FDF, 0xAB53, 0x4FE0, 0xAB4C, 0x4FE1, 0xAB48, - 0x4FEC, 0xCDEF, 0x4FEE, 0xADD7, 0x4FEF, 0xADC1, 0x4FF1, 0xADD1, - 0x4FF3, 0xADD6, 0x4FF4, 0xD0D0, 0x4FF5, 0xD0CF, 0x4FF6, 0xD0D4, - 0x4FF7, 0xD0D5, 0x4FF8, 0xADC4, 0x4FFA, 0xADCD, 0x4FFE, 0xADDA, - 0x5000, 0xADCE, 0x5005, 0xD0C9, 0x5006, 0xADC7, 0x5007, 0xD0CA, - 0x5009, 0xADDC, 0x500B, 0xADD3, 0x500C, 0xADBE, 0x500D, 0xADBF, - 0x500E, 0xD0DD, 0x500F, 0xB0BF, 0x5011, 0xADCC, 0x5012, 0xADCB, - 0x5013, 0xD0CB, 0x5014, 0xADCF, 0x5015, 0xD45B, 0x5016, 0xADC6, - 0x5017, 0xD0D6, 0x5018, 0xADD5, 0x5019, 0xADD4, 0x501A, 0xADCA, - 0x501B, 0xD0CE, 0x501C, 0xD0D7, 0x501E, 0xD0C8, 0x501F, 0xADC9, - 0x5020, 0xD0D8, 0x5021, 0xADD2, 0x5022, 0xD0CC, 0x5023, 0xADC0, - 0x5025, 0xADC3, 0x5026, 0xADC2, 0x5027, 0xD0D9, 0x5028, 0xADD0, - 0x5029, 0xADC5, 0x502A, 0xADD9, 0x502B, 0xADDB, 0x502C, 0xD0D3, - 0x502D, 0xADD8, 0x502F, 0xD0DB, 0x5030, 0xD0CD, 0x5031, 0xD0DC, - 0x5033, 0xD0D1, 0x5035, 0xD0DA, 0x5037, 0xD0D2, 0x503C, 0xADC8, - 0x5040, 0xD463, 0x5041, 0xD457, 0x5043, 0xB0B3, 0x5045, 0xD45C, - 0x5046, 0xD462, 0x5047, 0xB0B2, 0x5048, 0xD455, 0x5049, 0xB0B6, - 0x504A, 0xD459, 0x504B, 0xD452, 0x504C, 0xB0B4, 0x504D, 0xD456, - 0x504E, 0xB0B9, 0x504F, 0xB0BE, 0x5051, 0xD467, 0x5053, 0xD451, - 0x5055, 0xB0BA, 0x5057, 0xD466, 0x505A, 0xB0B5, 0x505B, 0xD458, - 0x505C, 0xB0B1, 0x505D, 0xD453, 0x505E, 0xD44F, 0x505F, 0xD45D, - 0x5060, 0xD450, 0x5061, 0xD44E, 0x5062, 0xD45A, 0x5063, 0xD460, - 0x5064, 0xD461, 0x5065, 0xB0B7, 0x5068, 0xD85B, 0x5069, 0xD45E, - 0x506A, 0xD44D, 0x506B, 0xD45F, 0x506D, 0xB0C1, 0x506E, 0xD464, - 0x506F, 0xB0C0, 0x5070, 0xD44C, 0x5072, 0xD454, 0x5073, 0xD465, - 0x5074, 0xB0BC, 0x5075, 0xB0BB, 0x5076, 0xB0B8, 0x5077, 0xB0BD, - 0x507A, 0xB0AF, 0x507D, 0xB0B0, 0x5080, 0xB3C8, 0x5082, 0xD85E, - 0x5083, 0xD857, 0x5085, 0xB3C5, 0x5087, 0xD85F, 0x508B, 0xD855, - 0x508C, 0xD858, 0x508D, 0xB3C4, 0x508E, 0xD859, 0x5091, 0xB3C7, - 0x5092, 0xD85D, 0x5094, 0xD853, 0x5095, 0xD852, 0x5096, 0xB3C9, - 0x5098, 0xB3CA, 0x5099, 0xB3C6, 0x509A, 0xB3CB, 0x509B, 0xD851, - 0x509C, 0xD85C, 0x509D, 0xD85A, 0x509E, 0xD854, 0x50A2, 0xB3C3, - 0x50A3, 0xD856, 0x50AC, 0xB6CA, 0x50AD, 0xB6C4, 0x50AE, 0xDCB7, - 0x50AF, 0xB6CD, 0x50B0, 0xDCBD, 0x50B1, 0xDCC0, 0x50B2, 0xB6C6, - 0x50B3, 0xB6C7, 0x50B4, 0xDCBA, 0x50B5, 0xB6C5, 0x50B6, 0xDCC3, - 0x50B7, 0xB6CB, 0x50B8, 0xDCC4, 0x50BA, 0xDCBF, 0x50BB, 0xB6CC, - 0x50BD, 0xDCB4, 0x50BE, 0xB6C9, 0x50BF, 0xDCB5, 0x50C1, 0xDCBE, - 0x50C2, 0xDCBC, 0x50C4, 0xDCB8, 0x50C5, 0xB6C8, 0x50C6, 0xDCB6, - 0x50C7, 0xB6CE, 0x50C8, 0xDCBB, 0x50C9, 0xDCC2, 0x50CA, 0xDCB9, - 0x50CB, 0xDCC1, 0x50CE, 0xB9B6, 0x50CF, 0xB9B3, 0x50D1, 0xB9B4, - 0x50D3, 0xE0F9, 0x50D4, 0xE0F1, 0x50D5, 0xB9B2, 0x50D6, 0xB9AF, - 0x50D7, 0xE0F2, 0x50DA, 0xB9B1, 0x50DB, 0xE0F5, 0x50DD, 0xE0F7, - 0x50E0, 0xE0FE, 0x50E3, 0xE0FD, 0x50E4, 0xE0F8, 0x50E5, 0xB9AE, - 0x50E6, 0xE0F0, 0x50E7, 0xB9AC, 0x50E8, 0xE0F3, 0x50E9, 0xB9B7, - 0x50EA, 0xE0F6, 0x50EC, 0xE0FA, 0x50ED, 0xB9B0, 0x50EE, 0xB9AD, - 0x50EF, 0xE0FC, 0x50F0, 0xE0FB, 0x50F1, 0xB9B5, 0x50F3, 0xE0F4, - 0x50F5, 0xBBF8, 0x50F6, 0xE4EC, 0x50F8, 0xE4E9, 0x50F9, 0xBBF9, - 0x50FB, 0xBBF7, 0x50FD, 0xE4F0, 0x50FE, 0xE4ED, 0x50FF, 0xE4E6, - 0x5100, 0xBBF6, 0x5102, 0xBBFA, 0x5103, 0xE4E7, 0x5104, 0xBBF5, - 0x5105, 0xBBFD, 0x5106, 0xE4EA, 0x5107, 0xE4EB, 0x5108, 0xBBFB, - 0x5109, 0xBBFC, 0x510A, 0xE4F1, 0x510B, 0xE4EE, 0x510C, 0xE4EF, - 0x5110, 0xBEAA, 0x5111, 0xE8F8, 0x5112, 0xBEA7, 0x5113, 0xE8F5, - 0x5114, 0xBEA9, 0x5115, 0xBEAB, 0x5117, 0xE8F6, 0x5118, 0xBEA8, - 0x511A, 0xE8F7, 0x511C, 0xE8F4, 0x511F, 0xC076, 0x5120, 0xECBD, - 0x5121, 0xC077, 0x5122, 0xECBB, 0x5124, 0xECBC, 0x5125, 0xECBA, - 0x5126, 0xECB9, 0x5129, 0xECBE, 0x512A, 0xC075, 0x512D, 0xEFB8, - 0x512E, 0xEFB9, 0x5130, 0xE4E8, 0x5131, 0xEFB7, 0x5132, 0xC078, - 0x5133, 0xC35F, 0x5134, 0xF1EB, 0x5135, 0xF1EC, 0x5137, 0xC4D7, - 0x5138, 0xC4D8, 0x5139, 0xF5C1, 0x513A, 0xF5C0, 0x513B, 0xC56C, - 0x513C, 0xC56B, 0x513D, 0xF7D0, 0x513F, 0xA449, 0x5140, 0xA461, - 0x5141, 0xA4B9, 0x5143, 0xA4B8, 0x5144, 0xA553, 0x5145, 0xA552, - 0x5146, 0xA5FC, 0x5147, 0xA5FB, 0x5148, 0xA5FD, 0x5149, 0xA5FA, - 0x514B, 0xA74A, 0x514C, 0xA749, 0x514D, 0xA74B, 0x5152, 0xA8E0, - 0x5154, 0xA8DF, 0x5155, 0xA8E1, 0x5157, 0xAB5E, 0x5159, 0xA259, - 0x515A, 0xD0DE, 0x515B, 0xA25A, 0x515C, 0xB0C2, 0x515D, 0xA25C, - 0x515E, 0xA25B, 0x515F, 0xD860, 0x5161, 0xA25D, 0x5162, 0xB9B8, - 0x5163, 0xA25E, 0x5165, 0xA44A, 0x5167, 0xA4BA, 0x5168, 0xA5FE, - 0x5169, 0xA8E2, 0x516B, 0xA44B, 0x516C, 0xA4BD, 0x516D, 0xA4BB, - 0x516E, 0xA4BC, 0x5171, 0xA640, 0x5175, 0xA74C, 0x5176, 0xA8E4, - 0x5177, 0xA8E3, 0x5178, 0xA8E5, 0x517C, 0xADDD, 0x5180, 0xBEAC, - 0x5187, 0xC94E, 0x5189, 0xA554, 0x518A, 0xA555, 0x518D, 0xA641, - 0x518F, 0xCA6A, 0x5191, 0xAB60, 0x5192, 0xAB5F, 0x5193, 0xD0E0, - 0x5194, 0xD0DF, 0x5195, 0xB0C3, 0x5197, 0xA4BE, 0x5198, 0xC955, - 0x519E, 0xCBCD, 0x51A0, 0xAB61, 0x51A2, 0xADE0, 0x51A4, 0xADDE, - 0x51A5, 0xADDF, 0x51AA, 0xBEAD, 0x51AC, 0xA556, 0x51B0, 0xA642, - 0x51B1, 0xC9BC, 0x51B6, 0xA74D, 0x51B7, 0xA74E, 0x51B9, 0xCA6B, - 0x51BC, 0xCBCE, 0x51BD, 0xA8E6, 0x51BE, 0xCBCF, 0x51C4, 0xD0E2, - 0x51C5, 0xD0E3, 0x51C6, 0xADE3, 0x51C8, 0xD0E4, 0x51CA, 0xD0E1, - 0x51CB, 0xADE4, 0x51CC, 0xADE2, 0x51CD, 0xADE1, 0x51CE, 0xD0E5, - 0x51D0, 0xD468, 0x51D4, 0xD861, 0x51D7, 0xDCC5, 0x51D8, 0xE140, - 0x51DC, 0xBBFE, 0x51DD, 0xBEAE, 0x51DE, 0xE8F9, 0x51E0, 0xA44C, - 0x51E1, 0xA45A, 0x51F0, 0xB0C4, 0x51F1, 0xB3CD, 0x51F3, 0xB9B9, - 0x51F5, 0xC942, 0x51F6, 0xA4BF, 0x51F8, 0xA559, 0x51F9, 0xA557, - 0x51FA, 0xA558, 0x51FD, 0xA8E7, 0x5200, 0xA44D, 0x5201, 0xA44E, - 0x5203, 0xA462, 0x5206, 0xA4C0, 0x5207, 0xA4C1, 0x5208, 0xA4C2, - 0x5209, 0xC9BE, 0x520A, 0xA55A, 0x520C, 0xC96B, 0x520E, 0xA646, - 0x5210, 0xC9BF, 0x5211, 0xA644, 0x5212, 0xA645, 0x5213, 0xC9BD, - 0x5216, 0xA647, 0x5217, 0xA643, 0x521C, 0xCA6C, 0x521D, 0xAAEC, - 0x521E, 0xCA6D, 0x5221, 0xCA6E, 0x5224, 0xA750, 0x5225, 0xA74F, - 0x5228, 0xA753, 0x5229, 0xA751, 0x522A, 0xA752, 0x522E, 0xA8ED, - 0x5230, 0xA8EC, 0x5231, 0xCBD4, 0x5232, 0xCBD1, 0x5233, 0xCBD2, - 0x5235, 0xCBD0, 0x5236, 0xA8EE, 0x5237, 0xA8EA, 0x5238, 0xA8E9, - 0x523A, 0xA8EB, 0x523B, 0xA8E8, 0x5241, 0xA8EF, 0x5243, 0xAB63, - 0x5244, 0xCDF0, 0x5246, 0xCBD3, 0x5247, 0xAB68, 0x5249, 0xCDF1, - 0x524A, 0xAB64, 0x524B, 0xAB67, 0x524C, 0xAB66, 0x524D, 0xAB65, - 0x524E, 0xAB62, 0x5252, 0xD0E8, 0x5254, 0xADE7, 0x5255, 0xD0EB, - 0x5256, 0xADE5, 0x525A, 0xD0E7, 0x525B, 0xADE8, 0x525C, 0xADE6, - 0x525D, 0xADE9, 0x525E, 0xD0E9, 0x525F, 0xD0EA, 0x5261, 0xD0E6, - 0x5262, 0xD0EC, 0x5269, 0xB3D1, 0x526A, 0xB0C5, 0x526B, 0xD469, - 0x526C, 0xD46B, 0x526D, 0xD46A, 0x526E, 0xD46C, 0x526F, 0xB0C6, - 0x5272, 0xB3CE, 0x5274, 0xB3CF, 0x5275, 0xB3D0, 0x5277, 0xB6D0, - 0x5278, 0xDCC7, 0x527A, 0xDCC6, 0x527B, 0xDCC8, 0x527C, 0xDCC9, - 0x527D, 0xB6D1, 0x527F, 0xB6CF, 0x5280, 0xE141, 0x5281, 0xE142, - 0x5282, 0xB9BB, 0x5283, 0xB9BA, 0x5284, 0xE35A, 0x5287, 0xBC40, - 0x5288, 0xBC41, 0x5289, 0xBC42, 0x528A, 0xBC44, 0x528B, 0xE4F2, - 0x528C, 0xE4F3, 0x528D, 0xBC43, 0x5291, 0xBEAF, 0x5293, 0xBEB0, - 0x5296, 0xF1ED, 0x5297, 0xF5C3, 0x5298, 0xF5C2, 0x5299, 0xF7D1, - 0x529B, 0xA44F, 0x529F, 0xA55C, 0x52A0, 0xA55B, 0x52A3, 0xA648, - 0x52A6, 0xC9C0, 0x52A9, 0xA755, 0x52AA, 0xA756, 0x52AB, 0xA754, - 0x52AC, 0xA757, 0x52AD, 0xCA6F, 0x52AE, 0xCA70, 0x52BB, 0xA8F1, - 0x52BC, 0xCBD5, 0x52BE, 0xA8F0, 0x52C0, 0xCDF2, 0x52C1, 0xAB6C, - 0x52C2, 0xCDF3, 0x52C3, 0xAB6B, 0x52C7, 0xAB69, 0x52C9, 0xAB6A, - 0x52CD, 0xD0ED, 0x52D2, 0xB0C7, 0x52D3, 0xD46E, 0x52D5, 0xB0CA, - 0x52D6, 0xD46D, 0x52D7, 0xB1E5, 0x52D8, 0xB0C9, 0x52D9, 0xB0C8, - 0x52DB, 0xB3D4, 0x52DD, 0xB3D3, 0x52DE, 0xB3D2, 0x52DF, 0xB6D2, - 0x52E2, 0xB6D5, 0x52E3, 0xB6D6, 0x52E4, 0xB6D4, 0x52E6, 0xB6D3, - 0x52E9, 0xE143, 0x52EB, 0xE144, 0x52EF, 0xE4F5, 0x52F0, 0xBC45, - 0x52F1, 0xE4F4, 0x52F3, 0xBEB1, 0x52F4, 0xECBF, 0x52F5, 0xC079, - 0x52F7, 0xF1EE, 0x52F8, 0xC455, 0x52FA, 0xA463, 0x52FB, 0xA4C3, - 0x52FC, 0xC956, 0x52FE, 0xA4C4, 0x52FF, 0xA4C5, 0x5305, 0xA55D, - 0x5306, 0xA55E, 0x5308, 0xA649, 0x5309, 0xCA71, 0x530A, 0xCBD6, - 0x530B, 0xCBD7, 0x530D, 0xAB6D, 0x530E, 0xD0EE, 0x530F, 0xB0CC, - 0x5310, 0xB0CB, 0x5311, 0xD863, 0x5312, 0xD862, 0x5315, 0xA450, - 0x5316, 0xA4C6, 0x5317, 0xA55F, 0x5319, 0xB0CD, 0x531A, 0xC943, - 0x531C, 0xC96C, 0x531D, 0xA560, 0x531F, 0xC9C2, 0x5320, 0xA64B, - 0x5321, 0xA64A, 0x5322, 0xC9C1, 0x5323, 0xA758, 0x532A, 0xADEA, - 0x532D, 0xD46F, 0x532F, 0xB6D7, 0x5330, 0xE145, 0x5331, 0xB9BC, - 0x5334, 0xE8FA, 0x5337, 0xF3FD, 0x5339, 0xA4C7, 0x533C, 0xCBD8, - 0x533D, 0xCDF4, 0x533E, 0xB0D0, 0x533F, 0xB0CE, 0x5340, 0xB0CF, - 0x5341, 0xA2CC, 0x5341, 0xA451, 0x5343, 0xA464, 0x5344, 0xA2CD, - 0x5345, 0xA2CE, 0x5345, 0xA4CA, 0x5347, 0xA4C9, 0x5348, 0xA4C8, - 0x5349, 0xA563, 0x534A, 0xA562, 0x534C, 0xC96D, 0x534D, 0xC9C3, - 0x5351, 0xA8F5, 0x5352, 0xA8F2, 0x5353, 0xA8F4, 0x5354, 0xA8F3, - 0x5357, 0xAB6E, 0x535A, 0xB3D5, 0x535C, 0xA452, 0x535E, 0xA4CB, - 0x5360, 0xA565, 0x5361, 0xA564, 0x5363, 0xCA72, 0x5366, 0xA8F6, - 0x536C, 0xC957, 0x536E, 0xA567, 0x536F, 0xA566, 0x5370, 0xA64C, - 0x5371, 0xA64D, 0x5372, 0xCA73, 0x5373, 0xA759, 0x5375, 0xA75A, - 0x5377, 0xA8F7, 0x5378, 0xA8F8, 0x5379, 0xA8F9, 0x537B, 0xAB6F, - 0x537C, 0xCDF5, 0x537F, 0xADEB, 0x5382, 0xC944, 0x5384, 0xA4CC, - 0x538A, 0xC9C4, 0x538E, 0xCA74, 0x538F, 0xCA75, 0x5392, 0xCBD9, - 0x5394, 0xCBDA, 0x5396, 0xCDF7, 0x5397, 0xCDF6, 0x5398, 0xCDF9, - 0x5399, 0xCDF8, 0x539A, 0xAB70, 0x539C, 0xD470, 0x539D, 0xADED, - 0x539E, 0xD0EF, 0x539F, 0xADEC, 0x53A4, 0xD864, 0x53A5, 0xB3D6, - 0x53A7, 0xD865, 0x53AC, 0xE146, 0x53AD, 0xB9BD, 0x53B2, 0xBC46, - 0x53B4, 0xF1EF, 0x53B9, 0xC958, 0x53BB, 0xA568, 0x53C3, 0xB0D1, - 0x53C8, 0xA453, 0x53C9, 0xA465, 0x53CA, 0xA4CE, 0x53CB, 0xA4CD, - 0x53CD, 0xA4CF, 0x53D4, 0xA8FB, 0x53D6, 0xA8FA, 0x53D7, 0xA8FC, - 0x53DB, 0xAB71, 0x53DF, 0xADEE, 0x53E1, 0xE8FB, 0x53E2, 0xC24F, - 0x53E3, 0xA466, 0x53E4, 0xA56A, 0x53E5, 0xA579, 0x53E6, 0xA574, - 0x53E8, 0xA56F, 0x53E9, 0xA56E, 0x53EA, 0xA575, 0x53EB, 0xA573, - 0x53EC, 0xA56C, 0x53ED, 0xA57A, 0x53EE, 0xA56D, 0x53EF, 0xA569, - 0x53F0, 0xA578, 0x53F1, 0xA577, 0x53F2, 0xA576, 0x53F3, 0xA56B, - 0x53F5, 0xA572, 0x53F8, 0xA571, 0x53FB, 0xA57B, 0x53FC, 0xA570, - 0x5401, 0xA653, 0x5403, 0xA659, 0x5404, 0xA655, 0x5406, 0xA65B, - 0x5407, 0xC9C5, 0x5408, 0xA658, 0x5409, 0xA64E, 0x540A, 0xA651, - 0x540B, 0xA654, 0x540C, 0xA650, 0x540D, 0xA657, 0x540E, 0xA65A, - 0x540F, 0xA64F, 0x5410, 0xA652, 0x5411, 0xA656, 0x5412, 0xA65C, - 0x5418, 0xCA7E, 0x5419, 0xCA7B, 0x541B, 0xA767, 0x541C, 0xCA7C, - 0x541D, 0xA75B, 0x541E, 0xA75D, 0x541F, 0xA775, 0x5420, 0xA770, - 0x5424, 0xCAA5, 0x5425, 0xCA7D, 0x5426, 0xA75F, 0x5427, 0xA761, - 0x5428, 0xCAA4, 0x5429, 0xA768, 0x542A, 0xCA78, 0x542B, 0xA774, - 0x542C, 0xA776, 0x542D, 0xA75C, 0x542E, 0xA76D, 0x5430, 0xCA76, - 0x5431, 0xA773, 0x5433, 0xA764, 0x5435, 0xA76E, 0x5436, 0xA76F, - 0x5437, 0xCA77, 0x5438, 0xA76C, 0x5439, 0xA76A, 0x543B, 0xA76B, - 0x543C, 0xA771, 0x543D, 0xCAA1, 0x543E, 0xA75E, 0x5440, 0xA772, - 0x5441, 0xCAA3, 0x5442, 0xA766, 0x5443, 0xA763, 0x5445, 0xCA7A, - 0x5446, 0xA762, 0x5447, 0xCAA6, 0x5448, 0xA765, 0x544A, 0xA769, - 0x544E, 0xA760, 0x544F, 0xCAA2, 0x5454, 0xCA79, 0x5460, 0xCBEB, - 0x5461, 0xCBEA, 0x5462, 0xA94F, 0x5463, 0xCBED, 0x5464, 0xCBEF, - 0x5465, 0xCBE4, 0x5466, 0xCBE7, 0x5467, 0xCBEE, 0x5468, 0xA950, - 0x546B, 0xCBE1, 0x546C, 0xCBE5, 0x546F, 0xCBE9, 0x5470, 0xCE49, - 0x5471, 0xA94B, 0x5472, 0xCE4D, 0x5473, 0xA8FD, 0x5474, 0xCBE6, - 0x5475, 0xA8FE, 0x5476, 0xA94C, 0x5477, 0xA945, 0x5478, 0xA941, - 0x547A, 0xCBE2, 0x547B, 0xA944, 0x547C, 0xA949, 0x547D, 0xA952, - 0x547E, 0xCBE3, 0x547F, 0xCBDC, 0x5480, 0xA943, 0x5481, 0xCBDD, - 0x5482, 0xCBDF, 0x5484, 0xA946, 0x5486, 0xA948, 0x5487, 0xCBDB, - 0x5488, 0xCBE0, 0x548B, 0xA951, 0x548C, 0xA94D, 0x548D, 0xCBE8, - 0x548E, 0xA953, 0x5490, 0xA94A, 0x5491, 0xCBDE, 0x5492, 0xA947, - 0x5495, 0xA942, 0x5496, 0xA940, 0x5498, 0xCBEC, 0x549A, 0xA94E, - 0x54A0, 0xCE48, 0x54A1, 0xCDFB, 0x54A2, 0xCE4B, 0x54A5, 0xCDFD, - 0x54A6, 0xAB78, 0x54A7, 0xABA8, 0x54A8, 0xAB74, 0x54A9, 0xABA7, - 0x54AA, 0xAB7D, 0x54AB, 0xABA4, 0x54AC, 0xAB72, 0x54AD, 0xCDFC, - 0x54AE, 0xCE43, 0x54AF, 0xABA3, 0x54B0, 0xCE4F, 0x54B1, 0xABA5, - 0x54B3, 0xAB79, 0x54B6, 0xCE45, 0x54B7, 0xCE42, 0x54B8, 0xAB77, - 0x54BA, 0xCDFA, 0x54BB, 0xABA6, 0x54BC, 0xCE4A, 0x54BD, 0xAB7C, - 0x54BE, 0xCE4C, 0x54BF, 0xABA9, 0x54C0, 0xAB73, 0x54C1, 0xAB7E, - 0x54C2, 0xAB7B, 0x54C3, 0xCE40, 0x54C4, 0xABA1, 0x54C5, 0xCE46, - 0x54C6, 0xCE47, 0x54C7, 0xAB7A, 0x54C8, 0xABA2, 0x54C9, 0xAB76, - 0x54CE, 0xAB75, 0x54CF, 0xCDFE, 0x54D6, 0xCE44, 0x54DE, 0xCE4E, - 0x54E0, 0xD144, 0x54E1, 0xADFB, 0x54E2, 0xD0F1, 0x54E4, 0xD0F6, - 0x54E5, 0xADF4, 0x54E6, 0xAE40, 0x54E7, 0xD0F4, 0x54E8, 0xADEF, - 0x54E9, 0xADF9, 0x54EA, 0xADFE, 0x54EB, 0xD0FB, 0x54ED, 0xADFA, - 0x54EE, 0xADFD, 0x54F1, 0xD0FE, 0x54F2, 0xADF5, 0x54F3, 0xD0F5, - 0x54F7, 0xD142, 0x54F8, 0xD143, 0x54FA, 0xADF7, 0x54FB, 0xD141, - 0x54FC, 0xADF3, 0x54FD, 0xAE43, 0x54FF, 0xD0F8, 0x5501, 0xADF1, - 0x5503, 0xD146, 0x5504, 0xD0F9, 0x5505, 0xD0FD, 0x5506, 0xADF6, - 0x5507, 0xAE42, 0x5508, 0xD0FA, 0x5509, 0xADFC, 0x550A, 0xD140, - 0x550B, 0xD147, 0x550C, 0xD4A1, 0x550E, 0xD145, 0x550F, 0xAE44, - 0x5510, 0xADF0, 0x5511, 0xD0FC, 0x5512, 0xD0F3, 0x5514, 0xADF8, - 0x5517, 0xD0F2, 0x551A, 0xD0F7, 0x5526, 0xD0F0, 0x5527, 0xAE41, - 0x552A, 0xD477, 0x552C, 0xB0E4, 0x552D, 0xD4A7, 0x552E, 0xB0E2, - 0x552F, 0xB0DF, 0x5530, 0xD47C, 0x5531, 0xB0DB, 0x5532, 0xD4A2, - 0x5533, 0xB0E6, 0x5534, 0xD476, 0x5535, 0xD47B, 0x5536, 0xD47A, - 0x5537, 0xADF2, 0x5538, 0xB0E1, 0x5539, 0xD4A5, 0x553B, 0xD4A8, - 0x553C, 0xD473, 0x553E, 0xB3E8, 0x5540, 0xD4A9, 0x5541, 0xB0E7, - 0x5543, 0xB0D9, 0x5544, 0xB0D6, 0x5545, 0xD47E, 0x5546, 0xB0D3, - 0x5548, 0xD4A6, 0x554A, 0xB0DA, 0x554B, 0xD4AA, 0x554D, 0xD474, - 0x554E, 0xD4A4, 0x554F, 0xB0DD, 0x5550, 0xD475, 0x5551, 0xD478, - 0x5552, 0xD47D, 0x5555, 0xB0DE, 0x5556, 0xB0DC, 0x5557, 0xB0E8, - 0x555C, 0xB0E3, 0x555E, 0xB0D7, 0x555F, 0xB1D2, 0x5561, 0xB0D8, - 0x5562, 0xD479, 0x5563, 0xB0E5, 0x5564, 0xB0E0, 0x5565, 0xD4A3, - 0x5566, 0xB0D5, 0x556A, 0xB0D4, 0x5575, 0xD471, 0x5576, 0xD472, - 0x5577, 0xD86A, 0x557B, 0xB3D7, 0x557C, 0xB3DA, 0x557D, 0xD875, - 0x557E, 0xB3EE, 0x557F, 0xD878, 0x5580, 0xB3D8, 0x5581, 0xD871, - 0x5582, 0xB3DE, 0x5583, 0xB3E4, 0x5584, 0xB5BD, 0x5587, 0xB3E2, - 0x5588, 0xD86E, 0x5589, 0xB3EF, 0x558A, 0xB3DB, 0x558B, 0xB3E3, - 0x558C, 0xD876, 0x558D, 0xDCD7, 0x558E, 0xD87B, 0x558F, 0xD86F, - 0x5591, 0xD866, 0x5592, 0xD873, 0x5593, 0xD86D, 0x5594, 0xB3E1, - 0x5595, 0xD879, 0x5598, 0xB3DD, 0x5599, 0xB3F1, 0x559A, 0xB3EA, - 0x559C, 0xB3DF, 0x559D, 0xB3DC, 0x559F, 0xB3E7, 0x55A1, 0xD87A, - 0x55A2, 0xD86C, 0x55A3, 0xD872, 0x55A4, 0xD874, 0x55A5, 0xD868, - 0x55A6, 0xD877, 0x55A7, 0xB3D9, 0x55A8, 0xD867, 0x55AA, 0xB3E0, - 0x55AB, 0xB3F0, 0x55AC, 0xB3EC, 0x55AD, 0xD869, 0x55AE, 0xB3E6, - 0x55B1, 0xB3ED, 0x55B2, 0xB3E9, 0x55B3, 0xB3E5, 0x55B5, 0xD870, - 0x55BB, 0xB3EB, 0x55BF, 0xDCD5, 0x55C0, 0xDCD1, 0x55C2, 0xDCE0, - 0x55C3, 0xDCCA, 0x55C4, 0xDCD3, 0x55C5, 0xB6E5, 0x55C6, 0xB6E6, - 0x55C7, 0xB6DE, 0x55C8, 0xDCDC, 0x55C9, 0xB6E8, 0x55CA, 0xDCCF, - 0x55CB, 0xDCCE, 0x55CC, 0xDCCC, 0x55CD, 0xDCDE, 0x55CE, 0xB6DC, - 0x55CF, 0xDCD8, 0x55D0, 0xDCCD, 0x55D1, 0xB6DF, 0x55D2, 0xDCD6, - 0x55D3, 0xB6DA, 0x55D4, 0xDCD2, 0x55D5, 0xDCD9, 0x55D6, 0xDCDB, - 0x55D9, 0xDCDF, 0x55DA, 0xB6E3, 0x55DB, 0xDCCB, 0x55DC, 0xB6DD, - 0x55DD, 0xDCD0, 0x55DF, 0xB6D8, 0x55E1, 0xB6E4, 0x55E2, 0xDCDA, - 0x55E3, 0xB6E0, 0x55E4, 0xB6E1, 0x55E5, 0xB6E7, 0x55E6, 0xB6DB, - 0x55E7, 0xA25F, 0x55E8, 0xB6D9, 0x55E9, 0xDCD4, 0x55EF, 0xB6E2, - 0x55F2, 0xDCDD, 0x55F6, 0xB9CD, 0x55F7, 0xB9C8, 0x55F9, 0xE155, - 0x55FA, 0xE151, 0x55FC, 0xE14B, 0x55FD, 0xB9C2, 0x55FE, 0xB9BE, - 0x55FF, 0xE154, 0x5600, 0xB9BF, 0x5601, 0xE14E, 0x5602, 0xE150, - 0x5604, 0xE153, 0x5606, 0xB9C4, 0x5608, 0xB9CB, 0x5609, 0xB9C5, - 0x560C, 0xE149, 0x560D, 0xB9C6, 0x560E, 0xB9C7, 0x560F, 0xE14C, - 0x5610, 0xB9CC, 0x5612, 0xE14A, 0x5613, 0xE14F, 0x5614, 0xB9C3, - 0x5615, 0xE148, 0x5616, 0xB9C9, 0x5617, 0xB9C1, 0x561B, 0xB9C0, - 0x561C, 0xE14D, 0x561D, 0xE152, 0x561F, 0xB9CA, 0x5627, 0xE147, - 0x5629, 0xBC4D, 0x562A, 0xE547, 0x562C, 0xE544, 0x562E, 0xBC47, - 0x562F, 0xBC53, 0x5630, 0xBC54, 0x5632, 0xBC4A, 0x5633, 0xE542, - 0x5634, 0xBC4C, 0x5635, 0xE4F9, 0x5636, 0xBC52, 0x5638, 0xE546, - 0x5639, 0xBC49, 0x563A, 0xE548, 0x563B, 0xBC48, 0x563D, 0xE543, - 0x563E, 0xE545, 0x563F, 0xBC4B, 0x5640, 0xE541, 0x5641, 0xE4FA, - 0x5642, 0xE4F7, 0x5645, 0xD86B, 0x5646, 0xE4FD, 0x5648, 0xE4F6, - 0x5649, 0xE4FC, 0x564A, 0xE4FB, 0x564C, 0xE4F8, 0x564E, 0xBC4F, - 0x5653, 0xBC4E, 0x5657, 0xBC50, 0x5658, 0xE4FE, 0x5659, 0xBEB2, - 0x565A, 0xE540, 0x565E, 0xE945, 0x5660, 0xE8FD, 0x5662, 0xBEBE, - 0x5663, 0xE942, 0x5664, 0xBEB6, 0x5665, 0xBEBA, 0x5666, 0xE941, - 0x5668, 0xBEB9, 0x5669, 0xBEB5, 0x566A, 0xBEB8, 0x566B, 0xBEB3, - 0x566C, 0xBEBD, 0x566D, 0xE943, 0x566E, 0xE8FE, 0x566F, 0xBEBC, - 0x5670, 0xE8FC, 0x5671, 0xBEBB, 0x5672, 0xE944, 0x5673, 0xE940, - 0x5674, 0xBC51, 0x5676, 0xBEBF, 0x5677, 0xE946, 0x5678, 0xBEB7, - 0x5679, 0xBEB4, 0x567E, 0xECC6, 0x567F, 0xECC8, 0x5680, 0xC07B, - 0x5681, 0xECC9, 0x5682, 0xECC7, 0x5683, 0xECC5, 0x5684, 0xECC4, - 0x5685, 0xC07D, 0x5686, 0xECC3, 0x5687, 0xC07E, 0x568C, 0xECC1, - 0x568D, 0xECC2, 0x568E, 0xC07A, 0x568F, 0xC0A1, 0x5690, 0xC07C, - 0x5693, 0xECC0, 0x5695, 0xC250, 0x5697, 0xEFBC, 0x5698, 0xEFBA, - 0x5699, 0xEFBF, 0x569A, 0xEFBD, 0x569C, 0xEFBB, 0x569D, 0xEFBE, - 0x56A5, 0xC360, 0x56A6, 0xF1F2, 0x56A7, 0xF1F3, 0x56A8, 0xC456, - 0x56AA, 0xF1F4, 0x56AB, 0xF1F0, 0x56AC, 0xF1F5, 0x56AD, 0xF1F1, - 0x56AE, 0xC251, 0x56B2, 0xF3FE, 0x56B3, 0xF441, 0x56B4, 0xC459, - 0x56B5, 0xF440, 0x56B6, 0xC458, 0x56B7, 0xC457, 0x56BC, 0xC45A, - 0x56BD, 0xF5C5, 0x56BE, 0xF5C6, 0x56C0, 0xC4DA, 0x56C1, 0xC4D9, - 0x56C2, 0xC4DB, 0x56C3, 0xF5C4, 0x56C5, 0xF6D8, 0x56C6, 0xF6D7, - 0x56C8, 0xC56D, 0x56C9, 0xC56F, 0x56CA, 0xC56E, 0x56CB, 0xF6D9, - 0x56CC, 0xC5C8, 0x56CD, 0xF8A6, 0x56D1, 0xC5F1, 0x56D3, 0xF8A5, - 0x56D4, 0xF8EE, 0x56D7, 0xC949, 0x56DA, 0xA57D, 0x56DB, 0xA57C, - 0x56DD, 0xA65F, 0x56DE, 0xA65E, 0x56DF, 0xC9C7, 0x56E0, 0xA65D, - 0x56E1, 0xC9C6, 0x56E4, 0xA779, 0x56E5, 0xCAA9, 0x56E7, 0xCAA8, - 0x56EA, 0xA777, 0x56EB, 0xA77A, 0x56EE, 0xCAA7, 0x56F0, 0xA778, - 0x56F7, 0xCBF0, 0x56F9, 0xCBF1, 0x56FA, 0xA954, 0x56FF, 0xABAA, - 0x5701, 0xD148, 0x5702, 0xD149, 0x5703, 0xAE45, 0x5704, 0xAE46, - 0x5707, 0xD4AC, 0x5708, 0xB0E9, 0x5709, 0xB0EB, 0x570A, 0xD4AB, - 0x570B, 0xB0EA, 0x570C, 0xD87C, 0x570D, 0xB3F2, 0x5712, 0xB6E9, - 0x5713, 0xB6EA, 0x5714, 0xDCE1, 0x5716, 0xB9CF, 0x5718, 0xB9CE, - 0x571A, 0xE549, 0x571B, 0xE948, 0x571C, 0xE947, 0x571E, 0xF96B, - 0x571F, 0xA467, 0x5720, 0xC959, 0x5722, 0xC96E, 0x5723, 0xC96F, - 0x5728, 0xA662, 0x5729, 0xA666, 0x572A, 0xC9C9, 0x572C, 0xA664, - 0x572D, 0xA663, 0x572E, 0xC9C8, 0x572F, 0xA665, 0x5730, 0xA661, - 0x5733, 0xA660, 0x5734, 0xC9CA, 0x573B, 0xA7A6, 0x573E, 0xA7A3, - 0x5740, 0xA77D, 0x5741, 0xCAAA, 0x5745, 0xCAAB, 0x5747, 0xA7A1, - 0x5749, 0xCAAD, 0x574A, 0xA77B, 0x574B, 0xCAAE, 0x574C, 0xCAAC, - 0x574D, 0xA77E, 0x574E, 0xA7A2, 0x574F, 0xA7A5, 0x5750, 0xA7A4, - 0x5751, 0xA77C, 0x5752, 0xCAAF, 0x5761, 0xA959, 0x5762, 0xCBFE, - 0x5764, 0xA95B, 0x5766, 0xA95A, 0x5768, 0xCC40, 0x5769, 0xA958, - 0x576A, 0xA957, 0x576B, 0xCBF5, 0x576D, 0xCBF4, 0x576F, 0xCBF2, - 0x5770, 0xCBF7, 0x5771, 0xCBF6, 0x5772, 0xCBF3, 0x5773, 0xCBFC, - 0x5774, 0xCBFD, 0x5775, 0xCBFA, 0x5776, 0xCBF8, 0x5777, 0xA956, - 0x577B, 0xCBFB, 0x577C, 0xA95C, 0x577D, 0xCC41, 0x5780, 0xCBF9, - 0x5782, 0xABAB, 0x5783, 0xA955, 0x578B, 0xABAC, 0x578C, 0xCE54, - 0x578F, 0xCE5A, 0x5793, 0xABB2, 0x5794, 0xCE58, 0x5795, 0xCE5E, - 0x5797, 0xCE55, 0x5798, 0xCE59, 0x5799, 0xCE5B, 0x579A, 0xCE5D, - 0x579B, 0xCE57, 0x579D, 0xCE56, 0x579E, 0xCE51, 0x579F, 0xCE52, - 0x57A0, 0xABAD, 0x57A2, 0xABAF, 0x57A3, 0xABAE, 0x57A4, 0xCE53, - 0x57A5, 0xCE5C, 0x57AE, 0xABB1, 0x57B5, 0xCE50, 0x57B6, 0xD153, - 0x57B8, 0xD152, 0x57B9, 0xD157, 0x57BA, 0xD14E, 0x57BC, 0xD151, - 0x57BD, 0xD150, 0x57BF, 0xD154, 0x57C1, 0xD158, 0x57C2, 0xAE47, - 0x57C3, 0xAE4A, 0x57C6, 0xD14F, 0x57C7, 0xD155, 0x57CB, 0xAE49, - 0x57CC, 0xD14A, 0x57CE, 0xABB0, 0x57CF, 0xD4BA, 0x57D0, 0xD156, - 0x57D2, 0xD14D, 0x57D4, 0xAE48, 0x57D5, 0xD14C, 0x57DC, 0xD4B1, - 0x57DF, 0xB0EC, 0x57E0, 0xB0F0, 0x57E1, 0xD4C1, 0x57E2, 0xD4AF, - 0x57E3, 0xD4BD, 0x57E4, 0xB0F1, 0x57E5, 0xD4BF, 0x57E7, 0xD4C5, - 0x57E9, 0xD4C9, 0x57EC, 0xD4C0, 0x57ED, 0xD4B4, 0x57EE, 0xD4BC, - 0x57F0, 0xD4CA, 0x57F1, 0xD4C8, 0x57F2, 0xD4BE, 0x57F3, 0xD4B9, - 0x57F4, 0xD4B2, 0x57F5, 0xD8A6, 0x57F6, 0xD4B0, 0x57F7, 0xB0F5, - 0x57F8, 0xD4B7, 0x57F9, 0xB0F6, 0x57FA, 0xB0F2, 0x57FB, 0xD4AD, - 0x57FC, 0xD4C3, 0x57FD, 0xD4B5, 0x5800, 0xD4B3, 0x5801, 0xD4C6, - 0x5802, 0xB0F3, 0x5804, 0xD4CC, 0x5805, 0xB0ED, 0x5806, 0xB0EF, - 0x5807, 0xD4BB, 0x5808, 0xD4B6, 0x5809, 0xAE4B, 0x580A, 0xB0EE, - 0x580B, 0xD4B8, 0x580C, 0xD4C7, 0x580D, 0xD4CB, 0x580E, 0xD4C2, - 0x5810, 0xD4C4, 0x5814, 0xD4AE, 0x5819, 0xD8A1, 0x581B, 0xD8AA, - 0x581C, 0xD8A9, 0x581D, 0xB3FA, 0x581E, 0xD8A2, 0x5820, 0xB3FB, - 0x5821, 0xB3F9, 0x5823, 0xD8A4, 0x5824, 0xB3F6, 0x5825, 0xD8A8, - 0x5827, 0xD8A3, 0x5828, 0xD8A5, 0x5829, 0xD87D, 0x582A, 0xB3F4, - 0x582C, 0xD8B2, 0x582D, 0xD8B1, 0x582E, 0xD8AE, 0x582F, 0xB3F3, - 0x5830, 0xB3F7, 0x5831, 0xB3F8, 0x5832, 0xD14B, 0x5833, 0xD8AB, - 0x5834, 0xB3F5, 0x5835, 0xB0F4, 0x5836, 0xD8AD, 0x5837, 0xD87E, - 0x5838, 0xD8B0, 0x5839, 0xD8AF, 0x583B, 0xD8B3, 0x583D, 0xDCEF, - 0x583F, 0xD8AC, 0x5848, 0xD8A7, 0x5849, 0xDCE7, 0x584A, 0xB6F4, - 0x584B, 0xB6F7, 0x584C, 0xB6F2, 0x584D, 0xDCE6, 0x584E, 0xDCEA, - 0x584F, 0xDCE5, 0x5851, 0xB6EC, 0x5852, 0xB6F6, 0x5853, 0xDCE2, - 0x5854, 0xB6F0, 0x5855, 0xDCE9, 0x5857, 0xB6EE, 0x5858, 0xB6ED, - 0x5859, 0xDCEC, 0x585A, 0xB6EF, 0x585B, 0xDCEE, 0x585D, 0xDCEB, - 0x585E, 0xB6EB, 0x5862, 0xB6F5, 0x5863, 0xDCF0, 0x5864, 0xDCE4, - 0x5865, 0xDCED, 0x5868, 0xDCE3, 0x586B, 0xB6F1, 0x586D, 0xB6F3, - 0x586F, 0xDCE8, 0x5871, 0xDCF1, 0x5874, 0xE15D, 0x5875, 0xB9D0, - 0x5876, 0xE163, 0x5879, 0xB9D5, 0x587A, 0xE15F, 0x587B, 0xE166, - 0x587C, 0xE157, 0x587D, 0xB9D7, 0x587E, 0xB9D1, 0x587F, 0xE15C, - 0x5880, 0xBC55, 0x5881, 0xE15B, 0x5882, 0xE164, 0x5883, 0xB9D2, - 0x5885, 0xB9D6, 0x5886, 0xE15A, 0x5887, 0xE160, 0x5888, 0xE165, - 0x5889, 0xE156, 0x588A, 0xB9D4, 0x588B, 0xE15E, 0x588E, 0xE162, - 0x588F, 0xE168, 0x5890, 0xE158, 0x5891, 0xE161, 0x5893, 0xB9D3, - 0x5894, 0xE167, 0x5898, 0xE159, 0x589C, 0xBC59, 0x589D, 0xE54B, - 0x589E, 0xBC57, 0x589F, 0xBC56, 0x58A0, 0xE54D, 0x58A1, 0xE552, - 0x58A3, 0xE54E, 0x58A5, 0xE551, 0x58A6, 0xBC5C, 0x58A8, 0xBEA5, - 0x58A9, 0xBC5B, 0x58AB, 0xE54A, 0x58AC, 0xE550, 0x58AE, 0xBC5A, - 0x58AF, 0xE54F, 0x58B1, 0xE54C, 0x58B3, 0xBC58, 0x58BA, 0xE94D, - 0x58BB, 0xF9D9, 0x58BC, 0xE94F, 0x58BD, 0xE94A, 0x58BE, 0xBEC1, - 0x58BF, 0xE94C, 0x58C1, 0xBEC0, 0x58C2, 0xE94E, 0x58C5, 0xBEC3, - 0x58C6, 0xE950, 0x58C7, 0xBEC2, 0x58C8, 0xE949, 0x58C9, 0xE94B, - 0x58CE, 0xC0A5, 0x58CF, 0xECCC, 0x58D1, 0xC0A4, 0x58D2, 0xECCD, - 0x58D3, 0xC0A3, 0x58D4, 0xECCB, 0x58D5, 0xC0A2, 0x58D6, 0xECCA, - 0x58D8, 0xC253, 0x58D9, 0xC252, 0x58DA, 0xF1F6, 0x58DB, 0xF1F8, - 0x58DD, 0xF1F7, 0x58DE, 0xC361, 0x58DF, 0xC362, 0x58E2, 0xC363, - 0x58E3, 0xF442, 0x58E4, 0xC45B, 0x58E7, 0xF7D3, 0x58E8, 0xF7D2, - 0x58E9, 0xC5F2, 0x58EB, 0xA468, 0x58EC, 0xA4D0, 0x58EF, 0xA7A7, - 0x58F4, 0xCE5F, 0x58F9, 0xB3FC, 0x58FA, 0xB3FD, 0x58FC, 0xDCF2, - 0x58FD, 0xB9D8, 0x58FE, 0xE169, 0x58FF, 0xE553, 0x5903, 0xC95A, - 0x5906, 0xCAB0, 0x590C, 0xCC42, 0x590D, 0xCE60, 0x590E, 0xD159, - 0x590F, 0xAE4C, 0x5912, 0xF1F9, 0x5914, 0xC4DC, 0x5915, 0xA469, - 0x5916, 0xA57E, 0x5917, 0xC970, 0x5919, 0xA667, 0x591A, 0xA668, - 0x591C, 0xA95D, 0x5920, 0xB0F7, 0x5922, 0xB9DA, 0x5924, 0xB9DB, - 0x5925, 0xB9D9, 0x5927, 0xA46A, 0x5929, 0xA4D1, 0x592A, 0xA4D3, - 0x592B, 0xA4D2, 0x592C, 0xC95B, 0x592D, 0xA4D4, 0x592E, 0xA5A1, - 0x592F, 0xC971, 0x5931, 0xA5A2, 0x5937, 0xA669, 0x5938, 0xA66A, - 0x593C, 0xC9CB, 0x593E, 0xA7A8, 0x5940, 0xCAB1, 0x5944, 0xA961, - 0x5945, 0xCC43, 0x5947, 0xA95F, 0x5948, 0xA960, 0x5949, 0xA95E, - 0x594A, 0xD15A, 0x594E, 0xABB6, 0x594F, 0xABB5, 0x5950, 0xABB7, - 0x5951, 0xABB4, 0x5953, 0xCE61, 0x5954, 0xA962, 0x5955, 0xABB3, - 0x5957, 0xAE4D, 0x5958, 0xAE4E, 0x595A, 0xAE4F, 0x595C, 0xD4CD, - 0x5960, 0xB3FE, 0x5961, 0xD8B4, 0x5962, 0xB0F8, 0x5967, 0xB6F8, - 0x5969, 0xB9DD, 0x596A, 0xB9DC, 0x596B, 0xE16A, 0x596D, 0xBC5D, - 0x596E, 0xBEC4, 0x5970, 0xEFC0, 0x5971, 0xF6DA, 0x5972, 0xF7D4, - 0x5973, 0xA46B, 0x5974, 0xA5A3, 0x5976, 0xA5A4, 0x5977, 0xC9D1, - 0x5978, 0xA66C, 0x5979, 0xA66F, 0x597B, 0xC9CF, 0x597C, 0xC9CD, - 0x597D, 0xA66E, 0x597E, 0xC9D0, 0x597F, 0xC9D2, 0x5980, 0xC9CC, - 0x5981, 0xA671, 0x5982, 0xA670, 0x5983, 0xA66D, 0x5984, 0xA66B, - 0x5985, 0xC9CE, 0x598A, 0xA7B3, 0x598D, 0xA7B0, 0x598E, 0xCAB6, - 0x598F, 0xCAB9, 0x5990, 0xCAB8, 0x5992, 0xA7AA, 0x5993, 0xA7B2, - 0x5996, 0xA7AF, 0x5997, 0xCAB5, 0x5998, 0xCAB3, 0x5999, 0xA7AE, - 0x599D, 0xA7A9, 0x599E, 0xA7AC, 0x59A0, 0xCAB4, 0x59A1, 0xCABB, - 0x59A2, 0xCAB7, 0x59A3, 0xA7AD, 0x59A4, 0xA7B1, 0x59A5, 0xA7B4, - 0x59A6, 0xCAB2, 0x59A7, 0xCABA, 0x59A8, 0xA7AB, 0x59AE, 0xA967, - 0x59AF, 0xA96F, 0x59B1, 0xCC4F, 0x59B2, 0xCC48, 0x59B3, 0xA970, - 0x59B4, 0xCC53, 0x59B5, 0xCC44, 0x59B6, 0xCC4B, 0x59B9, 0xA966, - 0x59BA, 0xCC45, 0x59BB, 0xA964, 0x59BC, 0xCC4C, 0x59BD, 0xCC50, - 0x59BE, 0xA963, 0x59C0, 0xCC51, 0x59C1, 0xCC4A, 0x59C3, 0xCC4D, - 0x59C5, 0xA972, 0x59C6, 0xA969, 0x59C7, 0xCC54, 0x59C8, 0xCC52, - 0x59CA, 0xA96E, 0x59CB, 0xA96C, 0x59CC, 0xCC49, 0x59CD, 0xA96B, - 0x59CE, 0xCC47, 0x59CF, 0xCC46, 0x59D0, 0xA96A, 0x59D1, 0xA968, - 0x59D2, 0xA971, 0x59D3, 0xA96D, 0x59D4, 0xA965, 0x59D6, 0xCC4E, - 0x59D8, 0xABB9, 0x59DA, 0xABC0, 0x59DB, 0xCE6F, 0x59DC, 0xABB8, - 0x59DD, 0xCE67, 0x59DE, 0xCE63, 0x59E0, 0xCE73, 0x59E1, 0xCE62, - 0x59E3, 0xABBB, 0x59E4, 0xCE6C, 0x59E5, 0xABBE, 0x59E6, 0xABC1, - 0x59E8, 0xABBC, 0x59E9, 0xCE70, 0x59EA, 0xABBF, 0x59EC, 0xAE56, - 0x59ED, 0xCE76, 0x59EE, 0xCE64, 0x59F1, 0xCE66, 0x59F2, 0xCE6D, - 0x59F3, 0xCE71, 0x59F4, 0xCE75, 0x59F5, 0xCE72, 0x59F6, 0xCE6B, - 0x59F7, 0xCE6E, 0x59FA, 0xCE68, 0x59FB, 0xABC3, 0x59FC, 0xCE6A, - 0x59FD, 0xCE69, 0x59FE, 0xCE74, 0x59FF, 0xABBA, 0x5A00, 0xCE65, - 0x5A01, 0xABC2, 0x5A03, 0xABBD, 0x5A09, 0xAE5C, 0x5A0A, 0xD162, - 0x5A0C, 0xAE5B, 0x5A0F, 0xD160, 0x5A11, 0xAE50, 0x5A13, 0xAE55, - 0x5A15, 0xD15F, 0x5A16, 0xD15C, 0x5A17, 0xD161, 0x5A18, 0xAE51, - 0x5A19, 0xD15B, 0x5A1B, 0xAE54, 0x5A1C, 0xAE52, 0x5A1E, 0xD163, - 0x5A1F, 0xAE53, 0x5A20, 0xAE57, 0x5A23, 0xAE58, 0x5A25, 0xAE5A, - 0x5A29, 0xAE59, 0x5A2D, 0xD15D, 0x5A2E, 0xD15E, 0x5A33, 0xD164, - 0x5A35, 0xD4D4, 0x5A36, 0xB0F9, 0x5A37, 0xD8C2, 0x5A38, 0xD4D3, - 0x5A39, 0xD4E6, 0x5A3C, 0xB140, 0x5A3E, 0xD4E4, 0x5A40, 0xB0FE, - 0x5A41, 0xB0FA, 0x5A42, 0xD4ED, 0x5A43, 0xD4DD, 0x5A44, 0xD4E0, - 0x5A46, 0xB143, 0x5A47, 0xD4EA, 0x5A48, 0xD4E2, 0x5A49, 0xB0FB, - 0x5A4A, 0xB144, 0x5A4C, 0xD4E7, 0x5A4D, 0xD4E5, 0x5A50, 0xD4D6, - 0x5A51, 0xD4EB, 0x5A52, 0xD4DF, 0x5A53, 0xD4DA, 0x5A55, 0xD4D0, - 0x5A56, 0xD4EC, 0x5A57, 0xD4DC, 0x5A58, 0xD4CF, 0x5A5A, 0xB142, - 0x5A5B, 0xD4E1, 0x5A5C, 0xD4EE, 0x5A5D, 0xD4DE, 0x5A5E, 0xD4D2, - 0x5A5F, 0xD4D7, 0x5A60, 0xD4CE, 0x5A62, 0xB141, 0x5A64, 0xD4DB, - 0x5A65, 0xD4D8, 0x5A66, 0xB0FC, 0x5A67, 0xD4D1, 0x5A69, 0xD4E9, - 0x5A6A, 0xB0FD, 0x5A6C, 0xD4D9, 0x5A6D, 0xD4D5, 0x5A70, 0xD4E8, - 0x5A77, 0xB440, 0x5A78, 0xD8BB, 0x5A7A, 0xD8B8, 0x5A7B, 0xD8C9, - 0x5A7C, 0xD8BD, 0x5A7D, 0xD8CA, 0x5A7F, 0xB442, 0x5A83, 0xD8C6, - 0x5A84, 0xD8C3, 0x5A8A, 0xD8C4, 0x5A8B, 0xD8C7, 0x5A8C, 0xD8CB, - 0x5A8E, 0xD4E3, 0x5A8F, 0xD8CD, 0x5A90, 0xDD47, 0x5A92, 0xB443, - 0x5A93, 0xD8CE, 0x5A94, 0xD8B6, 0x5A95, 0xD8C0, 0x5A97, 0xD8C5, - 0x5A9A, 0xB441, 0x5A9B, 0xB444, 0x5A9C, 0xD8CC, 0x5A9D, 0xD8CF, - 0x5A9E, 0xD8BA, 0x5A9F, 0xD8B7, 0x5AA2, 0xD8B9, 0x5AA5, 0xD8BE, - 0x5AA6, 0xD8BC, 0x5AA7, 0xB445, 0x5AA9, 0xD8C8, 0x5AAC, 0xD8BF, - 0x5AAE, 0xD8C1, 0x5AAF, 0xD8B5, 0x5AB0, 0xDCFA, 0x5AB1, 0xDCF8, - 0x5AB2, 0xB742, 0x5AB3, 0xB740, 0x5AB4, 0xDD43, 0x5AB5, 0xDCF9, - 0x5AB6, 0xDD44, 0x5AB7, 0xDD40, 0x5AB8, 0xDCF7, 0x5AB9, 0xDD46, - 0x5ABA, 0xDCF6, 0x5ABB, 0xDCFD, 0x5ABC, 0xB6FE, 0x5ABD, 0xB6FD, - 0x5ABE, 0xB6FC, 0x5ABF, 0xDCFB, 0x5AC0, 0xDD41, 0x5AC1, 0xB6F9, - 0x5AC2, 0xB741, 0x5AC4, 0xDCF4, 0x5AC6, 0xDCFE, 0x5AC7, 0xDCF3, - 0x5AC8, 0xDCFC, 0x5AC9, 0xB6FA, 0x5ACA, 0xDD42, 0x5ACB, 0xDCF5, - 0x5ACC, 0xB6FB, 0x5ACD, 0xDD45, 0x5AD5, 0xE16E, 0x5AD6, 0xB9E2, - 0x5AD7, 0xB9E1, 0x5AD8, 0xB9E3, 0x5AD9, 0xE17A, 0x5ADA, 0xE170, - 0x5ADB, 0xE176, 0x5ADC, 0xE16B, 0x5ADD, 0xE179, 0x5ADE, 0xE178, - 0x5ADF, 0xE17C, 0x5AE0, 0xE175, 0x5AE1, 0xB9DE, 0x5AE2, 0xE174, - 0x5AE3, 0xB9E4, 0x5AE5, 0xE16D, 0x5AE6, 0xB9DF, 0x5AE8, 0xE17B, - 0x5AE9, 0xB9E0, 0x5AEA, 0xE16F, 0x5AEB, 0xE172, 0x5AEC, 0xE177, - 0x5AED, 0xE171, 0x5AEE, 0xE16C, 0x5AF3, 0xE173, 0x5AF4, 0xE555, - 0x5AF5, 0xBC61, 0x5AF6, 0xE558, 0x5AF7, 0xE557, 0x5AF8, 0xE55A, - 0x5AF9, 0xE55C, 0x5AFA, 0xF9DC, 0x5AFB, 0xBC5F, 0x5AFD, 0xE556, - 0x5AFF, 0xE554, 0x5B01, 0xE55D, 0x5B02, 0xE55B, 0x5B03, 0xE559, - 0x5B05, 0xE55F, 0x5B07, 0xE55E, 0x5B08, 0xBC63, 0x5B09, 0xBC5E, - 0x5B0B, 0xBC60, 0x5B0C, 0xBC62, 0x5B0F, 0xE560, 0x5B10, 0xE957, - 0x5B13, 0xE956, 0x5B14, 0xE955, 0x5B16, 0xE958, 0x5B17, 0xE951, - 0x5B19, 0xE952, 0x5B1A, 0xE95A, 0x5B1B, 0xE953, 0x5B1D, 0xBEC5, - 0x5B1E, 0xE95C, 0x5B20, 0xE95B, 0x5B21, 0xE954, 0x5B23, 0xECD1, - 0x5B24, 0xC0A8, 0x5B25, 0xECCF, 0x5B26, 0xECD4, 0x5B27, 0xECD3, - 0x5B28, 0xE959, 0x5B2A, 0xC0A7, 0x5B2C, 0xECD2, 0x5B2D, 0xECCE, - 0x5B2E, 0xECD6, 0x5B2F, 0xECD5, 0x5B30, 0xC0A6, 0x5B32, 0xECD0, - 0x5B34, 0xBEC6, 0x5B38, 0xC254, 0x5B3C, 0xEFC1, 0x5B3D, 0xF1FA, - 0x5B3E, 0xF1FB, 0x5B3F, 0xF1FC, 0x5B40, 0xC45C, 0x5B43, 0xC45D, - 0x5B45, 0xF443, 0x5B47, 0xF5C8, 0x5B48, 0xF5C7, 0x5B4B, 0xF6DB, - 0x5B4C, 0xF6DC, 0x5B4D, 0xF7D5, 0x5B4E, 0xF8A7, 0x5B50, 0xA46C, - 0x5B51, 0xA46D, 0x5B53, 0xA46E, 0x5B54, 0xA4D5, 0x5B55, 0xA5A5, - 0x5B56, 0xC9D3, 0x5B57, 0xA672, 0x5B58, 0xA673, 0x5B5A, 0xA7B7, - 0x5B5B, 0xA7B8, 0x5B5C, 0xA7B6, 0x5B5D, 0xA7B5, 0x5B5F, 0xA973, - 0x5B62, 0xCC55, 0x5B63, 0xA975, 0x5B64, 0xA974, 0x5B65, 0xCC56, - 0x5B69, 0xABC4, 0x5B6B, 0xAE5D, 0x5B6C, 0xD165, 0x5B6E, 0xD4F0, - 0x5B70, 0xB145, 0x5B71, 0xB447, 0x5B72, 0xD4EF, 0x5B73, 0xB446, - 0x5B75, 0xB9E5, 0x5B77, 0xE17D, 0x5B78, 0xBEC7, 0x5B7A, 0xC0A9, - 0x5B7B, 0xECD7, 0x5B7D, 0xC45E, 0x5B7F, 0xC570, 0x5B81, 0xC972, - 0x5B83, 0xA5A6, 0x5B84, 0xC973, 0x5B85, 0xA676, 0x5B87, 0xA674, - 0x5B88, 0xA675, 0x5B89, 0xA677, 0x5B8B, 0xA7BA, 0x5B8C, 0xA7B9, - 0x5B8E, 0xCABC, 0x5B8F, 0xA7BB, 0x5B92, 0xCABD, 0x5B93, 0xCC57, - 0x5B95, 0xCC58, 0x5B97, 0xA976, 0x5B98, 0xA978, 0x5B99, 0xA97A, - 0x5B9A, 0xA977, 0x5B9B, 0xA97B, 0x5B9C, 0xA979, 0x5BA2, 0xABC8, - 0x5BA3, 0xABC5, 0x5BA4, 0xABC7, 0x5BA5, 0xABC9, 0x5BA6, 0xABC6, - 0x5BA7, 0xD166, 0x5BA8, 0xCE77, 0x5BAC, 0xD168, 0x5BAD, 0xD167, - 0x5BAE, 0xAE63, 0x5BB0, 0xAE5F, 0x5BB3, 0xAE60, 0x5BB4, 0xAE62, - 0x5BB5, 0xAE64, 0x5BB6, 0xAE61, 0x5BB8, 0xAE66, 0x5BB9, 0xAE65, - 0x5BBF, 0xB14A, 0x5BC0, 0xD4F2, 0x5BC1, 0xD4F1, 0x5BC2, 0xB149, - 0x5BC4, 0xB148, 0x5BC5, 0xB147, 0x5BC6, 0xB14B, 0x5BC7, 0xB146, - 0x5BCA, 0xD8D5, 0x5BCB, 0xD8D2, 0x5BCC, 0xB449, 0x5BCD, 0xD8D1, - 0x5BCE, 0xD8D6, 0x5BD0, 0xB44B, 0x5BD1, 0xD8D4, 0x5BD2, 0xB448, - 0x5BD3, 0xB44A, 0x5BD4, 0xD8D3, 0x5BD6, 0xDD48, 0x5BD8, 0xDD49, - 0x5BD9, 0xDD4A, 0x5BDE, 0xB9E6, 0x5BDF, 0xB9EE, 0x5BE0, 0xE17E, - 0x5BE1, 0xB9E8, 0x5BE2, 0xB9EC, 0x5BE3, 0xE1A1, 0x5BE4, 0xB9ED, - 0x5BE5, 0xB9E9, 0x5BE6, 0xB9EA, 0x5BE7, 0xB9E7, 0x5BE8, 0xB9EB, - 0x5BE9, 0xBC66, 0x5BEA, 0xD8D0, 0x5BEB, 0xBC67, 0x5BEC, 0xBC65, - 0x5BEE, 0xBC64, 0x5BEF, 0xE95D, 0x5BF0, 0xBEC8, 0x5BF1, 0xECD8, - 0x5BF2, 0xECD9, 0x5BF5, 0xC364, 0x5BF6, 0xC45F, 0x5BF8, 0xA46F, - 0x5BFA, 0xA678, 0x5C01, 0xABCA, 0x5C03, 0xD169, 0x5C04, 0xAE67, - 0x5C07, 0xB14E, 0x5C08, 0xB14D, 0x5C09, 0xB14C, 0x5C0A, 0xB44C, - 0x5C0B, 0xB44D, 0x5C0C, 0xD8D7, 0x5C0D, 0xB9EF, 0x5C0E, 0xBEC9, - 0x5C0F, 0xA470, 0x5C10, 0xC95C, 0x5C11, 0xA4D6, 0x5C12, 0xC974, - 0x5C15, 0xC9D4, 0x5C16, 0xA679, 0x5C1A, 0xA97C, 0x5C1F, 0xDD4B, - 0x5C22, 0xA471, 0x5C24, 0xA4D7, 0x5C25, 0xC9D5, 0x5C28, 0xCABE, - 0x5C2A, 0xCABF, 0x5C2C, 0xA7BC, 0x5C30, 0xD8D8, 0x5C31, 0xB44E, - 0x5C33, 0xDD4C, 0x5C37, 0xC0AA, 0x5C38, 0xA472, 0x5C39, 0xA4A8, - 0x5C3A, 0xA4D8, 0x5C3B, 0xC975, 0x5C3C, 0xA5A7, 0x5C3E, 0xA7C0, - 0x5C3F, 0xA7BF, 0x5C40, 0xA7BD, 0x5C41, 0xA7BE, 0x5C44, 0xCC59, - 0x5C45, 0xA97E, 0x5C46, 0xA9A1, 0x5C47, 0xCC5A, 0x5C48, 0xA97D, - 0x5C4B, 0xABCE, 0x5C4C, 0xCE78, 0x5C4D, 0xABCD, 0x5C4E, 0xABCB, - 0x5C4F, 0xABCC, 0x5C50, 0xAE6A, 0x5C51, 0xAE68, 0x5C54, 0xD16B, - 0x5C55, 0xAE69, 0x5C56, 0xD16A, 0x5C58, 0xAE5E, 0x5C59, 0xD4F3, - 0x5C5C, 0xB150, 0x5C5D, 0xB151, 0x5C60, 0xB14F, 0x5C62, 0xB9F0, - 0x5C63, 0xE1A2, 0x5C64, 0xBC68, 0x5C65, 0xBC69, 0x5C67, 0xE561, - 0x5C68, 0xC0AB, 0x5C69, 0xEFC2, 0x5C6A, 0xEFC3, 0x5C6C, 0xC4DD, - 0x5C6D, 0xF8A8, 0x5C6E, 0xC94B, 0x5C6F, 0xA4D9, 0x5C71, 0xA473, - 0x5C73, 0xC977, 0x5C74, 0xC976, 0x5C79, 0xA67A, 0x5C7A, 0xC9D7, - 0x5C7B, 0xC9D8, 0x5C7C, 0xC9D6, 0x5C7E, 0xC9D9, 0x5C86, 0xCAC7, - 0x5C88, 0xCAC2, 0x5C89, 0xCAC4, 0x5C8A, 0xCAC6, 0x5C8B, 0xCAC3, - 0x5C8C, 0xA7C4, 0x5C8D, 0xCAC0, 0x5C8F, 0xCAC1, 0x5C90, 0xA7C1, - 0x5C91, 0xA7C2, 0x5C92, 0xCAC5, 0x5C93, 0xCAC8, 0x5C94, 0xA7C3, - 0x5C95, 0xCAC9, 0x5C9D, 0xCC68, 0x5C9F, 0xCC62, 0x5CA0, 0xCC5D, - 0x5CA1, 0xA9A3, 0x5CA2, 0xCC65, 0x5CA3, 0xCC63, 0x5CA4, 0xCC5C, - 0x5CA5, 0xCC69, 0x5CA6, 0xCC6C, 0x5CA7, 0xCC67, 0x5CA8, 0xCC60, - 0x5CA9, 0xA9A5, 0x5CAA, 0xCC66, 0x5CAB, 0xA9A6, 0x5CAC, 0xCC61, - 0x5CAD, 0xCC64, 0x5CAE, 0xCC5B, 0x5CAF, 0xCC5F, 0x5CB0, 0xCC6B, - 0x5CB1, 0xA9A7, 0x5CB3, 0xA9A8, 0x5CB5, 0xCC5E, 0x5CB6, 0xCC6A, - 0x5CB7, 0xA9A2, 0x5CB8, 0xA9A4, 0x5CC6, 0xCEAB, 0x5CC7, 0xCEA4, - 0x5CC8, 0xCEAA, 0x5CC9, 0xCEA3, 0x5CCA, 0xCEA5, 0x5CCB, 0xCE7D, - 0x5CCC, 0xCE7B, 0x5CCE, 0xCEAC, 0x5CCF, 0xCEA9, 0x5CD0, 0xCE79, - 0x5CD2, 0xABD0, 0x5CD3, 0xCEA7, 0x5CD4, 0xCEA8, 0x5CD6, 0xCEA6, - 0x5CD7, 0xCE7C, 0x5CD8, 0xCE7A, 0x5CD9, 0xABCF, 0x5CDA, 0xCEA2, - 0x5CDB, 0xCE7E, 0x5CDE, 0xCEA1, 0x5CDF, 0xCEAD, 0x5CE8, 0xAE6F, - 0x5CEA, 0xAE6E, 0x5CEC, 0xD16C, 0x5CED, 0xAE6B, 0x5CEE, 0xD16E, - 0x5CF0, 0xAE70, 0x5CF1, 0xD16F, 0x5CF4, 0xAE73, 0x5CF6, 0xAE71, - 0x5CF7, 0xD170, 0x5CF8, 0xCEAE, 0x5CF9, 0xD172, 0x5CFB, 0xAE6D, - 0x5CFD, 0xAE6C, 0x5CFF, 0xD16D, 0x5D00, 0xD171, 0x5D01, 0xAE72, - 0x5D06, 0xB153, 0x5D07, 0xB152, 0x5D0B, 0xD4F5, 0x5D0C, 0xD4F9, - 0x5D0D, 0xD4FB, 0x5D0E, 0xB154, 0x5D0F, 0xD4FE, 0x5D11, 0xB158, - 0x5D12, 0xD541, 0x5D14, 0xB15A, 0x5D16, 0xB156, 0x5D17, 0xB15E, - 0x5D19, 0xB15B, 0x5D1A, 0xD4F7, 0x5D1B, 0xB155, 0x5D1D, 0xD4F6, - 0x5D1E, 0xD4F4, 0x5D1F, 0xD543, 0x5D20, 0xD4F8, 0x5D22, 0xB157, - 0x5D23, 0xD542, 0x5D24, 0xB15C, 0x5D25, 0xD4FD, 0x5D26, 0xD4FC, - 0x5D27, 0xB15D, 0x5D28, 0xD4FA, 0x5D29, 0xB159, 0x5D2E, 0xD544, - 0x5D30, 0xD540, 0x5D31, 0xD8E7, 0x5D32, 0xD8EE, 0x5D33, 0xD8E3, - 0x5D34, 0xB451, 0x5D35, 0xD8DF, 0x5D36, 0xD8EF, 0x5D37, 0xD8D9, - 0x5D38, 0xD8EC, 0x5D39, 0xD8EA, 0x5D3A, 0xD8E4, 0x5D3C, 0xD8ED, - 0x5D3D, 0xD8E6, 0x5D3F, 0xD8DE, 0x5D40, 0xD8F0, 0x5D41, 0xD8DC, - 0x5D42, 0xD8E9, 0x5D43, 0xD8DA, 0x5D45, 0xD8F1, 0x5D47, 0xB452, - 0x5D49, 0xD8EB, 0x5D4A, 0xDD4F, 0x5D4B, 0xD8DD, 0x5D4C, 0xB44F, - 0x5D4E, 0xD8E1, 0x5D50, 0xB450, 0x5D51, 0xD8E0, 0x5D52, 0xD8E5, - 0x5D55, 0xD8E2, 0x5D59, 0xD8E8, 0x5D5E, 0xDD53, 0x5D62, 0xDD56, - 0x5D63, 0xDD4E, 0x5D65, 0xDD50, 0x5D67, 0xDD55, 0x5D68, 0xDD54, - 0x5D69, 0xB743, 0x5D6B, 0xD8DB, 0x5D6C, 0xDD52, 0x5D6F, 0xB744, - 0x5D71, 0xDD4D, 0x5D72, 0xDD51, 0x5D77, 0xE1A9, 0x5D79, 0xE1B0, - 0x5D7A, 0xE1A7, 0x5D7C, 0xE1AE, 0x5D7D, 0xE1A5, 0x5D7E, 0xE1AD, - 0x5D7F, 0xE1B1, 0x5D80, 0xE1A4, 0x5D81, 0xE1A8, 0x5D82, 0xE1A3, - 0x5D84, 0xB9F1, 0x5D86, 0xE1A6, 0x5D87, 0xB9F2, 0x5D88, 0xE1AC, - 0x5D89, 0xE1AB, 0x5D8A, 0xE1AA, 0x5D8D, 0xE1AF, 0x5D92, 0xE565, - 0x5D93, 0xE567, 0x5D94, 0xBC6B, 0x5D95, 0xE568, 0x5D97, 0xE563, - 0x5D99, 0xE562, 0x5D9A, 0xE56C, 0x5D9C, 0xE56A, 0x5D9D, 0xBC6A, - 0x5D9E, 0xE56D, 0x5D9F, 0xE564, 0x5DA0, 0xE569, 0x5DA1, 0xE56B, - 0x5DA2, 0xE566, 0x5DA7, 0xE961, 0x5DA8, 0xE966, 0x5DA9, 0xE960, - 0x5DAA, 0xE965, 0x5DAC, 0xE95E, 0x5DAD, 0xE968, 0x5DAE, 0xE964, - 0x5DAF, 0xE969, 0x5DB0, 0xE963, 0x5DB1, 0xE95F, 0x5DB2, 0xE967, - 0x5DB4, 0xE96A, 0x5DB5, 0xE962, 0x5DB7, 0xECDA, 0x5DB8, 0xC0AF, - 0x5DBA, 0xC0AD, 0x5DBC, 0xC0AC, 0x5DBD, 0xC0AE, 0x5DC0, 0xEFC4, - 0x5DC2, 0xF172, 0x5DC3, 0xF1FD, 0x5DC6, 0xF444, 0x5DC7, 0xF445, - 0x5DC9, 0xC460, 0x5DCB, 0xF5C9, 0x5DCD, 0xC4DE, 0x5DCF, 0xF5CA, - 0x5DD1, 0xF6DE, 0x5DD2, 0xC572, 0x5DD4, 0xC571, 0x5DD5, 0xF6DD, - 0x5DD6, 0xC5C9, 0x5DD8, 0xF7D6, 0x5DDD, 0xA474, 0x5DDE, 0xA67B, - 0x5DDF, 0xC9DA, 0x5DE0, 0xCACA, 0x5DE1, 0xA8B5, 0x5DE2, 0xB15F, - 0x5DE5, 0xA475, 0x5DE6, 0xA5AA, 0x5DE7, 0xA5A9, 0x5DE8, 0xA5A8, - 0x5DEB, 0xA7C5, 0x5DEE, 0xAE74, 0x5DF0, 0xDD57, 0x5DF1, 0xA476, - 0x5DF2, 0xA477, 0x5DF3, 0xA478, 0x5DF4, 0xA4DA, 0x5DF7, 0xABD1, - 0x5DF9, 0xCEAF, 0x5DFD, 0xB453, 0x5DFE, 0xA479, 0x5DFF, 0xC95D, - 0x5E02, 0xA5AB, 0x5E03, 0xA5AC, 0x5E04, 0xC978, 0x5E06, 0xA67C, - 0x5E0A, 0xCACB, 0x5E0C, 0xA7C6, 0x5E0E, 0xCACC, 0x5E11, 0xA9AE, - 0x5E14, 0xCC6E, 0x5E15, 0xA9AC, 0x5E16, 0xA9AB, 0x5E17, 0xCC6D, - 0x5E18, 0xA9A9, 0x5E19, 0xCC6F, 0x5E1A, 0xA9AA, 0x5E1B, 0xA9AD, - 0x5E1D, 0xABD2, 0x5E1F, 0xABD4, 0x5E20, 0xCEB3, 0x5E21, 0xCEB0, - 0x5E22, 0xCEB1, 0x5E23, 0xCEB2, 0x5E24, 0xCEB4, 0x5E25, 0xABD3, - 0x5E28, 0xD174, 0x5E29, 0xD173, 0x5E2B, 0xAE76, 0x5E2D, 0xAE75, - 0x5E33, 0xB162, 0x5E34, 0xD546, 0x5E36, 0xB161, 0x5E37, 0xB163, - 0x5E38, 0xB160, 0x5E3D, 0xB455, 0x5E3E, 0xD545, 0x5E40, 0xB456, - 0x5E41, 0xD8F3, 0x5E43, 0xB457, 0x5E44, 0xD8F2, 0x5E45, 0xB454, - 0x5E4A, 0xDD5A, 0x5E4B, 0xDD5C, 0x5E4C, 0xB745, 0x5E4D, 0xDD5B, - 0x5E4E, 0xDD59, 0x5E4F, 0xDD58, 0x5E53, 0xE1B4, 0x5E54, 0xB9F7, - 0x5E55, 0xB9F5, 0x5E57, 0xB9F6, 0x5E58, 0xE1B2, 0x5E59, 0xE1B3, - 0x5E5B, 0xB9F3, 0x5E5C, 0xE571, 0x5E5D, 0xE56F, 0x5E5F, 0xBC6D, - 0x5E60, 0xE570, 0x5E61, 0xBC6E, 0x5E62, 0xBC6C, 0x5E63, 0xB9F4, - 0x5E66, 0xE96D, 0x5E67, 0xE96B, 0x5E68, 0xE96C, 0x5E69, 0xE56E, - 0x5E6A, 0xECDC, 0x5E6B, 0xC0B0, 0x5E6C, 0xECDB, 0x5E6D, 0xEFC5, - 0x5E6E, 0xEFC6, 0x5E6F, 0xE96E, 0x5E70, 0xF1FE, 0x5E72, 0xA47A, - 0x5E73, 0xA5AD, 0x5E74, 0xA67E, 0x5E75, 0xC9DB, 0x5E76, 0xA67D, - 0x5E78, 0xA9AF, 0x5E79, 0xB746, 0x5E7B, 0xA4DB, 0x5E7C, 0xA5AE, - 0x5E7D, 0xABD5, 0x5E7E, 0xB458, 0x5E80, 0xC979, 0x5E82, 0xC97A, - 0x5E84, 0xC9DC, 0x5E87, 0xA7C8, 0x5E88, 0xCAD0, 0x5E89, 0xCACE, - 0x5E8A, 0xA7C9, 0x5E8B, 0xCACD, 0x5E8C, 0xCACF, 0x5E8D, 0xCAD1, - 0x5E8F, 0xA7C7, 0x5E95, 0xA9B3, 0x5E96, 0xA9B4, 0x5E97, 0xA9B1, - 0x5E9A, 0xA9B0, 0x5E9B, 0xCEB8, 0x5E9C, 0xA9B2, 0x5EA0, 0xABD6, - 0x5EA2, 0xCEB7, 0x5EA3, 0xCEB9, 0x5EA4, 0xCEB6, 0x5EA5, 0xCEBA, - 0x5EA6, 0xABD7, 0x5EA7, 0xAE79, 0x5EA8, 0xD175, 0x5EAA, 0xD177, - 0x5EAB, 0xAE77, 0x5EAC, 0xD178, 0x5EAD, 0xAE78, 0x5EAE, 0xD176, - 0x5EB0, 0xCEB5, 0x5EB1, 0xD547, 0x5EB2, 0xD54A, 0x5EB3, 0xD54B, - 0x5EB4, 0xD548, 0x5EB5, 0xB167, 0x5EB6, 0xB166, 0x5EB7, 0xB164, - 0x5EB8, 0xB165, 0x5EB9, 0xD549, 0x5EBE, 0xB168, 0x5EC1, 0xB45A, - 0x5EC2, 0xB45B, 0x5EC4, 0xB45C, 0x5EC5, 0xDD5D, 0x5EC6, 0xDD5F, - 0x5EC7, 0xDD61, 0x5EC8, 0xB748, 0x5EC9, 0xB747, 0x5ECA, 0xB459, - 0x5ECB, 0xDD60, 0x5ECC, 0xDD5E, 0x5ECE, 0xE1B8, 0x5ED1, 0xE1B6, - 0x5ED2, 0xE1BC, 0x5ED3, 0xB9F8, 0x5ED4, 0xE1BD, 0x5ED5, 0xE1BA, - 0x5ED6, 0xB9F9, 0x5ED7, 0xE1B7, 0x5ED8, 0xE1B5, 0x5ED9, 0xE1BB, - 0x5EDA, 0xBC70, 0x5EDB, 0xE573, 0x5EDC, 0xE1B9, 0x5EDD, 0xBC72, - 0x5EDE, 0xE574, 0x5EDF, 0xBC71, 0x5EE0, 0xBC74, 0x5EE1, 0xE575, - 0x5EE2, 0xBC6F, 0x5EE3, 0xBC73, 0x5EE5, 0xE973, 0x5EE6, 0xE971, - 0x5EE7, 0xE970, 0x5EE8, 0xE972, 0x5EE9, 0xE96F, 0x5EEC, 0xC366, - 0x5EEE, 0xF446, 0x5EEF, 0xF447, 0x5EF1, 0xF5CB, 0x5EF2, 0xF6DF, - 0x5EF3, 0xC655, 0x5EF6, 0xA9B5, 0x5EF7, 0xA7CA, 0x5EFA, 0xABD8, - 0x5EFE, 0xA47B, 0x5EFF, 0xA4DC, 0x5F01, 0xA5AF, 0x5F02, 0xC9DD, - 0x5F04, 0xA7CB, 0x5F05, 0xCAD2, 0x5F07, 0xCEBB, 0x5F08, 0xABD9, - 0x5F0A, 0xB9FA, 0x5F0B, 0xA47C, 0x5F0F, 0xA6A1, 0x5F12, 0xB749, - 0x5F13, 0xA47D, 0x5F14, 0xA4DD, 0x5F15, 0xA4DE, 0x5F17, 0xA5B1, - 0x5F18, 0xA5B0, 0x5F1A, 0xC9DE, 0x5F1B, 0xA6A2, 0x5F1D, 0xCAD3, - 0x5F1F, 0xA7CC, 0x5F22, 0xCC71, 0x5F23, 0xCC72, 0x5F24, 0xCC73, - 0x5F26, 0xA9B6, 0x5F27, 0xA9B7, 0x5F28, 0xCC70, 0x5F29, 0xA9B8, - 0x5F2D, 0xABDA, 0x5F2E, 0xCEBC, 0x5F30, 0xD17A, 0x5F31, 0xAE7A, - 0x5F33, 0xD179, 0x5F35, 0xB169, 0x5F36, 0xD54C, 0x5F37, 0xB16A, - 0x5F38, 0xD54D, 0x5F3C, 0xB45D, 0x5F40, 0xDD62, 0x5F43, 0xE1BF, - 0x5F44, 0xE1BE, 0x5F46, 0xB9FB, 0x5F48, 0xBC75, 0x5F49, 0xE576, - 0x5F4A, 0xBECA, 0x5F4B, 0xE974, 0x5F4C, 0xC0B1, 0x5F4E, 0xC573, - 0x5F4F, 0xF7D8, 0x5F54, 0xCC74, 0x5F56, 0xCEBD, 0x5F57, 0xB16B, - 0x5F58, 0xD8F4, 0x5F59, 0xB74A, 0x5F5D, 0xC255, 0x5F62, 0xA7CE, - 0x5F64, 0xA7CD, 0x5F65, 0xABDB, 0x5F67, 0xD17B, 0x5F69, 0xB16D, - 0x5F6A, 0xB343, 0x5F6B, 0xB16E, 0x5F6C, 0xB16C, 0x5F6D, 0xB45E, - 0x5F6F, 0xE1C0, 0x5F70, 0xB9FC, 0x5F71, 0xBC76, 0x5F73, 0xC94C, - 0x5F74, 0xC9DF, 0x5F76, 0xCAD5, 0x5F77, 0xA7CF, 0x5F78, 0xCAD4, - 0x5F79, 0xA7D0, 0x5F7C, 0xA9BC, 0x5F7D, 0xCC77, 0x5F7E, 0xCC76, - 0x5F7F, 0xA9BB, 0x5F80, 0xA9B9, 0x5F81, 0xA9BA, 0x5F82, 0xCC75, - 0x5F85, 0xABDD, 0x5F86, 0xCEBE, 0x5F87, 0xABE0, 0x5F88, 0xABDC, - 0x5F89, 0xABE2, 0x5F8A, 0xABDE, 0x5F8B, 0xABDF, 0x5F8C, 0xABE1, - 0x5F90, 0xAE7D, 0x5F91, 0xAE7C, 0x5F92, 0xAE7B, 0x5F96, 0xD54F, - 0x5F97, 0xB16F, 0x5F98, 0xB172, 0x5F99, 0xB170, 0x5F9B, 0xD54E, - 0x5F9C, 0xB175, 0x5F9E, 0xB171, 0x5F9F, 0xD550, 0x5FA0, 0xB174, - 0x5FA1, 0xB173, 0x5FA5, 0xD8F6, 0x5FA6, 0xD8F5, 0x5FA8, 0xB461, - 0x5FA9, 0xB45F, 0x5FAA, 0xB460, 0x5FAB, 0xD8F7, 0x5FAC, 0xB74B, - 0x5FAD, 0xDD64, 0x5FAE, 0xB74C, 0x5FAF, 0xDD63, 0x5FB2, 0xE577, - 0x5FB5, 0xBC78, 0x5FB6, 0xE1C1, 0x5FB7, 0xBC77, 0x5FB9, 0xB9FD, - 0x5FBB, 0xECDE, 0x5FBC, 0xE975, 0x5FBD, 0xC0B2, 0x5FBE, 0xECDD, - 0x5FBF, 0xF240, 0x5FC0, 0xF448, 0x5FC1, 0xF449, 0x5FC3, 0xA4DF, - 0x5FC5, 0xA5B2, 0x5FC9, 0xC97B, 0x5FCC, 0xA7D2, 0x5FCD, 0xA7D4, - 0x5FCF, 0xC9E2, 0x5FD0, 0xCAD8, 0x5FD1, 0xCAD7, 0x5FD2, 0xCAD6, - 0x5FD4, 0xC9E1, 0x5FD5, 0xC9E0, 0x5FD6, 0xA6A4, 0x5FD7, 0xA7D3, - 0x5FD8, 0xA7D1, 0x5FD9, 0xA6A3, 0x5FDD, 0xA9BD, 0x5FDE, 0xCC78, - 0x5FE0, 0xA9BE, 0x5FE1, 0xCADD, 0x5FE3, 0xCADF, 0x5FE4, 0xCADE, - 0x5FE5, 0xCC79, 0x5FE8, 0xCADA, 0x5FEA, 0xA7D8, 0x5FEB, 0xA7D6, - 0x5FED, 0xCAD9, 0x5FEE, 0xCADB, 0x5FEF, 0xCAE1, 0x5FF1, 0xA7D5, - 0x5FF3, 0xCADC, 0x5FF4, 0xCAE5, 0x5FF5, 0xA9C0, 0x5FF7, 0xCAE2, - 0x5FF8, 0xA7D7, 0x5FFA, 0xCAE0, 0x5FFB, 0xCAE3, 0x5FFD, 0xA9BF, - 0x5FFF, 0xA9C1, 0x6000, 0xCAE4, 0x6009, 0xCCAF, 0x600A, 0xCCA2, - 0x600B, 0xCC7E, 0x600C, 0xCCAE, 0x600D, 0xCCA9, 0x600E, 0xABE7, - 0x600F, 0xA9C2, 0x6010, 0xCCAA, 0x6011, 0xCCAD, 0x6012, 0xABE3, - 0x6013, 0xCCAC, 0x6014, 0xA9C3, 0x6015, 0xA9C8, 0x6016, 0xA9C6, - 0x6017, 0xCCA3, 0x6019, 0xCC7C, 0x601A, 0xCCA5, 0x601B, 0xA9CD, - 0x601C, 0xCCB0, 0x601D, 0xABE4, 0x601E, 0xCCA6, 0x6020, 0xABE5, - 0x6021, 0xA9C9, 0x6022, 0xCCA8, 0x6024, 0xCECD, 0x6025, 0xABE6, - 0x6026, 0xCC7B, 0x6027, 0xA9CA, 0x6028, 0xABE8, 0x6029, 0xA9CB, - 0x602A, 0xA9C7, 0x602B, 0xA9CC, 0x602C, 0xCCA7, 0x602D, 0xCC7A, - 0x602E, 0xCCAB, 0x602F, 0xA9C4, 0x6032, 0xCC7D, 0x6033, 0xCCA4, - 0x6034, 0xCCA1, 0x6035, 0xA9C5, 0x6037, 0xCEBF, 0x6039, 0xCEC0, - 0x6040, 0xCECA, 0x6041, 0xD1A1, 0x6042, 0xCECB, 0x6043, 0xABEE, - 0x6044, 0xCECE, 0x6045, 0xCEC4, 0x6046, 0xABED, 0x6047, 0xCEC6, - 0x6049, 0xCEC7, 0x604C, 0xCEC9, 0x604D, 0xABE9, 0x6050, 0xAEA3, - 0x6052, 0xF9DA, 0x6053, 0xCEC5, 0x6054, 0xCEC1, 0x6055, 0xAEA4, - 0x6058, 0xCECF, 0x6059, 0xAE7E, 0x605A, 0xD17D, 0x605B, 0xCEC8, - 0x605D, 0xD17C, 0x605E, 0xCEC3, 0x605F, 0xCECC, 0x6062, 0xABEC, - 0x6063, 0xAEA1, 0x6064, 0xABF2, 0x6065, 0xAEA2, 0x6066, 0xCED0, - 0x6067, 0xD17E, 0x6068, 0xABEB, 0x6069, 0xAEA6, 0x606A, 0xABF1, - 0x606B, 0xABF0, 0x606C, 0xABEF, 0x606D, 0xAEA5, 0x606E, 0xCED1, - 0x606F, 0xAEA7, 0x6070, 0xABEA, 0x6072, 0xCEC2, 0x607F, 0xB176, - 0x6080, 0xD1A4, 0x6081, 0xD1A6, 0x6083, 0xD1A8, 0x6084, 0xAEA8, - 0x6085, 0xAEAE, 0x6086, 0xD553, 0x6087, 0xD1AC, 0x6088, 0xD1A3, - 0x6089, 0xB178, 0x608A, 0xD551, 0x608C, 0xAEAD, 0x608D, 0xAEAB, - 0x608E, 0xD1AE, 0x6090, 0xD552, 0x6092, 0xD1A5, 0x6094, 0xAEAC, - 0x6095, 0xD1A9, 0x6096, 0xAEAF, 0x6097, 0xD1AB, 0x609A, 0xAEAA, - 0x609B, 0xD1AA, 0x609C, 0xD1AD, 0x609D, 0xD1A7, 0x609F, 0xAEA9, - 0x60A0, 0xB179, 0x60A2, 0xD1A2, 0x60A3, 0xB177, 0x60A8, 0xB17A, - 0x60B0, 0xD555, 0x60B1, 0xD55E, 0x60B2, 0xB464, 0x60B4, 0xB17C, - 0x60B5, 0xB1A3, 0x60B6, 0xB465, 0x60B7, 0xD560, 0x60B8, 0xB1AA, - 0x60B9, 0xD8F9, 0x60BA, 0xD556, 0x60BB, 0xB1A2, 0x60BC, 0xB1A5, - 0x60BD, 0xB17E, 0x60BE, 0xD554, 0x60BF, 0xD562, 0x60C0, 0xD565, - 0x60C1, 0xD949, 0x60C3, 0xD563, 0x60C4, 0xD8FD, 0x60C5, 0xB1A1, - 0x60C6, 0xB1A8, 0x60C7, 0xB1AC, 0x60C8, 0xD55D, 0x60C9, 0xD8F8, - 0x60CA, 0xD561, 0x60CB, 0xB17B, 0x60CC, 0xD8FA, 0x60CD, 0xD564, - 0x60CE, 0xD8FC, 0x60CF, 0xD559, 0x60D1, 0xB462, 0x60D3, 0xD557, - 0x60D4, 0xD558, 0x60D5, 0xB1A7, 0x60D8, 0xB1A6, 0x60D9, 0xD55B, - 0x60DA, 0xB1AB, 0x60DB, 0xD55F, 0x60DC, 0xB1A4, 0x60DD, 0xD55C, - 0x60DF, 0xB1A9, 0x60E0, 0xB466, 0x60E1, 0xB463, 0x60E2, 0xD8FB, - 0x60E4, 0xD55A, 0x60E6, 0xB17D, 0x60F0, 0xB46B, 0x60F1, 0xB46F, - 0x60F2, 0xD940, 0x60F3, 0xB751, 0x60F4, 0xB46D, 0x60F5, 0xD944, - 0x60F6, 0xB471, 0x60F7, 0xDD65, 0x60F8, 0xD946, 0x60F9, 0xB753, - 0x60FA, 0xB469, 0x60FB, 0xB46C, 0x60FC, 0xD947, 0x60FE, 0xD948, - 0x60FF, 0xD94E, 0x6100, 0xB473, 0x6101, 0xB754, 0x6103, 0xD94A, - 0x6104, 0xD94F, 0x6105, 0xD943, 0x6106, 0xB75E, 0x6108, 0xB755, - 0x6109, 0xB472, 0x610A, 0xD941, 0x610B, 0xD950, 0x610D, 0xB75D, - 0x610E, 0xB470, 0x610F, 0xB74E, 0x6110, 0xD94D, 0x6112, 0xB474, - 0x6113, 0xD945, 0x6114, 0xD8FE, 0x6115, 0xB46A, 0x6116, 0xD942, - 0x6118, 0xD94B, 0x611A, 0xB74D, 0x611B, 0xB752, 0x611C, 0xB467, - 0x611D, 0xD94C, 0x611F, 0xB750, 0x6123, 0xB468, 0x6127, 0xB75C, - 0x6128, 0xE1C3, 0x6129, 0xDD70, 0x612B, 0xDD68, 0x612C, 0xE1C2, - 0x612E, 0xDD6C, 0x612F, 0xDD6E, 0x6132, 0xDD6B, 0x6134, 0xB75B, - 0x6136, 0xDD6A, 0x6137, 0xB75F, 0x613B, 0xE1D2, 0x613E, 0xB75A, - 0x613F, 0xBA40, 0x6140, 0xDD71, 0x6141, 0xE1C4, 0x6144, 0xB758, - 0x6145, 0xDD69, 0x6146, 0xDD6D, 0x6147, 0xB9FE, 0x6148, 0xB74F, - 0x6149, 0xDD66, 0x614A, 0xDD67, 0x614B, 0xBA41, 0x614C, 0xB757, - 0x614D, 0xB759, 0x614E, 0xB756, 0x614F, 0xDD6F, 0x6152, 0xE1C8, - 0x6153, 0xE1C9, 0x6154, 0xE1CE, 0x6155, 0xBC7D, 0x6156, 0xE1D5, - 0x6158, 0xBA47, 0x615A, 0xBA46, 0x615B, 0xE1D0, 0x615D, 0xBC7C, - 0x615E, 0xE1C5, 0x615F, 0xBA45, 0x6161, 0xE1D4, 0x6162, 0xBA43, - 0x6163, 0xBA44, 0x6165, 0xE1D1, 0x6166, 0xE5AA, 0x6167, 0xBC7A, - 0x6168, 0xB46E, 0x616A, 0xE1D3, 0x616B, 0xBCA3, 0x616C, 0xE1CB, - 0x616E, 0xBC7B, 0x6170, 0xBCA2, 0x6171, 0xE1C6, 0x6172, 0xE1CA, - 0x6173, 0xE1C7, 0x6174, 0xE1CD, 0x6175, 0xBA48, 0x6176, 0xBC79, - 0x6177, 0xBA42, 0x6179, 0xE57A, 0x617A, 0xE1CF, 0x617C, 0xBCA1, - 0x617E, 0xBCA4, 0x6180, 0xE1CC, 0x6182, 0xBC7E, 0x6183, 0xE579, - 0x6189, 0xE57E, 0x618A, 0xBECE, 0x618B, 0xE578, 0x618C, 0xE9A3, - 0x618D, 0xE5A9, 0x618E, 0xBCA8, 0x6190, 0xBCA6, 0x6191, 0xBECC, - 0x6192, 0xE5A6, 0x6193, 0xE5A2, 0x6194, 0xBCAC, 0x6196, 0xE978, - 0x619A, 0xBCAA, 0x619B, 0xE5A1, 0x619D, 0xE976, 0x619F, 0xE5A5, - 0x61A1, 0xE5A8, 0x61A2, 0xE57D, 0x61A4, 0xBCAB, 0x61A7, 0xBCA5, - 0x61A8, 0xE977, 0x61A9, 0xBECD, 0x61AA, 0xE5A7, 0x61AB, 0xBCA7, - 0x61AC, 0xBCA9, 0x61AD, 0xE5A4, 0x61AE, 0xBCAD, 0x61AF, 0xE5A3, - 0x61B0, 0xE57C, 0x61B1, 0xE57B, 0x61B2, 0xBECB, 0x61B3, 0xE5AB, - 0x61B4, 0xE97A, 0x61B5, 0xECE0, 0x61B6, 0xBED0, 0x61B8, 0xE9A2, - 0x61BA, 0xE97E, 0x61BC, 0xECE1, 0x61BE, 0xBED1, 0x61BF, 0xE9A1, - 0x61C1, 0xE97C, 0x61C2, 0xC0B4, 0x61C3, 0xECDF, 0x61C5, 0xE979, - 0x61C6, 0xE97B, 0x61C7, 0xC0B5, 0x61C8, 0xBED3, 0x61C9, 0xC0B3, - 0x61CA, 0xBED2, 0x61CB, 0xC0B7, 0x61CC, 0xE97D, 0x61CD, 0xBECF, - 0x61D6, 0xEFCF, 0x61D8, 0xEFC7, 0x61DE, 0xECE7, 0x61DF, 0xEFC8, - 0x61E0, 0xECE3, 0x61E3, 0xC256, 0x61E4, 0xECE5, 0x61E5, 0xECE4, - 0x61E6, 0xC0B6, 0x61E7, 0xECE2, 0x61E8, 0xECE6, 0x61E9, 0xEFD0, - 0x61EA, 0xEFCC, 0x61EB, 0xEFCE, 0x61ED, 0xEFC9, 0x61EE, 0xEFCA, - 0x61F0, 0xEFCD, 0x61F1, 0xEFCB, 0x61F2, 0xC367, 0x61F5, 0xC36A, - 0x61F6, 0xC369, 0x61F7, 0xC368, 0x61F8, 0xC461, 0x61F9, 0xF44A, - 0x61FA, 0xC462, 0x61FB, 0xF241, 0x61FC, 0xC4DF, 0x61FD, 0xF5CC, - 0x61FE, 0xC4E0, 0x61FF, 0xC574, 0x6200, 0xC5CA, 0x6201, 0xF7D9, - 0x6203, 0xF7DA, 0x6204, 0xF7DB, 0x6207, 0xF9BA, 0x6208, 0xA4E0, - 0x6209, 0xC97C, 0x620A, 0xA5B3, 0x620C, 0xA6A6, 0x620D, 0xA6A7, - 0x620E, 0xA6A5, 0x6210, 0xA6A8, 0x6211, 0xA7DA, 0x6212, 0xA7D9, - 0x6214, 0xCCB1, 0x6215, 0xA9CF, 0x6216, 0xA9CE, 0x6219, 0xD1AF, - 0x621A, 0xB1AD, 0x621B, 0xB1AE, 0x621F, 0xB475, 0x6220, 0xDD72, - 0x6221, 0xB760, 0x6222, 0xB761, 0x6223, 0xDD74, 0x6224, 0xDD76, - 0x6225, 0xDD75, 0x6227, 0xE1D7, 0x6229, 0xE1D6, 0x622A, 0xBA49, - 0x622B, 0xE1D8, 0x622D, 0xE5AC, 0x622E, 0xBCAE, 0x6230, 0xBED4, - 0x6232, 0xC0B8, 0x6233, 0xC257, 0x6234, 0xC0B9, 0x6236, 0xA4E1, - 0x623A, 0xCAE6, 0x623D, 0xCCB2, 0x623E, 0xA9D1, 0x623F, 0xA9D0, - 0x6240, 0xA9D2, 0x6241, 0xABF3, 0x6242, 0xCED2, 0x6243, 0xCED3, - 0x6246, 0xD1B0, 0x6247, 0xAEB0, 0x6248, 0xB1AF, 0x6249, 0xB476, - 0x624A, 0xD951, 0x624B, 0xA4E2, 0x624D, 0xA47E, 0x624E, 0xA4E3, - 0x6250, 0xC97D, 0x6251, 0xA5B7, 0x6252, 0xA5B6, 0x6253, 0xA5B4, - 0x6254, 0xA5B5, 0x6258, 0xA6AB, 0x6259, 0xC9E9, 0x625A, 0xC9EB, - 0x625B, 0xA6AA, 0x625C, 0xC9E3, 0x625E, 0xC9E4, 0x6260, 0xC9EA, - 0x6261, 0xC9E6, 0x6262, 0xC9E8, 0x6263, 0xA6A9, 0x6264, 0xC9E5, - 0x6265, 0xC9EC, 0x6266, 0xC9E7, 0x626D, 0xA7E1, 0x626E, 0xA7EA, - 0x626F, 0xA7E8, 0x6270, 0xCAF0, 0x6271, 0xCAED, 0x6272, 0xCAF5, - 0x6273, 0xA7E6, 0x6274, 0xCAF6, 0x6276, 0xA7DF, 0x6277, 0xCAF3, - 0x6279, 0xA7E5, 0x627A, 0xCAEF, 0x627B, 0xCAEE, 0x627C, 0xA7E3, - 0x627D, 0xCAF4, 0x627E, 0xA7E4, 0x627F, 0xA9D3, 0x6280, 0xA7DE, - 0x6281, 0xCAF1, 0x6283, 0xCAE7, 0x6284, 0xA7DB, 0x6286, 0xA7EE, - 0x6287, 0xCAEC, 0x6288, 0xCAF2, 0x6289, 0xA7E0, 0x628A, 0xA7E2, - 0x628C, 0xCAE8, 0x628E, 0xCAE9, 0x628F, 0xCAEA, 0x6291, 0xA7ED, - 0x6292, 0xA7E7, 0x6293, 0xA7EC, 0x6294, 0xCAEB, 0x6295, 0xA7EB, - 0x6296, 0xA7DD, 0x6297, 0xA7DC, 0x6298, 0xA7E9, 0x62A8, 0xA9E1, - 0x62A9, 0xCCBE, 0x62AA, 0xCCB7, 0x62AB, 0xA9DC, 0x62AC, 0xA9EF, - 0x62AD, 0xCCB3, 0x62AE, 0xCCBA, 0x62AF, 0xCCBC, 0x62B0, 0xCCBF, - 0x62B1, 0xA9EA, 0x62B3, 0xCCBB, 0x62B4, 0xCCB4, 0x62B5, 0xA9E8, - 0x62B6, 0xCCB8, 0x62B8, 0xCCC0, 0x62B9, 0xA9D9, 0x62BB, 0xCCBD, - 0x62BC, 0xA9E3, 0x62BD, 0xA9E2, 0x62BE, 0xCCB6, 0x62BF, 0xA9D7, - 0x62C2, 0xA9D8, 0x62C4, 0xA9D6, 0x62C6, 0xA9EE, 0x62C7, 0xA9E6, - 0x62C8, 0xA9E0, 0x62C9, 0xA9D4, 0x62CA, 0xCCB9, 0x62CB, 0xA9DF, - 0x62CC, 0xA9D5, 0x62CD, 0xA9E7, 0x62CE, 0xA9F0, 0x62CF, 0xCED4, - 0x62D0, 0xA9E4, 0x62D1, 0xCCB5, 0x62D2, 0xA9DA, 0x62D3, 0xA9DD, - 0x62D4, 0xA9DE, 0x62D6, 0xA9EC, 0x62D7, 0xA9ED, 0x62D8, 0xA9EB, - 0x62D9, 0xA9E5, 0x62DA, 0xA9E9, 0x62DB, 0xA9DB, 0x62DC, 0xABF4, - 0x62EB, 0xCEDA, 0x62EC, 0xAC41, 0x62ED, 0xABF8, 0x62EE, 0xABFA, - 0x62EF, 0xAC40, 0x62F0, 0xCEE6, 0x62F1, 0xABFD, 0x62F2, 0xD1B1, - 0x62F3, 0xAEB1, 0x62F4, 0xAC43, 0x62F5, 0xCED7, 0x62F6, 0xCEDF, - 0x62F7, 0xABFE, 0x62F8, 0xCEDE, 0x62F9, 0xCEDB, 0x62FA, 0xCEE3, - 0x62FB, 0xCEE5, 0x62FC, 0xABF7, 0x62FD, 0xABFB, 0x62FE, 0xAC42, - 0x62FF, 0xAEB3, 0x6300, 0xCEE0, 0x6301, 0xABF9, 0x6302, 0xAC45, - 0x6303, 0xCED9, 0x6307, 0xABFC, 0x6308, 0xAEB2, 0x6309, 0xABF6, - 0x630B, 0xCED6, 0x630C, 0xCEDD, 0x630D, 0xCED5, 0x630E, 0xCED8, - 0x630F, 0xCEDC, 0x6310, 0xD1B2, 0x6311, 0xAC44, 0x6313, 0xCEE1, - 0x6314, 0xCEE2, 0x6315, 0xCEE4, 0x6316, 0xABF5, 0x6328, 0xAEC1, - 0x6329, 0xD1BE, 0x632A, 0xAEBF, 0x632B, 0xAEC0, 0x632C, 0xD1B4, - 0x632D, 0xD1C4, 0x632F, 0xAEB6, 0x6332, 0xD566, 0x6333, 0xD1C6, - 0x6334, 0xD1C0, 0x6336, 0xD1B7, 0x6338, 0xD1C9, 0x6339, 0xD1BA, - 0x633A, 0xAEBC, 0x633B, 0xD57D, 0x633C, 0xD1BD, 0x633D, 0xAEBE, - 0x633E, 0xAEB5, 0x6340, 0xD1CB, 0x6341, 0xD1BF, 0x6342, 0xAEB8, - 0x6343, 0xD1B8, 0x6344, 0xD1B5, 0x6345, 0xD1B6, 0x6346, 0xAEB9, - 0x6347, 0xD1C5, 0x6348, 0xD1CC, 0x6349, 0xAEBB, 0x634A, 0xD1BC, - 0x634B, 0xD1BB, 0x634C, 0xAEC3, 0x634D, 0xAEC2, 0x634E, 0xAEB4, - 0x634F, 0xAEBA, 0x6350, 0xAEBD, 0x6351, 0xD1C8, 0x6354, 0xD1C2, - 0x6355, 0xAEB7, 0x6356, 0xD1B3, 0x6357, 0xD1CA, 0x6358, 0xD1C1, - 0x6359, 0xD1C3, 0x635A, 0xD1C7, 0x6365, 0xD567, 0x6367, 0xB1B7, - 0x6368, 0xB1CB, 0x6369, 0xB1CA, 0x636B, 0xB1BF, 0x636D, 0xD579, - 0x636E, 0xD575, 0x636F, 0xD572, 0x6370, 0xD5A6, 0x6371, 0xB1BA, - 0x6372, 0xB1B2, 0x6375, 0xD577, 0x6376, 0xB4A8, 0x6377, 0xB1B6, - 0x6378, 0xD5A1, 0x637A, 0xB1CC, 0x637B, 0xB1C9, 0x637C, 0xD57B, - 0x637D, 0xD56A, 0x6380, 0xB1C8, 0x6381, 0xD5A3, 0x6382, 0xD569, - 0x6383, 0xB1BD, 0x6384, 0xB1C1, 0x6385, 0xD5A2, 0x6387, 0xD573, - 0x6388, 0xB1C2, 0x6389, 0xB1BC, 0x638A, 0xD568, 0x638C, 0xB478, - 0x638D, 0xD5A5, 0x638E, 0xD571, 0x638F, 0xB1C7, 0x6390, 0xD574, - 0x6391, 0xD5A4, 0x6392, 0xB1C6, 0x6394, 0xD952, 0x6396, 0xB1B3, - 0x6397, 0xD56F, 0x6398, 0xB1B8, 0x6399, 0xB1C3, 0x639B, 0xB1BE, - 0x639C, 0xD578, 0x639D, 0xD56E, 0x639E, 0xD56C, 0x639F, 0xD57E, - 0x63A0, 0xB1B0, 0x63A1, 0xB1C4, 0x63A2, 0xB1B4, 0x63A3, 0xB477, - 0x63A4, 0xD57C, 0x63A5, 0xB1B5, 0x63A7, 0xB1B1, 0x63A8, 0xB1C0, - 0x63A9, 0xB1BB, 0x63AA, 0xB1B9, 0x63AB, 0xD570, 0x63AC, 0xB1C5, - 0x63AD, 0xD56D, 0x63AE, 0xD57A, 0x63AF, 0xD576, 0x63B0, 0xD954, - 0x63B1, 0xD953, 0x63BD, 0xD56B, 0x63BE, 0xD964, 0x63C0, 0xB47A, - 0x63C2, 0xD96A, 0x63C3, 0xD959, 0x63C4, 0xD967, 0x63C5, 0xDD77, - 0x63C6, 0xB47D, 0x63C7, 0xD96B, 0x63C8, 0xD96E, 0x63C9, 0xB47C, - 0x63CA, 0xD95C, 0x63CB, 0xD96D, 0x63CC, 0xD96C, 0x63CD, 0xB47E, - 0x63CE, 0xD955, 0x63CF, 0xB479, 0x63D0, 0xB4A3, 0x63D2, 0xB4A1, - 0x63D3, 0xD969, 0x63D5, 0xD95F, 0x63D6, 0xB4A5, 0x63D7, 0xD970, - 0x63D8, 0xD968, 0x63D9, 0xD971, 0x63DA, 0xB4AD, 0x63DB, 0xB4AB, - 0x63DC, 0xD966, 0x63DD, 0xD965, 0x63DF, 0xD963, 0x63E0, 0xD95D, - 0x63E1, 0xB4A4, 0x63E3, 0xB4A2, 0x63E4, 0xD1B9, 0x63E5, 0xD956, - 0x63E7, 0xDDB7, 0x63E8, 0xD957, 0x63E9, 0xB47B, 0x63EA, 0xB4AA, - 0x63EB, 0xDD79, 0x63ED, 0xB4A6, 0x63EE, 0xB4A7, 0x63EF, 0xD958, - 0x63F0, 0xD96F, 0x63F1, 0xDD78, 0x63F2, 0xD960, 0x63F3, 0xD95B, - 0x63F4, 0xB4A9, 0x63F5, 0xD961, 0x63F6, 0xD95E, 0x63F9, 0xB4AE, - 0x6406, 0xB770, 0x6409, 0xDD7C, 0x640A, 0xDDB1, 0x640B, 0xDDB6, - 0x640C, 0xDDAA, 0x640D, 0xB76C, 0x640E, 0xDDBB, 0x640F, 0xB769, - 0x6410, 0xDD7A, 0x6412, 0xDD7B, 0x6413, 0xB762, 0x6414, 0xB76B, - 0x6415, 0xDDA4, 0x6416, 0xB76E, 0x6417, 0xB76F, 0x6418, 0xDDA5, - 0x641A, 0xDDB2, 0x641B, 0xDDB8, 0x641C, 0xB76A, 0x641E, 0xB764, - 0x641F, 0xDDA3, 0x6420, 0xDD7D, 0x6421, 0xDDBA, 0x6422, 0xDDA8, - 0x6423, 0xDDA9, 0x6424, 0xDD7E, 0x6425, 0xDDB4, 0x6426, 0xDDAB, - 0x6427, 0xDDB5, 0x6428, 0xDDAD, 0x642A, 0xB765, 0x642B, 0xE1D9, - 0x642C, 0xB768, 0x642D, 0xB766, 0x642E, 0xDDB9, 0x642F, 0xDDB0, - 0x6430, 0xDDAC, 0x6433, 0xDDA1, 0x6434, 0xBA53, 0x6435, 0xDDAF, - 0x6436, 0xB76D, 0x6437, 0xDDA7, 0x6439, 0xDDA6, 0x643D, 0xB767, - 0x643E, 0xB763, 0x643F, 0xE1EE, 0x6440, 0xDDB3, 0x6441, 0xDDAE, - 0x6443, 0xDDA2, 0x644B, 0xE1E9, 0x644D, 0xE1DA, 0x644E, 0xE1E5, - 0x6450, 0xE1EC, 0x6451, 0xBA51, 0x6452, 0xB4AC, 0x6453, 0xE1EA, - 0x6454, 0xBA4C, 0x6458, 0xBA4B, 0x6459, 0xE1F1, 0x645B, 0xE1DB, - 0x645C, 0xE1E8, 0x645D, 0xE1DC, 0x645E, 0xE1E7, 0x645F, 0xBA4F, - 0x6460, 0xE1EB, 0x6461, 0xD962, 0x6465, 0xE1F2, 0x6466, 0xE1E3, - 0x6467, 0xBA52, 0x6468, 0xE5BA, 0x6469, 0xBCAF, 0x646B, 0xE1F0, - 0x646C, 0xE1EF, 0x646D, 0xBA54, 0x646E, 0xE5AD, 0x646F, 0xBCB0, - 0x6470, 0xE5AE, 0x6472, 0xE1DF, 0x6473, 0xE1E0, 0x6474, 0xE1DD, - 0x6475, 0xE1E2, 0x6476, 0xE1DE, 0x6477, 0xE1F3, 0x6478, 0xBA4E, - 0x6479, 0xBCB1, 0x647A, 0xBA50, 0x647B, 0xBA55, 0x647D, 0xE1E1, - 0x647F, 0xE1ED, 0x6482, 0xE1E6, 0x6485, 0xE5B1, 0x6487, 0xBA4A, - 0x6488, 0xBCB4, 0x6489, 0xE9AA, 0x648A, 0xE5B6, 0x648B, 0xE5B5, - 0x648C, 0xE5B7, 0x648F, 0xE5B4, 0x6490, 0xBCB5, 0x6492, 0xBCBB, - 0x6493, 0xBCB8, 0x6495, 0xBCB9, 0x6496, 0xE5AF, 0x6497, 0xE5B2, - 0x6498, 0xE5BC, 0x6499, 0xBCC1, 0x649A, 0xBCBF, 0x649C, 0xE5B3, - 0x649D, 0xD95A, 0x649E, 0xBCB2, 0x649F, 0xE5B9, 0x64A0, 0xE5B0, - 0x64A2, 0xBCC2, 0x64A3, 0xE5B8, 0x64A4, 0xBA4D, 0x64A5, 0xBCB7, - 0x64A6, 0xE1E4, 0x64A9, 0xBCBA, 0x64AB, 0xBCBE, 0x64AC, 0xBCC0, - 0x64AD, 0xBCBD, 0x64AE, 0xBCBC, 0x64B0, 0xBCB6, 0x64B1, 0xE5BB, - 0x64B2, 0xBCB3, 0x64B3, 0xBCC3, 0x64BB, 0xBED8, 0x64BC, 0xBED9, - 0x64BD, 0xE9A9, 0x64BE, 0xBEE2, 0x64BF, 0xBEDF, 0x64C1, 0xBED6, - 0x64C2, 0xBEDD, 0x64C3, 0xE9AB, 0x64C4, 0xBEDB, 0x64C5, 0xBED5, - 0x64C7, 0xBEDC, 0x64C9, 0xE9A8, 0x64CA, 0xC0BB, 0x64CB, 0xBED7, - 0x64CD, 0xBEDE, 0x64CE, 0xC0BA, 0x64CF, 0xE9A7, 0x64D0, 0xE9A6, - 0x64D2, 0xBEE0, 0x64D4, 0xBEE1, 0x64D6, 0xE9A5, 0x64D7, 0xE9A4, - 0x64D8, 0xC0BC, 0x64D9, 0xE9AE, 0x64DA, 0xBEDA, 0x64DB, 0xE9AC, - 0x64E0, 0xC0BD, 0x64E2, 0xC0C2, 0x64E3, 0xECEA, 0x64E4, 0xECEC, - 0x64E6, 0xC0BF, 0x64E8, 0xECED, 0x64E9, 0xECE9, 0x64EB, 0xECEB, - 0x64EC, 0xC0C0, 0x64ED, 0xC0C3, 0x64EF, 0xECE8, 0x64F0, 0xC0BE, - 0x64F1, 0xC0C1, 0x64F2, 0xC259, 0x64F3, 0xE9AD, 0x64F4, 0xC258, - 0x64F7, 0xC25E, 0x64F8, 0xEFD4, 0x64FA, 0xC25C, 0x64FB, 0xC25D, - 0x64FC, 0xEFD7, 0x64FD, 0xEFD3, 0x64FE, 0xC25A, 0x64FF, 0xEFD1, - 0x6500, 0xC36B, 0x6501, 0xEFD5, 0x6503, 0xEFD6, 0x6504, 0xEFD2, - 0x6506, 0xC25B, 0x6507, 0xF242, 0x6509, 0xF245, 0x650C, 0xF246, - 0x650D, 0xF244, 0x650E, 0xF247, 0x650F, 0xC36C, 0x6510, 0xF243, - 0x6513, 0xF44E, 0x6514, 0xC464, 0x6515, 0xF44D, 0x6516, 0xF44C, - 0x6517, 0xF44B, 0x6518, 0xC463, 0x6519, 0xC465, 0x651B, 0xF5CD, - 0x651C, 0xC4E2, 0x651D, 0xC4E1, 0x6520, 0xF6E1, 0x6521, 0xF6E0, - 0x6522, 0xF6E3, 0x6523, 0xC5CB, 0x6524, 0xC575, 0x6525, 0xF7DD, - 0x6526, 0xF6E2, 0x6529, 0xF7DC, 0x652A, 0xC5CD, 0x652B, 0xC5CC, - 0x652C, 0xC5F3, 0x652D, 0xF8A9, 0x652E, 0xF8EF, 0x652F, 0xA4E4, - 0x6532, 0xD972, 0x6533, 0xE9AF, 0x6536, 0xA6AC, 0x6537, 0xCAF7, - 0x6538, 0xA7F1, 0x6539, 0xA7EF, 0x653B, 0xA7F0, 0x653D, 0xCCC1, - 0x653E, 0xA9F1, 0x653F, 0xAC46, 0x6541, 0xCEE7, 0x6543, 0xCEE8, - 0x6545, 0xAC47, 0x6546, 0xD1CE, 0x6548, 0xAEC4, 0x6549, 0xAEC5, - 0x654A, 0xD1CD, 0x654F, 0xB1D3, 0x6551, 0xB1CF, 0x6553, 0xD5A7, - 0x6554, 0xB1D6, 0x6555, 0xB1D5, 0x6556, 0xB1CE, 0x6557, 0xB1D1, - 0x6558, 0xB1D4, 0x6559, 0xB1D0, 0x655C, 0xD976, 0x655D, 0xB1CD, - 0x655E, 0xB4AF, 0x6562, 0xB4B1, 0x6563, 0xB4B2, 0x6564, 0xD975, - 0x6565, 0xD978, 0x6566, 0xB4B0, 0x6567, 0xD973, 0x6568, 0xD977, - 0x656A, 0xD974, 0x656C, 0xB771, 0x656F, 0xDDBC, 0x6572, 0xBA56, - 0x6573, 0xE1F4, 0x6574, 0xBEE3, 0x6575, 0xBCC4, 0x6576, 0xE5BD, - 0x6577, 0xBCC5, 0x6578, 0xBCC6, 0x6579, 0xE5BF, 0x657A, 0xE5BE, - 0x657B, 0xE5C0, 0x657C, 0xE9B1, 0x657F, 0xE9B0, 0x6580, 0xECEF, - 0x6581, 0xECEE, 0x6582, 0xC0C4, 0x6583, 0xC0C5, 0x6584, 0xF248, - 0x6587, 0xA4E5, 0x658C, 0xD979, 0x6590, 0xB4B4, 0x6591, 0xB4B3, - 0x6592, 0xDDBD, 0x6594, 0xEFD8, 0x6595, 0xC4E3, 0x6596, 0xF7DE, - 0x6597, 0xA4E6, 0x6599, 0xAEC6, 0x659B, 0xB1D8, 0x659C, 0xB1D7, - 0x659D, 0xD97A, 0x659E, 0xD97B, 0x659F, 0xB772, 0x65A0, 0xE1F5, - 0x65A1, 0xBA57, 0x65A2, 0xE9B2, 0x65A4, 0xA4E7, 0x65A5, 0xA5B8, - 0x65A7, 0xA9F2, 0x65A8, 0xCCC2, 0x65AA, 0xCEE9, 0x65AB, 0xAC48, - 0x65AC, 0xB1D9, 0x65AE, 0xD97C, 0x65AF, 0xB4B5, 0x65B0, 0xB773, - 0x65B2, 0xE5C1, 0x65B3, 0xE5C2, 0x65B6, 0xECF0, 0x65B7, 0xC25F, - 0x65B8, 0xF8F0, 0x65B9, 0xA4E8, 0x65BB, 0xCCC3, 0x65BC, 0xA9F3, - 0x65BD, 0xAC49, 0x65BF, 0xCEEA, 0x65C1, 0xAEC7, 0x65C2, 0xD1D2, - 0x65C3, 0xD1D0, 0x65C4, 0xD1D1, 0x65C5, 0xAEC8, 0x65C6, 0xD1CF, - 0x65CB, 0xB1DB, 0x65CC, 0xB1DC, 0x65CD, 0xD5A8, 0x65CE, 0xB1DD, - 0x65CF, 0xB1DA, 0x65D0, 0xD97D, 0x65D2, 0xD97E, 0x65D3, 0xDDBE, - 0x65D6, 0xBA59, 0x65D7, 0xBA58, 0x65DA, 0xECF1, 0x65DB, 0xEFD9, - 0x65DD, 0xF24A, 0x65DE, 0xF249, 0x65DF, 0xF44F, 0x65E1, 0xC95E, - 0x65E2, 0xAC4A, 0x65E5, 0xA4E9, 0x65E6, 0xA5B9, 0x65E8, 0xA6AE, - 0x65E9, 0xA6AD, 0x65EC, 0xA6AF, 0x65ED, 0xA6B0, 0x65EE, 0xC9EE, - 0x65EF, 0xC9ED, 0x65F0, 0xCAF8, 0x65F1, 0xA7F2, 0x65F2, 0xCAFB, - 0x65F3, 0xCAFA, 0x65F4, 0xCAF9, 0x65F5, 0xCAFC, 0x65FA, 0xA9F4, - 0x65FB, 0xCCC9, 0x65FC, 0xCCC5, 0x65FD, 0xCCCE, 0x6600, 0xA9FB, - 0x6602, 0xA9F9, 0x6603, 0xCCCA, 0x6604, 0xCCC6, 0x6605, 0xCCCD, - 0x6606, 0xA9F8, 0x6607, 0xAA40, 0x6608, 0xCCC8, 0x6609, 0xCCC4, - 0x660A, 0xA9FE, 0x660B, 0xCCCB, 0x660C, 0xA9F7, 0x660D, 0xCCCC, - 0x660E, 0xA9FA, 0x660F, 0xA9FC, 0x6610, 0xCCD0, 0x6611, 0xCCCF, - 0x6612, 0xCCC7, 0x6613, 0xA9F6, 0x6614, 0xA9F5, 0x6615, 0xA9FD, - 0x661C, 0xCEEF, 0x661D, 0xCEF5, 0x661F, 0xAC50, 0x6620, 0xAC4D, - 0x6621, 0xCEEC, 0x6622, 0xCEF1, 0x6624, 0xAC53, 0x6625, 0xAC4B, - 0x6626, 0xCEF0, 0x6627, 0xAC4E, 0x6628, 0xAC51, 0x662B, 0xCEF3, - 0x662D, 0xAC4C, 0x662E, 0xCEF8, 0x662F, 0xAC4F, 0x6631, 0xAC52, - 0x6632, 0xCEED, 0x6633, 0xCEF2, 0x6634, 0xCEF6, 0x6635, 0xCEEE, - 0x6636, 0xCEEB, 0x6639, 0xCEF7, 0x663A, 0xCEF4, 0x6641, 0xAED0, - 0x6642, 0xAEC9, 0x6643, 0xAECC, 0x6645, 0xAECF, 0x6647, 0xD1D5, - 0x6649, 0xAECA, 0x664A, 0xD1D3, 0x664C, 0xAECE, 0x664F, 0xAECB, - 0x6651, 0xD1D6, 0x6652, 0xAECD, 0x6659, 0xD5AC, 0x665A, 0xB1DF, - 0x665B, 0xD5AB, 0x665C, 0xD5AD, 0x665D, 0xB1DE, 0x665E, 0xB1E3, - 0x665F, 0xD1D4, 0x6661, 0xD5AA, 0x6662, 0xD5AE, 0x6664, 0xB1E0, - 0x6665, 0xD5A9, 0x6666, 0xB1E2, 0x6668, 0xB1E1, 0x666A, 0xD9A7, - 0x666C, 0xD9A2, 0x666E, 0xB4B6, 0x666F, 0xB4BA, 0x6670, 0xB4B7, - 0x6671, 0xD9A5, 0x6672, 0xD9A8, 0x6674, 0xB4B8, 0x6676, 0xB4B9, - 0x6677, 0xB4BE, 0x6678, 0xDDC7, 0x6679, 0xD9A6, 0x667A, 0xB4BC, - 0x667B, 0xD9A3, 0x667C, 0xD9A1, 0x667E, 0xB4BD, 0x6680, 0xD9A4, - 0x6684, 0xB779, 0x6686, 0xDDBF, 0x6687, 0xB776, 0x6688, 0xB777, - 0x6689, 0xB775, 0x668A, 0xDDC4, 0x668B, 0xDDC3, 0x668C, 0xDDC0, - 0x668D, 0xB77B, 0x6690, 0xDDC2, 0x6691, 0xB4BB, 0x6694, 0xDDC6, - 0x6695, 0xDDC1, 0x6696, 0xB778, 0x6697, 0xB774, 0x6698, 0xB77A, - 0x6699, 0xDDC5, 0x669D, 0xBA5C, 0x669F, 0xE1F8, 0x66A0, 0xE1F7, - 0x66A1, 0xE1F6, 0x66A2, 0xBA5A, 0x66A8, 0xBA5B, 0x66A9, 0xE5C5, - 0x66AA, 0xE5C8, 0x66AB, 0xBCC8, 0x66AE, 0xBCC7, 0x66AF, 0xE5C9, - 0x66B0, 0xE5C4, 0x66B1, 0xBCCA, 0x66B2, 0xE5C6, 0x66B4, 0xBCC9, - 0x66B5, 0xE5C3, 0x66B7, 0xE5C7, 0x66B8, 0xBEE9, 0x66B9, 0xBEE6, - 0x66BA, 0xE9BB, 0x66BB, 0xE9BA, 0x66BD, 0xE9B9, 0x66BE, 0xE9B4, - 0x66C0, 0xE9B5, 0x66C4, 0xBEE7, 0x66C6, 0xBEE4, 0x66C7, 0xBEE8, - 0x66C8, 0xE9B3, 0x66C9, 0xBEE5, 0x66CA, 0xE9B6, 0x66CB, 0xE9B7, - 0x66CC, 0xE9BC, 0x66CF, 0xE9B8, 0x66D2, 0xECF2, 0x66D6, 0xC0C7, - 0x66D8, 0xEFDC, 0x66D9, 0xC0C6, 0x66DA, 0xEFDA, 0x66DB, 0xEFDB, - 0x66DC, 0xC260, 0x66DD, 0xC36E, 0x66DE, 0xF24B, 0x66E0, 0xC36D, - 0x66E3, 0xF451, 0x66E4, 0xF452, 0x66E6, 0xC466, 0x66E8, 0xF450, - 0x66E9, 0xC4E4, 0x66EB, 0xF7DF, 0x66EC, 0xC5CE, 0x66ED, 0xF8AA, - 0x66EE, 0xF8AB, 0x66F0, 0xA4EA, 0x66F2, 0xA6B1, 0x66F3, 0xA6B2, - 0x66F4, 0xA7F3, 0x66F6, 0xCCD1, 0x66F7, 0xAC54, 0x66F8, 0xAED1, - 0x66F9, 0xB1E4, 0x66FC, 0xB0D2, 0x66FE, 0xB4BF, 0x66FF, 0xB4C0, - 0x6700, 0xB3CC, 0x6701, 0xD9A9, 0x6703, 0xB77C, 0x6704, 0xE1FA, - 0x6705, 0xE1F9, 0x6708, 0xA4EB, 0x6709, 0xA6B3, 0x670A, 0xCCD2, - 0x670B, 0xAA42, 0x670D, 0xAA41, 0x670F, 0xCEF9, 0x6710, 0xCEFA, - 0x6712, 0xD1D7, 0x6713, 0xD1D8, 0x6714, 0xAED2, 0x6715, 0xAED3, - 0x6717, 0xAED4, 0x6718, 0xD5AF, 0x671B, 0xB1E6, 0x671D, 0xB4C2, - 0x671F, 0xB4C1, 0x6720, 0xDDC8, 0x6721, 0xDF7A, 0x6722, 0xE1FB, - 0x6723, 0xE9BD, 0x6726, 0xC261, 0x6727, 0xC467, 0x6728, 0xA4EC, - 0x672A, 0xA5BC, 0x672B, 0xA5BD, 0x672C, 0xA5BB, 0x672D, 0xA5BE, - 0x672E, 0xA5BA, 0x6731, 0xA6B6, 0x6733, 0xC9F6, 0x6734, 0xA6B5, - 0x6735, 0xA6B7, 0x6738, 0xC9F1, 0x6739, 0xC9F0, 0x673A, 0xC9F3, - 0x673B, 0xC9F2, 0x673C, 0xC9F5, 0x673D, 0xA6B4, 0x673E, 0xC9EF, - 0x673F, 0xC9F4, 0x6745, 0xCAFD, 0x6746, 0xA7FD, 0x6747, 0xCAFE, - 0x6748, 0xCB43, 0x6749, 0xA7FC, 0x674B, 0xCB47, 0x674C, 0xCB42, - 0x674D, 0xCB45, 0x674E, 0xA7F5, 0x674F, 0xA7F6, 0x6750, 0xA7F7, - 0x6751, 0xA7F8, 0x6753, 0xA840, 0x6755, 0xCB41, 0x6756, 0xA7FA, - 0x6757, 0xA841, 0x6759, 0xCB40, 0x675A, 0xCB46, 0x675C, 0xA7F9, - 0x675D, 0xCB44, 0x675E, 0xA7FB, 0x675F, 0xA7F4, 0x6760, 0xA7FE, - 0x676A, 0xAA57, 0x676C, 0xCCD4, 0x676D, 0xAA43, 0x676F, 0xAA4D, - 0x6770, 0xAA4E, 0x6771, 0xAA46, 0x6772, 0xAA58, 0x6773, 0xAA48, - 0x6774, 0xCCDC, 0x6775, 0xAA53, 0x6776, 0xCCD7, 0x6777, 0xAA49, - 0x6778, 0xCCE6, 0x6779, 0xCCE7, 0x677A, 0xCCDF, 0x677B, 0xCCD8, - 0x677C, 0xAA56, 0x677D, 0xCCE4, 0x677E, 0xAA51, 0x677F, 0xAA4F, - 0x6781, 0xCCE5, 0x6783, 0xCCE3, 0x6784, 0xCCDB, 0x6785, 0xCCD3, - 0x6786, 0xCCDA, 0x6787, 0xAA4A, 0x6789, 0xAA50, 0x678B, 0xAA44, - 0x678C, 0xCCDE, 0x678D, 0xCCDD, 0x678E, 0xCCD5, 0x6790, 0xAA52, - 0x6791, 0xCCE1, 0x6792, 0xCCD6, 0x6793, 0xAA55, 0x6794, 0xCCE8, - 0x6795, 0xAA45, 0x6797, 0xAA4C, 0x6798, 0xCCD9, 0x6799, 0xCCE2, - 0x679A, 0xAA54, 0x679C, 0xAA47, 0x679D, 0xAA4B, 0x679F, 0xCCE0, - 0x67AE, 0xCF5B, 0x67AF, 0xAC5C, 0x67B0, 0xAC69, 0x67B2, 0xCF56, - 0x67B3, 0xCF4C, 0x67B4, 0xAC62, 0x67B5, 0xCF4A, 0x67B6, 0xAC5B, - 0x67B7, 0xCF45, 0x67B8, 0xAC65, 0x67B9, 0xCF52, 0x67BA, 0xCEFE, - 0x67BB, 0xCF41, 0x67C0, 0xCF44, 0x67C1, 0xCEFB, 0x67C2, 0xCF51, - 0x67C3, 0xCF61, 0x67C4, 0xAC60, 0x67C5, 0xCF46, 0x67C6, 0xCF58, - 0x67C8, 0xCEFD, 0x67C9, 0xCF5F, 0x67CA, 0xCF60, 0x67CB, 0xCF63, - 0x67CC, 0xCF5A, 0x67CD, 0xCF4B, 0x67CE, 0xCF53, 0x67CF, 0xAC66, - 0x67D0, 0xAC59, 0x67D1, 0xAC61, 0x67D2, 0xAC6D, 0x67D3, 0xAC56, - 0x67D4, 0xAC58, 0x67D8, 0xCF43, 0x67D9, 0xAC6A, 0x67DA, 0xAC63, - 0x67DB, 0xCF5D, 0x67DC, 0xCF40, 0x67DD, 0xAC6C, 0x67DE, 0xAC67, - 0x67DF, 0xCF49, 0x67E2, 0xAC6B, 0x67E3, 0xCF50, 0x67E4, 0xCF48, - 0x67E5, 0xAC64, 0x67E6, 0xCF5C, 0x67E7, 0xCF54, 0x67E9, 0xAC5E, - 0x67EA, 0xCF62, 0x67EB, 0xCF47, 0x67EC, 0xAC5A, 0x67ED, 0xCF59, - 0x67EE, 0xCF4F, 0x67EF, 0xAC5F, 0x67F0, 0xCF55, 0x67F1, 0xAC57, - 0x67F2, 0xCEFC, 0x67F3, 0xAC68, 0x67F4, 0xAEE3, 0x67F5, 0xAC5D, - 0x67F6, 0xCF4E, 0x67F7, 0xCF4D, 0x67F8, 0xCF42, 0x67FA, 0xCF5E, - 0x67FC, 0xCF57, 0x67FF, 0xAC55, 0x6812, 0xD1EC, 0x6813, 0xAEEA, - 0x6814, 0xD1ED, 0x6816, 0xD1E1, 0x6817, 0xAEDF, 0x6818, 0xAEEB, - 0x681A, 0xD1DA, 0x681C, 0xD1E3, 0x681D, 0xD1EB, 0x681F, 0xD1D9, - 0x6820, 0xD1F4, 0x6821, 0xAED5, 0x6825, 0xD1F3, 0x6826, 0xD1EE, - 0x6828, 0xD1EF, 0x6829, 0xAEDD, 0x682A, 0xAEE8, 0x682B, 0xD1E5, - 0x682D, 0xD1E6, 0x682E, 0xD1F0, 0x682F, 0xD1E7, 0x6831, 0xD1E2, - 0x6832, 0xD1DC, 0x6833, 0xD1DD, 0x6834, 0xD1EA, 0x6835, 0xD1E4, - 0x6838, 0xAED6, 0x6839, 0xAEDA, 0x683A, 0xD1F2, 0x683B, 0xD1DE, - 0x683C, 0xAEE6, 0x683D, 0xAEE2, 0x6840, 0xAEE5, 0x6841, 0xAEEC, - 0x6842, 0xAEDB, 0x6843, 0xAEE7, 0x6844, 0xD1E9, 0x6845, 0xAEE9, - 0x6846, 0xAED8, 0x6848, 0xAED7, 0x6849, 0xD1DB, 0x684B, 0xD1DF, - 0x684C, 0xAEE0, 0x684D, 0xD1F1, 0x684E, 0xD1E8, 0x684F, 0xD1E0, - 0x6850, 0xAEE4, 0x6851, 0xAEE1, 0x6853, 0xAED9, 0x6854, 0xAEDC, - 0x686B, 0xD5C4, 0x686D, 0xD5B4, 0x686E, 0xD5B5, 0x686F, 0xD5B9, - 0x6871, 0xD5C8, 0x6872, 0xD5C5, 0x6874, 0xD5BE, 0x6875, 0xD5BD, - 0x6876, 0xB1ED, 0x6877, 0xD5C1, 0x6878, 0xD5D0, 0x6879, 0xD5B0, - 0x687B, 0xD5D1, 0x687C, 0xD5C3, 0x687D, 0xD5D5, 0x687E, 0xD5C9, - 0x687F, 0xB1EC, 0x6880, 0xD5C7, 0x6881, 0xB1E7, 0x6882, 0xB1FC, - 0x6883, 0xB1F2, 0x6885, 0xB1F6, 0x6886, 0xB1F5, 0x6887, 0xD5B1, - 0x6889, 0xD5CE, 0x688A, 0xD5D4, 0x688B, 0xD5CC, 0x688C, 0xD5D3, - 0x688F, 0xD5C0, 0x6890, 0xD5B2, 0x6891, 0xD5D2, 0x6892, 0xD5C2, - 0x6893, 0xB1EA, 0x6894, 0xB1F7, 0x6896, 0xD5CB, 0x6897, 0xB1F0, - 0x689B, 0xD5CA, 0x689C, 0xD5B3, 0x689D, 0xB1F8, 0x689F, 0xB1FA, - 0x68A0, 0xD5CD, 0x68A1, 0xB1FB, 0x68A2, 0xB1E9, 0x68A3, 0xD5BA, - 0x68A4, 0xD5CF, 0x68A7, 0xB1EF, 0x68A8, 0xB1F9, 0x68A9, 0xD5BC, - 0x68AA, 0xD5C6, 0x68AB, 0xD5B7, 0x68AC, 0xD5BB, 0x68AD, 0xB1F4, - 0x68AE, 0xD5B6, 0x68AF, 0xB1E8, 0x68B0, 0xB1F1, 0x68B1, 0xB1EE, - 0x68B2, 0xD5BF, 0x68B3, 0xAEDE, 0x68B4, 0xD9C0, 0x68B5, 0xB1EB, - 0x68C4, 0xB1F3, 0x68C6, 0xD9C3, 0x68C7, 0xD9D9, 0x68C8, 0xD9CE, - 0x68C9, 0xB4D6, 0x68CB, 0xB4D1, 0x68CC, 0xD9BD, 0x68CD, 0xB4D2, - 0x68CE, 0xD9CD, 0x68D0, 0xD9C6, 0x68D1, 0xD9D3, 0x68D2, 0xB4CE, - 0x68D3, 0xD9AB, 0x68D4, 0xD9D5, 0x68D5, 0xB4C4, 0x68D6, 0xD9B3, - 0x68D7, 0xB4C7, 0x68D8, 0xB4C6, 0x68DA, 0xB4D7, 0x68DC, 0xD9AD, - 0x68DD, 0xD9CF, 0x68DE, 0xD9D0, 0x68DF, 0xB4C9, 0x68E0, 0xB4C5, - 0x68E1, 0xD9BB, 0x68E3, 0xB4D0, 0x68E4, 0xD9B6, 0x68E6, 0xD9D1, - 0x68E7, 0xB4CC, 0x68E8, 0xD9C9, 0x68E9, 0xD9D6, 0x68EA, 0xD9B0, - 0x68EB, 0xD9B5, 0x68EC, 0xD9AF, 0x68EE, 0xB4CB, 0x68EF, 0xD9C2, - 0x68F0, 0xDDDE, 0x68F1, 0xD9B1, 0x68F2, 0xB4CF, 0x68F3, 0xD9BA, - 0x68F4, 0xD9D2, 0x68F5, 0xB4CA, 0x68F6, 0xD9B7, 0x68F7, 0xD9B4, - 0x68F8, 0xD9C5, 0x68F9, 0xB4CD, 0x68FA, 0xB4C3, 0x68FB, 0xB4D9, - 0x68FC, 0xD9C8, 0x68FD, 0xD9C7, 0x6904, 0xD9AC, 0x6905, 0xB4C8, - 0x6906, 0xD9D4, 0x6907, 0xD9BC, 0x6908, 0xD9BE, 0x690A, 0xD9CB, - 0x690B, 0xD9CA, 0x690C, 0xD9AA, 0x690D, 0xB4D3, 0x690E, 0xB4D5, - 0x690F, 0xD9B2, 0x6910, 0xD9B9, 0x6911, 0xD9C1, 0x6912, 0xB4D4, - 0x6913, 0xD9B8, 0x6914, 0xD9C4, 0x6915, 0xD9D7, 0x6917, 0xD9CC, - 0x6925, 0xD9D8, 0x692A, 0xD9AE, 0x692F, 0xDDF2, 0x6930, 0xB7A6, - 0x6932, 0xDDF0, 0x6933, 0xDDDB, 0x6934, 0xDDE0, 0x6935, 0xDDD9, - 0x6937, 0xDDEC, 0x6938, 0xDDCB, 0x6939, 0xDDD2, 0x693B, 0xDDEA, - 0x693C, 0xDDF4, 0x693D, 0xDDDC, 0x693F, 0xDDCF, 0x6940, 0xDDE2, - 0x6941, 0xDDE7, 0x6942, 0xDDD3, 0x6944, 0xDDE4, 0x6945, 0xDDD0, - 0x6948, 0xDDD7, 0x6949, 0xDDD8, 0x694A, 0xB7A8, 0x694B, 0xDDEB, - 0x694C, 0xDDE9, 0x694E, 0xDDCC, 0x694F, 0xDDEE, 0x6951, 0xDDEF, - 0x6952, 0xDDF1, 0x6953, 0xB7AC, 0x6954, 0xB7A4, 0x6956, 0xD5B8, - 0x6957, 0xDDD4, 0x6958, 0xDDE6, 0x6959, 0xDDD5, 0x695A, 0xB7A1, - 0x695B, 0xB7B1, 0x695C, 0xDDED, 0x695D, 0xB7AF, 0x695E, 0xB7AB, - 0x695F, 0xDDCA, 0x6960, 0xB7A3, 0x6962, 0xDDCD, 0x6963, 0xB7B0, - 0x6965, 0xDDDD, 0x6966, 0xDDC9, 0x6968, 0xB7A9, 0x6969, 0xDDE1, - 0x696A, 0xDDD1, 0x696B, 0xB7AA, 0x696C, 0xDDDA, 0x696D, 0xB77E, - 0x696E, 0xB4D8, 0x696F, 0xDDE3, 0x6970, 0xD9BF, 0x6971, 0xDDCE, - 0x6974, 0xDDE8, 0x6975, 0xB7A5, 0x6976, 0xDDE5, 0x6977, 0xB7A2, - 0x6978, 0xDDDF, 0x6979, 0xB7AD, 0x697A, 0xDDD6, 0x697B, 0xDDF3, - 0x6982, 0xB7A7, 0x6983, 0xDEC6, 0x6986, 0xB7AE, 0x698D, 0xE24A, - 0x698E, 0xE248, 0x6990, 0xE25E, 0x6991, 0xE246, 0x6993, 0xE258, - 0x6994, 0xB77D, 0x6995, 0xBA5F, 0x6996, 0xE242, 0x6997, 0xE25D, - 0x6999, 0xE247, 0x699A, 0xE255, 0x699B, 0xBA64, 0x699C, 0xBA5D, - 0x699E, 0xE25B, 0x69A0, 0xE240, 0x69A1, 0xE25A, 0x69A3, 0xBA6F, - 0x69A4, 0xE251, 0x69A5, 0xE261, 0x69A6, 0xBA6D, 0x69A7, 0xE249, - 0x69A8, 0xBA5E, 0x69A9, 0xE24B, 0x69AA, 0xE259, 0x69AB, 0xBA67, - 0x69AC, 0xE244, 0x69AD, 0xBA6B, 0x69AE, 0xBA61, 0x69AF, 0xE24D, - 0x69B0, 0xE243, 0x69B1, 0xE1FC, 0x69B3, 0xE257, 0x69B4, 0xBA68, - 0x69B5, 0xE260, 0x69B6, 0xE1FD, 0x69B7, 0xBA65, 0x69B9, 0xE253, - 0x69BB, 0xBA66, 0x69BC, 0xE245, 0x69BD, 0xE250, 0x69BE, 0xE24C, - 0x69BF, 0xE24E, 0x69C1, 0xBA60, 0x69C2, 0xE25F, 0x69C3, 0xBA6E, - 0x69C4, 0xE24F, 0x69C6, 0xE262, 0x69C9, 0xE1FE, 0x69CA, 0xE254, - 0x69CB, 0xBA63, 0x69CC, 0xBA6C, 0x69CD, 0xBA6A, 0x69CE, 0xE241, - 0x69CF, 0xE256, 0x69D0, 0xBA69, 0x69D3, 0xBA62, 0x69D4, 0xE252, - 0x69D9, 0xE25C, 0x69E2, 0xE5D5, 0x69E4, 0xE5D1, 0x69E5, 0xE5CD, - 0x69E6, 0xE5E1, 0x69E7, 0xE5DE, 0x69E8, 0xBCCD, 0x69EB, 0xE5E5, - 0x69EC, 0xE5D4, 0x69ED, 0xBCD8, 0x69EE, 0xE5DB, 0x69F1, 0xE5D0, - 0x69F2, 0xE5DA, 0x69F3, 0xBCD5, 0x69F4, 0xE5EE, 0x69F6, 0xE5EB, - 0x69F7, 0xE5DD, 0x69F8, 0xE5CE, 0x69FB, 0xE5E2, 0x69FC, 0xE5E4, - 0x69FD, 0xBCD1, 0x69FE, 0xE5D8, 0x69FF, 0xE5D3, 0x6A00, 0xE5CA, - 0x6A01, 0xBCCE, 0x6A02, 0xBCD6, 0x6A04, 0xE5E7, 0x6A05, 0xBCD7, - 0x6A06, 0xE5CB, 0x6A07, 0xE5ED, 0x6A08, 0xE5E0, 0x6A09, 0xE5E6, - 0x6A0A, 0xBCD4, 0x6A0D, 0xE5E3, 0x6A0F, 0xE5EA, 0x6A11, 0xBCD9, - 0x6A13, 0xBCD3, 0x6A14, 0xE5DC, 0x6A15, 0xE5CF, 0x6A16, 0xE5EF, - 0x6A17, 0xE5CC, 0x6A18, 0xE5E8, 0x6A19, 0xBCD0, 0x6A1B, 0xE5D6, - 0x6A1D, 0xE5D7, 0x6A1E, 0xBCCF, 0x6A1F, 0xBCCC, 0x6A20, 0xE5D2, - 0x6A21, 0xBCD2, 0x6A23, 0xBCCB, 0x6A25, 0xE5E9, 0x6A26, 0xE5EC, - 0x6A27, 0xE5D9, 0x6A28, 0xE9CA, 0x6A32, 0xE9C2, 0x6A34, 0xE9BE, - 0x6A35, 0xBEF6, 0x6A38, 0xBEEB, 0x6A39, 0xBEF0, 0x6A3A, 0xBEEC, - 0x6A3B, 0xE9CC, 0x6A3C, 0xE9D7, 0x6A3D, 0xBEEA, 0x6A3E, 0xE9C4, - 0x6A3F, 0xE9CD, 0x6A40, 0xE5DF, 0x6A41, 0xE9CE, 0x6A44, 0xBEF1, - 0x6A46, 0xE9DD, 0x6A47, 0xBEF5, 0x6A48, 0xBEF8, 0x6A49, 0xE9C0, - 0x6A4B, 0xBEF4, 0x6A4D, 0xE9DB, 0x6A4E, 0xE9DC, 0x6A4F, 0xE9D2, - 0x6A50, 0xE9D1, 0x6A51, 0xE9C9, 0x6A54, 0xE9D3, 0x6A55, 0xE9DA, - 0x6A56, 0xE9D9, 0x6A58, 0xBEEF, 0x6A59, 0xBEED, 0x6A5A, 0xE9CB, - 0x6A5B, 0xE9C8, 0x6A5D, 0xE9C5, 0x6A5E, 0xE9D8, 0x6A5F, 0xBEF7, - 0x6A60, 0xE9D6, 0x6A61, 0xBEF3, 0x6A62, 0xBEF2, 0x6A64, 0xE9D0, - 0x6A66, 0xE9BF, 0x6A67, 0xE9C1, 0x6A68, 0xE9C3, 0x6A69, 0xE9D5, - 0x6A6A, 0xE9CF, 0x6A6B, 0xBEEE, 0x6A6D, 0xE9C6, 0x6A6F, 0xE9D4, - 0x6A76, 0xE9C7, 0x6A7E, 0xC0CF, 0x6A7F, 0xED45, 0x6A80, 0xC0C8, - 0x6A81, 0xECF5, 0x6A83, 0xED41, 0x6A84, 0xC0CA, 0x6A85, 0xED48, - 0x6A87, 0xECFC, 0x6A89, 0xECF7, 0x6A8C, 0xED49, 0x6A8D, 0xECF3, - 0x6A8E, 0xECFE, 0x6A90, 0xC0D1, 0x6A91, 0xED44, 0x6A92, 0xED4A, - 0x6A93, 0xECFD, 0x6A94, 0xC0C9, 0x6A95, 0xED40, 0x6A96, 0xECF4, - 0x6A97, 0xC0D0, 0x6A9A, 0xED47, 0x6A9B, 0xECF9, 0x6A9C, 0xC0CC, - 0x6A9E, 0xECFB, 0x6A9F, 0xECF8, 0x6AA0, 0xC0D2, 0x6AA1, 0xECFA, - 0x6AA2, 0xC0CB, 0x6AA3, 0xC0CE, 0x6AA4, 0xED43, 0x6AA5, 0xECF6, - 0x6AA6, 0xED46, 0x6AA8, 0xED42, 0x6AAC, 0xC263, 0x6AAD, 0xEFE7, - 0x6AAE, 0xC268, 0x6AAF, 0xC269, 0x6AB3, 0xC262, 0x6AB4, 0xEFE6, - 0x6AB6, 0xEFE3, 0x6AB7, 0xEFE4, 0x6AB8, 0xC266, 0x6AB9, 0xEFDE, - 0x6ABA, 0xEFE2, 0x6ABB, 0xC265, 0x6ABD, 0xEFDF, 0x6AC2, 0xC267, - 0x6AC3, 0xC264, 0x6AC5, 0xEFDD, 0x6AC6, 0xEFE1, 0x6AC7, 0xEFE5, - 0x6ACB, 0xF251, 0x6ACC, 0xF24E, 0x6ACD, 0xF257, 0x6ACF, 0xF256, - 0x6AD0, 0xF254, 0x6AD1, 0xF24F, 0x6AD3, 0xC372, 0x6AD9, 0xF250, - 0x6ADA, 0xC371, 0x6ADB, 0xC0CD, 0x6ADC, 0xF253, 0x6ADD, 0xC370, - 0x6ADE, 0xF258, 0x6ADF, 0xF252, 0x6AE0, 0xF24D, 0x6AE1, 0xEFE0, - 0x6AE5, 0xC36F, 0x6AE7, 0xF24C, 0x6AE8, 0xF456, 0x6AEA, 0xF455, - 0x6AEB, 0xF255, 0x6AEC, 0xC468, 0x6AEE, 0xF459, 0x6AEF, 0xF45A, - 0x6AF0, 0xF454, 0x6AF1, 0xF458, 0x6AF3, 0xF453, 0x6AF8, 0xF5D1, - 0x6AF9, 0xF457, 0x6AFA, 0xC4E7, 0x6AFB, 0xC4E5, 0x6AFC, 0xF5CF, - 0x6B00, 0xF5D2, 0x6B02, 0xF5CE, 0x6B03, 0xF5D0, 0x6B04, 0xC4E6, - 0x6B08, 0xF6E5, 0x6B09, 0xF6E6, 0x6B0A, 0xC576, 0x6B0B, 0xF6E4, - 0x6B0F, 0xF7E2, 0x6B10, 0xC5CF, 0x6B11, 0xF7E0, 0x6B12, 0xF7E1, - 0x6B13, 0xF8AC, 0x6B16, 0xC656, 0x6B17, 0xF8F3, 0x6B18, 0xF8F1, - 0x6B19, 0xF8F2, 0x6B1A, 0xF8F4, 0x6B1E, 0xF9BB, 0x6B20, 0xA4ED, - 0x6B21, 0xA6B8, 0x6B23, 0xAA59, 0x6B25, 0xCCE9, 0x6B28, 0xCF64, - 0x6B2C, 0xD1F5, 0x6B2D, 0xD1F7, 0x6B2F, 0xD1F6, 0x6B31, 0xD1F8, - 0x6B32, 0xB1FD, 0x6B33, 0xD5D7, 0x6B34, 0xD1F9, 0x6B36, 0xD5D6, - 0x6B37, 0xD5D8, 0x6B38, 0xD5D9, 0x6B39, 0xD9DA, 0x6B3A, 0xB4DB, - 0x6B3B, 0xD9DB, 0x6B3C, 0xD9DD, 0x6B3D, 0xB4DC, 0x6B3E, 0xB4DA, - 0x6B3F, 0xD9DC, 0x6B41, 0xDDFA, 0x6B42, 0xDDF8, 0x6B43, 0xDDF7, - 0x6B45, 0xDDF6, 0x6B46, 0xDDF5, 0x6B47, 0xB7B2, 0x6B48, 0xDDF9, - 0x6B49, 0xBA70, 0x6B4A, 0xE263, 0x6B4B, 0xE265, 0x6B4C, 0xBA71, - 0x6B4D, 0xE264, 0x6B4E, 0xBCDB, 0x6B50, 0xBCDA, 0x6B51, 0xE5F0, - 0x6B54, 0xE9DF, 0x6B55, 0xE9DE, 0x6B56, 0xE9E0, 0x6B59, 0xBEF9, - 0x6B5B, 0xED4B, 0x6B5C, 0xC0D3, 0x6B5E, 0xEFE8, 0x6B5F, 0xC26A, - 0x6B60, 0xF259, 0x6B61, 0xC577, 0x6B62, 0xA4EE, 0x6B63, 0xA5BF, - 0x6B64, 0xA6B9, 0x6B65, 0xA842, 0x6B66, 0xAA5A, 0x6B67, 0xAA5B, - 0x6B6A, 0xAC6E, 0x6B6D, 0xD1FA, 0x6B72, 0xB7B3, 0x6B76, 0xE6D1, - 0x6B77, 0xBEFA, 0x6B78, 0xC26B, 0x6B79, 0xA4EF, 0x6B7B, 0xA6BA, - 0x6B7E, 0xCCEB, 0x6B7F, 0xAA5C, 0x6B80, 0xCCEA, 0x6B82, 0xCF65, - 0x6B83, 0xAC6F, 0x6B84, 0xCF66, 0x6B86, 0xAC70, 0x6B88, 0xD1FC, - 0x6B89, 0xAEEE, 0x6B8A, 0xAEED, 0x6B8C, 0xD5DE, 0x6B8D, 0xD5DC, - 0x6B8E, 0xD5DD, 0x6B8F, 0xD5DB, 0x6B91, 0xD5DA, 0x6B94, 0xD9DE, - 0x6B95, 0xD9E1, 0x6B96, 0xB4DE, 0x6B97, 0xD9DF, 0x6B98, 0xB4DD, - 0x6B99, 0xD9E0, 0x6B9B, 0xDDFB, 0x6B9E, 0xE266, 0x6B9F, 0xE267, - 0x6BA0, 0xE268, 0x6BA2, 0xE5F3, 0x6BA3, 0xE5F2, 0x6BA4, 0xBCDC, - 0x6BA5, 0xE5F1, 0x6BA6, 0xE5F4, 0x6BA7, 0xE9E1, 0x6BAA, 0xE9E2, - 0x6BAB, 0xE9E3, 0x6BAD, 0xED4C, 0x6BAE, 0xC0D4, 0x6BAF, 0xC26C, - 0x6BB0, 0xF25A, 0x6BB2, 0xC4E8, 0x6BB3, 0xC95F, 0x6BB5, 0xAC71, - 0x6BB6, 0xCF67, 0x6BB7, 0xAEEF, 0x6BBA, 0xB1FE, 0x6BBC, 0xB4DF, - 0x6BBD, 0xD9E2, 0x6BBF, 0xB7B5, 0x6BC0, 0xB7B4, 0x6BC3, 0xE269, - 0x6BC4, 0xE26A, 0x6BC5, 0xBCDD, 0x6BC6, 0xBCDE, 0x6BC7, 0xE9E5, - 0x6BC8, 0xE9E4, 0x6BC9, 0xEFE9, 0x6BCA, 0xF7E3, 0x6BCB, 0xA4F0, - 0x6BCC, 0xC960, 0x6BCD, 0xA5C0, 0x6BCF, 0xA843, 0x6BD0, 0xCB48, - 0x6BD2, 0xAC72, 0x6BD3, 0xB7B6, 0x6BD4, 0xA4F1, 0x6BD6, 0xCF68, - 0x6BD7, 0xAC73, 0x6BD8, 0xCF69, 0x6BDA, 0xC0D5, 0x6BDB, 0xA4F2, - 0x6BDE, 0xCCEC, 0x6BE0, 0xCF6A, 0x6BE2, 0xD242, 0x6BE3, 0xD241, - 0x6BE4, 0xD1FE, 0x6BE6, 0xD1FD, 0x6BE7, 0xD243, 0x6BE8, 0xD240, - 0x6BEB, 0xB240, 0x6BEC, 0xB241, 0x6BEF, 0xB4E0, 0x6BF0, 0xD9E3, - 0x6BF2, 0xD9E4, 0x6BF3, 0xD9E5, 0x6BF7, 0xDE41, 0x6BF8, 0xDE42, - 0x6BF9, 0xDE40, 0x6BFB, 0xDDFD, 0x6BFC, 0xDDFE, 0x6BFD, 0xB7B7, - 0x6BFE, 0xE26B, 0x6BFF, 0xE5F7, 0x6C00, 0xE5F6, 0x6C01, 0xE5F5, - 0x6C02, 0xE5F8, 0x6C03, 0xE9E7, 0x6C04, 0xE9E6, 0x6C05, 0xBEFB, - 0x6C06, 0xE9E8, 0x6C08, 0xC0D6, 0x6C09, 0xED4D, 0x6C0B, 0xEFEA, - 0x6C0C, 0xF25B, 0x6C0D, 0xF6E7, 0x6C0F, 0xA4F3, 0x6C10, 0xA5C2, - 0x6C11, 0xA5C1, 0x6C13, 0xAA5D, 0x6C14, 0xC961, 0x6C15, 0xC97E, - 0x6C16, 0xA6BB, 0x6C18, 0xC9F7, 0x6C19, 0xCB49, 0x6C1A, 0xCB4A, - 0x6C1B, 0xAA5E, 0x6C1D, 0xCCED, 0x6C1F, 0xAC74, 0x6C20, 0xCF6B, - 0x6C21, 0xCF6C, 0x6C23, 0xAEF0, 0x6C24, 0xAEF4, 0x6C25, 0xD244, - 0x6C26, 0xAEF3, 0x6C27, 0xAEF1, 0x6C28, 0xAEF2, 0x6C2A, 0xD5DF, - 0x6C2B, 0xB242, 0x6C2C, 0xB4E3, 0x6C2E, 0xB4E1, 0x6C2F, 0xB4E2, - 0x6C30, 0xD9E6, 0x6C33, 0xBA72, 0x6C34, 0xA4F4, 0x6C36, 0xC9A1, - 0x6C38, 0xA5C3, 0x6C3B, 0xC9A4, 0x6C3E, 0xA5C6, 0x6C3F, 0xC9A3, - 0x6C40, 0xA5C5, 0x6C41, 0xA5C4, 0x6C42, 0xA844, 0x6C43, 0xC9A2, - 0x6C46, 0xC9F8, 0x6C4A, 0xC9FC, 0x6C4B, 0xC9FE, 0x6C4C, 0xCA40, - 0x6C4D, 0xA6C5, 0x6C4E, 0xA6C6, 0x6C4F, 0xC9FB, 0x6C50, 0xA6C1, - 0x6C52, 0xC9F9, 0x6C54, 0xC9FD, 0x6C55, 0xA6C2, 0x6C57, 0xA6BD, - 0x6C59, 0xA6BE, 0x6C5B, 0xA6C4, 0x6C5C, 0xC9FA, 0x6C5D, 0xA6BC, - 0x6C5E, 0xA845, 0x6C5F, 0xA6BF, 0x6C60, 0xA6C0, 0x6C61, 0xA6C3, - 0x6C65, 0xCB5B, 0x6C66, 0xCB59, 0x6C67, 0xCB4C, 0x6C68, 0xA851, - 0x6C69, 0xCB53, 0x6C6A, 0xA84C, 0x6C6B, 0xCB4D, 0x6C6D, 0xCB55, - 0x6C6F, 0xCB52, 0x6C70, 0xA84F, 0x6C71, 0xCB51, 0x6C72, 0xA856, - 0x6C73, 0xCB5A, 0x6C74, 0xA858, 0x6C76, 0xA85A, 0x6C78, 0xCB4B, - 0x6C7A, 0xA84D, 0x6C7B, 0xCB5C, 0x6C7D, 0xA854, 0x6C7E, 0xA857, - 0x6C80, 0xCD45, 0x6C81, 0xA847, 0x6C82, 0xA85E, 0x6C83, 0xA855, - 0x6C84, 0xCB4E, 0x6C85, 0xA84A, 0x6C86, 0xA859, 0x6C87, 0xCB56, - 0x6C88, 0xA848, 0x6C89, 0xA849, 0x6C8A, 0xCD43, 0x6C8B, 0xCB4F, - 0x6C8C, 0xA850, 0x6C8D, 0xA85B, 0x6C8E, 0xCB5D, 0x6C8F, 0xCB50, - 0x6C90, 0xA84E, 0x6C92, 0xA853, 0x6C93, 0xCCEE, 0x6C94, 0xA85C, - 0x6C95, 0xCB57, 0x6C96, 0xA852, 0x6C98, 0xA85D, 0x6C99, 0xA846, - 0x6C9A, 0xCB54, 0x6C9B, 0xA84B, 0x6C9C, 0xCB58, 0x6C9D, 0xCD44, - 0x6CAB, 0xAA6A, 0x6CAC, 0xAA7A, 0x6CAD, 0xCCF5, 0x6CAE, 0xAA71, - 0x6CB0, 0xCD4B, 0x6CB1, 0xAA62, 0x6CB3, 0xAA65, 0x6CB4, 0xCD42, - 0x6CB6, 0xCCF3, 0x6CB7, 0xCCF7, 0x6CB8, 0xAA6D, 0x6CB9, 0xAA6F, - 0x6CBA, 0xCCFA, 0x6CBB, 0xAA76, 0x6CBC, 0xAA68, 0x6CBD, 0xAA66, - 0x6CBE, 0xAA67, 0x6CBF, 0xAA75, 0x6CC0, 0xCD47, 0x6CC1, 0xAA70, - 0x6CC2, 0xCCF9, 0x6CC3, 0xCCFB, 0x6CC4, 0xAA6E, 0x6CC5, 0xAA73, - 0x6CC6, 0xCCFC, 0x6CC7, 0xCD4A, 0x6CC9, 0xAC75, 0x6CCA, 0xAA79, - 0x6CCC, 0xAA63, 0x6CCD, 0xCD49, 0x6CCF, 0xCD4D, 0x6CD0, 0xCCF8, - 0x6CD1, 0xCD4F, 0x6CD2, 0xCD40, 0x6CD3, 0xAA6C, 0x6CD4, 0xCCF4, - 0x6CD5, 0xAA6B, 0x6CD6, 0xAA7D, 0x6CD7, 0xAA72, 0x6CD9, 0xCCF2, - 0x6CDA, 0xCF75, 0x6CDB, 0xAA78, 0x6CDC, 0xAA7C, 0x6CDD, 0xCD41, - 0x6CDE, 0xCD46, 0x6CE0, 0xAA7E, 0x6CE1, 0xAA77, 0x6CE2, 0xAA69, - 0x6CE3, 0xAA5F, 0x6CE5, 0xAA64, 0x6CE7, 0xCCF6, 0x6CE8, 0xAA60, - 0x6CE9, 0xCD4E, 0x6CEB, 0xCCF0, 0x6CEC, 0xCCEF, 0x6CED, 0xCCFD, - 0x6CEE, 0xCCF1, 0x6CEF, 0xAA7B, 0x6CF0, 0xAEF5, 0x6CF1, 0xAA74, - 0x6CF2, 0xCCFE, 0x6CF3, 0xAA61, 0x6CF5, 0xACA6, 0x6CF9, 0xCD4C, - 0x6D00, 0xCF7C, 0x6D01, 0xCFA1, 0x6D03, 0xCFA4, 0x6D04, 0xCF77, - 0x6D07, 0xCFA7, 0x6D08, 0xCFAA, 0x6D09, 0xCFAC, 0x6D0A, 0xCF74, - 0x6D0B, 0xAC76, 0x6D0C, 0xAC7B, 0x6D0D, 0xD249, 0x6D0E, 0xACAD, - 0x6D0F, 0xCFA5, 0x6D10, 0xCFAD, 0x6D11, 0xCF7B, 0x6D12, 0xCF73, - 0x6D16, 0xD264, 0x6D17, 0xAC7E, 0x6D18, 0xCFA2, 0x6D19, 0xCF78, - 0x6D1A, 0xCF7A, 0x6D1B, 0xACA5, 0x6D1D, 0xCF7D, 0x6D1E, 0xAC7D, - 0x6D1F, 0xCF70, 0x6D20, 0xCFA8, 0x6D22, 0xCFAB, 0x6D25, 0xAC7A, - 0x6D27, 0xACA8, 0x6D28, 0xCF6D, 0x6D29, 0xACAA, 0x6D2A, 0xAC78, - 0x6D2B, 0xACAE, 0x6D2C, 0xCFA9, 0x6D2D, 0xCF6F, 0x6D2E, 0xACAB, - 0x6D2F, 0xD25E, 0x6D30, 0xCD48, 0x6D31, 0xAC7C, 0x6D32, 0xAC77, - 0x6D33, 0xCF76, 0x6D34, 0xCF6E, 0x6D35, 0xACAC, 0x6D36, 0xACA4, - 0x6D37, 0xCFA3, 0x6D38, 0xACA9, 0x6D39, 0xACA7, 0x6D3A, 0xCF79, - 0x6D3B, 0xACA1, 0x6D3C, 0xCF71, 0x6D3D, 0xACA2, 0x6D3E, 0xACA3, - 0x6D3F, 0xCF72, 0x6D40, 0xCFA6, 0x6D41, 0xAC79, 0x6D42, 0xCF7E, - 0x6D58, 0xD24C, 0x6D59, 0xAEFD, 0x6D5A, 0xAF43, 0x6D5E, 0xD255, - 0x6D5F, 0xD25B, 0x6D60, 0xD257, 0x6D61, 0xD24A, 0x6D62, 0xD24D, - 0x6D63, 0xD246, 0x6D64, 0xD247, 0x6D65, 0xAF4A, 0x6D66, 0xAEFA, - 0x6D67, 0xD256, 0x6D68, 0xD25F, 0x6D69, 0xAF45, 0x6D6A, 0xAEF6, - 0x6D6C, 0xAF40, 0x6D6D, 0xD24E, 0x6D6E, 0xAF42, 0x6D6F, 0xD24F, - 0x6D70, 0xD259, 0x6D74, 0xAF44, 0x6D75, 0xD268, 0x6D76, 0xD248, - 0x6D77, 0xAEFC, 0x6D78, 0xAEFB, 0x6D79, 0xAF48, 0x6D7A, 0xD245, - 0x6D7B, 0xD266, 0x6D7C, 0xD25A, 0x6D7D, 0xD267, 0x6D7E, 0xD261, - 0x6D7F, 0xD253, 0x6D80, 0xD262, 0x6D82, 0xD25C, 0x6D83, 0xD265, - 0x6D84, 0xD263, 0x6D85, 0xAF49, 0x6D86, 0xD254, 0x6D87, 0xAEF9, - 0x6D88, 0xAEF8, 0x6D89, 0xAF41, 0x6D8A, 0xAF47, 0x6D8B, 0xD260, - 0x6D8C, 0xAF46, 0x6D8D, 0xD251, 0x6D8E, 0xB243, 0x6D90, 0xD269, - 0x6D91, 0xD250, 0x6D92, 0xD24B, 0x6D93, 0xAEFE, 0x6D94, 0xAF4B, - 0x6D95, 0xAEF7, 0x6D97, 0xD258, 0x6D98, 0xD25D, 0x6DAA, 0xB265, - 0x6DAB, 0xD5E1, 0x6DAC, 0xD5E5, 0x6DAE, 0xB252, 0x6DAF, 0xB250, - 0x6DB2, 0xB247, 0x6DB3, 0xD5E3, 0x6DB4, 0xD5E2, 0x6DB5, 0xB25B, - 0x6DB7, 0xD5E8, 0x6DB8, 0xB255, 0x6DBA, 0xD5FA, 0x6DBB, 0xD647, - 0x6DBC, 0xB244, 0x6DBD, 0xD5F7, 0x6DBE, 0xD5F0, 0x6DBF, 0xB267, - 0x6DC0, 0xD5E0, 0x6DC2, 0xD5FC, 0x6DC4, 0xB264, 0x6DC5, 0xB258, - 0x6DC6, 0xB263, 0x6DC7, 0xB24E, 0x6DC8, 0xD5EC, 0x6DC9, 0xD5FE, - 0x6DCA, 0xD5F6, 0x6DCB, 0xB24F, 0x6DCC, 0xB249, 0x6DCD, 0xD645, - 0x6DCF, 0xD5FD, 0x6DD0, 0xD640, 0x6DD1, 0xB251, 0x6DD2, 0xB259, - 0x6DD3, 0xD642, 0x6DD4, 0xD5EA, 0x6DD5, 0xD5FB, 0x6DD6, 0xD5EF, - 0x6DD7, 0xD644, 0x6DD8, 0xB25E, 0x6DD9, 0xB246, 0x6DDA, 0xB25C, - 0x6DDB, 0xD5F4, 0x6DDC, 0xD5F2, 0x6DDD, 0xD5F3, 0x6DDE, 0xB253, - 0x6DDF, 0xD5EE, 0x6DE0, 0xD5ED, 0x6DE1, 0xB248, 0x6DE2, 0xD5E7, - 0x6DE3, 0xD646, 0x6DE4, 0xB24A, 0x6DE5, 0xD5F1, 0x6DE6, 0xB268, - 0x6DE8, 0xB262, 0x6DE9, 0xD5E6, 0x6DEA, 0xB25F, 0x6DEB, 0xB25D, - 0x6DEC, 0xB266, 0x6DED, 0xD5F8, 0x6DEE, 0xB261, 0x6DEF, 0xD252, - 0x6DF0, 0xD5F9, 0x6DF1, 0xB260, 0x6DF2, 0xD641, 0x6DF3, 0xB245, - 0x6DF4, 0xD5F5, 0x6DF5, 0xB257, 0x6DF6, 0xD5E9, 0x6DF7, 0xB256, - 0x6DF9, 0xB254, 0x6DFA, 0xB24C, 0x6DFB, 0xB24B, 0x6DFC, 0xD9E7, - 0x6DFD, 0xD643, 0x6E00, 0xD5EB, 0x6E03, 0xD9FC, 0x6E05, 0xB24D, - 0x6E19, 0xB541, 0x6E1A, 0xB25A, 0x6E1B, 0xB4EE, 0x6E1C, 0xD9F6, - 0x6E1D, 0xB4FC, 0x6E1F, 0xD9EA, 0x6E20, 0xB4EB, 0x6E21, 0xB4E7, - 0x6E22, 0xDA49, 0x6E23, 0xB4ED, 0x6E24, 0xB4F1, 0x6E25, 0xB4EC, - 0x6E26, 0xB4F5, 0x6E27, 0xDA4D, 0x6E28, 0xDA44, 0x6E2B, 0xD9F1, - 0x6E2C, 0xB4FA, 0x6E2D, 0xB4F4, 0x6E2E, 0xD9FD, 0x6E2F, 0xB4E4, - 0x6E30, 0xDA4A, 0x6E31, 0xDA43, 0x6E32, 0xB4E8, 0x6E33, 0xD9F7, - 0x6E34, 0xB4F7, 0x6E35, 0xDA55, 0x6E36, 0xDA56, 0x6E38, 0xB4E5, - 0x6E39, 0xDA48, 0x6E3A, 0xB4F9, 0x6E3B, 0xD9FB, 0x6E3C, 0xD9ED, - 0x6E3D, 0xD9EE, 0x6E3E, 0xB4FD, 0x6E3F, 0xD9F2, 0x6E40, 0xD9F9, - 0x6E41, 0xD9F3, 0x6E43, 0xB4FB, 0x6E44, 0xB544, 0x6E45, 0xD9EF, - 0x6E46, 0xD9E8, 0x6E47, 0xD9E9, 0x6E49, 0xD9EB, 0x6E4A, 0xB4EA, - 0x6E4B, 0xD9F8, 0x6E4D, 0xB4F8, 0x6E4E, 0xB542, 0x6E51, 0xD9FA, - 0x6E52, 0xDA53, 0x6E53, 0xDA4B, 0x6E54, 0xB4E6, 0x6E55, 0xDA51, - 0x6E56, 0xB4F2, 0x6E58, 0xB4F0, 0x6E5A, 0xDA57, 0x6E5B, 0xB4EF, - 0x6E5C, 0xDA41, 0x6E5D, 0xD9F4, 0x6E5E, 0xD9FE, 0x6E5F, 0xB547, - 0x6E60, 0xDA45, 0x6E61, 0xDA42, 0x6E62, 0xD9F0, 0x6E63, 0xB543, - 0x6E64, 0xDA4F, 0x6E65, 0xDA4C, 0x6E66, 0xDA54, 0x6E67, 0xB4E9, - 0x6E68, 0xDA40, 0x6E69, 0xB546, 0x6E6B, 0xDA47, 0x6E6E, 0xB4F3, - 0x6E6F, 0xB4F6, 0x6E71, 0xDA46, 0x6E72, 0xB545, 0x6E73, 0xD9F5, - 0x6E74, 0xD5E4, 0x6E77, 0xDA50, 0x6E78, 0xDA4E, 0x6E79, 0xDA52, - 0x6E88, 0xD9EC, 0x6E89, 0xB540, 0x6E8D, 0xDE61, 0x6E8E, 0xDE60, - 0x6E8F, 0xDE46, 0x6E90, 0xB7BD, 0x6E92, 0xDE5F, 0x6E93, 0xDE49, - 0x6E94, 0xDE4A, 0x6E96, 0xB7C7, 0x6E97, 0xDE68, 0x6E98, 0xB7C2, - 0x6E99, 0xDE5E, 0x6E9B, 0xDE43, 0x6E9C, 0xB7C8, 0x6E9D, 0xB7BE, - 0x6E9E, 0xDE52, 0x6E9F, 0xDE48, 0x6EA0, 0xDE4B, 0x6EA1, 0xDE63, - 0x6EA2, 0xB7B8, 0x6EA3, 0xDE6A, 0x6EA4, 0xDE62, 0x6EA5, 0xB7C1, - 0x6EA6, 0xDE57, 0x6EA7, 0xB7CC, 0x6EAA, 0xB7CB, 0x6EAB, 0xB7C5, - 0x6EAE, 0xDE69, 0x6EAF, 0xB7B9, 0x6EB0, 0xDE55, 0x6EB1, 0xDE4C, - 0x6EB2, 0xDE59, 0x6EB3, 0xDE65, 0x6EB4, 0xB7CD, 0x6EB6, 0xB7BB, - 0x6EB7, 0xDE54, 0x6EB9, 0xDE4D, 0x6EBA, 0xB7C4, 0x6EBC, 0xB7C3, - 0x6EBD, 0xDE50, 0x6EBE, 0xDE5A, 0x6EBF, 0xDE64, 0x6EC0, 0xDE47, - 0x6EC1, 0xDE51, 0x6EC2, 0xB7BC, 0x6EC3, 0xDE5B, 0x6EC4, 0xB7C9, - 0x6EC5, 0xB7C0, 0x6EC6, 0xDE4E, 0x6EC7, 0xB7BF, 0x6EC8, 0xDE45, - 0x6EC9, 0xDE53, 0x6ECA, 0xDE67, 0x6ECB, 0xB4FE, 0x6ECC, 0xBAB0, - 0x6ECD, 0xDE56, 0x6ECE, 0xE26C, 0x6ECF, 0xDE58, 0x6ED0, 0xDE66, - 0x6ED1, 0xB7C6, 0x6ED2, 0xDE4F, 0x6ED3, 0xB7BA, 0x6ED4, 0xB7CA, - 0x6ED5, 0xBCF0, 0x6ED6, 0xDE44, 0x6ED8, 0xDE5D, 0x6EDC, 0xDE5C, - 0x6EEB, 0xE2AA, 0x6EEC, 0xBAAD, 0x6EED, 0xE27D, 0x6EEE, 0xE2A4, - 0x6EEF, 0xBAA2, 0x6EF1, 0xE26E, 0x6EF2, 0xBAAF, 0x6EF4, 0xBA77, - 0x6EF5, 0xE26D, 0x6EF6, 0xE2B0, 0x6EF7, 0xBAB1, 0x6EF8, 0xE271, - 0x6EF9, 0xE2A3, 0x6EFB, 0xE273, 0x6EFC, 0xE2B3, 0x6EFD, 0xE2AF, - 0x6EFE, 0xBA75, 0x6EFF, 0xBAA1, 0x6F00, 0xE653, 0x6F01, 0xBAAE, - 0x6F02, 0xBA7D, 0x6F03, 0xE26F, 0x6F05, 0xE2AE, 0x6F06, 0xBAA3, - 0x6F07, 0xE2AB, 0x6F08, 0xE2B8, 0x6F09, 0xE275, 0x6F0A, 0xE27E, - 0x6F0D, 0xE2B6, 0x6F0E, 0xE2AC, 0x6F0F, 0xBA7C, 0x6F12, 0xE27C, - 0x6F13, 0xBA76, 0x6F14, 0xBA74, 0x6F15, 0xBAA8, 0x6F18, 0xE27A, - 0x6F19, 0xE277, 0x6F1A, 0xE278, 0x6F1C, 0xE2B2, 0x6F1E, 0xE2B7, - 0x6F1F, 0xE2B5, 0x6F20, 0xBA7A, 0x6F21, 0xE2B9, 0x6F22, 0xBA7E, - 0x6F23, 0xBAA7, 0x6F25, 0xE270, 0x6F26, 0xE5FA, 0x6F27, 0xE279, - 0x6F29, 0xBA78, 0x6F2A, 0xBAAC, 0x6F2B, 0xBAA9, 0x6F2C, 0xBA7B, - 0x6F2D, 0xE2A5, 0x6F2E, 0xE274, 0x6F2F, 0xBAAA, 0x6F30, 0xE2A7, - 0x6F31, 0xBAA4, 0x6F32, 0xBAA6, 0x6F33, 0xBA73, 0x6F35, 0xE2A9, - 0x6F36, 0xE2A1, 0x6F37, 0xE272, 0x6F38, 0xBAA5, 0x6F39, 0xE2B1, - 0x6F3A, 0xE2B4, 0x6F3B, 0xE27B, 0x6F3C, 0xE2A8, 0x6F3E, 0xBA79, - 0x6F3F, 0xBCDF, 0x6F40, 0xE2A6, 0x6F41, 0xE5F9, 0x6F43, 0xE2AD, - 0x6F4E, 0xE276, 0x6F4F, 0xE644, 0x6F50, 0xE64E, 0x6F51, 0xBCE2, - 0x6F52, 0xE64D, 0x6F53, 0xE659, 0x6F54, 0xBCE4, 0x6F55, 0xE64B, - 0x6F57, 0xE64F, 0x6F58, 0xBCEF, 0x6F5A, 0xE646, 0x6F5B, 0xBCE7, - 0x6F5D, 0xE652, 0x6F5E, 0xE9F0, 0x6F5F, 0xBCF3, 0x6F60, 0xBCF2, - 0x6F61, 0xE654, 0x6F62, 0xE643, 0x6F63, 0xE65E, 0x6F64, 0xBCED, - 0x6F66, 0xBCE3, 0x6F67, 0xE657, 0x6F69, 0xE65B, 0x6F6A, 0xE660, - 0x6F6B, 0xE655, 0x6F6C, 0xE649, 0x6F6D, 0xBCE6, 0x6F6E, 0xBCE9, - 0x6F6F, 0xBCF1, 0x6F70, 0xBCEC, 0x6F72, 0xE64C, 0x6F73, 0xE2A2, - 0x6F76, 0xE648, 0x6F77, 0xE65F, 0x6F78, 0xBCE8, 0x6F7A, 0xBCEB, - 0x6F7B, 0xE661, 0x6F7C, 0xBCE0, 0x6F7D, 0xE656, 0x6F7E, 0xE5FB, - 0x6F7F, 0xE65C, 0x6F80, 0xC0DF, 0x6F82, 0xE64A, 0x6F84, 0xBCE1, - 0x6F85, 0xE645, 0x6F86, 0xBCE5, 0x6F87, 0xE5FC, 0x6F88, 0xBAAB, - 0x6F89, 0xE641, 0x6F8B, 0xE65A, 0x6F8C, 0xE642, 0x6F8D, 0xE640, - 0x6F8E, 0xBCEA, 0x6F90, 0xE658, 0x6F92, 0xE5FE, 0x6F93, 0xE651, - 0x6F94, 0xE650, 0x6F95, 0xE65D, 0x6F96, 0xE647, 0x6F97, 0xBCEE, - 0x6F9E, 0xE9F3, 0x6FA0, 0xBF49, 0x6FA1, 0xBEFE, 0x6FA2, 0xEA40, - 0x6FA3, 0xE9EB, 0x6FA4, 0xBF41, 0x6FA5, 0xE9F7, 0x6FA6, 0xBF48, - 0x6FA7, 0xBF43, 0x6FA8, 0xE9F5, 0x6FA9, 0xED4F, 0x6FAA, 0xE9FB, - 0x6FAB, 0xEA42, 0x6FAC, 0xE9FA, 0x6FAD, 0xE9E9, 0x6FAE, 0xE9F8, - 0x6FAF, 0xEA44, 0x6FB0, 0xEA46, 0x6FB1, 0xBEFD, 0x6FB2, 0xEA45, - 0x6FB3, 0xBF44, 0x6FB4, 0xBF4A, 0x6FB6, 0xBF47, 0x6FB8, 0xE9FE, - 0x6FB9, 0xBF46, 0x6FBA, 0xE9F9, 0x6FBC, 0xE9ED, 0x6FBD, 0xE9F2, - 0x6FBF, 0xE9FD, 0x6FC0, 0xBF45, 0x6FC1, 0xBF42, 0x6FC2, 0xBEFC, - 0x6FC3, 0xBF40, 0x6FC4, 0xE9F1, 0x6FC6, 0xE5FD, 0x6FC7, 0xE9EC, - 0x6FC8, 0xE9EF, 0x6FC9, 0xEA41, 0x6FCA, 0xE9F4, 0x6FCB, 0xE9EA, - 0x6FCC, 0xED4E, 0x6FCD, 0xEA43, 0x6FCE, 0xE9EE, 0x6FCF, 0xE9FC, - 0x6FD4, 0xED51, 0x6FD5, 0xC0E3, 0x6FD8, 0xC0D7, 0x6FDB, 0xC0DB, - 0x6FDC, 0xED53, 0x6FDD, 0xED59, 0x6FDE, 0xED57, 0x6FDF, 0xC0D9, - 0x6FE0, 0xC0DA, 0x6FE1, 0xC0E1, 0x6FE2, 0xED5A, 0x6FE3, 0xED52, - 0x6FE4, 0xC0DC, 0x6FE6, 0xED56, 0x6FE7, 0xED55, 0x6FE8, 0xED5B, - 0x6FE9, 0xC0E2, 0x6FEB, 0xC0DD, 0x6FEC, 0xC0E0, 0x6FED, 0xED54, - 0x6FEE, 0xC0E4, 0x6FEF, 0xC0DE, 0x6FF0, 0xC0E5, 0x6FF1, 0xC0D8, - 0x6FF2, 0xED58, 0x6FF4, 0xED50, 0x6FF7, 0xEFF7, 0x6FFA, 0xC271, - 0x6FFB, 0xEFF4, 0x6FFC, 0xEFF6, 0x6FFE, 0xC26F, 0x6FFF, 0xEFF2, - 0x7000, 0xEFF3, 0x7001, 0xEFEE, 0x7004, 0xE9F6, 0x7005, 0xEFEF, - 0x7006, 0xC270, 0x7007, 0xEFEB, 0x7009, 0xC26D, 0x700A, 0xEFF8, - 0x700B, 0xC26E, 0x700C, 0xEFEC, 0x700D, 0xEFED, 0x700E, 0xEFF1, - 0x700F, 0xC273, 0x7011, 0xC272, 0x7014, 0xEFF0, 0x7015, 0xC378, - 0x7016, 0xF25F, 0x7017, 0xF265, 0x7018, 0xC379, 0x7019, 0xF25C, - 0x701A, 0xC376, 0x701B, 0xC373, 0x701C, 0xF267, 0x701D, 0xC377, - 0x701F, 0xC374, 0x7020, 0xF25E, 0x7021, 0xF261, 0x7022, 0xF262, - 0x7023, 0xF263, 0x7024, 0xF266, 0x7026, 0xEFF5, 0x7027, 0xF25D, - 0x7028, 0xC375, 0x7029, 0xF264, 0x702A, 0xF268, 0x702B, 0xF260, - 0x702F, 0xF45D, 0x7030, 0xC46A, 0x7031, 0xF460, 0x7032, 0xC46B, - 0x7033, 0xF468, 0x7034, 0xF45F, 0x7035, 0xF45C, 0x7037, 0xF45E, - 0x7038, 0xF462, 0x7039, 0xF465, 0x703A, 0xF464, 0x703B, 0xF467, - 0x703C, 0xF45B, 0x703E, 0xC469, 0x703F, 0xF463, 0x7040, 0xF466, - 0x7041, 0xF469, 0x7042, 0xF461, 0x7043, 0xF5D3, 0x7044, 0xF5D4, - 0x7045, 0xF5D8, 0x7046, 0xF5D9, 0x7048, 0xF5D6, 0x7049, 0xF5D7, - 0x704A, 0xF5D5, 0x704C, 0xC4E9, 0x7051, 0xC578, 0x7052, 0xF6EB, - 0x7055, 0xF6E8, 0x7056, 0xF6E9, 0x7057, 0xF6EA, 0x7058, 0xC579, - 0x705A, 0xF7E5, 0x705B, 0xF7E4, 0x705D, 0xF8AF, 0x705E, 0xC5F4, - 0x705F, 0xF8AD, 0x7060, 0xF8B0, 0x7061, 0xF8AE, 0x7062, 0xF8F5, - 0x7063, 0xC657, 0x7064, 0xC665, 0x7065, 0xF9A3, 0x7066, 0xF96C, - 0x7068, 0xF9A2, 0x7069, 0xF9D0, 0x706A, 0xF9D1, 0x706B, 0xA4F5, - 0x7070, 0xA6C7, 0x7071, 0xCA41, 0x7074, 0xCB5E, 0x7076, 0xA85F, - 0x7078, 0xA862, 0x707A, 0xCB5F, 0x707C, 0xA860, 0x707D, 0xA861, - 0x7082, 0xCD58, 0x7083, 0xCD5A, 0x7084, 0xCD55, 0x7085, 0xCD52, - 0x7086, 0xCD54, 0x708A, 0xAAA4, 0x708E, 0xAAA2, 0x7091, 0xCD56, - 0x7092, 0xAAA3, 0x7093, 0xCD53, 0x7094, 0xCD50, 0x7095, 0xAAA1, - 0x7096, 0xCD57, 0x7098, 0xCD51, 0x7099, 0xAAA5, 0x709A, 0xCD59, - 0x709F, 0xCFAF, 0x70A1, 0xCFB3, 0x70A4, 0xACB7, 0x70A9, 0xCFB6, - 0x70AB, 0xACAF, 0x70AC, 0xACB2, 0x70AD, 0xACB4, 0x70AE, 0xACB6, - 0x70AF, 0xACB3, 0x70B0, 0xCFB2, 0x70B1, 0xCFB1, 0x70B3, 0xACB1, - 0x70B4, 0xCFB4, 0x70B5, 0xCFB5, 0x70B7, 0xCFAE, 0x70B8, 0xACB5, - 0x70BA, 0xACB0, 0x70BE, 0xCFB0, 0x70C5, 0xD277, 0x70C6, 0xD278, - 0x70C7, 0xD279, 0x70C8, 0xAF50, 0x70CA, 0xAF4C, 0x70CB, 0xD26E, - 0x70CD, 0xD276, 0x70CE, 0xD27B, 0x70CF, 0xAF51, 0x70D1, 0xD26C, - 0x70D2, 0xD272, 0x70D3, 0xD26B, 0x70D4, 0xD275, 0x70D7, 0xD271, - 0x70D8, 0xAF4D, 0x70D9, 0xAF4F, 0x70DA, 0xD27A, 0x70DC, 0xD26A, - 0x70DD, 0xD26D, 0x70DE, 0xD273, 0x70E0, 0xD274, 0x70E1, 0xD27C, - 0x70E2, 0xD270, 0x70E4, 0xAF4E, 0x70EF, 0xB26D, 0x70F0, 0xD64E, - 0x70F3, 0xD650, 0x70F4, 0xD64C, 0x70F6, 0xD658, 0x70F7, 0xD64A, - 0x70F8, 0xD657, 0x70F9, 0xB269, 0x70FA, 0xD648, 0x70FB, 0xDA5B, - 0x70FC, 0xD652, 0x70FD, 0xB26C, 0x70FF, 0xD653, 0x7100, 0xD656, - 0x7102, 0xD65A, 0x7104, 0xD64F, 0x7106, 0xD654, 0x7109, 0xB26A, - 0x710A, 0xB26B, 0x710B, 0xD659, 0x710C, 0xD64D, 0x710D, 0xD649, - 0x710E, 0xD65B, 0x7110, 0xD651, 0x7113, 0xD655, 0x7117, 0xD64B, - 0x7119, 0xB548, 0x711A, 0xB549, 0x711B, 0xDA65, 0x711C, 0xB54F, - 0x711E, 0xDA59, 0x711F, 0xDA62, 0x7120, 0xDA58, 0x7121, 0xB54C, - 0x7122, 0xDA60, 0x7123, 0xDA5E, 0x7125, 0xDA5F, 0x7126, 0xB54A, - 0x7128, 0xDA63, 0x712E, 0xDA5C, 0x712F, 0xDA5A, 0x7130, 0xB54B, - 0x7131, 0xDA5D, 0x7132, 0xDA61, 0x7136, 0xB54D, 0x713A, 0xDA64, - 0x7141, 0xDE70, 0x7142, 0xDE77, 0x7143, 0xDE79, 0x7144, 0xDEA1, - 0x7146, 0xB7DA, 0x7147, 0xDE6B, 0x7149, 0xB7D2, 0x714B, 0xDE7A, - 0x714C, 0xB7D7, 0x714D, 0xDEA2, 0x714E, 0xB7CE, 0x7150, 0xDE7D, - 0x7152, 0xDE6D, 0x7153, 0xDE7E, 0x7154, 0xDE6C, 0x7156, 0xB7DC, - 0x7158, 0xDE78, 0x7159, 0xB7CF, 0x715A, 0xDEA3, 0x715C, 0xB7D4, - 0x715D, 0xDE71, 0x715E, 0xB7D9, 0x715F, 0xDE7C, 0x7160, 0xDE6F, - 0x7161, 0xDE76, 0x7162, 0xDE72, 0x7163, 0xDE6E, 0x7164, 0xB7D1, - 0x7165, 0xB7D8, 0x7166, 0xB7D6, 0x7167, 0xB7D3, 0x7168, 0xB7DB, - 0x7169, 0xB7D0, 0x716A, 0xDE75, 0x716C, 0xB7D5, 0x716E, 0xB54E, - 0x7170, 0xDE7B, 0x7172, 0xDE73, 0x7178, 0xDE74, 0x717B, 0xE2C1, - 0x717D, 0xBAB4, 0x7180, 0xE2BD, 0x7181, 0xE2C3, 0x7182, 0xE2BF, - 0x7184, 0xBAB6, 0x7185, 0xE2BE, 0x7186, 0xE2C2, 0x7187, 0xE2BA, - 0x7189, 0xE2BC, 0x718A, 0xBAB5, 0x718F, 0xE2C0, 0x7190, 0xE2BB, - 0x7192, 0xBAB7, 0x7194, 0xBAB2, 0x7197, 0xE2C4, 0x7199, 0xBAB3, - 0x719A, 0xE667, 0x719B, 0xE664, 0x719C, 0xE670, 0x719D, 0xE66A, - 0x719E, 0xE66C, 0x719F, 0xBCF4, 0x71A0, 0xE666, 0x71A1, 0xE66E, - 0x71A4, 0xE66D, 0x71A5, 0xE66B, 0x71A7, 0xE671, 0x71A8, 0xBCF7, - 0x71A9, 0xE668, 0x71AA, 0xE66F, 0x71AC, 0xBCF5, 0x71AF, 0xE663, - 0x71B0, 0xE665, 0x71B1, 0xBCF6, 0x71B2, 0xE662, 0x71B3, 0xE672, - 0x71B5, 0xE669, 0x71B8, 0xEA4A, 0x71B9, 0xBF51, 0x71BC, 0xEA55, - 0x71BD, 0xEA53, 0x71BE, 0xBF4B, 0x71BF, 0xEA49, 0x71C0, 0xEA4C, - 0x71C1, 0xEA4D, 0x71C2, 0xEA48, 0x71C3, 0xBF55, 0x71C4, 0xBF56, - 0x71C5, 0xEA47, 0x71C6, 0xEA56, 0x71C7, 0xEA51, 0x71C8, 0xBF4F, - 0x71C9, 0xBF4C, 0x71CA, 0xEA50, 0x71CB, 0xEA4E, 0x71CE, 0xBF52, - 0x71CF, 0xEA52, 0x71D0, 0xBF4D, 0x71D2, 0xBF4E, 0x71D4, 0xEA4F, - 0x71D5, 0xBF50, 0x71D6, 0xEA4B, 0x71D8, 0xEA54, 0x71D9, 0xBF53, - 0x71DA, 0xEA57, 0x71DB, 0xEA58, 0x71DC, 0xBF54, 0x71DF, 0xC0E7, - 0x71E0, 0xC0EE, 0x71E1, 0xED5C, 0x71E2, 0xED62, 0x71E4, 0xED60, - 0x71E5, 0xC0EA, 0x71E6, 0xC0E9, 0x71E7, 0xC0E6, 0x71E8, 0xED5E, - 0x71EC, 0xC0EC, 0x71ED, 0xC0EB, 0x71EE, 0xC0E8, 0x71F0, 0xED61, - 0x71F1, 0xED5D, 0x71F2, 0xED5F, 0x71F4, 0xC0ED, 0x71F8, 0xC277, - 0x71F9, 0xEFFB, 0x71FB, 0xC274, 0x71FC, 0xC275, 0x71FD, 0xEFFD, - 0x71FE, 0xC276, 0x71FF, 0xEFFA, 0x7201, 0xEFF9, 0x7202, 0xF26C, - 0x7203, 0xEFFC, 0x7205, 0xF26D, 0x7206, 0xC37A, 0x7207, 0xF26B, - 0x720A, 0xF26A, 0x720C, 0xF269, 0x720D, 0xC37B, 0x7210, 0xC46C, - 0x7213, 0xF46A, 0x7214, 0xF46B, 0x7219, 0xF5DC, 0x721A, 0xF5DB, - 0x721B, 0xC4EA, 0x721D, 0xF5DA, 0x721E, 0xF6EC, 0x721F, 0xF6ED, - 0x7222, 0xF7E6, 0x7223, 0xF8B1, 0x7226, 0xF8F6, 0x7227, 0xF9BC, - 0x7228, 0xC679, 0x7229, 0xF9C6, 0x722A, 0xA4F6, 0x722C, 0xAAA6, - 0x722D, 0xAAA7, 0x7230, 0xACB8, 0x7235, 0xC0EF, 0x7236, 0xA4F7, - 0x7238, 0xAAA8, 0x7239, 0xAF52, 0x723A, 0xB7DD, 0x723B, 0xA4F8, - 0x723D, 0xB26E, 0x723E, 0xBAB8, 0x723F, 0xC962, 0x7241, 0xCFB7, - 0x7242, 0xD27D, 0x7244, 0xE2C5, 0x7246, 0xC0F0, 0x7247, 0xA4F9, - 0x7248, 0xAAA9, 0x7249, 0xCFB8, 0x724A, 0xCFB9, 0x724B, 0xDA66, - 0x724C, 0xB550, 0x724F, 0xDEA4, 0x7252, 0xB7DE, 0x7253, 0xE2C6, - 0x7256, 0xBCF8, 0x7258, 0xC37C, 0x7259, 0xA4FA, 0x725A, 0xDA67, - 0x725B, 0xA4FB, 0x725D, 0xA6C9, 0x725E, 0xCA42, 0x725F, 0xA6C8, - 0x7260, 0xA865, 0x7261, 0xA864, 0x7262, 0xA863, 0x7263, 0xCB60, - 0x7267, 0xAAAA, 0x7269, 0xAAAB, 0x726A, 0xCD5B, 0x726C, 0xCFBA, - 0x726E, 0xCFBD, 0x726F, 0xACBA, 0x7270, 0xCFBB, 0x7272, 0xACB9, - 0x7273, 0xCFBC, 0x7274, 0xACBB, 0x7276, 0xD2A2, 0x7277, 0xD2A1, - 0x7278, 0xD27E, 0x7279, 0xAF53, 0x727B, 0xD65D, 0x727C, 0xD65E, - 0x727D, 0xB26F, 0x727E, 0xD65C, 0x727F, 0xD65F, 0x7280, 0xB552, - 0x7281, 0xB270, 0x7284, 0xB551, 0x7285, 0xDA6B, 0x7286, 0xDA6A, - 0x7288, 0xDA68, 0x7289, 0xDA69, 0x728B, 0xDA6C, 0x728C, 0xDEA6, - 0x728D, 0xDEA5, 0x728E, 0xDEA9, 0x7290, 0xDEA8, 0x7291, 0xDEA7, - 0x7292, 0xBAB9, 0x7293, 0xE2C9, 0x7295, 0xE2C8, 0x7296, 0xBABA, - 0x7297, 0xE2C7, 0x7298, 0xE673, 0x729A, 0xE674, 0x729B, 0xBCF9, - 0x729D, 0xEA59, 0x729E, 0xEA5A, 0x72A1, 0xF272, 0x72A2, 0xC37D, - 0x72A3, 0xF271, 0x72A4, 0xF270, 0x72A5, 0xF26E, 0x72A6, 0xF26F, - 0x72A7, 0xC4EB, 0x72A8, 0xF46C, 0x72A9, 0xF6EE, 0x72AA, 0xF8F7, - 0x72AC, 0xA4FC, 0x72AE, 0xC9A5, 0x72AF, 0xA5C7, 0x72B0, 0xC9A6, - 0x72B4, 0xCA43, 0x72B5, 0xCA44, 0x72BA, 0xCB66, 0x72BD, 0xCB62, - 0x72BF, 0xCB61, 0x72C0, 0xAAAC, 0x72C1, 0xCB65, 0x72C2, 0xA867, - 0x72C3, 0xCB63, 0x72C4, 0xA866, 0x72C5, 0xCB67, 0x72C6, 0xCB64, - 0x72C9, 0xCD5F, 0x72CA, 0xCFBE, 0x72CB, 0xCD5D, 0x72CC, 0xCD64, - 0x72CE, 0xAAAD, 0x72D0, 0xAAB0, 0x72D1, 0xCD65, 0x72D2, 0xCD61, - 0x72D4, 0xCD62, 0x72D6, 0xCD5C, 0x72D7, 0xAAAF, 0x72D8, 0xCD5E, - 0x72D9, 0xAAAE, 0x72DA, 0xCD63, 0x72DC, 0xCD60, 0x72DF, 0xCFC2, - 0x72E0, 0xACBD, 0x72E1, 0xACBE, 0x72E3, 0xCFC5, 0x72E4, 0xCFBF, - 0x72E6, 0xCFC4, 0x72E8, 0xCFC0, 0x72E9, 0xACBC, 0x72EA, 0xCFC3, - 0x72EB, 0xCFC1, 0x72F3, 0xD2A8, 0x72F4, 0xD2A5, 0x72F6, 0xD2A7, - 0x72F7, 0xAF58, 0x72F8, 0xAF57, 0x72F9, 0xAF55, 0x72FA, 0xD2A4, - 0x72FB, 0xD2A9, 0x72FC, 0xAF54, 0x72FD, 0xAF56, 0x72FE, 0xD2A6, - 0x72FF, 0xD667, 0x7300, 0xD2A3, 0x7301, 0xD2AA, 0x7307, 0xD662, - 0x7308, 0xD666, 0x730A, 0xD665, 0x730B, 0xDA6E, 0x730C, 0xDA79, - 0x730F, 0xD668, 0x7311, 0xD663, 0x7312, 0xDA6D, 0x7313, 0xB274, - 0x7316, 0xB273, 0x7317, 0xD661, 0x7318, 0xD664, 0x7319, 0xB275, - 0x731B, 0xB272, 0x731C, 0xB271, 0x731D, 0xD660, 0x731E, 0xD669, - 0x7322, 0xDA70, 0x7323, 0xDA77, 0x7325, 0xB554, 0x7326, 0xDA76, - 0x7327, 0xDA73, 0x7329, 0xB556, 0x732D, 0xDA75, 0x7330, 0xDA6F, - 0x7331, 0xDA71, 0x7332, 0xDA74, 0x7333, 0xDA72, 0x7334, 0xB555, - 0x7335, 0xDA78, 0x7336, 0xB553, 0x7337, 0xB7DF, 0x733A, 0xDEAD, - 0x733B, 0xDEAC, 0x733C, 0xDEAA, 0x733E, 0xB7E2, 0x733F, 0xB7E1, - 0x7340, 0xDEAE, 0x7342, 0xDEAB, 0x7343, 0xE2CA, 0x7344, 0xBABB, - 0x7345, 0xB7E0, 0x7349, 0xDEB0, 0x734A, 0xDEAF, 0x734C, 0xE2CD, - 0x734D, 0xE2CB, 0x734E, 0xBCFA, 0x7350, 0xBABC, 0x7351, 0xE2CC, - 0x7352, 0xE676, 0x7357, 0xBCFB, 0x7358, 0xE675, 0x7359, 0xE67E, - 0x735A, 0xE67D, 0x735B, 0xE67B, 0x735D, 0xE67A, 0x735E, 0xE677, - 0x735F, 0xE678, 0x7360, 0xE679, 0x7361, 0xE67C, 0x7362, 0xE6A1, - 0x7365, 0xEA5F, 0x7366, 0xEA5C, 0x7367, 0xEA5D, 0x7368, 0xBF57, - 0x7369, 0xEA5B, 0x736A, 0xEA61, 0x736B, 0xEA60, 0x736C, 0xEA5E, - 0x736E, 0xED64, 0x736F, 0xED65, 0x7370, 0xC0F1, 0x7372, 0xC0F2, - 0x7373, 0xED63, 0x7375, 0xC279, 0x7376, 0xEFFE, 0x7377, 0xC278, - 0x7378, 0xC37E, 0x737A, 0xC3A1, 0x737B, 0xC46D, 0x737C, 0xF46E, - 0x737D, 0xF46D, 0x737E, 0xF5DD, 0x737F, 0xF6EF, 0x7380, 0xC57A, - 0x7381, 0xF7E8, 0x7382, 0xF7E7, 0x7383, 0xF7E9, 0x7384, 0xA5C8, - 0x7385, 0xCFC6, 0x7386, 0xAF59, 0x7387, 0xB276, 0x7388, 0xD66A, - 0x7389, 0xA5C9, 0x738A, 0xC9A7, 0x738B, 0xA4FD, 0x738E, 0xCA45, - 0x7392, 0xCB6C, 0x7393, 0xCB6A, 0x7394, 0xCB6B, 0x7395, 0xCB68, - 0x7396, 0xA868, 0x7397, 0xCB69, 0x739D, 0xCD6D, 0x739F, 0xAAB3, - 0x73A0, 0xCD6B, 0x73A1, 0xCD67, 0x73A2, 0xCD6A, 0x73A4, 0xCD66, - 0x73A5, 0xAAB5, 0x73A6, 0xCD69, 0x73A8, 0xAAB2, 0x73A9, 0xAAB1, - 0x73AB, 0xAAB4, 0x73AC, 0xCD6C, 0x73AD, 0xCD68, 0x73B2, 0xACC2, - 0x73B3, 0xACC5, 0x73B4, 0xCFCE, 0x73B5, 0xCFCD, 0x73B6, 0xCFCC, - 0x73B7, 0xACBF, 0x73B8, 0xCFD5, 0x73B9, 0xCFCB, 0x73BB, 0xACC1, - 0x73BC, 0xD2AF, 0x73BE, 0xCFD2, 0x73BF, 0xCFD0, 0x73C0, 0xACC4, - 0x73C2, 0xCFC8, 0x73C3, 0xCFD3, 0x73C5, 0xCFCA, 0x73C6, 0xCFD4, - 0x73C7, 0xCFD1, 0x73C8, 0xCFC9, 0x73CA, 0xACC0, 0x73CB, 0xCFD6, - 0x73CC, 0xCFC7, 0x73CD, 0xACC3, 0x73D2, 0xD2B4, 0x73D3, 0xD2AB, - 0x73D4, 0xD2B6, 0x73D6, 0xD2AE, 0x73D7, 0xD2B9, 0x73D8, 0xD2BA, - 0x73D9, 0xD2AC, 0x73DA, 0xD2B8, 0x73DB, 0xD2B5, 0x73DC, 0xD2B3, - 0x73DD, 0xD2B7, 0x73DE, 0xAF5F, 0x73E0, 0xAF5D, 0x73E3, 0xD2B1, - 0x73E5, 0xD2AD, 0x73E7, 0xD2B0, 0x73E8, 0xD2BB, 0x73E9, 0xD2B2, - 0x73EA, 0xAF5E, 0x73EB, 0xCFCF, 0x73ED, 0xAF5A, 0x73EE, 0xAF5C, - 0x73F4, 0xD678, 0x73F5, 0xD66D, 0x73F6, 0xD66B, 0x73F8, 0xD66C, - 0x73FA, 0xD673, 0x73FC, 0xD674, 0x73FD, 0xD670, 0x73FE, 0xB27B, - 0x73FF, 0xD675, 0x7400, 0xD672, 0x7401, 0xD66F, 0x7403, 0xB279, - 0x7404, 0xD66E, 0x7405, 0xB277, 0x7406, 0xB27A, 0x7407, 0xD671, - 0x7408, 0xD679, 0x7409, 0xAF5B, 0x740A, 0xB278, 0x740B, 0xD677, - 0x740C, 0xD676, 0x740D, 0xB27C, 0x7416, 0xDA7E, 0x741A, 0xDAA1, - 0x741B, 0xB560, 0x741D, 0xDAA7, 0x7420, 0xDAA9, 0x7421, 0xDAA2, - 0x7422, 0xB55A, 0x7423, 0xDAA6, 0x7424, 0xDAA5, 0x7425, 0xB55B, - 0x7426, 0xB561, 0x7428, 0xB562, 0x7429, 0xDAA8, 0x742A, 0xB558, - 0x742B, 0xDA7D, 0x742C, 0xDA7B, 0x742D, 0xDAA3, 0x742E, 0xDA7A, - 0x742F, 0xB55F, 0x7430, 0xDA7C, 0x7431, 0xDAA4, 0x7432, 0xDAAA, - 0x7433, 0xB559, 0x7434, 0xB55E, 0x7435, 0xB55C, 0x7436, 0xB55D, - 0x743A, 0xB557, 0x743F, 0xB7E9, 0x7440, 0xDEB7, 0x7441, 0xB7E8, - 0x7442, 0xDEBB, 0x7444, 0xDEB1, 0x7446, 0xDEBC, 0x744A, 0xDEB2, - 0x744B, 0xDEB3, 0x744D, 0xDEBD, 0x744E, 0xDEBA, 0x744F, 0xDEB8, - 0x7450, 0xDEB9, 0x7451, 0xDEB5, 0x7452, 0xDEB4, 0x7454, 0xDEBE, - 0x7455, 0xB7E5, 0x7457, 0xDEB6, 0x7459, 0xB7EA, 0x745A, 0xB7E4, - 0x745B, 0xB7EB, 0x745C, 0xB7EC, 0x745E, 0xB7E7, 0x745F, 0xB7E6, - 0x7462, 0xE2CE, 0x7463, 0xBABE, 0x7464, 0xBABD, 0x7467, 0xE2D3, - 0x7469, 0xBCFC, 0x746A, 0xBABF, 0x746D, 0xBAC1, 0x746E, 0xE2D4, - 0x746F, 0xB7E3, 0x7470, 0xBAC0, 0x7471, 0xE2D0, 0x7472, 0xE2D2, - 0x7473, 0xE2CF, 0x7475, 0xE2D1, 0x7479, 0xE6AB, 0x747C, 0xE6AA, - 0x747D, 0xE6A7, 0x747E, 0xBD40, 0x747F, 0xEA62, 0x7480, 0xBD41, - 0x7481, 0xE6A6, 0x7483, 0xBCFE, 0x7485, 0xE6A8, 0x7486, 0xE6A5, - 0x7487, 0xE6A2, 0x7488, 0xE6A9, 0x7489, 0xE6A3, 0x748A, 0xE6A4, - 0x748B, 0xBCFD, 0x7490, 0xED69, 0x7492, 0xEA66, 0x7494, 0xEA65, - 0x7495, 0xEA67, 0x7497, 0xED66, 0x7498, 0xBF5A, 0x749A, 0xEA63, - 0x749C, 0xBF58, 0x749E, 0xBF5C, 0x749F, 0xBF5B, 0x74A0, 0xEA64, - 0x74A1, 0xEA68, 0x74A3, 0xBF59, 0x74A5, 0xED6D, 0x74A6, 0xC0F5, - 0x74A7, 0xC27A, 0x74A8, 0xC0F6, 0x74A9, 0xC0F3, 0x74AA, 0xED6A, - 0x74AB, 0xED68, 0x74AD, 0xED6B, 0x74AF, 0xED6E, 0x74B0, 0xC0F4, - 0x74B1, 0xED6C, 0x74B2, 0xED67, 0x74B5, 0xF042, 0x74B6, 0xF045, - 0x74B7, 0xF275, 0x74B8, 0xF040, 0x74BA, 0xF46F, 0x74BB, 0xF046, - 0x74BD, 0xC3A2, 0x74BE, 0xF044, 0x74BF, 0xC27B, 0x74C0, 0xF041, - 0x74C1, 0xF043, 0x74C2, 0xF047, 0x74C3, 0xF276, 0x74C5, 0xF274, - 0x74CA, 0xC3A3, 0x74CB, 0xF273, 0x74CF, 0xC46E, 0x74D4, 0xC4ED, - 0x74D5, 0xF6F1, 0x74D6, 0xC4EC, 0x74D7, 0xF6F3, 0x74D8, 0xF6F0, - 0x74D9, 0xF6F2, 0x74DA, 0xC5D0, 0x74DB, 0xF8B2, 0x74DC, 0xA5CA, - 0x74DD, 0xCD6E, 0x74DE, 0xD2BC, 0x74DF, 0xD2BD, 0x74E0, 0xB27D, - 0x74E1, 0xDEBF, 0x74E2, 0xBF5D, 0x74E3, 0xC3A4, 0x74E4, 0xC57B, - 0x74E5, 0xF8B3, 0x74E6, 0xA5CB, 0x74E8, 0xCD6F, 0x74E9, 0xA260, - 0x74EC, 0xCFD7, 0x74EE, 0xCFD8, 0x74F4, 0xD2BE, 0x74F5, 0xD2BF, - 0x74F6, 0xB27E, 0x74F7, 0xB2A1, 0x74FB, 0xDAAB, 0x74FD, 0xDEC2, - 0x74FE, 0xDEC1, 0x74FF, 0xDEC0, 0x7500, 0xE2D5, 0x7502, 0xE2D6, - 0x7503, 0xE2D7, 0x7504, 0xBAC2, 0x7507, 0xE6AD, 0x7508, 0xE6AC, - 0x750B, 0xEA69, 0x750C, 0xBF5E, 0x750D, 0xBF5F, 0x750F, 0xED72, - 0x7510, 0xED6F, 0x7511, 0xED70, 0x7512, 0xED71, 0x7513, 0xF049, - 0x7514, 0xF048, 0x7515, 0xC27C, 0x7516, 0xF277, 0x7517, 0xF5DE, - 0x7518, 0xA5CC, 0x751A, 0xACC6, 0x751C, 0xB2A2, 0x751D, 0xDEC3, - 0x751F, 0xA5CD, 0x7521, 0xD2C0, 0x7522, 0xB2A3, 0x7525, 0xB563, - 0x7526, 0xB564, 0x7528, 0xA5CE, 0x7529, 0xA5CF, 0x752A, 0xCA46, - 0x752B, 0xA86A, 0x752C, 0xA869, 0x752D, 0xACC7, 0x752E, 0xCFD9, - 0x752F, 0xDAAC, 0x7530, 0xA5D0, 0x7531, 0xA5D1, 0x7532, 0xA5D2, - 0x7533, 0xA5D3, 0x7537, 0xA86B, 0x7538, 0xA86C, 0x7539, 0xCB6E, - 0x753A, 0xCB6D, 0x753D, 0xAAB6, 0x753E, 0xCD72, 0x753F, 0xCD70, - 0x7540, 0xCD71, 0x7547, 0xCFDA, 0x7548, 0xCFDB, 0x754B, 0xACCB, - 0x754C, 0xACC9, 0x754E, 0xACCA, 0x754F, 0xACC8, 0x7554, 0xAF60, - 0x7559, 0xAF64, 0x755A, 0xAF63, 0x755B, 0xD2C1, 0x755C, 0xAF62, - 0x755D, 0xAF61, 0x755F, 0xD2C2, 0x7562, 0xB2A6, 0x7563, 0xD67B, - 0x7564, 0xD67A, 0x7565, 0xB2A4, 0x7566, 0xB2A5, 0x756A, 0xB566, - 0x756B, 0xB565, 0x756C, 0xDAAE, 0x756F, 0xDAAD, 0x7570, 0xB2A7, - 0x7576, 0xB7ED, 0x7577, 0xDEC5, 0x7578, 0xB7EE, 0x7579, 0xDEC4, - 0x757D, 0xE2D8, 0x757E, 0xE6AE, 0x757F, 0xBD42, 0x7580, 0xEA6A, - 0x7584, 0xED73, 0x7586, 0xC3A6, 0x7587, 0xC3A5, 0x758A, 0xC57C, - 0x758B, 0xA5D4, 0x758C, 0xCD73, 0x758F, 0xB2A8, 0x7590, 0xE2D9, - 0x7591, 0xBAC3, 0x7594, 0xCB6F, 0x7595, 0xCB70, 0x7598, 0xCD74, - 0x7599, 0xAAB8, 0x759A, 0xAAB9, 0x759D, 0xAAB7, 0x75A2, 0xACCF, - 0x75A3, 0xACD0, 0x75A4, 0xACCD, 0x75A5, 0xACCE, 0x75A7, 0xCFDC, - 0x75AA, 0xCFDD, 0x75AB, 0xACCC, 0x75B0, 0xD2C3, 0x75B2, 0xAF68, - 0x75B3, 0xAF69, 0x75B5, 0xB2AB, 0x75B6, 0xD2C9, 0x75B8, 0xAF6E, - 0x75B9, 0xAF6C, 0x75BA, 0xD2CA, 0x75BB, 0xD2C5, 0x75BC, 0xAF6B, - 0x75BD, 0xAF6A, 0x75BE, 0xAF65, 0x75BF, 0xD2C8, 0x75C0, 0xD2C7, - 0x75C1, 0xD2C4, 0x75C2, 0xAF6D, 0x75C4, 0xD2C6, 0x75C5, 0xAF66, - 0x75C7, 0xAF67, 0x75CA, 0xB2AC, 0x75CB, 0xD6A1, 0x75CC, 0xD6A2, - 0x75CD, 0xB2AD, 0x75CE, 0xD67C, 0x75CF, 0xD67E, 0x75D0, 0xD6A4, - 0x75D1, 0xD6A3, 0x75D2, 0xD67D, 0x75D4, 0xB2A9, 0x75D5, 0xB2AA, - 0x75D7, 0xDAB6, 0x75D8, 0xB56B, 0x75D9, 0xB56A, 0x75DA, 0xDAB0, - 0x75DB, 0xB568, 0x75DD, 0xDAB3, 0x75DE, 0xB56C, 0x75DF, 0xDAB4, - 0x75E0, 0xB56D, 0x75E1, 0xDAB1, 0x75E2, 0xB567, 0x75E3, 0xB569, - 0x75E4, 0xDAB5, 0x75E6, 0xDAB2, 0x75E7, 0xDAAF, 0x75ED, 0xDED2, - 0x75EF, 0xDEC7, 0x75F0, 0xB7F0, 0x75F1, 0xB7F3, 0x75F2, 0xB7F2, - 0x75F3, 0xB7F7, 0x75F4, 0xB7F6, 0x75F5, 0xDED3, 0x75F6, 0xDED1, - 0x75F7, 0xDECA, 0x75F8, 0xDECE, 0x75F9, 0xDECD, 0x75FA, 0xB7F4, - 0x75FB, 0xDED0, 0x75FC, 0xDECC, 0x75FD, 0xDED4, 0x75FE, 0xDECB, - 0x75FF, 0xB7F5, 0x7600, 0xB7EF, 0x7601, 0xB7F1, 0x7603, 0xDEC9, - 0x7608, 0xE2DB, 0x7609, 0xBAC7, 0x760A, 0xE2DF, 0x760B, 0xBAC6, - 0x760C, 0xE2DC, 0x760D, 0xBAC5, 0x760F, 0xDEC8, 0x7610, 0xDECF, - 0x7611, 0xE2DE, 0x7613, 0xBAC8, 0x7614, 0xE2E0, 0x7615, 0xE2DD, - 0x7616, 0xE2DA, 0x7619, 0xE6B1, 0x761A, 0xE6B5, 0x761B, 0xE6B7, - 0x761C, 0xE6B3, 0x761D, 0xE6B2, 0x761E, 0xE6B0, 0x761F, 0xBD45, - 0x7620, 0xBD43, 0x7621, 0xBD48, 0x7622, 0xBD49, 0x7623, 0xE6B4, - 0x7624, 0xBD46, 0x7625, 0xE6AF, 0x7626, 0xBD47, 0x7627, 0xBAC4, - 0x7628, 0xE6B6, 0x7629, 0xBD44, 0x762D, 0xEA6C, 0x762F, 0xEA6B, - 0x7630, 0xEA73, 0x7631, 0xEA6D, 0x7632, 0xEA72, 0x7633, 0xEA6F, - 0x7634, 0xBF60, 0x7635, 0xEA71, 0x7638, 0xBF61, 0x763A, 0xBF62, - 0x763C, 0xEA70, 0x763D, 0xEA6E, 0x7642, 0xC0F8, 0x7643, 0xED74, - 0x7646, 0xC0F7, 0x7647, 0xED77, 0x7648, 0xED75, 0x7649, 0xED76, - 0x764C, 0xC0F9, 0x7650, 0xF04D, 0x7652, 0xC2A1, 0x7653, 0xF04E, - 0x7656, 0xC27D, 0x7657, 0xF04F, 0x7658, 0xC27E, 0x7659, 0xF04C, - 0x765A, 0xF050, 0x765C, 0xF04A, 0x765F, 0xC3A7, 0x7660, 0xF278, - 0x7661, 0xC3A8, 0x7662, 0xC46F, 0x7664, 0xF04B, 0x7665, 0xC470, - 0x7669, 0xC4EE, 0x766A, 0xF5DF, 0x766C, 0xC57E, 0x766D, 0xF6F4, - 0x766E, 0xC57D, 0x7670, 0xF7EA, 0x7671, 0xC5F5, 0x7672, 0xC5F6, - 0x7675, 0xF9CC, 0x7678, 0xACD1, 0x7679, 0xCFDE, 0x767B, 0xB56E, - 0x767C, 0xB56F, 0x767D, 0xA5D5, 0x767E, 0xA6CA, 0x767F, 0xCA47, - 0x7681, 0xCB71, 0x7682, 0xA86D, 0x7684, 0xAABA, 0x7686, 0xACD2, - 0x7687, 0xACD3, 0x7688, 0xACD4, 0x7689, 0xD6A6, 0x768A, 0xD2CB, - 0x768B, 0xAF6F, 0x768E, 0xB2AE, 0x768F, 0xD6A5, 0x7692, 0xDAB8, - 0x7693, 0xB571, 0x7695, 0xDAB7, 0x7696, 0xB570, 0x7699, 0xDED5, - 0x769A, 0xBD4A, 0x769B, 0xE6BB, 0x769C, 0xE6B8, 0x769D, 0xE6B9, - 0x769E, 0xE6BA, 0x76A4, 0xED78, 0x76A6, 0xF051, 0x76AA, 0xF471, - 0x76AB, 0xF470, 0x76AD, 0xF6F5, 0x76AE, 0xA5D6, 0x76AF, 0xCD75, - 0x76B0, 0xAF70, 0x76B4, 0xB572, 0x76B5, 0xDED6, 0x76B8, 0xE2E1, - 0x76BA, 0xBD4B, 0x76BB, 0xEA74, 0x76BD, 0xF052, 0x76BE, 0xF472, - 0x76BF, 0xA5D7, 0x76C2, 0xAABB, 0x76C3, 0xACD7, 0x76C4, 0xCFDF, - 0x76C5, 0xACD8, 0x76C6, 0xACD6, 0x76C8, 0xACD5, 0x76C9, 0xD2CC, - 0x76CA, 0xAF71, 0x76CD, 0xAF72, 0x76CE, 0xAF73, 0x76D2, 0xB2B0, - 0x76D3, 0xD6A7, 0x76D4, 0xB2AF, 0x76DA, 0xDAB9, 0x76DB, 0xB2B1, - 0x76DC, 0xB573, 0x76DD, 0xDED7, 0x76DE, 0xB7F8, 0x76DF, 0xB7F9, - 0x76E1, 0xBAC9, 0x76E3, 0xBACA, 0x76E4, 0xBD4C, 0x76E5, 0xBF64, - 0x76E6, 0xEA75, 0x76E7, 0xBF63, 0x76E9, 0xED79, 0x76EA, 0xC0FA, - 0x76EC, 0xF053, 0x76ED, 0xF473, 0x76EE, 0xA5D8, 0x76EF, 0xA86E, - 0x76F0, 0xCD78, 0x76F1, 0xCD77, 0x76F2, 0xAABC, 0x76F3, 0xCD76, - 0x76F4, 0xAABD, 0x76F5, 0xCD79, 0x76F7, 0xCFE5, 0x76F8, 0xACDB, - 0x76F9, 0xACDA, 0x76FA, 0xCFE7, 0x76FB, 0xCFE6, 0x76FC, 0xACDF, - 0x76FE, 0xACDE, 0x7701, 0xACD9, 0x7703, 0xCFE1, 0x7704, 0xCFE2, - 0x7705, 0xCFE3, 0x7707, 0xACE0, 0x7708, 0xCFE0, 0x7709, 0xACDC, - 0x770A, 0xCFE4, 0x770B, 0xACDD, 0x7710, 0xD2CF, 0x7711, 0xD2D3, - 0x7712, 0xD2D1, 0x7713, 0xD2D0, 0x7715, 0xD2D4, 0x7719, 0xD2D5, - 0x771A, 0xD2D6, 0x771B, 0xD2CE, 0x771D, 0xD2CD, 0x771F, 0xAF75, - 0x7720, 0xAF76, 0x7722, 0xD2D7, 0x7723, 0xD2D2, 0x7725, 0xD6B0, - 0x7727, 0xD2D8, 0x7728, 0xAF77, 0x7729, 0xAF74, 0x772D, 0xD6AA, - 0x772F, 0xD6A9, 0x7731, 0xD6AB, 0x7732, 0xD6AC, 0x7733, 0xD6AE, - 0x7734, 0xD6AD, 0x7735, 0xD6B2, 0x7736, 0xB2B5, 0x7737, 0xB2B2, - 0x7738, 0xB2B6, 0x7739, 0xD6A8, 0x773A, 0xB2B7, 0x773B, 0xD6B1, - 0x773C, 0xB2B4, 0x773D, 0xD6AF, 0x773E, 0xB2B3, 0x7744, 0xDABC, - 0x7745, 0xDABE, 0x7746, 0xDABA, 0x7747, 0xDABB, 0x774A, 0xDABF, - 0x774B, 0xDAC1, 0x774C, 0xDAC2, 0x774D, 0xDABD, 0x774E, 0xDAC0, - 0x774F, 0xB574, 0x7752, 0xDEDB, 0x7754, 0xDEE0, 0x7755, 0xDED8, - 0x7756, 0xDEDC, 0x7759, 0xDEE1, 0x775A, 0xDEDD, 0x775B, 0xB7FA, - 0x775C, 0xB843, 0x775E, 0xB7FD, 0x775F, 0xDED9, 0x7760, 0xDEDA, - 0x7761, 0xBACE, 0x7762, 0xB846, 0x7763, 0xB7FE, 0x7765, 0xB844, - 0x7766, 0xB7FC, 0x7767, 0xDEDF, 0x7768, 0xB845, 0x7769, 0xDEDE, - 0x776A, 0xB841, 0x776B, 0xB7FB, 0x776C, 0xB842, 0x776D, 0xDEE2, - 0x776E, 0xE2E6, 0x776F, 0xE2E8, 0x7779, 0xB840, 0x777C, 0xE2E3, - 0x777D, 0xBACC, 0x777E, 0xE2E9, 0x777F, 0xBACD, 0x7780, 0xE2E7, - 0x7781, 0xE2E2, 0x7782, 0xE2E5, 0x7783, 0xE2EA, 0x7784, 0xBACB, - 0x7785, 0xE2E4, 0x7787, 0xBD4E, 0x7788, 0xE6BF, 0x7789, 0xE6BE, - 0x778B, 0xBD51, 0x778C, 0xBD4F, 0x778D, 0xE6BC, 0x778E, 0xBD4D, - 0x778F, 0xE6BD, 0x7791, 0xBD50, 0x7795, 0xEA7D, 0x7797, 0xEAA1, - 0x7799, 0xEA7E, 0x779A, 0xEA76, 0x779B, 0xEA7A, 0x779C, 0xEA79, - 0x779D, 0xEA77, 0x779E, 0xBF66, 0x779F, 0xBF67, 0x77A0, 0xBF65, - 0x77A1, 0xEA78, 0x77A2, 0xEA7B, 0x77A3, 0xEA7C, 0x77A5, 0xBF68, - 0x77A7, 0xC140, 0x77A8, 0xEDA3, 0x77AA, 0xC0FC, 0x77AB, 0xED7B, - 0x77AC, 0xC0FE, 0x77AD, 0xC141, 0x77B0, 0xC0FD, 0x77B1, 0xEDA2, - 0x77B2, 0xED7C, 0x77B3, 0xC0FB, 0x77B4, 0xEDA1, 0x77B5, 0xED7A, - 0x77B6, 0xED7E, 0x77B7, 0xED7D, 0x77BA, 0xF055, 0x77BB, 0xC2A4, - 0x77BC, 0xC2A5, 0x77BD, 0xC2A2, 0x77BF, 0xC2A3, 0x77C2, 0xF054, - 0x77C4, 0xF27B, 0x77C7, 0xC3A9, 0x77C9, 0xF279, 0x77CA, 0xF27A, - 0x77CC, 0xF474, 0x77CD, 0xF477, 0x77CE, 0xF475, 0x77CF, 0xF476, - 0x77D0, 0xF5E0, 0x77D3, 0xC4EF, 0x77D4, 0xF7EB, 0x77D5, 0xF8B4, - 0x77D7, 0xC5F7, 0x77D8, 0xF8F8, 0x77D9, 0xF8F9, 0x77DA, 0xC666, - 0x77DB, 0xA5D9, 0x77DC, 0xACE1, 0x77DE, 0xDAC3, 0x77E0, 0xDEE3, - 0x77E2, 0xA5DA, 0x77E3, 0xA86F, 0x77E5, 0xAABE, 0x77E7, 0xCFE8, - 0x77E8, 0xCFE9, 0x77E9, 0xAF78, 0x77EC, 0xDAC4, 0x77ED, 0xB575, - 0x77EE, 0xB847, 0x77EF, 0xC142, 0x77F0, 0xEDA4, 0x77F1, 0xF27C, - 0x77F2, 0xF478, 0x77F3, 0xA5DB, 0x77F7, 0xCDA1, 0x77F8, 0xCD7A, - 0x77F9, 0xCD7C, 0x77FA, 0xCD7E, 0x77FB, 0xCD7D, 0x77FC, 0xCD7B, - 0x77FD, 0xAABF, 0x7802, 0xACE2, 0x7803, 0xCFF2, 0x7805, 0xCFED, - 0x7806, 0xCFEA, 0x7809, 0xCFF1, 0x780C, 0xACE4, 0x780D, 0xACE5, - 0x780E, 0xCFF0, 0x780F, 0xCFEF, 0x7810, 0xCFEE, 0x7811, 0xCFEB, - 0x7812, 0xCFEC, 0x7813, 0xCFF3, 0x7814, 0xACE3, 0x781D, 0xAF7C, - 0x781F, 0xAFA4, 0x7820, 0xAFA3, 0x7821, 0xD2E1, 0x7822, 0xD2DB, - 0x7823, 0xD2D9, 0x7825, 0xAFA1, 0x7826, 0xD6B9, 0x7827, 0xAF7A, - 0x7828, 0xD2DE, 0x7829, 0xD2E2, 0x782A, 0xD2E4, 0x782B, 0xD2E0, - 0x782C, 0xD2DA, 0x782D, 0xAFA2, 0x782E, 0xD2DF, 0x782F, 0xD2DD, - 0x7830, 0xAF79, 0x7831, 0xD2E5, 0x7832, 0xAFA5, 0x7833, 0xD2E3, - 0x7834, 0xAF7D, 0x7835, 0xD2DC, 0x7837, 0xAF7E, 0x7838, 0xAF7B, - 0x7843, 0xB2B9, 0x7845, 0xD6BA, 0x7848, 0xD6B3, 0x7849, 0xD6B5, - 0x784A, 0xD6B7, 0x784C, 0xD6B8, 0x784D, 0xD6B6, 0x784E, 0xB2BA, - 0x7850, 0xD6BB, 0x7852, 0xD6B4, 0x785C, 0xDAC8, 0x785D, 0xB576, - 0x785E, 0xDAD0, 0x7860, 0xDAC5, 0x7862, 0xDAD1, 0x7864, 0xDAC6, - 0x7865, 0xDAC7, 0x7868, 0xDACF, 0x7869, 0xDACE, 0x786A, 0xDACB, - 0x786B, 0xB2B8, 0x786C, 0xB577, 0x786D, 0xDAC9, 0x786E, 0xDACC, - 0x786F, 0xB578, 0x7870, 0xDACD, 0x7871, 0xDACA, 0x7879, 0xDEEE, - 0x787B, 0xDEF2, 0x787C, 0xB84E, 0x787E, 0xE2F0, 0x787F, 0xB851, - 0x7880, 0xDEF0, 0x7881, 0xF9D6, 0x7883, 0xDEED, 0x7884, 0xDEE8, - 0x7885, 0xDEEA, 0x7886, 0xDEEB, 0x7887, 0xDEE4, 0x7889, 0xB84D, - 0x788C, 0xB84C, 0x788E, 0xB848, 0x788F, 0xDEE7, 0x7891, 0xB84F, - 0x7893, 0xB850, 0x7894, 0xDEE6, 0x7895, 0xDEE9, 0x7896, 0xDEF1, - 0x7897, 0xB84A, 0x7898, 0xB84B, 0x7899, 0xDEEF, 0x789A, 0xDEE5, - 0x789E, 0xE2F2, 0x789F, 0xBAD0, 0x78A0, 0xE2F4, 0x78A1, 0xDEEC, - 0x78A2, 0xE2F6, 0x78A3, 0xBAD4, 0x78A4, 0xE2F7, 0x78A5, 0xE2F3, - 0x78A7, 0xBAD1, 0x78A8, 0xE2EF, 0x78A9, 0xBAD3, 0x78AA, 0xE2EC, - 0x78AB, 0xE2F1, 0x78AC, 0xE2F5, 0x78AD, 0xE2EE, 0x78B0, 0xB849, - 0x78B2, 0xE2EB, 0x78B3, 0xBAD2, 0x78B4, 0xE2ED, 0x78BA, 0xBD54, - 0x78BB, 0xE6C1, 0x78BC, 0xBD58, 0x78BE, 0xBD56, 0x78C1, 0xBACF, - 0x78C3, 0xE6C8, 0x78C4, 0xE6C9, 0x78C5, 0xBD53, 0x78C8, 0xE6C7, - 0x78C9, 0xE6CA, 0x78CA, 0xBD55, 0x78CB, 0xBD52, 0x78CC, 0xE6C3, - 0x78CD, 0xE6C0, 0x78CE, 0xE6C5, 0x78CF, 0xE6C2, 0x78D0, 0xBD59, - 0x78D1, 0xE6C4, 0x78D4, 0xE6C6, 0x78D5, 0xBD57, 0x78DA, 0xBF6A, - 0x78DB, 0xEAA8, 0x78DD, 0xEAA2, 0x78DE, 0xEAA6, 0x78DF, 0xEAAC, - 0x78E0, 0xEAAD, 0x78E1, 0xEAA9, 0x78E2, 0xEAAA, 0x78E3, 0xEAA7, - 0x78E5, 0xEAA4, 0x78E7, 0xBF6C, 0x78E8, 0xBF69, 0x78E9, 0xEAA3, - 0x78EA, 0xEAA5, 0x78EC, 0xBF6B, 0x78ED, 0xEAAB, 0x78EF, 0xC146, - 0x78F2, 0xEDAA, 0x78F3, 0xEDA5, 0x78F4, 0xC145, 0x78F7, 0xC143, - 0x78F9, 0xEDAC, 0x78FA, 0xC144, 0x78FB, 0xEDA8, 0x78FC, 0xEDA9, - 0x78FD, 0xEDA6, 0x78FE, 0xEDAD, 0x78FF, 0xF056, 0x7901, 0xC147, - 0x7902, 0xEDA7, 0x7904, 0xEDAE, 0x7905, 0xEDAB, 0x7909, 0xF05A, - 0x790C, 0xF057, 0x790E, 0xC2A6, 0x7910, 0xF05B, 0x7911, 0xF05D, - 0x7912, 0xF05C, 0x7913, 0xF058, 0x7914, 0xF059, 0x7917, 0xF2A3, - 0x7919, 0xC3AA, 0x791B, 0xF27E, 0x791C, 0xF2A2, 0x791D, 0xF27D, - 0x791E, 0xF2A4, 0x7921, 0xF2A1, 0x7923, 0xF47A, 0x7924, 0xF47D, - 0x7925, 0xF479, 0x7926, 0xC471, 0x7927, 0xF47B, 0x7928, 0xF47C, - 0x7929, 0xF47E, 0x792A, 0xC472, 0x792B, 0xC474, 0x792C, 0xC473, - 0x792D, 0xF5E1, 0x792F, 0xF5E3, 0x7931, 0xF5E2, 0x7935, 0xF6F6, - 0x7938, 0xF8B5, 0x7939, 0xF8FA, 0x793A, 0xA5DC, 0x793D, 0xCB72, - 0x793E, 0xAAC0, 0x793F, 0xCDA3, 0x7940, 0xAAC1, 0x7941, 0xAAC2, - 0x7942, 0xCDA2, 0x7944, 0xCFF8, 0x7945, 0xCFF7, 0x7946, 0xACE6, - 0x7947, 0xACE9, 0x7948, 0xACE8, 0x7949, 0xACE7, 0x794A, 0xCFF4, - 0x794B, 0xCFF6, 0x794C, 0xCFF5, 0x794F, 0xD2E8, 0x7950, 0xAFA7, - 0x7951, 0xD2EC, 0x7952, 0xD2EB, 0x7953, 0xD2EA, 0x7954, 0xD2E6, - 0x7955, 0xAFA6, 0x7956, 0xAFAA, 0x7957, 0xAFAD, 0x795A, 0xAFAE, - 0x795B, 0xD2E7, 0x795C, 0xD2E9, 0x795D, 0xAFAC, 0x795E, 0xAFAB, - 0x795F, 0xAFA9, 0x7960, 0xAFA8, 0x7961, 0xD6C2, 0x7963, 0xD6C0, - 0x7964, 0xD6BC, 0x7965, 0xB2BB, 0x7967, 0xD6BD, 0x7968, 0xB2BC, - 0x7969, 0xD6BE, 0x796A, 0xD6BF, 0x796B, 0xD6C1, 0x796D, 0xB2BD, - 0x7970, 0xDAD5, 0x7972, 0xDAD4, 0x7973, 0xDAD3, 0x7974, 0xDAD2, - 0x7979, 0xDEF6, 0x797A, 0xB852, 0x797C, 0xDEF3, 0x797D, 0xDEF5, - 0x797F, 0xB853, 0x7981, 0xB854, 0x7982, 0xDEF4, 0x7988, 0xE341, - 0x798A, 0xE2F9, 0x798B, 0xE2FA, 0x798D, 0xBAD7, 0x798E, 0xBAD5, - 0x798F, 0xBAD6, 0x7990, 0xE343, 0x7992, 0xE342, 0x7993, 0xE2FE, - 0x7994, 0xE2FD, 0x7995, 0xE2FC, 0x7996, 0xE2FB, 0x7997, 0xE340, - 0x7998, 0xE2F8, 0x799A, 0xE6CB, 0x799B, 0xE6D0, 0x799C, 0xE6CE, - 0x79A0, 0xE6CD, 0x79A1, 0xE6CC, 0x79A2, 0xE6CF, 0x79A4, 0xEAAE, - 0x79A6, 0xBF6D, 0x79A7, 0xC148, 0x79A8, 0xEDB0, 0x79AA, 0xC149, - 0x79AB, 0xEDAF, 0x79AC, 0xF05F, 0x79AD, 0xF05E, 0x79AE, 0xC2A7, - 0x79B0, 0xF2A5, 0x79B1, 0xC3AB, 0x79B2, 0xF4A1, 0x79B3, 0xC5A1, - 0x79B4, 0xF6F7, 0x79B6, 0xF8B7, 0x79B7, 0xF8B6, 0x79B8, 0xC9A8, - 0x79B9, 0xACEA, 0x79BA, 0xACEB, 0x79BB, 0xD6C3, 0x79BD, 0xB856, - 0x79BE, 0xA5DD, 0x79BF, 0xA872, 0x79C0, 0xA871, 0x79C1, 0xA870, - 0x79C5, 0xCDA4, 0x79C8, 0xAAC4, 0x79C9, 0xAAC3, 0x79CB, 0xACEE, - 0x79CD, 0xCFFA, 0x79CE, 0xCFFD, 0x79CF, 0xCFFB, 0x79D1, 0xACEC, - 0x79D2, 0xACED, 0x79D5, 0xCFF9, 0x79D6, 0xCFFC, 0x79D8, 0xAFB5, - 0x79DC, 0xD2F3, 0x79DD, 0xD2F5, 0x79DE, 0xD2F4, 0x79DF, 0xAFB2, - 0x79E0, 0xD2EF, 0x79E3, 0xAFB0, 0x79E4, 0xAFAF, 0x79E6, 0xAFB3, - 0x79E7, 0xAFB1, 0x79E9, 0xAFB4, 0x79EA, 0xD2F2, 0x79EB, 0xD2ED, - 0x79EC, 0xD2EE, 0x79ED, 0xD2F1, 0x79EE, 0xD2F0, 0x79F6, 0xD6C6, - 0x79F7, 0xD6C7, 0x79F8, 0xD6C5, 0x79FA, 0xD6C4, 0x79FB, 0xB2BE, - 0x7A00, 0xB57D, 0x7A02, 0xDAD6, 0x7A03, 0xDAD8, 0x7A04, 0xDADA, - 0x7A05, 0xB57C, 0x7A08, 0xB57A, 0x7A0A, 0xDAD7, 0x7A0B, 0xB57B, - 0x7A0C, 0xDAD9, 0x7A0D, 0xB579, 0x7A10, 0xDF41, 0x7A11, 0xDEF7, - 0x7A12, 0xDEFA, 0x7A13, 0xDEFE, 0x7A14, 0xB85A, 0x7A15, 0xDEFC, - 0x7A17, 0xDEFB, 0x7A18, 0xDEF8, 0x7A19, 0xDEF9, 0x7A1A, 0xB858, - 0x7A1B, 0xDF40, 0x7A1C, 0xB857, 0x7A1E, 0xB85C, 0x7A1F, 0xB85B, - 0x7A20, 0xB859, 0x7A22, 0xDEFD, 0x7A26, 0xE349, 0x7A28, 0xE348, - 0x7A2B, 0xE344, 0x7A2E, 0xBAD8, 0x7A2F, 0xE347, 0x7A30, 0xE346, - 0x7A31, 0xBAD9, 0x7A37, 0xBD5E, 0x7A39, 0xE6D2, 0x7A3B, 0xBD5F, - 0x7A3C, 0xBD5B, 0x7A3D, 0xBD5D, 0x7A3F, 0xBD5A, 0x7A40, 0xBD5C, - 0x7A44, 0xEAAF, 0x7A46, 0xBF70, 0x7A47, 0xEAB1, 0x7A48, 0xEAB0, - 0x7A4A, 0xE345, 0x7A4B, 0xBF72, 0x7A4C, 0xBF71, 0x7A4D, 0xBF6E, - 0x7A4E, 0xBF6F, 0x7A54, 0xEDB5, 0x7A56, 0xEDB3, 0x7A57, 0xC14A, - 0x7A58, 0xEDB4, 0x7A5A, 0xEDB6, 0x7A5B, 0xEDB2, 0x7A5C, 0xEDB1, - 0x7A5F, 0xF060, 0x7A60, 0xC2AA, 0x7A61, 0xC2A8, 0x7A62, 0xC2A9, - 0x7A67, 0xF2A6, 0x7A68, 0xF2A7, 0x7A69, 0xC3AD, 0x7A6B, 0xC3AC, - 0x7A6C, 0xF4A3, 0x7A6D, 0xF4A4, 0x7A6E, 0xF4A2, 0x7A70, 0xF6F8, - 0x7A71, 0xF6F9, 0x7A74, 0xA5DE, 0x7A75, 0xCA48, 0x7A76, 0xA873, - 0x7A78, 0xCDA5, 0x7A79, 0xAAC6, 0x7A7A, 0xAAC5, 0x7A7B, 0xCDA6, - 0x7A7E, 0xD040, 0x7A7F, 0xACEF, 0x7A80, 0xCFFE, 0x7A81, 0xACF0, - 0x7A84, 0xAFB6, 0x7A85, 0xD2F8, 0x7A86, 0xD2F6, 0x7A87, 0xD2FC, - 0x7A88, 0xAFB7, 0x7A89, 0xD2F7, 0x7A8A, 0xD2FB, 0x7A8B, 0xD2F9, - 0x7A8C, 0xD2FA, 0x7A8F, 0xD6C8, 0x7A90, 0xD6CA, 0x7A92, 0xB2BF, - 0x7A94, 0xD6C9, 0x7A95, 0xB2C0, 0x7A96, 0xB5A2, 0x7A97, 0xB5A1, - 0x7A98, 0xB57E, 0x7A99, 0xDADB, 0x7A9E, 0xDF44, 0x7A9F, 0xB85D, - 0x7AA0, 0xB85E, 0x7AA2, 0xDF43, 0x7AA3, 0xDF42, 0x7AA8, 0xE34A, - 0x7AA9, 0xBADB, 0x7AAA, 0xBADA, 0x7AAB, 0xE34B, 0x7AAC, 0xE34C, - 0x7AAE, 0xBD61, 0x7AAF, 0xBD60, 0x7AB1, 0xEAB5, 0x7AB2, 0xE6D3, - 0x7AB3, 0xE6D5, 0x7AB4, 0xE6D4, 0x7AB5, 0xEAB4, 0x7AB6, 0xEAB2, - 0x7AB7, 0xEAB6, 0x7AB8, 0xEAB3, 0x7ABA, 0xBF73, 0x7ABE, 0xEDB7, - 0x7ABF, 0xC14B, 0x7AC0, 0xEDB8, 0x7AC1, 0xEDB9, 0x7AC4, 0xC2AB, - 0x7AC5, 0xC2AC, 0x7AC7, 0xC475, 0x7ACA, 0xC5D1, 0x7ACB, 0xA5DF, - 0x7AD1, 0xD041, 0x7AD8, 0xD2FD, 0x7AD9, 0xAFB8, 0x7ADF, 0xB3BA, - 0x7AE0, 0xB3B9, 0x7AE3, 0xB5A4, 0x7AE4, 0xDADD, 0x7AE5, 0xB5A3, - 0x7AE6, 0xDADC, 0x7AEB, 0xDF45, 0x7AED, 0xBADC, 0x7AEE, 0xE34D, - 0x7AEF, 0xBADD, 0x7AF6, 0xC476, 0x7AF7, 0xF4A5, 0x7AF9, 0xA6CB, - 0x7AFA, 0xAAC7, 0x7AFB, 0xCDA7, 0x7AFD, 0xACF2, 0x7AFF, 0xACF1, - 0x7B00, 0xD042, 0x7B01, 0xD043, 0x7B04, 0xD340, 0x7B05, 0xD342, - 0x7B06, 0xAFB9, 0x7B08, 0xD344, 0x7B09, 0xD347, 0x7B0A, 0xD345, - 0x7B0E, 0xD346, 0x7B0F, 0xD343, 0x7B10, 0xD2FE, 0x7B11, 0xAFBA, - 0x7B12, 0xD348, 0x7B13, 0xD341, 0x7B18, 0xD6D3, 0x7B19, 0xB2C6, - 0x7B1A, 0xD6DC, 0x7B1B, 0xB2C3, 0x7B1D, 0xD6D5, 0x7B1E, 0xB2C7, - 0x7B20, 0xB2C1, 0x7B22, 0xD6D0, 0x7B23, 0xD6DD, 0x7B24, 0xD6D1, - 0x7B25, 0xD6CE, 0x7B26, 0xB2C5, 0x7B28, 0xB2C2, 0x7B2A, 0xD6D4, - 0x7B2B, 0xD6D7, 0x7B2C, 0xB2C4, 0x7B2D, 0xD6D8, 0x7B2E, 0xB2C8, - 0x7B2F, 0xD6D9, 0x7B30, 0xD6CF, 0x7B31, 0xD6D6, 0x7B32, 0xD6DA, - 0x7B33, 0xD6D2, 0x7B34, 0xD6CD, 0x7B35, 0xD6CB, 0x7B38, 0xD6DB, - 0x7B3B, 0xDADF, 0x7B40, 0xDAE4, 0x7B44, 0xDAE0, 0x7B45, 0xDAE6, - 0x7B46, 0xB5A7, 0x7B47, 0xD6CC, 0x7B48, 0xDAE1, 0x7B49, 0xB5A5, - 0x7B4A, 0xDADE, 0x7B4B, 0xB5AC, 0x7B4C, 0xDAE2, 0x7B4D, 0xB5AB, - 0x7B4E, 0xDAE3, 0x7B4F, 0xB5AD, 0x7B50, 0xB5A8, 0x7B51, 0xB5AE, - 0x7B52, 0xB5A9, 0x7B54, 0xB5AA, 0x7B56, 0xB5A6, 0x7B58, 0xDAE5, - 0x7B60, 0xB861, 0x7B61, 0xDF50, 0x7B63, 0xDF53, 0x7B64, 0xDF47, - 0x7B65, 0xDF4C, 0x7B66, 0xDF46, 0x7B67, 0xB863, 0x7B69, 0xDF4A, - 0x7B6D, 0xDF48, 0x7B6E, 0xB862, 0x7B70, 0xDF4F, 0x7B71, 0xDF4E, - 0x7B72, 0xDF4B, 0x7B73, 0xDF4D, 0x7B74, 0xDF49, 0x7B75, 0xBAE1, - 0x7B76, 0xDF52, 0x7B77, 0xB85F, 0x7B78, 0xDF51, 0x7B82, 0xE35D, - 0x7B84, 0xBAE8, 0x7B85, 0xE358, 0x7B87, 0xBAE7, 0x7B88, 0xE34E, - 0x7B8A, 0xE350, 0x7B8B, 0xBAE0, 0x7B8C, 0xE355, 0x7B8D, 0xE354, - 0x7B8E, 0xE357, 0x7B8F, 0xBAE5, 0x7B90, 0xE352, 0x7B91, 0xE351, - 0x7B94, 0xBAE4, 0x7B95, 0xBADF, 0x7B96, 0xE353, 0x7B97, 0xBAE2, - 0x7B98, 0xE359, 0x7B99, 0xE35B, 0x7B9B, 0xE356, 0x7B9C, 0xE34F, - 0x7B9D, 0xBAE3, 0x7BA0, 0xBD69, 0x7BA1, 0xBADE, 0x7BA4, 0xE35C, - 0x7BAC, 0xE6D9, 0x7BAD, 0xBD62, 0x7BAF, 0xE6DB, 0x7BB1, 0xBD63, - 0x7BB4, 0xBD65, 0x7BB5, 0xE6DE, 0x7BB7, 0xE6D6, 0x7BB8, 0xBAE6, - 0x7BB9, 0xE6DC, 0x7BBE, 0xE6D8, 0x7BC0, 0xB860, 0x7BC1, 0xBD68, - 0x7BC4, 0xBD64, 0x7BC6, 0xBD66, 0x7BC7, 0xBD67, 0x7BC9, 0xBF76, - 0x7BCA, 0xE6DD, 0x7BCB, 0xE6D7, 0x7BCC, 0xBD6A, 0x7BCE, 0xE6DA, - 0x7BD4, 0xEAC0, 0x7BD5, 0xEABB, 0x7BD8, 0xEAC5, 0x7BD9, 0xBF74, - 0x7BDA, 0xEABD, 0x7BDB, 0xBF78, 0x7BDC, 0xEAC3, 0x7BDD, 0xEABA, - 0x7BDE, 0xEAB7, 0x7BDF, 0xEAC6, 0x7BE0, 0xC151, 0x7BE1, 0xBF79, - 0x7BE2, 0xEAC2, 0x7BE3, 0xEAB8, 0x7BE4, 0xBF77, 0x7BE5, 0xEABC, - 0x7BE6, 0xBF7B, 0x7BE7, 0xEAB9, 0x7BE8, 0xEABE, 0x7BE9, 0xBF7A, - 0x7BEA, 0xEAC1, 0x7BEB, 0xEAC4, 0x7BF0, 0xEDCB, 0x7BF1, 0xEDCC, - 0x7BF2, 0xEDBC, 0x7BF3, 0xEDC3, 0x7BF4, 0xEDC1, 0x7BF7, 0xC14F, - 0x7BF8, 0xEDC8, 0x7BF9, 0xEABF, 0x7BFB, 0xEDBF, 0x7BFD, 0xEDC9, - 0x7BFE, 0xC14E, 0x7BFF, 0xEDBE, 0x7C00, 0xEDBD, 0x7C01, 0xEDC7, - 0x7C02, 0xEDC4, 0x7C03, 0xEDC6, 0x7C05, 0xEDBA, 0x7C06, 0xEDCA, - 0x7C07, 0xC14C, 0x7C09, 0xEDC5, 0x7C0A, 0xEDCE, 0x7C0B, 0xEDC2, - 0x7C0C, 0xC150, 0x7C0D, 0xC14D, 0x7C0E, 0xEDC0, 0x7C0F, 0xEDBB, - 0x7C10, 0xEDCD, 0x7C11, 0xBF75, 0x7C19, 0xF063, 0x7C1C, 0xF061, - 0x7C1D, 0xF067, 0x7C1E, 0xC2B0, 0x7C1F, 0xF065, 0x7C20, 0xF064, - 0x7C21, 0xC2B2, 0x7C22, 0xF06A, 0x7C23, 0xC2B1, 0x7C25, 0xF06B, - 0x7C26, 0xF068, 0x7C27, 0xC2AE, 0x7C28, 0xF069, 0x7C29, 0xF062, - 0x7C2A, 0xC2AF, 0x7C2B, 0xC2AD, 0x7C2C, 0xF2AB, 0x7C2D, 0xF066, - 0x7C30, 0xF06C, 0x7C33, 0xF2A8, 0x7C37, 0xC3B2, 0x7C38, 0xC3B0, - 0x7C39, 0xF2AA, 0x7C3B, 0xF2AC, 0x7C3C, 0xF2A9, 0x7C3D, 0xC3B1, - 0x7C3E, 0xC3AE, 0x7C3F, 0xC3AF, 0x7C40, 0xC3B3, 0x7C43, 0xC478, - 0x7C45, 0xF4AA, 0x7C47, 0xF4A9, 0x7C48, 0xF4A7, 0x7C49, 0xF4A6, - 0x7C4A, 0xF4A8, 0x7C4C, 0xC477, 0x7C4D, 0xC479, 0x7C50, 0xC4F0, - 0x7C53, 0xF5E5, 0x7C54, 0xF5E4, 0x7C57, 0xF6FA, 0x7C59, 0xF6FC, - 0x7C5A, 0xF6FE, 0x7C5B, 0xF6FD, 0x7C5C, 0xF6FB, 0x7C5F, 0xC5A3, - 0x7C60, 0xC5A2, 0x7C63, 0xC5D3, 0x7C64, 0xC5D2, 0x7C65, 0xC5D4, - 0x7C66, 0xF7ED, 0x7C67, 0xF7EC, 0x7C69, 0xF8FB, 0x7C6A, 0xF8B8, - 0x7C6B, 0xF8FC, 0x7C6C, 0xC658, 0x7C6E, 0xC659, 0x7C6F, 0xF96D, - 0x7C72, 0xC67E, 0x7C73, 0xA6CC, 0x7C75, 0xCDA8, 0x7C78, 0xD045, - 0x7C79, 0xD046, 0x7C7A, 0xD044, 0x7C7D, 0xACF3, 0x7C7F, 0xD047, - 0x7C80, 0xD048, 0x7C81, 0xD049, 0x7C84, 0xD349, 0x7C85, 0xD34F, - 0x7C88, 0xD34D, 0x7C89, 0xAFBB, 0x7C8A, 0xD34B, 0x7C8C, 0xD34C, - 0x7C8D, 0xD34E, 0x7C91, 0xD34A, 0x7C92, 0xB2C9, 0x7C94, 0xD6DE, - 0x7C95, 0xB2CB, 0x7C96, 0xD6E0, 0x7C97, 0xB2CA, 0x7C98, 0xD6DF, - 0x7C9E, 0xDAE8, 0x7C9F, 0xB5AF, 0x7CA1, 0xDAEA, 0x7CA2, 0xDAE7, - 0x7CA3, 0xD6E1, 0x7CA5, 0xB5B0, 0x7CA7, 0xF9DB, 0x7CA8, 0xDAE9, - 0x7CAF, 0xDF56, 0x7CB1, 0xB864, 0x7CB2, 0xDF54, 0x7CB3, 0xB865, - 0x7CB4, 0xDF55, 0x7CB5, 0xB866, 0x7CB9, 0xBAE9, 0x7CBA, 0xE361, - 0x7CBB, 0xE35E, 0x7CBC, 0xE360, 0x7CBD, 0xBAEA, 0x7CBE, 0xBAEB, - 0x7CBF, 0xE35F, 0x7CC5, 0xE6DF, 0x7CC8, 0xE6E0, 0x7CCA, 0xBD6B, - 0x7CCB, 0xE6E2, 0x7CCC, 0xE6E1, 0x7CCE, 0xA261, 0x7CD0, 0xEACA, - 0x7CD1, 0xEACB, 0x7CD2, 0xEAC7, 0x7CD4, 0xEAC8, 0x7CD5, 0xBF7C, - 0x7CD6, 0xBF7D, 0x7CD7, 0xEAC9, 0x7CD9, 0xC157, 0x7CDC, 0xC153, - 0x7CDD, 0xC158, 0x7CDE, 0xC154, 0x7CDF, 0xC156, 0x7CE0, 0xC152, - 0x7CE2, 0xC155, 0x7CE7, 0xC2B3, 0x7CE8, 0xEDCF, 0x7CEA, 0xF2AE, - 0x7CEC, 0xF2AD, 0x7CEE, 0xF4AB, 0x7CEF, 0xC47A, 0x7CF0, 0xC47B, - 0x7CF1, 0xF741, 0x7CF2, 0xF5E6, 0x7CF4, 0xF740, 0x7CF6, 0xF8FD, - 0x7CF7, 0xF9A4, 0x7CF8, 0xA6CD, 0x7CFB, 0xA874, 0x7CFD, 0xCDA9, - 0x7CFE, 0xAAC8, 0x7D00, 0xACF6, 0x7D01, 0xD04C, 0x7D02, 0xACF4, - 0x7D03, 0xD04A, 0x7D04, 0xACF9, 0x7D05, 0xACF5, 0x7D06, 0xACFA, - 0x7D07, 0xACF8, 0x7D08, 0xD04B, 0x7D09, 0xACF7, 0x7D0A, 0xAFBF, - 0x7D0B, 0xAFBE, 0x7D0C, 0xD35A, 0x7D0D, 0xAFC7, 0x7D0E, 0xD353, - 0x7D0F, 0xD359, 0x7D10, 0xAFC3, 0x7D11, 0xD352, 0x7D12, 0xD358, - 0x7D13, 0xD356, 0x7D14, 0xAFC2, 0x7D15, 0xAFC4, 0x7D16, 0xD355, - 0x7D17, 0xAFBD, 0x7D18, 0xD354, 0x7D19, 0xAFC8, 0x7D1A, 0xAFC5, - 0x7D1B, 0xAFC9, 0x7D1C, 0xAFC6, 0x7D1D, 0xD351, 0x7D1E, 0xD350, - 0x7D1F, 0xD357, 0x7D20, 0xAFC0, 0x7D21, 0xAFBC, 0x7D22, 0xAFC1, - 0x7D28, 0xD6F0, 0x7D29, 0xD6E9, 0x7D2B, 0xB5B5, 0x7D2C, 0xD6E8, - 0x7D2E, 0xB2CF, 0x7D2F, 0xB2D6, 0x7D30, 0xB2D3, 0x7D31, 0xB2D9, - 0x7D32, 0xB2D8, 0x7D33, 0xB2D4, 0x7D35, 0xD6E2, 0x7D36, 0xD6E5, - 0x7D38, 0xD6E4, 0x7D39, 0xB2D0, 0x7D3A, 0xD6E6, 0x7D3B, 0xD6EF, - 0x7D3C, 0xB2D1, 0x7D3D, 0xD6E3, 0x7D3E, 0xD6EC, 0x7D3F, 0xD6ED, - 0x7D40, 0xB2D2, 0x7D41, 0xD6EA, 0x7D42, 0xB2D7, 0x7D43, 0xB2CD, - 0x7D44, 0xB2D5, 0x7D45, 0xD6E7, 0x7D46, 0xB2CC, 0x7D47, 0xD6EB, - 0x7D4A, 0xD6EE, 0x7D4E, 0xDAFB, 0x7D4F, 0xDAF2, 0x7D50, 0xB5B2, - 0x7D51, 0xDAF9, 0x7D52, 0xDAF6, 0x7D53, 0xDAEE, 0x7D54, 0xDAF7, - 0x7D55, 0xB5B4, 0x7D56, 0xDAEF, 0x7D58, 0xDAEB, 0x7D5B, 0xB86C, - 0x7D5C, 0xDAF4, 0x7D5E, 0xB5B1, 0x7D5F, 0xDAFA, 0x7D61, 0xB5B8, - 0x7D62, 0xB5BA, 0x7D63, 0xDAED, 0x7D66, 0xB5B9, 0x7D67, 0xDAF0, - 0x7D68, 0xB5B3, 0x7D69, 0xDAF8, 0x7D6A, 0xDAF1, 0x7D6B, 0xDAF5, - 0x7D6D, 0xDAF3, 0x7D6E, 0xB5B6, 0x7D6F, 0xDAEC, 0x7D70, 0xB5BB, - 0x7D71, 0xB2CE, 0x7D72, 0xB5B7, 0x7D73, 0xB5BC, 0x7D79, 0xB868, - 0x7D7A, 0xDF5D, 0x7D7B, 0xDF5F, 0x7D7C, 0xDF61, 0x7D7D, 0xDF65, - 0x7D7F, 0xDF5B, 0x7D80, 0xDF59, 0x7D81, 0xB86A, 0x7D83, 0xDF60, - 0x7D84, 0xDF64, 0x7D85, 0xDF5C, 0x7D86, 0xDF58, 0x7D88, 0xDF57, - 0x7D8C, 0xDF62, 0x7D8D, 0xDF5A, 0x7D8E, 0xDF5E, 0x7D8F, 0xB86B, - 0x7D91, 0xB869, 0x7D92, 0xDF66, 0x7D93, 0xB867, 0x7D94, 0xDF63, - 0x7D96, 0xE372, 0x7D9C, 0xBAEE, 0x7D9D, 0xE36A, 0x7D9E, 0xBD78, - 0x7D9F, 0xE374, 0x7DA0, 0xBAF1, 0x7DA1, 0xE378, 0x7DA2, 0xBAF7, - 0x7DA3, 0xE365, 0x7DA6, 0xE375, 0x7DA7, 0xE362, 0x7DA9, 0xE377, - 0x7DAA, 0xE366, 0x7DAC, 0xBAFE, 0x7DAD, 0xBAFB, 0x7DAE, 0xE376, - 0x7DAF, 0xE370, 0x7DB0, 0xBAED, 0x7DB1, 0xBAF5, 0x7DB2, 0xBAF4, - 0x7DB4, 0xBAF3, 0x7DB5, 0xBAF9, 0x7DB7, 0xE363, 0x7DB8, 0xBAFA, - 0x7DB9, 0xE371, 0x7DBA, 0xBAF6, 0x7DBB, 0xBAEC, 0x7DBC, 0xE373, - 0x7DBD, 0xBAEF, 0x7DBE, 0xBAF0, 0x7DBF, 0xBAF8, 0x7DC0, 0xE368, - 0x7DC1, 0xE367, 0x7DC2, 0xE364, 0x7DC4, 0xE36C, 0x7DC5, 0xE369, - 0x7DC6, 0xE36D, 0x7DC7, 0xBAFD, 0x7DC9, 0xE379, 0x7DCA, 0xBAF2, - 0x7DCB, 0xE36E, 0x7DCC, 0xE36F, 0x7DCE, 0xE36B, 0x7DD2, 0xBAFC, - 0x7DD7, 0xE6E7, 0x7DD8, 0xBD70, 0x7DD9, 0xBD79, 0x7DDA, 0xBD75, - 0x7DDB, 0xE6E4, 0x7DDD, 0xBD72, 0x7DDE, 0xBD76, 0x7DDF, 0xE6F0, - 0x7DE0, 0xBD6C, 0x7DE1, 0xE6E8, 0x7DE3, 0xBD74, 0x7DE6, 0xE6EB, - 0x7DE7, 0xE6E6, 0x7DE8, 0xBD73, 0x7DE9, 0xBD77, 0x7DEA, 0xE6E5, - 0x7DEC, 0xBD71, 0x7DEE, 0xE6EF, 0x7DEF, 0xBD6E, 0x7DF0, 0xE6EE, - 0x7DF1, 0xE6ED, 0x7DF2, 0xBD7A, 0x7DF3, 0xE572, 0x7DF4, 0xBD6D, - 0x7DF6, 0xE6EC, 0x7DF7, 0xE6E3, 0x7DF9, 0xBD7B, 0x7DFA, 0xE6EA, - 0x7DFB, 0xBD6F, 0x7E03, 0xE6E9, 0x7E08, 0xBFA2, 0x7E09, 0xBFA7, - 0x7E0A, 0xBF7E, 0x7E0B, 0xEAD8, 0x7E0C, 0xEACF, 0x7E0D, 0xEADB, - 0x7E0E, 0xEAD3, 0x7E0F, 0xEAD9, 0x7E10, 0xBFA8, 0x7E11, 0xBFA1, - 0x7E12, 0xEACC, 0x7E13, 0xEAD2, 0x7E14, 0xEADC, 0x7E15, 0xEAD5, - 0x7E16, 0xEADA, 0x7E17, 0xEACE, 0x7E1A, 0xEAD6, 0x7E1B, 0xBFA3, - 0x7E1C, 0xEAD4, 0x7E1D, 0xBFA6, 0x7E1E, 0xBFA5, 0x7E1F, 0xEAD0, - 0x7E20, 0xEAD1, 0x7E21, 0xEACD, 0x7E22, 0xEAD7, 0x7E23, 0xBFA4, - 0x7E24, 0xEADE, 0x7E25, 0xEADD, 0x7E29, 0xEDDA, 0x7E2A, 0xEDD6, - 0x7E2B, 0xC15F, 0x7E2D, 0xEDD0, 0x7E2E, 0xC159, 0x7E2F, 0xC169, - 0x7E30, 0xEDDC, 0x7E31, 0xC161, 0x7E32, 0xC15D, 0x7E33, 0xEDD3, - 0x7E34, 0xC164, 0x7E35, 0xC167, 0x7E36, 0xEDDE, 0x7E37, 0xC15C, - 0x7E38, 0xEDD5, 0x7E39, 0xC165, 0x7E3A, 0xEDE0, 0x7E3B, 0xEDDD, - 0x7E3C, 0xEDD1, 0x7E3D, 0xC160, 0x7E3E, 0xC15A, 0x7E3F, 0xC168, - 0x7E40, 0xEDD8, 0x7E41, 0xC163, 0x7E42, 0xEDD2, 0x7E43, 0xC15E, - 0x7E44, 0xEDDF, 0x7E45, 0xC162, 0x7E46, 0xC15B, 0x7E47, 0xEDD9, - 0x7E48, 0xC166, 0x7E49, 0xEDD7, 0x7E4C, 0xEDDB, 0x7E50, 0xF06E, - 0x7E51, 0xF074, 0x7E52, 0xC2B9, 0x7E53, 0xF077, 0x7E54, 0xC2B4, - 0x7E55, 0xC2B5, 0x7E56, 0xF06F, 0x7E57, 0xF076, 0x7E58, 0xF071, - 0x7E59, 0xC2BA, 0x7E5A, 0xC2B7, 0x7E5C, 0xF06D, 0x7E5E, 0xC2B6, - 0x7E5F, 0xF073, 0x7E60, 0xF075, 0x7E61, 0xC2B8, 0x7E62, 0xF072, - 0x7E63, 0xF070, 0x7E68, 0xF2B8, 0x7E69, 0xC3B7, 0x7E6A, 0xC3B8, - 0x7E6B, 0xC3B4, 0x7E6D, 0xC3B5, 0x7E6F, 0xF2B4, 0x7E70, 0xF2B2, - 0x7E72, 0xF2B6, 0x7E73, 0xC3BA, 0x7E74, 0xF2B7, 0x7E75, 0xF2B0, - 0x7E76, 0xF2AF, 0x7E77, 0xF2B3, 0x7E78, 0xF2B1, 0x7E79, 0xC3B6, - 0x7E7A, 0xF2B5, 0x7E7B, 0xF4AC, 0x7E7C, 0xC47E, 0x7E7D, 0xC47D, - 0x7E7E, 0xF4AD, 0x7E80, 0xF4AF, 0x7E81, 0xF4AE, 0x7E82, 0xC4A1, - 0x7E86, 0xF5EB, 0x7E87, 0xF5E8, 0x7E88, 0xF5E9, 0x7E8A, 0xF5E7, - 0x7E8B, 0xF5EA, 0x7E8C, 0xC4F2, 0x7E8D, 0xF5EC, 0x7E8F, 0xC4F1, - 0x7E91, 0xF742, 0x7E93, 0xC5D5, 0x7E94, 0xC5D7, 0x7E95, 0xF7EE, - 0x7E96, 0xC5D6, 0x7E97, 0xF8B9, 0x7E98, 0xF940, 0x7E99, 0xF942, - 0x7E9A, 0xF8FE, 0x7E9B, 0xF941, 0x7E9C, 0xC66C, 0x7F36, 0xA6CE, - 0x7F38, 0xACFB, 0x7F39, 0xD26F, 0x7F3A, 0xAFCA, 0x7F3D, 0xB2DA, - 0x7F3E, 0xDAFC, 0x7F3F, 0xDAFD, 0x7F43, 0xEADF, 0x7F44, 0xC16A, - 0x7F45, 0xEDE1, 0x7F48, 0xC2BB, 0x7F4A, 0xF2BA, 0x7F4B, 0xF2B9, - 0x7F4C, 0xC4A2, 0x7F4D, 0xF5ED, 0x7F4F, 0xF743, 0x7F50, 0xC5F8, - 0x7F51, 0xCA49, 0x7F54, 0xAAC9, 0x7F55, 0xA875, 0x7F58, 0xD04D, - 0x7F5B, 0xD360, 0x7F5C, 0xD35B, 0x7F5D, 0xD35F, 0x7F5E, 0xD35D, - 0x7F5F, 0xAFCB, 0x7F60, 0xD35E, 0x7F61, 0xD35C, 0x7F63, 0xD6F1, - 0x7F65, 0xDAFE, 0x7F66, 0xDB40, 0x7F67, 0xDF69, 0x7F68, 0xDF6A, - 0x7F69, 0xB86E, 0x7F6A, 0xB86F, 0x7F6B, 0xDF68, 0x7F6C, 0xDF6B, - 0x7F6D, 0xDF67, 0x7F6E, 0xB86D, 0x7F70, 0xBB40, 0x7F72, 0xB870, - 0x7F73, 0xE37A, 0x7F75, 0xBD7C, 0x7F76, 0xE6F1, 0x7F77, 0xBD7D, - 0x7F79, 0xBFA9, 0x7F7A, 0xEAE2, 0x7F7B, 0xEAE0, 0x7F7C, 0xEAE1, - 0x7F7D, 0xEDE4, 0x7F7E, 0xEDE3, 0x7F7F, 0xEDE2, 0x7F83, 0xF2BB, - 0x7F85, 0xC3B9, 0x7F86, 0xF2BC, 0x7F87, 0xF744, 0x7F88, 0xC5F9, - 0x7F89, 0xF8BA, 0x7F8A, 0xA6CF, 0x7F8B, 0xAACB, 0x7F8C, 0xAACA, - 0x7F8D, 0xD04F, 0x7F8E, 0xACFC, 0x7F91, 0xD04E, 0x7F92, 0xD362, - 0x7F94, 0xAFCC, 0x7F95, 0xD6F2, 0x7F96, 0xD361, 0x7F9A, 0xB2DC, - 0x7F9B, 0xD6F5, 0x7F9C, 0xD6F3, 0x7F9D, 0xD6F4, 0x7F9E, 0xB2DB, - 0x7FA0, 0xDB42, 0x7FA1, 0xDB43, 0x7FA2, 0xDB41, 0x7FA4, 0xB873, - 0x7FA5, 0xDF6D, 0x7FA6, 0xDF6C, 0x7FA7, 0xDF6E, 0x7FA8, 0xB872, - 0x7FA9, 0xB871, 0x7FAC, 0xE6F2, 0x7FAD, 0xE6F4, 0x7FAF, 0xBD7E, - 0x7FB0, 0xE6F3, 0x7FB1, 0xEAE3, 0x7FB2, 0xBFAA, 0x7FB3, 0xF079, - 0x7FB5, 0xF078, 0x7FB6, 0xC3BB, 0x7FB7, 0xF2BD, 0x7FB8, 0xC3BD, - 0x7FB9, 0xC3BC, 0x7FBA, 0xF4B0, 0x7FBB, 0xF5EE, 0x7FBC, 0xC4F3, - 0x7FBD, 0xA6D0, 0x7FBE, 0xD050, 0x7FBF, 0xACFD, 0x7FC0, 0xD365, - 0x7FC1, 0xAFCE, 0x7FC2, 0xD364, 0x7FC3, 0xD363, 0x7FC5, 0xAFCD, - 0x7FC7, 0xD6FB, 0x7FC9, 0xD6FD, 0x7FCA, 0xD6F6, 0x7FCB, 0xD6F7, - 0x7FCC, 0xB2DD, 0x7FCD, 0xD6F8, 0x7FCE, 0xB2DE, 0x7FCF, 0xD6FC, - 0x7FD0, 0xD6F9, 0x7FD1, 0xD6FA, 0x7FD2, 0xB2DF, 0x7FD4, 0xB5BE, - 0x7FD5, 0xB5BF, 0x7FD7, 0xDB44, 0x7FDB, 0xDF6F, 0x7FDC, 0xDF70, - 0x7FDE, 0xE37E, 0x7FDF, 0xBB43, 0x7FE0, 0xBB41, 0x7FE1, 0xBB42, - 0x7FE2, 0xE37B, 0x7FE3, 0xE37C, 0x7FE5, 0xE37D, 0x7FE6, 0xE6F9, - 0x7FE8, 0xE6FA, 0x7FE9, 0xBDA1, 0x7FEA, 0xE6F7, 0x7FEB, 0xE6F6, - 0x7FEC, 0xE6F8, 0x7FED, 0xE6F5, 0x7FEE, 0xBFAD, 0x7FEF, 0xEAE4, - 0x7FF0, 0xBFAB, 0x7FF1, 0xBFAC, 0x7FF2, 0xEDE6, 0x7FF3, 0xC16B, - 0x7FF4, 0xEDE5, 0x7FF5, 0xEFA8, 0x7FF7, 0xF07A, 0x7FF8, 0xF07B, - 0x7FF9, 0xC2BC, 0x7FFB, 0xC2BD, 0x7FFC, 0xC16C, 0x7FFD, 0xF2BE, - 0x7FFE, 0xF2BF, 0x7FFF, 0xF4B1, 0x8000, 0xC4A3, 0x8001, 0xA6D1, - 0x8003, 0xA6D2, 0x8004, 0xACFE, 0x8005, 0xAACC, 0x8006, 0xAFCF, - 0x8007, 0xD051, 0x800B, 0xB5C0, 0x800C, 0xA6D3, 0x800D, 0xAD41, - 0x800E, 0xD052, 0x800F, 0xD053, 0x8010, 0xAD40, 0x8011, 0xAD42, - 0x8012, 0xA6D4, 0x8014, 0xD054, 0x8015, 0xAFD1, 0x8016, 0xD366, - 0x8017, 0xAFD3, 0x8018, 0xAFD0, 0x8019, 0xAFD2, 0x801B, 0xD741, - 0x801C, 0xB2E0, 0x801E, 0xD740, 0x801F, 0xD6FE, 0x8021, 0xDF71, - 0x8024, 0xE3A1, 0x8026, 0xBDA2, 0x8028, 0xBFAE, 0x8029, 0xEAE6, - 0x802A, 0xEAE5, 0x802C, 0xEDE7, 0x8030, 0xF5EF, 0x8033, 0xA6D5, - 0x8034, 0xCB73, 0x8035, 0xCDAA, 0x8036, 0xAD43, 0x8037, 0xD055, - 0x8039, 0xD368, 0x803D, 0xAFD4, 0x803E, 0xD367, 0x803F, 0xAFD5, - 0x8043, 0xD743, 0x8046, 0xB2E2, 0x8047, 0xD742, 0x8048, 0xD744, - 0x804A, 0xB2E1, 0x804F, 0xDB46, 0x8050, 0xDB47, 0x8051, 0xDB45, - 0x8052, 0xB5C1, 0x8056, 0xB874, 0x8058, 0xB875, 0x805A, 0xBB45, - 0x805C, 0xE3A3, 0x805D, 0xE3A2, 0x805E, 0xBB44, 0x8064, 0xE6FB, - 0x8067, 0xE6FC, 0x806C, 0xEAE7, 0x806F, 0xC170, 0x8070, 0xC16F, - 0x8071, 0xC16D, 0x8072, 0xC16E, 0x8073, 0xC171, 0x8075, 0xF07C, - 0x8076, 0xC2BF, 0x8077, 0xC2BE, 0x8078, 0xF2C0, 0x8079, 0xF4B2, - 0x807D, 0xC5A5, 0x807E, 0xC5A4, 0x807F, 0xA6D6, 0x8082, 0xD1FB, - 0x8084, 0xB877, 0x8085, 0xB5C2, 0x8086, 0xB876, 0x8087, 0xBB46, - 0x8089, 0xA6D7, 0x808A, 0xC9A9, 0x808B, 0xA6D8, 0x808C, 0xA6D9, - 0x808F, 0xCDAB, 0x8090, 0xCB76, 0x8092, 0xCB77, 0x8093, 0xA877, - 0x8095, 0xCB74, 0x8096, 0xA876, 0x8098, 0xA879, 0x8099, 0xCB75, - 0x809A, 0xA87B, 0x809B, 0xA87A, 0x809C, 0xCB78, 0x809D, 0xA878, - 0x80A1, 0xAAD1, 0x80A2, 0xAACF, 0x80A3, 0xCDAD, 0x80A5, 0xAACE, - 0x80A9, 0xAAD3, 0x80AA, 0xAAD5, 0x80AB, 0xAAD2, 0x80AD, 0xCDB0, - 0x80AE, 0xCDAC, 0x80AF, 0xAAD6, 0x80B1, 0xAAD0, 0x80B2, 0xA87C, - 0x80B4, 0xAAD4, 0x80B5, 0xCDAF, 0x80B8, 0xCDAE, 0x80BA, 0xAACD, - 0x80C2, 0xD05B, 0x80C3, 0xAD47, 0x80C4, 0xAD48, 0x80C5, 0xD05D, - 0x80C7, 0xD057, 0x80C8, 0xD05A, 0x80C9, 0xD063, 0x80CA, 0xD061, - 0x80CC, 0xAD49, 0x80CD, 0xD067, 0x80CE, 0xAD4C, 0x80CF, 0xD064, - 0x80D0, 0xD05C, 0x80D1, 0xD059, 0x80D4, 0xDB49, 0x80D5, 0xD062, - 0x80D6, 0xAD44, 0x80D7, 0xD065, 0x80D8, 0xD056, 0x80D9, 0xD05F, - 0x80DA, 0xAD46, 0x80DB, 0xAD4B, 0x80DC, 0xD060, 0x80DD, 0xAD4F, - 0x80DE, 0xAD4D, 0x80E0, 0xD058, 0x80E1, 0xAD4A, 0x80E3, 0xD05E, - 0x80E4, 0xAD4E, 0x80E5, 0xAD45, 0x80E6, 0xD066, 0x80ED, 0xAFDA, - 0x80EF, 0xAFE3, 0x80F0, 0xAFD8, 0x80F1, 0xAFD6, 0x80F2, 0xD36A, - 0x80F3, 0xAFDE, 0x80F4, 0xAFDB, 0x80F5, 0xD36C, 0x80F8, 0xAFDD, - 0x80F9, 0xD36B, 0x80FA, 0xD369, 0x80FB, 0xD36E, 0x80FC, 0xAFE2, - 0x80FD, 0xAFE0, 0x80FE, 0xDB48, 0x8100, 0xD36F, 0x8101, 0xD36D, - 0x8102, 0xAFD7, 0x8105, 0xAFD9, 0x8106, 0xAFDC, 0x8108, 0xAFDF, - 0x810A, 0xAFE1, 0x8115, 0xD74E, 0x8116, 0xB2E4, 0x8118, 0xD745, - 0x8119, 0xD747, 0x811B, 0xD748, 0x811D, 0xD750, 0x811E, 0xD74C, - 0x811F, 0xD74A, 0x8121, 0xD74D, 0x8122, 0xD751, 0x8123, 0xB2E5, - 0x8124, 0xB2E9, 0x8125, 0xD746, 0x8127, 0xD74F, 0x8129, 0xB2E7, - 0x812B, 0xB2E6, 0x812C, 0xD74B, 0x812D, 0xD749, 0x812F, 0xB2E3, - 0x8130, 0xB2E8, 0x8139, 0xB5C8, 0x813A, 0xDB51, 0x813D, 0xDB4F, - 0x813E, 0xB5CA, 0x8143, 0xDB4A, 0x8144, 0xDFA1, 0x8146, 0xB5C9, - 0x8147, 0xDB4E, 0x814A, 0xDB4B, 0x814B, 0xB5C5, 0x814C, 0xB5CB, - 0x814D, 0xDB50, 0x814E, 0xB5C7, 0x814F, 0xDB4D, 0x8150, 0xBB47, - 0x8151, 0xB5C6, 0x8152, 0xDB4C, 0x8153, 0xB5CC, 0x8154, 0xB5C4, - 0x8155, 0xB5C3, 0x815B, 0xDF77, 0x815C, 0xDF75, 0x815E, 0xDF7B, - 0x8160, 0xDF73, 0x8161, 0xDFA2, 0x8162, 0xDF78, 0x8164, 0xDF72, - 0x8165, 0xB87B, 0x8166, 0xB8A3, 0x8167, 0xDF7D, 0x8169, 0xDF76, - 0x816B, 0xB87E, 0x816E, 0xB87C, 0x816F, 0xDF7E, 0x8170, 0xB879, - 0x8171, 0xB878, 0x8172, 0xDF79, 0x8173, 0xB87D, 0x8174, 0xB5CD, - 0x8176, 0xDF7C, 0x8177, 0xDF74, 0x8178, 0xB87A, 0x8179, 0xB8A1, - 0x817A, 0xB8A2, 0x817F, 0xBB4C, 0x8180, 0xBB48, 0x8182, 0xBB4D, - 0x8183, 0xE3A6, 0x8186, 0xE3A5, 0x8187, 0xE3A7, 0x8188, 0xBB4A, - 0x8189, 0xE3A4, 0x818A, 0xBB4B, 0x818B, 0xE3AA, 0x818C, 0xE3A9, - 0x818D, 0xE3A8, 0x818F, 0xBB49, 0x8195, 0xE741, 0x8197, 0xE744, - 0x8198, 0xBDA8, 0x8199, 0xE743, 0x819A, 0xBDA7, 0x819B, 0xBDA3, - 0x819C, 0xBDA4, 0x819D, 0xBDA5, 0x819E, 0xE740, 0x819F, 0xE6FE, - 0x81A0, 0xBDA6, 0x81A2, 0xE742, 0x81A3, 0xE6FD, 0x81A6, 0xEAE9, - 0x81A7, 0xEAF3, 0x81A8, 0xBFB1, 0x81A9, 0xBFB0, 0x81AB, 0xEAED, - 0x81AC, 0xEAEF, 0x81AE, 0xEAEA, 0x81B0, 0xEAEE, 0x81B1, 0xEAE8, - 0x81B2, 0xEAF1, 0x81B3, 0xBFAF, 0x81B4, 0xEAF0, 0x81B5, 0xEAEC, - 0x81B7, 0xEAF2, 0x81B9, 0xEAEB, 0x81BA, 0xC174, 0x81BB, 0xEDE8, - 0x81BC, 0xEDEE, 0x81BD, 0xC178, 0x81BE, 0xC17A, 0x81BF, 0xC177, - 0x81C0, 0xC176, 0x81C2, 0xC175, 0x81C3, 0xC173, 0x81C4, 0xEDE9, - 0x81C5, 0xEDEC, 0x81C6, 0xC172, 0x81C7, 0xEDED, 0x81C9, 0xC179, - 0x81CA, 0xEDEB, 0x81CC, 0xEDEA, 0x81CD, 0xC2C0, 0x81CF, 0xC2C1, - 0x81D0, 0xF0A1, 0x81D1, 0xF07D, 0x81D2, 0xF07E, 0x81D5, 0xF2C2, - 0x81D7, 0xF2C1, 0x81D8, 0xC3BE, 0x81D9, 0xF4B4, 0x81DA, 0xC4A4, - 0x81DB, 0xF4B3, 0x81DD, 0xF5F0, 0x81DE, 0xF745, 0x81DF, 0xC5A6, - 0x81E0, 0xF943, 0x81E1, 0xF944, 0x81E2, 0xC5D8, 0x81E3, 0xA6DA, - 0x81E5, 0xAAD7, 0x81E6, 0xDB52, 0x81E7, 0xBB4E, 0x81E8, 0xC17B, - 0x81E9, 0xEDEF, 0x81EA, 0xA6DB, 0x81EC, 0xAFE5, 0x81ED, 0xAFE4, - 0x81EE, 0xDB53, 0x81F2, 0xEAF4, 0x81F3, 0xA6DC, 0x81F4, 0xAD50, - 0x81F7, 0xDB54, 0x81F8, 0xDB55, 0x81F9, 0xDB56, 0x81FA, 0xBB4F, - 0x81FB, 0xBFB2, 0x81FC, 0xA6DD, 0x81FE, 0xAAD8, 0x81FF, 0xD068, - 0x8200, 0xAFE6, 0x8201, 0xD370, 0x8202, 0xB2EA, 0x8204, 0xDB57, - 0x8205, 0xB8A4, 0x8207, 0xBB50, 0x8208, 0xBFB3, 0x8209, 0xC17C, - 0x820A, 0xC2C2, 0x820B, 0xF4B5, 0x820C, 0xA6DE, 0x820D, 0xAAD9, - 0x8210, 0xAFE7, 0x8211, 0xD752, 0x8212, 0xB5CE, 0x8214, 0xBB51, - 0x8215, 0xE3AB, 0x8216, 0xE745, 0x821B, 0xA6DF, 0x821C, 0xB5CF, - 0x821D, 0xDFA3, 0x821E, 0xBB52, 0x821F, 0xA6E0, 0x8220, 0xCDB1, - 0x8221, 0xD069, 0x8222, 0xAD51, 0x8225, 0xD372, 0x8228, 0xAFEA, - 0x822A, 0xAFE8, 0x822B, 0xAFE9, 0x822C, 0xAFEB, 0x822F, 0xD371, - 0x8232, 0xD757, 0x8233, 0xD754, 0x8234, 0xD756, 0x8235, 0xB2EB, - 0x8236, 0xB2ED, 0x8237, 0xB2EC, 0x8238, 0xD753, 0x8239, 0xB2EE, - 0x823A, 0xD755, 0x823C, 0xDB58, 0x823D, 0xDB59, 0x823F, 0xDB5A, - 0x8240, 0xDFA6, 0x8242, 0xDFA7, 0x8244, 0xDFA5, 0x8245, 0xDFA8, - 0x8247, 0xB8A5, 0x8249, 0xDFA4, 0x824B, 0xBB53, 0x824E, 0xE74A, - 0x824F, 0xE746, 0x8250, 0xE749, 0x8251, 0xE74B, 0x8252, 0xE748, - 0x8253, 0xE747, 0x8255, 0xEAF5, 0x8256, 0xEAF6, 0x8257, 0xEAF7, - 0x8258, 0xBFB4, 0x8259, 0xBFB5, 0x825A, 0xEDF1, 0x825B, 0xEDF0, - 0x825C, 0xEDF2, 0x825E, 0xF0A3, 0x825F, 0xF0A2, 0x8261, 0xF2C4, - 0x8263, 0xF2C5, 0x8264, 0xF2C3, 0x8266, 0xC4A5, 0x8268, 0xF4B6, - 0x8269, 0xF4B7, 0x826B, 0xF746, 0x826C, 0xF7EF, 0x826D, 0xF8BB, - 0x826E, 0xA6E1, 0x826F, 0xA87D, 0x8271, 0xC17D, 0x8272, 0xA6E2, - 0x8274, 0xD758, 0x8275, 0xDB5B, 0x8277, 0xC641, 0x8278, 0xCA4A, - 0x827C, 0xCA4B, 0x827D, 0xCA4D, 0x827E, 0xA6E3, 0x827F, 0xCA4E, - 0x8280, 0xCA4C, 0x8283, 0xCBA2, 0x8284, 0xCBA3, 0x8285, 0xCB7B, - 0x828A, 0xCBA1, 0x828B, 0xA8A1, 0x828D, 0xA8A2, 0x828E, 0xCB7C, - 0x828F, 0xCB7A, 0x8290, 0xCB79, 0x8291, 0xCB7D, 0x8292, 0xA87E, - 0x8293, 0xCB7E, 0x8294, 0xD06A, 0x8298, 0xCDB6, 0x8299, 0xAADC, - 0x829A, 0xCDB5, 0x829B, 0xCDB7, 0x829D, 0xAADB, 0x829E, 0xCDBC, - 0x829F, 0xAADF, 0x82A0, 0xCDB2, 0x82A1, 0xCDC0, 0x82A2, 0xCDC6, - 0x82A3, 0xAAE6, 0x82A4, 0xCDC3, 0x82A5, 0xAAE3, 0x82A7, 0xCDB9, - 0x82A8, 0xCDBF, 0x82A9, 0xCDC1, 0x82AB, 0xCDB4, 0x82AC, 0xAAE2, - 0x82AD, 0xAADD, 0x82AE, 0xCDBA, 0x82AF, 0xAAE4, 0x82B0, 0xAAE7, - 0x82B1, 0xAAE1, 0x82B3, 0xAADA, 0x82B4, 0xCDBE, 0x82B5, 0xCDB8, - 0x82B6, 0xCDC5, 0x82B7, 0xAAE9, 0x82B8, 0xAAE5, 0x82B9, 0xAAE0, - 0x82BA, 0xCDBD, 0x82BB, 0xAFEC, 0x82BC, 0xCDBB, 0x82BD, 0xAADE, - 0x82BE, 0xAAE8, 0x82C0, 0xCDB3, 0x82C2, 0xCDC2, 0x82C3, 0xCDC4, - 0x82D1, 0xAD62, 0x82D2, 0xAD5C, 0x82D3, 0xAD64, 0x82D4, 0xAD61, - 0x82D5, 0xD071, 0x82D6, 0xD074, 0x82D7, 0xAD5D, 0x82D9, 0xD06B, - 0x82DB, 0xAD56, 0x82DC, 0xAD60, 0x82DE, 0xAD63, 0x82DF, 0xAD65, - 0x82E0, 0xD0A2, 0x82E1, 0xD077, 0x82E3, 0xAD55, 0x82E4, 0xD0A1, - 0x82E5, 0xAD59, 0x82E6, 0xAD57, 0x82E7, 0xAD52, 0x82E8, 0xD06F, - 0x82EA, 0xD07E, 0x82EB, 0xD073, 0x82EC, 0xD076, 0x82ED, 0xD0A5, - 0x82EF, 0xAD66, 0x82F0, 0xD07D, 0x82F1, 0xAD5E, 0x82F2, 0xD078, - 0x82F3, 0xD0A4, 0x82F4, 0xD075, 0x82F5, 0xD079, 0x82F6, 0xD07C, - 0x82F9, 0xD06D, 0x82FA, 0xD0A3, 0x82FB, 0xD07B, 0x82FE, 0xD06C, - 0x8300, 0xD070, 0x8301, 0xAD5F, 0x8302, 0xAD5A, 0x8303, 0xAD53, - 0x8304, 0xAD58, 0x8305, 0xAD54, 0x8306, 0xAD67, 0x8307, 0xD06E, - 0x8308, 0xD3A5, 0x8309, 0xAD5B, 0x830C, 0xD07A, 0x830D, 0xCE41, - 0x8316, 0xD3A8, 0x8317, 0xAFFA, 0x8319, 0xD376, 0x831B, 0xD3A3, - 0x831C, 0xD37D, 0x831E, 0xD3B2, 0x8320, 0xD3AA, 0x8322, 0xD37E, - 0x8324, 0xD3A9, 0x8325, 0xD378, 0x8326, 0xD37C, 0x8327, 0xD3B5, - 0x8328, 0xAFFD, 0x8329, 0xD3AD, 0x832A, 0xD3A4, 0x832B, 0xAFED, - 0x832C, 0xD3B3, 0x832D, 0xD374, 0x832F, 0xD3AC, 0x8331, 0xAFFC, - 0x8332, 0xAFF7, 0x8333, 0xD373, 0x8334, 0xAFF5, 0x8335, 0xAFF4, - 0x8336, 0xAFF9, 0x8337, 0xD3AB, 0x8338, 0xAFF1, 0x8339, 0xAFF8, - 0x833A, 0xD072, 0x833B, 0xDB5C, 0x833C, 0xD3A6, 0x833F, 0xD37A, - 0x8340, 0xAFFB, 0x8341, 0xD37B, 0x8342, 0xD3A1, 0x8343, 0xAFFE, - 0x8344, 0xD375, 0x8345, 0xD3AF, 0x8347, 0xD3AE, 0x8348, 0xD3B6, - 0x8349, 0xAFF3, 0x834A, 0xAFF0, 0x834B, 0xD3B4, 0x834C, 0xD3B0, - 0x834D, 0xD3A7, 0x834E, 0xD3A2, 0x834F, 0xAFF6, 0x8350, 0xAFF2, - 0x8351, 0xD377, 0x8352, 0xAFEE, 0x8353, 0xD3B1, 0x8354, 0xAFEF, - 0x8356, 0xD379, 0x8373, 0xD75E, 0x8374, 0xD760, 0x8375, 0xD765, - 0x8376, 0xD779, 0x8377, 0xB2FC, 0x8378, 0xB2F2, 0x837A, 0xD75D, - 0x837B, 0xB2FD, 0x837C, 0xB2FE, 0x837D, 0xD768, 0x837E, 0xD76F, - 0x837F, 0xD775, 0x8381, 0xD762, 0x8383, 0xD769, 0x8386, 0xB340, - 0x8387, 0xD777, 0x8388, 0xD772, 0x8389, 0xB2FA, 0x838A, 0xB2F8, - 0x838B, 0xD76E, 0x838C, 0xD76A, 0x838D, 0xD75C, 0x838E, 0xB2EF, - 0x838F, 0xD761, 0x8390, 0xD759, 0x8392, 0xB2F7, 0x8393, 0xB2F9, - 0x8394, 0xD766, 0x8395, 0xD763, 0x8396, 0xB2F4, 0x8397, 0xD773, - 0x8398, 0xB2F1, 0x8399, 0xD764, 0x839A, 0xD77A, 0x839B, 0xD76C, - 0x839D, 0xD76B, 0x839E, 0xB2F0, 0x83A0, 0xB2FB, 0x83A2, 0xB2F3, - 0x83A3, 0xD75A, 0x83A4, 0xD75F, 0x83A5, 0xD770, 0x83A6, 0xD776, - 0x83A7, 0xB341, 0x83A8, 0xD75B, 0x83A9, 0xD767, 0x83AA, 0xD76D, - 0x83AB, 0xB2F6, 0x83AE, 0xD778, 0x83AF, 0xD771, 0x83B0, 0xD774, - 0x83BD, 0xB2F5, 0x83BF, 0xDB6C, 0x83C0, 0xDB60, 0x83C1, 0xB5D7, - 0x83C2, 0xDB7D, 0x83C3, 0xDBA7, 0x83C4, 0xDBAA, 0x83C5, 0xB5D5, - 0x83C6, 0xDB68, 0x83C7, 0xDBA3, 0x83C8, 0xDB69, 0x83C9, 0xDB77, - 0x83CA, 0xB5E2, 0x83CB, 0xDB73, 0x83CC, 0xB5DF, 0x83CE, 0xDB74, - 0x83CF, 0xDB5D, 0x83D1, 0xDBA4, 0x83D4, 0xB5E8, 0x83D5, 0xDBA1, - 0x83D6, 0xDB75, 0x83D7, 0xDBAC, 0x83D8, 0xDB70, 0x83D9, 0xDFC8, - 0x83DB, 0xDBAF, 0x83DC, 0xB5E6, 0x83DD, 0xDB6E, 0x83DE, 0xDB7A, - 0x83DF, 0xB5E9, 0x83E0, 0xB5D4, 0x83E1, 0xDB72, 0x83E2, 0xDBAD, - 0x83E3, 0xDB6B, 0x83E4, 0xDB64, 0x83E5, 0xDB6F, 0x83E7, 0xDB63, - 0x83E8, 0xDB61, 0x83E9, 0xB5D0, 0x83EA, 0xDBA5, 0x83EB, 0xDB6A, - 0x83EC, 0xDBA8, 0x83EE, 0xDBA9, 0x83EF, 0xB5D8, 0x83F0, 0xB5DD, - 0x83F1, 0xB5D9, 0x83F2, 0xB5E1, 0x83F3, 0xDB7E, 0x83F4, 0xB5DA, - 0x83F5, 0xDB76, 0x83F6, 0xDB66, 0x83F8, 0xB5D2, 0x83F9, 0xDB5E, - 0x83FA, 0xDBA2, 0x83FB, 0xDBAB, 0x83FC, 0xDB65, 0x83FD, 0xB5E0, - 0x83FE, 0xDBB0, 0x83FF, 0xDB71, 0x8401, 0xDB6D, 0x8403, 0xB5D1, - 0x8404, 0xB5E5, 0x8406, 0xDB7C, 0x8407, 0xB5E7, 0x8409, 0xDB78, - 0x840A, 0xB5DC, 0x840B, 0xB5D6, 0x840C, 0xB5DE, 0x840D, 0xB5D3, - 0x840E, 0xB5E4, 0x840F, 0xDB79, 0x8410, 0xDB67, 0x8411, 0xDB7B, - 0x8412, 0xDB62, 0x8413, 0xDBA6, 0x841B, 0xDBAE, 0x8423, 0xDB5F, - 0x8429, 0xDFC7, 0x842B, 0xDFDD, 0x842C, 0xB855, 0x842D, 0xDFCC, - 0x842F, 0xDFCA, 0x8430, 0xDFB5, 0x8431, 0xB8A9, 0x8432, 0xDFC5, - 0x8433, 0xDFD9, 0x8434, 0xDFC1, 0x8435, 0xB8B1, 0x8436, 0xDFD8, - 0x8437, 0xDFBF, 0x8438, 0xB5E3, 0x8439, 0xDFCF, 0x843A, 0xDFC0, - 0x843B, 0xDFD6, 0x843C, 0xB8B0, 0x843D, 0xB8A8, 0x843F, 0xDFAA, - 0x8440, 0xDFB2, 0x8442, 0xDFCB, 0x8443, 0xDFC3, 0x8444, 0xDFDC, - 0x8445, 0xDFC6, 0x8446, 0xB8B6, 0x8447, 0xDFD7, 0x8449, 0xB8AD, - 0x844B, 0xDFC9, 0x844C, 0xDFD1, 0x844D, 0xDFB6, 0x844E, 0xDFD0, - 0x8450, 0xDFE1, 0x8451, 0xDFB1, 0x8452, 0xDFD2, 0x8454, 0xDFDF, - 0x8456, 0xDFAB, 0x8457, 0xB5DB, 0x8459, 0xDFB9, 0x845A, 0xDFB8, - 0x845B, 0xB8AF, 0x845D, 0xDFBC, 0x845E, 0xDFBE, 0x845F, 0xDFCD, - 0x8460, 0xDFDE, 0x8461, 0xB8B2, 0x8463, 0xB8B3, 0x8465, 0xDFB0, - 0x8466, 0xB8AB, 0x8467, 0xDFB4, 0x8468, 0xDFDA, 0x8469, 0xB8B4, - 0x846B, 0xB8AC, 0x846C, 0xB8AE, 0x846D, 0xB8B5, 0x846E, 0xDFE0, - 0x846F, 0xDFD3, 0x8470, 0xDFCE, 0x8473, 0xDFBB, 0x8474, 0xDFBA, - 0x8475, 0xB8AA, 0x8476, 0xDFAC, 0x8477, 0xB8A7, 0x8478, 0xDFC4, - 0x8479, 0xDFAD, 0x847A, 0xDFC2, 0x847D, 0xDFB7, 0x847E, 0xDFDB, - 0x8482, 0xB8A6, 0x8486, 0xDFB3, 0x848D, 0xDFAF, 0x848E, 0xDFD5, - 0x848F, 0xDFAE, 0x8490, 0xBB60, 0x8491, 0xE3D3, 0x8494, 0xE3C2, - 0x8497, 0xE3AC, 0x8498, 0xE3CA, 0x8499, 0xBB58, 0x849A, 0xE3BB, - 0x849B, 0xE3C5, 0x849C, 0xBB5B, 0x849D, 0xE3BE, 0x849E, 0xBB59, - 0x849F, 0xE3AF, 0x84A0, 0xE3CD, 0x84A1, 0xE3AE, 0x84A2, 0xE3C1, - 0x84A4, 0xE3AD, 0x84A7, 0xE3BF, 0x84A8, 0xE3C8, 0x84A9, 0xE3C6, - 0x84AA, 0xE3BA, 0x84AB, 0xE3B5, 0x84AC, 0xE3B3, 0x84AE, 0xE3B4, - 0x84AF, 0xE3C7, 0x84B0, 0xE3D2, 0x84B1, 0xE3BC, 0x84B2, 0xBB5A, - 0x84B4, 0xE3B7, 0x84B6, 0xE3CB, 0x84B8, 0xBB5D, 0x84B9, 0xE3B6, - 0x84BA, 0xE3B0, 0x84BB, 0xE3C0, 0x84BC, 0xBB61, 0x84BF, 0xBB55, - 0x84C0, 0xBB5E, 0x84C1, 0xE3B8, 0x84C2, 0xE3B2, 0x84C4, 0xBB57, - 0x84C5, 0xDFD4, 0x84C6, 0xBB56, 0x84C7, 0xE3C3, 0x84C9, 0xBB54, - 0x84CA, 0xBB63, 0x84CB, 0xBB5C, 0x84CC, 0xE3C4, 0x84CD, 0xE3B9, - 0x84CE, 0xE3B1, 0x84CF, 0xE3CC, 0x84D0, 0xE3BD, 0x84D1, 0xBB62, - 0x84D2, 0xE3D0, 0x84D3, 0xBB5F, 0x84D4, 0xE3CF, 0x84D6, 0xE3C9, - 0x84D7, 0xE3CE, 0x84DB, 0xE3D1, 0x84E7, 0xE773, 0x84E8, 0xE774, - 0x84E9, 0xE767, 0x84EA, 0xE766, 0x84EB, 0xE762, 0x84EC, 0xBDB4, - 0x84EE, 0xBDAC, 0x84EF, 0xE776, 0x84F0, 0xE775, 0x84F1, 0xDFA9, - 0x84F2, 0xE75F, 0x84F3, 0xE763, 0x84F4, 0xE75D, 0x84F6, 0xE770, - 0x84F7, 0xE761, 0x84F9, 0xE777, 0x84FA, 0xE75A, 0x84FB, 0xE758, - 0x84FC, 0xE764, 0x84FD, 0xE76E, 0x84FE, 0xE769, 0x84FF, 0xBDB6, - 0x8500, 0xE74F, 0x8502, 0xE76D, 0x8506, 0xBDB7, 0x8507, 0xDFBD, - 0x8508, 0xE75B, 0x8509, 0xE752, 0x850A, 0xE755, 0x850B, 0xE77B, - 0x850C, 0xE75C, 0x850D, 0xE753, 0x850E, 0xE751, 0x850F, 0xE74E, - 0x8511, 0xBDB0, 0x8512, 0xE765, 0x8513, 0xBDAF, 0x8514, 0xBDB3, - 0x8515, 0xE760, 0x8516, 0xE768, 0x8517, 0xBDA9, 0x8518, 0xE778, - 0x8519, 0xE77C, 0x851A, 0xBDAB, 0x851C, 0xE757, 0x851D, 0xE76B, - 0x851E, 0xE76F, 0x851F, 0xE754, 0x8520, 0xE779, 0x8521, 0xBDB2, - 0x8523, 0xBDB1, 0x8524, 0xE74C, 0x8525, 0xBDB5, 0x8526, 0xE772, - 0x8527, 0xE756, 0x8528, 0xE76A, 0x8529, 0xE750, 0x852A, 0xE75E, - 0x852B, 0xE759, 0x852C, 0xBDAD, 0x852D, 0xBDAE, 0x852E, 0xE76C, - 0x852F, 0xE77D, 0x8530, 0xE77A, 0x8531, 0xE771, 0x853B, 0xE74D, - 0x853D, 0xBDAA, 0x853E, 0xEB49, 0x8540, 0xEB40, 0x8541, 0xEB43, - 0x8543, 0xBFBB, 0x8544, 0xEB45, 0x8545, 0xEAF9, 0x8546, 0xEB41, - 0x8547, 0xEB47, 0x8548, 0xBFB8, 0x8549, 0xBFBC, 0x854A, 0xBFB6, - 0x854D, 0xEAFB, 0x854E, 0xEB4C, 0x8551, 0xEB46, 0x8553, 0xEAFC, - 0x8554, 0xEB55, 0x8555, 0xEB4F, 0x8556, 0xEAF8, 0x8557, 0xEE46, - 0x8558, 0xEAFE, 0x8559, 0xBFB7, 0x855B, 0xEB4A, 0x855D, 0xEB54, - 0x855E, 0xBFBF, 0x8560, 0xEB51, 0x8561, 0xEAFD, 0x8562, 0xEB44, - 0x8563, 0xEB48, 0x8564, 0xEB42, 0x8565, 0xEB56, 0x8566, 0xEB53, - 0x8567, 0xEB50, 0x8568, 0xBFB9, 0x8569, 0xBFBA, 0x856A, 0xBFBE, - 0x856B, 0xEAFA, 0x856C, 0xEB57, 0x856D, 0xBFBD, 0x856E, 0xEB4D, - 0x8571, 0xEB4B, 0x8575, 0xEB4E, 0x8576, 0xEE53, 0x8577, 0xEE40, - 0x8578, 0xEE45, 0x8579, 0xEE52, 0x857A, 0xEE44, 0x857B, 0xEDFB, - 0x857C, 0xEE41, 0x857E, 0xC1A2, 0x8580, 0xEDF4, 0x8581, 0xEE4D, - 0x8582, 0xEE4F, 0x8583, 0xEDF3, 0x8584, 0xC1A1, 0x8585, 0xEE51, - 0x8586, 0xEE49, 0x8587, 0xC1A8, 0x8588, 0xEE50, 0x8589, 0xEE42, - 0x858A, 0xC1AA, 0x858B, 0xEDF9, 0x858C, 0xEB52, 0x858D, 0xEE4A, - 0x858E, 0xEE47, 0x858F, 0xEDF5, 0x8590, 0xEE55, 0x8591, 0xC1A4, - 0x8594, 0xC1A5, 0x8595, 0xEDF7, 0x8596, 0xEE48, 0x8598, 0xEE54, - 0x8599, 0xEE4B, 0x859A, 0xEDFD, 0x859B, 0xC1A7, 0x859C, 0xC1A3, - 0x859D, 0xEE4C, 0x859E, 0xEDFE, 0x859F, 0xEE56, 0x85A0, 0xEDF8, - 0x85A1, 0xEE43, 0x85A2, 0xEE4E, 0x85A3, 0xEDFA, 0x85A4, 0xEDFC, - 0x85A6, 0xC2CB, 0x85A7, 0xEDF6, 0x85A8, 0xC1A9, 0x85A9, 0xC2C4, - 0x85AA, 0xC17E, 0x85AF, 0xC1A6, 0x85B0, 0xC2C8, 0x85B1, 0xF0B3, - 0x85B3, 0xF0A9, 0x85B4, 0xF0A4, 0x85B5, 0xF0AA, 0x85B6, 0xF0B4, - 0x85B7, 0xF0B8, 0x85B8, 0xF0B7, 0x85B9, 0xC2CA, 0x85BA, 0xC2C9, - 0x85BD, 0xF0AB, 0x85BE, 0xF0B9, 0x85BF, 0xF0AE, 0x85C0, 0xF0A6, - 0x85C2, 0xF0A8, 0x85C3, 0xF0A7, 0x85C4, 0xF0AD, 0x85C5, 0xF0B2, - 0x85C6, 0xF0A5, 0x85C7, 0xF0AC, 0x85C8, 0xF0B1, 0x85C9, 0xC2C7, - 0x85CB, 0xF0AF, 0x85CD, 0xC2C5, 0x85CE, 0xF0B0, 0x85CF, 0xC2C3, - 0x85D0, 0xC2C6, 0x85D1, 0xF2D5, 0x85D2, 0xF0B5, 0x85D5, 0xC3C2, - 0x85D7, 0xF2CD, 0x85D8, 0xF2D1, 0x85D9, 0xF2C9, 0x85DA, 0xF2CC, - 0x85DC, 0xF2D4, 0x85DD, 0xC3C0, 0x85DE, 0xF2D9, 0x85DF, 0xF2D2, - 0x85E1, 0xF2CA, 0x85E2, 0xF2DA, 0x85E3, 0xF2D3, 0x85E4, 0xC3C3, - 0x85E5, 0xC3C4, 0x85E6, 0xF2D7, 0x85E8, 0xF2CB, 0x85E9, 0xC3BF, - 0x85EA, 0xC3C1, 0x85EB, 0xF2C6, 0x85EC, 0xF2CE, 0x85ED, 0xF2C8, - 0x85EF, 0xF2D8, 0x85F0, 0xF2D6, 0x85F1, 0xF2C7, 0x85F2, 0xF2CF, - 0x85F6, 0xF4BE, 0x85F7, 0xC3C5, 0x85F8, 0xF2D0, 0x85F9, 0xC4A7, - 0x85FA, 0xC4A9, 0x85FB, 0xC4A6, 0x85FD, 0xF4C3, 0x85FE, 0xF4BB, - 0x85FF, 0xF4B9, 0x8600, 0xF4BD, 0x8601, 0xF4BA, 0x8604, 0xF4BF, - 0x8605, 0xF4C1, 0x8606, 0xC4AA, 0x8607, 0xC4AC, 0x8609, 0xF4C0, - 0x860A, 0xC4AD, 0x860B, 0xC4AB, 0x860C, 0xF4C2, 0x8611, 0xC4A8, - 0x8617, 0xC4F4, 0x8618, 0xF5F1, 0x8619, 0xF5F7, 0x861A, 0xC4F6, - 0x861B, 0xF4BC, 0x861C, 0xF5F6, 0x861E, 0xF5FD, 0x861F, 0xF5F4, - 0x8620, 0xF5FB, 0x8621, 0xF5FA, 0x8622, 0xF4B8, 0x8623, 0xF5F5, - 0x8624, 0xF0B6, 0x8625, 0xF5FE, 0x8626, 0xF5F3, 0x8627, 0xF5F8, - 0x8629, 0xF5FC, 0x862A, 0xF5F2, 0x862C, 0xF74A, 0x862D, 0xC4F5, - 0x862E, 0xF5F9, 0x8631, 0xF7F4, 0x8632, 0xF74B, 0x8633, 0xF749, - 0x8634, 0xF747, 0x8635, 0xF748, 0x8636, 0xF74C, 0x8638, 0xC5D9, - 0x8639, 0xF7F2, 0x863A, 0xF7F0, 0x863B, 0xF7F5, 0x863C, 0xF7F3, - 0x863E, 0xF7F6, 0x863F, 0xC5DA, 0x8640, 0xF7F1, 0x8643, 0xF8BC, - 0x8646, 0xF945, 0x8647, 0xF946, 0x8648, 0xF947, 0x864B, 0xF9C7, - 0x864C, 0xF9BD, 0x864D, 0xCA4F, 0x864E, 0xAAEA, 0x8650, 0xAD68, - 0x8652, 0xD3B8, 0x8653, 0xD3B7, 0x8654, 0xB040, 0x8655, 0xB342, - 0x8656, 0xD77C, 0x8659, 0xD77B, 0x865B, 0xB5EA, 0x865C, 0xB8B8, - 0x865E, 0xB8B7, 0x865F, 0xB8B9, 0x8661, 0xE3D4, 0x8662, 0xE77E, - 0x8663, 0xEB58, 0x8664, 0xEB5A, 0x8665, 0xEB59, 0x8667, 0xC1AB, - 0x8668, 0xEE57, 0x8669, 0xF0BA, 0x866A, 0xF9A5, 0x866B, 0xA6E4, - 0x866D, 0xCDC9, 0x866E, 0xCDCA, 0x866F, 0xCDC8, 0x8670, 0xCDC7, - 0x8671, 0xAAEB, 0x8673, 0xD0A9, 0x8674, 0xD0A7, 0x8677, 0xD0A6, - 0x8679, 0xAD69, 0x867A, 0xAD6B, 0x867B, 0xAD6A, 0x867C, 0xD0A8, - 0x8685, 0xD3C4, 0x8686, 0xD3C1, 0x8687, 0xD3BF, 0x868A, 0xB041, - 0x868B, 0xD3C2, 0x868C, 0xB046, 0x868D, 0xD3BC, 0x868E, 0xD3CB, - 0x8690, 0xD3CD, 0x8691, 0xD3BD, 0x8693, 0xB043, 0x8694, 0xD3CE, - 0x8695, 0xD3C9, 0x8696, 0xD3BB, 0x8697, 0xD3C0, 0x8698, 0xD3CA, - 0x8699, 0xD3C6, 0x869A, 0xD3C3, 0x869C, 0xB048, 0x869D, 0xD3CC, - 0x869E, 0xD3BE, 0x86A1, 0xD3C7, 0x86A2, 0xD3B9, 0x86A3, 0xB047, - 0x86A4, 0xB044, 0x86A5, 0xD3C5, 0x86A7, 0xD3C8, 0x86A8, 0xD3BA, - 0x86A9, 0xB045, 0x86AA, 0xB042, 0x86AF, 0xB34C, 0x86B0, 0xD7A5, - 0x86B1, 0xB34B, 0x86B3, 0xD7A8, 0x86B4, 0xD7AB, 0x86B5, 0xB348, - 0x86B6, 0xB346, 0x86B7, 0xD77E, 0x86B8, 0xD7A9, 0x86B9, 0xD7A7, - 0x86BA, 0xD7A4, 0x86BB, 0xD7AC, 0x86BC, 0xD7AD, 0x86BD, 0xD7AF, - 0x86BE, 0xD7B0, 0x86BF, 0xD77D, 0x86C0, 0xB345, 0x86C1, 0xD7A2, - 0x86C2, 0xD7A1, 0x86C3, 0xD7AE, 0x86C4, 0xB347, 0x86C5, 0xD7A3, - 0x86C6, 0xB349, 0x86C7, 0xB344, 0x86C8, 0xD7A6, 0x86C9, 0xB34D, - 0x86CB, 0xB34A, 0x86CC, 0xD7AA, 0x86D0, 0xB5F1, 0x86D1, 0xDBBF, - 0x86D3, 0xDBB4, 0x86D4, 0xB5EE, 0x86D6, 0xDFE7, 0x86D7, 0xDBBD, - 0x86D8, 0xDBB1, 0x86D9, 0xB5EC, 0x86DA, 0xDBB6, 0x86DB, 0xB5EF, - 0x86DC, 0xDBBA, 0x86DD, 0xDBB8, 0x86DE, 0xB5F2, 0x86DF, 0xB5EB, - 0x86E2, 0xDBB2, 0x86E3, 0xDBB5, 0x86E4, 0xB5F0, 0x86E6, 0xDBB3, - 0x86E8, 0xDBBE, 0x86E9, 0xDBBC, 0x86EA, 0xDBB7, 0x86EB, 0xDBB9, - 0x86EC, 0xDBBB, 0x86ED, 0xB5ED, 0x86F5, 0xDFE8, 0x86F6, 0xDFEE, - 0x86F7, 0xDFE4, 0x86F8, 0xDFEA, 0x86F9, 0xB8BA, 0x86FA, 0xDFE6, - 0x86FB, 0xB8C0, 0x86FE, 0xB8BF, 0x8700, 0xB8BE, 0x8701, 0xDFED, - 0x8702, 0xB8C1, 0x8703, 0xB8C2, 0x8704, 0xDFE3, 0x8705, 0xDFF0, - 0x8706, 0xB8C3, 0x8707, 0xB8BD, 0x8708, 0xB8BC, 0x8709, 0xDFEC, - 0x870A, 0xB8C4, 0x870B, 0xDFE2, 0x870C, 0xDFE5, 0x870D, 0xDFEF, - 0x870E, 0xDFEB, 0x8711, 0xE3F4, 0x8712, 0xE3E9, 0x8713, 0xB8BB, - 0x8718, 0xBB6A, 0x8719, 0xE3DD, 0x871A, 0xE3F2, 0x871B, 0xE3DE, - 0x871C, 0xBB65, 0x871E, 0xE3DB, 0x8720, 0xE3E4, 0x8721, 0xE3DC, - 0x8722, 0xBB67, 0x8723, 0xE3D6, 0x8724, 0xE3F1, 0x8725, 0xBB68, - 0x8726, 0xE3EE, 0x8727, 0xE3EF, 0x8728, 0xE3D7, 0x8729, 0xBB6D, - 0x872A, 0xE3E6, 0x872C, 0xE3E0, 0x872D, 0xE3E7, 0x872E, 0xE3DA, - 0x8730, 0xE3F3, 0x8731, 0xE3EB, 0x8732, 0xE3E5, 0x8733, 0xE3D5, - 0x8734, 0xBB69, 0x8735, 0xE3EC, 0x8737, 0xBB6C, 0x8738, 0xE3F0, - 0x873A, 0xE3EA, 0x873B, 0xBB66, 0x873C, 0xE3E8, 0x873E, 0xE3E2, - 0x873F, 0xBB64, 0x8740, 0xE3D9, 0x8741, 0xE3E1, 0x8742, 0xE3ED, - 0x8743, 0xE3DF, 0x8746, 0xE3E3, 0x874C, 0xBDC1, 0x874D, 0xDFE9, - 0x874E, 0xE7B2, 0x874F, 0xE7BB, 0x8750, 0xE7B1, 0x8751, 0xE7AD, - 0x8752, 0xE7AA, 0x8753, 0xBDC2, 0x8754, 0xE7A8, 0x8755, 0xBB6B, - 0x8756, 0xE7A1, 0x8757, 0xBDC0, 0x8758, 0xE7A7, 0x8759, 0xBDBF, - 0x875A, 0xE7AC, 0x875B, 0xE7A9, 0x875C, 0xE7B9, 0x875D, 0xE7B4, - 0x875E, 0xE7AE, 0x875F, 0xE7B3, 0x8760, 0xBDBB, 0x8761, 0xE7AB, - 0x8762, 0xE7BE, 0x8763, 0xE7A2, 0x8764, 0xE7A3, 0x8765, 0xE7BA, - 0x8766, 0xBDBC, 0x8767, 0xE7BF, 0x8768, 0xBDBE, 0x8769, 0xE7C0, - 0x876A, 0xE7B0, 0x876B, 0xE3D8, 0x876C, 0xE7B6, 0x876D, 0xE7AF, - 0x876E, 0xE7B8, 0x876F, 0xE7B5, 0x8773, 0xE7A6, 0x8774, 0xBDB9, - 0x8775, 0xE7BD, 0x8776, 0xBDBA, 0x8777, 0xE7A4, 0x8778, 0xBDBD, - 0x8779, 0xEB64, 0x877A, 0xE7B7, 0x877B, 0xE7BC, 0x8781, 0xEB61, - 0x8782, 0xBDB8, 0x8783, 0xBFC0, 0x8784, 0xEB6B, 0x8785, 0xEB67, - 0x8787, 0xEB65, 0x8788, 0xEB60, 0x8789, 0xEB6F, 0x878D, 0xBFC4, - 0x878F, 0xEB5C, 0x8790, 0xEB68, 0x8791, 0xEB69, 0x8792, 0xEB5F, - 0x8793, 0xEB5E, 0x8794, 0xEB6C, 0x8796, 0xEB62, 0x8797, 0xEB5D, - 0x8798, 0xEB63, 0x879A, 0xEB6E, 0x879B, 0xEB5B, 0x879C, 0xEB6D, - 0x879D, 0xEB6A, 0x879E, 0xBFC2, 0x879F, 0xBFC1, 0x87A2, 0xBFC3, - 0x87A3, 0xEB66, 0x87A4, 0xF0CB, 0x87AA, 0xEE59, 0x87AB, 0xC1B1, - 0x87AC, 0xEE5D, 0x87AD, 0xEE5A, 0x87AE, 0xEE61, 0x87AF, 0xEE67, - 0x87B0, 0xEE5C, 0x87B2, 0xEE70, 0x87B3, 0xC1AE, 0x87B4, 0xEE6A, - 0x87B5, 0xEE5F, 0x87B6, 0xEE6B, 0x87B7, 0xEE66, 0x87B8, 0xEE6D, - 0x87B9, 0xEE5E, 0x87BA, 0xC1B3, 0x87BB, 0xC1B2, 0x87BC, 0xEE60, - 0x87BD, 0xEE6E, 0x87BE, 0xEE58, 0x87BF, 0xEE6C, 0x87C0, 0xC1AC, - 0x87C2, 0xEE64, 0x87C3, 0xEE63, 0x87C4, 0xEE68, 0x87C5, 0xEE5B, - 0x87C6, 0xC1B0, 0x87C8, 0xC1B4, 0x87C9, 0xEE62, 0x87CA, 0xEE69, - 0x87CB, 0xC1B5, 0x87CC, 0xEE65, 0x87D1, 0xC1AD, 0x87D2, 0xC1AF, - 0x87D3, 0xF0C7, 0x87D4, 0xF0C5, 0x87D7, 0xF0CC, 0x87D8, 0xF0C9, - 0x87D9, 0xF0CD, 0x87DB, 0xF0BE, 0x87DC, 0xF0C6, 0x87DD, 0xF0D1, - 0x87DE, 0xEE6F, 0x87DF, 0xF0C2, 0x87E0, 0xC2CF, 0x87E1, 0xE7A5, - 0x87E2, 0xF0BD, 0x87E3, 0xF0CA, 0x87E4, 0xF0C4, 0x87E5, 0xF0C1, - 0x87E6, 0xF0BC, 0x87E7, 0xF0BB, 0x87E8, 0xF0D0, 0x87EA, 0xF0C0, - 0x87EB, 0xF0BF, 0x87EC, 0xC2CD, 0x87ED, 0xF0C8, 0x87EF, 0xC2CC, - 0x87F2, 0xC2CE, 0x87F3, 0xF0C3, 0x87F4, 0xF0CF, 0x87F6, 0xF2DE, - 0x87F7, 0xF2DF, 0x87F9, 0xC3C9, 0x87FA, 0xF2DC, 0x87FB, 0xC3C6, - 0x87FC, 0xF2E4, 0x87FE, 0xC3CA, 0x87FF, 0xF2E6, 0x8800, 0xF2DB, - 0x8801, 0xF0CE, 0x8802, 0xF2E8, 0x8803, 0xF2DD, 0x8805, 0xC3C7, - 0x8806, 0xF2E3, 0x8808, 0xF2E5, 0x8809, 0xF2E0, 0x880A, 0xF2E7, - 0x880B, 0xF2E2, 0x880C, 0xF2E1, 0x880D, 0xC3C8, 0x8810, 0xF4C5, - 0x8811, 0xF4C6, 0x8813, 0xF4C8, 0x8814, 0xC4AE, 0x8815, 0xC4AF, - 0x8816, 0xF4C9, 0x8817, 0xF4C7, 0x8819, 0xF4C4, 0x881B, 0xF642, - 0x881C, 0xF645, 0x881D, 0xF641, 0x881F, 0xC4FA, 0x8820, 0xF643, - 0x8821, 0xC4F9, 0x8822, 0xC4F8, 0x8823, 0xC4F7, 0x8824, 0xF644, - 0x8825, 0xF751, 0x8826, 0xF74F, 0x8828, 0xF74E, 0x8829, 0xF640, - 0x882A, 0xF750, 0x882B, 0xF646, 0x882C, 0xF74D, 0x882E, 0xF7F9, - 0x882F, 0xF7D7, 0x8830, 0xF7F7, 0x8831, 0xC5DB, 0x8832, 0xF7F8, - 0x8833, 0xF7FA, 0x8835, 0xF8BF, 0x8836, 0xC5FA, 0x8837, 0xF8BE, - 0x8838, 0xF8BD, 0x8839, 0xC5FB, 0x883B, 0xC65A, 0x883C, 0xF96E, - 0x883D, 0xF9A7, 0x883E, 0xF9A6, 0x883F, 0xF9A8, 0x8840, 0xA6E5, - 0x8841, 0xD0AA, 0x8843, 0xD3CF, 0x8844, 0xD3D0, 0x8848, 0xDBC0, - 0x884A, 0xF647, 0x884B, 0xF8C0, 0x884C, 0xA6E6, 0x884D, 0xAD6C, - 0x884E, 0xD0AB, 0x8852, 0xD7B1, 0x8853, 0xB34E, 0x8855, 0xDBC2, - 0x8856, 0xDBC1, 0x8857, 0xB5F3, 0x8859, 0xB8C5, 0x885A, 0xE7C1, - 0x885B, 0xBDC3, 0x885D, 0xBDC4, 0x8861, 0xBFC5, 0x8862, 0xC5FC, - 0x8863, 0xA6E7, 0x8867, 0xD0AC, 0x8868, 0xAAED, 0x8869, 0xD0AE, - 0x886A, 0xD0AD, 0x886B, 0xAD6D, 0x886D, 0xD3D1, 0x886F, 0xD3D8, - 0x8870, 0xB049, 0x8871, 0xD3D6, 0x8872, 0xD3D4, 0x8874, 0xD3DB, - 0x8875, 0xD3D2, 0x8876, 0xD3D3, 0x8877, 0xB04A, 0x8879, 0xB04E, - 0x887C, 0xD3DC, 0x887D, 0xB04D, 0x887E, 0xD3DA, 0x887F, 0xD3D7, - 0x8880, 0xD3D5, 0x8881, 0xB04B, 0x8882, 0xB04C, 0x8883, 0xD3D9, - 0x8888, 0xB350, 0x8889, 0xD7B2, 0x888B, 0xB355, 0x888C, 0xD7C2, - 0x888D, 0xB354, 0x888E, 0xD7C4, 0x8891, 0xD7B8, 0x8892, 0xB352, - 0x8893, 0xD7C3, 0x8895, 0xD7B3, 0x8896, 0xB353, 0x8897, 0xD7BF, - 0x8898, 0xD7BB, 0x8899, 0xD7BD, 0x889A, 0xD7B7, 0x889B, 0xD7BE, - 0x889E, 0xB34F, 0x889F, 0xD7BA, 0x88A1, 0xD7B9, 0x88A2, 0xD7B5, - 0x88A4, 0xD7C0, 0x88A7, 0xD7BC, 0x88A8, 0xD7B4, 0x88AA, 0xD7B6, - 0x88AB, 0xB351, 0x88AC, 0xD7C1, 0x88B1, 0xB5F6, 0x88B2, 0xDBCD, - 0x88B6, 0xDBC9, 0x88B7, 0xDBCB, 0x88B8, 0xDBC6, 0x88B9, 0xDBC5, - 0x88BA, 0xDBC3, 0x88BC, 0xDBCA, 0x88BD, 0xDBCC, 0x88BE, 0xDBC8, - 0x88C0, 0xDBC7, 0x88C1, 0xB5F4, 0x88C2, 0xB5F5, 0x88C9, 0xDBCF, - 0x88CA, 0xB8CD, 0x88CB, 0xDFF2, 0x88CC, 0xDFF8, 0x88CD, 0xDFF3, - 0x88CE, 0xDFF4, 0x88CF, 0xF9D8, 0x88D0, 0xDFF9, 0x88D2, 0xB8CF, - 0x88D4, 0xB8C7, 0x88D5, 0xB8CE, 0x88D6, 0xDFF1, 0x88D7, 0xDBC4, - 0x88D8, 0xB8CA, 0x88D9, 0xB8C8, 0x88DA, 0xDFF7, 0x88DB, 0xDFF6, - 0x88DC, 0xB8C9, 0x88DD, 0xB8CB, 0x88DE, 0xDFF5, 0x88DF, 0xB8C6, - 0x88E1, 0xB8CC, 0x88E7, 0xE3F6, 0x88E8, 0xBB74, 0x88EB, 0xE442, - 0x88EC, 0xE441, 0x88EE, 0xE3FB, 0x88EF, 0xBB76, 0x88F0, 0xE440, - 0x88F1, 0xE3F7, 0x88F2, 0xE3F8, 0x88F3, 0xBB6E, 0x88F4, 0xBB70, - 0x88F6, 0xE3FD, 0x88F7, 0xE3F5, 0x88F8, 0xBB72, 0x88F9, 0xBB71, - 0x88FA, 0xE3F9, 0x88FB, 0xE3FE, 0x88FC, 0xE3FC, 0x88FD, 0xBB73, - 0x88FE, 0xE3FA, 0x8901, 0xDBCE, 0x8902, 0xBB6F, 0x8905, 0xE7C2, - 0x8906, 0xE7C9, 0x8907, 0xBDC6, 0x8909, 0xE7CD, 0x890A, 0xBDCA, - 0x890B, 0xE7C5, 0x890C, 0xE7C3, 0x890E, 0xE7CC, 0x8910, 0xBDC5, - 0x8911, 0xE7CB, 0x8912, 0xBDC7, 0x8913, 0xBDC8, 0x8914, 0xE7C4, - 0x8915, 0xBDC9, 0x8916, 0xE7CA, 0x8917, 0xE7C6, 0x8918, 0xE7C7, - 0x8919, 0xE7C8, 0x891A, 0xBB75, 0x891E, 0xEB70, 0x891F, 0xEB7C, - 0x8921, 0xBFCA, 0x8922, 0xEB77, 0x8923, 0xEB79, 0x8925, 0xBFC8, - 0x8926, 0xEB71, 0x8927, 0xEB75, 0x8929, 0xEB78, 0x892A, 0xBFC6, - 0x892B, 0xBFC9, 0x892C, 0xEB7B, 0x892D, 0xEB73, 0x892E, 0xEB74, - 0x892F, 0xEB7A, 0x8930, 0xEB72, 0x8931, 0xEB76, 0x8932, 0xBFC7, - 0x8933, 0xEE72, 0x8935, 0xEE71, 0x8936, 0xC1B7, 0x8937, 0xEE77, - 0x8938, 0xC1B9, 0x893B, 0xC1B6, 0x893C, 0xEE73, 0x893D, 0xC1BA, - 0x893E, 0xEE74, 0x8941, 0xEE75, 0x8942, 0xEE78, 0x8944, 0xC1B8, - 0x8946, 0xF0D6, 0x8949, 0xF0D9, 0x894B, 0xF0D3, 0x894C, 0xF0D5, - 0x894F, 0xF0D4, 0x8950, 0xF0D7, 0x8951, 0xF0D8, 0x8952, 0xEE76, - 0x8953, 0xF0D2, 0x8956, 0xC3CD, 0x8957, 0xF2EC, 0x8958, 0xF2EF, - 0x8959, 0xF2F1, 0x895A, 0xF2EA, 0x895B, 0xF2EB, 0x895C, 0xF2EE, - 0x895D, 0xF2F0, 0x895E, 0xC3CE, 0x895F, 0xC3CC, 0x8960, 0xC3CB, - 0x8961, 0xF2ED, 0x8962, 0xF2E9, 0x8963, 0xF4CA, 0x8964, 0xC4B0, - 0x8966, 0xF4CB, 0x8969, 0xF649, 0x896A, 0xC4FB, 0x896B, 0xF64B, - 0x896C, 0xC4FC, 0x896D, 0xF648, 0x896E, 0xF64A, 0x896F, 0xC5A8, - 0x8971, 0xF752, 0x8972, 0xC5A7, 0x8973, 0xF7FD, 0x8974, 0xF7FC, - 0x8976, 0xF7FB, 0x8979, 0xF948, 0x897A, 0xF949, 0x897B, 0xF94B, - 0x897C, 0xF94A, 0x897E, 0xCA50, 0x897F, 0xA6E8, 0x8981, 0xAD6E, - 0x8982, 0xD7C5, 0x8983, 0xB5F7, 0x8985, 0xDFFA, 0x8986, 0xC2D0, - 0x8988, 0xF2F2, 0x898B, 0xA8A3, 0x898F, 0xB357, 0x8993, 0xB356, - 0x8995, 0xDBD0, 0x8996, 0xB5F8, 0x8997, 0xDBD2, 0x8998, 0xDBD1, - 0x899B, 0xDFFB, 0x899C, 0xB8D0, 0x899D, 0xE443, 0x899E, 0xE446, - 0x899F, 0xE445, 0x89A1, 0xE444, 0x89A2, 0xE7CE, 0x89A3, 0xE7D0, - 0x89A4, 0xE7CF, 0x89A6, 0xBFCC, 0x89AA, 0xBFCB, 0x89AC, 0xC1BB, - 0x89AD, 0xEE79, 0x89AE, 0xEE7B, 0x89AF, 0xEE7A, 0x89B2, 0xC2D1, - 0x89B6, 0xF2F4, 0x89B7, 0xF2F3, 0x89B9, 0xF4CC, 0x89BA, 0xC4B1, - 0x89BD, 0xC4FD, 0x89BE, 0xF754, 0x89BF, 0xF753, 0x89C0, 0xC65B, - 0x89D2, 0xA8A4, 0x89D3, 0xD0AF, 0x89D4, 0xAD6F, 0x89D5, 0xD7C8, - 0x89D6, 0xD7C6, 0x89D9, 0xD7C7, 0x89DA, 0xDBD4, 0x89DB, 0xDBD5, - 0x89DC, 0xE043, 0x89DD, 0xDBD3, 0x89DF, 0xDFFC, 0x89E0, 0xE041, - 0x89E1, 0xE040, 0x89E2, 0xE042, 0x89E3, 0xB8D1, 0x89E4, 0xDFFE, - 0x89E5, 0xDFFD, 0x89E6, 0xE044, 0x89E8, 0xE449, 0x89E9, 0xE447, - 0x89EB, 0xE448, 0x89EC, 0xE7D3, 0x89ED, 0xE7D1, 0x89F0, 0xE7D2, - 0x89F1, 0xEB7D, 0x89F2, 0xEE7C, 0x89F3, 0xEE7D, 0x89F4, 0xC2D2, - 0x89F6, 0xF2F5, 0x89F7, 0xF4CD, 0x89F8, 0xC4B2, 0x89FA, 0xF64C, - 0x89FB, 0xF755, 0x89FC, 0xC5A9, 0x89FE, 0xF7FE, 0x89FF, 0xF94C, - 0x8A00, 0xA8A5, 0x8A02, 0xAD71, 0x8A03, 0xAD72, 0x8A04, 0xD0B0, - 0x8A07, 0xD0B1, 0x8A08, 0xAD70, 0x8A0A, 0xB054, 0x8A0C, 0xB052, - 0x8A0E, 0xB051, 0x8A0F, 0xB058, 0x8A10, 0xB050, 0x8A11, 0xB059, - 0x8A12, 0xD3DD, 0x8A13, 0xB056, 0x8A15, 0xB053, 0x8A16, 0xB057, - 0x8A17, 0xB055, 0x8A18, 0xB04F, 0x8A1B, 0xB35F, 0x8A1D, 0xB359, - 0x8A1E, 0xD7CC, 0x8A1F, 0xB35E, 0x8A22, 0xB360, 0x8A23, 0xB35A, - 0x8A25, 0xB35B, 0x8A27, 0xD7CA, 0x8A2A, 0xB358, 0x8A2C, 0xD7CB, - 0x8A2D, 0xB35D, 0x8A30, 0xD7C9, 0x8A31, 0xB35C, 0x8A34, 0xB644, - 0x8A36, 0xB646, 0x8A39, 0xDBD8, 0x8A3A, 0xB645, 0x8A3B, 0xB5F9, - 0x8A3C, 0xB5FD, 0x8A3E, 0xB8E4, 0x8A3F, 0xE049, 0x8A40, 0xDBDA, - 0x8A41, 0xB5FE, 0x8A44, 0xDBDD, 0x8A45, 0xDBDE, 0x8A46, 0xB643, - 0x8A48, 0xDBE0, 0x8A4A, 0xDBE2, 0x8A4C, 0xDBE3, 0x8A4D, 0xDBD7, - 0x8A4E, 0xDBD6, 0x8A4F, 0xDBE4, 0x8A50, 0xB642, 0x8A51, 0xDBE1, - 0x8A52, 0xDBDF, 0x8A54, 0xB640, 0x8A55, 0xB5FB, 0x8A56, 0xB647, - 0x8A57, 0xDBDB, 0x8A58, 0xDBDC, 0x8A59, 0xDBD9, 0x8A5B, 0xB641, - 0x8A5E, 0xB5FC, 0x8A60, 0xB5FA, 0x8A61, 0xE048, 0x8A62, 0xB8DF, - 0x8A63, 0xB8DA, 0x8A66, 0xB8D5, 0x8A68, 0xB8E5, 0x8A69, 0xB8D6, - 0x8A6B, 0xB8D2, 0x8A6C, 0xB8E1, 0x8A6D, 0xB8DE, 0x8A6E, 0xB8E0, - 0x8A70, 0xB8D7, 0x8A71, 0xB8DC, 0x8A72, 0xB8D3, 0x8A73, 0xB8D4, - 0x8A74, 0xE050, 0x8A75, 0xE04D, 0x8A76, 0xE045, 0x8A77, 0xE04A, - 0x8A79, 0xB8E2, 0x8A7A, 0xE051, 0x8A7B, 0xB8E3, 0x8A7C, 0xB8D9, - 0x8A7F, 0xE047, 0x8A81, 0xE04F, 0x8A82, 0xE04B, 0x8A83, 0xE04E, - 0x8A84, 0xE04C, 0x8A85, 0xB8DD, 0x8A86, 0xE046, 0x8A87, 0xB8D8, - 0x8A8B, 0xE44C, 0x8A8C, 0xBB78, 0x8A8D, 0xBB7B, 0x8A8F, 0xE44E, - 0x8A91, 0xBBA5, 0x8A92, 0xE44D, 0x8A93, 0xBB7D, 0x8A95, 0xBDCF, - 0x8A96, 0xE44F, 0x8A98, 0xBBA4, 0x8A99, 0xE44B, 0x8A9A, 0xBBA6, - 0x8A9E, 0xBB79, 0x8AA0, 0xB8DB, 0x8AA1, 0xBB7C, 0x8AA3, 0xBB7A, - 0x8AA4, 0xBB7E, 0x8AA5, 0xBBA2, 0x8AA6, 0xBB77, 0x8AA7, 0xBBA7, - 0x8AA8, 0xBBA3, 0x8AAA, 0xBBA1, 0x8AAB, 0xE44A, 0x8AB0, 0xBDD6, - 0x8AB2, 0xBDD2, 0x8AB6, 0xBDD9, 0x8AB8, 0xE7D6, 0x8AB9, 0xBDDA, - 0x8ABA, 0xE7E2, 0x8ABB, 0xE7DB, 0x8ABC, 0xBDCB, 0x8ABD, 0xE7E3, - 0x8ABE, 0xE7DD, 0x8ABF, 0xBDD5, 0x8AC0, 0xE7DE, 0x8AC2, 0xBDD4, - 0x8AC3, 0xE7E1, 0x8AC4, 0xBDCE, 0x8AC5, 0xE7DF, 0x8AC6, 0xE7D5, - 0x8AC7, 0xBDCD, 0x8AC8, 0xEBAA, 0x8AC9, 0xBDD3, 0x8ACB, 0xBDD0, - 0x8ACD, 0xBDD8, 0x8ACF, 0xE7D4, 0x8AD1, 0xE7D8, 0x8AD2, 0xBDCC, - 0x8AD3, 0xE7D7, 0x8AD4, 0xE7D9, 0x8AD5, 0xE7DA, 0x8AD6, 0xBDD7, - 0x8AD7, 0xE7DC, 0x8AD8, 0xE7E0, 0x8AD9, 0xE7E4, 0x8ADB, 0xBDDB, - 0x8ADC, 0xBFD2, 0x8ADD, 0xEBA5, 0x8ADE, 0xEBAB, 0x8ADF, 0xEBA8, - 0x8AE0, 0xEB7E, 0x8AE1, 0xEBAC, 0x8AE2, 0xEBA1, 0x8AE4, 0xEBA7, - 0x8AE6, 0xBFCD, 0x8AE7, 0xBFD3, 0x8AE8, 0xEBAD, 0x8AEB, 0xBFCF, - 0x8AED, 0xBFD9, 0x8AEE, 0xBFD4, 0x8AEF, 0xEBAF, 0x8AF0, 0xEBA9, - 0x8AF1, 0xBFD0, 0x8AF2, 0xEBA2, 0x8AF3, 0xBFDA, 0x8AF4, 0xEBA3, - 0x8AF5, 0xEBA4, 0x8AF6, 0xBFDB, 0x8AF7, 0xBFD8, 0x8AF8, 0xBDD1, - 0x8AFA, 0xBFCE, 0x8AFB, 0xEBB0, 0x8AFC, 0xBFDC, 0x8AFE, 0xBFD5, - 0x8AFF, 0xEBAE, 0x8B00, 0xBFD1, 0x8B01, 0xBFD6, 0x8B02, 0xBFD7, - 0x8B04, 0xC1C3, 0x8B05, 0xEEA4, 0x8B06, 0xEEAD, 0x8B07, 0xEEAA, - 0x8B08, 0xEEAC, 0x8B0A, 0xC1C0, 0x8B0B, 0xEEA5, 0x8B0D, 0xEEAB, - 0x8B0E, 0xC1BC, 0x8B0F, 0xEEA7, 0x8B10, 0xC1C4, 0x8B11, 0xEEA3, - 0x8B12, 0xEEA8, 0x8B13, 0xEEAF, 0x8B14, 0xEBA6, 0x8B15, 0xEEA9, - 0x8B16, 0xEEA2, 0x8B17, 0xC1BD, 0x8B18, 0xEEA1, 0x8B19, 0xC1BE, - 0x8B1A, 0xEEB0, 0x8B1B, 0xC1BF, 0x8B1C, 0xEEAE, 0x8B1D, 0xC1C2, - 0x8B1E, 0xEE7E, 0x8B20, 0xC1C1, 0x8B22, 0xEEA6, 0x8B23, 0xF0DC, - 0x8B24, 0xF0EA, 0x8B25, 0xF0E5, 0x8B26, 0xF0E7, 0x8B27, 0xF0DB, - 0x8B28, 0xC2D3, 0x8B2A, 0xF0DA, 0x8B2B, 0xC2D6, 0x8B2C, 0xC2D5, - 0x8B2E, 0xF0E9, 0x8B2F, 0xF0E1, 0x8B30, 0xF0DE, 0x8B31, 0xF0E4, - 0x8B33, 0xF0DD, 0x8B35, 0xF0DF, 0x8B36, 0xF0E8, 0x8B37, 0xF0E6, - 0x8B39, 0xC2D4, 0x8B3A, 0xF0ED, 0x8B3B, 0xF0EB, 0x8B3C, 0xF0E2, - 0x8B3D, 0xF0EC, 0x8B3E, 0xF0E3, 0x8B40, 0xF2F9, 0x8B41, 0xC3CF, - 0x8B42, 0xF341, 0x8B45, 0xF64F, 0x8B46, 0xC3D6, 0x8B47, 0xF0E0, - 0x8B48, 0xF2F7, 0x8B49, 0xC3D2, 0x8B4A, 0xF2F8, 0x8B4B, 0xF2FD, - 0x8B4E, 0xC3D4, 0x8B4F, 0xC3D5, 0x8B50, 0xF2F6, 0x8B51, 0xF340, - 0x8B52, 0xF342, 0x8B53, 0xF2FA, 0x8B54, 0xF2FC, 0x8B55, 0xF2FE, - 0x8B56, 0xF2FB, 0x8B57, 0xF343, 0x8B58, 0xC3D1, 0x8B59, 0xC3D7, - 0x8B5A, 0xC3D3, 0x8B5C, 0xC3D0, 0x8B5D, 0xF4D0, 0x8B5F, 0xC4B7, - 0x8B60, 0xF4CE, 0x8B63, 0xF4D2, 0x8B65, 0xF4D3, 0x8B66, 0xC4B5, - 0x8B67, 0xF4D4, 0x8B68, 0xF4D1, 0x8B6A, 0xF4CF, 0x8B6B, 0xC4B8, - 0x8B6C, 0xC4B4, 0x8B6D, 0xF4D5, 0x8B6F, 0xC4B6, 0x8B70, 0xC4B3, - 0x8B74, 0xC4FE, 0x8B77, 0xC540, 0x8B78, 0xF64E, 0x8B79, 0xF64D, - 0x8B7A, 0xF650, 0x8B7B, 0xF651, 0x8B7D, 0xC541, 0x8B7E, 0xF756, - 0x8B7F, 0xF75B, 0x8B80, 0xC5AA, 0x8B82, 0xF758, 0x8B84, 0xF757, - 0x8B85, 0xF75A, 0x8B86, 0xF759, 0x8B88, 0xF843, 0x8B8A, 0xC5DC, - 0x8B8B, 0xF842, 0x8B8C, 0xF840, 0x8B8E, 0xF841, 0x8B92, 0xC5FE, - 0x8B93, 0xC5FD, 0x8B94, 0xF8C1, 0x8B95, 0xF8C2, 0x8B96, 0xC640, - 0x8B98, 0xF94D, 0x8B99, 0xF94E, 0x8B9A, 0xC667, 0x8B9C, 0xC66D, - 0x8B9E, 0xF9A9, 0x8B9F, 0xF9C8, 0x8C37, 0xA8A6, 0x8C39, 0xD7CD, - 0x8C3B, 0xD7CE, 0x8C3C, 0xE052, 0x8C3D, 0xE450, 0x8C3E, 0xE7E5, - 0x8C3F, 0xC1C6, 0x8C41, 0xC1C5, 0x8C42, 0xF0EE, 0x8C43, 0xF344, - 0x8C45, 0xF844, 0x8C46, 0xA8A7, 0x8C47, 0xD3DE, 0x8C48, 0xB05A, - 0x8C49, 0xB361, 0x8C4A, 0xE054, 0x8C4B, 0xE053, 0x8C4C, 0xBDDC, - 0x8C4D, 0xE7E6, 0x8C4E, 0xBDDD, 0x8C4F, 0xEEB1, 0x8C50, 0xC2D7, - 0x8C54, 0xC676, 0x8C55, 0xA8A8, 0x8C56, 0xCDCB, 0x8C57, 0xD3DF, - 0x8C5A, 0xB362, 0x8C5C, 0xD7CF, 0x8C5D, 0xD7D0, 0x8C5F, 0xDBE5, - 0x8C61, 0xB648, 0x8C62, 0xB8E6, 0x8C64, 0xE056, 0x8C65, 0xE055, - 0x8C66, 0xE057, 0x8C68, 0xE451, 0x8C69, 0xE452, 0x8C6A, 0xBBA8, - 0x8C6B, 0xBFDD, 0x8C6C, 0xBDDE, 0x8C6D, 0xBFDE, 0x8C6F, 0xEEB5, - 0x8C70, 0xEEB2, 0x8C71, 0xEEB4, 0x8C72, 0xEEB3, 0x8C73, 0xC1C7, - 0x8C75, 0xF0EF, 0x8C76, 0xF346, 0x8C77, 0xF345, 0x8C78, 0xCBA4, - 0x8C79, 0xB05C, 0x8C7A, 0xB05B, 0x8C7B, 0xD3E0, 0x8C7D, 0xD7D1, - 0x8C80, 0xDBE7, 0x8C81, 0xDBE6, 0x8C82, 0xB649, 0x8C84, 0xE059, - 0x8C85, 0xE05A, 0x8C86, 0xE058, 0x8C89, 0xB8E8, 0x8C8A, 0xB8E7, - 0x8C8C, 0xBBAA, 0x8C8D, 0xBBA9, 0x8C8F, 0xE7E7, 0x8C90, 0xEBB3, - 0x8C91, 0xEBB1, 0x8C92, 0xEBB2, 0x8C93, 0xBFDF, 0x8C94, 0xEEB7, - 0x8C95, 0xEEB6, 0x8C97, 0xF0F2, 0x8C98, 0xF0F1, 0x8C99, 0xF0F0, - 0x8C9A, 0xF347, 0x8C9C, 0xF9AA, 0x8C9D, 0xA8A9, 0x8C9E, 0xAD73, - 0x8CA0, 0xAD74, 0x8CA1, 0xB05D, 0x8CA2, 0xB05E, 0x8CA3, 0xD3E2, - 0x8CA4, 0xD3E1, 0x8CA5, 0xD7D2, 0x8CA7, 0xB368, 0x8CA8, 0xB366, - 0x8CA9, 0xB363, 0x8CAA, 0xB367, 0x8CAB, 0xB365, 0x8CAC, 0xB364, - 0x8CAF, 0xB64A, 0x8CB0, 0xDBEA, 0x8CB2, 0xB8ED, 0x8CB3, 0xB64C, - 0x8CB4, 0xB651, 0x8CB5, 0xDBEC, 0x8CB6, 0xB653, 0x8CB7, 0xB652, - 0x8CB8, 0xB655, 0x8CB9, 0xDBEB, 0x8CBA, 0xDBE8, 0x8CBB, 0xB64F, - 0x8CBC, 0xB64B, 0x8CBD, 0xB64D, 0x8CBE, 0xDBE9, 0x8CBF, 0xB654, - 0x8CC0, 0xB650, 0x8CC1, 0xB64E, 0x8CC2, 0xB8EF, 0x8CC3, 0xB8EE, - 0x8CC4, 0xB8EC, 0x8CC5, 0xB8F0, 0x8CC7, 0xB8EA, 0x8CC8, 0xB8EB, - 0x8CCA, 0xB8E9, 0x8CCC, 0xE05B, 0x8CCF, 0xE454, 0x8CD1, 0xBBAC, - 0x8CD2, 0xBBAD, 0x8CD3, 0xBBAB, 0x8CD5, 0xE453, 0x8CD7, 0xE455, - 0x8CD9, 0xE7EA, 0x8CDA, 0xE7EC, 0x8CDC, 0xBDE7, 0x8CDD, 0xE7ED, - 0x8CDE, 0xBDE0, 0x8CDF, 0xE7E9, 0x8CE0, 0xBDDF, 0x8CE1, 0xBDE9, - 0x8CE2, 0xBDE5, 0x8CE3, 0xBDE6, 0x8CE4, 0xBDE2, 0x8CE5, 0xE7E8, - 0x8CE6, 0xBDE1, 0x8CE7, 0xE7EE, 0x8CE8, 0xE7EB, 0x8CEA, 0xBDE8, - 0x8CEC, 0xBDE3, 0x8CED, 0xBDE4, 0x8CEE, 0xEBB5, 0x8CF0, 0xEBB7, - 0x8CF1, 0xEBB6, 0x8CF3, 0xEBB8, 0x8CF4, 0xBFE0, 0x8CF5, 0xEBB4, - 0x8CF8, 0xC1CB, 0x8CF9, 0xEEB8, 0x8CFA, 0xC1C8, 0x8CFB, 0xC1CC, - 0x8CFC, 0xC1CA, 0x8CFD, 0xC1C9, 0x8CFE, 0xF0F3, 0x8D00, 0xF0F6, - 0x8D02, 0xF0F5, 0x8D04, 0xF0F4, 0x8D05, 0xC2D8, 0x8D06, 0xF348, - 0x8D07, 0xF349, 0x8D08, 0xC3D8, 0x8D09, 0xF34A, 0x8D0A, 0xC3D9, - 0x8D0D, 0xC4BA, 0x8D0F, 0xC4B9, 0x8D10, 0xF652, 0x8D13, 0xC542, - 0x8D14, 0xF653, 0x8D15, 0xF75C, 0x8D16, 0xC5AB, 0x8D17, 0xC5AC, - 0x8D19, 0xF845, 0x8D1B, 0xC642, 0x8D64, 0xA8AA, 0x8D66, 0xB36A, - 0x8D67, 0xB369, 0x8D68, 0xE05C, 0x8D69, 0xE05D, 0x8D6B, 0xBBAE, - 0x8D6C, 0xEBB9, 0x8D6D, 0xBDEA, 0x8D6E, 0xEBBA, 0x8D6F, 0xEEB9, - 0x8D70, 0xA8AB, 0x8D72, 0xD0B2, 0x8D73, 0xAD76, 0x8D74, 0xAD75, - 0x8D76, 0xD3E3, 0x8D77, 0xB05F, 0x8D78, 0xD3E4, 0x8D79, 0xD7D5, - 0x8D7B, 0xD7D4, 0x8D7D, 0xD7D3, 0x8D80, 0xDBEE, 0x8D81, 0xB658, - 0x8D84, 0xDBED, 0x8D85, 0xB657, 0x8D89, 0xDBEF, 0x8D8A, 0xB656, - 0x8D8C, 0xE05F, 0x8D8D, 0xE062, 0x8D8E, 0xE060, 0x8D8F, 0xE061, - 0x8D90, 0xE065, 0x8D91, 0xE05E, 0x8D92, 0xE066, 0x8D93, 0xE063, - 0x8D94, 0xE064, 0x8D95, 0xBBB0, 0x8D96, 0xE456, 0x8D99, 0xBBAF, - 0x8D9B, 0xE7F2, 0x8D9C, 0xE7F0, 0x8D9F, 0xBDEB, 0x8DA0, 0xE7EF, - 0x8DA1, 0xE7F1, 0x8DA3, 0xBDEC, 0x8DA5, 0xEBBB, 0x8DA7, 0xEBBC, - 0x8DA8, 0xC1CD, 0x8DAA, 0xF34C, 0x8DAB, 0xF34E, 0x8DAC, 0xF34B, - 0x8DAD, 0xF34D, 0x8DAE, 0xF4D6, 0x8DAF, 0xF654, 0x8DB2, 0xF96F, - 0x8DB3, 0xA8AC, 0x8DB4, 0xAD77, 0x8DB5, 0xD3E5, 0x8DB6, 0xD3E7, - 0x8DB7, 0xD3E6, 0x8DB9, 0xD7D8, 0x8DBA, 0xB36C, 0x8DBC, 0xD7D6, - 0x8DBE, 0xB36B, 0x8DBF, 0xD7D9, 0x8DC1, 0xD7DA, 0x8DC2, 0xD7D7, - 0x8DC5, 0xDBFB, 0x8DC6, 0xB660, 0x8DC7, 0xDBF3, 0x8DC8, 0xDBF9, - 0x8DCB, 0xB65B, 0x8DCC, 0xB65E, 0x8DCD, 0xDBF2, 0x8DCE, 0xB659, - 0x8DCF, 0xDBF6, 0x8DD0, 0xE06C, 0x8DD1, 0xB65D, 0x8DD3, 0xDBF1, - 0x8DD5, 0xDBF7, 0x8DD6, 0xDBF4, 0x8DD7, 0xDBFA, 0x8DD8, 0xDBF0, - 0x8DD9, 0xDBF8, 0x8DDA, 0xB65C, 0x8DDB, 0xB65F, 0x8DDC, 0xDBF5, - 0x8DDD, 0xB65A, 0x8DDF, 0xB8F2, 0x8DE0, 0xE068, 0x8DE1, 0xB8F1, - 0x8DE2, 0xE06F, 0x8DE3, 0xE06E, 0x8DE4, 0xB8F8, 0x8DE6, 0xB8F9, - 0x8DE7, 0xE070, 0x8DE8, 0xB8F3, 0x8DE9, 0xE06D, 0x8DEA, 0xB8F7, - 0x8DEB, 0xE072, 0x8DEC, 0xE069, 0x8DEE, 0xE06B, 0x8DEF, 0xB8F4, - 0x8DF0, 0xE067, 0x8DF1, 0xE06A, 0x8DF2, 0xE071, 0x8DF3, 0xB8F5, - 0x8DF4, 0xE073, 0x8DFA, 0xB8F6, 0x8DFC, 0xBBB1, 0x8DFD, 0xE45B, - 0x8DFE, 0xE461, 0x8DFF, 0xE459, 0x8E00, 0xE462, 0x8E02, 0xE458, - 0x8E03, 0xE45D, 0x8E04, 0xE463, 0x8E05, 0xE460, 0x8E06, 0xE45F, - 0x8E07, 0xE45E, 0x8E09, 0xE457, 0x8E0A, 0xE45C, 0x8E0D, 0xE45A, - 0x8E0F, 0xBDF1, 0x8E10, 0xBDEE, 0x8E11, 0xE7FB, 0x8E12, 0xE841, - 0x8E13, 0xE843, 0x8E14, 0xE840, 0x8E15, 0xE7F8, 0x8E16, 0xE7FA, - 0x8E17, 0xE845, 0x8E18, 0xE842, 0x8E19, 0xE7FC, 0x8E1A, 0xE846, - 0x8E1B, 0xE7F9, 0x8E1C, 0xE844, 0x8E1D, 0xBDEF, 0x8E1E, 0xBDF5, - 0x8E1F, 0xBDF3, 0x8E20, 0xE7F3, 0x8E21, 0xBDF4, 0x8E22, 0xBDF0, - 0x8E23, 0xE7F4, 0x8E24, 0xE7F6, 0x8E25, 0xE7F5, 0x8E26, 0xE7FD, - 0x8E27, 0xE7FE, 0x8E29, 0xBDF2, 0x8E2B, 0xBDED, 0x8E2E, 0xE7F7, - 0x8E30, 0xEBC6, 0x8E31, 0xBFE2, 0x8E33, 0xEBBD, 0x8E34, 0xBFE3, - 0x8E35, 0xBFE6, 0x8E36, 0xEBC2, 0x8E38, 0xEBBF, 0x8E39, 0xBFE5, - 0x8E3C, 0xEBC3, 0x8E3D, 0xEBC4, 0x8E3E, 0xEBBE, 0x8E3F, 0xEBC7, - 0x8E40, 0xEBC0, 0x8E41, 0xEBC5, 0x8E42, 0xBFE4, 0x8E44, 0xBFE1, - 0x8E45, 0xEBC1, 0x8E47, 0xEEBF, 0x8E48, 0xC1D0, 0x8E49, 0xC1CE, - 0x8E4A, 0xC1D1, 0x8E4B, 0xC1CF, 0x8E4C, 0xEEBE, 0x8E4D, 0xEEBB, - 0x8E4E, 0xEEBA, 0x8E50, 0xEEBD, 0x8E53, 0xEEBC, 0x8E54, 0xF145, - 0x8E55, 0xC2DE, 0x8E56, 0xF0FB, 0x8E57, 0xF0FA, 0x8E59, 0xC2D9, - 0x8E5A, 0xF141, 0x8E5B, 0xF140, 0x8E5C, 0xF0F7, 0x8E5D, 0xF143, - 0x8E5E, 0xF0FC, 0x8E5F, 0xC2DD, 0x8E60, 0xF0F9, 0x8E61, 0xF142, - 0x8E62, 0xF0F8, 0x8E63, 0xC2DA, 0x8E64, 0xC2DC, 0x8E65, 0xF0FD, - 0x8E66, 0xC2DB, 0x8E67, 0xF0FE, 0x8E69, 0xF144, 0x8E6A, 0xF352, - 0x8E6C, 0xC3DE, 0x8E6D, 0xF34F, 0x8E6F, 0xF353, 0x8E72, 0xC3DB, - 0x8E73, 0xF351, 0x8E74, 0xC3E0, 0x8E76, 0xC3DD, 0x8E78, 0xF350, - 0x8E7A, 0xC3DF, 0x8E7B, 0xF354, 0x8E7C, 0xC3DA, 0x8E81, 0xC4BC, - 0x8E82, 0xC4BE, 0x8E84, 0xF4D9, 0x8E85, 0xC4BD, 0x8E86, 0xF4D7, - 0x8E87, 0xC3DC, 0x8E88, 0xF4D8, 0x8E89, 0xC4BB, 0x8E8A, 0xC543, - 0x8E8B, 0xC545, 0x8E8C, 0xF656, 0x8E8D, 0xC544, 0x8E8E, 0xF655, - 0x8E90, 0xF761, 0x8E91, 0xC5AD, 0x8E92, 0xF760, 0x8E93, 0xC5AE, - 0x8E94, 0xF75E, 0x8E95, 0xF75D, 0x8E96, 0xF762, 0x8E97, 0xF763, - 0x8E98, 0xF846, 0x8E9A, 0xF75F, 0x8E9D, 0xF8C6, 0x8E9E, 0xF8C3, - 0x8E9F, 0xF8C4, 0x8EA0, 0xF8C5, 0x8EA1, 0xC65C, 0x8EA3, 0xF951, - 0x8EA4, 0xF950, 0x8EA5, 0xF94F, 0x8EA6, 0xF970, 0x8EA8, 0xF9BE, - 0x8EA9, 0xF9AB, 0x8EAA, 0xC66E, 0x8EAB, 0xA8AD, 0x8EAC, 0xB060, - 0x8EB2, 0xB8FA, 0x8EBA, 0xBDF6, 0x8EBD, 0xEBC8, 0x8EC0, 0xC2DF, - 0x8EC2, 0xF355, 0x8EC9, 0xF9AC, 0x8ECA, 0xA8AE, 0x8ECB, 0xAAEE, - 0x8ECC, 0xAD79, 0x8ECD, 0xAD78, 0x8ECF, 0xB063, 0x8ED1, 0xD3E8, - 0x8ED2, 0xB061, 0x8ED3, 0xD3E9, 0x8ED4, 0xB062, 0x8ED7, 0xD7DF, - 0x8ED8, 0xD7DB, 0x8EDB, 0xB36D, 0x8EDC, 0xD7DE, 0x8EDD, 0xD7DD, - 0x8EDE, 0xD7DC, 0x8EDF, 0xB36E, 0x8EE0, 0xD7E0, 0x8EE1, 0xD7E1, - 0x8EE5, 0xDC43, 0x8EE6, 0xDC41, 0x8EE7, 0xDC45, 0x8EE8, 0xDC46, - 0x8EE9, 0xDC4C, 0x8EEB, 0xDC48, 0x8EEC, 0xDC4A, 0x8EEE, 0xDC42, - 0x8EEF, 0xDBFC, 0x8EF1, 0xDC49, 0x8EF4, 0xDC4B, 0x8EF5, 0xDC44, - 0x8EF6, 0xDC47, 0x8EF7, 0xDBFD, 0x8EF8, 0xB662, 0x8EF9, 0xDC40, - 0x8EFA, 0xDBFE, 0x8EFB, 0xB661, 0x8EFC, 0xB663, 0x8EFE, 0xB8FD, - 0x8EFF, 0xE075, 0x8F00, 0xE077, 0x8F01, 0xE076, 0x8F02, 0xE07B, - 0x8F03, 0xB8FB, 0x8F05, 0xE078, 0x8F06, 0xE074, 0x8F07, 0xE079, - 0x8F08, 0xE07A, 0x8F09, 0xB8FC, 0x8F0A, 0xB8FE, 0x8F0B, 0xE07C, - 0x8F0D, 0xE467, 0x8F0E, 0xE466, 0x8F10, 0xE464, 0x8F11, 0xE465, - 0x8F12, 0xBBB3, 0x8F13, 0xBBB5, 0x8F14, 0xBBB2, 0x8F15, 0xBBB4, - 0x8F16, 0xE84D, 0x8F17, 0xE84E, 0x8F18, 0xE849, 0x8F1A, 0xE84A, - 0x8F1B, 0xBDF8, 0x8F1C, 0xBDFD, 0x8F1D, 0xBDF7, 0x8F1E, 0xBDFE, - 0x8F1F, 0xBDF9, 0x8F20, 0xE84B, 0x8F23, 0xE84C, 0x8F24, 0xE848, - 0x8F25, 0xBE40, 0x8F26, 0xBDFB, 0x8F29, 0xBDFA, 0x8F2A, 0xBDFC, - 0x8F2C, 0xE847, 0x8F2E, 0xEBCA, 0x8F2F, 0xBFE8, 0x8F32, 0xEBCC, - 0x8F33, 0xBFEA, 0x8F34, 0xEBCF, 0x8F35, 0xEBCB, 0x8F36, 0xEBC9, - 0x8F37, 0xEBCE, 0x8F38, 0xBFE9, 0x8F39, 0xEBCD, 0x8F3B, 0xBFE7, - 0x8F3E, 0xC1D3, 0x8F3F, 0xC1D6, 0x8F40, 0xEEC1, 0x8F42, 0xC1D4, - 0x8F43, 0xEEC0, 0x8F44, 0xC1D2, 0x8F45, 0xC1D5, 0x8F46, 0xF146, - 0x8F47, 0xF147, 0x8F48, 0xF148, 0x8F49, 0xC2E0, 0x8F4B, 0xF149, - 0x8F4D, 0xC2E1, 0x8F4E, 0xC3E2, 0x8F4F, 0xF358, 0x8F50, 0xF359, - 0x8F51, 0xF357, 0x8F52, 0xF356, 0x8F53, 0xF35A, 0x8F54, 0xC3E1, - 0x8F55, 0xF4DD, 0x8F56, 0xF4DB, 0x8F57, 0xF4DC, 0x8F58, 0xF4DE, - 0x8F59, 0xF4DA, 0x8F5A, 0xF4DF, 0x8F5B, 0xF658, 0x8F5D, 0xF659, - 0x8F5E, 0xF657, 0x8F5F, 0xC546, 0x8F60, 0xF764, 0x8F61, 0xC5AF, - 0x8F62, 0xF765, 0x8F63, 0xF848, 0x8F64, 0xF847, 0x8F9B, 0xA8AF, - 0x8F9C, 0xB664, 0x8F9F, 0xB940, 0x8FA3, 0xBBB6, 0x8FA6, 0xBFEC, - 0x8FA8, 0xBFEB, 0x8FAD, 0xC3E3, 0x8FAE, 0xC47C, 0x8FAF, 0xC547, - 0x8FB0, 0xA8B0, 0x8FB1, 0xB064, 0x8FB2, 0xB941, 0x8FB4, 0xF35B, - 0x8FBF, 0xCBA6, 0x8FC2, 0xA8B1, 0x8FC4, 0xA8B4, 0x8FC5, 0xA8B3, - 0x8FC6, 0xA8B2, 0x8FC9, 0xCBA5, 0x8FCB, 0xCDCD, 0x8FCD, 0xCDCF, - 0x8FCE, 0xAAEF, 0x8FD1, 0xAAF1, 0x8FD2, 0xCDCC, 0x8FD3, 0xCDCE, - 0x8FD4, 0xAAF0, 0x8FD5, 0xCDD1, 0x8FD6, 0xCDD0, 0x8FD7, 0xCDD2, - 0x8FE0, 0xD0B6, 0x8FE1, 0xD0B4, 0x8FE2, 0xAD7C, 0x8FE3, 0xD0B3, - 0x8FE4, 0xADA3, 0x8FE5, 0xAD7E, 0x8FE6, 0xAD7B, 0x8FE8, 0xADA4, - 0x8FEA, 0xAD7D, 0x8FEB, 0xADA2, 0x8FED, 0xADA1, 0x8FEE, 0xD0B5, - 0x8FF0, 0xAD7A, 0x8FF4, 0xB06A, 0x8FF5, 0xD3EB, 0x8FF6, 0xD3F1, - 0x8FF7, 0xB067, 0x8FF8, 0xB06E, 0x8FFA, 0xB069, 0x8FFB, 0xD3EE, - 0x8FFC, 0xD3F0, 0x8FFD, 0xB06C, 0x8FFE, 0xD3EA, 0x8FFF, 0xD3ED, - 0x9000, 0xB068, 0x9001, 0xB065, 0x9002, 0xD3EC, 0x9003, 0xB06B, - 0x9004, 0xD3EF, 0x9005, 0xB06D, 0x9006, 0xB066, 0x900B, 0xD7E3, - 0x900C, 0xD7E6, 0x900D, 0xB370, 0x900F, 0xB37A, 0x9010, 0xB376, - 0x9011, 0xD7E4, 0x9014, 0xB37E, 0x9015, 0xB377, 0x9016, 0xB37C, - 0x9017, 0xB372, 0x9019, 0xB36F, 0x901A, 0xB371, 0x901B, 0xB37D, - 0x901C, 0xD7E5, 0x901D, 0xB375, 0x901E, 0xB378, 0x901F, 0xB374, - 0x9020, 0xB379, 0x9021, 0xD7E7, 0x9022, 0xB37B, 0x9023, 0xB373, - 0x9024, 0xD7E2, 0x902D, 0xDC4D, 0x902E, 0xB665, 0x902F, 0xDC4F, - 0x9031, 0xB667, 0x9032, 0xB669, 0x9034, 0xDC4E, 0x9035, 0xB666, - 0x9036, 0xB66A, 0x9038, 0xB668, 0x903C, 0xB947, 0x903D, 0xE0A3, - 0x903E, 0xB94F, 0x903F, 0xE07E, 0x9041, 0xB950, 0x9042, 0xB945, - 0x9044, 0xE0A1, 0x9047, 0xB94A, 0x9049, 0xE0A2, 0x904A, 0xB943, - 0x904B, 0xB942, 0x904D, 0xB94D, 0x904E, 0xB94C, 0x904F, 0xB94B, - 0x9050, 0xB949, 0x9051, 0xB94E, 0x9052, 0xE07D, 0x9053, 0xB944, - 0x9054, 0xB946, 0x9055, 0xB948, 0x9058, 0xBBB8, 0x9059, 0xBBBB, - 0x905B, 0xBBBF, 0x905C, 0xBBB9, 0x905D, 0xBBBE, 0x905E, 0xBBBC, - 0x9060, 0xBBB7, 0x9062, 0xBBBD, 0x9063, 0xBBBA, 0x9067, 0xE852, - 0x9068, 0xBE43, 0x9069, 0xBE41, 0x906B, 0xE853, 0x906D, 0xBE44, - 0x906E, 0xBE42, 0x906F, 0xE851, 0x9070, 0xE850, 0x9072, 0xBFF0, - 0x9073, 0xE84F, 0x9074, 0xBFEE, 0x9075, 0xBFED, 0x9076, 0xEBD0, - 0x9077, 0xBE45, 0x9078, 0xBFEF, 0x9079, 0xEBD1, 0x907A, 0xBFF2, - 0x907B, 0xEBD2, 0x907C, 0xBFF1, 0x907D, 0xC1D8, 0x907E, 0xEEC3, - 0x907F, 0xC1D7, 0x9080, 0xC1DC, 0x9081, 0xC1DA, 0x9082, 0xC1DB, - 0x9083, 0xC2E3, 0x9084, 0xC1D9, 0x9085, 0xEEC2, 0x9086, 0xEBD3, - 0x9087, 0xC2E2, 0x9088, 0xC2E4, 0x908A, 0xC3E4, 0x908B, 0xC3E5, - 0x908D, 0xF4E0, 0x908F, 0xC5DE, 0x9090, 0xC5DD, 0x9091, 0xA8B6, - 0x9094, 0xCA55, 0x9095, 0xB06F, 0x9097, 0xCA52, 0x9098, 0xCA53, - 0x9099, 0xCA51, 0x909B, 0xCA54, 0x909E, 0xCBAA, 0x909F, 0xCBA7, - 0x90A0, 0xCBAC, 0x90A1, 0xCBA8, 0x90A2, 0xA8B7, 0x90A3, 0xA8BA, - 0x90A5, 0xCBA9, 0x90A6, 0xA8B9, 0x90A7, 0xCBAB, 0x90AA, 0xA8B8, - 0x90AF, 0xCDD5, 0x90B0, 0xCDD7, 0x90B1, 0xAAF4, 0x90B2, 0xCDD3, - 0x90B3, 0xCDD6, 0x90B4, 0xCDD4, 0x90B5, 0xAAF2, 0x90B6, 0xAAF5, - 0x90B8, 0xAAF3, 0x90BD, 0xD0B8, 0x90BE, 0xD0BC, 0x90BF, 0xD0B9, - 0x90C1, 0xADA7, 0x90C3, 0xADA8, 0x90C5, 0xD0BB, 0x90C7, 0xD0BD, - 0x90C8, 0xD0BF, 0x90CA, 0xADA5, 0x90CB, 0xD0BE, 0x90CE, 0xADA6, - 0x90D4, 0xD7EE, 0x90D5, 0xD0BA, 0x90D6, 0xD3F2, 0x90D7, 0xD3FB, - 0x90D8, 0xD3F9, 0x90D9, 0xD3F4, 0x90DA, 0xD3F5, 0x90DB, 0xD3FA, - 0x90DC, 0xD3FC, 0x90DD, 0xB071, 0x90DF, 0xD3F7, 0x90E0, 0xD3F3, - 0x90E1, 0xB070, 0x90E2, 0xB072, 0x90E3, 0xD3F6, 0x90E4, 0xD3FD, - 0x90E5, 0xD3F8, 0x90E8, 0xB3A1, 0x90E9, 0xD7F1, 0x90EA, 0xD7E9, - 0x90EB, 0xD7EF, 0x90EC, 0xD7F0, 0x90ED, 0xB3A2, 0x90EF, 0xD7E8, - 0x90F0, 0xD7EA, 0x90F1, 0xD0B7, 0x90F2, 0xD7EC, 0x90F3, 0xD7ED, - 0x90F4, 0xD7EB, 0x90F5, 0xB66C, 0x90F9, 0xDC56, 0x90FA, 0xEBD4, - 0x90FB, 0xDC57, 0x90FC, 0xDC54, 0x90FD, 0xB3A3, 0x90FE, 0xB66E, - 0x90FF, 0xDC53, 0x9100, 0xDC59, 0x9101, 0xDC58, 0x9102, 0xB66B, - 0x9103, 0xDC5C, 0x9104, 0xDC52, 0x9105, 0xDC5B, 0x9106, 0xDC50, - 0x9107, 0xDC5A, 0x9108, 0xDC55, 0x9109, 0xB66D, 0x910B, 0xE0AA, - 0x910D, 0xE0A5, 0x910E, 0xE0AB, 0x910F, 0xE0A6, 0x9110, 0xE0A4, - 0x9111, 0xE0A7, 0x9112, 0xB951, 0x9114, 0xE0A9, 0x9116, 0xE0A8, - 0x9117, 0xB952, 0x9118, 0xBBC1, 0x9119, 0xBBC0, 0x911A, 0xE46E, - 0x911B, 0xE471, 0x911C, 0xE469, 0x911D, 0xE46D, 0x911E, 0xBBC2, - 0x911F, 0xE46C, 0x9120, 0xE46A, 0x9121, 0xE470, 0x9122, 0xE46B, - 0x9123, 0xE468, 0x9124, 0xE46F, 0x9126, 0xE859, 0x9127, 0xBE48, - 0x9128, 0xF14A, 0x9129, 0xE856, 0x912A, 0xE857, 0x912B, 0xE855, - 0x912C, 0xDC51, 0x912D, 0xBE47, 0x912E, 0xE85A, 0x912F, 0xE854, - 0x9130, 0xBE46, 0x9131, 0xBE49, 0x9132, 0xE858, 0x9133, 0xEBD5, - 0x9134, 0xBFF3, 0x9135, 0xEBD6, 0x9136, 0xEBD7, 0x9138, 0xEEC4, - 0x9139, 0xC1DD, 0x913A, 0xF14B, 0x913B, 0xF14C, 0x913E, 0xF14D, - 0x913F, 0xF35D, 0x9140, 0xF35C, 0x9141, 0xF4E2, 0x9143, 0xF4E1, - 0x9144, 0xF65B, 0x9145, 0xF65C, 0x9146, 0xF65A, 0x9147, 0xF766, - 0x9148, 0xC5B0, 0x9149, 0xA8BB, 0x914A, 0xADAA, 0x914B, 0xADA9, - 0x914C, 0xB075, 0x914D, 0xB074, 0x914E, 0xD440, 0x914F, 0xD441, - 0x9150, 0xD3FE, 0x9152, 0xB073, 0x9153, 0xD7F5, 0x9155, 0xD7F6, - 0x9156, 0xD7F2, 0x9157, 0xB3A4, 0x9158, 0xD7F3, 0x915A, 0xD7F4, - 0x915F, 0xDC5F, 0x9160, 0xDC61, 0x9161, 0xDC5D, 0x9162, 0xDC60, - 0x9163, 0xB66F, 0x9164, 0xDC5E, 0x9165, 0xB670, 0x9168, 0xDD73, - 0x9169, 0xB955, 0x916A, 0xB954, 0x916C, 0xB953, 0x916E, 0xE0AC, - 0x916F, 0xE0AD, 0x9172, 0xE473, 0x9173, 0xE475, 0x9174, 0xBBC6, - 0x9175, 0xBBC3, 0x9177, 0xBBC5, 0x9178, 0xBBC4, 0x9179, 0xE474, - 0x917A, 0xE472, 0x9180, 0xE861, 0x9181, 0xE85E, 0x9182, 0xE85F, - 0x9183, 0xBE4D, 0x9184, 0xE860, 0x9185, 0xE85B, 0x9186, 0xE85C, - 0x9187, 0xBE4A, 0x9189, 0xBE4B, 0x918A, 0xE85D, 0x918B, 0xBE4C, - 0x918D, 0xEBDB, 0x918F, 0xEBDC, 0x9190, 0xEBD9, 0x9191, 0xEBDA, - 0x9192, 0xBFF4, 0x9193, 0xEBD8, 0x9199, 0xEEC8, 0x919A, 0xEEC5, - 0x919B, 0xEEC7, 0x919C, 0xC1E0, 0x919D, 0xEECB, 0x919E, 0xC1DF, - 0x919F, 0xEEC9, 0x91A0, 0xEECC, 0x91A1, 0xEECA, 0x91A2, 0xEEC6, - 0x91A3, 0xC1DE, 0x91A5, 0xF14F, 0x91A7, 0xF150, 0x91A8, 0xF14E, - 0x91AA, 0xF152, 0x91AB, 0xC2E5, 0x91AC, 0xC2E6, 0x91AD, 0xF35F, - 0x91AE, 0xC3E7, 0x91AF, 0xF151, 0x91B0, 0xF35E, 0x91B1, 0xC3E6, - 0x91B2, 0xF4E5, 0x91B3, 0xF4E6, 0x91B4, 0xC4BF, 0x91B5, 0xF4E4, - 0x91B7, 0xF4E3, 0x91B9, 0xF65D, 0x91BA, 0xC548, 0x91BC, 0xF849, - 0x91BD, 0xF8C8, 0x91BE, 0xF8C7, 0x91C0, 0xC643, 0x91C1, 0xC65D, - 0x91C2, 0xF8C9, 0x91C3, 0xF971, 0x91C5, 0xC66F, 0x91C6, 0xA8BC, - 0x91C7, 0xAAF6, 0x91C9, 0xB956, 0x91CB, 0xC4C0, 0x91CC, 0xA8BD, - 0x91CD, 0xADAB, 0x91CE, 0xB3A5, 0x91CF, 0xB671, 0x91D0, 0xC2E7, - 0x91D1, 0xAAF7, 0x91D3, 0xD0C1, 0x91D4, 0xD0C0, 0x91D5, 0xD442, - 0x91D7, 0xB078, 0x91D8, 0xB076, 0x91D9, 0xB07A, 0x91DA, 0xD444, - 0x91DC, 0xB079, 0x91DD, 0xB077, 0x91E2, 0xD443, 0x91E3, 0xB3A8, - 0x91E4, 0xD7FC, 0x91E6, 0xB3A7, 0x91E7, 0xB3A9, 0x91E8, 0xD842, - 0x91E9, 0xB3AB, 0x91EA, 0xD7FE, 0x91EB, 0xD840, 0x91EC, 0xD7F7, - 0x91ED, 0xB3AA, 0x91EE, 0xD843, 0x91F1, 0xD7F9, 0x91F3, 0xD7FA, - 0x91F4, 0xD7F8, 0x91F5, 0xB3A6, 0x91F7, 0xD841, 0x91F8, 0xD7FB, - 0x91F9, 0xD7FD, 0x91FD, 0xDC6D, 0x91FF, 0xDC6C, 0x9200, 0xDC6A, - 0x9201, 0xDC62, 0x9202, 0xDC71, 0x9203, 0xDC65, 0x9204, 0xDC6F, - 0x9205, 0xDC76, 0x9206, 0xDC6E, 0x9207, 0xB679, 0x9209, 0xB675, - 0x920A, 0xDC63, 0x920C, 0xDC69, 0x920D, 0xB677, 0x920F, 0xDC68, - 0x9210, 0xB678, 0x9211, 0xB67A, 0x9212, 0xDC6B, 0x9214, 0xB672, - 0x9215, 0xB673, 0x9216, 0xDC77, 0x9217, 0xDC75, 0x9219, 0xDC74, - 0x921A, 0xDC66, 0x921C, 0xDC72, 0x921E, 0xB676, 0x9223, 0xB674, - 0x9224, 0xDC73, 0x9225, 0xDC64, 0x9226, 0xDC67, 0x9227, 0xDC70, - 0x922D, 0xE4BA, 0x922E, 0xE0B7, 0x9230, 0xE0B0, 0x9231, 0xE0C3, - 0x9232, 0xE0CC, 0x9233, 0xE0B3, 0x9234, 0xB961, 0x9236, 0xE0C0, - 0x9237, 0xB957, 0x9238, 0xB959, 0x9239, 0xB965, 0x923A, 0xE0B1, - 0x923D, 0xB95A, 0x923E, 0xB95C, 0x923F, 0xB966, 0x9240, 0xB95B, - 0x9245, 0xB964, 0x9246, 0xE0B9, 0x9248, 0xE0AE, 0x9249, 0xB962, - 0x924A, 0xE0B8, 0x924B, 0xB95E, 0x924C, 0xE0CA, 0x924D, 0xB963, - 0x924E, 0xE0C8, 0x924F, 0xE0BC, 0x9250, 0xE0C6, 0x9251, 0xB960, - 0x9252, 0xE0AF, 0x9253, 0xE0C9, 0x9254, 0xE0C4, 0x9256, 0xE0CB, - 0x9257, 0xB958, 0x925A, 0xB967, 0x925B, 0xB95D, 0x925E, 0xE0B5, - 0x9260, 0xE0BD, 0x9261, 0xE0C1, 0x9263, 0xE0C5, 0x9264, 0xB95F, - 0x9265, 0xE0B4, 0x9266, 0xE0B2, 0x9267, 0xE0BE, 0x926C, 0xE0BB, - 0x926D, 0xE0BA, 0x926F, 0xE0BF, 0x9270, 0xE0C2, 0x9272, 0xE0C7, - 0x9276, 0xE478, 0x9278, 0xBBC7, 0x9279, 0xE4A4, 0x927A, 0xE47A, - 0x927B, 0xBBCC, 0x927C, 0xBBD0, 0x927D, 0xE4AD, 0x927E, 0xE4B5, - 0x927F, 0xE4A6, 0x9280, 0xBBC8, 0x9282, 0xE4AA, 0x9283, 0xE0B6, - 0x9285, 0xBBC9, 0x9286, 0xE4B1, 0x9287, 0xE4B6, 0x9288, 0xE4AE, - 0x928A, 0xE4B0, 0x928B, 0xE4B9, 0x928C, 0xE4B2, 0x928D, 0xE47E, - 0x928E, 0xE4A9, 0x9291, 0xBBD1, 0x9293, 0xBBCD, 0x9294, 0xE47C, - 0x9295, 0xE4AB, 0x9296, 0xBBCB, 0x9297, 0xE4A5, 0x9298, 0xBBCA, - 0x9299, 0xE4B3, 0x929A, 0xE4A2, 0x929B, 0xE479, 0x929C, 0xBBCE, - 0x929D, 0xE4B8, 0x92A0, 0xE47B, 0x92A1, 0xE4AF, 0x92A2, 0xE4AC, - 0x92A3, 0xE4A7, 0x92A4, 0xE477, 0x92A5, 0xE476, 0x92A6, 0xE4A1, - 0x92A7, 0xE4B4, 0x92A8, 0xBBCF, 0x92A9, 0xE4B7, 0x92AA, 0xE47D, - 0x92AB, 0xE4A3, 0x92AC, 0xBE52, 0x92B2, 0xBE5A, 0x92B3, 0xBE55, - 0x92B4, 0xE8A4, 0x92B5, 0xE8A1, 0x92B6, 0xE867, 0x92B7, 0xBE50, - 0x92B9, 0xF9D7, 0x92BB, 0xBE4F, 0x92BC, 0xBE56, 0x92C0, 0xE865, - 0x92C1, 0xBE54, 0x92C2, 0xE871, 0x92C3, 0xE863, 0x92C4, 0xE864, - 0x92C5, 0xBE4E, 0x92C6, 0xE8A3, 0x92C7, 0xBE58, 0x92C8, 0xE874, - 0x92C9, 0xE879, 0x92CA, 0xE873, 0x92CB, 0xEBEE, 0x92CC, 0xE86F, - 0x92CD, 0xE877, 0x92CE, 0xE875, 0x92CF, 0xE868, 0x92D0, 0xE862, - 0x92D1, 0xE87D, 0x92D2, 0xBE57, 0x92D3, 0xE87E, 0x92D5, 0xE878, - 0x92D7, 0xE86D, 0x92D8, 0xE86B, 0x92D9, 0xE866, 0x92DD, 0xE86E, - 0x92DE, 0xE87B, 0x92DF, 0xE86A, 0x92E0, 0xE87A, 0x92E1, 0xE8A2, - 0x92E4, 0xBE53, 0x92E6, 0xE876, 0x92E7, 0xE87C, 0x92E8, 0xE872, - 0x92E9, 0xE86C, 0x92EA, 0xBE51, 0x92EE, 0xE4A8, 0x92EF, 0xE870, - 0x92F0, 0xBE59, 0x92F1, 0xE869, 0x92F7, 0xEBF4, 0x92F8, 0xBFF7, - 0x92F9, 0xEBF3, 0x92FA, 0xEBF0, 0x92FB, 0xEC44, 0x92FC, 0xBFFB, - 0x92FE, 0xEC41, 0x92FF, 0xEBF8, 0x9300, 0xEC43, 0x9301, 0xEBE9, - 0x9302, 0xEBF6, 0x9304, 0xBFFD, 0x9306, 0xEBE1, 0x9308, 0xEBDF, - 0x9309, 0xEC42, 0x930B, 0xEC40, 0x930C, 0xEBFE, 0x930D, 0xEBED, - 0x930E, 0xEBEC, 0x930F, 0xEBE2, 0x9310, 0xC040, 0x9312, 0xEBE8, - 0x9313, 0xEBF2, 0x9314, 0xEBFD, 0x9315, 0xC043, 0x9316, 0xEC45, - 0x9318, 0xC1E8, 0x9319, 0xC045, 0x931A, 0xBFFE, 0x931B, 0xEBE6, - 0x931D, 0xEBEF, 0x931E, 0xEBDE, 0x931F, 0xEBE0, 0x9320, 0xBFF5, - 0x9321, 0xC042, 0x9322, 0xBFFA, 0x9323, 0xEBE7, 0x9324, 0xEBF7, - 0x9325, 0xEBF1, 0x9326, 0xC041, 0x9327, 0xEBDD, 0x9328, 0xC1E3, - 0x9329, 0xEBF9, 0x932A, 0xEBFC, 0x932B, 0xBFFC, 0x932D, 0xEBEB, - 0x932E, 0xC044, 0x932F, 0xBFF9, 0x9333, 0xBFF8, 0x9334, 0xEBF5, - 0x9335, 0xEBFB, 0x9336, 0xBFF6, 0x9338, 0xEBE4, 0x9339, 0xEBFA, - 0x933C, 0xEBE5, 0x9346, 0xEBEA, 0x9347, 0xEED2, 0x9349, 0xEED7, - 0x934A, 0xC1E5, 0x934B, 0xC1E7, 0x934C, 0xEEDD, 0x934D, 0xC1E1, - 0x934E, 0xEEEC, 0x934F, 0xEEE3, 0x9350, 0xEED8, 0x9351, 0xEED9, - 0x9352, 0xEEE2, 0x9354, 0xC1EE, 0x9355, 0xEEE1, 0x9356, 0xEED1, - 0x9357, 0xEEE0, 0x9358, 0xEED4, 0x9359, 0xEEED, 0x935A, 0xC1ED, - 0x935B, 0xC1EB, 0x935C, 0xEED5, 0x935E, 0xEEE8, 0x9360, 0xEEDA, - 0x9361, 0xEEE7, 0x9363, 0xEEE9, 0x9364, 0xEED0, 0x9365, 0xC1E6, - 0x9367, 0xEEEA, 0x936A, 0xEEDE, 0x936C, 0xC1EA, 0x936D, 0xEEDB, - 0x9370, 0xC1EC, 0x9371, 0xEEE4, 0x9375, 0xC1E4, 0x9376, 0xEED6, - 0x9377, 0xEEE5, 0x9379, 0xEEDF, 0x937A, 0xEBE3, 0x937B, 0xEEE6, - 0x937C, 0xEED3, 0x937E, 0xC1E9, 0x9380, 0xEEEB, 0x9382, 0xC1E2, - 0x9383, 0xEECE, 0x9388, 0xF160, 0x9389, 0xF159, 0x938A, 0xC2E9, - 0x938C, 0xF154, 0x938D, 0xF163, 0x938E, 0xF15B, 0x938F, 0xEEDC, - 0x9391, 0xF165, 0x9392, 0xF155, 0x9394, 0xC2E8, 0x9395, 0xF15F, - 0x9396, 0xC2EA, 0x9397, 0xC2F2, 0x9398, 0xC2F0, 0x9399, 0xF161, - 0x939A, 0xC2F1, 0x939B, 0xF157, 0x939D, 0xF158, 0x939E, 0xF15D, - 0x939F, 0xF162, 0x93A1, 0xEECD, 0x93A2, 0xC2EB, 0x93A3, 0xF16A, - 0x93A4, 0xF167, 0x93A5, 0xF16B, 0x93A6, 0xF15E, 0x93A7, 0xF15A, - 0x93A8, 0xF168, 0x93A9, 0xF36A, 0x93AA, 0xF15C, 0x93AC, 0xC2EE, - 0x93AE, 0xC2ED, 0x93AF, 0xEECF, 0x93B0, 0xC2EF, 0x93B1, 0xF164, - 0x93B2, 0xF166, 0x93B3, 0xC2EC, 0x93B4, 0xF169, 0x93B5, 0xF153, - 0x93B7, 0xF156, 0x93C0, 0xF373, 0x93C2, 0xF363, 0x93C3, 0xC3EB, - 0x93C4, 0xF371, 0x93C7, 0xF361, 0x93C8, 0xC3EC, 0x93CA, 0xF36C, - 0x93CC, 0xF368, 0x93CD, 0xC3F1, 0x93CE, 0xF372, 0x93CF, 0xF362, - 0x93D0, 0xF365, 0x93D1, 0xC3E9, 0x93D2, 0xF374, 0x93D4, 0xF36D, - 0x93D5, 0xF370, 0x93D6, 0xC3EF, 0x93D7, 0xC3F4, 0x93D8, 0xC3F2, - 0x93D9, 0xF369, 0x93DA, 0xF364, 0x93DC, 0xC3ED, 0x93DD, 0xC3EE, - 0x93DE, 0xF360, 0x93DF, 0xC3EA, 0x93E1, 0xC3E8, 0x93E2, 0xC3F0, - 0x93E3, 0xF36F, 0x93E4, 0xC3F3, 0x93E6, 0xF36B, 0x93E7, 0xF375, - 0x93E8, 0xC3F5, 0x93EC, 0xF367, 0x93EE, 0xF36E, 0x93F5, 0xF4F3, - 0x93F6, 0xF542, 0x93F7, 0xF4F5, 0x93F8, 0xF4FC, 0x93F9, 0xF366, - 0x93FA, 0xF4FA, 0x93FB, 0xF4E9, 0x93FC, 0xF540, 0x93FD, 0xC4C3, - 0x93FE, 0xF4ED, 0x93FF, 0xF4FE, 0x9400, 0xF4F4, 0x9403, 0xC4C2, - 0x9406, 0xF544, 0x9407, 0xF4F6, 0x9409, 0xF4FB, 0x940A, 0xF4FD, - 0x940B, 0xF4E7, 0x940C, 0xF541, 0x940D, 0xF4F2, 0x940E, 0xF4F7, - 0x940F, 0xF4EB, 0x9410, 0xF4EF, 0x9411, 0xF543, 0x9412, 0xF4F9, - 0x9413, 0xF4E8, 0x9414, 0xF4EC, 0x9415, 0xF4EE, 0x9416, 0xF4F8, - 0x9418, 0xC4C1, 0x9419, 0xF4F1, 0x9420, 0xF4EA, 0x9428, 0xF4F0, - 0x9429, 0xF661, 0x942A, 0xF666, 0x942B, 0xC54F, 0x942C, 0xF668, - 0x942E, 0xC549, 0x9430, 0xF664, 0x9431, 0xF66A, 0x9432, 0xC54E, - 0x9433, 0xC54A, 0x9435, 0xC54B, 0x9436, 0xF660, 0x9437, 0xF667, - 0x9438, 0xC54D, 0x9439, 0xF665, 0x943A, 0xC54C, 0x943B, 0xF65F, - 0x943C, 0xF663, 0x943D, 0xF662, 0x943F, 0xF65E, 0x9440, 0xF669, - 0x9444, 0xC5B1, 0x9445, 0xF76D, 0x9446, 0xF770, 0x9447, 0xF76C, - 0x9448, 0xF76E, 0x9449, 0xF76F, 0x944A, 0xF769, 0x944B, 0xF76A, - 0x944C, 0xF767, 0x944F, 0xF76B, 0x9450, 0xF768, 0x9451, 0xC5B2, - 0x9452, 0xC5B3, 0x9455, 0xF84B, 0x9457, 0xF84D, 0x945D, 0xF84C, - 0x945E, 0xF84E, 0x9460, 0xC5E0, 0x9462, 0xF84A, 0x9463, 0xC5DF, - 0x9464, 0xC5E1, 0x9468, 0xF8CB, 0x9469, 0xF8CC, 0x946A, 0xC644, - 0x946B, 0xF8CA, 0x946D, 0xF953, 0x946E, 0xF952, 0x946F, 0xF954, - 0x9470, 0xC65F, 0x9471, 0xF955, 0x9472, 0xC65E, 0x9473, 0xF956, - 0x9474, 0xF972, 0x9475, 0xF975, 0x9476, 0xF974, 0x9477, 0xC668, - 0x9478, 0xF973, 0x947C, 0xC672, 0x947D, 0xC670, 0x947E, 0xC671, - 0x947F, 0xC677, 0x9480, 0xF9C0, 0x9481, 0xF9C1, 0x9482, 0xF9BF, - 0x9483, 0xF9C9, 0x9577, 0xAAF8, 0x957A, 0xD844, 0x957B, 0xDC78, - 0x957C, 0xE8A5, 0x957D, 0xF376, 0x9580, 0xAAF9, 0x9582, 0xADAC, - 0x9583, 0xB07B, 0x9586, 0xD845, 0x9588, 0xD846, 0x9589, 0xB3AC, - 0x958B, 0xB67D, 0x958C, 0xDC7A, 0x958D, 0xDC79, 0x958E, 0xB6A3, - 0x958F, 0xB67C, 0x9590, 0xDC7B, 0x9591, 0xB67E, 0x9592, 0xB6A2, - 0x9593, 0xB6A1, 0x9594, 0xB67B, 0x9598, 0xB968, 0x959B, 0xE0D0, - 0x959C, 0xE0CE, 0x959E, 0xE0CF, 0x959F, 0xE0CD, 0x95A1, 0xBBD2, - 0x95A3, 0xBBD5, 0x95A4, 0xBBD7, 0x95A5, 0xBBD6, 0x95A8, 0xBBD3, - 0x95A9, 0xBBD4, 0x95AB, 0xE8A7, 0x95AC, 0xE8A6, 0x95AD, 0xBE5B, - 0x95AE, 0xE8A8, 0x95B0, 0xE8A9, 0x95B1, 0xBE5C, 0x95B5, 0xEC4D, - 0x95B6, 0xEC4B, 0x95B7, 0xEEF3, 0x95B9, 0xEC49, 0x95BA, 0xEC4A, - 0x95BB, 0xC046, 0x95BC, 0xEC46, 0x95BD, 0xEC4E, 0x95BE, 0xEC48, - 0x95BF, 0xEC4C, 0x95C0, 0xEEEF, 0x95C3, 0xEEF1, 0x95C5, 0xEEF2, - 0x95C6, 0xC1F3, 0x95C7, 0xEEEE, 0x95C8, 0xC1F2, 0x95C9, 0xEEF0, - 0x95CA, 0xC1EF, 0x95CB, 0xC1F0, 0x95CC, 0xC1F1, 0x95CD, 0xEC47, - 0x95D0, 0xC2F5, 0x95D1, 0xF16E, 0x95D2, 0xF16C, 0x95D3, 0xF16D, - 0x95D4, 0xC2F3, 0x95D5, 0xC2F6, 0x95D6, 0xC2F4, 0x95DA, 0xF377, - 0x95DB, 0xF378, 0x95DC, 0xC3F6, 0x95DE, 0xF545, 0x95DF, 0xF547, - 0x95E0, 0xF546, 0x95E1, 0xC4C4, 0x95E2, 0xC550, 0x95E3, 0xF66D, - 0x95E4, 0xF66C, 0x95E5, 0xF66B, 0x961C, 0xAAFA, 0x961E, 0xC9AA, - 0x9620, 0xCA58, 0x9621, 0xA6E9, 0x9622, 0xCA56, 0x9623, 0xCA59, - 0x9624, 0xCA57, 0x9628, 0xCBAE, 0x962A, 0xA8C1, 0x962C, 0xA8C2, - 0x962D, 0xCBB0, 0x962E, 0xA8BF, 0x962F, 0xCBAF, 0x9630, 0xCBAD, - 0x9631, 0xA8C0, 0x9632, 0xA8BE, 0x9639, 0xCDD8, 0x963A, 0xCDDB, - 0x963B, 0xAAFD, 0x963C, 0xCDDA, 0x963D, 0xCDD9, 0x963F, 0xAAFC, - 0x9640, 0xAAFB, 0x9642, 0xAB40, 0x9643, 0xCDDC, 0x9644, 0xAAFE, - 0x964A, 0xD0C6, 0x964B, 0xADAE, 0x964C, 0xADAF, 0x964D, 0xADB0, - 0x964E, 0xD0C7, 0x964F, 0xD0C3, 0x9650, 0xADAD, 0x9651, 0xD0C4, - 0x9653, 0xD0C5, 0x9654, 0xD0C2, 0x9658, 0xB0A4, 0x965B, 0xB0A1, - 0x965C, 0xD445, 0x965D, 0xB0A2, 0x965E, 0xB0A5, 0x965F, 0xD446, - 0x9661, 0xB07E, 0x9662, 0xB07C, 0x9663, 0xB07D, 0x9664, 0xB0A3, - 0x966A, 0xB3AD, 0x966B, 0xD849, 0x966C, 0xB3B5, 0x966D, 0xD848, - 0x966F, 0xD84B, 0x9670, 0xB3B1, 0x9671, 0xD84A, 0x9672, 0xB6AB, - 0x9673, 0xB3AF, 0x9674, 0xB3B2, 0x9675, 0xB3AE, 0x9676, 0xB3B3, - 0x9677, 0xB3B4, 0x9678, 0xB3B0, 0x967C, 0xD847, 0x967D, 0xB6A7, - 0x967E, 0xDC7D, 0x9680, 0xDCA3, 0x9683, 0xDCA2, 0x9684, 0xB6AC, - 0x9685, 0xB6A8, 0x9686, 0xB6A9, 0x9687, 0xDC7C, 0x9688, 0xDC7E, - 0x9689, 0xDCA1, 0x968A, 0xB6A4, 0x968B, 0xB6A6, 0x968D, 0xB6AA, - 0x968E, 0xB6A5, 0x9691, 0xE0D3, 0x9692, 0xE0D1, 0x9693, 0xE0D2, - 0x9694, 0xB96A, 0x9695, 0xB96B, 0x9697, 0xE0D4, 0x9698, 0xB969, - 0x9699, 0xBBD8, 0x969B, 0xBBDA, 0x969C, 0xBBD9, 0x969E, 0xE4BB, - 0x96A1, 0xE4BC, 0x96A2, 0xE8AB, 0x96A4, 0xE8AA, 0x96A7, 0xC047, - 0x96A8, 0xC048, 0x96A9, 0xEC4F, 0x96AA, 0xC049, 0x96AC, 0xEEF6, - 0x96AE, 0xEEF4, 0x96B0, 0xEEF5, 0x96B1, 0xC1F4, 0x96B3, 0xF16F, - 0x96B4, 0xC3F7, 0x96B8, 0xC1F5, 0x96B9, 0xAB41, 0x96BB, 0xB0A6, - 0x96BC, 0xD447, 0x96BF, 0xD84C, 0x96C0, 0xB3B6, 0x96C1, 0xB6AD, - 0x96C2, 0xDCA4, 0x96C3, 0xDCA6, 0x96C4, 0xB6AF, 0x96C5, 0xB6AE, - 0x96C6, 0xB6B0, 0x96C7, 0xB6B1, 0x96C8, 0xDCA5, 0x96C9, 0xB96E, - 0x96CA, 0xB96F, 0x96CB, 0xB96D, 0x96CC, 0xBBDB, 0x96CD, 0xB96C, - 0x96CE, 0xE0D5, 0x96D2, 0xBBDC, 0x96D3, 0xE8AC, 0x96D4, 0xEC50, - 0x96D5, 0xC04A, 0x96D6, 0xC1F6, 0x96D7, 0xF170, 0x96D8, 0xF174, - 0x96D9, 0xC2F9, 0x96DA, 0xF171, 0x96DB, 0xC2FA, 0x96DC, 0xC2F8, - 0x96DD, 0xF175, 0x96DE, 0xC2FB, 0x96DF, 0xF173, 0x96E1, 0xF379, - 0x96E2, 0xC2F7, 0x96E3, 0xC3F8, 0x96E5, 0xF8CD, 0x96E8, 0xAB42, - 0x96E9, 0xB3B8, 0x96EA, 0xB3B7, 0x96EF, 0xB6B2, 0x96F0, 0xDCA8, - 0x96F1, 0xDCA7, 0x96F2, 0xB6B3, 0x96F5, 0xE0D9, 0x96F6, 0xB973, - 0x96F7, 0xB970, 0x96F8, 0xE0D8, 0x96F9, 0xB972, 0x96FA, 0xE0D6, - 0x96FB, 0xB971, 0x96FD, 0xE0D7, 0x96FF, 0xE4BD, 0x9700, 0xBBDD, - 0x9702, 0xE8AF, 0x9704, 0xBE5D, 0x9705, 0xE8AD, 0x9706, 0xBE5E, - 0x9707, 0xBE5F, 0x9708, 0xE8AE, 0x9709, 0xBE60, 0x970B, 0xEC51, - 0x970D, 0xC04E, 0x970E, 0xC04B, 0x970F, 0xC050, 0x9710, 0xEC53, - 0x9711, 0xC04C, 0x9712, 0xEC52, 0x9713, 0xC04F, 0x9716, 0xC04D, - 0x9718, 0xEEF9, 0x9719, 0xEEFB, 0x971C, 0xC1F7, 0x971D, 0xEEFA, - 0x971E, 0xC1F8, 0x971F, 0xEEF8, 0x9720, 0xEEF7, 0x9722, 0xF177, - 0x9723, 0xF176, 0x9724, 0xC2FC, 0x9725, 0xF178, 0x9726, 0xF37E, - 0x9727, 0xC3FA, 0x9728, 0xF37D, 0x9729, 0xF37A, 0x972A, 0xC3F9, - 0x972B, 0xF37B, 0x972C, 0xF37C, 0x972E, 0xF548, 0x972F, 0xF549, - 0x9730, 0xC4C5, 0x9732, 0xC553, 0x9735, 0xF66E, 0x9738, 0xC551, - 0x9739, 0xC552, 0x973A, 0xF66F, 0x973D, 0xC5B4, 0x973E, 0xC5B5, - 0x973F, 0xF771, 0x9742, 0xC645, 0x9743, 0xF8CF, 0x9744, 0xC647, - 0x9746, 0xF8CE, 0x9747, 0xF8D0, 0x9748, 0xC646, 0x9749, 0xF957, - 0x974B, 0xF9AD, 0x9752, 0xAB43, 0x9756, 0xB974, 0x9758, 0xE4BE, - 0x975A, 0xE8B0, 0x975B, 0xC051, 0x975C, 0xC052, 0x975E, 0xAB44, - 0x9760, 0xBE61, 0x9761, 0xC3FB, 0x9762, 0xADB1, 0x9766, 0xC053, - 0x9768, 0xC5E2, 0x9769, 0xADB2, 0x976A, 0xD84D, 0x976C, 0xDCA9, - 0x976E, 0xDCAB, 0x9770, 0xDCAA, 0x9772, 0xE0DD, 0x9773, 0xE0DA, - 0x9774, 0xB975, 0x9776, 0xB976, 0x9777, 0xE0DB, 0x9778, 0xE0DC, - 0x977A, 0xE4C0, 0x977B, 0xE4C5, 0x977C, 0xBBDE, 0x977D, 0xE4BF, - 0x977E, 0xE4C1, 0x977F, 0xE4C8, 0x9780, 0xE4C3, 0x9781, 0xE4C7, - 0x9782, 0xE4C4, 0x9783, 0xE4C2, 0x9784, 0xE4C6, 0x9785, 0xBBDF, - 0x9788, 0xE8B3, 0x978A, 0xE8B1, 0x978B, 0xBE63, 0x978D, 0xBE62, - 0x978E, 0xE8B2, 0x978F, 0xBE64, 0x9794, 0xEC56, 0x9797, 0xEC55, - 0x9798, 0xC054, 0x9799, 0xEC54, 0x979A, 0xEEFC, 0x979C, 0xEEFE, - 0x979D, 0xEF41, 0x979E, 0xEF40, 0x97A0, 0xC1F9, 0x97A1, 0xEEFD, - 0x97A2, 0xF1A1, 0x97A3, 0xC2FD, 0x97A4, 0xF17D, 0x97A5, 0xF1A2, - 0x97A6, 0xC2FE, 0x97A8, 0xF17B, 0x97AA, 0xF17E, 0x97AB, 0xF17C, - 0x97AC, 0xF179, 0x97AD, 0xC340, 0x97AE, 0xF17A, 0x97B3, 0xF3A1, - 0x97B6, 0xF3A3, 0x97B7, 0xF3A2, 0x97B9, 0xF54A, 0x97BB, 0xF54B, - 0x97BF, 0xF670, 0x97C1, 0xC5B7, 0x97C3, 0xC5B6, 0x97C4, 0xF84F, - 0x97C5, 0xF850, 0x97C6, 0xC648, 0x97C7, 0xF8D1, 0x97C9, 0xC669, - 0x97CB, 0xADB3, 0x97CC, 0xB6B4, 0x97CD, 0xE4CA, 0x97CE, 0xE4C9, - 0x97CF, 0xE8B5, 0x97D0, 0xE8B4, 0x97D3, 0xC1FA, 0x97D4, 0xEF43, - 0x97D5, 0xEF42, 0x97D6, 0xF1A5, 0x97D7, 0xF1A3, 0x97D8, 0xF1A6, - 0x97D9, 0xF1A4, 0x97DC, 0xC3FC, 0x97DD, 0xF3A4, 0x97DE, 0xF3A5, - 0x97DF, 0xF3A6, 0x97E1, 0xF671, 0x97E3, 0xF772, 0x97E5, 0xF8D2, - 0x97ED, 0xADB4, 0x97F0, 0xEC57, 0x97F1, 0xEF44, 0x97F3, 0xADB5, - 0x97F6, 0xBBE0, 0x97F8, 0xEC58, 0x97F9, 0xC341, 0x97FA, 0xF1A7, - 0x97FB, 0xC3FD, 0x97FD, 0xF54C, 0x97FE, 0xF54D, 0x97FF, 0xC554, - 0x9800, 0xF851, 0x9801, 0xADB6, 0x9802, 0xB3BB, 0x9803, 0xB3BC, - 0x9804, 0xD84E, 0x9805, 0xB6B5, 0x9806, 0xB6B6, 0x9807, 0xDCAC, - 0x9808, 0xB6B7, 0x980A, 0xB97A, 0x980C, 0xB97C, 0x980D, 0xE0DF, - 0x980E, 0xE0E0, 0x980F, 0xE0DE, 0x9810, 0xB977, 0x9811, 0xB978, - 0x9812, 0xB97B, 0x9813, 0xB979, 0x9816, 0xE4CB, 0x9817, 0xBBE1, - 0x9818, 0xBBE2, 0x981B, 0xE8BC, 0x981C, 0xBE67, 0x981D, 0xE8B7, - 0x981E, 0xE8B6, 0x9820, 0xE8BB, 0x9821, 0xBE65, 0x9824, 0xC05B, - 0x9826, 0xE8B8, 0x9827, 0xE8BD, 0x9828, 0xE8BA, 0x9829, 0xE8B9, - 0x982B, 0xBE66, 0x982D, 0xC059, 0x982F, 0xEC5A, 0x9830, 0xC055, - 0x9832, 0xEC5B, 0x9835, 0xEC59, 0x9837, 0xC058, 0x9838, 0xC056, - 0x9839, 0xC05A, 0x983B, 0xC057, 0x9841, 0xEF45, 0x9843, 0xEF4A, - 0x9844, 0xEF46, 0x9845, 0xEF49, 0x9846, 0xC1FB, 0x9848, 0xEDD4, - 0x9849, 0xEF48, 0x984A, 0xEF47, 0x984C, 0xC344, 0x984D, 0xC342, - 0x984E, 0xC345, 0x984F, 0xC343, 0x9850, 0xF1A8, 0x9851, 0xF1A9, - 0x9852, 0xF1AA, 0x9853, 0xC346, 0x9857, 0xF3AA, 0x9858, 0xC440, - 0x9859, 0xF3A8, 0x985B, 0xC441, 0x985C, 0xF3A7, 0x985D, 0xF3A9, - 0x985E, 0xC3FE, 0x985F, 0xF551, 0x9860, 0xF54E, 0x9862, 0xF54F, - 0x9863, 0xF550, 0x9864, 0xF672, 0x9865, 0xC556, 0x9867, 0xC555, - 0x9869, 0xF774, 0x986A, 0xF773, 0x986B, 0xC5B8, 0x986F, 0xC5E3, - 0x9870, 0xC649, 0x9871, 0xC660, 0x9872, 0xF958, 0x9873, 0xF9AE, - 0x9874, 0xF9AF, 0x98A8, 0xADB7, 0x98A9, 0xDCAD, 0x98AC, 0xE0E1, - 0x98AD, 0xE4CC, 0x98AE, 0xE4CD, 0x98AF, 0xBBE3, 0x98B1, 0xBBE4, - 0x98B2, 0xE8BE, 0x98B3, 0xBE68, 0x98B6, 0xC1FC, 0x98B8, 0xF1AB, - 0x98BA, 0xC347, 0x98BB, 0xF3AD, 0x98BC, 0xC442, 0x98BD, 0xF3AC, - 0x98BE, 0xF3AE, 0x98BF, 0xF3AB, 0x98C0, 0xF675, 0x98C1, 0xF552, - 0x98C2, 0xF553, 0x98C4, 0xC4C6, 0x98C6, 0xF674, 0x98C9, 0xF673, - 0x98CB, 0xF775, 0x98CC, 0xF9B0, 0x98DB, 0xADB8, 0x98DF, 0xADB9, - 0x98E2, 0xB0A7, 0x98E3, 0xD448, 0x98E5, 0xD84F, 0x98E7, 0xB6B8, - 0x98E9, 0xB6BB, 0x98EA, 0xB6B9, 0x98EB, 0xDCAE, 0x98ED, 0xB6BD, - 0x98EF, 0xB6BA, 0x98F2, 0xB6BC, 0x98F4, 0xB97E, 0x98F6, 0xE0E2, - 0x98F9, 0xE0E3, 0x98FA, 0xE8C0, 0x98FC, 0xB97D, 0x98FD, 0xB9A1, - 0x98FE, 0xB9A2, 0x9900, 0xE4CF, 0x9902, 0xE4CE, 0x9903, 0xBBE5, - 0x9905, 0xBBE6, 0x9907, 0xE4D0, 0x9908, 0xE8BF, 0x9909, 0xBBE8, - 0x990A, 0xBE69, 0x990C, 0xBBE7, 0x9910, 0xC05C, 0x9911, 0xE8C1, - 0x9912, 0xBE6B, 0x9913, 0xBE6A, 0x9914, 0xE8C2, 0x9915, 0xE8C5, - 0x9916, 0xE8C3, 0x9917, 0xE8C4, 0x9918, 0xBE6C, 0x991A, 0xC061, - 0x991B, 0xC05F, 0x991E, 0xC05E, 0x991F, 0xEC5D, 0x9921, 0xC060, - 0x9924, 0xEC5C, 0x9925, 0xEF4B, 0x9927, 0xEC5E, 0x9928, 0xC05D, - 0x9929, 0xEC5F, 0x992A, 0xEF4E, 0x992B, 0xEF4C, 0x992C, 0xEF4D, - 0x992D, 0xEF52, 0x992E, 0xC34B, 0x992F, 0xEF51, 0x9930, 0xEF54, - 0x9931, 0xEF53, 0x9932, 0xEF50, 0x9933, 0xEF4F, 0x9935, 0xC1FD, - 0x993A, 0xF1AE, 0x993C, 0xF1AD, 0x993D, 0xC34A, 0x993E, 0xC348, - 0x993F, 0xC349, 0x9941, 0xF1AC, 0x9943, 0xF3B1, 0x9945, 0xC443, - 0x9947, 0xF3B0, 0x9948, 0xF3AF, 0x9949, 0xC444, 0x994B, 0xF558, - 0x994C, 0xF557, 0x994E, 0xF555, 0x9950, 0xF554, 0x9951, 0xC4C8, - 0x9952, 0xC4C7, 0x9953, 0xF559, 0x9954, 0xF776, 0x9955, 0xC5B9, - 0x9956, 0xF677, 0x9957, 0xC557, 0x9958, 0xF676, 0x9959, 0xF556, - 0x995B, 0xF777, 0x995C, 0xC5E4, 0x995E, 0xC661, 0x995F, 0xF959, - 0x9961, 0xF9B1, 0x9996, 0xADBA, 0x9997, 0xD850, 0x9998, 0xEF55, - 0x9999, 0xADBB, 0x999C, 0xE4D2, 0x999D, 0xE4D1, 0x999E, 0xEC60, - 0x99A1, 0xEF57, 0x99A3, 0xEF56, 0x99A5, 0xC34C, 0x99A6, 0xF3B2, - 0x99A7, 0xF3B3, 0x99A8, 0xC4C9, 0x99AB, 0xF9B2, 0x99AC, 0xB0A8, - 0x99AD, 0xB6BF, 0x99AE, 0xB6BE, 0x99AF, 0xE0E4, 0x99B0, 0xE0E6, - 0x99B1, 0xB9A4, 0x99B2, 0xE0E5, 0x99B3, 0xB9A3, 0x99B4, 0xB9A5, - 0x99B5, 0xE0E7, 0x99B9, 0xE4D4, 0x99BA, 0xE4D6, 0x99BB, 0xE4D5, - 0x99BD, 0xE4D8, 0x99C1, 0xBBE9, 0x99C2, 0xE4D7, 0x99C3, 0xE4D3, - 0x99C7, 0xE4D9, 0x99C9, 0xE8CC, 0x99CB, 0xE8CF, 0x99CC, 0xE8D1, - 0x99CD, 0xE8C7, 0x99CE, 0xE8CB, 0x99CF, 0xE8C8, 0x99D0, 0xBE6E, - 0x99D1, 0xBE71, 0x99D2, 0xBE73, 0x99D3, 0xE8C9, 0x99D4, 0xE8CA, - 0x99D5, 0xBE72, 0x99D6, 0xE8CD, 0x99D7, 0xE8D0, 0x99D8, 0xE8CE, - 0x99D9, 0xBE74, 0x99DB, 0xBE70, 0x99DC, 0xE8C6, 0x99DD, 0xBE6D, - 0x99DF, 0xBE6F, 0x99E2, 0xC063, 0x99E3, 0xEC66, 0x99E4, 0xEC64, - 0x99E5, 0xEC63, 0x99E7, 0xEC69, 0x99E9, 0xEC68, 0x99EA, 0xEC67, - 0x99EC, 0xEC62, 0x99ED, 0xC062, 0x99EE, 0xEC61, 0x99F0, 0xEC65, - 0x99F1, 0xC064, 0x99F4, 0xEF5A, 0x99F6, 0xEF5E, 0x99F7, 0xEF5B, - 0x99F8, 0xEF5D, 0x99F9, 0xEF5C, 0x99FA, 0xEF59, 0x99FB, 0xEF5F, - 0x99FC, 0xEF62, 0x99FD, 0xEF60, 0x99FE, 0xEF61, 0x99FF, 0xC240, - 0x9A01, 0xC1FE, 0x9A02, 0xEF58, 0x9A03, 0xEF63, 0x9A04, 0xF1B3, - 0x9A05, 0xF1B6, 0x9A06, 0xF1B8, 0x9A07, 0xF1B7, 0x9A09, 0xF1B1, - 0x9A0A, 0xF1B5, 0x9A0B, 0xF1B0, 0x9A0D, 0xF1B2, 0x9A0E, 0xC34D, - 0x9A0F, 0xF1AF, 0x9A11, 0xF1B4, 0x9A14, 0xF3C0, 0x9A15, 0xF3B5, - 0x9A16, 0xC445, 0x9A19, 0xC446, 0x9A1A, 0xF3B4, 0x9A1B, 0xF3B9, - 0x9A1C, 0xF3BF, 0x9A1D, 0xF3B7, 0x9A1E, 0xF3BE, 0x9A20, 0xF3BB, - 0x9A22, 0xF3BA, 0x9A23, 0xF3BD, 0x9A24, 0xF3B8, 0x9A25, 0xF3B6, - 0x9A27, 0xF3BC, 0x9A29, 0xF560, 0x9A2A, 0xF55E, 0x9A2B, 0xC4CA, - 0x9A2C, 0xF55D, 0x9A2D, 0xF563, 0x9A2E, 0xF561, 0x9A30, 0xC4CB, - 0x9A31, 0xF55C, 0x9A32, 0xF55A, 0x9A34, 0xF55B, 0x9A35, 0xC4CD, - 0x9A36, 0xF55F, 0x9A37, 0xC4CC, 0x9A38, 0xF562, 0x9A39, 0xF678, - 0x9A3A, 0xF67E, 0x9A3D, 0xF679, 0x9A3E, 0xC55B, 0x9A3F, 0xF6A1, - 0x9A40, 0xC55A, 0x9A41, 0xF67D, 0x9A42, 0xF67C, 0x9A43, 0xC559, - 0x9A44, 0xF67B, 0x9A45, 0xC558, 0x9A46, 0xF67A, 0x9A48, 0xF77D, - 0x9A49, 0xF7A1, 0x9A4A, 0xF77E, 0x9A4C, 0xF77B, 0x9A4D, 0xC5BB, - 0x9A4E, 0xF778, 0x9A4F, 0xF77C, 0x9A50, 0xF7A3, 0x9A52, 0xF7A2, - 0x9A53, 0xF779, 0x9A54, 0xF77A, 0x9A55, 0xC5BA, 0x9A56, 0xF852, - 0x9A57, 0xC5E7, 0x9A59, 0xF853, 0x9A5A, 0xC5E5, 0x9A5B, 0xC5E6, - 0x9A5E, 0xF8D3, 0x9A5F, 0xC64A, 0x9A60, 0xF976, 0x9A62, 0xC66A, - 0x9A64, 0xF9B3, 0x9A65, 0xC66B, 0x9A66, 0xF9B4, 0x9A67, 0xF9B5, - 0x9A68, 0xF9C3, 0x9A69, 0xF9C2, 0x9A6A, 0xC67A, 0x9A6B, 0xF9CD, - 0x9AA8, 0xB0A9, 0x9AAB, 0xE0E9, 0x9AAD, 0xE0E8, 0x9AAF, 0xBBEA, - 0x9AB0, 0xBBEB, 0x9AB1, 0xE4DA, 0x9AB3, 0xE8D2, 0x9AB4, 0xEC6C, - 0x9AB7, 0xBE75, 0x9AB8, 0xC065, 0x9AB9, 0xEC6A, 0x9ABB, 0xEC6D, - 0x9ABC, 0xC066, 0x9ABE, 0xEF64, 0x9ABF, 0xEC6B, 0x9AC0, 0xF1B9, - 0x9AC1, 0xC34E, 0x9AC2, 0xF3C1, 0x9AC6, 0xF566, 0x9AC7, 0xF564, - 0x9ACA, 0xF565, 0x9ACD, 0xF6A2, 0x9ACF, 0xC55C, 0x9AD0, 0xF7A4, - 0x9AD1, 0xC5EA, 0x9AD2, 0xC5BC, 0x9AD3, 0xC5E8, 0x9AD4, 0xC5E9, - 0x9AD5, 0xF8D4, 0x9AD6, 0xC662, 0x9AD8, 0xB0AA, 0x9ADC, 0xF1BA, - 0x9ADF, 0xD449, 0x9AE1, 0xB9A6, 0x9AE3, 0xE4DB, 0x9AE6, 0xBBEC, - 0x9AE7, 0xE4DC, 0x9AEB, 0xE8D4, 0x9AEC, 0xE8D3, 0x9AED, 0xC068, - 0x9AEE, 0xBE76, 0x9AEF, 0xBE77, 0x9AF1, 0xE8D7, 0x9AF2, 0xE8D6, - 0x9AF3, 0xE8D5, 0x9AF6, 0xEC6E, 0x9AF7, 0xEC71, 0x9AF9, 0xEC70, - 0x9AFA, 0xEC6F, 0x9AFB, 0xC067, 0x9AFC, 0xEF68, 0x9AFD, 0xEF66, - 0x9AFE, 0xEF65, 0x9B01, 0xEF67, 0x9B03, 0xC34F, 0x9B04, 0xF1BC, - 0x9B05, 0xF1BD, 0x9B06, 0xC350, 0x9B08, 0xF1BB, 0x9B0A, 0xF3C3, - 0x9B0B, 0xF3C2, 0x9B0C, 0xF3C5, 0x9B0D, 0xC447, 0x9B0E, 0xF3C4, - 0x9B10, 0xF567, 0x9B11, 0xF569, 0x9B12, 0xF568, 0x9B15, 0xF6A3, - 0x9B16, 0xF6A6, 0x9B17, 0xF6A4, 0x9B18, 0xF6A5, 0x9B19, 0xF7A5, - 0x9B1A, 0xC5BD, 0x9B1E, 0xF854, 0x9B1F, 0xF855, 0x9B20, 0xF856, - 0x9B22, 0xC64B, 0x9B23, 0xC663, 0x9B24, 0xF9B6, 0x9B25, 0xB0AB, - 0x9B27, 0xBE78, 0x9B28, 0xC069, 0x9B29, 0xF1BE, 0x9B2B, 0xF7A6, - 0x9B2E, 0xF9C4, 0x9B2F, 0xD44A, 0x9B31, 0xC67B, 0x9B32, 0xB0AC, - 0x9B33, 0xEC72, 0x9B35, 0xF1BF, 0x9B37, 0xF3C6, 0x9B3A, 0xF6A7, - 0x9B3B, 0xF7A7, 0x9B3C, 0xB0AD, 0x9B3E, 0xE4DD, 0x9B3F, 0xE4DE, - 0x9B41, 0xBBED, 0x9B42, 0xBBEE, 0x9B43, 0xE8D9, 0x9B44, 0xBE7A, - 0x9B45, 0xBE79, 0x9B46, 0xE8D8, 0x9B48, 0xEF69, 0x9B4A, 0xF1C0, - 0x9B4B, 0xF1C2, 0x9B4C, 0xF1C1, 0x9B4D, 0xC353, 0x9B4E, 0xC352, - 0x9B4F, 0xC351, 0x9B51, 0xC55E, 0x9B52, 0xF6A8, 0x9B54, 0xC55D, - 0x9B55, 0xF7A9, 0x9B56, 0xF7A8, 0x9B58, 0xC64C, 0x9B59, 0xF8D5, - 0x9B5A, 0xB3BD, 0x9B5B, 0xE0EA, 0x9B5F, 0xE4E1, 0x9B60, 0xE4DF, - 0x9B61, 0xE4E0, 0x9B64, 0xE8E2, 0x9B66, 0xE8DD, 0x9B67, 0xE8DA, - 0x9B68, 0xE8E1, 0x9B6C, 0xE8E3, 0x9B6F, 0xBE7C, 0x9B70, 0xE8E0, - 0x9B71, 0xE8DC, 0x9B74, 0xE8DB, 0x9B75, 0xE8DF, 0x9B76, 0xE8DE, - 0x9B77, 0xBE7B, 0x9B7A, 0xEC7D, 0x9B7B, 0xEC78, 0x9B7C, 0xEC76, - 0x9B7D, 0xECA1, 0x9B7E, 0xEC77, 0x9B80, 0xEC73, 0x9B82, 0xEC79, - 0x9B85, 0xEC74, 0x9B86, 0xEF72, 0x9B87, 0xEC75, 0x9B88, 0xECA2, - 0x9B90, 0xEC7C, 0x9B91, 0xC06A, 0x9B92, 0xEC7B, 0x9B93, 0xEC7A, - 0x9B95, 0xEC7E, 0x9B9A, 0xEF6A, 0x9B9B, 0xEF6D, 0x9B9E, 0xEF6C, - 0x9BA0, 0xEF74, 0x9BA1, 0xEF6F, 0x9BA2, 0xEF73, 0x9BA4, 0xEF71, - 0x9BA5, 0xEF70, 0x9BA6, 0xEF6E, 0x9BA8, 0xEF6B, 0x9BAA, 0xC243, - 0x9BAB, 0xC242, 0x9BAD, 0xC244, 0x9BAE, 0xC241, 0x9BAF, 0xEF75, - 0x9BB5, 0xF1C8, 0x9BB6, 0xF1CB, 0x9BB8, 0xF1C9, 0x9BB9, 0xF1CD, - 0x9BBD, 0xF1CE, 0x9BBF, 0xF1C6, 0x9BC0, 0xC358, 0x9BC1, 0xF1C7, - 0x9BC3, 0xF1C5, 0x9BC4, 0xF1CC, 0x9BC6, 0xF1C4, 0x9BC7, 0xF1C3, - 0x9BC8, 0xC357, 0x9BC9, 0xC355, 0x9BCA, 0xC354, 0x9BD3, 0xF1CA, - 0x9BD4, 0xF3CF, 0x9BD5, 0xF3D5, 0x9BD6, 0xC44A, 0x9BD7, 0xF3D0, - 0x9BD9, 0xF3D3, 0x9BDA, 0xF3D7, 0x9BDB, 0xC44B, 0x9BDC, 0xF3D2, - 0x9BDE, 0xF3CA, 0x9BE0, 0xF3C9, 0x9BE1, 0xF3D6, 0x9BE2, 0xF3CD, - 0x9BE4, 0xF3CB, 0x9BE5, 0xF3D4, 0x9BE6, 0xF3CC, 0x9BE7, 0xC449, - 0x9BE8, 0xC448, 0x9BEA, 0xF3C7, 0x9BEB, 0xF3C8, 0x9BEC, 0xF3D1, - 0x9BF0, 0xF3CE, 0x9BF7, 0xF56C, 0x9BF8, 0xF56F, 0x9BFD, 0xC356, - 0x9C05, 0xF56D, 0x9C06, 0xF573, 0x9C07, 0xF571, 0x9C08, 0xF56B, - 0x9C09, 0xF576, 0x9C0B, 0xF56A, 0x9C0D, 0xC4CF, 0x9C0E, 0xF572, - 0x9C12, 0xF56E, 0x9C13, 0xC4CE, 0x9C14, 0xF575, 0x9C17, 0xF574, - 0x9C1C, 0xF6AB, 0x9C1D, 0xF6AA, 0x9C21, 0xF6B1, 0x9C23, 0xF6AD, - 0x9C24, 0xF6B0, 0x9C25, 0xC560, 0x9C28, 0xF6AE, 0x9C29, 0xF6AF, - 0x9C2B, 0xF6A9, 0x9C2C, 0xF6AC, 0x9C2D, 0xC55F, 0x9C31, 0xC5BF, - 0x9C32, 0xF7B4, 0x9C33, 0xF7AF, 0x9C34, 0xF7B3, 0x9C36, 0xF7B6, - 0x9C37, 0xF7B2, 0x9C39, 0xF7AE, 0x9C3B, 0xC5C1, 0x9C3C, 0xF7B1, - 0x9C3D, 0xF7B5, 0x9C3E, 0xC5C0, 0x9C3F, 0xF7AC, 0x9C40, 0xF570, - 0x9C41, 0xF7B0, 0x9C44, 0xF7AD, 0x9C46, 0xF7AA, 0x9C48, 0xF7AB, - 0x9C49, 0xC5BE, 0x9C4A, 0xF85A, 0x9C4B, 0xF85C, 0x9C4C, 0xF85F, - 0x9C4D, 0xF85B, 0x9C4E, 0xF860, 0x9C50, 0xF859, 0x9C52, 0xF857, - 0x9C54, 0xC5EB, 0x9C55, 0xF85D, 0x9C56, 0xC5ED, 0x9C57, 0xC5EC, - 0x9C58, 0xF858, 0x9C59, 0xF85E, 0x9C5E, 0xF8DA, 0x9C5F, 0xC64D, - 0x9C60, 0xF8DB, 0x9C62, 0xF8D9, 0x9C63, 0xF8D6, 0x9C66, 0xF8D8, - 0x9C67, 0xF8D7, 0x9C68, 0xF95A, 0x9C6D, 0xF95C, 0x9C6E, 0xF95B, - 0x9C71, 0xF979, 0x9C73, 0xF978, 0x9C74, 0xF977, 0x9C75, 0xF97A, - 0x9C77, 0xC673, 0x9C78, 0xC674, 0x9C79, 0xF9CA, 0x9C7A, 0xF9CE, - 0x9CE5, 0xB3BE, 0x9CE6, 0xDCAF, 0x9CE7, 0xE0ED, 0x9CE9, 0xB9A7, - 0x9CEA, 0xE0EB, 0x9CED, 0xE0EC, 0x9CF1, 0xE4E2, 0x9CF2, 0xE4E3, - 0x9CF3, 0xBBF1, 0x9CF4, 0xBBEF, 0x9CF5, 0xE4E4, 0x9CF6, 0xBBF0, - 0x9CF7, 0xE8E8, 0x9CF9, 0xE8EB, 0x9CFA, 0xE8E5, 0x9CFB, 0xE8EC, - 0x9CFC, 0xE8E4, 0x9CFD, 0xE8E6, 0x9CFF, 0xE8E7, 0x9D00, 0xE8EA, - 0x9D03, 0xBEA1, 0x9D04, 0xE8EF, 0x9D05, 0xE8EE, 0x9D06, 0xBE7D, - 0x9D07, 0xE8E9, 0x9D08, 0xE8ED, 0x9D09, 0xBE7E, 0x9D10, 0xECAC, - 0x9D12, 0xC06F, 0x9D14, 0xECA7, 0x9D15, 0xC06B, 0x9D17, 0xECA4, - 0x9D18, 0xECAA, 0x9D19, 0xECAD, 0x9D1B, 0xC070, 0x9D1D, 0xECA9, - 0x9D1E, 0xECA6, 0x9D1F, 0xECAE, 0x9D20, 0xECA5, 0x9D22, 0xECAB, - 0x9D23, 0xC06C, 0x9D25, 0xECA3, 0x9D26, 0xC06D, 0x9D28, 0xC06E, - 0x9D29, 0xECA8, 0x9D2D, 0xEFA9, 0x9D2E, 0xEF7A, 0x9D2F, 0xEF7B, - 0x9D30, 0xEF7E, 0x9D31, 0xEF7C, 0x9D33, 0xEF76, 0x9D36, 0xEF79, - 0x9D37, 0xEFA5, 0x9D38, 0xEF7D, 0x9D3B, 0xC245, 0x9D3D, 0xEFA7, - 0x9D3E, 0xEFA4, 0x9D3F, 0xC246, 0x9D40, 0xEFA6, 0x9D41, 0xEF77, - 0x9D42, 0xEFA2, 0x9D43, 0xEFA3, 0x9D45, 0xEFA1, 0x9D4A, 0xF1D2, - 0x9D4B, 0xF1D4, 0x9D4C, 0xF1D7, 0x9D4F, 0xF1D1, 0x9D51, 0xC359, - 0x9D52, 0xF1D9, 0x9D53, 0xF1D0, 0x9D54, 0xF1DA, 0x9D56, 0xF1D6, - 0x9D57, 0xF1D8, 0x9D58, 0xF1DC, 0x9D59, 0xF1D5, 0x9D5A, 0xF1DD, - 0x9D5B, 0xF1D3, 0x9D5C, 0xF1CF, 0x9D5D, 0xC35A, 0x9D5F, 0xF1DB, - 0x9D60, 0xC35B, 0x9D61, 0xC44D, 0x9D67, 0xEF78, 0x9D68, 0xF3F1, - 0x9D69, 0xF3E8, 0x9D6A, 0xC44F, 0x9D6B, 0xF3E4, 0x9D6C, 0xC450, - 0x9D6F, 0xF3ED, 0x9D70, 0xF3E7, 0x9D71, 0xF3DD, 0x9D72, 0xC44E, - 0x9D73, 0xF3EA, 0x9D74, 0xF3E5, 0x9D75, 0xF3E6, 0x9D77, 0xF3D8, - 0x9D78, 0xF3DF, 0x9D79, 0xF3EE, 0x9D7B, 0xF3EB, 0x9D7D, 0xF3E3, - 0x9D7F, 0xF3EF, 0x9D80, 0xF3DE, 0x9D81, 0xF3D9, 0x9D82, 0xF3EC, - 0x9D84, 0xF3DB, 0x9D85, 0xF3E9, 0x9D86, 0xF3E0, 0x9D87, 0xF3F0, - 0x9D88, 0xF3DC, 0x9D89, 0xC44C, 0x9D8A, 0xF3DA, 0x9D8B, 0xF3E1, - 0x9D8C, 0xF3E2, 0x9D90, 0xF57D, 0x9D92, 0xF57B, 0x9D94, 0xF5A2, - 0x9D96, 0xF5AE, 0x9D97, 0xF5A5, 0x9D98, 0xF57C, 0x9D99, 0xF578, - 0x9D9A, 0xF5A7, 0x9D9B, 0xF57E, 0x9D9C, 0xF5A3, 0x9D9D, 0xF57A, - 0x9D9E, 0xF5AA, 0x9D9F, 0xF577, 0x9DA0, 0xF5A1, 0x9DA1, 0xF5A6, - 0x9DA2, 0xF5A8, 0x9DA3, 0xF5AB, 0x9DA4, 0xF579, 0x9DA6, 0xF5AF, - 0x9DA7, 0xF5B0, 0x9DA8, 0xF5A9, 0x9DA9, 0xF5AD, 0x9DAA, 0xF5A4, - 0x9DAC, 0xF6C1, 0x9DAD, 0xF6C4, 0x9DAF, 0xC561, 0x9DB1, 0xF6C3, - 0x9DB2, 0xF6C8, 0x9DB3, 0xF6C6, 0x9DB4, 0xC562, 0x9DB5, 0xF6BD, - 0x9DB6, 0xF6B3, 0x9DB7, 0xF6B2, 0x9DB8, 0xC564, 0x9DB9, 0xF6BF, - 0x9DBA, 0xF6C0, 0x9DBB, 0xF6BC, 0x9DBC, 0xF6B4, 0x9DBE, 0xF6B9, - 0x9DBF, 0xF5AC, 0x9DC1, 0xF6B5, 0x9DC2, 0xC563, 0x9DC3, 0xF6BB, - 0x9DC5, 0xF6BA, 0x9DC7, 0xF6B6, 0x9DC8, 0xF6C2, 0x9DCA, 0xF6B7, - 0x9DCB, 0xF7BB, 0x9DCC, 0xF6C5, 0x9DCD, 0xF6C7, 0x9DCE, 0xF6BE, - 0x9DCF, 0xF6B8, 0x9DD0, 0xF7BC, 0x9DD1, 0xF7BE, 0x9DD2, 0xF7B8, - 0x9DD3, 0xC5C2, 0x9DD5, 0xF7C5, 0x9DD6, 0xF7C3, 0x9DD7, 0xC5C3, - 0x9DD8, 0xF7C2, 0x9DD9, 0xF7C1, 0x9DDA, 0xF7BA, 0x9DDB, 0xF7B7, - 0x9DDC, 0xF7BD, 0x9DDD, 0xF7C6, 0x9DDE, 0xF7B9, 0x9DDF, 0xF7BF, - 0x9DE1, 0xF869, 0x9DE2, 0xF86E, 0x9DE3, 0xF864, 0x9DE4, 0xF867, - 0x9DE5, 0xC5EE, 0x9DE6, 0xF86B, 0x9DE8, 0xF872, 0x9DE9, 0xF7C0, - 0x9DEB, 0xF865, 0x9DEC, 0xF86F, 0x9DED, 0xF873, 0x9DEE, 0xF86A, - 0x9DEF, 0xF863, 0x9DF0, 0xF86D, 0x9DF2, 0xF86C, 0x9DF3, 0xF871, - 0x9DF4, 0xF870, 0x9DF5, 0xF7C4, 0x9DF6, 0xF868, 0x9DF7, 0xF862, - 0x9DF8, 0xF866, 0x9DF9, 0xC64E, 0x9DFA, 0xC64F, 0x9DFB, 0xF861, - 0x9DFD, 0xF8E6, 0x9DFE, 0xF8DD, 0x9DFF, 0xF8E5, 0x9E00, 0xF8E2, - 0x9E01, 0xF8E3, 0x9E02, 0xF8DC, 0x9E03, 0xF8DF, 0x9E04, 0xF8E7, - 0x9E05, 0xF8E1, 0x9E06, 0xF8E0, 0x9E07, 0xF8DE, 0x9E09, 0xF8E4, - 0x9E0B, 0xF95D, 0x9E0D, 0xF95E, 0x9E0F, 0xF960, 0x9E10, 0xF95F, - 0x9E11, 0xF962, 0x9E12, 0xF961, 0x9E13, 0xF97C, 0x9E14, 0xF97B, - 0x9E15, 0xF9B7, 0x9E17, 0xF9B8, 0x9E19, 0xF9C5, 0x9E1A, 0xC678, - 0x9E1B, 0xC67C, 0x9E1D, 0xF9CF, 0x9E1E, 0xC67D, 0x9E75, 0xB3BF, - 0x9E79, 0xC4D0, 0x9E7A, 0xF6C9, 0x9E7C, 0xC650, 0x9E7D, 0xC651, - 0x9E7F, 0xB3C0, 0x9E80, 0xE0EE, 0x9E82, 0xB9A8, 0x9E83, 0xE8F0, - 0x9E86, 0xECB0, 0x9E87, 0xECB1, 0x9E88, 0xECAF, 0x9E89, 0xEFAB, - 0x9E8A, 0xEFAA, 0x9E8B, 0xC247, 0x9E8C, 0xF1DF, 0x9E8D, 0xEFAC, - 0x9E8E, 0xF1DE, 0x9E91, 0xF3F3, 0x9E92, 0xC451, 0x9E93, 0xC453, - 0x9E94, 0xF3F2, 0x9E97, 0xC452, 0x9E99, 0xF5B1, 0x9E9A, 0xF5B3, - 0x9E9B, 0xF5B2, 0x9E9C, 0xF6CA, 0x9E9D, 0xC565, 0x9E9F, 0xC5EF, - 0x9EA0, 0xF8E8, 0x9EA1, 0xF963, 0x9EA4, 0xF9D2, 0x9EA5, 0xB3C1, - 0x9EA7, 0xE4E5, 0x9EA9, 0xBEA2, 0x9EAD, 0xECB3, 0x9EAE, 0xECB2, - 0x9EB0, 0xEFAD, 0x9EB4, 0xC454, 0x9EB5, 0xC4D1, 0x9EB6, 0xF7C7, - 0x9EB7, 0xF9CB, 0x9EBB, 0xB3C2, 0x9EBC, 0xBBF2, 0x9EBE, 0xBEA3, - 0x9EC0, 0xF3F4, 0x9EC2, 0xF874, 0x9EC3, 0xB6C0, 0x9EC8, 0xEFAE, - 0x9ECC, 0xC664, 0x9ECD, 0xB6C1, 0x9ECE, 0xBEA4, 0x9ECF, 0xC248, - 0x9ED0, 0xF875, 0x9ED1, 0xB6C2, 0x9ED3, 0xE8F1, 0x9ED4, 0xC072, - 0x9ED5, 0xECB4, 0x9ED6, 0xECB5, 0x9ED8, 0xC071, 0x9EDA, 0xEFAF, - 0x9EDB, 0xC24C, 0x9EDC, 0xC24A, 0x9EDD, 0xC24B, 0x9EDE, 0xC249, - 0x9EDF, 0xF1E0, 0x9EE0, 0xC35C, 0x9EE4, 0xF5B5, 0x9EE5, 0xF5B4, - 0x9EE6, 0xF5B7, 0x9EE7, 0xF5B6, 0x9EE8, 0xC4D2, 0x9EEB, 0xF6CB, - 0x9EED, 0xF6CD, 0x9EEE, 0xF6CC, 0x9EEF, 0xC566, 0x9EF0, 0xF7C8, - 0x9EF2, 0xF876, 0x9EF3, 0xF877, 0x9EF4, 0xC5F0, 0x9EF5, 0xF964, - 0x9EF6, 0xF97D, 0x9EF7, 0xC675, 0x9EF9, 0xDCB0, 0x9EFA, 0xECB6, - 0x9EFB, 0xEFB0, 0x9EFC, 0xF3F5, 0x9EFD, 0xE0EF, 0x9EFF, 0xEFB1, - 0x9F00, 0xF1E2, 0x9F01, 0xF1E1, 0x9F06, 0xF878, 0x9F07, 0xC652, - 0x9F09, 0xF965, 0x9F0A, 0xF97E, 0x9F0E, 0xB9A9, 0x9F0F, 0xE8F2, - 0x9F10, 0xE8F3, 0x9F12, 0xECB7, 0x9F13, 0xB9AA, 0x9F15, 0xC35D, - 0x9F16, 0xF1E3, 0x9F18, 0xF6CF, 0x9F19, 0xC567, 0x9F1A, 0xF6D0, - 0x9F1B, 0xF6CE, 0x9F1C, 0xF879, 0x9F1E, 0xF8E9, 0x9F20, 0xB9AB, - 0x9F22, 0xEFB4, 0x9F23, 0xEFB3, 0x9F24, 0xEFB2, 0x9F25, 0xF1E4, - 0x9F28, 0xF1E8, 0x9F29, 0xF1E7, 0x9F2A, 0xF1E6, 0x9F2B, 0xF1E5, - 0x9F2C, 0xC35E, 0x9F2D, 0xF3F6, 0x9F2E, 0xF5B9, 0x9F2F, 0xC4D3, - 0x9F30, 0xF5B8, 0x9F31, 0xF6D1, 0x9F32, 0xF7CB, 0x9F33, 0xF7CA, - 0x9F34, 0xC5C4, 0x9F35, 0xF7C9, 0x9F36, 0xF87C, 0x9F37, 0xF87B, - 0x9F38, 0xF87A, 0x9F3B, 0xBBF3, 0x9F3D, 0xECB8, 0x9F3E, 0xC24D, - 0x9F40, 0xF3F7, 0x9F41, 0xF3F8, 0x9F42, 0xF7CC, 0x9F43, 0xF87D, - 0x9F46, 0xF8EA, 0x9F47, 0xF966, 0x9F48, 0xF9B9, 0x9F49, 0xF9D4, - 0x9F4A, 0xBBF4, 0x9F4B, 0xC24E, 0x9F4C, 0xF1E9, 0x9F4D, 0xF3F9, - 0x9F4E, 0xF6D2, 0x9F4F, 0xF87E, 0x9F52, 0xBEA6, 0x9F54, 0xEFB5, - 0x9F55, 0xF1EA, 0x9F56, 0xF3FA, 0x9F57, 0xF3FB, 0x9F58, 0xF3FC, - 0x9F59, 0xF5BE, 0x9F5B, 0xF5BA, 0x9F5C, 0xC568, 0x9F5D, 0xF5BD, - 0x9F5E, 0xF5BC, 0x9F5F, 0xC4D4, 0x9F60, 0xF5BB, 0x9F61, 0xC4D6, - 0x9F63, 0xC4D5, 0x9F64, 0xF6D4, 0x9F65, 0xF6D3, 0x9F66, 0xC569, - 0x9F67, 0xC56A, 0x9F6A, 0xC5C6, 0x9F6B, 0xF7CD, 0x9F6C, 0xC5C5, - 0x9F6E, 0xF8A3, 0x9F6F, 0xF8A4, 0x9F70, 0xF8A2, 0x9F71, 0xF8A1, - 0x9F72, 0xC654, 0x9F74, 0xF8EB, 0x9F75, 0xF8EC, 0x9F76, 0xF8ED, - 0x9F77, 0xC653, 0x9F78, 0xF967, 0x9F79, 0xF96A, 0x9F7A, 0xF969, - 0x9F7B, 0xF968, 0x9F7E, 0xF9D3, 0x9F8D, 0xC073, 0x9F90, 0xC365, - 0x9F91, 0xF5BF, 0x9F92, 0xF6D5, 0x9F94, 0xC5C7, 0x9F95, 0xF7CE, - 0x9F98, 0xF9D5, 0x9F9C, 0xC074, 0x9FA0, 0xEFB6, 0x9FA2, 0xF7CF, - 0x9FA4, 0xF9A1, 0xFA0C, 0xC94A, 0xFA0D, 0xDDFC, 0xFE30, 0xA14A, - 0xFE31, 0xA157, 0xFE33, 0xA159, 0xFE34, 0xA15B, 0xFE35, 0xA15F, - 0xFE36, 0xA160, 0xFE37, 0xA163, 0xFE38, 0xA164, 0xFE39, 0xA167, - 0xFE3A, 0xA168, 0xFE3B, 0xA16B, 0xFE3C, 0xA16C, 0xFE3D, 0xA16F, - 0xFE3E, 0xA170, 0xFE3F, 0xA173, 0xFE40, 0xA174, 0xFE41, 0xA177, - 0xFE42, 0xA178, 0xFE43, 0xA17B, 0xFE44, 0xA17C, 0xFE49, 0xA1C6, - 0xFE4A, 0xA1C7, 0xFE4B, 0xA1CA, 0xFE4C, 0xA1CB, 0xFE4D, 0xA1C8, - 0xFE4E, 0xA1C9, 0xFE4F, 0xA15C, 0xFE50, 0xA14D, 0xFE51, 0xA14E, - 0xFE52, 0xA14F, 0xFE54, 0xA151, 0xFE55, 0xA152, 0xFE56, 0xA153, - 0xFE57, 0xA154, 0xFE59, 0xA17D, 0xFE5A, 0xA17E, 0xFE5B, 0xA1A1, - 0xFE5C, 0xA1A2, 0xFE5D, 0xA1A3, 0xFE5E, 0xA1A4, 0xFE5F, 0xA1CC, - 0xFE60, 0xA1CD, 0xFE61, 0xA1CE, 0xFE62, 0xA1DE, 0xFE63, 0xA1DF, - 0xFE64, 0xA1E0, 0xFE65, 0xA1E1, 0xFE66, 0xA1E2, 0xFE68, 0xA242, - 0xFE69, 0xA24C, 0xFE6A, 0xA24D, 0xFE6B, 0xA24E, 0xFF01, 0xA149, - 0xFF03, 0xA1AD, 0xFF04, 0xA243, 0xFF05, 0xA248, 0xFF06, 0xA1AE, - 0xFF08, 0xA15D, 0xFF09, 0xA15E, 0xFF0A, 0xA1AF, 0xFF0B, 0xA1CF, - 0xFF0C, 0xA141, 0xFF0D, 0xA1D0, 0xFF0E, 0xA144, 0xFF0F, 0xA1FE, - 0xFF10, 0xA2AF, 0xFF11, 0xA2B0, 0xFF12, 0xA2B1, 0xFF13, 0xA2B2, - 0xFF14, 0xA2B3, 0xFF15, 0xA2B4, 0xFF16, 0xA2B5, 0xFF17, 0xA2B6, - 0xFF18, 0xA2B7, 0xFF19, 0xA2B8, 0xFF1A, 0xA147, 0xFF1B, 0xA146, - 0xFF1C, 0xA1D5, 0xFF1D, 0xA1D7, 0xFF1E, 0xA1D6, 0xFF1F, 0xA148, - 0xFF20, 0xA249, 0xFF21, 0xA2CF, 0xFF22, 0xA2D0, 0xFF23, 0xA2D1, - 0xFF24, 0xA2D2, 0xFF25, 0xA2D3, 0xFF26, 0xA2D4, 0xFF27, 0xA2D5, - 0xFF28, 0xA2D6, 0xFF29, 0xA2D7, 0xFF2A, 0xA2D8, 0xFF2B, 0xA2D9, - 0xFF2C, 0xA2DA, 0xFF2D, 0xA2DB, 0xFF2E, 0xA2DC, 0xFF2F, 0xA2DD, - 0xFF30, 0xA2DE, 0xFF31, 0xA2DF, 0xFF32, 0xA2E0, 0xFF33, 0xA2E1, - 0xFF34, 0xA2E2, 0xFF35, 0xA2E3, 0xFF36, 0xA2E4, 0xFF37, 0xA2E5, - 0xFF38, 0xA2E6, 0xFF39, 0xA2E7, 0xFF3A, 0xA2E8, 0xFF3C, 0xA240, - 0xFF3F, 0xA1C4, 0xFF41, 0xA2E9, 0xFF42, 0xA2EA, 0xFF43, 0xA2EB, - 0xFF44, 0xA2EC, 0xFF45, 0xA2ED, 0xFF46, 0xA2EE, 0xFF47, 0xA2EF, - 0xFF48, 0xA2F0, 0xFF49, 0xA2F1, 0xFF4A, 0xA2F2, 0xFF4B, 0xA2F3, - 0xFF4C, 0xA2F4, 0xFF4D, 0xA2F5, 0xFF4E, 0xA2F6, 0xFF4F, 0xA2F7, - 0xFF50, 0xA2F8, 0xFF51, 0xA2F9, 0xFF52, 0xA2FA, 0xFF53, 0xA2FB, - 0xFF54, 0xA2FC, 0xFF55, 0xA2FD, 0xFF56, 0xA2FE, 0xFF57, 0xA340, - 0xFF58, 0xA341, 0xFF59, 0xA342, 0xFF5A, 0xA343, 0xFF5B, 0xA161, - 0xFF5C, 0xA155, 0xFF5D, 0xA162, 0xFF5E, 0xA1E3, 0xFFE0, 0xA246, - 0xFFE1, 0xA247, 0xFFE3, 0xA1C3, 0xFFE5, 0xA244, 0, 0 -}; - -static -const WCHAR oem2uni[] = { -/* OEM - Unicode, OEM - Unicode, OEM - Unicode, OEM - Unicode */ - 0xA140, 0x3000, 0xA141, 0xFF0C, 0xA142, 0x3001, 0xA143, 0x3002, - 0xA144, 0xFF0E, 0xA145, 0x2027, 0xA146, 0xFF1B, 0xA147, 0xFF1A, - 0xA148, 0xFF1F, 0xA149, 0xFF01, 0xA14A, 0xFE30, 0xA14B, 0x2026, - 0xA14C, 0x2025, 0xA14D, 0xFE50, 0xA14E, 0xFE51, 0xA14F, 0xFE52, - 0xA150, 0x00B7, 0xA151, 0xFE54, 0xA152, 0xFE55, 0xA153, 0xFE56, - 0xA154, 0xFE57, 0xA155, 0xFF5C, 0xA156, 0x2013, 0xA157, 0xFE31, - 0xA158, 0x2014, 0xA159, 0xFE33, 0xA15A, 0x2574, 0xA15B, 0xFE34, - 0xA15C, 0xFE4F, 0xA15D, 0xFF08, 0xA15E, 0xFF09, 0xA15F, 0xFE35, - 0xA160, 0xFE36, 0xA161, 0xFF5B, 0xA162, 0xFF5D, 0xA163, 0xFE37, - 0xA164, 0xFE38, 0xA165, 0x3014, 0xA166, 0x3015, 0xA167, 0xFE39, - 0xA168, 0xFE3A, 0xA169, 0x3010, 0xA16A, 0x3011, 0xA16B, 0xFE3B, - 0xA16C, 0xFE3C, 0xA16D, 0x300A, 0xA16E, 0x300B, 0xA16F, 0xFE3D, - 0xA170, 0xFE3E, 0xA171, 0x3008, 0xA172, 0x3009, 0xA173, 0xFE3F, - 0xA174, 0xFE40, 0xA175, 0x300C, 0xA176, 0x300D, 0xA177, 0xFE41, - 0xA178, 0xFE42, 0xA179, 0x300E, 0xA17A, 0x300F, 0xA17B, 0xFE43, - 0xA17C, 0xFE44, 0xA17D, 0xFE59, 0xA17E, 0xFE5A, 0xA1A1, 0xFE5B, - 0xA1A2, 0xFE5C, 0xA1A3, 0xFE5D, 0xA1A4, 0xFE5E, 0xA1A5, 0x2018, - 0xA1A6, 0x2019, 0xA1A7, 0x201C, 0xA1A8, 0x201D, 0xA1A9, 0x301D, - 0xA1AA, 0x301E, 0xA1AB, 0x2035, 0xA1AC, 0x2032, 0xA1AD, 0xFF03, - 0xA1AE, 0xFF06, 0xA1AF, 0xFF0A, 0xA1B0, 0x203B, 0xA1B1, 0x00A7, - 0xA1B2, 0x3003, 0xA1B3, 0x25CB, 0xA1B4, 0x25CF, 0xA1B5, 0x25B3, - 0xA1B6, 0x25B2, 0xA1B7, 0x25CE, 0xA1B8, 0x2606, 0xA1B9, 0x2605, - 0xA1BA, 0x25C7, 0xA1BB, 0x25C6, 0xA1BC, 0x25A1, 0xA1BD, 0x25A0, - 0xA1BE, 0x25BD, 0xA1BF, 0x25BC, 0xA1C0, 0x32A3, 0xA1C1, 0x2105, - 0xA1C2, 0x00AF, 0xA1C3, 0xFFE3, 0xA1C4, 0xFF3F, 0xA1C5, 0x02CD, - 0xA1C6, 0xFE49, 0xA1C7, 0xFE4A, 0xA1C8, 0xFE4D, 0xA1C9, 0xFE4E, - 0xA1CA, 0xFE4B, 0xA1CB, 0xFE4C, 0xA1CC, 0xFE5F, 0xA1CD, 0xFE60, - 0xA1CE, 0xFE61, 0xA1CF, 0xFF0B, 0xA1D0, 0xFF0D, 0xA1D1, 0x00D7, - 0xA1D2, 0x00F7, 0xA1D3, 0x00B1, 0xA1D4, 0x221A, 0xA1D5, 0xFF1C, - 0xA1D6, 0xFF1E, 0xA1D7, 0xFF1D, 0xA1D8, 0x2266, 0xA1D9, 0x2267, - 0xA1DA, 0x2260, 0xA1DB, 0x221E, 0xA1DC, 0x2252, 0xA1DD, 0x2261, - 0xA1DE, 0xFE62, 0xA1DF, 0xFE63, 0xA1E0, 0xFE64, 0xA1E1, 0xFE65, - 0xA1E2, 0xFE66, 0xA1E3, 0xFF5E, 0xA1E4, 0x2229, 0xA1E5, 0x222A, - 0xA1E6, 0x22A5, 0xA1E7, 0x2220, 0xA1E8, 0x221F, 0xA1E9, 0x22BF, - 0xA1EA, 0x33D2, 0xA1EB, 0x33D1, 0xA1EC, 0x222B, 0xA1ED, 0x222E, - 0xA1EE, 0x2235, 0xA1EF, 0x2234, 0xA1F0, 0x2640, 0xA1F1, 0x2642, - 0xA1F2, 0x2295, 0xA1F3, 0x2299, 0xA1F4, 0x2191, 0xA1F5, 0x2193, - 0xA1F6, 0x2190, 0xA1F7, 0x2192, 0xA1F8, 0x2196, 0xA1F9, 0x2197, - 0xA1FA, 0x2199, 0xA1FB, 0x2198, 0xA1FC, 0x2225, 0xA1FD, 0x2223, - 0xA1FE, 0xFF0F, 0xA240, 0xFF3C, 0xA241, 0x2215, 0xA242, 0xFE68, - 0xA243, 0xFF04, 0xA244, 0xFFE5, 0xA245, 0x3012, 0xA246, 0xFFE0, - 0xA247, 0xFFE1, 0xA248, 0xFF05, 0xA249, 0xFF20, 0xA24A, 0x2103, - 0xA24B, 0x2109, 0xA24C, 0xFE69, 0xA24D, 0xFE6A, 0xA24E, 0xFE6B, - 0xA24F, 0x33D5, 0xA250, 0x339C, 0xA251, 0x339D, 0xA252, 0x339E, - 0xA253, 0x33CE, 0xA254, 0x33A1, 0xA255, 0x338E, 0xA256, 0x338F, - 0xA257, 0x33C4, 0xA258, 0x00B0, 0xA259, 0x5159, 0xA25A, 0x515B, - 0xA25B, 0x515E, 0xA25C, 0x515D, 0xA25D, 0x5161, 0xA25E, 0x5163, - 0xA25F, 0x55E7, 0xA260, 0x74E9, 0xA261, 0x7CCE, 0xA262, 0x2581, - 0xA263, 0x2582, 0xA264, 0x2583, 0xA265, 0x2584, 0xA266, 0x2585, - 0xA267, 0x2586, 0xA268, 0x2587, 0xA269, 0x2588, 0xA26A, 0x258F, - 0xA26B, 0x258E, 0xA26C, 0x258D, 0xA26D, 0x258C, 0xA26E, 0x258B, - 0xA26F, 0x258A, 0xA270, 0x2589, 0xA271, 0x253C, 0xA272, 0x2534, - 0xA273, 0x252C, 0xA274, 0x2524, 0xA275, 0x251C, 0xA276, 0x2594, - 0xA277, 0x2500, 0xA278, 0x2502, 0xA279, 0x2595, 0xA27A, 0x250C, - 0xA27B, 0x2510, 0xA27C, 0x2514, 0xA27D, 0x2518, 0xA27E, 0x256D, - 0xA2A1, 0x256E, 0xA2A2, 0x2570, 0xA2A3, 0x256F, 0xA2A4, 0x2550, - 0xA2A5, 0x255E, 0xA2A6, 0x256A, 0xA2A7, 0x2561, 0xA2A8, 0x25E2, - 0xA2A9, 0x25E3, 0xA2AA, 0x25E5, 0xA2AB, 0x25E4, 0xA2AC, 0x2571, - 0xA2AD, 0x2572, 0xA2AE, 0x2573, 0xA2AF, 0xFF10, 0xA2B0, 0xFF11, - 0xA2B1, 0xFF12, 0xA2B2, 0xFF13, 0xA2B3, 0xFF14, 0xA2B4, 0xFF15, - 0xA2B5, 0xFF16, 0xA2B6, 0xFF17, 0xA2B7, 0xFF18, 0xA2B8, 0xFF19, - 0xA2B9, 0x2160, 0xA2BA, 0x2161, 0xA2BB, 0x2162, 0xA2BC, 0x2163, - 0xA2BD, 0x2164, 0xA2BE, 0x2165, 0xA2BF, 0x2166, 0xA2C0, 0x2167, - 0xA2C1, 0x2168, 0xA2C2, 0x2169, 0xA2C3, 0x3021, 0xA2C4, 0x3022, - 0xA2C5, 0x3023, 0xA2C6, 0x3024, 0xA2C7, 0x3025, 0xA2C8, 0x3026, - 0xA2C9, 0x3027, 0xA2CA, 0x3028, 0xA2CB, 0x3029, 0xA2CC, 0x5341, - 0xA2CD, 0x5344, 0xA2CE, 0x5345, 0xA2CF, 0xFF21, 0xA2D0, 0xFF22, - 0xA2D1, 0xFF23, 0xA2D2, 0xFF24, 0xA2D3, 0xFF25, 0xA2D4, 0xFF26, - 0xA2D5, 0xFF27, 0xA2D6, 0xFF28, 0xA2D7, 0xFF29, 0xA2D8, 0xFF2A, - 0xA2D9, 0xFF2B, 0xA2DA, 0xFF2C, 0xA2DB, 0xFF2D, 0xA2DC, 0xFF2E, - 0xA2DD, 0xFF2F, 0xA2DE, 0xFF30, 0xA2DF, 0xFF31, 0xA2E0, 0xFF32, - 0xA2E1, 0xFF33, 0xA2E2, 0xFF34, 0xA2E3, 0xFF35, 0xA2E4, 0xFF36, - 0xA2E5, 0xFF37, 0xA2E6, 0xFF38, 0xA2E7, 0xFF39, 0xA2E8, 0xFF3A, - 0xA2E9, 0xFF41, 0xA2EA, 0xFF42, 0xA2EB, 0xFF43, 0xA2EC, 0xFF44, - 0xA2ED, 0xFF45, 0xA2EE, 0xFF46, 0xA2EF, 0xFF47, 0xA2F0, 0xFF48, - 0xA2F1, 0xFF49, 0xA2F2, 0xFF4A, 0xA2F3, 0xFF4B, 0xA2F4, 0xFF4C, - 0xA2F5, 0xFF4D, 0xA2F6, 0xFF4E, 0xA2F7, 0xFF4F, 0xA2F8, 0xFF50, - 0xA2F9, 0xFF51, 0xA2FA, 0xFF52, 0xA2FB, 0xFF53, 0xA2FC, 0xFF54, - 0xA2FD, 0xFF55, 0xA2FE, 0xFF56, 0xA340, 0xFF57, 0xA341, 0xFF58, - 0xA342, 0xFF59, 0xA343, 0xFF5A, 0xA344, 0x0391, 0xA345, 0x0392, - 0xA346, 0x0393, 0xA347, 0x0394, 0xA348, 0x0395, 0xA349, 0x0396, - 0xA34A, 0x0397, 0xA34B, 0x0398, 0xA34C, 0x0399, 0xA34D, 0x039A, - 0xA34E, 0x039B, 0xA34F, 0x039C, 0xA350, 0x039D, 0xA351, 0x039E, - 0xA352, 0x039F, 0xA353, 0x03A0, 0xA354, 0x03A1, 0xA355, 0x03A3, - 0xA356, 0x03A4, 0xA357, 0x03A5, 0xA358, 0x03A6, 0xA359, 0x03A7, - 0xA35A, 0x03A8, 0xA35B, 0x03A9, 0xA35C, 0x03B1, 0xA35D, 0x03B2, - 0xA35E, 0x03B3, 0xA35F, 0x03B4, 0xA360, 0x03B5, 0xA361, 0x03B6, - 0xA362, 0x03B7, 0xA363, 0x03B8, 0xA364, 0x03B9, 0xA365, 0x03BA, - 0xA366, 0x03BB, 0xA367, 0x03BC, 0xA368, 0x03BD, 0xA369, 0x03BE, - 0xA36A, 0x03BF, 0xA36B, 0x03C0, 0xA36C, 0x03C1, 0xA36D, 0x03C3, - 0xA36E, 0x03C4, 0xA36F, 0x03C5, 0xA370, 0x03C6, 0xA371, 0x03C7, - 0xA372, 0x03C8, 0xA373, 0x03C9, 0xA374, 0x3105, 0xA375, 0x3106, - 0xA376, 0x3107, 0xA377, 0x3108, 0xA378, 0x3109, 0xA379, 0x310A, - 0xA37A, 0x310B, 0xA37B, 0x310C, 0xA37C, 0x310D, 0xA37D, 0x310E, - 0xA37E, 0x310F, 0xA3A1, 0x3110, 0xA3A2, 0x3111, 0xA3A3, 0x3112, - 0xA3A4, 0x3113, 0xA3A5, 0x3114, 0xA3A6, 0x3115, 0xA3A7, 0x3116, - 0xA3A8, 0x3117, 0xA3A9, 0x3118, 0xA3AA, 0x3119, 0xA3AB, 0x311A, - 0xA3AC, 0x311B, 0xA3AD, 0x311C, 0xA3AE, 0x311D, 0xA3AF, 0x311E, - 0xA3B0, 0x311F, 0xA3B1, 0x3120, 0xA3B2, 0x3121, 0xA3B3, 0x3122, - 0xA3B4, 0x3123, 0xA3B5, 0x3124, 0xA3B6, 0x3125, 0xA3B7, 0x3126, - 0xA3B8, 0x3127, 0xA3B9, 0x3128, 0xA3BA, 0x3129, 0xA3BB, 0x02D9, - 0xA3BC, 0x02C9, 0xA3BD, 0x02CA, 0xA3BE, 0x02C7, 0xA3BF, 0x02CB, - 0xA3E1, 0x20AC, 0xA440, 0x4E00, 0xA441, 0x4E59, 0xA442, 0x4E01, - 0xA443, 0x4E03, 0xA444, 0x4E43, 0xA445, 0x4E5D, 0xA446, 0x4E86, - 0xA447, 0x4E8C, 0xA448, 0x4EBA, 0xA449, 0x513F, 0xA44A, 0x5165, - 0xA44B, 0x516B, 0xA44C, 0x51E0, 0xA44D, 0x5200, 0xA44E, 0x5201, - 0xA44F, 0x529B, 0xA450, 0x5315, 0xA451, 0x5341, 0xA452, 0x535C, - 0xA453, 0x53C8, 0xA454, 0x4E09, 0xA455, 0x4E0B, 0xA456, 0x4E08, - 0xA457, 0x4E0A, 0xA458, 0x4E2B, 0xA459, 0x4E38, 0xA45A, 0x51E1, - 0xA45B, 0x4E45, 0xA45C, 0x4E48, 0xA45D, 0x4E5F, 0xA45E, 0x4E5E, - 0xA45F, 0x4E8E, 0xA460, 0x4EA1, 0xA461, 0x5140, 0xA462, 0x5203, - 0xA463, 0x52FA, 0xA464, 0x5343, 0xA465, 0x53C9, 0xA466, 0x53E3, - 0xA467, 0x571F, 0xA468, 0x58EB, 0xA469, 0x5915, 0xA46A, 0x5927, - 0xA46B, 0x5973, 0xA46C, 0x5B50, 0xA46D, 0x5B51, 0xA46E, 0x5B53, - 0xA46F, 0x5BF8, 0xA470, 0x5C0F, 0xA471, 0x5C22, 0xA472, 0x5C38, - 0xA473, 0x5C71, 0xA474, 0x5DDD, 0xA475, 0x5DE5, 0xA476, 0x5DF1, - 0xA477, 0x5DF2, 0xA478, 0x5DF3, 0xA479, 0x5DFE, 0xA47A, 0x5E72, - 0xA47B, 0x5EFE, 0xA47C, 0x5F0B, 0xA47D, 0x5F13, 0xA47E, 0x624D, - 0xA4A1, 0x4E11, 0xA4A2, 0x4E10, 0xA4A3, 0x4E0D, 0xA4A4, 0x4E2D, - 0xA4A5, 0x4E30, 0xA4A6, 0x4E39, 0xA4A7, 0x4E4B, 0xA4A8, 0x5C39, - 0xA4A9, 0x4E88, 0xA4AA, 0x4E91, 0xA4AB, 0x4E95, 0xA4AC, 0x4E92, - 0xA4AD, 0x4E94, 0xA4AE, 0x4EA2, 0xA4AF, 0x4EC1, 0xA4B0, 0x4EC0, - 0xA4B1, 0x4EC3, 0xA4B2, 0x4EC6, 0xA4B3, 0x4EC7, 0xA4B4, 0x4ECD, - 0xA4B5, 0x4ECA, 0xA4B6, 0x4ECB, 0xA4B7, 0x4EC4, 0xA4B8, 0x5143, - 0xA4B9, 0x5141, 0xA4BA, 0x5167, 0xA4BB, 0x516D, 0xA4BC, 0x516E, - 0xA4BD, 0x516C, 0xA4BE, 0x5197, 0xA4BF, 0x51F6, 0xA4C0, 0x5206, - 0xA4C1, 0x5207, 0xA4C2, 0x5208, 0xA4C3, 0x52FB, 0xA4C4, 0x52FE, - 0xA4C5, 0x52FF, 0xA4C6, 0x5316, 0xA4C7, 0x5339, 0xA4C8, 0x5348, - 0xA4C9, 0x5347, 0xA4CA, 0x5345, 0xA4CB, 0x535E, 0xA4CC, 0x5384, - 0xA4CD, 0x53CB, 0xA4CE, 0x53CA, 0xA4CF, 0x53CD, 0xA4D0, 0x58EC, - 0xA4D1, 0x5929, 0xA4D2, 0x592B, 0xA4D3, 0x592A, 0xA4D4, 0x592D, - 0xA4D5, 0x5B54, 0xA4D6, 0x5C11, 0xA4D7, 0x5C24, 0xA4D8, 0x5C3A, - 0xA4D9, 0x5C6F, 0xA4DA, 0x5DF4, 0xA4DB, 0x5E7B, 0xA4DC, 0x5EFF, - 0xA4DD, 0x5F14, 0xA4DE, 0x5F15, 0xA4DF, 0x5FC3, 0xA4E0, 0x6208, - 0xA4E1, 0x6236, 0xA4E2, 0x624B, 0xA4E3, 0x624E, 0xA4E4, 0x652F, - 0xA4E5, 0x6587, 0xA4E6, 0x6597, 0xA4E7, 0x65A4, 0xA4E8, 0x65B9, - 0xA4E9, 0x65E5, 0xA4EA, 0x66F0, 0xA4EB, 0x6708, 0xA4EC, 0x6728, - 0xA4ED, 0x6B20, 0xA4EE, 0x6B62, 0xA4EF, 0x6B79, 0xA4F0, 0x6BCB, - 0xA4F1, 0x6BD4, 0xA4F2, 0x6BDB, 0xA4F3, 0x6C0F, 0xA4F4, 0x6C34, - 0xA4F5, 0x706B, 0xA4F6, 0x722A, 0xA4F7, 0x7236, 0xA4F8, 0x723B, - 0xA4F9, 0x7247, 0xA4FA, 0x7259, 0xA4FB, 0x725B, 0xA4FC, 0x72AC, - 0xA4FD, 0x738B, 0xA4FE, 0x4E19, 0xA540, 0x4E16, 0xA541, 0x4E15, - 0xA542, 0x4E14, 0xA543, 0x4E18, 0xA544, 0x4E3B, 0xA545, 0x4E4D, - 0xA546, 0x4E4F, 0xA547, 0x4E4E, 0xA548, 0x4EE5, 0xA549, 0x4ED8, - 0xA54A, 0x4ED4, 0xA54B, 0x4ED5, 0xA54C, 0x4ED6, 0xA54D, 0x4ED7, - 0xA54E, 0x4EE3, 0xA54F, 0x4EE4, 0xA550, 0x4ED9, 0xA551, 0x4EDE, - 0xA552, 0x5145, 0xA553, 0x5144, 0xA554, 0x5189, 0xA555, 0x518A, - 0xA556, 0x51AC, 0xA557, 0x51F9, 0xA558, 0x51FA, 0xA559, 0x51F8, - 0xA55A, 0x520A, 0xA55B, 0x52A0, 0xA55C, 0x529F, 0xA55D, 0x5305, - 0xA55E, 0x5306, 0xA55F, 0x5317, 0xA560, 0x531D, 0xA561, 0x4EDF, - 0xA562, 0x534A, 0xA563, 0x5349, 0xA564, 0x5361, 0xA565, 0x5360, - 0xA566, 0x536F, 0xA567, 0x536E, 0xA568, 0x53BB, 0xA569, 0x53EF, - 0xA56A, 0x53E4, 0xA56B, 0x53F3, 0xA56C, 0x53EC, 0xA56D, 0x53EE, - 0xA56E, 0x53E9, 0xA56F, 0x53E8, 0xA570, 0x53FC, 0xA571, 0x53F8, - 0xA572, 0x53F5, 0xA573, 0x53EB, 0xA574, 0x53E6, 0xA575, 0x53EA, - 0xA576, 0x53F2, 0xA577, 0x53F1, 0xA578, 0x53F0, 0xA579, 0x53E5, - 0xA57A, 0x53ED, 0xA57B, 0x53FB, 0xA57C, 0x56DB, 0xA57D, 0x56DA, - 0xA57E, 0x5916, 0xA5A1, 0x592E, 0xA5A2, 0x5931, 0xA5A3, 0x5974, - 0xA5A4, 0x5976, 0xA5A5, 0x5B55, 0xA5A6, 0x5B83, 0xA5A7, 0x5C3C, - 0xA5A8, 0x5DE8, 0xA5A9, 0x5DE7, 0xA5AA, 0x5DE6, 0xA5AB, 0x5E02, - 0xA5AC, 0x5E03, 0xA5AD, 0x5E73, 0xA5AE, 0x5E7C, 0xA5AF, 0x5F01, - 0xA5B0, 0x5F18, 0xA5B1, 0x5F17, 0xA5B2, 0x5FC5, 0xA5B3, 0x620A, - 0xA5B4, 0x6253, 0xA5B5, 0x6254, 0xA5B6, 0x6252, 0xA5B7, 0x6251, - 0xA5B8, 0x65A5, 0xA5B9, 0x65E6, 0xA5BA, 0x672E, 0xA5BB, 0x672C, - 0xA5BC, 0x672A, 0xA5BD, 0x672B, 0xA5BE, 0x672D, 0xA5BF, 0x6B63, - 0xA5C0, 0x6BCD, 0xA5C1, 0x6C11, 0xA5C2, 0x6C10, 0xA5C3, 0x6C38, - 0xA5C4, 0x6C41, 0xA5C5, 0x6C40, 0xA5C6, 0x6C3E, 0xA5C7, 0x72AF, - 0xA5C8, 0x7384, 0xA5C9, 0x7389, 0xA5CA, 0x74DC, 0xA5CB, 0x74E6, - 0xA5CC, 0x7518, 0xA5CD, 0x751F, 0xA5CE, 0x7528, 0xA5CF, 0x7529, - 0xA5D0, 0x7530, 0xA5D1, 0x7531, 0xA5D2, 0x7532, 0xA5D3, 0x7533, - 0xA5D4, 0x758B, 0xA5D5, 0x767D, 0xA5D6, 0x76AE, 0xA5D7, 0x76BF, - 0xA5D8, 0x76EE, 0xA5D9, 0x77DB, 0xA5DA, 0x77E2, 0xA5DB, 0x77F3, - 0xA5DC, 0x793A, 0xA5DD, 0x79BE, 0xA5DE, 0x7A74, 0xA5DF, 0x7ACB, - 0xA5E0, 0x4E1E, 0xA5E1, 0x4E1F, 0xA5E2, 0x4E52, 0xA5E3, 0x4E53, - 0xA5E4, 0x4E69, 0xA5E5, 0x4E99, 0xA5E6, 0x4EA4, 0xA5E7, 0x4EA6, - 0xA5E8, 0x4EA5, 0xA5E9, 0x4EFF, 0xA5EA, 0x4F09, 0xA5EB, 0x4F19, - 0xA5EC, 0x4F0A, 0xA5ED, 0x4F15, 0xA5EE, 0x4F0D, 0xA5EF, 0x4F10, - 0xA5F0, 0x4F11, 0xA5F1, 0x4F0F, 0xA5F2, 0x4EF2, 0xA5F3, 0x4EF6, - 0xA5F4, 0x4EFB, 0xA5F5, 0x4EF0, 0xA5F6, 0x4EF3, 0xA5F7, 0x4EFD, - 0xA5F8, 0x4F01, 0xA5F9, 0x4F0B, 0xA5FA, 0x5149, 0xA5FB, 0x5147, - 0xA5FC, 0x5146, 0xA5FD, 0x5148, 0xA5FE, 0x5168, 0xA640, 0x5171, - 0xA641, 0x518D, 0xA642, 0x51B0, 0xA643, 0x5217, 0xA644, 0x5211, - 0xA645, 0x5212, 0xA646, 0x520E, 0xA647, 0x5216, 0xA648, 0x52A3, - 0xA649, 0x5308, 0xA64A, 0x5321, 0xA64B, 0x5320, 0xA64C, 0x5370, - 0xA64D, 0x5371, 0xA64E, 0x5409, 0xA64F, 0x540F, 0xA650, 0x540C, - 0xA651, 0x540A, 0xA652, 0x5410, 0xA653, 0x5401, 0xA654, 0x540B, - 0xA655, 0x5404, 0xA656, 0x5411, 0xA657, 0x540D, 0xA658, 0x5408, - 0xA659, 0x5403, 0xA65A, 0x540E, 0xA65B, 0x5406, 0xA65C, 0x5412, - 0xA65D, 0x56E0, 0xA65E, 0x56DE, 0xA65F, 0x56DD, 0xA660, 0x5733, - 0xA661, 0x5730, 0xA662, 0x5728, 0xA663, 0x572D, 0xA664, 0x572C, - 0xA665, 0x572F, 0xA666, 0x5729, 0xA667, 0x5919, 0xA668, 0x591A, - 0xA669, 0x5937, 0xA66A, 0x5938, 0xA66B, 0x5984, 0xA66C, 0x5978, - 0xA66D, 0x5983, 0xA66E, 0x597D, 0xA66F, 0x5979, 0xA670, 0x5982, - 0xA671, 0x5981, 0xA672, 0x5B57, 0xA673, 0x5B58, 0xA674, 0x5B87, - 0xA675, 0x5B88, 0xA676, 0x5B85, 0xA677, 0x5B89, 0xA678, 0x5BFA, - 0xA679, 0x5C16, 0xA67A, 0x5C79, 0xA67B, 0x5DDE, 0xA67C, 0x5E06, - 0xA67D, 0x5E76, 0xA67E, 0x5E74, 0xA6A1, 0x5F0F, 0xA6A2, 0x5F1B, - 0xA6A3, 0x5FD9, 0xA6A4, 0x5FD6, 0xA6A5, 0x620E, 0xA6A6, 0x620C, - 0xA6A7, 0x620D, 0xA6A8, 0x6210, 0xA6A9, 0x6263, 0xA6AA, 0x625B, - 0xA6AB, 0x6258, 0xA6AC, 0x6536, 0xA6AD, 0x65E9, 0xA6AE, 0x65E8, - 0xA6AF, 0x65EC, 0xA6B0, 0x65ED, 0xA6B1, 0x66F2, 0xA6B2, 0x66F3, - 0xA6B3, 0x6709, 0xA6B4, 0x673D, 0xA6B5, 0x6734, 0xA6B6, 0x6731, - 0xA6B7, 0x6735, 0xA6B8, 0x6B21, 0xA6B9, 0x6B64, 0xA6BA, 0x6B7B, - 0xA6BB, 0x6C16, 0xA6BC, 0x6C5D, 0xA6BD, 0x6C57, 0xA6BE, 0x6C59, - 0xA6BF, 0x6C5F, 0xA6C0, 0x6C60, 0xA6C1, 0x6C50, 0xA6C2, 0x6C55, - 0xA6C3, 0x6C61, 0xA6C4, 0x6C5B, 0xA6C5, 0x6C4D, 0xA6C6, 0x6C4E, - 0xA6C7, 0x7070, 0xA6C8, 0x725F, 0xA6C9, 0x725D, 0xA6CA, 0x767E, - 0xA6CB, 0x7AF9, 0xA6CC, 0x7C73, 0xA6CD, 0x7CF8, 0xA6CE, 0x7F36, - 0xA6CF, 0x7F8A, 0xA6D0, 0x7FBD, 0xA6D1, 0x8001, 0xA6D2, 0x8003, - 0xA6D3, 0x800C, 0xA6D4, 0x8012, 0xA6D5, 0x8033, 0xA6D6, 0x807F, - 0xA6D7, 0x8089, 0xA6D8, 0x808B, 0xA6D9, 0x808C, 0xA6DA, 0x81E3, - 0xA6DB, 0x81EA, 0xA6DC, 0x81F3, 0xA6DD, 0x81FC, 0xA6DE, 0x820C, - 0xA6DF, 0x821B, 0xA6E0, 0x821F, 0xA6E1, 0x826E, 0xA6E2, 0x8272, - 0xA6E3, 0x827E, 0xA6E4, 0x866B, 0xA6E5, 0x8840, 0xA6E6, 0x884C, - 0xA6E7, 0x8863, 0xA6E8, 0x897F, 0xA6E9, 0x9621, 0xA6EA, 0x4E32, - 0xA6EB, 0x4EA8, 0xA6EC, 0x4F4D, 0xA6ED, 0x4F4F, 0xA6EE, 0x4F47, - 0xA6EF, 0x4F57, 0xA6F0, 0x4F5E, 0xA6F1, 0x4F34, 0xA6F2, 0x4F5B, - 0xA6F3, 0x4F55, 0xA6F4, 0x4F30, 0xA6F5, 0x4F50, 0xA6F6, 0x4F51, - 0xA6F7, 0x4F3D, 0xA6F8, 0x4F3A, 0xA6F9, 0x4F38, 0xA6FA, 0x4F43, - 0xA6FB, 0x4F54, 0xA6FC, 0x4F3C, 0xA6FD, 0x4F46, 0xA6FE, 0x4F63, - 0xA740, 0x4F5C, 0xA741, 0x4F60, 0xA742, 0x4F2F, 0xA743, 0x4F4E, - 0xA744, 0x4F36, 0xA745, 0x4F59, 0xA746, 0x4F5D, 0xA747, 0x4F48, - 0xA748, 0x4F5A, 0xA749, 0x514C, 0xA74A, 0x514B, 0xA74B, 0x514D, - 0xA74C, 0x5175, 0xA74D, 0x51B6, 0xA74E, 0x51B7, 0xA74F, 0x5225, - 0xA750, 0x5224, 0xA751, 0x5229, 0xA752, 0x522A, 0xA753, 0x5228, - 0xA754, 0x52AB, 0xA755, 0x52A9, 0xA756, 0x52AA, 0xA757, 0x52AC, - 0xA758, 0x5323, 0xA759, 0x5373, 0xA75A, 0x5375, 0xA75B, 0x541D, - 0xA75C, 0x542D, 0xA75D, 0x541E, 0xA75E, 0x543E, 0xA75F, 0x5426, - 0xA760, 0x544E, 0xA761, 0x5427, 0xA762, 0x5446, 0xA763, 0x5443, - 0xA764, 0x5433, 0xA765, 0x5448, 0xA766, 0x5442, 0xA767, 0x541B, - 0xA768, 0x5429, 0xA769, 0x544A, 0xA76A, 0x5439, 0xA76B, 0x543B, - 0xA76C, 0x5438, 0xA76D, 0x542E, 0xA76E, 0x5435, 0xA76F, 0x5436, - 0xA770, 0x5420, 0xA771, 0x543C, 0xA772, 0x5440, 0xA773, 0x5431, - 0xA774, 0x542B, 0xA775, 0x541F, 0xA776, 0x542C, 0xA777, 0x56EA, - 0xA778, 0x56F0, 0xA779, 0x56E4, 0xA77A, 0x56EB, 0xA77B, 0x574A, - 0xA77C, 0x5751, 0xA77D, 0x5740, 0xA77E, 0x574D, 0xA7A1, 0x5747, - 0xA7A2, 0x574E, 0xA7A3, 0x573E, 0xA7A4, 0x5750, 0xA7A5, 0x574F, - 0xA7A6, 0x573B, 0xA7A7, 0x58EF, 0xA7A8, 0x593E, 0xA7A9, 0x599D, - 0xA7AA, 0x5992, 0xA7AB, 0x59A8, 0xA7AC, 0x599E, 0xA7AD, 0x59A3, - 0xA7AE, 0x5999, 0xA7AF, 0x5996, 0xA7B0, 0x598D, 0xA7B1, 0x59A4, - 0xA7B2, 0x5993, 0xA7B3, 0x598A, 0xA7B4, 0x59A5, 0xA7B5, 0x5B5D, - 0xA7B6, 0x5B5C, 0xA7B7, 0x5B5A, 0xA7B8, 0x5B5B, 0xA7B9, 0x5B8C, - 0xA7BA, 0x5B8B, 0xA7BB, 0x5B8F, 0xA7BC, 0x5C2C, 0xA7BD, 0x5C40, - 0xA7BE, 0x5C41, 0xA7BF, 0x5C3F, 0xA7C0, 0x5C3E, 0xA7C1, 0x5C90, - 0xA7C2, 0x5C91, 0xA7C3, 0x5C94, 0xA7C4, 0x5C8C, 0xA7C5, 0x5DEB, - 0xA7C6, 0x5E0C, 0xA7C7, 0x5E8F, 0xA7C8, 0x5E87, 0xA7C9, 0x5E8A, - 0xA7CA, 0x5EF7, 0xA7CB, 0x5F04, 0xA7CC, 0x5F1F, 0xA7CD, 0x5F64, - 0xA7CE, 0x5F62, 0xA7CF, 0x5F77, 0xA7D0, 0x5F79, 0xA7D1, 0x5FD8, - 0xA7D2, 0x5FCC, 0xA7D3, 0x5FD7, 0xA7D4, 0x5FCD, 0xA7D5, 0x5FF1, - 0xA7D6, 0x5FEB, 0xA7D7, 0x5FF8, 0xA7D8, 0x5FEA, 0xA7D9, 0x6212, - 0xA7DA, 0x6211, 0xA7DB, 0x6284, 0xA7DC, 0x6297, 0xA7DD, 0x6296, - 0xA7DE, 0x6280, 0xA7DF, 0x6276, 0xA7E0, 0x6289, 0xA7E1, 0x626D, - 0xA7E2, 0x628A, 0xA7E3, 0x627C, 0xA7E4, 0x627E, 0xA7E5, 0x6279, - 0xA7E6, 0x6273, 0xA7E7, 0x6292, 0xA7E8, 0x626F, 0xA7E9, 0x6298, - 0xA7EA, 0x626E, 0xA7EB, 0x6295, 0xA7EC, 0x6293, 0xA7ED, 0x6291, - 0xA7EE, 0x6286, 0xA7EF, 0x6539, 0xA7F0, 0x653B, 0xA7F1, 0x6538, - 0xA7F2, 0x65F1, 0xA7F3, 0x66F4, 0xA7F4, 0x675F, 0xA7F5, 0x674E, - 0xA7F6, 0x674F, 0xA7F7, 0x6750, 0xA7F8, 0x6751, 0xA7F9, 0x675C, - 0xA7FA, 0x6756, 0xA7FB, 0x675E, 0xA7FC, 0x6749, 0xA7FD, 0x6746, - 0xA7FE, 0x6760, 0xA840, 0x6753, 0xA841, 0x6757, 0xA842, 0x6B65, - 0xA843, 0x6BCF, 0xA844, 0x6C42, 0xA845, 0x6C5E, 0xA846, 0x6C99, - 0xA847, 0x6C81, 0xA848, 0x6C88, 0xA849, 0x6C89, 0xA84A, 0x6C85, - 0xA84B, 0x6C9B, 0xA84C, 0x6C6A, 0xA84D, 0x6C7A, 0xA84E, 0x6C90, - 0xA84F, 0x6C70, 0xA850, 0x6C8C, 0xA851, 0x6C68, 0xA852, 0x6C96, - 0xA853, 0x6C92, 0xA854, 0x6C7D, 0xA855, 0x6C83, 0xA856, 0x6C72, - 0xA857, 0x6C7E, 0xA858, 0x6C74, 0xA859, 0x6C86, 0xA85A, 0x6C76, - 0xA85B, 0x6C8D, 0xA85C, 0x6C94, 0xA85D, 0x6C98, 0xA85E, 0x6C82, - 0xA85F, 0x7076, 0xA860, 0x707C, 0xA861, 0x707D, 0xA862, 0x7078, - 0xA863, 0x7262, 0xA864, 0x7261, 0xA865, 0x7260, 0xA866, 0x72C4, - 0xA867, 0x72C2, 0xA868, 0x7396, 0xA869, 0x752C, 0xA86A, 0x752B, - 0xA86B, 0x7537, 0xA86C, 0x7538, 0xA86D, 0x7682, 0xA86E, 0x76EF, - 0xA86F, 0x77E3, 0xA870, 0x79C1, 0xA871, 0x79C0, 0xA872, 0x79BF, - 0xA873, 0x7A76, 0xA874, 0x7CFB, 0xA875, 0x7F55, 0xA876, 0x8096, - 0xA877, 0x8093, 0xA878, 0x809D, 0xA879, 0x8098, 0xA87A, 0x809B, - 0xA87B, 0x809A, 0xA87C, 0x80B2, 0xA87D, 0x826F, 0xA87E, 0x8292, - 0xA8A1, 0x828B, 0xA8A2, 0x828D, 0xA8A3, 0x898B, 0xA8A4, 0x89D2, - 0xA8A5, 0x8A00, 0xA8A6, 0x8C37, 0xA8A7, 0x8C46, 0xA8A8, 0x8C55, - 0xA8A9, 0x8C9D, 0xA8AA, 0x8D64, 0xA8AB, 0x8D70, 0xA8AC, 0x8DB3, - 0xA8AD, 0x8EAB, 0xA8AE, 0x8ECA, 0xA8AF, 0x8F9B, 0xA8B0, 0x8FB0, - 0xA8B1, 0x8FC2, 0xA8B2, 0x8FC6, 0xA8B3, 0x8FC5, 0xA8B4, 0x8FC4, - 0xA8B5, 0x5DE1, 0xA8B6, 0x9091, 0xA8B7, 0x90A2, 0xA8B8, 0x90AA, - 0xA8B9, 0x90A6, 0xA8BA, 0x90A3, 0xA8BB, 0x9149, 0xA8BC, 0x91C6, - 0xA8BD, 0x91CC, 0xA8BE, 0x9632, 0xA8BF, 0x962E, 0xA8C0, 0x9631, - 0xA8C1, 0x962A, 0xA8C2, 0x962C, 0xA8C3, 0x4E26, 0xA8C4, 0x4E56, - 0xA8C5, 0x4E73, 0xA8C6, 0x4E8B, 0xA8C7, 0x4E9B, 0xA8C8, 0x4E9E, - 0xA8C9, 0x4EAB, 0xA8CA, 0x4EAC, 0xA8CB, 0x4F6F, 0xA8CC, 0x4F9D, - 0xA8CD, 0x4F8D, 0xA8CE, 0x4F73, 0xA8CF, 0x4F7F, 0xA8D0, 0x4F6C, - 0xA8D1, 0x4F9B, 0xA8D2, 0x4F8B, 0xA8D3, 0x4F86, 0xA8D4, 0x4F83, - 0xA8D5, 0x4F70, 0xA8D6, 0x4F75, 0xA8D7, 0x4F88, 0xA8D8, 0x4F69, - 0xA8D9, 0x4F7B, 0xA8DA, 0x4F96, 0xA8DB, 0x4F7E, 0xA8DC, 0x4F8F, - 0xA8DD, 0x4F91, 0xA8DE, 0x4F7A, 0xA8DF, 0x5154, 0xA8E0, 0x5152, - 0xA8E1, 0x5155, 0xA8E2, 0x5169, 0xA8E3, 0x5177, 0xA8E4, 0x5176, - 0xA8E5, 0x5178, 0xA8E6, 0x51BD, 0xA8E7, 0x51FD, 0xA8E8, 0x523B, - 0xA8E9, 0x5238, 0xA8EA, 0x5237, 0xA8EB, 0x523A, 0xA8EC, 0x5230, - 0xA8ED, 0x522E, 0xA8EE, 0x5236, 0xA8EF, 0x5241, 0xA8F0, 0x52BE, - 0xA8F1, 0x52BB, 0xA8F2, 0x5352, 0xA8F3, 0x5354, 0xA8F4, 0x5353, - 0xA8F5, 0x5351, 0xA8F6, 0x5366, 0xA8F7, 0x5377, 0xA8F8, 0x5378, - 0xA8F9, 0x5379, 0xA8FA, 0x53D6, 0xA8FB, 0x53D4, 0xA8FC, 0x53D7, - 0xA8FD, 0x5473, 0xA8FE, 0x5475, 0xA940, 0x5496, 0xA941, 0x5478, - 0xA942, 0x5495, 0xA943, 0x5480, 0xA944, 0x547B, 0xA945, 0x5477, - 0xA946, 0x5484, 0xA947, 0x5492, 0xA948, 0x5486, 0xA949, 0x547C, - 0xA94A, 0x5490, 0xA94B, 0x5471, 0xA94C, 0x5476, 0xA94D, 0x548C, - 0xA94E, 0x549A, 0xA94F, 0x5462, 0xA950, 0x5468, 0xA951, 0x548B, - 0xA952, 0x547D, 0xA953, 0x548E, 0xA954, 0x56FA, 0xA955, 0x5783, - 0xA956, 0x5777, 0xA957, 0x576A, 0xA958, 0x5769, 0xA959, 0x5761, - 0xA95A, 0x5766, 0xA95B, 0x5764, 0xA95C, 0x577C, 0xA95D, 0x591C, - 0xA95E, 0x5949, 0xA95F, 0x5947, 0xA960, 0x5948, 0xA961, 0x5944, - 0xA962, 0x5954, 0xA963, 0x59BE, 0xA964, 0x59BB, 0xA965, 0x59D4, - 0xA966, 0x59B9, 0xA967, 0x59AE, 0xA968, 0x59D1, 0xA969, 0x59C6, - 0xA96A, 0x59D0, 0xA96B, 0x59CD, 0xA96C, 0x59CB, 0xA96D, 0x59D3, - 0xA96E, 0x59CA, 0xA96F, 0x59AF, 0xA970, 0x59B3, 0xA971, 0x59D2, - 0xA972, 0x59C5, 0xA973, 0x5B5F, 0xA974, 0x5B64, 0xA975, 0x5B63, - 0xA976, 0x5B97, 0xA977, 0x5B9A, 0xA978, 0x5B98, 0xA979, 0x5B9C, - 0xA97A, 0x5B99, 0xA97B, 0x5B9B, 0xA97C, 0x5C1A, 0xA97D, 0x5C48, - 0xA97E, 0x5C45, 0xA9A1, 0x5C46, 0xA9A2, 0x5CB7, 0xA9A3, 0x5CA1, - 0xA9A4, 0x5CB8, 0xA9A5, 0x5CA9, 0xA9A6, 0x5CAB, 0xA9A7, 0x5CB1, - 0xA9A8, 0x5CB3, 0xA9A9, 0x5E18, 0xA9AA, 0x5E1A, 0xA9AB, 0x5E16, - 0xA9AC, 0x5E15, 0xA9AD, 0x5E1B, 0xA9AE, 0x5E11, 0xA9AF, 0x5E78, - 0xA9B0, 0x5E9A, 0xA9B1, 0x5E97, 0xA9B2, 0x5E9C, 0xA9B3, 0x5E95, - 0xA9B4, 0x5E96, 0xA9B5, 0x5EF6, 0xA9B6, 0x5F26, 0xA9B7, 0x5F27, - 0xA9B8, 0x5F29, 0xA9B9, 0x5F80, 0xA9BA, 0x5F81, 0xA9BB, 0x5F7F, - 0xA9BC, 0x5F7C, 0xA9BD, 0x5FDD, 0xA9BE, 0x5FE0, 0xA9BF, 0x5FFD, - 0xA9C0, 0x5FF5, 0xA9C1, 0x5FFF, 0xA9C2, 0x600F, 0xA9C3, 0x6014, - 0xA9C4, 0x602F, 0xA9C5, 0x6035, 0xA9C6, 0x6016, 0xA9C7, 0x602A, - 0xA9C8, 0x6015, 0xA9C9, 0x6021, 0xA9CA, 0x6027, 0xA9CB, 0x6029, - 0xA9CC, 0x602B, 0xA9CD, 0x601B, 0xA9CE, 0x6216, 0xA9CF, 0x6215, - 0xA9D0, 0x623F, 0xA9D1, 0x623E, 0xA9D2, 0x6240, 0xA9D3, 0x627F, - 0xA9D4, 0x62C9, 0xA9D5, 0x62CC, 0xA9D6, 0x62C4, 0xA9D7, 0x62BF, - 0xA9D8, 0x62C2, 0xA9D9, 0x62B9, 0xA9DA, 0x62D2, 0xA9DB, 0x62DB, - 0xA9DC, 0x62AB, 0xA9DD, 0x62D3, 0xA9DE, 0x62D4, 0xA9DF, 0x62CB, - 0xA9E0, 0x62C8, 0xA9E1, 0x62A8, 0xA9E2, 0x62BD, 0xA9E3, 0x62BC, - 0xA9E4, 0x62D0, 0xA9E5, 0x62D9, 0xA9E6, 0x62C7, 0xA9E7, 0x62CD, - 0xA9E8, 0x62B5, 0xA9E9, 0x62DA, 0xA9EA, 0x62B1, 0xA9EB, 0x62D8, - 0xA9EC, 0x62D6, 0xA9ED, 0x62D7, 0xA9EE, 0x62C6, 0xA9EF, 0x62AC, - 0xA9F0, 0x62CE, 0xA9F1, 0x653E, 0xA9F2, 0x65A7, 0xA9F3, 0x65BC, - 0xA9F4, 0x65FA, 0xA9F5, 0x6614, 0xA9F6, 0x6613, 0xA9F7, 0x660C, - 0xA9F8, 0x6606, 0xA9F9, 0x6602, 0xA9FA, 0x660E, 0xA9FB, 0x6600, - 0xA9FC, 0x660F, 0xA9FD, 0x6615, 0xA9FE, 0x660A, 0xAA40, 0x6607, - 0xAA41, 0x670D, 0xAA42, 0x670B, 0xAA43, 0x676D, 0xAA44, 0x678B, - 0xAA45, 0x6795, 0xAA46, 0x6771, 0xAA47, 0x679C, 0xAA48, 0x6773, - 0xAA49, 0x6777, 0xAA4A, 0x6787, 0xAA4B, 0x679D, 0xAA4C, 0x6797, - 0xAA4D, 0x676F, 0xAA4E, 0x6770, 0xAA4F, 0x677F, 0xAA50, 0x6789, - 0xAA51, 0x677E, 0xAA52, 0x6790, 0xAA53, 0x6775, 0xAA54, 0x679A, - 0xAA55, 0x6793, 0xAA56, 0x677C, 0xAA57, 0x676A, 0xAA58, 0x6772, - 0xAA59, 0x6B23, 0xAA5A, 0x6B66, 0xAA5B, 0x6B67, 0xAA5C, 0x6B7F, - 0xAA5D, 0x6C13, 0xAA5E, 0x6C1B, 0xAA5F, 0x6CE3, 0xAA60, 0x6CE8, - 0xAA61, 0x6CF3, 0xAA62, 0x6CB1, 0xAA63, 0x6CCC, 0xAA64, 0x6CE5, - 0xAA65, 0x6CB3, 0xAA66, 0x6CBD, 0xAA67, 0x6CBE, 0xAA68, 0x6CBC, - 0xAA69, 0x6CE2, 0xAA6A, 0x6CAB, 0xAA6B, 0x6CD5, 0xAA6C, 0x6CD3, - 0xAA6D, 0x6CB8, 0xAA6E, 0x6CC4, 0xAA6F, 0x6CB9, 0xAA70, 0x6CC1, - 0xAA71, 0x6CAE, 0xAA72, 0x6CD7, 0xAA73, 0x6CC5, 0xAA74, 0x6CF1, - 0xAA75, 0x6CBF, 0xAA76, 0x6CBB, 0xAA77, 0x6CE1, 0xAA78, 0x6CDB, - 0xAA79, 0x6CCA, 0xAA7A, 0x6CAC, 0xAA7B, 0x6CEF, 0xAA7C, 0x6CDC, - 0xAA7D, 0x6CD6, 0xAA7E, 0x6CE0, 0xAAA1, 0x7095, 0xAAA2, 0x708E, - 0xAAA3, 0x7092, 0xAAA4, 0x708A, 0xAAA5, 0x7099, 0xAAA6, 0x722C, - 0xAAA7, 0x722D, 0xAAA8, 0x7238, 0xAAA9, 0x7248, 0xAAAA, 0x7267, - 0xAAAB, 0x7269, 0xAAAC, 0x72C0, 0xAAAD, 0x72CE, 0xAAAE, 0x72D9, - 0xAAAF, 0x72D7, 0xAAB0, 0x72D0, 0xAAB1, 0x73A9, 0xAAB2, 0x73A8, - 0xAAB3, 0x739F, 0xAAB4, 0x73AB, 0xAAB5, 0x73A5, 0xAAB6, 0x753D, - 0xAAB7, 0x759D, 0xAAB8, 0x7599, 0xAAB9, 0x759A, 0xAABA, 0x7684, - 0xAABB, 0x76C2, 0xAABC, 0x76F2, 0xAABD, 0x76F4, 0xAABE, 0x77E5, - 0xAABF, 0x77FD, 0xAAC0, 0x793E, 0xAAC1, 0x7940, 0xAAC2, 0x7941, - 0xAAC3, 0x79C9, 0xAAC4, 0x79C8, 0xAAC5, 0x7A7A, 0xAAC6, 0x7A79, - 0xAAC7, 0x7AFA, 0xAAC8, 0x7CFE, 0xAAC9, 0x7F54, 0xAACA, 0x7F8C, - 0xAACB, 0x7F8B, 0xAACC, 0x8005, 0xAACD, 0x80BA, 0xAACE, 0x80A5, - 0xAACF, 0x80A2, 0xAAD0, 0x80B1, 0xAAD1, 0x80A1, 0xAAD2, 0x80AB, - 0xAAD3, 0x80A9, 0xAAD4, 0x80B4, 0xAAD5, 0x80AA, 0xAAD6, 0x80AF, - 0xAAD7, 0x81E5, 0xAAD8, 0x81FE, 0xAAD9, 0x820D, 0xAADA, 0x82B3, - 0xAADB, 0x829D, 0xAADC, 0x8299, 0xAADD, 0x82AD, 0xAADE, 0x82BD, - 0xAADF, 0x829F, 0xAAE0, 0x82B9, 0xAAE1, 0x82B1, 0xAAE2, 0x82AC, - 0xAAE3, 0x82A5, 0xAAE4, 0x82AF, 0xAAE5, 0x82B8, 0xAAE6, 0x82A3, - 0xAAE7, 0x82B0, 0xAAE8, 0x82BE, 0xAAE9, 0x82B7, 0xAAEA, 0x864E, - 0xAAEB, 0x8671, 0xAAEC, 0x521D, 0xAAED, 0x8868, 0xAAEE, 0x8ECB, - 0xAAEF, 0x8FCE, 0xAAF0, 0x8FD4, 0xAAF1, 0x8FD1, 0xAAF2, 0x90B5, - 0xAAF3, 0x90B8, 0xAAF4, 0x90B1, 0xAAF5, 0x90B6, 0xAAF6, 0x91C7, - 0xAAF7, 0x91D1, 0xAAF8, 0x9577, 0xAAF9, 0x9580, 0xAAFA, 0x961C, - 0xAAFB, 0x9640, 0xAAFC, 0x963F, 0xAAFD, 0x963B, 0xAAFE, 0x9644, - 0xAB40, 0x9642, 0xAB41, 0x96B9, 0xAB42, 0x96E8, 0xAB43, 0x9752, - 0xAB44, 0x975E, 0xAB45, 0x4E9F, 0xAB46, 0x4EAD, 0xAB47, 0x4EAE, - 0xAB48, 0x4FE1, 0xAB49, 0x4FB5, 0xAB4A, 0x4FAF, 0xAB4B, 0x4FBF, - 0xAB4C, 0x4FE0, 0xAB4D, 0x4FD1, 0xAB4E, 0x4FCF, 0xAB4F, 0x4FDD, - 0xAB50, 0x4FC3, 0xAB51, 0x4FB6, 0xAB52, 0x4FD8, 0xAB53, 0x4FDF, - 0xAB54, 0x4FCA, 0xAB55, 0x4FD7, 0xAB56, 0x4FAE, 0xAB57, 0x4FD0, - 0xAB58, 0x4FC4, 0xAB59, 0x4FC2, 0xAB5A, 0x4FDA, 0xAB5B, 0x4FCE, - 0xAB5C, 0x4FDE, 0xAB5D, 0x4FB7, 0xAB5E, 0x5157, 0xAB5F, 0x5192, - 0xAB60, 0x5191, 0xAB61, 0x51A0, 0xAB62, 0x524E, 0xAB63, 0x5243, - 0xAB64, 0x524A, 0xAB65, 0x524D, 0xAB66, 0x524C, 0xAB67, 0x524B, - 0xAB68, 0x5247, 0xAB69, 0x52C7, 0xAB6A, 0x52C9, 0xAB6B, 0x52C3, - 0xAB6C, 0x52C1, 0xAB6D, 0x530D, 0xAB6E, 0x5357, 0xAB6F, 0x537B, - 0xAB70, 0x539A, 0xAB71, 0x53DB, 0xAB72, 0x54AC, 0xAB73, 0x54C0, - 0xAB74, 0x54A8, 0xAB75, 0x54CE, 0xAB76, 0x54C9, 0xAB77, 0x54B8, - 0xAB78, 0x54A6, 0xAB79, 0x54B3, 0xAB7A, 0x54C7, 0xAB7B, 0x54C2, - 0xAB7C, 0x54BD, 0xAB7D, 0x54AA, 0xAB7E, 0x54C1, 0xABA1, 0x54C4, - 0xABA2, 0x54C8, 0xABA3, 0x54AF, 0xABA4, 0x54AB, 0xABA5, 0x54B1, - 0xABA6, 0x54BB, 0xABA7, 0x54A9, 0xABA8, 0x54A7, 0xABA9, 0x54BF, - 0xABAA, 0x56FF, 0xABAB, 0x5782, 0xABAC, 0x578B, 0xABAD, 0x57A0, - 0xABAE, 0x57A3, 0xABAF, 0x57A2, 0xABB0, 0x57CE, 0xABB1, 0x57AE, - 0xABB2, 0x5793, 0xABB3, 0x5955, 0xABB4, 0x5951, 0xABB5, 0x594F, - 0xABB6, 0x594E, 0xABB7, 0x5950, 0xABB8, 0x59DC, 0xABB9, 0x59D8, - 0xABBA, 0x59FF, 0xABBB, 0x59E3, 0xABBC, 0x59E8, 0xABBD, 0x5A03, - 0xABBE, 0x59E5, 0xABBF, 0x59EA, 0xABC0, 0x59DA, 0xABC1, 0x59E6, - 0xABC2, 0x5A01, 0xABC3, 0x59FB, 0xABC4, 0x5B69, 0xABC5, 0x5BA3, - 0xABC6, 0x5BA6, 0xABC7, 0x5BA4, 0xABC8, 0x5BA2, 0xABC9, 0x5BA5, - 0xABCA, 0x5C01, 0xABCB, 0x5C4E, 0xABCC, 0x5C4F, 0xABCD, 0x5C4D, - 0xABCE, 0x5C4B, 0xABCF, 0x5CD9, 0xABD0, 0x5CD2, 0xABD1, 0x5DF7, - 0xABD2, 0x5E1D, 0xABD3, 0x5E25, 0xABD4, 0x5E1F, 0xABD5, 0x5E7D, - 0xABD6, 0x5EA0, 0xABD7, 0x5EA6, 0xABD8, 0x5EFA, 0xABD9, 0x5F08, - 0xABDA, 0x5F2D, 0xABDB, 0x5F65, 0xABDC, 0x5F88, 0xABDD, 0x5F85, - 0xABDE, 0x5F8A, 0xABDF, 0x5F8B, 0xABE0, 0x5F87, 0xABE1, 0x5F8C, - 0xABE2, 0x5F89, 0xABE3, 0x6012, 0xABE4, 0x601D, 0xABE5, 0x6020, - 0xABE6, 0x6025, 0xABE7, 0x600E, 0xABE8, 0x6028, 0xABE9, 0x604D, - 0xABEA, 0x6070, 0xABEB, 0x6068, 0xABEC, 0x6062, 0xABED, 0x6046, - 0xABEE, 0x6043, 0xABEF, 0x606C, 0xABF0, 0x606B, 0xABF1, 0x606A, - 0xABF2, 0x6064, 0xABF3, 0x6241, 0xABF4, 0x62DC, 0xABF5, 0x6316, - 0xABF6, 0x6309, 0xABF7, 0x62FC, 0xABF8, 0x62ED, 0xABF9, 0x6301, - 0xABFA, 0x62EE, 0xABFB, 0x62FD, 0xABFC, 0x6307, 0xABFD, 0x62F1, - 0xABFE, 0x62F7, 0xAC40, 0x62EF, 0xAC41, 0x62EC, 0xAC42, 0x62FE, - 0xAC43, 0x62F4, 0xAC44, 0x6311, 0xAC45, 0x6302, 0xAC46, 0x653F, - 0xAC47, 0x6545, 0xAC48, 0x65AB, 0xAC49, 0x65BD, 0xAC4A, 0x65E2, - 0xAC4B, 0x6625, 0xAC4C, 0x662D, 0xAC4D, 0x6620, 0xAC4E, 0x6627, - 0xAC4F, 0x662F, 0xAC50, 0x661F, 0xAC51, 0x6628, 0xAC52, 0x6631, - 0xAC53, 0x6624, 0xAC54, 0x66F7, 0xAC55, 0x67FF, 0xAC56, 0x67D3, - 0xAC57, 0x67F1, 0xAC58, 0x67D4, 0xAC59, 0x67D0, 0xAC5A, 0x67EC, - 0xAC5B, 0x67B6, 0xAC5C, 0x67AF, 0xAC5D, 0x67F5, 0xAC5E, 0x67E9, - 0xAC5F, 0x67EF, 0xAC60, 0x67C4, 0xAC61, 0x67D1, 0xAC62, 0x67B4, - 0xAC63, 0x67DA, 0xAC64, 0x67E5, 0xAC65, 0x67B8, 0xAC66, 0x67CF, - 0xAC67, 0x67DE, 0xAC68, 0x67F3, 0xAC69, 0x67B0, 0xAC6A, 0x67D9, - 0xAC6B, 0x67E2, 0xAC6C, 0x67DD, 0xAC6D, 0x67D2, 0xAC6E, 0x6B6A, - 0xAC6F, 0x6B83, 0xAC70, 0x6B86, 0xAC71, 0x6BB5, 0xAC72, 0x6BD2, - 0xAC73, 0x6BD7, 0xAC74, 0x6C1F, 0xAC75, 0x6CC9, 0xAC76, 0x6D0B, - 0xAC77, 0x6D32, 0xAC78, 0x6D2A, 0xAC79, 0x6D41, 0xAC7A, 0x6D25, - 0xAC7B, 0x6D0C, 0xAC7C, 0x6D31, 0xAC7D, 0x6D1E, 0xAC7E, 0x6D17, - 0xACA1, 0x6D3B, 0xACA2, 0x6D3D, 0xACA3, 0x6D3E, 0xACA4, 0x6D36, - 0xACA5, 0x6D1B, 0xACA6, 0x6CF5, 0xACA7, 0x6D39, 0xACA8, 0x6D27, - 0xACA9, 0x6D38, 0xACAA, 0x6D29, 0xACAB, 0x6D2E, 0xACAC, 0x6D35, - 0xACAD, 0x6D0E, 0xACAE, 0x6D2B, 0xACAF, 0x70AB, 0xACB0, 0x70BA, - 0xACB1, 0x70B3, 0xACB2, 0x70AC, 0xACB3, 0x70AF, 0xACB4, 0x70AD, - 0xACB5, 0x70B8, 0xACB6, 0x70AE, 0xACB7, 0x70A4, 0xACB8, 0x7230, - 0xACB9, 0x7272, 0xACBA, 0x726F, 0xACBB, 0x7274, 0xACBC, 0x72E9, - 0xACBD, 0x72E0, 0xACBE, 0x72E1, 0xACBF, 0x73B7, 0xACC0, 0x73CA, - 0xACC1, 0x73BB, 0xACC2, 0x73B2, 0xACC3, 0x73CD, 0xACC4, 0x73C0, - 0xACC5, 0x73B3, 0xACC6, 0x751A, 0xACC7, 0x752D, 0xACC8, 0x754F, - 0xACC9, 0x754C, 0xACCA, 0x754E, 0xACCB, 0x754B, 0xACCC, 0x75AB, - 0xACCD, 0x75A4, 0xACCE, 0x75A5, 0xACCF, 0x75A2, 0xACD0, 0x75A3, - 0xACD1, 0x7678, 0xACD2, 0x7686, 0xACD3, 0x7687, 0xACD4, 0x7688, - 0xACD5, 0x76C8, 0xACD6, 0x76C6, 0xACD7, 0x76C3, 0xACD8, 0x76C5, - 0xACD9, 0x7701, 0xACDA, 0x76F9, 0xACDB, 0x76F8, 0xACDC, 0x7709, - 0xACDD, 0x770B, 0xACDE, 0x76FE, 0xACDF, 0x76FC, 0xACE0, 0x7707, - 0xACE1, 0x77DC, 0xACE2, 0x7802, 0xACE3, 0x7814, 0xACE4, 0x780C, - 0xACE5, 0x780D, 0xACE6, 0x7946, 0xACE7, 0x7949, 0xACE8, 0x7948, - 0xACE9, 0x7947, 0xACEA, 0x79B9, 0xACEB, 0x79BA, 0xACEC, 0x79D1, - 0xACED, 0x79D2, 0xACEE, 0x79CB, 0xACEF, 0x7A7F, 0xACF0, 0x7A81, - 0xACF1, 0x7AFF, 0xACF2, 0x7AFD, 0xACF3, 0x7C7D, 0xACF4, 0x7D02, - 0xACF5, 0x7D05, 0xACF6, 0x7D00, 0xACF7, 0x7D09, 0xACF8, 0x7D07, - 0xACF9, 0x7D04, 0xACFA, 0x7D06, 0xACFB, 0x7F38, 0xACFC, 0x7F8E, - 0xACFD, 0x7FBF, 0xACFE, 0x8004, 0xAD40, 0x8010, 0xAD41, 0x800D, - 0xAD42, 0x8011, 0xAD43, 0x8036, 0xAD44, 0x80D6, 0xAD45, 0x80E5, - 0xAD46, 0x80DA, 0xAD47, 0x80C3, 0xAD48, 0x80C4, 0xAD49, 0x80CC, - 0xAD4A, 0x80E1, 0xAD4B, 0x80DB, 0xAD4C, 0x80CE, 0xAD4D, 0x80DE, - 0xAD4E, 0x80E4, 0xAD4F, 0x80DD, 0xAD50, 0x81F4, 0xAD51, 0x8222, - 0xAD52, 0x82E7, 0xAD53, 0x8303, 0xAD54, 0x8305, 0xAD55, 0x82E3, - 0xAD56, 0x82DB, 0xAD57, 0x82E6, 0xAD58, 0x8304, 0xAD59, 0x82E5, - 0xAD5A, 0x8302, 0xAD5B, 0x8309, 0xAD5C, 0x82D2, 0xAD5D, 0x82D7, - 0xAD5E, 0x82F1, 0xAD5F, 0x8301, 0xAD60, 0x82DC, 0xAD61, 0x82D4, - 0xAD62, 0x82D1, 0xAD63, 0x82DE, 0xAD64, 0x82D3, 0xAD65, 0x82DF, - 0xAD66, 0x82EF, 0xAD67, 0x8306, 0xAD68, 0x8650, 0xAD69, 0x8679, - 0xAD6A, 0x867B, 0xAD6B, 0x867A, 0xAD6C, 0x884D, 0xAD6D, 0x886B, - 0xAD6E, 0x8981, 0xAD6F, 0x89D4, 0xAD70, 0x8A08, 0xAD71, 0x8A02, - 0xAD72, 0x8A03, 0xAD73, 0x8C9E, 0xAD74, 0x8CA0, 0xAD75, 0x8D74, - 0xAD76, 0x8D73, 0xAD77, 0x8DB4, 0xAD78, 0x8ECD, 0xAD79, 0x8ECC, - 0xAD7A, 0x8FF0, 0xAD7B, 0x8FE6, 0xAD7C, 0x8FE2, 0xAD7D, 0x8FEA, - 0xAD7E, 0x8FE5, 0xADA1, 0x8FED, 0xADA2, 0x8FEB, 0xADA3, 0x8FE4, - 0xADA4, 0x8FE8, 0xADA5, 0x90CA, 0xADA6, 0x90CE, 0xADA7, 0x90C1, - 0xADA8, 0x90C3, 0xADA9, 0x914B, 0xADAA, 0x914A, 0xADAB, 0x91CD, - 0xADAC, 0x9582, 0xADAD, 0x9650, 0xADAE, 0x964B, 0xADAF, 0x964C, - 0xADB0, 0x964D, 0xADB1, 0x9762, 0xADB2, 0x9769, 0xADB3, 0x97CB, - 0xADB4, 0x97ED, 0xADB5, 0x97F3, 0xADB6, 0x9801, 0xADB7, 0x98A8, - 0xADB8, 0x98DB, 0xADB9, 0x98DF, 0xADBA, 0x9996, 0xADBB, 0x9999, - 0xADBC, 0x4E58, 0xADBD, 0x4EB3, 0xADBE, 0x500C, 0xADBF, 0x500D, - 0xADC0, 0x5023, 0xADC1, 0x4FEF, 0xADC2, 0x5026, 0xADC3, 0x5025, - 0xADC4, 0x4FF8, 0xADC5, 0x5029, 0xADC6, 0x5016, 0xADC7, 0x5006, - 0xADC8, 0x503C, 0xADC9, 0x501F, 0xADCA, 0x501A, 0xADCB, 0x5012, - 0xADCC, 0x5011, 0xADCD, 0x4FFA, 0xADCE, 0x5000, 0xADCF, 0x5014, - 0xADD0, 0x5028, 0xADD1, 0x4FF1, 0xADD2, 0x5021, 0xADD3, 0x500B, - 0xADD4, 0x5019, 0xADD5, 0x5018, 0xADD6, 0x4FF3, 0xADD7, 0x4FEE, - 0xADD8, 0x502D, 0xADD9, 0x502A, 0xADDA, 0x4FFE, 0xADDB, 0x502B, - 0xADDC, 0x5009, 0xADDD, 0x517C, 0xADDE, 0x51A4, 0xADDF, 0x51A5, - 0xADE0, 0x51A2, 0xADE1, 0x51CD, 0xADE2, 0x51CC, 0xADE3, 0x51C6, - 0xADE4, 0x51CB, 0xADE5, 0x5256, 0xADE6, 0x525C, 0xADE7, 0x5254, - 0xADE8, 0x525B, 0xADE9, 0x525D, 0xADEA, 0x532A, 0xADEB, 0x537F, - 0xADEC, 0x539F, 0xADED, 0x539D, 0xADEE, 0x53DF, 0xADEF, 0x54E8, - 0xADF0, 0x5510, 0xADF1, 0x5501, 0xADF2, 0x5537, 0xADF3, 0x54FC, - 0xADF4, 0x54E5, 0xADF5, 0x54F2, 0xADF6, 0x5506, 0xADF7, 0x54FA, - 0xADF8, 0x5514, 0xADF9, 0x54E9, 0xADFA, 0x54ED, 0xADFB, 0x54E1, - 0xADFC, 0x5509, 0xADFD, 0x54EE, 0xADFE, 0x54EA, 0xAE40, 0x54E6, - 0xAE41, 0x5527, 0xAE42, 0x5507, 0xAE43, 0x54FD, 0xAE44, 0x550F, - 0xAE45, 0x5703, 0xAE46, 0x5704, 0xAE47, 0x57C2, 0xAE48, 0x57D4, - 0xAE49, 0x57CB, 0xAE4A, 0x57C3, 0xAE4B, 0x5809, 0xAE4C, 0x590F, - 0xAE4D, 0x5957, 0xAE4E, 0x5958, 0xAE4F, 0x595A, 0xAE50, 0x5A11, - 0xAE51, 0x5A18, 0xAE52, 0x5A1C, 0xAE53, 0x5A1F, 0xAE54, 0x5A1B, - 0xAE55, 0x5A13, 0xAE56, 0x59EC, 0xAE57, 0x5A20, 0xAE58, 0x5A23, - 0xAE59, 0x5A29, 0xAE5A, 0x5A25, 0xAE5B, 0x5A0C, 0xAE5C, 0x5A09, - 0xAE5D, 0x5B6B, 0xAE5E, 0x5C58, 0xAE5F, 0x5BB0, 0xAE60, 0x5BB3, - 0xAE61, 0x5BB6, 0xAE62, 0x5BB4, 0xAE63, 0x5BAE, 0xAE64, 0x5BB5, - 0xAE65, 0x5BB9, 0xAE66, 0x5BB8, 0xAE67, 0x5C04, 0xAE68, 0x5C51, - 0xAE69, 0x5C55, 0xAE6A, 0x5C50, 0xAE6B, 0x5CED, 0xAE6C, 0x5CFD, - 0xAE6D, 0x5CFB, 0xAE6E, 0x5CEA, 0xAE6F, 0x5CE8, 0xAE70, 0x5CF0, - 0xAE71, 0x5CF6, 0xAE72, 0x5D01, 0xAE73, 0x5CF4, 0xAE74, 0x5DEE, - 0xAE75, 0x5E2D, 0xAE76, 0x5E2B, 0xAE77, 0x5EAB, 0xAE78, 0x5EAD, - 0xAE79, 0x5EA7, 0xAE7A, 0x5F31, 0xAE7B, 0x5F92, 0xAE7C, 0x5F91, - 0xAE7D, 0x5F90, 0xAE7E, 0x6059, 0xAEA1, 0x6063, 0xAEA2, 0x6065, - 0xAEA3, 0x6050, 0xAEA4, 0x6055, 0xAEA5, 0x606D, 0xAEA6, 0x6069, - 0xAEA7, 0x606F, 0xAEA8, 0x6084, 0xAEA9, 0x609F, 0xAEAA, 0x609A, - 0xAEAB, 0x608D, 0xAEAC, 0x6094, 0xAEAD, 0x608C, 0xAEAE, 0x6085, - 0xAEAF, 0x6096, 0xAEB0, 0x6247, 0xAEB1, 0x62F3, 0xAEB2, 0x6308, - 0xAEB3, 0x62FF, 0xAEB4, 0x634E, 0xAEB5, 0x633E, 0xAEB6, 0x632F, - 0xAEB7, 0x6355, 0xAEB8, 0x6342, 0xAEB9, 0x6346, 0xAEBA, 0x634F, - 0xAEBB, 0x6349, 0xAEBC, 0x633A, 0xAEBD, 0x6350, 0xAEBE, 0x633D, - 0xAEBF, 0x632A, 0xAEC0, 0x632B, 0xAEC1, 0x6328, 0xAEC2, 0x634D, - 0xAEC3, 0x634C, 0xAEC4, 0x6548, 0xAEC5, 0x6549, 0xAEC6, 0x6599, - 0xAEC7, 0x65C1, 0xAEC8, 0x65C5, 0xAEC9, 0x6642, 0xAECA, 0x6649, - 0xAECB, 0x664F, 0xAECC, 0x6643, 0xAECD, 0x6652, 0xAECE, 0x664C, - 0xAECF, 0x6645, 0xAED0, 0x6641, 0xAED1, 0x66F8, 0xAED2, 0x6714, - 0xAED3, 0x6715, 0xAED4, 0x6717, 0xAED5, 0x6821, 0xAED6, 0x6838, - 0xAED7, 0x6848, 0xAED8, 0x6846, 0xAED9, 0x6853, 0xAEDA, 0x6839, - 0xAEDB, 0x6842, 0xAEDC, 0x6854, 0xAEDD, 0x6829, 0xAEDE, 0x68B3, - 0xAEDF, 0x6817, 0xAEE0, 0x684C, 0xAEE1, 0x6851, 0xAEE2, 0x683D, - 0xAEE3, 0x67F4, 0xAEE4, 0x6850, 0xAEE5, 0x6840, 0xAEE6, 0x683C, - 0xAEE7, 0x6843, 0xAEE8, 0x682A, 0xAEE9, 0x6845, 0xAEEA, 0x6813, - 0xAEEB, 0x6818, 0xAEEC, 0x6841, 0xAEED, 0x6B8A, 0xAEEE, 0x6B89, - 0xAEEF, 0x6BB7, 0xAEF0, 0x6C23, 0xAEF1, 0x6C27, 0xAEF2, 0x6C28, - 0xAEF3, 0x6C26, 0xAEF4, 0x6C24, 0xAEF5, 0x6CF0, 0xAEF6, 0x6D6A, - 0xAEF7, 0x6D95, 0xAEF8, 0x6D88, 0xAEF9, 0x6D87, 0xAEFA, 0x6D66, - 0xAEFB, 0x6D78, 0xAEFC, 0x6D77, 0xAEFD, 0x6D59, 0xAEFE, 0x6D93, - 0xAF40, 0x6D6C, 0xAF41, 0x6D89, 0xAF42, 0x6D6E, 0xAF43, 0x6D5A, - 0xAF44, 0x6D74, 0xAF45, 0x6D69, 0xAF46, 0x6D8C, 0xAF47, 0x6D8A, - 0xAF48, 0x6D79, 0xAF49, 0x6D85, 0xAF4A, 0x6D65, 0xAF4B, 0x6D94, - 0xAF4C, 0x70CA, 0xAF4D, 0x70D8, 0xAF4E, 0x70E4, 0xAF4F, 0x70D9, - 0xAF50, 0x70C8, 0xAF51, 0x70CF, 0xAF52, 0x7239, 0xAF53, 0x7279, - 0xAF54, 0x72FC, 0xAF55, 0x72F9, 0xAF56, 0x72FD, 0xAF57, 0x72F8, - 0xAF58, 0x72F7, 0xAF59, 0x7386, 0xAF5A, 0x73ED, 0xAF5B, 0x7409, - 0xAF5C, 0x73EE, 0xAF5D, 0x73E0, 0xAF5E, 0x73EA, 0xAF5F, 0x73DE, - 0xAF60, 0x7554, 0xAF61, 0x755D, 0xAF62, 0x755C, 0xAF63, 0x755A, - 0xAF64, 0x7559, 0xAF65, 0x75BE, 0xAF66, 0x75C5, 0xAF67, 0x75C7, - 0xAF68, 0x75B2, 0xAF69, 0x75B3, 0xAF6A, 0x75BD, 0xAF6B, 0x75BC, - 0xAF6C, 0x75B9, 0xAF6D, 0x75C2, 0xAF6E, 0x75B8, 0xAF6F, 0x768B, - 0xAF70, 0x76B0, 0xAF71, 0x76CA, 0xAF72, 0x76CD, 0xAF73, 0x76CE, - 0xAF74, 0x7729, 0xAF75, 0x771F, 0xAF76, 0x7720, 0xAF77, 0x7728, - 0xAF78, 0x77E9, 0xAF79, 0x7830, 0xAF7A, 0x7827, 0xAF7B, 0x7838, - 0xAF7C, 0x781D, 0xAF7D, 0x7834, 0xAF7E, 0x7837, 0xAFA1, 0x7825, - 0xAFA2, 0x782D, 0xAFA3, 0x7820, 0xAFA4, 0x781F, 0xAFA5, 0x7832, - 0xAFA6, 0x7955, 0xAFA7, 0x7950, 0xAFA8, 0x7960, 0xAFA9, 0x795F, - 0xAFAA, 0x7956, 0xAFAB, 0x795E, 0xAFAC, 0x795D, 0xAFAD, 0x7957, - 0xAFAE, 0x795A, 0xAFAF, 0x79E4, 0xAFB0, 0x79E3, 0xAFB1, 0x79E7, - 0xAFB2, 0x79DF, 0xAFB3, 0x79E6, 0xAFB4, 0x79E9, 0xAFB5, 0x79D8, - 0xAFB6, 0x7A84, 0xAFB7, 0x7A88, 0xAFB8, 0x7AD9, 0xAFB9, 0x7B06, - 0xAFBA, 0x7B11, 0xAFBB, 0x7C89, 0xAFBC, 0x7D21, 0xAFBD, 0x7D17, - 0xAFBE, 0x7D0B, 0xAFBF, 0x7D0A, 0xAFC0, 0x7D20, 0xAFC1, 0x7D22, - 0xAFC2, 0x7D14, 0xAFC3, 0x7D10, 0xAFC4, 0x7D15, 0xAFC5, 0x7D1A, - 0xAFC6, 0x7D1C, 0xAFC7, 0x7D0D, 0xAFC8, 0x7D19, 0xAFC9, 0x7D1B, - 0xAFCA, 0x7F3A, 0xAFCB, 0x7F5F, 0xAFCC, 0x7F94, 0xAFCD, 0x7FC5, - 0xAFCE, 0x7FC1, 0xAFCF, 0x8006, 0xAFD0, 0x8018, 0xAFD1, 0x8015, - 0xAFD2, 0x8019, 0xAFD3, 0x8017, 0xAFD4, 0x803D, 0xAFD5, 0x803F, - 0xAFD6, 0x80F1, 0xAFD7, 0x8102, 0xAFD8, 0x80F0, 0xAFD9, 0x8105, - 0xAFDA, 0x80ED, 0xAFDB, 0x80F4, 0xAFDC, 0x8106, 0xAFDD, 0x80F8, - 0xAFDE, 0x80F3, 0xAFDF, 0x8108, 0xAFE0, 0x80FD, 0xAFE1, 0x810A, - 0xAFE2, 0x80FC, 0xAFE3, 0x80EF, 0xAFE4, 0x81ED, 0xAFE5, 0x81EC, - 0xAFE6, 0x8200, 0xAFE7, 0x8210, 0xAFE8, 0x822A, 0xAFE9, 0x822B, - 0xAFEA, 0x8228, 0xAFEB, 0x822C, 0xAFEC, 0x82BB, 0xAFED, 0x832B, - 0xAFEE, 0x8352, 0xAFEF, 0x8354, 0xAFF0, 0x834A, 0xAFF1, 0x8338, - 0xAFF2, 0x8350, 0xAFF3, 0x8349, 0xAFF4, 0x8335, 0xAFF5, 0x8334, - 0xAFF6, 0x834F, 0xAFF7, 0x8332, 0xAFF8, 0x8339, 0xAFF9, 0x8336, - 0xAFFA, 0x8317, 0xAFFB, 0x8340, 0xAFFC, 0x8331, 0xAFFD, 0x8328, - 0xAFFE, 0x8343, 0xB040, 0x8654, 0xB041, 0x868A, 0xB042, 0x86AA, - 0xB043, 0x8693, 0xB044, 0x86A4, 0xB045, 0x86A9, 0xB046, 0x868C, - 0xB047, 0x86A3, 0xB048, 0x869C, 0xB049, 0x8870, 0xB04A, 0x8877, - 0xB04B, 0x8881, 0xB04C, 0x8882, 0xB04D, 0x887D, 0xB04E, 0x8879, - 0xB04F, 0x8A18, 0xB050, 0x8A10, 0xB051, 0x8A0E, 0xB052, 0x8A0C, - 0xB053, 0x8A15, 0xB054, 0x8A0A, 0xB055, 0x8A17, 0xB056, 0x8A13, - 0xB057, 0x8A16, 0xB058, 0x8A0F, 0xB059, 0x8A11, 0xB05A, 0x8C48, - 0xB05B, 0x8C7A, 0xB05C, 0x8C79, 0xB05D, 0x8CA1, 0xB05E, 0x8CA2, - 0xB05F, 0x8D77, 0xB060, 0x8EAC, 0xB061, 0x8ED2, 0xB062, 0x8ED4, - 0xB063, 0x8ECF, 0xB064, 0x8FB1, 0xB065, 0x9001, 0xB066, 0x9006, - 0xB067, 0x8FF7, 0xB068, 0x9000, 0xB069, 0x8FFA, 0xB06A, 0x8FF4, - 0xB06B, 0x9003, 0xB06C, 0x8FFD, 0xB06D, 0x9005, 0xB06E, 0x8FF8, - 0xB06F, 0x9095, 0xB070, 0x90E1, 0xB071, 0x90DD, 0xB072, 0x90E2, - 0xB073, 0x9152, 0xB074, 0x914D, 0xB075, 0x914C, 0xB076, 0x91D8, - 0xB077, 0x91DD, 0xB078, 0x91D7, 0xB079, 0x91DC, 0xB07A, 0x91D9, - 0xB07B, 0x9583, 0xB07C, 0x9662, 0xB07D, 0x9663, 0xB07E, 0x9661, - 0xB0A1, 0x965B, 0xB0A2, 0x965D, 0xB0A3, 0x9664, 0xB0A4, 0x9658, - 0xB0A5, 0x965E, 0xB0A6, 0x96BB, 0xB0A7, 0x98E2, 0xB0A8, 0x99AC, - 0xB0A9, 0x9AA8, 0xB0AA, 0x9AD8, 0xB0AB, 0x9B25, 0xB0AC, 0x9B32, - 0xB0AD, 0x9B3C, 0xB0AE, 0x4E7E, 0xB0AF, 0x507A, 0xB0B0, 0x507D, - 0xB0B1, 0x505C, 0xB0B2, 0x5047, 0xB0B3, 0x5043, 0xB0B4, 0x504C, - 0xB0B5, 0x505A, 0xB0B6, 0x5049, 0xB0B7, 0x5065, 0xB0B8, 0x5076, - 0xB0B9, 0x504E, 0xB0BA, 0x5055, 0xB0BB, 0x5075, 0xB0BC, 0x5074, - 0xB0BD, 0x5077, 0xB0BE, 0x504F, 0xB0BF, 0x500F, 0xB0C0, 0x506F, - 0xB0C1, 0x506D, 0xB0C2, 0x515C, 0xB0C3, 0x5195, 0xB0C4, 0x51F0, - 0xB0C5, 0x526A, 0xB0C6, 0x526F, 0xB0C7, 0x52D2, 0xB0C8, 0x52D9, - 0xB0C9, 0x52D8, 0xB0CA, 0x52D5, 0xB0CB, 0x5310, 0xB0CC, 0x530F, - 0xB0CD, 0x5319, 0xB0CE, 0x533F, 0xB0CF, 0x5340, 0xB0D0, 0x533E, - 0xB0D1, 0x53C3, 0xB0D2, 0x66FC, 0xB0D3, 0x5546, 0xB0D4, 0x556A, - 0xB0D5, 0x5566, 0xB0D6, 0x5544, 0xB0D7, 0x555E, 0xB0D8, 0x5561, - 0xB0D9, 0x5543, 0xB0DA, 0x554A, 0xB0DB, 0x5531, 0xB0DC, 0x5556, - 0xB0DD, 0x554F, 0xB0DE, 0x5555, 0xB0DF, 0x552F, 0xB0E0, 0x5564, - 0xB0E1, 0x5538, 0xB0E2, 0x552E, 0xB0E3, 0x555C, 0xB0E4, 0x552C, - 0xB0E5, 0x5563, 0xB0E6, 0x5533, 0xB0E7, 0x5541, 0xB0E8, 0x5557, - 0xB0E9, 0x5708, 0xB0EA, 0x570B, 0xB0EB, 0x5709, 0xB0EC, 0x57DF, - 0xB0ED, 0x5805, 0xB0EE, 0x580A, 0xB0EF, 0x5806, 0xB0F0, 0x57E0, - 0xB0F1, 0x57E4, 0xB0F2, 0x57FA, 0xB0F3, 0x5802, 0xB0F4, 0x5835, - 0xB0F5, 0x57F7, 0xB0F6, 0x57F9, 0xB0F7, 0x5920, 0xB0F8, 0x5962, - 0xB0F9, 0x5A36, 0xB0FA, 0x5A41, 0xB0FB, 0x5A49, 0xB0FC, 0x5A66, - 0xB0FD, 0x5A6A, 0xB0FE, 0x5A40, 0xB140, 0x5A3C, 0xB141, 0x5A62, - 0xB142, 0x5A5A, 0xB143, 0x5A46, 0xB144, 0x5A4A, 0xB145, 0x5B70, - 0xB146, 0x5BC7, 0xB147, 0x5BC5, 0xB148, 0x5BC4, 0xB149, 0x5BC2, - 0xB14A, 0x5BBF, 0xB14B, 0x5BC6, 0xB14C, 0x5C09, 0xB14D, 0x5C08, - 0xB14E, 0x5C07, 0xB14F, 0x5C60, 0xB150, 0x5C5C, 0xB151, 0x5C5D, - 0xB152, 0x5D07, 0xB153, 0x5D06, 0xB154, 0x5D0E, 0xB155, 0x5D1B, - 0xB156, 0x5D16, 0xB157, 0x5D22, 0xB158, 0x5D11, 0xB159, 0x5D29, - 0xB15A, 0x5D14, 0xB15B, 0x5D19, 0xB15C, 0x5D24, 0xB15D, 0x5D27, - 0xB15E, 0x5D17, 0xB15F, 0x5DE2, 0xB160, 0x5E38, 0xB161, 0x5E36, - 0xB162, 0x5E33, 0xB163, 0x5E37, 0xB164, 0x5EB7, 0xB165, 0x5EB8, - 0xB166, 0x5EB6, 0xB167, 0x5EB5, 0xB168, 0x5EBE, 0xB169, 0x5F35, - 0xB16A, 0x5F37, 0xB16B, 0x5F57, 0xB16C, 0x5F6C, 0xB16D, 0x5F69, - 0xB16E, 0x5F6B, 0xB16F, 0x5F97, 0xB170, 0x5F99, 0xB171, 0x5F9E, - 0xB172, 0x5F98, 0xB173, 0x5FA1, 0xB174, 0x5FA0, 0xB175, 0x5F9C, - 0xB176, 0x607F, 0xB177, 0x60A3, 0xB178, 0x6089, 0xB179, 0x60A0, - 0xB17A, 0x60A8, 0xB17B, 0x60CB, 0xB17C, 0x60B4, 0xB17D, 0x60E6, - 0xB17E, 0x60BD, 0xB1A1, 0x60C5, 0xB1A2, 0x60BB, 0xB1A3, 0x60B5, - 0xB1A4, 0x60DC, 0xB1A5, 0x60BC, 0xB1A6, 0x60D8, 0xB1A7, 0x60D5, - 0xB1A8, 0x60C6, 0xB1A9, 0x60DF, 0xB1AA, 0x60B8, 0xB1AB, 0x60DA, - 0xB1AC, 0x60C7, 0xB1AD, 0x621A, 0xB1AE, 0x621B, 0xB1AF, 0x6248, - 0xB1B0, 0x63A0, 0xB1B1, 0x63A7, 0xB1B2, 0x6372, 0xB1B3, 0x6396, - 0xB1B4, 0x63A2, 0xB1B5, 0x63A5, 0xB1B6, 0x6377, 0xB1B7, 0x6367, - 0xB1B8, 0x6398, 0xB1B9, 0x63AA, 0xB1BA, 0x6371, 0xB1BB, 0x63A9, - 0xB1BC, 0x6389, 0xB1BD, 0x6383, 0xB1BE, 0x639B, 0xB1BF, 0x636B, - 0xB1C0, 0x63A8, 0xB1C1, 0x6384, 0xB1C2, 0x6388, 0xB1C3, 0x6399, - 0xB1C4, 0x63A1, 0xB1C5, 0x63AC, 0xB1C6, 0x6392, 0xB1C7, 0x638F, - 0xB1C8, 0x6380, 0xB1C9, 0x637B, 0xB1CA, 0x6369, 0xB1CB, 0x6368, - 0xB1CC, 0x637A, 0xB1CD, 0x655D, 0xB1CE, 0x6556, 0xB1CF, 0x6551, - 0xB1D0, 0x6559, 0xB1D1, 0x6557, 0xB1D2, 0x555F, 0xB1D3, 0x654F, - 0xB1D4, 0x6558, 0xB1D5, 0x6555, 0xB1D6, 0x6554, 0xB1D7, 0x659C, - 0xB1D8, 0x659B, 0xB1D9, 0x65AC, 0xB1DA, 0x65CF, 0xB1DB, 0x65CB, - 0xB1DC, 0x65CC, 0xB1DD, 0x65CE, 0xB1DE, 0x665D, 0xB1DF, 0x665A, - 0xB1E0, 0x6664, 0xB1E1, 0x6668, 0xB1E2, 0x6666, 0xB1E3, 0x665E, - 0xB1E4, 0x66F9, 0xB1E5, 0x52D7, 0xB1E6, 0x671B, 0xB1E7, 0x6881, - 0xB1E8, 0x68AF, 0xB1E9, 0x68A2, 0xB1EA, 0x6893, 0xB1EB, 0x68B5, - 0xB1EC, 0x687F, 0xB1ED, 0x6876, 0xB1EE, 0x68B1, 0xB1EF, 0x68A7, - 0xB1F0, 0x6897, 0xB1F1, 0x68B0, 0xB1F2, 0x6883, 0xB1F3, 0x68C4, - 0xB1F4, 0x68AD, 0xB1F5, 0x6886, 0xB1F6, 0x6885, 0xB1F7, 0x6894, - 0xB1F8, 0x689D, 0xB1F9, 0x68A8, 0xB1FA, 0x689F, 0xB1FB, 0x68A1, - 0xB1FC, 0x6882, 0xB1FD, 0x6B32, 0xB1FE, 0x6BBA, 0xB240, 0x6BEB, - 0xB241, 0x6BEC, 0xB242, 0x6C2B, 0xB243, 0x6D8E, 0xB244, 0x6DBC, - 0xB245, 0x6DF3, 0xB246, 0x6DD9, 0xB247, 0x6DB2, 0xB248, 0x6DE1, - 0xB249, 0x6DCC, 0xB24A, 0x6DE4, 0xB24B, 0x6DFB, 0xB24C, 0x6DFA, - 0xB24D, 0x6E05, 0xB24E, 0x6DC7, 0xB24F, 0x6DCB, 0xB250, 0x6DAF, - 0xB251, 0x6DD1, 0xB252, 0x6DAE, 0xB253, 0x6DDE, 0xB254, 0x6DF9, - 0xB255, 0x6DB8, 0xB256, 0x6DF7, 0xB257, 0x6DF5, 0xB258, 0x6DC5, - 0xB259, 0x6DD2, 0xB25A, 0x6E1A, 0xB25B, 0x6DB5, 0xB25C, 0x6DDA, - 0xB25D, 0x6DEB, 0xB25E, 0x6DD8, 0xB25F, 0x6DEA, 0xB260, 0x6DF1, - 0xB261, 0x6DEE, 0xB262, 0x6DE8, 0xB263, 0x6DC6, 0xB264, 0x6DC4, - 0xB265, 0x6DAA, 0xB266, 0x6DEC, 0xB267, 0x6DBF, 0xB268, 0x6DE6, - 0xB269, 0x70F9, 0xB26A, 0x7109, 0xB26B, 0x710A, 0xB26C, 0x70FD, - 0xB26D, 0x70EF, 0xB26E, 0x723D, 0xB26F, 0x727D, 0xB270, 0x7281, - 0xB271, 0x731C, 0xB272, 0x731B, 0xB273, 0x7316, 0xB274, 0x7313, - 0xB275, 0x7319, 0xB276, 0x7387, 0xB277, 0x7405, 0xB278, 0x740A, - 0xB279, 0x7403, 0xB27A, 0x7406, 0xB27B, 0x73FE, 0xB27C, 0x740D, - 0xB27D, 0x74E0, 0xB27E, 0x74F6, 0xB2A1, 0x74F7, 0xB2A2, 0x751C, - 0xB2A3, 0x7522, 0xB2A4, 0x7565, 0xB2A5, 0x7566, 0xB2A6, 0x7562, - 0xB2A7, 0x7570, 0xB2A8, 0x758F, 0xB2A9, 0x75D4, 0xB2AA, 0x75D5, - 0xB2AB, 0x75B5, 0xB2AC, 0x75CA, 0xB2AD, 0x75CD, 0xB2AE, 0x768E, - 0xB2AF, 0x76D4, 0xB2B0, 0x76D2, 0xB2B1, 0x76DB, 0xB2B2, 0x7737, - 0xB2B3, 0x773E, 0xB2B4, 0x773C, 0xB2B5, 0x7736, 0xB2B6, 0x7738, - 0xB2B7, 0x773A, 0xB2B8, 0x786B, 0xB2B9, 0x7843, 0xB2BA, 0x784E, - 0xB2BB, 0x7965, 0xB2BC, 0x7968, 0xB2BD, 0x796D, 0xB2BE, 0x79FB, - 0xB2BF, 0x7A92, 0xB2C0, 0x7A95, 0xB2C1, 0x7B20, 0xB2C2, 0x7B28, - 0xB2C3, 0x7B1B, 0xB2C4, 0x7B2C, 0xB2C5, 0x7B26, 0xB2C6, 0x7B19, - 0xB2C7, 0x7B1E, 0xB2C8, 0x7B2E, 0xB2C9, 0x7C92, 0xB2CA, 0x7C97, - 0xB2CB, 0x7C95, 0xB2CC, 0x7D46, 0xB2CD, 0x7D43, 0xB2CE, 0x7D71, - 0xB2CF, 0x7D2E, 0xB2D0, 0x7D39, 0xB2D1, 0x7D3C, 0xB2D2, 0x7D40, - 0xB2D3, 0x7D30, 0xB2D4, 0x7D33, 0xB2D5, 0x7D44, 0xB2D6, 0x7D2F, - 0xB2D7, 0x7D42, 0xB2D8, 0x7D32, 0xB2D9, 0x7D31, 0xB2DA, 0x7F3D, - 0xB2DB, 0x7F9E, 0xB2DC, 0x7F9A, 0xB2DD, 0x7FCC, 0xB2DE, 0x7FCE, - 0xB2DF, 0x7FD2, 0xB2E0, 0x801C, 0xB2E1, 0x804A, 0xB2E2, 0x8046, - 0xB2E3, 0x812F, 0xB2E4, 0x8116, 0xB2E5, 0x8123, 0xB2E6, 0x812B, - 0xB2E7, 0x8129, 0xB2E8, 0x8130, 0xB2E9, 0x8124, 0xB2EA, 0x8202, - 0xB2EB, 0x8235, 0xB2EC, 0x8237, 0xB2ED, 0x8236, 0xB2EE, 0x8239, - 0xB2EF, 0x838E, 0xB2F0, 0x839E, 0xB2F1, 0x8398, 0xB2F2, 0x8378, - 0xB2F3, 0x83A2, 0xB2F4, 0x8396, 0xB2F5, 0x83BD, 0xB2F6, 0x83AB, - 0xB2F7, 0x8392, 0xB2F8, 0x838A, 0xB2F9, 0x8393, 0xB2FA, 0x8389, - 0xB2FB, 0x83A0, 0xB2FC, 0x8377, 0xB2FD, 0x837B, 0xB2FE, 0x837C, - 0xB340, 0x8386, 0xB341, 0x83A7, 0xB342, 0x8655, 0xB343, 0x5F6A, - 0xB344, 0x86C7, 0xB345, 0x86C0, 0xB346, 0x86B6, 0xB347, 0x86C4, - 0xB348, 0x86B5, 0xB349, 0x86C6, 0xB34A, 0x86CB, 0xB34B, 0x86B1, - 0xB34C, 0x86AF, 0xB34D, 0x86C9, 0xB34E, 0x8853, 0xB34F, 0x889E, - 0xB350, 0x8888, 0xB351, 0x88AB, 0xB352, 0x8892, 0xB353, 0x8896, - 0xB354, 0x888D, 0xB355, 0x888B, 0xB356, 0x8993, 0xB357, 0x898F, - 0xB358, 0x8A2A, 0xB359, 0x8A1D, 0xB35A, 0x8A23, 0xB35B, 0x8A25, - 0xB35C, 0x8A31, 0xB35D, 0x8A2D, 0xB35E, 0x8A1F, 0xB35F, 0x8A1B, - 0xB360, 0x8A22, 0xB361, 0x8C49, 0xB362, 0x8C5A, 0xB363, 0x8CA9, - 0xB364, 0x8CAC, 0xB365, 0x8CAB, 0xB366, 0x8CA8, 0xB367, 0x8CAA, - 0xB368, 0x8CA7, 0xB369, 0x8D67, 0xB36A, 0x8D66, 0xB36B, 0x8DBE, - 0xB36C, 0x8DBA, 0xB36D, 0x8EDB, 0xB36E, 0x8EDF, 0xB36F, 0x9019, - 0xB370, 0x900D, 0xB371, 0x901A, 0xB372, 0x9017, 0xB373, 0x9023, - 0xB374, 0x901F, 0xB375, 0x901D, 0xB376, 0x9010, 0xB377, 0x9015, - 0xB378, 0x901E, 0xB379, 0x9020, 0xB37A, 0x900F, 0xB37B, 0x9022, - 0xB37C, 0x9016, 0xB37D, 0x901B, 0xB37E, 0x9014, 0xB3A1, 0x90E8, - 0xB3A2, 0x90ED, 0xB3A3, 0x90FD, 0xB3A4, 0x9157, 0xB3A5, 0x91CE, - 0xB3A6, 0x91F5, 0xB3A7, 0x91E6, 0xB3A8, 0x91E3, 0xB3A9, 0x91E7, - 0xB3AA, 0x91ED, 0xB3AB, 0x91E9, 0xB3AC, 0x9589, 0xB3AD, 0x966A, - 0xB3AE, 0x9675, 0xB3AF, 0x9673, 0xB3B0, 0x9678, 0xB3B1, 0x9670, - 0xB3B2, 0x9674, 0xB3B3, 0x9676, 0xB3B4, 0x9677, 0xB3B5, 0x966C, - 0xB3B6, 0x96C0, 0xB3B7, 0x96EA, 0xB3B8, 0x96E9, 0xB3B9, 0x7AE0, - 0xB3BA, 0x7ADF, 0xB3BB, 0x9802, 0xB3BC, 0x9803, 0xB3BD, 0x9B5A, - 0xB3BE, 0x9CE5, 0xB3BF, 0x9E75, 0xB3C0, 0x9E7F, 0xB3C1, 0x9EA5, - 0xB3C2, 0x9EBB, 0xB3C3, 0x50A2, 0xB3C4, 0x508D, 0xB3C5, 0x5085, - 0xB3C6, 0x5099, 0xB3C7, 0x5091, 0xB3C8, 0x5080, 0xB3C9, 0x5096, - 0xB3CA, 0x5098, 0xB3CB, 0x509A, 0xB3CC, 0x6700, 0xB3CD, 0x51F1, - 0xB3CE, 0x5272, 0xB3CF, 0x5274, 0xB3D0, 0x5275, 0xB3D1, 0x5269, - 0xB3D2, 0x52DE, 0xB3D3, 0x52DD, 0xB3D4, 0x52DB, 0xB3D5, 0x535A, - 0xB3D6, 0x53A5, 0xB3D7, 0x557B, 0xB3D8, 0x5580, 0xB3D9, 0x55A7, - 0xB3DA, 0x557C, 0xB3DB, 0x558A, 0xB3DC, 0x559D, 0xB3DD, 0x5598, - 0xB3DE, 0x5582, 0xB3DF, 0x559C, 0xB3E0, 0x55AA, 0xB3E1, 0x5594, - 0xB3E2, 0x5587, 0xB3E3, 0x558B, 0xB3E4, 0x5583, 0xB3E5, 0x55B3, - 0xB3E6, 0x55AE, 0xB3E7, 0x559F, 0xB3E8, 0x553E, 0xB3E9, 0x55B2, - 0xB3EA, 0x559A, 0xB3EB, 0x55BB, 0xB3EC, 0x55AC, 0xB3ED, 0x55B1, - 0xB3EE, 0x557E, 0xB3EF, 0x5589, 0xB3F0, 0x55AB, 0xB3F1, 0x5599, - 0xB3F2, 0x570D, 0xB3F3, 0x582F, 0xB3F4, 0x582A, 0xB3F5, 0x5834, - 0xB3F6, 0x5824, 0xB3F7, 0x5830, 0xB3F8, 0x5831, 0xB3F9, 0x5821, - 0xB3FA, 0x581D, 0xB3FB, 0x5820, 0xB3FC, 0x58F9, 0xB3FD, 0x58FA, - 0xB3FE, 0x5960, 0xB440, 0x5A77, 0xB441, 0x5A9A, 0xB442, 0x5A7F, - 0xB443, 0x5A92, 0xB444, 0x5A9B, 0xB445, 0x5AA7, 0xB446, 0x5B73, - 0xB447, 0x5B71, 0xB448, 0x5BD2, 0xB449, 0x5BCC, 0xB44A, 0x5BD3, - 0xB44B, 0x5BD0, 0xB44C, 0x5C0A, 0xB44D, 0x5C0B, 0xB44E, 0x5C31, - 0xB44F, 0x5D4C, 0xB450, 0x5D50, 0xB451, 0x5D34, 0xB452, 0x5D47, - 0xB453, 0x5DFD, 0xB454, 0x5E45, 0xB455, 0x5E3D, 0xB456, 0x5E40, - 0xB457, 0x5E43, 0xB458, 0x5E7E, 0xB459, 0x5ECA, 0xB45A, 0x5EC1, - 0xB45B, 0x5EC2, 0xB45C, 0x5EC4, 0xB45D, 0x5F3C, 0xB45E, 0x5F6D, - 0xB45F, 0x5FA9, 0xB460, 0x5FAA, 0xB461, 0x5FA8, 0xB462, 0x60D1, - 0xB463, 0x60E1, 0xB464, 0x60B2, 0xB465, 0x60B6, 0xB466, 0x60E0, - 0xB467, 0x611C, 0xB468, 0x6123, 0xB469, 0x60FA, 0xB46A, 0x6115, - 0xB46B, 0x60F0, 0xB46C, 0x60FB, 0xB46D, 0x60F4, 0xB46E, 0x6168, - 0xB46F, 0x60F1, 0xB470, 0x610E, 0xB471, 0x60F6, 0xB472, 0x6109, - 0xB473, 0x6100, 0xB474, 0x6112, 0xB475, 0x621F, 0xB476, 0x6249, - 0xB477, 0x63A3, 0xB478, 0x638C, 0xB479, 0x63CF, 0xB47A, 0x63C0, - 0xB47B, 0x63E9, 0xB47C, 0x63C9, 0xB47D, 0x63C6, 0xB47E, 0x63CD, - 0xB4A1, 0x63D2, 0xB4A2, 0x63E3, 0xB4A3, 0x63D0, 0xB4A4, 0x63E1, - 0xB4A5, 0x63D6, 0xB4A6, 0x63ED, 0xB4A7, 0x63EE, 0xB4A8, 0x6376, - 0xB4A9, 0x63F4, 0xB4AA, 0x63EA, 0xB4AB, 0x63DB, 0xB4AC, 0x6452, - 0xB4AD, 0x63DA, 0xB4AE, 0x63F9, 0xB4AF, 0x655E, 0xB4B0, 0x6566, - 0xB4B1, 0x6562, 0xB4B2, 0x6563, 0xB4B3, 0x6591, 0xB4B4, 0x6590, - 0xB4B5, 0x65AF, 0xB4B6, 0x666E, 0xB4B7, 0x6670, 0xB4B8, 0x6674, - 0xB4B9, 0x6676, 0xB4BA, 0x666F, 0xB4BB, 0x6691, 0xB4BC, 0x667A, - 0xB4BD, 0x667E, 0xB4BE, 0x6677, 0xB4BF, 0x66FE, 0xB4C0, 0x66FF, - 0xB4C1, 0x671F, 0xB4C2, 0x671D, 0xB4C3, 0x68FA, 0xB4C4, 0x68D5, - 0xB4C5, 0x68E0, 0xB4C6, 0x68D8, 0xB4C7, 0x68D7, 0xB4C8, 0x6905, - 0xB4C9, 0x68DF, 0xB4CA, 0x68F5, 0xB4CB, 0x68EE, 0xB4CC, 0x68E7, - 0xB4CD, 0x68F9, 0xB4CE, 0x68D2, 0xB4CF, 0x68F2, 0xB4D0, 0x68E3, - 0xB4D1, 0x68CB, 0xB4D2, 0x68CD, 0xB4D3, 0x690D, 0xB4D4, 0x6912, - 0xB4D5, 0x690E, 0xB4D6, 0x68C9, 0xB4D7, 0x68DA, 0xB4D8, 0x696E, - 0xB4D9, 0x68FB, 0xB4DA, 0x6B3E, 0xB4DB, 0x6B3A, 0xB4DC, 0x6B3D, - 0xB4DD, 0x6B98, 0xB4DE, 0x6B96, 0xB4DF, 0x6BBC, 0xB4E0, 0x6BEF, - 0xB4E1, 0x6C2E, 0xB4E2, 0x6C2F, 0xB4E3, 0x6C2C, 0xB4E4, 0x6E2F, - 0xB4E5, 0x6E38, 0xB4E6, 0x6E54, 0xB4E7, 0x6E21, 0xB4E8, 0x6E32, - 0xB4E9, 0x6E67, 0xB4EA, 0x6E4A, 0xB4EB, 0x6E20, 0xB4EC, 0x6E25, - 0xB4ED, 0x6E23, 0xB4EE, 0x6E1B, 0xB4EF, 0x6E5B, 0xB4F0, 0x6E58, - 0xB4F1, 0x6E24, 0xB4F2, 0x6E56, 0xB4F3, 0x6E6E, 0xB4F4, 0x6E2D, - 0xB4F5, 0x6E26, 0xB4F6, 0x6E6F, 0xB4F7, 0x6E34, 0xB4F8, 0x6E4D, - 0xB4F9, 0x6E3A, 0xB4FA, 0x6E2C, 0xB4FB, 0x6E43, 0xB4FC, 0x6E1D, - 0xB4FD, 0x6E3E, 0xB4FE, 0x6ECB, 0xB540, 0x6E89, 0xB541, 0x6E19, - 0xB542, 0x6E4E, 0xB543, 0x6E63, 0xB544, 0x6E44, 0xB545, 0x6E72, - 0xB546, 0x6E69, 0xB547, 0x6E5F, 0xB548, 0x7119, 0xB549, 0x711A, - 0xB54A, 0x7126, 0xB54B, 0x7130, 0xB54C, 0x7121, 0xB54D, 0x7136, - 0xB54E, 0x716E, 0xB54F, 0x711C, 0xB550, 0x724C, 0xB551, 0x7284, - 0xB552, 0x7280, 0xB553, 0x7336, 0xB554, 0x7325, 0xB555, 0x7334, - 0xB556, 0x7329, 0xB557, 0x743A, 0xB558, 0x742A, 0xB559, 0x7433, - 0xB55A, 0x7422, 0xB55B, 0x7425, 0xB55C, 0x7435, 0xB55D, 0x7436, - 0xB55E, 0x7434, 0xB55F, 0x742F, 0xB560, 0x741B, 0xB561, 0x7426, - 0xB562, 0x7428, 0xB563, 0x7525, 0xB564, 0x7526, 0xB565, 0x756B, - 0xB566, 0x756A, 0xB567, 0x75E2, 0xB568, 0x75DB, 0xB569, 0x75E3, - 0xB56A, 0x75D9, 0xB56B, 0x75D8, 0xB56C, 0x75DE, 0xB56D, 0x75E0, - 0xB56E, 0x767B, 0xB56F, 0x767C, 0xB570, 0x7696, 0xB571, 0x7693, - 0xB572, 0x76B4, 0xB573, 0x76DC, 0xB574, 0x774F, 0xB575, 0x77ED, - 0xB576, 0x785D, 0xB577, 0x786C, 0xB578, 0x786F, 0xB579, 0x7A0D, - 0xB57A, 0x7A08, 0xB57B, 0x7A0B, 0xB57C, 0x7A05, 0xB57D, 0x7A00, - 0xB57E, 0x7A98, 0xB5A1, 0x7A97, 0xB5A2, 0x7A96, 0xB5A3, 0x7AE5, - 0xB5A4, 0x7AE3, 0xB5A5, 0x7B49, 0xB5A6, 0x7B56, 0xB5A7, 0x7B46, - 0xB5A8, 0x7B50, 0xB5A9, 0x7B52, 0xB5AA, 0x7B54, 0xB5AB, 0x7B4D, - 0xB5AC, 0x7B4B, 0xB5AD, 0x7B4F, 0xB5AE, 0x7B51, 0xB5AF, 0x7C9F, - 0xB5B0, 0x7CA5, 0xB5B1, 0x7D5E, 0xB5B2, 0x7D50, 0xB5B3, 0x7D68, - 0xB5B4, 0x7D55, 0xB5B5, 0x7D2B, 0xB5B6, 0x7D6E, 0xB5B7, 0x7D72, - 0xB5B8, 0x7D61, 0xB5B9, 0x7D66, 0xB5BA, 0x7D62, 0xB5BB, 0x7D70, - 0xB5BC, 0x7D73, 0xB5BD, 0x5584, 0xB5BE, 0x7FD4, 0xB5BF, 0x7FD5, - 0xB5C0, 0x800B, 0xB5C1, 0x8052, 0xB5C2, 0x8085, 0xB5C3, 0x8155, - 0xB5C4, 0x8154, 0xB5C5, 0x814B, 0xB5C6, 0x8151, 0xB5C7, 0x814E, - 0xB5C8, 0x8139, 0xB5C9, 0x8146, 0xB5CA, 0x813E, 0xB5CB, 0x814C, - 0xB5CC, 0x8153, 0xB5CD, 0x8174, 0xB5CE, 0x8212, 0xB5CF, 0x821C, - 0xB5D0, 0x83E9, 0xB5D1, 0x8403, 0xB5D2, 0x83F8, 0xB5D3, 0x840D, - 0xB5D4, 0x83E0, 0xB5D5, 0x83C5, 0xB5D6, 0x840B, 0xB5D7, 0x83C1, - 0xB5D8, 0x83EF, 0xB5D9, 0x83F1, 0xB5DA, 0x83F4, 0xB5DB, 0x8457, - 0xB5DC, 0x840A, 0xB5DD, 0x83F0, 0xB5DE, 0x840C, 0xB5DF, 0x83CC, - 0xB5E0, 0x83FD, 0xB5E1, 0x83F2, 0xB5E2, 0x83CA, 0xB5E3, 0x8438, - 0xB5E4, 0x840E, 0xB5E5, 0x8404, 0xB5E6, 0x83DC, 0xB5E7, 0x8407, - 0xB5E8, 0x83D4, 0xB5E9, 0x83DF, 0xB5EA, 0x865B, 0xB5EB, 0x86DF, - 0xB5EC, 0x86D9, 0xB5ED, 0x86ED, 0xB5EE, 0x86D4, 0xB5EF, 0x86DB, - 0xB5F0, 0x86E4, 0xB5F1, 0x86D0, 0xB5F2, 0x86DE, 0xB5F3, 0x8857, - 0xB5F4, 0x88C1, 0xB5F5, 0x88C2, 0xB5F6, 0x88B1, 0xB5F7, 0x8983, - 0xB5F8, 0x8996, 0xB5F9, 0x8A3B, 0xB5FA, 0x8A60, 0xB5FB, 0x8A55, - 0xB5FC, 0x8A5E, 0xB5FD, 0x8A3C, 0xB5FE, 0x8A41, 0xB640, 0x8A54, - 0xB641, 0x8A5B, 0xB642, 0x8A50, 0xB643, 0x8A46, 0xB644, 0x8A34, - 0xB645, 0x8A3A, 0xB646, 0x8A36, 0xB647, 0x8A56, 0xB648, 0x8C61, - 0xB649, 0x8C82, 0xB64A, 0x8CAF, 0xB64B, 0x8CBC, 0xB64C, 0x8CB3, - 0xB64D, 0x8CBD, 0xB64E, 0x8CC1, 0xB64F, 0x8CBB, 0xB650, 0x8CC0, - 0xB651, 0x8CB4, 0xB652, 0x8CB7, 0xB653, 0x8CB6, 0xB654, 0x8CBF, - 0xB655, 0x8CB8, 0xB656, 0x8D8A, 0xB657, 0x8D85, 0xB658, 0x8D81, - 0xB659, 0x8DCE, 0xB65A, 0x8DDD, 0xB65B, 0x8DCB, 0xB65C, 0x8DDA, - 0xB65D, 0x8DD1, 0xB65E, 0x8DCC, 0xB65F, 0x8DDB, 0xB660, 0x8DC6, - 0xB661, 0x8EFB, 0xB662, 0x8EF8, 0xB663, 0x8EFC, 0xB664, 0x8F9C, - 0xB665, 0x902E, 0xB666, 0x9035, 0xB667, 0x9031, 0xB668, 0x9038, - 0xB669, 0x9032, 0xB66A, 0x9036, 0xB66B, 0x9102, 0xB66C, 0x90F5, - 0xB66D, 0x9109, 0xB66E, 0x90FE, 0xB66F, 0x9163, 0xB670, 0x9165, - 0xB671, 0x91CF, 0xB672, 0x9214, 0xB673, 0x9215, 0xB674, 0x9223, - 0xB675, 0x9209, 0xB676, 0x921E, 0xB677, 0x920D, 0xB678, 0x9210, - 0xB679, 0x9207, 0xB67A, 0x9211, 0xB67B, 0x9594, 0xB67C, 0x958F, - 0xB67D, 0x958B, 0xB67E, 0x9591, 0xB6A1, 0x9593, 0xB6A2, 0x9592, - 0xB6A3, 0x958E, 0xB6A4, 0x968A, 0xB6A5, 0x968E, 0xB6A6, 0x968B, - 0xB6A7, 0x967D, 0xB6A8, 0x9685, 0xB6A9, 0x9686, 0xB6AA, 0x968D, - 0xB6AB, 0x9672, 0xB6AC, 0x9684, 0xB6AD, 0x96C1, 0xB6AE, 0x96C5, - 0xB6AF, 0x96C4, 0xB6B0, 0x96C6, 0xB6B1, 0x96C7, 0xB6B2, 0x96EF, - 0xB6B3, 0x96F2, 0xB6B4, 0x97CC, 0xB6B5, 0x9805, 0xB6B6, 0x9806, - 0xB6B7, 0x9808, 0xB6B8, 0x98E7, 0xB6B9, 0x98EA, 0xB6BA, 0x98EF, - 0xB6BB, 0x98E9, 0xB6BC, 0x98F2, 0xB6BD, 0x98ED, 0xB6BE, 0x99AE, - 0xB6BF, 0x99AD, 0xB6C0, 0x9EC3, 0xB6C1, 0x9ECD, 0xB6C2, 0x9ED1, - 0xB6C3, 0x4E82, 0xB6C4, 0x50AD, 0xB6C5, 0x50B5, 0xB6C6, 0x50B2, - 0xB6C7, 0x50B3, 0xB6C8, 0x50C5, 0xB6C9, 0x50BE, 0xB6CA, 0x50AC, - 0xB6CB, 0x50B7, 0xB6CC, 0x50BB, 0xB6CD, 0x50AF, 0xB6CE, 0x50C7, - 0xB6CF, 0x527F, 0xB6D0, 0x5277, 0xB6D1, 0x527D, 0xB6D2, 0x52DF, - 0xB6D3, 0x52E6, 0xB6D4, 0x52E4, 0xB6D5, 0x52E2, 0xB6D6, 0x52E3, - 0xB6D7, 0x532F, 0xB6D8, 0x55DF, 0xB6D9, 0x55E8, 0xB6DA, 0x55D3, - 0xB6DB, 0x55E6, 0xB6DC, 0x55CE, 0xB6DD, 0x55DC, 0xB6DE, 0x55C7, - 0xB6DF, 0x55D1, 0xB6E0, 0x55E3, 0xB6E1, 0x55E4, 0xB6E2, 0x55EF, - 0xB6E3, 0x55DA, 0xB6E4, 0x55E1, 0xB6E5, 0x55C5, 0xB6E6, 0x55C6, - 0xB6E7, 0x55E5, 0xB6E8, 0x55C9, 0xB6E9, 0x5712, 0xB6EA, 0x5713, - 0xB6EB, 0x585E, 0xB6EC, 0x5851, 0xB6ED, 0x5858, 0xB6EE, 0x5857, - 0xB6EF, 0x585A, 0xB6F0, 0x5854, 0xB6F1, 0x586B, 0xB6F2, 0x584C, - 0xB6F3, 0x586D, 0xB6F4, 0x584A, 0xB6F5, 0x5862, 0xB6F6, 0x5852, - 0xB6F7, 0x584B, 0xB6F8, 0x5967, 0xB6F9, 0x5AC1, 0xB6FA, 0x5AC9, - 0xB6FB, 0x5ACC, 0xB6FC, 0x5ABE, 0xB6FD, 0x5ABD, 0xB6FE, 0x5ABC, - 0xB740, 0x5AB3, 0xB741, 0x5AC2, 0xB742, 0x5AB2, 0xB743, 0x5D69, - 0xB744, 0x5D6F, 0xB745, 0x5E4C, 0xB746, 0x5E79, 0xB747, 0x5EC9, - 0xB748, 0x5EC8, 0xB749, 0x5F12, 0xB74A, 0x5F59, 0xB74B, 0x5FAC, - 0xB74C, 0x5FAE, 0xB74D, 0x611A, 0xB74E, 0x610F, 0xB74F, 0x6148, - 0xB750, 0x611F, 0xB751, 0x60F3, 0xB752, 0x611B, 0xB753, 0x60F9, - 0xB754, 0x6101, 0xB755, 0x6108, 0xB756, 0x614E, 0xB757, 0x614C, - 0xB758, 0x6144, 0xB759, 0x614D, 0xB75A, 0x613E, 0xB75B, 0x6134, - 0xB75C, 0x6127, 0xB75D, 0x610D, 0xB75E, 0x6106, 0xB75F, 0x6137, - 0xB760, 0x6221, 0xB761, 0x6222, 0xB762, 0x6413, 0xB763, 0x643E, - 0xB764, 0x641E, 0xB765, 0x642A, 0xB766, 0x642D, 0xB767, 0x643D, - 0xB768, 0x642C, 0xB769, 0x640F, 0xB76A, 0x641C, 0xB76B, 0x6414, - 0xB76C, 0x640D, 0xB76D, 0x6436, 0xB76E, 0x6416, 0xB76F, 0x6417, - 0xB770, 0x6406, 0xB771, 0x656C, 0xB772, 0x659F, 0xB773, 0x65B0, - 0xB774, 0x6697, 0xB775, 0x6689, 0xB776, 0x6687, 0xB777, 0x6688, - 0xB778, 0x6696, 0xB779, 0x6684, 0xB77A, 0x6698, 0xB77B, 0x668D, - 0xB77C, 0x6703, 0xB77D, 0x6994, 0xB77E, 0x696D, 0xB7A1, 0x695A, - 0xB7A2, 0x6977, 0xB7A3, 0x6960, 0xB7A4, 0x6954, 0xB7A5, 0x6975, - 0xB7A6, 0x6930, 0xB7A7, 0x6982, 0xB7A8, 0x694A, 0xB7A9, 0x6968, - 0xB7AA, 0x696B, 0xB7AB, 0x695E, 0xB7AC, 0x6953, 0xB7AD, 0x6979, - 0xB7AE, 0x6986, 0xB7AF, 0x695D, 0xB7B0, 0x6963, 0xB7B1, 0x695B, - 0xB7B2, 0x6B47, 0xB7B3, 0x6B72, 0xB7B4, 0x6BC0, 0xB7B5, 0x6BBF, - 0xB7B6, 0x6BD3, 0xB7B7, 0x6BFD, 0xB7B8, 0x6EA2, 0xB7B9, 0x6EAF, - 0xB7BA, 0x6ED3, 0xB7BB, 0x6EB6, 0xB7BC, 0x6EC2, 0xB7BD, 0x6E90, - 0xB7BE, 0x6E9D, 0xB7BF, 0x6EC7, 0xB7C0, 0x6EC5, 0xB7C1, 0x6EA5, - 0xB7C2, 0x6E98, 0xB7C3, 0x6EBC, 0xB7C4, 0x6EBA, 0xB7C5, 0x6EAB, - 0xB7C6, 0x6ED1, 0xB7C7, 0x6E96, 0xB7C8, 0x6E9C, 0xB7C9, 0x6EC4, - 0xB7CA, 0x6ED4, 0xB7CB, 0x6EAA, 0xB7CC, 0x6EA7, 0xB7CD, 0x6EB4, - 0xB7CE, 0x714E, 0xB7CF, 0x7159, 0xB7D0, 0x7169, 0xB7D1, 0x7164, - 0xB7D2, 0x7149, 0xB7D3, 0x7167, 0xB7D4, 0x715C, 0xB7D5, 0x716C, - 0xB7D6, 0x7166, 0xB7D7, 0x714C, 0xB7D8, 0x7165, 0xB7D9, 0x715E, - 0xB7DA, 0x7146, 0xB7DB, 0x7168, 0xB7DC, 0x7156, 0xB7DD, 0x723A, - 0xB7DE, 0x7252, 0xB7DF, 0x7337, 0xB7E0, 0x7345, 0xB7E1, 0x733F, - 0xB7E2, 0x733E, 0xB7E3, 0x746F, 0xB7E4, 0x745A, 0xB7E5, 0x7455, - 0xB7E6, 0x745F, 0xB7E7, 0x745E, 0xB7E8, 0x7441, 0xB7E9, 0x743F, - 0xB7EA, 0x7459, 0xB7EB, 0x745B, 0xB7EC, 0x745C, 0xB7ED, 0x7576, - 0xB7EE, 0x7578, 0xB7EF, 0x7600, 0xB7F0, 0x75F0, 0xB7F1, 0x7601, - 0xB7F2, 0x75F2, 0xB7F3, 0x75F1, 0xB7F4, 0x75FA, 0xB7F5, 0x75FF, - 0xB7F6, 0x75F4, 0xB7F7, 0x75F3, 0xB7F8, 0x76DE, 0xB7F9, 0x76DF, - 0xB7FA, 0x775B, 0xB7FB, 0x776B, 0xB7FC, 0x7766, 0xB7FD, 0x775E, - 0xB7FE, 0x7763, 0xB840, 0x7779, 0xB841, 0x776A, 0xB842, 0x776C, - 0xB843, 0x775C, 0xB844, 0x7765, 0xB845, 0x7768, 0xB846, 0x7762, - 0xB847, 0x77EE, 0xB848, 0x788E, 0xB849, 0x78B0, 0xB84A, 0x7897, - 0xB84B, 0x7898, 0xB84C, 0x788C, 0xB84D, 0x7889, 0xB84E, 0x787C, - 0xB84F, 0x7891, 0xB850, 0x7893, 0xB851, 0x787F, 0xB852, 0x797A, - 0xB853, 0x797F, 0xB854, 0x7981, 0xB855, 0x842C, 0xB856, 0x79BD, - 0xB857, 0x7A1C, 0xB858, 0x7A1A, 0xB859, 0x7A20, 0xB85A, 0x7A14, - 0xB85B, 0x7A1F, 0xB85C, 0x7A1E, 0xB85D, 0x7A9F, 0xB85E, 0x7AA0, - 0xB85F, 0x7B77, 0xB860, 0x7BC0, 0xB861, 0x7B60, 0xB862, 0x7B6E, - 0xB863, 0x7B67, 0xB864, 0x7CB1, 0xB865, 0x7CB3, 0xB866, 0x7CB5, - 0xB867, 0x7D93, 0xB868, 0x7D79, 0xB869, 0x7D91, 0xB86A, 0x7D81, - 0xB86B, 0x7D8F, 0xB86C, 0x7D5B, 0xB86D, 0x7F6E, 0xB86E, 0x7F69, - 0xB86F, 0x7F6A, 0xB870, 0x7F72, 0xB871, 0x7FA9, 0xB872, 0x7FA8, - 0xB873, 0x7FA4, 0xB874, 0x8056, 0xB875, 0x8058, 0xB876, 0x8086, - 0xB877, 0x8084, 0xB878, 0x8171, 0xB879, 0x8170, 0xB87A, 0x8178, - 0xB87B, 0x8165, 0xB87C, 0x816E, 0xB87D, 0x8173, 0xB87E, 0x816B, - 0xB8A1, 0x8179, 0xB8A2, 0x817A, 0xB8A3, 0x8166, 0xB8A4, 0x8205, - 0xB8A5, 0x8247, 0xB8A6, 0x8482, 0xB8A7, 0x8477, 0xB8A8, 0x843D, - 0xB8A9, 0x8431, 0xB8AA, 0x8475, 0xB8AB, 0x8466, 0xB8AC, 0x846B, - 0xB8AD, 0x8449, 0xB8AE, 0x846C, 0xB8AF, 0x845B, 0xB8B0, 0x843C, - 0xB8B1, 0x8435, 0xB8B2, 0x8461, 0xB8B3, 0x8463, 0xB8B4, 0x8469, - 0xB8B5, 0x846D, 0xB8B6, 0x8446, 0xB8B7, 0x865E, 0xB8B8, 0x865C, - 0xB8B9, 0x865F, 0xB8BA, 0x86F9, 0xB8BB, 0x8713, 0xB8BC, 0x8708, - 0xB8BD, 0x8707, 0xB8BE, 0x8700, 0xB8BF, 0x86FE, 0xB8C0, 0x86FB, - 0xB8C1, 0x8702, 0xB8C2, 0x8703, 0xB8C3, 0x8706, 0xB8C4, 0x870A, - 0xB8C5, 0x8859, 0xB8C6, 0x88DF, 0xB8C7, 0x88D4, 0xB8C8, 0x88D9, - 0xB8C9, 0x88DC, 0xB8CA, 0x88D8, 0xB8CB, 0x88DD, 0xB8CC, 0x88E1, - 0xB8CD, 0x88CA, 0xB8CE, 0x88D5, 0xB8CF, 0x88D2, 0xB8D0, 0x899C, - 0xB8D1, 0x89E3, 0xB8D2, 0x8A6B, 0xB8D3, 0x8A72, 0xB8D4, 0x8A73, - 0xB8D5, 0x8A66, 0xB8D6, 0x8A69, 0xB8D7, 0x8A70, 0xB8D8, 0x8A87, - 0xB8D9, 0x8A7C, 0xB8DA, 0x8A63, 0xB8DB, 0x8AA0, 0xB8DC, 0x8A71, - 0xB8DD, 0x8A85, 0xB8DE, 0x8A6D, 0xB8DF, 0x8A62, 0xB8E0, 0x8A6E, - 0xB8E1, 0x8A6C, 0xB8E2, 0x8A79, 0xB8E3, 0x8A7B, 0xB8E4, 0x8A3E, - 0xB8E5, 0x8A68, 0xB8E6, 0x8C62, 0xB8E7, 0x8C8A, 0xB8E8, 0x8C89, - 0xB8E9, 0x8CCA, 0xB8EA, 0x8CC7, 0xB8EB, 0x8CC8, 0xB8EC, 0x8CC4, - 0xB8ED, 0x8CB2, 0xB8EE, 0x8CC3, 0xB8EF, 0x8CC2, 0xB8F0, 0x8CC5, - 0xB8F1, 0x8DE1, 0xB8F2, 0x8DDF, 0xB8F3, 0x8DE8, 0xB8F4, 0x8DEF, - 0xB8F5, 0x8DF3, 0xB8F6, 0x8DFA, 0xB8F7, 0x8DEA, 0xB8F8, 0x8DE4, - 0xB8F9, 0x8DE6, 0xB8FA, 0x8EB2, 0xB8FB, 0x8F03, 0xB8FC, 0x8F09, - 0xB8FD, 0x8EFE, 0xB8FE, 0x8F0A, 0xB940, 0x8F9F, 0xB941, 0x8FB2, - 0xB942, 0x904B, 0xB943, 0x904A, 0xB944, 0x9053, 0xB945, 0x9042, - 0xB946, 0x9054, 0xB947, 0x903C, 0xB948, 0x9055, 0xB949, 0x9050, - 0xB94A, 0x9047, 0xB94B, 0x904F, 0xB94C, 0x904E, 0xB94D, 0x904D, - 0xB94E, 0x9051, 0xB94F, 0x903E, 0xB950, 0x9041, 0xB951, 0x9112, - 0xB952, 0x9117, 0xB953, 0x916C, 0xB954, 0x916A, 0xB955, 0x9169, - 0xB956, 0x91C9, 0xB957, 0x9237, 0xB958, 0x9257, 0xB959, 0x9238, - 0xB95A, 0x923D, 0xB95B, 0x9240, 0xB95C, 0x923E, 0xB95D, 0x925B, - 0xB95E, 0x924B, 0xB95F, 0x9264, 0xB960, 0x9251, 0xB961, 0x9234, - 0xB962, 0x9249, 0xB963, 0x924D, 0xB964, 0x9245, 0xB965, 0x9239, - 0xB966, 0x923F, 0xB967, 0x925A, 0xB968, 0x9598, 0xB969, 0x9698, - 0xB96A, 0x9694, 0xB96B, 0x9695, 0xB96C, 0x96CD, 0xB96D, 0x96CB, - 0xB96E, 0x96C9, 0xB96F, 0x96CA, 0xB970, 0x96F7, 0xB971, 0x96FB, - 0xB972, 0x96F9, 0xB973, 0x96F6, 0xB974, 0x9756, 0xB975, 0x9774, - 0xB976, 0x9776, 0xB977, 0x9810, 0xB978, 0x9811, 0xB979, 0x9813, - 0xB97A, 0x980A, 0xB97B, 0x9812, 0xB97C, 0x980C, 0xB97D, 0x98FC, - 0xB97E, 0x98F4, 0xB9A1, 0x98FD, 0xB9A2, 0x98FE, 0xB9A3, 0x99B3, - 0xB9A4, 0x99B1, 0xB9A5, 0x99B4, 0xB9A6, 0x9AE1, 0xB9A7, 0x9CE9, - 0xB9A8, 0x9E82, 0xB9A9, 0x9F0E, 0xB9AA, 0x9F13, 0xB9AB, 0x9F20, - 0xB9AC, 0x50E7, 0xB9AD, 0x50EE, 0xB9AE, 0x50E5, 0xB9AF, 0x50D6, - 0xB9B0, 0x50ED, 0xB9B1, 0x50DA, 0xB9B2, 0x50D5, 0xB9B3, 0x50CF, - 0xB9B4, 0x50D1, 0xB9B5, 0x50F1, 0xB9B6, 0x50CE, 0xB9B7, 0x50E9, - 0xB9B8, 0x5162, 0xB9B9, 0x51F3, 0xB9BA, 0x5283, 0xB9BB, 0x5282, - 0xB9BC, 0x5331, 0xB9BD, 0x53AD, 0xB9BE, 0x55FE, 0xB9BF, 0x5600, - 0xB9C0, 0x561B, 0xB9C1, 0x5617, 0xB9C2, 0x55FD, 0xB9C3, 0x5614, - 0xB9C4, 0x5606, 0xB9C5, 0x5609, 0xB9C6, 0x560D, 0xB9C7, 0x560E, - 0xB9C8, 0x55F7, 0xB9C9, 0x5616, 0xB9CA, 0x561F, 0xB9CB, 0x5608, - 0xB9CC, 0x5610, 0xB9CD, 0x55F6, 0xB9CE, 0x5718, 0xB9CF, 0x5716, - 0xB9D0, 0x5875, 0xB9D1, 0x587E, 0xB9D2, 0x5883, 0xB9D3, 0x5893, - 0xB9D4, 0x588A, 0xB9D5, 0x5879, 0xB9D6, 0x5885, 0xB9D7, 0x587D, - 0xB9D8, 0x58FD, 0xB9D9, 0x5925, 0xB9DA, 0x5922, 0xB9DB, 0x5924, - 0xB9DC, 0x596A, 0xB9DD, 0x5969, 0xB9DE, 0x5AE1, 0xB9DF, 0x5AE6, - 0xB9E0, 0x5AE9, 0xB9E1, 0x5AD7, 0xB9E2, 0x5AD6, 0xB9E3, 0x5AD8, - 0xB9E4, 0x5AE3, 0xB9E5, 0x5B75, 0xB9E6, 0x5BDE, 0xB9E7, 0x5BE7, - 0xB9E8, 0x5BE1, 0xB9E9, 0x5BE5, 0xB9EA, 0x5BE6, 0xB9EB, 0x5BE8, - 0xB9EC, 0x5BE2, 0xB9ED, 0x5BE4, 0xB9EE, 0x5BDF, 0xB9EF, 0x5C0D, - 0xB9F0, 0x5C62, 0xB9F1, 0x5D84, 0xB9F2, 0x5D87, 0xB9F3, 0x5E5B, - 0xB9F4, 0x5E63, 0xB9F5, 0x5E55, 0xB9F6, 0x5E57, 0xB9F7, 0x5E54, - 0xB9F8, 0x5ED3, 0xB9F9, 0x5ED6, 0xB9FA, 0x5F0A, 0xB9FB, 0x5F46, - 0xB9FC, 0x5F70, 0xB9FD, 0x5FB9, 0xB9FE, 0x6147, 0xBA40, 0x613F, - 0xBA41, 0x614B, 0xBA42, 0x6177, 0xBA43, 0x6162, 0xBA44, 0x6163, - 0xBA45, 0x615F, 0xBA46, 0x615A, 0xBA47, 0x6158, 0xBA48, 0x6175, - 0xBA49, 0x622A, 0xBA4A, 0x6487, 0xBA4B, 0x6458, 0xBA4C, 0x6454, - 0xBA4D, 0x64A4, 0xBA4E, 0x6478, 0xBA4F, 0x645F, 0xBA50, 0x647A, - 0xBA51, 0x6451, 0xBA52, 0x6467, 0xBA53, 0x6434, 0xBA54, 0x646D, - 0xBA55, 0x647B, 0xBA56, 0x6572, 0xBA57, 0x65A1, 0xBA58, 0x65D7, - 0xBA59, 0x65D6, 0xBA5A, 0x66A2, 0xBA5B, 0x66A8, 0xBA5C, 0x669D, - 0xBA5D, 0x699C, 0xBA5E, 0x69A8, 0xBA5F, 0x6995, 0xBA60, 0x69C1, - 0xBA61, 0x69AE, 0xBA62, 0x69D3, 0xBA63, 0x69CB, 0xBA64, 0x699B, - 0xBA65, 0x69B7, 0xBA66, 0x69BB, 0xBA67, 0x69AB, 0xBA68, 0x69B4, - 0xBA69, 0x69D0, 0xBA6A, 0x69CD, 0xBA6B, 0x69AD, 0xBA6C, 0x69CC, - 0xBA6D, 0x69A6, 0xBA6E, 0x69C3, 0xBA6F, 0x69A3, 0xBA70, 0x6B49, - 0xBA71, 0x6B4C, 0xBA72, 0x6C33, 0xBA73, 0x6F33, 0xBA74, 0x6F14, - 0xBA75, 0x6EFE, 0xBA76, 0x6F13, 0xBA77, 0x6EF4, 0xBA78, 0x6F29, - 0xBA79, 0x6F3E, 0xBA7A, 0x6F20, 0xBA7B, 0x6F2C, 0xBA7C, 0x6F0F, - 0xBA7D, 0x6F02, 0xBA7E, 0x6F22, 0xBAA1, 0x6EFF, 0xBAA2, 0x6EEF, - 0xBAA3, 0x6F06, 0xBAA4, 0x6F31, 0xBAA5, 0x6F38, 0xBAA6, 0x6F32, - 0xBAA7, 0x6F23, 0xBAA8, 0x6F15, 0xBAA9, 0x6F2B, 0xBAAA, 0x6F2F, - 0xBAAB, 0x6F88, 0xBAAC, 0x6F2A, 0xBAAD, 0x6EEC, 0xBAAE, 0x6F01, - 0xBAAF, 0x6EF2, 0xBAB0, 0x6ECC, 0xBAB1, 0x6EF7, 0xBAB2, 0x7194, - 0xBAB3, 0x7199, 0xBAB4, 0x717D, 0xBAB5, 0x718A, 0xBAB6, 0x7184, - 0xBAB7, 0x7192, 0xBAB8, 0x723E, 0xBAB9, 0x7292, 0xBABA, 0x7296, - 0xBABB, 0x7344, 0xBABC, 0x7350, 0xBABD, 0x7464, 0xBABE, 0x7463, - 0xBABF, 0x746A, 0xBAC0, 0x7470, 0xBAC1, 0x746D, 0xBAC2, 0x7504, - 0xBAC3, 0x7591, 0xBAC4, 0x7627, 0xBAC5, 0x760D, 0xBAC6, 0x760B, - 0xBAC7, 0x7609, 0xBAC8, 0x7613, 0xBAC9, 0x76E1, 0xBACA, 0x76E3, - 0xBACB, 0x7784, 0xBACC, 0x777D, 0xBACD, 0x777F, 0xBACE, 0x7761, - 0xBACF, 0x78C1, 0xBAD0, 0x789F, 0xBAD1, 0x78A7, 0xBAD2, 0x78B3, - 0xBAD3, 0x78A9, 0xBAD4, 0x78A3, 0xBAD5, 0x798E, 0xBAD6, 0x798F, - 0xBAD7, 0x798D, 0xBAD8, 0x7A2E, 0xBAD9, 0x7A31, 0xBADA, 0x7AAA, - 0xBADB, 0x7AA9, 0xBADC, 0x7AED, 0xBADD, 0x7AEF, 0xBADE, 0x7BA1, - 0xBADF, 0x7B95, 0xBAE0, 0x7B8B, 0xBAE1, 0x7B75, 0xBAE2, 0x7B97, - 0xBAE3, 0x7B9D, 0xBAE4, 0x7B94, 0xBAE5, 0x7B8F, 0xBAE6, 0x7BB8, - 0xBAE7, 0x7B87, 0xBAE8, 0x7B84, 0xBAE9, 0x7CB9, 0xBAEA, 0x7CBD, - 0xBAEB, 0x7CBE, 0xBAEC, 0x7DBB, 0xBAED, 0x7DB0, 0xBAEE, 0x7D9C, - 0xBAEF, 0x7DBD, 0xBAF0, 0x7DBE, 0xBAF1, 0x7DA0, 0xBAF2, 0x7DCA, - 0xBAF3, 0x7DB4, 0xBAF4, 0x7DB2, 0xBAF5, 0x7DB1, 0xBAF6, 0x7DBA, - 0xBAF7, 0x7DA2, 0xBAF8, 0x7DBF, 0xBAF9, 0x7DB5, 0xBAFA, 0x7DB8, - 0xBAFB, 0x7DAD, 0xBAFC, 0x7DD2, 0xBAFD, 0x7DC7, 0xBAFE, 0x7DAC, - 0xBB40, 0x7F70, 0xBB41, 0x7FE0, 0xBB42, 0x7FE1, 0xBB43, 0x7FDF, - 0xBB44, 0x805E, 0xBB45, 0x805A, 0xBB46, 0x8087, 0xBB47, 0x8150, - 0xBB48, 0x8180, 0xBB49, 0x818F, 0xBB4A, 0x8188, 0xBB4B, 0x818A, - 0xBB4C, 0x817F, 0xBB4D, 0x8182, 0xBB4E, 0x81E7, 0xBB4F, 0x81FA, - 0xBB50, 0x8207, 0xBB51, 0x8214, 0xBB52, 0x821E, 0xBB53, 0x824B, - 0xBB54, 0x84C9, 0xBB55, 0x84BF, 0xBB56, 0x84C6, 0xBB57, 0x84C4, - 0xBB58, 0x8499, 0xBB59, 0x849E, 0xBB5A, 0x84B2, 0xBB5B, 0x849C, - 0xBB5C, 0x84CB, 0xBB5D, 0x84B8, 0xBB5E, 0x84C0, 0xBB5F, 0x84D3, - 0xBB60, 0x8490, 0xBB61, 0x84BC, 0xBB62, 0x84D1, 0xBB63, 0x84CA, - 0xBB64, 0x873F, 0xBB65, 0x871C, 0xBB66, 0x873B, 0xBB67, 0x8722, - 0xBB68, 0x8725, 0xBB69, 0x8734, 0xBB6A, 0x8718, 0xBB6B, 0x8755, - 0xBB6C, 0x8737, 0xBB6D, 0x8729, 0xBB6E, 0x88F3, 0xBB6F, 0x8902, - 0xBB70, 0x88F4, 0xBB71, 0x88F9, 0xBB72, 0x88F8, 0xBB73, 0x88FD, - 0xBB74, 0x88E8, 0xBB75, 0x891A, 0xBB76, 0x88EF, 0xBB77, 0x8AA6, - 0xBB78, 0x8A8C, 0xBB79, 0x8A9E, 0xBB7A, 0x8AA3, 0xBB7B, 0x8A8D, - 0xBB7C, 0x8AA1, 0xBB7D, 0x8A93, 0xBB7E, 0x8AA4, 0xBBA1, 0x8AAA, - 0xBBA2, 0x8AA5, 0xBBA3, 0x8AA8, 0xBBA4, 0x8A98, 0xBBA5, 0x8A91, - 0xBBA6, 0x8A9A, 0xBBA7, 0x8AA7, 0xBBA8, 0x8C6A, 0xBBA9, 0x8C8D, - 0xBBAA, 0x8C8C, 0xBBAB, 0x8CD3, 0xBBAC, 0x8CD1, 0xBBAD, 0x8CD2, - 0xBBAE, 0x8D6B, 0xBBAF, 0x8D99, 0xBBB0, 0x8D95, 0xBBB1, 0x8DFC, - 0xBBB2, 0x8F14, 0xBBB3, 0x8F12, 0xBBB4, 0x8F15, 0xBBB5, 0x8F13, - 0xBBB6, 0x8FA3, 0xBBB7, 0x9060, 0xBBB8, 0x9058, 0xBBB9, 0x905C, - 0xBBBA, 0x9063, 0xBBBB, 0x9059, 0xBBBC, 0x905E, 0xBBBD, 0x9062, - 0xBBBE, 0x905D, 0xBBBF, 0x905B, 0xBBC0, 0x9119, 0xBBC1, 0x9118, - 0xBBC2, 0x911E, 0xBBC3, 0x9175, 0xBBC4, 0x9178, 0xBBC5, 0x9177, - 0xBBC6, 0x9174, 0xBBC7, 0x9278, 0xBBC8, 0x9280, 0xBBC9, 0x9285, - 0xBBCA, 0x9298, 0xBBCB, 0x9296, 0xBBCC, 0x927B, 0xBBCD, 0x9293, - 0xBBCE, 0x929C, 0xBBCF, 0x92A8, 0xBBD0, 0x927C, 0xBBD1, 0x9291, - 0xBBD2, 0x95A1, 0xBBD3, 0x95A8, 0xBBD4, 0x95A9, 0xBBD5, 0x95A3, - 0xBBD6, 0x95A5, 0xBBD7, 0x95A4, 0xBBD8, 0x9699, 0xBBD9, 0x969C, - 0xBBDA, 0x969B, 0xBBDB, 0x96CC, 0xBBDC, 0x96D2, 0xBBDD, 0x9700, - 0xBBDE, 0x977C, 0xBBDF, 0x9785, 0xBBE0, 0x97F6, 0xBBE1, 0x9817, - 0xBBE2, 0x9818, 0xBBE3, 0x98AF, 0xBBE4, 0x98B1, 0xBBE5, 0x9903, - 0xBBE6, 0x9905, 0xBBE7, 0x990C, 0xBBE8, 0x9909, 0xBBE9, 0x99C1, - 0xBBEA, 0x9AAF, 0xBBEB, 0x9AB0, 0xBBEC, 0x9AE6, 0xBBED, 0x9B41, - 0xBBEE, 0x9B42, 0xBBEF, 0x9CF4, 0xBBF0, 0x9CF6, 0xBBF1, 0x9CF3, - 0xBBF2, 0x9EBC, 0xBBF3, 0x9F3B, 0xBBF4, 0x9F4A, 0xBBF5, 0x5104, - 0xBBF6, 0x5100, 0xBBF7, 0x50FB, 0xBBF8, 0x50F5, 0xBBF9, 0x50F9, - 0xBBFA, 0x5102, 0xBBFB, 0x5108, 0xBBFC, 0x5109, 0xBBFD, 0x5105, - 0xBBFE, 0x51DC, 0xBC40, 0x5287, 0xBC41, 0x5288, 0xBC42, 0x5289, - 0xBC43, 0x528D, 0xBC44, 0x528A, 0xBC45, 0x52F0, 0xBC46, 0x53B2, - 0xBC47, 0x562E, 0xBC48, 0x563B, 0xBC49, 0x5639, 0xBC4A, 0x5632, - 0xBC4B, 0x563F, 0xBC4C, 0x5634, 0xBC4D, 0x5629, 0xBC4E, 0x5653, - 0xBC4F, 0x564E, 0xBC50, 0x5657, 0xBC51, 0x5674, 0xBC52, 0x5636, - 0xBC53, 0x562F, 0xBC54, 0x5630, 0xBC55, 0x5880, 0xBC56, 0x589F, - 0xBC57, 0x589E, 0xBC58, 0x58B3, 0xBC59, 0x589C, 0xBC5A, 0x58AE, - 0xBC5B, 0x58A9, 0xBC5C, 0x58A6, 0xBC5D, 0x596D, 0xBC5E, 0x5B09, - 0xBC5F, 0x5AFB, 0xBC60, 0x5B0B, 0xBC61, 0x5AF5, 0xBC62, 0x5B0C, - 0xBC63, 0x5B08, 0xBC64, 0x5BEE, 0xBC65, 0x5BEC, 0xBC66, 0x5BE9, - 0xBC67, 0x5BEB, 0xBC68, 0x5C64, 0xBC69, 0x5C65, 0xBC6A, 0x5D9D, - 0xBC6B, 0x5D94, 0xBC6C, 0x5E62, 0xBC6D, 0x5E5F, 0xBC6E, 0x5E61, - 0xBC6F, 0x5EE2, 0xBC70, 0x5EDA, 0xBC71, 0x5EDF, 0xBC72, 0x5EDD, - 0xBC73, 0x5EE3, 0xBC74, 0x5EE0, 0xBC75, 0x5F48, 0xBC76, 0x5F71, - 0xBC77, 0x5FB7, 0xBC78, 0x5FB5, 0xBC79, 0x6176, 0xBC7A, 0x6167, - 0xBC7B, 0x616E, 0xBC7C, 0x615D, 0xBC7D, 0x6155, 0xBC7E, 0x6182, - 0xBCA1, 0x617C, 0xBCA2, 0x6170, 0xBCA3, 0x616B, 0xBCA4, 0x617E, - 0xBCA5, 0x61A7, 0xBCA6, 0x6190, 0xBCA7, 0x61AB, 0xBCA8, 0x618E, - 0xBCA9, 0x61AC, 0xBCAA, 0x619A, 0xBCAB, 0x61A4, 0xBCAC, 0x6194, - 0xBCAD, 0x61AE, 0xBCAE, 0x622E, 0xBCAF, 0x6469, 0xBCB0, 0x646F, - 0xBCB1, 0x6479, 0xBCB2, 0x649E, 0xBCB3, 0x64B2, 0xBCB4, 0x6488, - 0xBCB5, 0x6490, 0xBCB6, 0x64B0, 0xBCB7, 0x64A5, 0xBCB8, 0x6493, - 0xBCB9, 0x6495, 0xBCBA, 0x64A9, 0xBCBB, 0x6492, 0xBCBC, 0x64AE, - 0xBCBD, 0x64AD, 0xBCBE, 0x64AB, 0xBCBF, 0x649A, 0xBCC0, 0x64AC, - 0xBCC1, 0x6499, 0xBCC2, 0x64A2, 0xBCC3, 0x64B3, 0xBCC4, 0x6575, - 0xBCC5, 0x6577, 0xBCC6, 0x6578, 0xBCC7, 0x66AE, 0xBCC8, 0x66AB, - 0xBCC9, 0x66B4, 0xBCCA, 0x66B1, 0xBCCB, 0x6A23, 0xBCCC, 0x6A1F, - 0xBCCD, 0x69E8, 0xBCCE, 0x6A01, 0xBCCF, 0x6A1E, 0xBCD0, 0x6A19, - 0xBCD1, 0x69FD, 0xBCD2, 0x6A21, 0xBCD3, 0x6A13, 0xBCD4, 0x6A0A, - 0xBCD5, 0x69F3, 0xBCD6, 0x6A02, 0xBCD7, 0x6A05, 0xBCD8, 0x69ED, - 0xBCD9, 0x6A11, 0xBCDA, 0x6B50, 0xBCDB, 0x6B4E, 0xBCDC, 0x6BA4, - 0xBCDD, 0x6BC5, 0xBCDE, 0x6BC6, 0xBCDF, 0x6F3F, 0xBCE0, 0x6F7C, - 0xBCE1, 0x6F84, 0xBCE2, 0x6F51, 0xBCE3, 0x6F66, 0xBCE4, 0x6F54, - 0xBCE5, 0x6F86, 0xBCE6, 0x6F6D, 0xBCE7, 0x6F5B, 0xBCE8, 0x6F78, - 0xBCE9, 0x6F6E, 0xBCEA, 0x6F8E, 0xBCEB, 0x6F7A, 0xBCEC, 0x6F70, - 0xBCED, 0x6F64, 0xBCEE, 0x6F97, 0xBCEF, 0x6F58, 0xBCF0, 0x6ED5, - 0xBCF1, 0x6F6F, 0xBCF2, 0x6F60, 0xBCF3, 0x6F5F, 0xBCF4, 0x719F, - 0xBCF5, 0x71AC, 0xBCF6, 0x71B1, 0xBCF7, 0x71A8, 0xBCF8, 0x7256, - 0xBCF9, 0x729B, 0xBCFA, 0x734E, 0xBCFB, 0x7357, 0xBCFC, 0x7469, - 0xBCFD, 0x748B, 0xBCFE, 0x7483, 0xBD40, 0x747E, 0xBD41, 0x7480, - 0xBD42, 0x757F, 0xBD43, 0x7620, 0xBD44, 0x7629, 0xBD45, 0x761F, - 0xBD46, 0x7624, 0xBD47, 0x7626, 0xBD48, 0x7621, 0xBD49, 0x7622, - 0xBD4A, 0x769A, 0xBD4B, 0x76BA, 0xBD4C, 0x76E4, 0xBD4D, 0x778E, - 0xBD4E, 0x7787, 0xBD4F, 0x778C, 0xBD50, 0x7791, 0xBD51, 0x778B, - 0xBD52, 0x78CB, 0xBD53, 0x78C5, 0xBD54, 0x78BA, 0xBD55, 0x78CA, - 0xBD56, 0x78BE, 0xBD57, 0x78D5, 0xBD58, 0x78BC, 0xBD59, 0x78D0, - 0xBD5A, 0x7A3F, 0xBD5B, 0x7A3C, 0xBD5C, 0x7A40, 0xBD5D, 0x7A3D, - 0xBD5E, 0x7A37, 0xBD5F, 0x7A3B, 0xBD60, 0x7AAF, 0xBD61, 0x7AAE, - 0xBD62, 0x7BAD, 0xBD63, 0x7BB1, 0xBD64, 0x7BC4, 0xBD65, 0x7BB4, - 0xBD66, 0x7BC6, 0xBD67, 0x7BC7, 0xBD68, 0x7BC1, 0xBD69, 0x7BA0, - 0xBD6A, 0x7BCC, 0xBD6B, 0x7CCA, 0xBD6C, 0x7DE0, 0xBD6D, 0x7DF4, - 0xBD6E, 0x7DEF, 0xBD6F, 0x7DFB, 0xBD70, 0x7DD8, 0xBD71, 0x7DEC, - 0xBD72, 0x7DDD, 0xBD73, 0x7DE8, 0xBD74, 0x7DE3, 0xBD75, 0x7DDA, - 0xBD76, 0x7DDE, 0xBD77, 0x7DE9, 0xBD78, 0x7D9E, 0xBD79, 0x7DD9, - 0xBD7A, 0x7DF2, 0xBD7B, 0x7DF9, 0xBD7C, 0x7F75, 0xBD7D, 0x7F77, - 0xBD7E, 0x7FAF, 0xBDA1, 0x7FE9, 0xBDA2, 0x8026, 0xBDA3, 0x819B, - 0xBDA4, 0x819C, 0xBDA5, 0x819D, 0xBDA6, 0x81A0, 0xBDA7, 0x819A, - 0xBDA8, 0x8198, 0xBDA9, 0x8517, 0xBDAA, 0x853D, 0xBDAB, 0x851A, - 0xBDAC, 0x84EE, 0xBDAD, 0x852C, 0xBDAE, 0x852D, 0xBDAF, 0x8513, - 0xBDB0, 0x8511, 0xBDB1, 0x8523, 0xBDB2, 0x8521, 0xBDB3, 0x8514, - 0xBDB4, 0x84EC, 0xBDB5, 0x8525, 0xBDB6, 0x84FF, 0xBDB7, 0x8506, - 0xBDB8, 0x8782, 0xBDB9, 0x8774, 0xBDBA, 0x8776, 0xBDBB, 0x8760, - 0xBDBC, 0x8766, 0xBDBD, 0x8778, 0xBDBE, 0x8768, 0xBDBF, 0x8759, - 0xBDC0, 0x8757, 0xBDC1, 0x874C, 0xBDC2, 0x8753, 0xBDC3, 0x885B, - 0xBDC4, 0x885D, 0xBDC5, 0x8910, 0xBDC6, 0x8907, 0xBDC7, 0x8912, - 0xBDC8, 0x8913, 0xBDC9, 0x8915, 0xBDCA, 0x890A, 0xBDCB, 0x8ABC, - 0xBDCC, 0x8AD2, 0xBDCD, 0x8AC7, 0xBDCE, 0x8AC4, 0xBDCF, 0x8A95, - 0xBDD0, 0x8ACB, 0xBDD1, 0x8AF8, 0xBDD2, 0x8AB2, 0xBDD3, 0x8AC9, - 0xBDD4, 0x8AC2, 0xBDD5, 0x8ABF, 0xBDD6, 0x8AB0, 0xBDD7, 0x8AD6, - 0xBDD8, 0x8ACD, 0xBDD9, 0x8AB6, 0xBDDA, 0x8AB9, 0xBDDB, 0x8ADB, - 0xBDDC, 0x8C4C, 0xBDDD, 0x8C4E, 0xBDDE, 0x8C6C, 0xBDDF, 0x8CE0, - 0xBDE0, 0x8CDE, 0xBDE1, 0x8CE6, 0xBDE2, 0x8CE4, 0xBDE3, 0x8CEC, - 0xBDE4, 0x8CED, 0xBDE5, 0x8CE2, 0xBDE6, 0x8CE3, 0xBDE7, 0x8CDC, - 0xBDE8, 0x8CEA, 0xBDE9, 0x8CE1, 0xBDEA, 0x8D6D, 0xBDEB, 0x8D9F, - 0xBDEC, 0x8DA3, 0xBDED, 0x8E2B, 0xBDEE, 0x8E10, 0xBDEF, 0x8E1D, - 0xBDF0, 0x8E22, 0xBDF1, 0x8E0F, 0xBDF2, 0x8E29, 0xBDF3, 0x8E1F, - 0xBDF4, 0x8E21, 0xBDF5, 0x8E1E, 0xBDF6, 0x8EBA, 0xBDF7, 0x8F1D, - 0xBDF8, 0x8F1B, 0xBDF9, 0x8F1F, 0xBDFA, 0x8F29, 0xBDFB, 0x8F26, - 0xBDFC, 0x8F2A, 0xBDFD, 0x8F1C, 0xBDFE, 0x8F1E, 0xBE40, 0x8F25, - 0xBE41, 0x9069, 0xBE42, 0x906E, 0xBE43, 0x9068, 0xBE44, 0x906D, - 0xBE45, 0x9077, 0xBE46, 0x9130, 0xBE47, 0x912D, 0xBE48, 0x9127, - 0xBE49, 0x9131, 0xBE4A, 0x9187, 0xBE4B, 0x9189, 0xBE4C, 0x918B, - 0xBE4D, 0x9183, 0xBE4E, 0x92C5, 0xBE4F, 0x92BB, 0xBE50, 0x92B7, - 0xBE51, 0x92EA, 0xBE52, 0x92AC, 0xBE53, 0x92E4, 0xBE54, 0x92C1, - 0xBE55, 0x92B3, 0xBE56, 0x92BC, 0xBE57, 0x92D2, 0xBE58, 0x92C7, - 0xBE59, 0x92F0, 0xBE5A, 0x92B2, 0xBE5B, 0x95AD, 0xBE5C, 0x95B1, - 0xBE5D, 0x9704, 0xBE5E, 0x9706, 0xBE5F, 0x9707, 0xBE60, 0x9709, - 0xBE61, 0x9760, 0xBE62, 0x978D, 0xBE63, 0x978B, 0xBE64, 0x978F, - 0xBE65, 0x9821, 0xBE66, 0x982B, 0xBE67, 0x981C, 0xBE68, 0x98B3, - 0xBE69, 0x990A, 0xBE6A, 0x9913, 0xBE6B, 0x9912, 0xBE6C, 0x9918, - 0xBE6D, 0x99DD, 0xBE6E, 0x99D0, 0xBE6F, 0x99DF, 0xBE70, 0x99DB, - 0xBE71, 0x99D1, 0xBE72, 0x99D5, 0xBE73, 0x99D2, 0xBE74, 0x99D9, - 0xBE75, 0x9AB7, 0xBE76, 0x9AEE, 0xBE77, 0x9AEF, 0xBE78, 0x9B27, - 0xBE79, 0x9B45, 0xBE7A, 0x9B44, 0xBE7B, 0x9B77, 0xBE7C, 0x9B6F, - 0xBE7D, 0x9D06, 0xBE7E, 0x9D09, 0xBEA1, 0x9D03, 0xBEA2, 0x9EA9, - 0xBEA3, 0x9EBE, 0xBEA4, 0x9ECE, 0xBEA5, 0x58A8, 0xBEA6, 0x9F52, - 0xBEA7, 0x5112, 0xBEA8, 0x5118, 0xBEA9, 0x5114, 0xBEAA, 0x5110, - 0xBEAB, 0x5115, 0xBEAC, 0x5180, 0xBEAD, 0x51AA, 0xBEAE, 0x51DD, - 0xBEAF, 0x5291, 0xBEB0, 0x5293, 0xBEB1, 0x52F3, 0xBEB2, 0x5659, - 0xBEB3, 0x566B, 0xBEB4, 0x5679, 0xBEB5, 0x5669, 0xBEB6, 0x5664, - 0xBEB7, 0x5678, 0xBEB8, 0x566A, 0xBEB9, 0x5668, 0xBEBA, 0x5665, - 0xBEBB, 0x5671, 0xBEBC, 0x566F, 0xBEBD, 0x566C, 0xBEBE, 0x5662, - 0xBEBF, 0x5676, 0xBEC0, 0x58C1, 0xBEC1, 0x58BE, 0xBEC2, 0x58C7, - 0xBEC3, 0x58C5, 0xBEC4, 0x596E, 0xBEC5, 0x5B1D, 0xBEC6, 0x5B34, - 0xBEC7, 0x5B78, 0xBEC8, 0x5BF0, 0xBEC9, 0x5C0E, 0xBECA, 0x5F4A, - 0xBECB, 0x61B2, 0xBECC, 0x6191, 0xBECD, 0x61A9, 0xBECE, 0x618A, - 0xBECF, 0x61CD, 0xBED0, 0x61B6, 0xBED1, 0x61BE, 0xBED2, 0x61CA, - 0xBED3, 0x61C8, 0xBED4, 0x6230, 0xBED5, 0x64C5, 0xBED6, 0x64C1, - 0xBED7, 0x64CB, 0xBED8, 0x64BB, 0xBED9, 0x64BC, 0xBEDA, 0x64DA, - 0xBEDB, 0x64C4, 0xBEDC, 0x64C7, 0xBEDD, 0x64C2, 0xBEDE, 0x64CD, - 0xBEDF, 0x64BF, 0xBEE0, 0x64D2, 0xBEE1, 0x64D4, 0xBEE2, 0x64BE, - 0xBEE3, 0x6574, 0xBEE4, 0x66C6, 0xBEE5, 0x66C9, 0xBEE6, 0x66B9, - 0xBEE7, 0x66C4, 0xBEE8, 0x66C7, 0xBEE9, 0x66B8, 0xBEEA, 0x6A3D, - 0xBEEB, 0x6A38, 0xBEEC, 0x6A3A, 0xBEED, 0x6A59, 0xBEEE, 0x6A6B, - 0xBEEF, 0x6A58, 0xBEF0, 0x6A39, 0xBEF1, 0x6A44, 0xBEF2, 0x6A62, - 0xBEF3, 0x6A61, 0xBEF4, 0x6A4B, 0xBEF5, 0x6A47, 0xBEF6, 0x6A35, - 0xBEF7, 0x6A5F, 0xBEF8, 0x6A48, 0xBEF9, 0x6B59, 0xBEFA, 0x6B77, - 0xBEFB, 0x6C05, 0xBEFC, 0x6FC2, 0xBEFD, 0x6FB1, 0xBEFE, 0x6FA1, - 0xBF40, 0x6FC3, 0xBF41, 0x6FA4, 0xBF42, 0x6FC1, 0xBF43, 0x6FA7, - 0xBF44, 0x6FB3, 0xBF45, 0x6FC0, 0xBF46, 0x6FB9, 0xBF47, 0x6FB6, - 0xBF48, 0x6FA6, 0xBF49, 0x6FA0, 0xBF4A, 0x6FB4, 0xBF4B, 0x71BE, - 0xBF4C, 0x71C9, 0xBF4D, 0x71D0, 0xBF4E, 0x71D2, 0xBF4F, 0x71C8, - 0xBF50, 0x71D5, 0xBF51, 0x71B9, 0xBF52, 0x71CE, 0xBF53, 0x71D9, - 0xBF54, 0x71DC, 0xBF55, 0x71C3, 0xBF56, 0x71C4, 0xBF57, 0x7368, - 0xBF58, 0x749C, 0xBF59, 0x74A3, 0xBF5A, 0x7498, 0xBF5B, 0x749F, - 0xBF5C, 0x749E, 0xBF5D, 0x74E2, 0xBF5E, 0x750C, 0xBF5F, 0x750D, - 0xBF60, 0x7634, 0xBF61, 0x7638, 0xBF62, 0x763A, 0xBF63, 0x76E7, - 0xBF64, 0x76E5, 0xBF65, 0x77A0, 0xBF66, 0x779E, 0xBF67, 0x779F, - 0xBF68, 0x77A5, 0xBF69, 0x78E8, 0xBF6A, 0x78DA, 0xBF6B, 0x78EC, - 0xBF6C, 0x78E7, 0xBF6D, 0x79A6, 0xBF6E, 0x7A4D, 0xBF6F, 0x7A4E, - 0xBF70, 0x7A46, 0xBF71, 0x7A4C, 0xBF72, 0x7A4B, 0xBF73, 0x7ABA, - 0xBF74, 0x7BD9, 0xBF75, 0x7C11, 0xBF76, 0x7BC9, 0xBF77, 0x7BE4, - 0xBF78, 0x7BDB, 0xBF79, 0x7BE1, 0xBF7A, 0x7BE9, 0xBF7B, 0x7BE6, - 0xBF7C, 0x7CD5, 0xBF7D, 0x7CD6, 0xBF7E, 0x7E0A, 0xBFA1, 0x7E11, - 0xBFA2, 0x7E08, 0xBFA3, 0x7E1B, 0xBFA4, 0x7E23, 0xBFA5, 0x7E1E, - 0xBFA6, 0x7E1D, 0xBFA7, 0x7E09, 0xBFA8, 0x7E10, 0xBFA9, 0x7F79, - 0xBFAA, 0x7FB2, 0xBFAB, 0x7FF0, 0xBFAC, 0x7FF1, 0xBFAD, 0x7FEE, - 0xBFAE, 0x8028, 0xBFAF, 0x81B3, 0xBFB0, 0x81A9, 0xBFB1, 0x81A8, - 0xBFB2, 0x81FB, 0xBFB3, 0x8208, 0xBFB4, 0x8258, 0xBFB5, 0x8259, - 0xBFB6, 0x854A, 0xBFB7, 0x8559, 0xBFB8, 0x8548, 0xBFB9, 0x8568, - 0xBFBA, 0x8569, 0xBFBB, 0x8543, 0xBFBC, 0x8549, 0xBFBD, 0x856D, - 0xBFBE, 0x856A, 0xBFBF, 0x855E, 0xBFC0, 0x8783, 0xBFC1, 0x879F, - 0xBFC2, 0x879E, 0xBFC3, 0x87A2, 0xBFC4, 0x878D, 0xBFC5, 0x8861, - 0xBFC6, 0x892A, 0xBFC7, 0x8932, 0xBFC8, 0x8925, 0xBFC9, 0x892B, - 0xBFCA, 0x8921, 0xBFCB, 0x89AA, 0xBFCC, 0x89A6, 0xBFCD, 0x8AE6, - 0xBFCE, 0x8AFA, 0xBFCF, 0x8AEB, 0xBFD0, 0x8AF1, 0xBFD1, 0x8B00, - 0xBFD2, 0x8ADC, 0xBFD3, 0x8AE7, 0xBFD4, 0x8AEE, 0xBFD5, 0x8AFE, - 0xBFD6, 0x8B01, 0xBFD7, 0x8B02, 0xBFD8, 0x8AF7, 0xBFD9, 0x8AED, - 0xBFDA, 0x8AF3, 0xBFDB, 0x8AF6, 0xBFDC, 0x8AFC, 0xBFDD, 0x8C6B, - 0xBFDE, 0x8C6D, 0xBFDF, 0x8C93, 0xBFE0, 0x8CF4, 0xBFE1, 0x8E44, - 0xBFE2, 0x8E31, 0xBFE3, 0x8E34, 0xBFE4, 0x8E42, 0xBFE5, 0x8E39, - 0xBFE6, 0x8E35, 0xBFE7, 0x8F3B, 0xBFE8, 0x8F2F, 0xBFE9, 0x8F38, - 0xBFEA, 0x8F33, 0xBFEB, 0x8FA8, 0xBFEC, 0x8FA6, 0xBFED, 0x9075, - 0xBFEE, 0x9074, 0xBFEF, 0x9078, 0xBFF0, 0x9072, 0xBFF1, 0x907C, - 0xBFF2, 0x907A, 0xBFF3, 0x9134, 0xBFF4, 0x9192, 0xBFF5, 0x9320, - 0xBFF6, 0x9336, 0xBFF7, 0x92F8, 0xBFF8, 0x9333, 0xBFF9, 0x932F, - 0xBFFA, 0x9322, 0xBFFB, 0x92FC, 0xBFFC, 0x932B, 0xBFFD, 0x9304, - 0xBFFE, 0x931A, 0xC040, 0x9310, 0xC041, 0x9326, 0xC042, 0x9321, - 0xC043, 0x9315, 0xC044, 0x932E, 0xC045, 0x9319, 0xC046, 0x95BB, - 0xC047, 0x96A7, 0xC048, 0x96A8, 0xC049, 0x96AA, 0xC04A, 0x96D5, - 0xC04B, 0x970E, 0xC04C, 0x9711, 0xC04D, 0x9716, 0xC04E, 0x970D, - 0xC04F, 0x9713, 0xC050, 0x970F, 0xC051, 0x975B, 0xC052, 0x975C, - 0xC053, 0x9766, 0xC054, 0x9798, 0xC055, 0x9830, 0xC056, 0x9838, - 0xC057, 0x983B, 0xC058, 0x9837, 0xC059, 0x982D, 0xC05A, 0x9839, - 0xC05B, 0x9824, 0xC05C, 0x9910, 0xC05D, 0x9928, 0xC05E, 0x991E, - 0xC05F, 0x991B, 0xC060, 0x9921, 0xC061, 0x991A, 0xC062, 0x99ED, - 0xC063, 0x99E2, 0xC064, 0x99F1, 0xC065, 0x9AB8, 0xC066, 0x9ABC, - 0xC067, 0x9AFB, 0xC068, 0x9AED, 0xC069, 0x9B28, 0xC06A, 0x9B91, - 0xC06B, 0x9D15, 0xC06C, 0x9D23, 0xC06D, 0x9D26, 0xC06E, 0x9D28, - 0xC06F, 0x9D12, 0xC070, 0x9D1B, 0xC071, 0x9ED8, 0xC072, 0x9ED4, - 0xC073, 0x9F8D, 0xC074, 0x9F9C, 0xC075, 0x512A, 0xC076, 0x511F, - 0xC077, 0x5121, 0xC078, 0x5132, 0xC079, 0x52F5, 0xC07A, 0x568E, - 0xC07B, 0x5680, 0xC07C, 0x5690, 0xC07D, 0x5685, 0xC07E, 0x5687, - 0xC0A1, 0x568F, 0xC0A2, 0x58D5, 0xC0A3, 0x58D3, 0xC0A4, 0x58D1, - 0xC0A5, 0x58CE, 0xC0A6, 0x5B30, 0xC0A7, 0x5B2A, 0xC0A8, 0x5B24, - 0xC0A9, 0x5B7A, 0xC0AA, 0x5C37, 0xC0AB, 0x5C68, 0xC0AC, 0x5DBC, - 0xC0AD, 0x5DBA, 0xC0AE, 0x5DBD, 0xC0AF, 0x5DB8, 0xC0B0, 0x5E6B, - 0xC0B1, 0x5F4C, 0xC0B2, 0x5FBD, 0xC0B3, 0x61C9, 0xC0B4, 0x61C2, - 0xC0B5, 0x61C7, 0xC0B6, 0x61E6, 0xC0B7, 0x61CB, 0xC0B8, 0x6232, - 0xC0B9, 0x6234, 0xC0BA, 0x64CE, 0xC0BB, 0x64CA, 0xC0BC, 0x64D8, - 0xC0BD, 0x64E0, 0xC0BE, 0x64F0, 0xC0BF, 0x64E6, 0xC0C0, 0x64EC, - 0xC0C1, 0x64F1, 0xC0C2, 0x64E2, 0xC0C3, 0x64ED, 0xC0C4, 0x6582, - 0xC0C5, 0x6583, 0xC0C6, 0x66D9, 0xC0C7, 0x66D6, 0xC0C8, 0x6A80, - 0xC0C9, 0x6A94, 0xC0CA, 0x6A84, 0xC0CB, 0x6AA2, 0xC0CC, 0x6A9C, - 0xC0CD, 0x6ADB, 0xC0CE, 0x6AA3, 0xC0CF, 0x6A7E, 0xC0D0, 0x6A97, - 0xC0D1, 0x6A90, 0xC0D2, 0x6AA0, 0xC0D3, 0x6B5C, 0xC0D4, 0x6BAE, - 0xC0D5, 0x6BDA, 0xC0D6, 0x6C08, 0xC0D7, 0x6FD8, 0xC0D8, 0x6FF1, - 0xC0D9, 0x6FDF, 0xC0DA, 0x6FE0, 0xC0DB, 0x6FDB, 0xC0DC, 0x6FE4, - 0xC0DD, 0x6FEB, 0xC0DE, 0x6FEF, 0xC0DF, 0x6F80, 0xC0E0, 0x6FEC, - 0xC0E1, 0x6FE1, 0xC0E2, 0x6FE9, 0xC0E3, 0x6FD5, 0xC0E4, 0x6FEE, - 0xC0E5, 0x6FF0, 0xC0E6, 0x71E7, 0xC0E7, 0x71DF, 0xC0E8, 0x71EE, - 0xC0E9, 0x71E6, 0xC0EA, 0x71E5, 0xC0EB, 0x71ED, 0xC0EC, 0x71EC, - 0xC0ED, 0x71F4, 0xC0EE, 0x71E0, 0xC0EF, 0x7235, 0xC0F0, 0x7246, - 0xC0F1, 0x7370, 0xC0F2, 0x7372, 0xC0F3, 0x74A9, 0xC0F4, 0x74B0, - 0xC0F5, 0x74A6, 0xC0F6, 0x74A8, 0xC0F7, 0x7646, 0xC0F8, 0x7642, - 0xC0F9, 0x764C, 0xC0FA, 0x76EA, 0xC0FB, 0x77B3, 0xC0FC, 0x77AA, - 0xC0FD, 0x77B0, 0xC0FE, 0x77AC, 0xC140, 0x77A7, 0xC141, 0x77AD, - 0xC142, 0x77EF, 0xC143, 0x78F7, 0xC144, 0x78FA, 0xC145, 0x78F4, - 0xC146, 0x78EF, 0xC147, 0x7901, 0xC148, 0x79A7, 0xC149, 0x79AA, - 0xC14A, 0x7A57, 0xC14B, 0x7ABF, 0xC14C, 0x7C07, 0xC14D, 0x7C0D, - 0xC14E, 0x7BFE, 0xC14F, 0x7BF7, 0xC150, 0x7C0C, 0xC151, 0x7BE0, - 0xC152, 0x7CE0, 0xC153, 0x7CDC, 0xC154, 0x7CDE, 0xC155, 0x7CE2, - 0xC156, 0x7CDF, 0xC157, 0x7CD9, 0xC158, 0x7CDD, 0xC159, 0x7E2E, - 0xC15A, 0x7E3E, 0xC15B, 0x7E46, 0xC15C, 0x7E37, 0xC15D, 0x7E32, - 0xC15E, 0x7E43, 0xC15F, 0x7E2B, 0xC160, 0x7E3D, 0xC161, 0x7E31, - 0xC162, 0x7E45, 0xC163, 0x7E41, 0xC164, 0x7E34, 0xC165, 0x7E39, - 0xC166, 0x7E48, 0xC167, 0x7E35, 0xC168, 0x7E3F, 0xC169, 0x7E2F, - 0xC16A, 0x7F44, 0xC16B, 0x7FF3, 0xC16C, 0x7FFC, 0xC16D, 0x8071, - 0xC16E, 0x8072, 0xC16F, 0x8070, 0xC170, 0x806F, 0xC171, 0x8073, - 0xC172, 0x81C6, 0xC173, 0x81C3, 0xC174, 0x81BA, 0xC175, 0x81C2, - 0xC176, 0x81C0, 0xC177, 0x81BF, 0xC178, 0x81BD, 0xC179, 0x81C9, - 0xC17A, 0x81BE, 0xC17B, 0x81E8, 0xC17C, 0x8209, 0xC17D, 0x8271, - 0xC17E, 0x85AA, 0xC1A1, 0x8584, 0xC1A2, 0x857E, 0xC1A3, 0x859C, - 0xC1A4, 0x8591, 0xC1A5, 0x8594, 0xC1A6, 0x85AF, 0xC1A7, 0x859B, - 0xC1A8, 0x8587, 0xC1A9, 0x85A8, 0xC1AA, 0x858A, 0xC1AB, 0x8667, - 0xC1AC, 0x87C0, 0xC1AD, 0x87D1, 0xC1AE, 0x87B3, 0xC1AF, 0x87D2, - 0xC1B0, 0x87C6, 0xC1B1, 0x87AB, 0xC1B2, 0x87BB, 0xC1B3, 0x87BA, - 0xC1B4, 0x87C8, 0xC1B5, 0x87CB, 0xC1B6, 0x893B, 0xC1B7, 0x8936, - 0xC1B8, 0x8944, 0xC1B9, 0x8938, 0xC1BA, 0x893D, 0xC1BB, 0x89AC, - 0xC1BC, 0x8B0E, 0xC1BD, 0x8B17, 0xC1BE, 0x8B19, 0xC1BF, 0x8B1B, - 0xC1C0, 0x8B0A, 0xC1C1, 0x8B20, 0xC1C2, 0x8B1D, 0xC1C3, 0x8B04, - 0xC1C4, 0x8B10, 0xC1C5, 0x8C41, 0xC1C6, 0x8C3F, 0xC1C7, 0x8C73, - 0xC1C8, 0x8CFA, 0xC1C9, 0x8CFD, 0xC1CA, 0x8CFC, 0xC1CB, 0x8CF8, - 0xC1CC, 0x8CFB, 0xC1CD, 0x8DA8, 0xC1CE, 0x8E49, 0xC1CF, 0x8E4B, - 0xC1D0, 0x8E48, 0xC1D1, 0x8E4A, 0xC1D2, 0x8F44, 0xC1D3, 0x8F3E, - 0xC1D4, 0x8F42, 0xC1D5, 0x8F45, 0xC1D6, 0x8F3F, 0xC1D7, 0x907F, - 0xC1D8, 0x907D, 0xC1D9, 0x9084, 0xC1DA, 0x9081, 0xC1DB, 0x9082, - 0xC1DC, 0x9080, 0xC1DD, 0x9139, 0xC1DE, 0x91A3, 0xC1DF, 0x919E, - 0xC1E0, 0x919C, 0xC1E1, 0x934D, 0xC1E2, 0x9382, 0xC1E3, 0x9328, - 0xC1E4, 0x9375, 0xC1E5, 0x934A, 0xC1E6, 0x9365, 0xC1E7, 0x934B, - 0xC1E8, 0x9318, 0xC1E9, 0x937E, 0xC1EA, 0x936C, 0xC1EB, 0x935B, - 0xC1EC, 0x9370, 0xC1ED, 0x935A, 0xC1EE, 0x9354, 0xC1EF, 0x95CA, - 0xC1F0, 0x95CB, 0xC1F1, 0x95CC, 0xC1F2, 0x95C8, 0xC1F3, 0x95C6, - 0xC1F4, 0x96B1, 0xC1F5, 0x96B8, 0xC1F6, 0x96D6, 0xC1F7, 0x971C, - 0xC1F8, 0x971E, 0xC1F9, 0x97A0, 0xC1FA, 0x97D3, 0xC1FB, 0x9846, - 0xC1FC, 0x98B6, 0xC1FD, 0x9935, 0xC1FE, 0x9A01, 0xC240, 0x99FF, - 0xC241, 0x9BAE, 0xC242, 0x9BAB, 0xC243, 0x9BAA, 0xC244, 0x9BAD, - 0xC245, 0x9D3B, 0xC246, 0x9D3F, 0xC247, 0x9E8B, 0xC248, 0x9ECF, - 0xC249, 0x9EDE, 0xC24A, 0x9EDC, 0xC24B, 0x9EDD, 0xC24C, 0x9EDB, - 0xC24D, 0x9F3E, 0xC24E, 0x9F4B, 0xC24F, 0x53E2, 0xC250, 0x5695, - 0xC251, 0x56AE, 0xC252, 0x58D9, 0xC253, 0x58D8, 0xC254, 0x5B38, - 0xC255, 0x5F5D, 0xC256, 0x61E3, 0xC257, 0x6233, 0xC258, 0x64F4, - 0xC259, 0x64F2, 0xC25A, 0x64FE, 0xC25B, 0x6506, 0xC25C, 0x64FA, - 0xC25D, 0x64FB, 0xC25E, 0x64F7, 0xC25F, 0x65B7, 0xC260, 0x66DC, - 0xC261, 0x6726, 0xC262, 0x6AB3, 0xC263, 0x6AAC, 0xC264, 0x6AC3, - 0xC265, 0x6ABB, 0xC266, 0x6AB8, 0xC267, 0x6AC2, 0xC268, 0x6AAE, - 0xC269, 0x6AAF, 0xC26A, 0x6B5F, 0xC26B, 0x6B78, 0xC26C, 0x6BAF, - 0xC26D, 0x7009, 0xC26E, 0x700B, 0xC26F, 0x6FFE, 0xC270, 0x7006, - 0xC271, 0x6FFA, 0xC272, 0x7011, 0xC273, 0x700F, 0xC274, 0x71FB, - 0xC275, 0x71FC, 0xC276, 0x71FE, 0xC277, 0x71F8, 0xC278, 0x7377, - 0xC279, 0x7375, 0xC27A, 0x74A7, 0xC27B, 0x74BF, 0xC27C, 0x7515, - 0xC27D, 0x7656, 0xC27E, 0x7658, 0xC2A1, 0x7652, 0xC2A2, 0x77BD, - 0xC2A3, 0x77BF, 0xC2A4, 0x77BB, 0xC2A5, 0x77BC, 0xC2A6, 0x790E, - 0xC2A7, 0x79AE, 0xC2A8, 0x7A61, 0xC2A9, 0x7A62, 0xC2AA, 0x7A60, - 0xC2AB, 0x7AC4, 0xC2AC, 0x7AC5, 0xC2AD, 0x7C2B, 0xC2AE, 0x7C27, - 0xC2AF, 0x7C2A, 0xC2B0, 0x7C1E, 0xC2B1, 0x7C23, 0xC2B2, 0x7C21, - 0xC2B3, 0x7CE7, 0xC2B4, 0x7E54, 0xC2B5, 0x7E55, 0xC2B6, 0x7E5E, - 0xC2B7, 0x7E5A, 0xC2B8, 0x7E61, 0xC2B9, 0x7E52, 0xC2BA, 0x7E59, - 0xC2BB, 0x7F48, 0xC2BC, 0x7FF9, 0xC2BD, 0x7FFB, 0xC2BE, 0x8077, - 0xC2BF, 0x8076, 0xC2C0, 0x81CD, 0xC2C1, 0x81CF, 0xC2C2, 0x820A, - 0xC2C3, 0x85CF, 0xC2C4, 0x85A9, 0xC2C5, 0x85CD, 0xC2C6, 0x85D0, - 0xC2C7, 0x85C9, 0xC2C8, 0x85B0, 0xC2C9, 0x85BA, 0xC2CA, 0x85B9, - 0xC2CB, 0x85A6, 0xC2CC, 0x87EF, 0xC2CD, 0x87EC, 0xC2CE, 0x87F2, - 0xC2CF, 0x87E0, 0xC2D0, 0x8986, 0xC2D1, 0x89B2, 0xC2D2, 0x89F4, - 0xC2D3, 0x8B28, 0xC2D4, 0x8B39, 0xC2D5, 0x8B2C, 0xC2D6, 0x8B2B, - 0xC2D7, 0x8C50, 0xC2D8, 0x8D05, 0xC2D9, 0x8E59, 0xC2DA, 0x8E63, - 0xC2DB, 0x8E66, 0xC2DC, 0x8E64, 0xC2DD, 0x8E5F, 0xC2DE, 0x8E55, - 0xC2DF, 0x8EC0, 0xC2E0, 0x8F49, 0xC2E1, 0x8F4D, 0xC2E2, 0x9087, - 0xC2E3, 0x9083, 0xC2E4, 0x9088, 0xC2E5, 0x91AB, 0xC2E6, 0x91AC, - 0xC2E7, 0x91D0, 0xC2E8, 0x9394, 0xC2E9, 0x938A, 0xC2EA, 0x9396, - 0xC2EB, 0x93A2, 0xC2EC, 0x93B3, 0xC2ED, 0x93AE, 0xC2EE, 0x93AC, - 0xC2EF, 0x93B0, 0xC2F0, 0x9398, 0xC2F1, 0x939A, 0xC2F2, 0x9397, - 0xC2F3, 0x95D4, 0xC2F4, 0x95D6, 0xC2F5, 0x95D0, 0xC2F6, 0x95D5, - 0xC2F7, 0x96E2, 0xC2F8, 0x96DC, 0xC2F9, 0x96D9, 0xC2FA, 0x96DB, - 0xC2FB, 0x96DE, 0xC2FC, 0x9724, 0xC2FD, 0x97A3, 0xC2FE, 0x97A6, - 0xC340, 0x97AD, 0xC341, 0x97F9, 0xC342, 0x984D, 0xC343, 0x984F, - 0xC344, 0x984C, 0xC345, 0x984E, 0xC346, 0x9853, 0xC347, 0x98BA, - 0xC348, 0x993E, 0xC349, 0x993F, 0xC34A, 0x993D, 0xC34B, 0x992E, - 0xC34C, 0x99A5, 0xC34D, 0x9A0E, 0xC34E, 0x9AC1, 0xC34F, 0x9B03, - 0xC350, 0x9B06, 0xC351, 0x9B4F, 0xC352, 0x9B4E, 0xC353, 0x9B4D, - 0xC354, 0x9BCA, 0xC355, 0x9BC9, 0xC356, 0x9BFD, 0xC357, 0x9BC8, - 0xC358, 0x9BC0, 0xC359, 0x9D51, 0xC35A, 0x9D5D, 0xC35B, 0x9D60, - 0xC35C, 0x9EE0, 0xC35D, 0x9F15, 0xC35E, 0x9F2C, 0xC35F, 0x5133, - 0xC360, 0x56A5, 0xC361, 0x58DE, 0xC362, 0x58DF, 0xC363, 0x58E2, - 0xC364, 0x5BF5, 0xC365, 0x9F90, 0xC366, 0x5EEC, 0xC367, 0x61F2, - 0xC368, 0x61F7, 0xC369, 0x61F6, 0xC36A, 0x61F5, 0xC36B, 0x6500, - 0xC36C, 0x650F, 0xC36D, 0x66E0, 0xC36E, 0x66DD, 0xC36F, 0x6AE5, - 0xC370, 0x6ADD, 0xC371, 0x6ADA, 0xC372, 0x6AD3, 0xC373, 0x701B, - 0xC374, 0x701F, 0xC375, 0x7028, 0xC376, 0x701A, 0xC377, 0x701D, - 0xC378, 0x7015, 0xC379, 0x7018, 0xC37A, 0x7206, 0xC37B, 0x720D, - 0xC37C, 0x7258, 0xC37D, 0x72A2, 0xC37E, 0x7378, 0xC3A1, 0x737A, - 0xC3A2, 0x74BD, 0xC3A3, 0x74CA, 0xC3A4, 0x74E3, 0xC3A5, 0x7587, - 0xC3A6, 0x7586, 0xC3A7, 0x765F, 0xC3A8, 0x7661, 0xC3A9, 0x77C7, - 0xC3AA, 0x7919, 0xC3AB, 0x79B1, 0xC3AC, 0x7A6B, 0xC3AD, 0x7A69, - 0xC3AE, 0x7C3E, 0xC3AF, 0x7C3F, 0xC3B0, 0x7C38, 0xC3B1, 0x7C3D, - 0xC3B2, 0x7C37, 0xC3B3, 0x7C40, 0xC3B4, 0x7E6B, 0xC3B5, 0x7E6D, - 0xC3B6, 0x7E79, 0xC3B7, 0x7E69, 0xC3B8, 0x7E6A, 0xC3B9, 0x7F85, - 0xC3BA, 0x7E73, 0xC3BB, 0x7FB6, 0xC3BC, 0x7FB9, 0xC3BD, 0x7FB8, - 0xC3BE, 0x81D8, 0xC3BF, 0x85E9, 0xC3C0, 0x85DD, 0xC3C1, 0x85EA, - 0xC3C2, 0x85D5, 0xC3C3, 0x85E4, 0xC3C4, 0x85E5, 0xC3C5, 0x85F7, - 0xC3C6, 0x87FB, 0xC3C7, 0x8805, 0xC3C8, 0x880D, 0xC3C9, 0x87F9, - 0xC3CA, 0x87FE, 0xC3CB, 0x8960, 0xC3CC, 0x895F, 0xC3CD, 0x8956, - 0xC3CE, 0x895E, 0xC3CF, 0x8B41, 0xC3D0, 0x8B5C, 0xC3D1, 0x8B58, - 0xC3D2, 0x8B49, 0xC3D3, 0x8B5A, 0xC3D4, 0x8B4E, 0xC3D5, 0x8B4F, - 0xC3D6, 0x8B46, 0xC3D7, 0x8B59, 0xC3D8, 0x8D08, 0xC3D9, 0x8D0A, - 0xC3DA, 0x8E7C, 0xC3DB, 0x8E72, 0xC3DC, 0x8E87, 0xC3DD, 0x8E76, - 0xC3DE, 0x8E6C, 0xC3DF, 0x8E7A, 0xC3E0, 0x8E74, 0xC3E1, 0x8F54, - 0xC3E2, 0x8F4E, 0xC3E3, 0x8FAD, 0xC3E4, 0x908A, 0xC3E5, 0x908B, - 0xC3E6, 0x91B1, 0xC3E7, 0x91AE, 0xC3E8, 0x93E1, 0xC3E9, 0x93D1, - 0xC3EA, 0x93DF, 0xC3EB, 0x93C3, 0xC3EC, 0x93C8, 0xC3ED, 0x93DC, - 0xC3EE, 0x93DD, 0xC3EF, 0x93D6, 0xC3F0, 0x93E2, 0xC3F1, 0x93CD, - 0xC3F2, 0x93D8, 0xC3F3, 0x93E4, 0xC3F4, 0x93D7, 0xC3F5, 0x93E8, - 0xC3F6, 0x95DC, 0xC3F7, 0x96B4, 0xC3F8, 0x96E3, 0xC3F9, 0x972A, - 0xC3FA, 0x9727, 0xC3FB, 0x9761, 0xC3FC, 0x97DC, 0xC3FD, 0x97FB, - 0xC3FE, 0x985E, 0xC440, 0x9858, 0xC441, 0x985B, 0xC442, 0x98BC, - 0xC443, 0x9945, 0xC444, 0x9949, 0xC445, 0x9A16, 0xC446, 0x9A19, - 0xC447, 0x9B0D, 0xC448, 0x9BE8, 0xC449, 0x9BE7, 0xC44A, 0x9BD6, - 0xC44B, 0x9BDB, 0xC44C, 0x9D89, 0xC44D, 0x9D61, 0xC44E, 0x9D72, - 0xC44F, 0x9D6A, 0xC450, 0x9D6C, 0xC451, 0x9E92, 0xC452, 0x9E97, - 0xC453, 0x9E93, 0xC454, 0x9EB4, 0xC455, 0x52F8, 0xC456, 0x56A8, - 0xC457, 0x56B7, 0xC458, 0x56B6, 0xC459, 0x56B4, 0xC45A, 0x56BC, - 0xC45B, 0x58E4, 0xC45C, 0x5B40, 0xC45D, 0x5B43, 0xC45E, 0x5B7D, - 0xC45F, 0x5BF6, 0xC460, 0x5DC9, 0xC461, 0x61F8, 0xC462, 0x61FA, - 0xC463, 0x6518, 0xC464, 0x6514, 0xC465, 0x6519, 0xC466, 0x66E6, - 0xC467, 0x6727, 0xC468, 0x6AEC, 0xC469, 0x703E, 0xC46A, 0x7030, - 0xC46B, 0x7032, 0xC46C, 0x7210, 0xC46D, 0x737B, 0xC46E, 0x74CF, - 0xC46F, 0x7662, 0xC470, 0x7665, 0xC471, 0x7926, 0xC472, 0x792A, - 0xC473, 0x792C, 0xC474, 0x792B, 0xC475, 0x7AC7, 0xC476, 0x7AF6, - 0xC477, 0x7C4C, 0xC478, 0x7C43, 0xC479, 0x7C4D, 0xC47A, 0x7CEF, - 0xC47B, 0x7CF0, 0xC47C, 0x8FAE, 0xC47D, 0x7E7D, 0xC47E, 0x7E7C, - 0xC4A1, 0x7E82, 0xC4A2, 0x7F4C, 0xC4A3, 0x8000, 0xC4A4, 0x81DA, - 0xC4A5, 0x8266, 0xC4A6, 0x85FB, 0xC4A7, 0x85F9, 0xC4A8, 0x8611, - 0xC4A9, 0x85FA, 0xC4AA, 0x8606, 0xC4AB, 0x860B, 0xC4AC, 0x8607, - 0xC4AD, 0x860A, 0xC4AE, 0x8814, 0xC4AF, 0x8815, 0xC4B0, 0x8964, - 0xC4B1, 0x89BA, 0xC4B2, 0x89F8, 0xC4B3, 0x8B70, 0xC4B4, 0x8B6C, - 0xC4B5, 0x8B66, 0xC4B6, 0x8B6F, 0xC4B7, 0x8B5F, 0xC4B8, 0x8B6B, - 0xC4B9, 0x8D0F, 0xC4BA, 0x8D0D, 0xC4BB, 0x8E89, 0xC4BC, 0x8E81, - 0xC4BD, 0x8E85, 0xC4BE, 0x8E82, 0xC4BF, 0x91B4, 0xC4C0, 0x91CB, - 0xC4C1, 0x9418, 0xC4C2, 0x9403, 0xC4C3, 0x93FD, 0xC4C4, 0x95E1, - 0xC4C5, 0x9730, 0xC4C6, 0x98C4, 0xC4C7, 0x9952, 0xC4C8, 0x9951, - 0xC4C9, 0x99A8, 0xC4CA, 0x9A2B, 0xC4CB, 0x9A30, 0xC4CC, 0x9A37, - 0xC4CD, 0x9A35, 0xC4CE, 0x9C13, 0xC4CF, 0x9C0D, 0xC4D0, 0x9E79, - 0xC4D1, 0x9EB5, 0xC4D2, 0x9EE8, 0xC4D3, 0x9F2F, 0xC4D4, 0x9F5F, - 0xC4D5, 0x9F63, 0xC4D6, 0x9F61, 0xC4D7, 0x5137, 0xC4D8, 0x5138, - 0xC4D9, 0x56C1, 0xC4DA, 0x56C0, 0xC4DB, 0x56C2, 0xC4DC, 0x5914, - 0xC4DD, 0x5C6C, 0xC4DE, 0x5DCD, 0xC4DF, 0x61FC, 0xC4E0, 0x61FE, - 0xC4E1, 0x651D, 0xC4E2, 0x651C, 0xC4E3, 0x6595, 0xC4E4, 0x66E9, - 0xC4E5, 0x6AFB, 0xC4E6, 0x6B04, 0xC4E7, 0x6AFA, 0xC4E8, 0x6BB2, - 0xC4E9, 0x704C, 0xC4EA, 0x721B, 0xC4EB, 0x72A7, 0xC4EC, 0x74D6, - 0xC4ED, 0x74D4, 0xC4EE, 0x7669, 0xC4EF, 0x77D3, 0xC4F0, 0x7C50, - 0xC4F1, 0x7E8F, 0xC4F2, 0x7E8C, 0xC4F3, 0x7FBC, 0xC4F4, 0x8617, - 0xC4F5, 0x862D, 0xC4F6, 0x861A, 0xC4F7, 0x8823, 0xC4F8, 0x8822, - 0xC4F9, 0x8821, 0xC4FA, 0x881F, 0xC4FB, 0x896A, 0xC4FC, 0x896C, - 0xC4FD, 0x89BD, 0xC4FE, 0x8B74, 0xC540, 0x8B77, 0xC541, 0x8B7D, - 0xC542, 0x8D13, 0xC543, 0x8E8A, 0xC544, 0x8E8D, 0xC545, 0x8E8B, - 0xC546, 0x8F5F, 0xC547, 0x8FAF, 0xC548, 0x91BA, 0xC549, 0x942E, - 0xC54A, 0x9433, 0xC54B, 0x9435, 0xC54C, 0x943A, 0xC54D, 0x9438, - 0xC54E, 0x9432, 0xC54F, 0x942B, 0xC550, 0x95E2, 0xC551, 0x9738, - 0xC552, 0x9739, 0xC553, 0x9732, 0xC554, 0x97FF, 0xC555, 0x9867, - 0xC556, 0x9865, 0xC557, 0x9957, 0xC558, 0x9A45, 0xC559, 0x9A43, - 0xC55A, 0x9A40, 0xC55B, 0x9A3E, 0xC55C, 0x9ACF, 0xC55D, 0x9B54, - 0xC55E, 0x9B51, 0xC55F, 0x9C2D, 0xC560, 0x9C25, 0xC561, 0x9DAF, - 0xC562, 0x9DB4, 0xC563, 0x9DC2, 0xC564, 0x9DB8, 0xC565, 0x9E9D, - 0xC566, 0x9EEF, 0xC567, 0x9F19, 0xC568, 0x9F5C, 0xC569, 0x9F66, - 0xC56A, 0x9F67, 0xC56B, 0x513C, 0xC56C, 0x513B, 0xC56D, 0x56C8, - 0xC56E, 0x56CA, 0xC56F, 0x56C9, 0xC570, 0x5B7F, 0xC571, 0x5DD4, - 0xC572, 0x5DD2, 0xC573, 0x5F4E, 0xC574, 0x61FF, 0xC575, 0x6524, - 0xC576, 0x6B0A, 0xC577, 0x6B61, 0xC578, 0x7051, 0xC579, 0x7058, - 0xC57A, 0x7380, 0xC57B, 0x74E4, 0xC57C, 0x758A, 0xC57D, 0x766E, - 0xC57E, 0x766C, 0xC5A1, 0x79B3, 0xC5A2, 0x7C60, 0xC5A3, 0x7C5F, - 0xC5A4, 0x807E, 0xC5A5, 0x807D, 0xC5A6, 0x81DF, 0xC5A7, 0x8972, - 0xC5A8, 0x896F, 0xC5A9, 0x89FC, 0xC5AA, 0x8B80, 0xC5AB, 0x8D16, - 0xC5AC, 0x8D17, 0xC5AD, 0x8E91, 0xC5AE, 0x8E93, 0xC5AF, 0x8F61, - 0xC5B0, 0x9148, 0xC5B1, 0x9444, 0xC5B2, 0x9451, 0xC5B3, 0x9452, - 0xC5B4, 0x973D, 0xC5B5, 0x973E, 0xC5B6, 0x97C3, 0xC5B7, 0x97C1, - 0xC5B8, 0x986B, 0xC5B9, 0x9955, 0xC5BA, 0x9A55, 0xC5BB, 0x9A4D, - 0xC5BC, 0x9AD2, 0xC5BD, 0x9B1A, 0xC5BE, 0x9C49, 0xC5BF, 0x9C31, - 0xC5C0, 0x9C3E, 0xC5C1, 0x9C3B, 0xC5C2, 0x9DD3, 0xC5C3, 0x9DD7, - 0xC5C4, 0x9F34, 0xC5C5, 0x9F6C, 0xC5C6, 0x9F6A, 0xC5C7, 0x9F94, - 0xC5C8, 0x56CC, 0xC5C9, 0x5DD6, 0xC5CA, 0x6200, 0xC5CB, 0x6523, - 0xC5CC, 0x652B, 0xC5CD, 0x652A, 0xC5CE, 0x66EC, 0xC5CF, 0x6B10, - 0xC5D0, 0x74DA, 0xC5D1, 0x7ACA, 0xC5D2, 0x7C64, 0xC5D3, 0x7C63, - 0xC5D4, 0x7C65, 0xC5D5, 0x7E93, 0xC5D6, 0x7E96, 0xC5D7, 0x7E94, - 0xC5D8, 0x81E2, 0xC5D9, 0x8638, 0xC5DA, 0x863F, 0xC5DB, 0x8831, - 0xC5DC, 0x8B8A, 0xC5DD, 0x9090, 0xC5DE, 0x908F, 0xC5DF, 0x9463, - 0xC5E0, 0x9460, 0xC5E1, 0x9464, 0xC5E2, 0x9768, 0xC5E3, 0x986F, - 0xC5E4, 0x995C, 0xC5E5, 0x9A5A, 0xC5E6, 0x9A5B, 0xC5E7, 0x9A57, - 0xC5E8, 0x9AD3, 0xC5E9, 0x9AD4, 0xC5EA, 0x9AD1, 0xC5EB, 0x9C54, - 0xC5EC, 0x9C57, 0xC5ED, 0x9C56, 0xC5EE, 0x9DE5, 0xC5EF, 0x9E9F, - 0xC5F0, 0x9EF4, 0xC5F1, 0x56D1, 0xC5F2, 0x58E9, 0xC5F3, 0x652C, - 0xC5F4, 0x705E, 0xC5F5, 0x7671, 0xC5F6, 0x7672, 0xC5F7, 0x77D7, - 0xC5F8, 0x7F50, 0xC5F9, 0x7F88, 0xC5FA, 0x8836, 0xC5FB, 0x8839, - 0xC5FC, 0x8862, 0xC5FD, 0x8B93, 0xC5FE, 0x8B92, 0xC640, 0x8B96, - 0xC641, 0x8277, 0xC642, 0x8D1B, 0xC643, 0x91C0, 0xC644, 0x946A, - 0xC645, 0x9742, 0xC646, 0x9748, 0xC647, 0x9744, 0xC648, 0x97C6, - 0xC649, 0x9870, 0xC64A, 0x9A5F, 0xC64B, 0x9B22, 0xC64C, 0x9B58, - 0xC64D, 0x9C5F, 0xC64E, 0x9DF9, 0xC64F, 0x9DFA, 0xC650, 0x9E7C, - 0xC651, 0x9E7D, 0xC652, 0x9F07, 0xC653, 0x9F77, 0xC654, 0x9F72, - 0xC655, 0x5EF3, 0xC656, 0x6B16, 0xC657, 0x7063, 0xC658, 0x7C6C, - 0xC659, 0x7C6E, 0xC65A, 0x883B, 0xC65B, 0x89C0, 0xC65C, 0x8EA1, - 0xC65D, 0x91C1, 0xC65E, 0x9472, 0xC65F, 0x9470, 0xC660, 0x9871, - 0xC661, 0x995E, 0xC662, 0x9AD6, 0xC663, 0x9B23, 0xC664, 0x9ECC, - 0xC665, 0x7064, 0xC666, 0x77DA, 0xC667, 0x8B9A, 0xC668, 0x9477, - 0xC669, 0x97C9, 0xC66A, 0x9A62, 0xC66B, 0x9A65, 0xC66C, 0x7E9C, - 0xC66D, 0x8B9C, 0xC66E, 0x8EAA, 0xC66F, 0x91C5, 0xC670, 0x947D, - 0xC671, 0x947E, 0xC672, 0x947C, 0xC673, 0x9C77, 0xC674, 0x9C78, - 0xC675, 0x9EF7, 0xC676, 0x8C54, 0xC677, 0x947F, 0xC678, 0x9E1A, - 0xC679, 0x7228, 0xC67A, 0x9A6A, 0xC67B, 0x9B31, 0xC67C, 0x9E1B, - 0xC67D, 0x9E1E, 0xC67E, 0x7C72, 0xC940, 0x4E42, 0xC941, 0x4E5C, - 0xC942, 0x51F5, 0xC943, 0x531A, 0xC944, 0x5382, 0xC945, 0x4E07, - 0xC946, 0x4E0C, 0xC947, 0x4E47, 0xC948, 0x4E8D, 0xC949, 0x56D7, - 0xC94A, 0xFA0C, 0xC94B, 0x5C6E, 0xC94C, 0x5F73, 0xC94D, 0x4E0F, - 0xC94E, 0x5187, 0xC94F, 0x4E0E, 0xC950, 0x4E2E, 0xC951, 0x4E93, - 0xC952, 0x4EC2, 0xC953, 0x4EC9, 0xC954, 0x4EC8, 0xC955, 0x5198, - 0xC956, 0x52FC, 0xC957, 0x536C, 0xC958, 0x53B9, 0xC959, 0x5720, - 0xC95A, 0x5903, 0xC95B, 0x592C, 0xC95C, 0x5C10, 0xC95D, 0x5DFF, - 0xC95E, 0x65E1, 0xC95F, 0x6BB3, 0xC960, 0x6BCC, 0xC961, 0x6C14, - 0xC962, 0x723F, 0xC963, 0x4E31, 0xC964, 0x4E3C, 0xC965, 0x4EE8, - 0xC966, 0x4EDC, 0xC967, 0x4EE9, 0xC968, 0x4EE1, 0xC969, 0x4EDD, - 0xC96A, 0x4EDA, 0xC96B, 0x520C, 0xC96C, 0x531C, 0xC96D, 0x534C, - 0xC96E, 0x5722, 0xC96F, 0x5723, 0xC970, 0x5917, 0xC971, 0x592F, - 0xC972, 0x5B81, 0xC973, 0x5B84, 0xC974, 0x5C12, 0xC975, 0x5C3B, - 0xC976, 0x5C74, 0xC977, 0x5C73, 0xC978, 0x5E04, 0xC979, 0x5E80, - 0xC97A, 0x5E82, 0xC97B, 0x5FC9, 0xC97C, 0x6209, 0xC97D, 0x6250, - 0xC97E, 0x6C15, 0xC9A1, 0x6C36, 0xC9A2, 0x6C43, 0xC9A3, 0x6C3F, - 0xC9A4, 0x6C3B, 0xC9A5, 0x72AE, 0xC9A6, 0x72B0, 0xC9A7, 0x738A, - 0xC9A8, 0x79B8, 0xC9A9, 0x808A, 0xC9AA, 0x961E, 0xC9AB, 0x4F0E, - 0xC9AC, 0x4F18, 0xC9AD, 0x4F2C, 0xC9AE, 0x4EF5, 0xC9AF, 0x4F14, - 0xC9B0, 0x4EF1, 0xC9B1, 0x4F00, 0xC9B2, 0x4EF7, 0xC9B3, 0x4F08, - 0xC9B4, 0x4F1D, 0xC9B5, 0x4F02, 0xC9B6, 0x4F05, 0xC9B7, 0x4F22, - 0xC9B8, 0x4F13, 0xC9B9, 0x4F04, 0xC9BA, 0x4EF4, 0xC9BB, 0x4F12, - 0xC9BC, 0x51B1, 0xC9BD, 0x5213, 0xC9BE, 0x5209, 0xC9BF, 0x5210, - 0xC9C0, 0x52A6, 0xC9C1, 0x5322, 0xC9C2, 0x531F, 0xC9C3, 0x534D, - 0xC9C4, 0x538A, 0xC9C5, 0x5407, 0xC9C6, 0x56E1, 0xC9C7, 0x56DF, - 0xC9C8, 0x572E, 0xC9C9, 0x572A, 0xC9CA, 0x5734, 0xC9CB, 0x593C, - 0xC9CC, 0x5980, 0xC9CD, 0x597C, 0xC9CE, 0x5985, 0xC9CF, 0x597B, - 0xC9D0, 0x597E, 0xC9D1, 0x5977, 0xC9D2, 0x597F, 0xC9D3, 0x5B56, - 0xC9D4, 0x5C15, 0xC9D5, 0x5C25, 0xC9D6, 0x5C7C, 0xC9D7, 0x5C7A, - 0xC9D8, 0x5C7B, 0xC9D9, 0x5C7E, 0xC9DA, 0x5DDF, 0xC9DB, 0x5E75, - 0xC9DC, 0x5E84, 0xC9DD, 0x5F02, 0xC9DE, 0x5F1A, 0xC9DF, 0x5F74, - 0xC9E0, 0x5FD5, 0xC9E1, 0x5FD4, 0xC9E2, 0x5FCF, 0xC9E3, 0x625C, - 0xC9E4, 0x625E, 0xC9E5, 0x6264, 0xC9E6, 0x6261, 0xC9E7, 0x6266, - 0xC9E8, 0x6262, 0xC9E9, 0x6259, 0xC9EA, 0x6260, 0xC9EB, 0x625A, - 0xC9EC, 0x6265, 0xC9ED, 0x65EF, 0xC9EE, 0x65EE, 0xC9EF, 0x673E, - 0xC9F0, 0x6739, 0xC9F1, 0x6738, 0xC9F2, 0x673B, 0xC9F3, 0x673A, - 0xC9F4, 0x673F, 0xC9F5, 0x673C, 0xC9F6, 0x6733, 0xC9F7, 0x6C18, - 0xC9F8, 0x6C46, 0xC9F9, 0x6C52, 0xC9FA, 0x6C5C, 0xC9FB, 0x6C4F, - 0xC9FC, 0x6C4A, 0xC9FD, 0x6C54, 0xC9FE, 0x6C4B, 0xCA40, 0x6C4C, - 0xCA41, 0x7071, 0xCA42, 0x725E, 0xCA43, 0x72B4, 0xCA44, 0x72B5, - 0xCA45, 0x738E, 0xCA46, 0x752A, 0xCA47, 0x767F, 0xCA48, 0x7A75, - 0xCA49, 0x7F51, 0xCA4A, 0x8278, 0xCA4B, 0x827C, 0xCA4C, 0x8280, - 0xCA4D, 0x827D, 0xCA4E, 0x827F, 0xCA4F, 0x864D, 0xCA50, 0x897E, - 0xCA51, 0x9099, 0xCA52, 0x9097, 0xCA53, 0x9098, 0xCA54, 0x909B, - 0xCA55, 0x9094, 0xCA56, 0x9622, 0xCA57, 0x9624, 0xCA58, 0x9620, - 0xCA59, 0x9623, 0xCA5A, 0x4F56, 0xCA5B, 0x4F3B, 0xCA5C, 0x4F62, - 0xCA5D, 0x4F49, 0xCA5E, 0x4F53, 0xCA5F, 0x4F64, 0xCA60, 0x4F3E, - 0xCA61, 0x4F67, 0xCA62, 0x4F52, 0xCA63, 0x4F5F, 0xCA64, 0x4F41, - 0xCA65, 0x4F58, 0xCA66, 0x4F2D, 0xCA67, 0x4F33, 0xCA68, 0x4F3F, - 0xCA69, 0x4F61, 0xCA6A, 0x518F, 0xCA6B, 0x51B9, 0xCA6C, 0x521C, - 0xCA6D, 0x521E, 0xCA6E, 0x5221, 0xCA6F, 0x52AD, 0xCA70, 0x52AE, - 0xCA71, 0x5309, 0xCA72, 0x5363, 0xCA73, 0x5372, 0xCA74, 0x538E, - 0xCA75, 0x538F, 0xCA76, 0x5430, 0xCA77, 0x5437, 0xCA78, 0x542A, - 0xCA79, 0x5454, 0xCA7A, 0x5445, 0xCA7B, 0x5419, 0xCA7C, 0x541C, - 0xCA7D, 0x5425, 0xCA7E, 0x5418, 0xCAA1, 0x543D, 0xCAA2, 0x544F, - 0xCAA3, 0x5441, 0xCAA4, 0x5428, 0xCAA5, 0x5424, 0xCAA6, 0x5447, - 0xCAA7, 0x56EE, 0xCAA8, 0x56E7, 0xCAA9, 0x56E5, 0xCAAA, 0x5741, - 0xCAAB, 0x5745, 0xCAAC, 0x574C, 0xCAAD, 0x5749, 0xCAAE, 0x574B, - 0xCAAF, 0x5752, 0xCAB0, 0x5906, 0xCAB1, 0x5940, 0xCAB2, 0x59A6, - 0xCAB3, 0x5998, 0xCAB4, 0x59A0, 0xCAB5, 0x5997, 0xCAB6, 0x598E, - 0xCAB7, 0x59A2, 0xCAB8, 0x5990, 0xCAB9, 0x598F, 0xCABA, 0x59A7, - 0xCABB, 0x59A1, 0xCABC, 0x5B8E, 0xCABD, 0x5B92, 0xCABE, 0x5C28, - 0xCABF, 0x5C2A, 0xCAC0, 0x5C8D, 0xCAC1, 0x5C8F, 0xCAC2, 0x5C88, - 0xCAC3, 0x5C8B, 0xCAC4, 0x5C89, 0xCAC5, 0x5C92, 0xCAC6, 0x5C8A, - 0xCAC7, 0x5C86, 0xCAC8, 0x5C93, 0xCAC9, 0x5C95, 0xCACA, 0x5DE0, - 0xCACB, 0x5E0A, 0xCACC, 0x5E0E, 0xCACD, 0x5E8B, 0xCACE, 0x5E89, - 0xCACF, 0x5E8C, 0xCAD0, 0x5E88, 0xCAD1, 0x5E8D, 0xCAD2, 0x5F05, - 0xCAD3, 0x5F1D, 0xCAD4, 0x5F78, 0xCAD5, 0x5F76, 0xCAD6, 0x5FD2, - 0xCAD7, 0x5FD1, 0xCAD8, 0x5FD0, 0xCAD9, 0x5FED, 0xCADA, 0x5FE8, - 0xCADB, 0x5FEE, 0xCADC, 0x5FF3, 0xCADD, 0x5FE1, 0xCADE, 0x5FE4, - 0xCADF, 0x5FE3, 0xCAE0, 0x5FFA, 0xCAE1, 0x5FEF, 0xCAE2, 0x5FF7, - 0xCAE3, 0x5FFB, 0xCAE4, 0x6000, 0xCAE5, 0x5FF4, 0xCAE6, 0x623A, - 0xCAE7, 0x6283, 0xCAE8, 0x628C, 0xCAE9, 0x628E, 0xCAEA, 0x628F, - 0xCAEB, 0x6294, 0xCAEC, 0x6287, 0xCAED, 0x6271, 0xCAEE, 0x627B, - 0xCAEF, 0x627A, 0xCAF0, 0x6270, 0xCAF1, 0x6281, 0xCAF2, 0x6288, - 0xCAF3, 0x6277, 0xCAF4, 0x627D, 0xCAF5, 0x6272, 0xCAF6, 0x6274, - 0xCAF7, 0x6537, 0xCAF8, 0x65F0, 0xCAF9, 0x65F4, 0xCAFA, 0x65F3, - 0xCAFB, 0x65F2, 0xCAFC, 0x65F5, 0xCAFD, 0x6745, 0xCAFE, 0x6747, - 0xCB40, 0x6759, 0xCB41, 0x6755, 0xCB42, 0x674C, 0xCB43, 0x6748, - 0xCB44, 0x675D, 0xCB45, 0x674D, 0xCB46, 0x675A, 0xCB47, 0x674B, - 0xCB48, 0x6BD0, 0xCB49, 0x6C19, 0xCB4A, 0x6C1A, 0xCB4B, 0x6C78, - 0xCB4C, 0x6C67, 0xCB4D, 0x6C6B, 0xCB4E, 0x6C84, 0xCB4F, 0x6C8B, - 0xCB50, 0x6C8F, 0xCB51, 0x6C71, 0xCB52, 0x6C6F, 0xCB53, 0x6C69, - 0xCB54, 0x6C9A, 0xCB55, 0x6C6D, 0xCB56, 0x6C87, 0xCB57, 0x6C95, - 0xCB58, 0x6C9C, 0xCB59, 0x6C66, 0xCB5A, 0x6C73, 0xCB5B, 0x6C65, - 0xCB5C, 0x6C7B, 0xCB5D, 0x6C8E, 0xCB5E, 0x7074, 0xCB5F, 0x707A, - 0xCB60, 0x7263, 0xCB61, 0x72BF, 0xCB62, 0x72BD, 0xCB63, 0x72C3, - 0xCB64, 0x72C6, 0xCB65, 0x72C1, 0xCB66, 0x72BA, 0xCB67, 0x72C5, - 0xCB68, 0x7395, 0xCB69, 0x7397, 0xCB6A, 0x7393, 0xCB6B, 0x7394, - 0xCB6C, 0x7392, 0xCB6D, 0x753A, 0xCB6E, 0x7539, 0xCB6F, 0x7594, - 0xCB70, 0x7595, 0xCB71, 0x7681, 0xCB72, 0x793D, 0xCB73, 0x8034, - 0xCB74, 0x8095, 0xCB75, 0x8099, 0xCB76, 0x8090, 0xCB77, 0x8092, - 0xCB78, 0x809C, 0xCB79, 0x8290, 0xCB7A, 0x828F, 0xCB7B, 0x8285, - 0xCB7C, 0x828E, 0xCB7D, 0x8291, 0xCB7E, 0x8293, 0xCBA1, 0x828A, - 0xCBA2, 0x8283, 0xCBA3, 0x8284, 0xCBA4, 0x8C78, 0xCBA5, 0x8FC9, - 0xCBA6, 0x8FBF, 0xCBA7, 0x909F, 0xCBA8, 0x90A1, 0xCBA9, 0x90A5, - 0xCBAA, 0x909E, 0xCBAB, 0x90A7, 0xCBAC, 0x90A0, 0xCBAD, 0x9630, - 0xCBAE, 0x9628, 0xCBAF, 0x962F, 0xCBB0, 0x962D, 0xCBB1, 0x4E33, - 0xCBB2, 0x4F98, 0xCBB3, 0x4F7C, 0xCBB4, 0x4F85, 0xCBB5, 0x4F7D, - 0xCBB6, 0x4F80, 0xCBB7, 0x4F87, 0xCBB8, 0x4F76, 0xCBB9, 0x4F74, - 0xCBBA, 0x4F89, 0xCBBB, 0x4F84, 0xCBBC, 0x4F77, 0xCBBD, 0x4F4C, - 0xCBBE, 0x4F97, 0xCBBF, 0x4F6A, 0xCBC0, 0x4F9A, 0xCBC1, 0x4F79, - 0xCBC2, 0x4F81, 0xCBC3, 0x4F78, 0xCBC4, 0x4F90, 0xCBC5, 0x4F9C, - 0xCBC6, 0x4F94, 0xCBC7, 0x4F9E, 0xCBC8, 0x4F92, 0xCBC9, 0x4F82, - 0xCBCA, 0x4F95, 0xCBCB, 0x4F6B, 0xCBCC, 0x4F6E, 0xCBCD, 0x519E, - 0xCBCE, 0x51BC, 0xCBCF, 0x51BE, 0xCBD0, 0x5235, 0xCBD1, 0x5232, - 0xCBD2, 0x5233, 0xCBD3, 0x5246, 0xCBD4, 0x5231, 0xCBD5, 0x52BC, - 0xCBD6, 0x530A, 0xCBD7, 0x530B, 0xCBD8, 0x533C, 0xCBD9, 0x5392, - 0xCBDA, 0x5394, 0xCBDB, 0x5487, 0xCBDC, 0x547F, 0xCBDD, 0x5481, - 0xCBDE, 0x5491, 0xCBDF, 0x5482, 0xCBE0, 0x5488, 0xCBE1, 0x546B, - 0xCBE2, 0x547A, 0xCBE3, 0x547E, 0xCBE4, 0x5465, 0xCBE5, 0x546C, - 0xCBE6, 0x5474, 0xCBE7, 0x5466, 0xCBE8, 0x548D, 0xCBE9, 0x546F, - 0xCBEA, 0x5461, 0xCBEB, 0x5460, 0xCBEC, 0x5498, 0xCBED, 0x5463, - 0xCBEE, 0x5467, 0xCBEF, 0x5464, 0xCBF0, 0x56F7, 0xCBF1, 0x56F9, - 0xCBF2, 0x576F, 0xCBF3, 0x5772, 0xCBF4, 0x576D, 0xCBF5, 0x576B, - 0xCBF6, 0x5771, 0xCBF7, 0x5770, 0xCBF8, 0x5776, 0xCBF9, 0x5780, - 0xCBFA, 0x5775, 0xCBFB, 0x577B, 0xCBFC, 0x5773, 0xCBFD, 0x5774, - 0xCBFE, 0x5762, 0xCC40, 0x5768, 0xCC41, 0x577D, 0xCC42, 0x590C, - 0xCC43, 0x5945, 0xCC44, 0x59B5, 0xCC45, 0x59BA, 0xCC46, 0x59CF, - 0xCC47, 0x59CE, 0xCC48, 0x59B2, 0xCC49, 0x59CC, 0xCC4A, 0x59C1, - 0xCC4B, 0x59B6, 0xCC4C, 0x59BC, 0xCC4D, 0x59C3, 0xCC4E, 0x59D6, - 0xCC4F, 0x59B1, 0xCC50, 0x59BD, 0xCC51, 0x59C0, 0xCC52, 0x59C8, - 0xCC53, 0x59B4, 0xCC54, 0x59C7, 0xCC55, 0x5B62, 0xCC56, 0x5B65, - 0xCC57, 0x5B93, 0xCC58, 0x5B95, 0xCC59, 0x5C44, 0xCC5A, 0x5C47, - 0xCC5B, 0x5CAE, 0xCC5C, 0x5CA4, 0xCC5D, 0x5CA0, 0xCC5E, 0x5CB5, - 0xCC5F, 0x5CAF, 0xCC60, 0x5CA8, 0xCC61, 0x5CAC, 0xCC62, 0x5C9F, - 0xCC63, 0x5CA3, 0xCC64, 0x5CAD, 0xCC65, 0x5CA2, 0xCC66, 0x5CAA, - 0xCC67, 0x5CA7, 0xCC68, 0x5C9D, 0xCC69, 0x5CA5, 0xCC6A, 0x5CB6, - 0xCC6B, 0x5CB0, 0xCC6C, 0x5CA6, 0xCC6D, 0x5E17, 0xCC6E, 0x5E14, - 0xCC6F, 0x5E19, 0xCC70, 0x5F28, 0xCC71, 0x5F22, 0xCC72, 0x5F23, - 0xCC73, 0x5F24, 0xCC74, 0x5F54, 0xCC75, 0x5F82, 0xCC76, 0x5F7E, - 0xCC77, 0x5F7D, 0xCC78, 0x5FDE, 0xCC79, 0x5FE5, 0xCC7A, 0x602D, - 0xCC7B, 0x6026, 0xCC7C, 0x6019, 0xCC7D, 0x6032, 0xCC7E, 0x600B, - 0xCCA1, 0x6034, 0xCCA2, 0x600A, 0xCCA3, 0x6017, 0xCCA4, 0x6033, - 0xCCA5, 0x601A, 0xCCA6, 0x601E, 0xCCA7, 0x602C, 0xCCA8, 0x6022, - 0xCCA9, 0x600D, 0xCCAA, 0x6010, 0xCCAB, 0x602E, 0xCCAC, 0x6013, - 0xCCAD, 0x6011, 0xCCAE, 0x600C, 0xCCAF, 0x6009, 0xCCB0, 0x601C, - 0xCCB1, 0x6214, 0xCCB2, 0x623D, 0xCCB3, 0x62AD, 0xCCB4, 0x62B4, - 0xCCB5, 0x62D1, 0xCCB6, 0x62BE, 0xCCB7, 0x62AA, 0xCCB8, 0x62B6, - 0xCCB9, 0x62CA, 0xCCBA, 0x62AE, 0xCCBB, 0x62B3, 0xCCBC, 0x62AF, - 0xCCBD, 0x62BB, 0xCCBE, 0x62A9, 0xCCBF, 0x62B0, 0xCCC0, 0x62B8, - 0xCCC1, 0x653D, 0xCCC2, 0x65A8, 0xCCC3, 0x65BB, 0xCCC4, 0x6609, - 0xCCC5, 0x65FC, 0xCCC6, 0x6604, 0xCCC7, 0x6612, 0xCCC8, 0x6608, - 0xCCC9, 0x65FB, 0xCCCA, 0x6603, 0xCCCB, 0x660B, 0xCCCC, 0x660D, - 0xCCCD, 0x6605, 0xCCCE, 0x65FD, 0xCCCF, 0x6611, 0xCCD0, 0x6610, - 0xCCD1, 0x66F6, 0xCCD2, 0x670A, 0xCCD3, 0x6785, 0xCCD4, 0x676C, - 0xCCD5, 0x678E, 0xCCD6, 0x6792, 0xCCD7, 0x6776, 0xCCD8, 0x677B, - 0xCCD9, 0x6798, 0xCCDA, 0x6786, 0xCCDB, 0x6784, 0xCCDC, 0x6774, - 0xCCDD, 0x678D, 0xCCDE, 0x678C, 0xCCDF, 0x677A, 0xCCE0, 0x679F, - 0xCCE1, 0x6791, 0xCCE2, 0x6799, 0xCCE3, 0x6783, 0xCCE4, 0x677D, - 0xCCE5, 0x6781, 0xCCE6, 0x6778, 0xCCE7, 0x6779, 0xCCE8, 0x6794, - 0xCCE9, 0x6B25, 0xCCEA, 0x6B80, 0xCCEB, 0x6B7E, 0xCCEC, 0x6BDE, - 0xCCED, 0x6C1D, 0xCCEE, 0x6C93, 0xCCEF, 0x6CEC, 0xCCF0, 0x6CEB, - 0xCCF1, 0x6CEE, 0xCCF2, 0x6CD9, 0xCCF3, 0x6CB6, 0xCCF4, 0x6CD4, - 0xCCF5, 0x6CAD, 0xCCF6, 0x6CE7, 0xCCF7, 0x6CB7, 0xCCF8, 0x6CD0, - 0xCCF9, 0x6CC2, 0xCCFA, 0x6CBA, 0xCCFB, 0x6CC3, 0xCCFC, 0x6CC6, - 0xCCFD, 0x6CED, 0xCCFE, 0x6CF2, 0xCD40, 0x6CD2, 0xCD41, 0x6CDD, - 0xCD42, 0x6CB4, 0xCD43, 0x6C8A, 0xCD44, 0x6C9D, 0xCD45, 0x6C80, - 0xCD46, 0x6CDE, 0xCD47, 0x6CC0, 0xCD48, 0x6D30, 0xCD49, 0x6CCD, - 0xCD4A, 0x6CC7, 0xCD4B, 0x6CB0, 0xCD4C, 0x6CF9, 0xCD4D, 0x6CCF, - 0xCD4E, 0x6CE9, 0xCD4F, 0x6CD1, 0xCD50, 0x7094, 0xCD51, 0x7098, - 0xCD52, 0x7085, 0xCD53, 0x7093, 0xCD54, 0x7086, 0xCD55, 0x7084, - 0xCD56, 0x7091, 0xCD57, 0x7096, 0xCD58, 0x7082, 0xCD59, 0x709A, - 0xCD5A, 0x7083, 0xCD5B, 0x726A, 0xCD5C, 0x72D6, 0xCD5D, 0x72CB, - 0xCD5E, 0x72D8, 0xCD5F, 0x72C9, 0xCD60, 0x72DC, 0xCD61, 0x72D2, - 0xCD62, 0x72D4, 0xCD63, 0x72DA, 0xCD64, 0x72CC, 0xCD65, 0x72D1, - 0xCD66, 0x73A4, 0xCD67, 0x73A1, 0xCD68, 0x73AD, 0xCD69, 0x73A6, - 0xCD6A, 0x73A2, 0xCD6B, 0x73A0, 0xCD6C, 0x73AC, 0xCD6D, 0x739D, - 0xCD6E, 0x74DD, 0xCD6F, 0x74E8, 0xCD70, 0x753F, 0xCD71, 0x7540, - 0xCD72, 0x753E, 0xCD73, 0x758C, 0xCD74, 0x7598, 0xCD75, 0x76AF, - 0xCD76, 0x76F3, 0xCD77, 0x76F1, 0xCD78, 0x76F0, 0xCD79, 0x76F5, - 0xCD7A, 0x77F8, 0xCD7B, 0x77FC, 0xCD7C, 0x77F9, 0xCD7D, 0x77FB, - 0xCD7E, 0x77FA, 0xCDA1, 0x77F7, 0xCDA2, 0x7942, 0xCDA3, 0x793F, - 0xCDA4, 0x79C5, 0xCDA5, 0x7A78, 0xCDA6, 0x7A7B, 0xCDA7, 0x7AFB, - 0xCDA8, 0x7C75, 0xCDA9, 0x7CFD, 0xCDAA, 0x8035, 0xCDAB, 0x808F, - 0xCDAC, 0x80AE, 0xCDAD, 0x80A3, 0xCDAE, 0x80B8, 0xCDAF, 0x80B5, - 0xCDB0, 0x80AD, 0xCDB1, 0x8220, 0xCDB2, 0x82A0, 0xCDB3, 0x82C0, - 0xCDB4, 0x82AB, 0xCDB5, 0x829A, 0xCDB6, 0x8298, 0xCDB7, 0x829B, - 0xCDB8, 0x82B5, 0xCDB9, 0x82A7, 0xCDBA, 0x82AE, 0xCDBB, 0x82BC, - 0xCDBC, 0x829E, 0xCDBD, 0x82BA, 0xCDBE, 0x82B4, 0xCDBF, 0x82A8, - 0xCDC0, 0x82A1, 0xCDC1, 0x82A9, 0xCDC2, 0x82C2, 0xCDC3, 0x82A4, - 0xCDC4, 0x82C3, 0xCDC5, 0x82B6, 0xCDC6, 0x82A2, 0xCDC7, 0x8670, - 0xCDC8, 0x866F, 0xCDC9, 0x866D, 0xCDCA, 0x866E, 0xCDCB, 0x8C56, - 0xCDCC, 0x8FD2, 0xCDCD, 0x8FCB, 0xCDCE, 0x8FD3, 0xCDCF, 0x8FCD, - 0xCDD0, 0x8FD6, 0xCDD1, 0x8FD5, 0xCDD2, 0x8FD7, 0xCDD3, 0x90B2, - 0xCDD4, 0x90B4, 0xCDD5, 0x90AF, 0xCDD6, 0x90B3, 0xCDD7, 0x90B0, - 0xCDD8, 0x9639, 0xCDD9, 0x963D, 0xCDDA, 0x963C, 0xCDDB, 0x963A, - 0xCDDC, 0x9643, 0xCDDD, 0x4FCD, 0xCDDE, 0x4FC5, 0xCDDF, 0x4FD3, - 0xCDE0, 0x4FB2, 0xCDE1, 0x4FC9, 0xCDE2, 0x4FCB, 0xCDE3, 0x4FC1, - 0xCDE4, 0x4FD4, 0xCDE5, 0x4FDC, 0xCDE6, 0x4FD9, 0xCDE7, 0x4FBB, - 0xCDE8, 0x4FB3, 0xCDE9, 0x4FDB, 0xCDEA, 0x4FC7, 0xCDEB, 0x4FD6, - 0xCDEC, 0x4FBA, 0xCDED, 0x4FC0, 0xCDEE, 0x4FB9, 0xCDEF, 0x4FEC, - 0xCDF0, 0x5244, 0xCDF1, 0x5249, 0xCDF2, 0x52C0, 0xCDF3, 0x52C2, - 0xCDF4, 0x533D, 0xCDF5, 0x537C, 0xCDF6, 0x5397, 0xCDF7, 0x5396, - 0xCDF8, 0x5399, 0xCDF9, 0x5398, 0xCDFA, 0x54BA, 0xCDFB, 0x54A1, - 0xCDFC, 0x54AD, 0xCDFD, 0x54A5, 0xCDFE, 0x54CF, 0xCE40, 0x54C3, - 0xCE41, 0x830D, 0xCE42, 0x54B7, 0xCE43, 0x54AE, 0xCE44, 0x54D6, - 0xCE45, 0x54B6, 0xCE46, 0x54C5, 0xCE47, 0x54C6, 0xCE48, 0x54A0, - 0xCE49, 0x5470, 0xCE4A, 0x54BC, 0xCE4B, 0x54A2, 0xCE4C, 0x54BE, - 0xCE4D, 0x5472, 0xCE4E, 0x54DE, 0xCE4F, 0x54B0, 0xCE50, 0x57B5, - 0xCE51, 0x579E, 0xCE52, 0x579F, 0xCE53, 0x57A4, 0xCE54, 0x578C, - 0xCE55, 0x5797, 0xCE56, 0x579D, 0xCE57, 0x579B, 0xCE58, 0x5794, - 0xCE59, 0x5798, 0xCE5A, 0x578F, 0xCE5B, 0x5799, 0xCE5C, 0x57A5, - 0xCE5D, 0x579A, 0xCE5E, 0x5795, 0xCE5F, 0x58F4, 0xCE60, 0x590D, - 0xCE61, 0x5953, 0xCE62, 0x59E1, 0xCE63, 0x59DE, 0xCE64, 0x59EE, - 0xCE65, 0x5A00, 0xCE66, 0x59F1, 0xCE67, 0x59DD, 0xCE68, 0x59FA, - 0xCE69, 0x59FD, 0xCE6A, 0x59FC, 0xCE6B, 0x59F6, 0xCE6C, 0x59E4, - 0xCE6D, 0x59F2, 0xCE6E, 0x59F7, 0xCE6F, 0x59DB, 0xCE70, 0x59E9, - 0xCE71, 0x59F3, 0xCE72, 0x59F5, 0xCE73, 0x59E0, 0xCE74, 0x59FE, - 0xCE75, 0x59F4, 0xCE76, 0x59ED, 0xCE77, 0x5BA8, 0xCE78, 0x5C4C, - 0xCE79, 0x5CD0, 0xCE7A, 0x5CD8, 0xCE7B, 0x5CCC, 0xCE7C, 0x5CD7, - 0xCE7D, 0x5CCB, 0xCE7E, 0x5CDB, 0xCEA1, 0x5CDE, 0xCEA2, 0x5CDA, - 0xCEA3, 0x5CC9, 0xCEA4, 0x5CC7, 0xCEA5, 0x5CCA, 0xCEA6, 0x5CD6, - 0xCEA7, 0x5CD3, 0xCEA8, 0x5CD4, 0xCEA9, 0x5CCF, 0xCEAA, 0x5CC8, - 0xCEAB, 0x5CC6, 0xCEAC, 0x5CCE, 0xCEAD, 0x5CDF, 0xCEAE, 0x5CF8, - 0xCEAF, 0x5DF9, 0xCEB0, 0x5E21, 0xCEB1, 0x5E22, 0xCEB2, 0x5E23, - 0xCEB3, 0x5E20, 0xCEB4, 0x5E24, 0xCEB5, 0x5EB0, 0xCEB6, 0x5EA4, - 0xCEB7, 0x5EA2, 0xCEB8, 0x5E9B, 0xCEB9, 0x5EA3, 0xCEBA, 0x5EA5, - 0xCEBB, 0x5F07, 0xCEBC, 0x5F2E, 0xCEBD, 0x5F56, 0xCEBE, 0x5F86, - 0xCEBF, 0x6037, 0xCEC0, 0x6039, 0xCEC1, 0x6054, 0xCEC2, 0x6072, - 0xCEC3, 0x605E, 0xCEC4, 0x6045, 0xCEC5, 0x6053, 0xCEC6, 0x6047, - 0xCEC7, 0x6049, 0xCEC8, 0x605B, 0xCEC9, 0x604C, 0xCECA, 0x6040, - 0xCECB, 0x6042, 0xCECC, 0x605F, 0xCECD, 0x6024, 0xCECE, 0x6044, - 0xCECF, 0x6058, 0xCED0, 0x6066, 0xCED1, 0x606E, 0xCED2, 0x6242, - 0xCED3, 0x6243, 0xCED4, 0x62CF, 0xCED5, 0x630D, 0xCED6, 0x630B, - 0xCED7, 0x62F5, 0xCED8, 0x630E, 0xCED9, 0x6303, 0xCEDA, 0x62EB, - 0xCEDB, 0x62F9, 0xCEDC, 0x630F, 0xCEDD, 0x630C, 0xCEDE, 0x62F8, - 0xCEDF, 0x62F6, 0xCEE0, 0x6300, 0xCEE1, 0x6313, 0xCEE2, 0x6314, - 0xCEE3, 0x62FA, 0xCEE4, 0x6315, 0xCEE5, 0x62FB, 0xCEE6, 0x62F0, - 0xCEE7, 0x6541, 0xCEE8, 0x6543, 0xCEE9, 0x65AA, 0xCEEA, 0x65BF, - 0xCEEB, 0x6636, 0xCEEC, 0x6621, 0xCEED, 0x6632, 0xCEEE, 0x6635, - 0xCEEF, 0x661C, 0xCEF0, 0x6626, 0xCEF1, 0x6622, 0xCEF2, 0x6633, - 0xCEF3, 0x662B, 0xCEF4, 0x663A, 0xCEF5, 0x661D, 0xCEF6, 0x6634, - 0xCEF7, 0x6639, 0xCEF8, 0x662E, 0xCEF9, 0x670F, 0xCEFA, 0x6710, - 0xCEFB, 0x67C1, 0xCEFC, 0x67F2, 0xCEFD, 0x67C8, 0xCEFE, 0x67BA, - 0xCF40, 0x67DC, 0xCF41, 0x67BB, 0xCF42, 0x67F8, 0xCF43, 0x67D8, - 0xCF44, 0x67C0, 0xCF45, 0x67B7, 0xCF46, 0x67C5, 0xCF47, 0x67EB, - 0xCF48, 0x67E4, 0xCF49, 0x67DF, 0xCF4A, 0x67B5, 0xCF4B, 0x67CD, - 0xCF4C, 0x67B3, 0xCF4D, 0x67F7, 0xCF4E, 0x67F6, 0xCF4F, 0x67EE, - 0xCF50, 0x67E3, 0xCF51, 0x67C2, 0xCF52, 0x67B9, 0xCF53, 0x67CE, - 0xCF54, 0x67E7, 0xCF55, 0x67F0, 0xCF56, 0x67B2, 0xCF57, 0x67FC, - 0xCF58, 0x67C6, 0xCF59, 0x67ED, 0xCF5A, 0x67CC, 0xCF5B, 0x67AE, - 0xCF5C, 0x67E6, 0xCF5D, 0x67DB, 0xCF5E, 0x67FA, 0xCF5F, 0x67C9, - 0xCF60, 0x67CA, 0xCF61, 0x67C3, 0xCF62, 0x67EA, 0xCF63, 0x67CB, - 0xCF64, 0x6B28, 0xCF65, 0x6B82, 0xCF66, 0x6B84, 0xCF67, 0x6BB6, - 0xCF68, 0x6BD6, 0xCF69, 0x6BD8, 0xCF6A, 0x6BE0, 0xCF6B, 0x6C20, - 0xCF6C, 0x6C21, 0xCF6D, 0x6D28, 0xCF6E, 0x6D34, 0xCF6F, 0x6D2D, - 0xCF70, 0x6D1F, 0xCF71, 0x6D3C, 0xCF72, 0x6D3F, 0xCF73, 0x6D12, - 0xCF74, 0x6D0A, 0xCF75, 0x6CDA, 0xCF76, 0x6D33, 0xCF77, 0x6D04, - 0xCF78, 0x6D19, 0xCF79, 0x6D3A, 0xCF7A, 0x6D1A, 0xCF7B, 0x6D11, - 0xCF7C, 0x6D00, 0xCF7D, 0x6D1D, 0xCF7E, 0x6D42, 0xCFA1, 0x6D01, - 0xCFA2, 0x6D18, 0xCFA3, 0x6D37, 0xCFA4, 0x6D03, 0xCFA5, 0x6D0F, - 0xCFA6, 0x6D40, 0xCFA7, 0x6D07, 0xCFA8, 0x6D20, 0xCFA9, 0x6D2C, - 0xCFAA, 0x6D08, 0xCFAB, 0x6D22, 0xCFAC, 0x6D09, 0xCFAD, 0x6D10, - 0xCFAE, 0x70B7, 0xCFAF, 0x709F, 0xCFB0, 0x70BE, 0xCFB1, 0x70B1, - 0xCFB2, 0x70B0, 0xCFB3, 0x70A1, 0xCFB4, 0x70B4, 0xCFB5, 0x70B5, - 0xCFB6, 0x70A9, 0xCFB7, 0x7241, 0xCFB8, 0x7249, 0xCFB9, 0x724A, - 0xCFBA, 0x726C, 0xCFBB, 0x7270, 0xCFBC, 0x7273, 0xCFBD, 0x726E, - 0xCFBE, 0x72CA, 0xCFBF, 0x72E4, 0xCFC0, 0x72E8, 0xCFC1, 0x72EB, - 0xCFC2, 0x72DF, 0xCFC3, 0x72EA, 0xCFC4, 0x72E6, 0xCFC5, 0x72E3, - 0xCFC6, 0x7385, 0xCFC7, 0x73CC, 0xCFC8, 0x73C2, 0xCFC9, 0x73C8, - 0xCFCA, 0x73C5, 0xCFCB, 0x73B9, 0xCFCC, 0x73B6, 0xCFCD, 0x73B5, - 0xCFCE, 0x73B4, 0xCFCF, 0x73EB, 0xCFD0, 0x73BF, 0xCFD1, 0x73C7, - 0xCFD2, 0x73BE, 0xCFD3, 0x73C3, 0xCFD4, 0x73C6, 0xCFD5, 0x73B8, - 0xCFD6, 0x73CB, 0xCFD7, 0x74EC, 0xCFD8, 0x74EE, 0xCFD9, 0x752E, - 0xCFDA, 0x7547, 0xCFDB, 0x7548, 0xCFDC, 0x75A7, 0xCFDD, 0x75AA, - 0xCFDE, 0x7679, 0xCFDF, 0x76C4, 0xCFE0, 0x7708, 0xCFE1, 0x7703, - 0xCFE2, 0x7704, 0xCFE3, 0x7705, 0xCFE4, 0x770A, 0xCFE5, 0x76F7, - 0xCFE6, 0x76FB, 0xCFE7, 0x76FA, 0xCFE8, 0x77E7, 0xCFE9, 0x77E8, - 0xCFEA, 0x7806, 0xCFEB, 0x7811, 0xCFEC, 0x7812, 0xCFED, 0x7805, - 0xCFEE, 0x7810, 0xCFEF, 0x780F, 0xCFF0, 0x780E, 0xCFF1, 0x7809, - 0xCFF2, 0x7803, 0xCFF3, 0x7813, 0xCFF4, 0x794A, 0xCFF5, 0x794C, - 0xCFF6, 0x794B, 0xCFF7, 0x7945, 0xCFF8, 0x7944, 0xCFF9, 0x79D5, - 0xCFFA, 0x79CD, 0xCFFB, 0x79CF, 0xCFFC, 0x79D6, 0xCFFD, 0x79CE, - 0xCFFE, 0x7A80, 0xD040, 0x7A7E, 0xD041, 0x7AD1, 0xD042, 0x7B00, - 0xD043, 0x7B01, 0xD044, 0x7C7A, 0xD045, 0x7C78, 0xD046, 0x7C79, - 0xD047, 0x7C7F, 0xD048, 0x7C80, 0xD049, 0x7C81, 0xD04A, 0x7D03, - 0xD04B, 0x7D08, 0xD04C, 0x7D01, 0xD04D, 0x7F58, 0xD04E, 0x7F91, - 0xD04F, 0x7F8D, 0xD050, 0x7FBE, 0xD051, 0x8007, 0xD052, 0x800E, - 0xD053, 0x800F, 0xD054, 0x8014, 0xD055, 0x8037, 0xD056, 0x80D8, - 0xD057, 0x80C7, 0xD058, 0x80E0, 0xD059, 0x80D1, 0xD05A, 0x80C8, - 0xD05B, 0x80C2, 0xD05C, 0x80D0, 0xD05D, 0x80C5, 0xD05E, 0x80E3, - 0xD05F, 0x80D9, 0xD060, 0x80DC, 0xD061, 0x80CA, 0xD062, 0x80D5, - 0xD063, 0x80C9, 0xD064, 0x80CF, 0xD065, 0x80D7, 0xD066, 0x80E6, - 0xD067, 0x80CD, 0xD068, 0x81FF, 0xD069, 0x8221, 0xD06A, 0x8294, - 0xD06B, 0x82D9, 0xD06C, 0x82FE, 0xD06D, 0x82F9, 0xD06E, 0x8307, - 0xD06F, 0x82E8, 0xD070, 0x8300, 0xD071, 0x82D5, 0xD072, 0x833A, - 0xD073, 0x82EB, 0xD074, 0x82D6, 0xD075, 0x82F4, 0xD076, 0x82EC, - 0xD077, 0x82E1, 0xD078, 0x82F2, 0xD079, 0x82F5, 0xD07A, 0x830C, - 0xD07B, 0x82FB, 0xD07C, 0x82F6, 0xD07D, 0x82F0, 0xD07E, 0x82EA, - 0xD0A1, 0x82E4, 0xD0A2, 0x82E0, 0xD0A3, 0x82FA, 0xD0A4, 0x82F3, - 0xD0A5, 0x82ED, 0xD0A6, 0x8677, 0xD0A7, 0x8674, 0xD0A8, 0x867C, - 0xD0A9, 0x8673, 0xD0AA, 0x8841, 0xD0AB, 0x884E, 0xD0AC, 0x8867, - 0xD0AD, 0x886A, 0xD0AE, 0x8869, 0xD0AF, 0x89D3, 0xD0B0, 0x8A04, - 0xD0B1, 0x8A07, 0xD0B2, 0x8D72, 0xD0B3, 0x8FE3, 0xD0B4, 0x8FE1, - 0xD0B5, 0x8FEE, 0xD0B6, 0x8FE0, 0xD0B7, 0x90F1, 0xD0B8, 0x90BD, - 0xD0B9, 0x90BF, 0xD0BA, 0x90D5, 0xD0BB, 0x90C5, 0xD0BC, 0x90BE, - 0xD0BD, 0x90C7, 0xD0BE, 0x90CB, 0xD0BF, 0x90C8, 0xD0C0, 0x91D4, - 0xD0C1, 0x91D3, 0xD0C2, 0x9654, 0xD0C3, 0x964F, 0xD0C4, 0x9651, - 0xD0C5, 0x9653, 0xD0C6, 0x964A, 0xD0C7, 0x964E, 0xD0C8, 0x501E, - 0xD0C9, 0x5005, 0xD0CA, 0x5007, 0xD0CB, 0x5013, 0xD0CC, 0x5022, - 0xD0CD, 0x5030, 0xD0CE, 0x501B, 0xD0CF, 0x4FF5, 0xD0D0, 0x4FF4, - 0xD0D1, 0x5033, 0xD0D2, 0x5037, 0xD0D3, 0x502C, 0xD0D4, 0x4FF6, - 0xD0D5, 0x4FF7, 0xD0D6, 0x5017, 0xD0D7, 0x501C, 0xD0D8, 0x5020, - 0xD0D9, 0x5027, 0xD0DA, 0x5035, 0xD0DB, 0x502F, 0xD0DC, 0x5031, - 0xD0DD, 0x500E, 0xD0DE, 0x515A, 0xD0DF, 0x5194, 0xD0E0, 0x5193, - 0xD0E1, 0x51CA, 0xD0E2, 0x51C4, 0xD0E3, 0x51C5, 0xD0E4, 0x51C8, - 0xD0E5, 0x51CE, 0xD0E6, 0x5261, 0xD0E7, 0x525A, 0xD0E8, 0x5252, - 0xD0E9, 0x525E, 0xD0EA, 0x525F, 0xD0EB, 0x5255, 0xD0EC, 0x5262, - 0xD0ED, 0x52CD, 0xD0EE, 0x530E, 0xD0EF, 0x539E, 0xD0F0, 0x5526, - 0xD0F1, 0x54E2, 0xD0F2, 0x5517, 0xD0F3, 0x5512, 0xD0F4, 0x54E7, - 0xD0F5, 0x54F3, 0xD0F6, 0x54E4, 0xD0F7, 0x551A, 0xD0F8, 0x54FF, - 0xD0F9, 0x5504, 0xD0FA, 0x5508, 0xD0FB, 0x54EB, 0xD0FC, 0x5511, - 0xD0FD, 0x5505, 0xD0FE, 0x54F1, 0xD140, 0x550A, 0xD141, 0x54FB, - 0xD142, 0x54F7, 0xD143, 0x54F8, 0xD144, 0x54E0, 0xD145, 0x550E, - 0xD146, 0x5503, 0xD147, 0x550B, 0xD148, 0x5701, 0xD149, 0x5702, - 0xD14A, 0x57CC, 0xD14B, 0x5832, 0xD14C, 0x57D5, 0xD14D, 0x57D2, - 0xD14E, 0x57BA, 0xD14F, 0x57C6, 0xD150, 0x57BD, 0xD151, 0x57BC, - 0xD152, 0x57B8, 0xD153, 0x57B6, 0xD154, 0x57BF, 0xD155, 0x57C7, - 0xD156, 0x57D0, 0xD157, 0x57B9, 0xD158, 0x57C1, 0xD159, 0x590E, - 0xD15A, 0x594A, 0xD15B, 0x5A19, 0xD15C, 0x5A16, 0xD15D, 0x5A2D, - 0xD15E, 0x5A2E, 0xD15F, 0x5A15, 0xD160, 0x5A0F, 0xD161, 0x5A17, - 0xD162, 0x5A0A, 0xD163, 0x5A1E, 0xD164, 0x5A33, 0xD165, 0x5B6C, - 0xD166, 0x5BA7, 0xD167, 0x5BAD, 0xD168, 0x5BAC, 0xD169, 0x5C03, - 0xD16A, 0x5C56, 0xD16B, 0x5C54, 0xD16C, 0x5CEC, 0xD16D, 0x5CFF, - 0xD16E, 0x5CEE, 0xD16F, 0x5CF1, 0xD170, 0x5CF7, 0xD171, 0x5D00, - 0xD172, 0x5CF9, 0xD173, 0x5E29, 0xD174, 0x5E28, 0xD175, 0x5EA8, - 0xD176, 0x5EAE, 0xD177, 0x5EAA, 0xD178, 0x5EAC, 0xD179, 0x5F33, - 0xD17A, 0x5F30, 0xD17B, 0x5F67, 0xD17C, 0x605D, 0xD17D, 0x605A, - 0xD17E, 0x6067, 0xD1A1, 0x6041, 0xD1A2, 0x60A2, 0xD1A3, 0x6088, - 0xD1A4, 0x6080, 0xD1A5, 0x6092, 0xD1A6, 0x6081, 0xD1A7, 0x609D, - 0xD1A8, 0x6083, 0xD1A9, 0x6095, 0xD1AA, 0x609B, 0xD1AB, 0x6097, - 0xD1AC, 0x6087, 0xD1AD, 0x609C, 0xD1AE, 0x608E, 0xD1AF, 0x6219, - 0xD1B0, 0x6246, 0xD1B1, 0x62F2, 0xD1B2, 0x6310, 0xD1B3, 0x6356, - 0xD1B4, 0x632C, 0xD1B5, 0x6344, 0xD1B6, 0x6345, 0xD1B7, 0x6336, - 0xD1B8, 0x6343, 0xD1B9, 0x63E4, 0xD1BA, 0x6339, 0xD1BB, 0x634B, - 0xD1BC, 0x634A, 0xD1BD, 0x633C, 0xD1BE, 0x6329, 0xD1BF, 0x6341, - 0xD1C0, 0x6334, 0xD1C1, 0x6358, 0xD1C2, 0x6354, 0xD1C3, 0x6359, - 0xD1C4, 0x632D, 0xD1C5, 0x6347, 0xD1C6, 0x6333, 0xD1C7, 0x635A, - 0xD1C8, 0x6351, 0xD1C9, 0x6338, 0xD1CA, 0x6357, 0xD1CB, 0x6340, - 0xD1CC, 0x6348, 0xD1CD, 0x654A, 0xD1CE, 0x6546, 0xD1CF, 0x65C6, - 0xD1D0, 0x65C3, 0xD1D1, 0x65C4, 0xD1D2, 0x65C2, 0xD1D3, 0x664A, - 0xD1D4, 0x665F, 0xD1D5, 0x6647, 0xD1D6, 0x6651, 0xD1D7, 0x6712, - 0xD1D8, 0x6713, 0xD1D9, 0x681F, 0xD1DA, 0x681A, 0xD1DB, 0x6849, - 0xD1DC, 0x6832, 0xD1DD, 0x6833, 0xD1DE, 0x683B, 0xD1DF, 0x684B, - 0xD1E0, 0x684F, 0xD1E1, 0x6816, 0xD1E2, 0x6831, 0xD1E3, 0x681C, - 0xD1E4, 0x6835, 0xD1E5, 0x682B, 0xD1E6, 0x682D, 0xD1E7, 0x682F, - 0xD1E8, 0x684E, 0xD1E9, 0x6844, 0xD1EA, 0x6834, 0xD1EB, 0x681D, - 0xD1EC, 0x6812, 0xD1ED, 0x6814, 0xD1EE, 0x6826, 0xD1EF, 0x6828, - 0xD1F0, 0x682E, 0xD1F1, 0x684D, 0xD1F2, 0x683A, 0xD1F3, 0x6825, - 0xD1F4, 0x6820, 0xD1F5, 0x6B2C, 0xD1F6, 0x6B2F, 0xD1F7, 0x6B2D, - 0xD1F8, 0x6B31, 0xD1F9, 0x6B34, 0xD1FA, 0x6B6D, 0xD1FB, 0x8082, - 0xD1FC, 0x6B88, 0xD1FD, 0x6BE6, 0xD1FE, 0x6BE4, 0xD240, 0x6BE8, - 0xD241, 0x6BE3, 0xD242, 0x6BE2, 0xD243, 0x6BE7, 0xD244, 0x6C25, - 0xD245, 0x6D7A, 0xD246, 0x6D63, 0xD247, 0x6D64, 0xD248, 0x6D76, - 0xD249, 0x6D0D, 0xD24A, 0x6D61, 0xD24B, 0x6D92, 0xD24C, 0x6D58, - 0xD24D, 0x6D62, 0xD24E, 0x6D6D, 0xD24F, 0x6D6F, 0xD250, 0x6D91, - 0xD251, 0x6D8D, 0xD252, 0x6DEF, 0xD253, 0x6D7F, 0xD254, 0x6D86, - 0xD255, 0x6D5E, 0xD256, 0x6D67, 0xD257, 0x6D60, 0xD258, 0x6D97, - 0xD259, 0x6D70, 0xD25A, 0x6D7C, 0xD25B, 0x6D5F, 0xD25C, 0x6D82, - 0xD25D, 0x6D98, 0xD25E, 0x6D2F, 0xD25F, 0x6D68, 0xD260, 0x6D8B, - 0xD261, 0x6D7E, 0xD262, 0x6D80, 0xD263, 0x6D84, 0xD264, 0x6D16, - 0xD265, 0x6D83, 0xD266, 0x6D7B, 0xD267, 0x6D7D, 0xD268, 0x6D75, - 0xD269, 0x6D90, 0xD26A, 0x70DC, 0xD26B, 0x70D3, 0xD26C, 0x70D1, - 0xD26D, 0x70DD, 0xD26E, 0x70CB, 0xD26F, 0x7F39, 0xD270, 0x70E2, - 0xD271, 0x70D7, 0xD272, 0x70D2, 0xD273, 0x70DE, 0xD274, 0x70E0, - 0xD275, 0x70D4, 0xD276, 0x70CD, 0xD277, 0x70C5, 0xD278, 0x70C6, - 0xD279, 0x70C7, 0xD27A, 0x70DA, 0xD27B, 0x70CE, 0xD27C, 0x70E1, - 0xD27D, 0x7242, 0xD27E, 0x7278, 0xD2A1, 0x7277, 0xD2A2, 0x7276, - 0xD2A3, 0x7300, 0xD2A4, 0x72FA, 0xD2A5, 0x72F4, 0xD2A6, 0x72FE, - 0xD2A7, 0x72F6, 0xD2A8, 0x72F3, 0xD2A9, 0x72FB, 0xD2AA, 0x7301, - 0xD2AB, 0x73D3, 0xD2AC, 0x73D9, 0xD2AD, 0x73E5, 0xD2AE, 0x73D6, - 0xD2AF, 0x73BC, 0xD2B0, 0x73E7, 0xD2B1, 0x73E3, 0xD2B2, 0x73E9, - 0xD2B3, 0x73DC, 0xD2B4, 0x73D2, 0xD2B5, 0x73DB, 0xD2B6, 0x73D4, - 0xD2B7, 0x73DD, 0xD2B8, 0x73DA, 0xD2B9, 0x73D7, 0xD2BA, 0x73D8, - 0xD2BB, 0x73E8, 0xD2BC, 0x74DE, 0xD2BD, 0x74DF, 0xD2BE, 0x74F4, - 0xD2BF, 0x74F5, 0xD2C0, 0x7521, 0xD2C1, 0x755B, 0xD2C2, 0x755F, - 0xD2C3, 0x75B0, 0xD2C4, 0x75C1, 0xD2C5, 0x75BB, 0xD2C6, 0x75C4, - 0xD2C7, 0x75C0, 0xD2C8, 0x75BF, 0xD2C9, 0x75B6, 0xD2CA, 0x75BA, - 0xD2CB, 0x768A, 0xD2CC, 0x76C9, 0xD2CD, 0x771D, 0xD2CE, 0x771B, - 0xD2CF, 0x7710, 0xD2D0, 0x7713, 0xD2D1, 0x7712, 0xD2D2, 0x7723, - 0xD2D3, 0x7711, 0xD2D4, 0x7715, 0xD2D5, 0x7719, 0xD2D6, 0x771A, - 0xD2D7, 0x7722, 0xD2D8, 0x7727, 0xD2D9, 0x7823, 0xD2DA, 0x782C, - 0xD2DB, 0x7822, 0xD2DC, 0x7835, 0xD2DD, 0x782F, 0xD2DE, 0x7828, - 0xD2DF, 0x782E, 0xD2E0, 0x782B, 0xD2E1, 0x7821, 0xD2E2, 0x7829, - 0xD2E3, 0x7833, 0xD2E4, 0x782A, 0xD2E5, 0x7831, 0xD2E6, 0x7954, - 0xD2E7, 0x795B, 0xD2E8, 0x794F, 0xD2E9, 0x795C, 0xD2EA, 0x7953, - 0xD2EB, 0x7952, 0xD2EC, 0x7951, 0xD2ED, 0x79EB, 0xD2EE, 0x79EC, - 0xD2EF, 0x79E0, 0xD2F0, 0x79EE, 0xD2F1, 0x79ED, 0xD2F2, 0x79EA, - 0xD2F3, 0x79DC, 0xD2F4, 0x79DE, 0xD2F5, 0x79DD, 0xD2F6, 0x7A86, - 0xD2F7, 0x7A89, 0xD2F8, 0x7A85, 0xD2F9, 0x7A8B, 0xD2FA, 0x7A8C, - 0xD2FB, 0x7A8A, 0xD2FC, 0x7A87, 0xD2FD, 0x7AD8, 0xD2FE, 0x7B10, - 0xD340, 0x7B04, 0xD341, 0x7B13, 0xD342, 0x7B05, 0xD343, 0x7B0F, - 0xD344, 0x7B08, 0xD345, 0x7B0A, 0xD346, 0x7B0E, 0xD347, 0x7B09, - 0xD348, 0x7B12, 0xD349, 0x7C84, 0xD34A, 0x7C91, 0xD34B, 0x7C8A, - 0xD34C, 0x7C8C, 0xD34D, 0x7C88, 0xD34E, 0x7C8D, 0xD34F, 0x7C85, - 0xD350, 0x7D1E, 0xD351, 0x7D1D, 0xD352, 0x7D11, 0xD353, 0x7D0E, - 0xD354, 0x7D18, 0xD355, 0x7D16, 0xD356, 0x7D13, 0xD357, 0x7D1F, - 0xD358, 0x7D12, 0xD359, 0x7D0F, 0xD35A, 0x7D0C, 0xD35B, 0x7F5C, - 0xD35C, 0x7F61, 0xD35D, 0x7F5E, 0xD35E, 0x7F60, 0xD35F, 0x7F5D, - 0xD360, 0x7F5B, 0xD361, 0x7F96, 0xD362, 0x7F92, 0xD363, 0x7FC3, - 0xD364, 0x7FC2, 0xD365, 0x7FC0, 0xD366, 0x8016, 0xD367, 0x803E, - 0xD368, 0x8039, 0xD369, 0x80FA, 0xD36A, 0x80F2, 0xD36B, 0x80F9, - 0xD36C, 0x80F5, 0xD36D, 0x8101, 0xD36E, 0x80FB, 0xD36F, 0x8100, - 0xD370, 0x8201, 0xD371, 0x822F, 0xD372, 0x8225, 0xD373, 0x8333, - 0xD374, 0x832D, 0xD375, 0x8344, 0xD376, 0x8319, 0xD377, 0x8351, - 0xD378, 0x8325, 0xD379, 0x8356, 0xD37A, 0x833F, 0xD37B, 0x8341, - 0xD37C, 0x8326, 0xD37D, 0x831C, 0xD37E, 0x8322, 0xD3A1, 0x8342, - 0xD3A2, 0x834E, 0xD3A3, 0x831B, 0xD3A4, 0x832A, 0xD3A5, 0x8308, - 0xD3A6, 0x833C, 0xD3A7, 0x834D, 0xD3A8, 0x8316, 0xD3A9, 0x8324, - 0xD3AA, 0x8320, 0xD3AB, 0x8337, 0xD3AC, 0x832F, 0xD3AD, 0x8329, - 0xD3AE, 0x8347, 0xD3AF, 0x8345, 0xD3B0, 0x834C, 0xD3B1, 0x8353, - 0xD3B2, 0x831E, 0xD3B3, 0x832C, 0xD3B4, 0x834B, 0xD3B5, 0x8327, - 0xD3B6, 0x8348, 0xD3B7, 0x8653, 0xD3B8, 0x8652, 0xD3B9, 0x86A2, - 0xD3BA, 0x86A8, 0xD3BB, 0x8696, 0xD3BC, 0x868D, 0xD3BD, 0x8691, - 0xD3BE, 0x869E, 0xD3BF, 0x8687, 0xD3C0, 0x8697, 0xD3C1, 0x8686, - 0xD3C2, 0x868B, 0xD3C3, 0x869A, 0xD3C4, 0x8685, 0xD3C5, 0x86A5, - 0xD3C6, 0x8699, 0xD3C7, 0x86A1, 0xD3C8, 0x86A7, 0xD3C9, 0x8695, - 0xD3CA, 0x8698, 0xD3CB, 0x868E, 0xD3CC, 0x869D, 0xD3CD, 0x8690, - 0xD3CE, 0x8694, 0xD3CF, 0x8843, 0xD3D0, 0x8844, 0xD3D1, 0x886D, - 0xD3D2, 0x8875, 0xD3D3, 0x8876, 0xD3D4, 0x8872, 0xD3D5, 0x8880, - 0xD3D6, 0x8871, 0xD3D7, 0x887F, 0xD3D8, 0x886F, 0xD3D9, 0x8883, - 0xD3DA, 0x887E, 0xD3DB, 0x8874, 0xD3DC, 0x887C, 0xD3DD, 0x8A12, - 0xD3DE, 0x8C47, 0xD3DF, 0x8C57, 0xD3E0, 0x8C7B, 0xD3E1, 0x8CA4, - 0xD3E2, 0x8CA3, 0xD3E3, 0x8D76, 0xD3E4, 0x8D78, 0xD3E5, 0x8DB5, - 0xD3E6, 0x8DB7, 0xD3E7, 0x8DB6, 0xD3E8, 0x8ED1, 0xD3E9, 0x8ED3, - 0xD3EA, 0x8FFE, 0xD3EB, 0x8FF5, 0xD3EC, 0x9002, 0xD3ED, 0x8FFF, - 0xD3EE, 0x8FFB, 0xD3EF, 0x9004, 0xD3F0, 0x8FFC, 0xD3F1, 0x8FF6, - 0xD3F2, 0x90D6, 0xD3F3, 0x90E0, 0xD3F4, 0x90D9, 0xD3F5, 0x90DA, - 0xD3F6, 0x90E3, 0xD3F7, 0x90DF, 0xD3F8, 0x90E5, 0xD3F9, 0x90D8, - 0xD3FA, 0x90DB, 0xD3FB, 0x90D7, 0xD3FC, 0x90DC, 0xD3FD, 0x90E4, - 0xD3FE, 0x9150, 0xD440, 0x914E, 0xD441, 0x914F, 0xD442, 0x91D5, - 0xD443, 0x91E2, 0xD444, 0x91DA, 0xD445, 0x965C, 0xD446, 0x965F, - 0xD447, 0x96BC, 0xD448, 0x98E3, 0xD449, 0x9ADF, 0xD44A, 0x9B2F, - 0xD44B, 0x4E7F, 0xD44C, 0x5070, 0xD44D, 0x506A, 0xD44E, 0x5061, - 0xD44F, 0x505E, 0xD450, 0x5060, 0xD451, 0x5053, 0xD452, 0x504B, - 0xD453, 0x505D, 0xD454, 0x5072, 0xD455, 0x5048, 0xD456, 0x504D, - 0xD457, 0x5041, 0xD458, 0x505B, 0xD459, 0x504A, 0xD45A, 0x5062, - 0xD45B, 0x5015, 0xD45C, 0x5045, 0xD45D, 0x505F, 0xD45E, 0x5069, - 0xD45F, 0x506B, 0xD460, 0x5063, 0xD461, 0x5064, 0xD462, 0x5046, - 0xD463, 0x5040, 0xD464, 0x506E, 0xD465, 0x5073, 0xD466, 0x5057, - 0xD467, 0x5051, 0xD468, 0x51D0, 0xD469, 0x526B, 0xD46A, 0x526D, - 0xD46B, 0x526C, 0xD46C, 0x526E, 0xD46D, 0x52D6, 0xD46E, 0x52D3, - 0xD46F, 0x532D, 0xD470, 0x539C, 0xD471, 0x5575, 0xD472, 0x5576, - 0xD473, 0x553C, 0xD474, 0x554D, 0xD475, 0x5550, 0xD476, 0x5534, - 0xD477, 0x552A, 0xD478, 0x5551, 0xD479, 0x5562, 0xD47A, 0x5536, - 0xD47B, 0x5535, 0xD47C, 0x5530, 0xD47D, 0x5552, 0xD47E, 0x5545, - 0xD4A1, 0x550C, 0xD4A2, 0x5532, 0xD4A3, 0x5565, 0xD4A4, 0x554E, - 0xD4A5, 0x5539, 0xD4A6, 0x5548, 0xD4A7, 0x552D, 0xD4A8, 0x553B, - 0xD4A9, 0x5540, 0xD4AA, 0x554B, 0xD4AB, 0x570A, 0xD4AC, 0x5707, - 0xD4AD, 0x57FB, 0xD4AE, 0x5814, 0xD4AF, 0x57E2, 0xD4B0, 0x57F6, - 0xD4B1, 0x57DC, 0xD4B2, 0x57F4, 0xD4B3, 0x5800, 0xD4B4, 0x57ED, - 0xD4B5, 0x57FD, 0xD4B6, 0x5808, 0xD4B7, 0x57F8, 0xD4B8, 0x580B, - 0xD4B9, 0x57F3, 0xD4BA, 0x57CF, 0xD4BB, 0x5807, 0xD4BC, 0x57EE, - 0xD4BD, 0x57E3, 0xD4BE, 0x57F2, 0xD4BF, 0x57E5, 0xD4C0, 0x57EC, - 0xD4C1, 0x57E1, 0xD4C2, 0x580E, 0xD4C3, 0x57FC, 0xD4C4, 0x5810, - 0xD4C5, 0x57E7, 0xD4C6, 0x5801, 0xD4C7, 0x580C, 0xD4C8, 0x57F1, - 0xD4C9, 0x57E9, 0xD4CA, 0x57F0, 0xD4CB, 0x580D, 0xD4CC, 0x5804, - 0xD4CD, 0x595C, 0xD4CE, 0x5A60, 0xD4CF, 0x5A58, 0xD4D0, 0x5A55, - 0xD4D1, 0x5A67, 0xD4D2, 0x5A5E, 0xD4D3, 0x5A38, 0xD4D4, 0x5A35, - 0xD4D5, 0x5A6D, 0xD4D6, 0x5A50, 0xD4D7, 0x5A5F, 0xD4D8, 0x5A65, - 0xD4D9, 0x5A6C, 0xD4DA, 0x5A53, 0xD4DB, 0x5A64, 0xD4DC, 0x5A57, - 0xD4DD, 0x5A43, 0xD4DE, 0x5A5D, 0xD4DF, 0x5A52, 0xD4E0, 0x5A44, - 0xD4E1, 0x5A5B, 0xD4E2, 0x5A48, 0xD4E3, 0x5A8E, 0xD4E4, 0x5A3E, - 0xD4E5, 0x5A4D, 0xD4E6, 0x5A39, 0xD4E7, 0x5A4C, 0xD4E8, 0x5A70, - 0xD4E9, 0x5A69, 0xD4EA, 0x5A47, 0xD4EB, 0x5A51, 0xD4EC, 0x5A56, - 0xD4ED, 0x5A42, 0xD4EE, 0x5A5C, 0xD4EF, 0x5B72, 0xD4F0, 0x5B6E, - 0xD4F1, 0x5BC1, 0xD4F2, 0x5BC0, 0xD4F3, 0x5C59, 0xD4F4, 0x5D1E, - 0xD4F5, 0x5D0B, 0xD4F6, 0x5D1D, 0xD4F7, 0x5D1A, 0xD4F8, 0x5D20, - 0xD4F9, 0x5D0C, 0xD4FA, 0x5D28, 0xD4FB, 0x5D0D, 0xD4FC, 0x5D26, - 0xD4FD, 0x5D25, 0xD4FE, 0x5D0F, 0xD540, 0x5D30, 0xD541, 0x5D12, - 0xD542, 0x5D23, 0xD543, 0x5D1F, 0xD544, 0x5D2E, 0xD545, 0x5E3E, - 0xD546, 0x5E34, 0xD547, 0x5EB1, 0xD548, 0x5EB4, 0xD549, 0x5EB9, - 0xD54A, 0x5EB2, 0xD54B, 0x5EB3, 0xD54C, 0x5F36, 0xD54D, 0x5F38, - 0xD54E, 0x5F9B, 0xD54F, 0x5F96, 0xD550, 0x5F9F, 0xD551, 0x608A, - 0xD552, 0x6090, 0xD553, 0x6086, 0xD554, 0x60BE, 0xD555, 0x60B0, - 0xD556, 0x60BA, 0xD557, 0x60D3, 0xD558, 0x60D4, 0xD559, 0x60CF, - 0xD55A, 0x60E4, 0xD55B, 0x60D9, 0xD55C, 0x60DD, 0xD55D, 0x60C8, - 0xD55E, 0x60B1, 0xD55F, 0x60DB, 0xD560, 0x60B7, 0xD561, 0x60CA, - 0xD562, 0x60BF, 0xD563, 0x60C3, 0xD564, 0x60CD, 0xD565, 0x60C0, - 0xD566, 0x6332, 0xD567, 0x6365, 0xD568, 0x638A, 0xD569, 0x6382, - 0xD56A, 0x637D, 0xD56B, 0x63BD, 0xD56C, 0x639E, 0xD56D, 0x63AD, - 0xD56E, 0x639D, 0xD56F, 0x6397, 0xD570, 0x63AB, 0xD571, 0x638E, - 0xD572, 0x636F, 0xD573, 0x6387, 0xD574, 0x6390, 0xD575, 0x636E, - 0xD576, 0x63AF, 0xD577, 0x6375, 0xD578, 0x639C, 0xD579, 0x636D, - 0xD57A, 0x63AE, 0xD57B, 0x637C, 0xD57C, 0x63A4, 0xD57D, 0x633B, - 0xD57E, 0x639F, 0xD5A1, 0x6378, 0xD5A2, 0x6385, 0xD5A3, 0x6381, - 0xD5A4, 0x6391, 0xD5A5, 0x638D, 0xD5A6, 0x6370, 0xD5A7, 0x6553, - 0xD5A8, 0x65CD, 0xD5A9, 0x6665, 0xD5AA, 0x6661, 0xD5AB, 0x665B, - 0xD5AC, 0x6659, 0xD5AD, 0x665C, 0xD5AE, 0x6662, 0xD5AF, 0x6718, - 0xD5B0, 0x6879, 0xD5B1, 0x6887, 0xD5B2, 0x6890, 0xD5B3, 0x689C, - 0xD5B4, 0x686D, 0xD5B5, 0x686E, 0xD5B6, 0x68AE, 0xD5B7, 0x68AB, - 0xD5B8, 0x6956, 0xD5B9, 0x686F, 0xD5BA, 0x68A3, 0xD5BB, 0x68AC, - 0xD5BC, 0x68A9, 0xD5BD, 0x6875, 0xD5BE, 0x6874, 0xD5BF, 0x68B2, - 0xD5C0, 0x688F, 0xD5C1, 0x6877, 0xD5C2, 0x6892, 0xD5C3, 0x687C, - 0xD5C4, 0x686B, 0xD5C5, 0x6872, 0xD5C6, 0x68AA, 0xD5C7, 0x6880, - 0xD5C8, 0x6871, 0xD5C9, 0x687E, 0xD5CA, 0x689B, 0xD5CB, 0x6896, - 0xD5CC, 0x688B, 0xD5CD, 0x68A0, 0xD5CE, 0x6889, 0xD5CF, 0x68A4, - 0xD5D0, 0x6878, 0xD5D1, 0x687B, 0xD5D2, 0x6891, 0xD5D3, 0x688C, - 0xD5D4, 0x688A, 0xD5D5, 0x687D, 0xD5D6, 0x6B36, 0xD5D7, 0x6B33, - 0xD5D8, 0x6B37, 0xD5D9, 0x6B38, 0xD5DA, 0x6B91, 0xD5DB, 0x6B8F, - 0xD5DC, 0x6B8D, 0xD5DD, 0x6B8E, 0xD5DE, 0x6B8C, 0xD5DF, 0x6C2A, - 0xD5E0, 0x6DC0, 0xD5E1, 0x6DAB, 0xD5E2, 0x6DB4, 0xD5E3, 0x6DB3, - 0xD5E4, 0x6E74, 0xD5E5, 0x6DAC, 0xD5E6, 0x6DE9, 0xD5E7, 0x6DE2, - 0xD5E8, 0x6DB7, 0xD5E9, 0x6DF6, 0xD5EA, 0x6DD4, 0xD5EB, 0x6E00, - 0xD5EC, 0x6DC8, 0xD5ED, 0x6DE0, 0xD5EE, 0x6DDF, 0xD5EF, 0x6DD6, - 0xD5F0, 0x6DBE, 0xD5F1, 0x6DE5, 0xD5F2, 0x6DDC, 0xD5F3, 0x6DDD, - 0xD5F4, 0x6DDB, 0xD5F5, 0x6DF4, 0xD5F6, 0x6DCA, 0xD5F7, 0x6DBD, - 0xD5F8, 0x6DED, 0xD5F9, 0x6DF0, 0xD5FA, 0x6DBA, 0xD5FB, 0x6DD5, - 0xD5FC, 0x6DC2, 0xD5FD, 0x6DCF, 0xD5FE, 0x6DC9, 0xD640, 0x6DD0, - 0xD641, 0x6DF2, 0xD642, 0x6DD3, 0xD643, 0x6DFD, 0xD644, 0x6DD7, - 0xD645, 0x6DCD, 0xD646, 0x6DE3, 0xD647, 0x6DBB, 0xD648, 0x70FA, - 0xD649, 0x710D, 0xD64A, 0x70F7, 0xD64B, 0x7117, 0xD64C, 0x70F4, - 0xD64D, 0x710C, 0xD64E, 0x70F0, 0xD64F, 0x7104, 0xD650, 0x70F3, - 0xD651, 0x7110, 0xD652, 0x70FC, 0xD653, 0x70FF, 0xD654, 0x7106, - 0xD655, 0x7113, 0xD656, 0x7100, 0xD657, 0x70F8, 0xD658, 0x70F6, - 0xD659, 0x710B, 0xD65A, 0x7102, 0xD65B, 0x710E, 0xD65C, 0x727E, - 0xD65D, 0x727B, 0xD65E, 0x727C, 0xD65F, 0x727F, 0xD660, 0x731D, - 0xD661, 0x7317, 0xD662, 0x7307, 0xD663, 0x7311, 0xD664, 0x7318, - 0xD665, 0x730A, 0xD666, 0x7308, 0xD667, 0x72FF, 0xD668, 0x730F, - 0xD669, 0x731E, 0xD66A, 0x7388, 0xD66B, 0x73F6, 0xD66C, 0x73F8, - 0xD66D, 0x73F5, 0xD66E, 0x7404, 0xD66F, 0x7401, 0xD670, 0x73FD, - 0xD671, 0x7407, 0xD672, 0x7400, 0xD673, 0x73FA, 0xD674, 0x73FC, - 0xD675, 0x73FF, 0xD676, 0x740C, 0xD677, 0x740B, 0xD678, 0x73F4, - 0xD679, 0x7408, 0xD67A, 0x7564, 0xD67B, 0x7563, 0xD67C, 0x75CE, - 0xD67D, 0x75D2, 0xD67E, 0x75CF, 0xD6A1, 0x75CB, 0xD6A2, 0x75CC, - 0xD6A3, 0x75D1, 0xD6A4, 0x75D0, 0xD6A5, 0x768F, 0xD6A6, 0x7689, - 0xD6A7, 0x76D3, 0xD6A8, 0x7739, 0xD6A9, 0x772F, 0xD6AA, 0x772D, - 0xD6AB, 0x7731, 0xD6AC, 0x7732, 0xD6AD, 0x7734, 0xD6AE, 0x7733, - 0xD6AF, 0x773D, 0xD6B0, 0x7725, 0xD6B1, 0x773B, 0xD6B2, 0x7735, - 0xD6B3, 0x7848, 0xD6B4, 0x7852, 0xD6B5, 0x7849, 0xD6B6, 0x784D, - 0xD6B7, 0x784A, 0xD6B8, 0x784C, 0xD6B9, 0x7826, 0xD6BA, 0x7845, - 0xD6BB, 0x7850, 0xD6BC, 0x7964, 0xD6BD, 0x7967, 0xD6BE, 0x7969, - 0xD6BF, 0x796A, 0xD6C0, 0x7963, 0xD6C1, 0x796B, 0xD6C2, 0x7961, - 0xD6C3, 0x79BB, 0xD6C4, 0x79FA, 0xD6C5, 0x79F8, 0xD6C6, 0x79F6, - 0xD6C7, 0x79F7, 0xD6C8, 0x7A8F, 0xD6C9, 0x7A94, 0xD6CA, 0x7A90, - 0xD6CB, 0x7B35, 0xD6CC, 0x7B47, 0xD6CD, 0x7B34, 0xD6CE, 0x7B25, - 0xD6CF, 0x7B30, 0xD6D0, 0x7B22, 0xD6D1, 0x7B24, 0xD6D2, 0x7B33, - 0xD6D3, 0x7B18, 0xD6D4, 0x7B2A, 0xD6D5, 0x7B1D, 0xD6D6, 0x7B31, - 0xD6D7, 0x7B2B, 0xD6D8, 0x7B2D, 0xD6D9, 0x7B2F, 0xD6DA, 0x7B32, - 0xD6DB, 0x7B38, 0xD6DC, 0x7B1A, 0xD6DD, 0x7B23, 0xD6DE, 0x7C94, - 0xD6DF, 0x7C98, 0xD6E0, 0x7C96, 0xD6E1, 0x7CA3, 0xD6E2, 0x7D35, - 0xD6E3, 0x7D3D, 0xD6E4, 0x7D38, 0xD6E5, 0x7D36, 0xD6E6, 0x7D3A, - 0xD6E7, 0x7D45, 0xD6E8, 0x7D2C, 0xD6E9, 0x7D29, 0xD6EA, 0x7D41, - 0xD6EB, 0x7D47, 0xD6EC, 0x7D3E, 0xD6ED, 0x7D3F, 0xD6EE, 0x7D4A, - 0xD6EF, 0x7D3B, 0xD6F0, 0x7D28, 0xD6F1, 0x7F63, 0xD6F2, 0x7F95, - 0xD6F3, 0x7F9C, 0xD6F4, 0x7F9D, 0xD6F5, 0x7F9B, 0xD6F6, 0x7FCA, - 0xD6F7, 0x7FCB, 0xD6F8, 0x7FCD, 0xD6F9, 0x7FD0, 0xD6FA, 0x7FD1, - 0xD6FB, 0x7FC7, 0xD6FC, 0x7FCF, 0xD6FD, 0x7FC9, 0xD6FE, 0x801F, - 0xD740, 0x801E, 0xD741, 0x801B, 0xD742, 0x8047, 0xD743, 0x8043, - 0xD744, 0x8048, 0xD745, 0x8118, 0xD746, 0x8125, 0xD747, 0x8119, - 0xD748, 0x811B, 0xD749, 0x812D, 0xD74A, 0x811F, 0xD74B, 0x812C, - 0xD74C, 0x811E, 0xD74D, 0x8121, 0xD74E, 0x8115, 0xD74F, 0x8127, - 0xD750, 0x811D, 0xD751, 0x8122, 0xD752, 0x8211, 0xD753, 0x8238, - 0xD754, 0x8233, 0xD755, 0x823A, 0xD756, 0x8234, 0xD757, 0x8232, - 0xD758, 0x8274, 0xD759, 0x8390, 0xD75A, 0x83A3, 0xD75B, 0x83A8, - 0xD75C, 0x838D, 0xD75D, 0x837A, 0xD75E, 0x8373, 0xD75F, 0x83A4, - 0xD760, 0x8374, 0xD761, 0x838F, 0xD762, 0x8381, 0xD763, 0x8395, - 0xD764, 0x8399, 0xD765, 0x8375, 0xD766, 0x8394, 0xD767, 0x83A9, - 0xD768, 0x837D, 0xD769, 0x8383, 0xD76A, 0x838C, 0xD76B, 0x839D, - 0xD76C, 0x839B, 0xD76D, 0x83AA, 0xD76E, 0x838B, 0xD76F, 0x837E, - 0xD770, 0x83A5, 0xD771, 0x83AF, 0xD772, 0x8388, 0xD773, 0x8397, - 0xD774, 0x83B0, 0xD775, 0x837F, 0xD776, 0x83A6, 0xD777, 0x8387, - 0xD778, 0x83AE, 0xD779, 0x8376, 0xD77A, 0x839A, 0xD77B, 0x8659, - 0xD77C, 0x8656, 0xD77D, 0x86BF, 0xD77E, 0x86B7, 0xD7A1, 0x86C2, - 0xD7A2, 0x86C1, 0xD7A3, 0x86C5, 0xD7A4, 0x86BA, 0xD7A5, 0x86B0, - 0xD7A6, 0x86C8, 0xD7A7, 0x86B9, 0xD7A8, 0x86B3, 0xD7A9, 0x86B8, - 0xD7AA, 0x86CC, 0xD7AB, 0x86B4, 0xD7AC, 0x86BB, 0xD7AD, 0x86BC, - 0xD7AE, 0x86C3, 0xD7AF, 0x86BD, 0xD7B0, 0x86BE, 0xD7B1, 0x8852, - 0xD7B2, 0x8889, 0xD7B3, 0x8895, 0xD7B4, 0x88A8, 0xD7B5, 0x88A2, - 0xD7B6, 0x88AA, 0xD7B7, 0x889A, 0xD7B8, 0x8891, 0xD7B9, 0x88A1, - 0xD7BA, 0x889F, 0xD7BB, 0x8898, 0xD7BC, 0x88A7, 0xD7BD, 0x8899, - 0xD7BE, 0x889B, 0xD7BF, 0x8897, 0xD7C0, 0x88A4, 0xD7C1, 0x88AC, - 0xD7C2, 0x888C, 0xD7C3, 0x8893, 0xD7C4, 0x888E, 0xD7C5, 0x8982, - 0xD7C6, 0x89D6, 0xD7C7, 0x89D9, 0xD7C8, 0x89D5, 0xD7C9, 0x8A30, - 0xD7CA, 0x8A27, 0xD7CB, 0x8A2C, 0xD7CC, 0x8A1E, 0xD7CD, 0x8C39, - 0xD7CE, 0x8C3B, 0xD7CF, 0x8C5C, 0xD7D0, 0x8C5D, 0xD7D1, 0x8C7D, - 0xD7D2, 0x8CA5, 0xD7D3, 0x8D7D, 0xD7D4, 0x8D7B, 0xD7D5, 0x8D79, - 0xD7D6, 0x8DBC, 0xD7D7, 0x8DC2, 0xD7D8, 0x8DB9, 0xD7D9, 0x8DBF, - 0xD7DA, 0x8DC1, 0xD7DB, 0x8ED8, 0xD7DC, 0x8EDE, 0xD7DD, 0x8EDD, - 0xD7DE, 0x8EDC, 0xD7DF, 0x8ED7, 0xD7E0, 0x8EE0, 0xD7E1, 0x8EE1, - 0xD7E2, 0x9024, 0xD7E3, 0x900B, 0xD7E4, 0x9011, 0xD7E5, 0x901C, - 0xD7E6, 0x900C, 0xD7E7, 0x9021, 0xD7E8, 0x90EF, 0xD7E9, 0x90EA, - 0xD7EA, 0x90F0, 0xD7EB, 0x90F4, 0xD7EC, 0x90F2, 0xD7ED, 0x90F3, - 0xD7EE, 0x90D4, 0xD7EF, 0x90EB, 0xD7F0, 0x90EC, 0xD7F1, 0x90E9, - 0xD7F2, 0x9156, 0xD7F3, 0x9158, 0xD7F4, 0x915A, 0xD7F5, 0x9153, - 0xD7F6, 0x9155, 0xD7F7, 0x91EC, 0xD7F8, 0x91F4, 0xD7F9, 0x91F1, - 0xD7FA, 0x91F3, 0xD7FB, 0x91F8, 0xD7FC, 0x91E4, 0xD7FD, 0x91F9, - 0xD7FE, 0x91EA, 0xD840, 0x91EB, 0xD841, 0x91F7, 0xD842, 0x91E8, - 0xD843, 0x91EE, 0xD844, 0x957A, 0xD845, 0x9586, 0xD846, 0x9588, - 0xD847, 0x967C, 0xD848, 0x966D, 0xD849, 0x966B, 0xD84A, 0x9671, - 0xD84B, 0x966F, 0xD84C, 0x96BF, 0xD84D, 0x976A, 0xD84E, 0x9804, - 0xD84F, 0x98E5, 0xD850, 0x9997, 0xD851, 0x509B, 0xD852, 0x5095, - 0xD853, 0x5094, 0xD854, 0x509E, 0xD855, 0x508B, 0xD856, 0x50A3, - 0xD857, 0x5083, 0xD858, 0x508C, 0xD859, 0x508E, 0xD85A, 0x509D, - 0xD85B, 0x5068, 0xD85C, 0x509C, 0xD85D, 0x5092, 0xD85E, 0x5082, - 0xD85F, 0x5087, 0xD860, 0x515F, 0xD861, 0x51D4, 0xD862, 0x5312, - 0xD863, 0x5311, 0xD864, 0x53A4, 0xD865, 0x53A7, 0xD866, 0x5591, - 0xD867, 0x55A8, 0xD868, 0x55A5, 0xD869, 0x55AD, 0xD86A, 0x5577, - 0xD86B, 0x5645, 0xD86C, 0x55A2, 0xD86D, 0x5593, 0xD86E, 0x5588, - 0xD86F, 0x558F, 0xD870, 0x55B5, 0xD871, 0x5581, 0xD872, 0x55A3, - 0xD873, 0x5592, 0xD874, 0x55A4, 0xD875, 0x557D, 0xD876, 0x558C, - 0xD877, 0x55A6, 0xD878, 0x557F, 0xD879, 0x5595, 0xD87A, 0x55A1, - 0xD87B, 0x558E, 0xD87C, 0x570C, 0xD87D, 0x5829, 0xD87E, 0x5837, - 0xD8A1, 0x5819, 0xD8A2, 0x581E, 0xD8A3, 0x5827, 0xD8A4, 0x5823, - 0xD8A5, 0x5828, 0xD8A6, 0x57F5, 0xD8A7, 0x5848, 0xD8A8, 0x5825, - 0xD8A9, 0x581C, 0xD8AA, 0x581B, 0xD8AB, 0x5833, 0xD8AC, 0x583F, - 0xD8AD, 0x5836, 0xD8AE, 0x582E, 0xD8AF, 0x5839, 0xD8B0, 0x5838, - 0xD8B1, 0x582D, 0xD8B2, 0x582C, 0xD8B3, 0x583B, 0xD8B4, 0x5961, - 0xD8B5, 0x5AAF, 0xD8B6, 0x5A94, 0xD8B7, 0x5A9F, 0xD8B8, 0x5A7A, - 0xD8B9, 0x5AA2, 0xD8BA, 0x5A9E, 0xD8BB, 0x5A78, 0xD8BC, 0x5AA6, - 0xD8BD, 0x5A7C, 0xD8BE, 0x5AA5, 0xD8BF, 0x5AAC, 0xD8C0, 0x5A95, - 0xD8C1, 0x5AAE, 0xD8C2, 0x5A37, 0xD8C3, 0x5A84, 0xD8C4, 0x5A8A, - 0xD8C5, 0x5A97, 0xD8C6, 0x5A83, 0xD8C7, 0x5A8B, 0xD8C8, 0x5AA9, - 0xD8C9, 0x5A7B, 0xD8CA, 0x5A7D, 0xD8CB, 0x5A8C, 0xD8CC, 0x5A9C, - 0xD8CD, 0x5A8F, 0xD8CE, 0x5A93, 0xD8CF, 0x5A9D, 0xD8D0, 0x5BEA, - 0xD8D1, 0x5BCD, 0xD8D2, 0x5BCB, 0xD8D3, 0x5BD4, 0xD8D4, 0x5BD1, - 0xD8D5, 0x5BCA, 0xD8D6, 0x5BCE, 0xD8D7, 0x5C0C, 0xD8D8, 0x5C30, - 0xD8D9, 0x5D37, 0xD8DA, 0x5D43, 0xD8DB, 0x5D6B, 0xD8DC, 0x5D41, - 0xD8DD, 0x5D4B, 0xD8DE, 0x5D3F, 0xD8DF, 0x5D35, 0xD8E0, 0x5D51, - 0xD8E1, 0x5D4E, 0xD8E2, 0x5D55, 0xD8E3, 0x5D33, 0xD8E4, 0x5D3A, - 0xD8E5, 0x5D52, 0xD8E6, 0x5D3D, 0xD8E7, 0x5D31, 0xD8E8, 0x5D59, - 0xD8E9, 0x5D42, 0xD8EA, 0x5D39, 0xD8EB, 0x5D49, 0xD8EC, 0x5D38, - 0xD8ED, 0x5D3C, 0xD8EE, 0x5D32, 0xD8EF, 0x5D36, 0xD8F0, 0x5D40, - 0xD8F1, 0x5D45, 0xD8F2, 0x5E44, 0xD8F3, 0x5E41, 0xD8F4, 0x5F58, - 0xD8F5, 0x5FA6, 0xD8F6, 0x5FA5, 0xD8F7, 0x5FAB, 0xD8F8, 0x60C9, - 0xD8F9, 0x60B9, 0xD8FA, 0x60CC, 0xD8FB, 0x60E2, 0xD8FC, 0x60CE, - 0xD8FD, 0x60C4, 0xD8FE, 0x6114, 0xD940, 0x60F2, 0xD941, 0x610A, - 0xD942, 0x6116, 0xD943, 0x6105, 0xD944, 0x60F5, 0xD945, 0x6113, - 0xD946, 0x60F8, 0xD947, 0x60FC, 0xD948, 0x60FE, 0xD949, 0x60C1, - 0xD94A, 0x6103, 0xD94B, 0x6118, 0xD94C, 0x611D, 0xD94D, 0x6110, - 0xD94E, 0x60FF, 0xD94F, 0x6104, 0xD950, 0x610B, 0xD951, 0x624A, - 0xD952, 0x6394, 0xD953, 0x63B1, 0xD954, 0x63B0, 0xD955, 0x63CE, - 0xD956, 0x63E5, 0xD957, 0x63E8, 0xD958, 0x63EF, 0xD959, 0x63C3, - 0xD95A, 0x649D, 0xD95B, 0x63F3, 0xD95C, 0x63CA, 0xD95D, 0x63E0, - 0xD95E, 0x63F6, 0xD95F, 0x63D5, 0xD960, 0x63F2, 0xD961, 0x63F5, - 0xD962, 0x6461, 0xD963, 0x63DF, 0xD964, 0x63BE, 0xD965, 0x63DD, - 0xD966, 0x63DC, 0xD967, 0x63C4, 0xD968, 0x63D8, 0xD969, 0x63D3, - 0xD96A, 0x63C2, 0xD96B, 0x63C7, 0xD96C, 0x63CC, 0xD96D, 0x63CB, - 0xD96E, 0x63C8, 0xD96F, 0x63F0, 0xD970, 0x63D7, 0xD971, 0x63D9, - 0xD972, 0x6532, 0xD973, 0x6567, 0xD974, 0x656A, 0xD975, 0x6564, - 0xD976, 0x655C, 0xD977, 0x6568, 0xD978, 0x6565, 0xD979, 0x658C, - 0xD97A, 0x659D, 0xD97B, 0x659E, 0xD97C, 0x65AE, 0xD97D, 0x65D0, - 0xD97E, 0x65D2, 0xD9A1, 0x667C, 0xD9A2, 0x666C, 0xD9A3, 0x667B, - 0xD9A4, 0x6680, 0xD9A5, 0x6671, 0xD9A6, 0x6679, 0xD9A7, 0x666A, - 0xD9A8, 0x6672, 0xD9A9, 0x6701, 0xD9AA, 0x690C, 0xD9AB, 0x68D3, - 0xD9AC, 0x6904, 0xD9AD, 0x68DC, 0xD9AE, 0x692A, 0xD9AF, 0x68EC, - 0xD9B0, 0x68EA, 0xD9B1, 0x68F1, 0xD9B2, 0x690F, 0xD9B3, 0x68D6, - 0xD9B4, 0x68F7, 0xD9B5, 0x68EB, 0xD9B6, 0x68E4, 0xD9B7, 0x68F6, - 0xD9B8, 0x6913, 0xD9B9, 0x6910, 0xD9BA, 0x68F3, 0xD9BB, 0x68E1, - 0xD9BC, 0x6907, 0xD9BD, 0x68CC, 0xD9BE, 0x6908, 0xD9BF, 0x6970, - 0xD9C0, 0x68B4, 0xD9C1, 0x6911, 0xD9C2, 0x68EF, 0xD9C3, 0x68C6, - 0xD9C4, 0x6914, 0xD9C5, 0x68F8, 0xD9C6, 0x68D0, 0xD9C7, 0x68FD, - 0xD9C8, 0x68FC, 0xD9C9, 0x68E8, 0xD9CA, 0x690B, 0xD9CB, 0x690A, - 0xD9CC, 0x6917, 0xD9CD, 0x68CE, 0xD9CE, 0x68C8, 0xD9CF, 0x68DD, - 0xD9D0, 0x68DE, 0xD9D1, 0x68E6, 0xD9D2, 0x68F4, 0xD9D3, 0x68D1, - 0xD9D4, 0x6906, 0xD9D5, 0x68D4, 0xD9D6, 0x68E9, 0xD9D7, 0x6915, - 0xD9D8, 0x6925, 0xD9D9, 0x68C7, 0xD9DA, 0x6B39, 0xD9DB, 0x6B3B, - 0xD9DC, 0x6B3F, 0xD9DD, 0x6B3C, 0xD9DE, 0x6B94, 0xD9DF, 0x6B97, - 0xD9E0, 0x6B99, 0xD9E1, 0x6B95, 0xD9E2, 0x6BBD, 0xD9E3, 0x6BF0, - 0xD9E4, 0x6BF2, 0xD9E5, 0x6BF3, 0xD9E6, 0x6C30, 0xD9E7, 0x6DFC, - 0xD9E8, 0x6E46, 0xD9E9, 0x6E47, 0xD9EA, 0x6E1F, 0xD9EB, 0x6E49, - 0xD9EC, 0x6E88, 0xD9ED, 0x6E3C, 0xD9EE, 0x6E3D, 0xD9EF, 0x6E45, - 0xD9F0, 0x6E62, 0xD9F1, 0x6E2B, 0xD9F2, 0x6E3F, 0xD9F3, 0x6E41, - 0xD9F4, 0x6E5D, 0xD9F5, 0x6E73, 0xD9F6, 0x6E1C, 0xD9F7, 0x6E33, - 0xD9F8, 0x6E4B, 0xD9F9, 0x6E40, 0xD9FA, 0x6E51, 0xD9FB, 0x6E3B, - 0xD9FC, 0x6E03, 0xD9FD, 0x6E2E, 0xD9FE, 0x6E5E, 0xDA40, 0x6E68, - 0xDA41, 0x6E5C, 0xDA42, 0x6E61, 0xDA43, 0x6E31, 0xDA44, 0x6E28, - 0xDA45, 0x6E60, 0xDA46, 0x6E71, 0xDA47, 0x6E6B, 0xDA48, 0x6E39, - 0xDA49, 0x6E22, 0xDA4A, 0x6E30, 0xDA4B, 0x6E53, 0xDA4C, 0x6E65, - 0xDA4D, 0x6E27, 0xDA4E, 0x6E78, 0xDA4F, 0x6E64, 0xDA50, 0x6E77, - 0xDA51, 0x6E55, 0xDA52, 0x6E79, 0xDA53, 0x6E52, 0xDA54, 0x6E66, - 0xDA55, 0x6E35, 0xDA56, 0x6E36, 0xDA57, 0x6E5A, 0xDA58, 0x7120, - 0xDA59, 0x711E, 0xDA5A, 0x712F, 0xDA5B, 0x70FB, 0xDA5C, 0x712E, - 0xDA5D, 0x7131, 0xDA5E, 0x7123, 0xDA5F, 0x7125, 0xDA60, 0x7122, - 0xDA61, 0x7132, 0xDA62, 0x711F, 0xDA63, 0x7128, 0xDA64, 0x713A, - 0xDA65, 0x711B, 0xDA66, 0x724B, 0xDA67, 0x725A, 0xDA68, 0x7288, - 0xDA69, 0x7289, 0xDA6A, 0x7286, 0xDA6B, 0x7285, 0xDA6C, 0x728B, - 0xDA6D, 0x7312, 0xDA6E, 0x730B, 0xDA6F, 0x7330, 0xDA70, 0x7322, - 0xDA71, 0x7331, 0xDA72, 0x7333, 0xDA73, 0x7327, 0xDA74, 0x7332, - 0xDA75, 0x732D, 0xDA76, 0x7326, 0xDA77, 0x7323, 0xDA78, 0x7335, - 0xDA79, 0x730C, 0xDA7A, 0x742E, 0xDA7B, 0x742C, 0xDA7C, 0x7430, - 0xDA7D, 0x742B, 0xDA7E, 0x7416, 0xDAA1, 0x741A, 0xDAA2, 0x7421, - 0xDAA3, 0x742D, 0xDAA4, 0x7431, 0xDAA5, 0x7424, 0xDAA6, 0x7423, - 0xDAA7, 0x741D, 0xDAA8, 0x7429, 0xDAA9, 0x7420, 0xDAAA, 0x7432, - 0xDAAB, 0x74FB, 0xDAAC, 0x752F, 0xDAAD, 0x756F, 0xDAAE, 0x756C, - 0xDAAF, 0x75E7, 0xDAB0, 0x75DA, 0xDAB1, 0x75E1, 0xDAB2, 0x75E6, - 0xDAB3, 0x75DD, 0xDAB4, 0x75DF, 0xDAB5, 0x75E4, 0xDAB6, 0x75D7, - 0xDAB7, 0x7695, 0xDAB8, 0x7692, 0xDAB9, 0x76DA, 0xDABA, 0x7746, - 0xDABB, 0x7747, 0xDABC, 0x7744, 0xDABD, 0x774D, 0xDABE, 0x7745, - 0xDABF, 0x774A, 0xDAC0, 0x774E, 0xDAC1, 0x774B, 0xDAC2, 0x774C, - 0xDAC3, 0x77DE, 0xDAC4, 0x77EC, 0xDAC5, 0x7860, 0xDAC6, 0x7864, - 0xDAC7, 0x7865, 0xDAC8, 0x785C, 0xDAC9, 0x786D, 0xDACA, 0x7871, - 0xDACB, 0x786A, 0xDACC, 0x786E, 0xDACD, 0x7870, 0xDACE, 0x7869, - 0xDACF, 0x7868, 0xDAD0, 0x785E, 0xDAD1, 0x7862, 0xDAD2, 0x7974, - 0xDAD3, 0x7973, 0xDAD4, 0x7972, 0xDAD5, 0x7970, 0xDAD6, 0x7A02, - 0xDAD7, 0x7A0A, 0xDAD8, 0x7A03, 0xDAD9, 0x7A0C, 0xDADA, 0x7A04, - 0xDADB, 0x7A99, 0xDADC, 0x7AE6, 0xDADD, 0x7AE4, 0xDADE, 0x7B4A, - 0xDADF, 0x7B3B, 0xDAE0, 0x7B44, 0xDAE1, 0x7B48, 0xDAE2, 0x7B4C, - 0xDAE3, 0x7B4E, 0xDAE4, 0x7B40, 0xDAE5, 0x7B58, 0xDAE6, 0x7B45, - 0xDAE7, 0x7CA2, 0xDAE8, 0x7C9E, 0xDAE9, 0x7CA8, 0xDAEA, 0x7CA1, - 0xDAEB, 0x7D58, 0xDAEC, 0x7D6F, 0xDAED, 0x7D63, 0xDAEE, 0x7D53, - 0xDAEF, 0x7D56, 0xDAF0, 0x7D67, 0xDAF1, 0x7D6A, 0xDAF2, 0x7D4F, - 0xDAF3, 0x7D6D, 0xDAF4, 0x7D5C, 0xDAF5, 0x7D6B, 0xDAF6, 0x7D52, - 0xDAF7, 0x7D54, 0xDAF8, 0x7D69, 0xDAF9, 0x7D51, 0xDAFA, 0x7D5F, - 0xDAFB, 0x7D4E, 0xDAFC, 0x7F3E, 0xDAFD, 0x7F3F, 0xDAFE, 0x7F65, - 0xDB40, 0x7F66, 0xDB41, 0x7FA2, 0xDB42, 0x7FA0, 0xDB43, 0x7FA1, - 0xDB44, 0x7FD7, 0xDB45, 0x8051, 0xDB46, 0x804F, 0xDB47, 0x8050, - 0xDB48, 0x80FE, 0xDB49, 0x80D4, 0xDB4A, 0x8143, 0xDB4B, 0x814A, - 0xDB4C, 0x8152, 0xDB4D, 0x814F, 0xDB4E, 0x8147, 0xDB4F, 0x813D, - 0xDB50, 0x814D, 0xDB51, 0x813A, 0xDB52, 0x81E6, 0xDB53, 0x81EE, - 0xDB54, 0x81F7, 0xDB55, 0x81F8, 0xDB56, 0x81F9, 0xDB57, 0x8204, - 0xDB58, 0x823C, 0xDB59, 0x823D, 0xDB5A, 0x823F, 0xDB5B, 0x8275, - 0xDB5C, 0x833B, 0xDB5D, 0x83CF, 0xDB5E, 0x83F9, 0xDB5F, 0x8423, - 0xDB60, 0x83C0, 0xDB61, 0x83E8, 0xDB62, 0x8412, 0xDB63, 0x83E7, - 0xDB64, 0x83E4, 0xDB65, 0x83FC, 0xDB66, 0x83F6, 0xDB67, 0x8410, - 0xDB68, 0x83C6, 0xDB69, 0x83C8, 0xDB6A, 0x83EB, 0xDB6B, 0x83E3, - 0xDB6C, 0x83BF, 0xDB6D, 0x8401, 0xDB6E, 0x83DD, 0xDB6F, 0x83E5, - 0xDB70, 0x83D8, 0xDB71, 0x83FF, 0xDB72, 0x83E1, 0xDB73, 0x83CB, - 0xDB74, 0x83CE, 0xDB75, 0x83D6, 0xDB76, 0x83F5, 0xDB77, 0x83C9, - 0xDB78, 0x8409, 0xDB79, 0x840F, 0xDB7A, 0x83DE, 0xDB7B, 0x8411, - 0xDB7C, 0x8406, 0xDB7D, 0x83C2, 0xDB7E, 0x83F3, 0xDBA1, 0x83D5, - 0xDBA2, 0x83FA, 0xDBA3, 0x83C7, 0xDBA4, 0x83D1, 0xDBA5, 0x83EA, - 0xDBA6, 0x8413, 0xDBA7, 0x83C3, 0xDBA8, 0x83EC, 0xDBA9, 0x83EE, - 0xDBAA, 0x83C4, 0xDBAB, 0x83FB, 0xDBAC, 0x83D7, 0xDBAD, 0x83E2, - 0xDBAE, 0x841B, 0xDBAF, 0x83DB, 0xDBB0, 0x83FE, 0xDBB1, 0x86D8, - 0xDBB2, 0x86E2, 0xDBB3, 0x86E6, 0xDBB4, 0x86D3, 0xDBB5, 0x86E3, - 0xDBB6, 0x86DA, 0xDBB7, 0x86EA, 0xDBB8, 0x86DD, 0xDBB9, 0x86EB, - 0xDBBA, 0x86DC, 0xDBBB, 0x86EC, 0xDBBC, 0x86E9, 0xDBBD, 0x86D7, - 0xDBBE, 0x86E8, 0xDBBF, 0x86D1, 0xDBC0, 0x8848, 0xDBC1, 0x8856, - 0xDBC2, 0x8855, 0xDBC3, 0x88BA, 0xDBC4, 0x88D7, 0xDBC5, 0x88B9, - 0xDBC6, 0x88B8, 0xDBC7, 0x88C0, 0xDBC8, 0x88BE, 0xDBC9, 0x88B6, - 0xDBCA, 0x88BC, 0xDBCB, 0x88B7, 0xDBCC, 0x88BD, 0xDBCD, 0x88B2, - 0xDBCE, 0x8901, 0xDBCF, 0x88C9, 0xDBD0, 0x8995, 0xDBD1, 0x8998, - 0xDBD2, 0x8997, 0xDBD3, 0x89DD, 0xDBD4, 0x89DA, 0xDBD5, 0x89DB, - 0xDBD6, 0x8A4E, 0xDBD7, 0x8A4D, 0xDBD8, 0x8A39, 0xDBD9, 0x8A59, - 0xDBDA, 0x8A40, 0xDBDB, 0x8A57, 0xDBDC, 0x8A58, 0xDBDD, 0x8A44, - 0xDBDE, 0x8A45, 0xDBDF, 0x8A52, 0xDBE0, 0x8A48, 0xDBE1, 0x8A51, - 0xDBE2, 0x8A4A, 0xDBE3, 0x8A4C, 0xDBE4, 0x8A4F, 0xDBE5, 0x8C5F, - 0xDBE6, 0x8C81, 0xDBE7, 0x8C80, 0xDBE8, 0x8CBA, 0xDBE9, 0x8CBE, - 0xDBEA, 0x8CB0, 0xDBEB, 0x8CB9, 0xDBEC, 0x8CB5, 0xDBED, 0x8D84, - 0xDBEE, 0x8D80, 0xDBEF, 0x8D89, 0xDBF0, 0x8DD8, 0xDBF1, 0x8DD3, - 0xDBF2, 0x8DCD, 0xDBF3, 0x8DC7, 0xDBF4, 0x8DD6, 0xDBF5, 0x8DDC, - 0xDBF6, 0x8DCF, 0xDBF7, 0x8DD5, 0xDBF8, 0x8DD9, 0xDBF9, 0x8DC8, - 0xDBFA, 0x8DD7, 0xDBFB, 0x8DC5, 0xDBFC, 0x8EEF, 0xDBFD, 0x8EF7, - 0xDBFE, 0x8EFA, 0xDC40, 0x8EF9, 0xDC41, 0x8EE6, 0xDC42, 0x8EEE, - 0xDC43, 0x8EE5, 0xDC44, 0x8EF5, 0xDC45, 0x8EE7, 0xDC46, 0x8EE8, - 0xDC47, 0x8EF6, 0xDC48, 0x8EEB, 0xDC49, 0x8EF1, 0xDC4A, 0x8EEC, - 0xDC4B, 0x8EF4, 0xDC4C, 0x8EE9, 0xDC4D, 0x902D, 0xDC4E, 0x9034, - 0xDC4F, 0x902F, 0xDC50, 0x9106, 0xDC51, 0x912C, 0xDC52, 0x9104, - 0xDC53, 0x90FF, 0xDC54, 0x90FC, 0xDC55, 0x9108, 0xDC56, 0x90F9, - 0xDC57, 0x90FB, 0xDC58, 0x9101, 0xDC59, 0x9100, 0xDC5A, 0x9107, - 0xDC5B, 0x9105, 0xDC5C, 0x9103, 0xDC5D, 0x9161, 0xDC5E, 0x9164, - 0xDC5F, 0x915F, 0xDC60, 0x9162, 0xDC61, 0x9160, 0xDC62, 0x9201, - 0xDC63, 0x920A, 0xDC64, 0x9225, 0xDC65, 0x9203, 0xDC66, 0x921A, - 0xDC67, 0x9226, 0xDC68, 0x920F, 0xDC69, 0x920C, 0xDC6A, 0x9200, - 0xDC6B, 0x9212, 0xDC6C, 0x91FF, 0xDC6D, 0x91FD, 0xDC6E, 0x9206, - 0xDC6F, 0x9204, 0xDC70, 0x9227, 0xDC71, 0x9202, 0xDC72, 0x921C, - 0xDC73, 0x9224, 0xDC74, 0x9219, 0xDC75, 0x9217, 0xDC76, 0x9205, - 0xDC77, 0x9216, 0xDC78, 0x957B, 0xDC79, 0x958D, 0xDC7A, 0x958C, - 0xDC7B, 0x9590, 0xDC7C, 0x9687, 0xDC7D, 0x967E, 0xDC7E, 0x9688, - 0xDCA1, 0x9689, 0xDCA2, 0x9683, 0xDCA3, 0x9680, 0xDCA4, 0x96C2, - 0xDCA5, 0x96C8, 0xDCA6, 0x96C3, 0xDCA7, 0x96F1, 0xDCA8, 0x96F0, - 0xDCA9, 0x976C, 0xDCAA, 0x9770, 0xDCAB, 0x976E, 0xDCAC, 0x9807, - 0xDCAD, 0x98A9, 0xDCAE, 0x98EB, 0xDCAF, 0x9CE6, 0xDCB0, 0x9EF9, - 0xDCB1, 0x4E83, 0xDCB2, 0x4E84, 0xDCB3, 0x4EB6, 0xDCB4, 0x50BD, - 0xDCB5, 0x50BF, 0xDCB6, 0x50C6, 0xDCB7, 0x50AE, 0xDCB8, 0x50C4, - 0xDCB9, 0x50CA, 0xDCBA, 0x50B4, 0xDCBB, 0x50C8, 0xDCBC, 0x50C2, - 0xDCBD, 0x50B0, 0xDCBE, 0x50C1, 0xDCBF, 0x50BA, 0xDCC0, 0x50B1, - 0xDCC1, 0x50CB, 0xDCC2, 0x50C9, 0xDCC3, 0x50B6, 0xDCC4, 0x50B8, - 0xDCC5, 0x51D7, 0xDCC6, 0x527A, 0xDCC7, 0x5278, 0xDCC8, 0x527B, - 0xDCC9, 0x527C, 0xDCCA, 0x55C3, 0xDCCB, 0x55DB, 0xDCCC, 0x55CC, - 0xDCCD, 0x55D0, 0xDCCE, 0x55CB, 0xDCCF, 0x55CA, 0xDCD0, 0x55DD, - 0xDCD1, 0x55C0, 0xDCD2, 0x55D4, 0xDCD3, 0x55C4, 0xDCD4, 0x55E9, - 0xDCD5, 0x55BF, 0xDCD6, 0x55D2, 0xDCD7, 0x558D, 0xDCD8, 0x55CF, - 0xDCD9, 0x55D5, 0xDCDA, 0x55E2, 0xDCDB, 0x55D6, 0xDCDC, 0x55C8, - 0xDCDD, 0x55F2, 0xDCDE, 0x55CD, 0xDCDF, 0x55D9, 0xDCE0, 0x55C2, - 0xDCE1, 0x5714, 0xDCE2, 0x5853, 0xDCE3, 0x5868, 0xDCE4, 0x5864, - 0xDCE5, 0x584F, 0xDCE6, 0x584D, 0xDCE7, 0x5849, 0xDCE8, 0x586F, - 0xDCE9, 0x5855, 0xDCEA, 0x584E, 0xDCEB, 0x585D, 0xDCEC, 0x5859, - 0xDCED, 0x5865, 0xDCEE, 0x585B, 0xDCEF, 0x583D, 0xDCF0, 0x5863, - 0xDCF1, 0x5871, 0xDCF2, 0x58FC, 0xDCF3, 0x5AC7, 0xDCF4, 0x5AC4, - 0xDCF5, 0x5ACB, 0xDCF6, 0x5ABA, 0xDCF7, 0x5AB8, 0xDCF8, 0x5AB1, - 0xDCF9, 0x5AB5, 0xDCFA, 0x5AB0, 0xDCFB, 0x5ABF, 0xDCFC, 0x5AC8, - 0xDCFD, 0x5ABB, 0xDCFE, 0x5AC6, 0xDD40, 0x5AB7, 0xDD41, 0x5AC0, - 0xDD42, 0x5ACA, 0xDD43, 0x5AB4, 0xDD44, 0x5AB6, 0xDD45, 0x5ACD, - 0xDD46, 0x5AB9, 0xDD47, 0x5A90, 0xDD48, 0x5BD6, 0xDD49, 0x5BD8, - 0xDD4A, 0x5BD9, 0xDD4B, 0x5C1F, 0xDD4C, 0x5C33, 0xDD4D, 0x5D71, - 0xDD4E, 0x5D63, 0xDD4F, 0x5D4A, 0xDD50, 0x5D65, 0xDD51, 0x5D72, - 0xDD52, 0x5D6C, 0xDD53, 0x5D5E, 0xDD54, 0x5D68, 0xDD55, 0x5D67, - 0xDD56, 0x5D62, 0xDD57, 0x5DF0, 0xDD58, 0x5E4F, 0xDD59, 0x5E4E, - 0xDD5A, 0x5E4A, 0xDD5B, 0x5E4D, 0xDD5C, 0x5E4B, 0xDD5D, 0x5EC5, - 0xDD5E, 0x5ECC, 0xDD5F, 0x5EC6, 0xDD60, 0x5ECB, 0xDD61, 0x5EC7, - 0xDD62, 0x5F40, 0xDD63, 0x5FAF, 0xDD64, 0x5FAD, 0xDD65, 0x60F7, - 0xDD66, 0x6149, 0xDD67, 0x614A, 0xDD68, 0x612B, 0xDD69, 0x6145, - 0xDD6A, 0x6136, 0xDD6B, 0x6132, 0xDD6C, 0x612E, 0xDD6D, 0x6146, - 0xDD6E, 0x612F, 0xDD6F, 0x614F, 0xDD70, 0x6129, 0xDD71, 0x6140, - 0xDD72, 0x6220, 0xDD73, 0x9168, 0xDD74, 0x6223, 0xDD75, 0x6225, - 0xDD76, 0x6224, 0xDD77, 0x63C5, 0xDD78, 0x63F1, 0xDD79, 0x63EB, - 0xDD7A, 0x6410, 0xDD7B, 0x6412, 0xDD7C, 0x6409, 0xDD7D, 0x6420, - 0xDD7E, 0x6424, 0xDDA1, 0x6433, 0xDDA2, 0x6443, 0xDDA3, 0x641F, - 0xDDA4, 0x6415, 0xDDA5, 0x6418, 0xDDA6, 0x6439, 0xDDA7, 0x6437, - 0xDDA8, 0x6422, 0xDDA9, 0x6423, 0xDDAA, 0x640C, 0xDDAB, 0x6426, - 0xDDAC, 0x6430, 0xDDAD, 0x6428, 0xDDAE, 0x6441, 0xDDAF, 0x6435, - 0xDDB0, 0x642F, 0xDDB1, 0x640A, 0xDDB2, 0x641A, 0xDDB3, 0x6440, - 0xDDB4, 0x6425, 0xDDB5, 0x6427, 0xDDB6, 0x640B, 0xDDB7, 0x63E7, - 0xDDB8, 0x641B, 0xDDB9, 0x642E, 0xDDBA, 0x6421, 0xDDBB, 0x640E, - 0xDDBC, 0x656F, 0xDDBD, 0x6592, 0xDDBE, 0x65D3, 0xDDBF, 0x6686, - 0xDDC0, 0x668C, 0xDDC1, 0x6695, 0xDDC2, 0x6690, 0xDDC3, 0x668B, - 0xDDC4, 0x668A, 0xDDC5, 0x6699, 0xDDC6, 0x6694, 0xDDC7, 0x6678, - 0xDDC8, 0x6720, 0xDDC9, 0x6966, 0xDDCA, 0x695F, 0xDDCB, 0x6938, - 0xDDCC, 0x694E, 0xDDCD, 0x6962, 0xDDCE, 0x6971, 0xDDCF, 0x693F, - 0xDDD0, 0x6945, 0xDDD1, 0x696A, 0xDDD2, 0x6939, 0xDDD3, 0x6942, - 0xDDD4, 0x6957, 0xDDD5, 0x6959, 0xDDD6, 0x697A, 0xDDD7, 0x6948, - 0xDDD8, 0x6949, 0xDDD9, 0x6935, 0xDDDA, 0x696C, 0xDDDB, 0x6933, - 0xDDDC, 0x693D, 0xDDDD, 0x6965, 0xDDDE, 0x68F0, 0xDDDF, 0x6978, - 0xDDE0, 0x6934, 0xDDE1, 0x6969, 0xDDE2, 0x6940, 0xDDE3, 0x696F, - 0xDDE4, 0x6944, 0xDDE5, 0x6976, 0xDDE6, 0x6958, 0xDDE7, 0x6941, - 0xDDE8, 0x6974, 0xDDE9, 0x694C, 0xDDEA, 0x693B, 0xDDEB, 0x694B, - 0xDDEC, 0x6937, 0xDDED, 0x695C, 0xDDEE, 0x694F, 0xDDEF, 0x6951, - 0xDDF0, 0x6932, 0xDDF1, 0x6952, 0xDDF2, 0x692F, 0xDDF3, 0x697B, - 0xDDF4, 0x693C, 0xDDF5, 0x6B46, 0xDDF6, 0x6B45, 0xDDF7, 0x6B43, - 0xDDF8, 0x6B42, 0xDDF9, 0x6B48, 0xDDFA, 0x6B41, 0xDDFB, 0x6B9B, - 0xDDFC, 0xFA0D, 0xDDFD, 0x6BFB, 0xDDFE, 0x6BFC, 0xDE40, 0x6BF9, - 0xDE41, 0x6BF7, 0xDE42, 0x6BF8, 0xDE43, 0x6E9B, 0xDE44, 0x6ED6, - 0xDE45, 0x6EC8, 0xDE46, 0x6E8F, 0xDE47, 0x6EC0, 0xDE48, 0x6E9F, - 0xDE49, 0x6E93, 0xDE4A, 0x6E94, 0xDE4B, 0x6EA0, 0xDE4C, 0x6EB1, - 0xDE4D, 0x6EB9, 0xDE4E, 0x6EC6, 0xDE4F, 0x6ED2, 0xDE50, 0x6EBD, - 0xDE51, 0x6EC1, 0xDE52, 0x6E9E, 0xDE53, 0x6EC9, 0xDE54, 0x6EB7, - 0xDE55, 0x6EB0, 0xDE56, 0x6ECD, 0xDE57, 0x6EA6, 0xDE58, 0x6ECF, - 0xDE59, 0x6EB2, 0xDE5A, 0x6EBE, 0xDE5B, 0x6EC3, 0xDE5C, 0x6EDC, - 0xDE5D, 0x6ED8, 0xDE5E, 0x6E99, 0xDE5F, 0x6E92, 0xDE60, 0x6E8E, - 0xDE61, 0x6E8D, 0xDE62, 0x6EA4, 0xDE63, 0x6EA1, 0xDE64, 0x6EBF, - 0xDE65, 0x6EB3, 0xDE66, 0x6ED0, 0xDE67, 0x6ECA, 0xDE68, 0x6E97, - 0xDE69, 0x6EAE, 0xDE6A, 0x6EA3, 0xDE6B, 0x7147, 0xDE6C, 0x7154, - 0xDE6D, 0x7152, 0xDE6E, 0x7163, 0xDE6F, 0x7160, 0xDE70, 0x7141, - 0xDE71, 0x715D, 0xDE72, 0x7162, 0xDE73, 0x7172, 0xDE74, 0x7178, - 0xDE75, 0x716A, 0xDE76, 0x7161, 0xDE77, 0x7142, 0xDE78, 0x7158, - 0xDE79, 0x7143, 0xDE7A, 0x714B, 0xDE7B, 0x7170, 0xDE7C, 0x715F, - 0xDE7D, 0x7150, 0xDE7E, 0x7153, 0xDEA1, 0x7144, 0xDEA2, 0x714D, - 0xDEA3, 0x715A, 0xDEA4, 0x724F, 0xDEA5, 0x728D, 0xDEA6, 0x728C, - 0xDEA7, 0x7291, 0xDEA8, 0x7290, 0xDEA9, 0x728E, 0xDEAA, 0x733C, - 0xDEAB, 0x7342, 0xDEAC, 0x733B, 0xDEAD, 0x733A, 0xDEAE, 0x7340, - 0xDEAF, 0x734A, 0xDEB0, 0x7349, 0xDEB1, 0x7444, 0xDEB2, 0x744A, - 0xDEB3, 0x744B, 0xDEB4, 0x7452, 0xDEB5, 0x7451, 0xDEB6, 0x7457, - 0xDEB7, 0x7440, 0xDEB8, 0x744F, 0xDEB9, 0x7450, 0xDEBA, 0x744E, - 0xDEBB, 0x7442, 0xDEBC, 0x7446, 0xDEBD, 0x744D, 0xDEBE, 0x7454, - 0xDEBF, 0x74E1, 0xDEC0, 0x74FF, 0xDEC1, 0x74FE, 0xDEC2, 0x74FD, - 0xDEC3, 0x751D, 0xDEC4, 0x7579, 0xDEC5, 0x7577, 0xDEC6, 0x6983, - 0xDEC7, 0x75EF, 0xDEC8, 0x760F, 0xDEC9, 0x7603, 0xDECA, 0x75F7, - 0xDECB, 0x75FE, 0xDECC, 0x75FC, 0xDECD, 0x75F9, 0xDECE, 0x75F8, - 0xDECF, 0x7610, 0xDED0, 0x75FB, 0xDED1, 0x75F6, 0xDED2, 0x75ED, - 0xDED3, 0x75F5, 0xDED4, 0x75FD, 0xDED5, 0x7699, 0xDED6, 0x76B5, - 0xDED7, 0x76DD, 0xDED8, 0x7755, 0xDED9, 0x775F, 0xDEDA, 0x7760, - 0xDEDB, 0x7752, 0xDEDC, 0x7756, 0xDEDD, 0x775A, 0xDEDE, 0x7769, - 0xDEDF, 0x7767, 0xDEE0, 0x7754, 0xDEE1, 0x7759, 0xDEE2, 0x776D, - 0xDEE3, 0x77E0, 0xDEE4, 0x7887, 0xDEE5, 0x789A, 0xDEE6, 0x7894, - 0xDEE7, 0x788F, 0xDEE8, 0x7884, 0xDEE9, 0x7895, 0xDEEA, 0x7885, - 0xDEEB, 0x7886, 0xDEEC, 0x78A1, 0xDEED, 0x7883, 0xDEEE, 0x7879, - 0xDEEF, 0x7899, 0xDEF0, 0x7880, 0xDEF1, 0x7896, 0xDEF2, 0x787B, - 0xDEF3, 0x797C, 0xDEF4, 0x7982, 0xDEF5, 0x797D, 0xDEF6, 0x7979, - 0xDEF7, 0x7A11, 0xDEF8, 0x7A18, 0xDEF9, 0x7A19, 0xDEFA, 0x7A12, - 0xDEFB, 0x7A17, 0xDEFC, 0x7A15, 0xDEFD, 0x7A22, 0xDEFE, 0x7A13, - 0xDF40, 0x7A1B, 0xDF41, 0x7A10, 0xDF42, 0x7AA3, 0xDF43, 0x7AA2, - 0xDF44, 0x7A9E, 0xDF45, 0x7AEB, 0xDF46, 0x7B66, 0xDF47, 0x7B64, - 0xDF48, 0x7B6D, 0xDF49, 0x7B74, 0xDF4A, 0x7B69, 0xDF4B, 0x7B72, - 0xDF4C, 0x7B65, 0xDF4D, 0x7B73, 0xDF4E, 0x7B71, 0xDF4F, 0x7B70, - 0xDF50, 0x7B61, 0xDF51, 0x7B78, 0xDF52, 0x7B76, 0xDF53, 0x7B63, - 0xDF54, 0x7CB2, 0xDF55, 0x7CB4, 0xDF56, 0x7CAF, 0xDF57, 0x7D88, - 0xDF58, 0x7D86, 0xDF59, 0x7D80, 0xDF5A, 0x7D8D, 0xDF5B, 0x7D7F, - 0xDF5C, 0x7D85, 0xDF5D, 0x7D7A, 0xDF5E, 0x7D8E, 0xDF5F, 0x7D7B, - 0xDF60, 0x7D83, 0xDF61, 0x7D7C, 0xDF62, 0x7D8C, 0xDF63, 0x7D94, - 0xDF64, 0x7D84, 0xDF65, 0x7D7D, 0xDF66, 0x7D92, 0xDF67, 0x7F6D, - 0xDF68, 0x7F6B, 0xDF69, 0x7F67, 0xDF6A, 0x7F68, 0xDF6B, 0x7F6C, - 0xDF6C, 0x7FA6, 0xDF6D, 0x7FA5, 0xDF6E, 0x7FA7, 0xDF6F, 0x7FDB, - 0xDF70, 0x7FDC, 0xDF71, 0x8021, 0xDF72, 0x8164, 0xDF73, 0x8160, - 0xDF74, 0x8177, 0xDF75, 0x815C, 0xDF76, 0x8169, 0xDF77, 0x815B, - 0xDF78, 0x8162, 0xDF79, 0x8172, 0xDF7A, 0x6721, 0xDF7B, 0x815E, - 0xDF7C, 0x8176, 0xDF7D, 0x8167, 0xDF7E, 0x816F, 0xDFA1, 0x8144, - 0xDFA2, 0x8161, 0xDFA3, 0x821D, 0xDFA4, 0x8249, 0xDFA5, 0x8244, - 0xDFA6, 0x8240, 0xDFA7, 0x8242, 0xDFA8, 0x8245, 0xDFA9, 0x84F1, - 0xDFAA, 0x843F, 0xDFAB, 0x8456, 0xDFAC, 0x8476, 0xDFAD, 0x8479, - 0xDFAE, 0x848F, 0xDFAF, 0x848D, 0xDFB0, 0x8465, 0xDFB1, 0x8451, - 0xDFB2, 0x8440, 0xDFB3, 0x8486, 0xDFB4, 0x8467, 0xDFB5, 0x8430, - 0xDFB6, 0x844D, 0xDFB7, 0x847D, 0xDFB8, 0x845A, 0xDFB9, 0x8459, - 0xDFBA, 0x8474, 0xDFBB, 0x8473, 0xDFBC, 0x845D, 0xDFBD, 0x8507, - 0xDFBE, 0x845E, 0xDFBF, 0x8437, 0xDFC0, 0x843A, 0xDFC1, 0x8434, - 0xDFC2, 0x847A, 0xDFC3, 0x8443, 0xDFC4, 0x8478, 0xDFC5, 0x8432, - 0xDFC6, 0x8445, 0xDFC7, 0x8429, 0xDFC8, 0x83D9, 0xDFC9, 0x844B, - 0xDFCA, 0x842F, 0xDFCB, 0x8442, 0xDFCC, 0x842D, 0xDFCD, 0x845F, - 0xDFCE, 0x8470, 0xDFCF, 0x8439, 0xDFD0, 0x844E, 0xDFD1, 0x844C, - 0xDFD2, 0x8452, 0xDFD3, 0x846F, 0xDFD4, 0x84C5, 0xDFD5, 0x848E, - 0xDFD6, 0x843B, 0xDFD7, 0x8447, 0xDFD8, 0x8436, 0xDFD9, 0x8433, - 0xDFDA, 0x8468, 0xDFDB, 0x847E, 0xDFDC, 0x8444, 0xDFDD, 0x842B, - 0xDFDE, 0x8460, 0xDFDF, 0x8454, 0xDFE0, 0x846E, 0xDFE1, 0x8450, - 0xDFE2, 0x870B, 0xDFE3, 0x8704, 0xDFE4, 0x86F7, 0xDFE5, 0x870C, - 0xDFE6, 0x86FA, 0xDFE7, 0x86D6, 0xDFE8, 0x86F5, 0xDFE9, 0x874D, - 0xDFEA, 0x86F8, 0xDFEB, 0x870E, 0xDFEC, 0x8709, 0xDFED, 0x8701, - 0xDFEE, 0x86F6, 0xDFEF, 0x870D, 0xDFF0, 0x8705, 0xDFF1, 0x88D6, - 0xDFF2, 0x88CB, 0xDFF3, 0x88CD, 0xDFF4, 0x88CE, 0xDFF5, 0x88DE, - 0xDFF6, 0x88DB, 0xDFF7, 0x88DA, 0xDFF8, 0x88CC, 0xDFF9, 0x88D0, - 0xDFFA, 0x8985, 0xDFFB, 0x899B, 0xDFFC, 0x89DF, 0xDFFD, 0x89E5, - 0xDFFE, 0x89E4, 0xE040, 0x89E1, 0xE041, 0x89E0, 0xE042, 0x89E2, - 0xE043, 0x89DC, 0xE044, 0x89E6, 0xE045, 0x8A76, 0xE046, 0x8A86, - 0xE047, 0x8A7F, 0xE048, 0x8A61, 0xE049, 0x8A3F, 0xE04A, 0x8A77, - 0xE04B, 0x8A82, 0xE04C, 0x8A84, 0xE04D, 0x8A75, 0xE04E, 0x8A83, - 0xE04F, 0x8A81, 0xE050, 0x8A74, 0xE051, 0x8A7A, 0xE052, 0x8C3C, - 0xE053, 0x8C4B, 0xE054, 0x8C4A, 0xE055, 0x8C65, 0xE056, 0x8C64, - 0xE057, 0x8C66, 0xE058, 0x8C86, 0xE059, 0x8C84, 0xE05A, 0x8C85, - 0xE05B, 0x8CCC, 0xE05C, 0x8D68, 0xE05D, 0x8D69, 0xE05E, 0x8D91, - 0xE05F, 0x8D8C, 0xE060, 0x8D8E, 0xE061, 0x8D8F, 0xE062, 0x8D8D, - 0xE063, 0x8D93, 0xE064, 0x8D94, 0xE065, 0x8D90, 0xE066, 0x8D92, - 0xE067, 0x8DF0, 0xE068, 0x8DE0, 0xE069, 0x8DEC, 0xE06A, 0x8DF1, - 0xE06B, 0x8DEE, 0xE06C, 0x8DD0, 0xE06D, 0x8DE9, 0xE06E, 0x8DE3, - 0xE06F, 0x8DE2, 0xE070, 0x8DE7, 0xE071, 0x8DF2, 0xE072, 0x8DEB, - 0xE073, 0x8DF4, 0xE074, 0x8F06, 0xE075, 0x8EFF, 0xE076, 0x8F01, - 0xE077, 0x8F00, 0xE078, 0x8F05, 0xE079, 0x8F07, 0xE07A, 0x8F08, - 0xE07B, 0x8F02, 0xE07C, 0x8F0B, 0xE07D, 0x9052, 0xE07E, 0x903F, - 0xE0A1, 0x9044, 0xE0A2, 0x9049, 0xE0A3, 0x903D, 0xE0A4, 0x9110, - 0xE0A5, 0x910D, 0xE0A6, 0x910F, 0xE0A7, 0x9111, 0xE0A8, 0x9116, - 0xE0A9, 0x9114, 0xE0AA, 0x910B, 0xE0AB, 0x910E, 0xE0AC, 0x916E, - 0xE0AD, 0x916F, 0xE0AE, 0x9248, 0xE0AF, 0x9252, 0xE0B0, 0x9230, - 0xE0B1, 0x923A, 0xE0B2, 0x9266, 0xE0B3, 0x9233, 0xE0B4, 0x9265, - 0xE0B5, 0x925E, 0xE0B6, 0x9283, 0xE0B7, 0x922E, 0xE0B8, 0x924A, - 0xE0B9, 0x9246, 0xE0BA, 0x926D, 0xE0BB, 0x926C, 0xE0BC, 0x924F, - 0xE0BD, 0x9260, 0xE0BE, 0x9267, 0xE0BF, 0x926F, 0xE0C0, 0x9236, - 0xE0C1, 0x9261, 0xE0C2, 0x9270, 0xE0C3, 0x9231, 0xE0C4, 0x9254, - 0xE0C5, 0x9263, 0xE0C6, 0x9250, 0xE0C7, 0x9272, 0xE0C8, 0x924E, - 0xE0C9, 0x9253, 0xE0CA, 0x924C, 0xE0CB, 0x9256, 0xE0CC, 0x9232, - 0xE0CD, 0x959F, 0xE0CE, 0x959C, 0xE0CF, 0x959E, 0xE0D0, 0x959B, - 0xE0D1, 0x9692, 0xE0D2, 0x9693, 0xE0D3, 0x9691, 0xE0D4, 0x9697, - 0xE0D5, 0x96CE, 0xE0D6, 0x96FA, 0xE0D7, 0x96FD, 0xE0D8, 0x96F8, - 0xE0D9, 0x96F5, 0xE0DA, 0x9773, 0xE0DB, 0x9777, 0xE0DC, 0x9778, - 0xE0DD, 0x9772, 0xE0DE, 0x980F, 0xE0DF, 0x980D, 0xE0E0, 0x980E, - 0xE0E1, 0x98AC, 0xE0E2, 0x98F6, 0xE0E3, 0x98F9, 0xE0E4, 0x99AF, - 0xE0E5, 0x99B2, 0xE0E6, 0x99B0, 0xE0E7, 0x99B5, 0xE0E8, 0x9AAD, - 0xE0E9, 0x9AAB, 0xE0EA, 0x9B5B, 0xE0EB, 0x9CEA, 0xE0EC, 0x9CED, - 0xE0ED, 0x9CE7, 0xE0EE, 0x9E80, 0xE0EF, 0x9EFD, 0xE0F0, 0x50E6, - 0xE0F1, 0x50D4, 0xE0F2, 0x50D7, 0xE0F3, 0x50E8, 0xE0F4, 0x50F3, - 0xE0F5, 0x50DB, 0xE0F6, 0x50EA, 0xE0F7, 0x50DD, 0xE0F8, 0x50E4, - 0xE0F9, 0x50D3, 0xE0FA, 0x50EC, 0xE0FB, 0x50F0, 0xE0FC, 0x50EF, - 0xE0FD, 0x50E3, 0xE0FE, 0x50E0, 0xE140, 0x51D8, 0xE141, 0x5280, - 0xE142, 0x5281, 0xE143, 0x52E9, 0xE144, 0x52EB, 0xE145, 0x5330, - 0xE146, 0x53AC, 0xE147, 0x5627, 0xE148, 0x5615, 0xE149, 0x560C, - 0xE14A, 0x5612, 0xE14B, 0x55FC, 0xE14C, 0x560F, 0xE14D, 0x561C, - 0xE14E, 0x5601, 0xE14F, 0x5613, 0xE150, 0x5602, 0xE151, 0x55FA, - 0xE152, 0x561D, 0xE153, 0x5604, 0xE154, 0x55FF, 0xE155, 0x55F9, - 0xE156, 0x5889, 0xE157, 0x587C, 0xE158, 0x5890, 0xE159, 0x5898, - 0xE15A, 0x5886, 0xE15B, 0x5881, 0xE15C, 0x587F, 0xE15D, 0x5874, - 0xE15E, 0x588B, 0xE15F, 0x587A, 0xE160, 0x5887, 0xE161, 0x5891, - 0xE162, 0x588E, 0xE163, 0x5876, 0xE164, 0x5882, 0xE165, 0x5888, - 0xE166, 0x587B, 0xE167, 0x5894, 0xE168, 0x588F, 0xE169, 0x58FE, - 0xE16A, 0x596B, 0xE16B, 0x5ADC, 0xE16C, 0x5AEE, 0xE16D, 0x5AE5, - 0xE16E, 0x5AD5, 0xE16F, 0x5AEA, 0xE170, 0x5ADA, 0xE171, 0x5AED, - 0xE172, 0x5AEB, 0xE173, 0x5AF3, 0xE174, 0x5AE2, 0xE175, 0x5AE0, - 0xE176, 0x5ADB, 0xE177, 0x5AEC, 0xE178, 0x5ADE, 0xE179, 0x5ADD, - 0xE17A, 0x5AD9, 0xE17B, 0x5AE8, 0xE17C, 0x5ADF, 0xE17D, 0x5B77, - 0xE17E, 0x5BE0, 0xE1A1, 0x5BE3, 0xE1A2, 0x5C63, 0xE1A3, 0x5D82, - 0xE1A4, 0x5D80, 0xE1A5, 0x5D7D, 0xE1A6, 0x5D86, 0xE1A7, 0x5D7A, - 0xE1A8, 0x5D81, 0xE1A9, 0x5D77, 0xE1AA, 0x5D8A, 0xE1AB, 0x5D89, - 0xE1AC, 0x5D88, 0xE1AD, 0x5D7E, 0xE1AE, 0x5D7C, 0xE1AF, 0x5D8D, - 0xE1B0, 0x5D79, 0xE1B1, 0x5D7F, 0xE1B2, 0x5E58, 0xE1B3, 0x5E59, - 0xE1B4, 0x5E53, 0xE1B5, 0x5ED8, 0xE1B6, 0x5ED1, 0xE1B7, 0x5ED7, - 0xE1B8, 0x5ECE, 0xE1B9, 0x5EDC, 0xE1BA, 0x5ED5, 0xE1BB, 0x5ED9, - 0xE1BC, 0x5ED2, 0xE1BD, 0x5ED4, 0xE1BE, 0x5F44, 0xE1BF, 0x5F43, - 0xE1C0, 0x5F6F, 0xE1C1, 0x5FB6, 0xE1C2, 0x612C, 0xE1C3, 0x6128, - 0xE1C4, 0x6141, 0xE1C5, 0x615E, 0xE1C6, 0x6171, 0xE1C7, 0x6173, - 0xE1C8, 0x6152, 0xE1C9, 0x6153, 0xE1CA, 0x6172, 0xE1CB, 0x616C, - 0xE1CC, 0x6180, 0xE1CD, 0x6174, 0xE1CE, 0x6154, 0xE1CF, 0x617A, - 0xE1D0, 0x615B, 0xE1D1, 0x6165, 0xE1D2, 0x613B, 0xE1D3, 0x616A, - 0xE1D4, 0x6161, 0xE1D5, 0x6156, 0xE1D6, 0x6229, 0xE1D7, 0x6227, - 0xE1D8, 0x622B, 0xE1D9, 0x642B, 0xE1DA, 0x644D, 0xE1DB, 0x645B, - 0xE1DC, 0x645D, 0xE1DD, 0x6474, 0xE1DE, 0x6476, 0xE1DF, 0x6472, - 0xE1E0, 0x6473, 0xE1E1, 0x647D, 0xE1E2, 0x6475, 0xE1E3, 0x6466, - 0xE1E4, 0x64A6, 0xE1E5, 0x644E, 0xE1E6, 0x6482, 0xE1E7, 0x645E, - 0xE1E8, 0x645C, 0xE1E9, 0x644B, 0xE1EA, 0x6453, 0xE1EB, 0x6460, - 0xE1EC, 0x6450, 0xE1ED, 0x647F, 0xE1EE, 0x643F, 0xE1EF, 0x646C, - 0xE1F0, 0x646B, 0xE1F1, 0x6459, 0xE1F2, 0x6465, 0xE1F3, 0x6477, - 0xE1F4, 0x6573, 0xE1F5, 0x65A0, 0xE1F6, 0x66A1, 0xE1F7, 0x66A0, - 0xE1F8, 0x669F, 0xE1F9, 0x6705, 0xE1FA, 0x6704, 0xE1FB, 0x6722, - 0xE1FC, 0x69B1, 0xE1FD, 0x69B6, 0xE1FE, 0x69C9, 0xE240, 0x69A0, - 0xE241, 0x69CE, 0xE242, 0x6996, 0xE243, 0x69B0, 0xE244, 0x69AC, - 0xE245, 0x69BC, 0xE246, 0x6991, 0xE247, 0x6999, 0xE248, 0x698E, - 0xE249, 0x69A7, 0xE24A, 0x698D, 0xE24B, 0x69A9, 0xE24C, 0x69BE, - 0xE24D, 0x69AF, 0xE24E, 0x69BF, 0xE24F, 0x69C4, 0xE250, 0x69BD, - 0xE251, 0x69A4, 0xE252, 0x69D4, 0xE253, 0x69B9, 0xE254, 0x69CA, - 0xE255, 0x699A, 0xE256, 0x69CF, 0xE257, 0x69B3, 0xE258, 0x6993, - 0xE259, 0x69AA, 0xE25A, 0x69A1, 0xE25B, 0x699E, 0xE25C, 0x69D9, - 0xE25D, 0x6997, 0xE25E, 0x6990, 0xE25F, 0x69C2, 0xE260, 0x69B5, - 0xE261, 0x69A5, 0xE262, 0x69C6, 0xE263, 0x6B4A, 0xE264, 0x6B4D, - 0xE265, 0x6B4B, 0xE266, 0x6B9E, 0xE267, 0x6B9F, 0xE268, 0x6BA0, - 0xE269, 0x6BC3, 0xE26A, 0x6BC4, 0xE26B, 0x6BFE, 0xE26C, 0x6ECE, - 0xE26D, 0x6EF5, 0xE26E, 0x6EF1, 0xE26F, 0x6F03, 0xE270, 0x6F25, - 0xE271, 0x6EF8, 0xE272, 0x6F37, 0xE273, 0x6EFB, 0xE274, 0x6F2E, - 0xE275, 0x6F09, 0xE276, 0x6F4E, 0xE277, 0x6F19, 0xE278, 0x6F1A, - 0xE279, 0x6F27, 0xE27A, 0x6F18, 0xE27B, 0x6F3B, 0xE27C, 0x6F12, - 0xE27D, 0x6EED, 0xE27E, 0x6F0A, 0xE2A1, 0x6F36, 0xE2A2, 0x6F73, - 0xE2A3, 0x6EF9, 0xE2A4, 0x6EEE, 0xE2A5, 0x6F2D, 0xE2A6, 0x6F40, - 0xE2A7, 0x6F30, 0xE2A8, 0x6F3C, 0xE2A9, 0x6F35, 0xE2AA, 0x6EEB, - 0xE2AB, 0x6F07, 0xE2AC, 0x6F0E, 0xE2AD, 0x6F43, 0xE2AE, 0x6F05, - 0xE2AF, 0x6EFD, 0xE2B0, 0x6EF6, 0xE2B1, 0x6F39, 0xE2B2, 0x6F1C, - 0xE2B3, 0x6EFC, 0xE2B4, 0x6F3A, 0xE2B5, 0x6F1F, 0xE2B6, 0x6F0D, - 0xE2B7, 0x6F1E, 0xE2B8, 0x6F08, 0xE2B9, 0x6F21, 0xE2BA, 0x7187, - 0xE2BB, 0x7190, 0xE2BC, 0x7189, 0xE2BD, 0x7180, 0xE2BE, 0x7185, - 0xE2BF, 0x7182, 0xE2C0, 0x718F, 0xE2C1, 0x717B, 0xE2C2, 0x7186, - 0xE2C3, 0x7181, 0xE2C4, 0x7197, 0xE2C5, 0x7244, 0xE2C6, 0x7253, - 0xE2C7, 0x7297, 0xE2C8, 0x7295, 0xE2C9, 0x7293, 0xE2CA, 0x7343, - 0xE2CB, 0x734D, 0xE2CC, 0x7351, 0xE2CD, 0x734C, 0xE2CE, 0x7462, - 0xE2CF, 0x7473, 0xE2D0, 0x7471, 0xE2D1, 0x7475, 0xE2D2, 0x7472, - 0xE2D3, 0x7467, 0xE2D4, 0x746E, 0xE2D5, 0x7500, 0xE2D6, 0x7502, - 0xE2D7, 0x7503, 0xE2D8, 0x757D, 0xE2D9, 0x7590, 0xE2DA, 0x7616, - 0xE2DB, 0x7608, 0xE2DC, 0x760C, 0xE2DD, 0x7615, 0xE2DE, 0x7611, - 0xE2DF, 0x760A, 0xE2E0, 0x7614, 0xE2E1, 0x76B8, 0xE2E2, 0x7781, - 0xE2E3, 0x777C, 0xE2E4, 0x7785, 0xE2E5, 0x7782, 0xE2E6, 0x776E, - 0xE2E7, 0x7780, 0xE2E8, 0x776F, 0xE2E9, 0x777E, 0xE2EA, 0x7783, - 0xE2EB, 0x78B2, 0xE2EC, 0x78AA, 0xE2ED, 0x78B4, 0xE2EE, 0x78AD, - 0xE2EF, 0x78A8, 0xE2F0, 0x787E, 0xE2F1, 0x78AB, 0xE2F2, 0x789E, - 0xE2F3, 0x78A5, 0xE2F4, 0x78A0, 0xE2F5, 0x78AC, 0xE2F6, 0x78A2, - 0xE2F7, 0x78A4, 0xE2F8, 0x7998, 0xE2F9, 0x798A, 0xE2FA, 0x798B, - 0xE2FB, 0x7996, 0xE2FC, 0x7995, 0xE2FD, 0x7994, 0xE2FE, 0x7993, - 0xE340, 0x7997, 0xE341, 0x7988, 0xE342, 0x7992, 0xE343, 0x7990, - 0xE344, 0x7A2B, 0xE345, 0x7A4A, 0xE346, 0x7A30, 0xE347, 0x7A2F, - 0xE348, 0x7A28, 0xE349, 0x7A26, 0xE34A, 0x7AA8, 0xE34B, 0x7AAB, - 0xE34C, 0x7AAC, 0xE34D, 0x7AEE, 0xE34E, 0x7B88, 0xE34F, 0x7B9C, - 0xE350, 0x7B8A, 0xE351, 0x7B91, 0xE352, 0x7B90, 0xE353, 0x7B96, - 0xE354, 0x7B8D, 0xE355, 0x7B8C, 0xE356, 0x7B9B, 0xE357, 0x7B8E, - 0xE358, 0x7B85, 0xE359, 0x7B98, 0xE35A, 0x5284, 0xE35B, 0x7B99, - 0xE35C, 0x7BA4, 0xE35D, 0x7B82, 0xE35E, 0x7CBB, 0xE35F, 0x7CBF, - 0xE360, 0x7CBC, 0xE361, 0x7CBA, 0xE362, 0x7DA7, 0xE363, 0x7DB7, - 0xE364, 0x7DC2, 0xE365, 0x7DA3, 0xE366, 0x7DAA, 0xE367, 0x7DC1, - 0xE368, 0x7DC0, 0xE369, 0x7DC5, 0xE36A, 0x7D9D, 0xE36B, 0x7DCE, - 0xE36C, 0x7DC4, 0xE36D, 0x7DC6, 0xE36E, 0x7DCB, 0xE36F, 0x7DCC, - 0xE370, 0x7DAF, 0xE371, 0x7DB9, 0xE372, 0x7D96, 0xE373, 0x7DBC, - 0xE374, 0x7D9F, 0xE375, 0x7DA6, 0xE376, 0x7DAE, 0xE377, 0x7DA9, - 0xE378, 0x7DA1, 0xE379, 0x7DC9, 0xE37A, 0x7F73, 0xE37B, 0x7FE2, - 0xE37C, 0x7FE3, 0xE37D, 0x7FE5, 0xE37E, 0x7FDE, 0xE3A1, 0x8024, - 0xE3A2, 0x805D, 0xE3A3, 0x805C, 0xE3A4, 0x8189, 0xE3A5, 0x8186, - 0xE3A6, 0x8183, 0xE3A7, 0x8187, 0xE3A8, 0x818D, 0xE3A9, 0x818C, - 0xE3AA, 0x818B, 0xE3AB, 0x8215, 0xE3AC, 0x8497, 0xE3AD, 0x84A4, - 0xE3AE, 0x84A1, 0xE3AF, 0x849F, 0xE3B0, 0x84BA, 0xE3B1, 0x84CE, - 0xE3B2, 0x84C2, 0xE3B3, 0x84AC, 0xE3B4, 0x84AE, 0xE3B5, 0x84AB, - 0xE3B6, 0x84B9, 0xE3B7, 0x84B4, 0xE3B8, 0x84C1, 0xE3B9, 0x84CD, - 0xE3BA, 0x84AA, 0xE3BB, 0x849A, 0xE3BC, 0x84B1, 0xE3BD, 0x84D0, - 0xE3BE, 0x849D, 0xE3BF, 0x84A7, 0xE3C0, 0x84BB, 0xE3C1, 0x84A2, - 0xE3C2, 0x8494, 0xE3C3, 0x84C7, 0xE3C4, 0x84CC, 0xE3C5, 0x849B, - 0xE3C6, 0x84A9, 0xE3C7, 0x84AF, 0xE3C8, 0x84A8, 0xE3C9, 0x84D6, - 0xE3CA, 0x8498, 0xE3CB, 0x84B6, 0xE3CC, 0x84CF, 0xE3CD, 0x84A0, - 0xE3CE, 0x84D7, 0xE3CF, 0x84D4, 0xE3D0, 0x84D2, 0xE3D1, 0x84DB, - 0xE3D2, 0x84B0, 0xE3D3, 0x8491, 0xE3D4, 0x8661, 0xE3D5, 0x8733, - 0xE3D6, 0x8723, 0xE3D7, 0x8728, 0xE3D8, 0x876B, 0xE3D9, 0x8740, - 0xE3DA, 0x872E, 0xE3DB, 0x871E, 0xE3DC, 0x8721, 0xE3DD, 0x8719, - 0xE3DE, 0x871B, 0xE3DF, 0x8743, 0xE3E0, 0x872C, 0xE3E1, 0x8741, - 0xE3E2, 0x873E, 0xE3E3, 0x8746, 0xE3E4, 0x8720, 0xE3E5, 0x8732, - 0xE3E6, 0x872A, 0xE3E7, 0x872D, 0xE3E8, 0x873C, 0xE3E9, 0x8712, - 0xE3EA, 0x873A, 0xE3EB, 0x8731, 0xE3EC, 0x8735, 0xE3ED, 0x8742, - 0xE3EE, 0x8726, 0xE3EF, 0x8727, 0xE3F0, 0x8738, 0xE3F1, 0x8724, - 0xE3F2, 0x871A, 0xE3F3, 0x8730, 0xE3F4, 0x8711, 0xE3F5, 0x88F7, - 0xE3F6, 0x88E7, 0xE3F7, 0x88F1, 0xE3F8, 0x88F2, 0xE3F9, 0x88FA, - 0xE3FA, 0x88FE, 0xE3FB, 0x88EE, 0xE3FC, 0x88FC, 0xE3FD, 0x88F6, - 0xE3FE, 0x88FB, 0xE440, 0x88F0, 0xE441, 0x88EC, 0xE442, 0x88EB, - 0xE443, 0x899D, 0xE444, 0x89A1, 0xE445, 0x899F, 0xE446, 0x899E, - 0xE447, 0x89E9, 0xE448, 0x89EB, 0xE449, 0x89E8, 0xE44A, 0x8AAB, - 0xE44B, 0x8A99, 0xE44C, 0x8A8B, 0xE44D, 0x8A92, 0xE44E, 0x8A8F, - 0xE44F, 0x8A96, 0xE450, 0x8C3D, 0xE451, 0x8C68, 0xE452, 0x8C69, - 0xE453, 0x8CD5, 0xE454, 0x8CCF, 0xE455, 0x8CD7, 0xE456, 0x8D96, - 0xE457, 0x8E09, 0xE458, 0x8E02, 0xE459, 0x8DFF, 0xE45A, 0x8E0D, - 0xE45B, 0x8DFD, 0xE45C, 0x8E0A, 0xE45D, 0x8E03, 0xE45E, 0x8E07, - 0xE45F, 0x8E06, 0xE460, 0x8E05, 0xE461, 0x8DFE, 0xE462, 0x8E00, - 0xE463, 0x8E04, 0xE464, 0x8F10, 0xE465, 0x8F11, 0xE466, 0x8F0E, - 0xE467, 0x8F0D, 0xE468, 0x9123, 0xE469, 0x911C, 0xE46A, 0x9120, - 0xE46B, 0x9122, 0xE46C, 0x911F, 0xE46D, 0x911D, 0xE46E, 0x911A, - 0xE46F, 0x9124, 0xE470, 0x9121, 0xE471, 0x911B, 0xE472, 0x917A, - 0xE473, 0x9172, 0xE474, 0x9179, 0xE475, 0x9173, 0xE476, 0x92A5, - 0xE477, 0x92A4, 0xE478, 0x9276, 0xE479, 0x929B, 0xE47A, 0x927A, - 0xE47B, 0x92A0, 0xE47C, 0x9294, 0xE47D, 0x92AA, 0xE47E, 0x928D, - 0xE4A1, 0x92A6, 0xE4A2, 0x929A, 0xE4A3, 0x92AB, 0xE4A4, 0x9279, - 0xE4A5, 0x9297, 0xE4A6, 0x927F, 0xE4A7, 0x92A3, 0xE4A8, 0x92EE, - 0xE4A9, 0x928E, 0xE4AA, 0x9282, 0xE4AB, 0x9295, 0xE4AC, 0x92A2, - 0xE4AD, 0x927D, 0xE4AE, 0x9288, 0xE4AF, 0x92A1, 0xE4B0, 0x928A, - 0xE4B1, 0x9286, 0xE4B2, 0x928C, 0xE4B3, 0x9299, 0xE4B4, 0x92A7, - 0xE4B5, 0x927E, 0xE4B6, 0x9287, 0xE4B7, 0x92A9, 0xE4B8, 0x929D, - 0xE4B9, 0x928B, 0xE4BA, 0x922D, 0xE4BB, 0x969E, 0xE4BC, 0x96A1, - 0xE4BD, 0x96FF, 0xE4BE, 0x9758, 0xE4BF, 0x977D, 0xE4C0, 0x977A, - 0xE4C1, 0x977E, 0xE4C2, 0x9783, 0xE4C3, 0x9780, 0xE4C4, 0x9782, - 0xE4C5, 0x977B, 0xE4C6, 0x9784, 0xE4C7, 0x9781, 0xE4C8, 0x977F, - 0xE4C9, 0x97CE, 0xE4CA, 0x97CD, 0xE4CB, 0x9816, 0xE4CC, 0x98AD, - 0xE4CD, 0x98AE, 0xE4CE, 0x9902, 0xE4CF, 0x9900, 0xE4D0, 0x9907, - 0xE4D1, 0x999D, 0xE4D2, 0x999C, 0xE4D3, 0x99C3, 0xE4D4, 0x99B9, - 0xE4D5, 0x99BB, 0xE4D6, 0x99BA, 0xE4D7, 0x99C2, 0xE4D8, 0x99BD, - 0xE4D9, 0x99C7, 0xE4DA, 0x9AB1, 0xE4DB, 0x9AE3, 0xE4DC, 0x9AE7, - 0xE4DD, 0x9B3E, 0xE4DE, 0x9B3F, 0xE4DF, 0x9B60, 0xE4E0, 0x9B61, - 0xE4E1, 0x9B5F, 0xE4E2, 0x9CF1, 0xE4E3, 0x9CF2, 0xE4E4, 0x9CF5, - 0xE4E5, 0x9EA7, 0xE4E6, 0x50FF, 0xE4E7, 0x5103, 0xE4E8, 0x5130, - 0xE4E9, 0x50F8, 0xE4EA, 0x5106, 0xE4EB, 0x5107, 0xE4EC, 0x50F6, - 0xE4ED, 0x50FE, 0xE4EE, 0x510B, 0xE4EF, 0x510C, 0xE4F0, 0x50FD, - 0xE4F1, 0x510A, 0xE4F2, 0x528B, 0xE4F3, 0x528C, 0xE4F4, 0x52F1, - 0xE4F5, 0x52EF, 0xE4F6, 0x5648, 0xE4F7, 0x5642, 0xE4F8, 0x564C, - 0xE4F9, 0x5635, 0xE4FA, 0x5641, 0xE4FB, 0x564A, 0xE4FC, 0x5649, - 0xE4FD, 0x5646, 0xE4FE, 0x5658, 0xE540, 0x565A, 0xE541, 0x5640, - 0xE542, 0x5633, 0xE543, 0x563D, 0xE544, 0x562C, 0xE545, 0x563E, - 0xE546, 0x5638, 0xE547, 0x562A, 0xE548, 0x563A, 0xE549, 0x571A, - 0xE54A, 0x58AB, 0xE54B, 0x589D, 0xE54C, 0x58B1, 0xE54D, 0x58A0, - 0xE54E, 0x58A3, 0xE54F, 0x58AF, 0xE550, 0x58AC, 0xE551, 0x58A5, - 0xE552, 0x58A1, 0xE553, 0x58FF, 0xE554, 0x5AFF, 0xE555, 0x5AF4, - 0xE556, 0x5AFD, 0xE557, 0x5AF7, 0xE558, 0x5AF6, 0xE559, 0x5B03, - 0xE55A, 0x5AF8, 0xE55B, 0x5B02, 0xE55C, 0x5AF9, 0xE55D, 0x5B01, - 0xE55E, 0x5B07, 0xE55F, 0x5B05, 0xE560, 0x5B0F, 0xE561, 0x5C67, - 0xE562, 0x5D99, 0xE563, 0x5D97, 0xE564, 0x5D9F, 0xE565, 0x5D92, - 0xE566, 0x5DA2, 0xE567, 0x5D93, 0xE568, 0x5D95, 0xE569, 0x5DA0, - 0xE56A, 0x5D9C, 0xE56B, 0x5DA1, 0xE56C, 0x5D9A, 0xE56D, 0x5D9E, - 0xE56E, 0x5E69, 0xE56F, 0x5E5D, 0xE570, 0x5E60, 0xE571, 0x5E5C, - 0xE572, 0x7DF3, 0xE573, 0x5EDB, 0xE574, 0x5EDE, 0xE575, 0x5EE1, - 0xE576, 0x5F49, 0xE577, 0x5FB2, 0xE578, 0x618B, 0xE579, 0x6183, - 0xE57A, 0x6179, 0xE57B, 0x61B1, 0xE57C, 0x61B0, 0xE57D, 0x61A2, - 0xE57E, 0x6189, 0xE5A1, 0x619B, 0xE5A2, 0x6193, 0xE5A3, 0x61AF, - 0xE5A4, 0x61AD, 0xE5A5, 0x619F, 0xE5A6, 0x6192, 0xE5A7, 0x61AA, - 0xE5A8, 0x61A1, 0xE5A9, 0x618D, 0xE5AA, 0x6166, 0xE5AB, 0x61B3, - 0xE5AC, 0x622D, 0xE5AD, 0x646E, 0xE5AE, 0x6470, 0xE5AF, 0x6496, - 0xE5B0, 0x64A0, 0xE5B1, 0x6485, 0xE5B2, 0x6497, 0xE5B3, 0x649C, - 0xE5B4, 0x648F, 0xE5B5, 0x648B, 0xE5B6, 0x648A, 0xE5B7, 0x648C, - 0xE5B8, 0x64A3, 0xE5B9, 0x649F, 0xE5BA, 0x6468, 0xE5BB, 0x64B1, - 0xE5BC, 0x6498, 0xE5BD, 0x6576, 0xE5BE, 0x657A, 0xE5BF, 0x6579, - 0xE5C0, 0x657B, 0xE5C1, 0x65B2, 0xE5C2, 0x65B3, 0xE5C3, 0x66B5, - 0xE5C4, 0x66B0, 0xE5C5, 0x66A9, 0xE5C6, 0x66B2, 0xE5C7, 0x66B7, - 0xE5C8, 0x66AA, 0xE5C9, 0x66AF, 0xE5CA, 0x6A00, 0xE5CB, 0x6A06, - 0xE5CC, 0x6A17, 0xE5CD, 0x69E5, 0xE5CE, 0x69F8, 0xE5CF, 0x6A15, - 0xE5D0, 0x69F1, 0xE5D1, 0x69E4, 0xE5D2, 0x6A20, 0xE5D3, 0x69FF, - 0xE5D4, 0x69EC, 0xE5D5, 0x69E2, 0xE5D6, 0x6A1B, 0xE5D7, 0x6A1D, - 0xE5D8, 0x69FE, 0xE5D9, 0x6A27, 0xE5DA, 0x69F2, 0xE5DB, 0x69EE, - 0xE5DC, 0x6A14, 0xE5DD, 0x69F7, 0xE5DE, 0x69E7, 0xE5DF, 0x6A40, - 0xE5E0, 0x6A08, 0xE5E1, 0x69E6, 0xE5E2, 0x69FB, 0xE5E3, 0x6A0D, - 0xE5E4, 0x69FC, 0xE5E5, 0x69EB, 0xE5E6, 0x6A09, 0xE5E7, 0x6A04, - 0xE5E8, 0x6A18, 0xE5E9, 0x6A25, 0xE5EA, 0x6A0F, 0xE5EB, 0x69F6, - 0xE5EC, 0x6A26, 0xE5ED, 0x6A07, 0xE5EE, 0x69F4, 0xE5EF, 0x6A16, - 0xE5F0, 0x6B51, 0xE5F1, 0x6BA5, 0xE5F2, 0x6BA3, 0xE5F3, 0x6BA2, - 0xE5F4, 0x6BA6, 0xE5F5, 0x6C01, 0xE5F6, 0x6C00, 0xE5F7, 0x6BFF, - 0xE5F8, 0x6C02, 0xE5F9, 0x6F41, 0xE5FA, 0x6F26, 0xE5FB, 0x6F7E, - 0xE5FC, 0x6F87, 0xE5FD, 0x6FC6, 0xE5FE, 0x6F92, 0xE640, 0x6F8D, - 0xE641, 0x6F89, 0xE642, 0x6F8C, 0xE643, 0x6F62, 0xE644, 0x6F4F, - 0xE645, 0x6F85, 0xE646, 0x6F5A, 0xE647, 0x6F96, 0xE648, 0x6F76, - 0xE649, 0x6F6C, 0xE64A, 0x6F82, 0xE64B, 0x6F55, 0xE64C, 0x6F72, - 0xE64D, 0x6F52, 0xE64E, 0x6F50, 0xE64F, 0x6F57, 0xE650, 0x6F94, - 0xE651, 0x6F93, 0xE652, 0x6F5D, 0xE653, 0x6F00, 0xE654, 0x6F61, - 0xE655, 0x6F6B, 0xE656, 0x6F7D, 0xE657, 0x6F67, 0xE658, 0x6F90, - 0xE659, 0x6F53, 0xE65A, 0x6F8B, 0xE65B, 0x6F69, 0xE65C, 0x6F7F, - 0xE65D, 0x6F95, 0xE65E, 0x6F63, 0xE65F, 0x6F77, 0xE660, 0x6F6A, - 0xE661, 0x6F7B, 0xE662, 0x71B2, 0xE663, 0x71AF, 0xE664, 0x719B, - 0xE665, 0x71B0, 0xE666, 0x71A0, 0xE667, 0x719A, 0xE668, 0x71A9, - 0xE669, 0x71B5, 0xE66A, 0x719D, 0xE66B, 0x71A5, 0xE66C, 0x719E, - 0xE66D, 0x71A4, 0xE66E, 0x71A1, 0xE66F, 0x71AA, 0xE670, 0x719C, - 0xE671, 0x71A7, 0xE672, 0x71B3, 0xE673, 0x7298, 0xE674, 0x729A, - 0xE675, 0x7358, 0xE676, 0x7352, 0xE677, 0x735E, 0xE678, 0x735F, - 0xE679, 0x7360, 0xE67A, 0x735D, 0xE67B, 0x735B, 0xE67C, 0x7361, - 0xE67D, 0x735A, 0xE67E, 0x7359, 0xE6A1, 0x7362, 0xE6A2, 0x7487, - 0xE6A3, 0x7489, 0xE6A4, 0x748A, 0xE6A5, 0x7486, 0xE6A6, 0x7481, - 0xE6A7, 0x747D, 0xE6A8, 0x7485, 0xE6A9, 0x7488, 0xE6AA, 0x747C, - 0xE6AB, 0x7479, 0xE6AC, 0x7508, 0xE6AD, 0x7507, 0xE6AE, 0x757E, - 0xE6AF, 0x7625, 0xE6B0, 0x761E, 0xE6B1, 0x7619, 0xE6B2, 0x761D, - 0xE6B3, 0x761C, 0xE6B4, 0x7623, 0xE6B5, 0x761A, 0xE6B6, 0x7628, - 0xE6B7, 0x761B, 0xE6B8, 0x769C, 0xE6B9, 0x769D, 0xE6BA, 0x769E, - 0xE6BB, 0x769B, 0xE6BC, 0x778D, 0xE6BD, 0x778F, 0xE6BE, 0x7789, - 0xE6BF, 0x7788, 0xE6C0, 0x78CD, 0xE6C1, 0x78BB, 0xE6C2, 0x78CF, - 0xE6C3, 0x78CC, 0xE6C4, 0x78D1, 0xE6C5, 0x78CE, 0xE6C6, 0x78D4, - 0xE6C7, 0x78C8, 0xE6C8, 0x78C3, 0xE6C9, 0x78C4, 0xE6CA, 0x78C9, - 0xE6CB, 0x799A, 0xE6CC, 0x79A1, 0xE6CD, 0x79A0, 0xE6CE, 0x799C, - 0xE6CF, 0x79A2, 0xE6D0, 0x799B, 0xE6D1, 0x6B76, 0xE6D2, 0x7A39, - 0xE6D3, 0x7AB2, 0xE6D4, 0x7AB4, 0xE6D5, 0x7AB3, 0xE6D6, 0x7BB7, - 0xE6D7, 0x7BCB, 0xE6D8, 0x7BBE, 0xE6D9, 0x7BAC, 0xE6DA, 0x7BCE, - 0xE6DB, 0x7BAF, 0xE6DC, 0x7BB9, 0xE6DD, 0x7BCA, 0xE6DE, 0x7BB5, - 0xE6DF, 0x7CC5, 0xE6E0, 0x7CC8, 0xE6E1, 0x7CCC, 0xE6E2, 0x7CCB, - 0xE6E3, 0x7DF7, 0xE6E4, 0x7DDB, 0xE6E5, 0x7DEA, 0xE6E6, 0x7DE7, - 0xE6E7, 0x7DD7, 0xE6E8, 0x7DE1, 0xE6E9, 0x7E03, 0xE6EA, 0x7DFA, - 0xE6EB, 0x7DE6, 0xE6EC, 0x7DF6, 0xE6ED, 0x7DF1, 0xE6EE, 0x7DF0, - 0xE6EF, 0x7DEE, 0xE6F0, 0x7DDF, 0xE6F1, 0x7F76, 0xE6F2, 0x7FAC, - 0xE6F3, 0x7FB0, 0xE6F4, 0x7FAD, 0xE6F5, 0x7FED, 0xE6F6, 0x7FEB, - 0xE6F7, 0x7FEA, 0xE6F8, 0x7FEC, 0xE6F9, 0x7FE6, 0xE6FA, 0x7FE8, - 0xE6FB, 0x8064, 0xE6FC, 0x8067, 0xE6FD, 0x81A3, 0xE6FE, 0x819F, - 0xE740, 0x819E, 0xE741, 0x8195, 0xE742, 0x81A2, 0xE743, 0x8199, - 0xE744, 0x8197, 0xE745, 0x8216, 0xE746, 0x824F, 0xE747, 0x8253, - 0xE748, 0x8252, 0xE749, 0x8250, 0xE74A, 0x824E, 0xE74B, 0x8251, - 0xE74C, 0x8524, 0xE74D, 0x853B, 0xE74E, 0x850F, 0xE74F, 0x8500, - 0xE750, 0x8529, 0xE751, 0x850E, 0xE752, 0x8509, 0xE753, 0x850D, - 0xE754, 0x851F, 0xE755, 0x850A, 0xE756, 0x8527, 0xE757, 0x851C, - 0xE758, 0x84FB, 0xE759, 0x852B, 0xE75A, 0x84FA, 0xE75B, 0x8508, - 0xE75C, 0x850C, 0xE75D, 0x84F4, 0xE75E, 0x852A, 0xE75F, 0x84F2, - 0xE760, 0x8515, 0xE761, 0x84F7, 0xE762, 0x84EB, 0xE763, 0x84F3, - 0xE764, 0x84FC, 0xE765, 0x8512, 0xE766, 0x84EA, 0xE767, 0x84E9, - 0xE768, 0x8516, 0xE769, 0x84FE, 0xE76A, 0x8528, 0xE76B, 0x851D, - 0xE76C, 0x852E, 0xE76D, 0x8502, 0xE76E, 0x84FD, 0xE76F, 0x851E, - 0xE770, 0x84F6, 0xE771, 0x8531, 0xE772, 0x8526, 0xE773, 0x84E7, - 0xE774, 0x84E8, 0xE775, 0x84F0, 0xE776, 0x84EF, 0xE777, 0x84F9, - 0xE778, 0x8518, 0xE779, 0x8520, 0xE77A, 0x8530, 0xE77B, 0x850B, - 0xE77C, 0x8519, 0xE77D, 0x852F, 0xE77E, 0x8662, 0xE7A1, 0x8756, - 0xE7A2, 0x8763, 0xE7A3, 0x8764, 0xE7A4, 0x8777, 0xE7A5, 0x87E1, - 0xE7A6, 0x8773, 0xE7A7, 0x8758, 0xE7A8, 0x8754, 0xE7A9, 0x875B, - 0xE7AA, 0x8752, 0xE7AB, 0x8761, 0xE7AC, 0x875A, 0xE7AD, 0x8751, - 0xE7AE, 0x875E, 0xE7AF, 0x876D, 0xE7B0, 0x876A, 0xE7B1, 0x8750, - 0xE7B2, 0x874E, 0xE7B3, 0x875F, 0xE7B4, 0x875D, 0xE7B5, 0x876F, - 0xE7B6, 0x876C, 0xE7B7, 0x877A, 0xE7B8, 0x876E, 0xE7B9, 0x875C, - 0xE7BA, 0x8765, 0xE7BB, 0x874F, 0xE7BC, 0x877B, 0xE7BD, 0x8775, - 0xE7BE, 0x8762, 0xE7BF, 0x8767, 0xE7C0, 0x8769, 0xE7C1, 0x885A, - 0xE7C2, 0x8905, 0xE7C3, 0x890C, 0xE7C4, 0x8914, 0xE7C5, 0x890B, - 0xE7C6, 0x8917, 0xE7C7, 0x8918, 0xE7C8, 0x8919, 0xE7C9, 0x8906, - 0xE7CA, 0x8916, 0xE7CB, 0x8911, 0xE7CC, 0x890E, 0xE7CD, 0x8909, - 0xE7CE, 0x89A2, 0xE7CF, 0x89A4, 0xE7D0, 0x89A3, 0xE7D1, 0x89ED, - 0xE7D2, 0x89F0, 0xE7D3, 0x89EC, 0xE7D4, 0x8ACF, 0xE7D5, 0x8AC6, - 0xE7D6, 0x8AB8, 0xE7D7, 0x8AD3, 0xE7D8, 0x8AD1, 0xE7D9, 0x8AD4, - 0xE7DA, 0x8AD5, 0xE7DB, 0x8ABB, 0xE7DC, 0x8AD7, 0xE7DD, 0x8ABE, - 0xE7DE, 0x8AC0, 0xE7DF, 0x8AC5, 0xE7E0, 0x8AD8, 0xE7E1, 0x8AC3, - 0xE7E2, 0x8ABA, 0xE7E3, 0x8ABD, 0xE7E4, 0x8AD9, 0xE7E5, 0x8C3E, - 0xE7E6, 0x8C4D, 0xE7E7, 0x8C8F, 0xE7E8, 0x8CE5, 0xE7E9, 0x8CDF, - 0xE7EA, 0x8CD9, 0xE7EB, 0x8CE8, 0xE7EC, 0x8CDA, 0xE7ED, 0x8CDD, - 0xE7EE, 0x8CE7, 0xE7EF, 0x8DA0, 0xE7F0, 0x8D9C, 0xE7F1, 0x8DA1, - 0xE7F2, 0x8D9B, 0xE7F3, 0x8E20, 0xE7F4, 0x8E23, 0xE7F5, 0x8E25, - 0xE7F6, 0x8E24, 0xE7F7, 0x8E2E, 0xE7F8, 0x8E15, 0xE7F9, 0x8E1B, - 0xE7FA, 0x8E16, 0xE7FB, 0x8E11, 0xE7FC, 0x8E19, 0xE7FD, 0x8E26, - 0xE7FE, 0x8E27, 0xE840, 0x8E14, 0xE841, 0x8E12, 0xE842, 0x8E18, - 0xE843, 0x8E13, 0xE844, 0x8E1C, 0xE845, 0x8E17, 0xE846, 0x8E1A, - 0xE847, 0x8F2C, 0xE848, 0x8F24, 0xE849, 0x8F18, 0xE84A, 0x8F1A, - 0xE84B, 0x8F20, 0xE84C, 0x8F23, 0xE84D, 0x8F16, 0xE84E, 0x8F17, - 0xE84F, 0x9073, 0xE850, 0x9070, 0xE851, 0x906F, 0xE852, 0x9067, - 0xE853, 0x906B, 0xE854, 0x912F, 0xE855, 0x912B, 0xE856, 0x9129, - 0xE857, 0x912A, 0xE858, 0x9132, 0xE859, 0x9126, 0xE85A, 0x912E, - 0xE85B, 0x9185, 0xE85C, 0x9186, 0xE85D, 0x918A, 0xE85E, 0x9181, - 0xE85F, 0x9182, 0xE860, 0x9184, 0xE861, 0x9180, 0xE862, 0x92D0, - 0xE863, 0x92C3, 0xE864, 0x92C4, 0xE865, 0x92C0, 0xE866, 0x92D9, - 0xE867, 0x92B6, 0xE868, 0x92CF, 0xE869, 0x92F1, 0xE86A, 0x92DF, - 0xE86B, 0x92D8, 0xE86C, 0x92E9, 0xE86D, 0x92D7, 0xE86E, 0x92DD, - 0xE86F, 0x92CC, 0xE870, 0x92EF, 0xE871, 0x92C2, 0xE872, 0x92E8, - 0xE873, 0x92CA, 0xE874, 0x92C8, 0xE875, 0x92CE, 0xE876, 0x92E6, - 0xE877, 0x92CD, 0xE878, 0x92D5, 0xE879, 0x92C9, 0xE87A, 0x92E0, - 0xE87B, 0x92DE, 0xE87C, 0x92E7, 0xE87D, 0x92D1, 0xE87E, 0x92D3, - 0xE8A1, 0x92B5, 0xE8A2, 0x92E1, 0xE8A3, 0x92C6, 0xE8A4, 0x92B4, - 0xE8A5, 0x957C, 0xE8A6, 0x95AC, 0xE8A7, 0x95AB, 0xE8A8, 0x95AE, - 0xE8A9, 0x95B0, 0xE8AA, 0x96A4, 0xE8AB, 0x96A2, 0xE8AC, 0x96D3, - 0xE8AD, 0x9705, 0xE8AE, 0x9708, 0xE8AF, 0x9702, 0xE8B0, 0x975A, - 0xE8B1, 0x978A, 0xE8B2, 0x978E, 0xE8B3, 0x9788, 0xE8B4, 0x97D0, - 0xE8B5, 0x97CF, 0xE8B6, 0x981E, 0xE8B7, 0x981D, 0xE8B8, 0x9826, - 0xE8B9, 0x9829, 0xE8BA, 0x9828, 0xE8BB, 0x9820, 0xE8BC, 0x981B, - 0xE8BD, 0x9827, 0xE8BE, 0x98B2, 0xE8BF, 0x9908, 0xE8C0, 0x98FA, - 0xE8C1, 0x9911, 0xE8C2, 0x9914, 0xE8C3, 0x9916, 0xE8C4, 0x9917, - 0xE8C5, 0x9915, 0xE8C6, 0x99DC, 0xE8C7, 0x99CD, 0xE8C8, 0x99CF, - 0xE8C9, 0x99D3, 0xE8CA, 0x99D4, 0xE8CB, 0x99CE, 0xE8CC, 0x99C9, - 0xE8CD, 0x99D6, 0xE8CE, 0x99D8, 0xE8CF, 0x99CB, 0xE8D0, 0x99D7, - 0xE8D1, 0x99CC, 0xE8D2, 0x9AB3, 0xE8D3, 0x9AEC, 0xE8D4, 0x9AEB, - 0xE8D5, 0x9AF3, 0xE8D6, 0x9AF2, 0xE8D7, 0x9AF1, 0xE8D8, 0x9B46, - 0xE8D9, 0x9B43, 0xE8DA, 0x9B67, 0xE8DB, 0x9B74, 0xE8DC, 0x9B71, - 0xE8DD, 0x9B66, 0xE8DE, 0x9B76, 0xE8DF, 0x9B75, 0xE8E0, 0x9B70, - 0xE8E1, 0x9B68, 0xE8E2, 0x9B64, 0xE8E3, 0x9B6C, 0xE8E4, 0x9CFC, - 0xE8E5, 0x9CFA, 0xE8E6, 0x9CFD, 0xE8E7, 0x9CFF, 0xE8E8, 0x9CF7, - 0xE8E9, 0x9D07, 0xE8EA, 0x9D00, 0xE8EB, 0x9CF9, 0xE8EC, 0x9CFB, - 0xE8ED, 0x9D08, 0xE8EE, 0x9D05, 0xE8EF, 0x9D04, 0xE8F0, 0x9E83, - 0xE8F1, 0x9ED3, 0xE8F2, 0x9F0F, 0xE8F3, 0x9F10, 0xE8F4, 0x511C, - 0xE8F5, 0x5113, 0xE8F6, 0x5117, 0xE8F7, 0x511A, 0xE8F8, 0x5111, - 0xE8F9, 0x51DE, 0xE8FA, 0x5334, 0xE8FB, 0x53E1, 0xE8FC, 0x5670, - 0xE8FD, 0x5660, 0xE8FE, 0x566E, 0xE940, 0x5673, 0xE941, 0x5666, - 0xE942, 0x5663, 0xE943, 0x566D, 0xE944, 0x5672, 0xE945, 0x565E, - 0xE946, 0x5677, 0xE947, 0x571C, 0xE948, 0x571B, 0xE949, 0x58C8, - 0xE94A, 0x58BD, 0xE94B, 0x58C9, 0xE94C, 0x58BF, 0xE94D, 0x58BA, - 0xE94E, 0x58C2, 0xE94F, 0x58BC, 0xE950, 0x58C6, 0xE951, 0x5B17, - 0xE952, 0x5B19, 0xE953, 0x5B1B, 0xE954, 0x5B21, 0xE955, 0x5B14, - 0xE956, 0x5B13, 0xE957, 0x5B10, 0xE958, 0x5B16, 0xE959, 0x5B28, - 0xE95A, 0x5B1A, 0xE95B, 0x5B20, 0xE95C, 0x5B1E, 0xE95D, 0x5BEF, - 0xE95E, 0x5DAC, 0xE95F, 0x5DB1, 0xE960, 0x5DA9, 0xE961, 0x5DA7, - 0xE962, 0x5DB5, 0xE963, 0x5DB0, 0xE964, 0x5DAE, 0xE965, 0x5DAA, - 0xE966, 0x5DA8, 0xE967, 0x5DB2, 0xE968, 0x5DAD, 0xE969, 0x5DAF, - 0xE96A, 0x5DB4, 0xE96B, 0x5E67, 0xE96C, 0x5E68, 0xE96D, 0x5E66, - 0xE96E, 0x5E6F, 0xE96F, 0x5EE9, 0xE970, 0x5EE7, 0xE971, 0x5EE6, - 0xE972, 0x5EE8, 0xE973, 0x5EE5, 0xE974, 0x5F4B, 0xE975, 0x5FBC, - 0xE976, 0x619D, 0xE977, 0x61A8, 0xE978, 0x6196, 0xE979, 0x61C5, - 0xE97A, 0x61B4, 0xE97B, 0x61C6, 0xE97C, 0x61C1, 0xE97D, 0x61CC, - 0xE97E, 0x61BA, 0xE9A1, 0x61BF, 0xE9A2, 0x61B8, 0xE9A3, 0x618C, - 0xE9A4, 0x64D7, 0xE9A5, 0x64D6, 0xE9A6, 0x64D0, 0xE9A7, 0x64CF, - 0xE9A8, 0x64C9, 0xE9A9, 0x64BD, 0xE9AA, 0x6489, 0xE9AB, 0x64C3, - 0xE9AC, 0x64DB, 0xE9AD, 0x64F3, 0xE9AE, 0x64D9, 0xE9AF, 0x6533, - 0xE9B0, 0x657F, 0xE9B1, 0x657C, 0xE9B2, 0x65A2, 0xE9B3, 0x66C8, - 0xE9B4, 0x66BE, 0xE9B5, 0x66C0, 0xE9B6, 0x66CA, 0xE9B7, 0x66CB, - 0xE9B8, 0x66CF, 0xE9B9, 0x66BD, 0xE9BA, 0x66BB, 0xE9BB, 0x66BA, - 0xE9BC, 0x66CC, 0xE9BD, 0x6723, 0xE9BE, 0x6A34, 0xE9BF, 0x6A66, - 0xE9C0, 0x6A49, 0xE9C1, 0x6A67, 0xE9C2, 0x6A32, 0xE9C3, 0x6A68, - 0xE9C4, 0x6A3E, 0xE9C5, 0x6A5D, 0xE9C6, 0x6A6D, 0xE9C7, 0x6A76, - 0xE9C8, 0x6A5B, 0xE9C9, 0x6A51, 0xE9CA, 0x6A28, 0xE9CB, 0x6A5A, - 0xE9CC, 0x6A3B, 0xE9CD, 0x6A3F, 0xE9CE, 0x6A41, 0xE9CF, 0x6A6A, - 0xE9D0, 0x6A64, 0xE9D1, 0x6A50, 0xE9D2, 0x6A4F, 0xE9D3, 0x6A54, - 0xE9D4, 0x6A6F, 0xE9D5, 0x6A69, 0xE9D6, 0x6A60, 0xE9D7, 0x6A3C, - 0xE9D8, 0x6A5E, 0xE9D9, 0x6A56, 0xE9DA, 0x6A55, 0xE9DB, 0x6A4D, - 0xE9DC, 0x6A4E, 0xE9DD, 0x6A46, 0xE9DE, 0x6B55, 0xE9DF, 0x6B54, - 0xE9E0, 0x6B56, 0xE9E1, 0x6BA7, 0xE9E2, 0x6BAA, 0xE9E3, 0x6BAB, - 0xE9E4, 0x6BC8, 0xE9E5, 0x6BC7, 0xE9E6, 0x6C04, 0xE9E7, 0x6C03, - 0xE9E8, 0x6C06, 0xE9E9, 0x6FAD, 0xE9EA, 0x6FCB, 0xE9EB, 0x6FA3, - 0xE9EC, 0x6FC7, 0xE9ED, 0x6FBC, 0xE9EE, 0x6FCE, 0xE9EF, 0x6FC8, - 0xE9F0, 0x6F5E, 0xE9F1, 0x6FC4, 0xE9F2, 0x6FBD, 0xE9F3, 0x6F9E, - 0xE9F4, 0x6FCA, 0xE9F5, 0x6FA8, 0xE9F6, 0x7004, 0xE9F7, 0x6FA5, - 0xE9F8, 0x6FAE, 0xE9F9, 0x6FBA, 0xE9FA, 0x6FAC, 0xE9FB, 0x6FAA, - 0xE9FC, 0x6FCF, 0xE9FD, 0x6FBF, 0xE9FE, 0x6FB8, 0xEA40, 0x6FA2, - 0xEA41, 0x6FC9, 0xEA42, 0x6FAB, 0xEA43, 0x6FCD, 0xEA44, 0x6FAF, - 0xEA45, 0x6FB2, 0xEA46, 0x6FB0, 0xEA47, 0x71C5, 0xEA48, 0x71C2, - 0xEA49, 0x71BF, 0xEA4A, 0x71B8, 0xEA4B, 0x71D6, 0xEA4C, 0x71C0, - 0xEA4D, 0x71C1, 0xEA4E, 0x71CB, 0xEA4F, 0x71D4, 0xEA50, 0x71CA, - 0xEA51, 0x71C7, 0xEA52, 0x71CF, 0xEA53, 0x71BD, 0xEA54, 0x71D8, - 0xEA55, 0x71BC, 0xEA56, 0x71C6, 0xEA57, 0x71DA, 0xEA58, 0x71DB, - 0xEA59, 0x729D, 0xEA5A, 0x729E, 0xEA5B, 0x7369, 0xEA5C, 0x7366, - 0xEA5D, 0x7367, 0xEA5E, 0x736C, 0xEA5F, 0x7365, 0xEA60, 0x736B, - 0xEA61, 0x736A, 0xEA62, 0x747F, 0xEA63, 0x749A, 0xEA64, 0x74A0, - 0xEA65, 0x7494, 0xEA66, 0x7492, 0xEA67, 0x7495, 0xEA68, 0x74A1, - 0xEA69, 0x750B, 0xEA6A, 0x7580, 0xEA6B, 0x762F, 0xEA6C, 0x762D, - 0xEA6D, 0x7631, 0xEA6E, 0x763D, 0xEA6F, 0x7633, 0xEA70, 0x763C, - 0xEA71, 0x7635, 0xEA72, 0x7632, 0xEA73, 0x7630, 0xEA74, 0x76BB, - 0xEA75, 0x76E6, 0xEA76, 0x779A, 0xEA77, 0x779D, 0xEA78, 0x77A1, - 0xEA79, 0x779C, 0xEA7A, 0x779B, 0xEA7B, 0x77A2, 0xEA7C, 0x77A3, - 0xEA7D, 0x7795, 0xEA7E, 0x7799, 0xEAA1, 0x7797, 0xEAA2, 0x78DD, - 0xEAA3, 0x78E9, 0xEAA4, 0x78E5, 0xEAA5, 0x78EA, 0xEAA6, 0x78DE, - 0xEAA7, 0x78E3, 0xEAA8, 0x78DB, 0xEAA9, 0x78E1, 0xEAAA, 0x78E2, - 0xEAAB, 0x78ED, 0xEAAC, 0x78DF, 0xEAAD, 0x78E0, 0xEAAE, 0x79A4, - 0xEAAF, 0x7A44, 0xEAB0, 0x7A48, 0xEAB1, 0x7A47, 0xEAB2, 0x7AB6, - 0xEAB3, 0x7AB8, 0xEAB4, 0x7AB5, 0xEAB5, 0x7AB1, 0xEAB6, 0x7AB7, - 0xEAB7, 0x7BDE, 0xEAB8, 0x7BE3, 0xEAB9, 0x7BE7, 0xEABA, 0x7BDD, - 0xEABB, 0x7BD5, 0xEABC, 0x7BE5, 0xEABD, 0x7BDA, 0xEABE, 0x7BE8, - 0xEABF, 0x7BF9, 0xEAC0, 0x7BD4, 0xEAC1, 0x7BEA, 0xEAC2, 0x7BE2, - 0xEAC3, 0x7BDC, 0xEAC4, 0x7BEB, 0xEAC5, 0x7BD8, 0xEAC6, 0x7BDF, - 0xEAC7, 0x7CD2, 0xEAC8, 0x7CD4, 0xEAC9, 0x7CD7, 0xEACA, 0x7CD0, - 0xEACB, 0x7CD1, 0xEACC, 0x7E12, 0xEACD, 0x7E21, 0xEACE, 0x7E17, - 0xEACF, 0x7E0C, 0xEAD0, 0x7E1F, 0xEAD1, 0x7E20, 0xEAD2, 0x7E13, - 0xEAD3, 0x7E0E, 0xEAD4, 0x7E1C, 0xEAD5, 0x7E15, 0xEAD6, 0x7E1A, - 0xEAD7, 0x7E22, 0xEAD8, 0x7E0B, 0xEAD9, 0x7E0F, 0xEADA, 0x7E16, - 0xEADB, 0x7E0D, 0xEADC, 0x7E14, 0xEADD, 0x7E25, 0xEADE, 0x7E24, - 0xEADF, 0x7F43, 0xEAE0, 0x7F7B, 0xEAE1, 0x7F7C, 0xEAE2, 0x7F7A, - 0xEAE3, 0x7FB1, 0xEAE4, 0x7FEF, 0xEAE5, 0x802A, 0xEAE6, 0x8029, - 0xEAE7, 0x806C, 0xEAE8, 0x81B1, 0xEAE9, 0x81A6, 0xEAEA, 0x81AE, - 0xEAEB, 0x81B9, 0xEAEC, 0x81B5, 0xEAED, 0x81AB, 0xEAEE, 0x81B0, - 0xEAEF, 0x81AC, 0xEAF0, 0x81B4, 0xEAF1, 0x81B2, 0xEAF2, 0x81B7, - 0xEAF3, 0x81A7, 0xEAF4, 0x81F2, 0xEAF5, 0x8255, 0xEAF6, 0x8256, - 0xEAF7, 0x8257, 0xEAF8, 0x8556, 0xEAF9, 0x8545, 0xEAFA, 0x856B, - 0xEAFB, 0x854D, 0xEAFC, 0x8553, 0xEAFD, 0x8561, 0xEAFE, 0x8558, - 0xEB40, 0x8540, 0xEB41, 0x8546, 0xEB42, 0x8564, 0xEB43, 0x8541, - 0xEB44, 0x8562, 0xEB45, 0x8544, 0xEB46, 0x8551, 0xEB47, 0x8547, - 0xEB48, 0x8563, 0xEB49, 0x853E, 0xEB4A, 0x855B, 0xEB4B, 0x8571, - 0xEB4C, 0x854E, 0xEB4D, 0x856E, 0xEB4E, 0x8575, 0xEB4F, 0x8555, - 0xEB50, 0x8567, 0xEB51, 0x8560, 0xEB52, 0x858C, 0xEB53, 0x8566, - 0xEB54, 0x855D, 0xEB55, 0x8554, 0xEB56, 0x8565, 0xEB57, 0x856C, - 0xEB58, 0x8663, 0xEB59, 0x8665, 0xEB5A, 0x8664, 0xEB5B, 0x879B, - 0xEB5C, 0x878F, 0xEB5D, 0x8797, 0xEB5E, 0x8793, 0xEB5F, 0x8792, - 0xEB60, 0x8788, 0xEB61, 0x8781, 0xEB62, 0x8796, 0xEB63, 0x8798, - 0xEB64, 0x8779, 0xEB65, 0x8787, 0xEB66, 0x87A3, 0xEB67, 0x8785, - 0xEB68, 0x8790, 0xEB69, 0x8791, 0xEB6A, 0x879D, 0xEB6B, 0x8784, - 0xEB6C, 0x8794, 0xEB6D, 0x879C, 0xEB6E, 0x879A, 0xEB6F, 0x8789, - 0xEB70, 0x891E, 0xEB71, 0x8926, 0xEB72, 0x8930, 0xEB73, 0x892D, - 0xEB74, 0x892E, 0xEB75, 0x8927, 0xEB76, 0x8931, 0xEB77, 0x8922, - 0xEB78, 0x8929, 0xEB79, 0x8923, 0xEB7A, 0x892F, 0xEB7B, 0x892C, - 0xEB7C, 0x891F, 0xEB7D, 0x89F1, 0xEB7E, 0x8AE0, 0xEBA1, 0x8AE2, - 0xEBA2, 0x8AF2, 0xEBA3, 0x8AF4, 0xEBA4, 0x8AF5, 0xEBA5, 0x8ADD, - 0xEBA6, 0x8B14, 0xEBA7, 0x8AE4, 0xEBA8, 0x8ADF, 0xEBA9, 0x8AF0, - 0xEBAA, 0x8AC8, 0xEBAB, 0x8ADE, 0xEBAC, 0x8AE1, 0xEBAD, 0x8AE8, - 0xEBAE, 0x8AFF, 0xEBAF, 0x8AEF, 0xEBB0, 0x8AFB, 0xEBB1, 0x8C91, - 0xEBB2, 0x8C92, 0xEBB3, 0x8C90, 0xEBB4, 0x8CF5, 0xEBB5, 0x8CEE, - 0xEBB6, 0x8CF1, 0xEBB7, 0x8CF0, 0xEBB8, 0x8CF3, 0xEBB9, 0x8D6C, - 0xEBBA, 0x8D6E, 0xEBBB, 0x8DA5, 0xEBBC, 0x8DA7, 0xEBBD, 0x8E33, - 0xEBBE, 0x8E3E, 0xEBBF, 0x8E38, 0xEBC0, 0x8E40, 0xEBC1, 0x8E45, - 0xEBC2, 0x8E36, 0xEBC3, 0x8E3C, 0xEBC4, 0x8E3D, 0xEBC5, 0x8E41, - 0xEBC6, 0x8E30, 0xEBC7, 0x8E3F, 0xEBC8, 0x8EBD, 0xEBC9, 0x8F36, - 0xEBCA, 0x8F2E, 0xEBCB, 0x8F35, 0xEBCC, 0x8F32, 0xEBCD, 0x8F39, - 0xEBCE, 0x8F37, 0xEBCF, 0x8F34, 0xEBD0, 0x9076, 0xEBD1, 0x9079, - 0xEBD2, 0x907B, 0xEBD3, 0x9086, 0xEBD4, 0x90FA, 0xEBD5, 0x9133, - 0xEBD6, 0x9135, 0xEBD7, 0x9136, 0xEBD8, 0x9193, 0xEBD9, 0x9190, - 0xEBDA, 0x9191, 0xEBDB, 0x918D, 0xEBDC, 0x918F, 0xEBDD, 0x9327, - 0xEBDE, 0x931E, 0xEBDF, 0x9308, 0xEBE0, 0x931F, 0xEBE1, 0x9306, - 0xEBE2, 0x930F, 0xEBE3, 0x937A, 0xEBE4, 0x9338, 0xEBE5, 0x933C, - 0xEBE6, 0x931B, 0xEBE7, 0x9323, 0xEBE8, 0x9312, 0xEBE9, 0x9301, - 0xEBEA, 0x9346, 0xEBEB, 0x932D, 0xEBEC, 0x930E, 0xEBED, 0x930D, - 0xEBEE, 0x92CB, 0xEBEF, 0x931D, 0xEBF0, 0x92FA, 0xEBF1, 0x9325, - 0xEBF2, 0x9313, 0xEBF3, 0x92F9, 0xEBF4, 0x92F7, 0xEBF5, 0x9334, - 0xEBF6, 0x9302, 0xEBF7, 0x9324, 0xEBF8, 0x92FF, 0xEBF9, 0x9329, - 0xEBFA, 0x9339, 0xEBFB, 0x9335, 0xEBFC, 0x932A, 0xEBFD, 0x9314, - 0xEBFE, 0x930C, 0xEC40, 0x930B, 0xEC41, 0x92FE, 0xEC42, 0x9309, - 0xEC43, 0x9300, 0xEC44, 0x92FB, 0xEC45, 0x9316, 0xEC46, 0x95BC, - 0xEC47, 0x95CD, 0xEC48, 0x95BE, 0xEC49, 0x95B9, 0xEC4A, 0x95BA, - 0xEC4B, 0x95B6, 0xEC4C, 0x95BF, 0xEC4D, 0x95B5, 0xEC4E, 0x95BD, - 0xEC4F, 0x96A9, 0xEC50, 0x96D4, 0xEC51, 0x970B, 0xEC52, 0x9712, - 0xEC53, 0x9710, 0xEC54, 0x9799, 0xEC55, 0x9797, 0xEC56, 0x9794, - 0xEC57, 0x97F0, 0xEC58, 0x97F8, 0xEC59, 0x9835, 0xEC5A, 0x982F, - 0xEC5B, 0x9832, 0xEC5C, 0x9924, 0xEC5D, 0x991F, 0xEC5E, 0x9927, - 0xEC5F, 0x9929, 0xEC60, 0x999E, 0xEC61, 0x99EE, 0xEC62, 0x99EC, - 0xEC63, 0x99E5, 0xEC64, 0x99E4, 0xEC65, 0x99F0, 0xEC66, 0x99E3, - 0xEC67, 0x99EA, 0xEC68, 0x99E9, 0xEC69, 0x99E7, 0xEC6A, 0x9AB9, - 0xEC6B, 0x9ABF, 0xEC6C, 0x9AB4, 0xEC6D, 0x9ABB, 0xEC6E, 0x9AF6, - 0xEC6F, 0x9AFA, 0xEC70, 0x9AF9, 0xEC71, 0x9AF7, 0xEC72, 0x9B33, - 0xEC73, 0x9B80, 0xEC74, 0x9B85, 0xEC75, 0x9B87, 0xEC76, 0x9B7C, - 0xEC77, 0x9B7E, 0xEC78, 0x9B7B, 0xEC79, 0x9B82, 0xEC7A, 0x9B93, - 0xEC7B, 0x9B92, 0xEC7C, 0x9B90, 0xEC7D, 0x9B7A, 0xEC7E, 0x9B95, - 0xECA1, 0x9B7D, 0xECA2, 0x9B88, 0xECA3, 0x9D25, 0xECA4, 0x9D17, - 0xECA5, 0x9D20, 0xECA6, 0x9D1E, 0xECA7, 0x9D14, 0xECA8, 0x9D29, - 0xECA9, 0x9D1D, 0xECAA, 0x9D18, 0xECAB, 0x9D22, 0xECAC, 0x9D10, - 0xECAD, 0x9D19, 0xECAE, 0x9D1F, 0xECAF, 0x9E88, 0xECB0, 0x9E86, - 0xECB1, 0x9E87, 0xECB2, 0x9EAE, 0xECB3, 0x9EAD, 0xECB4, 0x9ED5, - 0xECB5, 0x9ED6, 0xECB6, 0x9EFA, 0xECB7, 0x9F12, 0xECB8, 0x9F3D, - 0xECB9, 0x5126, 0xECBA, 0x5125, 0xECBB, 0x5122, 0xECBC, 0x5124, - 0xECBD, 0x5120, 0xECBE, 0x5129, 0xECBF, 0x52F4, 0xECC0, 0x5693, - 0xECC1, 0x568C, 0xECC2, 0x568D, 0xECC3, 0x5686, 0xECC4, 0x5684, - 0xECC5, 0x5683, 0xECC6, 0x567E, 0xECC7, 0x5682, 0xECC8, 0x567F, - 0xECC9, 0x5681, 0xECCA, 0x58D6, 0xECCB, 0x58D4, 0xECCC, 0x58CF, - 0xECCD, 0x58D2, 0xECCE, 0x5B2D, 0xECCF, 0x5B25, 0xECD0, 0x5B32, - 0xECD1, 0x5B23, 0xECD2, 0x5B2C, 0xECD3, 0x5B27, 0xECD4, 0x5B26, - 0xECD5, 0x5B2F, 0xECD6, 0x5B2E, 0xECD7, 0x5B7B, 0xECD8, 0x5BF1, - 0xECD9, 0x5BF2, 0xECDA, 0x5DB7, 0xECDB, 0x5E6C, 0xECDC, 0x5E6A, - 0xECDD, 0x5FBE, 0xECDE, 0x5FBB, 0xECDF, 0x61C3, 0xECE0, 0x61B5, - 0xECE1, 0x61BC, 0xECE2, 0x61E7, 0xECE3, 0x61E0, 0xECE4, 0x61E5, - 0xECE5, 0x61E4, 0xECE6, 0x61E8, 0xECE7, 0x61DE, 0xECE8, 0x64EF, - 0xECE9, 0x64E9, 0xECEA, 0x64E3, 0xECEB, 0x64EB, 0xECEC, 0x64E4, - 0xECED, 0x64E8, 0xECEE, 0x6581, 0xECEF, 0x6580, 0xECF0, 0x65B6, - 0xECF1, 0x65DA, 0xECF2, 0x66D2, 0xECF3, 0x6A8D, 0xECF4, 0x6A96, - 0xECF5, 0x6A81, 0xECF6, 0x6AA5, 0xECF7, 0x6A89, 0xECF8, 0x6A9F, - 0xECF9, 0x6A9B, 0xECFA, 0x6AA1, 0xECFB, 0x6A9E, 0xECFC, 0x6A87, - 0xECFD, 0x6A93, 0xECFE, 0x6A8E, 0xED40, 0x6A95, 0xED41, 0x6A83, - 0xED42, 0x6AA8, 0xED43, 0x6AA4, 0xED44, 0x6A91, 0xED45, 0x6A7F, - 0xED46, 0x6AA6, 0xED47, 0x6A9A, 0xED48, 0x6A85, 0xED49, 0x6A8C, - 0xED4A, 0x6A92, 0xED4B, 0x6B5B, 0xED4C, 0x6BAD, 0xED4D, 0x6C09, - 0xED4E, 0x6FCC, 0xED4F, 0x6FA9, 0xED50, 0x6FF4, 0xED51, 0x6FD4, - 0xED52, 0x6FE3, 0xED53, 0x6FDC, 0xED54, 0x6FED, 0xED55, 0x6FE7, - 0xED56, 0x6FE6, 0xED57, 0x6FDE, 0xED58, 0x6FF2, 0xED59, 0x6FDD, - 0xED5A, 0x6FE2, 0xED5B, 0x6FE8, 0xED5C, 0x71E1, 0xED5D, 0x71F1, - 0xED5E, 0x71E8, 0xED5F, 0x71F2, 0xED60, 0x71E4, 0xED61, 0x71F0, - 0xED62, 0x71E2, 0xED63, 0x7373, 0xED64, 0x736E, 0xED65, 0x736F, - 0xED66, 0x7497, 0xED67, 0x74B2, 0xED68, 0x74AB, 0xED69, 0x7490, - 0xED6A, 0x74AA, 0xED6B, 0x74AD, 0xED6C, 0x74B1, 0xED6D, 0x74A5, - 0xED6E, 0x74AF, 0xED6F, 0x7510, 0xED70, 0x7511, 0xED71, 0x7512, - 0xED72, 0x750F, 0xED73, 0x7584, 0xED74, 0x7643, 0xED75, 0x7648, - 0xED76, 0x7649, 0xED77, 0x7647, 0xED78, 0x76A4, 0xED79, 0x76E9, - 0xED7A, 0x77B5, 0xED7B, 0x77AB, 0xED7C, 0x77B2, 0xED7D, 0x77B7, - 0xED7E, 0x77B6, 0xEDA1, 0x77B4, 0xEDA2, 0x77B1, 0xEDA3, 0x77A8, - 0xEDA4, 0x77F0, 0xEDA5, 0x78F3, 0xEDA6, 0x78FD, 0xEDA7, 0x7902, - 0xEDA8, 0x78FB, 0xEDA9, 0x78FC, 0xEDAA, 0x78F2, 0xEDAB, 0x7905, - 0xEDAC, 0x78F9, 0xEDAD, 0x78FE, 0xEDAE, 0x7904, 0xEDAF, 0x79AB, - 0xEDB0, 0x79A8, 0xEDB1, 0x7A5C, 0xEDB2, 0x7A5B, 0xEDB3, 0x7A56, - 0xEDB4, 0x7A58, 0xEDB5, 0x7A54, 0xEDB6, 0x7A5A, 0xEDB7, 0x7ABE, - 0xEDB8, 0x7AC0, 0xEDB9, 0x7AC1, 0xEDBA, 0x7C05, 0xEDBB, 0x7C0F, - 0xEDBC, 0x7BF2, 0xEDBD, 0x7C00, 0xEDBE, 0x7BFF, 0xEDBF, 0x7BFB, - 0xEDC0, 0x7C0E, 0xEDC1, 0x7BF4, 0xEDC2, 0x7C0B, 0xEDC3, 0x7BF3, - 0xEDC4, 0x7C02, 0xEDC5, 0x7C09, 0xEDC6, 0x7C03, 0xEDC7, 0x7C01, - 0xEDC8, 0x7BF8, 0xEDC9, 0x7BFD, 0xEDCA, 0x7C06, 0xEDCB, 0x7BF0, - 0xEDCC, 0x7BF1, 0xEDCD, 0x7C10, 0xEDCE, 0x7C0A, 0xEDCF, 0x7CE8, - 0xEDD0, 0x7E2D, 0xEDD1, 0x7E3C, 0xEDD2, 0x7E42, 0xEDD3, 0x7E33, - 0xEDD4, 0x9848, 0xEDD5, 0x7E38, 0xEDD6, 0x7E2A, 0xEDD7, 0x7E49, - 0xEDD8, 0x7E40, 0xEDD9, 0x7E47, 0xEDDA, 0x7E29, 0xEDDB, 0x7E4C, - 0xEDDC, 0x7E30, 0xEDDD, 0x7E3B, 0xEDDE, 0x7E36, 0xEDDF, 0x7E44, - 0xEDE0, 0x7E3A, 0xEDE1, 0x7F45, 0xEDE2, 0x7F7F, 0xEDE3, 0x7F7E, - 0xEDE4, 0x7F7D, 0xEDE5, 0x7FF4, 0xEDE6, 0x7FF2, 0xEDE7, 0x802C, - 0xEDE8, 0x81BB, 0xEDE9, 0x81C4, 0xEDEA, 0x81CC, 0xEDEB, 0x81CA, - 0xEDEC, 0x81C5, 0xEDED, 0x81C7, 0xEDEE, 0x81BC, 0xEDEF, 0x81E9, - 0xEDF0, 0x825B, 0xEDF1, 0x825A, 0xEDF2, 0x825C, 0xEDF3, 0x8583, - 0xEDF4, 0x8580, 0xEDF5, 0x858F, 0xEDF6, 0x85A7, 0xEDF7, 0x8595, - 0xEDF8, 0x85A0, 0xEDF9, 0x858B, 0xEDFA, 0x85A3, 0xEDFB, 0x857B, - 0xEDFC, 0x85A4, 0xEDFD, 0x859A, 0xEDFE, 0x859E, 0xEE40, 0x8577, - 0xEE41, 0x857C, 0xEE42, 0x8589, 0xEE43, 0x85A1, 0xEE44, 0x857A, - 0xEE45, 0x8578, 0xEE46, 0x8557, 0xEE47, 0x858E, 0xEE48, 0x8596, - 0xEE49, 0x8586, 0xEE4A, 0x858D, 0xEE4B, 0x8599, 0xEE4C, 0x859D, - 0xEE4D, 0x8581, 0xEE4E, 0x85A2, 0xEE4F, 0x8582, 0xEE50, 0x8588, - 0xEE51, 0x8585, 0xEE52, 0x8579, 0xEE53, 0x8576, 0xEE54, 0x8598, - 0xEE55, 0x8590, 0xEE56, 0x859F, 0xEE57, 0x8668, 0xEE58, 0x87BE, - 0xEE59, 0x87AA, 0xEE5A, 0x87AD, 0xEE5B, 0x87C5, 0xEE5C, 0x87B0, - 0xEE5D, 0x87AC, 0xEE5E, 0x87B9, 0xEE5F, 0x87B5, 0xEE60, 0x87BC, - 0xEE61, 0x87AE, 0xEE62, 0x87C9, 0xEE63, 0x87C3, 0xEE64, 0x87C2, - 0xEE65, 0x87CC, 0xEE66, 0x87B7, 0xEE67, 0x87AF, 0xEE68, 0x87C4, - 0xEE69, 0x87CA, 0xEE6A, 0x87B4, 0xEE6B, 0x87B6, 0xEE6C, 0x87BF, - 0xEE6D, 0x87B8, 0xEE6E, 0x87BD, 0xEE6F, 0x87DE, 0xEE70, 0x87B2, - 0xEE71, 0x8935, 0xEE72, 0x8933, 0xEE73, 0x893C, 0xEE74, 0x893E, - 0xEE75, 0x8941, 0xEE76, 0x8952, 0xEE77, 0x8937, 0xEE78, 0x8942, - 0xEE79, 0x89AD, 0xEE7A, 0x89AF, 0xEE7B, 0x89AE, 0xEE7C, 0x89F2, - 0xEE7D, 0x89F3, 0xEE7E, 0x8B1E, 0xEEA1, 0x8B18, 0xEEA2, 0x8B16, - 0xEEA3, 0x8B11, 0xEEA4, 0x8B05, 0xEEA5, 0x8B0B, 0xEEA6, 0x8B22, - 0xEEA7, 0x8B0F, 0xEEA8, 0x8B12, 0xEEA9, 0x8B15, 0xEEAA, 0x8B07, - 0xEEAB, 0x8B0D, 0xEEAC, 0x8B08, 0xEEAD, 0x8B06, 0xEEAE, 0x8B1C, - 0xEEAF, 0x8B13, 0xEEB0, 0x8B1A, 0xEEB1, 0x8C4F, 0xEEB2, 0x8C70, - 0xEEB3, 0x8C72, 0xEEB4, 0x8C71, 0xEEB5, 0x8C6F, 0xEEB6, 0x8C95, - 0xEEB7, 0x8C94, 0xEEB8, 0x8CF9, 0xEEB9, 0x8D6F, 0xEEBA, 0x8E4E, - 0xEEBB, 0x8E4D, 0xEEBC, 0x8E53, 0xEEBD, 0x8E50, 0xEEBE, 0x8E4C, - 0xEEBF, 0x8E47, 0xEEC0, 0x8F43, 0xEEC1, 0x8F40, 0xEEC2, 0x9085, - 0xEEC3, 0x907E, 0xEEC4, 0x9138, 0xEEC5, 0x919A, 0xEEC6, 0x91A2, - 0xEEC7, 0x919B, 0xEEC8, 0x9199, 0xEEC9, 0x919F, 0xEECA, 0x91A1, - 0xEECB, 0x919D, 0xEECC, 0x91A0, 0xEECD, 0x93A1, 0xEECE, 0x9383, - 0xEECF, 0x93AF, 0xEED0, 0x9364, 0xEED1, 0x9356, 0xEED2, 0x9347, - 0xEED3, 0x937C, 0xEED4, 0x9358, 0xEED5, 0x935C, 0xEED6, 0x9376, - 0xEED7, 0x9349, 0xEED8, 0x9350, 0xEED9, 0x9351, 0xEEDA, 0x9360, - 0xEEDB, 0x936D, 0xEEDC, 0x938F, 0xEEDD, 0x934C, 0xEEDE, 0x936A, - 0xEEDF, 0x9379, 0xEEE0, 0x9357, 0xEEE1, 0x9355, 0xEEE2, 0x9352, - 0xEEE3, 0x934F, 0xEEE4, 0x9371, 0xEEE5, 0x9377, 0xEEE6, 0x937B, - 0xEEE7, 0x9361, 0xEEE8, 0x935E, 0xEEE9, 0x9363, 0xEEEA, 0x9367, - 0xEEEB, 0x9380, 0xEEEC, 0x934E, 0xEEED, 0x9359, 0xEEEE, 0x95C7, - 0xEEEF, 0x95C0, 0xEEF0, 0x95C9, 0xEEF1, 0x95C3, 0xEEF2, 0x95C5, - 0xEEF3, 0x95B7, 0xEEF4, 0x96AE, 0xEEF5, 0x96B0, 0xEEF6, 0x96AC, - 0xEEF7, 0x9720, 0xEEF8, 0x971F, 0xEEF9, 0x9718, 0xEEFA, 0x971D, - 0xEEFB, 0x9719, 0xEEFC, 0x979A, 0xEEFD, 0x97A1, 0xEEFE, 0x979C, - 0xEF40, 0x979E, 0xEF41, 0x979D, 0xEF42, 0x97D5, 0xEF43, 0x97D4, - 0xEF44, 0x97F1, 0xEF45, 0x9841, 0xEF46, 0x9844, 0xEF47, 0x984A, - 0xEF48, 0x9849, 0xEF49, 0x9845, 0xEF4A, 0x9843, 0xEF4B, 0x9925, - 0xEF4C, 0x992B, 0xEF4D, 0x992C, 0xEF4E, 0x992A, 0xEF4F, 0x9933, - 0xEF50, 0x9932, 0xEF51, 0x992F, 0xEF52, 0x992D, 0xEF53, 0x9931, - 0xEF54, 0x9930, 0xEF55, 0x9998, 0xEF56, 0x99A3, 0xEF57, 0x99A1, - 0xEF58, 0x9A02, 0xEF59, 0x99FA, 0xEF5A, 0x99F4, 0xEF5B, 0x99F7, - 0xEF5C, 0x99F9, 0xEF5D, 0x99F8, 0xEF5E, 0x99F6, 0xEF5F, 0x99FB, - 0xEF60, 0x99FD, 0xEF61, 0x99FE, 0xEF62, 0x99FC, 0xEF63, 0x9A03, - 0xEF64, 0x9ABE, 0xEF65, 0x9AFE, 0xEF66, 0x9AFD, 0xEF67, 0x9B01, - 0xEF68, 0x9AFC, 0xEF69, 0x9B48, 0xEF6A, 0x9B9A, 0xEF6B, 0x9BA8, - 0xEF6C, 0x9B9E, 0xEF6D, 0x9B9B, 0xEF6E, 0x9BA6, 0xEF6F, 0x9BA1, - 0xEF70, 0x9BA5, 0xEF71, 0x9BA4, 0xEF72, 0x9B86, 0xEF73, 0x9BA2, - 0xEF74, 0x9BA0, 0xEF75, 0x9BAF, 0xEF76, 0x9D33, 0xEF77, 0x9D41, - 0xEF78, 0x9D67, 0xEF79, 0x9D36, 0xEF7A, 0x9D2E, 0xEF7B, 0x9D2F, - 0xEF7C, 0x9D31, 0xEF7D, 0x9D38, 0xEF7E, 0x9D30, 0xEFA1, 0x9D45, - 0xEFA2, 0x9D42, 0xEFA3, 0x9D43, 0xEFA4, 0x9D3E, 0xEFA5, 0x9D37, - 0xEFA6, 0x9D40, 0xEFA7, 0x9D3D, 0xEFA8, 0x7FF5, 0xEFA9, 0x9D2D, - 0xEFAA, 0x9E8A, 0xEFAB, 0x9E89, 0xEFAC, 0x9E8D, 0xEFAD, 0x9EB0, - 0xEFAE, 0x9EC8, 0xEFAF, 0x9EDA, 0xEFB0, 0x9EFB, 0xEFB1, 0x9EFF, - 0xEFB2, 0x9F24, 0xEFB3, 0x9F23, 0xEFB4, 0x9F22, 0xEFB5, 0x9F54, - 0xEFB6, 0x9FA0, 0xEFB7, 0x5131, 0xEFB8, 0x512D, 0xEFB9, 0x512E, - 0xEFBA, 0x5698, 0xEFBB, 0x569C, 0xEFBC, 0x5697, 0xEFBD, 0x569A, - 0xEFBE, 0x569D, 0xEFBF, 0x5699, 0xEFC0, 0x5970, 0xEFC1, 0x5B3C, - 0xEFC2, 0x5C69, 0xEFC3, 0x5C6A, 0xEFC4, 0x5DC0, 0xEFC5, 0x5E6D, - 0xEFC6, 0x5E6E, 0xEFC7, 0x61D8, 0xEFC8, 0x61DF, 0xEFC9, 0x61ED, - 0xEFCA, 0x61EE, 0xEFCB, 0x61F1, 0xEFCC, 0x61EA, 0xEFCD, 0x61F0, - 0xEFCE, 0x61EB, 0xEFCF, 0x61D6, 0xEFD0, 0x61E9, 0xEFD1, 0x64FF, - 0xEFD2, 0x6504, 0xEFD3, 0x64FD, 0xEFD4, 0x64F8, 0xEFD5, 0x6501, - 0xEFD6, 0x6503, 0xEFD7, 0x64FC, 0xEFD8, 0x6594, 0xEFD9, 0x65DB, - 0xEFDA, 0x66DA, 0xEFDB, 0x66DB, 0xEFDC, 0x66D8, 0xEFDD, 0x6AC5, - 0xEFDE, 0x6AB9, 0xEFDF, 0x6ABD, 0xEFE0, 0x6AE1, 0xEFE1, 0x6AC6, - 0xEFE2, 0x6ABA, 0xEFE3, 0x6AB6, 0xEFE4, 0x6AB7, 0xEFE5, 0x6AC7, - 0xEFE6, 0x6AB4, 0xEFE7, 0x6AAD, 0xEFE8, 0x6B5E, 0xEFE9, 0x6BC9, - 0xEFEA, 0x6C0B, 0xEFEB, 0x7007, 0xEFEC, 0x700C, 0xEFED, 0x700D, - 0xEFEE, 0x7001, 0xEFEF, 0x7005, 0xEFF0, 0x7014, 0xEFF1, 0x700E, - 0xEFF2, 0x6FFF, 0xEFF3, 0x7000, 0xEFF4, 0x6FFB, 0xEFF5, 0x7026, - 0xEFF6, 0x6FFC, 0xEFF7, 0x6FF7, 0xEFF8, 0x700A, 0xEFF9, 0x7201, - 0xEFFA, 0x71FF, 0xEFFB, 0x71F9, 0xEFFC, 0x7203, 0xEFFD, 0x71FD, - 0xEFFE, 0x7376, 0xF040, 0x74B8, 0xF041, 0x74C0, 0xF042, 0x74B5, - 0xF043, 0x74C1, 0xF044, 0x74BE, 0xF045, 0x74B6, 0xF046, 0x74BB, - 0xF047, 0x74C2, 0xF048, 0x7514, 0xF049, 0x7513, 0xF04A, 0x765C, - 0xF04B, 0x7664, 0xF04C, 0x7659, 0xF04D, 0x7650, 0xF04E, 0x7653, - 0xF04F, 0x7657, 0xF050, 0x765A, 0xF051, 0x76A6, 0xF052, 0x76BD, - 0xF053, 0x76EC, 0xF054, 0x77C2, 0xF055, 0x77BA, 0xF056, 0x78FF, - 0xF057, 0x790C, 0xF058, 0x7913, 0xF059, 0x7914, 0xF05A, 0x7909, - 0xF05B, 0x7910, 0xF05C, 0x7912, 0xF05D, 0x7911, 0xF05E, 0x79AD, - 0xF05F, 0x79AC, 0xF060, 0x7A5F, 0xF061, 0x7C1C, 0xF062, 0x7C29, - 0xF063, 0x7C19, 0xF064, 0x7C20, 0xF065, 0x7C1F, 0xF066, 0x7C2D, - 0xF067, 0x7C1D, 0xF068, 0x7C26, 0xF069, 0x7C28, 0xF06A, 0x7C22, - 0xF06B, 0x7C25, 0xF06C, 0x7C30, 0xF06D, 0x7E5C, 0xF06E, 0x7E50, - 0xF06F, 0x7E56, 0xF070, 0x7E63, 0xF071, 0x7E58, 0xF072, 0x7E62, - 0xF073, 0x7E5F, 0xF074, 0x7E51, 0xF075, 0x7E60, 0xF076, 0x7E57, - 0xF077, 0x7E53, 0xF078, 0x7FB5, 0xF079, 0x7FB3, 0xF07A, 0x7FF7, - 0xF07B, 0x7FF8, 0xF07C, 0x8075, 0xF07D, 0x81D1, 0xF07E, 0x81D2, - 0xF0A1, 0x81D0, 0xF0A2, 0x825F, 0xF0A3, 0x825E, 0xF0A4, 0x85B4, - 0xF0A5, 0x85C6, 0xF0A6, 0x85C0, 0xF0A7, 0x85C3, 0xF0A8, 0x85C2, - 0xF0A9, 0x85B3, 0xF0AA, 0x85B5, 0xF0AB, 0x85BD, 0xF0AC, 0x85C7, - 0xF0AD, 0x85C4, 0xF0AE, 0x85BF, 0xF0AF, 0x85CB, 0xF0B0, 0x85CE, - 0xF0B1, 0x85C8, 0xF0B2, 0x85C5, 0xF0B3, 0x85B1, 0xF0B4, 0x85B6, - 0xF0B5, 0x85D2, 0xF0B6, 0x8624, 0xF0B7, 0x85B8, 0xF0B8, 0x85B7, - 0xF0B9, 0x85BE, 0xF0BA, 0x8669, 0xF0BB, 0x87E7, 0xF0BC, 0x87E6, - 0xF0BD, 0x87E2, 0xF0BE, 0x87DB, 0xF0BF, 0x87EB, 0xF0C0, 0x87EA, - 0xF0C1, 0x87E5, 0xF0C2, 0x87DF, 0xF0C3, 0x87F3, 0xF0C4, 0x87E4, - 0xF0C5, 0x87D4, 0xF0C6, 0x87DC, 0xF0C7, 0x87D3, 0xF0C8, 0x87ED, - 0xF0C9, 0x87D8, 0xF0CA, 0x87E3, 0xF0CB, 0x87A4, 0xF0CC, 0x87D7, - 0xF0CD, 0x87D9, 0xF0CE, 0x8801, 0xF0CF, 0x87F4, 0xF0D0, 0x87E8, - 0xF0D1, 0x87DD, 0xF0D2, 0x8953, 0xF0D3, 0x894B, 0xF0D4, 0x894F, - 0xF0D5, 0x894C, 0xF0D6, 0x8946, 0xF0D7, 0x8950, 0xF0D8, 0x8951, - 0xF0D9, 0x8949, 0xF0DA, 0x8B2A, 0xF0DB, 0x8B27, 0xF0DC, 0x8B23, - 0xF0DD, 0x8B33, 0xF0DE, 0x8B30, 0xF0DF, 0x8B35, 0xF0E0, 0x8B47, - 0xF0E1, 0x8B2F, 0xF0E2, 0x8B3C, 0xF0E3, 0x8B3E, 0xF0E4, 0x8B31, - 0xF0E5, 0x8B25, 0xF0E6, 0x8B37, 0xF0E7, 0x8B26, 0xF0E8, 0x8B36, - 0xF0E9, 0x8B2E, 0xF0EA, 0x8B24, 0xF0EB, 0x8B3B, 0xF0EC, 0x8B3D, - 0xF0ED, 0x8B3A, 0xF0EE, 0x8C42, 0xF0EF, 0x8C75, 0xF0F0, 0x8C99, - 0xF0F1, 0x8C98, 0xF0F2, 0x8C97, 0xF0F3, 0x8CFE, 0xF0F4, 0x8D04, - 0xF0F5, 0x8D02, 0xF0F6, 0x8D00, 0xF0F7, 0x8E5C, 0xF0F8, 0x8E62, - 0xF0F9, 0x8E60, 0xF0FA, 0x8E57, 0xF0FB, 0x8E56, 0xF0FC, 0x8E5E, - 0xF0FD, 0x8E65, 0xF0FE, 0x8E67, 0xF140, 0x8E5B, 0xF141, 0x8E5A, - 0xF142, 0x8E61, 0xF143, 0x8E5D, 0xF144, 0x8E69, 0xF145, 0x8E54, - 0xF146, 0x8F46, 0xF147, 0x8F47, 0xF148, 0x8F48, 0xF149, 0x8F4B, - 0xF14A, 0x9128, 0xF14B, 0x913A, 0xF14C, 0x913B, 0xF14D, 0x913E, - 0xF14E, 0x91A8, 0xF14F, 0x91A5, 0xF150, 0x91A7, 0xF151, 0x91AF, - 0xF152, 0x91AA, 0xF153, 0x93B5, 0xF154, 0x938C, 0xF155, 0x9392, - 0xF156, 0x93B7, 0xF157, 0x939B, 0xF158, 0x939D, 0xF159, 0x9389, - 0xF15A, 0x93A7, 0xF15B, 0x938E, 0xF15C, 0x93AA, 0xF15D, 0x939E, - 0xF15E, 0x93A6, 0xF15F, 0x9395, 0xF160, 0x9388, 0xF161, 0x9399, - 0xF162, 0x939F, 0xF163, 0x938D, 0xF164, 0x93B1, 0xF165, 0x9391, - 0xF166, 0x93B2, 0xF167, 0x93A4, 0xF168, 0x93A8, 0xF169, 0x93B4, - 0xF16A, 0x93A3, 0xF16B, 0x93A5, 0xF16C, 0x95D2, 0xF16D, 0x95D3, - 0xF16E, 0x95D1, 0xF16F, 0x96B3, 0xF170, 0x96D7, 0xF171, 0x96DA, - 0xF172, 0x5DC2, 0xF173, 0x96DF, 0xF174, 0x96D8, 0xF175, 0x96DD, - 0xF176, 0x9723, 0xF177, 0x9722, 0xF178, 0x9725, 0xF179, 0x97AC, - 0xF17A, 0x97AE, 0xF17B, 0x97A8, 0xF17C, 0x97AB, 0xF17D, 0x97A4, - 0xF17E, 0x97AA, 0xF1A1, 0x97A2, 0xF1A2, 0x97A5, 0xF1A3, 0x97D7, - 0xF1A4, 0x97D9, 0xF1A5, 0x97D6, 0xF1A6, 0x97D8, 0xF1A7, 0x97FA, - 0xF1A8, 0x9850, 0xF1A9, 0x9851, 0xF1AA, 0x9852, 0xF1AB, 0x98B8, - 0xF1AC, 0x9941, 0xF1AD, 0x993C, 0xF1AE, 0x993A, 0xF1AF, 0x9A0F, - 0xF1B0, 0x9A0B, 0xF1B1, 0x9A09, 0xF1B2, 0x9A0D, 0xF1B3, 0x9A04, - 0xF1B4, 0x9A11, 0xF1B5, 0x9A0A, 0xF1B6, 0x9A05, 0xF1B7, 0x9A07, - 0xF1B8, 0x9A06, 0xF1B9, 0x9AC0, 0xF1BA, 0x9ADC, 0xF1BB, 0x9B08, - 0xF1BC, 0x9B04, 0xF1BD, 0x9B05, 0xF1BE, 0x9B29, 0xF1BF, 0x9B35, - 0xF1C0, 0x9B4A, 0xF1C1, 0x9B4C, 0xF1C2, 0x9B4B, 0xF1C3, 0x9BC7, - 0xF1C4, 0x9BC6, 0xF1C5, 0x9BC3, 0xF1C6, 0x9BBF, 0xF1C7, 0x9BC1, - 0xF1C8, 0x9BB5, 0xF1C9, 0x9BB8, 0xF1CA, 0x9BD3, 0xF1CB, 0x9BB6, - 0xF1CC, 0x9BC4, 0xF1CD, 0x9BB9, 0xF1CE, 0x9BBD, 0xF1CF, 0x9D5C, - 0xF1D0, 0x9D53, 0xF1D1, 0x9D4F, 0xF1D2, 0x9D4A, 0xF1D3, 0x9D5B, - 0xF1D4, 0x9D4B, 0xF1D5, 0x9D59, 0xF1D6, 0x9D56, 0xF1D7, 0x9D4C, - 0xF1D8, 0x9D57, 0xF1D9, 0x9D52, 0xF1DA, 0x9D54, 0xF1DB, 0x9D5F, - 0xF1DC, 0x9D58, 0xF1DD, 0x9D5A, 0xF1DE, 0x9E8E, 0xF1DF, 0x9E8C, - 0xF1E0, 0x9EDF, 0xF1E1, 0x9F01, 0xF1E2, 0x9F00, 0xF1E3, 0x9F16, - 0xF1E4, 0x9F25, 0xF1E5, 0x9F2B, 0xF1E6, 0x9F2A, 0xF1E7, 0x9F29, - 0xF1E8, 0x9F28, 0xF1E9, 0x9F4C, 0xF1EA, 0x9F55, 0xF1EB, 0x5134, - 0xF1EC, 0x5135, 0xF1ED, 0x5296, 0xF1EE, 0x52F7, 0xF1EF, 0x53B4, - 0xF1F0, 0x56AB, 0xF1F1, 0x56AD, 0xF1F2, 0x56A6, 0xF1F3, 0x56A7, - 0xF1F4, 0x56AA, 0xF1F5, 0x56AC, 0xF1F6, 0x58DA, 0xF1F7, 0x58DD, - 0xF1F8, 0x58DB, 0xF1F9, 0x5912, 0xF1FA, 0x5B3D, 0xF1FB, 0x5B3E, - 0xF1FC, 0x5B3F, 0xF1FD, 0x5DC3, 0xF1FE, 0x5E70, 0xF240, 0x5FBF, - 0xF241, 0x61FB, 0xF242, 0x6507, 0xF243, 0x6510, 0xF244, 0x650D, - 0xF245, 0x6509, 0xF246, 0x650C, 0xF247, 0x650E, 0xF248, 0x6584, - 0xF249, 0x65DE, 0xF24A, 0x65DD, 0xF24B, 0x66DE, 0xF24C, 0x6AE7, - 0xF24D, 0x6AE0, 0xF24E, 0x6ACC, 0xF24F, 0x6AD1, 0xF250, 0x6AD9, - 0xF251, 0x6ACB, 0xF252, 0x6ADF, 0xF253, 0x6ADC, 0xF254, 0x6AD0, - 0xF255, 0x6AEB, 0xF256, 0x6ACF, 0xF257, 0x6ACD, 0xF258, 0x6ADE, - 0xF259, 0x6B60, 0xF25A, 0x6BB0, 0xF25B, 0x6C0C, 0xF25C, 0x7019, - 0xF25D, 0x7027, 0xF25E, 0x7020, 0xF25F, 0x7016, 0xF260, 0x702B, - 0xF261, 0x7021, 0xF262, 0x7022, 0xF263, 0x7023, 0xF264, 0x7029, - 0xF265, 0x7017, 0xF266, 0x7024, 0xF267, 0x701C, 0xF268, 0x702A, - 0xF269, 0x720C, 0xF26A, 0x720A, 0xF26B, 0x7207, 0xF26C, 0x7202, - 0xF26D, 0x7205, 0xF26E, 0x72A5, 0xF26F, 0x72A6, 0xF270, 0x72A4, - 0xF271, 0x72A3, 0xF272, 0x72A1, 0xF273, 0x74CB, 0xF274, 0x74C5, - 0xF275, 0x74B7, 0xF276, 0x74C3, 0xF277, 0x7516, 0xF278, 0x7660, - 0xF279, 0x77C9, 0xF27A, 0x77CA, 0xF27B, 0x77C4, 0xF27C, 0x77F1, - 0xF27D, 0x791D, 0xF27E, 0x791B, 0xF2A1, 0x7921, 0xF2A2, 0x791C, - 0xF2A3, 0x7917, 0xF2A4, 0x791E, 0xF2A5, 0x79B0, 0xF2A6, 0x7A67, - 0xF2A7, 0x7A68, 0xF2A8, 0x7C33, 0xF2A9, 0x7C3C, 0xF2AA, 0x7C39, - 0xF2AB, 0x7C2C, 0xF2AC, 0x7C3B, 0xF2AD, 0x7CEC, 0xF2AE, 0x7CEA, - 0xF2AF, 0x7E76, 0xF2B0, 0x7E75, 0xF2B1, 0x7E78, 0xF2B2, 0x7E70, - 0xF2B3, 0x7E77, 0xF2B4, 0x7E6F, 0xF2B5, 0x7E7A, 0xF2B6, 0x7E72, - 0xF2B7, 0x7E74, 0xF2B8, 0x7E68, 0xF2B9, 0x7F4B, 0xF2BA, 0x7F4A, - 0xF2BB, 0x7F83, 0xF2BC, 0x7F86, 0xF2BD, 0x7FB7, 0xF2BE, 0x7FFD, - 0xF2BF, 0x7FFE, 0xF2C0, 0x8078, 0xF2C1, 0x81D7, 0xF2C2, 0x81D5, - 0xF2C3, 0x8264, 0xF2C4, 0x8261, 0xF2C5, 0x8263, 0xF2C6, 0x85EB, - 0xF2C7, 0x85F1, 0xF2C8, 0x85ED, 0xF2C9, 0x85D9, 0xF2CA, 0x85E1, - 0xF2CB, 0x85E8, 0xF2CC, 0x85DA, 0xF2CD, 0x85D7, 0xF2CE, 0x85EC, - 0xF2CF, 0x85F2, 0xF2D0, 0x85F8, 0xF2D1, 0x85D8, 0xF2D2, 0x85DF, - 0xF2D3, 0x85E3, 0xF2D4, 0x85DC, 0xF2D5, 0x85D1, 0xF2D6, 0x85F0, - 0xF2D7, 0x85E6, 0xF2D8, 0x85EF, 0xF2D9, 0x85DE, 0xF2DA, 0x85E2, - 0xF2DB, 0x8800, 0xF2DC, 0x87FA, 0xF2DD, 0x8803, 0xF2DE, 0x87F6, - 0xF2DF, 0x87F7, 0xF2E0, 0x8809, 0xF2E1, 0x880C, 0xF2E2, 0x880B, - 0xF2E3, 0x8806, 0xF2E4, 0x87FC, 0xF2E5, 0x8808, 0xF2E6, 0x87FF, - 0xF2E7, 0x880A, 0xF2E8, 0x8802, 0xF2E9, 0x8962, 0xF2EA, 0x895A, - 0xF2EB, 0x895B, 0xF2EC, 0x8957, 0xF2ED, 0x8961, 0xF2EE, 0x895C, - 0xF2EF, 0x8958, 0xF2F0, 0x895D, 0xF2F1, 0x8959, 0xF2F2, 0x8988, - 0xF2F3, 0x89B7, 0xF2F4, 0x89B6, 0xF2F5, 0x89F6, 0xF2F6, 0x8B50, - 0xF2F7, 0x8B48, 0xF2F8, 0x8B4A, 0xF2F9, 0x8B40, 0xF2FA, 0x8B53, - 0xF2FB, 0x8B56, 0xF2FC, 0x8B54, 0xF2FD, 0x8B4B, 0xF2FE, 0x8B55, - 0xF340, 0x8B51, 0xF341, 0x8B42, 0xF342, 0x8B52, 0xF343, 0x8B57, - 0xF344, 0x8C43, 0xF345, 0x8C77, 0xF346, 0x8C76, 0xF347, 0x8C9A, - 0xF348, 0x8D06, 0xF349, 0x8D07, 0xF34A, 0x8D09, 0xF34B, 0x8DAC, - 0xF34C, 0x8DAA, 0xF34D, 0x8DAD, 0xF34E, 0x8DAB, 0xF34F, 0x8E6D, - 0xF350, 0x8E78, 0xF351, 0x8E73, 0xF352, 0x8E6A, 0xF353, 0x8E6F, - 0xF354, 0x8E7B, 0xF355, 0x8EC2, 0xF356, 0x8F52, 0xF357, 0x8F51, - 0xF358, 0x8F4F, 0xF359, 0x8F50, 0xF35A, 0x8F53, 0xF35B, 0x8FB4, - 0xF35C, 0x9140, 0xF35D, 0x913F, 0xF35E, 0x91B0, 0xF35F, 0x91AD, - 0xF360, 0x93DE, 0xF361, 0x93C7, 0xF362, 0x93CF, 0xF363, 0x93C2, - 0xF364, 0x93DA, 0xF365, 0x93D0, 0xF366, 0x93F9, 0xF367, 0x93EC, - 0xF368, 0x93CC, 0xF369, 0x93D9, 0xF36A, 0x93A9, 0xF36B, 0x93E6, - 0xF36C, 0x93CA, 0xF36D, 0x93D4, 0xF36E, 0x93EE, 0xF36F, 0x93E3, - 0xF370, 0x93D5, 0xF371, 0x93C4, 0xF372, 0x93CE, 0xF373, 0x93C0, - 0xF374, 0x93D2, 0xF375, 0x93E7, 0xF376, 0x957D, 0xF377, 0x95DA, - 0xF378, 0x95DB, 0xF379, 0x96E1, 0xF37A, 0x9729, 0xF37B, 0x972B, - 0xF37C, 0x972C, 0xF37D, 0x9728, 0xF37E, 0x9726, 0xF3A1, 0x97B3, - 0xF3A2, 0x97B7, 0xF3A3, 0x97B6, 0xF3A4, 0x97DD, 0xF3A5, 0x97DE, - 0xF3A6, 0x97DF, 0xF3A7, 0x985C, 0xF3A8, 0x9859, 0xF3A9, 0x985D, - 0xF3AA, 0x9857, 0xF3AB, 0x98BF, 0xF3AC, 0x98BD, 0xF3AD, 0x98BB, - 0xF3AE, 0x98BE, 0xF3AF, 0x9948, 0xF3B0, 0x9947, 0xF3B1, 0x9943, - 0xF3B2, 0x99A6, 0xF3B3, 0x99A7, 0xF3B4, 0x9A1A, 0xF3B5, 0x9A15, - 0xF3B6, 0x9A25, 0xF3B7, 0x9A1D, 0xF3B8, 0x9A24, 0xF3B9, 0x9A1B, - 0xF3BA, 0x9A22, 0xF3BB, 0x9A20, 0xF3BC, 0x9A27, 0xF3BD, 0x9A23, - 0xF3BE, 0x9A1E, 0xF3BF, 0x9A1C, 0xF3C0, 0x9A14, 0xF3C1, 0x9AC2, - 0xF3C2, 0x9B0B, 0xF3C3, 0x9B0A, 0xF3C4, 0x9B0E, 0xF3C5, 0x9B0C, - 0xF3C6, 0x9B37, 0xF3C7, 0x9BEA, 0xF3C8, 0x9BEB, 0xF3C9, 0x9BE0, - 0xF3CA, 0x9BDE, 0xF3CB, 0x9BE4, 0xF3CC, 0x9BE6, 0xF3CD, 0x9BE2, - 0xF3CE, 0x9BF0, 0xF3CF, 0x9BD4, 0xF3D0, 0x9BD7, 0xF3D1, 0x9BEC, - 0xF3D2, 0x9BDC, 0xF3D3, 0x9BD9, 0xF3D4, 0x9BE5, 0xF3D5, 0x9BD5, - 0xF3D6, 0x9BE1, 0xF3D7, 0x9BDA, 0xF3D8, 0x9D77, 0xF3D9, 0x9D81, - 0xF3DA, 0x9D8A, 0xF3DB, 0x9D84, 0xF3DC, 0x9D88, 0xF3DD, 0x9D71, - 0xF3DE, 0x9D80, 0xF3DF, 0x9D78, 0xF3E0, 0x9D86, 0xF3E1, 0x9D8B, - 0xF3E2, 0x9D8C, 0xF3E3, 0x9D7D, 0xF3E4, 0x9D6B, 0xF3E5, 0x9D74, - 0xF3E6, 0x9D75, 0xF3E7, 0x9D70, 0xF3E8, 0x9D69, 0xF3E9, 0x9D85, - 0xF3EA, 0x9D73, 0xF3EB, 0x9D7B, 0xF3EC, 0x9D82, 0xF3ED, 0x9D6F, - 0xF3EE, 0x9D79, 0xF3EF, 0x9D7F, 0xF3F0, 0x9D87, 0xF3F1, 0x9D68, - 0xF3F2, 0x9E94, 0xF3F3, 0x9E91, 0xF3F4, 0x9EC0, 0xF3F5, 0x9EFC, - 0xF3F6, 0x9F2D, 0xF3F7, 0x9F40, 0xF3F8, 0x9F41, 0xF3F9, 0x9F4D, - 0xF3FA, 0x9F56, 0xF3FB, 0x9F57, 0xF3FC, 0x9F58, 0xF3FD, 0x5337, - 0xF3FE, 0x56B2, 0xF440, 0x56B5, 0xF441, 0x56B3, 0xF442, 0x58E3, - 0xF443, 0x5B45, 0xF444, 0x5DC6, 0xF445, 0x5DC7, 0xF446, 0x5EEE, - 0xF447, 0x5EEF, 0xF448, 0x5FC0, 0xF449, 0x5FC1, 0xF44A, 0x61F9, - 0xF44B, 0x6517, 0xF44C, 0x6516, 0xF44D, 0x6515, 0xF44E, 0x6513, - 0xF44F, 0x65DF, 0xF450, 0x66E8, 0xF451, 0x66E3, 0xF452, 0x66E4, - 0xF453, 0x6AF3, 0xF454, 0x6AF0, 0xF455, 0x6AEA, 0xF456, 0x6AE8, - 0xF457, 0x6AF9, 0xF458, 0x6AF1, 0xF459, 0x6AEE, 0xF45A, 0x6AEF, - 0xF45B, 0x703C, 0xF45C, 0x7035, 0xF45D, 0x702F, 0xF45E, 0x7037, - 0xF45F, 0x7034, 0xF460, 0x7031, 0xF461, 0x7042, 0xF462, 0x7038, - 0xF463, 0x703F, 0xF464, 0x703A, 0xF465, 0x7039, 0xF466, 0x7040, - 0xF467, 0x703B, 0xF468, 0x7033, 0xF469, 0x7041, 0xF46A, 0x7213, - 0xF46B, 0x7214, 0xF46C, 0x72A8, 0xF46D, 0x737D, 0xF46E, 0x737C, - 0xF46F, 0x74BA, 0xF470, 0x76AB, 0xF471, 0x76AA, 0xF472, 0x76BE, - 0xF473, 0x76ED, 0xF474, 0x77CC, 0xF475, 0x77CE, 0xF476, 0x77CF, - 0xF477, 0x77CD, 0xF478, 0x77F2, 0xF479, 0x7925, 0xF47A, 0x7923, - 0xF47B, 0x7927, 0xF47C, 0x7928, 0xF47D, 0x7924, 0xF47E, 0x7929, - 0xF4A1, 0x79B2, 0xF4A2, 0x7A6E, 0xF4A3, 0x7A6C, 0xF4A4, 0x7A6D, - 0xF4A5, 0x7AF7, 0xF4A6, 0x7C49, 0xF4A7, 0x7C48, 0xF4A8, 0x7C4A, - 0xF4A9, 0x7C47, 0xF4AA, 0x7C45, 0xF4AB, 0x7CEE, 0xF4AC, 0x7E7B, - 0xF4AD, 0x7E7E, 0xF4AE, 0x7E81, 0xF4AF, 0x7E80, 0xF4B0, 0x7FBA, - 0xF4B1, 0x7FFF, 0xF4B2, 0x8079, 0xF4B3, 0x81DB, 0xF4B4, 0x81D9, - 0xF4B5, 0x820B, 0xF4B6, 0x8268, 0xF4B7, 0x8269, 0xF4B8, 0x8622, - 0xF4B9, 0x85FF, 0xF4BA, 0x8601, 0xF4BB, 0x85FE, 0xF4BC, 0x861B, - 0xF4BD, 0x8600, 0xF4BE, 0x85F6, 0xF4BF, 0x8604, 0xF4C0, 0x8609, - 0xF4C1, 0x8605, 0xF4C2, 0x860C, 0xF4C3, 0x85FD, 0xF4C4, 0x8819, - 0xF4C5, 0x8810, 0xF4C6, 0x8811, 0xF4C7, 0x8817, 0xF4C8, 0x8813, - 0xF4C9, 0x8816, 0xF4CA, 0x8963, 0xF4CB, 0x8966, 0xF4CC, 0x89B9, - 0xF4CD, 0x89F7, 0xF4CE, 0x8B60, 0xF4CF, 0x8B6A, 0xF4D0, 0x8B5D, - 0xF4D1, 0x8B68, 0xF4D2, 0x8B63, 0xF4D3, 0x8B65, 0xF4D4, 0x8B67, - 0xF4D5, 0x8B6D, 0xF4D6, 0x8DAE, 0xF4D7, 0x8E86, 0xF4D8, 0x8E88, - 0xF4D9, 0x8E84, 0xF4DA, 0x8F59, 0xF4DB, 0x8F56, 0xF4DC, 0x8F57, - 0xF4DD, 0x8F55, 0xF4DE, 0x8F58, 0xF4DF, 0x8F5A, 0xF4E0, 0x908D, - 0xF4E1, 0x9143, 0xF4E2, 0x9141, 0xF4E3, 0x91B7, 0xF4E4, 0x91B5, - 0xF4E5, 0x91B2, 0xF4E6, 0x91B3, 0xF4E7, 0x940B, 0xF4E8, 0x9413, - 0xF4E9, 0x93FB, 0xF4EA, 0x9420, 0xF4EB, 0x940F, 0xF4EC, 0x9414, - 0xF4ED, 0x93FE, 0xF4EE, 0x9415, 0xF4EF, 0x9410, 0xF4F0, 0x9428, - 0xF4F1, 0x9419, 0xF4F2, 0x940D, 0xF4F3, 0x93F5, 0xF4F4, 0x9400, - 0xF4F5, 0x93F7, 0xF4F6, 0x9407, 0xF4F7, 0x940E, 0xF4F8, 0x9416, - 0xF4F9, 0x9412, 0xF4FA, 0x93FA, 0xF4FB, 0x9409, 0xF4FC, 0x93F8, - 0xF4FD, 0x940A, 0xF4FE, 0x93FF, 0xF540, 0x93FC, 0xF541, 0x940C, - 0xF542, 0x93F6, 0xF543, 0x9411, 0xF544, 0x9406, 0xF545, 0x95DE, - 0xF546, 0x95E0, 0xF547, 0x95DF, 0xF548, 0x972E, 0xF549, 0x972F, - 0xF54A, 0x97B9, 0xF54B, 0x97BB, 0xF54C, 0x97FD, 0xF54D, 0x97FE, - 0xF54E, 0x9860, 0xF54F, 0x9862, 0xF550, 0x9863, 0xF551, 0x985F, - 0xF552, 0x98C1, 0xF553, 0x98C2, 0xF554, 0x9950, 0xF555, 0x994E, - 0xF556, 0x9959, 0xF557, 0x994C, 0xF558, 0x994B, 0xF559, 0x9953, - 0xF55A, 0x9A32, 0xF55B, 0x9A34, 0xF55C, 0x9A31, 0xF55D, 0x9A2C, - 0xF55E, 0x9A2A, 0xF55F, 0x9A36, 0xF560, 0x9A29, 0xF561, 0x9A2E, - 0xF562, 0x9A38, 0xF563, 0x9A2D, 0xF564, 0x9AC7, 0xF565, 0x9ACA, - 0xF566, 0x9AC6, 0xF567, 0x9B10, 0xF568, 0x9B12, 0xF569, 0x9B11, - 0xF56A, 0x9C0B, 0xF56B, 0x9C08, 0xF56C, 0x9BF7, 0xF56D, 0x9C05, - 0xF56E, 0x9C12, 0xF56F, 0x9BF8, 0xF570, 0x9C40, 0xF571, 0x9C07, - 0xF572, 0x9C0E, 0xF573, 0x9C06, 0xF574, 0x9C17, 0xF575, 0x9C14, - 0xF576, 0x9C09, 0xF577, 0x9D9F, 0xF578, 0x9D99, 0xF579, 0x9DA4, - 0xF57A, 0x9D9D, 0xF57B, 0x9D92, 0xF57C, 0x9D98, 0xF57D, 0x9D90, - 0xF57E, 0x9D9B, 0xF5A1, 0x9DA0, 0xF5A2, 0x9D94, 0xF5A3, 0x9D9C, - 0xF5A4, 0x9DAA, 0xF5A5, 0x9D97, 0xF5A6, 0x9DA1, 0xF5A7, 0x9D9A, - 0xF5A8, 0x9DA2, 0xF5A9, 0x9DA8, 0xF5AA, 0x9D9E, 0xF5AB, 0x9DA3, - 0xF5AC, 0x9DBF, 0xF5AD, 0x9DA9, 0xF5AE, 0x9D96, 0xF5AF, 0x9DA6, - 0xF5B0, 0x9DA7, 0xF5B1, 0x9E99, 0xF5B2, 0x9E9B, 0xF5B3, 0x9E9A, - 0xF5B4, 0x9EE5, 0xF5B5, 0x9EE4, 0xF5B6, 0x9EE7, 0xF5B7, 0x9EE6, - 0xF5B8, 0x9F30, 0xF5B9, 0x9F2E, 0xF5BA, 0x9F5B, 0xF5BB, 0x9F60, - 0xF5BC, 0x9F5E, 0xF5BD, 0x9F5D, 0xF5BE, 0x9F59, 0xF5BF, 0x9F91, - 0xF5C0, 0x513A, 0xF5C1, 0x5139, 0xF5C2, 0x5298, 0xF5C3, 0x5297, - 0xF5C4, 0x56C3, 0xF5C5, 0x56BD, 0xF5C6, 0x56BE, 0xF5C7, 0x5B48, - 0xF5C8, 0x5B47, 0xF5C9, 0x5DCB, 0xF5CA, 0x5DCF, 0xF5CB, 0x5EF1, - 0xF5CC, 0x61FD, 0xF5CD, 0x651B, 0xF5CE, 0x6B02, 0xF5CF, 0x6AFC, - 0xF5D0, 0x6B03, 0xF5D1, 0x6AF8, 0xF5D2, 0x6B00, 0xF5D3, 0x7043, - 0xF5D4, 0x7044, 0xF5D5, 0x704A, 0xF5D6, 0x7048, 0xF5D7, 0x7049, - 0xF5D8, 0x7045, 0xF5D9, 0x7046, 0xF5DA, 0x721D, 0xF5DB, 0x721A, - 0xF5DC, 0x7219, 0xF5DD, 0x737E, 0xF5DE, 0x7517, 0xF5DF, 0x766A, - 0xF5E0, 0x77D0, 0xF5E1, 0x792D, 0xF5E2, 0x7931, 0xF5E3, 0x792F, - 0xF5E4, 0x7C54, 0xF5E5, 0x7C53, 0xF5E6, 0x7CF2, 0xF5E7, 0x7E8A, - 0xF5E8, 0x7E87, 0xF5E9, 0x7E88, 0xF5EA, 0x7E8B, 0xF5EB, 0x7E86, - 0xF5EC, 0x7E8D, 0xF5ED, 0x7F4D, 0xF5EE, 0x7FBB, 0xF5EF, 0x8030, - 0xF5F0, 0x81DD, 0xF5F1, 0x8618, 0xF5F2, 0x862A, 0xF5F3, 0x8626, - 0xF5F4, 0x861F, 0xF5F5, 0x8623, 0xF5F6, 0x861C, 0xF5F7, 0x8619, - 0xF5F8, 0x8627, 0xF5F9, 0x862E, 0xF5FA, 0x8621, 0xF5FB, 0x8620, - 0xF5FC, 0x8629, 0xF5FD, 0x861E, 0xF5FE, 0x8625, 0xF640, 0x8829, - 0xF641, 0x881D, 0xF642, 0x881B, 0xF643, 0x8820, 0xF644, 0x8824, - 0xF645, 0x881C, 0xF646, 0x882B, 0xF647, 0x884A, 0xF648, 0x896D, - 0xF649, 0x8969, 0xF64A, 0x896E, 0xF64B, 0x896B, 0xF64C, 0x89FA, - 0xF64D, 0x8B79, 0xF64E, 0x8B78, 0xF64F, 0x8B45, 0xF650, 0x8B7A, - 0xF651, 0x8B7B, 0xF652, 0x8D10, 0xF653, 0x8D14, 0xF654, 0x8DAF, - 0xF655, 0x8E8E, 0xF656, 0x8E8C, 0xF657, 0x8F5E, 0xF658, 0x8F5B, - 0xF659, 0x8F5D, 0xF65A, 0x9146, 0xF65B, 0x9144, 0xF65C, 0x9145, - 0xF65D, 0x91B9, 0xF65E, 0x943F, 0xF65F, 0x943B, 0xF660, 0x9436, - 0xF661, 0x9429, 0xF662, 0x943D, 0xF663, 0x943C, 0xF664, 0x9430, - 0xF665, 0x9439, 0xF666, 0x942A, 0xF667, 0x9437, 0xF668, 0x942C, - 0xF669, 0x9440, 0xF66A, 0x9431, 0xF66B, 0x95E5, 0xF66C, 0x95E4, - 0xF66D, 0x95E3, 0xF66E, 0x9735, 0xF66F, 0x973A, 0xF670, 0x97BF, - 0xF671, 0x97E1, 0xF672, 0x9864, 0xF673, 0x98C9, 0xF674, 0x98C6, - 0xF675, 0x98C0, 0xF676, 0x9958, 0xF677, 0x9956, 0xF678, 0x9A39, - 0xF679, 0x9A3D, 0xF67A, 0x9A46, 0xF67B, 0x9A44, 0xF67C, 0x9A42, - 0xF67D, 0x9A41, 0xF67E, 0x9A3A, 0xF6A1, 0x9A3F, 0xF6A2, 0x9ACD, - 0xF6A3, 0x9B15, 0xF6A4, 0x9B17, 0xF6A5, 0x9B18, 0xF6A6, 0x9B16, - 0xF6A7, 0x9B3A, 0xF6A8, 0x9B52, 0xF6A9, 0x9C2B, 0xF6AA, 0x9C1D, - 0xF6AB, 0x9C1C, 0xF6AC, 0x9C2C, 0xF6AD, 0x9C23, 0xF6AE, 0x9C28, - 0xF6AF, 0x9C29, 0xF6B0, 0x9C24, 0xF6B1, 0x9C21, 0xF6B2, 0x9DB7, - 0xF6B3, 0x9DB6, 0xF6B4, 0x9DBC, 0xF6B5, 0x9DC1, 0xF6B6, 0x9DC7, - 0xF6B7, 0x9DCA, 0xF6B8, 0x9DCF, 0xF6B9, 0x9DBE, 0xF6BA, 0x9DC5, - 0xF6BB, 0x9DC3, 0xF6BC, 0x9DBB, 0xF6BD, 0x9DB5, 0xF6BE, 0x9DCE, - 0xF6BF, 0x9DB9, 0xF6C0, 0x9DBA, 0xF6C1, 0x9DAC, 0xF6C2, 0x9DC8, - 0xF6C3, 0x9DB1, 0xF6C4, 0x9DAD, 0xF6C5, 0x9DCC, 0xF6C6, 0x9DB3, - 0xF6C7, 0x9DCD, 0xF6C8, 0x9DB2, 0xF6C9, 0x9E7A, 0xF6CA, 0x9E9C, - 0xF6CB, 0x9EEB, 0xF6CC, 0x9EEE, 0xF6CD, 0x9EED, 0xF6CE, 0x9F1B, - 0xF6CF, 0x9F18, 0xF6D0, 0x9F1A, 0xF6D1, 0x9F31, 0xF6D2, 0x9F4E, - 0xF6D3, 0x9F65, 0xF6D4, 0x9F64, 0xF6D5, 0x9F92, 0xF6D6, 0x4EB9, - 0xF6D7, 0x56C6, 0xF6D8, 0x56C5, 0xF6D9, 0x56CB, 0xF6DA, 0x5971, - 0xF6DB, 0x5B4B, 0xF6DC, 0x5B4C, 0xF6DD, 0x5DD5, 0xF6DE, 0x5DD1, - 0xF6DF, 0x5EF2, 0xF6E0, 0x6521, 0xF6E1, 0x6520, 0xF6E2, 0x6526, - 0xF6E3, 0x6522, 0xF6E4, 0x6B0B, 0xF6E5, 0x6B08, 0xF6E6, 0x6B09, - 0xF6E7, 0x6C0D, 0xF6E8, 0x7055, 0xF6E9, 0x7056, 0xF6EA, 0x7057, - 0xF6EB, 0x7052, 0xF6EC, 0x721E, 0xF6ED, 0x721F, 0xF6EE, 0x72A9, - 0xF6EF, 0x737F, 0xF6F0, 0x74D8, 0xF6F1, 0x74D5, 0xF6F2, 0x74D9, - 0xF6F3, 0x74D7, 0xF6F4, 0x766D, 0xF6F5, 0x76AD, 0xF6F6, 0x7935, - 0xF6F7, 0x79B4, 0xF6F8, 0x7A70, 0xF6F9, 0x7A71, 0xF6FA, 0x7C57, - 0xF6FB, 0x7C5C, 0xF6FC, 0x7C59, 0xF6FD, 0x7C5B, 0xF6FE, 0x7C5A, - 0xF740, 0x7CF4, 0xF741, 0x7CF1, 0xF742, 0x7E91, 0xF743, 0x7F4F, - 0xF744, 0x7F87, 0xF745, 0x81DE, 0xF746, 0x826B, 0xF747, 0x8634, - 0xF748, 0x8635, 0xF749, 0x8633, 0xF74A, 0x862C, 0xF74B, 0x8632, - 0xF74C, 0x8636, 0xF74D, 0x882C, 0xF74E, 0x8828, 0xF74F, 0x8826, - 0xF750, 0x882A, 0xF751, 0x8825, 0xF752, 0x8971, 0xF753, 0x89BF, - 0xF754, 0x89BE, 0xF755, 0x89FB, 0xF756, 0x8B7E, 0xF757, 0x8B84, - 0xF758, 0x8B82, 0xF759, 0x8B86, 0xF75A, 0x8B85, 0xF75B, 0x8B7F, - 0xF75C, 0x8D15, 0xF75D, 0x8E95, 0xF75E, 0x8E94, 0xF75F, 0x8E9A, - 0xF760, 0x8E92, 0xF761, 0x8E90, 0xF762, 0x8E96, 0xF763, 0x8E97, - 0xF764, 0x8F60, 0xF765, 0x8F62, 0xF766, 0x9147, 0xF767, 0x944C, - 0xF768, 0x9450, 0xF769, 0x944A, 0xF76A, 0x944B, 0xF76B, 0x944F, - 0xF76C, 0x9447, 0xF76D, 0x9445, 0xF76E, 0x9448, 0xF76F, 0x9449, - 0xF770, 0x9446, 0xF771, 0x973F, 0xF772, 0x97E3, 0xF773, 0x986A, - 0xF774, 0x9869, 0xF775, 0x98CB, 0xF776, 0x9954, 0xF777, 0x995B, - 0xF778, 0x9A4E, 0xF779, 0x9A53, 0xF77A, 0x9A54, 0xF77B, 0x9A4C, - 0xF77C, 0x9A4F, 0xF77D, 0x9A48, 0xF77E, 0x9A4A, 0xF7A1, 0x9A49, - 0xF7A2, 0x9A52, 0xF7A3, 0x9A50, 0xF7A4, 0x9AD0, 0xF7A5, 0x9B19, - 0xF7A6, 0x9B2B, 0xF7A7, 0x9B3B, 0xF7A8, 0x9B56, 0xF7A9, 0x9B55, - 0xF7AA, 0x9C46, 0xF7AB, 0x9C48, 0xF7AC, 0x9C3F, 0xF7AD, 0x9C44, - 0xF7AE, 0x9C39, 0xF7AF, 0x9C33, 0xF7B0, 0x9C41, 0xF7B1, 0x9C3C, - 0xF7B2, 0x9C37, 0xF7B3, 0x9C34, 0xF7B4, 0x9C32, 0xF7B5, 0x9C3D, - 0xF7B6, 0x9C36, 0xF7B7, 0x9DDB, 0xF7B8, 0x9DD2, 0xF7B9, 0x9DDE, - 0xF7BA, 0x9DDA, 0xF7BB, 0x9DCB, 0xF7BC, 0x9DD0, 0xF7BD, 0x9DDC, - 0xF7BE, 0x9DD1, 0xF7BF, 0x9DDF, 0xF7C0, 0x9DE9, 0xF7C1, 0x9DD9, - 0xF7C2, 0x9DD8, 0xF7C3, 0x9DD6, 0xF7C4, 0x9DF5, 0xF7C5, 0x9DD5, - 0xF7C6, 0x9DDD, 0xF7C7, 0x9EB6, 0xF7C8, 0x9EF0, 0xF7C9, 0x9F35, - 0xF7CA, 0x9F33, 0xF7CB, 0x9F32, 0xF7CC, 0x9F42, 0xF7CD, 0x9F6B, - 0xF7CE, 0x9F95, 0xF7CF, 0x9FA2, 0xF7D0, 0x513D, 0xF7D1, 0x5299, - 0xF7D2, 0x58E8, 0xF7D3, 0x58E7, 0xF7D4, 0x5972, 0xF7D5, 0x5B4D, - 0xF7D6, 0x5DD8, 0xF7D7, 0x882F, 0xF7D8, 0x5F4F, 0xF7D9, 0x6201, - 0xF7DA, 0x6203, 0xF7DB, 0x6204, 0xF7DC, 0x6529, 0xF7DD, 0x6525, - 0xF7DE, 0x6596, 0xF7DF, 0x66EB, 0xF7E0, 0x6B11, 0xF7E1, 0x6B12, - 0xF7E2, 0x6B0F, 0xF7E3, 0x6BCA, 0xF7E4, 0x705B, 0xF7E5, 0x705A, - 0xF7E6, 0x7222, 0xF7E7, 0x7382, 0xF7E8, 0x7381, 0xF7E9, 0x7383, - 0xF7EA, 0x7670, 0xF7EB, 0x77D4, 0xF7EC, 0x7C67, 0xF7ED, 0x7C66, - 0xF7EE, 0x7E95, 0xF7EF, 0x826C, 0xF7F0, 0x863A, 0xF7F1, 0x8640, - 0xF7F2, 0x8639, 0xF7F3, 0x863C, 0xF7F4, 0x8631, 0xF7F5, 0x863B, - 0xF7F6, 0x863E, 0xF7F7, 0x8830, 0xF7F8, 0x8832, 0xF7F9, 0x882E, - 0xF7FA, 0x8833, 0xF7FB, 0x8976, 0xF7FC, 0x8974, 0xF7FD, 0x8973, - 0xF7FE, 0x89FE, 0xF840, 0x8B8C, 0xF841, 0x8B8E, 0xF842, 0x8B8B, - 0xF843, 0x8B88, 0xF844, 0x8C45, 0xF845, 0x8D19, 0xF846, 0x8E98, - 0xF847, 0x8F64, 0xF848, 0x8F63, 0xF849, 0x91BC, 0xF84A, 0x9462, - 0xF84B, 0x9455, 0xF84C, 0x945D, 0xF84D, 0x9457, 0xF84E, 0x945E, - 0xF84F, 0x97C4, 0xF850, 0x97C5, 0xF851, 0x9800, 0xF852, 0x9A56, - 0xF853, 0x9A59, 0xF854, 0x9B1E, 0xF855, 0x9B1F, 0xF856, 0x9B20, - 0xF857, 0x9C52, 0xF858, 0x9C58, 0xF859, 0x9C50, 0xF85A, 0x9C4A, - 0xF85B, 0x9C4D, 0xF85C, 0x9C4B, 0xF85D, 0x9C55, 0xF85E, 0x9C59, - 0xF85F, 0x9C4C, 0xF860, 0x9C4E, 0xF861, 0x9DFB, 0xF862, 0x9DF7, - 0xF863, 0x9DEF, 0xF864, 0x9DE3, 0xF865, 0x9DEB, 0xF866, 0x9DF8, - 0xF867, 0x9DE4, 0xF868, 0x9DF6, 0xF869, 0x9DE1, 0xF86A, 0x9DEE, - 0xF86B, 0x9DE6, 0xF86C, 0x9DF2, 0xF86D, 0x9DF0, 0xF86E, 0x9DE2, - 0xF86F, 0x9DEC, 0xF870, 0x9DF4, 0xF871, 0x9DF3, 0xF872, 0x9DE8, - 0xF873, 0x9DED, 0xF874, 0x9EC2, 0xF875, 0x9ED0, 0xF876, 0x9EF2, - 0xF877, 0x9EF3, 0xF878, 0x9F06, 0xF879, 0x9F1C, 0xF87A, 0x9F38, - 0xF87B, 0x9F37, 0xF87C, 0x9F36, 0xF87D, 0x9F43, 0xF87E, 0x9F4F, - 0xF8A1, 0x9F71, 0xF8A2, 0x9F70, 0xF8A3, 0x9F6E, 0xF8A4, 0x9F6F, - 0xF8A5, 0x56D3, 0xF8A6, 0x56CD, 0xF8A7, 0x5B4E, 0xF8A8, 0x5C6D, - 0xF8A9, 0x652D, 0xF8AA, 0x66ED, 0xF8AB, 0x66EE, 0xF8AC, 0x6B13, - 0xF8AD, 0x705F, 0xF8AE, 0x7061, 0xF8AF, 0x705D, 0xF8B0, 0x7060, - 0xF8B1, 0x7223, 0xF8B2, 0x74DB, 0xF8B3, 0x74E5, 0xF8B4, 0x77D5, - 0xF8B5, 0x7938, 0xF8B6, 0x79B7, 0xF8B7, 0x79B6, 0xF8B8, 0x7C6A, - 0xF8B9, 0x7E97, 0xF8BA, 0x7F89, 0xF8BB, 0x826D, 0xF8BC, 0x8643, - 0xF8BD, 0x8838, 0xF8BE, 0x8837, 0xF8BF, 0x8835, 0xF8C0, 0x884B, - 0xF8C1, 0x8B94, 0xF8C2, 0x8B95, 0xF8C3, 0x8E9E, 0xF8C4, 0x8E9F, - 0xF8C5, 0x8EA0, 0xF8C6, 0x8E9D, 0xF8C7, 0x91BE, 0xF8C8, 0x91BD, - 0xF8C9, 0x91C2, 0xF8CA, 0x946B, 0xF8CB, 0x9468, 0xF8CC, 0x9469, - 0xF8CD, 0x96E5, 0xF8CE, 0x9746, 0xF8CF, 0x9743, 0xF8D0, 0x9747, - 0xF8D1, 0x97C7, 0xF8D2, 0x97E5, 0xF8D3, 0x9A5E, 0xF8D4, 0x9AD5, - 0xF8D5, 0x9B59, 0xF8D6, 0x9C63, 0xF8D7, 0x9C67, 0xF8D8, 0x9C66, - 0xF8D9, 0x9C62, 0xF8DA, 0x9C5E, 0xF8DB, 0x9C60, 0xF8DC, 0x9E02, - 0xF8DD, 0x9DFE, 0xF8DE, 0x9E07, 0xF8DF, 0x9E03, 0xF8E0, 0x9E06, - 0xF8E1, 0x9E05, 0xF8E2, 0x9E00, 0xF8E3, 0x9E01, 0xF8E4, 0x9E09, - 0xF8E5, 0x9DFF, 0xF8E6, 0x9DFD, 0xF8E7, 0x9E04, 0xF8E8, 0x9EA0, - 0xF8E9, 0x9F1E, 0xF8EA, 0x9F46, 0xF8EB, 0x9F74, 0xF8EC, 0x9F75, - 0xF8ED, 0x9F76, 0xF8EE, 0x56D4, 0xF8EF, 0x652E, 0xF8F0, 0x65B8, - 0xF8F1, 0x6B18, 0xF8F2, 0x6B19, 0xF8F3, 0x6B17, 0xF8F4, 0x6B1A, - 0xF8F5, 0x7062, 0xF8F6, 0x7226, 0xF8F7, 0x72AA, 0xF8F8, 0x77D8, - 0xF8F9, 0x77D9, 0xF8FA, 0x7939, 0xF8FB, 0x7C69, 0xF8FC, 0x7C6B, - 0xF8FD, 0x7CF6, 0xF8FE, 0x7E9A, 0xF940, 0x7E98, 0xF941, 0x7E9B, - 0xF942, 0x7E99, 0xF943, 0x81E0, 0xF944, 0x81E1, 0xF945, 0x8646, - 0xF946, 0x8647, 0xF947, 0x8648, 0xF948, 0x8979, 0xF949, 0x897A, - 0xF94A, 0x897C, 0xF94B, 0x897B, 0xF94C, 0x89FF, 0xF94D, 0x8B98, - 0xF94E, 0x8B99, 0xF94F, 0x8EA5, 0xF950, 0x8EA4, 0xF951, 0x8EA3, - 0xF952, 0x946E, 0xF953, 0x946D, 0xF954, 0x946F, 0xF955, 0x9471, - 0xF956, 0x9473, 0xF957, 0x9749, 0xF958, 0x9872, 0xF959, 0x995F, - 0xF95A, 0x9C68, 0xF95B, 0x9C6E, 0xF95C, 0x9C6D, 0xF95D, 0x9E0B, - 0xF95E, 0x9E0D, 0xF95F, 0x9E10, 0xF960, 0x9E0F, 0xF961, 0x9E12, - 0xF962, 0x9E11, 0xF963, 0x9EA1, 0xF964, 0x9EF5, 0xF965, 0x9F09, - 0xF966, 0x9F47, 0xF967, 0x9F78, 0xF968, 0x9F7B, 0xF969, 0x9F7A, - 0xF96A, 0x9F79, 0xF96B, 0x571E, 0xF96C, 0x7066, 0xF96D, 0x7C6F, - 0xF96E, 0x883C, 0xF96F, 0x8DB2, 0xF970, 0x8EA6, 0xF971, 0x91C3, - 0xF972, 0x9474, 0xF973, 0x9478, 0xF974, 0x9476, 0xF975, 0x9475, - 0xF976, 0x9A60, 0xF977, 0x9C74, 0xF978, 0x9C73, 0xF979, 0x9C71, - 0xF97A, 0x9C75, 0xF97B, 0x9E14, 0xF97C, 0x9E13, 0xF97D, 0x9EF6, - 0xF97E, 0x9F0A, 0xF9A1, 0x9FA4, 0xF9A2, 0x7068, 0xF9A3, 0x7065, - 0xF9A4, 0x7CF7, 0xF9A5, 0x866A, 0xF9A6, 0x883E, 0xF9A7, 0x883D, - 0xF9A8, 0x883F, 0xF9A9, 0x8B9E, 0xF9AA, 0x8C9C, 0xF9AB, 0x8EA9, - 0xF9AC, 0x8EC9, 0xF9AD, 0x974B, 0xF9AE, 0x9873, 0xF9AF, 0x9874, - 0xF9B0, 0x98CC, 0xF9B1, 0x9961, 0xF9B2, 0x99AB, 0xF9B3, 0x9A64, - 0xF9B4, 0x9A66, 0xF9B5, 0x9A67, 0xF9B6, 0x9B24, 0xF9B7, 0x9E15, - 0xF9B8, 0x9E17, 0xF9B9, 0x9F48, 0xF9BA, 0x6207, 0xF9BB, 0x6B1E, - 0xF9BC, 0x7227, 0xF9BD, 0x864C, 0xF9BE, 0x8EA8, 0xF9BF, 0x9482, - 0xF9C0, 0x9480, 0xF9C1, 0x9481, 0xF9C2, 0x9A69, 0xF9C3, 0x9A68, - 0xF9C4, 0x9B2E, 0xF9C5, 0x9E19, 0xF9C6, 0x7229, 0xF9C7, 0x864B, - 0xF9C8, 0x8B9F, 0xF9C9, 0x9483, 0xF9CA, 0x9C79, 0xF9CB, 0x9EB7, - 0xF9CC, 0x7675, 0xF9CD, 0x9A6B, 0xF9CE, 0x9C7A, 0xF9CF, 0x9E1D, - 0xF9D0, 0x7069, 0xF9D1, 0x706A, 0xF9D2, 0x9EA4, 0xF9D3, 0x9F7E, - 0xF9D4, 0x9F49, 0xF9D5, 0x9F98, 0xF9D6, 0x7881, 0xF9D7, 0x92B9, - 0xF9D8, 0x88CF, 0xF9D9, 0x58BB, 0xF9DA, 0x6052, 0xF9DB, 0x7CA7, - 0xF9DC, 0x5AFA, 0xF9DD, 0x2554, 0xF9DE, 0x2566, 0xF9DF, 0x2557, - 0xF9E0, 0x2560, 0xF9E1, 0x256C, 0xF9E2, 0x2563, 0xF9E3, 0x255A, - 0xF9E4, 0x2569, 0xF9E5, 0x255D, 0xF9E6, 0x2552, 0xF9E7, 0x2564, - 0xF9E8, 0x2555, 0xF9E9, 0x255E, 0xF9EA, 0x256A, 0xF9EB, 0x2561, - 0xF9EC, 0x2558, 0xF9ED, 0x2567, 0xF9EE, 0x255B, 0xF9EF, 0x2553, - 0xF9F0, 0x2565, 0xF9F1, 0x2556, 0xF9F2, 0x255F, 0xF9F3, 0x256B, - 0xF9F4, 0x2562, 0xF9F5, 0x2559, 0xF9F6, 0x2568, 0xF9F7, 0x255C, - 0xF9F8, 0x2551, 0xF9F9, 0x2550, 0xF9FA, 0x256D, 0xF9FB, 0x256E, - 0xF9FC, 0x2570, 0xF9FD, 0x256F, 0xF9FE, 0x2593, 0, 0 -}; - - - -WCHAR ff_convert ( /* Converted code, 0 means conversion error */ - WCHAR chr, /* Character code to be converted */ - UINT dir /* 0: Unicode to OEM code, 1: OEM code to Unicode */ -) -{ - const WCHAR *p; - WCHAR c; - int i, n, li, hi; - - - if (chr < 0x80) { /* ASCII */ - c = chr; - } else { - if (dir) { /* OEM code to unicode */ - p = oem2uni; - hi = sizeof oem2uni / 4 - 1; - } else { /* Unicode to OEM code */ - p = uni2oem; - hi = sizeof uni2oem / 4 - 1; - } - li = 0; - for (n = 16; n; n--) { - i = li + (hi - li) / 2; - if (chr == p[i * 2]) break; - if (chr > p[i * 2]) - li = i; - else - hi = i; - } - c = n ? p[i * 2 + 1] : 0; - } - - return c; -} - - - - -WCHAR ff_wtoupper ( - WCHAR chr /* Unicode character to be upper converted */ -) -{ - static const WCHAR lower[] = { /* Lower case characters to be converted */ - /* Latin Supplement */ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, - /* Latin Extended-A */ 0x101,0x103,0x105,0x107,0x109,0x10B,0x10D,0x10F,0x111,0x113,0x115,0x117,0x119,0x11B,0x11D,0x11F,0x121,0x123,0x125,0x127,0x129,0x12B,0x12D,0x12F,0x131,0x133,0x135,0x137,0x13A,0x13C,0x13E,0x140,0x142,0x144,0x146,0x148,0x14B,0x14D,0x14F,0x151,0x153,0x155,0x157,0x159,0x15B,0x15D,0x15F,0x161,0x163,0x165,0x167,0x169,0x16B,0x16D,0x16F,0x171,0x173,0x175,0x177,0x17A,0x17C,0x17E, - /* Latin Extended-B */ 0x183,0x185,0x188,0x18C,0x192,0x199,0x1A1,0x1A3,0x1A8,0x1AD,0x1B0,0x1B4,0x1B6,0x1B9,0x1BD,0x1C6,0x1C9,0x1CC,0x1CE,0x1D0,0x1D2,0x1D4,0x1D6,0x1D8,0x1DA,0x1DC,0x1DD,0x1DF,0x1E1,0x1E3,0x1E5,0x1E7,0x1E9,0x1EB,0x1ED,0x1EF,0x1F3,0x1F5,0x1FB,0x1FD,0x1FF,0x201,0x203,0x205,0x207,0x209,0x20B,0x20D,0x20F,0x211,0x213,0x215,0x217, - /* Greek, Coptic */ 0x3B1,0x3B2,0x3B3,0x3B4,0x3B5,0x3B6,0x3B7,0x3B8,0x3B9,0x3BA,0x3BB,0x3BC,0x3BD,0x3BE,0x3BF,0x3C0,0x3C1,0x3C3,0x3C4,0x3C5,0x3C6,0x3C7,0x3C8,0x3C9,0x3CA,0x3CB,0x3CC,0x3CD,0x3CE,0x3E3,0x3E5,0x3E7,0x3E9,0x3EB, - /* Cyrillic */ 0x430,0x431,0x432,0x433,0x434,0x435,0x436,0x437,0x438,0x439,0x43A,0x43B,0x43C,0x43D,0x43E,0x43F,0x440,0x441,0x442,0x443,0x444,0x445,0x446,0x447,0x448,0x449,0x44A,0x44B,0x44C,0x44D,0x44E,0x44F,0x452,0x453,0x454,0x455,0x456,0x457,0x458,0x459,0x45A,0x45B,0x45C,0x45E,0x45F,0x461,0x463,0x465,0x467,0x469,0x46B,0x46D,0x46F,0x471,0x473,0x475,0x477,0x479,0x47B,0x47D,0x47F,0x481,0x491,0x493,0x495,0x497,0x499,0x49B,0x49D,0x49F,0x4A1,0x4A3,0x4A5,0x4A7,0x4A9,0x4AB,0x4AD,0x4AF,0x4B1,0x4B3,0x4B5,0x4B7,0x4B9,0x4BB,0x4BD,0x4BF,0x4C2,0x4C4,0x4C8,0x4D1,0x4D3,0x4D5,0x4D7,0x4D9,0x4DB,0x4DD,0x4DF,0x4E1,0x4E3,0x4E5,0x4E7,0x4E9,0x4EB,0x4ED,0x4EF,0x4F1,0x4F3,0x4F5,0x4F9, - /* Armenian */ 0x561,0x562,0x563,0x564,0x565,0x566,0x567,0x568,0x569,0x56A,0x56B,0x56C,0x56D,0x56E,0x56F,0x570,0x571,0x572,0x573,0x574,0x575,0x576,0x577,0x578,0x579,0x57A,0x57B,0x57C,0x57D,0x57E,0x57F,0x580,0x581,0x582,0x583,0x584,0x585,0x586, - /* Latin Extended Additional */ 0x1E01,0x1E03,0x1E05,0x1E07,0x1E09,0x1E0B,0x1E0D,0x1E0F,0x1E11,0x1E13,0x1E15,0x1E17,0x1E19,0x1E1B,0x1E1D,0x1E1F,0x1E21,0x1E23,0x1E25,0x1E27,0x1E29,0x1E2B,0x1E2D,0x1E2F,0x1E31,0x1E33,0x1E35,0x1E37,0x1E39,0x1E3B,0x1E3D,0x1E3F,0x1E41,0x1E43,0x1E45,0x1E47,0x1E49,0x1E4B,0x1E4D,0x1E4F,0x1E51,0x1E53,0x1E55,0x1E57,0x1E59,0x1E5B,0x1E5D,0x1E5F,0x1E61,0x1E63,0x1E65,0x1E67,0x1E69,0x1E6B,0x1E6D,0x1E6F,0x1E71,0x1E73,0x1E75,0x1E77,0x1E79,0x1E7B,0x1E7D,0x1E7F,0x1E81,0x1E83,0x1E85,0x1E87,0x1E89,0x1E8B,0x1E8D,0x1E8F,0x1E91,0x1E93,0x1E95,0x1E97,0x1E99,0x1E9B,0x1E9D,0x1E9F,0x1EA1,0x1EA3,0x1EA5,0x1EA7,0x1EA9,0x1EAB,0x1EAD,0x1EAF,0x1EB1,0x1EB3,0x1EB5,0x1EB7,0x1EB9,0x1EBB,0x1EBD,0x1EBF,0x1EC1,0x1EC3,0x1EC5,0x1EC7,0x1EC9,0x1ECB,0x1ECD,0x1ECF,0x1ED1,0x1ED3,0x1ED5,0x1ED7,0x1ED9,0x1EDB,0x1EDD,0x1EDF,0x1EE1,0x1EE3,0x1EE5,0x1EE7,0x1EE9,0x1EEB,0x1EED,0x1EEF,0x1EF1,0x1EF3,0x1EF5,0x1EF7,0x1EF9, - /* Number forms */ 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178,0x2179,0x217A,0x217B,0x217C,0x217D,0x217E,0x217F, - /* Full-width */ 0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58,0xFF59,0xFF5A - }; - static const WCHAR upper[] = { /* Upper case characters correspond to lower[] */ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x178, - 0x100,0x102,0x104,0x106,0x108,0x10A,0x10C,0x10E,0x110,0x112,0x114,0x116,0x118,0x11A,0x11C,0x11E,0x120,0x122,0x124,0x126,0x128,0x12A,0x12C,0x12E,0x130,0x132,0x134,0x136,0x139,0x13B,0x13D,0x13F,0x141,0x143,0x145,0x147,0x14A,0x14C,0x14E,0x150,0x152,0x154,0x156,0x158,0x15A,0x15C,0x15E,0x160,0x162,0x164,0x166,0x168,0x16A,0x16C,0x16E,0x170,0x172,0x174,0x176,0x179,0x17B,0x17D, - 0x182,0x184,0x187,0x18B,0x191,0x198,0x1A0,0x1A2,0x1A7,0x1AC,0x1AF,0x1B3,0x1B5,0x1B8,0x1BC,0x1C4,0x1C7,0x1CA,0x1CD,0x1CF,0x1D1,0x1D3,0x1D5,0x1D7,0x1D9,0x1DB,0x18E,0x1DE,0x1E0,0x1E2,0x1E4,0x1E6,0x1E8,0x1EA,0x1EC,0x1EE,0x1F1,0x1F4,0x1FA,0x1FC,0x1FE,0x200,0x202,0x204,0x206,0x208,0x20A,0x20C,0x20E,0x210,0x212,0x214,0x216, - 0x391,0x392,0x393,0x394,0x395,0x396,0x397,0x398,0x399,0x39A,0x39B,0x39C,0x39D,0x39E,0x39F,0x3A0,0x3A1,0x3A3,0x3A4,0x3A5,0x3A6,0x3A7,0x3A8,0x3A9,0x3AA,0x3AB,0x38C,0x38E,0x38F,0x3E2,0x3E4,0x3E6,0x3E8,0x3EA, - 0x410,0x411,0x412,0x413,0x414,0x415,0x416,0x417,0x418,0x419,0x41A,0x41B,0x41C,0x41D,0x41E,0x41F,0x420,0x421,0x422,0x423,0x424,0x425,0x426,0x427,0x428,0x429,0x42A,0x42B,0x42C,0x42D,0x42E,0x42F,0x402,0x403,0x404,0x405,0x406,0x407,0x408,0x409,0x40A,0x40B,0x40C,0x40E,0x40F,0x460,0x462,0x464,0x466,0x468,0x46A,0x46C,0x46E,0x470,0x472,0x474,0x476,0x478,0x47A,0x47C,0x47E,0x480,0x490,0x492,0x494,0x496,0x498,0x49A,0x49C,0x49E,0x4A0,0x4A2,0x4A4,0x4A6,0x4A8,0x4AA,0x4AC,0x4AE,0x4B0,0x4B2,0x4B4,0x4B6,0x4B8,0x4BA,0x4BC,0x4BE,0x4C1,0x4C3,0x5C7,0x4D0,0x4D2,0x4D4,0x4D6,0x4D8,0x4DA,0x4DC,0x4DE,0x4E0,0x4E2,0x4E4,0x4E6,0x4E8,0x4EA,0x4EC,0x4EE,0x4F0,0x4F2,0x4F4,0x4F8, - 0x531,0x532,0x533,0x534,0x535,0x536,0x537,0x538,0x539,0x53A,0x53B,0x53C,0x53D,0x53E,0x53F,0x540,0x541,0x542,0x543,0x544,0x545,0x546,0x547,0x548,0x549,0x54A,0x54B,0x54C,0x54D,0x54E,0x54F,0x550,0x551,0x552,0x553,0x554,0x555,0x556, - 0x1E00,0x1E02,0x1E04,0x1E06,0x1E08,0x1E0A,0x1E0C,0x1E0E,0x1E10,0x1E12,0x1E14,0x1E16,0x1E18,0x1E1A,0x1E1C,0x1E1E,0x1E20,0x1E22,0x1E24,0x1E26,0x1E28,0x1E2A,0x1E2C,0x1E2E,0x1E30,0x1E32,0x1E34,0x1E36,0x1E38,0x1E3A,0x1E3C,0x1E3E,0x1E40,0x1E42,0x1E44,0x1E46,0x1E48,0x1E4A,0x1E4C,0x1E4E,0x1E50,0x1E52,0x1E54,0x1E56,0x1E58,0x1E5A,0x1E5C,0x1E5E,0x1E60,0x1E62,0x1E64,0x1E66,0x1E68,0x1E6A,0x1E6C,0x1E6E,0x1E70,0x1E72,0x1E74,0x1E76,0x1E78,0x1E7A,0x1E7C,0x1E7E,0x1E80,0x1E82,0x1E84,0x1E86,0x1E88,0x1E8A,0x1E8C,0x1E8E,0x1E90,0x1E92,0x1E94,0x1E96,0x1E98,0x1E9A,0x1E9C,0x1E9E,0x1EA0,0x1EA2,0x1EA4,0x1EA6,0x1EA8,0x1EAA,0x1EAC,0x1EAE,0x1EB0,0x1EB2,0x1EB4,0x1EB6,0x1EB8,0x1EBA,0x1EBC,0x1EBE,0x1EC0,0x1EC2,0x1EC4,0x1EC6,0x1EC8,0x1ECA,0x1ECC,0x1ECE,0x1ED0,0x1ED2,0x1ED4,0x1ED6,0x1ED8,0x1EDA,0x1EDC,0x1EDE,0x1EE0,0x1EE2,0x1EE4,0x1EE6,0x1EE8,0x1EEA,0x1EEC,0x1EEE,0x1EF0,0x1EF2,0x1EF4,0x1EF6,0x1EF8, - 0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x216A,0x216B,0x216C,0x216D,0x216E,0x216F, - 0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,0xFF3A - }; - UINT i, n, hi, li; - - - if (chr < 0x80) { /* ASCII characters (acceleration) */ - if (chr >= 0x61 && chr <= 0x7A) chr -= 0x20; - - } else { /* Extended characters */ - n = 12; li = 0; hi = sizeof lower / sizeof lower[0]; - do { - i = li + (hi - li) / 2; - if (chr == lower[i]) break; - if (chr > lower[i]) li = i; else hi = i; - } while (--n); - if (n) chr = upper[i]; - } - - return chr; -} - diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/ccsbcs.c b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/ccsbcs.c deleted file mode 100644 index f0c479c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/ccsbcs.c +++ /dev/null @@ -1,348 +0,0 @@ -/*------------------------------------------------------------------------*/ -/* Unicode - Local code bidirectional converter (C)ChaN, 2015 */ -/* (SBCS code pages) */ -/*------------------------------------------------------------------------*/ -/* 437 U.S. -/ 720 Arabic -/ 737 Greek -/ 771 KBL -/ 775 Baltic -/ 850 Latin 1 -/ 852 Latin 2 -/ 855 Cyrillic -/ 857 Turkish -/ 860 Portuguese -/ 861 Icelandic -/ 862 Hebrew -/ 863 Canadian French -/ 864 Arabic -/ 865 Nordic -/ 866 Russian -/ 869 Greek 2 -*/ - -#include "ff.h" - - -#if _CODE_PAGE == 437 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP437(0x80-0xFF) to Unicode conversion table */ - 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, - 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, - 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, - 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, - 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 720 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP720(0x80-0xFF) to Unicode conversion table */ - 0x0000, 0x0000, 0x00E9, 0x00E2, 0x0000, 0x00E0, 0x0000, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0651, 0x0652, 0x00F4, 0x00A4, 0x0640, 0x00FB, 0x00F9, 0x0621, 0x0622, 0x0623, 0x0624, 0x00A3, 0x0625, 0x0626, 0x0627, - 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, - 0x0636, 0x0637, 0x0638, 0x0639, 0x063A, 0x0641, 0x00B5, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064A, - 0x2261, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 0x0650, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 737 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP737(0x80-0xFF) to Unicode conversion table */ - 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, - 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, - 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, - 0x03C9, 0x03AC, 0x03AD, 0x03AE, 0x03CA, 0x03AF, 0x03CC, 0x03CD, 0x03CB, 0x03CE, 0x0386, 0x0388, 0x0389, 0x038A, 0x038C, 0x038E, - 0x038F, 0x00B1, 0x2265, 0x2264, 0x03AA, 0x03AB, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 771 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP771(0x80-0xFF) to Unicode conversion table */ - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x0104, 0x0105, 0x010C, 0x010D, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, - 0x0118, 0x0119, 0x0116, 0x0117, 0x012E, 0x012F, 0x0160, 0x0161, 0x0172, 0x0173, 0x016A, 0x016B, 0x017D, 0x017E, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 775 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP775(0x80-0xFF) to Unicode conversion table */ - 0x0106, 0x00FC, 0x00E9, 0x0101, 0x00E4, 0x0123, 0x00E5, 0x0107, 0x0142, 0x0113, 0x0156, 0x0157, 0x012B, 0x0179, 0x00C4, 0x00C5, - 0x00C9, 0x00E6, 0x00C6, 0x014D, 0x00F6, 0x0122, 0x00A2, 0x015A, 0x015B, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x00A4, - 0x0100, 0x012A, 0x00F3, 0x017B, 0x017C, 0x017A, 0x201D, 0x00A6, 0x00A9, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x0141, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010C, 0x0118, 0x0116, 0x2563, 0x2551, 0x2557, 0x255D, 0x012E, 0x0160, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0172, 0x016A, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x017D, - 0x0105, 0x010D, 0x0119, 0x0117, 0x012F, 0x0161, 0x0173, 0x016B, 0x017E, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, - 0x00D3, 0x00DF, 0x014C, 0x0143, 0x00F5, 0x00D5, 0x00B5, 0x0144, 0x0136, 0x0137, 0x013B, 0x013C, 0x0146, 0x0112, 0x0145, 0x2019, - 0x00AD, 0x00B1, 0x201C, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x201E, 0x00B0, 0x2219, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 850 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP850(0x80-0xFF) to Unicode conversion table */ - 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, - 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192, - 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, - 0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x0131, 0x00CD, 0x00CE, 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, - 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4, - 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 852 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP852(0x80-0xFF) to Unicode conversion table */ - 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x016F, 0x0107, 0x00E7, 0x0142, 0x00EB, 0x0150, 0x0151, 0x00EE, 0x0179, 0x00C4, 0x0106, - 0x00C9, 0x0139, 0x013A, 0x00F4, 0x00F6, 0x013D, 0x013E, 0x015A, 0x015B, 0x00D6, 0x00DC, 0x0164, 0x0165, 0x0141, 0x00D7, 0x010D, - 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x0104, 0x0105, 0x017D, 0x017E, 0x0118, 0x0119, 0x00AC, 0x017A, 0x010C, 0x015F, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x011A, 0x015E, 0x2563, 0x2551, 0x2557, 0x255D, 0x017B, 0x017C, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0102, 0x0103, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, - 0x0111, 0x0110, 0x010E, 0x00CB, 0x010F, 0x0147, 0x00CD, 0x00CE, 0x011B, 0x2518, 0x250C, 0x2588, 0x2584, 0x0162, 0x016E, 0x2580, - 0x00D3, 0x00DF, 0x00D4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161, 0x0154, 0x00DA, 0x0155, 0x0170, 0x00FD, 0x00DD, 0x0163, 0x00B4, - 0x00AD, 0x02DD, 0x02DB, 0x02C7, 0x02D8, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x02D9, 0x0171, 0x0158, 0x0159, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 855 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP855(0x80-0xFF) to Unicode conversion table */ - 0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404, 0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408, - 0x0459, 0x0409, 0x045A, 0x040A, 0x045B, 0x040B, 0x045C, 0x040C, 0x045E, 0x040E, 0x045F, 0x040F, 0x044E, 0x042E, 0x044A, 0x042A, - 0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414, 0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438, 0x0418, 0x2563, 0x2551, 0x2557, 0x255D, 0x0439, 0x0419, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x043A, 0x041A, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, - 0x043B, 0x041B, 0x043C, 0x041C, 0x043D, 0x041D, 0x043E, 0x041E, 0x043F, 0x2518, 0x250C, 0x2588, 0x2584, 0x041F, 0x044F, 0x2580, - 0x042F, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443, 0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044C, 0x042C, 0x2116, - 0x00AD, 0x044B, 0x042B, 0x0437, 0x0417, 0x0448, 0x0428, 0x044D, 0x042D, 0x0449, 0x0429, 0x0447, 0x0427, 0x00A7, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 857 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP857(0x80-0xFF) to Unicode conversion table */ - 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0131, 0x00C4, 0x00C5, - 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x0130, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x015E, 0x015F, - 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x011E, 0x011F, 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, - 0x00BA, 0x00AA, 0x00CA, 0x00CB, 0x00C8, 0x0000, 0x00CD, 0x00CE, 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, - 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x0000, 0x00D7, 0x00DA, 0x00DB, 0x00D9, 0x00EC, 0x00FF, 0x00AF, 0x00B4, - 0x00AD, 0x00B1, 0x0000, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 860 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP860(0x80-0xFF) to Unicode conversion table */ - 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E3, 0x00E0, 0x00C1, 0x00E7, 0x00EA, 0x00CA, 0x00E8, 0x00CD, 0x00D4, 0x00EC, 0x00C3, 0x00C2, - 0x00C9, 0x00C0, 0x00C8, 0x00F4, 0x00F5, 0x00F2, 0x00DA, 0x00F9, 0x00CC, 0x00D5, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x20A7, 0x00D3, - 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x00D2, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, - 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, - 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 861 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP861(0x80-0xFF) to Unicode conversion table */ - 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E6, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00D0, 0x00F0, 0x00DE, 0x00C4, 0x00C5, - 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00FE, 0x00FB, 0x00DD, 0x00FD, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192, - 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00C1, 0x00CD, 0x00D3, 0x00DA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, - 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, - 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 862 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP862(0x80-0xFF) to Unicode conversion table */ - 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, - 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, - 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, - 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, - 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 863 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP863(0x80-0xFF) to Unicode conversion table */ - 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00C2, 0x00E0, 0x00B6, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x2017, 0x00C0, - 0x00C9, 0x00C8, 0x00CA, 0x00F4, 0x00CB, 0x00CF, 0x00FB, 0x00F9, 0x00A4, 0x00D4, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x00DB, 0x0192, - 0x00A6, 0x00B4, 0x00F3, 0x00FA, 0x00A8, 0x00BB, 0x00B3, 0x00AF, 0x00CE, 0x3210, 0x00AC, 0x00BD, 0x00BC, 0x00BE, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, - 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2219, - 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 864 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP864(0x80-0xFF) to Unicode conversion table */ - 0x00B0, 0x00B7, 0x2219, 0x221A, 0x2592, 0x2500, 0x2502, 0x253C, 0x2524, 0x252C, 0x251C, 0x2534, 0x2510, 0x250C, 0x2514, 0x2518, - 0x03B2, 0x221E, 0x03C6, 0x00B1, 0x00BD, 0x00BC, 0x2248, 0x00AB, 0x00BB, 0xFEF7, 0xFEF8, 0x0000, 0x0000, 0xFEFB, 0xFEFC, 0x0000, - 0x00A0, 0x00AD, 0xFE82, 0x00A3, 0x00A4, 0xFE84, 0x0000, 0x20AC, 0xFE8E, 0xFE8F, 0xFE95, 0xFE99, 0x060C, 0xFE9D, 0xFEA1, 0xFEA5, - 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, 0x0668, 0x0669, 0xFED1, 0x061B, 0xFEB1, 0xFEB5, 0xFEB9, 0x061F, - 0x00A2, 0xFE80, 0xFE81, 0xFE83, 0xFE85, 0xFECA, 0xFE8B, 0xFE8D, 0xFE91, 0xFE93, 0xFE97, 0xFE9B, 0xFE9F, 0xFEA3, 0xFEA7, 0xFEA9, - 0xFEAB, 0xFEAD, 0xFEAF, 0xFEB3, 0xFEB7, 0xFEBB, 0xFEBF, 0xFEC1, 0xFEC5, 0xFECB, 0xFECF, 0x00A6, 0x00AC, 0x00F7, 0x00D7, 0xFEC9, - 0x0640, 0xFED3, 0xFED7, 0xFEDB, 0xFEDF, 0xFEE3, 0xFEE7, 0xFEEB, 0xFEED, 0xFEEF, 0xFEF3, 0xFEBD, 0xFECC, 0xFECE, 0xFECD, 0xFEE1, - 0xFE7D, 0x0651, 0xFEE5, 0xFEE9, 0xFEEC, 0xFEF0, 0xFEF2, 0xFED0, 0xFED5, 0xFEF5, 0xFEF6, 0xFEDD, 0xFED9, 0xFEF1, 0x25A0, 0x0000 -}; - -#elif _CODE_PAGE == 865 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP865(0x80-0xFF) to Unicode conversion table */ - 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, - 0x00C5, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192, - 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00A4, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, - 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, - 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 866 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP866(0x80-0xFF) to Unicode conversion table */ - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, - 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040E, 0x045E, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x2116, 0x00A4, 0x25A0, 0x00A0 -}; - -#elif _CODE_PAGE == 869 -#define _TBLDEF 1 -static -const WCHAR Tbl[] = { /* CP869(0x80-0xFF) to Unicode conversion table */ - 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x0386, 0x00B7, 0x00B7, 0x00AC, 0x00A6, 0x2018, 0x2019, 0x0388, 0x2015, 0x0389, - 0x038A, 0x03AA, 0x038C, 0x00B7, 0x00B7, 0x038E, 0x03AB, 0x00A9, 0x038F, 0x00B2, 0x00B3, 0x03AC, 0x00A3, 0x03AD, 0x03AE, 0x03AF, - 0x03CA, 0x0390, 0x03CC, 0x03CD, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x00BD, 0x0398, 0x0399, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x039A, 0x039B, 0x039C, 0x039D, 0x2563, 0x2551, 0x2557, 0x255D, 0x039E, 0x039F, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0A30, 0x03A1, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x03A3, - 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x2518, 0x250C, 0x2588, 0x2584, 0x03B4, 0x03B5, 0x2580, - 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x0384, - 0x00AD, 0x00B1, 0x03C5, 0x03C6, 0x03C7, 0x00A7, 0x03C8, 0x0385, 0x00B0, 0x00A8, 0x03C9, 0x03CB, 0x03B0, 0x03CE, 0x25A0, 0x00A0 -}; - -#endif - - -#if !_TBLDEF || !_USE_LFN -#error This file is not needed at current configuration. Remove from the project. -#endif - - - - -WCHAR ff_convert ( /* Converted character, Returns zero on error */ - WCHAR chr, /* Character code to be converted */ - UINT dir /* 0: Unicode to OEM code, 1: OEM code to Unicode */ -) -{ - WCHAR c; - - - if (chr < 0x80) { /* ASCII */ - c = chr; - - } else { - if (dir) { /* OEM code to Unicode */ - c = (chr >= 0x100) ? 0 : Tbl[chr - 0x80]; - - } else { /* Unicode to OEM code */ - for (c = 0; c < 0x80; c++) { - if (chr == Tbl[c]) break; - } - c = (c + 0x80) & 0xFF; - } - } - - return c; -} - - - - -WCHAR ff_wtoupper ( /* Returns upper converted character */ - WCHAR chr /* Unicode character to be upper converted */ -) -{ - static const WCHAR lower[] = { /* Lower case characters to be converted */ - /* Latin Supplement */ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, - /* Latin Extended-A */ 0x101,0x103,0x105,0x107,0x109,0x10B,0x10D,0x10F,0x111,0x113,0x115,0x117,0x119,0x11B,0x11D,0x11F,0x121,0x123,0x125,0x127,0x129,0x12B,0x12D,0x12F,0x131,0x133,0x135,0x137,0x13A,0x13C,0x13E,0x140,0x142,0x144,0x146,0x148,0x14B,0x14D,0x14F,0x151,0x153,0x155,0x157,0x159,0x15B,0x15D,0x15F,0x161,0x163,0x165,0x167,0x169,0x16B,0x16D,0x16F,0x171,0x173,0x175,0x177,0x17A,0x17C,0x17E, - /* Latin Extended-B */ 0x183,0x185,0x188,0x18C,0x192,0x199,0x1A1,0x1A3,0x1A8,0x1AD,0x1B0,0x1B4,0x1B6,0x1B9,0x1BD,0x1C6,0x1C9,0x1CC,0x1CE,0x1D0,0x1D2,0x1D4,0x1D6,0x1D8,0x1DA,0x1DC,0x1DD,0x1DF,0x1E1,0x1E3,0x1E5,0x1E7,0x1E9,0x1EB,0x1ED,0x1EF,0x1F3,0x1F5,0x1FB,0x1FD,0x1FF,0x201,0x203,0x205,0x207,0x209,0x20B,0x20D,0x20F,0x211,0x213,0x215,0x217, - /* Greek, Coptic */ 0x3B1,0x3B2,0x3B3,0x3B4,0x3B5,0x3B6,0x3B7,0x3B8,0x3B9,0x3BA,0x3BB,0x3BC,0x3BD,0x3BE,0x3BF,0x3C0,0x3C1,0x3C3,0x3C4,0x3C5,0x3C6,0x3C7,0x3C8,0x3C9,0x3CA,0x3CB,0x3CC,0x3CD,0x3CE,0x3E3,0x3E5,0x3E7,0x3E9,0x3EB, - /* Cyrillic */ 0x430,0x431,0x432,0x433,0x434,0x435,0x436,0x437,0x438,0x439,0x43A,0x43B,0x43C,0x43D,0x43E,0x43F,0x440,0x441,0x442,0x443,0x444,0x445,0x446,0x447,0x448,0x449,0x44A,0x44B,0x44C,0x44D,0x44E,0x44F,0x452,0x453,0x454,0x455,0x456,0x457,0x458,0x459,0x45A,0x45B,0x45C,0x45E,0x45F,0x461,0x463,0x465,0x467,0x469,0x46B,0x46D,0x46F,0x471,0x473,0x475,0x477,0x479,0x47B,0x47D,0x47F,0x481,0x491,0x493,0x495,0x497,0x499,0x49B,0x49D,0x49F,0x4A1,0x4A3,0x4A5,0x4A7,0x4A9,0x4AB,0x4AD,0x4AF,0x4B1,0x4B3,0x4B5,0x4B7,0x4B9,0x4BB,0x4BD,0x4BF,0x4C2,0x4C4,0x4C8,0x4D1,0x4D3,0x4D5,0x4D7,0x4D9,0x4DB,0x4DD,0x4DF,0x4E1,0x4E3,0x4E5,0x4E7,0x4E9,0x4EB,0x4ED,0x4EF,0x4F1,0x4F3,0x4F5,0x4F9, - /* Armenian */ 0x561,0x562,0x563,0x564,0x565,0x566,0x567,0x568,0x569,0x56A,0x56B,0x56C,0x56D,0x56E,0x56F,0x570,0x571,0x572,0x573,0x574,0x575,0x576,0x577,0x578,0x579,0x57A,0x57B,0x57C,0x57D,0x57E,0x57F,0x580,0x581,0x582,0x583,0x584,0x585,0x586, - /* Latin Extended Additional */ 0x1E01,0x1E03,0x1E05,0x1E07,0x1E09,0x1E0B,0x1E0D,0x1E0F,0x1E11,0x1E13,0x1E15,0x1E17,0x1E19,0x1E1B,0x1E1D,0x1E1F,0x1E21,0x1E23,0x1E25,0x1E27,0x1E29,0x1E2B,0x1E2D,0x1E2F,0x1E31,0x1E33,0x1E35,0x1E37,0x1E39,0x1E3B,0x1E3D,0x1E3F,0x1E41,0x1E43,0x1E45,0x1E47,0x1E49,0x1E4B,0x1E4D,0x1E4F,0x1E51,0x1E53,0x1E55,0x1E57,0x1E59,0x1E5B,0x1E5D,0x1E5F,0x1E61,0x1E63,0x1E65,0x1E67,0x1E69,0x1E6B,0x1E6D,0x1E6F,0x1E71,0x1E73,0x1E75,0x1E77,0x1E79,0x1E7B,0x1E7D,0x1E7F,0x1E81,0x1E83,0x1E85,0x1E87,0x1E89,0x1E8B,0x1E8D,0x1E8F,0x1E91,0x1E93,0x1E95,0x1E97,0x1E99,0x1E9B,0x1E9D,0x1E9F,0x1EA1,0x1EA3,0x1EA5,0x1EA7,0x1EA9,0x1EAB,0x1EAD,0x1EAF,0x1EB1,0x1EB3,0x1EB5,0x1EB7,0x1EB9,0x1EBB,0x1EBD,0x1EBF,0x1EC1,0x1EC3,0x1EC5,0x1EC7,0x1EC9,0x1ECB,0x1ECD,0x1ECF,0x1ED1,0x1ED3,0x1ED5,0x1ED7,0x1ED9,0x1EDB,0x1EDD,0x1EDF,0x1EE1,0x1EE3,0x1EE5,0x1EE7,0x1EE9,0x1EEB,0x1EED,0x1EEF,0x1EF1,0x1EF3,0x1EF5,0x1EF7,0x1EF9, - /* Number forms */ 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178,0x2179,0x217A,0x217B,0x217C,0x217D,0x217E,0x217F, - /* Full-width */ 0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58,0xFF59,0xFF5A - }; - static const WCHAR upper[] = { /* Upper case characters correspond to lower[] */ - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x178, - 0x100,0x102,0x104,0x106,0x108,0x10A,0x10C,0x10E,0x110,0x112,0x114,0x116,0x118,0x11A,0x11C,0x11E,0x120,0x122,0x124,0x126,0x128,0x12A,0x12C,0x12E,0x130,0x132,0x134,0x136,0x139,0x13B,0x13D,0x13F,0x141,0x143,0x145,0x147,0x14A,0x14C,0x14E,0x150,0x152,0x154,0x156,0x158,0x15A,0x15C,0x15E,0x160,0x162,0x164,0x166,0x168,0x16A,0x16C,0x16E,0x170,0x172,0x174,0x176,0x179,0x17B,0x17D, - 0x182,0x184,0x187,0x18B,0x191,0x198,0x1A0,0x1A2,0x1A7,0x1AC,0x1AF,0x1B3,0x1B5,0x1B8,0x1BC,0x1C4,0x1C7,0x1CA,0x1CD,0x1CF,0x1D1,0x1D3,0x1D5,0x1D7,0x1D9,0x1DB,0x18E,0x1DE,0x1E0,0x1E2,0x1E4,0x1E6,0x1E8,0x1EA,0x1EC,0x1EE,0x1F1,0x1F4,0x1FA,0x1FC,0x1FE,0x200,0x202,0x204,0x206,0x208,0x20A,0x20C,0x20E,0x210,0x212,0x214,0x216, - 0x391,0x392,0x393,0x394,0x395,0x396,0x397,0x398,0x399,0x39A,0x39B,0x39C,0x39D,0x39E,0x39F,0x3A0,0x3A1,0x3A3,0x3A4,0x3A5,0x3A6,0x3A7,0x3A8,0x3A9,0x3AA,0x3AB,0x38C,0x38E,0x38F,0x3E2,0x3E4,0x3E6,0x3E8,0x3EA, - 0x410,0x411,0x412,0x413,0x414,0x415,0x416,0x417,0x418,0x419,0x41A,0x41B,0x41C,0x41D,0x41E,0x41F,0x420,0x421,0x422,0x423,0x424,0x425,0x426,0x427,0x428,0x429,0x42A,0x42B,0x42C,0x42D,0x42E,0x42F,0x402,0x403,0x404,0x405,0x406,0x407,0x408,0x409,0x40A,0x40B,0x40C,0x40E,0x40F,0x460,0x462,0x464,0x466,0x468,0x46A,0x46C,0x46E,0x470,0x472,0x474,0x476,0x478,0x47A,0x47C,0x47E,0x480,0x490,0x492,0x494,0x496,0x498,0x49A,0x49C,0x49E,0x4A0,0x4A2,0x4A4,0x4A6,0x4A8,0x4AA,0x4AC,0x4AE,0x4B0,0x4B2,0x4B4,0x4B6,0x4B8,0x4BA,0x4BC,0x4BE,0x4C1,0x4C3,0x5C7,0x4D0,0x4D2,0x4D4,0x4D6,0x4D8,0x4DA,0x4DC,0x4DE,0x4E0,0x4E2,0x4E4,0x4E6,0x4E8,0x4EA,0x4EC,0x4EE,0x4F0,0x4F2,0x4F4,0x4F8, - 0x531,0x532,0x533,0x534,0x535,0x536,0x537,0x538,0x539,0x53A,0x53B,0x53C,0x53D,0x53E,0x53F,0x540,0x541,0x542,0x543,0x544,0x545,0x546,0x547,0x548,0x549,0x54A,0x54B,0x54C,0x54D,0x54E,0x54F,0x550,0x551,0x552,0x553,0x554,0x555,0x556, - 0x1E00,0x1E02,0x1E04,0x1E06,0x1E08,0x1E0A,0x1E0C,0x1E0E,0x1E10,0x1E12,0x1E14,0x1E16,0x1E18,0x1E1A,0x1E1C,0x1E1E,0x1E20,0x1E22,0x1E24,0x1E26,0x1E28,0x1E2A,0x1E2C,0x1E2E,0x1E30,0x1E32,0x1E34,0x1E36,0x1E38,0x1E3A,0x1E3C,0x1E3E,0x1E40,0x1E42,0x1E44,0x1E46,0x1E48,0x1E4A,0x1E4C,0x1E4E,0x1E50,0x1E52,0x1E54,0x1E56,0x1E58,0x1E5A,0x1E5C,0x1E5E,0x1E60,0x1E62,0x1E64,0x1E66,0x1E68,0x1E6A,0x1E6C,0x1E6E,0x1E70,0x1E72,0x1E74,0x1E76,0x1E78,0x1E7A,0x1E7C,0x1E7E,0x1E80,0x1E82,0x1E84,0x1E86,0x1E88,0x1E8A,0x1E8C,0x1E8E,0x1E90,0x1E92,0x1E94,0x1E96,0x1E98,0x1E9A,0x1E9C,0x1E9E,0x1EA0,0x1EA2,0x1EA4,0x1EA6,0x1EA8,0x1EAA,0x1EAC,0x1EAE,0x1EB0,0x1EB2,0x1EB4,0x1EB6,0x1EB8,0x1EBA,0x1EBC,0x1EBE,0x1EC0,0x1EC2,0x1EC4,0x1EC6,0x1EC8,0x1ECA,0x1ECC,0x1ECE,0x1ED0,0x1ED2,0x1ED4,0x1ED6,0x1ED8,0x1EDA,0x1EDC,0x1EDE,0x1EE0,0x1EE2,0x1EE4,0x1EE6,0x1EE8,0x1EEA,0x1EEC,0x1EEE,0x1EF0,0x1EF2,0x1EF4,0x1EF6,0x1EF8, - 0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x216A,0x216B,0x216C,0x216D,0x216E,0x216F, - 0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,0xFF3A - }; - UINT i, n, hi, li; - - - if (chr < 0x80) { /* ASCII characters (acceleration) */ - if (chr >= 0x61 && chr <= 0x7A) chr -= 0x20; - - } else { /* Non ASCII characters (table search) */ - n = 12; li = 0; hi = sizeof lower / sizeof lower[0]; - do { - i = li + (hi - li) / 2; - if (chr == lower[i]) break; - if (chr > lower[i]) li = i; else hi = i; - } while (--n); - if (n) chr = upper[i]; - } - - return chr; -} - diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/syncobj.c b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/syncobj.c deleted file mode 100644 index cb4d0a5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/syncobj.c +++ /dev/null @@ -1,115 +0,0 @@ -/*------------------------------------------------------------------------*/ -/* Sample code of OS dependent synchronization object controls */ -/* for FatFs R0.07a (C)ChaN, 2009 */ -/*------------------------------------------------------------------------*/ - -#include // Win32 -//#include // uC/OS-II - -#include "ff.h" - -#if _FS_REENTRANT - -/*------------------------------------------------------------------------*/ -/* Create a Synchronization Object for a Volume -/*------------------------------------------------------------------------*/ -/* This function is called in f_mount function to create a new -/ synchronization object, such as semaphore and mutex. When a FALSE is -/ returned, the f_mount function fails with FR_INT_ERR. -*/ - -BOOL ff_cre_syncobj ( /* TRUE:Function succeeded, FALSE:Could not create due to any error */ - BYTE vol, /* Corresponding logical drive being processed */ - _SYNC_t *sobj /* Pointer to return the created sync object */ -) -{ - BOOL ret; - - *sobj = CreateMutex(NULL, FALSE, NULL); // Win32 - ret = (*sobj != INVALID_HANDLE_VALUE) ? TRUE : FALSE; // - -// *sobj = VolumeSemId[vol]; // uITRON (give a static created sync object) -// ret = TRUE; // The initial value of the semaphore must be 1. - -// *sobj = OSMutexCreate(0, &err); // uC/OS-II -// ret = (err == OS_NO_ERR) ? TRUE : FALSE; // - - return ret; -} - - - -/*------------------------------------------------------------------------*/ -/* Delete a Synchronization Object */ -/*------------------------------------------------------------------------*/ -/* This function is called in f_mount function to delete a synchronization -/ object that created with ff_cre_syncobj function. When a FALSE is -/ returned, the f_mount function fails with FR_INT_ERR. -*/ - -BOOL ff_del_syncobj ( /* TRUE:Function succeeded, FALSE:Could not delete due to any error */ - _SYNC_t sobj /* Sync object tied to the logical drive to be deleted */ -) -{ - BOOL ret; - - ret = CloseHandle(sobj); // Win32 - -// ret = TRUE; // uITRON (nothing to do) - -// OSMutexDel(sobj, OS_DEL_ALWAYS, &err); // uC/OS-II -// ret = (err == OS_NO_ERR) ? TRUE : FALSE; // - - return ret; -} - - - -/*------------------------------------------------------------------------*/ -/* Request Grant to Access the Volume */ -/*------------------------------------------------------------------------*/ -/* This function is called on entering file functions to lock the volume. -/ When a FALSE is returned, the file function fails with FR_TIMEOUT. -*/ - -BOOL ff_req_grant ( /* TRUE:Got a grant to access the volume, FALSE:Could not get a grant */ - _SYNC_t sobj /* Sync object to wait */ -) -{ - BOOL ret; - - ret = (WaitForSingleObject(sobj, _TIMEOUT) == WAIT_OBJECT_0) ? TRUE : FALSE; // Win32 - -// ret = (wai_sem(sobj) == E_OK) ? TRUE : FALSE; // uITRON - -// OSMutexPend(sobj, _TIMEOUT, &err)); // uC/OS-II -// ret = (err == OS_NO_ERR) ? TRUE : FALSE; // - - return ret; -} - - - -/*------------------------------------------------------------------------*/ -/* Release Grant to Access the Volume */ -/*------------------------------------------------------------------------*/ -/* This function is called on leaving file functions to unlock the volume. -*/ - -void ff_rel_grant ( - _SYNC_t sobj /* Sync object to be signaled */ -) -{ - ReleaseMutex(sobj); // Win32 - -// sig_sem(sobj); // uITRON - -// OSMutexPost(sobj); // uC/OS-II -} - - -#else - -#error This file is not needed in this configuration. - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/syscall.c b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/syscall.c deleted file mode 100644 index 2de4175..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/syscall.c +++ /dev/null @@ -1,151 +0,0 @@ -/*------------------------------------------------------------------------*/ -/* Sample code of OS dependent controls for FatFs */ -/* (C)ChaN, 2014 */ -/*------------------------------------------------------------------------*/ - - -#include "ff.h" - - -#if _FS_REENTRANT -/*------------------------------------------------------------------------*/ -/* Create a Synchronization Object -/*------------------------------------------------------------------------*/ -/* This function is called in f_mount() function to create a new -/ synchronization object, such as semaphore and mutex. When a 0 is returned, -/ the f_mount() function fails with FR_INT_ERR. -*/ - -int ff_cre_syncobj ( /* !=0:Function succeeded, ==0:Could not create due to any error */ - BYTE vol, /* Corresponding logical drive being processed */ - _SYNC_t *sobj /* Pointer to return the created sync object */ -) -{ - int ret; - - - *sobj = CreateMutex(NULL, FALSE, NULL); /* Win32 */ - ret = (int)(*sobj != INVALID_HANDLE_VALUE); - -// *sobj = SyncObjects[vol]; /* uITRON (give a static created sync object) */ -// ret = 1; /* The initial value of the semaphore must be 1. */ - -// *sobj = OSMutexCreate(0, &err); /* uC/OS-II */ -// ret = (int)(err == OS_NO_ERR); - -// *sobj = xSemaphoreCreateMutex(); /* FreeRTOS */ -// ret = (int)(*sobj != NULL); - - return ret; -} - - - -/*------------------------------------------------------------------------*/ -/* Delete a Synchronization Object */ -/*------------------------------------------------------------------------*/ -/* This function is called in f_mount() function to delete a synchronization -/ object that created with ff_cre_syncobj function. When a 0 is returned, -/ the f_mount() function fails with FR_INT_ERR. -*/ - -int ff_del_syncobj ( /* !=0:Function succeeded, ==0:Could not delete due to any error */ - _SYNC_t sobj /* Sync object tied to the logical drive to be deleted */ -) -{ - int ret; - - - ret = CloseHandle(sobj); /* Win32 */ - -// ret = 1; /* uITRON (nothing to do) */ - -// OSMutexDel(sobj, OS_DEL_ALWAYS, &err); /* uC/OS-II */ -// ret = (int)(err == OS_NO_ERR); - -// vSemaphoreDelete(sobj); /* FreeRTOS */ -// ret = 1; - - return ret; -} - - - -/*------------------------------------------------------------------------*/ -/* Request Grant to Access the Volume */ -/*------------------------------------------------------------------------*/ -/* This function is called on entering file functions to lock the volume. -/ When a 0 is returned, the file function fails with FR_TIMEOUT. -*/ - -int ff_req_grant ( /* 1:Got a grant to access the volume, 0:Could not get a grant */ - _SYNC_t sobj /* Sync object to wait */ -) -{ - int ret; - - ret = (int)(WaitForSingleObject(sobj, _FS_TIMEOUT) == WAIT_OBJECT_0); /* Win32 */ - -// ret = (int)(wai_sem(sobj) == E_OK); /* uITRON */ - -// OSMutexPend(sobj, _FS_TIMEOUT, &err)); /* uC/OS-II */ -// ret = (int)(err == OS_NO_ERR); - -// ret = (int)(xSemaphoreTake(sobj, _FS_TIMEOUT) == pdTRUE); /* FreeRTOS */ - - return ret; -} - - - -/*------------------------------------------------------------------------*/ -/* Release Grant to Access the Volume */ -/*------------------------------------------------------------------------*/ -/* This function is called on leaving file functions to unlock the volume. -*/ - -void ff_rel_grant ( - _SYNC_t sobj /* Sync object to be signaled */ -) -{ - ReleaseMutex(sobj); /* Win32 */ - -// sig_sem(sobj); /* uITRON */ - -// OSMutexPost(sobj); /* uC/OS-II */ - -// xSemaphoreGive(sobj); /* FreeRTOS */ -} - -#endif - - - - -#if _USE_LFN == 3 /* LFN with a working buffer on the heap */ -/*------------------------------------------------------------------------*/ -/* Allocate a memory block */ -/*------------------------------------------------------------------------*/ -/* If a NULL is returned, the file function fails with FR_NOT_ENOUGH_CORE. -*/ - -void* ff_memalloc ( /* Returns pointer to the allocated memory block */ - UINT msize /* Number of bytes to allocate */ -) -{ - return malloc(msize); /* Allocate a new memory block with POSIX API */ -} - - -/*------------------------------------------------------------------------*/ -/* Free a memory block */ -/*------------------------------------------------------------------------*/ - -void ff_memfree ( - void* mblock /* Pointer to the memory block to free */ -) -{ - free(mblock); /* Discard the memory block with POSIX API */ -} - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/unicode.c b/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/unicode.c deleted file mode 100644 index a306600..0000000 --- a/Firmware/RTLGDB/USDK/component/common/file_system/fatfs/r0.10c/src/option/unicode.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "ff.h" - -#if _USE_LFN != 0 - -#if _CODE_PAGE == 932 /* Japanese Shift_JIS */ -#include "cc932.c" -#elif _CODE_PAGE == 936 /* Simplified Chinese GBK */ -#include "cc936.c" -#elif _CODE_PAGE == 949 /* Korean */ -#include "cc949.c" -#elif _CODE_PAGE == 950 /* Traditional Chinese Big5 */ -#include "cc950.c" -#else /* Single Byte Character-Set */ -#include "ccsbcs.c" -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/api/error.h b/Firmware/RTLGDB/USDK/component/common/mbed/api/error.h deleted file mode 100644 index 3a40358..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/api/error.h +++ /dev/null @@ -1,66 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_ERROR_H -#define MBED_ERROR_H - -/** To generate a fatal compile-time error, you can use the pre-processor #error directive. - * - * @code - * #error "That shouldn't have happened!" - * @endcode - * - * If the compiler evaluates this line, it will report the error and stop the compile. - * - * For example, you could use this to check some user-defined compile-time variables: - * - * @code - * #define NUM_PORTS 7 - * #if (NUM_PORTS > 4) - * #error "NUM_PORTS must be less than 4" - * #endif - * @endcode - * - * Reporting Run-Time Errors: - * To generate a fatal run-time error, you can use the mbed error() function. - * - * @code - * error("That shouldn't have happened!"); - * @endcode - * - * If the mbed running the program executes this function, it will print the - * message via the USB serial port, and then die with the blue lights of death! - * - * The message can use printf-style formatting, so you can report variables in the - * message too. For example, you could use this to check a run-time condition: - * - * @code - * if(x >= 5) { - * error("expected x to be less than 5, but got %d", x); - * } - * #endcode - */ - -#ifdef __cplusplus -extern "C" { -#endif - -void error(const char* format, ...); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/api/mbed_assert.h b/Firmware/RTLGDB/USDK/component/common/mbed/api/mbed_assert.h deleted file mode 100644 index 1bcfb09..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/api/mbed_assert.h +++ /dev/null @@ -1,50 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_ASSERT_H -#define MBED_ASSERT_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** Internal mbed assert function which is invoked when MBED_ASSERT macro failes. - * This function is active only if NDEBUG is not defined prior to including this - * assert header file. - * In case of MBED_ASSERT failing condition, the assertation message is printed - * to stderr and mbed_die() is called. - * @param expr Expresion to be checked. - * @param file File where assertation failed. - * @param line Failing assertation line number. - */ -void mbed_assert_internal(const char *expr, const char *file, int line); - -#ifdef __cplusplus -} -#endif - -#ifdef NDEBUG -#define MBED_ASSERT(expr) ((void)0) - -#else -#define MBED_ASSERT(expr) \ -do { \ - if (!(expr)) { \ - mbed_assert_internal(#expr, __FILE__, __LINE__); \ - } \ -} while (0) -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/api/rtc_time.h b/Firmware/RTLGDB/USDK/component/common/mbed/api/rtc_time.h deleted file mode 100644 index 59ab8fd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/api/rtc_time.h +++ /dev/null @@ -1,74 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** Implementation of the C time.h functions - * - * Provides mechanisms to set and read the current time, based - * on the microcontroller Real-Time Clock (RTC), plus some - * standard C manipulation and formating functions. - * - * Example: - * @code - * #include "mbed.h" - * - * int main() { - * set_time(1256729737); // Set RTC time to Wed, 28 Oct 2009 11:35:37 - * - * while(1) { - * time_t seconds = time(NULL); - * - * printf("Time as seconds since January 1, 1970 = %d\n", seconds); - * - * printf("Time as a basic string = %s", ctime(&seconds)); - * - * char buffer[32]; - * strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds)); - * printf("Time as a custom formatted string = %s", buffer); - * - * wait(1); - * } - * } - * @endcode - */ - -/** Set the current time - * - * Initialises and sets the time of the microcontroller Real-Time Clock (RTC) - * to the time represented by the number of seconds since January 1, 1970 - * (the UNIX timestamp). - * - * @param t Number of seconds since January 1, 1970 (the UNIX timestamp) - * - * Example: - * @code - * #include "mbed.h" - * - * int main() { - * set_time(1256729737); // Set time to Wed, 28 Oct 2009 11:35:37 - * } - * @endcode - */ -void set_time(time_t t); - -#ifdef __cplusplus -} -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/api/wait_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/api/wait_api.h deleted file mode 100644 index 03c2714..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/api/wait_api.h +++ /dev/null @@ -1,66 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_WAIT_API_H -#define MBED_WAIT_API_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** Generic wait functions. - * - * These provide simple NOP type wait capabilities. - * - * Example: - * @code - * #include "mbed.h" - * - * DigitalOut heartbeat(LED1); - * - * int main() { - * while (1) { - * heartbeat = 1; - * wait(0.5); - * heartbeat = 0; - * wait(0.5); - * } - * } - */ - -/** Waits for a number of seconds, with microsecond resolution (within - * the accuracy of single precision floating point). - * - * @param s number of seconds to wait - */ -void wait(float s); - -/** Waits a number of milliseconds. - * - * @param ms the whole number of milliseconds to wait - */ -void wait_ms(int ms); - -/** Waits a number of microseconds. - * - * @param us the whole number of microseconds to wait - */ -void wait_us(int us); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/common/us_ticker_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/common/us_ticker_api.c deleted file mode 100644 index 8218b9c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/common/us_ticker_api.c +++ /dev/null @@ -1,118 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include -#include "us_ticker_api.h" -#include "cmsis.h" - -static ticker_event_handler event_handler; -static ticker_event_t *head = NULL; - -void us_ticker_set_handler(ticker_event_handler handler) { - us_ticker_init(); - - event_handler = handler; -} - -void us_ticker_irq_handler(void) { - us_ticker_clear_interrupt(); - - /* Go through all the pending TimerEvents */ - while (1) { - if (head == NULL) { - // There are no more TimerEvents left, so disable matches. - us_ticker_disable_interrupt(); - return; - } - - if ((int)(head->timestamp - us_ticker_read()) <= 0) { - // This event was in the past: - // point to the following one and execute its handler - ticker_event_t *p = head; - head = head->next; - if (event_handler != NULL) { - event_handler(p->id); // NOTE: the handler can set new events - } - /* Note: We continue back to examining the head because calling the - * event handler may have altered the chain of pending events. */ - } else { - // This event and the following ones in the list are in the future: - // set it as next interrupt and return - us_ticker_set_interrupt(head->timestamp); - return; - } - } -} - -void us_ticker_insert_event(ticker_event_t *obj, timestamp_t timestamp, uint32_t id) { - /* disable interrupts for the duration of the function */ - __disable_irq(); - - // initialise our data - obj->timestamp = timestamp; - obj->id = id; - - /* Go through the list until we either reach the end, or find - an element this should come before (which is possibly the - head). */ - ticker_event_t *prev = NULL, *p = head; - while (p != NULL) { - /* check if we come before p */ - if ((int)(timestamp - p->timestamp) <= 0) { - break; - } - /* go to the next element */ - prev = p; - p = p->next; - } - /* if prev is NULL we're at the head */ - if (prev == NULL) { - head = obj; - us_ticker_set_interrupt(timestamp); - } else { - prev->next = obj; - } - /* if we're at the end p will be NULL, which is correct */ - obj->next = p; - - __enable_irq(); -} - -void us_ticker_remove_event(ticker_event_t *obj) { - __disable_irq(); - - // remove this object from the list - if (head == obj) { - // first in the list, so just drop me - head = obj->next; - if (head == NULL) { - us_ticker_disable_interrupt(); - } else { - us_ticker_set_interrupt(head->timestamp); - } - } else { - // find the object before me, then drop me - ticker_event_t* p = head; - while (p != NULL) { - if (p->next == obj) { - p->next = obj->next; - break; - } - p = p->next; - } - } - - __enable_irq(); -} diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/common/wait_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/common/wait_api.c deleted file mode 100644 index 969f675..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/common/wait_api.c +++ /dev/null @@ -1,115 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "FreeRTOS.h" -#include "task.h" -#include "wait_api.h" -#include "us_ticker_api.h" - -#include "platform_autoconf.h" - -#define WAIT_US_USE_CYCCNT - -#ifdef WAIT_US_USE_CYCCNT -//#include "core_cm3.h" -#ifdef __cplusplus - #define __I volatile /*!< Defines 'read only' permissions */ -#else - #define __I volatile const /*!< Defines 'read only' permissions */ -#endif -#define __O volatile /*!< Defines 'write only' permissions */ -#define __IO volatile /*!< Defines 'read / write' permissions */ - -typedef struct -{ - __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ -} CoreDebug_Type; - -#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ -#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ - -/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). - */ -typedef struct -{ - __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ - __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ - __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ - __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ - __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ - __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ - __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ - __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED0[1]; - __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ - __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED1[1]; - __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ - __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED2[1]; - __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ - __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ -} DWT_Type; - -#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ -#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ - -#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ -#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ -#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ -#endif - - -void wait(float s) { // До 1073741 секунд? 298 часов -// wait_us((int)(s * 1000000.0f)); - vTaskDelay((int)(s * 1000.0f)); -} - -void wait_ms(int ms) { // До 1073741 секунд? 298 часов - if(ms > 0) vTaskDelay(ms); -// wait_us(ms * 1000); -} - - -void wait_us(int us) { // До 2.147483648 секунды! - uint32_t start; -#ifdef WAIT_US_USE_CYCCNT - if(us < 1) return; - if (us < 327) { // G-timer resolution is ~31 us (1/32K), use DWT->CYCCNT... - if(!(DWT->CTRL & DWT_CTRL_CYCCNTENA_Msk)) { // уже включен? - CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; // открыть доступ - DWT->CYCCNT = 0; // обнулить и запустить - DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; // запустить счет - } - start = DWT->CYCCNT + us * (PLATFORM_CLOCK / 1000000ul); - while ((int32_t)(start - DWT->CYCCNT) > 0); - } - else -#endif - { - start = us_ticker_read(); // G-timer resolution is ~31 us (1/32K), and is a countdown timer - while ((us_ticker_read() - start) < (uint32_t)us); - } -} diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/analogin_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/analogin_api.h deleted file mode 100644 index 57d25eb..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/analogin_api.h +++ /dev/null @@ -1,39 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_ANALOGIN_API_H -#define MBED_ANALOGIN_API_H - -#include "device.h" - -#if DEVICE_ANALOGIN - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct analogin_s analogin_t; // 444 bytes! - -void analogin_init (analogin_t *obj, PinName pin); -float analogin_read (analogin_t *obj); -uint16_t analogin_read_u16(analogin_t *obj); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/analogout_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/analogout_api.h deleted file mode 100644 index 97a2013..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/analogout_api.h +++ /dev/null @@ -1,42 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_ANALOGOUT_API_H -#define MBED_ANALOGOUT_API_H - -#include "device.h" - -#if DEVICE_ANALOGOUT - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct dac_s dac_t; - -void analogout_init (dac_t *obj, PinName pin); -void analogout_free (dac_t *obj); -void analogout_write (dac_t *obj, float value); -void analogout_write_u16(dac_t *obj, uint16_t value); -float analogout_read (dac_t *obj); -uint16_t analogout_read_u16 (dac_t *obj); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/can_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/can_api.h deleted file mode 100644 index 48bc104..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/can_api.h +++ /dev/null @@ -1,80 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_CAN_API_H -#define MBED_CAN_API_H - -#include "device.h" - -#if DEVICE_CAN - -#include "PinNames.h" -#include "PeripheralNames.h" -#include "can_helper.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - IRQ_RX, - IRQ_TX, - IRQ_ERROR, - IRQ_OVERRUN, - IRQ_WAKEUP, - IRQ_PASSIVE, - IRQ_ARB, - IRQ_BUS, - IRQ_READY -} CanIrqType; - - -typedef enum { - MODE_RESET, - MODE_NORMAL, - MODE_SILENT, - MODE_TEST_GLOBAL, - MODE_TEST_LOCAL, - MODE_TEST_SILENT -} CanMode; - -typedef void (*can_irq_handler)(uint32_t id, CanIrqType type); - -typedef struct can_s can_t; - -void can_init (can_t *obj, PinName rd, PinName td); -void can_free (can_t *obj); -int can_frequency(can_t *obj, int hz); - -void can_irq_init (can_t *obj, can_irq_handler handler, uint32_t id); -void can_irq_free (can_t *obj); -void can_irq_set (can_t *obj, CanIrqType irq, uint32_t enable); - -int can_write (can_t *obj, CAN_Message, int cc); -int can_read (can_t *obj, CAN_Message *msg, int handle); -int can_mode (can_t *obj, CanMode mode); -int can_filter(can_t *obj, uint32_t id, uint32_t mask, CANFormat format, int32_t handle); -void can_reset (can_t *obj); -unsigned char can_rderror (can_t *obj); -unsigned char can_tderror (can_t *obj); -void can_monitor (can_t *obj, int silent); - -#ifdef __cplusplus -}; -#endif - -#endif // MBED_CAN_API_H - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/ethernet_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/ethernet_api.h deleted file mode 100644 index 4cae77e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/ethernet_api.h +++ /dev/null @@ -1,63 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_ETHERNET_API_H -#define MBED_ETHERNET_API_H - -#include "device.h" - -#if DEVICE_ETHERNET - -#ifdef __cplusplus -extern "C" { -#endif - -// Connection constants - -int ethernet_init(void); -void ethernet_free(void); - -// write size bytes from data to ethernet buffer -// return num bytes written -// or -1 if size is too big -int ethernet_write(const char *data, int size); - -// send ethernet write buffer, returning the packet size sent -int ethernet_send(void); - -// recieve from ethernet buffer, returning packet size, or 0 if no packet -int ethernet_receive(void); - -// read size bytes in to data, return actual num bytes read (0..size) -// if data == NULL, throw the bytes away -int ethernet_read(char *data, int size); - -// get the ethernet address -void ethernet_address(char *mac); - -// see if the link is up -int ethernet_link(void); - -// force link settings -void ethernet_set_link(int speed, int duplex); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/gpio_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/gpio_api.h deleted file mode 100644 index e4cf7fd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/gpio_api.h +++ /dev/null @@ -1,51 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_GPIO_API_H -#define MBED_GPIO_API_H - -#include "device.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Set the given pin as GPIO - * @param pin The pin to be set as GPIO - * @return The GPIO port mask for this pin - **/ -uint32_t gpio_set(PinName pin); - -/* GPIO object */ -void gpio_init(gpio_t *obj, PinName pin); - -void gpio_mode (gpio_t *obj, PinMode mode); -void gpio_dir (gpio_t *obj, PinDirection direction); - -void gpio_write(gpio_t *obj, int value); -int gpio_read (gpio_t *obj); - -// the following set of functions are generic and are implemented in the common gpio.c file -void gpio_init_in(gpio_t* gpio, PinName pin); -void gpio_init_in_ex(gpio_t* gpio, PinName pin, PinMode mode); -void gpio_init_out(gpio_t* gpio, PinName pin); -void gpio_init_out_ex(gpio_t* gpio, PinName pin, int value); -void gpio_init_inout(gpio_t* gpio, PinName pin, PinDirection direction, PinMode mode, int value); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/gpio_irq_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/gpio_irq_api.h deleted file mode 100644 index 10f5775..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/gpio_irq_api.h +++ /dev/null @@ -1,49 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_GPIO_IRQ_API_H -#define MBED_GPIO_IRQ_API_H - -#include "device.h" - -#if DEVICE_INTERRUPTIN - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - IRQ_NONE, - IRQ_RISE, - IRQ_FALL, - IRQ_LOW, - IRQ_HIGH -} gpio_irq_event; - -typedef void (*gpio_irq_handler)(uint32_t id, gpio_irq_event event); - -int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id); -void gpio_irq_free(gpio_irq_t *obj); -void gpio_irq_set (gpio_irq_t *obj, gpio_irq_event event, uint32_t enable); -void gpio_irq_enable(gpio_irq_t *obj); -void gpio_irq_disable(gpio_irq_t *obj); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/i2c_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/i2c_api.h deleted file mode 100644 index e1b59a0..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/i2c_api.h +++ /dev/null @@ -1,59 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_I2C_API_H -#define MBED_I2C_API_H - -#include "device.h" - -#if DEVICE_I2C - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct i2c_s i2c_t; - -enum { - I2C_ERROR_NO_SLAVE = -1, - I2C_ERROR_BUS_BUSY = -2 -}; - -void i2c_init (i2c_t *obj, PinName sda, PinName scl); -void i2c_frequency (i2c_t *obj, int hz); -int i2c_start (i2c_t *obj); -int i2c_stop (i2c_t *obj); -int i2c_read (i2c_t *obj, int address, uint8_t *data, int length, int stop); -int i2c_write (i2c_t *obj, int address, const uint8_t *data, int length, int stop); -void i2c_reset (i2c_t *obj); -int i2c_byte_read (i2c_t *obj, int last); -int i2c_byte_write (i2c_t *obj, int data); - - -#if DEVICE_I2CSLAVE -void i2c_slave_mode (i2c_t *obj, int enable_slave); -int i2c_slave_receive(i2c_t *obj); -int i2c_slave_read (i2c_t *obj, char *data, int length); -int i2c_slave_write (i2c_t *obj, const char *data, int length); -void i2c_slave_address(i2c_t *obj, int idx, uint32_t address, uint32_t mask); -#endif - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/pinmap.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/pinmap.h deleted file mode 100644 index 653d5fe..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/pinmap.h +++ /dev/null @@ -1,43 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_PINMAP_H -#define MBED_PINMAP_H - -#include "PinNames.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - PinName pin; - int peripheral; - int function; -} PinMap; - -void pin_function(PinName pin, int function); -void pin_mode (PinName pin, PinMode mode); - -uint32_t pinmap_peripheral(PinName pin, const PinMap* map); -uint32_t pinmap_merge (uint32_t a, uint32_t b); -void pinmap_pinout (PinName pin, const PinMap *map); -uint32_t pinmap_find_peripheral(PinName pin, const PinMap* map); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/port_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/port_api.h deleted file mode 100644 index f687cfe..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/port_api.h +++ /dev/null @@ -1,42 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_PORTMAP_H -#define MBED_PORTMAP_H - -#include "device.h" - -#if DEVICE_PORTIN || DEVICE_PORTOUT - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct port_s port_t; - -PinName port_pin(PortName port, int pin_n); - -void port_init (port_t *obj, PortName port, int mask, PinDirection dir); -void port_mode (port_t *obj, PinMode mode); -void port_dir (port_t *obj, PinDirection dir); -void port_write(port_t *obj, int value); -int port_read (port_t *obj); - -#ifdef __cplusplus -} -#endif -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/pwmout_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/pwmout_api.h deleted file mode 100644 index 5e94363..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/pwmout_api.h +++ /dev/null @@ -1,49 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_PWMOUT_API_H -#define MBED_PWMOUT_API_H - -#include "device.h" - -#if DEVICE_PWMOUT - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct pwmout_s pwmout_t; - -int pwmout_init (pwmout_t* obj, PinName pin); // != 0 - error -void pwmout_free (pwmout_t* obj); - -//void pwmout_write (pwmout_t* obj, float percent); -//float pwmout_read (pwmout_t* obj); - -//void pwmout_period (pwmout_t* obj, float seconds); -//void pwmout_period_ms (pwmout_t* obj, int ms); -void pwmout_period_us (pwmout_t* obj, uint32_t us); - -//void pwmout_pulsewidth (pwmout_t* obj, float seconds); -//void pwmout_pulsewidth_ms(pwmout_t* obj, uint32_t ms); -void pwmout_pulsewidth_us(pwmout_t* obj, uint32_t us); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/rtc_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/rtc_api.h deleted file mode 100644 index 663f888..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/rtc_api.h +++ /dev/null @@ -1,42 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_RTC_API_H -#define MBED_RTC_API_H - -#include "device.h" - -#if DEVICE_RTC - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -void rtc_init(void); -void rtc_free(void); -int rtc_isenabled(void); - -time_t rtc_read(void); -void rtc_write(time_t t); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/serial_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/serial_api.h deleted file mode 100644 index 2b0f0c4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/serial_api.h +++ /dev/null @@ -1,78 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_SERIAL_API_H -#define MBED_SERIAL_API_H - -#include "device.h" - -#if DEVICE_SERIAL - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - ParityNone = 0, - ParityOdd = 1, - ParityEven = 2, - ParityForced1 = 3, - ParityForced0 = 4 -} SerialParity; - -typedef enum { - RxIrq, - TxIrq -} SerialIrq; - -typedef enum { - FlowControlNone, - FlowControlRTS, - FlowControlCTS, - FlowControlRTSCTS -} FlowControl; - -typedef void (*uart_irq_handler)(uint32_t id, SerialIrq event); - -typedef struct serial_s serial_t; - -void serial_init (serial_t *obj, PinName tx, PinName rx); -void serial_free (serial_t *obj); -void serial_baud (serial_t *obj, int baudrate); -void serial_format (serial_t *obj, int data_bits, SerialParity parity, int stop_bits); - -void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id); -void serial_irq_set (serial_t *obj, SerialIrq irq, uint32_t enable); - -int serial_getc (serial_t *obj); -void serial_putc (serial_t *obj, int c); -int serial_readable (serial_t *obj); -int serial_writable (serial_t *obj); -void serial_clear (serial_t *obj); - -void serial_break_set (serial_t *obj); -void serial_break_clear(serial_t *obj); - -void serial_pinout_tx(PinName tx); - -void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, PinName txflow); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/sleep_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/sleep_api.h deleted file mode 100644 index c8cf3b6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/sleep_api.h +++ /dev/null @@ -1,64 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_SLEEP_API_H -#define MBED_SLEEP_API_H - -#include "device.h" - -#if DEVICE_SLEEP - -#ifdef __cplusplus -extern "C" { -#endif - -/** Send the microcontroller to sleep - * - * The processor is setup ready for sleep, and sent to sleep using __WFI(). In this mode, the - * system clock to the core is stopped until a reset or an interrupt occurs. This eliminates - * dynamic power used by the processor, memory systems and buses. The processor, peripheral and - * memory state are maintained, and the peripherals continue to work and can generate interrupts. - * - * The processor can be woken up by any internal peripheral interrupt or external pin interrupt. - * - * @note - * The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored. - * Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be - * able to access the LocalFileSystem - */ -void sleep(void); - -/** Send the microcontroller to deep sleep - * - * This processor is setup ready for deep sleep, and sent to sleep using __WFI(). This mode - * has the same sleep features as sleep plus it powers down peripherals and clocks. All state - * is still maintained. - * - * The processor can only be woken up by an external interrupt on a pin or a watchdog timer. - * - * @note - * The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored. - * Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be - * able to access the LocalFileSystem - */ -void deepsleep(void); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/spi_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/spi_api.h deleted file mode 100644 index 7553dc1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/spi_api.h +++ /dev/null @@ -1,45 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_SPI_API_H -#define MBED_SPI_API_H - -#include "device.h" - -#if DEVICE_SPI - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spi_s spi_t; - -void spi_init (spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel); -void spi_free (spi_t *obj); -void spi_format (spi_t *obj, int bits, int mode, int slave); -void spi_frequency (spi_t *obj, int hz); -int spi_master_write (spi_t *obj, int value); -int spi_slave_receive(spi_t *obj); -int spi_slave_read (spi_t *obj); -void spi_slave_write (spi_t *obj, int value); -int spi_busy (spi_t *obj); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal/us_ticker_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal/us_ticker_api.h deleted file mode 100644 index ea62d7c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal/us_ticker_api.h +++ /dev/null @@ -1,51 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_US_TICKER_API_H -#define MBED_US_TICKER_API_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef uint64_t timestamp_t; - -uint32_t us_ticker_read(void); - -typedef void (*ticker_event_handler)(uint32_t id); -void us_ticker_set_handler(ticker_event_handler handler); - -typedef struct ticker_event_s { - timestamp_t timestamp; - uint32_t id; - struct ticker_event_s *next; -} ticker_event_t; - -void us_ticker_init(void); -void us_ticker_set_interrupt(timestamp_t timestamp); -void us_ticker_disable_interrupt(void); -void us_ticker_clear_interrupt(void); -void us_ticker_irq_handler(void); - -void us_ticker_insert_event(ticker_event_t *obj, timestamp_t timestamp, uint32_t id); -void us_ticker_remove_event(ticker_event_t *obj); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/dma_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/dma_api.h deleted file mode 100644 index 1bf3a0e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/dma_api.h +++ /dev/null @@ -1,44 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_GDMA_API_H -#define MBED_GDMA_API_H - -#include "device.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct gdma_s { - HAL_GDMA_OBJ gdma_obj; - uint8_t gdma_allocated; -}; - -typedef struct gdma_s gdma_t; - -typedef void (*dma_irq_handler)(uint32_t id); - -void dma_memcpy_init(gdma_t *dma_obj, dma_irq_handler handler, uint32_t id); -void dma_memcpy_deinit(gdma_t *dma_obj); -void dma_memcpy(gdma_t *dma_obj, void *dst, void* src, uint32_t len); -void dma_memcpy_aggr_init(gdma_t * dma_obj, dma_irq_handler handler, uint32_t id); -void dma_memcpy_aggr(gdma_t * dma_obj, PHAL_GDMA_BLOCK block_info); - -#ifdef __cplusplus -} -#endif - -#endif // end of "#define MBED_GDMA_API_H" diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/efuse_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/efuse_api.h deleted file mode 100644 index b8c7059..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/efuse_api.h +++ /dev/null @@ -1,31 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ - -#ifndef MBED_EXT_EFUSE_API_EXT_H -#define MBED_EXT_EFUSE_API_EXT_H - -#include "device.h" - -#ifdef __cplusplus -extern "C" { -#endif - -int efuse_get_remaining_length(void); -void efuse_mtp_read(uint8_t * data); -int efuse_mtp_write(uint8_t *data, uint8_t len); -int efuse_otp_read(uint8_t address, uint8_t len, uint8_t *buf); -int efuse_otp_write(uint8_t address, uint8_t len, uint8_t *buf); -int efuse_disable_jtag(void); - -#ifdef __cplusplus -} -#endif - -#endif // MBED_EXT_EFUSE_API_EXT_H diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/ethernet_ex_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/ethernet_ex_api.h deleted file mode 100644 index 27c3205..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/ethernet_ex_api.h +++ /dev/null @@ -1,48 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ETHERNET_EX_API_H -#define ETHERNET_EX_API_H - -#include "device.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define ETH_TX_DESC_SIZE 20 // 20 Bytes -#define ETH_RX_DESC_SIZE 16 // 16 Bytes -#define ETH_PKT_BUF_SIZE 1536 - - -typedef void (*ethernet_callback)(uint32_t event, uint32_t data); - -void ethernet_irq_hook(ethernet_callback callback); -/* Set the numbers of Tx/Rx descriptor */ -void ethernet_set_descnum(uint8_t txdescCnt, uint8_t rxdescCnt); -/* Set the start address of Tx/Rx descriptor and packet buffer */ -void ethernet_trx_pre_setting(uint8_t *TxDescAddr, uint8_t *RxDescAddr, uint8_t *pTxPktBuf, uint8_t *pRxPktBuf); - - - -#ifdef __cplusplus -} -#endif - -#endif // #ifndef ETHERNET_EX_API_H - diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/ex_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/ex_api.h deleted file mode 100644 index 8a4fe79..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/ex_api.h +++ /dev/null @@ -1,49 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef EX_API_H -#define EX_API_H - -#include "device.h" -#include "serial_api.h" -#include "spi_api.h" -#include "dma_api.h" -#include "flash_api.h" -#include "flash_eep.h" -#include "gpio_ex_api.h" -#include "gpio_irq_ex_api.h" -#include "i2c_ex_api.h" -#include "i2s_api.h" -#include "nfc_api.h" -#include "serial_ex_api.h" -#include "sleep_ex_api.h" -#include "spi_ex_api.h" -#include "sys_api.h" -#include "wdt_api.h" -#include "ethernet_ex_api.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/flash_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/flash_api.h deleted file mode 100644 index 00ab5d2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/flash_api.h +++ /dev/null @@ -1,55 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ -#ifndef MBED_EXT_FLASH_API_EXT_H -#define MBED_EXT_FLASH_API_EXT_H - -#include "device.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct flash_s flash_t; - -/** - * global data structure - */ -extern flash_t flashobj; -extern bool fspic_isinit; - -enum { - FLASH_COMPLETE = 0, - FLASH_ERROR_2 = 1, -}; - -void flash_turnon (void); -void flash_init (flash_t *obj); -void flash_erase_sector (flash_t *obj, uint32_t address); -void flash_erase_block (flash_t *obj, uint32_t address); -int flash_read_word (flash_t *obj, uint32_t address, uint32_t * data); -int flash_write_word (flash_t *obj, uint32_t address, uint32_t data); -int flash_stream_read (flash_t *obj, uint32_t address, uint32_t len, uint8_t * data); -int flash_stream_write (flash_t *obj, uint32_t address, uint32_t len, uint8_t * data); -void flash_write_protect (flash_t *obj, uint32_t protect); -int flash_get_status (flash_t * obj); -int flash_set_status (flash_t * obj, uint32_t data); -void flash_reset_status (flash_t * obj); -int flash_burst_write (flash_t * obj, uint32_t address, uint32_t Length, uint8_t * data); -int flash_burst_read (flash_t * obj, uint32_t address, uint32_t Length, uint8_t * data); -int flash_set_extend_addr (flash_t * obj, uint32_t data); -int flash_get_extend_addr (flash_t * obj); -unsigned int flash_get_size (flash_t *obj); -int flash_otp_read (flash_t *obj, uint32_t address, uint32_t Length, uint8_t * data); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/flash_eep.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/flash_eep.h deleted file mode 100644 index f50b324..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/flash_eep.h +++ /dev/null @@ -1,52 +0,0 @@ -/****************************************************************************** - * FileName: flash_eep.h - * Description: FLASH - * Alternate SDK - * Author: PV` - * (c) PV` 2015 -*******************************************************************************/ -#ifndef __FLASH_EEP_H_ -#define __FLASH_EEP_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include - -//----------------------------------------------------------------------------- -//#ifndef FLASH_SECTOR_SIZE -// #define FLASH_SECTOR_SIZE 4096 -//#endif -#define FLASH_SECTORS 256 // 1 Mbytes -#define FLASH_CHIP_SIZE (FLASH_SECTORS * FLASH_SECTOR_SIZE) -#define FMEMORY_SCFG_BANK_SIZE FLASH_SECTOR_SIZE // размер сектора, 4096 bytes -#define FMEMORY_SCFG_BANKS 2 // кол-во секторов для работы 2... -#define FMEMORY_SCFG_BASE_ADDR (FLASH_CHIP_SIZE - (FMEMORY_SCFG_BANKS*FMEMORY_SCFG_BANK_SIZE)) // = 0xFE000 -//----------------------------------------------------------------------------- -#define FLASH_EEP_ATTR -//----------------------------------------------------------------------------- -enum eFMEMORY_ERRORS { - FMEM_NOT_FOUND = -1, // -1 - не найден - FMEM_FLASH_ERR = -2, // -2 - flash rd/wr/erase error - FMEM_ERROR = -3, // -3 - error - FMEM_OVR_ERR = -4, // -4 - переполнение FMEMORY_SCFG_BANK_SIZE - FMEM_MEM_ERR = -5 // -5 - heap alloc error -}; -//----------------------------------------------------------------------------- -// extern QueueHandle_t flash_mutex; -signed short flash_read_cfg(void *ptr, unsigned short id, unsigned short maxsize) FLASH_EEP_ATTR; // возврат: размер объекта последнего сохранения, -1 - не найден, -2 - error -bool flash_write_cfg(void *ptr, unsigned short id, unsigned short size) FLASH_EEP_ATTR; -//----------------------------------------------------------------------------- -#ifndef USE_FLASH_EEP -#define USE_FLASH_EEP 1 -#endif - -#ifdef __cplusplus -} -#endif - - -#endif /* __FLASH_EEP_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/gpio_ex_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/gpio_ex_api.h deleted file mode 100644 index 777a7fd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/gpio_ex_api.h +++ /dev/null @@ -1,36 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_GPIO_EX_API_H -#define MBED_GPIO_EX_API_H - -#include "device.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* GPIO object */ -void gpio_direct_write(gpio_t *obj, BOOL value) ; -void gpio_pull_ctrl(gpio_t *obj, PinMode pull_type); -void gpio_deinit(gpio_t *obj, PinName pin); -void gpio_change_dir(gpio_t *obj, PinDirection direction); - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/gpio_irq_ex_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/gpio_irq_ex_api.h deleted file mode 100644 index 6e083b5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/gpio_irq_ex_api.h +++ /dev/null @@ -1,41 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_GPIO_IRQ_EX_API_H -#define MBED_GPIO_IRQ_EX_API_H - -#include "device.h" - -#if DEVICE_INTERRUPTIN - -#ifdef __cplusplus -extern "C" { -#endif -/* -typedef enum { - IRQ_LOW = 3, - IRQ_HIGH =4 -} gpio_irq_event_ex; -*/ - -void gpio_irq_deinit(gpio_irq_t *obj); -void gpio_irq_pull_ctrl(gpio_irq_t *obj, PinMode pull_type); -#ifdef __cplusplus -} -#endif - -#endif // end of "#if DEVICE_INTERRUPTIN" - -#endif // end of #ifndef MBED_GPIO_IRQ_EX_API_H diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/i2c_ex_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/i2c_ex_api.h deleted file mode 100644 index 90fa1fa..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/i2c_ex_api.h +++ /dev/null @@ -1,46 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef I2C_EX_API_H -#define I2C_EX_API_H - -#include "device.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - I2C_TX_COMPLETE = 0, - I2C_RX_COMPLETE = 1, - I2C_RD_REQ_COMMAND = 2, - I2C_ERR_OCCURRED = 3, -}I2CCallback; - -void i2c_set_user_callback(i2c_t *obj, I2CCallback i2ccb, void(*i2c_callback)(void *)); -void i2c_clear_user_callback(i2c_t *obj, I2CCallback i2ccb); -int i2c_enable_control(i2c_t *obj, int enable); - -void i2c_restart_enable(i2c_t *obj); -void i2c_restart_disable(i2c_t *obj); - - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/i2s_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/i2s_api.h deleted file mode 100644 index 8533af3..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/i2s_api.h +++ /dev/null @@ -1,76 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2015, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ - -#ifndef MBED_EXT_I2S_API_EXT_H -#define MBED_EXT_I2S_API_EXT_H - -#include "device.h" -#include "rtl8195a.h" -#include "hal_i2s.h" - -#ifdef __cplusplus -extern "C" { -#endif - -enum { - SR_8KHZ = I2S_SR_8KHZ, - SR_16KHZ = I2S_SR_16KHZ, - SR_24KHZ = I2S_SR_24KHZ, - SR_32KHZ = I2S_SR_32KHZ, - SR_48KHZ = I2S_SR_48KHZ, - SR_96KHZ = I2S_SR_96KHZ, - SR_7p35KHZ = I2S_SR_7p35KHZ, - SR_11p02KHZ = I2S_SR_11p02KHZ, - SR_22p05KHZ = I2S_SR_22p05KHZ, - SR_29p4KHZ = I2S_SR_29p4KHZ, - SR_44p1KHZ = I2S_SR_44p1KHZ, - SR_88p2KHZ = I2S_SR_88p2KHZ -}; - -enum { - CH_STEREO = I2S_CH_STEREO, - CH_MONO = I2S_CH_MONO -}; - -enum { - WL_16b = I2S_WL_16, - WL_24b = I2S_WL_24 -}; - -enum { - I2S_DIR_RX = I2S_ONLY_RX, // Rx Only - I2S_DIR_TX = I2S_ONLY_TX, // Tx Only - I2S_DIR_TXRX = I2S_TXRX // Tx & Rx (BiDirection) -}; - -typedef void (*i2s_irq_handler)(uint32_t id, char *pbuf); - -typedef struct i2s_s i2s_t; - -void i2s_init(i2s_t *obj, PinName sck, PinName ws, PinName sd); -void i2s_set_dma_buffer(i2s_t *obj, char *tx_buf, char *rx_buf, - uint32_t page_num, uint32_t page_size); -void i2s_tx_irq_handler(i2s_t *obj, i2s_irq_handler handler, uint32_t id); -void i2s_rx_irq_handler(i2s_t *obj, i2s_irq_handler handler, uint32_t id); -void i2s_set_direction(i2s_t *obj, int trx_type); -void i2s_set_param(i2s_t *obj, int channel_num, int rate, int word_len); -void i2s_deinit(i2s_t *obj); -int* i2s_get_tx_page(i2s_t *obj); -void i2s_send_page(i2s_t *obj, uint32_t *pbuf); -void i2s_recv_page(i2s_t *obj); -void i2s_enable(i2s_t *obj); -void i2s_disable(i2s_t *obj); - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/log_uart_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/log_uart_api.h deleted file mode 100644 index c1edeef..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/log_uart_api.h +++ /dev/null @@ -1,66 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef LOG_UART_API_H -#define LOG_UART_API_H - -#include "device.h" -#include "serial_api.h" -#include "hal_log_uart.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (*loguart_irq_handler)(uint32_t id, LOG_UART_INT_ID event); - -typedef struct log_uart_s log_uart_t; - -int32_t log_uart_init (log_uart_t *obj, int baudrate, int data_bits, SerialParity parity, int stop_bits); -void log_uart_free(log_uart_t *obj); -void log_uart_baud(log_uart_t *obj, int baudrate); -void log_uart_format(log_uart_t *obj, int data_bits, SerialParity parity, int stop_bits); -void log_uart_irq_handler(log_uart_t *obj, loguart_irq_handler handler, uint32_t id); -void log_uart_irq_set(log_uart_t *obj, LOG_UART_INT_ID irq, uint32_t enable); -char log_uart_getc(log_uart_t *obj); -void log_uart_putc(log_uart_t *obj, char c); -int log_uart_readable(log_uart_t *obj); -int log_uart_writable(log_uart_t *obj); -void log_uart_clear(log_uart_t *obj); -void log_uart_clear_tx(log_uart_t *obj); -void log_uart_clear_rx(log_uart_t *obj); -void log_uart_break_set(log_uart_t *obj); -void log_uart_break_clear(log_uart_t *obj); -void log_uart_tx_comp_handler(log_uart_t *obj, void *handler, uint32_t id); -void log_uart_rx_comp_handler(log_uart_t *obj, void *handler, uint32_t id); -void log_uart_line_status_handler(log_uart_t *obj, void *handler, uint32_t id); -int32_t log_uart_recv (log_uart_t *obj, char *prxbuf, uint32_t len, uint32_t timeout_ms); -int32_t log_uart_send (log_uart_t *obj, char *ptxbuf, uint32_t len, uint32_t timeout_ms); -int32_t log_uart_recv_stream (log_uart_t *obj, char *prxbuf, uint32_t len); -int32_t log_uart_send_stream (log_uart_t *obj, char *ptxbuf, uint32_t len); -int32_t log_uart_recv_stream_timeout (log_uart_t *obj, char *prxbuf, uint32_t len, - uint32_t timeout_ms, void *force_cs); -int32_t log_uart_send_stream_abort (log_uart_t *obj); -int32_t log_uart_recv_stream_abort (log_uart_t *obj); -void log_uart_disable (log_uart_t *obj); -void log_uart_enable (log_uart_t *obj); -uint8_t log_uart_raed_lsr(log_uart_t *obj); -uint8_t log_uart_raed_msr(log_uart_t *obj); - -#ifdef __cplusplus -} -#endif - -#endif // end of "#ifndef LOG_UART_API_H" diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/nfc_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/nfc_api.h deleted file mode 100644 index d282568..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/nfc_api.h +++ /dev/null @@ -1,70 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_NFC_API_H -#define MBED_NFC_API_H - -#include "device.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define NFCTAGLENGTH 36 // maximum 36*4=144 bytes -#define NFC_MAX_CACHE_PAGE_NUM 36 // maximum 36*4=144 bytes - -typedef enum _NFC_STATUS_ { - NFC_OK = 0, - NFC_ERROR = -1 -}NFC_STATUS, *PNFC_STATUS; - -typedef enum _NFC_PWR_STATUS_ { - NFC_PWR_DISABLE = 0, - NFC_PWR_RUNNING = 1, - NFC_PWR_SLEEP0 = 2, - NFC_PWR_SLEEP1 = 3, - NFC_PWR_DOWN = 4, - NFC_PWR_ERROR = -1 -}NFC_PWR_STATUS, *PNFC_PWR_STATUS; - -typedef enum _NFC_EVENT_ { - NFC_EV_READER_PRESENT = (1<<0), - NFC_EV_READ = (1<<1), - NFC_EV_WRITE = (1<<2), - NFC_EV_ERR = (1<<3), - NFC_EV_CACHE_READ = (1<<4) -}NFC_EVENT, *PNFC_EVENT; - -typedef struct nfctag_s nfctag_t; - -typedef void (*nfc_read_cb)(void *arg, void *buf, unsigned int page); -typedef void(*nfc_write_cb)(void *arg, unsigned int page, uint32_t pgdat); -typedef void(*nfc_event_cb)(void *arg, unsigned int event); -typedef void(*nfc_cache_read_cb)(void *arg, void *buf, unsigned int page); - -int nfc_init(nfctag_t *obj, uint32_t *pg_init_val); -void nfc_read(nfctag_t *obj, nfc_read_cb handler, void *arg); -void nfc_write(nfctag_t *obj, nfc_write_cb handler, void *arg); -void nfc_event(nfctag_t *obj, nfc_event_cb handler, void *arg, unsigned int event_mask); -int nfc_power(nfctag_t *obj, int pwr_mode, int wake_event); -int nfc_cache_write(nfctag_t *obj, uint32_t *tbuf, unsigned int spage, unsigned int pg_num); -int nfc_cache_raed(nfctag_t *obj, nfc_cache_read_cb handler, void *arg, unsigned int start_pg); -int nfc_status(nfctag_t *obj); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/serial_ex_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/serial_ex_api.h deleted file mode 100644 index 967ef44..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/serial_ex_api.h +++ /dev/null @@ -1,60 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_SERIAL_EX_API_H -#define MBED_SERIAL_EX_API_H - -#include "device.h" - -#if DEVICE_SERIAL - -#ifdef __cplusplus -extern "C" { -#endif - -// Define RX FIFO Level: RX interrupt trigger, RTS de-assert trigger -typedef enum { - FifoLv1Byte=0, // 1-byte - FifoLvQuarter=1, // 4-byte - FifoLvHalf=2, // 8-byte - FifoLvFull=3 // 14-byte -} SerialFifoLevel; - -void serial_clear_tx(serial_t *obj); -void serial_clear_rx(serial_t *obj); -void serial_send_comp_handler(serial_t *obj, void *handler, uint32_t id); -void serial_recv_comp_handler(serial_t *obj, void *handler, uint32_t id); -int32_t serial_recv_blocked (serial_t *obj, char *prxbuf, uint32_t len, uint32_t timeout_ms); -int32_t serial_send_blocked (serial_t *obj, char *ptxbuf, uint32_t len, uint32_t timeout_ms); -int32_t serial_recv_stream (serial_t *obj, char *prxbuf, uint32_t len); -int32_t serial_send_stream (serial_t *obj, char *ptxbuf, uint32_t len); -int32_t serial_recv_stream_dma (serial_t *obj, char *prxbuf, uint32_t len); -int32_t serial_send_stream_dma (serial_t *obj, char *ptxbuf, uint32_t len); -int32_t serial_send_stream_abort (serial_t *obj); -int32_t serial_recv_stream_abort (serial_t *obj); -void serial_disable (serial_t *obj); -void serial_enable (serial_t *obj); -int32_t serial_recv_stream_timeout (serial_t *obj, char *prxbuf, uint32_t \ - len, uint32_t timeout_ms, void *force_cs); -int32_t serial_recv_stream_dma_timeout (serial_t *obj, char *prxbuf, \ - uint32_t len, uint32_t timeout_ms, void *force_cs); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif // #ifndef MBED_SERIAL_EX_API_H diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/sleep_ex_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/sleep_ex_api.h deleted file mode 100644 index 68554ec..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/sleep_ex_api.h +++ /dev/null @@ -1,98 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_SLEEP_EX_API_H -#define MBED_SLEEP_EX_API_H - -#include "device.h" - -#if DEVICE_SLEEP - -#ifdef __cplusplus -extern "C" { -#endif - -/* Sleep Eake Up event, the User application also - need to config the peripheral to trigger wake up event */ -#define SLEEP_WAKEUP_BY_STIMER (SLP_STIMER) // wake up by system timer -#define SLEEP_WAKEUP_BY_GTIMER (SLP_GTIMER) // wake up by General purpose timer timeout -#define SLEEP_WAKEUP_BY_GPIO_INT (SLP_GPIO) // wake up by GPIO Port A[7:0] Interrupt -#define SLEEP_WAKEUP_BY_WLAN (SLP_WL) // wake up by WLan event -#define SLEEP_WAKEUP_BY_NFC (SLP_NFC) // wake up by NFC event -#define SLEEP_WAKEUP_BY_SDIO (SLP_SDIO) // wake up by SDIO event -#define SLEEP_WAKEUP_BY_USB (SLP_USB) // wake up by USB event - -// Deep Standby Wakeup event -#define STANDBY_WAKEUP_BY_STIMER (BIT0) // wake up by system timer -#define STANDBY_WAKEUP_BY_NFC (BIT1) // wake up by NFC event -//#define SLEEP_WAKEUP_BY_DS_TIMER (BIT2) // The timer to wakeup from Deep Sleep timer -// Do not modify these definition, or need to modify the code also. -#define STANDBY_WAKEUP_BY_PA5 (BIT4) // GPIO Port A[5] -#define STANDBY_WAKEUP_BY_PC7 (BIT5) // GPIO Port C[7] -#define STANDBY_WAKEUP_BY_PD5 (BIT6) // GPIO Port D[5] -#define STANDBY_WAKEUP_BY_PE3 (BIT7) // GPIO Port E[3] - -// Deep Sleep Wakeup event -#define DSLEEP_WAKEUP_BY_TIMER (DS_TIMER33) -#define DSLEEP_WAKEUP_BY_GPIO (DS_GPIO) // GPIO Port B[1] - -typedef struct _SLEEP_WKUP_EVENT_ { - uint8_t wakeup_event; // Wake up event: Timer, NFC, GPIO - uint8_t gpio_option; // GPIO Wakeup setting: [3:0]: Pin 3~0 enable, [7:4]: pin3~0 active high/low - uint32_t timer_duration; // the sleep duration and then wakeup -} SLEEP_WAKEUP_EVENT, *PSLEEP_WAKEUP_EVENT; -/** Send the microcontroller to sleep - * - * The processor is setup ready for sleep, and sent to sleep using __WFI(). In this mode, the - * system clock to the core is stopped until a reset or an interrupt occurs. This eliminates - * dynamic power used by the processor, memory systems and buses. The processor, peripheral and - * memory state are maintained, and the peripherals continue to work and can generate interrupts. - * - * The processor can be woken up by any internal peripheral interrupt or external pin interrupt. - * - * @note - * The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored. - * Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be - * able to access the LocalFileSystem - */ -void sleep_ex(uint32_t wakeup_event, uint32_t sleep_duration); -void sleep_ex_selective(uint32_t wakeup_event, uint32_t sleep_duration, uint32_t clk_sourec_enable, uint32_t sdr_enable); - -void standby_wakeup_event_add(uint32_t wakeup_event, uint32_t sleep_duration_ms, uint32_t gpio_active); -void standby_wakeup_event_del(uint32_t wakeup_event); -void deepstandby_ex(void); - -/** Send the microcontroller to deep sleep - * - * This processor is setup ready for deep sleep, and sent to sleep using __WFI(). This mode - * has the same sleep features as sleep plus it powers down peripherals and clocks. All state - * is still maintained. - * - * The processor can only be woken up by an external interrupt on a pin or a timer. - * - * @note - * The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored. - * Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be - * able to access the LocalFileSystem - */ -void deepsleep_ex(uint32_t wakeup_event, uint32_t sleep_duration); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/spdio_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/spdio_api.h deleted file mode 100644 index 9affc85..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/spdio_api.h +++ /dev/null @@ -1,115 +0,0 @@ -#ifndef __SPDIO_API_H__ -#define __SPDIO_API_H__ - -#include - -#define SPDIO_API_DBG - -#ifdef SPDIO_API_DBG -#define SPDIO_API_PRINTK(fmt, args...) printf(fmt"\r\n",## args) -#define _SPDIO_API_PRINTK(fmt, args...) printf(fmt,## args) -#else -#define SPDIO_API_PRINTK(fmt, args...) -#define _SPDIO_API_PRINTK(fmt, args...) -#endif - -#define SPDIO_DMA_ALIGN_4 4 -#define SPDIO_RX_BUFSZ_ALIGN(x) ((((x-1)>>6)+1)<<6) //alignement to 64 - -#define SPDIO_RXDESC_SZ 24 - -/*Don't modify this enum table*/ -enum spdio_rx_data_t{ - SPDIO_RX_DATA_NULL = 0x00, - SPDIO_RX_DATA_ETH = 0x83, //an ethernet packet received - SPDIO_RX_DATA_ATCMD = 0x11, //an AT command packet received - SPDIO_RX_DATA_USER = 0x41, //defined by user -}; - -enum spdio_tx_data_t{ - SPDIO_TX_DATA_NULL = 0x00, - SPDIO_TX_DATA_ETH = 0x82, //an ethernet packet sent - SPDIO_TX_DATA_ATCMDRSP = 0x10, //an AT command response packet sent - SPDIO_TX_DATA_USER = 0x40, // defined by user -}; - -struct spdio_buf_t{ - void *priv; //priv data from user - uint32_t buf_allocated; //The spdio buffer allocated address - uint16_t size_allocated; //The actual allocated size - uint32_t buf_addr; //The spdio buffer physical address, it must be 4-bytes aligned - uint16_t buf_size; - uint8_t type; //The type of the data which this buffer carries, spdio_rx_data_t and spdio_tx_data_t - uint8_t reserved; -}; - -struct spdio_t { - void *priv; //not used by user - uint32_t tx_bd_num; //for spdio send data to host, 2 bd for one packet, so this value must be rounded to 2 - uint32_t rx_bd_num; //for spdio receive data from host - uint32_t rx_bd_bufsz; //buffer size = desired packet length + 24(spdio header info), must be rounded to 64 - struct spdio_buf_t *rx_buf; //buffer array for spdio receive assigned by user, rx_bd_bufsz * rx_bd_num - - /** - *@brief: rx_done_cb: pointer to callback function defined by user, - called by spdio when one packet receive done - *@param priv: a pointer to spdio_t structure which is used to initilize spdio interface - *@param pbuf: a pointer to spdio_buf_t structure which is spdio receive buffer - *@param pdata: the actual received packet payload - *@param size: the actual payload length - *@param type: the received packet type, spdio_rx_data_t - *@retval: SUCCESS or FAIL - */ - char (*rx_done_cb)(void *priv, void* pbuf, uint8_t *pdata, uint16_t size, uint8_t type); - - /** - *@brief: tx_done_cb: pointer to callback function defined by user, - called by spdio when one packet sent done - *@param priv: a pointer to spdio_t structure which is used to initilize spdio interface - *@param pbuf: a pointer to spdio_buf_t structure which carries the transmit packet - *@retval: SUCCESS or FAIL - */ - char (*tx_done_cb)(void *priv, void* pbuf); -}; - -/** - * @brief Gets example setting for spdio obj. - * @param obj: a pointer to an spdio_t structure which will be initialized with an example settings - * @retval None - */ -void spdio_structinit(struct spdio_t *obj); - -/** - * @brief Initialize spdio interface. - * @param obj, a pointer to a spdio_t structure which should be initialized by user, - * and which will be used to initialize spdio interface - * obj->tx_bd_num: spdio write bd number, needs 2 bd for one transaction - * obj->rx_bd_num: spdio read bd number - * obj->rx_bd_bufsz: spdio read buffer size - * obj->rx_buf: spdio read buffer array - * @retval None - */ -void spdio_init(struct spdio_t *obj); - -/** - * @brief Deinitialize spdio interface. - * @param obj: a pointer to spdio_t structure which is already initialized - * @retval None - */ -void spdio_deinit(struct spdio_t *obj); - -/** - * @brief spdio write function. - * @param obj: a pointer to spdio_t structure which is already initialized - * @param pbuf: a pointer to spdio_buf_t structure which carries the payload - * @retval SUCCESS or FAIL - */ -int8_t spdio_tx(struct spdio_t *obj, struct spdio_buf_t *pbuf); - -/** - * @brief an obj which will be used to initialize sdio interface - * so it must be initialized before calling HalSdioInit(); - */ -extern struct spdio_t *g_spdio_priv; - -#endif //#ifndef __SPDIO_API_H__ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/spi_ex_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/spi_ex_api.h deleted file mode 100644 index 55616fa..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/spi_ex_api.h +++ /dev/null @@ -1,94 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_SPI_EXT_API_H -#define MBED_SPI_EXT_API_H - -#include "device.h" - -#if DEVICE_SPI - -#ifdef __cplusplus -extern "C" { -#endif - -#define SPI_DMA_RX_EN (1<<0) -#define SPI_DMA_TX_EN (1<<1) - -enum { - SPI_SCLK_IDLE_LOW=0, // the SCLK is Low when SPI is inactive - SPI_SCLK_IDLE_HIGH=2 // the SCLK is High when SPI is inactive -}; - -// SPI Master mode: for continuous transfer, how the CS toggle: -enum { - SPI_CS_TOGGLE_EVERY_FRAME=0, // let SCPH=0 then the CS toggle every frame - SPI_CS_TOGGLE_START_STOP=1 // let SCPH=1 the CS toggle at start and stop -}; - -enum { - SPI_SCLK_TOGGLE_MIDDLE=0, // Serial Clk toggle at middle of 1st data bit and latch data at 1st Clk edge - SPI_SCLK_TOGGLE_START=1 // Serial Clk toggle at start of 1st data bit and latch data at 2nd Clk edge -}; - -typedef enum { - CS_0 = 0, - CS_1 = 1, - CS_2 = 2, - CS_3 = 3, - CS_4 = 4, - CS_5 = 5, - CS_6 = 6, - CS_7 = 7 -}ChipSelect; - - -#define SPI_STATE_READY 0x00 -#define SPI_STATE_RX_BUSY (1<<1) -#define SPI_STATE_TX_BUSY (1<<2) - -typedef enum { - SpiRxIrq, - SpiTxIrq -} SpiIrq; - -typedef void (*spi_irq_handler)(uint32_t id, SpiIrq event); - -void spi_irq_hook(spi_t *obj, spi_irq_handler handler, uint32_t id); -void spi_bus_tx_done_irq_hook(spi_t *obj, spi_irq_handler handler, uint32_t id); -int32_t spi_slave_read_stream(spi_t *obj, char *rx_buffer, uint32_t length); -int32_t spi_slave_write_stream(spi_t *obj, char *tx_buffer, uint32_t length); -int32_t spi_master_read_stream(spi_t *obj, char *rx_buffer, uint32_t length); -int32_t spi_master_write_stream(spi_t *obj, char *tx_buffer, uint32_t length); -int32_t spi_master_write_read_stream(spi_t *obj, char *tx_buffer, - char *rx_buffer, uint32_t length); -int32_t spi_slave_read_stream_timeout(spi_t *obj, char *rx_buffer, uint32_t length, uint32_t timeout_ms); - -#ifdef CONFIG_GDMA_EN -int32_t spi_slave_read_stream_dma(spi_t *obj, char *rx_buffer, uint32_t length); -int32_t spi_slave_write_stream_dma(spi_t *obj, char *tx_buffer, uint32_t length); -int32_t spi_master_write_read_stream_dma(spi_t * obj, char * tx_buffer, char * rx_buffer, uint32_t length); -int32_t spi_master_read_stream_dma(spi_t *obj, char *rx_buffer, uint32_t length); -int32_t spi_master_write_stream_dma(spi_t *obj, char *tx_buffer, uint32_t length); -int32_t spi_slave_read_stream_dma_timeout(spi_t *obj, char *rx_buffer, uint32_t length, uint32_t timeout_ms); -#endif - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/sys_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/sys_api.h deleted file mode 100644 index 59fb08a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/sys_api.h +++ /dev/null @@ -1,57 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_SYS_API_H -#define MBED_SYS_API_H - -#include "device.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief Turn off the JTAG function - * - * @return None - * - */ -void sys_jtag_off(void); -void sys_clear_ota_signature(void); -void sys_recover_ota_signature(void); -void sys_log_uart_on(void); -void sys_log_uart_off(void); -void sys_adc_calibration(uint8_t write, uint16_t *offset, uint16_t *gain); -#ifdef CONFIG_SDR_EN -void sys_sdram_off(void); -uint8_t sys_is_sdram_power_on(void); -#else -#define sys_sdram_off() -#define sys_is_sdram_power_on() (0) -#endif - -/** - * @brief system software reset - * - * @return None - * - */ -void sys_reset(void); - -#ifdef __cplusplus -} -#endif - -#endif // MBED_SYS_API_H diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/wdt_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/wdt_api.h deleted file mode 100644 index 7531c34..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/hal_ext/wdt_api.h +++ /dev/null @@ -1,61 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_WATCHDOG_API_H -#define MBED_WATCHDOG_API_H - -#include "device.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (*wdt_irq_handler)(uint32_t id); - -/** Initial the watch dog time setting - * - * This function will initial and enable the watchdog timer with a given timeout value. - * When the watchdog timer timeout event is triggered, the system will be reset. User also can - * register a callback function to handle the watchdog timer timeout event. - */ -void watchdog_init(uint32_t timeout_ms); - -/** Start the watchdog counting - * - * This function will active the watchdog timer down counting. When the watchdog timer count down - * to 0, a callback function will be called or the system will be reset. - */ -void watchdog_start(void); - -/** Stop the watchdog counting - * - * This function will stop the watchdog timer down counting. If a user application aware a - * procedure may takes too long and cause the watchdog timer timeout, the application use this - * function to stop the watchdog timer to prevent the watchdog timer timeout. - */ -void watchdog_stop(void); - -/** Refresh the watchdog counting - * - * This function will reload the watchdog timer counting value. Usually a application do the watchdog - * timer reflash in the main loop to prevent the watchdog timer timeout. - */ -void watchdog_refresh(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/cmsis/rtl8195a b/Firmware/RTLGDB/USDK/component/common/mbed/targets/cmsis/rtl8195a deleted file mode 100644 index c9c1d60..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/cmsis/rtl8195a +++ /dev/null @@ -1,14 +0,0 @@ -/* mbed Microcontroller Library - CMSIS - * Copyright (C) 2009-2011 ARM Limited. All rights reserved. - * - * A generic CMSIS include header, pulling in RTL8195A specifics - */ - -#ifndef MBED_CMSIS_H -#define MBED_CMSIS_H - -#include -#include - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/PeripheralNames.h b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/PeripheralNames.h deleted file mode 100644 index cc899e7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/PeripheralNames.h +++ /dev/null @@ -1,100 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_PERIPHERALNAMES_H -#define MBED_PERIPHERALNAMES_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if 0 -typedef enum { - UART_1 = (int)USART1_BASE, - UART_2 = (int)USART2_BASE, - UART_3 = (int)USART3_BASE, - UART_4 = (int)UART4_BASE, - UART_5 = (int)UART5_BASE, - UART_6 = (int)USART6_BASE -} UARTName; - -typedef enum { - ADC0_0 = 0, - ADC0_1, - ADC0_2, - ADC0_3, - ADC0_4, - ADC0_5, - ADC0_6, - ADC0_7, - ADC0_8, - ADC0_9, - ADC0_10, - ADC0_11, - ADC0_12, - ADC0_13, - ADC0_14, - ADC0_15 -} ADCName; - -typedef enum { - DAC_0 = 0, - DAC_1 -} DACName; - -typedef enum { - SPI_1 = (int)SPI1_BASE, - SPI_2 = (int)SPI2_BASE, - SPI_3 = (int)SPI3_BASE, -} SPIName; - -typedef enum { - I2C_1 = (int)I2C1_BASE, - I2C_2 = (int)I2C2_BASE, - I2C_3 = (int)I2C3_BASE -} I2CName; - -typedef enum { - PWM_1 = 1, - PWM_2, - PWM_3, - PWM_4, - PWM_5, - PWM_6 -} PWMName; - -typedef enum { - CAN_1 = (int)CAN1_BASE, - CAN_2 = (int)CAN2_BASE -} CANName; -#endif - -#define STDIO_UART_TX PA_6 -#define STDIO_UART_RX PA_7 -#define STDIO_UART UART0 - -typedef enum { - DAC_0 = 0, - DAC_1 -} DACName; - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/PinNames.h b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/PinNames.h deleted file mode 100644 index ae1dfbf..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/PinNames.h +++ /dev/null @@ -1,215 +0,0 @@ - -#ifndef _PINNAMES_H_ -#define _PINNAMES_H_ - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - PORT_A = 0, - PORT_B = 1, - PORT_C = 2, - PORT_D = 3, - PORT_E = 4, - PORT_F = 5, - PORT_G = 6, - PORT_H = 7, - PORT_I = 8, - PORT_J = 9, - PORT_K = 10, - - PORT_V = 11, - PORT_U = 12, - PORT_MAX -} GPIO_PORT; - -#define RTL_PIN_PERI(FUN, IDX, SEL) ((int)(((FUN) << 8) | ((IDX)<<4) | (SEL))) -#define RTL_PIN_FUNC(FUN, SEL) ((int)(((FUN) << 7) | (SEL))) -#define RTL_GET_PERI_SEL(peri) ((int)((peri)&0x0F)) -#define RTL_GET_PERI_IDX(peri) ((int)(((peri) >> 4)&0x0F)) - -typedef enum { - PIN_INPUT=0, - PIN_OUTPUT -} PinDirection; - -typedef enum { - PA_0 = (PORT_A<<4|0), - PA_1 = (PORT_A<<4|1), - PA_2 = (PORT_A<<4|2), - PA_3 = (PORT_A<<4|3), - PA_4 = (PORT_A<<4|4), - PA_5 = (PORT_A<<4|5), - PA_6 = (PORT_A<<4|6), - PA_7 = (PORT_A<<4|7), - - PB_0 = (PORT_B<<4|0), - PB_1 = (PORT_B<<4|1), - PB_2 = (PORT_B<<4|2), - PB_3 = (PORT_B<<4|3), - PB_4 = (PORT_B<<4|4), - PB_5 = (PORT_B<<4|5), - PB_6 = (PORT_B<<4|6), - PB_7 = (PORT_B<<4|7), - - PC_0 = (PORT_C<<4|0), - PC_1 = (PORT_C<<4|1), - PC_2 = (PORT_C<<4|2), - PC_3 = (PORT_C<<4|3), - PC_4 = (PORT_C<<4|4), - PC_5 = (PORT_C<<4|5), - PC_6 = (PORT_C<<4|6), - PC_7 = (PORT_C<<4|7), - PC_8 = (PORT_C<<4|8), - PC_9 = (PORT_C<<4|9), - - PD_0 = (PORT_D<<4|0), - PD_1 = (PORT_D<<4|1), - PD_2 = (PORT_D<<4|2), - PD_3 = (PORT_D<<4|3), - PD_4 = (PORT_D<<4|4), - PD_5 = (PORT_D<<4|5), - PD_6 = (PORT_D<<4|6), - PD_7 = (PORT_D<<4|7), - PD_8 = (PORT_D<<4|8), - PD_9 = (PORT_D<<4|9), - - PE_0 = (PORT_E<<4|0), - PE_1 = (PORT_E<<4|1), - PE_2 = (PORT_E<<4|2), - PE_3 = (PORT_E<<4|3), - PE_4 = (PORT_E<<4|4), - PE_5 = (PORT_E<<4|5), - PE_6 = (PORT_E<<4|6), - PE_7 = (PORT_E<<4|7), - PE_8 = (PORT_E<<4|8), - PE_9 = (PORT_E<<4|9), - PE_A = (PORT_E<<4|10), - - PF_0 = (PORT_F<<4|0), - PF_1 = (PORT_F<<4|1), - PF_2 = (PORT_F<<4|2), - PF_3 = (PORT_F<<4|3), - PF_4 = (PORT_F<<4|4), - PF_5 = (PORT_F<<4|5), -// PF_6 = (PORT_F<<4|6), -// PF_7 = (PORT_F<<4|7), - - PG_0 = (PORT_G<<4|0), - PG_1 = (PORT_G<<4|1), - PG_2 = (PORT_G<<4|2), - PG_3 = (PORT_G<<4|3), - PG_4 = (PORT_G<<4|4), - PG_5 = (PORT_G<<4|5), - PG_6 = (PORT_G<<4|6), - PG_7 = (PORT_G<<4|7), - - PH_0 = (PORT_H<<4|0), - PH_1 = (PORT_H<<4|1), - PH_2 = (PORT_H<<4|2), - PH_3 = (PORT_H<<4|3), - PH_4 = (PORT_H<<4|4), - PH_5 = (PORT_H<<4|5), - PH_6 = (PORT_H<<4|6), - PH_7 = (PORT_H<<4|7), - - PI_0 = (PORT_I<<4|0), - PI_1 = (PORT_I<<4|1), - PI_2 = (PORT_I<<4|2), - PI_3 = (PORT_I<<4|3), - PI_4 = (PORT_I<<4|4), - PI_5 = (PORT_I<<4|5), - PI_6 = (PORT_I<<4|6), - PI_7 = (PORT_I<<4|7), - - PJ_0 = (PORT_J<<4|0), - PJ_1 = (PORT_J<<4|1), - PJ_2 = (PORT_J<<4|2), - PJ_3 = (PORT_J<<4|3), - PJ_4 = (PORT_J<<4|4), - PJ_5 = (PORT_J<<4|5), - PJ_6 = (PORT_J<<4|6), -// PJ_7 = (PORT_J<<4|7), - - PK_0 = (PORT_K<<4|0), - PK_1 = (PORT_K<<4|1), - PK_2 = (PORT_K<<4|2), - PK_3 = (PORT_K<<4|3), - PK_4 = (PORT_K<<4|4), - PK_5 = (PORT_K<<4|5), - PK_6 = (PORT_K<<4|6), -// PK_7 = (PORT_K<<4|7), - - AD_1 = (PORT_V<<4|1), - AD_2 = (PORT_V<<4|2), - AD_3 = (PORT_V<<4|3), - - DA_0 = (PORT_U<<4|0), - DA_1 = (PORT_U<<4|1), - // Arduino connector namings -/* - A0 = PA_0, - A1 = PA_1, - A2 = PA_4, - A3 = PB_0, - A4 = PC_1, - A5 = PC_0, - D0 = PA_3, - D1 = PA_2, - D2 = PA_10, - D3 = PB_3, - D4 = PB_5, - D5 = PB_4, - D6 = PB_10, - D7 = PA_8, - D8 = PA_9, - D9 = PC_7, - D10 = PB_6, - D11 = PA_7, - D12 = PA_6, - D13 = PA_5, - D14 = PB_9, - D15 = PB_8, - - - // Generic signals namings - LED1 = PB_4, - LED2 = PB_5, - LED3 = PB_6, - LED4 = PB_7, - USER_BUTTON = PA_3, - SERIAL_TX = PA_7, - SERIAL_RX = PA_6, - USBTX = PA_7, - USBRX = PA_6, - I2C_SCL = PC_5, - I2C_SDA = PC_4, - SPI_MOSI = PC_2, - SPI_MISO = PC_3, - SPI_SCK = PC_1, - SPI_CS = PC_0, - PWM_OUT = PD_4, -*/ - // Not connected - NC = -1 // (uint32_t)0xFFFFFFFF -} PinName; - -typedef enum { - PullNone = 0, - PullUp = 1, - PullDown = 2, - OpenDrain = 3, - PullDefault = PullNone -} PinMode; - -#define PORT_NUM(pin) (((uint32_t)(pin) >> 4) & 0xF) -#define PIN_NUM(pin) ((uint32_t)(pin) & 0xF) - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/PortNames.h b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/PortNames.h deleted file mode 100644 index 29a5324..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/PortNames.h +++ /dev/null @@ -1,38 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_PORTNAMES_H -#define MBED_PORTNAMES_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - PortA = 0, - PortB = 1, - PortC = 2, - PortD = 3, - PortE = 4, - PortF = 5, - PortG = 6, - PortH = 7, - PortI = 8 -} PortName; - -#ifdef __cplusplus -} -#endif -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/analogin_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/analogin_api.c deleted file mode 100644 index a214ba5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/analogin_api.c +++ /dev/null @@ -1,205 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ - -#include "objects.h" -#include "PinNames.h" -#include "hal_adc.h" -#include "analogin_api.h" - - - -#if CONFIG_ADC_EN -//#include "cmsis.h" -#include "pinmap.h" - - -extern uint32_t ConfigDebugErr; -extern uint32_t ConfigDebuginfo; - - -void analogin_init (analogin_t *obj, PinName pin){ - - uint32_t adc_idx; - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PSAL_ADC_USERCB_ADPT pSalADCUserCBAdpt = NULL; - PSAL_ADC_HND pSalADCHND = NULL; - - HAL_ADC_INIT_DAT HalADCInitDataTmp; - PHAL_ADC_INIT_DAT pHalADCInitDataTmp = &HalADCInitDataTmp; - -// ConfigDebugErr &= (~(_DBG_ADC_|_DBG_GDMA_)); -// ConfigDebugInfo&= (~(_DBG_ADC_|_DBG_GDMA_)); - - adc_idx = pin & 0x0F; - - /* Get I2C device handler */ - pSalADCMngtAdpt = &(obj->SalADCMngtAdpt); - pSalADCUserCBAdpt = (PSAL_ADC_USERCB_ADPT)&(obj->SalADCUserCBAdpt); - - /*To assign the rest pointers*/ - pSalADCMngtAdpt->pSalHndPriv = &(obj->SalADCHndPriv); - pSalADCMngtAdpt->pSalHndPriv->ppSalADCHnd = (void**)&(pSalADCMngtAdpt->pSalHndPriv); - - /* To assign the default (ROM) HAL OP initialization function */ - pSalADCMngtAdpt->pHalOpInit = &HalADCOpInit; - - /* To assign the default (ROM) HAL GDMA OP initialization function */ - pSalADCMngtAdpt->pHalGdmaOpInit = &HalGdmaOpInit; - - /* To assign the default (ROM) SAL interrupt function */ - pSalADCMngtAdpt->pSalIrqFunc = &ADCISRHandle; - - /* To assign the default (ROM) SAL DMA TX interrupt function */ - pSalADCMngtAdpt->pSalDMAIrqFunc = &ADCGDMAISRHandle; - - /* To backup user config first */ - _memcpy(pHalADCInitDataTmp, &(obj->HalADCInitData), sizeof(HAL_ADC_INIT_DAT)); - - - pSalADCMngtAdpt->pHalInitDat = &(obj->HalADCInitData); - pSalADCMngtAdpt->pHalOp = &(obj->HalADCOp); - pSalADCMngtAdpt->pIrqHnd = &(obj->ADCIrqHandleDat); - pSalADCMngtAdpt->pHalGdmaAdp = &(obj->HalADCGdmaAdpt); - pSalADCMngtAdpt->pHalGdmaOp = &(obj->HalADCGdmaOp); - pSalADCMngtAdpt->pIrqGdmaHnd = &(obj->ADCGdmaIrqHandleDat); - pSalADCMngtAdpt->pUserCB = &(obj->SalADCUserCB); - - /* Assign the private SAL handle to public SAL handle */ - pSalADCHND = &(pSalADCMngtAdpt->pSalHndPriv->SalADCHndPriv); - - /* Assign the internal HAL initial data pointer to the SAL handle */ - pSalADCHND->pInitDat = pSalADCMngtAdpt->pHalInitDat; - - /* Assign the internal user callback pointer to the SAL handle */ - pSalADCHND->pUserCB = pSalADCMngtAdpt->pUserCB; - - /*To assign user callback pointers*/ - pSalADCMngtAdpt->pUserCB->pTXCB = pSalADCUserCBAdpt; - pSalADCMngtAdpt->pUserCB->pTXCCB = (pSalADCUserCBAdpt+1); - pSalADCMngtAdpt->pUserCB->pRXCB = (pSalADCUserCBAdpt+2); - pSalADCMngtAdpt->pUserCB->pRXCCB = (pSalADCUserCBAdpt+3); - pSalADCMngtAdpt->pUserCB->pRDREQCB = (pSalADCUserCBAdpt+4); - pSalADCMngtAdpt->pUserCB->pERRCB = (pSalADCUserCBAdpt+5); - pSalADCMngtAdpt->pUserCB->pDMATXCB = (pSalADCUserCBAdpt+6); - pSalADCMngtAdpt->pUserCB->pDMATXCCB = (pSalADCUserCBAdpt+7); - pSalADCMngtAdpt->pUserCB->pDMARXCB = (pSalADCUserCBAdpt+8); - pSalADCMngtAdpt->pUserCB->pDMARXCCB = (pSalADCUserCBAdpt+9); - - /* Set ADC Device Number */ - pSalADCHND->DevNum = adc_idx; - - /* Load ADC default value */ - RtkADCLoadDefault(pSalADCHND); - - /* Assign ADC Pin Mux */ - pSalADCHND->PinMux = 0; - pSalADCHND->OpType = ADC_RDREG_TYPE; - - /* Load user setting */ - if (pHalADCInitDataTmp->ADCEndian != ADC_DATA_ENDIAN_LITTLE){ - pSalADCHND->pInitDat->ADCEndian = pHalADCInitDataTmp->ADCEndian; - } - - if (pHalADCInitDataTmp->ADCAudioEn != ADC_FEATURE_DISABLED){ - pSalADCHND->pInitDat->ADCAudioEn = pHalADCInitDataTmp->ADCAudioEn; - } - - /* Init ADC now */ - pSalADCHND->pInitDat->ADCBurstSz = 8; - pSalADCHND->pInitDat->ADCOneShotTD = 8; - RtkADCInit(pSalADCHND); -} - -float analogin_read(analogin_t *obj){ -// float value; - union { - unsigned int ui[2]; - unsigned short us[4]; - } adata; - PSAL_ADC_HND p = &((&(obj->SalADCMngtAdpt))->pSalHndPriv->SalADCHndPriv); - RtkADCReceiveBuf(p, (uint32_t *) &adata.ui); - return (float)(adata.us[p->DevNum]) / (float)(0xCE80); -/* - uint32_t AnaloginTmp[2] = {0,0}; - uint32_t AnaloginDatMsk = 0xFFFF; - uint8_t AnaloginIdx = 0; - uint32_t AnalogDat = 0; - - uint32_t AnalogDatFull = 0; - - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PSAL_ADC_HND pSalADCHND = NULL; - - pSalADCMngtAdpt = &(obj->SalADCMngtAdpt); - pSalADCHND = &(pSalADCMngtAdpt->pSalHndPriv->SalADCHndPriv); - AnaloginIdx = pSalADCHND->DevNum; - RtkADCReceiveBuf(pSalADCHND,&AnaloginTmp[0]); - - AnaloginDatMsk = (uint32_t)(AnaloginDatMsk<<((uint32_t)(16*(AnaloginIdx&0x01)))); - AnalogDat = AnaloginTmp[(AnaloginIdx/2)]; - AnalogDat = (AnalogDat & AnaloginDatMsk); - AnalogDat = (AnalogDat>>((uint32_t)(16*(AnaloginIdx&0x01)))); - - AnalogDatFull = 0xCE80; - - value = (float)(AnalogDat) / (float)(AnalogDatFull); - - return (float)value; -*/ -} - -uint16_t analogin_read_u16(analogin_t *obj){ - union { - unsigned int ui[2]; - unsigned short us[4]; - } adata; - PSAL_ADC_HND p = &((&(obj->SalADCMngtAdpt))->pSalHndPriv->SalADCHndPriv); - RtkADCRxManualRotate(p, (uint32_t *) &adata.ui); - return adata.us[p->DevNum]; -/* - uint32_t AnaloginTmp[2] = {0,0}; - uint32_t AnaloginDatMsk = 0xFFFF; - uint8_t AnaloginIdx = 0; - uint32_t AnalogDat = 0; - - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PSAL_ADC_HND pSalADCHND = NULL; - - pSalADCMngtAdpt = &(obj->SalADCMngtAdpt); - pSalADCHND = &(pSalADCMngtAdpt->pSalHndPriv->SalADCHndPriv); - AnaloginIdx = pSalADCHND->DevNum; - RtkADCRxManualRotate(pSalADCHND,&AnaloginTmp[0]); - - - //DBG_8195A("[0]:%08x, %08x\n", AnaloginTmp[0], AnaloginTmp[1] ); - AnaloginDatMsk = (uint32_t)(AnaloginDatMsk<<((uint32_t)(16*(AnaloginIdx&0x01)))); - AnalogDat = AnaloginTmp[(AnaloginIdx/2)]; - AnalogDat = (AnalogDat & AnaloginDatMsk); - AnalogDat = (AnalogDat>>((uint32_t)(16*(AnaloginIdx&0x01)))); - return (uint16_t)AnalogDat; -*/ - -} - - -void analogin_deinit(analogin_t *obj){ -/* - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PSAL_ADC_HND pSalADCHND = NULL; - - pSalADCMngtAdpt = &(obj->SalADCMngtAdpt); - p = &(pSalADCMngtAdpt->pSalHndPriv->SalADCHndPriv); */ - - PSAL_ADC_HND p = &((&(obj->SalADCMngtAdpt))->pSalHndPriv->SalADCHndPriv); - - /* To deinit analogin */ - RtkADCDeInit(p); -} -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/device.h b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/device.h deleted file mode 100644 index 2034d0b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/device.h +++ /dev/null @@ -1,48 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_DEVICE_H -#define MBED_DEVICE_H - -#define DEVICE_PORTIN 1 -#define DEVICE_PORTOUT 1 -#define DEVICE_PORTINOUT 1 - -#define DEVICE_INTERRUPTIN 1 - -#define DEVICE_ANALOGIN 1 -#define DEVICE_ANALOGOUT 1 - -#define DEVICE_SERIAL 1 - -#define DEVICE_I2C 1 -#define DEVICE_I2CSLAVE 1 - -#define DEVICE_SPI 1 -#define DEVICE_SPISLAVE 1 - -#define DEVICE_CAN 0 - -#define DEVICE_RTC 1 - -#define DEVICE_ETHERNET 1 - -#define DEVICE_PWMOUT 1 - -#define DEVICE_SLEEP 1 - -#include "objects.h" - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/dma_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/dma_api.c deleted file mode 100644 index 61b49c6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/dma_api.c +++ /dev/null @@ -1,89 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek - * All rights reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ******************************************************************************* - */ -#include "dma_api.h" -#include "cmsis.h" - -extern BOOL HalGdmaMemCpyInit(PHAL_GDMA_OBJ pHalGdmaObj); -extern void HalGdmaMemCpyDeInit(PHAL_GDMA_OBJ pHalGdmaObj); -extern void* HalGdmaMemCpy(PHAL_GDMA_OBJ pHalGdmaObj, void* pDest, void* pSrc, uint32_t len); -extern void HalGdmaMemAggr(PHAL_GDMA_OBJ pHalGdmaObj, PHAL_GDMA_BLOCK pHalGdmaBlock); -extern BOOL HalGdmaMemCpyAggrInit(PHAL_GDMA_OBJ pHalGdmaObj); - -/** - * @brief Initial the GDMA - * - * @param dma_obj: the GDMA object - * handler: the callback function for a DMA transfer complete. - * id: the argument of the callback function. - * @return None - * - */ -void dma_memcpy_aggr_init(gdma_t *dma_obj, dma_irq_handler handler, uint32_t id) -{ - dma_obj->gdma_obj.GdmaIrqHandle.IrqFun = (IRQ_FUN)handler; - dma_obj->gdma_obj.GdmaIrqHandle.Data = (uint32_t)id; - dma_obj->gdma_allocated = HalGdmaMemCpyAggrInit(&(dma_obj->gdma_obj)); -} - - -void dma_memcpy_init(gdma_t *dma_obj, dma_irq_handler handler, uint32_t id) -{ - dma_obj->gdma_obj.GdmaIrqHandle.IrqFun = (IRQ_FUN)handler; - dma_obj->gdma_obj.GdmaIrqHandle.Data = (uint32_t)id; - dma_obj->gdma_allocated = HalGdmaMemCpyInit(&(dma_obj->gdma_obj)); -} - -/** - * @brief De-Initial the GDMA - * - * @param dma_obj: the GDMA object - * @return None - * - */ -void dma_memcpy_deinit(gdma_t *dma_obj) -{ - if (dma_obj->gdma_allocated) { - HalGdmaMemCpyDeInit(&(dma_obj->gdma_obj)); - } -} - -/** - * @brief To do a memory copy by DMA - * - * @param None - * @return None - * - */ -void dma_memcpy(gdma_t *dma_obj, void *dst, void* src, uint32_t len) -{ -#if 0 - if (!dma_obj->gdma_allocated) { - dma_irq_handler handler; - - _memcpy(dst, src, len); - handler = dma_obj->GdmaIrqHandle.IrqFun; - handler(dma_obj->GdmaIrqHandle.Data); - } -#endif - HalGdmaMemCpy(&(dma_obj->gdma_obj), dst, src, len); -} - -void dma_memcpy_aggr(gdma_t *dma_obj, PHAL_GDMA_BLOCK block_info) -{ - HalGdmaMemAggr(&(dma_obj->gdma_obj), block_info); -} diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/efuse_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/efuse_api.c deleted file mode 100644 index 57c9fe7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/efuse_api.c +++ /dev/null @@ -1,155 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ - -#include "rtl8195a.h" - -#ifdef CONFIG_EFUSE_EN -/* in hal_efuse.h -extern void ReadEfuseContant1(OUT uint8_t *pContant); -extern uint8_t WriteEfuseContant1(IN uint8_t CodeWordNum, IN uint8_t WordEnable, IN uint8_t *pContant); -extern void ReadEOTPContant(OUT uint8_t *pContant); -extern void WriteEOTPContant(IN uint8_t *pContant); -extern uint8_t GetRemainingEfuseLength(void); -extern void HALJtagOff(void); -*/ - -/** - * @brief get remaining efuse length - * @retval remaining efuse length - */ -int efuse_get_remaining_length(void) -{ - return GetRemainingEfuseLength(); -} - - -/** - * @brief Read efuse contant of specified user - * @param data: Specified the address to save the readback data. - */ -void efuse_mtp_read(uint8_t * data) -{ - ReadEfuseContant1(data); - return; -} - -/** - * @brief Write user's contant to efuse - * @param *data: Specified the data to be programmed. - * @param len: Specifies the data length of programmed data. - * @retval status: Success:0~32 or Failure: -1. - */ -int efuse_mtp_write(uint8_t *data, uint8_t len) -{ - - uint8_t len_low, len_high, word_enable = 0; - - if( (len & 0x01) == 1) - len += 1; - - if(len > 32){ - return -1; - } - if(len == 0){ - return 0; - } - - len_low = len & 0x07; - len_high = (len >> 3) & 0x07; - - if(len_low == 0) - word_enable = 0; - else if(len_low == 2) - word_enable = 1; - else if(len_low == 4) - word_enable = 3; - else if(len_low == 6) - word_enable = 7; - - switch (len_high){ - case 0: - WriteEfuseContant1(0, word_enable, data); - break; - - case 1: - WriteEfuseContant1(0, 0xf, data); - WriteEfuseContant1(1, word_enable, data+8); - break; - - case 2: - WriteEfuseContant1(0, 0xf, data); - WriteEfuseContant1(1, 0xf, data+8); - WriteEfuseContant1(2, word_enable, data+8); - break; - - case 3: - WriteEfuseContant1(0, 0xf, data); - WriteEfuseContant1(1, 0xf, data+8); - WriteEfuseContant1(2, 0xf, data+16); - WriteEfuseContant1(3, word_enable, data+24); - break; - - case 4: - WriteEfuseContant1(0, 0xf, data); - WriteEfuseContant1(1, 0xf, data+8); - WriteEfuseContant1(2, 0xf, data+16); - WriteEfuseContant1(3, 0xf, data+24); - } - return len; -} - - -/** - * @brief Read efuse OTP contant - * @param address: Specifies the offset of the OTP. - * @param len: Specifies the length of readback data. - * @param buf: Specified the address to save the readback data. - */ -int efuse_otp_read(uint8_t address, uint8_t len, uint8_t *buf) -{ - uint8_t content[32]; // the OTP max length is 32 - - if((address+len) > 32) - return -1; - ReadEOTPContant(content); - _memcpy(buf, content+address, len); - return 0; -} - - -/** - * @brief Write user's contant to OTP efuse - * @param address: Specifies the offset of the programmed OTP. - * @param len: Specifies the data length of programmed data. - * @param *buf: Specified the data to be programmed. - * @retval status: Success:0 or Failure: -1. - */ -int efuse_otp_write(uint8_t address, uint8_t len, uint8_t *buf) -{ - uint8_t content[32]; // the OTP max length is 32 - - if((address+len) > 32) - return -1; - _memset(content, 0xFF, 32); - _memcpy(content+address, buf, len); - WriteEOTPContant(content); - return 0; -} - - -/** - * @brief Disable jtag - */ -int efuse_disable_jtag(void) -{ - HALJtagOff(); - return 0; -} -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/ethernet_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/ethernet_api.c deleted file mode 100644 index 78b9c94..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/ethernet_api.c +++ /dev/null @@ -1,104 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ - -#include "ethernet_api.h" -#include "ethernet_ex_api.h" -#include "hal_mii.h" - -#if DEVICE_ETHERNET - -#if CONFIG_MII_EN - -extern HAL_ETHER_ADAPTER HalEtherAdp; - - - -void ethernet_irq_hook(ethernet_callback callback) -{ - HalEtherAdp.CallBack = callback; -} - - -void ethernet_set_descnum(uint8_t txdescCnt, uint8_t rxdescCnt) -{ - HalEtherAdp.tx_desc_num = txdescCnt; - HalEtherAdp.rx_desc_num = rxdescCnt; -} - -void ethernet_trx_pre_setting(uint8_t *TxDescAddr, uint8_t *RxDescAddr, uint8_t *pTxPktBuf, uint8_t *pRxPktBuf) -{ - HalEtherAdp.TxDescAddr = TxDescAddr; - HalEtherAdp.RxDescAddr = RxDescAddr; - HalEtherAdp.pTxPktBuf = pTxPktBuf; - HalEtherAdp.pRxPktBuf = pRxPktBuf; -} - - -int ethernet_init(void) -{ - return HalMiiInit(); -} - - -void ethernet_free(void) -{ - HalMiiDeInit(); -} - - -int ethernet_write(const char *data, int size) -{ - return HalMiiWriteData(data, size); -} - - -int ethernet_send(void) -{ - return HalMiiSendPacket(); -} - - -int ethernet_receive(void) -{ - return HalMiiReceivePacket(); -} - - -int ethernet_read(char *data, int size) -{ - return HalMiiReadData((uint8_t*)data, size); -} - - -void ethernet_address(char *mac) -{ - HalMiiGetMacAddress((uint8_t*)mac); -} - - -int ethernet_link(void) -{ - int ret; - - - ret = HalMiiGetLinkStatus(); - - return ret; -} - - -void ethernet_set_link(int speed, int duplex) -{ - HalMiiForceLink(speed, duplex); -} - -#endif // #if CONFIG_MII_EN -#endif // #if DEVICE_ETHERNET - diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/flash_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/flash_api.c deleted file mode 100644 index 851b72e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/flash_api.c +++ /dev/null @@ -1,637 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ - -#include "objects.h" -#include "PinNames.h" - -#include "pinmap.h" - -#include "rtl8195a.h" -#include "hal_spi_flash.h" -#include "hal_platform.h" -#include "rtl8195a_spi_flash.h" -#include "hal_api.h" -#include "flash_api.h" - -extern uint32_t ConfigDebugInfo; -extern SPIC_INIT_PARA SpicInitParaAllClk[SpicMaxMode][CPU_CLK_TYPE_NO]; // SpicMaxMode = 3, CPU_CLK_TYPE_NO = 6 ! - -_LONG_CALL_ -extern void SpicWaitBusyDoneRtl8195A(void); - -bool fspic_isinit = 0; -flash_t flashobj; - -/** - * global data structure - */ -//flash_t flash; -/** - * @brief Control the flash chip write protect enable/disable - * @param protect: 1/0: protect/unprotect - * @retval none - */ -void flash_write_protect(flash_t *obj, uint32_t protect) { - flash_turnon(); - - if (fspic_isinit == 0) - flash_init(&flashobj); - SpicWriteProtectFlashRtl8195A(protect); - SpicDisableRtl8195A(); -} - -/** - * @brief Init Flash - * @param obj: address of the flash object - * @retval none - */ -void flash_init(flash_t *obj) { - //SPIC_INIT_PARA spic_init_para; - - // Init SPI Flash Controller -#if CONFIG_DEBUG_LOG > 4 - DBG_8195A("Initial Spi Flash Controller\n"); -#endif - uint8_t flmode; - SPI_FLASH_PIN_FCTRL(ON); -#if 0 - if (SpicFlashInitRtl8195A(SpicQuadBitMode)) { - flmode = SpicQuadBitMode; - fspic_isinit = 1; - } - else -#endif - if (SpicFlashInitRtl8195A(SpicDualBitMode)) { // SpicFlashInitRtl8195A(SpicQuadBitMode) - flmode = SpicDualBitMode; - fspic_isinit = 1; - } else if (SpicFlashInitRtl8195A(SpicOneBitMode)) { - flmode = SpicOneBitMode; - fspic_isinit = 1; - } else { - DBG_8195A("SPI Init Fail!\n"); // DBG_SPIF_ERR? - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSTBY_INFO3, - HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSTBY_INFO3) | 0xf); -// flmode = SpicOneBitMode; - return; - } - uint8_t curclk = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1) - >> BIT_SHIFT_PESOC_OCP_CPU_CK_SEL) & BIT_MASK_PESOC_OCP_CPU_CK_SEL; - flashobj.SpicInitPara = SpicInitParaAllClk[flmode][curclk]; - flashobj.SpicInitPara.Mode.CpuClk = curclk; - flashobj.SpicInitPara.Mode.BitMode = flmode; - -#if CONFIG_DEBUG_LOG > 3 - DBG_SPIF_INFO("Flash ID: %02x%02x%02x\n", flashobj.SpicInitPara.id[0], flashobj.SpicInitPara.id[1], flashobj.SpicInitPara.id[2]); - DBG_SPIF_INFO("Flash Mode: 0x%02x; BaudRate:%d; RdDummyCyle:%d; DelayLine:%d\n", - flashobj.SpicInitPara.Mode.BitMode, flashobj.SpicInitPara.BaudRate, flashobj.SpicInitPara.RdDummyCyle, flashobj.SpicInitPara.DelayLine); - DBG_SPIF_INFO("Flash Size: %d bytes\n", flash_get_size(obj)); -#endif -} - -void flash_turnon(void) { - SPI_FLASH_PIN_FCTRL(ON); - SpicWaitBusyDoneRtl8195A(); -} - -/** - * @brief Erase flash sector - * @param address: Specifies the starting address to be erased. - * @retval none - */ -void flash_erase_sector(flash_t *obj, uint32_t address) { - flash_turnon(); - - if (fspic_isinit == 0) - flash_init(&flashobj); - - SpicSectorEraseFlashRtl8195A(SPI_FLASH_BASE + address); - SpicDisableRtl8195A(); -} - -void flash_erase_block(flash_t *obj, uint32_t address) { - flash_turnon(); - - if (fspic_isinit == 0) - flash_init(&flashobj); - - SpicBlockEraseFlashRtl8195A(SPI_FLASH_BASE + address); - SpicDisableRtl8195A(); -} - -/** - * @brief Read a word from specified address - * @param obj: Specifies the parameter of flash object. - * @param address: Specifies the address to be read. - * @param data: Specified the address to save the readback data. - * @retval status: Success:1 or Failure: Others. - */ -int flash_read_word(flash_t *obj, uint32_t address, uint32_t * data) { - - flash_turnon(); - if (fspic_isinit == 0) - flash_init(&flashobj); - // Wait flash busy done (wip=0) - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - - *data = HAL_READ32(SPI_FLASH_BASE, address); - SpicDisableRtl8195A(); - - return 1; -} - -/** - * @brief Write a word to specified address - * @param obj: Specifies the parameter of flash object. - * @param address: Specifies the address to be programmed. - * @param data: Specified the data to be programmed. - * @retval status: Success:1 or Failure: Others. - */ -int flash_write_word(flash_t *obj, uint32_t address, uint32_t data) { - uint8_t flashtype = 0; - - flash_turnon(); - if (fspic_isinit == 0) - flash_init(&flashobj); - - flashtype = flashobj.SpicInitPara.flashtype; - - //Write word - HAL_WRITE32(SPI_FLASH_BASE, address, data); - - // Wait spic busy done - SpicWaitBusyDoneRtl8195A(); - - // Wait flash busy done (wip=0) - if (flashtype == FLASH_MICRON) { - SpicWaitOperationDoneRtl8195A(flashobj.SpicInitPara); - } else - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - - SpicDisableRtl8195A(); - return 1; -} - -/** - * @brief Read a stream of data from specified address - * @param obj: Specifies the parameter of flash object. - * @param address: Specifies the address to be read. - * @param len: Specifies the length of the data to read. - * @param data: Specified the address to save the readback data. - * @retval status: Success:1 or Failure: Others. - */ -int flash_stream_read(flash_t *obj, uint32_t address, uint32_t len, - uint8_t * data) { - uint32_t offset_to_align; - uint32_t i; - uint32_t read_word; - uint8_t *ptr; - uint8_t *pbuf; - - flash_turnon(); - - if (fspic_isinit == 0) - flash_init(&flashobj); - - // Wait flash busy done (wip=0) - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - - offset_to_align = address & 0x03; - pbuf = data; - if (offset_to_align != 0) { - // the start address is not 4-bytes aligned - read_word = HAL_READ32(SPI_FLASH_BASE, (address - offset_to_align)); - ptr = (uint8_t*) &read_word + offset_to_align; - offset_to_align = 4 - offset_to_align; - for (i = 0; i < offset_to_align; i++) { - *pbuf = *(ptr + i); - pbuf++; - len--; - if (len == 0) { - break; - } - } - } - - address = (((address - 1) >> 2) + 1) << 2; // address = next 4-bytes aligned - - ptr = (uint8_t*) &read_word; - if ((uint32_t) pbuf & 0x03) { - while (len >= 4) { - read_word = HAL_READ32(SPI_FLASH_BASE, address); - for (i = 0; i < 4; i++) { - *pbuf = *(ptr + i); - pbuf++; - } - address += 4; - len -= 4; - } - } else { - while (len >= 4) { - *((uint32_t *) pbuf) = HAL_READ32(SPI_FLASH_BASE, address); - pbuf += 4; - address += 4; - len -= 4; - } - } - - if (len > 0) { - read_word = HAL_READ32(SPI_FLASH_BASE, address); - for (i = 0; i < len; i++) { - *pbuf = *(ptr + i); - pbuf++; - } - } - - SpicDisableRtl8195A(); - return 1; -} - -/** - * @brief Write a stream of data to specified address - * @param obj: Specifies the parameter of flash object. - * @param address: Specifies the address to be read. - * @param len: Specifies the length of the data to write. - * @param data: Specified the pointer of the data to be written. - * @retval status: Success:1 or Failure: Others. - */ -int flash_stream_write(flash_t *obj, uint32_t address, uint32_t len, - uint8_t * data) { - uint32_t offset_to_align; - uint32_t align_addr; - uint32_t i; - uint32_t write_word; - uint8_t *ptr; - uint8_t *pbuf; - uint8_t flashtype = 0; - - flash_turnon(); - - if (fspic_isinit == 0) - flash_init(&flashobj); - - flashtype = flashobj.SpicInitPara.flashtype; - offset_to_align = address & 0x03; - pbuf = data; - if (offset_to_align != 0) { - // the start address is not 4-bytes aligned - align_addr = (address - offset_to_align); - write_word = HAL_READ32(SPI_FLASH_BASE, align_addr); - ptr = (uint8_t*) &write_word + offset_to_align; - offset_to_align = 4 - offset_to_align; - for (i = 0; i < offset_to_align; i++) { - *(ptr + i) = *pbuf; - pbuf++; - len--; - if (len == 0) { - break; - } - } - //Write word - HAL_WRITE32(SPI_FLASH_BASE, align_addr, write_word); - // Wait spic busy done - SpicWaitBusyDoneRtl8195A(); - // Wait flash busy done (wip=0) - if (flashtype == FLASH_MICRON) { - SpicWaitOperationDoneRtl8195A(flashobj.SpicInitPara); - } else - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - } - - address = (((address - 1) >> 2) + 1) << 2; // address = next 4-bytes aligned - - if ((uint32_t) pbuf & 0x03) { - while (len >= 4) { - write_word = (uint32_t) (*pbuf) | ((uint32_t) (*(pbuf + 1)) << 8) - | ((uint32_t) (*(pbuf + 2)) << 16) | ((uint32_t) (*(pbuf + 3)) << 24); - //Write word - HAL_WRITE32(SPI_FLASH_BASE, address, write_word); - // Wait spic busy done - SpicWaitBusyDoneRtl8195A(); - // Wait flash busy done (wip=0) - if (flashtype == FLASH_MICRON) { - SpicWaitOperationDoneRtl8195A(flashobj.SpicInitPara); - } else - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - - pbuf += 4; - address += 4; - len -= 4; - } - } else { - while (len >= 4) { - //Write word - HAL_WRITE32(SPI_FLASH_BASE, address, (uint32_t)*((uint32_t *)pbuf)); - // Wait spic busy done - SpicWaitBusyDoneRtl8195A(); - // Wait flash busy done (wip=0) - if (flashtype == FLASH_MICRON) { - SpicWaitOperationDoneRtl8195A(flashobj.SpicInitPara); - } else - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - - pbuf += 4; - address += 4; - len -= 4; - } - } - - if (len > 0) { - write_word = HAL_READ32(SPI_FLASH_BASE, address); - ptr = (uint8_t*) &write_word; - for (i = 0; i < len; i++) { - *(ptr + i) = *pbuf; - pbuf++; - } - //Write word - HAL_WRITE32(SPI_FLASH_BASE, address, write_word); - // Wait spic busy done - SpicWaitBusyDoneRtl8195A(); - // Wait flash busy done (wip=0) - if (flashtype == FLASH_MICRON) { - SpicWaitOperationDoneRtl8195A(flashobj.SpicInitPara); - } else - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - - } - - SpicDisableRtl8195A(); - return 1; -} - -/* - Function Description: - This function performans the same functionality as the function flash_stream_write. - It enhances write performance by reducing overheads. - Users can use either of functions depending on their needs. - - * @brief Write a stream of data to specified address - * @param obj: Specifies the parameter of flash object. - * @param address: Specifies the address to be read. - * @param Length: Specifies the length of the data to write. - * @param data: Specified the pointer of the data to be written. - * @retval status: Success:1 or Failure: Others. - - */ - -int flash_burst_write(flash_t *obj, uint32_t address, uint32_t Length, - uint8_t * data) { - - uint32_t OccuSize; - uint32_t ProgramSize; - uint32_t PageSize; - uint8_t flashtype = 0; - - PageSize = 256; - - flash_turnon(); - - if (fspic_isinit == 0) - flash_init(&flashobj); - - flashtype = flashobj.SpicInitPara.flashtype; - - OccuSize = address & 0xFF; - if ((Length >= PageSize) || ((Length + OccuSize) >= PageSize)) - ProgramSize = PageSize - OccuSize; - else - ProgramSize = Length; - - flashobj.Length = Length; - while (Length > 0) { - if (OccuSize) { - SpicUserProgramRtl8195A(data, flashobj.SpicInitPara, address, - &(flashobj.Length)); - // Wait spic busy done - SpicWaitBusyDoneRtl8195A(); - // Wait flash busy done (wip=0) - if (flashtype == FLASH_MICRON) { - SpicWaitOperationDoneRtl8195A(flashobj.SpicInitPara); - } else - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - - address += ProgramSize; - data += ProgramSize; - Length -= ProgramSize; - OccuSize = 0; - } else { - while ((flashobj.Length) >= PageSize) { - SpicUserProgramRtl8195A(data, flashobj.SpicInitPara, address, - &(flashobj.Length)); - // Wait spic busy done - SpicWaitBusyDoneRtl8195A(); - // Wait flash busy done (wip=0) - if (flashtype == FLASH_MICRON) { - SpicWaitOperationDoneRtl8195A(flashobj.SpicInitPara); - } else - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - - address += PageSize; - data += PageSize; - Length -= PageSize; - } - flashobj.Length = Length; - if ((flashobj.Length) > 0) { - SpicUserProgramRtl8195A(data, flashobj.SpicInitPara, address, - &(flashobj.Length)); - // Wait spic busy done - SpicWaitBusyDoneRtl8195A(); - // Wait flash busy done (wip=0) - if (flashtype == FLASH_MICRON) { - SpicWaitOperationDoneRtl8195A(flashobj.SpicInitPara); - } else - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - - break; - } - } - flashobj.Length = Length; - } - - SpicDisableRtl8195A(); - return 1; - -} -/** - * @brief Read a stream of data from specified address - * @param obj: Specifies the parameter of flash object. - * @param address: Specifies the address to be read. - * @param len: Specifies the length of the data to read. - * @param data: Specified the address to save the readback data. - * @retval status: Success:1 or Failure: Others. - */ - -int flash_burst_read(flash_t *obj, uint32_t address, uint32_t Length, - uint8_t * data) { - flash_turnon(); - - if (fspic_isinit == 0) - flash_init(&flashobj); - - // Wait flash busy done (wip=0) - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - SpicUserReadRtl8195A(Length, address, data, - flashobj.SpicInitPara.Mode.BitMode); - SpicDisableRtl8195A(); - return 1; -} - -int flash_get_status(flash_t *obj) { - uint8_t Status = 0; - - flash_turnon(); - - if (fspic_isinit == 0) - flash_init(&flashobj); - - Status = SpicGetFlashStatusRefinedRtl8195A(flashobj.SpicInitPara); - - SpicDisableRtl8195A(); - return Status; -} - -/* - Function Description: - Please refer to the datatsheet of flash for more details of the content of status register. - The block protected area and the corresponding control bits are provided in the flash datasheet. - - * @brief Set Status register to enable desired operation - * @param obj: Specifies the parameter of flash object. - * @param data: Specifies which bit users like to set - ex: if users want to set the third bit, data = 0x8. - - */ -int flash_set_status(flash_t *obj, uint32_t data) { - flash_turnon(); - - if (fspic_isinit == 0) - flash_init(&flashobj); - - SpicSetFlashStatusRefinedRtl8195A(data, flashobj.SpicInitPara); - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - DBG_8195A("Status Register After Setting= %x\n", - flash_get_status(&flashobj)); - SpicDisableRtl8195A(); - return 1; -} - -/* - Function Description: - This function aims to reset the status register, please make sure the operation is appropriate. - */ -void flash_reset_status(flash_t *obj) { - flash_turnon(); - - if (fspic_isinit == 0) - flash_init(&flashobj); - - SpicSetFlashStatusRefinedRtl8195A(0, flashobj.SpicInitPara); - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - SpicDisableRtl8195A(); -} -/* - Function Description: - This function is only for Micron 512Mbit flash to access beyond 128Mbit by switching between four 128 Mbit area. - Please refer to flash datasheet for more information about memory mapping. - */ - -int flash_set_extend_addr(flash_t *obj, uint32_t data) { - flash_turnon(); - - if (fspic_isinit == 0) - flash_init(&flashobj); - - SpicSetExtendAddrRtl8195A(data, flashobj.SpicInitPara); - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - DBG_8195A("Extended Address Register After Setting = %x\n", - flash_get_extend_addr(&flashobj)); - SpicDisableRtl8195A(); - return 1; -} - -int flash_get_extend_addr(flash_t *obj) { - uint8_t Status = 0; - - flash_turnon(); - if (fspic_isinit == 0) - flash_init(&flashobj); - Status = SpicGetExtendAddrRtl8195A(flashobj.SpicInitPara); - - SpicDisableRtl8195A(); - return Status; - -} - -/* - * Return Flash size in bytes - * = 0 - unknown flash - */ -unsigned int flash_get_size(flash_t *obj) { - unsigned int flashchip_size = 0; - if (fspic_isinit == 0) { - flash_turnon(); - flash_init(&flashobj); - SpicDisableRtl8195A(); - if (fspic_isinit == 0) - return flashchip_size; - } - if (flashobj.SpicInitPara.id[2] > 0x11 - && flashobj.SpicInitPara.id[2] < 0x20) { - flashchip_size = 1 << (flashobj.SpicInitPara.id[2]); // Flash size in bytes - } else - flashchip_size = 1024 * 1024; // default 1 mbytes? - return flashchip_size; -} - -/* - * Read Flash OTP data - */ -extern void SpicTxCmdWithDataRtl8195A(uint8_t cmd, uint8_t DataPhaseLen, uint8_t* pData, SPIC_INIT_PARA SpicInitPara); - -int flash_otp_read(flash_t *obj, uint32_t address, uint32_t Length, - uint8_t * data) { - int ret = 1; - flash_turnon(); - if (fspic_isinit == 0) - flash_init(&flashobj); - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); - switch (flashobj.SpicInitPara.flashtype) { - case FLASH_MXIC_4IO: - case FLASH_MXIC: // Only 512 bits -#if CONFIG_DEBUG_LOG > 4 - DBG_SPIF_INFO("MXIC: Only 512 bits!\n"); -#endif - SpicTxCmdWithDataRtl8195A(FLASH_CMD_ENSO, 0, 0, flashobj.SpicInitPara); // enter secured OTP - SpicUserReadRtl8195A(Length, address, data, - flashobj.SpicInitPara.Mode.BitMode); - SpicTxCmdWithDataRtl8195A(FLASH_CMD_EXSO, 0, 0, flashobj.SpicInitPara); // exit secured OTP - break; - case FLASH_EON: // OTP sector is mapping to sector 1023 -#if CONFIG_DEBUG_LOG > 4 - DBG_SPIF_INFO("EON: OTP sector is mapping to sector 1023!\n"); -#endif - SpicTxCmdWithDataRtl8195A(FLASH_CMD_EOTPM, 0, 0, flashobj.SpicInitPara); // enter secured OTP - SpicUserReadRtl8195A(Length, address, data, - flashobj.SpicInitPara.Mode.BitMode); - SpicTxCmdWithDataRtl8195A(FLASH_CMD_WRDI, 0, 0, flashobj.SpicInitPara); // exit secured OTP - break; - case FLASH_MICRON: // (4Bh) READ OTP ARRAY -#if CONFIG_DEBUG_LOG > 4 - DBG_SPIF_INFO("MICRON: @TODO !\n"); -#endif - // FLASH_CMD_ROTPA - ret = 0; - break; - default: - DBG_8195A("Flash type?"); - ret = 0; - } - SpicDisableRtl8195A(); - return ret; -} diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/flash_eep.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/flash_eep.c deleted file mode 100644 index 6547342..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/flash_eep.c +++ /dev/null @@ -1,521 +0,0 @@ -/* - * flash_eep.c - * - * Created on: 19/01/2015 - * Port RTL87xx: 15/10/16 - * Author: pvvx - */ - -#include -//#include -//#include -#include -#include -#include "device_lock.h" -#include "flash_api.h" -#include "flash_eep.h" - -//----------------------------------------------------------------------------- -#ifdef CONFIG_DEBUG_LOG -#define DEBUGSOO CONFIG_DEBUG_LOG -#else -#define DEBUGSOO 0 -#endif - -#define mMIN(a, b) ((a < b)? a : b) -#define align(a) ((a + 3) & 0xFFFFFFFC) - -typedef union // заголовок объекта сохранения feep -{ - struct { - unsigned short size; - unsigned short id; - } __attribute__((packed)) n; - unsigned int x; -} __attribute__((packed)) fobj_head; - -#define fobj_head_size 4 -#define fobj_x_free 0xffffffff -#define MAX_FOBJ_SIZE 512 // максимальный размер сохраняемых объeктов -#define FMEM_ERROR_MAX 5 -//----------------------------------------------------------------------------- -flash_t flash; -//QueueHandle_t flash_mutex; -//----------------------------------------------------------------------------- - - -/*------------------------------------------------------------------------------------- - Копирует данные из области align(4) (flash, registers, ...) в область align(1) (ram) ---------------------------------------------------------------------------------------*/ -void FLASH_EEP_ATTR copy_align4_to_align1(unsigned char * pd, void * ps, unsigned int len) -{ - union { - unsigned char uc[4]; - unsigned int ud; - }tmp; - unsigned int *p = (unsigned int *)((unsigned int)ps & (~3)); - unsigned int xlen = (unsigned int)ps & 3; - // unsigned int size = len; - - if(xlen) { - tmp.ud = *p++; - while (len) { - len--; - *pd++ = tmp.uc[xlen++]; - if(xlen & 4) break; - } - } - xlen = len >> 2; - while(xlen) { - tmp.ud = *p++; - *pd++ = tmp.uc[0]; - *pd++ = tmp.uc[1]; - *pd++ = tmp.uc[2]; - *pd++ = tmp.uc[3]; - xlen--; - } - if(len & 3) { - tmp.ud = *p; - pd[0] = tmp.uc[0]; - if(len & 2) { - pd[1] = tmp.uc[1]; - if(len & 1) { - pd[2] = tmp.uc[2]; - } - } - } - // return size; -} -/*------------------------------------------------------------------------------------ - Копирует данные из области align(1) (ram) в область align(4) (flash, registers) ---------------------------------------------------------------------------------------*/ -void FLASH_EEP_ATTR copy_align1_to_align4(void * pd, unsigned char * ps, unsigned int len) -{ - union { - unsigned char uc[4]; - unsigned int ud; - }tmp; - unsigned int *p = (unsigned int *)(((unsigned int)pd) & (~3)); - unsigned int xlen = (unsigned int)pd & 3; -// unsigned int size = len; - if(xlen) { - tmp.ud = *p; - while (len) { - len--; - tmp.uc[xlen++] = *ps++; - if(xlen & 4) break; - } - *p++ = tmp.ud; - } - xlen = len >> 2; - while(xlen) { - tmp.uc[0] = *ps++; - tmp.uc[1] = *ps++; - tmp.uc[2] = *ps++; - tmp.uc[3] = *ps++; - *p++ = tmp.ud; - xlen--; - } - if(len & 3) { - tmp.ud = *p; - tmp.uc[0] = ps[0]; - if(len & 2) { - tmp.uc[1] = ps[1]; - if(len & 1) { - tmp.uc[2] = ps[2]; - } - } - *p = tmp.ud; - } -// return size; -} -/*------------------------------------------------------------------------------------ - Запись байта в область align(4) (flash, registers) ---------------------------------------------------------------------------------------*/ -void FLASH_EEP_ATTR write_align4_chr(unsigned char *pd, unsigned char c) -{ - union { - unsigned char uc[4]; - unsigned int ud; - }tmp; - unsigned int *p = (unsigned int *)((unsigned int)pd & (~3)); - unsigned int xlen = (unsigned int)pd & 3; - tmp.ud = *p; - tmp.uc[xlen] = c; - *p = tmp.ud; -} -/*------------------------------------------------------------------------------------ - Чтение байта из области align(4) (flash, registers) ---------------------------------------------------------------------------------------*/ -unsigned char FLASH_EEP_ATTR get_align4_chr(const unsigned char *ps) -{ - return (*((unsigned int *)((unsigned int)ps & (~3))))>>(((unsigned int)ps & 3) << 3); -} -/*------------------------------------------------------------------------------------ - Сравнение данных в области align(4) (flash, registers, ...) с областью align(1) (ram) ---------------------------------------------------------------------------------------*/ -int FLASH_EEP_ATTR cmp_align1_align4(unsigned char * pd, void * ps, unsigned int len) -{ - union { - unsigned char uc[4]; - unsigned int ud; - }tmp; - unsigned int *p = (unsigned int *)((unsigned int)ps & (~3)); - unsigned int xlen = (unsigned int)ps & 3; - if(xlen) { - tmp.ud = *p++; - while (len) { - len--; - if(*pd++ != tmp.uc[xlen++]) return 1; - if(xlen & 4) break; - } - } - xlen = len >> 2; - while(xlen) { - tmp.uc[0] = *pd++; - tmp.uc[1] = *pd++; - tmp.uc[2] = *pd++; - tmp.uc[3] = *pd++; - if(*p++ != tmp.ud) return 1; - xlen--; - } - if(len & 3) { - tmp.ud = *p; - if(pd[0] != tmp.uc[0]) return 1; - if(len & 2) { - if(pd[1] != tmp.uc[1]) return 1; - if(len & 1) { - if(pd[2] != tmp.uc[2]) return 1; - } - } - } - return 0; -} - -//----------------------------------------------------------------------------- -static void _fwrite_word(unsigned int addr, unsigned int dw) -{ - //Write word - HAL_WRITE32(SPI_FLASH_BASE, addr, dw); - - // Wait spic busy done - SpicWaitBusyDoneRtl8195A(); - - // Wait flash busy done (wip=0) - if(flashobj.SpicInitPara.flashtype == FLASH_MICRON) - SpicWaitOperationDoneRtl8195A(flashobj.SpicInitPara); - else - SpicWaitWipDoneRefinedRtl8195A(flashobj.SpicInitPara); -} -//----------------------------------------------------------------------------- -// FunctionName : get_addr_bscfg -// Опции: -// false - поиск текушего сегмента -// true - поиск нового сегмента для записи (pack) -// Returns : новый адрес сегмента для записи -// ret < FMEM_ERROR_MAX - ошибка -//----------------------------------------------------------------------------- -static FLASH_EEP_ATTR unsigned int get_addr_bscfg(bool flg) -{ - unsigned int x1 = (flg)? 0 : 0xFFFFFFFF, x2; - unsigned int faddr = FMEMORY_SCFG_BASE_ADDR; - unsigned int reta = FMEMORY_SCFG_BASE_ADDR; - do { - x2 = HAL_READ32(SPI_FLASH_BASE, faddr); // if(flash_read(faddr, &x2, 4)) return -(FMEM_FLASH_ERR); - if(flg) { // поиск нового сегмента для записи (pack) - if(x2 > x1 || x2 == 0xFFFFFFFF) { - x1 = x2; - reta = faddr; // новый адрес сегмента для записи - } - } - else if(x2 < x1) { // поиск текушего сегмента - x1 = x2; - reta = faddr; // новый адрес сегмента для записи - }; - faddr += FMEMORY_SCFG_BANK_SIZE; - } while(faddr < (FMEMORY_SCFG_BASE_ADDR + FMEMORY_SCFG_BANKS * FMEMORY_SCFG_BANK_SIZE)); - - if((!flg)&&(x1 == 0xFFFFFFFF)&&(reta == FMEMORY_SCFG_BASE_ADDR)) { - _fwrite_word(reta, --x1); // if(flash_write(reta, &x1, 4)) return -(FMEM_FLASH_ERR); - } -#if DEBUGSOO > 3 - DBG_FEEP_INFO("base seg: %p [%d]\n", reta, x2); -#endif - return reta; -} -//----------------------------------------------------------------------------- -// FunctionName : get_addr_fobj -// Опции: -// false - Поиск последней записи объекта по id и size -// true - Поиск присуствия записи объекта по id и size -// Returns : адрес записи данных объекта -// 0 - не найден -// ret < FMEM_ERROR_MAX - ошибка -//----------------------------------------------------------------------------- -static FLASH_EEP_ATTR unsigned int get_addr_fobj(unsigned int base, fobj_head *obj, bool flg) -{ -// if(base == 0) return 0; - fobj_head fobj; - unsigned int faddr = base + 4; - unsigned int fend = base + FMEMORY_SCFG_BANK_SIZE - align(fobj_head_size); - unsigned int reta = 0; - do { - fobj.x = HAL_READ32(SPI_FLASH_BASE, faddr); // if(flash_read(faddr, &fobj, fobj_head_size)) return -(FMEM_FLASH_ERR); - if(fobj.x == fobj_x_free) break; - if(fobj.n.size <= MAX_FOBJ_SIZE) { - if(fobj.n.id == obj->n.id) { - if(flg) { - return faddr; - } - obj->n.size = fobj.n.size; - reta = faddr; - } - faddr += align(fobj.n.size + fobj_head_size); - } - else faddr += align(MAX_FOBJ_SIZE + fobj_head_size); - } - while(faddr < fend); - return reta; -} -//----------------------------------------------------------------------------- -// FunctionName : get_addr_fend -// Поиск последнего адреса в сегменте для записи объекта -// Returns : адрес для записи объекта -// ret < FMEM_ERROR_MAX - ошибка -// ret = 0 - не влезет, на pack -//----------------------------------------------------------------------------- -static FLASH_EEP_ATTR unsigned int get_addr_fobj_save(unsigned int base, fobj_head obj) -{ - fobj_head fobj; - unsigned int faddr = base + 4; - unsigned int fend = base + FMEMORY_SCFG_BANK_SIZE - align(obj.n.size + fobj_head_size); - do { - fobj.x = HAL_READ32(SPI_FLASH_BASE, faddr); // if(flash_read(faddr, &fobj, fobj_head_size)) return -(FMEM_FLASH_ERR); - if(fobj.x == fobj_x_free) { - if(faddr < fend) { - return faddr; - } - return 0; // не влезет, на pack - } - if(fobj.n.size <= MAX_FOBJ_SIZE) { - faddr += align(fobj.n.size + fobj_head_size); - } - else faddr += align(MAX_FOBJ_SIZE + fobj_head_size); - } - while(faddr < fend); - return 0; // не влезет, на pack -} -//============================================================================= -// FunctionName : pack_cfg_fmem -// Returns : адрес для записи объекта -//----------------------------------------------------------------------------- -static FLASH_EEP_ATTR unsigned int pack_cfg_fmem(fobj_head obj) -{ - fobj_head fobj; - unsigned int fnewseg = get_addr_bscfg(true); // поиск нового сегмента для записи (pack) - if(fnewseg < FMEM_ERROR_MAX) return fnewseg; // error - unsigned int foldseg = get_addr_bscfg(false); // поиск текушего сегмента - if(foldseg < FMEM_ERROR_MAX) return fnewseg; // error - unsigned int faddr = foldseg; - unsigned int rdaddr, wraddr; - unsigned short len; - unsigned int * pbuf = (unsigned int *) malloc(align(MAX_FOBJ_SIZE + fobj_head_size) >> 2); - if(pbuf == NULL) { -#if DEBUGSOO > 1 - DBG_FEEP_ERR("pack malloc error!\n"); -#endif - return -(FMEM_MEM_ERR); - } -#if DEBUGSOO > 3 - DBG_FEEP_INFO("repack base to new seg: %p\n", fnewseg); -#endif - SpicSectorEraseFlashRtl8195A(fnewseg); // if(flash_erase_sector(fnewseg)) return -(FMEM_FLASH_ERR); - faddr += 4; - wraddr = fnewseg + 4; - do { - fobj.x = HAL_READ32(SPI_FLASH_BASE, faddr); //if(flash_read(faddr, &fobj, fobj_head_size)) return -(FMEM_FLASH_ERR); // последовательное чтение id из старого сегмента - if(fobj.x == fobj_x_free) break; - if(fobj.n.size > MAX_FOBJ_SIZE) len = align(MAX_FOBJ_SIZE + fobj_head_size); - else len = align(fobj.n.size + fobj_head_size); - if(fobj.n.id != obj.n.id && fobj.n.size <= MAX_FOBJ_SIZE) { // объект валидный - if(get_addr_fobj(fnewseg, &fobj, true) == 0) { // найдем, сохранили ли мы его уже? нет - rdaddr = get_addr_fobj(foldseg, &fobj, false); // найдем последнее сохранение объекта в старом сенгменте, size изменен - if(rdaddr < FMEM_ERROR_MAX) return rdaddr; // ??? - if(wraddr + len >= fnewseg + FMEMORY_SCFG_BANK_SIZE) { -#if DEBUGSOO > 1 - DBG_FEEP_ERR("pack segment overflow!\n"); -#endif - return -(FMEM_OVR_ERR); - }; -#if 0 - copy_align4_to_align1((uint8 *)pbuf, rdaddr, len); -#else - SpicUserReadFourByteRtl8195A(len, rdaddr, (uint32_t *)pbuf, flashobj.SpicInitPara.Mode.BitMode); -#endif - int i = 0; - int size4b = len >> 2; - // перепишем данные obj в новый сектор - while(size4b--) { - _fwrite_word(wraddr, pbuf[i++]); // if(flash_write(wraddr, &pbuf[i++], 4)) return -(FMEM_FLASH_ERR); - }; - }; - }; - faddr += len; - } while(faddr < (foldseg + FMEMORY_SCFG_BANK_SIZE - align(fobj_head_size+1))); - free(pbuf); - // обратный счетчик стираний/записей секторов как id - _fwrite_word(fnewseg, HAL_READ32(SPI_FLASH_BASE, foldseg) - 1); // if(flash_write(fnewseg, &foldseg + SPI_FLASH_BASE, 4)) return -(FMEM_FLASH_ERR); -#if DEBUGSOO > 3 - DBG_FEEP_INFO("free: %d\n", FMEMORY_SCFG_BANK_SIZE - (faddr & (FMEMORY_SCFG_BANK_SIZE-1))); -#endif - return get_addr_fobj_save(fnewseg, obj); // адрес для записи объекта; -} -//----------------------------------------------------------------------------- -static signed short FLASH_EEP_ATTR _flash_write_cfg(void *ptr, unsigned short id, unsigned short size) -{ - fobj_head fobj; - fobj.n.id = id; - fobj.n.size = size; -// bool retb = false; - unsigned int faddr = get_addr_bscfg(false); - - if(faddr >= FMEM_ERROR_MAX) { - unsigned int xfaddr = get_addr_fobj(faddr, &fobj, false); - if(xfaddr > FMEM_ERROR_MAX && size == fobj.n.size) { - if(size == 0 - || cmp_align1_align4(ptr, (void *)SPI_FLASH_BASE + xfaddr + fobj_head_size, size) == 0) { -#if DEBUGSOO > 3 - DBG_FEEP_INFO("write obj is identical, id: %04x [%d]\n", id, size); -#endif - return size; // уже записано то-же самое - } -#if DEBUGSOO > 100 - else { - int i; - uint8 * p = (uint8 *)(SPI_FLASH_BASE + xfaddr + fobj_head_size); - uint8 * r = (uint8 *) ptr; - for(i=0; i < size; i+=8) { - DBG_8195A("buf[%d]\t%02X %02X %02X %02X %02X %02X %02X %02X\n", - i, r[i], r[i+1], r[i+2], r[i+3], r[i+4], r[i+5], r[i+6], r[i+7]); - DBG_8195A("obj[%d]\t%02X %02X %02X %02X %02X %02X %02X %02X\n", - i, p[i], p[i+1], p[i+2], p[i+3], p[i+4], p[i+5], p[i+6], p[i+7]); - } - } -#endif - } - } -#if DEBUGSOO > 2 - DBG_FEEP_INFO("write obj id: %04x [%d]\n", id, size); -#endif - fobj.n.size = size; - faddr = get_addr_fobj_save(faddr, fobj); - if(faddr == 0) { - faddr = pack_cfg_fmem(fobj); - if(faddr == 0) return FMEM_NOT_FOUND; - } - else if(faddr < FMEM_ERROR_MAX) return - faddr - 1; // error - -#if DEBUGSOO > 3 - DBG_FEEP_INFO("write obj to faddr %p\n", faddr); -#endif - _fwrite_word(faddr, fobj.x); // if(flash_write(faddr, &fobj.x, 4)) return FMEM_FLASH_ERR; - faddr+=4; - union { - unsigned char uc[4]; - unsigned int ud; - }tmp; -#if 0 - uint32_t len = (size + 3) & (~3); - if(len) SpicUserProgramRtl8195A((uint8_t *)ptr, 1, faddr, len); -#else - uint32_t len = (size + 3) >> 2; - uint8 * ps = ptr; - while(len--) { - tmp.uc[0] = *ps++; - tmp.uc[1] = *ps++; - tmp.uc[2] = *ps++; - tmp.uc[3] = *ps++; - _fwrite_word(faddr, tmp.ud); // if(flash_write(faddr, &tmp.ud, 4)) return FMEM_FLASH_ERR; - faddr += 4; - } -#endif - return size; -} -//============================================================================= -//- Сохранить объект в flash -------------------------------------------------- -// Returns : false/true -//----------------------------------------------------------------------------- -bool FLASH_EEP_ATTR flash_write_cfg(void *ptr, unsigned short id, unsigned short size) -{ - if(size > MAX_FOBJ_SIZE) return false; - bool retb = false; - device_mutex_lock(RT_DEV_LOCK_FLASH); - // SPIC Init - flash_turnon(); - if(fspic_isinit == 0) flash_init(&flashobj); - if(_flash_write_cfg(ptr, id, size) >= 0) { -#if DEBUGSOO > 3 - DBG_FEEP_INFO("saved ok\n"); -#endif - retb = true; - } - SpicDisableRtl8195A(); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - return retb; -} -//============================================================================= -//- Прочитать объект из flash ------------------------------------------------- -// Параметры: -// prt - указатель, куда сохранить -// id - идентификатор искомого объекта -// maxsize - сколько байт сохранить максимум из найденного объекта, по ptr -// Returns: -// -3 - error -// -2 - flash rd/wr/clr error -// -1 - не найден -// 0..MAX_FOBJ_SIZE - ok, сохраненный размер объекта -//----------------------------------------------------------------------------- -signed short FLASH_EEP_ATTR flash_read_cfg(void *ptr, unsigned short id, unsigned short maxsize) -{ - signed short rets = FMEM_ERROR; - if (maxsize <= MAX_FOBJ_SIZE) { - device_mutex_lock(RT_DEV_LOCK_FLASH); - fobj_head fobj; - fobj.n.id = id; - fobj.n.size = 0; -#if DEBUGSOO > 2 - DBG_FEEP_INFO("read obj id: %04x[%d]\n", id, maxsize); -#endif - // SPIC Init - flash_turnon(); - if(fspic_isinit == 0) flash_init(&flashobj); - unsigned int faddr = get_addr_bscfg(false); - if(faddr >= FMEM_ERROR_MAX) { - faddr = get_addr_fobj(faddr, &fobj, false); - if(faddr >= FMEM_ERROR_MAX) { -#if 0 - if(maxsize != 0 && ptr != NULL) - copy_align4_to_align1(ptr, SPI_FLASH_BASE + faddr + fobj_head_size, mMIN(fobj.n.size, maxsize)); -#else - if(maxsize != 0 && ptr != NULL) - SpicUserReadRtl8195A(mMIN(fobj.n.size, maxsize), faddr + fobj_head_size, ptr, flashobj.SpicInitPara.Mode.BitMode); -#endif -#if DEBUGSOO > 3 - DBG_FEEP_INFO("read ok, faddr: %p, size: %d\n", faddr, fobj.n.size); -#endif - rets = fobj.n.size; - } - else { -#if DEBUGSOO > 3 - DBG_FEEP_INFO("obj not found\n"); -#endif - rets = -faddr-1; - } - } - else rets = -faddr-1; - SpicDisableRtl8195A(); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - } - return rets; -} -//============================================================================= diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/gpio_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/gpio_api.c deleted file mode 100644 index fe0f3b9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/gpio_api.c +++ /dev/null @@ -1,243 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ -#include "objects.h" -#include "pinmap.h" - -#if CONFIG_GPIO_EN - -#include "hal_gpio.h" -#include "gpio_api.h" - -// convert Mbed pin mode to HAL Pin Mode -const uint8_t GPIO_InPinMode[] = { - DIN_PULL_NONE, // PullNone - DIN_PULL_HIGH, // PullUp - DIN_PULL_LOW, // PullDown - DIN_PULL_NONE // OpenDrain -}; - -const uint8_t GPIO_SWPORT_DR_TBL[] = { - GPIO_PORTA_DR, - GPIO_PORTB_DR, - GPIO_PORTC_DR -}; - -const uint8_t GPIO_EXT_PORT_TBL[] = { - GPIO_EXT_PORTA, - GPIO_EXT_PORTB, - GPIO_EXT_PORTC -}; - -const uint8_t GPIO_SWPORT_DDR_TBL[] = { - GPIO_PORTA_DDR, - GPIO_PORTB_DDR, - GPIO_PORTC_DDR -}; - -#if 0 -void gpio_set_hal_pin_mode(gpio_t *obj) -{ - if (obj->direction == PIN_OUTPUT) { - switch (obj->mode) { - case PullNone: - case PullDown: - case PullUp: - obj->hal_pin.pin_mode = DOUT_PUSH_PULL; - break; - - case OpenDrain: - obj->hal_pin.pin_mode = DOUT_OPEN_DRAIN; - break; - - default: - obj->hal_pin.pin_mode = DOUT_PUSH_PULL; - break; - } - } - else { - switch (obj->mode) { - case PullNone: - case OpenDrain: - obj->hal_pin.pin_mode = DIN_PULL_NONE; - break; - - case PullDown: - obj->hal_pin.pin_mode = DIN_PULL_LOW; - break; - - case PullUp: - obj->hal_pin.pin_mode = DIN_PULL_HIGH; - break; - - default: - obj->hal_pin.pin_mode = DIN_PULL_NONE; - break; - } - } -} -#endif -void gpio_set_hal_pin_mode(gpio_t *obj) -{ - uint32_t mode; - - mode = obj->mode; - if (obj->direction == PIN_OUTPUT) { - if (mode == OpenDrain) { - obj->hal_pin.pin_mode = DOUT_OPEN_DRAIN; - } else { - obj->hal_pin.pin_mode = DOUT_PUSH_PULL; - } - } else { - if (mode < 4) { - obj->hal_pin.pin_mode = GPIO_InPinMode[mode]; - } else { - obj->hal_pin.pin_mode = DIN_PULL_NONE; - } - } -} - -uint32_t gpio_set(PinName pin) -{ - uint32_t ip_pin; - - //MBED_ASSERT(pin != (PinName)NC); - DBG_ASSERT(pin != (PinName)NC); - pin_function(pin, 0); - ip_pin = HAL_GPIO_GetPinName((uint32_t)pin); - - return ip_pin; -} - -void gpio_init(gpio_t *obj, PinName pin) -{ - uint32_t pin_name; - - if (pin == (PinName)NC) - return; - - obj->pin = pin; - //obj->mode = PullNone; - //obj->direction = PIN_INPUT; - pin_name = gpio_set(pin); // get the IP pin name - obj->hal_pin.pin_name = pin_name; - obj->hal_pin.pin_mode = DIN_PULL_NONE; - obj->hal_port_num = HAL_GPIO_GET_PORT_BY_NAME(pin_name); - obj->hal_pin_num = HAL_GPIO_GET_PIN_BY_NAME(pin_name); - gpio_set_hal_pin_mode(obj); // - HAL_GPIO_Init(&obj->hal_pin); -} - -void gpio_mode(gpio_t *obj, PinMode mode) -{ - obj->mode = mode; - gpio_set_hal_pin_mode(obj); - HAL_GPIO_Init(&obj->hal_pin); -} - -// Initial the Pin direction -void gpio_dir(gpio_t *obj, PinDirection direction) { -// DBG_ASSERT(obj->pin != (PinName)NC); - obj->direction = direction; - gpio_set_hal_pin_mode(obj); - HAL_GPIO_Init(&obj->hal_pin); -} - -// Change the pin direction directly -void gpio_change_dir(gpio_t *obj, PinDirection direction) { - uint32_t reg_value; - uint8_t port_num; - uint8_t pin_num; - - obj->direction = direction; - gpio_set_hal_pin_mode(obj); - port_num = obj->hal_port_num; - pin_num = obj->hal_pin_num; - - reg_value = HAL_READ32(GPIO_REG_BASE, GPIO_SWPORT_DDR_TBL[port_num]); - if (direction) { - // Out - reg_value |= (1 << pin_num); - } else { - // In - reg_value &= ~(1 << pin_num); - } - HAL_WRITE32(GPIO_REG_BASE, GPIO_SWPORT_DDR_TBL[port_num], reg_value); -} - -void gpio_write(gpio_t *obj, int value) -{ - HAL_GPIO_PIN *hal_pin=&obj->hal_pin; - volatile uint32_t reg_value; - uint8_t port_num; - uint8_t pin_num; - - if (hal_pin->pin_mode != DOUT_OPEN_DRAIN) { - port_num = obj->hal_port_num; - pin_num = obj->hal_pin_num; - - reg_value = HAL_READ32(GPIO_REG_BASE, GPIO_SWPORT_DR_TBL[port_num]); - reg_value &= ~(1 << pin_num); - reg_value |= ((value&0x01)<< pin_num); - HAL_WRITE32(GPIO_REG_BASE, GPIO_SWPORT_DR_TBL[port_num], reg_value); - } else { - HAL_GPIO_WritePin(&obj->hal_pin, value); - } -} - -int gpio_read(gpio_t *obj) { - volatile uint32_t reg_value; - uint8_t port_num; - uint8_t pin_num; -// HAL_GPIO_PIN_STATE pin_status; - HAL_GPIO_PIN_MODE pin_mode; - - port_num = obj->hal_port_num; - pin_num = obj->hal_pin_num; - pin_mode = obj->hal_pin.pin_mode; - - reg_value = HAL_READ32(GPIO_REG_BASE, GPIO_EXT_PORT_TBL[port_num]); - if (pin_mode != DOUT_OPEN_DRAIN) { - return ((reg_value >> pin_num) & 0x01); - } else { - return (!((reg_value >> pin_num) & 0x01)); - } - -// return pin_status; -} - -// This API only works for non-Open-Drain pin -void gpio_direct_write(gpio_t *obj, BOOL value) -{ - uint8_t port_num; - uint8_t pin_num; - uint32_t reg_value; - - port_num = obj->hal_port_num; - pin_num = obj->hal_pin_num; - - reg_value = HAL_READ32(GPIO_REG_BASE, GPIO_SWPORT_DR_TBL[port_num]); - reg_value &= ~(1 << pin_num); - reg_value |= (value<< pin_num); - HAL_WRITE32(GPIO_REG_BASE, GPIO_SWPORT_DR_TBL[port_num], reg_value); -} - -void gpio_pull_ctrl(gpio_t *obj, PinMode pull_type) -{ -// obj->mode = pull_type; -// gpio_set_hal_pin_mode(obj); - HAL_GPIO_PullCtrl((uint32_t) obj->pin, (uint32_t)pull_type); -} - - -void gpio_deinit(gpio_t *obj) { - HAL_GPIO_DeInit(&obj->hal_pin); -} - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/gpio_irq_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/gpio_irq_api.c deleted file mode 100644 index fdde956..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/gpio_irq_api.c +++ /dev/null @@ -1,145 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ -#include "objects.h" -#include "pinmap.h" - -//static uint32_t channel_ids[32] = {0}; - -//static gpio_irq_handler irq_handler; - -#if CONFIG_GPIO_EN -#include "gpio_irq_api.h" -#include "gpio_irq_ex_api.h" - -int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id) -{ - uint32_t pin_name; - - if (pin == NC) return -1; - - obj->pin = pin; - pin_name = HAL_GPIO_GetPinName((uint32_t)pin);; // get the IP pin name - obj->hal_pin.pin_name = pin_name; - obj->hal_pin.pin_mode = INT_FALLING; // default use Falling trigger - obj->hal_port_num = HAL_GPIO_GET_PORT_BY_NAME(pin_name); - obj->hal_pin_num = HAL_GPIO_GET_PIN_BY_NAME(pin_name); - HAL_GPIO_Irq_Init(&obj->hal_pin); - HAL_GPIO_UserRegIrq(&obj->hal_pin, (void*) handler, (void*) id); - - return 0; -} - -void gpio_irq_free(gpio_irq_t *obj) -{ - HAL_GPIO_UserUnRegIrq(&obj->hal_pin); - HAL_GPIO_DeInit(&obj->hal_pin); -} - -void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) -{ - switch((uint32_t)event) { - case IRQ_RISE: - obj->hal_pin.pin_mode = INT_RISING; - break; - - case IRQ_FALL: - obj->hal_pin.pin_mode = INT_FALLING; - break; - - case IRQ_LOW: - obj->hal_pin.pin_mode = INT_LOW; - break; - - case IRQ_HIGH: - obj->hal_pin.pin_mode = INT_HIGH; - break; - - case IRQ_NONE: - // ? - break; - - default: - break; - } -// HAL_GPIO_Irq_Init(&obj->hal_pin); - HAL_GPIO_Init_8195a(&obj->hal_pin); - - HAL_GPIO_IntCtrl(&obj->hal_pin, enable); -} - -void gpio_irq_enable(gpio_irq_t *obj) -{ - HAL_GPIO_UnMaskIrq(&obj->hal_pin); -} - -void gpio_irq_disable(gpio_irq_t *obj) -{ - HAL_GPIO_MaskIrq(&obj->hal_pin); -} - -void gpio_irq_deinit(gpio_irq_t *obj) -{ - HAL_GPIO_DeInit(&obj->hal_pin); -} - -void gpio_irq_pull_ctrl(gpio_irq_t *obj, PinMode pull_type) -{ - HAL_GPIO_PullCtrl((uint32_t) obj->pin, (uint32_t)pull_type); -} - -void gpio_irq_set_event(gpio_irq_t *obj, gpio_irq_event event) -{ - uint32_t reg_value; - uint32_t level_edge; - uint32_t polarity; - uint8_t pin_num; - - pin_num = obj->hal_pin_num & 0x1f; // Max 31 - - switch (event) { - case IRQ_LOW: - level_edge = 0; // level trigger - polarity = 0; // active low - break; - - case IRQ_HIGH: - level_edge = 0; // level trigger - polarity = 1; // active high - break; - - case IRQ_FALL: - level_edge = 1; // edge trigger - polarity = 0; // active low - break; - - case IRQ_RISE: - level_edge = 1; // edge trigger - polarity = 1; // active high - break; - - default: - DBG_GPIO_ERR("Unknow Interrupt Trigger Type(%d)\n", event); - return; - } - - // Config Level or Edge trigger - reg_value = HAL_READ32(GPIO_REG_BASE, GPIO_INT_TYPE); - reg_value &= ~(1 << pin_num); - reg_value |= (level_edge << pin_num); - HAL_WRITE32(GPIO_REG_BASE, GPIO_INT_TYPE, reg_value); - - // Config Low active or Gigh active - reg_value = HAL_READ32(GPIO_REG_BASE, GPIO_INT_POLARITY); - reg_value &= ~(1 << pin_num); - reg_value |= (polarity << pin_num); - HAL_WRITE32(GPIO_REG_BASE, GPIO_INT_POLARITY, reg_value); -} - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/gpio_object.h b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/gpio_object.h deleted file mode 100644 index 63820cf..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/gpio_object.h +++ /dev/null @@ -1,39 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_GPIO_OBJECT_H -#define MBED_GPIO_OBJECT_H - -#include "mbed_assert.h" - -#include "basic_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - PinName pin; - uint32_t mask; - - uint32_t reg_out_offset; - uint32_t reg_dir_offset; -} gpio_t; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/i2c_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/i2c_api.c deleted file mode 100644 index b1489f2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/i2c_api.c +++ /dev/null @@ -1,785 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ - -//#include "mbed_assert.h" -#include "objects.h" -#include "PinNames.h" - -//#include -#include "hal_i2c.h" -#include "i2c_api.h" -#include "ex_api.h" - - -#if CONFIG_I2C_EN - -//#include "cmsis.h" -#include "pinmap.h" - - -static const PinMap PinMap_I2C_SDA[] = { - {PD_4, RTL_PIN_PERI(I2C0, 0, S0), RTL_PIN_FUNC(I2C0, S0)}, - {PH_1, RTL_PIN_PERI(I2C0, 0, S1), RTL_PIN_FUNC(I2C0, S1)}, - {PC_8, RTL_PIN_PERI(I2C0, 0, S2), RTL_PIN_FUNC(I2C0, S2)}, - {PE_7, RTL_PIN_PERI(I2C0, 0, S3), RTL_PIN_FUNC(I2C0, S3)}, - - {PC_4, RTL_PIN_PERI(I2C1, 1, S0), RTL_PIN_FUNC(I2C1, S0)}, - {PH_3, RTL_PIN_PERI(I2C1, 1, S1), RTL_PIN_FUNC(I2C1, S1)}, - {PD_7, RTL_PIN_PERI(I2C1, 1, S2), RTL_PIN_FUNC(I2C1, S2)}, - - {PB_7, RTL_PIN_PERI(I2C2, 2, S0), RTL_PIN_FUNC(I2C2, S0)}, - {PE_1, RTL_PIN_PERI(I2C2, 2, S1), RTL_PIN_FUNC(I2C2, S1)}, - {PC_7, RTL_PIN_PERI(I2C2, 2, S2), RTL_PIN_FUNC(I2C2, S2)}, - - {PB_3, RTL_PIN_PERI(I2C3, 3, S0), RTL_PIN_FUNC(I2C3, S0)}, - {PE_3, RTL_PIN_PERI(I2C3, 3, S1), RTL_PIN_FUNC(I2C3, S1)}, - {PE_5, RTL_PIN_PERI(I2C3, 3, S2), RTL_PIN_FUNC(I2C3, S2)}, - {PD_9, RTL_PIN_PERI(I2C3, 3, S3), RTL_PIN_FUNC(I2C3, S3)}, - - {NC, NC, 0} -}; - -static const PinMap PinMap_I2C_SCL[] = { - {PD_5, RTL_PIN_PERI(I2C0, 0, S0), RTL_PIN_FUNC(I2C0, S0)}, - {PH_0, RTL_PIN_PERI(I2C0, 0, S1), RTL_PIN_FUNC(I2C0, S1)}, - {PC_9, RTL_PIN_PERI(I2C0, 0, S2), RTL_PIN_FUNC(I2C0, S2)}, - {PE_6, RTL_PIN_PERI(I2C0, 0, S3), RTL_PIN_FUNC(I2C0, S3)}, - - {PC_5, RTL_PIN_PERI(I2C1, 1, S0), RTL_PIN_FUNC(I2C1, S0)}, - {PH_2, RTL_PIN_PERI(I2C1, 1, S1), RTL_PIN_FUNC(I2C1, S1)}, - {PD_6, RTL_PIN_PERI(I2C1, 1, S2), RTL_PIN_FUNC(I2C1, S2)}, - - {PB_6, RTL_PIN_PERI(I2C2, 2, S0), RTL_PIN_FUNC(I2C2, S0)}, - {PE_0, RTL_PIN_PERI(I2C2, 2, S1), RTL_PIN_FUNC(I2C2, S1)}, - {PC_6, RTL_PIN_PERI(I2C2, 2, S2), RTL_PIN_FUNC(I2C2, S2)}, - - {PB_2, RTL_PIN_PERI(I2C3, 3, S0), RTL_PIN_FUNC(I2C3, S0)}, - {PE_2, RTL_PIN_PERI(I2C3, 3, S1), RTL_PIN_FUNC(I2C3, S1)}, - {PE_4, RTL_PIN_PERI(I2C3, 3, S2), RTL_PIN_FUNC(I2C3, S2)}, - {PD_8, RTL_PIN_PERI(I2C3, 3, S3), RTL_PIN_FUNC(I2C3, S3)}, - - {NC, NC, 0} -}; - -static uint16_t i2c_target_addr[4]; -static SAL_I2C_TRANSFER_BUF i2ctxtranbuf[4]; -static SAL_I2C_TRANSFER_BUF i2crxtranbuf[4]; -extern uint32_t ConfigDebugErr; -extern uint32_t ConfigDebuginfo; -void i2c_init(i2c_t *obj, PinName sda, PinName scl) { - - uint32_t i2c_sel; - uint32_t i2c_idx; - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_USERCB_ADPT pSalI2CUserCBAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - - // Determine the I2C to use - uint32_t i2c_sda = (uint32_t)pinmap_peripheral(sda, PinMap_I2C_SDA); - uint32_t i2c_scl = (uint32_t)pinmap_peripheral(scl, PinMap_I2C_SCL); - ConfigDebugErr &= (~(_DBG_I2C_|_DBG_GDMA_)); - ConfigDebugInfo&= (~(_DBG_I2C_|_DBG_GDMA_)); - i2c_sel = (uint32_t)pinmap_merge(i2c_sda, i2c_scl); - i2c_idx = RTL_GET_PERI_IDX(i2c_sel); - if (unlikely(i2c_idx == NC)) { - DBG_8195A("%s: Cannot find matched port i2c\n", __FUNCTION__); - return; - } - - //DBG_8195A("i2c_sel:%x\n",i2c_sel); - //DBG_8195A("i2c_idx:%x\n",i2c_idx); - - /* Get I2C device handler */ - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CUserCBAdpt = (PSAL_I2C_USERCB_ADPT)&(obj->SalI2CUserCBAdpt); - - - - /*To assign the rest pointers*/ - pSalI2CMngtAdpt->MstRDCmdCnt = 0; - pSalI2CMngtAdpt->InnerTimeOut = 2000; // inner time-out count, 2000 ms - pSalI2CMngtAdpt->pSalHndPriv = &(obj->SalI2CHndPriv); - pSalI2CMngtAdpt->pSalHndPriv->ppSalI2CHnd = (void**)&(pSalI2CMngtAdpt->pSalHndPriv); - - /* To assign the default (ROM) HAL OP initialization function */ -#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) || defined(CONFIG_CHIP_C_CUT) - pSalI2CMngtAdpt->pHalOpInit = HalI2COpInit_Patch; -#elif defined(CONFIG_CHIP_E_CUT) - pSalI2CMngtAdpt->pHalOpInit = HalI2COpInit_V04; -#endif - /* To assign the default (ROM) HAL GDMA OP initialization function */ - pSalI2CMngtAdpt->pHalGdmaOpInit = HalGdmaOpInit; - - /* To assign the default (ROM) SAL interrupt function */ -#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) || defined(CONFIG_CHIP_C_CUT) - pSalI2CMngtAdpt->pSalIrqFunc = I2CISRHandle_Patch; -#elif defined(CONFIG_CHIP_E_CUT) - pSalI2CMngtAdpt->pSalIrqFunc = I2CISRHandle_V04; -#endif - - /* To assign the default (ROM) SAL DMA TX interrupt function */ - pSalI2CMngtAdpt->pSalDMATxIrqFunc = I2CTXGDMAISRHandle; - - /* To assign the default (ROM) SAL DMA RX interrupt function */ - pSalI2CMngtAdpt->pSalDMARxIrqFunc = I2CRXGDMAISRHandle; - - pSalI2CMngtAdpt->pHalInitDat = &(obj->HalI2CInitData); - pSalI2CMngtAdpt->pHalOp = &(obj->HalI2COp); - pSalI2CMngtAdpt->pIrqHnd = &(obj->I2CIrqHandleDat); - pSalI2CMngtAdpt->pHalTxGdmaAdp = &(obj->HalI2CTxGdmaAdpt); - pSalI2CMngtAdpt->pHalRxGdmaAdp = &(obj->HalI2CRxGdmaAdpt); - pSalI2CMngtAdpt->pHalGdmaOp = &(obj->HalI2CGdmaOp); - pSalI2CMngtAdpt->pIrqTxGdmaHnd = &(obj->I2CTxGdmaIrqHandleDat); - pSalI2CMngtAdpt->pIrqRxGdmaHnd = &(obj->I2CRxGdmaIrqHandleDat); - pSalI2CMngtAdpt->pUserCB = &(obj->SalI2CUserCB); - pSalI2CMngtAdpt->pDMAConf = &(obj->SalI2CDmaUserDef); - - /* Assign the private SAL handle to public SAL handle */ - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - /* Assign the internal HAL initial data pointer to the SAL handle */ - pSalI2CHND->pInitDat = pSalI2CMngtAdpt->pHalInitDat; - - /* Assign the internal user callback pointer to the SAL handle */ - pSalI2CHND->pUserCB = pSalI2CMngtAdpt->pUserCB; - - /* Assign the internal user define DMA configuration to the SAL handle */ - pSalI2CHND->pDMAConf = pSalI2CMngtAdpt->pDMAConf; - - /*To assign user callback pointers*/ - pSalI2CMngtAdpt->pUserCB->pTXCB = pSalI2CUserCBAdpt; - pSalI2CMngtAdpt->pUserCB->pTXCCB = (pSalI2CUserCBAdpt+1); - pSalI2CMngtAdpt->pUserCB->pRXCB = (pSalI2CUserCBAdpt+2); - pSalI2CMngtAdpt->pUserCB->pRXCCB = (pSalI2CUserCBAdpt+3); - pSalI2CMngtAdpt->pUserCB->pRDREQCB = (pSalI2CUserCBAdpt+4); - pSalI2CMngtAdpt->pUserCB->pERRCB = (pSalI2CUserCBAdpt+5); - pSalI2CMngtAdpt->pUserCB->pDMATXCB = (pSalI2CUserCBAdpt+6); - pSalI2CMngtAdpt->pUserCB->pDMATXCCB = (pSalI2CUserCBAdpt+7); - pSalI2CMngtAdpt->pUserCB->pDMARXCB = (pSalI2CUserCBAdpt+8); - pSalI2CMngtAdpt->pUserCB->pDMARXCCB = (pSalI2CUserCBAdpt+9); - pSalI2CMngtAdpt->pUserCB->pGENCALLCB= (pSalI2CUserCBAdpt+10); - - /* Set I2C Device Number */ - pSalI2CHND->DevNum = i2c_idx; - - /* Load I2C default value */ - RtkI2CLoadDefault(pSalI2CHND); - - /* Assign I2C Pin Mux */ - pSalI2CHND->PinMux = RTL_GET_PERI_SEL(i2c_sel); - pSalI2CHND->OpType = I2C_INTR_TYPE; - pSalI2CHND->I2CMaster = I2C_MASTER_MODE; - pSalI2CHND->I2CSpdMod = I2C_SS_MODE; - pSalI2CHND->I2CClk = 100; - pSalI2CHND->I2CAckAddr = 0; - pSalI2CHND->TimeOut = 300; - pSalI2CHND->AddRtyTimeOut = 3000; - pSalI2CHND->I2CExd |= (I2C_EXD_MTR_ADDR_RTY); - - pSalI2CMngtAdpt->InnerTimeOut = pSalI2CHND->TimeOut; - - /* Deinit I2C first */ - //i2c_reset(obj); - - /* Init I2C now */ - RtkI2CInitForPS(pSalI2CHND); -} - -void i2c_frequency(i2c_t *obj, int hz) { - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - uint16_t i2c_default_clk = (uint16_t) pSalI2CHND->I2CClk; - uint16_t i2c_user_clk = (uint16_t) (hz/1000); - - if (i2c_default_clk != i2c_user_clk) { - /* Deinit I2C first */ - i2c_reset(obj); - if (i2c_user_clk <= 100) { - pSalI2CHND->I2CSpdMod = I2C_SS_MODE; - } - else if ((i2c_user_clk > 100) && (i2c_user_clk <= 400)) { - pSalI2CHND->I2CSpdMod = I2C_FS_MODE; - } - else if (i2c_user_clk > 400) { - pSalI2CHND->I2CSpdMod = I2C_HS_MODE; - } - else { - pSalI2CHND->I2CSpdMod = I2C_SS_MODE; - } - - /* Load the user defined I2C clock */ - pSalI2CHND->I2CClk = i2c_user_clk; - - /* Init I2C now */ - RtkI2CInitForPS(pSalI2CHND); - } -} - -inline int i2c_start(i2c_t *obj) -{ - return 0; -} - -inline int i2c_stop(i2c_t *obj) -{ - return 0; -} - -// extern uint32_t HalDelayUs(IN uint32_t us); - -int i2c_read(i2c_t *obj, int address, uint8_t *data, int length, int stop) -{ - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - uint32_t I2CInTOTcnt = 0; - uint32_t InTimeoutCount = 0; - uint32_t InStartCount = 0; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - if (i2c_target_addr[pSalI2CHND->DevNum] != address) { - /* Deinit I2C first */ - i2c_reset(obj); - - /* Load the user defined I2C target slave address */ - i2c_target_addr[pSalI2CHND->DevNum] = address; - pSalI2CHND->I2CAckAddr = address; - - /* Init I2C now */ - RtkI2CInitForPS(pSalI2CHND); - } - - /* Check if the it's the last byte or not */ - pSalI2CHND->I2CExd &= (~I2C_EXD_MTR_HOLD_BUS); - if (!stop) { - pSalI2CHND->I2CExd |= I2C_EXD_MTR_HOLD_BUS; - } - - pSalI2CHND->pRXBuf = &i2crxtranbuf[pSalI2CHND->DevNum]; - pSalI2CHND->pRXBuf->DataLen = length; - pSalI2CHND->pRXBuf->TargetAddr= pSalI2CHND->I2CAckAddr; - pSalI2CHND->pRXBuf->RegAddr = 0; - pSalI2CHND->pRXBuf->pDataBuf = (uint8_t *)data; - - if (RtkI2CReceive(pSalI2CHND) != HAL_OK) { - length = length - pSalI2CHND->pRXBuf->DataLen; - return ((int)length); - } - else { - //DBG_8195A(">\n"); - /* Calculate user time out parameters */ - I2CInTOTcnt = 300; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - while((pSalI2CHND->DevSts != I2C_STS_IDLE) && - (pSalI2CHND->DevSts != I2C_STS_ERROR) && - (pSalI2CHND->DevSts != I2C_STS_TIMEOUT)) { - /* Time-Out check */ - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_RX_ADD_TO; - - /* DeInit I2C, Init I2C */ - //RtkI2CDeInit(pSalI2CHND); - //HalDelayUs(1000); - //RtkI2CInit(pSalI2CHND); - - return ((int)(length)); - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_RX_ADD_TO; - /* DeInit I2C, Init I2C */ - //RtkI2CDeInit(pSalI2CHND); - - //RtkI2CInit(pSalI2CHND); - - return ((int)(length)); - } - } - } - //DBG_8195A("<\n"); - if (pSalI2CHND->DevSts != I2C_STS_TIMEOUT) - return ((int)(length - pSalI2CHND->pRXBuf->DataLen)); - else - return ((int)(length)); - } -} - -int i2c_write(i2c_t *obj, int address, const uint8_t *data, int length, int stop) -{ - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - uint32_t I2CInTOTcnt = 0; - uint32_t InTimeoutCount = 0; - uint32_t InStartCount = 0; - - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - if (i2c_target_addr[pSalI2CHND->DevNum] != address) { - /* Deinit I2C first */ - i2c_reset(obj); - - /* Load the user defined I2C target slave address */ - i2c_target_addr[pSalI2CHND->DevNum] = address; - pSalI2CHND->I2CAckAddr = address; - - /* Init I2C now */ - RtkI2CInitForPS(pSalI2CHND); - } - - /* Check if the it's the last byte or not */ - pSalI2CHND->I2CExd &= (~I2C_EXD_MTR_HOLD_BUS); - if (!stop) { - pSalI2CHND->I2CExd |= I2C_EXD_MTR_HOLD_BUS; - } - - pSalI2CHND->pTXBuf = &i2ctxtranbuf[pSalI2CHND->DevNum]; - pSalI2CHND->pTXBuf->DataLen = length; - pSalI2CHND->pTXBuf->TargetAddr= pSalI2CHND->I2CAckAddr; - pSalI2CHND->pTXBuf->RegAddr = 0; - pSalI2CHND->pTXBuf->pDataBuf = (uint8_t *)data; - - if (RtkI2CSend(pSalI2CHND) != HAL_OK) { - length = length - pSalI2CHND->pTXBuf->DataLen; - return ((int)length); - } - else { - //DBG_8195A("(\n"); - /* Calculate user time out parameters */ - I2CInTOTcnt = 300; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - while((pSalI2CHND->DevSts != I2C_STS_IDLE) && - (pSalI2CHND->DevSts != I2C_STS_ERROR) && - (pSalI2CHND->DevSts != I2C_STS_TIMEOUT)) { - /* Time-Out check */ - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_ADD_TO; - /* DeInit I2C, Init I2C */ - //RtkI2CDeInit(pSalI2CHND); - - //RtkI2CInit(pSalI2CHND); - return ((int)(length)); - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_ADD_TO; - /* DeInit I2C, Init I2C */ - //RtkI2CDeInit(pSalI2CHND); - - //RtkI2CInit(pSalI2CHND); - return ((int)(length)); - } - } - } - - if (pSalI2CHND->DevSts != I2C_STS_TIMEOUT) - return ((int)(length - pSalI2CHND->pTXBuf->DataLen)); - else - return ((int)(length)); - } -} - -int i2c_byte_read(i2c_t *obj, int last) { - uint8_t i2cdatlocal; - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - /* Check if the it's the last byte or not */ - pSalI2CHND->I2CExd &= (~I2C_EXD_MTR_HOLD_BUS); - if (!last) { - pSalI2CHND->I2CExd |= I2C_EXD_MTR_HOLD_BUS; - } - - pSalI2CHND->pRXBuf = &i2crxtranbuf[pSalI2CHND->DevNum]; - pSalI2CHND->pRXBuf->DataLen = 1; - pSalI2CHND->pRXBuf->TargetAddr= pSalI2CHND->I2CAckAddr; - pSalI2CHND->pRXBuf->RegAddr = 0; - pSalI2CHND->pRXBuf->pDataBuf = &i2cdatlocal; - RtkI2CReceive(pSalI2CHND); - - return (int)i2cdatlocal; -} - -int i2c_byte_write(i2c_t *obj, int data) { - - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - pSalI2CHND->I2CExd &= (~I2C_EXD_MTR_HOLD_BUS); - pSalI2CHND->I2CExd |= I2C_EXD_MTR_HOLD_BUS; - - pSalI2CHND->pTXBuf = &i2ctxtranbuf[pSalI2CHND->DevNum]; - pSalI2CHND->pTXBuf->DataLen = 1; - pSalI2CHND->pTXBuf->TargetAddr= pSalI2CHND->I2CAckAddr; - pSalI2CHND->pTXBuf->RegAddr = 0; - pSalI2CHND->pTXBuf->pDataBuf = (unsigned char*)&data; - - if (RtkI2CSend(pSalI2CHND) != HAL_OK) { - return 0; // error - } - - return 1; -} - -void i2c_reset(i2c_t *obj) { - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - /* Deinit I2C directly */ - RtkI2CDeInitForPS(pSalI2CHND); -} - -void i2c_restart_enable(i2c_t *obj) { - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - uint32_t i2clocaltmp; - uint8_t i2cen; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - i2cen = pSalI2CHND->pInitDat->I2CEn; - - if (i2cen == I2C_ENABLE) { - pSalI2CHND->pInitDat->I2CEn = I2C_DISABLE; - pSalI2CMngtAdpt->pHalOp->HalI2CEnable(pSalI2CHND->pInitDat); - } - - i2clocaltmp = HalI2CRead32(pSalI2CHND->DevNum, REG_DW_I2C_IC_CON); - i2clocaltmp |= BIT_IC_CON_IC_RESTART_EN; - HalI2CWrite32(pSalI2CHND->DevNum, REG_DW_I2C_IC_CON, i2clocaltmp); - - if (i2cen == I2C_ENABLE) { - pSalI2CHND->pInitDat->I2CEn = I2C_ENABLE; - pSalI2CMngtAdpt->pHalOp->HalI2CEnable(pSalI2CHND->pInitDat); - } - - pSalI2CHND->pInitDat->I2CReSTR = I2C_ENABLE; - -} - -void i2c_restart_disable(i2c_t *obj) { - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - uint32_t i2clocaltmp; - uint8_t i2cen; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - i2cen = pSalI2CHND->pInitDat->I2CEn; - - if (i2cen == I2C_ENABLE) { - pSalI2CHND->pInitDat->I2CEn = I2C_DISABLE; - pSalI2CMngtAdpt->pHalOp->HalI2CEnable(pSalI2CHND->pInitDat); - } - - i2clocaltmp = HalI2CRead32(pSalI2CHND->DevNum, REG_DW_I2C_IC_CON); - i2clocaltmp &= (~BIT_IC_CON_IC_RESTART_EN); - HalI2CWrite32(pSalI2CHND->DevNum, REG_DW_I2C_IC_CON, i2clocaltmp); - - if (i2cen == I2C_ENABLE) { - pSalI2CHND->pInitDat->I2CEn = I2C_ENABLE; - pSalI2CMngtAdpt->pHalOp->HalI2CEnable(pSalI2CHND->pInitDat); - } - - pSalI2CHND->pInitDat->I2CReSTR = I2C_DISABLE; - -} - -void i2c_set_user_callback(i2c_t *obj, I2CCallback i2ccb, void(*i2c_callback)(void *)) { - - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - if ((i2ccb >= I2C_TX_COMPLETE) && (i2ccb <= I2C_ERR_OCCURRED)) { - switch (i2ccb) { - case I2C_TX_COMPLETE: - pSalI2CHND->pUserCB->pTXCCB->USERCB = i2c_callback; - break; - case I2C_RX_COMPLETE: - pSalI2CHND->pUserCB->pRXCCB->USERCB = i2c_callback; - break; - case I2C_RD_REQ_COMMAND: - pSalI2CHND->pUserCB->pRDREQCB->USERCB = i2c_callback; - break; - case I2C_ERR_OCCURRED: - pSalI2CHND->pUserCB->pERRCB->USERCB = i2c_callback; - break; - default: - break; - } - } -} - - -void i2c_clear_user_callback(i2c_t *obj, I2CCallback i2ccb) { - - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - if ((i2ccb >= I2C_TX_COMPLETE) && (i2ccb <= I2C_ERR_OCCURRED)) { - switch (i2ccb) { - case I2C_TX_COMPLETE: - pSalI2CHND->pUserCB->pTXCCB = NULL; - break; - case I2C_RX_COMPLETE: - pSalI2CHND->pUserCB->pRXCCB = NULL; - break; - case I2C_ERR_OCCURRED: - pSalI2CHND->pUserCB->pERRCB = NULL; - break; - default: - break; - } - } -} - -int i2c_enable_control(i2c_t *obj, int enable) { - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - pSalI2CHND->pInitDat->I2CEn = enable; - - pSalI2CMngtAdpt->pHalOp->HalI2CEnable(pSalI2CHND->pInitDat); - return 1; -} - -#if DEVICE_I2CSLAVE - -void i2c_slave_address(i2c_t *obj, int idx, uint32_t address, uint32_t mask) { - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - uint16_t i2c_default_addr = (uint16_t) pSalI2CHND->I2CAckAddr; - uint16_t i2c_user_addr = (uint16_t) address; - - if (i2c_default_addr != i2c_user_addr) { - /* Deinit I2C first */ - i2c_reset(obj); - - /* Load the user defined I2C clock */ - pSalI2CHND->I2CAckAddr = i2c_user_addr; - - /* Init I2C now */ - RtkI2CInitForPS(pSalI2CHND); - } -} - -void i2c_slave_mode(i2c_t *obj, int enable_slave) { - - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - /* Deinit I2C first */ - i2c_reset(obj); - - /* Load the user defined I2C clock */ - pSalI2CHND->I2CMaster = I2C_MASTER_MODE; - if (enable_slave) - pSalI2CHND->I2CMaster = I2C_SLAVE_MODE; - - /* Init I2C now */ - RtkI2CInitForPS(pSalI2CHND); -} - -// See I2CSlave.h -#define NoData 0 // the slave has not been addressed -#define ReadAddressed 1 // the master has requested a read from this slave (slave = transmitter) -#define WriteGeneral 2 // the master is writing to all slave -#define WriteAddressed 3 // the master is writing to this slave (slave = receiver) - -int i2c_slave_receive(i2c_t *obj) { - - int i2cslvrevsts = NoData; - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - i2cslvrevsts = RtkSalI2CSts(pSalI2CHND); - return i2cslvrevsts; -} - -int i2c_slave_read(i2c_t *obj, char *data, int length) { - - uint32_t I2CInTOTcnt = 0; - uint32_t InTimeoutCount = 0; - uint32_t InStartCount = 0; - - //uint8_t i2cdatlocal; - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - pSalI2CHND->pRXBuf = &i2crxtranbuf[pSalI2CHND->DevNum]; - pSalI2CHND->pRXBuf->DataLen = length; - pSalI2CHND->pRXBuf->pDataBuf = (uint8_t *)data; - - if (RtkI2CReceive(pSalI2CHND) != HAL_OK) { - return 0; //error - } - else { - /* Calculate user time out parameters */ - I2CInTOTcnt = 300; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - while((pSalI2CHND->DevSts != I2C_STS_IDLE) && - (pSalI2CHND->DevSts != I2C_STS_ERROR) && - (pSalI2CHND->DevSts != I2C_STS_TIMEOUT)) { - /* Time-Out check */ - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_RX_ADD_TO; - return ((int)(length)); - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_RX_ADD_TO; - return ((int)(length)); - } - } - } - - if (pSalI2CHND->DevSts != I2C_STS_TIMEOUT) - return ((int)(length - pSalI2CHND->pTXBuf->DataLen)); - else - return ((int)(length)); - } -} - -int i2c_slave_write(i2c_t *obj, const char *data, int length) { - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - pSalI2CHND->pTXBuf = &i2ctxtranbuf[pSalI2CHND->DevNum]; - pSalI2CHND->pTXBuf->DataLen = length; - //obj->i2c->pTXBuf->TargetAddr= obj->i2c->I2CAckAddr; - //obj->i2c->pTXBuf->RegAddr = 0; - pSalI2CHND->pTXBuf->pDataBuf = (uint8_t *)data; - - if (RtkI2CSend(pSalI2CHND) != HAL_OK) { - return 0; //error - } - - return 1; -} - -/** \brief Description of i2c_slave_set_for_rd_req - * - * i2c_slave_set_for_rd_req is used to set/clear i2c slave RD_REQ interrupt mask. - * If RD_REQ interrupt is set, slave could invoke read request callback when it gets - * a read command from other i2c master. - * - * \param i2c_t *obj : i2c object - * \param int set : set or clear for read request. Once it's set, i2c would invoke read request callback when a - * read command is sent to it. - * \return result - */ -int i2c_slave_set_for_rd_req(i2c_t *obj, int set) { - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt; -// PSAL_I2C_HND pSalI2CHND; - PHAL_I2C_INIT_DAT pHalI2CInitDat; - PHAL_I2C_OP pHalI2COP; - uint32_t I2CLocalTemp; - - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); -// pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - pHalI2CInitDat = pSalI2CMngtAdpt->pHalInitDat; - pHalI2COP = pSalI2CMngtAdpt->pHalOp; - - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_INTR_MASK); - - if (set) { - I2CLocalTemp |= BIT_IC_INTR_MASK_M_RD_REQ; - } else { - I2CLocalTemp &= (~BIT_IC_INTR_MASK_M_RD_REQ); - } - - pHalI2CInitDat->I2CIntrMSK = I2CLocalTemp; - pHalI2COP->HalI2CIntrCtrl(pHalI2CInitDat); - - return 1; -} - -/** \brief Description of i2c_slave_set_for_data_nak - * - * i2c_slave_set_for_data_nak is used to set/clear i2c slave NAK or ACK data part in transfer. - * - * \param i2c_t *obj : i2c object - * \param int set : set or clear for data NAK. - * \return result - */ -int i2c_slave_set_for_data_nak(i2c_t *obj, int set_nak) { - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - PHAL_I2C_INIT_DAT pHalI2CInitDat = NULL; - PHAL_I2C_OP pHalI2COP = NULL; - uint32_t I2CLocalTemp; - - pSalI2CMngtAdpt = &(obj->SalI2CMngtAdpt); - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - pHalI2CInitDat = pSalI2CMngtAdpt->pHalInitDat; - pHalI2COP = pSalI2CMngtAdpt->pHalOp; - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_STATUS); - - //if (set_nak) { - while (BIT_IC_STATUS_SLV_ACTIVITY & I2CLocalTemp) { - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_STATUS); - } - //} - - HAL_I2C_WRITE32(pSalI2CHND->DevNum, REG_DW_I2C_IC_SLV_DATA_NACK_ONLY, set_nak); - return 1; -} - -#endif // CONFIG_I2C_SLAVE_EN - -#endif // CONFIG_I2C_EN - diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/i2s_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/i2s_api.c deleted file mode 100644 index 023a3f1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/i2s_api.c +++ /dev/null @@ -1,247 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2015, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ -#include "objects.h" -#include "i2s_api.h" -#include "pinmap.h" - -#if CONFIG_I2S_EN -static const PinMap PinMap_I2S_TX[] = { - {PE_2, RTL_PIN_PERI(I2S0, 0, S0), RTL_PIN_FUNC(I2S0, S0)}, //+RTL8710 - {PH_2, RTL_PIN_PERI(I2S0, 0, S1), RTL_PIN_FUNC(I2S0, S1)}, - {PD_2, RTL_PIN_PERI(I2S0, 0, S2), RTL_PIN_FUNC(I2S0, S2)}, - {PC_7, RTL_PIN_PERI(I2S0, 0, S3), RTL_PIN_FUNC(I2S0, S3)}, - {PC_2, RTL_PIN_PERI(I2S1, 1, S0), RTL_PIN_FUNC(I2S1, S0)}, //+RTL8710 - {PD_6, RTL_PIN_PERI(I2S1, 1, S1), RTL_PIN_FUNC(I2S1, S1)}, - {PE_6, RTL_PIN_PERI(I2S1, 1, S2), RTL_PIN_FUNC(I2S1, S2)}, - {NC, NC, 0} -}; - -static const PinMap PinMap_I2S_RX[] = { - {PH_5, RTL_PIN_PERI(I2S0, 0, S1), RTL_PIN_FUNC(I2S0, S1)}, - {PC_5, RTL_PIN_PERI(I2S0, 0, S3), RTL_PIN_FUNC(I2S0, S3)}, //+RTL8710 - {PC_4, RTL_PIN_PERI(I2S1, 1, S0), RTL_PIN_FUNC(I2S1, S0)}, //+RTL8710 - {PD_3, RTL_PIN_PERI(I2S1, 1, S1), RTL_PIN_FUNC(I2S1, S1)}, - {PE_8, RTL_PIN_PERI(I2S1, 1, S2), RTL_PIN_FUNC(I2S1, S1)}, - {NC, NC, 0} -}; - -static const PinMap PinMap_I2S_CLK[] = { - {PE_1, RTL_PIN_PERI(I2S0, 0, S0), RTL_PIN_FUNC(I2S0, S0)}, //+RTL8710 - {PH_1, RTL_PIN_PERI(I2S0, 0, S1), RTL_PIN_FUNC(I2S0, S1)}, - {PD_1, RTL_PIN_PERI(I2S0, 0, S2), RTL_PIN_FUNC(I2S0, S2)}, - {PC_8, RTL_PIN_PERI(I2S0, 0, S3), RTL_PIN_FUNC(I2S0, S3)}, - {PC_1, RTL_PIN_PERI(I2S1, 1, S0), RTL_PIN_FUNC(I2S1, S0)}, //+RTL8710 - {PD_5, RTL_PIN_PERI(I2S1, 1, S1), RTL_PIN_FUNC(I2S1, S1)}, - {PE_5, RTL_PIN_PERI(I2S1, 1, S2), RTL_PIN_FUNC(I2S1, S2)}, - {NC, NC, 0} -}; - -static const PinMap PinMap_I2S_WS[] = { - {PE_0, RTL_PIN_PERI(I2S0, 0, S0), RTL_PIN_FUNC(I2S0, S0)}, //+RTL8710 - {PH_0, RTL_PIN_PERI(I2S0, 0, S1), RTL_PIN_FUNC(I2S0, S1)}, - {PD_0, RTL_PIN_PERI(I2S0, 0, S2), RTL_PIN_FUNC(I2S0, S2)}, - {PC_9, RTL_PIN_PERI(I2S0, 0, S3), RTL_PIN_FUNC(I2S0, S3)}, - {PC_0, RTL_PIN_PERI(I2S1, 1, S0), RTL_PIN_FUNC(I2S1, S0)}, //+RTL8710 - {PD_4, RTL_PIN_PERI(I2S1, 1, S1), RTL_PIN_FUNC(I2S1, S1)}, - {PE_4, RTL_PIN_PERI(I2S1, 1, S2), RTL_PIN_FUNC(I2S1, S2)}, //+RTL8710 - {NC, NC, 0} -}; - -static const HAL_I2S_DEF_SETTING I2SDefaultSetting = { - .I2SMaster = I2S_MASTER_MODE, //I2S Function Mode - .DevSts = I2S_STS_UNINITIAL, //I2S device status - .I2SChNum = I2S_CH_STEREO, //I2S Channel number mono or stereo - .I2SPageNum = I2S_4PAGE, //I2S Page number 2~4 - .I2STRxAct = I2S_TXRX, //I2S tx rx act, tx only or rx only or tx+rx - .I2SWordLen = I2S_WL_16, //I2S Word length 16bit or 24bit - .I2SPageSize = (768/4)-1, //I2S Page size 1~4096 word - .I2SRate = I2S_SR_48KHZ, //I2S sample rate 8k ~ 96khz - - .I2STxIntrMSK = I2S_TX_INT_PAGE0_OK|I2S_TX_INT_PAGE1_OK| \ - I2S_TX_INT_PAGE2_OK|I2S_TX_INT_PAGE3_OK, /*I2S Tx Interrupt Mask*/ - .I2SRxIntrMSK = I2S_RX_INT_PAGE0_OK|I2S_RX_INT_PAGE1_OK| \ - I2S_RX_INT_PAGE2_OK|I2S_RX_INT_PAGE3_OK /*I2S Rx Interrupt Mask*/ -}; - -void i2s_init(i2s_t *obj, PinName sck, PinName ws, PinName sd) -{ - uint32_t i2s_sck, i2s_ws, i2s_tx, i2s_rx; - uint32_t i2s_sel;; - uint8_t i2s_idx; - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) &obj->I2SAdapter; - HAL_Status ret; - - // Determine the UART to use (UART0, UART1, or UART3) - i2s_sck = pinmap_peripheral(sck, PinMap_I2S_CLK); - i2s_ws = pinmap_peripheral(ws, PinMap_I2S_WS); - i2s_tx = pinmap_find_peripheral(sd, PinMap_I2S_TX); - i2s_rx = pinmap_find_peripheral(sd, PinMap_I2S_RX); - - i2s_sel = pinmap_merge(i2s_sck, i2s_ws); - if (unlikely(i2s_sel == NC)) { - DBG_I2S_ERR("%s: Cannot find matched I2S for given pin\n", __FUNCTION__); - return; - } - - if( (i2s_sel != i2s_tx) && (i2s_sel != i2s_rx)){ - DBG_I2S_ERR("%s: Cannot find matched I2S for given pin\n", __FUNCTION__); - return; - } - - i2s_idx = RTL_GET_PERI_IDX(i2s_sel); - - pI2SAdapter->DevNum = i2s_idx; - pI2SAdapter->PinMux = RTL_GET_PERI_SEL(i2s_sel);; - DBG_I2S_INFO("%s: Use I2S%d Sel%d\r\n", __FUNCTION__, pI2SAdapter->DevNum, pI2SAdapter->PinMux); - - pI2SAdapter->pInitDat = &obj->InitDat; - RtkI2SLoadDefault(pI2SAdapter, (void*)&I2SDefaultSetting); - - // Load user defined parameters - pI2SAdapter->pInitDat->I2SChNum = obj->channel_num; - pI2SAdapter->pInitDat->I2SRate = obj->sampling_rate; - pI2SAdapter->pInitDat->I2SWordLen = obj->word_length; - pI2SAdapter->pInitDat->I2STRxAct = obj->direction; - - //RtkI2SInit(pI2SAdapter); - ret = HalI2SInit(pI2SAdapter); - - if(ret != HAL_OK){ - DBG_I2S_ERR("%s: HalI2SInit is failure\n", __FUNCTION__); - } - -} - -void i2s_set_dma_buffer(i2s_t *obj, char *tx_buf, char *rx_buf, - uint32_t page_num, uint32_t page_size) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) &obj->I2SAdapter; - uint32_t i; - - if ((page_num < 2) || (page_num > 4) || (page_size < 8)) { - DBG_I2S_INFO("%s: PageNum(%d) valid value is 2~4; PageSize(%d must > 8)\r\n", \ - __FUNCTION__, page_num, page_size); - return; - } - - pI2SAdapter->pInitDat->I2SPageNum = page_num - 1; - pI2SAdapter->pInitDat->I2SPageSize = page_size/4 - 1; // unit is 4-bytes - - pI2SAdapter->pInitDat->I2STxData = (uint8_t*)tx_buf; - pI2SAdapter->pInitDat->I2SRxData = (uint8_t*)rx_buf; - HalI2SSetDMABuf(pI2SAdapter->pInitDat); - - for (i=0;iTxPageList[i] = (uint32_t*)(tx_buf + ((page_size) * i)); - pI2SAdapter->RxPageList[i] = (uint32_t*)(rx_buf + ((page_size) * i)); - } -} - -void i2s_tx_irq_handler(i2s_t *obj, i2s_irq_handler handler, uint32_t id) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) &obj->I2SAdapter; - - pI2SAdapter->UserCB.TxCCB = handler; - pI2SAdapter->UserCB.TxCBId = id; -} - -void i2s_rx_irq_handler(i2s_t *obj, i2s_irq_handler handler, uint32_t id) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) &obj->I2SAdapter; - - pI2SAdapter->UserCB.RxCCB = handler; - pI2SAdapter->UserCB.RxCBId = id; -} - -void i2s_set_direction(i2s_t *obj, int trx_type) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) &obj->I2SAdapter; - - obj->direction = trx_type; - pI2SAdapter->pInitDat->I2STRxAct = trx_type; - HalI2SSetDirection(pI2SAdapter->pInitDat); -} - -void i2s_set_param(i2s_t *obj, int channel_num, int rate, int word_len) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) &obj->I2SAdapter; - - obj->channel_num = channel_num; - obj->sampling_rate = rate; - obj->word_length = word_len; - pI2SAdapter->pInitDat->I2SChNum = channel_num; - pI2SAdapter->pInitDat->I2SRate = rate; - pI2SAdapter->pInitDat->I2SWordLen = word_len; - HalI2SSetChNum(pI2SAdapter->pInitDat); - HalI2SSetRate(pI2SAdapter->pInitDat); - HalI2SSetWordLen(pI2SAdapter->pInitDat); -} - -void i2s_deinit(i2s_t *obj) -{ - //RtkI2SDeInit((void*)&obj->I2SAdapter); - HalI2SDeInit((void*)&obj->I2SAdapter); -} - -int* i2s_get_tx_page(i2s_t *obj) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) &obj->I2SAdapter; - uint8_t page_idx; - - page_idx = HalI2SGetTxPage((void*)pI2SAdapter->pInitDat); - if (page_idx <= pI2SAdapter->pInitDat->I2SPageNum) { - return ((int*)pI2SAdapter->TxPageList[page_idx]); - } else { - return NULL; - } -} - -void i2s_send_page(i2s_t *obj, uint32_t *pbuf) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) &obj->I2SAdapter; - uint32_t page_num, i; - - page_num = pI2SAdapter->pInitDat->I2SPageNum + 1; - for (i=0;iTxPageList[i] == pbuf) { - HalI2SPageSend(pI2SAdapter->pInitDat, i); - break; // break the for loop - } - } - - if (i == page_num) { - DBG_I2S_ERR("i2s_send_page: the pbuf(0x%x) is not a DMA buffer\r\n", pbuf); - } -} - -void i2s_recv_page(i2s_t *obj) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) &obj->I2SAdapter; - - HalI2SPageRecv(pI2SAdapter->pInitDat); -} - -void i2s_enable(i2s_t *obj) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) &obj->I2SAdapter; - - //RtkI2SEnable(pI2SAdapter); - HalI2SEnable(pI2SAdapter); -} - -void i2s_disable(i2s_t *obj) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) &obj->I2SAdapter; - - //RtkI2SDisable(pI2SAdapter); - HalI2SDisable(pI2SAdapter); -} - -#endif // end of "#if CONFIG_I2S_EN" diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/log_uart_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/log_uart_api.c deleted file mode 100644 index dc2f1c7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/log_uart_api.c +++ /dev/null @@ -1,510 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ - -#include "objects.h" -#include "log_uart_api.h" - - -#include - -const uint32_t log_uart_support_rate[] = { - UART_BAUD_RATE_2400, UART_BAUD_RATE_4800, UART_BAUD_RATE_9600, - UART_BAUD_RATE_19200, UART_BAUD_RATE_38400, UART_BAUD_RATE_57600, - UART_BAUD_RATE_115200, UART_BAUD_RATE_921600, UART_BAUD_RATE_1152000, - - 0xFFFFFFFF -}; - -extern HAL_TIMER_OP HalTimerOp; - -extern uint32_t ConfigDebugErr; -extern uint32_t ConfigDebugWarn; -extern uint32_t ConfigDebugInfo; -extern uint32_t CfgSysDebugErr; -extern uint32_t CfgSysDebugInfo; -extern uint32_t CfgSysDebugWarn; - -extern HAL_Status RuartIsTimeout (uint32_t StartCount, uint32_t TimeoutCnt); -extern uint32_t HalLogUartInitSetting(HAL_LOG_UART_ADAPTER *pUartAdapter); -extern void HalLogUartSetBaudRate(HAL_LOG_UART_ADAPTER *pUartAdapter); -extern void HalLogUartSetLineCtrl(HAL_LOG_UART_ADAPTER *pUartAdapter); -extern void HalLogUartIrqHandle(void * Data); - -int32_t log_uart_init (log_uart_t *obj, int baudrate, int data_bits, SerialParity parity, int stop_bits) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter; - int i; - - _memset((void*)obj, 0, sizeof(log_uart_t)); - pUartAdapter = &obj->log_hal_uart; - // Check Baud rate - for (i=0; log_uart_support_rate[i]!=0xFFFFFF; i++) { - if (log_uart_support_rate[i] == baudrate) { - break; - } - } - - if (log_uart_support_rate[i]== 0xFFFFFF) { - DBG_UART_ERR("log_uart_init: Not support Baud Rate %d\n", baudrate); - return -1; - } - - // check word width - if ((data_bits < 5) || (data_bits > 8)) { - DBG_UART_ERR("log_uart_init: Not support Word Width %d\n", data_bits); - return -1; - } - - //4 Inital Log uart - pUartAdapter->BaudRate = baudrate; - pUartAdapter->DataLength = data_bits-5; - pUartAdapter->FIFOControl = FCR_FIFO_EN | FCR_TX_TRIG_HF | FCR_RX_TRIG_HF; - // only enable Rx linstatus at initial, - // Tx & Rx interrupt will be enabled @ transfer start time - pUartAdapter->IntEnReg = IER_ELSI; - switch (parity) { - case ParityNone: - pUartAdapter->Parity = LCR_PARITY_NONE; - break; - - case ParityOdd: - pUartAdapter->Parity = LCR_PARITY_ODD; - break; - - case ParityEven: - pUartAdapter->Parity = LCR_PARITY_EVEN; - break; - - default: - DBG_UART_ERR("log_uart_init: Not support parity type %d\n", parity); - return -1; - } - - if (stop_bits > 1) { - // if width is 5 bits, stop bit will be 1.5 bit - pUartAdapter->Stop = LCR_STOP_2B; - } else { - pUartAdapter->Stop = LCR_STOP_1B; - } - - //4 Initial Log Uart - HalLogUartInitSetting(pUartAdapter); - - // disable all debug message - ConfigDebugErr = 0; - ConfigDebugWarn = 0; - ConfigDebugInfo = 0; - CfgSysDebugErr = 0; - CfgSysDebugInfo = 0; - CfgSysDebugWarn = 0; - - return 0; -} - -void log_uart_free(log_uart_t *obj) -{ - LOG_UART_ADAPTER UartAdapter; - - // Recover the Log UART for debug message printing - //4 Release log uart reset and clock - LOC_UART_FCTRL(OFF); - LOC_UART_FCTRL(ON); - ACTCK_LOG_UART_CCTRL(ON); - - //4 Inital Log uart - UartAdapter.BaudRate = DEFAULT_BAUDRATE; - UartAdapter.DataLength = UART_DATA_LEN_8BIT; - UartAdapter.FIFOControl = 0xC1; - UartAdapter.IntEnReg = 0x00; - UartAdapter.Parity = UART_PARITY_DISABLE; - UartAdapter.Stop = UART_STOP_1BIT; - - // un_register current IRQ first - InterruptUnRegister(&(obj->log_hal_uart.IrqHandle)); - - //4 Initial Log Uart - HalLogUartInit(UartAdapter); -} - -void log_uart_baud(log_uart_t *obj, int baudrate) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter; - int i; - - pUartAdapter = &obj->log_hal_uart; - // Check Baud rate - for (i=0; log_uart_support_rate[i]!=0xFFFFFFFF; i++) { - if (log_uart_support_rate[i] == baudrate) { - break; - } - } - - if (log_uart_support_rate[i]== 0xFFFFFF) { - DBG_UART_ERR("log_uart_baud: Not support Baud Rate %d\n", baudrate); - return; - } - - pUartAdapter->BaudRate = baudrate; - HalLogUartSetBaudRate(pUartAdapter); -} - -void log_uart_format(log_uart_t *obj, int data_bits, SerialParity parity, int stop_bits) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter; - - pUartAdapter = &obj->log_hal_uart; - - // check word width - if ((data_bits < 5) || (data_bits > 8)) { - DBG_UART_ERR("log_uart_format: Not support Word Width %d\n", data_bits); - return; - } - - //4 Inital Log uart - pUartAdapter->DataLength = data_bits - 5; - switch (parity) { - case ParityNone: - pUartAdapter->Parity = LCR_PARITY_NONE; - break; - - case ParityOdd: - pUartAdapter->Parity = LCR_PARITY_ODD; - break; - - case ParityEven: - pUartAdapter->Parity = LCR_PARITY_EVEN; - break; - - default: - DBG_UART_ERR("log_uart_format: Not support parity type %d\n", parity); - return; - } - - if (stop_bits > 1) { - // if width is 5 bits, stop bit will be 1.5 bit - pUartAdapter->Stop = LCR_STOP_2B; - } else { - pUartAdapter->Stop = LCR_STOP_1B; - } - - HalLogUartSetLineCtrl(pUartAdapter); -} - -/****************************************************************************** - * INTERRUPTS HANDLING - ******************************************************************************/ -void log_uart_irq_handler(log_uart_t *obj, loguart_irq_handler handler, uint32_t id) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter; - - pUartAdapter = &(obj->log_hal_uart); - pUartAdapter->api_irq_handler = handler; - pUartAdapter->api_irq_id = id; -} - -void log_uart_irq_set(log_uart_t *obj, LOG_UART_INT_ID irq, uint32_t enable) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter; - uint8_t int_en=0; - - pUartAdapter = &(obj->log_hal_uart); - - switch (irq) { - case IIR_RX_RDY: - int_en = IER_ERBFI; - break; - - case IIR_THR_EMPTY: - int_en = IER_ETBEI; - break; - - case IIR_RX_LINE_STATUS: - int_en = IER_ELSI; - break; - - case IIR_MODEM_STATUS: - int_en = IER_EDSSI; - break; - - default: - DBG_UART_WARN("log_uart_irq_set: Unknown Irq Id\n"); - return; - } - - if (enable) { - pUartAdapter->IntEnReg |= int_en; - } else { - // disable - pUartAdapter->IntEnReg &= (~int_en); - } - HalLogUartSetIntEn(pUartAdapter); -} - -/****************************************************************************** - * READ/WRITE - ******************************************************************************/ - -char log_uart_getc(log_uart_t *obj) -{ -// HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); - - while (!log_uart_readable(obj)); - return (char)(HAL_UART_READ32(UART_REV_BUF_OFF) & 0xFF); -} - -void log_uart_putc(log_uart_t *obj, char c) -{ -// HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); - - while (!log_uart_writable(obj)); - HAL_UART_WRITE8(UART_TRAN_HOLD_OFF, c); -} - -int log_uart_readable(log_uart_t *obj) -{ -// HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); - volatile uint8_t line_status; - - line_status = HAL_UART_READ8(UART_LINE_STATUS_REG_OFF); - - if (line_status & LSR_DR) { - return 1; - } else { - return 0; - } -} - -int log_uart_writable(log_uart_t *obj) -{ -// HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); - volatile uint8_t line_status; - - line_status = HAL_UART_READ8(UART_LINE_STATUS_REG_OFF); - if (line_status & LSR_THRE) { - return 1; - } else { - return 0; - } -} - -void log_uart_clear(log_uart_t *obj) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); - - HalLogUartRstFIFO(pUartAdapter, (LOG_UART_RST_TX_FIFO|LOG_UART_RST_TX_FIFO)); - pUartAdapter->TxCount = 0; - pUartAdapter->RxCount = 0; -} - -void log_uart_clear_tx(log_uart_t *obj) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); - - HalLogUartRstFIFO(pUartAdapter, LOG_UART_RST_TX_FIFO); - pUartAdapter->TxCount = 0; -} - -void log_uart_clear_rx(log_uart_t *obj) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); - - HalLogUartRstFIFO(pUartAdapter, LOG_UART_RST_RX_FIFO); - pUartAdapter->RxCount = 0; -} - -void log_uart_break_set(log_uart_t *obj) -{ -// HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); - uint32_t RegValue; - - RegValue = HAL_UART_READ32(UART_LINE_CTL_REG_OFF); - RegValue |= LCR_BC; - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, RegValue); -} - -void log_uart_break_clear(log_uart_t *obj) -{ -// HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); - uint32_t RegValue; - - RegValue = HAL_UART_READ32(UART_LINE_CTL_REG_OFF); - RegValue &= ~LCR_BC; - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, RegValue); -} - -void log_uart_tx_comp_handler(log_uart_t *obj, void *handler, uint32_t id) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart); - - pUartAdapter->TxCompCallback = (void(*)(void*))handler; - pUartAdapter->TxCompCbPara = (void*)id; -} - -void log_uart_rx_comp_handler(log_uart_t *obj, void *handler, uint32_t id) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart); - - pUartAdapter->RxCompCallback = (void(*)(void*))handler; - pUartAdapter->RxCompCbPara = (void*)id; -} - -void log_uart_line_status_handler(log_uart_t *obj, void *handler, uint32_t id) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart); - - pUartAdapter->LineStatusCallback = (void(*)(void*, uint8_t))handler; - pUartAdapter->LineStatusCbPara = (void*)id; -} - -// Blocked(busy wait) receive, return received bytes count -int32_t log_uart_recv (log_uart_t *obj, char *prxbuf, uint32_t len, uint32_t timeout_ms) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart); - int ret; - - ret = (int)HalLogUartRecv(pUartAdapter, prxbuf, len, timeout_ms); - return (ret); -} - -// Blocked(busy wait) send, return transmitted bytes count -int32_t log_uart_send (log_uart_t *obj, char *ptxbuf, uint32_t len, uint32_t timeout_ms) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart); - int ret; - - ret = (int)HalLogUartSend(pUartAdapter, ptxbuf, len, timeout_ms); - return (ret); -} - -// Interrupt mode(no wait) receive, return HAL function result -int32_t log_uart_recv_stream (log_uart_t *obj, char *prxbuf, uint32_t len) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart); - int ret; - - ret = (int)HalLogUartIntRecv(pUartAdapter, (uint8_t*)prxbuf, len); - return (ret); -} - -// Interrupt Mode(no wait) send, return HAL function result -int32_t log_uart_send_stream (log_uart_t *obj, char *ptxbuf, uint32_t len) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart); - int ret; - - ret = (int)HalLogUartIntSend(pUartAdapter, (uint8_t*)ptxbuf, len); - return (ret); -} - -// Interrupt mode(no wait) receive with timeout -// return the byte count received before timeout, or error(<0) -int32_t log_uart_recv_stream_timeout (log_uart_t *obj, char *prxbuf, uint32_t len, - uint32_t timeout_ms, void *force_cs) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart); - uint32_t TimeoutCount=0, StartCount; - int ret; - void (*task_yield)(void); - - task_yield = NULL; - ret = (int)HalLogUartIntRecv(pUartAdapter, (uint8_t*)prxbuf, len); - - if ((ret == HAL_OK) && (timeout_ms > 0)) { - TimeoutCount = (timeout_ms*1000/TIMER_TICK_US); - StartCount = HalTimerOp.HalTimerReadCount(1); - task_yield = (void (*)(void))force_cs; - while (pUartAdapter->RxCount > 0) { - if (HAL_TIMEOUT == RuartIsTimeout(StartCount, TimeoutCount)) { - HalLogUartAbortIntRecv(pUartAdapter); - break; - } - if (NULL != task_yield) { - task_yield(); - } - } - return (len - pUartAdapter->RxCount); - } else { - return (-ret); - } -} - -// Abort Interrupt Mode TX and return how many bytes data has been sent -int32_t log_uart_send_stream_abort (log_uart_t *obj) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart); - int ret; - - HalLogUartAbortIntSend(pUartAdapter); - - ret = (uint32_t)pUartAdapter->pTxBuf - (uint32_t)pUartAdapter->pTxStartAddr; - return (ret); -} - -// Abort Interrupt Mode RX and return how many bytes data has been received -int32_t log_uart_recv_stream_abort (log_uart_t *obj) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart); - int ret; - - HalLogUartAbortIntRecv(pUartAdapter); - - ret = (uint32_t)pUartAdapter->pRxBuf - (uint32_t)pUartAdapter->pRxStartAddr; - return (ret); -} - -void log_uart_disable (log_uart_t *obj) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart); - - HalLogUartDisable(pUartAdapter); -} - -void log_uart_enable (log_uart_t *obj) -{ - HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart); - - HalLogUartEnable(pUartAdapter); -} - -// to read Line-Status register -// Bit 0: RX Data Ready -// Bit 1: Overrun Error -// Bit 2: Parity Error -// Bit 3: Framing Error -// Bit 4: Break Interrupt (received data input is held in 0 state for a longer than a full word tx time) -// Bit 5: TX FIFO empty (THR empty) -// Bit 6: TX FIFO empty (THR & TSR both empty) -// Bit 7: Receiver FIFO Error (parity error, framing error or break indication) -uint8_t log_uart_raed_lsr(log_uart_t *obj) -{ - uint8_t LineStatus; - - LineStatus = HAL_UART_READ8(UART_LINE_STATUS_REG_OFF); - - return LineStatus; -} - -// to read Modem-Status register -// Bit 0: DCTS, The CTS line has changed its state -// Bit 1: DDSR, The DSR line has changed its state -// Bit 2: TERI, RI line has changed its state from low to high state -// Bit 3: DDCD, DCD line has changed its state -// Bit 4: Complement of the CTS input -// Bit 5: Complement of the DSR input -// Bit 6: Complement of the RI input -// Bit 7: Complement of the DCD input -uint8_t log_uart_raed_msr(log_uart_t *obj) -{ - uint8_t RegValue; - - RegValue = HAL_UART_READ8(UART_MODEM_STATUS_REG_OFF); - return RegValue; -} - diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/nfc_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/nfc_api.c deleted file mode 100644 index 4649b2a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/nfc_api.c +++ /dev/null @@ -1,243 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ -#include "objects.h" -#include "pinmap.h" - -#if CONFIG_NFC_NORMAL - -#include "nfc_api.h" - -/** - * @brief The NFC tag write callback function wrapper - * - * @return None - * - */ -void nfc_tagwrite_callback(PNFC_ADAPTER pNFCAdp, uint32_t page, uint32_t wr_data) -{ - nfctag_t *obj; - nfc_write_cb handler; - - obj = pNFCAdp->nfc_obj; - - handler = (nfc_write_cb)obj->nfc_wr_cb; - if (NULL != handler) { - handler(obj->wr_cb_arg, page, wr_data); - } -} - -/** - * @brief The NFC tag read callback function wrapper - * - * @return None - * - */ -void nfc_event_callback(PNFC_ADAPTER pNFCAdp, uint32_t event) -{ - nfctag_t *obj; - nfc_event_cb handler; - - obj = pNFCAdp->nfc_obj; - - handler = (nfc_event_cb)obj->nfc_ev_cb; - if (NULL != handler) { - if (obj->event_mask & event) { - handler(obj->ev_cb_arg, event); - } - } -} - -/** - * @brief The NFC tag read callback function wrapper - * - * @return None - * - */ -void nfc_tagread_callback(PNFC_ADAPTER pNFCAdp, uint32_t page) -{ - // notify upper layer when read tag page 0 only - if (0 == page) { - nfc_event_callback(pNFCAdp, NFC_EV_READ); - } -} - - -/** - * @brief The NFC cache read done callback function wrapper - * - * @return None - * - */ -void nfc_cache_read_callback(PNFC_ADAPTER pNFCAdp, uint32_t start_pg, uint32_t *pbuf) -{ - nfctag_t *obj; - nfc_write_cb handler; - - obj = pNFCAdp->nfc_obj; - - handler = (nfc_write_cb)obj->nfc_cache_rd_cb; - if (NULL != handler) { - handler(obj->cache_read_cb_arg, start_pg, (uint32_t)pbuf); - } -} - -/** - * @brief To initial NFC tag hardware and resource - * - * @return The result - * - */ -int nfc_init(nfctag_t *obj, uint32_t *pg_init_val) -{ - _memset((void *)obj, 0, sizeof(nfctag_t)); - HalNFCDmemInit(pg_init_val, NFCTAGLENGTH); - HalNFCInit(&(obj->NFCAdapter)); - HalNFCFwDownload(); - obj->NFCAdapter.nfc_obj = obj; - obj->pwr_status = NFC_PWR_RUNNING; - - return NFC_OK; -} - -/** - * @brief To free NFC tag hardware and resource - * - * @return The result - * - */ -int nfc_free(nfctag_t *obj) -{ - HalNFCDeinit(&(obj->NFCAdapter)); - return NFC_OK; -} - -/** - * @brief To register the callback function for NFC read occurred - * - * @return None - * - */ -void nfc_read(nfctag_t *obj, nfc_read_cb handler, void *arg) -{ - obj->nfc_rd_cb = (void *)handler; - obj->rd_cb_arg = arg; -} - -/** - * @brief To register the callback function for NFC write occurred - * - * @return None - * - */ -void nfc_write(nfctag_t *obj, nfc_write_cb handler, void *arg) -{ - obj->nfc_wr_cb = (void *)handler; - obj->wr_cb_arg = arg; -} - -/** - * @brief To register the callback function for NFC events occurred - * and the event mask - * - * @return None - * - */ -void nfc_event(nfctag_t *obj, nfc_event_cb handler, void *arg, unsigned int event_mask) -{ - obj->nfc_ev_cb = (void *)handler; - obj->ev_cb_arg = arg; - obj->event_mask = event_mask; -} - -/** - * @brief To set a new power mode to the NFC device - * - * @return The result - * - */ -int nfc_power(nfctag_t *obj, int pwr_mode, int wake_event) -{ - // TODO: - - return NFC_OK; -} - - -/** - * @brief to update the NFC read cache. The data in the NFC read cache - * buffer will be transmitted out when NFC read occurred - * - * @return The result - * - */ -int nfc_cache_write(nfctag_t *obj, uint32_t *tbuf, unsigned int spage, unsigned int pg_num) -{ - uint8_t remain_pg; - uint8_t pg_offset=0; - uint8_t i; - - if ((spage+pg_num) > NFC_MAX_CACHE_PAGE_NUM) { - return NFC_ERROR; - } - - remain_pg = pg_num; - while (remain_pg > 0) { - if (remain_pg >= 4) { - A2NWriteCatch (&obj->NFCAdapter, (spage+pg_offset), 4, (uint32_t*)(&tbuf[pg_offset])); - remain_pg -= 4; - pg_offset += 4; - } - else { - for(i=0;iNFCAdapter, (spage+pg_offset), 1, (uint32_t*)(&tbuf[pg_offset])); - pg_offset++; - } - remain_pg = 0; - } - } - - return NFC_OK; -} - -/** - * @brief To get current NFC status - * - * @return The result - * - */ -int nfc_cache_raed(nfctag_t *obj, nfc_cache_read_cb handler, - void *arg, unsigned int start_pg) -{ - if (start_pg > NFC_MAX_CACHE_PAGE_NUM) { - return NFC_ERROR; - } - - obj->nfc_cache_rd_cb = (void *)handler; - obj->cache_read_cb_arg = arg; - - A2NReadCatch(&(obj->NFCAdapter), (uint8_t)start_pg); - - return NFC_OK; -} - -/** - * @brief to read back the NFC read cache. - * - * @return The result - * - */ -int nfc_status(nfctag_t *obj) -{ - // TODO: - - return (obj->pwr_status); -} - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/objects.h b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/objects.h deleted file mode 100644 index 16c5d3a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/objects.h +++ /dev/null @@ -1,208 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBED_OBJECTS_H -#define MBED_OBJECTS_H - -#include -#include "cmsis.h" -#include "PortNames.h" -#include "PeripheralNames.h" -#include "PinNames.h" -#include "platform_autoconf.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef CONFIG_GPIO_EN -struct gpio_irq_s { - PinName pin; - uint32_t event; - HAL_GPIO_PIN hal_pin; - uint8_t hal_port_num; - uint8_t hal_pin_num; -}; - -typedef struct gpio_irq_s gpio_irq_t; - -struct gpio_s { - PinName pin; - PinMode mode; - PinDirection direction; - HAL_GPIO_PIN hal_pin; - uint8_t hal_port_num; - uint8_t hal_pin_num; -}; - -typedef struct gpio_s gpio_t; - -struct port_s { - PortName port; - uint32_t mask; - PinDirection direction; - uint8_t *pin_def; -}; -#endif // end of "#ifdef CONFIG_GPIO_EN" - -#ifdef CONFIG_UART_EN -struct serial_s { - HAL_RUART_OP hal_uart_op; - HAL_RUART_ADAPTER hal_uart_adp; -#ifdef CONFIG_GDMA_EN - UART_DMA_CONFIG uart_gdma_cfg; - HAL_GDMA_ADAPTER uart_gdma_adp_tx; - HAL_GDMA_ADAPTER uart_gdma_adp_rx; - UART_DMA_MULTIBLK gdma_multiblk_list_tx; - UART_DMA_MULTIBLK gdma_multiblk_list_rx; -#endif - uint32_t tx_len; - uint32_t rx_len; -}; -#endif // end of "#ifdef CONFIG_UART_EN" - -struct log_uart_s { - HAL_LOG_UART_ADAPTER log_hal_uart; -}; - -#ifdef CONFIG_SPI_COM_EN - -#endif - -#ifdef CONFIG_PWM_EN -struct pwmout_s { - uint8_t pwm_idx; - uint8_t pin_sel; - uint32_t period; - uint32_t pulse; - HAL_PWM_ADAPTER pwm_hal_adp; -}; -#endif - -#ifdef CONFIG_I2C_EN -struct i2c_s { - SAL_I2C_MNGT_ADPT SalI2CMngtAdpt; - SAL_I2C_HND_PRIV SalI2CHndPriv; - HAL_I2C_INIT_DAT HalI2CInitData; - HAL_I2C_OP HalI2COp; - IRQ_HANDLE I2CIrqHandleDat; - HAL_GDMA_ADAPTER HalI2CTxGdmaAdpt; - HAL_GDMA_ADAPTER HalI2CRxGdmaAdpt; - HAL_GDMA_OP HalI2CGdmaOp; - IRQ_HANDLE I2CTxGdmaIrqHandleDat; - IRQ_HANDLE I2CRxGdmaIrqHandleDat; - SAL_I2C_USER_CB SalI2CUserCB; - SAL_I2C_USERCB_ADPT SalI2CUserCBAdpt[SAL_USER_CB_NUM]; - SAL_I2C_DMA_USER_DEF SalI2CDmaUserDef; -}; -#endif - - -struct flash_s -{ - SPIC_INIT_PARA SpicInitPara; - uint32_t Length; -}; - - - -#ifdef CONFIG_ADC_EN -struct analogin_s { - SAL_ADC_MNGT_ADPT SalADCMngtAdpt; - SAL_ADC_HND_PRIV SalADCHndPriv; - HAL_ADC_INIT_DAT HalADCInitData; - HAL_ADC_OP HalADCOp; - IRQ_HANDLE ADCIrqHandleDat; - HAL_GDMA_ADAPTER HalADCGdmaAdpt; - HAL_GDMA_OP HalADCGdmaOp; - IRQ_HANDLE ADCGdmaIrqHandleDat; - SAL_ADC_USER_CB SalADCUserCB; - SAL_ADC_USERCB_ADPT SalADCUserCBAdpt[SAL_ADC_USER_CB_NUM]; -}; -#endif - -#if 0 -struct i2c_s { - I2C_Type *i2c; -}; - -struct spi_s { - SPI_Type *spi; -}; - -#endif - -#ifdef CONFIG_NFC_EN -struct nfctag_s { - NFC_ADAPTER NFCAdapter; - void *nfc_rd_cb; // read callback function - void *rd_cb_arg; - void *nfc_wr_cb; // write callback function - void *wr_cb_arg; - void *nfc_ev_cb; // event callback function - void *ev_cb_arg; - void *nfc_cache_rd_cb; // cache read callback function - void *cache_read_cb_arg; - unsigned int event_mask; - int pwr_status; -}; -#endif - -#ifdef CONFIG_TIMER_EN -struct gtimer_s { - TIMER_ADAPTER hal_gtimer_adp; - void *handler; - uint32_t hid; - uint8_t timer_id; - uint8_t is_periodcal; -}; -#endif - -#ifdef CONFIG_I2S_EN -struct i2s_s { - HAL_I2S_ADAPTER I2SAdapter; - HAL_I2S_INIT_DAT InitDat; - uint8_t sampling_rate; - uint8_t channel_num; - uint8_t word_length; - uint8_t direction; -}; - -#endif - -#ifdef CONFIG_DAC_EN -/** \file objects.h - * \brief A Documented file. - * - * A documented file. -*/ - -/** \struct dac_s objects.h "rtl8195a/objects.h" - * \brief This is a dac_s structure. - * - * For analogout APIs, a pointer to dac_s is used as an input paras. - * A DAC initial data structure is the major element of dac_s. - */ -struct dac_s { - HAL_DAC_INIT_DAT DACpara; -}; -#endif - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/pinmap.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/pinmap.c deleted file mode 100644 index 12b48f4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/pinmap.c +++ /dev/null @@ -1,34 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ -//#include "mbed_assert.h" -#include "objects.h" -#include "pinmap.h" -//#include "error.h" - -/** - * Configure pin enable and function - */ -void pin_function(PinName pin, int function) -{ - // MBED_ASSERT(pin != (PinName)NC); - //1 Our HAL API cannot support to configure the pin function by this way - /* the pin function (pin mux) is depends on each IP On/Off and priority, so we cannot - set the pin function directly */ -} - -/** - * Configure pin pull-up/pull-down - */ -void pin_mode(PinName pin, PinMode mode) -{ -// MBED_ASSERT(pin != (PinName)NC); - HAL_GPIO_PullCtrl((uint32_t)pin, (uint32_t)mode); - -} diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/pinmap_common.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/pinmap_common.c deleted file mode 100644 index 1a1001a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/pinmap_common.c +++ /dev/null @@ -1,73 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "basic_types.h" -#include "diag.h" -#include "pinmap.h" -//#include "error.h" - -__weak void pinmap_pinout(PinName pin, const PinMap *map) { -#if 0 - if (pin == NC) - return; - - while (map->pin != NC) { - if (map->pin == pin) { - pin_function(pin, map->function); - - pin_mode(pin, PullNone); - return; - } - map++; - } - DBG_GPIO_ERR("%s: could not pinout\n", __FUNCTION__); -#endif -} - -__weak uint32_t pinmap_merge(uint32_t a, uint32_t b) { - // both are the same (inc both NC) - if (a == b) - return a; - - // one (or both) is not connected - if (a == (uint32_t)NC) - return b; - if (b == (uint32_t)NC) - return a; - - // mis-match error case - DBG_GPIO_ERR("%s: pinmap mis-match\n", __FUNCTION__); - return (uint32_t)NC; -} - -__weak uint32_t pinmap_find_peripheral(PinName pin, const PinMap* map) { - while (map->pin != NC) { - if (map->pin == pin) - return map->peripheral; - map++; - } - return (uint32_t)NC; -} - -__weak uint32_t pinmap_peripheral(PinName pin, const PinMap* map) { - uint32_t peripheral = (uint32_t)NC; - - if (pin == (PinName)NC) - return (uint32_t)NC; - peripheral = pinmap_find_peripheral(pin, map); - if ((uint32_t)NC == peripheral) // no mapping available - DBG_GPIO_ERR("%s: pinmap not found for peripheral\n", __FUNCTION__); - return peripheral; -} diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/port_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/port_api.c deleted file mode 100644 index 6c5ca0f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/port_api.c +++ /dev/null @@ -1,212 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ -#include "objects.h" -#include "port_api.h" -#include "pinmap.h" -#include "gpio_api.h" -#include "PinNames.h" -//#include "mbed_error.h" - -#if CONFIG_GPIO_EN - -#if DEVICE_PORTIN || DEVICE_PORTOUT - -#define GPIO_PORT_NUM 3 -#define GPIO_PORT_WIDTH 32 -#define GPIO_PORT_WIDTH_MAX 32 - -const uint8_t Default_Port_PinDef[GPIO_PORT_NUM][GPIO_PORT_WIDTH+1] = { - // Port 0 has these pin: - {PA_0, PA_1, PB_3, PB_4, - PB_6, PB_7, PC_1, PC_3, - PC_4, PC_5, PC_6, PC_7, - PC_8, PC_9, PD_1, PD_3, - PD_4, PD_5, PD_6, PD_7, - PD_9, PE_1, PE_2, PE_3, - PE_5, PE_6, PE_7, PE_8, - PG_3, PH_1, PH_3, PH_5, - 0xFF}, - - // Port 1 - {PA_2, PA_3, PA_4, PA_5, - PA_6, PA_7, PB_0, PB_1, - PB_2, PB_5, PC_0, PC_2, - PD_0, PD_2, PD_8, PE_0, - PE_4, PE_9, PE_A, PF_0, - PF_1, PF_2, PF_3, PF_4, - PF_5, PG_0, PG_1, PG_2, - PG_4, PG_5, PG_6, PG_7, - 0xFF}, - - // Port 2 - {PH_0, PH_2, PH_4, PH_6, - PH_7, PI_0, PI_1, PI_2, - PI_3, PI_4, PI_5, PI_6, - PI_7, PJ_0, PJ_1, PJ_2, - PJ_3, PJ_4, PJ_5, PJ_6, - PK_0, PK_1, PK_2, PK_3, - PK_4, PK_5, PK_6, - 0xFF} - -}; - -extern const uint8_t GPIO_SWPORT_DR_TBL[]; -extern const uint8_t GPIO_EXT_PORT_TBL[]; - -extern void HAL_GPIO_Init(HAL_GPIO_PIN *GPIO_Pin); -extern uint32_t HAL_GPIO_GetPinName(uint32_t chip_pin); - -// high nibble = port number (0=A, 1=B, 2=C, 3=D, 4=E, 5=F, ...) -// low nibble = pin number -PinName port_pin(PortName port, int pin_n) { - return (PinName)(pin_n + (port << 4)); -} - -void port_init(port_t *obj, PortName port, int mask, PinDirection dir) -{ - uint32_t i; - - if (port >= GPIO_PORT_NUM) { - DBG_GPIO_ERR("port_init: Invalid port num(%d), max port num is %d\r\n", \ - port, (GPIO_PORT_NUM-1)); - } - - // Fill PORT object structure for future use - obj->port = port; - obj->mask = mask; - obj->direction = dir; - - if (obj->pin_def == NULL) { - DBG_GPIO_ERR("Port Define Table isn't assigned\n"); - obj->pin_def = (uint8_t*)&Default_Port_PinDef[port][0]; - } - - i=0; - while (obj->pin_def[i] != 0xff) { - i++; - if (i == GPIO_PORT_WIDTH_MAX) { - break; - } - } - - obj->mask &= ((1<direction = dir; - for (i = 0; i < GPIO_PORT_WIDTH_MAX; i++) { // Process all pins - if (obj->pin_def[i] == 0xff) { - // end of table - break; - } - if (obj->mask & (1 << i)) { // If the pin is used - - GPIO_Pin.pin_name = HAL_GPIO_GetPinName(obj->pin_def[i]); // get the IP pin name - - if (dir == PIN_OUTPUT) { - GPIO_Pin.pin_mode = DOUT_PUSH_PULL; - } else { // PIN_INPUT - GPIO_Pin.pin_mode = DIN_PULL_NONE; - } - HAL_GPIO_Init(&GPIO_Pin); - } - } -} - -void port_mode(port_t *obj, PinMode mode) -{ - uint32_t i; - - for (i = 0; i < GPIO_PORT_WIDTH_MAX; i++) { // Process all pins - if (obj->pin_def[i] == 0xff) { - // end of table - break; - } - if (obj->mask & (1 << i)) { // If the pin is used - pin_mode(obj->pin_def[i], mode); - } - } -} - -void port_write(port_t *obj, int value) -{ - uint32_t i; - uint32_t pin_name; - uint8_t port_num; - uint8_t pin_num; - uint32_t hal_port[3]; - uint8_t port_changed[3]; - - for (i=0;i<3;i++) { - hal_port[i] = HAL_READ32(GPIO_REG_BASE, GPIO_SWPORT_DR_TBL[i]); - port_changed[i] = 0; - } - - for (i = 0; i < GPIO_PORT_WIDTH_MAX; i++) { // Process all pins - if (obj->pin_def[i] == 0xff) { - // end of table - break; - } - if (obj->mask & (1 << i)) { // If the pin is used - pin_name = HAL_GPIO_GetPinName(obj->pin_def[i]); // get the IP pin name - port_num = HAL_GPIO_GET_PORT_BY_NAME(pin_name); - pin_num = HAL_GPIO_GET_PIN_BY_NAME(pin_name); - hal_port[port_num] &= ~(1 << pin_num); - hal_port[port_num] |= (((value>>i) & 0x01)<< pin_num); - port_changed[port_num] = 1; - } - } - - for (i=0;i<3;i++) { - if (port_changed[i]) { - HAL_WRITE32(GPIO_REG_BASE, GPIO_SWPORT_DR_TBL[i], hal_port[i]); - } - } - -} - -int port_read(port_t *obj) -{ - int value=0; - uint32_t i; - uint32_t pin_name; - uint8_t port_num; - uint8_t pin_num; - uint32_t hal_port[3]; - - for (i=0;i<3;i++) { - hal_port[i] = HAL_READ32(GPIO_REG_BASE, GPIO_EXT_PORT_TBL[i]); - } - - for (i = 0; i < GPIO_PORT_WIDTH_MAX; i++) { // Process all pins - if (obj->pin_def[i] == 0xff) { - // end of table - break; - } - if (obj->mask & (1 << i)) { // If the pin is used - pin_name = HAL_GPIO_GetPinName(obj->pin_def[i]); // get the IP pin name - port_num = HAL_GPIO_GET_PORT_BY_NAME(pin_name); - pin_num = HAL_GPIO_GET_PIN_BY_NAME(pin_name); - if (hal_port[port_num] & (1< - -#if DEVICE_PWMOUT - -#ifdef CONFIG_PWM_EN -#include "pwmout_api.h" -#include "objects.h" - -extern uint32_t gTimerRecord; - -const PinMap PinMap_PWM[] = { - {PB_4, RTL_PIN_PERI(PWM0, 0, S0), RTL_PIN_FUNC(PWM0, S0)}, - {PB_5, RTL_PIN_PERI(PWM1, 1, S0), RTL_PIN_FUNC(PWM1, S0)}, - {PB_6, RTL_PIN_PERI(PWM2, 2, S0), RTL_PIN_FUNC(PWM2, S0)}, - {PB_7, RTL_PIN_PERI(PWM3, 3, S0), RTL_PIN_FUNC(PWM3, S0)}, - - {PC_0, RTL_PIN_PERI(PWM0, 0, S1), RTL_PIN_FUNC(PWM0, S1)}, - {PC_1, RTL_PIN_PERI(PWM1, 1, S1), RTL_PIN_FUNC(PWM1, S1)}, - {PC_2, RTL_PIN_PERI(PWM2, 2, S1), RTL_PIN_FUNC(PWM2, S1)}, - {PC_3, RTL_PIN_PERI(PWM3, 3, S1), RTL_PIN_FUNC(PWM3, S1)}, - - {PD_3, RTL_PIN_PERI(PWM0, 0, S2), RTL_PIN_FUNC(PWM0, S2)}, - {PD_4, RTL_PIN_PERI(PWM1, 1, S2), RTL_PIN_FUNC(PWM1, S2)}, - {PD_5, RTL_PIN_PERI(PWM2, 2, S2), RTL_PIN_FUNC(PWM2, S2)}, - {PD_6, RTL_PIN_PERI(PWM3, 3, S2), RTL_PIN_FUNC(PWM3, S2)}, - - {PE_0, RTL_PIN_PERI(PWM0, 0, S3), RTL_PIN_FUNC(PWM0, S3)}, - {PE_1, RTL_PIN_PERI(PWM1, 1, S3), RTL_PIN_FUNC(PWM1, S3)}, - {PE_2, RTL_PIN_PERI(PWM2, 2, S3), RTL_PIN_FUNC(PWM2, S3)}, - {PE_3, RTL_PIN_PERI(PWM3, 3, S3), RTL_PIN_FUNC(PWM3, S3)}, - - {NC, NC, 0} -}; - -extern void * rtl_memset(void * m , int c , size_t n); - -int pwmout_init(pwmout_t* obj, PinName pin) -{ - uint32_t peripheral; - uint32_t pwm_idx; - uint32_t pin_sel; - - DBG_PWM_INFO("%s: Init PWM for pin(0x%x)\n", __FUNCTION__, pin); - - // Get the peripheral name from the pin and assign it to the object - peripheral = pinmap_peripheral(pin, PinMap_PWM); - - if (unlikely(peripheral == NC)) { - DBG_PWM_ERR("%s: Cannot find matched pwm for this pin(0x%x)\n", __FUNCTION__, pin); - return -1; - } - - pwm_idx = RTL_GET_PERI_IDX(peripheral); - pin_sel = RTL_GET_PERI_SEL(peripheral); - - obj->pwm_idx = pwm_idx; - obj->pin_sel = pin_sel; - obj->period = 0; - obj->pulse = 0; - rtl_memset((void *)&obj->pwm_hal_adp, 0, sizeof(HAL_PWM_ADAPTER)); - if (HAL_OK != HAL_Pwm_Init(&obj->pwm_hal_adp, pwm_idx, pin_sel)) { - DBG_PWM_ERR("pwmout_init Err!\n"); - return -1; - } -// pwmout_period_us(obj, 20000); // 20 ms per default -// HAL_Pwm_Enable(&obj->pwm_hal_adp); - return 0; -} - -void pwmout_free(pwmout_t* obj) -{ - HAL_Pwm_Disable(&obj->pwm_hal_adp); - gTimerRecord &= ~(1 << obj->pwm_hal_adp.gtimer_id); -} - -void pwmout_period_us(pwmout_t* obj, uint32_t us) -{ - obj->period = us; - HAL_Pwm_SetDuty(&obj->pwm_hal_adp, us, obj->pulse); -} - -void pwmout_pulsewidth_us(pwmout_t* obj, uint32_t us) -{ - obj->pulse = us; - if(us > obj->period) obj->period = us; - HAL_Pwm_SetDuty(&obj->pwm_hal_adp, obj->period, us); -} - -#endif // #ifdef CONFIG_PWM_EN -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/rtc_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/rtc_api.c deleted file mode 100644 index 8c1ca18..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/rtc_api.c +++ /dev/null @@ -1,120 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2015, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - *******************************************************************************/ -#include "rtc_api.h" - -#if DEVICE_RTC -#include -#include "timer_api.h" // software-RTC: use a g-timer for the tick of the RTC - -#define SW_RTC_TIMER_ID TIMER4 - -static gtimer_t sw_rtc; -static struct tm rtc_timeinfo; -static int sw_rtc_en=0; - -const static uint8_t dim[14] = { - 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 28 }; - -static inline bool is_leap_year(unsigned int year) -{ - return (!(year % 4) && (year % 100)) || !(year % 400); -} - - -static uint8_t days_in_month (uint8_t month, uint8_t year) -{ - uint8_t ret = dim [ month - 1 ]; - if (ret == 0) - ret = is_leap_year (year) ? 29 : 28; - return ret; -} - -void sw_rtc_tick_handler(uint32_t id) -{ - if(++rtc_timeinfo.tm_sec > 59) { // Increment seconds, check for overflow - rtc_timeinfo.tm_sec = 0; // Reset seconds - if(++rtc_timeinfo.tm_min > 59) { // Increment minutes, check for overflow - rtc_timeinfo.tm_min = 0; // Reset minutes - if(++rtc_timeinfo.tm_hour > 23) { // Increment hours, check for overflow - rtc_timeinfo.tm_hour = 0; // Reset hours - ++rtc_timeinfo.tm_yday; // Increment day of year - if(++rtc_timeinfo.tm_wday > 6) // Increment day of week, check for overflow - rtc_timeinfo.tm_wday = 0; // Reset day of week - // Increment day of month, check for overflow - if(++rtc_timeinfo.tm_mday > - days_in_month(rtc_timeinfo.tm_mon, rtc_timeinfo.tm_year + 1900)) { - rtc_timeinfo.tm_mday = 1; // Reset day of month - if(++rtc_timeinfo.tm_mon > 11) { // Increment month, check for overflow - rtc_timeinfo.tm_mon = 0; // Reset month - rtc_timeinfo.tm_yday = 0; // Reset day of year - ++rtc_timeinfo.tm_year; // Increment year - } // - year - } // - month - } // - day - } // - hour - } -} - -void rtc_init(void) -{ - // Initial a periodical timer - gtimer_init(&sw_rtc, SW_RTC_TIMER_ID); - // Tick every 1 sec - gtimer_start_periodical(&sw_rtc, 1000000, (void*)sw_rtc_tick_handler, (uint32_t)&sw_rtc); - sw_rtc_en = 1; -} - -void rtc_free(void) -{ - sw_rtc_en = 0; - gtimer_stop(&sw_rtc); - gtimer_deinit(&sw_rtc); -} - -int rtc_isenabled(void) -{ - return(sw_rtc_en); -} - -time_t rtc_read(void) -{ - time_t t; - - // Convert to timestamp - t = mktime(&rtc_timeinfo); - - return t; -} - -void rtc_write(time_t t) -{ - // Convert the time in to a tm - struct tm *timeinfo = localtime(&t); - - if (timeinfo == NULL) { - // Error - return; - } - - gtimer_stop(&sw_rtc); - - // Set the RTC - rtc_timeinfo.tm_sec = timeinfo->tm_sec; - rtc_timeinfo.tm_min = timeinfo->tm_min; - rtc_timeinfo.tm_hour = timeinfo->tm_hour; - rtc_timeinfo.tm_mday = timeinfo->tm_mday; - rtc_timeinfo.tm_wday = timeinfo->tm_wday; - rtc_timeinfo.tm_yday = timeinfo->tm_yday; - rtc_timeinfo.tm_mon = timeinfo->tm_mon; - rtc_timeinfo.tm_year = timeinfo->tm_year; - - gtimer_start(&sw_rtc); -} - -#endif // endof "#if DEVICE_RTC" diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/serial_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/serial_api.c deleted file mode 100644 index 86d7986..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/serial_api.c +++ /dev/null @@ -1,800 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ - -#include "objects.h" -//#include "mbed_assert.h" -#include "serial_api.h" -#include "serial_ex_api.h" - -#if CONFIG_UART_EN - -//#include "cmsis.h" -#include "pinmap.h" -#include - -static const PinMap PinMap_UART_TX[] = { - {PC_3, RTL_PIN_PERI(UART0, 0, S0), RTL_PIN_FUNC(UART0, S0)}, - {PE_0, RTL_PIN_PERI(UART0, 0, S1), RTL_PIN_FUNC(UART0, S1)}, - {PA_7, RTL_PIN_PERI(UART0, 0, S2), RTL_PIN_FUNC(UART0, S2)}, // None RTL8710AF - {PD_3, RTL_PIN_PERI(UART1, 1, S0), RTL_PIN_FUNC(UART1, S0)}, // None RTL8710AF, RTL8711AM - {PE_4, RTL_PIN_PERI(UART1, 1, S1), RTL_PIN_FUNC(UART1, S1)}, - {PB_5, RTL_PIN_PERI(UART1, 1, S2), RTL_PIN_FUNC(UART1, S2)}, // None RTL8710AF, RTL8711AM - {PA_4, RTL_PIN_PERI(UART2, 2, S0), RTL_PIN_FUNC(UART2, S0)}, // None RTL8711AM - {PC_9, RTL_PIN_PERI(UART2, 2, S1), RTL_PIN_FUNC(UART2, S1)}, // None RTL8710AF, RTL8711AM - {PD_7, RTL_PIN_PERI(UART2, 2, S2), RTL_PIN_FUNC(UART2, S2)}, // None RTL8710AF, RTL8711AM - {NC, NC, 0} -}; - -static const PinMap PinMap_UART_RX[] = { - {PC_0, RTL_PIN_PERI(UART0, 0, S0), RTL_PIN_FUNC(UART0, S0)}, // No Interrupt Source? - {PE_3, RTL_PIN_PERI(UART0, 0, S1), RTL_PIN_FUNC(UART0, S1)}, - {PA_6, RTL_PIN_PERI(UART0, 0, S2), RTL_PIN_FUNC(UART0, S2)}, // None RTL8710AF, // No Interrupt Source? - {PD_0, RTL_PIN_PERI(UART1, 1, S0), RTL_PIN_FUNC(UART1, S0)}, // None RTL8710AF, RTL8711AM - {PE_7, RTL_PIN_PERI(UART1, 1, S1), RTL_PIN_FUNC(UART1, S1)}, // None RTL8710AF, RTL8711AM - {PB_4, RTL_PIN_PERI(UART1, 1, S2), RTL_PIN_FUNC(UART1, S2)}, // None RTL8710AF, RTL8711AM - {PA_0, RTL_PIN_PERI(UART2, 2, S0), RTL_PIN_FUNC(UART2, S0)}, // None RTL8711AM - {PC_6, RTL_PIN_PERI(UART2, 2, S1), RTL_PIN_FUNC(UART2, S1)}, // None RTL8710AF, RTL8711AM - {PD_4, RTL_PIN_PERI(UART2, 2, S2), RTL_PIN_FUNC(UART2, S2)}, // None RTL8710AF, RTL8711AM - {NC, NC, 0} -}; - -#define UART_NUM (3) -#define SERIAL_TX_IRQ_EN 0x01 -#define SERIAL_RX_IRQ_EN 0x02 -#define SERIAL_TX_DMA_EN 0x01 -#define SERIAL_RX_DMA_EN 0x02 - -static uint32_t serial_irq_ids[UART_NUM] = {0, 0, 0}; // , 0 - -static uart_irq_handler irq_handler[UART_NUM]; -static uint32_t serial_irq_en[UART_NUM] = {0, 0, 0}; // , 0 - -#ifdef CONFIG_GDMA_EN -static uint32_t serial_dma_en[UART_NUM] = {0, 0, 0}; // , 0 -static HAL_GDMA_OP UartGdmaOp; -#endif - -#ifdef CONFIG_MBED_ENABLED -int stdio_uart_inited = 0; -serial_t stdio_uart; -#endif - -static void SerialTxDoneCallBack(void *pAdapter); -static void SerialRxDoneCallBack(void *pAdapter); - -void serial_init(serial_t *obj, PinName tx, PinName rx) -{ - uint32_t uart_tx, uart_rx; - uint32_t uart_sel; - uint8_t uart_idx; - PHAL_RUART_OP pHalRuartOp; - PHAL_RUART_ADAPTER pHalRuartAdapter; -#ifdef CONFIG_GDMA_EN - PUART_DMA_CONFIG pHalRuartDmaCfg; - PHAL_GDMA_OP pHalGdmaOp=&UartGdmaOp; -#endif - - // Determine the UART to use (UART0, UART1, or UART3) - uart_tx = pinmap_peripheral(tx, PinMap_UART_TX); - uart_rx = pinmap_peripheral(rx, PinMap_UART_RX); - - uart_sel = pinmap_merge(uart_tx, uart_rx); - uart_idx = RTL_GET_PERI_IDX(uart_sel); - if (unlikely(uart_idx == (uint8_t)NC)) { - DBG_UART_ERR("%s: Cannot find matched UART\n", __FUNCTION__); - return; - } - - pHalRuartOp = &(obj->hal_uart_op); - pHalRuartAdapter = &(obj->hal_uart_adp); - - if ((NULL == pHalRuartOp) || (NULL == pHalRuartAdapter)) { - DBG_UART_ERR("%s: Allocate Adapter Failed\n", __FUNCTION__); - return; - } - - HalRuartOpInit((void*)pHalRuartOp); - -#ifdef CONFIG_GDMA_EN - HalGdmaOpInit((void*)pHalGdmaOp); - pHalRuartDmaCfg = &obj->uart_gdma_cfg; - pHalRuartDmaCfg->pHalGdmaOp = pHalGdmaOp; - pHalRuartDmaCfg->pTxHalGdmaAdapter = &obj->uart_gdma_adp_tx; - pHalRuartDmaCfg->pRxHalGdmaAdapter = &obj->uart_gdma_adp_rx; - pHalRuartDmaCfg->pTxDmaBlkList = &obj->gdma_multiblk_list_tx; - pHalRuartDmaCfg->pRxDmaBlkList = &obj->gdma_multiblk_list_rx; - _memset((void*)(pHalRuartDmaCfg->pTxHalGdmaAdapter), 0, sizeof(HAL_GDMA_ADAPTER)); - _memset((void*)(pHalRuartDmaCfg->pRxHalGdmaAdapter), 0, sizeof(HAL_GDMA_ADAPTER)); - _memset((void*)(pHalRuartDmaCfg->pTxDmaBlkList), 0, sizeof(UART_DMA_MULTIBLK)); - _memset((void*)(pHalRuartDmaCfg->pRxDmaBlkList), 0, sizeof(UART_DMA_MULTIBLK)); -#endif - - pHalRuartOp->HalRuartAdapterLoadDef(pHalRuartAdapter, uart_idx); - pHalRuartAdapter->PinmuxSelect = RTL_GET_PERI_SEL(uart_sel); - pHalRuartAdapter->BaudRate = 9600; - pHalRuartAdapter->IrqHandle.Priority = 6; - - // Configure the UART pins - // TODO: -// pinmap_pinout(tx, PinMap_UART_TX); -// pinmap_pinout(rx, PinMap_UART_RX); -// pin_mode(tx, PullUp); -// pin_mode(rx, PullUp); - - if (HalRuartInit(pHalRuartAdapter) != HAL_OK) { - DBG_UART_ERR("serial_init Err!\n"); - return; - } - pHalRuartOp->HalRuartRegIrq(pHalRuartAdapter); - pHalRuartOp->HalRuartIntEnable(pHalRuartAdapter); - -#ifdef CONFIG_MBED_ENABLED - // For stdio management - if (uart_idx == STDIO_UART) { - stdio_uart_inited = 1; - memcpy(&stdio_uart, obj, sizeof(serial_t)); - } -#endif -} - -void serial_free(serial_t *obj) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter; -#ifdef CONFIG_GDMA_EN - uint8_t uart_idx; - PUART_DMA_CONFIG pHalRuartDmaCfg; -#endif - - pHalRuartAdapter = &(obj->hal_uart_adp); - - HalRuartDeInit(pHalRuartAdapter); - -#ifdef CONFIG_GDMA_EN - uart_idx = pHalRuartAdapter->UartIndex; - pHalRuartDmaCfg = &obj->uart_gdma_cfg; - if (serial_dma_en[uart_idx] & SERIAL_RX_DMA_EN) { - HalRuartRxGdmaDeInit(pHalRuartDmaCfg); - serial_dma_en[uart_idx] &= ~SERIAL_RX_DMA_EN; - } - - if (serial_dma_en[uart_idx] & SERIAL_TX_DMA_EN) { - HalRuartTxGdmaDeInit(pHalRuartDmaCfg); - serial_dma_en[uart_idx] &= ~SERIAL_TX_DMA_EN; - } -#endif -} - -void serial_baud(serial_t *obj, int baudrate) { - PHAL_RUART_ADAPTER pHalRuartAdapter; - //PHAL_RUART_OP pHalRuartOp; - - pHalRuartAdapter = &(obj->hal_uart_adp); - //pHalRuartOp = &(obj->hal_uart_op); - - pHalRuartAdapter->BaudRate = baudrate; -// HalRuartInit(pHalRuartAdapter); - HalRuartSetBaudRate((void*)pHalRuartAdapter); -} - -void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter; - //PHAL_RUART_OP pHalRuartOp; - - pHalRuartAdapter = &(obj->hal_uart_adp); - //pHalRuartOp = &(obj->hal_uart_op); - - if (data_bits == 8) { - pHalRuartAdapter->WordLen = RUART_WLS_8BITS; - } else { - pHalRuartAdapter->WordLen = RUART_WLS_7BITS; - } - - - switch (parity) { - case ParityOdd: - case ParityForced0: - pHalRuartAdapter->Parity = RUART_PARITY_ENABLE; - pHalRuartAdapter->ParityType = RUART_ODD_PARITY; - break; - case ParityEven: - case ParityForced1: - pHalRuartAdapter->Parity = RUART_PARITY_ENABLE; - pHalRuartAdapter->ParityType = RUART_EVEN_PARITY; - break; - default: // ParityNone - pHalRuartAdapter->Parity = RUART_PARITY_DISABLE; - break; - } - - if (stop_bits == 2) { - pHalRuartAdapter->StopBit = RUART_STOP_BIT_2; - } else { - pHalRuartAdapter->StopBit = RUART_STOP_BIT_1; - } - - HalRuartInit(pHalRuartAdapter); -} - -/****************************************************************************** - * INTERRUPTS HANDLING - ******************************************************************************/ - -static void SerialTxDoneCallBack(void *pAdapter) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = pAdapter; - uint8_t uart_idx = pHalRuartAdapter->UartIndex; - - // Mask UART TX FIFO empty - pHalRuartAdapter->Interrupts &= ~RUART_IER_ETBEI; - HalRuartSetIMRRtl8195a (pHalRuartAdapter); - - if (irq_handler[uart_idx] != NULL) { - irq_handler[uart_idx](serial_irq_ids[uart_idx], TxIrq); - } -} - -static void SerialRxDoneCallBack(void *pAdapter) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = pAdapter; - uint8_t uart_idx = pHalRuartAdapter->UartIndex; - - if (irq_handler[uart_idx] != NULL) { - irq_handler[uart_idx](serial_irq_ids[uart_idx], RxIrq); - } -} - -void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter; -// PHAL_RUART_OP pHalRuartOp; - uint8_t uart_idx; - - pHalRuartAdapter = &(obj->hal_uart_adp); -// pHalRuartOp = &(obj->hal_uart_op); - - uart_idx = pHalRuartAdapter->UartIndex; - - irq_handler[uart_idx] = handler; - serial_irq_ids[uart_idx] = id; - - pHalRuartAdapter->TxTDCallback = SerialTxDoneCallBack; - pHalRuartAdapter->TxTDCbPara = (void*)pHalRuartAdapter; - pHalRuartAdapter->RxDRCallback = SerialRxDoneCallBack; - pHalRuartAdapter->RxDRCbPara = (void*)pHalRuartAdapter; - -// pHalRuartOp->HalRuartRegIrq(pHalRuartAdapter); -// pHalRuartOp->HalRuartIntEnable(pHalRuartAdapter); -} - - -void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter; - PHAL_RUART_OP pHalRuartOp; - uint8_t uart_idx; - - pHalRuartAdapter = &(obj->hal_uart_adp); - pHalRuartOp = &(obj->hal_uart_op); - uart_idx = pHalRuartAdapter->UartIndex; - - if (enable) { - if (irq == RxIrq) { - pHalRuartAdapter->Interrupts |= RUART_IER_ERBI | RUART_IER_ELSI; - serial_irq_en[uart_idx] |= SERIAL_RX_IRQ_EN; - HalRuartSetIMRRtl8195a (pHalRuartAdapter); - } - else { - serial_irq_en[uart_idx] |= SERIAL_TX_IRQ_EN; - } - pHalRuartOp->HalRuartRegIrq(pHalRuartAdapter); - pHalRuartOp->HalRuartIntEnable(pHalRuartAdapter); - } - else { // disable - if (irq == RxIrq) { - pHalRuartAdapter->Interrupts &= ~(RUART_IER_ERBI | RUART_IER_ELSI); - serial_irq_en[uart_idx] &= ~SERIAL_RX_IRQ_EN; - } - else { - pHalRuartAdapter->Interrupts &= ~RUART_IER_ETBEI; - serial_irq_en[uart_idx] &= ~SERIAL_TX_IRQ_EN; - } - HalRuartSetIMRRtl8195a (pHalRuartAdapter); - if (pHalRuartAdapter->Interrupts == 0) { - InterruptUnRegister(&pHalRuartAdapter->IrqHandle); - InterruptDis(&pHalRuartAdapter->IrqHandle); - } - } -} - -/****************************************************************************** - * READ/WRITE - ******************************************************************************/ - -int serial_getc(serial_t *obj) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - uint8_t uart_idx = pHalRuartAdapter->UartIndex; - - while (!serial_readable(obj)); - return (int)((HAL_RUART_READ32(uart_idx, RUART_REV_BUF_REG_OFF)) & 0xFF); -} - -void serial_putc(serial_t *obj, int c) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - uint8_t uart_idx = pHalRuartAdapter->UartIndex; - - while (!serial_writable(obj)); - HAL_RUART_WRITE32(uart_idx, RUART_TRAN_HOLD_REG_OFF, (c & 0xFF)); - - if (serial_irq_en[uart_idx] & SERIAL_TX_IRQ_EN) { - // UnMask TX FIFO empty IRQ - pHalRuartAdapter->Interrupts |= RUART_IER_ETBEI; - HalRuartSetIMRRtl8195a (pHalRuartAdapter); - } -} - -int serial_readable(serial_t *obj) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - uint8_t uart_idx = pHalRuartAdapter->UartIndex; - - if ((HAL_RUART_READ32(uart_idx, RUART_LINE_STATUS_REG_OFF)) & RUART_LINE_STATUS_REG_DR) { - return 1; - } - else { - return 0; - } -} - -int serial_writable(serial_t *obj) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - uint8_t uart_idx = pHalRuartAdapter->UartIndex; - - if (HAL_RUART_READ32(uart_idx, RUART_LINE_STATUS_REG_OFF) & - (RUART_LINE_STATUS_REG_THRE)) { - return 1; - } - else { - return 0; - } -} - -void serial_clear(serial_t *obj) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter; - - pHalRuartAdapter = &(obj->hal_uart_adp); - HalRuartResetTRxFifo((void *)pHalRuartAdapter); -} - -void serial_clear_tx(serial_t *obj) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter; - - pHalRuartAdapter = &(obj->hal_uart_adp); - HalRuartResetTxFifo((void *)pHalRuartAdapter); -} - -void serial_clear_rx(serial_t *obj) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter; - - pHalRuartAdapter = &(obj->hal_uart_adp); - HalRuartResetRxFifo((void *)pHalRuartAdapter); -} - -void serial_pinout_tx(PinName tx) -{ - pinmap_pinout(tx, PinMap_UART_TX); -} - -void serial_break_set(serial_t *obj) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - uint8_t uart_idx = pHalRuartAdapter->UartIndex; - uint32_t RegValue; - - RegValue = HAL_RUART_READ32(uart_idx, RUART_LINE_CTL_REG_OFF); - RegValue |= BIT_UART_LCR_BREAK_CTRL; - HAL_RUART_WRITE32(uart_idx, RUART_LINE_CTL_REG_OFF, RegValue); -} - -void serial_break_clear(serial_t *obj) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - uint8_t uart_idx = pHalRuartAdapter->UartIndex; - uint32_t RegValue; - - RegValue = HAL_RUART_READ32(uart_idx, RUART_LINE_CTL_REG_OFF); - RegValue &= ~(BIT_UART_LCR_BREAK_CTRL); - HAL_RUART_WRITE32(uart_idx, RUART_LINE_CTL_REG_OFF, RegValue); -} - -void serial_send_comp_handler(serial_t *obj, void *handler, uint32_t id) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter; - - pHalRuartAdapter = &(obj->hal_uart_adp); - pHalRuartAdapter->TxCompCallback = (void(*)(void*))handler; - pHalRuartAdapter->TxCompCbPara = (void*)id; -} - -void serial_recv_comp_handler(serial_t *obj, void *handler, uint32_t id) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter; - - pHalRuartAdapter = &(obj->hal_uart_adp); - pHalRuartAdapter->RxCompCallback = (void(*)(void*))handler; - pHalRuartAdapter->RxCompCbPara = (void*)id; -} - -void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, PinName txflow) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter; - - // Our UART cannot specify the RTS/CTS pin seprately, so the ignore the rxflow, txflow pin - // We just use the hardware auto flow control, so cannot do flow-control single direction only - pHalRuartAdapter = &(obj->hal_uart_adp); - - // RTS low active - // RTS_pin = autoflow_en ? (~rts | (RX_FIFO_Level_Trigger)) : ~rts - switch(type) { - case FlowControlRTSCTS: - pHalRuartAdapter->FlowControl = AUTOFLOW_ENABLE; - pHalRuartAdapter->RTSCtrl = 1; - break; - - case FlowControlRTS: // to indicate peer that it's ready for RX - // It seems cannot only enable RTS - pHalRuartAdapter->FlowControl = AUTOFLOW_ENABLE; - pHalRuartAdapter->RTSCtrl = 1; - break; - - case FlowControlCTS: // to check is the peer ready for RX: if can start TX ? - // need to check CTS before TX - pHalRuartAdapter->FlowControl = AUTOFLOW_ENABLE; - pHalRuartAdapter->RTSCtrl = 1; - break; - - case FlowControlNone: - default: - pHalRuartAdapter->FlowControl = AUTOFLOW_DISABLE; - pHalRuartAdapter->RTSCtrl = 1; // RTS pin allways Low, peer can send data - break; - - } - - HalRuartFlowCtrl((void *)pHalRuartAdapter); -} - -// Blocked(busy wait) receive, return received bytes count -int32_t serial_recv_blocked (serial_t *obj, char *prxbuf, uint32_t len, uint32_t timeout_ms) -{ - PHAL_RUART_OP pHalRuartOp; - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - int ret; - - pHalRuartOp = &(obj->hal_uart_op); - obj->rx_len = len; - HalRuartEnterCritical(pHalRuartAdapter); - ret = pHalRuartOp->HalRuartRecv(pHalRuartAdapter, (uint8_t*)prxbuf, len, timeout_ms); - HalRuartExitCritical(pHalRuartAdapter); - - return (ret); -} - -// Blocked(busy wait) send, return transmitted bytes count -int32_t serial_send_blocked (serial_t *obj, char *ptxbuf, uint32_t len, uint32_t timeout_ms) -{ - PHAL_RUART_OP pHalRuartOp; - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - int ret; - - pHalRuartOp = &(obj->hal_uart_op); - obj->tx_len = len; - ret = pHalRuartOp->HalRuartSend(pHalRuartAdapter, (uint8_t*)ptxbuf, len, timeout_ms); - return (ret); -} - -int32_t serial_recv_stream (serial_t *obj, char *prxbuf, uint32_t len) -{ - PHAL_RUART_OP pHalRuartOp; - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - int ret; - - pHalRuartOp = &(obj->hal_uart_op); - obj->rx_len = len; - ret = pHalRuartOp->HalRuartIntRecv(pHalRuartAdapter, (uint8_t*)prxbuf, len); - return (ret); -} - -int32_t serial_send_stream (serial_t *obj, char *ptxbuf, uint32_t len) -{ - PHAL_RUART_OP pHalRuartOp; - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - int ret; - - pHalRuartOp = &(obj->hal_uart_op); - obj->tx_len = len; - HalRuartEnterCritical(pHalRuartAdapter); - ret = pHalRuartOp->HalRuartIntSend(pHalRuartAdapter, (uint8_t*)ptxbuf, len); - HalRuartExitCritical(pHalRuartAdapter); - return (ret); -} - -#ifdef CONFIG_GDMA_EN - -int32_t serial_recv_stream_dma (serial_t *obj, char *prxbuf, uint32_t len) -{ -// PHAL_RUART_OP pHalRuartOp; - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - uint8_t uart_idx = pHalRuartAdapter->UartIndex; - int32_t ret; - -// pHalRuartOp = &(obj->hal_uart_op); - if ((serial_dma_en[uart_idx] & SERIAL_RX_DMA_EN)==0) { - PUART_DMA_CONFIG pHalRuartDmaCfg; - - pHalRuartDmaCfg = &obj->uart_gdma_cfg; - if (HAL_OK == HalRuartRxGdmaInit(pHalRuartAdapter, pHalRuartDmaCfg, 0)) { - serial_dma_en[uart_idx] |= SERIAL_RX_DMA_EN; - } - else { - return HAL_BUSY; - } - } - - obj->rx_len = len; - HalRuartEnterCritical(pHalRuartAdapter); - ret = HalRuartDmaRecv(pHalRuartAdapter, (uint8_t*)prxbuf, len); - HalRuartExitCritical(pHalRuartAdapter); - return (ret); -} - -int32_t serial_send_stream_dma (serial_t *obj, char *ptxbuf, uint32_t len) -{ -// PHAL_RUART_OP pHalRuartOp; - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - uint8_t uart_idx = pHalRuartAdapter->UartIndex; - int32_t ret; - -// pHalRuartOp = &(obj->hal_uart_op); - - if ((serial_dma_en[uart_idx] & SERIAL_TX_DMA_EN)==0) { - PUART_DMA_CONFIG pHalRuartDmaCfg; - - pHalRuartDmaCfg = &obj->uart_gdma_cfg; - if (HAL_OK == HalRuartTxGdmaInit(pHalRuartAdapter, pHalRuartDmaCfg, 0)) { - serial_dma_en[uart_idx] |= SERIAL_TX_DMA_EN; - } - else { - return HAL_BUSY; - } - } - obj->tx_len = len; - HalRuartEnterCritical(pHalRuartAdapter); - ret = HalRuartDmaSend(pHalRuartAdapter, (uint8_t*)ptxbuf, len); - HalRuartExitCritical(pHalRuartAdapter); - return (ret); -} - -int32_t serial_recv_stream_dma_timeout (serial_t *obj, char *prxbuf, uint32_t len, uint32_t timeout_ms, void *force_cs) -{ - PHAL_RUART_OP pHalRuartOp; - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - uint8_t uart_idx = pHalRuartAdapter->UartIndex; - uint32_t TimeoutCount=0, StartCount; - int ret; - void (*task_yield)(void); - - pHalRuartOp = &(obj->hal_uart_op); - if ((serial_dma_en[uart_idx] & SERIAL_RX_DMA_EN)==0) { - PUART_DMA_CONFIG pHalRuartDmaCfg; - - pHalRuartDmaCfg = &obj->uart_gdma_cfg; - if (HAL_OK == HalRuartRxGdmaInit(pHalRuartAdapter, pHalRuartDmaCfg, 0)) { - serial_dma_en[uart_idx] |= SERIAL_RX_DMA_EN; - } - else { - return HAL_BUSY; - } - } - HalRuartEnterCritical(pHalRuartAdapter); - ret = HalRuartDmaRecv(pHalRuartAdapter, (uint8_t*)prxbuf, len); - HalRuartExitCritical(pHalRuartAdapter); - - if ((ret == HAL_OK) && (timeout_ms > 0)) { - TimeoutCount = (timeout_ms*1000/TIMER_TICK_US); - StartCount = HalTimerOp.HalTimerReadCount(1); - task_yield = (void (*)(void))force_cs; - pHalRuartAdapter->Status = HAL_UART_STATUS_OK; - while (pHalRuartAdapter->State & HAL_UART_STATE_BUSY_RX) { - if (HAL_TIMEOUT == RuartIsTimeout(StartCount, TimeoutCount)) { - ret = pHalRuartOp->HalRuartStopRecv((void*)pHalRuartAdapter); - ret = pHalRuartOp->HalRuartResetRxFifo((void*)pHalRuartAdapter); - pHalRuartAdapter->Status = HAL_UART_STATUS_TIMEOUT; - break; - } - if (NULL != task_yield) { - task_yield(); - } - } - if (pHalRuartAdapter->Status == HAL_UART_STATUS_TIMEOUT) { - return (len - pHalRuartAdapter->RxCount); - } else { - return len; - } - } else { - return (-ret); - } -} - - -#endif // end of "#ifdef CONFIG_GDMA_EN" - -int32_t serial_send_stream_abort (serial_t *obj) -{ - PHAL_RUART_OP pHalRuartOp; - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - int ret; - - pHalRuartOp = &(obj->hal_uart_op); - - HalRuartEnterCritical(pHalRuartAdapter); - ret = pHalRuartOp->HalRuartStopSend((void*)pHalRuartAdapter); - HalRuartExitCritical(pHalRuartAdapter); - if (HAL_OK != ret) { - return -ret; - } - HalRuartResetTxFifo((void*)pHalRuartAdapter); - - ret = obj->tx_len - pHalRuartAdapter->TxCount; - - return (ret); -} - -int32_t serial_recv_stream_abort (serial_t *obj) -{ - PHAL_RUART_OP pHalRuartOp; - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - int ret; - - pHalRuartOp = &(obj->hal_uart_op); - - HalRuartEnterCritical(pHalRuartAdapter); - ret = pHalRuartOp->HalRuartStopRecv((void*)pHalRuartAdapter); - HalRuartExitCritical(pHalRuartAdapter); - if (HAL_OK != ret) { - return -ret; - } - -// pHalRuartOp->HalRuartResetRxFifo((void*)pHalRuartAdapter); - - ret = obj->rx_len - pHalRuartAdapter->RxCount; - return (ret); -} - -void serial_disable (serial_t *obj) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - - HalRuartDisable((void*)pHalRuartAdapter); -} - -void serial_enable (serial_t *obj) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - - HalRuartEnable((void*)pHalRuartAdapter); -} - -// return the byte count received before timeout, or error(<0) -int32_t serial_recv_stream_timeout (serial_t *obj, char *prxbuf, uint32_t len, uint32_t timeout_ms, void *force_cs) -{ - PHAL_RUART_OP pHalRuartOp; - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)&(obj->hal_uart_adp); - uint32_t TimeoutCount=0, StartCount; - int ret; - void (*task_yield)(void); - - task_yield = NULL; - pHalRuartOp = &(obj->hal_uart_op); - HalRuartEnterCritical(pHalRuartAdapter); - ret = pHalRuartOp->HalRuartIntRecv(pHalRuartAdapter, (uint8_t*)prxbuf, len); - HalRuartExitCritical(pHalRuartAdapter); - if ((ret == HAL_OK) && (timeout_ms > 0)) { - TimeoutCount = (timeout_ms*1000/TIMER_TICK_US); - StartCount = HalTimerOp.HalTimerReadCount(1); - task_yield = (void (*)(void))force_cs; - while (pHalRuartAdapter->State & HAL_UART_STATE_BUSY_RX) { - if (HAL_TIMEOUT == RuartIsTimeout(StartCount, TimeoutCount)) { - ret = pHalRuartOp->HalRuartStopRecv((void*)pHalRuartAdapter); - ret = pHalRuartOp->HalRuartResetRxFifo((void*)pHalRuartAdapter); - pHalRuartAdapter->Status = HAL_UART_STATUS_TIMEOUT; - break; - } - if (NULL != task_yield) { - task_yield(); - } - } - return (len - pHalRuartAdapter->RxCount); - } else { - return (-ret); - } -} - -// to hook lock/unlock function for multiple-thread application -void serial_hook_lock(serial_t *obj, void *lock, void *unlock, uint32_t id) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter; - - pHalRuartAdapter = &(obj->hal_uart_adp); - pHalRuartAdapter->EnterCritical = (void (*)(void))lock; - pHalRuartAdapter->ExitCritical = (void (*)(void))unlock; -} - -// to read Line-Status register -// Bit 0: RX Data Ready -// Bit 1: Overrun Error -// Bit 2: Parity Error -// Bit 3: Framing Error -// Bit 4: Break Interrupt (received data input is held in 0 state for a longer than a full word tx time) -// Bit 5: TX FIFO empty (THR empty) -// Bit 6: TX FIFO empty (THR & TSR both empty) -// Bit 7: RX Error (parity error, framing error or break indication) -uint8_t serial_raed_lsr(serial_t *obj) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter; - uint8_t RegValue; - - pHalRuartAdapter = &(obj->hal_uart_adp); - RegValue = HAL_RUART_READ8(pHalRuartAdapter->UartIndex, RUART_LINE_STATUS_REG_OFF); - return RegValue; -} - -// to read Modem-Status register -// Bit 0: DCTS, The CTS line has changed its state -// Bit 1: DDSR, The DSR line has changed its state -// Bit 2: TERI, RI line has changed its state from low to high state -// Bit 3: DDCD, DCD line has changed its state -// Bit 4: Complement of the CTS input -// Bit 5: Complement of the DSR input -// Bit 6: Complement of the RI input -// Bit 7: Complement of the DCD input -uint8_t serial_raed_msr(serial_t *obj) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter; - uint8_t RegValue; - - pHalRuartAdapter = &(obj->hal_uart_adp); - RegValue = HAL_RUART_READ8(pHalRuartAdapter->UartIndex, RUART_MODEM_STATUS_REG_OFF); - return RegValue; -} - -// to set the RX FIFO level to trigger RX interrupt/RTS de-assert -// FifoLv: -// 0: 1-Byte -// 1: 4-Byte -// 2: 8-Byte -// 3: 14-Byte -void serial_rx_fifo_level(serial_t *obj, SerialFifoLevel FifoLv) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter; - uint8_t RegValue; - - pHalRuartAdapter = &(obj->hal_uart_adp); - RegValue = (RUART_FIFO_CTL_REG_DMA_ENABLE | RUART_FIFO_CTL_REG_FIFO_ENABLE) | (((uint8_t)FifoLv&0x03) << 6); - HAL_RUART_WRITE8(pHalRuartAdapter->UartIndex, RUART_FIFO_CTL_REG_OFF, RegValue); -} - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/sleep.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/sleep.c deleted file mode 100644 index be27bd0..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/sleep.c +++ /dev/null @@ -1,290 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, STMicroelectronics - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ******************************************************************************* - */ -#include "sleep_ex_api.h" -#include "cmsis.h" - -extern void SleepCG(uint8_t Option, uint32_t SDuration, uint8_t ClkSourceEn, uint8_t SDREn); -extern void DeepStandby(uint8_t Option, uint32_t SDuration, uint8_t GpioOption); -extern void DeepSleep(uint8_t Option, uint32_t SDuration); - -SLEEP_WAKEUP_EVENT DStandbyWakeupEvent={0}; - -/** - * @brief To make the system entering the Clock Gated power saving. - * This function just make the system to enter the clock gated - * power saving mode and pending on wake up event waitting. - * The user application need to configure the peripheral to - * generate system wake up event, like GPIO interrupt - * , G-Timer timeout, etc. befor entering power saving mode. - * - * @param wakeup_event: A bit map of wake up event. Available event: - * SLEEP_WAKEUP_BY_STIMER - * SLEEP_WAKEUP_BY_GTIMER - * SLEEP_WAKEUP_BY_GPIO_INT - * SLEEP_WAKEUP_BY_WLAN - * SLEEP_WAKEUP_BY_NFC - * SLEEP_WAKEUP_BY_SDIO - * SLEEP_WAKEUP_BY_USB - * sleep_duration: the system sleep duration in ms, only valid - * for SLEEP_WAKEUP_BY_STIMER wake up event. - * - * @retval None - */ -void sleep_ex(uint32_t wakeup_event, uint32_t sleep_duration) -{ - uint8_t wake_ev=0; - - wake_ev = wakeup_event & 0xff; - - if (sleep_duration == 0) { - wake_ev &= ~SLP_STIMER; - } - - if (wake_ev == 0) { - // error: No wakeup event, skip the entering sleep mode - return; - } - SleepCG(wake_ev, sleep_duration, 0, 0); // same as old configuration: SCLK off & SDR no power off -} - - -/** - * @brief To make the system entering the Clock Gated power saving. - * This function just make the system to enter the clock gated - * power saving mode and pending on wake up event waitting. - * The user application need to configure the peripheral to - * generate system wake up event, like GPIO interrupt - * , G-Timer timeout, etc. befor entering power saving mode. - * - * @param wakeup_event: A bit map of wake up event. Available event: - * SLEEP_WAKEUP_BY_STIMER - * SLEEP_WAKEUP_BY_GTIMER - * SLEEP_WAKEUP_BY_GPIO_INT - * SLEEP_WAKEUP_BY_WLAN - * SLEEP_WAKEUP_BY_NFC - * SLEEP_WAKEUP_BY_SDIO - * SLEEP_WAKEUP_BY_USB - * sleep_duration: the system sleep duration in ms, only valid - * for SLEEP_WAKEUP_BY_STIMER wake up event. - * clk_sourec_enable: the option for SCLK on(1)/off(0) - * sdr_enable: the option for turn off the SDR controller (1:off, 0:on) - * - * @retval None - */ -void sleep_ex_selective(uint32_t wakeup_event, uint32_t sleep_duration, uint32_t clk_sourec_enable, uint32_t sdr_enable) -{ - uint8_t wake_ev=0; - uint8_t sdr_en=0; - uint8_t clk_source_en=0; - - wake_ev = wakeup_event & 0xff; - sdr_en = sdr_enable & 0xff; - clk_source_en = clk_sourec_enable & 0xff; - - if (sleep_duration == 0) { - wake_ev &= ~SLP_STIMER; - } - - if (wake_ev == 0) { - // error: No wakeup event, skip the entering sleep mode - return; - } - SleepCG(wake_ev, sleep_duration, clk_source_en, sdr_en); -} - - -/** - * @brief To add a wake up event to wake up the system from the - * deep standby power saving mode. - * - * @param wakeup_event: A bit map of wake up event. Available event: - * STANDBY_WAKEUP_BY_STIMER - * STANDBY_WAKEUP_BY_NFC - * STANDBY_WAKEUP_BY_PA5 (GPIO) - * STANDBY_WAKEUP_BY_PC7 (GPIO) - * STANDBY_WAKEUP_BY_PD5 (GPIO) - * STANDBY_WAKEUP_BY_PE3 (GPIO) - * sleep_duration_ms: the system sleep duration in ms, only valid - * for STANDBY_WAKEUP_BY_STIMER wake up event. - * gpio_active: for a GPIO pin to wake up the system by - * goes high(1) or low(0) - * - * @retval None - */ -void standby_wakeup_event_add(uint32_t wakeup_event, uint32_t sleep_duration_ms, uint32_t gpio_active) -{ - uint32_t i; - uint8_t gpio_event; - uint8_t gpio_en; - uint8_t gpio_act; - - if (wakeup_event & STANDBY_WAKEUP_BY_STIMER) { - DStandbyWakeupEvent.wakeup_event |= DSTBY_STIMER; - DStandbyWakeupEvent.timer_duration = sleep_duration_ms; - } - -#if 0 - if (wakeup_event & STANDBY_WAKEUP_BY_DS_TIMER) { - DStandbyWakeupEvent.wakeup_event |= DSTBY_TIMER33; - // TODO: Sleep Duration ? - } -#endif - - if (wakeup_event & STANDBY_WAKEUP_BY_NFC) { - DStandbyWakeupEvent.wakeup_event |= DSTBY_NFC; - } - - gpio_event = STANDBY_WAKEUP_BY_PA5; - gpio_en = BIT0; - gpio_act = BIT4; - // Loop 4 to check 4 GPIO wake up event - for (i=0;i<4;i++) { - if (wakeup_event & gpio_event) { - DStandbyWakeupEvent.wakeup_event |= DSTBY_GPIO; - DStandbyWakeupEvent.gpio_option |= gpio_en; - if (gpio_active) { - // Active High - DStandbyWakeupEvent.gpio_option |= gpio_act; - } - else { - // Active Low - DStandbyWakeupEvent.gpio_option &= ~gpio_act; - } - } - gpio_event = gpio_event << 1; - gpio_en = gpio_en << 1; - gpio_act = gpio_act << 1; - } -} - -/** - * @brief To delete a wake up event for wakeing up the system from the - * deep standby power saving mode. - * - * @param wakeup_event: A bit map of wake up event. Available event: - * STANDBY_WAKEUP_BY_STIMER - * STANDBY_WAKEUP_BY_NFC - * STANDBY_WAKEUP_BY_PA5 (GPIO) - * STANDBY_WAKEUP_BY_PC7 (GPIO) - * STANDBY_WAKEUP_BY_PD5 (GPIO) - * STANDBY_WAKEUP_BY_PE3 (GPIO) - * @retval None - */ -void standby_wakeup_event_del(uint32_t wakeup_event) -{ - if (wakeup_event & STANDBY_WAKEUP_BY_STIMER) { - DStandbyWakeupEvent.wakeup_event &= ~DSTBY_STIMER; - } - -#if 0 - if (wakeup_event & STANDBY_WAKEUP_BY_DS_TIMER) { - DStandbyWakeupEvent.wakeup_event &= ~DSTBY_TIMER33; - } -#endif - - if (wakeup_event & STANDBY_WAKEUP_BY_NFC) { - DStandbyWakeupEvent.wakeup_event &= ~DSTBY_NFC; - } - - if (wakeup_event & STANDBY_WAKEUP_BY_PA5) { - DStandbyWakeupEvent.gpio_option &= ~BIT0; - } - - if (wakeup_event & STANDBY_WAKEUP_BY_PC7) { - DStandbyWakeupEvent.gpio_option &= ~BIT1; - } - - if (wakeup_event & STANDBY_WAKEUP_BY_PD5) { - DStandbyWakeupEvent.gpio_option &= ~BIT2; - } - - if (wakeup_event & STANDBY_WAKEUP_BY_PE3) { - DStandbyWakeupEvent.gpio_option &= ~BIT3; - } - - if ((DStandbyWakeupEvent.gpio_option & 0x0f) == 0) { - // All GPIO wake up pin are disabled - DStandbyWakeupEvent.wakeup_event &= ~DSTBY_GPIO; - } -} - -/** - * @brief To make the system entering the Deep Standby power saving. - * The CPU, memory and part fo peripheral power is off when - * entering deep standby power saving mode. The program needs - * to be reload from the flash at system resume. - * - * @retval None - */ -void deepstandby_ex(void) -{ - if ((DStandbyWakeupEvent.wakeup_event & (DSTBY_STIMER|DSTBY_NFC|DSTBY_GPIO)) == 0) { - // error: no wakeup event was added, so skip the entering standby power saving - return; - } - - DeepStandby(DStandbyWakeupEvent.wakeup_event, - DStandbyWakeupEvent.timer_duration, DStandbyWakeupEvent.gpio_option); -} - -/** - * @brief To make the system entering the Deep Sleep power saving mode. - * The CPU, memory and peripheral power is off when entering - * deep sleep power saving mode. The program needs to be reload - * and all peripheral needs be re-configure when system resume. - * - * @param wakeup_event: A bit map of wake up event. Available event: - * DSLEEP_WAKEUP_BY_TIMER - * DSLEEP_WAKEUP_BY_GPIO - * sleep_duration: the system sleep duration in ms, only valid - * for DSLEEP_WAKEUP_BY_TIMER wake up event. - * - * @retval None - */ -void deepsleep_ex(uint32_t wakeup_event, uint32_t sleep_duration) -{ - uint8_t wake_ev=0; - - if ((wakeup_event & DSLEEP_WAKEUP_BY_TIMER) && (sleep_duration > 0)) { - // wake up by timeout - wake_ev |= DS_TIMER33; - } - - if (wakeup_event & DSLEEP_WAKEUP_BY_GPIO) { - // wake up by GPIO pin goes high - wake_ev |= DS_GPIO; - } - - if (wake_ev == 0) { - // error: No wake up event, skip entering deep sleep mode - return; - } - DeepSleep (wake_ev, sleep_duration); -} diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/spdio_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/spdio_api.c deleted file mode 100644 index a61e2be..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/spdio_api.c +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include "hal_sdio.h" - -#if 0 // - HalSdioRegisterTxCallback(spdio_rx_done_cb, (void *)obj); // ?????????? HalSdioRegisterRxDoneCallback(spdio_tx_done_cb, (void *)obj); // ????????? - -struct spdio_t *g_spdio_priv = NULL; - -int8_t spdio_rx_done_cb(void *padapter, uint8_t *data, uint16_t offset, uint16_t pktsize, uint8_t type){ - struct spdio_buf_t *buf = (struct spdio_buf_t *)data; - struct spdio_t *obj = (struct spdio_t *)padapter; - - if(obj) - return obj->rx_done_cb(obj, buf, (uint8_t *)(buf->buf_addr+offset), pktsize, type); - else - SPDIO_API_PRINTK("spdio rx done callback function is null!"); - return SUCCESS; -} - -int8_t spdio_tx_done_cb(void *padapter, uint8_t *data, uint16_t offset, uint16_t pktsize, uint8_t type){ - struct spdio_t *obj = (struct spdio_t *)padapter; - struct spdio_buf_t *buf = (struct spdio_buf_t *)data; - if(obj) - return obj->tx_done_cb(obj, buf); - else - SPDIO_API_PRINTK("spdio tx done callback function is null!"); - return SUCCESS; -} - - -int8_t spdio_tx(struct spdio_t *obj, struct spdio_buf_t *pbuf){ -extern int8_t HalSdioRxCallback(PHAL_SDIO_ADAPTER pSDIODev, void *pData, uint16_t Offset, uint16_t PktSize, uint8_t CmdType); - return HalSdioRxCallback((uint8_t *)pbuf, 0, pbuf->buf_size, pbuf->type); // ????????? -} - -void spdio_structinit(struct spdio_t *obj){ - obj->rx_bd_bufsz = SPDIO_RX_BUFSZ_ALIGN(2048+24); //extra 24 bytes for sdio header - obj->rx_bd_num = 24; - obj->tx_bd_num = 24; - obj->priv = NULL; - obj->rx_buf = NULL; - obj->rx_done_cb = NULL; - obj->tx_done_cb = NULL; -} - -///////// Add pvvx, no ... -void HalSdioRegisterRxCallback(char (*rx_done_cb)(void *priv, void* pbuf, uint8_t *pdata, uint16_t size, uint8_t type), void *obj) -{ - struct spdio_t * sp = (struct spdio_t *) obj; - sp->rx_done_cb = rx_done_cb; -} - -void HalSdioRegisterTxDoneCallback(char (*tx_done_cb)(void *priv, void* pbuf), void *obj) -{ - struct spdio_t * sp = (struct spdio_t *) obj; - sp->tx_done_cb = tx_done_cb; -} -/////// - -void spdio_init(struct spdio_t *obj) -{ - if(obj == NULL){ - SPDIO_API_PRINTK("spdio obj is NULL, spdio init failed!"); - return; - } - if((obj->rx_bd_num == 0) ||(obj->rx_bd_bufsz == 0) || (obj->rx_bd_bufsz%64) - ||(obj->tx_bd_num == 0) ||(obj->tx_bd_num%2)||(obj->rx_buf == NULL)) - { - SPDIO_API_PRINTK("spdio obj resource isn't correctly inited, spdio init failed!"); - return; - } - g_spdio_priv = obj; - HalSdioInit(); - HalSdioRegisterRxCallback(spdio_rx_done_cb, (void *)obj); // ?????????? - HalSdioRegisterTxDoneCallback(spdio_tx_done_cb, (void *)obj); // ????????? -} - -void spdio_deinit(struct spdio_t *obj) -{ - if(obj == NULL){ - SPDIO_API_PRINTK("spdio obj is NULL, spdio deinit failed"); - return; - } - HalSdioDeInit(); - g_spdio_priv = NULL; -} - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/spi_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/spi_api.c deleted file mode 100644 index 000cc3e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/spi_api.c +++ /dev/null @@ -1,971 +0,0 @@ - -#include "objects.h" -#include "spi_api.h" -#include "spi_ex_api.h" -#include "PinNames.h" -#include "pinmap.h" -#include "hal_ssi.h" - -extern uint32_t SystemGetCpuClk(void); -extern void HAL_GPIO_PullCtrl(uint32_t pin, uint32_t mode); - -void spi_tx_done_callback(void *obj); -void spi_rx_done_callback(void *obj); -void spi_bus_tx_done_callback(void *obj); - -#ifdef CONFIG_GDMA_EN -HAL_GDMA_OP SpiGdmaOp; -#endif - -uint8_t SPI0_IS_AS_SLAVE = 0; - -//TODO: Load default Setting: It should be loaded from external setting file. -extern const DW_SSI_DEFAULT_SETTING SpiDefaultSetting; - -static const PinMap PinMap_SSI_MOSI[] = { - {PE_2, RTL_PIN_PERI(SPI0, 0, S0), RTL_PIN_FUNC(SPI0, S0)}, - {PC_2, RTL_PIN_PERI(SPI0, 0, S1), RTL_PIN_FUNC(SPI0, S1)}, - {PA_1, RTL_PIN_PERI(SPI1, 1, S0), RTL_PIN_FUNC(SPI1, S0)}, - {PB_6, RTL_PIN_PERI(SPI1, 1, S1), RTL_PIN_FUNC(SPI1, S1)}, - {PD_6, RTL_PIN_PERI(SPI1, 1, S2), RTL_PIN_FUNC(SPI1, S2)}, - {PG_2, RTL_PIN_PERI(SPI2, 2, S0), RTL_PIN_FUNC(SPI2, S0)}, - {PE_6, RTL_PIN_PERI(SPI2, 2, S1), RTL_PIN_FUNC(SPI2, S1)}, - {PD_2, RTL_PIN_PERI(SPI2, 2, S2), RTL_PIN_FUNC(SPI2, S2)}, - {NC, NC, 0} -}; - -static const PinMap PinMap_SSI_MISO[] = { - {PE_3, RTL_PIN_PERI(SPI0, 0, S0), RTL_PIN_FUNC(SPI0, S0)}, - {PC_3, RTL_PIN_PERI(SPI0, 0, S1), RTL_PIN_FUNC(SPI0, S1)}, - {PA_0, RTL_PIN_PERI(SPI1, 1, S0), RTL_PIN_FUNC(SPI1, S0)}, - {PB_7, RTL_PIN_PERI(SPI1, 1, S1), RTL_PIN_FUNC(SPI1, S1)}, - {PD_7, RTL_PIN_PERI(SPI1, 1, S2), RTL_PIN_FUNC(SPI1, S2)}, - {PG_3, RTL_PIN_PERI(SPI2, 2, S0), RTL_PIN_FUNC(SPI2, S0)}, - {PE_7, RTL_PIN_PERI(SPI2, 2, S1), RTL_PIN_FUNC(SPI2, S1)}, - {PD_3, RTL_PIN_PERI(SPI2, 2, S2), RTL_PIN_FUNC(SPI2, S2)}, - {NC, NC, 0} -}; - - -void spi_init (spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) -{ - SSI_DBG_ENTRANCE("spi_init()\n"); - - uint32_t ssi_mosi, ssi_miso, ssi_peri; - uint8_t ssi_idx, ssi_pinmux; - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - - _memset((void*)obj, 0, sizeof(spi_t)); - obj->state = 0; -// uint32_t SystemClock = SystemGetCpuClk(); -// uint32_t MaxSsiFreq = (SystemClock >> 2) >> 1; - - /* SsiClockDivider doesn't support odd number */ - - DBG_SSI_INFO("SystemClock: %d\n", SystemGetCpuClk()); - DBG_SSI_INFO("MaxSsiFreq : %d\n", (SystemGetCpuClk() >> 2) >> 1); - - ssi_mosi = pinmap_peripheral(mosi, PinMap_SSI_MOSI); - ssi_miso = pinmap_peripheral(miso, PinMap_SSI_MISO); - //DBG_SSI_INFO("ssi_mosi: %d, ssi_miso: %d\n", ssi_mosi, ssi_miso); - - ssi_peri = pinmap_merge(ssi_mosi, ssi_miso); - if (unlikely(ssi_peri == NC)) { - DBG_SSI_ERR("spi_init(): Cannot find matched SSI index.\n"); - return; - } - obj->sclk = (uint8_t)sclk; - ssi_idx = RTL_GET_PERI_IDX(ssi_peri); - ssi_pinmux = RTL_GET_PERI_SEL(ssi_peri); - DBG_SSI_INFO("ssi_peri: %d, ssi_idx: %d, ssi_pinmux: %d\n", ssi_peri, ssi_idx, ssi_pinmux); - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - pHalSsiAdaptor->Index = ssi_idx; - pHalSsiAdaptor->PinmuxSelect = ssi_pinmux; - -#if 0 - // XXX: Only for test - if ((ssi_idx == 0) && (SPI0_IS_AS_SLAVE == 1)) { - //DBG_SSI_INFO("SSI%d will be as slave. (spi0_is_slave: %d)\n", index, spi0_is_slave); - pHalSsiAdaptor->Role = SSI_SLAVE; - } - else -#endif - { - //DBG_SSI_INFO("SSI%d will be as master. (spi0_is_slave: %d)\n", index, spi0_is_slave); - pHalSsiAdaptor->Role = SSI_MASTER; - } - - HalSsiOpInit((void*)pHalSsiOp); - - pHalSsiOp->HalSsiSetDeviceRole(pHalSsiAdaptor, pHalSsiAdaptor->Role); - - /* Pinmux workaround */ - if ((ssi_idx == 0) && (ssi_pinmux == SSI0_MUX_TO_GPIOC)) - { - EEPROM_PIN_CTRL(OFF); - } - - if ((ssi_idx == 0) && (ssi_pinmux == SSI0_MUX_TO_GPIOE)) - { - DBG_SSI_WARN(ANSI_COLOR_MAGENTA"SPI0 Pin may conflict with JTAG\r\n"ANSI_COLOR_RESET); - } - - - //pHalSsiOp->HalSsiPinmuxEnable(pHalSsiAdaptor); - - - //TODO: Implement default setting structure. - pHalSsiOp->HalSsiLoadSetting(pHalSsiAdaptor, (void*)&SpiDefaultSetting); - pHalSsiAdaptor->DefaultRxThresholdLevel = SpiDefaultSetting.RxThresholdLevel; - - //pHalSsiOp->HalSsiInit(pHalSsiAdaptor); - if(HalSsiInit(pHalSsiAdaptor) != HAL_OK) - { - DBG_SSI_ERR(ANSI_COLOR_RED"spi_init(): SPI %x init fails.\n"ANSI_COLOR_RESET,pHalSsiAdaptor->Index); - return; - } - - pHalSsiAdaptor->TxCompCallback = spi_tx_done_callback; - pHalSsiAdaptor->TxCompCbPara = (void*)obj; - pHalSsiAdaptor->RxCompCallback = spi_rx_done_callback; - pHalSsiAdaptor->RxCompCbPara = (void*)obj; - pHalSsiAdaptor->TxIdleCallback = spi_bus_tx_done_callback; - pHalSsiAdaptor->TxIdleCbPara = (void*)obj; - -#ifdef CONFIG_GDMA_EN - HalGdmaOpInit((void*)&SpiGdmaOp); - pHalSsiAdaptor->DmaConfig.pHalGdmaOp = &SpiGdmaOp; - pHalSsiAdaptor->DmaConfig.pRxHalGdmaAdapter = &obj->spi_gdma_adp_rx; - pHalSsiAdaptor->DmaConfig.pTxHalGdmaAdapter = &obj->spi_gdma_adp_tx; - obj->dma_en = 0; - pHalSsiAdaptor->HaveTxChannel = 0; - pHalSsiAdaptor->HaveRxChannel = 0; -#endif -} - -void spi_free (spi_t *obj) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - //PHAL_SSI_OP pHalSsiOp; - - - pHalSsiAdaptor = &obj->spi_adp; - //pHalSsiOp = &obj->spi_op; - - //pHalSsiOp->HalSsiInterruptDisable(pHalSsiAdaptor); - //pHalSsiOp->HalSsiDisable(pHalSsiAdaptor); - //pHalSsiOp->HalSsiPinmuxDisable(pHalSsiAdaptor); - HalSsiDeInit(pHalSsiAdaptor); - - SPI0_MULTI_CS_CTRL(OFF); - -#ifdef CONFIG_GDMA_EN - if (obj->dma_en & SPI_DMA_RX_EN) { - HalSsiRxGdmaDeInit(pHalSsiAdaptor); - } - - if (obj->dma_en & SPI_DMA_TX_EN) { - HalSsiTxGdmaDeInit(pHalSsiAdaptor); - } - obj->dma_en = 0; -#endif -} - -void spi_format (spi_t *obj, int bits, int mode, int slave) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - pHalSsiAdaptor->DataFrameSize = (bits - 1); - - /* - * mode | POL PHA - * -----+-------- - * 0 | 0 0 - * 1 | 0 1 - * 2 | 1 0 - * 3 | 1 1 - * - * SCPOL_INACTIVE_IS_LOW = 0, - * SCPOL_INACTIVE_IS_HIGH = 1 - * - * SCPH_TOGGLES_IN_MIDDLE = 0, - * SCPH_TOGGLES_AT_START = 1 - */ - switch (mode) - { - case 0: - pHalSsiAdaptor->SclkPolarity = SCPOL_INACTIVE_IS_LOW; - pHalSsiAdaptor->SclkPhase = SCPH_TOGGLES_IN_MIDDLE; - break; - case 1: - pHalSsiAdaptor->SclkPolarity = SCPOL_INACTIVE_IS_LOW; - pHalSsiAdaptor->SclkPhase = SCPH_TOGGLES_AT_START; - break; - case 2: - pHalSsiAdaptor->SclkPolarity = SCPOL_INACTIVE_IS_HIGH; - pHalSsiAdaptor->SclkPhase = SCPH_TOGGLES_IN_MIDDLE; - break; - case 3: - pHalSsiAdaptor->SclkPolarity = SCPOL_INACTIVE_IS_HIGH; - pHalSsiAdaptor->SclkPhase = SCPH_TOGGLES_AT_START; - break; - default: // same as 3 - pHalSsiAdaptor->SclkPolarity = SCPOL_INACTIVE_IS_HIGH; - pHalSsiAdaptor->SclkPhase = SCPH_TOGGLES_AT_START; - break; - } - - if (slave == 1) { - if (pHalSsiAdaptor->Index == 0) { - pHalSsiAdaptor->Role = SSI_SLAVE; - pHalSsiAdaptor->SlaveOutputEnable = SLV_TXD_ENABLE; // <-- Slave only - SPI0_IS_AS_SLAVE = 1; - DBG_SSI_INFO("SPI0 is as slave\n"); - } - else { - DBG_SSI_ERR("The SPI%d cannot work as Slave mode, only SPI0 does.\r\n", pHalSsiAdaptor->Index); - pHalSsiAdaptor->Role = SSI_MASTER; - } - } - else { - pHalSsiAdaptor->Role = SSI_MASTER; - } - pHalSsiOp->HalSsiSetDeviceRole(pHalSsiAdaptor, pHalSsiAdaptor->Role); - -#ifdef CONFIG_GPIO_EN - if (pHalSsiAdaptor->Role == SSI_SLAVE) { - if (pHalSsiAdaptor->SclkPolarity == SCPOL_INACTIVE_IS_LOW) { - HAL_GPIO_PullCtrl((uint32_t)obj->sclk, hal_PullDown); - } - else { - HAL_GPIO_PullCtrl((uint32_t)obj->sclk, hal_PullUp); - } - } -#endif - HalSsiSetFormat(pHalSsiAdaptor); -} - -void spi_frequency (spi_t *obj, int hz) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - - pHalSsiAdaptor = &obj->spi_adp; - HalSsiSetSclk(pHalSsiAdaptor, (uint32_t)hz); -} - -void spi_slave_select(spi_t *obj, ChipSelect slaveindex) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - uint8_t Index; - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - Index = pHalSsiAdaptor->Index; - - if((pHalSsiAdaptor->Role == SSI_MASTER) && (Index == 0)){ - pHalSsiOp->HalSsiSetSlaveEnableRegister((void*)pHalSsiAdaptor,slaveindex); - if(slaveindex != CS_0){ - SPI0_MULTI_CS_CTRL(ON); - } - } - else{ - DBG_SSI_ERR("Only SPI 0 master mode supports slave selection.\n"); - } -} - - -void spi_slave_select_bypin(spi_t *obj, PinName pinname) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - uint8_t Index; - uint8_t slaveindex = 8; - uint8_t pinmux; - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - Index = pHalSsiAdaptor->Index; - pinmux = pHalSsiAdaptor->PinmuxSelect; - - if((pHalSsiAdaptor->Role == SSI_MASTER) && (Index == 0)){ - if(pinmux == S0){ - switch (pinname){ - case PE_0: - slaveindex = CS_0; - break; - case PE_4: - slaveindex = CS_1; - break; - case PE_5: - slaveindex = CS_2; - break; - case PE_6: - slaveindex = CS_3; - break; - case PE_7: - slaveindex = CS_4; - break; - case PE_8: - slaveindex = CS_5; - break; - case PE_9: - slaveindex = CS_6; - break; - case PE_A: - slaveindex = CS_7; - break; - default: - slaveindex = 8; - } - } - - if(pinmux == S1){ - switch (pinname){ - case PC_0: - slaveindex = CS_0; - break; - case PC_4: - slaveindex = CS_1; - break; - case PC_5: - slaveindex = CS_2; - break; - case PC_6: - slaveindex = CS_3; - break; - case PC_7: - slaveindex = CS_4; - break; - case PC_8: - slaveindex = CS_5; - break; - case PC_9: - slaveindex = CS_6; - break; - default: - slaveindex = 8; - } - } - - if(slaveindex != 8){ - pHalSsiOp->HalSsiSetSlaveEnableRegister((void*)pHalSsiAdaptor,slaveindex); - if(slaveindex != CS_0){ - SPI0_MULTI_CS_CTRL(ON); - } - } - else - DBG_SSI_ERR("Wrong Chip Select Pin.\n"); - - } - else{ - DBG_SSI_ERR("Only SPI 0 master mode supports slave selection.\n"); - } -} - - -static inline void ssi_write (spi_t *obj, int value) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - while (!pHalSsiOp->HalSsiWriteable(pHalSsiAdaptor)); - pHalSsiOp->HalSsiWrite((void*)pHalSsiAdaptor, value); -} - -static inline int ssi_read(spi_t *obj) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - while (!pHalSsiOp->HalSsiReadable(pHalSsiAdaptor)); - return (int)pHalSsiOp->HalSsiRead(pHalSsiAdaptor); -} - -int spi_master_write (spi_t *obj, int value) -{ - ssi_write(obj, value); - return ssi_read(obj); -} - -int spi_slave_receive (spi_t *obj) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - int Readable; - int Busy; - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - Readable = pHalSsiOp->HalSsiReadable(pHalSsiAdaptor); - Busy = (int)pHalSsiOp->HalSsiBusy(pHalSsiAdaptor); - return ((Readable && !Busy) ? 1 : 0); -} - -int spi_slave_read (spi_t *obj) -{ - return ssi_read(obj); -} - -void spi_slave_write (spi_t *obj, int value) -{ - ssi_write(obj, value); -} - -int spi_busy (spi_t *obj) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - return (int)pHalSsiOp->HalSsiBusy(pHalSsiAdaptor); -} - -void spi_flush_rx_fifo (spi_t *obj) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - uint32_t rx_fifo_level; - uint32_t i; - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - while(pHalSsiOp->HalSsiReadable(pHalSsiAdaptor)){ - rx_fifo_level = pHalSsiOp->HalSsiGetRxFifoLevel(pHalSsiAdaptor); - for(i=0;iHalSsiRead(pHalSsiAdaptor); - } - } -} - -// Slave mode read a sequence of data by interrupt mode -int32_t spi_slave_read_stream(spi_t *obj, char *rx_buffer, uint32_t length) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - int32_t ret; - - if (obj->state & SPI_STATE_RX_BUSY) { - DBG_SSI_WARN("spi_slave_read_stream: state(0x%x) is not ready\r\n", - obj->state); - return HAL_BUSY; - } - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - //DBG_SSI_INFO("rx_buffer addr: %X, length: %d\n", rx_buffer, length); - obj->state |= SPI_STATE_RX_BUSY; - if ((ret=pHalSsiOp->HalSsiReadInterrupt(pHalSsiAdaptor, rx_buffer, length)) != HAL_OK) { - obj->state &= ~SPI_STATE_RX_BUSY; - } - - return ret; -} - -// Slave mode write a sequence of data by interrupt mode -int32_t spi_slave_write_stream(spi_t *obj, char *tx_buffer, uint32_t length) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - int32_t ret; - - if (obj->state & SPI_STATE_TX_BUSY) { - DBG_SSI_WARN("spi_slave_write_stream: state(0x%x) is not ready\r\n", - obj->state); - return HAL_BUSY; - } - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - obj->state |= SPI_STATE_TX_BUSY; - if ((ret=pHalSsiOp->HalSsiWriteInterrupt(pHalSsiAdaptor, (uint8_t *) tx_buffer, length)) != HAL_OK) { - obj->state &= ~SPI_STATE_TX_BUSY; - } - return ret; -} - -// Master mode read a sequence of data by interrupt mode -// The length unit is byte, for both 16-bits and 8-bits mode -int32_t spi_master_read_stream(spi_t *obj, char *rx_buffer, uint32_t length) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - int32_t ret; - - if (obj->state & SPI_STATE_RX_BUSY) { - DBG_SSI_WARN("spi_master_read_stream: state(0x%x) is not ready\r\n", - obj->state); - return HAL_BUSY; - } - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - // wait bus idle - while(pHalSsiOp->HalSsiBusy(pHalSsiAdaptor)); - - obj->state |= SPI_STATE_RX_BUSY; - if ((ret=pHalSsiOp->HalSsiReadInterrupt(pHalSsiAdaptor, rx_buffer, length)) == HAL_OK) { - /* as Master mode, it need to push data to TX FIFO to generate clock out - then the slave can transmit data out */ - // send some dummy data out - if ((ret=pHalSsiOp->HalSsiWriteInterrupt(pHalSsiAdaptor, NULL, length)) != HAL_OK) { - obj->state &= ~SPI_STATE_RX_BUSY; - } - } - else { - obj->state &= ~SPI_STATE_RX_BUSY; - } - - return ret; -} - -// Master mode write a sequence of data by interrupt mode -// The length unit is byte, for both 16-bits and 8-bits mode -int32_t spi_master_write_stream(spi_t *obj, char *tx_buffer, uint32_t length) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - int32_t ret; - - if (obj->state & SPI_STATE_TX_BUSY) { - DBG_SSI_WARN("spi_master_write_stream: state(0x%x) is not ready\r\n", - obj->state); - return HAL_BUSY; - } - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - obj->state |= SPI_STATE_TX_BUSY; - /* as Master mode, sending data will receive data at sametime, so we need to - drop those received dummy data */ - if ((ret=pHalSsiOp->HalSsiWriteInterrupt(pHalSsiAdaptor, (uint8_t *) tx_buffer, length)) != HAL_OK) { - obj->state &= ~SPI_STATE_TX_BUSY; - } - return ret; -} - -// Master mode write a sequence of data by interrupt mode -// The length unit is byte, for both 16-bits and 8-bits mode -int32_t spi_master_write_read_stream(spi_t *obj, char *tx_buffer, - char *rx_buffer, uint32_t length) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - int32_t ret; - - if (obj->state & (SPI_STATE_RX_BUSY|SPI_STATE_TX_BUSY)) { - DBG_SSI_WARN("spi_master_write_and_read_stream: state(0x%x) is not ready\r\n", - obj->state); - return HAL_BUSY; - } - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - // wait bus idle - while(pHalSsiOp->HalSsiBusy(pHalSsiAdaptor)); - - obj->state |= SPI_STATE_RX_BUSY; - /* as Master mode, sending data will receive data at sametime */ - if ((ret=pHalSsiOp->HalSsiReadInterrupt(pHalSsiAdaptor, rx_buffer, length)) == HAL_OK) { - obj->state |= SPI_STATE_TX_BUSY; - if ((ret=pHalSsiOp->HalSsiWriteInterrupt(pHalSsiAdaptor, (uint8_t *) tx_buffer, length)) != HAL_OK) { - obj->state &= ~(SPI_STATE_RX_BUSY|SPI_STATE_TX_BUSY); - // Disable RX IRQ - pHalSsiAdaptor->InterruptMask &= ~(BIT_IMR_RXFIM | BIT_IMR_RXOIM | BIT_IMR_RXUIM); - pHalSsiOp->HalSsiSetInterruptMask((void*)pHalSsiAdaptor); - } - } - else { - obj->state &= ~(SPI_STATE_RX_BUSY); - } - - return ret; -} - -int32_t spi_slave_read_stream_timeout(spi_t *obj, char *rx_buffer, uint32_t length, uint32_t timeout_ms) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - int ret,timeout = 0; - uint32_t StartCount, TimeoutCount = 0; - - if (obj->state & SPI_STATE_RX_BUSY) { - DBG_SSI_WARN("spi_slave_read_stream: state(0x%x) is not ready\r\n", - obj->state); - return HAL_BUSY; - } - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - obj->state |= SPI_STATE_RX_BUSY; - HalSsiEnterCritical(pHalSsiAdaptor); - if ((ret=pHalSsiOp->HalSsiReadInterrupt(pHalSsiAdaptor, rx_buffer, length)) != HAL_OK) { - obj->state &= ~SPI_STATE_RX_BUSY; - } - HalSsiExitCritical(pHalSsiAdaptor); - - if ((ret == HAL_OK) && (timeout_ms > 0)) { - TimeoutCount = (timeout_ms*1000/TIMER_TICK_US); - StartCount = HalTimerOp.HalTimerReadCount(1); - while (obj->state & SPI_STATE_RX_BUSY) { - if (HAL_TIMEOUT == HalSsiTimeout(StartCount, TimeoutCount)) { - ret = HalSsiStopRecv(pHalSsiAdaptor); - obj->state &= ~ SPI_STATE_RX_BUSY; - timeout = 1; - DBG_SSI_INFO("Slave is timeout\n"); - break; - } - } - if ((pHalSsiAdaptor->DataFrameSize + 1) > 8){ - pHalSsiAdaptor->RxLength <<= 1; - } - - if(timeout) - return (length - pHalSsiAdaptor->RxLength); - else - return length; - } - else { - return (-ret); - } -} - -// Bus Idle: Real TX done, TX FIFO empty and bus shift all data out already -void spi_bus_tx_done_callback(void *obj) -{ - spi_t *spi_obj = (spi_t *)obj; - spi_irq_handler handler; - - if (spi_obj->bus_tx_done_handler) { - handler = (spi_irq_handler)spi_obj->bus_tx_done_handler; - handler(spi_obj->bus_tx_done_irq_id, 0); - } -} - -void spi_tx_done_callback(void *obj) -{ - spi_t *spi_obj = (spi_t *)obj; - spi_irq_handler handler; - - if (spi_obj->state & SPI_STATE_TX_BUSY) { - spi_obj->state &= ~SPI_STATE_TX_BUSY; - if (spi_obj->irq_handler) { - handler = (spi_irq_handler)spi_obj->irq_handler; - handler(spi_obj->irq_id, SpiTxIrq); - } - } -} - -void spi_rx_done_callback(void *obj) -{ - spi_t *spi_obj = (spi_t *)obj; - spi_irq_handler handler; - - spi_obj->state &= ~SPI_STATE_RX_BUSY; - if (spi_obj->irq_handler) { - handler = (spi_irq_handler)spi_obj->irq_handler; - handler(spi_obj->irq_id, SpiRxIrq); - } -} - -void spi_irq_hook(spi_t *obj, spi_irq_handler handler, uint32_t id) -{ - obj->irq_handler = (uint32_t)handler; - obj->irq_id = (uint32_t)id; -} - -void spi_bus_tx_done_irq_hook(spi_t *obj, spi_irq_handler handler, uint32_t id) -{ - obj->bus_tx_done_handler = (uint32_t)handler; - obj->bus_tx_done_irq_id = (uint32_t)id; -} - -void spi_enable(spi_t *obj) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter; - pHalSsiAdapter = &obj->spi_adp; - - HalSsiEnable((void*)pHalSsiAdapter); -} - -void spi_disable(spi_t *obj) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter; - pHalSsiAdapter = &obj->spi_adp; - - HalSsiDisable((void*)pHalSsiAdapter); - -} -#ifdef CONFIG_GDMA_EN -int32_t spi_slave_read_stream_dma(spi_t *obj, char *rx_buffer, uint32_t length) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - int32_t ret; - - if (obj->state & SPI_STATE_RX_BUSY) { - DBG_SSI_WARN("spi_slave_read_stream_dma: state(0x%x) is not ready\r\n", - obj->state); - return HAL_BUSY; - } - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - if ((obj->dma_en & SPI_DMA_RX_EN)==0) { - if (HAL_OK == HalSsiRxGdmaInit(pHalSsiOp, pHalSsiAdaptor)) { - obj->dma_en |= SPI_DMA_RX_EN; - } - else { - return HAL_BUSY; - } - } - - obj->state |= SPI_STATE_RX_BUSY; - ret = HalSsiDmaRecv(pHalSsiAdaptor, (uint8_t *) rx_buffer, length); - if (ret != HAL_OK) { - obj->state &= ~SPI_STATE_RX_BUSY; - } - return (ret); -} - -int32_t spi_slave_write_stream_dma(spi_t *obj, char *tx_buffer, uint32_t length) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - int32_t ret; - - if (obj->state & SPI_STATE_TX_BUSY) { - DBG_SSI_WARN("spi_slave_write_stream_dma: state(0x%x) is not ready\r\n", - obj->state); - return HAL_BUSY; - } - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - if ((obj->dma_en & SPI_DMA_TX_EN)==0) { - if (HAL_OK == HalSsiTxGdmaInit(pHalSsiOp, pHalSsiAdaptor)) { - obj->dma_en |= SPI_DMA_TX_EN; - } - else { - return HAL_BUSY; - } - } - obj->state |= SPI_STATE_TX_BUSY; - ret = HalSsiDmaSend(pHalSsiAdaptor, (uint8_t *) tx_buffer, length); - if (ret != HAL_OK) { - obj->state &= ~SPI_STATE_TX_BUSY; - } - return (ret); -} - -int32_t spi_master_write_read_stream_dma(spi_t *obj, char *tx_buffer, - char *rx_buffer, uint32_t length) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - int32_t ret; - - if (obj->state & (SPI_STATE_RX_BUSY|SPI_STATE_TX_BUSY)) { - DBG_SSI_WARN("spi_master_write_and_read_stream: state(0x%x) is not ready\r\n", - obj->state); - return HAL_BUSY; - } - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - if ((obj->dma_en & SPI_DMA_TX_EN)==0) { - if (HAL_OK == HalSsiTxGdmaInit(pHalSsiOp, pHalSsiAdaptor)) { - obj->dma_en |= SPI_DMA_TX_EN; - } - else { - return HAL_BUSY; - } - } - - if ((obj->dma_en & SPI_DMA_RX_EN)==0) { - if (HAL_OK == HalSsiRxGdmaInit(pHalSsiOp, pHalSsiAdaptor)) { - obj->dma_en |= SPI_DMA_RX_EN; - } - else { - return HAL_BUSY; - } - } - - obj->state |= SPI_STATE_RX_BUSY; - /* as Master mode, sending data will receive data at sametime */ - if ((ret=HalSsiDmaRecv(pHalSsiAdaptor, (uint8_t *) rx_buffer, length)) == HAL_OK) { - obj->state |= SPI_STATE_TX_BUSY; - if ((ret=HalSsiDmaSend(pHalSsiAdaptor, (uint8_t *) tx_buffer, length)) != HAL_OK) { - obj->state &= ~(SPI_STATE_RX_BUSY|SPI_STATE_TX_BUSY); - } - } - else { - obj->state &= ~(SPI_STATE_RX_BUSY); - } - - return ret; -} - -int32_t spi_master_read_stream_dma(spi_t *obj, char *rx_buffer, uint32_t length) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - int32_t ret; - - if (obj->state & SPI_STATE_RX_BUSY) { - DBG_SSI_WARN("spi_master_read_stream_dma: state(0x%x) is not ready\r\n", - obj->state); - return HAL_BUSY; - } - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - if ((obj->dma_en & SPI_DMA_RX_EN)==0) { - if (HAL_OK == HalSsiRxGdmaInit(pHalSsiOp, pHalSsiAdaptor)) { - obj->dma_en |= SPI_DMA_RX_EN; - } - else { - return HAL_BUSY; - } - } - - obj->state |= SPI_STATE_RX_BUSY; - ret = HalSsiDmaRecv(pHalSsiAdaptor, (uint8_t *) rx_buffer, length); - if (ret != HAL_OK) { - obj->state &= ~SPI_STATE_RX_BUSY; - } - - // for master mode, we need to send data to generate clock out - if (obj->dma_en & SPI_DMA_TX_EN) { - // TX DMA is on already, so use DMA to TX data - // Make the GDMA to use the rx_buffer too - ret = HalSsiDmaSend(pHalSsiAdaptor, (uint8_t *) rx_buffer, length); - if (ret != HAL_OK) { - obj->state &= ~SPI_STATE_RX_BUSY; - } - } - else { - // TX DMA isn't enabled, so we just use Interrupt mode to TX dummy data - if ((ret=pHalSsiOp->HalSsiWriteInterrupt(pHalSsiAdaptor, NULL, length)) != HAL_OK) { - obj->state &= ~SPI_STATE_RX_BUSY; - } - } - - return ret; -} - -int32_t spi_master_write_stream_dma(spi_t *obj, char *tx_buffer, uint32_t length) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - int32_t ret; - - if (obj->state & SPI_STATE_TX_BUSY) { - DBG_SSI_WARN("spi_master_write_stream_dma: state(0x%x) is not ready\r\n", - obj->state); - return HAL_BUSY; - } - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - if ((obj->dma_en & SPI_DMA_TX_EN)==0) { - if (HAL_OK == HalSsiTxGdmaInit(pHalSsiOp, pHalSsiAdaptor)) { - obj->dma_en |= SPI_DMA_TX_EN; - } - else { - return HAL_BUSY; - } - } - - obj->state |= SPI_STATE_TX_BUSY; - ret = HalSsiDmaSend(pHalSsiAdaptor, (uint8_t *) tx_buffer, length); - if (ret != HAL_OK) { - obj->state &= ~SPI_STATE_TX_BUSY; - } - - return ret; -} - -int32_t spi_slave_read_stream_dma_timeout(spi_t *obj, char *rx_buffer, uint32_t length, uint32_t timeout_ms) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor; - PHAL_SSI_OP pHalSsiOp; - int ret,timeout = 0; - uint32_t StartCount, TimeoutCount = 0; - - - if (obj->state & SPI_STATE_RX_BUSY) { - DBG_SSI_WARN("spi_slave_read_stream_dma: state(0x%x) is not ready\r\n", - obj->state); - return HAL_BUSY; - } - - pHalSsiAdaptor = &obj->spi_adp; - pHalSsiOp = &obj->spi_op; - - if ((obj->dma_en & SPI_DMA_RX_EN)==0) { - if (HAL_OK == HalSsiRxGdmaInit(pHalSsiOp, pHalSsiAdaptor)) { - obj->dma_en |= SPI_DMA_RX_EN; - } - else { - return HAL_BUSY; - } - } - - obj->state |= SPI_STATE_RX_BUSY; - HalSsiEnterCritical(pHalSsiAdaptor); - ret = HalSsiDmaRecv(pHalSsiAdaptor, (uint8_t *) rx_buffer, length); - HalSsiExitCritical(pHalSsiAdaptor); - - if ((ret == HAL_OK) && (timeout_ms > 0)) { - TimeoutCount = (timeout_ms*1000/TIMER_TICK_US); - StartCount = HalTimerOp.HalTimerReadCount(1); - while (obj->state & SPI_STATE_RX_BUSY) { - if (HAL_TIMEOUT == HalSsiTimeout(StartCount, TimeoutCount)) { - ret = HalSsiStopRecv(pHalSsiAdaptor); - obj->state &= ~ SPI_STATE_RX_BUSY; - timeout = 1; - DBG_SSI_INFO("Slave is timeout\n"); - break; - } - } - - if(timeout) - return (length - pHalSsiAdaptor->RxLength); - else - return length; - - } - else { - obj->state &= ~ SPI_STATE_RX_BUSY; - return (-ret); - } -} - -#endif // end of "#ifdef CONFIG_GDMA_EN" diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/sys_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/sys_api.c deleted file mode 100644 index cf3c1d7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/sys_api.c +++ /dev/null @@ -1,225 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek - * All rights reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ******************************************************************************* - */ -#include "cmsis.h" -#include "sys_api.h" -#include "flash_api.h" -#include "osdep_api.h" -#include "device_lock.h" - -#define OTA_Signature "81958711" -#define OTA_Clear "00000000" -#define OTA_Signature_len 8 -#define OTA_Signature_offset 8 -#define OTA_valid_offset 0x100000 - -#undef printf -#define printf DiagPrintf - -#if !defined(__ICCARM__) -#undef memcmp -#define memcmp(dst, src, sz) _memcmp(dst, src, sz) -#undef memset -#define memset(dst, val, sz) _memset(dst, val, sz) -#undef memcpy -#define memcpy(dst, src, sz) _memcpy(dst, src, sz) -#endif // #if !defined(__ICCARM__) - -extern void HalJtagPinOff(void); - -extern void HalInitLogUart(void); -extern void HalDeinitLogUart(void); -/* -#ifdef CONFIG_SDR_EN -//#if defined ( __ICCARM__ ) -extern uint8_t IsSdrPowerOn(); -//#endif -#endif -*/ -/** - * @brief Turn off the JTAG function - * - * @return None - * - */ -void sys_jtag_off(void) -{ - HalJtagPinOff(); -} - -void sys_clear_ota_signature(void) -{ - flash_t flash; - uint32_t ota_offset=0xFFFFFFFF, part1_offset, part2_offset; - uint8_t signature[OTA_Signature_len+1]; - - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, 0x18, 4, (uint8_t*)&part1_offset); - part1_offset = (part1_offset&0xFFFF) * 1024; - flash_stream_read(&flash, part1_offset+OTA_Signature_offset, OTA_Signature_len, signature); - if(!memcmp((char const*)signature, OTA_Signature, OTA_Signature_len)){ - ota_offset = part1_offset; - } - - flash_stream_read(&flash, FLASH_SYSTEM_DATA_ADDR, 4, (uint8_t*)&part2_offset); - flash_stream_read(&flash, part2_offset+OTA_Signature_offset, OTA_Signature_len, signature); - if(!memcmp((char const*)signature, OTA_Signature, OTA_Signature_len)){ - ota_offset = part2_offset; - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); - printf("OTA offset = 0x%08X\n", ota_offset); - - if(ota_offset < OTA_valid_offset){ - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, ota_offset+OTA_Signature_offset, OTA_Signature_len, signature); - signature[OTA_Signature_len] = '\0'; - printf("Signature = %s\n", signature); - if(!memcmp((char const*)signature, OTA_Signature, OTA_Signature_len)){ - memcpy((char*)signature, OTA_Clear, OTA_Signature_len); - flash_stream_write(&flash, ota_offset+OTA_Signature_offset, OTA_Signature_len, signature); - flash_stream_read(&flash, ota_offset+OTA_Signature_offset, OTA_Signature_len, signature); - signature[OTA_Signature_len] = '\0'; - printf("Signature = %s\n", signature); - printf("Clear OTA signature success.\n"); - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); - } - -} - -void sys_recover_ota_signature(void) -{ - flash_t flash; - uint32_t ota_offset=0xFFFFFFFF, part1_offset, part2_offset; - uint8_t signature[OTA_Signature_len+1]; - uint8_t* pbuf; - - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, 0x18, 4, (uint8_t*)&part1_offset); - part1_offset = (part1_offset&0xFFFF) * 1024; - flash_stream_read(&flash, part1_offset+OTA_Signature_offset, OTA_Signature_len, signature); - if(!memcmp((char const*)signature, OTA_Clear, OTA_Signature_len)){ - ota_offset = part1_offset; - } - - flash_stream_read(&flash, FLASH_SYSTEM_DATA_ADDR, 4, (uint8_t*)&part2_offset); - flash_stream_read(&flash, part2_offset+OTA_Signature_offset, OTA_Signature_len, signature); - if(!memcmp((char const*)signature, OTA_Clear, OTA_Signature_len)){ - ota_offset = part2_offset; - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); - printf("OTA offset = 0x%08X\n", ota_offset); - - if(ota_offset < OTA_valid_offset){ - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, ota_offset+OTA_Signature_offset, OTA_Signature_len, signature); - signature[OTA_Signature_len] = '\0'; - printf("Signature = %s\n", signature); - if(!memcmp((char const*)signature, OTA_Clear, OTA_Signature_len)){ - // backup - pbuf = RtlMalloc(FLASH_SECTOR_SIZE); - if(!pbuf) return; - flash_stream_read(&flash, ota_offset, FLASH_SECTOR_SIZE, pbuf); - memcpy((char*)pbuf+OTA_Signature_offset, OTA_Signature, OTA_Signature_len); - flash_erase_sector(&flash, FLASH_RESERVED_DATA_BASE); - flash_stream_write(&flash, FLASH_RESERVED_DATA_BASE, FLASH_SECTOR_SIZE, pbuf); - // Write - flash_stream_read(&flash, FLASH_RESERVED_DATA_BASE, FLASH_SECTOR_SIZE, pbuf); - flash_erase_sector(&flash, ota_offset); - flash_stream_write(&flash, ota_offset, FLASH_SECTOR_SIZE, pbuf); - flash_stream_read(&flash, ota_offset+OTA_Signature_offset, OTA_Signature_len, signature); - signature[OTA_Signature_len] = '\0'; - printf("Signature = %s\n", signature); - RtlMfree(pbuf, FLASH_SECTOR_SIZE); - printf("Recover OTA signature success.\n"); - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); - } - -} - -void sys_log_uart_on(void) -{ - HalInitLogUart(); -} - -void sys_log_uart_off(void) -{ - HalDeinitLogUart(); -} - -void sys_adc_calibration(uint8_t write, uint16_t *offset, uint16_t *gain) -{ -extern flash_t flash; - if(write){ - // backup - uint8_t *pbuf = malloc(FLASH_SECTOR_SIZE); - if(!pbuf) return; - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, FLASH_SYSTEM_DATA_ADDR, FLASH_SECTOR_SIZE, pbuf); - memcpy((char*)pbuf+FLASH_ADC_PARA_OFFSET, offset, 2); - memcpy((char*)pbuf+FLASH_ADC_PARA_OFFSET+2, gain, 2); - flash_erase_sector(&flash, FLASH_RESERVED_DATA_BASE); - flash_stream_write(&flash, FLASH_RESERVED_DATA_BASE, FLASH_SECTOR_SIZE, pbuf); - // Write -// flash_stream_read(&flash, FLASH_RESERVED_DATA_BASE, FLASH_SECTOR_SIZE, pbuf); - flash_erase_sector(&flash, FLASH_SYSTEM_DATA_ADDR); - flash_stream_write(&flash, FLASH_SYSTEM_DATA_ADDR, FLASH_SECTOR_SIZE, pbuf); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - free(pbuf); - printf("Store ADC calibration success.\n"); - } - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, FLASH_ADC_PARA_BASE, 2, (uint8_t*)offset); - flash_stream_read(&flash, FLASH_ADC_PARA_BASE+2, 2, (uint8_t*)gain); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - - printf("ADC offset = 0x%04X, gain = 0x%04X.\n", *offset, *gain); -} - -/** - * @brief system software reset - * - * @return None - * - */ -void sys_reset(void) -{ - // Set processor clock to default before system reset - HAL_WRITE32(SYSTEM_CTRL_BASE, 0x14, 0x00000021); - HalDelayUs(100*1000); - - // Cortex-M3 SCB->AIRCR - HAL_WRITE32(0xE000ED00, 0x0C, (0x5FA << 16) | // VECTKEY - (HAL_READ32(0xE000ED00, 0x0C) & (7 << 8)) | // PRIGROUP - (1 << 2)); // SYSRESETREQ -} - -/* -#ifdef CONFIG_SDR_EN -uint8_t sys_is_sdram_power_on(void) -{ - return IsSdrPowerOn(); -} -void sys_sdram_off(void) -{ - if (IsSdrPowerOn()) { - SdrPowerOff(); - } -} -#endif -*/ diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/timer_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/timer_api.c deleted file mode 100644 index 12671f9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/timer_api.c +++ /dev/null @@ -1,156 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ - -#include "objects.h" -//#include -#include "timer_api.h" -//#include "PeripheralNames.h" - -#if CONFIG_TIMER_EN - -extern HAL_TIMER_OP HalTimerOp; - -extern HAL_Status HalTimerInitRtl8195a_Patch( - IN void *Data -); - -static void gtimer_timeout_handler (uint32_t tid) -{ - gtimer_t *obj = (gtimer_t *)tid; - gtimer_irq_handler handler; - uint8_t timer_id = obj->hal_gtimer_adp.TimerId; - - if (obj->handler != NULL) { - handler = (gtimer_irq_handler)obj->handler; - handler(obj->hid); - } - - if (!obj->is_periodcal) { - gtimer_stop(obj); - } - - if(timer_id < 2) { - // Timer0 | Timer1: clear ISR here - // Timer 2~7 ISR will be cleared in HAL - HalTimerClearIsr(timer_id); - } -} - -void gtimer_init (gtimer_t *obj, uint32_t tid) -{ - PTIMER_ADAPTER pTimerAdapter = &(obj->hal_gtimer_adp); - - if ((tid == 1) || (tid == 6) || (tid == 7)) { - DBG_TIMER_ERR("gtimer_init: This timer is reserved for HAL driver\r\n", tid); - return; - } - - if (tid > GTIMER_MAX) { - DBG_TIMER_ERR("gtimer_init: Invalid TimerId=%d\r\n", tid); - return; - } - - pTimerAdapter->IrqDis = 0; // Enable Irq @ initial - pTimerAdapter->IrqHandle.IrqFun = (IRQ_FUN) gtimer_timeout_handler; - if(tid == 0) { - pTimerAdapter->IrqHandle.IrqNum = TIMER0_IRQ; - } else if(tid == 1) { - pTimerAdapter->IrqHandle.IrqNum = TIMER1_IRQ; - } else { - pTimerAdapter->IrqHandle.IrqNum = TIMER2_7_IRQ; - } - pTimerAdapter->IrqHandle.Priority = 0; - pTimerAdapter->IrqHandle.Data = (uint32_t)obj; - pTimerAdapter->TimerId = (uint8_t)tid; - pTimerAdapter->TimerIrqPriority = 0; - pTimerAdapter->TimerLoadValueUs = 0xFFFFFFFF; // Just a whatever value - pTimerAdapter->TimerMode = USER_DEFINED; - - HalTimerInit ((void*) pTimerAdapter); -// gtimer_stop(obj); // HAL Initial will let the timer started, just stop it after initial -} - -void gtimer_deinit (gtimer_t *obj) -{ - PTIMER_ADAPTER pTimerAdapter = &(obj->hal_gtimer_adp); - - HalTimerDeInit((void*)pTimerAdapter); -} - -uint32_t gtimer_read_tick (gtimer_t *obj) -{ - PTIMER_ADAPTER pTimerAdapter = &obj->hal_gtimer_adp; - - return (HalTimerOp.HalTimerReadCount(pTimerAdapter->TimerId)); -} - -uint64_t gtimer_read_us (gtimer_t *obj) -{ - uint64_t time_us; - - time_us = gtimer_read_tick(obj)*1000000/32768; - - return (time_us); -} - -void gtimer_reload (gtimer_t *obj, uint32_t duration_us) -{ - PTIMER_ADAPTER pTimerAdapter = &obj->hal_gtimer_adp; - - HalTimerReLoad(pTimerAdapter->TimerId, duration_us); -} - - -void gtimer_start (gtimer_t *obj) -{ - PTIMER_ADAPTER pTimerAdapter = &obj->hal_gtimer_adp; - uint8_t TimerId = pTimerAdapter->TimerId; - - HalTimerEnable(TimerId); -#if 0 - HalTimerOp.HalTimerEn(pTimerAdapter->TimerId); - - HAL_TIMER_WRITE32((TIMER_INTERVAL*TimerId + TIMER_CTL_REG_OFF), - HAL_TIMER_READ32(TIMER_INTERVAL*TimerId + TIMER_CTL_REG_OFF) | (BIT0)); -#endif -} - -void gtimer_start_one_shout (gtimer_t *obj, uint32_t duration_us, void* handler, uint32_t hid) -{ - obj->is_periodcal = _FALSE; - obj->handler = handler; - obj->hid = hid; - gtimer_reload(obj, duration_us); - gtimer_start(obj); -} - -void gtimer_start_periodical (gtimer_t *obj, uint32_t duration_us, void* handler, uint32_t hid) -{ - obj->is_periodcal = _TRUE; - obj->handler = handler; - obj->hid = hid; - if (duration_us > GTIMER_TICK_US) { - // reload will takes extra 1 tick - duration_us -= GTIMER_TICK_US; - } - gtimer_reload(obj, duration_us); - gtimer_start(obj); -} - -void gtimer_stop (gtimer_t *obj) -{ - PTIMER_ADAPTER pTimerAdapter = &obj->hal_gtimer_adp; - -// obj->handler = NULL; -// HalTimerOp.HalTimerDis(pTimerAdapter->TimerId); - HalTimerDisable(pTimerAdapter->TimerId); -} - -#endif // end of "#if CONFIG_TIMER_EN" diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/timer_api.h b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/timer_api.h deleted file mode 100644 index e36d485..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/timer_api.h +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* -* Copyright (c) 2014, Realtek Semiconductor Corp. -* All rights reserved. -* -* This module is a confidential and proprietary property of RealTek and -* possession or use of this module requires written permission of RealTek. -*******************************************************************************/ -#ifndef MBED_EXT_TIMER_API_EXT_H -#define MBED_EXT_TIMER_API_EXT_H - -#include "device.h" -//#include "rtl8195a.h" - -typedef void (*gtimer_irq_handler)(uint32_t id); - -typedef struct gtimer_s gtimer_t; -enum { - TIMER0 = 2, // GTimer 2, share with PWM_3 - TIMER1 = 3, // GTimer 3, share with PWM_0 - TIMER2 = 4, // GTimer 4, share with PWM_1 - TIMER3 = 5, // GTimer 5, share with PWM_2 - TIMER4 = 0, // GTimer 0, share with software-RTC functions - - GTIMER_MAX = 5 -}; - -void gtimer_init (gtimer_t *obj, uint32_t tid); -void gtimer_deinit (gtimer_t *obj); -uint32_t gtimer_read_tick (gtimer_t *obj); -uint64_t gtimer_read_us (gtimer_t *obj); -void gtimer_reload (gtimer_t *obj, uint32_t duration_us); -void gtimer_start (gtimer_t *obj); -void gtimer_start_one_shout (gtimer_t *obj, uint32_t duration_us, void* handler, uint32_t hid); -void gtimer_start_periodical (gtimer_t *obj, uint32_t duration_us, void* handler, uint32_t hid); -void gtimer_stop (gtimer_t *obj); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/us_ticker.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/us_ticker.c deleted file mode 100644 index 9652bd4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/us_ticker.c +++ /dev/null @@ -1,137 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek Semiconductor Corp. - * All rights reserved. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - ******************************************************************************* - */ -#include "objects.h" -#include -#include "us_ticker_api.h" -#include "PeripheralNames.h" - -#define TICK_READ_FROM_CPU 0 // 1: read tick from CPU, 0: read tick from G-Timer -#define SYS_TIM_ID 1 // the G-Timer ID for System -#define APP_TIM_ID 6 // the G-Timer ID for Application - -static int us_ticker_inited = 0; -static TIMER_ADAPTER Timer6Adapter; - -extern HAL_TIMER_OP HalTimerOp; -/* -void _us_ticker_irq_handler(IN void *Data) -{ - us_ticker_irq_handler(); -} -*/ -void us_ticker_init(void) -{ - - if (us_ticker_inited) return; - us_ticker_inited = 1; - - // Initial a G-Timer - Timer6Adapter.IrqDis = 1; // Disable Irq - Timer6Adapter.IrqHandle.IrqFun = (IRQ_FUN) us_ticker_irq_handler; - Timer6Adapter.IrqHandle.IrqNum = TIMER2_7_IRQ; - Timer6Adapter.IrqHandle.Priority = 10; - Timer6Adapter.IrqHandle.Data = (uint32_t)NULL; - Timer6Adapter.TimerId = APP_TIM_ID; - Timer6Adapter.TimerIrqPriority = 0; - Timer6Adapter.TimerLoadValueUs = 1; - Timer6Adapter.TimerMode = FREE_RUN_MODE; // Countdown Free Run - - HalTimerOp.HalTimerInit((void*) &Timer6Adapter); - - DBG_TIMER_INFO("%s: Timer_Id=%d\n", __FUNCTION__, APP_TIM_ID); -} - -#if (!TICK_READ_FROM_CPU) || !defined(PLATFORM_FREERTOS) -#define portNVIC_SYSTICK_CURRENT_VALUE_REG ( * ( ( volatile uint32_t * ) 0xe000e018 ) ) -uint32_t us_ticker_read() -{ - uint32_t tick_cnt; - uint32_t ticks_125ms; - uint32_t ticks_remain; - uint64_t us_tick; - - //1 Our G-timer resolution is ~31 us (1/32K), and is a countdown timer -// if (!us_ticker_inited) { -// us_ticker_init(); -// } - tick_cnt = HalTimerOp.HalTimerReadCount(SYS_TIM_ID); - tick_cnt = 0xffffffff - tick_cnt; // it's a down counter - ticks_125ms = tick_cnt/(GTIMER_CLK_HZ/8); - ticks_remain = tick_cnt - (ticks_125ms*(GTIMER_CLK_HZ/8)); - us_tick = ticks_125ms * 125000; - us_tick += (ticks_remain * 1000000)/GTIMER_CLK_HZ; - return ((uint32_t)us_tick); -} -#else -// if the system tick didn't be initialed, call delay function may got system hang -#define OS_CLOCK (200000000UL/6*5) // PLATFORM_CLOCK // CPU clock = 166.66 MHz -#define OS_TICK 1000 // OS ticks 1000/sec -#define OS_TRV ((uint32_t)(((double)OS_CLOCK*(double)OS_TICK)/1E6)-1) -#define NVIC_ST_CTRL (*((volatile uint32_t *)0xE000E010)) -#define NVIC_ST_RELOAD (*((volatile uint32_t *)0xE000E014)) -#define NVIC_ST_CURRENT (*((volatile uint32_t *)0xE000E018)) - -extern uint32_t xTaskGetTickCount( void ); - -uint32_t us_ticker_read() -{ - uint32_t tick_cnt; - uint32_t us_tick, ms; - static uint32_t last_us_tick=0; - - ms = xTaskGetTickCount(); - us_tick = (uint32_t)(ms*1000); - - tick_cnt = OS_TRV - NVIC_ST_CURRENT; - us_tick += (uint32_t)((tick_cnt*1000)/(OS_TRV+1) ); - - if ( (last_us_tick > us_tick) && (last_us_tick < 0xFFFFFC00) ) { - us_tick += 1000; - } - last_us_tick = us_tick; - return us_tick; - -} - -#endif - -void us_ticker_set_interrupt(timestamp_t timestamp) -{ - uint32_t cur_time_us; - uint32_t time_def; - - cur_time_us = us_ticker_read(); - if ((uint32_t)timestamp >= cur_time_us) { - time_def = (uint32_t)timestamp - cur_time_us; - } - else { - time_def = 0xffffffff - cur_time_us + (uint32_t)timestamp; - } - - if (time_def < TIMER_TICK_US) { - time_def = TIMER_TICK_US; // at least 1 tick - } - - Timer6Adapter.IrqDis = 0; // Enable Irq - Timer6Adapter.TimerLoadValueUs = time_def; - Timer6Adapter.TimerMode = USER_DEFINED; // Countdown Free Run - - HalTimerOp.HalTimerInit((void*) &Timer6Adapter); -} - -void us_ticker_disable_interrupt(void) -{ - HalTimerOp.HalTimerDis((uint32_t)Timer6Adapter.TimerId); -} - -void us_ticker_clear_interrupt(void) -{ - HalTimerOp.HalTimerIrqClear((uint32_t)Timer6Adapter.TimerId); -} diff --git a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/wdt_api.c b/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/wdt_api.c deleted file mode 100644 index a1c8334..0000000 --- a/Firmware/RTLGDB/USDK/component/common/mbed/targets/hal/rtl8195a/wdt_api.c +++ /dev/null @@ -1,94 +0,0 @@ -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2014, Realtek - * All rights reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ******************************************************************************* - */ -#include "cmsis.h" -#include "wdt_api.h" - -extern void WDGInitial(uint32_t Period); -extern void WDGStart(void); -extern void WDGStop(void); -extern void WDGRefresh(void); -extern void WDGIrqInitial(void); -extern void WDGIrqCallBackReg(void *CallBack, uint32_t Id); - -/** - * @brief Initial the watch dog time setting - * - * @param timeout_ms: the watch-dog timer timeout value, in ms. - * default action of timeout is to reset the whole system. - * @return None - * - */ -void watchdog_init(uint32_t timeout_ms) -{ - WDGInitial(timeout_ms); -} - -/** - * @brief Start the watchdog counting - * - * @param None - * @return None - * - */ -void watchdog_start(void) -{ - WDGStart(); -} - -/** - * @brief Stop the watchdog counting - * - * @param None - * @return None - * - */ -void watchdog_stop(void) -{ - WDGStop(); -} - -/** - * @brief Refresh the watchdog counting to prevent WDT timeout - * - * @param None - * @return None - * - */ -void watchdog_refresh(void) -{ - WDGRefresh(); -} - -/** - * @brief Switch the watchdog timer to interrupt mode and - * register a watchdog timer timeout interrupt handler. - * The interrupt handler will be called when the watch-dog - * timer is timeout. - * - * @param handler: the callback function for WDT timeout interrupt. - * id: the parameter for the callback function - * @return None - * - */ -void watchdog_irq_init(wdt_irq_handler handler, uint32_t id) -{ - WDGIrqCallBackReg((void*)handler, (uint32_t)id); - WDGIrqInitial(); -} - - diff --git a/Firmware/RTLGDB/USDK/component/common/media/codec/aac/aac.h b/Firmware/RTLGDB/USDK/component/common/media/codec/aac/aac.h deleted file mode 100644 index 995bc0e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/codec/aac/aac.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef _AAC_H -#define _AAC_H - -#include "dlist.h" //list management -#include "basic_types.h" -#include "osdep_service.h" -//#include "osdep_api.h" - -#define AAC_DEBUG 1 - -#if AAC_DEBUG -#define AAC_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#define AAC_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#else -#define AAC_PRINTF(fmt, args...) -#define AAC_ERROR(fmt, args...) -#endif - -struct rtp_au_hdr -{ - u32 au_size; //contain AU size in octets(header length included) -#if 0 - u16 au_index; - u16 au_index_delta; - u16 cts_flag; - u16 cts_delta; - u16 dts_flag; - u16 dts_delta; - u16 rap_flag; - u16 stream_state; -#endif - u32 au_header_len; //record AU header size in octets -}; - -struct rtp_aac_obj -{ - u16 au_headers_len; //contain AU header size in octet (we will translate it into bit-wise count before sending) - u8 au_header_num; //contain AU header number -// struct rtp_au_hdr *au_hdr; -}; - -#endif /*_AAC_H*/ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/media/codec/avcodec.h b/Firmware/RTLGDB/USDK/component/common/media/codec/avcodec.h deleted file mode 100644 index 377d03a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/codec/avcodec.h +++ /dev/null @@ -1,139 +0,0 @@ -#ifndef _AV_CODEC_H_ -#define _AV_CODEC_H_ - -/* Is this the place to include different codec header for rtp usage?*/ - - -struct codec_info -{ - int codec_id; - const char codec_name[8]; - u8 pt; - u32 clock_rate; - u8 audio_channels; - void *priv; -}; - -/* media type list -- range from 0-255 stored in 1 BYTE*/ -#define AVMEDIA_TYPE_VIDEO 0 -#define AVMEDIA_TYPE_AUDIO 1 -#define AVMEDIA_TYPE_SUBTITLE 2 -#define AVMEDIA_TYPE_UNKNOWN 255 - -/*codec id list -- id must match its placing order (starting from 0) in av_codec_tables*/ - -#define AV_CODEC_ID_MJPEG 0 -#define AV_CODEC_ID_H264 1 -#define AV_CODEC_ID_PCMU 2 -#define AV_CODEC_ID_PCMA 3 -#define AV_CODEC_ID_MP4A_LATM 4 -#define AV_CODEC_ID_MP4V_ES 5 -#define AV_CODEC_ID_UNKNOWN -1 - -/*rtp payload type mapping and standard rtp payload type table -- range from 0-255 in 1 BYTE*/ -#define RTP_PT_PCMU 0 -#define RTP_PT_GSM 3 -#define RTP_PT_G723 4 -#define RTP_PT_DVI4_R8000 5 -#define RTP_PT_DVI4_R16000 6 -#define RTP_PT_LPC 7 -#define RTP_PT_PCMA 8 -#define RTP_PT_G722 9 -#define RTP_PT_L16_C2 10 -#define RTP_PT_L16_C1 11 -#define RTP_PT_QCELP 12 -#define RTP_PT_CN 13 -#define RTP_PT_MPA 14 -#define RTP_PT_G728 15 -#define RTP_PT_DVI4_R11025 16 -#define RTP_PT_DVI4_R22050 17 -#define RTP_PT_G719 18 -#define RTP_PT_CELB 25 -#define RTP_PT_JPEG 26 -#define RTP_PT_NV 28 -#define RTP_PT_H261 31 -#define RTP_PT_MPV 32 -#define RTP_PT_MP2T 33 -#define RTP_PT_H263 34 -#define RTP_PT_RTCP_BASE 72 -#define RTP_PT_DYN_BASE 96 -#define RTP_PT_UNKNOWN 255 -/* AAC PROFILE */ -#define AV_PROFILE_AAC_MAIN 0 -#define AV_PROFILE_AAC_LOW 1 -#define AV_PROFILE_AAC_SSR 2 -#define AV_PROFILE_AAC_LTP 3 -#define AV_PROFILE_AAC_HE 4 -#define AV_PROFILE_AAC_HE_V2 28 -#define AV_PROFILE_AAC_LD 22 -#define AV_PROFILE_AAC_ELD 38 -#define AV_PROFILE_MPEG2_AAC_LOW 128 -#define AV_PROFILE_MPEG2_AAC_HE 131 - -#if 0 -/* MPEG4 VIDEO PROFILE */ -#define AV_PROFILE_MPEG4_SIMPLE 0 -#define AV_PROFILE_MPEG4_SIMPLE_SCALABLE 1 -#define AV_PROFILE_MPEG4_CORE 2 -#define AV_PROFILE_MPEG4_MAIN 3 -#define AV_PROFILE_MPEG4_N_BIT 4 -#define AV_PROFILE_MPEG4_SCALABLE_TEXTURE 5 -#define AV_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6 -#define AV_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7 -#define AV_PROFILE_MPEG4_HYBRID 8 -#define AV_PROFILE_MPEG4_ADVANCED_REAL_TIME 9 -#define AV_PROFILE_MPEG4_CORE_SCALABLE 10 -#define AV_PROFILE_MPEG4_ADVANCED_CODING 11 -#define AV_PROFILE_MPEG4_ADVANCED_CORE 12 -#define AV_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13 -#define AV_PROFILE_MPEG4_SIMPLE_STUDIO 14 -#define AV_PROFILE_MPEG4_ADVANCED_SIMPLE 15 -/* DTS */ -#define AV_PROFILE_DTS 20 -#define AV_PROFILE_DTS_ES 30 -#define AV_PROFILE_DTS_96_24 40 -#define AV_PROFILE_DTS_HD_HRA 50 -#define AV_PROFILE_DTS_HD_MA 60 -#define AV_PROFILE_DTS_EXPRESS 70 -/* MPEG2 */ -#define AV_PROFILE_MPEG2_422 0 -#define AV_PROFILE_MPEG2_HIGH 1 -#define AV_PROFILE_MPEG2_SS 2 -#define AV_PROFILE_MPEG2_SNR_SCALABLE 3 -#define AV_PROFILE_MPEG2_MAIN 4 -#define AV_PROFILE_MPEG2_SIMPLE 5 -/* H264 */ -#define AV_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag -#define AV_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag - -#define AV_PROFILE_H264_BASELINE 66 -#define AV_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED) -#define AV_PROFILE_H264_MAIN 77 -#define AV_PROFILE_H264_EXTENDED 88 -#define AV_PROFILE_H264_HIGH 100 -#define AV_PROFILE_H264_HIGH_10 110 -#define AV_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA) -#define AV_PROFILE_H264_HIGH_422 122 -#define AV_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA) -#define AV_PROFILE_H264_HIGH_444 144 -#define AV_PROFILE_H264_HIGH_444_PREDICTIVE 244 -#define AV_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA) -#define AV_PROFILE_H264_CAVLC_444 44 -#endif - -/*av codec tables*/ -//#include "section_config.h" -//SDRAM_DATA_SECTION -static const struct codec_info av_codec_tables[] = { - {AV_CODEC_ID_MJPEG, "MJPEG", RTP_PT_JPEG, 90000, 0, 0}, - {AV_CODEC_ID_H264, "H264", RTP_PT_DYN_BASE, 90000, 0, 0}, - {AV_CODEC_ID_PCMU, "PCMU", RTP_PT_PCMU, 8000, 1, 0}, - {AV_CODEC_ID_PCMA, "PCMA", RTP_PT_PCMA, 8000, 1, 0}, - {AV_CODEC_ID_MP4A_LATM, "MP4A", RTP_PT_DYN_BASE, 16000, 2, 0}, - {AV_CODEC_ID_MP4V_ES, "MP4V", RTP_PT_DYN_BASE, 90000, 0, 0}, -}; -#define AVCODEC_SIZE 6 - -void get_codec_by_id(struct codec_info *c, int id); - -#endif //_AV_CODEC_H_ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/media/codec/g711/g711.h b/Firmware/RTLGDB/USDK/component/common/media/codec/g711/g711.h deleted file mode 100644 index a64a9ff..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/codec/g711/g711.h +++ /dev/null @@ -1,27 +0,0 @@ - -#ifndef _G711_H -#define _G711_H - -#include "dlist.h" //list management -#include "basic_types.h" -#include "osdep_service.h" -//#include "osdep_api.h" - -#define G711_DEBUG 1 - -#if G711_DEBUG -#define G711_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#define G711_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#else -#define G711_PRINTF(fmt, args...) -#define G711_ERROR(fmt, args...) -#endif - - -//struct rtp_g711_obj { -//}; - - -/*for debug purpose*/ - -#endif /*_G711_H*/ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/media/codec/h264/h264.h b/Firmware/RTLGDB/USDK/component/common/media/codec/h264/h264.h deleted file mode 100644 index c0093fc..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/codec/h264/h264.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef _H264_H -#define _H264_H - -#include "dlist.h" //list management -#include "basic_types.h" -#include "osdep_service.h" -//#include "osdep_api.h" - -#define H264_DEBUG 0 - -#if H264_DEBUG -#define H264_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#define H264_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#else -#define H264_PRINTF(fmt, args...) -#define H264_ERROR(fmt, args...) -#endif - -#define MAX_NUM_NAL_PER_FRM 4 - -struct rtp_nal_obj -{ - u8 start_code_len; - unsigned char nal_header; - u8 is_fu_start; - u8 is_fu_end; - u8 must_not_drop; - u8 do_not_send; - int offset; -}; - -struct rtp_h264_obj -{ - int num_nal; - struct rtp_nal_obj nal_obj[MAX_NUM_NAL_PER_FRM]; -}; - -#endif /*_H264_H*/ - -#if 0 - -#ifndef _H264_H -#define _H264_H - -#include "dlist.h" //list management -#include "basic_types.h" -#include "osdep_service.h" -//#include "osdep_api.h" - -#define H264_DEBUG 0 - -#if H264_DEBUG -#define H264_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#define H264_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#else -#define H264_PRINTF(fmt, args...) -#define H264_ERROR(fmt, args...) -#endif - -/* in favor of rtp fragmentation */ -struct rtp_h264_obj -{ - u8 start_code_len; - unsigned char nal_header; - u8 is_fu_start; - u8 is_fu_end; - u8 must_not_drop; -}; - - -/********************************h264 over rtp******************************/ - - -#endif /*_H264_H*/ -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/media/codec/mjpeg/mjpeg.h b/Firmware/RTLGDB/USDK/component/common/media/codec/mjpeg/mjpeg.h deleted file mode 100644 index c6b0595..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/codec/mjpeg/mjpeg.h +++ /dev/null @@ -1,62 +0,0 @@ - -#ifndef _MJPEG_H -#define _MJPEG_H - -#include "dlist.h" //list management -#include "basic_types.h" -#include "osdep_service.h" -//#include "osdep_api.h" - -#define MJPEG_DEBUG 0 - -#if MJPEG_DEBUG -#define MJPEG_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#define MJPEG_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#else -#define MJPEG_PRINTF(fmt, args...) -#define MJPEG_ERROR(fmt, args...) -#endif - -struct jpeghdr { - unsigned int tspec:8; /* type-specific field */ - unsigned int off:24; /* fragment byte offset */ - u8 type; /* id of jpeg decoder params */ - u8 q; /* quantization factor (or table id) */ - u8 width; /* frame width in 8 pixel blocks */ - u8 height; /* frame height in 8 pixel blocks */ -}; - -struct jpeghdr_rst { - u16 dri; /*restart interval*/ - unsigned int f:1; /*restart first bit flag*/ - unsigned int l:1; /*restart last bit flag*/ - unsigned int count:14; /*restart count*/ -}; - - -struct jpeghdr_qtable { - u8 mbz; - u8 precision; - u16 length; -}; - -#define RTP_JPEG_RESTART 0x40 -#define USE_EXPLICIT_DQT 128 -#define USE_IMPLICIT_DQT 0 - -struct rtp_jpeg_obj -{ - struct jpeghdr jpghdr; - struct jpeghdr_rst rsthdr; - struct jpeghdr_qtable qtable; - u8 lqt[64*2]; /* Luma Quantizer table */ - u8 cqt[64*2]; /* Croma Quantizer table */ - int hdr_len; - int frame_offset; -}; - -/*for debug purpose*/ -void dumpJpegHeader(struct jpeghdr *jpghdr); -void dumpRstDeader(struct jpeghdr_rst *rsthdr); - -#endif /*_MJPEG_H*/ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_common.h b/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_common.h deleted file mode 100644 index 2b426f5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_common.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef _EXCHBUF_H -#define _EXCHBUF_H -#include "cmsis_os.h" -#include "errno.h" - -/*service task state*/ -#define S_STOP 0x00 -#define S_RUN 0x01 -#define S_FROZEN 0X02 - -#define CMD_SET_HEIGHT 0x00 -#define CMD_SET_WIDTH 0x01 -#define CMD_SET_BITRATE 0x02 -#define CMD_SET_FRAMERATE 0x03 -#define CMD_SET_CPZRATIO 0x04 -#define CMD_SET_FRAMETYPE 0x05 -#define CMD_SET_SAMPLERATE 0x06 -#define CMD_SET_CHANNEL 0x07 -#define CMD_SET_CODEC 0x08 -#define CMD_SET_STREAMNUM 0x09 -#define CMD_SET_SPS 0x0a -#define CMD_SET_PPS 0x0b -#define CMD_SET_LEVEL 0x0c -#define CMD_SET_APPLY 0x1f -#define CMD_SET_STREAMMING 0x20 -#define CMD_SET_INPUT_QUEUE 0x21 -#define CMD_SET_OUTPUT_QUEUE 0x22 -#define CMD_SET_PRIV_BUF 0x23 -#define CMD_SET_TASK_ON 0x24 -#define CMD_SET_TASK_FROZEN 0x25 -#define CMD_SET_TASK_OFF 0x26 -#define CMD_SELECT_CHANNEL 0x30 -#define CMD_SET_CB_START 0x40 -#define CMD_SET_CB_STOP 0x41 -#define CMD_SET_CB_PAUSE 0x42 -#define CMD_SET_CB_CUSTOMCMD 0x43 -#define CMD_FLUSH 0x50 -#define CMD_SET_FLAG 0X51 -#define CMD_GET_STREAM_READY 0x52 -#define CMD_GET_STREAM_STATUS 0x53 - -/*mp4 storage*/ -#define CMD_SET_ST_PERIOD 0X60 -#define CMD_SET_ST_TOTAL 0X61 -#define CMD_SET_ST_TYPE 0X62 -#define CMD_SET_ST_FILENAME 0x63 -#define CMD_SET_ST_START 0x64 -/*mp4 storage*/ -#define STORAGE_ALL 0 -#define STORAGE_VIDEO 1 -#define STORAGE_AUDIO 2 - -/*exchange buffer state*/ -#define STAT_INIT 0 -#define STAT_USED 1 -#define STAT_READY 2 -#define STAT_RESERVED 3 - -#define TIME_SYNC_EN 0 -#define TIME_SYNC_DIS 1 - -#define FMT_V_MJPG 0x00 -#define FMT_V_H264 0x01 -#define FMT_V_MP4V_ES 0x02 -#define FMT_A_PCMU 0x10 -#define FMT_A_PCMA 0x11 -#define FMT_A_MP4A_LATM 0x12 -#define FMT_AV_UNKNOWN 0xFF - -#define MFT_CMD 0 -#define MFT_DATA 1 -typedef struct _exch_buf{ - //_list node; // linking node - uint32_t type; // CMD, or DATA - uint32_t cmd; // command - uint32_t arg; // command arg - - uint8_t* data; // - uint32_t index; - uint32_t len; - uint32_t timestamp; // 0: not set - uint32_t codec_fmt; // FMT_V_xx or FMT_A_xx - - uint32_t state; - void* priv; // private use -}exch_buf_t; - -typedef int (*mmf_cb_t)(void*); -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_sink.h b/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_sink.h deleted file mode 100644 index 19ede8c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_sink.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef _STREAM_H -#define _STREAM_H -#include "cmsis_os.h" -#include "mmf_common.h" - -typedef struct _media_sink_module{ - void* (*create)(void); - void (*destroy)(void*); - int (*set_param)(void*, int, int); - int (*handle)(void*, void*); -}msink_module_t; - -typedef struct _media_sink_context{ - xQueueHandle input_qid; - xQueueHandle output_qid; - int state; - xTaskHandle hdl_task; - - void* drv_priv; // private data for module - msink_module_t *sink; -}msink_context; - -void mmf_sink_close(msink_context* ctx); -msink_context* mmf_sink_open(msink_module_t *sink); -int mmf_sink_ctrl(msink_context* ctx, int cmd, int arg); -int mmf_sink_put_frame(msink_context* ctx, exch_buf_t* exbuf); - -// must be here -#include "mmf_sink_modules/mmf_sink_list.h" -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_sink_modules/mmf_sink_list.h b/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_sink_modules/mmf_sink_list.h deleted file mode 100644 index 4c5da42..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_sink_modules/mmf_sink_list.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _STREAM_MODULES_H -#define _STREAM_MODULES_H -#include "../mmf_sink.h" - -//list all avaliable modules here -extern msink_module_t rtsp_module; -extern msink_module_t rtsp2_module; -extern msink_module_t i2s_sink_module; -extern msink_module_t mp4_module; -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source.h b/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source.h deleted file mode 100644 index ed5c877..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef _MEDIA_H -#define _MEDIA_H -#include "cmsis_os.h" -#include "mmf_common.h" - -typedef struct _media_source_module{ - void* (*create)(void); - void (*destroy)(void*); - int (*set_param)(void*, int, int); - int (*handle)(void*, void*); // input output will cast to exch_buf_t -}msrc_module_t; - - - -typedef struct _media_source_context{ - xQueueHandle input_qid; - xQueueHandle output_qid; - int state; - xTaskHandle hdl_task; - - void* drv_priv; - msrc_module_t* source; -}msrc_context; - -void mmf_source_close(msrc_context* ctx); -msrc_context* mmf_source_open(msrc_module_t* source); -int mmf_source_ctrl(msrc_context* ctx, int cmd, int arg); -int mmf_source_get_frame(msrc_context* ctx, exch_buf_t *exbuf); - -// must be here -#include "mmf_source_modules/mmf_source_list.h" -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/driver/geo/patch_uvc_geo.h b/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/driver/geo/patch_uvc_geo.h deleted file mode 100644 index db4db07..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/driver/geo/patch_uvc_geo.h +++ /dev/null @@ -1,1414 +0,0 @@ -#ifndef _PATCH_UVC_GEO_H_ -#define _PATCH_UVC_GEO_H_ - -#include "videodev2.h" - -#define be32_to_cpu(x) ((((x) >> 24) & 0xff) | \ - (((x) >> 8) & 0xff00) | \ - (((x) << 8) & 0xff0000) | \ - (((x) << 24) & 0xff000000)) -#define be24_to_cpu(a) \ - ((((a)>>16)&0xFF) | \ - ((a)&0xFF00) | \ - (((a)<<16)&0xFF0000)) -#define be16_to_cpu(x) ((((x) >> 8) & 0xff) | \ - (((x) << 8) & 0xff00)) - -//#define BUFFER_COUNT 8 -#define V4L2_CID_PRIV_EXT_BASE (0x04000000) -#define V4L2_CID_XU_BASE (V4L2_CID_PRIVATE_BASE|V4L2_CID_PRIV_EXT_BASE) - -#define V4L2_CID_XU_AVC_PROFILE (V4L2_CID_XU_BASE + 0) -#define V4L2_CID_XU_AVC_LEVEL (V4L2_CID_XU_BASE + 1) -#define V4L2_CID_XU_PICTURE_CODING (V4L2_CID_XU_BASE + 2) -#define V4L2_CID_XU_RESOLUTION (V4L2_CID_XU_BASE + 3) -#define V4L2_CID_XU_RESOLUTION2 (V4L2_CID_XU_BASE + 4) -#define V4L2_CID_XU_GOP_STRUCTURE (V4L2_CID_XU_BASE + 5) -#define V4L2_CID_XU_GOP_LENGTH (V4L2_CID_XU_BASE + 6) -#define V4L2_CID_XU_FRAME_RATE (V4L2_CID_XU_BASE + 7) -#define V4L2_CID_XU_BITRATE (V4L2_CID_XU_BASE + 8) -#define V4L2_CID_XU_FORCE_I_FRAME (V4L2_CID_XU_BASE + 9) -#define V4L2_CID_XU_GET_VERSION (V4L2_CID_XU_BASE + 10) -#define V4L2_CID_XU_MAX_NAL (V4L2_CID_XU_BASE + 11) - -#define V4L2_CID_XU_VUI_ENABLE (V4L2_CID_XU_BASE + 30) -#define V4L2_CID_XU_PIC_TIMING_ENABLE (V4L2_CID_XU_BASE + 31) -#define V4L2_CID_XU_AV_MUX_ENABLE (V4L2_CID_XU_BASE + 32) -#define V4L2_CID_XU_MAX_FRAME_SIZE (V4L2_CID_XU_BASE + 33) - -//mux channel xu's -//mux1 h264 -#define V4L2_CID_MUX_CH1_XU_RESOLUTION (V4L2_CID_XU_BASE + 0) -#define V4L2_CID_MUX_CH1_XU_FRAMEINTRVL (V4L2_CID_XU_BASE + 1) -#define V4L2_CID_MUX_CH1_XU_COMPRESSION_Q (V4L2_CID_XU_BASE + 2) -#define V4L2_CID_MUX_CH1_XU_GOP_HIERARCHY_LEVEL (V4L2_CID_XU_BASE + 3) -#define V4L2_CID_MUX_CH1_XU_ZOOM (V4L2_CID_XU_BASE + 4) -#define V4L2_CID_MUX_CH1_XU_BITRATE (V4L2_CID_XU_BASE + 5) -#define V4L2_CID_MUX_CH1_XU_FORCE_I_FRAME (V4L2_CID_XU_BASE + 6) -#define V4L2_CID_MUX_CH1_XU_VUI_ENABLE (V4L2_CID_XU_BASE + 7) -#define V4L2_CID_MUX_CH1_XU_CHCOUNT (V4L2_CID_XU_BASE + 8) -#define V4L2_CID_MUX_CH1_XU_CHTYPE (V4L2_CID_XU_BASE + 9) -#define V4L2_CID_MUX_CH1_XU_GOP_LENGTH (V4L2_CID_XU_BASE + 10) -#define V4L2_CID_MUX_CH1_XU_AVC_PROFILE (V4L2_CID_XU_BASE + 11) -#define V4L2_CID_MUX_CH1_XU_AVC_MAX_FRAME_SIZE (V4L2_CID_XU_BASE + 12) -#define V4L2_CID_MUX_CH1_XU_AVC_LEVEL (V4L2_CID_XU_BASE + 13) -#define V4L2_CID_MUX_CH1_XU_PIC_TIMING_ENABLE (V4L2_CID_XU_BASE + 14) -#define V4L2_CID_MUX_CH1_XU_VFLIP (V4L2_CID_XU_BASE + 15) -#define V4L2_CID_MUX_CH1_XU_AUDIO_BITRATE (V4L2_CID_XU_BASE + 16) - -//mux2 h264/mjpeg -#define V4L2_CID_MUX_CH2_XU_RESOLUTION (V4L2_CID_XU_BASE + 17) -#define V4L2_CID_MUX_CH2_XU_FRAMEINTRVL (V4L2_CID_XU_BASE + 18) -#define V4L2_CID_MUX_CH2_XU_PIC_TIMING_ENABLE (V4L2_CID_XU_BASE + 19) -#define V4L2_CID_MUX_CH2_XU_GOP_HIERARCHY_LEVEL (V4L2_CID_XU_BASE + 20) -#define V4L2_CID_MUX_CH2_XU_ZOOM (V4L2_CID_XU_BASE + 21) -#define V4L2_CID_MUX_CH2_XU_BITRATE (V4L2_CID_XU_BASE + 22) -#define V4L2_CID_MUX_CH2_XU_FORCE_I_FRAME (V4L2_CID_XU_BASE + 23) -#define V4L2_CID_MUX_CH2_XU_VUI_ENABLE (V4L2_CID_XU_BASE + 24) -#define V4L2_CID_MUX_CH2_XU_COMPRESSION_Q (V4L2_CID_XU_BASE + 25) -#define V4L2_CID_MUX_CH2_XU_CHTYPE (V4L2_CID_XU_BASE + 26) -#define V4L2_CID_MUX_CH2_XU_GOP_LENGTH (V4L2_CID_XU_BASE + 27) -#define V4L2_CID_MUX_CH2_XU_AVC_PROFILE (V4L2_CID_XU_BASE + 28) -#define V4L2_CID_MUX_CH2_XU_AVC_MAX_FRAME_SIZE (V4L2_CID_XU_BASE + 29) -#define V4L2_CID_MUX_CH2_XU_AVC_LEVEL (V4L2_CID_XU_BASE + 30) - -//mux3 h264/mjpeg -#define V4L2_CID_MUX_CH3_XU_RESOLUTION (V4L2_CID_XU_BASE + 33) -#define V4L2_CID_MUX_CH3_XU_FRAMEINTRVL (V4L2_CID_XU_BASE + 34) -#define V4L2_CID_MUX_CH3_XU_PIC_TIMING_ENABLE (V4L2_CID_XU_BASE + 35) -#define V4L2_CID_MUX_CH3_XU_GOP_HIERARCHY_LEVEL (V4L2_CID_XU_BASE + 36) -#define V4L2_CID_MUX_CH3_XU_ZOOM (V4L2_CID_XU_BASE + 37) -#define V4L2_CID_MUX_CH3_XU_BITRATE (V4L2_CID_XU_BASE + 38) -#define V4L2_CID_MUX_CH3_XU_FORCE_I_FRAME (V4L2_CID_XU_BASE + 39) -#define V4L2_CID_MUX_CH3_XU_VUI_ENABLE (V4L2_CID_XU_BASE + 40) -#define V4L2_CID_MUX_CH3_XU_COMPRESSION_Q (V4L2_CID_XU_BASE + 41) -#define V4L2_CID_MUX_CH3_XU_CHTYPE (V4L2_CID_XU_BASE + 42) -#define V4L2_CID_MUX_CH3_XU_GOP_LENGTH (V4L2_CID_XU_BASE + 43) -#define V4L2_CID_MUX_CH3_XU_AVC_PROFILE (V4L2_CID_XU_BASE + 44) -#define V4L2_CID_MUX_CH3_XU_AVC_MAX_FRAME_SIZE (V4L2_CID_XU_BASE + 45) -#define V4L2_CID_MUX_CH3_XU_AVC_LEVEL (V4L2_CID_XU_BASE + 46) - -//mux4 h264/mjpeg -#define V4L2_CID_MUX_CH4_XU_RESOLUTION (V4L2_CID_XU_BASE + 47) -#define V4L2_CID_MUX_CH4_XU_FRAMEINTRVL (V4L2_CID_XU_BASE + 48) -#define V4L2_CID_MUX_CH4_XU_PIC_TIMING_ENABLE (V4L2_CID_XU_BASE + 49) -#define V4L2_CID_MUX_CH4_XU_GOP_HIERARCHY_LEVEL (V4L2_CID_XU_BASE + 50) -#define V4L2_CID_MUX_CH4_XU_ZOOM (V4L2_CID_XU_BASE + 51) -#define V4L2_CID_MUX_CH4_XU_BITRATE (V4L2_CID_XU_BASE + 52) -#define V4L2_CID_MUX_CH4_XU_FORCE_I_FRAME (V4L2_CID_XU_BASE + 53) -#define V4L2_CID_MUX_CH4_XU_VUI_ENABLE (V4L2_CID_XU_BASE + 54) -#define V4L2_CID_MUX_CH4_XU_COMPRESSION_Q (V4L2_CID_XU_BASE + 55) -#define V4L2_CID_MUX_CH4_XU_CHTYPE (V4L2_CID_XU_BASE + 56) -#define V4L2_CID_MUX_CH4_XU_GOP_LENGTH (V4L2_CID_XU_BASE + 57) -#define V4L2_CID_MUX_CH4_XU_AVC_PROFILE (V4L2_CID_XU_BASE + 58) -#define V4L2_CID_MUX_CH4_XU_AVC_MAX_FRAME_SIZE (V4L2_CID_XU_BASE + 59) -#define V4L2_CID_MUX_CH4_XU_AVC_LEVEL (V4L2_CID_XU_BASE + 60) - -//mux5 -#define V4L2_CID_MUX_CH5_XU_RESOLUTION (V4L2_CID_XU_BASE + 62) -#define V4L2_CID_MUX_CH5_XU_FRAMEINTRVL (V4L2_CID_XU_BASE + 63) -#define V4L2_CID_MUX_CH5_XU_PIC_TIMING_ENABLE (V4L2_CID_XU_BASE + 64) -#define V4L2_CID_MUX_CH5_XU_GOP_HIERARCHY_LEVEL (V4L2_CID_XU_BASE + 65) -#define V4L2_CID_MUX_CH5_XU_ZOOM (V4L2_CID_XU_BASE + 66) -#define V4L2_CID_MUX_CH5_XU_BITRATE (V4L2_CID_XU_BASE + 67) -#define V4L2_CID_MUX_CH5_XU_FORCE_I_FRAME (V4L2_CID_XU_BASE + 68) -#define V4L2_CID_MUX_CH5_XU_VUI_ENABLE (V4L2_CID_XU_BASE + 69) -#define V4L2_CID_MUX_CH5_XU_COMPRESSION_Q (V4L2_CID_XU_BASE + 70) -#define V4L2_CID_MUX_CH5_XU_CHTYPE (V4L2_CID_XU_BASE + 71) -#define V4L2_CID_MUX_CH5_XU_GOP_LENGTH (V4L2_CID_XU_BASE + 72) -#define V4L2_CID_MUX_CH5_XU_AVC_PROFILE (V4L2_CID_XU_BASE + 73) -#define V4L2_CID_MUX_CH5_XU_AVC_MAX_FRAME_SIZE (V4L2_CID_XU_BASE + 74) -#define V4L2_CID_MUX_CH5_XU_AVC_LEVEL (V4L2_CID_XU_BASE + 75) -//mux6 -#define V4L2_CID_MUX_CH6_XU_RESOLUTION (V4L2_CID_XU_BASE + 78) -#define V4L2_CID_MUX_CH6_XU_FRAMEINTRVL (V4L2_CID_XU_BASE + 79) -#define V4L2_CID_MUX_CH6_XU_PIC_TIMING_ENABLE (V4L2_CID_XU_BASE + 80) -#define V4L2_CID_MUX_CH6_XU_GOP_HIERARCHY_LEVEL (V4L2_CID_XU_BASE + 81) -#define V4L2_CID_MUX_CH6_XU_ZOOM (V4L2_CID_XU_BASE + 82) -#define V4L2_CID_MUX_CH6_XU_BITRATE (V4L2_CID_XU_BASE + 83) -#define V4L2_CID_MUX_CH6_XU_FORCE_I_FRAME (V4L2_CID_XU_BASE + 84) -#define V4L2_CID_MUX_CH6_XU_VUI_ENABLE (V4L2_CID_XU_BASE + 85) -#define V4L2_CID_MUX_CH6_XU_COMPRESSION_Q (V4L2_CID_XU_BASE + 86) -#define V4L2_CID_MUX_CH6_XU_CHTYPE (V4L2_CID_XU_BASE + 87) -#define V4L2_CID_MUX_CH6_XU_GOP_LENGTH (V4L2_CID_XU_BASE + 88) -#define V4L2_CID_MUX_CH6_XU_AVC_LEVEL (V4L2_CID_XU_BASE + 89) - -//mux7 -#define V4L2_CID_MUX_CH7_XU_RESOLUTION (V4L2_CID_XU_BASE + 95) -#define V4L2_CID_MUX_CH7_XU_FRAMEINTRVL (V4L2_CID_XU_BASE + 96) -#define V4L2_CID_MUX_CH7_XU_PIC_TIMING_ENABLE (V4L2_CID_XU_BASE + 97) -#define V4L2_CID_MUX_CH7_XU_GOP_HIERARCHY_LEVEL (V4L2_CID_XU_BASE + 98) -#define V4L2_CID_MUX_CH7_XU_ZOOM (V4L2_CID_XU_BASE + 99) -#define V4L2_CID_MUX_CH7_XU_BITRATE (V4L2_CID_XU_BASE + 100) -#define V4L2_CID_MUX_CH7_XU_FORCE_I_FRAME (V4L2_CID_XU_BASE + 101) -#define V4L2_CID_MUX_CH7_XU_VUI_ENABLE (V4L2_CID_XU_BASE + 102) -#define V4L2_CID_MUX_CH7_XU_COMPRESSION_Q (V4L2_CID_XU_BASE + 103) -#define V4L2_CID_MUX_CH7_XU_CHTYPE (V4L2_CID_XU_BASE + 104) -#define V4L2_CID_MUX_CH7_XU_GOP_LENGTH (V4L2_CID_XU_BASE + 105) -#define V4L2_CID_MUX_CH7_XU_AVC_LEVEL (V4L2_CID_XU_BASE + 106) - -//common mux xu -#define V4L2_CID_MUX_XU_START_CHANNEL (V4L2_CID_XU_BASE + 107) -#define V4L2_CID_MUX_XU_STOP_CHANNEL (V4L2_CID_XU_BASE + 108) - -#define V4L2_CID_PU_XU_ANF_ENABLE (V4L2_CID_XU_BASE + 110) -#define V4L2_CID_PU_XU_NF_STRENGTH (V4L2_CID_XU_BASE + 111) -// Following are new define for Condor ISP API's -#define V4L2_CID_PU_XU_SINTER_MODE (V4L2_CID_XU_BASE + 112) -#define V4L2_CID_PU_XU_SINTER_MIN_NRSTR (V4L2_CID_XU_BASE + 113) -#define V4L2_CID_PU_XU_SINTER_MAX_NRSTR (V4L2_CID_XU_BASE + 114) -#define V4L2_CID_PU_XU_SINTER_MIN_THR (V4L2_CID_XU_BASE + 115) -#define V4L2_CID_PU_XU_SINTER_MAX_THR (V4L2_CID_XU_BASE + 116) -#define V4L2_CID_PU_XU_SINTER_TRIGPT (V4L2_CID_XU_BASE + 117) - - - -#define V4L2_CID_PU_XU_TF_STRENGTH (V4L2_CID_XU_BASE + 118) -#define V4L2_CID_PU_XU_ADAPTIVE_WDR_ENABLE (V4L2_CID_XU_BASE + 119) -#define V4L2_CID_PU_XU_WDR_STRENGTH (V4L2_CID_XU_BASE + 120) -#define V4L2_CID_PU_XU_AUTO_EXPOSURE (V4L2_CID_XU_BASE + 121) -#define V4L2_CID_PU_XU_EXPOSURE_TIME (V4L2_CID_XU_BASE + 122) -#define V4L2_CID_PU_XU_AUTO_WHITE_BAL (V4L2_CID_XU_BASE + 123) -#define V4L2_CID_PU_XU_WHITE_BAL_TEMP (V4L2_CID_XU_BASE + 124) -#define V4L2_CID_PU_XU_VFLIP (V4L2_CID_XU_BASE + 125) -#define V4L2_CID_PU_XU_HFLIP (V4L2_CID_XU_BASE + 126) -#define V4L2_CID_PU_XU_WB_ZONE_SEL_ENABLE (V4L2_CID_XU_BASE + 127) -#define V4L2_CID_PU_XU_WB_ZONE_SEL (V4L2_CID_XU_BASE + 128) -#define V4L2_CID_PU_XU_EXP_ZONE_SEL_ENABLE (V4L2_CID_XU_BASE + 129) -#define V4L2_CID_PU_XU_EXP_ZONE_SEL (V4L2_CID_XU_BASE + 130) -#define V4L2_CID_PU_XU_MAX_ANALOG_GAIN (V4L2_CID_XU_BASE + 131) -#define V4L2_CID_PU_XU_HISTO_EQ (V4L2_CID_XU_BASE + 132) -#define V4L2_CID_PU_XU_SHARPEN_FILTER (V4L2_CID_XU_BASE + 133) -#define V4L2_CID_PU_XU_GAIN_MULTIPLIER (V4L2_CID_XU_BASE + 134) -#define V4L2_CID_PU_XU_CROP_CHANNEL (V4L2_CID_XU_BASE + 135) -#define V4L2_CID_PU_XU_CROP_ENABLE (V4L2_CID_XU_BASE + 136) -#define V4L2_CID_PU_XU_CROP_WIDTH (V4L2_CID_XU_BASE + 137) -#define V4L2_CID_PU_XU_CROP_HEIGHT (V4L2_CID_XU_BASE + 138) -#define V4L2_CID_PU_XU_CROP_X (V4L2_CID_XU_BASE + 139) -#define V4L2_CID_PU_XU_CROP_Y (V4L2_CID_XU_BASE + 140) -#define V4L2_CID_PU_XU_EXP_MIN_FR_RATE (V4L2_CID_XU_BASE + 141) -#define V4L2_CID_PU_XU_SATURATION_MODE (V4L2_CID_XU_BASE + 142) -#define V4L2_CID_PU_XU_BRIGHTNESS_MODE (V4L2_CID_XU_BASE + 143) -#define V4L2_CID_PU_XU_CONTRAST_MODE (V4L2_CID_XU_BASE + 144) - -//dewarp xu's -#define V4L2_CID_MUX_CH1_XU_DEWRP_CHANNEL (V4L2_CID_XU_BASE + 150) -#define V4L2_CID_MUX_CH2_XU_DEWRP_CHANNEL (V4L2_CID_XU_BASE + 158) -#define V4L2_CID_MUX_CH3_XU_DEWRP_CHANNEL (V4L2_CID_XU_BASE + 161) -#define V4L2_CID_MUX_CH4_XU_DEWRP_CHANNEL (V4L2_CID_XU_BASE + 164) -#define V4L2_CID_MUX_CH5_XU_DEWRP_CHANNEL (V4L2_CID_XU_BASE + 167) -#define V4L2_CID_MUX_CH6_XU_DEWRP_CHANNEL (V4L2_CID_XU_BASE + 170) -#define V4L2_CID_MUX_CH7_XU_DEWRP_CHANNEL (V4L2_CID_XU_BASE + 173) -#define V4L2_CID_MUX_CH1_XU_CROP_CHANNEL (V4L2_CID_XU_BASE + 174) -//dewarp xu end - -#define V4L2_CID_PU_XU_DEWARP_CHANNEL (V4L2_CID_XU_BASE + 176) -#define V4L2_CID_PU_XU_DEWARP_PANEL (V4L2_CID_XU_BASE + 177) -#define V4L2_CID_PU_XU_DEWARP_MODE (V4L2_CID_XU_BASE + 178) -#define V4L2_CID_PU_XU_DEWARP_PARAM0 (V4L2_CID_XU_BASE + 179) -#define V4L2_CID_PU_XU_DEWARP_PARAM1 (V4L2_CID_XU_BASE + 180) -#define V4L2_CID_PU_XU_DEWARP_PARAM2 (V4L2_CID_XU_BASE + 181) -#define V4L2_CID_PU_XU_DEWARP_PARAM3 (V4L2_CID_XU_BASE + 182) -#define V4L2_CID_PU_XU_DEWARP_PARAM4 (V4L2_CID_XU_BASE + 183) -#define V4L2_CID_PU_XU_DEWARP_PARAM5 (V4L2_CID_XU_BASE + 184) -#define V4L2_CID_PU_XU_DEWARP_PARAM6 (V4L2_CID_XU_BASE + 185) -#define V4L2_CID_PU_XU_DEWARP_PARAM7 (V4L2_CID_XU_BASE + 186) -#define V4L2_CID_PU_XU_DEWARP_PARAM8 (V4L2_CID_XU_BASE + 187) -#define V4L2_CID_PU_XU_DEWARP_PARAM9 (V4L2_CID_XU_BASE + 188) -//dewarp xu end - -#define V4L2_CID_PU_XU_COMPOSITOR_CHANNEL (V4L2_CID_XU_BASE + 189) -#define V4L2_CID_PU_XU_COMPOSITOR_PANEL_ID (V4L2_CID_XU_BASE + 190) -#define V4L2_CID_PU_XU_COMPOSITOR_MODE (V4L2_CID_XU_BASE + 191) -#define V4L2_CID_PU_XU_COMPOSITOR_PARAM0 (V4L2_CID_XU_BASE + 192) -#define V4L2_CID_PU_XU_COMPOSITOR_PARAM1 (V4L2_CID_XU_BASE + 193) -#define V4L2_CID_PU_XU_COMPOSITOR_PARAM2 (V4L2_CID_XU_BASE + 194) -#define V4L2_CID_PU_XU_COMPOSITOR_PARAM3 (V4L2_CID_XU_BASE + 195) -#define V4L2_CID_PU_XU_COMPOSITOR_PARAM4 (V4L2_CID_XU_BASE + 196) - -#define V4L2_CID_PU_XU_CONFIG_PARAM0 (V4L2_CID_XU_BASE + 197) -#define V4L2_CID_PU_XU_CONFIG_PARAM1 (V4L2_CID_XU_BASE + 198) -#define V4L2_CID_PU_XU_CONFIG_PARAM2 (V4L2_CID_XU_BASE + 199) -#define V4L2_CID_PU_XU_CONFIG_PARAM3 (V4L2_CID_XU_BASE + 200) -#define V4L2_CID_PU_XU_CONFIG_PARAM4 (V4L2_CID_XU_BASE + 201) -#define V4L2_CID_PU_XU_CONFIG_PARAM5 (V4L2_CID_XU_BASE + 202) -#define V4L2_CID_PU_XU_CONFIG_PARAM6 (V4L2_CID_XU_BASE + 203) -#define V4L2_CID_PU_XU_CONFIG_PARAM7 (V4L2_CID_XU_BASE + 204) - -#define V4L2_CID_MUX_CH1_XU_VBR_MIN_BITRATE (V4L2_CID_XU_BASE + 205) -#define V4L2_CID_MUX_CH2_XU_VBR_MIN_BITRATE (V4L2_CID_XU_BASE + 206) -#define V4L2_CID_MUX_CH3_XU_VBR_MIN_BITRATE (V4L2_CID_XU_BASE + 207) -#define V4L2_CID_MUX_CH4_XU_VBR_MIN_BITRATE (V4L2_CID_XU_BASE + 208) -#define V4L2_CID_MUX_CH5_XU_VBR_MIN_BITRATE (V4L2_CID_XU_BASE + 209) -#define V4L2_CID_MUX_CH6_XU_VBR_MIN_BITRATE (V4L2_CID_XU_BASE + 210) -#define V4L2_CID_MUX_CH7_XU_VBR_MIN_BITRATE (V4L2_CID_XU_BASE + 211) -#define V4L2_CID_XU_END (V4L2_CID_XU_BASE + 212) - -/* GUIDs */ -/* {303B461D-BC63-44c3-8230-6741CAEB5D77} */ -#define GUID_VIDCAP_EXT \ - {0x1d, 0x46, 0x3b, 0x30, 0x63, 0xbc, 0xc3, 0x44,\ - 0x82, 0x30, 0x67, 0x41, 0xca, 0xeb, 0x5d, 0x77} -/* {6DF18A70-C113-428e-88C5-4AFF0E286AAA} */ -#define GUID_VIDENC_EXT \ - {0x70, 0x8a, 0xf1, 0x6d, 0x13, 0xc1, 0x8e, 0x42,\ - 0x88, 0xc5, 0x4a, 0xff, 0x0e, 0x28, 0x6a, 0xaa} -/* {ba2b92d9-26f2-4294-ae42-06dd684debe4} */ -#define AVC_XU_GUID \ - {0xd9, 0x92, 0x2b, 0xba, 0xf2, 0x26, 0x94, 0x42,\ - 0x42, 0xae, 0xe4, 0xeb, 0x4d, 0x68, 0xdd, 0x06} -#define MUX1_XU_GUID AVC_XU_GUID -#define MUX2_XU_GUID \ - {0xd9, 0x92, 0x2b, 0xbb, 0xf2, 0x26, 0x94, 0x42,\ - 0x42, 0xae, 0xe4, 0xeb, 0x4d, 0x68, 0xdd, 0x06} -#define MUX3_XU_GUID \ - {0xd9, 0x92, 0x2b, 0xbc, 0xf2, 0x26, 0x94, 0x42,\ - 0x42, 0xae, 0xe4, 0xeb, 0x4d, 0x68, 0xdd, 0x06} -#define MUX4_XU_GUID \ - {0xd9, 0x92, 0x2b, 0xbd, 0xf2, 0x26, 0x94, 0x42,\ - 0x42, 0xae, 0xe4, 0xeb, 0x4d, 0x68, 0xdd, 0x06} -#define MUX5_XU_GUID \ - {0xd9, 0x92, 0x2b, 0xbe, 0xf2, 0x26, 0x94, 0x42,\ - 0x42, 0xae, 0xe4, 0xeb, 0x4d, 0x68, 0xdd, 0x06} -#define MUX6_XU_GUID \ - {0xd9, 0x92, 0x2b, 0xbf, 0xf2, 0x26, 0x94, 0x42,\ - 0x42, 0xae, 0xe4, 0xeb, 0x4d, 0x68, 0xdd, 0x06} -#define MUX7_XU_GUID \ - {0xd9, 0x92, 0x2b, 0xc0, 0xf2, 0x26, 0x94, 0x42,\ - 0x42, 0xae, 0xe4, 0xeb, 0x4d, 0x68, 0xdd, 0x06} - -#define PU_XU_GUID \ - {0x12, 0xcd, 0x5d, 0xdf, 0x5f, 0x7d, 0xba, 0x4b,\ - 0xbb, 0x6d, 0x4b, 0x62, 0x5a, 0xdd, 0x52, 0x72} - - -#define V4L2_CID_DIGITIAL_MULTIPLIER (V4L2_CID_CAMERA_CLASS_BASE+32) - -// framerate in 100 nsec units //TBD correctly -#define FRI(x) ((float)10000000/x) //TBD -#define FRR(x) ((float)10000000/(x+0.0)) - -/** Image Name Length */ -#define IH_NMLEN 32 - -enum MUX_XU_CTRL { - //for all video channels - MUX_XU_RESOLUTION = 1, - MUX_XU_FRAMEINTRVL, - MUX_XU_PIC_TIMING_ENABLE, - MUX_XU_GOP_HIERARCHY_LEVEL, - MUX_XU_ZOOM, - - //for H264 based channels only - MUX_XU_BITRATE, - MUX_XU_FORCE_I_FRAME, - MUX_XU_VUI_ENABLE, - MUX_XU_AVC_LEVEL, - - //for MJPEG channel only - MUX_XU_COMPRESSION_Q, - - MUX_XU_CHCOUNT, - MUX_XU_CHTYPE, - MUX_XU_GOP_LENGTH, - MUX_XU_AVC_PROFILE, - MUX_XU_AVC_MAX_FRAME_SIZE, - MUX_XU_START_CHANNEL, - MUX_XU_STOP_CHANNEL, - MUX_XU_HFLIP, - MUX_XU_VFLIP, - - //Audio bitrate - MUX_XU_AUDIO_BITRATE, - - //dewarp xu's - MUX_XU_DEWRP_CHANNEL, - - // vbr params for avc - MUX_XU_VBR_MIN_BITRATE, - MUX_XU_VBR_SETTLING_TIME, //Not used - - MUX_XU_NUM_CTRLS, -}; - -/* Controls in the XU */ -enum PU_XU_CTRL { - PU_XU_ANF_ENABLE = 1, - PU_XU_NF_STRENGTH, - PU_XU_TF_STRENGTH, - PU_XU_SINTER, - PU_XU_ADAPTIVE_WDR_ENABLE, - PU_XU_WDR_STRENGTH, - PU_XU_AE_ENABLE, - PU_XU_EXPOSURE_TIME, - PU_XU_AWB_ENABLE, - PU_XU_WB_TEMPERATURE, - PU_XU_VFLIP, - PU_XU_HFLIP, - PU_XU_WB_ZONE_SEL_ENABLE, - PU_XU_WB_ZONE_SEL, - PU_XU_EXP_ZONE_SEL_ENABLE, - PU_XU_EXP_ZONE_SEL, - PU_XU_MAX_ANALOG_GAIN, - PU_XU_HISTO_EQ, - PU_XU_SHARPEN_FILTER, - PU_XU_GAIN_MULTIPLIER, - PU_XU_CROP, - PU_XU_EXP_MIN_FR_RATE, - PU_XU_DEWARP_PARAMS1, - PU_XU_DEWARP_PARAMS2, - PU_XU_COMPOSITOR_PARAMS, - PU_XU_CONFIG_PARAMS, - PU_XU_SATURATION_MODE, - PU_XU_BRIGHTNESS_MODE, - PU_XU_CONTRAST_MODE, - PU_XU_MVMT_QUERY, - PU_XU_SENSOR_FRAMERATE, - PU_XU_AEROI, -}; - -typedef enum { - /** Success (no error) */ - MXCAM_OK = 0, - /** Started EEPROM FW Upgrade */ - MXCAM_STAT_EEPROM_FW_UPGRADE_START,//1 - /** Completed EEPROM FW Upgrade */ - MXCAM_STAT_EEPROM_FW_UPGRADE_COMPLETE,//2 - /** Started SNOR FW Upgrade */ - MXCAM_STAT_SNOR_FW_UPGRADE_START,//3 - /** Completed SNOR FW Upgrade */ - MXCAM_STAT_SNOR_FW_UPGRADE_COMPLETE,//4 - /** Completed FW Upgrade */ - MXCAM_STAT_FW_UPGRADE_COMPLETE,//5 - /** EEPROM Erase in progress */ - MXCAM_STAT_EEPROM_ERASE_IN_PROG,//6 - /** EEPROM config save in progress */ - MXCAM_STAT_EEPROM_SAVE_IN_PROG,//7 - /** ERR numbers starts here */ - MXCAM_ERR_FAIL = 128, - /** FW Image is corrupted */ - MXCAM_ERR_FW_IMAGE_CORRUPTED,//129 - /** SNOR FW upgrade failed */ - MXCAM_ERR_FW_SNOR_FAILED,//130 - /** Unsupported Flash memory */ - MXCAM_ERR_FW_UNSUPPORTED_FLASH_MEMORY,//131 - /** Erase size exceeds MAX_VEND_SIZE */ - MXCAM_ERR_ERASE_SIZE,//132 - /** Unknown area to erase */ - MXCAM_ERR_ERASE_UNKNOWN_AREA,//133 - /** Unknown area to save */ - MXCAM_ERR_SAVE_UNKNOWN_AREA,//134 - /** Not enough memory to save new key on memory */ - MXCAM_ERR_SETKEY_OVER_FLOW_NO_MEM,//135 - /** Unknown area to set key */ - MXCAM_ERR_SETKEY_UNKNOWN_AREA,//136 - /** Unknown area to remove key */ - MXCAM_ERR_REMOVE_KEY_UNKNOWN_AREA,//137 - /** Unknown area to get key */ - MXCAM_ERR_GETVALUE_UNKNOWN_AREA,//138 - /** Value not found for given key */ - MXCAM_ERR_GETVLAUE_KEY_NOT_FOUND,//139 - /** Failed to read TCW from flash */ - MXCAM_ERR_TCW_FLASH_READ,//140 - /** Failed to write TCW on flash */ - MXCAM_ERR_TCW_FLASH_WRITE,//141 - /** Failed to allocate memory on camera*/ - MXCAM_ERR_MEMORY_ALLOC,//142 - /** Vendor area is not initialized */ - MXCAM_ERR_VEND_AREA_NOT_INIT,//143 - /** Json syntax error */ - MXCAM_ERR_VEND_ERR_JSON_SYNTAX_ERR, //144 - MXCAM_ERR_SETKEY_UNSUPPORTED, //145 - /** Ispcfg syntax error */ - MXCAM_ERR_VEND_ERR_ISPCFG_SYNTAX_ERR, //146 - //Don't change the above values - /** Unknown area to get config size */ - MXCAM_ERR_GET_CFG_SIZE_UNKNOWN_AREA = 150, - /** Invalid parameter(s) */ - MXCAM_ERR_INVALID_PARAM,//151 - /** Not a valid device */ - MXCAM_ERR_INVALID_DEVICE,//152 - /** Failed to send image */ - MXCAM_ERR_IMAGE_SEND_FAILED,//153 - /** File not found */ - MXCAM_ERR_FILE_NOT_FOUND,//154 - /** Not enough memory */ - MXCAM_ERR_NOT_ENOUGH_MEMORY,//155 - /** Not a valid image */ - MXCAM_ERR_NOT_VALID_IMAGE,//156 - /** vid and pid already registered */ - MXCAM_ERR_VID_PID_ALREADY_REGISTERED,//157 - /** device not found */ - MXCAM_ERR_DEVICE_NOT_FOUND,//158 - /** vendor area not initialized*/ - MXCAM_ERR_UNINITIALIZED_VENDOR_MEMORY,//159 - /** feature not supported*/ - MXCAM_ERR_FEATURE_NOT_SUPPORTED,//160 - /** i2c read error */ - MXCAM_ERR_I2C_READ = 180, - /** i2c write error */ - MXCAM_ERR_I2C_WRITE, - /** spi read-write error */ - MXCAM_ERR_SPI_RW, - /** Invalid bootloader used */ - MXCAM_ERR_INVALID_BOOTLOADER, - /** PWMLED is active **/ - MXCAM_ERR_PWMLED_ACTIVE -} MXCAM_STAT_ERR; - -typedef enum { - RUNNING_FW_HEADER = 0, - SNOR_FW_HEADER, - BOOTLOADER_HEADER, - UNDEFINED, -} IMG_HDR_TYPE; - -typedef struct image_header { - /** Image Header Magic Number 0x27051956 */ - uint32_t ih_magic; - /** Image Header CRC Checksum */ - uint32_t ih_hcrc; - /** Image Creation Timestamp in in ctime format*/ - uint32_t ih_time; - /** Image Data Size */ - uint32_t ih_size; - /** Data Load Address */ - uint32_t ih_load; - /** Entry Point Address */ - uint32_t ih_ep; - /** Image Data CRC Check sum */ - uint32_t ih_dcrc; - /** Operating System */ - uint8_t ih_os; - /** CPU architecture */ - uint8_t ih_arch; - /** Image Type */ - uint8_t ih_type; - /** Compression Type */ - uint8_t ih_comp; - /** Image Name */ - uint8_t ih_name[IH_NMLEN]; -} image_header_t; - - -#define QMED_BOX_TYPE 0x716d6564 -#define QMED_MAJOR_MEDIA_TYPE_AAC 0x1 -#define QMED_MAJOR_MEDIA_TYPE_H264 0x2 -#define QMED_MAJOR_MEDIA_TYPE_PCM 0x3 -#define QMED_MAJOR_MEDIA_TYPE_MP2 0x6 -#define QMED_MAJOR_MEDIA_TYPE_JPEG 0x7 -#define QMED_MAJOR_MEDIA_TYPE_Q711 0x9 -#define QMED_MAJOR_MEDIA_TYPE_Q728 0xa -#define QMED_MAJOR_MEDIA_TYPE_Q722 0xb -#define QMED_MAJOR_MEDIA_TYPE_Q726 0xc -#define QMED_MAJOR_MEDIA_TYPE_QOPUS 0xd -#define QMED_MAJOR_MEDIA_TYPE_MAX 0xe - -#define QMED_MINOR_MEDIA_TYPE_Q711_ALAW 0x0 -#define QMED_MINOR_MEDIA_TYPE_Q711_ULAW 0x1 -#define QMED_MINOR_MEDIA_TYPE_Q726_ITU_BYTE_ORDER 0x0 -#define QMED_MINOR_MEDIA_TYPE_Q726_IETF_BYTE_ORDER 0x1 - -#define QMED_VERSION (A) ((A >> 24) && 0xff) - -#define QMED_SHA_SIZE 8 - -/** enum of video format used in a particular channel */ -typedef enum { - FIRST_VID_FORMAT = 0, - /** H264 in elementary stream format */ - VID_FORMAT_H264_RAW = 0, - /** H264 in transport stream format */ - VID_FORMAT_H264_TS = 1, - /** MJPEG in elmentary stream format */ - VID_FORMAT_MJPEG_RAW = 2, - /** YUV stream in YUY2 format */ - VID_FORMAT_YUY2_RAW = 3, - /** YUV stream in NV12 format */ - VID_FORMAT_NV12_RAW = 4, - /** Luma stream format */ - VID_FORMAT_GREY_RAW = 5, - /** H264 and AAC in transport stream format */ - VID_FORMAT_H264_AAC_TS = 6, - /** mux data */ - VID_FORMAT_MUX = 7, - - VID_FORMAT_AAC_RAW = 8, - /** total number of video formats supported */ - NUM_VID_FORMAT -} video_format_t; - -/** enum to indicate the H264 profile used for encoding */ -typedef enum { - /** baseline profile */ - PROFILE_BASELINE = 0, - /** main profile */ - PROFILE_MAIN = 1, - /** high profile */ - PROFILE_HIGH = 2, - /** number of h264 profiles supported */ - NUM_PROFILE -} video_profile_t; - -/** enum to turn on/off video flip */ -typedef enum { - /** turn off flip */ - FLIP_OFF = 0, - /** trun on flip */ - FLIP_ON = 1, - /** number of flip mode supported */ - NUM_FLIP -} video_flip_t; - -/** enum to set the sensor exposure mode */ -typedef enum { - /** auto exposure */ - EXP_AUTO = 0, - /** manual exposure */ - EXP_MANUAL = 1, - /** number of exposure mode supported */ - NUM_EXP -} exp_set_t; - -typedef enum { - SATURATION_AUTO = 0, - SATURATION_MANUAL = 1, - NUM_SATURATION -} saturation_mode_t; - -typedef enum { - BRIGHTNESS_AUTO = 0, - BRIGHTNESS_MANUAL = 1, - NUM_BRIGHTNESS -} brightness_mode_t; - -typedef enum { - CONTRAST_AUTO = 0, - CONTRAST_MANUAL = 1, - NUM_CONTRAST -} contrast_mode_t; - -/** enum to set the white balance mode in the sensor */ -typedef enum { - /** auto mode */ - WB_MODE_AUTO = 0, - /** manual mode */ - WB_MODE_MANUAL = 1, - /** number of white balance modes supported */ - NUM_WB -}white_balance_mode_t; - -/** enum to set power line frequency mode */ -typedef enum { - /** disable power line frequency */ - PWR_LINE_FREQ_MODE_DISABLE = 0, - /** 50Hz power line frequency */ - PWR_LINE_FREQ_MODE_50HZ = 1, - /** 60Hz power line frequency */ - PWR_LINE_FREQ_MODE_60HZ = 2 -}pwr_line_freq_mode_t; - - -/** Structure containing the information regarding an encoding channel */ -typedef struct -{ - /** format of the video used in the channel */ - video_format_t format; - - /** width of the video in the channel */ - uint16_t width; - - /** height of the video in the channel */ - uint16_t height; - - /** frame Rate of the video in the channel */ - uint32_t framerate; - - /** GOP size of video to be used in the channel, applicable only for - VID_FORMAT_H264_RAW, - VID_FORMAT_H264_TS, - VID_FORMAT_H264_AAC_TS */ - uint32_t goplen; - - /** H264 profile used for encoding in the channel, applicable only for - VID_FORMAT_H264_RAW, - VID_FORMAT_H264_TS, - VID_FORMAT_H264_AAC_TS */ - video_profile_t profile; - - /** bitrate of the video in the channel */ - uint32_t bitrate; - - /** compression quality in terms of the QP factor set for the video - on this channel, applicable only for VID_FORMAT_MJPEG_RAW */ - uint32_t compression_quality; -} video_channel_info_t; - -typedef struct{ - unsigned int v : 8; - unsigned int f : 24; -}QMedFlags; - -typedef struct { - unsigned int boxSize; - unsigned int boxType; - union { - unsigned int value; - QMedFlags field; - } boxFlags; - unsigned int majorMediaType; - unsigned int minorMediaType; -} QMedStruct; - - -typedef struct -{ - unsigned long version; - unsigned long width; - unsigned long height; - unsigned long sampleTicks; - unsigned long motionCounter; - unsigned long motionBitmapSize; -} QMedH264Struct; - -typedef struct { - char *qmedExt; - unsigned int total_len; -}metadata_t; - -typedef struct { - unsigned int hashSize; - unsigned int hashPayload[QMED_SHA_SIZE]; -}QMedVer1InfoStruct; - - - -/** Video Information structure used for processing the video data received -from the camera in the callback function */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -typedef struct { - /** format of the video frame received */ - video_format_t format; - - /** video frame timestamp in terms of ticks of 90kHz clock, where each tick - corresponds to 1/(90 * 1000) sec or 1/90 ms */ - uint64_t ts; -#if 0 - /** motion vector statistics information of the video frame, - only in case of - VID_FORMAT_YUY2_RAW, - VID_FORMAT_NV12_RAW - VID_FORMAT_GREY_RAW */ - motion_stat_t stats; -#endif - /** physical buffer index of the video frame dequeued by the V4L. - This needs to be used by MXUVC application to queue back the video frame - after processing, in the mxuvc_video_cb_buf_done() function described - later */ - int buf_index; -#if 0 - /** TBD */ - pme_info_t pme; - /** TBD */ - rectangle_info_t rect; - /** TBD */ -#endif - metadata_t metadata; - -}/*__attribute__((packed))*/video_info_t; -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -typedef void (*mxuvc_video_cb_t)(unsigned char *buffer, unsigned int size, - video_info_t info, void *user_data); - -struct uvc_xu_data { - __u8 entity[16]; /* Extension unit GUID */ - __u8 selector; /* UVC control selector */ - __u8 size; /* V4L2 control size (in bits) */ - __u8 offset; /* V4L2 control offset (in bits) */ - __u32 id; /* V4L2 control identifier */ - __u8 name[32]; /* V4L2 control name */ -}; - -//static unsigned int buffer_count = BUFFER_COUNT; -static unsigned int mux_channel_count = 1; //minimum mux channel count has to be one else CH1 init logic will fail. -static int videoInit=0; //Flag indicating if video is initialized -#if 0 -struct buffer_info { - void *start; - size_t length; -}; -#endif -static struct video_stream { - int fd; - int enabled; - int started; - - /* V4l2 buffer/settings */ - //struct buffer_info *buffers; - //unsigned int n_buffers; - int n_buffers; - struct v4l2_format fmt; - - /* Callback */ - mxuvc_video_cb_t cb; - void *cb_user_data; - - /* Current stream format settings. - * Those settings are cached in order to populate the SECS - * StreamFormat with the current values when doing a StreamFormatProbe */ - video_format_t cur_vfmt; - uint16_t cur_width; - uint16_t cur_height; - uint32_t cur_bitrate; - uint32_t cur_framerate; - - /* Captured frame count */ - unsigned int frame_count; - - /* AAC muxing enabled ? */ - unsigned int mux_aac_ts; - - /* SECS */ - //unsigned int secs_supported; /* SECS mode supported but not enabled */ - //unsigned int secs_enabled; /* SECS mode enabled */ - -} *video_stream; - -typedef struct { - int fd; - int enabled; - int started; - int waiting; - int ref_count; - /* V4l2 buffer/settings */ - //struct buffer_info *buffers; - unsigned int n_buffers; - void *priv; -}mux_stream_t; - -/** enum to indicate the video channel number */ -typedef enum channel { - FIRST_VID_CHANNEL = 0, - /** channels for ip camera */ - /** video channel1 */ - CH1 = 0, - /** video channel2 */ - CH2 = 1, - /** video channel3 */ - CH3 = 2, - /** video channel4 */ - CH4 = 3, - /** video channel5 */ - CH5 = 4, - /** video channel6 */ - CH6 = 5, - /** video channel7 */ - CH7 = 6, - /** number of mux channels in ip camera */ - NUM_MUX_VID_CHANNELS = CH7+1, - /** video channel for RAW stream */ - CH_RAW = NUM_MUX_VID_CHANNELS, - /** total number of video channels in ip camera */ - NUM_IPCAM_VID_CHANNELS -} video_channel_t; - -int channel_init(video_channel_t ch); - -/** - * @brief This API is used to initialize the Linux video interface on the Host - * system. - * - * @return 0 on Success, -1 on Failure - */ - -int mxuvc_video_init(); - -/** - * @brief This API is used to free all the memory allocated by the MXUVC. - * This function automatically calls @ref mxuvc_video_stop if the video - * has not been stopped yet, it is therefore not necessary to explicitly call - * @ref mxuvc_video_stop before calling @ref mxuvc_video_deinit. - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_deinit(); - - -/** - * @brief This API is used to start the capture of video data from the specified - * channel in the camera. - * - * @param[in] ch video channel on which the video capture needs to be started - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_start(video_channel_t ch); - -/** - * @brief This API is used to stop the capture of video data from a channel in - * the camera. - * - * @param[in] ch video channel on which the video capture needs to be stopped - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_stop(video_channel_t ch); - -/** - * @brief This API is used to get the number of video channels supported by the - * GEO Camera. The number of video channels supported by the camera is configuration - * dependent. - * - * @param[out] count number of video channels supported. This parameter is returned - * from the camera based on the configuration in which it is running. - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_channel_count(uint32_t *count); - -/** - * @brief This API gets the information regarding the video parameters set on the - * channel in the Camera. - * - * @param[in] ch video channel from which the information is needed - * @param[out] info pointer to the video channel information structure returned - * from the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_channel_info(video_channel_t ch, video_channel_info_t *info); - -/** - * @brief This API is used to force an I frame in the specified video channel. - * Applicable only for VID_FORMAT_H264_RAW, VID_FORMAT_H264_TS, VID_FORMAT_H264_AAC_TS. - * - * @param[in] ch video channel on which I frame needs to be forced - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_force_iframe(video_channel_t ch); - -/** - * @brief This API is used to get the format of the video data on the specified channel. - * - * @param[in] ch video channel on which the format is queried - * @param[out] fmt pointer to receive the format of the video - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_format(video_channel_t ch, video_format_t *fmt); - -/** - * @brief This API is used to set the resolution of the video data on the specified channel. - * - * @param[in] ch video channel on which the resolution is to set - * @param[in] width width of the video in the specified channel - * @param[in] height height of the video in the specified channel - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_set_resolution(video_channel_t ch, uint16_t width, uint16_t height); - -/** - * @brief This API is used to get the resolution of the video data on the specified channel. - * - * @param[in] ch video channel on which the resolution is queried - * @param[out] width pointer to receive the width of the video - * @param[out] height pointer to receive the height of the video - * - * @return 0 on Success, -1 on Failure - */ - int mxuvc_video_get_resolution(video_channel_t ch, uint16_t *width, uint16_t *height); - -/** - * @brief This api is used to set the frame rate on the video channel specified. - * Typical Range: 1 to 30. - * - * Not applicable for VID_FORMAT_YUY2_RAW,VID_FORMAT_NV12_RAW,VID_FORMAT_GREY_RAW. - * - * @param[in] ch video channel for which framerate is to set - * @param[in] framerate framerate to set on the channel - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_set_framerate(video_channel_t ch, uint32_t framerate); - -/** - * @brief This api is used to get the frame rate on the video channel specified. - * - * Not applicable for VID_FORMAT_YUY2_RAW,VID_FORMAT_NV12_RAW,VID_FORMAT_GREY_RAW. - * - * @param[in] ch video channel for which framerate is to get - * @param[out] framerate pointer to receive the framerate - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_framerate(video_channel_t ch, uint32_t *framerate); - -/** - * @brief This api is used to set GOP length on the video channel specified. - * Typical Range: 0 to Max Integer (2147483647). - * - * Applicable only for VID_FORMAT_H264_RAW, VID_FORMAT_H264_TS, VID_FORMAT_H264_AAC_TS. - * - * @param[in] ch video channel for which GOP length is to set - * @param[in] value GOP length to set on the channel - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_set_goplen(video_channel_t ch, uint32_t value); - -/** - * @brief This api is used to get GOP length on the video channel specified. - * - * Applicable only for VID_FORMAT_H264_RAW, VID_FORMAT_H264_TS, VID_FORMAT_H264_AAC_TS. - * - * @param[in] ch video channel for which GOP length is to get - * @param[out] value pointer to receive the GOP length - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_goplen(video_channel_t ch, uint32_t *value); - -/** - * @brief This api is used to set bitrate on the video channel specified. - * Typical Range: 100000 (100 kbps) to 2000000 (2 Mbps) - * - * Not applicable for VID_FORMAT_YUY2_RAW,VID_FORMAT_NV12_RAW,VID_FORMAT_GREY_RAW. - * - * @param[in] ch video channel for which bitrate is to set - * @param[in] value bitrate to set on the channel - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_set_bitrate(video_channel_t ch, uint32_t value); - -/** - * @brief This api is used to get bitrate on the video channel specified. - * - * Not applicable for VID_FORMAT_YUY2_RAW,VID_FORMAT_NV12_RAW,VID_FORMAT_GREY_RAW. - * - * @param[in] ch video channel for which bitrate is to get - * @param[out] value pointer to receive the bitrate - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_bitrate(video_channel_t ch, uint32_t *value); - -/** - * @brief This api is used to set vertical flip of the given video channel. - * - * Values: 1 Enable, 0 Disable - * - * @param[in] ch video channel on which the parameter is set - * @param[in] value value to be set in the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_set_flip_vertical(video_channel_t ch, video_flip_t value); - -/** - * @brief This api is used to get vertical flip status of the given video channel. - * - * Values: 1 Enable, 0 Disable - * - * @param[in] ch video channel on which the parameter is set - * @param[out] value pointer to parameter value updated by the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_flip_vertical(video_channel_t ch, video_flip_t *value); - -/** - * @brief This api is used to set horizontal flip of the given video channel. - * - * Values: 1 Enable, 0 Disable - * - * @param[in] ch video channel on which the parameter is set - * @param[in] value value to be set in the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_set_flip_horizontal(video_channel_t ch, video_flip_t value); - -/** - * @brief This api is used to get horizontal flip status of the given video channel. - * - * Values: 1 Enable, 0 Disable - * - * @param[in] ch video channel on which the parameter is set - * @param[out] value pointer to parameter value updated by the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_flip_horizontal(video_channel_t ch, video_flip_t *value); - -/** - * @brief This api is used to set image contrast of the given video channel. - * - * Typical Range: 0 to 200 - * - * @param[in] ch video channel on which the parameter is set - * @param[in] value value to be set in the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_set_contrast(video_channel_t ch, uint16_t value); - -/** - * @brief This api is used to get image contrast of the given video channel. - * - * Typical Range: 0 to 200 - * - * @param[in] ch video channel on which the parameter is set - * @param[out] value pointer to parameter value updated by the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_contrast(video_channel_t ch, uint16_t *value); - -/** - * @brief This api is used to set image brightness of the given video channel. - * - * Typical Range: -255 to 255 - * - * @param[in] ch video channel on which the parameter is set - * @param[in] value value to be set in the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_set_brightness(video_channel_t ch, int16_t value); - -/** - * @brief This api is used to get image brightness of the given video channel. - * - * Typical Range: -255 to 255 - * - * @param[in] ch video channel on which the parameter is set - * @param[out] value pointer to parameter updated by the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_brightness(video_channel_t ch, int16_t *value); - -/** - * @brief This api is used to set image saturation of the given video channel. - * - * Typical Range: 0 to 200 - * - * @param[in] ch video channel on which the parameter is set - * @param[in] value value to be set in the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_set_saturation(video_channel_t ch, uint16_t value); - -/** - * @brief This api is used to get image saturation of the given video channel. - * - * Typical Range: 0 to 200 - * - * @param[in] ch video channel on which the parameter is set - * @param[out] value pointer to parameter updated by the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_saturation(video_channel_t ch, uint16_t *value); - -/** - * @brief This api is used to set image gain of the given video channel. - * - * Typical Range: 1 to 100 - * - * @param[in] ch video channel on which the parameter is set - * @param[in] value value to be set in the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_set_gain(video_channel_t ch, uint16_t value); - -/** - * @brief This api is used to get image gain of the given video channel. - * - * Typical Range: 1 to 100 - * - * @param[in] ch video channel on which the parameter is set - * @param[out] value pointer to parameter updated by the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_gain(video_channel_t ch, uint16_t *value); - -/** - * @brief This api is used to set image sharpness of the given video channel. - * - * Typical Range: 1 to 100 - * - * @param[in] ch video channel on which the parameter is set - * @param[in] value value to be set in the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_set_sharpness(video_channel_t ch, uint16_t value); - -/** - * @brief This api is used to get image sharpness of the given video channel. - * - * Typical Range: 1 to 100 - * - * @param[in] ch video channel on which the parameter is set - * @param[out] value pointer to parameter updated by the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_sharpness(video_channel_t ch, uint16_t *value); - -/** - * @brief This api is used to set the exposure mode (auto or manual) and - * the exposure time in the manual mode. - * - * @param[in] ch video channel on which the parameter is set - * @param[in] sel selects to exposure mode (Auto or Manual) - * @param[in] value exposure time value in the Manual mode - Range 0 to 255 - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_set_exp(video_channel_t ch, exp_set_t sel, uint16_t value); - -/** - * @brief This api is used to get the exposure mode (auto or manual) and - * the exposure time in the manual mode. - * - * @param[in] ch video channel on which the parameter is set - * @param[out] sel selects to exposure mode (Auto or Manual) - * @param[out] value pointer to parameter updated by the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_exp(video_channel_t ch, exp_set_t *sel, uint16_t *value); - -/** - * @brief This api is used to set the white balance mode (auto or manual) and - * the white balance temperature in Kelvin (works in auto mode only). - * - * @param[in] ch video channel on which the parameter is set - * @param[in] sel selects to white balance mode (Auto or Manual) - * @param[in] value white balance temperature in either Mode - Range 2000 to 8000 - * if 0 is passed, no change will be done - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_set_wb(video_channel_t ch, white_balance_mode_t sel, uint16_t value); - -/** - * @brief This api is used to get the white balance mode (auto or manual) and - * the white balance temperature in the manual mode. - * - * @param[in] ch video channel on which the parameter is set - * @param[out] sel selects to white balance mode (Auto or Manual) - * @param[out] value pointer to parameter updated by the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_wb(video_channel_t ch, white_balance_mode_t *sel, uint16_t *value); - -/** - * @brief This API is used to select the power line frequency of the operating region. - * Sensor exposure value under the auto-exposure algorithm will be adjusted to avoid - * flickering caused by power level oscillation. - * 0 disables this function, and the values of 1 and 2 represents 50 and 60Hz power - * line frequency respectively. - * - * @param[in] ch video channel on which the parameter is set - * @param[in] mode value indicating power line frequency mode - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_set_pwr_line_freq(video_channel_t ch,pwr_line_freq_mode_t mode); - -/** - * @brief This api is used to get the status of power line frequency of the operating - * region. - * - * @param[in] ch video channel on which the parameter is set - * @param[out] mode pointer to parameter updated by the camera - * 0 \u2013 disable, 1 \u2013 50Hz, 2 \u2013 60Hz - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_video_get_pwr_line_freq(video_channel_t ch,pwr_line_freq_mode_t *mode); - -int mxuvc_video_set_format(video_channel_t ch, video_format_t fmt); -int mxuvc_video_set_brightness_mode(video_channel_t ch, brightness_mode_t mode); -int mxuvc_video_get_brightness_mode(video_channel_t ch, brightness_mode_t *mode); -int mxuvc_video_set_contrast_mode(video_channel_t ch, contrast_mode_t mode); -int mxuvc_video_get_contrast_mode(video_channel_t ch, contrast_mode_t *mode); -int mxuvc_video_set_saturation_mode(video_channel_t ch, saturation_mode_t mode); -int mxuvc_video_get_saturation_mode(video_channel_t ch, saturation_mode_t *mode); - - -/** - * @brief This API is used to set the microphone gain. - * This will work only when AGC is off. - * - * @param[in] volume microphone gain level. Range is from 0 to 100 without any units. - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_audio_set_volume(int volume); - -/** - * @brief This API is used to mute or unmute the micro phone. - * It will mute or unmute all the audio input channels. - * - * @param[in] bMute microphone mute value. 0 - unmute, 1 - mute - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_audio_set_mic_mute(int bMute); - -/** - * @brief This API is used to mute or unmute only the left microphone - * in case of stereo. This will work only when ASP is off (in JSON). - * - * @param[in] bMute microphone mute value. 0 - unmute, 1 - mute - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_audio_set_left_mic_mute(int bMute); - -/** - * @brief This API is used to mute or unmute only the right microphone - * in case of stereo. This will work only when ASP is off (in JSON). - * - * @param[in] bMute microphone mute value. 0 - unmute, 1 - mute - * - * @return 0 on Success, -1 on Failure - */ -int mxuvc_audio_set_right_mic_mute(int bMute); - -/** - * @brief This API resets the camera - * - * @return 0 on Success, -1 on Failure - */ -int mxcam_reset(void); - -/** - * @brief This API gets VALUE for given KEY from camera's volatile memory - * - * @param[in] keyname KEY - * @param[out] value Value returned by camera for the given key - * - * @return 0 on Success, -1 on Failure - */ -int mxcam_get_value(const char* keyname, char** value); - -/** - * @brief This API frees the resource allocated by mxcam_get_value - * - * @param[in] value_mem: pointer to a memory,allocated by mxcam_get_value - * - * @return MXCAM_OK upon Success or following on Failure: - * MXCAM_ERR_INVALID_PARAM - if value_mem is NULL - * MXCAM_ERR_GETVALUE_UNKNOWN_AREA - Unknown area to get value - * MXCAM_ERR_GETVLAUE_KEY_NOT_FOUND - Value not found for given KEY - */ -int mxcam_free_get_value_mem(char* value_mem); - -/** - * @brief This API adds/modifies a KEY=VALUE pair on camera's volatile memory - * - * @param[in] keyname :KEY - * @param[in] value :VALUE - * - * @return 0 upon Success or following on Failure: - * MXCAM_ERR_INVALID_PARAM - if any one of the following condition meet - * - keyname is NULL - * - value is NULL - * MXCAM_ERR_SETKEY_OVER_FLOW_NO_MEM - Not enough memory to save new - * key on memory - * MXCAM_ERR_SETKEY_UNKNOWN_AREA - Unkown area to set key - */ - -int mxcam_set_key(const char* keyname, const char* value); - -/** - * @brief This API check the json syntax - * - * @param[in] ispcfg: ISP config file name - * - * @return MXCAM_OK upon Success or following on Failure: - * MXCAM_ERR_FILE_NOT_FOUND - if given ispcfg file is not found - * MXCAM_ERR_VEND_ERR_ISPCFG_SYNTAX_ERR - if syntax is wrong - */ -int mxcam_check_ispcfg_syntax(const char *ispcfg); - -/** - * @brief This API stores given ISP configuration binary on camera's non volatile memory. - * - * @param[in] ispcfg: ISP config file name - * - * @return 0 on Success, -1 on Failure - */ -int mxcam_write_ispcfg(const char *ispcfgfile); - -/** - * @brief This API saves the given JSON on camera persistent storage memory - * - * @param[in] jsonfile: JSON file name - * - * @return MXCAM_OK upon Success or following on Failure: - * MXCAM_ERR_INVALID_PARAM - if invalid JSON is provided - */ -int mxcam_save_eeprom_config(const char *jsonfile); - -/** - * @brief This API does QCC read operation in camera - * - * @param[in] bid: qcc block id - * @param[in] addr: qcc register address - * @param[in] length: length of the register - * @param[out] value : return value - * - * @return MXCAM_OK upon Success or following on Failure: - * MXCAM_ERR_INVALID_PARAM - length is not 1, 2 or 4 - * MXCAM_ERR_INVALID_DEVICE - Device not booted completely - */ -int mxcam_qcc_read(uint16_t bid, uint16_t addr, uint16_t length, uint32_t *value); - -/** - * @brief This API reads 64 bytes flash image header. This image header carries - * camera information such as firmware version, etc. - * - * @param[in] header :pointer to image_header_t structure - * @param[in] hdr_type : possible value of this field is - * 0, for running fw image header - * 1, if fw image hdr need to be read from sno - * 2, for bootloader header - * - * @return MXCAM_OK upon Success or following on Failure: - * MXCAM_ERR_INVALID_PARAM - if header is NULL - */ -int mxcam_read_flash_image_header(image_header_t *header, IMG_HDR_TYPE hdr_type); - -/** - * @brief TBD. - * - * @param[in] TBD - * - * @return 0 on Success, -1 on Failure - */ -int mxcam_rw_gpio (int gpio_no, int value, int gpio_write, int *status); - - -void get_adts_header(int size, unsigned char *adtsHeader); - -#endif /* _PATCH_UVC_GEO_H_ */ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/mmf_source_i2s_file.h b/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/mmf_source_i2s_file.h deleted file mode 100644 index 02352e0..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/mmf_source_i2s_file.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef MMF_SOURCE_I2S_FILE_H -#define MMF_SOURCE_I2S_FILE_H - -#include "mmf_source.h" -#include "FreeRTOS.h" -#include "task.h" -//#include "example_rtsp_server_i2s.h" -#include "rtsp/rtsp_api.h" -#include "sockets.h" -#include "lwip/netif.h" - -#include "i2s_api.h" -#include "alc5651.c" -#include "g711_codec.h" -#include "gpio_api.h" // mbed -#include "gpio_irq_api.h" - -#include -#include "platform_opts.h" -#include "dlist.h" -#include "basic_types.h" -#include "osdep_service.h" - -#define I2S_DMA_PAGE_SIZE 320 // 2 ~ 4096 -#define I2S_DMA_PAGE_NUM 4 // Vaild number is 2~4 -#define RECV_PAGE_NUM I2S_DMA_PAGE_NUM - -#define G711_FSIZE 160 -#define I2S_MODE_SWITCH PE_5 - -#define I2S_SCLK_PIN PC_1 -#define I2S_WS_PIN PC_0 -#define I2S_SD_PIN PC_2 - -#endif /* MMF_SOURCE_I2S_FILE_H */ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/mmf_source_list.h b/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/mmf_source_list.h deleted file mode 100644 index 2a010ac..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/mmf_source_list.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef _MEDIA_MODULES_H -#define _MEDIA_MODULES_H -#include "../mmf_source.h" - -//list all avaliable modules here -extern msrc_module_t uvc_module; -extern msrc_module_t geo_module; -extern msrc_module_t mjpgf_module; -extern msrc_module_t h264f_module; -extern msrc_module_t aacf_module; -extern msrc_module_t pcmuf_module; -extern msrc_module_t i2s_module; -extern msrc_module_t rtp_src_module; -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/sample_aac.h b/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/sample_aac.h deleted file mode 100644 index 32de003..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/sample_aac.h +++ /dev/null @@ -1,3200 +0,0 @@ -#ifndef _SAMPLE_AAC_H_ -#define _SAMPLE_AAC_H_ - -#include "section_config.h" -SDRAM_DATA_SECTION static const unsigned char aac_sample[]={ -0xff,0xf1,0x50,0x80,0x04,0x3f,0xfc,0xde,0x04,0x00,0x00,0x6c,0x69,0x62,0x66,0x61,0x61,0x63,0x20,0x31,0x2e,0x32,0x38,0x00,0x00,0x42,0x00,0x93,0x20,0x04,0x32,0x00,0x47 -,0xff,0xf1,0x50,0x80,0x02,0x1f,0xfc,0x21,0x20,0x49,0x90,0x02,0x19,0x00,0x23,0x80,0xff,0xf1,0x50,0x80,0x2e,0xbf,0xfc,0x21,0x4c,0xfe,0xf7,0xfc,0xdb,0xf3,0x25,0xca -,0x97,0x2e,0x19,0x85,0x6d,0x7d,0x00,0x30,0x8f,0xb9,0x3f,0xf4,0xe0,0xf3,0x68,0xfc,0x5e,0x50,0x11,0x9f,0x83,0xc3,0xf3,0x6d,0xf2,0xf5,0xb5,0xae,0x04,0xe1,0xbb,0x2e -,0xb7,0x8f,0xcd,0xb2,0xfb,0x80,0x2f,0x37,0x93,0xcf,0xe4,0xfb,0xf7,0xdf,0x79,0x00,0xcc,0xf0,0xbc,0x7e,0xb3,0x66,0xaf,0x27,0x96,0x00,0x0b,0x39,0x3d,0x57,0xa8,0xef -,0xfb,0x4d,0xfe,0x8f,0x8b,0x71,0xc6,0xea,0x79,0x7e,0x5d,0xe0,0x00,0xb9,0xa4,0x7a,0x4d,0xdb,0x3e,0xfb,0x63,0x93,0xbe,0x5c,0xaf,0x36,0xa6,0xd0,0x00,0x30,0x6a,0x6e -,0xe5,0xee,0xf5,0xb6,0x39,0x3b,0x4e,0x57,0xa9,0xdd,0xb3,0xf8,0xc0,0x00,0x07,0x13,0x89,0xc4,0xe2,0x71,0x23,0x77,0x74,0xe8,0x39,0xfd,0x07,0xac,0xf4,0xde,0x17,0xd6 -,0xfd,0x2f,0xba,0xf8,0x7e,0x37,0x75,0xf5,0x9e,0x9b,0x8f,0xe7,0x9d,0x0f,0x45,0xe1,0x3a,0x4d,0x9e,0xd2,0x00,0x00,0x19,0xd7,0x23,0x0e,0x37,0x69,0xc0,0xe1,0x74,0x76 -,0xbf,0xb5,0x7d,0x8e,0x1d,0x8f,0x37,0x67,0xfa,0x78,0x76,0x5c,0x17,0xb1,0xf0,0xfb,0x5c,0xb8,0x94,0x00,0x00,0x4e,0xb4,0x47,0x3f,0xa7,0xe1,0xf3,0xe7,0xf1,0xf3,0xfa -,0x7e,0xce,0x5c,0xb9,0x7f,0x17,0xcf,0xe7,0xf1,0xe7,0xc3,0xe1,0xf2,0xe3,0xcf,0x80,0x00,0x00,0x04,0xd4,0x03,0xc0,0x78,0x3c,0xc1,0xe0,0x73,0x00,0xe6,0xf0,0x81,0xe1 -,0xf3,0xf8,0x60,0x95,0x92,0xee,0x4b,0xa9,0x20,0x9c,0x81,0x6b,0x18,0xbf,0x8c,0x00,0x71,0xf4,0xfe,0xef,0xf4,0xbf,0xcb,0x6b,0xfc,0x4f,0x4b,0xf1,0xbe,0x8c,0x09,0xb7 -,0x0b,0xe0,0xfa,0x2f,0x43,0xc4,0xef,0x3b,0x00,0x39,0x7d,0x5f,0xf6,0x72,0xf9,0xfa,0x9f,0x79,0xd1,0xd6,0xec,0x03,0xac,0xc7,0xed,0xfd,0xb7,0xda,0xfb,0x7f,0x73,0xed -,0x7d,0xa0,0x35,0xf3,0x7c,0x17,0x74,0xe4,0xf7,0xdf,0x15,0xf3,0x1e,0x68,0x00,0x15,0xc8,0xe4,0x63,0xee,0xbf,0xc7,0xc6,0xf7,0x9d,0xff,0x6f,0xe1,0x7c,0xae,0x6f,0xb0 -,0xe2,0x67,0xe5,0xbf,0x58,0x00,0x3d,0x06,0xcd,0xcf,0xb3,0xf4,0x15,0x1f,0x7b,0xe6,0x63,0x7c,0xcc,0xbf,0x9f,0x85,0x20,0x00,0x1f,0x34,0x00,0x00,0x00,0x00,0x3d,0xa1 -,0xed,0x00,0x00,0x00,0x70,0xff,0xf1,0x50,0x80,0x35,0x5f,0xfc,0x21,0x6a,0xcf,0x3b,0xfd,0xdf,0xff,0xff,0xa9,0x60,0xa1,0x0c,0x28,0x72,0x0a,0x0d,0xc2,0xa1,0x60,0xa8 -,0xd0,0x2a,0x67,0x0c,0x05,0x42,0x81,0x80,0xb0,0x54,0x86,0x11,0x12,0x57,0x19,0x72,0xfb,0xfb,0xfb,0xdc,0xaa,0xe3,0xb5,0xee,0x73,0xd7,0x77,0x57,0x53,0xbd,0x73,0x32 -,0x49,0x27,0x15,0xff,0xdf,0xe8,0x76,0x8e,0xac,0xf9,0x67,0x21,0xfc,0xaf,0xe6,0x7b,0x6d,0x6b,0xca,0xf9,0x3f,0x45,0x2b,0x0f,0x6c,0x33,0xc2,0xf0,0xf8,0xe9,0x47,0x51 -,0xe4,0x7e,0xce,0x41,0xe7,0x6c,0x6c,0x0e,0x4e,0xa9,0x6c,0xe0,0x22,0x8e,0x16,0xe1,0xc9,0xc3,0xe0,0x71,0xe7,0xc9,0xcf,0xd1,0x47,0x01,0x8e,0xf7,0xa2,0x7a,0xfd,0x94 -,0xe8,0xe4,0x9f,0x92,0x0e,0x26,0x9d,0x3d,0xdb,0xe7,0xcd,0x00,0xf1,0xf2,0x1e,0x03,0xcb,0xc7,0x97,0x9f,0xc9,0xc9,0xc0,0x3c,0x8f,0x3f,0x1f,0x17,0x8f,0x88,0x07,0x97 -,0x97,0x90,0x78,0x78,0xf9,0xf9,0x0f,0x27,0xde,0x79,0xef,0xb5,0x10,0x0e,0x74,0x2e,0x82,0xa2,0x65,0xfc,0x18,0x70,0x18,0x78,0x34,0xf4,0x79,0x7d,0x5e,0x02,0x7c,0x7c -,0xb8,0x1e,0x1c,0xbe,0x9e,0x1f,0xfb,0xfc,0xf7,0xcc,0xff,0xef,0x6f,0xfd,0xbf,0xdb,0xfb,0x53,0x9d,0x0b,0xd7,0x98,0x81,0xcc,0x3c,0xcb,0x30,0x3b,0xc7,0x06,0x61,0xe5 -,0xe2,0x34,0xdb,0x45,0xa1,0x45,0xb7,0xf2,0x00,0xf3,0x38,0x81,0xe1,0xe4,0x78,0xf3,0xe0,0x0f,0x10,0xf0,0x79,0x0f,0x33,0xc4,0x78,0x00,0x8d,0xb8,0x78,0x00,0x44,0xbc -,0x67,0xed,0xf7,0x50,0x26,0x02,0x60,0x28,0xa0,0x28,0x16,0x12,0x05,0x84,0x83,0x61,0x20,0x58,0x44,0x14,0x0a,0x89,0xc2,0xa1,0x71,0x28,0x9c,0x42,0x20,0x08,0x90,0x02 -,0x23,0x71,0x08,0x80,0x29,0xe7,0xed,0xfa,0xfa,0x90,0x35,0xcf,0xe3,0xc5,0x77,0xf1,0xf6,0xfb,0xfe,0x62,0xe7,0x1f,0xfe,0x49,0x4c,0x53,0x9f,0xff,0x8b,0xff,0x6f,0xb8 -,0xd1,0x35,0xfd,0x12,0xbf,0x97,0x87,0x5f,0xf9,0xb7,0xdb,0xc5,0x39,0xa7,0xe2,0x79,0x97,0x6a,0x32,0x6f,0xc5,0x1b,0x55,0x1d,0xb9,0x43,0x7e,0xa4,0x98,0x7e,0xae,0xfb -,0x04,0x72,0x78,0xf1,0xe4,0x6d,0x0f,0xf8,0xe7,0xed,0x3c,0x1e,0x91,0x1c,0xd1,0x83,0xdb,0x7b,0x7f,0xc2,0x3a,0x7e,0x07,0xae,0x76,0x8f,0xb7,0xc5,0xea,0xf1,0xf5,0xf8 -,0x17,0xe4,0xf4,0xc3,0xc7,0x6f,0x00,0x7d,0xf3,0xca,0xf3,0x8f,0xed,0x00,0x15,0xac,0x04,0x8c,0xf3,0x1a,0x41,0x60,0xe4,0x16,0x04,0x00,0x28,0xa0,0x00,0xb8,0x11,0x00 -,0x00,0xbd,0x3f,0x49,0xcf,0xe0,0x39,0xe0,0x03,0x9f,0x99,0x00,0x00,0x23,0xc0,0xff,0xf1,0x50,0x80,0x38,0x3f,0xfc,0x21,0x0a,0xcb,0xff,0xfd,0x7f,0xff,0xff,0xa9,0x40 -,0xb0,0x50,0x6a,0x14,0x1a,0x85,0x04,0xa1,0x40,0x98,0x50,0x8c,0x15,0x1b,0x8d,0x42,0xe1,0x10,0xb8,0x54,0x2e,0x18,0x0a,0x05,0x42,0xc1,0x51,0x38,0x54,0x42,0x27,0x5e -,0x3c,0xeb,0x77,0x27,0x6a,0xf3,0xde,0xb7,0x5a,0xae,0xe6,0xb3,0x3a,0xcd,0xeb,0x8f,0x1c,0x94,0x4f,0x6d,0xba,0xff,0xf4,0xfa,0x1a,0x13,0x4a,0x7f,0x13,0x59,0x7c,0xad -,0xd9,0xd9,0xf2,0xdd,0xc9,0xd1,0xa2,0x50,0x73,0x6e,0xbe,0xb4,0xf1,0xe7,0x34,0xdf,0xfb,0xc7,0xf6,0x4a,0xf9,0xe2,0xfc,0x3e,0x63,0xfe,0x4f,0x9c,0x77,0xb6,0xa5,0xba -,0x82,0xd7,0x1e,0x67,0xcb,0x8a,0x7c,0xfc,0x6d,0x2b,0xee,0xae,0x47,0x31,0xbb,0x99,0xe1,0x36,0xbd,0x65,0x94,0x8b,0x09,0xf2,0xc3,0xc9,0xdb,0x16,0xe5,0xc8,0xe0,0x70 -,0xe5,0xcb,0x98,0xb3,0xc8,0x87,0x90,0x2d,0x92,0xb6,0xec,0xe7,0x03,0x70,0x5f,0x85,0x41,0x2e,0x7e,0x5c,0x78,0xbc,0xfe,0xf7,0x07,0xdc,0x6c,0xe6,0xd4,0x68,0x1b,0x39 -,0xfe,0x0b,0xc2,0xdf,0xc5,0xce,0x7a,0x17,0xda,0x81,0x17,0x8e,0xfb,0xd0,0x61,0x7e,0x33,0x3f,0xfc,0x3f,0xe9,0xff,0xdb,0xe0,0x7f,0xf0,0xba,0xdf,0x6b,0xfc,0x0e,0x3c -,0xbe,0x67,0x22,0x3a,0xb8,0x4a,0xac,0x78,0x6c,0xc1,0xfa,0x8a,0x80,0xcb,0x3c,0x31,0xcc,0xf8,0x7c,0x0e,0x03,0x9f,0xc8,0xe5,0xc3,0xe0,0xfd,0x57,0x5b,0xbb,0x51,0x42 -,0x6f,0xa9,0xd2,0xf0,0x00,0x1c,0xc1,0xcb,0x98,0xae,0x6e,0x20,0x79,0x8f,0x13,0xc0,0x02,0x20,0x2c,0x02,0x92,0x82,0xc2,0x40,0xb0,0x50,0x2c,0x14,0x12,0x89,0x04,0xa1 -,0x20,0xa0,0x5c,0x30,0x14,0x0b,0x0d,0xc2,0x81,0x20,0xb8,0x4c,0x22,0x55,0x09,0x04,0xc4,0x21,0x30,0x89,0x00,0x2d,0x15,0xaa,0x68,0xcf,0xdf,0xf6,0xf8,0xf5,0xd7,0xcf -,0x5e,0xbf,0xf7,0xff,0xe1,0xe6,0xf7,0xf7,0xff,0x9e,0x26,0xfb,0xff,0x5f,0x9e,0x2f,0xfe,0xff,0xa7,0xdb,0x7f,0xe3,0xfd,0x07,0x34,0x31,0x56,0xfe,0xaa,0x7e,0x2d,0x77 -,0x3d,0x2f,0xae,0x8f,0xa4,0x7f,0xa7,0xe4,0xe0,0xf9,0x3e,0xa5,0xeb,0x6b,0x5f,0x71,0xcb,0xcb,0xd7,0xbb,0x73,0xed,0x65,0x87,0xc0,0xef,0x3a,0x17,0x98,0x86,0x7d,0x6f -,0xda,0xf3,0x0f,0xef,0x79,0xf2,0x60,0x2a,0x24,0xd7,0xcc,0xb6,0x18,0xff,0xa9,0x43,0xa7,0x9b,0x8d,0x70,0xf7,0xa8,0xab,0x6a,0xa3,0x4f,0xba,0x25,0x64,0x58,0x74,0x54 -,0xf4,0xf9,0x87,0xf1,0x41,0xaf,0x58,0x09,0x24,0x9c,0xc2,0xa9,0x08,0x0a,0x80,0xd4,0x00,0x04,0xfa,0xfe,0xbd,0xdd,0x52,0x60,0x40,0x02,0xde,0x5f,0xc8,0x78,0x7f,0x8c -,0x80,0x2a,0x00,0x07,0x81,0x9e,0xc0,0xaf,0x8b,0xe1,0x01,0x26,0xf0,0x01,0x41,0xc0,0xff,0xf1,0x50,0x80,0x3a,0x3f,0xfc,0x21,0x0a,0xcf,0xfb,0xff,0xff,0xff,0xff,0xaa -,0x61,0x21,0x08,0x28,0x15,0x0a,0x09,0x42,0x83,0x30,0xa8,0x50,0x4c,0x15,0x0a,0x05,0x46,0x61,0x50,0xa0,0x54,0x2e,0x15,0x0b,0x85,0x87,0x01,0x51,0xb8,0x44,0x6f,0xae -,0xfd,0xa3,0xd6,0xb8,0xf5,0xae,0x78,0xe7,0x86,0x33,0x77,0x57,0xba,0x8a,0x9c,0x77,0x58,0x95,0x17,0xd7,0xb7,0xfb,0xfd,0x0d,0x53,0x6c,0x7e,0x27,0xc6,0xf7,0xde,0xc3 -,0xfb,0xca,0x1c,0x3c,0x5e,0xb2,0x77,0xa3,0xad,0xe5,0x05,0xd4,0xd6,0xbd,0x47,0x27,0x7f,0xb1,0x97,0x3f,0x57,0x67,0xe0,0x7a,0xe9,0xd3,0xdb,0x6b,0x9b,0x84,0xc0,0x01 -,0xe1,0xf1,0xff,0x79,0xc3,0x1b,0x09,0xf5,0xf2,0x1c,0xb8,0x7c,0x9f,0x0f,0x97,0x00,0xe3,0x2e,0x08,0x73,0x70,0x78,0x1f,0x0d,0xfe,0xfb,0xfc,0x5f,0x07,0xc0,0xf8,0x03 -,0x9b,0xff,0x9b,0x2f,0xfd,0xfb,0xbf,0x53,0x03,0x99,0xcf,0xe4,0xf9,0x9c,0xc0,0x5f,0x98,0x0f,0x38,0xf0,0x17,0xf6,0x1e,0x11,0xe7,0xf7,0x9b,0x7a,0x76,0xb6,0xbc,0x21 -,0xd7,0x78,0x7c,0xdb,0x53,0x56,0x29,0xf0,0xaa,0xfb,0x7f,0x01,0x68,0x5f,0x65,0xa1,0x81,0x67,0xd5,0xcf,0xbb,0x00,0xbf,0xc3,0x8e,0x00,0x01,0x86,0x01,0x55,0x16,0x85 -,0x41,0x45,0x14,0x5f,0x76,0x7e,0x40,0xa9,0xea,0x4f,0xbf,0xdf,0x8e,0xf1,0x36,0xc4,0xcf,0x51,0xdc,0xcc,0x3c,0x5f,0x17,0xcf,0x9f,0xc7,0x83,0x98,0x90,0x87,0x27,0x0e -,0x3c,0xb8,0x9c,0xf8,0x73,0x70,0xe8,0xfa,0x43,0xe4,0x39,0x73,0x03,0x9d,0xe6,0x2c,0x05,0x2d,0x48,0xc0,0x5c,0x05,0xc0,0x51,0x40,0x58,0xa6,0x14,0x0b,0x05,0x44,0x81 -,0x50,0xa0,0x58,0x28,0x16,0x0c,0x85,0x43,0x01,0x50,0xb0,0x50,0x2a,0x11,0x0a,0x04,0x46,0x01,0x11,0x18,0x5c,0x32,0x21,0x0a,0x88,0x44,0x02,0x75,0xda,0xea,0xef,0x7c -,0x65,0x6b,0x6f,0x3c,0x7d,0xbf,0x7f,0xe9,0xf5,0xf3,0xed,0xe7,0xaf,0xcf,0xfc,0xfe,0xba,0xc9,0xfd,0xbf,0xf8,0xe2,0xff,0xf3,0xf3,0xff,0xf6,0x78,0xff,0xdc,0x74,0x85 -,0x97,0x6f,0xae,0xad,0x17,0x5f,0xc7,0x9c,0x7f,0x1f,0xff,0x2e,0x56,0x3c,0x79,0x1f,0x0f,0xc1,0x7f,0xb7,0xc1,0xf6,0xbf,0xef,0xed,0x68,0xbf,0x51,0xaf,0x71,0x90,0xb7 -,0x7f,0xcf,0xa5,0x80,0x2b,0x5c,0xbf,0xcd,0xec,0x1b,0x8c,0x07,0x74,0x8e,0xcf,0x52,0x47,0x64,0xd9,0x49,0x7f,0x05,0x1d,0x2b,0xd0,0xbd,0x1b,0xe9,0xb8,0x03,0xef,0x9e -,0x27,0x83,0x4b,0xa7,0x10,0xff,0xd6,0xe1,0xfb,0x22,0x17,0x2d,0x40,0x10,0x54,0x80,0x50,0x07,0xb9,0xe4,0xc3,0xbd,0xf5,0xfb,0x8c,0x55,0xa5,0xb7,0x11,0x8e,0x2d,0x9b -,0x77,0xb6,0x36,0xed,0xdb,0xbb,0x7f,0x13,0xdb,0x1b,0x0f,0xc8,0x67,0x58,0x00,0x17,0x00,0x00,0x07,0x2f,0x1e,0x5c,0xbe,0x01,0xf1,0x1c,0x38,0x87,0xcb,0xe6,0x0a,0x00 -,0xe0,0xff,0xf1,0x50,0x80,0x38,0x5f,0xfc,0x21,0x2a,0xcb,0x4f,0xcf,0x7f,0xff,0xff,0xa6,0x41,0x30,0x54,0x28,0x45,0x0a,0x21,0x46,0x81,0x60,0xa8,0x58,0x2e,0x19,0x0a -,0x89,0xc4,0xa1,0x70,0xb0,0xe0,0x2a,0x23,0x0a,0x88,0x44,0x35,0x37,0x7d,0x66,0xdb,0xe3,0x9d,0x55,0x5e,0xf2,0x9d,0x61,0x92,0xef,0xba,0xc4,0xcd,0x2b,0xad,0x7f,0x8f -,0xb8,0xfa,0x27,0xd4,0x17,0x77,0xbd,0xe2,0x6b,0x1f,0xf7,0x74,0x0e,0x86,0x9a,0xeb,0x87,0xeb,0x5d,0x0d,0xa8,0x72,0x97,0xe0,0x7f,0x7a,0x21,0xa2,0xf3,0xbb,0xff,0x65 -,0x38,0x72,0x70,0xe4,0x3a,0x39,0xfc,0x7c,0x9c,0xcc,0xff,0xf0,0xff,0x2c,0x2d,0x14,0x4e,0x01,0xc4,0xf2,0xf0,0x1d,0x41,0x24,0x46,0xbe,0x6a,0xaa,0x31,0x55,0xcf,0xe4 -,0xb0,0x2d,0xf2,0xac,0x30,0x68,0xdc,0xb9,0x3e,0x23,0x89,0xc5,0xcc,0x2a,0xbc,0xc9,0x7b,0x7d,0xb0,0x0a,0xa8,0x87,0x91,0xe5,0x01,0x1d,0xf0,0xce,0x67,0x3b,0x2c,0x4f -,0x0a,0x27,0xd9,0xe5,0xe7,0xe6,0x1b,0xcd,0xad,0x9d,0x6f,0x13,0xc0,0x37,0x50,0x17,0xd1,0x95,0x18,0xe3,0x6d,0xa5,0x87,0xca,0xea,0xa6,0xb2,0x4f,0xd5,0x67,0x8e,0x29 -,0x49,0x61,0x88,0x51,0x14,0x12,0x21,0x4e,0x76,0x80,0x7f,0x0b,0xc3,0x14,0xee,0x94,0x2e,0x28,0x89,0xd8,0x5d,0xa0,0x9c,0x56,0x94,0xef,0x35,0x03,0xb8,0x7d,0x44,0x5b -,0xb9,0xad,0x47,0x97,0x98,0xf3,0x9e,0xff,0xa6,0xb8,0xc9,0xc8,0x1f,0xff,0xae,0xef,0xfc,0x13,0xfc,0x4e,0xf1,0xec,0x7a,0xcf,0x20,0x0f,0xc5,0xbd,0x80,0x06,0x80,0x0a -,0x01,0x49,0x01,0x61,0x22,0x58,0x50,0x17,0x0a,0x85,0xc2,0xc1,0x70,0xb0,0x90,0x2e,0x16,0x0b,0x84,0x42,0x62,0x11,0xa8,0x4c,0x52,0x11,0x09,0x84,0x42,0xe1,0x11,0xb5 -,0xbf,0xbf,0xab,0xdf,0x99,0x93,0x93,0x7e,0xdd,0x77,0xd7,0xe7,0x5d,0xfb,0x52,0xbe,0xbc,0x7d,0x7d,0x7b,0x3f,0xa7,0xda,0xf3,0xfd,0x2b,0xe7,0xbf,0xfc,0xf5,0xd0,0xf7 -,0x64,0x17,0x5d,0x3e,0x5f,0xc9,0xff,0xfb,0xf8,0x4f,0xd4,0xbf,0xd7,0xfe,0x8f,0x1f,0xd7,0xc8,0x7f,0x25,0xa8,0x51,0xfd,0x10,0xfc,0xe7,0x22,0x33,0xe3,0x0e,0xa1,0xe5 -,0x37,0xf5,0x77,0xf8,0x80,0xc2,0x59,0x9f,0x4f,0x8a,0xaf,0x0a,0x04,0x19,0xd4,0xfa,0x9e,0x6d,0x6d,0xfc,0xee,0xe3,0xc7,0xfa,0x7f,0x4e,0x00,0x62,0xfe,0xe9,0x55,0x9e -,0x75,0x82,0xaa,0xe9,0xb5,0x0c,0x22,0x03,0xf4,0x47,0xdd,0x1f,0xe0,0x3e,0x6f,0xed,0xfe,0xae,0xe8,0x18,0x01,0xfc,0xff,0x41,0xfd,0x00,0x70,0x08,0x81,0x18,0xac,0x00 -,0x04,0x7d,0x7c,0xaf,0x8d,0xfd,0xcd,0x10,0x09,0xbc,0x97,0x35,0x78,0x57,0xbf,0x33,0xcc,0x03,0x68,0x00,0x1e,0x08,0xbc,0x64,0x1b,0x1e,0xa8,0xdc,0x01,0xc6,0x60,0x02 -,0x22,0x60,0x70,0xff,0xf1,0x50,0x80,0x3d,0x7f,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x15,0x18,0x6c,0x60,0xb2,0x84,0xc5,0x4a,0xef,0x25,0x4a,0xaa,0x9c,0x08,0x50,0xdc,0x16 -,0x2b,0xf9,0x8e,0x4f,0x00,0x39,0x9b,0x0e,0x6b,0x19,0xec,0xa5,0x24,0x66,0x83,0x12,0x26,0xa4,0xb4,0x10,0xf7,0xcd,0x11,0xbc,0xaa,0x4e,0x33,0xe8,0x90,0x28,0x75,0x48 -,0xa5,0x28,0x82,0xa8,0xd2,0x8e,0x24,0x60,0x39,0x98,0x73,0x99,0xdf,0x56,0xe0,0x33,0xc5,0x94,0xf1,0x09,0x36,0x32,0x6c,0xa5,0xfd,0xd6,0x68,0x97,0x8c,0x8e,0xdf,0x01 -,0x93,0x53,0x44,0x26,0x9d,0x39,0x04,0xde,0x1e,0xa2,0x54,0x53,0xd8,0x48,0x85,0x09,0x10,0xd5,0xa0,0x76,0xc9,0x4d,0x55,0x54,0x14,0xfd,0xa1,0xf9,0xdb,0x43,0x3c,0x87 -,0x29,0xb1,0x50,0xb7,0xd1,0x56,0x3f,0x03,0x8c,0x71,0xa9,0x6a,0x91,0x12,0x7a,0xec,0x54,0xb9,0x14,0x62,0x4b,0xe1,0xfb,0xc5,0xb0,0xa7,0x44,0xb5,0x96,0x72,0x97,0x39 -,0x99,0x10,0x11,0x05,0x86,0x8c,0x07,0x48,0x21,0xa2,0x43,0xc0,0xae,0x51,0xd4,0xb3,0x8d,0xd3,0xc8,0x51,0x85,0xbe,0x61,0xac,0x63,0x01,0x37,0x9f,0x31,0xc1,0x11,0x42 -,0x1a,0x30,0x44,0x68,0xc5,0xd9,0x56,0x25,0x82,0x83,0x53,0x3c,0x92,0x53,0x13,0x51,0x1a,0x4c,0x25,0x90,0x94,0x91,0x0d,0xc9,0x84,0x95,0x49,0xbe,0x25,0x51,0x5a,0x68 -,0x80,0x80,0x04,0x69,0x92,0x23,0xab,0x1f,0xe2,0x58,0x41,0x93,0x89,0x98,0x29,0xf8,0x84,0x32,0x77,0xdf,0x2d,0xe0,0x9d,0x08,0xed,0x01,0xa5,0x45,0x80,0x66,0x8b,0x1c -,0x02,0xe4,0x00,0x04,0xfc,0xb1,0xd7,0x90,0xc4,0xce,0x03,0xb3,0x3d,0x79,0x0a,0xe1,0xc3,0x90,0x76,0xc6,0xa0,0x2e,0xe3,0x90,0x46,0x3b,0xf4,0x09,0xe5,0xb0,0x97,0x85 -,0x46,0x1b,0x17,0x2a,0x5c,0x99,0x52,0x53,0x17,0x7e,0x7b,0xf8,0xd8,0xaa,0x22,0xb8,0xd7,0xde,0xe9,0xbb,0x46,0xec,0xe5,0xf9,0xe1,0xe9,0x84,0x1d,0x63,0xdd,0xba,0x52 -,0xb0,0x3f,0xe1,0x0f,0x16,0x2e,0x07,0xa1,0x94,0x71,0x04,0xef,0xa4,0xbc,0x06,0xac,0x00,0xc0,0x9d,0x29,0x22,0xa6,0xa9,0x25,0x45,0x4c,0x1a,0xcc,0xda,0x54,0x19,0xc1 -,0xc8,0xa4,0x09,0x58,0x8d,0xa5,0x8e,0xcd,0xfc,0x36,0xcd,0x4e,0xe1,0x48,0xbb,0x90,0x51,0x9d,0x42,0x35,0x72,0x61,0x03,0x18,0xf9,0x3d,0xe2,0x65,0x33,0x9a,0xdd,0xb6 -,0x6c,0x9b,0x7a,0x5e,0x23,0xd6,0xe8,0x71,0xc1,0x0d,0x29,0x46,0xa5,0x2c,0xf6,0xd8,0x14,0xf4,0xac,0x23,0x76,0x80,0x7e,0xbd,0x23,0xb6,0xdb,0x83,0xf5,0x9b,0x03,0x79 -,0x78,0x07,0x2a,0x19,0x8c,0x8a,0xe0,0x8e,0xdc,0xc7,0xa8,0x32,0xea,0x53,0xd7,0xfa,0xac,0xf0,0xc3,0xcd,0x18,0x80,0x00,0x00,0x00,0x59,0x97,0x57,0x3d,0x70,0xf9,0x3b -,0x73,0xf2,0xfd,0x3d,0x01,0xe9,0x01,0xf1,0xe0,0x38,0x32,0x1d,0x94,0x07,0x67,0x01,0xc0,0x90,0xea,0xb0,0x92,0xf5,0xf1,0x02,0x00,0x08,0x1e,0x34,0xa9,0xfc,0x99,0xfc -,0x40,0x74,0x48,0x12,0x00,0x00,0x00,0x02,0x78,0xc8,0x3d,0x9d,0xb2,0x0e,0xff,0xf1,0x50,0x80,0x38,0x1f,0xfc,0x21,0x6a,0xcf,0xff,0xff,0xdf,0xff,0xf6,0xad,0x40,0xa8 -,0x58,0x90,0x24,0x0c,0x06,0x42,0xc2,0x42,0xa8,0x98,0x2a,0x24,0x0b,0x09,0x42,0x61,0x50,0x98,0x54,0x26,0x15,0x09,0x05,0x04,0xa1,0x31,0x09,0x1a,0xf5,0x4f,0x6f,0x7f -,0x6c,0x67,0x1e,0x77,0x7b,0xcf,0x3d,0xe4,0x91,0x4f,0x35,0xdd,0xb8,0xdf,0x26,0xaf,0x8b,0xe7,0xf9,0xd0,0xfc,0x5b,0xe7,0xe7,0x5e,0x3f,0x6d,0x7e,0x1f,0x02,0x47,0xb3 -,0xe7,0x45,0xfa,0xa8,0x7f,0xe7,0xd6,0x32,0x9c,0x5c,0x74,0xe5,0xa8,0xd9,0x33,0xd5,0xb1,0x73,0xbe,0x0a,0x1a,0x1f,0x83,0xbf,0xf7,0x6c,0x63,0x81,0xbf,0x76,0xff,0x8d -,0xc2,0x6d,0xda,0x20,0x54,0x3e,0x35,0x2e,0x9a,0x5f,0x77,0x29,0x5b,0x80,0xce,0xd7,0x54,0x4c,0xb6,0x35,0x90,0x80,0x97,0x52,0x41,0x31,0x2e,0x83,0x83,0x13,0x1f,0x3e -,0x29,0x00,0x1f,0xfa,0x78,0x5e,0xa1,0x94,0x99,0xc6,0xde,0xb9,0x37,0x58,0x6e,0x54,0xf5,0x52,0xab,0x22,0x82,0x79,0xd3,0x91,0xeb,0x55,0x3e,0x51,0xc2,0x46,0x76,0xb9 -,0x95,0x04,0x2e,0x41,0x46,0xc8,0x19,0x41,0xfd,0x9a,0x17,0x31,0x0e,0x5b,0xf7,0x22,0xd7,0x46,0xf3,0x0d,0x44,0x4c,0x7c,0xce,0xbb,0x5c,0x05,0x3d,0xd8,0x13,0x3b,0x82 -,0x00,0x17,0x52,0xf0,0x95,0x82,0xe0,0x17,0x02,0x8d,0x86,0xa2,0x42,0x30,0x50,0x4c,0x24,0x0b,0x8a,0x02,0x82,0x61,0x40,0x58,0x4e,0x13,0x0b,0x95,0x42,0x21,0x20,0xb8 -,0x44,0x2e,0x11,0x0a,0x85,0x02,0x21,0x30,0xaf,0xea,0xf1,0xde,0xbb,0xeb,0x9a,0xad,0xf9,0xdd,0xa5,0x6b,0xdf,0xdb,0xba,0xe3,0xe3,0xe6,0x38,0x78,0xf3,0x59,0xfa,0xfc -,0xfd,0x7f,0x6f,0xfd,0xfe,0x70,0x7f,0x9e,0x1b,0x79,0xec,0x67,0x63,0xab,0x82,0xff,0xe1,0xf7,0x4d,0x0c,0x3c,0xc9,0x7e,0xa9,0xdd,0xfe,0x27,0x1d,0xda,0xb5,0x7a,0x87 -,0xf1,0xed,0xea,0xb4,0x2f,0x97,0x88,0x9e,0x63,0xc5,0xd7,0x28,0x07,0x12,0x9a,0x05,0xfb,0x16,0x92,0xdb,0x10,0x89,0xb3,0x17,0x73,0x7e,0xe5,0xb3,0x60,0xfb,0x3c,0xfa -,0x67,0xe2,0xf1,0xa9,0x6e,0x2b,0x98,0xee,0x0e,0xe3,0x0a,0x38,0x9c,0xad,0xb7,0xc3,0x90,0x5e,0x32,0x05,0x76,0x24,0xe5,0x17,0xd8,0xd8,0x1b,0x8f,0xfe,0x3b,0xc4,0x56 -,0x5d,0x90,0x7b,0xff,0xb6,0x79,0xbf,0xb4,0xcb,0x2a,0xed,0xf1,0xb0,0x3c,0x99,0x16,0xe2,0x79,0xc0,0x00,0x1f,0x69,0x73,0x41,0xeb,0x20,0x18,0x0e,0x41,0xef,0x3c,0xfc -,0x5e,0x64,0xbb,0x2f,0xd6,0x25,0xe6,0xa8,0x2d,0x09,0xf0,0xb3,0xb5,0x8a,0xa9,0xa7,0x64,0x0a,0x81,0x40,0xf6,0xc0,0x00,0x10,0xee,0x3b,0x2a,0xb8,0x71,0x53,0x93,0x8f -,0x5f,0x0d,0xff,0x57,0xe0,0x00,0xa0,0xf3,0xe2,0x09,0xaa,0x1f,0x96,0x07,0xff,0xf1,0x50,0x80,0x35,0xdf,0xfc,0x21,0x0a,0xcb,0xff,0xff,0xdf,0xff,0xfc,0xa9,0x40,0xa8 -,0x58,0x30,0x14,0x0a,0x86,0x04,0x81,0x80,0xc8,0x5c,0x26,0x17,0x0a,0x04,0xc2,0xc1,0x40,0xa8,0x58,0x4a,0x14,0x0b,0x05,0x48,0x61,0x51,0x18,0x54,0x46,0x12,0x12,0x84 -,0x4a,0xe3,0xf4,0x9f,0x59,0xf3,0xed,0xe5,0xfa,0x4f,0xbf,0x8b,0xaa,0xf3,0xde,0x24,0x8c,0xf6,0xd9,0xc7,0x3a,0xce,0xe9,0xf7,0xe6,0x3f,0xeb,0x07,0x60,0xe8,0xb7,0x56 -,0xa4,0x3c,0x37,0x80,0x5c,0xce,0x90,0x7c,0x8c,0x8d,0x97,0xe8,0xe1,0x5a,0x7e,0xcf,0xfe,0x78,0xdd,0xdb,0xde,0xb5,0xc7,0xfd,0xc9,0xc1,0xba,0x6f,0xff,0xe6,0xea,0x7e -,0xc3,0x87,0x35,0xbe,0xc6,0xa9,0xc4,0x2b,0xf8,0xa2,0x26,0x63,0xef,0x47,0x61,0x16,0xd7,0xec,0xe7,0xe9,0x54,0xe2,0x7d,0x08,0x80,0xdc,0x27,0x7c,0xa1,0xe7,0xbb,0xbc -,0x27,0xe1,0x48,0xef,0x50,0xf3,0x01,0xc0,0x72,0x07,0x91,0xc4,0x7a,0xe7,0xf8,0xfb,0x87,0xc0,0x03,0x98,0x70,0x78,0x03,0xc4,0x02,0xaf,0x76,0xe3,0xc2,0xf4,0x00,0x1c -,0x00,0xb2,0xc7,0x08,0x0e,0x17,0x7e,0xca,0xde,0xf7,0xec,0x51,0x3f,0xa1,0x4c,0xe9,0xde,0x27,0x6e,0x68,0xc0,0xb3,0x18,0x78,0x80,0x00,0x9e,0x8a,0xd3,0xf3,0xa5,0xe5 -,0x18,0xa2,0x4c,0xbe,0xa1,0x76,0x35,0xa0,0xc2,0x02,0x9a,0x82,0x81,0x50,0xa0,0x58,0x48,0x16,0x0a,0x05,0x86,0x82,0x60,0xb8,0x58,0x44,0x17,0x09,0x05,0xc4,0xa2,0x71 -,0x08,0x5c,0x22,0x25,0x0b,0x85,0x46,0x26,0x30,0xaf,0xe1,0xf5,0xfd,0xb8,0xea,0xfe,0xce,0x39,0x45,0x3f,0x1f,0x6f,0x3f,0x3d,0x19,0xe6,0xfb,0xeb,0x5f,0x3c,0x73,0xb9 -,0xfe,0xff,0x6e,0x39,0xf8,0xf1,0xec,0x35,0x83,0xff,0xa4,0xba,0x39,0x22,0x6a,0xd0,0x9d,0x0b,0x81,0xff,0x0e,0xce,0xcf,0xea,0xab,0x65,0x2a,0xa3,0x57,0xf4,0xde,0xd3 -,0x71,0xfe,0xbb,0xce,0x80,0x97,0xc0,0xda,0x6b,0x09,0xec,0x1c,0xa8,0xab,0x88,0x3d,0xd5,0x57,0x94,0xf3,0x9e,0x1d,0x97,0xfd,0xf1,0xe7,0xe7,0xe1,0xa5,0xd9,0x79,0x07 -,0x99,0x79,0x7b,0x69,0x5f,0x85,0xc9,0xf8,0xf8,0xbd,0x0d,0xc4,0x56,0xbf,0x36,0xbf,0xbc,0x6f,0x8e,0x38,0xb9,0x00,0xf6,0x83,0x27,0x2c,0x5f,0x0c,0x59,0x20,0xac,0x3b -,0xde,0xd4,0x10,0x3d,0x3a,0x38,0x5c,0x19,0x30,0xf9,0x8a,0x3c,0x00,0x7b,0x7d,0x70,0x0b,0x8a,0x03,0xcc,0xf2,0x1e,0x3e,0x01,0x3c,0x0e,0x0f,0x37,0x13,0x9f,0x63,0x87 -,0xc3,0x9f,0x3e,0x85,0x47,0x1f,0x1b,0x79,0x71,0x2a,0x00,0x4b,0xc7,0x19,0xa5,0x40,0x06,0x68,0x82,0xd5,0xbe,0x10,0x0d,0xca,0x87,0xfe,0x80,0x1c,0xff,0xf1,0x50,0x80 -,0x35,0x9f,0xfc,0x21,0x0a,0xc9,0xff,0xff,0xff,0xff,0xfc,0xab,0x41,0x30,0x4c,0x28,0x27,0x0b,0x05,0x43,0x02,0x60,0xa8,0x5c,0x2a,0x17,0x12,0x05,0xc2,0xc1,0x80,0xa0 -,0x54,0x26,0x14,0x12,0x90,0x42,0xa2,0x31,0x28,0x4c,0x2a,0x13,0x10,0x8d,0xf1,0xfa,0x4f,0xbf,0xf8,0xff,0xf8,0xbd,0xb5,0xaf,0xb5,0xfe,0xbf,0x9f,0x6f,0x0e,0x37,0x55 -,0x7a,0xca,0x5d,0xe7,0x1c,0x77,0x7d,0xe5,0x6b,0xaa,0x7c,0x7f,0xcf,0xc0,0xde,0xf8,0x6a,0xfd,0xbf,0xa3,0xdc,0x34,0x93,0xfc,0x55,0x71,0x74,0x31,0xfa,0xff,0x00,0x81 -,0xc2,0x7b,0xfe,0x0f,0x1b,0x86,0xef,0x3d,0xb8,0xf4,0x3c,0x89,0x9b,0x5f,0x85,0xda,0x78,0x34,0xbd,0xfd,0x21,0x12,0xf6,0x94,0x19,0xac,0x9c,0xe3,0x99,0x78,0x6e,0x3f -,0x3d,0x39,0x08,0xcd,0x79,0xf6,0x3e,0xaf,0xef,0xff,0x8d,0x13,0xf2,0x34,0x76,0x7f,0xca,0x50,0xf4,0xbc,0x73,0xed,0x3e,0x9d,0x75,0x6b,0xbc,0xe2,0x2c,0x01,0xe3,0xc4 -,0x70,0x37,0x01,0xe5,0x8d,0x5b,0x88,0x3c,0x41,0x09,0xba,0x05,0x9d,0x83,0xc8,0x01,0xcc,0x00,0x3c,0x3c,0xc3,0xd6,0x1e,0xd3,0xd7,0x29,0xee,0x34,0x7f,0xe1,0xd5,0x76 -,0xba,0xf1,0xad,0xca,0x22,0xa9,0x5f,0xe3,0xf9,0xbf,0x77,0xdc,0x0f,0x08,0x02,0x80,0x09,0x9e,0xc5,0x45,0x49,0xf7,0x49,0x58,0x17,0x01,0x00,0x14,0xf0,0x16,0x0a,0x05 -,0x82,0x82,0x21,0xb0,0x60,0x2c,0x34,0x0a,0x85,0x04,0xa1,0x61,0xa8,0x5c,0x6a,0x13,0x0b,0x85,0x42,0x61,0x10,0x98,0x44,0x26,0x11,0x12,0x85,0xc4,0x23,0x71,0xfa,0xfe -,0xcf,0xf3,0xf9,0xae,0xab,0xf3,0x75,0x6f,0xc6,0xf3,0xc6,0x5e,0x69,0x29,0xe7,0xbb,0xfd,0x7d,0x71,0xdf,0x7a,0xf3,0xeb,0x86,0xb5,0x63,0xd1,0xa7,0xa7,0x2e,0x1f,0x69 -,0xfc,0x2f,0xf3,0x3f,0x5f,0x8f,0x88,0xfd,0xf5,0xeb,0xbb,0x17,0x97,0x29,0xe2,0x79,0x75,0xfb,0x4b,0x49,0x74,0xff,0xff,0xd8,0x7b,0xe1,0x68,0xbc,0x23,0xbb,0x54,0x1d -,0x47,0x83,0xc2,0xf7,0xc7,0x61,0xf3,0x0d,0x9c,0x13,0x88,0x85,0x55,0x51,0xdc,0x59,0x51,0xe2,0xf0,0xf3,0xe3,0x7b,0x6c,0xe8,0xe9,0x77,0xed,0x20,0x5a,0x79,0x9d,0x3e -,0xd0,0xdf,0xbb,0xc0,0x37,0xfb,0xf8,0x3f,0xf3,0xd1,0xf6,0x60,0xa1,0xe6,0x1a,0x7f,0xfd,0x82,0xe7,0x87,0xce,0x1e,0x5f,0x04,0x01,0x20,0xf1,0x78,0x79,0xf9,0x00,0xf0 -,0x7d,0x04,0x47,0x3f,0xeb,0x40,0x48,0x73,0xfd,0x55,0x7b,0x94,0x7f,0x87,0xfc,0xba,0xa5,0x0b,0x63,0x40,0x1f,0x94,0x44,0xf8,0x01,0xe6,0x00,0x00,0x1e,0x60,0x00,0x79 -,0x42,0xce,0xc0,0x2e,0x56,0x26,0x50,0x38,0xff,0xf1,0x50,0x80,0x36,0x5f,0xfc,0x21,0x0a,0xcf,0xff,0xfd,0xff,0xff,0xfc,0xa9,0x50,0xa0,0x58,0x48,0x28,0x11,0x05,0xc3 -,0x21,0x70,0xc0,0x5c,0x28,0x16,0x0b,0x85,0x02,0xe1,0x60,0xc0,0x58,0x28,0x16,0x0a,0x85,0xc2,0xa1,0x30,0xa0,0x48,0x26,0x21,0x09,0x85,0x44,0x61,0x50,0x88,0x4c,0x42 -,0x26,0xbd,0xe7,0xc7,0x7f,0x3f,0xcf,0xfa,0x7f,0xd3,0xb9,0xfa,0xfd,0xb8,0xcd,0xdc,0xca,0xb9,0x45,0xab,0x3c,0xba,0xf9,0x49,0xc7,0x5d,0xd7,0xff,0xaf,0xd0,0xf1,0x68 -,0xa3,0xfc,0x37,0x1f,0x91,0x6d,0x0b,0xfa,0x7b,0x36,0x3c,0x9f,0x33,0xdb,0x76,0x86,0xff,0xa1,0xde,0x4d,0xcc,0x45,0x76,0xeb,0x9a,0xb9,0xb4,0xa8,0x1b,0xfb,0x11,0xd4 -,0x3e,0xff,0xdd,0x6a,0x2a,0x28,0xbb,0xf1,0x40,0xc5,0x21,0x77,0xd6,0xa5,0x31,0xeb,0x10,0xbe,0xf4,0x47,0xa0,0x7e,0xeb,0x3a,0xd0,0x81,0xac,0xc5,0x06,0xd3,0x86,0xbe -,0xc5,0x3e,0x57,0x8c,0xae,0x22,0x3c,0x6e,0xe3,0x0c,0x33,0xee,0xeb,0xf9,0xa8,0x0e,0x5f,0xc8,0x57,0xf9,0xb7,0x28,0x8f,0x74,0xc8,0x4f,0xd4,0xb2,0x58,0x6a,0x58,0xd9 -,0x02,0xaf,0x07,0xfe,0x9f,0x5b,0xd7,0x3d,0x70,0xff,0xd6,0x29,0x49,0x40,0x12,0xee,0x76,0x1f,0xbe,0x40,0xe2,0x95,0xc9,0xae,0x2e,0x4c,0xf2,0x38,0x84,0x59,0xe7,0x8e -,0xe5,0x80,0x07,0x90,0x00,0xa5,0xc4,0x81,0xeb,0x1d,0xcf,0x70,0xee,0x96,0x01,0x78,0x81,0x46,0xc2,0x50,0xa0,0x58,0x24,0x15,0x0a,0x0a,0x04,0xc4,0x40,0xa8,0x58,0xce -,0x12,0x0b,0x85,0x02,0xe2,0x12,0x28,0x44,0x4e,0x11,0x32,0xff,0x1a,0xfd,0x3e,0x3b,0xbf,0xd7,0xfa,0x7a,0xbb,0xdb,0xdb,0x9d,0xc6,0x49,0xaf,0x3e,0xfe,0xdd,0xbc,0xdf -,0xfe,0xdf,0xf8,0xf7,0xe3,0xfc,0x7f,0x5b,0xe2,0xab,0xfc,0x74,0x3e,0x2f,0xba,0x3a,0x5f,0x98,0xd0,0x9d,0x4e,0xfd,0x53,0xdc,0x41,0xd4,0xf9,0x11,0x22,0xf6,0x17,0xee -,0xeb,0xa3,0x61,0x68,0xc2,0x6e,0xad,0x12,0x65,0xa5,0x7e,0xc8,0xc1,0xcf,0xe8,0xbb,0x9d,0x5e,0x16,0x47,0x72,0x87,0x2e,0x3c,0xaf,0xd5,0xbf,0x88,0x9c,0xb8,0x74,0x4e -,0x76,0xc8,0x5e,0x60,0x0e,0x65,0x39,0x9f,0x2e,0x56,0x87,0x1a,0xa1,0x93,0xb5,0xfb,0xbc,0xe0,0x26,0x7e,0x7c,0xaf,0x22,0x1b,0x37,0xf3,0xdf,0xef,0xb7,0xf3,0xd4,0x4e -,0xf6,0xa2,0x0f,0x29,0xd1,0xce,0x07,0x5b,0xe2,0xe9,0x9b,0xa7,0xa4,0x08,0xc0,0xa7,0xc3,0xd1,0x7d,0xff,0x96,0x80,0x88,0x12,0x1f,0x84,0x0c,0xe1,0x6a,0x6b,0xc9,0xaf -,0xd2,0x0a,0x4b,0xf0,0xf0,0x00,0x35,0x2e,0x4c,0x1e,0xd0,0xb9,0xc0,0x9c,0x0a,0x00,0x39,0xc4,0x13,0xbd,0x3a,0xc4,0x00,0x4c,0x50,0x0e,0xff,0xf1,0x50,0x80,0x38,0xbf -,0xfc,0x21,0x0a,0xcb,0xff,0xfe,0xff,0xff,0xff,0xaa,0x41,0x30,0xd0,0x30,0x24,0x0c,0x06,0x42,0xe1,0x40,0xb0,0x50,0x2e,0x24,0x0a,0x85,0x03,0x01,0x60,0xa0,0x94,0x2c -,0x15,0x13,0x05,0x02,0xa3,0x20,0x98,0x54,0x26,0x51,0x13,0xe3,0xf3,0x5f,0x7e,0x7e,0x7e,0xbf,0xe7,0xfd,0x7d,0x5f,0x1c,0xfc,0x78,0x8a,0xc4,0x0b,0xa1,0xd3,0xc5,0xd5 -,0xcd,0x5d,0xff,0xeb,0xf4,0x3a,0x07,0x21,0xe7,0x2d,0x9f,0x4e,0xda,0x7f,0xae,0xa5,0xf4,0x6e,0xa4,0xeb,0x06,0x7f,0x4f,0xa1,0x69,0x2e,0x9a,0x9d,0xcc,0x7c,0xf4,0x3b -,0xe6,0x8f,0x57,0xff,0xef,0x26,0xc8,0x2d,0xd9,0xf2,0xf5,0x73,0x9f,0xe5,0x8e,0x03,0xf2,0x1f,0xd2,0xac,0x51,0x39,0xa1,0x70,0xaa,0x5b,0xba,0xdc,0x14,0xb5,0x5e,0xd5 -,0x54,0x33,0xe8,0x53,0x84,0x4d,0xbd,0x15,0xf4,0x7b,0xe3,0x36,0x8b,0xc4,0x86,0xc8,0x76,0xf8,0x30,0xcf,0x94,0x9c,0x39,0x7c,0x39,0x2b,0xbb,0xb5,0xc4,0xcf,0x3f,0x65 -,0x87,0x94,0xce,0x4e,0x09,0x6a,0x73,0xc8,0x84,0x1f,0xd1,0x83,0xc1,0xb2,0xd5,0xeb,0x5c,0x2e,0x3d,0x57,0x79,0xc6,0x99,0xa8,0xaa,0x00,0x03,0x87,0x98,0x0f,0x3e,0x3c -,0x0e,0x60,0x30,0x33,0x4f,0xc9,0x2b,0x3c,0x26,0x8a,0x1e,0x2a,0x95,0x31,0x38,0xf5,0xcd,0xb5,0x59,0x5e,0xdd,0xf5,0x8f,0xdc,0xe2,0x7a,0xf9,0xa5,0x05,0x4f,0x5c,0x7f -,0x24,0x77,0xbb,0xab,0x77,0x91,0x7b,0x75,0x41,0x30,0x12,0x01,0x4d,0x01,0x61,0x10,0x58,0x28,0x15,0x1b,0x06,0x02,0xc3,0x50,0xa0,0x54,0x2c,0x37,0x0b,0x0d,0x42,0xc1 -,0x20,0xb9,0x04,0x2e,0x15,0x0b,0x84,0x42,0xe1,0x11,0xa8,0x40,0x22,0x13,0x8f,0x8f,0x0f,0xe7,0xc3,0xaf,0xee,0x49,0xd6,0xf7,0x92,0xe9,0xab,0xe7,0xef,0xbf,0x1e,0x5c -,0x73,0xeb,0x5f,0xf9,0xff,0xf4,0xff,0xd7,0xf3,0xeb,0x7f,0xfe,0xa3,0xcd,0x62,0x8d,0xfb,0xe5,0xfd,0x96,0xbe,0x30,0xe8,0x77,0x75,0xbb,0xbd,0xdd,0x75,0x23,0x83,0x67 -,0x59,0x0a,0xe5,0x97,0x87,0x3d,0xfe,0x60,0x71,0xe5,0xe1,0xdd,0xef,0xef,0x27,0x1f,0x3f,0x0a,0x83,0x3b,0x3b,0xe5,0xd9,0xb4,0x35,0x95,0x33,0xce,0x1c,0x8e,0x9e,0x77 -,0x82,0x33,0x7c,0xae,0xef,0x0a,0xef,0x9e,0xdf,0xb1,0x05,0x55,0x5f,0x20,0x88,0xf0,0xd9,0xb1,0x11,0xcb,0xe9,0xef,0xfc,0x71,0x49,0x20,0xb6,0xaf,0x7f,0x36,0x1e,0xc6 -,0x05,0x69,0x35,0xdc,0x7e,0xe1,0x4f,0x58,0x01,0xbc,0x3a,0x7b,0x2f,0x2f,0x85,0x40,0x7b,0x60,0x00,0x3c,0x9e,0x5e,0xc4,0x00,0xe1,0x79,0x44,0x0b,0x0f,0x6c,0x4d,0x0e -,0x07,0x90,0xf2,0xae,0x0f,0x8f,0x00,0x1d,0x01,0xed,0xf4,0x82,0x00,0x48,0xe8,0x74,0x00,0xf2,0x00,0x12,0x19,0x81,0x05,0x64,0x83,0x9f,0x89,0xcc,0x00,0x5c,0x07,0xff -,0xf1,0x50,0x80,0x3c,0x9f,0xfc,0x21,0x0a,0xcb,0xff,0xff,0xff,0xff,0xfb,0xa3,0x50,0xa0,0x5c,0x2c,0x12,0x0a,0x06,0x04,0x81,0x70,0xc8,0x5c,0x2a,0x17,0x0a,0x05,0x84 -,0x81,0x60,0xc0,0x58,0x28,0x35,0x0b,0x85,0x44,0xc1,0x50,0x98,0x54,0x28,0x25,0x0a,0x09,0x42,0x41,0x50,0x88,0xd5,0xf6,0xaf,0xfc,0xbf,0x8f,0xcf,0xf8,0xf7,0x9d,0xcf -,0xaf,0x5e,0x7b,0x54,0xc6,0xaa,0xa3,0x8d,0xe6,0x9a,0xde,0xf5,0x4f,0x3e,0x3a,0xfd,0x7f,0xf6,0xe8,0x38,0x73,0x7a,0xef,0xfa,0xf6,0x76,0x6e,0x8b,0xf0,0xf9,0x97,0xfa -,0x23,0xed,0x7a,0x6e,0x9a,0x11,0xbb,0xd5,0x7c,0x0e,0x98,0xf7,0x72,0xd9,0x3d,0xbf,0x4a,0x85,0x52,0x0b,0xdd,0xae,0xf5,0xc1,0xae,0x10,0xb0,0x27,0x71,0xde,0x10,0x4e -,0xa0,0xf4,0x49,0x23,0x35,0x1d,0xb7,0x6b,0xf2,0xbe,0x03,0xef,0x51,0xed,0x01,0xf6,0x3d,0x6d,0x57,0xbd,0x71,0x72,0x83,0x9f,0xc2,0xb6,0x41,0xa9,0x38,0x61,0xf0,0x74 -,0xb7,0x54,0x8e,0x2d,0x0c,0x7d,0xd8,0x80,0x70,0xe0,0xae,0x4e,0x69,0x0d,0x10,0x63,0x48,0xf9,0xa5,0x07,0x7b,0x70,0x11,0xf0,0xb3,0x9a,0x5e,0x37,0xae,0xe8,0xfd,0xa7 -,0xda,0xa8,0x74,0xc0,0x1e,0x65,0x14,0x78,0xd8,0xfd,0xb8,0x6d,0x4f,0x3f,0x14,0x55,0xec,0xb9,0x80,0x87,0x39,0xab,0x9a,0xdf,0x8c,0x14,0xe4,0xf9,0x14,0x8f,0xe7,0xb0 -,0xf2,0x5e,0xc0,0x4e,0xf1,0x9d,0x95,0xd4,0xfe,0x40,0x00,0x16,0xbf,0x47,0xe6,0x04,0x71,0x8e,0x6e,0x40,0x72,0x2c,0x00,0x14,0x28,0x02,0x92,0x02,0xc1,0x30,0xb0,0x54 -,0x28,0x25,0x0b,0x0a,0x02,0xc1,0x80,0xb0,0xd0,0x2c,0x35,0x0b,0x05,0x42,0xc1,0x71,0x28,0x44,0x2e,0x11,0x0b,0x89,0x44,0xe1,0x10,0xb8,0x44,0x4a,0x11,0x10,0x04,0xff -,0x4f,0xe9,0xfe,0xdf,0xd7,0xe3,0x3e,0x66,0x7f,0x3f,0xa5,0x4b,0xca,0x88,0x95,0xc6,0xe7,0xc7,0xcf,0xe3,0xde,0xb7,0x5e,0x78,0xf1,0xff,0x3f,0xd1,0xc7,0xfe,0xe3,0xf0 -,0x1f,0xa5,0xbf,0x5d,0xf7,0x6e,0xd6,0xa9,0xe3,0xdd,0xca,0xfc,0xfc,0xfa,0x6a,0x0b,0x66,0x5f,0xfb,0x59,0x94,0x50,0xdb,0xf7,0xbd,0x95,0xa6,0x34,0x59,0xe8,0x0a,0x2a -,0x4f,0x1f,0xff,0xfe,0xca,0x38,0x5f,0xdd,0x8d,0x52,0x75,0xef,0xb5,0x2f,0xb6,0x84,0xec,0xa2,0xde,0xbe,0x3f,0x27,0x5b,0x88,0x8d,0xdb,0xeb,0x12,0xf7,0x91,0xe1,0xe5 -,0x69,0x74,0x70,0xe1,0x69,0x15,0x00,0xcb,0x7b,0x50,0x56,0x37,0x32,0x67,0x19,0xcf,0xd7,0xf9,0x17,0x61,0xe6,0xfe,0x23,0xcb,0x06,0x4c,0x34,0xfc,0xc0,0xdf,0xe5,0xe8 -,0x9f,0xe4,0xe7,0x14,0xf8,0x60,0x01,0x0e,0x37,0x96,0x07,0x05,0x01,0xd2,0x47,0x97,0xce,0x00,0xe5,0xcf,0x97,0xc8,0x51,0xcd,0xc3,0x97,0x19,0x72,0x3a,0x97,0xe7,0xe5 -,0xce,0x75,0xc7,0xcb,0xc0,0x0e,0x72,0x9e,0xe2,0xc0,0x89,0x28,0xc9,0x6d,0x28,0x9f,0x6e,0x1d,0x0d,0xa9,0x30,0x80,0xad,0x70,0xe5,0xe8,0x88,0x7a,0xa9,0x00,0x41,0x2e -,0xe0,0x04,0x07,0xff,0xf1,0x50,0x80,0x3a,0x9f,0xfc,0x21,0x0a,0xcb,0xff,0xf5,0xff,0xf5,0xfc,0xa6,0x50,0xa0,0x60,0x4e,0x14,0x0c,0x05,0x86,0xe2,0x40,0xb0,0x50,0x2a -,0x17,0x0b,0x05,0xc3,0x01,0x40,0xa8,0x98,0x6a,0x33,0x12,0x84,0x82,0xa1,0x30,0x88,0x54,0x22,0x15,0x08,0x91,0xaf,0x5e,0x3e,0x2b,0xdf,0x5e,0xdd,0x7e,0xda,0xe3,0xbd -,0x54,0xe3,0xbc,0x9a,0xca,0x8b,0xaa,0xd5,0x4d,0xe9,0x9a,0xf6,0xe7,0x7f,0xfb,0xfe,0xfd,0x07,0x7e,0xe4,0x8e,0xab,0x57,0x61,0xed,0x5e,0xb8,0x5f,0x6b,0xf9,0xd9,0xf4 -,0x2f,0x7f,0xdf,0xfd,0x55,0xa6,0x5b,0xd9,0x96,0xf4,0xcb,0xbb,0x42,0xf2,0xce,0x57,0xf4,0xc6,0xd0,0x7a,0xfa,0x30,0xa6,0x87,0xb7,0x46,0x53,0x3e,0x41,0xf3,0x1e,0x84 -,0x4e,0xe5,0x1f,0x1e,0xff,0x32,0x7e,0xbe,0x8d,0xd3,0x97,0x0f,0x0a,0x73,0xe7,0xd4,0xd3,0xa7,0x48,0x1d,0xd2,0x5f,0x6b,0xb2,0x90,0x90,0x0e,0xff,0x8b,0x2a,0x1c,0x8d -,0x39,0xcd,0xe8,0x09,0x0b,0xe5,0x3a,0x71,0xb5,0xbe,0x0e,0x5c,0x2a,0x8a,0xb7,0x67,0x55,0x3b,0xfd,0xda,0xa6,0xca,0xf5,0x75,0x7e,0x13,0x8b,0xa7,0xb9,0xee,0x3f,0xc0 -,0x79,0xd4,0xba,0x24,0x0e,0xee,0xc7,0xf8,0x47,0xc7,0x94,0xf0,0x1c,0x41,0x3a,0x7a,0xfc,0x7d,0x94,0xd8,0x03,0xe4,0x73,0xfb,0x81,0x05,0xa5,0xdf,0xdb,0xff,0x76,0xf1 -,0x34,0x6f,0xf1,0xe4,0x28,0x59,0x59,0x1c,0x78,0xb9,0x02,0xb3,0x04,0x1e,0x60,0x10,0xe9,0x72,0x52,0xd0,0x5c,0x14,0x00,0xb0,0x14,0xd0,0x16,0x0a,0x85,0x08,0xc3,0x80 -,0x98,0x54,0x2c,0x38,0x13,0x05,0x42,0xe1,0x60,0x90,0x5c,0x22,0x15,0x09,0x05,0x42,0xe1,0x20,0xb8,0x94,0x66,0x15,0x08,0x88,0xc2,0x23,0x5f,0xdf,0x35,0xeb,0xcc,0xfd -,0x32,0x7d,0xfb,0xe6,0x6e,0xea,0xe9,0x7f,0x5f,0x3f,0x7f,0x5c,0x67,0x7e,0xde,0xab,0x8e,0xfc,0xee,0xbf,0x1e,0x1f,0xed,0xae,0x06,0x84,0xb1,0xdc,0xeb,0xdd,0x39,0x8f -,0xfa,0xb7,0xe6,0xe3,0xdc,0x3f,0x6b,0xf5,0xa7,0x7e,0x4f,0xa4,0xd2,0xdf,0x4a,0xc5,0xeb,0xa3,0x6d,0xa9,0x4f,0x76,0x59,0x01,0xe1,0x83,0xc5,0x2d,0xd2,0x2f,0xc4,0xf7 -,0xb6,0xf0,0x0e,0x1c,0x6f,0x8f,0x57,0xa5,0xd2,0x8e,0x07,0x6f,0xe0,0x81,0xc1,0xab,0xe3,0x78,0x70,0xd9,0x90,0x35,0xd3,0xbb,0xa7,0xd6,0xe9,0xe6,0x09,0x7b,0xb0,0xa7 -,0xe6,0xf2,0x15,0x57,0x21,0x27,0x2f,0xdc,0x00,0x25,0x6f,0xc3,0x77,0xa6,0xff,0x7e,0x1a,0xbd,0x57,0x44,0x00,0x30,0x93,0xa4,0xe4,0x93,0x97,0xbf,0x6f,0x90,0x1e,0x4d -,0x82,0xcf,0x0f,0xc2,0xe8,0xf0,0xc7,0x40,0x03,0x8b,0x9f,0xb9,0xe4,0x07,0xa9,0xf0,0x1c,0x98,0xe3,0xec,0xf1,0x36,0x01,0xe7,0x13,0x3e,0x20,0x7f,0x21,0xff,0x1f,0xd6 -,0x38,0xbc,0xdc,0xce,0x7c,0x87,0x88,0xa4,0x81,0xbc,0x67,0xf9,0xe7,0x3b,0x81,0xdf,0x77,0x20,0x00,0x40,0x14,0x03,0x80,0xff,0xf1,0x50,0x80,0x3b,0x5f,0xfc,0x21,0x0a -,0xcb,0xff,0xfb,0xff,0xfe,0xf8,0xa2,0x41,0x40,0xd8,0x30,0x25,0x0b,0x06,0x02,0xc1,0x51,0xa0,0xd8,0x68,0x36,0x12,0x89,0x04,0x61,0x50,0x98,0x54,0x26,0x15,0x09,0x88 -,0x42,0x62,0x11,0x3e,0x77,0xcf,0xc6,0xf7,0x3e,0x35,0xf6,0xe2,0xa7,0x15,0x39,0xde,0x5d,0xed,0xaa,0x8a,0xb7,0x5b,0xab,0xc8,0x5f,0xfe,0xbf,0x7f,0x23,0xa8,0xe7,0xc6 -,0xe4,0xef,0xec,0xf4,0x36,0x7a,0x0c,0xdc,0xad,0x1c,0xef,0xa9,0x2f,0xcf,0xd5,0x60,0x2b,0x54,0xcb,0xcf,0xfb,0xa7,0x45,0xcf,0xa3,0x91,0xcf,0x0d,0x78,0x87,0x4e,0xff -,0xff,0xbe,0x89,0x1b,0x7f,0x55,0x00,0x1d,0x79,0x69,0xb5,0x35,0x98,0x31,0x79,0x7c,0xe4,0x5c,0xf6,0xfd,0x6d,0x4b,0xf3,0x8d,0x21,0xbb,0xfd,0xaf,0xe2,0x0c,0x1a,0xb5 -,0x40,0x44,0x29,0x93,0x8a,0x21,0x9c,0x6a,0x43,0xae,0x98,0xb0,0x3e,0xcc,0x9d,0xdb,0x47,0x4b,0x5c,0x10,0x3e,0x28,0xe3,0xc3,0x32,0xf8,0x1c,0x3f,0x97,0x75,0xf6,0x2d -,0x12,0xef,0x58,0xf7,0x6b,0xdd,0x67,0x96,0xaa,0xfe,0x2e,0xb7,0x50,0xcb,0xed,0x13,0x2d,0xc9,0x03,0x9f,0x9c,0x73,0x0f,0xc8,0x0f,0xff,0xa9,0xc9,0x69,0x65,0xc6,0x0a -,0x49,0xde,0x7b,0x18,0x00,0xb9,0xc4,0xa5,0xc4,0x8d,0x17,0x7f,0xbe,0x0a,0xa4,0x97,0x77,0x72,0xf9,0x4f,0x45,0xf1,0xc1,0xed,0x89,0x51,0x17,0x70,0x04,0x40,0x4c,0x05 -,0x2c,0x05,0x82,0x62,0x41,0x30,0x50,0x4c,0x24,0x0b,0x09,0x02,0xc3,0x71,0xb0,0x88,0x4c,0x14,0x0b,0x85,0x82,0xe1,0x51,0x38,0xd4,0x8e,0x11,0x19,0xfe,0x9f,0xb4,0x4e -,0x2b,0xd5,0x4d,0x65,0x15,0xed,0xeb,0xcf,0x7f,0xe7,0xed,0x7f,0x3f,0xbf,0xe7,0x26,0xb7,0xd3,0xb7,0x17,0xef,0xf8,0xb9,0xa1,0xd1,0x27,0xeb,0x4f,0xea,0xbf,0x87,0xad -,0x7e,0xe2,0x3c,0xbf,0xcf,0xbd,0x70,0xa2,0x69,0xbd,0x39,0x7c,0xa7,0xf1,0x70,0x9a,0x0a,0x17,0x1e,0xcf,0xeb,0xdf,0x0b,0x0b,0xfc,0x92,0xfd,0x2d,0xd7,0x5a,0x1d,0x7c -,0xbf,0xae,0xbf,0x67,0x2c,0x98,0xf3,0xfc,0x67,0x4a,0xd9,0x3b,0x8c,0xc0,0x15,0x75,0x79,0x07,0x9f,0x2d,0x17,0x04,0x00,0x4b,0x8a,0xff,0x5f,0xb3,0x1f,0x4e,0x00,0x76 -,0x05,0xe1,0x5f,0x55,0x21,0xcb,0xbe,0xfa,0xa8,0xfc,0x77,0x28,0x46,0xf1,0xfc,0x04,0x07,0x31,0xce,0xed,0x7e,0xf2,0x5f,0x95,0xe0,0x7c,0xb1,0xa9,0xfe,0xd2,0x80,0x01 -,0xbb,0x9b,0x86,0xde,0xf2,0x37,0x37,0xb4,0x34,0x19,0x5d,0xff,0x1a,0x1e,0x6a,0x80,0xe3,0x3d,0x2e,0x03,0x9b,0x97,0x30,0x21,0xfd,0xa8,0x03,0xcd,0x71,0x47,0x68,0xf8 -,0xd3,0x36,0x2b,0xcf,0xe6,0x0f,0x7d,0xe4,0x8e,0x99,0xb0,0x03,0xcd,0xf0,0xe0,0xe4,0xb3,0x97,0xe1,0xe8,0x52,0x95,0x37,0xa9,0x03,0xc8,0x00,0xa9,0xf3,0xe6,0xb8,0xe4 -,0xae,0x3d,0x8b,0xdc,0x1c,0xc0,0x3c,0xa2,0xc7,0x48,0x90,0x07,0x03,0x39,0xf3,0x80,0x1c,0xff,0xf1,0x50,0x80,0x3a,0xdf,0xfc,0x21,0x0a,0xcb,0xff,0x79,0xfe,0xff,0xd8 -,0xa2,0x41,0x40,0x98,0x28,0x18,0x13,0x05,0x02,0xc1,0x40,0xb0,0x50,0x6c,0x15,0x0b,0x09,0x06,0xc2,0x80,0xa8,0x98,0x28,0x23,0x0a,0x84,0xc2,0xa1,0x32,0x88,0x80,0x2e -,0xf3,0xed,0xd4,0xf8,0xfd,0xbc,0xf5,0xeb,0x55,0xad,0x56,0xf1,0x96,0x95,0x2a,0x5e,0x1a,0x65,0x94,0xe3,0xfe,0xff,0xc8,0xd6,0xfa,0xbe,0x0d,0x45,0x3d,0xcc,0xdb,0x7f -,0x51,0x6f,0x65,0xc2,0xc3,0xd5,0x1e,0x20,0xf7,0x7a,0x7a,0xb5,0xee,0xdb,0x5f,0x6d,0x03,0x36,0x90,0xf8,0xa6,0x62,0x7f,0xf9,0xf0,0x43,0x5e,0xe7,0x3d,0xf4,0x85,0xa1 -,0xcf,0xe1,0x56,0x50,0xdd,0x73,0x49,0xb2,0x6f,0x1f,0x3a,0xe6,0x48,0xfd,0x3d,0x17,0xe8,0xf0,0x96,0xf2,0xa5,0xe7,0x90,0x1c,0x86,0x2a,0x49,0x80,0x40,0xfc,0x76,0x42 -,0x94,0xa6,0xfc,0x51,0xdc,0x32,0x4e,0xa2,0x22,0xe9,0xcd,0xc6,0x74,0xe3,0xe2,0xe0,0x10,0x72,0xd4,0xd7,0xd6,0xb1,0xd9,0x50,0x23,0x8c,0x12,0x93,0x39,0x26,0xe9,0xda -,0x6c,0x3b,0x3d,0x20,0x04,0x4c,0xbe,0x6f,0xcc,0x70,0xaa,0x2d,0xfb,0x6f,0x4c,0xfc,0xb7,0x23,0x87,0x73,0x27,0x00,0x68,0xad,0x78,0xf7,0x74,0xb8,0x84,0xda,0x35,0x2e -,0x61,0x5c,0xb2,0x1e,0xe6,0xb7,0x7d,0x5b,0xce,0x92,0xa7,0x70,0xf7,0x6c,0x77,0xb4,0x6a,0x1e,0xed,0xfa,0x21,0xdc,0x77,0x81,0x00,0x12,0x02,0x9d,0x86,0xa2,0x20,0xa0 -,0x54,0x28,0x16,0x13,0x85,0x46,0x82,0x80,0xb8,0x58,0x2e,0x15,0x09,0x85,0x44,0xe1,0x60,0xb8,0x58,0x2a,0x37,0x0a,0x91,0xc2,0xa1,0x30,0x88,0xd9,0xc7,0xc5,0xe7,0x3c -,0x6b,0xf3,0x8f,0xc7,0xcd,0xd6,0xeb,0xae,0x7a,0xe7,0xfc,0x7e,0x93,0x79,0xc6,0x55,0xea,0x72,0x4d,0x38,0xf3,0x9d,0x0f,0xc4,0xf9,0xf6,0x7c,0xa5,0x78,0x74,0xbf,0x9a -,0xff,0xb9,0xd5,0xa7,0xb2,0xdf,0x34,0xd7,0x7f,0x6e,0x5b,0xde,0xc2,0x73,0xc3,0xe4,0xe5,0xc1,0xcb,0xf7,0xa4,0xbd,0xef,0xc8,0x43,0xa7,0xa6,0xfb,0xfa,0x4e,0x68,0x1e -,0x60,0xe9,0x68,0x77,0x5a,0x1f,0x88,0xe3,0xcb,0xd2,0xe1,0xf3,0x3c,0x91,0xab,0x58,0x8f,0x0e,0x6a,0x47,0x84,0x4f,0xa5,0x0b,0xd6,0xf7,0xb8,0xe0,0x7e,0x2c,0x2b,0x5f -,0x99,0xaf,0xd5,0x6f,0x34,0x00,0xd7,0x26,0x47,0x69,0x01,0x03,0x91,0xe3,0xea,0x78,0xd6,0xfb,0x3d,0xf9,0x05,0x69,0x55,0x19,0x88,0x29,0xf6,0xbb,0x53,0xb7,0x3e,0xd9 -,0x9b,0xf0,0x47,0x47,0xc5,0xf2,0x71,0x5c,0x1f,0x5f,0x81,0xc4,0x03,0x87,0x81,0x7e,0x60,0x1c,0xcf,0x08,0x01,0xc0,0x1c,0xb9,0x25,0x5c,0xb8,0x73,0x2b,0x87,0x17,0x2f -,0x87,0x2f,0x00,0x73,0xf9,0x72,0x1e,0x7c,0x87,0x3e,0x61,0xcd,0x3c,0x1c,0x79,0xbc,0xb9,0xf1,0x00,0x19,0xa8,0x4c,0x7d,0xc0,0xb0,0x1e,0x1e,0x1e,0x26,0x18,0x43,0xbc -,0x05,0x8c,0x44,0xa0,0x03,0x10,0x1c,0xff,0xf1,0x50,0x80,0x3a,0x1f,0xfc,0x21,0x0a,0xcf,0xff,0xff,0xff,0x7f,0xfc,0xaa,0x41,0x30,0x60,0x4c,0x44,0x0a,0x85,0x04,0x61 -,0x51,0x21,0x8c,0x28,0x17,0x0a,0x05,0x42,0x84,0x20,0xa8,0x48,0x46,0x11,0x09,0x8c,0x46,0xd5,0x7d,0x9a,0x55,0xf9,0xda,0xd7,0xc7,0xac,0x4a,0xb6,0x4c,0x8a,0xb4,0x24 -,0xad,0x66,0xbf,0x5f,0xf7,0xfd,0x47,0x61,0xa2,0xfe,0x1f,0x8e,0xff,0x23,0xd0,0x9d,0xef,0xe1,0x1b,0x6f,0xeb,0xf0,0xc7,0xf8,0x9e,0x1c,0xdc,0xfa,0x00,0x41,0x5f,0xca -,0x7f,0xdd,0x1c,0x38,0x0f,0x58,0x9f,0x33,0xd9,0xb4,0xd1,0xde,0x23,0xa5,0x7c,0x4f,0xfe,0x8a,0xab,0x6f,0xec,0xf4,0xd7,0x3d,0xaf,0x57,0x85,0x3b,0xdf,0xf3,0x7f,0x0d -,0xb9,0xf8,0x83,0x19,0xa2,0x6d,0x7c,0x6e,0x47,0x7f,0x92,0xc0,0x3e,0x85,0x37,0x5e,0x2b,0xad,0x6a,0x9d,0x57,0x06,0xbc,0x5b,0xc4,0xdf,0x7d,0x24,0xe5,0x4f,0xf2,0x0b -,0x31,0xd6,0x32,0xfa,0x1d,0x6d,0x91,0x1b,0xb3,0xec,0x15,0x6a,0x4c,0xd6,0x13,0x67,0xef,0xd2,0x14,0x6e,0x33,0x10,0x9a,0x61,0xcd,0xb5,0x40,0xac,0xec,0x0e,0x9f,0xd1 -,0xaf,0x3a,0xbf,0x8f,0x62,0x6c,0xdc,0x00,0x64,0x69,0x6d,0x83,0xdf,0x5e,0x4a,0xfd,0x6b,0x10,0xf5,0xbd,0x72,0xe5,0xb0,0x8f,0x3d,0x2e,0x27,0xe2,0x16,0x8d,0x40,0x26 -,0x20,0x02,0x8d,0x82,0x89,0x61,0xa0,0x58,0x2a,0x14,0x0b,0x09,0x44,0xc1,0x20,0xb0,0x54,0x4e,0x16,0x1a,0x05,0xc2,0xa5,0x70,0xa8,0x84,0x6d,0xdf,0xb7,0x3c,0x73,0xa9 -,0xeb,0x1c,0x73,0x73,0x0e,0x39,0xaf,0xaf,0x9d,0x54,0xe6,0xea,0xb5,0xc7,0x35,0x79,0x7a,0x7e,0xed,0x0e,0x34,0x7f,0x41,0xd7,0xff,0x75,0xe5,0x3c,0x93,0x9c,0xf5,0x5c -,0xf3,0x90,0xf1,0xa2,0xdc,0xaa,0x79,0x39,0x81,0xd9,0xd3,0xff,0xd7,0xfa,0xfa,0xf9,0x72,0xb7,0xc7,0xc4,0xff,0xe3,0xe5,0x72,0x1b,0xb8,0xcd,0xc6,0xfd,0xd6,0xec,0x03 -,0xaa,0xf1,0x73,0x8f,0x3f,0x15,0xbe,0xeb,0x83,0x65,0x16,0xf5,0xde,0x0a,0x4f,0x87,0x66,0x65,0x41,0xdb,0x7e,0x01,0x7f,0x88,0x1e,0xaf,0xfd,0x6e,0x7e,0x17,0x13,0xf7 -,0xb9,0x51,0xf1,0xf1,0xf6,0xd2,0xd8,0x6f,0x27,0xef,0xd6,0x40,0xa2,0xaa,0x83,0x1e,0x1d,0x99,0xf0,0xd1,0xc8,0x66,0xe3,0xf1,0xec,0x0e,0x21,0x06,0x59,0xe6,0x97,0x8b -,0x77,0x3f,0x08,0xb2,0xec,0x2c,0xce,0xa0,0x04,0xf4,0x7f,0x47,0xca,0x75,0x37,0x66,0x9b,0xfb,0x1b,0x04,0x37,0xce,0xcd,0xe7,0x81,0xcd,0xd3,0xbf,0x68,0x00,0x79,0x78 -,0xf8,0x03,0x9b,0x5f,0x1e,0xf9,0x57,0x0f,0x97,0xd2,0x7c,0x9e,0x35,0xc3,0xb7,0x93,0x8c,0x4e,0xc3,0x8f,0x3e,0xd7,0x13,0x97,0x2e,0x00,0x38,0x7b,0xeb,0x9b,0xc6,0x3e -,0x16,0x88,0x01,0xcc,0x01,0xe1,0xa0,0x0f,0x00,0x53,0x8f,0x30,0xf0,0xf7,0x80,0x03,0x30,0x05,0x4a,0xcd,0xd6,0xc0,0x70,0xff,0xf1,0x50,0x80,0x3c,0x1f,0xfc,0x21,0x0a -,0xcf,0xfe,0xdf,0xff,0x76,0xfc,0xa8,0x40,0xa8,0x5c,0x34,0x24,0x0a,0x89,0x0a,0x41,0x30,0xa0,0x4c,0x28,0x32,0x0a,0x09,0x84,0x81,0x70,0xa8,0x50,0x24,0x14,0x09,0x84 -,0x44,0xa1,0x20,0x89,0x0c,0x22,0x21,0xfa,0x7b,0x71,0xe3,0x8d,0x62,0xb8,0xcd,0x65,0xf7,0x7b,0xab,0x99,0x49,0x7b,0xd5,0x4a,0x88,0x95,0x5e,0x7f,0x9f,0x81,0xbc,0x3a -,0x9d,0xdd,0xdf,0xae,0xd6,0x4e,0xec,0x1f,0x27,0x76,0xa4,0xea,0x39,0x54,0x06,0x39,0x0f,0x2f,0x57,0xcf,0x27,0xfe,0xb6,0x8f,0x5b,0xfc,0x5a,0xf3,0xd3,0xc6,0xb7,0x1c -,0xb7,0x9e,0x22,0x13,0xeb,0xf8,0xf3,0xbd,0xcb,0xa8,0xb5,0x8e,0x45,0x7f,0x1e,0x37,0x29,0x7a,0x21,0xc4,0x05,0x00,0x81,0xc7,0x1c,0xfd,0x46,0xc5,0xbf,0xbc,0xf3,0x01 -,0xba,0x16,0x59,0xe6,0xbc,0xef,0x3c,0x2e,0xbf,0x51,0xcd,0x52,0xe3,0x13,0xc0,0x5b,0x27,0x20,0x4d,0x6e,0x87,0x61,0x8b,0x26,0x5a,0x5d,0xd1,0x9b,0xa4,0xb9,0xe0,0xe4 -,0x17,0xf0,0x60,0xba,0xce,0xec,0x75,0x47,0x2a,0xbe,0xf1,0xdf,0x9c,0x0c,0xba,0x46,0x9a,0xdf,0x8e,0xec,0x28,0xb1,0xf5,0x20,0xac,0x0a,0xb0,0xbd,0x51,0x52,0x33,0x39 -,0x82,0x3e,0xfa,0x54,0xfb,0xa6,0x20,0x7a,0xdd,0xc8,0x04,0x04,0xee,0x24,0x05,0x33,0x0d,0x02,0xa2,0x40,0x98,0x54,0x28,0x16,0x22,0x05,0x82,0xa1,0x20,0xa0,0xd4,0x48 -,0x16,0x0a,0x06,0x04,0x81,0x80,0xa8,0x5c,0x2a,0x64,0x0b,0x84,0xc2,0x21,0x30,0xb8,0xef,0xf9,0xe6,0xef,0xf3,0x37,0x9c,0x39,0xd5,0xe7,0x57,0xef,0x74,0xc9,0x5c,0x72 -,0x95,0x3a,0xe7,0x2d,0xac,0xf3,0xac,0xe0,0x26,0xd9,0x7b,0xba,0xa3,0x9e,0xf7,0x1d,0xfc,0xbb,0xf3,0xbe,0xa7,0xef,0xbf,0xb4,0xd5,0x32,0x2e,0x87,0x18,0xdc,0x5b,0x69 -,0x92,0xae,0x55,0xf8,0x7d,0x94,0xa2,0x70,0xf0,0xe0,0x7b,0xcd,0xdd,0x25,0x7e,0x87,0xfa,0xfe,0x21,0xc5,0x49,0xc1,0xfc,0x47,0xab,0x83,0x87,0x3e,0xc3,0x87,0x17,0xc3 -,0x9e,0xf7,0xf8,0xc2,0xfb,0x3e,0xe1,0xe8,0x00,0x63,0xc2,0x80,0x9f,0xd1,0xd7,0x86,0xb5,0xf0,0x3f,0xfa,0xff,0x63,0x67,0xff,0xcd,0xcf,0xbe,0xe7,0x3f,0x41,0x99,0x75 -,0xeb,0xf5,0xff,0xd4,0xea,0x4c,0x3c,0xe6,0x26,0xb9,0xe7,0xde,0x65,0x9f,0xff,0x3d,0xaf,0x31,0xf0,0x3f,0x89,0x97,0xb5,0xbb,0xf4,0x34,0xc7,0x7c,0xcf,0x98,0x84,0x9c -,0x11,0xa8,0xd7,0x5c,0x9d,0x5c,0x4f,0x9c,0xfc,0xd6,0xe6,0x5e,0xca,0xe5,0x68,0xce,0xf6,0x9e,0xed,0xfe,0x97,0x6e,0xd0,0x97,0x10,0xfa,0xbc,0x40,0xaa,0xf2,0xed,0x43 -,0xdf,0xe5,0x2c,0x34,0xe0,0xe4,0xf9,0x38,0xf0,0xe4,0x17,0xf2,0xe9,0x8d,0x73,0xee,0xed,0xe0,0x3b,0x8b,0x13,0xf0,0x7c,0x0d,0x53,0xe6,0x1c,0xe2,0xbb,0xe8,0x27,0x9b -,0x9e,0x03,0x8f,0x5f,0x31,0x83,0xc2,0x00,0xb0,0x40,0x03,0xcc,0x3d,0x68,0x40,0x1f,0x84,0x12,0x89,0xdf,0xda,0x03,0x80,0xff,0xf1,0x50,0x80,0x3c,0x3f,0xfc,0x21,0x0a -,0xcf,0xff,0xff,0xff,0xfb,0xec,0xa8,0x20,0xa0,0x5c,0x34,0x18,0x0a,0x0d,0xc2,0xc1,0x70,0xa8,0x50,0x44,0x14,0x0a,0x88,0xc8,0xa1,0x60,0xc8,0x58,0x4e,0x16,0x0a,0x09 -,0x42,0x61,0x20,0xa0,0x54,0x26,0x11,0x09,0x88,0x46,0xdf,0x3c,0xfc,0x7f,0xed,0xff,0xc6,0x67,0xb6,0x6f,0xce,0xe5,0xe6,0xb6,0xdd,0xcd,0xd2,0xd5,0x2a,0xdb,0x97,0xd7 -,0x32,0x7d,0x6b,0x43,0xfd,0xdb,0x47,0x72,0x56,0xe5,0xed,0xbf,0xe3,0xff,0x93,0x47,0xf6,0xe2,0xd7,0xd8,0x8f,0xe2,0x64,0x56,0xef,0xa8,0x7b,0x2c,0xff,0x4b,0xdc,0xa6 -,0xd7,0xef,0xe8,0xf3,0x80,0xff,0xdf,0xfe,0x0f,0xd5,0xbd,0x6d,0xd3,0xf5,0x7f,0xe0,0xf1,0x9e,0xcf,0x93,0x99,0xd5,0x02,0x58,0x1b,0xd3,0x8b,0x05,0xe3,0x4a,0x18,0x71 -,0xbd,0xab,0x63,0x3b,0x72,0x57,0x31,0xe4,0x90,0x98,0x8f,0x10,0x04,0xae,0x7a,0x2d,0x5f,0xd7,0xa8,0x8b,0xd9,0x75,0x7b,0xba,0xc2,0xb1,0xa8,0x63,0xb8,0xc0,0x14,0xff -,0x34,0x15,0xaf,0x36,0x51,0xf4,0xc0,0xff,0xb0,0xf7,0x47,0xa3,0xe8,0x84,0x1a,0x7f,0x25,0xef,0x39,0x21,0x74,0x09,0xee,0xe4,0xce,0xee,0x31,0x77,0x87,0x22,0x5c,0x4c -,0xa9,0xfa,0xd5,0x82,0x1d,0xe6,0xfb,0x33,0xdb,0xca,0x03,0x67,0x1c,0x1c,0x9c,0x58,0xc3,0xf9,0x69,0xd7,0xee,0x01,0xf9,0x3e,0xb8,0x4b,0xdd,0x89,0x48,0xab,0x60,0x58 -,0x4a,0x82,0xc0,0x53,0xb0,0x5c,0x48,0x15,0x0a,0x09,0x84,0x81,0x60,0x90,0x58,0x28,0x16,0x0a,0x09,0xc2,0x61,0x70,0x90,0x9c,0x2a,0x26,0x0a,0x89,0x82,0xa1,0x71,0x28 -,0x5c,0x26,0x17,0x0a,0x8c,0x46,0x61,0x27,0xb5,0xf1,0xf9,0xdf,0xeb,0xf9,0xaf,0xaf,0x51,0x5e,0x7b,0xf8,0xf9,0xe3,0xaf,0x98,0xac,0xaa,0x6b,0x5b,0xd5,0xf8,0xb5,0xf5 -,0x37,0xec,0x28,0xd7,0x5d,0xf7,0x7d,0x3d,0xaf,0x17,0x41,0xe8,0x45,0xaf,0x92,0xea,0xea,0xbc,0x8a,0x5f,0xdf,0xb8,0xa3,0x79,0xbb,0xbf,0xea,0xa9,0x36,0xf3,0xd5,0x5b -,0xce,0xef,0x43,0x9e,0xbc,0xa1,0xff,0xbf,0xe4,0x17,0xe6,0xf8,0xc5,0x35,0x7f,0x0e,0xdb,0x8d,0x6d,0xba,0x2b,0xc6,0xf3,0x35,0xcf,0x37,0x8e,0x5e,0x0b,0x1e,0x10,0xe5 -,0x7e,0xf0,0x06,0x26,0x81,0x64,0xba,0x28,0x32,0x97,0x8b,0xcb,0xea,0xe5,0x67,0xd7,0xf0,0xf9,0x2c,0x57,0x27,0xcb,0x87,0x47,0x7f,0x6f,0x8a,0xbf,0x39,0x40,0xb7,0x47 -,0x10,0x5c,0xa8,0xe3,0xc7,0xbb,0xe3,0xf0,0x7c,0x79,0xf1,0xa7,0x3e,0x25,0x34,0x23,0x91,0xa3,0xbe,0xba,0xbf,0x0f,0x6f,0x46,0xd0,0x1e,0x4f,0xbe,0x07,0x30,0x2b,0xe8 -,0x38,0x0f,0xa8,0xfb,0x80,0x00,0xf3,0xef,0xe5,0xcb,0x9b,0x24,0x76,0x14,0xd6,0xfd,0xf6,0xf7,0x23,0x95,0xbb,0x77,0x9b,0x6b,0x68,0x39,0x9e,0x3b,0xf3,0xf2,0xe7,0xe0 -,0x0e,0xb1,0x47,0x0f,0x9f,0x03,0xc0,0x1e,0x00,0x1e,0x6f,0x03,0xc0,0x0d,0x02,0x32,0x26,0x27,0x08,0x8a,0x55,0xee,0x80,0xe0,0xff,0xf1,0x50,0x80,0x3b,0x9f,0xfc,0x21 -,0x0a,0xcf,0xfd,0xff,0xff,0xff,0xf8,0xa9,0x41,0x30,0x64,0x44,0x14,0x13,0x85,0x02,0xc2,0x42,0x10,0x50,0x46,0x14,0x0a,0x89,0x82,0x83,0x20,0xb8,0x54,0x2e,0x14,0x0a -,0x84,0xc2,0x41,0x31,0x08,0x4c,0x42,0x34,0xf5,0x8f,0xfd,0xff,0xbf,0x77,0x2a,0x6a,0x99,0x15,0x37,0xc3,0x99,0x97,0x51,0x7b,0xe2,0x6f,0x54,0xe2,0xbf,0xef,0x5f,0x03 -,0xc8,0xe6,0xcb,0xba,0x7d,0x3b,0xe9,0x67,0x7f,0xc8,0xff,0xa9,0xf8,0x0d,0x84,0xe4,0x4e,0xff,0x4c,0x23,0x76,0xbe,0xcd,0x4b,0x2f,0x64,0x3f,0x40,0xab,0x8e,0xde,0x29 -,0x54,0x8e,0x7d,0xfe,0xb8,0xff,0x8b,0xeb,0x2e,0xfc,0x74,0x0b,0xb9,0xcb,0x80,0xe1,0xcc,0x73,0xe3,0xc3,0x99,0x0e,0x6b,0xb5,0xc4,0x05,0x33,0x97,0x1d,0x41,0xfa,0xa9 -,0x2f,0x23,0xe7,0x52,0x6c,0x35,0xbb,0xa9,0xcd,0x0d,0x70,0xe8,0x7f,0x13,0xfb,0x78,0xf9,0xf9,0x33,0x9d,0x1a,0x56,0x71,0xf5,0x3a,0xfb,0xc3,0x3c,0x4c,0xd4,0x43,0xb2 -,0xb9,0x7b,0x3c,0x56,0xc3,0x1f,0x5b,0x6c,0xee,0x8b,0xaa,0x46,0x96,0x7b,0xce,0xfd,0x8b,0x0a,0x55,0xd0,0x47,0x26,0x92,0x35,0x0b,0x28,0x7b,0xae,0x6d,0xb8,0x3a,0xff -,0x83,0xa0,0x1f,0xec,0x65,0xbe,0xb2,0xed,0x64,0xe1,0xf3,0xdc,0x3b,0x82,0xb5,0x8c,0xd3,0x55,0x3d,0x1f,0x5e,0x63,0xb8,0x0e,0xea,0xb7,0xf0,0x48,0x01,0x50,0x40,0x0a -,0x54,0x0b,0x09,0x02,0x41,0x50,0xa0,0x58,0x24,0x14,0x33,0x05,0x0a,0x41,0x71,0x28,0x5c,0x2c,0x47,0x08,0x85,0x42,0xe1,0x51,0xb8,0x54,0x42,0x35,0x3f,0x5c,0xf3,0xfa -,0x6f,0xf9,0xfe,0x3a,0xaf,0x6f,0xd2,0x65,0xbd,0xb3,0xd7,0xd7,0x89,0xe7,0xe7,0x25,0x2f,0xe3,0xde,0xf7,0x24,0xb7,0xd5,0x74,0x3f,0xcc,0x7e,0x4e,0xc8,0xe4,0xbc,0x7b -,0x5b,0x50,0xf0,0xfc,0x73,0x6e,0xdb,0xa2,0x7c,0xe1,0x7c,0x4f,0x8a,0x7e,0xf7,0xb6,0xf8,0x0e,0xf9,0xaf,0x92,0xd5,0xfe,0x5f,0x96,0xfd,0xfb,0xfb,0x65,0xf3,0x8f,0x5c -,0x70,0xa0,0x2b,0x7f,0xdc,0x7d,0xbe,0xed,0xe1,0x07,0x9c,0x76,0x3d,0xa6,0xbb,0xc9,0xb5,0xce,0x04,0x39,0x63,0x2b,0x0e,0x87,0x81,0xd3,0xbb,0x7e,0xdd,0xe4,0x14,0x0b -,0x73,0xc7,0x1a,0x39,0xde,0x14,0x63,0x45,0xa1,0x6d,0x45,0x7e,0x5d,0x3f,0x20,0x83,0x70,0xe3,0xaa,0xac,0xe9,0xcb,0xc8,0x24,0xf0,0xd4,0x21,0x57,0x80,0x76,0xdd,0x80 -,0x72,0xa0,0x82,0xde,0x7b,0x7a,0xa6,0xcd,0x7d,0xdc,0x0d,0x2e,0xb2,0x00,0xa3,0x2e,0x28,0x06,0x7c,0x7e,0xf1,0xd9,0xf6,0xf8,0xf3,0x79,0x50,0x01,0xbf,0x6b,0xe2,0x6d -,0xdd,0xf0,0xbd,0x51,0xb0,0xf8,0x76,0xf6,0xc0,0xfb,0x3e,0xf8,0xe5,0x43,0x9f,0x1f,0x27,0xa3,0xab,0x33,0xba,0xec,0xaa,0xee,0x17,0xc7,0xcb,0x8a,0x7c,0x3d,0xe3,0x7f -,0x30,0xda,0x6e,0x71,0x84,0xb9,0x83,0xcc,0x00,0xf1,0xf0,0x79,0x82,0x2f,0x10,0x2a,0x04,0x25,0x40,0x38,0xff,0xf1,0x50,0x80,0x3d,0xdf,0xfc,0x21,0x0a,0xc9,0xdf,0xdf -,0xbf,0xff,0xf8,0xa6,0x20,0xa0,0x58,0x30,0x24,0x0b,0x05,0x04,0x61,0x60,0xa8,0x50,0x8a,0x14,0x0a,0x8d,0x82,0xa1,0x60,0xb8,0x50,0x4a,0x16,0x0a,0x05,0x82,0x61,0x50 -,0x98,0x50,0x4a,0x13,0x18,0x8d,0xef,0x2a,0xbf,0xf3,0xff,0x5c,0xf3,0x7e,0xa6,0xb9,0xd6,0x2a,0xea,0x97,0xcc,0x52,0x53,0x46,0x49,0x34,0xfc,0x7f,0xeb,0xec,0x3e,0x3f -,0xaf,0xc6,0xe2,0x3b,0x2f,0x38,0x5a,0x10,0xb9,0x69,0xaf,0xf6,0xff,0x0b,0x7a,0x3b,0xfa,0x29,0x77,0xf4,0x29,0x8f,0x99,0x7f,0xb3,0x89,0x10,0xfc,0xc3,0x83,0xb7,0xf6 -,0x3d,0xf5,0x9d,0xae,0x48,0x3e,0x5c,0x91,0xc3,0x8f,0x0f,0x9b,0x8c,0x01,0x75,0xc2,0x9d,0xe7,0xc9,0xc4,0xe6,0xf2,0xb7,0xb0,0xf0,0xa4,0x6b,0xbe,0xab,0xdb,0xb4,0x88 -,0x72,0xfd,0x5e,0xf7,0xc6,0x1f,0xf5,0x7f,0xe5,0xff,0x7f,0x41,0xfb,0x17,0x5e,0x33,0xe8,0x00,0xf9,0x1f,0x27,0x15,0x72,0xce,0x3a,0xfa,0x60,0x2f,0x89,0x1e,0x54,0x3f -,0xdb,0x64,0xf1,0x8a,0xbc,0xfe,0x8b,0x73,0xe6,0x5e,0x57,0xf2,0x6e,0xc7,0x4c,0xe2,0x14,0x3c,0x18,0xf0,0x80,0x0b,0x5d,0xef,0xf7,0xd8,0x34,0x9f,0xbe,0xe3,0xf0,0x70 -,0x39,0x2d,0x73,0xc4,0x43,0xb9,0xf0,0xdd,0xff,0xd6,0xf6,0x74,0xeb,0x1e,0xe8,0x7b,0x74,0xd4,0x63,0xd6,0x6f,0x1d,0xe1,0x6e,0x53,0x25,0x54,0x13,0x8b,0xd3,0x9a,0xac -,0x87,0x7f,0xcc,0x7c,0xf9,0x01,0x67,0x7e,0xcd,0x34,0x03,0xdc,0x13,0x8c,0x00,0xb8,0x50,0x0a,0x86,0x0a,0x05,0x82,0x41,0x40,0x90,0x50,0x46,0x15,0x0a,0x09,0x42,0x81 -,0x62,0x10,0x5c,0x30,0x16,0x0b,0x85,0x82,0xa4,0x60,0xa9,0x58,0x28,0x25,0x10,0x91,0x2f,0xfd,0xfc,0x79,0xfe,0xf5,0xbf,0xaf,0x57,0xe7,0xde,0xb2,0xdf,0xe9,0xfb,0x73 -,0x3c,0xf3,0x1b,0xf3,0xe9,0x7a,0x99,0xbc,0x74,0xe3,0x5f,0xed,0xc0,0xd5,0x67,0xcc,0x38,0x1f,0xbf,0x61,0xc7,0x9c,0xe9,0x0f,0xd1,0xf1,0x71,0xcd,0x7c,0x43,0x70,0xf1 -,0x1f,0xf8,0x1f,0xdb,0x65,0x07,0xb7,0xc4,0xcc,0xf8,0xd1,0x42,0x73,0xab,0x9d,0xa0,0x4c,0xe6,0x3c,0xbe,0x6d,0x88,0x04,0x4f,0xd1,0x81,0xf0,0xe1,0x6d,0x35,0xf1,0x03 -,0x99,0xf2,0x94,0xa3,0x8f,0xf1,0x0b,0x89,0x92,0x12,0xfd,0x27,0x8b,0x7b,0xa1,0xe0,0xe7,0x9b,0xcc,0x56,0xf9,0x71,0xe0,0x38,0xfc,0x79,0x1d,0xe0,0x0c,0x7e,0xec,0xdc -,0xf9,0xf0,0xa5,0x02,0xbb,0xf2,0x0f,0x85,0x53,0x08,0x3c,0x3e,0x55,0xd7,0x7e,0x37,0xbe,0x03,0x8f,0x35,0xb9,0xf0,0xe5,0xe1,0xef,0x9b,0x79,0x80,0x25,0xc8,0xf0,0x7e -,0x3a,0x48,0x4d,0x44,0x98,0xf4,0xf4,0xc0,0xe0,0x1c,0x83,0xa5,0xdd,0xc7,0x98,0x53,0x95,0x64,0x14,0xcd,0x30,0x09,0xa0,0x49,0x77,0xf6,0x3e,0x7d,0xdc,0x46,0xa7,0x27 -,0xfc,0x2f,0xce,0xd5,0xff,0x6a,0x4d,0x01,0xea,0xf1,0x38,0xfd,0x3a,0x0e,0x6e,0xff,0x94,0x04,0x03,0x91,0x03,0x8b,0xef,0xf0,0x05,0xe7,0xfb,0x41,0xb7,0x48,0x04,0x81 -,0x70,0x38,0xff,0xf1,0x50,0x80,0x3a,0xbf,0xfc,0x21,0x0a,0xcf,0xff,0xff,0xff,0xff,0xff,0xa8,0x60,0xa0,0x58,0x4e,0x14,0x0b,0x05,0x0a,0x61,0x41,0x30,0x50,0x6a,0x14 -,0x0a,0x89,0xc2,0xa1,0x61,0x40,0x58,0x28,0x15,0x29,0x94,0x44,0x01,0x6e,0xf3,0x7d,0x52,0x4d,0xdf,0x1c,0xee,0x21,0xce,0xaf,0x6a,0x97,0x8b,0xa9,0x33,0x52,0x3a,0xfd -,0x7f,0xee,0x07,0x9f,0xd0,0xb8,0x1c,0x9f,0x3f,0x6e,0x78,0xbb,0x73,0xe2,0xfc,0x3f,0xe9,0x7f,0x8e,0x13,0xd1,0xf9,0x2f,0x97,0xb7,0x91,0xca,0x74,0xc6,0x90,0xaf,0xa8 -,0x8b,0xbb,0xff,0x67,0x9b,0xac,0x7f,0xd7,0xe4,0x79,0x1f,0xf8,0x71,0x72,0x39,0x0f,0xeb,0xff,0xa7,0xf1,0x78,0xf0,0x72,0xe0,0x71,0x1e,0x5e,0x1e,0x7e,0x4d,0x1d,0xed -,0x5e,0x63,0x7e,0xd7,0x0f,0x90,0xe5,0xf6,0xff,0x5f,0x85,0xe0,0x1d,0x89,0xb7,0x4e,0xde,0x02,0x1c,0xbc,0x70,0xce,0xfa,0xd2,0xab,0x52,0xa3,0xf3,0x68,0xd9,0x54,0x27 -,0x79,0xf6,0x5f,0x79,0x88,0x1c,0x57,0x60,0x00,0x00,0xa5,0xd4,0xb6,0x32,0x96,0x1f,0xb8,0x8a,0xdf,0x2b,0x7d,0x7f,0x47,0xdf,0x70,0xfb,0xb8,0x02,0xbb,0x3e,0x1f,0x70 -,0x73,0xe2,0x1c,0x39,0xfc,0xed,0xc3,0x98,0x71,0xe2,0x72,0x79,0x73,0xe0,0x1c,0x56,0x39,0x73,0x79,0xf3,0xf7,0x70,0x2e,0xd4,0x83,0xa7,0x8b,0x8b,0x92,0x51,0xdc,0xf5 -,0xbd,0xa0,0x49,0xdc,0x9f,0xb7,0xff,0x58,0x1f,0xbb,0xed,0x13,0x50,0x1c,0xf7,0xc1,0x8a,0x1d,0xc0,0x13,0x04,0x00,0x53,0x30,0xd0,0x8a,0x32,0x0a,0x0d,0x84,0xa1,0x40 -,0x90,0x8c,0x24,0x13,0x0b,0x84,0x44,0x42,0x70,0xb0,0x5c,0x4a,0x17,0x0a,0x85,0xc2,0xa1,0x70,0xa8,0x84,0x65,0x4f,0xd7,0xf3,0x56,0xbe,0xbd,0x65,0x2b,0x3f,0x75,0x6d -,0xd7,0xcf,0xb5,0x6e,0xbb,0xae,0xb3,0xad,0xf3,0x77,0x97,0x3f,0x5f,0xfb,0xf4,0x13,0x8a,0x79,0xb5,0x57,0xff,0xd7,0xab,0xf8,0x4f,0xf0,0xfd,0xef,0x49,0xc7,0xd9,0xad -,0xe6,0xe8,0x8f,0xa8,0x7f,0xbf,0xe2,0x61,0xda,0xaf,0xba,0xbb,0x2f,0xf9,0x3e,0x3c,0xfe,0xd7,0xc4,0xbf,0x19,0x8f,0x49,0x1f,0x3d,0x2e,0x6f,0xc0,0xd9,0x43,0xd0,0xca -,0x6f,0x0d,0xd1,0x1c,0xdc,0xfd,0xb8,0x4a,0xad,0x95,0x45,0xbb,0xe5,0x23,0x8e,0xc9,0x7e,0xa7,0xab,0x4d,0x00,0x75,0x69,0x39,0xbc,0x3f,0x0e,0x67,0x6b,0x93,0xce,0xdc -,0x0e,0x79,0x3d,0x01,0x7e,0x17,0xf7,0x86,0x76,0x80,0x76,0x8b,0xaf,0x6b,0xb7,0x97,0x4f,0x10,0x00,0xf3,0x06,0xf7,0x37,0x9c,0x0b,0x7e,0xe0,0x45,0x6c,0x00,0xe9,0xe7 -,0x1d,0x1e,0xd3,0x8f,0x87,0x02,0xfc,0x4f,0x37,0x87,0xdb,0xcf,0xef,0xf1,0x6a,0x76,0x6a,0x6d,0xe9,0x07,0x94,0xde,0x72,0x54,0x79,0x47,0xd7,0xc4,0x9a,0x8b,0x74,0xc6 -,0xff,0x0e,0x3a,0x41,0x43,0xc8,0x07,0x94,0x93,0x3c,0x81,0xc0,0x3c,0xcf,0x3e,0x1e,0x3c,0x82,0xc2,0x20,0x16,0x03,0x80,0xff,0xf1,0x50,0x80,0x3b,0xff,0xfc,0x21,0x2a -,0xcf,0xfb,0xed,0xff,0xef,0xff,0xa4,0x40,0xb0,0x50,0x30,0x24,0x2b,0x05,0x04,0xa1,0x60,0xa0,0x98,0x28,0x25,0x11,0x85,0x82,0xe1,0x61,0x20,0x54,0x28,0x25,0x22,0x04 -,0xc8,0x23,0x7d,0x94,0x38,0x98,0xc9,0x33,0x4d,0xea,0x97,0x59,0x31,0x25,0x5a,0x92,0xa4,0x9a,0xe3,0xf9,0xf6,0x1c,0x94,0x78,0x7e,0x54,0x7c,0xbc,0xe7,0xbf,0xef,0xfe -,0x0f,0x93,0xfb,0xff,0xe3,0xf7,0xc2,0x9f,0xe1,0x38,0x5f,0xbb,0xfd,0x81,0xf1,0xdd,0x70,0xb6,0xfb,0x28,0xf3,0x0f,0x84,0x02,0x7d,0x68,0xa2,0x41,0x71,0x3d,0xa7,0xb9 -,0xe0,0xfb,0xfc,0x1b,0x99,0xc7,0xfa,0xfc,0xbc,0xf9,0x68,0x81,0xfe,0xbf,0xfe,0x62,0xcb,0xf9,0x51,0x35,0x61,0x43,0x96,0xf3,0x70,0xd6,0xf7,0xbb,0x83,0x81,0xd1,0xa9 -,0xe5,0xff,0x7f,0x91,0x44,0xca,0xa5,0xe0,0x66,0x77,0x98,0x07,0x2e,0x7d,0x37,0x59,0x37,0x5f,0xdf,0xfb,0x96,0xe7,0xd9,0xcd,0x3c,0x33,0xf7,0x72,0x44,0x54,0xe8,0x59 -,0x7b,0x36,0x5d,0x8a,0x8e,0x1c,0xa7,0xfd,0x3f,0x75,0xc6,0xcf,0x25,0xf2,0xb5,0xa6,0xdc,0x93,0x5c,0x5c,0x0b,0x72,0x0c,0x1c,0xea,0xa6,0xee,0xe7,0x8a,0xe0,0x6e,0xa0 -,0xe7,0x35,0x26,0x27,0x99,0xbf,0x98,0x77,0x2e,0xea,0xa5,0x7a,0xe1,0x5d,0x97,0x91,0xd3,0xf3,0xc3,0x41,0xeb,0x9f,0xb3,0xe4,0xbd,0xd8,0xf7,0x1d,0xd4,0xf5,0xff,0xe8 -,0xc9,0xbc,0x10,0xef,0x96,0x92,0xa2,0x00,0x22,0x02,0x95,0x86,0x81,0x20,0xa0,0x94,0x28,0x23,0x0a,0x11,0xc2,0xc2,0x41,0x38,0x48,0x4a,0x14,0x0a,0x95,0x82,0xa1,0x70 -,0x98,0x50,0x2a,0x33,0x0a,0x84,0x46,0xf1,0xaa,0xf6,0xee,0xb5,0xbb,0x62,0x6e,0xef,0x9d,0x6a,0x97,0xe3,0xaa,0xee,0x4a,0xaf,0x35,0x3b,0x92,0xd7,0xaf,0xf3,0x62,0xce -,0xee,0xb6,0xe3,0x3e,0x9d,0xf9,0xff,0xfc,0xd5,0xbd,0x0d,0x03,0xd8,0xff,0xc7,0x7f,0x63,0xa0,0x71,0xbd,0x5f,0xe5,0x7d,0xab,0xe8,0xff,0xf3,0xaf,0xc7,0x2d,0xb9,0x3e -,0xfb,0x67,0x9f,0xc8,0xef,0xf3,0xfd,0xd6,0xa7,0x9f,0x66,0xa3,0x07,0x73,0xb7,0xb3,0xab,0xed,0xf6,0xbb,0xb0,0xde,0x6b,0xf1,0xf5,0xf9,0x92,0xce,0xcb,0x4f,0xfd,0x53 -,0x7c,0xa9,0x33,0x3e,0xde,0xd9,0x38,0xd8,0xf4,0xf6,0x3a,0x3a,0xfe,0xbe,0x1e,0x3e,0x7c,0xde,0x7c,0xc1,0xef,0xf2,0x93,0xd7,0x69,0xe7,0xee,0x99,0xd5,0xbc,0xb9,0x39 -,0xff,0x8e,0x0e,0x3c,0xf9,0x7d,0xdc,0x37,0x42,0xac,0x2c,0xb7,0x0a,0x03,0xe6,0x16,0xd5,0x68,0x25,0x20,0x79,0xcf,0x00,0x6a,0xe1,0x20,0x79,0x00,0xdd,0xb7,0x7e,0xf3 -,0x3f,0x17,0xf4,0x3e,0x49,0xc1,0xbd,0x7b,0xbb,0xb7,0xf9,0xac,0xf4,0x7f,0xb6,0xb8,0x3e,0x13,0xf6,0xf9,0x72,0x2e,0x77,0xd2,0x6a,0x6f,0x3b,0xc1,0xf6,0x39,0x9e,0x24 -,0x15,0xc2,0x5c,0x2d,0xc1,0x20,0xef,0x7f,0xea,0xfb,0x63,0xbc,0x24,0x01,0xe1,0xe2,0x0f,0xc6,0xc0,0x4c,0x2a,0x07,0xff,0xf1,0x50,0x80,0x3b,0xbf,0xfc,0x21,0x4c,0xfe -,0xff,0xfd,0x44,0x26,0xe1,0x09,0x91,0x28,0x5a,0xa2,0x4e,0x86,0xfc,0x87,0xb3,0x17,0xe6,0x55,0xdd,0x44,0xd0,0xb1,0xfb,0xf2,0xac,0x2d,0x35,0x65,0x55,0xa0,0x0d,0xdb -,0x52,0x88,0x21,0x08,0xb7,0x39,0xd1,0xc8,0xff,0x7e,0x1d,0x7d,0xc9,0x4d,0x2f,0x9b,0x49,0xc7,0xe9,0xf9,0xab,0xb7,0xd3,0x85,0x1d,0x97,0x8f,0x3e,0xfc,0xad,0x9f,0x5d -,0xce,0xb8,0x7c,0x59,0x04,0x3b,0xa4,0xbc,0xaa,0x67,0xec,0x5f,0x44,0xd3,0xca,0xe7,0x8f,0x39,0x47,0xa5,0x12,0x15,0xce,0xe1,0xa2,0xa2,0x89,0x66,0x9d,0x24,0x1b,0xa8 -,0x7b,0x8f,0xeb,0x6f,0x92,0x99,0x46,0x8c,0xd2,0x41,0x90,0xaf,0x82,0x39,0xe6,0x1b,0x49,0xa1,0x81,0xe7,0xc9,0x4e,0xb2,0x16,0x3b,0xac,0xba,0x94,0x1a,0x82,0x98,0xc4 -,0x90,0x16,0x20,0x98,0x11,0xe0,0x98,0x43,0x40,0xa9,0xc2,0xc0,0x24,0xb7,0x2a,0x43,0xac,0x22,0x11,0xe8,0x90,0x40,0xd1,0x02,0x86,0x31,0xb0,0xde,0x08,0x88,0x10,0x88 -,0x27,0x12,0x41,0x01,0x16,0xc1,0xd9,0x47,0xc6,0x0f,0xfa,0x76,0xd5,0xaf,0xd2,0x79,0x30,0xa3,0x35,0xa9,0x2c,0xa1,0xba,0x3d,0xc3,0xef,0xf1,0x38,0xb9,0x7b,0x14,0xf6 -,0xd1,0x6e,0x60,0xf8,0xbc,0x5f,0xca,0x8b,0x6d,0x7e,0xb7,0x65,0x0f,0x51,0x1b,0x93,0xc6,0x32,0x0c,0xc3,0x91,0x01,0xfa,0x58,0xa0,0x86,0xca,0x0b,0x14,0x2c,0xcc,0xaa -,0x91,0x52,0x53,0xa1,0x9d,0x2d,0x90,0x94,0x54,0xdb,0xbc,0x68,0x4a,0x2c,0x66,0xc3,0x26,0x0d,0xe9,0xcd,0xdf,0x41,0xfc,0x08,0xd3,0xb0,0xba,0xd4,0xc8,0x24,0x98,0xc5 -,0x49,0x92,0x51,0x56,0x37,0xa1,0x69,0x9a,0xf3,0xd5,0x6f,0xf7,0xbb,0x3b,0x66,0xed,0x2c,0xbf,0x8c,0xbb,0x27,0xc3,0xf5,0x67,0x4e,0xb9,0xab,0xea,0xcb,0x6e,0x8a,0xc5 -,0xab,0x2d,0x9c,0x71,0xd9,0x67,0x63,0x49,0x86,0xf2,0x35,0x69,0x2c,0x94,0x0b,0xbe,0x79,0xc1,0x56,0xcc,0xce,0x24,0x88,0xe1,0x75,0x41,0x30,0x1e,0xa8,0xc3,0x09,0xd9 -,0x19,0xb6,0x3e,0xbc,0xe5,0xa6,0xf6,0x9e,0x6a,0xf4,0x4b,0x89,0xcd,0x5a,0x5a,0xbc,0x67,0xa4,0x78,0x17,0x82,0x7f,0xdd,0xfd,0x13,0xee,0x01,0xff,0x77,0xc8,0x03,0xf8 -,0x5d,0x2f,0x45,0xea,0x42,0xb6,0x0e,0x2d,0xf1,0xfe,0x5a,0x62,0x73,0x93,0xad,0x0f,0x7c,0x53,0x7a,0x2c,0xf2,0xdc,0xdb,0x2d,0x01,0x1b,0x58,0x2b,0x98,0x2d,0x7b,0xaf -,0x35,0x19,0x8e,0xaa,0xcd,0x55,0x0e,0x77,0xac,0x5a,0xf6,0x0a,0xd7,0x4b,0x89,0x96,0x29,0xbd,0xa9,0x59,0xaa,0x5d,0xb8,0x4a,0x03,0x13,0xde,0xae,0x2e,0xe2,0xb5,0xc2 -,0x38,0x88,0x19,0x13,0x78,0x9d,0x42,0x02,0x84,0x50,0x91,0x8b,0x22,0x89,0xf4,0xa1,0x08,0x0a,0x58,0x60,0x14,0x56,0x04,0x40,0x72,0x39,0x48,0x54,0x06,0x70,0x0e,0xa2 -,0xc5,0x86,0xe7,0x64,0xe4,0x6d,0x1e,0xab,0xca,0x39,0x3e,0xc4,0xf5,0xfe,0xac,0x6d,0xf4,0x13,0x80,0xff,0xf1,0x50,0x80,0x34,0x1f,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x65 -,0x18,0x2c,0x90,0xb1,0x46,0x44,0x49,0x96,0xa4,0x85,0xab,0x5e,0x46,0x32,0x1b,0x26,0xbf,0x5b,0x08,0x65,0x9a,0x0b,0xed,0xa0,0x87,0x08,0x5e,0xdb,0xd4,0x91,0x5a,0x66 -,0xc9,0x90,0xb2,0x41,0xc4,0xff,0x6e,0xa9,0x10,0xd9,0xbb,0x64,0xc1,0xa3,0x73,0x3c,0xb1,0xe9,0xdb,0x25,0xfb,0xb0,0x74,0xc3,0x90,0x02,0x53,0x4c,0xa2,0xf6,0x48,0xff -,0xe2,0x01,0x15,0xaa,0xfb,0x0e,0xef,0xee,0x5b,0xea,0xda,0xd1,0x6b,0x33,0x6a,0x68,0x58,0x04,0x57,0x8b,0xc0,0x82,0x79,0x5c,0xe9,0x86,0xbc,0x93,0xe2,0xd8,0xa5,0xeb -,0x91,0x3f,0x27,0x63,0x01,0x8d,0x25,0x09,0x5f,0xd4,0xfb,0x06,0x5f,0x92,0x23,0x86,0x85,0xc3,0x19,0xb2,0xdb,0xe1,0x68,0x5d,0x3c,0x97,0x89,0x6c,0x40,0x29,0x91,0x72 -,0x01,0x2f,0x36,0x4f,0x49,0x54,0xb1,0xa1,0xd5,0x3d,0x5a,0xfb,0x16,0x64,0x24,0xf5,0xa4,0x82,0x8f,0x20,0x32,0xaf,0x15,0xf1,0xeb,0x51,0xcd,0x1c,0x30,0xed,0x12,0x26 -,0x83,0x91,0x15,0x30,0x91,0x6a,0xa8,0xf3,0x40,0x2e,0x2e,0x03,0xcd,0x8d,0x61,0x43,0x05,0x9c,0x16,0x48,0x54,0xa2,0x32,0x94,0x46,0xaa,0x66,0x82,0x7a,0x79,0x1d,0xeb -,0xa4,0x30,0x7a,0xf2,0xf0,0x2d,0xb6,0x31,0xda,0x99,0x47,0xa3,0xd5,0xc3,0xba,0xfe,0xcf,0xd7,0xbf,0x3d,0x3b,0xb6,0x0c,0xb4,0xf6,0xfa,0x7e,0x91,0x47,0xc7,0xf9,0x9b -,0x7d,0x41,0x26,0xbf,0x4d,0x5f,0x5e,0x5c,0xf8,0xf5,0x94,0xde,0x96,0xf6,0x76,0xf6,0x2d,0xeb,0xf9,0xd3,0xc2,0xb1,0x4c,0x6c,0x8a,0x51,0x8d,0x02,0x64,0xc8,0x9a,0x28 -,0xbf,0x24,0x29,0x8c,0x48,0x6a,0xd7,0xb9,0x72,0xcb,0x6c,0xd7,0x70,0x91,0x46,0xa8,0xe2,0xd2,0x55,0x3f,0x5f,0x96,0xcd,0x33,0xdd,0x61,0xe9,0xd0,0x42,0x4a,0x8e,0xe4 -,0x8e,0x26,0xed,0xe0,0x32,0xb5,0x78,0x8d,0xd3,0x1c,0xdd,0xbc,0x80,0x00,0xc7,0x83,0xd2,0xc2,0xcd,0x9e,0xba,0x3d,0x32,0x4c,0x22,0xe9,0x6f,0xbd,0x7b,0xbc,0x67,0x1d -,0xf9,0xc5,0xee,0x29,0x58,0xca,0xa9,0xa9,0x6a,0xd8,0xcc,0x5c,0x3a,0xb6,0xe3,0xa4,0xc6,0x38,0xd3,0x5b,0xa3,0xa3,0x4e,0x89,0x8b,0x4c,0xc1,0x0f,0x6c,0xf6,0x57,0xb5 -,0xf9,0xc5,0xb6,0x0a,0x75,0xa1,0xb2,0x0d,0xaf,0xa1,0xee,0x53,0x68,0x9a,0x46,0xb2,0x8f,0x04,0x82,0x1f,0x88,0xd7,0xcc,0x9e,0x0f,0x59,0x36,0x00,0xd9,0x65,0xad,0x9a -,0xce,0x8f,0xa5,0x56,0x87,0xb5,0x3b,0x4d,0xe1,0xaf,0xbf,0x2b,0xda,0x19,0xbb,0x33,0x57,0x11,0xc0,0xff,0xf1,0x50,0x80,0x31,0x7f,0xfc,0x21,0x6a,0xcf,0xef,0xff,0xcf -,0xff,0xef,0xb4,0x81,0x30,0x50,0x6a,0x12,0x0c,0x09,0x82,0xe1,0x20,0xa0,0x98,0x28,0x43,0x0a,0x04,0x82,0x83,0x30,0x90,0x84,0x66,0x11,0x53,0xdb,0xc7,0x5e,0x3c,0xf5 -,0xeb,0x8f,0x9f,0x3c,0xf5,0x19,0x51,0x75,0x31,0xaa,0xa4,0x25,0xed,0x22,0x71,0xa9,0xc0,0x95,0xf8,0x67,0x13,0x6f,0x1f,0xe8,0x5f,0xcb,0x69,0xa7,0x7f,0xe6,0x47,0x8b -,0xa2,0x2f,0x29,0x09,0x33,0xf2,0xfb,0x7f,0x4d,0x9b,0x38,0xfd,0x1f,0xcb,0xba,0xd4,0x87,0xb7,0x27,0xad,0x72,0x1b,0xf8,0x8b,0xf6,0x79,0x6d,0xe5,0x5f,0xd2,0xd6,0x5e -,0x96,0xbb,0x4d,0x74,0xd7,0x37,0x18,0xde,0x92,0xc5,0x7b,0xdc,0xa6,0xfe,0x54,0x81,0xb3,0x5b,0xca,0xad,0xc7,0xca,0xdb,0x1c,0xdd,0x43,0xcc,0x6a,0x9a,0x3a,0xe1,0x6f -,0x4a,0x28,0x48,0xb3,0x49,0x26,0xaf,0x54,0xf8,0xd2,0x7d,0x84,0x9d,0x52,0x8e,0xe9,0x0f,0x0e,0x89,0xad,0x5a,0x74,0x43,0x32,0xfa,0xa7,0x7b,0xa1,0x75,0x48,0xaf,0x3b -,0x24,0xa2,0x8a,0x2f,0x34,0xd7,0x41,0x47,0xa8,0x35,0xc8,0x00,0x90,0x02,0xba,0xa8,0x05,0x1a,0x05,0x42,0x81,0x62,0xa0,0x48,0x28,0x16,0x0c,0x05,0x02,0xc2,0x41,0x30 -,0x50,0x6c,0x25,0x12,0x05,0x46,0x61,0x51,0x88,0x54,0x22,0x15,0x09,0x88,0x46,0xfb,0x6a,0xaa,0x57,0xc7,0x3a,0xe7,0x15,0x35,0x99,0xac,0x9c,0xcb,0xb5,0x4d,0x2b,0x4d -,0x56,0x2f,0x9b,0xbb,0xd0,0xed,0xdf,0x6e,0x9a,0x3e,0x15,0xea,0xed,0x47,0xee,0xd5,0x77,0x1a,0xf0,0xd3,0x7c,0x8a,0x87,0x2f,0x31,0x65,0x78,0x8d,0xf8,0xdd,0x96,0xdd -,0xc8,0xae,0x55,0xf7,0x7c,0x33,0xb7,0xfb,0x26,0xaa,0xfc,0xaf,0xb4,0xd8,0xea,0x93,0xf0,0x1c,0x63,0xa7,0xe7,0x9c,0x97,0x7b,0xe4,0x3f,0x34,0xfd,0xe7,0x18,0x2d,0xf7 -,0x56,0xda,0x18,0xb8,0xb5,0x14,0x06,0x37,0xbd,0xb0,0xfd,0xda,0x23,0x92,0x7a,0xed,0x4e,0xf2,0x63,0x87,0x34,0xab,0xf1,0x3a,0x5b,0x9d,0x99,0xe5,0x4e,0x05,0x7c,0x2a -,0x1c,0xfc,0xcf,0x04,0x1c,0x40,0x55,0x38,0x73,0x50,0x38,0x47,0x73,0x9e,0x7a,0xc7,0x8f,0x37,0xe4,0xf2,0x80,0x58,0x2d,0xe7,0x72,0x0e,0x00,0xb5,0x01,0xeb,0xd8,0x04 -,0x4c,0x76,0xb5,0x96,0x0f,0x2f,0x39,0xaf,0x0e,0xa3,0x90,0xa3,0xbb,0xc4,0x01,0xdc,0x49,0xfe,0x20,0xd7,0xce,0x3b,0xa5,0x2c,0x54,0x5c,0x28,0xbc,0x80,0xe0,0xff,0xf1 -,0x50,0x80,0x34,0x3f,0xfc,0x21,0x0a,0xcf,0xcf,0xfe,0x7f,0xe6,0xff,0xb5,0x62,0x18,0x48,0x48,0x16,0x1c,0x05,0x84,0x81,0x50,0xa0,0x58,0x28,0x43,0x0a,0x14,0x84,0x21 -,0x30,0x88,0x48,0x26,0x11,0x09,0x84,0x46,0x61,0x11,0x38,0xd7,0x6f,0xbf,0x73,0x7d,0xf1,0xbf,0x8e,0x54,0xbd,0x73,0x08,0x50,0x6a,0x97,0xbe,0x34,0x75,0xc5,0x8f,0x46 -,0x96,0xd1,0x77,0x3d,0xb7,0xff,0x8f,0xd7,0xcb,0x95,0x3f,0xdf,0xfd,0x4f,0x10,0x54,0x58,0x64,0xeb,0x3e,0xc1,0xf3,0xb5,0xd3,0x88,0xf3,0x40,0xde,0xff,0x14,0x81,0x7b -,0xc1,0x3a,0x19,0xef,0xd1,0x1e,0xff,0x89,0xaa,0xb9,0x23,0x23,0x78,0x4a,0x77,0xfa,0x40,0x73,0x32,0xfe,0x05,0xf9,0xc5,0x32,0xfe,0xdd,0xb0,0xea,0xa6,0x57,0x7c,0x16 -,0x83,0xd6,0x27,0x47,0xf2,0x99,0xa5,0xe5,0xb1,0x2e,0x72,0xde,0x92,0xab,0x0d,0x34,0xa8,0x56,0x2a,0xf6,0x47,0xce,0x4a,0xd5,0x3a,0xfa,0x2b,0xe7,0x74,0x9c,0x69,0x0d -,0xed,0x2a,0x58,0xd3,0xf1,0xe1,0x7b,0x5e,0x35,0xf2,0x28,0xc4,0xad,0x54,0x50,0x85,0x2d,0x47,0xb1,0xac,0x05,0x2c,0x4f,0xcc,0xf3,0x72,0x15,0x12,0xb8,0xa7,0x51,0xb8 -,0x5c,0x81,0x77,0xac,0x3d,0xd1,0x62,0x40,0xa8,0x13,0xc8,0x36,0x22,0x85,0x06,0xc1,0x40,0xa8,0x58,0x48,0x26,0x0a,0x85,0x04,0xa4,0x70,0xa8,0xd8,0x2a,0x23,0x0b,0x84 -,0x44,0x61,0x11,0x18,0x44,0x4f,0xe3,0x5b,0xbc,0xaf,0x6f,0x3d,0xf7,0x55,0x6a,0x54,0x6f,0x51,0x32,0x5d,0x32,0x71,0x8f,0x6b,0xee,0xa4,0xeb,0xc8,0xf0,0x7f,0xdf,0xfe -,0xbf,0x78,0xaf,0xe3,0x52,0x97,0xc9,0xd3,0xe4,0xe9,0xff,0xf2,0x73,0x8a,0xac,0x8d,0x3f,0xfc,0xfe,0x58,0xe7,0xf1,0x66,0x05,0xce,0xae,0x15,0x8f,0xbb,0xab,0x7a,0xfd -,0x5f,0xe1,0xac,0xfe,0x9a,0x2f,0x38,0x72,0xea,0xf9,0x02,0x3b,0xbd,0x6d,0xc8,0xba,0xff,0x6f,0x64,0xeb,0x70,0x5f,0xd7,0xc3,0x8b,0x93,0x8f,0x0e,0x28,0x7d,0x28,0x87 -,0x09,0xa1,0xc5,0x7c,0x17,0xf0,0xae,0xba,0xae,0xbd,0x5a,0xcf,0x26,0xa9,0x69,0x8f,0x83,0xd0,0xe6,0x0b,0x25,0xc9,0xdb,0xc7,0x82,0xb8,0xc8,0xb4,0xf2,0x93,0x84,0x73 -,0x59,0x2e,0x35,0x4c,0xf7,0x92,0x07,0xce,0x04,0x08,0xe0,0xb8,0xa8,0xf8,0xfd,0x96,0x70,0xc6,0xb8,0x4d,0xaf,0xdf,0xc5,0x60,0x1c,0xdd,0xef,0x71,0x57,0xe6,0xec,0x1b -,0x37,0x3c,0x8a,0xdb,0xbd,0xb0,0x12,0x0e,0x76,0x44,0x89,0x67,0x1f,0xb9,0x12,0x7d,0x8b,0x78,0xa0,0x4f,0x66,0xe8,0x29,0x33,0xdc,0xa1,0xdf,0x0e,0xc0,0x58,0x0e,0xff -,0xf1,0x50,0x80,0x33,0x1f,0xfc,0x21,0x0a,0xcf,0xd7,0xff,0xbf,0xcf,0xd7,0xb1,0x30,0xa8,0x58,0x28,0x16,0x0a,0x05,0x42,0x41,0x81,0x38,0x60,0x28,0x25,0x12,0x09,0x84 -,0xa1,0x40,0xa8,0x58,0x28,0x22,0x12,0x04,0x86,0x22,0x32,0x09,0x53,0x2a,0xfa,0xdf,0x1c,0xfa,0xf3,0xbb,0xbb,0xef,0xaa,0xc9,0x75,0x79,0x30,0x4a,0x97,0xbf,0xaa,0xbd -,0xe5,0xfc,0x57,0x43,0xf3,0xef,0x6b,0xfa,0x7e,0x11,0xc9,0x74,0xc3,0xab,0xc4,0x7a,0x7c,0xe3,0xfc,0x30,0x70,0x2b,0x4a,0x07,0xa0,0xf5,0x3a,0x3f,0x5a,0x63,0xdd,0xe2 -,0x9e,0x0f,0x3f,0x2d,0xa8,0x6c,0xe2,0x86,0x4a,0x7a,0xcc,0xcd,0x2a,0x78,0x12,0x0f,0xb5,0x65,0x7e,0x0e,0xb2,0x7e,0x06,0x84,0x6a,0x86,0x87,0xc7,0xa9,0xe9,0xfb,0xba -,0xf9,0x26,0x76,0x3c,0xb3,0x20,0x13,0xa7,0x52,0xa7,0xa2,0xf8,0x8e,0x7d,0x3d,0xde,0xa1,0x36,0x62,0x19,0xed,0x55,0x68,0x08,0x8d,0x6a,0x7c,0xe2,0x58,0xb5,0x06,0xc7 -,0xc6,0xe5,0x9d,0x15,0xe3,0xbd,0x62,0xcf,0xc6,0x35,0xd2,0xc0,0x5a,0xb0,0xac,0x22,0x1f,0x5a,0x15,0x7a,0x34,0xcf,0x5e,0xc0,0x26,0x3d,0x65,0x22,0xc9,0x09,0x19,0xa4 -,0x2e,0x2c,0x00,0x08,0x91,0x02,0xa5,0x06,0xc3,0x50,0xa0,0xd4,0x2e,0x15,0x0b,0x05,0x02,0xa3,0x41,0x30,0x50,0x4e,0x15,0x2b,0x85,0x82,0x42,0x30,0xb8,0x4c,0x2a,0x13 -,0x08,0x84,0xc2,0x23,0x77,0xac,0xe3,0xbe,0xb7,0xaa,0xbe,0x53,0xe3,0xdf,0x8d,0xee,0x55,0xd6,0xa5,0x65,0xb7,0x2a,0x71,0x75,0x7c,0xd5,0xfb,0x34,0x36,0x5f,0xd3,0x71 -,0xed,0xd1,0x4e,0xae,0x02,0xf5,0x68,0x6d,0x71,0xa9,0x7d,0x07,0x16,0x77,0xea,0x79,0x3e,0x74,0x47,0xc2,0xfd,0xdc,0x9e,0xbf,0x30,0x79,0x3e,0x5e,0x07,0x0f,0xbc,0xf8 -,0x9f,0xe8,0xff,0xbf,0xfd,0xeb,0x24,0xde,0x1c,0xe8,0xb3,0xb3,0xfb,0xa7,0xad,0xff,0xf8,0x75,0xbf,0xb5,0xf0,0x77,0x15,0xb1,0xbc,0xf1,0x1e,0x60,0x1c,0xcf,0x1e,0x5c -,0x62,0x1c,0x3e,0xb8,0x38,0x50,0xe2,0xef,0xf1,0x73,0xf2,0x3c,0x00,0x3e,0x40,0x7d,0x5c,0x9c,0x4d,0xfc,0xb9,0x8e,0x4e,0x91,0xb6,0xfa,0xae,0x43,0x77,0x7f,0xa2,0x8b -,0xe9,0xce,0xda,0x2d,0xbe,0x50,0xbf,0x1c,0xed,0xa1,0xc8,0x17,0xf4,0xa3,0xb5,0xc3,0xa1,0x38,0x92,0xfd,0x45,0x1e,0xb3,0xbc,0x7b,0xe0,0x07,0x85,0xb6,0x00,0x7b,0xaf -,0x18,0x1c,0x9e,0xe0,0x00,0xbc,0xca,0xfc,0x1a,0xa1,0x09,0x94,0x68,0xff,0xfe,0xa0,0x2a,0x2a,0x01,0xb4,0x75,0x03,0x80,0xff,0xf1,0x50,0x80,0x32,0x1f,0xfc,0x21,0x0a -,0xcf,0xff,0xeb,0x7e,0xff,0xd9,0xb2,0x40,0xb8,0x58,0x88,0x12,0x0c,0x05,0xc6,0xc1,0x40,0xa8,0x5c,0x24,0x14,0x11,0x05,0x02,0x41,0x41,0x10,0x50,0x2a,0x12,0x20,0x8c -,0xc2,0x21,0x30,0x89,0x8c,0x3e,0xfc,0xde,0xfc,0x75,0xbf,0xaf,0x1e,0xde,0x92,0x9d,0x77,0x74,0x4a,0x4c,0x9c,0x67,0xb7,0x7f,0x1e,0x97,0x3e,0xfa,0x1c,0x5d,0xdb,0x5f -,0xab,0x78,0xdb,0xa7,0x8c,0xde,0x07,0xdc,0x3e,0x3f,0x50,0xec,0x91,0x51,0x57,0xf8,0x5f,0x10,0xfb,0xdf,0xdc,0xf8,0xff,0x0b,0x75,0x79,0x6d,0x1e,0x3c,0xff,0xe5,0xb1 -,0x9e,0x45,0xbc,0x9d,0xb7,0x6f,0x85,0xcf,0x73,0x95,0x57,0x90,0x7f,0x3a,0xf9,0x6f,0x52,0xe4,0x24,0x1d,0x44,0x83,0x97,0x33,0x3e,0x6e,0xc8,0x7e,0xa2,0x2f,0xbe,0x28 -,0xba,0x20,0xa9,0x50,0xf9,0x1a,0x61,0x67,0xde,0x75,0x2e,0x99,0xa5,0x64,0x15,0x04,0x24,0x8a,0xf4,0x90,0xe9,0xa1,0x78,0x2b,0x62,0x76,0xd6,0x49,0xba,0x57,0x81,0x49 -,0x2b,0x79,0xfa,0x30,0x2d,0xa4,0x85,0xac,0x0f,0x58,0x08,0x20,0x52,0xa8,0xd6,0xc0,0xb8,0x5e,0x08,0x80,0x58,0x12,0x02,0xa1,0x46,0x81,0x60,0xa0,0x58,0x28,0x25,0x09 -,0x05,0xc3,0x01,0x40,0xa8,0x98,0x28,0x16,0x12,0x04,0xc2,0x82,0x51,0x30,0x54,0x68,0x12,0x19,0x8d,0x42,0x21,0x31,0x08,0x9d,0xde,0x4d,0x55,0xf3,0xc7,0xc7,0xe9,0xfb -,0xfe,0x95,0x37,0xaa,0xab,0xd6,0xd7,0x39,0x91,0x96,0x71,0x52,0xf9,0xb9,0xd7,0xb0,0x75,0x3d,0xaf,0x57,0xea,0x7b,0x6d,0xd4,0x43,0xaf,0x41,0xf3,0x1f,0x02,0xfd,0x07 -,0xab,0xd0,0x29,0x25,0x0c,0xfc,0x77,0xee,0x6e,0xfc,0xf9,0x39,0x4d,0x7b,0x73,0xff,0x3b,0xf3,0x7c,0x28,0xfa,0x55,0x78,0x27,0xf9,0x38,0xde,0xbf,0x27,0xff,0x14,0xf1 -,0x7f,0x7d,0x9f,0xe4,0xb5,0x89,0x07,0x5f,0xd0,0x3c,0xc8,0xfd,0x7a,0xe2,0x38,0x6d,0xc0,0x87,0x9a,0x4e,0x3c,0x0d,0x2d,0x50,0x2f,0xed,0x90,0x88,0x81,0xd2,0xfa,0x69 -,0x5c,0x5b,0x7c,0x6c,0x1c,0x5c,0x79,0x35,0xcc,0x52,0x38,0x52,0x91,0x79,0x41,0xb4,0x80,0x8b,0x5d,0x0e,0xf1,0xe3,0x07,0x91,0xae,0xe5,0x49,0x6b,0xeb,0xb5,0x64,0x7b -,0x9b,0x5c,0x1e,0x5a,0x8d,0x1a,0xc7,0x88,0xee,0x05,0xbc,0x52,0x03,0xff,0x6f,0xfe,0xbe,0xf2,0xe0,0x00,0x04,0xf8,0x5a,0x3a,0xad,0x2b,0x40,0xf8,0x74,0x6b,0x14,0x3b -,0xee,0xe8,0xbc,0x02,0x4d,0xc0,0x38,0xff,0xf1,0x50,0x80,0x31,0x5f,0xfc,0x21,0x0a,0xcf,0xef,0xf5,0xbe,0xce,0xe3,0xb0,0x40,0xb1,0x08,0x28,0x26,0x13,0x89,0x04,0xa1 -,0x40,0x90,0x54,0x28,0x35,0x0a,0x09,0x44,0x62,0x51,0x18,0x48,0x22,0x23,0x10,0x84,0xc2,0x25,0x6e,0x63,0xe3,0x9f,0x3e,0x3b,0xf3,0xce,0xb5,0xbe,0xb9,0x54,0x6b,0x96 -,0xa9,0x11,0x55,0x2f,0x5c,0xf5,0x54,0xf6,0xf2,0x34,0xca,0x7e,0x36,0x97,0x9d,0x1f,0xf1,0xe1,0xd1,0xbb,0x18,0xf6,0x79,0x07,0xb3,0x29,0x1e,0x5e,0xa2,0xf7,0xde,0x4f -,0xf5,0xdf,0xd7,0x67,0x7f,0x37,0x94,0x78,0xf0,0x1d,0x65,0xa3,0xec,0xbc,0x2d,0xa9,0x78,0x7e,0x16,0x49,0xe0,0x39,0x1f,0xed,0x3d,0x8c,0x27,0x7c,0xcb,0x31,0xa9,0xda -,0x73,0x8e,0x30,0xa4,0xdd,0x73,0x3a,0x10,0x73,0xfb,0x27,0x92,0x56,0x0a,0xff,0xe9,0xfd,0x9b,0x80,0x9f,0x8c,0x19,0xf1,0x07,0x75,0x87,0x17,0x00,0xe6,0xff,0x4c,0x67 -,0xfb,0x71,0x0c,0x9c,0xd6,0x25,0x2c,0x6c,0x9e,0xcb,0xb4,0x5e,0x9a,0x12,0x4e,0x50,0xfd,0xca,0xab,0x20,0x36,0x07,0xae,0xf9,0x4c,0x88,0x0a,0xf7,0xb6,0x20,0x0a,0x40 -,0x24,0xb8,0xdc,0xb0,0x44,0x0a,0x00,0xaa,0x20,0xa8,0xc8,0x28,0x16,0x12,0x04,0x82,0xc1,0x41,0xb0,0x90,0x2a,0x36,0x09,0x85,0x44,0x22,0x70,0xa8,0x44,0x2a,0x16,0x08 -,0x8c,0xc2,0x21,0x32,0x08,0xdc,0xf1,0xcf,0xe3,0xf3,0x9f,0xab,0xd5,0x67,0xc7,0x75,0xbe,0xa8,0xdd,0xd7,0x1c,0x3d,0xe7,0xb7,0xbd,0x5a,0x4f,0x8e,0x75,0xe9,0xfb,0xef -,0x81,0xd2,0xf0,0x78,0xfb,0xdb,0xf7,0xa3,0xf7,0x6e,0xab,0x94,0x6b,0xd8,0x70,0x61,0xdf,0xf7,0x59,0xe8,0x25,0xf8,0xd0,0xf2,0x12,0xaf,0xe2,0x21,0xc5,0x6a,0x44,0x4b -,0xed,0xe6,0xf0,0xed,0x78,0x9c,0x7c,0x28,0x24,0x2c,0x47,0xaf,0xbf,0xdf,0xff,0x8e,0xe1,0xcf,0x90,0xe5,0xc0,0x78,0x94,0x79,0xdd,0x2a,0xd9,0xfb,0x92,0x8e,0xfd,0xfc -,0xb6,0xdf,0xab,0x7c,0x91,0xbf,0x92,0x38,0xf3,0x23,0xe1,0xc4,0x05,0x3f,0x4d,0xc4,0xb8,0x39,0x22,0x1c,0x39,0xf8,0x72,0xec,0xc2,0x86,0xfd,0x8e,0xa1,0xc8,0x92,0x81 -,0x05,0xda,0xfb,0x32,0x55,0x4a,0x52,0xe5,0xfc,0x15,0x78,0xa7,0x2c,0xca,0x2b,0xd7,0xb7,0xef,0x7a,0xe7,0x7c,0x08,0x97,0x9d,0xe1,0x11,0xdc,0xd3,0x12,0x56,0x7f,0x5f -,0x8e,0xcd,0x65,0x9f,0x66,0xac,0x4e,0xf2,0xb2,0x99,0x87,0x7c,0x94,0xa8,0x12,0xb0,0x0e,0xff,0xf1,0x50,0x80,0x32,0xbf,0xfc,0x21,0x0a,0xcf,0xff,0xff,0x6c,0xc7,0xc7 -,0xb3,0x50,0xb0,0x8c,0x2c,0x25,0x0a,0x05,0x82,0xe2,0x61,0x20,0x5c,0x28,0x22,0x0a,0x08,0x82,0x61,0x20,0xa0,0x4c,0x28,0x12,0x12,0x84,0xc6,0x21,0x30,0x88,0x4c,0x42 -,0x66,0x5d,0x3e,0x3d,0x7f,0xdf,0xfa,0x7b,0xf1,0x93,0xcf,0xad,0x5d,0x55,0xf3,0xc6,0x35,0xb2,0x5a,0xf3,0x5b,0xf8,0xf0,0x6b,0xab,0x81,0xe6,0xdd,0x4d,0xf4,0xfd,0x49 -,0xfe,0x3d,0xaa,0xea,0xe2,0x1c,0xba,0xfb,0xfb,0xf0,0xa4,0x53,0x2f,0xb0,0x27,0xcd,0xfc,0x7a,0xde,0x1c,0x43,0xa3,0x37,0xdb,0x23,0xd9,0x05,0x9f,0xe4,0xbf,0x3f,0x02 -,0x45,0x7f,0xe1,0xed,0xe0,0xd3,0xe6,0x5b,0xab,0x33,0x1a,0xc0,0xfa,0xf5,0x19,0x7f,0xf2,0x7d,0x17,0x83,0x00,0xe9,0xa4,0xa8,0xd4,0x47,0xc6,0xf2,0x45,0xc3,0x2d,0xcd -,0x98,0x5d,0x2f,0x5a,0xe7,0x83,0x0e,0xe4,0x13,0x82,0x59,0x7d,0xb1,0x9a,0x40,0x8f,0x7c,0xee,0xa9,0x6d,0x33,0xfa,0x28,0x80,0xa7,0xba,0xb2,0x7e,0x40,0x3b,0xc2,0xe8 -,0xac,0x3d,0x66,0xc0,0x44,0x45,0x16,0x58,0x97,0x89,0x50,0x28,0x16,0x14,0x54,0x05,0x5a,0x89,0x04,0xc1,0x41,0x10,0x50,0x2a,0x12,0x0b,0x85,0x02,0xc1,0x30,0xb8,0x50 -,0x2c,0x14,0x0b,0x05,0x44,0xc1,0x51,0x20,0x58,0x2a,0x11,0x0a,0x85,0x82,0x61,0x20,0x99,0x14,0x26,0x11,0x23,0x3f,0x1f,0xa6,0xb5,0xe3,0xf9,0xfd,0x2b,0xeb,0xdf,0xae -,0x75,0xdc,0x9b,0xad,0x33,0x55,0x51,0xf1,0xf3,0x9a,0x6a,0x56,0x4b,0xe7,0xf1,0x5c,0x07,0x17,0x4f,0x30,0xdd,0x07,0x8f,0x55,0xd0,0x3a,0x39,0x77,0xcd,0xf2,0xcb,0x0b -,0xed,0x7d,0xd3,0xbc,0x89,0x4f,0xf4,0xee,0xc6,0x37,0xbd,0x7e,0x37,0x29,0xd0,0xd5,0xa4,0x4d,0xf9,0xb2,0x55,0x92,0xce,0x4f,0x8c,0x38,0x71,0x71,0x4b,0x84,0x71,0x89 -,0x6e,0x8e,0x09,0x51,0xb8,0x71,0x38,0x8e,0x4d,0x9f,0x21,0xc5,0x53,0xfc,0x09,0xa6,0x96,0xa7,0xbc,0x45,0x01,0xa4,0xbe,0xd1,0x82,0xb7,0x30,0x9e,0x77,0xce,0x38,0x2e -,0x95,0xe0,0x71,0xe1,0xc7,0x9f,0x07,0x2e,0x47,0x2e,0x7d,0x9e,0x45,0xd8,0x54,0xa0,0x10,0x8b,0xbc,0xd9,0x01,0x0c,0xf7,0x5f,0xa9,0xf6,0xcf,0x44,0x74,0xa1,0xc3,0x56 -,0xb4,0xa1,0xff,0x0f,0xbe,0x58,0x7b,0xb6,0x1d,0xc2,0x4f,0x75,0x7e,0xfb,0xd9,0x50,0x7b,0x97,0xb3,0x93,0x9d,0x81,0xce,0xc2,0xff,0xb6,0xfc,0xa7,0x4f,0xa5,0x82,0xe1 -,0xac,0x17,0x50,0x30,0x01,0xc0,0xff,0xf1,0x50,0x80,0x2f,0xdf,0xfc,0x21,0x0a,0xcf,0xe7,0xff,0xf7,0xcf,0x5a,0xaf,0x30,0xb1,0x48,0x4e,0x34,0x09,0x85,0x02,0xa1,0x41 -,0x10,0x58,0x2a,0x12,0x32,0x04,0x84,0x28,0x30,0x89,0x5d,0xca,0xaf,0xfe,0xdf,0xfa,0x75,0xe3,0x9e,0x0b,0x52,0xae,0xf7,0x2a,0xf2,0x52,0x40,0x38,0xbd,0xf1,0xc4,0x83 -,0xfc,0x6f,0xe2,0x5e,0xaf,0x72,0x73,0xe1,0xd4,0xda,0xb0,0x79,0x7c,0x27,0x6b,0x0a,0x45,0xc2,0x47,0xf4,0x7d,0x62,0x1f,0x32,0x36,0x29,0xc5,0xef,0x7d,0x1b,0xe3,0xd6 -,0xc8,0x22,0xcb,0x7a,0x24,0x6a,0xbc,0x72,0xef,0x5b,0x7b,0x4e,0x56,0x2e,0xe8,0x5d,0x51,0xd4,0xcf,0x4f,0xbf,0x53,0x8a,0xc5,0xb5,0xa5,0x99,0x1a,0xdf,0xcb,0xab,0x84 -,0x6c,0x87,0xa4,0x50,0xc7,0xe0,0xc0,0x1e,0x6f,0xc8,0x9f,0x9f,0x47,0x2b,0x2c,0xe9,0x29,0x4a,0x28,0xa8,0x9d,0x18,0xe1,0x8a,0xba,0x92,0xd1,0x74,0xc8,0x10,0xdf,0x78 -,0x91,0x72,0x8a,0x95,0x8b,0x1c,0xc2,0x82,0x83,0xf7,0x15,0x50,0x4a,0x40,0x46,0xa2,0xd7,0x00,0x5e,0x1c,0x00,0xaa,0x20,0xb0,0x50,0x2c,0x14,0x12,0x85,0x82,0xa1,0x40 -,0xa8,0x50,0x8a,0x44,0x0a,0x89,0x02,0xc1,0x40,0xa9,0x18,0x4a,0x12,0x09,0x84,0x42,0xa1,0x31,0x28,0x4c,0x42,0x26,0x4a,0x4d,0xf9,0xf6,0xfb,0x0a,0x2a,0xf3,0x85,0x6e -,0x10,0xc7,0x19,0x75,0x5d,0x54,0x99,0xe7,0x43,0xe6,0x3b,0xf8,0xeb,0x70,0xd3,0xdb,0x7b,0xe9,0xe2,0x7c,0xdd,0x9b,0x95,0x71,0xff,0x37,0x7b,0x97,0xf9,0xbd,0xcd,0xe3 -,0x9d,0x7a,0xbc,0x8e,0x1c,0xd7,0xf0,0xe7,0xcb,0xe4,0xa6,0xb9,0xba,0x51,0xb3,0xe5,0xe1,0x9c,0xde,0x27,0x3e,0x43,0x87,0x0c,0xff,0xd4,0x3b,0x93,0x02,0x38,0xf6,0x6f -,0x0b,0x8a,0x85,0x77,0x38,0xff,0x9f,0xc2,0x5b,0xbb,0x3b,0x3e,0x7b,0xd1,0x5c,0xb9,0x47,0x5e,0x02,0xb9,0x10,0x77,0xaa,0xf8,0x13,0xc8,0xb7,0x2e,0x26,0x0a,0x31,0xde -,0x6a,0xbd,0x54,0x0a,0xb0,0x44,0xed,0x6d,0x02,0x15,0x92,0x1d,0x8f,0x2a,0x28,0x1a,0x68,0x83,0x8f,0x3a,0xa5,0x48,0xd2,0x02,0xc9,0x37,0xcf,0x1b,0x31,0x07,0xb5,0xf7 -,0x51,0x97,0xb7,0xee,0x9d,0x90,0x4c,0xcf,0x24,0x16,0xda,0x15,0xf7,0x02,0x60,0x77,0xff,0xff,0x3c,0x41,0xcc,0x39,0xc0,0x9f,0xb6,0xd9,0x08,0x07,0xbb,0xff,0xa0,0xb8 -,0x98,0x63,0x03,0x80,0xff,0xf1,0x50,0x80,0x2f,0x1f,0xfc,0x21,0x0a,0xcf,0xef,0xff,0x7f,0x4f,0xf7,0xb3,0x62,0x40,0x54,0x28,0x26,0x1a,0x05,0xc2,0x41,0x50,0xa0,0xcc -,0x28,0x25,0x11,0x05,0x42,0x82,0x20,0x8b,0xd4,0x67,0xb4,0xe3,0xc7,0x8e,0x8b,0xd7,0x33,0x25,0xd2,0x66,0xb1,0x04,0xad,0x6d,0xab,0xaf,0xbf,0xcf,0xc7,0x40,0xf9,0x36 -,0xfe,0x53,0xf5,0x8f,0x88,0x9f,0x63,0x8c,0xf5,0x05,0xdd,0xa9,0xf6,0x08,0xc7,0x39,0x80,0xf1,0x8d,0xe9,0xd7,0x13,0x52,0xca,0x01,0xd4,0x69,0xd8,0x69,0x7c,0x1f,0x54 -,0x75,0x37,0xac,0xf4,0x5f,0x64,0x6a,0x3b,0xd0,0x5b,0xad,0x12,0xb4,0xc6,0xda,0xf0,0xa4,0xa9,0x71,0xe0,0xf6,0x64,0x21,0x78,0xf4,0x74,0x0e,0x35,0x54,0x3d,0xb0,0xf8 -,0x96,0x0c,0x49,0xa5,0x5c,0xea,0xf3,0xa4,0xe7,0xc9,0x43,0xd4,0xf1,0x29,0x24,0x69,0x3b,0x4c,0x56,0xfd,0xf9,0x95,0x24,0xdf,0xa6,0xa2,0x34,0x4c,0x5f,0x70,0xe8,0xcb -,0x72,0xa2,0x09,0x4e,0x88,0x01,0x00,0xa2,0xe0,0x27,0x1b,0x01,0x20,0x44,0x05,0x3a,0x85,0x02,0xa1,0x40,0x90,0x54,0x2c,0x24,0x0a,0x85,0x02,0x41,0x41,0x18,0x58,0x24 -,0x14,0x09,0x85,0x08,0x61,0x50,0xa0,0x54,0x28,0x15,0x0a,0x05,0x82,0x22,0x30,0xa8,0x44,0x66,0x11,0x09,0x84,0x44,0xf5,0xd7,0x7e,0x7e,0x3f,0xa7,0xf8,0xf9,0xde,0xb5 -,0xe1,0xae,0x7e,0xbd,0xe7,0x3a,0x99,0x7d,0x78,0xbc,0xe3,0x96,0xa3,0x58,0x95,0xe5,0x7a,0x0f,0x2d,0x7c,0xe8,0xe3,0xd7,0xbb,0x57,0xdd,0xa6,0xed,0x6f,0xf0,0x78,0xfc -,0x41,0xf9,0x1b,0xd5,0x8b,0xd1,0xcf,0xfd,0xbc,0xb8,0x9a,0x1e,0x0f,0xfb,0x3d,0xf1,0x6f,0xfc,0x59,0xf2,0x9e,0x1b,0xcc,0xf7,0xfb,0x2d,0xbe,0x7f,0x67,0x87,0xef,0x75 -,0xdc,0x89,0x88,0x34,0x3f,0x8d,0xfe,0x00,0x10,0xf2,0x1c,0xbf,0x85,0x85,0x1f,0x09,0xcc,0x71,0xe0,0x16,0xd7,0xc3,0x28,0x45,0xb4,0xa7,0x64,0x3c,0x4e,0x4e,0x21,0x96 -,0x47,0xa6,0xa1,0x77,0xfb,0x5f,0x39,0xb2,0x6d,0x89,0x48,0x21,0x8b,0x88,0xa0,0x0c,0xf7,0xad,0x23,0xd6,0x9f,0x21,0xec,0x84,0xed,0xc2,0x2d,0x65,0xbb,0xcb,0xf0,0x02 -,0xbd,0x60,0x05,0xef,0x58,0x23,0x0b,0x58,0x35,0x7c,0xe7,0x28,0x45,0x62,0x90,0x8b,0xd7,0x9a,0x76,0xa8,0x14,0x78,0x97,0x01,0x50,0x66,0x03,0x80,0xff,0xf1,0x50,0x80 -,0x2e,0x1f,0xfc,0x21,0x0a,0xcf,0xe7,0xff,0xaf,0xcf,0xf7,0xb1,0x61,0xa0,0x58,0x4a,0x12,0x12,0x09,0x42,0x81,0x21,0x20,0x54,0x28,0x32,0x1a,0x84,0x82,0x81,0x50,0x90 -,0x8c,0x24,0x11,0x63,0xbd,0x5f,0x7f,0x7d,0xf1,0xdd,0x22,0x25,0x54,0xa5,0x49,0x57,0x36,0xe3,0x14,0x6a,0xa5,0xfd,0xfe,0xdf,0xaf,0x41,0x38,0x1f,0xab,0x7c,0xff,0x2d -,0xfd,0x71,0xd0,0x6e,0xf8,0x3d,0x79,0xce,0x86,0xf2,0x70,0x75,0x63,0xf7,0x28,0xfa,0xf1,0xcb,0xbc,0x4c,0xe3,0x6e,0x12,0x98,0x88,0xd9,0xd2,0x72,0x7a,0x13,0x43,0x91 -,0xb6,0x93,0xdb,0x33,0xd7,0x4b,0x4f,0x7b,0x95,0xb6,0xb4,0xb7,0x93,0x05,0xa3,0x07,0x92,0xfd,0xfe,0xd7,0x99,0x56,0xe1,0x52,0x63,0x1f,0x33,0x36,0x6a,0xc0,0x62,0x20 -,0x39,0x5f,0x6f,0x65,0x17,0xb0,0x58,0x8f,0xda,0x5b,0x0f,0xb8,0x6d,0x12,0x55,0x4f,0xa8,0xa6,0x78,0x5c,0x12,0xbe,0x07,0xa2,0xf0,0x82,0x37,0x30,0x08,0xad,0x71,0xd1 -,0x65,0xe9,0x0a,0x09,0xae,0x80,0xe2,0x54,0x9d,0x56,0x21,0x74,0x01,0x60,0x50,0x0a,0xb2,0x0a,0x05,0x42,0x81,0x50,0x90,0x5c,0x28,0x12,0x0a,0x85,0x04,0x41,0x40,0xb0 -,0x50,0xca,0x14,0x0a,0x94,0x42,0xa1,0x40,0x98,0x94,0x26,0x11,0x11,0x84,0x42,0xa1,0x30,0x88,0x9b,0x95,0xfe,0x9f,0xd7,0x7c,0x2a,0xdc,0x7a,0xd6,0x54,0x37,0xad,0xf1 -,0xc5,0x2b,0xcf,0xdb,0x3c,0xdd,0x2a,0xea,0x71,0xc6,0xb4,0x3c,0x38,0x8b,0xa3,0xba,0xe2,0xd2,0xec,0xfa,0x3e,0xfe,0x93,0x1e,0x47,0x6f,0x59,0xe8,0x07,0xf3,0x4e,0x06 -,0x27,0xf1,0x0c,0x82,0x79,0x2f,0x25,0xcf,0xf2,0x67,0x7a,0xfe,0xe7,0xdd,0xee,0x6b,0xe5,0xa2,0x75,0xab,0xa6,0x9c,0x14,0xe0,0xf9,0xdf,0x2c,0xb9,0x5d,0x3f,0x24,0x71 -,0x07,0x11,0xe6,0x00,0x39,0x3e,0xa0,0xe2,0x3c,0x79,0x00,0x73,0x03,0x93,0x9c,0xb8,0x56,0x01,0x37,0x3d,0xef,0x1e,0x35,0x27,0x2f,0x77,0xdd,0xcb,0xa1,0x81,0xeb,0xcc -,0xec,0x4a,0x3c,0x1b,0xc5,0x3f,0xce,0xf5,0xda,0xe3,0xdd,0x55,0x88,0x8e,0x0e,0x68,0x0a,0x51,0xeb,0x9f,0x5a,0x1b,0x01,0x5c,0x93,0xac,0x02,0x33,0xba,0xbd,0xce,0x22 -,0x77,0x80,0x90,0xf1,0x00,0x00,0x7a,0xe0,0x98,0x2c,0x03,0x80,0xff,0xf1,0x50,0x80,0x30,0x7f,0xfc,0x21,0x0a,0xcf,0xff,0xf7,0xf5,0xdf,0xfd,0xb3,0x61,0xa8,0x58,0x24 -,0x15,0x19,0x05,0x44,0x81,0x20,0xa0,0x54,0x28,0x32,0x0a,0x05,0x42,0x43,0x50,0x98,0x54,0x28,0x13,0x09,0x09,0x02,0x44,0x11,0x98,0x44,0x4c,0xb5,0x7e,0x3d,0x71,0x4c -,0xae,0x33,0x1c,0x76,0xad,0x2a,0xa4,0x94,0x64,0x54,0x44,0x9d,0x7f,0xdf,0x41,0x3a,0xcf,0xd3,0x6f,0x0f,0x27,0x39,0xa9,0x75,0xf0,0x3a,0xe5,0xb3,0xd6,0xcb,0xd1,0x36 -,0x8d,0x8b,0xc3,0x6e,0xab,0x9f,0x69,0x67,0x35,0x09,0xaf,0xb9,0x22,0xe8,0x92,0xf4,0xee,0xd3,0xec,0xa4,0xbd,0xc5,0xa9,0xd8,0xb5,0xdb,0xed,0xe3,0x9c,0x64,0x7c,0xf4 -,0x63,0xea,0x5d,0x21,0x32,0x8e,0x49,0xa7,0xfd,0x4b,0x89,0x77,0x28,0x4d,0x35,0x70,0xa1,0xe1,0xad,0x52,0x92,0xbd,0x9e,0xec,0xab,0xc4,0x97,0xa5,0x23,0xc6,0x93,0xf0 -,0x98,0xf4,0x62,0x7d,0xa4,0x7e,0x96,0x07,0x11,0x81,0xfa,0x8f,0xac,0x15,0x50,0x05,0xe9,0x7a,0xb0,0xef,0xda,0x3b,0x82,0xf0,0x5d,0x18,0x10,0xa1,0x15,0x22,0x2e,0xc5 -,0x54,0xba,0x82,0xba,0x69,0x1f,0x9a,0x1c,0xf3,0x2b,0x50,0xa2,0x8b,0xa3,0xee,0x12,0x02,0x92,0x04,0x00,0xa7,0x40,0xa8,0x90,0x4a,0x14,0x19,0x05,0x42,0x41,0x50,0xb0 -,0x48,0x28,0x11,0x0a,0x85,0x02,0xa3,0x40,0xb0,0x54,0x2e,0x25,0x13,0x85,0x42,0x61,0x12,0x18,0x44,0x2a,0x13,0x08,0x8d,0xef,0xc5,0x2f,0x7d,0x6f,0x4d,0xde,0x6b,0x9f -,0x8f,0x7c,0xe2,0x66,0x57,0x9f,0x1f,0x1e,0x2f,0x73,0x5f,0x55,0xdf,0xb7,0xcd,0x7c,0x67,0x5e,0xdf,0x43,0xd1,0x78,0x3b,0xf4,0x3f,0x1a,0xf1,0x74,0x6f,0x27,0xba,0x8e -,0xd1,0xe7,0xf6,0xf3,0x5f,0xba,0x14,0xb8,0x1d,0x8d,0x7e,0x75,0xde,0xe7,0x24,0xf5,0xbd,0x70,0x6b,0xef,0x27,0x02,0x07,0x8f,0x27,0x23,0x97,0x3b,0xb7,0x73,0x67,0x2a -,0xc1,0xe4,0xd8,0xe0,0x17,0xb0,0x62,0xf1,0xe0,0x38,0x8d,0x02,0xf9,0xb6,0x47,0x81,0x3b,0x10,0x0f,0x20,0x0e,0x6e,0x12,0x2a,0x38,0x39,0x0e,0x0f,0x1e,0x01,0x03,0x79 -,0xbb,0x51,0x3b,0xc6,0xed,0xda,0xd1,0xea,0xf9,0x22,0x0b,0x25,0xc8,0xae,0x1f,0xb4,0x77,0xd0,0x46,0x34,0x90,0x2b,0x70,0x17,0x44,0x56,0xe0,0x49,0xf9,0x71,0xbe,0x80 -,0xb9,0x3e,0xf6,0x62,0x00,0x07,0x89,0xdc,0x01,0x32,0x80,0x11,0x11,0xb8,0x1c,0xff,0xf1,0x50,0x80,0x2f,0x7f,0xfc,0x21,0x2a,0xcf,0xeb,0xb7,0xff,0xdf,0xfc,0xb5,0x40 -,0xb0,0x5c,0x2c,0x22,0x0a,0x04,0x84,0x81,0x50,0xa0,0x48,0x26,0x12,0x1a,0x85,0x02,0xa1,0x40,0xa8,0xd0,0x6a,0x11,0x09,0x84,0x82,0x21,0x21,0x08,0x48,0x22,0x12,0x11 -,0x88,0x44,0xa9,0xd6,0xf8,0xe7,0xcf,0x77,0x52,0x71,0xce,0xf8,0xda,0x54,0xd6,0x55,0x2e,0xa5,0x55,0x2e,0x95,0x7c,0x4f,0xc6,0x0d,0x7e,0x3e,0xb7,0x9b,0xb6,0x81,0xd9 -,0xf3,0xd3,0xfd,0x9d,0x1d,0x97,0x59,0xcc,0x9f,0x14,0x77,0x3b,0xbd,0xaf,0x0f,0xa7,0xa9,0x73,0xb5,0x76,0xe5,0x57,0x64,0xce,0xf1,0x5e,0x08,0x79,0x34,0x65,0xd8,0xc3 -,0x9c,0x78,0xaa,0x46,0xad,0xca,0xc2,0x9d,0x53,0x76,0x14,0x9b,0xad,0xba,0xdc,0xbb,0x9f,0x24,0xc7,0x01,0x2b,0x11,0x08,0x36,0x72,0x5a,0x12,0x73,0xe7,0x19,0xca,0x48 -,0xf9,0x8b,0x9f,0x51,0x65,0xed,0x31,0x49,0xbd,0xbb,0x5b,0x1d,0x22,0xdc,0x64,0x36,0x92,0x8c,0x1f,0x56,0x0d,0xc4,0x56,0x34,0x39,0xc6,0xf1,0xeb,0xa4,0x4b,0x99,0x7e -,0x81,0x8a,0x81,0xae,0xba,0xa3,0x0d,0x66,0xba,0x7b,0x6d,0x84,0xf2,0x82,0x0c,0x26,0x81,0x58,0xf5,0xe4,0x3d,0x83,0xd6,0x97,0xba,0x0d,0x20,0x13,0x02,0xac,0x82,0xc1 -,0x20,0xa0,0x54,0x28,0x16,0x11,0x09,0x04,0xe1,0x20,0xa0,0x88,0x2a,0x24,0x0a,0x89,0x02,0xa1,0x30,0xa8,0x5c,0x2a,0x27,0x0a,0x88,0x48,0xa1,0x13,0x33,0x58,0xeb,0xf3 -,0xf1,0xb9,0x79,0x4e,0x39,0xfa,0xfb,0x45,0xd5,0x5e,0xb7,0x19,0x52,0xe7,0xe1,0xbd,0xf1,0xdf,0x4e,0xfe,0x06,0xa2,0xe1,0xd3,0xb8,0xbd,0x5b,0x32,0x75,0xf5,0x47,0xc7 -,0x95,0x3e,0xc3,0xee,0x72,0xd3,0xb1,0x8f,0xaf,0xa5,0x6e,0xf1,0x3f,0x98,0x8f,0x07,0x53,0x97,0x5c,0xab,0x93,0x87,0x3e,0xaa,0xcf,0xcb,0xf1,0x1c,0xb9,0xb9,0x2b,0x9b -,0x8b,0xba,0x2d,0xfb,0x1f,0x7a,0x29,0xe6,0xe6,0x12,0xee,0xbb,0x01,0xe6,0x23,0x93,0x90,0x1d,0x3e,0x78,0x90,0x70,0xe3,0xe2,0x05,0xb8,0x04,0xf3,0x45,0xf1,0x70,0x0d -,0xd2,0xdb,0x2e,0x43,0x69,0x7b,0xb5,0x3b,0xd9,0x39,0x9c,0x28,0xe6,0x26,0x01,0x30,0x1c,0x9c,0x5c,0xae,0x33,0x40,0xf8,0x80,0x33,0x5c,0x01,0x33,0xcc,0x00,0x00,0xa4 -,0xcb,0x04,0xa2,0x0b,0x81,0x00,0x16,0xb8,0x2c,0x07,0xff,0xf1,0x50,0x80,0x2d,0x7f,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x63,0x24,0xe4,0xd2,0x68,0x2a,0x53,0xc8,0xec,0x9f -,0xb9,0x7a,0xfa,0x7e,0x78,0x50,0xef,0xc5,0xbd,0x7f,0x2e,0x32,0x97,0x51,0xb3,0xe7,0xa3,0x74,0xbf,0x4e,0xa5,0x5d,0x36,0xeb,0xd4,0x1c,0x65,0x0f,0xf8,0x35,0xd4,0xdd -,0xf5,0x2d,0x5d,0x17,0xa0,0x07,0xc6,0x8d,0x6b,0x2f,0xf5,0x7f,0xa3,0x2e,0x38,0x6b,0x88,0x38,0x60,0xef,0x66,0x84,0x57,0x75,0xd7,0xa5,0x1f,0xc7,0x79,0x25,0x5a,0xf4 -,0x67,0xe5,0xdb,0x06,0x66,0xbf,0xd2,0x52,0xe7,0x89,0x9a,0x9a,0x19,0xa8,0xf4,0xeb,0x14,0x8a,0x51,0x38,0xa7,0x55,0x20,0xad,0x2b,0xb1,0x99,0x1f,0xad,0x1b,0x2b,0xea -,0xc9,0xd7,0x46,0xf2,0x16,0x48,0x5b,0x63,0x74,0xe9,0x7c,0x79,0xee,0x2f,0x8f,0x3d,0x6b,0xb9,0xd3,0x4c,0xf9,0x9c,0x63,0xef,0x9f,0xe8,0xeb,0x8e,0x14,0x2b,0xa6,0x34 -,0xbb,0xe8,0xc7,0x96,0x1b,0x57,0x8b,0xad,0xf1,0x77,0xfb,0xeb,0x93,0x0f,0x8c,0xfc,0x1e,0xe7,0xdd,0x7b,0x30,0xc5,0xf7,0x32,0xf7,0x47,0x60,0x08,0x44,0x63,0xa1,0xc4 -,0x1f,0x0c,0x5c,0x86,0x12,0x11,0x21,0x12,0x95,0x8a,0x16,0x88,0xcd,0x09,0x6b,0x0a,0xba,0x9e,0x77,0xc0,0xc7,0x5d,0x92,0xc9,0x6c,0xf6,0x77,0x63,0x46,0x1d,0x36,0x25 -,0x5f,0x48,0xf2,0x7c,0xf1,0x9f,0x4c,0xf4,0xa3,0xfd,0x06,0x9c,0x2f,0xe5,0xaa,0x86,0xdf,0x45,0xa8,0x85,0x21,0x73,0xa4,0x12,0x2c,0x87,0x0e,0x89,0xd9,0x5d,0x4f,0xda -,0xed,0xb5,0xed,0x2a,0xeb,0xdf,0x78,0xef,0xbd,0xe1,0xa6,0xa0,0x9d,0x7c,0x0e,0x0c,0x6a,0x23,0xc8,0xdc,0xf8,0x6f,0xb4,0xca,0xca,0x0f,0xa2,0x6a,0x39,0xdf,0x23,0xbe -,0xad,0x37,0xd5,0xca,0x6d,0x36,0xdc,0x8b,0x6a,0x3e,0x30,0x1f,0xa8,0xe7,0xf8,0x2a,0x3c,0xf8,0x8f,0x5b,0xc4,0xf7,0x3e,0x22,0x77,0x89,0xf5,0xc2,0x5a,0x8d,0xb8,0x03 -,0x41,0xab,0x86,0xb4,0x68,0xbe,0x89,0xf7,0xcb,0x1a,0xa8,0x38,0x95,0x5c,0xd1,0xfb,0xd1,0xdd,0xce,0xda,0x75,0x89,0x4d,0xc0,0x00,0x17,0xe8,0x10,0xf0,0x72,0x5a,0x0f -,0x6a,0x6d,0x9e,0xcc,0xf7,0x4b,0x1a,0x05,0x93,0xc3,0x77,0xa2,0x15,0xdf,0xe5,0x88,0x20,0x00,0x40,0x20,0x70,0xff,0xf1,0x50,0x80,0x2c,0x9f,0xfc,0x21,0x6a,0xcf,0xff -,0xef,0xe7,0xbf,0xff,0xae,0x61,0x20,0x8c,0x2a,0x14,0x13,0x09,0x44,0xc1,0x41,0x28,0x50,0x84,0x25,0x08,0x84,0x82,0x21,0x20,0x8c,0x1f,0x6e,0x37,0xae,0x37,0x77,0xef -,0xd5,0x7c,0x7b,0xc2,0x12,0xab,0x59,0x25,0x55,0xa1,0x75,0x57,0x13,0xe3,0xa0,0x3c,0x7b,0x27,0xe3,0x5f,0x01,0xff,0x13,0xb3,0xc2,0xe5,0xcd,0xfa,0xef,0x3f,0x16,0xb0 -,0xcb,0xf1,0xf5,0xb2,0x27,0x68,0x33,0x50,0xad,0xc1,0xbe,0x88,0xb9,0xec,0xee,0xba,0x35,0xe1,0xb1,0x73,0x74,0xda,0xc7,0x6b,0xa9,0xf3,0x8d,0xc9,0x85,0x46,0xbd,0x6f -,0x3c,0x48,0x22,0xdf,0xcd,0x6a,0xb0,0xd6,0xc1,0x87,0xfa,0x78,0x97,0x7b,0x5c,0xfc,0x6b,0xc7,0x93,0xae,0xf4,0xe9,0xc8,0x94,0x1e,0x26,0x24,0xca,0x0a,0x6e,0x55,0xd7 -,0x1c,0x2b,0x42,0xcc,0x49,0x95,0x80,0x59,0x3a,0x2d,0x13,0x00,0x69,0x48,0xa3,0x62,0x11,0x05,0xc3,0x10,0x12,0xb1,0x11,0x70,0x12,0x17,0x02,0xb0,0x84,0x82,0x60,0xa0 -,0x54,0x28,0x35,0x0a,0x05,0x42,0x41,0x40,0x90,0x90,0x2a,0x23,0x0a,0x09,0x44,0x61,0x50,0x88,0x50,0x26,0x11,0x09,0x84,0x42,0xa1,0x30,0x88,0x4c,0x6a,0x13,0x08,0x89 -,0xac,0x54,0xce,0xb9,0xf3,0x9e,0x3a,0xeb,0xe7,0xe3,0x7d,0xca,0x95,0x52,0xe4,0xbf,0x1c,0x49,0xbb,0xc7,0x19,0xae,0xb7,0xae,0x06,0xad,0x1e,0x56,0x80,0x5e,0x3a,0x09 -,0xf0,0xda,0x38,0x0f,0x1f,0x92,0x5d,0x86,0xbb,0x97,0x96,0x25,0xab,0xf7,0x33,0x1b,0x27,0x8a,0x36,0x19,0x7b,0x87,0x2e,0x5c,0x1c,0x5c,0x7e,0x0e,0xd3,0xf5,0x3e,0x99 -,0xef,0xd1,0xff,0x5c,0x7c,0x07,0xf6,0x79,0x92,0x69,0xd6,0x23,0xc3,0x87,0x89,0x3e,0xea,0x88,0xf9,0x01,0xe6,0x9f,0xee,0x93,0xe4,0x71,0x1c,0xd2,0x71,0xad,0xae,0x08 -,0x4d,0x99,0x1b,0x8a,0xeb,0x84,0x5d,0xc9,0x7f,0x86,0x6b,0xde,0x70,0xb3,0xc4,0x7a,0xd4,0x10,0x3b,0xfb,0x9f,0xf1,0x70,0x14,0x75,0x79,0xd5,0x26,0x0e,0xfe,0xc4,0x27 -,0x34,0x48,0x70,0xa4,0x88,0xd4,0xf7,0x48,0x90,0x23,0xfc,0x19,0x29,0xab,0xee,0x03,0xcc,0x00,0x07,0xae,0x09,0x82,0x6c,0x00,0x38,0xff,0xf1,0x50,0x80,0x2b,0xdf,0xfc -,0x21,0x0a,0xcf,0xef,0xff,0xee,0xff,0xff,0xb0,0x61,0x28,0x50,0x2a,0x12,0x0a,0x84,0x82,0xc1,0x50,0x98,0x5c,0x2a,0x14,0x0a,0x89,0x02,0xa1,0x20,0xa8,0x48,0xc2,0x12 -,0x10,0xb9,0xe2,0xd5,0xed,0x9a,0x7c,0xfb,0x77,0xd6,0x2b,0x3a,0xce,0x33,0x24,0xa2,0x54,0xe3,0x72,0xaf,0x2b,0xa9,0x5a,0xfa,0xe8,0x5b,0xcb,0x70,0xf5,0xbe,0xec,0xf1 -,0xb1,0xc3,0xd8,0x7c,0xff,0x73,0xe1,0xd6,0x4e,0xf5,0x9e,0xe5,0xed,0x97,0xf1,0xca,0xbc,0xb2,0x74,0x0e,0xfa,0xa2,0x9c,0xc6,0xe9,0xd7,0x97,0x03,0x92,0x5f,0x82,0x2c -,0x8d,0x2a,0x6b,0x69,0x09,0x3c,0x33,0x49,0xc3,0x9a,0x03,0x3e,0x07,0x1d,0x08,0xb5,0xd9,0x86,0x91,0xbc,0xe4,0xd9,0x03,0x3c,0xb2,0x65,0x55,0x2d,0x96,0x5c,0x95,0x8c -,0x7b,0x93,0x1d,0xe4,0x85,0xe7,0x72,0xbe,0x04,0x84,0xcf,0x05,0xae,0x45,0x3a,0x60,0x09,0x2f,0x0d,0x20,0xd6,0x82,0xec,0xe2,0x61,0x59,0x81,0x44,0x42,0x11,0x00,0x12 -,0x22,0x02,0xa4,0x82,0x83,0x50,0x90,0x58,0x4a,0x12,0x0a,0x04,0xc2,0x82,0x50,0x98,0x94,0x28,0x25,0x13,0x05,0x46,0x81,0x50,0x88,0x54,0x26,0x51,0x09,0x84,0x46,0x61 -,0x11,0x3b,0xe2,0xb3,0xf7,0xfe,0x9f,0xed,0xf9,0x9c,0xba,0xaa,0x9b,0xc6,0x6a,0xaa,0xeb,0x5c,0xeb,0xdb,0x78,0x54,0x6b,0x26,0xb8,0x74,0x38,0xf2,0x9d,0x09,0xb9,0x38 -,0x64,0x1f,0xbf,0x7a,0x3a,0xf7,0x7a,0xaf,0xdf,0xf3,0xdd,0xcd,0x4b,0xba,0x5f,0xc2,0xd7,0xe0,0x3e,0xbd,0xdc,0xe7,0x1c,0x58,0x7d,0xcb,0xa4,0xec,0xd8,0x3c,0x5f,0xc5 -,0xc1,0xf1,0x89,0x9c,0xf1,0x31,0xc6,0xf3,0x3b,0x42,0xc7,0xcb,0x89,0x0b,0xe5,0xc9,0xd8,0xb2,0x78,0x1e,0x40,0x38,0x7a,0x5d,0x11,0x19,0xeb,0x3a,0x29,0x8e,0x7d,0x93 -,0xc8,0x4a,0xa5,0x3b,0xc2,0xc7,0x05,0x80,0x07,0x96,0x03,0xc4,0x3f,0xf7,0xea,0x69,0x68,0xca,0xc7,0xda,0x42,0x1e,0x01,0x7b,0xc4,0x25,0xdd,0xde,0xe9,0x66,0x43,0x24 -,0x5e,0xb9,0x58,0x06,0xcf,0x6d,0x3d,0x98,0x21,0x52,0x13,0x11,0xb5,0xe2,0x09,0xc4,0x58,0x0e,0xe0,0x04,0x51,0x01,0xc0,0xff,0xf1,0x50,0x80,0x2b,0x5f,0xfc,0x21,0x0a -,0xcf,0xee,0xff,0xed,0xfe,0xea,0xb0,0x62,0x18,0x48,0x2a,0x12,0x0b,0x05,0x42,0x41,0x70,0x90,0x98,0x2a,0x16,0x09,0x05,0x82,0xa1,0x21,0xa0,0x48,0x42,0x12,0x10,0x94 -,0xc2,0x28,0x78,0xe3,0x99,0xed,0x93,0x6d,0x73,0xad,0xae,0xa5,0xcc,0x94,0x44,0xa9,0x5c,0x54,0xb5,0x63,0x8f,0x6e,0x3f,0x02,0xdd,0x52,0xee,0x3e,0x3b,0xdf,0xf8,0x32 -,0xbb,0xfb,0x8f,0x97,0xd8,0x67,0x7a,0xeb,0xc3,0xeb,0x83,0x47,0xd3,0xb0,0x90,0x7d,0xdc,0x86,0xd9,0x04,0xe7,0x64,0x22,0x3c,0x04,0xc5,0xc2,0x4b,0x34,0x3f,0x5c,0x08 -,0xb9,0x32,0x83,0xd0,0xe2,0x3a,0x63,0x27,0x51,0x1d,0xf9,0x92,0xc5,0x31,0x74,0x2a,0xc9,0x76,0x7a,0x93,0x88,0xbc,0xd3,0xb9,0xc5,0x5e,0x6a,0x74,0x2e,0x4a,0x5d,0x69 -,0x42,0x6c,0xcc,0x72,0x1a,0x05,0x51,0x1d,0x7b,0x81,0x57,0x81,0x67,0xaf,0xe1,0x02,0xc0,0x82,0xc1,0x00,0x89,0xd4,0x09,0x17,0x18,0x44,0x01,0x10,0xb0,0x2d,0x20,0x29 -,0xd4,0x2c,0x12,0x0a,0x04,0x84,0xe2,0x21,0x20,0x54,0x2c,0x14,0x11,0x85,0x0a,0xa1,0x60,0xa8,0x4c,0x2a,0x13,0x22,0x84,0x42,0x68,0x11,0xbb,0x7e,0x3f,0x6f,0xd7,0xf8 -,0xfd,0x7e,0x7c,0xfa,0x9e,0xde,0xab,0xe3,0xc5,0x51,0xaa,0x2b,0x53,0x2f,0x5c,0xdb,0x35,0xbf,0x6a,0x5d,0xf9,0x0e,0xd3,0xd9,0xeb,0xd5,0xff,0x7c,0x9e,0x3f,0x9d,0xae -,0x5e,0x93,0x9c,0x4e,0x1f,0x9f,0x1b,0x2f,0x4f,0x18,0x9e,0xd9,0x9f,0xb1,0x77,0x57,0xa7,0xff,0x55,0x45,0xfe,0x77,0x50,0xf4,0x6f,0x7e,0x7e,0xe6,0x78,0x08,0xe1,0x4e -,0x3c,0xcc,0xe8,0x74,0xf0,0x41,0x5f,0x5a,0xa9,0xc7,0x9b,0xcc,0x3f,0xed,0xd5,0xa6,0xae,0x8e,0xfc,0x4d,0xfa,0x3b,0xaf,0x6a,0xf5,0xcb,0x7c,0xd0,0xfd,0x94,0xfd,0x79 -,0xe8,0x6b,0x80,0xf5,0xfd,0xf8,0x00,0xfb,0xc3,0xb6,0x81,0xb6,0xfc,0xd0,0x35,0x7b,0xfe,0x28,0x78,0x2f,0x7e,0xbc,0xfd,0x6c,0xf5,0x0f,0x0c,0x1e,0x8f,0xd6,0xbf,0xbd -,0x8c,0xdc,0x55,0x22,0xf1,0xc1,0x3f,0x70,0x0f,0x70,0x24,0x20,0x2a,0x05,0x49,0x80,0xe0,0xff,0xf1,0x50,0x80,0x2c,0x5f,0xfc,0x21,0x0a,0xcf,0xff,0xff,0xfe,0x7e,0xfe -,0xb5,0x61,0x20,0x8c,0x28,0x12,0x0a,0x04,0x82,0xa1,0x40,0xb0,0x50,0x4a,0x14,0x0a,0x84,0x92,0x22,0x20,0x89,0x4c,0x22,0x86,0x5e,0x69,0xaa,0xeb,0xed,0xf1,0xe3,0x8a -,0xdf,0x9d,0x92,0xa5,0x48,0x95,0x56,0xbd,0x6f,0xae,0x51,0xc5,0x79,0xf6,0x17,0x7a,0x36,0x65,0xfa,0xf7,0xc5,0xff,0x49,0xc3,0xff,0xf7,0xce,0x6f,0x6a,0xff,0x98,0x82 -,0x5e,0x6a,0x3a,0xf3,0xc3,0xa5,0xf4,0xa6,0x3b,0xc3,0x0c,0xb9,0xf5,0x6c,0x46,0xbc,0x24,0x2c,0xf5,0x78,0x41,0x8c,0x77,0xf5,0xc0,0x3a,0xb0,0x95,0x26,0x83,0x49,0xcd -,0x74,0x4b,0x48,0x57,0x16,0x6d,0x6a,0x5a,0x14,0xad,0x78,0x69,0x84,0xca,0xf8,0x8e,0xef,0x24,0x4a,0x08,0x4f,0x11,0xae,0xc5,0x2f,0x1d,0x5b,0x05,0x6b,0x47,0x3e,0xb1 -,0x00,0xb9,0xf6,0xd0,0xf0,0x00,0x48,0x90,0xb4,0x61,0x42,0x23,0x58,0x25,0x06,0x60,0x39,0x80,0x9c,0x2a,0x17,0x01,0x50,0x14,0xc4,0x24,0x0a,0x85,0x06,0xa1,0x20,0xa0 -,0x54,0x28,0x55,0x12,0x04,0xc2,0x81,0x50,0x88,0x54,0x42,0x15,0x0b,0x05,0x44,0x61,0x51,0xb8,0x4c,0x22,0x13,0x08,0x88,0xc2,0x22,0x3b,0x9b,0x95,0xe7,0x9f,0xc7,0xe8 -,0x38,0x8c,0xc5,0x3e,0x3c,0x67,0xb7,0x8a,0xd5,0x95,0x72,0x6f,0xab,0xf5,0xf1,0x5d,0x07,0xaa,0xd6,0x1e,0x97,0x36,0xe3,0xfa,0x4b,0xd4,0xff,0xf6,0xdf,0x15,0x5f,0x4f -,0xae,0xfc,0x4e,0x43,0xe8,0xed,0xde,0x95,0x05,0x6e,0x23,0xb3,0x9f,0x07,0x2e,0x2f,0x0b,0x69,0xb8,0xff,0xdf,0xf0,0x7a,0xfe,0x49,0xfe,0xae,0xbd,0x3e,0x1c,0x09,0x8d -,0xdd,0xb8,0xf0,0x1c,0x78,0x9c,0xb9,0x8e,0x16,0xe5,0x6b,0xcd,0x7a,0x51,0xe8,0xf9,0x5a,0x78,0x53,0x83,0xa0,0xd7,0x40,0x8c,0x1b,0xed,0x04,0x30,0x47,0x23,0x80,0xbf -,0x0e,0xc1,0xf7,0xb9,0x00,0x87,0x2a,0x1f,0xfa,0x3d,0x72,0x44,0x40,0x09,0x7b,0x49,0x45,0x47,0x17,0x18,0x01,0xc4,0x92,0xab,0xc8,0x4a,0x83,0xc2,0x84,0x80,0x0e,0xf9 -,0x20,0x11,0xb2,0x11,0x99,0xdd,0x2c,0x24,0x07,0xea,0x0c,0x6a,0x7b,0x80,0x50,0x14,0x9c,0x40,0xe0,0xff,0xf1,0x50,0x80,0x27,0xdf,0xfc,0x21,0x0a,0xcf,0xce,0xff,0xff -,0xff,0xef,0xb7,0x62,0x18,0x48,0x68,0x36,0x0a,0x09,0x42,0xc1,0x50,0x91,0x44,0x44,0x11,0x91,0x72,0xb4,0xac,0xe3,0x13,0x29,0x22,0xe9,0x26,0x4e,0x36,0x91,0x77,0x4b -,0xc5,0xcf,0x3a,0x16,0xfb,0xb9,0x6a,0xfb,0x41,0xe8,0xfe,0x1e,0x9e,0x3a,0x78,0x87,0x8f,0xb6,0x62,0x6c,0x3e,0xd5,0x6e,0x50,0x6d,0xff,0x8e,0x9b,0xe7,0x02,0x33,0xf3 -,0x39,0x8d,0xc1,0x4e,0x7d,0x1a,0xa0,0xe7,0xc6,0x6a,0x1e,0xa3,0x0f,0x71,0xeb,0xa6,0x2e,0x0b,0x14,0xa6,0x85,0xc8,0xe1,0x8a,0x77,0x11,0xf2,0xda,0xe8,0xe7,0x35,0xaf -,0x1b,0xf6,0x4b,0x2a,0x48,0x2c,0x98,0x21,0xf3,0x65,0x2a,0x90,0x91,0x40,0xaa,0xa4,0x56,0x5d,0x50,0x66,0x90,0x28,0x11,0x2e,0x2e,0x13,0xb0,0xb8,0x2e,0x56,0x60,0x28 -,0x08,0x00,0x9a,0x20,0xa0,0x4c,0x28,0x36,0x11,0x05,0x04,0xa1,0x30,0xa8,0xc8,0x28,0x25,0x0a,0x09,0x42,0x62,0x50,0xa0,0x4c,0x2a,0x13,0x18,0x84,0xc8,0x23,0x30,0x88 -,0x9f,0xf4,0xeb,0xd7,0x9f,0x0f,0xbd,0xf7,0xdc,0xba,0xd6,0xef,0x77,0x52,0xba,0xbc,0xdd,0x6a,0xae,0x61,0xc6,0x3a,0xef,0x56,0xe8,0x5b,0xa6,0xff,0x49,0xf1,0xdf,0xa2 -,0x7e,0x35,0xfa,0xfb,0xc7,0x4f,0x38,0xd6,0x43,0xaa,0xde,0x16,0xfd,0x75,0x6b,0xd8,0x74,0xcb,0xcf,0x29,0xf2,0xab,0xee,0x78,0x95,0xff,0xdb,0x8d,0x64,0xe5,0x39,0x77 -,0x3f,0x93,0xfe,0xf7,0x83,0xc2,0xf4,0xa0,0xe0,0xe6,0x40,0xf1,0x83,0x4b,0xdd,0x39,0xb9,0x27,0x8f,0x12,0x6b,0x68,0xcb,0x4f,0x62,0xed,0x1d,0x36,0xb3,0xd6,0x91,0xc8 -,0xbe,0x9e,0x34,0x3b,0x9d,0xd0,0x6a,0x7e,0xe4,0xe0,0x56,0x42,0x18,0xfe,0x02,0xfb,0x3a,0x14,0xa4,0xba,0x20,0x5e,0x76,0xf3,0xe4,0x5e,0xba,0x80,0x3d,0x07,0x0a,0x67 -,0xbb,0x21,0xed,0xe2,0x0a,0x85,0xaf,0x68,0xae,0xdc,0x0a,0xf7,0x2c,0x04,0x00,0x4c,0x07,0xff,0xf1,0x50,0x80,0x2a,0x9f,0xfc,0x21,0x0a,0xcf,0xff,0xff,0xff,0xdd,0xbf -,0xb7,0x60,0xb8,0x58,0x48,0x12,0x0a,0x84,0x82,0x82,0x51,0x10,0x50,0x2a,0x24,0x09,0x05,0x04,0x41,0x50,0x91,0x46,0x09,0xa6,0xfe,0xbb,0x99,0x9d,0x26,0x62,0xe5,0x5d -,0x71,0xdc,0xa9,0x09,0x13,0x2f,0x5b,0xd4,0x5f,0x5e,0x47,0xc8,0xab,0xbb,0xf2,0x47,0x34,0xe3,0xfb,0x9c,0xff,0x9c,0xe3,0x6e,0xf5,0x2a,0xf9,0xa9,0xa2,0xdf,0x1e,0xdf -,0xb5,0x89,0xf7,0xad,0xe9,0xb3,0x1f,0x31,0x70,0x48,0x57,0x1d,0x9e,0x14,0x36,0x17,0x35,0xa0,0x88,0x8f,0x19,0x65,0x0e,0x41,0x64,0x34,0x36,0xab,0x3b,0x89,0xb6,0x82 -,0x35,0x2e,0x70,0x09,0x8e,0x0e,0x18,0x0a,0x4a,0xb1,0xc6,0x91,0x15,0xd3,0xb2,0x08,0x97,0x29,0xca,0xe2,0xe4,0x84,0x5a,0xea,0x62,0xb4,0x51,0x81,0x62,0x16,0xac,0x01 -,0x2b,0x0a,0xa8,0x08,0x09,0xdc,0x09,0x84,0xa4,0xa0,0x26,0x02,0x60,0x27,0x94,0x28,0x16,0x12,0x84,0x82,0x83,0x50,0xb0,0x50,0x2a,0x17,0x0a,0x0d,0x42,0x81,0x50,0xa0 -,0x54,0x86,0x15,0x09,0x89,0x42,0x61,0x11,0x18,0x84,0x26,0x11,0x09,0x84,0x48,0xfe,0xbc,0x63,0xdb,0xe7,0xcd,0x7b,0x7d,0xaa,0xb5,0xbb,0xaa,0x93,0x35,0x50,0x89,0x52 -,0x52,0xf7,0x2e,0xeb,0xce,0x70,0x1d,0xdf,0x3e,0xd0,0x5b,0xd1,0xd3,0xd9,0xc4,0x3d,0x2e,0xe1,0xf0,0xe0,0xec,0x41,0x9f,0x67,0xd3,0xf5,0x8e,0xd5,0xbf,0xa3,0xf1,0x7c -,0x4f,0x1b,0x8a,0xc9,0xf7,0x75,0xca,0x3f,0xff,0x98,0xdb,0x9c,0xb9,0x3a,0x0f,0x2d,0xf3,0xe5,0xc9,0xc3,0xa8,0x7c,0x9c,0xa3,0x47,0x01,0xc5,0xc9,0x41,0xca,0x39,0x71 -,0x82,0x76,0x97,0xf9,0x5e,0xc2,0x8a,0xee,0x4c,0x8e,0x71,0xfa,0xad,0x0e,0xe4,0x62,0xf6,0xaf,0xfd,0x43,0x03,0x8f,0x22,0x79,0xa8,0x78,0xaa,0x1d,0xf6,0x8d,0x65,0xff -,0x91,0x5d,0x3c,0x03,0xa4,0x4f,0x74,0x78,0x9f,0x04,0x77,0xcf,0x4b,0x23,0x6a,0xfe,0x29,0x22,0xd5,0x1e,0xeb,0xdc,0x4a,0xc5,0x23,0x21,0x17,0x7a,0x0b,0xa0,0xa1,0x55 -,0x00,0x01,0x14,0x00,0xe0,0xff,0xf1,0x50,0x80,0x2b,0xdf,0xfc,0x21,0x0a,0xcf,0xdf,0xbf,0xaf,0xef,0xdf,0xb5,0x60,0xa0,0x4c,0x48,0x12,0x0a,0x85,0x02,0xa1,0x40,0xb0 -,0x54,0x28,0x13,0x0a,0x85,0x82,0x81,0x22,0x28,0x88,0x62,0x13,0x09,0x04,0x42,0x41,0x13,0x18,0x44,0xa4,0x95,0xd6,0xfa,0xde,0xee,0xa4,0xc9,0x2a,0xae,0xae,0x60,0xd6 -,0x45,0x75,0x8e,0x2b,0xaa,0xe6,0xff,0x5f,0x23,0xef,0xcf,0xeb,0xdf,0xc5,0xfd,0x46,0x96,0xa5,0xf1,0xfc,0x8f,0x16,0xcb,0xb2,0x02,0x18,0x8f,0x65,0xcd,0x86,0x9f,0x07 -,0xeb,0xb2,0x38,0x1b,0x78,0x08,0x2f,0xbd,0xae,0x8e,0xbe,0x0a,0xf2,0x93,0x9f,0xe9,0x5f,0x42,0x10,0xc9,0x53,0x6a,0xf7,0x85,0xa9,0x8f,0x89,0xfa,0xdd,0x53,0x28,0x0c -,0x9b,0x39,0xe3,0xea,0xbd,0x4b,0x4b,0xd1,0xc6,0x24,0x00,0x9a,0x91,0x48,0x82,0x13,0x46,0x12,0x0b,0xc2,0xab,0x10,0xb4,0x53,0x3b,0x25,0x8b,0x85,0xf9,0x4c,0xbc,0xd9 -,0x05,0x77,0x8c,0x61,0x49,0x40,0x02,0x4b,0x87,0xb8,0x22,0xb8,0x00,0xbc,0xed,0x50,0x0b,0x81,0x10,0x28,0x88,0x2c,0x14,0x09,0x85,0x42,0x81,0x50,0xa0,0x4c,0x28,0x16 -,0x0a,0x09,0x42,0x41,0x41,0x28,0xd0,0x2a,0x14,0x0a,0x94,0xc2,0xa3,0x32,0x89,0x9f,0xa7,0x9f,0x5c,0x5f,0x3f,0x1c,0xce,0x55,0x72,0x4d,0xe7,0x5e,0x3a,0xe7,0x8a,0x93 -,0x26,0xbd,0x79,0x66,0xa4,0xe6,0x75,0x9f,0x7d,0x0a,0xd3,0xb7,0xf2,0x7f,0xa9,0x76,0xf6,0x0f,0x86,0xf7,0xfa,0x8f,0xf7,0xec,0x20,0x93,0x6c,0x0c,0xfb,0x01,0x8c,0x57 -,0x91,0x9e,0x9b,0xa2,0xbd,0x35,0x1c,0xfe,0xe7,0x2e,0x0e,0x48,0xf9,0x48,0xfb,0x9c,0xd7,0x7c,0x28,0xe0,0x0f,0x2f,0x6f,0x2a,0x81,0x67,0x99,0xe4,0x01,0xe6,0x79,0x8f -,0x13,0x90,0x1c,0xd6,0x3e,0xb1,0x31,0x71,0x0e,0x0e,0x2e,0x40,0x1f,0x6f,0xdd,0x3b,0xdc,0x5e,0x2c,0x28,0x00,0xb4,0xb1,0x71,0x76,0x99,0x87,0x27,0x2f,0x9b,0xcc,0x08 -,0x0a,0x8a,0x7d,0x6d,0x4a,0xfd,0xdd,0x4d,0x20,0xf7,0xc3,0xeb,0xc3,0xbd,0x2e,0xe0,0x77,0xe2,0x4d,0x49,0x48,0x94,0x23,0x68,0x2f,0x14,0xc0,0x53,0x92,0x6d,0xd4,0x00 -,0x50,0x80,0x0e,0xff,0xf1,0x50,0x80,0x2c,0x3f,0xfc,0x21,0x0a,0xcf,0x7f,0xdd,0xff,0xbd,0xdc,0xaf,0x40,0xb0,0x54,0x28,0x15,0x1a,0x09,0x82,0xa1,0x30,0xa8,0x50,0x4c -,0x12,0x12,0x85,0x02,0xa1,0x40,0x90,0x8c,0x24,0x21,0x11,0x04,0x42,0x41,0x30,0x90,0x45,0x00,0x17,0xab,0x93,0xf5,0xfd,0x3d,0xbb,0xeb,0xd5,0xf1,0xcb,0x71,0x79,0xa9 -,0x8d,0x64,0xa2,0x3c,0xf6,0xd5,0xfd,0xfe,0xc9,0xff,0xe6,0x38,0xc3,0x7d,0x9f,0x4f,0x81,0xd4,0x72,0x77,0x6d,0x1c,0x45,0xf7,0x7d,0xb8,0x25,0xf9,0x97,0x1e,0x85,0xcf -,0x5f,0xe2,0xa3,0xe4,0x26,0xbb,0x76,0x7e,0xbc,0xf4,0x1b,0xb7,0x44,0x89,0xbc,0x3d,0x6e,0x4f,0x2d,0x97,0xaa,0xc3,0x11,0xe0,0x6d,0x22,0x9a,0xe4,0x3b,0xc7,0x8d,0x20 -,0x4c,0x50,0x69,0xa9,0xbd,0x30,0x58,0x5c,0x5f,0x5a,0xce,0x91,0x2f,0xfb,0x66,0xfb,0x5c,0x86,0x2d,0xa0,0x89,0xc8,0xd1,0x28,0xce,0x5e,0x40,0x62,0x43,0x20,0x88,0xc7 -,0xba,0x64,0x18,0xa3,0x20,0xd6,0x9d,0x15,0xb2,0xec,0x2a,0x4c,0x22,0x91,0x9a,0x00,0x10,0x01,0x7a,0x0b,0xd0,0x88,0x2b,0x11,0x70,0x15,0x84,0x15,0x0b,0x09,0x02,0x41 -,0x41,0x10,0x50,0x2a,0x24,0x0a,0x85,0x04,0x61,0x40,0xa9,0x10,0x46,0x14,0x0a,0x89,0x02,0x62,0x10,0x98,0x44,0x66,0x15,0x09,0x84,0x48,0xcf,0x8f,0xcf,0xc6,0xbe,0x7c -,0xd6,0x4a,0xca,0x2c,0x9c,0x73,0x4d,0x54,0xac,0xf6,0xd7,0x8f,0x6f,0xcf,0xe3,0xd5,0xf0,0xcd,0x79,0xd0,0xca,0xf6,0x51,0xdf,0xef,0x93,0x74,0x8b,0xcb,0xed,0xbd,0x37 -,0xff,0xc8,0x2d,0xf9,0x22,0xdd,0x5e,0x7f,0x4b,0x41,0xc3,0xdc,0x89,0xff,0x0f,0x7f,0xe4,0xd7,0x7a,0x5f,0x8d,0xb9,0x21,0xdf,0xc6,0x5c,0x45,0x5f,0x8f,0x27,0x27,0x11 -,0xe6,0x4d,0x17,0xb5,0x7c,0xbb,0x35,0xf6,0x87,0x7b,0xff,0x52,0xdb,0xd3,0x62,0xbe,0xab,0x62,0xe7,0x81,0xf0,0x1c,0x94,0x13,0x23,0x82,0xde,0xae,0xf8,0xc1,0x4c,0xaa -,0x0f,0x58,0x04,0x3b,0x91,0x84,0x48,0xa6,0x0f,0x58,0xbe,0xac,0xb5,0x54,0x13,0x40,0xc6,0x11,0x53,0xbc,0xc3,0x00,0x07,0x98,0x00,0x0f,0x73,0xdd,0x13,0xb9,0x34,0x44 -,0x81,0x60,0x2c,0x07,0xff,0xf1,0x50,0x80,0x29,0x5f,0xfc,0x21,0x0a,0xcf,0xff,0xff,0xf7,0xff,0xfc,0xb4,0x60,0xb8,0x4c,0x2a,0x22,0x0a,0x85,0x02,0x42,0x50,0xa0,0xd4 -,0x2e,0x14,0x09,0x85,0x02,0x41,0x11,0x10,0x44,0xa4,0x11,0x59,0x84,0x44,0xc5,0xea,0xf3,0xaf,0x01,0xaa,0xa9,0x2f,0x7c,0x72,0x97,0xb8,0x6a,0xf3,0x8c,0xab,0xae,0x2e -,0xb5,0xff,0xbf,0x00,0xb9,0x3b,0xef,0xe0,0xf9,0x3b,0xcf,0x3c,0xb7,0x9c,0xdc,0x7c,0x8b,0x4f,0xc3,0x53,0xdc,0xc3,0xbc,0xbf,0x0c,0xaf,0xca,0x88,0xbf,0xc4,0x21,0x4f -,0x69,0x8f,0x6f,0xdb,0xeb,0xe6,0x46,0x5c,0xc4,0xf4,0xe3,0x49,0x72,0xa5,0x3d,0x5e,0x54,0x78,0x21,0x2c,0x54,0x96,0xfb,0x2f,0xc6,0x4a,0x6b,0x74,0xe7,0x3b,0xa3,0xa4 -,0xc4,0x1f,0x8c,0x4c,0x99,0x9d,0x18,0xcd,0x40,0x2e,0xac,0xa2,0x29,0x20,0x50,0xa8,0x46,0x81,0x10,0x40,0x2c,0x26,0x40,0x40,0x98,0x92,0x24,0x41,0xdc,0x00,0x88,0x0a -,0x01,0x48,0x41,0x41,0x18,0x54,0x28,0x15,0x0a,0x0d,0x42,0x81,0x50,0xa0,0x54,0x2c,0x13,0x0a,0x85,0x06,0xa1,0x41,0x28,0x88,0x26,0x15,0x09,0x94,0x46,0x61,0x12,0xbe -,0x65,0x4b,0xcb,0xa9,0x95,0x2b,0x5d,0xf5,0x99,0x75,0x15,0x6a,0xea,0xf3,0x2f,0x59,0x89,0x75,0x3e,0x33,0xa1,0x77,0xe8,0x3a,0x3f,0xeb,0xbb,0x9b,0xdb,0xe3,0xce,0x78 -,0x9f,0xf0,0x7e,0x8a,0x3b,0x2f,0x3d,0xc3,0x8c,0xff,0xac,0x8b,0xeb,0x35,0x84,0xe3,0x6f,0x83,0xcc,0xf1,0x9e,0xbc,0xf9,0xa7,0xd1,0xbf,0xc9,0xea,0x98,0x2e,0x9f,0x60 -,0x77,0xaf,0xb2,0x57,0x34,0x15,0x2e,0xf3,0xc2,0xe2,0xd3,0x68,0x07,0x1b,0x71,0xc6,0x47,0xc0,0xc4,0x71,0x24,0xf2,0xe3,0xcc,0x40,0xc7,0x75,0xdf,0xee,0x48,0x28,0xf6 -,0x81,0xfe,0xb8,0x19,0x9f,0xb3,0x1a,0x17,0x7b,0x9d,0xf1,0x0f,0x76,0x71,0x1d,0xf9,0x89,0xa5,0xaa,0xf0,0x02,0x1d,0xd6,0x62,0x8a,0x9a,0x0e,0x94,0xbc,0xda,0x45,0xc8 -,0xd0,0xf4,0x04,0xea,0xa5,0x51,0x5e,0x02,0x22,0x40,0x2c,0x04,0x40,0xe0,0xff,0xf1,0x50,0x80,0x2a,0x3f,0xfc,0x21,0x0a,0xcf,0xef,0xff,0xaf,0x7f,0xfd,0xb3,0x30,0xb8 -,0x58,0x28,0x25,0x0a,0x08,0xc2,0x81,0x70,0x90,0x4c,0x24,0x24,0x09,0x05,0x04,0x42,0x50,0x91,0x06,0x2d,0xda,0xfa,0x6e,0xf2,0x15,0x52,0x65,0xee,0xf5,0xdd,0xc1,0x14 -,0xeb,0x99,0x6d,0x54,0x9f,0xe3,0xa1,0xf9,0xc7,0x79,0xb4,0xf8,0xde,0xed,0xc9,0xe4,0x75,0x5f,0xe1,0xdb,0x7c,0x88,0x4b,0x1b,0xcf,0xbd,0x0d,0xaf,0x2f,0x27,0xe1,0x2a -,0xa3,0xc3,0xbd,0x97,0x4c,0xb4,0x18,0xed,0xe5,0x83,0xfd,0xbc,0xac,0xab,0x72,0x5f,0x63,0x22,0x5b,0x9e,0xf4,0x81,0xa3,0x63,0xce,0x41,0x5f,0x6b,0x12,0x7c,0xfe,0xe3 -,0x5c,0xa3,0x83,0x01,0xae,0xf2,0xe7,0xc2,0x56,0x8b,0xbb,0x40,0xfd,0xf0,0xdf,0xa8,0xe8,0xa9,0x72,0xb2,0xce,0x32,0xde,0xc7,0xec,0x66,0x15,0xa4,0x2f,0x30,0x8c,0xa9 -,0x20,0x05,0xd6,0x2d,0xa0,0x82,0x28,0x96,0x5d,0xfb,0x2c,0x04,0x65,0x70,0x09,0x88,0x81,0x48,0x41,0x40,0x98,0x90,0x24,0x16,0x09,0x0d,0x42,0x81,0x30,0xb8,0x50,0x2a -,0x11,0x0a,0x05,0x42,0x81,0x60,0xa8,0x58,0x28,0x13,0x08,0x85,0x46,0x63,0x11,0x18,0x84,0x86,0x11,0x13,0xf3,0xed,0xef,0xc7,0x1e,0xb8,0xa4,0xe7,0x54,0x7d,0x7d,0xa1 -,0x7b,0xbe,0x38,0xf1,0x53,0xcf,0x33,0x13,0xae,0xed,0xed,0xbf,0x8e,0x85,0x5c,0xaf,0xfc,0x7f,0xa2,0xe0,0xbd,0x07,0xa7,0x76,0x4d,0x1f,0x90,0xda,0x78,0x67,0xfd,0x6a -,0x3c,0xcd,0xa2,0xcf,0x39,0xe6,0x66,0xfa,0xfa,0x5b,0xb1,0x33,0xf6,0xcb,0xa1,0x0e,0xac,0x6c,0x83,0xcb,0x44,0x57,0xcd,0x76,0x11,0x71,0x47,0xac,0x51,0x8b,0x53,0x63 -,0xc5,0x4e,0xec,0x26,0x61,0x85,0xdc,0xd1,0x39,0xb4,0x83,0xef,0xe0,0xa1,0xb7,0xc3,0x8a,0x28,0xe5,0xa8,0x8a,0x20,0xba,0xad,0xee,0x07,0x7a,0x9b,0x27,0xaf,0x42,0x21 -,0x0f,0x75,0x67,0x2c,0x36,0x0a,0xa3,0xa2,0x14,0x07,0x5a,0xfd,0x91,0xde,0x03,0x82,0x7b,0xf2,0xd8,0xac,0x48,0x81,0xb5,0x35,0x80,0x3d,0xd0,0x24,0xa0,0x28,0x07,0xff -,0xf1,0x50,0x80,0x2b,0xdf,0xfc,0x21,0x0a,0xcf,0xdf,0xaf,0xf7,0xfe,0xff,0xb5,0x50,0xb0,0x8c,0x28,0x12,0x0a,0x85,0x02,0xa1,0x40,0xb8,0x50,0x2a,0x13,0x0a,0x10,0x82 -,0x81,0x24,0x88,0x88,0x22,0x33,0x08,0x9d,0x9a,0x3c,0xe5,0xee,0xf7,0x7c,0xfb,0x78,0x99,0xac,0xd2,0xa5,0x5b,0x24,0x2a,0xa5,0xfb,0x78,0xb4,0xd7,0x9d,0x07,0xbc,0xfc -,0xb4,0xf1,0xfd,0x0e,0x8c,0x99,0xc3,0xb1,0x70,0xd1,0x1e,0x86,0xce,0xca,0xd5,0x7d,0x79,0xf6,0xb3,0x07,0xd3,0xa9,0xf4,0xfe,0xaf,0xa7,0xc3,0xcd,0x6e,0x8e,0xe6,0xf5 -,0xd1,0xcc,0x8b,0x0f,0x32,0xc5,0xdb,0x97,0x73,0xd0,0x8f,0x23,0xc4,0x9e,0x6e,0x08,0x40,0x33,0xec,0x5b,0xa6,0x60,0x23,0x15,0x11,0x02,0x75,0xb5,0x6b,0x23,0xa1,0xf4 -,0x48,0xa9,0xd2,0x46,0x99,0x2f,0x44,0x10,0xd9,0x4e,0xd3,0x79,0x10,0x33,0x18,0xbe,0x59,0xf7,0xcc,0x5f,0x3a,0x2e,0x9e,0x59,0xaa,0x41,0xe4,0x80,0x14,0xef,0x37,0x89 -,0xdc,0x45,0xd0,0x22,0xad,0x04,0xea,0x26,0x23,0x94,0x00,0x23,0x10,0x14,0x44,0x14,0x0b,0x05,0x42,0xc2,0x50,0xa0,0x48,0x28,0x12,0x0a,0x05,0x42,0x82,0x60,0xa0,0x94 -,0x28,0x15,0x09,0x85,0x04,0xa4,0x30,0xa8,0x84,0x2a,0x13,0x08,0x85,0x42,0x21,0x30,0x88,0x8c,0x22,0x27,0xe5,0xbf,0x6e,0x67,0x9d,0xf3,0x75,0x93,0x24,0xa3,0x54,0x5d -,0x71,0xb7,0x1a,0x8e,0xef,0x3d,0xb3,0xbf,0x6d,0xf5,0x07,0x6f,0xe9,0xb9,0x2f,0xb8,0x9a,0x34,0x9b,0xbf,0x6d,0xff,0x6d,0xe6,0xfc,0xea,0xda,0xd1,0xc7,0xfa,0xbb,0x6e -,0x9f,0x92,0x25,0x8d,0x26,0xdb,0x47,0xb7,0xec,0xf5,0x6f,0xfb,0x5a,0x87,0x3e,0xdf,0xf1,0xbd,0xd3,0x90,0xee,0xf5,0x45,0x7f,0xcc,0xee,0xb6,0x0b,0x7a,0xbc,0x65,0xf1 -,0x7f,0x07,0xf3,0x45,0xad,0xcb,0xe1,0x62,0x88,0xe0,0xaf,0x88,0x94,0xbc,0xc3,0x90,0xe3,0x00,0x1c,0x9a,0x3d,0xf3,0xf0,0xce,0xf8,0xe2,0x78,0x81,0xc0,0x00,0x03,0xcc -,0x56,0x60,0x03,0xc0,0x00,0xf5,0xe9,0x1b,0x17,0x9c,0x81,0xe2,0x00,0x2c,0xb0,0x65,0x1d,0xe0,0x15,0x24,0x9a,0xe0,0x11,0xf7,0x00,0x09,0x08,0x81,0xc0,0xff,0xf1,0x50 -,0x80,0x2d,0xdf,0xfc,0x21,0x0a,0xcf,0xef,0xfd,0xff,0x7e,0xff,0xb3,0x70,0xb0,0x90,0x2c,0x22,0x0a,0x85,0x04,0xa1,0x41,0x10,0x54,0x28,0x16,0x0b,0x85,0x02,0x43,0x30 -,0x90,0x90,0x24,0x21,0x09,0x04,0x42,0x61,0x11,0x90,0x44,0xed,0xdd,0x4d,0x57,0xc7,0xbd,0xe4,0xab,0xac,0xbd,0x6e,0x4c,0xba,0x91,0x96,0xaf,0x3b,0xe5,0x77,0x0e,0x3c -,0xf0,0x1d,0x99,0x7b,0x17,0x8f,0xfa,0x4f,0xb3,0x52,0xfd,0xdf,0x2e,0x8f,0xd8,0x76,0x1c,0x6e,0xf9,0x83,0xbb,0x8a,0x61,0xeb,0x38,0x6b,0xd8,0xe5,0x0d,0x83,0xd8,0xa0 -,0x55,0xb7,0xca,0xc5,0x58,0xc8,0xa7,0x7e,0x75,0x2b,0xb3,0x4a,0xbe,0xfa,0xb4,0x79,0xb0,0xa5,0xc5,0x27,0x6d,0x16,0x2f,0xaa,0xc5,0x25,0x90,0x9c,0xd7,0x9d,0x82,0xb2 -,0x43,0xec,0x47,0x68,0x18,0xdd,0x6e,0xbc,0xe2,0x81,0x5d,0x7e,0x38,0x0e,0x30,0xa5,0x9f,0xb9,0x10,0x0f,0xe8,0x46,0xab,0x3a,0x51,0x76,0xca,0x98,0x1d,0x94,0x7a,0xa5 -,0xd7,0x7b,0xeb,0xdd,0x98,0xa4,0xc4,0x8b,0x11,0x8c,0xd7,0xa8,0x42,0x72,0x6c,0x39,0x40,0x02,0x00,0x5c,0x0a,0x22,0x0b,0x05,0x02,0x61,0x50,0xa0,0x58,0x44,0x15,0x0a -,0x08,0xc2,0xa1,0x41,0xa8,0x58,0x28,0x25,0x0a,0x05,0x42,0x81,0x21,0x28,0x4c,0x2a,0x11,0x09,0x89,0x42,0x41,0x30,0x88,0x4c,0x22,0x57,0xed,0xd7,0x8f,0xc7,0x3e,0x3f -,0x5f,0x55,0x59,0x72,0xb2,0x26,0x49,0x25,0x28,0xeb,0xad,0xb7,0xdf,0xdf,0x59,0xe2,0xfe,0x2b,0xa1,0xc2,0x38,0x7d,0x53,0xf5,0x6e,0xbe,0xe6,0x3c,0xff,0xaa,0xb3,0x75 -,0xbd,0x57,0x79,0xc7,0x03,0x6f,0x9b,0xa7,0x85,0x72,0x0e,0x81,0xdd,0x6a,0xae,0xb8,0x94,0xf3,0x7c,0xc6,0xe2,0x60,0x35,0x84,0xc3,0xe1,0x7e,0x6f,0xb7,0x14,0x8e,0x17 -,0x47,0xca,0xa2,0xf8,0x97,0xaa,0xdc,0x9c,0x1c,0x41,0xdb,0x73,0xbf,0xd2,0x9d,0xcb,0x93,0xf4,0x1f,0x1d,0x71,0xd4,0x95,0xe1,0x3c,0x53,0xc4,0x82,0x07,0x31,0xdb,0xdf -,0xd7,0x1e,0x63,0x80,0x14,0x02,0xd5,0x3b,0xdd,0xd0,0x77,0xcf,0xf1,0xdd,0x05,0x4e,0x2e,0xc3,0xde,0x92,0xf8,0x50,0xb0,0x82,0xaa,0xbf,0x58,0x03,0x41,0x20,0x03,0xbf -,0x1b,0x98,0x6e,0x50,0xb0,0xa1,0x50,0x2a,0x02,0x60,0x70,0xff,0xf1,0x50,0x80,0x29,0xbf,0xfc,0x21,0x0a,0xcf,0xff,0xff,0xde,0xff,0xdf,0xae,0x63,0x20,0x54,0x28,0x25 -,0x0a,0x10,0xc2,0x41,0x41,0x11,0x10,0x26,0x12,0x08,0x8c,0xc2,0x21,0x31,0x08,0x8c,0x42,0x67,0xa9,0x5a,0xe7,0xe2,0xb7,0x32,0xe4,0x6f,0x5b,0x25,0x48,0xc9,0xc5,0x71 -,0x5a,0xce,0xe7,0x17,0xd7,0xbc,0x7e,0x3c,0x83,0xee,0xcb,0xbb,0xb0,0xdb,0xf5,0x47,0xf1,0xf4,0x7d,0x51,0xc1,0xac,0xb6,0xaf,0x12,0xa6,0xe0,0xc4,0x7a,0x56,0x68,0x03 -,0xde,0x77,0xff,0x09,0xd6,0x7a,0x31,0xb7,0xd0,0x3b,0x3b,0x93,0x26,0xbe,0xe6,0x67,0x7a,0x8e,0x58,0x8d,0xb9,0x22,0x21,0xdd,0x66,0xaa,0xb5,0xa4,0x7e,0x29,0x3f,0x92 -,0xe7,0x94,0x61,0xbf,0x85,0x6c,0xb5,0xb5,0x75,0x8a,0xce,0xc4,0xd1,0x87,0xad,0xdd,0x04,0x88,0x12,0x4c,0x7c,0x31,0x75,0x84,0x5d,0xd8,0x4c,0x70,0x62,0x23,0x3e,0x30 -,0x21,0xee,0x14,0x00,0x77,0x44,0x01,0xcc,0x04,0xc6,0x01,0x45,0x94,0x88,0x2c,0x10,0x01,0x58,0x84,0x51,0x10,0x90,0x4a,0x24,0x2a,0x85,0x06,0xc1,0x40,0xa8,0x8c,0x2a -,0x53,0x12,0x84,0xc2,0xa1,0x13,0xb1,0x9d,0x77,0xfa,0xfd,0xb8,0x2f,0xc4,0x95,0x52,0x8c,0xe0,0x9b,0xea,0x67,0x09,0x95,0xe7,0xdb,0xfa,0xea,0x79,0xd7,0x91,0xe4,0xe9 -,0xef,0x98,0x7c,0x0b,0xc9,0xf2,0x45,0xe9,0xb6,0x76,0x3e,0x6e,0x3c,0x87,0x9f,0x97,0xba,0xf3,0xfb,0xa5,0xb9,0x2f,0x43,0xe9,0xa9,0xef,0xb6,0x9f,0x2b,0xef,0x1d,0xe8 -,0xf8,0x7e,0x0f,0x31,0xac,0x5b,0xb1,0x36,0x11,0x3d,0x5c,0x95,0xc3,0x63,0xb3,0xd5,0x7f,0x9b,0x9a,0x29,0xc8,0xe3,0xb7,0x29,0xe4,0x09,0xfa,0xff,0xfa,0xc9,0xec,0x5d -,0x4d,0xcf,0x78,0x38,0x23,0x8c,0xf2,0x6d,0x00,0x03,0xef,0xe5,0x12,0x1c,0x39,0x83,0x98,0xe1,0x41,0xc0,0x0e,0x27,0xa8,0x3e,0x10,0xf5,0xde,0xb0,0xee,0x80,0xf9,0xf8 -,0x00,0x91,0xc1,0xee,0x4c,0x00,0x79,0x00,0x6c,0x03,0x59,0x72,0x16,0x17,0x4a,0x11,0x23,0x59,0xdc,0x2e,0x05,0x40,0x80,0x0e,0xff,0xf1,0x50,0x80,0x28,0xff,0xfc,0x21 -,0x0a,0xcf,0xed,0xbf,0x4f,0xff,0xbf,0xb2,0x30,0xb0,0x50,0x2c,0x25,0x09,0x09,0x02,0x41,0x51,0x10,0x54,0x24,0x13,0x09,0x09,0x04,0x42,0x50,0x91,0x05,0x06,0x21,0x33 -,0xbd,0x46,0xfa,0xbe,0x7d,0xbd,0xfa,0x93,0x75,0x55,0x7b,0xe3,0x7a,0x99,0x24,0xa8,0xeb,0x3b,0xbe,0xa6,0x2e,0xfc,0xfb,0x0f,0xcc,0xf9,0xe6,0xe5,0xd1,0xb7,0x8d,0xbf -,0x63,0x36,0xad,0x8f,0x37,0xdc,0xac,0xa5,0xdd,0x74,0xd1,0xf2,0xb6,0x66,0x7b,0x59,0xf9,0xe1,0x97,0x67,0x2f,0x42,0x5a,0x00,0x34,0x3c,0x8b,0x11,0x4b,0x7c,0xd7,0xdf -,0xad,0xbb,0x94,0x02,0xa2,0xc5,0xd0,0x3c,0x5c,0x67,0x72,0xd4,0x65,0x25,0x56,0x43,0x61,0xc5,0x27,0x4c,0x31,0xaa,0x0e,0x18,0xae,0x22,0xf3,0x54,0x47,0x42,0x75,0xb1 -,0x21,0x6b,0x27,0x78,0x10,0x41,0x3a,0x23,0x98,0x84,0x45,0x6e,0x82,0x70,0xf7,0x01,0xe1,0x81,0x30,0x5a,0xf3,0x40,0x01,0x58,0x88,0x61,0x48,0x2e,0x02,0x00,0x55,0x28 -,0x58,0x68,0x16,0x12,0x90,0x82,0xc1,0x41,0x28,0x4c,0x48,0x16,0x0a,0x0c,0x84,0xa1,0x32,0x10,0x4c,0xa2,0x43,0x08,0x89,0xcf,0x1e,0x35,0xb9,0xed,0xe2,0xb5,0x36,0xd6 -,0x15,0x29,0x0b,0xba,0x95,0x5c,0x55,0xa6,0xaf,0xdf,0x5f,0x5c,0xd8,0x75,0x8e,0x98,0xe7,0xcd,0x3b,0x3f,0xa2,0x1f,0xdd,0xe5,0xd2,0x76,0xfb,0xa2,0x0d,0xc6,0x69,0xb9 -,0x00,0xb6,0x7c,0xf5,0xef,0x35,0x57,0xca,0xd9,0xec,0xbf,0x88,0x34,0x97,0x29,0x0d,0xf3,0xb2,0x55,0x48,0xa7,0x77,0xd6,0x68,0x58,0xf3,0xe8,0x0d,0xf6,0xef,0xc7,0x3d -,0x86,0x86,0xff,0xf3,0x49,0x31,0x07,0x18,0xa3,0x8a,0x1f,0x88,0x20,0xb0,0xf7,0x7f,0x7c,0x4f,0xb9,0xb5,0x8d,0x5d,0x85,0x92,0x9f,0xcc,0x2a,0x69,0x4e,0x2b,0xc4,0xf2 -,0x16,0xbc,0xfd,0xcd,0xdf,0x8a,0x41,0x07,0x78,0x90,0x3d,0x64,0xe0,0xef,0x9d,0xee,0xe0,0x00,0xee,0x90,0x06,0xf3,0x28,0x2c,0x4c,0x77,0xc0,0x26,0x08,0x00,0xe0,0xff -,0xf1,0x50,0x80,0x2a,0x9f,0xfc,0x21,0x0a,0xcf,0xef,0xd7,0xff,0xbf,0xfe,0xb5,0x50,0xb0,0x90,0x2c,0x25,0x12,0x05,0x46,0x41,0x40,0x90,0x50,0x24,0x14,0x09,0x05,0x02 -,0x41,0x50,0x90,0x44,0x44,0x11,0x51,0x84,0x4c,0x5d,0x53,0xe3,0x37,0xae,0xf5,0x45,0x4b,0xa9,0x79,0x52,0x4a,0x82,0x6b,0xba,0xe3,0xf1,0xf6,0xe2,0x4f,0xc6,0xc3,0xd9 -,0xcb,0x87,0x6a,0x7f,0xab,0xd5,0x7f,0xb4,0x5d,0x2e,0xed,0xdf,0x83,0xe9,0x33,0x27,0x8f,0x8e,0x4f,0xa7,0xb5,0xa6,0xde,0xef,0x96,0x64,0xae,0xf6,0x9d,0x8d,0xc6,0x75 -,0xb1,0xbd,0x39,0x58,0xce,0xa2,0xd3,0x13,0x83,0xb9,0x0d,0xb6,0xb8,0x17,0xa5,0x2b,0x6b,0xb0,0xc2,0xfa,0xe5,0x9e,0xa2,0x92,0x9e,0x5a,0xa1,0x55,0xd1,0xef,0xca,0x84 -,0x22,0x82,0x98,0xbb,0x8e,0x51,0x51,0x0f,0x5c,0xc9,0xa9,0x11,0x12,0xaa,0xa3,0xbd,0x86,0xd1,0x85,0x3a,0x8b,0x50,0xb8,0x3b,0xa0,0x2a,0xb8,0x88,0xb8,0x49,0x20,0x0a -,0x72,0x04,0x44,0xe8,0x02,0xa5,0x42,0x81,0x50,0x98,0x58,0x2a,0x17,0x0b,0x05,0x04,0x41,0x50,0x90,0x50,0x8c,0x14,0x29,0x05,0x42,0x41,0x31,0x28,0x4c,0x82,0x15,0x09 -,0x88,0x42,0x61,0x12,0x33,0x75,0x38,0xf1,0xfa,0xfe,0x7d,0xbb,0xf8,0xf7,0xab,0xaa,0x5d,0x17,0x57,0x57,0x55,0xe6,0xad,0xd6,0x67,0x7f,0xbf,0x3e,0x3e,0x9a,0x0e,0x1c -,0xd7,0xbd,0xfc,0x14,0xdf,0xe9,0x3b,0x3d,0x19,0xe8,0x6e,0xeb,0xeb,0xe3,0x2e,0x0e,0xde,0xdf,0x27,0x8f,0xf9,0x0c,0x71,0xfd,0xf3,0xf2,0x89,0x45,0x92,0x35,0x95,0xdf -,0x08,0x32,0x0c,0xf7,0xe1,0x03,0x7d,0x50,0x7f,0xbc,0x33,0x22,0x42,0x7d,0x76,0x97,0x32,0xea,0xf2,0xee,0x4a,0x17,0x74,0x9d,0x09,0x5c,0x30,0x70,0x6a,0xd7,0xb8,0x8c -,0x68,0xf5,0x5f,0x71,0x0b,0x1d,0x45,0xc7,0xad,0xc4,0x97,0x7c,0x1f,0xe8,0xd4,0xff,0xd4,0xef,0xae,0x1d,0xd3,0xba,0xef,0x77,0x47,0x72,0xcb,0x16,0x00,0x0f,0x30,0x1c -,0x61,0xfc,0x91,0x38,0x12,0x7b,0xa0,0x26,0x1f,0xfa,0x82,0x61,0x48,0x85,0xc1,0x00,0xb5,0x80,0x70,0xff,0xf1,0x50,0x80,0x2b,0x3f,0xfc,0x21,0x0a,0xcf,0xef,0x3a,0xdf -,0xfd,0xe8,0xb4,0x40,0xb0,0x90,0x2c,0x15,0x11,0x04,0xc2,0x41,0x50,0xa0,0x48,0x6c,0x13,0x0a,0x05,0x44,0x82,0x21,0x08,0x48,0x22,0x53,0x08,0x90,0xc2,0x26,0x54,0x99 -,0x3c,0xd7,0x7e,0x79,0xbb,0xde,0xb9,0xeb,0x95,0xdf,0x32,0x21,0x2e,0xb8,0xde,0x67,0xe2,0xb9,0xf8,0xe7,0xeb,0xae,0x87,0x03,0xca,0x4d,0x6f,0xb9,0xf1,0xa7,0xfa,0x1d -,0xde,0x3f,0xa7,0xa7,0xee,0x82,0x5e,0x0f,0x1a,0xf9,0xeb,0xe4,0x7d,0xc8,0x26,0xfa,0x04,0xde,0x65,0x9d,0x3e,0xc4,0xca,0x8d,0x3a,0x2b,0xfb,0x9e,0x0e,0xd7,0x47,0xad -,0x3d,0x4a,0x3f,0xab,0x3c,0x9d,0xf8,0x9a,0xcd,0x1c,0xaa,0xb0,0xad,0x04,0xd4,0xa6,0xe7,0x9e,0x76,0xd8,0x8b,0x47,0x56,0xac,0xcc,0xb6,0x8f,0xcd,0xb4,0x80,0xb5,0x8d -,0xb8,0x1f,0xe7,0x00,0xd2,0x91,0x0d,0xa8,0xa6,0x5d,0x28,0xc4,0x8d,0x59,0x44,0xc1,0xe8,0xc0,0x7e,0x20,0x26,0x00,0xa4,0x02,0x00,0x14,0x04,0xa6,0x05,0x4a,0x84,0x82 -,0x82,0x60,0xb8,0x54,0x2c,0x12,0x0a,0x05,0x42,0xc1,0x50,0xa0,0x54,0x28,0x56,0x0a,0x08,0x84,0x62,0x50,0x90,0x4c,0x22,0x13,0x08,0x84,0xc4,0xa1,0x30,0x89,0x9e,0xdf -,0x9a,0xeb,0xd3,0xef,0xeb,0xff,0x3f,0xff,0x0a,0x92,0x6e,0xb4,0xa9,0x5a,0xde,0xad,0x32,0x57,0xb7,0x1f,0x3d,0x66,0xfe,0xff,0xb7,0xfa,0x73,0x3a,0x0e,0xb9,0x7b,0x8e -,0x3d,0x56,0xaf,0x31,0xf6,0x6a,0xbf,0x7f,0x73,0xf3,0xa5,0x0d,0xc9,0xeb,0x71,0xf4,0xd7,0x48,0x27,0xcd,0xba,0xf8,0xbc,0x5e,0xf6,0xbc,0x51,0xaf,0xdb,0x6a,0xfc,0x79 -,0x97,0x4e,0x73,0x59,0x3a,0x06,0xb6,0x54,0xfe,0xe9,0xbc,0x28,0x78,0x94,0xb3,0xe9,0x80,0x91,0x7a,0x66,0xa4,0xe5,0x1f,0x4f,0xda,0x8a,0x30,0xfa,0xf9,0x22,0xe2,0x39 -,0x9c,0x40,0x3d,0x40,0x39,0x8f,0xeb,0xd5,0x99,0x3c,0x24,0x46,0x32,0x5f,0x8c,0x1e,0xb0,0x00,0x4d,0x10,0xf7,0x3d,0x60,0xf7,0x40,0x07,0x8f,0x00,0x0e,0xe6,0x20,0x00 -,0x92,0xe4,0x8d,0x36,0x0a,0x2e,0x10,0x08,0x00,0xa4,0x00,0xe0,0xff,0xf1,0x50,0x80,0x29,0xdf,0xfc,0x21,0x0a,0xcf,0x6b,0xfb,0xfe,0xff,0xb4,0xb3,0x50,0xb0,0x88,0x2c -,0x17,0x0a,0x05,0x82,0x81,0x60,0xa8,0x50,0x24,0x24,0x11,0x11,0x02,0x42,0x30,0x90,0x45,0x46,0x11,0x3b,0x72,0xf6,0xf8,0x78,0xfb,0xfb,0xd6,0x95,0x7b,0x95,0x38,0xe5 -,0xac,0x93,0x52,0xa5,0x6a,0xab,0x5c,0x7b,0xdf,0xd7,0x8f,0x8f,0x21,0xec,0x2f,0x4f,0x22,0xfd,0xf1,0xdf,0xdb,0x3b,0x32,0xe5,0xb2,0x8f,0x3f,0x6c,0x9b,0x45,0x98,0x68 -,0xec,0x8b,0xd7,0x3c,0xbe,0xe4,0x7a,0x37,0x4b,0x76,0xff,0x5a,0x7c,0xb6,0x62,0x8f,0x2f,0x6b,0x21,0x7b,0xd1,0xec,0x1c,0x97,0xe6,0xd1,0xc7,0x13,0x3d,0x97,0xcc,0x2c -,0xe9,0x59,0x7d,0xb2,0x48,0x55,0x12,0xf3,0x58,0xb6,0xb2,0x05,0x7b,0x29,0x95,0x74,0x80,0xb5,0x6d,0xb1,0x02,0x51,0xb0,0x4e,0x08,0x85,0x22,0xe0,0x1d,0xe8,0x85,0x00 -,0x26,0x35,0x94,0x54,0x01,0x50,0x5c,0x12,0x00,0x88,0x14,0x4a,0x24,0x0b,0x05,0x02,0xa1,0x60,0xa0,0x94,0x48,0x12,0x12,0x05,0x42,0x81,0x30,0xa0,0x94,0x28,0x12,0x0a -,0x84,0xc4,0xa1,0x10,0x98,0x44,0x46,0x11,0x11,0x85,0x42,0x27,0x7e,0x6b,0x9e,0xab,0x3d,0xbc,0x7d,0x7b,0xcf,0x6f,0x79,0x9a,0x55,0x46,0x5f,0x59,0x9a,0x98,0xf6,0xe7 -,0x9e,0xaf,0xc6,0xa5,0x7e,0xfe,0xba,0x0e,0x0e,0xfe,0x4f,0xec,0x9f,0x5c,0x7c,0xc9,0xaf,0x97,0xf7,0x0f,0x87,0xb1,0x51,0xd0,0xbf,0x06,0x86,0xf5,0x68,0x2b,0xb2,0xf3 -,0x75,0x52,0x6e,0xe7,0xc5,0xf6,0x49,0xb9,0xed,0x2e,0x26,0xae,0x7f,0xed,0x55,0xba,0xe4,0x0c,0xdc,0x70,0x8d,0xc6,0xb7,0x17,0x76,0xe2,0x88,0x13,0xfe,0x4f,0x0f,0xec -,0xe1,0x51,0x77,0x39,0x55,0x97,0x3e,0x76,0x75,0x27,0x9a,0x1b,0x3d,0xc7,0x83,0x35,0x50,0x43,0xb6,0xda,0x7a,0xd6,0x36,0x4a,0x40,0xf7,0x7f,0xdf,0x85,0x3d,0x02,0xeb -,0xc2,0x3e,0x14,0x0e,0xfc,0x18,0x00,0x3e,0xa0,0x04,0xe0,0xad,0x18,0x00,0xb5,0xe6,0x0c,0xeb,0x14,0xad,0x84,0x28,0x00,0x28,0x5c,0x07,0xff,0xf1,0x50,0x80,0x29,0x3f -,0xfc,0x21,0x0a,0xcf,0xef,0xfd,0xff,0xfb,0xfc,0xb5,0x40,0xb8,0x58,0x28,0x16,0x11,0x05,0x82,0xa1,0x20,0xa8,0x48,0x28,0x12,0x1a,0x04,0x82,0xa1,0x20,0x88,0x50,0x24 -,0x11,0x09,0x04,0x64,0xae,0x2b,0x77,0xc7,0xc7,0xed,0xe7,0xbd,0x6b,0x32,0x44,0xa8,0x4a,0x5c,0x99,0x24,0xaa,0xba,0xd5,0x55,0xff,0x36,0x3a,0x2b,0xb5,0xf1,0x6f,0xf4 -,0x4d,0xef,0xf1,0x77,0x47,0x77,0xcc,0xf7,0xd0,0x5f,0xd9,0xde,0xa0,0xd3,0x7c,0xdf,0x07,0xbf,0x25,0xee,0x6b,0xdb,0x99,0x5e,0x53,0x7b,0x37,0xad,0xe6,0x6c,0x9e,0x3d -,0x94,0x96,0xb4,0x60,0xcd,0x1c,0xa6,0xa3,0xdd,0xc4,0x69,0xb9,0x66,0x81,0x48,0x5e,0xf2,0x83,0xb2,0xe5,0xd1,0x57,0x90,0x40,0x92,0x39,0x7a,0xda,0x3c,0x22,0x16,0x59 -,0x25,0xee,0x55,0x2b,0x12,0x6b,0x02,0x33,0x88,0x28,0x28,0x88,0x26,0x90,0x2a,0x2a,0x15,0x08,0x4c,0xba,0x60,0x02,0xe5,0xc0,0xaa,0x50,0xa0,0x8c,0x28,0x17,0x0b,0x04 -,0x84,0x81,0x50,0xa0,0x88,0x28,0x12,0x0a,0x05,0x82,0x41,0x40,0x90,0x54,0x48,0x15,0x09,0x85,0x44,0x21,0x30,0x88,0x8c,0x22,0x53,0x08,0x91,0xbc,0x9a,0xde,0x7b,0x77 -,0xd6,0xea,0x46,0x5e,0xe6,0x5d,0xc2,0xf2,0xdd,0x67,0x37,0xbd,0x56,0xb7,0xe5,0xe7,0x9f,0x21,0xd3,0xc3,0x7f,0x9f,0xf5,0x7d,0x87,0x9c,0x7e,0x7f,0xa7,0xfb,0x59,0xfc -,0x57,0x1b,0xdf,0x7c,0x23,0x90,0x7c,0x5d,0xdc,0x24,0xd5,0xd3,0x07,0xe0,0x10,0xe6,0x2f,0x7e,0x1f,0xaf,0xc1,0xa4,0x1d,0xad,0x4f,0xc3,0xc1,0xde,0x3a,0x13,0x7b,0xec -,0x0e,0x10,0x70,0xbd,0x95,0xab,0x4b,0xaa,0xa9,0x5c,0x89,0xc7,0xdd,0xa1,0xdd,0x06,0xe8,0x27,0xbc,0xcd,0xa2,0xc1,0x2d,0x36,0xfb,0xca,0x2e,0xf0,0x21,0x25,0x20,0xac -,0x4a,0x4f,0xe6,0x8a,0x40,0x7e,0x45,0x95,0x42,0xe8,0x4e,0xa5,0xe5,0xc6,0x64,0x12,0xc8,0x4a,0x34,0x11,0x2d,0x64,0xfd,0x60,0x8c,0xfb,0xe0,0x2d,0x30,0x4c,0x17,0x01 -,0x7b,0x81,0xc0,0xff,0xf1,0x50,0x80,0x26,0xdf,0xfc,0x21,0x0a,0xcf,0xfd,0xff,0x9f,0x3f,0xf4,0xb4,0x50,0xb0,0x88,0x2e,0x24,0x12,0x84,0x82,0x81,0x50,0x91,0x50,0x24 -,0x61,0x9a,0x65,0xd6,0xf5,0xd7,0x3a,0x5d,0x55,0x6b,0x6a,0xeb,0x71,0x15,0x75,0xfb,0xf8,0xa5,0xf2,0xeb,0x76,0xcd,0x7e,0x2c,0x3e,0x17,0xe9,0xd8,0x7f,0xa9,0xee,0x3b -,0xd8,0xdf,0x36,0xce,0xf3,0x59,0xf8,0xb8,0x38,0x19,0xd4,0x6e,0xc6,0xa4,0x42,0xbf,0xfc,0xd4,0x36,0xdf,0x3e,0xc5,0x29,0xa5,0x11,0xac,0x25,0x75,0x30,0xec,0xc4,0xc9 -,0x44,0x4c,0x5d,0x37,0x5e,0xc4,0xa7,0x2c,0x39,0x2f,0xfa,0x08,0x5e,0x91,0x88,0x9e,0x1b,0x84,0x17,0x10,0x03,0xd0,0x08,0x0b,0x88,0x26,0x12,0x84,0x2e,0x45,0x2e,0x20 -,0xe6,0x48,0x50,0x88,0x01,0x31,0x32,0xd0,0x38,0x00,0xc7,0x79,0x48,0x01,0x04,0x80,0x52,0x10,0x54,0x28,0x13,0x0a,0x05,0x48,0xc2,0x50,0xa1,0x14,0x48,0x52,0x09,0x8d -,0x42,0x41,0x30,0x88,0x4c,0x22,0x43,0x08,0x99,0xef,0xbb,0xfd,0xff,0x4a,0xff,0x6f,0xe3,0xbe,0x2a,0x2a,0xb5,0x59,0x37,0xad,0x6f,0x5e,0x77,0x5e,0x3a,0xdf,0x96,0xe9 -,0xed,0xba,0xaf,0xe7,0x5f,0x71,0x13,0xd5,0xff,0xbf,0xf0,0xba,0x9f,0x81,0xf2,0xf9,0x3c,0x5c,0x97,0x40,0x91,0xfb,0x4c,0x37,0xc4,0x0f,0x74,0x8d,0xfa,0x3e,0x17,0x8d -,0xcb,0x89,0x68,0xf2,0xed,0x7e,0x13,0xfb,0x14,0x2d,0x08,0xdf,0x26,0xfb,0x2f,0xdf,0x73,0xf3,0x91,0xc9,0x27,0x69,0xee,0xe3,0xcd,0xd2,0x97,0x7a,0xef,0x67,0xef,0x54 -,0xfa,0xdf,0x44,0x1f,0x56,0xbb,0xde,0x71,0x0e,0x1c,0x80,0x13,0x45,0x1d,0x84,0x20,0xa9,0x48,0xfe,0x5c,0xa9,0x5c,0xa9,0x46,0xc3,0xba,0x30,0x88,0x2f,0x05,0x5b,0xfe -,0xb8,0x44,0x2e,0x93,0x09,0x7e,0x85,0x2d,0x41,0xdc,0x88,0x02,0xd3,0x8c,0x57,0x2b,0x13,0x48,0xd6,0x08,0x85,0xa8,0x05,0xc0,0x70,0xff,0xf1,0x50,0x80,0x27,0x7f,0xfc -,0x21,0x2a,0xcf,0xff,0xef,0xff,0xff,0xb8,0xb4,0x62,0xb8,0x48,0x4a,0x14,0x19,0x09,0x02,0x43,0x40,0x98,0x48,0x28,0x12,0x08,0x98,0xc2,0x26,0x30,0x89,0x95,0x35,0xe3 -,0xaf,0x3b,0xde,0x6b,0x5b,0xbc,0xd6,0x54,0xbc,0x97,0x4e,0x37,0x1f,0x19,0x99,0x0f,0x3b,0x8a,0xfb,0xc0,0x7d,0xc7,0xab,0x71,0x46,0xeb,0xbc,0xbd,0xec,0x59,0x37,0x43 -,0x80,0xfb,0x79,0xb2,0xfd,0xe7,0x2a,0x2a,0xbf,0xd3,0x13,0x53,0x3c,0x71,0x8a,0x6d,0x1d,0x45,0x95,0x9f,0x07,0x96,0x38,0xcf,0x52,0xef,0x8b,0x9a,0xcf,0x52,0x33,0x5e -,0x96,0x47,0x43,0xb0,0xde,0x8e,0x7e,0xc2,0x79,0xda,0x05,0xf1,0x59,0x5e,0xab,0xa2,0xf7,0x00,0x98,0x30,0xc8,0xac,0x40,0xa6,0xa8,0x85,0x0d,0x24,0xcb,0x20,0x40,0x4c -,0x00,0xee,0x88,0x0b,0x48,0x00,0x0b,0x09,0x81,0x75,0x42,0xa0,0x52,0xa8,0x50,0x2c,0x14,0x0b,0x09,0x42,0x82,0x50,0xa1,0x94,0x28,0x26,0x0a,0x05,0x42,0x81,0x20,0xa0 -,0x54,0x26,0x15,0x09,0x94,0x42,0x63,0x13,0x3b,0xac,0x92,0xb5,0x9e,0x7d,0x4b,0xd9,0x74,0xab,0xcd,0x17,0x73,0x77,0x53,0x8e,0x6e,0xb2,0x3a,0xcf,0xc7,0x41,0xd7,0xf9 -,0x4e,0x4f,0xf8,0xd4,0xef,0xf4,0x8b,0xb7,0xca,0xd8,0x9d,0x5b,0x17,0x52,0x53,0x8c,0xfe,0x47,0x99,0xee,0x67,0x3c,0x4f,0x48,0x67,0xf6,0x1f,0x09,0x9e,0xca,0xbf,0xfa -,0xfe,0x74,0xfa,0x01,0xc7,0x85,0x68,0xb4,0x76,0x38,0x9c,0x21,0xc5,0x3c,0xfa,0x81,0x04,0xd8,0x4d,0x25,0xcd,0x7a,0xbb,0x2c,0x25,0x61,0x37,0x0f,0x99,0x04,0x92,0xf5 -,0xec,0x83,0xc9,0x74,0x40,0x77,0x76,0x96,0x91,0x0b,0xd0,0xe0,0xee,0x95,0x91,0xee,0xbf,0x5d,0x37,0xa1,0xbc,0x59,0xc0,0xf0,0x82,0x85,0xe5,0xa2,0xa7,0xae,0x10,0xb9 -,0xee,0xa0,0x45,0x9a,0x1e,0xe8,0x20,0x72,0xcb,0x25,0xa8,0x22,0xee,0x05,0xa1,0x60,0x04,0x42,0xe0,0x70,0xff,0xf1,0x50,0x80,0x28,0x9f,0xfc,0x21,0x4c,0xfe,0xff,0xfd -,0x74,0x16,0x28,0xd5,0x19,0x18,0xe2,0xa2,0x48,0xb9,0xc0,0x96,0xa5,0x44,0x42,0x2e,0x0b,0x7d,0xa5,0x76,0xbe,0xfb,0x45,0xe8,0xaf,0x50,0xd5,0x25,0x16,0x8c,0xa5,0x4d -,0xf4,0x06,0x52,0x6a,0x9f,0x73,0xd4,0xfa,0x24,0x07,0xd0,0xd5,0x1f,0xf2,0x80,0xb4,0xa1,0x14,0x9c,0x95,0x28,0x5f,0x0b,0xdd,0x16,0x3c,0x18,0xd6,0xa1,0xfc,0x4c,0xa9 -,0x8b,0x5c,0x47,0x29,0xae,0xbd,0xeb,0x3e,0x5b,0x8e,0x88,0xbe,0xca,0xaa,0x1a,0xba,0x08,0x99,0x06,0xe7,0xbe,0xba,0xb8,0x77,0x4b,0x2c,0x6c,0x4d,0x90,0x84,0xdb,0x89 -,0x7c,0x8e,0xad,0x73,0x4b,0x68,0x8c,0x16,0x2e,0xa6,0x8b,0x7f,0x6e,0x57,0xfb,0x4d,0x5c,0x52,0x9d,0x95,0x91,0xef,0x91,0x05,0xc7,0x66,0x04,0x39,0xc6,0x57,0x0b,0x9a -,0x62,0x51,0x78,0xaf,0x40,0x45,0x7a,0x00,0x03,0x08,0xb8,0xa8,0x80,0xd0,0x28,0x9a,0x21,0x62,0x88,0x89,0xa1,0x2a,0x55,0xd5,0xc8,0x9d,0x0c,0x6f,0x92,0xe8,0x9a,0x09 -,0x6c,0x6f,0xce,0xf3,0xa3,0xe0,0x56,0x3f,0x74,0xc2,0xb5,0xdd,0xbb,0x76,0xdc,0x79,0x4d,0x65,0x3c,0xeb,0x93,0xae,0x5b,0xa1,0xa7,0xfc,0x9f,0x3f,0xaf,0x61,0xa7,0x64 -,0x61,0x2e,0x05,0x50,0x6a,0xba,0x5d,0x3d,0x95,0x6d,0xfc,0x7f,0x9f,0xb2,0xd0,0xf0,0xb9,0x3e,0xd0,0x42,0x4b,0x61,0xc3,0x8d,0x23,0x9c,0x0d,0xc2,0xa2,0x55,0xda,0x11 -,0x64,0xee,0x52,0x01,0xb9,0xb5,0x47,0x85,0x65,0xb1,0xd9,0x98,0xdc,0xbe,0xe4,0xdf,0xdc,0x37,0xaa,0xdc,0x9b,0x3b,0x98,0x65,0xe3,0x67,0x51,0x8c,0x1b,0x63,0x2d,0x95 -,0xe5,0x59,0x67,0x05,0x0a,0x5a,0x4e,0x13,0x77,0x7d,0x0b,0xce,0x75,0x0a,0xe3,0x40,0x35,0x23,0x37,0xea,0xa7,0x7f,0xaa,0x29,0x58,0x4a,0x91,0x9c,0xfc,0x7a,0xc3,0x52 -,0x14,0x82,0xb6,0xa3,0xc0,0x2d,0x86,0x99,0x60,0xb1,0x33,0x21,0x7a,0x02,0xa3,0x18,0x98,0x98,0xe0,0x46,0xc2,0x91,0xb3,0x80,0xff,0xf1,0x50,0x80,0x29,0x5f,0xfc,0x21 -,0x6a,0xcf,0xff,0xff,0xff,0xff,0xfe,0xb8,0x61,0xa0,0x58,0x44,0x14,0x12,0x85,0x02,0xc2,0x21,0x20,0xd8,0x24,0x41,0x09,0x04,0x42,0x41,0x14,0x18,0x44,0xe9,0x75,0xc6 -,0x4e,0x3c,0x55,0xf1,0xcc,0xbd,0xc9,0x37,0xa9,0x57,0x4b,0xa9,0x32,0x0e,0xb2,0x6b,0x73,0xef,0xc0,0xb7,0xc9,0xd9,0x59,0xf3,0xd6,0x4b,0xbf,0x51,0x79,0x6b,0x4d,0x85 -,0xe1,0xc9,0x48,0x9a,0x16,0xfd,0xa1,0x49,0xdd,0xc7,0xc1,0xdd,0x45,0x8a,0xbf,0x21,0x47,0x3f,0x09,0x9c,0xf8,0x0a,0x79,0x23,0xfd,0xe6,0x92,0x39,0x62,0xea,0x67,0x3d -,0xca,0xcf,0xfd,0x4d,0x66,0xa1,0x90,0xe0,0x52,0x30,0xa6,0xfa,0x82,0x0c,0x69,0xc2,0xd8,0x51,0x96,0x35,0x09,0xb2,0x91,0x99,0x64,0xb8,0x20,0x9d,0x08,0x41,0x49,0x0a -,0x1c,0x05,0x6a,0x28,0x0a,0xdd,0x20,0x1f,0x04,0x25,0x50,0x4d,0x44,0x6c,0x80,0x0c,0x40,0x10,0x90,0x40,0x05,0x40,0x9e,0x41,0x30,0x50,0x4c,0x14,0x0a,0x85,0x04,0x41 -,0x41,0x10,0x54,0x28,0x26,0x0a,0x85,0x04,0x61,0x40,0xa8,0x4c,0x2a,0x13,0x1a,0x84,0xc2,0x26,0x30,0x89,0x5f,0xd6,0xe7,0x37,0x9d,0x6e,0x6b,0x79,0xd6,0xe3,0x25,0x56 -,0xaa,0x47,0x5b,0x99,0xc7,0x32,0xbd,0xb3,0x54,0xa6,0x83,0xeb,0x1b,0xce,0x87,0xd8,0xbe,0x97,0xb5,0xb5,0xcb,0xdd,0xcd,0x76,0x0e,0xd8,0x39,0xaf,0x2d,0xeb,0xb7,0x6a -,0xf7,0x73,0x87,0x0e,0x0c,0x99,0xcf,0xfe,0x5c,0x2a,0x1b,0x24,0x0f,0x91,0xd1,0xc5,0xb0,0x1b,0xe0,0x7d,0x20,0x3d,0xff,0xff,0x77,0xe8,0xaa,0xa3,0xcb,0x0d,0x21,0x6f -,0x8d,0xf2,0x38,0xe9,0xe7,0x30,0xee,0xc8,0x0e,0x1d,0x35,0xf1,0x52,0xe7,0x7f,0x06,0x87,0xc2,0xf5,0xe6,0x95,0xc3,0xea,0xd6,0xba,0x8d,0x38,0x09,0x44,0x01,0x22,0x1f -,0x0e,0x18,0x94,0x64,0x83,0x8c,0x21,0x09,0x94,0x8f,0x5b,0x9f,0x9b,0x44,0x94,0x00,0x38,0x81,0x75,0x00,0x7b,0xb8,0xc8,0xa5,0x00,0x99,0x22,0x22,0xb0,0x00,0x9a,0x91 -,0x03,0x80,0xff,0xf1,0x50,0x80,0x29,0x9f,0xfc,0x21,0x0a,0xcf,0xcf,0x7f,0xfe,0xff,0xff,0xb7,0x61,0x20,0x58,0x28,0x35,0x0a,0x09,0x44,0xc1,0x20,0xa8,0x58,0x28,0x12 -,0x0a,0x04,0x82,0xa1,0x21,0x08,0x48,0x62,0xa3,0x08,0x94,0xd4,0xac,0xf3,0xaf,0x0d,0x73,0x9c,0x5d,0x65,0x97,0x50,0x55,0xac,0x65,0x6a,0x75,0xbe,0x1e,0xdc,0x0d,0xb7 -,0x27,0x9f,0xf4,0x1b,0x5b,0x62,0xd0,0x9e,0x93,0xaf,0xc9,0xf1,0xba,0xce,0x70,0xd7,0xb2,0x9d,0xf9,0x03,0xdd,0x29,0x8f,0x4e,0xb5,0x22,0x3b,0xdf,0x43,0xd4,0x9c,0xac -,0xda,0x7a,0xa3,0x53,0x9c,0xad,0xcf,0xbd,0x72,0xd2,0x94,0xea,0x5b,0xeb,0xda,0x32,0xbe,0x7b,0x12,0x66,0x1d,0x44,0xc4,0x25,0x6e,0x12,0x8a,0x66,0x79,0x0f,0xa7,0x0d -,0xcc,0x6e,0x45,0xd2,0x09,0x51,0x36,0xb8,0x42,0x21,0x54,0x28,0x32,0xc4,0x9d,0xef,0x7b,0xad,0x34,0x97,0x0e,0x84,0x82,0x24,0x51,0xf5,0x80,0x0b,0x89,0xa2,0x0a,0x2f -,0x70,0x02,0x24,0x00,0x54,0x10,0x50,0x8c,0x25,0x0a,0x14,0x82,0x85,0x60,0x90,0x50,0x46,0x15,0x09,0x85,0x02,0x61,0x50,0x98,0x44,0x26,0x15,0x08,0x84,0xc2,0x23,0x30 -,0x89,0x1b,0xe6,0xfc,0xfb,0xcf,0xc7,0xe7,0xf5,0xfc,0xd4,0xce,0xb2,0x32,0x54,0xb9,0x4c,0xe3,0x55,0xbb,0xf6,0xfb,0x75,0x8f,0xa8,0xa4,0x0f,0x6b,0x7d,0x35,0xc9,0x7f -,0xea,0xef,0x54,0xf7,0xbd,0x7b,0x4f,0x81,0xd3,0x93,0xfb,0x67,0x6c,0x2b,0xed,0x7f,0xff,0x2c,0x3d,0x2e,0x85,0x17,0xa6,0x27,0x2e,0x5f,0x51,0x93,0x1b,0x7c,0xbc,0x68 -,0x24,0x0d,0x7f,0xdf,0x7d,0x83,0x9e,0xb2,0xee,0x97,0x7a,0x1d,0xed,0x3b,0xe5,0xf8,0xc4,0xa4,0xe8,0xa6,0x77,0x2f,0x8f,0xfc,0x2e,0xe7,0x3a,0x93,0x53,0xce,0x8f,0x1e -,0x74,0x77,0x01,0xe6,0xa0,0x2e,0xf5,0xe8,0x07,0xd6,0x49,0xd8,0xff,0xd7,0xc6,0x91,0x60,0x79,0x80,0x16,0xfd,0xa1,0x29,0x72,0x0b,0x9d,0xd5,0x2b,0x57,0x52,0x02,0x1d -,0x21,0x3a,0xb1,0x04,0xcf,0x5e,0x40,0x05,0xe6,0x04,0x80,0x88,0x58,0x07,0xff,0xf1,0x50,0x80,0x27,0x7f,0xfc,0x21,0x0a,0xcf,0xef,0xff,0xff,0xfd,0xfd,0xb7,0x40,0xb0 -,0x50,0x4c,0x14,0x0a,0x85,0x06,0xe1,0x50,0xb8,0x48,0x28,0x15,0x12,0x08,0x88,0x21,0x20,0x88,0x88,0x22,0xf5,0xa6,0x4f,0x6d,0xf3,0xe7,0x6a,0xd6,0xbd,0xfd,0xb6,0x45 -,0x49,0x2a,0xc8,0xa2,0xf2,0xfa,0x3f,0x1f,0x03,0xf5,0xaf,0x7b,0xfe,0x8b,0x50,0x69,0x3f,0x95,0x38,0x6b,0x4d,0xbb,0xc7,0xed,0x6a,0x1a,0x4f,0x8c,0xe5,0xdf,0xce,0x3d -,0xfc,0xb7,0x5e,0xf5,0xf8,0xad,0xdc,0xab,0xfd,0x57,0x9d,0x57,0x2e,0x54,0xa3,0xfe,0x9e,0x3c,0x56,0x31,0x0d,0x5c,0x73,0xbf,0x4f,0x2d,0xf4,0x9f,0x47,0xf5,0x08,0x96 -,0x68,0xab,0xd9,0x96,0x8e,0xb7,0xaa,0xe3,0x18,0x5a,0xce,0x17,0x9c,0xa8,0x60,0x82,0x3d,0x0a,0x6f,0xbd,0xd6,0xdb,0x29,0xef,0x49,0x61,0x24,0x30,0xd6,0x0b,0x07,0x02 -,0x82,0xf1,0x80,0x8c,0x00,0x14,0x54,0x54,0x74,0x58,0x5d,0x59,0xcc,0xbc,0xc1,0x75,0x45,0xc0,0x4c,0x05,0x21,0x05,0x44,0xc1,0x40,0xb0,0x90,0x4c,0x32,0x0a,0x1c,0x82 -,0x83,0x51,0x99,0x14,0x26,0x51,0x33,0xc4,0xe6,0xaf,0x9f,0x6f,0x1e,0x79,0xa5,0xcc,0x22,0xa3,0x52,0x67,0x57,0xbb,0xcd,0x78,0xf3,0x75,0xf8,0xfe,0xbc,0x79,0xe7,0xf7 -,0x10,0x75,0x39,0xb9,0x47,0xfb,0x39,0x19,0xed,0xe7,0x1b,0x51,0x69,0xe9,0x00,0x79,0x99,0x69,0xdb,0xef,0xa2,0x4c,0x8d,0xed,0x8a,0x7d,0xfe,0x87,0xec,0xfc,0xaf,0xa2 -,0x74,0xfb,0xfd,0x1b,0xb2,0xef,0x3e,0x57,0x83,0xbd,0xe4,0x50,0x76,0xac,0x72,0x48,0x17,0x46,0x25,0xcd,0x4f,0x74,0xa5,0x67,0x91,0x72,0x9e,0x50,0x41,0xc4,0x64,0x92 -,0x5c,0x34,0x25,0xf9,0x20,0x3c,0x40,0x9d,0x45,0xbd,0xcf,0x5e,0x60,0x1e,0x70,0x02,0x00,0x0f,0x58,0xf7,0x0f,0x62,0x00,0x77,0x83,0xba,0x00,0x78,0x31,0x1f,0x31,0x24 -,0x80,0xba,0x40,0x09,0x84,0x22,0x15,0x88,0x1c,0xff,0xf1,0x50,0x80,0x28,0x5f,0xfc,0x21,0x0a,0xcf,0xfb,0xef,0xfd,0xff,0xff,0xb3,0x61,0x20,0x98,0x28,0x12,0x0a,0x05 -,0x82,0x81,0x51,0x38,0x50,0x2a,0x24,0x0b,0x05,0x04,0x47,0x13,0x98,0x45,0x0a,0x92,0x93,0x5c,0xcb,0xdb,0x8b,0xf5,0xc6,0xf5,0x9c,0x55,0x2e,0xa4,0xbb,0xa9,0x52,0x71 -,0xb8,0x4f,0xdf,0xa0,0x5a,0x74,0xcd,0xff,0xe3,0xf9,0x4f,0xc3,0xfd,0xd3,0xf9,0xbd,0xf1,0x8e,0x4d,0xe8,0xcc,0xba,0x4e,0xa9,0x79,0x0a,0xea,0x5d,0xb4,0xf9,0x78,0x88 -,0x3c,0xcc,0x43,0x71,0x19,0xf9,0xd5,0xae,0x79,0xe4,0x62,0x5b,0xc9,0xb2,0x17,0x92,0x8e,0xe3,0xf4,0x2b,0xd0,0x2b,0xf8,0xc5,0x43,0x89,0xbe,0x60,0x6d,0xeb,0xa4,0xcd -,0x9b,0x39,0x0b,0xc6,0x7c,0x10,0x21,0x7a,0xa5,0xa6,0x34,0x20,0x95,0x90,0xba,0xe4,0xc4,0xea,0x5c,0x49,0x28,0x89,0x9a,0x16,0x13,0x7b,0xa2,0xc0,0x23,0x72,0xb2,0x21 -,0x70,0x55,0x34,0xc2,0x74,0x50,0xa9,0xc8,0x00,0x24,0x88,0x15,0x4a,0x14,0x0a,0x85,0x86,0x81,0x20,0xa1,0x58,0x6a,0x14,0x0a,0x85,0x02,0xa1,0x60,0xa8,0x50,0x2a,0x12 -,0x09,0x9c,0x46,0x64,0x11,0xb2,0xf7,0x59,0xc5,0xf8,0xfc,0x7a,0xdd,0xd1,0x74,0x5d,0x5e,0x5e,0xf8,0xad,0x4b,0x4e,0x7f,0x5a,0xa6,0xab,0xac,0xf2,0x1c,0x38,0x67,0x31 -,0xd1,0xa9,0xb6,0x27,0x1c,0xf8,0xfe,0x2f,0x26,0xd5,0xb0,0x73,0x6f,0xc0,0xfc,0xa6,0x5d,0xc6,0xed,0xc8,0xa5,0x14,0xd4,0xe3,0xea,0x99,0x53,0xee,0x79,0x46,0x3d,0x0a -,0xe4,0xef,0x2b,0x70,0x8a,0x7b,0xd1,0xc1,0xc9,0x48,0x50,0xa0,0x70,0x3b,0x24,0xf2,0x1f,0x3a,0xab,0x9e,0x69,0x4d,0x71,0x8e,0x44,0x72,0xb3,0xab,0x4e,0x53,0xb7,0xb0 -,0x34,0x7f,0x72,0x53,0x5a,0x17,0xae,0x5f,0x81,0x34,0x47,0x75,0x2b,0xbb,0x94,0x7b,0x80,0x7b,0xb7,0xab,0xdd,0x44,0x3e,0x08,0x99,0x1b,0xd8,0x05,0xe6,0x00,0x3d,0x60 -,0x1d,0xf0,0x03,0xd6,0x07,0xac,0x0b,0x00,0x08,0xa4,0x07,0xff,0xf1,0x50,0x80,0x27,0x9f,0xfc,0x21,0x0a,0xcf,0xef,0xff,0x6d,0xff,0xfd,0xb1,0x50,0xb8,0x50,0x44,0x44 -,0x2a,0x85,0x02,0xe1,0x10,0x98,0x48,0x86,0x12,0x18,0x94,0xc2,0x24,0x30,0x89,0x9d,0xa3,0x88,0xf1,0xd5,0xf8,0xb9,0xae,0xfc,0xf3,0x79,0xa9,0x8b,0xcb,0xe2,0xaa,0x71 -,0xb1,0xd7,0x75,0xd6,0x7f,0x8f,0xf0,0x1e,0x8f,0x23,0xff,0xdf,0xfa,0xbf,0x9d,0xbe,0x1c,0xfa,0x03,0x93,0x78,0xb7,0x3a,0xfe,0x18,0xb7,0xda,0xfe,0x0d,0x21,0xea,0x3b -,0x9d,0x33,0xf5,0x79,0x7f,0xd1,0xd4,0x9a,0xf4,0x8f,0x9d,0xb8,0x2d,0x3d,0xd4,0xd9,0x0f,0xd4,0x39,0x45,0x27,0x25,0xc3,0x01,0xd4,0xb6,0x8e,0xa9,0xa3,0x70,0x65,0x9a -,0x74,0x82,0x1a,0xac,0x27,0x9a,0xe9,0xd5,0x34,0x2e,0x48,0x25,0x69,0x22,0x5f,0xba,0xf7,0x02,0x64,0x48,0x53,0x60,0x02,0x5e,0x71,0x2a,0x21,0x2b,0xd4,0x07,0xec,0x5d -,0x60,0x24,0x09,0x01,0x55,0x17,0x01,0x20,0x22,0x05,0x11,0x05,0x02,0xc2,0x40,0xa8,0x50,0x64,0x14,0x0b,0x05,0x06,0xc1,0x21,0x20,0x58,0x2a,0x14,0x09,0x05,0x02,0x43 -,0x30,0x88,0x8c,0xe2,0x67,0xbc,0xf7,0xd4,0xe7,0xdb,0x9e,0x1d,0xdc,0xa5,0x5b,0x9e,0x1b,0xd2,0xb5,0x79,0x7c,0x4c,0xd4,0x95,0xaf,0xa7,0xd7,0xcf,0xee,0x30,0xe2,0x15 -,0xf5,0xf3,0xbf,0xc9,0xee,0x7c,0xf7,0xb5,0xdb,0x3a,0xb5,0x55,0xac,0x47,0xf4,0x6f,0x5a,0xd5,0xe5,0x9a,0xa2,0x68,0xd2,0x0f,0x2f,0xff,0x77,0x9c,0x57,0x7c,0xea,0x91 -,0xea,0xa8,0xa6,0xb6,0x6a,0xbd,0xcc,0x76,0x3e,0xd6,0xc5,0xfa,0xed,0x5e,0x17,0xd0,0x64,0x4f,0x73,0xec,0x54,0xca,0x60,0x5e,0x5c,0xfe,0x37,0x31,0xf7,0x81,0x25,0xf7 -,0x96,0xcd,0xe4,0x5a,0x34,0x96,0xbe,0x4d,0x4b,0x68,0x98,0x0b,0x77,0x83,0xd6,0x07,0x7a,0x34,0x20,0x04,0xcf,0x73,0xd7,0x01,0xdd,0x7b,0x80,0x01,0xdc,0x2c,0x00,0x10 -,0x88,0x09,0x80,0x0b,0x04,0xc0,0xe0,0xff,0xf1,0x50,0x80,0x28,0x9f,0xfc,0x21,0x0a,0xcf,0xef,0xff,0xff,0xff,0xff,0xae,0x70,0xa0,0x98,0x48,0x26,0x12,0x05,0x44,0xc1 -,0x41,0x30,0x54,0x28,0x42,0x18,0x84,0x82,0x31,0x7b,0xc9,0x75,0xed,0x3e,0x7a,0xdd,0xed,0xf5,0xf6,0xe3,0x24,0x45,0x6a,0x93,0x48,0x2a,0xf5,0x93,0x35,0xfb,0xe8,0x3b -,0x2f,0xd7,0x34,0xa5,0xda,0xf6,0x17,0x87,0xa0,0xdf,0x6f,0x02,0xd6,0x9f,0x49,0x7c,0x51,0xc8,0xa9,0xed,0x4f,0xc5,0xb5,0xfe,0x9f,0xff,0x18,0x7d,0x00,0x5c,0x2e,0xf9 -,0x17,0x86,0xbe,0xe0,0x4d,0x4e,0x28,0xd5,0x45,0x56,0xef,0xdb,0x95,0x47,0x7d,0x08,0x49,0x74,0xf9,0x25,0x7d,0x65,0x15,0xc4,0xad,0xa3,0x03,0x42,0xea,0x31,0xfc,0xd4 -,0x84,0x76,0x28,0xb4,0xe8,0x62,0x90,0x56,0xea,0x2a,0x89,0xbd,0x25,0xc1,0x61,0x2b,0x40,0x34,0x94,0x70,0x05,0xc5,0x82,0x21,0x81,0x58,0x00,0x2e,0x30,0x0b,0xa6,0xa5 -,0x63,0x7b,0x00,0x15,0x58,0x05,0x4a,0x04,0x82,0xa1,0x40,0xb8,0x54,0x2c,0x14,0x0a,0x85,0x04,0xc1,0x50,0xb0,0x50,0x2c,0x15,0x0a,0x11,0x42,0x62,0x20,0xa8,0x8c,0x22 -,0x33,0x10,0x88,0xc2,0x21,0x31,0x09,0x1c,0x7b,0xba,0xf1,0x5f,0x5e,0x2d,0x59,0x19,0x75,0x51,0x77,0x55,0x7d,0x6e,0xa9,0xd4,0xe7,0xf5,0xf1,0xbf,0xa6,0x7e,0xbe,0xbc -,0x8d,0xf3,0x9d,0xe3,0xa6,0x1e,0x5f,0xc8,0x9e,0xcf,0xfa,0x7d,0x4e,0x2d,0xbb,0x7b,0x78,0x29,0x1d,0xd7,0xd2,0x32,0x3d,0x53,0x6f,0x7b,0xd5,0x16,0x9e,0xc7,0x5c,0x57 -,0x48,0xf3,0x4d,0x5f,0x26,0x92,0xdc,0xee,0x18,0xd7,0xd6,0xcb,0x5c,0xbc,0x6e,0xe3,0xf8,0x14,0x25,0xf5,0xa7,0xd6,0x22,0x57,0x5f,0x26,0xb8,0x83,0x2e,0x60,0x02,0x7c -,0xef,0x2f,0x5f,0xde,0x84,0xf5,0x5f,0x11,0x29,0x53,0x3c,0x03,0x15,0xec,0xec,0xbc,0x93,0x7b,0xa0,0xf5,0xc2,0xf1,0x11,0xc8,0x9c,0x40,0x7b,0xa4,0x81,0x10,0xd1,0x0f -,0x70,0x07,0xae,0x00,0x0a,0x02,0xc0,0x11,0x11,0x03,0x80,0xff,0xf1,0x50,0x80,0x27,0xbf,0xfc,0x21,0x0a,0xcf,0xed,0xff,0xef,0xff,0xff,0xb4,0x50,0xb0,0x50,0x4c,0x14 -,0x0a,0x85,0x02,0x42,0x30,0xa8,0x90,0x4e,0x12,0x0b,0x04,0x88,0xa1,0x21,0x0a,0x8c,0x22,0x75,0x49,0x55,0xfa,0xfa,0xef,0xd9,0x9b,0xd6,0x67,0x18,0x97,0x29,0x24,0x3a -,0xcc,0x9b,0xbe,0xaa,0xad,0x3e,0xfc,0x07,0xb7,0xce,0xdc,0x0f,0x22,0xfa,0x16,0x8e,0xe8,0x79,0x5f,0xaa,0xbf,0xf4,0x3c,0x76,0x95,0x7d,0x55,0xb2,0xf9,0x97,0x7b,0x47 -,0x7e,0x89,0xff,0x70,0x7c,0x95,0xd3,0x7d,0xcb,0x2e,0x3d,0xb4,0xcd,0xb1,0x52,0x38,0x69,0xbf,0x56,0xea,0x8b,0x56,0xa5,0xb0,0x4e,0xc5,0xe6,0x83,0xc6,0xb5,0xda,0x63 -,0x48,0x26,0x95,0xe7,0x9e,0x1c,0xa8,0x21,0x01,0x11,0x84,0x19,0x50,0x91,0x15,0xd4,0x29,0x74,0x48,0x89,0xca,0x96,0x6b,0xc0,0x04,0x5e,0xb8,0x42,0x82,0x05,0x01,0x11 -,0xcd,0x00,0x48,0xb9,0xcd,0x50,0x02,0xa4,0x00,0x53,0x10,0x50,0x8c,0x15,0x0a,0x08,0xc2,0xa1,0x40,0xa9,0x08,0x4a,0x24,0x09,0x05,0x02,0x41,0x51,0x98,0xc4,0x46,0x21 -,0x11,0x84,0x4c,0xf0,0xcb,0x67,0x5b,0xdf,0xc7,0x88,0xba,0xc2,0xf0,0x9c,0x56,0x82,0xb8,0x9f,0x55,0xcf,0xaf,0xdf,0xdf,0xef,0xbe,0x86,0xcd,0xcb,0xa3,0xfc,0x33,0xfd -,0xda,0x8d,0xf4,0x7c,0xb3,0x42,0x7f,0x0b,0xd5,0xc6,0xdb,0x57,0xa1,0xd2,0xeb,0x7c,0x9c,0xba,0x2b,0x93,0xdd,0xe4,0x73,0xd1,0xef,0xf3,0xfb,0xee,0xdc,0x3e,0x2e,0x7b -,0xf7,0xca,0xee,0xaf,0x3b,0xa5,0xab,0xa7,0x4e,0x3e,0x81,0x2e,0xcb,0xa2,0x63,0xce,0xdb,0xae,0xd9,0x2a,0xd7,0x32,0x56,0x82,0xba,0x93,0x3c,0xcb,0x58,0xa9,0x69,0x3f -,0x66,0x42,0x44,0xbb,0xfe,0xb9,0xeb,0xf1,0x42,0x26,0x39,0xd8,0x65,0x85,0x6f,0x11,0x4a,0x57,0xf6,0xc5,0x83,0xd7,0x08,0x00,0x52,0xc0,0x00,0xee,0x11,0x16,0x22,0x00 -,0x88,0xaa,0xa0,0x01,0x68,0x1d,0xc0,0xe0,0xff,0xf1,0x50,0x80,0x27,0x3f,0xfc,0x21,0x0a,0xcf,0x67,0xff,0xdf,0xff,0xfe,0xb4,0x62,0x98,0x48,0x2c,0x24,0x0a,0x85,0x02 -,0xa1,0x40,0xa8,0x58,0x28,0x25,0x09,0x05,0x02,0x43,0x14,0x98,0x44,0x26,0x11,0x3a,0xa7,0x9f,0x5d,0x6b,0xcf,0xed,0xab,0xdb,0xaa,0xf1,0xe7,0x69,0x78,0xd2,0x54,0x6b -,0x2b,0x8d,0x7a,0xf6,0xc5,0xe5,0xfe,0x3e,0x01,0xf1,0xb3,0x89,0xf5,0xf3,0xaf,0x8d,0xbf,0xe0,0xc0,0x79,0x68,0x8e,0x25,0xe5,0x94,0x74,0xe7,0x0f,0xab,0xb5,0x5c,0x4f -,0xb9,0x83,0x7a,0x82,0x15,0xd1,0x7c,0x2a,0xc4,0xbe,0x26,0x95,0x83,0x96,0x1d,0xe2,0x76,0x6d,0xbe,0x0c,0x34,0x11,0xdd,0x66,0xa0,0x44,0xe3,0xed,0x9a,0xdc,0xe1,0x18 -,0xa3,0x0a,0x59,0x0a,0xf7,0x22,0x9c,0x27,0x37,0xfc,0x02,0x53,0xbd,0xd5,0x0a,0x55,0x6a,0x94,0x19,0x69,0xd1,0x28,0x83,0xd6,0x0c,0x72,0x84,0xee,0xd2,0x1d,0xd0,0x10 -,0x46,0x48,0x84,0x56,0x09,0x00,0x5c,0xd3,0x30,0x04,0xc9,0x2a,0x05,0x29,0x09,0x02,0xe1,0x40,0xb0,0x50,0xea,0x12,0x0a,0x05,0x42,0x41,0x41,0x28,0x50,0x2a,0x12,0x18 -,0x8c,0xc2,0x21,0x30,0x89,0x4c,0x22,0x57,0xbe,0x6f,0xac,0xc9,0xfa,0xfc,0xfd,0xff,0x4b,0xcb,0x8c,0xa9,0x7b,0xd2,0xea,0xdf,0x7c,0xf5,0xed,0xe3,0xf5,0xbe,0x7b,0xe3 -,0x73,0xa8,0x12,0xec,0xe0,0x3d,0x6b,0xdf,0xb6,0x0f,0xe8,0x79,0xee,0xa9,0xf1,0x8e,0x77,0xdb,0x6f,0x07,0x73,0xae,0xf8,0xb5,0x0a,0xf9,0xf6,0xc9,0x51,0xf3,0x23,0xf9 -,0xbb,0xf1,0x83,0x46,0xf9,0xc7,0xe1,0xf9,0xa8,0xa1,0x02,0x74,0x0c,0xac,0x53,0x81,0x70,0x21,0x55,0x5e,0x93,0xae,0x23,0x6e,0xe9,0x5a,0xd4,0x15,0xdd,0x1e,0xac,0x0f -,0x6c,0xe9,0x15,0x84,0xc0,0x3d,0xc5,0x88,0x57,0x40,0x7b,0xbe,0xe8,0x09,0x1a,0x80,0xca,0x5d,0x30,0x01,0x31,0x70,0x98,0x1d,0xe2,0x00,0x16,0x02,0x40,0x0b,0x84,0x80 -,0x70,0xff,0xf1,0x50,0x80,0x29,0x1f,0xfc,0x21,0x0a,0xcf,0xad,0xff,0xff,0xff,0xfd,0xb0,0x61,0x20,0x4c,0x28,0x15,0x09,0x05,0x42,0x41,0x60,0xa8,0x48,0x2e,0x14,0x09 -,0x05,0x42,0x61,0x50,0x91,0xc5,0x26,0x11,0x19,0x88,0x46,0xf0,0xbd,0x73,0xe7,0x37,0xfe,0x9f,0xd7,0x5b,0x97,0xce,0xa9,0x25,0xe4,0xab,0x5e,0x7e,0xbe,0xb2,0x9c,0x73 -,0xc6,0x7b,0x65,0x7d,0xf8,0x03,0xec,0xec,0xbb,0xea,0x3f,0x99,0xf8,0xdf,0xa8,0xfb,0x9f,0xda,0x39,0xfd,0x56,0x4d,0xde,0xbf,0x4f,0x1e,0x34,0x5a,0xee,0xf5,0xf0,0x2b -,0xef,0xe2,0x5e,0x15,0x8f,0x1e,0x11,0xc4,0x7e,0x58,0x7b,0x2c,0x87,0x5a,0x05,0x69,0xe9,0x7c,0x8b,0xa0,0xd0,0x1a,0x75,0x23,0x0b,0x1e,0x95,0x2b,0x6e,0xe6,0x0e,0x1f -,0xe3,0x82,0x56,0x21,0x80,0x52,0x01,0x01,0x6b,0x84,0x49,0xa7,0x4b,0x84,0xf3,0xb7,0x88,0xd4,0xb8,0x3e,0xdc,0x16,0xb9,0x5b,0x24,0x37,0x88,0x23,0x32,0x80,0x3b,0xa7 -,0xaf,0xeb,0x01,0x10,0x2e,0x5c,0x20,0x05,0x21,0x09,0x02,0x62,0x60,0xb8,0x58,0x28,0x16,0x0a,0x04,0x82,0x83,0x50,0xa0,0x54,0x28,0x16,0x0a,0x04,0x82,0xa2,0x40,0x88 -,0x48,0x26,0x21,0x09,0x88,0x46,0x61,0x13,0xbe,0x59,0x52,0xbf,0x7f,0xd2,0x71,0xb4,0x62,0x4c,0xb4,0xd6,0x5e,0x79,0x9f,0x1f,0x69,0xdf,0xea,0xef,0x99,0xf5,0xaf,0xb7 -,0x9f,0x61,0x0f,0xb6,0xbb,0xff,0x1f,0xe8,0x78,0xa3,0xb2,0xdf,0x66,0xdd,0xcc,0xfb,0x1a,0x3a,0x7f,0xda,0xf2,0xff,0xa2,0x19,0xe2,0xf5,0x5c,0x3d,0x88,0xb9,0xf1,0x3f -,0xa8,0xc7,0x02,0xbf,0x71,0x22,0x72,0x60,0x94,0x53,0xfa,0x1e,0x7d,0x76,0x4b,0xd1,0x3b,0xf0,0x89,0x22,0x95,0xf0,0x40,0xe5,0x8f,0x66,0xe8,0x5a,0x4d,0x0d,0x31,0x4b -,0x08,0xc7,0xa0,0xee,0x58,0x3d,0xdf,0x5c,0x02,0x88,0x4b,0xbd,0x7f,0x74,0x20,0xa1,0xed,0x49,0x46,0x77,0x13,0x0d,0x00,0x04,0x40,0xef,0x10,0xa5,0x00,0x4a,0xa2,0xea -,0x01,0x30,0x10,0xd9,0x10,0x02,0xc5,0x40,0x70,0xff,0xf1,0x50,0x80,0x26,0x5f,0xfc,0x21,0x0a,0xcf,0xe7,0xfb,0xff,0xff,0xff,0xb1,0x61,0xa0,0x94,0x48,0x35,0x09,0x05 -,0xc2,0x82,0x50,0xa1,0x08,0x42,0x23,0x08,0xc9,0xcd,0xaa,0x71,0xf1,0xfc,0x75,0x4c,0xd4,0xe5,0x24,0xb2,0x52,0xef,0x35,0x6c,0xdc,0x69,0xdf,0x1c,0x7e,0x3c,0x84,0xfb -,0xfd,0xdc,0xfa,0xbe,0x1b,0xfb,0x8f,0x69,0xcf,0xb3,0xd8,0x7b,0x9f,0xd5,0xb3,0x63,0xe8,0xf1,0x76,0xf7,0x26,0xab,0x74,0xbe,0xef,0x04,0x4f,0xe4,0xd6,0xe1,0xe2,0xa0 -,0x97,0x9e,0xf6,0x91,0xaa,0x3c,0x26,0x84,0xcc,0x3f,0xe1,0xb0,0x63,0xef,0x3a,0x5f,0x5b,0xf0,0xab,0xe3,0xaf,0x29,0x28,0xa5,0x1c,0x8d,0xb6,0xb0,0x84,0x22,0xa4,0xa9 -,0x90,0x52,0xc2,0x43,0x48,0x06,0x58,0x06,0xf8,0x91,0x13,0x9a,0x29,0xc1,0x2b,0xc4,0x18,0xe1,0x60,0x16,0xa4,0x33,0x07,0x69,0x45,0x50,0x0b,0x58,0xa2,0x23,0x08,0x17 -,0x0a,0x01,0x46,0x42,0x60,0xa0,0x94,0x2e,0x14,0x12,0x8d,0x06,0xa1,0x40,0xa8,0x50,0x8a,0x12,0x11,0x84,0x82,0x66,0x11,0x18,0x44,0x66,0x11,0x1a,0xbd,0xf9,0xd5,0x56 -,0xaf,0x7a,0xcc,0x82,0xf2,0x12,0xa4,0x9a,0xe9,0xcd,0xb6,0xe3,0x23,0xab,0xbd,0x08,0x1c,0x4d,0x1f,0x03,0xff,0x7f,0xc4,0xf1,0xfb,0x4f,0x8d,0xf7,0xbe,0x74,0xe7,0xee -,0x9a,0x7d,0x10,0xda,0x5d,0x2a,0x27,0xed,0xaf,0x0e,0x17,0xc3,0xd5,0xfb,0xd1,0x47,0xf6,0x26,0x4d,0xc1,0x16,0x82,0x34,0xdd,0xa9,0x3d,0xe9,0x8b,0x17,0xf0,0xdc,0x1c -,0xce,0xab,0xf2,0x6f,0x32,0xf5,0x5a,0x7d,0x3b,0xfc,0xfd,0xd3,0x31,0x28,0xe7,0xb8,0xb7,0xb3,0x8d,0xc1,0xdc,0x07,0xbb,0xee,0x48,0xf7,0x25,0xf5,0xa6,0x80,0x07,0x9a -,0x82,0x67,0xdb,0x41,0x02,0x58,0xd6,0x0b,0x96,0x9d,0x3d,0xcb,0x01,0x79,0x02,0x44,0xc2,0x77,0x5c,0x1e,0xb0,0x05,0xc0,0x02,0x24,0x40,0xe0,0xff,0xf1,0x50,0x80,0x25 -,0x1f,0xfc,0x21,0x0a,0xcf,0x5f,0xee,0xff,0xff,0xbc,0xb2,0x61,0x21,0x08,0x2a,0x14,0x13,0x84,0x82,0xa1,0x40,0x98,0x54,0x28,0x42,0x38,0xc1,0xcc,0xf3,0xeb,0x89,0x32 -,0xe9,0xbe,0x35,0xef,0xd6,0x5a,0x56,0xb1,0x69,0x61,0x7c,0xd7,0xeb,0xef,0x17,0xf1,0xd0,0x2d,0x9e,0x81,0xfc,0xc6,0xe9,0xfe,0xce,0x3f,0xd2,0xe3,0xc2,0xe9,0xae,0xde -,0xa1,0xfe,0xee,0xd3,0xf9,0xba,0x88,0x7f,0x18,0xfb,0x7c,0x0f,0x19,0x83,0xdc,0x87,0x01,0xbf,0x9a,0xa9,0xc2,0xd9,0x52,0x62,0xa5,0xb6,0xa2,0x23,0x4e,0xa4,0xa9,0x8f -,0x29,0x61,0x7d,0x4b,0x68,0x92,0x09,0xf3,0x1c,0xa9,0x14,0x26,0xbb,0xb0,0xa8,0x2d,0x23,0xa1,0x41,0x82,0x2a,0x29,0x61,0x5b,0xa8,0x80,0x0c,0x56,0x05,0x53,0x02,0x77 -,0x54,0x49,0xaa,0x91,0x01,0x19,0x10,0x02,0x85,0x80,0x6b,0x16,0x23,0x41,0x70,0x20,0x02,0xb4,0x82,0x82,0x70,0xb0,0x94,0x28,0x35,0x09,0x05,0x46,0x82,0x20,0xa0,0xd4 -,0x44,0x23,0x08,0x84,0xc2,0x22,0x30,0x89,0x4c,0x22,0x65,0x5f,0x7f,0x8f,0xd3,0x5e,0xdd,0xaf,0x9d,0x65,0x53,0x82,0xa4,0xc7,0x0f,0x3c,0xcb,0xa9,0x5f,0x19,0xdb,0xeb -,0x3d,0xb7,0xc0,0xe3,0xe3,0x70,0x9e,0xbd,0x47,0xb3,0xd6,0x8e,0xee,0x77,0xf9,0x9e,0xef,0x2e,0x2f,0xde,0x6f,0x7b,0xad,0xda,0xda,0x78,0xf8,0xb4,0x99,0x48,0x35,0xfb -,0x3e,0x52,0xf7,0xbe,0x82,0xf8,0xbe,0x2c,0x75,0xbb,0x3e,0x14,0x75,0xd3,0x50,0xeb,0xda,0x08,0xe6,0xce,0x4a,0x5e,0x17,0xfd,0xd6,0xad,0xf3,0xdd,0x92,0x89,0x1b,0xb0 -,0x7b,0x8b,0xdc,0x14,0xb5,0x20,0x5c,0xba,0xc0,0x7b,0xf0,0x10,0x85,0x4b,0x8e,0x60,0x8d,0xe2,0x22,0x00,0x54,0x3b,0xf4,0x0a,0x2d,0x32,0xe2,0x20,0x04,0xc1,0x40,0x02 -,0x08,0x00,0xe0,0xff,0xf1,0x50,0x80,0x29,0x1f,0xfc,0x21,0x0a,0xcf,0xff,0xfa,0xec,0xff,0xfc,0xb0,0x61,0x20,0x98,0x4a,0x14,0x0b,0x05,0x02,0xa1,0x40,0xb8,0x50,0x2c -,0x15,0x0a,0x05,0x44,0x82,0x20,0x98,0x44,0x24,0x23,0x08,0x88,0xc2,0x27,0x30,0x89,0x5d,0xb8,0xaa,0xeb,0x8f,0xb6,0x97,0xbd,0x6b,0xd7,0x5c,0xaf,0xae,0x6b,0x4a,0x9a -,0xbf,0x3e,0xaa,0xeb,0x2b,0x5e,0x73,0x7d,0x7d,0xf4,0x39,0x0f,0x6d,0x1f,0xbb,0xf9,0xb7,0x03,0xfa,0x23,0xb3,0xe4,0x5c,0x5b,0x89,0xfb,0x2d,0x2c,0x71,0x63,0xc1,0x8e -,0x9c,0x43,0x2d,0x5b,0xbf,0xa6,0x53,0x27,0x2f,0xe0,0xe7,0xa5,0xfd,0xed,0x72,0xb7,0x28,0x92,0x15,0xf8,0xb9,0x75,0x54,0x86,0x7f,0xea,0xe5,0x26,0xc7,0x58,0xe5,0xc5 -,0xf9,0x12,0x34,0x3e,0x6b,0x0c,0x69,0xb6,0x9d,0xeb,0x51,0x35,0x16,0x42,0xcd,0xf5,0x92,0x40,0xf5,0xef,0x50,0x49,0x22,0xe8,0x84,0x84,0xc4,0xe8,0x8c,0xc9,0x22,0x60 -,0xb0,0x39,0x11,0xb1,0x00,0x7a,0xc0,0xa0,0xb8,0x02,0x87,0x2b,0x00,0x64,0x0a,0x81,0x54,0xa1,0x20,0xb8,0x50,0x4a,0x24,0x23,0x05,0x06,0x41,0x40,0xa8,0x50,0x44,0x14 -,0x11,0x05,0x02,0x42,0x30,0x88,0x4c,0x42,0x13,0x08,0x94,0xc2,0x24,0x75,0xef,0x57,0x7d,0xf1,0x91,0xbb,0x19,0x0d,0x12,0xf7,0x3d,0xb7,0xa9,0xbe,0xa7,0x79,0xfa,0xcf -,0x1d,0x7b,0x7b,0x68,0x39,0x60,0xf3,0xfe,0x77,0xc8,0xe8,0x3d,0xdd,0xa6,0xc7,0xdd,0xf2,0x5e,0xe6,0x0a,0x3a,0x73,0x7e,0x55,0xd7,0x69,0xef,0x1c,0xbf,0x67,0x67,0xe8 -,0xba,0x1f,0x62,0xf9,0xbb,0xf5,0xe4,0xe1,0xdc,0x5b,0x44,0xc6,0x4d,0xe7,0xdc,0xb0,0xa7,0x07,0x5f,0x67,0x2a,0xdd,0x4d,0x1f,0x04,0x13,0x8c,0xf4,0x56,0xb0,0xa1,0xef -,0x1c,0x69,0x4e,0xb5,0x53,0x79,0xed,0x3b,0xe8,0x90,0x29,0x6a,0x3f,0x2c,0x17,0xf7,0x57,0x05,0xd7,0x52,0xa7,0xba,0x40,0x00,0x81,0x26,0x9a,0x00,0x94,0x17,0x11,0x08 -,0x44,0x00,0xf4,0x60,0x14,0x00,0x50,0xb0,0x13,0x03,0x80,0xff,0xf1,0x50,0x80,0x26,0xbf,0xfc,0x21,0x0a,0xcf,0x4f,0x7e,0xff,0xff,0xff,0xae,0x60,0xa0,0x58,0x2a,0x14 -,0x0a,0x84,0x82,0xc3,0x51,0x38,0x50,0x2a,0x16,0x0a,0x85,0x06,0x44,0x10,0x90,0x44,0x46,0x11,0x39,0x88,0x4a,0xf7,0xbe,0x33,0x7e,0x5c,0xeb,0x09,0x39,0xbb,0xcb,0x8a -,0x5c,0xad,0x71,0xbc,0x55,0xd5,0x7c,0x56,0x54,0xfd,0xf8,0x0f,0xe3,0xff,0xd9,0xf9,0xbc,0xf7,0xbf,0x04,0xa7,0xcb,0x89,0x1f,0x2f,0xca,0x8c,0x43,0xdb,0x6f,0x6e,0x7a -,0xca,0x7c,0xd7,0x5e,0xd4,0x48,0xe2,0x8b,0x4f,0xcd,0x78,0x3f,0x8b,0x8b,0xf1,0x29,0xdb,0xe9,0x17,0x73,0x54,0x4e,0xb2,0xe6,0x32,0xe7,0x65,0xd0,0x87,0x23,0x89,0x7c -,0x2a,0x23,0x0f,0x5a,0xa8,0xde,0xca,0x5f,0xb0,0xa4,0x0f,0x58,0x52,0xe9,0xa3,0x65,0xe7,0x8e,0x20,0x52,0x65,0xae,0xc0,0x8c,0xbb,0x05,0x67,0x0b,0x4f,0x85,0xa8,0xb3 -,0x1a,0xd7,0x55,0xec,0x80,0x03,0xbb,0xe0,0x00,0x4d,0x30,0x01,0x9d,0x7b,0x00,0x4c,0x55,0x30,0x2b,0x08,0x4c,0x35,0x0b,0x85,0x06,0xa1,0x41,0x28,0x50,0x26,0x14,0x21 -,0x05,0x42,0x41,0x41,0x09,0xcc,0x42,0x96,0xbd,0x6f,0xef,0xe3,0x3a,0xc8,0xde,0x93,0x11,0x48,0xba,0xbb,0xaf,0xd7,0xed,0x4f,0x64,0x71,0xc7,0xed,0x7f,0x7a,0xb1,0xca -,0xb7,0xd3,0xcf,0x5f,0x43,0xf8,0x1e,0x5e,0x79,0xa3,0x74,0xbf,0xc1,0x31,0xb1,0x8e,0xa3,0xbc,0x73,0x70,0x94,0x3d,0x57,0xca,0xcb,0x0d,0x76,0xc7,0x12,0xf0,0xe7,0xeb -,0xbd,0x49,0xf7,0x83,0x76,0xf4,0x7a,0x6d,0xcf,0x4d,0x07,0xa7,0xec,0x71,0x24,0xb2,0xa3,0xc4,0xf5,0x4c,0x70,0x50,0x7c,0x70,0xe1,0x61,0xd0,0x9f,0x29,0x5a,0xb6,0xa4 -,0xa8,0x12,0x59,0x78,0xcc,0xb1,0xfb,0xbb,0x96,0x0b,0x1c,0xcf,0x58,0x0e,0xe0,0x00,0xb8,0x08,0x80,0xb8,0x17,0x02,0x21,0x24,0xc6,0x6b,0x84,0xc0,0xb0,0x20,0x03,0x80 -,0xff,0xf1,0x50,0x80,0x26,0x1f,0xfc,0x21,0x0a,0xcf,0xaf,0x7b,0xdf,0xf7,0xfd,0xb4,0x62,0x20,0x54,0x24,0x15,0x0a,0x09,0x48,0x41,0x50,0xa0,0x54,0x24,0x41,0x09,0x08 -,0x42,0x41,0x18,0x29,0xac,0xd6,0xb3,0x9e,0x2b,0x12,0xfb,0xd4,0x89,0x57,0x96,0x9a,0x54,0xc7,0x19,0x56,0xbd,0xcf,0xc7,0x40,0x78,0xd7,0xed,0x7f,0x69,0xed,0xff,0x6f -,0x82,0x47,0xbb,0x68,0xe6,0x9f,0x4c,0x2b,0x6b,0xf0,0x3e,0xc7,0xc8,0xa5,0x6a,0xff,0xd8,0x6d,0x9f,0x2f,0x93,0xa9,0x0f,0x29,0xc2,0xf4,0xb6,0xae,0xa6,0x47,0xee,0x32 -,0xdb,0x9b,0xb8,0xb6,0xd2,0x42,0xd0,0x85,0xcb,0x5b,0x39,0xde,0xcf,0xc7,0x78,0x5b,0x21,0x6c,0x21,0x41,0x6b,0x9d,0x47,0x47,0x05,0xcc,0x42,0xbc,0x21,0x1a,0xa6,0xad -,0x52,0x48,0x08,0xc8,0x07,0x51,0xc4,0x20,0x17,0x2c,0x59,0x58,0x05,0xfb,0xc0,0x03,0x30,0x50,0x88,0x5c,0x0b,0x80,0xa0,0x51,0x18,0x58,0x6a,0x16,0x0a,0x10,0x82,0xa1 -,0x40,0xa8,0x50,0x4a,0x16,0x0a,0x04,0x84,0x81,0x20,0x99,0x44,0x46,0x11,0x31,0x88,0x44,0xfb,0x78,0xbb,0xd7,0xaf,0x8f,0x5c,0x56,0xf8,0xa9,0x36,0x95,0x29,0x75,0xd5 -,0x75,0x79,0xbe,0x1c,0xe3,0x53,0xeb,0x17,0xd0,0x72,0x70,0xfc,0xdf,0x28,0x1e,0x5c,0x51,0xf6,0xed,0x8e,0xcb,0x8d,0xfe,0xe4,0x3b,0x69,0xf9,0xab,0xd9,0x77,0x2f,0x57 -,0x34,0xaf,0xcc,0xe0,0x4f,0xb9,0xf8,0x40,0x91,0x9f,0x47,0x63,0x2b,0x20,0x76,0xaf,0x65,0x8d,0x6b,0xd8,0xe6,0xd3,0x35,0x5e,0x78,0xf4,0x3c,0xb2,0xc7,0xca,0xbd,0xa3 -,0xcc,0x66,0x7f,0x12,0xeb,0x16,0x1e,0x63,0x8f,0xc5,0x7a,0x30,0x3d,0x72,0x9d,0xd0,0x83,0xd1,0xa7,0x12,0xbc,0xc1,0x8c,0x3b,0x82,0x00,0x4e,0x1f,0x50,0xa6,0xd4,0x43 -,0xc2,0x16,0x2c,0x21,0x12,0x21,0x62,0xc0,0x07,0xb8,0x0f,0x58,0x02,0x22,0xe0,0x38,0xff,0xf1,0x50,0x80,0x26,0xbf,0xfc,0x21,0x0a,0xcf,0xaf,0xfe,0xee,0xff,0xfc,0xb3 -,0x60,0xb8,0x50,0x84,0x13,0x0a,0x84,0x82,0xa1,0x41,0x28,0x4c,0x2a,0x12,0x0a,0x05,0x42,0x43,0x40,0x90,0x44,0x24,0x11,0x8b,0x35,0x57,0x73,0xdb,0xf6,0xeb,0x65,0xb9 -,0xd2,0xa5,0xaa,0xd1,0x3a,0xdf,0x19,0xbd,0x64,0x5d,0xe5,0xff,0x8a,0x05,0xe7,0x76,0xdd,0x0f,0x5e,0x7d,0x57,0x74,0xc3,0xf5,0x5e,0xd6,0x4f,0xb8,0x17,0xe1,0x17,0xf7 -,0x6e,0x47,0x27,0xee,0xfd,0x7e,0x04,0xf9,0xee,0xe8,0x4c,0xbe,0xdc,0xc5,0xd2,0x8e,0x66,0x7f,0xf4,0x19,0x47,0x57,0x5f,0xb5,0x0e,0x3d,0x5b,0x9c,0xc6,0x49,0xa3,0xbb -,0x62,0xe8,0x7e,0x82,0x0b,0xd3,0x9b,0x62,0x8b,0x56,0x35,0x58,0x5d,0x69,0x98,0x11,0x2e,0x15,0x12,0x10,0x71,0x2e,0xa9,0x70,0x2f,0x40,0x16,0x48,0x58,0xb0,0x98,0x48 -,0x98,0x75,0x92,0x80,0x22,0xb0,0x26,0xb0,0x49,0x40,0x90,0x0a,0x44,0x12,0x85,0x04,0xc1,0x50,0xa0,0x48,0x2a,0x14,0x0a,0x89,0x04,0xc1,0x43,0x90,0x8c,0x4a,0x13,0x20 -,0x8c,0xc4,0x26,0x7a,0xca,0xad,0x6f,0xcf,0x9f,0x79,0x53,0x2a,0xad,0x97,0x57,0x49,0xed,0xcf,0x55,0x0d,0xa7,0x4e,0x75,0x5f,0x5f,0x1c,0x0e,0xdb,0x42,0xbc,0xfe,0x6d -,0xf5,0xdf,0x49,0x3d,0x1d,0xaf,0x33,0x80,0x77,0xbb,0x6b,0xf5,0x65,0xc5,0xb7,0x15,0xd5,0xc7,0xb9,0x41,0x4a,0xaf,0xaf,0xf4,0x42,0xde,0xef,0xf0,0xb3,0xec,0x8f,0xe9 -,0x9b,0xb0,0x75,0xa1,0x1e,0x0c,0x7e,0x3f,0xb9,0x11,0x63,0xfa,0xa9,0x79,0x2b,0x3b,0x54,0x64,0xc4,0x8b,0xdd,0x7a,0xe3,0x4f,0xc4,0xfa,0xe0,0x0f,0x00,0x20,0x51,0xeb -,0x50,0x0e,0xd7,0xdd,0x0b,0x8e,0xf0,0x83,0xbc,0x27,0x04,0x50,0xdb,0xb1,0x05,0xe5,0x50,0x3b,0x46,0xee,0xe8,0x08,0x0f,0x74,0x50,0x16,0x42,0x73,0x14,0xa8,0x2d,0x54 -,0x80,0x58,0x0b,0x00,0xe0,0xff,0xf1,0x50,0x80,0x25,0x7f,0xfc,0x21,0x2a,0xcf,0xeb,0xfe,0xfe,0xdf,0xfc,0xaf,0x43,0x10,0x50,0x44,0x17,0x0a,0x05,0x82,0x82,0x60,0xa0 -,0x54,0x48,0x12,0x28,0x84,0xc2,0x21,0x31,0x09,0x8c,0x42,0x56,0x62,0xf7,0xe5,0xbf,0x3e,0xaf,0x7c,0x56,0xfa,0xaa,0xbb,0xc2,0x44,0xe9,0xb4,0xb6,0xfa,0x9b,0xbb,0xfd -,0x7c,0x8e,0xd3,0xfc,0xdf,0x34,0xfa,0x26,0x88,0xf8,0xbc,0x9d,0xb7,0x8f,0x07,0x8a,0x3e,0xd7,0x4c,0x83,0xbb,0x4e,0xe8,0x60,0xee,0x90,0xb3,0x87,0x52,0x37,0xf4,0xfe -,0x3e,0x82,0xab,0xf7,0x52,0xaf,0x58,0xf4,0xe4,0x1d,0x3f,0x7e,0xe5,0x3d,0x54,0x0a,0xcc,0x28,0xb2,0x8b,0x43,0x05,0x97,0x95,0xba,0x51,0xa2,0x29,0x75,0x94,0xf0,0xd8 -,0xbd,0x2b,0xd8,0x58,0xef,0xc0,0x77,0x01,0x31,0x52,0xc9,0xa5,0x02,0x5c,0xc1,0x10,0xa0,0xaa,0x02,0x53,0x05,0x91,0xc6,0xf7,0x14,0x00,0x3d,0x73,0x20,0x00,0x68,0x30 -,0x29,0x60,0x11,0x09,0x81,0x56,0x41,0x42,0xa8,0x58,0x44,0x24,0x23,0x05,0x08,0x41,0x40,0x90,0x94,0x26,0x12,0x09,0x88,0x5c,0xae,0x5c,0x6e,0xbf,0x1f,0xa6,0xbe,0x3d -,0xef,0x25,0x5b,0x25,0x5a,0xf4,0xe7,0xda,0xf2,0xf5,0xdd,0x5e,0x71,0xac,0xe0,0xe8,0x7d,0xb5,0x87,0xcc,0x7e,0x85,0xc9,0xb7,0xb7,0xce,0x5d,0x3e,0xb2,0xe4,0xa8,0x7a -,0x44,0x7d,0x78,0xc3,0x3c,0x30,0xee,0xcf,0x86,0xc5,0x05,0x7d,0x27,0x8c,0x59,0xbf,0x70,0x5b,0x97,0x48,0x3b,0x79,0xc3,0x6f,0x0a,0xcd,0x77,0x9d,0xc4,0xd3,0x5f,0xca -,0x11,0xf6,0x41,0x28,0xe0,0xe0,0x5d,0xbe,0x08,0xee,0x18,0x7e,0x96,0x3e,0x0f,0xc8,0x07,0xae,0x52,0x0b,0x17,0x9d,0xc3,0x68,0x39,0x20,0x5d,0x98,0x0b,0xce,0x05,0x05 -,0x5d,0x04,0x88,0x94,0x12,0x4c,0x05,0x00,0xb8,0x02,0x20,0x14,0x00,0x26,0x88,0x0e,0xff,0xf1,0x50,0x80,0x25,0x3f,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x74,0x16,0x49,0x0c -,0x8c,0x6a,0xb4,0x92,0x49,0x7a,0x09,0xbe,0xb4,0x32,0x22,0xc9,0x0d,0x7a,0x1d,0x37,0xb6,0x08,0xed,0x5c,0xcd,0x76,0xcd,0x3b,0xda,0xd9,0xf0,0x73,0xa4,0xa0,0x25,0xd9 -,0x56,0xcc,0x38,0x30,0x9c,0xe8,0x07,0x21,0x3e,0xbd,0xe7,0xa9,0x03,0x68,0xf5,0xe6,0x68,0x2f,0x5f,0xf6,0x3a,0xac,0x39,0x6b,0x81,0x4a,0xd9,0x3d,0x0e,0xaa,0xff,0x79 -,0x4a,0xe2,0xea,0x12,0xf7,0x8e,0x40,0xaa,0x2e,0xde,0x9f,0x89,0x01,0xaa,0x6e,0xf4,0x1e,0xb2,0x9a,0xca,0xec,0x6f,0xba,0x3c,0x95,0x8a,0x18,0x21,0xb0,0x14,0xfe,0x9c -,0x7c,0xd7,0xe5,0xf0,0x54,0x14,0x0a,0x86,0x79,0x43,0x12,0x16,0xa0,0x84,0x82,0x20,0x6e,0x24,0x90,0xa4,0x40,0x17,0x04,0xc4,0x4b,0x80,0xb8,0xa8,0x60,0x29,0x60,0xb3 -,0x46,0x48,0x5a,0x52,0xd6,0x5b,0x81,0xd6,0x2e,0x74,0x87,0x10,0xfa,0xc1,0x1b,0xc5,0x6d,0x60,0x45,0x00,0x86,0x6b,0x14,0xdd,0xcf,0x5a,0x6c,0xc6,0xf2,0x9f,0x25,0x6e -,0xae,0x33,0xc4,0x76,0xf6,0x06,0x17,0x94,0x95,0x93,0x77,0x09,0x24,0xb9,0x36,0x77,0x16,0xe2,0x69,0xec,0x91,0x26,0x91,0x04,0xc3,0x4f,0xf4,0x4e,0x81,0x0f,0xc5,0x60 -,0xf8,0xfd,0xfe,0x97,0x8c,0x35,0x36,0xa6,0xe9,0xf9,0x86,0xde,0x1d,0xcf,0x6d,0x6e,0x95,0xb0,0x03,0xfb,0xc5,0xb3,0xbd,0x1b,0x52,0x6b,0x28,0x09,0x24,0xaf,0x89,0x60 -,0x3f,0x52,0x31,0x8d,0xf8,0x3e,0xd3,0x52,0xd4,0x83,0x85,0x1b,0x7d,0xa0,0x87,0x6d,0xc4,0x8c,0x93,0xcf,0xec,0x76,0x5e,0x30,0x09,0x47,0x43,0x36,0x1e,0xbe,0xc5,0x69 -,0xda,0xd0,0x54,0x69,0xa4,0xa4,0x1f,0x2d,0x04,0xe9,0xf8,0x1d,0x29,0x28,0x94,0x00,0x2e,0x79,0x93,0x4e,0x04,0x02,0x62,0xe4,0xc7,0xff,0xf1,0x50,0x80,0x27,0x5f,0xfc -,0x21,0x6a,0xcf,0xfb,0x7f,0xff,0xdf,0xfe,0xb7,0x61,0x20,0xd8,0x24,0x14,0x1a,0x85,0x82,0x81,0x21,0x28,0x49,0x02,0xb3,0x08,0x84,0xc2,0x25,0x67,0x9a,0xf3,0xeb,0x8c -,0x75,0xdd,0x4b,0xa0,0x8d,0x64,0x94,0x4a,0x5e,0xb1,0xed,0xcf,0x5e,0x26,0xbf,0x01,0x97,0x57,0x6f,0x2f,0xf9,0x1c,0xab,0x5a,0xe9,0x3c,0xdc,0xa7,0x65,0xe2,0x9e,0x45 -,0x21,0x1f,0x0c,0x3f,0xd5,0xaf,0xe7,0xf0,0x5a,0xaf,0x04,0x8e,0xee,0xb1,0x86,0xe3,0x59,0xa3,0x91,0xa6,0xd4,0xd2,0x53,0x25,0xe2,0x1b,0x16,0xf9,0x94,0x9b,0xde,0xb6 -,0xae,0xa8,0xf7,0xa9,0x6a,0xc5,0x4d,0x37,0xaf,0xd1,0x72,0x10,0x2d,0x68,0xc7,0x25,0xac,0x80,0x2e,0x9d,0xd3,0x11,0xa8,0x82,0x8a,0x14,0x2c,0x99,0x33,0x1d,0x09,0x1d -,0xf0,0x5c,0x11,0x7a,0xe0,0x06,0x50,0x58,0x02,0x65,0x05,0x80,0x5c,0x0a,0x95,0x13,0x11,0x04,0x61,0x41,0x30,0x50,0x46,0x14,0x13,0x09,0x02,0xa1,0x40,0x98,0x54,0x26 -,0x25,0x09,0x88,0x82,0x22,0x30,0x88,0x4c,0x22,0x13,0x08,0x8c,0xc2,0x22,0x6e,0xf9,0x57,0x99,0xe2,0x5e,0xf4,0x4c,0xa9,0x74,0xbb,0xa6,0xab,0x8f,0x9f,0xaf,0x1e,0x7c -,0x75,0xaa,0xd7,0x89,0xe6,0xfa,0x0f,0x37,0xc0,0xf5,0xcf,0xc3,0x61,0x6c,0x2d,0xbb,0x97,0xff,0x0b,0x71,0xee,0xae,0xef,0x41,0x97,0xf6,0x17,0x34,0x8f,0xbd,0xfe,0x3a -,0x7b,0x9a,0xd7,0xd7,0xa5,0x62,0x7a,0x89,0xf4,0x68,0xd4,0xa6,0x67,0x5f,0xfd,0x38,0x71,0x70,0xe1,0x2e,0xee,0x7e,0x74,0xed,0x4f,0xfe,0xaa,0x20,0x5d,0xb9,0xb0,0xfa -,0x4d,0xcf,0x5e,0xee,0xe0,0x00,0xf3,0xe0,0x3b,0x9d,0xf0,0xde,0xbb,0xc2,0xb6,0x9c,0x74,0xf0,0xa5,0x13,0x90,0x99,0x4a,0x9a,0xe9,0x19,0x03,0xba,0xb5,0x48,0x49,0x58 -,0x1e,0xe4,0x41,0x8c,0x0f,0x70,0x01,0x20,0x44,0x17,0x55,0x72,0x93,0xb7,0x70,0x00,0xb8,0x20,0x07,0xff,0xf1,0x50,0x80,0x26,0xbf,0xfc,0x21,0x0a,0xcf,0x3d,0x7f,0x7f -,0xfd,0xfe,0xb6,0x61,0x28,0x50,0x2a,0x34,0x0b,0x04,0x82,0x84,0x30,0xa0,0xc9,0x02,0xa3,0x08,0x8c,0xc2,0x22,0x38,0xe3,0xb7,0x0c,0xd6,0x73,0xad,0x39,0xb9,0xb5,0xab -,0x59,0x2c,0x42,0xb5,0x5e,0x7b,0x6b,0x8f,0xc7,0xd0,0xfc,0xe3,0xd2,0xb7,0x7e,0xbc,0xf4,0x3a,0x8e,0x9f,0xf6,0xf0,0x1b,0xbd,0x1a,0xb2,0x7f,0xd7,0x4b,0xc0,0xaf,0xe1 -,0x5f,0xe0,0x73,0x2e,0xab,0xb5,0xa3,0xb3,0x5a,0x87,0x77,0x17,0xed,0x37,0xf3,0xbf,0x48,0xad,0x2c,0x32,0x53,0xcf,0xe3,0xf4,0x9c,0x39,0x88,0x28,0x34,0x22,0xc0,0x98 -,0xca,0xf3,0x95,0x65,0x4b,0x7f,0x35,0xe7,0xa4,0x9f,0x49,0xdc,0xb7,0xe5,0x72,0x3f,0x92,0x2b,0x4d,0x7f,0x40,0x4d,0x26,0x41,0xdc,0xe8,0x9d,0xe6,0xb9,0x40,0x41,0x21 -,0x32,0xf4,0x0e,0xe8,0x56,0xa0,0x95,0x00,0xbc,0x13,0x03,0xdc,0x01,0x40,0x22,0x05,0x5a,0x0d,0x82,0x81,0x20,0xa8,0x50,0x2a,0x16,0x0a,0x08,0x82,0x81,0x20,0xa0,0x54 -,0x2c,0x14,0x21,0x84,0x82,0x62,0x10,0x98,0x44,0x86,0x21,0x4b,0x73,0x77,0x2d,0xaf,0x5e,0x7c,0x59,0x5a,0xaa,0xae,0x2a,0xaa,0xf5,0xf5,0xeb,0xd9,0xaf,0xdb,0xe3,0xd3 -,0xf5,0xab,0x9e,0x3c,0xd7,0x43,0x94,0xef,0x9d,0x1f,0xdd,0x7f,0xfa,0xbf,0x8e,0xbe,0x57,0xc5,0xc8,0x74,0x14,0x21,0x3c,0x73,0xab,0x8f,0xc7,0x65,0xf2,0xed,0x19,0xb5 -,0xab,0x1e,0xed,0x0d,0x04,0x4f,0xe8,0x5c,0x27,0xa8,0x41,0xb8,0xdf,0x57,0x0f,0x65,0x07,0x14,0xbb,0xd2,0xa7,0xff,0x29,0x4b,0xfa,0x13,0x6d,0x5d,0xf4,0x76,0x20,0x8c -,0x8f,0xd1,0x04,0x26,0x7a,0x3e,0xfc,0x40,0x33,0xa5,0x08,0x86,0x72,0x23,0x4f,0x34,0x95,0x61,0x3d,0x60,0x14,0xb3,0xfb,0x2a,0x88,0x06,0xa0,0x04,0x91,0x00,0x04,0xec -,0x02,0x6a,0x82,0x20,0x2c,0x02,0x00,0x38,0xff,0xf1,0x50,0x80,0x28,0x7f,0xfc,0x21,0x0a,0xcf,0xdd,0x72,0x6f,0xff,0xfd,0xb5,0x61,0x20,0x58,0x2a,0x12,0x0a,0x0c,0x82 -,0xa1,0x41,0x18,0x48,0x28,0x15,0x0a,0x05,0x82,0x41,0x10,0x90,0x50,0x22,0x12,0x08,0xc9,0x33,0xef,0xeb,0xae,0x6f,0x35,0x5b,0x97,0x55,0x75,0x53,0x8a,0xc9,0x6a,0x88 -,0xa6,0xa6,0xf5,0x25,0xd7,0xfc,0xff,0x81,0x4f,0xeb,0xb2,0x9f,0xff,0x5c,0x64,0xf0,0x7f,0x7c,0xad,0x6d,0xb9,0xb9,0xf7,0x40,0xdf,0xf3,0xc4,0xb4,0x65,0x3d,0xa4,0x7c -,0x39,0x9d,0x0b,0x47,0x91,0xef,0x43,0xdd,0xdd,0x41,0x3b,0x97,0xb1,0x38,0xbf,0x43,0xdd,0xec,0x5c,0xde,0xa9,0x2c,0x5a,0xe7,0xa2,0xb0,0x1a,0xd3,0x3a,0x9c,0xbd,0x31 -,0x70,0x36,0x52,0xda,0xad,0x1b,0x94,0x29,0xb3,0x8a,0x25,0x36,0x4d,0x05,0xa8,0x47,0x35,0x18,0xa4,0x5c,0x50,0x31,0x4a,0x05,0xac,0x4d,0x46,0x19,0x0a,0x89,0x52,0x99 -,0x14,0x03,0x00,0x2f,0x88,0xc2,0x05,0x42,0x80,0xac,0xc5,0xc0,0x22,0x05,0x6a,0x11,0x82,0xe1,0x40,0xa8,0x50,0x2c,0x14,0x19,0x05,0x02,0x41,0x41,0xa8,0x48,0x48,0x15 -,0x09,0x84,0x42,0x61,0x11,0x18,0x84,0xe6,0x11,0x21,0x36,0xce,0x3a,0xe7,0x35,0xcd,0xaf,0x69,0x92,0x4a,0xd6,0xab,0xcf,0xbf,0xfb,0xff,0x14,0xfd,0x7e,0xde,0x73,0x7f -,0xed,0xfb,0x77,0x7f,0xef,0xf0,0x3c,0x1e,0xef,0x5e,0x7f,0xdf,0xc5,0x3b,0x77,0x2b,0x70,0xd8,0xf9,0x16,0xdf,0x87,0x32,0xd9,0x49,0xef,0x2f,0x4d,0x67,0x30,0xfe,0xeb -,0xed,0x74,0x8e,0xfb,0xd9,0x78,0x3a,0x30,0x7f,0x3b,0xdc,0x3c,0x9d,0x8e,0x7e,0xb7,0xfa,0x9f,0x95,0xdc,0xaa,0xbf,0x44,0xc4,0xe2,0xa9,0xb4,0xeb,0xde,0xab,0x77,0xfd -,0xa1,0x8c,0xf5,0x81,0x3f,0x56,0xda,0xd8,0xa6,0x70,0xf8,0x6f,0x58,0x0d,0xb0,0x77,0x84,0x8e,0x80,0x12,0x95,0x41,0x39,0x84,0xc1,0x10,0xbe,0xab,0x5a,0xb2,0xda,0x50 -,0x01,0xdd,0x09,0x85,0xcc,0xc4,0x82,0x20,0x17,0x03,0x80,0xff,0xf1,0x50,0x80,0x2a,0x3f,0xfc,0x21,0x0a,0xcf,0xff,0xde,0xda,0xff,0xfc,0xb1,0x61,0xa0,0x58,0x28,0x15 -,0x0a,0x14,0xc2,0x81,0x20,0xa0,0x4c,0x28,0x16,0x09,0x09,0x42,0x81,0x50,0x90,0x44,0x24,0x11,0x21,0x88,0x54,0xdd,0x6a,0xbc,0xf3,0xed,0xee,0xd5,0x4a,0x54,0xbd,0xcb -,0x25,0x25,0xd2,0xf8,0x73,0x69,0x9a,0x3f,0xef,0x62,0xcf,0x67,0x9c,0xb8,0x4b,0xfb,0x7e,0x25,0xe8,0xb9,0xef,0x1b,0xff,0x17,0xea,0x34,0xcf,0xdb,0x21,0xf4,0xab,0x72 -,0x3a,0xbc,0x2b,0xfc,0xb0,0xaa,0x7a,0x7c,0x5e,0xce,0xef,0x9d,0x0c,0xa2,0x8c,0xed,0xae,0x2b,0x97,0x48,0xb8,0x77,0x15,0x95,0x4e,0xd5,0x18,0xb4,0xf7,0x21,0x09,0x2a -,0x51,0xcb,0x53,0xeb,0x12,0x4f,0x6a,0x3d,0x89,0x99,0x3b,0x74,0x65,0xa2,0xee,0x72,0x8a,0xf6,0xe2,0x0b,0x29,0x96,0x67,0x7a,0x21,0x17,0xba,0x16,0x09,0xc6,0x62,0x62 -,0xd7,0xd1,0x57,0x69,0x17,0x82,0x3d,0x40,0x95,0xc0,0x4a,0x45,0x3b,0xe1,0x0b,0xe1,0xad,0x6d,0x05,0x01,0x48,0x87,0x98,0x05,0x52,0x09,0x84,0x84,0x20,0xb0,0x48,0x2e -,0x14,0x0b,0x05,0x10,0xa1,0x40,0x90,0x4c,0x28,0x13,0x28,0x84,0xc2,0x24,0x31,0x08,0xc9,0xe3,0x55,0x5f,0x17,0xee,0x56,0xab,0x13,0x2e,0x2a,0x2d,0xae,0xbb,0xe2,0x7f -,0xe5,0xff,0x8f,0xf3,0xff,0x1e,0x7d,0xbb,0x79,0xff,0xdb,0xa1,0xad,0x34,0x1a,0x72,0x1e,0xfe,0x71,0xcc,0x3a,0x26,0xf9,0x0f,0x31,0xbb,0xc2,0xae,0xfb,0xde,0x56,0x74 -,0x8b,0x49,0x7b,0x13,0x84,0x6f,0x24,0xbe,0x9b,0xf2,0xbf,0x7b,0xbe,0xfc,0xd0,0x36,0xbc,0xbf,0xc5,0xb5,0x14,0xff,0x13,0xc9,0xbe,0x3f,0x76,0xfa,0xbb,0xce,0xcb,0x8a -,0xca,0xe8,0x54,0xc4,0xea,0xaf,0xff,0x13,0x35,0xe7,0xe4,0x8d,0x4b,0x68,0xcf,0xef,0xea,0x27,0x4f,0xb9,0xde,0xad,0x08,0xfb,0xa2,0x49,0x7a,0xcb,0x49,0x59,0xf9,0xa0 -,0x77,0x40,0x77,0x00,0x58,0x1d,0xe2,0x20,0x2d,0x3f,0xa6,0x3a,0x30,0x80,0xb9,0x2f,0x2d,0x93,0x0e,0xe0,0x01,0xeb,0x95,0x00,0x11,0x11,0x01,0xc0,0xff,0xf1,0x50,0x80 -,0x25,0xff,0xfc,0x21,0x0a,0xcf,0xbf,0xdf,0xff,0xff,0xff,0xb4,0x61,0xa0,0x58,0x2a,0x14,0x0a,0x85,0x04,0xa1,0x41,0x10,0x94,0x24,0x24,0x11,0x05,0x42,0x42,0x11,0x10 -,0x45,0x66,0x11,0x23,0x58,0xeb,0xbf,0x6c,0xcd,0x6e,0x15,0x50,0x5d,0xe2,0xd5,0x2e,0xac,0x7c,0x7d,0xb8,0xbe,0x37,0x5f,0xfe,0x5d,0x06,0xfd,0x76,0xdf,0xc3,0x8f,0xed -,0xf1,0xe5,0xf9,0x3d,0x07,0x57,0x65,0xaf,0x7e,0xb2,0xb6,0x3c,0x57,0xb1,0xf4,0x7a,0x77,0x45,0xe7,0xb3,0xb2,0x5f,0x88,0x3c,0x3a,0x91,0x09,0xce,0x79,0x57,0xd3,0x45 -,0xf1,0x72,0x5b,0xa2,0x0e,0x97,0xda,0xa2,0xdb,0x44,0x06,0xfd,0xf0,0x5d,0x16,0x70,0x79,0xfb,0x6c,0x2b,0x54,0xad,0xe9,0xb2,0x70,0x54,0x23,0x54,0xb1,0xbb,0xf5,0xb8 -,0x9c,0x2a,0xbd,0x00,0x21,0x5e,0x60,0x9c,0x6e,0x01,0x20,0x59,0xf6,0x51,0x72,0xee,0xa0,0x1d,0xf0,0x26,0x04,0x1e,0x48,0x02,0x60,0x28,0x02,0xad,0x44,0x81,0x61,0xa0 -,0x48,0x2a,0x14,0x23,0x05,0x04,0x41,0x41,0xa8,0x50,0x42,0x14,0x09,0x85,0x42,0x30,0x5e,0xf9,0xce,0xb3,0xa7,0x7a,0xa9,0x5c,0x73,0x55,0x75,0x25,0x5d,0xdc,0xcb,0x9f -,0x7e,0x3f,0x7f,0xeb,0x7d,0xf5,0xed,0xdd,0x75,0xfe,0x90,0x39,0xf1,0x6f,0xdc,0xed,0xf5,0x5b,0xc4,0x7a,0x37,0x37,0x43,0x90,0xee,0xd5,0x33,0xe7,0x3a,0xe6,0x97,0xa2 -,0x05,0x3d,0x3f,0x2f,0x4c,0xab,0x6f,0x3f,0xdb,0xba,0x11,0xaf,0xed,0xcd,0x34,0xde,0x48,0xf5,0xf3,0x6b,0x1c,0x7e,0x24,0x34,0x34,0x92,0xaf,0x0a,0xe4,0x95,0xbc,0x71 -,0xf6,0x56,0x29,0x5e,0x42,0x6a,0x56,0x80,0x08,0xf1,0x40,0xac,0x3d,0x05,0x6f,0x49,0xea,0x2a,0xa7,0x44,0xab,0x5b,0x00,0x05,0xab,0x70,0x00,0x4c,0x80,0x98,0x05,0xc0 -,0x54,0x5c,0x05,0x40,0x04,0x17,0x00,0x48,0x13,0x01,0xc0,0xff,0xf1,0x50,0x80,0x27,0x3f,0xfc,0x21,0x0a,0xcf,0x3f,0x5e,0xff,0xff,0xfc,0xb4,0x61,0xa0,0x58,0x2a,0x14 -,0x0a,0x85,0x02,0x41,0x30,0x90,0x4c,0x24,0x33,0x0a,0x05,0x42,0x82,0x21,0x88,0x48,0x22,0xb3,0x08,0x94,0x26,0x79,0xd7,0x71,0x75,0x97,0x9d,0x73,0x9a,0xad,0x6f,0x49 -,0x56,0x4c,0x8b,0xc7,0xb7,0x36,0xfe,0x78,0x05,0xfa,0xd7,0xcf,0x84,0xbf,0x19,0xd2,0x5f,0x93,0xa9,0xee,0x73,0x1e,0x5e,0x46,0x79,0xa9,0xaf,0x90,0xf6,0xd5,0x9a,0x5c -,0x3e,0x9e,0x23,0x6d,0x9f,0xdc,0xfd,0x93,0x9d,0x17,0x32,0xdc,0x95,0xcd,0x33,0x91,0x4a,0x78,0xd3,0x9b,0xbb,0x89,0x4a,0x67,0x1f,0x83,0x66,0xb2,0xaa,0x10,0x73,0x45 -,0xfb,0x51,0x48,0x4d,0xa9,0x49,0x88,0x77,0x92,0x2d,0xa8,0x90,0x13,0xb5,0xee,0x99,0x79,0x82,0xec,0x5a,0x2a,0x05,0x3b,0x00,0x86,0x88,0x88,0x22,0x94,0x2f,0x60,0xef -,0x40,0x04,0xa0,0x11,0x05,0x55,0x2a,0xb8,0x01,0xb6,0x90,0x02,0x70,0x82,0x81,0x60,0xa0,0xd4,0x26,0x12,0x0a,0x05,0x42,0xc1,0x40,0xb0,0x50,0x4a,0x14,0x1a,0x84,0x86 -,0x81,0x10,0xa8,0x44,0x26,0x31,0x21,0x88,0x4c,0xfe,0xce,0x75,0x53,0xeb,0xd5,0x37,0xd7,0x3c,0x6f,0x5b,0x35,0x52,0xb8,0xce,0xaa,0x75,0x5f,0x8b,0x7f,0x4e,0x93,0xf7 -,0xaf,0xb7,0xb7,0x91,0x6f,0x6e,0xdc,0x3f,0x9f,0xff,0xeb,0xa3,0x5e,0xef,0xd7,0xf3,0xf7,0x1f,0x15,0x54,0xe0,0xfa,0x7f,0x29,0xa7,0xff,0xa0,0x75,0xe3,0x2b,0xe9,0x3c -,0x96,0x3a,0x1a,0x7f,0x60,0xae,0x5b,0x9a,0xef,0xbc,0x59,0x60,0xd6,0xe0,0xe9,0x76,0x4f,0x8c,0xf8,0xc5,0x8a,0xea,0x10,0x50,0xbe,0x05,0xac,0x1e,0x5e,0x91,0x4f,0x9c -,0xc3,0x98,0x3c,0x66,0xd4,0xf0,0xc8,0x0f,0x5f,0x66,0xce,0xf8,0x0e,0xf0,0x40,0x48,0x04,0x40,0x01,0x9e,0xa1,0x20,0x0f,0x5c,0x03,0xba,0x88,0x11,0x00,0x13,0x10,0x17 -,0x01,0x31,0x50,0x1c,0xff,0xf1,0x50,0x80,0x27,0x7f,0xfc,0x21,0x0a,0xcf,0x6f,0xf2,0xff,0xfe,0xfe,0xb4,0x70,0xb0,0x90,0x2c,0x25,0x09,0x05,0x0a,0xa1,0x20,0xa0,0x94 -,0x44,0x14,0x09,0x85,0x42,0x41,0x30,0x8c,0x95,0x23,0x3e,0xb9,0xe6,0xe5,0xe4,0xbf,0x1a,0x99,0xa9,0x55,0x71,0x6a,0x8b,0x67,0xd7,0xba,0xfd,0xbb,0x9f,0x5f,0x01,0xe4 -,0xea,0xb0,0x79,0x7c,0xbf,0x4e,0xaf,0xaa,0xf6,0xbd,0xbb,0x1d,0x11,0xce,0x8c,0xec,0x0c,0xf9,0x35,0xba,0x0e,0x7d,0xc5,0xb8,0x79,0x2d,0xf2,0xae,0x83,0x92,0x3f,0x0f -,0x16,0xd4,0xea,0x9e,0xcc,0xdf,0xb3,0xc3,0x9b,0x8e,0x38,0xe8,0xb4,0x95,0xea,0xb9,0x7a,0xbe,0x04,0x1a,0x1a,0xe7,0x4a,0xdd,0xc4,0xba,0x7f,0x84,0xcb,0x8d,0x0a,0xd0 -,0x85,0x01,0xf9,0x38,0xc6,0x80,0x10,0x9c,0x40,0x68,0x94,0xe5,0xb6,0xf0,0xa8,0x05,0x44,0xc3,0xf2,0x89,0xf2,0x00,0x5a,0xe1,0x50,0x89,0x52,0xa9,0xa6,0x04,0xc0,0xec -,0x02,0xa1,0x42,0x41,0x40,0xb0,0x90,0x2c,0x12,0x0a,0x85,0x02,0xa1,0x31,0x20,0x54,0x28,0x12,0x0a,0x10,0x82,0xa1,0x40,0x90,0x44,0x26,0x11,0x09,0x84,0x44,0x61,0x15 -,0xb5,0xcf,0xdb,0xcd,0x6f,0xfc,0x7c,0xce,0x67,0x5e,0x38,0xf1,0xac,0xab,0x5c,0xbc,0xbd,0x57,0x5d,0x2b,0xad,0xfe,0xda,0xff,0x1f,0xd7,0xe2,0xe6,0x68,0x3e,0x7b,0xff -,0x9b,0xc7,0xab,0xdb,0x77,0x33,0x1e,0x5e,0x3c,0x9d,0xc7,0xc9,0x15,0x5f,0xe3,0x7f,0xc2,0xaf,0x30,0x87,0xce,0x21,0xfe,0xae,0x7b,0xe5,0x67,0xd2,0xaf,0x77,0x7d,0x10 -,0x8f,0x95,0xdb,0xdc,0xaf,0x5f,0x6b,0x47,0xd7,0x17,0x76,0x4c,0x79,0xc4,0xd5,0x6c,0xf8,0x2c,0x27,0xd3,0x9d,0x27,0x80,0xde,0x93,0x5d,0x96,0x52,0x5d,0xe8,0x2b,0x3d -,0xd4,0xb0,0xf3,0x41,0x55,0x80,0x26,0x5c,0xf7,0x40,0x40,0x05,0x80,0x46,0xe5,0xdd,0xc5,0x0c,0x40,0x2b,0x68,0x82,0x68,0x80,0x15,0x09,0x80,0x0a,0x0a,0x00,0xe0,0xff -,0xf1,0x50,0x80,0x28,0xbf,0xfc,0x21,0x0a,0xcf,0xef,0xf7,0xff,0xff,0xfc,0xb3,0x50,0xa0,0x8c,0x2c,0x17,0x0a,0x09,0x42,0xc1,0x42,0x28,0x90,0x64,0x24,0x11,0x85,0x42 -,0x27,0x30,0x8a,0x95,0x93,0xaf,0x1f,0x1d,0xdf,0x33,0xaa,0xdc,0xa8,0xbb,0xca,0x89,0x2e,0x8e,0x33,0xdb,0xdf,0x59,0x72,0x5e,0x7c,0x68,0x3c,0xff,0x1d,0xf4,0x2f,0xcc -,0xea,0xf7,0x7a,0x97,0x57,0xc1,0xf4,0x37,0x29,0x0e,0x6d,0xe3,0xab,0xb3,0xc3,0xad,0x4c,0xeb,0x6f,0xcf,0xc5,0x48,0xf8,0xd8,0x7f,0xb1,0xbe,0xd5,0x0a,0x90,0xba,0x27 -,0x91,0x3c,0xc5,0x46,0x2d,0xf8,0x14,0x2b,0xce,0x5f,0x16,0xd4,0xba,0x8f,0x16,0xe1,0x71,0x8a,0xac,0xda,0x56,0xaf,0xa5,0x14,0x08,0x70,0xbb,0x42,0xa4,0x03,0x3f,0x32 -,0x07,0x61,0x65,0xe5,0x50,0x58,0x0e,0xe4,0x96,0x5c,0x26,0x44,0x09,0xa2,0x2c,0x88,0x2c,0x24,0x4d,0x10,0x48,0x0e,0xc5,0xcb,0x0a,0x81,0x70,0x15,0x6a,0x22,0x0a,0x0d -,0x84,0x81,0x60,0xb8,0x58,0x2a,0x24,0x1b,0x05,0x42,0x81,0x51,0x20,0x4c,0x44,0x13,0x08,0x84,0xc4,0x22,0x30,0x88,0xcc,0x22,0x33,0x08,0x88,0xfa,0xfd,0xb5,0x37,0xf8 -,0xf1,0x97,0x92,0xb8,0xf9,0xe3,0x2e,0x12,0xf3,0x3c,0xa5,0x1e,0x7b,0x8e,0xbb,0xfa,0xf9,0xeb,0x8e,0x03,0xa3,0xcd,0x9b,0xe0,0xdf,0x8b,0xe8,0x6d,0xec,0xdf,0x47,0x76 -,0x7c,0xbc,0x62,0x90,0xb9,0x2f,0x14,0x74,0xfa,0xe7,0x4b,0x37,0xbf,0xb0,0xfe,0xfb,0xfe,0x88,0x26,0xa8,0x17,0x92,0x7a,0x91,0xd2,0xcd,0xdf,0x1b,0x6e,0xbb,0xf0,0xdc -,0xba,0xd1,0x7c,0xcc,0xfe,0x6b,0xd0,0xc9,0xe9,0xec,0xfb,0xfa,0xed,0x04,0x7b,0x9c,0x27,0x05,0xa5,0x7d,0x81,0xf9,0xbe,0xe4,0xdc,0xd4,0x45,0x57,0xf2,0x26,0xbb,0xda -,0x7b,0x08,0x06,0xea,0x36,0x24,0x17,0xb7,0xaa,0x33,0x7a,0xe0,0x1a,0xc5,0x5a,0x49,0x49,0xb6,0x01,0x5a,0x56,0x67,0x7f,0xba,0x09,0x89,0x40,0x58,0x00,0x3a,0x81,0xeb -,0x17,0x00,0x98,0x1c,0xff,0xf1,0x50,0x80,0x25,0xdf,0xfc,0x21,0x0a,0xcf,0xeb,0x7e,0xff,0xff,0xff,0xb1,0x61,0x20,0x54,0x2c,0x25,0x1b,0x06,0x02,0x85,0x21,0x20,0x48 -,0xc2,0xf3,0x08,0x89,0xd9,0xd7,0x3c,0x6f,0x59,0x89,0xad,0xea,0x85,0x84,0xb8,0xcd,0x46,0x5e,0x56,0xa5,0x75,0xf5,0x05,0xbd,0x7f,0xd2,0x7c,0x95,0xef,0x2f,0x77,0xa9 -,0x1c,0x9d,0x1d,0x82,0xfc,0xe8,0x82,0x13,0xf3,0x41,0x3c,0x2f,0x5f,0xdc,0xcd,0x4b,0xed,0x9b,0x3c,0xd7,0xfb,0x72,0xc5,0x5e,0x79,0xd6,0x9c,0x2b,0x23,0xb4,0x99,0xe2 -,0xfa,0x4d,0xb0,0x78,0x12,0xa8,0x35,0x2e,0x9d,0xc4,0xa2,0xc6,0xec,0x77,0xc4,0xef,0x05,0x5c,0x3a,0x10,0x3b,0xc1,0x30,0x8c,0x21,0x42,0xb2,0xb4,0xd7,0x19,0xd0,0x00 -,0x33,0xcc,0x9a,0x0b,0x26,0x17,0x82,0x14,0xb1,0x14,0xa1,0x09,0x81,0x70,0xb4,0x13,0x0b,0x84,0xc5,0xcf,0x5c,0x00,0x92,0xf2,0xb8,0x15,0x2a,0x14,0x12,0x85,0x02,0xa1 -,0x70,0xa0,0xdc,0x2a,0x14,0x11,0x05,0x82,0x84,0x20,0xa9,0x4c,0x2e,0x13,0x10,0x88,0xc4,0x29,0x65,0x53,0x2b,0x8d,0x4e,0xea,0xee,0x78,0xba,0xba,0x89,0x74,0xe2,0xe9 -,0xed,0xea,0x4e,0x5f,0x59,0xba,0xf8,0xc0,0x74,0xf6,0x3c,0x85,0xf5,0x7d,0xcb,0xf2,0x3b,0x1e,0x57,0xb4,0xfe,0x87,0xb5,0xb5,0xfc,0x15,0x92,0x7b,0x29,0x3e,0xcf,0x86 -,0x84,0xed,0x63,0x11,0xf7,0x1d,0xcb,0xd3,0x06,0xe8,0x67,0x5b,0xe2,0x25,0x3b,0xa4,0xfd,0xe9,0x87,0x4f,0x3e,0x62,0x6e,0x9a,0x8d,0x79,0xb8,0xa9,0x8a,0x84,0x79,0xe0 -,0xe3,0x03,0x93,0x90,0x47,0x65,0x2c,0xda,0x67,0xee,0xc4,0x1e,0x68,0x01,0xe3,0x07,0x70,0xbf,0xf8,0x80,0x4c,0x54,0x2d,0x72,0x08,0x97,0x3d,0xd1,0xee,0xdf,0xd7,0x2e -,0x27,0x35,0xeb,0x04,0xec,0x15,0x02,0x00,0x11,0xa0,0x2c,0x24,0x01,0x40,0x40,0x17,0x03,0x80,0xff,0xf1,0x50,0x80,0x27,0x9f,0xfc,0x21,0x0a,0xcf,0x6f,0x7b,0xbf,0xff -,0xff,0xb0,0x40,0xb0,0x88,0x2c,0x17,0x0a,0x85,0x04,0xc1,0x70,0xa8,0x5c,0x28,0x35,0x0a,0x15,0x42,0x41,0x30,0x90,0x46,0x2e,0xe5,0xf9,0xfb,0x7d,0xf7,0xcf,0xb7,0xba -,0xe5,0xf3,0x2d,0x29,0xaa,0x95,0x66,0x98,0x93,0xbd,0x71,0xbb,0x9f,0x8e,0x87,0x8d,0x36,0x97,0xe3,0xa6,0x8e,0xfe,0xdc,0xee,0xf1,0xba,0x8a,0x7d,0x1e,0xd5,0x56,0x7c -,0x8f,0x81,0xe3,0x46,0x7b,0xfe,0x3b,0x47,0xff,0x66,0x9e,0x6c,0x6c,0x9c,0x66,0xcd,0xcf,0xdf,0x5e,0xb3,0x5d,0xfb,0xbc,0xfa,0xaf,0x8e,0xa6,0x6e,0xc1,0xdb,0x82,0x1a -,0x4a,0x0c,0x8b,0x3e,0x3f,0x88,0x82,0x54,0x13,0x22,0xca,0xbe,0xfd,0xb3,0xe9,0x5e,0x11,0x60,0x95,0xca,0x32,0x4b,0x98,0x16,0xa9,0x0a,0x19,0x0b,0x81,0x35,0x17,0xb1 -,0x42,0x40,0x95,0x12,0x98,0xac,0xaa,0x94,0x88,0x80,0x5f,0x51,0x14,0x05,0x0c,0x21,0x28,0xab,0x00,0x13,0x04,0x40,0xab,0x50,0xa0,0x98,0x28,0x26,0x0a,0x89,0x02,0xe1 -,0x44,0x30,0x50,0x2a,0x14,0x09,0x0c,0xc4,0x21,0x30,0x89,0x8c,0x22,0x13,0x08,0x91,0x39,0xdc,0xd7,0x3f,0x1c,0xfb,0x7b,0xd5,0xa7,0x32,0xe9,0xac,0xb9,0x53,0x5d,0x75 -,0xdf,0x70,0xaf,0x8a,0xf8,0xe6,0x6b,0x9e,0x03,0x8e,0xc7,0xd0,0xad,0xf3,0xff,0xbb,0xf8,0x47,0xd8,0xf2,0xe9,0x7e,0x97,0xb7,0xb3,0xa5,0xee,0x1b,0xfb,0x77,0xd8,0x26 -,0x6b,0xa8,0xfb,0x37,0x71,0xb6,0x74,0x7e,0x6c,0xb0,0x83,0x9c,0x35,0x01,0xb7,0x81,0xa4,0x5a,0x07,0xfa,0x7e,0x78,0xe6,0xdc,0x0c,0xfb,0xd5,0xaf,0xd0,0xf8,0x76,0xfe -,0xd8,0xd8,0x23,0x49,0xe8,0x63,0x18,0xac,0xbf,0x7f,0x8c,0x7e,0xd4,0x05,0x84,0x8f,0x71,0xa8,0x05,0x73,0x8e,0x67,0x68,0x09,0x55,0x49,0x22,0x2c,0xbe,0x90,0x08,0x1d -,0xe4,0x00,0x3d,0x71,0x50,0x07,0x78,0x14,0x00,0x02,0xd2,0x01,0x40,0x1c,0xff,0xf1,0x50,0x80,0x28,0x5f,0xfc,0x21,0x0a,0xcf,0xeb,0xf7,0x7f,0xff,0xfd,0xb5,0x50,0xb8 -,0x58,0x26,0x16,0x11,0x05,0x44,0x81,0x60,0xa0,0x5c,0x28,0x12,0x0b,0x05,0x02,0x41,0x40,0x90,0x54,0x24,0x21,0x09,0x04,0x64,0x24,0xcf,0xaf,0x5a,0xf3,0xf6,0xba,0x9d -,0x7a,0xd2,0x3e,0x3d,0xe4,0x95,0x22,0xd5,0x2a,0x6a,0xae,0xb3,0xee,0xf6,0x0f,0x6f,0x72,0x8d,0x5f,0x9c,0xa3,0x96,0xd2,0xe7,0x7a,0xbd,0xaf,0xa1,0xfa,0xc9,0x8e,0x7e -,0x8e,0x79,0x63,0xa5,0x4d,0xb0,0xbd,0xf4,0x1a,0x72,0x66,0x7d,0x0b,0xe5,0xbe,0x44,0xbd,0xf2,0xd9,0xc1,0x4b,0x45,0xd1,0x7c,0x36,0xfc,0xac,0x4f,0xb7,0x56,0xa0,0xc7 -,0xe2,0x2a,0xfe,0xce,0x51,0x56,0xf1,0x92,0xbe,0xb5,0xb8,0xa5,0x48,0xe1,0x9a,0xd4,0xe8,0x84,0xb4,0x4c,0x66,0x52,0x02,0x37,0x17,0x34,0x25,0x03,0xf2,0x26,0x4a,0x84 -,0x01,0x5c,0x85,0xc2,0x40,0x91,0xc5,0x50,0x54,0xc4,0x88,0x88,0x30,0x05,0xc0,0x41,0x50,0x98,0x14,0x44,0x15,0x0a,0x05,0x84,0xe1,0x50,0xa0,0x54,0x4e,0x15,0x0a,0x05 -,0x42,0x41,0x41,0x28,0x50,0x2c,0x14,0x11,0x0d,0x42,0x61,0x50,0x98,0x84,0x26,0x11,0x09,0x84,0x52,0xf9,0xdd,0x55,0xe7,0xb6,0x4d,0xa5,0x4e,0x6e,0x29,0x2c,0xe2,0x6a -,0x6d,0xad,0xf1,0xaf,0x13,0xef,0xf6,0x9e,0xd9,0xf7,0x10,0xf7,0xb7,0x6e,0x67,0xc4,0xfb,0x73,0xe8,0xe0,0x3a,0x9d,0x4f,0x50,0xaa,0xe6,0xe7,0xc8,0x86,0xa7,0xf5,0xca -,0xb8,0xfd,0x3b,0xaf,0x9c,0xf6,0x9b,0x1f,0x4a,0x39,0xb8,0x9a,0x67,0xc3,0x68,0xc7,0x68,0xaa,0x5f,0x2f,0xb3,0x86,0xa6,0x8b,0x47,0xc7,0x5d,0x8f,0xbf,0x21,0x9b,0x2f -,0x8b,0xed,0x04,0xe2,0x38,0x4a,0xc4,0x09,0xfe,0xc8,0x5b,0xc4,0x05,0xf7,0x47,0xba,0x2d,0xdc,0x3b,0xe4,0x59,0x24,0x48,0x77,0x51,0x05,0x27,0x55,0xc1,0xdc,0x90,0x02 -,0x37,0x12,0x91,0x01,0x61,0x50,0x58,0x8d,0x80,0x21,0x40,0x68,0x04,0x40,0x2e,0x07,0xff,0xf1,0x50,0x80,0x27,0x7f,0xfc,0x21,0x0a,0xcf,0xaf,0xf7,0xdd,0xff,0xff,0xb0 -,0x50,0xa0,0x98,0x4e,0x12,0x0b,0x0d,0x42,0x83,0x50,0xb0,0x4c,0x28,0x13,0x09,0x05,0x42,0x81,0x50,0x8d,0x1c,0xd4,0x6f,0xe2,0xae,0xb9,0xd4,0xcd,0x73,0xd7,0x31,0xad -,0xcb,0x2d,0x28,0xad,0x12,0x2b,0x5f,0x5f,0x01,0xf2,0xff,0x2f,0xf9,0xdf,0x8f,0x13,0xef,0x5e,0xa7,0xc7,0x88,0xb7,0x2f,0xc9,0xbd,0x35,0xc5,0x85,0x73,0x3e,0xba,0x4e -,0xf4,0xae,0xe2,0x46,0xfc,0x3b,0x1e,0x11,0xbf,0x9e,0xa5,0x11,0xfb,0xa6,0x8e,0xb9,0xa1,0x1e,0xa6,0xf0,0x73,0x72,0x0d,0xbc,0x2e,0x8d,0xa8,0xfe,0x8e,0x5e,0xd8,0xc0 -,0x33,0x2d,0x25,0xeb,0x7b,0x10,0xda,0x40,0xad,0xd2,0xa1,0x1d,0xa8,0x09,0x46,0xd3,0x5a,0x22,0x35,0x12,0x40,0x29,0x50,0x67,0x54,0x14,0x8a,0x25,0x88,0x50,0xc8,0x0b -,0x10,0x09,0x4e,0xc1,0x29,0x8e,0x40,0x0a,0x06,0x30,0x2a,0x50,0x8a,0x17,0x0b,0x04,0x82,0x81,0x61,0x20,0x98,0x48,0x16,0x0a,0x09,0x82,0x83,0x22,0x08,0x54,0x26,0x11 -,0x09,0x88,0x4a,0x61,0x12,0x37,0x4a,0xd7,0x7d,0x4e,0x3d,0x56,0xab,0xaf,0x17,0x59,0x75,0x24,0x2e,0xfc,0xef,0x34,0xdc,0x5f,0x59,0xbf,0x8c,0xe8,0x6f,0x7c,0x0e,0x9f -,0xd5,0x2f,0xb7,0xb6,0x3f,0x6e,0x4f,0x1a,0xde,0x7d,0x54,0x98,0x7d,0xb7,0x4a,0x7d,0x5d,0x5d,0x86,0x48,0x8f,0x67,0x2f,0xc5,0x1d,0x20,0xa7,0x5e,0xa2,0xf7,0xae,0xe8 -,0xd0,0xea,0x68,0xf4,0x28,0x78,0x6f,0xdc,0x48,0x78,0x8e,0x81,0x4e,0x2f,0x5f,0xaa,0x65,0x3b,0xd2,0xe9,0xbd,0x7a,0xa3,0x52,0xd4,0x9c,0x0d,0xa7,0x5b,0x12,0xc1,0x5e -,0xa5,0x5f,0x6d,0x29,0x10,0x39,0x8e,0x61,0xc1,0x7e,0xed,0xd2,0x12,0x9c,0x92,0x29,0x30,0x77,0x42,0x8f,0xb5,0x0b,0x42,0xe0,0x4e,0x8a,0xa9,0x45,0x02,0xf2,0xa0,0x40 -,0x04,0xde,0xe0,0x39,0x96,0x01,0x50,0x08,0x84,0x40,0xe0,0xff,0xf1,0x50,0x80,0x28,0x3f,0xfc,0x21,0x0a,0xcf,0xeb,0xf4,0x7f,0xff,0xfc,0xad,0x60,0xb8,0x50,0x2c,0x35 -,0x0a,0x05,0x42,0x82,0x60,0xa0,0x88,0x2c,0x14,0x13,0x05,0x02,0x41,0x51,0x90,0x54,0x23,0x17,0xbc,0x99,0xc7,0xd7,0xbe,0x5d,0x2a,0x4a,0xd5,0x66,0x96,0x6f,0xcf,0x3a -,0xd6,0xee,0xaa,0x56,0xab,0x8c,0x57,0xe3,0xc8,0x2f,0xeb,0xd6,0x7e,0x70,0x79,0x27,0xeb,0xde,0xce,0x9f,0xa3,0x78,0x38,0x8f,0xd6,0x35,0x51,0x22,0xf0,0x1d,0xf6,0x1e -,0xb5,0x35,0x7f,0x8a,0xb4,0x30,0x5b,0xbf,0x49,0xcb,0xff,0xec,0xe0,0x93,0x23,0x05,0xef,0x6e,0xaa,0x96,0xeb,0x3e,0x6c,0x4c,0x8a,0x45,0xad,0xdb,0x28,0x9a,0x0e,0xd4 -,0xbe,0x24,0xe4,0xe4,0x46,0xc4,0xa0,0xd5,0xd3,0x15,0xd8,0x2e,0xd3,0x20,0x84,0xb9,0x1c,0xc2,0xf4,0x96,0x78,0x00,0x5d,0x6d,0x82,0x91,0x55,0x05,0x23,0x20,0x48,0x85 -,0x2a,0x11,0xb2,0xc1,0x65,0x88,0x04,0xae,0x92,0x11,0x08,0x85,0x52,0xe6,0x02,0xa0,0x1b,0x80,0xa9,0x60,0xa8,0x50,0x2c,0x25,0x0b,0x85,0x04,0xa1,0x60,0xa0,0x58,0x48 -,0x56,0x09,0x05,0x42,0x82,0x21,0x28,0x4c,0x82,0x23,0x08,0x84,0xc2,0x27,0x37,0xbb,0x67,0x9c,0xbe,0x6b,0x86,0xc4,0x5a,0x2b,0x55,0xc5,0x9b,0x9d,0x78,0xe3,0x88,0xe3 -,0xae,0x7a,0x09,0xcf,0xe0,0xd5,0x9b,0xed,0xd0,0x5e,0xa3,0xb2,0xf2,0xb5,0x5f,0x37,0x41,0x3b,0xf4,0x07,0xfe,0x13,0xdc,0x1a,0xf7,0x9a,0x37,0x33,0xd8,0xf8,0xf0,0x8e -,0x77,0xc8,0x4c,0xfc,0x4f,0x77,0x31,0xc4,0x4a,0x15,0xe5,0xdd,0x6a,0x1f,0xef,0x12,0x79,0x4b,0xb5,0x34,0xe1,0xf5,0xd2,0x8b,0xb4,0xa9,0x5f,0x22,0x7c,0x77,0xf2,0xf3 -,0x45,0xe6,0x89,0x0c,0x32,0x29,0xc6,0x64,0xff,0xea,0x44,0x0f,0x15,0xb6,0xab,0xc4,0x02,0xde,0x84,0x09,0xd0,0x84,0x83,0xb9,0x37,0x74,0x00,0xcb,0x79,0xae,0x3b,0x97 -,0x02,0xc0,0x0a,0x14,0x54,0x08,0x80,0x05,0x41,0x01,0x20,0x1c,0xff,0xf1,0x50,0x80,0x28,0xbf,0xfc,0x21,0x0a,0xcf,0xed,0x7d,0x7f,0xff,0xdd,0xb3,0x41,0xb0,0x60,0x2e -,0x14,0x12,0x85,0x02,0xc1,0x50,0xb0,0x50,0x26,0x16,0x0a,0x05,0x82,0xa1,0x60,0xa0,0x48,0x62,0x23,0x08,0xc1,0x57,0x9f,0x1f,0x9f,0xbf,0x8e,0xbe,0xff,0xd5,0x57,0xad -,0xf1,0x55,0x5c,0x65,0xa4,0x95,0xd7,0x30,0x25,0xf3,0xd2,0xfc,0xfd,0x0f,0x9c,0xfe,0xbb,0xfc,0x5b,0xf9,0xa1,0xaa,0xef,0xe7,0x88,0xf0,0xbf,0x16,0xba,0xd2,0xe6,0x76 -,0xf3,0xea,0x4e,0x7d,0xd4,0x6e,0xa7,0x9e,0x3b,0xf1,0x32,0xe8,0xad,0x32,0xa1,0x86,0xbf,0xaa,0x17,0x76,0x9c,0x84,0x8c,0x54,0xbf,0x1f,0x35,0x0d,0xd5,0xe0,0xd0,0xb9 -,0xc8,0x97,0x38,0xa3,0x67,0x35,0xe8,0x8d,0x61,0x77,0xaf,0x27,0x0d,0xe3,0x4a,0xd9,0x09,0xca,0x77,0x17,0x99,0x72,0x0b,0x0e,0xc1,0x14,0x08,0x96,0x81,0x10,0xa1,0x0a -,0x31,0x04,0x45,0x86,0x02,0xf1,0x00,0x16,0xbb,0x90,0x04,0x42,0x50,0x58,0x00,0xb1,0x10,0x15,0x2a,0x14,0x0a,0x85,0x02,0xe2,0x61,0x20,0x4c,0x2a,0x16,0x0a,0x05,0x42 -,0x81,0x60,0xa0,0x98,0x48,0x12,0x12,0x04,0x82,0x21,0x31,0x0b,0xd5,0xbc,0xfa,0xf7,0xae,0xb2,0x96,0x95,0xce,0x85,0xd5,0xa2,0xf5,0x53,0x15,0x69,0xc2,0xbc,0xab,0xd8 -,0x3a,0xb6,0x67,0xd7,0xf4,0x77,0x61,0xe6,0x17,0x7b,0x6e,0xf8,0xcf,0xf8,0x7d,0x76,0xe3,0xcd,0x5a,0xe1,0x3f,0x6f,0xfa,0x70,0x8f,0x83,0xdf,0xb3,0x64,0x5a,0x43,0x8e -,0xc9,0xf9,0x7f,0x7f,0x9c,0x94,0x09,0x99,0x87,0x54,0xa9,0x42,0x3f,0x46,0xee,0xde,0xc6,0xe9,0xfb,0x6e,0x25,0xe7,0x38,0x8a,0x1c,0x1e,0x8b,0xd7,0xba,0xad,0x5c,0x1d -,0xb8,0xb5,0x68,0x87,0x1f,0x70,0xfe,0x14,0xc3,0x5a,0xf5,0x11,0xee,0x45,0x25,0xe6,0xb5,0xe9,0x2d,0x56,0x9f,0xd4,0x06,0x3b,0x28,0x2a,0x8b,0x4d,0xae,0x8b,0x65,0x2f -,0x1a,0xd9,0x4a,0xd2,0x40,0xad,0x11,0x05,0x40,0x2d,0x42,0x00,0x88,0x00,0x44,0x50,0x0e,0xff,0xf1,0x50,0x80,0x27,0x5f,0xfc,0x21,0x2a,0xcf,0xbd,0xfb,0xbf,0xff,0xa7 -,0xb1,0x61,0xa0,0x98,0x28,0x26,0x09,0x05,0x42,0x61,0x60,0x90,0x4c,0x28,0x42,0x30,0x94,0xc2,0x2c,0x73,0xf1,0xce,0xbd,0x5d,0xdf,0x9e,0xeb,0x38,0x6d,0xac,0x25,0xab -,0x41,0xe7,0x7e,0xdf,0x3e,0xd6,0xe7,0xad,0x7b,0xff,0x9e,0x83,0x71,0xfc,0xdb,0xce,0x8d,0x63,0xfe,0x4a,0x7e,0xbf,0x30,0xfa,0x06,0xa3,0xf1,0xe7,0xe2,0xa7,0xe7,0x8a -,0x9f,0x0a,0x13,0xf5,0xf9,0xfa,0xf8,0x7e,0x77,0x62,0x0a,0xe2,0x79,0x7a,0x38,0xf4,0x6f,0x05,0x7a,0x43,0xf7,0x67,0x52,0x7a,0x16,0x77,0x6b,0xba,0xf5,0xa6,0x77,0x16 -,0x8d,0x0e,0xdd,0x09,0x46,0x88,0xff,0xf4,0x46,0xfa,0xc9,0x6e,0x6a,0x70,0xa5,0xef,0x14,0x79,0x40,0x38,0x00,0xef,0xc0,0x45,0x31,0x22,0xb7,0x51,0x54,0x40,0x99,0x20 -,0x16,0x00,0xb0,0x2e,0xaa,0xc0,0x54,0x06,0xa4,0x40,0x14,0x08,0x81,0x58,0x82,0x62,0x28,0x58,0x48,0x15,0x0b,0x04,0x82,0x81,0x50,0xa0,0x98,0x48,0x32,0x0a,0x84,0x84 -,0x61,0x12,0x18,0x44,0xc6,0x11,0x21,0x97,0xcf,0xd7,0x8f,0xbf,0xca,0xd7,0xde,0xb6,0xbb,0xe5,0x71,0x2e,0x7b,0x5d,0x66,0x6a,0x55,0xfb,0xf5,0x7e,0xff,0xe9,0xaf,0x23 -,0x40,0x6d,0x0f,0xae,0xfd,0xf3,0xfa,0x3e,0x37,0xbd,0x9a,0x6f,0xd2,0x7f,0xe8,0xeb,0x47,0xc3,0xc0,0x96,0x3c,0x21,0xdc,0x3d,0x1c,0xbb,0x5e,0x8f,0x8d,0xd8,0xec,0xa9 -,0x51,0xc2,0xef,0xdd,0x7d,0xb0,0xe1,0xbe,0x74,0xbc,0xa7,0xc0,0xfe,0xab,0x57,0xaf,0xa8,0x0b,0x1e,0x3a,0xb8,0x5c,0xd5,0xe1,0xd0,0xbe,0x4d,0x12,0x8f,0x08,0x93,0x12 -,0xd7,0x45,0x86,0x77,0xd5,0x61,0xfe,0x00,0x06,0x7d,0x05,0x89,0x68,0x42,0xc0,0x8d,0x08,0x9e,0xe0,0x4c,0xbc,0xe0,0x11,0x42,0xc0,0x98,0x27,0x70,0x5b,0x05,0x20,0xaa -,0xc4,0xc7,0x70,0x00,0x8a,0xd4,0x4c,0x00,0x22,0x5c,0x0e,0xff,0xf1,0x50,0x80,0x29,0x5f,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x6c,0x16,0x6a,0x50,0x99,0x52,0x64,0x5b,0x88 -,0xb4,0x89,0x7a,0x09,0x49,0x26,0xe9,0x73,0x5f,0xfc,0x6a,0x7b,0x4a,0xed,0x7b,0x1b,0x4e,0x66,0x1a,0x9a,0x67,0x66,0xa0,0xed,0x9a,0x96,0xcb,0x65,0x95,0xde,0xd5,0x31 -,0x0b,0x32,0x12,0xbb,0x65,0xed,0xc4,0x4a,0x91,0x19,0xf1,0x40,0xb4,0xcb,0x5e,0x03,0x57,0x66,0x15,0xc6,0xa5,0xc6,0xed,0xe1,0x8e,0x1e,0x7e,0x6d,0x72,0x19,0x56,0x51 -,0xbc,0x29,0x33,0x63,0xf1,0xed,0x1d,0xfd,0x53,0x61,0xa2,0xaa,0xce,0x32,0x85,0xf8,0x5f,0xcd,0xfa,0x7f,0xdc,0xdf,0x89,0xa8,0x58,0x6c,0x00,0xb4,0x17,0x0a,0xc5,0xfd -,0x20,0xa9,0x78,0x22,0x80,0x4b,0xfb,0x87,0x23,0x43,0x2b,0xf4,0xa1,0x9d,0x11,0xa6,0x28,0xc8,0x97,0x2e,0x5b,0x61,0x4e,0x80,0x11,0x8c,0x80,0x8c,0x2f,0x0c,0x14,0x00 -,0x44,0x44,0x20,0x26,0x73,0x10,0xa9,0x47,0x05,0xaa,0x94,0x44,0x45,0x2d,0x92,0xec,0x97,0xa1,0x4a,0xce,0x8e,0xd2,0x2e,0x63,0x15,0x72,0xd8,0x66,0x65,0x22,0x4c,0x1e -,0xdf,0xd4,0x9f,0xab,0x23,0x4f,0x77,0x83,0xbc,0x3d,0xf1,0x17,0x4d,0x24,0xc5,0xfb,0xf6,0xf2,0xf0,0xba,0xbe,0x0d,0x66,0xc3,0xbb,0x0d,0xfe,0xed,0x18,0xeb,0xbe,0x7a -,0x76,0x73,0x78,0xdb,0x64,0x07,0xd0,0xd0,0x43,0x1e,0x07,0xd1,0x64,0x7d,0xf3,0xdf,0x7a,0xbc,0xa5,0xa6,0x24,0x30,0xa2,0x10,0x06,0x66,0x24,0x1b,0x94,0x48,0x25,0x08 -,0xa3,0x0e,0x3a,0xbd,0x22,0x46,0xe6,0xb1,0x19,0xba,0x65,0xc7,0x73,0x9a,0x75,0xf4,0xfd,0x13,0xc2,0xd6,0x4d,0x75,0x30,0x65,0x1c,0xee,0xf6,0xab,0xbc,0x54,0x5f,0x4a -,0xaa,0x6a,0x55,0xe2,0xf5,0x8a,0xe5,0x8e,0x28,0x70,0x62,0x08,0x6c,0x7b,0xbe,0x7d,0xf1,0x59,0x10,0x80,0x20,0x02,0x80,0x81,0x38,0x45,0x52,0x01,0x15,0x77,0xda,0xc5 -,0xa2,0xe4,0x50,0xe7,0x28,0x40,0xe8,0x8f,0x18,0x04,0x51,0x0c,0x62,0xa3,0x50,0xd4,0x02,0xbd,0x08,0xcc,0xe0,0xff,0xf1,0x50,0x80,0x29,0x9f,0xfc,0x21,0x6a,0xcf,0xff -,0xbb,0xff,0xff,0xfe,0xb6,0x80,0xb1,0x14,0x2c,0x14,0x11,0x05,0x42,0x83,0x20,0xa8,0x90,0x84,0x61,0x49,0x88,0x4a,0x55,0xeb,0xbf,0x35,0x57,0xa9,0xcd,0xe4,0xcd,0x62 -,0xea,0x54,0xcb,0x90,0x99,0x69,0xc4,0xc3,0xe3,0xc8,0x83,0x5d,0xdf,0x4e,0xac,0x23,0xa6,0x97,0x7f,0x5e,0xb5,0xd4,0x5b,0x67,0xa6,0x1c,0x95,0x39,0x6a,0x5d,0x3f,0xb0 -,0x89,0xf4,0xc7,0x9c,0xf1,0x3c,0xf7,0xbd,0xe3,0x7c,0x7d,0x2e,0x02,0x22,0x85,0x3e,0xbf,0x04,0x1b,0x1f,0x9b,0x27,0xae,0x3a,0x84,0xd5,0xad,0x3c,0xd4,0xc4,0x74,0x60 -,0x88,0x11,0x0c,0x1b,0xcd,0x68,0xb5,0xa4,0xab,0xa6,0x26,0x1a,0x5d,0xa9,0xbe,0xf0,0xba,0xb4,0x9c,0xb0,0x17,0x73,0x56,0x2a,0xc2,0xdd,0xcb,0xce,0xc9,0x15,0x13,0x0b -,0x71,0x85,0x49,0x0c,0xfa,0x13,0x66,0x44,0x7b,0xc0,0x00,0xee,0x97,0x28,0x0e,0x04,0x14,0x12,0x5c,0x05,0x09,0x00,0xa8,0x64,0x21,0xdc,0x2c,0x14,0x0a,0x85,0x06,0xa3 -,0x30,0xa8,0x4c,0x2a,0x23,0x08,0x84,0xc8,0x22,0x30,0x89,0x1b,0xaa,0x8a,0xeb,0x69,0x7d,0xfe,0x3d,0xea,0xa3,0x35,0x57,0x15,0xc3,0x1c,0x61,0xc6,0xf8,0xbc,0xc7,0x41 -,0xa9,0x2e,0xe5,0xb2,0xab,0xb9,0xbe,0xeb,0xfc,0xdc,0x35,0xf5,0x47,0x67,0xac,0xbe,0xd3,0xd0,0xc2,0xfe,0x69,0xc7,0xbf,0x57,0xf9,0x68,0x38,0x76,0xdc,0xf3,0xd6,0xd7 -,0xa2,0xfd,0xbf,0xd8,0x9f,0x5b,0x47,0x5f,0xcc,0xe3,0xfc,0x7f,0xb8,0xf9,0x1d,0x1f,0xbc,0x57,0x33,0xaf,0xdf,0xfa,0xdc,0x39,0x07,0x08,0xf3,0x9e,0xda,0x31,0x2f,0x2f -,0x84,0xcf,0x58,0x3b,0x9e,0x65,0xff,0x84,0x73,0xf1,0xa0,0x50,0xf3,0x50,0xaf,0x2a,0x22,0xaa,0x84,0xf1,0x2a,0xce,0x96,0x88,0x0e,0x64,0x16,0xef,0xb6,0x42,0x14,0xb2 -,0x29,0x16,0x42,0x34,0xfe,0xdb,0xe6,0x45,0x20,0x0e,0xe1,0x37,0x76,0xa1,0x68,0xaa,0x16,0x0a,0x90,0x57,0xbc,0x80,0x08,0x41,0x28,0xa5,0xe8,0x00,0xbc,0xe2,0x42,0x60 -,0x70,0xff,0xf1,0x50,0x80,0x2c,0x7f,0xfc,0x21,0x0a,0xcf,0xff,0xbf,0xf9,0xff,0xfd,0xb5,0x62,0xc0,0x90,0x24,0x15,0x0a,0x09,0x82,0x82,0x50,0x98,0x50,0x24,0x24,0x09 -,0x05,0x42,0x45,0x13,0x98,0x44,0xea,0x8e,0xbb,0x9f,0x5e,0x2a,0x2b,0x52,0x8a,0x75,0xdd,0xe2,0xea,0xca,0xbc,0xd6,0xfc,0xb2,0x9a,0xf6,0xfa,0x1a,0xea,0xee,0xe7,0xed -,0x69,0xb8,0xf4,0x11,0x69,0xb3,0x15,0xb3,0x7f,0xdd,0xff,0xe4,0xe5,0xc1,0x9e,0x99,0x17,0x36,0xab,0xd9,0xf3,0x2a,0xb3,0xf1,0x2d,0xfa,0xef,0xce,0xc7,0x8f,0x94,0xd4 -,0xa7,0x4f,0xa6,0x04,0xfc,0xad,0xae,0x5d,0x1c,0x6a,0xdd,0x02,0x75,0xf2,0x7a,0xde,0xfa,0xf8,0xad,0x2e,0xcc,0x98,0x56,0xfa,0x0e,0xc9,0x20,0xc0,0x9d,0x0c,0xb5,0x47 -,0x63,0xe1,0x7a,0xc8,0x86,0x57,0xa6,0x85,0xb8,0x51,0x53,0x56,0xc1,0x55,0xe3,0xb7,0x05,0x52,0x4e,0x2c,0x44,0xf7,0xd4,0x82,0x0d,0xb1,0xba,0xbe,0xb0,0x08,0x65,0x0d -,0xf5,0x0a,0x88,0x24,0xba,0x30,0xa0,0x8a,0x2a,0xc8,0x05,0xc2,0x80,0x29,0x88,0x2c,0x34,0x0b,0x09,0x02,0xa1,0x40,0xb0,0x90,0x6c,0x24,0x0a,0x85,0x82,0x81,0x60,0xa8 -,0x90,0x2c,0x15,0x09,0x85,0x42,0x61,0x10,0x99,0x04,0x26,0x11,0x33,0x3b,0x4d,0x73,0xfe,0x9f,0x9a,0xbe,0x65,0x04,0x12,0xf9,0x79,0x95,0x35,0xdc,0xb9,0xc7,0x3d,0x7b -,0xfd,0x73,0xc4,0x1b,0xb9,0x6e,0xec,0xa3,0xaa,0x8f,0xb9,0x55,0xd9,0xaa,0xdf,0xca,0x76,0x36,0xb4,0x4b,0xf6,0x79,0xa1,0x07,0xa7,0xd9,0x7f,0x37,0xea,0xf5,0xea,0xbb -,0x7c,0x08,0xd3,0x5a,0xaf,0xf9,0x18,0xfd,0x63,0xd0,0xec,0x73,0xe2,0xf9,0xfe,0x2e,0x33,0xee,0x83,0x89,0xb9,0x8a,0xf3,0x20,0xa2,0xd3,0xf2,0x39,0x70,0x9e,0xd9,0xbe -,0x76,0xe4,0x72,0x13,0xa7,0xf8,0x14,0x27,0x20,0xf2,0x52,0x74,0x11,0x69,0xab,0xcf,0x9b,0x90,0xa1,0xdf,0x38,0x8f,0x72,0x2b,0x90,0x38,0xa9,0xc0,0xc7,0x4f,0xfd,0xaa -,0xd4,0xa0,0xec,0x27,0xde,0x2f,0x18,0x55,0xff,0xa9,0x75,0xde,0xbf,0x78,0x3d,0x77,0xba,0x3d,0x70,0x90,0x22,0x3f,0x22,0x80,0x59,0x61,0x5a,0x07,0x52,0xc1,0x72,0xd4 -,0x02,0xe0,0xa0,0x0e,0xff,0xf1,0x50,0x80,0x2b,0x3f,0xfc,0x21,0x0a,0xcf,0xff,0x7f,0xfb,0xff,0xff,0xb5,0x62,0xb8,0x90,0xc4,0x14,0x21,0x05,0x04,0x43,0x50,0x90,0xc4 -,0xa6,0x11,0x11,0x84,0x4c,0x93,0x3d,0xbd,0x49,0xed,0x39,0xf3,0xea,0x45,0x33,0x53,0x2a,0xc9,0x57,0x72,0xaa,0xf7,0x3d,0xb9,0x95,0x5f,0x8f,0x61,0xbf,0xdb,0xca,0x4d -,0xa3,0x8f,0xbf,0xec,0xb3,0xdc,0x7a,0x97,0x97,0xb9,0x72,0xd2,0x9b,0xf7,0x88,0x55,0x5a,0xbb,0x7f,0xf3,0x75,0x31,0xd1,0x73,0xe0,0xca,0x72,0x32,0xb4,0x3a,0xa6,0xe0 -,0x67,0x95,0xe2,0xae,0xdc,0x6e,0x6b,0xbc,0x60,0xc7,0xb9,0xa9,0x12,0xc8,0xbf,0x2f,0xe1,0x2e,0x73,0x64,0x26,0x54,0x75,0xa2,0xb3,0x88,0x79,0x5b,0x02,0x2b,0x37,0x24 -,0x29,0x28,0xc3,0x65,0xa5,0x49,0x18,0x20,0xd7,0x74,0x61,0x67,0x45,0xe8,0xb1,0xb3,0x52,0x01,0x3a,0x62,0x1d,0xf7,0xb8,0x32,0xcd,0x71,0x29,0xa4,0x03,0xd6,0x90,0x5c -,0x17,0x57,0xc4,0x0c,0xc0,0x42,0x32,0x00,0x14,0x11,0x02,0x68,0x82,0xc2,0x50,0xb0,0x94,0x48,0x26,0x12,0x09,0x82,0x81,0x60,0xa0,0xd8,0x2a,0x14,0x0a,0x85,0x02,0x61 -,0x51,0x18,0x94,0x62,0x33,0x08,0x8c,0xc2,0x22,0x7e,0x9e,0x2b,0xae,0xee,0x7d,0xfd,0xf3,0x9e,0x25,0x33,0x8d,0xeb,0x2f,0x2f,0x3a,0xdf,0xb7,0x77,0x1c,0x6a,0x7e,0x7c -,0xe6,0x4f,0x67,0x42,0x7e,0x5c,0xb7,0xb7,0xf4,0x37,0x09,0x39,0xbe,0xd7,0x6e,0xc3,0xcd,0xc7,0x4d,0x29,0xe0,0x8b,0xf5,0x87,0xe3,0xda,0x74,0xcf,0x41,0xa9,0x2b,0x7f -,0xe2,0x3b,0xea,0x6b,0x9c,0x6f,0xca,0x45,0x77,0xf8,0xde,0xdd,0x9f,0xda,0x41,0x6f,0x61,0x47,0x2e,0x1c,0xc8,0x70,0xff,0x7f,0x92,0x3d,0xe7,0x97,0x99,0xcc,0xc6,0x29 -,0xf5,0x9d,0x6e,0x48,0x5e,0xf6,0x9d,0xc5,0xdd,0x1c,0x45,0x45,0x71,0x07,0x90,0x02,0xbb,0xee,0xfb,0xdc,0x09,0xcb,0xb8,0xfb,0x65,0x81,0xc9,0xe5,0x02,0x8a,0xf0,0x02 -,0xf8,0x01,0xe2,0x00,0x00,0x5a,0xea,0x58,0x4c,0x85,0xa0,0x89,0x00,0x77,0x84,0xc1,0xbe,0x85,0x07,0x40,0x8d,0x59,0xa4,0xee,0x80,0x2e,0x98,0xb0,0x1c,0xff,0xf1,0x50 -,0x80,0x2d,0xbf,0xfc,0x21,0x0a,0xcf,0xff,0xbb,0xef,0xff,0xff,0xb3,0x60,0xc0,0x5c,0x28,0x15,0x0c,0x05,0x82,0x84,0x50,0xa0,0x8c,0x28,0x16,0x0a,0x08,0x82,0x81,0x21 -,0x28,0x44,0x26,0x22,0x08,0x8c,0x82,0x22,0x30,0x8a,0x19,0x79,0xac,0x9c,0x5d,0x55,0x34,0xe6,0xb8,0xa4,0xbc,0xb9,0x42,0x1b,0xd7,0x1d,0xfb,0x6e,0x55,0xfd,0x58,0x7d -,0x10,0xe8,0x7c,0xaf,0xd6,0x7e,0xc1,0xba,0x9f,0x1e,0x7f,0xe7,0xe4,0xdc,0xd3,0xcc,0x3f,0xf6,0x0c,0x7f,0x35,0x96,0x95,0xfd,0x05,0x34,0x5d,0x10,0xdf,0x2b,0xfa,0x74 -,0xef,0x69,0x1c,0xa9,0xfd,0x61,0xe5,0xe4,0x23,0xc8,0x7b,0xaf,0x73,0x1b,0xc7,0x27,0x72,0xaa,0x34,0xb3,0x25,0x91,0xc3,0xe7,0x76,0xce,0xd4,0xaf,0x9c,0x6d,0x4a,0xec -,0xdd,0x09,0x81,0x3e,0x8c,0x85,0x28,0xb4,0xd6,0xe6,0x1e,0x50,0xbc,0x1c,0xa4,0x2b,0x69,0xc2,0x08,0x11,0xdb,0x2e,0x31,0x56,0x6b,0x8b,0x90,0xbd,0x80,0xfb,0x44,0x6d -,0x91,0x18,0x29,0x58,0x90,0x21,0x6c,0x20,0x26,0x12,0x94,0x80,0x94,0x98,0xc0,0x02,0xa8,0x01,0x46,0x41,0x50,0xb0,0xd0,0x2c,0x14,0x1b,0x09,0x04,0xc1,0x40,0xb0,0x90 -,0x8e,0x16,0x0a,0x05,0x44,0x21,0x32,0x08,0x4c,0x22,0x23,0x08,0x84,0xc2,0x21,0x30,0x88,0x9e,0x93,0x8d,0xf3,0xe7,0x32,0xf6,0xd6,0x56,0x71,0x52,0xaf,0x2d,0xc7,0x3f -,0xaf,0xce,0xb3,0x89,0xbf,0xbe,0xf9,0xe7,0x8e,0x7d,0x9c,0x0e,0x77,0x82,0xef,0xd9,0xa1,0x79,0xff,0xca,0xf5,0xd1,0xfe,0xde,0x67,0xfe,0xf6,0xb6,0x9d,0x5c,0x4c,0x3a -,0x78,0x3a,0xbf,0xe4,0x7f,0x33,0xd1,0x84,0x07,0xed,0x7b,0x46,0xd9,0x4d,0x09,0x4d,0xa1,0xf4,0x6f,0x33,0xf1,0x27,0xf9,0xd7,0xf5,0xb5,0x7f,0x83,0x57,0x09,0xf2,0xc2 -,0x7a,0xd4,0xb3,0x5c,0x3a,0xae,0xf6,0x75,0x28,0xb4,0x35,0x88,0x8c,0x84,0x9c,0x5f,0xf6,0x11,0x55,0xcd,0xc9,0xc7,0xcd,0x60,0xe3,0xc7,0xa9,0xb3,0x80,0x18,0x11,0x3f -,0xb2,0x14,0xee,0x8f,0xfd,0x02,0x63,0xd7,0xbd,0x27,0x10,0x3b,0xe7,0xaf,0x50,0x90,0xf7,0x08,0xfb,0x71,0x79,0x01,0x30,0x91,0xdc,0x04,0x14,0x23,0x64,0x9e,0xe0,0x22 -,0x72,0x13,0x9b,0xdd,0x00,0x89,0x42,0xd5,0x03,0x80,0xff,0xf1,0x50,0x80,0x2a,0xff,0xfc,0x21,0x0a,0xcf,0xff,0xfe,0xbf,0xbf,0xff,0xb2,0x40,0xa8,0x98,0x4e,0x18,0x0a -,0x04,0x82,0x82,0x50,0xa0,0x48,0x28,0x15,0x09,0x05,0x0a,0x61,0x21,0x88,0x54,0x24,0x11,0x73,0x72,0x35,0xeb,0xdb,0xad,0xaa,0xb8,0xee,0xf2,0xea,0x48,0xab,0x3a,0xe6 -,0x54,0x5b,0x9f,0x6d,0xc9,0x9f,0xcc,0x1f,0x31,0x7f,0x5f,0xb5,0xb0,0x7f,0x09,0x3f,0x5b,0xa6,0x2e,0x77,0xf4,0xd8,0xf8,0x7b,0x3c,0x8e,0x1e,0xe1,0x5e,0x8a,0xf7,0x6a -,0x37,0xe1,0xb7,0x6f,0x2d,0x29,0x85,0x4d,0xeb,0x00,0x3e,0x60,0xe8,0x30,0xd2,0x83,0x74,0x66,0x6a,0x52,0x3f,0x8b,0xd1,0x57,0xa0,0xae,0xb3,0xac,0xc7,0x6f,0x04,0xe0 -,0x16,0xd6,0xd7,0x18,0xa0,0x7a,0x80,0x01,0x41,0x08,0x0f,0xd8,0xb4,0xd9,0x8d,0xf4,0x48,0x5a,0xb7,0x4c,0x26,0xaa,0xb1,0x48,0x0f,0x54,0x4e,0x0a,0x80,0x51,0x18,0x84 -,0xe7,0x28,0x50,0x08,0x48,0x09,0x69,0x08,0x8b,0x54,0x0b,0x80,0xb8,0x13,0x88,0x12,0x0b,0x09,0x42,0x81,0x60,0xa0,0x48,0x28,0x26,0x12,0x05,0x82,0x83,0x80,0xb0,0x50 -,0x2c,0x14,0x19,0x85,0x42,0x81,0x50,0x98,0xc4,0x26,0x25,0x08,0x9d,0xeb,0xdd,0x75,0x5a,0xff,0x4f,0xe9,0x84,0x5e,0xef,0x70,0xb9,0x5a,0x9f,0xcf,0xf6,0xe2,0x5f,0x7a -,0xbd,0x75,0xb8,0xba,0xd0,0xf2,0x3c,0xf8,0xf2,0xf0,0x8f,0x83,0xfd,0xf4,0x6e,0xf4,0x5d,0xf1,0x38,0x6e,0x02,0xf6,0x3d,0xd6,0x86,0x8b,0xf9,0x52,0x7d,0xce,0x63,0xa6 -,0x85,0x72,0xdf,0xdc,0x5c,0xff,0x49,0xfe,0xa5,0x88,0x1c,0x6a,0x6f,0x66,0xaa,0xda,0x37,0x38,0x7e,0x2f,0x45,0x03,0xa0,0xdd,0xd8,0x22,0x8e,0x7c,0xee,0xce,0x87,0xb9 -,0x54,0xed,0x07,0x55,0xbc,0xd7,0x7a,0xd3,0xf5,0x3f,0x1a,0x08,0xaf,0x09,0xe1,0x02,0x49,0x1d,0xe4,0x94,0xef,0x41,0x9f,0x5c,0x4f,0x28,0x25,0x1f,0x00,0x81,0xfb,0xeb -,0xf7,0x78,0x13,0x4c,0x1e,0xe2,0xaa,0x60,0xb3,0x2d,0x6f,0x84,0x51,0x6c,0x7d,0xc3,0xfc,0x60,0x00,0x07,0x90,0x02,0x53,0x02,0x20,0x28,0x2c,0x0a,0x00,0x98,0x04,0x40 -,0xe0,0xff,0xf1,0x50,0x80,0x2a,0x7f,0xfc,0x21,0x0a,0xcf,0xfd,0xff,0xff,0xff,0xfc,0xb3,0x30,0xb0,0x5c,0x28,0x16,0x0b,0x89,0x04,0x41,0x60,0xa8,0x50,0x44,0x13,0x0a -,0x08,0x82,0x61,0x21,0x20,0x48,0x43,0x25,0x6b,0x9b,0xe3,0xd7,0x9e,0x9d,0xc9,0x97,0x55,0x2e,0xf2,0x92,0xd5,0x72,0xab,0x8a,0xba,0xa8,0xa8,0xfb,0xe8,0x7e,0x68,0xfd -,0xbe,0x1b,0xf8,0xdc,0x11,0xfd,0xff,0xdb,0x7a,0xf7,0x47,0x76,0x0b,0x1e,0xef,0x61,0xca,0xa6,0xaf,0xe5,0xd5,0x3f,0x10,0xfc,0xb4,0xb9,0x46,0x3a,0x47,0xb4,0xb6,0x9b -,0xa1,0xf1,0x97,0x47,0x99,0xfd,0x60,0x79,0xce,0xd7,0x13,0x67,0x55,0x02,0xad,0xe7,0x50,0x2b,0xaa,0xe7,0x5b,0x4f,0x83,0x5a,0x59,0x6f,0x2a,0x47,0xb5,0x69,0x35,0xef -,0x15,0xd0,0xce,0x82,0x11,0x14,0x8b,0xb0,0x68,0x55,0x26,0x44,0x50,0x2e,0x25,0x62,0xac,0xe0,0x99,0x28,0x2b,0xdc,0x14,0xc7,0x59,0xaa,0x09,0xa8,0x88,0x48,0x89,0x38 -,0xa8,0xa8,0x05,0x82,0x20,0x28,0x94,0x28,0x16,0x32,0x85,0x88,0xa1,0x61,0x20,0x58,0x48,0x16,0x12,0x89,0x02,0x61,0x51,0x98,0xc4,0x26,0x21,0x09,0x8c,0x48,0xf1,0xbb -,0xcd,0x67,0xb6,0xfb,0xb3,0x8e,0x66,0x5d,0x24,0x84,0x9c,0x55,0x26,0xfa,0x6f,0xce,0x4f,0x35,0x5c,0x07,0x4f,0xcd,0x6a,0xf7,0xf8,0x67,0x4e,0xc5,0xdc,0x3c,0xf6,0x51 -,0xef,0x47,0x70,0x69,0x96,0xb7,0x4a,0xbd,0x40,0xde,0x46,0x78,0xd2,0x8b,0x68,0xdf,0x71,0xed,0x4d,0xbb,0xec,0xf3,0x8d,0x1e,0x88,0x4e,0xe7,0xbc,0x95,0xfe,0xc4,0x5f -,0xf0,0xc2,0x41,0xff,0xda,0x26,0xd7,0x6d,0xe6,0x69,0x7a,0xb9,0x73,0x7b,0x62,0xdc,0xd8,0x74,0xf3,0xbe,0xd7,0x47,0x02,0x1b,0x65,0x0f,0x4b,0x9a,0x1d,0xe3,0x9c,0x3e -,0x68,0x72,0x1d,0x40,0xf9,0x39,0x8f,0x93,0x92,0x50,0x79,0x50,0x1f,0x87,0x94,0x85,0xe4,0xaa,0x9e,0xeb,0x00,0xce,0xef,0xa9,0x09,0x2a,0x9d,0x64,0x77,0xfd,0x60,0xf3 -,0x21,0xeb,0x12,0x5f,0xa9,0x70,0x1d,0xe0,0x17,0xee,0x00,0xee,0x48,0x01,0xc1,0x50,0x24,0x13,0x01,0xc0,0xff,0xf1,0x50,0x80,0x2b,0xff,0xfc,0x21,0x0a,0xcf,0xfd,0xfb -,0xff,0xff,0xff,0xb2,0x70,0xb0,0xdc,0x30,0x16,0x09,0x85,0x06,0xa1,0x41,0xb0,0x50,0x84,0x24,0x0a,0x84,0x82,0x61,0x20,0x8c,0x15,0x75,0x27,0x8f,0xab,0xcd,0xdc,0xce -,0x37,0xbd,0x44,0x49,0x9a,0xcb,0x97,0x54,0xb8,0x2a,0x3e,0xbc,0x87,0x83,0xcf,0xf1,0xed,0xba,0x3d,0xdd,0xaa,0x0e,0xaf,0xfd,0xcf,0xf8,0x1d,0x8f,0x35,0xe8,0xbc,0x47 -,0xc6,0x1a,0x13,0xae,0xca,0xf8,0x23,0xbc,0x92,0xe0,0xa9,0xa6,0xb8,0xe0,0xdd,0xc7,0x83,0xee,0xf2,0xe3,0x0d,0x1b,0xf6,0xb7,0x46,0x68,0x20,0xae,0x4c,0xa8,0xf9,0x4d -,0x44,0x33,0x38,0xf1,0x98,0x8c,0x2a,0xc1,0xf7,0xfd,0x36,0x3a,0x7a,0x8b,0x67,0xca,0x90,0x1f,0xc7,0xfe,0x51,0xbf,0x75,0xf8,0xa4,0x9d,0xec,0x52,0x25,0x6f,0x44,0xea -,0x37,0x09,0xa2,0xb9,0x32,0x53,0x1d,0x63,0x6c,0x2b,0xa5,0x21,0x4a,0xdc,0x94,0x10,0xad,0x01,0x1b,0x88,0xab,0x12,0x2a,0x90,0xc4,0x05,0x73,0x2a,0x05,0x40,0xa0,0x09 -,0xb4,0x0b,0x0d,0xc2,0xa1,0x42,0x32,0x90,0x2c,0x14,0x0b,0x05,0x02,0x41,0x50,0x88,0x4c,0x62,0x13,0x08,0x84,0xc2,0x21,0x30,0x89,0x9f,0xa7,0x7a,0x85,0xfe,0xbf,0xdb -,0x8c,0x94,0x4a,0xbc,0x5d,0x5d,0x35,0xf1,0xe2,0x6b,0xbd,0x73,0xe7,0x8c,0xe7,0xe2,0xa5,0xf9,0x1c,0x0d,0x3a,0xb8,0xf2,0x5e,0x6f,0x3b,0xdd,0xac,0xf7,0x2d,0xeb,0xf9 -,0x81,0xdc,0x6e,0xb0,0xfd,0x1f,0x67,0x5a,0x69,0xa4,0x4b,0x70,0x2f,0x4a,0x33,0xd6,0xc3,0xf4,0x4a,0xac,0x7c,0xe5,0xa3,0xb7,0xb1,0x4a,0xb0,0xc6,0xf4,0xd1,0x0d,0x97 -,0x8d,0xfe,0x8f,0xb2,0x7a,0xb0,0x85,0x24,0x12,0xd4,0x9d,0x57,0x94,0x7e,0x14,0x8e,0x92,0xd0,0x86,0x7a,0xe2,0xc9,0x76,0xee,0xbf,0xd3,0xaa,0xdc,0x17,0x52,0xf9,0x2b -,0xb9,0x09,0xa6,0x80,0xa6,0x5e,0xfa,0x34,0xf1,0x24,0xd2,0x77,0x27,0xdd,0x0e,0xfb,0xdc,0x77,0x8e,0xb8,0x0a,0x94,0x77,0x1f,0xb3,0x52,0xd7,0x13,0xef,0x80,0x77,0xfb -,0xe3,0xbc,0x65,0x07,0x72,0x00,0x58,0x5e,0x8b,0x81,0x74,0x81,0x14,0x56,0x01,0x11,0x90,0xa8,0x1c,0xff,0xf1,0x50,0x80,0x2d,0x3f,0xfc,0x21,0x0a,0xcf,0xff,0xbf,0xff -,0xff,0xfe,0xb0,0x80,0xb0,0xdc,0x30,0x35,0x0a,0x05,0x42,0x41,0x30,0x90,0x50,0x2a,0x14,0x29,0x05,0x02,0x43,0x10,0x98,0x44,0x26,0x15,0x08,0x84,0xc2,0x21,0x30,0x88 -,0x4c,0x22,0x13,0x08,0x91,0x95,0xaa,0xe3,0xd7,0xe3,0x92,0xf2,0x52,0xf7,0x79,0x75,0xaa,0x95,0x7a,0xb7,0x1f,0x3c,0x35,0xe3,0xca,0x65,0x7f,0xa0,0x2b,0x4d,0xfa,0xc3 -,0xcd,0x6c,0xbf,0x7f,0x0c,0x3d,0x2d,0x6e,0x6e,0x85,0x1e,0xb7,0x6d,0x3f,0x25,0xec,0xe2,0xfe,0xef,0xa3,0xed,0x67,0xca,0x37,0xe2,0x5f,0xf2,0x51,0x6a,0x50,0x7e,0xb7 -,0x2d,0x2d,0xcb,0xb9,0x80,0x2a,0xf9,0xdd,0x1e,0x8b,0x2e,0xf0,0xe1,0x50,0x59,0x6e,0xae,0x30,0xd7,0x85,0xc5,0x51,0xea,0xee,0x0d,0x30,0xeb,0x7d,0x31,0x49,0x5b,0x7b -,0xb6,0x5d,0x5c,0x16,0xe6,0x09,0xfe,0xe8,0x03,0xc4,0x00,0x77,0xd8,0x9c,0xca,0xbc,0x64,0x49,0x88,0xca,0x65,0x44,0x8f,0x70,0xb2,0x79,0x80,0xef,0x06,0x90,0x88,0x77 -,0x02,0x21,0x18,0x2f,0xe0,0x00,0x0b,0x89,0x81,0x52,0x81,0x62,0x20,0x58,0x26,0x14,0x1b,0x05,0x04,0xc7,0x40,0xb0,0x90,0x66,0x25,0x08,0x88,0xc2,0x21,0x30,0x88,0x8c -,0x22,0x56,0xb9,0x95,0x79,0xc4,0xcc,0xbc,0x95,0x57,0x52,0x8e,0x32,0x27,0x5c,0xf9,0xd6,0xbb,0xef,0x8e,0x3f,0x5f,0xe3,0xfc,0x57,0xdb,0x8f,0xb8,0xfd,0x31,0xfd,0xbe -,0xd6,0xfe,0x5e,0xde,0x3f,0x44,0xd5,0xab,0xf4,0xdf,0xed,0xfd,0xe7,0xf9,0xff,0x22,0xb0,0x7e,0xfe,0x39,0xaa,0xbf,0x33,0xd3,0xaa,0x68,0xca,0xc9,0xf6,0xca,0x1c,0xe5 -,0xb7,0x98,0x51,0xce,0x8a,0xf2,0x3e,0x77,0x91,0x1e,0x35,0x5b,0xc6,0x4c,0xb8,0x27,0x0a,0x83,0xfa,0x4d,0x9c,0x07,0xd9,0xce,0x5b,0xc8,0x28,0xb7,0xb3,0xbe,0x20,0xc8 -,0x8e,0xe0,0xc9,0x0d,0x8d,0xef,0x5e,0xbf,0x63,0x3d,0x93,0x27,0xb3,0x69,0x05,0x0a,0xcf,0xde,0x87,0xaf,0x6f,0x77,0xfa,0x0b,0xf0,0x9f,0xfa,0x83,0xc9,0xc4,0x00,0xd3 -,0x3b,0x83,0x18,0x17,0x7b,0xaa,0x58,0x47,0xac,0x42,0xa3,0xbc,0x2a,0x04,0xac,0xf2,0x02,0x5e,0xe8,0x44,0x80,0x00,0x14,0x04,0x4a,0x80,0xb0,0x0e,0xff,0xf1,0x50,0x80 -,0x2e,0x3f,0xfc,0x21,0x0a,0xcf,0xdd,0x77,0xf7,0x7f,0xfe,0xac,0x41,0x30,0x50,0x2e,0x16,0x0c,0x09,0x02,0xa1,0x40,0x98,0x50,0x44,0x15,0x12,0x05,0x82,0x81,0x20,0xa0 -,0x48,0x68,0x12,0x09,0x84,0x42,0x62,0x12,0x98,0x44,0xce,0x77,0xad,0xff,0x3f,0xdb,0xef,0x97,0x88,0xdf,0x9d,0xd4,0x53,0x5c,0xdc,0xaf,0x6e,0x7a,0x9e,0x08,0xe9,0xdc -,0xbf,0x8e,0x86,0x87,0xe3,0x3b,0xe3,0xee,0xbd,0xf1,0xb6,0x21,0xe7,0x73,0x23,0xec,0xdd,0x6e,0x5d,0x49,0xfa,0xcd,0x94,0xa7,0x3f,0x3b,0xed,0xf2,0xf4,0x94,0xae,0xff -,0x0e,0x45,0x39,0xa2,0xde,0x2a,0x0b,0x66,0x8d,0xf5,0x55,0xe7,0xae,0xbe,0x7e,0x26,0xc1,0x7e,0x02,0xd4,0x43,0x77,0x76,0xde,0x88,0x6a,0xcf,0xe2,0x8c,0xad,0x9f,0xdc -,0xbf,0x68,0x81,0x94,0x3d,0x2b,0xed,0x3b,0x83,0xdd,0xe9,0x6c,0x24,0x04,0x09,0xbb,0xaa,0xfb,0xa0,0x6b,0x44,0x69,0xef,0x3b,0x8a,0xc0,0x2d,0xdb,0x4b,0x40,0x2d,0xdc -,0x15,0xb7,0xee,0x3b,0xe2,0x50,0xa8,0xb0,0xac,0x02,0x30,0x6f,0x05,0x82,0xa0,0x17,0x5c,0x05,0x3a,0x05,0x84,0x81,0x61,0xa0,0x98,0x50,0x14,0x13,0x06,0x02,0x81,0x60 -,0xa0,0x58,0x48,0x36,0x0a,0x84,0x82,0xa7,0x31,0x09,0xdc,0x7b,0xeb,0x37,0xd7,0xd7,0xaf,0x1d,0x73,0x74,0xcd,0x2a,0x52,0xea,0x4c,0xbe,0xb5,0xdf,0x1b,0xeb,0xc4,0xeb -,0x7f,0x13,0xe7,0xaf,0x61,0xd1,0x6a,0xdb,0xd6,0xff,0x8c,0xde,0xcf,0xf3,0xe1,0xd7,0xe4,0x78,0xeb,0xef,0x5e,0x0d,0x58,0x90,0x5f,0xaf,0xb1,0xf8,0xbf,0xc2,0xaf,0xcc -,0x1e,0xe4,0x33,0x58,0x3f,0x6f,0xfa,0x09,0xb8,0xa8,0x4b,0xdd,0xfc,0xef,0xdf,0x6d,0x0a,0x74,0xc9,0x31,0x5d,0x43,0x8f,0x12,0xdb,0x35,0x85,0x2d,0xe7,0x8a,0x0c,0xe3 -,0x78,0x38,0x37,0x5b,0xbd,0xf7,0x59,0xf0,0x07,0x42,0xbc,0x2a,0x17,0x13,0xed,0xe7,0xcf,0xb1,0x26,0xcf,0x53,0x4d,0xd4,0x56,0xe3,0x5c,0x9d,0x0e,0x3c,0xeb,0xfc,0x69 -,0xcc,0x58,0xe6,0x1c,0x83,0x80,0x1e,0x61,0xc9,0x6f,0xb0,0x00,0x00,0x01,0xcf,0xc1,0xe9,0x9b,0x20,0xb9,0x00,0xf3,0x00,0x08,0x5c,0x2d,0xde,0xef,0x02,0xd1,0x48,0x33 -,0x1a,0x46,0xd1,0x40,0x10,0x01,0x5a,0x3b,0x80,0x35,0xa4,0x03,0x80,0xff,0xf1,0x50,0x80,0x30,0x1f,0xfc,0x21,0x0a,0xcf,0xfd,0xbf,0xdf,0xff,0xbc,0xb0,0x60,0xc0,0x58 -,0x4e,0x15,0x0c,0x09,0x04,0xc2,0x50,0xa0,0xd4,0x28,0x22,0x13,0x05,0x42,0x41,0x30,0xa8,0x48,0x2a,0x11,0x09,0x84,0x4e,0x61,0x10,0x98,0x44,0x6d,0xcb,0xcd,0x78,0xfd -,0x7c,0x7b,0x77,0x9a,0x55,0x49,0x45,0x25,0xd3,0xcf,0x8d,0x60,0xa4,0xe3,0x2f,0xf9,0xdf,0x00,0x7c,0x51,0xcd,0xf5,0x74,0xea,0x93,0xb5,0x3e,0x21,0xe4,0xee,0x50,0xe1 -,0xf9,0xc8,0xf0,0x34,0x23,0x4f,0x04,0x7b,0x9e,0xbd,0xc2,0xb7,0x67,0xe2,0xf8,0xae,0xfe,0x6a,0x05,0x76,0x2f,0x87,0x76,0x59,0xfa,0x6b,0xd5,0xf3,0x4c,0xa8,0xcf,0x57 -,0x26,0x46,0xd7,0xc7,0xe2,0xa3,0x6e,0x75,0x8f,0xe6,0x7f,0x3d,0xd6,0x4f,0xe0,0xb9,0xfb,0x26,0xab,0x4d,0xaa,0xf7,0xb3,0x16,0x32,0x60,0x3c,0x02,0x08,0x40,0xfc,0x9b -,0xeb,0xfd,0x68,0x93,0xdd,0x8d,0xf3,0x22,0x75,0xc1,0x09,0x14,0x56,0xd2,0x71,0x70,0xf3,0x0e,0xff,0x0d,0xb2,0x22,0xc1,0xa6,0x16,0x50,0x4b,0x2d,0x96,0x3d,0x57,0x62 -,0xb3,0xfc,0x35,0x09,0xc6,0x8d,0x6b,0xa0,0xa3,0xd6,0x89,0x04,0xd7,0x28,0x00,0xba,0x40,0x53,0x20,0x58,0x48,0x15,0x0b,0x09,0x02,0xa1,0x61,0x38,0x54,0x2c,0x24,0x0b -,0x0d,0xc2,0xc1,0x40,0xa8,0x58,0x2e,0x23,0x0b,0x84,0x44,0xa2,0x30,0x88,0x8c,0x2e,0x11,0x33,0x79,0x22,0xba,0xe3,0xd6,0xb9,0xd7,0xb7,0xe6,0x45,0x4a,0x91,0xac,0xd7 -,0x11,0x2b,0x77,0x59,0x7f,0x16,0xe7,0xdb,0xe8,0x7e,0x79,0x74,0xfb,0xe3,0xff,0xaf,0xd6,0x9f,0x6f,0x1d,0x9a,0xcd,0xd6,0x7a,0x4a,0x4e,0x57,0x53,0x0f,0xb3,0x47,0x0f -,0x3d,0xa2,0x8b,0xbd,0x74,0x73,0xfe,0xb8,0x61,0xbd,0x94,0x39,0xcd,0x68,0x49,0xeb,0x1e,0x98,0x9b,0xcc,0xdd,0xf0,0xf3,0xac,0x13,0x57,0xeb,0x16,0x2f,0x77,0xb1,0xff -,0x77,0xfa,0x23,0xa7,0x84,0xbe,0x3d,0xc3,0x09,0xda,0x6a,0xad,0xbc,0x7d,0xfe,0x4e,0x0c,0x39,0xf6,0xf4,0x81,0x5e,0x36,0x96,0x92,0xcd,0xbf,0xfa,0xd3,0xee,0x7f,0x88 -,0x0b,0x51,0x3e,0x68,0x61,0x89,0xd9,0x39,0xfa,0x04,0x93,0x43,0xd2,0xc8,0x00,0x00,0x07,0x93,0xbb,0x51,0xde,0x09,0xe0,0x58,0x85,0x81,0x2f,0x82,0xff,0xfd,0x09,0xbb -,0x30,0x00,0x0e,0x80,0x5c,0x00,0x11,0x0c,0x21,0x70,0x09,0x01,0xc0,0xff,0xf1,0x50,0x80,0x30,0x5f,0xfc,0x21,0x0a,0xcf,0xff,0xff,0xff,0xff,0x78,0xb0,0x70,0xb2,0x9c -,0x28,0x15,0x0a,0x05,0x82,0xa1,0x40,0xa8,0x50,0x6e,0x14,0x19,0x04,0x42,0xa1,0x31,0x90,0x4c,0x22,0x12,0x09,0x84,0x42,0x61,0x12,0x37,0xab,0xef,0xcf,0x3a,0xf3,0xef -,0xc6,0x70,0xee,0xe5,0x5e,0x4a,0xad,0x43,0x5a,0x6e,0xb3,0x5b,0x71,0xf1,0xbf,0x1f,0xf3,0xad,0x08,0xee,0xf5,0x7b,0x28,0xfb,0xfa,0x26,0xfb,0xce,0x5e,0xe8,0xfa,0xfd -,0x2a,0x8e,0xbe,0xa3,0xa7,0x63,0x04,0x4b,0xd0,0xd6,0xe4,0x51,0xcf,0xc5,0xcc,0xf7,0x86,0xf5,0x8b,0xd7,0x9c,0x3f,0x15,0x67,0x51,0xeb,0xf1,0x8a,0x42,0x6e,0x65,0xa5 -,0x88,0x6a,0x32,0x61,0xa3,0x51,0xed,0x99,0x61,0xf0,0xf0,0x9d,0xa5,0xff,0x10,0x2b,0x95,0xf6,0x5d,0xd5,0x04,0xe6,0x5c,0x9b,0x9d,0xea,0xf0,0xca,0x7e,0xeb,0x89,0x85 -,0x5d,0x6e,0xdb,0xac,0xf0,0x14,0x55,0x40,0x63,0xf7,0x3b,0xa0,0xf3,0x99,0x20,0xef,0x02,0x16,0xae,0xcf,0x74,0x94,0x8c,0x68,0x20,0xa0,0xf7,0x78,0xe0,0x72,0x5b,0xcb -,0xa0,0x96,0x00,0x57,0x8e,0x2c,0xee,0xd4,0x15,0xa8,0x16,0x01,0xdf,0x5f,0xc8,0x5c,0x09,0x00,0x2b,0x44,0x40,0xa6,0x40,0xb1,0x14,0x2c,0x25,0x0a,0x05,0x82,0xe1,0x60 -,0xa0,0x58,0x48,0x16,0x14,0x05,0x82,0x81,0x60,0xa0,0x58,0x2a,0x13,0x0a,0x8c,0x4a,0x41,0x10,0x98,0x44,0xa9,0xca,0xdd,0xeb,0xcf,0x75,0x17,0x8c,0xd6,0x25,0x5d,0x5e -,0xa6,0x6b,0x5d,0x26,0xbf,0x6f,0x1f,0xbf,0xc5,0xf3,0xbe,0x83,0xfc,0xda,0xf6,0xfb,0x08,0xf6,0xbf,0xe3,0xe2,0xd9,0xb9,0x38,0xf7,0xbe,0xaa,0x74,0x57,0xc5,0x58,0xfc -,0x23,0xb3,0x9f,0x2f,0xfd,0x75,0xdf,0xf1,0x43,0xc1,0x7b,0x58,0x7d,0x3f,0x85,0xdd,0x57,0x02,0xa8,0x29,0xfb,0x6a,0x3a,0xaa,0x30,0xf4,0x4d,0xa6,0x02,0xb3,0xd0,0x6f -,0xbb,0x5c,0xed,0x3f,0xd4,0x8e,0x14,0x89,0xac,0x8e,0xab,0xba,0xbd,0x21,0xd1,0xf3,0x05,0xc1,0xf8,0xa2,0x25,0xa0,0x14,0x39,0x7c,0x4f,0x77,0xcc,0x0e,0xe3,0xb9,0xfe -,0x33,0x35,0x76,0x8a,0x99,0x7d,0xc4,0x8e,0x27,0x1e,0x20,0xfa,0x56,0x90,0x00,0x86,0x10,0x22,0x14,0x24,0x2f,0x30,0x30,0x0a,0xa9,0xb3,0xa1,0xaa,0x0c,0xd1,0x6d,0x1c -,0xcf,0x1b,0xe2,0x00,0x7a,0xe0,0x13,0x04,0x80,0x40,0x20,0x56,0x84,0xc0,0xe0,0xff,0xf1,0x50,0x80,0x2e,0x9f,0xfc,0x21,0x0a,0xcf,0xdf,0x5d,0xfe,0xff,0xfe,0xb1,0x70 -,0xc0,0x58,0x28,0x17,0x09,0x86,0x02,0x82,0x50,0xa1,0x58,0x28,0x16,0x0a,0x11,0x42,0x81,0x30,0x91,0x4c,0x42,0x13,0x08,0x8c,0xc4,0x24,0x57,0x9e,0xf3,0xef,0xf3,0xed -,0x7e,0x2e,0xea,0xf9,0x94,0x89,0x95,0xa4,0x43,0x55,0x9d,0x78,0xb9,0xec,0xcf,0x8f,0x80,0xae,0xec,0x8e,0xb7,0xf7,0xdf,0xff,0xee,0xbd,0xbf,0xe1,0xa5,0xaa,0xf8,0x4f -,0xc0,0xfe,0xe7,0xc9,0x8f,0x7e,0x3a,0x1f,0x0b,0x9f,0x73,0x68,0x35,0x1f,0x96,0x5f,0x44,0x2f,0x93,0x61,0xca,0xa9,0xc4,0x4e,0xff,0xe2,0x3c,0xb0,0x4f,0x8d,0x3d,0xdd -,0xc7,0xde,0xaf,0x96,0xa8,0xfb,0x07,0xdf,0xef,0xff,0x3a,0x13,0x8f,0x09,0x53,0xcb,0xda,0xaa,0x7c,0xc7,0xbf,0x92,0x18,0x7e,0xd7,0xb7,0x70,0xe3,0xe5,0x1e,0x3d,0x76 -,0xc6,0xab,0x6a,0x48,0x67,0x84,0xa7,0x97,0xec,0x5c,0xb8,0xc8,0x63,0x00,0xf6,0xdd,0x90,0xee,0x2c,0x42,0x8a,0xfc,0x14,0xa3,0x59,0x56,0x11,0x4f,0xbe,0xf6,0x22,0x16 -,0xfc,0xd1,0xe8,0xb6,0x9a,0xba,0xc3,0x22,0xf8,0xfd,0xf0,0x00,0x1e,0x6c,0x05,0xfb,0xab,0xb4,0x00,0x50,0x48,0x05,0xc0,0x4e,0x20,0x58,0x48,0x16,0x0a,0x05,0x82,0xa1 -,0x41,0x30,0x64,0x2c,0x34,0x0b,0x11,0x04,0xc1,0x41,0x18,0x48,0x22,0x35,0x10,0x8c,0xc2,0x27,0x7e,0x95,0x46,0x75,0xfa,0xff,0x13,0x7c,0x72,0xe3,0x6a,0x49,0x2a,0x7d -,0x7d,0xbf,0x5d,0x71,0xe9,0xc3,0x33,0xce,0x5f,0x8d,0x71,0x43,0x58,0xed,0x5d,0xe5,0xa9,0xdf,0x87,0xf3,0x53,0x6d,0x7b,0x38,0xa7,0xe9,0x2e,0x0d,0xa9,0x75,0x97,0xa9 -,0x2d,0x57,0x77,0x5d,0xee,0x29,0x2f,0x6d,0x17,0xff,0x63,0x40,0x3c,0xd4,0xf1,0x19,0xaa,0xea,0x5a,0x3d,0xc7,0x33,0x36,0x43,0x56,0x61,0xc4,0xbe,0x8b,0xf2,0x20,0x6d -,0x75,0xa4,0x8e,0xf7,0x6c,0x4b,0xa5,0x1e,0xa2,0x06,0x03,0x11,0x47,0xfd,0xa9,0x34,0x80,0x0e,0xd5,0xe7,0xd6,0x87,0x77,0x4f,0xed,0x66,0xcb,0x7e,0xfe,0x8a,0xad,0x4e -,0x8a,0xab,0x6a,0xc5,0x84,0x09,0x9e,0x40,0x00,0x78,0x89,0x00,0x01,0x5b,0x09,0x8b,0x84,0x12,0x09,0x88,0xf7,0x7b,0x08,0x05,0xc0,0x80,0x00,0x5e,0xa2,0x00,0x01,0x1c -,0x52,0x03,0x80,0xff,0xf1,0x50,0x80,0x2e,0x5f,0xfc,0x21,0x0a,0xcf,0xff,0xff,0xff,0xff,0xfc,0xb2,0x70,0xb0,0xe0,0x2c,0x24,0x2b,0x05,0x10,0xc2,0x40,0xb0,0x48,0x46 -,0x31,0x09,0x84,0x46,0x61,0x11,0x18,0xc4,0x49,0x5a,0xcd,0x77,0xed,0x4a,0x9a,0xe6,0xb5,0xb4,0x8a,0x5a,0x2f,0x8a,0xdf,0xd7,0xcd,0xd5,0xd3,0xca,0x7e,0x3c,0x87,0xae -,0xdf,0xbf,0xe3,0x97,0xdc,0xf7,0xfb,0xf9,0x77,0xf3,0xff,0x7c,0x9e,0x23,0xb4,0xf1,0xee,0xed,0x37,0x2c,0x21,0xe0,0x69,0x74,0x76,0xbd,0xd2,0x9f,0x96,0x05,0x0b,0xfb -,0x80,0x67,0x3b,0xef,0x34,0xd0,0x24,0xdc,0x7f,0x3e,0x86,0x57,0x9c,0xc4,0x57,0xaa,0xe1,0xa2,0x90,0x6e,0xd9,0x05,0x0a,0x55,0xb7,0x44,0x1f,0x25,0x6a,0x3b,0xef,0x45 -,0x24,0x50,0xf6,0x4a,0xb0,0xb1,0x83,0x36,0xa9,0xc5,0x77,0xa7,0x62,0x6b,0x78,0xb0,0x21,0xde,0xba,0x1d,0xfa,0xce,0xa4,0xd7,0x9c,0x55,0xb5,0x07,0xba,0x1a,0x3b,0x96 -,0x48,0x42,0x6c,0xd2,0x8d,0xd8,0x0b,0xdd,0x55,0xd1,0xef,0x18,0x43,0xb1,0x48,0x05,0x28,0x07,0xac,0x0e,0xe8,0xee,0x58,0x01,0x10,0x80,0x0a,0x86,0x42,0x09,0x43,0x01 -,0x62,0x28,0x58,0x48,0x16,0x0a,0x05,0x82,0xa1,0x40,0xa8,0x84,0x26,0x15,0x08,0x85,0x42,0x63,0x50,0x98,0x84,0x46,0x11,0x13,0xdb,0xd6,0x5d,0xef,0x55,0x4c,0xbd,0x77 -,0x74,0x11,0x75,0xc4,0xfa,0xf7,0xe2,0xfd,0x54,0xbc,0xe2,0xb8,0xbd,0xea,0x04,0xdd,0xbe,0xff,0x17,0xdd,0x55,0xff,0x87,0xe5,0x57,0x53,0xf0,0xe6,0x3b,0xf7,0xc5,0xe6 -,0x81,0x6a,0xd7,0xe3,0x81,0x7b,0xf6,0x4f,0x1a,0x35,0xe7,0x5c,0x5e,0x73,0xf6,0x7c,0x2b,0xe2,0xf7,0xe1,0xf8,0xbc,0xef,0xbb,0xe9,0x34,0xe5,0x4f,0x67,0xf1,0xcf,0xff -,0x92,0xa6,0x3f,0x54,0xab,0xca,0x9f,0xe2,0xbd,0xb5,0x5c,0x38,0x5f,0x38,0x5e,0x1f,0x32,0x59,0xe7,0xcf,0x84,0xfc,0xb7,0xd3,0xa7,0xdb,0xaa,0xb8,0x41,0xc0,0x78,0x9f -,0x74,0x80,0xe2,0x10,0x94,0x51,0xee,0x1d,0xd7,0xae,0x00,0x01,0xe5,0xda,0x40,0x07,0x17,0xa8,0x01,0x52,0xb0,0x83,0xb8,0x77,0x4f,0x69,0x2c,0x05,0xfd,0x63,0xdc,0x07 -,0x31,0x01,0xe0,0x7b,0x83,0xd6,0x1d,0xf0,0x3b,0xc0,0xbd,0x41,0x02,0xef,0x5c,0x06,0xd0,0xd2,0x6d,0x03,0x80,0xff,0xf1,0x50,0x80,0x2f,0x3f,0xfc,0x21,0x0a,0xcf,0xff -,0xeb,0xff,0xff,0xbf,0xb1,0x70,0xb0,0x5c,0x2c,0x27,0x0c,0x05,0x44,0x82,0x50,0x90,0x50,0x2a,0x14,0x39,0x05,0x02,0x42,0x10,0x98,0x44,0x46,0x11,0x39,0x84,0x48,0xce -,0x37,0x9d,0x7a,0xf8,0xa6,0xaa,0x37,0x37,0xc6,0x48,0xcb,0x71,0x5d,0x66,0xfa,0xca,0x57,0x1d,0xf1,0xf1,0xea,0xfc,0xe8,0x3d,0x79,0xbd,0x1d,0xec,0x75,0xed,0xd3,0xa2 -,0xfe,0xbf,0x3a,0x53,0xb3,0xa9,0xd4,0x79,0xf7,0xf7,0x4f,0x6f,0x2f,0x1d,0x25,0x7b,0x9b,0xd9,0x5b,0x90,0xfd,0x8b,0x63,0x3d,0xeb,0xf0,0x81,0xa9,0x71,0x3e,0xd0,0xd1 -,0x01,0x16,0xfc,0xc4,0xea,0x6d,0x11,0x27,0x82,0x3f,0xdf,0x1e,0x74,0x95,0x8d,0x82,0x70,0xb7,0x41,0x8f,0x3b,0xf1,0xc7,0x54,0xbd,0x37,0x29,0x5a,0xd3,0xe0,0x94,0x69 -,0x29,0xcb,0x1e,0xb0,0x93,0x9a,0x18,0xf4,0xbb,0xf0,0x40,0x4b,0xd6,0x06,0xcb,0x50,0x4a,0x02,0xda,0xaa,0x44,0x5a,0x77,0x05,0xe5,0x08,0x22,0x42,0xdb,0x0a,0x44,0x36 -,0x0e,0xe0,0x17,0xa8,0x4c,0x58,0x48,0x05,0x40,0x54,0x32,0x10,0x4c,0x34,0x0b,0x05,0x02,0xc1,0x70,0xb0,0x90,0x2c,0x14,0x0a,0x89,0x02,0xa2,0x33,0x28,0x4c,0xc2,0x26 -,0xb9,0x5d,0x6f,0xe3,0x69,0xcd,0xd6,0x5d,0x4a,0xa8,0x91,0x77,0x75,0xa7,0x73,0x8e,0x4b,0x75,0x75,0xc0,0xd8,0x5a,0x0b,0xbc,0x47,0xc3,0x68,0xeb,0xae,0x4e,0xde,0xaa -,0xfa,0x2f,0xf0,0x7b,0x6a,0x0a,0xb0,0x2b,0x7d,0x94,0x05,0x3e,0xff,0xe8,0x14,0x7b,0x2b,0x3e,0x3a,0x4f,0xff,0x1a,0xb9,0xed,0x08,0xd0,0xe6,0xee,0xf0,0x57,0x77,0x0a -,0xd2,0xeb,0x65,0xd1,0xae,0xfa,0x3f,0xb1,0xfe,0xdf,0xfa,0x95,0x7c,0x93,0x6b,0xa6,0x54,0xe0,0x3f,0x74,0x43,0xa4,0x5e,0x5f,0x57,0xa9,0xcb,0x87,0x67,0x2e,0x1c,0xaa -,0x9c,0x4e,0x71,0x63,0xd6,0x56,0xf5,0xc9,0xcc,0x43,0x4a,0xe1,0x87,0x33,0x80,0x50,0x44,0x26,0xf6,0x7e,0xf6,0x41,0xee,0xbf,0x64,0xf6,0xa3,0xba,0x27,0xf1,0x9d,0x4f -,0xc5,0x54,0x96,0xd7,0xad,0x2a,0xd1,0xa2,0x29,0xdd,0x7a,0xfd,0xc0,0xe3,0x3a,0xc2,0xc3,0x8c,0x4f,0xaf,0x42,0xb9,0x78,0x04,0xfd,0x9b,0xd6,0x83,0xa9,0xfa,0x94,0x43 -,0xd6,0xef,0x10,0xef,0x84,0x41,0xdc,0x07,0x7c,0x85,0x80,0xc0,0x03,0x80,0xff,0xf1,0x50,0x80,0x2f,0x1f,0xfc,0x21,0x0a,0xcf,0xff,0x6f,0xff,0xff,0xef,0xad,0x70,0xc0 -,0x58,0x30,0x16,0x22,0x08,0xc2,0xa1,0x41,0x30,0x54,0x2c,0x14,0x0a,0x89,0x04,0x43,0x11,0x10,0x45,0x4a,0x11,0x23,0xd7,0x5c,0xeb,0x9d,0x7b,0x4c,0xbc,0x65,0x24,0xcd -,0x66,0xb2,0x5c,0x57,0x19,0x31,0x21,0x63,0xf9,0xd0,0x9f,0x5e,0xff,0x8e,0x7e,0x63,0xd2,0x37,0xaa,0xbf,0xf3,0x1f,0x2f,0xb5,0xbf,0x65,0xcf,0xbf,0x3c,0xf4,0x2a,0xea -,0xfe,0x23,0x4a,0x03,0xd5,0x1a,0x89,0xcb,0xae,0xd4,0x8b,0x4f,0x07,0xb3,0x9d,0xe7,0xc1,0xcd,0xd6,0x8f,0x66,0x66,0xcc,0xe8,0x1c,0x7e,0xe7,0xa9,0xf3,0x2c,0x7b,0x7f -,0x90,0x77,0xfc,0x93,0x84,0x51,0x60,0xe1,0x2e,0x7a,0x27,0xa1,0x1f,0x2e,0xc6,0x84,0xd4,0xa2,0x1c,0x12,0x97,0xc2,0x0d,0x02,0x37,0x4a,0x9c,0x96,0xb2,0x52,0x77,0x51 -,0x58,0x22,0xee,0xd1,0x7c,0x82,0x19,0x17,0x2b,0xbf,0x9d,0x95,0x52,0xf1,0x03,0x5d,0x24,0x26,0xb2,0xac,0xe9,0x82,0x40,0x79,0x84,0x1a,0x23,0x00,0x40,0xa4,0x4a,0x50 -,0x08,0x80,0xa7,0x64,0x20,0x98,0x30,0x15,0x13,0x05,0x02,0xc3,0x40,0xb0,0x50,0x4c,0x15,0x19,0x8d,0x42,0x41,0x10,0x98,0x48,0x26,0x11,0x09,0x85,0x42,0x61,0x11,0x99 -,0x78,0xce,0xb5,0xcc,0xe7,0x52,0xaa,0x8b,0xac,0xb9,0x76,0xe2,0x95,0xb9,0x7b,0xbc,0xd5,0xbe,0x96,0x3d,0x45,0x8f,0x2f,0x4d,0xfd,0x87,0xac,0xae,0xd7,0x27,0xe8,0xf8 -,0x7e,0x23,0xe5,0x93,0x3f,0xbc,0x57,0xbc,0xae,0x97,0x3f,0x07,0x3b,0xfe,0x39,0x6f,0x52,0x5d,0x11,0xbf,0x52,0x1c,0xb3,0x6b,0xeb,0xab,0x8c,0xc7,0xea,0xd5,0xcd,0x2c -,0xf3,0xff,0x3d,0xd4,0x88,0x65,0x53,0xe9,0xf8,0x13,0x7d,0x7f,0x5d,0xe3,0x25,0xff,0xe6,0x0e,0x7d,0x65,0x31,0x5a,0x93,0x80,0x79,0xee,0x79,0x61,0x4d,0xcc,0x08,0xf9 -,0xa5,0xc4,0x39,0x86,0xef,0x92,0x5f,0xba,0x3d,0x63,0xfa,0x63,0xd1,0x9f,0x52,0x07,0xac,0x65,0x1c,0x0a,0x73,0x4a,0x6d,0x7b,0xb5,0xa9,0x82,0x45,0xa4,0x6d,0xad,0xee -,0x81,0x7e,0xfc,0x6d,0x28,0x67,0x14,0xb1,0x2f,0x76,0x04,0xda,0xbf,0xd6,0x55,0x86,0xd9,0xbb,0x55,0xb9,0x9d,0xee,0x92,0xef,0xbc,0x00,0x03,0xc4,0xf4,0x70,0xd3,0x00 -,0x54,0x08,0x2a,0xcc,0x03,0x80,0xff,0xf1,0x50,0x80,0x2d,0xff,0xfc,0x21,0x2a,0xcf,0xff,0xff,0x9d,0xd4,0x1e,0xaf,0x62,0x40,0x98,0x48,0x13,0x0a,0x89,0x82,0x84,0x61 -,0x20,0x94,0x28,0x22,0x11,0x84,0x4c,0x61,0x14,0xbb,0xd6,0xf5,0x4f,0x8c,0xe7,0x57,0x7c,0x89,0x51,0x08,0xf6,0xdf,0xb5,0x77,0xe7,0xde,0xf9,0x95,0x34,0xe3,0xf7,0xd8 -,0xcf,0xc7,0x46,0xef,0x5e,0x5d,0x3c,0x80,0xf2,0x3a,0x45,0x8f,0x93,0xe8,0x3c,0x83,0xf8,0x13,0x8f,0x90,0xbf,0x30,0xa7,0x9d,0x9d,0x20,0x3e,0xd9,0xd3,0x73,0x1d,0xdf -,0xbf,0xdf,0x75,0xc0,0x1d,0x0d,0xbd,0x8d,0xc0,0x8b,0xf0,0x6c,0xd1,0xe0,0xd3,0xab,0xca,0xb9,0x43,0x2b,0xe4,0x4c,0x20,0x11,0xbf,0x3d,0xa9,0x88,0xb6,0xf7,0x45,0x57 -,0x8a,0x6d,0x99,0x9e,0x88,0x8c,0x56,0xaa,0x52,0xde,0x0f,0xf0,0x0c,0xf1,0x80,0xc6,0x2a,0xa2,0x9b,0x80,0xc7,0x7d,0xa5,0x9d,0xf0,0xba,0xa3,0x3d,0xe1,0x90,0x07,0xeb -,0x2e,0xe7,0xfc,0xbd,0xcd,0x4b,0xc1,0x10,0x22,0xa4,0xd7,0x67,0xb8,0x27,0x30,0x55,0x20,0x50,0x0a,0x84,0x13,0x15,0x06,0xc1,0x50,0xa0,0x58,0xf0,0x14,0x2a,0x84,0xc2 -,0xa1,0x30,0x88,0x4c,0x22,0x15,0x11,0x8c,0x44,0x61,0x11,0x26,0x2b,0x59,0x77,0x37,0x55,0x75,0x37,0x12,0xa4,0x5b,0xac,0xd5,0x64,0xce,0xb2,0xaf,0x75,0x3f,0x0d,0x0f -,0x8c,0xff,0xcb,0xe3,0x2e,0xd9,0x76,0xcf,0x7f,0x3b,0xba,0xbf,0xa9,0xe9,0xbf,0xd8,0x55,0x76,0xe1,0xf1,0x97,0x87,0xdf,0xff,0x99,0x6d,0xb9,0x23,0x5d,0xe1,0x2c,0x5b -,0x2f,0xeb,0x66,0x53,0x5f,0x9d,0x37,0x7c,0x36,0x5f,0xae,0x7a,0x27,0x92,0x7a,0x4b,0xb1,0x67,0xa8,0xa0,0x69,0xe3,0x02,0xb3,0x93,0x78,0xc8,0x7f,0xd7,0xfe,0x8f,0xf4 -,0xcd,0xee,0x6f,0x7b,0x77,0x6f,0xd5,0x37,0xfa,0x0d,0x5b,0x4d,0x9f,0x70,0x96,0xaf,0xe9,0xab,0xbd,0x5e,0x40,0xe0,0xf7,0x70,0x2d,0x5f,0x2a,0xd7,0x99,0xe1,0xab,0x04 -,0x87,0xed,0xbd,0x72,0x44,0x72,0x63,0x5e,0x83,0xb6,0x8b,0x61,0x2f,0x12,0x91,0xaa,0x13,0xbd,0x05,0x05,0xc3,0xc0,0x03,0xed,0x00,0xa0,0x39,0xf8,0xdd,0xf6,0xa3,0xb8 -,0xa9,0x7e,0xf1,0x29,0x0c,0x6a,0x76,0x86,0xd9,0xf1,0xbb,0xf1,0xc0,0x0e,0xe1,0xde,0x0a,0xdc,0x16,0x03,0x80,0xff,0xf1,0x50,0x80,0x33,0x7f,0xfc,0x21,0x4c,0xfe,0xff -,0xfd,0x54,0x36,0x6a,0x8d,0x09,0x32,0xd2,0x5d,0x49,0x75,0x38,0x1c,0x2a,0xe6,0x3f,0xdd,0xc4,0x7f,0x86,0xa2,0x36,0xe7,0xec,0x63,0xe7,0xd5,0x7d,0x43,0x29,0x1b,0xe5 -,0xc4,0x09,0x65,0x68,0x9f,0xa0,0xfd,0x2c,0x4b,0xeb,0x0b,0x44,0x09,0x91,0xb4,0x0c,0xd6,0x2c,0x10,0x09,0xa6,0x0a,0x1b,0x94,0x53,0x3f,0x37,0xf9,0x7e,0x05,0x7b,0xdd -,0xd6,0xc1,0x90,0xb4,0xd3,0x94,0x98,0x4c,0x04,0xa2,0x33,0x97,0x19,0xc1,0x89,0x4c,0x0a,0xe2,0x50,0x06,0xa3,0x3c,0x3c,0x2b,0x77,0xc1,0x5f,0x2b,0x5a,0x63,0x82,0xc1 -,0x95,0xce,0xf3,0x53,0xf3,0xfb,0xfe,0x18,0x9c,0xcd,0x76,0xf0,0xf9,0x9c,0xc1,0x2a,0x18,0xb6,0x2f,0x57,0xfc,0x69,0xa8,0xcd,0xaf,0x86,0x18,0xb4,0x52,0xb5,0xd5,0x33 -,0xdb,0x7f,0xd2,0x1d,0x5f,0xf9,0xf7,0xeb,0x34,0x74,0x73,0x14,0xab,0x42,0xd5,0x11,0xd9,0x71,0x53,0x8e,0x9d,0x07,0x8f,0xf0,0x48,0xca,0x4c,0xdc,0xe6,0x42,0xd7,0x10 -,0x95,0xb3,0x6a,0xf3,0xdb,0xd5,0xd9,0x09,0x60,0x54,0x80,0x8d,0x4b,0xd0,0xc1,0x43,0xd5,0xaa,0x42,0x05,0x28,0x63,0x89,0x41,0x11,0xa2,0x33,0x29,0x55,0x6b,0x94,0x74 -,0x0b,0x7e,0xae,0x97,0xc3,0x8d,0x3a,0x2c,0xbc,0x42,0xa2,0xbe,0xce,0x5f,0x9c,0xb7,0xee,0xb5,0x72,0x2c,0x58,0xa1,0x60,0xfc,0xbb,0xab,0xd1,0xe5,0x27,0xbf,0x00,0x72 -,0xb2,0x98,0x1f,0x92,0xc1,0x82,0x26,0x2a,0xf5,0xda,0xfc,0xea,0xc6,0xb0,0x93,0x1a,0x7a,0x7a,0xd1,0x3d,0x26,0xb6,0xc0,0xaa,0x86,0xa6,0xae,0xf9,0xfc,0xd8,0xc9,0x85 -,0x3f,0x51,0x1d,0x77,0x7a,0xa7,0x99,0x07,0x3e,0xd2,0x2c,0xae,0x21,0x5f,0x52,0xbf,0x1d,0x8f,0x86,0x72,0xf1,0xbb,0x3c,0xba,0x2f,0x7b,0x76,0xb5,0x10,0xe4,0x40,0x23 -,0x30,0x56,0x50,0x55,0xc4,0xfb,0xaa,0x39,0x9e,0x75,0x52,0xa8,0x5e,0xcd,0x23,0x01,0x00,0xf7,0x32,0xa4,0x18,0x20,0x14,0xa7,0x71,0x22,0x89,0x8f,0x14,0x56,0xa8,0x45 -,0xda,0x61,0x06,0x2f,0x5a,0xa8,0xa3,0xdf,0x7c,0xbf,0x87,0xe1,0x92,0x69,0x3e,0xd0,0xf7,0x2a,0xea,0xd0,0x76,0xe1,0x79,0x96,0x2c,0x1e,0x39,0x65,0xd2,0xe7,0x4a,0x78 -,0x2e,0x0a,0x2c,0xc1,0x54,0xf6,0x8d,0xed,0xe6,0xa5,0x1b,0x77,0xd7,0x5d,0x23,0xd4,0xa8,0xbc,0x98,0xd5,0x93,0x74,0xfa,0x3e,0xf9,0xbe,0xc1,0xc5,0x47,0x8e,0x28,0x30 -,0x7f,0xad,0xb4,0x9d,0x56,0x81,0x61,0xb4,0xd5,0x68,0xdc,0xb8,0xad,0x8b,0x58,0xe0,0xff,0xf1,0x50,0x80,0x30,0x9f,0xfc,0x21,0x6a,0xcf,0xfd,0xbf,0xff,0xff,0xff,0xb3 -,0x81,0xb0,0x8c,0x2c,0x15,0x0a,0x05,0x82,0x81,0x61,0xb8,0x58,0x48,0x25,0x0b,0x05,0x0a,0x42,0x17,0xb3,0x89,0x9e,0x7b,0xeb,0x9b,0x9c,0xaf,0x76,0xd5,0x5a,0x6e,0x55 -,0xd2,0xce,0x29,0x57,0x4a,0xd3,0xce,0x86,0xa7,0xc5,0xa6,0xc6,0xd5,0xbf,0xcd,0xb9,0xc7,0xe6,0x38,0x23,0xa3,0x56,0x6c,0x9b,0x79,0xd0,0xc0,0xaf,0xff,0x80,0xfe,0xb4 -,0xd5,0xb5,0x9b,0xe1,0x68,0x9c,0x59,0x08,0xbe,0xf7,0x8a,0x66,0x7b,0x0f,0x8e,0x09,0xb8,0xf5,0x4d,0xcd,0xa1,0xba,0x0f,0x0f,0x8f,0x1d,0xc8,0xc3,0x48,0x1a,0xd9,0x23 -,0xd2,0xbd,0x98,0xb6,0xce,0x74,0xfd,0x08,0x83,0x90,0xb3,0x5b,0x67,0x4e,0xa6,0xf8,0x98,0x82,0x9c,0xfc,0xdf,0xd5,0x4c,0xcb,0xe9,0xe8,0x65,0xc6,0x8a,0x31,0xcf,0x28 -,0x4a,0x85,0x74,0x50,0xed,0x7a,0x89,0x6a,0x65,0x22,0xa6,0x65,0x8a,0x42,0x75,0x99,0x69,0x8e,0x59,0x44,0x13,0xb9,0xf3,0x0e,0x96,0x05,0x66,0xad,0x96,0x14,0x81,0x10 -,0x8e,0x00,0x02,0x82,0xe0,0x51,0x20,0x48,0x2c,0x44,0x0b,0x04,0x82,0xc5,0x80,0xb0,0x60,0x2c,0x15,0x0a,0x05,0x42,0xc1,0x51,0x38,0x54,0x4e,0x13,0x1a,0x04,0xc4,0xa1 -,0x31,0x88,0x8c,0x22,0x23,0xd6,0xe7,0x19,0xc7,0xdf,0xfa,0xc9,0x5a,0xef,0x58,0xbc,0xbb,0xc5,0xf1,0xb9,0xd7,0x35,0x96,0x5d,0xdc,0xe7,0x57,0xc0,0xe7,0xbe,0xe7,0xfb -,0xee,0xf0,0xf7,0xe6,0xbd,0x7f,0xfd,0x37,0x37,0x2a,0xb4,0x36,0xa5,0x9d,0x69,0x3d,0x35,0x5f,0x97,0x3d,0x7a,0xed,0x6d,0x58,0x05,0x87,0x63,0x76,0x4a,0x7e,0x02,0x88 -,0xef,0xbf,0x29,0x69,0xb5,0xfc,0x5c,0x98,0xff,0x07,0xfd,0xda,0x97,0x1c,0xb8,0xfd,0xc7,0x5f,0x21,0x44,0xb4,0xcb,0xa2,0x6f,0xee,0x72,0xe6,0xe7,0x59,0xf9,0xbc,0xd4 -,0xe5,0xd5,0x78,0x70,0x44,0x8a,0xcc,0x3c,0x6f,0x17,0x6a,0x2b,0xde,0xe6,0xe4,0xca,0xec,0xf1,0xb6,0x00,0x39,0xb4,0x3e,0x47,0x82,0x22,0x4e,0xe4,0x9c,0x1f,0x81,0x3c -,0x68,0x3e,0x0a,0xcf,0x0b,0x1f,0x5e,0x6a,0xbb,0x2d,0xb9,0x94,0x83,0x8b,0xd1,0xbd,0x72,0xf1,0xd2,0xb5,0x24,0x5f,0x2d,0x02,0xfc,0xb7,0x3f,0x94,0x0a,0x54,0xfa,0xd2 -,0x35,0x8b,0xff,0xf1,0x65,0xc5,0xaa,0x58,0x4d,0x33,0x35,0x5e,0xeb,0x28,0x29,0x18,0x02,0x50,0x03,0x80,0xff,0xf1,0x50,0x80,0x2e,0xbf,0xfc,0x21,0x0a,0xcf,0xf7,0xbf -,0xff,0xff,0xfe,0xb4,0x61,0x40,0x58,0x46,0x14,0x1b,0x0a,0x04,0xc1,0x80,0xb0,0x50,0x4c,0x14,0x12,0x85,0x08,0x43,0x11,0x98,0x85,0x27,0x5b,0x92,0xba,0x73,0x29,0xc7 -,0x7a,0xab,0xab,0xbd,0x9a,0xc1,0xa3,0x8c,0x9b,0x9f,0x1e,0xad,0xf5,0xc0,0xf9,0x7d,0x7d,0xdf,0xbe,0x92,0x14,0xf4,0x2f,0x1f,0xcd,0xfd,0xcb,0x8e,0x7f,0xfc,0xf0,0x2a -,0x07,0x6a,0xac,0xe8,0xea,0x02,0x0d,0x12,0xd3,0x99,0xbf,0xaa,0xf2,0xd7,0xba,0x0d,0xcd,0x72,0xad,0x3c,0x2b,0x6c,0xaf,0x4c,0x80,0xa5,0x0f,0xbf,0x3f,0x10,0xec,0xf3 -,0xb9,0xd2,0x7d,0xd3,0x6c,0xed,0x59,0xf8,0xe3,0x78,0xc1,0x40,0xf8,0x7b,0x6f,0x0b,0x9d,0xdb,0x6e,0xa9,0x6e,0x62,0x98,0x23,0x46,0xf6,0xf9,0x63,0x3f,0xc3,0x81,0x56 -,0x07,0x1a,0x5a,0xc9,0x26,0x8e,0x91,0xd3,0x09,0xa7,0x28,0xda,0xf4,0x92,0xb9,0x57,0x9c,0xb7,0x45,0x34,0x4d,0x23,0xbc,0x4f,0xbd,0x08,0x9d,0x3f,0x50,0x19,0x30,0xac -,0x4c,0x65,0xa0,0x02,0x77,0x44,0x2b,0x3b,0xa6,0xb8,0x82,0xe9,0x04,0xc0,0x5c,0x0a,0x94,0x0b,0x11,0x02,0xc3,0x71,0x31,0x54,0x2c,0x34,0x0a,0x90,0xc2,0xa1,0x10,0xb8 -,0x4c,0x2a,0x13,0x28,0x9d,0xed,0xe1,0xbf,0xaf,0x9a,0xf8,0xdd,0x5e,0x7e,0x3f,0x6b,0x54,0xa2,0x5d,0x7b,0x77,0xed,0xb3,0x7a,0xbd,0xeb,0x9f,0x8b,0xce,0x7c,0xc1,0xff -,0xff,0x90,0xfe,0x06,0xaf,0x47,0x76,0x9d,0x53,0xeb,0xb7,0x5f,0xd3,0xf1,0xbb,0xb2,0x36,0xfa,0xda,0x56,0xc2,0xf5,0x79,0x34,0xd5,0x90,0xb6,0xbd,0x78,0xec,0xd5,0x67 -,0x29,0x32,0x47,0xc3,0xe3,0x8f,0x6d,0xc8,0x19,0xd3,0x85,0x2e,0x01,0xc7,0x30,0xc7,0x20,0xe5,0xee,0xff,0xf2,0xfb,0xf3,0x97,0x2e,0x4f,0x95,0xfc,0xfa,0x0e,0x2a,0xe3 -,0xc1,0xc3,0xc7,0x8f,0x8f,0x00,0x7c,0xf9,0x1c,0x87,0x15,0x4e,0x9d,0xe3,0x1e,0x55,0xe2,0x1c,0xc9,0x7b,0xa2,0x39,0xbb,0x98,0x20,0x01,0xdc,0x3d,0xc3,0xbf,0xda,0x00 -,0x3c,0xf9,0x70,0x69,0xf7,0xd2,0x84,0x47,0x74,0xff,0x10,0x25,0x77,0x76,0xd5,0xfd,0xaf,0xfe,0x4b,0x02,0x3f,0xfa,0xc0,0x63,0xad,0x08,0x64,0x04,0xe2,0xbd,0xa0,0x00 -,0xda,0x43,0xb4,0x2a,0x01,0x64,0x4a,0x58,0x0e,0xff,0xf1,0x50,0x80,0x30,0xdf,0xfc,0x21,0x0a,0xcf,0xbf,0xfb,0xff,0xe7,0xfd,0xb2,0x60,0xc0,0x58,0x48,0x36,0x13,0x85 -,0x02,0xe1,0x61,0x38,0x58,0x4a,0x14,0x48,0x84,0x82,0x61,0x50,0x89,0x8c,0x22,0x13,0x10,0x89,0x57,0x5d,0x6d,0xaf,0x8f,0xd3,0x8e,0x78,0xcc,0xd4,0x92,0x84,0xa4,0xa9 -,0xa9,0xcc,0x54,0xbf,0x3d,0xfb,0x56,0xbc,0x8d,0x1d,0xd2,0xb4,0x5d,0xe7,0xdb,0x2f,0xd2,0x3f,0xfe,0x7e,0x8b,0x53,0x78,0x7e,0x3b,0xc8,0xfb,0x8e,0xa2,0xaa,0x7f,0x09 -,0x1d,0x7b,0x8b,0x68,0x53,0xf8,0xb3,0x01,0xea,0xb8,0xb7,0xd0,0x51,0xf5,0xfb,0xc9,0xea,0xfe,0x46,0x9f,0x2b,0x45,0x9f,0xf6,0x82,0xf6,0xbb,0x35,0xc9,0xfe,0x0d,0xc7 -,0x04,0x7a,0x10,0xe1,0xa2,0xe5,0xc3,0x80,0xe6,0x42,0xeb,0x47,0x00,0x92,0xd2,0x75,0xd5,0xcf,0x5c,0xfc,0x40,0x82,0x44,0x30,0x8f,0x63,0xe3,0xda,0xa9,0x81,0x37,0x74 -,0x65,0x1b,0x12,0xdb,0x7a,0x07,0x10,0x4f,0x0e,0x62,0xe4,0x89,0xe8,0xe9,0xc1,0x97,0x0a,0x26,0x56,0x84,0xb4,0xa6,0x9e,0xf8,0x20,0xbd,0xa8,0x8f,0xf1,0x9a,0x70,0x94 -,0xd1,0x6d,0xad,0x16,0x8c,0xeb,0x07,0x74,0x3f,0x27,0xb9,0x5d,0xde,0xe8,0xdc,0x7b,0x81,0xdd,0x3d,0x74,0x00,0x88,0xa8,0xa8,0x14,0x28,0x12,0x0b,0x0a,0x02,0xc2,0x41 -,0x30,0x50,0x30,0x16,0x1a,0x06,0x02,0xc2,0x50,0xa0,0x94,0x28,0x15,0x11,0x84,0x42,0x62,0x51,0x18,0xc5,0x0e,0x77,0x9c,0xfc,0x72,0xf3,0xe2,0x1e,0xde,0xf3,0x9b,0x91 -,0x74,0xae,0x2b,0xea,0x7a,0xad,0xf1,0x9c,0x7b,0x2f,0x24,0xde,0x87,0x42,0xf9,0x97,0x67,0x0c,0x69,0x68,0x8b,0x77,0x15,0xd3,0x3f,0x9d,0xe0,0x5f,0x7e,0xe0,0x80,0x13 -,0xf8,0x9c,0xbf,0x29,0x5d,0x89,0xbb,0xa2,0x4c,0x9d,0x4f,0xdc,0xf0,0xf2,0xdf,0x7a,0x2d,0x97,0x98,0xe7,0xcc,0xb5,0x1d,0xf5,0xe3,0xc3,0xe0,0x70,0xd9,0xfe,0x5d,0x87 -,0xba,0xc7,0x1c,0xff,0x37,0xc4,0x38,0x5f,0x6b,0xf3,0xbf,0xea,0xbb,0x96,0x1c,0x63,0xc6,0x9d,0x2e,0x0e,0x5c,0x9c,0x89,0xa3,0xee,0x1f,0xee,0x7b,0x8a,0x24,0x2b,0xc1 -,0xb7,0xe2,0x9a,0xa7,0xd6,0xf7,0xa2,0x22,0x39,0xf2,0x00,0x78,0x8f,0x80,0x38,0x66,0xce,0x01,0xe0,0xbd,0xd4,0x26,0xa4,0x69,0x59,0x55,0xf5,0xa7,0xad,0xdd,0xef,0x8a -,0x48,0x04,0xc2,0xa8,0xaa,0x00,0x44,0x50,0x00,0x20,0x08,0xa6,0xb5,0x40,0xe0,0xff,0xf1,0x50,0x80,0x2e,0xdf,0xfc,0x21,0x0a,0xcf,0xbf,0xbf,0xff,0xf7,0xfc,0xb0,0x60 -,0xc0,0x98,0x48,0x16,0x22,0x05,0x82,0xe1,0x60,0xc0,0x58,0x28,0x25,0x12,0x05,0x42,0x84,0x21,0x08,0x48,0x22,0x13,0x18,0xa5,0x9c,0x73,0xe7,0x2a,0xef,0x99,0x4e,0xbd -,0xf8,0x55,0xc9,0x31,0x6c,0xd5,0x26,0xa4,0xde,0x71,0xf5,0xee,0x9f,0xbe,0x84,0x9b,0x60,0xe7,0xeb,0x2e,0xbf,0x18,0xe9,0x8d,0x25,0x1e,0x8e,0x15,0xea,0x4e,0x2b,0xf7 -,0xee,0x44,0xe7,0x1f,0xf7,0x6b,0xd6,0x89,0xba,0xfd,0xff,0xbf,0x64,0x54,0x2b,0xd6,0xd7,0x8f,0x40,0xd9,0x35,0x51,0x6e,0x1f,0xcf,0xfc,0xa4,0x77,0x7b,0x15,0x19,0xd0 -,0xfc,0x7d,0x3d,0x2b,0xaa,0xe8,0xf0,0x76,0x32,0x2c,0xaf,0x48,0xff,0x0d,0x34,0x0d,0xf7,0x27,0x6d,0x65,0x27,0x4d,0x15,0x37,0x87,0xa6,0x0c,0xbc,0xf6,0xd6,0xb5,0x35 -,0x24,0x82,0x86,0x0d,0xd1,0xbe,0xb5,0xef,0x24,0x32,0x55,0xa1,0xf2,0x82,0xeb,0x43,0xbf,0xc6,0x0f,0x76,0x2e,0xfc,0x81,0x74,0x9d,0xd9,0x19,0x30,0x6c,0x9d,0x47,0x69 -,0x3b,0x2b,0x48,0x4c,0x80,0x5c,0x02,0x01,0xd5,0x10,0xd5,0x4e,0xca,0x80,0xa2,0x81,0x10,0x29,0x94,0x26,0x14,0x14,0x05,0x84,0x61,0x50,0xa0,0x58,0x30,0x25,0x0b,0x11 -,0x02,0xa1,0x40,0xb0,0x54,0x26,0x14,0x0a,0x90,0x42,0x61,0x51,0x18,0x45,0x2e,0x7e,0xff,0x9d,0xf9,0x5e,0xbc,0x0a,0x9c,0x7a,0xb5,0xd4,0x95,0x5d,0x13,0xeb,0xd3,0x8e -,0x79,0xff,0xaf,0xbf,0x5b,0xf6,0xf9,0xfd,0x74,0x1e,0x7f,0x99,0xfc,0x77,0xc4,0xe8,0xf4,0xd7,0x7b,0x68,0xff,0x0b,0xcf,0x42,0x97,0xe3,0x69,0xac,0x25,0xe9,0x74,0x47 -,0x81,0x97,0x2b,0xf9,0x5d,0xbd,0xea,0x3a,0x4f,0x8d,0xdf,0xb6,0x09,0x2d,0xbe,0xd9,0xaa,0x8f,0x23,0xff,0xe7,0xab,0xfb,0x6a,0xdc,0x1e,0xdf,0x8d,0xf4,0x72,0x9b,0x88 -,0x55,0x41,0x50,0xf8,0xfd,0xe3,0x89,0xfe,0x0f,0xff,0x70,0xf6,0xb1,0x1e,0xf7,0x05,0x8b,0xe6,0xe4,0x07,0x89,0xe1,0xc7,0x85,0x12,0x04,0xd5,0x0c,0xcf,0x13,0x91,0xec -,0x02,0xf9,0x50,0xc7,0x80,0x07,0x7c,0x3d,0x73,0xd0,0x15,0x61,0x63,0xc4,0x00,0x03,0xd6,0x77,0xc9,0x97,0xc3,0xaa,0xf6,0x32,0x00,0x0d,0x01,0x00,0x0a,0x82,0xa9,0x80 -,0xb0,0x00,0xba,0xa0,0x38,0xff,0xf1,0x50,0x80,0x30,0x7f,0xfc,0x21,0x0a,0xcf,0xbe,0xb7,0xdf,0xff,0xfd,0xb1,0x60,0xb8,0x60,0x48,0x15,0x0b,0x05,0x02,0xc3,0x80,0xb0 -,0xd0,0x2c,0x14,0x0a,0x85,0x82,0x85,0x20,0x98,0x44,0x24,0x11,0x31,0x84,0x42,0x61,0x10,0x98,0x84,0x4a,0xf3,0xeb,0x8b,0x46,0xe5,0x4e,0xbc,0x5d,0x4d,0x6e,0x29,0xa5 -,0xa8,0xbc,0x4e,0x33,0xdb,0xd7,0x9a,0xfb,0xff,0xea,0x17,0xf6,0x7e,0x17,0x3a,0x56,0x86,0x1f,0xf3,0xbe,0xed,0x15,0x7f,0x9d,0xbd,0xfd,0x8a,0x72,0x73,0x51,0x2b,0xc6 -,0x80,0xdf,0xef,0x74,0x6e,0x5e,0x7f,0xe4,0xe6,0x1e,0x3b,0xba,0x1f,0x96,0x60,0x96,0x2f,0xa2,0xbd,0x92,0xe8,0xae,0x4b,0x30,0x3a,0x7a,0x59,0x03,0xf8,0x00,0xf7,0x7a -,0xbb,0xd6,0x9d,0xe7,0x27,0x86,0x00,0x53,0xd2,0x61,0xbb,0x28,0x2e,0x0a,0xed,0xea,0x93,0x99,0x4d,0x35,0xfe,0x4e,0x0c,0xb7,0xc1,0x56,0x88,0xc8,0x3a,0xa3,0xab,0x9d -,0xed,0x3d,0xea,0x84,0xb8,0xae,0x9a,0x9f,0x8c,0x5b,0xd7,0xd8,0x94,0x09,0x9c,0xb6,0x63,0x52,0x2a,0x2d,0xa1,0x35,0x0f,0x56,0x23,0xc4,0x1f,0x22,0x2a,0xac,0x17,0x77 -,0xe0,0x06,0x74,0x53,0x51,0xdd,0x77,0x0e,0xe9,0xdf,0x54,0x16,0xd9,0x12,0x85,0x80,0x4e,0x90,0x50,0x4c,0x18,0x0b,0x11,0x42,0xc3,0x40,0xa8,0x58,0x8a,0x14,0x0b,0x85 -,0x02,0xc1,0x50,0x98,0x54,0x46,0x15,0x09,0x89,0x42,0x62,0x10,0x98,0x44,0x26,0x11,0x23,0xf3,0x97,0xeb,0xdb,0x7e,0xcf,0x04,0x95,0x89,0xc5,0x55,0x5a,0x5d,0x69,0xe7 -,0x37,0xd7,0x73,0xe3,0xd7,0x9d,0xf5,0xcf,0xfe,0xbf,0x03,0xdf,0x4c,0xfd,0x0a,0x9d,0x57,0x7a,0x23,0xe5,0x57,0x2e,0x34,0x17,0x3f,0x40,0x34,0xdd,0x7e,0x37,0x97,0x39 -,0x5b,0xf1,0x1d,0x8f,0xf6,0x75,0xe5,0xe0,0x6a,0x3f,0xdb,0xf8,0xf6,0x8d,0x8d,0x9f,0x0b,0x15,0xc9,0x05,0x07,0xeb,0xf4,0xa7,0xe0,0xe7,0xf8,0xdc,0xb4,0xb9,0xde,0xe3 -,0x7d,0x5e,0xec,0x48,0xfe,0xff,0x1f,0x7c,0xc2,0xde,0xbb,0x67,0x1d,0xe4,0xdc,0x0b,0x70,0xeb,0xe0,0x8e,0xfb,0xba,0x77,0xe2,0xfe,0x4f,0x98,0x00,0x79,0x94,0x39,0x5d -,0xbd,0x1f,0x56,0x5c,0x00,0xf3,0x03,0xd7,0x7a,0xe1,0xdd,0x3d,0xd8,0xa4,0x00,0x0f,0x20,0x58,0x91,0xee,0x89,0x8e,0xe8,0x09,0x2e,0x9f,0xae,0x29,0x10,0x0e,0xf0,0x20 -,0x89,0x02,0x89,0x80,0x11,0x2e,0x03,0x80,0xff,0xf1,0x50,0x80,0x2d,0xff,0xfc,0x21,0x0a,0xcf,0xbf,0xad,0xff,0xff,0xfc,0xae,0x70,0xc0,0x58,0x30,0x15,0x0b,0x05,0x04 -,0xc2,0x41,0x30,0x50,0x6c,0x44,0x11,0x05,0x04,0x42,0x40,0x88,0x88,0x26,0x21,0x53,0x99,0x5e,0x77,0x2d,0xce,0xa5,0x37,0xa1,0x22,0x65,0xc5,0xe5,0x5f,0x9c,0xc9,0x92 -,0xf2,0xeb,0xfd,0xf8,0x0f,0x4d,0x27,0xf1,0xee,0x8e,0xf2,0x4f,0x08,0xed,0xfd,0x37,0xf9,0x29,0xe7,0xda,0x3a,0x9f,0x72,0x02,0xfe,0xda,0xa7,0x65,0x1f,0x5d,0x0e,0xf8 -,0x9e,0xf7,0xe1,0xfd,0x12,0x5e,0x01,0x13,0x85,0x4c,0xfd,0xdb,0xe9,0x6b,0x5e,0x5d,0xd6,0x1a,0xab,0xd6,0xe2,0x3e,0x5f,0xf6,0xe2,0x62,0x8f,0x09,0x97,0x78,0x37,0xd6 -,0xea,0xde,0xe0,0x84,0x33,0xd1,0xb0,0xc5,0xf5,0x23,0x4c,0x77,0x49,0x77,0xa4,0x29,0x16,0x76,0x92,0x51,0x5e,0x39,0xcf,0x96,0x94,0x72,0x14,0x87,0xe8,0x8c,0x8b,0xcc -,0x64,0xa9,0x69,0x8c,0xf7,0x50,0x77,0x4e,0xe9,0x25,0x41,0x9a,0x51,0xb0,0x8a,0x94,0xb2,0x26,0x97,0xc6,0x93,0xa4,0x93,0x1c,0x16,0x76,0x0b,0xc5,0x45,0x5f,0xd0,0x15 -,0xa5,0xe9,0x74,0xc0,0x50,0x2a,0x04,0xe9,0x09,0x02,0xc1,0x80,0xa0,0x58,0x48,0x16,0x1a,0x05,0x8e,0x81,0x60,0xa8,0x50,0x66,0x15,0x11,0x89,0x42,0x24,0x30,0x89,0x95 -,0xfa,0x6b,0xc7,0xc7,0x8e,0xaf,0xc2,0x5e,0xbb,0x94,0x25,0x6a,0x93,0x57,0x24,0xd4,0xf7,0x3a,0xfd,0xfb,0xea,0xbd,0xb8,0x1b,0x35,0x7e,0xcb,0xca,0x7f,0x0a,0x5f,0xca -,0xe9,0xb2,0x38,0xff,0x37,0xa2,0x0b,0xd5,0xac,0x6a,0x23,0xed,0xfe,0xcf,0x56,0x9b,0xae,0xdb,0xe6,0x98,0x49,0x02,0x6f,0xcb,0x6f,0xe0,0x34,0x75,0x74,0x58,0x02,0xee -,0xf0,0x2b,0x28,0x5b,0x74,0x1d,0xf4,0x7a,0x1f,0xec,0xfd,0xed,0xe8,0x18,0x8e,0xcc,0x25,0xbd,0x3b,0x6b,0xe4,0x69,0xcf,0xbf,0xc8,0x6b,0xdb,0xe3,0xf7,0xab,0xee,0x7e -,0xc7,0x33,0x7c,0x9a,0x6b,0x8a,0xf7,0x34,0xfe,0x70,0xa0,0x0b,0x93,0x93,0xc1,0xc5,0x5e,0x00,0xe0,0x3b,0xc0,0x77,0x98,0x4e,0xfa,0x40,0x0f,0x10,0x00,0x9a,0x50,0xae -,0x3b,0x5d,0x01,0xdc,0xe2,0xa9,0x0b,0x20,0xb7,0x74,0x41,0xee,0x16,0x00,0x4c,0x14,0x00,0xa0,0x02,0x53,0x2a,0x03,0x80,0xff,0xf1,0x50,0x80,0x2f,0x1f,0xfc,0x21,0x0a -,0xcf,0xbe,0xce,0xef,0xff,0x7c,0xae,0x60,0xc0,0x58,0x48,0x13,0x0b,0x05,0x02,0xc2,0x51,0x31,0x10,0x2c,0x14,0x2a,0x85,0x02,0x43,0x40,0x90,0xc4,0x26,0x25,0x08,0x84 -,0xc4,0x21,0x30,0x88,0x9c,0xdc,0xe3,0x9d,0x67,0x5e,0xfd,0x54,0xbe,0xf5,0x5c,0x72,0xd3,0x35,0x91,0x48,0x6a,0x47,0x3f,0x8a,0xef,0x8f,0xd6,0xc6,0x1f,0xc5,0x9f,0x4b -,0xef,0xb7,0xfb,0x9b,0xf5,0x7f,0xcc,0xb7,0x2f,0x9c,0xee,0xfd,0x7c,0x51,0xf1,0xae,0xe9,0xe6,0xfc,0x81,0x74,0x40,0x3e,0x1b,0x71,0x1d,0x8a,0xec,0x9a,0xfc,0x8e,0x56 -,0x70,0xbc,0xc5,0xbe,0xcf,0xa9,0x62,0x02,0xfd,0x7a,0x88,0x2f,0x24,0x38,0x1e,0xc2,0x7e,0xab,0x0f,0xaf,0x5e,0x04,0x84,0x46,0xb0,0xf7,0x67,0x5f,0xc4,0x3d,0x31,0x5b -,0xbe,0xd5,0x4d,0xce,0x46,0x67,0x1b,0x0a,0x97,0x6c,0x92,0x16,0x2a,0x74,0x09,0xee,0xc9,0x51,0xce,0xf2,0xb5,0x8a,0xcf,0x5d,0xca,0x40,0xa5,0xfc,0x14,0xb9,0x30,0xea -,0x38,0x37,0x61,0xfb,0x99,0xa3,0x81,0x6b,0xc2,0x64,0xbc,0x4c,0x68,0xac,0xa1,0xdf,0x44,0x00,0x1e,0x32,0xad,0x92,0xde,0x20,0x7a,0xc0,0x77,0xc3,0xbb,0x44,0xc4,0xe5 -,0xeb,0x80,0xa8,0x09,0x00,0xa7,0x50,0xb0,0xe0,0x4c,0x24,0x0b,0x0d,0x44,0xe1,0x61,0xc0,0x50,0x4c,0x17,0x0b,0x05,0x46,0x22,0x30,0x88,0x8c,0x82,0x76,0xd9,0xbf,0xe7 -,0xed,0xc5,0xf6,0x92,0x63,0x2e,0xa0,0xd2,0xeb,0xf1,0x3d,0x79,0x9e,0xf1,0xbf,0x8e,0x09,0xbf,0xe4,0x3e,0x47,0xa7,0x6a,0x75,0x5d,0x93,0xde,0xef,0xd9,0x70,0xa3,0x7b -,0x7f,0xdf,0xa4,0x56,0x60,0xf5,0xce,0x45,0xf4,0x3d,0xfd,0x8f,0x9c,0xeb,0xd0,0xc0,0x05,0xba,0xb2,0xe1,0xe9,0xb8,0xdb,0xd5,0x2d,0x61,0x84,0x82,0xe0,0x16,0x83,0xc9 -,0xaf,0xe1,0x18,0xfc,0xe7,0x11,0x67,0x6b,0xe3,0xd8,0xcb,0xdc,0xe5,0xa6,0x61,0xd5,0xcd,0x34,0x14,0x52,0x00,0x37,0x70,0xf1,0x99,0xe4,0xe8,0x1c,0x63,0x8a,0x39,0x25 -,0x16,0x39,0xef,0x8c,0xf2,0x00,0x14,0xf8,0x60,0xc5,0x60,0xef,0x01,0xdd,0x26,0x9d,0xce,0xd0,0x03,0xb9,0xeb,0x97,0x2a,0x77,0xbd,0xc0,0xf5,0x80,0xee,0x7b,0xae,0xe7 -,0xf8,0xc0,0x07,0x00,0x19,0xa2,0x00,0x0a,0x85,0xc1,0x0d,0x34,0x0a,0x48,0x0e,0xff,0xf1,0x50,0x80,0x31,0x7f,0xfc,0x21,0x0a,0xcf,0xe6,0xdb,0xff,0xff,0xfc,0xae,0x40 -,0xc0,0xd8,0x28,0x36,0x12,0x05,0x42,0xc2,0x40,0xb8,0x58,0x28,0x16,0x0a,0x05,0x84,0x81,0x60,0xa0,0x54,0x24,0x43,0x10,0x88,0xc2,0x22,0x30,0x88,0x4c,0x22,0x37,0x35 -,0xa4,0xb9,0x3b,0xb9,0x57,0x97,0x92,0xe9,0x12,0xa6,0x45,0x75,0x5c,0xcd,0x64,0xe3,0x3d,0xbc,0x7f,0xcf,0xb0,0xf9,0x87,0x8e,0xba,0xc7,0x49,0x9d,0x37,0xf1,0xc3,0xfe -,0xbe,0x35,0xaa,0xeb,0xdf,0xea,0x2f,0x37,0xff,0x62,0x3f,0xa1,0x8f,0x6c,0x22,0xc6,0x9d,0x5b,0xa8,0xe9,0x1d,0x94,0xff,0x01,0x5d,0x1f,0xfb,0xb6,0x5f,0x55,0x0e,0x65 -,0x37,0xc6,0x22,0x24,0x13,0x3e,0xe4,0xb0,0x6e,0x0f,0xd4,0x27,0x81,0x48,0xbb,0x01,0x6e,0xf8,0x59,0x89,0x28,0x3f,0xb5,0x0c,0xa1,0x32,0x68,0xe8,0x56,0x7d,0xa3,0x09 -,0x1e,0x6e,0xdf,0x59,0xe9,0x5e,0x0f,0x60,0x79,0x4e,0xce,0xf4,0xd7,0xbd,0x64,0xc4,0xf2,0x17,0x56,0x47,0xc1,0x6b,0x1c,0xdd,0x17,0xb0,0xe1,0x25,0x3b,0xdf,0x85,0xdb -,0x1c,0x67,0xb7,0x32,0xde,0x05,0x8d,0x3a,0x4d,0xee,0x17,0x8f,0x0c,0xd4,0x77,0xfd,0x96,0x33,0x4e,0x9e,0x62,0xe0,0xbc,0xa2,0x92,0xb1,0x81,0xeb,0x08,0xae,0x57,0x30 -,0x4c,0x08,0x4c,0x0a,0x85,0x09,0x86,0x06,0xc2,0x80,0xb0,0x54,0x2c,0x15,0x0a,0x09,0x8a,0x82,0x60,0xa0,0x9c,0x42,0x43,0x0a,0x84,0xc2,0x22,0x30,0x90,0x4c,0x22,0x13 -,0x10,0x89,0x5c,0xdd,0x71,0xba,0xfd,0x7d,0x55,0xe3,0x25,0x55,0xa6,0x47,0x57,0xd5,0x7b,0x6f,0xd5,0xef,0x8b,0xf5,0x9a,0xf8,0xdc,0x96,0x1f,0x3f,0xe0,0x8f,0x97,0x9d -,0x48,0xae,0xfd,0xbc,0xdf,0xf4,0x96,0x7f,0x8d,0xff,0x30,0x4d,0xad,0x5c,0x5f,0x1a,0xbf,0xf7,0xf4,0x6f,0xb5,0xea,0x92,0xf3,0x98,0x34,0x54,0x96,0x79,0x53,0x1b,0x53 -,0x9d,0x42,0x5c,0xaa,0x74,0xfc,0x70,0xdf,0xd5,0x20,0xfb,0xa7,0x6f,0xd2,0x71,0x7b,0x4e,0xb4,0x96,0x6e,0x17,0xdd,0xed,0x7b,0x7e,0xd7,0xf4,0xbe,0x87,0x99,0x07,0x93 -,0x98,0x90,0x89,0x1e,0x58,0x48,0x4b,0x75,0x64,0x9b,0x4e,0xfe,0xa1,0x1b,0x27,0xac,0xc6,0x15,0x1e,0xb3,0xbe,0x7a,0xfe,0x7c,0x00,0x00,0xb7,0x70,0x3d,0xa8,0x38,0x22 -,0xb8,0x2d,0x5f,0x5e,0x64,0xef,0x38,0x02,0x24,0x27,0x78,0x83,0xbf,0x60,0x58,0xbc,0x00,0x0e,0xe0,0x77,0x82,0x61,0x0a,0xaf,0x40,0x38,0xff,0xf1,0x50,0x80,0x34,0x1f -,0xfc,0x21,0x0a,0xcf,0xf5,0x5f,0xbf,0x7f,0xf7,0xb0,0x61,0xc0,0x68,0x28,0x16,0x12,0x85,0x06,0xa1,0x40,0xa8,0x90,0xac,0x24,0x0b,0x05,0x02,0x41,0x50,0x98,0x48,0x26 -,0x12,0x09,0x84,0x84,0x21,0x30,0x88,0x4c,0x22,0x46,0x29,0xe7,0x7f,0xaf,0xed,0xc5,0xb6,0xb6,0x35,0x85,0x21,0x25,0x71,0xdf,0xb7,0xa4,0xeb,0x7e,0x78,0xf9,0xfa,0xe0 -,0x2f,0x6e,0xf9,0x6a,0xff,0x38,0xbe,0x0f,0x08,0x9f,0x8f,0xe9,0x4b,0xf4,0x7d,0x8d,0x06,0xdf,0x39,0x97,0x6a,0x74,0x7c,0x1a,0xf9,0x17,0xe6,0xbd,0xbe,0x30,0xf9,0xa6 -,0x5c,0xc3,0x8d,0x74,0xff,0x87,0x16,0xc4,0xdd,0x26,0xb7,0xe7,0x6c,0x0e,0x6f,0x5d,0x42,0x62,0x42,0xfe,0xd2,0x01,0x3a,0xc7,0x58,0x85,0xdf,0x93,0x4d,0x3a,0x41,0x82 -,0x1e,0xf3,0x1f,0x78,0x26,0x5d,0xa5,0x44,0x8e,0x6d,0x77,0xd3,0xc5,0x4a,0x3a,0x37,0x98,0x65,0x5f,0xf6,0xdb,0x45,0x21,0xa3,0x6f,0xd1,0xba,0x18,0xa8,0x87,0x95,0xa1 -,0xed,0x3f,0x63,0xb8,0x88,0x96,0x8e,0xe5,0x86,0xcd,0x0e,0xe5,0x95,0xb8,0xe0,0x82,0x40,0xd0,0xc8,0xc1,0xb8,0xa8,0xea,0x3c,0xa7,0xcd,0x3e,0x85,0xcb,0x3d,0x6f,0x65 -,0xdd,0x9a,0x42,0x15,0x16,0xf5,0x80,0x13,0x5a,0xd9,0x00,0x17,0x0b,0x01,0x50,0xc1,0x40,0xc0,0x58,0x4e,0x16,0x1c,0x05,0x83,0x01,0x61,0x28,0x50,0x2c,0x15,0x0b,0x05 -,0xc2,0xc1,0x40,0xa8,0x50,0x2a,0x23,0x0b,0x84,0x46,0xa1,0x32,0x88,0x54,0x42,0x37,0xb7,0xd9,0x5f,0x7f,0xb4,0xfd,0xff,0x8d,0x66,0xb7,0xaa,0xdf,0x18,0xa9,0x75,0x2e -,0xf9,0xff,0x19,0x5b,0xee,0xb5,0x4f,0x2e,0x7a,0xad,0x03,0xd1,0xf4,0xe5,0x69,0x7e,0xb6,0xcf,0xe1,0xe0,0x26,0xda,0x5d,0x7a,0x68,0xd0,0x07,0x6e,0xc7,0x47,0xcf,0x2f -,0x44,0x19,0x73,0x48,0xd6,0x3b,0xfb,0xd7,0xe3,0xfe,0xcf,0xfe,0x78,0x7f,0x12,0xd1,0xe2,0x7b,0xb9,0x73,0x92,0xf0,0x71,0xfb,0x6e,0x7c,0xbd,0xed,0xf4,0x78,0x60,0x01 -,0x8f,0xbb,0xfd,0x5b,0xca,0xef,0x7d,0x30,0xf3,0xf1,0x0f,0xdb,0x7f,0x0b,0xff,0xfe,0xe5,0xf7,0xf3,0x8e,0x65,0xd7,0x9f,0x34,0x28,0xf6,0xfd,0xe3,0x87,0xb7,0x7f,0x8d -,0xff,0xbf,0xba,0xdd,0xb4,0xf2,0xf2,0xb6,0x72,0xb6,0xb6,0xb7,0x2d,0x31,0xd2,0x3c,0x04,0x49,0xc8,0x5b,0x68,0x78,0x1e,0x20,0x03,0x4d,0x77,0xb9,0xeb,0x15,0x7e,0xff -,0x82,0x98,0x3d,0xce,0xfb,0xd7,0x0e,0xe9,0xeb,0x9e,0xb0,0x20,0x0d,0xa0,0x3c,0x40,0x0f,0x30,0x02,0x40,0x55,0x5a,0x05,0x4b,0x48,0x0e,0xff,0xf1,0x50,0x80,0x32,0x1f -,0xfc,0x21,0x0a,0xcf,0xfb,0xfb,0xff,0x7f,0xff,0xb0,0x40,0xc0,0x58,0x30,0x16,0x3a,0x05,0x44,0xc1,0x40,0xb0,0x50,0x4c,0x37,0x0b,0x05,0x44,0x81,0x30,0x90,0xcc,0x22 -,0x22,0x08,0xa1,0xce,0xb7,0xe7,0xdb,0xed,0xc7,0x3a,0xbd,0xf1,0x53,0x75,0x22,0x2a,0x55,0xaf,0x72,0xf8,0xce,0xe5,0xc9,0x6a,0xfa,0xe8,0x7d,0x0b,0x43,0x53,0xfa,0xd6 -,0x8f,0x53,0xff,0x74,0xa3,0x9f,0x0b,0xcb,0xf5,0xed,0x3d,0x46,0xd0,0x3c,0x36,0xbe,0x01,0xcf,0xc2,0xfd,0xfc,0x6d,0x02,0xfc,0xff,0x91,0x96,0x9d,0xba,0x8b,0x58,0xde -,0xe4,0x33,0x72,0x6e,0x74,0x5c,0xee,0x87,0x26,0x31,0xd8,0xa6,0x2c,0x85,0xa9,0x4e,0x23,0xb7,0xd6,0xbd,0x80,0xca,0x2b,0x10,0xa0,0x5b,0x5f,0x74,0x52,0x69,0xee,0x9a -,0x77,0x11,0x5f,0x3a,0xa9,0x2b,0x61,0x6b,0x3c,0xe1,0x92,0xdb,0xaf,0x37,0xb3,0x7b,0x55,0xe0,0xd3,0x1e,0x0b,0x71,0x8f,0xe6,0x58,0xcc,0xb3,0xf4,0x90,0x90,0x13,0xc3 -,0x55,0x03,0x90,0x57,0xb4,0x8c,0x35,0xe5,0x2b,0xe1,0x8d,0x65,0xdd,0x70,0x3b,0x03,0x65,0x32,0xc2,0xea,0xba,0xa0,0xb4,0x6c,0x19,0x81,0xce,0xae,0xe4,0x25,0x48,0xd5 -,0x65,0x6e,0x00,0x59,0x40,0x2a,0x98,0x90,0x14,0x0b,0x1d,0x02,0xe1,0x60,0xa0,0x58,0x6e,0x14,0x0a,0x85,0x82,0xa2,0x20,0xa8,0x44,0x2a,0x13,0x0a,0x84,0xd0,0x23,0x7e -,0xbf,0xa5,0x4f,0x6f,0x7f,0x3e,0xbd,0xb7,0x29,0x79,0x52,0x54,0xc8,0xd3,0xdb,0xe7,0xf1,0xce,0xf8,0xe6,0xea,0xea,0x5d,0xf1,0xcf,0xd0,0x5e,0xed,0x5b,0x3a,0x8b,0xc7 -,0x6e,0xac,0xaf,0xcd,0xa7,0xed,0xe1,0xdf,0xdd,0xcf,0xe8,0xbb,0xaf,0xa4,0x46,0x97,0xf8,0xb7,0x74,0x17,0x3b,0xfc,0x17,0xac,0x96,0x75,0x07,0x2f,0xf9,0x3f,0xeb,0xae -,0xdb,0x3b,0xa8,0x00,0x0c,0x3c,0x52,0x9e,0x65,0xb0,0x82,0xdf,0xbf,0x5f,0x49,0xfd,0x57,0xaa,0x7f,0xf2,0xf3,0xeb,0xa7,0xa4,0xe4,0x17,0x97,0x2b,0xe8,0xa0,0xea,0x3c -,0xfd,0xde,0x29,0x3b,0xd9,0xf2,0x07,0x0f,0x0f,0x13,0x82,0x4e,0x93,0x98,0x81,0xf6,0xef,0xe0,0xf9,0x76,0xf2,0xe1,0x11,0x29,0x55,0xc0,0x7a,0x6c,0x13,0x36,0x7d,0x50 -,0xf7,0xaf,0xc1,0x0e,0x07,0x90,0x03,0xfa,0xa0,0xbf,0x72,0x7d,0xe2,0x67,0x79,0xeb,0x2c,0x77,0x2a,0x99,0x33,0xf2,0x1e,0xe0,0xff,0xfd,0x8f,0x5f,0xb8,0x0a,0x54,0x1e -,0xb8,0xef,0x01,0x62,0xa0,0x54,0xba,0x13,0x03,0x80,0xff,0xf1,0x50,0x80,0x2f,0xbf,0xfc,0x21,0x0a,0xcf,0xef,0xff,0x7e,0x7f,0xff,0xab,0x61,0xc0,0x8c,0x28,0x16,0x11 -,0x85,0x0a,0xc2,0x70,0xb0,0x50,0x6a,0x16,0x0a,0x85,0x02,0x63,0x11,0x98,0x85,0x2f,0x7b,0x57,0x15,0xd7,0x8e,0x12,0x72,0xb5,0x25,0xe5,0xe2,0x6a,0xeb,0x2e,0xb5,0x3c -,0x35,0x1a,0xaf,0xd7,0x81,0xf7,0xf6,0x7f,0xfd,0x1e,0xfe,0x72,0x79,0x5e,0x91,0xbf,0x39,0xf2,0x5a,0xf9,0xfa,0xcf,0xf4,0x69,0xf5,0x00,0x3f,0x07,0xd3,0x72,0xfd,0x4e -,0x1d,0xca,0x81,0x3f,0x4e,0x90,0x3b,0x88,0x77,0xf8,0x31,0x29,0x6e,0x00,0xd7,0x51,0x47,0xe0,0x39,0x75,0x54,0x7d,0x64,0xf2,0xff,0x40,0x6d,0xfa,0xa6,0xec,0xe6,0x5c -,0x5c,0x60,0x51,0x98,0x38,0xa3,0x75,0x79,0xf5,0x16,0x92,0xe5,0x5a,0x32,0xcc,0xbe,0x51,0x0a,0x77,0x83,0xeb,0x1e,0xbb,0xf0,0x14,0x30,0xa5,0x4b,0x65,0x81,0x59,0xa9 -,0x5b,0xd6,0x94,0x56,0xb6,0xb9,0x29,0xf7,0xb2,0xa0,0x5c,0x09,0x3b,0xae,0xa8,0x64,0xa7,0x42,0x7f,0x8a,0xd6,0xba,0xd5,0x26,0xa5,0xe7,0x10,0xbd,0xa8,0x2d,0xe7,0xd0 -,0xde,0x20,0x14,0x46,0xe0,0x04,0x51,0x02,0x99,0x87,0x01,0x60,0xc0,0x58,0x66,0x15,0x0a,0x05,0x8f,0x01,0x61,0x38,0x54,0xe6,0x35,0x09,0x84,0x42,0x62,0x10,0x98,0x84 -,0x4d,0xf9,0xf7,0x9f,0x5f,0xc7,0xb5,0x6a,0xb3,0x8e,0x61,0x4a,0x8d,0x66,0x9a,0xe7,0x8f,0x3c,0xca,0xe3,0xc7,0x3e,0xd3,0xcf,0x3a,0xd4,0x1a,0x52,0x8d,0x15,0x7c,0x73 -,0x17,0xe7,0x12,0xbc,0x7d,0xbf,0x34,0xeb,0xed,0x4f,0xf0,0x67,0xf2,0xe2,0xe8,0x1f,0xcf,0x02,0x4d,0xe6,0xd0,0x1b,0x4e,0xeb,0x07,0x7f,0xde,0xa8,0x9b,0x9a,0x56,0x91 -,0xf5,0xce,0x84,0xa6,0x44,0x93,0x1d,0x44,0xca,0x19,0xc8,0xad,0x54,0x5a,0x7d,0x72,0x15,0xf4,0x7d,0x8b,0x1b,0x42,0xa8,0x8e,0xc7,0x6b,0x9d,0xbd,0xd4,0x70,0xe0,0xe7 -,0xf0,0x71,0xe1,0xe6,0x02,0xb8,0x0e,0x7c,0xad,0xc4,0x79,0x90,0x5c,0xc6,0x40,0xe1,0xe3,0xc8,0xe3,0xf3,0xe4,0xee,0xe3,0xc5,0xc0,0x7c,0xc3,0x88,0x1e,0x04,0x00,0x5a -,0x97,0xef,0x07,0xbb,0xde,0x17,0x7e,0x4b,0xba,0x00,0x03,0xcc,0x0d,0x8b,0x4e,0x4f,0x77,0xc4,0x5e,0x32,0x4d,0xeb,0x83,0xdc,0x7a,0x27,0x78,0xab,0x60,0x02,0xcf,0x64 -,0x3b,0x82,0x00,0x0b,0xc5,0x10,0x38,0xff,0xf1,0x50,0x80,0x2f,0xbf,0xfc,0x21,0x0a,0xcf,0xfe,0xfb,0xff,0xcf,0xff,0xac,0x60,0xc0,0x58,0x30,0x24,0x13,0x09,0x42,0x83 -,0x50,0xa0,0x98,0x2a,0x16,0x0a,0x85,0x04,0xc1,0x40,0x90,0x50,0x26,0x15,0x09,0x04,0xc2,0xa1,0x31,0x0a,0x9f,0x33,0xeb,0xe7,0xab,0x9c,0xcb,0x69,0xca,0xb5,0x37,0xc7 -,0x37,0xbb,0xb8,0x75,0xac,0x73,0x94,0xe1,0x73,0xdb,0xc8,0xe7,0xfe,0xe7,0xc5,0xcf,0xf5,0x47,0xb6,0xf3,0x87,0xcb,0x3e,0xec,0xfb,0xf4,0x27,0x83,0x79,0x15,0xb7,0x79 -,0xdd,0xbb,0x1e,0x94,0x4e,0xe0,0x87,0xee,0xe7,0x2f,0xa3,0x89,0xbe,0x7a,0xe6,0x1e,0xa0,0x78,0x46,0xe6,0xa3,0xed,0xa6,0x43,0xcb,0xac,0x6f,0x7e,0xa9,0x6e,0xa0,0x63 -,0x21,0x5f,0xed,0xd4,0xb9,0x6f,0x0e,0xcf,0xb5,0xfe,0x6f,0x61,0x3f,0x9a,0x22,0xcb,0x9e,0xa5,0x1b,0xca,0x51,0x5a,0xdd,0xf2,0x46,0xd3,0x55,0x14,0x71,0x82,0x4c,0x8f -,0x5b,0xdf,0x48,0x07,0x80,0x01,0xde,0x02,0xa0,0xee,0xd8,0x25,0x1e,0x62,0x30,0x6c,0x65,0x82,0xab,0x61,0x84,0xa7,0x72,0x2a,0x49,0xb0,0xb8,0x9c,0x0a,0x0b,0x96,0x97 -,0x12,0xb1,0x36,0xd8,0x50,0x04,0xc0,0x52,0xa8,0x58,0x30,0x26,0x2a,0x05,0x84,0x81,0x62,0xa0,0x9c,0x2c,0x15,0x23,0x84,0xc4,0xe1,0x51,0x08,0x4c,0x62,0x13,0x10,0x91 -,0xcb,0x75,0xd7,0x3d,0x77,0xfc,0xfe,0x99,0xc5,0x4c,0xab,0xa8,0xae,0xb2,0xe7,0xb3,0x73,0xc7,0xc5,0x57,0x37,0xdf,0x9e,0x39,0xfc,0x6e,0xc7,0xa9,0x67,0x5e,0x1d,0x16 -,0x68,0x7b,0x74,0xf1,0xde,0x9e,0x6d,0x5a,0xfa,0xaf,0xfc,0xc1,0xd1,0xec,0xd3,0x94,0x49,0xdb,0xc7,0x79,0x9d,0x45,0xa6,0x93,0xb3,0x9e,0xfd,0x8b,0x5c,0xf2,0x45,0x3b -,0x3f,0x5f,0x6b,0x9c,0xea,0xf7,0x3f,0xef,0xf8,0x3f,0xfb,0x3c,0xbf,0xfe,0x5b,0xb4,0x5d,0x6f,0x99,0x8d,0x13,0x97,0x21,0xb5,0x1e,0xd9,0x79,0x59,0xbc,0x2b,0x50,0x8c -,0xfa,0x11,0xcd,0x4e,0x7c,0xa4,0x07,0x8f,0x01,0xc0,0xf3,0x80,0x09,0x25,0xef,0x5e,0xbf,0xf2,0x40,0x01,0x21,0x7e,0x40,0xb9,0xe1,0xca,0x09,0x73,0x39,0x00,0x01,0xe6 -,0x69,0xda,0x0e,0xf8,0x7e,0x47,0xae,0x8a,0x5d,0xda,0xd1,0x77,0x7f,0xdc,0x29,0x44,0xab,0x07,0xb1,0x1a,0x48,0xef,0x54,0x77,0xc7,0xb8,0x8a,0xc5,0x90,0x15,0x28,0x09 -,0x8a,0x1c,0xc0,0xe0,0xff,0xf1,0x50,0x80,0x30,0x3f,0xfc,0x21,0x0a,0xcf,0xfd,0xdf,0xff,0xff,0xfd,0xb0,0x60,0xc1,0x10,0x2c,0x34,0x13,0x05,0x02,0xc1,0x43,0xa8,0x58 -,0x4a,0x12,0x12,0x05,0x42,0x61,0x13,0x18,0x44,0xca,0xcd,0x73,0xf1,0xdf,0x9f,0x1e,0xd9,0x57,0x55,0x9d,0x72,0x5a,0xab,0x54,0xd7,0x53,0x9c,0xa6,0x38,0x4a,0xfc,0x6a -,0xc1,0xfc,0xe0,0xd1,0x97,0xa6,0xa8,0xec,0xfc,0xe7,0xfc,0x4e,0x33,0x27,0x2d,0x25,0xcd,0x78,0xf8,0x9d,0x76,0x92,0xf4,0x46,0xf7,0xd7,0x50,0x6d,0x7e,0x06,0xef,0xf7 -,0x5f,0x15,0x36,0x91,0x12,0x63,0x91,0xfa,0x06,0xfd,0x46,0xba,0x14,0xd4,0xbe,0xd7,0x7c,0xbc,0x26,0xe1,0xaf,0x40,0x9b,0x0c,0x12,0x3c,0xc6,0xc2,0x00,0x96,0xe8,0x88 -,0x95,0x5e,0xbd,0x52,0x32,0xff,0x5a,0x51,0xe3,0x28,0xe5,0x5f,0xac,0x76,0xf7,0xbe,0xa5,0xcb,0x8c,0xcf,0x41,0x41,0x21,0x61,0x43,0xd7,0x2d,0x48,0x51,0x7c,0xd8,0x58 -,0x98,0xec,0x33,0x69,0xc0,0xcf,0x0a,0x9c,0xa1,0x8b,0xa3,0x3e,0xc4,0x16,0x56,0xd9,0x75,0x1a,0xa9,0x4a,0x87,0x99,0x94,0xae,0x55,0xef,0xa5,0xd7,0xd7,0x15,0x55,0x84 -,0xda,0x67,0xb1,0x0a,0x80,0x9d,0x40,0xb0,0x09,0xe2,0x0b,0x0e,0x02,0x81,0x80,0xa0,0x58,0x88,0x36,0x1a,0x06,0x02,0xc1,0x50,0xa0,0x54,0x62,0x15,0x19,0x85,0x46,0x23 -,0x50,0x88,0x54,0x22,0x37,0xe5,0x95,0xe7,0xc7,0x9d,0xd7,0x9f,0x1d,0x6e,0xaa,0xd5,0x5a,0x99,0x35,0x3d,0xbd,0x71,0xdc,0x57,0x92,0xd7,0x47,0x91,0xe3,0xa6,0xfe,0xde -,0xff,0x25,0x24,0xe8,0x7f,0xde,0xbd,0x2f,0xcf,0x74,0x28,0xf4,0xf8,0x04,0xb7,0x6b,0x73,0xea,0xff,0x81,0xfe,0xef,0x93,0xed,0x7a,0x07,0xf1,0x96,0xd3,0xd2,0xbf,0xd5 -,0xe9,0x71,0x4b,0x94,0x6c,0x0f,0x84,0xfc,0x1f,0xfc,0xe2,0x2b,0xbf,0x0c,0x12,0xad,0xee,0xe7,0x45,0xe9,0xcf,0xfa,0x9c,0x4e,0xc9,0xbf,0xd5,0xbd,0x78,0x35,0xf7,0x38 -,0xf1,0x3a,0xb9,0xc7,0x9f,0x08,0x17,0xc0,0x78,0x3e,0xf0,0x0e,0x72,0x62,0x58,0x00,0xf2,0xe5,0xc3,0x82,0x4f,0x30,0xf1,0x00,0x0f,0xbc,0x79,0xbc,0xf9,0x19,0x25,0xdd -,0xef,0xaa,0x66,0x9c,0x50,0x21,0xc8,0x5b,0xba,0x98,0x6c,0x44,0x00,0x03,0xc0,0x14,0x81,0x52,0x68,0x5c,0x00,0xa5,0x8a,0x0f,0x30,0x0a,0xd8,0x00,0xf3,0x00,0x0b,0x10 -,0x02,0xe4,0x14,0xd8,0x07,0xff,0xf1,0x50,0x80,0x2e,0xbf,0xfc,0x21,0x0a,0xcf,0xe7,0x77,0xfd,0xdf,0xfc,0xaa,0x81,0x30,0x60,0x48,0x36,0x12,0x05,0x82,0x82,0x60,0xa0 -,0xd8,0x28,0x45,0x18,0x84,0xc6,0xa1,0x31,0x28,0x44,0x46,0x11,0x33,0xed,0xaa,0x7d,0x78,0xeb,0xd6,0xba,0xef,0x5c,0xbd,0xb9,0x55,0x35,0x8b,0xbd,0xf9,0xba,0x98,0xd7 -,0xaa,0xf8,0xe6,0xd3,0xfd,0xbf,0x50,0x9f,0x65,0x9b,0x99,0xe4,0xbd,0x0f,0xd7,0x3a,0xfe,0xbf,0xd1,0x1b,0xee,0xa1,0xe0,0xff,0x8a,0x01,0xfc,0xb4,0x07,0x0f,0xc8,0xb5 -,0x19,0xa0,0x57,0xda,0x4b,0xc2,0xe3,0xd4,0x04,0x04,0x69,0x06,0xe2,0x0c,0x95,0x73,0xa3,0x9a,0xbd,0x1e,0xc1,0xbe,0xf3,0x06,0x79,0xa5,0xdf,0x81,0x01,0x55,0x2f,0xe7 -,0x53,0x65,0x5f,0x1e,0x19,0xcc,0x1b,0xfe,0xd6,0x80,0xfa,0x75,0x62,0x1f,0x69,0x55,0xf8,0x3d,0xc7,0x78,0xbe,0xaf,0xa1,0xee,0x81,0xee,0x3d,0xc0,0xa0,0x00,0x3c,0xa3 -,0xde,0x80,0x8b,0xbc,0x3d,0xd0,0x00,0x3c,0xc2,0xea,0x5a,0x93,0xbc,0x0b,0xce,0xec,0x3f,0x14,0x1d,0xe0,0x96,0x48,0x8a,0x9d,0x81,0x42,0x3a,0xac,0x32,0xc0,0x09,0x80 -,0xa0,0x0a,0x76,0x24,0x05,0x83,0x01,0x61,0xa0,0x58,0x2a,0x16,0x2a,0x05,0xc4,0x81,0x70,0xaa,0x0c,0x22,0x25,0x09,0x85,0x42,0x64,0x11,0x37,0x9d,0x73,0xc7,0x8d,0x5c -,0x95,0x2b,0x32,0x4a,0xba,0x6a,0xbc,0xf7,0xed,0xcf,0x1e,0xbe,0x39,0xf3,0xaf,0x77,0x9e,0x6e,0xaf,0x5c,0x01,0xd9,0x2e,0xeb,0xbd,0xde,0xdb,0x60,0xd0,0xfa,0x7b,0xa3 -,0x78,0xe3,0xdd,0xe9,0x76,0xd1,0xc8,0x37,0x34,0x64,0xee,0x78,0x72,0xe6,0xb2,0xef,0xbb,0xf1,0x72,0xd2,0x7c,0x39,0x6a,0xec,0xa2,0xab,0x4f,0x56,0xde,0x62,0xdf,0xd9 -,0xe3,0x5f,0x7a,0x57,0x44,0x3c,0x8b,0x78,0x1d,0x6d,0x11,0xf0,0xfd,0x2e,0x05,0xa1,0x3e,0x16,0xc8,0x57,0x9f,0x18,0xe1,0xc5,0xc9,0x73,0x8b,0x91,0xdc,0x49,0xc5,0xcf -,0xef,0xe7,0xc0,0x48,0x00,0xf2,0x00,0x3c,0xb9,0x71,0xae,0x0f,0x10,0x01,0xf0,0x87,0x01,0x50,0x1c,0xba,0x1e,0xb0,0x00,0x1d,0xc7,0x74,0x77,0x00,0xa4,0x80,0x79,0xce -,0x4e,0x1d,0xe0,0x03,0xf2,0x5d,0xf0,0x1e,0x20,0x00,0x7a,0xdd,0xc0,0x3b,0xa0,0x1f,0x00,0x1d,0xee,0xe9,0xff,0xb0,0x0a,0x02,0x00,0x70,0xff,0xf1,0x50,0x80,0x2d,0xff -,0xfc,0x21,0x0a,0xcf,0xe8,0xef,0xff,0xff,0xfc,0xac,0x81,0x30,0x60,0x4a,0x14,0x23,0x05,0x04,0xc2,0x40,0xb0,0x54,0x48,0x55,0x09,0x05,0x02,0x64,0x12,0x18,0x44,0xef -,0x5c,0x55,0x70,0x2e,0xb8,0xca,0xdb,0x55,0x2b,0x5c,0xd4,0xe3,0x2f,0x5c,0x29,0xcd,0xd5,0x93,0x2f,0xfe,0xff,0x43,0x0f,0xfc,0xdd,0xb7,0xd9,0x22,0x5d,0x5d,0xc0,0x9e -,0xbf,0xdf,0x7e,0x4b,0xf1,0xda,0x51,0x38,0x22,0xf8,0x81,0x7c,0xfa,0x81,0x36,0xc3,0x9e,0xc8,0xd7,0xf7,0x9e,0xec,0x79,0x0c,0x76,0x3e,0x2d,0xa3,0xdf,0x7c,0xa0,0xbd -,0x79,0xac,0xfc,0x1a,0xfe,0x4a,0xf7,0x0f,0x74,0xff,0xc2,0xbf,0xf3,0xe9,0x13,0x71,0x2e,0x29,0x98,0x77,0x9d,0xef,0xb8,0xdc,0xc4,0x91,0xa7,0xa9,0x1e,0x5b,0x63,0xda -,0xc9,0x06,0x29,0xe6,0xd0,0x78,0x66,0x93,0xfc,0x41,0x77,0xb7,0x80,0x20,0x1a,0xc8,0xfb,0xeb,0xbb,0x05,0x44,0xcd,0x3e,0x30,0x73,0xf7,0x2a,0xb5,0x56,0x88,0x0f,0x73 -,0x30,0xc1,0x1a,0x11,0xb4,0x85,0x94,0x73,0x04,0xe9,0x60,0x40,0xaa,0x00,0x16,0x36,0x81,0x50,0x81,0x62,0x20,0x60,0x2c,0x18,0x0b,0x05,0x06,0xc1,0x40,0xb0,0x50,0x2c -,0x15,0x0b,0x09,0x04,0xe1,0x51,0x38,0x4c,0x2a,0x13,0x12,0x84,0xc6,0x22,0x31,0x09,0x15,0xbe,0x37,0xed,0xef,0xe7,0xd5,0xf1,0xbd,0x5f,0x8d,0x64,0x52,0x4e,0x2b,0x5d -,0x6e,0xd3,0x23,0x7e,0xde,0xb8,0xbd,0xfb,0x67,0x43,0xea,0xfb,0xf7,0xe5,0xaf,0xc7,0x9f,0xea,0xaf,0x8c,0xa5,0xac,0xec,0xa7,0x46,0x87,0x79,0xff,0x9b,0x47,0xf5,0x7f -,0x5d,0xfb,0xc0,0xc2,0xaa,0x8d,0xdf,0xd0,0x35,0xd5,0xf7,0x6d,0xe3,0xff,0x67,0xfe,0x57,0xfc,0x96,0xfb,0xd1,0xf1,0xef,0xea,0xe0,0x33,0xd2,0x38,0x79,0x44,0xaf,0x9b -,0x8e,0x1f,0xee,0x2d,0xd6,0xfb,0xfe,0x7f,0xec,0xff,0x35,0x9a,0x9e,0x51,0xce,0x78,0xf0,0xe2,0xe2,0x07,0x82,0x78,0x80,0xf2,0x00,0x03,0xd6,0x5f,0xd8,0x9e,0x20,0x0e -,0x47,0xbb,0xdd,0x04,0x43,0xff,0x53,0xbb,0x30,0xf1,0xa0,0x07,0x20,0xb9,0xdd,0x07,0x73,0xfd,0x50,0xb9,0xdd,0x84,0x4a,0xd8,0x2e,0x95,0xe0,0x0e,0xf0,0xf5,0xe4,0x77 -,0xc1,0x12,0x6b,0x18,0x00,0x58,0x05,0x40,0x70,0xff,0xf1,0x50,0x80,0x2c,0x5f,0xfc,0x21,0x2a,0xcf,0xff,0x6a,0x7f,0xff,0xbc,0xae,0x80,0xb0,0x50,0x30,0x26,0x0a,0x05 -,0x84,0x82,0x50,0xa3,0x08,0x4a,0x11,0x11,0x88,0x58,0xf5,0xd3,0xbf,0x87,0x1e,0x2f,0x4d,0xd2,0xb8,0xde,0x5d,0xc8,0x5c,0xb6,0xb6,0xab,0x6f,0x51,0x2b,0xae,0x84,0xbd -,0x5f,0xab,0xc7,0xfa,0x21,0x3e,0x0f,0xa0,0x5f,0x55,0x7e,0x1d,0x9b,0x34,0x2e,0xe1,0xa8,0x29,0x54,0x7c,0xc1,0x3f,0x66,0x33,0xbf,0xff,0xed,0x37,0xe0,0x79,0x07,0x20 -,0xef,0xce,0xf9,0x3f,0xa6,0xf9,0xb7,0x0d,0xd4,0x7f,0x65,0xb0,0x33,0x3d,0x59,0xa5,0xff,0x62,0x85,0xdc,0xfc,0x01,0xd4,0xbb,0xfa,0xb9,0x57,0xae,0x53,0x2f,0xe2,0xf3 -,0x99,0x7a,0xa3,0x1f,0x52,0x10,0x50,0xb3,0x2f,0x47,0x89,0x6c,0xe9,0xed,0x27,0xdf,0x04,0x91,0x45,0x47,0x9c,0x8c,0x49,0xd8,0x52,0xcb,0xd0,0x08,0xe2,0x15,0x4a,0xe2 -,0xe7,0x32,0xaa,0xa3,0x41,0x10,0x48,0x1c,0x05,0x51,0x04,0xee,0x00,0x08,0x24,0x05,0x3b,0x05,0x42,0x81,0x61,0x20,0x5c,0x28,0x16,0x0a,0x05,0x83,0x01,0x65,0x20,0x58 -,0x2a,0x13,0x09,0x04,0xc2,0xa1,0x11,0x18,0x44,0x26,0x21,0x42,0x77,0xc7,0x37,0x4e,0x13,0xc5,0xde,0x4e,0x78,0xdc,0x8b,0x5d,0xde,0x4e,0xb9,0xbc,0xd3,0x35,0x51,0xad -,0x79,0x05,0xad,0xf7,0x7f,0x4c,0xe7,0x4f,0xea,0xef,0xf5,0x3c,0x5f,0xff,0xdb,0x28,0xe6,0xed,0xbc,0x8a,0x99,0xdf,0xd0,0xd6,0x9d,0xd6,0xf2,0xfb,0xba,0xf5,0xf5,0x22 -,0x1d,0x9d,0xfd,0x9c,0x7f,0x8a,0x36,0x15,0xef,0x9f,0x6c,0x65,0x5c,0xf3,0xf4,0x6e,0x5e,0xaf,0xd6,0x90,0x7c,0x2d,0xb7,0x8a,0x94,0x9c,0xd2,0xf0,0xa6,0xfb,0xfa,0x37 -,0x9f,0xe2,0xd8,0xe9,0x54,0xbd,0x4c,0x13,0x99,0x74,0xaf,0xe3,0x75,0xf1,0x2f,0x4b,0xef,0xbb,0xd3,0x54,0x45,0x27,0xcc,0x0b,0x3c,0x2e,0x1a,0xfa,0xa1,0xc1,0xa2,0xa1 -,0xb1,0x14,0x84,0xa3,0x35,0x08,0xa3,0xa3,0x33,0x9f,0xae,0x5a,0x00,0xb7,0x1b,0x5d,0xa5,0xdc,0x1d,0xd5,0x2d,0xdd,0xba,0x60,0x70,0xb2,0xf6,0x40,0x95,0xc0,0xb1,0xa2 -,0xb8,0x01,0x40,0xcf,0x50,0x25,0x12,0x80,0xb1,0x70,0x38,0xff,0xf1,0x50,0x80,0x34,0x5f,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x5d,0x18,0x2d,0x10,0xa9,0x42,0x44,0x53,0x82 -,0x2e,0xe5,0x6a,0xc3,0xc1,0xb3,0x5c,0x98,0xd7,0xaa,0x08,0x5e,0x05,0x6d,0x8a,0xd1,0xd7,0xd4,0xf0,0x0c,0xde,0x86,0x3b,0x8a,0xc1,0xee,0x51,0x96,0x28,0xc9,0xc1,0x1a -,0x02,0x2d,0x92,0x6d,0xba,0xa3,0xb6,0xa9,0x06,0xfe,0xbe,0xbd,0x19,0x53,0x25,0x65,0x4e,0x6d,0xdf,0xfd,0x7c,0xf9,0x90,0x40,0xee,0xa2,0x83,0x63,0xb2,0x8e,0xb9,0x34 -,0xd0,0x55,0x96,0x13,0xde,0x10,0xa8,0x85,0x11,0x36,0xfb,0x2d,0xf2,0x6b,0xbb,0x84,0xb5,0xd1,0x41,0x08,0x04,0xb3,0x84,0x90,0x57,0x22,0x0c,0x12,0x67,0xd5,0x08,0xf0 -,0xbe,0x7b,0xc7,0x7b,0x9d,0x17,0xc5,0xc6,0x16,0x1e,0x7c,0x17,0x02,0xfa,0xbc,0x3a,0x2a,0x6f,0x19,0x9d,0x22,0x97,0x55,0x57,0x18,0x5b,0xda,0xee,0xbd,0x99,0x73,0x7d -,0x2d,0x18,0x53,0x6f,0x7c,0x02,0x1b,0x94,0x9c,0x7a,0xde,0x39,0x40,0x30,0x5f,0x91,0xbc,0x37,0x10,0x7e,0x1e,0x13,0x19,0x24,0x05,0x81,0xf0,0x2c,0x59,0xa9,0x24,0x76 -,0xc7,0x65,0x23,0x68,0xc6,0xc2,0x02,0xc2,0x31,0x31,0xc0,0xc7,0x32,0x7a,0x04,0x0a,0x0a,0x30,0x59,0xc1,0x62,0x88,0xd0,0x94,0xa2,0xe2,0x5b,0x42,0x0b,0x1d,0x14,0x3f -,0x3e,0xac,0x16,0x49,0x20,0x22,0xdc,0xde,0x86,0x73,0xc8,0x1f,0xa8,0x28,0x2d,0xb7,0x38,0x75,0xc5,0x75,0x4f,0xba,0xaa,0x4e,0x0e,0x5f,0xc7,0x5f,0x7f,0x9f,0xfe,0xea -,0xf0,0x97,0xdf,0x87,0xe2,0x9f,0xbf,0x96,0x7f,0xb7,0xfc,0x7e,0x5d,0x55,0xcf,0xe9,0xea,0xcb,0xfb,0xf7,0x2f,0xc7,0x5f,0x20,0x4e,0x12,0xff,0x27,0xe4,0xf3,0x75,0x78 -,0xa8,0xf3,0x9f,0x5f,0x72,0xa0,0x48,0x5b,0xd1,0x0a,0x3c,0xf3,0x18,0x68,0xa0,0x1a,0xfc,0xc4,0x92,0x41,0x07,0xdb,0x13,0x28,0x04,0xab,0x62,0xd2,0x62,0x26,0x23,0x9a -,0xd2,0x29,0xd3,0x35,0xf0,0x0d,0x32,0x03,0x8d,0xb7,0x53,0x66,0x75,0x23,0xdb,0x7d,0xe4,0xd9,0x63,0xd5,0x92,0xd9,0xaf,0xfe,0x93,0x9c,0xe8,0x9e,0x6f,0xe6,0x54,0xf8 -,0x8e,0x89,0x01,0xb8,0x13,0x48,0x55,0xc6,0xcd,0x30,0x2d,0x7b,0x2f,0x3d,0x9b,0x69,0xda,0xaf,0xd3,0xc3,0x4c,0x24,0xa3,0x5a,0x4f,0x95,0xec,0x9a,0x04,0x2c,0xf2,0xda -,0x4d,0xbd,0x29,0x7a,0x87,0xbb,0x2e,0x4e,0x9c,0xb9,0xd7,0xbd,0xef,0x9a,0x2d,0x2b,0x4d,0xb0,0xda,0xee,0x64,0xc1,0x6c,0x36,0xda,0x9d,0xb1,0x4d,0xcc,0x92,0x63,0x1d -,0x4f,0x9d,0x4f,0x1d,0x4c,0x75,0xf0,0x88,0xad,0x5f,0x92,0xd5,0x38,0xff,0xf1,0x50,0x80,0x32,0x9f,0xfc,0x21,0x6a,0xcf,0xff,0x7f,0xff,0xf6,0xfe,0xb4,0x61,0x40,0x58 -,0x30,0x16,0x12,0x09,0x84,0x81,0x61,0x20,0x98,0x68,0x16,0x0a,0x09,0x82,0xa2,0x20,0xa0,0x48,0x26,0x21,0x09,0x85,0x42,0x21,0x30,0x88,0x4c,0x22,0x25,0x08,0x89,0x17 -,0x57,0x2f,0x73,0x8a,0xef,0x55,0xae,0x3c,0x66,0xaa,0x5d,0x03,0x57,0xd7,0x7c,0x7a,0xd3,0x8e,0x6b,0xce,0xb4,0x3e,0x7f,0xc7,0xbb,0xfb,0xd6,0xa6,0x3d,0xa8,0xea,0xba -,0xfc,0x28,0xe7,0xf0,0x5f,0x91,0x17,0x87,0x0b,0xac,0x4d,0x2c,0x8f,0xc2,0x31,0x1d,0x4e,0xa5,0xd0,0xbe,0x0f,0x6f,0xce,0x62,0x0f,0xb7,0xc6,0xa1,0x71,0x03,0x7a,0xf3 -,0xff,0x63,0xab,0xfc,0xa9,0xaf,0x09,0x81,0x54,0x7e,0xe8,0x6b,0xdf,0x94,0x50,0xdd,0x1b,0xf4,0x9f,0x59,0x4e,0xa2,0x40,0x0d,0x2d,0x78,0xe2,0x32,0xac,0xab,0x7e,0x53 -,0x17,0x1b,0x66,0x5b,0xe3,0x4d,0x77,0x8a,0xab,0x5c,0x47,0xc9,0xeb,0x2e,0x0e,0x3c,0xce,0xfa,0x83,0x33,0x2e,0xaf,0x9f,0x4a,0xab,0xbd,0xcf,0x0d,0xaa,0x18,0x20,0x58 -,0x3b,0xaf,0x5c,0x20,0x03,0xc8,0x05,0x69,0xae,0x24,0x2c,0x97,0x7d,0xb0,0x72,0x85,0x90,0x1f,0x5e,0x00,0x84,0xf8,0x0d,0x0b,0x80,0x3c,0xc0,0x00,0x09,0xe0,0x88,0x14 -,0xc6,0x16,0x0c,0x05,0x8c,0x81,0x63,0x28,0x58,0x50,0x16,0x12,0x05,0xc2,0xa4,0x10,0xa8,0xc4,0x66,0x25,0x09,0x88,0x46,0xe6,0x26,0xef,0x5c,0xdb,0x7a,0x55,0x6b,0x68 -,0xba,0xe2,0xaa,0xef,0x5b,0xbc,0xb1,0x5e,0x79,0xd4,0xcf,0xa1,0xfa,0x39,0x35,0x21,0xe2,0xfd,0x6d,0x6f,0xbf,0xcf,0x0d,0x3b,0xac,0xee,0xea,0x3f,0x8d,0xe6,0xb4,0x76 -,0xfe,0x53,0xf1,0x77,0x96,0x75,0x4c,0x38,0x6f,0x97,0xdb,0x3d,0x55,0x51,0xaf,0x3a,0x9f,0x08,0xe7,0xe7,0x6c,0x7a,0xcb,0x10,0xf3,0x48,0x1c,0xbb,0x00,0x80,0x9f,0x7f -,0x53,0x7f,0x85,0xb5,0x20,0x2d,0x18,0x73,0x77,0x40,0xfb,0x9f,0xc1,0x29,0x7e,0xda,0x22,0xae,0xab,0xce,0xda,0x79,0x68,0x38,0xf9,0x02,0x5e,0x7c,0xbd,0xae,0x5e,0x1c -,0x51,0xc4,0x38,0x6c,0xbb,0x73,0xf0,0x67,0x20,0xe1,0x82,0x8f,0xe1,0x01,0xf3,0x07,0x1e,0x61,0xc8,0x03,0x9f,0x92,0xf1,0x21,0x3e,0xd6,0x2c,0xaa,0x88,0x05,0x7b,0x61 -,0xaa,0x17,0x25,0x61,0xd8,0xed,0xf9,0x44,0x3d,0x60,0xff,0xd8,0x7d,0x7b,0xd6,0x77,0x47,0x88,0x02,0x00,0xf5,0xa4,0x01,0xeb,0x20,0x2b,0x62,0x22,0x11,0x16,0x57,0x40 -,0x1c,0xff,0xf1,0x50,0x80,0x33,0x1f,0xfc,0x21,0x0a,0xcf,0xeb,0xeb,0xff,0xff,0xff,0xb4,0x80,0xb0,0x9c,0x30,0x17,0x0a,0x05,0x42,0x81,0x60,0xa0,0x58,0x48,0x17,0x0a -,0x84,0x82,0x61,0x60,0xb8,0x58,0x28,0x35,0x0a,0x04,0x82,0x81,0x30,0x90,0x54,0x26,0x21,0x11,0x04,0x44,0x61,0x12,0x3a,0xbf,0x1c,0x6f,0xef,0xdf,0x5f,0x3a,0x66,0xaa -,0x29,0x52,0xf2,0x5d,0x22,0xb8,0xbc,0xaa,0xcd,0x3c,0xe3,0xdb,0xc8,0xbd,0xdd,0x7f,0x9f,0xd7,0x67,0x57,0xde,0x8f,0xa4,0xfb,0x8f,0xd3,0x7a,0x1f,0x0a,0x9b,0x97,0x5f -,0xf1,0xbd,0xb4,0x25,0xea,0xde,0x53,0xd1,0xe9,0xbb,0x2a,0x5f,0x5f,0x81,0xf1,0xfc,0xff,0xc0,0xf3,0x02,0x78,0xc6,0xef,0xe3,0xd0,0xf6,0xfb,0x02,0x0b,0x07,0x7e,0x7c -,0xcc,0xb0,0xdd,0xf3,0xf2,0x7a,0x7c,0x90,0x16,0xbd,0xfa,0xa5,0xea,0x75,0xa3,0x3a,0xf7,0x78,0x00,0x99,0xde,0x91,0x8c,0x10,0xa6,0xa9,0xdf,0x3e,0x73,0xd8,0x86,0xdb -,0xe3,0xa9,0xd4,0xfa,0x5e,0x8c,0x29,0x63,0x81,0xc7,0x34,0x66,0xb0,0x54,0x73,0xe0,0x73,0x70,0x5a,0x3d,0x9e,0xe0,0x0f,0x76,0xef,0xad,0x05,0x61,0x4e,0x33,0x4a,0xf5 -,0xc8,0xbb,0x46,0xb0,0xbb,0xce,0x74,0x3d,0xbf,0xa4,0x92,0x40,0x5b,0x85,0x42,0xdd,0xf0,0x2e,0x38,0x8e,0x99,0x31,0x80,0xb8,0x10,0x02,0x7d,0x02,0xc2,0x80,0xb0,0x60 -,0x4c,0x54,0x0b,0x12,0x02,0xc2,0x41,0x28,0x50,0x2a,0x23,0x0b,0x85,0x42,0x21,0x31,0x08,0x54,0x26,0x31,0x33,0xf3,0x4e,0xbb,0xce,0x33,0xef,0xf3,0xf1,0x5e,0x2a,0xa4 -,0x56,0xa6,0x35,0x4f,0xac,0xd7,0x5f,0xb7,0xd7,0xe9,0xa9,0x2f,0xcc,0xde,0xac,0x75,0x0b,0xe7,0xd5,0xf2,0xd0,0xc3,0x87,0xcf,0xf1,0x87,0xf1,0x7e,0x8e,0x5c,0xa6,0xaf -,0x97,0x96,0x61,0xac,0x8d,0x39,0xf2,0x24,0xde,0x8c,0xc0,0xb8,0x9d,0x1d,0xef,0x3f,0x3b,0x28,0xf8,0x12,0xab,0x9a,0x49,0x10,0xba,0xf7,0xb3,0x4a,0xcf,0x7f,0xa7,0x63 -,0x85,0xdf,0x6f,0xf5,0x7f,0x43,0xec,0xfd,0xbd,0xae,0x6d,0x4f,0x7f,0x82,0xba,0xbb,0xdd,0xe1,0x79,0x76,0x3e,0x5c,0xd5,0x2f,0x30,0xf3,0xe3,0xc4,0x76,0xd8,0xfe,0x2d -,0xcf,0xfb,0x17,0x94,0x90,0x02,0x47,0x88,0x00,0x3a,0x29,0x11,0xda,0xe1,0x4b,0xfa,0x4f,0xf8,0x1f,0xe7,0x00,0x09,0x5a,0xb5,0xca,0xf5,0x92,0xab,0x6e,0x4e,0x0b,0xa8 -,0xfa,0x9b,0x1f,0xfe,0x97,0x76,0x4f,0x58,0x4b,0xd7,0x09,0x38,0x56,0xf6,0x09,0x04,0xc1,0x88,0x24,0xc6,0x08,0x81,0x49,0xd8,0x0e,0xff,0xf1,0x50,0x80,0x32,0xff,0xfc -,0x21,0x0a,0xcf,0xfa,0x7f,0xff,0xff,0xff,0xb3,0x62,0x40,0x58,0x28,0x36,0x0c,0x05,0x84,0xa1,0x80,0xb0,0x48,0x2c,0x15,0x0b,0x05,0x04,0xa1,0x40,0xb0,0x50,0x46,0x12 -,0x12,0x84,0xc2,0x21,0x20,0x98,0xc4,0x66,0x11,0x12,0xf5,0xcc,0xe0,0x95,0x97,0x5d,0x77,0x5c,0x6e,0xf1,0xaa,0x55,0xc6,0x3e,0x1d,0xb5,0x9c,0x73,0xfa,0xfd,0xaf,0xdb -,0xd8,0x7d,0xfd,0xd8,0xf6,0xf9,0x7e,0xff,0xf2,0x82,0xf5,0x5f,0xc1,0x7c,0xe3,0xe3,0xdf,0x8f,0xd1,0x6e,0xe0,0x06,0x3e,0xa4,0xaa,0xdd,0xe3,0xc2,0x8f,0x4e,0x21,0xe3 -,0x58,0x41,0xd7,0x44,0x37,0xff,0x3d,0xdf,0x8e,0x35,0x39,0x93,0x1e,0x1e,0xaf,0x7f,0x99,0x08,0x33,0x0e,0xd5,0x9a,0xc4,0x0b,0xc0,0xce,0x2e,0xbf,0xfb,0xc9,0x15,0x7a -,0x07,0xb7,0xd8,0x0a,0x8c,0x01,0x92,0xed,0x00,0x74,0xce,0x40,0xce,0x6b,0x0a,0xde,0x28,0x8d,0xc3,0xfd,0x59,0xaf,0x1d,0x1e,0xeb,0xbb,0xa7,0x12,0xac,0xff,0x28,0xd5 -,0x64,0x55,0xeb,0x6d,0x8e,0xc7,0x90,0x79,0xa2,0xc0,0x1f,0x6d,0xee,0x80,0x4a,0x3c,0x30,0x4f,0x30,0x25,0xb1,0x05,0x12,0xd2,0x50,0xf5,0xea,0x5b,0xd1,0x5c,0xb9,0x21 -,0xff,0xa9,0x95,0xa8,0x52,0x10,0x02,0x37,0x8a,0x02,0x53,0xfa,0xe0,0x02,0xc1,0x50,0x28,0x90,0x2c,0x27,0x0b,0x09,0xc2,0x81,0x80,0xa0,0x58,0x28,0x25,0x0a,0x05,0x82 -,0x81,0x70,0xb0,0x60,0x28,0x16,0x0a,0x85,0x04,0xa1,0x70,0x89,0x14,0x26,0x15,0x09,0x85,0x42,0x61,0x50,0x89,0x5e,0x3b,0xfc,0x7b,0xcc,0xd7,0x8f,0x8e,0xe4,0x52,0x29 -,0x22,0x56,0xb5,0xe5,0xaa,0xfb,0x6b,0x1c,0x6f,0xd8,0x92,0xc6,0xb4,0x2f,0x7d,0x5e,0xcf,0x69,0x57,0xbf,0xc4,0xfb,0xd7,0x35,0xe9,0x9f,0xff,0xce,0xaa,0x7f,0x54,0x7c -,0x7f,0xf7,0x7f,0x1c,0xfc,0xd7,0xc5,0xd3,0x3d,0x27,0xc2,0x0d,0x6f,0xf6,0xfd,0xb7,0x8a,0xcf,0xd1,0xd9,0xce,0xda,0x18,0x51,0xd4,0x6c,0x2f,0xd2,0xfb,0xee,0xbd,0xc0 -,0x7f,0x6f,0xed,0xe9,0x2e,0xa0,0x2c,0x02,0xaf,0xe9,0xf1,0x7c,0x46,0xff,0x15,0xfe,0xcc,0x7c,0xba,0x98,0xf5,0x7b,0xff,0x10,0xf5,0xc3,0xc5,0xc0,0x9e,0x61,0xb8,0x16 -,0xaf,0x3a,0x4a,0xed,0x81,0x6b,0xcc,0x4b,0x44,0x0b,0x00,0x45,0xc3,0x9f,0x3f,0xb8,0x00,0x00,0xee,0x3b,0x84,0x90,0x3e,0xa2,0x43,0xbe,0xf7,0x45,0x40,0xf0,0x00,0x1d -,0xf1,0xdf,0x00,0x79,0x00,0x17,0x10,0x44,0x12,0x95,0x80,0xa0,0x14,0x95,0x00,0xe0,0xff,0xf1,0x50,0x80,0x30,0xff,0xfc,0x21,0x0a,0xcf,0xff,0xff,0xff,0xff,0xfb,0xb1 -,0x61,0xc0,0x58,0x30,0x14,0x0b,0x05,0x42,0x81,0x70,0xa0,0x58,0x2a,0x14,0x13,0x05,0x02,0xc1,0x50,0xc0,0x50,0x2c,0x27,0x0a,0x08,0x86,0x27,0x30,0x89,0x55,0x5c,0x5f -,0x7a,0x95,0x4f,0x3e,0x38,0x54,0xdc,0x24,0xa9,0x22,0xa4,0x95,0x52,0x67,0xb6,0xeb,0xef,0x2c,0x2f,0xfc,0xff,0x2c,0xd9,0xee,0xd2,0x07,0xb7,0xfe,0xf9,0xe3,0xd6,0x43 -,0xbb,0xee,0x7f,0x03,0xf6,0x6b,0x25,0xfe,0x6a,0xa7,0xee,0x93,0xc1,0xd1,0x5f,0x69,0x27,0xee,0x6a,0x03,0x37,0xe7,0xfb,0x8e,0x3d,0xee,0xb8,0x97,0x15,0x93,0xf7,0xff -,0x59,0xc8,0x17,0xcd,0x09,0xf4,0x5c,0x87,0xc3,0x4a,0x45,0xb6,0x48,0xc6,0x0a,0xcc,0x4f,0xe7,0xa0,0x0c,0x42,0x48,0xbc,0x39,0x3e,0xdd,0xc5,0xa4,0x26,0x2d,0xba,0xa6 -,0x74,0x89,0x75,0xe6,0x59,0xca,0xd9,0xcf,0x62,0x15,0xc8,0x08,0x97,0xc7,0xcd,0xf0,0xbe,0xee,0x90,0x0c,0x8f,0x5b,0x56,0x0a,0xad,0xb7,0x4c,0x16,0xa3,0x9a,0xd3,0x19 -,0x31,0xc6,0x34,0xb5,0x0e,0x57,0xb4,0x86,0x3a,0xb2,0x51,0x45,0x6d,0x71,0x2b,0xd2,0xd7,0x09,0x7b,0x81,0xc5,0x5a,0x50,0x94,0x8a,0x8a,0x84,0x81,0x10,0xb8,0x14,0xec -,0x14,0x0c,0x05,0x85,0x01,0x60,0xa0,0x98,0xc8,0x26,0x2b,0x89,0x04,0xa5,0x30,0xa8,0x4c,0x6a,0x11,0x31,0xce,0xb3,0x3d,0xb7,0xf8,0xf1,0xe1,0x29,0x6d,0xc9,0x5c,0x50 -,0xd3,0x5a,0xe7,0x7e,0xdb,0x65,0xf9,0x97,0x95,0xa0,0x9c,0xff,0xf8,0x1b,0x4d,0xf1,0xcf,0x4c,0xdd,0x14,0x3d,0xb6,0xff,0xb3,0x98,0xe9,0xfd,0x7f,0x1a,0x00,0x7e,0x05 -,0x6c,0xb5,0x6f,0xa5,0x77,0x5b,0x65,0x9a,0xa2,0x7a,0xbe,0x4b,0xc8,0x7f,0x99,0xa7,0x26,0xe6,0x7f,0xa5,0xbc,0x6c,0x1c,0x9b,0xb6,0xff,0x13,0xb2,0x99,0xf9,0xaa,0xac -,0xbe,0xbf,0x0c,0xa6,0xf2,0x0b,0x81,0x39,0x58,0x79,0x35,0xa4,0xab,0x6e,0xd9,0xce,0x8d,0xdd,0xaf,0xa3,0xde,0x7f,0x1d,0x6e,0x9f,0xaa,0xf7,0x78,0xa7,0xf9,0x5e,0xdc -,0xc1,0xe1,0xf7,0x01,0xf1,0x79,0x9c,0xa4,0x3c,0x80,0x0e,0x67,0x99,0xa0,0x00,0x03,0x93,0x90,0x3e,0x7a,0x75,0x5b,0xbc,0xc0,0x01,0xe0,0x00,0x0f,0xfd,0x7e,0xe9,0xeb -,0x1d,0xc1,0x90,0xf5,0x9e,0xc6,0xd5,0xe6,0x3a,0x01,0xf3,0x02,0x42,0x62,0x40,0x01,0x62,0xd0,0x02,0xe4,0x47,0x00,0x1c,0xff,0xf1,0x50,0x80,0x32,0x3f,0xfc,0x21,0x0a -,0xcf,0xaf,0xff,0xff,0xfd,0x7d,0xb0,0x81,0x30,0xdc,0x2a,0x16,0x12,0x06,0x42,0x81,0x61,0xa0,0x98,0x48,0x17,0x0a,0x05,0x82,0xa2,0x40,0x90,0xc4,0x2a,0x11,0x09,0x84 -,0x44,0x61,0x11,0x18,0x44,0x26,0x11,0x13,0x2b,0x8e,0x3d,0xfd,0xb5,0xea,0x67,0x9d,0x97,0x55,0x2a,0xea,0x17,0x92,0x57,0xc7,0x7a,0xef,0xa9,0xcc,0xbd,0xfd,0x5f,0xd0 -,0x2f,0x49,0x9d,0x7f,0x67,0xeb,0xf6,0xd5,0xe5,0xf4,0x7a,0xa3,0xbc,0x7a,0xb4,0xae,0x87,0xf9,0x36,0x78,0x5f,0x81,0xd3,0xda,0x5b,0xdf,0xa4,0x38,0x6b,0x2a,0x07,0x5d -,0xf5,0xdd,0xde,0xdb,0xe5,0xaa,0xa1,0x60,0x51,0xdf,0x41,0xb7,0xcc,0x7c,0x12,0xd5,0x63,0xcd,0xbb,0x70,0xd4,0x98,0x0e,0x55,0x2a,0x0a,0x95,0xa7,0x1e,0x08,0xdb,0xa2 -,0x9d,0x37,0xc4,0x45,0xa8,0x9f,0x4d,0x49,0xac,0xe7,0x37,0x86,0x32,0x64,0x0c,0x9b,0xad,0x08,0x3b,0x20,0xcc,0xe0,0xb9,0x3c,0xfa,0x92,0xeb,0x8a,0x63,0xc8,0x00,0x36 -,0xea,0x20,0xa2,0x44,0x1f,0x94,0xf7,0x2a,0xb5,0x13,0xad,0x96,0x48,0xef,0x51,0x5f,0x5c,0x53,0x75,0x8b,0x91,0xb0,0xfd,0xa2,0x9c,0x28,0x1d,0xfb,0x26,0x29,0x2e,0xe3 -,0xd7,0x00,0x94,0xc2,0x60,0x54,0xb0,0x50,0x2c,0x28,0x0b,0x06,0x02,0xc2,0x40,0xb8,0x54,0x2c,0x14,0x0b,0x05,0x02,0xc4,0x41,0xb0,0x50,0x2a,0x53,0x1a,0x84,0xc2,0xa1 -,0x30,0xa8,0x44,0xaf,0x3f,0x6b,0xdf,0x9e,0xfe,0xbc,0x7d,0xfd,0xef,0xbb,0xcb,0xa2,0xa2,0x49,0x77,0x5d,0x4f,0x3f,0x68,0x77,0xaf,0x8e,0x32,0xa7,0x01,0x35,0xfe,0x26 -,0xaf,0xbf,0x56,0xd8,0xdf,0xaf,0x9f,0xdd,0xd0,0x87,0x55,0x5b,0x0f,0xb1,0xef,0xe3,0x44,0xe1,0xf1,0x72,0x1a,0xb7,0xff,0x51,0xf8,0x64,0xd1,0x57,0x0d,0xc3,0xaf,0xf8 -,0x8a,0x0f,0x54,0x35,0xaf,0x6c,0x53,0x26,0xb3,0x72,0xf9,0x0f,0x90,0xd8,0x23,0x47,0xf4,0x15,0x75,0x9f,0xe4,0xe4,0x3c,0xb7,0xaf,0xea,0x7c,0x1a,0x2a,0x1c,0x84,0x44 -,0xd7,0xd7,0xe0,0x97,0xe9,0xbc,0x07,0xe1,0x67,0x24,0x74,0xf1,0x8a,0x1e,0x4e,0x61,0xcc,0xa2,0x93,0xc5,0x56,0x73,0x93,0x87,0x98,0x00,0x3c,0x5e,0x60,0x05,0x0e,0x50 -,0xf0,0xbd,0x8f,0xfe,0xd3,0x10,0xef,0x1d,0xc0,0x01,0xe9,0x40,0x0f,0x5d,0x23,0x57,0xd7,0xe0,0x15,0xcc,0xe0,0x46,0x25,0x3f,0xaf,0xb2,0xab,0x87,0x88,0x00,0x50,0x37 -,0x8a,0x85,0x44,0xc0,0x65,0x04,0xc0,0x70,0xff,0xf1,0x50,0x80,0x2f,0x3f,0xfc,0x21,0x0a,0xcf,0xef,0xf5,0xff,0xff,0xfe,0xae,0x81,0x30,0x60,0x68,0x16,0x0b,0x85,0x03 -,0x21,0x41,0x30,0x90,0x4e,0x14,0x0c,0x05,0x02,0xc1,0x41,0x28,0x50,0x24,0x31,0x09,0x8c,0x46,0x61,0x11,0x18,0x84,0x4e,0xed,0xd7,0x8f,0x8e,0x65,0x6f,0xe3,0xbb,0xac -,0xba,0x99,0x35,0x49,0x2a,0x2b,0xa4,0xaa,0x6b,0x99,0xe5,0xf5,0xa0,0x8e,0xc3,0x45,0x1f,0xd7,0xcf,0x57,0x0c,0x8d,0x2f,0x30,0xdf,0xee,0x4d,0x7d,0xab,0x76,0xf8,0xe6 -,0x85,0xb6,0xaa,0xfe,0x2e,0xd7,0xc5,0xd0,0xbb,0xc8,0x47,0x66,0xf4,0xbb,0xbf,0x1f,0xf5,0x63,0x08,0x55,0xef,0x77,0x65,0x5e,0x8c,0xe3,0x51,0x1e,0x6a,0xbf,0x7c,0x54 -,0xf0,0x78,0x04,0x4a,0x3f,0xbf,0xc0,0xa5,0x2c,0xf6,0xc2,0x12,0xf0,0x66,0xff,0x3a,0xd2,0x2e,0xd5,0xfb,0xba,0x5a,0x9c,0x32,0x70,0xc3,0x9a,0x50,0x89,0xfb,0xf2,0x36 -,0x18,0x23,0xff,0xed,0x43,0x02,0x56,0x64,0xfc,0x32,0x5a,0x3b,0x0e,0xf8,0x7d,0x60,0x82,0xda,0x2b,0x96,0xef,0xdf,0xb8,0xa9,0x59,0xac,0x2b,0x56,0x19,0x22,0xab,0xa2 -,0x25,0xd1,0xf5,0xcf,0x28,0x5c,0x28,0xa2,0x56,0x88,0x77,0x8e,0xe0,0x01,0x50,0xa0,0x0a,0x36,0x1c,0x05,0x82,0xe1,0x80,0xb0,0x54,0x28,0x26,0x22,0x0a,0x02,0xc3,0x40 -,0xb0,0x90,0x4a,0x23,0x08,0x98,0xc4,0x23,0x30,0x88,0x9e,0x9b,0xe3,0x75,0xf1,0xb5,0x54,0x4d,0xcc,0x92,0x12,0x4b,0x93,0xe2,0xea,0xaa,0xb9,0x7d,0xf9,0xbe,0xb3,0xc8 -,0x2d,0x7c,0x79,0xf6,0xfb,0xb4,0x70,0x6c,0xa7,0xbf,0x9f,0xc0,0x15,0x6e,0xfb,0x9f,0xef,0xfd,0x4f,0xb9,0xfe,0xce,0xc0,0x33,0xfd,0x5b,0xbc,0xdb,0x1e,0xe9,0x28,0x4f -,0xe2,0x8f,0xfd,0xb7,0xde,0x11,0xef,0x2a,0x94,0xa8,0x4b,0x35,0xac,0x78,0xd9,0xe6,0x0b,0x02,0x65,0x6d,0x7b,0x05,0x80,0x8b,0xb3,0xea,0x2a,0xcf,0xba,0x71,0x04,0xb4 -,0x2f,0x24,0xa0,0x15,0xf4,0x17,0xf7,0xbf,0x19,0x8f,0x8a,0x8b,0xbd,0xed,0xf0,0xf5,0xdc,0x00,0xe3,0xf1,0xaf,0x11,0xad,0xf2,0x39,0x1c,0x87,0xbb,0xf9,0x61,0x2a,0x5a -,0x60,0x25,0x54,0x49,0xf3,0x05,0xe3,0x20,0x2c,0x58,0xd4,0x2c,0x6a,0x03,0xbc,0xee,0x9e,0xbb,0xba,0x17,0x88,0x09,0x24,0xa2,0x01,0x23,0xb9,0x01,0x30,0x6d,0x05,0x00 -,0xe0,0xff,0xf1,0x50,0x80,0x2f,0x1f,0xfc,0x21,0x0a,0xcf,0x7f,0xfd,0xff,0xff,0xfc,0xac,0x81,0x30,0x60,0x2c,0x18,0x0a,0x05,0x84,0x81,0x70,0xa0,0x58,0x28,0x26,0x1a -,0x05,0xc2,0xc1,0x40,0xb0,0x54,0x48,0x12,0x10,0x88,0xca,0x41,0x31,0x09,0x5e,0xba,0xe4,0xf6,0xcc,0x57,0xc7,0x32,0x73,0xae,0x75,0x93,0x8d,0xde,0x5d,0x43,0xcd,0x4c -,0xbf,0x17,0xd6,0xe4,0xfd,0xfe,0x81,0xb6,0x1d,0xf9,0xfe,0xbc,0xf3,0xdf,0xe1,0xb7,0x5a,0x0d,0x2c,0x5b,0x7a,0x8f,0xfd,0xdf,0xe7,0x4b,0xe2,0xad,0xc5,0xfd,0x6f,0xce -,0x63,0xe1,0xe9,0xef,0x4b,0x5f,0x94,0x24,0x72,0xf4,0x9c,0xd3,0xa8,0x47,0x10,0x67,0x5f,0xe4,0x44,0xcd,0xd4,0x30,0xc1,0xe8,0x15,0x4f,0xfd,0xb7,0x4f,0x6c,0xe6,0x20 -,0x2c,0x70,0x6f,0x31,0x35,0xea,0x88,0xe7,0x5f,0x47,0x05,0x2c,0x99,0x6e,0x43,0x8a,0xa9,0x39,0x64,0x2a,0xb4,0x82,0x04,0xb2,0x6e,0xa2,0x6f,0x55,0x55,0xc1,0xe4,0xc8 -,0x9a,0x89,0xfb,0xfe,0xf0,0x07,0x76,0xb1,0x05,0xdd,0xc1,0x79,0x9d,0xfb,0x03,0xba,0x4f,0xbe,0x23,0x1a,0x50,0xd2,0x88,0xc4,0x4b,0xd0,0xc1,0x84,0x3d,0xd6,0xdb,0x48 -,0x17,0x84,0xc1,0x99,0x60,0x58,0x05,0x80,0x54,0xb0,0xe0,0x2c,0x55,0x0b,0x06,0x02,0x81,0x60,0xa0,0x58,0x50,0x16,0x1a,0x05,0x82,0x81,0x50,0xa0,0x54,0x26,0x11,0x0b -,0x84,0x4c,0xa1,0x13,0x0c,0x89,0x2b,0xe3,0xdd,0x25,0x56,0xb6,0xa9,0x2a,0xed,0x35,0xc4,0xd5,0x49,0x2b,0xc7,0x95,0x32,0xc5,0xfc,0xd3,0xae,0xbf,0xd4,0x3a,0xfe,0xae -,0x5d,0x7c,0xbd,0x49,0x76,0xff,0xc1,0x7b,0xde,0x27,0x7d,0x5a,0xb8,0x4e,0x57,0xff,0x3d,0x5b,0xfa,0xa1,0x2f,0xfe,0x6b,0x85,0xf9,0x9e,0x75,0x11,0x73,0xb3,0x51,0xb5 -,0x7d,0xf7,0x40,0x7b,0xcb,0x50,0xdf,0x57,0x3c,0xc6,0xfd,0xe7,0xdd,0xc6,0xf9,0xac,0xd0,0x3f,0x32,0xfe,0xdf,0x84,0xba,0x68,0xba,0x60,0x6e,0x7c,0xd3,0xf8,0xd8,0xf7 -,0xfc,0x2d,0x27,0x93,0xa5,0x3f,0x36,0xdb,0x9e,0x1c,0xfb,0xc0,0x74,0x4f,0x02,0x53,0xdd,0xd2,0x7f,0xfe,0xfd,0x70,0xa2,0xb0,0x68,0x79,0x40,0x00,0x0f,0x8a,0x45,0xe0 -,0x15,0x15,0x42,0x41,0x62,0x64,0x01,0x60,0x1e,0x40,0x78,0x00,0x04,0x2e,0x02,0xa0,0xba,0x60,0x82,0xe0,0x46,0x20,0x84,0x00,0xe0,0xff,0xf1,0x50,0x80,0x30,0x5f,0xfc -,0x21,0x0a,0xcf,0x7f,0x3d,0xff,0xff,0xfc,0xac,0x80,0xb8,0x50,0x30,0x16,0x0c,0x05,0x82,0x81,0x60,0xa0,0x60,0x2e,0x14,0x0b,0x0d,0x43,0x01,0x61,0x38,0x58,0x2a,0x14 -,0x0a,0x85,0x02,0x42,0x14,0x18,0x44,0xcf,0x17,0xbb,0xcf,0x35,0x9c,0x73,0x72,0xf2,0x37,0x69,0x15,0x21,0xaa,0xbd,0xa4,0xce,0xb2,0x55,0xfd,0x70,0x1b,0xd2,0x7c,0xa7 -,0xe7,0x39,0xc5,0x72,0xc7,0xa6,0x2d,0x8f,0xa3,0xf4,0x47,0xc2,0xf6,0x05,0x01,0xde,0xab,0x14,0x7a,0xfe,0x41,0xc9,0x0d,0x7f,0x40,0xec,0xe3,0xca,0x2f,0xef,0x4f,0x5d -,0xe3,0x10,0x27,0x96,0x07,0x84,0x5a,0x3d,0x52,0x94,0x0b,0x4e,0x75,0x5e,0x5f,0x5b,0x59,0x02,0x4a,0x9d,0xfd,0xde,0x16,0x90,0x56,0x87,0x64,0x03,0xc2,0x56,0xef,0xbf -,0xd1,0x1a,0xa4,0x99,0xf8,0x25,0x5a,0x6c,0x6b,0xb4,0xda,0x89,0x44,0xfd,0xc7,0x45,0x77,0x4e,0xf9,0x57,0x95,0x2b,0xa0,0xbc,0x32,0xf4,0xb7,0x35,0x46,0xae,0x39,0xef -,0x78,0x0a,0xed,0xb5,0x38,0xd2,0x07,0xc8,0xd5,0x5d,0x04,0x22,0xa2,0x5c,0xb8,0xa5,0xa4,0x10,0x77,0xc3,0xec,0x14,0x5e,0x95,0x2d,0x52,0x30,0x20,0x47,0xd8,0x02,0xe0 -,0x58,0x0a,0x86,0x24,0x05,0x82,0x81,0x61,0x20,0x58,0x50,0x16,0x0a,0x05,0x82,0x81,0x61,0xa0,0x98,0x2a,0x14,0x0a,0x94,0xca,0x23,0x31,0x08,0xd5,0x3c,0x6b,0x3a,0xd7 -,0x7c,0x77,0x52,0xf2,0x6b,0x32,0xeb,0x59,0xac,0xd5,0xcd,0xf5,0xb9,0x72,0x7b,0x57,0xcf,0x99,0x7f,0xe2,0xc2,0x6d,0xd1,0x7e,0xfd,0xde,0x6f,0xdf,0xbf,0x17,0xeb,0x5f -,0xdc,0x68,0xe7,0xa4,0xb7,0xbf,0xf6,0x4b,0x6d,0xee,0xca,0xea,0x1f,0x77,0xe8,0xc7,0xe2,0x5a,0xaa,0xfc,0x47,0xee,0x52,0xd0,0xfb,0x76,0x3d,0x9f,0xd5,0xef,0x66,0x0b -,0x98,0x25,0xaf,0x59,0xe9,0x94,0x26,0x93,0x5b,0xa7,0xd6,0xd6,0x6c,0xbf,0x79,0xe3,0x91,0x63,0x5f,0xc5,0xd9,0x38,0xf9,0xcd,0xb8,0x11,0xd7,0xce,0xbd,0xbd,0xe2,0xbc -,0x7e,0x0e,0x1c,0xb9,0x2f,0x98,0x12,0x07,0xd7,0xe2,0x02,0x3c,0xc7,0x03,0xb3,0x89,0x64,0xb0,0x80,0xe2,0x70,0xe2,0x0e,0x22,0x73,0xb7,0x03,0xd6,0x33,0x22,0x4f,0xdd -,0xe2,0xdb,0x0b,0x77,0x43,0xb8,0xef,0x9e,0x38,0x1f,0xc8,0x01,0x99,0x5b,0x82,0x92,0x1a,0x64,0x03,0xba,0x3b,0xe0,0x08,0x81,0x40,0x54,0x0e,0xff,0xf1,0x50,0x80,0x31 -,0xff,0xfc,0x21,0x0a,0xcf,0xea,0xff,0xff,0xff,0xfc,0xad,0x81,0x30,0x90,0x2e,0x14,0x0b,0x0d,0x08,0xc1,0x41,0x30,0x50,0x2c,0x14,0x21,0x0d,0x42,0x61,0x50,0x98,0x44 -,0x26,0x21,0x11,0x88,0x42,0x62,0x11,0x3c,0x5e,0x49,0xc3,0xdb,0xe6,0xcb,0xda,0xe9,0x52,0xae,0xa5,0xd6,0xb8,0x6e,0xaa,0xeb,0x3a,0x7c,0x7b,0xf9,0xf3,0xd0,0xc3,0xd7 -,0xdd,0xcc,0xfd,0xea,0xff,0xad,0xff,0x3f,0xdf,0x39,0x82,0xef,0x3d,0x5c,0x07,0xc6,0xe4,0xbf,0x12,0x03,0xeb,0x7a,0xaf,0x88,0xd6,0xf2,0xb9,0x8f,0x23,0xd5,0x9a,0x50 -,0xcf,0x40,0x1b,0x55,0xaa,0xfe,0x67,0x77,0x6d,0xc1,0xc6,0x26,0xea,0xc7,0x7e,0xff,0x47,0x00,0xe3,0xcb,0x28,0xeb,0x2a,0x0d,0x82,0x8f,0xf1,0x5a,0xd0,0x2a,0xc7,0x27 -,0xf6,0xbe,0x2b,0xc9,0xd0,0x68,0xb9,0x17,0x2b,0x87,0x1c,0x31,0x70,0x4f,0x1b,0x0f,0x31,0x03,0xd6,0x38,0xbc,0x40,0x04,0x3f,0x6a,0x45,0xf1,0x4a,0xdd,0x6f,0x22,0x53 -,0xb6,0xd5,0x94,0xda,0xcd,0xef,0x41,0xa2,0xf3,0x76,0xc7,0x13,0x56,0xb3,0x2e,0x39,0xd1,0xb9,0xbc,0xfc,0x90,0x7f,0xed,0xee,0x81,0x35,0x80,0x5d,0xdf,0x80,0x77,0xbb -,0x97,0x01,0x10,0x90,0x14,0xe8,0x26,0x0c,0x05,0x84,0xe1,0x30,0xb0,0xe0,0x2c,0x17,0x0a,0x85,0x82,0x82,0x80,0xb0,0x94,0x28,0x25,0x0a,0x05,0x44,0x61,0x70,0xa8,0x50 -,0x26,0x35,0x08,0x90,0xc2,0x22,0x33,0x69,0x9e,0x7b,0xeb,0xbb,0xe3,0x9b,0xe7,0x59,0xac,0x48,0x91,0xa7,0x9f,0x59,0x38,0xae,0xba,0xa7,0x7a,0xff,0xdf,0xe0,0x7f,0xab -,0xe0,0x7b,0x3c,0xfd,0xf4,0x7c,0xcb,0xf8,0xaf,0xbe,0xaf,0xf0,0x7f,0x63,0xc0,0xbd,0xfe,0xde,0x55,0xf4,0x58,0x59,0xa7,0x2f,0x0f,0x57,0x7d,0xae,0x8f,0x93,0x83,0xae -,0xdd,0xd5,0xf2,0xff,0xd1,0xf3,0xb9,0xff,0x5c,0x4f,0x50,0x27,0x8c,0x36,0x3b,0x6f,0xdd,0xdb,0x46,0x6d,0x0b,0xb5,0xcb,0xb4,0xe3,0xf2,0xe5,0xe3,0x76,0xd9,0xe9,0xdf -,0x5f,0x8f,0xbe,0x7e,0x4a,0x17,0x0a,0xea,0xc8,0xe2,0x5e,0x35,0xf9,0x3e,0x3d,0x45,0x13,0x7c,0x57,0xdd,0x49,0xb4,0xb9,0x1c,0x9c,0x43,0xc2,0x81,0xeb,0x80,0x00,0x79 -,0x92,0x73,0x07,0x0c,0x94,0x92,0x3e,0x0d,0x8e,0xa8,0x2f,0x43,0xe5,0x6f,0xdc,0x25,0xdd,0x07,0xac,0xef,0x3d,0xa7,0x70,0x77,0x80,0x00,0x1e,0x31,0x98,0x00,0x56,0x93 -,0x05,0x85,0x52,0x80,0x1e,0xb8,0xb0,0x05,0xc0,0xe0,0xff,0xf1,0x50,0x80,0x32,0xff,0xfc,0x21,0x0a,0xcf,0xff,0xef,0xff,0xff,0xfc,0xae,0x80,0xb1,0x20,0x28,0x26,0x0a -,0x05,0x88,0xe1,0x60,0xa8,0x58,0x28,0x16,0x12,0x11,0x42,0x81,0x20,0xa8,0x4c,0x24,0x11,0x09,0x04,0x46,0x63,0x12,0x37,0x2b,0x5b,0xf6,0xae,0x6d,0x32,0xe9,0xac,0x53 -,0x55,0x2e,0xf6,0xe3,0x15,0x52,0x9d,0x27,0x37,0xfa,0xf9,0x03,0xeb,0x7f,0xcf,0xd7,0xd7,0x7f,0xf9,0x25,0x1f,0xfb,0x32,0x1f,0xeb,0x7b,0xcf,0xe2,0xff,0xc5,0x77,0x24 -,0xcd,0xda,0x82,0xd8,0x97,0x28,0xd2,0x0f,0x1d,0xce,0x51,0x37,0xd1,0xde,0xfd,0xe7,0x3f,0xd3,0x48,0x6f,0x60,0x06,0xa8,0xdb,0xbd,0x40,0x58,0x0c,0x32,0xd4,0x8d,0xd0 -,0x03,0x9f,0x0b,0xa5,0x86,0x94,0xe1,0xd1,0x46,0x2b,0xa7,0x18,0x2f,0x3e,0xf4,0xda,0x6c,0xb5,0x85,0xf0,0x71,0xe6,0x0d,0x55,0xc2,0xf7,0x2f,0xd8,0xa7,0x34,0x67,0xd3 -,0x18,0x2a,0xc1,0xc1,0xc5,0xce,0xba,0x48,0xc8,0xf1,0xa2,0x33,0x19,0x0c,0xe0,0xfc,0xa1,0x9a,0x17,0x2e,0xb2,0x62,0xa5,0x04,0xc7,0x9e,0xcd,0x77,0xac,0xd6,0xc4,0xa5 -,0xe9,0x82,0xf7,0x5b,0x14,0x5a,0x2d,0x11,0xeb,0x1f,0xb2,0x05,0x2d,0x3f,0xfd,0x22,0x81,0xde,0xe5,0x94,0xd9,0x35,0xc2,0x00,0x94,0x40,0x9e,0x50,0xb0,0x60,0x2c,0x37 -,0x0b,0x05,0x44,0xc1,0x70,0xa8,0x58,0x8e,0x15,0x0c,0x05,0x04,0xc1,0x53,0x18,0x94,0x26,0x35,0x09,0x85,0x42,0x61,0x10,0x98,0x44,0x4f,0xce,0x55,0xe4,0xe3,0x7c,0x6d -,0x33,0x3c,0xf3,0x75,0x49,0x2d,0x9a,0xd2,0x63,0x49,0x7b,0xeb,0x9c,0xe3,0xff,0xc7,0xd8,0x3e,0x73,0xeb,0x7f,0xc7,0xa3,0x97,0x3f,0x57,0xc6,0x9f,0x6a,0x17,0xbf,0xee -,0x78,0x2a,0xab,0x51,0xfd,0xf8,0x97,0xd7,0xcf,0xff,0x82,0x53,0xaa,0x6b,0x36,0xfe,0xb8,0xa2,0x00,0xf4,0xb7,0xd3,0x1b,0x2f,0xa5,0xfd,0x1f,0x1e,0x10,0xc7,0x5e,0x17 -,0xca,0x7f,0xe0,0x3d,0x9f,0xfd,0x9c,0xe3,0xa3,0x8e,0xd0,0xf3,0xf2,0x98,0x86,0xb0,0x0e,0x9e,0xf1,0xc7,0x8f,0xaf,0x31,0xdb,0xfd,0x08,0x99,0x5f,0x2c,0x63,0x85,0x2d -,0x0e,0x09,0x15,0xd9,0xcf,0x95,0xb9,0x9e,0x00,0x86,0xdc,0x43,0xcb,0x9f,0x10,0x03,0xdd,0x1d,0xf3,0xdd,0x8c,0x3d,0xc5,0x75,0x53,0x8e,0x14,0xa2,0xc7,0x15,0x58,0xb3 -,0xb8,0xee,0x03,0xdc,0x5f,0xd7,0x7b,0xa1,0xeb,0x00,0x01,0xe2,0x7a,0xfd,0xd0,0x00,0x00,0xf3,0x7a,0xdd,0xf0,0xf7,0x16,0x82,0xb5,0xbe,0x13,0xd6,0x54,0x2e,0x01,0x40 -,0x38,0xff,0xf1,0x50,0x80,0x30,0xff,0xfc,0x21,0x2a,0xcf,0xfb,0xff,0x6e,0xff,0xbc,0xb1,0x63,0x20,0x58,0x28,0x16,0x4a,0x05,0x82,0x84,0x50,0xa0,0x8c,0x42,0x13,0x10 -,0x91,0x42,0x61,0x11,0x18,0x44,0x4a,0x97,0x33,0xce,0x32,0x17,0xbb,0x94,0xdd,0xe9,0x9c,0x55,0x7b,0x65,0x19,0x2a,0xbe,0x2b,0x99,0xd7,0xd7,0x91,0xf3,0xf3,0x7a,0xfe -,0x5a,0x7f,0xdf,0xa7,0xb7,0xbb,0x77,0xda,0x4f,0xea,0x05,0xd9,0xf8,0xaf,0x5c,0xed,0x2e,0xa1,0xf8,0x3a,0x3b,0x87,0x89,0x75,0x4a,0x15,0x7d,0xd1,0x2f,0xf6,0x4b,0x70 -,0x55,0xac,0x17,0xb2,0x70,0x18,0xbb,0xf3,0x40,0x5a,0x65,0xbb,0x89,0x73,0xea,0xd4,0x7e,0xcf,0xb4,0xd0,0x00,0x7e,0x49,0xcb,0x77,0xf3,0x7c,0x84,0x77,0xed,0x8b,0x77 -,0xda,0x7a,0x24,0xf0,0xc3,0x3a,0xc7,0x7a,0x57,0x24,0x38,0x5b,0x09,0xf9,0x6d,0xd2,0x0c,0x7c,0xf8,0xed,0x14,0x9e,0x3f,0xfd,0xe1,0xfb,0x45,0x95,0x5e,0x29,0x5d,0x42 -,0xff,0xba,0x8d,0xbd,0xf4,0x20,0x87,0x39,0x0f,0xf3,0x5a,0x08,0xdb,0x2c,0xb1,0x3d,0x8f,0x4c,0x93,0x16,0x7e,0x28,0xd4,0x00,0x78,0x87,0xa0,0x00,0x9d,0x29,0x61,0x73 -,0x67,0x72,0x41,0x7f,0x80,0x08,0x05,0x80,0x53,0x28,0x50,0x2c,0x74,0x14,0x05,0x82,0x82,0x63,0x20,0x58,0x48,0x25,0x11,0x89,0x46,0x63,0x40,0x88,0x4c,0x22,0x47,0x3b -,0xeb,0x75,0xd5,0x73,0xf5,0xe1,0xae,0x75,0x94,0x95,0x2a,0x6a,0xae,0xb8,0xba,0xea,0x56,0x6e,0xb9,0xfe,0x76,0xd7,0xdf,0xf5,0x0f,0x67,0xeb,0x5b,0x3d,0x1e,0x1e,0xff -,0xaf,0xaf,0xd5,0xb7,0xcf,0x3d,0xdd,0x5e,0x56,0xd4,0x5f,0xb7,0xd1,0xfa,0x45,0x92,0x71,0xe0,0x19,0x7f,0x5a,0xfd,0xd7,0xfe,0x3e,0x4f,0x5d,0x79,0xac,0xdc,0x3a,0x3f -,0x4d,0x91,0x45,0x58,0xf1,0xa0,0xf1,0x8b,0xbe,0x1a,0x68,0x9a,0xda,0x13,0xb5,0x5e,0xea,0x35,0x2f,0x35,0x0f,0xe6,0xc0,0xdf,0xaf,0x31,0x46,0xd2,0x14,0x33,0x07,0xbe -,0x42,0xf8,0xf4,0xf2,0xd4,0xf7,0x0c,0x45,0xb2,0xd5,0x57,0xf0,0x3d,0xf7,0xc7,0x51,0xdc,0x3e,0x2e,0x64,0x3c,0x83,0xd2,0x2d,0xe1,0x7f,0x28,0x1f,0xb3,0xf8,0x36,0x60 -,0x79,0x00,0x00,0xb0,0x0f,0x00,0x78,0x80,0x00,0x05,0xfb,0xf6,0xf7,0x69,0x6f,0x24,0x1f,0x1b,0x10,0x84,0xe1,0xc5,0xa6,0xb8,0x33,0x2c,0x1f,0xda,0x05,0xa0,0xa0,0x7a -,0xcb,0x91,0x00,0x72,0x22,0x02,0x20,0x38,0xff,0xf1,0x50,0x80,0x30,0x1f,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x3d,0x18,0x4d,0x10,0xa9,0x22,0x29,0x72,0x2e,0x4a,0xbb,0x83 -,0xa0,0xca,0x6c,0x00,0xce,0x34,0x03,0xf8,0x38,0x7d,0xb8,0xd5,0xc2,0x13,0x55,0x70,0xb5,0xd9,0xc9,0x6e,0xe7,0xbf,0x45,0x36,0x0a,0xa1,0xbb,0x62,0xd9,0x06,0xd0,0xac -,0x75,0x50,0xd1,0x8e,0xd2,0x7f,0xaa,0x5a,0x02,0x91,0x1e,0xbc,0x28,0x4e,0x2c,0x77,0xdb,0x84,0x89,0x7f,0x1f,0x12,0xc0,0x0b,0x29,0x9d,0xc2,0x70,0x97,0x7c,0xbc,0xb8 -,0x76,0x4c,0x76,0x8c,0xad,0x2b,0x2d,0xf2,0xc9,0xe4,0x59,0x51,0x9c,0xc7,0x65,0xce,0x94,0xdc,0x8b,0x40,0x02,0x51,0x7c,0xe1,0x0e,0x8c,0x00,0x2f,0x17,0xd4,0x32,0xd8 -,0xe0,0x6f,0x06,0x2c,0x41,0x47,0x42,0x07,0x0c,0x0f,0x8a,0x51,0x39,0x30,0x60,0xc5,0x71,0x55,0x6d,0xe4,0x21,0xf1,0x88,0xad,0xc0,0x44,0x42,0x96,0x9c,0x5a,0x73,0x4b -,0x69,0x30,0xb3,0x3b,0x66,0xaf,0xdf,0xd5,0xf6,0x45,0xed,0x91,0x00,0x23,0x59,0xa9,0xb0,0x9d,0x72,0x75,0x2d,0x14,0xa5,0x40,0xd6,0x6b,0x8f,0x1e,0x5c,0xef,0x54,0x88 -,0xae,0x94,0xce,0xb3,0xac,0xa9,0x2c,0x75,0x2d,0x90,0x58,0xfb,0xc0,0xc7,0x11,0x30,0x38,0x72,0x28,0xa0,0xb2,0x82,0xc9,0x0a,0x93,0x22,0xd7,0x55,0x27,0x1c,0x7b,0x78 -,0xaf,0x61,0x67,0x3a,0xf7,0x37,0x7a,0x86,0x5f,0xa1,0x73,0x89,0xa8,0xa9,0xea,0x6b,0xb9,0x71,0x3d,0x9e,0xcb,0x35,0x74,0x4c,0x64,0xaa,0x9c,0xf1,0xaf,0xe5,0x4f,0xed -,0xd9,0xb3,0x4e,0xed,0x3f,0xb6,0x1f,0x3c,0xe3,0xa6,0x55,0xfa,0x6d,0xfd,0x55,0x55,0xf6,0xd3,0xce,0x65,0xbc,0x09,0x35,0x1c,0x8e,0xf5,0x2b,0x59,0x7c,0x78,0xd1,0xc7 -,0xe9,0xe4,0xfe,0x7e,0xab,0xdd,0x35,0x7b,0xf2,0x9e,0x6e,0xb7,0x22,0xdd,0xd9,0x03,0xfd,0xdc,0x21,0x0b,0x80,0xdb,0x3a,0x63,0xd7,0xe1,0x28,0xd5,0x5e,0x0d,0xd2,0xd9 -,0xaf,0xfd,0x37,0x3f,0xd0,0x7b,0xf5,0x84,0x7b,0x3e,0x97,0x5a,0x2f,0x52,0xef,0xfe,0x80,0x85,0x6f,0x7d,0x0d,0xbe,0x23,0xa8,0x71,0x12,0x34,0x28,0x73,0x92,0x9e,0xfa -,0x10,0xb0,0x00,0x4d,0xe7,0x12,0x6a,0xf4,0x9e,0xfd,0x38,0xef,0x73,0x91,0x88,0x90,0x31,0x9f,0x36,0x1d,0x5b,0xb7,0x10,0x0b,0x6d,0x46,0xc8,0x49,0xda,0x2c,0xd1,0x08 -,0x00,0x08,0x04,0x09,0xc8,0xf5,0xfa,0x0e,0xff,0xf1,0x50,0x80,0x31,0x1f,0xfc,0x21,0x6a,0xcf,0xdf,0xf7,0xfb,0xff,0xf7,0xaa,0x81,0x30,0x90,0x44,0x15,0x0b,0x05,0x42 -,0x81,0x60,0xa0,0x98,0x48,0x16,0x12,0x09,0x82,0x82,0x60,0xa8,0x50,0x26,0x15,0x09,0x0c,0x44,0x63,0x51,0x18,0x44,0x6f,0xb6,0xae,0x7c,0x57,0x8c,0x9a,0x55,0x65,0x7b -,0x77,0xad,0xc4,0x5c,0xab,0xad,0xd8,0xeb,0x2e,0x71,0xce,0xff,0x7e,0x82,0xb3,0xfb,0x0b,0x5e,0xde,0x3e,0xe2,0xfd,0x27,0xf0,0x3f,0x0f,0xbf,0xc0,0xbd,0x4f,0x7f,0xeb -,0x5c,0x90,0x44,0x13,0xbb,0xd1,0x9c,0x63,0xde,0x97,0xd9,0xf3,0xe1,0x71,0xe8,0x48,0x39,0xee,0xb1,0x54,0x75,0xa2,0x50,0xa9,0xc9,0x03,0xff,0x1a,0x9c,0x3b,0x7b,0xd1 -,0x52,0x42,0xbc,0x37,0x11,0x56,0xa0,0xaf,0x7c,0x27,0xb4,0xe0,0x69,0xbf,0x6d,0x06,0xf0,0x20,0x2f,0x22,0x5b,0xb6,0x9d,0x62,0xac,0xb1,0x31,0x4f,0x77,0x3b,0xc6,0x5f -,0xdb,0x95,0x65,0x53,0x75,0x48,0xea,0xd9,0x71,0xca,0xb0,0x47,0xb0,0xe5,0xd8,0x3c,0x08,0x85,0xcf,0x9e,0xfb,0xa2,0x12,0xa9,0x1d,0x3e,0x58,0xcb,0x42,0xf2,0x7c,0xe6 -,0x0f,0xfd,0x04,0x2e,0x8c,0x9d,0xf0,0xef,0x1e,0xe1,0xe2,0x00,0x03,0xc0,0x00,0x02,0x61,0xdf,0xb3,0xa4,0x5c,0x42,0xe0,0xb0,0x0a,0x54,0x0b,0x06,0x04,0xc1,0x80,0xb8 -,0x50,0x2c,0x14,0x13,0x0d,0x03,0x01,0x62,0x20,0x58,0x28,0x16,0x0a,0x05,0x48,0x22,0x31,0x88,0x4c,0x22,0x43,0x08,0x89,0xe2,0x56,0x2e,0x71,0x97,0x98,0x95,0x52,0xa5 -,0x5a,0x25,0xf9,0x9d,0x57,0x84,0xe3,0xc7,0x17,0xaf,0x19,0xf1,0x63,0xc5,0x9f,0x90,0xb4,0xf9,0x87,0xf2,0x53,0xd3,0x57,0x9d,0xf3,0xcd,0x95,0x6b,0x8d,0xdb,0xe6,0xfa -,0x2d,0x3a,0xaa,0xab,0xa2,0xec,0x7b,0x13,0xfa,0x60,0xe7,0xfb,0xcf,0x96,0x81,0xf6,0xd7,0xd5,0x9d,0x1b,0xad,0x9a,0x8b,0x7c,0x35,0xd0,0xd8,0x5d,0x04,0x9a,0xbf,0x33 -,0xa5,0xbf,0xa1,0xec,0xe9,0x23,0x10,0xdb,0x78,0xdf,0xd3,0x7d,0xf3,0xa6,0x5e,0x5a,0x46,0xf3,0x42,0x39,0x78,0x0e,0x7f,0xef,0xbf,0xc4,0xe3,0x8f,0xc4,0xe8,0xa7,0x6c -,0xa6,0x87,0x2e,0x43,0x87,0x78,0x0b,0x3d,0x80,0x0f,0x2f,0x20,0x17,0x06,0x68,0x8a,0x7e,0x60,0xc8,0xef,0x68,0x1f,0x96,0x1e,0xb8,0x4a,0x63,0xb8,0x5a,0xa1,0xdd,0xf5 -,0x80,0x01,0xb7,0x4c,0x40,0xbc,0xc0,0x98,0x2e,0x4f,0xba,0x58,0x16,0x09,0x00,0xe0,0xff,0xf1,0x50,0x80,0x33,0xff,0xfc,0x21,0x0a,0xcf,0x4b,0xf7,0xff,0xff,0xbc,0xaf -,0x70,0xc0,0x58,0x30,0x14,0x13,0x05,0x06,0xc2,0x50,0xb1,0x10,0x4c,0x24,0x0a,0x85,0x04,0xa1,0x40,0xa8,0x50,0x24,0x15,0x09,0x85,0x42,0x42,0x30,0x88,0x4c,0x42,0x46 -,0xd7,0x3a,0xe6,0xea,0x55,0xca,0xca,0xba,0x22,0xf2,0x12,0x65,0xca,0xc7,0x1f,0x1e,0x33,0xef,0xf3,0xfb,0x83,0xe0,0x50,0xe6,0xfd,0xfb,0xba,0x28,0x7f,0x41,0xd5,0x3a -,0x0b,0xf4,0xff,0x50,0xf8,0xb4,0x9a,0x6a,0x0e,0x24,0x8f,0xe0,0xe6,0x7e,0x48,0x7f,0xa8,0x98,0xfc,0xe4,0xf3,0xab,0x6f,0x7e,0x89,0xa3,0x78,0x3d,0x17,0x3e,0x87,0x32 -,0xd8,0x3a,0x8a,0x28,0x40,0x2d,0x5e,0x19,0x93,0xfe,0x02,0xb9,0x78,0x2f,0x8a,0x03,0x38,0xee,0x5d,0xc7,0xed,0x4f,0xad,0x8f,0x16,0x6f,0x86,0x6e,0x5e,0xe9,0xaa,0x68 -,0xdb,0x22,0x25,0x8a,0xb2,0x8f,0xab,0xba,0x96,0xac,0x4a,0xff,0x77,0xd5,0xe3,0xd0,0x7a,0xfc,0x94,0x25,0x9e,0xc6,0xe2,0x9b,0xf2,0x40,0x45,0x32,0xe2,0x70,0x23,0x19 -,0xfc,0xab,0xcc,0xbb,0xd3,0x4a,0xb7,0x1b,0x0b,0xbb,0x48,0x1c,0xc1,0xae,0xd0,0xe3,0x44,0xf5,0xa6,0x0f,0x76,0x0f,0x0a,0x80,0x4d,0x57,0xce,0xbb,0xa0,0x09,0x51,0xde -,0x17,0x05,0xbb,0x2b,0x22,0x53,0x01,0x50,0x2a,0x14,0x2c,0x24,0x0b,0x09,0x02,0xc1,0x80,0xb0,0x50,0x50,0x14,0x0a,0x85,0x85,0x01,0x50,0xb0,0x50,0x4a,0x14,0x0a,0x85 -,0xc2,0xa1,0x10,0xb8,0x54,0x66,0x25,0x1b,0x84,0x4a,0xcd,0x57,0x6d,0x7c,0x7e,0x7f,0x57,0xbd,0x4b,0x6d,0x78,0x96,0xaf,0x3b,0xfc,0x6f,0x6d,0xa7,0x0f,0x7f,0xaf,0xdf -,0xd7,0xdb,0xfc,0x68,0x3e,0xfe,0x39,0x17,0xbf,0xff,0xaf,0x93,0x6f,0xf9,0x67,0xfb,0x71,0xfe,0x74,0x08,0x74,0x2e,0x5e,0xde,0xe5,0xf3,0xb2,0xca,0xd1,0x8f,0xf1,0x1e -,0x27,0xc5,0xf3,0xe3,0xc2,0xa4,0xa2,0x17,0xb6,0x7a,0x8d,0x00,0x0c,0xf4,0x67,0x0f,0x85,0x3f,0x21,0xe7,0x5d,0x5c,0xb8,0x72,0x7f,0xe7,0xf4,0x7f,0x53,0xe6,0x09,0xff -,0xfb,0xe7,0xca,0x5f,0x67,0x20,0x47,0xb3,0x93,0xf5,0x9f,0x93,0xd7,0x6b,0x9f,0x14,0xf0,0xe4,0xdb,0xdb,0xa8,0x80,0x39,0x1e,0x17,0x67,0xda,0x6d,0xd2,0x20,0x00,0x3c -,0x83,0xc4,0x00,0x39,0x00,0x3c,0x3c,0x80,0x07,0x07,0x23,0x8b,0x98,0xe2,0x7b,0x9d,0xe7,0xb8,0x1d,0xcf,0xe4,0x87,0x80,0x3c,0x40,0x01,0xe2,0x00,0x38,0x80,0xe4,0x44 -,0x1c,0x7c,0x19,0x24,0x00,0x48,0x01,0x3b,0x83,0x3d,0x10,0x08,0x01,0x60,0x1c,0xff,0xf1,0x50,0x80,0x30,0x5f,0xfc,0x21,0x2a,0xcf,0xf7,0xfc,0xff,0xff,0xff,0xaf,0x60 -,0xc0,0xd0,0x2c,0x14,0x13,0x05,0x42,0xc1,0x42,0x30,0x50,0x30,0x16,0x0a,0x05,0x82,0x86,0x21,0x19,0x54,0x24,0x13,0x11,0x04,0x48,0xc5,0xba,0x8e,0x6a,0xe6,0x79,0xed -,0x48,0x49,0x52,0x55,0x38,0x94,0xae,0xbd,0x71,0x79,0x4f,0xfd,0xb4,0x33,0xf6,0xea,0x28,0xf5,0xf0,0xf4,0x01,0xfd,0x47,0x81,0xf3,0x0d,0x87,0xda,0x7e,0x0f,0xa4,0x44 -,0x7d,0x68,0xef,0x63,0xa0,0xfe,0xf2,0xdf,0x55,0xdd,0xa8,0xf3,0x8f,0x87,0xed,0x71,0xb9,0x86,0x78,0x03,0xa4,0x8f,0xd6,0xef,0xda,0xe9,0x8e,0xec,0x74,0xbd,0xf5,0x02 -,0xb9,0x2f,0x79,0xfb,0x67,0x6b,0xa3,0x73,0xeb,0x8a,0xfa,0x5f,0x1a,0xe2,0x05,0xb1,0xec,0x22,0xea,0xbe,0x43,0xb9,0xd9,0x9d,0x09,0x26,0xa1,0xd7,0x7a,0xa8,0x5c,0x98 -,0xf4,0x5d,0x03,0x95,0x42,0x8e,0xf8,0x22,0x81,0xcf,0xfe,0x5d,0x4f,0x75,0x48,0x0f,0x7a,0x0f,0xa9,0x46,0xe3,0xc2,0x7f,0xfe,0x7d,0xd3,0xc5,0x1e,0xe7,0xb2,0xcb,0xde -,0xf4,0x40,0x16,0x1e,0x02,0x4e,0xad,0x00,0x86,0x55,0x08,0x22,0x9b,0xb8,0x0e,0xf9,0x23,0x89,0xdc,0x4d,0x29,0x29,0x59,0x4a,0xa0,0x50,0xe5,0x30,0x6d,0x04,0xc0,0xa5 -,0x40,0xb0,0xa0,0x2c,0x18,0x0b,0x0d,0x02,0xa1,0x60,0xc0,0x58,0x28,0x36,0x0a,0x05,0x42,0xc2,0x41,0x98,0x54,0x42,0x17,0x08,0xb5,0xe3,0xdb,0xdd,0x7a,0xf1,0xe6,0xea -,0xb2,0x64,0x64,0x84,0xa9,0xa9,0x7f,0x5b,0x99,0x7b,0x46,0xbc,0xfb,0x7d,0xbd,0x83,0xe6,0x13,0xf5,0x76,0xfe,0xbb,0xc8,0x7b,0xfe,0xba,0x39,0x7a,0x6b,0x93,0xe5,0xee -,0x97,0x49,0x67,0xf3,0x87,0x88,0x1c,0xb0,0x11,0xad,0x14,0x3d,0x9b,0x7f,0x6b,0xb6,0x7c,0x0f,0x41,0x7e,0x4b,0xe8,0x7a,0xdb,0x7c,0xbb,0x87,0xe2,0x3c,0x8b,0xf5,0xf6 -,0x78,0x3f,0xdf,0x8b,0x54,0xf7,0x87,0xd4,0xef,0xc3,0x86,0x06,0xb4,0x72,0xed,0x43,0xcd,0xc0,0xff,0x65,0xf9,0x2e,0x97,0xdc,0xf3,0xd7,0xfd,0x8e,0xeb,0x51,0xfa,0xff -,0x9e,0xc7,0xbc,0xf4,0x08,0x1c,0x8b,0xbf,0x0a,0x1e,0x21,0xc5,0xc0,0x26,0x25,0x49,0x27,0xc8,0x00,0x00,0x96,0x94,0x78,0x52,0xc4,0xe0,0x8c,0x97,0x88,0x1f,0x88,0xa5 -,0x92,0xa8,0x01,0xf1,0x0a,0x58,0x5a,0x00,0x13,0x05,0x00,0x18,0x00,0x08,0x08,0x81,0xc0,0xff,0xf1,0x50,0x80,0x31,0xbf,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x4d,0x16,0xa9 -,0x0c,0x89,0x71,0x33,0x4b,0x33,0x5e,0x45,0xcc,0xe1,0x8a,0xcb,0x19,0x76,0xa6,0x94,0x17,0x93,0x77,0x0d,0x8d,0xf3,0xaa,0xc5,0xd2,0x54,0xaf,0xec,0xa7,0xdb,0x6e,0x7e -,0x0b,0x8f,0x65,0x20,0x3d,0xeb,0x4c,0xdb,0x5e,0x9d,0x97,0xf2,0x2d,0xb4,0x1e,0x3c,0x32,0xe1,0x0f,0x67,0x74,0xb9,0x61,0xe6,0x26,0xc4,0x74,0x16,0x1d,0x7c,0x94,0x5c -,0x80,0x7d,0x77,0x50,0xa1,0x24,0x28,0xc4,0xb8,0x9a,0x05,0x09,0xc1,0x56,0x6a,0xaa,0x90,0xc6,0x6c,0x5e,0x74,0x6d,0xcd,0x06,0x8b,0xd3,0x5f,0x0e,0x3a,0x5e,0x9c,0x35 -,0xb5,0xde,0x7d,0x5c,0xdf,0xfe,0x18,0x15,0xb3,0x7f,0xf7,0xbb,0x41,0x36,0x6f,0x0d,0x6f,0x7d,0x99,0x1a,0xbe,0x9f,0x22,0x16,0x90,0x34,0xbc,0xaa,0x21,0x39,0xd9,0x39 -,0xbb,0x29,0x66,0x74,0xc6,0xfb,0x3c,0x80,0xd8,0xae,0x07,0x26,0xf5,0x1d,0x9b,0xae,0x27,0x56,0x38,0x65,0xe7,0x0f,0xdb,0x5b,0x87,0x57,0x3d,0x99,0x59,0xe7,0x67,0xb1 -,0xc0,0x85,0x17,0x82,0x9b,0x0e,0xae,0x0f,0xb2,0xf1,0xbf,0xfb,0xa8,0xa0,0x34,0x94,0x12,0xc8,0x52,0x67,0x40,0x10,0x11,0x14,0x34,0x61,0xb3,0x46,0x28,0x99,0x72,0xf8 -,0xac,0xd7,0x41,0xb4,0xa2,0x25,0x61,0x07,0xd5,0x39,0x15,0x3b,0xf4,0xd7,0x1c,0x93,0x7b,0x34,0x93,0x1a,0x8a,0xcb,0x2c,0x45,0xcc,0x86,0xd6,0x6e,0xe0,0xec,0x52,0x88 -,0x59,0x18,0xc0,0xbc,0x88,0xa1,0xa4,0x2a,0x14,0xa2,0x97,0x29,0xbd,0x96,0x24,0xbd,0x02,0x35,0xb3,0xcb,0x62,0x4e,0x1c,0x69,0x39,0x49,0xa5,0xa6,0x8b,0xb4,0xc9,0x9f -,0x67,0x77,0x1e,0x8d,0x22,0x65,0x8f,0x67,0x0a,0x86,0x66,0xee,0xc1,0x6a,0xd1,0x85,0xc1,0x59,0x85,0x9e,0x4a,0x9e,0x4f,0xaa,0x6e,0xa3,0xdd,0xbb,0x26,0x9c,0x1a,0x70 -,0x61,0xaa,0x42,0x91,0x52,0xfc,0x8a,0x82,0xe2,0xa8,0x4a,0x68,0x5a,0xab,0x5b,0x08,0x6a,0x8e,0x28,0xa2,0x7e,0xaa,0x59,0xd5,0xf5,0x82,0xae,0x93,0xe5,0x29,0x3e,0x96 -,0x95,0xb4,0x1e,0x3a,0x0f,0xe6,0xb0,0xa8,0xc4,0xbc,0x42,0x5f,0xcc,0x30,0xb8,0x80,0x16,0x88,0x01,0x4d,0x4d,0x1e,0x0a,0x99,0x1d,0x75,0x06,0x57,0x2d,0xda,0xb6,0x54 -,0x53,0x0a,0xcd,0xa9,0xb0,0xab,0x8d,0xe2,0xbc,0x15,0xcc,0xff,0x37,0x9c,0xe6,0xd9,0x81,0xa2,0xad,0x31,0x02,0x60,0x31,0x7b,0x60,0x04,0x99,0x86,0x3a,0x9c,0xff,0xf1 -,0x50,0x80,0x33,0x9f,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x55,0x18,0x2d,0x11,0x99,0x14,0xd4,0x84,0x92,0xba,0x0a,0xdc,0x7c,0x24,0x76,0xd2,0x57,0x9f,0x39,0xd8,0xc1,0xd5 -,0x84,0xd6,0x51,0xba,0x2e,0x3b,0x79,0xe1,0x60,0x57,0xd2,0x2e,0x52,0xa3,0xc4,0x94,0xb8,0xdd,0x5d,0xdb,0x77,0xd4,0xea,0x5c,0xac,0xe1,0x5d,0x3a,0x6e,0xb7,0x9d,0x89 -,0x5f,0x2d,0x35,0x3e,0xd5,0xe7,0x35,0xee,0xbc,0xbf,0x0d,0x5e,0x84,0xb5,0x16,0xe8,0x89,0x42,0x1e,0x7d,0x53,0x34,0x5f,0xb2,0xaa,0xa2,0xdb,0x11,0x5e,0xe0,0x90,0x44 -,0x68,0xea,0xda,0x87,0x35,0xa8,0x34,0xb8,0x73,0xed,0xc3,0xf0,0xda,0xe7,0x67,0xf8,0xef,0x12,0x0a,0xee,0xaf,0x7a,0xd8,0xaf,0xe0,0xbc,0x9f,0xcf,0xbf,0xf2,0x54,0xf4 -,0x05,0x87,0x55,0xaa,0x5d,0x4b,0x4c,0xb8,0x1f,0x1a,0xc7,0x46,0x57,0x0b,0xf7,0x71,0xdb,0x61,0xb3,0x2c,0xed,0x4b,0xe8,0xe3,0xde,0x5b,0x95,0x91,0xe5,0x47,0x82,0x6b -,0x4a,0x09,0xf3,0xeb,0xb6,0xeb,0x3a,0x1d,0x69,0xe7,0x54,0xd4,0xee,0xba,0x0d,0xaf,0xe7,0x26,0x7f,0xf2,0xc4,0x6d,0x7b,0x17,0xab,0x41,0x9c,0x06,0x38,0x90,0x12,0x98 -,0x89,0x1e,0x47,0x4d,0x45,0x0c,0x26,0x30,0xd8,0xa9,0x42,0x64,0x49,0x94,0x12,0xe4,0x92,0xc4,0xeb,0x5b,0xc2,0xb0,0xe7,0x5d,0x70,0xaa,0xfd,0x8f,0x18,0xff,0x54,0xfc -,0x74,0x10,0xb3,0xc1,0x18,0xbb,0xf3,0x8e,0xfe,0xeb,0x63,0x1f,0x3a,0x28,0xf1,0xbf,0x3f,0x07,0xfe,0xee,0xab,0xa4,0x9b,0x7c,0x65,0xab,0xc7,0xae,0xec,0x50,0x2d,0xdb -,0x1a,0xd4,0x29,0xba,0x0d,0xab,0x31,0x69,0x6d,0x2a,0xa5,0x00,0x82,0xd5,0x29,0x74,0x18,0xb5,0xa9,0xd1,0x36,0x51,0x54,0x70,0x90,0x77,0x8a,0x53,0x62,0x34,0x24,0x30 -,0x37,0x88,0x31,0x1a,0xf0,0x10,0x4d,0xd1,0x12,0xc4,0xb8,0xd5,0xef,0x54,0x36,0x02,0xe8,0x86,0x49,0x0f,0x80,0x24,0xb2,0x0c,0xb4,0x50,0x93,0xc6,0x84,0xce,0x49,0x46 -,0xb2,0xa8,0x52,0x60,0x4c,0xa5,0x4b,0xea,0xdc,0x47,0x4d,0x11,0x9a,0x9d,0xed,0x1f,0x2d,0xe2,0xb7,0x96,0x3e,0xf2,0xaf,0x94,0xd8,0x66,0x42,0x26,0x36,0xef,0x25,0xbe -,0x67,0xe4,0x2b,0x51,0xc7,0x97,0x8c,0xf9,0xf7,0x08,0x98,0x65,0x96,0xaf,0xc5,0x19,0xb6,0x55,0xf7,0x1e,0x07,0x58,0xca,0x4b,0xad,0x79,0xdf,0xc7,0x19,0xb8,0x4f,0x09 -,0xa2,0xa8,0x03,0x45,0xaf,0x8f,0x86,0x9f,0xbf,0x86,0x72,0xa1,0xa3,0x53,0xb5,0x21,0xdc,0xa1,0xd2,0xaa,0x76,0x23,0x08,0xc1,0x13,0x80,0xff,0xf1,0x50,0x80,0x31,0x1f -,0xfc,0x21,0x6a,0xcf,0xdf,0xff,0xbf,0xff,0xfe,0xb3,0x61,0x40,0x58,0x48,0x16,0x12,0x85,0x04,0xa1,0x41,0x30,0x90,0x4a,0x14,0x1a,0x89,0x04,0xa1,0x21,0x98,0x44,0x26 -,0x11,0x11,0x84,0x46,0x61,0x11,0x94,0xea,0x6e,0xe6,0x6b,0x77,0x75,0xbd,0x61,0x5a,0xab,0x55,0xe2,0xef,0x38,0xf1,0x5e,0x52,0x71,0xe3,0xe3,0x43,0xcb,0x97,0xd3,0x7f -,0xba,0x57,0xfc,0x9b,0xd7,0x3f,0xd2,0x8b,0x9b,0x6f,0xf7,0xb4,0x17,0xe6,0x3d,0xb5,0xc5,0xf2,0xd6,0x9b,0x81,0x8f,0x13,0xd8,0x6c,0x5c,0xea,0x90,0xce,0x7e,0x9f,0xa1 -,0xea,0x31,0x91,0xf4,0xf6,0xf6,0x1e,0x6e,0xe2,0x37,0xa3,0x74,0x44,0xd0,0x03,0xf2,0xac,0x38,0xfd,0xe4,0x6e,0xfb,0xf3,0x77,0x69,0xdf,0xb7,0x2c,0x3e,0x8a,0x9a,0x83 -,0x42,0xed,0xa3,0xf6,0x62,0x60,0x6e,0x57,0x2b,0x9a,0x4f,0x8b,0xad,0x75,0xf6,0xa2,0x90,0x8e,0xde,0xa1,0x18,0x9c,0x2c,0xa2,0x62,0x9d,0x9b,0x64,0xbb,0xc2,0xb1,0x59 -,0xb1,0xfb,0x24,0x28,0xb9,0xdc,0xde,0x4b,0x34,0x2d,0xdc,0xde,0x8c,0x37,0x66,0xfb,0x50,0x3d,0xdc,0x94,0x59,0xbc,0x46,0xd1,0xb0,0x5d,0xa9,0xb5,0x30,0x1d,0xf8,0x33 -,0x40,0x0a,0x02,0x60,0x2a,0x19,0x28,0x16,0x22,0x05,0x86,0xe1,0x80,0xb0,0xdc,0x2a,0x17,0x0a,0x84,0xc2,0xa3,0x32,0x08,0x4c,0x62,0x13,0x08,0x89,0xbb,0x9c,0xe7,0x17 -,0xbb,0x55,0xe2,0xae,0xaf,0x1a,0xaf,0x3d,0xe8,0xe3,0xb9,0x25,0x4f,0x3e,0x26,0x79,0xde,0xbc,0x8e,0x0f,0xbb,0xc3,0x8f,0x3b,0x7f,0xcf,0x84,0xbf,0x0e,0xb7,0xf0,0xdd -,0x5f,0xaa,0x6f,0xd0,0xcd,0xd1,0xd3,0x69,0x9f,0xd5,0x68,0xe7,0x77,0x56,0x77,0x27,0xdc,0x79,0x17,0x63,0x57,0x46,0x27,0x46,0xee,0xff,0xa6,0x30,0x74,0x21,0xe2,0x6b -,0x69,0x2e,0x4e,0x68,0x59,0x7b,0x8e,0x34,0x51,0x7d,0x14,0xd2,0x09,0xac,0x15,0xbb,0xe9,0xa8,0x00,0x4a,0xc9,0x4a,0xea,0x95,0xd9,0x77,0x7f,0x09,0xbc,0x2b,0x8d,0x01 -,0xbd,0x3b,0x7c,0x83,0xc4,0x07,0x98,0xfd,0x8f,0x5c,0x77,0x02,0x8b,0x9f,0x10,0x22,0x20,0x84,0x72,0x38,0xf0,0x24,0xf3,0x02,0x07,0x97,0xb8,0x77,0x5f,0xa8,0x0f,0x71 -,0xeb,0xc0,0x77,0x1e,0xe7,0xe5,0x85,0xbd,0x6f,0x58,0x08,0x07,0x2a,0x84,0xbd,0x71,0xeb,0x43,0xd7,0x88,0x83,0x6d,0xe0,0x28,0x0b,0xa5,0xeb,0x6c,0x13,0x05,0x42,0x0e -,0x80,0x70,0xff,0xf1,0x50,0x80,0x31,0xff,0xfc,0x21,0x0a,0xcf,0xf7,0xfb,0xff,0xff,0xfe,0xb3,0x82,0x30,0x90,0x2c,0x24,0x0b,0x85,0x44,0x81,0x50,0xb0,0x50,0x2e,0x16 -,0x0a,0x0d,0x42,0x81,0x51,0x20,0x4c,0x24,0x13,0x11,0x04,0xc2,0x22,0x30,0xa8,0x84,0xa8,0xad,0x4a,0xf3,0xe3,0xce,0x65,0xde,0xde,0xde,0xa2,0x61,0x6a,0xd6,0xf8,0x9b -,0xbc,0xab,0xf8,0x6e,0x9f,0x1e,0xc3,0x92,0xdf,0x1e,0xaf,0xb5,0x2b,0x60,0xad,0x10,0x5e,0x8f,0xde,0xf3,0x8f,0x49,0x7f,0xb3,0xb7,0x36,0x72,0xd3,0xe1,0xef,0x8d,0x39 -,0xb6,0x92,0xf6,0x4d,0x36,0x8d,0xe3,0xd5,0xef,0x3e,0x93,0x4c,0x66,0xb0,0xbe,0xb0,0x2d,0x33,0x5c,0x6e,0xf0,0x06,0xbf,0x50,0xac,0x81,0xf8,0xfb,0x18,0x23,0xb5,0x8e -,0x35,0xdf,0x89,0xe3,0x18,0x97,0xa7,0x94,0x98,0xaf,0xe0,0x9a,0x86,0x60,0x67,0xf0,0xb0,0x02,0x9b,0xa7,0x47,0xd5,0x1a,0xfe,0x3f,0x82,0x19,0x54,0xf5,0x87,0x7c,0x72 -,0x60,0x70,0x1e,0xb1,0x5d,0x2a,0x7b,0xa8,0xdf,0xa3,0xa5,0x80,0x8c,0x85,0x76,0x82,0xb7,0xef,0xd8,0x57,0xf8,0xec,0x76,0x9e,0x2a,0x45,0x68,0xc5,0x9f,0xbc,0x1a,0x9e -,0x40,0x00,0x1e,0x00,0x00,0x04,0x6a,0xcc,0x40,0x42,0x8e,0x25,0xa0,0x01,0x25,0xc0,0x54,0x30,0xe0,0x2c,0x28,0x0b,0x15,0x04,0xc1,0x40,0xc0,0x58,0xaa,0x37,0x08,0x85 -,0x42,0x21,0x70,0x98,0x54,0x46,0x15,0x10,0x88,0xc6,0x22,0x62,0x66,0x9c,0xff,0xcf,0xf1,0xba,0xd2,0xa8,0x8a,0xe3,0x72,0x79,0xd7,0x3f,0x1e,0x39,0xaa,0x75,0x5e,0xd5 -,0xcc,0x7b,0x50,0xdb,0x76,0xfd,0x78,0xfe,0xbb,0xed,0xfc,0x31,0xe5,0x70,0x7c,0x79,0xf9,0xbf,0x97,0x7d,0xfd,0x2e,0xb6,0xae,0xe8,0x0d,0xff,0x6c,0xd8,0xff,0x63,0xe5 -,0x73,0xa6,0xdb,0x7f,0xfe,0x68,0x23,0xbd,0xde,0x6b,0xfb,0xaa,0x4c,0xaa,0x92,0xb0,0xd1,0x45,0x1a,0x25,0xf4,0x4f,0x34,0xe3,0x68,0xae,0xf1,0xc0,0x39,0xd2,0x62,0x49 -,0x6f,0x1e,0xd7,0xdf,0xc0,0xe0,0xe4,0x79,0xf9,0x8f,0xbf,0xac,0xe4,0x79,0x38,0x00,0x3b,0xf8,0xc9,0x82,0x25,0xf0,0x87,0xaf,0x88,0xe4,0x14,0xea,0x50,0x78,0x7b,0x00 -,0xb0,0x1e,0xe7,0xb2,0x1d,0xcb,0x7c,0xc0,0x77,0xf8,0x88,0xe6,0xc5,0x81,0xc4,0xe4,0x22,0xa3,0xff,0xbc,0xff,0xdc,0x80,0xf2,0x79,0x80,0x03,0x80,0x00,0xf3,0xca,0x00 -,0x18,0x00,0xf5,0xaf,0x1c,0x5e,0xec,0x49,0xa2,0xef,0xde,0xa0,0x26,0x11,0xcb,0x88,0x0e,0xff,0xf1,0x50,0x80,0x31,0xff,0xfc,0x21,0x0a,0xcf,0xcf,0xd3,0xff,0x7f,0xfe -,0xaf,0x81,0xb0,0x60,0x26,0x14,0x0b,0x04,0xc2,0x81,0x61,0x20,0x9c,0x2c,0x44,0x0a,0x85,0x82,0x85,0x30,0xa8,0x4c,0x2a,0x13,0x0a,0x84,0xc2,0x41,0x12,0x98,0x44,0x4c -,0xab,0xd4,0xae,0x3b,0xb9,0xb9,0x15,0x2a,0x4d,0x65,0x54,0x95,0xa8,0xae,0x37,0x39,0x5a,0xeb,0xcf,0xfb,0xfc,0x0b,0x2d,0x5e,0x8a,0x2f,0x72,0x3c,0xfe,0xd9,0xe7,0xfc -,0xc6,0xb0,0x2e,0x7f,0xa3,0xe6,0xa7,0xb1,0xc7,0x89,0x1f,0x6e,0xf1,0xb5,0x6e,0x5a,0x2b,0xb9,0xce,0x6f,0xdf,0x75,0xc1,0xc9,0x61,0x69,0x91,0xdd,0xf9,0x96,0x8c,0xe6 -,0x11,0xf5,0x7e,0xfd,0x49,0xe8,0xd3,0xe1,0xb1,0x8c,0xe1,0x51,0x75,0xcf,0x66,0x5a,0xfe,0x87,0x37,0xf9,0x10,0x5f,0x14,0xa0,0x86,0x6b,0xf3,0x1e,0xe4,0xf6,0x48,0x29 -,0xd7,0x91,0x1a,0x31,0x1a,0x61,0x6f,0xd2,0x4e,0x96,0xf4,0x2e,0x4b,0x3a,0x64,0x24,0xd3,0xee,0x1d,0xd2,0xaa,0xa6,0x82,0x2c,0xe6,0x87,0x94,0x07,0xb8,0x1c,0x9c,0x43 -,0x92,0xa0,0x77,0xd3,0x85,0xee,0x87,0x32,0x13,0x6c,0x5b,0x74,0xad,0x5f,0xc6,0x2a,0xcd,0xdb,0x12,0x86,0xba,0x92,0x49,0x6d,0x8d,0xd0,0x13,0x14,0x8d,0x9d,0xfd,0x1e -,0xe8,0x0b,0x82,0x20,0x2a,0x98,0x90,0x27,0x0c,0x05,0x82,0x81,0x61,0x20,0x58,0x28,0x38,0x0b,0x05,0xc2,0xc2,0x50,0xa0,0x94,0x22,0x15,0x13,0x85,0x44,0x21,0x30,0x8a -,0x57,0x9b,0xd6,0x57,0xeb,0xf6,0xf3,0xca,0xf9,0xeb,0xbd,0x6e,0x45,0xcd,0xce,0x3f,0xf2,0xff,0xf0,0xfa,0xad,0xdf,0x1d,0xf9,0x6b,0xeb,0xfd,0x7d,0xbc,0xfb,0x40,0xfc -,0xab,0xd7,0xae,0x9f,0x56,0xfa,0x5d,0xfe,0x61,0x0f,0x8f,0xa3,0x87,0xf0,0x3f,0xbc,0xed,0xa5,0x92,0x6b,0x79,0x7c,0x39,0x56,0xda,0x34,0xff,0xe2,0xfc,0x77,0x38,0xfa -,0xf7,0xd3,0x7e,0xbd,0xcd,0x35,0x5c,0x44,0x29,0x58,0x64,0xac,0x9e,0xbd,0x7b,0x7d,0x2d,0x6f,0x6c,0xa2,0xb6,0xda,0x40,0x08,0x74,0x3f,0xd6,0x11,0xe1,0x3d,0xb1,0xe2 -,0xbe,0x91,0xc3,0xfa,0x17,0x17,0xe0,0x9f,0xe6,0xc4,0xd9,0xe5,0x2e,0x04,0x70,0xe0,0x20,0x18,0xf9,0xbe,0x1f,0x6a,0xe8,0x9f,0x98,0x47,0x90,0x00,0x7a,0xe0,0x00,0x38 -,0xf3,0x6c,0x00,0xe0,0x70,0x00,0x1e,0x49,0xc0,0x22,0x0e,0xff,0x73,0xd7,0x1e,0x20,0x10,0x0b,0xe1,0x00,0x02,0xb5,0x52,0x8b,0x24,0x4c,0x81,0x30,0x02,0x21,0x40,0x1c -,0xff,0xf1,0x50,0x80,0x32,0x7f,0xfc,0x21,0x0a,0xcf,0xf6,0x7b,0x7f,0xe7,0xfe,0xaf,0x80,0xb0,0x60,0x2c,0x64,0x0b,0x05,0x02,0xc4,0x40,0xb0,0x54,0x2c,0x14,0x3a,0x88 -,0xc2,0xa2,0x30,0x88,0x48,0x42,0x13,0x08,0x88,0xc2,0x22,0x55,0x4f,0x3c,0xcb,0xe6,0xf8,0xe5,0x6a,0x93,0x22,0x55,0x5c,0xcd,0x26,0xb8,0xf1,0x95,0x26,0xa9,0xaf,0xff -,0x87,0x60,0x1c,0x9f,0xf3,0xf7,0xdc,0x83,0xe7,0xe4,0xfb,0x8c,0x9d,0xde,0x95,0xc3,0xaf,0xd6,0x9f,0x2b,0x2e,0x68,0x5a,0xa3,0x54,0xe8,0x7a,0x68,0x9a,0xe5,0xe7,0xf2 -,0xa0,0x86,0xd3,0xe4,0x7f,0x28,0xed,0xcb,0xd3,0x10,0x8b,0xe5,0x0f,0x05,0xae,0xe5,0xb8,0xe6,0xe3,0x3e,0x0f,0x38,0xcf,0x87,0xfa,0x74,0x1f,0x94,0x4f,0x73,0xfc,0xdc -,0xb1,0x2d,0x1e,0x85,0xe9,0xcb,0xad,0x13,0x14,0xc3,0x8f,0xad,0xf8,0x0f,0xde,0x34,0x73,0x91,0x8f,0xab,0xe7,0xd7,0x55,0x57,0x65,0xd9,0xf1,0xa2,0xa0,0x88,0xac,0x2d -,0x52,0xe3,0xf0,0xbd,0x42,0x17,0x4d,0xcc,0x72,0x38,0xb8,0x80,0x07,0x90,0x00,0x58,0x52,0x5f,0xe6,0x56,0x51,0x53,0x5e,0xf7,0xe0,0xb4,0xac,0xc9,0xfd,0xcc,0x14,0x88 -,0x89,0x00,0x9e,0x86,0x75,0xa0,0xe8,0xf7,0x81,0x6a,0x99,0x02,0xfb,0x57,0x28,0xb5,0x3b,0xaa,0xa2,0x20,0x01,0x40,0x2a,0x58,0x70,0x16,0x0a,0x89,0x02,0xc1,0x80,0xb0 -,0x60,0x2c,0x14,0x0b,0x0d,0x04,0xc2,0x40,0xb0,0x90,0x26,0x11,0x12,0x84,0xc2,0xe1,0x50,0x88,0xd4,0x22,0x23,0x08,0x90,0x9c,0xcd,0x54,0xaf,0xc7,0xf1,0x7d,0x57,0x32 -,0xad,0xbd,0x11,0xc7,0xd5,0x7a,0xe3,0x7c,0xff,0x8d,0xdf,0x35,0xe7,0xd7,0xc5,0xff,0xdf,0xec,0x07,0xde,0x5e,0xed,0x18,0xe8,0x91,0x4f,0x8f,0xf9,0x3e,0x8f,0xea,0xfc -,0x18,0x7a,0x1f,0x4e,0x8f,0xa3,0xc0,0x16,0xbd,0x36,0x76,0xd7,0xd3,0x7c,0x5f,0xb6,0xe3,0x7d,0xa4,0x59,0x6c,0xdd,0x20,0x7f,0x68,0x4f,0xd9,0x7a,0x7f,0xf9,0xdf,0xf1 -,0xba,0x6b,0xfd,0xdc,0x5e,0xc1,0x5f,0x3a,0xde,0x0d,0xd5,0xf3,0x5d,0x48,0x15,0x9f,0xef,0x0c,0x28,0x20,0xaf,0x59,0xde,0x51,0xa3,0xf6,0xa2,0x2d,0x5f,0x31,0xee,0x9f -,0xf0,0x7b,0xa0,0xdb,0xf2,0x78,0x7c,0x41,0xe5,0xe6,0x07,0x10,0x5f,0xdc,0x8d,0x92,0x72,0xc7,0x74,0x80,0x02,0x79,0x2f,0x9a,0x38,0x10,0xa0,0xcc,0x00,0x11,0xb8,0x1b -,0x60,0x07,0x88,0x02,0x20,0x80,0x05,0x1e,0xef,0xbd,0x0b,0x5d,0x30,0x13,0x10,0x05,0x45,0xe6,0x07,0xff,0xf1,0x50,0x80,0x2e,0x7f,0xfc,0x21,0x0a,0xcf,0xbf,0xef,0xf7 -,0xff,0xfd,0xb2,0x80,0xb0,0xa0,0x2e,0x16,0x12,0x05,0x82,0x82,0x50,0xb0,0x54,0x2e,0x24,0x0b,0x05,0x02,0xa2,0x41,0x90,0xcc,0x22,0x23,0x08,0x90,0xc2,0x27,0x71,0xdb -,0xdb,0x2f,0x95,0xdc,0xa9,0x95,0xad,0xce,0x36,0x95,0x22,0xe6,0x79,0xde,0x4b,0xe3,0x2a,0xa3,0xf1,0xd0,0x1e,0xa7,0x47,0xdf,0xc9,0xfd,0xb7,0xbb,0xfc,0x14,0x68,0xf6 -,0xa7,0xee,0x7d,0x45,0xa8,0x7e,0x5b,0x2f,0x7a,0x7c,0xe5,0x0d,0xb7,0xfd,0x2e,0x4f,0x24,0x2b,0xb3,0x34,0xfa,0x34,0xbe,0x50,0x16,0x5a,0x35,0x27,0xc0,0xb2,0x7b,0x13 -,0x57,0xd8,0xd7,0x05,0x88,0x2a,0xc7,0x05,0x8d,0x22,0x9b,0x4f,0x2d,0x26,0x60,0xf6,0xa7,0xeb,0x45,0x39,0x71,0x64,0x4c,0xd1,0x42,0xbf,0xe7,0x19,0xd6,0xd3,0xdb,0x70 -,0x6b,0x5b,0x94,0xdc,0xcb,0x7b,0x35,0xf5,0x18,0x18,0x3c,0x5e,0xb3,0x02,0x40,0xbc,0x3e,0xc8,0x55,0x2a,0x19,0x68,0xca,0x9a,0x51,0x8a,0xe5,0x89,0xcc,0x0f,0x6e,0x30 -,0xd0,0x39,0x02,0x85,0x62,0x1d,0x03,0xb4,0x2c,0x5e,0xd6,0x90,0xa8,0x0a,0x00,0xa9,0x61,0xc0,0x58,0x4e,0x16,0x12,0x05,0x83,0x01,0x40,0xb1,0xd4,0x4c,0x14,0x12,0x85 -,0xc2,0x61,0x11,0x19,0x14,0x46,0x31,0x21,0x37,0x5c,0x67,0x5e,0x3c,0xe5,0x54,0x15,0x93,0x46,0x5f,0x98,0xdf,0xeb,0xf3,0x5a,0x4e,0x1b,0x6d,0xfb,0xd8,0x3e,0x43,0xe3 -,0xb3,0xfd,0xd1,0xb3,0x9f,0x8f,0xd6,0xc7,0x8b,0xb3,0xb3,0xe2,0x9f,0xb9,0xd7,0x74,0x38,0x46,0x6d,0x7e,0x96,0xfa,0xbe,0x90,0xa6,0xf2,0x97,0xf4,0x44,0xdd,0x95,0x1d -,0x27,0xf7,0xef,0xff,0x4e,0x89,0x65,0xa3,0x7c,0x75,0x02,0x95,0x5f,0x1e,0x7c,0xca,0x5f,0x77,0xd5,0xcd,0xe0,0xe9,0xeb,0xe2,0x90,0x55,0x77,0x39,0xaf,0x0b,0x7c,0x9f -,0x91,0xf6,0xd9,0x6e,0x3b,0x32,0xbf,0x2f,0x41,0x2b,0x89,0xe2,0x2c,0x00,0x1e,0x63,0xbc,0xe2,0xf7,0x0e,0x4a,0x72,0xe1,0xa9,0xae,0x80,0x8f,0xac,0xf4,0x6e,0xf8,0x34 -,0x12,0x47,0xfa,0x8b,0xff,0x80,0x1f,0xcb,0x1f,0xe3,0x1d,0xce,0x60,0x03,0x8b,0x98,0x00,0x3c,0x80,0x77,0x1e,0xb3,0xb8,0x05,0x3d,0xbf,0xb8,0x01,0xb2,0xc7,0x66,0x74 -,0x8a,0x80,0x99,0x69,0x01,0xc0,0xff,0xf1,0x50,0x80,0x2f,0x5f,0xfc,0x21,0x0a,0xcf,0xee,0xf7,0xff,0xff,0xfe,0xb1,0x70,0xb0,0xa0,0x34,0x14,0x13,0x09,0x02,0xc3,0x40 -,0xb0,0x94,0x28,0x16,0x0a,0x05,0x82,0x83,0x21,0x88,0x8c,0xa2,0x13,0x08,0x9c,0xca,0xf3,0xbf,0x8c,0xee,0xfc,0xf7,0x17,0xdf,0xb7,0x88,0xd5,0x25,0x5d,0x55,0xf9,0xe2 -,0xbb,0x9b,0xe3,0x32,0x2f,0xf9,0xe8,0x5f,0xae,0x9f,0x79,0x3f,0xe1,0x5e,0x46,0xa0,0x07,0xd7,0xb4,0xe3,0xfb,0xfa,0x2e,0x81,0xd2,0x84,0x33,0x19,0x70,0xd8,0x77,0x57 -,0xa2,0xbb,0xcc,0x87,0x0e,0x5e,0x79,0xe9,0x49,0xf8,0x1f,0x6b,0x57,0x50,0x47,0xd8,0x83,0x6e,0xaa,0xd2,0xb2,0x18,0x6e,0x46,0x63,0x1e,0xbb,0xe3,0xf5,0xf7,0x65,0x52 -,0xed,0x7b,0xf9,0x52,0xf9,0x36,0xaf,0x6a,0x8e,0xf2,0xda,0xce,0x65,0x1f,0x0e,0x37,0x84,0x3d,0xad,0x3e,0xdd,0x55,0x8d,0xfe,0x9a,0x52,0xaf,0x78,0x0e,0xef,0x7b,0xbe -,0x07,0xac,0x01,0x01,0xde,0x43,0xdc,0x40,0x9d,0x08,0xa9,0x17,0x40,0xf5,0xcd,0x01,0x0b,0x6c,0x69,0x80,0x2f,0x78,0x56,0x7d,0xd7,0x10,0xba,0x89,0xde,0x5d,0x49,0x40 -,0x11,0x05,0x00,0x54,0xa0,0x58,0x8e,0x18,0x0b,0x05,0x45,0x01,0x61,0x20,0x58,0x70,0x14,0x0c,0x05,0x04,0xc2,0x41,0x38,0x4c,0x2a,0x23,0x0a,0x84,0x42,0xa1,0x30,0xa8 -,0x44,0x46,0x11,0x09,0x84,0x44,0xda,0xea,0x6f,0xeb,0xc7,0xeb,0xfb,0x6a,0xa3,0x35,0xbb,0x10,0xe2,0xb8,0xce,0xb1,0xd3,0x9d,0x79,0xaf,0x1c,0x6f,0xd8,0x3f,0xfb,0xea -,0xb2,0x8f,0x9f,0x57,0xcf,0xf9,0x3e,0xd4,0x4e,0xad,0xbd,0xff,0xe5,0xc9,0xa2,0x4d,0x90,0xe9,0x16,0xd7,0x89,0xeb,0xbc,0xff,0xc7,0xb7,0x5b,0x79,0x6e,0xee,0xb0,0xb7 -,0xb5,0x0d,0xfa,0xc6,0xbe,0x40,0x07,0xbb,0x7f,0x6b,0xee,0x83,0x4b,0x38,0xe2,0x0f,0x57,0xcb,0x77,0x08,0x75,0x86,0xef,0xa6,0x73,0x3d,0x4c,0x30,0xe1,0x60,0x2a,0x0a -,0xbb,0x3f,0x67,0xbf,0xae,0xa8,0x18,0x25,0xe3,0x6f,0xf9,0xfb,0x76,0x17,0xd8,0x22,0xcd,0xfd,0x9c,0x43,0xbd,0x47,0xb8,0x57,0x91,0xca,0x11,0xce,0x81,0xe4,0x00,0x07 -,0x7b,0xbc,0x03,0x80,0x00,0x79,0x23,0x00,0x58,0x3c,0x40,0x03,0xbc,0x3b,0x80,0x00,0x79,0x00,0x37,0xa6,0x05,0x00,0x77,0x40,0xb9,0xeb,0x80,0x58,0xb9,0x7a,0x81,0xc0 -,0xff,0xf1,0x50,0x80,0x2d,0xbf,0xfc,0x21,0x0a,0xcf,0xff,0x7f,0xbf,0xff,0xff,0xb1,0x70,0xb0,0x60,0x52,0x14,0x13,0x09,0x02,0xc1,0x40,0xb0,0x50,0x2c,0x14,0x13,0x05 -,0x0a,0x42,0x40,0x98,0x48,0x22,0xf6,0x6b,0x33,0xcd,0x6b,0xbf,0x35,0x57,0x8c,0xd5,0x0b,0x65,0xe8,0x2e,0xae,0x65,0x6a,0x52,0x7d,0x74,0x27,0xd7,0xdb,0xec,0x7b,0xbf -,0x3b,0xea,0xf6,0x8b,0xfc,0xe7,0xef,0x26,0xe7,0xa9,0x75,0x62,0xd2,0x1c,0xc1,0x38,0x8a,0xbf,0x04,0x37,0xbf,0x6a,0xa1,0x54,0xce,0xba,0xbd,0xfa,0x3d,0x70,0xa2,0x34 -,0x09,0xfc,0x8a,0x11,0xd7,0xb4,0xe5,0x71,0xdf,0xef,0xbd,0x50,0xd7,0xc5,0xb9,0xce,0x83,0xb8,0xab,0xb9,0x72,0x5b,0x51,0xce,0xf8,0xfd,0x71,0x25,0xe3,0x35,0x5c,0x3a -,0x85,0x67,0xef,0xe1,0x4b,0x00,0x9b,0x59,0x61,0x5a,0x0a,0x46,0x7b,0xd4,0x2b,0x3a,0xf1,0x6d,0x88,0x8c,0x95,0x98,0x2c,0x3e,0x83,0x14,0xa6,0x06,0xea,0x10,0x99,0xa2 -,0xa0,0x0d,0x50,0x80,0x30,0x82,0x64,0xc5,0xc5,0xcb,0xa0,0x16,0x01,0x60,0x29,0xd8,0x88,0x16,0x1a,0x85,0x02,0xc1,0x80,0xb2,0x10,0x4a,0x17,0x0a,0x09,0x42,0x61,0x50 -,0x98,0x84,0x26,0x11,0x19,0x88,0x4a,0xcd,0xf1,0x9a,0xe7,0xcf,0x31,0xcf,0x14,0xba,0xa8,0xcb,0x97,0x52,0x79,0xe7,0x8e,0x7c,0xef,0x29,0xec,0xdd,0x4e,0x3a,0x1c,0x6d -,0xf7,0xe7,0xc7,0x75,0x3b,0xbf,0x94,0xdd,0x6a,0x79,0x75,0x72,0xfb,0x1a,0x83,0xaa,0xa1,0xbf,0xbc,0x61,0x67,0xcb,0x7e,0xe9,0x2a,0xe5,0x55,0x9d,0xb2,0x44,0xfe,0x9b -,0xd2,0x5e,0xcf,0x33,0x41,0xfb,0x39,0x2d,0x39,0xdd,0x4a,0xcc,0x9a,0x47,0x5e,0xda,0xa7,0x2d,0x05,0xf6,0xaf,0xfc,0x7f,0x01,0xee,0x7e,0xcf,0x91,0x3c,0x39,0x7b,0xb9 -,0xaa,0x7a,0x4d,0xab,0xa7,0x23,0xd4,0xfc,0x2f,0xad,0xfc,0x2b,0x77,0x61,0xdc,0x21,0xfa,0xae,0x39,0x1c,0x29,0xc2,0x09,0xed,0x7c,0x30,0x77,0xd3,0x4e,0xa2,0xf9,0x90 -,0x1d,0xdf,0x5b,0xba,0x2f,0xb2,0x9e,0xdf,0xba,0x84,0x60,0xa8,0xb7,0xae,0xcc,0x5a,0xe8,0x2b,0x2a,0x12,0x33,0xc6,0x92,0x8c,0xa2,0x9a,0x17,0x60,0x03,0xd7,0x77,0x40 -,0x17,0x54,0x8d,0xc2,0xca,0x6e,0x12,0x90,0x5a,0x01,0x39,0x01,0xc0,0xff,0xf1,0x50,0x80,0x2f,0xdf,0xfc,0x21,0x0a,0xcf,0xdf,0x7f,0x7f,0xff,0xff,0xaf,0x40,0xb0,0xe8 -,0x2a,0x14,0x0b,0x05,0x06,0xc1,0x40,0x90,0x58,0x48,0x36,0x0a,0x1c,0x44,0x61,0x11,0x18,0x44,0x66,0x11,0x09,0x84,0x48,0xe6,0xa6,0xff,0xc7,0xda,0xfe,0x3c,0x37,0xd5 -,0x65,0x75,0x95,0x56,0x24,0x45,0xe4,0xe3,0xba,0x7c,0x6e,0x33,0xf1,0x63,0xe5,0xb4,0x75,0xe1,0xf9,0xf8,0xd7,0xa8,0x02,0xf9,0xff,0x9d,0x36,0xf0,0xfd,0x97,0x9a,0x01 -,0xc6,0xe4,0xa3,0xeb,0xc7,0x37,0xfd,0xb9,0x89,0x9d,0x3a,0x0c,0x05,0x79,0x3e,0x57,0x66,0x93,0xfa,0xd0,0x93,0x21,0xad,0xde,0xa6,0xef,0xab,0x8a,0xe9,0xaa,0x18,0xbb -,0xe4,0x8f,0xa9,0x65,0x06,0x8c,0xab,0xe0,0x12,0x67,0xee,0x28,0xf5,0xfc,0xe9,0xf1,0x7a,0x97,0xd4,0xf0,0xf6,0x33,0x58,0xe9,0x5c,0xd3,0x42,0x10,0xc3,0x54,0x90,0xf3 -,0x09,0x4d,0x2a,0xdf,0xb0,0x95,0x24,0x74,0xac,0x92,0x98,0xee,0x0f,0xe4,0x0b,0x69,0x85,0x42,0x5c,0x67,0xcb,0x44,0xd6,0x9d,0x71,0x22,0x07,0xb8,0x04,0xad,0x64,0x3d -,0x68,0x84,0x80,0xd3,0x3d,0x40,0x0b,0x5c,0x44,0x05,0x3b,0x12,0x04,0xc2,0x70,0xa0,0x58,0x4a,0x24,0x0b,0x19,0x08,0xa1,0x40,0xa8,0xcc,0x2a,0x11,0x11,0x88,0x42,0x61 -,0x10,0x98,0x84,0x4a,0xc6,0xb2,0xbf,0xdf,0xfb,0xda,0x93,0x17,0x54,0x90,0x70,0x3c,0xee,0xba,0xcc,0x71,0x9a,0xdc,0xbf,0xa1,0xc3,0x65,0x7e,0x3a,0x3d,0xf9,0xfe,0x91 -,0xd0,0x74,0x4c,0xbe,0xdd,0x1d,0x9e,0x0b,0xfd,0xbf,0x08,0x19,0xe4,0x97,0xb5,0xb8,0x79,0x38,0x78,0x79,0xb8,0x7d,0x4b,0xf7,0x7f,0xa9,0xac,0xb2,0x6e,0x16,0x85,0xf2 -,0x3f,0xc2,0xf5,0xa3,0x23,0xa3,0x95,0xa1,0xbb,0x2e,0xa9,0x33,0x9e,0xeb,0xb4,0xb9,0x7f,0x2b,0xf1,0xaf,0xda,0xdb,0x7f,0xd7,0xfb,0xde,0x83,0xb8,0xff,0xd1,0xa8,0x85 -,0x6a,0x8e,0x7d,0xf5,0x04,0x03,0x7f,0x39,0x21,0x5f,0x27,0x23,0xc7,0x3e,0xa6,0xbe,0x5e,0xdf,0xf2,0xe1,0xc1,0x4d,0xae,0x26,0xcd,0x5b,0x91,0xc8,0xe5,0x43,0xc4,0x1b -,0xad,0x00,0x07,0xe5,0xbb,0xee,0x40,0xe5,0xa0,0x71,0x05,0x61,0xcb,0x74,0x88,0x4a,0x87,0xfc,0x44,0xec,0xee,0x8b,0xff,0x22,0x20,0x04,0xef,0x30,0xef,0xac,0x8a,0x54 -,0x12,0x03,0xdc,0x89,0xee,0x56,0xa0,0xba,0xe2,0x60,0x70,0xff,0xf1,0x50,0x80,0x32,0x5f,0xfc,0x21,0x0a,0xcf,0xff,0xfb,0xfe,0x7f,0xff,0xae,0x60,0xb8,0x58,0x30,0x19 -,0x0b,0x04,0x82,0xa1,0x41,0xa8,0x50,0x2c,0x27,0x0a,0x89,0x02,0xc1,0x42,0xa8,0x8c,0x24,0x13,0x10,0x98,0xc2,0x25,0x77,0x35,0xe3,0xda,0xfa,0xf7,0x9c,0x73,0xad,0xf9 -,0xf5,0x71,0x57,0x55,0x2b,0x45,0x79,0xce,0x57,0x89,0xd6,0xd7,0xf5,0xc0,0x4d,0x9e,0x91,0x87,0xeb,0x77,0xd4,0xf5,0x18,0xd4,0x9f,0xf7,0x86,0xd3,0xd4,0xeb,0xb9,0x33 -,0x2f,0x57,0xf4,0x11,0xdb,0x1e,0xa4,0xba,0xc4,0xee,0xf2,0x6d,0x3e,0xb9,0x5f,0xeb,0xac,0x18,0x49,0x4f,0xfb,0x0c,0x9c,0x10,0xcc,0xf7,0x75,0x7f,0x95,0x4d,0xe2,0xb5 -,0xa4,0xce,0x95,0xaf,0x82,0x3b,0x48,0xfc,0xf7,0x02,0x05,0xbc,0xa0,0x45,0x0e,0xfe,0x10,0xae,0x2e,0x30,0x27,0x08,0x8e,0x2e,0x3c,0x9f,0x7e,0xa6,0x76,0x91,0x5c,0xa7 -,0xc7,0x5e,0x4c,0x77,0xdf,0x5f,0x09,0x9a,0x72,0x63,0x9d,0x27,0x92,0xad,0x24,0x73,0x4a,0x81,0xff,0x16,0x82,0x54,0x27,0x7b,0x71,0x2f,0x78,0xe5,0xfa,0xcb,0x76,0xa8 -,0x50,0x45,0x1f,0x40,0x11,0x61,0xc6,0x29,0x19,0x88,0x27,0x63,0xca,0xa8,0x24,0x04,0x80,0xa8,0x61,0xc0,0x58,0xa8,0x16,0x0b,0x85,0x42,0xc2,0x80,0xa0,0x58,0x28,0x16 -,0x0a,0x85,0x02,0xa2,0x70,0xa0,0x5c,0x42,0x13,0x30,0x85,0x42,0x64,0x11,0x2f,0xc5,0xd7,0xd7,0xcf,0xdf,0xc5,0xef,0x7d,0x66,0xb9,0x80,0xb9,0x37,0x6f,0xae,0xf2,0xea -,0xeb,0xac,0xa4,0xdf,0xd5,0x8a,0xb9,0x6e,0x97,0x8f,0x2e,0xf2,0x1d,0xda,0xb4,0xe1,0x67,0xc3,0xd5,0x26,0xb6,0xfe,0x1f,0xa6,0xa8,0xaf,0xc0,0x87,0x9e,0x7b,0xfc,0x9e -,0xc2,0xbd,0x4b,0x85,0x17,0xea,0x38,0x84,0x6f,0x94,0xf0,0x56,0xe0,0x11,0xfa,0xa3,0xef,0x5c,0x17,0xdc,0x83,0xe1,0xb2,0x8a,0xae,0x87,0xc3,0xbf,0xe0,0xf4,0xbf,0x23 -,0xfd,0x77,0xb3,0xaf,0x8f,0xcb,0xe3,0xc4,0x38,0x38,0x72,0x2b,0xcf,0xe7,0xd6,0x79,0xc2,0x9a,0xaf,0x3f,0xd5,0x0c,0x9f,0xe5,0xf0,0x40,0xe4,0xd6,0x9f,0xa6,0xdc,0xdb -,0xbd,0xc8,0xe5,0xfe,0xa8,0xde,0x12,0xf7,0x7a,0xc3,0xff,0xfc,0x9d,0xf1,0xdf,0x45,0xdf,0x3d,0x9f,0x7e,0xce,0xe7,0xf8,0x41,0xf5,0xc9,0xbf,0x4d,0x7e,0xf8,0xfe,0x7a -,0xb4,0x1e,0xbb,0xff,0x67,0x70,0x12,0xad,0x83,0xcc,0x00,0x03,0xba,0x0e,0xe0,0xee,0x7b,0x80,0xef,0x7a,0xe1,0x07,0xa7,0xc6,0xc2,0x42,0x03,0xb8,0x0e,0xff,0xf1,0x50 -,0x80,0x31,0x3f,0xfc,0x21,0x0a,0xcf,0xfb,0xe7,0xf7,0xff,0xfd,0xb1,0x60,0xc1,0x10,0x2c,0x25,0x1b,0x05,0x42,0xc1,0x70,0xb0,0x50,0x4c,0x14,0x2a,0x84,0x84,0xa2,0x32 -,0x88,0x48,0x22,0x33,0x10,0x89,0x79,0x9d,0x75,0xbd,0x76,0xe2,0xa7,0x31,0xd7,0x72,0xba,0xe5,0x12,0xb5,0xe5,0xcc,0xcb,0xf0,0xbe,0x2b,0xad,0xfe,0xbf,0xa8,0x4f,0x1d -,0x43,0xda,0x8b,0x07,0xfd,0x6f,0x95,0x2f,0x83,0xe9,0x31,0xd7,0xf4,0xbd,0xa7,0x63,0xaf,0x81,0xac,0xfd,0x0e,0xe6,0x95,0x94,0xfc,0x55,0x4f,0x3d,0x28,0x7e,0xc0,0x9f -,0xf6,0x9c,0xd3,0xd2,0x0f,0x29,0x48,0xfe,0x8f,0xd4,0xc1,0xf8,0x75,0xde,0x9b,0x60,0xdd,0xd9,0x0c,0xa5,0x4f,0x6f,0x8f,0x5c,0xd1,0x1d,0xd7,0x76,0xb3,0xb5,0x3d,0x7c -,0x23,0xc2,0xe7,0xf9,0x98,0xe4,0x03,0xd3,0xf7,0x37,0xef,0xa2,0xd1,0xd1,0xc6,0x27,0x88,0x00,0xf3,0xe9,0x00,0x4e,0xce,0xe7,0x7b,0xbb,0xfb,0x31,0x28,0x48,0xf7,0xaf -,0x5f,0xb8,0x95,0x90,0x7a,0xfb,0x61,0x69,0x78,0xbd,0xdf,0x66,0xb4,0xef,0x8f,0xad,0xd5,0x33,0x58,0xe7,0xb0,0x32,0xb5,0xa9,0x8d,0x14,0xf9,0x92,0x46,0xd4,0xc9,0x00 -,0x3c,0x61,0x67,0xef,0xbc,0xf4,0x00,0x2d,0x10,0x14,0xa8,0x17,0x0b,0x06,0x02,0xc2,0x41,0x38,0x54,0x2c,0x84,0x0b,0x11,0x04,0xa1,0x70,0x98,0x44,0x26,0x17,0x1a,0x84 -,0x42,0xe1,0x50,0x98,0x54,0x22,0x45,0x6f,0x2e,0x67,0x9c,0xbd,0xd6,0xbb,0xb4,0xa9,0x51,0x7b,0xd6,0xb5,0xc6,0xbe,0x7c,0xd2,0xaf,0x26,0xfa,0x95,0xf1,0xf8,0x1f,0x57 -,0xbe,0xf3,0xd7,0x76,0x86,0x47,0x86,0x1a,0x69,0xfe,0x8b,0xd1,0x3b,0x33,0xdf,0x70,0xd9,0xf2,0xa9,0xad,0xfe,0xfb,0x68,0xeb,0xa3,0x72,0xe8,0xb7,0x0d,0x37,0xdf,0xfa -,0xfa,0x53,0x77,0x5d,0x50,0xcb,0x13,0x5b,0x27,0xa7,0x9c,0xe9,0x1f,0x88,0xcb,0xe1,0xf1,0x83,0x97,0xe9,0x45,0xd9,0x84,0xb0,0x18,0x3f,0x6d,0x01,0x3c,0x93,0xe5,0xd0 -,0x00,0x43,0x9f,0x72,0x39,0xff,0xe1,0x78,0x5f,0xd9,0x25,0x17,0xb9,0xec,0xe3,0xcc,0x7c,0x60,0x38,0x00,0x57,0x92,0xc7,0xb2,0xe6,0x84,0xc3,0xd8,0x27,0xeb,0x3b,0xbd -,0xf0,0xf3,0x80,0x9b,0x31,0xf2,0x00,0x00,0x3c,0xc0,0x20,0x00,0x49,0xe4,0x07,0x88,0x00,0x0f,0x30,0x00,0x00,0x79,0x1e,0xbb,0x8c,0x7b,0x68,0x01,0xe6,0x00,0x18,0x40 -,0x9d,0xc2,0xe0,0x30,0x80,0xe0,0xff,0xf1,0x50,0x80,0x31,0x5f,0xfc,0x21,0x0a,0xcf,0xfe,0x7f,0xff,0xff,0xf9,0xae,0x70,0xb0,0xa0,0x32,0x14,0x1b,0x05,0x04,0xe1,0x40 -,0xb0,0x9c,0x28,0x35,0x0a,0x0d,0x82,0x81,0x50,0x90,0x54,0x26,0x11,0x0a,0x84,0x82,0x62,0x10,0x90,0x54,0x22,0x66,0xcc,0xea,0xb8,0xcd,0x3b,0x8b,0xcb,0x5e,0x5a,0xaa -,0x4a,0xbd,0x6e,0xf7,0xd3,0xc5,0x7e,0x3c,0x5b,0xe1,0xf4,0x2b,0xd7,0xfb,0xf1,0xf9,0xb5,0x2f,0x5b,0xd4,0xe7,0x47,0x7f,0x0f,0xf7,0x3c,0x47,0x99,0x68,0xe2,0x3e,0xae -,0xdb,0x7a,0xee,0x17,0x61,0xce,0x3e,0xc4,0x13,0xec,0xf6,0x2c,0x17,0xa4,0xeb,0x83,0x3d,0x04,0x60,0xbc,0x96,0x2e,0x32,0xf4,0xb1,0xe8,0xfb,0x70,0xdd,0x80,0xba,0x6f -,0xec,0x1b,0xc8,0x24,0xa8,0x32,0x2b,0xc0,0xcb,0xa8,0xd2,0xc5,0x78,0x1a,0x3d,0x6b,0x75,0xca,0xa3,0x8e,0x97,0x07,0x71,0x43,0x16,0xf2,0xe7,0x9c,0xca,0x82,0xfe,0xd2 -,0xef,0x5c,0xbd,0xaf,0x6a,0x59,0x0e,0xb2,0xb4,0x1d,0xe3,0x81,0x21,0x7c,0xb9,0x6b,0x5b,0x2f,0x7d,0x73,0xdc,0x01,0xc6,0x7b,0xd2,0xd6,0x68,0x72,0xcf,0x49,0x2c,0xd0 -,0xa6,0x82,0x3c,0x80,0x01,0x68,0x50,0x89,0x20,0xb4,0x80,0x9c,0xe4,0x22,0x00,0x95,0xd7,0x01,0x3a,0x82,0x61,0xa0,0x58,0x2a,0x14,0x09,0x85,0x83,0x01,0x61,0xc0,0x50 -,0x2c,0x28,0x0a,0x05,0x82,0x81,0x52,0x38,0x54,0x26,0x15,0x08,0x85,0x42,0x61,0x51,0x08,0x8c,0x42,0x37,0xe6,0x73,0x24,0xb9,0x5c,0xce,0x2b,0x12,0xb5,0x95,0x68,0xe2 -,0xb8,0xac,0xbf,0x8f,0x1c,0xf0,0xf6,0xdf,0x73,0xcc,0xe0,0x77,0x3f,0x9d,0xf5,0x55,0xfc,0xdf,0xe1,0x9f,0xf5,0x68,0xfd,0x3d,0xff,0xfc,0xff,0x59,0xbb,0xcb,0x8d,0x11 -,0x42,0x9e,0xea,0xfe,0x24,0xc5,0x6e,0xb2,0xd2,0x13,0xcd,0x77,0xad,0x19,0xf6,0xdf,0xc4,0xf5,0x5d,0x01,0x36,0x1c,0xf9,0xbd,0x41,0xdd,0x33,0x0e,0x86,0xf9,0xe0,0xfc -,0x67,0xe0,0xff,0xd3,0x6c,0x9e,0x0f,0x79,0xd0,0x1c,0xb3,0x9b,0x7a,0x8d,0xf2,0x3f,0x7b,0xe2,0xcb,0x83,0x97,0x18,0x1d,0x7d,0x55,0x47,0x37,0x98,0x38,0x53,0x9b,0x98 -,0xaf,0x20,0x79,0x40,0x07,0x98,0x00,0xe0,0x1e,0xb3,0xb9,0xe2,0xf0,0x1e,0x00,0x03,0x03,0x30,0x0f,0x00,0x80,0x01,0xff,0xfb,0x3d,0xd0,0x03,0xc8,0x3c,0x80,0xf3,0x00 -,0x00,0xad,0xc0,0xb4,0xc2,0x0e,0xf0,0x0f,0xf0,0x82,0x85,0x97,0x2e,0x3b,0x80,0xe0,0xff,0xf1,0x50,0x80,0x30,0xbf,0xfc,0x21,0x0a,0xce,0xe3,0xf7,0x9f,0xff,0xf8,0xac -,0x60,0xc0,0x58,0x30,0x19,0x0a,0x0d,0x44,0x81,0x61,0xa0,0x60,0x28,0x16,0x0a,0x09,0x82,0x61,0x40,0xb0,0x54,0x24,0x15,0x20,0x8c,0xc2,0x29,0x7a,0xf3,0x5e,0x38,0xea -,0x71,0xdc,0xdf,0x5e,0xb5,0xbb,0x8a,0x0b,0x6a,0x71,0x5d,0xd5,0xeb,0xc2,0xf5,0x93,0xee,0xd0,0x6f,0x1a,0x5d,0xff,0xaf,0x7f,0x0b,0xf4,0xfa,0x59,0xd7,0xda,0xfb,0x6b -,0xef,0x78,0x3a,0x81,0xf7,0x90,0xe9,0x92,0xa8,0xe7,0xd1,0x68,0x0d,0x98,0x1b,0x92,0xa3,0x0f,0xfd,0x7d,0xe7,0xb1,0x42,0xe1,0x26,0x21,0xfa,0x56,0xb7,0xc7,0x9d,0x49 -,0x51,0x68,0x04,0x97,0xc8,0x7f,0x12,0xff,0x02,0x5e,0xa2,0x72,0xfc,0x21,0xb3,0x20,0x87,0x48,0xac,0x26,0x23,0xf9,0xa0,0xf8,0xa3,0xf8,0x86,0xde,0x63,0x4a,0x56,0x26 -,0x2f,0x74,0x5f,0x5f,0x10,0xe0,0x27,0xc8,0x00,0xf3,0x00,0x02,0x30,0x38,0xf2,0x4f,0x6d,0x56,0x6d,0xc9,0x96,0xc6,0x5b,0xd6,0x10,0x05,0xe1,0xf6,0xd3,0x94,0xc8,0x5d -,0x2e,0x35,0xbd,0x62,0x67,0x46,0x17,0xa0,0x42,0xf7,0xd1,0x7a,0xcc,0x5e,0x01,0x69,0x4b,0x9d,0xf3,0xa0,0x1c,0x82,0xd6,0x0a,0x81,0x50,0xc1,0x81,0xb0,0x50,0x2c,0x27 -,0x0a,0x09,0x8a,0x81,0x70,0xa0,0x58,0x28,0x25,0x0a,0x05,0x42,0x61,0x50,0x98,0x54,0x22,0x25,0x10,0x84,0xc2,0xa1,0x10,0x98,0xc4,0x6a,0xf1,0xd3,0xcf,0xdb,0xac,0xbd -,0x77,0xa9,0x99,0x72,0xb2,0xcd,0x69,0x57,0xc6,0xbf,0x3f,0x1d,0xfd,0x78,0xe3,0x8e,0xdb,0xf6,0xbd,0x02,0xde,0x2e,0x8d,0x67,0x5f,0xa3,0x67,0xe6,0x4f,0xd7,0x24,0xdb -,0x67,0xe7,0xbc,0x68,0x3f,0x8c,0xd3,0xd2,0x27,0xb0,0xa7,0xdd,0x5f,0xe0,0x6a,0x14,0x4d,0xd7,0x72,0xec,0xac,0x7e,0x89,0xf3,0x9f,0x00,0xad,0x4d,0x82,0x7c,0x5f,0xeb -,0xe1,0xcb,0xd2,0x37,0x59,0xea,0xfe,0xc7,0xf9,0xff,0xd5,0xfd,0x2f,0xfb,0x30,0x3b,0x22,0x6b,0xc1,0xdf,0xf1,0xd7,0x35,0xed,0xd5,0xdd,0x68,0x25,0x8e,0x53,0xfb,0x5d -,0xc7,0x80,0x03,0xa5,0xcd,0xe7,0x98,0x7f,0xfe,0x1e,0xe0,0x1e,0x20,0x05,0x42,0x33,0x9c,0x18,0x14,0xe5,0x39,0x83,0xc4,0x00,0x70,0x05,0x71,0x24,0x90,0x41,0x63,0xd7 -,0x0e,0xe8,0x00,0x0f,0x14,0xc0,0x80,0x7a,0xe1,0xdd,0x0e,0xe0,0x36,0xd3,0xf7,0x54,0x00,0x76,0x08,0x00,0xe0,0xff,0xf1,0x50,0x80,0x30,0x1f,0xfc,0x21,0x0a,0xcf,0xe5 -,0xfe,0x7f,0xff,0xbe,0xb0,0x70,0xc1,0x18,0x48,0x16,0x09,0x05,0x06,0xe1,0x60,0xa0,0xd8,0x28,0x36,0x0a,0x85,0x02,0x41,0x51,0x89,0x14,0x26,0x11,0x43,0x35,0xc7,0xbf -,0x9a,0xeb,0x9d,0x52,0xf9,0xab,0xa9,0x55,0xed,0xcd,0x2a,0xe4,0xf8,0xf4,0xbc,0xfa,0xef,0xbf,0xad,0xd1,0xff,0x95,0x87,0xc7,0x6b,0xa7,0xce,0x8a,0xdf,0x63,0xe9,0x1f -,0x49,0xf1,0x2d,0xbb,0x84,0x7c,0x56,0xfa,0x06,0xf5,0xcb,0xf4,0x51,0x6f,0x57,0x74,0xee,0x63,0x4f,0xe4,0x4b,0x6a,0x3d,0x69,0xbb,0x71,0x3f,0x19,0xd3,0xf4,0x47,0x36 -,0xbd,0xff,0xc3,0xbb,0xf4,0x3b,0x65,0xed,0x4c,0x79,0xb0,0x1f,0xaa,0xc3,0x21,0x74,0x7e,0xb9,0xad,0xee,0x74,0xc6,0x83,0x3a,0x63,0xa0,0xed,0x1c,0x47,0xbe,0xb1,0xf2 -,0x36,0xd4,0x4e,0xa7,0xce,0x61,0x11,0x8c,0x73,0xa2,0x40,0x78,0x80,0x13,0xef,0x1b,0x6f,0xba,0x98,0xa6,0x3b,0xca,0x5d,0xa5,0x04,0xa9,0x27,0x28,0x14,0x2e,0x00,0x07 -,0x98,0x3f,0xf9,0xa3,0x5b,0x5b,0x1b,0xc2,0x88,0x85,0x80,0x74,0x26,0x3a,0xdc,0x27,0xd4,0xa4,0x86,0xe4,0xee,0x02,0xe0,0xa8,0x14,0x68,0x16,0x42,0x85,0x83,0x01,0x62 -,0x20,0x58,0xce,0x15,0x0b,0x85,0x42,0xe1,0x10,0x98,0xd4,0x26,0x25,0x11,0x84,0x4a,0xf7,0x9a,0xc9,0x55,0xae,0xbb,0xa1,0x5a,0xca,0x5a,0xae,0x71,0x5e,0x78,0xfc,0xea -,0xf7,0xfb,0xfe,0x9a,0xc7,0xdf,0x3f,0x13,0xd0,0xe5,0x43,0xfd,0xa7,0xef,0xf5,0xb7,0xae,0x7f,0x0a,0x2e,0xea,0x4f,0x37,0x86,0x9f,0x8b,0x6e,0x5a,0x39,0xe9,0x50,0x5b -,0x16,0x3f,0x64,0x7f,0xe4,0x7c,0xb0,0x2f,0xd2,0xf8,0xa4,0xaf,0xf7,0xcf,0x9e,0x7e,0xfc,0x2c,0xbd,0xf2,0xe1,0x4e,0x76,0xf6,0x07,0x7b,0xee,0xd5,0x7d,0x62,0x51,0xce -,0xcc,0x03,0xb3,0x20,0xaa,0xac,0xc2,0xad,0x38,0x55,0x68,0x0d,0xcd,0x2d,0x6e,0x40,0x6e,0xf5,0x1c,0xde,0x3e,0x0e,0x63,0x83,0x57,0x70,0xb7,0x9c,0x1c,0x40,0xf4,0xf2 -,0xe1,0x07,0x98,0x80,0x0e,0x71,0x98,0x87,0x14,0x2e,0xfb,0x47,0xec,0xdf,0xf9,0x22,0x5d,0xe3,0xbf,0x13,0xbe,0x17,0x9b,0x73,0x03,0x94,0x00,0x7b,0xa1,0xdd,0xee,0x53 -,0xd7,0x00,0x01,0xe6,0x28,0x01,0xe2,0x1f,0xb4,0x7b,0x52,0xb6,0x00,0x50,0xab,0xa8,0x00,0x22,0xb4,0x40,0xe0,0xff,0xf1,0x50,0x80,0x30,0xdf,0xfc,0x21,0x0a,0xcf,0xfc -,0x57,0xfe,0xdf,0x7f,0xad,0x50,0xc1,0x18,0x2a,0x16,0x0a,0x05,0x42,0x81,0x70,0xa0,0x58,0x28,0x16,0x0a,0x09,0x82,0x83,0x60,0xa0,0x54,0x4c,0x13,0x0a,0x84,0xc4,0x28 -,0x31,0x08,0x9e,0x34,0xcf,0x32,0xea,0x6f,0x7d,0x77,0x2b,0xcf,0x27,0x1c,0xa5,0xeb,0x7d,0x4d,0xf1,0xba,0x4a,0xb8,0xf8,0xe7,0xfd,0x38,0x0f,0x68,0xfa,0x7a,0x75,0x5c -,0xfe,0xbe,0x99,0xf8,0x27,0xb0,0x9c,0xf6,0xfe,0x4e,0xaf,0xb0,0xef,0xaf,0x6d,0xef,0x1f,0x26,0xf9,0x3a,0xa6,0xa2,0xdb,0xfd,0xd2,0xba,0x2f,0xb1,0xfb,0x8f,0xde,0x70 -,0x5e,0xab,0xcc,0x1f,0x76,0x56,0x81,0xf1,0x47,0xc7,0xfe,0x1a,0xba,0x8e,0x42,0xee,0xd4,0x8c,0xe4,0x3e,0xde,0x94,0x93,0x3c,0x2f,0x8e,0x73,0x55,0x47,0x7a,0x6d,0xaa -,0x9f,0x19,0x82,0x08,0x05,0xc4,0xc4,0x93,0x94,0xa8,0x7e,0x88,0xb9,0xc9,0xc1,0x6b,0x14,0x32,0xc6,0x9e,0xda,0x29,0xf7,0xb3,0x84,0xe7,0x0d,0xf7,0x4c,0xbc,0xb7,0x38 -,0xa9,0x40,0xdf,0x7a,0x40,0x12,0xb4,0xb0,0x4d,0x0b,0x93,0x38,0x44,0x55,0xc0,0xa9,0x81,0x48,0x44,0x59,0x70,0x7a,0xce,0xe0,0x00,0x80,0xa8,0x0a,0x47,0x0b,0x11,0x42 -,0xc2,0x50,0xb0,0x60,0x4e,0x16,0x2c,0x05,0x82,0x81,0x60,0xa8,0x58,0x4a,0x14,0x0a,0x84,0xc2,0xa1,0x31,0x08,0x8c,0x22,0x87,0x8b,0xca,0xf3,0xcf,0x9f,0x19,0x72,0x6e -,0xf2,0x45,0x5a,0x1a,0xdf,0xb4,0xdd,0xd7,0xc5,0xfd,0xb5,0xe2,0x7c,0x79,0xe3,0x20,0x76,0x36,0x77,0x65,0xfa,0xf3,0x6f,0xcf,0x63,0xc9,0x39,0xe5,0xcb,0xf2,0x7a,0x6c -,0x9d,0x98,0xfb,0x9b,0x0a,0x3d,0xfd,0x57,0x95,0xd2,0x4d,0x4f,0xb4,0x37,0x55,0xcf,0xfa,0x59,0xb2,0xaf,0x1e,0x5f,0x87,0xa7,0x8e,0x10,0xf3,0xda,0xa8,0x1e,0x7a,0xed -,0xd3,0x4f,0x22,0x74,0x80,0xdf,0x0e,0x98,0xe2,0x3c,0x26,0x25,0xe7,0xf2,0xf9,0xa4,0xe1,0x03,0x7b,0x0d,0xc0,0x5a,0xd9,0xcc,0x77,0x8c,0x94,0x1d,0xa1,0x3c,0xdd,0xdc -,0xe7,0xb5,0xc0,0x3e,0xfb,0x43,0xb0,0xe7,0xde,0xe0,0x38,0x03,0xc0,0x1d,0xf7,0x78,0x47,0x80,0x3c,0x40,0x7e,0x58,0x77,0xe5,0xdc,0xf0,0xbc,0xba,0xa5,0x28,0x12,0x44 -,0x2e,0x68,0x48,0xef,0xeb,0x77,0xb2,0xaa,0x50,0x9b,0x86,0x16,0x95,0x69,0x74,0xec,0xaf,0x14,0xa3,0x01,0x51,0x00,0x10,0x00,0x40,0x5c,0x07,0xff,0xf1,0x50,0x80,0x30 -,0x9f,0xfc,0x21,0x2a,0xcf,0xca,0xdb,0x7e,0xff,0xff,0xb0,0x60,0xc0,0x58,0x30,0x26,0x0a,0x85,0x04,0xc1,0x50,0xa0,0x94,0x28,0x16,0x0a,0x05,0x82,0x81,0x60,0xa8,0x4c -,0x2a,0x14,0x1a,0x84,0x46,0x61,0x10,0x98,0x84,0x86,0x11,0x0a,0x84,0x44,0xc8,0x75,0x73,0x9b,0xeb,0xd4,0xc8,0xdf,0xb6,0xf3,0x8a,0x95,0x72,0xaf,0x5b,0xeb,0x24,0xda -,0xd7,0xbf,0x3f,0x5e,0x44,0x79,0x70,0xe7,0x7e,0xfe,0x56,0x7b,0x3f,0x59,0x8d,0x35,0x7c,0x5f,0xec,0xd5,0x1c,0x05,0x5a,0xf5,0xfd,0x83,0x8a,0x78,0xbf,0x08,0xff,0xd6 -,0xaf,0xf1,0x9c,0xe3,0xf5,0x0c,0x9f,0xed,0xfd,0xee,0xf5,0xb8,0xc2,0x6f,0x9f,0x73,0x11,0x81,0x86,0xc2,0xbe,0xef,0x3e,0x8b,0xe4,0x7f,0x87,0xf8,0x17,0xa3,0x87,0x46 -,0x9c,0x0e,0x2b,0x79,0xbb,0x7b,0xa1,0x1e,0xca,0xae,0x2f,0xb0,0x4e,0xf6,0x35,0x7e,0x71,0x52,0x9b,0x69,0xe2,0x63,0xe5,0xde,0xd3,0x62,0xb2,0xf7,0xc8,0xb2,0x36,0xc6 -,0x8f,0x06,0xa8,0x8c,0xfd,0xfe,0x0b,0xb7,0x12,0x58,0x3d,0x78,0x6d,0xc4,0x49,0xeb,0x5c,0x0e,0xde,0x15,0x05,0xf4,0x02,0x49,0x46,0x2d,0xc9,0x8f,0x06,0x60,0x6e,0x88 -,0x29,0xe2,0x00,0x02,0x80,0x20,0x02,0x95,0x83,0x01,0x63,0xa0,0x58,0x88,0x16,0x1a,0x05,0x82,0x84,0x60,0xa8,0x8d,0x02,0x87,0x8c,0xe0,0xdf,0xe3,0xf4,0xf6,0xcd,0xde -,0x5d,0x55,0x91,0x13,0x5b,0xeb,0x38,0x64,0xbd,0xf9,0xed,0xe6,0xe5,0x74,0x13,0x71,0x5a,0x7d,0x9f,0x2f,0xa7,0xb7,0xd2,0x91,0xd2,0x7e,0xbe,0xcf,0x77,0xc3,0x3e,0x8b -,0x6f,0x94,0x23,0xc5,0x73,0x9e,0x63,0xf6,0x27,0x84,0xbc,0x0b,0x50,0xf2,0x6d,0x72,0x9c,0xda,0xa7,0xed,0x2e,0xbb,0xab,0x91,0x23,0xfd,0x3f,0xd7,0xf5,0x6f,0x2d,0x65 -,0x13,0xd5,0xc6,0x74,0xe6,0xf7,0xf6,0x1f,0xbe,0x93,0xdc,0x79,0xcf,0x4f,0x2e,0xa8,0xd6,0x3f,0xeb,0xd8,0xbd,0xbd,0x74,0x22,0x32,0x5e,0x05,0xc2,0x3e,0x75,0x77,0x86 -,0x6c,0x18,0xae,0x4a,0xb9,0xbf,0x35,0x4b,0x27,0xff,0xc1,0x0f,0x07,0x65,0xef,0x6b,0xa4,0x9f,0xdb,0xfb,0x93,0x07,0x7c,0x77,0x67,0xff,0xab,0xf9,0x55,0x6d,0x12,0xbd -,0xc1,0xdd,0xdb,0xee,0x89,0x1e,0xbc,0x57,0x41,0xfb,0x7c,0xae,0xd6,0xac,0x44,0x53,0x54,0xeb,0x14,0xbd,0x6f,0x10,0x94,0x80,0x12,0x40,0x80,0x01,0x50,0x44,0x0e,0xff -,0xf1,0x50,0x80,0x33,0xff,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x44,0x26,0x50,0x58,0xa9,0x44,0x64,0x53,0x44,0xb4,0x49,0xa1,0x47,0x8b,0xdc,0xd0,0x7c,0xde,0x65,0x66,0x87 -,0x39,0x12,0xab,0xff,0x87,0xe3,0xce,0xdb,0xa1,0x24,0x40,0x7a,0x6c,0xf1,0x68,0xd5,0x7d,0x61,0xdf,0xf8,0xb3,0x7d,0x7b,0xb1,0x8b,0xc6,0xca,0x27,0x5d,0xa5,0xea,0x9f -,0x1f,0xfb,0x25,0x7d,0xd4,0x76,0x9c,0xb1,0xaf,0x15,0x92,0x45,0xdf,0x88,0x04,0x80,0xd7,0x00,0x80,0x31,0x81,0x0b,0xd7,0xc9,0xd8,0xdc,0xf0,0x69,0x35,0x08,0xcb,0x34 -,0xd2,0xde,0x67,0x56,0xe3,0x14,0xb8,0x80,0x78,0xc9,0x2e,0x6d,0x18,0x69,0xdb,0x25,0xc2,0xfb,0x21,0x00,0x31,0x11,0xd5,0x7b,0xdf,0xa3,0xd7,0xf5,0x7e,0xec,0xf0,0xb3 -,0x39,0x32,0xbf,0x8c,0x79,0x63,0x27,0x49,0xac,0x3f,0xf3,0xfa,0xcb,0xbd,0xb4,0x5e,0xc8,0xec,0x6e,0x55,0x66,0x2d,0x53,0x60,0xac,0x38,0x0d,0x61,0xa0,0x36,0xde,0x85 -,0xd9,0xf1,0xea,0xa5,0x26,0x05,0xb6,0xab,0xc7,0x73,0x48,0xe0,0xe0,0x87,0xf8,0x78,0xbd,0x5b,0x41,0x14,0x66,0x23,0x99,0x1c,0x11,0xc7,0x18,0xd6,0x1e,0x1d,0x51,0xa4 -,0x00,0x40,0xd8,0x3f,0x11,0xfa,0x0d,0x93,0x39,0x60,0x27,0xe2,0xb2,0x42,0xa5,0x08,0xa2,0x92,0xda,0x2f,0x81,0x26,0x66,0x5d,0x86,0xe6,0x0e,0xea,0xd2,0xb2,0xb7,0x19 -,0x55,0x38,0xa9,0x86,0xcf,0x12,0x0a,0xd8,0xe4,0xd5,0x45,0xa7,0x9e,0x9d,0x45,0x3c,0x34,0xaa,0x76,0xf6,0x90,0x5f,0xc6,0x4a,0xaa,0xd9,0x53,0xa6,0xdd,0x78,0xec,0x25 -,0xcf,0xdb,0x5a,0x3a,0xdf,0x64,0x7e,0xad,0xdf,0x0c,0x82,0x07,0x82,0xfb,0x65,0x8f,0x48,0xd2,0x71,0xed,0x2f,0x46,0x42,0xce,0xa1,0xa5,0x22,0x69,0xe6,0xeb,0x7d,0x33 -,0x38,0x7e,0x2c,0x0b,0xfe,0x9d,0x24,0xce,0x8b,0xb2,0xaf,0x08,0xfa,0x4f,0xaa,0x15,0xba,0xf1,0xb2,0xe9,0x07,0x54,0x61,0x65,0x6d,0x07,0xa0,0x9a,0x2f,0x17,0x0a,0x9e -,0x00,0x03,0xbf,0x2b,0xb3,0xd4,0x16,0x08,0x61,0x83,0x0b,0x6f,0x0e,0xf6,0x56,0xd8,0xe3,0x95,0x7b,0x9d,0xf7,0xe1,0x9a,0x6a,0x53,0x8a,0xbc,0xe5,0x8a,0xda,0x33,0x4a -,0x37,0x16,0xce,0x67,0x56,0xc7,0x0d,0x5b,0x59,0xf8,0xa6,0xaf,0x1e,0x89,0x9a,0xab,0xed,0x3f,0x1f,0x2b,0x6b,0x54,0x6e,0xbe,0x77,0xc9,0x3d,0xd9,0xb3,0xbe,0x94,0xa5 -,0xd3,0x4a,0x67,0x49,0xcd,0x5f,0xba,0xd3,0x69,0xbb,0x86,0x44,0x67,0x9b,0x77,0xf1,0xf2,0xb6,0x44,0xd8,0x3d,0x42,0x70,0x26,0x3c,0x11,0x33,0x40,0xb8,0xe0,0xff,0xf1 -,0x50,0x80,0x34,0xbf,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x55,0x18,0x2d,0x50,0x91,0x14,0x65,0x72,0x13,0x52,0xae,0xc6,0x05,0xfc,0xe5,0x9d,0xa5,0x8d,0xb4,0x0d,0x2d,0xf6 -,0xc5,0x55,0x59,0x69,0xf2,0x0b,0x53,0x22,0x94,0x1a,0xc6,0x09,0x3c,0xf9,0xe0,0x79,0x0a,0xdc,0x93,0x28,0xf9,0x43,0xa5,0x50,0x3d,0x75,0x70,0xe3,0xeb,0xf5,0xf0,0xf0 -,0xb7,0x29,0xe4,0x56,0xb6,0xb7,0xa3,0xee,0xdf,0x2a,0x59,0xc7,0x2c,0xaa,0xb6,0x71,0xf6,0x4b,0x7e,0x99,0x11,0x9e,0x8a,0xa9,0xa5,0xaa,0xb3,0x65,0x43,0x10,0x9c,0xdd -,0x6c,0x61,0x2a,0x51,0x36,0xea,0xc4,0x27,0xa4,0xca,0x6a,0xa4,0x9a,0xd7,0x41,0x10,0x58,0x63,0xe1,0x6b,0x26,0x40,0x68,0xd7,0x54,0xb2,0x9c,0x38,0xb4,0x00,0xa7,0xd5 -,0xea,0x0f,0x7f,0x1a,0xad,0x57,0x4b,0x86,0xb8,0x49,0x74,0x93,0x95,0xb3,0xfd,0x04,0x5f,0x21,0x11,0x14,0xf3,0x15,0x7f,0x80,0x71,0x4a,0xdf,0x70,0x68,0xc3,0x96,0xee -,0xe5,0x7e,0x5d,0xd6,0x4f,0x94,0xa7,0xd1,0x7f,0xe3,0x6b,0xc9,0x8e,0x81,0x6d,0x0e,0x03,0x73,0x4d,0x18,0x3a,0x30,0xeb,0xc4,0x54,0x90,0xde,0xd4,0x0d,0xbc,0x24,0x7b -,0xa4,0x60,0x50,0xc4,0x65,0x05,0x8a,0x15,0x28,0x44,0xa1,0x16,0xb2,0xc5,0xde,0x3f,0x01,0x9f,0xf8,0xc5,0xb7,0x99,0x91,0x8b,0x3d,0x2e,0xbf,0x6f,0x0b,0x48,0xb2,0xc6 -,0xce,0x3c,0xed,0x64,0x39,0x7f,0x8c,0x36,0xb2,0x05,0x63,0x71,0x18,0x14,0x62,0x71,0x77,0x97,0x5b,0xb6,0x55,0xd2,0x1a,0xbb,0xf8,0xcd,0x61,0xae,0x1e,0x08,0x24,0xc3 -,0x2e,0xf1,0x30,0x6e,0x98,0xb6,0x66,0x5c,0xba,0x68,0x0c,0xbc,0x26,0xcf,0xc0,0x7e,0x31,0x2c,0xeb,0x59,0x4e,0xf3,0x67,0x81,0xd9,0xbf,0x45,0x31,0xa6,0x25,0x9f,0xae -,0x7f,0x0c,0x39,0x4b,0x29,0x55,0xc6,0x69,0x99,0xd6,0xb9,0x75,0xe2,0x37,0x7d,0x05,0x2c,0x82,0x5c,0x12,0xce,0xb5,0xb0,0x65,0xa8,0x25,0xb8,0x44,0x94,0xa7,0x12,0x4a -,0x96,0xc3,0x80,0x04,0x4d,0x34,0x46,0x91,0xaa,0xad,0x91,0x2c,0x8e,0x40,0x8c,0x14,0x52,0x9c,0x01,0x56,0x8e,0x7b,0x5d,0x40,0x6d,0xe6,0x42,0x75,0xcf,0x92,0xf9,0x40 -,0x95,0x69,0xe5,0x2b,0x9f,0x9a,0x5e,0xb3,0x9c,0xa7,0x2b,0xb2,0xb7,0x96,0x07,0x29,0xc2,0x2f,0x74,0xca,0xbc,0x6a,0x52,0x9c,0xc5,0xbb,0x66,0x36,0x6f,0x51,0x9a,0x66 -,0xdf,0xad,0xdd,0x57,0x2e,0x66,0xca,0xd6,0x55,0xa9,0x69,0x55,0xaa,0xb6,0xf2,0xda,0x5b,0xcb,0xb8,0xbe,0x13,0xf0,0xb9,0xec,0xc6,0x77,0xc8,0x62,0xc6,0x7e,0x19,0x0f -,0x36,0x63,0x80,0xff,0xf1,0x50,0x80,0x32,0x5f,0xfc,0x21,0x6a,0xcf,0xdf,0xff,0xff,0xff,0xfd,0xb5,0x61,0xc0,0x58,0x26,0x15,0x0a,0x06,0x02,0xc1,0x40,0xb0,0x50,0x2c -,0x35,0x0b,0x05,0x04,0xa1,0x41,0x10,0x50,0x84,0x25,0x09,0x05,0x42,0x27,0x30,0x88,0x9e,0xde,0x23,0xf9,0xf9,0xe3,0xd5,0x75,0xbd,0x73,0x69,0x2a,0x5d,0x51,0x71,0xb9 -,0x79,0x2a,0x48,0x38,0xf8,0xe8,0x75,0x7f,0xec,0x3c,0xbf,0xce,0xad,0x39,0x57,0xf6,0xfe,0x9d,0xe7,0xfb,0xa1,0x69,0xbe,0xd2,0x7e,0x1a,0x37,0xbf,0xd1,0xe5,0xf2,0xbe -,0xd8,0x77,0x51,0xd7,0x5f,0x71,0x3e,0xad,0x0c,0xd6,0xf0,0xe7,0xd2,0xfa,0x84,0x57,0xad,0xff,0x57,0xe9,0xb8,0x41,0x7e,0x8b,0x75,0x2e,0x58,0x09,0xe7,0x11,0x9c,0x1d -,0xd2,0x9a,0xaf,0xc7,0xb3,0xc3,0x70,0x36,0xf7,0xfe,0x9b,0x51,0xf5,0x33,0x61,0xb2,0x9e,0x9f,0x61,0x7a,0xa8,0xde,0x0e,0x27,0x45,0x57,0xb2,0xa1,0x9e,0xfb,0x2b,0x8a -,0x70,0x25,0x3e,0x3b,0xb9,0x02,0x99,0x13,0xdf,0x54,0x94,0x18,0x41,0x48,0x4b,0x6c,0x3d,0x84,0x6a,0x89,0x86,0x87,0x5e,0x33,0xbe,0x9a,0x1b,0xeb,0xc0,0xb6,0x9b,0xda -,0x89,0xba,0x91,0xbc,0x23,0xda,0x51,0x1d,0x1c,0x02,0x1f,0x9e,0x17,0x8d,0x34,0xd6,0xfe,0x5d,0x2e,0x20,0xfd,0xf5,0x00,0x84,0x01,0x40,0x15,0x2c,0x38,0x0b,0x11,0x02 -,0x61,0x62,0xa0,0x98,0x68,0x16,0x0a,0x90,0xc2,0xa2,0x10,0x98,0x54,0x26,0x11,0x09,0x85,0x42,0x27,0x67,0x1d,0xa7,0x15,0xc7,0x2c,0x88,0x98,0x59,0x7b,0xbe,0xb2,0xd9 -,0xc6,0xfc,0xf8,0xaf,0x22,0x57,0x91,0x3f,0x55,0x5e,0x4f,0x20,0xf6,0x05,0x61,0xae,0x4f,0x3a,0xfd,0x35,0x57,0xf9,0x5f,0xd3,0xe9,0x9d,0x9a,0xfb,0xb9,0xfe,0x5c,0xbd -,0x5a,0x9e,0xea,0x74,0x52,0x56,0x6e,0xfd,0x8f,0xff,0xae,0xfb,0xfa,0xad,0xeb,0x86,0x7e,0x14,0x65,0x80,0x8f,0xa2,0x3b,0x28,0xe9,0x07,0x41,0x6e,0xcf,0xaf,0xb0,0x25 -,0x0f,0x65,0x02,0x54,0xe1,0x5f,0x15,0xf9,0x3c,0x1e,0x16,0x78,0x0e,0x5c,0xdc,0x38,0x21,0xd1,0xe4,0x47,0x2d,0x72,0x38,0x9d,0x2b,0x2f,0xd6,0x83,0x83,0x97,0x98,0x1c -,0xe3,0x2f,0x17,0x30,0x01,0x67,0x9a,0x1f,0xc4,0xee,0x77,0xf6,0x3d,0x71,0x9a,0x43,0xc4,0x00,0x7e,0xe2,0xe4,0xb3,0x46,0xbc,0x21,0xd4,0x2c,0xee,0x0f,0xca,0x16,0x39 -,0x70,0x4a,0x49,0xec,0xb0,0x03,0x14,0x42,0xab,0x90,0x20,0x8c,0x8e,0x8e,0x00,0xb9,0x5a,0x0e,0x55,0x03,0x80,0xff,0xf1,0x50,0x80,0x2e,0xff,0xfc,0x21,0x0a,0xcd,0x6f -,0xff,0xff,0xff,0xfe,0xb3,0x80,0xb0,0xd0,0xac,0x15,0x0b,0x85,0x82,0x81,0x61,0x20,0xd4,0x28,0x52,0x12,0x84,0x86,0x61,0x15,0xba,0xe6,0xdc,0x57,0x9e,0xfd,0x71,0x96 -,0x99,0xc6,0xee,0x41,0x46,0xb0,0xbc,0x49,0x79,0x72,0x7d,0xff,0x51,0xd8,0xca,0x7f,0x8e,0x9e,0xd2,0xf8,0x7f,0xe1,0xe4,0x72,0xed,0xe7,0x9b,0x7f,0xa9,0xfd,0x4f,0x25 -,0xe3,0xfe,0x0a,0x83,0xf3,0x40,0x1f,0xff,0x1e,0x65,0x6d,0xbe,0xed,0x8e,0xda,0xfb,0xd9,0xf7,0x4f,0xd2,0xef,0x1f,0x6d,0xc3,0xe5,0x0e,0x5e,0xe4,0x5f,0x15,0xac,0x3e -,0x3b,0x3f,0xf4,0x83,0x92,0x36,0x6c,0xc6,0x3e,0xde,0x02,0x93,0x1c,0x26,0xcd,0x7b,0xb2,0x29,0xe9,0xf3,0x46,0x3e,0x1c,0x17,0x17,0x3e,0x36,0xff,0x2e,0x33,0xe7,0x88 -,0x85,0xe1,0x29,0xbe,0x3e,0xf9,0x96,0x72,0xa8,0x85,0x0a,0x80,0xfb,0x8d,0xd7,0xbc,0xc9,0x4b,0x10,0xed,0x22,0x9f,0xe3,0x8e,0xe6,0xad,0x19,0x68,0x67,0xbe,0x58,0xbb -,0xfc,0x98,0xdb,0xaf,0x25,0x6b,0x74,0x71,0x8e,0x52,0x8b,0x48,0x23,0x75,0xa9,0x46,0x89,0xc8,0x1d,0x26,0x13,0x4b,0x1a,0x60,0x28,0x2e,0x02,0x7d,0x07,0x01,0x41,0x38 -,0x50,0x4a,0x16,0x0b,0x85,0x06,0xc1,0x41,0x30,0xd0,0x4a,0x14,0x09,0x84,0x44,0xa2,0x30,0xa8,0x84,0x46,0x21,0x09,0x84,0x42,0x61,0x11,0x3f,0x8e,0x3d,0xf5,0xd7,0x3d -,0x66,0x71,0xde,0xaa,0x54,0xaa,0x6a,0xa2,0xb8,0xfc,0x57,0x8e,0x3b,0xe1,0xe9,0xe7,0x7e,0xdc,0xf0,0xbe,0x87,0xd3,0xff,0x95,0xfd,0x97,0xc3,0xa2,0xf8,0x27,0x36,0x77 -,0x5e,0x97,0xcf,0xfd,0xed,0xc4,0x85,0x11,0x97,0xdd,0xd7,0x60,0x1c,0x07,0xe2,0x74,0x67,0xe0,0xe7,0xed,0x04,0x7f,0xea,0x1b,0x06,0xdd,0xfe,0x42,0xa3,0x78,0x8d,0x0f -,0x61,0x18,0x70,0x2e,0x33,0x5e,0x05,0xe7,0x2f,0xed,0xdd,0xb0,0x77,0x2b,0x05,0x7e,0x0c,0xe1,0x09,0x72,0xff,0x09,0xab,0x4f,0x93,0xff,0xf2,0xb6,0xab,0x76,0xdc,0xf1 -,0x80,0xf3,0x30,0x8f,0x00,0x0e,0x40,0x07,0x8f,0x88,0x00,0xee,0xf9,0x85,0x47,0x88,0x00,0x0f,0x00,0x00,0x2f,0x1b,0xda,0x64,0x2b,0x2b,0x09,0x8f,0x58,0x3e,0x18,0xd2 -,0x00,0x44,0xa8,0x7b,0x89,0xc8,0x07,0x78,0x05,0xc0,0x90,0x0e,0xff,0xf1,0x50,0x80,0x34,0x7f,0xfc,0x21,0x0a,0xcf,0xf7,0xff,0xff,0xf7,0xf4,0xb0,0x60,0xc0,0x58,0x68 -,0x22,0x0b,0x09,0xc3,0x01,0x61,0x20,0x58,0x28,0x15,0x0a,0x05,0x42,0x82,0x60,0xa0,0x58,0x28,0x45,0x09,0x85,0x42,0x42,0x50,0x89,0x14,0x26,0x11,0x12,0xb8,0xdb,0xa6 -,0xb9,0xe6,0x2e,0x55,0x69,0x9a,0xa9,0x29,0x4b,0x79,0xef,0xdb,0xe5,0xf1,0xdd,0xab,0xdb,0xbf,0xdf,0x81,0xee,0xeb,0x8b,0xe3,0xfd,0x7f,0x1b,0x7d,0x5f,0x71,0xdd,0x77 -,0x7f,0xa5,0xdd,0xff,0xa8,0xf6,0x72,0xd5,0x38,0x43,0xf9,0xef,0x5e,0x74,0x56,0x5a,0x8b,0xf1,0xdc,0xb7,0xef,0xc4,0xd3,0x7b,0xf5,0x3f,0xd5,0xad,0xc7,0xe5,0x3e,0xc4 -,0x39,0xf9,0xe2,0x5c,0x47,0x69,0x2e,0x73,0xe1,0x76,0x3e,0xfd,0xe5,0x45,0xde,0xb2,0x20,0x79,0xfa,0x62,0xf3,0x95,0x19,0x7f,0x02,0x30,0x12,0xc3,0xf2,0xc7,0x10,0x3e -,0x98,0x69,0x13,0x81,0x9d,0x8d,0xa8,0x2a,0xf6,0x25,0xb7,0x2b,0xed,0x3f,0xe1,0x94,0x6a,0xfd,0x8a,0xb0,0x79,0x47,0x30,0x52,0xd1,0x6f,0x7d,0x1d,0x1a,0xa3,0xae,0x28 -,0x10,0xf0,0x04,0xc9,0x5b,0x14,0xbe,0xbb,0x2d,0x52,0x70,0xad,0x4b,0x12,0x48,0x07,0x90,0x94,0xee,0x4b,0x84,0x6e,0x4d,0x16,0xce,0xa1,0x1b,0x49,0x7c,0x48,0x15,0xf1 -,0x00,0x00,0xaf,0xb8,0x58,0x48,0x08,0x00,0xa8,0x40,0xc0,0x50,0x2c,0x17,0x0a,0x05,0xc2,0xc1,0x40,0x98,0x58,0x30,0x16,0x1c,0x05,0x8c,0x83,0x51,0x08,0x8c,0x42,0x15 -,0x09,0x85,0x42,0x65,0x11,0xab,0x5e,0x35,0xed,0xea,0xf8,0xee,0x6f,0x8e,0x64,0xd6,0xd4,0xb1,0xae,0x3d,0xab,0xde,0xb8,0x9b,0xd3,0x29,0xcf,0xe3,0x2c,0x7e,0xf9,0x59 -,0x9f,0xca,0x65,0xe9,0x77,0xbb,0x95,0x77,0x1d,0xba,0xff,0x31,0xfa,0x0f,0x67,0x2b,0xc0,0xe9,0x37,0xa6,0x9c,0xa7,0xd3,0xdf,0x56,0xf3,0xdf,0xdf,0x6b,0xf2,0xef,0x9c -,0xc8,0x3c,0x6c,0xf8,0x7d,0x52,0x40,0xa3,0x3a,0x7e,0x4b,0x3a,0x3e,0x7c,0x53,0x9f,0xa6,0x1a,0x37,0xb7,0x65,0x17,0xd1,0x26,0x1c,0x40,0xf8,0xd7,0x17,0x27,0xef,0x7d -,0xe7,0x8f,0x08,0xfe,0xc7,0x67,0xf9,0x89,0x74,0xd7,0xf6,0x32,0xe7,0xf7,0x52,0x6a,0x6c,0xf9,0x41,0xe4,0xae,0x00,0x65,0x80,0x9e,0x2f,0x30,0xbc,0xc7,0xff,0xec,0xef -,0x77,0xd7,0x77,0x3d,0x88,0xf7,0x5c,0xe3,0x2a,0x58,0x03,0xc0,0x78,0x08,0x7b,0x80,0xa7,0xf2,0x47,0x80,0x00,0x1d,0xe0,0xee,0x50,0xa0,0xff,0xdf,0xc0,0x11,0xf5,0xdd -,0xe6,0xf5,0x11,0x0e,0xea,0xb3,0xa5,0x2c,0xbc,0xcb,0x18,0x82,0xe4,0xa8,0x07,0xff,0xf1,0x50,0x80,0x2d,0xdf,0xfc,0x21,0x0a,0xcf,0x7f,0xff,0xff,0xff,0xfc,0xb1,0x81 -,0x30,0xd0,0x8e,0x28,0x0a,0x09,0x8c,0x82,0x60,0xa8,0x58,0x24,0x41,0x09,0x84,0x58,0x71,0x3b,0xeb,0x59,0x5e,0x35,0x5a,0x94,0xba,0xaa,0xd4,0xcb,0xa2,0x2b,0xac,0x2a -,0x6b,0x1a,0x7f,0xe7,0xf8,0x04,0x75,0xe1,0xd3,0x7c,0xb4,0x36,0x8b,0x7d,0x7c,0xb3,0x44,0xf1,0xad,0x5f,0xed,0x5f,0xe8,0x4b,0x23,0xa9,0x3e,0xeb,0x77,0xf8,0x3f,0x38 -,0xff,0x7e,0xdc,0x46,0x2c,0xda,0xc6,0x55,0xf0,0x26,0xd5,0x6a,0x84,0x0c,0xe3,0xc2,0xb0,0xb0,0xfa,0xc4,0xe8,0x8f,0x85,0xe6,0x5c,0xde,0x53,0x61,0xa5,0xc8,0x06,0x74 -,0xa0,0x76,0x6f,0x8f,0x97,0x34,0xe8,0x5b,0x8d,0x2c,0x66,0x67,0x1e,0xc5,0xc7,0x5f,0x36,0x9c,0x93,0x78,0xfa,0x3c,0xfc,0x5f,0xd8,0x0b,0xa8,0xc8,0x1f,0xa8,0x23,0x18 -,0x91,0xa2,0x30,0x96,0x7d,0x3f,0x69,0xe1,0x88,0x6b,0x47,0x05,0xaf,0x69,0xc8,0x91,0xaa,0xd7,0xf3,0x63,0x14,0xe9,0x6d,0x7a,0x87,0x37,0x3a,0xd8,0x89,0x87,0x16,0x1a -,0xee,0xb2,0x64,0x57,0x89,0x1c,0xd1,0xb4,0x81,0xd2,0xa1,0x7a,0xab,0x39,0x82,0x60,0x20,0x02,0xa1,0x87,0x41,0x60,0xa0,0x4c,0x28,0x15,0x0a,0x09,0xc4,0xc1,0x30,0xb8 -,0x58,0x48,0x15,0x0a,0x0d,0x42,0x81,0x70,0xa8,0x84,0x46,0x15,0x08,0x88,0xc4,0x27,0x77,0xc7,0xbf,0x1e,0x7b,0xea,0xdb,0xe5,0x35,0xcd,0xd5,0x59,0x72,0xb5,0x3c,0xea -,0x7c,0xeb,0xc4,0xe9,0xc6,0x99,0xc7,0x3d,0x04,0xde,0x7d,0x49,0xab,0x70,0x28,0xb5,0x73,0x9f,0xcf,0xfd,0xc5,0xd7,0xfb,0xdf,0x1f,0xd5,0x8c,0xc7,0xb4,0x77,0x32,0xa5 -,0xf4,0x3f,0xcc,0xcb,0xd7,0xe7,0x89,0x96,0x36,0x47,0x2a,0x92,0xeb,0xc7,0xe3,0x5e,0x06,0xfb,0x5e,0xba,0xe6,0x8a,0x5c,0xbb,0x9b,0x2c,0xee,0x90,0xee,0x3f,0xc7,0xf4 -,0x1c,0xe7,0xb3,0x2e,0x3d,0xbc,0xc3,0x5b,0xe6,0xc2,0xbf,0x75,0xe6,0xe6,0x10,0x07,0x58,0xf2,0x00,0x79,0x00,0x15,0x25,0xd8,0x05,0xbc,0x34,0x98,0x77,0x35,0xfb,0xbf -,0x30,0x38,0x73,0x01,0x20,0xbd,0xb1,0xc4,0xa7,0x4b,0x0e,0xe2,0xe0,0x14,0x77,0xd5,0x58,0x23,0x00,0x4c,0x16,0x00,0x89,0x00,0x11,0x58,0xb8,0x90,0x1c,0xff,0xf1,0x50 -,0x80,0x2e,0x5f,0xfc,0x21,0x0a,0xcf,0x7f,0xff,0xfd,0xff,0xfc,0xb0,0x63,0x20,0xd8,0x2e,0x19,0x0b,0x05,0x04,0xc1,0x51,0x30,0x5c,0x28,0x62,0x12,0x88,0x42,0x63,0x11 -,0x18,0x44,0xca,0x6b,0x9f,0x8c,0xe3,0x99,0xce,0x71,0x5c,0x73,0xaa,0xcb,0x8a,0xba,0x99,0xad,0x33,0x55,0x2b,0x3e,0x3c,0x0f,0xf3,0xa1,0x8e,0x99,0xbf,0xfa,0xfa,0xbb -,0x38,0xf5,0x68,0xd9,0x67,0x28,0xd5,0xdf,0xea,0xe4,0xff,0x2d,0x37,0x33,0x87,0xe3,0x26,0x3e,0xc9,0xf8,0xe7,0xf1,0x39,0xb0,0x02,0x7e,0x2f,0x1e,0x37,0xcd,0xee,0x89 -,0xe5,0x4e,0xc3,0x69,0x12,0xac,0x7d,0xb9,0xb8,0xc8,0x4b,0xf2,0x8c,0x44,0x0e,0xd0,0x58,0x76,0x81,0x1c,0xb6,0xa8,0xfb,0x7a,0x89,0x86,0xfe,0x7a,0x99,0xb5,0x51,0xdf -,0x3c,0x0a,0x17,0x92,0x6a,0xef,0x83,0x83,0xee,0xe3,0xe6,0x91,0xd4,0xb5,0xaf,0x9a,0x40,0x71,0x41,0xcb,0x81,0x58,0x01,0xf1,0xa9,0x79,0xa4,0x4a,0xfe,0xb2,0x0b,0x97 -,0x9a,0xdd,0xd1,0x67,0x7d,0x59,0x90,0x8c,0x6f,0x24,0x30,0x55,0x31,0x47,0x7f,0xdc,0x1b,0x4a,0x19,0x63,0xae,0x90,0x09,0x63,0x5c,0x50,0xc4,0xbd,0x41,0x3b,0x85,0x80 -,0x53,0x20,0x58,0x50,0x14,0x13,0x05,0x06,0xc1,0x80,0xb0,0x5c,0x2c,0x67,0x0b,0x05,0x02,0xc1,0x50,0xa0,0x54,0x86,0x35,0x09,0x84,0x50,0xe7,0xdb,0xf4,0xd7,0x9e,0x78 -,0xf3,0xcf,0x69,0x8a,0x95,0x2d,0x09,0x9f,0x5b,0x71,0xde,0xa6,0xb9,0xf6,0x45,0x71,0xe3,0x43,0xf3,0x87,0xee,0xa3,0xed,0xf5,0x5e,0xfd,0x63,0x53,0x0f,0x76,0x9c,0xf0 -,0x3f,0x47,0xac,0xed,0xb4,0xcb,0x95,0xe3,0x4c,0xf6,0xc4,0xdf,0xc4,0x73,0x1e,0x68,0x5e,0xae,0x69,0xe0,0x96,0x17,0x28,0xb7,0x1a,0x47,0x50,0xf3,0x92,0x60,0x63,0xed -,0x0b,0x6f,0xa6,0xcf,0x36,0xd0,0x6c,0x98,0x8a,0x27,0x0d,0x6b,0x67,0x2b,0xef,0x39,0x08,0xcf,0x24,0x08,0xda,0x5c,0xbe,0x36,0xa3,0xaa,0xac,0x9f,0xe6,0x78,0x8a,0xaf -,0x6f,0x96,0x0f,0x00,0x02,0xfc,0x5b,0xe2,0x1c,0x87,0x21,0xe6,0x0f,0x00,0x00,0x1a,0x7e,0xb1,0x4a,0x83,0xd6,0x3b,0x8f,0x58,0x42,0x20,0x0f,0x00,0x01,0xdd,0xee,0x28 -,0x08,0x44,0x4c,0x98,0x01,0x40,0x80,0x02,0x4b,0x15,0x09,0x14,0x0a,0x4c,0x0e,0xff,0xf1,0x50,0x80,0x2f,0x3f,0xfc,0x21,0x0a,0xcf,0x7f,0xbf,0xff,0xff,0xff,0xb1,0x70 -,0xc0,0x58,0x68,0x36,0x0a,0x06,0x03,0x41,0x80,0xa8,0x58,0x68,0x52,0x0a,0x08,0x82,0x81,0x30,0x90,0x4c,0x42,0x23,0x08,0x84,0xc2,0x21,0x30,0x88,0x8c,0x22,0x21,0xa9 -,0x2b,0x8c,0xee,0x65,0xf9,0xed,0x52,0x5a,0x64,0x89,0x79,0x7c,0x73,0x9e,0x7b,0xf6,0xe7,0xaf,0x13,0xcf,0xdf,0xc8,0x77,0x46,0xe7,0x17,0xc4,0x7a,0xba,0xaa,0xe6,0x1f -,0xa7,0xfc,0x51,0x73,0xfe,0x2e,0xe0,0xe2,0x51,0xe0,0xa6,0xd6,0xce,0x0d,0x39,0xbd,0x78,0xa7,0xaa,0x40,0x10,0xf6,0xaa,0xf7,0xbd,0x29,0xaf,0xfd,0x1f,0xf4,0x74,0xfa -,0x87,0xb1,0xd6,0xc0,0xd5,0x6f,0xf7,0xa1,0x5e,0xf0,0x4e,0x61,0xd0,0x7d,0xbd,0x75,0x0e,0x2a,0x6e,0x0e,0x93,0x33,0xae,0x0d,0xea,0xad,0x78,0x64,0x7a,0xdc,0x46,0xf6 -,0xe7,0x14,0xfa,0x1f,0x62,0x94,0x77,0x52,0x40,0xf1,0x2a,0x0e,0x07,0xd8,0xcc,0xb7,0xda,0x84,0x7b,0xab,0x9f,0xb2,0x9a,0x75,0x92,0xe8,0x69,0xc2,0x42,0x20,0x7f,0xbb -,0x05,0xe3,0x5c,0xe7,0x75,0x21,0x12,0xb1,0x1f,0xba,0x02,0xb1,0x06,0xbc,0xe0,0x8d,0x0f,0xf0,0x82,0x00,0x2c,0x02,0xa9,0x42,0xe1,0x60,0xc0,0x58,0x28,0x17,0x0b,0x04 -,0xc2,0x41,0x70,0xc0,0x58,0x6e,0x14,0x0b,0x11,0x02,0xc1,0x41,0x29,0x84,0x2a,0x11,0x09,0x84,0x48,0x61,0x11,0x9c,0x7b,0xf9,0xbf,0x1f,0x7f,0x6f,0x1f,0x35,0x26,0x08 -,0xb3,0x38,0xbb,0x6a,0xf9,0xbd,0x71,0xe3,0xca,0xf9,0xaf,0x6d,0xfd,0x07,0xbd,0xe2,0xf6,0x5f,0xf0,0xcd,0xeb,0x1d,0x1a,0xf2,0x73,0xea,0xfd,0x0e,0x7f,0x05,0xb6,0xd4 -,0x80,0xf5,0xd3,0x37,0x7a,0x2d,0xff,0x63,0x9b,0xa1,0x4b,0xdd,0x37,0x34,0x87,0xea,0x76,0xb6,0x1d,0x94,0xd9,0x43,0xeb,0x7d,0x83,0x46,0x3d,0x48,0x15,0x2c,0x27,0x52 -,0x17,0x54,0x7f,0xfc,0x68,0x0f,0xcf,0xc6,0x05,0xcd,0xba,0xde,0xba,0xa6,0xba,0x8f,0x92,0xa3,0xd8,0x2e,0x49,0xaf,0x1d,0x45,0xa0,0x39,0xf2,0xb1,0xe1,0x00,0x4c,0x16 -,0x38,0x8f,0x13,0xcd,0xc0,0x00,0x3c,0x80,0x01,0xe5,0x20,0x70,0x0e,0x45,0xd3,0xb5,0x13,0x00,0x78,0x80,0x24,0xb8,0x14,0xf7,0x42,0x09,0x08,0x16,0x0e,0xa0,0x18,0x00 -,0x03,0xdd,0x14,0x00,0x2a,0x52,0x80,0x70,0xff,0xf1,0x50,0x80,0x2f,0xbf,0xfc,0x21,0x0a,0xcf,0x6f,0xde,0xff,0xff,0xfc,0xb0,0x60,0xc0,0x58,0x2e,0x16,0x0a,0x15,0x83 -,0x01,0x62,0x20,0x58,0x48,0x52,0x28,0x84,0x82,0x22,0x31,0x08,0x4c,0x22,0x13,0x08,0x84,0xc2,0x22,0x55,0xf5,0xdf,0xb6,0xe9,0x9c,0x77,0xed,0xe1,0x35,0x5b,0xb8,0x24 -,0x4a,0x97,0x4d,0x55,0x71,0xcf,0xc7,0x8b,0xff,0xaf,0x01,0xff,0xf1,0x1e,0x67,0x9e,0x89,0xef,0xfd,0xba,0x74,0xbf,0xe9,0x75,0xcf,0xcd,0x3e,0x8b,0xb9,0x9e,0xc3,0xa1 -,0x4f,0xc5,0xe5,0xd7,0xad,0xf6,0xac,0x96,0xdb,0x28,0x68,0x9b,0x51,0x89,0x0d,0x43,0xa6,0x0e,0x87,0x53,0xfa,0x6b,0xa0,0x53,0x5b,0x95,0xd3,0x67,0xc5,0x6f,0x84,0xae -,0x4b,0xb8,0x0e,0x0d,0x8f,0xb4,0x41,0xaa,0xb6,0x4a,0x53,0xe7,0xd2,0xff,0x1d,0x91,0x0e,0xbd,0x2f,0xaf,0x5b,0x5b,0xe7,0x38,0x26,0x92,0x68,0xf5,0xa7,0x11,0x65,0xa7 -,0x59,0x76,0xe3,0x74,0xcd,0x26,0x23,0x1e,0x8e,0x20,0xd0,0x53,0x86,0x96,0x04,0xa0,0xc9,0x2a,0xca,0x23,0xbf,0xda,0x65,0x1e,0x12,0xd0,0x2c,0x2f,0xf5,0x9a,0x43,0xc1 -,0x88,0x0c,0x0e,0xc0,0x2b,0xdc,0xc2,0x10,0xc2,0xfc,0x2a,0x80,0x22,0x0a,0x00,0x9b,0x50,0xb0,0x60,0x4c,0x27,0x0b,0x05,0x02,0xa1,0x40,0xc0,0x58,0x30,0x17,0x0a,0x85 -,0xc2,0x81,0x62,0x20,0x54,0x28,0x15,0x08,0x84,0xc2,0x21,0x50,0x99,0x04,0x26,0x11,0x3b,0xfa,0xfd,0x7e,0xda,0xbe,0x7f,0x7e,0x6b,0x75,0xe7,0xe7,0x8a,0x64,0x89,0x15 -,0xaf,0xbe,0xee,0x78,0x91,0xe7,0xd7,0xb4,0xbc,0xf3,0xfa,0xfe,0xe1,0xec,0xa3,0xd5,0x59,0xa8,0xea,0xb7,0xce,0x7e,0x30,0xfb,0xcf,0x4e,0xcf,0xf2,0xf8,0x3a,0xcf,0xf7 -,0x96,0xf9,0x1a,0x1e,0x16,0x76,0xbb,0x00,0xf4,0x11,0xf5,0xf3,0xc5,0xe1,0xcf,0x4f,0x1d,0xac,0xf8,0x57,0xc0,0x37,0x09,0x1e,0x63,0xf2,0x68,0x0a,0xbc,0x27,0x09,0x5a -,0x84,0xda,0xc6,0xe4,0xf6,0x19,0xf7,0xbe,0x9b,0xf9,0x2f,0x81,0x8b,0x81,0xcc,0xf9,0x38,0xeb,0x38,0xcc,0x12,0x9d,0xdb,0xc6,0x4e,0x49,0x53,0xf4,0x46,0x07,0x7f,0xbc -,0x09,0x53,0xb8,0x93,0xc8,0x00,0x02,0x27,0xa9,0xa2,0x3d,0xc2,0x37,0x20,0x3d,0xc0,0x53,0xd7,0x2d,0x50,0x02,0x1e,0xec,0x00,0x34,0xb8,0x12,0x04,0x02,0x22,0x40,0x5d -,0x48,0x15,0x00,0xa0,0x1c,0xff,0xf1,0x50,0x80,0x37,0x3f,0xfc,0x21,0x0a,0xcf,0x67,0xf7,0xbd,0xf7,0xef,0xac,0x60,0xc0,0x58,0x28,0x18,0x0b,0x05,0x42,0x81,0x60,0xb8 -,0x54,0x30,0x14,0x0b,0x05,0x02,0xe1,0x61,0xa0,0x58,0x28,0x62,0x1a,0x08,0x46,0x62,0x10,0x98,0x44,0x8e,0x6e,0xf3,0xeb,0xbe,0x39,0xe7,0x59,0xa6,0x57,0x19,0x4b,0xa9 -,0x52,0xc2,0xf2,0x49,0x25,0x75,0xdc,0xff,0xed,0xf7,0x1b,0xf0,0x89,0xcf,0x8f,0xaf,0xc8,0xa1,0xcc,0xf2,0xec,0x7c,0x3f,0x3f,0x87,0x8f,0x7f,0x1d,0x67,0xbd,0xc5,0x03 -,0x5a,0x09,0xf6,0x48,0x3f,0x8d,0x1f,0xd2,0xb8,0xc7,0x17,0xbe,0x60,0x27,0x47,0x77,0x9a,0xf4,0x97,0x70,0x5f,0x4d,0x9c,0x4a,0x69,0xbe,0xdd,0xf7,0xb2,0x9c,0xab,0xda -,0x1a,0x07,0x7f,0x13,0xfe,0x6e,0x17,0x5d,0x9a,0x31,0xc7,0xb4,0x38,0x7f,0xa7,0xc3,0x7d,0xcb,0xd0,0xad,0x65,0xcf,0x4d,0x2b,0xae,0xcd,0x3b,0x76,0xdd,0x58,0x9d,0x45 -,0xc1,0x7c,0xc6,0x2d,0x45,0x67,0xcd,0xeb,0xdd,0x62,0xd2,0x75,0x57,0x12,0x6f,0x3a,0x0f,0x8f,0x3d,0x07,0xc2,0x2a,0xfa,0x1f,0x1a,0xb3,0x55,0x5d,0xa2,0x4d,0x10,0xe6 -,0xe2,0xdb,0x22,0xd5,0xd3,0x9b,0x8b,0x48,0x7c,0x72,0x63,0xb5,0xcb,0xfa,0x47,0x88,0x91,0xa6,0xe7,0xab,0x74,0xea,0x01,0xde,0x41,0xa2,0x6a,0x9c,0xa7,0x10,0x5c,0x02 -,0x20,0x53,0xa0,0x5c,0x2c,0x18,0x0b,0x05,0x03,0x01,0x41,0x18,0x50,0x2c,0x15,0x0b,0x15,0x42,0xc1,0x80,0xa0,0x58,0x28,0x23,0x0a,0x88,0xc4,0xa1,0x31,0x28,0x4c,0x22 -,0x13,0x09,0x04,0x44,0x61,0x10,0x80,0x5b,0xf3,0xef,0x3a,0xf1,0xae,0xb6,0xe7,0xcf,0x77,0x2a,0xae,0xb2,0x24,0x9c,0x55,0x5e,0x25,0x4c,0xd4,0xe7,0x8f,0x3f,0xfe,0x83 -,0xf8,0xcf,0x51,0xfd,0xaf,0x16,0x89,0xbd,0x7f,0xe9,0x36,0xbb,0xe4,0x7f,0x9b,0xfd,0x27,0xaf,0xf6,0xb4,0x72,0x3c,0xbd,0x2a,0xf0,0x72,0xf3,0x5d,0xc2,0xeb,0x2e,0x44 -,0xf0,0x92,0x99,0x83,0x4f,0x8b,0x1f,0x55,0x4f,0xbb,0xf4,0xff,0x42,0x79,0xb8,0x1c,0xe8,0x45,0xfd,0x19,0xaf,0x2b,0xe1,0x3f,0xa1,0x16,0x34,0xeb,0x2b,0xdb,0x58,0x4b -,0xef,0xf5,0xbf,0xb1,0x47,0xe6,0x83,0x8d,0x49,0xe9,0xcb,0xfc,0x19,0xa1,0xe7,0x1f,0xe0,0x41,0xc7,0xed,0xb1,0x69,0x3d,0x50,0x95,0x26,0x50,0xdb,0xd9,0xf8,0x7e,0xc2 -,0xef,0xfe,0xbc,0xc8,0xb8,0x6b,0xa6,0xa8,0x95,0x92,0xcd,0xf1,0x7f,0xc7,0xef,0xfa,0xa5,0xe3,0x37,0xcf,0xb1,0x44,0x96,0x06,0x97,0xc1,0x0b,0x25,0xad,0x35,0x5a,0x03 -,0x4f,0xc8,0x6d,0xcd,0x5b,0x15,0x51,0x34,0x34,0x1e,0x4c,0xeb,0x85,0x6a,0xef,0x17,0x7c,0xad,0x9e,0x28,0xf6,0x44,0x84,0xf6,0xc0,0x77,0x0f,0x74,0x58,0x0e,0xff,0xf1 -,0x50,0x80,0x30,0x9f,0xfc,0x21,0x0a,0xcf,0x7f,0xbb,0xff,0xff,0xfe,0xaf,0x60,0xc0,0x98,0x48,0x17,0x0b,0x05,0x02,0xa2,0x60,0xa0,0x98,0x48,0x16,0x0a,0x15,0x42,0x81 -,0x21,0x88,0x4c,0x24,0x11,0x09,0x84,0x44,0x41,0x10,0x98,0x84,0x60,0x17,0x7c,0x5e,0xfe,0xbd,0x7d,0xfe,0x5f,0x7f,0xb7,0x1d,0xea,0x61,0x79,0xac,0xd5,0x0d,0x4d,0xdd -,0xf7,0x13,0x86,0xeb,0xff,0xe4,0x0f,0xe8,0x2b,0xee,0x75,0x8d,0xb6,0xf8,0xf6,0xf9,0x4e,0xc7,0xbd,0x3e,0x09,0xf7,0x2d,0x8f,0x31,0xac,0x3d,0x47,0x34,0x3f,0x49,0xfb -,0xce,0xb9,0x55,0x1f,0x89,0x3e,0xa0,0xe3,0x5d,0x76,0x20,0x89,0x72,0x4e,0x85,0xd8,0xf7,0xdc,0x00,0xad,0x11,0xa8,0xa8,0xf0,0xf5,0xc6,0x01,0xa7,0xe5,0x37,0xba,0x36 -,0x19,0x9a,0xfa,0x44,0xc9,0x9e,0xfc,0xce,0x97,0xef,0xde,0xfc,0x0a,0x5f,0x1e,0x38,0x2c,0x1c,0x8d,0x7c,0xae,0x2d,0x1d,0x28,0xad,0xe1,0x54,0xf0,0xdf,0xd9,0x05,0x2a -,0xeb,0x12,0xda,0x05,0x61,0x74,0x1d,0x86,0x68,0xc1,0xf9,0x42,0xfe,0x0a,0x6d,0x23,0x04,0x61,0x75,0xce,0x93,0x2f,0xc8,0x90,0x88,0x1b,0xe5,0x0f,0x62,0x60,0xef,0x2c -,0x07,0x76,0xeb,0x24,0x53,0x65,0xa3,0x08,0x8a,0x80,0x9c,0x40,0xb0,0xa0,0x2c,0x44,0x09,0x05,0x8a,0xe1,0x80,0xb1,0x10,0x66,0x31,0x09,0x85,0x42,0x63,0x10,0xa8,0x44 -,0x26,0x11,0x33,0xf8,0x9d,0xf1,0x7b,0xfa,0xf5,0xfc,0xfe,0x99,0x57,0x8c,0xd5,0x12,0x5a,0x7b,0x6b,0xc7,0x59,0xeb,0xae,0x3b,0xde,0xbe,0xb2,0x79,0xff,0xbe,0x86,0x90 -,0x9b,0xbf,0x6c,0x7d,0x09,0x3f,0xd3,0xd2,0xe3,0xee,0xe9,0x47,0xc3,0xbd,0xea,0x2e,0x0b,0x45,0x85,0xfa,0x8e,0x1e,0x51,0x1a,0xf5,0x2f,0x61,0x9c,0xbc,0x4f,0x6e,0x17 -,0xc7,0xa0,0x47,0xb2,0xaa,0x32,0xa8,0x3a,0x18,0x51,0x35,0xf4,0x76,0x90,0xf2,0x42,0xd5,0x92,0x51,0x7e,0xef,0xe8,0x7e,0x1b,0xdf,0xf4,0x7f,0x8d,0xfe,0x97,0xff,0xcd -,0x57,0x7f,0xc5,0x1f,0xfc,0xb4,0x7b,0x8e,0xff,0x0b,0x43,0xda,0xfa,0xe3,0xb2,0xee,0x0f,0x74,0x44,0x7f,0x7c,0xba,0x1e,0xb0,0x79,0x80,0x05,0x9e,0xb0,0xd2,0xbf,0x32 -,0xb3,0x25,0xf9,0x47,0x7d,0xdd,0x0a,0x84,0xf2,0x87,0x10,0x0c,0xc7,0x96,0x35,0x8e,0xf0,0x88,0x27,0xdf,0x94,0x04,0x67,0x90,0x8d,0xc0,0x0b,0xcc,0x55,0x41,0x00,0x0a -,0x81,0xc0,0xff,0xf1,0x50,0x80,0x2e,0x5f,0xfc,0x21,0x0a,0xcf,0x4f,0xff,0xff,0xff,0xff,0xb1,0x81,0x31,0x90,0x4c,0x24,0x13,0x09,0x14,0x41,0x30,0xa8,0x4c,0x22,0x12 -,0x28,0x8c,0xc2,0x23,0x53,0xef,0xeb,0xcf,0x7f,0x1e,0xf6,0xab,0xca,0x92,0x89,0x78,0xbd,0x6f,0x52,0xfb,0x52,0x54,0xfb,0xfd,0xbe,0x39,0xff,0xf4,0xfa,0x0a,0xd2,0x2f -,0xeb,0xeb,0xf2,0xff,0x23,0xb7,0xdb,0xf8,0x61,0xdb,0xc6,0x8f,0x98,0xf0,0x9c,0xa8,0x61,0x8b,0x0f,0xd2,0x67,0x56,0xfd,0x77,0xd5,0xf1,0x32,0x53,0x97,0x78,0x83,0xfd -,0xab,0xe1,0x00,0x1a,0x33,0x5b,0x7d,0xf8,0x37,0x94,0xfd,0xa0,0x03,0xd2,0xee,0xfb,0xff,0xbf,0x3f,0x41,0xe6,0xc8,0x3b,0x08,0x74,0xa9,0x40,0x64,0x9c,0xf2,0xce,0x78 -,0x50,0x16,0xca,0xfb,0x46,0x41,0x99,0xdb,0x53,0x1a,0x07,0x62,0x4c,0xd4,0xbe,0xcf,0x9b,0xb0,0x8e,0x64,0x9c,0xad,0x24,0xfc,0x07,0x78,0xf7,0x27,0xf1,0xbc,0x92,0xfc -,0x07,0x40,0x5e,0xff,0xb1,0x2d,0x02,0x45,0x5c,0xa3,0x91,0x00,0x7d,0x84,0x6b,0x8e,0x45,0xf6,0xe4,0xa2,0x5d,0x90,0x76,0x28,0xde,0xc4,0x27,0x17,0x54,0x52,0xa8,0x2e -,0xc4,0x70,0x97,0xc7,0x30,0xf3,0x64,0x48,0x49,0x69,0x89,0x80,0x48,0x0a,0x66,0x29,0x86,0x02,0xa1,0x40,0xa8,0x5c,0x2c,0x17,0x0a,0x05,0x84,0xa1,0x40,0xb0,0x94,0x2c -,0x14,0x1a,0x88,0x48,0x61,0x50,0x89,0x8c,0x20,0x37,0x7c,0x78,0x9c,0x77,0xf1,0xce,0x99,0x44,0x65,0x5c,0x64,0xe3,0x5e,0x7a,0x6a,0x7e,0xdc,0x7f,0xe7,0xff,0x1c,0xea -,0x4f,0x41,0xb5,0xc7,0x5a,0x7d,0x3e,0x5c,0x2b,0xd1,0xfa,0x90,0x7d,0x0e,0xed,0x3d,0xf2,0x6d,0x6c,0xf2,0x71,0xc4,0xf9,0x27,0xdd,0x6c,0xf1,0xf7,0x9f,0x9d,0x41,0x6f -,0xde,0x93,0x0f,0x82,0x3a,0xfb,0xdf,0x82,0xef,0x9a,0x29,0xa3,0x60,0x09,0xfc,0x6f,0x09,0x0a,0x5c,0x79,0xcf,0x98,0xe3,0x51,0x5f,0x57,0xea,0xff,0x77,0xca,0xc3,0xf2 -,0xfe,0x57,0xac,0xe7,0xb7,0xf4,0xbd,0xb4,0xc7,0xfd,0xdb,0x7a,0xef,0xc1,0x1a,0x14,0x87,0x80,0x01,0x6a,0x89,0x50,0x46,0xd5,0xc1,0x19,0x7a,0x00,0x3d,0xd1,0x08,0xfb -,0xa3,0xbe,0xf2,0x00,0x00,0x02,0xc9,0x50,0x27,0x00,0x90,0x03,0x24,0xc9,0x82,0xc0,0x1d,0xe3,0xb8,0x70,0xff,0xf1,0x50,0x80,0x2e,0x9f,0xfc,0x21,0x0a,0xcf,0xd6,0xeb -,0xfd,0xff,0xfe,0xaf,0x81,0xb1,0x50,0x6c,0x14,0x0b,0x0d,0x04,0xc1,0x41,0x28,0x50,0x44,0x25,0x09,0x84,0x84,0x23,0x30,0x88,0x48,0x22,0x76,0xe6,0x97,0x9e,0x7c,0x65 -,0xea,0x37,0x57,0x43,0x44,0x8e,0x3b,0x43,0x5c,0xd4,0xbb,0x3f,0xef,0xec,0x15,0xa7,0x27,0xe2,0x4f,0xa7,0xe8,0xb6,0x9d,0xfd,0x49,0x1d,0x5a,0x2a,0xf9,0x8f,0xcc,0x39 -,0x7f,0xf4,0xaa,0xfd,0x62,0x1a,0x6c,0x7e,0x95,0x14,0xfc,0xc0,0x97,0x2d,0x4f,0x3f,0x77,0xcc,0x35,0xaf,0x1d,0x04,0xf0,0xd4,0x6c,0x2d,0xc3,0x7a,0x37,0xf8,0xff,0x34 -,0xdf,0x1f,0x4e,0x62,0xa2,0x5b,0xce,0x33,0x04,0x4f,0x70,0x1b,0x1e,0x52,0xbe,0x53,0xde,0xe4,0xb5,0x9f,0xd0,0xe8,0xd5,0xb0,0x2b,0x95,0xd1,0x17,0x7c,0xf7,0xc6,0x4a -,0x19,0x3f,0x41,0xf6,0xa0,0x8c,0x86,0xd7,0x51,0x3b,0x60,0xa6,0x24,0x23,0xe6,0xa9,0x2c,0x78,0x82,0x9e,0x1c,0x48,0xd5,0x3b,0xdb,0xbb,0xdb,0x52,0x75,0xb0,0x84,0x56 -,0x83,0x1a,0xba,0x30,0x74,0xc1,0x4e,0x23,0x02,0xb2,0x75,0x5b,0x53,0x25,0x80,0x8a,0xb6,0x26,0xc9,0x74,0x41,0x70,0x88,0x09,0xa2,0x0b,0x1d,0x02,0xc6,0x40,0xb1,0xd4 -,0x28,0x15,0x19,0x84,0x42,0x61,0x13,0x18,0x44,0x80,0x17,0xf4,0xe3,0x69,0x5d,0x6f,0xf7,0xfe,0x97,0x33,0x2f,0x7a,0x95,0x10,0xd7,0xf9,0xf9,0xfc,0x78,0xf8,0xfd,0x2e -,0xbf,0xcd,0x7e,0xde,0xab,0xef,0xed,0xa1,0xb4,0x7d,0xbc,0xb6,0x59,0xf4,0xf3,0xb4,0x9b,0xe8,0xf4,0xea,0xab,0xe2,0xf9,0xf1,0xe3,0x97,0x87,0x50,0xdc,0x5a,0xc9,0x37 -,0xf0,0xcc,0xf6,0x7b,0xf8,0xf7,0x53,0xcb,0xff,0x6e,0x1b,0x5d,0x9e,0xbe,0x76,0xf0,0xcb,0xea,0x00,0x52,0xe4,0x9f,0x80,0xb7,0xe3,0x78,0x5b,0xe1,0xf7,0xa0,0x6f,0x09 -,0x24,0x94,0x0e,0x9a,0x3b,0xca,0x8b,0x52,0xfb,0x59,0xbe,0xfc,0xe1,0xd7,0xd1,0xf0,0x1c,0x7f,0x5a,0x6b,0x94,0xd3,0xf3,0x26,0x23,0x2e,0x33,0xcd,0xf8,0x38,0x70,0x9e -,0x55,0xbb,0xe8,0x01,0xe2,0x00,0xf3,0x79,0x00,0x08,0xea,0xb0,0x01,0xe0,0x54,0x14,0x87,0x00,0x4a,0x60,0xbf,0x54,0x40,0x00,0xa5,0x6c,0x01,0x0f,0x5a,0x0f,0x58,0x8c -,0x20,0x22,0x82,0x2a,0x84,0x00,0x06,0xd7,0xff,0xf1,0x50,0x80,0x30,0xff,0xfc,0x21,0x0a,0xcf,0xef,0xff,0xff,0xff,0xff,0xb1,0x70,0xc0,0x58,0x30,0x16,0x09,0x85,0x05 -,0x02,0x61,0xa0,0x58,0x4a,0x14,0x23,0x05,0x02,0xa1,0x41,0x91,0x04,0xa6,0x11,0x33,0x7d,0x73,0x3a,0xb7,0x8a,0x8e,0xb1,0x5a,0xc5,0x95,0xac,0x81,0x24,0xad,0xbc,0xef -,0x89,0x5f,0x7e,0x04,0xf7,0x22,0xdc,0xff,0x14,0xf8,0xdf,0xb3,0xe9,0xfe,0x0e,0x3f,0xc5,0x81,0xa9,0xef,0xdf,0x9d,0x25,0xfd,0xb2,0xdf,0xd7,0x1a,0x94,0xeb,0xfc,0x6e -,0xa2,0x3d,0x78,0x26,0xe7,0xb1,0x37,0xe9,0x40,0x2e,0x9f,0x19,0xa4,0x3e,0xe7,0xd3,0xf3,0x7f,0xbd,0x40,0xc5,0x0e,0xac,0x88,0x67,0xe4,0x20,0xa1,0xfc,0x42,0x86,0x93 -,0x6b,0xd3,0x14,0xcf,0xc9,0x1b,0xb9,0x5e,0xf5,0x60,0x57,0x7c,0x2a,0x5f,0x88,0x5b,0x71,0xd9,0xa8,0x5a,0x36,0xa6,0x69,0xd6,0x62,0x2b,0xf7,0xe2,0xc0,0x47,0xca,0x95 -,0xa9,0xa5,0x2e,0xf3,0x36,0x9b,0x54,0x65,0xba,0xf6,0x6b,0x9f,0x9b,0x9d,0xe5,0x06,0xc3,0xbc,0xa0,0x5e,0xcd,0x17,0x49,0x87,0x3f,0xb9,0x42,0x38,0x23,0x8a,0xb3,0x7a -,0x34,0x83,0x7a,0xc4,0x98,0xaf,0x11,0x21,0x9e,0xc0,0x8c,0xab,0x09,0x0a,0x80,0x98,0x09,0x95,0x0b,0x05,0x42,0xe1,0x61,0x40,0x98,0x28,0x17,0x0b,0x0d,0x04,0xc4,0x70 -,0xa0,0x54,0x2e,0x15,0x0a,0x05,0x44,0x21,0x50,0x88,0x4c,0x62,0x25,0x09,0x8c,0x46,0xff,0x5e,0xb9,0x4c,0xf8,0xf1,0x15,0xae,0x6d,0x32,0xb5,0x37,0x34,0xae,0x35,0xc6 -,0xef,0xc4,0x9e,0x5b,0xe7,0x86,0xab,0x41,0xc8,0x7e,0x3f,0x5b,0xb8,0x9f,0x9b,0xec,0x88,0x79,0x3d,0xa1,0xb9,0x2f,0xe2,0x37,0x9d,0xd3,0xe7,0x4f,0x00,0x9f,0xb8,0xa8 -,0xbb,0xaa,0xef,0x89,0xff,0xe1,0xf5,0x5f,0x7e,0x82,0xe1,0x4e,0x41,0x97,0xe1,0x27,0xd6,0x3c,0x32,0x90,0x42,0x49,0x7b,0xed,0xa3,0xe3,0xf2,0x20,0x7f,0xaf,0xc0,0xfe -,0xdf,0x90,0x39,0xfc,0xf9,0x3c,0x9e,0x1c,0x2b,0x5d,0xce,0x57,0xb3,0xc0,0x93,0x87,0x39,0xbd,0x7a,0xba,0x5b,0x3b,0xcf,0xb2,0xdd,0x5c,0x39,0x00,0xe7,0xe0,0x00,0x71 -,0x56,0x12,0xd8,0x03,0xc0,0xec,0x01,0xb7,0x49,0x61,0xee,0xd0,0x38,0xbd,0xd9,0x9e,0xb9,0xee,0xcc,0x7b,0x8e,0xf7,0xba,0x01,0xa6,0x51,0x0b,0x8f,0x00,0x00,0x0f,0x5a -,0xa7,0x98,0x77,0x1d,0xe2,0xc5,0xbd,0x60,0x41,0x60,0x17,0x80,0x3b,0x01,0xc0,0xff,0xf1,0x50,0x80,0x30,0x9f,0xfc,0x21,0x0a,0xcf,0xef,0xff,0xff,0xdf,0xff,0xaf,0x62 -,0x98,0x50,0x50,0x26,0x0d,0x06,0x02,0x82,0x60,0xa0,0x54,0x2c,0x14,0x2a,0x85,0x02,0x62,0x10,0x98,0x48,0x22,0x13,0x08,0x90,0xc2,0x25,0x77,0xd6,0xeb,0xca,0x9e,0x3a -,0xe7,0xef,0xdc,0x38,0xed,0x17,0x51,0x6c,0xbc,0xf3,0xbd,0xdd,0x4d,0x2b,0x5d,0x79,0x17,0xf6,0x67,0xae,0x3e,0x95,0x68,0xe5,0xa7,0xf4,0x5c,0x57,0x8a,0xab,0x93,0xda -,0x1f,0xdc,0xe2,0xe8,0x99,0x77,0xad,0xfb,0xb7,0xa5,0x15,0xee,0xeb,0x5f,0xc8,0x93,0xb3,0x42,0x07,0x7d,0xce,0xf2,0xf7,0x6e,0x9f,0xa2,0x90,0x20,0x7c,0xad,0x1d,0xc6 -,0xbd,0x7e,0xa4,0xf1,0x32,0x4b,0x69,0xda,0xc7,0x31,0x3c,0xf7,0xf5,0x91,0xab,0x9c,0xee,0x5b,0xf3,0xab,0xa6,0x43,0x71,0xf1,0xf0,0x4b,0xf1,0x49,0x61,0x4f,0x92,0xeb -,0x36,0x3e,0x6a,0x87,0xd5,0x26,0x0f,0x85,0x32,0x9d,0xed,0x9b,0x08,0x72,0x98,0x92,0x0c,0x4f,0xa2,0x44,0x53,0x3d,0x63,0x24,0x46,0x5f,0xcf,0x1a,0xf5,0x24,0x9c,0x66 -,0x62,0xc7,0xf6,0x25,0x03,0x9b,0x6d,0x5e,0x67,0x15,0x40,0x85,0x09,0x11,0x8a,0x56,0x13,0xfc,0xc0,0x80,0x05,0x40,0xa5,0x50,0xb1,0x90,0x2c,0x24,0x0b,0x05,0x02,0xc2 -,0x80,0xb0,0x50,0x2c,0x67,0x0a,0x85,0x02,0xa2,0x31,0x88,0x8c,0x62,0x67,0x77,0x99,0xc7,0x7e,0xdc,0xea,0xb2,0xf2,0x65,0xaa,0x54,0x91,0x1a,0xbe,0x78,0xae,0xa7,0x75 -,0x7a,0xbb,0xac,0xfa,0x0f,0xbe,0x3f,0x1e,0x4e,0x1a,0xf4,0xe1,0xd5,0xce,0xe7,0xff,0x9c,0x6a,0xed,0xbd,0xab,0xa8,0x39,0xb5,0x43,0x67,0xc3,0xf3,0xbc,0xeb,0xba,0x7a -,0x49,0xba,0xe7,0x4e,0x52,0x4e,0x7e,0xf0,0xc3,0x5f,0x3d,0xfa,0x2f,0xe0,0xb7,0x59,0x6f,0x00,0xae,0xab,0xb4,0x78,0x00,0xf0,0x6a,0x1a,0x6a,0x0e,0x89,0xb5,0x76,0x52 -,0x33,0xd7,0x27,0xe7,0x79,0x98,0x95,0xa1,0x98,0x9e,0xe9,0x0a,0xa2,0xf2,0xc5,0xea,0x4f,0x21,0x43,0xbd,0xcf,0x9e,0x38,0x70,0x0e,0x49,0xeb,0x9f,0xd9,0x65,0x63,0xd6 -,0xe4,0x01,0xe1,0x40,0xe6,0xe2,0xab,0x3f,0x27,0xfc,0x2e,0xff,0xd6,0xc8,0x7a,0x16,0x67,0xba,0x3f,0xfa,0x49,0x90,0x02,0x92,0x8a,0x62,0x93,0x01,0xdd,0xff,0x1c,0xfd -,0x17,0x74,0x9c,0x9d,0xd0,0xee,0x02,0x91,0x2f,0x84,0x02,0xe2,0x24,0xea,0x02,0x01,0x74,0x6e,0x07,0xff,0xf1,0x50,0x80,0x2f,0x7f,0xfc,0x21,0x0a,0xcf,0xff,0xff,0xef -,0xff,0xff,0xb0,0x30,0xc0,0x58,0x4e,0x14,0x1c,0x05,0xc2,0xc1,0x80,0xb0,0x50,0x2c,0x14,0x1b,0x05,0x02,0xc1,0x40,0xa8,0x48,0x28,0x15,0x08,0x90,0xc2,0x2c,0x73,0x2b -,0x5f,0x19,0xbb,0xf7,0xeb,0x7f,0x1b,0x83,0x2e,0x52,0x56,0x92,0xa7,0x9e,0x69,0x49,0x15,0xf8,0xbe,0x87,0xea,0x36,0x2c,0x67,0xa3,0xe5,0x8c,0x7b,0x5c,0x4f,0x4b,0xf4 -,0x15,0x76,0x1f,0xd9,0x1d,0xca,0xe2,0x78,0x3c,0x76,0xdd,0xef,0x78,0x75,0x81,0xfb,0x98,0xc8,0xff,0x27,0xd5,0xb9,0x00,0xf3,0xe6,0x93,0x89,0xd4,0x63,0xc6,0xbb,0x34 -,0x1a,0xa1,0x0a,0x12,0x2a,0xfe,0x20,0xad,0x9e,0x53,0xbc,0x30,0xa5,0xdc,0xaf,0x5f,0x6b,0x9f,0xc6,0xe1,0x17,0xec,0x4a,0x18,0x7e,0xcf,0x14,0xcd,0xfe,0xe9,0x1b,0xf4 -,0x11,0xeb,0x38,0x50,0xb6,0x33,0xf3,0x77,0x69,0xdc,0x09,0xdb,0x01,0x23,0xb4,0x13,0x2c,0x88,0x56,0xd4,0xad,0x89,0x22,0x64,0xc1,0x04,0xa2,0x35,0x92,0xaa,0x5b,0x93 -,0x88,0x61,0xb8,0x43,0x02,0x75,0x44,0x54,0x01,0x60,0x54,0x09,0xf4,0x0b,0x11,0xc3,0x01,0x70,0xa0,0x9c,0x2c,0x94,0x0b,0x0d,0xc2,0xa4,0x30,0xa8,0x8c,0x82,0x13,0x0a -,0x84,0x48,0xfb,0x1f,0x5e,0xf5,0xf8,0xfb,0x79,0xe7,0x22,0x97,0x39,0xba,0x35,0x5a,0x5c,0xae,0x37,0x15,0xae,0xbb,0xe3,0x8d,0xcd,0x0f,0xaf,0x55,0xfe,0xfd,0xbd,0x3b -,0xb0,0x4e,0x9e,0x61,0x3d,0xee,0xfa,0xff,0x9c,0xfc,0xb7,0x86,0x9d,0xfc,0x2a,0xb7,0x30,0xa3,0xe5,0x17,0xcb,0xc2,0xdb,0x7d,0x19,0x9f,0x99,0x29,0x4a,0x0e,0xce,0x36 -,0x0d,0xb4,0x27,0x39,0x04,0xfd,0xab,0xe4,0x97,0xd9,0xff,0xd2,0xa4,0xfc,0x3f,0xe4,0xff,0xdb,0x3e,0x1d,0x9f,0x4a,0x44,0x2c,0x38,0x4a,0x24,0xda,0xfa,0x42,0xca,0xd0 -,0x3a,0x0d,0x46,0x7e,0x5e,0x49,0xa3,0xb9,0xc8,0x38,0xa5,0xe5,0x8f,0x68,0x93,0x93,0xaa,0x0b,0x9a,0xaa,0xf8,0x11,0x6a,0xaa,0x2e,0xec,0x1c,0xdd,0xb7,0x1c,0x09,0xf5 -,0xf4,0x5f,0x5d,0xa0,0x03,0xc8,0x28,0x09,0x38,0x64,0xf0,0x0b,0x0e,0xe1,0xef,0xa9,0xfe,0x27,0x78,0xad,0xbd,0x70,0x8a,0x6f,0xd8,0xbb,0x08,0xf5,0xb0,0x85,0x15,0x3d -,0xc0,0x3b,0x83,0xc4,0x00,0x09,0x93,0x2b,0x10,0x04,0x96,0x37,0x00,0xe0,0xff,0xf1,0x50,0x80,0x2d,0xbf,0xfc,0x21,0x2a,0xcf,0xe7,0xff,0xff,0xff,0xf8,0xb0,0x61,0x40 -,0x58,0x30,0x16,0x0a,0x0a,0x04,0x81,0x80,0xa0,0xd8,0x28,0x13,0x0a,0x0c,0xc2,0xa1,0x21,0x20,0x54,0x23,0x07,0x3e,0x7b,0xbf,0x3c,0xdf,0x8b,0xd6,0xfe,0xfe,0x32,0x57 -,0x1b,0xd2,0xae,0xab,0x52,0x4c,0x95,0x26,0xeb,0xf5,0xf7,0x5f,0xde,0xbc,0x8b,0x36,0x7b,0x3b,0xfb,0xcf,0xfb,0xb0,0x83,0xbd,0xd3,0x3d,0x05,0xac,0x01,0xf0,0x76,0xa7 -,0xff,0xe9,0xde,0x0c,0x7a,0xbe,0x27,0xdf,0x6f,0xfd,0xb3,0x45,0x87,0xee,0x11,0x8f,0x2f,0x94,0x3f,0xe2,0x68,0xfd,0xfb,0x90,0x98,0x9a,0x3e,0x81,0xdc,0x9c,0x6e,0xdf -,0xae,0x8f,0xb6,0xaa,0xf4,0x6a,0x6d,0x6b,0x6f,0xed,0x03,0xbb,0x96,0x5b,0xbc,0x7a,0xaa,0xe1,0x12,0x2a,0xc5,0x5c,0x70,0x58,0xc5,0xc2,0xf8,0x90,0x92,0x6e,0x5b,0xd5 -,0xa4,0x64,0xbd,0x29,0x3a,0x55,0x6a,0xb8,0xb2,0xd1,0x2b,0x17,0xd4,0x20,0x74,0xaa,0xd5,0xb1,0x07,0x14,0xef,0x2a,0xc5,0x08,0xad,0x98,0x52,0x60,0x48,0x68,0x30,0xab -,0x25,0xaa,0x2e,0x29,0x50,0x26,0x14,0x02,0x80,0x52,0x20,0x58,0x50,0x16,0x14,0x05,0x06,0xc3,0x40,0xb0,0xd0,0x2c,0x34,0x1a,0x94,0xc2,0x21,0x31,0x89,0x0c,0x42,0x37 -,0x83,0xad,0xf7,0xd2,0x37,0x3a,0xee,0x65,0xe4,0x84,0x9c,0x62,0x6b,0x7e,0x67,0x7c,0x6a,0xb5,0xb2,0xba,0x1f,0x4f,0x9b,0xae,0xcf,0x6e,0x94,0x25,0xd3,0x52,0x21,0xc1 -,0xf9,0xd7,0xf4,0x0f,0xa8,0xd3,0x7d,0xbc,0xb3,0x3c,0xfc,0xf3,0xc7,0xf8,0xbf,0x20,0xc7,0x69,0xf1,0xaf,0x92,0x36,0x6f,0x03,0xe4,0x41,0xfd,0xbf,0xa6,0xc7,0x4e,0xc8 -,0xbd,0xca,0xad,0xf2,0xd9,0x34,0xe8,0x5c,0xc7,0xc7,0x75,0xf9,0x1f,0x8d,0xe6,0xfe,0xd7,0xd1,0xf6,0x5a,0x98,0x9f,0x05,0xa1,0xf5,0xcf,0x7e,0x31,0x77,0xe0,0xb7,0x37 -,0x6e,0xf7,0x5c,0x50,0x1d,0xc3,0x7c,0x94,0xe3,0x68,0x65,0xca,0xb9,0x20,0x31,0xc0,0x4c,0x2b,0xe0,0x26,0x96,0x7b,0xb3,0xf8,0x62,0x5a,0x6d,0x5a,0x50,0xa4,0x1d,0xd1 -,0xdc,0x0b,0x8a,0xda,0xe4,0x7d,0x60,0x77,0x8a,0x0c,0xe0,0x10,0x4c,0x04,0x15,0x77,0xc0,0x3b,0xa4,0x45,0x97,0x10,0x4d,0x40,0xb5,0x40,0xe0,0xff,0xf1,0x50,0x80,0x32 -,0x9f,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x44,0x1a,0x30,0x59,0xab,0x36,0x6a,0xae,0x5c,0x95,0x7c,0x08,0x78,0x1f,0xec,0xf3,0x78,0x7d,0x1d,0x1f,0x1f,0x6d,0xe2,0x6a,0x6c -,0xcf,0x6b,0x16,0x8c,0x8d,0x69,0x6a,0xa7,0xfa,0xa3,0x2b,0xaa,0xa9,0x8a,0xdb,0xfc,0x04,0x32,0xd1,0x9c,0x20,0x28,0xc3,0x1d,0x65,0xe8,0xe9,0x31,0x1f,0x59,0x87,0xdf -,0x40,0xec,0x97,0x44,0xd3,0x2f,0x61,0xc9,0x76,0xaf,0xf7,0xba,0x52,0x2a,0x69,0x80,0x8a,0xd2,0x9b,0x6e,0xbb,0x77,0x5e,0x33,0x58,0x09,0x00,0x26,0xf3,0x0c,0xc6,0xe1 -,0x42,0x54,0xb3,0x05,0x45,0x8d,0xf6,0x84,0xfd,0xf2,0x6d,0xd4,0xc5,0x70,0x9c,0x17,0xac,0x5f,0x33,0x42,0x94,0xda,0xa7,0xf8,0xe2,0x7d,0x0a,0x88,0x8b,0xa4,0x5a,0xa6 -,0xe2,0xb1,0xc6,0xaa,0x20,0xae,0x11,0x5b,0xf6,0xe6,0x55,0x48,0x9a,0x52,0x69,0xa0,0x55,0x21,0xa6,0xcb,0xa0,0xb9,0xd5,0x2a,0xfa,0xba,0x66,0x58,0xae,0x84,0x6b,0x6d -,0xb4,0xd4,0xb6,0xc6,0x85,0x34,0x87,0xd7,0x68,0x5f,0x8f,0xd9,0xde,0x04,0x0a,0x83,0x19,0x81,0x6a,0xed,0xe0,0xf1,0x23,0xcf,0x0b,0xc0,0x85,0x0d,0xb1,0x71,0xb3,0xa2 -,0x72,0xc7,0x74,0x50,0x44,0x66,0x88,0x88,0x93,0x24,0xa5,0xdc,0x8d,0x58,0xdf,0xb3,0x11,0x1f,0x47,0x8a,0x36,0xfd,0x85,0x9e,0x5f,0x23,0xe1,0x2a,0xf6,0xaf,0x0d,0x7d -,0x3d,0xc9,0x39,0x6f,0x6c,0x0b,0x21,0xfb,0xa0,0xeb,0x70,0xd7,0xd7,0xb9,0x5b,0xe5,0x50,0x5b,0xd8,0x55,0x4f,0xe8,0xb5,0x43,0x4d,0x0d,0x19,0xdb,0x5b,0x7a,0xec,0xf6 -,0x67,0x9e,0x64,0x58,0xb1,0x70,0x59,0x87,0x09,0x12,0xcf,0xde,0x86,0xb9,0x7b,0xfe,0xfe,0x3f,0x91,0xd3,0x2f,0x2c,0xac,0x89,0x25,0x9a,0xcd,0x33,0x62,0x1b,0xee,0x72 -,0xf4,0xdf,0x83,0x78,0x11,0xad,0xba,0xee,0xb2,0xa2,0xc9,0xa7,0xb8,0x42,0x61,0x32,0x96,0xdc,0xce,0xd3,0x77,0x98,0xa7,0x71,0xad,0x06,0xa8,0xad,0xba,0x9e,0x52,0xee -,0x6f,0x7e,0x83,0x0e,0xaa,0x51,0x55,0xba,0x93,0xfc,0xff,0x0b,0xed,0xff,0x45,0xd1,0xc8,0xe5,0x57,0x36,0x24,0xe9,0xe6,0x73,0x47,0x69,0xe4,0xa5,0xda,0x79,0xfa,0x3e -,0xc8,0xaf,0x89,0xe3,0x82,0xfb,0xcd,0xb2,0x70,0xb9,0x2e,0x1d,0x4a,0x2e,0x66,0x4a,0xec,0x7d,0xd3,0xed,0x5b,0xb1,0x55,0x0b,0x5b,0xa5,0x4a,0x12,0xe9,0x4a,0xd7,0xad -,0xa1,0x1a,0xea,0x86,0x2a,0x14,0x18,0x05,0x2e,0x50,0x44,0x62,0xa9,0xe2,0x0e,0xff,0xf1,0x50,0x80,0x2e,0x1f,0xfc,0x21,0x6a,0xcf,0xef,0xff,0xff,0xff,0xff,0xb5,0x81 -,0x30,0x94,0x28,0x38,0x13,0x09,0x0c,0xa1,0x41,0x28,0x50,0x44,0x41,0x29,0x88,0x50,0x4d,0x6a,0x56,0x39,0xb9,0x2f,0x1c,0x61,0x52,0x2a,0x23,0x55,0xac,0xe3,0x12,0xae -,0xb5,0xae,0x84,0x8e,0x1d,0xae,0xa7,0xfe,0xe8,0xe3,0xc7,0xd8,0xd1,0x7e,0x8f,0xcf,0x1e,0xd2,0xf4,0xc5,0xac,0xae,0xbc,0xb5,0xef,0xcf,0xff,0x2d,0x4d,0xf6,0xa1,0xda -,0x4c,0x7f,0xf5,0xea,0x89,0x7a,0x0e,0xd2,0x2b,0xf0,0xbf,0x1f,0xa4,0x6f,0x8d,0x4c,0x34,0x67,0x2f,0xa6,0xcf,0x63,0x3c,0xd2,0x9d,0xae,0xd0,0x0f,0x9e,0x10,0x2a,0xf5 -,0x59,0xe3,0x99,0xbf,0x1f,0x45,0x59,0xde,0xd1,0x25,0xa5,0x41,0xe1,0xf0,0xc7,0x05,0x39,0x11,0x99,0x5a,0x71,0x9b,0xf8,0x49,0x91,0x34,0x65,0x1a,0x23,0x4e,0x26,0x5a -,0x15,0xa5,0x49,0xdc,0x69,0x89,0x67,0xaf,0x10,0x57,0xd6,0xb1,0xd8,0x49,0x64,0x02,0xb6,0x58,0x15,0x8a,0x2b,0x90,0x66,0x40,0x05,0xee,0x16,0x01,0x40,0x14,0x68,0x17 -,0x0b,0x06,0x02,0x81,0x30,0xb1,0x60,0x28,0x16,0x1a,0x05,0x84,0x81,0x60,0xa0,0x54,0xa2,0x13,0x0a,0x04,0xc8,0x21,0x31,0x88,0x4c,0x42,0x27,0x6e,0x78,0x9d,0xea,0xea -,0xaa,0x49,0x92,0x93,0x2d,0xc5,0x6a,0xb5,0x5c,0xf1,0x97,0x2f,0x72,0xec,0xae,0x87,0x2a,0x79,0xcb,0xc3,0x51,0x13,0xe6,0xbf,0xc2,0x5f,0xfc,0x7e,0x09,0xab,0xa9,0xf9 -,0xdb,0x25,0xad,0x92,0xec,0xcf,0xfc,0xfe,0x79,0x47,0x6c,0xd1,0xbd,0x2f,0xe7,0x4e,0x90,0xaf,0xf8,0xfc,0x9a,0xeb,0x68,0x1e,0xfb,0x7f,0xe3,0xd5,0x52,0xe7,0xff,0x4e -,0xeb,0xfd,0xeb,0xf3,0x0e,0x27,0x47,0xfb,0x3f,0xcf,0xee,0x76,0x8e,0x6e,0x2f,0x85,0xfc,0xbc,0xa2,0xf1,0xf9,0x8b,0x57,0xbf,0xc1,0xc2,0xa0,0x11,0x7e,0x9c,0x4b,0x39 -,0x04,0xb8,0x70,0x72,0x82,0x50,0xb6,0x47,0x85,0xdc,0x77,0x4b,0x72,0x9e,0xe4,0xef,0xe1,0xcd,0xe5,0xd9,0x1f,0xb3,0x27,0x2f,0xfd,0x45,0xb5,0x0f,0x5e,0x76,0x1f,0xfa -,0xc7,0xda,0x2d,0xa7,0xeb,0x24,0x09,0x17,0x46,0x42,0x5d,0xff,0x59,0x43,0xd7,0x5a,0xce,0xf7,0xba,0x02,0x21,0x05,0x0f,0x5c,0x07,0xb8,0x02,0x4a,0x0c,0xa0,0x70,0xff -,0xf1,0x50,0x80,0x30,0x3f,0xfc,0x21,0x0a,0xcf,0xff,0xff,0xff,0xff,0x7f,0xb1,0x60,0xc0,0x58,0x48,0x36,0x0b,0x89,0x83,0x01,0x40,0xa8,0x98,0x28,0x45,0x11,0x05,0x04 -,0x45,0x10,0x98,0x84,0x46,0x11,0x19,0x84,0x46,0xe7,0xcf,0x3a,0xf3,0xde,0xbb,0xcd,0x67,0x15,0x7b,0xd5,0x26,0x6a,0xa4,0xa4,0xa8,0xeb,0x32,0xe5,0x4a,0xe3,0x7f,0x8e -,0x87,0x99,0x9a,0xe9,0xeb,0xaf,0xf8,0x2f,0x80,0xf3,0x1f,0xd2,0xf0,0x2a,0xfb,0x7f,0x9c,0xa9,0x77,0x9b,0xd0,0xc1,0xcd,0xf9,0x1b,0x5f,0x14,0xf1,0xf5,0xe6,0x5c,0xb8 -,0xd2,0x1c,0x99,0x22,0x70,0xee,0xe7,0x72,0x29,0xd2,0x6c,0xe0,0x15,0x5c,0xa9,0x1d,0xf7,0xef,0xba,0x85,0x61,0xfe,0xf8,0xb5,0x2e,0x19,0x20,0xe2,0xdc,0xb3,0xa7,0xca -,0x12,0xc5,0x6e,0xc7,0xb6,0x73,0x42,0xe4,0xf8,0x1d,0x7e,0xbc,0xfd,0x8d,0x9c,0x29,0xc3,0xda,0x15,0x32,0x9f,0x15,0xfc,0xa5,0xb1,0x23,0x2f,0xe7,0x71,0x5f,0xad,0x13 -,0x1f,0x00,0x19,0xfb,0xda,0x11,0x3c,0xf1,0xad,0xe0,0x2d,0x0b,0xe2,0x54,0x48,0x7e,0xa6,0xe9,0xa1,0x42,0xad,0xe5,0x4a,0xe8,0x88,0x3b,0x8a,0x0a,0x21,0x86,0xe0,0x0b -,0x85,0x40,0xa8,0x40,0xb0,0x50,0x2c,0x74,0x0b,0x06,0x02,0xe1,0x40,0xb1,0xd4,0x28,0x15,0x13,0x85,0x44,0x62,0x51,0x18,0x54,0x42,0x63,0x0b,0x77,0x57,0xe7,0xd6,0xb9 -,0x8a,0x95,0x75,0x5c,0x6e,0x4a,0xd6,0x71,0x9c,0x49,0xb2,0xf9,0x91,0xec,0x8a,0xe8,0x7d,0x66,0x4f,0xef,0xfa,0x7d,0x3e,0x91,0xf4,0xea,0x9c,0xfc,0x2f,0xd3,0x9e,0xad -,0x17,0xec,0x7f,0xae,0x50,0xba,0xff,0xf1,0x9e,0xfd,0x53,0x87,0x7b,0xd3,0xb9,0xff,0xe7,0x97,0xa4,0x6d,0xce,0x9a,0xf9,0xfe,0xb1,0x2a,0x6d,0xb3,0xb9,0x2f,0xfc,0x01 -,0xb7,0x10,0x0c,0x6b,0x04,0xeb,0xd2,0x27,0x6f,0x20,0xaa,0xdc,0x42,0xd8,0x8f,0x03,0xc7,0xc5,0xe1,0xed,0x96,0xfa,0xfb,0xe7,0x7f,0xcc,0x30,0xe4,0xe5,0x5c,0x79,0xa3 -,0x98,0x03,0x6d,0x9e,0x70,0x1e,0xb1,0xc4,0x0f,0x38,0x48,0xe2,0x1e,0xe7,0xff,0xe8,0x54,0x7d,0xa8,0xf5,0xde,0xb7,0x37,0x81,0xcc,0x07,0x00,0x01,0xf4,0x01,0x3b,0x7d -,0x76,0x0f,0x86,0x01,0x30,0xa3,0x80,0xe1,0xe9,0x24,0xa9,0x6a,0x41,0x81,0x7b,0x5a,0x51,0xaa,0x50,0x50,0x02,0xdc,0x85,0x26,0x13,0x98,0x0a,0xce,0x21,0x7e,0xe8,0x1c -,0xff,0xf1,0x50,0x80,0x2e,0xbf,0xfc,0x21,0x0a,0xcf,0xcf,0xfb,0xff,0xff,0xff,0xb4,0x81,0x30,0x50,0x2c,0x15,0x0a,0x0a,0x04,0xe1,0x80,0xa0,0xd8,0x2a,0x14,0x12,0x85 -,0x06,0x46,0x13,0x18,0x44,0xe6,0x9e,0x6a,0xfc,0x6b,0xe7,0xdb,0x77,0x74,0x8a,0xd0,0x54,0x97,0x55,0x2a,0xe3,0x4c,0x2f,0xcf,0xb0,0xf1,0xc5,0x5f,0x9a,0x9a,0x3f,0xfd -,0x1f,0x0f,0x17,0x20,0xde,0x90,0xfd,0x7a,0x01,0xf7,0xd0,0xa3,0x00,0xfe,0x9f,0x57,0xa8,0xb5,0x53,0x1f,0x89,0xba,0xdf,0x47,0x7e,0x6e,0x39,0xf8,0xc7,0xb2,0x7e,0x42 -,0x60,0x0a,0x3b,0x20,0xe1,0x57,0xca,0x5d,0x1b,0xfe,0x33,0x5e,0x45,0x4f,0x66,0x75,0xd3,0x8b,0x44,0x57,0xb3,0xeb,0x07,0x48,0x67,0x0f,0x4b,0x14,0xb7,0xfc,0x84,0xa6 -,0xc2,0x58,0x4f,0xdc,0x14,0x79,0x9e,0x5a,0x54,0xbd,0x12,0x6b,0xdb,0xbe,0xf1,0x50,0xd1,0x55,0x78,0x8c,0x66,0xed,0x9a,0xd8,0x95,0x25,0x34,0xe7,0x5b,0x28,0x42,0xa7 -,0xaf,0x68,0x08,0x05,0x09,0xe3,0x01,0x4a,0x89,0xa2,0x13,0x2d,0x3b,0x80,0x12,0x12,0x02,0x81,0x02,0xc2,0x80,0xa0,0x58,0x30,0x14,0x24,0x05,0x8a,0x82,0x60,0xa8,0x58 -,0x2a,0x37,0x0a,0x88,0xc4,0xa2,0x30,0xa8,0x4c,0x2a,0x13,0x10,0x95,0xf9,0xf6,0xf7,0xe1,0xbf,0xbe,0xdd,0x90,0xbd,0xa2,0x4d,0x73,0xd2,0xa5,0xd2,0xaa,0xbc,0x9b,0xbc -,0xe3,0xd8,0x69,0x54,0xfd,0xbe,0x31,0xa7,0x7b,0x50,0xd3,0xac,0x1d,0x4e,0x8f,0xd8,0x77,0x5c,0xd3,0xe3,0x85,0x80,0x5e,0x90,0x67,0xd9,0x3e,0x85,0x9a,0x7f,0xf1,0x6f -,0x0e,0xfc,0x0c,0xaa,0x0e,0x95,0x7f,0xc3,0x33,0xff,0xdf,0xfb,0x3f,0x09,0xff,0x38,0x70,0xca,0xf5,0xc9,0xc2,0xbe,0x5f,0x3e,0x7a,0x4a,0xfa,0xaa,0x10,0xe0,0x79,0x9c -,0x1e,0x1d,0x4d,0x19,0x4f,0x53,0x8f,0x69,0xc5,0xc1,0xa7,0x2b,0xce,0xa4,0xee,0x03,0x9f,0x20,0x4f,0xc2,0x57,0xef,0x95,0xfc,0x73,0x6a,0xbe,0x07,0xad,0xe2,0x9d,0xc2 -,0xf6,0xf5,0xe7,0xdd,0x07,0x2f,0x07,0xc4,0x48,0x2f,0xc3,0x9f,0xd4,0x71,0x00,0x0f,0xaf,0xf5,0xea,0x13,0xe4,0x4b,0x8d,0x02,0x97,0x47,0xbf,0x74,0x40,0x3c,0x7c,0x00 -,0x7c,0x25,0xd5,0x1e,0xb0,0x81,0x38,0x38,0xe0,0x11,0x24,0xc1,0x52,0x59,0x46,0x62,0xf7,0x28,0x25,0x40,0x38,0xff,0xf1,0x50,0x80,0x2c,0xbf,0xfc,0x21,0x0a,0xcf,0x6f -,0xdf,0x6d,0xff,0xfd,0xae,0x60,0xc0,0x58,0x68,0x15,0x09,0x86,0x08,0xc1,0x40,0xb0,0x90,0x6c,0x12,0x0a,0x18,0x86,0x21,0x30,0x88,0x94,0x42,0x43,0x08,0x89,0xe3,0x4e -,0xa3,0x79,0xbd,0x55,0xa5,0x75,0x55,0x51,0x5c,0x65,0x58,0xe1,0xb9,0xec,0xe6,0x1a,0xe3,0xe8,0x59,0xb6,0x0f,0x4e,0x34,0x6d,0xa3,0x68,0xf6,0xcf,0x87,0xea,0x95,0xd8 -,0x76,0xaa,0xd0,0xa8,0x63,0x30,0x93,0xd3,0x5c,0x9b,0x07,0xad,0xd1,0xbb,0xcd,0xd3,0xdd,0x43,0x96,0x3a,0x8b,0xcf,0xe8,0x33,0xfc,0xef,0x44,0x28,0xca,0x2a,0x4d,0x99 -,0xad,0xcd,0xa2,0x3c,0x79,0x68,0xf2,0xcd,0xaf,0xa2,0x59,0xc6,0xf3,0x39,0x6d,0x11,0x7a,0x42,0x6c,0x5f,0xe6,0x16,0x16,0xb8,0xe7,0xb0,0xba,0xbe,0xae,0x9c,0x55,0x3a -,0x1f,0x80,0x82,0xb4,0xd4,0x68,0x52,0x10,0xfc,0xee,0x2d,0x75,0x87,0x92,0x91,0x80,0x57,0xd7,0x4c,0xa9,0x1c,0x08,0xb0,0x4a,0x84,0xd1,0x88,0xf1,0x00,0x00,0x25,0xe0 -,0x02,0x12,0x28,0x92,0xf6,0x04,0x5a,0x62,0x0b,0x82,0xb4,0x9f,0x78,0x01,0xa8,0x2e,0x02,0xa1,0x85,0x01,0x90,0xb0,0x50,0x2e,0x16,0x0a,0x0d,0x84,0x81,0x61,0x28,0x50 -,0xc6,0x14,0x12,0x84,0xce,0x22,0x30,0x89,0x9e,0x3f,0x9f,0xe9,0xf1,0x3c,0x7f,0x9f,0xe2,0x37,0x75,0x75,0x57,0x53,0x24,0xba,0x71,0xc6,0xef,0x99,0x27,0x11,0x22,0x4e -,0x82,0x6b,0x2f,0x76,0x83,0x97,0xed,0x95,0xac,0xf6,0xb7,0x8f,0xe7,0x2d,0xd3,0x68,0xda,0xb9,0x52,0x5b,0x6f,0x48,0x3f,0x04,0xdc,0xf4,0x3f,0x50,0x92,0xfb,0xe0,0xad -,0xf8,0x3b,0xb5,0xa3,0x3f,0xcb,0x2f,0x43,0xfd,0x8f,0xb9,0xd1,0x39,0x46,0x3d,0x5e,0xf4,0x08,0x97,0xc5,0xf0,0x76,0xbe,0x58,0xa1,0xbd,0x75,0x1e,0x95,0x3f,0xb1,0x05 -,0xe1,0x43,0xb0,0x6b,0x69,0xb3,0xae,0x20,0xfb,0xb1,0x23,0x97,0x33,0x9b,0x2d,0xdd,0xc1,0x1e,0xec,0x95,0x40,0x3e,0xd0,0xee,0x3e,0xe9,0x9c,0x31,0x16,0xff,0x17,0xba -,0x4c,0x10,0x83,0xb8,0x4e,0x47,0xba,0x06,0x30,0x10,0x26,0x7a,0xcb,0x04,0xea,0x04,0xc9,0x82,0xa0,0x56,0x00,0x04,0xcb,0x5e,0xe0,0x70,0xff,0xf1,0x50,0x80,0x2d,0x9f -,0xfc,0x21,0x0a,0xcf,0xcf,0xb7,0xff,0xff,0xfe,0xaf,0x40,0xb0,0x60,0x28,0x26,0x0a,0x0a,0x04,0xe1,0x90,0xa0,0xd8,0x28,0x72,0x0a,0x04,0x88,0xa1,0x30,0x88,0x4c,0x22 -,0xa7,0x7f,0x5e,0x25,0xf5,0x5e,0xee,0x39,0xe2,0xf6,0xe3,0x2a,0xe2,0xa2,0x13,0xa6,0xfa,0xed,0x5c,0x6f,0x55,0x3f,0x5d,0x0f,0x81,0xd7,0xff,0x35,0x2d,0xfe,0xb3,0xf2 -,0xbd,0x83,0xa1,0xb9,0x52,0xb9,0x5d,0x35,0x7b,0x73,0x3b,0xf6,0x2b,0xdf,0x75,0x97,0x19,0xf1,0x47,0x7d,0x7c,0x02,0x9e,0x10,0xdc,0x07,0x2c,0xd2,0x9d,0xad,0xde,0x0b -,0x88,0x0b,0xd0,0x03,0x31,0xe1,0xfd,0xc4,0x95,0x6b,0x7a,0x52,0xf9,0x77,0x78,0x62,0xb3,0x52,0x9e,0x67,0xb5,0xf9,0xc9,0x63,0xc1,0x3c,0xc8,0xf5,0x5c,0xe5,0xbc,0xce -,0x08,0x17,0x0c,0xae,0xba,0x96,0x46,0x6a,0x4c,0x83,0x1f,0x89,0x9b,0x2a,0x14,0x08,0xf7,0xe1,0x09,0x8a,0xf4,0x22,0x81,0xeb,0x2a,0x0a,0x2b,0x3a,0x45,0x54,0x04,0xc1 -,0x1b,0xcd,0x5b,0x02,0xf6,0x07,0x62,0xe1,0x9d,0x00,0x99,0x51,0x20,0x40,0x0b,0x01,0x4a,0x81,0x80,0xb0,0xd0,0x2c,0x24,0x0b,0x11,0x42,0x81,0xa0,0xa0,0x58,0x28,0x16 -,0x11,0x85,0x04,0xa1,0x31,0xa8,0x8c,0x62,0x13,0x08,0x84,0xc2,0x22,0x30,0x88,0xde,0xb8,0xef,0xa9,0xe3,0xf1,0xdc,0xcc,0xce,0x33,0x7c,0x2a,0x24,0xab,0xb9,0xa9,0x8d -,0x4b,0xce,0x37,0xae,0xfa,0xbc,0xb1,0xcd,0xd5,0x9b,0xb9,0xf3,0xd8,0xbc,0x7e,0x48,0xfe,0x3d,0x2a,0xe4,0x5d,0xa3,0x40,0x55,0xf2,0xbe,0xf3,0xfe,0x34,0xeb,0xf4,0x51 -,0x11,0xf6,0x3b,0x6f,0xd4,0x37,0x05,0x01,0x85,0xc9,0xfc,0xd4,0xc4,0xd3,0x9c,0x6a,0x8e,0xe7,0xf1,0x03,0x7e,0x9a,0x9e,0x2f,0xa7,0x65,0x42,0x1f,0xfa,0x7f,0x5a,0xee -,0x5e,0xed,0x70,0xff,0x39,0x77,0x35,0xff,0xe3,0x7a,0xe2,0x98,0xeb,0xae,0x03,0xff,0xb3,0x77,0x87,0x79,0xea,0x90,0xa5,0xfb,0xfd,0xf0,0xb9,0x03,0xb8,0x27,0xb8,0x33 -,0xea,0x2c,0xb0,0x41,0x0e,0xe0,0x3f,0xff,0x00,0x0f,0x75,0x42,0x78,0x00,0x07,0xff,0xed,0xde,0x9f,0x21,0x99,0x20,0x1e,0xe8,0x22,0x29,0x48,0xa6,0xb8,0x7b,0xa7,0x70 -,0x08,0x04,0x82,0xf0,0x03,0x80,0xff,0xf1,0x50,0x80,0x30,0x3f,0xfc,0x21,0x0a,0xcf,0x7f,0xfb,0xfd,0xbf,0x7c,0xae,0x60,0xc0,0x58,0x48,0x26,0x1c,0x0d,0x82,0x81,0x60 -,0xa0,0x58,0x28,0x26,0x09,0x05,0x42,0x83,0x50,0x90,0x94,0x22,0x33,0x08,0x89,0x42,0x24,0x30,0x88,0x9c,0xea,0x9f,0x5c,0xed,0xbb,0xad,0x29,0x2f,0x2e,0xae,0x64,0x25 -,0xdf,0x35,0xc7,0xc7,0xcf,0xb7,0x71,0x5c,0x7f,0xb6,0x82,0x79,0xda,0xff,0xb5,0xfb,0x77,0xd9,0xfc,0x87,0x2a,0x4e,0x3c,0x12,0xff,0xdf,0x3c,0xbd,0xc2,0xc3,0x09,0x97 -,0x2b,0xa7,0x51,0xcf,0xeb,0xde,0xbe,0x4e,0x3e,0x0b,0x57,0x1e,0xff,0x44,0xab,0xc0,0x35,0xa7,0x21,0xaa,0x67,0x7e,0x46,0x12,0xbf,0x04,0x45,0x7b,0xfe,0x7a,0x36,0xed -,0xe6,0xa5,0xde,0x30,0xc2,0x31,0x1a,0xac,0x3c,0xbe,0x25,0x7b,0x81,0x0a,0xbd,0xbe,0x31,0x5b,0xdd,0x87,0x28,0xbe,0x3b,0x56,0x2f,0x4b,0x66,0xbd,0x36,0x08,0xed,0x30 -,0x42,0xd6,0xb4,0xe3,0xae,0xf3,0xd8,0xb5,0x5f,0x06,0x0b,0x9d,0x4b,0x77,0x94,0xb4,0xa3,0x07,0xba,0x17,0x20,0x2d,0xcf,0xea,0x81,0x63,0xc4,0x00,0x16,0x84,0x6c,0x51 -,0x9e,0x42,0x53,0x4b,0xfc,0x02,0xb2,0x07,0xca,0x85,0x7b,0xd5,0x00,0x41,0x20,0x14,0x8a,0x17,0x0b,0x06,0x02,0xc2,0x41,0x30,0x54,0x2c,0x17,0x0a,0x05,0x86,0x81,0x30 -,0xb0,0x50,0x6a,0x14,0x0a,0x85,0x02,0x62,0x50,0x98,0x44,0x66,0x11,0x09,0x84,0x4e,0xfb,0x79,0xf7,0xf3,0xae,0xff,0xf2,0xff,0x8f,0xc7,0xe9,0x29,0xc7,0x8b,0x35,0xcc -,0xd2,0xf9,0xf6,0xb7,0x3f,0xbd,0x71,0xc7,0xfd,0x33,0xf9,0xf6,0xef,0x35,0x34,0x1e,0x99,0xef,0xb2,0xe1,0xeb,0xcc,0x4d,0x9a,0x0f,0xf4,0xbc,0xe0,0xf4,0x77,0x9c,0xdf -,0xf5,0x84,0xd7,0xb7,0xd5,0x7c,0x76,0x29,0xde,0xf7,0xf7,0xdd,0xcf,0xd1,0xb0,0x2f,0xd6,0x1e,0xe7,0xfb,0x67,0xeb,0x16,0xa2,0x67,0xe7,0xce,0xce,0x7b,0xa3,0xfe,0x54 -,0x17,0xfb,0xff,0x44,0x4c,0x0f,0x66,0x33,0x7e,0xb3,0xe0,0x4a,0x73,0xbe,0x28,0xe7,0xc2,0xe4,0xe4,0x44,0xb0,0x02,0x9f,0xaa,0xbb,0xdd,0xee,0x9e,0xba,0x9f,0x0c,0x78 -,0xac,0x40,0x07,0xe6,0x63,0x4a,0xd3,0x69,0x49,0x4c,0x16,0x46,0x00,0x52,0xc0,0x0a,0xbc,0x0b,0xfe,0xb7,0x44,0xc1,0x9b,0x03,0xe1,0x5a,0x0a,0x23,0x00,0x6e,0x00,0x12 -,0x00,0x27,0x70,0x05,0x01,0x20,0x1c,0xff,0xf1,0x50,0x80,0x30,0x3f,0xfc,0x21,0x0a,0xcf,0xef,0xfc,0xff,0xff,0xff,0xb0,0x70,0xc0,0x58,0x88,0x23,0x0c,0x09,0xc2,0xc1 -,0x40,0xb0,0x60,0x2c,0x14,0x0b,0x09,0x02,0x41,0x41,0x18,0x48,0x26,0x12,0x08,0x90,0xc4,0x21,0x31,0x09,0x9c,0xea,0xaf,0xce,0x33,0x9d,0x71,0xde,0xbb,0xf3,0x5c,0x77 -,0xad,0xf1,0x7b,0x95,0xc5,0x5c,0xac,0xd5,0xfa,0xf8,0x6e,0x1f,0x8e,0x83,0xc4,0x6f,0x84,0x3e,0x9f,0x7e,0x99,0x78,0x70,0x4d,0x33,0xa1,0x7f,0x34,0xbd,0x26,0xbe,0x3a -,0xf0,0xb5,0x30,0xf5,0xfb,0x5b,0x84,0xdf,0xd2,0x04,0x50,0xd9,0x7f,0xcd,0x07,0x12,0xe0,0x7b,0x0b,0x96,0xf3,0xfe,0xce,0xff,0x64,0xa2,0x83,0x6d,0x3a,0x22,0xa2,0x0d -,0x41,0xda,0xc9,0x3d,0x19,0x35,0x3d,0x2d,0x73,0x44,0x7a,0xb8,0x52,0xd7,0x8f,0xa5,0x7d,0x37,0xd5,0x36,0xbb,0xd5,0xe4,0xba,0xf8,0xbe,0x1c,0xb6,0x43,0x99,0x73,0x9d -,0x06,0xef,0xf5,0xd7,0x40,0xa4,0x73,0xa8,0xb7,0x0f,0x70,0xb2,0x93,0x4e,0x5c,0x61,0x42,0x87,0x91,0x0b,0xd8,0xf7,0x04,0x8b,0xb3,0x6a,0x17,0xf5,0xc0,0xef,0x85,0x60 -,0x12,0x8c,0xaa,0x50,0xba,0x41,0xcd,0x1a,0x48,0x04,0xc0,0x98,0x14,0xea,0x18,0x0b,0x09,0x02,0xa1,0x80,0xb0,0x4c,0x28,0x16,0x14,0x09,0x84,0xa1,0x62,0x20,0x58,0x2a -,0x34,0x09,0x94,0x44,0x62,0x10,0x98,0x44,0x46,0x11,0x13,0xbd,0x73,0xc7,0x1e,0xbf,0x1e,0xfd,0x78,0xd6,0x15,0x7c,0xf1,0x49,0x2e,0xe6,0xf5,0x75,0x75,0xf1,0x7f,0x37 -,0xf1,0xdf,0x75,0xed,0x34,0x1f,0x23,0x66,0x3f,0x0f,0x66,0xaf,0x83,0xf8,0x95,0xc9,0xfd,0x7e,0x3f,0x37,0xa9,0x3c,0x2f,0x2d,0x7e,0xd9,0x0b,0x37,0x27,0xa5,0x85,0x27 -,0x68,0x8a,0x6e,0x12,0xdb,0xfd,0x6c,0x08,0xe1,0xe2,0xe1,0xd1,0x6c,0xa2,0xdd,0x9b,0xe2,0xda,0x06,0xea,0x76,0xd0,0x92,0x0d,0xbc,0x30,0x14,0x9b,0x94,0x56,0xfa,0x50 -,0x45,0x9d,0xa5,0x50,0xa3,0x9f,0x6f,0x9d,0x81,0xc1,0xc7,0x8c,0x2f,0x80,0x7a,0x39,0x8a,0x05,0x05,0x5e,0x99,0xfc,0x75,0x3b,0xda,0xdd,0xf2,0x9a,0xbf,0xfa,0x43,0x5f -,0xbd,0x0b,0x26,0xdb,0x7b,0xe0,0x77,0x8f,0xb4,0x1e,0xe9,0x32,0xa0,0x93,0x3a,0xbd,0xab,0x6b,0xa6,0xaf,0xbb,0xc0,0x7a,0xc1,0x40,0xa9,0xdf,0x00,0x2f,0x62,0xa9,0xe8 -,0x28,0xca,0x3d,0xd0,0x90,0x09,0x80,0xe0,0xff,0xf1,0x50,0x80,0x2d,0x5f,0xfc,0x21,0x2a,0xcf,0xff,0xff,0xee,0xff,0xfd,0xaf,0x81,0x30,0xd4,0x28,0x26,0x0c,0x06,0x82 -,0x81,0x60,0xa0,0x98,0x28,0x16,0x0a,0x10,0x84,0xa1,0x21,0x18,0x84,0x46,0x31,0x09,0x88,0x4c,0xef,0x8c,0x9d,0x6e,0x57,0x3c,0x4a,0xbd,0xa5,0x70,0x2a,0x6a,0x9a,0xbb -,0xdd,0xc7,0x7c,0x5e,0x46,0xbc,0xfb,0x00,0x6a,0xa6,0x73,0x57,0x4d,0x5d,0xda,0x31,0xfc,0x9a,0x43,0x4d,0xa6,0xc1,0x7f,0xde,0x10,0x07,0x03,0xa6,0xd2,0x09,0x5f,0x83 -,0x1f,0xfc,0x67,0x7b,0xfd,0x4b,0x4c,0xf4,0x19,0x9f,0xfa,0x33,0xbf,0x49,0x42,0x71,0x7f,0xee,0xc9,0xf7,0x58,0x69,0x85,0xbf,0x70,0x49,0xa6,0x7d,0xf8,0x7c,0x3b,0xf7 -,0x78,0xa9,0xbf,0x4d,0x1a,0xc7,0x86,0x68,0xb4,0xa9,0x8c,0x65,0xd0,0x48,0x69,0x3b,0x43,0x8e,0xff,0xaf,0xde,0x10,0x8d,0xbb,0x80,0x94,0x91,0x8c,0x4a,0x4d,0x36,0xbf -,0x5f,0xba,0xb8,0x1e,0xb2,0x80,0xf7,0x50,0x2d,0x33,0x62,0x32,0xa4,0x0e,0xf8,0x77,0x00,0x12,0x58,0x2b,0x12,0x88,0x81,0x28,0xda,0x82,0x42,0x64,0x84,0xc0,0x52,0xa8 -,0x58,0x68,0x16,0x3a,0x05,0x85,0x01,0x40,0xb0,0xd0,0x2c,0x25,0x23,0x84,0xc2,0xa1,0x20,0x88,0x94,0x26,0x11,0x43,0xbb,0xdf,0x58,0xb7,0x7c,0x55,0xe5,0x22,0xb5,0x92 -,0xb5,0x19,0xf1,0xb5,0x71,0x77,0xe3,0xac,0xc9,0xaa,0xf3,0x03,0xdb,0x1f,0xb7,0x97,0x0d,0xfd,0x3f,0xae,0xe9,0x49,0x77,0xfe,0x05,0x3e,0x3e,0x19,0xfb,0x63,0x2e,0x6b -,0xcd,0xbd,0xac,0x7c,0x0f,0x2d,0xf7,0xbd,0xbd,0x98,0x27,0x58,0xb7,0xa1,0xfe,0xb3,0xf9,0x09,0xe3,0x18,0xd4,0x7e,0x9e,0xae,0x2f,0x95,0xa1,0x96,0x82,0x25,0xfd,0x6b -,0xae,0xec,0xb1,0x63,0x3c,0xab,0x6d,0x92,0xfc,0xd5,0xcd,0x74,0x3e,0x8b,0x9e,0x3e,0x1c,0x1d,0xb1,0xe4,0x47,0x2e,0x02,0x3b,0xa7,0x69,0x43,0x90,0xb9,0x3e,0x51,0xc2 -,0x6b,0x98,0x53,0xce,0x50,0x3b,0x8f,0x68,0x9e,0x30,0x30,0xec,0x70,0x84,0x8c,0x02,0x8c,0x46,0xa8,0xdc,0x60,0xe2,0x05,0x2d,0x50,0x00,0x03,0xc0,0x0e,0xf7,0x78,0x06 -,0xe3,0x90,0xab,0x98,0x22,0xa4,0x2c,0x2d,0x38,0xad,0x70,0x27,0x30,0x03,0x9a,0x55,0x03,0x80,0xff,0xf1,0x50,0x80,0x34,0xff,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x3c,0x26 -,0x30,0x59,0x23,0x52,0x28,0xba,0xd1,0xa9,0x52,0xc6,0x74,0xfa,0x8f,0x3e,0x7e,0xbb,0xfe,0x56,0x66,0x93,0xa2,0xdb,0x64,0x54,0x46,0xad,0xa9,0x46,0x40,0xb8,0x63,0xd6 -,0x21,0x86,0xf7,0x35,0xf8,0xcc,0x79,0x31,0xf6,0xff,0xbc,0xfa,0xb1,0xd1,0x4f,0x9a,0xfa,0x7b,0x69,0xca,0xfe,0x2d,0x9c,0x96,0xb0,0x32,0xe1,0xb0,0x23,0x43,0x06,0xb8 -,0xd5,0x0c,0x08,0x4c,0x1c,0xaf,0xca,0x79,0xf4,0xc6,0x72,0x95,0x2b,0x9c,0xf0,0xaf,0x1b,0x2b,0xda,0x07,0xd7,0x70,0xd4,0xb7,0x25,0xa8,0x2a,0x68,0xb5,0xe8,0x8e,0xb5 -,0xf1,0xab,0x52,0x33,0x9f,0x19,0x13,0xa3,0x35,0x76,0x81,0xa5,0xbd,0x00,0x6d,0xdd,0xff,0x69,0xb3,0xff,0x0b,0x55,0x6a,0x16,0x56,0xb6,0x17,0xd2,0xaa,0x92,0xb9,0xab -,0x7f,0x6c,0xc8,0xf5,0x6a,0x78,0xdf,0xa3,0xd4,0xd6,0xb2,0x5b,0x1f,0x3b,0xa4,0x99,0x12,0xd3,0xc1,0x9a,0xf0,0xc9,0x57,0xd3,0x58,0xd0,0x63,0x2b,0x84,0xca,0xd5,0xcf -,0x90,0xa4,0x2a,0x0d,0x2a,0x11,0x44,0xd6,0xac,0xc5,0x1b,0xe8,0x9c,0x69,0x14,0x51,0xe2,0xaf,0x9f,0x0f,0x4a,0x43,0x8c,0x13,0xb9,0xa0,0x40,0x4e,0xc5,0xf3,0x10,0xc8 -,0x61,0xd0,0x64,0x89,0x43,0x46,0x0b,0x18,0x2d,0x10,0x99,0x42,0x65,0x6c,0x92,0xe4,0xeb,0xbb,0x0c,0xd4,0xef,0xa6,0x0a,0x6f,0x84,0x0f,0x36,0x12,0x89,0x9e,0x05,0x9b -,0xd5,0xa3,0x77,0x3a,0x56,0x6c,0x94,0x1a,0x9b,0x46,0x4b,0x55,0xa3,0x0a,0x71,0x6d,0xc7,0xf5,0xea,0xdb,0x1e,0xcf,0xdb,0x4f,0xab,0xc2,0xeb,0x03,0xe4,0x7a,0x8b,0xac -,0x64,0xba,0x81,0x7e,0x42,0x05,0x82,0x4d,0x72,0x79,0x05,0xe9,0x72,0xf2,0x7a,0xf9,0xb2,0xff,0x76,0xed,0xec,0xf8,0x4f,0x46,0x8b,0xe5,0x67,0xbd,0xc4,0x2e,0xce,0xd9 -,0x29,0x98,0x70,0xd5,0x3f,0x8b,0xc5,0xfd,0xf5,0xc7,0x4d,0xad,0x74,0x7d,0xa4,0xa1,0x88,0x32,0x86,0x0f,0x09,0xf4,0x86,0x98,0xad,0x26,0x29,0x13,0xd8,0x1c,0x02,0xcb -,0xcc,0x66,0x35,0x14,0x9c,0x81,0x4c,0x12,0x9e,0x28,0x24,0xcb,0x0a,0x50,0xa1,0xb1,0x60,0xc2,0x14,0x8d,0x61,0x9a,0xb8,0x95,0xff,0x2e,0x37,0x36,0x1c,0x7a,0xd3,0xf8 -,0xf3,0x4d,0x8f,0x1e,0xb5,0xf1,0xb8,0xde,0x2b,0x54,0x4b,0xf0,0x12,0x00,0x13,0xcf,0x4e,0xaf,0x5b,0xa5,0x7b,0x2a,0x6a,0xca,0xfb,0x4f,0x49,0xeb,0x62,0xa7,0xf2,0xb3 -,0xaa,0x28,0xcd,0x5a,0x6b,0xce,0xe3,0x55,0xb0,0xf2,0xc8,0xe0,0x21,0xa2,0x57,0x60,0xa6,0x03,0x83,0xdb,0x1c,0x5e,0x5c,0x84,0x4e,0xff,0xf1,0x50,0x80,0x30,0xbf,0xfc -,0x21,0x6a,0xcf,0xef,0xfd,0x7f,0xfd,0xff,0xb1,0x60,0xc0,0x58,0x88,0x16,0x1c,0x85,0x04,0xc1,0x40,0xb0,0x50,0x8c,0x25,0x0b,0x05,0x02,0xa2,0x21,0x18,0xc5,0x6c,0x9a -,0xc7,0x5c,0xb8,0xef,0x52,0x37,0x74,0xae,0x32,0x53,0x53,0x1f,0x0d,0xee,0x97,0x79,0xaa,0x7d,0x79,0x0f,0xf3,0x4b,0x59,0xf2,0xe2,0xdf,0xad,0x38,0xf9,0x5f,0x7a,0x3f -,0x77,0xd9,0xef,0xd5,0xe9,0xd1,0x7a,0xbf,0xc6,0xf2,0x37,0xee,0x37,0xae,0xd1,0x4d,0x21,0xf2,0x9e,0xcb,0x88,0x51,0xfd,0x93,0x74,0xf4,0x7f,0x7f,0xc6,0x3b,0x0f,0x9b -,0xdb,0xfc,0xaf,0x41,0xa0,0x52,0xfb,0xf9,0x7c,0x19,0x06,0xa4,0x13,0x5f,0xdf,0xce,0x73,0xa3,0xa2,0xd1,0xcc,0x50,0x95,0x79,0x0a,0x5f,0xf2,0x28,0xb5,0xdc,0x95,0xe8 -,0x9b,0x39,0x4d,0xdd,0x97,0x9f,0x0e,0x4b,0x39,0x96,0xa2,0xf6,0x5b,0x2e,0x56,0x6f,0xae,0x22,0x7a,0x70,0x99,0xee,0x10,0x1e,0xea,0x69,0x9e,0xb9,0x42,0x2e,0x56,0xb4 -,0xea,0x51,0x77,0xa4,0x94,0xa9,0xf0,0xc1,0x24,0x5a,0x2d,0xb0,0x9c,0x20,0x58,0xed,0xdd,0x52,0xc8,0x2e,0x56,0x42,0xf2,0xc8,0x1b,0x4a,0x54,0xb8,0x05,0x40,0x9e,0x40 -,0xb0,0x50,0x2c,0x38,0x0b,0x19,0x42,0x81,0x60,0xa8,0x58,0x50,0x15,0x0b,0x05,0x44,0x81,0x51,0x18,0x54,0x86,0x11,0x09,0x90,0x42,0x61,0x11,0xbf,0xaf,0x1c,0xeb,0x2b -,0xe3,0xbe,0xb9,0xad,0x6e,0xa5,0xf3,0xc7,0x7c,0x55,0xcc,0xd6,0xab,0x8d,0xce,0xb9,0x64,0x8c,0xea,0xbc,0xd8,0xe0,0xa9,0xfc,0x7f,0xcc,0xfe,0x09,0xbf,0x5d,0xd5,0x07 -,0x51,0xe4,0x93,0xd3,0x03,0xcf,0xd4,0x36,0xc9,0x4b,0x63,0xc7,0xa5,0xf0,0x3d,0xb9,0xf9,0xb8,0x1f,0xde,0x5f,0x57,0x40,0x73,0xf3,0x63,0x56,0xce,0x9e,0xa3,0x6f,0x91 -,0x08,0x4e,0x4d,0xee,0x6b,0x32,0x0d,0xe1,0x3c,0x3e,0x03,0x05,0xef,0xd9,0x44,0xb6,0x1c,0xfe,0xfe,0x2e,0x2a,0xe1,0x36,0xdf,0xbf,0x96,0x5f,0x0b,0xfe,0xe4,0xfe,0x5d -,0xa9,0xe2,0x37,0x1c,0x4f,0x1e,0x47,0x10,0x77,0xfc,0x12,0x8f,0xf5,0x15,0x58,0x03,0xde,0x00,0x91,0x43,0xcb,0xee,0x04,0xbc,0x41,0xcc,0x2c,0x79,0xd8,0x00,0x24,0xee -,0xfa,0xc1,0x4e,0x53,0x90,0x4e,0x54,0xf7,0x47,0x75,0x5f,0x5a,0x03,0xba,0x2c,0x0b,0x7a,0xc3,0xa2,0x65,0x43,0xdc,0x02,0x24,0x6e,0x26,0x09,0xe9,0x01,0xc0,0xff,0xf1 -,0x50,0x80,0x30,0x9f,0xfc,0x21,0x0a,0xcf,0xef,0xdf,0xfe,0x7f,0xff,0xaf,0x60,0xc0,0x9c,0x2c,0x17,0x0a,0x05,0x87,0x21,0x40,0xb0,0x50,0x4e,0x14,0x0b,0x05,0x02,0xc2 -,0x40,0xb0,0x5c,0x2a,0x11,0x0a,0x84,0xc8,0x41,0x15,0xbb,0xf3,0x8a,0xf6,0xee,0x75,0xef,0xc6,0xf5,0x79,0x32,0x6f,0x57,0xbe,0x32,0x5c,0x8e,0x3d,0x0a,0xb7,0xd7,0x37 -,0xe6,0xc4,0x6d,0x87,0x9b,0xbb,0x42,0x7b,0x8f,0xc4,0xfd,0xf4,0xf5,0x23,0xaf,0xcb,0x45,0x1f,0xf3,0xe0,0x62,0xe7,0x82,0xe1,0x09,0x76,0xcd,0xcd,0xfa,0xff,0x27,0x91 -,0x6a,0x79,0xd4,0x27,0x56,0x93,0xc7,0xac,0xa5,0x87,0xf0,0x7f,0x84,0x4f,0x2a,0x5c,0x46,0xd0,0x50,0xdb,0xbf,0x59,0xa3,0xe2,0xd0,0x0e,0x5a,0x18,0x98,0x88,0x87,0xb7 -,0x55,0x39,0xb2,0xe4,0xfb,0xf0,0xea,0x51,0xec,0xf5,0x56,0xc5,0xed,0x0b,0xf6,0x25,0x22,0x1e,0xfe,0x5c,0x5e,0xeb,0xd9,0xbb,0x71,0xcc,0xa8,0x87,0x72,0x3b,0x8f,0x74 -,0x04,0x31,0x6c,0x12,0x8a,0x2d,0x74,0xc6,0x4e,0xe7,0xa3,0x87,0x51,0x96,0x3a,0xda,0xd6,0x82,0x6a,0xc2,0x5a,0x2f,0x3c,0x51,0x14,0xd8,0x9b,0x44,0x53,0x02,0x28,0x93 -,0x20,0x10,0x90,0x4c,0x08,0x80,0xa6,0x40,0xb1,0x1c,0x2c,0x14,0x0b,0x09,0x44,0xc1,0x80,0xb0,0x90,0x2c,0x54,0x12,0x85,0xc2,0xa1,0x70,0x88,0x54,0x26,0x15,0x18,0x85 -,0x42,0x61,0x50,0x89,0x5b,0xbd,0xde,0x67,0x19,0xc6,0xe5,0x63,0x54,0x99,0x2e,0xa3,0x54,0xfd,0x7e,0x6e,0xe9,0xaa,0xdf,0x15,0x7a,0xde,0x87,0x0f,0x7f,0xaf,0x7c,0x55 -,0xf4,0xe1,0xf2,0xf6,0x69,0xbe,0x9f,0x38,0xee,0x4e,0x03,0xfd,0x7c,0x2d,0xe2,0xe7,0xe2,0x83,0xf3,0x5a,0x21,0xef,0x18,0xcb,0x66,0xdd,0x7a,0xb2,0x0f,0x8a,0x72,0x5b -,0xfc,0x50,0x53,0x59,0x10,0xfc,0x33,0xa3,0x96,0x3e,0xab,0xc6,0xb9,0xc0,0xbb,0x96,0xab,0xf8,0x6a,0x2a,0x4c,0x8b,0xb7,0xe1,0xc8,0x22,0xf5,0x7e,0x5f,0x7c,0xe9,0xf2 -,0xaf,0xdd,0xdf,0x3a,0xe4,0xe2,0x54,0x87,0x99,0xd0,0x0e,0x7f,0x11,0xcf,0x8b,0x90,0x1e,0xb6,0xd6,0xf3,0x73,0x72,0xd1,0xc8,0xb8,0xe1,0xc0,0xf2,0x04,0x0e,0xef,0x98 -,0xf7,0x01,0xe0,0x00,0x00,0x01,0xc8,0xf3,0x00,0x1c,0x0f,0x10,0x10,0xc4,0x83,0xcc,0x00,0x00,0x7b,0xbd,0xe0,0x01,0xe0,0x00,0x89,0x61,0x51,0x02,0x09,0x81,0x51,0x03 -,0x50,0x1c,0xff,0xf1,0x50,0x80,0x2f,0x9f,0xfc,0x21,0x0a,0xcf,0xef,0x7f,0xf7,0xff,0xff,0xb0,0x61,0xc0,0x58,0x48,0x16,0x1c,0x85,0x02,0xe1,0x41,0x30,0x50,0x2c,0x14 -,0x0b,0x05,0x04,0xc1,0x50,0xa0,0x54,0x26,0x22,0x09,0x84,0x82,0x22,0x30,0x88,0x48,0x22,0x13,0x08,0x84,0xc2,0x23,0x32,0x35,0x7f,0x1f,0x9b,0xdd,0xf1,0xb5,0xd5,0x4a -,0xae,0x32,0x2e,0x5f,0x3d,0x76,0xae,0xb9,0x3d,0xb3,0xce,0x7e,0xb0,0x17,0x6e,0xdb,0x3f,0x96,0x3f,0x5b,0x2e,0xfe,0xc5,0xf1,0x64,0xd7,0xea,0x41,0xea,0xf9,0x56,0x76 -,0xdb,0x75,0xce,0x31,0xe4,0x7d,0x08,0x2b,0xc5,0xd1,0x4b,0xc4,0x4f,0xbd,0xde,0x28,0x93,0x96,0xc6,0x7f,0xc1,0xeb,0x68,0x23,0xc5,0x1e,0x0f,0x57,0xf7,0x7e,0xce,0x6e -,0x0d,0xde,0x68,0x84,0xee,0xa2,0xd1,0x28,0x4c,0xa7,0xbb,0xf4,0x08,0xdd,0xcf,0x2f,0x98,0x60,0xdc,0x51,0x8b,0xf1,0xde,0xda,0x59,0x9e,0x7f,0xb8,0xfe,0x5f,0xae,0x0b -,0x53,0x99,0xdc,0xc1,0x52,0xee,0x0f,0x71,0x31,0xe7,0xdc,0x62,0x40,0xa7,0xf3,0xbf,0x12,0x91,0xa0,0xdb,0x4e,0x30,0xf1,0x13,0xf7,0xef,0x70,0x89,0x3d,0xb3,0xc5,0x18 -,0x4e,0xf4,0xc0,0xc9,0x64,0x11,0xb2,0xd0,0x99,0x43,0xd6,0x39,0x82,0x11,0xf7,0x45,0x00,0x52,0xc5,0xe0,0x02,0x20,0x4d,0xa8,0x58,0x4e,0x14,0x0c,0x09,0x8e,0x81,0x30 -,0xa0,0x58,0xc8,0x15,0x11,0x84,0x42,0xa2,0x12,0x18,0x84,0xef,0xe9,0x7b,0xbc,0x7d,0xfe,0x7f,0x7f,0xce,0xf8,0xaa,0xb5,0x25,0x45,0x75,0x73,0xce,0xf7,0xe6,0x63,0x7b -,0xe2,0xf8,0x4a,0xf2,0x3a,0x17,0xe9,0xa7,0x47,0x75,0x3f,0xd4,0x74,0x43,0x3e,0xc7,0xe3,0xf7,0xf5,0xb5,0x5d,0xff,0xb1,0x15,0x5a,0x2c,0x6f,0xa0,0x5b,0x77,0x52,0xf1 -,0xe6,0x9a,0x07,0xfd,0xff,0xad,0xfd,0x77,0x40,0xdd,0x65,0xed,0x5a,0xa8,0x3e,0xab,0x86,0x1d,0x07,0xbd,0xe1,0xac,0xd8,0x41,0xc5,0xe2,0xb1,0x24,0xf7,0xa0,0x6b,0xa8 -,0x24,0xde,0x67,0x10,0x77,0xcf,0xfe,0xd7,0x4b,0xfe,0x7e,0x0e,0xc0,0xf9,0x94,0x16,0x75,0xf8,0x83,0xbf,0xef,0x90,0x8c,0xa0,0xa0,0x0f,0x10,0x0e,0x67,0x80,0x28,0x12 -,0xb5,0x42,0x79,0x13,0xb8,0x02,0x54,0x05,0xae,0x40,0x57,0xbd,0x58,0x29,0x73,0xd7,0x08,0x54,0x88,0xb9,0x50,0x9d,0xc2,0xe0,0x09,0x00,0x90,0x12,0x03,0x80,0xff,0xf1 -,0x50,0x80,0x2e,0x7f,0xfc,0x21,0x0a,0xcf,0xef,0xaf,0xef,0xff,0xec,0xae,0x70,0xc0,0x58,0x30,0x27,0x0a,0x04,0xc2,0x81,0x81,0x20,0xd8,0x48,0x26,0x12,0x05,0x84,0x81 -,0x22,0x28,0x45,0x06,0x31,0x1b,0xb6,0x95,0xe7,0x8f,0xb7,0x5d,0xf1,0x78,0xab,0xa1,0xad,0xea,0xb8,0xda,0xf1,0x74,0xba,0xbb,0xba,0xe7,0xfe,0x78,0x0f,0x4d,0x83,0xf0 -,0xf3,0x38,0xf5,0x59,0xe1,0xef,0x67,0x7e,0xfe,0x2f,0xf0,0x8f,0xb1,0xe0,0xb0,0x5b,0xbb,0x4e,0x5d,0xdc,0x6c,0x56,0xff,0x1b,0xf0,0xd0,0x79,0x69,0x13,0x11,0xa0,0xe3 -,0xe4,0xfb,0xd0,0x6c,0x91,0xc4,0x5b,0xb4,0x48,0xcf,0x4b,0x79,0x64,0xb9,0x9c,0xe6,0x28,0x68,0xa7,0xc6,0x60,0x45,0xb1,0x73,0xd0,0x2b,0xc5,0x29,0xa3,0x8d,0xac,0x32 -,0x30,0x68,0x5e,0xa3,0xc1,0x09,0xf8,0xa5,0x28,0x86,0x62,0x9b,0x00,0xd2,0x6b,0xb8,0x6b,0xd3,0x93,0x29,0x4a,0x20,0x66,0xc3,0x90,0xb5,0x18,0x51,0x84,0xfd,0xca,0xe7 -,0x95,0x81,0x3b,0x77,0xd8,0x1f,0xa4,0xb0,0x21,0xd1,0x10,0x1d,0x4e,0x2f,0x3b,0x4c,0xa0,0x77,0xc1,0x07,0x78,0x0e,0xf1,0x5c,0x48,0x05,0x80,0x54,0x20,0x58,0x28,0x16 -,0x1b,0x85,0x88,0xe1,0x80,0xb0,0xd0,0x2c,0x35,0x0b,0x09,0x44,0x81,0x50,0x98,0x44,0x26,0x35,0x09,0x85,0x42,0x61,0x10,0x98,0x44,0xac,0xc9,0xc7,0x39,0xe7,0x9f,0xbf -,0xda,0x64,0xad,0x55,0xe1,0x17,0x6b,0xd6,0xb3,0x77,0xac,0xe3,0x7c,0xf1,0xaf,0x3f,0x77,0x03,0xf3,0xfa,0xed,0xfe,0x85,0xee,0xd2,0xbd,0xdd,0x09,0xee,0x0f,0xdf,0xb2 -,0x0f,0x67,0x62,0xd7,0x6b,0x52,0x3d,0x59,0x65,0xfe,0xb7,0xb5,0x9c,0xb7,0x84,0xd4,0x6b,0xae,0x8d,0x4d,0xf6,0x7d,0x7c,0x9a,0x92,0xc6,0x0e,0x21,0xc9,0x9c,0xf0,0xed -,0xd9,0xc4,0xd9,0xe1,0x7e,0x33,0xc2,0xfb,0x04,0x25,0x14,0xd6,0x78,0xf5,0xd1,0x40,0x80,0x41,0xf0,0xe5,0x6e,0xca,0xd4,0x38,0xaa,0x1f,0x03,0x9f,0xe3,0x85,0x5a,0x35 -,0x2a,0xac,0x5e,0xbc,0x47,0xac,0x1f,0xfa,0x18,0x4c,0xdd,0x2e,0x51,0x72,0x7e,0xe5,0xbb,0xe4,0xcf,0xdf,0x3b,0xe3,0xba,0x00,0x3c,0x40,0x3d,0xc1,0x60,0x00,0xf2,0x00 -,0x43,0xb9,0x01,0x1a,0x4e,0xa7,0x78,0xf7,0x4a,0x02,0xa0,0x4c,0xa8,0x04,0xc0,0xa8,0x0e,0xff,0xf1,0x50,0x80,0x30,0x5f,0xfc,0x21,0x0a,0xcf,0xff,0xfe,0xbd,0xff,0x3c -,0xaf,0x82,0x30,0x60,0x2a,0x16,0x12,0x05,0x42,0xc1,0x40,0xb0,0x90,0x2c,0x14,0x0a,0x85,0x06,0x42,0x40,0x90,0xcc,0x6a,0x23,0x08,0x84,0xc2,0x27,0x72,0xeb,0xc5,0xdf -,0x9f,0x1e,0xdc,0xae,0xb1,0x2a,0x4c,0xb4,0xbc,0xba,0xea,0xbc,0xd3,0xbf,0xbf,0xad,0xe6,0xaa,0x7f,0x88,0x15,0xc9,0xf1,0x55,0xea,0xc9,0x1e,0x9b,0xe3,0xb7,0xf0,0x79 -,0xeb,0xab,0x5f,0x71,0xe9,0x4f,0xaa,0x55,0x41,0xaf,0x0d,0xd3,0xcf,0xbd,0x17,0x5f,0x03,0xa1,0xbe,0x09,0x13,0x1f,0x12,0xd0,0x5f,0x84,0x4d,0xde,0xf4,0xcb,0xb3,0xb6 -,0x25,0xac,0xbe,0x07,0xdd,0xf9,0x1c,0xdb,0xa9,0x22,0xbf,0xee,0x78,0x9b,0xd9,0xe8,0xde,0x5f,0x2f,0x72,0x19,0xf0,0xa9,0xdb,0xd1,0x85,0xad,0x44,0x11,0xe4,0x27,0xf8 -,0x46,0x7e,0xc3,0xa3,0x49,0x58,0xa3,0xde,0xbb,0xea,0x16,0xbc,0x4f,0x5c,0x9d,0x03,0xcc,0x00,0x00,0x00,0x78,0x8c,0xde,0xc9,0x09,0x86,0x59,0x80,0x7f,0xe9,0x17,0xa2 -,0x45,0x13,0x0b,0xce,0x70,0x02,0xe4,0x11,0x4e,0x94,0x5e,0x63,0x8a,0xe6,0xe4,0x40,0x52,0x31,0x60,0x2e,0x15,0x0b,0x05,0x03,0x01,0x62,0x20,0x58,0x2e,0x16,0x0a,0x05 -,0x82,0x81,0x50,0xa0,0x54,0x28,0x15,0x08,0x84,0xc2,0xa2,0x70,0x88,0x4c,0x22,0x15,0x28,0x8d,0xef,0xc6,0xf8,0xe6,0x6b,0x7d,0x63,0x64,0xcb,0x54,0x92,0xe6,0xf8,0xfc -,0x7b,0xd5,0xcf,0x8f,0xb7,0x9f,0x5a,0xe0,0xfb,0xdd,0x02,0xfd,0x6f,0xdb,0xf8,0xaf,0x2e,0x9a,0x36,0x74,0x4c,0xf0,0x1f,0x4f,0x09,0xfe,0xbb,0xab,0x6d,0xc1,0x55,0xaf -,0xf5,0x84,0xdf,0xa1,0xf3,0x94,0x96,0x70,0x4d,0x25,0xff,0x5e,0xc7,0x6f,0x7f,0x78,0x43,0x67,0x54,0xf1,0xea,0x3d,0x74,0x06,0xaf,0xea,0x5f,0xde,0xf2,0xb9,0x71,0x7b -,0x29,0x3f,0xb6,0x68,0xef,0xf8,0x68,0x1b,0xe1,0x4e,0x4e,0x8e,0x5b,0xaf,0xfb,0x88,0x2d,0xe7,0xa3,0x54,0xea,0x73,0x0f,0xd1,0x3a,0x03,0x2e,0x61,0xce,0x5c,0x78,0x44 -,0x47,0x07,0x68,0xf2,0x86,0x08,0x8f,0x75,0xee,0x02,0xc7,0x98,0x1e,0x7e,0x21,0xc0,0x1c,0x6c,0x1e,0x70,0x09,0x00,0xb5,0x40,0x3b,0xbd,0xf9,0x02,0x2a,0x40,0x03,0x8f -,0x98,0x0f,0x00,0x2c,0x03,0xc8,0x00,0x3c,0xc0,0x00,0x00,0x3c,0x80,0xbc,0xee,0x05,0xc2,0x80,0x38,0xff,0xf1,0x50,0x80,0x2e,0xdf,0xfc,0x21,0x2a,0xcf,0xff,0x7f,0xff -,0xff,0xfd,0xb0,0x70,0xc0,0x98,0x30,0x24,0x23,0x05,0x08,0xc1,0x40,0xb0,0x50,0xa4,0x25,0x09,0x08,0xc2,0x21,0x30,0x88,0x4c,0x42,0x33,0x08,0x95,0x93,0xaf,0x57,0xc6 -,0x55,0x8b,0xaa,0x82,0x49,0x57,0x7b,0xbf,0x3c,0xf1,0x97,0x55,0x37,0xd7,0x3c,0x6f,0xf7,0xe8,0x57,0xda,0xf1,0x52,0xd2,0x1b,0xc7,0x85,0x76,0x93,0x86,0x5f,0xeb,0xbf -,0x2e,0xf8,0xe6,0xd1,0xe7,0x98,0x0f,0xf8,0xfd,0x8f,0xe2,0xbf,0xb3,0x7b,0xe6,0xfe,0x78,0x46,0xd2,0x48,0xe7,0x3b,0xc3,0xf1,0x26,0xa1,0x3c,0x2f,0x86,0x53,0xf2,0x51 -,0xfb,0xc4,0x75,0xfb,0x7a,0xbc,0x3a,0xd5,0x83,0xf7,0x2b,0xdd,0xfc,0x3a,0xdb,0xcb,0xb3,0xc5,0xee,0xbc,0x94,0xcf,0x3b,0x25,0x84,0xac,0xcd,0x04,0x1b,0x73,0x49,0xda -,0x81,0xb0,0xfd,0xc2,0x56,0x57,0xf8,0x4f,0x00,0x59,0x3f,0x72,0x20,0x5b,0xb0,0x80,0x20,0xee,0x03,0xc2,0x31,0x96,0x15,0xf1,0xe6,0x0a,0xa7,0x60,0xa9,0xdc,0x09,0xa9 -,0x6e,0xc0,0x49,0x80,0x2a,0x89,0x42,0x40,0x12,0x02,0x69,0xc2,0xc2,0x80,0xb0,0x90,0x2c,0x24,0x0b,0x06,0x02,0xc8,0x40,0xa8,0x50,0x4a,0x14,0x0a,0x84,0xc2,0x21,0x30 -,0xa8,0x4c,0x22,0x33,0x10,0x88,0xc4,0x22,0x7f,0x78,0xba,0xcf,0x6f,0x1c,0x56,0xee,0xf0,0xab,0xdd,0xde,0x4e,0x2a,0x71,0xed,0xdb,0x9f,0xfd,0xbf,0x8f,0xce,0xb5,0xf1 -,0x7e,0xa7,0xef,0xe0,0x3c,0x92,0x79,0x2e,0xf0,0xd4,0xa1,0x7f,0xdf,0xbe,0x7f,0xe7,0xb0,0xe7,0xe4,0x1e,0x3f,0xfa,0x91,0xd4,0x6f,0xda,0x68,0xa5,0x2d,0xf1,0x47,0x64 -,0x1f,0xbe,0x58,0x5d,0xab,0x2b,0xa5,0x7b,0xa9,0x53,0xcf,0xd1,0x84,0x83,0x97,0xc6,0xa0,0xbf,0x1b,0xad,0xe9,0x68,0xf2,0x2f,0xbe,0xf7,0x2b,0xf8,0x6e,0x7e,0x95,0x6d -,0x40,0xfa,0x17,0xa8,0x83,0x5d,0x95,0xcb,0x90,0x47,0x83,0x83,0x91,0x16,0x31,0x59,0xee,0x12,0xa3,0x72,0x9a,0xb9,0x57,0x52,0x1a,0x9d,0xcf,0xcb,0x03,0x8c,0xa4,0x1e -,0xe7,0x78,0x5c,0x71,0x39,0x1e,0x00,0x1e,0x95,0xf6,0x67,0x7b,0xbb,0x19,0x44,0x00,0x4e,0xf3,0xc8,0x59,0x91,0xa7,0xce,0xac,0x07,0x70,0x13,0x0b,0x84,0xa8,0x03,0xbe -,0xf7,0x01,0xdf,0x77,0xc3,0x30,0x08,0x00,0xe0,0xff,0xf1,0x50,0x80,0x2d,0x3f,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x55,0x18,0x2d,0x10,0xa9,0x32,0x44,0x49,0x95,0xda,0x5f -,0x15,0x7b,0xe3,0xa1,0x27,0xa9,0x3e,0x9a,0x96,0xa6,0xad,0x6b,0xb8,0x5a,0xb0,0xea,0x72,0x10,0x25,0xde,0xea,0x98,0x58,0x60,0x6e,0x30,0x48,0x76,0x8e,0xa3,0x5b,0x83 -,0x5d,0x1e,0xae,0xa7,0xd1,0xc3,0xaa,0xea,0xf2,0xa2,0x62,0x93,0x2c,0x28,0xa3,0x09,0xf1,0xca,0x8c,0x28,0xa0,0x64,0xd0,0x11,0x42,0x2c,0xda,0x4d,0xd0,0x4f,0x39,0x56 -,0xc9,0x02,0x89,0x6a,0x60,0x88,0x62,0x6a,0xa0,0x00,0x49,0x9b,0x74,0xd9,0x26,0x01,0x52,0x50,0x46,0x06,0x8d,0x25,0xa9,0xc4,0xa2,0x43,0x4a,0xf9,0xca,0x7e,0xa4,0xec -,0x01,0xaa,0xdb,0xe1,0x18,0x94,0xac,0x22,0xf9,0x18,0x6d,0xdf,0x13,0xbf,0x39,0xb5,0x52,0x8d,0xec,0x13,0x96,0x09,0xfc,0x92,0xdd,0xc8,0x2e,0xc9,0xf6,0xcb,0x31,0x04 -,0x4a,0xfb,0x02,0x58,0x3d,0x7e,0xf4,0xd2,0xc1,0x48,0xb6,0x79,0x8c,0x8a,0x20,0xd1,0x04,0x20,0x99,0xe2,0x23,0x14,0xc0,0x28,0x28,0x43,0xdc,0x14,0x00,0x28,0x61,0x34 -,0x52,0x84,0xc8,0xb4,0xa4,0x9c,0x6b,0x5c,0xf5,0xa1,0x67,0xe1,0xdc,0x5d,0x4a,0xe4,0x7e,0x85,0xd9,0xc1,0x06,0x91,0x39,0xcd,0x67,0xbc,0x55,0x45,0x21,0xe3,0x51,0xca -,0xe9,0xcf,0x85,0xbd,0xb0,0x29,0x91,0xa7,0xf5,0xaf,0xff,0x4e,0xf3,0x6c,0xfc,0xf8,0xf0,0xa3,0xfd,0xe9,0xaf,0x0c,0xe9,0xed,0xc7,0x6e,0x5e,0xdb,0x75,0x6b,0xf1,0xd9 -,0x37,0x87,0x77,0x1c,0xeb,0xef,0x1a,0xb2,0xf5,0x77,0x77,0x97,0xd2,0x6f,0x34,0x69,0xaf,0x57,0x96,0xc2,0x0b,0x2a,0x93,0x7d,0x72,0x51,0xed,0x23,0x0e,0x56,0x50,0xe7 -,0x28,0xcb,0xa9,0x10,0x3a,0xb0,0xf2,0x4f,0x79,0x87,0x0d,0xe2,0x7a,0x32,0x77,0x51,0xeb,0xb3,0xee,0xd1,0xae,0xf8,0xd5,0x75,0x55,0xe3,0x96,0x39,0x62,0xc6,0x32,0x45 -,0x58,0x75,0x6f,0x0d,0x3d,0x3d,0xfb,0x19,0xa5,0x98,0x00,0x21,0xcc,0x53,0xfe,0x37,0xd7,0xf2,0x6b,0x18,0xdb,0x54,0x6b,0xa6,0x28,0xc6,0x5b,0xa3,0x8b,0xd9,0x19,0x6c -,0x40,0x89,0x10,0x66,0x20,0x60,0x26,0x97,0xa8,0x98,0xb8,0x00,0x2b,0x00,0x28,0x97,0x7c,0xee,0xff,0xf1,0x50,0x80,0x31,0x3f,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x54,0x26 -,0x8a,0x8d,0x09,0x32,0x69,0x24,0x9a,0x4e,0x06,0x71,0x7c,0xcc,0xdb,0xa0,0xf5,0x31,0xda,0x95,0xea,0x5c,0x70,0x38,0xb5,0xf9,0x99,0x34,0xda,0x4a,0xa6,0x55,0x55,0x3c -,0x47,0xb5,0xfb,0xd5,0x92,0xb3,0xb7,0xca,0x29,0xaf,0x07,0x90,0xbe,0x2f,0xf6,0xc4,0xfa,0xb0,0x93,0xac,0x2e,0x83,0xad,0xc6,0x2e,0xdd,0xb3,0xbb,0x31,0xc7,0x35,0xaa -,0x80,0x1b,0x15,0xe3,0x0d,0x74,0xdd,0x52,0xb8,0x90,0x5e,0x52,0x9c,0x4c,0x48,0x2d,0x2b,0xd0,0x85,0x1e,0x8e,0x38,0x6d,0x83,0xb0,0x67,0x96,0x9b,0x60,0xb3,0x64,0x84 -,0x35,0x58,0xd7,0x8e,0xfe,0xff,0x07,0x67,0xc3,0xbe,0x70,0xae,0xe9,0x21,0x2b,0xc8,0x82,0xa0,0xf4,0x67,0xa6,0x7d,0xb7,0xb8,0xb8,0x88,0x5a,0x13,0xbc,0xb4,0x21,0x28 -,0x59,0xaf,0x47,0xfd,0xfe,0xd5,0xe5,0xb5,0xe6,0xbb,0x2b,0xb5,0x70,0x25,0xb4,0x9c,0x2b,0x38,0xd1,0x4a,0xf7,0xa9,0x4d,0x90,0xa6,0x0a,0x30,0x97,0x22,0xa5,0xc4,0xa2 -,0x74,0x9a,0x40,0x16,0x14,0x14,0x1b,0x81,0x6a,0x8f,0x40,0x50,0xc3,0x65,0x05,0x92,0x21,0x48,0x24,0x92,0x5d,0x8c,0xcc,0x69,0xd4,0x36,0xdd,0x5e,0xc6,0x5f,0x1e,0xf1 -,0x34,0x50,0xe7,0xb3,0xa6,0xbf,0xa8,0x2b,0x25,0x88,0x27,0x5c,0xc7,0xb7,0xbe,0x92,0x54,0x2f,0x41,0x86,0x26,0x35,0x0c,0x69,0xec,0x3f,0x92,0xb9,0x98,0x50,0x26,0x2e -,0x89,0x7f,0xb9,0xff,0xca,0xaf,0xd0,0x3d,0x99,0xdb,0xee,0xd5,0x5d,0x7a,0xaf,0x8b,0xbb,0xb7,0x58,0x3c,0x79,0xe3,0x26,0xbc,0xf2,0xff,0xc7,0x45,0x38,0x10,0x3a,0x0f -,0x8c,0x22,0x4e,0x18,0x8a,0x08,0x51,0x45,0xf3,0xa9,0x2c,0x94,0xbc,0x78,0x52,0xbc,0xd4,0x08,0x44,0x12,0x36,0x20,0x09,0xd6,0x10,0xf8,0xb9,0x94,0xca,0xaf,0x5c,0xbb -,0xc6,0x33,0x9b,0x2f,0x1b,0x10,0x84,0xc0,0xc4,0x96,0x80,0x03,0x32,0x07,0x0b,0x2c,0x25,0xd0,0x4a,0x6a,0xd4,0x5f,0x24,0xd7,0xd6,0x70,0xad,0xa8,0x97,0x1f,0xae,0x6c -,0x51,0xc5,0x1f,0xff,0x1a,0x50,0xfa,0x67,0x68,0xea,0x64,0x3e,0xfb,0x54,0xe1,0xed,0x1e,0x13,0x6c,0x5a,0xeb,0x47,0x63,0x07,0xdd,0x83,0x94,0xce,0x49,0x8a,0x97,0xcf -,0xda,0xb3,0x49,0x53,0xe2,0xae,0x35,0x7d,0x4b,0xfb,0x27,0x7b,0x32,0x99,0x41,0x03,0xf7,0x89,0xd7,0x01,0xe8,0x1b,0xb3,0x44,0x89,0x9e,0x07,0xff,0xf1,0x50,0x80,0x2f -,0x9f,0xfc,0x21,0x6a,0xcf,0xfb,0xf7,0xff,0xff,0xff,0xb5,0x80,0xb1,0x50,0x2e,0x16,0x2a,0x09,0x82,0x83,0x60,0x90,0x50,0x4a,0x14,0x11,0x08,0x48,0x64,0x13,0xbe,0x3d -,0xf8,0xcd,0x54,0xcb,0xcb,0xdf,0x0a,0x95,0x25,0x49,0x7c,0xdd,0xd5,0x69,0x2e,0x66,0xb6,0xa9,0x7e,0xd6,0x11,0xec,0xbf,0x8e,0xef,0x56,0x8f,0x89,0xfe,0x06,0x35,0x7f -,0xb5,0xd8,0x6a,0xb5,0xfd,0xff,0xc3,0x25,0xd2,0x84,0x6a,0x4a,0xff,0x9f,0x88,0xbf,0x88,0xee,0x61,0xb6,0xf3,0x64,0xef,0x36,0xee,0x31,0xa3,0xb4,0xd1,0xae,0x0c,0x7c -,0x72,0x21,0x7b,0xde,0xf9,0x7e,0xe3,0x15,0xaa,0x58,0xfb,0x3d,0xd6,0x5b,0xa8,0x79,0x15,0x4e,0x40,0x1d,0xdf,0x85,0x68,0xf1,0x8a,0x37,0xea,0xc4,0x43,0x47,0x70,0xa5 -,0x6c,0x8c,0xe1,0x93,0x34,0xd6,0xd9,0x35,0x3f,0x55,0xad,0x8e,0xb3,0x91,0x5b,0xaf,0xb5,0xa1,0xa6,0x2a,0x97,0x8c,0xc3,0xd7,0x24,0x93,0xcc,0x07,0xb6,0x10,0x04,0xbd -,0x70,0x90,0x6d,0x50,0x5d,0x71,0x51,0x69,0xa3,0x88,0x0b,0xbf,0x70,0x13,0x09,0x80,0xa3,0x50,0xa0,0xd8,0x30,0x16,0x0a,0x05,0x86,0x82,0x61,0x98,0x58,0xa8,0x13,0x0a -,0x90,0xc2,0xa2,0x30,0x88,0x4c,0x22,0x13,0x28,0x8d,0xe8,0xd7,0x77,0xfb,0xff,0x1e,0x7b,0x44,0xc5,0xe2,0xd5,0x22,0x45,0x4b,0xd6,0xf8,0x64,0xba,0xdf,0x9f,0x21,0xee -,0xfd,0x67,0xff,0x2f,0xff,0xfe,0x5f,0x76,0x68,0x6a,0xd3,0xf2,0x5d,0x37,0x71,0xd9,0xff,0xb0,0x02,0xff,0xbb,0xe3,0x3e,0xbf,0x86,0xb3,0xf3,0xbf,0x27,0x0e,0x1a,0x34 -,0xd6,0x5f,0xac,0xff,0x16,0x70,0xf3,0xf9,0x8b,0xb9,0x2c,0x35,0x99,0x47,0x3d,0x1e,0x05,0xf4,0x9c,0x22,0x6a,0x8a,0xab,0x6d,0xe2,0xf1,0x7f,0x1f,0xfa,0x1f,0xdd,0xbc -,0x2f,0xf1,0x3f,0x55,0xf9,0x3e,0xcb,0xcf,0xfd,0x55,0xbe,0x6e,0x8b,0x3c,0xc3,0x9b,0x8f,0x1e,0x2e,0x79,0x87,0x03,0xbf,0xb9,0x17,0xcc,0x92,0xf8,0x76,0x9d,0x28,0xeb -,0x69,0xfe,0x19,0xfb,0xa7,0x16,0x98,0x8e,0xb4,0x22,0xa0,0x5d,0xdc,0x51,0x53,0xc5,0x10,0x56,0x9f,0xff,0xe0,0x29,0xdd,0x88,0xaa,0x17,0xef,0xbb,0xce,0xf8,0xe5,0x8c -,0x06,0x9b,0xbe,0x07,0xbb,0x1a,0x0f,0x77,0x18,0x20,0xf5,0xc0,0xb0,0x7e,0xe1,0x78,0xde,0x2d,0x60,0x10,0x85,0x66,0x07,0xff,0xf1,0x50,0x80,0x2f,0x3f,0xfc,0x21,0x0a -,0xcf,0xdf,0xff,0xff,0xff,0x7f,0xb3,0x81,0x31,0x10,0x2c,0x38,0x0b,0x86,0x02,0x82,0x60,0xa0,0x98,0x28,0x12,0x0a,0x85,0x06,0x43,0x17,0xb3,0xce,0x17,0xbe,0x2b,0x26 -,0x71,0x55,0xd6,0x55,0x4b,0xc9,0x52,0x2a,0x4b,0xbc,0xaf,0xbf,0xbc,0x89,0xe7,0x81,0xc8,0x37,0x8a,0x5c,0x6d,0xd9,0xbf,0xd2,0x7c,0x53,0xfd,0x8d,0xaf,0xa9,0x5b,0xcf -,0xb2,0x52,0xc7,0xa7,0x4f,0x39,0xc5,0xe4,0x5f,0xe6,0xfe,0x2e,0xba,0x07,0xdb,0x90,0xb6,0x5c,0xdb,0xc8,0x15,0xba,0x6b,0xd8,0x95,0xaa,0x73,0x60,0x1a,0x5e,0xdc,0xa9 -,0xf7,0xd9,0x1b,0xc5,0x5f,0xf2,0x97,0xdb,0xba,0x1e,0x5f,0xa1,0x34,0xac,0xc1,0x69,0x15,0xee,0x6c,0x8a,0x7f,0x11,0x2b,0x3b,0x50,0x5f,0x33,0x5a,0x02,0x35,0x44,0xc5 -,0x7f,0xc9,0x5b,0xc2,0xd1,0x9e,0x0d,0x64,0xef,0x3e,0x0a,0xba,0xe3,0x3a,0x67,0xbc,0xd2,0x21,0xad,0x76,0xb1,0x44,0x36,0xb5,0xf3,0xe7,0x44,0x4b,0x91,0x01,0x08,0x52 -,0x3c,0x01,0x48,0xcd,0x0b,0xd8,0x8c,0x15,0x50,0x92,0x95,0x4c,0x00,0xb4,0x40,0x50,0xa0,0x58,0xc8,0x26,0x13,0x85,0x8a,0x81,0x61,0x40,0x54,0x26,0x15,0x30,0x84,0xc2 -,0xa1,0x32,0x08,0x8c,0x22,0x47,0xcf,0x5e,0x2e,0xa2,0x52,0x8e,0xb9,0xe3,0x9a,0x45,0xc0,0xe9,0x5c,0xeb,0x2e,0xaa,0xfe,0x3b,0xf6,0xdf,0x03,0x4c,0x49,0xcf,0x8d,0x1c -,0xbd,0xfa,0xb6,0xf9,0x9a,0xfe,0x3f,0x04,0xf8,0x27,0x73,0x7e,0x27,0xc8,0xf5,0x29,0xea,0xaa,0xb7,0xed,0x44,0xb7,0x0f,0xc3,0xd4,0x7b,0x0b,0x3f,0x8b,0xa5,0x80,0x3a -,0x7f,0x77,0xeb,0xff,0x4f,0x5e,0x77,0xe3,0x17,0x87,0x77,0xb7,0x21,0xbc,0x68,0x3f,0x9d,0x02,0xfe,0x0e,0x1d,0xff,0x33,0xa7,0xf7,0x7f,0x55,0xef,0x4f,0x97,0xd9,0xe4 -,0x05,0x52,0xaf,0xc5,0x71,0xc3,0x9f,0x3f,0x9b,0xe6,0x98,0x8b,0x01,0xc4,0xf1,0xe7,0xc0,0x75,0x5b,0x3d,0x9c,0xce,0x20,0x07,0xcf,0x89,0xcc,0x85,0xa3,0xc5,0x29,0x88 -,0xbd,0xab,0xdd,0x74,0x69,0xce,0xca,0x62,0x24,0x5f,0x78,0x85,0x55,0x87,0xd7,0x6e,0x93,0x9f,0xaa,0x27,0x07,0xac,0x5a,0xd3,0xef,0x77,0xfb,0xe0,0x6b,0x42,0x12,0x47 -,0xb7,0x44,0x01,0x47,0x74,0x26,0x89,0x38,0x26,0x15,0xb0,0x55,0x42,0x51,0x03,0x80,0xff,0xf1,0x50,0x80,0x31,0x5f,0xfc,0x21,0x0a,0xcf,0xcf,0xfe,0x7f,0xdf,0x7f,0xb2 -,0x63,0x28,0x50,0x26,0x18,0x0b,0x85,0x03,0x01,0x20,0xa0,0x58,0x28,0x32,0x0a,0x11,0xc2,0x44,0x10,0x90,0x44,0x24,0x11,0x53,0x3c,0xf7,0xed,0xeb,0x5e,0x7d,0x7c,0x7d -,0xb5,0xbf,0x2d,0xdb,0x2e,0xea,0x57,0x1b,0x44,0x2a,0xfe,0xb5,0xfa,0x4e,0x32,0xbf,0x5b,0x1f,0x0b,0x32,0xf1,0xe3,0xd7,0x1e,0x89,0x37,0xf1,0xad,0xeb,0xfe,0x87,0xfa -,0xd2,0xba,0x1f,0xb2,0xc7,0x7f,0x31,0xfc,0xb3,0xa0,0xee,0x89,0xf8,0xdf,0xbe,0x5e,0xfd,0x71,0x72,0xde,0x79,0x5f,0xf2,0x27,0xd0,0x6e,0xfa,0x98,0x0b,0x1d,0xff,0x64 -,0x3a,0xe9,0x49,0x7d,0xc1,0x98,0x5b,0xc5,0xec,0x49,0x19,0x96,0x57,0xe9,0x51,0xda,0xc1,0x72,0x84,0xfa,0xe5,0x63,0x8e,0x50,0xfc,0x47,0xa6,0xf6,0x53,0x10,0xb9,0xcb -,0xb0,0x74,0xc1,0x69,0x1f,0x4d,0x1d,0xb3,0x88,0xc0,0x8a,0xd9,0x47,0xa6,0xbf,0x91,0x50,0x1b,0x93,0x86,0x5b,0x46,0xfe,0xd4,0xec,0x27,0x43,0x21,0x50,0x2b,0x32,0x22 -,0x15,0xa3,0xdd,0x84,0x0c,0xe2,0x41,0x02,0xb1,0x1a,0x57,0x5c,0x0a,0x8a,0x00,0x9d,0x20,0xa0,0x98,0x2e,0x16,0x0a,0x09,0x88,0xa1,0x41,0x30,0x50,0x2c,0x14,0x0c,0x05 -,0x82,0x84,0x50,0xb8,0x4c,0x4a,0x13,0x0a,0x8c,0x42,0xa1,0x30,0x88,0x4c,0x22,0x47,0xed,0xa7,0x3b,0xbe,0xb2,0x66,0x95,0x55,0x51,0x5a,0x13,0x46,0xbd,0x71,0x3a,0xef -,0xdb,0xed,0xd7,0x9e,0x77,0xf1,0x5c,0x0e,0x3f,0xf8,0x7e,0x33,0xb7,0x67,0xb5,0x1d,0xbd,0xdf,0xd1,0xbe,0x19,0xc6,0xdb,0x7c,0x3d,0x4d,0x1c,0x38,0x4f,0x6c,0xf7,0xd7 -,0xe6,0xfe,0x27,0xab,0xeb,0x7f,0xfa,0xf2,0x9e,0xf5,0xfa,0xcf,0xf1,0x30,0xe1,0x44,0xd6,0x51,0xd3,0x7f,0x39,0xb7,0xcd,0xd6,0xc5,0x69,0x47,0xfd,0x02,0xd7,0x80,0x7f -,0xb7,0xfe,0xe7,0xc7,0xfd,0xdf,0xd2,0x5e,0x7f,0xed,0x7f,0x9a,0x7f,0x77,0xdd,0xfe,0xb5,0x8f,0x6b,0xec,0xcf,0xab,0xc8,0x2f,0x82,0x52,0x02,0xf8,0x1e,0x05,0xbf,0xc2 -,0xff,0xbd,0x28,0xfd,0xa7,0x70,0xba,0xce,0x2a,0xe5,0x8e,0x84,0x5b,0x44,0x22,0x83,0xc6,0x71,0x9f,0x48,0x05,0xcf,0x2e,0x80,0x01,0xe3,0x09,0x45,0x3c,0xe3,0x85,0x8a -,0xca,0xc2,0xe2,0x05,0x13,0xcc,0x42,0xcb,0x71,0x22,0x3d,0xd8,0x51,0x70,0x5c,0x77,0x93,0x26,0x73,0x2d,0x70,0x05,0x91,0x0d,0xc0,0x70,0xff,0xf1,0x50,0x80,0x2d,0xdf -,0xfc,0x21,0x0a,0xcf,0xe5,0xdb,0xfd,0x7f,0xfc,0xb3,0x60,0xb8,0x58,0x88,0x36,0x0b,0x86,0x03,0x21,0x44,0x10,0x50,0x64,0x31,0x39,0x84,0x4e,0xad,0x67,0xdf,0xd6,0xb5 -,0xef,0xfb,0xfe,0x93,0x7d,0x5e,0xd2,0x4c,0xa9,0x79,0x17,0x1a,0xca,0xbb,0xbd,0xc2,0x7b,0x79,0x0f,0xf8,0xf5,0xea,0x3d,0xd4,0xfb,0xfe,0xa6,0xfa,0x38,0xf6,0x98,0xfc -,0xc6,0x1e,0x6f,0xed,0xd7,0x59,0x20,0x5e,0x85,0x7f,0x37,0x8f,0xde,0x4b,0xb7,0xcf,0x79,0x64,0x3e,0x42,0x04,0x3a,0xb4,0x18,0x24,0xce,0xdb,0xd8,0xe2,0x43,0x6b,0x83 -,0x83,0xe8,0xc3,0xfc,0xed,0xea,0x46,0xb8,0x2b,0x18,0xa2,0x53,0x8e,0x27,0x41,0xd2,0x69,0x55,0x56,0x5d,0x16,0x79,0xf9,0xdb,0xab,0xa9,0x69,0x98,0x0f,0xf6,0x44,0x93 -,0x1f,0xc7,0x46,0x8c,0xc5,0xf9,0xca,0x6d,0x71,0x68,0xea,0x5a,0x04,0x62,0xb3,0x2d,0x0a,0x4b,0x08,0xde,0xb4,0xc5,0xa6,0x55,0xdc,0xb2,0x95,0x97,0xbe,0x08,0x17,0x28 -,0x66,0x26,0x09,0x8b,0x8b,0x8a,0x55,0x30,0x20,0x02,0xa0,0x51,0x10,0x50,0x4c,0x38,0x0b,0x09,0x04,0xe1,0x60,0xa0,0x98,0x68,0x65,0x0a,0x05,0x42,0xc1,0x30,0xa8,0x4c -,0x22,0x13,0x10,0x84,0xc6,0x25,0x6f,0xdb,0xfa,0xb5,0xcc,0xe3,0x7e,0x7b,0xba,0x8d,0xf0,0xa2,0xae,0x67,0x1c,0xfc,0x64,0xe7,0x5a,0xe7,0x8b,0x75,0xbe,0x9c,0x0d,0x9d -,0xcf,0xc1,0x7b,0x29,0xf4,0xdb,0xd8,0x49,0xe9,0x57,0xb1,0x78,0x7f,0xd1,0xe2,0x7f,0xf4,0xe6,0xc5,0xde,0x54,0xbc,0x57,0xfd,0x3a,0x5b,0x74,0xfb,0x23,0xc8,0xdd,0xfa -,0xa8,0xfd,0xce,0xcf,0xa8,0xc1,0xa6,0xb2,0xff,0x2f,0x6c,0xcf,0xce,0x3d,0x60,0x5c,0xbb,0xfb,0x43,0xff,0xcd,0xfd,0x9c,0x79,0xae,0xfb,0x6f,0x21,0xcb,0xfe,0x8f,0x5f -,0x29,0xa9,0xc4,0x72,0xae,0x11,0xcd,0xe0,0x49,0xc7,0xaf,0x89,0xef,0x40,0x38,0x76,0x78,0x99,0x00,0x25,0x63,0x86,0xe6,0xe4,0x63,0xee,0x1e,0xb8,0x1c,0x15,0xdc,0x80 -,0x9e,0x0f,0x16,0x67,0xad,0xdc,0x23,0x81,0x6b,0x52,0xe1,0xaa,0xef,0x77,0x70,0xbd,0x60,0x7b,0xa8,0x59,0x43,0x3a,0xbe,0xe7,0x7c,0x1e,0xb8,0x0f,0x77,0xdd,0x02,0x00 -,0x49,0x54,0xc4,0x6a,0x00,0x50,0x22,0x07,0xff,0xf1,0x50,0x80,0x30,0x3f,0xfc,0x21,0x0a,0xcf,0xff,0xff,0x5d,0xff,0xfc,0xb1,0x61,0xc0,0x5c,0x2c,0x14,0x0b,0x0e,0x02 -,0xc1,0x81,0x30,0x90,0x2c,0x14,0x32,0x88,0x82,0x21,0x20,0x88,0x4c,0x42,0x23,0x08,0x84,0xc2,0x21,0x30,0x89,0x03,0xf1,0xef,0xac,0xce,0xbc,0x1e,0x79,0x22,0x54,0xab -,0x95,0x78,0x74,0xdd,0x5e,0xfc,0xe7,0x14,0xff,0x4f,0x22,0xdf,0x2f,0x67,0xaf,0xe9,0xd2,0x0d,0x4f,0xaf,0x27,0xa7,0xb4,0x2f,0x66,0xaa,0x39,0xf6,0xf4,0x0c,0xb8,0x2a -,0x3b,0xfa,0x84,0x7c,0xce,0xfe,0x68,0xd6,0x8c,0x85,0xa5,0x6e,0xd3,0x78,0x6c,0x20,0x5e,0x28,0x52,0x12,0x7d,0x82,0xbf,0xfb,0x79,0xf6,0xc0,0x3f,0x50,0x6e,0x63,0x4c -,0xa7,0xb3,0x62,0x10,0x36,0xbf,0x02,0xe2,0x2a,0x06,0x71,0x9d,0x8f,0x19,0x9e,0x15,0x71,0xed,0xc6,0xc4,0x27,0x52,0xc7,0x96,0x77,0x71,0xc9,0xf5,0xee,0xab,0xbd,0xea -,0x9a,0x87,0x90,0x8f,0xa6,0x27,0xe6,0xa4,0x63,0x6e,0xea,0xf1,0x81,0x4a,0x11,0x9c,0x7e,0xc5,0x04,0x7c,0x44,0x77,0x3a,0x9a,0x3a,0x97,0x1d,0xf8,0x46,0xd2,0x4a,0x92 -,0xb4,0x24,0x3e,0xc5,0x61,0xf6,0x54,0x1d,0xf9,0xfb,0xa0,0xc0,0x11,0x20,0xd0,0x02,0xe0,0x54,0x09,0x94,0x0b,0x05,0x02,0xc2,0x70,0xb0,0x50,0x4c,0xe4,0x0a,0x85,0x02 -,0xa2,0x10,0xa8,0x4c,0x2a,0x11,0x0a,0x84,0x42,0xa1,0x13,0xbf,0xb4,0xef,0xeb,0xde,0xfa,0xee,0xea,0xa5,0x6b,0x99,0xaa,0xe7,0x55,0xaa,0x8b,0xd7,0xeb,0xef,0x5b,0xdf -,0xc7,0x1c,0xfc,0x3d,0xbb,0xfd,0x3e,0xf0,0x71,0xcd,0xf2,0x7c,0x9b,0x1e,0xcf,0x6d,0x9d,0xec,0x17,0x57,0xe5,0x3f,0x83,0x6e,0xfe,0xa5,0x3b,0x27,0x6b,0xfc,0x86,0xdd -,0xf6,0xfb,0xc2,0x5e,0x0c,0x13,0x68,0xec,0xab,0x31,0x62,0xd1,0x8f,0xdb,0x30,0x9c,0x0f,0x6a,0x00,0x63,0x34,0x07,0x5f,0x28,0xf5,0xb9,0xf5,0x70,0x02,0x3e,0xb3,0x3a -,0x75,0x92,0x8f,0x29,0x8a,0xc3,0x10,0xf2,0xff,0xcb,0x43,0x3f,0x9d,0xbe,0x2e,0x67,0x18,0x17,0xfd,0x19,0xfd,0xfe,0xe7,0x66,0xa5,0x38,0x97,0xc6,0xb9,0x58,0x78,0x99 -,0x2b,0xc4,0xe6,0x46,0x00,0x1e,0x00,0x0f,0x58,0x77,0x47,0x35,0x82,0x4e,0x32,0x5f,0x64,0x31,0xd0,0xf8,0xf8,0x00,0x00,0x01,0x8c,0x03,0xc4,0x01,0x00,0x50,0x01,0x50 -,0x05,0x05,0x69,0x34,0x00,0xb5,0x05,0x40,0x70,0xff,0xf1,0x50,0x80,0x2c,0x3f,0xfc,0x21,0x0a,0xcf,0xcd,0xfc,0xff,0xff,0xfd,0xae,0x80,0xb8,0x58,0x6a,0x14,0x0b,0x0d -,0xc2,0x81,0x90,0xa1,0x18,0x28,0x15,0x0a,0x14,0x82,0x81,0x20,0x98,0x84,0x26,0x31,0x4b,0x9a,0xbf,0x39,0x27,0xaf,0xc7,0xcd,0x35,0xc7,0x77,0x9d,0x64,0xc8,0x92,0xa5 -,0xcc,0xd4,0xa6,0x4e,0x2a,0x3f,0xcf,0x03,0x0f,0x8b,0xed,0x47,0x1e,0xa7,0xf3,0xf4,0x57,0x6f,0x1a,0x5f,0xbf,0xac,0x6f,0xfc,0xfe,0x7c,0xd4,0xe8,0xef,0xc3,0x5d,0x7a -,0x76,0x1d,0x3f,0x45,0xea,0x7d,0x1d,0x80,0x2c,0x2b,0xd0,0x18,0xab,0x49,0xdb,0xeb,0x45,0xf9,0xa5,0x72,0xc4,0x78,0xef,0xbc,0xfb,0x2d,0x96,0x44,0xa4,0xf3,0xdf,0x81 -,0x7b,0xe2,0xb6,0xf6,0x1b,0x2e,0x57,0x79,0xc9,0xec,0xb1,0x7d,0x93,0x9c,0xcf,0x54,0x49,0x69,0xaf,0x63,0xa1,0xcf,0x26,0x07,0x14,0xaf,0xbb,0x78,0x24,0xef,0x92,0xa4 -,0x58,0x5d,0x92,0xde,0x54,0x3d,0xdc,0x11,0x16,0x2f,0xf5,0x87,0xa2,0x5d,0x21,0x0b,0xc1,0x30,0xd9,0xe0,0x04,0xaf,0x6a,0x56,0x75,0xa0,0x12,0x60,0x00,0xfb,0x04,0xde -,0xf0,0x60,0x01,0x30,0x13,0xaa,0x14,0x0b,0x15,0x06,0xc1,0x80,0xb0,0xdc,0x28,0x26,0x2a,0x09,0x44,0x61,0x10,0xa8,0x4c,0xa2,0x87,0xdb,0x9c,0x94,0xea,0xae,0xb7,0x2b -,0xcf,0x8b,0x65,0x69,0x75,0x25,0xeb,0xf1,0xef,0x94,0x6b,0x8f,0x6d,0x73,0x39,0xcf,0xd4,0x3b,0x3f,0x76,0xfa,0x79,0x6d,0xd9,0xb7,0xd9,0x22,0x75,0xeb,0xed,0x59,0xc0 -,0x73,0xea,0x0b,0x48,0x54,0x1c,0xea,0x2c,0xe1,0x1e,0xc3,0x4e,0xfe,0x06,0x5f,0xf3,0xdc,0x45,0x47,0x8f,0xb5,0x47,0xfd,0x17,0xcc,0x1e,0x23,0x78,0xf4,0x6a,0x67,0x20 -,0xe4,0x52,0x70,0xd9,0x32,0x1c,0xa1,0x9f,0x6a,0x32,0x47,0x0d,0x0e,0x04,0x87,0xe8,0x6e,0x1f,0x7e,0xc7,0x86,0x7c,0xfc,0x14,0xfb,0xbd,0x5c,0xf1,0x64,0xe6,0x6e,0x04 -,0x0f,0x52,0xe0,0xf7,0x7f,0xf5,0x8a,0xf0,0x70,0x00,0x01,0xe0,0x03,0xff,0xee,0x1e,0xe8,0x21,0xdc,0x1e,0xb0,0xee,0x9d,0xd1,0xde,0x01,0xee,0x05,0xe6,0x98,0xb0,0x17 -,0x2a,0x04,0xc0,0x05,0xe6,0x00,0x50,0x16,0x03,0x80,0xff,0xf1,0x50,0x80,0x2f,0x3f,0xfc,0x21,0x0a,0xcf,0xcf,0xe7,0xfe,0xff,0xfc,0xb1,0x70,0xb0,0xdc,0x2c,0x14,0x0b -,0x05,0x02,0xc1,0x70,0xa8,0x5c,0x2c,0x64,0x21,0x05,0x42,0x41,0x50,0x90,0x4c,0x62,0x23,0x10,0x88,0xc2,0x21,0x30,0x88,0xd9,0xc5,0xf3,0x5f,0x13,0xed,0xfa,0xfd,0x8e -,0x2a,0xa7,0x5d,0xde,0x44,0x4b,0xab,0x6b,0x75,0xe5,0xde,0xb5,0x9e,0xdf,0x3f,0xe7,0x41,0xe0,0xf7,0xf7,0x7a,0xf5,0x7a,0x3d,0xfd,0xe5,0xfd,0x28,0xe8,0x77,0x77,0xfe -,0xb7,0x77,0xe7,0xf9,0x22,0xdf,0x1b,0x7c,0xd7,0xf8,0xfc,0xc6,0x78,0xec,0xe8,0xe3,0x7f,0xb9,0x0e,0x05,0x38,0xa0,0xc5,0x7a,0xc3,0xb3,0xf5,0x41,0x5e,0x47,0xe0,0xdb -,0xc9,0xc6,0x7b,0x9a,0x8f,0xc2,0x25,0x5e,0xb7,0xb0,0x4c,0x5d,0xfc,0x86,0xfd,0xb3,0x75,0xd4,0x3f,0xaf,0x6a,0xaa,0x9d,0x2e,0x74,0xe0,0xfc,0x19,0x6a,0x8b,0xfd,0x0e -,0x64,0xfd,0x68,0x2c,0x43,0x98,0xfa,0x0a,0x4f,0xb4,0xcb,0x75,0x8c,0x7e,0x8e,0x42,0x84,0x67,0x66,0x84,0xf2,0x27,0xbf,0x51,0x96,0x1e,0xe0,0x80,0x07,0x9a,0x77,0x02 -,0x1d,0x51,0xd0,0x14,0x3b,0xc0,0x24,0xc4,0x0f,0x70,0x04,0xef,0x10,0x04,0xc5,0xc0,0x51,0x20,0x4c,0x2c,0x27,0x0b,0x06,0x02,0xc1,0x41,0x30,0xa0,0x28,0x16,0x3a,0x05 -,0x82,0x83,0x50,0x98,0x94,0x22,0x33,0x08,0x84,0xc2,0x21,0x30,0x89,0x5e,0xf2,0xa9,0x9f,0x7f,0x5c,0x6f,0x2f,0x35,0xce,0xaf,0x65,0xd5,0xd4,0x9a,0xbe,0x2e,0xf3,0x7f -,0x5f,0xa7,0xee,0xf5,0xf1,0xe2,0x58,0xe8,0xff,0xa5,0xe0,0x3b,0xa9,0xf6,0xe6,0x4d,0x88,0xf8,0xfc,0xdd,0xff,0x9f,0xf1,0xfe,0xce,0x41,0xaa,0xf2,0xcd,0x4a,0xd3,0x0f -,0xeb,0x9f,0x5e,0xef,0x19,0x0f,0x6d,0x14,0xd2,0x41,0x67,0xcb,0xec,0x53,0xc4,0xd6,0xed,0xeb,0xda,0x82,0xf7,0x8d,0x92,0xf5,0x5b,0xa2,0xac,0x6a,0x10,0xfb,0xda,0x40 -,0x56,0xa3,0x6d,0x15,0x25,0x57,0x8c,0xe9,0xe7,0xf6,0xfd,0xf1,0x25,0x9b,0xc7,0xba,0xaa,0x9e,0xe7,0x8c,0xba,0x87,0xe0,0xe6,0xf9,0x0a,0xe6,0x3b,0xbd,0xfe,0xf5,0x0e -,0xeb,0xbe,0x00,0x00,0xf1,0x52,0xa5,0x85,0x82,0xcc,0x62,0xec,0xc1,0x37,0x70,0x06,0xde,0xa7,0x7c,0x92,0x53,0x2a,0x07,0x7c,0x04,0xaa,0x00,0x11,0x4e,0xe0,0x31,0x85 -,0x99,0x40,0x70,0xff,0xf1,0x50,0x80,0x2e,0x1f,0xfc,0x21,0x0a,0xcf,0xff,0xef,0xfc,0xff,0xff,0xb0,0x62,0x40,0x50,0x2a,0x16,0x12,0x05,0xc2,0x81,0x80,0xa0,0xd8,0x28 -,0x32,0x12,0x09,0x44,0x81,0x20,0x88,0x4c,0x42,0xc7,0x37,0xd7,0x8e,0xb7,0xc7,0x7e,0x7b,0x99,0xc2,0xba,0xef,0x4a,0xd6,0xee,0xa2,0x5e,0xa7,0x2a,0x2e,0xd2,0xbf,0x7b -,0x0d,0xeb,0xfc,0xef,0xb3,0xb7,0x7f,0xeb,0xbc,0x1d,0xdd,0xf1,0x4e,0xed,0x35,0x7c,0xb7,0xec,0xca,0xeb,0x7e,0x76,0xb5,0xf2,0x63,0xf8,0x9a,0xdb,0xfd,0x9e,0x0e,0xe9 -,0xe8,0x21,0x17,0x3d,0x15,0xdb,0xee,0x1f,0x77,0xf7,0x69,0xde,0xfc,0xac,0xbf,0xa3,0xfd,0x32,0x1a,0x47,0x69,0x71,0x92,0x54,0xba,0x55,0xb6,0xc6,0x95,0xb4,0x3e,0xfd -,0xb7,0x4a,0xf4,0x35,0xac,0x4a,0x6d,0x0d,0xbc,0xb4,0x6e,0x75,0x70,0x21,0x03,0xd8,0xe5,0xe6,0xbb,0x89,0x69,0x87,0xb8,0xf7,0x23,0xae,0xfc,0xbe,0xe2,0x2d,0xd6,0x13 -,0xce,0x4a,0x98,0xb9,0x8a,0x36,0xb7,0x26,0x67,0xb0,0x9d,0x04,0xa9,0x4a,0x58,0xbd,0x13,0x35,0xc1,0x40,0xa3,0xce,0x04,0xc5,0x2e,0x85,0x6c,0x0b,0x80,0x98,0x0a,0x76 -,0x24,0x05,0xc2,0x82,0x30,0xa8,0x58,0x2e,0x14,0x13,0x15,0x02,0xc3,0x51,0x20,0x8c,0x4a,0x13,0x18,0x85,0x42,0x61,0x13,0xab,0x32,0x45,0xd6,0xb9,0xab,0xab,0xca,0x88 -,0xba,0x93,0x25,0xdf,0x9e,0x6f,0x79,0xf1,0xcf,0x9a,0xd6,0x5c,0xb0,0x5c,0xb7,0xd5,0xd0,0x79,0x4f,0xdf,0x4f,0xc2,0x7f,0xff,0xfa,0x8f,0xea,0x3a,0xdd,0x6a,0x34,0xf5 -,0x74,0xfa,0x3d,0x97,0xdc,0xbe,0x12,0x09,0x5d,0xe9,0xba,0x34,0x9d,0x3b,0xc6,0x5d,0xb6,0x68,0x5b,0xee,0x9f,0x28,0xa5,0xb5,0xd3,0xe8,0xe8,0x0f,0xda,0xc0,0xe0,0x1d -,0x51,0xcb,0x5d,0x35,0x50,0x60,0xef,0xce,0x57,0x0a,0x5e,0x27,0x30,0xf7,0xfc,0x4b,0xec,0x70,0xb9,0xf8,0xf2,0x1c,0xff,0x49,0x9c,0xd4,0x7a,0xbe,0x1c,0xfd,0x6e,0x47 -,0xfe,0xd2,0x3d,0x5b,0xbf,0x2f,0x7c,0xee,0x3c,0xd5,0x1e,0x29,0x67,0x98,0x00,0x92,0x3f,0x6c,0x1d,0xc0,0x3d,0xcf,0x5c,0x3e,0xb7,0x34,0xc8,0xb0,0x74,0x41,0x70,0x03 -,0xc8,0x05,0x47,0xb8,0x01,0x65,0xaa,0x09,0xa2,0xb0,0x5c,0x16,0x85,0x6c,0x02,0x17,0x04,0x00,0xe0,0xff,0xf1,0x50,0x80,0x2f,0x9f,0xfc,0x21,0x0a,0xcf,0xdf,0xfe,0xdd -,0xff,0xff,0xae,0x63,0x28,0x50,0x70,0x16,0x0b,0x85,0x0a,0xc1,0x20,0xa0,0x48,0x28,0x25,0x09,0x08,0x60,0xed,0x35,0xbd,0x5f,0x7e,0x7c,0x5e,0x5f,0x5b,0xd7,0x32,0x54 -,0x88,0x45,0x6b,0x23,0x5b,0xba,0xd4,0xcf,0xae,0x83,0xec,0xf9,0xdd,0x3f,0xde,0xaf,0x77,0x90,0xfd,0xa2,0xf4,0x7f,0x0b,0xe2,0xdb,0x97,0x60,0x71,0x9b,0x89,0x95,0x27 -,0xf4,0x6d,0x00,0xfa,0x36,0xd1,0xf6,0xd6,0x74,0xd9,0x3f,0xf6,0x16,0xd1,0x1b,0x37,0x71,0xd3,0x40,0xd1,0x9f,0x4a,0x3b,0xac,0x39,0xff,0xa9,0x75,0x69,0x29,0x59,0xaf -,0xf1,0xf8,0x0b,0xeb,0x8a,0xbe,0x69,0xbf,0xd4,0x45,0x59,0xfd,0x5a,0x36,0xd3,0x8a,0x97,0xdb,0x73,0x77,0x75,0xd7,0x7b,0xbb,0x46,0xfb,0x6f,0x36,0x5d,0x96,0xa6,0xe4 -,0x06,0x8a,0xbf,0x3a,0x06,0xe8,0xce,0x94,0x8d,0x32,0x26,0xa9,0x5b,0x34,0x46,0x49,0x93,0x2d,0x62,0xd5,0x8e,0xe2,0xaa,0x2e,0x4a,0xe2,0xe8,0x46,0x16,0x09,0x76,0x82 -,0x10,0x92,0xed,0xeb,0xcf,0x80,0x09,0x09,0x00,0xa6,0x41,0xb1,0x90,0x2c,0x64,0x0b,0x05,0x02,0xc1,0x50,0xb0,0x54,0xe6,0x15,0x09,0x84,0x82,0x61,0x50,0x98,0x44,0x46 -,0x21,0x1b,0x9c,0xd6,0x1e,0xde,0x38,0xda,0xaa,0xea,0x2a,0x65,0xc8,0x74,0x8a,0xe5,0x77,0x31,0xc5,0x79,0x68,0x72,0x3f,0x83,0xff,0xc3,0x3f,0x9f,0xc0,0xbd,0x17,0xd1 -,0xdd,0x37,0x77,0xe1,0x35,0x0f,0x54,0x0b,0xf1,0x8e,0x6a,0x65,0xed,0xaf,0xb6,0xe9,0x57,0xb4,0x29,0x22,0xa7,0x3f,0xb7,0xb9,0xfc,0xe7,0x96,0x80,0xb6,0xc9,0xe9,0xfe -,0x27,0xfd,0xef,0x1e,0xfb,0x68,0x9b,0xe4,0x74,0xfc,0x3a,0x83,0x20,0x1a,0xb1,0xbf,0xdf,0xcb,0x9f,0xcc,0xea,0x8e,0x7f,0x5b,0xe6,0x9e,0x7d,0x0b,0x93,0x93,0xe1,0xcb -,0x8b,0x89,0xc3,0x97,0xcf,0x98,0xe7,0xc0,0x27,0x8d,0xb8,0xa5,0xb5,0xf3,0x1c,0x7c,0x40,0x73,0x71,0x0e,0x47,0x10,0xff,0xd0,0x1e,0x6c,0x1d,0x64,0x1c,0xba,0x9c,0x4f -,0xc6,0x27,0x46,0x7d,0x08,0x9b,0xd6,0xa3,0xa4,0xd1,0x19,0xe0,0xe8,0x4d,0xc1,0x58,0xf1,0x16,0xe2,0x24,0x84,0x20,0x77,0x7c,0xc9,0xa5,0x3a,0x54,0x92,0x50,0x94,0x5c -,0x11,0xb1,0xdd,0x4f,0xbb,0xdd,0x23,0x25,0x44,0x00,0x2e,0x49,0x48,0x81,0xc0,0xff,0xf1,0x50,0x80,0x2f,0x7f,0xfc,0x21,0x0a,0xcf,0xdf,0xee,0xff,0xf7,0xfb,0xae,0x70 -,0xc0,0x58,0x68,0x15,0x0a,0x05,0x84,0xe1,0x50,0xc0,0x50,0x4c,0x14,0x09,0x04,0xc2,0x41,0x42,0x28,0x44,0x26,0x11,0x11,0x84,0x44,0x61,0x12,0x18,0x44,0xae,0xea,0xed -,0x27,0x3f,0x1e,0xa6,0x5c,0xb9,0x5a,0xdb,0x55,0x53,0x54,0x75,0xcf,0xb7,0x7c,0xea,0xba,0x56,0x7c,0x6b,0x80,0xf8,0x3c,0x85,0x65,0xdb,0x67,0xbb,0xe2,0xdf,0x15,0x7c -,0xf9,0xb6,0xca,0xf7,0xfe,0xbe,0x6c,0x23,0xd5,0x2f,0x11,0x1b,0x74,0xf6,0x8e,0xfc,0xe7,0xe5,0x6a,0xdb,0xa8,0x96,0x97,0x79,0x47,0xdb,0xb3,0xf1,0x3a,0x46,0xb7,0xfd -,0xbc,0x85,0x6a,0x15,0x5b,0xf9,0xb8,0xe8,0x74,0x67,0xbd,0x8f,0xe1,0x6f,0x08,0xce,0xca,0xe8,0x94,0xba,0x7d,0x47,0xda,0x91,0xa4,0x3e,0x04,0x2d,0xc7,0x92,0x3f,0xb2 -,0xd1,0x1d,0xf1,0xf3,0x8d,0x1b,0x0f,0x60,0x1b,0xeb,0x39,0x5d,0x76,0x49,0x80,0x3e,0x64,0xb9,0x44,0xe1,0xfc,0xc4,0x61,0x54,0x1a,0x4a,0x6a,0xa2,0xec,0x41,0x20,0x07 -,0xba,0x9e,0x41,0x25,0x45,0x2c,0x64,0x00,0x11,0x14,0x01,0x38,0xa1,0x62,0x20,0x58,0x2a,0x14,0x0b,0x0a,0x02,0xc2,0x50,0xb0,0xe0,0x28,0x45,0x19,0x91,0x44,0x62,0x10 -,0x98,0x84,0x26,0x25,0x08,0x89,0xfc,0x32,0xef,0x7a,0xab,0x6e,0x26,0x5d,0x54,0x4a,0xbb,0x25,0xea,0xb9,0xeb,0x7b,0xbb,0xe2,0xb2,0x7b,0x40,0xed,0xe7,0x66,0xea,0x7d -,0x9b,0xe6,0xe7,0xfd,0x20,0xfd,0x8f,0xb7,0xf4,0xb7,0xf0,0xe9,0x50,0x46,0x61,0xa0,0x58,0xc7,0x5d,0x1f,0x00,0x8c,0x7f,0xa7,0x59,0xdd,0x52,0x52,0x81,0x37,0x80,0x50 -,0x9e,0x37,0xf1,0x88,0x8f,0x88,0xc6,0x57,0xdc,0xff,0xfa,0x74,0x7e,0xeb,0x99,0xf3,0x03,0xbe,0x9f,0xce,0xbb,0x45,0xf8,0x1b,0xef,0xd2,0x9c,0xf9,0x8e,0x7c,0x3e,0x1d -,0xe3,0x8f,0x31,0xcb,0xcf,0x33,0xc6,0x38,0x94,0xb9,0x7b,0x7f,0x0b,0xe0,0x38,0x1a,0x4f,0xa0,0xf7,0xe1,0x31,0x39,0xbc,0x8f,0xac,0xff,0xde,0xf5,0x83,0x88,0x0e,0x24 -,0xd1,0xcf,0x93,0x80,0x05,0xb8,0x39,0x11,0xfd,0xf0,0xfd,0xe5,0x1d,0xf2,0xf7,0x86,0x1b,0x26,0xc9,0x73,0x49,0x1f,0x75,0x98,0x3b,0xc5,0xe2,0x03,0xdd,0xf6,0x60,0xbd -,0xc7,0xae,0x1e,0x00,0x00,0x40,0x4c,0x9c,0xc0,0xe0,0xff,0xf1,0x50,0x80,0x2d,0x3f,0xfc,0x21,0x0a,0xcf,0xdf,0xff,0x9f,0xeb,0xff,0xb1,0x60,0xa0,0x60,0x2c,0x17,0x0b -,0x15,0xc6,0x82,0x70,0xa1,0x48,0x28,0x25,0x09,0x88,0x44,0x62,0x16,0x15,0xc7,0x2e,0x19,0xed,0xf3,0xd7,0x7c,0x7b,0x7b,0xf1,0xcd,0x89,0x1d,0x56,0x57,0x1a,0xed,0x51 -,0x75,0x75,0x7f,0x78,0x0f,0x77,0xf4,0xd2,0xbb,0xf3,0x7b,0x3d,0xb6,0x81,0x3e,0xb1,0xdf,0xa3,0x9e,0xef,0x9f,0xef,0x64,0xc3,0xc1,0xd5,0x0f,0xf6,0xe3,0xb0,0xe9,0xaf -,0xe3,0x65,0x5e,0x65,0xf7,0xd5,0xb6,0x7e,0x4b,0x87,0x36,0x20,0x93,0x0d,0xb7,0xcd,0xa3,0xfb,0x4e,0xcf,0xc7,0x1e,0xe6,0x28,0x95,0x6d,0xdc,0x5f,0x99,0x3e,0x1e,0x7b -,0x75,0xf6,0xd4,0xc0,0xd4,0xaf,0x71,0x2a,0xc9,0x19,0x69,0xfe,0xfe,0x2c,0x7f,0x09,0x8a,0x23,0xa9,0x8d,0x2f,0x4a,0xe3,0x81,0x33,0xd1,0x81,0x59,0x17,0x5e,0xe5,0x30 -,0x61,0x52,0x56,0x40,0xba,0xa1,0x9e,0xcc,0x15,0x4d,0x39,0x9b,0x01,0xbd,0x68,0x05,0xac,0xa2,0x27,0x2a,0x4d,0x6a,0x81,0x8d,0x00,0x08,0x0b,0x01,0x4c,0xa1,0x60,0xa0 -,0x58,0xc6,0x16,0x0a,0x05,0x87,0x03,0x60,0xa0,0x98,0x28,0x25,0x0b,0x85,0x44,0x64,0x10,0x98,0xc4,0xec,0xac,0xd6,0x67,0xc7,0x8b,0x51,0x2b,0x5c,0xdc,0xe7,0x57,0x93 -,0x52,0xb5,0x7e,0xbe,0x2a,0xa5,0x7b,0x4f,0x1c,0x6b,0x7e,0x43,0xec,0xfa,0x1f,0xfb,0x5b,0xc9,0xf8,0xbf,0xdd,0x54,0x9d,0xf2,0xf2,0xe3,0x7f,0xe6,0x27,0x30,0xeb,0xff -,0xed,0xac,0xd3,0x97,0x29,0x6a,0x26,0xf0,0x4e,0x43,0x52,0x19,0x8b,0x22,0x89,0x6a,0xf1,0x6c,0x9b,0x8e,0x52,0x87,0x3a,0xd5,0xea,0x64,0xa3,0xe2,0x6a,0xcd,0x0f,0xf5 -,0x14,0x03,0x51,0xeb,0xed,0x50,0xe3,0xd5,0xf5,0x16,0x6f,0xef,0x53,0x99,0x6d,0xfa,0x9b,0x4e,0x2e,0xd3,0x9f,0x0e,0x3b,0xbb,0xca,0x40,0x5d,0x1c,0xe9,0x25,0xf3,0x88 -,0xae,0x67,0x34,0x5d,0x42,0x90,0x8f,0xc1,0x4f,0xd7,0x0e,0xff,0x70,0xef,0x16,0xef,0x4f,0x94,0x6c,0x03,0xf2,0x10,0x32,0xd4,0x43,0xb8,0xa7,0xae,0x00,0x7a,0xfd,0xeb -,0x7e,0xdc,0x83,0xbf,0x20,0x61,0x04,0x90,0x12,0x81,0x31,0x52,0x81,0x64,0x50,0x01,0x54,0x40,0x70,0xff,0xf1,0x50,0x80,0x2b,0x1f,0xfc,0x21,0x0a,0xcf,0xdf,0xdf,0xff -,0x7f,0xfe,0xb1,0x70,0xc0,0x5c,0x2c,0x17,0x0a,0x89,0x02,0xc1,0x40,0xb8,0x58,0x2e,0x16,0x0a,0x05,0x82,0x84,0x21,0x20,0x94,0x46,0x21,0x7b,0x73,0xef,0xf3,0x38,0xaa -,0xbe,0x66,0x6a,0x56,0xaa,0xf7,0x38,0xdc,0x71,0x90,0xb5,0x51,0xc5,0xe4,0xe3,0xea,0x83,0xcf,0xa9,0x4e,0x3b,0xce,0x5e,0xcf,0x6d,0xec,0x3d,0x7c,0xed,0x79,0x7e,0x57 -,0xf2,0x61,0x5c,0x58,0xa8,0xaa,0xfc,0x69,0x70,0xd5,0x4f,0xd2,0x84,0xd3,0xed,0x30,0xff,0x57,0xa7,0xaf,0x3f,0x29,0x97,0x70,0x46,0x6d,0x8d,0x65,0x7c,0x38,0xcd,0xc2 -,0x7c,0x16,0x07,0x9d,0x9e,0x06,0xf3,0x79,0x6c,0x24,0xac,0xe3,0xc2,0x08,0x2e,0x5d,0x55,0x2d,0x48,0x6d,0x6a,0xf1,0x78,0x28,0x3d,0xe3,0x23,0xad,0xcd,0x3a,0x2e,0x30 -,0xc4,0xe7,0x13,0x8e,0x82,0x16,0x56,0xe3,0xba,0x64,0xac,0x56,0x40,0xc9,0x78,0x8a,0x56,0xc4,0x05,0xaa,0x05,0xcc,0x6d,0xc0,0xac,0x40,0xa1,0x55,0x80,0x76,0x17,0x01 -,0x00,0x15,0x0c,0x48,0x0a,0x05,0x82,0x81,0x60,0xa0,0x54,0x2c,0x34,0x13,0x06,0x02,0x82,0x60,0xa0,0x58,0x28,0x43,0x20,0x84,0xc8,0x27,0x6f,0xae,0xe5,0x35,0x4d,0x72 -,0xb6,0x5e,0x0b,0x2e,0xa7,0x1a,0x5f,0x77,0x0e,0xba,0xe4,0x9e,0x43,0x6c,0xf7,0xd9,0x86,0xff,0x3b,0xf7,0x87,0xfd,0x45,0xfd,0xbc,0xdc,0xf9,0x7d,0x27,0xd9,0xe5,0x0b -,0x03,0xdf,0xa4,0xf9,0x27,0x65,0xac,0xfa,0x36,0x5f,0xa8,0xff,0xc8,0xe5,0xfd,0x80,0x92,0x67,0xba,0x08,0xa7,0x7f,0xee,0x7a,0x6f,0xee,0xdf,0x50,0xfa,0x38,0x2e,0xa3 -,0xba,0xa3,0xbb,0x7e,0x2f,0xc3,0x7d,0xf7,0x8d,0xb0,0xb1,0x49,0x1c,0x5e,0x36,0xc2,0x3f,0xc3,0xf7,0xf4,0xfd,0x6b,0xe1,0x1d,0x06,0xc6,0x48,0x30,0x06,0x34,0xc5,0x8f -,0xe4,0xd2,0xf7,0x17,0x1f,0x92,0x3c,0x44,0x7d,0x6e,0xe8,0x83,0xbd,0x21,0xee,0x0b,0x26,0x8b,0x23,0x04,0xfd,0x6a,0x05,0xce,0xe6,0x60,0x14,0x25,0xdc,0x27,0xee,0x26 -,0x0a,0x80,0x15,0x01,0x00,0x28,0x04,0x05,0x00,0x54,0x07,0xff,0xf1,0x50,0x80,0x30,0x1f,0xfc,0x21,0x0a,0xcf,0xd5,0x7b,0xff,0xdf,0xf4,0xaf,0x62,0x38,0x50,0x2a,0x16 -,0x1b,0x85,0x82,0xe1,0x42,0xb0,0x50,0x8a,0x22,0x18,0x85,0x42,0x22,0x30,0xa8,0x44,0x26,0x11,0x09,0x88,0x48,0xac,0xfb,0xfc,0xfd,0x67,0xb7,0xed,0xe7,0x96,0xef,0x55 -,0xac,0x65,0xc5,0xe6,0xa9,0x6a,0xad,0x75,0xce,0xbb,0xf3,0x3b,0xd7,0xfe,0x5c,0x01,0xf7,0xe5,0xe8,0xcb,0xe3,0xbe,0xcf,0x6d,0xd9,0x3b,0x47,0xb7,0x85,0x9c,0xb9,0xf8 -,0x7b,0x93,0x31,0xdb,0xc2,0xdf,0xe5,0xaf,0xe1,0x6a,0x4d,0x7d,0xe7,0x69,0x9f,0x5f,0x37,0xaf,0xd3,0x57,0xdc,0xb9,0xa0,0x12,0xd3,0xfe,0xc3,0x5e,0x9f,0x6a,0x3f,0x9b -,0x68,0x3e,0xcb,0x13,0x5f,0xc3,0x4d,0x66,0x57,0x1b,0xc1,0xd6,0x9f,0xcd,0x7c,0xf9,0x73,0x2d,0x2a,0x2c,0xf8,0x32,0xd5,0xa7,0x65,0xee,0x06,0x55,0xa4,0x82,0x14,0x87 -,0x3b,0x29,0x2d,0xaf,0xce,0x48,0x42,0x02,0x1a,0xe7,0x25,0x5b,0xfe,0x15,0x0b,0xc5,0x35,0x57,0xef,0xed,0x80,0xf1,0x00,0x8a,0xf1,0x95,0xc0,0xf1,0x88,0x70,0x2e,0x68 -,0x01,0xde,0x00,0xf5,0xca,0x54,0x94,0x4a,0x29,0x62,0xc0,0x26,0x02,0x69,0x42,0x82,0x62,0x20,0x58,0x4e,0x16,0x12,0x0e,0x02,0xc6,0x40,0xa8,0x4c,0x24,0x23,0x0a,0x84 -,0x42,0x62,0x11,0x18,0x44,0x46,0x21,0x1b,0xfa,0x49,0xba,0x6b,0x5e,0xbc,0xf3,0x74,0x99,0x74,0x91,0x5a,0x94,0xb9,0x5c,0x57,0xeb,0xfb,0x75,0xdf,0xe3,0xe3,0xfa,0xd7 -,0xde,0xc7,0x07,0xf2,0x5f,0xd1,0x1f,0xcd,0xf8,0xb7,0xca,0x51,0xe6,0xff,0x7c,0x9b,0x79,0x79,0xbf,0x43,0x90,0x8b,0x2f,0x2d,0x65,0x6c,0x9d,0x5f,0xfd,0xbe,0xf8,0x11 -,0xf0,0x1e,0x3f,0xc5,0x20,0x4b,0xbe,0x6a,0x48,0x3c,0xd2,0xa6,0x80,0x71,0xbf,0x5a,0xcb,0x36,0x91,0x2b,0x8c,0xe9,0x93,0xdf,0xc6,0x1a,0x2f,0xe8,0xf5,0xf1,0xbb,0x64 -,0xa6,0x00,0x71,0xe8,0xee,0xf0,0xdf,0x38,0x72,0x9a,0x8f,0x9d,0x17,0xed,0xbc,0x8f,0x42,0x56,0xc4,0xef,0x75,0x09,0x34,0x83,0x18,0x0c,0xa5,0x5b,0xf6,0xb8,0x36,0xa4 -,0x71,0x14,0x1c,0xc1,0xc1,0x39,0xc5,0xaa,0x33,0xf7,0x7f,0xc6,0x02,0x6f,0x75,0x67,0xaf,0x05,0x64,0x11,0x9d,0xfa,0x48,0x00,0xee,0x16,0x82,0xc9,0x81,0xc5,0x00,0x3c -,0xe3,0xb8,0x00,0x8d,0x65,0x52,0x7b,0xa8,0x04,0x00,0xe0,0xff,0xf1,0x50,0x80,0x2f,0xdf,0xfc,0x21,0x0a,0xcf,0xc7,0xfd,0xe4,0xff,0xfc,0xae,0x60,0xc0,0x58,0x4e,0x14 -,0x0a,0x85,0x04,0x61,0x61,0x38,0x50,0x6c,0x34,0x0a,0x89,0x04,0xa1,0x20,0xa8,0x48,0x26,0x11,0x39,0x88,0x4a,0xee,0xfa,0xef,0x8b,0x76,0x5e,0xf5,0xae,0x75,0xbb,0x46 -,0x4d,0x65,0xba,0xe4,0xc9,0x2f,0x8a,0xdd,0x5f,0xfe,0xe0,0x9d,0xc0,0xce,0xe5,0xd9,0xdb,0x47,0x7d,0x7b,0x9b,0x9f,0xe8,0xbe,0x47,0xfe,0x3f,0xdd,0x05,0x36,0x00,0xe0 -,0xd4,0xfe,0xa8,0xfc,0x6e,0x89,0x01,0xe5,0xbc,0x9f,0x8e,0x99,0x4f,0xdf,0xf4,0x98,0xa5,0x79,0xb7,0x90,0x25,0x0b,0x47,0xa1,0xfb,0xfc,0xce,0x13,0xad,0xf6,0x51,0xd3 -,0x6f,0xa0,0x85,0x8d,0xd1,0x48,0xf5,0x71,0x2b,0xf7,0x57,0x96,0x8a,0xe3,0xac,0xf3,0x60,0xad,0x3c,0xa6,0x97,0xb2,0x1d,0x53,0x66,0x5a,0x0c,0x8f,0x22,0xad,0x1e,0xe0 -,0xeb,0xff,0x8c,0x25,0x35,0x61,0x8d,0xf5,0x81,0xa2,0x79,0x61,0x24,0xab,0xcd,0xde,0x84,0x5b,0xad,0xe5,0x4d,0x09,0xa1,0xbf,0xbd,0x6c,0xe8,0xad,0x04,0x01,0xee,0xfb -,0x80,0xd4,0x6e,0x9c,0x56,0x92,0xd3,0x80,0xe8,0x4e,0xf0,0x05,0x60,0x15,0x26,0x05,0x52,0x05,0x89,0x01,0x70,0xb0,0x50,0x2c,0x14,0x0b,0x05,0x02,0xc4,0x40,0xb0,0x50 -,0x6c,0x14,0x1a,0x88,0xc4,0x22,0x50,0x88,0x54,0x22,0x15,0x10,0x84,0xc2,0x23,0x4c,0xae,0x3c,0x5f,0xf3,0xf9,0xa2,0xea,0xb2,0x4b,0xc2,0x2e,0xa7,0x9d,0xf4,0xeb,0x7e -,0x7c,0x7a,0xf8,0x9d,0x7c,0xfd,0xeb,0xf0,0x35,0x89,0xeb,0x6d,0x47,0xd7,0xaa,0xad,0x1b,0xf1,0xf6,0xbd,0x3c,0x74,0x9b,0x6a,0xdf,0xbd,0x13,0x14,0xff,0x7b,0x5f,0xf3 -,0xd1,0x6e,0x80,0xea,0xa9,0x52,0x26,0x3e,0xd2,0x39,0x77,0x56,0xe5,0x9f,0x7c,0x13,0x43,0xfc,0x0f,0x83,0xf5,0x6f,0x73,0xfd,0xdc,0x4f,0x8b,0xff,0xe9,0xac,0x78,0xe9 -,0x3b,0x27,0x82,0x00,0xde,0xac,0xf7,0x00,0xb2,0x6a,0xd1,0x3e,0x72,0x3c,0xd5,0x7b,0xd8,0x82,0xff,0x31,0xab,0x25,0xec,0xe1,0x53,0xcb,0x9f,0x91,0xc5,0xd7,0xc0,0x80 -,0xaf,0xb6,0x3d,0x7e,0xf3,0xbb,0xee,0x02,0x49,0xaf,0x20,0x94,0x05,0x80,0x0f,0x10,0x20,0x05,0x43,0xc0,0x00,0x1d,0xa6,0xa5,0x47,0x80,0x00,0x00,0x01,0xe4,0x04,0x07 -,0x70,0xf6,0xc0,0x58,0x00,0x94,0x8a,0x81,0xc0,0xff,0xf1,0x50,0x80,0x2b,0xdf,0xfc,0x21,0x0a,0xcf,0x8f,0xe3,0xfe,0xff,0xfc,0xb2,0x70,0xb0,0x60,0x2c,0x15,0x11,0x05 -,0x02,0x41,0x30,0xb8,0x50,0x2e,0x14,0x13,0x84,0x82,0xc1,0x50,0xa1,0x08,0x6a,0x11,0x09,0x94,0x54,0xaa,0xf6,0xb9,0x53,0x75,0x4c,0xbe,0xbc,0x6a,0x54,0xa8,0x45,0xd7 -,0x0b,0x66,0x4a,0x92,0x97,0xfa,0x83,0xc2,0x93,0xec,0x6e,0xd7,0xb3,0x2f,0x83,0x93,0xf3,0xda,0x7d,0xff,0xc7,0xed,0x62,0xb0,0x1f,0x38,0xf9,0xf8,0xfd,0x34,0xcf,0x56 -,0xdf,0x73,0x35,0x9f,0x97,0xe7,0x92,0x1b,0x22,0xf8,0x66,0xaf,0x8b,0x9d,0x80,0x47,0xb2,0x56,0x4e,0x84,0x99,0x5e,0xef,0xd9,0xae,0xde,0xfd,0x78,0xf3,0xaf,0xbd,0x90 -,0xd1,0xd3,0x17,0x0e,0xef,0x13,0x05,0x51,0x33,0x85,0xbd,0xd5,0x2f,0xc2,0xf1,0xc1,0xb1,0xf8,0x92,0xab,0x3b,0xf2,0x88,0x1e,0x01,0x6a,0x85,0x89,0xd7,0xb8,0x7a,0xea -,0xea,0x11,0x38,0xdd,0x79,0x8c,0x0a,0xac,0x4e,0xa3,0x5a,0xfc,0xe6,0x4d,0x2e,0xa0,0x49,0xd4,0x11,0x69,0x2f,0x81,0x8c,0x48,0x51,0x64,0xc2,0x20,0x4f,0x20,0x98,0x90 -,0x16,0x12,0x85,0x02,0xc9,0x41,0x30,0x54,0x24,0x15,0x11,0x85,0x42,0x22,0x30,0xa8,0x8c,0x22,0x13,0x08,0x84,0xc4,0x23,0x7d,0xb7,0x59,0xac,0xfa,0xf4,0xd6,0x4c,0x53 -,0x54,0x81,0xe7,0x7e,0xd7,0xd5,0x7a,0xd4,0xce,0x7a,0xef,0xa7,0x1f,0x5f,0xe4,0x78,0x3d,0x96,0xc4,0xb3,0xdd,0xe1,0xcb,0xf5,0x31,0xb6,0x7f,0x7c,0x36,0x0b,0xda,0x07 -,0xf8,0x78,0x3b,0x7e,0x08,0x5b,0x67,0xc5,0xf8,0x27,0x94,0x69,0x0e,0x50,0x3e,0x94,0xdd,0xf4,0x4a,0x81,0xa1,0x36,0x8b,0xa7,0x2f,0x05,0x29,0x06,0x36,0xcb,0xf9,0x6f -,0x46,0xce,0xaf,0x8c,0xa2,0x5a,0x7e,0x92,0x98,0x54,0x08,0xc7,0x6c,0x45,0xbc,0xdc,0x30,0x8f,0x87,0x45,0xd5,0xe0,0x38,0x96,0x38,0x92,0xc0,0xee,0xe3,0x27,0xff,0xe4 -,0x1e,0x00,0x18,0x19,0x6a,0x03,0x68,0xb8,0x7a,0xc7,0x7b,0xdc,0x00,0x1e,0x60,0x00,0x01,0xe3,0xdd,0x04,0xc5,0x29,0x92,0x20,0x1d,0xc2,0xd4,0x14,0xdc,0x7b,0x97,0x03 -,0xb8,0x58,0x04,0x40,0x14,0xb8,0x0e,0xff,0xf1,0x50,0x80,0x2b,0xff,0xfc,0x21,0x2a,0xcf,0xcd,0xf6,0x3f,0xff,0x7e,0xad,0x62,0x38,0x50,0xb0,0x15,0x0b,0x05,0x05,0x01 -,0x50,0xa0,0x60,0x28,0x42,0x0a,0x04,0x84,0x62,0x10,0x98,0x44,0x46,0x11,0x11,0x84,0x4c,0xda,0x67,0x55,0x52,0x65,0xf3,0xc5,0xf7,0x73,0x1a,0x12,0xe4,0xbc,0xbd,0xce -,0x39,0xf6,0xe6,0xf7,0x73,0xfd,0x20,0x3d,0x29,0xe6,0xa7,0xd5,0xce,0x3b,0xc8,0xd9,0xb4,0xae,0x8f,0xf9,0x57,0x32,0xef,0xb0,0xe0,0x5f,0xa5,0x0a,0xbf,0x5d,0x9f,0xd9 -,0xec,0x79,0x17,0x37,0xea,0x80,0x05,0xdf,0x53,0xe6,0xd7,0xfd,0x3d,0x57,0x72,0x71,0x89,0x63,0xe8,0x1a,0xeb,0x92,0xf8,0x21,0xc4,0x7b,0xfb,0x9c,0xf0,0xe9,0x6f,0x68 -,0xaa,0xad,0xfb,0xd4,0x3e,0xd6,0xf9,0x45,0x45,0xd4,0xed,0x1d,0xd2,0xd8,0x0d,0x30,0x47,0x84,0x29,0xff,0x45,0xb0,0x54,0xef,0x78,0xf4,0x77,0xaa,0x5e,0xf2,0x9d,0x3d -,0x8d,0x12,0xa0,0xd0,0x6d,0x32,0x15,0xb1,0x4d,0x73,0x1d,0xc6,0x91,0x15,0x6d,0x2b,0x40,0xe8,0x00,0x1e,0x56,0x12,0x04,0x2b,0xd3,0x18,0x16,0x0a,0x54,0xc7,0x10,0x02 -,0xe2,0xc0,0x53,0xb0,0x50,0x2c,0x55,0x0b,0x11,0x02,0xc1,0x70,0xb1,0x50,0x24,0x16,0x0a,0x04,0x82,0x81,0x70,0x98,0x44,0x26,0x11,0x6a,0xb9,0xad,0x73,0x3a,0xcd,0xf0 -,0x4c,0xa9,0x51,0xbe,0x25,0x4b,0x6b,0xce,0x4a,0x6b,0x3d,0xfe,0x2f,0xbf,0x87,0x9f,0xa0,0x3c,0xfe,0xe3,0x36,0xad,0x7b,0x76,0x63,0xf5,0xcd,0x7f,0x0f,0x5f,0x33,0x7f -,0x54,0x9a,0x89,0x38,0x03,0xc8,0xaf,0xe7,0x39,0x1e,0xad,0x9d,0xb3,0x7d,0xa8,0x2f,0xcd,0x5a,0xbd,0xf8,0xd5,0x7e,0xb3,0x57,0x7f,0x16,0x81,0x0d,0x94,0x79,0x84,0x7e -,0x29,0xef,0x7d,0x27,0x47,0x4f,0xe2,0x70,0xd6,0x35,0x25,0x04,0x64,0x35,0x16,0x51,0x6a,0xc3,0x71,0xdf,0x6d,0x8b,0xa9,0x3b,0xf0,0x59,0x4a,0x6c,0x4d,0xf6,0x1b,0x0e -,0xfe,0x0e,0xe1,0x40,0x7c,0xe1,0xeb,0x04,0xea,0x04,0xbe,0x22,0x01,0xa4,0x0f,0xf0,0x80,0x1a,0x44,0xd0,0x05,0xd2,0xfa,0xe2,0x70,0x4a,0x21,0x04,0xc3,0x9a,0xe0,0xe0 -,0x00,0x11,0x00,0x45,0x9c,0x0e,0xff,0xf1,0x50,0x80,0x30,0xdf,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x4d,0x16,0x30,0x59,0xa9,0x36,0x29,0x24,0x46,0x89,0xa0,0x8b,0x87,0xa3 -,0x2e,0xcc,0x8a,0xbd,0x18,0x2e,0xca,0x77,0x67,0x5f,0xcb,0xa1,0x64,0xfd,0x2e,0xbb,0xb1,0x4e,0xfe,0x5e,0x8f,0xdf,0xbf,0x6f,0x0d,0xd3,0x5f,0x31,0x9e,0x01,0x52,0xdb -,0xd1,0x78,0xdb,0x64,0x63,0x29,0xfb,0x32,0xfd,0x16,0x55,0xee,0xbc,0xb7,0xc1,0xe7,0x23,0x40,0xbc,0x88,0x2a,0x81,0xbb,0xd9,0xd7,0x36,0xcc,0x40,0xea,0x62,0x18,0x22 -,0x08,0x03,0x03,0xb5,0x22,0xd3,0xe5,0x9f,0xd2,0xf6,0x2a,0x2f,0xa0,0xf4,0x4d,0x64,0xe5,0xa5,0x12,0x4a,0x37,0xb7,0xb7,0x5e,0xcf,0xa7,0xe5,0x3d,0xf9,0xbb,0xe3,0x87 -,0x0d,0xee,0xe2,0x13,0xc7,0x3f,0xeb,0xbf,0x9e,0x7b,0x24,0x70,0xf9,0x2d,0x01,0x44,0xe9,0x5b,0x4b,0x87,0x1f,0xfc,0x9f,0xbf,0xf9,0x3c,0x3a,0x2b,0x70,0x46,0x3a,0xa0 -,0x82,0x64,0x23,0x4f,0x69,0xde,0xf2,0xec,0xdc,0xd9,0xde,0x95,0xd6,0x8d,0xe9,0x68,0x54,0x34,0x18,0x29,0x39,0xe7,0xae,0x1b,0x4d,0x52,0xe4,0x02,0x27,0x48,0x9d,0x3d -,0x84,0xae,0x48,0x30,0x14,0x50,0x59,0x41,0x66,0x88,0xd0,0x94,0x65,0xc9,0x6a,0xd7,0x01,0x26,0xf4,0xa4,0x4c,0xb7,0x3e,0x7c,0xc8,0xd4,0x92,0xf5,0x23,0x75,0x49,0xf4 -,0xf3,0xf0,0x1f,0xee,0xf2,0xae,0xcf,0x27,0xa7,0xcf,0x7c,0x69,0xf0,0x9f,0xec,0xdf,0x8e,0x7f,0x8c,0x18,0xb8,0x7d,0x6d,0xcf,0x3b,0x30,0xe0,0x0b,0xc4,0x64,0x7b,0xda -,0x72,0x69,0xd5,0x52,0x9e,0x92,0xda,0x99,0xed,0xc2,0x95,0xe2,0xed,0xb3,0xba,0xa9,0x26,0x2e,0xeb,0x95,0x71,0xa1,0xa1,0xa2,0x38,0xc8,0xa3,0x42,0xd8,0x39,0xbd,0x1a -,0x7b,0x53,0xdf,0x52,0xdf,0x43,0x4b,0x28,0x48,0x86,0x02,0x25,0x30,0x99,0x22,0x4e,0xf2,0x04,0xd1,0xc8,0xf4,0xd3,0xeb,0x20,0xb5,0xd7,0x38,0x13,0x65,0x64,0x2e,0x6b -,0xdb,0xad,0xb5,0x20,0x31,0x43,0x9e,0x6a,0x02,0xea,0xb5,0x52,0xc8,0xb0,0x1c,0x5e,0x5a,0xa8,0x18,0xbb,0xc7,0x68,0x85,0x54,0x4a,0xfc,0x88,0x88,0xeb,0xb4,0x9c,0x01 -,0xb5,0x8a,0xfc,0x0e,0x7f,0xfd,0xdf,0x1f,0xb7,0xe5,0xf4,0xaf,0xb4,0xbd,0xdb,0x1d,0x3e,0xde,0xe4,0x04,0xf9,0x86,0x96,0x2a,0xd7,0x16,0x92,0x9a,0xd8,0xe9,0x5c,0x10 -,0x94,0x75,0x0d,0x42,0xa7,0x6b,0x91,0xb9,0x0b,0x0d,0x84,0x47,0xff,0xf1,0x50,0x80,0x2d,0x9f,0xfc,0x21,0x6a,0xcf,0xbf,0x7f,0xff,0xff,0xfd,0xb6,0x80,0xb0,0xd4,0x2c -,0x14,0x23,0x05,0x42,0x82,0x50,0x90,0x51,0x04,0x41,0x39,0x84,0x42,0x63,0x11,0xbc,0xf7,0xe6,0xf7,0x5e,0xde,0xa2,0xa2,0x5e,0x22,0xd9,0xac,0xa4,0x89,0x78,0x79,0xdf -,0x47,0x7e,0x7f,0x03,0x0f,0x03,0xfe,0xf5,0x7d,0x3b,0xfc,0xf7,0xbe,0x1a,0x8b,0x6b,0xf9,0x9f,0xfb,0x7e,0xe7,0xb1,0x9d,0x75,0x6f,0xeb,0xa4,0xba,0x6d,0x2d,0xbe,0x3b -,0x9d,0x7e,0xde,0x75,0xff,0x43,0xac,0x2e,0x7b,0x7c,0x9e,0xe2,0xef,0x76,0x80,0xdc,0xfb,0x2f,0x5d,0xca,0xa2,0xa0,0xdc,0x84,0xe3,0xe7,0xdb,0x2d,0x87,0x94,0x09,0x37 -,0x8f,0x61,0xdb,0x96,0x3c,0x9f,0x58,0x71,0x5a,0x9a,0xe9,0x3f,0x91,0x24,0xca,0xe2,0x98,0x55,0xf1,0x1d,0x7b,0x4f,0x12,0xb2,0xec,0xd5,0x34,0x57,0x4a,0xd2,0x88,0x9d -,0xe2,0xb4,0xd4,0x6d,0xf0,0x44,0x5e,0x79,0x84,0x52,0x42,0x60,0xf5,0xa0,0x09,0x5a,0xe4,0x43,0xb8,0x01,0xde,0xee,0x00,0xe7,0x49,0xd4,0x00,0x5d,0x50,0x2a,0x50,0x2c -,0x55,0x0b,0x05,0x42,0x81,0x61,0x20,0xd8,0x70,0x14,0x12,0x85,0x04,0xa3,0x30,0x88,0x4c,0x2a,0x21,0x0a,0x88,0xc4,0xa1,0x12,0xb7,0xad,0xba,0xcf,0x6f,0x18,0xdf,0x15 -,0x33,0xae,0x62,0xa2,0xd6,0xbe,0xbb,0xdc,0xfa,0xf7,0xf3,0x8e,0x29,0xa6,0x87,0x1b,0xb7,0xcf,0xe4,0x1e,0x5b,0xbd,0x3b,0x7f,0x54,0xbe,0x3c,0x5f,0xb5,0xbb,0x6c,0x69 -,0x23,0xaa,0xba,0xf3,0xff,0x6f,0xf1,0x35,0xbe,0xa8,0xfd,0xae,0xd3,0xec,0xa1,0x66,0x11,0x7d,0xe5,0x46,0x2d,0x4f,0x56,0xa6,0xb5,0xe3,0xb9,0x2e,0x53,0xf5,0x78,0xb7 -,0xfe,0x79,0xe1,0xfc,0x67,0x87,0xc1,0x1d,0xca,0x7c,0xf7,0xb7,0xfd,0xc4,0xbd,0x35,0xbe,0x77,0x35,0xa3,0xce,0x4e,0xae,0x58,0xc7,0x2a,0x25,0xf2,0x17,0xcd,0x20,0xcf -,0x91,0xee,0x7f,0xe6,0x97,0x0f,0x20,0xc5,0x1b,0x4a,0x7e,0xb4,0xc3,0xae,0xb4,0x08,0x47,0x2e,0x6a,0xb9,0x71,0x24,0x71,0x38,0x0c,0x45,0x00,0x82,0x0e,0x9f,0x11,0xc4 -,0x3c,0xc0,0xb1,0x51,0xc4,0x1d,0xd3,0xf6,0x10,0x35,0x66,0x7b,0x40,0x00,0x59,0x11,0x80,0x05,0x49,0x81,0x02,0x86,0x50,0x1c,0xff,0xf1,0x50,0x80,0x31,0x5f,0xfc,0x21 -,0x0a,0xcf,0xcd,0xff,0xdf,0xff,0xbc,0xb4,0x81,0x30,0x50,0x2a,0x14,0x0b,0x05,0x46,0x83,0x30,0xa1,0x18,0x28,0x12,0x0a,0x04,0x82,0x81,0x20,0xa0,0x48,0x46,0x11,0x11 -,0x0c,0xc4,0x21,0x30,0x89,0x5c,0x4c,0xfa,0xde,0xbd,0x71,0xaf,0x55,0x72,0x97,0xb9,0x52,0xf3,0x5b,0xb2,0x50,0xae,0x35,0xcf,0x58,0xaf,0xbc,0x1d,0x85,0xb7,0x41,0xe4 -,0xf6,0x7d,0x5b,0xd8,0xe4,0xc3,0xcf,0xc5,0xde,0x76,0x75,0x9c,0xdb,0x51,0xfd,0xe7,0xc6,0xee,0xaf,0xfa,0x9f,0x33,0x88,0xf5,0x9e,0x56,0x5a,0x3f,0x4c,0x23,0x0c,0xde -,0xa6,0xa2,0xa0,0x91,0xea,0x7f,0xb4,0xbb,0xfb,0x82,0x6d,0xe8,0x6e,0xa6,0x67,0xf2,0xec,0xb9,0x9d,0xfa,0x98,0x7a,0x49,0xdd,0xe9,0x06,0x0f,0xa5,0x7d,0x62,0x65,0xcf -,0x38,0xe8,0x2f,0xf2,0xda,0xf0,0x8a,0x20,0xe7,0xce,0xd7,0x42,0xd1,0xd3,0x5e,0x56,0xa5,0xa9,0x7b,0xfb,0x66,0x9f,0x5f,0x75,0x46,0x53,0xa6,0x13,0x40,0x85,0x4a,0x39 -,0x27,0xc2,0x9a,0xf3,0x8b,0x92,0x49,0x23,0x4f,0xcd,0xd5,0x45,0x40,0xee,0xbb,0x49,0xd2,0x2c,0x63,0xf8,0x40,0x2b,0x8c,0x2c,0xea,0xb0,0x88,0x32,0x72,0x02,0x82,0x00 -,0x27,0x58,0x48,0x16,0x0a,0x06,0x04,0xc1,0x40,0xb0,0x50,0x2c,0x14,0x0a,0x85,0x02,0xc1,0x50,0xa0,0x98,0x28,0x45,0x13,0x85,0x42,0x21,0x30,0xa8,0x84,0x26,0x15,0x09 -,0x85,0x42,0x21,0x31,0x08,0xdf,0xc7,0x5e,0xbd,0xbd,0x3f,0xf6,0xff,0xa6,0x6a,0xaf,0x15,0x78,0xe3,0x37,0x77,0x77,0xd3,0xe3,0xf3,0x5d,0x7b,0x7f,0x1e,0x71,0xc6,0x6b -,0xe3,0xdb,0x81,0x27,0x76,0xee,0x5f,0xd5,0x34,0xdd,0xfd,0x23,0x3d,0x30,0x69,0x3e,0xb4,0xe8,0xed,0xba,0x38,0x8f,0xde,0xb3,0x0b,0xfb,0xbf,0xe7,0xfe,0x1b,0xb1,0xe3 -,0x3f,0x7d,0x19,0x37,0x1e,0x22,0xf9,0x4f,0x3e,0x6b,0xfb,0xe3,0x3f,0xd3,0xbd,0xdd,0xb3,0x83,0x54,0x21,0x47,0xd6,0x37,0x4e,0xe3,0xab,0xff,0x7d,0xdf,0xc4,0x63,0xc9 -,0x3f,0xb7,0xe9,0x70,0x99,0x5e,0xf6,0xff,0xbf,0xcd,0x0e,0x45,0xb8,0x72,0x78,0x08,0x09,0x79,0xc0,0xa5,0x9e,0xb0,0x00,0x09,0x30,0xbd,0x7f,0xfd,0x65,0x43,0xc2,0x79 -,0x00,0x14,0x00,0x1e,0x40,0x0b,0xd1,0x43,0xff,0xf3,0x81,0x20,0x00,0xf3,0x00,0x3f,0xf5,0x00,0xf3,0x14,0x1e,0x60,0x1a,0xce,0xf8,0x07,0x77,0xb8,0x00,0x58,0x2a,0x24 -,0x03,0x80,0xff,0xf1,0x50,0x80,0x30,0x1f,0xfc,0x21,0x0a,0xcf,0xef,0x7e,0x7f,0xef,0x7c,0xb4,0x62,0x28,0x50,0x4c,0x14,0x1b,0x85,0x42,0x83,0x51,0x38,0x50,0x2a,0x14 -,0x21,0x09,0x02,0x42,0x10,0xa8,0x4c,0x42,0x13,0x08,0x88,0xc2,0x21,0x30,0x88,0x9c,0x73,0xe5,0x52,0xa6,0xb3,0x72,0x71,0xdd,0xb2,0x4a,0xd5,0x19,0x67,0xdf,0x7b,0xdf -,0x1a,0xe5,0xc7,0x3c,0x7f,0xd7,0xd8,0x7e,0xfd,0x7d,0x3c,0xda,0x7b,0xbd,0x38,0xfd,0x0d,0xfb,0x90,0xe9,0x1e,0x7f,0xd8,0x68,0xf3,0xdb,0xf3,0x7b,0x3e,0xe7,0x9c,0x7a -,0xb4,0x76,0xd0,0x3b,0xb3,0xd2,0x33,0x4f,0x9c,0xd6,0xbc,0xdc,0x3e,0x44,0xa7,0x6c,0xfe,0xff,0xa5,0xca,0x39,0xb9,0x6d,0x24,0xba,0x58,0xd5,0x2d,0x91,0xc6,0x60,0xbe -,0xc8,0x6c,0x3d,0xb8,0x61,0xdb,0x6f,0x50,0x72,0xea,0xf8,0x89,0x31,0xd3,0x8c,0x09,0xee,0x53,0x97,0xcd,0x52,0xd3,0x56,0xbf,0xf4,0x8e,0x2c,0x72,0x5c,0xa8,0x5f,0x68 -,0xdb,0x2a,0x02,0x03,0xc4,0x03,0xc0,0x0f,0x70,0x77,0x2b,0xb3,0x3f,0x49,0xe3,0xa4,0xa1,0x58,0x76,0x11,0x98,0xf7,0x43,0xf5,0x9b,0x2a,0xa8,0x8a,0xad,0x4c,0xf1,0xf1 -,0x81,0xdf,0x8a,0xf3,0x41,0xb6,0x7e,0xc2,0xa0,0x02,0xa8,0x80,0xa7,0x62,0xa8,0x50,0x2c,0x14,0x0b,0x05,0x42,0xc4,0x40,0xb0,0xd0,0x4c,0x24,0x0a,0x8c,0x46,0x61,0x11 -,0x18,0x44,0x28,0x11,0x20,0x04,0x44,0xe4,0xbb,0xe7,0xfc,0x7e,0x99,0x7b,0xd5,0x2b,0x2c,0x45,0xdc,0xe3,0xdb,0xfd,0xbf,0xd7,0xf6,0xfd,0x7f,0xcf,0xfe,0x95,0x9f,0xaf -,0xc7,0x8d,0x7f,0xb7,0xb0,0x4e,0xfe,0x7d,0xfc,0x31,0xec,0xb6,0xae,0x7f,0x43,0xf5,0x2d,0x83,0xa0,0xf9,0x54,0xf7,0x75,0xb0,0xaf,0xa2,0x70,0x18,0xb2,0xe0,0xdc,0xf0 -,0x12,0x6a,0xe3,0x7f,0x4b,0x59,0x65,0xde,0xfd,0x52,0xde,0xf3,0x58,0xd6,0x5b,0xeb,0xf0,0xfe,0x57,0xc9,0xfb,0x6f,0xcf,0xee,0xf2,0x77,0xae,0x69,0xb6,0x54,0x24,0x8a -,0xa7,0x2d,0xdb,0xcb,0x7e,0xeb,0xbd,0x47,0xb2,0x89,0x15,0xcb,0xc5,0xc3,0xae,0x24,0xf2,0x02,0x38,0x0f,0x00,0x29,0xef,0x88,0x01,0x89,0x38,0xe0,0x0a,0x7c,0x24,0xbb -,0xaf,0xcb,0xff,0x72,0xa8,0xa0,0x02,0xcd,0xa7,0xcb,0x9d,0xff,0xdb,0xb4,0x3b,0x08,0xcc,0xe4,0xef,0x79,0xda,0xf7,0x37,0x25,0x22,0x00,0x14,0xb0,0x01,0xe6,0x08,0x80 -,0x44,0x0e,0xff,0xf1,0x50,0x80,0x2c,0x5f,0xfc,0x21,0x0a,0x8f,0xe7,0x7e,0xff,0xff,0xff,0x65,0x01,0x62,0x21,0x14,0x28,0x16,0x0a,0x0d,0x84,0x81,0x61,0x20,0xd4,0x24 -,0x24,0x11,0x04,0xc6,0x41,0x30,0x89,0x8c,0x22,0x14,0xdf,0x9d,0xeb,0x8e,0x5e,0x7d,0x24,0xaa,0xd5,0x55,0xca,0x15,0x67,0x17,0x5d,0xeb,0x27,0x17,0xdc,0xe3,0xff,0xc8 -,0x07,0x61,0xdb,0xef,0xf6,0xf9,0xb6,0xe5,0xea,0x2e,0x63,0xe3,0x69,0x3d,0x14,0xec,0xd7,0xbf,0xed,0x80,0xb7,0xc4,0x6f,0xc7,0xf5,0x31,0xf2,0x1c,0xc7,0xd0,0x6e,0x8c -,0x45,0xbc,0x13,0xfd,0xd0,0x7f,0xe2,0x25,0x74,0x52,0xd6,0xa4,0xca,0xe2,0x9c,0xcb,0xa8,0xe7,0xb5,0xdd,0xa5,0x21,0xd4,0x34,0x8b,0xc4,0xd6,0x1e,0x15,0xa6,0x58,0x5a -,0xf7,0x9c,0xde,0x73,0x77,0xd0,0xe8,0xf9,0xe1,0x48,0xe1,0xdd,0x60,0x22,0xf5,0xcc,0x9d,0x24,0xd4,0xb6,0x2c,0xef,0x37,0x35,0x13,0xfd,0x7b,0xd7,0x3d,0x77,0x79,0x14 -,0x3b,0xe3,0xb8,0x72,0x42,0xb3,0xba,0x99,0x8b,0x9e,0xee,0xc5,0x76,0x0a,0x2c,0x20,0x5f,0xdf,0x05,0xa6,0x54,0x40,0x18,0x72,0xd2,0xc1,0x4e,0xd1,0x4c,0x25,0xee,0x80 -,0xb0,0x13,0xec,0x67,0x0b,0x05,0x06,0xc1,0x40,0xb2,0x10,0x2a,0x14,0x0a,0x85,0xc2,0xa1,0x70,0x88,0x54,0x22,0x15,0x08,0xa0,0x02,0x21,0x7f,0x11,0xe7,0xd4,0xfb,0xf3 -,0xb2,0x97,0xbb,0xc6,0xb7,0x72,0xaf,0x4f,0x3f,0xef,0xff,0x17,0x5c,0x6d,0xaf,0xaf,0xfa,0xcb,0xc1,0x26,0xbd,0x1b,0xa4,0xec,0xe7,0x87,0x0a,0xfd,0x63,0x3d,0xcf,0xb3 -,0x96,0xe3,0xe3,0xff,0x4c,0xd3,0xff,0x02,0xa4,0x3e,0x39,0xc8,0x53,0x2e,0x29,0xcd,0xaf,0xf5,0x53,0xce,0x2a,0xe6,0x4f,0x26,0xd7,0xd4,0x0b,0x7e,0x8f,0x10,0xb6,0x69 -,0x0a,0xd0,0x87,0xfd,0x46,0x9e,0x73,0x19,0x79,0x9c,0x93,0xec,0x86,0x4e,0x9a,0xf2,0xe1,0xbd,0xcd,0xe2,0xf5,0xfc,0xaf,0xdf,0x5b,0x35,0xc6,0x3a,0x87,0x9b,0x6e,0xd3 -,0x60,0x3c,0xc2,0xc4,0xf0,0xd1,0xe5,0x00,0x00,0xa6,0xf1,0xe4,0x00,0x16,0x05,0x22,0x1e,0x00,0x00,0x0e,0x05,0xe8,0x80,0xbd,0x40,0xe9,0x00,0x20,0x00,0xb8,0x01,0x72 -,0x8a,0x00,0x13,0x38,0xff,0xf1,0x50,0x80,0x2d,0xdf,0xfc,0x21,0x0a,0x8f,0xfb,0xfe,0xef,0xff,0xff,0x63,0x03,0x60,0xa8,0x90,0x2c,0x14,0x23,0x05,0x02,0xa2,0x40,0xb0 -,0x60,0x28,0x26,0x0a,0x08,0x84,0x81,0x21,0x09,0x8c,0x22,0x43,0x08,0x85,0x37,0xc7,0x5d,0xeb,0x5e,0xb8,0xcb,0xac,0xb4,0xca,0x97,0x37,0xc5,0x08,0x92,0xa5,0x6a,0x91 -,0xc7,0xff,0x88,0x4f,0x49,0xa1,0x43,0x8b,0x31,0xb9,0x7c,0x1e,0x2e,0x5a,0x7a,0xb4,0x3f,0x73,0xb7,0x7f,0x13,0x40,0xff,0x60,0x9b,0xa4,0xff,0x89,0xde,0x33,0xcf,0xcd -,0xcb,0xc9,0x1f,0x03,0xec,0xe4,0x02,0xa3,0x92,0x76,0x81,0x08,0xd6,0xbd,0x50,0xd7,0x3b,0xac,0x3f,0xae,0x14,0x2e,0x50,0x4a,0x7c,0x2f,0x2a,0x36,0x1b,0x5d,0x8f,0x60 -,0xc9,0xf5,0xef,0x5e,0xa3,0xb4,0x5d,0xdf,0x89,0x51,0x42,0x0b,0xd6,0xf4,0x63,0xad,0x76,0x6d,0x0f,0xff,0xc3,0x3c,0x35,0x92,0x4e,0x9d,0x76,0xc6,0x67,0xb4,0x59,0x09 -,0xd7,0x5f,0x69,0x12,0xfd,0xc8,0xd9,0x6f,0x02,0x96,0x89,0x34,0x6b,0xa9,0x61,0x0c,0x99,0xa8,0x36,0xbf,0x9d,0x11,0xb1,0x22,0x52,0xb2,0x65,0x2f,0x3a,0xd0,0x80,0x88 -,0x76,0x80,0xf7,0x41,0x00,0x14,0xac,0x67,0x09,0x85,0x02,0x61,0x40,0xc0,0x50,0x2a,0x14,0x0b,0x05,0x02,0xc3,0x50,0xb0,0x50,0x6a,0x27,0x08,0x84,0xc2,0xa1,0x30,0x88 -,0x54,0x20,0x21,0x08,0x08,0x46,0xf1,0x29,0x75,0x75,0x5a,0xdd,0x6b,0x25,0x54,0x5a,0x97,0x27,0x9f,0xf1,0xff,0x1f,0x1f,0x2e,0xbf,0xfe,0x13,0x20,0x7e,0xed,0xfb,0xbd -,0xb3,0x78,0x49,0xe9,0xaf,0x8a,0x3b,0x3f,0xcd,0x6b,0x3f,0xe3,0xfe,0xfb,0xc1,0x11,0xc1,0xd1,0xfc,0x47,0xd2,0x3f,0xaa,0xb1,0xce,0x34,0x67,0xbe,0x4d,0xa7,0xc1,0x71 -,0xae,0x4b,0x81,0x3b,0x79,0x39,0x45,0xb2,0x9a,0x76,0x58,0x81,0x82,0x1e,0x8b,0xee,0x07,0xa6,0x6b,0x0b,0x9a,0xa8,0xa7,0xe8,0xbe,0xec,0x7f,0xeb,0x97,0x3a,0xed,0x28 -,0xfc,0xa3,0xb0,0xda,0x2c,0x9d,0x38,0x2a,0x27,0x88,0x72,0x38,0x39,0x15,0x03,0xcf,0x6a,0x00,0x06,0x63,0xf7,0xe6,0xfd,0x62,0x5e,0xb8,0x00,0x0f,0x0a,0x77,0xab,0xad -,0xb4,0xe3,0x8d,0x97,0x5b,0xf0,0x95,0x8e,0x2e,0x20,0x1c,0x00,0x24,0x02,0x60,0x13,0x0b,0x0e,0xff,0xf1,0x50,0x80,0x2d,0x7f,0xfc,0x21,0x0a,0xcf,0x3b,0x7e,0xff,0xff -,0xff,0xb0,0x70,0xb1,0x10,0xac,0x17,0x0a,0x05,0x82,0xa1,0x60,0xa0,0x98,0x28,0x42,0x0a,0x04,0x82,0x81,0x20,0xa8,0x44,0x26,0x21,0x09,0x84,0x46,0x62,0x10,0x98,0x44 -,0x4b,0xee,0xfa,0x9b,0x9a,0xcc,0x95,0x5a,0xc9,0x37,0xaa,0xbc,0x96,0xa7,0x5b,0xe3,0x37,0xc6,0x4b,0xd5,0xfa,0xf3,0xff,0xe9,0xf4,0x23,0xed,0x74,0xf7,0x7a,0x7d,0x7f -,0xed,0x7d,0xa7,0xf0,0x4f,0xdf,0x71,0xee,0x41,0xf5,0xae,0x85,0x62,0x5a,0xbb,0xee,0x6b,0xa6,0x37,0x95,0x42,0xe7,0xdc,0xd1,0x29,0x07,0xd2,0xb8,0x5f,0x85,0xde,0x67 -,0xff,0x70,0x7a,0x94,0x8c,0xff,0xac,0x87,0x65,0xc0,0x9e,0x57,0x64,0x70,0x83,0x1e,0x30,0xba,0xae,0x0e,0x6e,0x3f,0xac,0x5a,0xbd,0xe7,0x00,0x27,0x49,0xec,0x92,0x6a -,0x78,0x9e,0xed,0xbd,0x75,0x1c,0x36,0x63,0xf4,0xbe,0x13,0xd4,0x90,0xe0,0xb2,0x92,0xfe,0xfb,0x6c,0x7b,0xbd,0x7f,0x16,0x03,0xd8,0x25,0x48,0x20,0x9f,0xa9,0xd1,0x79 -,0xa3,0x5b,0x83,0xd6,0xf5,0x1a,0x96,0xd9,0x1d,0x00,0x77,0x9d,0xe6,0x36,0x0d,0x7e,0xb8,0x07,0xae,0x04,0x49,0x23,0xc8,0x7a,0xc9,0x89,0x80,0x48,0x0a,0x84,0x0b,0x0a -,0x02,0xc1,0x70,0xb0,0xd0,0x2c,0x63,0x0b,0x0d,0x42,0x82,0x30,0xa0,0x54,0x62,0x35,0x08,0x98,0x06,0x21,0x00,0xb5,0xef,0x17,0x19,0xc6,0xca,0x89,0x4a,0xba,0xb4,0x8d -,0x79,0x75,0xf6,0xf3,0xaf,0xfa,0xff,0xaf,0xfe,0x5c,0x41,0xf3,0x77,0xf3,0xf0,0xcc,0x5e,0x3e,0x3f,0xaf,0x50,0x4f,0x4e,0x83,0xd2,0x3f,0x0e,0xe1,0x6d,0xb4,0x7a,0xc1 -,0xe6,0xd9,0x8c,0xd6,0xf1,0xbe,0xba,0x12,0x73,0xd2,0xba,0x64,0x3f,0xf1,0xf8,0x29,0xd7,0x3a,0x5e,0xf8,0x7c,0x8d,0x52,0xb7,0xa6,0x45,0xe7,0x57,0xc4,0xf9,0x71,0x9f -,0x90,0xfc,0x5f,0xd4,0x5b,0xb2,0xc7,0xf9,0x55,0x7f,0x87,0xe5,0xfb,0xcf,0xd1,0xf1,0x35,0xd4,0xf4,0x7c,0xec,0x42,0x7e,0x07,0x2b,0x0e,0x51,0xcd,0xa1,0xbe,0x00,0xf3 -,0xe0,0x0e,0x45,0xb4,0x41,0x19,0x03,0x9c,0x51,0x80,0x1d,0x39,0x8f,0x48,0x90,0x01,0x4b,0x4d,0x10,0x45,0x70,0x01,0x5b,0x13,0x00,0x04,0x80,0x51,0xc0,0xff,0xf1,0x50 -,0x80,0x2c,0xff,0xfc,0x21,0x2a,0xcf,0xcf,0xfc,0xf7,0xbf,0xfe,0xb2,0x80,0xb8,0x58,0x68,0x25,0x0a,0x09,0x82,0x81,0x61,0x21,0x20,0x28,0x37,0x0a,0x0c,0xc2,0x21,0x20 -,0x89,0xcc,0x22,0x23,0x08,0x8d,0xc7,0x37,0x77,0x9c,0x55,0x52,0xa5,0xe5,0x12,0x49,0x92,0xc4,0x94,0x27,0x5b,0xf6,0xe7,0x7f,0xf9,0xff,0x90,0x86,0xa2,0xfb,0x8f,0x27 -,0x38,0xf4,0x78,0xaf,0x37,0xe5,0xee,0x3c,0x3e,0x80,0xe4,0x18,0x1f,0xfb,0x37,0x7a,0xe3,0x7a,0xed,0x16,0x8a,0x5a,0xbf,0xc7,0xff,0x3f,0x24,0xe8,0xfc,0x8b,0xf0,0x20 -,0xdc,0xd0,0x84,0xea,0x5e,0xb1,0xaf,0xa2,0xf6,0xcd,0x20,0xd6,0xb4,0xe5,0x15,0x1b,0xd0,0xf2,0xc1,0x33,0x3b,0xf0,0x46,0x18,0x7f,0xfd,0xb7,0xd4,0xcc,0x46,0x76,0x7b -,0x28,0x24,0xc4,0xfc,0xe9,0x0e,0xa1,0xea,0xee,0xb8,0x8a,0xeb,0x72,0x35,0x4a,0xe1,0xc4,0x5a,0x29,0xca,0x28,0xdf,0xbd,0xeb,0x2e,0x96,0x5e,0x8d,0xb2,0x2d,0x4f,0x8a -,0x25,0xa2,0x51,0xea,0x99,0x39,0xd0,0x8c,0x03,0x16,0x1a,0x05,0xbb,0xe4,0x65,0x21,0x0e,0x64,0x17,0x01,0xf6,0xa1,0x2a,0xca,0xa0,0xb0,0x04,0xc0,0xa7,0x51,0x30,0xdc -,0x2c,0x24,0x0b,0x09,0x04,0xc3,0x41,0x30,0x90,0x8a,0x14,0x11,0x84,0x46,0x61,0x11,0x98,0x44,0xee,0x72,0xbe,0xbe,0x5f,0x13,0x79,0x57,0xbb,0xde,0xa8,0x59,0x77,0x5a -,0xef,0xf1,0x37,0x7d,0x6b,0xed,0xfe,0xfc,0x7f,0x6d,0x3f,0x10,0x3e,0xbf,0x7b,0x4c,0x9e,0x84,0xc3,0xf5,0xdf,0xc2,0xff,0x1e,0xce,0x7f,0x98,0x1e,0x3b,0x2f,0x6a,0x78 -,0xbf,0xdd,0xfe,0xd0,0x77,0x55,0x30,0xbb,0x88,0x5f,0xef,0xc1,0x47,0x49,0x79,0x3d,0xdf,0xc9,0x7c,0xf7,0xc2,0x8e,0x06,0xaf,0x58,0x51,0xee,0x2f,0xf5,0x7e,0x88,0x77 -,0x83,0xf5,0x96,0x19,0xf6,0xf0,0xbc,0x61,0xaf,0x04,0x31,0x5b,0xdf,0x13,0xa7,0x09,0x71,0xe6,0x57,0xe5,0xa8,0xac,0xb3,0xe5,0xe1,0x55,0xc7,0x1c,0x74,0x79,0xeb,0x9f -,0xbc,0xc6,0xbf,0xf4,0xae,0x20,0x52,0x1a,0x00,0x53,0x98,0x1f,0xcb,0x03,0x6c,0x02,0x90,0x33,0xe8,0x00,0x1d,0xc8,0xc1,0x10,0x00,0x28,0xd1,0x4b,0x00,0x1b,0x65,0x10 -,0x0a,0x80,0xa0,0x1c,0xff,0xf1,0x50,0x80,0x2f,0xbf,0xfc,0x21,0x4c,0xfe,0xfd,0xfd,0x4c,0x36,0x88,0x85,0xb4,0x89,0x0b,0x68,0x79,0x72,0x10,0x22,0x74,0x5f,0x66,0x67 -,0x0c,0x5d,0x94,0x4a,0x79,0xbb,0x5e,0x74,0x01,0x15,0x48,0xc8,0xa6,0x74,0x0b,0x9d,0x1a,0xe1,0xdc,0xb1,0x52,0x7d,0x91,0xd3,0x9f,0x0b,0xed,0x9c,0x98,0xb1,0x74,0x36 -,0x17,0xa3,0xeb,0xb8,0x9d,0x33,0x29,0x66,0x9b,0x12,0xf2,0x53,0x26,0x02,0x29,0xd8,0x92,0x9d,0xa5,0xd5,0x59,0x1e,0xaa,0x74,0xca,0x85,0xf5,0x29,0xea,0x2e,0xa7,0x1f -,0x5a,0x22,0x21,0x08,0x58,0xf7,0x85,0x51,0x94,0x09,0xc5,0x21,0x00,0x24,0xa6,0x22,0xe2,0x0a,0x06,0x42,0x2a,0x25,0xde,0xca,0x50,0x6f,0x84,0xaf,0x31,0x1a,0x09,0x08 -,0xd6,0x6b,0x00,0x1b,0x6e,0x68,0x05,0x4f,0x0e,0x88,0xae,0xb5,0xf7,0xca,0x08,0xae,0x2e,0x97,0xb9,0xf5,0x8c,0xaf,0xe5,0x05,0x7a,0x61,0xae,0xb3,0x51,0xdb,0x59,0xf2 -,0x19,0xae,0xc7,0x28,0x2c,0xbf,0x95,0xe8,0xda,0xa7,0x0c,0xff,0xdd,0x2b,0x44,0x25,0x15,0x33,0x17,0x5b,0x34,0x65,0xa2,0x73,0xf2,0x60,0x9c,0x09,0x84,0x0b,0xe1,0x2f -,0x72,0x33,0x30,0xdc,0x9e,0x62,0x8a,0x1b,0x34,0x62,0x8c,0x95,0x12,0xe5,0xe9,0x62,0x86,0xdf,0xb2,0x94,0xce,0xd1,0x2c,0x37,0x69,0xd0,0xb2,0x58,0x8a,0x6d,0x89,0x47 -,0x3d,0xe9,0xd4,0x99,0x9b,0x3e,0xaa,0xfd,0x4c,0xbd,0x54,0x12,0xa4,0xce,0x4e,0x47,0x1c,0xfb,0x79,0x37,0xcd,0x2e,0x9c,0xdc,0x19,0xb6,0x69,0x93,0xb7,0x70,0x6a,0xaf -,0x5f,0xe8,0xb3,0xf2,0xfd,0xa8,0x1a,0x73,0xc6,0x8f,0x2a,0x72,0xcd,0x16,0xfc,0x3b,0xec,0xdd,0xb2,0xe8,0x10,0xf1,0xee,0x5d,0x34,0xcf,0x83,0xe1,0xe9,0x19,0x80,0xf5 -,0xaf,0x9f,0xbd,0x86,0xbf,0x34,0xee,0x1b,0xd1,0xab,0x6d,0xe2,0x40,0x73,0xd0,0xb6,0x15,0xe9,0x3a,0xbf,0x96,0x81,0x7d,0xa7,0x52,0x73,0x84,0x9e,0xbc,0x7d,0xd9,0xa7 -,0x03,0x33,0x7b,0xed,0xce,0x0b,0x8f,0x72,0x87,0x49,0x6e,0xf4,0xe2,0x49,0x66,0x16,0xd1,0xb5,0xe4,0x81,0x58,0x8d,0x8f,0xb3,0x1d,0x7a,0xe5,0x6c,0x3b,0x1c,0x6d,0xc4 -,0xad,0x56,0xee,0xae,0x55,0x36,0xa5,0xc5,0x5c,0xeb,0x67,0xb8,0x1c,0x8c,0x05,0x0d,0x06,0x63,0xc4,0x9f,0xc2,0x42,0x41,0x03,0x8c,0x71,0x8e,0xec,0x4f,0xde,0x1c,0x43 -,0x80,0xff,0xf1,0x50,0x80,0x2d,0xff,0xfc,0x21,0x6a,0xcf,0xde,0xf7,0x7f,0xdf,0xfe,0xaf,0x40,0xb0,0x90,0x4c,0x24,0x13,0x05,0x04,0xc1,0x40,0xa8,0x60,0x28,0x43,0x0a -,0x08,0x82,0x82,0x20,0x98,0x54,0x22,0x23,0x08,0x9c,0xc4,0x22,0x77,0xac,0x95,0xaa,0x9d,0xf5,0xd7,0x88,0xdf,0x15,0x79,0xc6,0x11,0x10,0xe3,0x99,0xb5,0xd6,0xbd,0xb3 -,0x5a,0x1a,0x87,0xaa,0x7f,0x4b,0x7f,0x5c,0xff,0x9b,0xe1,0x40,0xf7,0x7c,0xab,0xee,0x34,0xfe,0x7f,0xf1,0xed,0x3b,0xef,0x1b,0xd3,0x75,0x89,0xe2,0xeb,0xae,0x2f,0x08 -,0xd3,0x45,0x78,0xf3,0x7c,0x57,0xfa,0xc7,0x0b,0x87,0xd0,0x73,0xe9,0x7f,0xeb,0xfc,0x5f,0x7d,0x4f,0xed,0x0d,0xcc,0x9e,0xa5,0xbf,0x66,0xba,0xcf,0xa3,0xe7,0xee,0x5f -,0x8f,0x6f,0x1a,0x37,0x11,0xe0,0x0d,0x3d,0x65,0x9d,0x5c,0x47,0x00,0xc8,0xe7,0x09,0xb7,0xda,0x7e,0x02,0xbb,0x34,0xe9,0x65,0x89,0x26,0xf2,0x39,0x62,0xc6,0x49,0x8e -,0x1e,0x40,0x7e,0xc8,0xfa,0xd8,0x2c,0x06,0x17,0x6a,0x55,0x75,0xed,0x58,0x2a,0x9c,0xd7,0xbf,0x74,0x6a,0x51,0xae,0xc2,0xb4,0xe5,0x2b,0xe1,0xbf,0x02,0xfc,0xde,0x19 -,0x40,0x3d,0xd0,0x07,0xd7,0x00,0x98,0x17,0x02,0xa1,0x08,0xc3,0x41,0x30,0x60,0x2a,0x14,0x13,0x09,0x42,0x87,0x51,0x18,0x84,0x2a,0x11,0x09,0x90,0x42,0x62,0x12,0xba -,0xfc,0xd7,0xb7,0xe7,0x8e,0x24,0xf5,0xd5,0xe5,0xf8,0xd2,0xaa,0xd2,0x55,0xcf,0x2f,0x57,0x65,0xf1,0x89,0xa9,0xbf,0x61,0xc9,0xf8,0x2f,0xf2,0x7e,0x31,0xbd,0x5f,0xd6 -,0x89,0x36,0xfd,0x2b,0xb0,0xe7,0xd7,0xa6,0x69,0x28,0x22,0xdf,0x66,0x8e,0xe3,0xfd,0x6e,0xe1,0x45,0x6b,0xe1,0xf0,0xe3,0x78,0x73,0x63,0x97,0x09,0x4f,0xcd,0xd4,0x1d -,0xc8,0xef,0xbd,0x7d,0xc8,0x74,0x9f,0x94,0x44,0x68,0xf7,0x86,0xc7,0x2e,0xf4,0xe5,0xf6,0xcf,0x8a,0xbf,0x75,0x67,0x1f,0x16,0xcb,0xc4,0xcb,0x98,0x57,0x64,0x4f,0x17 -,0xb6,0x1e,0xaa,0xb5,0x35,0x7b,0x88,0x8c,0xb8,0x04,0x43,0x5f,0x4f,0x20,0x51,0x51,0xbe,0x9a,0x42,0x28,0x3c,0x58,0x84,0x57,0xb9,0xdd,0x55,0x3b,0xbc,0x42,0xe3,0xbf -,0x70,0x40,0x07,0xb8,0x03,0xba,0x1c,0x80,0xa0,0x12,0x35,0x00,0x54,0x5d,0x00,0x38,0xff,0xf1,0x50,0x80,0x2d,0x3f,0xfc,0x21,0x0a,0xcf,0xff,0xff,0x9f,0xff,0xbf,0xae -,0x81,0x30,0xdc,0x2c,0x24,0x0c,0x06,0x42,0xa1,0x80,0xa8,0x50,0x8a,0x24,0x12,0x85,0x02,0x41,0x30,0x90,0x45,0x26,0x11,0x33,0xb9,0xad,0xd3,0xef,0xeb,0x7a,0x9c,0xdd -,0xd6,0xa9,0xae,0xe4,0x48,0x44,0x94,0xcb,0xf3,0xdc,0x93,0xcf,0x01,0x5a,0x7c,0xd5,0xa7,0x0a,0xfc,0x3e,0x91,0xde,0x1b,0x9f,0x2a,0xf6,0x95,0xeb,0xbe,0x92,0x2e,0xbe -,0x47,0x24,0xbb,0x72,0x83,0xe2,0xe5,0xcb,0x9e,0xf5,0xbf,0xb0,0xbf,0xe4,0x5b,0xbb,0x71,0xba,0xbe,0x6b,0x8b,0xd6,0x60,0xdf,0xa0,0x86,0xaf,0x3e,0x00,0x57,0x51,0x31 -,0x4d,0xe1,0x2e,0xe8,0x30,0x98,0xd7,0xbd,0xeb,0xb8,0xd1,0x0f,0x4f,0x74,0x93,0x69,0xc0,0x62,0x3f,0x64,0xbf,0x85,0x53,0xd4,0x8d,0xe7,0x8e,0x44,0xe3,0x16,0xd8,0xc0 -,0xce,0xe3,0xcb,0xd4,0x19,0x8a,0x4a,0x4c,0x0a,0xa9,0x6b,0x08,0x6c,0xd4,0x55,0x34,0x0d,0xbe,0x4a,0x62,0x82,0x74,0x1e,0xb8,0x0c,0x43,0x10,0xa4,0x46,0x52,0x64,0xce -,0xcb,0x00,0x2e,0x17,0x02,0xa0,0xc2,0xe1,0x62,0x38,0x58,0x2a,0x16,0x0b,0x89,0x82,0x82,0x70,0xb0,0x50,0x4e,0x14,0x12,0x85,0x06,0xa1,0x30,0x88,0x4c,0x42,0x33,0x18 -,0x84,0xc2,0x24,0x6e,0xb5,0x8a,0xe9,0xba,0x55,0xd6,0x5d,0x69,0x92,0x4a,0xbd,0x4e,0x37,0x99,0xf0,0xed,0xbb,0xeb,0x85,0x70,0x3f,0xc5,0xd8,0x07,0xbf,0x5d,0x73,0xfa -,0x3e,0x0e,0xf1,0xf5,0x5f,0xed,0x4f,0xa3,0xe5,0x4d,0x2f,0x7d,0x77,0xfa,0xa7,0xdc,0x1f,0xfd,0x72,0xf1,0xfe,0xb9,0xdd,0x76,0x98,0x8e,0xfa,0x38,0x7f,0x5f,0xfd,0xd7 -,0x22,0xe5,0x77,0xb9,0xbd,0x74,0xfb,0x51,0x59,0x7d,0x6b,0x9f,0x77,0xc2,0xbb,0x72,0x5b,0x43,0xb3,0x94,0x49,0xc7,0x45,0xd6,0x0e,0xf2,0xea,0x7d,0x80,0x8a,0x54,0x09 -,0xbf,0x5f,0x5b,0xf3,0x38,0x6a,0x00,0x72,0xf3,0x81,0xf9,0x3f,0xea,0x46,0x69,0xde,0xc0,0xaf,0xf2,0x0b,0x98,0x7d,0xc4,0xce,0xe9,0xf9,0x93,0x94,0x91,0x0a,0x05,0x17 -,0x82,0xbf,0xb6,0x01,0xee,0xde,0xa4,0xa3,0x2d,0xb1,0xa5,0xf0,0x2c,0x9d,0x67,0x61,0xee,0x00,0x11,0x17,0x00,0x09,0xa9,0xd0,0x07,0xff,0xf1,0x50,0x80,0x2f,0x7f,0xfc -,0x21,0x0a,0xcf,0xff,0xff,0x3f,0xff,0xfc,0xae,0x80,0xb1,0x1c,0x2a,0x14,0x0a,0x85,0x82,0xe1,0x60,0xb8,0x58,0x28,0x16,0x0a,0x19,0x42,0x83,0x20,0x88,0xcc,0x24,0x11 -,0x21,0x84,0x46,0x61,0x11,0x3b,0x9a,0xe6,0x5f,0xe3,0xf3,0x9a,0xac,0xbd,0x14,0xc5,0xdd,0x49,0x50,0xd6,0xe5,0x4a,0xf6,0xed,0x7a,0xf3,0xc0,0x16,0x9f,0xe5,0x48,0xf9 -,0x75,0xcf,0xf4,0x5e,0xf4,0xfb,0xfe,0xaf,0xe2,0x7f,0x27,0xb1,0x65,0x53,0x45,0x9b,0xd1,0xf6,0xb9,0xbb,0x6f,0x90,0x8d,0xf5,0x03,0xc5,0x65,0xf0,0x36,0x9d,0x83,0x8d -,0xe3,0xf6,0x7a,0xe4,0xcc,0xf4,0xbf,0x91,0xff,0x6a,0x23,0xa9,0x00,0xf9,0x15,0x66,0x33,0xec,0x85,0xd3,0x55,0xb6,0x54,0xa2,0x26,0x2f,0xb8,0x49,0x2d,0xe3,0x8f,0x9c -,0xde,0xf0,0xb6,0x72,0x55,0x0f,0x9f,0xff,0x77,0xb3,0x34,0x4d,0x95,0xf3,0xdf,0xd7,0xd5,0x64,0x17,0x9c,0x45,0xbc,0x64,0x91,0xea,0x07,0x81,0x31,0x3c,0x16,0x95,0x43 -,0x2f,0x34,0x46,0x56,0xef,0x7c,0xab,0x18,0x4b,0x54,0x52,0xa7,0x74,0x97,0xae,0x08,0xce,0xf3,0xb9,0xb0,0x62,0xaa,0x60,0x75,0xee,0xcd,0x30,0x26,0x04,0x80,0xa8,0x40 -,0xb0,0x90,0x2c,0x18,0x0b,0x09,0x42,0x81,0x70,0xa0,0x98,0x28,0x16,0x0a,0x05,0x82,0x85,0x50,0xa0,0x54,0x26,0x11,0x09,0x84,0x42,0x61,0x10,0x98,0x44,0x46,0x11,0x0a -,0x84,0x4a,0xab,0xee,0xa4,0xea,0x78,0x93,0x9d,0x5e,0x51,0x2a,0x25,0xce,0x3d,0xbb,0x9b,0xbc,0xe7,0xca,0xef,0x55,0xd5,0x70,0x37,0xdd,0x8a,0x3c,0x3e,0x5b,0xa2,0xde -,0x81,0x93,0xd3,0xf4,0x7f,0x06,0xf5,0xf7,0x35,0x8d,0xe7,0x56,0xfd,0xd3,0x98,0xf6,0xbd,0x49,0xfe,0xce,0x9a,0xb8,0x4d,0x5f,0xd7,0x74,0x5d,0x50,0xbe,0x4e,0x8d,0xa0 -,0xbe,0xdf,0xfe,0x4e,0xc1,0x3f,0xe9,0xfa,0x2e,0xbd,0xf2,0x79,0xe6,0xe7,0xfe,0x1f,0x13,0xad,0xdf,0xb6,0xbf,0x03,0x8c,0xba,0xe3,0xb5,0xcd,0x5f,0x74,0xeb,0xcb,0xdb -,0x42,0x78,0x87,0x73,0x9b,0x88,0x77,0xbf,0xff,0x0c,0xeb,0x62,0x08,0x77,0x0a,0xd2,0x78,0xa2,0x22,0xf5,0xfb,0xd1,0x02,0x2b,0x59,0x52,0xe1,0xf9,0x44,0xd3,0x87,0xb6 -,0xe2,0xc4,0x91,0x3c,0x0b,0x84,0x4a,0x03,0xcc,0x00,0x00,0x1b,0x6a,0x09,0x2e,0x02,0x40,0x11,0x03,0x80,0xff,0xf1,0x50,0x80,0x2e,0x5f,0xfc,0x21,0x0a,0xcf,0xff,0xf7 -,0xff,0xff,0xfc,0xae,0x63,0xa0,0x54,0x2c,0x18,0x0b,0x0d,0x43,0x01,0x40,0xb0,0x50,0x2c,0x12,0x0a,0x8d,0x02,0xa1,0x21,0x88,0x4c,0x22,0x93,0x08,0x89,0xde,0xaa,0xb4 -,0xbf,0x3c,0xf2,0xcf,0x39,0xbd,0x29,0x21,0x25,0x48,0xbc,0xab,0xdd,0xdc,0x3c,0xf9,0xe8,0x27,0xab,0x67,0x4c,0xb9,0xeb,0xe5,0xc7,0xf5,0xf3,0x38,0xe1,0xe5,0x3a,0xcb -,0xcb,0xcf,0x50,0x15,0x53,0x97,0xc2,0x07,0xf6,0x97,0x8b,0x71,0x2f,0x7c,0xab,0xc7,0x78,0x46,0x2f,0xad,0x57,0x50,0xa3,0x2f,0x9d,0xbb,0xd8,0x0b,0x20,0xed,0x2a,0xfb -,0x73,0xf5,0x1d,0x8a,0x9d,0x4f,0xbe,0xb9,0x5c,0xc9,0xc1,0x9c,0xa9,0x7d,0x03,0x2d,0xdc,0xb1,0x99,0x2c,0xaa,0xe1,0x31,0xc9,0xac,0x71,0xc4,0x2b,0x09,0x0b,0xcc,0x80 -,0x8f,0x88,0x4a,0x89,0x58,0x67,0xa0,0xb9,0xf4,0xa9,0xc5,0x2b,0x94,0x47,0x6a,0x97,0x8d,0x60,0x5d,0xaa,0x81,0xb2,0x9a,0x6e,0x2f,0x65,0x60,0xf3,0x42,0xd3,0xb2,0xb3 -,0x42,0xd5,0x49,0x48,0xda,0x01,0x25,0x44,0x93,0x51,0x43,0x2d,0xde,0xe8,0x01,0x01,0x10,0x29,0xd0,0x4c,0x38,0x0b,0x05,0x02,0x41,0x60,0xb8,0x58,0x28,0x36,0x0a,0x05 -,0x84,0x81,0x60,0xa0,0x54,0x28,0x12,0x0a,0x05,0x44,0x21,0x51,0x18,0x54,0x22,0x25,0x08,0x9d,0xcd,0x57,0x1c,0xbe,0x2f,0xb7,0x32,0xeb,0x38,0xdd,0xef,0x45,0x4d,0x38 -,0xfa,0xf7,0xe3,0x7a,0x6b,0x35,0x5e,0x7f,0xaf,0xeb,0xdf,0x43,0xab,0xfc,0xb1,0xf9,0x3d,0xf6,0xe8,0xf6,0x66,0x99,0xbc,0xdd,0xaf,0xd2,0xfd,0x5e,0xdd,0xef,0x68,0x82 -,0xef,0xf8,0x5f,0xf8,0x3f,0x3f,0x7f,0x7a,0xe8,0x8d,0xd3,0x45,0xda,0x43,0xb7,0x8d,0x23,0x31,0xc9,0xc9,0xd2,0xea,0x9f,0xf7,0x7a,0x2b,0x9a,0xac,0xfc,0xdd,0x03,0xa2 -,0xec,0xbd,0x87,0xb3,0x8f,0x99,0xcf,0xb3,0x2d,0x27,0xdb,0x7f,0x79,0x35,0xe8,0x3e,0x45,0xe3,0x4f,0x63,0xd6,0x2d,0x5f,0x97,0x71,0xc8,0x56,0xb5,0x0e,0x61,0xe4,0x01 -,0x19,0x4c,0x12,0xf3,0xe4,0x07,0x13,0x98,0x00,0x78,0x03,0xba,0xf5,0x80,0x3c,0xc0,0x00,0x62,0x03,0x48,0x3c,0x40,0x00,0x88,0x02,0xb1,0x0b,0x00,0xc0,0x92,0x4b,0xc4 -,0x26,0x0a,0xa8,0x33,0x80,0xe0,0xff,0xf1,0x50,0x80,0x2a,0x5f,0xfc,0x21,0x0a,0xcf,0xef,0xf3,0xbf,0xff,0xff,0xae,0x71,0x30,0x90,0x2e,0x13,0x0b,0x15,0x44,0x81,0x70 -,0xa0,0x58,0x48,0x12,0x12,0x04,0xc2,0x44,0x14,0x18,0x44,0xcf,0x12,0x6b,0xbe,0x35,0x4d,0xc8,0xf3,0xf3,0xa5,0x71,0x4a,0xba,0xba,0x92,0x55,0x4d,0x64,0xf6,0xf5,0x1c -,0x7c,0x70,0x1f,0x07,0xbb,0x96,0xf2,0x1e,0xef,0x89,0x7b,0x37,0xe6,0xdf,0x6f,0x11,0xb7,0xbf,0xfe,0x2a,0x1a,0x11,0xe9,0x6b,0xeb,0x8f,0x56,0x69,0xd0,0x2e,0xfa,0x73 -,0x69,0xdf,0xfb,0xba,0x70,0x10,0x14,0xa7,0x50,0x29,0x0d,0x0e,0x69,0x9c,0xff,0x0e,0x72,0xdb,0xba,0x80,0x3f,0x05,0xcb,0x3e,0x3b,0x49,0x74,0x6f,0x5a,0x60,0x5c,0xcd -,0x86,0x9a,0x4c,0x86,0xc1,0x86,0x4f,0x5b,0xd4,0xd6,0xae,0xb0,0x31,0xea,0x89,0xb5,0x03,0x1a,0x72,0xe5,0x7a,0x17,0x36,0x64,0x9a,0xc4,0x10,0x2b,0x79,0x49,0x01,0x48 -,0x40,0xad,0x85,0x4a,0x5a,0x91,0x54,0x3d,0x70,0xa0,0x2d,0x7d,0xab,0x02,0x25,0x0b,0x89,0xa8,0x02,0x21,0x40,0x2a,0x14,0x2c,0x24,0x0b,0x0d,0x44,0x81,0x50,0xb1,0x20 -,0x28,0x26,0x0a,0x0d,0x42,0x82,0x31,0x88,0x4c,0x6a,0x13,0x08,0xa5,0x5b,0xdf,0x9e,0xf3,0xf1,0xbc,0x9b,0x89,0xbe,0x39,0x85,0xc4,0xd3,0xcf,0x5e,0xa9,0xd6,0xfb,0xd7 -,0xb4,0xbd,0xeb,0x3a,0x0f,0x8f,0x39,0xaa,0xf5,0xff,0xc7,0xab,0xf5,0xf1,0x49,0xbe,0xef,0x77,0xc5,0xe0,0xf1,0xe4,0xe5,0x52,0xae,0xd2,0xd7,0xc8,0xf5,0x54,0x25,0xae -,0x7a,0x8e,0x1c,0xd2,0xcb,0xe8,0xdf,0x70,0xf9,0x06,0x94,0xf9,0x0e,0xb7,0xae,0x51,0xbf,0x41,0xfc,0x4c,0xe7,0xc7,0x7d,0xa7,0x2c,0xa7,0xb4,0x75,0x75,0xc5,0x12,0xf9 -,0x81,0x9d,0x17,0x11,0xed,0x97,0x47,0x60,0x8f,0xd9,0xfc,0x69,0xce,0x7b,0x71,0x0f,0xed,0xbf,0x0e,0x6f,0x76,0xa2,0x33,0x5a,0x41,0x60,0xef,0x14,0x77,0x8a,0x05,0x95 -,0xee,0x1e,0x00,0x00,0x0f,0xb6,0xee,0x4c,0x49,0x1d,0x21,0x23,0x78,0xa8,0x02,0x40,0x02,0xe4,0xc0,0x0b,0x94,0x01,0x60,0x1c,0xff,0xf1,0x50,0x80,0x2b,0xdf,0xfc,0x21 -,0x0a,0xcf,0x57,0x76,0xbf,0xff,0xff,0xb2,0x60,0xa0,0x58,0x28,0x16,0x0b,0x85,0x04,0xe1,0x60,0xc0,0x58,0x2a,0x14,0x0b,0x0d,0x02,0xc1,0x21,0xa8,0x50,0x46,0x12,0x08 -,0x88,0xc2,0x24,0x30,0x8a,0x14,0xd4,0xef,0x5f,0xbf,0xed,0xac,0xad,0x3c,0xfc,0xdc,0xde,0xae,0xad,0x2f,0x76,0xf8,0xf0,0xab,0x92,0x84,0xfd,0x7d,0x82,0x75,0x7e,0xa4 -,0x9f,0x0f,0xa0,0xfb,0x7d,0x1e,0xa9,0xfe,0xbd,0x0f,0xdb,0x2d,0xf6,0x69,0xc8,0x00,0x94,0x3d,0xde,0xd6,0x3c,0xe3,0x46,0xd0,0xbc,0x23,0xf8,0xf7,0xf5,0x02,0xaa,0xed -,0x0d,0x72,0x89,0x8e,0x40,0x7d,0xa7,0x7d,0xdf,0x4c,0x3c,0x68,0xc7,0xeb,0xc7,0x23,0x1c,0xdd,0x6c,0x92,0xbe,0x64,0x7a,0x05,0x65,0x74,0x1a,0xaf,0xe3,0x5a,0xf6,0x68 -,0xf7,0x26,0xc7,0x81,0xb6,0xf2,0xf8,0xb2,0x10,0xfb,0x4d,0x19,0x92,0x0b,0xfb,0xae,0x73,0x6d,0x2e,0xd3,0x05,0xe9,0x72,0x74,0x72,0x20,0x24,0xa2,0x21,0xfd,0x58,0xa9 -,0x32,0xc1,0xee,0x09,0x20,0x24,0x05,0x13,0x14,0x5c,0xea,0x00,0x04,0x2f,0x60,0x28,0x48,0x2c,0x54,0x0b,0x05,0x42,0xc3,0x41,0xb0,0x50,0x2c,0x34,0x22,0x84,0xc2,0xa2 -,0x32,0x08,0x8c,0x22,0x87,0xaf,0x19,0xf1,0xea,0xf5,0x3c,0xfd,0xaa,0xee,0xfb,0xd6,0x54,0x71,0x4b,0xb7,0x19,0x5a,0xad,0xba,0xdc,0xae,0x8e,0xac,0x7a,0x9f,0xbb,0x64 -,0xbf,0x3e,0x19,0xfb,0xfe,0xe3,0xff,0x46,0xa4,0xf6,0xb8,0xf2,0xf5,0x20,0xd9,0xd7,0x5b,0x65,0xce,0xb4,0x36,0xcb,0xfd,0x8f,0xff,0xfc,0xa6,0xb2,0x93,0x8d,0x3f,0xf4 -,0x0d,0x63,0x76,0xa0,0x1e,0x87,0x80,0x55,0xda,0x72,0xae,0xa6,0xfc,0x6f,0xd8,0x69,0xf1,0xd7,0x9b,0xcf,0xe5,0xfe,0x1a,0xd4,0xd2,0x1e,0xea,0xb7,0x80,0x8b,0x44,0x47 -,0x17,0x0e,0x25,0xad,0xef,0x28,0x00,0xfb,0x78,0x01,0xe4,0x01,0xef,0x26,0x7b,0xa7,0x7a,0x5d,0xc0,0xa9,0xe8,0x99,0xcf,0x75,0xed,0xc2,0x85,0x29,0x2a,0x10,0x14,0x56 -,0x90,0x0f,0xb3,0x81,0x37,0x7b,0x05,0x91,0x01,0x74,0x53,0x98,0x09,0x40,0xb2,0xd0,0xac,0xc2,0x40,0x13,0x03,0x80,0xff,0xf1,0x50,0x80,0x2c,0xdf,0xfc,0x21,0x0a,0xcf -,0xbe,0x68,0xfe,0xff,0xfc,0xab,0x30,0xc0,0x58,0x6e,0x14,0x0a,0x85,0x82,0xa1,0x61,0xa8,0x50,0x2c,0x15,0x0a,0x05,0x82,0x83,0x50,0xa0,0x48,0x62,0x53,0x10,0x94,0xc2 -,0x23,0x7c,0xb5,0x7c,0xf5,0x2b,0x5e,0x33,0x5c,0x3b,0xd6,0x67,0x52,0x45,0x5e,0x4b,0xbd,0x77,0xf1,0x9d,0xcd,0x55,0xf5,0xeb,0xeb,0xd8,0x7f,0x8b,0x4c,0x09,0xfd,0xbb -,0x8f,0x57,0x9f,0xda,0x8e,0x58,0xf2,0xd0,0xdd,0x6e,0x8e,0xab,0x92,0x5f,0xb0,0xab,0xdb,0x47,0xf5,0x1b,0xea,0xb5,0x68,0x32,0x63,0xe8,0x7c,0x29,0x2e,0xd3,0xee,0x8a -,0x38,0x85,0x92,0x56,0xd3,0xa9,0xf7,0x8c,0xbf,0xd7,0xd7,0x5d,0xbc,0xa9,0xe7,0x4a,0x08,0x7f,0x5a,0x2c,0x14,0x8c,0x97,0xa1,0x8b,0x26,0x13,0x81,0xdc,0x31,0xcb,0x5e -,0x49,0xe5,0x7b,0xfb,0x27,0x7f,0x7d,0x07,0x3e,0x91,0x58,0x8b,0x58,0x44,0x73,0x4e,0xe8,0x8a,0xbd,0xd0,0x28,0xf7,0x41,0x65,0x61,0x10,0x44,0xec,0x10,0x8d,0xa2,0x20 -,0x56,0x53,0x16,0x00,0xee,0x41,0x70,0x0b,0x82,0x80,0x54,0xa0,0x98,0xc8,0x26,0x1a,0x85,0x02,0xc1,0x40,0xb0,0xd4,0x2c,0x14,0x0b,0x05,0x02,0xa1,0x40,0x99,0x08,0x26 -,0x31,0x42,0x60,0xcf,0x6f,0x17,0x87,0x59,0x97,0xb9,0x6a,0x8b,0xd7,0x7e,0xd5,0x5c,0x77,0xc6,0xbb,0xad,0x55,0xfd,0x7c,0xff,0xbf,0xb0,0xe3,0x7f,0xcb,0x71,0x9f,0x6b -,0xf2,0xbf,0xb2,0x17,0xd5,0xe9,0x6f,0xe3,0xfc,0xa7,0x5c,0x9a,0x63,0x4a,0x5d,0xfb,0xdf,0x9e,0xba,0x7f,0x3d,0xb9,0x73,0xe4,0xb5,0x7c,0x03,0x4f,0xbd,0xff,0x62,0xc8 -,0x1e,0x59,0x64,0x67,0xf0,0xcd,0xa2,0xf4,0x6e,0x06,0x9e,0xef,0x19,0xfb,0xce,0xf2,0x1b,0xb7,0xa9,0x02,0x4d,0xcb,0xb1,0x4c,0xe4,0xe7,0x05,0xac,0x5a,0x29,0xfb,0x94 -,0x67,0x2d,0x0e,0x32,0xdb,0x95,0x0a,0xf1,0x16,0xb7,0x7f,0x81,0x2e,0xf7,0x7c,0x76,0x87,0x79,0x17,0x17,0x53,0x27,0x84,0x1f,0x68,0x1d,0xd6,0x45,0x2d,0x46,0x0c,0x70 -,0x55,0xee,0x01,0xee,0xaa,0x09,0x4b,0xbd,0xc7,0x08,0xec,0x10,0x08,0x23,0x88,0xa4,0xaa,0x15,0x54,0x8d,0x84,0x80,0xb6,0x00,0x10,0x05,0x80,0x70,0xff,0xf1,0x50,0x80 -,0x2c,0x9f,0xfc,0x21,0x2a,0xcf,0xcf,0xae,0xff,0xfb,0xfd,0xaf,0x81,0x30,0x50,0x2c,0x24,0x0b,0x09,0x04,0xc1,0x70,0xa0,0x58,0x28,0x26,0x12,0x14,0x82,0x61,0x40,0x90 -,0x85,0xcd,0xea,0xaf,0x35,0x33,0xcf,0x69,0x4a,0x93,0x9d,0x5e,0xf5,0x32,0xea,0xe3,0x27,0x18,0x48,0xba,0xfb,0xfc,0x07,0xff,0x5d,0x7d,0xef,0x57,0x1f,0xd1,0x51,0xb7 -,0xba,0x3f,0xde,0x3e,0xff,0x49,0xeb,0x2e,0xeb,0xfb,0x17,0xee,0x32,0xa9,0x78,0x9f,0x6e,0xfa,0xd6,0xf0,0xac,0xb4,0xd7,0x68,0xc6,0xa1,0xd0,0xa2,0x6f,0x49,0xd1,0xca -,0x61,0xd7,0x5f,0xf0,0x9f,0x70,0x41,0xa5,0xe6,0xfe,0x4f,0xc1,0x06,0x9f,0x14,0x5d,0x6c,0xae,0x5d,0xff,0x4f,0xb7,0xee,0xeb,0x7a,0x13,0x27,0xa7,0xe5,0xef,0xed,0xe9 -,0xd9,0x17,0xb4,0xb3,0x7b,0xf7,0x93,0x14,0xc1,0xab,0x88,0x0b,0x31,0x9c,0xef,0x6d,0xd7,0x6c,0x91,0xfa,0xd3,0x31,0x17,0x49,0x25,0xc6,0x0f,0x95,0x01,0x65,0x0b,0xf1 -,0x36,0x98,0x94,0x0d,0xaf,0x92,0x63,0x79,0x41,0xdc,0x6d,0x10,0x5e,0xe7,0xc8,0xbd,0xd6,0x41,0x9c,0x09,0x81,0x00,0x15,0x4c,0x14,0x0b,0x05,0x05,0x01,0x60,0xa1,0x18 -,0x28,0x15,0x0a,0x04,0x82,0xc2,0x40,0xb0,0x50,0x2c,0x15,0x11,0x84,0x42,0xe1,0x30,0x88,0x4c,0x42,0x12,0x09,0x88,0x50,0x5f,0x35,0xcc,0xf6,0x95,0x5b,0xd4,0xdf,0x1b -,0xcb,0xa8,0xb6,0xba,0xe7,0x59,0x38,0xaf,0x7f,0x8d,0x5b,0x5e,0xbc,0xf3,0xe6,0xc6,0xa1,0xe7,0x5b,0xcb,0x53,0x7e,0xe7,0x5e,0x9c,0xfe,0x6d,0x7f,0xcb,0x78,0xd2,0x6f -,0xeb,0xb2,0xf1,0x4d,0xbf,0xd4,0x3e,0x0c,0xef,0xe6,0xdf,0xb9,0x07,0xe5,0xa2,0x1e,0x76,0x4f,0xa4,0x8e,0x4a,0xff,0x11,0xd8,0x53,0xd9,0x32,0x48,0x29,0xcd,0x28,0x70 -,0xf4,0x55,0xc9,0x58,0x84,0x63,0x85,0xeb,0x98,0x70,0x66,0x9c,0xa0,0xfa,0xdf,0xf1,0xc8,0xf9,0x0c,0xf1,0x00,0x79,0x39,0xcb,0x4f,0xb8,0xc9,0x0e,0x9d,0x9c,0x87,0x83 -,0x6a,0xae,0x1b,0x03,0xdd,0x12,0x7d,0xc0,0x4c,0xae,0x95,0xa4,0xe5,0x67,0x78,0x00,0xee,0x85,0x26,0x01,0x9c,0x01,0x42,0x90,0x02,0x60,0x41,0x9c,0x01,0x11,0x70,0x1c -,0xff,0xf1,0x50,0x80,0x2f,0x5f,0xfc,0x21,0x4c,0xfe,0xf7,0xfd,0x5d,0x16,0xca,0x50,0x8b,0x69,0x25,0x48,0xd4,0xd0,0x68,0xae,0xcb,0x32,0x0c,0x6e,0x5c,0xff,0xa3,0x35 -,0x38,0x16,0xa1,0x04,0xf8,0xad,0xbe,0x39,0xe7,0x0d,0x4a,0x4f,0x77,0xde,0x89,0x25,0xfc,0xd4,0x25,0x3b,0xcb,0xa6,0xe2,0x8d,0x9e,0xad,0x3d,0x51,0xe1,0x37,0x52,0xee -,0xca,0x44,0xbd,0x9b,0x29,0x6b,0x3a,0x6f,0x7f,0x10,0xc2,0xeb,0x75,0x35,0x61,0x16,0x4e,0x0e,0x83,0xa4,0x19,0xe6,0xce,0x9a,0x6a,0x87,0xa9,0xd8,0x90,0x4c,0x06,0xdc -,0x4f,0x9a,0x52,0x87,0x92,0x42,0xe4,0x86,0xf5,0xc1,0x5a,0x7c,0xa0,0x0c,0x09,0xd1,0x20,0xa2,0xf8,0x07,0x21,0x6b,0x60,0x8c,0xab,0xe3,0xf0,0xfa,0xe7,0x55,0xc2,0x25 -,0xbd,0x65,0x73,0x7b,0x13,0x15,0x29,0x68,0xc5,0x3e,0xab,0xf8,0xaf,0xb9,0x7b,0x06,0x71,0xc1,0x04,0xa4,0xdf,0x36,0xf0,0x78,0xa9,0x24,0x82,0xc4,0x69,0x78,0xfe,0xbe -,0xba,0xdb,0x3a,0x6a,0xce,0xd0,0xc4,0xae,0x05,0xac,0x4f,0xa5,0xa3,0x08,0x2d,0x89,0xcc,0x50,0x39,0x6d,0xdf,0x1c,0xc2,0x22,0x04,0x04,0x22,0x42,0x04,0x26,0x05,0x1c -,0x16,0x50,0x59,0x23,0x16,0x95,0x57,0x24,0x93,0x50,0x6f,0x1a,0x3f,0x19,0x18,0x6e,0x10,0x83,0x41,0x63,0xb7,0x14,0x1b,0x1c,0x8f,0x95,0xf4,0x63,0xa4,0x4a,0x4c,0xfe -,0x9f,0x83,0xd3,0xf6,0x92,0xcf,0x08,0x66,0xf0,0xea,0xff,0x76,0x59,0xca,0x9c,0x35,0x1c,0xb3,0x5b,0xbf,0xe4,0xf8,0xfb,0x14,0x0a,0xaa,0xea,0xc0,0x32,0x5b,0x7c,0xb6 -,0x7d,0x47,0xb8,0xd2,0x5b,0xba,0x9f,0x01,0xbe,0x1f,0xb6,0x95,0xc2,0x54,0x95,0x2a,0x76,0xa0,0x76,0xf3,0xce,0x21,0xc5,0x5d,0xab,0x3b,0xec,0xb2,0x42,0xc5,0xf3,0x2e -,0x4b,0x6e,0x7e,0x85,0x1d,0x21,0xe2,0x01,0x7f,0x7b,0xf0,0xdb,0x60,0x66,0x8f,0xc3,0x47,0x55,0xd1,0xed,0x91,0x51,0x67,0x38,0xd7,0x76,0xae,0x61,0x9e,0x87,0x68,0x35 -,0x8c,0x2b,0xa6,0x34,0x65,0x96,0xbd,0xcf,0x63,0xae,0xeb,0x0a,0x15,0x8f,0xb8,0x13,0x8d,0x49,0x1b,0xad,0xdf,0xca,0x0a,0x27,0xa9,0xc2,0x91,0xc9,0xe0,0x8d,0xfd,0xec -,0x7c,0x8d,0x50,0x91,0x1a,0xa1,0xed,0x44,0x85,0x51,0xf2,0xa1,0x64,0x49,0x84,0x34,0x93,0x81,0x7e,0x16,0x4e,0x05,0xe0,0x22,0x2e,0x70,0xff,0xf1,0x50,0x80,0x2f,0xbf -,0xfc,0x21,0x6a,0xcf,0x77,0xff,0xff,0xff,0xf7,0xb1,0x61,0x40,0x50,0x2c,0x18,0x0b,0x12,0x02,0x82,0x60,0xa0,0x98,0x28,0x42,0x0a,0x08,0x82,0x81,0x20,0x88,0x48,0x22 -,0x12,0x10,0x84,0xc2,0x23,0x31,0x09,0x1d,0xdf,0x5c,0xaf,0x5d,0xfc,0x7b,0xc7,0x9e,0x56,0xa6,0xb6,0xa9,0x75,0x71,0x88,0x49,0xd3,0x5e,0x3e,0x3a,0x1f,0x14,0xfb,0xcf -,0x99,0x2b,0xff,0xa7,0x17,0xef,0x95,0xa1,0xa4,0xe9,0xf1,0x3c,0xbb,0x34,0x97,0x0a,0x57,0xdb,0xf9,0x56,0xba,0xfd,0xef,0x33,0x43,0xea,0xb8,0xd7,0x42,0x1e,0x28,0x3b -,0x3b,0xb5,0x68,0x22,0xf6,0xe8,0x41,0x5d,0x38,0x27,0x2e,0xcc,0xc1,0xdf,0xfc,0xff,0x69,0x78,0x66,0xa2,0xee,0xc9,0x14,0xaf,0xe6,0x76,0xf4,0x23,0x87,0x8f,0x97,0x4a -,0x92,0xa2,0x95,0xbe,0x68,0x16,0x88,0xa3,0xfd,0x57,0xb6,0x12,0x56,0x8a,0x58,0xb5,0xa7,0x07,0x0a,0x7a,0xc3,0xd2,0xf1,0xc1,0x52,0x31,0x72,0x98,0x37,0x23,0x16,0x84 -,0x96,0x67,0x98,0x6f,0xff,0xab,0xe2,0x32,0x59,0x73,0x8c,0x0b,0xb2,0x38,0x20,0x4e,0x07,0xae,0x24,0x89,0x14,0x47,0x79,0xd4,0x08,0xc5,0x09,0x50,0x22,0x09,0x80,0xa8 -,0x41,0x31,0x54,0x28,0x16,0x0a,0x09,0x82,0xa1,0x40,0xb0,0x54,0x2c,0x14,0x1a,0x85,0x02,0x61,0x51,0x08,0x48,0x26,0x15,0x08,0x88,0xc8,0x21,0x31,0x88,0xd9,0xbd,0xf1 -,0x9c,0x4e,0x74,0xcd,0x4c,0xab,0xa2,0xf2,0x4b,0x71,0xe2,0xe7,0xc6,0xf7,0x46,0x75,0x3b,0xf8,0x9c,0x0f,0xf6,0x6a,0x5d,0x17,0xfd,0x7b,0x67,0xfd,0x7c,0x38,0x7b,0x6d -,0xf6,0xbe,0xab,0xa0,0xf9,0x37,0x87,0xf6,0xff,0xe5,0x68,0x88,0xdd,0xe8,0xe3,0x0d,0x9f,0x8e,0x53,0x78,0x76,0xbe,0xac,0xd1,0x0a,0x6c,0xd8,0xa1,0x5f,0xcd,0xed,0x61 -,0x9e,0x87,0x3f,0xdb,0xf5,0x2f,0xe5,0x7e,0x53,0x83,0x82,0x38,0x1f,0x60,0x53,0xff,0x79,0xfa,0x77,0xc3,0x3c,0x4e,0x77,0x36,0x1e,0x33,0x3c,0x60,0x4e,0x1f,0xa7,0x84 -,0x38,0xa0,0xfd,0x2c,0x40,0xf0,0xef,0x6d,0x79,0x5c,0x27,0xa8,0x5a,0x39,0xa9,0xce,0xca,0xa8,0x12,0xa6,0x30,0x1d,0xdb,0x9f,0xb9,0xf8,0x37,0x70,0x03,0xda,0x3b,0xc5 -,0xdd,0xe3,0xd8,0x84,0x52,0x42,0xe1,0x37,0x70,0xfd,0x97,0x70,0x08,0x7b,0xb1,0x3b,0xc2,0xb1,0x00,0xaa,0xd6,0x01,0xc0,0xff,0xf1,0x50,0x80,0x2d,0x1f,0xfc,0x21,0x0a -,0xcf,0xef,0xff,0x7f,0xff,0xff,0xb4,0x80,0xb1,0x48,0x2e,0x26,0x0c,0x05,0x02,0xa1,0x41,0x90,0x50,0x2c,0x12,0x12,0x85,0x04,0x44,0x30,0x88,0x4c,0x22,0x33,0x10,0x9d -,0x5a,0xe3,0xc5,0x75,0x7d,0xcc,0xea,0xf7,0x61,0xbe,0x23,0x22,0xa7,0x1b,0xba,0xa7,0x9d,0xcb,0xaa,0x7c,0x79,0x1a,0x96,0xf5,0xf9,0x6e,0xe7,0x66,0xff,0x02,0xd5,0x3f -,0xf5,0xe3,0xf8,0x4d,0x0d,0x2b,0x86,0x37,0x6d,0x9d,0x43,0x87,0x3b,0xf9,0x4a,0x2d,0x24,0x4b,0xc0,0x00,0xf5,0xdd,0xdd,0x75,0xa3,0x39,0xba,0x43,0x87,0xeb,0x56,0xaa -,0x38,0xd6,0xe8,0x4c,0x70,0xb6,0xfb,0x72,0x8d,0x4e,0xb2,0x95,0x86,0x47,0xe3,0x1b,0x0f,0xaf,0x5c,0x19,0x82,0x74,0x54,0xe8,0xe0,0x4b,0xbf,0xef,0x7d,0x85,0x42,0x9e -,0xaf,0x96,0x62,0x0c,0x93,0x71,0x81,0xe1,0xc6,0x03,0x78,0xe8,0xb5,0x4e,0x5d,0x20,0xb1,0x2e,0xf5,0x93,0x8b,0xa2,0xae,0xf8,0x7f,0x29,0x73,0xba,0x09,0x45,0x79,0x93 -,0x9a,0xc0,0x80,0x73,0x2c,0xa9,0x02,0xa5,0x28,0x50,0x04,0x80,0x52,0x20,0x58,0x4e,0x16,0x2a,0x05,0x82,0xa1,0x40,0xb8,0x50,0x8c,0x14,0x0b,0x05,0x04,0xa4,0x10,0xa8 -,0x8c,0x4a,0x21,0x09,0x98,0x44,0xf5,0xd7,0xa9,0x4f,0xdf,0xed,0xe7,0x9a,0x46,0x75,0xdb,0x34,0x95,0x17,0xed,0xdf,0x1b,0xcf,0x24,0x64,0xb5,0xf4,0x35,0x94,0x6f,0xcf -,0xcf,0xdf,0x46,0xc9,0x3c,0xba,0x7e,0x1e,0x1a,0xb0,0xd0,0xdd,0x18,0xb8,0xd4,0x79,0x4f,0xdd,0xcf,0x3f,0x67,0x69,0xf3,0x99,0xdb,0xbf,0xc8,0x19,0xa9,0x29,0xfd,0x76 -,0xb7,0x5e,0x03,0x2e,0xfe,0x51,0xa9,0xff,0xf9,0xfb,0xe9,0xae,0x61,0x5a,0x3b,0xba,0xdc,0x7f,0xb7,0xec,0x7c,0x3f,0x43,0x0b,0xc7,0x3d,0xfc,0xca,0x72,0xe2,0xe3,0xca -,0x8e,0xeb,0x3b,0x0e,0x45,0x47,0x0e,0x6e,0x40,0xe4,0xf0,0x5c,0x0b,0x6f,0x94,0xde,0x7c,0x4e,0xb0,0x07,0x9b,0x2b,0x00,0x1e,0xb8,0x3f,0x21,0xf5,0x8d,0x21,0xeb,0x00 -,0xf2,0x01,0x4f,0x19,0x09,0x00,0x9d,0x10,0x0f,0x32,0x40,0x07,0xbb,0xdf,0x3b,0xcf,0x75,0x60,0x4b,0xbf,0x75,0x03,0xdc,0x00,0x7b,0x80,0xeb,0x65,0x08,0xcc,0x0e,0xff -,0xf1,0x50,0x80,0x2e,0x1f,0xfc,0x21,0x0a,0xcf,0xff,0x7f,0xff,0xff,0xfc,0xaf,0x62,0xb8,0x54,0x2c,0x18,0x0a,0x06,0x02,0xc1,0x40,0xb0,0x50,0x2c,0x14,0x0a,0x85,0x02 -,0xa1,0x40,0x90,0x54,0x24,0x14,0x11,0x85,0x42,0x41,0x50,0x98,0x48,0x26,0x25,0x09,0x84,0x4e,0xdc,0xab,0xce,0x2f,0xc7,0x5d,0xdd,0xe6,0xb2,0x6b,0x69,0x15,0x2d,0x33 -,0xe3,0x9f,0x1e,0xd5,0xc6,0xf9,0x26,0xbe,0x38,0x1c,0xef,0xdb,0xeb,0xed,0xe7,0xc6,0xde,0x8d,0xdc,0x4b,0xcd,0x3f,0x8d,0x00,0x79,0x79,0xf7,0x3c,0x66,0xfc,0x09,0xd5 -,0x17,0xe2,0x7f,0x30,0x51,0xa6,0xbc,0x9b,0x34,0xa1,0x8d,0xd1,0x6f,0x06,0xaf,0xd3,0xa6,0x4b,0x35,0xcd,0xcb,0xbd,0x5c,0xb1,0xaa,0x5d,0xee,0xe7,0x7a,0x76,0xe8,0x77 -,0x25,0xaa,0x7d,0xbf,0xee,0xfa,0xaf,0x83,0xd7,0x79,0xa8,0x7a,0x9b,0x7a,0xdc,0x4a,0x7f,0x5c,0x9f,0x2c,0x28,0x45,0x22,0x54,0xb6,0x32,0xf5,0x54,0x6a,0x09,0x72,0x03 -,0xc4,0xff,0x10,0x4b,0x88,0x29,0x8c,0x42,0x2e,0xd5,0xf6,0xc0,0xf5,0xa2,0x3c,0x28,0x23,0x70,0x00,0x1e,0x7d,0xd3,0xb8,0x1a,0xa8,0x74,0x48,0x82,0x85,0x69,0x2f,0x24 -,0x82,0x5c,0xc4,0x93,0x2f,0x84,0x00,0x45,0x40,0x14,0xca,0x13,0x0c,0x09,0x83,0x01,0x40,0xb0,0x94,0x2c,0x44,0x1b,0x09,0x02,0xa1,0x41,0x29,0x9c,0x26,0x41,0x1a,0x84 -,0x4a,0xe5,0x4c,0xe2,0x92,0x6e,0xf1,0x75,0x52,0xb5,0x49,0x2e,0x27,0x9e,0xc7,0xb2,0x6f,0x55,0x5c,0x70,0x1e,0xcf,0xf1,0xc1,0xe3,0xef,0x8a,0x35,0x6a,0x41,0xfe,0xe3 -,0xd9,0xa2,0x5f,0x15,0x1f,0x63,0x0e,0x03,0x1a,0x2f,0x0f,0x83,0xf8,0x05,0xd4,0xe8,0xbf,0x89,0x78,0x7f,0x79,0xf9,0x3f,0xaa,0xf0,0xc5,0xf4,0x5e,0xc8,0xfb,0xef,0xe7 -,0xc4,0x69,0x7e,0xa5,0x7f,0x37,0x1a,0x47,0xf1,0x11,0x81,0xdc,0xa3,0x4a,0x5d,0x63,0x1c,0x59,0x7c,0xa9,0x53,0xf3,0x6b,0xb6,0x68,0x3c,0x9c,0xa8,0xec,0x1c,0xf9,0x70 -,0x1c,0xfc,0xd6,0x02,0x83,0x99,0xc9,0x6e,0x00,0xe5,0xc4,0x72,0x00,0xf3,0x80,0x01,0xde,0xff,0xfd,0x87,0x78,0xf7,0x3b,0xc0,0x77,0x43,0xb8,0xee,0xfa,0xe1,0x5b,0x10 -,0xb8,0x00,0x92,0xef,0x00,0x00,0x02,0x40,0x15,0x0c,0x00,0x13,0x05,0xc0,0xe0,0xff,0xf1,0x50,0x80,0x2c,0xbf,0xfc,0x21,0x0a,0xcf,0xff,0xff,0xbf,0xff,0xf9,0xaf,0x60 -,0xc0,0x58,0x30,0x16,0x12,0x05,0x86,0xa1,0x40,0x98,0x50,0x8a,0x14,0x21,0x05,0x02,0x43,0x11,0x98,0x44,0x26,0x41,0x3b,0x98,0x1d,0x77,0x67,0x5d,0xe9,0x97,0x51,0x26 -,0x5a,0xa4,0x71,0x8d,0x49,0xba,0x8f,0xdf,0xae,0x81,0xef,0x57,0x4b,0xee,0x7a,0x30,0xfa,0x5b,0xee,0x3f,0xec,0x5d,0xbd,0xc3,0xc1,0xeb,0xfe,0xb2,0xfc,0x67,0xf9,0x3f -,0x89,0x5f,0xe2,0x8a,0xb9,0xab,0x21,0xfb,0xc9,0x1d,0x35,0xe9,0xa8,0x56,0x7d,0x21,0x13,0xcb,0xb0,0x23,0xd2,0x34,0xb7,0x8f,0xd3,0xe7,0x15,0x17,0xf7,0xe0,0x92,0x7c -,0xe6,0x59,0x30,0xfc,0x22,0x96,0xcd,0x7c,0x90,0xb4,0xb1,0xee,0x90,0x8e,0xa4,0xbe,0x94,0x9f,0x3b,0xb5,0x5f,0x06,0x02,0x91,0x61,0x9c,0x17,0xfc,0x3d,0x6d,0xb8,0x04 -,0xab,0x72,0xb3,0xea,0x56,0xa3,0xc2,0x88,0x2b,0xee,0x81,0x0f,0x6a,0xfb,0x50,0x2f,0x09,0x05,0xcc,0x21,0xdd,0x5a,0xde,0x40,0xa0,0x61,0x25,0x00,0x01,0x64,0x00,0x54 -,0xa0,0x54,0x2c,0x17,0x0a,0x05,0x82,0x81,0x61,0x20,0x98,0x2e,0x15,0x13,0x05,0x42,0x86,0x60,0xa9,0x0c,0x62,0x35,0x09,0x84,0x42,0x63,0x11,0xab,0x3a,0xef,0x38,0xe3 -,0xc4,0x8a,0xbc,0xae,0xb7,0x4b,0xa9,0x7a,0x90,0x8e,0x7d,0xb5,0x5c,0xd7,0x52,0x7d,0xbf,0x1f,0x81,0xd1,0x7c,0x96,0xfb,0xfd,0xb7,0xfe,0x9f,0x9a,0x3f,0x7e,0x9e,0x5d -,0x47,0xfb,0x7f,0xec,0xf3,0x49,0xc2,0xcd,0x3b,0x9e,0xbe,0xaf,0xcf,0x8b,0x87,0x56,0x1f,0x3e,0x53,0x5f,0x9f,0x87,0x94,0xb4,0xbf,0x63,0xf0,0x6d,0xa7,0xb5,0xfc,0xe7 -,0xd8,0x35,0xb7,0x10,0xf4,0x47,0xe8,0x5e,0x79,0xcd,0xff,0xed,0xd6,0x84,0x75,0x2e,0xcb,0x5c,0x52,0xde,0xeb,0x4a,0x73,0x83,0x3d,0xb4,0x3b,0x16,0xe7,0xe1,0xc7,0x84 -,0x80,0x1e,0x0e,0xc0,0x03,0xc0,0xf3,0x04,0x3f,0xd3,0x22,0x3b,0xfe,0xb0,0x3d,0x77,0x74,0x1d,0xfb,0x4e,0x14,0xd8,0x8d,0x4b,0x8c,0x40,0x2f,0x20,0x03,0xc0,0x13,0x03 -,0xd7,0xc4,0x1d,0xe4,0x0f,0x5c,0x7f,0xfe,0x40,0x0e,0xfb,0xdd,0x35,0x4f,0xef,0x05,0xca,0x00,0x44,0x0e,0xff,0xf1,0x50,0x80,0x2b,0xbf,0xfc,0x21,0x2a,0xcf,0xee,0xbf -,0xff,0xff,0xf8,0xb0,0x60,0xb8,0x58,0x30,0x16,0x12,0x05,0x84,0x81,0x60,0xa0,0x98,0x28,0x82,0x0a,0x04,0x88,0x62,0x10,0x98,0xc5,0x2d,0xc4,0xae,0xaa,0xa5,0x4a,0x93 -,0x7c,0x50,0x24,0x4a,0xe2,0xf2,0xe4,0xe7,0xf1,0xef,0x9a,0x9d,0x7f,0x8f,0x61,0x1f,0x88,0xf6,0xff,0x23,0xf8,0x8f,0xb6,0x7d,0x9a,0x7f,0xa2,0x8f,0xeb,0xe8,0x9c,0xcc -,0xfc,0xd6,0x17,0xe2,0xb8,0x9e,0xf9,0xa8,0xeb,0x10,0xee,0xe6,0xda,0xcf,0xa1,0x73,0xea,0x3f,0x85,0xe3,0xde,0x0f,0x14,0xf8,0xff,0xa5,0x1f,0xb0,0xb7,0x55,0xe8,0x85 -,0x92,0xe0,0xa9,0xf7,0x44,0x0b,0xcb,0xa7,0xc7,0xdc,0x38,0x96,0xdb,0x9d,0xae,0x87,0xf3,0x87,0xd3,0xe5,0x7b,0x60,0xf4,0xa6,0x59,0xa8,0xea,0x49,0x30,0x45,0x56,0xe8 -,0xf7,0x4e,0xf1,0xdc,0x1d,0xba,0x8a,0xcd,0x03,0xcd,0x00,0x1e,0xbc,0x00,0xf5,0xc2,0x11,0x60,0x54,0x04,0x45,0x6c,0x48,0x18,0x96,0xa8,0x18,0x40,0x08,0x80,0xa8,0x52 -,0xc0,0x54,0xa0,0x98,0x28,0x26,0x0b,0x85,0x02,0xc5,0x40,0xb0,0x50,0x4c,0x34,0x12,0x89,0x02,0x61,0x50,0x88,0x4c,0x22,0x13,0x0a,0x88,0x46,0x61,0x13,0x37,0x97,0x97 -,0x5c,0x66,0xb9,0x9c,0x65,0x52,0x15,0x2d,0x2d,0xe7,0xbf,0xbf,0xcf,0xb5,0x7d,0xff,0xa7,0xdf,0x7d,0x7b,0xce,0xff,0x16,0x3e,0x5f,0xf4,0x7c,0x7b,0xff,0x90,0xff,0x81 -,0xd9,0xeb,0xf6,0xa3,0x92,0x6a,0x4d,0x03,0xb6,0x33,0x2c,0x54,0xfd,0x7e,0x53,0xd0,0xbe,0x0e,0xd1,0xf9,0x05,0x5f,0xdb,0x6a,0x5f,0xe9,0x5e,0xa6,0xaa,0xce,0x47,0x9f -,0x99,0x81,0xca,0xd5,0xb3,0x59,0xd8,0xdd,0x26,0xc5,0xbf,0xfe,0x07,0xee,0xa9,0x73,0x75,0x74,0xa3,0xb1,0x1c,0xbb,0xde,0x41,0xb6,0x74,0x7e,0x4e,0xcd,0x3c,0x3e,0x8b -,0xe7,0x42,0xe6,0x65,0x04,0xb9,0x07,0x36,0x8e,0xf3,0xdb,0x9e,0xba,0xb8,0x01,0x3e,0x2e,0xea,0x6b,0xd0,0x03,0xc8,0x00,0x00,0x0f,0x15,0x84,0x15,0x4a,0x85,0xbf,0xa9 -,0x50,0x01,0xeb,0x00,0x90,0x96,0xd0,0x34,0x26,0x07,0x19,0x5d,0x01,0x60,0x16,0x03,0x80,0xff,0xf1,0x50,0x80,0x29,0xff,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x45,0x18,0x2c -,0xd1,0x9a,0x14,0xb8,0x92,0x4e,0x2a,0x70,0x37,0xc2,0x13,0x38,0xa7,0x46,0x54,0x2d,0x86,0x5e,0xec,0x8d,0x4c,0x59,0xf5,0xfa,0xf4,0x9a,0x4d,0xa7,0xee,0xde,0xbf,0x1e -,0x74,0x38,0x61,0x6d,0x09,0xa7,0xe3,0xb3,0xbe,0xd3,0xb2,0x93,0xdb,0x5f,0x85,0x52,0x5d,0x2d,0x6b,0x45,0x9d,0x3c,0xcc,0x55,0x72,0x81,0xab,0xb2,0xf7,0x68,0x97,0x8b -,0xdf,0x3b,0xba,0xc1,0xa4,0xfd,0x81,0xe1,0x9d,0x17,0xf7,0x9f,0xd8,0xa7,0xe1,0xe8,0xa8,0x53,0xeb,0x42,0xdf,0xd6,0x1f,0x4d,0x7b,0x9c,0x77,0xc2,0xf2,0xe0,0x21,0x7e -,0x24,0xb3,0xfe,0x6b,0xd1,0x1d,0x53,0x22,0xa2,0xef,0xac,0x11,0x5b,0x82,0xff,0xbe,0xa3,0x0b,0x30,0xf7,0xb1,0xb6,0x84,0x15,0x34,0xe2,0xbc,0x54,0x29,0x05,0xbf,0xab -,0xaf,0x2b,0x5d,0xd5,0x7a,0xc6,0x88,0x2e,0x58,0x1f,0x60,0xe4,0x47,0xed,0xba,0xd9,0xde,0x2b,0x97,0x82,0xb0,0x54,0x9c,0x53,0x9a,0x02,0x62,0xe3,0x30,0x88,0x80,0x98 -,0xb9,0x69,0x94,0x70,0x9a,0x21,0x34,0x2d,0x09,0x35,0xd3,0xab,0xc1,0xe3,0xaf,0xb4,0x42,0x54,0xd6,0xeb,0xbd,0x7d,0x63,0xc7,0xf1,0x6f,0x55,0xd6,0x37,0x43,0x17,0x7f -,0x39,0x0b,0x7d,0xab,0x92,0x03,0x15,0xf5,0xe0,0x87,0xc7,0xfe,0x48,0x36,0x59,0xd4,0x3d,0x94,0xf8,0x3f,0x93,0xbb,0x89,0x1c,0xfe,0x3c,0xa9,0xd5,0xe1,0x1e,0x59,0x77 -,0xc8,0xfd,0xfe,0x34,0x69,0xc1,0x65,0xee,0x1c,0x3c,0x65,0x8f,0x0a,0x8e,0x20,0x3b,0x4e,0x51,0xd9,0xb2,0x76,0xc9,0xaf,0xb6,0xae,0x2a,0xd6,0xc2,0x05,0x8b,0x2c,0x57 -,0xce,0x59,0x4c,0x80,0x7b,0xfb,0xd3,0x94,0xfc,0x33,0x9e,0xf6,0xa1,0xa3,0x5d,0xfd,0x0b,0x3a,0x07,0xb3,0x1b,0xa1,0x4f,0xb9,0x38,0x23,0x2f,0x1d,0x8d,0x57,0xab,0x91 -,0x20,0x40,0x11,0x23,0x5d,0x67,0x4b,0xff,0xe9,0x43,0xe3,0x07,0xdc,0x00,0x04,0x20,0xc3,0x39,0x74,0x4b,0x30,0x01,0x10,0x11,0xe0,0x32,0x09,0x80,0x09,0x8b,0x81,0xc0 -,0xff,0xf1,0x50,0x80,0x2e,0xbf,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x44,0x16,0x89,0x45,0x35,0x55,0x72,0xe9,0x9c,0x70,0x28,0x3f,0xfe,0xa4,0xfa,0x48,0x6c,0x59,0x2e,0x7d -,0x29,0xfd,0xa4,0xcf,0xdf,0x87,0xcc,0x49,0xdb,0xe4,0x39,0xeb,0xb2,0xfc,0x25,0xdd,0x5d,0x16,0x59,0xec,0x4d,0x7b,0x7c,0x43,0x4b,0x77,0xe5,0x53,0xfe,0x69,0x67,0xb3 -,0xaa,0x2c,0xbf,0xeb,0x25,0x3e,0xdf,0x44,0xca,0xbf,0x74,0x59,0x16,0x8c,0xef,0x89,0xbb,0xda,0x58,0x0f,0x68,0xcb,0xaa,0xa4,0xfc,0x01,0xcf,0xf7,0xf1,0x4d,0x4a,0x47 -,0x59,0x7d,0x4b,0xf1,0x13,0x03,0x45,0xff,0x05,0x76,0x11,0xc1,0x7d,0x06,0xe4,0xbe,0xf6,0xae,0xa7,0xc5,0xab,0xfd,0x14,0x95,0x30,0xdb,0xab,0x50,0x1d,0x27,0xa0,0x8e -,0xb9,0x25,0x7c,0x22,0x7d,0x7b,0xbd,0x49,0x35,0x18,0xee,0xd4,0xc9,0xde,0x88,0x22,0x24,0x85,0x1e,0xcd,0x49,0x5a,0x3f,0xab,0x64,0x07,0x05,0xa3,0x86,0x07,0x3f,0xbd -,0x65,0x14,0x72,0xc7,0xf8,0x31,0xac,0x9a,0x10,0x3b,0x00,0xbb,0x95,0x44,0xbd,0x81,0x87,0xa5,0x77,0x96,0x70,0xd0,0x8f,0x7b,0xbf,0x09,0xb5,0x23,0x72,0x94,0x8d,0x04 -,0xa2,0x53,0xc2,0x48,0x52,0x04,0x86,0xd0,0xf0,0x14,0x71,0x19,0xaa,0x34,0x25,0x79,0x24,0xd1,0xc7,0xb7,0x02,0x4c,0xf9,0x39,0xdf,0xa4,0xda,0xb9,0x7f,0x0d,0xed,0xe4 -,0x74,0x82,0xca,0x61,0xed,0x39,0x93,0xa6,0x83,0x4f,0xe1,0x46,0xab,0x0c,0xf6,0x46,0x45,0xcc,0x8b,0x84,0x4a,0x8f,0x30,0xb4,0xd3,0xe2,0xcf,0x49,0x1e,0x24,0x1e,0x98 -,0x88,0x31,0x5c,0xac,0xfa,0xa4,0xf1,0x90,0x31,0x09,0xa4,0x39,0x65,0x95,0xd4,0xd7,0x26,0x32,0xeb,0x1b,0xd0,0x36,0x5e,0x72,0x26,0x1a,0xec,0x27,0xc5,0x0e,0x6a,0xa8 -,0x0c,0xea,0x38,0xb6,0x4e,0x0a,0xb7,0x5e,0x58,0x63,0x29,0x19,0x01,0xc4,0xc6,0x7a,0x04,0xad,0xb0,0x4c,0x54,0x09,0xa0,0x4c,0xb5,0x24,0x06,0xee,0x02,0x19,0x93,0x32 -,0x74,0x49,0x12,0x76,0xc9,0xd0,0x3f,0x94,0x95,0x21,0x37,0xbc,0x11,0x3b,0xd9,0x5c,0xa8,0x21,0xc4,0xba,0x74,0x11,0xca,0x74,0x63,0x33,0xa2,0xfb,0xe7,0x45,0x62,0xa1 -,0x8e,0x08,0x77,0x11,0x83,0x0d,0x14,0x8e,0xec,0x00,0x00,0x3d,0xa1,0xaa,0x44,0x00,0x00,0xcc,0x34,0x08,0x0e,0xff,0xf1,0x50,0x80,0x31,0xbf,0xfc,0x21,0x4c,0xfe,0xff -,0xfd,0x45,0x26,0x48,0x58,0xa2,0x54,0x64,0x4a,0x49,0x0a,0x92,0xe0,0xac,0xb9,0x72,0x4d,0x9a,0x2a,0x53,0xa2,0x50,0x1e,0x86,0xbe,0xbc,0x0e,0xf2,0xe8,0x15,0x21,0x9c -,0x08,0x82,0x28,0x30,0xea,0x54,0x36,0x14,0xce,0xcf,0x94,0xc4,0x39,0x73,0x91,0x2f,0xbd,0x74,0x7b,0xb3,0xf5,0xf3,0x35,0xf7,0xcf,0x41,0xe2,0xf7,0x35,0xc8,0xf8,0xf5 -,0x1f,0x4f,0xcb,0x7b,0xed,0x9f,0xec,0xff,0x5f,0xd7,0xdb,0x94,0xc5,0x80,0x0d,0xaa,0xe3,0x3c,0x3b,0x25,0x93,0x39,0x05,0xd7,0x92,0x4d,0x5c,0xc8,0xda,0x16,0x56,0x62 -,0xe0,0x23,0xc9,0x86,0xf1,0x40,0x15,0xaf,0xea,0x7a,0xb8,0x97,0xcf,0xbe,0x41,0x9d,0x40,0xc9,0xc6,0xd5,0x1a,0xcf,0x30,0xd0,0xdc,0x36,0x7f,0xc4,0xcc,0x99,0x80,0x2e -,0xe4,0xe6,0x1e,0x9e,0xb5,0x61,0xd3,0xbc,0xa1,0xd1,0x53,0x32,0x71,0x9b,0x87,0x74,0x76,0xc1,0xbd,0xc8,0xeb,0x9c,0xd4,0x2b,0x51,0x6a,0xa4,0xc2,0xd3,0x06,0x4e,0xfb -,0xa1,0xad,0xfb,0xf2,0x54,0xdf,0xa2,0xda,0x8a,0xc5,0xb1,0x91,0xd6,0x27,0xac,0x7c,0x96,0x24,0x10,0xd8,0x87,0x06,0xb9,0xef,0x51,0xe3,0x5a,0xa5,0x04,0x2c,0x64,0xb1 -,0xcc,0x5b,0xe2,0x7b,0xb4,0x1f,0x94,0x4a,0x28,0x2c,0x61,0x32,0x42,0xa8,0x88,0x93,0x29,0x44,0xb9,0x75,0xad,0x0b,0x36,0x68,0xe7,0x46,0x22,0x80,0x6b,0xe6,0x86,0x6e -,0xf5,0x9d,0xd7,0x4b,0x3e,0x38,0xbf,0xdb,0xf3,0x9e,0xc7,0xae,0xbe,0x9c,0xef,0x4e,0xf9,0x41,0x9a,0x4e,0x91,0x2c,0x36,0xcb,0x5c,0xe0,0x4f,0xad,0x5e,0x24,0xb4,0xe1 -,0x16,0xd8,0x88,0xdc,0x40,0x99,0x9b,0x1d,0x04,0x00,0xcf,0x5e,0xbb,0x5e,0xb9,0x33,0xdf,0xbd,0xfa,0x55,0xdf,0x94,0xf4,0xf6,0x5f,0x3a,0x62,0x93,0x45,0x41,0x49,0x86 -,0x54,0x04,0x8b,0x60,0xfa,0x25,0xdc,0xfe,0x0f,0x15,0x1e,0x9a,0xc5,0xb1,0x1e,0x87,0x78,0x1c,0x41,0xda,0xfe,0xdf,0xc3,0xf5,0x65,0x7e,0x67,0xbe,0xe8,0x9f,0x87,0xeb -,0x07,0x6c,0x1d,0x9a,0x37,0xc8,0xef,0xc1,0xf4,0xe0,0x49,0xf0,0xc1,0x2e,0x2b,0x68,0xc9,0x4e,0xb8,0x3b,0x59,0x1d,0x0d,0x8a,0x71,0x18,0x25,0x70,0xe3,0x24,0x72,0x10 -,0x90,0xcc,0xec,0x0c,0x54,0x6a,0x69,0xb5,0x7a,0x84,0x7a,0x99,0xb3,0x92,0xa6,0x92,0xc7,0x03,0x19,0x55,0x72,0x5f,0xe1,0xb8,0x18,0xc6,0x01,0xee,0x8f,0x70,0x61,0x18 -,0xa8,0x07,0xff,0xf1,0x50,0x80,0x2f,0x5f,0xfc,0x21,0x6a,0xcf,0xff,0xff,0xff,0xff,0xff,0xb0,0x40,0xb0,0x5c,0x2c,0x34,0x0a,0x85,0x82,0xa1,0x60,0xa0,0x60,0x28,0x26 -,0x0a,0x19,0x42,0x81,0x20,0xa8,0x48,0x2a,0x11,0x7b,0xb9,0x25,0x7b,0x77,0xc7,0x37,0x5c,0xea,0x91,0x25,0x8a,0xb5,0x41,0x26,0x4a,0x68,0xf8,0xb1,0xa4,0x57,0xf6,0x78 -,0xed,0xa1,0x7d,0xdd,0xd8,0x7d,0x75,0xe5,0xb4,0x7d,0xaf,0xd1,0xa2,0xfc,0x64,0x90,0xd1,0xd6,0x46,0xfd,0x6a,0x9f,0x89,0xa4,0xb7,0x7d,0x18,0x3e,0x7e,0x87,0xfd,0x7f -,0x71,0x57,0xe0,0x54,0x23,0x8a,0x49,0xe5,0xf6,0x72,0xdf,0xe6,0x7b,0xfb,0xd7,0x5b,0xb7,0x06,0xaf,0xf6,0xc6,0x29,0x48,0x6f,0xa5,0xa9,0xf5,0x64,0x9b,0xae,0x3d,0xc4 -,0x23,0xc6,0x43,0x6d,0x0d,0x70,0xe1,0x37,0x6c,0x95,0x49,0x4f,0x35,0xce,0x08,0xde,0xbe,0x46,0xdb,0x78,0x32,0xd8,0x96,0x2a,0xde,0x54,0xfc,0x47,0x84,0xbb,0xc5,0xe5 -,0x0a,0xed,0xd6,0x46,0xbc,0x26,0xe6,0x32,0x03,0x3e,0x32,0x4d,0x17,0x4a,0x97,0x58,0xd4,0x80,0x9c,0x65,0x1b,0xdb,0xd8,0x06,0x2d,0x9e,0x40,0x50,0x0a,0x00,0xa9,0x40 -,0x98,0x58,0xaa,0x16,0x09,0x05,0x82,0xa1,0x61,0xa0,0x48,0x28,0x16,0x0a,0x11,0x42,0x81,0x51,0x88,0x54,0x46,0x31,0x09,0x84,0x42,0x61,0x11,0x18,0x44,0x4c,0xcb,0xab -,0xde,0xa7,0x5e,0xb5,0xbb,0xa7,0x9f,0x7b,0x25,0x5a,0xeb,0xaa,0xe1,0xcc,0xde,0x6b,0x7e,0x79,0xfb,0xf2,0xe0,0x68,0xbf,0xcd,0xf3,0xc7,0xb6,0x4d,0x56,0xe8,0xeb,0xf6 -,0xd6,0xfb,0xf4,0x27,0xe7,0xe1,0x29,0x87,0xbe,0x78,0x09,0xff,0x94,0x7e,0x13,0x9a,0x49,0xf5,0x5f,0xd1,0xef,0x74,0x71,0xfb,0xdf,0xfd,0x5f,0xfe,0x75,0x70,0x23,0x56 -,0xd9,0xba,0x3f,0xf2,0xbe,0x4f,0x12,0xf0,0x03,0x58,0xfa,0x3e,0xc9,0xf8,0x8d,0x29,0x6f,0x15,0xf9,0x8e,0x6e,0x2e,0x29,0xbd,0xdf,0x24,0xeb,0xc4,0x17,0x57,0xcf,0x9c -,0x79,0xc3,0xe1,0x0e,0xb2,0xe7,0x82,0x6c,0x7d,0xc5,0x01,0xfc,0x74,0x32,0xc8,0x65,0x40,0x3c,0x40,0x40,0x0f,0x10,0x7c,0x07,0xba,0xbb,0xbc,0x0a,0xff,0xc6,0x16,0xef -,0xce,0x08,0x25,0x46,0x46,0x4b,0x52,0x83,0xd6,0x35,0xa1,0x45,0x31,0x77,0x01,0xfc,0x84,0x31,0x1d,0x02,0xd3,0x03,0xbe,0x08,0xa4,0x0f,0xa0,0x0e,0xff,0xf1,0x50,0x80 -,0x2d,0x9f,0xfc,0x21,0x0a,0xcf,0xdf,0xdf,0x5f,0xff,0xfc,0xb0,0x60,0xc0,0x58,0x6a,0x14,0x0b,0x05,0x02,0xc1,0x41,0x38,0x48,0x28,0x18,0x0a,0x85,0xc2,0x82,0x20,0xa8 -,0x50,0x44,0x13,0x0a,0x84,0x82,0x21,0x21,0x08,0x48,0x22,0x23,0x10,0x98,0xe7,0x89,0xbb,0xbe,0x7c,0xf3,0x7b,0xeb,0xb5,0xb8,0xc4,0xa9,0x57,0xae,0x6e,0xb2,0x4a,0x79 -,0x9b,0x55,0xfe,0xfd,0x04,0xff,0x34,0x02,0xe3,0x84,0x79,0xfe,0x96,0x7d,0x0e,0x80,0x9c,0x3f,0x85,0xb8,0xbf,0xf6,0xf4,0x3e,0xa0,0x9d,0x1f,0x5b,0x67,0xb7,0x7f,0xdb -,0xb4,0x6e,0x1c,0xf8,0x4d,0xab,0xf8,0xad,0xa7,0xea,0x89,0xa5,0xff,0x38,0x2e,0xa8,0xcf,0x7f,0x6c,0x72,0xfa,0x62,0xe0,0xa1,0xe1,0x8f,0xe7,0xcf,0xb4,0x56,0xbb,0xe8 -,0x3c,0xe6,0x9f,0x53,0x2c,0xb7,0x99,0xfe,0x7c,0x71,0x94,0xf7,0x30,0x53,0x7b,0x48,0x7b,0xa8,0xa5,0xd0,0x63,0xcb,0xd0,0x12,0x46,0x43,0xf4,0x16,0xf5,0x4c,0x80,0x1c -,0x62,0x8f,0x28,0x7d,0xc0,0xb8,0x15,0x78,0xc3,0xef,0x79,0x90,0xd1,0xab,0x1a,0x77,0xf7,0xd5,0x17,0x70,0x0e,0xe8,0x97,0x74,0x56,0x14,0x50,0xad,0x37,0xc1,0x72,0x23 -,0x64,0x29,0x77,0x54,0xe4,0x04,0xc1,0x00,0x15,0x08,0x26,0x0a,0x85,0x03,0x01,0x60,0xa0,0xd8,0x28,0x17,0x0b,0x05,0x42,0xc1,0x43,0x98,0x94,0x26,0x31,0x1a,0x84,0xc4 -,0x23,0x31,0x08,0xdf,0x5f,0xb3,0x8f,0xcf,0xef,0xcc,0xbe,0x58,0x49,0x8a,0x9a,0xce,0xab,0x35,0xc6,0x7d,0x4e,0x5b,0x70,0xf5,0xe5,0xd7,0x3a,0x1b,0xf7,0x66,0xfc,0xdd -,0x7b,0x9f,0x3e,0x1e,0xea,0xbb,0x7e,0x63,0xfe,0xef,0xb1,0x40,0x7e,0x2a,0xba,0xbb,0x0a,0xd4,0xf6,0x92,0x7d,0x1c,0x5b,0xd6,0xc1,0x3e,0xe6,0x7f,0x5e,0xf3,0xbe,0xc7 -,0xb2,0x3d,0xf6,0x7f,0xf5,0x52,0x5e,0xb0,0x0f,0xe9,0x7f,0xd8,0x76,0xb7,0x57,0x78,0xd7,0x2e,0xa7,0xc1,0x77,0x13,0xd8,0xff,0xe9,0x1c,0x2e,0x05,0xc7,0x94,0x54,0xbe -,0x1d,0xde,0x2c,0xdd,0xff,0x66,0x1d,0xe3,0xba,0x5e,0xc2,0x37,0x02,0xf4,0x8a,0x44,0x80,0x00,0xf0,0x00,0x1e,0xe8,0x3b,0xc1,0x41,0x02,0x76,0x00,0x24,0xbd,0x47,0xae -,0x07,0xb8,0x01,0x70,0x09,0x8b,0x80,0xe0,0xff,0xf1,0x50,0x80,0x2d,0x3f,0xfc,0x21,0x0a,0xcf,0xe7,0xff,0x9f,0xff,0xfc,0xaf,0x62,0xc0,0x50,0x6c,0x13,0x09,0x06,0x02 -,0xc1,0x40,0xb8,0x54,0x30,0x14,0x13,0x05,0x0a,0x41,0x11,0x10,0x44,0x26,0x41,0x29,0x84,0x44,0xe6,0xea,0x55,0xfb,0x7b,0x9a,0xc9,0x92,0x2f,0x25,0x69,0x26,0x21,0xc5 -,0x1c,0xe9,0x33,0xeb,0xfe,0xfc,0x01,0xfc,0xd5,0xee,0xa3,0x6a,0xfb,0x3c,0x3b,0xb3,0x83,0xf2,0x6e,0x0b,0x47,0x71,0x2f,0xe1,0x7e,0xa3,0xc7,0xfc,0xa0,0xeb,0xd7,0xd0 -,0x9c,0x7b,0x9d,0x05,0xab,0xed,0xd9,0x8f,0x55,0x85,0xc3,0xd2,0x04,0x7e,0x36,0xb3,0x49,0xf2,0x21,0xc7,0x74,0x18,0xd4,0x66,0x22,0xb8,0x57,0x3a,0x6f,0x84,0xef,0xb3 -,0xcb,0x77,0xcc,0x91,0x75,0x19,0xee,0x2d,0xaf,0xcc,0xe3,0x1b,0x9d,0xb9,0xa6,0x3c,0x12,0x94,0x56,0xbe,0xee,0x09,0x3b,0xc1,0x55,0x6c,0x1d,0x50,0x6f,0x89,0x2f,0x46 -,0xb4,0x0a,0x5e,0x87,0xcf,0xde,0x60,0x53,0x5e,0x3e,0x81,0xee,0x2f,0x6d,0x91,0x31,0xf2,0x34,0x28,0xf7,0x2b,0x55,0x8d,0x74,0x20,0x85,0xa6,0x2a,0x95,0x15,0x27,0xda -,0x02,0xc1,0xec,0x01,0x1b,0x80,0xa0,0x15,0x08,0x26,0x24,0x05,0x82,0xe1,0x20,0xb0,0x54,0x28,0x16,0x0a,0x05,0x8c,0x85,0x50,0x88,0x54,0x26,0x35,0x18,0x84,0xc2,0x26 -,0x66,0x6b,0x78,0xbe,0x38,0xf5,0x75,0x37,0x57,0x9a,0x52,0x48,0xeb,0xdb,0x79,0x37,0xd5,0x3d,0x7b,0x6b,0xdf,0xcf,0x19,0xa1,0xd5,0x6b,0xe5,0xdb,0xb0,0xee,0xdb,0xaa -,0x9e,0x81,0xef,0xf5,0xfa,0x16,0xde,0x38,0x90,0x7b,0x0d,0xfe,0x5b,0xd7,0xca,0xda,0xc7,0xf5,0x64,0x6b,0xc6,0xfa,0xe1,0x77,0xd3,0x87,0x1b,0x27,0x0b,0xa4,0xb9,0x29 -,0x2d,0x55,0xc0,0x5b,0x7f,0x3b,0xd9,0xb9,0x24,0x1c,0x28,0x83,0x52,0x89,0xc3,0x6f,0x0d,0x27,0x4c,0xaf,0x73,0x5e,0x8f,0xf9,0x99,0xe0,0xbd,0x79,0x4d,0x1f,0xa2,0x6e -,0xa8,0x07,0xdf,0xc8,0xbc,0xfa,0x40,0x1e,0x44,0x00,0x77,0x4f,0x59,0xde,0x3d,0x63,0xbe,0x15,0x3c,0x7f,0x5c,0x00,0x0f,0x30,0x00,0x3c,0x40,0x00,0x3c,0x42,0x98,0xc5 -,0xef,0x43,0xbc,0x02,0x89,0x86,0xb8,0x84,0xa0,0x04,0x89,0xa3,0x70,0xb2,0x01,0x70,0x38,0xff,0xf1,0x50,0x80,0x2d,0x9f,0xfc,0x21,0x0a,0xcf,0xcf,0x6f,0xbf,0xff,0xfc -,0xb2,0x70,0xc0,0x58,0x88,0x16,0x12,0x06,0x02,0x81,0x61,0x20,0x58,0x28,0x17,0x0a,0x14,0x82,0x81,0x21,0x08,0x48,0x26,0x11,0x21,0x88,0x42,0x62,0x12,0x33,0xe3,0xd4 -,0xe1,0x7e,0x2c,0xaf,0x3c,0xc9,0x96,0xcd,0x4d,0xd9,0x2b,0x8a,0x99,0x5e,0x6b,0x2e,0xf7,0xaf,0xf6,0xe0,0x3b,0x35,0x69,0xbc,0x7c,0x34,0xcd,0x67,0xbf,0xb2,0xce,0xd4 -,0xf5,0xe8,0x2d,0x15,0xde,0x02,0x0f,0x68,0x3e,0xfc,0x87,0xed,0xb3,0x51,0x63,0x57,0x35,0xeb,0xdf,0xa0,0xb4,0xdb,0xa6,0xab,0x93,0xeb,0xdc,0x7e,0x28,0x33,0x10,0x8e -,0xe7,0xbc,0x0b,0xd4,0x20,0xfa,0x96,0xc8,0x42,0xfb,0x1e,0x0c,0x2c,0x5c,0x7d,0x92,0xef,0xc8,0x83,0x1d,0x39,0x96,0x26,0xea,0x38,0xcf,0x75,0x5c,0xf1,0x70,0x53,0x6c -,0x31,0xca,0xf6,0x54,0xd1,0x19,0x04,0x83,0xf7,0xef,0x42,0xaa,0x47,0xf9,0x91,0xb5,0x6f,0x45,0x6e,0x85,0xa7,0x27,0x18,0x2f,0x96,0x04,0xbe,0x50,0x39,0x40,0x7b,0xa0 -,0x3c,0xc9,0x24,0x1d,0x56,0x3b,0xf5,0x95,0x04,0xb1,0x81,0xde,0xe2,0x48,0x14,0xb5,0x11,0x20,0x01,0x10,0x28,0x10,0x90,0x34,0x0a,0x85,0x02,0xc1,0x41,0x30,0x90,0x4c -,0x24,0x0b,0x05,0x42,0x81,0x50,0x98,0x54,0x46,0x31,0x19,0x9c,0x46,0xfb,0x56,0x7b,0x7d,0xa5,0xf9,0xe3,0xde,0xa4,0xdd,0xaa,0xe9,0xa9,0xbd,0x38,0x55,0xf2,0x71,0x69 -,0x56,0xef,0xe3,0x81,0xc4,0xbf,0xd5,0xfb,0x6f,0xaf,0x4f,0xd2,0x66,0x41,0xa1,0x0f,0xcc,0x3e,0x87,0x89,0xa9,0xc4,0x7e,0xeb,0xca,0x7c,0xdf,0x8f,0x26,0xd6,0x2e,0x47 -,0xda,0xdf,0x36,0xa6,0x11,0xcd,0xef,0xa1,0xf9,0x8c,0x8e,0x23,0xb2,0xc2,0xfb,0x37,0xf1,0xe8,0x1c,0xbd,0xaf,0x07,0x57,0xf1,0x93,0x5e,0x5f,0x8d,0xf7,0x8d,0x5c,0xed -,0x6d,0xae,0x5b,0x3a,0x6f,0xdf,0x7f,0x88,0xe0,0x13,0xc2,0x78,0x01,0xe4,0x20,0x7b,0xeb,0x07,0x76,0x6b,0x3f,0xf4,0xd0,0x7b,0xa1,0xee,0xc3,0xa1,0x68,0xd9,0xd0,0x9a -,0x3c,0x12,0x42,0x2b,0x4a,0x4e,0xe2,0x21,0xdd,0x04,0x41,0xdf,0x03,0xb8,0x07,0x7f,0xdd,0x13,0xf7,0x6e,0x00,0xee,0x82,0x89,0x20,0x02,0x50,0x22,0x07,0xff,0xf1,0x50 -,0x80,0x2e,0x5f,0xfc,0x21,0x0a,0xcf,0xfb,0xff,0xbf,0xbf,0x77,0xb2,0x70,0xb0,0xe0,0x2e,0x14,0x13,0x09,0xc2,0x81,0x60,0xa0,0x54,0x28,0x72,0x0a,0x85,0x04,0x41,0x50 -,0x88,0x4c,0x42,0x73,0x08,0x90,0xa6,0xb3,0xcf,0x9f,0xb6,0x4e,0x37,0x74,0x4a,0xd5,0xe2,0xf3,0x55,0xed,0xae,0x73,0x2b,0x2f,0x35,0x27,0xb7,0xbf,0xef,0xa0,0xf5,0xe5 -,0xeb,0xe1,0xca,0x4f,0x3a,0x1a,0xbe,0xf6,0xb9,0xc7,0xd3,0x34,0x0f,0x0b,0xfe,0x56,0x28,0x4f,0xe7,0x03,0xf5,0xe3,0xf1,0x4e,0xa3,0x8b,0x94,0xfe,0x57,0xa9,0x09,0xee -,0x60,0x97,0xf7,0x60,0x25,0x3f,0x03,0xf0,0x83,0xef,0x79,0xfe,0x57,0xc6,0x76,0x2c,0xee,0xee,0x9d,0x14,0x4e,0xed,0x0a,0x3a,0xed,0xb2,0xd1,0xfa,0xd7,0x7a,0xab,0x05 -,0xc2,0x78,0x04,0xe8,0x93,0xc2,0xf2,0xbc,0xc4,0x00,0x5f,0x58,0xb3,0xb8,0xb1,0x34,0x8e,0xec,0x6a,0xea,0xba,0xe5,0x65,0x62,0x6c,0x5a,0x8b,0x5f,0x05,0x01,0x57,0x06 -,0x19,0x89,0xcb,0x7d,0x0b,0x4d,0x38,0xa0,0x80,0x69,0xfa,0xe1,0x22,0x02,0x21,0x62,0x49,0x02,0xe1,0x20,0x14,0x04,0x15,0x0b,0x0a,0x02,0xc2,0x40,0xb0,0x94,0x4e,0x16 -,0x13,0x85,0x42,0xe1,0x40,0xb0,0xd0,0x4a,0x14,0x0a,0x8c,0xc2,0xa1,0x31,0x88,0x4c,0xc2,0x27,0x8e,0x73,0xaf,0x5c,0x1a,0xab,0xdd,0x35,0x5b,0x8a,0xb8,0x97,0xae,0x3b -,0xd5,0xf8,0x5e,0xdc,0x55,0xf3,0xd7,0x5d,0x0c,0xde,0xe7,0x44,0xa3,0x78,0xf4,0xbf,0x0b,0xbc,0x17,0xe0,0x47,0xdd,0xc6,0xcf,0xb9,0xc5,0xe8,0x0d,0xbe,0x68,0xa3,0x65 -,0x49,0xef,0xba,0xa1,0xec,0xdb,0x0c,0x7d,0x77,0xeb,0x9a,0xb8,0xf5,0x7c,0x27,0x29,0xef,0x4a,0x46,0xbb,0x8b,0x72,0x36,0x06,0xe1,0x1c,0x67,0x7a,0x24,0x77,0xa1,0x27 -,0xb7,0xc8,0x0f,0xb2,0xf7,0x48,0x26,0xf8,0x39,0x9d,0xee,0x4d,0xf5,0x58,0x77,0x37,0x6c,0x7c,0x12,0xe2,0x0e,0x27,0x90,0x00,0xb5,0x38,0xf9,0x00,0x7a,0xe3,0xd7,0x24 -,0x00,0x78,0x02,0x1e,0xb5,0x54,0x2f,0xe1,0xfb,0x44,0xf1,0x97,0x3b,0xc7,0xd6,0x11,0x47,0x3a,0x38,0xe1,0xee,0x89,0xf7,0xff,0xf6,0x0f,0x5b,0xdc,0xa1,0x2c,0x48,0x07 -,0xaf,0x61,0xde,0x1e,0xfa,0xb1,0x41,0x43,0xdd,0xa9,0x00,0x08,0x15,0x03,0x80,0xff,0xf1,0x50,0x80,0x2e,0xbf,0xfc,0x21,0x0a,0xcf,0xef,0xff,0xff,0xbf,0xbc,0xb1,0x70 -,0xb0,0xe0,0x44,0x15,0x0a,0x05,0x82,0x82,0x50,0xa0,0x48,0x2c,0x14,0x19,0x09,0x02,0x43,0x10,0x90,0x44,0x2a,0x21,0x68,0xca,0xf3,0xae,0x69,0x24,0xa5,0x5d,0x0d,0x64 -,0x9d,0x56,0x7d,0xeb,0x9d,0xb2,0xef,0xbb,0x9a,0xbf,0xf1,0xd0,0x7a,0xef,0xf3,0xe1,0x81,0x7f,0x48,0x72,0x3a,0x08,0x6f,0x7c,0x74,0x26,0xa2,0xd0,0x9e,0xee,0x87,0xf4 -,0x1f,0x1d,0xce,0xd2,0xdc,0x7f,0xdb,0x67,0xe6,0x12,0xf5,0x3c,0x92,0x9f,0x62,0x55,0x5c,0x6e,0xce,0x7f,0xb7,0x1f,0x6e,0x3a,0x34,0xe3,0x99,0xe3,0x63,0x3b,0x31,0x85 -,0x5d,0xcb,0x18,0x5d,0xd5,0x8c,0x95,0xd1,0x46,0x2c,0x49,0xd2,0xa9,0x69,0xc8,0xe8,0x40,0x1e,0x20,0x07,0x80,0x00,0x40,0x91,0xcf,0x2d,0xe6,0x14,0x88,0x23,0x00,0xf0 -,0x76,0xb9,0x44,0xe2,0x6f,0x04,0x2b,0xbd,0x16,0x6c,0x08,0xc7,0x5d,0x82,0xab,0x2e,0x90,0x5e,0x52,0x05,0xe8,0x58,0x0e,0x91,0x2a,0x02,0x71,0x02,0xc1,0x40,0xb1,0x50 -,0x4c,0x15,0x0b,0x85,0x82,0x81,0x50,0xb0,0x50,0x6a,0x14,0x0a,0x88,0xc2,0x81,0x50,0x88,0x4c,0x22,0x15,0x09,0x85,0x42,0x63,0x50,0x89,0x9f,0xb5,0xf3,0x2a,0xba,0xac -,0xb9,0xbd,0x73,0xaa,0x54,0x95,0x2a,0x5f,0x5f,0x7f,0xdb,0xf5,0xf7,0xcc,0x8d,0x6e,0xa3,0xf9,0xf6,0xe8,0x7c,0xc3,0x7b,0xf3,0x7f,0x52,0xcd,0xdd,0xa7,0x77,0xc4,0xcf -,0x8f,0x35,0xff,0x7c,0x81,0xce,0xac,0x5b,0xc1,0xb7,0xc9,0xb8,0xf3,0xe5,0x46,0xd3,0xfe,0xfe,0x79,0xf0,0x50,0x1d,0xbc,0x3f,0xf3,0xfc,0x07,0xb7,0x87,0xfe,0xef,0xdd -,0xbf,0xb3,0xff,0xcb,0xdf,0x70,0xe2,0xfa,0xf9,0x7f,0xbf,0xf1,0x2f,0xff,0x93,0xb3,0x9f,0x12,0x3e,0x1f,0x23,0x85,0x71,0xec,0x70,0xaf,0xf3,0xbb,0xff,0xfd,0x11,0x2b -,0xc1,0xf3,0x3e,0x6b,0xef,0x4b,0x99,0x67,0x8a,0x98,0xf6,0x03,0xbc,0x7f,0xec,0x3d,0xdd,0x62,0x45,0x8e,0x40,0xf1,0xb0,0x8a,0xc9,0x4f,0x74,0x25,0xd4,0xa8,0x1c,0xf0 -,0x26,0x21,0x63,0x37,0xef,0x5e,0xf7,0x49,0x80,0x97,0xec,0x83,0xb9,0x9e,0x8b,0x07,0x05,0x2f,0x83,0x82,0x76,0x5a,0x51,0x52,0xcb,0xb3,0x9b,0x17,0xe9,0xc4,0x28,0x15 -,0x08,0x81,0x00,0x38,0xff,0xf1,0x50,0x80,0x29,0x9f,0xfc,0x21,0x2a,0xcf,0xcf,0xb9,0xff,0xff,0x8d,0xb0,0x61,0x28,0x58,0x30,0x24,0x61,0x05,0x02,0x42,0x50,0x90,0x86 -,0x4e,0xf8,0xdd,0x75,0xaa,0xcc,0xeb,0x15,0xc6,0xf8,0xf1,0x6b,0x6a,0x9a,0xa7,0x15,0x4a,0x96,0xee,0x3a,0x9e,0x7e,0x01,0x77,0x4f,0xef,0x7b,0xe3,0xfd,0x87,0xa7,0xf8 -,0x03,0xd2,0xd6,0x1a,0x9b,0x46,0x04,0xfa,0x3b,0xba,0x35,0xfd,0x63,0x99,0x18,0x97,0x9d,0xf8,0xc1,0x1b,0x10,0xb1,0xa0,0xfc,0xaf,0xaf,0xf9,0xd2,0xda,0x3e,0xfd,0xab -,0xf5,0x59,0xcb,0x71,0xb8,0xa7,0xbb,0x8a,0x1b,0x6d,0x7d,0x62,0x85,0x33,0x49,0x6e,0x2d,0x49,0x92,0x61,0xef,0x7e,0x8b,0x66,0x27,0x19,0xa5,0x05,0x03,0x02,0x29,0x60 -,0x41,0x44,0x44,0xac,0x95,0x0c,0x80,0x12,0xc3,0x15,0x49,0x95,0x02,0x91,0x0e,0x18,0x6c,0xa2,0x91,0x80,0xdd,0x59,0x29,0xd0,0x88,0xc0,0x08,0xde,0x4a,0x00,0x99,0x00 -,0x14,0xc8,0x16,0x19,0x85,0x82,0xe1,0x61,0x20,0x54,0x4c,0x14,0x0b,0x05,0x03,0x01,0x40,0xb0,0x50,0x2c,0x14,0x21,0x04,0xc6,0x26,0x31,0x09,0x99,0x94,0xc9,0xd7,0x3a -,0xbc,0x61,0xbb,0x2e,0xae,0x54,0xe3,0xae,0x4a,0xab,0xab,0xca,0xad,0x7d,0xdc,0x0d,0x7b,0xb8,0x78,0x46,0x81,0xfd,0x47,0x66,0x7e,0xdc,0xc7,0x1d,0x45,0xfe,0x4f,0x09 -,0xdb,0xbc,0xe9,0xde,0xf4,0x07,0xd6,0xf7,0x8a,0x1f,0x81,0xfd,0x88,0x1a,0x22,0x24,0x68,0xfe,0x52,0x1b,0xa5,0xba,0xce,0x76,0xa1,0x7f,0xbd,0xf5,0xa8,0x5c,0x94,0x4f -,0x42,0x4e,0x1c,0x58,0x5f,0xda,0xd7,0xef,0x6c,0xda,0x6b,0x07,0xf1,0x38,0x76,0x43,0xf6,0xca,0xb9,0xaa,0xe3,0x9e,0x35,0xeb,0x4a,0xfe,0xe8,0xf7,0x37,0x02,0x7d,0xe8 -,0x7b,0x46,0x48,0xbc,0xb0,0x11,0x72,0x58,0xdd,0x48,0xae,0x4a,0x3a,0x44,0x16,0xbe,0x4e,0x13,0x53,0x02,0x28,0x48,0xb4,0xca,0xc9,0x21,0x2f,0xb2,0x90,0x61,0x1d,0xf9 -,0x56,0xb9,0x44,0x78,0x52,0x88,0x2b,0x56,0x46,0x09,0x05,0x40,0x98,0x08,0x00,0xe0,0xff,0xf1,0x50,0x80,0x2e,0xdf,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x54,0x26,0x86,0x54 -,0x9a,0x14,0xe0,0x92,0x43,0x5a,0x08,0xed,0x19,0xf3,0x7e,0x47,0xbc,0xaa,0xfe,0x54,0xea,0x23,0x88,0x96,0xfe,0xb4,0xe6,0x02,0x99,0x40,0xb7,0x53,0x4c,0x82,0x6f,0x27 -,0xa6,0x88,0x92,0x96,0xb9,0xd5,0x0e,0x59,0x93,0x2d,0x92,0xf8,0x52,0xad,0xae,0xa6,0xae,0xbb,0xea,0x2a,0xea,0xdd,0x47,0x90,0x11,0x2b,0x48,0x52,0x7d,0x12,0x12,0x8c -,0x61,0xf9,0x94,0x84,0x1c,0x20,0x2b,0x83,0x08,0x10,0x35,0x0a,0x52,0x80,0x70,0xbf,0x82,0xe7,0xa8,0x72,0x5a,0xe9,0x0b,0xaf,0x07,0x1b,0xee,0x7f,0xe6,0x1f,0xff,0x3f -,0xff,0xd5,0x81,0x20,0x80,0x04,0xb8,0xf4,0xef,0x7e,0xae,0xae,0xfc,0x06,0x85,0xd4,0x2e,0x70,0x0a,0xfe,0x03,0xea,0x1c,0x1f,0xc5,0xcb,0xf7,0x29,0xb3,0x32,0x94,0x49 -,0x69,0xd5,0x23,0xce,0x3b,0x08,0x79,0xcd,0x61,0x7e,0x35,0x9a,0xd2,0x12,0x01,0xc6,0x75,0xef,0x60,0x44,0x4c,0x40,0x40,0x4c,0x5e,0x06,0x18,0x45,0x41,0x09,0xa2,0x15 -,0x28,0x88,0x99,0x4a,0xab,0x97,0x14,0xe8,0x11,0x4c,0x7a,0xe3,0xc5,0xb1,0xda,0x31,0xf8,0xc1,0x60,0x9f,0x98,0x9c,0x56,0x69,0x9d,0x18,0xeb,0xb4,0x80,0x38,0x26,0x1d -,0x94,0xf4,0x37,0x79,0xfc,0x76,0x61,0xca,0x25,0xe5,0xe5,0x2e,0xbe,0xc0,0xd7,0xdd,0xed,0xbb,0x8a,0x78,0xfe,0xdf,0x7b,0x68,0xb6,0xdc,0x65,0xfe,0x3a,0xf5,0x73,0x76 -,0x75,0x6c,0xda,0xe1,0xd8,0x9b,0xfb,0xb0,0xec,0xe4,0x5c,0x9d,0xb8,0x68,0x25,0xa7,0x9d,0xa5,0xdf,0xbb,0x3a,0x26,0xa4,0xe2,0x63,0x47,0x04,0xdb,0x2c,0x20,0xb5,0x20 -,0xed,0x42,0x33,0x73,0xd2,0x36,0x1c,0xb8,0x33,0xb7,0x67,0xaa,0xf1,0x3f,0x25,0xc7,0x10,0xae,0xcd,0xc6,0xf1,0xbb,0x6c,0xb8,0x96,0x2f,0x55,0x31,0xf6,0xf7,0xcf,0x56 -,0xbb,0xa7,0x27,0xe5,0xab,0x7c,0xe8,0xda,0xab,0xcf,0x7a,0xdc,0x67,0xb9,0x6c,0x3a,0x26,0xcd,0x0d,0x7e,0x8e,0xe8,0x1e,0xd6,0x32,0x3a,0x19,0xe4,0x36,0xe0,0x93,0x51 -,0xe2,0x14,0xca,0x16,0x7c,0x18,0x7a,0xfd,0xa1,0xd0,0x60,0xb7,0xdd,0xbb,0x68,0xea,0x81,0x78,0xb8,0x3e,0x2e,0xe9,0x77,0xea,0x93,0xa9,0x3c,0x43,0x18,0xec,0x46,0x11 -,0x8c,0x62,0x1e,0x28,0xd4,0x1c,0xff,0xf1,0x50,0x80,0x2d,0x7f,0xfc,0x21,0x6a,0xcf,0xff,0xff,0xff,0xff,0xff,0xb6,0x80,0xb1,0x10,0x6c,0x24,0x0b,0x05,0x06,0x41,0x40 -,0xb0,0x88,0x48,0x15,0x09,0x05,0x02,0x41,0x50,0x90,0x45,0xee,0x3b,0xd3,0xaa,0xad,0xb8,0x55,0xd3,0x38,0xdd,0xde,0x12,0x10,0x94,0x97,0x77,0x97,0x7c,0x74,0x10,0xd7 -,0xff,0x3a,0xfd,0xb8,0x7b,0xde,0x4f,0x6f,0x2b,0xde,0x79,0xcd,0xbd,0xdd,0x85,0xaa,0x42,0x38,0x09,0x97,0xdf,0x58,0xd2,0x15,0x3c,0x8f,0x03,0xfb,0xbb,0xbf,0xdc,0xe9 -,0x74,0x8a,0xb7,0xfb,0xa4,0x41,0x38,0xf6,0x83,0x0a,0x59,0xe2,0x07,0xdc,0xc9,0x81,0x9c,0x32,0xe0,0xa6,0xe0,0xcd,0xdf,0x86,0xbe,0x4b,0x9e,0x28,0xd0,0xce,0x62,0xc9 -,0x08,0xcf,0x02,0x53,0x2d,0x2f,0xac,0x81,0xd6,0xb4,0x5c,0xa9,0xc2,0x2e,0x6a,0x93,0x62,0x8b,0x8a,0x89,0x16,0xa4,0x63,0x3a,0x41,0x8e,0x63,0x52,0x0a,0xa9,0x5a,0xc7 -,0x89,0x11,0x32,0x87,0x09,0xa6,0x10,0x05,0x26,0xb2,0x00,0x1b,0x02,0x81,0x41,0x60,0x28,0x02,0xa4,0xc2,0x81,0x50,0xb0,0xdc,0x26,0x16,0x0a,0x15,0x82,0x81,0x61,0xa0 -,0x54,0x46,0x15,0x09,0x85,0x42,0x81,0x20,0x98,0x48,0x26,0x45,0x09,0x88,0x4c,0x66,0x4c,0xe2,0x9f,0x7f,0x7a,0x8c,0xbc,0xba,0x8a,0x8b,0xa9,0xbd,0x3a,0xdd,0xeb,0x69 -,0x52,0xf8,0xce,0x07,0xf8,0x7f,0x42,0xfa,0x70,0xf0,0xf4,0x51,0xe1,0x8f,0x62,0xfd,0x56,0x8b,0xf4,0x0e,0x8d,0xe2,0x1f,0xfb,0x73,0x6f,0x03,0xed,0x7f,0xe4,0xec,0xa7 -,0x4d,0x37,0xf8,0x1f,0x80,0x2c,0xc3,0x80,0x8e,0x23,0x6f,0xab,0x3e,0xaa,0xae,0x10,0xf7,0x7f,0x6f,0x41,0xc7,0xe9,0xb7,0x1e,0x4f,0x93,0xa1,0xd2,0xff,0x17,0x7d,0xff -,0xb8,0xe1,0xf2,0xfa,0x39,0x1d,0x5c,0x7c,0x0e,0xfb,0xdf,0x9a,0x5e,0x9a,0xc5,0xba,0x98,0xe7,0xb8,0x74,0xf4,0x20,0xf9,0xe7,0xf2,0x5a,0x42,0xfa,0x8c,0x7e,0xc1,0x27 -,0x27,0xe6,0x68,0x20,0x0c,0xcb,0x6f,0xbb,0x0f,0x75,0x21,0xff,0x43,0x28,0x21,0xdd,0x19,0xbf,0x14,0x15,0x07,0xbf,0x38,0x89,0x0e,0x43,0x62,0x67,0x1c,0x5f,0xc9,0x28 -,0x1d,0xc4,0x69,0x36,0xb9,0xa3,0x11,0x60,0x80,0x85,0x82,0xdb,0x04,0xa4,0x06,0xa0,0x38,0xff,0xf1,0x50,0x80,0x2f,0xff,0xfc,0x21,0x0a,0xcf,0xef,0xb7,0xff,0xff,0xfc -,0xb4,0x60,0xc0,0x58,0x8a,0x14,0x0b,0x05,0xc2,0xa1,0x60,0xa0,0xd8,0x6e,0x14,0x0a,0x85,0x04,0xa1,0x21,0x18,0x48,0x42,0x72,0x0a,0x84,0xc2,0x24,0x57,0x5b,0x74,0xa9 -,0xe3,0xac,0xeb,0x6c,0xad,0x54,0xd6,0xda,0xdb,0x5b,0x97,0x52,0x18,0xfb,0xdf,0x3e,0x6a,0x0d,0x78,0x69,0x68,0x7d,0x5f,0xbe,0x29,0xe1,0xf8,0x27,0x5e,0xd7,0x57,0xcb -,0xbd,0xaf,0x3a,0xea,0x42,0x8f,0x1e,0x7c,0x70,0x8e,0xd7,0x5b,0x46,0x17,0x1b,0x9e,0x3c,0x41,0x30,0x57,0x35,0xf3,0xfa,0x5d,0x05,0x62,0xa5,0xf3,0xf2,0x0e,0x51,0xd3 -,0x29,0x3f,0x67,0x2d,0xba,0xe8,0xe3,0xa0,0x6e,0x7c,0x62,0x75,0x34,0x89,0xbf,0xa7,0xfc,0x65,0x77,0xf5,0x16,0xc1,0xf2,0x79,0xd4,0x9e,0xbb,0x3d,0xfe,0xf2,0x0b,0x9c -,0x8a,0x75,0xb1,0xf4,0x32,0xb5,0xc3,0xde,0xaf,0x51,0xce,0x6d,0x1c,0x18,0x55,0xf1,0xa2,0x90,0x46,0xec,0x5b,0x67,0x05,0x2f,0x54,0x18,0x9f,0x8a,0x15,0x45,0x18,0xbf -,0x2b,0xd0,0x2d,0x34,0x46,0xb4,0xe1,0xe4,0x00,0x00,0xf7,0x40,0xac,0xc2,0xe9,0x00,0x2e,0x9d,0x10,0x01,0x42,0x82,0x60,0xc0,0x50,0x50,0x16,0x1a,0x85,0x02,0xc1,0x20 -,0xa0,0x94,0x28,0x25,0x12,0x04,0xc2,0xa2,0x40,0xa8,0x5c,0x2a,0x33,0x20,0xa1,0x5e,0xb9,0x9a,0xf1,0xe7,0x33,0xcd,0xf8,0xf3,0xe2,0xd5,0x0c,0x85,0x71,0x37,0x35,0x52 -,0xaf,0xcd,0xef,0x5b,0xba,0xfb,0x8f,0x13,0xc6,0xd1,0xfa,0xd0,0x0b,0x52,0xec,0xbd,0xe8,0x36,0xcf,0x36,0xbf,0xa4,0x6b,0xc2,0x5c,0xe8,0xbc,0x97,0xf7,0x06,0x1e,0x3e -,0x8e,0x9f,0xb7,0xfa,0x04,0xf9,0xf6,0x3c,0x5f,0x67,0xed,0x8a,0xfe,0x13,0xdf,0xbf,0x8a,0x9c,0x78,0xfd,0x8a,0x4f,0xff,0x9a,0x5e,0xbe,0x36,0xff,0x1f,0xfb,0xef,0x5c -,0xe5,0xd2,0xf8,0x63,0x8c,0xf2,0x87,0x2e,0x4f,0x9b,0x89,0xfe,0xbe,0x0e,0xda,0xbf,0x67,0x57,0x9b,0x91,0x21,0xe6,0x9d,0xde,0x4f,0x28,0x00,0xe2,0xaa,0x44,0x27,0x81 -,0xc2,0xa6,0x38,0x8a,0x39,0x87,0x20,0x23,0xd6,0x72,0x0d,0xfb,0x04,0xab,0xfe,0xdd,0x27,0x70,0x82,0x7d,0xfc,0xfa,0xf1,0x4d,0xeb,0x83,0xfa,0x83,0xd6,0x82,0x62,0xe0 -,0x58,0xaa,0xe5,0x85,0xc2,0x00,0x30,0x56,0x2a,0x94,0x58,0x44,0x51,0x1b,0x81,0xc0,0xff,0xf1,0x50,0x80,0x32,0x3f,0xfc,0x21,0x0a,0xcf,0x7f,0xef,0x7f,0x7f,0xfb,0xb4 -,0x62,0x18,0x58,0x28,0x26,0x12,0x86,0x02,0x82,0x60,0x90,0x58,0x28,0x15,0x0a,0x09,0x44,0x82,0x50,0xa0,0x48,0x26,0x11,0x31,0x8c,0x4a,0x5d,0x4f,0x3e,0x2e,0xab,0x8e -,0x78,0xad,0xf9,0xe6,0x55,0x69,0x31,0x74,0xd6,0xf5,0x54,0x75,0x89,0xc3,0xad,0x0f,0x3c,0x9c,0xbb,0xbb,0xad,0xfc,0x51,0xfc,0x21,0xdb,0xfe,0xce,0x30,0xff,0xaf,0x29 -,0xfc,0x9c,0xec,0x43,0x57,0xe1,0x2e,0xb3,0xab,0xfc,0x5f,0x80,0xd5,0x1d,0x75,0x97,0x79,0x30,0x15,0x2d,0xaf,0xfe,0xe1,0x7b,0xbf,0x4e,0xa7,0xff,0x45,0x6f,0x82,0x6f -,0xee,0xb8,0x85,0x35,0xc5,0xe0,0xcd,0x88,0x8f,0xe2,0x87,0x44,0x71,0x0a,0x3f,0x44,0xea,0x67,0xc4,0xd2,0x22,0xff,0x2c,0xb2,0xbe,0xc7,0xb9,0x41,0xca,0xa1,0xd7,0x0d -,0x2b,0xac,0xf6,0x9c,0x5f,0x6e,0x13,0xc3,0x65,0xef,0x2c,0x66,0xdb,0xca,0xb4,0xe7,0x4b,0x60,0xa7,0x3d,0x27,0x5d,0x6a,0xc2,0x52,0x64,0xfd,0xdb,0xef,0x12,0x77,0xab -,0x45,0x49,0x16,0x7b,0xa1,0x54,0x9d,0xe4,0x21,0xeb,0x18,0xc9,0x5d,0xb7,0x32,0x81,0x72,0x22,0x65,0x80,0xa0,0x80,0x09,0xf2,0x0a,0x05,0x8a,0x41,0x41,0xb0,0x50,0x4c -,0x24,0x0b,0x09,0x02,0x61,0x41,0x28,0x5c,0x2a,0x26,0x0a,0x84,0xc2,0x81,0x32,0x28,0x44,0x26,0x21,0x09,0x84,0x44,0xfb,0x73,0x57,0x7b,0xe3,0x57,0xce,0xea,0xf2,0x57 -,0x9f,0x0d,0x62,0x45,0x55,0xae,0xaf,0x5b,0xeb,0xcf,0xbc,0xc9,0xd7,0x43,0xbb,0xf4,0x35,0x7b,0xa8,0xf5,0xbf,0xb7,0xdb,0x6e,0x86,0xf9,0xf9,0x3b,0x9f,0x44,0x26,0xe2 -,0x5d,0x55,0xbe,0xa9,0xfa,0x48,0xbc,0xc3,0x55,0xc5,0x37,0x9c,0x80,0x75,0xd4,0x57,0xaa,0x1b,0xcd,0xfb,0x54,0x07,0x55,0x1f,0xef,0xf8,0x6f,0xad,0xfd,0xe3,0xf3,0x7f -,0xf0,0x7d,0x5e,0xdf,0x0f,0xc7,0xf7,0x7d,0x2f,0xe0,0xf3,0x03,0xe7,0xcb,0xee,0x1d,0x43,0xce,0x00,0x7c,0xfd,0x9e,0x3d,0x14,0xe0,0x73,0x36,0xac,0xf5,0x38,0xd9,0x6c -,0x5e,0x94,0x09,0x08,0x39,0x85,0x9c,0x9c,0x27,0x93,0x88,0x77,0xbf,0xc6,0x3f,0xd8,0x0e,0xf7,0x73,0x82,0x41,0x1f,0x54,0xff,0x1f,0xf2,0x3b,0x67,0x06,0x81,0x31,0xfe -,0x0d,0x05,0xfb,0x87,0xbb,0xdd,0x0c,0xae,0xe7,0xb8,0x1e,0x60,0x00,0x46,0x62,0x4a,0x3b,0x83,0xb8,0x48,0x69,0x9e,0xea,0x10,0xe0,0x40,0x87,0xe4,0x00,0x3a,0x09,0x48 -,0x0e,0xff,0xf1,0x50,0x80,0x33,0x9f,0xfc,0x21,0x0a,0xcf,0xdf,0xff,0xde,0xff,0xed,0xb1,0x40,0xc0,0x58,0x28,0x13,0x0a,0x04,0x82,0x81,0x60,0xb8,0x50,0x2e,0x14,0x13 -,0x85,0x02,0xc1,0x40,0xb8,0x48,0x2a,0x14,0x12,0x85,0x04,0x41,0x30,0xa8,0x48,0x22,0x63,0x10,0x95,0xbd,0x63,0xce,0x6b,0x5f,0xa7,0xb7,0x37,0xae,0xf8,0xcb,0xcd,0x31 -,0x75,0x53,0x55,0x44,0xd6,0x5c,0x66,0x9c,0x74,0x3f,0x91,0x47,0x43,0xd8,0x5f,0xf8,0xff,0x0f,0x99,0x7c,0xb8,0x8e,0xff,0x8f,0x7d,0x3d,0x6f,0x1b,0x8b,0x7c,0xbf,0x5f -,0x3d,0xf2,0x7b,0x1f,0x8b,0x2b,0xf0,0x0c,0x36,0x98,0x1a,0x5c,0xdf,0x80,0xf4,0xd0,0x8a,0x7d,0x5b,0x37,0x12,0x71,0x93,0x5b,0x8d,0x25,0x7b,0x03,0x29,0x84,0x44,0xea -,0x06,0x3e,0x26,0xb0,0xed,0x4c,0x33,0xed,0xa2,0x72,0x3a,0x8c,0xd5,0x87,0x01,0x85,0x3f,0xbc,0xb6,0x26,0xf6,0x14,0xe4,0xb8,0x5c,0x13,0x4b,0x13,0x24,0x91,0x8d,0xa3 -,0xdb,0x3b,0xca,0x2d,0x8b,0x1d,0xa5,0x5a,0x74,0xb6,0x2f,0x85,0x6f,0x53,0x6a,0x55,0x88,0x9a,0x65,0x68,0x46,0x6d,0xc8,0x42,0x28,0x8f,0x5d,0x34,0x7b,0xe0,0x41,0xb0 -,0xaa,0xa9,0xa3,0x15,0xa2,0xee,0x00,0x2a,0xa8,0x15,0x4a,0x14,0x0c,0x05,0x83,0x01,0x60,0xa0,0x54,0x28,0x15,0x0a,0x05,0x82,0x81,0x20,0xb8,0x50,0x2a,0x14,0x13,0x05 -,0x02,0xc1,0x40,0xb8,0x50,0x2a,0x16,0x09,0x85,0x44,0x64,0x50,0x98,0xd4,0x22,0x47,0xc7,0xe9,0xa7,0x3e,0x7c,0xf3,0xdf,0x1c,0xdf,0xb7,0xda,0xe6,0xec,0xa9,0x7b,0xbd -,0xf1,0x52,0x54,0x95,0x7c,0x27,0x3e,0xd3,0x80,0xe9,0xd7,0x45,0x78,0xbe,0xd0,0x2d,0x07,0xd3,0x5f,0x2d,0xe8,0x72,0x2f,0x53,0x48,0x85,0x50,0x11,0xa7,0xc7,0xf2,0x95 -,0xa7,0xde,0xa5,0xf9,0x4e,0x5a,0xfa,0x8d,0x47,0xfa,0x28,0xb4,0x1f,0xb7,0xfb,0x4b,0x76,0xca,0x14,0x3f,0xd9,0x80,0x25,0x7e,0x13,0xdb,0x55,0xf5,0x55,0x3f,0xe9,0x3f -,0x6d,0x9a,0xd1,0xbe,0x15,0xc5,0xf3,0x6e,0x5e,0xec,0x5c,0x30,0x25,0xf2,0x47,0x34,0x72,0xf9,0xa2,0xe7,0x50,0xad,0x18,0x00,0xa5,0x5e,0x72,0xfe,0x9d,0x04,0xff,0xc5 -,0x53,0x0a,0xea,0x70,0x59,0x76,0x8d,0xc7,0x30,0xe0,0xc2,0xc9,0x9e,0xea,0x7a,0xbf,0xfe,0xaf,0xad,0xd6,0xf5,0xa6,0xe4,0x9f,0xb7,0xec,0x91,0xf7,0xa3,0xcd,0x46,0x57 -,0xc2,0x2d,0x39,0xa1,0xcf,0x9a,0x5a,0x53,0xbb,0x45,0x90,0x81,0xdc,0x54,0x77,0xc5,0x40,0x1e,0x00,0x08,0xd5,0x72,0x05,0x01,0x28,0x89,0x0a,0x00,0xe0,0xff,0xf1,0x50 -,0x80,0x32,0x5f,0xfc,0x21,0x0a,0xcf,0xef,0xf7,0xdb,0xdf,0xff,0xb1,0x62,0xa0,0x94,0x2c,0x23,0x0b,0x85,0x04,0xe1,0x61,0x28,0x58,0x2a,0x14,0x11,0x05,0x02,0x41,0x40 -,0xa8,0x48,0x22,0x15,0x08,0xb5,0xbf,0x3d,0xcb,0xbd,0x77,0x57,0x97,0x59,0x6d,0x54,0x95,0x91,0x57,0x4b,0x4b,0xa8,0xab,0xbb,0xaf,0x3e,0xc2,0xfd,0x72,0x7a,0x7d,0x79 -,0xf6,0x50,0x3b,0x39,0xe6,0x8d,0x74,0x51,0xcb,0xa2,0x53,0xfe,0x11,0xbf,0xe0,0x1d,0xfd,0x9f,0x79,0xb6,0xfc,0xed,0xb0,0x3a,0xb9,0x0a,0xeb,0x31,0x1e,0x7c,0x7b,0xb4 -,0x71,0x12,0xa8,0x1b,0x9f,0x4b,0x1f,0xe9,0x7d,0xf1,0xb7,0xd0,0xd4,0xdd,0xdb,0x5c,0x7e,0xbc,0xed,0xe1,0x36,0xbf,0x1e,0x6f,0xd5,0x35,0x79,0x37,0xe8,0x0a,0xa0,0x5f -,0xec,0x8c,0xcd,0xe2,0xd2,0x26,0x60,0x4a,0xa5,0xcb,0x5f,0x7b,0x5b,0x9e,0x6b,0x38,0x2a,0x0a,0x69,0x07,0x28,0x46,0xf7,0x70,0x46,0x75,0xa5,0xe9,0x5b,0x34,0xcd,0xfe -,0x86,0x2d,0xd1,0x90,0xdd,0x22,0xd4,0xba,0x11,0xba,0x56,0x59,0x2a,0x25,0x1a,0x92,0x3c,0x83,0xb9,0x3d,0x42,0x73,0x20,0x06,0xa9,0x80,0x16,0x20,0x05,0x52,0x0a,0x02 -,0xc3,0x70,0xa8,0x50,0x46,0x17,0x09,0x85,0x02,0xe1,0x30,0xa8,0x50,0x2e,0x14,0x2b,0x05,0x4a,0x41,0x31,0x88,0x8c,0x42,0x13,0x08,0x8d,0xfb,0xff,0x6f,0x8f,0x13,0x3e -,0x39,0xf8,0xef,0xbd,0x65,0x64,0xad,0x54,0xc4,0xad,0x57,0x19,0xb9,0xa2,0x9d,0x73,0xab,0xaf,0x8e,0x07,0x2b,0xfa,0xfa,0x7a,0x8f,0x46,0x77,0xe9,0xe3,0x5f,0x7e,0xeb -,0x6d,0xdc,0x8b,0xfc,0x6d,0x8b,0xf3,0x79,0x3a,0xfe,0x22,0xff,0x85,0x10,0xff,0x0f,0xe9,0xb1,0xf7,0xc3,0xec,0xba,0x1f,0xfd,0x5d,0x91,0xbf,0x66,0x9f,0x89,0xf8,0xdd -,0xef,0xff,0xff,0xf7,0xe7,0xd9,0xe6,0xe5,0xff,0xf2,0x3c,0x0b,0xdd,0x7f,0x4c,0x4f,0xdc,0x4f,0xec,0xdd,0x5c,0xeb,0x3a,0x55,0x4a,0x37,0x84,0x3e,0x6e,0xfe,0x7c,0x7e -,0x37,0xc7,0x99,0xdc,0xe3,0xc3,0x9b,0x9f,0x97,0x67,0x07,0x04,0x16,0x73,0x5d,0xb9,0x47,0x62,0x52,0x2f,0xd1,0x6e,0x17,0x73,0xcd,0x6e,0x9e,0x5c,0x1c,0x2e,0xac,0xdc -,0x2e,0xd4,0x58,0xf8,0x7a,0xb7,0x3b,0xa3,0x47,0xff,0xcc,0xe4,0x8f,0x96,0x42,0x6e,0xe3,0x6f,0x89,0x5a,0x4d,0x18,0x9c,0xeb,0x4a,0x87,0x7f,0xb9,0x63,0xcd,0x9b,0xf1 -,0xae,0x77,0xdc,0x27,0x57,0x85,0x00,0xad,0x74,0xdc,0x2a,0x24,0x82,0xc0,0x38,0xff,0xf1,0x50,0x80,0x32,0xff,0xfc,0x21,0x0a,0xcf,0xcf,0xff,0xff,0x5f,0xbf,0xb1,0x60 -,0xb8,0x58,0x30,0x16,0x0a,0x0d,0x82,0xe1,0x40,0xa8,0x50,0x30,0x17,0x0a,0x85,0x82,0xa4,0x40,0x90,0x58,0x2a,0x43,0x09,0x08,0xc2,0x21,0x30,0x88,0x4c,0x2a,0x11,0x09 -,0x84,0x48,0x51,0xf1,0xdd,0xce,0xef,0x38,0xa6,0x38,0xdf,0x0d,0xe5,0xc4,0x93,0x9b,0x99,0xc6,0x5f,0x19,0xa9,0xbf,0xe7,0x80,0x9d,0xd5,0xde,0xf9,0x29,0xd2,0x1f,0x2e -,0x3a,0xf3,0x47,0x73,0x79,0xb9,0x79,0x9f,0x6d,0xe4,0x30,0xd7,0xfe,0x70,0x31,0xb8,0x68,0x69,0x7e,0x4c,0x23,0xbd,0xda,0x97,0xb5,0x4b,0xe3,0x1c,0xf8,0x3e,0x1f,0xd5 -,0x5c,0xec,0xf6,0x38,0x9c,0x07,0x0e,0x0b,0xdc,0x31,0xd5,0x1b,0x38,0x2f,0xe7,0xc6,0x1c,0x50,0x4d,0x5e,0x3c,0x35,0x59,0xcb,0x18,0x83,0x97,0x26,0x37,0x54,0x43,0xaf -,0xda,0x9b,0x9c,0x52,0x11,0x0e,0x58,0x71,0x51,0x7c,0x48,0x51,0x18,0xff,0xec,0xaa,0xe7,0x62,0x8e,0xbc,0x10,0x67,0x8e,0x96,0x11,0x1b,0x0b,0x66,0x66,0xaf,0xbb,0x3d -,0x1a,0x21,0xb0,0xa5,0xd4,0x59,0xf6,0xf3,0xac,0xae,0xb5,0x73,0xd4,0xef,0x43,0xe1,0xfa,0xd4,0x00,0x1e,0x20,0x8a,0x8b,0x11,0x1e,0xb7,0xb8,0x09,0x04,0xb6,0x5a,0xa0 -,0x05,0x45,0x00,0xaa,0x40,0xb0,0x60,0x2e,0x14,0x0b,0x06,0x02,0x82,0x50,0x90,0x58,0x28,0x45,0x0b,0x09,0x04,0xa1,0x40,0xa8,0x5c,0x2a,0x73,0x18,0x88,0xc2,0x25,0x37 -,0x75,0x95,0xe5,0x9e,0x7d,0x70,0xdd,0x49,0xb8,0xd6,0x4d,0x6d,0x5a,0xdd,0xb5,0x55,0xf1,0xbc,0xf6,0xf5,0x7f,0xaf,0x03,0xa0,0x6b,0x28,0x35,0x1d,0xfc,0xfe,0x37,0xf0 -,0xba,0x31,0xf8,0x5b,0xf7,0x63,0x9d,0xa8,0x43,0xed,0x49,0xd3,0x7a,0xbb,0x1d,0xab,0x76,0xfe,0xd7,0x55,0x5e,0x3d,0x80,0x4a,0xb8,0x70,0xfd,0x7e,0x2f,0xa6,0xfa,0xcb -,0x91,0x7f,0xf3,0x7f,0xbd,0xaf,0x80,0x71,0xf3,0x1e,0x57,0xef,0x7f,0x1f,0xd1,0xf5,0x0e,0x2e,0x4e,0x7f,0x77,0x18,0xd4,0xd9,0xe5,0x03,0x8f,0x0e,0x0e,0x6b,0x3e,0x12 -,0x80,0xee,0xcf,0x24,0xb9,0xc3,0x87,0xc1,0x5c,0x2c,0xe7,0xc4,0x71,0xbe,0x7c,0xdc,0x81,0x4c,0xfb,0xee,0xb2,0xa5,0x57,0x39,0xe3,0x84,0xf1,0x51,0x7c,0x28,0x84,0xa7 -,0x8e,0x9c,0x81,0xcd,0xcd,0x76,0x14,0xff,0xda,0x27,0x77,0xba,0xb2,0x73,0xb4,0xcb,0xe4,0xef,0x5c,0xb2,0x21,0x05,0x42,0x29,0x3d,0x72,0x22,0x13,0x08,0xd0,0xde,0x96 -,0x7a,0x80,0x0b,0x8b,0x01,0xc0,0xff,0xf1,0x50,0x80,0x32,0x3f,0xfc,0x21,0x0a,0xcf,0x7f,0x07,0xff,0x7f,0xee,0xb1,0x70,0xb0,0x5c,0x30,0x16,0x12,0x09,0x82,0x82,0x60 -,0xa0,0x48,0x2c,0x14,0x0a,0x85,0x04,0xa2,0x40,0x90,0x54,0x48,0x12,0x0a,0x05,0x42,0x61,0x10,0x98,0xc4,0x66,0x11,0x2b,0x25,0x70,0xce,0x3c,0x7b,0x3b,0xe2,0xfb,0xf3 -,0xc8,0x6b,0xbd,0x4a,0xae,0x2a,0xf9,0xe2,0xb5,0xdb,0x8e,0xbb,0xbd,0x7d,0xc1,0xf1,0xba,0xf8,0x78,0xce,0xf8,0x4b,0x5e,0xab,0x7e,0xef,0xfa,0x09,0x7b,0x3f,0xe2,0x7e -,0x3b,0x8f,0x35,0xb1,0xfe,0x18,0xde,0xfe,0x25,0xde,0x8b,0x1e,0xcf,0xf2,0xfd,0x70,0xcf,0x95,0xc7,0x24,0x5b,0x1f,0x0f,0xf3,0xbb,0xe2,0xd7,0x51,0xd2,0xce,0x0a,0xfe -,0xd9,0x1b,0x99,0xff,0x7a,0x9d,0x32,0x97,0xb7,0xb1,0xcd,0x00,0xe9,0xbb,0xb6,0x41,0xaf,0x1e,0x0b,0xc5,0x8b,0xf1,0xfc,0xf6,0x0f,0xe9,0x7a,0x0f,0xcf,0x7a,0xa4,0x2f -,0x3c,0xed,0x93,0x91,0xe7,0xfe,0xc4,0x31,0xad,0x32,0x73,0xf5,0x65,0xae,0x41,0x1e,0xfc,0xaa,0xf6,0x3d,0xba,0x4a,0x3d,0xc1,0xdc,0x2d,0x7b,0x42,0x4e,0x57,0x82,0x36 -,0xc2,0x7f,0x69,0x7e,0xa8,0x03,0xdc,0x40,0x14,0x5d,0x64,0x10,0x80,0x58,0xad,0xd7,0x01,0x61,0x20,0x2a,0x18,0x28,0x16,0x0a,0x09,0x84,0xa1,0x40,0xb0,0x54,0x2c,0x55 -,0x0b,0x85,0x82,0x82,0x56,0x08,0x4c,0x2a,0x13,0x0a,0x88,0x42,0x61,0x11,0x38,0xfb,0x4a,0xe2,0xb8,0xf3,0xf6,0xbd,0xab,0x8e,0x7a,0xad,0xca,0xd5,0x16,0xcd,0x51,0x7f -,0x5e,0xfd,0x56,0xf8,0xe7,0x8f,0xaf,0xb8,0x3e,0x3a,0x3e,0xdf,0x67,0xc8,0x7f,0x9b,0xe6,0xba,0x89,0xcf,0x58,0x6c,0x37,0xb6,0x60,0x2e,0x8e,0xb5,0x4f,0xdd,0xf8,0xd8 -,0x95,0x5f,0xc8,0x7a,0xf5,0x9e,0xb4,0x8f,0xa9,0xc1,0xb6,0x7c,0x2d,0x8d,0x16,0x8e,0xf4,0x2e,0x23,0xff,0x7a,0xfe,0xeb,0xf4,0xdc,0xbc,0x26,0x9c,0x0e,0x1c,0x1f,0x51 -,0xce,0x43,0x83,0x89,0xdb,0xc3,0x84,0x23,0x99,0xf1,0xf8,0xab,0xcc,0x1f,0x77,0x31,0x07,0xdc,0x0f,0x23,0x95,0x11,0x3e,0x1c,0x8c,0xf3,0xe1,0xc9,0x10,0x71,0x07,0xd2 -,0xe3,0x74,0xe2,0xe6,0x1c,0x5b,0x28,0x71,0x07,0x17,0x3b,0x6c,0xf9,0xf0,0xdf,0x27,0x03,0x9c,0x82,0x80,0xb3,0x87,0x33,0x8a,0xda,0x42,0x60,0xee,0x21,0x50,0xf3,0x00 -,0x1d,0xff,0xff,0xec,0x01,0x63,0xdd,0xc8,0x00,0x1e,0x20,0x04,0xe3,0x15,0x91,0xc6,0x7a,0xd5,0x54,0x02,0xe4,0xc0,0xe0,0xff,0xf1,0x50,0x80,0x2f,0x5f,0xfc,0x21,0x0a -,0xcf,0x7e,0xe8,0xfb,0x6f,0xfe,0xb0,0x70,0xb1,0x54,0x30,0x16,0x0a,0x84,0x82,0xc1,0x41,0x30,0x50,0x4e,0x16,0x0b,0x85,0x44,0x61,0x51,0x18,0x48,0x2a,0x12,0x09,0x88 -,0x44,0x61,0x20,0x88,0x4c,0x62,0x13,0x08,0x89,0x95,0xe7,0xc6,0xb8,0xdf,0x8e,0x24,0xba,0xdd,0xdd,0x65,0xc5,0x24,0xce,0x37,0xa9,0xbe,0x2b,0x97,0x5e,0x73,0x9f,0x3c -,0x50,0x78,0x3e,0xce,0x1e,0x71,0x2f,0x3f,0x54,0xa9,0xbf,0xd8,0x06,0x9b,0xf9,0x5f,0xe8,0xfd,0xe7,0x64,0x4d,0x5e,0x87,0x93,0xb8,0x04,0xf6,0x1d,0xa3,0xa8,0x18,0xf8 -,0xed,0x99,0x29,0xbf,0xc7,0x95,0xbe,0x8e,0xe3,0xb6,0xa8,0xf0,0x3e,0x8f,0x02,0xe2,0xbc,0xfe,0x63,0x4f,0x48,0xe5,0x3c,0x48,0xce,0x06,0xb1,0xec,0xa9,0x72,0xb8,0x85 -,0x7b,0x63,0xbe,0xef,0x72,0x5c,0xf8,0xf5,0x21,0xec,0xc4,0x8e,0x11,0xc5,0xc0,0x2c,0x8a,0xbe,0xea,0xcf,0x56,0x3f,0xe5,0x08,0x5e,0xf7,0xf4,0x40,0xf0,0xab,0xd3,0x7c -,0x9b,0x2a,0x3e,0xb5,0x23,0x04,0x76,0x0f,0x04,0x9c,0xa6,0x4c,0x04,0xa0,0x5e,0x9b,0xa7,0x6d,0xd2,0x49,0xf6,0xe0,0x0e,0xf0,0x49,0xdd,0x09,0xdf,0x54,0x41,0xdc,0x10 -,0x01,0x21,0x70,0x2a,0x10,0x2c,0x18,0x13,0x05,0x02,0xa1,0x20,0xa0,0x48,0x28,0x65,0x0a,0x05,0x82,0x81,0x51,0x20,0xd4,0xa6,0x41,0x12,0x84,0xc8,0x22,0x67,0x1f,0xb7 -,0xb6,0xfd,0xbe,0x3f,0x6f,0xaf,0xb6,0xaa,0xf3,0x3d,0xbd,0x49,0x26,0xe2,0x71,0xcf,0x15,0x96,0xe3,0xa7,0x3c,0xf0,0xbd,0x70,0x39,0x41,0xf0,0xad,0xd3,0x7f,0xa4,0x4f -,0x8f,0xfb,0x3b,0xcf,0x79,0x3d,0xfc,0x63,0xf2,0xfe,0x45,0xee,0xd3,0x9a,0xf9,0x14,0xb4,0xb7,0xb4,0x67,0xd9,0x63,0xe2,0xe7,0xc7,0x35,0xd5,0x48,0x54,0xa9,0xf9,0xfe -,0xb9,0xeb,0xc7,0xe4,0xf8,0x03,0xe8,0xe6,0x52,0x97,0xae,0x96,0xac,0xfb,0xa3,0xab,0xd5,0xb1,0x2a,0x9f,0xa3,0xec,0xca,0x39,0x8e,0x6a,0x60,0x78,0x87,0x20,0x27,0x84 -,0xdb,0x80,0x5f,0x99,0xe3,0xc4,0x00,0x39,0x83,0x87,0x80,0x0f,0x10,0x63,0xaf,0xe5,0x14,0x3d,0x87,0x78,0x76,0xbf,0x08,0x84,0x48,0x03,0xbe,0x2c,0x50,0x40,0x58,0x79 -,0x00,0x00,0x7f,0xfd,0x52,0x01,0xee,0x02,0xaf,0x71,0xdc,0x77,0x80,0x50,0x02,0xc0,0x70,0xff,0xf1,0x50,0x80,0x2d,0xff,0xfc,0x21,0x0a,0xcf,0xfe,0xff,0xed,0xef,0xfc -,0xb0,0x62,0xa0,0x58,0x6a,0x14,0x2a,0x90,0xc2,0x82,0x50,0xa0,0x54,0x24,0x24,0x08,0x84,0x84,0x2c,0x66,0xea,0x4e,0x9c,0xcf,0x3c,0xa5,0xe5,0xd2,0xf2,0xa3,0x5c,0xd5 -,0xa4,0x4a,0xa5,0xdd,0xc9,0xd7,0xc0,0x2d,0x7b,0x7b,0xfa,0xfb,0x33,0xfc,0xe3,0xab,0xfa,0xcb,0xf1,0x7f,0xd7,0x53,0x7d,0xc0,0xfe,0x24,0x47,0xf4,0xe8,0xbe,0xc7,0x0f -,0x21,0xe5,0xf7,0x7d,0x6a,0x97,0x67,0x07,0x50,0xe7,0x1d,0x48,0xe4,0x3c,0x7f,0x3a,0x4b,0xc2,0xf9,0x7c,0x4f,0x51,0xd7,0xaf,0x9d,0x63,0xd9,0x66,0x37,0xf9,0x5d,0x28 -,0x5f,0x2c,0xac,0xae,0xae,0x48,0xe4,0x19,0xff,0x51,0x47,0x0d,0x1b,0xe2,0x50,0x48,0x47,0xb5,0x58,0xe3,0x46,0x73,0xad,0x29,0x19,0x2f,0x91,0xe1,0x9c,0xc7,0x0b,0x6e -,0x07,0x88,0xe8,0x5c,0xe1,0x8b,0xe4,0x46,0x74,0x6c,0x25,0xdd,0x68,0x51,0x4d,0x09,0xa3,0xae,0x29,0xb7,0xc2,0xcb,0xb2,0x9a,0x0b,0xa9,0x14,0x55,0x65,0x11,0x26,0x55 -,0x50,0x22,0xb0,0xa8,0x26,0x0b,0x81,0x54,0x82,0x60,0xc0,0x58,0x2a,0x24,0x09,0x05,0x04,0xe1,0x30,0xb8,0x60,0x2c,0x15,0x32,0x05,0xc4,0xa1,0x11,0x18,0x44,0x2a,0x23 -,0x10,0x84,0xc2,0x27,0x57,0xf9,0xff,0xb6,0xa5,0x5f,0xb5,0xfe,0x6d,0xd7,0x88,0xaa,0xbc,0xba,0xe1,0xcf,0xeb,0x5f,0x3f,0x1e,0xfa,0x5e,0x75,0x7e,0xa5,0xaf,0xa1,0xc1 -,0xf1,0x6e,0xaf,0x7e,0x88,0x6f,0xa3,0xe9,0x7a,0x1b,0x74,0x9c,0x4f,0x4e,0x7c,0x0c,0x7a,0x17,0xfc,0xaf,0x4c,0xbe,0x3f,0x8c,0xe5,0x1e,0xdc,0xb9,0xce,0xe1,0xcb,0x9f -,0xcc,0x9e,0x8e,0x8f,0xff,0xb9,0x66,0x0e,0x4e,0x3c,0x1c,0x38,0xb8,0x73,0x3c,0x03,0x87,0x46,0x8b,0xfe,0x17,0xbb,0xde,0x0f,0x38,0x39,0xde,0x7d,0xe0,0x3a,0x8d,0x1e -,0xde,0xce,0xae,0xd9,0x93,0x2e,0x31,0x28,0x14,0xcb,0x6e,0xeb,0xeb,0x4e,0xf5,0x4a,0xe4,0x2a,0x9e,0xc6,0x6e,0xaf,0x82,0xa9,0x29,0x62,0xec,0x81,0xc0,0xe6,0x8f,0x5e -,0x94,0x35,0x13,0x31,0xc5,0xeb,0x95,0x9d,0xad,0x60,0xee,0x87,0xef,0xa0,0x94,0xc0,0x32,0xa7,0x78,0x1d,0xce,0x0b,0x4a,0x65,0xd0,0x63,0x16,0x09,0x05,0x75,0x00,0xe0 -,0xff,0xf1,0x50,0x80,0x2e,0x1f,0xfc,0x21,0x0a,0xcf,0xff,0xff,0x7f,0xd7,0xfc,0xb1,0x60,0xb8,0x60,0x2c,0x34,0x0b,0x05,0x42,0xc1,0x42,0xa8,0x50,0x2c,0x14,0x1a,0x8c -,0x82,0xa1,0x10,0x90,0x84,0xe6,0x11,0x33,0x9d,0x73,0xaf,0x3c,0xfc,0x7e,0x78,0xba,0x4c,0x9a,0xca,0xab,0x52,0x5e,0x4a,0x6b,0x25,0xe5,0x7c,0x73,0xc5,0xda,0xc3,0xef -,0x8e,0xec,0x9d,0x27,0xe3,0x7f,0xe3,0x0e,0x73,0xf2,0xd7,0xd7,0xf7,0x34,0x8e,0x1c,0x05,0x6f,0xed,0xc5,0xcc,0x76,0x42,0xda,0x10,0xef,0x8d,0x28,0x97,0xbc,0xa6,0x0c -,0x5b,0xb8,0x63,0xa5,0x90,0xa7,0xef,0xbd,0xb6,0x9b,0xf4,0xf6,0x58,0x4f,0x1f,0x61,0x13,0x85,0x7a,0x30,0xad,0x9d,0xf9,0xb1,0xed,0x7b,0x04,0x56,0x91,0xe6,0x9a,0x92 -,0xff,0x03,0x06,0x25,0x05,0xa6,0x8f,0x1b,0x9a,0x0a,0xac,0x98,0x4d,0x15,0x4a,0xdd,0x29,0xfc,0x86,0xb5,0x7a,0xfe,0x14,0xef,0x22,0xd7,0x9d,0x5c,0x21,0x62,0x85,0x8f -,0x16,0x31,0x13,0xfb,0xcf,0x3c,0x23,0x90,0x93,0xbe,0x01,0x75,0x60,0xbd,0x97,0x2a,0x2d,0x70,0x0a,0x44,0x2a,0x01,0x30,0x29,0x19,0x2a,0x14,0x32,0x89,0x04,0xc1,0x50 -,0xa0,0x48,0x22,0x55,0x09,0x85,0x02,0x61,0x10,0x98,0x84,0x26,0x11,0x09,0x84,0x46,0xf1,0xb9,0x96,0xf6,0xf5,0xa2,0x4f,0x17,0x78,0x4b,0xeb,0x2e,0x7b,0x4f,0x5e,0xf3 -,0x34,0xea,0xbd,0xb9,0xe7,0x4f,0x6f,0x21,0xf7,0xeb,0xe3,0x36,0xcf,0x40,0xf9,0x26,0xd9,0x76,0x88,0xbb,0x6f,0xad,0x7e,0x4d,0x09,0xad,0xbd,0xde,0x13,0xca,0xe9,0x7d -,0x5e,0x57,0xda,0x7f,0xdf,0xfe,0x8d,0xd7,0xc7,0x83,0x9f,0x1e,0x0f,0x93,0xb7,0xf9,0x3f,0xfe,0xb8,0xc9,0xfb,0xff,0xf3,0x95,0xfc,0xed,0xa8,0x29,0xe1,0xe4,0x1c,0x4a -,0x3c,0x2b,0xf2,0x1b,0x54,0xa7,0xd2,0x3b,0xc8,0xd3,0x55,0xb0,0xf9,0xe8,0x12,0x0f,0xbc,0xb1,0x59,0x32,0xfe,0x77,0xd0,0x45,0xcd,0xf3,0xe7,0xca,0x3a,0x9c,0xe1,0xfb -,0x67,0x0b,0xae,0xfa,0xeb,0xfc,0xa8,0x39,0x10,0xeb,0x65,0xcd,0x4f,0x4e,0x5e,0x50,0xf5,0xfd,0xad,0x6a,0xa7,0xe9,0x77,0x81,0xdf,0x0e,0xff,0xb9,0x41,0xdc,0x0f,0x58 -,0x23,0x2a,0x66,0x32,0x90,0xf8,0x7a,0xe4,0xc1,0x28,0xcf,0x48,0x15,0x88,0x80,0x1c,0xff,0xf1,0x50,0x80,0x2d,0xff,0xfc,0x21,0x0a,0xcf,0xeb,0xed,0x7d,0xff,0xfb,0xb1 -,0x62,0x38,0x50,0x8a,0x14,0x0a,0x85,0x02,0xc2,0x40,0x90,0x58,0x2a,0x14,0x09,0x05,0x02,0xa2,0x40,0xa8,0x48,0x42,0xf7,0x72,0xf2,0xf5,0x4d,0x2b,0x4f,0x16,0xaf,0x3d -,0xdc,0x62,0xea,0x4d,0x65,0xe4,0x38,0xcd,0x6b,0x7f,0x8e,0x07,0x2f,0x2f,0x0f,0xb6,0x1f,0xad,0x3e,0xff,0x6a,0x3f,0xd9,0xa0,0x34,0xef,0x30,0xf7,0x3d,0x08,0x3e,0x46 -,0xf9,0x17,0x4f,0x03,0x1c,0xb4,0x3d,0x88,0x05,0xee,0xdb,0xf1,0x2e,0xc3,0x43,0x5d,0xf4,0x1c,0xd2,0x4d,0xc4,0xa4,0x77,0x6f,0x6c,0xd7,0x52,0xaf,0x4f,0xa2,0x06,0xab -,0x5e,0xc8,0xc4,0xc1,0x7d,0x22,0x8a,0x31,0xc2,0x33,0x56,0x85,0xfa,0xea,0xf1,0x0b,0x59,0x4e,0xc8,0x8a,0x4a,0xdf,0x61,0x25,0xce,0xc8,0xb6,0x73,0xcd,0x2f,0x75,0xd6 -,0x52,0xd5,0x45,0x4c,0xe4,0x9a,0x2a,0x41,0x7c,0x57,0x09,0xb3,0x59,0x31,0x20,0x8e,0xdb,0x89,0xd2,0x11,0x55,0x60,0xb4,0x60,0x0a,0xc0,0x44,0x50,0xa0,0x0a,0xac,0x50 -,0x02,0x20,0x52,0xa8,0x58,0x48,0x16,0x0a,0x05,0x83,0x01,0x70,0x98,0x50,0x6c,0x24,0x13,0x05,0x42,0x81,0x51,0xb8,0x90,0x22,0x13,0x08,0x85,0x42,0x63,0x10,0x99,0xc4 -,0x4d,0xf2,0x57,0x5e,0x7f,0x6f,0x24,0xdc,0xa2,0xf2,0x6b,0x7c,0x3b,0xfd,0xf9,0xd7,0x3b,0xa8,0x9d,0x6e,0xbc,0xef,0x7f,0x5e,0xc1,0xdc,0x7e,0xbe,0x36,0xfc,0x7f,0x72 -,0x7f,0x1f,0x50,0xa1,0xab,0xef,0x2b,0xf4,0x9e,0x5f,0x39,0x5f,0xff,0xdf,0x7f,0xff,0x70,0x8e,0xf7,0xb4,0x35,0xdf,0xdc,0x7f,0xe9,0x9f,0xff,0x0b,0xf3,0x04,0xf0,0xb2 -,0xbe,0xee,0x82,0xe5,0xd9,0xfc,0x17,0x1e,0x1e,0x5c,0x9e,0x23,0xc4,0x3c,0x39,0xf0,0x1c,0x41,0xe6,0x39,0xde,0x43,0xca,0x07,0xfa,0x3d,0xfb,0x69,0x7f,0xdf,0xeb,0x25 -,0xfb,0x1a,0x17,0x1e,0xb4,0xdc,0x2e,0x28,0x70,0xe3,0x61,0xc8,0x11,0xa5,0x21,0x1f,0xde,0xfd,0xf9,0x69,0x6c,0x5e,0x9d,0xc8,0x95,0x4f,0xef,0x9d,0xbf,0x70,0x8f,0xb1 -,0x50,0x4f,0xeb,0x9b,0x16,0x91,0xf9,0x0f,0x58,0x6c,0x3f,0x20,0x2c,0xa1,0x48,0xfd,0x65,0xbe,0x10,0x82,0x6f,0xb7,0x24,0x12,0x97,0xb3,0xa0,0x04,0x45,0x24,0x07,0xff -,0xf1,0x50,0x80,0x2e,0x7f,0xfc,0x21,0x0a,0xcf,0xff,0xff,0xff,0x7f,0xfc,0xb0,0x61,0x40,0x58,0x2e,0x14,0x13,0x0d,0x0c,0x41,0x42,0x28,0x50,0x6a,0x14,0x08,0x85,0x42 -,0x41,0x10,0x98,0x44,0xa6,0x11,0x2b,0x1a,0xdf,0x49,0xdd,0xc5,0xd6,0x6a,0xaa,0x5e,0xed,0x91,0x75,0xc6,0xeb,0xa9,0x92,0xa7,0x5c,0xcd,0x7f,0xbf,0x91,0xcb,0x9e,0xcc -,0x92,0xd5,0x74,0xdd,0xf4,0x1f,0x9b,0xe7,0xf3,0x73,0xfc,0x2f,0x16,0xfa,0xc8,0x2f,0x8b,0xc1,0x85,0xf4,0x9c,0x82,0x4d,0x47,0xde,0xdd,0xd0,0xef,0x7d,0x6e,0x80,0x6d -,0x7c,0xa0,0x5c,0xd6,0x7e,0xf7,0xa5,0xd6,0xb5,0x20,0xa8,0x3b,0x91,0x7c,0x5c,0x5c,0x2b,0x82,0xe8,0x4e,0x3f,0xed,0x67,0x4a,0xd6,0x8c,0xdb,0x1b,0x47,0x73,0xb5,0xb4 -,0x2e,0x9f,0x35,0xb0,0xbb,0xee,0xfd,0xee,0xa4,0x88,0xe4,0x3e,0x08,0x05,0xe9,0x57,0xf1,0x0c,0x98,0x45,0x2c,0x71,0x8d,0xe3,0x7f,0x96,0x22,0xc2,0x3b,0xd8,0xb2,0xb7 -,0x9c,0x13,0xb1,0x2a,0x46,0x75,0x0b,0xc9,0x15,0x0b,0xc1,0xc4,0x15,0x1e,0xb4,0x14,0x05,0xe4,0x4c,0x26,0xb8,0x13,0x02,0x40,0x54,0xb1,0xd0,0x2c,0x15,0x12,0x05,0x42 -,0xc3,0x41,0x28,0x58,0x2a,0x17,0x0a,0x88,0x84,0x61,0x53,0x18,0x94,0x26,0x21,0x29,0xbb,0xad,0x6f,0xcf,0xad,0x6b,0x2f,0x32,0x32,0xe9,0xed,0xdb,0xa9,0xdd,0x49,0xf1 -,0xea,0xb5,0x3c,0xf7,0x54,0x9f,0x1c,0x01,0xdf,0xae,0x99,0x37,0x4f,0xcf,0x7e,0xae,0x8b,0xc1,0xff,0x99,0xd3,0x3b,0xe2,0xec,0x78,0x7f,0xb3,0xc6,0x70,0xe5,0xf3,0xd5 -,0x17,0x9f,0x2e,0x09,0x2f,0xd0,0xa4,0x9b,0xf8,0x06,0xbf,0xdf,0xb8,0xf5,0x5c,0x79,0xfc,0x5c,0xb8,0xf1,0x4a,0xaf,0xc8,0xf9,0x39,0x2f,0xe6,0x94,0x29,0xe6,0xf3,0xf7 -,0x38,0x21,0xcf,0xd2,0x38,0x0f,0xa0,0xcf,0x80,0xba,0x1f,0x51,0x08,0x97,0xfb,0x1e,0xce,0x9f,0xe1,0x3e,0x7e,0x98,0xf9,0x73,0x0e,0x2e,0x67,0x73,0x85,0xb9,0x81,0xc9 -,0xc9,0xc8,0xe4,0x0e,0x61,0x60,0x07,0x91,0x03,0x87,0x78,0x72,0x1b,0xe6,0x07,0x4d,0xa7,0x9b,0x89,0x25,0xe8,0xee,0x01,0x38,0xd4,0xf5,0x80,0x00,0x79,0x94,0x83,0xbc -,0x0a,0x3d,0xd7,0xae,0x49,0xf8,0x2c,0x9f,0x35,0xee,0x1a,0x53,0xc6,0x11,0x26,0x39,0x00,0xe0,0xff,0xf1,0x50,0x80,0x2f,0x3f,0xfc,0x21,0x0a,0xcf,0xfd,0xfa,0xdf,0xb7 -,0xec,0xb1,0x40,0xb0,0xe0,0x28,0x16,0x0a,0x11,0x82,0x81,0x20,0xa0,0x9c,0x28,0x12,0x0a,0x05,0x42,0x81,0x60,0xa8,0x88,0x2a,0x12,0x0a,0x84,0xc6,0x21,0x30,0x88,0x8c -,0x22,0x65,0x65,0xa6,0xaa,0xb8,0xbe,0x6e,0xb2,0x64,0x93,0x59,0x97,0x92,0xd2,0x55,0xe7,0x1b,0xce,0xaa,0xaf,0xcf,0xff,0x8f,0x91,0xf3,0x5e,0xba,0xff,0xdb,0x27,0xfe -,0xf4,0x22,0xfc,0x76,0x81,0xd7,0x1b,0x7f,0x35,0xde,0xfe,0xa5,0xed,0x47,0x3e,0x77,0x87,0x0e,0xbe,0x89,0xda,0x56,0xd8,0x6f,0xd6,0xe1,0x86,0xf2,0x61,0x9d,0xd9,0x33 -,0xde,0x83,0xec,0x9c,0x4e,0x4e,0x3e,0x22,0x6e,0x37,0xe0,0x06,0x98,0x38,0x31,0x1a,0x26,0x38,0x9f,0x1e,0x39,0x98,0x9f,0x13,0xb5,0x15,0xd1,0x00,0xd3,0xf9,0xf4,0xca -,0x2e,0x05,0xd2,0x51,0xe5,0x11,0xcb,0xa3,0x82,0xdb,0x2e,0x02,0x68,0xf8,0x2f,0x5a,0x22,0xe6,0xa3,0xd2,0xf3,0xfc,0x2f,0x42,0x01,0x1b,0xe1,0x27,0xdc,0x07,0x79,0x60 -,0xff,0x85,0x8d,0x54,0xc1,0x17,0x18,0x77,0x02,0xa2,0x59,0xa6,0xa5,0x81,0x7a,0xa8,0x28,0x24,0x2e,0x02,0x80,0x29,0x54,0x2c,0x64,0x0b,0x09,0x02,0xa2,0x61,0x20,0x54 -,0x2c,0x18,0x0a,0x09,0x82,0xa1,0x70,0xa8,0x44,0x2e,0x15,0x13,0x85,0x42,0x62,0x70,0x98,0x44,0x66,0x11,0x23,0xc6,0x6b,0x2e,0xf3,0x2b,0xa2,0xab,0x25,0x24,0xa5,0xf9 -,0xbe,0xea,0xbd,0xaf,0xd5,0x79,0x6b,0x3b,0xd2,0xbf,0x90,0x7b,0xa3,0x9b,0x6e,0x1e,0x37,0x7a,0x7d,0x27,0xc1,0x35,0x37,0x6b,0x5f,0xc7,0x77,0xf6,0x73,0x3e,0x7f,0x17 -,0x00,0x9c,0x9b,0x36,0xb0,0x51,0xfc,0x7d,0x5b,0xe8,0x78,0x0b,0x46,0xd0,0x56,0x87,0x46,0x31,0x43,0x17,0xfd,0xfe,0x37,0xb3,0xdb,0xfd,0x37,0xfc,0xb7,0x9f,0x7e,0x32 -,0x21,0xd0,0xe4,0xf9,0x73,0x70,0x0d,0xc6,0xe7,0x87,0x10,0x4c,0x9d,0xa8,0x29,0xf2,0x9a,0xc7,0x4f,0x98,0x07,0x27,0x10,0x1c,0x9c,0x25,0x6e,0xc3,0xd1,0xc3,0x98,0xe4 -,0x00,0x03,0xcc,0x00,0x13,0xe2,0x7f,0xef,0x1d,0xc7,0x7c,0xf6,0x2a,0x7d,0x7e,0xa8,0xf2,0x80,0x00,0x0f,0xd7,0x9a,0x8b,0x4a,0x70,0x73,0x01,0x75,0x87,0xcd,0xee,0x9e -,0xb0,0x6a,0x1d,0x06,0x52,0x54,0x02,0x25,0xcc,0x40,0x70,0xff,0xf1,0x50,0x80,0x2f,0x5f,0xfc,0x21,0x0a,0xcf,0xff,0xf9,0xff,0xff,0xec,0xaf,0x60,0xc0,0x5c,0x2c,0x24 -,0x1b,0x05,0x02,0xc2,0x40,0xa8,0x50,0x2c,0x15,0x09,0x85,0x02,0xc1,0x50,0xa1,0x08,0x62,0x63,0x08,0x8c,0xc2,0x23,0x00,0xb9,0xf3,0xcd,0x3a,0xae,0x6e,0xef,0x77,0x53 -,0x7e,0x79,0x9a,0xca,0x99,0x72,0x54,0xa5,0xd6,0xb7,0x75,0xec,0xe3,0xff,0xd0,0x27,0x69,0x3b,0x1f,0x96,0xb7,0xe5,0xf8,0xe3,0xff,0xf7,0x4d,0xed,0xfa,0x13,0xe4,0x8a -,0xda,0xcf,0x61,0xaa,0x0e,0xd5,0x59,0xf6,0x53,0x6b,0x43,0xc8,0x4c,0xdc,0x7e,0xea,0xfd,0x0c,0x1e,0xf7,0x3f,0x1c,0x92,0x11,0xa7,0x2f,0x3e,0x72,0xbb,0xce,0xe5,0xba -,0x5f,0xfe,0x98,0xe8,0x16,0x8e,0xf4,0x7a,0xef,0x08,0x34,0x67,0x51,0xf8,0x24,0xcb,0x6e,0x6f,0xb8,0x71,0x63,0xad,0x2f,0x51,0xc8,0xac,0x20,0x9b,0xfc,0x96,0x74,0x84 -,0xce,0xf2,0xb4,0xe5,0x95,0x1f,0xfa,0xb3,0x5a,0x76,0xce,0x9e,0x14,0xd4,0x59,0x06,0x3a,0xc0,0xb4,0xe9,0xce,0x5f,0x05,0x05,0xae,0xba,0x0d,0x04,0xf4,0x2c,0x51,0x5a -,0xab,0x0a,0x6c,0x0e,0xf4,0x80,0xac,0xc0,0x26,0x08,0x01,0x4c,0xa1,0x70,0xb1,0x10,0x2c,0x14,0x13,0x84,0x82,0xa1,0x61,0x28,0x98,0x28,0x15,0x12,0x05,0x48,0x22,0x31 -,0x28,0x44,0x26,0x15,0x10,0x84,0xc2,0x21,0x31,0x88,0x9e,0x2b,0x5b,0xd2,0x73,0xfe,0x9f,0x9f,0x3d,0xef,0x2d,0x4d,0x55,0x49,0x75,0xe6,0xfd,0x4d,0x6b,0xc6,0xbc,0x7f -,0xb7,0xe7,0x25,0x71,0xff,0x5d,0x07,0x9b,0xba,0xaf,0x77,0x46,0x9b,0xd3,0xdb,0x66,0xa6,0xb7,0xaf,0xfe,0x67,0xef,0x7c,0xdb,0x29,0x8d,0x8e,0x5e,0xa4,0x92,0xd7,0xb7 -,0x79,0xd1,0x8f,0x33,0xe0,0xf1,0xe1,0xc6,0x51,0x4e,0x41,0xe6,0xff,0x3f,0xfd,0x8a,0x78,0xbc,0x87,0x8f,0x0e,0x2e,0x11,0x7f,0xf3,0xf2,0x3d,0xce,0x47,0xc7,0x9b,0x98 -,0x1e,0x6e,0x2f,0x9c,0xf8,0x4c,0xc7,0x38,0x91,0xcf,0x98,0xe5,0xc6,0x02,0x1e,0xc9,0x1c,0xc2,0x18,0x5c,0x4f,0x69,0xeb,0x1d,0xe0,0x7b,0xbe,0xb0,0x00,0x79,0x76,0xb9 -,0xef,0xe0,0x01,0x6e,0xf6,0x1f,0x85,0x55,0xf9,0x40,0x00,0x16,0x4b,0x44,0x39,0xa1,0x00,0xb8,0xb9,0x27,0xac,0x6c,0xac,0xb5,0x04,0xbb,0xe0,0x5a,0xaf,0x85,0x35,0xbf -,0x28,0x01,0x50,0x2c,0x07,0xff,0xf1,0x50,0x80,0x2e,0x3f,0xfc,0x21,0x0a,0xcf,0xea,0xff,0xff,0xdf,0xbc,0xac,0x62,0xa1,0x18,0x4a,0x14,0x19,0x09,0x06,0x42,0x41,0x90 -,0x8c,0x22,0x12,0x10,0xb1,0xeb,0x8e,0xf8,0xbd,0x77,0xd6,0x63,0x5b,0x96,0xbc,0xa1,0x15,0x72,0xa2,0x5e,0xf5,0xbf,0xaf,0x08,0xff,0xdb,0x41,0x3c,0xfd,0x7e,0x3e,0xbc -,0xf6,0x7e,0xbf,0x1b,0x37,0x5e,0x2b,0xcf,0xf6,0x4d,0xc5,0xc5,0xef,0x2f,0x82,0x38,0x71,0x4d,0xcb,0x92,0xeb,0x2e,0xe7,0xd9,0xdb,0xf3,0xfa,0xfb,0x61,0xc5,0x19,0x93 -,0xa6,0xf3,0xf4,0xbc,0x02,0x7a,0xf9,0xff,0xe9,0xf5,0xfa,0xf2,0xf0,0x01,0x8c,0xa5,0x09,0xa2,0x2b,0xdb,0x4e,0xe2,0xd1,0xfd,0xf3,0x1e,0xa3,0x96,0xa7,0x3c,0xe9,0xcc -,0xdb,0xe8,0x4b,0xe1,0xf6,0x9a,0x3b,0x29,0x56,0x34,0xe9,0x05,0xc5,0xdd,0x6b,0x09,0xb7,0x86,0x66,0x1a,0xf3,0x1c,0x59,0x78,0x4d,0x8e,0x03,0x14,0xd7,0xa4,0x53,0x42 -,0x09,0x5d,0x34,0xae,0xca,0x70,0x99,0x86,0xf7,0x90,0x5e,0x65,0x10,0x9d,0x01,0x5e,0x32,0x1d,0xc1,0xad,0x62,0x50,0x00,0x81,0x70,0x15,0x0a,0x16,0x2a,0x05,0x84,0x81 -,0x60,0xa0,0x54,0x2c,0x23,0x0a,0x05,0x82,0xa1,0x40,0xa8,0x50,0x4a,0x27,0x0a,0x88,0xc2,0xa2,0x30,0xa8,0x4c,0x22,0x23,0x08,0x85,0x42,0x62,0x11,0x32,0x94,0x75,0xe3 -,0x4b,0x9c,0xcb,0x64,0xad,0x65,0x5b,0x8c,0xe3,0x37,0xc6,0x4e,0xbd,0x7f,0x3f,0x6f,0x6d,0xd4,0xe3,0x41,0xe9,0x8f,0xa7,0x49,0x34,0xdd,0xd7,0xc3,0x65,0x3f,0xa8,0x17 -,0xdb,0xd3,0x57,0xec,0x2a,0x2e,0xb1,0xff,0x6f,0xa8,0xfb,0x8b,0xac,0x7f,0x4b,0x40,0x6e,0xff,0x89,0x6e,0xc7,0xb0,0x89,0x83,0x50,0x4c,0xe5,0xc6,0xdc,0x3a,0x17,0xa3 -,0xca,0x7c,0xab,0x81,0xcf,0x05,0xff,0x07,0xfd,0xd6,0xf5,0x17,0xbf,0x82,0x70,0xe6,0xe4,0x38,0xa3,0x91,0xc5,0xcf,0x98,0x07,0x9f,0x9c,0x7c,0xbc,0xfa,0x80,0x1e,0x00 -,0x03,0xcd,0xdf,0x7a,0xe3,0xbd,0xe1,0xe3,0x86,0xb9,0xa4,0x5f,0x23,0x20,0x02,0x3d,0x69,0x7f,0x48,0xf8,0x1d,0xea,0x81,0xd1,0x67,0x3e,0xd1,0x21,0x50,0x77,0x16,0xd3 -,0xc5,0xb6,0xd3,0x80,0x15,0x1e,0xbf,0xac,0x17,0x03,0xc8,0x00,0x05,0x92,0x3b,0xc4,0x8f,0x58,0x2c,0x01,0x60,0x38,0xff,0xf1,0x50,0x80,0x2c,0x5f,0xfc,0x21,0x2a,0xcf -,0xf7,0xef,0x7f,0xff,0xf2,0xad,0x40,0xb1,0x10,0x4a,0x16,0x0a,0x85,0x02,0xa1,0x42,0x10,0x50,0x24,0x24,0x13,0x85,0x42,0x81,0x10,0x90,0x4c,0x22,0x23,0x08,0xb1,0xe8 -,0x75,0x79,0x53,0x55,0x7b,0xd6,0x52,0xb5,0x97,0xbb,0x86,0xb1,0x2a,0x38,0xf1,0x38,0x8f,0x6d,0x74,0x3e,0x03,0xd9,0x7a,0xff,0x5e,0xaf,0x67,0xed,0xb3,0xe8,0xfc,0xa1 -,0xeb,0xd4,0x3d,0x42,0x1e,0x3f,0x69,0xc6,0x7f,0x5c,0x7c,0x93,0xa0,0x60,0x97,0x9b,0xdf,0xf2,0x43,0xe0,0x71,0x86,0xfe,0xda,0xbb,0x6d,0xed,0xbe,0xc7,0x90,0x0e,0x13 -,0xfc,0x86,0xb1,0xf1,0x39,0x8a,0xba,0xa7,0x4f,0x4e,0xc7,0x3b,0x8c,0xb0,0xec,0x10,0xdf,0x67,0xec,0x8e,0x29,0x26,0x6c,0xcb,0x54,0xbb,0xbb,0x64,0x63,0xa6,0x66,0x9d -,0x98,0x89,0xf3,0xb4,0x94,0x2e,0x8b,0x37,0xed,0x4d,0x3b,0x7a,0xaa,0x0a,0x55,0x6e,0x13,0xc2,0x99,0x00,0x4e,0x51,0x33,0x27,0xe5,0x03,0x5d,0xec,0xbd,0xc8,0xaa,0x0a -,0x13,0x09,0xb5,0x93,0x88,0x03,0x40,0x48,0x05,0x42,0x05,0x8a,0x84,0x60,0xa0,0x98,0x48,0x27,0x12,0x09,0x48,0x81,0x50,0x98,0x54,0x26,0x35,0x10,0x94,0xc4,0x22,0x73 -,0x49,0x24,0xdf,0x9e,0xe7,0x1d,0xe2,0xd3,0x72,0x49,0x2b,0xaa,0xab,0xae,0x39,0xe2,0x6b,0xdf,0xe3,0x9c,0x9e,0xd8,0x38,0x3e,0x5c,0xb7,0x70,0xd3,0x5e,0xbb,0xb4,0x51 -,0xa2,0xfd,0x1f,0xd8,0x7f,0x31,0xc0,0xb5,0xcc,0x01,0xe5,0x96,0xe9,0x88,0xaf,0xeb,0xa3,0xf8,0x95,0xfe,0xf1,0xa8,0x34,0xb1,0x1e,0xee,0x79,0xa2,0x66,0x1e,0x6b,0xad -,0x24,0x9f,0x4c,0xff,0xa9,0xae,0xcf,0xb2,0x77,0x4f,0x3a,0x3a,0xe0,0xe5,0xc3,0x8b,0x9f,0x03,0x90,0xe3,0xc3,0xe7,0xf3,0xf3,0xe2,0xe0,0x41,0x9c,0x8a,0xf3,0x76,0x79 -,0xfd,0x7c,0x9c,0x00,0x1d,0xdf,0xfd,0x82,0x07,0x33,0x93,0x80,0x39,0x7f,0x28,0x73,0xe5,0x40,0x77,0xb8,0xfd,0x93,0x18,0xef,0x02,0x78,0x2d,0x10,0x72,0xd0,0x00,0x01 -,0xe6,0x46,0x00,0xdb,0xf3,0x04,0x5b,0x48,0xa0,0x0d,0xa2,0xe9,0x10,0xa3,0xd7,0x64,0x54,0xf5,0xc8,0x82,0x70,0x03,0x30,0x1c,0xff,0xf1,0x50,0x80,0x2e,0x1f,0xfc,0x21 -,0x4c,0xfe,0xff,0xfd,0x64,0x16,0x28,0x59,0xa9,0x42,0xa4,0x5b,0x83,0x2e,0xcb,0xd7,0x03,0x51,0x5f,0xb2,0xbe,0xb8,0xe1,0xd1,0x60,0xed,0xe4,0xeb,0xb7,0x37,0xf9,0xfc -,0x66,0x35,0x63,0x18,0xcc,0x9d,0x5b,0x0a,0xdc,0x66,0xd2,0x9f,0x84,0xd5,0x1a,0xa3,0xfa,0xc7,0xff,0xef,0x94,0xff,0xe5,0x37,0x35,0xaf,0x4b,0xbe,0x44,0x4a,0xf4,0xc3 -,0xc2,0x8e,0xd3,0x2b,0xf7,0xcd,0xdc,0x98,0x2f,0xe2,0xf9,0x01,0xeb,0x94,0xd2,0x91,0x70,0xf3,0x21,0x0c,0xc0,0xe3,0xa1,0x0c,0x76,0xc4,0x0e,0x93,0x68,0x7a,0xe1,0x72 -,0xcc,0x61,0x22,0xd1,0x26,0xf9,0x5c,0x74,0x7c,0xf7,0xef,0xc6,0xe0,0xa8,0xac,0xd7,0x9e,0x6a,0x65,0xdb,0x47,0x4b,0xfa,0x6e,0xa2,0xb5,0x67,0x2d,0x44,0xa0,0x4d,0xa5 -,0x64,0x0b,0x55,0x6e,0xb4,0xa7,0x0e,0xdb,0x8e,0xce,0x99,0x31,0x8b,0x92,0x6c,0xd3,0x56,0xd3,0x59,0xa6,0x0f,0xcb,0x03,0xd7,0xd1,0x63,0xbd,0x32,0x95,0x2e,0x48,0x81 -,0x22,0xa7,0xb2,0xeb,0x08,0x0b,0x00,0xb4,0xc0,0x44,0xe0,0x28,0x60,0xb1,0x84,0xcd,0x09,0x91,0x69,0x55,0x2d,0x2d,0x34,0x23,0xab,0x5b,0x6f,0x55,0xd2,0x99,0x00,0xd7 -,0xbc,0x00,0x8a,0xca,0x92,0xe8,0xe1,0xa6,0xa6,0x94,0xe9,0xaf,0xeb,0xc5,0x7f,0x36,0xec,0x16,0xec,0x46,0x93,0x84,0x2d,0x61,0x62,0x49,0x12,0xe2,0xa0,0x5b,0x49,0x91 -,0x10,0x8b,0xb8,0x8a,0x42,0x2d,0x31,0xa4,0xc6,0x4f,0x8b,0xe1,0x26,0x1b,0x1a,0xf9,0xf5,0xdb,0xfb,0x5d,0x46,0xa9,0xe3,0xc1,0x11,0xa8,0x9c,0xcb,0x46,0xc1,0x57,0xed -,0x04,0x49,0x11,0xc7,0x59,0xb5,0x04,0xb5,0xe9,0xc9,0xb5,0xc9,0xd8,0x16,0x44,0xc3,0x7d,0xbb,0x80,0xeb,0x14,0x07,0xa5,0x00,0x00,0xc0,0xde,0x2f,0x67,0x33,0xbe,0x91 -,0x8f,0x5f,0x31,0x5f,0xde,0xac,0xc5,0x55,0xd1,0x71,0xf4,0x9d,0x7d,0x5d,0x39,0x0f,0xc3,0xb3,0xd3,0x6c,0x4f,0xef,0xc4,0xfd,0x2c,0xe0,0x4b,0xee,0x57,0x17,0xc9,0x35 -,0x3f,0xcf,0xc5,0xb4,0x8e,0xe7,0xfe,0xd8,0xff,0x53,0x7e,0x87,0xa7,0xa3,0x80,0x70,0x7f,0x93,0xb1,0x87,0xce,0xcd,0x78,0xf3,0x8b,0xf7,0xe0,0xe5,0x61,0x62,0x36,0x23 -,0x63,0x55,0x8b,0x64,0x17,0x2b,0x73,0x80,0xff,0xf1,0x50,0x80,0x2c,0xff,0xfc,0x21,0x6a,0xcf,0xdf,0xff,0xff,0x7f,0xff,0xb6,0x80,0xb1,0x14,0x2c,0x35,0x0a,0x11,0x42 -,0x83,0x60,0xa0,0x48,0x28,0x16,0x0a,0x0c,0x82,0x21,0x20,0x8b,0x97,0x57,0x38,0xac,0xe7,0x83,0x55,0x95,0x74,0x5c,0xc8,0x88,0x8b,0xc9,0x51,0xaf,0x36,0x9c,0x04,0x75 -,0x13,0x7d,0x3d,0xbc,0xbc,0x2e,0xeb,0x47,0x48,0xf3,0x5f,0xbf,0xb5,0xfe,0x2f,0x96,0x5e,0xfd,0x80,0x4f,0xc6,0x21,0xe4,0x77,0x3e,0x89,0xc3,0x7a,0x29,0xe9,0x1c,0xf9 -,0xcd,0xa1,0x27,0x6e,0xdc,0xc8,0x0f,0x74,0x6f,0x06,0x7e,0xae,0xae,0x13,0x79,0x66,0x84,0x61,0xa8,0x08,0xd4,0x3c,0x3d,0x94,0x0f,0x0a,0xe2,0xbc,0xe5,0xdb,0x39,0x4e -,0x96,0x1c,0x63,0xaf,0xab,0xb1,0x8a,0x38,0x67,0xdd,0xce,0x69,0x10,0x3c,0x0a,0x27,0x53,0xc7,0x1c,0xb1,0x42,0x48,0xf0,0x4c,0x91,0x3a,0xce,0x8f,0xde,0x58,0x56,0x45 -,0x34,0xe4,0x25,0x72,0x95,0x76,0x95,0xe4,0x53,0x3c,0xe5,0x3a,0xfd,0x16,0x2b,0x6e,0x40,0x28,0x00,0x54,0x09,0x00,0x44,0x44,0x05,0x42,0x05,0x82,0xa1,0x60,0xa0,0x58 -,0x8a,0x12,0x0a,0x05,0x42,0x81,0x61,0x20,0x98,0x2a,0x14,0x2a,0x89,0x82,0xa3,0x30,0x88,0x4c,0x22,0x23,0x08,0x99,0x3b,0xbd,0xd6,0xba,0xe7,0x86,0xe5,0x62,0xd4,0xab -,0xa9,0x7a,0xcd,0xf1,0x6c,0xf8,0xf1,0xaf,0x17,0xf1,0xbb,0x4d,0x0d,0x09,0x1a,0x7e,0xe5,0xfd,0xbf,0xa9,0xff,0x89,0xf8,0x14,0xe7,0xa9,0xfa,0x5f,0xaa,0xb4,0x01,0x5f -,0xba,0x98,0xfb,0x87,0x93,0xfa,0xae,0x0b,0x6d,0x8b,0x1f,0xed,0x28,0x4b,0xe6,0xbb,0xc8,0x9f,0x5d,0x12,0x4c,0xe7,0xda,0xf5,0xa7,0xfd,0xff,0xc0,0x3d,0x0e,0xb7,0xb6 -,0xb9,0xf8,0x1b,0xe7,0xf5,0xb7,0xdb,0xd2,0xfb,0x6d,0xfc,0x1f,0x13,0xff,0x23,0xda,0x4c,0x14,0xf3,0x39,0x9c,0xb9,0x81,0xf7,0x80,0x0e,0xeb,0xb6,0x0e,0xf9,0x48,0x98 -,0x80,0x70,0xf3,0xe6,0x38,0x50,0x27,0xc7,0x30,0x2e,0xa8,0x48,0x07,0x23,0xc7,0xdc,0x77,0x3d,0xf0,0x05,0xe0,0xb5,0x47,0xaf,0xf2,0x40,0x1d,0x9e,0xb3,0xc4,0x2d,0xdd -,0x8a,0x44,0x78,0xa0,0x16,0x2a,0x54,0x27,0x00,0x00,0xd6,0x44,0xa0,0x50,0x0e,0xff,0xf1,0x50,0x80,0x2b,0xbf,0xfc,0x21,0x0a,0xcf,0xff,0xfe,0xff,0xff,0xff,0xb6,0x80 -,0xb0,0xd0,0x2a,0x14,0x0b,0x05,0xc2,0xa1,0x40,0xa8,0x50,0x84,0x14,0x0a,0x84,0x82,0x82,0x22,0x8c,0x1a,0x25,0xb5,0xef,0xe6,0xaa,0xf7,0x2e,0x62,0x46,0x49,0x75,0x02 -,0x55,0xca,0xbe,0x2f,0x8d,0x79,0x1a,0x4b,0xaf,0x6f,0x19,0x3c,0xfe,0xdb,0x7e,0x0a,0xe3,0xdb,0x5b,0xee,0xef,0xeb,0xb5,0xa6,0xa8,0x7a,0x2d,0x96,0x77,0xcf,0xb3,0x81 -,0x52,0xe2,0x1c,0x51,0x1d,0x1c,0x40,0xf3,0xf9,0x94,0x7c,0xf9,0xd9,0x97,0x7d,0x37,0x7a,0xd8,0x7d,0x28,0xa2,0x53,0x58,0xc7,0x91,0x7c,0xf0,0x1d,0xd2,0xf4,0xe4,0x2f -,0x4a,0xef,0x9a,0xb0,0xd2,0xd6,0xf4,0x28,0x4e,0xb0,0xe1,0x49,0xc3,0xb9,0xb3,0x10,0x9a,0x70,0xe5,0x60,0xf3,0x5b,0x8e,0x59,0x24,0xb1,0x1f,0x1e,0x54,0x83,0xb5,0x05 -,0x06,0xf8,0x11,0x88,0x46,0xc5,0x4b,0xa7,0x49,0xb5,0xc0,0x01,0x86,0xe2,0x40,0x80,0x44,0x13,0x48,0x10,0x02,0xa5,0x04,0xe1,0x61,0x20,0x98,0x4a,0x14,0x0b,0x09,0x02 -,0xe1,0x61,0x20,0x58,0x2e,0x15,0x2a,0x04,0xc2,0xa1,0x31,0x28,0x8c,0x2a,0x13,0x20,0x94,0xcd,0x6e,0x5e,0x57,0x5d,0x7a,0xac,0xbd,0xf1,0x99,0x77,0x37,0xc5,0x25,0xeb -,0x71,0x7c,0xf5,0x57,0x5d,0x19,0xe4,0x68,0x3d,0x24,0xf2,0x79,0x15,0xfc,0x3f,0x89,0xce,0x9f,0x9f,0x26,0x78,0x69,0xfd,0x7b,0xbc,0x06,0x9e,0xe1,0x19,0x75,0x2e,0xd1 -,0xe5,0xd8,0xd9,0xcf,0x85,0x94,0x70,0xa1,0xef,0xe7,0x1d,0x97,0xe7,0xea,0xef,0xdc,0x25,0x6b,0xa5,0x3e,0x4d,0x8f,0x97,0x0e,0xdb,0x5b,0xe0,0x78,0x8e,0x97,0x5f,0x08 -,0xef,0x57,0x87,0x8c,0xf4,0x12,0x38,0x70,0xe1,0xc2,0x5c,0x93,0x72,0xcc,0xbf,0x29,0xdb,0x74,0xfe,0xc3,0xd5,0xcf,0x03,0x10,0xf2,0xb7,0x00,0x4f,0x27,0xae,0xfb,0x7b -,0xd0,0x3d,0x66,0x79,0x7f,0xe8,0x3c,0x54,0x90,0xa0,0x39,0xc7,0x88,0x00,0x0e,0xf7,0xae,0x15,0x1d,0xa9,0x3b,0x62,0x68,0x77,0x83,0xdd,0x07,0x73,0xbc,0x3d,0xc2,0xc0 -,0x77,0x08,0x85,0x48,0x16,0x00,0x16,0x5c,0x5c,0x13,0x01,0xc0,0xff,0xf1,0x50,0x80,0x2d,0xbf,0xfc,0x21,0x0a,0xcf,0xef,0xff,0xff,0xf7,0xfc,0xb5,0x60,0xc0,0x58,0x64 -,0x14,0x0b,0x09,0x42,0x81,0x60,0xa0,0x54,0x2c,0x15,0x09,0x05,0x06,0x43,0x41,0x10,0x84,0x24,0x13,0x08,0xb5,0xc5,0xf3,0xe5,0xd9,0x25,0x5e,0x26,0xb7,0xac,0xad,0x64 -,0x92,0xae,0xb8,0xd8,0x95,0x7a,0xbe,0x13,0xc8,0xfb,0xfe,0xb5,0x70,0xcf,0xdb,0xf8,0x2e,0x03,0xa7,0x6e,0x6f,0x47,0xc0,0xbc,0x1d,0x80,0x07,0xf6,0x62,0x35,0x3e,0x21 -,0xfb,0x25,0x8a,0x40,0xbc,0x3f,0xcf,0x69,0xc3,0xeb,0xc7,0xb1,0xe2,0xa5,0x7b,0xbc,0x41,0xbb,0xc6,0xda,0xfc,0x43,0xff,0xb9,0x8e,0xc5,0xea,0xcf,0x7b,0xa8,0x94,0x53 -,0xd1,0xaa,0xac,0xb9,0xec,0xd7,0xda,0x30,0xde,0x7d,0x55,0x31,0x12,0x2b,0xcc,0xca,0xb7,0x34,0xec,0x4d,0xd3,0x04,0xde,0xbf,0x72,0x82,0x96,0x9d,0xf1,0xcb,0x5b,0xd5 -,0x1c,0x09,0x81,0x28,0xd6,0xd7,0xf7,0xf8,0x10,0x5a,0x55,0xd3,0x21,0x38,0x26,0x29,0x36,0x38,0x21,0xf4,0x80,0x50,0x44,0x16,0x2e,0xb1,0x70,0x09,0x48,0x09,0x09,0x80 -,0x9f,0x41,0x30,0x5c,0x26,0x14,0x13,0x05,0xc2,0x81,0x61,0x20,0x98,0x48,0x16,0x1a,0x85,0x82,0x81,0x50,0x98,0x54,0x46,0x15,0x11,0x85,0x42,0x21,0x32,0x09,0x9f,0x9a -,0xd5,0x6e,0xbf,0x7f,0xd3,0xf5,0xf7,0x64,0xaa,0xbc,0x4b,0xaa,0x8b,0xa7,0xb6,0x6b,0xc7,0xc6,0x65,0x5f,0x9a,0xe3,0x77,0xf8,0x1c,0x47,0xe0,0xd1,0xb7,0xb6,0x7e,0x9f -,0xf7,0xdf,0x50,0xd3,0xe6,0xf6,0xef,0x9a,0x21,0xee,0x4a,0x41,0xf6,0x7f,0xf4,0x09,0xeb,0xbc,0x1e,0x8c,0x25,0x15,0x7e,0xa8,0x9b,0xf1,0xd4,0xfa,0x52,0xdc,0x5b,0x04 -,0x3e,0xc3,0x01,0xe3,0xc2,0xf6,0x5d,0xf0,0xc1,0xe7,0x6e,0xe2,0xa4,0xe8,0x02,0xfc,0xd7,0x20,0xc7,0xd9,0xc8,0xaf,0x0a,0xe2,0xc7,0x77,0x9e,0xfa,0x8d,0xdd,0xce,0xee -,0x34,0x83,0x90,0x39,0x39,0x2c,0x9e,0x23,0xdf,0x74,0xa6,0x07,0x72,0x15,0xe4,0x00,0x14,0x00,0xf1,0x70,0x77,0x10,0x2b,0x47,0xce,0x6d,0xde,0x38,0xb0,0x07,0x6a,0x91 -,0x3d,0x71,0x7b,0x1e,0x84,0x7a,0xe4,0x4f,0x75,0x18,0x03,0xde,0xf7,0x40,0x32,0x80,0x4e,0xa2,0xe0,0x30,0x80,0x60,0x16,0x01,0xc0,0xff,0xf1,0x50,0x80,0x2d,0x1f,0xfc -,0x21,0x0a,0xcf,0xff,0xfa,0xde,0xff,0xff,0xb3,0x62,0xa0,0xdc,0x26,0x14,0x0b,0x05,0x03,0x01,0x40,0xb0,0x48,0x28,0x12,0x0a,0x04,0x82,0x81,0x20,0xa0,0x88,0x28,0x11 -,0x19,0x84,0x44,0x61,0x14,0xab,0x5b,0xe3,0xae,0xdd,0xf1,0x7b,0x56,0xaa,0xf2,0x6a,0x95,0x72,0xab,0x53,0x3e,0xfd,0xef,0xe3,0xd3,0x8c,0xb9,0x7e,0x78,0x16,0x7b,0x3e -,0x3d,0x9f,0x45,0xfc,0x3e,0x91,0xec,0x78,0x97,0xd6,0x7d,0xa7,0xe9,0x75,0x3b,0x3d,0x42,0x2c,0x6f,0x57,0xf2,0xce,0xa0,0xfd,0xd2,0xf7,0x27,0x34,0xe3,0x93,0xe4,0x20 -,0x57,0x34,0x7f,0x3e,0xdc,0x55,0x66,0xf2,0xbf,0x55,0x4d,0x34,0x27,0xaf,0xef,0xad,0xc9,0xec,0x29,0x5a,0x7f,0x7e,0x46,0x2b,0xfb,0x0f,0x70,0x6d,0x32,0x9d,0x78,0x4c -,0xbc,0x35,0x8b,0x71,0xa9,0x1d,0x52,0x39,0x4e,0x95,0xac,0x92,0xd9,0x44,0x66,0x07,0x70,0x2b,0x48,0x31,0x4d,0x2b,0x55,0x1a,0x87,0x80,0x02,0x6b,0xc6,0x29,0x50,0xa0 -,0xe8,0x48,0x0c,0x95,0x02,0x53,0x0a,0x00,0x17,0x08,0x01,0x10,0x2a,0x90,0x2c,0x27,0x09,0x85,0x82,0xe1,0x61,0x28,0x50,0x2c,0x15,0x0a,0x05,0x85,0x01,0x50,0xa0,0x54 -,0x4c,0x15,0x0b,0x85,0x02,0xa4,0x10,0xa8,0x8c,0xa2,0x65,0x4a,0x9f,0x1f,0x9e,0xab,0x8d,0xb6,0x94,0xeb,0x92,0x0e,0x37,0xc4,0xeb,0x7b,0xbb,0x94,0xf8,0xbf,0x5c,0x67 -,0x91,0xfe,0xdb,0x79,0xd5,0xd9,0xdb,0xbf,0x4d,0x9e,0xff,0x38,0x79,0x73,0x1e,0xe7,0x5f,0xfd,0x2b,0xc2,0x84,0x4e,0x6f,0x3e,0x5d,0x8f,0xef,0x7f,0x46,0x18,0x77,0x0d -,0xf5,0x04,0xea,0xd3,0x7f,0xfa,0xb2,0xf3,0x54,0xe7,0x7f,0x38,0x73,0xe4,0xf9,0x71,0xaf,0x97,0xcc,0xe6,0x34,0x6f,0xb0,0x88,0x8d,0xcd,0xc7,0xad,0x0f,0x3e,0xe5,0x6d -,0xa3,0x7e,0xd7,0xf1,0xed,0xe3,0x5b,0x60,0xe2,0x3c,0x60,0x31,0xc2,0x62,0xd3,0xea,0xf5,0x69,0x76,0x61,0x64,0x9e,0x2a,0xe1,0xc0,0x25,0xcd,0x6a,0x03,0xc9,0x60,0x00 -,0xfb,0xc3,0x9f,0xcc,0x22,0x28,0x19,0x53,0xd6,0xfd,0xa8,0x50,0x0f,0xca,0x0f,0xe5,0x80,0xf5,0xcb,0x03,0xf6,0xc0,0x80,0x08,0x85,0x02,0xf1,0x02,0xc0,0x11,0x14,0xb0 -,0x1c,0xff,0xf1,0x50,0x80,0x2c,0xbf,0xfc,0x21,0x0a,0xcf,0xff,0xff,0xbf,0xff,0xfc,0xaf,0x80,0xb0,0xd4,0x24,0x14,0x0b,0x09,0x42,0xc1,0x40,0xb0,0x5c,0x2c,0x15,0x0a -,0x04,0x82,0x82,0x50,0x90,0x90,0x24,0x14,0x09,0x04,0x46,0x61,0x11,0x98,0x84,0xed,0xde,0x5e,0xaa,0x6e,0xb5,0x4c,0xd5,0x71,0xdd,0xb5,0x90,0x95,0xa5,0x74,0xe7,0x56 -,0xdc,0xd7,0x9e,0xff,0x7b,0x02,0xd5,0x7f,0xbc,0x3e,0x96,0x7b,0x57,0xda,0xfc,0xef,0x6f,0xec,0xf4,0x27,0x8b,0xc0,0x91,0x34,0x30,0x5b,0x1f,0x64,0x7f,0x26,0x58,0xbc -,0xee,0xa7,0xe4,0xef,0x76,0xde,0x7f,0xd7,0xff,0xb7,0xd3,0xa4,0x47,0xcd,0xea,0xb7,0xff,0x56,0xe1,0x84,0x9e,0x39,0x39,0xf7,0x53,0xed,0x4d,0x1d,0x80,0xce,0x23,0x38 -,0x54,0xcf,0x83,0x7b,0xe7,0x69,0xb1,0x35,0xbe,0x2c,0xef,0x59,0xcd,0x12,0x3e,0x6e,0xc5,0x34,0xb4,0xd6,0x0a,0xc9,0x17,0x18,0xfb,0xb4,0x07,0x85,0x48,0xa8,0x56,0xb8 -,0xb4,0xa5,0x62,0x71,0x44,0xa0,0x3b,0xe0,0x0e,0xe9,0x7a,0x91,0x00,0x9a,0xd1,0x13,0x13,0x09,0x00,0xc0,0x04,0x0a,0xdc,0x05,0x09,0x05,0x8c,0x81,0x70,0xa8,0x90,0x2a -,0x16,0x12,0x05,0xc2,0x82,0x61,0x20,0x94,0x28,0x17,0x09,0x85,0x48,0x63,0x11,0x98,0x44,0xaf,0x9b,0xe7,0x59,0xc3,0xbf,0xae,0x77,0x2f,0x32,0xe9,0x4b,0x47,0x0a,0x97 -,0x2b,0x4e,0x87,0xd7,0xf1,0xf5,0xed,0xd0,0xc8,0x9f,0xae,0x38,0xec,0x6a,0x38,0x0e,0xfd,0x03,0xe3,0xf9,0x9d,0x0f,0x34,0xc1,0xef,0xdd,0x7c,0x1a,0xe9,0x65,0xe3,0xcb -,0xcf,0x54,0xe1,0xd7,0xf6,0x4d,0xdd,0xbb,0xfc,0xff,0xe6,0xf7,0x7b,0x5d,0x6b,0xcb,0x43,0xba,0x8a,0xa4,0xc9,0xfc,0xf4,0xda,0xdc,0x79,0x7f,0xf7,0x61,0xfd,0x87,0x1a -,0xf7,0xba,0x51,0x9c,0x16,0x74,0x2b,0xa7,0x6f,0x45,0x17,0x73,0xe3,0xb7,0xac,0x9f,0x6a,0xa8,0x1d,0xcf,0xe9,0xa0,0x38,0xc7,0x1a,0x5e,0x8e,0x44,0xac,0x45,0x11,0xcd -,0xe1,0xdd,0xba,0xb0,0x02,0x1e,0x40,0x07,0x90,0x97,0x88,0x91,0x7b,0xcd,0xee,0x02,0x76,0xfd,0xf0,0x57,0x28,0x05,0xcd,0x05,0xea,0x44,0x3d,0x60,0x02,0xa6,0xdc,0xc1 -,0x20,0x11,0x2c,0x02,0x80,0x38,0xff,0xf1,0x50,0x80,0x2c,0x7f,0xfc,0x21,0x0a,0xcf,0xef,0xff,0xfe,0xff,0xfc,0xb0,0x70,0xb0,0x90,0x2c,0x13,0x0b,0x0a,0x02,0x82,0x70 -,0xb0,0x5c,0x2a,0x14,0x09,0x05,0x08,0x44,0x41,0x08,0x8c,0x22,0xd7,0x33,0x8c,0xeb,0x9e,0x3d,0xfd,0xb6,0xbc,0xba,0xf3,0xd9,0x15,0xad,0xea,0xb8,0xcf,0xbf,0xbd,0x3c -,0xf7,0x3a,0x23,0xff,0x3b,0x15,0xeb,0x75,0x76,0xfd,0x2c,0xfa,0xa6,0xc4,0xfc,0xf7,0x07,0x8f,0xfd,0xd2,0x57,0x25,0xd0,0xe4,0x7c,0x6b,0x51,0x16,0x8f,0x7f,0xab,0xd8 -,0x78,0xc1,0xc6,0x4d,0xcf,0x7c,0xb5,0x7c,0xf8,0x3a,0x84,0xc8,0xbf,0x4e,0xf9,0xf2,0xdb,0xaa,0x8b,0x45,0x8f,0xdf,0x97,0x15,0xa9,0xa1,0x9e,0x88,0x23,0xf6,0x4f,0xaf -,0x13,0xb7,0x70,0xa7,0x82,0x73,0xf6,0x7b,0xea,0xe4,0xe3,0xcf,0x01,0x06,0x49,0xd5,0x30,0xf5,0xc2,0xad,0x64,0xe3,0xd6,0x01,0x7a,0x0a,0xb9,0xb9,0x56,0xc4,0xc0,0xb2 -,0x53,0x0a,0x17,0xd9,0x69,0x80,0x9a,0x72,0x10,0x05,0x51,0xa0,0x00,0xb0,0x07,0x32,0x60,0x52,0xa0,0x58,0x4e,0x14,0x0a,0x85,0x84,0x81,0x60,0xa8,0x50,0x2a,0x14,0x0b -,0x06,0x02,0x81,0x60,0xa0,0x58,0x28,0x26,0x12,0x05,0x46,0x64,0x10,0x98,0x48,0x22,0x87,0x77,0x89,0x26,0xf4,0xc5,0x24,0xaa,0x84,0x95,0x17,0x1d,0x34,0xf0,0xff,0x4f -,0x1a,0xf7,0xfc,0x7f,0x8f,0xb8,0xfc,0xdd,0x7e,0xcf,0x5d,0x1d,0xb3,0xee,0x8f,0x77,0x29,0x0f,0x9f,0xc5,0xb8,0xb7,0xd1,0xc4,0xfb,0x47,0x75,0xf1,0x7c,0x9f,0xec,0xe7 -,0x3d,0xa7,0x17,0x80,0x9d,0x38,0xc9,0x7f,0xe9,0xb9,0x14,0x2a,0x97,0xe4,0x9a,0x80,0x19,0xe7,0xd0,0xa2,0xa2,0x03,0x3e,0x30,0x02,0xc7,0x9b,0xe6,0x91,0x85,0xca,0x5c -,0xe4,0xa8,0xc4,0x84,0xaa,0x39,0x7e,0xcc,0xc9,0xed,0xe0,0xe5,0x4b,0x9f,0xc5,0xcb,0xe7,0x6a,0x0e,0x18,0xe0,0xa9,0xe1,0x69,0xe6,0xe3,0x65,0xe4,0xe6,0x3c,0x58,0x3b -,0x9a,0x0f,0xff,0xd9,0xdc,0xb8,0x7d,0x7c,0x1d,0xc1,0x39,0xfb,0x80,0x14,0x41,0xcb,0xd7,0xf5,0x80,0x23,0x18,0xc9,0x21,0x42,0xda,0x6d,0x6c,0x51,0x08,0x02,0xe0,0x05 -,0x16,0x42,0xc1,0x10,0x2a,0x40,0x05,0x40,0x70,0xff,0xf1,0x50,0x80,0x2b,0x9f,0xfc,0x21,0x0a,0xcf,0x7e,0xfb,0xef,0xff,0xfd,0xb1,0x62,0x28,0x48,0x2a,0x17,0x0b,0x0d -,0xc4,0x81,0x51,0x20,0x54,0x28,0x12,0x0a,0x0d,0x42,0x81,0x21,0x18,0x45,0xed,0xbf,0x1e,0xfe,0x77,0xde,0xa7,0xdf,0xf6,0xbd,0x61,0x26,0x5d,0xee,0x44,0xf8,0xdd,0x25 -,0x4c,0x9d,0x65,0xf1,0x9f,0xf9,0x7f,0x91,0x7f,0xbb,0x8f,0xdb,0x47,0xeb,0xd5,0x4f,0xb1,0xd4,0xe2,0xf2,0xf5,0xae,0x83,0x4f,0xc5,0x7e,0xff,0xa2,0x56,0x94,0x3c,0xa4 -,0xfe,0x6d,0xe9,0x38,0xf9,0xb7,0x1c,0x98,0x0f,0xcf,0x28,0x9d,0xf1,0xaf,0x25,0x7f,0xea,0xfb,0x03,0xfa,0xe6,0x5a,0xd9,0x15,0x77,0x0d,0x62,0xfc,0xec,0x4b,0x1d,0xad -,0x76,0x64,0xe3,0x0f,0xf9,0x2d,0xb9,0x6f,0x2f,0x43,0xb6,0xb4,0xd0,0xf0,0x7e,0xe5,0x02,0xb3,0xa9,0x37,0x38,0xd8,0x84,0xc5,0x4b,0x7d,0x42,0x64,0xe4,0x45,0x38,0x8a -,0x4d,0x58,0x86,0x06,0xb5,0x76,0x2e,0xb3,0x7a,0xf5,0x13,0x0b,0x8b,0x85,0x53,0x04,0x40,0x7d,0x80,0x1b,0xc2,0x60,0x54,0xa0,0x58,0xca,0x16,0x0a,0x85,0x86,0x81,0x61 -,0x20,0x94,0x2c,0x14,0x0a,0x85,0x82,0x82,0x30,0xa9,0x0c,0x22,0x13,0x10,0x88,0xc2,0x25,0x00,0xb2,0x77,0xf8,0xbf,0xcf,0x15,0xc7,0xaf,0x8f,0x17,0x8a,0xb8,0xc8,0x5a -,0x75,0x95,0xc7,0xb7,0xbc,0xe2,0xef,0xe2,0x73,0x7f,0xee,0x3f,0x47,0x6f,0xeb,0x64,0xfa,0x69,0xf7,0x25,0x1d,0x3f,0x03,0xda,0xe3,0x1e,0x84,0x99,0x97,0xcf,0xe8,0xde -,0x52,0xd8,0xeb,0x7d,0xff,0xc1,0xf3,0xbe,0x2e,0x77,0x7f,0x0d,0x27,0xbf,0x78,0x1f,0xdc,0xda,0xbb,0xef,0x81,0xc2,0xa2,0xf8,0x4e,0x05,0xd0,0xf9,0xd9,0x6e,0xe4,0xf5 -,0xf7,0x57,0x12,0x6a,0x54,0x95,0xca,0x3a,0xdc,0x82,0x71,0xd4,0x17,0xe9,0xc9,0xfd,0x8c,0xbf,0xd7,0xfb,0x66,0xe2,0x04,0xf4,0x24,0xbb,0xed,0x91,0xca,0xec,0x3c,0x41 -,0x36,0x6c,0x72,0xe6,0x35,0x8e,0x64,0x27,0x82,0x16,0x2a,0xb9,0x7f,0x22,0x21,0x10,0xaa,0xa7,0xac,0x62,0x1e,0xc4,0x17,0x15,0xb2,0x92,0x01,0xeb,0x80,0x20,0x00,0x5a -,0x60,0x09,0x82,0x60,0x38,0xff,0xf1,0x50,0x80,0x2b,0x7f,0xfc,0x21,0x2a,0xcf,0x9f,0xf4,0xbe,0xff,0xff,0xb1,0x62,0x28,0x90,0x2c,0x17,0x0a,0x05,0x84,0x81,0x50,0xa0 -,0x58,0x28,0x16,0x12,0x04,0x82,0x82,0x21,0x20,0x46,0x2d,0xbd,0xb7,0xf5,0xcf,0x75,0xe7,0xb9,0x2d,0xcd,0xd2,0x6b,0x24,0xab,0x2f,0x50,0x51,0x35,0x1f,0xfe,0x56,0x3e -,0x57,0xf1,0xf2,0x63,0xee,0xdf,0xe1,0xea,0x74,0x38,0x8b,0xf9,0xfb,0x56,0x98,0xa2,0x74,0xe5,0xa7,0x38,0x1f,0x47,0xbd,0xf3,0xbc,0xb7,0x69,0xb9,0x9d,0xe9,0x8e,0x8e -,0x7a,0x92,0x9d,0xa8,0xba,0x22,0x40,0x3e,0x61,0xb3,0xbf,0x57,0xdd,0x20,0x8c,0x5b,0xcc,0xef,0xab,0x97,0xc1,0x7c,0xd9,0x6e,0xc2,0x35,0x37,0x07,0xf1,0x6f,0x87,0x07 -,0x18,0xb5,0xd4,0xfd,0x33,0x1f,0x94,0x6b,0x39,0xa1,0x7c,0x31,0x29,0x81,0x50,0x6c,0xa1,0x1a,0x04,0xc4,0x68,0x4a,0xc2,0xd5,0x04,0x84,0x6b,0x10,0x15,0x8c,0x66,0x28 -,0x01,0x18,0x86,0xc0,0x0b,0x54,0x09,0x8a,0x81,0x3b,0x00,0xa7,0x50,0xb0,0xd0,0x2c,0x24,0x0a,0x85,0x84,0x81,0x60,0xa0,0x48,0x2a,0x14,0x0b,0x05,0x04,0xc1,0x41,0x30 -,0x50,0x64,0x13,0x10,0x98,0xc4,0x24,0x00,0x9e,0x26,0xb7,0x69,0x57,0xba,0x9a,0xcc,0x85,0xaa,0xeb,0x5b,0xd5,0xd4,0xba,0xba,0x7c,0x4d,0x6f,0x7f,0xfc,0x87,0xad,0xfd -,0xdc,0x6e,0xfa,0x5d,0xfb,0x99,0xf9,0x76,0xa7,0xcf,0xfc,0x1a,0x47,0x4c,0xb5,0x46,0x90,0xfc,0xd6,0xd1,0xc9,0x7f,0x61,0xf7,0x8f,0xd7,0xe2,0x3f,0xab,0x7c,0x7b,0xf0 -,0x94,0x24,0x5f,0xe4,0x9c,0xff,0xf4,0xaf,0x84,0x74,0x1d,0x37,0xcd,0x98,0xed,0x1f,0xd3,0x6c,0xfc,0xef,0x9d,0xee,0x3a,0x87,0x41,0x2f,0xb1,0xd1,0x79,0x18,0x92,0x42 -,0xa6,0xfb,0xe7,0x9b,0xab,0x35,0xdf,0x6a,0x13,0x99,0xda,0x62,0xb8,0xcb,0x3f,0x39,0xb1,0xdd,0x02,0x03,0x0d,0xdb,0xe6,0xb8,0xe0,0x9a,0xde,0xd7,0x05,0x2d,0xa6,0x16 -,0x7e,0x28,0x77,0x44,0x9a,0x13,0x87,0x71,0x2b,0x41,0xa0,0x6b,0x25,0x92,0xb4,0x63,0x82,0xc5,0xe7,0x15,0x43,0xbc,0x03,0xd7,0x01,0x30,0x0a,0x96,0x51,0x50,0x98,0x0e -,0xff,0xf1,0x50,0x80,0x2f,0x1f,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x45,0x18,0x2d,0x11,0x11,0x52,0x29,0xa1,0x72,0x2a,0xec,0x61,0x96,0x3f,0xac,0x21,0xc4,0xc3,0xab,0x8a -,0x2f,0x50,0x97,0x12,0x37,0xa1,0x34,0x11,0x1c,0x48,0x47,0x49,0x71,0x60,0x3c,0x14,0xe7,0x24,0x73,0x3b,0x2e,0xb5,0x29,0xf0,0xff,0x54,0xd1,0x0b,0x74,0x99,0xd3,0x25 -,0xd5,0x26,0x77,0x88,0xf5,0xbe,0x65,0x3e,0x0c,0xf2,0xc4,0xe0,0xf7,0x5e,0xf7,0x9e,0xea,0x9e,0x75,0x16,0x69,0x52,0xd1,0x74,0xe7,0x5b,0xd1,0x99,0x2a,0xa8,0x98,0x03 -,0xc8,0x34,0xcb,0x03,0x42,0x75,0xd6,0xc4,0xd5,0x21,0xc3,0xfc,0xcd,0xbd,0x61,0x9e,0xbb,0x71,0xf7,0x35,0x6c,0x99,0x5a,0xa5,0x56,0xad,0xef,0xdd,0xb5,0xfa,0x74,0xbc -,0xe3,0x0a,0x40,0x04,0xc8,0x1c,0xe9,0x6a,0x27,0x0c,0xa3,0x99,0x35,0x99,0x1e,0x5d,0xef,0xcd,0xba,0x46,0x01,0x29,0x2a,0xda,0x4a,0xa6,0xa0,0x27,0x49,0x73,0xc5,0xb7 -,0x14,0xe0,0xb6,0xc6,0x03,0x5a,0x69,0xde,0xd0,0x9e,0x98,0xb6,0x4e,0xdd,0x17,0xa8,0xb8,0xf5,0x0d,0x03,0xc2,0x3d,0x83,0x36,0x01,0xa0,0xa2,0x82,0xc6,0x0b,0x34,0x6a -,0x45,0x0a,0x93,0x44,0xbe,0x82,0x53,0xe6,0x13,0x38,0x3e,0x3b,0x52,0x1f,0x80,0x9d,0xe8,0x32,0xed,0x72,0xf6,0xe7,0xe9,0xbf,0xb3,0xc7,0xd3,0xd7,0x4f,0xd6,0xfc,0xe5 -,0x70,0xd5,0x57,0x52,0x28,0x51,0x89,0xc7,0x52,0x6f,0x61,0x16,0x21,0x9d,0xda,0x9f,0x51,0xdb,0xdd,0x97,0x6a,0x7b,0x0b,0xaf,0x0f,0x7e,0x7e,0x7b,0x66,0x7e,0x9a,0xe7 -,0xea,0xa1,0x69,0x7e,0x78,0x2a,0x48,0x73,0xf0,0x31,0xbd,0xdd,0x4b,0x35,0xbb,0x55,0x95,0x5d,0x3f,0x6a,0x4b,0x2e,0x0b,0x51,0x88,0xac,0xc9,0x2e,0xe8,0x35,0x2f,0x61 -,0xf9,0xa1,0xe9,0x5f,0xcf,0x90,0x61,0x2a,0x91,0xfd,0x8a,0xc2,0xd5,0xdb,0xbf,0x43,0xc9,0x1c,0x4b,0x61,0xa0,0xb2,0x79,0x74,0xfd,0x9d,0x26,0xb2,0x55,0xa0,0x6d,0xdb -,0x4d,0x63,0x62,0xbe,0x14,0xd8,0x35,0x3f,0xdf,0xdb,0x97,0x38,0x9b,0x3c,0xee,0x66,0x80,0xe4,0xa5,0x6a,0xeb,0x83,0x57,0xb9,0x09,0x26,0xe4,0xe0,0x6f,0x77,0x84,0x6d -,0x70,0x41,0x72,0x70,0x9c,0x62,0x4e,0xfa,0x2f,0xa7,0x34,0x71,0xa1,0x34,0x44,0xc4,0x04,0x44,0x44,0x0b,0x54,0xc5,0x13,0x80,0xff,0xf1,0x50,0x80,0x2d,0xdf,0xfc,0x21 -,0x4c,0xfe,0xf7,0xfd,0x4d,0x16,0x28,0x59,0x23,0x22,0x64,0x49,0x96,0xa6,0xf8,0x95,0x2f,0x2f,0x43,0x10,0x46,0x88,0x07,0xe0,0x34,0xb0,0xba,0xc1,0xce,0xc0,0xd2,0x83 -,0x50,0x5f,0xa2,0x99,0x92,0xd5,0xcc,0xf6,0x55,0x32,0xe4,0xf7,0x63,0xd9,0x73,0x3e,0xa7,0xfa,0x93,0xfe,0x5f,0xf4,0x7f,0xc8,0xfb,0xf9,0xb2,0x35,0xf6,0x78,0x15,0x8d -,0xa3,0xab,0x72,0xa9,0xcd,0xc6,0x0a,0x41,0x4a,0x16,0xd5,0x03,0x2b,0x3d,0x7d,0x41,0xfe,0xeb,0x8c,0x2e,0x52,0xfa,0x32,0x99,0x73,0xff,0x5b,0xd1,0x5b,0x05,0x5d,0x77 -,0x23,0x39,0xed,0xa3,0xef,0x2f,0x92,0xa2,0x36,0xd1,0x2b,0xd8,0x87,0x60,0x60,0x3d,0x55,0xac,0x9b,0xf3,0x86,0x56,0x13,0x24,0x00,0x56,0x1d,0x5a,0x0e,0x66,0xce,0x1c -,0x43,0xbf,0x64,0xa7,0x48,0xc1,0x83,0xc3,0x21,0xc3,0xa2,0xb6,0x92,0x3a,0x2b,0xcf,0xd6,0xd3,0x9d,0x6b,0x7f,0x96,0xa4,0xf4,0x8b,0xd2,0x54,0xa4,0xe4,0x52,0x92,0x93 -,0xa0,0x92,0x54,0x77,0x83,0x0d,0x7d,0xc3,0x16,0x91,0x5a,0x94,0x15,0x18,0x28,0x54,0x2a,0x51,0x41,0x6a,0x84,0xca,0x11,0x68,0xcb,0x97,0xe7,0xc4,0xe0,0x2e,0x6f,0xa9 -,0x9e,0xa3,0x1a,0x7b,0x54,0x5a,0x80,0xfa,0x4b,0x09,0xf1,0x75,0xcb,0xf8,0xe9,0xfd,0x95,0xe1,0xf2,0x1a,0xe5,0xd3,0x1b,0x3b,0xfd,0xc5,0xbb,0xc6,0x8d,0xf7,0x49,0x4d -,0x95,0xd0,0xd2,0xed,0x97,0x0b,0x97,0xcf,0xd5,0xd3,0x3e,0xbf,0x8d,0x98,0xeb,0x1f,0xbf,0xee,0x56,0x5a,0x35,0xd9,0x86,0x35,0xc1,0x01,0x7e,0x37,0xe5,0x3d,0xda,0x75 -,0x41,0xf8,0xb0,0xdc,0xe4,0xd4,0x67,0x55,0x43,0xc0,0x64,0x35,0x31,0x3f,0x22,0xa5,0x88,0x15,0x7a,0xe3,0x62,0x41,0x8c,0xed,0x9d,0x3e,0x81,0xe9,0xb3,0x63,0xf1,0xbd -,0x2e,0xf1,0x8f,0xfd,0x8f,0x77,0x7b,0x44,0xd3,0x4d,0x3d,0xb1,0x0d,0x10,0x9d,0x70,0x86,0x94,0x5e,0x41,0xec,0x17,0x15,0x45,0xdd,0xca,0x16,0xac,0x85,0x2e,0x10,0x2f -,0xeb,0xaa,0xbd,0x72,0x54,0xf4,0xf6,0x4b,0xa3,0x3a,0xf9,0xf9,0xec,0x75,0xad,0xfe,0xb7,0xc3,0x78,0xdc,0xb9,0x02,0x25,0xcb,0x93,0xcb,0x62,0x82,0x55,0x29,0x52,0x56 -,0x29,0x62,0x53,0x36,0xd4,0xe0,0xff,0xf1,0x50,0x80,0x2b,0xbf,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x44,0x26,0x49,0x0c,0x89,0x34,0xd2,0x42,0x24,0xd0,0xff,0x01,0xd5,0x9f -,0x22,0x3e,0xec,0xbe,0x54,0xfd,0xc3,0x78,0x5b,0xb7,0xaf,0xce,0x84,0xa3,0x34,0x69,0xf7,0xab,0x9f,0x5a,0xac,0x94,0xd4,0x2a,0x69,0x65,0x36,0x72,0x8c,0x26,0x2e,0x72 -,0xf5,0x8e,0xa9,0xb2,0x90,0x78,0x48,0x78,0xb8,0x0c,0x4d,0x90,0x37,0x4b,0x2f,0xe0,0xf5,0xd8,0x0f,0xd7,0x4f,0xe8,0xbd,0x8b,0x52,0xdf,0x6b,0x9b,0xe8,0xe1,0xb0,0xb2 -,0x78,0x2c,0x49,0x00,0x0e,0x9b,0xe2,0xbb,0x8d,0x0e,0x69,0x5a,0x98,0x4c,0x97,0xfc,0x6a,0xde,0x12,0xe2,0x67,0xe8,0xa6,0xb2,0xff,0x71,0x9a,0x3c,0xb6,0xaa,0x40,0xd8 -,0xf3,0x56,0x79,0x5a,0x47,0x09,0xeb,0x34,0xfa,0xf7,0xd4,0x6e,0xea,0x79,0xaf,0xfe,0xeb,0xab,0x52,0xae,0x91,0x76,0xf3,0x11,0x96,0x57,0x2b,0xb6,0x09,0x73,0xb5,0x63 -,0x5d,0xfd,0xb1,0x35,0xdb,0xe9,0x0c,0x91,0xa5,0x63,0x5f,0x0c,0x29,0xd5,0xc2,0xa2,0xca,0x6a,0x2b,0x8e,0x04,0x71,0x1d,0xda,0x91,0xc0,0x47,0x10,0xa8,0xa0,0x14,0x50 -,0x59,0xc1,0x64,0x68,0x49,0x91,0x28,0xa8,0xd6,0xa7,0x1d,0x50,0x93,0x60,0x41,0xff,0x4b,0x0a,0x4c,0xea,0x58,0x86,0xbf,0xd4,0xa1,0x3a,0x6f,0xf7,0x1a,0xde,0xc9,0x38 -,0xd7,0x21,0xf8,0x4f,0x1b,0x3e,0xfd,0x77,0x49,0xe8,0xb3,0x2e,0xec,0x2e,0x2b,0xaa,0xca,0xb9,0xb0,0xeb,0xea,0xcb,0xc2,0xe9,0x25,0xdf,0x47,0x34,0xfc,0xf2,0xa1,0x7d -,0x3a,0x73,0x1a,0x5a,0x0b,0x49,0xe5,0x12,0x39,0x03,0x29,0x51,0xa6,0x4f,0x12,0x47,0x61,0xc8,0xdd,0xbc,0xd0,0x2f,0x6e,0x24,0xb7,0x35,0x14,0x75,0x29,0xc9,0xdf,0x50 -,0x53,0x3f,0x30,0xa0,0xd8,0x16,0xd6,0x5d,0xa0,0xe5,0x3a,0x48,0x16,0x01,0xa0,0x1b,0x3d,0x2e,0x8a,0xf5,0x11,0x59,0x68,0xfd,0xf4,0xf5,0x37,0xab,0x3e,0xf0,0x69,0xc3 -,0x59,0xb9,0xf6,0xb0,0x9f,0xe4,0x9d,0x72,0x44,0x87,0x02,0x79,0xd3,0xc8,0xdb,0xfd,0x74,0xf6,0xca,0x00,0x00,0x22,0xf5,0x68,0xb0,0x80,0x00,0x19,0xf7,0x96,0xc8,0x00 -,0x00,0x00,0x70,0xff,0xf1,0x50,0x80,0x28,0xbf,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x4c,0x16,0x68,0x58,0xaa,0x22,0x28,0xcb,0x8a,0x91,0x25,0xc9,0xe4,0x7d,0x15,0x7b,0x52 -,0xfc,0xf8,0xf7,0x4d,0xf3,0x67,0xc4,0xbf,0x9c,0x5e,0x95,0xfc,0xef,0xb4,0x2c,0x3a,0x66,0xf4,0xd8,0x65,0x2d,0xde,0x33,0x5b,0x56,0x38,0x50,0x76,0x4d,0x3e,0x31,0x34 -,0xfd,0xf8,0x61,0x91,0xd9,0xb4,0x68,0xc5,0x8c,0xa9,0x04,0xa6,0x34,0x7e,0xe3,0xf0,0x9c,0xa2,0xee,0x94,0x08,0x2c,0x18,0x00,0x76,0x12,0x45,0xae,0x40,0x6d,0x91,0x5d -,0x2c,0x2a,0x08,0x3b,0xa8,0x10,0xff,0xca,0xa2,0xca,0xb8,0x77,0x65,0x99,0x82,0xa6,0x57,0x83,0x1a,0xf3,0xae,0x7d,0x7c,0x6b,0x1d,0x9f,0x6e,0xee,0xcb,0x8d,0xd2,0x24 -,0xdd,0xcd,0xaf,0x50,0x52,0x51,0xcf,0xa3,0xec,0xa7,0x84,0xec,0x52,0x81,0xfb,0x09,0x29,0x31,0xce,0x13,0x4c,0x78,0x31,0x68,0x7a,0x73,0x4f,0x1b,0x84,0xd6,0x9a,0xd3 -,0x64,0x9a,0xfc,0x17,0x99,0x02,0x13,0x44,0x8d,0xd0,0x9a,0x02,0x08,0xe1,0x05,0x40,0x00,0x08,0x8c,0xfe,0x29,0x47,0x0d,0x9a,0x13,0x62,0x4c,0xae,0x92,0x6a,0xfe,0xba -,0xab,0x12,0xe6,0x51,0xe3,0xf1,0x31,0x6c,0xe4,0x5e,0xc9,0xe3,0xe4,0x45,0xdb,0x49,0x2d,0xb8,0xe5,0xec,0xd2,0x05,0x54,0xf2,0xe0,0x14,0x63,0x32,0x8c,0x99,0xa1,0x1e -,0x02,0x30,0x48,0xaa,0x69,0x55,0x6f,0x02,0x5e,0x8d,0x74,0x71,0xf2,0xdb,0xdd,0x75,0x6b,0x66,0xf9,0xa6,0xd3,0x27,0x05,0x59,0xa8,0x9b,0xb5,0x5f,0x3d,0x7d,0xb4,0xc0 -,0x63,0xc6,0xa9,0xa4,0x49,0xf1,0x16,0x5e,0xb4,0x99,0x1b,0x45,0x20,0x15,0xa6,0x45,0x45,0x3a,0x1e,0xd3,0x4c,0x31,0x8e,0xc9,0x41,0x6f,0xc6,0x97,0xd5,0x2b,0xe0,0x6a -,0xdc,0xd7,0x33,0xec,0x1d,0x2f,0x9e,0x3d,0xb3,0x4d,0xee,0xbc,0xf1,0xeb,0x0f,0x34,0xcb,0xfe,0x9d,0x2d,0xa4,0x80,0x00,0x00,0x00,0x03,0x48,0xf6,0xc0,0x00,0x02,0x90 -,0x53,0x40,0x00,0x00,0x01,0x11,0xe2,0x9c,0xff,0xf1,0x50,0x80,0x2a,0x5f,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x4c,0x16,0x48,0x59,0x21,0x22,0xa4,0xc8,0xa6,0xa5,0x5c,0x48 -,0xb8,0x2b,0xab,0xb7,0x05,0x59,0x97,0x39,0x5f,0x2d,0xb7,0xf9,0x2b,0xc9,0x16,0x89,0xa9,0x68,0xce,0x6c,0x3e,0x92,0xcd,0x82,0x2c,0xbb,0xd6,0x4a,0xe9,0x62,0xe9,0xa4 -,0xf4,0x4a,0x94,0xdf,0xe1,0x1f,0x08,0x8f,0x8f,0xfe,0x63,0xe0,0x5a,0xec,0x7f,0xe3,0x76,0x6f,0xa6,0x57,0xda,0x86,0x2b,0x8d,0xf6,0xa9,0x0c,0xa8,0x23,0x28,0x15,0x0a -,0x00,0x96,0x91,0x5e,0x8c,0x02,0x88,0x85,0xc4,0x46,0x24,0x20,0x67,0xba,0xf7,0xf1,0x7c,0x8d,0x70,0xbe,0x58,0x70,0x1c,0x8e,0x20,0xd8,0xc5,0xda,0x30,0x23,0x1b,0x0f -,0xf4,0x96,0x16,0x45,0x43,0x9c,0xdc,0x03,0x9e,0x49,0x4d,0x97,0x44,0xc1,0x25,0xd6,0x87,0x36,0xae,0x52,0x9c,0xcc,0x8d,0x72,0x6d,0x99,0x99,0x50,0x3d,0x79,0x35,0x85 -,0x9e,0x60,0xd7,0xcd,0x5d,0x6c,0xad,0x71,0xd2,0xe7,0x32,0x24,0xa0,0x42,0x9f,0x68,0x10,0x3a,0xcc,0xc1,0x02,0x41,0x84,0x86,0x82,0x51,0x02,0x17,0x28,0xe8,0xb5,0x42 -,0xa4,0xc8,0x93,0x22,0x57,0x55,0x2e,0xf8,0xea,0xa5,0x04,0x4c,0xd4,0x57,0xdb,0x89,0x44,0x23,0x0c,0x77,0x74,0x30,0x8e,0xe8,0x8d,0x75,0x46,0x1a,0x71,0xd9,0x86,0xed -,0x7d,0x71,0x87,0x66,0xf2,0x7d,0x9d,0xb6,0x5f,0xaa,0xa2,0xf6,0xcf,0x76,0x6f,0x67,0xc3,0x2f,0xa7,0xde,0x9b,0x2b,0xf7,0xf7,0x1f,0x5c,0xd8,0xdb,0xbb,0x33,0xbf,0xaf -,0x56,0x35,0x33,0x99,0x9f,0xf2,0x32,0x60,0xd1,0x35,0x34,0x19,0xb5,0x55,0x33,0x8d,0xa5,0x54,0x82,0x32,0xe7,0x52,0x51,0xba,0x9b,0xc6,0x9a,0x9c,0x20,0xa2,0x42,0xad -,0x76,0x79,0xf4,0x9d,0x21,0x75,0xf9,0x2b,0xec,0xd9,0xd0,0xec,0x61,0xfd,0xfb,0xa8,0x31,0x05,0x8b,0xe4,0x39,0x14,0x52,0x11,0x88,0x00,0x05,0xc1,0x3c,0x6d,0xdf,0xf5 -,0x5e,0x33,0x21,0x90,0xb9,0x72,0xe6,0x92,0xe6,0x92,0x24,0x40,0x3b,0xa9,0xc5,0x32,0x70,0x30,0x8b,0x89,0x8b,0x89,0x8b,0x89,0x8d,0x07,0xff,0xf1,0x50,0x80,0x2b,0x1f -,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x4c,0x16,0x88,0xc8,0x99,0x14,0xd1,0x24,0xb5,0xdd,0x8c,0x56,0xbd,0x16,0xbd,0xe9,0x57,0x67,0xc3,0x3b,0x10,0xaa,0xd4,0x3e,0xf8,0x5f -,0xb8,0x64,0xc7,0x35,0xfc,0x4d,0x64,0xc5,0xd7,0x5e,0x39,0xe7,0x77,0xe2,0xc9,0x0e,0xa7,0xcf,0x0c,0xeb,0x92,0xa0,0x80,0x8c,0x39,0x70,0x1a,0xb2,0x77,0xf0,0x5d,0x0f -,0x96,0x7a,0x11,0xa7,0x53,0x60,0x98,0x38,0x2e,0xa3,0x66,0xe7,0xfc,0xdb,0x88,0x9f,0x45,0xbf,0x7c,0x59,0x0a,0x24,0xbc,0xdc,0x2f,0xa3,0xb7,0xfa,0x36,0xbe,0x7a,0x13 -,0x6e,0x74,0xe5,0xbb,0x5f,0xff,0xa1,0xd2,0xa9,0xf9,0x9b,0x21,0x93,0x92,0x3a,0x7f,0x50,0x2b,0x3a,0xcd,0x3b,0xe4,0x72,0x9c,0x88,0xe5,0xc9,0x70,0x42,0x97,0xea,0x30 -,0x8c,0x5f,0xf7,0x52,0x66,0x20,0x4c,0xc0,0x28,0x5c,0x5d,0xde,0xb4,0xdc,0x13,0x70,0xcf,0xbf,0x25,0x81,0x04,0xe0,0x84,0x13,0x82,0x24,0x0a,0x21,0x5b,0x0c,0xc5,0x62 -,0x6e,0x09,0x8b,0x80,0x99,0xba,0xe5,0x1c,0x16,0xaa,0x4c,0x91,0x32,0x29,0x74,0x8b,0xd3,0xcd,0x40,0x0d,0xfe,0x18,0xed,0x2a,0xe9,0x60,0x29,0x9f,0xd4,0x82,0x2b,0xf9 -,0x52,0xba,0x5b,0x14,0x7f,0x7f,0x73,0xe7,0x2d,0xf4,0x96,0xae,0xec,0x76,0xfa,0x66,0xfc,0x0f,0xbe,0xfb,0x38,0xf6,0x7f,0xfa,0xb5,0x75,0xab,0x78,0x68,0x29,0xbe,0xd3 -,0x7d,0xbb,0x7d,0x55,0x9d,0xb7,0x6f,0x97,0x9d,0x33,0x76,0x7a,0x6b,0xdc,0x57,0xcb,0x45,0xd5,0x55,0xc0,0xf6,0xa4,0xb6,0x4d,0x52,0x2a,0xaa,0x04,0xc3,0xa9,0xef,0x41 -,0x37,0x4d,0xfb,0xbd,0x69,0xde,0xd3,0x04,0xb3,0x54,0x0e,0xbe,0xc8,0xae,0x7c,0x59,0xed,0xe5,0x35,0xe9,0x4e,0x75,0xd0,0xbb,0x2f,0xb2,0x57,0x16,0xfb,0x78,0x6f,0xe1 -,0xbe,0x85,0x61,0xcb,0x74,0x87,0xb2,0x60,0x0f,0x60,0x39,0xad,0xa7,0xd9,0x54,0xce,0x29,0xe6,0x55,0x3e,0x20,0x75,0x34,0x3c,0x49,0x33,0xbc,0x67,0x32,0x19,0x8c,0xa4 -,0x89,0x98,0x0c,0xc6,0x60,0x79,0xc1,0x63,0x22,0xc2,0x23,0x90,0x88,0x88,0xd8,0x22,0x2a,0x38,0xff,0xf1,0x50,0x80,0x25,0x1f,0xfc,0x21,0x4c,0xfe,0xff,0xfd,0x2c,0x98 -,0x2e,0x56,0x1a,0x12,0x64,0x4a,0x4a,0xd2,0xe1,0x70,0x7f,0x2b,0xa5,0xdc,0xb6,0xfe,0x8e,0xf3,0x1c,0x0d,0x6e,0x30,0x18,0xcd,0x67,0xd2,0x94,0x5c,0xe1,0x34,0xd3,0x9c -,0xe7,0x39,0xdd,0x5e,0xde,0x36,0x9f,0xcb,0xd5,0xe9,0xc3,0x4b,0x20,0x3d,0xbd,0xdf,0xc3,0xe8,0xf8,0xfe,0xce,0xac,0x67,0x20,0x7d,0x1f,0x08,0xce,0xbb,0xfd,0x9d,0xe0 -,0x1e,0x9d,0x7c,0x9d,0x3b,0xc7,0x0f,0x87,0xa7,0x72,0xe3,0xcf,0x83,0x39,0x80,0x00,0xc7,0x64,0x74,0x4f,0x54,0xf3,0xcf,0x1a,0xc7,0x0b,0x8e,0xa5,0x40,0x00,0x38,0xbd -,0x4e,0x51,0x7c,0x53,0xa3,0xfd,0x31,0x84,0x0e,0xef,0xa2,0x9c,0x35,0xfa,0xdd,0x8f,0x8c,0x6b,0x5e,0x5b,0xb0,0x00,0xf3,0x57,0x1c,0xb2,0x7c,0xa6,0xfb,0x7d,0x23,0xcc -,0x00,0x24,0x7e,0x36,0x35,0x8b,0x53,0xe9,0xa0,0x00,0x75,0x98,0x89,0xd2,0xa7,0x8e,0x26,0x20,0x00,0x14,0x32,0x5e,0x29,0x32,0x25,0x49,0x91,0x48,0x2e,0xfd,0x93,0x41 -,0xe9,0x11,0xf7,0x3e,0xe9,0xeb,0x3d,0x7f,0xcb,0xba,0x05,0x01,0xc0,0xf4,0x1e,0xb7,0x69,0xe0,0xeb,0xee,0xed,0x79,0x5d,0x50,0x1a,0xdf,0xc5,0xa9,0xea,0xf2,0xf0,0x3a -,0xb7,0x2b,0x20,0x35,0x3d,0x57,0xca,0xcf,0xc2,0xe3,0x72,0xef,0x29,0x03,0x3d,0x3f,0x7d,0xc2,0xf8,0xd8,0x7c,0xae,0x28,0x07,0xf3,0xeb,0xf6,0xbc,0x6b,0xd5,0x5a,0xfa -,0xa7,0x5c,0xfd,0xbe,0x3d,0x97,0x34,0x00,0x0f,0xb9,0xbf,0xaf,0xfb,0x5d,0xc7,0xf7,0x5f,0x13,0xb6,0xe8,0xe0,0x1a,0x1f,0x93,0x1b,0xfc,0x68,0xb8,0x0a,0xc7,0x86,0xe6 -,0x4b,0x6c,0x40,0x20,0x00,0x00,0x00,0x3c,0xc1,0x43,0x39,0xa6,0x00,0x06,0x69,0x31,0xc8,0x00,0x00,0xec,0x2c,0x28,0x31,0x00,0x00,0x0e}; - -static const int aac_sample_size=102075; - - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/sample_h264.h b/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/sample_h264.h deleted file mode 100644 index 5c169f3..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/sample_h264.h +++ /dev/null @@ -1,34405 +0,0 @@ -#ifndef SAMPLE_H264_H -#define SAMPLE_H264_H -static unsigned int h264_sample_len = 550338; - -#include "section_config.h" -SDRAM_DATA_SECTION static const unsigned char h264_sample[] = { - 0x00, 0x00, 0x00, 0x01, 0x67, 0x42, 0xc0, 0x0d, 0x9a, 0x74, 0x06, 0xc1, 0xef, 0x37, 0x80, 0x88, - 0x00, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x03, 0x01, 0x94, 0x78, 0xa1, 0x55, 0x00, 0x00, 0x00, - 0x01, 0x68, 0xce, 0x3c, 0x80, 0x00, 0x00, 0x00, 0x01, 0x65, 0x88, 0x80, 0x20, 0x00, 0x55, 0xfc, - 0x31, 0xc0, 0x39, 0x47, 0x8a, 0x00, 0x02, 0x0d, 0x5e, 0xfc, 0x57, 0xc7, 0x63, 0x80, 0x00, 0x80, - 0x27, 0xff, 0xff, 0x0b, 0x15, 0xfa, 0xf1, 0xdb, 0xdb, 0xe3, 0xe3, 0xcc, 0x21, 0x45, 0xfa, 0xd5, - 0x78, 0xe6, 0x38, 0x3f, 0xf8, 0x78, 0xf0, 0x52, 0x24, 0x5f, 0xaf, 0x47, 0x67, 0x8a, 0x00, 0xec, - 0x9f, 0x4f, 0x1e, 0x50, 0xbe, 0x1d, 0x09, 0xe6, 0x7f, 0xb6, 0xdb, 0x6d, 0xff, 0x74, 0xd3, 0xff, - 0xf0, 0x02, 0x2f, 0xc1, 0x1d, 0xdf, 0xe2, 0x29, 0x7f, 0xfb, 0x7c, 0x68, 0x81, 0x0f, 0x1e, 0x1f, - 0xed, 0xfc, 0xbe, 0x0e, 0x08, 0x24, 0x18, 0x80, 0xef, 0x7a, 0xd7, 0xff, 0x86, 0x62, 0x3a, 0x09, - 0xbf, 0x7e, 0xfd, 0x78, 0xe9, 0x1c, 0x00, 0x08, 0xdf, 0xff, 0xff, 0xc2, 0xf5, 0xeb, 0xd1, 0xff, - 0xff, 0x87, 0x93, 0xff, 0x1f, 0xe0, 0x82, 0xbf, 0xff, 0x1f, 0xe0, 0x80, 0x8b, 0xff, 0x87, 0xc4, - 0x78, 0x4a, 0xbd, 0xf9, 0x39, 0x3f, 0xff, 0xfe, 0x08, 0x4a, 0xbc, 0x9f, 0xf8, 0x7c, 0x47, 0x87, - 0xef, 0xff, 0xe2, 0x3c, 0x78, 0x52, 0xbd, 0x7f, 0xfc, 0x43, 0x11, 0xe0, 0xa0, 0x8b, 0xd7, 0x8e, - 0xdf, 0xf8, 0x86, 0x23, 0xc1, 0x35, 0x7a, 0xf7, 0xff, 0xf1, 0xfe, 0x0a, 0x2b, 0xd7, 0x8e, 0xc7, - 0xff, 0xf8, 0xfe, 0x24, 0xab, 0xd7, 0xaf, 0xff, 0x8c, 0x7f, 0x0f, 0x0d, 0x17, 0xfc, 0x3e, 0x23, - 0x88, 0xf0, 0xf0, 0xc7, 0xe7, 0x90, 0x37, 0xe1, 0xd8, 0xff, 0x0f, 0xc7, 0x8f, 0x71, 0x7e, 0xbd, - 0x7a, 0xff, 0xff, 0x80, 0x70, 0xb1, 0x45, 0xfa, 0xf1, 0xdb, 0xff, 0x31, 0x18, 0x8f, 0x09, 0xdf, - 0xaf, 0xff, 0xc7, 0x8f, 0x55, 0xeb, 0xd7, 0xaf, 0x47, 0xc9, 0x87, 0xbd, 0xc3, 0xe2, 0x18, 0x07, - 0x09, 0x91, 0xfa, 0xff, 0xf8, 0x80, 0xc4, 0x43, 0x0b, 0xd7, 0xaf, 0x1e, 0x5f, 0xf8, 0x06, 0x23, - 0xc1, 0x15, 0xf8, 0xe9, 0x4f, 0x82, 0x25, 0xb9, 0xe6, 0x47, 0x6f, 0x0e, 0xcf, 0xf7, 0xc3, 0xe2, - 0x01, 0x11, 0xe1, 0xeb, 0xff, 0xf8, 0x06, 0x23, 0xc3, 0xd7, 0xff, 0xf1, 0x1f, 0xe4, 0x27, 0xff, - 0xff, 0xc1, 0x01, 0x57, 0xbf, 0xc3, 0xe0, 0x18, 0x80, 0x61, 0x62, 0x3f, 0x7e, 0x8f, 0xff, 0xc4, - 0x31, 0x1e, 0x08, 0xaf, 0xd1, 0xdf, 0xfc, 0x47, 0x11, 0xe1, 0x2b, 0xf7, 0xef, 0xbe, 0xf0, 0xdf, - 0xbf, 0xf1, 0xfe, 0x26, 0xbd, 0x7a, 0xf7, 0xcf, 0x2d, 0x1f, 0xff, 0xff, 0xc1, 0x20, 0xa5, 0x8b, - 0xf9, 0x57, 0xf8, 0x00, 0x77, 0x27, 0x42, 0x0d, 0xae, 0xaa, 0xa6, 0xc5, 0x3f, 0x93, 0x23, 0x15, - 0xc8, 0x38, 0x0f, 0x0e, 0x8b, 0xd7, 0xac, 0xd9, 0x76, 0x44, 0xb4, 0xf8, 0x62, 0x0f, 0x11, 0xe8, - 0x97, 0x5e, 0xb5, 0x6b, 0x4b, 0xf1, 0x1d, 0x08, 0x42, 0x40, 0x27, 0x68, 0xea, 0xaf, 0x06, 0x8a, - 0x05, 0x80, 0x73, 0x71, 0x87, 0xc2, 0x01, 0xa0, 0xbf, 0x7b, 0xf3, 0xa6, 0xa4, 0xd0, 0x0f, 0xc4, - 0x34, 0x11, 0x99, 0x11, 0x52, 0xaa, 0x71, 0x51, 0x1c, 0x6b, 0x86, 0x86, 0x3e, 0xfb, 0xa4, 0x0d, - 0x38, 0xdc, 0xbc, 0x5b, 0xb9, 0xb9, 0xbf, 0x57, 0x5e, 0x1a, 0x2a, 0xab, 0x89, 0xc7, 0xfa, 0xb5, - 0xf4, 0x70, 0xd9, 0x44, 0xeb, 0x4d, 0x3d, 0xb6, 0xf1, 0xfd, 0x41, 0xee, 0xe3, 0x85, 0x87, 0xaf, - 0x5e, 0x03, 0x45, 0x2c, 0xe4, 0x28, 0x71, 0xe8, 0xc4, 0xf8, 0x69, 0xe4, 0xac, 0xea, 0x1d, 0xf0, - 0xd1, 0x4c, 0x47, 0x11, 0xff, 0xd0, 0x24, 0xaf, 0x47, 0xda, 0xf8, 0x7c, 0x03, 0x00, 0xc8, 0x11, - 0x21, 0x52, 0x75, 0x0e, 0xf8, 0xa9, 0x8f, 0xfc, 0x7e, 0x40, 0x49, 0x5f, 0x95, 0xa8, 0x77, 0xcd, - 0x43, 0x4f, 0x7e, 0x25, 0x1f, 0x8d, 0x05, 0x2a, 0xba, 0xf8, 0x86, 0x01, 0xe3, 0xf4, 0x17, 0x3a, - 0xf5, 0xe3, 0x8c, 0x7e, 0x20, 0x30, 0x0f, 0x1f, 0xa0, 0xbd, 0x7a, 0xfe, 0xff, 0x1e, 0x3f, 0x40, - 0x98, 0x8b, 0xd7, 0x9d, 0x17, 0xdf, 0xff, 0xfa, 0x0b, 0xd7, 0xaf, 0x1c, 0x6f, 0xf1, 0xe3, 0xf4, - 0x0a, 0x08, 0xbd, 0x7b, 0x4e, 0x8b, 0xe9, 0xd7, 0xdf, 0xf8, 0x8f, 0xe8, 0x23, 0xe9, 0x49, 0x8a, - 0x58, 0x96, 0x94, 0xd3, 0x4d, 0x3f, 0xc7, 0x8f, 0xfe, 0x40, 0xb5, 0x7a, 0xf1, 0x1d, 0x11, 0x0b, - 0x43, 0x79, 0x3a, 0x6d, 0xb6, 0xdb, 0x4d, 0x3f, 0xf8, 0xfc, 0x63, 0x41, 0x21, 0x8b, 0xd7, 0xfc, - 0x44, 0x38, 0xc4, 0x42, 0x81, 0x05, 0x7f, 0xc4, 0x71, 0x1f, 0xd1, 0x05, 0xa1, 0xb5, 0xf4, 0x12, - 0x0b, 0xff, 0xff, 0xa0, 0x42, 0x31, 0x79, 0x54, 0xa5, 0x7e, 0x23, 0x88, 0x84, 0x47, 0x21, 0x3e, - 0x23, 0x88, 0xe2, 0x3a, 0x21, 0xd1, 0x03, 0x7e, 0x6f, 0xe3, 0xc7, 0xf4, 0x5a, 0xf5, 0xeb, 0xc7, - 0x6c, 0x61, 0xf1, 0x10, 0xfa, 0x27, 0xc4, 0x7f, 0x11, 0xd1, 0x0a, 0xb2, 0x93, 0x87, 0xf7, 0x0c, - 0x03, 0x41, 0x18, 0xf2, 0x9d, 0x63, 0xa5, 0xff, 0xc7, 0xc6, 0x9d, 0x7a, 0xf5, 0xeb, 0xff, 0x8f, - 0x1f, 0xa2, 0xd7, 0xaf, 0x5e, 0x3b, 0x63, 0x08, 0x44, 0x00, 0x3c, 0x64, 0x0c, 0x75, 0xaf, 0x6e, - 0x3f, 0x88, 0x04, 0x03, 0x41, 0xea, 0xfd, 0xef, 0xf1, 0xfe, 0x34, 0x51, 0xb2, 0x79, 0xc8, 0x93, - 0x95, 0x59, 0xe1, 0xe0, 0xe3, 0x83, 0x4d, 0x3f, 0xef, 0xde, 0x71, 0x8f, 0x0a, 0x1c, 0x59, 0xb2, - 0xbe, 0x2b, 0x77, 0xce, 0xb5, 0xb6, 0xff, 0xfe, 0x90, 0xe1, 0x82, 0x05, 0x37, 0x8a, 0xfb, 0xce, - 0x8c, 0x84, 0xa8, 0xd2, 0xa3, 0x6a, 0x09, 0xf8, 0x09, 0x7d, 0x84, 0x4e, 0x89, 0x78, 0x8f, 0xff, - 0xec, 0x99, 0x17, 0x84, 0xa3, 0xe8, 0x61, 0xb1, 0x5e, 0xfc, 0x57, 0x9d, 0x40, 0xec, 0x7c, 0x8f, - 0xc0, 0x3a, 0x99, 0x42, 0x18, 0xd0, 0x2f, 0x9b, 0x47, 0x62, 0x12, 0xde, 0xf0, 0xe6, 0x14, 0x1e, - 0x3b, 0xbb, 0xff, 0x13, 0x3f, 0x8e, 0x66, 0xbc, 0x44, 0x5a, 0xef, 0xea, 0xde, 0xde, 0x62, 0x5f, - 0x97, 0xb6, 0xaa, 0xdc, 0x38, 0xf3, 0xd2, 0x3b, 0x0c, 0x8b, 0xcb, 0xb5, 0xfd, 0x10, 0x82, 0xb4, - 0x70, 0x7f, 0xff, 0xf4, 0x08, 0x06, 0x2f, 0xff, 0x87, 0x8e, 0x81, 0x0d, 0x7f, 0xfc, 0x3f, 0xa0, - 0xfd, 0x79, 0xd0, 0xda, 0x38, 0x7f, 0x8f, 0xfe, 0x81, 0x30, 0xc5, 0xeb, 0xff, 0x8f, 0x1e, 0x34, - 0x22, 0xbd, 0x7a, 0xf1, 0xda, 0xd7, 0x1f, 0xf8, 0xfd, 0x02, 0x02, 0x2f, 0xe3, 0xfc, 0x78, 0xd0, - 0xba, 0xf5, 0xeb, 0xf8, 0xff, 0xc7, 0xa0, 0x4f, 0x5f, 0xaf, 0xf8, 0xf0, 0xfa, 0x11, 0x5e, 0xbd, - 0x78, 0xec, 0x7f, 0x8c, 0x7f, 0xfa, 0x13, 0x5f, 0xad, 0x7f, 0xff, 0xfd, 0x02, 0x62, 0x2d, 0x6b, - 0xce, 0x8a, 0x00, 0xfe, 0xae, 0xa0, 0x76, 0xb5, 0x0d, 0x3d, 0xff, 0xc2, 0x1c, 0x84, 0xf8, 0x78, - 0x7e, 0x81, 0x21, 0x5f, 0x8e, 0xd4, 0xbf, 0xff, 0x8f, 0x44, 0x8f, 0x18, 0xc6, 0x31, 0x8d, 0x10, - 0xc8, 0x81, 0xf7, 0x91, 0xff, 0xff, 0xfa, 0x11, 0x5e, 0xbd, 0x78, 0xed, 0x12, 0xa7, 0x90, 0xf2, - 0xfc, 0x47, 0xff, 0x40, 0x92, 0xbc, 0x76, 0x89, 0xc6, 0xb2, 0x30, 0xac, 0x91, 0xfc, 0xff, 0xf8, - 0x43, 0xa0, 0x89, 0x72, 0x44, 0x22, 0x36, 0x07, 0x18, 0x80, 0x5c, 0x44, 0x22, 0x38, 0x8e, 0x23, - 0xa0, 0x88, 0xc1, 0xda, 0xd1, 0x01, 0xd5, 0x87, 0x50, 0x7b, 0xd1, 0xe5, 0x21, 0x32, 0x28, 0x3a, - 0xb6, 0x23, 0xf8, 0x7f, 0x44, 0x4a, 0x59, 0x7f, 0x0f, 0x88, 0x85, 0x02, 0x2a, 0xfc, 0xa7, 0xf1, - 0x71, 0xff, 0xf1, 0x90, 0x5d, 0x7a, 0xf5, 0xfc, 0x78, 0xf1, 0xf9, 0x0b, 0x5e, 0xbd, 0x7e, 0x5f, - 0xe3, 0xc7, 0xe4, 0x05, 0x15, 0xeb, 0xca, 0x9f, 0xe3, 0xc7, 0x8d, 0x08, 0xaf, 0x5e, 0xbf, 0xa7, - 0x27, 0xdf, 0xe1, 0xf8, 0x75, 0x15, 0xf7, 0xef, 0x15, 0xc5, 0x7c, 0x45, 0xc4, 0x42, 0x42, 0x48, - 0x60, 0x6e, 0x46, 0xdd, 0x43, 0x0f, 0x0b, 0x86, 0x82, 0xc7, 0x7b, 0xdf, 0xa2, 0x52, 0x8f, 0x1f, - 0xf1, 0xe0, 0x94, 0xab, 0xc7, 0xd7, 0x20, 0x7b, 0xd1, 0x1c, 0x44, 0x21, 0xe1, 0xa0, 0x4b, 0x7e, - 0x3e, 0xfd, 0xbc, 0x31, 0x0c, 0x81, 0x12, 0x0f, 0xbf, 0x94, 0x44, 0x75, 0xb5, 0x02, 0x8b, 0xde, - 0xbd, 0xa6, 0x45, 0x0d, 0xf8, 0x45, 0x59, 0x51, 0x3c, 0xa9, 0x2e, 0xc3, 0x44, 0xaf, 0xaa, 0x88, - 0x5f, 0x6b, 0x57, 0xbe, 0x68, 0x97, 0xf4, 0xa7, 0x12, 0x06, 0xc5, 0x25, 0xe5, 0xcb, 0x81, 0x0c, - 0x2d, 0xef, 0xf8, 0xff, 0x8e, 0x23, 0x90, 0x16, 0x84, 0xd7, 0x9d, 0x09, 0xd7, 0xa7, 0xce, 0xb6, - 0x27, 0x5b, 0x18, 0x8f, 0x1f, 0xe3, 0xa0, 0xc5, 0x7a, 0xf6, 0x27, 0x44, 0x0d, 0xf9, 0x8f, 0xff, - 0xfd, 0x1a, 0xbd, 0x7a, 0xf4, 0x6d, 0x14, 0x92, 0x10, 0x7f, 0xff, 0xe8, 0x22, 0x51, 0xdb, 0xfc, - 0x7e, 0x31, 0xa0, 0x95, 0x7a, 0xff, 0xff, 0xe1, 0x40, 0x94, 0x82, 0xfc, 0x77, 0x7e, 0x20, 0x11, - 0x3c, 0x00, 0x2a, 0x3b, 0x59, 0xbf, 0x03, 0xac, 0x94, 0xee, 0xc4, 0xd8, 0x83, 0x27, 0xe9, 0xaa, - 0x07, 0x00, 0xc3, 0x81, 0x80, 0x69, 0x30, 0xa5, 0x4a, 0x75, 0xc7, 0xd5, 0xfb, 0x11, 0xfd, 0x40, - 0xd7, 0x55, 0x87, 0x61, 0xc7, 0x9d, 0x83, 0xaf, 0x11, 0x00, 0x8f, 0x38, 0x71, 0x2c, 0x95, 0x65, - 0x85, 0x89, 0xee, 0x24, 0x74, 0x43, 0xb8, 0xe2, 0x3e, 0xbf, 0x61, 0x71, 0xab, 0xda, 0x84, 0x5f, - 0x1a, 0xb1, 0xc7, 0x4c, 0x43, 0x87, 0x7c, 0x91, 0x7f, 0xff, 0xd0, 0x2a, 0x89, 0x69, 0x4d, 0x34, - 0xd3, 0xf1, 0x64, 0x1b, 0x10, 0x1a, 0x88, 0x9b, 0x6d, 0xb6, 0xd3, 0x4f, 0x80, 0x62, 0x01, 0xc6, - 0x01, 0x90, 0x12, 0x04, 0x17, 0xf1, 0xf1, 0x2a, 0x42, 0x17, 0x9c, 0x9c, 0x56, 0xa0, 0xea, 0x24, - 0x25, 0x42, 0x2f, 0x02, 0xa8, 0xfc, 0x3c, 0x77, 0x7f, 0x81, 0x04, 0x57, 0xaf, 0xc5, 0xe2, 0x3a, - 0x88, 0x65, 0x0a, 0x02, 0x2b, 0x64, 0x58, 0xff, 0xf9, 0xf8, 0xd9, 0xa4, 0x5c, 0xd8, 0x80, 0xf4, - 0x60, 0x67, 0x5c, 0x1f, 0x7a, 0x76, 0xff, 0xee, 0xef, 0x77, 0xc8, 0x10, 0x11, 0x9b, 0x0d, 0x63, - 0xda, 0x29, 0x57, 0x0a, 0x95, 0xbc, 0x89, 0x15, 0x0f, 0x9a, 0xa4, 0x07, 0xb0, 0xa8, 0x9d, 0x08, - 0x92, 0xa6, 0x8d, 0xbb, 0x74, 0xfb, 0xbe, 0xff, 0xf5, 0x26, 0x6b, 0x06, 0xff, 0x71, 0x24, 0xdc, - 0x1f, 0xe4, 0x4d, 0xc2, 0xe9, 0x6c, 0x98, 0x23, 0xa8, 0xa6, 0x9f, 0xfd, 0xef, 0x73, 0x77, 0xbd, - 0x8e, 0xb9, 0xac, 0xd2, 0xb1, 0xdc, 0x94, 0xe6, 0x3f, 0xce, 0x27, 0xda, 0xc1, 0xd3, 0xd6, 0xf0, - 0xde, 0x89, 0x9b, 0x60, 0xef, 0xfa, 0xd7, 0x84, 0x39, 0x0e, 0x23, 0xb0, 0xb8, 0x56, 0x28, 0xda, - 0xd6, 0xa1, 0x7f, 0xeb, 0x50, 0xd3, 0xcd, 0x71, 0xfe, 0x30, 0xfa, 0x27, 0xc3, 0xf8, 0x8e, 0x88, - 0xd6, 0x45, 0xa5, 0x0f, 0x7b, 0xfe, 0x23, 0x88, 0x85, 0x04, 0x4a, 0x3e, 0xc7, 0x97, 0x11, 0xc4, - 0x74, 0x46, 0xbf, 0xc7, 0xff, 0x41, 0x8a, 0xf5, 0xe3, 0xb7, 0x8f, 0x1e, 0x3c, 0x69, 0xd7, 0xaf, - 0x5e, 0xbf, 0xf8, 0xf1, 0xfa, 0x10, 0x45, 0xeb, 0xf5, 0x56, 0xf1, 0xff, 0xfa, 0x3d, 0x7a, 0xd6, - 0xb5, 0xf4, 0xaa, 0x10, 0x2a, 0x7a, 0x0e, 0xa8, 0x1c, 0x4c, 0xbe, 0x00, 0x1f, 0xf9, 0x4e, 0xfd, - 0xfb, 0xf4, 0x70, 0xff, 0xff, 0x0e, 0x09, 0xef, 0xdf, 0x99, 0xc3, 0xef, 0x0f, 0xa7, 0x63, 0x63, - 0x83, 0x63, 0xf0, 0xff, 0xa0, 0x46, 0x31, 0xfa, 0x3e, 0x25, 0x90, 0x36, 0x93, 0x8a, 0x3f, 0x00, - 0xe1, 0x87, 0xf6, 0x1f, 0xbf, 0xc3, 0x8f, 0x0e, 0x3a, 0x19, 0x7e, 0xfd, 0xff, 0xfe, 0x3f, 0x90, - 0xb7, 0xeb, 0xd7, 0xa7, 0x58, 0xe1, 0xff, 0xc8, 0x08, 0x88, 0xbc, 0x71, 0xef, 0x9e, 0x63, 0xe6, - 0x74, 0x87, 0x05, 0x69, 0x75, 0xca, 0xef, 0xfc, 0x00, 0x22, 0x38, 0xd0, 0xc4, 0x36, 0x19, 0x17, - 0x87, 0x15, 0xbd, 0x7f, 0xad, 0xee, 0x50, 0xcb, 0xc2, 0x71, 0xa6, 0x42, 0x5a, 0x6e, 0x3f, 0xfe, - 0x38, 0x29, 0xaf, 0x5f, 0x91, 0xff, 0xe3, 0xfc, 0x70, 0xc5, 0x7a, 0xf1, 0xc6, 0xff, 0x1f, 0xe3, - 0x41, 0x4a, 0xf5, 0xed, 0x7f, 0xc6, 0x3f, 0x1a, 0x0c, 0x57, 0xaf, 0x1d, 0xbf, 0xfc, 0x60, 0x19, - 0x01, 0x25, 0x7f, 0x60, 0xb4, 0xf0, 0xff, 0x1c, 0x10, 0x4d, 0x5e, 0x92, 0x91, 0xf2, 0x0c, 0xbd, - 0xaa, 0x18, 0xb2, 0x0a, 0xb4, 0xa5, 0xfe, 0x9a, 0x33, 0xa3, 0xc0, 0xcb, 0x40, 0x57, 0x25, 0xf1, - 0xed, 0x7b, 0x7f, 0x4e, 0x73, 0xad, 0x67, 0x3d, 0x77, 0xf3, 0xad, 0xbd, 0xd7, 0xc2, 0xde, 0xd2, - 0xde, 0x0e, 0x82, 0x60, 0x68, 0xef, 0x37, 0x6f, 0x19, 0xef, 0x34, 0xeb, 0x58, 0x9d, 0x7c, 0x96, - 0x93, 0x4f, 0x8d, 0x63, 0xb7, 0xe1, 0x7a, 0xac, 0x60, 0xa4, 0x1f, 0x2f, 0xe9, 0x9b, 0xb7, 0x6f, - 0xfe, 0x75, 0x3f, 0x60, 0xb4, 0xfc, 0x33, 0xa2, 0x20, 0x04, 0x40, 0x6e, 0x5f, 0xdb, 0xfe, 0x3c, - 0x4a, 0x21, 0x90, 0x40, 0xd5, 0xea, 0xba, 0xf6, 0xb5, 0xff, 0xfc, 0x7a, 0x3d, 0x7a, 0xfd, 0x6d, - 0xf9, 0xbf, 0x87, 0xd0, 0x21, 0xaf, 0x6a, 0x1d, 0x9f, 0xed, 0xa8, 0x6c, 0x9f, 0x10, 0xac, 0xc0, - 0x02, 0x1e, 0xbf, 0xab, 0xbf, 0xef, 0x7f, 0xfe, 0x7e, 0x28, 0xb2, 0xac, 0xf7, 0x19, 0x07, 0xdd, - 0xde, 0x40, 0x80, 0x8e, 0x24, 0xe4, 0x2f, 0x53, 0x40, 0x3e, 0xd5, 0x76, 0x81, 0x7c, 0x6a, 0x34, - 0xc3, 0xe5, 0xf7, 0xf0, 0x1c, 0x38, 0xa0, 0x67, 0x15, 0x30, 0x7d, 0xe1, 0xed, 0xb3, 0xdd, 0xc1, - 0x88, 0x9e, 0xfb, 0xfc, 0xc6, 0xcb, 0x38, 0x1f, 0x35, 0xd4, 0xa9, 0xce, 0x12, 0x2b, 0x70, 0x46, - 0x46, 0x6a, 0xe9, 0xf1, 0x22, 0xa4, 0x8a, 0xa9, 0x5b, 0x52, 0xa0, 0x77, 0x63, 0x28, 0x9f, 0xed, - 0xfd, 0xef, 0xef, 0xe1, 0x02, 0x16, 0x3d, 0xe1, 0xce, 0x1c, 0xe3, 0x70, 0xe7, 0xb7, 0x09, 0x15, - 0xdb, 0x85, 0xba, 0xa6, 0x4f, 0x84, 0x72, 0x22, 0x93, 0xdc, 0x8a, 0xdc, 0xbf, 0x50, 0xdf, 0xb8, - 0x18, 0xb5, 0xca, 0x1c, 0x15, 0x11, 0x5d, 0x85, 0xef, 0xb1, 0x97, 0x1f, 0xf9, 0x02, 0xf2, 0xc9, - 0x38, 0x57, 0x09, 0x99, 0x5d, 0x73, 0xec, 0x3f, 0xf8, 0x47, 0xc2, 0xe1, 0x75, 0xe2, 0xfc, 0x1a, - 0xd0, 0x35, 0x2c, 0x47, 0xff, 0xe8, 0x14, 0x95, 0x7a, 0xf1, 0xdb, 0x18, 0x7c, 0x03, 0x00, 0xd1, - 0x20, 0x18, 0x8e, 0x01, 0xc7, 0x20, 0x25, 0x32, 0xf6, 0xc4, 0x71, 0x1c, 0x47, 0x11, 0xd0, 0x44, - 0xa8, 0xec, 0x8a, 0x1f, 0x7b, 0x87, 0xc4, 0x71, 0x1d, 0x10, 0xaa, 0x36, 0xe9, 0xf8, 0x88, 0x7c, - 0x00, 0x68, 0x12, 0x91, 0x7b, 0x5a, 0xca, 0xa0, 0xfa, 0x87, 0x53, 0x7e, 0x95, 0x40, 0xfa, 0x65, - 0x78, 0x7d, 0xd4, 0x06, 0x23, 0x4a, 0xbd, 0x7e, 0xaa, 0xab, 0x95, 0x19, 0x78, 0xf8, 0xfc, 0x69, - 0x75, 0x55, 0xad, 0x7a, 0xf2, 0xa4, 0x4a, 0x84, 0xad, 0x3d, 0x1c, 0x7e, 0xef, 0x8f, 0xff, 0x21, - 0x3e, 0x01, 0xf8, 0xc7, 0x0b, 0x95, 0xfb, 0xf1, 0x14, 0x93, 0xe1, 0xbf, 0x45, 0x4b, 0x4b, 0x6b, - 0x22, 0x83, 0xd6, 0x88, 0x24, 0x07, 0xb4, 0xe5, 0x26, 0x55, 0x16, 0xea, 0xfc, 0x3d, 0x82, 0x03, - 0x5f, 0xd4, 0x47, 0xf1, 0xd4, 0x45, 0x9e, 0xbf, 0x5a, 0xdf, 0x31, 0xc7, 0xf8, 0xe1, 0xe7, 0xaf, - 0x5f, 0x5f, 0x2e, 0x51, 0x9c, 0xe3, 0x8f, 0x20, 0xda, 0xd7, 0x9b, 0xd7, 0x89, 0x38, 0xab, 0x55, - 0xfd, 0x29, 0xe3, 0x08, 0xad, 0xb0, 0x5a, 0x2b, 0xa6, 0x2a, 0x4e, 0xff, 0xff, 0x8c, 0x3e, 0x81, - 0x10, 0x4d, 0x7a, 0x20, 0x5d, 0x1d, 0x69, 0x54, 0x7f, 0xe3, 0xf4, 0x08, 0x08, 0xbf, 0x8f, 0xf1, - 0xfa, 0x0b, 0xd7, 0xaf, 0x1d, 0x8f, 0xff, 0x1f, 0xe3, 0x41, 0x8a, 0xf5, 0xe3, 0xcb, 0xfc, 0x78, - 0xfd, 0x02, 0x8a, 0xf5, 0xe2, 0x2d, 0x3c, 0x7f, 0xfe, 0x83, 0xc5, 0x5f, 0xff, 0xc7, 0xe8, 0x12, - 0x11, 0x7a, 0x3f, 0xc7, 0xff, 0x8d, 0x02, 0x9a, 0xf5, 0xe3, 0xb5, 0xaf, 0x3e, 0xab, 0x1e, 0x6f, - 0xa0, 0x58, 0x10, 0x36, 0x8c, 0xca, 0x9c, 0xf0, 0x09, 0x03, 0xfa, 0x6f, 0xe9, 0xf5, 0x5c, 0x91, - 0x69, 0x9a, 0xa6, 0xfa, 0x13, 0x9e, 0x34, 0xb2, 0xf5, 0x58, 0x26, 0x56, 0xe9, 0x5d, 0xf0, 0xb6, - 0xc3, 0x03, 0xb1, 0x05, 0x8d, 0xe6, 0xfc, 0x43, 0xcb, 0x5a, 0x2a, 0x22, 0xa8, 0x9f, 0x9f, 0xfd, - 0x8d, 0xa9, 0xb1, 0xbe, 0xbb, 0xa4, 0x16, 0x74, 0xd4, 0x6d, 0x6f, 0xb5, 0x89, 0x38, 0x77, 0x69, - 0xf6, 0xfe, 0x7f, 0x9f, 0xb5, 0x87, 0x48, 0x6f, 0x6c, 0xde, 0xb8, 0x02, 0x8b, 0x96, 0xff, 0xe1, - 0xff, 0x8e, 0x81, 0x48, 0x64, 0x5f, 0xaf, 0x1d, 0xbf, 0xf8, 0xe2, 0x3a, 0x09, 0xd7, 0xaf, 0x68, - 0x81, 0xa7, 0x9a, 0x87, 0x7d, 0x1f, 0x8f, 0x1f, 0xa1, 0x04, 0x5e, 0xbd, 0x6a, 0x17, 0x2b, 0xdc, - 0xa4, 0x45, 0xb3, 0x17, 0xf0, 0x96, 0xa1, 0xf0, 0xf1, 0xa1, 0x16, 0x07, 0xc3, 0x5f, 0x20, 0xc9, - 0xac, 0x3d, 0x06, 0xb9, 0x20, 0x2a, 0x00, 0x00, 0x20, 0xe9, 0x75, 0xdd, 0xf2, 0x7b, 0xff, 0xfa, - 0x2c, 0x91, 0x50, 0xf4, 0x6a, 0x70, 0xe1, 0x20, 0xaa, 0xb8, 0xc7, 0xd9, 0xec, 0xb9, 0x7e, 0x5f, - 0x97, 0xf8, 0x45, 0x8b, 0x94, 0x86, 0x1a, 0x54, 0xbf, 0x0f, 0x78, 0xfc, 0xdd, 0x9d, 0x7a, 0x8c, - 0xa2, 0xac, 0x83, 0x22, 0xe4, 0xe4, 0xfb, 0x43, 0x3a, 0xae, 0x17, 0xae, 0xaa, 0x88, 0x60, 0x2e, - 0x37, 0x08, 0x61, 0xbf, 0xf0, 0xff, 0xd8, 0x6b, 0xae, 0xa5, 0x51, 0x9f, 0xc7, 0xc6, 0x21, 0xeb, - 0xe1, 0x86, 0x1f, 0x11, 0xd0, 0x58, 0x2f, 0x8b, 0xd7, 0xa2, 0x13, 0x47, 0x50, 0xd3, 0xc9, 0x53, - 0x5c, 0x43, 0x00, 0xfc, 0x3a, 0x04, 0x45, 0x5e, 0x3b, 0x1f, 0x88, 0x84, 0x43, 0x11, 0xc4, 0x72, - 0x04, 0x67, 0x45, 0x51, 0x1c, 0x47, 0xf1, 0x1d, 0x04, 0x69, 0xd1, 0x51, 0x03, 0x7e, 0x3a, 0xdc, - 0xb5, 0x19, 0x2c, 0xda, 0x20, 0x22, 0x7a, 0x44, 0x24, 0x95, 0x18, 0x2b, 0x27, 0x55, 0xcc, 0x44, - 0xa8, 0xdb, 0x43, 0x9b, 0x8f, 0xef, 0xf1, 0x90, 0xd5, 0xfa, 0xaa, 0xf1, 0xc6, 0xcb, 0xc4, 0xb8, - 0xf2, 0xa5, 0x5e, 0xab, 0xaf, 0x55, 0xda, 0x75, 0x0d, 0xfb, 0xc4, 0xea, 0x09, 0x35, 0x43, 0x44, - 0x92, 0x8e, 0x2f, 0x28, 0xc3, 0xf1, 0xe2, 0xee, 0xfa, 0xd5, 0x57, 0x88, 0x61, 0x58, 0x8b, 0xa6, - 0xe3, 0x83, 0x53, 0xcd, 0xc7, 0x06, 0xfc, 0x0b, 0xf8, 0x68, 0x11, 0x85, 0x2f, 0xa6, 0xdc, 0x7f, - 0x97, 0x0d, 0x08, 0xbf, 0x5e, 0xfe, 0x34, 0xec, 0xa1, 0x97, 0x87, 0x57, 0xe3, 0xfc, 0x3b, 0x04, - 0x7d, 0x63, 0x98, 0xe3, 0x8a, 0x88, 0x90, 0x8c, 0x7f, 0x90, 0x41, 0x05, 0xfa, 0xf5, 0xef, 0x18, - 0xa0, 0x24, 0x5a, 0x4e, 0x3c, 0x3c, 0x8e, 0x9d, 0x34, 0xf6, 0xdb, 0xfc, 0x36, 0xa4, 0x47, 0x20, - 0x28, 0x10, 0xbd, 0xf9, 0x50, 0xb6, 0x25, 0x8b, 0x09, 0x34, 0xf5, 0x2a, 0xa7, 0x25, 0xca, 0x9f, - 0xe3, 0x7f, 0xe8, 0x11, 0xd7, 0x9d, 0x3f, 0xc7, 0x8f, 0xd0, 0x28, 0xaf, 0x5e, 0x75, 0x7f, 0x8f, - 0x1f, 0xa0, 0x4d, 0x5e, 0xbf, 0xff, 0x8f, 0xd0, 0x24, 0xaf, 0xef, 0x1f, 0xfe, 0x34, 0x09, 0xeb, - 0xd7, 0xb5, 0x0e, 0xfb, 0xff, 0x8f, 0xe0, 0x92, 0xbf, 0xde, 0x3f, 0xc7, 0xe8, 0x27, 0x5e, 0xbd, - 0xa8, 0x7d, 0xe8, 0xf4, 0x9f, 0x88, 0xa5, 0x50, 0x70, 0x20, 0x76, 0x5e, 0x5c, 0x92, 0x18, 0x13, - 0x60, 0x52, 0xa6, 0xfc, 0xbf, 0xd3, 0xd3, 0xd2, 0x94, 0x7e, 0x95, 0x65, 0xe1, 0x5e, 0x32, 0x43, - 0x3c, 0x35, 0xee, 0x58, 0x26, 0x7e, 0x5f, 0xa2, 0x68, 0x94, 0x44, 0x44, 0x4d, 0x08, 0xad, 0xf8, - 0x87, 0xcd, 0x91, 0xa3, 0x28, 0xaf, 0xfb, 0x63, 0x14, 0xe1, 0x88, 0xe9, 0x4c, 0x36, 0x73, 0xaf, - 0xdb, 0xaf, 0x18, 0xab, 0x8e, 0x21, 0x88, 0x62, 0x3a, 0x28, 0xd5, 0xeb, 0xd7, 0x8e, 0x94, 0xaa, - 0x3d, 0x9f, 0xe3, 0xc7, 0xf4, 0x09, 0xab, 0xd7, 0xfe, 0xcc, 0x7e, 0xd6, 0x64, 0x10, 0x08, 0x6b, - 0x37, 0x5b, 0x8e, 0x27, 0xdc, 0x6c, 0x4f, 0xd1, 0x1b, 0x04, 0x69, 0x01, 0xe4, 0x60, 0x1e, 0xb5, - 0xef, 0x66, 0x63, 0xfd, 0xb7, 0xe8, 0xc9, 0x35, 0x86, 0xf1, 0x6b, 0xe5, 0xe5, 0x37, 0x64, 0xfd, - 0x37, 0xce, 0xc5, 0x0f, 0xcb, 0xe4, 0x11, 0x94, 0x88, 0x79, 0x61, 0xde, 0xbd, 0x75, 0x5a, 0x91, - 0x1d, 0x5e, 0x51, 0x22, 0x81, 0x17, 0x6a, 0x46, 0xaf, 0xd7, 0xac, 0x2f, 0x58, 0x33, 0x18, 0xd0, - 0x17, 0x7b, 0x79, 0xb5, 0xbe, 0x44, 0x22, 0x09, 0xb3, 0xda, 0x0d, 0x9e, 0x7d, 0xdc, 0xeb, 0xf7, - 0xff, 0xed, 0x57, 0x8f, 0x8c, 0x43, 0x1e, 0x1f, 0x8c, 0x28, 0x2e, 0x17, 0x14, 0xf8, 0xbf, 0x44, - 0x0f, 0x4d, 0x43, 0x4f, 0x35, 0x0e, 0xfb, 0x1f, 0xff, 0xd0, 0x2b, 0x08, 0x8b, 0xf3, 0xa5, 0xb6, - 0xfd, 0x34, 0xc4, 0x21, 0xc0, 0xea, 0xd4, 0x7d, 0xae, 0x20, 0x10, 0x0c, 0x03, 0x10, 0x0a, 0x08, - 0x91, 0x1d, 0xc4, 0x7f, 0x10, 0xc0, 0x34, 0x0a, 0xa9, 0x97, 0xed, 0xb6, 0x2d, 0x43, 0xbe, 0x63, - 0xfa, 0x69, 0xc7, 0xfe, 0x3f, 0x40, 0x82, 0xbc, 0xea, 0x1d, 0xf7, 0x71, 0xff, 0xfd, 0x04, 0xce, - 0xbd, 0x79, 0xd1, 0x03, 0x4f, 0x23, 0xf1, 0xf8, 0xff, 0x0a, 0x19, 0x5f, 0x8b, 0xd7, 0xff, 0x1f, - 0xfa, 0x0c, 0x57, 0xaf, 0x1d, 0xbc, 0x78, 0xff, 0xd3, 0xaf, 0x5e, 0xbd, 0x7f, 0x1e, 0x3f, 0xf4, - 0x5a, 0xf5, 0xeb, 0xc7, 0x63, 0xff, 0xff, 0xf4, 0x08, 0x2b, 0xda, 0xc4, 0x60, 0xea, 0x90, 0xed, - 0x2e, 0x52, 0x5f, 0xf8, 0xbf, 0x0a, 0x04, 0x91, 0x5d, 0xe3, 0xe9, 0xd4, 0x1d, 0x7a, 0x3e, 0x3b, - 0x36, 0x19, 0x7a, 0x29, 0x9c, 0x37, 0xe1, 0x2e, 0x69, 0x91, 0x03, 0xde, 0x6c, 0x38, 0x7f, 0xf2, - 0x02, 0xa3, 0x83, 0x5d, 0xeb, 0xe6, 0x20, 0x80, 0x07, 0x5a, 0x7a, 0x88, 0xd9, 0xc8, 0xbc, 0x24, - 0xde, 0x08, 0x45, 0xa6, 0x84, 0xf3, 0x52, 0x67, 0xde, 0x24, 0xfe, 0x1d, 0x66, 0xb2, 0x00, 0x88, - 0x48, 0x0b, 0x77, 0xc7, 0x18, 0xdf, 0x6d, 0xbf, 0xc6, 0xa2, 0xa2, 0x23, 0x29, 0x74, 0x0b, 0x08, - 0xd6, 0xd0, 0x3a, 0x81, 0x52, 0xfb, 0x69, 0xf3, 0xf8, 0xc7, 0x55, 0xc8, 0x0c, 0x2d, 0x5a, 0x68, - 0x97, 0xb4, 0x1f, 0xe6, 0x69, 0xe9, 0xb7, 0xb7, 0xfc, 0x35, 0x5a, 0x81, 0x60, 0xaa, 0x22, 0x48, - 0x57, 0xd3, 0x4f, 0x6d, 0xb3, 0xb3, 0x86, 0x99, 0x72, 0xaa, 0x75, 0x37, 0x2a, 0xa7, 0x53, 0x7e, - 0x9f, 0x37, 0xca, 0x25, 0x43, 0x13, 0xc8, 0x18, 0xa1, 0x94, 0x75, 0x6e, 0x39, 0x12, 0x49, 0x0c, - 0x7a, 0xd4, 0x30, 0x4f, 0xf5, 0x71, 0x5f, 0xbf, 0xf2, 0x04, 0x6c, 0x4f, 0x86, 0x3c, 0x03, 0xa4, - 0x19, 0xa4, 0x33, 0x59, 0xf1, 0x53, 0x8f, 0x08, 0x71, 0x36, 0x26, 0xde, 0x6c, 0xa2, 0x8a, 0xba, - 0xbe, 0xf4, 0xf4, 0xd2, 0x09, 0xa2, 0x25, 0xea, 0x4f, 0xf5, 0x69, 0x32, 0xc6, 0xb4, 0xd1, 0x6f, - 0xd3, 0xff, 0xe3, 0xf6, 0xdd, 0x4f, 0xe5, 0xb9, 0x5e, 0x37, 0x89, 0x32, 0x2a, 0x7b, 0xd6, 0xb1, - 0x24, 0x0a, 0x81, 0xf4, 0xdc, 0x64, 0x3c, 0x95, 0x41, 0x13, 0xd2, 0x01, 0x52, 0x10, 0x01, 0x8f, - 0x5f, 0x31, 0xff, 0xcf, 0x9f, 0xff, 0xee, 0x54, 0xec, 0xdf, 0x6b, 0x7c, 0x90, 0x95, 0x65, 0xfe, - 0x9d, 0xa8, 0x59, 0xc2, 0x97, 0xf1, 0x88, 0xdb, 0xdf, 0xf6, 0xca, 0x5e, 0xb9, 0x04, 0x14, 0x89, - 0x36, 0x11, 0xef, 0x66, 0xe2, 0xf8, 0xa1, 0x0a, 0xf2, 0x96, 0x45, 0x2f, 0x93, 0xa3, 0xfa, 0xf1, - 0x78, 0x5c, 0xaa, 0x20, 0x43, 0x01, 0x9c, 0x11, 0x53, 0xaf, 0x7f, 0x2f, 0xed, 0x0a, 0xd4, 0x0c, - 0x5a, 0xe1, 0x95, 0xc7, 0xdc, 0xe1, 0xdd, 0x2b, 0xae, 0x32, 0x77, 0xeb, 0x45, 0x3d, 0xf2, 0x1e, - 0x45, 0xf6, 0x50, 0xba, 0x0f, 0x78, 0xba, 0xae, 0xbd, 0x12, 0xe7, 0x47, 0x8e, 0xd8, 0xff, 0xf0, - 0xe8, 0x91, 0x87, 0xc4, 0x71, 0x1d, 0x04, 0x63, 0xb5, 0xad, 0xad, 0xae, 0x30, 0x80, 0x60, 0x18, - 0x06, 0x88, 0xd1, 0x8b, 0xce, 0xa1, 0xb9, 0xfe, 0xdb, 0xff, 0xc3, 0xe8, 0x10, 0x57, 0xf1, 0xff, - 0xfa, 0x0f, 0x1d, 0x7f, 0xf1, 0xff, 0xa1, 0x06, 0x5e, 0xbd, 0x7f, 0x5a, 0xda, 0x87, 0x7d, 0x00, - 0xc4, 0x07, 0x8f, 0xd0, 0x26, 0xaf, 0x5e, 0x25, 0x14, 0x61, 0xd0, 0x3b, 0x4a, 0xa6, 0xf8, 0xe2, - 0x3f, 0xfa, 0x0f, 0x0f, 0x17, 0xff, 0xf8, 0xe2, 0x3a, 0x04, 0x03, 0x17, 0xfc, 0x3c, 0x70, 0x00, - 0xce, 0x2b, 0x7b, 0xf7, 0xe3, 0xb1, 0xb4, 0x25, 0x43, 0x80, 0xca, 0x88, 0xf8, 0x92, 0x42, 0x57, - 0xac, 0x3b, 0x88, 0x92, 0x14, 0x43, 0x68, 0xec, 0xc4, 0x87, 0x59, 0x52, 0xff, 0x88, 0x0f, 0x95, - 0x6b, 0xf5, 0xaa, 0xd5, 0x57, 0xe2, 0x46, 0xbd, 0x34, 0xff, 0xe2, 0x23, 0x0f, 0x02, 0x18, 0xce, - 0xbb, 0xd7, 0xad, 0x2a, 0x09, 0xa8, 0x28, 0x9c, 0xef, 0xdb, 0x6d, 0xb6, 0xff, 0xd9, 0xbb, 0xbc, - 0x78, 0xf1, 0x85, 0x05, 0xaa, 0xb5, 0x17, 0xe8, 0xd5, 0x71, 0xa4, 0x3e, 0x21, 0x15, 0x2a, 0xfb, - 0xef, 0xf5, 0x54, 0x5c, 0xbd, 0xbb, 0x7c, 0x54, 0x42, 0x21, 0x3a, 0x3f, 0x82, 0x2b, 0xf4, 0x65, - 0xf1, 0x01, 0x10, 0xf8, 0x88, 0xd0, 0x25, 0xaf, 0x46, 0xf1, 0xe3, 0xc4, 0x03, 0x1c, 0x80, 0x96, - 0xbe, 0x88, 0xcb, 0xf1, 0x05, 0x11, 0xc3, 0xa0, 0x59, 0x2f, 0x36, 0xe0, 0x29, 0x28, 0x5f, 0xb7, - 0x6f, 0xfe, 0x22, 0x11, 0x8e, 0x0a, 0x8d, 0x3a, 0x5e, 0x9a, 0x65, 0xed, 0xb6, 0xdb, 0x62, 0x65, - 0x65, 0x90, 0x37, 0xce, 0xa1, 0x5b, 0x51, 0xd9, 0x11, 0x54, 0xd4, 0x6a, 0xd7, 0xfd, 0xc7, 0xc6, - 0x81, 0x49, 0x57, 0xaf, 0x3a, 0xad, 0x43, 0x1e, 0x6a, 0x1f, 0x4f, 0xf7, 0xff, 0x1e, 0x3d, 0x02, - 0x7a, 0xfd, 0x6d, 0x40, 0x48, 0xfd, 0x3f, 0x02, 0x68, 0x80, 0x04, 0x9f, 0x77, 0xd9, 0x6f, 0x85, - 0x7c, 0xdf, 0xff, 0xda, 0x52, 0x08, 0x93, 0x4a, 0x02, 0x21, 0xb8, 0xc5, 0x2a, 0x5a, 0xf3, 0x71, - 0x36, 0x33, 0xf8, 0x9c, 0xdf, 0x2d, 0xba, 0xb8, 0xd8, 0x8a, 0x5a, 0xd6, 0x78, 0x5f, 0xf4, 0xd3, - 0x04, 0xf2, 0x22, 0x53, 0x77, 0x5e, 0x63, 0x98, 0xad, 0xd5, 0xe6, 0x62, 0xdb, 0x62, 0x3e, 0x30, - 0x2f, 0xda, 0x0a, 0xaf, 0x5f, 0x5d, 0x7f, 0x5a, 0xfe, 0x44, 0xcd, 0x28, 0x59, 0xa8, 0x20, 0x3b, - 0x9a, 0x3d, 0xb1, 0x3c, 0x36, 0x08, 0xd2, 0x73, 0x6b, 0x13, 0x48, 0x18, 0x8e, 0x2e, 0xd5, 0x7f, - 0xb3, 0x73, 0xfb, 0x78, 0x5c, 0xc6, 0xcb, 0x8c, 0xb9, 0xbd, 0xcc, 0xa7, 0xab, 0x91, 0x7f, 0x7d, - 0x8c, 0x2d, 0x62, 0xf5, 0xaa, 0x86, 0xcf, 0x28, 0x50, 0x01, 0x38, 0x36, 0xc4, 0x8b, 0xe5, 0xf8, - 0xe5, 0x32, 0xac, 0x10, 0x00, 0x2e, 0x26, 0xd0, 0x9d, 0x39, 0xe6, 0xec, 0xff, 0xd1, 0x4e, 0x3f, - 0xc6, 0x5f, 0x65, 0x0a, 0xaa, 0xf7, 0x3d, 0x6a, 0xba, 0x23, 0x62, 0x38, 0xc3, 0xe0, 0x1a, 0x0f, - 0x14, 0x5f, 0xb5, 0xb5, 0x0e, 0x3d, 0x00, 0xc4, 0x43, 0xe2, 0x21, 0x41, 0x1a, 0x3e, 0xd7, 0x8f, - 0xff, 0xe8, 0x3c, 0x11, 0x17, 0xff, 0x18, 0x71, 0x80, 0x15, 0x06, 0x42, 0x8b, 0xea, 0xab, 0xdf, - 0x0f, 0x12, 0x27, 0xf4, 0x34, 0x46, 0xbc, 0x4f, 0x2a, 0x2e, 0xb0, 0x38, 0x63, 0xa9, 0xa6, 0x9a, - 0x7f, 0xbd, 0xdf, 0xe1, 0xf2, 0x0e, 0xb5, 0xab, 0x4d, 0x34, 0x6c, 0x7f, 0x3a, 0x37, 0x6d, 0xbf, - 0xfc, 0x43, 0xe3, 0x9c, 0x17, 0xd7, 0xdf, 0x0d, 0xab, 0xa7, 0xf1, 0x31, 0xa1, 0x33, 0xe3, 0xc1, - 0xd4, 0xca, 0x8e, 0xa1, 0x28, 0xb8, 0x0e, 0x64, 0x3e, 0x77, 0x0d, 0xcf, 0xf6, 0x3b, 0x7f, 0x1e, - 0x3e, 0x34, 0x32, 0xbd, 0x7a, 0xf3, 0xa8, 0x6e, 0x7f, 0xb1, 0xd8, 0xff, 0xf1, 0xff, 0xa0, 0x51, - 0x5e, 0x2f, 0xd1, 0xd9, 0xd4, 0x3b, 0xe4, 0x7d, 0xad, 0xaf, 0x1c, 0x47, 0xff, 0x40, 0x88, 0x22, - 0x2f, 0xc7, 0x06, 0xfe, 0x1f, 0x80, 0x72, 0x84, 0x05, 0x7d, 0xfa, 0xf4, 0x7c, 0xec, 0xc0, 0x0f, - 0x52, 0x6d, 0x50, 0x95, 0x6e, 0x42, 0x37, 0x90, 0x7e, 0x82, 0xf6, 0x95, 0x4d, 0x8b, 0xe8, 0xc0, - 0x15, 0xff, 0x86, 0x3c, 0x80, 0xa2, 0x2e, 0x2f, 0x17, 0x17, 0xe5, 0x59, 0xfe, 0xbf, 0x21, 0x82, - 0x1c, 0x51, 0x7a, 0x5d, 0x69, 0x71, 0x16, 0x86, 0xab, 0xf6, 0xdb, 0x80, 0x78, 0xff, 0xe2, 0x2b, - 0xde, 0xf7, 0x7d, 0x2c, 0x27, 0x81, 0x2b, 0x53, 0xf3, 0xfd, 0x34, 0xff, 0xf4, 0xc8, 0xea, 0x09, - 0xd6, 0xe7, 0x99, 0x32, 0x6a, 0x4c, 0x6a, 0x09, 0xde, 0x9e, 0xac, 0xa4, 0x3f, 0x87, 0xc8, 0x58, - 0xae, 0xf7, 0xef, 0xd1, 0xf8, 0xc7, 0x4b, 0x7f, 0xb0, 0x4b, 0x7e, 0x93, 0x1a, 0x61, 0x93, 0x7e, - 0xc1, 0x1d, 0xf8, 0xec, 0x73, 0x80, 0x7f, 0x0f, 0xd0, 0x20, 0x3b, 0xfc, 0x4b, 0xff, 0x0d, 0x18, - 0xca, 0xba, 0xaa, 0xd7, 0xd1, 0xc7, 0xff, 0x14, 0x3f, 0x90, 0x16, 0x9b, 0xb8, 0xa8, 0x01, 0x9d, - 0xff, 0xe3, 0xf9, 0x7e, 0x17, 0x2e, 0xb5, 0x5d, 0x22, 0x3a, 0x93, 0x0e, 0x9c, 0x43, 0xe0, 0x18, - 0x06, 0x83, 0xc5, 0x5e, 0x75, 0x0e, 0xf8, 0x76, 0xb5, 0xc7, 0xfe, 0x3f, 0x40, 0x82, 0xbd, 0xaf, - 0xe3, 0xff, 0x1a, 0x04, 0xf5, 0xeb, 0xff, 0x0b, 0xe4, 0x4f, 0xba, 0x08, 0x0a, 0xda, 0x13, 0xc8, - 0xf2, 0xcf, 0xc2, 0x95, 0x92, 0x2b, 0x81, 0xe8, 0xc0, 0x3c, 0xd5, 0x35, 0x19, 0xff, 0x47, 0x68, - 0xa1, 0xc2, 0xfb, 0x36, 0x20, 0xd8, 0x6d, 0x8a, 0xaa, 0xf4, 0xd2, 0x97, 0x29, 0x8f, 0x51, 0xe8, - 0xcf, 0x63, 0xff, 0xb0, 0x00, 0xa5, 0x55, 0x2c, 0xe7, 0x73, 0x4b, 0x6d, 0xb2, 0xe5, 0xdc, 0xdf, - 0x71, 0xe5, 0xaa, 0x06, 0x09, 0x82, 0xe1, 0xe5, 0xe4, 0x58, 0xb3, 0x4c, 0xf8, 0xb9, 0xdd, 0xdf, - 0x5e, 0x03, 0x19, 0xdd, 0xe9, 0x5f, 0x73, 0xdb, 0x1b, 0x8c, 0xd6, 0x6b, 0x70, 0xb8, 0x73, 0x87, - 0x38, 0x44, 0x74, 0x9a, 0x7b, 0x7f, 0xdf, 0x00, 0x2d, 0xf2, 0xaf, 0x03, 0xed, 0x4a, 0xfc, 0xb7, - 0x5d, 0xb9, 0x67, 0x0e, 0x56, 0x52, 0x6b, 0xe2, 0x1f, 0x5f, 0x6d, 0xbf, 0x20, 0x7f, 0xbd, 0xda, - 0x1c, 0x97, 0x3e, 0x47, 0x2e, 0xc5, 0x29, 0xd4, 0x1f, 0xed, 0x36, 0xe7, 0x8e, 0x99, 0xdc, 0x57, - 0xff, 0xe4, 0x58, 0xb0, 0x01, 0x35, 0xa3, 0xfc, 0x43, 0x8f, 0xac, 0xdc, 0xbe, 0xbc, 0xd8, 0xa4, - 0xf5, 0xc1, 0x30, 0x65, 0x32, 0x92, 0x6d, 0xad, 0xff, 0xf9, 0x44, 0x70, 0x1e, 0x37, 0x6e, 0x1b, - 0xc7, 0xfd, 0xb9, 0xf5, 0xd1, 0xde, 0xb1, 0xff, 0xf9, 0x43, 0x2b, 0x17, 0x8b, 0xf5, 0xe0, 0xac, - 0x0a, 0x7b, 0xc7, 0xf8, 0xc3, 0xa0, 0xb9, 0x57, 0xaf, 0x4c, 0xa3, 0x0f, 0x88, 0xe2, 0x3a, 0x27, - 0xc7, 0x88, 0x60, 0x1a, 0x04, 0x86, 0x5e, 0xdf, 0x8f, 0x10, 0xc0, 0x34, 0x43, 0xa8, 0x08, 0xf7, - 0x6f, 0xc2, 0xa7, 0xff, 0xc6, 0x3a, 0x08, 0x08, 0xd6, 0xb1, 0x79, 0xb2, 0x6c, 0x81, 0xf3, 0x74, - 0xd3, 0xf3, 0xa8, 0xc3, 0x3e, 0x65, 0xf2, 0x22, 0x0f, 0x22, 0x4a, 0x05, 0x99, 0x36, 0x6e, 0x22, - 0x4c, 0xaa, 0xb5, 0xff, 0xfc, 0x7f, 0x82, 0x41, 0xeb, 0xc3, 0x4c, 0xc4, 0xc4, 0x30, 0x62, 0x4f, - 0xf6, 0xe3, 0x8d, 0x7f, 0x0d, 0x05, 0xaf, 0xd7, 0x8c, 0x29, 0x1b, 0x30, 0x48, 0xad, 0x39, 0x19, - 0xfa, 0x69, 0xfd, 0xc7, 0xf7, 0xf8, 0x61, 0x12, 0x81, 0xdb, 0x2a, 0x3a, 0x2c, 0x45, 0x25, 0xa8, - 0x6f, 0xd8, 0xfe, 0x3f, 0xd0, 0x22, 0xaf, 0x1d, 0xbc, 0x7f, 0xfe, 0x83, 0xc5, 0x5f, 0xff, 0xf0, - 0xe8, 0x91, 0x87, 0xc4, 0x71, 0x1d, 0x11, 0xae, 0x23, 0x88, 0xf1, 0xfd, 0x02, 0x02, 0x2f, 0xe5, - 0xff, 0xc7, 0x44, 0x55, 0xf5, 0x51, 0x7e, 0xbe, 0x8e, 0x3f, 0x8f, 0xc7, 0x8d, 0xaa, 0xaa, 0xaa, - 0xf5, 0xeb, 0xd1, 0xc7, 0x89, 0x40, 0x31, 0xff, 0x3d, 0x57, 0xde, 0xef, 0xa7, 0xd5, 0xc2, 0x01, - 0x80, 0x7e, 0x82, 0xc2, 0x5f, 0xbf, 0x44, 0xa5, 0x10, 0xc7, 0xc7, 0xf2, 0x02, 0x4a, 0xf1, 0xd9, - 0x17, 0xff, 0xe1, 0xa0, 0x53, 0x15, 0xf7, 0xed, 0x88, 0xfe, 0x21, 0x80, 0x68, 0x11, 0x91, 0x7a, - 0x64, 0x5f, 0x88, 0x7f, 0xe1, 0x90, 0x14, 0x95, 0xfb, 0xf4, 0x8b, 0xff, 0xfe, 0x81, 0x58, 0xd1, - 0x5f, 0x47, 0x0f, 0xd3, 0x4f, 0x4b, 0xfc, 0xb8, 0x65, 0xd0, 0x28, 0x0a, 0x3b, 0xef, 0xf9, 0xb7, - 0x1e, 0x1c, 0x31, 0x1d, 0x82, 0x8b, 0xf7, 0xe3, 0x83, 0xbf, 0x8e, 0x23, 0xc7, 0x61, 0x8a, 0xf5, - 0xfb, 0xf1, 0xe3, 0xc7, 0x8e, 0xd5, 0x7a, 0xf5, 0xeb, 0xc7, 0x3f, 0xf8, 0xe2, 0x18, 0x9a, 0xc8, - 0x11, 0x8c, 0x7b, 0xff, 0x77, 0x08, 0x86, 0x81, 0x29, 0x57, 0xf4, 0xeb, 0x47, 0xff, 0xe3, 0x0f, - 0xa2, 0x7f, 0x1f, 0xfa, 0x04, 0xd5, 0xeb, 0xda, 0xff, 0xff, 0xe8, 0x26, 0x55, 0xeb, 0xff, 0xf8, - 0xfd, 0x02, 0x42, 0x2f, 0xe8, 0x5d, 0x18, 0x02, 0x46, 0xee, 0x0f, 0xf8, 0xd9, 0xff, 0xf3, 0xd2, - 0x24, 0xd0, 0x04, 0x5a, 0x7f, 0xd9, 0x8b, 0xe5, 0x21, 0xc9, 0xc9, 0x15, 0xd3, 0x8c, 0x57, 0x79, - 0xf5, 0xdb, 0x97, 0x77, 0x18, 0x88, 0xfe, 0xf7, 0xfb, 0xc7, 0x84, 0x08, 0x88, 0x60, 0x29, 0xf7, - 0x15, 0xdd, 0xed, 0xbb, 0xba, 0xd7, 0xfc, 0x20, 0x94, 0x31, 0xdd, 0x2f, 0x4e, 0xe8, 0x4d, 0x2a, - 0xa7, 0x26, 0x46, 0x92, 0x69, 0x54, 0x08, 0xbc, 0x4b, 0x77, 0xe9, 0x59, 0xa5, 0xbc, 0x28, 0x0a, - 0x96, 0xee, 0xfb, 0x71, 0x5b, 0xf1, 0x74, 0xb9, 0x78, 0x7e, 0x24, 0x34, 0x52, 0xeb, 0x7b, 0x5b, - 0xf2, 0x22, 0xe9, 0x68, 0xa2, 0x00, 0x63, 0x68, 0xa5, 0xa9, 0x3c, 0xb9, 0x0b, 0x57, 0x59, 0x30, - 0xbe, 0xf7, 0xd5, 0xd5, 0xce, 0xd5, 0x0f, 0x81, 0x18, 0xc9, 0xb2, 0x17, 0x2a, 0x39, 0x0f, 0xb4, - 0x19, 0x9b, 0x6e, 0xff, 0x43, 0xdd, 0xe4, 0x31, 0x94, 0x7e, 0xd0, 0x57, 0xaa, 0x8b, 0xf1, 0x7e, - 0xbd, 0xed, 0x6d, 0x6d, 0x6d, 0x67, 0x45, 0x8e, 0xd8, 0xfc, 0xbc, 0x0b, 0xa1, 0x02, 0x15, 0x6b, - 0x5d, 0x78, 0x72, 0x3b, 0xcb, 0xfe, 0x9c, 0x83, 0xc4, 0x8a, 0x6b, 0xaf, 0x8a, 0xf0, 0xc4, 0xc7, - 0x4f, 0xdf, 0xcf, 0xdf, 0xff, 0x87, 0xe1, 0xf9, 0x0b, 0x15, 0xf1, 0x5f, 0x71, 0x5e, 0x34, 0x14, - 0x39, 0xfe, 0xdc, 0x72, 0x1e, 0x88, 0xbd, 0x7a, 0xf5, 0xe2, 0xf4, 0x55, 0xff, 0xf1, 0x1d, 0x84, - 0x44, 0xa3, 0xb8, 0xf8, 0xe2, 0x38, 0x8f, 0x08, 0xc4, 0xb8, 0x89, 0x38, 0x86, 0x01, 0x88, 0xfe, - 0x40, 0x8e, 0x2f, 0xc0, 0x78, 0x16, 0x05, 0x41, 0x91, 0x0e, 0xfb, 0xbe, 0x74, 0x34, 0xc4, 0x10, - 0xa1, 0x8f, 0x0c, 0x15, 0x78, 0x7c, 0x43, 0x00, 0xe0, 0x90, 0x8b, 0xcc, 0x8b, 0x39, 0x0a, 0x1c, - 0x78, 0x47, 0x45, 0x47, 0x96, 0x3b, 0x5a, 0xca, 0xa5, 0x2a, 0x55, 0xb5, 0x99, 0x0d, 0x8e, 0x0d, - 0xfe, 0x3f, 0xf9, 0x46, 0x2f, 0x5e, 0xbd, 0x1c, 0x1b, 0x5f, 0x0f, 0xff, 0xb0, 0x44, 0x34, 0x57, - 0xc7, 0x06, 0x38, 0x62, 0x50, 0xc8, 0xed, 0x3a, 0xd1, 0xd9, 0xd6, 0x8f, 0xb5, 0xff, 0xff, 0xd1, - 0x3e, 0x23, 0xc3, 0x00, 0xd0, 0x20, 0xbf, 0xff, 0xc3, 0x00, 0xd0, 0x54, 0x8f, 0xdf, 0xe1, 0xf0, - 0x00, 0xe1, 0xa5, 0x7f, 0x8a, 0xef, 0xdf, 0xa2, 0x29, 0x61, 0x88, 0xe0, 0x1f, 0xa0, 0x44, 0x51, - 0x5f, 0x44, 0xa5, 0x11, 0xc0, 0x31, 0x1c, 0x47, 0x20, 0x46, 0xcc, 0x03, 0x91, 0x44, 0x0b, 0x8d, - 0x88, 0x10, 0xbd, 0x57, 0x5f, 0x7e, 0x3c, 0x71, 0x1f, 0xd8, 0x58, 0xab, 0xd7, 0xa2, 0x5e, 0x23, - 0xc7, 0x8e, 0x21, 0xc3, 0x35, 0xeb, 0xc0, 0xca, 0x60, 0xcf, 0xc8, 0xbe, 0x26, 0x0a, 0xe1, 0xb0, - 0x89, 0x8a, 0x91, 0x33, 0x94, 0x8e, 0x53, 0xc8, 0x08, 0xf7, 0x3d, 0x52, 0xa4, 0x4a, 0x80, 0x76, - 0xfa, 0x81, 0x26, 0x9b, 0xb8, 0x47, 0x80, 0x0c, 0x00, 0x00, 0x80, 0x87, 0xbf, 0xfe, 0x22, 0x18, - 0xf0, 0xc1, 0xd7, 0xaf, 0x11, 0xd2, 0x7c, 0x37, 0xe1, 0xdb, 0xfb, 0x58, 0x7c, 0x32, 0x07, 0x02, - 0x17, 0x8b, 0x74, 0xf2, 0xcd, 0xeb, 0xf9, 0x5e, 0xf7, 0x63, 0x6e, 0xda, 0x33, 0xe2, 0xb1, 0x0e, - 0x08, 0x1c, 0x6e, 0x07, 0xc6, 0xb1, 0x5a, 0x36, 0x0b, 0x07, 0xf1, 0xc3, 0x8f, 0xd7, 0xf2, 0x7a, - 0x99, 0x4c, 0x4e, 0x7a, 0x09, 0x03, 0x8c, 0x32, 0x1c, 0xbc, 0xdc, 0xda, 0xcd, 0xe7, 0x13, 0xc1, - 0xaa, 0x13, 0x95, 0x8b, 0xb2, 0x1c, 0x9a, 0x6a, 0x70, 0xd8, 0x8a, 0xdf, 0x4c, 0xf9, 0x0a, 0x2b, - 0xe9, 0xa7, 0x1b, 0xa7, 0xb3, 0xbb, 0xfe, 0x05, 0x7e, 0x45, 0xb9, 0x6f, 0xa5, 0x2f, 0x4b, 0x10, - 0xf7, 0x7b, 0x8a, 0x3b, 0x1a, 0xf1, 0xd4, 0xab, 0x5a, 0x0c, 0xd2, 0xf9, 0xe0, 0x5d, 0xed, 0x98, - 0xaf, 0xda, 0x2f, 0xf1, 0x07, 0xa6, 0x6f, 0xe5, 0xcf, 0x17, 0xae, 0x8b, 0x44, 0xf8, 0x22, 0x22, - 0x46, 0x0c, 0xc7, 0x8c, 0x4f, 0x77, 0x76, 0x31, 0x83, 0x72, 0xff, 0xd3, 0xc7, 0x61, 0x91, 0x3d, - 0x75, 0xfe, 0x9d, 0x0f, 0x0c, 0x78, 0x76, 0xb5, 0x89, 0x50, 0x33, 0xaf, 0x09, 0x68, 0x76, 0x35, - 0x08, 0x03, 0xba, 0x51, 0x26, 0x94, 0xd3, 0x4d, 0x3f, 0x39, 0x26, 0xac, 0x59, 0x37, 0xee, 0xff, - 0xc1, 0x59, 0x7a, 0x82, 0x91, 0x27, 0x54, 0xfe, 0x25, 0x43, 0xd5, 0xb3, 0xa3, 0x71, 0xe1, 0xc3, - 0x00, 0xd9, 0x4a, 0xfd, 0xf8, 0xaf, 0x8f, 0xdf, 0x88, 0x63, 0xc4, 0x36, 0x11, 0x9e, 0x3b, 0xff, - 0x88, 0x60, 0x1a, 0x04, 0x37, 0xf8, 0x7f, 0x0c, 0x03, 0x84, 0xca, 0xfd, 0xfc, 0x47, 0x86, 0x01, - 0xfa, 0x0c, 0x08, 0x7f, 0x7b, 0xa6, 0xc0, 0x3f, 0x8f, 0xec, 0x2e, 0x57, 0x15, 0xef, 0xd1, 0x2b, - 0x1f, 0xe0, 0x1f, 0xa2, 0x7f, 0xc0, 0x30, 0x0d, 0x02, 0xa8, 0x84, 0x92, 0x9a, 0x69, 0xa7, 0xe2, - 0x08, 0x48, 0xca, 0x3a, 0x3f, 0x16, 0x87, 0x9c, 0x87, 0x99, 0x44, 0xe4, 0x80, 0x8f, 0x7c, 0xfc, - 0x63, 0xc3, 0xc0, 0x43, 0x18, 0xc8, 0x0a, 0x04, 0x6b, 0x5a, 0xc4, 0x9a, 0x78, 0x7c, 0x00, 0x3e, - 0x82, 0x31, 0x50, 0xff, 0xe3, 0x88, 0xf0, 0x48, 0x2d, 0x78, 0x1c, 0x69, 0x34, 0x6c, 0x70, 0x00, - 0x23, 0x1c, 0x3f, 0xfc, 0x43, 0xe8, 0x10, 0x0c, 0x7f, 0xff, 0x86, 0x01, 0xb0, 0x41, 0x7f, 0xf8, - 0x60, 0x1f, 0xc1, 0x65, 0xf8, 0xe9, 0x5b, 0x6d, 0xb6, 0xff, 0xff, 0x0c, 0x00, 0xb0, 0xc9, 0x9f, - 0xbb, 0xf1, 0x1f, 0xff, 0x80, 0x60, 0x01, 0x20, 0x29, 0xbf, 0x7e, 0x8d, 0xa3, 0x92, 0x7d, 0x63, - 0x8e, 0x22, 0x3c, 0x3e, 0xc3, 0xd7, 0xf8, 0x60, 0x1c, 0x30, 0x0e, 0x17, 0x38, 0xaf, 0xbf, 0x47, - 0xf8, 0x04, 0x0b, 0xfe, 0x91, 0xb7, 0xbb, 0xef, 0xdf, 0xb6, 0x00, 0x10, 0x0f, 0xfc, 0x81, 0x63, - 0xbf, 0x7e, 0x8f, 0xc0, 0x3f, 0xff, 0x84, 0x48, 0x95, 0xe3, 0x88, 0x71, 0xe1, 0xa5, 0x5e, 0xbd, - 0x78, 0xbf, 0x0d, 0x61, 0x47, 0x1f, 0xfe, 0x3c, 0x7a, 0x8b, 0xf5, 0xeb, 0xd7, 0x80, 0x11, 0xc7, - 0xf1, 0x0c, 0x43, 0x10, 0x89, 0x04, 0x11, 0x7a, 0xf5, 0xaa, 0x95, 0x02, 0x5c, 0x42, 0x22, 0x19, - 0x7f, 0x4a, 0xb5, 0x55, 0x55, 0x51, 0x7e, 0xbc, 0x49, 0xa1, 0xdf, 0xc6, 0x3c, 0x3e, 0x83, 0x75, - 0xad, 0xf9, 0x50, 0xd5, 0x0b, 0x62, 0xdf, 0xe7, 0x44, 0x00, 0xec, 0xf7, 0x4e, 0x12, 0x92, 0x2d, - 0x43, 0x4c, 0x54, 0xcd, 0x6d, 0xb4, 0xd3, 0xfc, 0x71, 0x96, 0x45, 0x71, 0xd0, 0x5e, 0x2f, 0xef, - 0x88, 0x8d, 0x0d, 0xa8, 0xf1, 0x8f, 0xc6, 0x38, 0x23, 0x2b, 0xf0, 0x38, 0xd9, 0xb0, 0x00, 0x80, - 0x60, 0x18, 0x88, 0x58, 0x44, 0xa3, 0x01, 0xad, 0x43, 0x7e, 0xff, 0x8c, 0x3f, 0x0e, 0x04, 0x2c, - 0x7d, 0x0f, 0xed, 0x6b, 0xff, 0x6b, 0x3d, 0xa3, 0x22, 0x77, 0x36, 0x73, 0x8e, 0xd6, 0x47, 0x7f, - 0xb6, 0x26, 0xac, 0x1b, 0xb1, 0x57, 0x58, 0x57, 0x36, 0x42, 0x31, 0x40, 0xec, 0xb0, 0xdb, 0x3d, - 0xdb, 0x48, 0x7b, 0xfc, 0x73, 0xa4, 0x20, 0xfa, 0x30, 0x2a, 0x05, 0x84, 0x3e, 0x1a, 0x65, 0xad, - 0xac, 0x9e, 0x70, 0xe5, 0x97, 0x31, 0x5b, 0x50, 0x9d, 0x3d, 0x5c, 0x6d, 0x60, 0x86, 0x63, 0x6f, - 0xf7, 0xcd, 0xce, 0x65, 0xa9, 0xfb, 0xed, 0xe3, 0xd0, 0x03, 0xb3, 0x33, 0x5b, 0xef, 0x73, 0x33, - 0xbb, 0xcb, 0xd5, 0xa7, 0x64, 0x4e, 0xdf, 0xe4, 0xf1, 0x8e, 0xdb, 0xbc, 0xdd, 0xab, 0xdb, 0x7e, - 0xf4, 0xb1, 0x8c, 0xa9, 0x7b, 0x7b, 0x70, 0x11, 0x7e, 0x47, 0x81, 0x60, 0x38, 0xe7, 0x26, 0x27, - 0x01, 0xc5, 0xd9, 0x58, 0x41, 0x69, 0x17, 0x12, 0x35, 0x55, 0x46, 0x20, 0xa7, 0xed, 0xe5, 0xcc, - 0x2e, 0x59, 0x5c, 0xcb, 0xb6, 0xea, 0xb1, 0x43, 0xc7, 0x63, 0x91, 0xb5, 0x52, 0x34, 0x03, 0x5d, - 0x30, 0x1d, 0xa2, 0xb6, 0x0d, 0xb9, 0xe3, 0xdf, 0xb9, 0xbe, 0xee, 0xdb, 0x4a, 0x90, 0x06, 0x2a, - 0x74, 0x61, 0x4c, 0xaf, 0x52, 0xe2, 0x41, 0x50, 0xde, 0x0d, 0xb4, 0xf0, 0x44, 0xf3, 0x41, 0x4d, - 0x33, 0x88, 0xaf, 0xe6, 0xf5, 0xd7, 0xdc, 0x7f, 0x8e, 0x23, 0xa0, 0xb8, 0x6d, 0x7a, 0xf4, 0xc8, - 0xe8, 0x81, 0xbf, 0x09, 0x69, 0x89, 0x16, 0x39, 0x43, 0xe4, 0x0b, 0x78, 0xb8, 0xbf, 0x18, 0x00, - 0x04, 0x63, 0x5c, 0x38, 0x7f, 0x87, 0x04, 0xa5, 0x7e, 0x3b, 0x7f, 0xf8, 0x02, 0x87, 0x04, 0xc6, - 0x5f, 0xbc, 0x4e, 0x01, 0x3e, 0xe2, 0x3a, 0xb8, 0x8d, 0x38, 0xf6, 0x22, 0xe1, 0x2e, 0x8b, 0x7b, - 0xfb, 0xbf, 0x4c, 0xb0, 0xc0, 0x3f, 0x8e, 0x40, 0x52, 0x77, 0xeb, 0xd2, 0x31, 0x2c, 0xc3, 0x95, - 0x26, 0xc0, 0x30, 0x0c, 0x3c, 0x34, 0x0a, 0x4f, 0xbd, 0xfa, 0x3f, 0x86, 0x01, 0xff, 0xa0, 0xf0, - 0xd1, 0x5f, 0x80, 0x65, 0xe1, 0xf9, 0x0a, 0x10, 0x7e, 0xf5, 0xbf, 0x46, 0x98, 0xc4, 0x11, 0xaf, - 0xa6, 0x9e, 0xde, 0x96, 0x75, 0x8e, 0x0d, 0x6b, 0xff, 0x8f, 0x11, 0x1a, 0x04, 0x61, 0x05, 0xe2, - 0x52, 0x71, 0xf1, 0x8c, 0x63, 0x1a, 0x0b, 0x57, 0xaf, 0x47, 0x1f, 0xff, 0x0f, 0x02, 0x08, 0x22, - 0xde, 0xff, 0x77, 0x0d, 0xdf, 0x38, 0x62, 0x3c, 0x30, 0x0d, 0x05, 0xca, 0xfc, 0x57, 0xe8, 0xe6, - 0x72, 0x61, 0xe7, 0x71, 0xff, 0xf0, 0xcf, 0x7e, 0x2b, 0xef, 0xc7, 0x62, 0x29, 0x61, 0x80, 0x60, - 0x18, 0x06, 0x82, 0xd7, 0xef, 0xc7, 0x63, 0xcc, 0x03, 0x00, 0xfe, 0x1a, 0x05, 0x25, 0x7e, 0xfd, - 0x1f, 0x12, 0xa1, 0xa7, 0x87, 0xd8, 0x00, 0x7f, 0xc4, 0x39, 0xaf, 0xdf, 0xaf, 0x1d, 0xa7, 0x98, - 0x04, 0xcd, 0xd3, 0xf1, 0x2d, 0xb8, 0x23, 0xdc, 0xf3, 0x08, 0x21, 0x40, 0x4c, 0xdf, 0xbf, 0x13, - 0x7f, 0x0e, 0x1f, 0xa0, 0x4d, 0x7e, 0xfd, 0x61, 0xbf, 0x1f, 0xa6, 0x71, 0x22, 0xff, 0xc0, 0xb0, - 0xc8, 0x8c, 0x5e, 0x2e, 0xb5, 0x34, 0x10, 0xc4, 0x92, 0x02, 0x9a, 0xaa, 0x71, 0xc6, 0x72, 0x40, - 0x3f, 0xb5, 0x41, 0x50, 0xee, 0xe4, 0x51, 0x86, 0x20, 0x10, 0xe7, 0xd6, 0xbb, 0xdf, 0x8c, 0x06, - 0x9d, 0x1c, 0x04, 0xad, 0xfb, 0xf0, 0xe8, 0xcb, 0x0c, 0x03, 0xf8, 0x68, 0x13, 0x94, 0x57, 0xdf, - 0xb5, 0xe3, 0xe1, 0xf8, 0x68, 0x29, 0x7e, 0xfe, 0xdc, 0xb9, 0x09, 0x7d, 0x17, 0x10, 0xf4, 0xf7, - 0xef, 0xd1, 0xc0, 0x0c, 0xcc, 0xc7, 0xd2, 0xc9, 0xe3, 0x00, 0xff, 0xe1, 0x7a, 0xf5, 0xe6, 0x62, - 0xb9, 0xc8, 0x78, 0x8e, 0x98, 0x88, 0x71, 0x88, 0x87, 0x63, 0x87, 0x02, 0x92, 0x7d, 0x90, 0xde, - 0x0b, 0x1a, 0x40, 0x22, 0x6f, 0x5b, 0xdf, 0xc5, 0x8e, 0x46, 0x2a, 0xe8, 0x0a, 0x6a, 0x65, 0xcd, - 0xc7, 0x95, 0xfc, 0x05, 0x1e, 0x98, 0x04, 0x40, 0x2e, 0xf8, 0x1d, 0xd2, 0x5a, 0xa1, 0xff, 0xae, - 0xa8, 0xd6, 0x47, 0x54, 0x94, 0x56, 0xe0, 0xad, 0x82, 0xcc, 0xf0, 0x4d, 0x7d, 0x4c, 0x74, 0x65, - 0xf6, 0xd5, 0xf8, 0xab, 0xa8, 0x0e, 0xa0, 0x2e, 0xcd, 0xf5, 0x89, 0xdc, 0x80, 0x5b, 0x74, 0x76, - 0x32, 0xc2, 0x0d, 0x5a, 0x6f, 0xc3, 0xed, 0x57, 0x27, 0xdd, 0x9d, 0xb3, 0xc3, 0xbd, 0x3e, 0x65, - 0x6a, 0xca, 0xaf, 0x54, 0x1a, 0xe8, 0xae, 0x08, 0xb1, 0x66, 0xc9, 0xbf, 0x4e, 0xdf, 0xc5, 0x1f, - 0xea, 0xff, 0x60, 0x6e, 0xd2, 0xa5, 0xab, 0x7e, 0xe2, 0x1f, 0xde, 0xcb, 0x7b, 0x77, 0xf6, 0x7e, - 0xce, 0xf4, 0x46, 0x90, 0x18, 0x35, 0x88, 0x58, 0x95, 0x08, 0x6d, 0xf3, 0x30, 0x2a, 0xbb, 0x9e, - 0x34, 0x0d, 0xe7, 0x7c, 0xa2, 0x05, 0x4b, 0x6c, 0x6d, 0x4f, 0x1a, 0x9b, 0x6d, 0xdd, 0x56, 0xee, - 0xb8, 0xc4, 0xb3, 0x64, 0xa0, 0x62, 0x62, 0x34, 0xec, 0x27, 0x30, 0xa4, 0x9b, 0x62, 0xb3, 0xea, - 0x36, 0xde, 0x62, 0xfd, 0xd3, 0xe1, 0xba, 0xb3, 0xbf, 0x04, 0xdf, 0xb6, 0x9b, 0xe9, 0x84, 0x70, - 0x93, 0x65, 0xa1, 0x28, 0x8f, 0xa9, 0xbb, 0xb7, 0xfc, 0xf0, 0x94, 0x8f, 0x7d, 0x52, 0x76, 0x60, - 0xa5, 0x34, 0x4c, 0x0d, 0xa2, 0xdd, 0xbb, 0xdd, 0x3b, 0xf6, 0x3e, 0xf9, 0xa7, 0xcd, 0x3f, 0x90, - 0x50, 0xce, 0xde, 0xab, 0x6f, 0xff, 0xa6, 0x7e, 0xc1, 0x01, 0x4a, 0xc5, 0xdf, 0x1f, 0xfe, 0x3b, - 0x30, 0x45, 0x7a, 0xf5, 0xe2, 0x13, 0xff, 0xc3, 0xf8, 0x70, 0xc5, 0xfb, 0xf1, 0x13, 0xb8, 0x60, - 0x1c, 0x38, 0x64, 0x45, 0x15, 0xf7, 0xef, 0xdf, 0xa3, 0x87, 0xf5, 0xd6, 0x1f, 0xa2, 0xdf, 0xef, - 0x7e, 0x54, 0x45, 0xf2, 0x8e, 0x1f, 0xa0, 0x51, 0x15, 0xf7, 0xe8, 0xfe, 0x1f, 0xfc, 0x78, 0x29, - 0xbf, 0x5e, 0x8f, 0x91, 0x43, 0x7e, 0xc7, 0x49, 0x7c, 0x63, 0x20, 0x28, 0xdf, 0x5e, 0x8e, 0xab, - 0x0d, 0xfb, 0x1c, 0x47, 0xff, 0x87, 0x87, 0x8b, 0xf8, 0x87, 0x1e, 0x1f, 0x90, 0x13, 0x04, 0x17, - 0xbf, 0x87, 0xf1, 0x1f, 0xe4, 0x4b, 0x4b, 0xfc, 0x43, 0xff, 0x04, 0x65, 0x7e, 0x3b, 0x7e, 0x3f, - 0xc0, 0x34, 0x42, 0x3f, 0xfe, 0x3f, 0xd0, 0x46, 0x3b, 0x60, 0x01, 0x0f, 0xfe, 0x82, 0x57, 0xef, - 0xe0, 0x18, 0x07, 0x1c, 0x47, 0x82, 0x4a, 0xf1, 0xda, 0x28, 0x83, 0x68, 0x8b, 0xd7, 0xff, 0xc3, - 0xff, 0x94, 0x63, 0xf7, 0xef, 0xc7, 0x6c, 0x03, 0x00, 0xe3, 0x88, 0x68, 0x32, 0x45, 0xeb, 0xc7, - 0xdf, 0xa8, 0x42, 0x58, 0x60, 0xc4, 0x1b, 0x5d, 0x7d, 0x68, 0x21, 0xf1, 0xf8, 0xff, 0x40, 0xa6, - 0x2f, 0x5a, 0xf4, 0x76, 0x52, 0x40, 0x76, 0x50, 0xc4, 0x92, 0x06, 0xf4, 0x8a, 0xbd, 0xf9, 0x0c, - 0x4b, 0xe8, 0x46, 0xab, 0x55, 0x5a, 0xfe, 0x08, 0x7c, 0x45, 0xf5, 0xff, 0x43, 0xa6, 0xc6, 0x8d, - 0x9d, 0xa5, 0xef, 0x47, 0x7e, 0x9a, 0x6d, 0xb7, 0x50, 0xdc, 0x38, 0x8c, 0x39, 0x01, 0x55, 0x7d, - 0x34, 0xdb, 0x6c, 0xa4, 0x82, 0xaa, 0xa6, 0x2a, 0x94, 0x94, 0x08, 0xbe, 0x50, 0xfa, 0x0d, 0x6b, - 0x55, 0xe8, 0x19, 0x87, 0xf6, 0xed, 0xca, 0x38, 0xfc, 0x3d, 0x06, 0x7b, 0xde, 0xf4, 0xc8, 0xe4, - 0x86, 0x5a, 0x6c, 0x9b, 0x86, 0x01, 0xc3, 0x00, 0xd0, 0x6c, 0x5b, 0xf7, 0xf1, 0x12, 0x97, 0xe9, - 0xa6, 0x72, 0x63, 0x0a, 0x8c, 0x03, 0xff, 0x10, 0x19, 0x02, 0x36, 0x27, 0x64, 0x0c, 0xa7, 0xfb, - 0x47, 0xe3, 0xe1, 0x8f, 0xf4, 0x1f, 0x2b, 0xf8, 0xff, 0xff, 0x20, 0x46, 0xc9, 0x99, 0x03, 0x8f, - 0x09, 0x71, 0x17, 0x12, 0x49, 0xc8, 0x41, 0x03, 0x42, 0x51, 0x00, 0x01, 0x90, 0x76, 0x92, 0x4d, - 0xb2, 0x5f, 0xff, 0xff, 0xfe, 0x2a, 0x70, 0x7a, 0xe4, 0xb3, 0x62, 0x24, 0x77, 0xb0, 0x30, 0xc0, - 0x7e, 0xb2, 0xc5, 0xf1, 0x76, 0x70, 0xaa, 0xbd, 0xb2, 0x4a, 0x5c, 0x88, 0x9c, 0x52, 0x13, 0xd6, - 0xff, 0xc8, 0x37, 0x85, 0x8b, 0xb1, 0x12, 0x66, 0x53, 0x3e, 0x33, 0x77, 0xcd, 0xdb, 0xdc, 0x43, - 0x89, 0x00, 0xce, 0x72, 0x43, 0x7b, 0xc9, 0xbf, 0xff, 0xf9, 0xa9, 0x6b, 0x70, 0x93, 0x90, 0x6d, - 0xc9, 0xb6, 0x71, 0xfd, 0xa9, 0xff, 0x4d, 0x37, 0xb5, 0x49, 0x0d, 0x7f, 0xd7, 0x6d, 0xc2, 0xcd, - 0x46, 0x0f, 0x4e, 0xcb, 0x6c, 0xfe, 0xa6, 0xf6, 0xfc, 0xd9, 0x54, 0x49, 0x56, 0x14, 0x82, 0xd2, - 0xd4, 0x63, 0x6c, 0xd9, 0xbd, 0x4c, 0x52, 0xc4, 0x7f, 0xfa, 0xb1, 0x90, 0xbe, 0xfc, 0xbc, 0xb3, - 0x43, 0x12, 0xfa, 0x71, 0x35, 0xa2, 0x5f, 0x65, 0xa6, 0x7c, 0xab, 0xae, 0xde, 0xe3, 0xf9, 0x00, - 0x06, 0x42, 0x9d, 0xd8, 0xd5, 0x5e, 0x7c, 0xd5, 0x7d, 0x8d, 0x63, 0xc6, 0x3f, 0x61, 0x1f, 0x61, - 0x63, 0x04, 0x01, 0xf9, 0x8d, 0x02, 0x32, 0xbf, 0xad, 0x28, 0x47, 0x35, 0xa5, 0x34, 0xcc, 0x39, - 0x13, 0xed, 0x63, 0xca, 0xca, 0xbf, 0xbc, 0x62, 0x19, 0xe7, 0x8a, 0xb0, 0x40, 0x53, 0x52, 0x7f, - 0x80, 0x7f, 0xfe, 0xc9, 0xff, 0x11, 0xc0, 0x32, 0x04, 0x42, 0x7e, 0x4e, 0x4d, 0x2a, 0x3c, 0x87, - 0xc4, 0xc3, 0x00, 0xc4, 0x71, 0x87, 0xd1, 0x0e, 0x42, 0x87, 0x7c, 0xe7, 0xf8, 0xfc, 0x63, 0x61, - 0x62, 0xaf, 0x5e, 0xf3, 0x46, 0xc7, 0x06, 0x38, 0x3f, 0xc3, 0xff, 0x61, 0xf1, 0x8f, 0xfe, 0x5e, - 0x1f, 0xb0, 0x41, 0x7e, 0x4e, 0xff, 0xc3, 0xff, 0xc8, 0x65, 0xa3, 0xff, 0x8f, 0xfe, 0x83, 0xf5, - 0xff, 0xff, 0x86, 0xc1, 0x0d, 0xfa, 0x5b, 0x79, 0x90, 0xd8, 0xe1, 0xab, 0xfc, 0x47, 0xfd, 0x02, - 0x0a, 0x42, 0x0b, 0xd4, 0x5f, 0x47, 0x78, 0x62, 0x38, 0x8c, 0x05, 0x74, 0x73, 0x2f, 0xc5, 0xeb, - 0x59, 0x10, 0x96, 0xa1, 0x2f, 0xd7, 0xc4, 0x61, 0x7f, 0x55, 0xe8, 0xd1, 0x5f, 0x87, 0x0f, 0xe0, - 0xa0, 0xe2, 0xbe, 0xfd, 0x11, 0x5f, 0xff, 0xc7, 0x40, 0x84, 0xab, 0xf2, 0xe3, 0x91, 0x16, 0x1a, - 0x10, 0x29, 0x7f, 0x55, 0xe8, 0x20, 0x1f, 0xfc, 0x47, 0x11, 0xe0, 0x8c, 0x4b, 0xf4, 0xe7, 0xfe, - 0x23, 0xfc, 0x11, 0x5f, 0xa3, 0x87, 0xff, 0x86, 0x01, 0xc1, 0x05, 0xfc, 0x38, 0xff, 0xf4, 0x11, - 0x8c, 0x82, 0x65, 0x0e, 0x3c, 0x54, 0xd4, 0x37, 0x0c, 0x03, 0xf4, 0x5e, 0x2b, 0x8a, 0xfb, 0xf1, - 0xd8, 0xfc, 0x21, 0xff, 0x11, 0xc8, 0x16, 0xbf, 0x7e, 0xd1, 0x0e, 0x1b, 0xf2, 0x49, 0x9c, 0x38, - 0xf0, 0xfa, 0xbb, 0xc3, 0x4f, 0x09, 0x24, 0xda, 0x9a, 0x47, 0x07, 0x5e, 0x1d, 0xe9, 0x63, 0x08, - 0x3e, 0xed, 0x6a, 0xef, 0x71, 0xe8, 0x20, 0x0f, 0x79, 0xff, 0xea, 0xe5, 0xa3, 0xa9, 0x15, 0xca, - 0x06, 0x44, 0x56, 0xc5, 0x21, 0xdc, 0x43, 0xde, 0xee, 0x9a, 0xf5, 0xef, 0xbd, 0x17, 0x60, 0x4a, - 0xef, 0x17, 0x39, 0x3d, 0xe4, 0x96, 0x5c, 0x97, 0x2b, 0x2e, 0x65, 0xc8, 0xad, 0xc5, 0x65, 0xc3, - 0x9f, 0x97, 0xfb, 0x2d, 0x98, 0x5d, 0x1e, 0xc0, 0xb2, 0xe4, 0xb2, 0x67, 0x22, 0xd8, 0xcb, 0x35, - 0xbc, 0x67, 0x61, 0x0f, 0x15, 0x70, 0xea, 0x36, 0x50, 0x47, 0x02, 0x7f, 0x31, 0xf1, 0xa4, 0x79, - 0x8d, 0xe5, 0x98, 0xd8, 0x14, 0xb5, 0xc8, 0xa7, 0xbe, 0x5a, 0x2d, 0xc4, 0x94, 0x64, 0x4f, 0x26, - 0x03, 0x16, 0x0c, 0x9d, 0xb4, 0x84, 0xd5, 0x8e, 0xbc, 0x68, 0x77, 0x03, 0xde, 0x22, 0x04, 0x61, - 0xbe, 0x93, 0x4e, 0x71, 0xf1, 0x6a, 0xbb, 0x6e, 0x73, 0x81, 0xaa, 0x6d, 0x28, 0x1d, 0x47, 0xac, - 0x6d, 0x12, 0xbf, 0x5c, 0xbd, 0x64, 0xef, 0x1b, 0x98, 0xed, 0x20, 0xb2, 0x9c, 0xa4, 0x72, 0xa9, - 0xa0, 0x5a, 0x0d, 0x47, 0xba, 0xe9, 0x55, 0x64, 0x37, 0x6b, 0x2b, 0x93, 0x1a, 0x38, 0x57, 0x49, - 0xc6, 0x89, 0x6b, 0xde, 0x97, 0xad, 0x3e, 0x4b, 0xcc, 0xdf, 0xd9, 0x82, 0x3a, 0x05, 0x22, 0x6b, - 0xbd, 0xbf, 0xa4, 0x47, 0x00, 0x60, 0x6a, 0xbb, 0xbf, 0xbb, 0x11, 0x38, 0xfa, 0xbe, 0x12, 0x0a, - 0xda, 0x6d, 0xda, 0xeb, 0xe3, 0x88, 0x10, 0x98, 0xfa, 0x0d, 0x98, 0x46, 0xfa, 0xef, 0xfb, 0x8e, - 0x88, 0x9b, 0x7c, 0xd0, 0x50, 0x8d, 0xa6, 0xfb, 0x2f, 0x81, 0xa7, 0x4a, 0x27, 0x4a, 0x11, 0x7b, - 0x65, 0xcb, 0xbe, 0xfe, 0xaa, 0x5e, 0xd8, 0x80, 0x7c, 0xf3, 0xf6, 0x09, 0x0f, 0xbb, 0xd3, 0x2f, - 0xc7, 0x11, 0xfd, 0x82, 0x30, 0xaa, 0xf2, 0x46, 0xbf, 0xc7, 0x8f, 0xec, 0x14, 0x57, 0xaf, 0x47, - 0x62, 0x10, 0xd8, 0xe0, 0xd3, 0x90, 0x60, 0x7d, 0xe3, 0xa7, 0x87, 0xc4, 0x71, 0x1d, 0x12, 0x1c, - 0x38, 0x88, 0x44, 0x74, 0x11, 0xa3, 0xe9, 0x69, 0xc3, 0xef, 0x7f, 0xc4, 0x43, 0xf0, 0x8d, 0x11, - 0x4e, 0x3c, 0x3f, 0x88, 0xe4, 0x27, 0xfc, 0x47, 0xf6, 0x45, 0x87, 0xde, 0xff, 0xff, 0xa0, 0x41, - 0x5e, 0xd7, 0xf1, 0x1c, 0x47, 0xf9, 0x17, 0x4b, 0xff, 0xf8, 0x78, 0x20, 0xaf, 0x5f, 0xf1, 0x0c, - 0xa2, 0x00, 0x7c, 0x62, 0xf5, 0xf5, 0x2e, 0x7a, 0x69, 0x08, 0x24, 0x86, 0x0a, 0xc4, 0x0e, 0x88, - 0x1d, 0xfc, 0xbf, 0xc0, 0x30, 0x04, 0x09, 0x2b, 0xd1, 0xc1, 0x85, 0x94, 0x04, 0x3d, 0x6d, 0xf9, - 0xff, 0xa6, 0x9f, 0x8b, 0x47, 0xa7, 0xe6, 0x62, 0xc3, 0x7e, 0x1d, 0x23, 0xdc, 0x79, 0x46, 0x3c, - 0x74, 0x88, 0xbd, 0x6b, 0x5e, 0xbd, 0x2c, 0x63, 0x20, 0x3d, 0xe0, 0x5f, 0xb7, 0x3f, 0x07, 0x1f, - 0xff, 0xff, 0x00, 0xdc, 0x10, 0x2d, 0xe5, 0xc8, 0xfc, 0x72, 0xe9, 0x77, 0x4d, 0x31, 0x8b, 0x03, - 0x2e, 0x31, 0xcf, 0x87, 0xcf, 0x16, 0x42, 0x1f, 0x04, 0x4d, 0x47, 0xf4, 0xd3, 0x14, 0xa5, 0x25, - 0x1a, 0x9a, 0x6d, 0xb6, 0xdb, 0x78, 0xd5, 0x48, 0xdf, 0x6c, 0xda, 0x7f, 0x53, 0x4d, 0xb6, 0xe0, - 0x18, 0x06, 0x3c, 0x63, 0x40, 0xb3, 0xad, 0xfe, 0xd3, 0x58, 0xb5, 0x2f, 0x5d, 0xb6, 0xfc, 0x5a, - 0x81, 0xf4, 0xce, 0xba, 0x69, 0xfc, 0x38, 0xf8, 0x40, 0x03, 0x41, 0xdb, 0xde, 0xf7, 0x9d, 0x5d, - 0xb6, 0xfc, 0x59, 0x25, 0xa6, 0x5c, 0xda, 0x6d, 0xff, 0xc4, 0x31, 0x1a, 0xbe, 0x83, 0x15, 0xe9, - 0x71, 0xdb, 0x91, 0x7d, 0xc7, 0xf4, 0x08, 0x3b, 0xc2, 0xea, 0x0a, 0x34, 0x47, 0xfa, 0x69, 0xe9, - 0xa6, 0x9a, 0x62, 0x7d, 0xa7, 0x6d, 0xb6, 0xff, 0xf8, 0x61, 0xec, 0x16, 0x9f, 0x77, 0x03, 0x8a, - 0x21, 0xc7, 0x83, 0x8d, 0xd7, 0xc7, 0xc8, 0x00, 0x11, 0x07, 0x69, 0x24, 0xdb, 0x49, 0xff, 0xff, - 0x06, 0x92, 0xe8, 0xf9, 0x11, 0x6e, 0xcf, 0x93, 0x10, 0x46, 0x55, 0x1b, 0xc8, 0xca, 0xa1, 0x7c, - 0x73, 0x1d, 0x98, 0xdf, 0x10, 0xf1, 0x59, 0x88, 0x32, 0x37, 0xb1, 0xf8, 0xbb, 0xd7, 0xbd, 0xfc, - 0x28, 0x2a, 0x2b, 0x2e, 0x76, 0xfb, 0xdf, 0x6b, 0x5d, 0xf6, 0xc0, 0x13, 0x66, 0xc2, 0x8a, 0xfc, - 0xfc, 0x56, 0x54, 0x65, 0x2e, 0x44, 0x4d, 0xdb, 0x03, 0x86, 0x54, 0x61, 0x2e, 0xe4, 0x46, 0x67, - 0x8e, 0x31, 0x95, 0xb5, 0xcb, 0xc7, 0xe5, 0xfa, 0x40, 0x7c, 0xd6, 0xb0, 0xec, 0xcd, 0xcb, 0x24, - 0x04, 0xba, 0xe2, 0x45, 0x35, 0x59, 0x20, 0xaa, 0xda, 0xec, 0xab, 0xd2, 0x32, 0xf3, 0x23, 0x9c, - 0x0a, 0x26, 0xb1, 0x10, 0xe7, 0x41, 0x2b, 0xa6, 0x61, 0xda, 0xf3, 0x51, 0x71, 0x7c, 0xfa, 0xdb, - 0xbd, 0xe0, 0x99, 0xca, 0x44, 0x56, 0xd4, 0x97, 0xa4, 0x91, 0x2e, 0x93, 0x69, 0x3e, 0xf7, 0x4f, - 0xb2, 0xec, 0x18, 0xf6, 0x91, 0x24, 0x5e, 0x90, 0xb8, 0xc2, 0xcf, 0xe6, 0xfd, 0x4a, 0x98, 0xe8, - 0x3f, 0xe1, 0xb0, 0xb5, 0xba, 0xef, 0xbf, 0xc3, 0x10, 0xe1, 0x00, 0xb5, 0xd7, 0xaf, 0x51, 0x75, - 0x5a, 0xf7, 0x80, 0x0e, 0x35, 0x08, 0x06, 0x81, 0x01, 0x7b, 0x94, 0x90, 0x3f, 0xa6, 0x34, 0xc3, - 0xc3, 0x1e, 0xc1, 0x07, 0x7d, 0x00, 0xc9, 0xd0, 0x8e, 0x33, 0x05, 0x4a, 0x64, 0x2f, 0x2a, 0x49, - 0x98, 0xcd, 0xa2, 0xbd, 0xfd, 0xf7, 0xf9, 0x8d, 0x56, 0x35, 0x9a, 0xc5, 0x0c, 0xcb, 0xee, 0x7c, - 0xde, 0xd7, 0xcf, 0xf3, 0x58, 0xd5, 0x58, 0x5f, 0xa7, 0x10, 0xf7, 0x87, 0x07, 0x93, 0x2f, 0xfa, - 0x81, 0x5c, 0x02, 0xc2, 0x21, 0x71, 0xdb, 0x1e, 0x1c, 0x03, 0xf9, 0x12, 0xd3, 0xd2, 0x28, 0x63, - 0xc9, 0x78, 0x87, 0xff, 0xe0, 0x88, 0x68, 0xaf, 0x80, 0xc0, 0x80, 0xd2, 0x2c, 0x26, 0x40, 0x90, - 0x09, 0x1e, 0xb7, 0xe7, 0xff, 0xe2, 0xd8, 0xb6, 0x74, 0x85, 0x19, 0x00, 0x14, 0xf3, 0x5b, 0x7e, - 0x7f, 0xe2, 0x7a, 0x27, 0xbe, 0x29, 0x49, 0x16, 0x96, 0x96, 0xde, 0x78, 0x5e, 0x38, 0x35, 0xad, - 0xad, 0xaf, 0xff, 0xf3, 0x51, 0x86, 0xc3, 0x45, 0xbe, 0x5c, 0x9c, 0x0e, 0x38, 0x28, 0x00, 0x0a, - 0x47, 0x00, 0x02, 0x3e, 0xdb, 0x7f, 0xc3, 0xe0, 0x0b, 0x1a, 0x82, 0x0d, 0x95, 0x7e, 0x9c, 0xa9, - 0xd3, 0x4f, 0xe2, 0x23, 0x51, 0xc6, 0x11, 0xe8, 0x15, 0x41, 0x2a, 0xb1, 0x56, 0xdf, 0xff, 0xfd, - 0xfd, 0x07, 0x49, 0x97, 0x39, 0x71, 0xce, 0x88, 0x9b, 0x6f, 0x16, 0xc5, 0xbc, 0x32, 0xa0, 0x3f, - 0x9c, 0xc0, 0x4d, 0x3f, 0xff, 0xcc, 0xfb, 0x4d, 0x37, 0xfa, 0xbc, 0x5c, 0x7f, 0xee, 0x83, 0x91, - 0x5f, 0x4a, 0x93, 0x80, 0xb8, 0x44, 0x77, 0x5b, 0xad, 0xb1, 0x57, 0xfe, 0x7d, 0xef, 0xe4, 0x11, - 0xcb, 0x8f, 0x72, 0xe5, 0x96, 0xde, 0xf4, 0x68, 0xa8, 0xff, 0xff, 0x47, 0x26, 0xf7, 0xbd, 0xf9, - 0x95, 0x09, 0xa8, 0x3f, 0x20, 0xa6, 0x9e, 0x9a, 0x7f, 0xfc, 0x52, 0xa8, 0x70, 0x62, 0xfa, 0x8f, - 0x8c, 0xfe, 0x40, 0x47, 0xd7, 0xa8, 0x95, 0x1c, 0x69, 0x79, 0x54, 0x1f, 0xd0, 0x2a, 0xa1, 0xc6, - 0x5b, 0xed, 0xff, 0xf5, 0x09, 0xa9, 0x4d, 0xa6, 0x9f, 0xff, 0xed, 0x17, 0x83, 0xae, 0xd7, 0x6d, - 0xbf, 0x9d, 0xfe, 0xf7, 0xf9, 0x04, 0x5e, 0xf7, 0x77, 0xbf, 0x32, 0x4e, 0xa3, 0xab, 0x58, 0xfd, - 0x78, 0xe2, 0x12, 0x04, 0x71, 0x6a, 0x39, 0x80, 0x8c, 0x8b, 0x72, 0x72, 0x0f, 0xdf, 0xd4, 0x38, - 0x3c, 0x39, 0x99, 0x20, 0xab, 0xce, 0x1c, 0xf0, 0xd1, 0x46, 0x0c, 0xed, 0xda, 0x06, 0xe5, 0x3b, - 0x5d, 0xb6, 0xf9, 0x3b, 0xbf, 0x7e, 0xed, 0x24, 0x90, 0xb3, 0x90, 0x87, 0x09, 0x05, 0x52, 0x08, - 0xcf, 0x7d, 0x83, 0xb7, 0x2d, 0x9c, 0xe6, 0x21, 0xca, 0xca, 0x89, 0x2d, 0x8e, 0xdc, 0x54, 0xcc, - 0x57, 0xfa, 0x77, 0x7a, 0x58, 0x1a, 0xdf, 0x90, 0x18, 0x6b, 0xd7, 0x7b, 0xe8, 0xeb, 0xf7, 0xec, - 0xf8, 0x01, 0x16, 0xd1, 0x06, 0xb9, 0xfd, 0xd3, 0x10, 0xfb, 0xf7, 0x4d, 0x3e, 0x93, 0xeb, 0x5e, - 0x51, 0x9c, 0xc3, 0xc5, 0x81, 0x2c, 0xfb, 0xdb, 0x4f, 0x7f, 0x15, 0xb6, 0x21, 0xf7, 0xe4, 0xef, - 0x7b, 0xc5, 0xab, 0x4e, 0x30, 0xb9, 0x8c, 0xa8, 0x7c, 0x35, 0x0e, 0x0f, 0x11, 0x8d, 0x5c, 0x0a, - 0x92, 0x2a, 0x05, 0x8c, 0x35, 0xd8, 0x55, 0x8a, 0x56, 0x7a, 0x79, 0x6d, 0x43, 0xf4, 0x07, 0xf8, - 0xcc, 0x30, 0x0a, 0xde, 0xdf, 0x4f, 0x77, 0x80, 0x4c, 0xe2, 0x8a, 0xb4, 0x77, 0x2b, 0xbe, 0xce, - 0x65, 0x6f, 0x64, 0xa3, 0x5c, 0x77, 0xd7, 0xf1, 0xd4, 0xc2, 0x4f, 0x62, 0xb3, 0xcd, 0xcd, 0x37, - 0x2e, 0x0c, 0x81, 0x87, 0x2f, 0xed, 0xed, 0xb6, 0xd9, 0xd3, 0x20, 0x68, 0xa7, 0xc8, 0xee, 0x3b, - 0xe2, 0xbf, 0x0c, 0x6e, 0x3e, 0x5f, 0x4b, 0xf9, 0x61, 0xb3, 0x4e, 0x52, 0xf1, 0x67, 0xf3, 0x72, - 0xe7, 0xd4, 0x5f, 0xe8, 0x96, 0x70, 0x06, 0x6d, 0x52, 0x7d, 0xe3, 0x6c, 0x2d, 0xf8, 0x3e, 0xb4, - 0x6b, 0x5a, 0xad, 0x7d, 0x54, 0xd9, 0xfa, 0x15, 0x50, 0x81, 0x41, 0x98, 0x54, 0x73, 0x57, 0xf4, - 0x7f, 0x6c, 0xa7, 0xca, 0x8c, 0x12, 0x4c, 0x81, 0x3b, 0x2d, 0xae, 0xb8, 0xe2, 0x94, 0x00, 0xd1, - 0xb6, 0x11, 0xb7, 0xe0, 0x18, 0xf0, 0xec, 0x14, 0x16, 0xfd, 0x3e, 0xb5, 0xf5, 0x9c, 0x31, 0x11, - 0xa0, 0x4d, 0x6c, 0xf6, 0x4f, 0x8a, 0xff, 0xd6, 0x26, 0x38, 0xd6, 0x70, 0xd0, 0xcd, 0xf4, 0xb3, - 0x5b, 0x7f, 0xd5, 0x56, 0x15, 0x58, 0x85, 0x62, 0x73, 0x11, 0x77, 0xdd, 0x2b, 0xed, 0xe3, 0xf5, - 0x55, 0x8a, 0xad, 0x06, 0x68, 0x9a, 0xf9, 0xb0, 0xaa, 0xff, 0xc5, 0x62, 0xe0, 0x16, 0x11, 0x0b, - 0xa3, 0xff, 0x86, 0x01, 0xfc, 0x3e, 0x57, 0xff, 0xff, 0x87, 0x04, 0x37, 0xff, 0xff, 0xf8, 0x22, - 0x1a, 0x2b, 0xe8, 0xe1, 0xff, 0xfe, 0x1c, 0x10, 0x8c, 0x7f, 0xff, 0xee, 0x4e, 0xc7, 0x08, 0x05, - 0x3b, 0xe5, 0xc9, 0x70, 0x3d, 0x0d, 0x46, 0x54, 0x3d, 0x1a, 0x84, 0x22, 0x62, 0x8b, 0xb0, 0xf4, - 0x62, 0x7a, 0x39, 0x17, 0xfc, 0x89, 0xdd, 0xcd, 0xf7, 0x4e, 0x24, 0x92, 0x5c, 0x0e, 0x03, 0xc7, - 0x38, 0x1c, 0xc3, 0x53, 0xf2, 0x2d, 0xfb, 0x62, 0xd5, 0xf9, 0x88, 0x7a, 0x41, 0x90, 0xfa, 0x89, - 0xde, 0x33, 0xf2, 0xd6, 0x58, 0xbf, 0x8c, 0x16, 0xb5, 0xb1, 0xe6, 0xf4, 0x3a, 0x5b, 0x2f, 0x68, - 0xbc, 0x3a, 0x47, 0xd4, 0x95, 0xa8, 0xca, 0x8b, 0x14, 0x63, 0x07, 0xfd, 0x38, 0xfe, 0x75, 0x4f, - 0xde, 0x9a, 0xc7, 0xf2, 0xcb, 0x59, 0x21, 0x6d, 0xdd, 0x5c, 0x19, 0x24, 0x64, 0x33, 0xdb, 0xe9, - 0xff, 0xfe, 0x1f, 0x60, 0x84, 0x32, 0xbd, 0xff, 0xff, 0x87, 0x64, 0x4b, 0x4b, 0x4f, 0xc4, 0x3f, - 0xff, 0x0f, 0x0d, 0x15, 0xf9, 0x71, 0x8f, 0xf0, 0xca, 0x12, 0x2c, 0x75, 0xbf, 0xdd, 0xc5, 0x56, - 0x30, 0xac, 0x07, 0x57, 0xa8, 0x8a, 0x09, 0x11, 0xfb, 0x31, 0xaf, 0x78, 0x04, 0x40, 0x3f, 0x0a, - 0x82, 0x05, 0x39, 0x5d, 0x24, 0xb1, 0x16, 0xbd, 0xff, 0xc3, 0x0e, 0x82, 0xf7, 0x57, 0xbf, 0x22, - 0x71, 0x0e, 0x10, 0x0f, 0xe0, 0x8a, 0xfc, 0x0a, 0x64, 0x4a, 0x20, 0x23, 0xc7, 0x49, 0xe2, 0x49, - 0x03, 0x3b, 0x20, 0xc3, 0xe3, 0x15, 0x7b, 0xff, 0x0f, 0xa0, 0xb0, 0x97, 0xe2, 0xbf, 0x44, 0x5a, - 0xe1, 0xea, 0x21, 0xfa, 0x04, 0x7d, 0xed, 0x8d, 0x7a, 0xbc, 0x0a, 0x22, 0x32, 0x05, 0xb5, 0xd7, - 0x8e, 0x3c, 0x9c, 0x91, 0x1e, 0x95, 0x1c, 0x86, 0x05, 0xb9, 0xf2, 0x47, 0x71, 0xea, 0xf9, 0x4b, - 0xe8, 0x5e, 0xee, 0xf7, 0xbb, 0xdf, 0x1f, 0xe3, 0x1e, 0xb4, 0x12, 0xeb, 0x7f, 0x1f, 0xe3, 0xc6, - 0x12, 0x04, 0x6e, 0x44, 0xa8, 0xad, 0x22, 0x12, 0x42, 0x87, 0x86, 0x70, 0x7c, 0x6a, 0xa3, 0xf1, - 0xe3, 0x48, 0x50, 0x2e, 0xf1, 0x27, 0x8f, 0x2a, 0x69, 0xff, 0xb1, 0x48, 0x99, 0xca, 0x5b, 0xc5, - 0xc6, 0x75, 0x24, 0x15, 0xd1, 0x24, 0x55, 0xb4, 0xb0, 0xe0, 0xf5, 0x96, 0xce, 0x7b, 0x70, 0x0e, - 0x04, 0x81, 0xc3, 0x16, 0x2c, 0x1e, 0xb8, 0x8f, 0x8e, 0x7e, 0x7f, 0x85, 0x70, 0x02, 0x9a, 0xfd, - 0x58, 0x9f, 0xfd, 0xbf, 0xff, 0xdd, 0xb0, 0x77, 0xe1, 0x39, 0xe2, 0x8c, 0x9a, 0x01, 0xb3, 0x40, - 0xfc, 0x88, 0x95, 0xc7, 0x17, 0xab, 0x27, 0xf6, 0xc5, 0x5a, 0x76, 0xec, 0xd2, 0x66, 0xc9, 0x99, - 0x88, 0x02, 0x52, 0xef, 0x6b, 0xda, 0xd1, 0x74, 0x24, 0x8e, 0x04, 0x3d, 0xa4, 0x36, 0x7b, 0xff, - 0x7b, 0xf5, 0xd9, 0x03, 0x68, 0x7b, 0x45, 0x98, 0x93, 0xff, 0x0e, 0x29, 0xe9, 0x78, 0x3e, 0x1e, - 0x59, 0x6b, 0x22, 0x18, 0x85, 0xfc, 0x90, 0xa6, 0x6e, 0xe4, 0xe6, 0x4e, 0xed, 0x84, 0x4a, 0xa4, - 0x17, 0xe0, 0x95, 0x21, 0xfe, 0x6b, 0xc9, 0x15, 0x46, 0xf2, 0xd5, 0xe2, 0xeb, 0xd5, 0xae, 0xe5, - 0xcb, 0x8d, 0xa2, 0xaf, 0x93, 0xf3, 0x85, 0x50, 0xec, 0x81, 0x86, 0x4e, 0xfb, 0x6e, 0x73, 0x24, - 0xb3, 0xed, 0xf4, 0xfc, 0x8e, 0xbf, 0x97, 0xbf, 0x54, 0x59, 0x91, 0xb9, 0xad, 0xc2, 0x0c, 0xd4, - 0xf1, 0xc1, 0x8f, 0x75, 0x1f, 0xb2, 0xe0, 0xa3, 0xf5, 0x7c, 0xd8, 0xa7, 0xe3, 0xd5, 0x9b, 0xbb, - 0x5f, 0xed, 0xe0, 0x90, 0x91, 0xe5, 0x76, 0x6b, 0x35, 0xf5, 0xd6, 0x3b, 0xb1, 0x1e, 0xc3, 0xc2, - 0x12, 0xb1, 0x1e, 0xb5, 0x8b, 0x92, 0x19, 0xfe, 0x59, 0x76, 0x72, 0x08, 0x6f, 0x15, 0x10, 0xd8, - 0x5f, 0xad, 0x7d, 0xba, 0x1a, 0x49, 0x13, 0xe1, 0xcd, 0x73, 0x7d, 0x33, 0xe2, 0xeb, 0xfa, 0x57, - 0x08, 0x41, 0xed, 0x8c, 0xbc, 0x32, 0x69, 0x76, 0x14, 0xef, 0xbd, 0xf2, 0xc8, 0xb9, 0x7e, 0xc3, - 0xc5, 0x7f, 0x97, 0xfd, 0x00, 0x40, 0x62, 0xf9, 0xf9, 0xba, 0x7b, 0xd5, 0xa8, 0x9e, 0x05, 0x51, - 0x81, 0x35, 0x8e, 0x27, 0xff, 0xfb, 0x6d, 0xfe, 0xdc, 0x8b, 0x17, 0xbb, 0x90, 0xf9, 0x0b, 0xed, - 0x3f, 0xaa, 0x8b, 0x9a, 0xd7, 0xe2, 0x6a, 0x6b, 0xc6, 0xa4, 0x6b, 0x97, 0x59, 0x89, 0x7a, 0x36, - 0xb4, 0xb2, 0x2e, 0x2d, 0xff, 0x53, 0xa8, 0x55, 0x56, 0x7e, 0xb3, 0x19, 0xa9, 0x70, 0x99, 0x8d, - 0x7b, 0x77, 0x36, 0x3b, 0x75, 0xbc, 0x43, 0x00, 0x55, 0x4e, 0x16, 0x09, 0x0f, 0x86, 0x05, 0x5a, - 0x24, 0x06, 0x88, 0x82, 0x1a, 0x38, 0x7f, 0xff, 0x87, 0x04, 0x23, 0x1f, 0xfe, 0x4c, 0xe0, 0x1b, - 0x3f, 0x0e, 0x05, 0x12, 0x15, 0xa6, 0x21, 0xc4, 0xcb, 0x1e, 0x12, 0x80, 0x42, 0x83, 0xab, 0x07, - 0x97, 0x88, 0x30, 0xf8, 0x3b, 0x4d, 0xe2, 0x6e, 0xc6, 0x07, 0x0c, 0x87, 0x38, 0x21, 0xcc, 0x19, - 0xd4, 0xb7, 0x92, 0x0a, 0xc4, 0x2b, 0x6f, 0x4e, 0xf4, 0xcb, 0xec, 0x0e, 0x2d, 0x82, 0x1f, 0xb7, - 0xf0, 0x20, 0xc5, 0x08, 0x1b, 0x53, 0x57, 0x53, 0xa4, 0x3d, 0x82, 0xc1, 0xb2, 0x29, 0xd6, 0xb5, - 0x77, 0x8b, 0xf4, 0x83, 0x6f, 0x2e, 0xce, 0x44, 0x3c, 0x7f, 0x85, 0x2d, 0x47, 0x91, 0x8e, 0x99, - 0x3d, 0xfc, 0x4d, 0xa7, 0xb9, 0xbb, 0xda, 0xf5, 0x9e, 0x03, 0x2a, 0xdf, 0xbf, 0x9c, 0xe1, 0xde, - 0x58, 0xc7, 0x7e, 0xab, 0xf3, 0x2b, 0xb3, 0xc5, 0x7c, 0x03, 0x0f, 0x10, 0xd4, 0x77, 0xf0, 0xff, - 0x8b, 0xf5, 0x3a, 0x70, 0xb3, 0xe4, 0xdd, 0x26, 0x93, 0x1b, 0x56, 0xaa, 0xba, 0xdb, 0x48, 0xbe, - 0xc0, 0x92, 0x67, 0x5a, 0x7c, 0xbe, 0xf3, 0xa1, 0x80, 0x67, 0x0a, 0x78, 0xff, 0x65, 0x24, 0x87, - 0x96, 0xb8, 0xb5, 0x6e, 0x09, 0xa4, 0xbe, 0xff, 0x32, 0x09, 0x86, 0xfc, 0x89, 0x68, 0xca, 0x1b, - 0xf2, 0x54, 0x2c, 0x82, 0x00, 0x31, 0xd3, 0x53, 0xcc, 0x29, 0xad, 0x62, 0x4e, 0xf8, 0xb5, 0x05, - 0x55, 0x2c, 0x20, 0x5d, 0x15, 0x62, 0xd8, 0xb7, 0xe1, 0x74, 0x60, 0x48, 0xdc, 0xf3, 0x7f, 0xfe, - 0x9a, 0x61, 0x08, 0x48, 0x77, 0x27, 0x07, 0x37, 0xfe, 0x2b, 0xb8, 0x6e, 0x3e, 0x83, 0x7d, 0x7b, - 0xc4, 0x86, 0xb2, 0x6d, 0x36, 0xb7, 0x5b, 0xbb, 0x6d, 0xc9, 0x70, 0x0e, 0x3f, 0xc2, 0xe2, 0x5f, - 0x8a, 0xf8, 0xc0, 0x57, 0xff, 0xff, 0xa1, 0x1d, 0xfb, 0xde, 0xf7, 0xfd, 0x6a, 0x7a, 0xc2, 0xaa, - 0x82, 0x32, 0x24, 0xa4, 0x80, 0xfe, 0xa2, 0x42, 0x72, 0xd3, 0x3c, 0x49, 0x20, 0x98, 0xfd, 0x98, - 0xa8, 0x76, 0x2d, 0x41, 0xde, 0x84, 0x43, 0xa7, 0xdb, 0x6f, 0xfc, 0x16, 0xe1, 0xfa, 0x04, 0x75, - 0xa5, 0x63, 0xff, 0x10, 0xd5, 0xf4, 0x43, 0x92, 0x14, 0xb2, 0x4a, 0x8a, 0xa1, 0xff, 0xc5, 0x50, - 0x0d, 0xdd, 0xd1, 0x21, 0xc3, 0xab, 0x94, 0x44, 0x24, 0x04, 0x47, 0x15, 0xfc, 0xb0, 0xe3, 0xe0, - 0xb1, 0x01, 0x90, 0x12, 0x5f, 0xc5, 0x8c, 0x20, 0x28, 0x1e, 0x00, 0x52, 0x05, 0xc8, 0xbf, 0x55, - 0xcb, 0x1f, 0xe2, 0x03, 0xf4, 0x08, 0xce, 0xfe, 0x29, 0x91, 0x80, 0x47, 0x4d, 0xa8, 0xf1, 0x53, - 0x91, 0x48, 0x98, 0xe4, 0xdf, 0x51, 0x55, 0xcd, 0x85, 0xf0, 0xa2, 0xab, 0xbc, 0x91, 0x55, 0xc0, - 0xe4, 0x10, 0xe0, 0x64, 0xc2, 0x88, 0xf0, 0xb7, 0x99, 0x4d, 0xdf, 0xf6, 0xfc, 0x25, 0x82, 0x99, - 0x23, 0xf9, 0x72, 0xe1, 0x2c, 0xf1, 0x46, 0xdd, 0xa0, 0xf2, 0x6b, 0xe2, 0x45, 0xef, 0x97, 0x29, - 0xb8, 0xfa, 0xc6, 0xdc, 0xdd, 0xf0, 0x4b, 0x34, 0x05, 0x2c, 0xdb, 0x5a, 0x11, 0x2b, 0x2d, 0xc1, - 0xb7, 0x3f, 0x1e, 0x59, 0x6b, 0xef, 0x68, 0x48, 0x82, 0x40, 0x89, 0xd6, 0x6a, 0x5e, 0xf7, 0xd5, - 0xef, 0xab, 0x65, 0x2c, 0x1a, 0x01, 0xc9, 0xac, 0xe5, 0xde, 0xef, 0xcb, 0xe9, 0x97, 0x6c, 0xd8, - 0xc9, 0xe4, 0xcd, 0x1a, 0x50, 0xce, 0xdc, 0xc5, 0x94, 0x36, 0x78, 0xff, 0x81, 0xd6, 0x4a, 0x4f, - 0x58, 0xe6, 0x80, 0x8d, 0xce, 0x80, 0xea, 0x26, 0x89, 0x86, 0xd1, 0x6f, 0x85, 0x6a, 0x36, 0xfd, - 0xaf, 0xbd, 0xf7, 0x8e, 0xde, 0x8a, 0x67, 0xa5, 0x8e, 0x3d, 0x5e, 0xdc, 0x9f, 0xaf, 0xee, 0x67, - 0xb7, 0x61, 0x95, 0xe3, 0x10, 0xf4, 0x20, 0xa2, 0xe2, 0x39, 0xb5, 0xbf, 0x53, 0x22, 0xa1, 0x2c, - 0xa1, 0x04, 0xb1, 0xdd, 0xbb, 0xbe, 0x31, 0x78, 0xc0, 0x34, 0x16, 0x2c, 0x5d, 0x55, 0x9b, 0xca, - 0xfb, 0xd7, 0x4c, 0x47, 0x11, 0xe1, 0xea, 0xfe, 0x0f, 0x00, 0x89, 0x88, 0x60, 0x29, 0xe5, 0xc3, - 0xe4, 0x26, 0xbb, 0xfb, 0xae, 0x21, 0xec, 0x52, 0xee, 0x4e, 0xc4, 0x19, 0x7a, 0x7d, 0xdd, 0xc5, - 0x7b, 0xf2, 0x6d, 0xf3, 0xf1, 0xd9, 0x8a, 0xdf, 0x7e, 0xfe, 0xf2, 0xe1, 0xec, 0x67, 0xff, 0x3b, - 0x39, 0x61, 0x93, 0x3f, 0x6d, 0xae, 0x59, 0x11, 0x09, 0x10, 0x42, 0x52, 0x01, 0x56, 0x8b, 0xaa, - 0xaa, 0xd7, 0xaa, 0x9b, 0x31, 0xdd, 0xfb, 0xf0, 0x5a, 0xea, 0xf7, 0x2d, 0xcf, 0x4b, 0xd5, 0x7a, - 0xe2, 0x38, 0x89, 0x9f, 0xc0, 0x70, 0xc9, 0x68, 0xd9, 0xba, 0xfd, 0x7d, 0x74, 0xaa, 0x31, 0x22, - 0x51, 0x02, 0x62, 0x77, 0xbf, 0x35, 0xa9, 0xad, 0x7c, 0xf4, 0x42, 0x86, 0x5f, 0x79, 0x79, 0xb2, - 0xfc, 0x62, 0xbe, 0x7d, 0x65, 0x41, 0xb2, 0xe5, 0xcd, 0x97, 0x1e, 0xc1, 0x92, 0x43, 0x14, 0xdb, - 0x6e, 0xda, 0x69, 0xf5, 0x0f, 0x57, 0x98, 0xe3, 0x14, 0x0a, 0x8b, 0x2b, 0x6d, 0xff, 0xd5, 0xed, - 0x88, 0x84, 0x68, 0x84, 0x0e, 0x12, 0xd6, 0x9a, 0x6d, 0x1b, 0x01, 0xb4, 0xa9, 0xe1, 0x17, 0x9c, - 0x7f, 0xc0, 0xc9, 0x11, 0x90, 0xc4, 0xd4, 0x5c, 0x00, 0xfb, 0x70, 0xa3, 0x50, 0xe9, 0x7d, 0x34, - 0xdb, 0xdd, 0x8f, 0xf1, 0xb7, 0xb3, 0xd4, 0xaf, 0xe4, 0x2e, 0x98, 0xb7, 0xdb, 0xf2, 0xa0, 0xea, - 0xe3, 0x77, 0x93, 0x74, 0x4a, 0xff, 0x42, 0x2d, 0x5f, 0x1f, 0x53, 0xfd, 0x9a, 0xda, 0x8e, 0xd8, - 0x3c, 0xa3, 0xb6, 0x3f, 0x07, 0x6c, 0x07, 0xb4, 0x76, 0xdd, 0x41, 0xf7, 0xdb, 0x6f, 0xab, 0x88, - 0x8a, 0x8f, 0x51, 0xd4, 0x9d, 0xd5, 0x6a, 0x9e, 0x33, 0x77, 0x66, 0xfd, 0x46, 0x2f, 0x8e, 0x7a, - 0x7f, 0x2b, 0xd5, 0x8a, 0xfb, 0xbb, 0xeb, 0xbb, 0x58, 0x4a, 0xd0, 0x1d, 0xd2, 0x8c, 0xee, 0x62, - 0x9b, 0x0b, 0x56, 0x0f, 0xd0, 0xde, 0x6d, 0x97, 0x5b, 0xd3, 0xd1, 0xcf, 0x6f, 0x1b, 0xeb, 0x4c, - 0xb2, 0x1d, 0xf4, 0x55, 0x4a, 0x3f, 0xf5, 0x96, 0x45, 0x2d, 0x2a, 0x4e, 0x0a, 0x59, 0x1f, 0x6f, - 0xf8, 0x7e, 0x0f, 0x82, 0xb8, 0x90, 0x79, 0x57, 0xde, 0xef, 0x48, 0x98, 0x30, 0x67, 0x46, 0xc3, - 0x68, 0x87, 0x4e, 0x1d, 0xff, 0x0f, 0x7d, 0xfd, 0x0f, 0xe9, 0x62, 0x1c, 0x5d, 0xe9, 0x4e, 0xaa, - 0x64, 0xda, 0x9f, 0xbf, 0xdf, 0xde, 0xfe, 0xf5, 0xf7, 0x4a, 0x5c, 0x4b, 0x79, 0x72, 0xd2, 0x85, - 0x07, 0x1d, 0x55, 0x4b, 0xed, 0xb7, 0xef, 0x71, 0x7e, 0xf7, 0x7d, 0x50, 0x42, 0x92, 0x45, 0xcb, - 0x97, 0x25, 0xc6, 0xe4, 0x96, 0xe3, 0xa4, 0x88, 0xb5, 0x8a, 0xbf, 0xe3, 0x7b, 0xbf, 0xef, 0xd0, - 0xdd, 0xee, 0x5c, 0x6e, 0x6f, 0xb5, 0xcd, 0x2d, 0x65, 0x8b, 0xd3, 0x4f, 0x8e, 0xff, 0xbf, 0xd1, - 0x7b, 0x97, 0x3d, 0x28, 0xad, 0xdd, 0xcc, 0xa3, 0xff, 0xff, 0x82, 0xd2, 0xaf, 0x10, 0x00, 0x09, - 0x01, 0xd1, 0x96, 0x28, 0x16, 0x28, 0x17, 0xf0, 0xe3, 0xd5, 0xea, 0x0b, 0xa0, 0xef, 0x2e, 0x7b, - 0x91, 0xbd, 0x2f, 0x1e, 0xa3, 0xb3, 0x1f, 0xe9, 0xee, 0x9a, 0x78, 0xb5, 0x01, 0xdb, 0x86, 0x03, - 0x1e, 0x9d, 0xaf, 0x8d, 0x51, 0xdc, 0x85, 0x83, 0xb4, 0xd7, 0xf1, 0x8f, 0x08, 0x3e, 0xae, 0x81, - 0x27, 0x4a, 0x2e, 0xa1, 0x35, 0x0f, 0x7b, 0xff, 0xf4, 0xd3, 0xca, 0x17, 0x5f, 0xff, 0xed, 0xb6, - 0x61, 0x53, 0xfe, 0x65, 0x1b, 0xc8, 0xc9, 0x3a, 0x96, 0x15, 0x09, 0xa8, 0x13, 0x37, 0x3f, 0x37, - 0xfb, 0x6d, 0xff, 0xdf, 0xff, 0xfa, 0x1b, 0x5e, 0xbf, 0x58, 0x82, 0x4b, 0xa6, 0x9b, 0x4d, 0x78, - 0xb4, 0x55, 0x15, 0x0b, 0x74, 0x10, 0xab, 0xf1, 0x6a, 0x9f, 0x74, 0xd3, 0xf2, 0x2c, 0x52, 0xc0, - 0x3b, 0x6e, 0xdf, 0xc7, 0xc4, 0xb8, 0x58, 0xa2, 0x82, 0x1e, 0x24, 0xf5, 0xea, 0x79, 0xe6, 0xe5, - 0x7e, 0x0b, 0x06, 0x51, 0x1c, 0x58, 0xed, 0xef, 0x7b, 0x6d, 0xe5, 0x69, 0x5a, 0x49, 0x92, 0xc6, - 0x9d, 0xb8, 0xca, 0xb3, 0xbb, 0x34, 0xfc, 0x56, 0x06, 0x11, 0xe0, 0x55, 0xe7, 0xe7, 0xef, 0xf5, - 0xae, 0xe5, 0x93, 0x58, 0x99, 0x31, 0x16, 0x8a, 0x4d, 0x6a, 0x42, 0x8a, 0xda, 0xfd, 0xbf, 0x49, - 0xfc, 0x3e, 0x96, 0xc2, 0xad, 0x6a, 0x69, 0x24, 0xed, 0x8a, 0xfd, 0xc6, 0x57, 0x88, 0xde, 0xf8, - 0x53, 0x0c, 0x39, 0x6a, 0xce, 0x21, 0x31, 0xe5, 0xd4, 0x0e, 0xde, 0x64, 0x9f, 0x5b, 0xc2, 0x4c, - 0xe0, 0x09, 0x1f, 0x57, 0xd7, 0xef, 0xeb, 0xfe, 0xf7, 0x97, 0x61, 0xc6, 0xe1, 0x1e, 0x86, 0x08, - 0xbe, 0x6c, 0xa7, 0x8b, 0xeb, 0xfe, 0x21, 0x83, 0x16, 0xd1, 0xb9, 0x72, 0x03, 0x59, 0x65, 0x4d, - 0xd5, 0x8a, 0xbd, 0x37, 0x65, 0xa9, 0x34, 0xbc, 0xb7, 0x8a, 0xc5, 0xc0, 0xd6, 0xf7, 0xab, 0xab, - 0xc2, 0xc5, 0x66, 0x9b, 0x37, 0x50, 0x8b, 0xbe, 0x5e, 0xd5, 0x7d, 0x3e, 0x04, 0xdc, 0xb4, 0xc7, - 0xb4, 0x7b, 0xc5, 0x7d, 0xc7, 0x97, 0xe2, 0xb7, 0xc9, 0x2e, 0x44, 0xdf, 0xf0, 0x1c, 0x80, 0xa4, - 0xf4, 0xb5, 0xff, 0x84, 0x91, 0x00, 0x17, 0xb5, 0x36, 0x81, 0xff, 0xff, 0xab, 0xdb, 0xa5, 0xbf, - 0xdc, 0x34, 0x19, 0x2b, 0x56, 0xa2, 0xff, 0xb0, 0x0e, 0x51, 0x91, 0xcb, 0x76, 0x33, 0x7d, 0x72, - 0xf8, 0x87, 0x1e, 0xf9, 0x11, 0x16, 0x5b, 0xbb, 0x9b, 0xc3, 0x22, 0x2e, 0xee, 0xe2, 0xb7, 0x7a, - 0x55, 0x6b, 0x16, 0xd3, 0xf9, 0x48, 0x5d, 0xee, 0x9b, 0xde, 0xd3, 0xea, 0x98, 0xd0, 0xc0, 0xa7, - 0x91, 0xed, 0x0a, 0x10, 0x09, 0x43, 0x27, 0x62, 0x87, 0x66, 0xb4, 0xdc, 0x88, 0x75, 0x61, 0x7a, - 0x83, 0xb7, 0x56, 0x79, 0x6f, 0x4c, 0x79, 0x75, 0x59, 0x58, 0x21, 0x9b, 0x17, 0x5a, 0xdf, 0x32, - 0x1e, 0x73, 0x95, 0xa9, 0xb1, 0x4d, 0xf5, 0xcb, 0x1e, 0x6c, 0x37, 0x6c, 0x89, 0x20, 0x10, 0x53, - 0x5f, 0xc4, 0x95, 0x2e, 0xf2, 0xe6, 0x8d, 0x9c, 0x20, 0xa0, 0xe5, 0x6d, 0xb3, 0x6c, 0x5f, 0xe3, - 0x06, 0x74, 0x38, 0xda, 0xec, 0x38, 0x8b, 0x0f, 0xf5, 0x52, 0xe3, 0x6d, 0xcb, 0xb3, 0xa3, 0xbb, - 0x3a, 0x33, 0xd2, 0x1f, 0x70, 0x8c, 0x36, 0x18, 0x96, 0xad, 0x77, 0x35, 0x78, 0xa3, 0x3e, 0x5f, - 0x69, 0xf7, 0xce, 0x73, 0x2a, 0x04, 0x27, 0x9a, 0x0e, 0x0c, 0x69, 0xa6, 0xc2, 0xcf, 0xf7, 0xcb, - 0x06, 0xee, 0xbb, 0xdb, 0xee, 0x27, 0xbe, 0xab, 0x5d, 0x5d, 0x60, 0xea, 0xc5, 0xfd, 0x21, 0xac, - 0x9b, 0xf3, 0x75, 0xe5, 0xc0, 0x84, 0x11, 0x80, 0x38, 0x8c, 0x87, 0x37, 0x07, 0x37, 0x2a, 0x0a, - 0x18, 0x5d, 0xdf, 0x70, 0xbc, 0x6e, 0xf1, 0xc2, 0xeb, 0x5c, 0xb9, 0x59, 0x73, 0xaa, 0xdd, 0xc2, - 0x8e, 0x28, 0xfb, 0xb8, 0xa3, 0x0f, 0xff, 0x51, 0x70, 0xdc, 0x1f, 0xee, 0xa5, 0x1d, 0xb1, 0xdf, - 0xbe, 0xcb, 0x69, 0x17, 0x0b, 0x8e, 0x73, 0x9d, 0xf1, 0x05, 0xa1, 0x29, 0x1e, 0x3a, 0x78, 0xee, - 0x9a, 0x7e, 0xee, 0xd8, 0xff, 0x10, 0x5c, 0x5f, 0x6b, 0xdf, 0xba, 0x51, 0x0f, 0x11, 0x93, 0x59, - 0x6b, 0xff, 0xbe, 0xfb, 0xa8, 0xef, 0xa5, 0x26, 0x4b, 0x8b, 0xde, 0xda, 0xfc, 0x43, 0x99, 0x7f, - 0xdf, 0x7d, 0xf2, 0x2b, 0xbb, 0xef, 0x2e, 0x3f, 0x97, 0x2d, 0xc5, 0x66, 0x45, 0x5b, 0xdd, 0xf7, - 0xc4, 0x04, 0x04, 0x96, 0x5c, 0x2e, 0x5b, 0x71, 0xb9, 0xc4, 0x5c, 0x72, 0xdd, 0xe5, 0xf7, 0x37, - 0xb6, 0xda, 0x69, 0xff, 0xdf, 0x75, 0x03, 0xe5, 0x5b, 0xbf, 0x97, 0x3d, 0xbd, 0x6e, 0x26, 0x5f, - 0x4f, 0xfa, 0xbd, 0xee, 0x22, 0x79, 0xc2, 0x6a, 0x5d, 0x9b, 0xcb, 0x94, 0xc2, 0x8a, 0xdd, 0x79, - 0xcd, 0xf6, 0xff, 0xee, 0xaf, 0x79, 0x80, 0x90, 0x74, 0x58, 0xef, 0x9d, 0xee, 0xdb, 0x83, 0xdd, - 0xbb, 0xcf, 0xb8, 0xca, 0xf7, 0x1d, 0xdf, 0x7e, 0x50, 0xa1, 0xdb, 0x66, 0x7f, 0x77, 0x15, 0xf5, - 0x4d, 0x3f, 0xe6, 0xea, 0x3d, 0xcf, 0xf3, 0x42, 0x2e, 0x5c, 0x4e, 0xda, 0x19, 0x5f, 0x8a, 0xf3, - 0x5b, 0xeb, 0xbe, 0xb3, 0x1e, 0x8b, 0xe9, 0x7a, 0xf7, 0xa7, 0x5f, 0xfa, 0x10, 0xff, 0x7b, 0xdf, - 0xbc, 0x1c, 0x11, 0x31, 0x6e, 0xee, 0x20, 0x45, 0x59, 0xc4, 0x9d, 0x12, 0x77, 0x6d, 0xb0, 0x9a, - 0x80, 0x9f, 0xb3, 0xef, 0x7f, 0xf7, 0xc9, 0xf9, 0xff, 0xd3, 0x26, 0x37, 0x5f, 0xb7, 0xeb, 0x1f, - 0xa0, 0xee, 0xe4, 0xc9, 0xa9, 0xa9, 0x16, 0x54, 0xd3, 0xff, 0xd6, 0x4e, 0x40, 0x41, 0x23, 0xd6, - 0x7c, 0xef, 0x36, 0x76, 0xeb, 0x2e, 0x55, 0xb6, 0xff, 0xf0, 0xa0, 0x9b, 0x97, 0x07, 0x54, 0x3b, - 0x57, 0x55, 0x4c, 0x5e, 0xb6, 0xb5, 0xdb, 0x6f, 0x4d, 0x30, 0xba, 0x80, 0xfd, 0x52, 0xbd, 0x5d, - 0x34, 0xdb, 0xff, 0x92, 0x2d, 0x24, 0xbf, 0x1c, 0xdf, 0x13, 0xfa, 0xad, 0x7e, 0xbc, 0xd8, 0xb7, - 0x9b, 0xc7, 0x3f, 0xb6, 0xdd, 0xf5, 0x93, 0xce, 0x2a, 0x26, 0xae, 0x83, 0xbb, 0xef, 0x3e, 0x34, - 0x65, 0xff, 0x4d, 0x3e, 0x31, 0xd0, 0x20, 0x04, 0x63, 0x43, 0xca, 0xb1, 0x5f, 0x79, 0x3a, 0x2c, - 0x13, 0x45, 0x5d, 0xbf, 0xf8, 0x8f, 0xa2, 0x79, 0x0f, 0x88, 0x7a, 0x7b, 0x8a, 0xda, 0x69, 0x2f, - 0xda, 0xbf, 0x8d, 0x55, 0xdd, 0xc4, 0x55, 0x1f, 0x49, 0xae, 0x6c, 0x36, 0x25, 0xab, 0xd8, 0x0e, - 0x3d, 0x41, 0xea, 0xee, 0x88, 0x33, 0xb3, 0x36, 0x36, 0xe5, 0xc2, 0x7c, 0x89, 0xa7, 0x1f, 0x36, - 0x05, 0xc1, 0x0f, 0xdf, 0x49, 0x74, 0xaf, 0x1d, 0x2a, 0x69, 0xff, 0xea, 0x05, 0xe0, 0x00, 0x09, - 0x43, 0xb8, 0xbe, 0x2b, 0xfb, 0x45, 0x4b, 0x6d, 0xff, 0x13, 0xbc, 0x61, 0x83, 0xea, 0xa9, 0xf3, - 0x65, 0xdf, 0x8b, 0x9b, 0x1b, 0x6d, 0x35, 0x29, 0x42, 0x21, 0x80, 0x60, 0x18, 0x02, 0x05, 0x54, - 0x7d, 0x34, 0xff, 0xd8, 0x19, 0x9b, 0x26, 0x68, 0x59, 0x88, 0x3c, 0xd7, 0x76, 0xd9, 0x6b, 0x4f, - 0x03, 0x02, 0x7c, 0x0b, 0xe7, 0xe2, 0x5f, 0x5f, 0xed, 0xe4, 0x05, 0x01, 0x68, 0x61, 0x9e, 0x89, - 0x62, 0xb4, 0xf4, 0xb1, 0x2e, 0x09, 0x59, 0x25, 0xb7, 0x84, 0x9c, 0x01, 0xad, 0x77, 0x87, 0xcf, - 0xf7, 0xbd, 0xb3, 0x74, 0xd9, 0xef, 0xf4, 0x11, 0xa2, 0x50, 0x10, 0xe0, 0xc2, 0xe2, 0x1f, 0x8e, - 0x2b, 0x4f, 0xda, 0xf6, 0xc0, 0x57, 0xec, 0xc5, 0x2c, 0x48, 0x15, 0x17, 0xdf, 0x77, 0x84, 0x60, - 0x9b, 0x7b, 0x30, 0x37, 0xea, 0xa4, 0xdf, 0x7e, 0x58, 0xa7, 0x92, 0x13, 0xc4, 0x8b, 0x1b, 0xbc, - 0x8a, 0x17, 0xad, 0x27, 0x4d, 0x44, 0xae, 0x19, 0x9b, 0xfa, 0xba, 0x49, 0x3b, 0xbf, 0x6f, 0xda, - 0x1c, 0x49, 0x9a, 0x48, 0x45, 0xae, 0xee, 0xfb, 0x77, 0xb2, 0x25, 0xc1, 0x02, 0x5a, 0xde, 0x6a, - 0x7f, 0x10, 0x93, 0x72, 0x94, 0xa8, 0x5f, 0x5d, 0x62, 0xf1, 0x78, 0xb8, 0x95, 0x00, 0x93, 0xf2, - 0x72, 0xf0, 0xee, 0xdf, 0xa1, 0x00, 0xe1, 0xf4, 0x28, 0xab, 0xef, 0xdf, 0xda, 0x19, 0x7f, 0xd9, - 0x8d, 0xbe, 0xed, 0x55, 0x3c, 0xd2, 0xfb, 0x5f, 0xb2, 0x7a, 0x89, 0x02, 0xc7, 0x77, 0xbb, 0xbd, - 0xdf, 0xf2, 0xe2, 0x8b, 0xf9, 0x39, 0x9c, 0x78, 0x63, 0xd8, 0x50, 0xab, 0xef, 0xe5, 0xdb, 0x66, - 0xf6, 0x68, 0x50, 0xd6, 0x37, 0x4e, 0x17, 0xa9, 0x3b, 0xbf, 0xb6, 0xc4, 0xc1, 0x61, 0xc1, 0x94, - 0xde, 0xde, 0x2e, 0x9f, 0xbf, 0x8f, 0xe5, 0x34, 0x49, 0xcd, 0x99, 0x0d, 0x15, 0x21, 0x35, 0x29, - 0xb2, 0xab, 0xd2, 0x68, 0xf1, 0xdb, 0xb2, 0x61, 0x33, 0xa6, 0x5c, 0x4f, 0x15, 0x9b, 0xe9, 0x49, - 0x48, 0x82, 0xd8, 0x57, 0xd9, 0xd5, 0xb6, 0x21, 0x46, 0x70, 0x07, 0xbd, 0xe8, 0xb3, 0x93, 0xb6, - 0x2a, 0xe9, 0x35, 0xa6, 0xdd, 0x1e, 0x8d, 0xe3, 0x94, 0x04, 0x8b, 0x77, 0x3f, 0x84, 0xda, 0x36, - 0xff, 0x55, 0x55, 0x4d, 0x34, 0xd3, 0x0a, 0xe0, 0x6b, 0xaa, 0xcf, 0x6d, 0xb4, 0xd3, 0x6b, 0x4b, - 0xdf, 0xe8, 0xa5, 0x5d, 0x8f, 0x4c, 0xd2, 0x71, 0x0f, 0x9d, 0xa2, 0xe3, 0xf7, 0xc5, 0x91, 0xdc, - 0xfd, 0xf8, 0x80, 0x9c, 0xe8, 0x15, 0x0e, 0x08, 0x99, 0x0c, 0x55, 0xca, 0x02, 0x9d, 0xff, 0xf7, - 0xcd, 0xa4, 0x57, 0xe5, 0x55, 0x36, 0x37, 0x1c, 0xb8, 0x5b, 0xbe, 0x96, 0xf0, 0x38, 0x00, 0x54, - 0xf2, 0x55, 0xba, 0xb1, 0xc4, 0x5e, 0xbf, 0xbf, 0xf0, 0x02, 0xf4, 0x22, 0x2f, 0x7d, 0x72, 0xfd, - 0xd3, 0x37, 0x2f, 0xdf, 0xf4, 0x63, 0x3c, 0x67, 0x5d, 0x5f, 0xc3, 0x8f, 0x22, 0x8f, 0x97, 0x29, - 0xb6, 0x98, 0xa5, 0xe6, 0x74, 0x7b, 0xe1, 0x37, 0x8b, 0x8a, 0x5a, 0xcb, 0xd3, 0x6f, 0x2e, 0x16, - 0xce, 0x73, 0xe5, 0xeb, 0xe2, 0xaf, 0xee, 0xa2, 0x02, 0x1a, 0x0e, 0x84, 0x45, 0x4a, 0x5f, 0xd5, - 0xad, 0x69, 0x9b, 0xc7, 0x96, 0x7e, 0xa6, 0xee, 0x8c, 0x19, 0x9c, 0x8d, 0x6a, 0xbd, 0x49, 0x0e, - 0xb1, 0x9f, 0x5b, 0xfe, 0xcb, 0xaf, 0xad, 0x41, 0xc4, 0x48, 0xbb, 0xfb, 0x74, 0xa0, 0xcb, 0x5d, - 0x27, 0x79, 0x92, 0x15, 0x24, 0x03, 0xb3, 0x4e, 0xbe, 0xff, 0xfa, 0xcd, 0xdb, 0x67, 0x86, 0x1a, - 0x86, 0x37, 0x3a, 0xf7, 0x88, 0x1c, 0x2f, 0x39, 0xfc, 0x4f, 0x1f, 0x99, 0x5b, 0x5e, 0x06, 0xd4, - 0x07, 0x90, 0x85, 0x22, 0x9f, 0x13, 0xac, 0xbc, 0xff, 0xcd, 0xbb, 0x75, 0x5e, 0xd8, 0x9f, 0xa3, - 0x50, 0x20, 0x94, 0x4b, 0x5d, 0x30, 0x75, 0x79, 0xba, 0xdd, 0x31, 0x0e, 0x7b, 0x5d, 0x9e, 0x8f, - 0x18, 0x8d, 0xfd, 0x86, 0xf7, 0x27, 0xad, 0x39, 0x72, 0x3b, 0x69, 0xdb, 0xf9, 0x7f, 0xff, 0x8f, - 0x21, 0x7f, 0xc1, 0xc8, 0x79, 0x7b, 0x51, 0x80, 0x00, 0x20, 0x0a, 0x86, 0x80, 0x54, 0x71, 0xb6, - 0xde, 0xdb, 0x7f, 0xfd, 0xf7, 0xd0, 0x66, 0xed, 0x97, 0x22, 0x10, 0xe7, 0xe7, 0x21, 0x75, 0x47, - 0xa6, 0x9f, 0xfe, 0xdb, 0x63, 0xea, 0x69, 0xff, 0xc7, 0xeb, 0x57, 0xd6, 0x81, 0x6d, 0xfa, 0xa4, - 0x97, 0xe1, 0x75, 0x02, 0x12, 0xde, 0xfc, 0xdf, 0xfe, 0xdb, 0x7c, 0x54, 0xd3, 0xf4, 0xd3, 0x09, - 0xa8, 0x60, 0x4d, 0x0d, 0xb7, 0xb6, 0xdf, 0x5a, 0xfc, 0x78, 0xf5, 0x18, 0x7b, 0xbe, 0x9e, 0x9d, - 0x34, 0xfd, 0xb6, 0xff, 0xfd, 0x7d, 0x0d, 0x9f, 0x19, 0xe7, 0x34, 0xcb, 0x9d, 0x28, 0x3d, 0x2f, - 0x4d, 0x34, 0xff, 0x8d, 0x46, 0x3f, 0xe8, 0x6c, 0xd9, 0xcb, 0xaf, 0x4d, 0x6f, 0x17, 0x0e, 0xdd, - 0xb6, 0xff, 0xe3, 0xc2, 0x39, 0xaf, 0x17, 0xbb, 0x73, 0x71, 0x0e, 0x45, 0x6d, 0xdc, 0xd9, 0x91, - 0x26, 0xd3, 0x6f, 0xfc, 0x2e, 0x30, 0x28, 0xba, 0x44, 0xd6, 0xcf, 0xc5, 0x4d, 0x52, 0xbe, 0xad, - 0x56, 0xa9, 0x25, 0xb6, 0xdf, 0xd5, 0xea, 0xae, 0x23, 0x1d, 0x28, 0x7c, 0xfe, 0x5f, 0x7c, 0x65, - 0x7e, 0x18, 0xf4, 0x80, 0x2a, 0xdb, 0xd3, 0x4f, 0x88, 0x61, 0xbe, 0x01, 0xd1, 0x6a, 0xe4, 0xc9, - 0x69, 0xc5, 0xcf, 0x4b, 0xb5, 0xa5, 0x68, 0x61, 0x59, 0x4d, 0x36, 0x9a, 0xfd, 0x5c, 0x9d, 0xea, - 0xe3, 0x0d, 0x5d, 0x48, 0x5c, 0x6b, 0x85, 0xea, 0xec, 0x89, 0x9a, 0x93, 0xda, 0x5d, 0xda, 0x15, - 0x38, 0xcd, 0xed, 0xff, 0xd4, 0x57, 0x8f, 0xd7, 0xaf, 0xa7, 0x75, 0xd7, 0xb1, 0x6e, 0x92, 0x5e, - 0x13, 0x50, 0x43, 0xf9, 0xbe, 0x7d, 0xb6, 0xfd, 0x34, 0xf4, 0xd3, 0x19, 0x4d, 0xc9, 0x48, 0x2c, - 0x26, 0x00, 0x43, 0x2b, 0xe4, 0xe4, 0xc5, 0x2a, 0xa9, 0xf3, 0xb7, 0xb7, 0xbd, 0xc0, 0xec, 0x80, - 0x62, 0x28, 0x38, 0x0e, 0xfb, 0xf7, 0xf0, 0x63, 0x6a, 0x59, 0x89, 0xad, 0x6c, 0x45, 0xbe, 0x7d, - 0x4b, 0x2f, 0x6c, 0xbf, 0xbe, 0x0d, 0x66, 0x60, 0x83, 0x42, 0x1b, 0x04, 0x47, 0x73, 0xe7, 0x47, - 0x76, 0x64, 0xe1, 0x10, 0xc4, 0x76, 0x7c, 0xdf, 0x4f, 0xdf, 0xbe, 0x1a, 0x08, 0x99, 0xff, 0xb3, - 0x8a, 0x54, 0xe6, 0xc7, 0xa3, 0x77, 0xdb, 0xa3, 0xaf, 0x8b, 0x10, 0x7f, 0x2a, 0x04, 0xa3, 0x78, - 0xad, 0xa1, 0x54, 0x60, 0x06, 0xac, 0x74, 0xa5, 0xf7, 0xd5, 0x55, 0x7f, 0xdb, 0x05, 0x09, 0x08, - 0x46, 0xa8, 0x5c, 0x86, 0x3a, 0x5c, 0xec, 0x5a, 0x6c, 0x62, 0x8e, 0xd4, 0x93, 0xf8, 0x01, 0x11, - 0x65, 0xc5, 0x64, 0x51, 0x47, 0x14, 0x71, 0x5b, 0xbe, 0xd6, 0xfd, 0xf7, 0x94, 0xdc, 0x5c, 0x02, - 0x97, 0xbd, 0x4f, 0x8f, 0xa6, 0x2e, 0x38, 0xb2, 0xaa, 0x9a, 0x1d, 0x51, 0x3c, 0x6d, 0xcf, 0xff, - 0x71, 0xa0, 0x09, 0x11, 0x14, 0x5d, 0x55, 0x6b, 0x11, 0xf9, 0xdf, 0x17, 0xaf, 0xb6, 0x6a, 0x47, - 0xc2, 0x30, 0xb2, 0x09, 0x9c, 0x09, 0xd7, 0xa9, 0x2b, 0xfe, 0x89, 0x42, 0x20, 0xb3, 0x15, 0x84, - 0x4c, 0x5e, 0xc5, 0x79, 0xe8, 0x41, 0xc2, 0x40, 0xa9, 0x73, 0xf4, 0xfb, 0x89, 0x50, 0x16, 0x64, - 0x92, 0xdb, 0xe0, 0x03, 0x22, 0x94, 0x08, 0x08, 0x8a, 0xcf, 0xdf, 0xbd, 0xfb, 0xf9, 0x5a, 0xdb, - 0x14, 0x2d, 0x67, 0x11, 0xcd, 0xe9, 0xa4, 0xba, 0x6a, 0x59, 0xbe, 0x1a, 0x08, 0xa2, 0x4a, 0x16, - 0x53, 0xa4, 0xd1, 0x7d, 0x6c, 0x9b, 0xcd, 0xff, 0xb3, 0x3a, 0x12, 0x2e, 0xdf, 0x71, 0x68, 0xa7, - 0xcc, 0xd0, 0xd1, 0x49, 0x1d, 0xcd, 0x17, 0x7e, 0xfc, 0x73, 0x02, 0x88, 0xd1, 0x88, 0xa9, 0x12, - 0xaf, 0x76, 0x8f, 0xad, 0xd2, 0xe1, 0x60, 0xd4, 0x59, 0x72, 0x6d, 0x7c, 0xb1, 0x8a, 0x53, 0x54, - 0x50, 0x52, 0x0a, 0xb4, 0xff, 0x79, 0xf3, 0xd9, 0x4a, 0x92, 0x04, 0x21, 0x5e, 0xad, 0x51, 0xdd, - 0x9c, 0xf8, 0xfe, 0xd6, 0x5f, 0xbf, 0x1f, 0xc8, 0x82, 0x01, 0x09, 0xca, 0xee, 0xab, 0xbf, 0xbe, - 0xf8, 0xff, 0x21, 0xd1, 0x08, 0xa3, 0x29, 0xa7, 0xbf, 0xcf, 0xb8, 0x0c, 0xc1, 0x0e, 0xbd, 0x12, - 0x88, 0x12, 0x6f, 0xdf, 0x9d, 0x39, 0xca, 0xa6, 0x92, 0x87, 0x06, 0x5c, 0xde, 0xa9, 0x76, 0x5d, - 0x06, 0x05, 0x84, 0x94, 0x2a, 0x97, 0x55, 0x77, 0xcc, 0x21, 0x83, 0xc8, 0xe2, 0xdb, 0x96, 0xea, - 0xd5, 0xc9, 0xc2, 0xf5, 0xa4, 0x17, 0xab, 0x20, 0xef, 0xe9, 0xc3, 0x51, 0x86, 0xe9, 0x87, 0x13, - 0x17, 0x7f, 0xa3, 0xa3, 0x03, 0xac, 0x12, 0x6f, 0x3e, 0x6c, 0xaa, 0x76, 0x84, 0xfc, 0x4b, 0xae, - 0xbe, 0xa6, 0x9f, 0xf6, 0x17, 0xe3, 0x45, 0xb8, 0x06, 0x99, 0x4d, 0x95, 0x56, 0x6f, 0xa6, 0x6f, - 0xdf, 0x6d, 0x3b, 0x9a, 0x1b, 0x92, 0x8b, 0x04, 0xf6, 0x32, 0x78, 0xe5, 0x67, 0x38, 0x2f, 0xfc, - 0x43, 0xf6, 0xcb, 0xcd, 0xf1, 0x6d, 0x3f, 0x6d, 0xff, 0x6b, 0x0b, 0xc6, 0x30, 0x47, 0x10, 0xf4, - 0xeb, 0x77, 0x15, 0xd3, 0x6f, 0x1c, 0x54, 0xa4, 0xfe, 0x65, 0xf1, 0x95, 0x74, 0xd3, 0xfb, 0x32, - 0x9c, 0x8a, 0xe4, 0x80, 0x20, 0xa6, 0x49, 0x3c, 0xd9, 0x36, 0x42, 0xe1, 0x51, 0x27, 0x34, 0xc1, - 0x9d, 0x6e, 0xfc, 0x3c, 0xf6, 0x4f, 0x5f, 0xca, 0xcb, 0x0a, 0x03, 0x22, 0x04, 0xc8, 0xb0, 0xaf, - 0x11, 0xbb, 0xc6, 0xac, 0xee, 0xf1, 0x56, 0x66, 0x3d, 0x2a, 0x68, 0xfc, 0x5c, 0x9f, 0x65, 0x00, - 0x47, 0x00, 0x63, 0x24, 0xa2, 0x79, 0x27, 0xf3, 0x1d, 0x5d, 0x9f, 0x5f, 0xb6, 0xf1, 0xa2, 0x87, - 0x3d, 0xb6, 0xfe, 0xf3, 0x82, 0xce, 0xca, 0xa4, 0xa1, 0x52, 0x1b, 0x0d, 0x82, 0x7c, 0xfe, 0x2a, - 0xce, 0x5b, 0xbe, 0xf7, 0x18, 0xa4, 0x9c, 0xbe, 0x6f, 0xe6, 0xe3, 0x0f, 0x26, 0xfa, 0x56, 0x9a, - 0x9b, 0x9b, 0x39, 0x8d, 0x7f, 0xc5, 0x78, 0x87, 0x23, 0x10, 0x7a, 0xfc, 0xbf, 0xa2, 0xee, 0x95, - 0x1b, 0xfb, 0xc4, 0xc9, 0xf5, 0x75, 0x1d, 0x75, 0x44, 0x58, 0xd2, 0x0f, 0x0f, 0x14, 0xe0, 0x1c, - 0xbb, 0x55, 0x38, 0x73, 0x2d, 0xc4, 0x04, 0x11, 0x44, 0x55, 0xb6, 0xdb, 0x7f, 0x7f, 0xd6, 0x2f, - 0xe2, 0x86, 0xf0, 0xaa, 0xa9, 0xdc, 0x66, 0xe4, 0xfe, 0x5c, 0xc6, 0xe9, 0xa7, 0xfe, 0xb9, 0xd7, - 0xab, 0xe4, 0x0c, 0x56, 0x99, 0x72, 0xfc, 0xde, 0xb5, 0x9a, 0x88, 0xc0, 0x70, 0x42, 0xfd, 0xe9, - 0x1f, 0xcd, 0x5e, 0x13, 0x50, 0xe0, 0x0e, 0xf2, 0x6e, 0xd9, 0x3c, 0x6d, 0xb6, 0x9a, 0x7f, 0xf1, - 0xd9, 0x95, 0x26, 0x2a, 0xef, 0x5f, 0xaa, 0xa5, 0xba, 0x7e, 0xe9, 0xe5, 0xc6, 0xbc, 0x77, 0x90, - 0x9a, 0x80, 0x43, 0x5d, 0x73, 0x6f, 0x4d, 0x34, 0xd3, 0xfd, 0x34, 0xe2, 0xfe, 0x73, 0xee, 0xa8, - 0x26, 0x40, 0x4b, 0xd2, 0xd6, 0x0a, 0xf0, 0xef, 0x78, 0xac, 0xfb, 0xef, 0x5d, 0x38, 0x87, 0xba, - 0x54, 0xad, 0xdb, 0x6f, 0xe6, 0xd3, 0x2e, 0xe2, 0xef, 0xcd, 0x08, 0x2c, 0xbf, 0x72, 0xe0, 0xca, - 0xb7, 0x2d, 0x1b, 0xf7, 0x35, 0x1e, 0xfb, 0xf9, 0x94, 0x8b, 0x8a, 0xe9, 0x5e, 0x2b, 0x9f, 0xdf, - 0xb6, 0x3e, 0xe1, 0xda, 0x4e, 0x8b, 0x47, 0x4b, 0xb5, 0x9b, 0x04, 0xff, 0x6c, 0xbf, 0x06, 0xb4, - 0x32, 0x6a, 0xe0, 0x15, 0x67, 0x8b, 0x8a, 0x06, 0x96, 0x17, 0xad, 0xfa, 0xdf, 0x5e, 0x5c, 0xc4, - 0x0e, 0x25, 0x07, 0x9f, 0x26, 0x33, 0x06, 0xb6, 0xae, 0x63, 0x12, 0x85, 0x39, 0xab, 0x46, 0x4a, - 0xdc, 0xba, 0x52, 0xe1, 0x22, 0xbf, 0x19, 0x5e, 0xa8, 0x8c, 0x86, 0xd5, 0xc4, 0xd8, 0x22, 0x1c, - 0x17, 0x05, 0xa9, 0xb7, 0xdd, 0xaa, 0xab, 0xb5, 0x5b, 0x98, 0xbb, 0x7f, 0x9a, 0xd6, 0xc4, 0xc4, - 0x24, 0x76, 0x62, 0x20, 0x43, 0x9a, 0x43, 0x54, 0x10, 0xe5, 0xbe, 0xdd, 0x62, 0xb5, 0x08, 0x98, - 0x64, 0xc4, 0x38, 0x29, 0x48, 0x25, 0x46, 0x06, 0x6d, 0xf6, 0x0c, 0x52, 0xd2, 0x6b, 0x5a, 0xc7, - 0xd1, 0x66, 0xef, 0xdf, 0x07, 0x22, 0xa5, 0xe8, 0x4b, 0x94, 0x3f, 0x66, 0x04, 0xb0, 0x8e, 0x9e, - 0xac, 0xbd, 0x76, 0x5d, 0x94, 0x55, 0xd1, 0xd8, 0x96, 0x50, 0x97, 0xfa, 0xdd, 0xa2, 0x07, 0xe9, - 0x99, 0xa2, 0x10, 0x10, 0x11, 0x7d, 0x0e, 0x88, 0x70, 0x4f, 0x3a, 0x4c, 0x69, 0xb1, 0xfe, 0x6c, - 0xee, 0xdc, 0x58, 0x90, 0xe4, 0x53, 0x2f, 0xd8, 0x78, 0x5a, 0xdd, 0xe4, 0xe1, 0x49, 0x58, 0x83, - 0x0a, 0xa5, 0xee, 0x96, 0xb6, 0xf7, 0x5e, 0xbd, 0x74, 0xe3, 0x1f, 0x40, 0x86, 0xbe, 0xa6, 0x26, - 0xea, 0xf0, 0x51, 0xde, 0x24, 0x0b, 0x76, 0xaa, 0x92, 0xdb, 0x73, 0x16, 0x73, 0x9f, 0xb1, 0x95, - 0x1a, 0x9a, 0x24, 0xb8, 0xc6, 0x4b, 0xf7, 0xf6, 0x54, 0x9b, 0x05, 0x2a, 0xf1, 0x71, 0x60, 0xa6, - 0xe6, 0x32, 0xb1, 0xbd, 0x2f, 0xe1, 0x29, 0x53, 0x80, 0x51, 0xef, 0x77, 0x7e, 0xee, 0x9d, 0xef, - 0x7e, 0x45, 0x7c, 0x6c, 0x58, 0x00, 0xcc, 0x6b, 0xdd, 0xdc, 0x57, 0x7b, 0xe8, 0xef, 0x62, 0x2d, - 0xb9, 0x3e, 0x45, 0x3e, 0xe7, 0xdf, 0x77, 0x97, 0xdd, 0xe5, 0x70, 0x96, 0x75, 0x02, 0x5c, 0x24, - 0x1c, 0xca, 0xc0, 0xb1, 0x62, 0xb9, 0x4b, 0xba, 0x64, 0xbf, 0xc4, 0xf3, 0x8f, 0x2c, 0x49, 0xf3, - 0x5d, 0xad, 0x09, 0x17, 0xad, 0x40, 0x82, 0x3c, 0x5c, 0x92, 0xc4, 0xd5, 0xba, 0x0b, 0xd9, 0x15, - 0xc7, 0x4f, 0x14, 0x32, 0x9c, 0xe6, 0xa5, 0xb6, 0x4c, 0xd7, 0x11, 0x81, 0xe0, 0x68, 0xb2, 0x3d, - 0x98, 0xf3, 0xea, 0x77, 0x72, 0x12, 0x0c, 0x92, 0x34, 0xcb, 0x02, 0xfe, 0x78, 0x77, 0x8a, 0xad, - 0x73, 0x11, 0xa9, 0xf2, 0x2d, 0x11, 0xf1, 0xc7, 0x13, 0x6e, 0x36, 0x0d, 0x82, 0x5e, 0x48, 0x24, - 0x1c, 0xa4, 0xf4, 0x77, 0x01, 0x90, 0xca, 0x43, 0x88, 0x84, 0x81, 0x62, 0x9e, 0x06, 0xd5, 0xb9, - 0xbf, 0xa3, 0x35, 0x1b, 0x4a, 0x75, 0x08, 0xc8, 0x46, 0x1d, 0x8e, 0xf8, 0x8d, 0xff, 0x6e, 0x98, - 0xb7, 0x4d, 0x3c, 0x51, 0x7f, 0x6d, 0x12, 0x8c, 0x13, 0x62, 0xbc, 0x92, 0x3e, 0xbd, 0x29, 0xc6, - 0x03, 0x80, 0x14, 0x57, 0x85, 0xcb, 0x77, 0xbb, 0xe4, 0xf8, 0x9c, 0xf4, 0xfa, 0xe6, 0x81, 0x0e, - 0xab, 0xed, 0x03, 0x1f, 0x10, 0x3d, 0x12, 0x89, 0x34, 0xc2, 0x6b, 0x9d, 0x23, 0x82, 0x16, 0xdb, - 0xdd, 0xaa, 0xab, 0x50, 0x04, 0xa1, 0x7b, 0x46, 0xc9, 0xe8, 0xb2, 0x88, 0xbb, 0xe9, 0x60, 0xc4, - 0x0e, 0x89, 0x30, 0xb8, 0x9e, 0x6c, 0x93, 0xb4, 0xcf, 0x37, 0x4f, 0x76, 0x73, 0x70, 0x10, 0x04, - 0x6d, 0x79, 0xf8, 0x55, 0x40, 0x84, 0x33, 0x53, 0xe8, 0xfb, 0xa7, 0xbe, 0x9a, 0x7a, 0x69, 0xcd, - 0xa3, 0xa3, 0x8f, 0x57, 0x65, 0x8b, 0xba, 0xdb, 0x1e, 0x56, 0xca, 0xa4, 0xba, 0x76, 0x9d, 0xde, - 0x97, 0xbb, 0xd3, 0x4f, 0xfd, 0x0d, 0xc2, 0xf3, 0x39, 0x01, 0xcc, 0x88, 0x85, 0xf5, 0xb7, 0x2b, - 0x88, 0x79, 0xb1, 0x62, 0xd3, 0xcf, 0xe3, 0x3a, 0xc8, 0xca, 0x67, 0xc0, 0xcc, 0x01, 0xc4, 0x45, - 0x62, 0xbb, 0xbd, 0xb2, 0xe6, 0xb9, 0xfd, 0x55, 0x8b, 0xb4, 0x6e, 0xfd, 0x5b, 0x37, 0x5f, 0xec, - 0x14, 0xcd, 0x9d, 0x2a, 0xe3, 0xa4, 0x59, 0xf9, 0xfd, 0x97, 0x6f, 0x74, 0x07, 0xcf, 0xd9, 0xe9, - 0x8c, 0x2b, 0x34, 0x54, 0xa3, 0x37, 0x18, 0xef, 0x5e, 0x94, 0x4b, 0xbe, 0x21, 0xc1, 0x95, 0x38, - 0x71, 0xbd, 0x64, 0xf2, 0xc8, 0x55, 0x5d, 0x62, 0x75, 0x70, 0x78, 0x43, 0x51, 0x15, 0xa5, 0x6e, - 0xa6, 0x0f, 0x7c, 0x7f, 0xb1, 0x96, 0xf5, 0x9b, 0x9f, 0xd4, 0xee, 0x7f, 0x05, 0xc9, 0x37, 0xbf, - 0xea, 0xea, 0xef, 0x18, 0x01, 0xae, 0xea, 0xb1, 0xd5, 0x6e, 0x47, 0xb7, 0x12, 0x2e, 0x69, 0xbf, - 0xc4, 0x3c, 0x4f, 0x30, 0xc7, 0x52, 0xa6, 0xdb, 0xff, 0xd7, 0xcd, 0xdf, 0xe8, 0x2f, 0x3d, 0xab, - 0x97, 0xbf, 0x76, 0xc1, 0xdb, 0x1c, 0xf8, 0xa3, 0xa1, 0xf6, 0x48, 0x6a, 0x24, 0x7b, 0xbf, 0xee, - 0x5e, 0xad, 0xf8, 0x87, 0xac, 0x6e, 0xcb, 0x6f, 0x8c, 0x02, 0x08, 0x24, 0x01, 0xea, 0x49, 0x50, - 0x06, 0x00, 0x42, 0xbd, 0x2b, 0x70, 0x7f, 0xe5, 0xba, 0xea, 0xcb, 0x89, 0xdf, 0xcd, 0xc8, 0xca, - 0xee, 0x6e, 0xaa, 0x23, 0xfc, 0x88, 0x8a, 0xef, 0xd2, 0x7d, 0xdc, 0xb7, 0x26, 0xa6, 0x2b, 0x83, - 0x32, 0x60, 0x4a, 0x38, 0x3a, 0xd6, 0xe2, 0xf2, 0x08, 0x25, 0xd6, 0xd2, 0xe5, 0xcf, 0x9a, 0x15, - 0x50, 0x42, 0x79, 0xa2, 0xde, 0xdf, 0xdb, 0x57, 0x57, 0x52, 0xee, 0x02, 0xe6, 0xaa, 0x2a, 0xf2, - 0xbc, 0x48, 0x7d, 0xf6, 0x8b, 0xdb, 0x6f, 0xdf, 0xdb, 0xbb, 0x96, 0x01, 0x6a, 0x61, 0x21, 0x65, - 0xc1, 0x5b, 0xfb, 0xcb, 0xaf, 0x8a, 0x6f, 0xe3, 0x1f, 0x82, 0x50, 0xd3, 0x8a, 0xef, 0x6e, 0xde, - 0xf8, 0xa5, 0x19, 0x26, 0x9a, 0x7f, 0x8e, 0x88, 0x4d, 0x20, 0x37, 0xcd, 0xe3, 0xc9, 0x5f, 0xb7, - 0x2f, 0x2e, 0x62, 0xb8, 0xda, 0xdb, 0x6f, 0xe4, 0x41, 0x9d, 0x95, 0xc7, 0x80, 0x25, 0xdf, 0xed, - 0x74, 0x9f, 0x5c, 0x48, 0xa3, 0x08, 0x44, 0x09, 0xdf, 0x7b, 0x91, 0x53, 0xc5, 0x72, 0xed, 0x24, - 0xcb, 0x85, 0xf1, 0x24, 0xe9, 0x38, 0x8e, 0xbd, 0xf7, 0xab, 0xe5, 0xb8, 0x9d, 0x72, 0x6c, 0x65, - 0x4b, 0x95, 0x6b, 0x69, 0x3e, 0x09, 0xd9, 0x6d, 0x25, 0x8b, 0xbd, 0xb6, 0xff, 0xbb, 0x8b, 0xde, - 0xf7, 0x50, 0x11, 0x8a, 0x51, 0x58, 0x87, 0x21, 0x45, 0x65, 0xb9, 0x27, 0x38, 0xb7, 0xb5, 0x9b, - 0xcc, 0x7c, 0x75, 0x5a, 0x39, 0x80, 0x50, 0x58, 0x3a, 0x9f, 0xb3, 0x2d, 0xdd, 0x29, 0x4d, 0x36, - 0xea, 0xd0, 0x87, 0xcb, 0xc4, 0xf5, 0xb6, 0xff, 0xc3, 0x14, 0xe3, 0xf9, 0x33, 0xfd, 0x5a, 0xeb, - 0x77, 0x2d, 0xfe, 0xb3, 0xb6, 0xf7, 0xf9, 0x9a, 0x34, 0xa0, 0x8c, 0x50, 0x17, 0x02, 0x6b, 0x9b, - 0xcf, 0xc6, 0x57, 0x02, 0x8f, 0x25, 0xc9, 0xeb, 0x22, 0xfd, 0x61, 0x22, 0xb5, 0x9e, 0xdc, 0x20, - 0x13, 0xd8, 0x29, 0x40, 0x5b, 0x66, 0xf4, 0x57, 0xc6, 0xc1, 0x54, 0xcc, 0xd8, 0xff, 0xc4, 0xb8, - 0x4f, 0x79, 0x9d, 0x94, 0x05, 0xc8, 0x45, 0xf6, 0xc2, 0xc5, 0x89, 0x6c, 0xf9, 0xdb, 0x9b, 0x93, - 0xfc, 0x3d, 0xeb, 0x44, 0x8f, 0x20, 0x7c, 0x84, 0xd7, 0x6d, 0x96, 0x6a, 0x54, 0x06, 0xb0, 0x7d, - 0x86, 0x69, 0xfd, 0xb9, 0x6f, 0x04, 0xc1, 0x3f, 0x14, 0x41, 0x89, 0xb1, 0x35, 0x4c, 0x73, 0xb1, - 0xd6, 0x85, 0xe9, 0x43, 0x13, 0x41, 0xa1, 0x0e, 0x23, 0x97, 0xfb, 0x74, 0xe6, 0xdf, 0x72, 0x6c, - 0x36, 0xb7, 0x00, 0x21, 0x45, 0xbe, 0xe2, 0xbf, 0xde, 0xe6, 0x33, 0xca, 0x0d, 0x4b, 0x42, 0x83, - 0xfb, 0xd6, 0x9f, 0x82, 0x17, 0x93, 0xd5, 0x7e, 0x2b, 0xd3, 0xac, 0x56, 0xf4, 0xaa, 0x10, 0x02, - 0x94, 0x20, 0x2d, 0x82, 0x5d, 0xf1, 0x03, 0xee, 0x2b, 0xbe, 0xef, 0x47, 0x71, 0xff, 0xc0, 0xb9, - 0x04, 0x5f, 0x14, 0x78, 0xaf, 0x2f, 0xc7, 0xc5, 0xfc, 0x32, 0xe7, 0x02, 0xf4, 0x32, 0xee, 0x5f, - 0x1c, 0xbe, 0x9d, 0xde, 0x15, 0x24, 0x0a, 0xf6, 0x46, 0xbd, 0x6b, 0x7b, 0xfd, 0xe5, 0x21, 0x01, - 0x09, 0x67, 0x72, 0x29, 0x21, 0xc1, 0xa9, 0x48, 0x8a, 0x58, 0xe5, 0x27, 0x2b, 0x7e, 0xf9, 0xb8, - 0x5e, 0xae, 0x6c, 0x85, 0xca, 0xc9, 0x39, 0x5b, 0xaa, 0x52, 0xfe, 0xd3, 0x25, 0x7a, 0xa7, 0xe6, - 0xc5, 0x5f, 0x17, 0xbd, 0xa8, 0xec, 0x7e, 0xe8, 0xcc, 0x21, 0xe3, 0x28, 0x8d, 0x15, 0x2e, 0x6f, - 0x8a, 0xcd, 0xc1, 0xfe, 0xa4, 0x7d, 0xab, 0x8d, 0x64, 0xcc, 0x0e, 0x85, 0x15, 0x15, 0x57, 0x5a, - 0x29, 0x16, 0xd2, 0xf1, 0xb3, 0x27, 0xe3, 0xb9, 0x3f, 0x3a, 0x57, 0xa6, 0x5f, 0x21, 0x4e, 0x23, - 0x69, 0x31, 0x17, 0xcd, 0xd2, 0xf9, 0xbd, 0xfc, 0x95, 0x4c, 0x16, 0xe5, 0x38, 0xa3, 0x73, 0x76, - 0x4e, 0xfc, 0x2e, 0xe4, 0xcb, 0x5e, 0x88, 0x92, 0x3c, 0x1b, 0x00, 0x8e, 0x03, 0x8d, 0xff, 0x1b, - 0x54, 0x8e, 0xdd, 0x36, 0xd3, 0x3d, 0x76, 0xd3, 0xdc, 0xd9, 0x17, 0xfc, 0x45, 0x5c, 0x84, 0x91, - 0xbd, 0xfe, 0xfa, 0x71, 0xd5, 0x6e, 0x7f, 0x04, 0xcb, 0x99, 0x76, 0x13, 0xbb, 0xbe, 0x13, 0xf2, - 0x0a, 0x43, 0x14, 0xc6, 0x22, 0xcb, 0xde, 0xff, 0x7d, 0x6a, 0x31, 0x3a, 0x29, 0x46, 0xdd, 0x8a, - 0x2d, 0xdf, 0x5e, 0xfe, 0x7b, 0xe6, 0xd0, 0x8f, 0xba, 0xeb, 0xde, 0xba, 0xfc, 0x33, 0x9a, 0x6a, - 0xf4, 0x8a, 0x04, 0x62, 0x0d, 0x83, 0x5a, 0x6b, 0xe6, 0xd2, 0x86, 0x2c, 0x94, 0x43, 0x4b, 0xcf, - 0x35, 0xd6, 0xdf, 0xca, 0xf5, 0xe9, 0xdc, 0x21, 0x28, 0x3a, 0x0a, 0x88, 0x48, 0xb0, 0xbf, 0x46, - 0xc1, 0x65, 0xa3, 0x67, 0xdf, 0x58, 0xa9, 0xa0, 0x2a, 0x2a, 0x44, 0xdd, 0xa1, 0x3b, 0x66, 0xc7, - 0xf3, 0xee, 0xad, 0x7c, 0x43, 0x80, 0xf7, 0x83, 0x7b, 0x32, 0x27, 0x1e, 0x02, 0xae, 0xd1, 0x93, - 0xba, 0x6e, 0x5f, 0xc6, 0xfa, 0x6f, 0x52, 0xe6, 0x37, 0x76, 0xff, 0xe3, 0x80, 0xf7, 0xf4, 0xb5, - 0xde, 0xfb, 0xb6, 0x14, 0x57, 0xbe, 0x50, 0xaa, 0x20, 0x03, 0x35, 0x39, 0xdb, 0xf7, 0x3b, 0xaf, - 0xc5, 0xc9, 0xe3, 0x75, 0x78, 0xd2, 0x9c, 0x46, 0x44, 0xf8, 0x56, 0x80, 0x44, 0x11, 0xc2, 0x8a, - 0xdb, 0xf7, 0xaf, 0xe1, 0xd7, 0xb1, 0xb4, 0x2d, 0x9d, 0x29, 0xce, 0xc6, 0x5a, 0xfc, 0xbc, 0xfd, - 0x3a, 0x6f, 0x53, 0x78, 0xfd, 0x38, 0x1a, 0xf8, 0x8e, 0xb7, 0xf9, 0xbb, 0x31, 0xad, 0xdb, 0x4d, - 0xbe, 0xe3, 0x0f, 0xe9, 0xff, 0x46, 0x30, 0x55, 0x41, 0x00, 0xf4, 0x66, 0x2b, 0x69, 0x6c, 0xcf, - 0x3f, 0x5a, 0xcc, 0xdb, 0xc3, 0xc6, 0x62, 0xe1, 0xf2, 0x1b, 0xbb, 0x3d, 0x69, 0xa6, 0x4d, 0xb4, - 0xa9, 0x46, 0x8a, 0xbb, 0x6d, 0xff, 0x82, 0x16, 0x43, 0xd3, 0xa3, 0xdf, 0x50, 0x63, 0x77, 0x8f, - 0xaf, 0xd5, 0xf1, 0x72, 0x9f, 0xc7, 0x86, 0xeb, 0xb0, 0x51, 0x7f, 0x07, 0x6e, 0x6d, 0x52, 0xf3, - 0x4b, 0xcd, 0xb1, 0x06, 0x56, 0xcf, 0x14, 0xa0, 0xf7, 0xcf, 0x82, 0x1f, 0x59, 0x49, 0xad, 0x79, - 0xbb, 0x9b, 0xaa, 0xaa, 0x2c, 0x28, 0xe3, 0x29, 0x8e, 0x11, 0x30, 0x08, 0x26, 0x88, 0xb4, 0x9f, - 0x15, 0xb5, 0x89, 0xfa, 0x6b, 0x17, 0xbc, 0x7d, 0xad, 0x7e, 0x02, 0x14, 0x70, 0xa9, 0x1a, 0xd2, - 0x89, 0x7b, 0xec, 0x6d, 0xe2, 0x1f, 0x07, 0xbe, 0xfe, 0xf8, 0xe9, 0xbc, 0x4c, 0x08, 0x1a, 0xc7, - 0xb4, 0x2a, 0xdd, 0xf7, 0x97, 0xdb, 0xf6, 0xa3, 0x58, 0x97, 0xd0, 0x12, 0xb5, 0xc4, 0x20, 0x14, - 0x63, 0x0a, 0xf7, 0xe9, 0xcb, 0xdd, 0xbe, 0x11, 0xb8, 0x3e, 0xe5, 0xf6, 0x94, 0x86, 0xbf, 0x26, - 0x17, 0x21, 0x40, 0x55, 0xe3, 0xcc, 0xac, 0x73, 0x57, 0x1c, 0x40, 0x79, 0x2d, 0x25, 0xfb, 0x8d, - 0xac, 0x6e, 0xef, 0x6e, 0xc6, 0x20, 0x73, 0x33, 0x8b, 0x6d, 0xff, 0xab, 0xf3, 0x98, 0x85, 0x2b, - 0x22, 0x8e, 0xfa, 0xeb, 0xb6, 0x6c, 0xaf, 0x74, 0xdf, 0x14, 0x5b, 0xf8, 0xe6, 0x08, 0x39, 0x39, - 0x0d, 0x2d, 0xdb, 0x97, 0x31, 0x5e, 0xee, 0x28, 0xc4, 0xe9, 0xed, 0x35, 0x35, 0x57, 0xbc, 0x74, - 0x17, 0xa7, 0xbc, 0x57, 0x15, 0x99, 0xb3, 0x58, 0x85, 0xed, 0x63, 0x0e, 0x4c, 0x43, 0xe1, 0x45, - 0x6b, 0x59, 0x72, 0xde, 0xee, 0xf5, 0xe9, 0xf7, 0x3a, 0x69, 0xfd, 0xd2, 0x68, 0xca, 0xe0, 0x84, - 0x48, 0x68, 0x50, 0x59, 0xbb, 0x65, 0xe3, 0x4d, 0x6d, 0xbf, 0xfa, 0x8c, 0x9a, 0x99, 0x31, 0xe4, - 0x08, 0x1a, 0xc2, 0x6d, 0x95, 0xb8, 0x14, 0x10, 0xc9, 0xd2, 0xe4, 0xbc, 0x22, 0x60, 0xc4, 0x30, - 0xc2, 0x01, 0x19, 0xb0, 0xdf, 0x57, 0x73, 0x6a, 0xf6, 0x66, 0x80, 0xc4, 0x19, 0xae, 0xa0, 0xb5, - 0x9e, 0x5e, 0x2b, 0x96, 0xef, 0x1d, 0x49, 0x8a, 0xda, 0x15, 0xc1, 0x10, 0xbd, 0x96, 0x5e, 0x33, - 0x3d, 0x08, 0x8e, 0x97, 0x7f, 0xbf, 0xb6, 0x8e, 0xec, 0x58, 0x9e, 0x4e, 0x1b, 0x8a, 0xb6, 0x26, - 0xc9, 0x11, 0xb9, 0xfe, 0xb4, 0xd7, 0x8c, 0xa9, 0x36, 0xf5, 0x08, 0xb2, 0x04, 0x80, 0xf7, 0x4b, - 0xfb, 0x7f, 0xfa, 0x25, 0x47, 0xf4, 0xa0, 0x21, 0x19, 0x7d, 0x3b, 0xf4, 0xf4, 0xb8, 0x8c, 0xe3, - 0xcc, 0x1a, 0xbb, 0x5c, 0xf9, 0x4e, 0x9d, 0x91, 0xb4, 0xba, 0xfb, 0x54, 0xe8, 0x79, 0xb0, 0x3e, - 0x68, 0xe6, 0xeb, 0x7e, 0x6c, 0xeb, 0x35, 0x21, 0x71, 0x0d, 0x55, 0x54, 0xf8, 0x4e, 0xfd, 0x29, - 0x61, 0x94, 0x7d, 0x63, 0x84, 0xac, 0xc7, 0x4f, 0xd7, 0x19, 0x5c, 0x91, 0x59, 0xe5, 0x50, 0x64, - 0x04, 0xe4, 0x5b, 0x52, 0xc3, 0x36, 0xde, 0x0e, 0xde, 0xfb, 0xc2, 0xae, 0x00, 0xf5, 0xf7, 0x85, - 0x7b, 0xfa, 0xb2, 0x56, 0x57, 0xb8, 0xff, 0xfe, 0x4f, 0x26, 0xe9, 0x42, 0x37, 0x77, 0x5f, 0x7d, - 0xf2, 0xfe, 0x96, 0xe5, 0x6a, 0xf9, 0x7b, 0xff, 0x2f, 0x15, 0xbd, 0xde, 0x11, 0x70, 0x09, 0x9f, - 0x49, 0xd6, 0x7f, 0xfd, 0x6b, 0x22, 0x27, 0x27, 0xca, 0xd0, 0x88, 0x11, 0xf7, 0x2f, 0x14, 0x69, - 0x6e, 0xf5, 0x7d, 0x6f, 0xc0, 0x8b, 0x20, 0x7b, 0xc5, 0x2b, 0xfa, 0xc7, 0x95, 0xa5, 0x36, 0x4a, - 0xca, 0x89, 0xe3, 0xf6, 0xd8, 0x70, 0xb7, 0x27, 0x6b, 0xe6, 0x9f, 0xac, 0x5e, 0xa8, 0xbe, 0xe2, - 0xd0, 0x2c, 0xd8, 0x40, 0xe4, 0xac, 0x57, 0xad, 0x71, 0x9f, 0xa2, 0x3f, 0x47, 0x73, 0x34, 0xe5, - 0x59, 0x47, 0xb1, 0x9d, 0x24, 0x91, 0x47, 0x2e, 0x63, 0x66, 0x57, 0x24, 0xcb, 0x9d, 0x06, 0xd6, - 0xf1, 0x94, 0xef, 0xd2, 0x69, 0xed, 0xf8, 0xb5, 0x09, 0x2e, 0x9a, 0x74, 0x2b, 0x7f, 0xb5, 0xdd, - 0x47, 0xe0, 0x87, 0x4a, 0x66, 0x2f, 0x59, 0xab, 0xa3, 0x47, 0x67, 0xd9, 0xa6, 0x9b, 0x7e, 0x9c, - 0x86, 0xc2, 0x48, 0x1c, 0xd9, 0xb6, 0xec, 0xc6, 0xfb, 0xf8, 0x87, 0xbc, 0x4b, 0xa3, 0x25, 0x4a, - 0x8e, 0xf9, 0x08, 0x87, 0xff, 0x0f, 0x16, 0xe2, 0xbc, 0x0e, 0xb8, 0x60, 0x62, 0x22, 0x12, 0x04, - 0xfa, 0x58, 0xaf, 0x84, 0x70, 0xfd, 0x56, 0x6c, 0x55, 0xf7, 0x5f, 0x8a, 0xf8, 0x7f, 0x88, 0x1c, - 0xd2, 0x18, 0xd7, 0x9b, 0xfd, 0xe0, 0x18, 0x08, 0xf1, 0x11, 0xa0, 0xfd, 0xa9, 0xb3, 0xa2, 0xa7, - 0x4f, 0x04, 0x44, 0x43, 0x86, 0x53, 0xb5, 0x0a, 0xcd, 0xba, 0xe9, 0xe1, 0x5a, 0x77, 0x1b, 0x62, - 0xf7, 0xf8, 0xdb, 0x7e, 0x08, 0x80, 0x96, 0xf5, 0x24, 0x5f, 0x7b, 0xc4, 0x3e, 0x37, 0x37, 0xb7, - 0xdc, 0x4f, 0x86, 0x00, 0x17, 0x3c, 0x59, 0xad, 0xb0, 0x84, 0x44, 0x6d, 0x3f, 0xb9, 0x8f, 0x78, - 0xed, 0x0a, 0x1a, 0x70, 0xdb, 0xee, 0xb9, 0xab, 0x88, 0x7a, 0x97, 0x38, 0xda, 0x55, 0x3b, 0xfe, - 0xfd, 0xe2, 0x07, 0xa2, 0x69, 0x54, 0xbb, 0x89, 0x31, 0x0e, 0xdf, 0xd3, 0x7d, 0x5b, 0x17, 0xa9, - 0x83, 0xc8, 0x5a, 0xa6, 0x29, 0xc8, 0x0f, 0x58, 0x50, 0x56, 0xbd, 0xb6, 0xa9, 0xd5, 0xb5, 0xdb, - 0xb9, 0x00, 0xea, 0xbf, 0xde, 0x1c, 0x31, 0x2b, 0x18, 0x49, 0x88, 0x1e, 0xe9, 0x9f, 0x9b, 0x4d, - 0xc9, 0x15, 0x77, 0x3f, 0xf1, 0x58, 0xf7, 0xdf, 0xdb, 0xf1, 0x51, 0xfb, 0x2f, 0xe3, 0x90, 0x04, - 0xc5, 0x12, 0x15, 0x93, 0xbb, 0x62, 0xd5, 0xad, 0x92, 0x2b, 0xc7, 0x2f, 0x6f, 0x76, 0xcb, 0xd7, - 0x4d, 0x3f, 0xba, 0xb8, 0x83, 0xde, 0x1e, 0x08, 0x95, 0xdd, 0xea, 0x2b, 0x26, 0x58, 0x97, 0xed, - 0xb5, 0x15, 0xb5, 0x22, 0xf8, 0x55, 0x5e, 0xe4, 0x68, 0x10, 0xd3, 0x93, 0x16, 0x2d, 0xe2, 0x1e, - 0x92, 0x7b, 0xe5, 0x60, 0x2f, 0xab, 0x7b, 0xfa, 0x7d, 0xe9, 0x62, 0x15, 0xb7, 0x6d, 0xff, 0x58, - 0x9e, 0x6d, 0x44, 0xc9, 0xf9, 0x42, 0x47, 0x0f, 0xa2, 0x8b, 0xee, 0x88, 0xfd, 0x77, 0x88, 0x1c, - 0x6e, 0xba, 0x3b, 0xda, 0xd5, 0xc4, 0x54, 0x2b, 0xb4, 0x49, 0xcb, 0xdf, 0xe2, 0xbb, 0x9b, 0x9b, - 0x2b, 0x3e, 0xc0, 0xb4, 0xbb, 0x0f, 0x80, 0xb8, 0xb0, 0x09, 0xa2, 0x55, 0x9d, 0x73, 0x61, 0x34, - 0x2f, 0x5d, 0xde, 0x3a, 0xa3, 0xb9, 0xd1, 0xd4, 0x50, 0xef, 0x38, 0x65, 0x0a, 0xe9, 0x4b, 0x96, - 0xe6, 0xfb, 0x05, 0x1d, 0x5c, 0xe9, 0x72, 0x00, 0x42, 0xe9, 0x9b, 0xf3, 0x65, 0x72, 0x74, 0xed, - 0x9f, 0xd8, 0x5b, 0x4b, 0x5e, 0xf5, 0x6d, 0x45, 0xfb, 0x62, 0x7e, 0xef, 0xc2, 0x3a, 0x02, 0x78, - 0x80, 0xf7, 0x75, 0x97, 0x92, 0x2b, 0xf5, 0x6f, 0xac, 0x89, 0xbd, 0xfc, 0x2a, 0xa6, 0xf3, 0xd7, - 0x11, 0xa7, 0xa6, 0x9f, 0xff, 0xd9, 0x5a, 0x08, 0x2c, 0x45, 0xe0, 0xcb, 0x88, 0xf5, 0x67, 0x76, - 0x35, 0x55, 0x17, 0xb8, 0x3a, 0xbc, 0xdd, 0x6b, 0x5f, 0x88, 0x40, 0xe0, 0x2a, 0x50, 0x8d, 0x3a, - 0xbd, 0xf7, 0xa6, 0x5f, 0x1c, 0xdb, 0x6f, 0x05, 0xff, 0x7f, 0xc0, 0x07, 0x7b, 0xa9, 0x39, 0x17, - 0x22, 0xcb, 0x86, 0xe4, 0x8a, 0xe2, 0x1f, 0xbc, 0x7e, 0x2b, 0x4e, 0x9e, 0x50, 0x9a, 0x80, 0x30, - 0xeb, 0x36, 0xab, 0xff, 0x82, 0x7f, 0xff, 0xf8, 0xa3, 0xed, 0x60, 0xc1, 0xba, 0x28, 0x5e, 0xa2, - 0x1e, 0xb9, 0x45, 0x77, 0xa7, 0x8a, 0xcc, 0xc8, 0xad, 0xda, 0xdf, 0x91, 0x34, 0xc1, 0x34, 0x93, - 0x6c, 0xdc, 0x45, 0xdb, 0xf0, 0x28, 0x9c, 0x93, 0xeb, 0x18, 0x98, 0xb0, 0x0b, 0xd7, 0xc2, 0xe6, - 0x59, 0xe0, 0xc4, 0xfb, 0xe5, 0xb8, 0x31, 0x37, 0xb5, 0xbc, 0x30, 0x2a, 0x7f, 0x5e, 0xd3, 0x5c, - 0xfb, 0x7f, 0x10, 0xf0, 0xb0, 0x98, 0x6b, 0x2a, 0x9f, 0x7f, 0x5f, 0xc3, 0x5e, 0x92, 0xc7, 0x55, - 0x5c, 0xbf, 0x7d, 0xd3, 0xbd, 0x30, 0x5e, 0x5d, 0x54, 0x74, 0x3a, 0x98, 0x0b, 0xe8, 0x40, 0xc1, - 0x5c, 0x9e, 0xd1, 0x72, 0x69, 0x3e, 0x88, 0x12, 0x20, 0x44, 0xd0, 0x40, 0x2c, 0xa5, 0xf3, 0x75, - 0xfa, 0x95, 0x2b, 0x52, 0x3b, 0x2e, 0x00, 0xa8, 0x23, 0xa0, 0x22, 0x20, 0xf9, 0xdb, 0xf1, 0xd8, - 0x04, 0x60, 0x91, 0xc2, 0x46, 0x67, 0x4d, 0xe7, 0xff, 0x7a, 0x69, 0xf0, 0xc0, 0x34, 0x11, 0x04, - 0x63, 0xa9, 0x02, 0x45, 0x4d, 0x7a, 0x7d, 0x0c, 0x3e, 0x23, 0x88, 0xae, 0x89, 0xb7, 0xbf, 0x5f, - 0xab, 0xe8, 0x93, 0x5a, 0xc1, 0x07, 0x1d, 0x1b, 0xb5, 0xdf, 0xa4, 0xef, 0x50, 0xaa, 0x20, 0x2f, - 0xa1, 0xbf, 0xfb, 0xcf, 0xdb, 0xdb, 0x6c, 0xc8, 0xab, 0x45, 0x45, 0xa8, 0xce, 0x69, 0x89, 0x02, - 0xb4, 0xbd, 0x2c, 0x2a, 0xca, 0x0c, 0x6d, 0x57, 0xfd, 0x6b, 0xef, 0x13, 0x80, 0xa2, 0xea, 0x9e, - 0xbc, 0x2b, 0x80, 0x10, 0xaf, 0x45, 0x37, 0x1b, 0xb3, 0xff, 0xb7, 0xb6, 0xdd, 0xf7, 0x27, 0xb8, - 0xb6, 0x0e, 0x0b, 0x7d, 0x16, 0xf7, 0x2f, 0xfe, 0x6c, 0x53, 0x67, 0x69, 0xf0, 0xc4, 0xa5, 0x72, - 0x95, 0xe2, 0x91, 0xb8, 0xba, 0x8b, 0x8b, 0xad, 0x6a, 0xd2, 0xae, 0x2f, 0xca, 0xdf, 0xc2, 0x91, - 0x4b, 0xd6, 0x2e, 0xbd, 0x56, 0xba, 0xe7, 0x57, 0x76, 0xf8, 0x26, 0x31, 0x44, 0x69, 0xbd, 0x58, - 0x9e, 0x4d, 0xed, 0xa7, 0xfd, 0x98, 0x88, 0x80, 0x8c, 0xcd, 0x83, 0x5a, 0x5c, 0x71, 0x74, 0x48, - 0x9b, 0xf7, 0x1a, 0xc3, 0xf3, 0x63, 0x67, 0x43, 0xdf, 0x96, 0x01, 0x4e, 0xbf, 0x1e, 0x7f, 0xbe, - 0xfa, 0x57, 0x1d, 0xca, 0x60, 0x26, 0x30, 0x87, 0x39, 0xd8, 0x27, 0x29, 0x23, 0xed, 0xe4, 0x8f, - 0x3f, 0xe3, 0x82, 0xe7, 0xbf, 0x1c, 0x5f, 0x36, 0xef, 0x78, 0x40, 0x90, 0x24, 0x39, 0x46, 0x83, - 0xff, 0xec, 0xe9, 0xdb, 0x4d, 0x39, 0x5a, 0x48, 0xeb, 0x00, 0xe0, 0x0d, 0x79, 0x71, 0xfd, 0xdf, - 0x4d, 0x3b, 0xf7, 0xca, 0x98, 0x34, 0x89, 0x09, 0x73, 0x62, 0xe7, 0xc3, 0xff, 0x7e, 0xd6, 0x22, - 0x50, 0x06, 0x7d, 0x7d, 0x77, 0xf5, 0xf2, 0x86, 0x5a, 0xc8, 0xf2, 0x78, 0x50, 0x97, 0xf7, 0xd8, - 0x9b, 0x80, 0x64, 0x5f, 0x05, 0x3e, 0x5f, 0x15, 0xf7, 0xc1, 0x63, 0x60, 0x83, 0x6d, 0xec, 0xc5, - 0xcf, 0xdf, 0xbf, 0x5f, 0xff, 0x18, 0x2d, 0xb1, 0x6b, 0xd7, 0xe2, 0xf4, 0xbf, 0xe9, 0x45, 0x13, - 0xc0, 0x24, 0x05, 0x04, 0x5e, 0xbf, 0xbf, 0x30, 0xb1, 0xa5, 0x11, 0x78, 0x40, 0x65, 0xb2, 0xe3, - 0x7f, 0x4c, 0x65, 0x75, 0xb8, 0x2d, 0x84, 0xa4, 0xd4, 0xa1, 0xf7, 0x86, 0xc3, 0xe7, 0xdf, 0x56, - 0x89, 0x05, 0x98, 0x0a, 0xd9, 0x22, 0x76, 0xdb, 0x4f, 0x2f, 0x15, 0xc5, 0x6e, 0xf1, 0xe6, 0x65, - 0x4b, 0x9f, 0xf2, 0x24, 0x44, 0x83, 0x9b, 0x9b, 0xc0, 0x9f, 0x5d, 0x3a, 0x5c, 0x38, 0x3d, 0x59, - 0x30, 0xe0, 0xb5, 0x83, 0x30, 0x5a, 0x66, 0xef, 0xff, 0x27, 0x6b, 0xad, 0xcc, 0x21, 0x91, 0x10, - 0xcc, 0x3b, 0x21, 0x2f, 0xcb, 0xdb, 0x64, 0x5b, 0x4c, 0x57, 0xef, 0xae, 0x84, 0x56, 0xc5, 0x44, - 0x68, 0xc0, 0xcd, 0x5f, 0x2e, 0xae, 0xed, 0xe3, 0x55, 0xea, 0xe5, 0x64, 0xa1, 0x08, 0xc0, 0xf4, - 0x30, 0xad, 0xee, 0xb7, 0xb8, 0xca, 0xdd, 0xe9, 0x6e, 0x88, 0x43, 0xac, 0x06, 0x3b, 0x6e, 0xa2, - 0x3c, 0xfb, 0x5e, 0xd0, 0xee, 0x4f, 0x96, 0xad, 0x7f, 0xf1, 0xf1, 0x8d, 0x28, 0xe4, 0x43, 0x12, - 0x7f, 0x07, 0x5d, 0x6d, 0x8d, 0x33, 0x32, 0x15, 0x56, 0x3b, 0x4c, 0xcc, 0xaa, 0xb5, 0xf9, 0x3a, - 0x71, 0xd4, 0x17, 0xd0, 0xda, 0x22, 0xfa, 0x4d, 0x71, 0x03, 0x9d, 0xdb, 0xb6, 0xdf, 0xf2, 0xac, - 0x2c, 0x1a, 0x95, 0x3d, 0x46, 0xe0, 0xda, 0xc4, 0xa7, 0xa7, 0xc5, 0x6e, 0xe1, 0xbf, 0x3d, 0x62, - 0xa4, 0xf6, 0xff, 0x3a, 0xc4, 0x61, 0x98, 0x05, 0x48, 0x8a, 0xf5, 0xdf, 0x59, 0x9d, 0xb2, 0x39, - 0xa3, 0x6c, 0x79, 0x7d, 0x88, 0x45, 0x98, 0xa7, 0x30, 0x0c, 0x52, 0x8a, 0x38, 0xa5, 0xdc, 0xff, - 0x26, 0x1f, 0xc3, 0x96, 0x38, 0xbe, 0x3e, 0xdc, 0x59, 0x9e, 0x46, 0xff, 0x56, 0xfe, 0xb1, 0x4d, - 0x7a, 0x58, 0x87, 0x90, 0xfd, 0xa0, 0x1f, 0xb4, 0x4c, 0x90, 0x77, 0x59, 0xbb, 0x4d, 0xb3, 0xfd, - 0x64, 0xc9, 0x93, 0x2f, 0x84, 0xa6, 0x21, 0xa2, 0x85, 0xb6, 0xb7, 0xbb, 0x6d, 0xfa, 0x76, 0xeb, - 0xbe, 0x4e, 0xc2, 0x8a, 0xd0, 0x04, 0xb2, 0x85, 0x29, 0x7c, 0xbf, 0xaa, 0x69, 0xbb, 0xc5, 0x5e, - 0xe4, 0xb0, 0x88, 0x41, 0xb2, 0x34, 0x10, 0xeb, 0x5c, 0x9a, 0xdc, 0x6d, 0x54, 0xda, 0xba, 0x75, - 0x97, 0xe7, 0xb4, 0x04, 0x46, 0x86, 0x7c, 0x72, 0x04, 0x3a, 0x6d, 0xad, 0x55, 0x55, 0xdc, 0xab, - 0xbf, 0xf8, 0x26, 0x6c, 0x6e, 0xa7, 0xb4, 0x41, 0x22, 0x5e, 0x6f, 0xcd, 0xdb, 0x8b, 0x9b, 0xbc, - 0x80, 0xb6, 0x53, 0x46, 0x16, 0xc9, 0x2d, 0x64, 0x22, 0xa6, 0xdc, 0xdb, 0x9b, 0xe3, 0xed, 0xcd, - 0xd2, 0xa8, 0x57, 0x00, 0xb1, 0xac, 0xd3, 0xb7, 0xef, 0x7a, 0xe5, 0x86, 0x9c, 0xc1, 0xe5, 0x2d, - 0x1a, 0xd6, 0x91, 0x0d, 0xce, 0x97, 0x17, 0x4e, 0x5c, 0x4a, 0xd2, 0x7b, 0xb6, 0x6f, 0xaa, 0xaf, - 0xf6, 0x69, 0xce, 0xec, 0xcd, 0x70, 0xc9, 0x19, 0x37, 0x81, 0x88, 0xd3, 0xa7, 0x62, 0x1c, 0x75, - 0x2a, 0xf9, 0x7b, 0xdc, 0x34, 0xf5, 0x23, 0x3a, 0xbe, 0x6f, 0xf3, 0xff, 0xf6, 0x93, 0x7c, 0xe5, - 0x77, 0xcb, 0x9b, 0x58, 0x81, 0xf7, 0xd9, 0xb3, 0x6c, 0x3e, 0xdb, 0x8c, 0x8a, 0xde, 0x5e, 0xdf, - 0x7e, 0x21, 0xef, 0xdd, 0x18, 0x2a, 0x01, 0xd6, 0x05, 0x86, 0x1a, 0x12, 0xaf, 0xee, 0xfb, 0xef, - 0x14, 0x71, 0xcd, 0x00, 0x12, 0x51, 0x54, 0x03, 0x40, 0x09, 0x0e, 0x31, 0x13, 0x77, 0xdc, 0xac, - 0x9e, 0x5b, 0x99, 0xb3, 0x5c, 0xe0, 0x92, 0x21, 0x88, 0xd8, 0x5c, 0x6a, 0xf9, 0xf5, 0xef, 0xbf, - 0x71, 0x34, 0x18, 0x5b, 0xb0, 0x53, 0x72, 0xf4, 0xfd, 0x6d, 0x8f, 0xd2, 0xff, 0x57, 0x20, 0x66, - 0x4f, 0xdd, 0x7e, 0xf5, 0xd3, 0xda, 0x89, 0x42, 0x09, 0xd7, 0x7e, 0xa5, 0xf7, 0x08, 0xe0, 0x89, - 0xdc, 0xec, 0x7f, 0xbb, 0xff, 0x85, 0x11, 0xeb, 0x17, 0xde, 0x24, 0x0c, 0x56, 0xb3, 0xe7, 0x89, - 0xd6, 0x3a, 0x2c, 0xf0, 0xfb, 0x04, 0x73, 0x33, 0x53, 0x33, 0xfd, 0xdd, 0xe2, 0xf9, 0x78, 0x95, - 0x05, 0xa2, 0x47, 0xc4, 0xff, 0x72, 0xe5, 0xeb, 0x12, 0xdf, 0x50, 0x94, 0x30, 0x6b, 0x7d, 0xfd, - 0x6a, 0xb1, 0x7b, 0xf1, 0x7d, 0xc8, 0x6c, 0x6c, 0x41, 0xa5, 0xaa, 0xcd, 0x92, 0xa6, 0xc4, 0xfc, - 0xdf, 0x73, 0xbb, 0x45, 0xfc, 0xa5, 0xd2, 0xbb, 0x0f, 0xe6, 0xae, 0xd5, 0x53, 0xc5, 0xd5, 0x5f, - 0xef, 0x5a, 0x40, 0x02, 0x20, 0x3d, 0x05, 0xaf, 0xef, 0xb1, 0x0a, 0xa8, 0x1a, 0xbc, 0xa0, 0xfe, - 0xf7, 0x7b, 0xd1, 0x22, 0x44, 0x89, 0xbc, 0x08, 0x53, 0xa2, 0x61, 0xa1, 0x35, 0x26, 0xb5, 0x92, - 0x2b, 0x6c, 0xdf, 0xf3, 0x81, 0xcc, 0xa9, 0x50, 0x0e, 0x23, 0x4c, 0xbb, 0x8a, 0xfb, 0xbf, 0xd8, - 0x52, 0xa3, 0x5a, 0x4c, 0x44, 0x2c, 0xb2, 0x73, 0xe7, 0x3f, 0xbd, 0xf1, 0xf8, 0xf2, 0x51, 0x40, - 0xa6, 0x5a, 0xfd, 0xd3, 0x37, 0xe9, 0xdb, 0xc3, 0x0f, 0x2e, 0x23, 0x82, 0x98, 0xaf, 0xdb, 0xef, - 0xae, 0xab, 0x63, 0x13, 0xa0, 0xc1, 0x53, 0xc9, 0x21, 0x0e, 0x56, 0x7b, 0x08, 0xb1, 0x0e, 0x3f, - 0xdf, 0x6c, 0xa5, 0x9a, 0x66, 0x49, 0x4c, 0x9a, 0x6c, 0xaf, 0x5d, 0xef, 0x9e, 0x02, 0x5c, 0x0b, - 0x73, 0xdd, 0x8f, 0x78, 0x25, 0x5d, 0x17, 0x76, 0x28, 0xb4, 0xa8, 0x4e, 0x4f, 0xc4, 0x11, 0x77, - 0xdd, 0xdc, 0x57, 0x15, 0xbf, 0xee, 0xee, 0x57, 0xbc, 0x1d, 0x9a, 0xcb, 0x91, 0x0e, 0x3f, 0xbd, - 0xb8, 0xad, 0xb1, 0xe5, 0x73, 0xfc, 0x7d, 0xb3, 0x34, 0x8b, 0x6c, 0xfd, 0xa2, 0x75, 0xe2, 0xfe, - 0xb5, 0xab, 0x70, 0x0f, 0xc8, 0x89, 0x35, 0xa3, 0xa8, 0xba, 0xab, 0x51, 0x3c, 0x8b, 0xa7, 0x5c, - 0x5c, 0x90, 0xc7, 0x76, 0xaa, 0xbc, 0xea, 0x92, 0x9a, 0x58, 0x7f, 0x7f, 0x32, 0x1b, 0x25, 0x43, - 0x4d, 0x10, 0xe2, 0x6e, 0xeb, 0x6f, 0x23, 0xad, 0xf7, 0x65, 0x70, 0x89, 0x91, 0x9c, 0x62, 0xc8, - 0x5e, 0xaa, 0xef, 0xd1, 0xec, 0xcf, 0x46, 0x0f, 0xbf, 0xc5, 0x7d, 0xd3, 0xca, 0xc7, 0x37, 0x07, - 0x44, 0xbe, 0xd8, 0xaa, 0xbd, 0x3f, 0xb9, 0xc2, 0x8c, 0x60, 0x73, 0x69, 0xcc, 0x57, 0x71, 0x5b, - 0x7b, 0xed, 0x09, 0xf2, 0x6e, 0x4e, 0xe7, 0x39, 0x32, 0xc9, 0xcf, 0x41, 0x5a, 0xb9, 0xbe, 0x17, - 0x2b, 0x50, 0xea, 0xed, 0xd8, 0xd9, 0x27, 0xd7, 0x1a, 0x83, 0x4d, 0xbf, 0xdc, 0xf1, 0x1c, 0x17, - 0x0d, 0x2a, 0x23, 0xfe, 0x7d, 0x8f, 0x2d, 0x7e, 0xf1, 0x6d, 0x80, 0x3a, 0x8b, 0xc3, 0x98, 0x99, - 0x3a, 0xcd, 0x9f, 0x68, 0x4f, 0x22, 0xe2, 0xb8, 0x81, 0xed, 0x65, 0xee, 0x3b, 0x53, 0x4d, 0xb6, - 0xfe, 0xae, 0x6a, 0x77, 0x27, 0xb3, 0xb8, 0x4d, 0x06, 0x31, 0xe5, 0x93, 0x95, 0xd6, 0x97, 0xb3, - 0xaa, 0x83, 0x8b, 0xe4, 0xfb, 0x9a, 0x5c, 0x71, 0x66, 0x2a, 0xe3, 0xcb, 0xd5, 0xc6, 0x57, 0x13, - 0xf5, 0xee, 0x70, 0x5f, 0x8d, 0xfe, 0x82, 0xf6, 0xb5, 0x7b, 0xe3, 0xf6, 0xa1, 0x76, 0x06, 0x51, - 0x1f, 0x9f, 0x32, 0x60, 0xae, 0x27, 0x0d, 0xb4, 0xb1, 0x5e, 0x95, 0xa8, 0x13, 0x1f, 0xed, 0xff, - 0x2b, 0xb0, 0x23, 0x98, 0x46, 0xda, 0xcb, 0x97, 0x38, 0x70, 0xb5, 0xbb, 0x23, 0x10, 0xf7, 0xec, - 0xcc, 0xe5, 0xc8, 0x51, 0x5e, 0x31, 0xcb, 0xc3, 0xd1, 0xc4, 0x40, 0x1a, 0xac, 0xaf, 0x6e, 0x36, - 0x26, 0xc0, 0x9e, 0x6c, 0x75, 0xb1, 0xef, 0x49, 0xd2, 0x04, 0x00, 0x85, 0x53, 0x7d, 0x70, 0x6b, - 0x55, 0x59, 0x7d, 0xb9, 0x71, 0x39, 0xf1, 0x5c, 0xfd, 0x36, 0xc7, 0xbe, 0xfd, 0x2d, 0xb2, 0xb2, - 0xf9, 0xb2, 0x07, 0x06, 0x84, 0x79, 0x14, 0x67, 0x05, 0xaf, 0x37, 0x73, 0x21, 0xba, 0x9b, 0xf4, - 0xf0, 0x1f, 0xff, 0xb6, 0x99, 0x6c, 0xc4, 0x04, 0x9c, 0xa8, 0x4d, 0x04, 0x01, 0x26, 0xce, 0xf1, - 0xb6, 0xdc, 0x2f, 0x58, 0xdd, 0x37, 0x07, 0x6e, 0x59, 0xa2, 0xda, 0x93, 0xb7, 0xdf, 0xf5, 0x41, - 0xb3, 0xda, 0x60, 0x8d, 0x64, 0xba, 0xd3, 0xcd, 0xe6, 0xe9, 0x76, 0xe6, 0xe1, 0xe7, 0x2a, 0x87, - 0x3c, 0x59, 0xc2, 0x10, 0x4e, 0x29, 0xa1, 0xb9, 0x89, 0x67, 0x27, 0x3e, 0xc2, 0xba, 0xdb, 0xef, - 0x7f, 0x73, 0x71, 0xa9, 0x5e, 0xff, 0xd8, 0xdb, 0x69, 0x4e, 0xe2, 0x20, 0xd6, 0x51, 0x42, 0xb5, - 0xcf, 0x82, 0xfb, 0x7a, 0xaf, 0x7b, 0x1e, 0x8c, 0x4e, 0x20, 0x44, 0x54, 0xb4, 0x33, 0x7c, 0x9e, - 0x5b, 0x37, 0xbe, 0xd1, 0xff, 0x17, 0x18, 0xab, 0x57, 0x20, 0x67, 0xa6, 0x81, 0x31, 0x1a, 0xc1, - 0xdb, 0x2b, 0x10, 0x50, 0x57, 0xd6, 0x9d, 0xa6, 0xc7, 0x94, 0xd7, 0xc3, 0x08, 0x85, 0x5d, 0x5d, - 0x52, 0xf7, 0x17, 0xd6, 0xdf, 0xb6, 0x93, 0x69, 0xc5, 0x85, 0x1c, 0x19, 0xa3, 0x4b, 0x5b, 0x8a, - 0xb7, 0xcc, 0xc5, 0x78, 0xba, 0xa7, 0x10, 0xf0, 0xa6, 0x34, 0x05, 0xf0, 0xab, 0xd3, 0xc7, 0xfe, - 0xe3, 0x72, 0x27, 0x25, 0xab, 0xdc, 0x28, 0xea, 0x57, 0x39, 0xc4, 0x9c, 0xfa, 0xf6, 0x70, 0xe7, - 0x1e, 0x21, 0xc8, 0xac, 0x22, 0xa5, 0x1e, 0xd6, 0xe7, 0x2f, 0x91, 0x7d, 0x3d, 0xa4, 0xdf, 0xde, - 0x21, 0xe6, 0x8c, 0x15, 0xda, 0x5f, 0xde, 0x36, 0xbc, 0x56, 0xee, 0xef, 0x78, 0xad, 0xdf, 0x27, - 0xfe, 0x44, 0xfe, 0x4e, 0x54, 0xef, 0x7b, 0xbb, 0xbd, 0xdd, 0xdc, 0x57, 0x7c, 0x18, 0xd2, 0x18, - 0x4b, 0x6b, 0x42, 0x1c, 0xc9, 0xfa, 0x15, 0xea, 0xcc, 0xef, 0xc7, 0x96, 0x31, 0x32, 0xe7, 0xcb, - 0xbf, 0x7e, 0x22, 0x16, 0x5a, 0x88, 0x19, 0x33, 0x8f, 0x4c, 0x56, 0x5e, 0xfe, 0xfb, 0xe6, 0xed, - 0xfd, 0xac, 0x70, 0x18, 0x7f, 0x60, 0xa2, 0xdf, 0xa6, 0x9b, 0x6e, 0xe0, 0xa7, 0x06, 0xd9, 0x8b, - 0x42, 0x20, 0x56, 0x69, 0x51, 0x62, 0x1f, 0xc5, 0x0b, 0x60, 0x45, 0x7f, 0x6a, 0x5a, 0x2c, 0x9f, - 0xad, 0x5e, 0xdd, 0x59, 0x09, 0xe0, 0x4a, 0x32, 0xc7, 0x00, 0xdb, 0x7b, 0x7f, 0xd7, 0x79, 0x78, - 0xbd, 0x67, 0x87, 0x82, 0x7a, 0xed, 0x56, 0xab, 0xe2, 0xf1, 0x28, 0x81, 0x28, 0xd9, 0x74, 0xea, - 0xa0, 0xb5, 0x1c, 0x7e, 0x92, 0x02, 0x0a, 0x74, 0xf7, 0x07, 0xb8, 0xc3, 0xd8, 0xc4, 0x52, 0x28, - 0xa7, 0x58, 0xbf, 0xd7, 0xba, 0xe6, 0x22, 0x54, 0x01, 0x5e, 0xfd, 0xf1, 0x9f, 0x29, 0x56, 0x64, - 0x1d, 0xb9, 0x02, 0x5a, 0xd6, 0xdd, 0x61, 0x0c, 0xf8, 0xf5, 0xa2, 0x65, 0x37, 0x2f, 0xea, 0x95, - 0x0d, 0xca, 0xcf, 0x4d, 0x3d, 0xbf, 0x1f, 0x1e, 0x9e, 0x66, 0x16, 0x5c, 0xc7, 0x24, 0x62, 0x35, - 0x4f, 0x46, 0xc6, 0x3f, 0x88, 0xff, 0xe8, 0x13, 0xd5, 0x75, 0x63, 0x33, 0x18, 0xf7, 0x00, 0x20, - 0xb5, 0x55, 0xe7, 0xef, 0xeb, 0x2d, 0x7f, 0xff, 0x08, 0xb8, 0x03, 0xee, 0xa7, 0xd5, 0x6a, 0xbb, - 0xee, 0xf5, 0xac, 0xde, 0x20, 0xa9, 0x01, 0x11, 0x4c, 0x23, 0x2f, 0xd7, 0xdf, 0xfa, 0x8c, 0x24, - 0x3f, 0x6e, 0xff, 0x77, 0x76, 0xae, 0xbc, 0x4e, 0x00, 0x6f, 0xe7, 0x5b, 0xe7, 0x9f, 0xab, 0x8b, - 0x97, 0x97, 0xd1, 0xc9, 0xbd, 0xde, 0x2b, 0x78, 0xaf, 0x50, 0x8e, 0x11, 0x0f, 0xb6, 0x7b, 0x7b, - 0x7f, 0xe2, 0x70, 0x19, 0x32, 0xeb, 0xcb, 0xe5, 0x2f, 0xb5, 0xb7, 0x1d, 0x19, 0xdf, 0xef, 0x79, - 0x7b, 0xbb, 0x72, 0xa0, 0x5e, 0xec, 0x1e, 0xcc, 0xcd, 0x68, 0x5a, 0xef, 0xd5, 0xb6, 0xf7, 0xb7, - 0x59, 0xbf, 0xc2, 0x12, 0x26, 0x82, 0x35, 0xdd, 0xb5, 0x5e, 0xb5, 0xaf, 0xef, 0x8e, 0x38, 0x43, - 0x1b, 0x0b, 0x89, 0x5a, 0xd6, 0xb6, 0xc4, 0xc2, 0xc0, 0x72, 0x11, 0x40, 0x1e, 0x13, 0x21, 0xb3, - 0xb6, 0x8a, 0xf4, 0x3c, 0xe9, 0xfd, 0x45, 0x12, 0x68, 0x97, 0x03, 0x8a, 0x24, 0xc1, 0x13, 0x33, - 0x57, 0xdd, 0xde, 0xcb, 0x1d, 0xc5, 0xcb, 0x60, 0xf9, 0x74, 0x21, 0x45, 0xe1, 0xb0, 0xa2, 0xf8, - 0xb8, 0xb8, 0x88, 0xf0, 0x08, 0x36, 0x63, 0xa4, 0x5e, 0x96, 0xdc, 0x6d, 0xdb, 0x2f, 0xbb, 0x88, - 0xa9, 0x7b, 0x88, 0x95, 0x63, 0x46, 0x38, 0x56, 0xb8, 0x87, 0x12, 0xc6, 0xd4, 0xbf, 0xcb, 0xf6, - 0x2d, 0xb7, 0xfd, 0xc3, 0x76, 0x8c, 0x63, 0x13, 0x14, 0xb2, 0x66, 0x5b, 0xfb, 0xdb, 0x7f, 0x39, - 0xcc, 0x96, 0xf9, 0x0b, 0x52, 0x74, 0xa2, 0x8d, 0xcb, 0xdf, 0xdb, 0xce, 0x1c, 0xac, 0xe7, 0xb7, - 0xab, 0x52, 0xfa, 0xf4, 0xe9, 0xbe, 0x38, 0xbd, 0xfe, 0xdd, 0x2a, 0xe2, 0x49, 0xe5, 0xee, 0xff, - 0x4e, 0x4d, 0x8b, 0xab, 0xd7, 0x21, 0xf4, 0xa3, 0x11, 0x7c, 0x57, 0xbf, 0x7c, 0xb2, 0xc7, 0xc0, - 0x3f, 0x20, 0x22, 0x3a, 0x54, 0xa3, 0xbf, 0x89, 0x4d, 0xc6, 0x08, 0x03, 0x76, 0xd1, 0x05, 0xcd, - 0x84, 0xed, 0xc8, 0x5e, 0xec, 0xe6, 0x27, 0x82, 0x79, 0x50, 0x68, 0xe3, 0x6a, 0x90, 0x2d, 0x54, - 0xe8, 0xee, 0xe5, 0x4a, 0xbd, 0xbd, 0xb4, 0xd4, 0xd9, 0x12, 0x79, 0xfc, 0x9d, 0x43, 0xdc, 0xde, - 0xca, 0x57, 0xba, 0x94, 0xe7, 0x5e, 0x07, 0x1d, 0x2b, 0xbb, 0x8a, 0x34, 0x7e, 0xa8, 0xb3, 0x85, - 0x10, 0xe3, 0x75, 0x9f, 0x71, 0xaa, 0xa9, 0xa6, 0xdb, 0x6d, 0xb7, 0xc7, 0x7c, 0xc3, 0x58, 0x8d, - 0x53, 0x25, 0x5c, 0xdb, 0xbb, 0x44, 0xc7, 0xe9, 0x7e, 0x4d, 0x57, 0x64, 0xf1, 0x58, 0x2b, 0xa0, - 0xaa, 0x9a, 0xbb, 0x94, 0x92, 0x8a, 0xdd, 0xbc, 0xb6, 0x6c, 0xba, 0x9e, 0x24, 0x69, 0x29, 0x69, - 0xf1, 0xba, 0xdb, 0x7f, 0xdd, 0x0b, 0x46, 0xbe, 0x71, 0x01, 0xef, 0xed, 0x7a, 0x85, 0x15, 0xd2, - 0x85, 0x05, 0x62, 0xa5, 0x5d, 0xbf, 0x87, 0xa5, 0x59, 0x9a, 0xc4, 0x75, 0xa7, 0xfb, 0xe2, 0x07, - 0x1e, 0xf8, 0xbb, 0x3a, 0x69, 0xff, 0x2e, 0x45, 0x51, 0xe1, 0xa9, 0xff, 0xf2, 0x7e, 0xb9, 0xbe, - 0x4b, 0xd5, 0x2b, 0xa0, 0x6c, 0x7d, 0x5b, 0xa7, 0xb7, 0x4a, 0x3b, 0xa8, 0x3d, 0xf7, 0xef, 0xec, - 0x83, 0x4c, 0xac, 0xca, 0x50, 0xd4, 0xbf, 0xdb, 0x83, 0xef, 0xcb, 0xdb, 0x5f, 0x16, 0xa1, 0x2c, - 0x06, 0x2c, 0x00, 0x03, 0x4b, 0xdd, 0xe5, 0x62, 0xdb, 0x7d, 0xef, 0x97, 0xec, 0x19, 0xc2, 0x2c, - 0x04, 0xbe, 0xe2, 0x7f, 0x94, 0x8f, 0x9f, 0x97, 0xa6, 0xdf, 0xb6, 0xf7, 0xfd, 0x81, 0xa1, 0x53, - 0x66, 0xf9, 0x22, 0x15, 0xb8, 0x86, 0x22, 0x3f, 0x76, 0x42, 0x16, 0x4b, 0xf5, 0x88, 0xba, 0x7c, - 0x35, 0xea, 0x8c, 0xeb, 0x2a, 0xd0, 0x4f, 0xd4, 0x73, 0x60, 0xb3, 0x05, 0x99, 0xad, 0x14, 0xd9, - 0x8a, 0xd2, 0x1b, 0xab, 0xdf, 0xa7, 0x0a, 0x2a, 0x97, 0x02, 0x6e, 0xde, 0x1e, 0xd7, 0x76, 0xd3, - 0x7f, 0x4f, 0x7b, 0xdc, 0x7f, 0xfb, 0xff, 0xf5, 0x22, 0x3d, 0xdc, 0x56, 0x2b, 0xbe, 0xfe, 0xf9, - 0x1a, 0xe2, 0x43, 0xe0, 0x24, 0xfb, 0x35, 0x87, 0x4d, 0x7b, 0xb8, 0x0f, 0x33, 0x2e, 0x0d, 0x9a, - 0xa2, 0x96, 0x96, 0x00, 0x88, 0x12, 0xdd, 0x7b, 0xed, 0x6b, 0x13, 0x13, 0x35, 0xb9, 0x31, 0xdc, - 0xb4, 0xe1, 0xdd, 0x2a, 0xe5, 0xf7, 0xef, 0xf4, 0xd6, 0x09, 0x59, 0x1e, 0xef, 0xf2, 0x85, 0xbf, - 0xd4, 0x55, 0xb3, 0xbd, 0xfa, 0x76, 0xfa, 0x7e, 0x45, 0xc9, 0x9d, 0x99, 0xa7, 0xb9, 0x05, 0xf4, - 0xcb, 0xf9, 0x7d, 0xdf, 0x96, 0xe3, 0x59, 0x68, 0x65, 0x61, 0xf3, 0xbb, 0x79, 0x51, 0x0e, 0x1a, - 0x80, 0x70, 0xee, 0x51, 0xd5, 0x32, 0xbf, 0xa9, 0x7c, 0x67, 0xdf, 0x17, 0xbe, 0x4d, 0x8e, 0x00, - 0x98, 0x68, 0x55, 0xba, 0x66, 0xeb, 0xef, 0xc2, 0x0a, 0x04, 0x79, 0xa7, 0xe7, 0x79, 0xa0, 0x78, - 0x1a, 0x0f, 0x83, 0xbb, 0xbd, 0xf7, 0xce, 0x04, 0x9e, 0x1f, 0x60, 0x90, 0xca, 0xdf, 0xac, 0x47, - 0xd6, 0x01, 0xc2, 0x4d, 0x1e, 0xba, 0xf7, 0xe5, 0x8a, 0x72, 0x43, 0xf9, 0x17, 0xe5, 0xc0, 0x2c, - 0x85, 0x13, 0xae, 0xb3, 0x76, 0xd6, 0x11, 0x24, 0x04, 0xbd, 0x27, 0x3a, 0xac, 0xba, 0xd6, 0xca, - 0xcb, 0xe4, 0xb8, 0xe9, 0x1e, 0x14, 0x4b, 0xae, 0xad, 0xeb, 0x33, 0x0f, 0xef, 0x88, 0x05, 0x84, - 0xa0, 0x1e, 0x34, 0x09, 0x4e, 0xbc, 0xe9, 0xc4, 0xa4, 0x05, 0x12, 0x09, 0x74, 0x13, 0xaa, 0xe2, - 0xe9, 0xd4, 0x7b, 0x82, 0x3f, 0x27, 0xe3, 0xab, 0xaf, 0xff, 0xf1, 0x0f, 0x87, 0xe8, 0x13, 0x9a, - 0x9f, 0x7e, 0x00, 0x55, 0x0c, 0x0b, 0x1e, 0xca, 0x57, 0x7f, 0x7a, 0x6f, 0x4d, 0xf1, 0x1c, 0x44, - 0x36, 0xca, 0x59, 0xef, 0xdb, 0xf7, 0xbf, 0x7e, 0xc4, 0xd2, 0x22, 0x85, 0x89, 0x88, 0x33, 0x56, - 0xf6, 0xaf, 0x2f, 0xfb, 0xf0, 0x27, 0x16, 0x6b, 0x9e, 0xed, 0x13, 0x88, 0x73, 0x74, 0xb7, 0x10, - 0xe3, 0x88, 0x1c, 0x6e, 0x58, 0xbb, 0xca, 0xa0, 0x80, 0x15, 0xc3, 0xfd, 0xc4, 0x8a, 0xc2, 0xa3, - 0x78, 0xc8, 0x0a, 0x6e, 0xfd, 0xe2, 0xba, 0xd9, 0xb0, 0x6f, 0x22, 0x66, 0x0c, 0x2f, 0xef, 0xdd, - 0xe2, 0x5c, 0x3d, 0x34, 0x7d, 0x87, 0x0f, 0xa1, 0xe2, 0x0d, 0x96, 0xde, 0xab, 0xb7, 0xe9, 0x4b, - 0x9c, 0x40, 0x4b, 0x7c, 0x79, 0xc5, 0xfb, 0xdd, 0xf7, 0xec, 0xe4, 0x25, 0x70, 0x09, 0x89, 0xc6, - 0xc2, 0x45, 0xc5, 0x65, 0xcd, 0x3c, 0x46, 0x28, 0x9a, 0xfa, 0x1a, 0x4a, 0x45, 0xfb, 0xfb, 0xbf, - 0x0e, 0x89, 0x00, 0x4a, 0x54, 0x14, 0x9d, 0x36, 0xd6, 0x9b, 0xef, 0x37, 0xb8, 0x04, 0xb3, 0xcc, - 0x3f, 0x9c, 0x21, 0x41, 0x4a, 0x61, 0x06, 0x3f, 0xcd, 0xc2, 0x7c, 0x97, 0x2a, 0xaf, 0x2a, 0xbb, - 0xcc, 0x58, 0x7c, 0x5f, 0xfa, 0x6d, 0xa7, 0xf1, 0x6c, 0x4a, 0xf6, 0xeb, 0x4d, 0xfa, 0x69, 0xfe, - 0x32, 0x8d, 0x3e, 0x8d, 0xb7, 0xde, 0xe9, 0x9b, 0xe4, 0x5e, 0xd4, 0x00, 0x64, 0x04, 0x44, 0x0f, - 0x43, 0x89, 0x46, 0xfe, 0x9e, 0xab, 0x04, 0x11, 0x3c, 0x3f, 0xfc, 0x81, 0xbc, 0xb0, 0x91, 0x78, - 0xbb, 0xf1, 0x0b, 0x0e, 0x61, 0xde, 0xc4, 0x5e, 0xba, 0xfd, 0x02, 0x50, 0xf0, 0xa5, 0xa7, 0xb6, - 0xdb, 0xdb, 0x27, 0x2f, 0x7b, 0x2c, 0xeb, 0x5d, 0xfe, 0x18, 0x00, 0x2c, 0x3e, 0x17, 0xef, 0xc5, - 0x65, 0xcd, 0x60, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x01, 0x00, 0xb0, 0x5a, 0x50, 0x8d, 0x04, - 0x75, 0x71, 0x30, 0x50, 0x22, 0xb7, 0xad, 0x5c, 0xe2, 0x20, 0x92, 0xef, 0xbb, 0xe0, 0xba, 0xee, - 0xef, 0x5a, 0xb7, 0xd0, 0x8c, 0xae, 0x24, 0x33, 0xf8, 0xbe, 0x87, 0xc5, 0xe1, 0x19, 0x62, 0x04, - 0x2a, 0x3b, 0xc4, 0x89, 0x58, 0xb8, 0x9c, 0x25, 0x84, 0x67, 0xe8, 0x63, 0x7c, 0xd5, 0x5f, 0x88, - 0x2c, 0xf8, 0xf5, 0xe2, 0x01, 0x30, 0x9d, 0x56, 0xb5, 0x47, 0x7c, 0x42, 0x9d, 0x3e, 0xbc, 0x8b, - 0xd0, 0xc9, 0x57, 0x43, 0xeb, 0x88, 0x0c, 0x22, 0xf1, 0x8a, 0xf3, 0xd5, 0x34, 0xd3, 0x4f, 0xf8, - 0x62, 0xf0, 0xc2, 0x27, 0x5c, 0x40, 0x85, 0xea, 0x88, 0x82, 0x2d, 0xef, 0xde, 0x21, 0x17, 0xaf, - 0x08, 0x5e, 0x21, 0x7b, 0xc4, 0xaf, 0x7d, 0x7a, 0xfa, 0xe5, 0x36, 0x11, 0xae, 0xb1, 0x7d, 0x62, - 0xe2, 0x04, 0xcb, 0xd6, 0x24, 0x5e, 0x89, 0xd5, 0xd5, 0xac, 0x72, 0x97, 0x22, 0xf9, 0x04, 0x3a, - 0xd2, 0xf4, 0x57, 0x3e, 0x22, 0x92, 0x5e, 0xef, 0xc2, 0x24, 0xad, 0x7c, 0x4e, 0x77, 0xf8, 0xbd, - 0x5d, 0xde, 0xff, 0x09, 0xd5, 0x7d, 0xdf, 0xc4, 0x55, 0x7b, 0x4d, 0x7c, 0x11, 0x88, 0x9b, 0x57, - 0x30, 0xbe, 0x51, 0x3a, 0xaf, 0x11, 0x36, 0x26, 0x68, 0x20, 0xd6, 0x21, 0x1e, 0x28, 0x8e, 0xb1, - 0x7d, 0xd5, 0x56, 0xfa, 0x95, 0x11, 0x71, 0x0b, 0x94, 0x9d, 0x6a, 0xba, 0xd7, 0xd6, 0xb1, 0x6a, - 0x59, 0x57, 0xd4, 0x89, 0xe1, 0x0f, 0xaf, 0xbe, 0xa9, 0x17, 0xaf, 0x22, 0xc4, 0x55, 0xb1, 0xca, - 0x62, 0x0c, 0x72, 0xb8, 0x23, 0x36, 0xee, 0xdc, 0x40, 0x47, 0xc4, 0x21, 0x68, 0x0b, 0x51, 0x34, - 0x4d, 0x5f, 0x52, 0x27, 0xc1, 0x11, 0x15, 0xd6, 0xf5, 0x88, 0x47, 0x4a, 0xb8, 0x95, 0x63, 0xea, - 0xc7, 0xd5, 0x8f, 0xab, 0x9f, 0x57, 0x97, 0x8b, 0x08, 0x22, 0xd6, 0x6b, 0xbf, 0x96, 0x7a, 0x0d, - 0xea, 0xb6, 0x4b, 0xc4, 0x09, 0xf8, 0x60, 0x7e, 0xab, 0xaa, 0x95, 0x67, 0x4c, 0xb4, 0xf7, 0xd6, - 0xbe, 0xb4, 0x8b, 0x88, 0xfa, 0xe4, 0x8b, 0xd7, 0x24, 0x5e, 0xb1, 0x32, 0xf0, 0x4e, 0x2a, 0xef, - 0x74, 0x4a, 0xce, 0x2f, 0x82, 0xd1, 0x1a, 0xac, 0xf0, 0x7a, 0x65, 0x0d, 0xf2, 0x90, 0xb9, 0xfc, - 0x27, 0xc9, 0x24, 0xe4, 0x36, 0xce, 0x70, 0x86, 0x5c, 0x33, 0x15, 0x88, 0xc3, 0x08, 0x26, 0x7c, - 0xff, 0xd3, 0x4f, 0x4d, 0x38, 0x99, 0x2c, 0x10, 0x49, 0x13, 0xbe, 0x8a, 0xcf, 0xa2, 0x48, 0xf9, - 0xba, 0x2c, 0x52, 0x75, 0x8b, 0xeb, 0x49, 0xf2, 0x04, 0x2c, 0x19, 0x69, 0xf8, 0x26, 0xbf, 0xfc, - 0x99, 0x73, 0x0b, 0xe0, 0xb8, 0x85, 0xde, 0x43, 0x1d, 0xd8, 0x7a, 0x3b, 0x49, 0x88, 0xae, 0x61, - 0x7b, 0xba, 0xe0, 0x88, 0x66, 0xd9, 0xf5, 0xcf, 0x82, 0x83, 0x32, 0xa6, 0xe7, 0x9e, 0x93, 0xe5, - 0x5c, 0xd9, 0x63, 0x49, 0x74, 0x17, 0xe6, 0x45, 0xc1, 0x04, 0xbd, 0x62, 0xb8, 0x8a, 0x24, 0x55, - 0xd5, 0xca, 0x89, 0x10, 0x8b, 0x5e, 0x25, 0x14, 0x01, 0x53, 0xc4, 0xeb, 0xa3, 0x4b, 0xe0, 0xa4, - 0x53, 0x1d, 0xea, 0xb9, 0x7b, 0x56, 0x89, 0xfe, 0x87, 0xa5, 0x44, 0xe8, 0x95, 0x37, 0x04, 0x43, - 0x9d, 0x26, 0x66, 0x8c, 0x1f, 0x2c, 0xbe, 0xef, 0xe0, 0x8a, 0x8a, 0x37, 0x48, 0x36, 0x1e, 0x08, - 0xc9, 0x54, 0x95, 0x9e, 0x21, 0x05, 0xd1, 0xc6, 0x5e, 0x83, 0x12, 0xae, 0x41, 0xa3, 0xff, 0xff, - 0x94, 0x62, 0xed, 0xae, 0x82, 0xe9, 0x57, 0xab, 0x92, 0x44, 0xd6, 0x2f, 0x08, 0x78, 0x85, 0xff, - 0xd6, 0x2f, 0x12, 0x88, 0x54, 0xf0, 0x82, 0xbf, 0x84, 0x15, 0xfe, 0xac, 0x49, 0xd6, 0x2f, 0x08, - 0xaf, 0x22, 0xc2, 0x02, 0x2c, 0x7b, 0x17, 0x1d, 0x2b, 0x6d, 0xb6, 0xdf, 0xa8, 0x9a, 0x10, 0xde, - 0x0a, 0x14, 0x7d, 0xf5, 0x8b, 0x88, 0xd7, 0x04, 0x97, 0xbd, 0xbe, 0x51, 0x57, 0x9f, 0x7d, 0x0b, - 0x18, 0xa5, 0x62, 0x17, 0x2b, 0xe5, 0xbb, 0xe7, 0xe0, 0xb8, 0x72, 0x0c, 0xb1, 0x5d, 0x9b, 0x6d, - 0x15, 0xe6, 0x15, 0x72, 0x9d, 0x54, 0x8a, 0x24, 0xbc, 0x16, 0x8c, 0x4f, 0x7b, 0x55, 0x17, 0x27, - 0xd8, 0xf7, 0x6f, 0xf4, 0x6e, 0xfa, 0x10, 0x91, 0xbc, 0x47, 0xd0, 0x75, 0xef, 0x10, 0x84, 0x39, - 0xf5, 0x78, 0x43, 0x9c, 0xaa, 0xaa, 0xab, 0xfe, 0x89, 0x55, 0xce, 0x5e, 0xaa, 0x64, 0xff, 0xf8, - 0x21, 0x10, 0xb5, 0x7e, 0xf1, 0x0e, 0xba, 0x5e, 0x5b, 0xdd, 0xbf, 0x0a, 0x92, 0x6c, 0xd6, 0x96, - 0xae, 0x5f, 0xfa, 0xc4, 0xaf, 0x7c, 0x11, 0x9f, 0x77, 0x2a, 0x5f, 0x58, 0xa4, 0xe4, 0xaa, 0xfc, - 0x20, 0xb5, 0xf5, 0x8e, 0x57, 0x28, 0x42, 0xac, 0x6b, 0xe0, 0xbb, 0x63, 0x9d, 0xb9, 0x9b, 0x71, - 0xc4, 0xd7, 0x04, 0x81, 0x1a, 0xaf, 0xdf, 0x04, 0x61, 0x2e, 0x66, 0xf7, 0xc1, 0x28, 0x9d, 0xd3, - 0x75, 0xab, 0xd7, 0x14, 0x2a, 0x88, 0xbf, 0xaa, 0xfd, 0x05, 0x59, 0x78, 0x42, 0xf1, 0x32, 0xf4, - 0x71, 0xda, 0x27, 0x82, 0x21, 0x1b, 0xbc, 0x4c, 0xbd, 0x53, 0xaf, 0x58, 0xab, 0x82, 0x3e, 0xd1, - 0xb3, 0x63, 0xc4, 0x2c, 0xb8, 0x8f, 0xc4, 0x93, 0x69, 0xa6, 0x9a, 0xf8, 0x82, 0x15, 0xea, 0xbc, - 0x4f, 0xd5, 0xdf, 0x54, 0xef, 0xce, 0x56, 0xfb, 0x6d, 0xb6, 0xdf, 0xa2, 0x33, 0xe8, 0x8e, 0xf8, - 0x22, 0x2a, 0xad, 0xcc, 0x2f, 0x12, 0xb9, 0x7d, 0x6b, 0xe6, 0xea, 0xab, 0xa2, 0xc5, 0x27, 0x21, - 0x14, 0x3c, 0xc8, 0xf3, 0xe1, 0xf1, 0x96, 0x48, 0x3e, 0x9e, 0xf7, 0x6b, 0x97, 0xd1, 0xdd, 0x7c, - 0xc4, 0xaa, 0x6b, 0x86, 0x37, 0xd5, 0x20, 0xf9, 0x0a, 0xb5, 0xa8, 0x81, 0x17, 0x89, 0x9b, 0x12, - 0x20, 0x4a, 0x55, 0x69, 0x57, 0x13, 0x89, 0xa1, 0x88, 0x7c, 0x71, 0xbe, 0x89, 0x97, 0xc5, 0x99, - 0x55, 0xdd, 0xef, 0xf0, 0x51, 0x2e, 0x75, 0x55, 0x56, 0x71, 0x10, 0x4b, 0xda, 0x6a, 0xd5, 0x58, - 0x3e, 0xa9, 0x91, 0xb0, 0xca, 0x8e, 0xf5, 0xf0, 0x55, 0x7b, 0xf5, 0x55, 0x55, 0x58, 0xa5, 0xc3, - 0x12, 0x73, 0x12, 0xaa, 0x92, 0xe3, 0xc4, 0x29, 0x21, 0xcb, 0x1a, 0x34, 0x3b, 0x45, 0x6d, 0x7e, - 0x09, 0xf5, 0x49, 0x2d, 0x34, 0xdf, 0xe0, 0x8b, 0xb3, 0x35, 0x37, 0xf8, 0x4c, 0x94, 0x89, 0x3a, - 0x4e, 0xee, 0xeb, 0x82, 0xad, 0x25, 0x2b, 0x28, 0xd7, 0xaa, 0xaa, 0xa4, 0x7c, 0x45, 0x61, 0x0b, - 0xe8, 0x27, 0x17, 0xd1, 0xbb, 0xeb, 0x7f, 0x82, 0x29, 0xbf, 0xef, 0xa1, 0xe0, 0x3a, 0xfa, 0x10, - 0x4a, 0xba, 0x26, 0x1f, 0x45, 0xa9, 0x31, 0x35, 0x84, 0x2b, 0xa2, 0xc5, 0xf4, 0x49, 0x8f, 0x82, - 0x1a, 0xd6, 0xca, 0xc2, 0x08, 0xee, 0x3d, 0xdd, 0xdd, 0xfd, 0x62, 0x3f, 0xe8, 0x91, 0x57, 0x45, - 0x47, 0x4b, 0xe8, 0xc8, 0xdf, 0xd6, 0xae, 0x20, 0x45, 0x62, 0x7c, 0x45, 0xf4, 0x72, 0x27, 0xd1, - 0x2b, 0xc4, 0x18, 0x94, 0x73, 0x31, 0xe0, 0x98, 0x55, 0xe6, 0x92, 0x7e, 0xfc, 0xe7, 0xc4, 0xe9, - 0x24, 0x92, 0x6d, 0x7e, 0x08, 0xaa, 0x95, 0xf2, 0xbe, 0x2b, 0x4e, 0xdb, 0x5b, 0x46, 0xe8, 0x22, - 0x3b, 0x4b, 0xd1, 0x08, 0x05, 0x4e, 0x26, 0x8b, 0xdf, 0x44, 0xea, 0xea, 0x2a, 0x66, 0x0e, 0x10, - 0x45, 0x7f, 0x12, 0x8a, 0x00, 0x52, 0x9d, 0x6b, 0xac, 0xaf, 0x12, 0xae, 0x56, 0x11, 0x9b, 0xaa, - 0x46, 0xfa, 0x34, 0x67, 0x08, 0x6b, 0xa8, 0xc5, 0x2b, 0xae, 0xbe, 0x8a, 0x3b, 0x57, 0x20, 0x41, - 0x63, 0x5f, 0xa3, 0x6b, 0xe2, 0x0b, 0x75, 0xee, 0xc7, 0xe6, 0xbb, 0xfe, 0x27, 0x74, 0xf4, 0xe9, - 0x79, 0xaa, 0x6c, 0x4a, 0x7c, 0xc7, 0x55, 0x55, 0xf3, 0x0c, 0x43, 0x6d, 0xbf, 0x82, 0x31, 0x78, - 0x36, 0x4b, 0xf7, 0x84, 0x6b, 0x94, 0x4a, 0xaf, 0xe0, 0x84, 0x8e, 0xf8, 0xa2, 0xbe, 0x09, 0xcb, - 0x7b, 0xde, 0xe9, 0xab, 0xab, 0x56, 0x19, 0x47, 0xd7, 0xd1, 0x91, 0xbb, 0xeb, 0xac, 0x59, 0x31, - 0xf3, 0xaf, 0x5a, 0xfa, 0x3a, 0x3b, 0xf5, 0x47, 0x7e, 0x09, 0x04, 0x2a, 0xfd, 0xf0, 0x49, 0x55, - 0x55, 0x32, 0x7d, 0x09, 0x8a, 0x4c, 0x31, 0x7d, 0x11, 0xc9, 0x3a, 0x3a, 0x46, 0xfa, 0x23, 0xfc, - 0x12, 0x12, 0xaa, 0xa4, 0x6f, 0x82, 0x2d, 0x6b, 0xe7, 0xc1, 0x15, 0xa6, 0x95, 0x75, 0xe2, 0x51, - 0x3b, 0xe0, 0x97, 0xb4, 0xd5, 0x6b, 0xdf, 0x51, 0xf7, 0xc1, 0x11, 0x49, 0xeb, 0xb4, 0x9c, 0x14, - 0x04, 0x1d, 0x96, 0x3d, 0x09, 0x6d, 0x5a, 0xc4, 0x09, 0xdf, 0x05, 0x7c, 0xbe, 0x7b, 0x07, 0xea, - 0xc6, 0x83, 0x33, 0x32, 0x4f, 0x89, 0xa7, 0x97, 0xe9, 0x19, 0x8f, 0x17, 0xbd, 0xf0, 0x8f, 0xcf, - 0x97, 0xe1, 0x0d, 0xd2, 0xa4, 0x96, 0x6b, 0xdf, 0xc2, 0x07, 0x66, 0xb7, 0x58, 0xda, 0xf5, 0x7f, - 0x9b, 0x79, 0xf3, 0xc4, 0x88, 0x63, 0x1d, 0xb5, 0xae, 0xa1, 0x01, 0x28, 0x2b, 0x5f, 0x58, 0x3e, - 0x8e, 0x03, 0x40, 0x6a, 0xc4, 0x21, 0x08, 0xef, 0xd5, 0x32, 0x5d, 0x5a, 0xb0, 0x8c, 0xd8, 0x9f, - 0x0c, 0x7d, 0x5c, 0xfa, 0xb7, 0x0c, 0x84, 0x15, 0xae, 0x24, 0x21, 0x27, 0x2f, 0x77, 0xe2, 0x4c, - 0x7c, 0x65, 0xa1, 0x4b, 0x41, 0x62, 0x24, 0x11, 0xaa, 0xfa, 0xc5, 0xf0, 0x49, 0xdd, 0xdb, 0xea, - 0x9d, 0x1a, 0x23, 0xf4, 0x7a, 0xfa, 0x2e, 0x5f, 0x41, 0x4e, 0xf8, 0x2c, 0x32, 0x46, 0x86, 0xd5, - 0x6c, 0x71, 0xdc, 0x96, 0xce, 0x30, 0xf0, 0xec, 0x98, 0x30, 0x62, 0xc0, 0xc0, 0x79, 0xbc, 0x3a, - 0x34, 0xbb, 0x93, 0xca, 0x5b, 0x5f, 0x6e, 0x7b, 0xf8, 0xbd, 0x2b, 0xa7, 0xbf, 0x8c, 0xd8, 0xea, - 0x6a, 0xd1, 0x83, 0xab, 0x27, 0x2e, 0x75, 0x50, 0xb3, 0xdf, 0x89, 0x94, 0x6d, 0x0c, 0x70, 0xd9, - 0xd1, 0x54, 0xdc, 0x8b, 0xc4, 0x89, 0xb2, 0x42, 0xd0, 0xde, 0x38, 0x4b, 0xe4, 0x2a, 0xea, 0x66, - 0x3c, 0xc3, 0x2b, 0x5f, 0x45, 0xee, 0x23, 0xf4, 0x13, 0xae, 0x24, 0x4c, 0xf8, 0x66, 0x3a, 0x27, - 0xe2, 0x01, 0x11, 0x35, 0x54, 0x8b, 0xc9, 0x55, 0xfc, 0x11, 0xf7, 0x79, 0x7d, 0x11, 0xbe, 0xad, - 0x78, 0x8f, 0x9c, 0xa9, 0x3e, 0xa4, 0xff, 0xab, 0xbe, 0xa9, 0x2b, 0x12, 0x8e, 0xc7, 0x89, 0x59, - 0x8b, 0xea, 0xca, 0xe1, 0x3a, 0xaf, 0xbb, 0xf8, 0x24, 0x14, 0xe4, 0x8f, 0xdf, 0x04, 0x7a, 0x6d, - 0xac, 0xab, 0x82, 0xd1, 0x52, 0x3f, 0x54, 0xe6, 0xb8, 0xab, 0x82, 0x2c, 0xf9, 0xbb, 0xe0, 0x86, - 0xdd, 0x89, 0xaf, 0x7c, 0x12, 0x9e, 0x9d, 0xab, 0xd5, 0xeb, 0x90, 0xa9, 0x32, 0x6b, 0xe0, 0x84, - 0x71, 0x99, 0xad, 0xbe, 0x8a, 0x92, 0xa2, 0x68, 0x26, 0xef, 0xab, 0x7d, 0x11, 0xfe, 0xad, 0xf4, - 0x57, 0xfa, 0x2b, 0xdc, 0x21, 0x54, 0xd2, 0x0f, 0x5a, 0x34, 0xfd, 0xdd, 0xdf, 0xd5, 0x93, 0xf4, - 0x29, 0xfe, 0x08, 0xaa, 0xaa, 0xad, 0x7d, 0x5a, 0x48, 0x46, 0x8f, 0xd2, 0x75, 0x67, 0x0c, 0xeb, - 0x04, 0x05, 0xea, 0xbc, 0x48, 0x48, 0xb7, 0x77, 0xa4, 0xef, 0xc4, 0xdc, 0x48, 0x84, 0x6d, 0x7d, - 0x0c, 0x6a, 0xe0, 0xa4, 0x89, 0x14, 0xde, 0x93, 0x0a, 0x73, 0x83, 0xe6, 0x3b, 0x7a, 0xf8, 0x40, - 0x99, 0x0d, 0x13, 0xbf, 0x32, 0xe1, 0x86, 0xb8, 0x5f, 0x57, 0x1f, 0x82, 0x63, 0xd4, 0x67, 0xcd, - 0xcb, 0xb7, 0x76, 0x0f, 0x88, 0x1e, 0x4e, 0x4e, 0xf2, 0xea, 0xae, 0xf9, 0x86, 0x4b, 0x17, 0xdf, - 0x41, 0x37, 0x9e, 0x23, 0xf5, 0x45, 0x2b, 0xd5, 0x88, 0xae, 0x08, 0xc5, 0x5e, 0xa9, 0x1f, 0x82, - 0x3e, 0xef, 0x93, 0xaf, 0x5f, 0x7c, 0xe2, 0x55, 0xb6, 0xdb, 0x6f, 0xfd, 0x11, 0x2f, 0x89, 0x05, - 0x1d, 0x55, 0x57, 0x1d, 0x2f, 0x82, 0x43, 0x6a, 0xa3, 0x54, 0xf9, 0xeb, 0x3f, 0xa7, 0xeb, 0xa8, - 0xef, 0x3c, 0x10, 0x1e, 0x0c, 0x20, 0x68, 0x61, 0x42, 0x96, 0x2d, 0x9f, 0x6a, 0xf2, 0x62, 0x56, - 0xbc, 0x41, 0x2a, 0xba, 0xeb, 0x5e, 0x23, 0xe5, 0xe5, 0xc5, 0xf3, 0x62, 0xeb, 0xf2, 0x11, 0x34, - 0x4d, 0x34, 0xbb, 0xea, 0x97, 0x82, 0x83, 0x37, 0x33, 0x64, 0xf4, 0xcf, 0x0c, 0xef, 0x82, 0x8a, - 0x4f, 0x03, 0x49, 0x63, 0x06, 0x23, 0xc8, 0xa3, 0xe0, 0x84, 0xa9, 0x5b, 0x4e, 0x2f, 0xa2, 0xf5, - 0x70, 0x97, 0x69, 0xad, 0xb3, 0xef, 0xb2, 0xaa, 0xfe, 0x26, 0xef, 0xd6, 0xeb, 0x89, 0x21, 0x12, - 0xa7, 0x44, 0xdb, 0x7f, 0x90, 0x66, 0x99, 0x66, 0x2b, 0x82, 0x40, 0x9d, 0xef, 0x17, 0xcf, 0x5c, - 0x5b, 0xf8, 0x9e, 0x24, 0xcf, 0x7b, 0xcb, 0x84, 0xc5, 0x88, 0x05, 0x87, 0x26, 0x7c, 0x6b, 0xde, - 0xd3, 0x53, 0x8f, 0x39, 0xba, 0xd3, 0x4d, 0xb7, 0xfe, 0x09, 0xf5, 0xad, 0x6a, 0x91, 0x78, 0xbe, - 0x92, 0x57, 0x7f, 0x96, 0xef, 0xfa, 0x23, 0x1f, 0x56, 0x3e, 0xea, 0xba, 0xe2, 0x2d, 0x35, 0xb4, - 0xd6, 0xf9, 0x2e, 0xff, 0xa9, 0x45, 0xf0, 0x85, 0xdf, 0x4b, 0x57, 0x7f, 0xc4, 0x74, 0x92, 0xd2, - 0x4b, 0xc1, 0x77, 0x55, 0x5d, 0xa9, 0x7c, 0x14, 0x67, 0xf4, 0xa6, 0xaf, 0x17, 0xc2, 0x44, 0x2d, - 0x24, 0xd1, 0xac, 0x9d, 0x3a, 0x7e, 0x09, 0x34, 0xe9, 0xb0, 0xf1, 0xc7, 0xe4, 0xd4, 0x92, 0xab, - 0x7b, 0xf9, 0x2d, 0xaf, 0xe0, 0xa0, 0x62, 0x23, 0xb0, 0x80, 0xf1, 0xf5, 0x7f, 0xee, 0xf8, 0xe2, - 0xe4, 0xbc, 0xa6, 0xaa, 0x5b, 0x61, 0xdf, 0xc1, 0x19, 0x42, 0x5d, 0xb8, 0xd6, 0x0e, 0x8c, 0x1b, - 0xbe, 0x08, 0xeb, 0x9b, 0xf5, 0x73, 0x09, 0x6d, 0x36, 0x5f, 0x1d, 0x76, 0xbb, 0xab, 0x9f, 0xa2, - 0x64, 0xcb, 0xc1, 0x35, 0xaa, 0x9a, 0x35, 0xb6, 0xf2, 0x72, 0x0a, 0x26, 0x0b, 0xd2, 0xf4, 0x47, - 0x7c, 0x11, 0xea, 0x95, 0xc8, 0x8e, 0x09, 0x0b, 0x2f, 0xdf, 0xec, 0x9a, 0xb8, 0x9e, 0x0a, 0x42, - 0x29, 0x2b, 0xc6, 0x34, 0xfb, 0xbe, 0x74, 0xae, 0x08, 0xb7, 0x55, 0x63, 0xe6, 0xaa, 0xeb, 0x9b, - 0x9b, 0x0d, 0x9e, 0x08, 0xee, 0xfc, 0xa9, 0xf0, 0x44, 0x75, 0x5c, 0xa9, 0x5d, 0x11, 0xe4, 0xc4, - 0x88, 0xec, 0xcf, 0x69, 0x24, 0xfb, 0x7d, 0xf1, 0x20, 0x93, 0xbb, 0xa3, 0xbf, 0x52, 0x27, 0xd6, - 0x77, 0xc1, 0x20, 0xca, 0x69, 0x26, 0xea, 0xe2, 0x89, 0x9b, 0xdb, 0xb5, 0xf6, 0x5d, 0x5f, 0xca, - 0x7a, 0x74, 0xfc, 0x59, 0x9d, 0x53, 0xd2, 0xa5, 0xe1, 0x69, 0xa4, 0x6a, 0xb2, 0xb9, 0xb1, 0xb6, - 0x61, 0x46, 0x7c, 0xf8, 0x9f, 0xec, 0x8f, 0x7f, 0x89, 0xb6, 0x89, 0xba, 0xc2, 0xf8, 0x9d, 0xaf, - 0xd8, 0xbc, 0xb9, 0xf0, 0x87, 0x77, 0x5d, 0xa6, 0xae, 0xfe, 0x12, 0xa0, 0x32, 0x88, 0x0a, 0x03, - 0x68, 0x80, 0xdd, 0xfc, 0x4d, 0xf3, 0x16, 0xf7, 0xf2, 0x5d, 0xd5, 0x57, 0x05, 0x06, 0xb4, 0xad, - 0x34, 0xd5, 0xa2, 0x27, 0xc1, 0x11, 0x15, 0x7a, 0xf8, 0x2e, 0x32, 0xe4, 0x82, 0xea, 0x90, 0x3c, - 0x58, 0x9c, 0x7a, 0xdd, 0x56, 0xaf, 0x8a, 0xd2, 0xa6, 0xd5, 0x8d, 0xfc, 0x17, 0x1a, 0xca, 0xfc, - 0xb8, 0x74, 0xf8, 0x27, 0x3c, 0xd9, 0xd8, 0xef, 0xaf, 0x85, 0x2f, 0x73, 0xe5, 0x36, 0x9d, 0x0e, - 0x8e, 0xed, 0x67, 0xef, 0xf0, 0x58, 0x47, 0xcd, 0x99, 0xb3, 0x49, 0x2b, 0x85, 0xd0, 0x4d, 0x2a, - 0x5c, 0x12, 0x08, 0x69, 0xa6, 0x9a, 0xc3, 0xeb, 0x2f, 0x8b, 0x33, 0x4d, 0x6d, 0x6f, 0xe0, 0xa3, - 0x97, 0x12, 0xd2, 0x4a, 0x2f, 0x8e, 0x13, 0xbb, 0xee, 0xee, 0xee, 0xeb, 0x96, 0xab, 0xf1, 0x2b, - 0xff, 0x12, 0x09, 0x3a, 0xae, 0x0b, 0xf0, 0x4d, 0xdd, 0xea, 0xbf, 0x7c, 0x10, 0xdd, 0xf6, 0x3e, - 0xea, 0xa5, 0xc6, 0xe2, 0xe0, 0x8b, 0xbb, 0xf7, 0xcd, 0xbd, 0xd7, 0x47, 0x89, 0x16, 0x20, 0x4a, - 0x8e, 0x3b, 0xc2, 0x1f, 0x5e, 0xf9, 0x88, 0xb5, 0xf9, 0x05, 0x2b, 0x3a, 0x7e, 0x09, 0x7b, 0x49, - 0xad, 0x52, 0xe4, 0x5e, 0x2a, 0xaf, 0x2e, 0x27, 0x6f, 0xf6, 0x23, 0x56, 0xd7, 0x20, 0xda, 0xdf, - 0xc2, 0x43, 0x39, 0xf5, 0xd2, 0x6b, 0xe0, 0x84, 0xa8, 0xf7, 0xe7, 0x48, 0x0b, 0x82, 0x22, 0xcf, - 0x9a, 0x54, 0xb8, 0x81, 0x2d, 0x35, 0xd6, 0xfe, 0xee, 0xef, 0xf0, 0x9e, 0xb6, 0x4a, 0xaf, 0x5d, - 0xf7, 0x4f, 0xcd, 0xad, 0x7c, 0x50, 0x8d, 0xb3, 0x7a, 0xb5, 0x5c, 0x20, 0x7a, 0x45, 0xcd, 0xab, - 0x48, 0xdd, 0xf5, 0xc5, 0xcb, 0x9f, 0x4d, 0xfd, 0x8e, 0xcd, 0xff, 0x04, 0x85, 0xa5, 0x5d, 0x30, - 0xf8, 0x25, 0x2e, 0xd3, 0x5a, 0x6e, 0xc5, 0x71, 0x44, 0xb4, 0x94, 0xb0, 0xbf, 0xc2, 0x77, 0xd1, - 0xaa, 0xb4, 0xbe, 0xc9, 0xcf, 0x9e, 0x69, 0x6d, 0x7f, 0x2d, 0xa4, 0xbf, 0x21, 0x55, 0x7f, 0x52, - 0x9c, 0xae, 0x08, 0x6f, 0xa5, 0x05, 0x71, 0x74, 0x92, 0x7a, 0x49, 0x65, 0xe8, 0xa6, 0x4f, 0xa9, - 0x93, 0xeb, 0x5f, 0x2f, 0x55, 0x5d, 0x72, 0x93, 0x12, 0x72, 0x89, 0x34, 0xb6, 0xd8, 0xb6, 0x2d, - 0xfc, 0x5a, 0x8f, 0x75, 0x63, 0xd4, 0xd8, 0x2b, 0x77, 0xb7, 0xfe, 0x17, 0xab, 0x76, 0xb6, 0x92, - 0xc3, 0x2e, 0xb6, 0xcc, 0xff, 0x66, 0xd9, 0x3f, 0x8b, 0x2f, 0x3e, 0x2b, 0x59, 0xb7, 0xc9, 0x4f, - 0x4b, 0xca, 0x22, 0x6c, 0xfc, 0x79, 0xe4, 0xf7, 0xc5, 0x7b, 0x76, 0xfc, 0x55, 0xaa, 0x77, 0x7f, - 0xc1, 0x19, 0x39, 0x98, 0x8b, 0xe0, 0x8e, 0xdd, 0xbe, 0xc5, 0x76, 0x35, 0xb4, 0xff, 0x04, 0xe4, - 0x7b, 0xe7, 0xdd, 0xcf, 0xab, 0x97, 0xd1, 0x1e, 0xba, 0x12, 0xff, 0x30, 0xaa, 0xd1, 0xf8, 0x50, - 0xab, 0x64, 0x93, 0x4b, 0xcd, 0xb6, 0xde, 0x9b, 0xb9, 0xc4, 0x41, 0x41, 0xd9, 0x9f, 0x28, 0xef, - 0x74, 0xab, 0xc1, 0x55, 0xa6, 0xac, 0x23, 0x61, 0xb1, 0x99, 0xb3, 0x7a, 0xb1, 0xf0, 0x84, 0xb6, - 0x9d, 0x9d, 0x39, 0x7b, 0x9f, 0x2a, 0xf1, 0x12, 0x92, 0x5b, 0xaf, 0x82, 0x21, 0x54, 0x55, 0x4a, - 0x1e, 0x0a, 0xba, 0x49, 0x2d, 0x2d, 0xc7, 0x35, 0xdb, 0xe0, 0xa2, 0xda, 0xf2, 0x6b, 0xec, 0x7d, - 0x17, 0x2f, 0x82, 0x18, 0xda, 0xfe, 0x0f, 0x9a, 0xb2, 0x69, 0x7f, 0x96, 0x92, 0x5f, 0xc2, 0x3b, - 0xbd, 0x24, 0xbb, 0xd3, 0xf0, 0x43, 0x49, 0x2f, 0x0f, 0x82, 0x22, 0xa6, 0x97, 0x5f, 0x04, 0x34, - 0x92, 0x4b, 0x55, 0xcd, 0x27, 0x4f, 0xf0, 0x9d, 0xea, 0x6d, 0x77, 0xd7, 0x5c, 0xbe, 0x12, 0xa5, - 0xb4, 0x8f, 0x26, 0x7a, 0xd5, 0x71, 0x36, 0x9a, 0xab, 0x6b, 0x4d, 0x71, 0x16, 0x9a, 0xda, 0xda, - 0xf1, 0x25, 0x49, 0x24, 0x92, 0x77, 0x6b, 0xef, 0x6d, 0xeb, 0x82, 0x2d, 0x6a, 0xe7, 0xcd, 0x69, - 0x52, 0x2e, 0x78, 0xcd, 0x5f, 0x4d, 0x36, 0x92, 0x4a, 0x24, 0x9a, 0xa5, 0xf0, 0x47, 0x5d, 0x53, - 0x2f, 0x04, 0x91, 0x76, 0xb4, 0x6a, 0xbc, 0x79, 0x9d, 0xba, 0xd6, 0xae, 0xed, 0x27, 0xe0, 0x92, - 0x78, 0x76, 0x7c, 0xda, 0x53, 0xe7, 0x96, 0x97, 0x48, 0x9d, 0xd7, 0x5f, 0x13, 0x5c, 0x22, 0x56, - 0xd6, 0xab, 0x56, 0xad, 0x4f, 0x9e, 0x13, 0xea, 0xa9, 0xd3, 0x4d, 0x73, 0x11, 0xdf, 0xf2, 0x9c, - 0xfb, 0x5b, 0xe4, 0xc9, 0xb7, 0xf2, 0x08, 0x6d, 0xff, 0x14, 0x25, 0x5d, 0xf6, 0x92, 0x1c, 0xdf, - 0x82, 0x42, 0x26, 0xe9, 0xb6, 0xff, 0x21, 0xe7, 0xc2, 0x52, 0xfc, 0x23, 0x3d, 0xb5, 0x7c, 0xf9, - 0xb3, 0x25, 0xc5, 0xe1, 0x2f, 0x17, 0x47, 0x76, 0x7e, 0x6d, 0x6e, 0xb8, 0x22, 0x14, 0x94, 0xb9, - 0xf3, 0xe0, 0x88, 0xa9, 0x24, 0xe9, 0x45, 0xf0, 0x5d, 0xd2, 0x49, 0xbd, 0xd2, 0xfc, 0x11, 0x53, - 0xe7, 0xcd, 0x57, 0x04, 0x36, 0xd3, 0xdc, 0xae, 0x5e, 0x7c, 0x6b, 0xc1, 0x3d, 0x37, 0xa4, 0x9d, - 0xad, 0xcf, 0xb2, 0xde, 0x2b, 0x5c, 0x25, 0xda, 0x69, 0x2d, 0xfd, 0x11, 0xcf, 0x9f, 0x52, 0x69, - 0x37, 0xf5, 0x88, 0x04, 0x95, 0x93, 0xc4, 0xeb, 0xf8, 0x2e, 0xb4, 0xd7, 0x75, 0xf7, 0xc1, 0x45, - 0x6b, 0x6e, 0xdf, 0xbe, 0x6a, 0x49, 0x7e, 0x49, 0xec, 0xf7, 0xf8, 0x21, 0xd3, 0x3d, 0x38, 0xab, - 0x82, 0x2c, 0xfb, 0xd5, 0x44, 0x6b, 0x82, 0x42, 0x69, 0x24, 0x60, 0x7c, 0xd6, 0x6c, 0xe7, 0xfe, - 0x1c, 0xa6, 0x9d, 0x35, 0x1a, 0x4b, 0xe8, 0xff, 0xe0, 0x8f, 0x36, 0xef, 0x5c, 0x22, 0x54, 0xe9, - 0xe9, 0x5a, 0x49, 0x2d, 0x44, 0x7e, 0x4d, 0x2b, 0x7e, 0x20, 0xb2, 0xf6, 0xbd, 0xd3, 0xf7, 0x48, - 0xb8, 0x93, 0x73, 0xcb, 0x9d, 0x43, 0x12, 0x7a, 0x67, 0x82, 0xd2, 0x4d, 0xd3, 0xed, 0xb5, 0x6f, - 0x94, 0xea, 0xae, 0xfe, 0xef, 0x7a, 0xe3, 0xab, 0x77, 0xdd, 0xc9, 0x2b, 0xd7, 0x2f, 0x57, 0xf0, - 0x90, 0xab, 0xbb, 0x6d, 0xed, 0xf9, 0x4e, 0x91, 0xf3, 0xf1, 0x85, 0x55, 0x24, 0x3b, 0x4f, 0x99, - 0x23, 0xb6, 0xab, 0x95, 0x19, 0x37, 0xf8, 0x40, 0x9c, 0xb9, 0x49, 0xa8, 0x9f, 0x7a, 0x6f, 0xe0, - 0xa3, 0x3e, 0x74, 0x9b, 0x67, 0x7f, 0x84, 0xe9, 0x4b, 0xaa, 0x6d, 0xcb, 0x9e, 0x20, 0xaa, 0x68, - 0x96, 0x16, 0x92, 0x4d, 0x35, 0xe2, 0x77, 0xba, 0xee, 0xb8, 0x27, 0x19, 0x7a, 0x77, 0x56, 0xea, - 0xb8, 0x21, 0x3a, 0xed, 0xea, 0xf8, 0x27, 0xa6, 0xfd, 0xba, 0x58, 0x7c, 0x11, 0xe9, 0xa5, 0x9c, - 0xf8, 0x25, 0xac, 0xda, 0x58, 0xdb, 0x6b, 0x3b, 0xe4, 0xee, 0xdf, 0x84, 0x2d, 0xe7, 0xd6, 0xdd, - 0x9e, 0x32, 0xad, 0xdf, 0x04, 0x24, 0xab, 0x4d, 0x77, 0xdd, 0x24, 0x8f, 0xff, 0x05, 0x3d, 0x24, - 0xd2, 0x44, 0x7c, 0x7e, 0xe3, 0x6b, 0x59, 0x85, 0xf1, 0xd7, 0xe7, 0xdc, 0xd9, 0x7d, 0xd2, 0xf1, - 0x56, 0xb4, 0xf6, 0xd3, 0xf0, 0x5b, 0x69, 0xa4, 0x92, 0x2e, 0x6f, 0x39, 0xf0, 0x5b, 0x76, 0xed, - 0xa6, 0xda, 0x6d, 0x98, 0x5f, 0x05, 0x75, 0x4d, 0x2c, 0xfd, 0x2b, 0x55, 0xf0, 0x55, 0xe0, 0x9a, - 0x92, 0x49, 0x25, 0x4d, 0x22, 0x6a, 0x55, 0xe3, 0xea, 0xba, 0xdb, 0x68, 0xfe, 0x5b, 0x2f, 0xf0, - 0x8e, 0xa9, 0x24, 0x5c, 0x3f, 0xda, 0xcd, 0xad, 0xc6, 0xb8, 0x29, 0x2a, 0x49, 0xcb, 0xee, 0xee, - 0x93, 0x36, 0x5f, 0x15, 0xf0, 0x95, 0x28, 0xca, 0xee, 0x5d, 0xfc, 0x14, 0x76, 0xdb, 0x7a, 0x7e, - 0xf9, 0x89, 0x1d, 0xab, 0x43, 0xf0, 0xb9, 0x69, 0x53, 0x54, 0xcd, 0xf3, 0x0a, 0x3f, 0xaf, 0x4f, - 0xfe, 0x12, 0x8f, 0x2c, 0xf5, 0x5a, 0x0b, 0x11, 0xf9, 0x29, 0xba, 0x75, 0xcb, 0xdb, 0x6f, 0xca, - 0x5d, 0x34, 0xfc, 0x54, 0xf9, 0x69, 0xad, 0x5f, 0x11, 0x05, 0x1b, 0xcd, 0x84, 0xcd, 0x5e, 0xf8, - 0x4f, 0x89, 0x36, 0xed, 0xdb, 0xf1, 0xd4, 0xe9, 0xb1, 0xed, 0xac, 0x43, 0xef, 0xee, 0x9d, 0x3f, - 0x92, 0x92, 0xd2, 0x58, 0x85, 0x7b, 0xe0, 0xb4, 0xcd, 0x52, 0x6a, 0xe9, 0xbf, 0x7d, 0x9c, 0xb7, - 0xfe, 0x3b, 0x9f, 0xab, 0x45, 0xcd, 0xd1, 0x3f, 0xc2, 0x37, 0x61, 0x9b, 0x6e, 0x39, 0x39, 0xad, - 0xdb, 0x74, 0x0d, 0xfc, 0x71, 0x5a, 0x79, 0x9a, 0x96, 0xa9, 0xa3, 0x7f, 0xc2, 0x64, 0x6a, 0xd3, - 0x2d, 0xdf, 0xc6, 0x53, 0xdd, 0x3a, 0x71, 0xef, 0xd4, 0xf3, 0x50, 0xf4, 0xdd, 0xf1, 0xf5, 0x5a, - 0xc9, 0x05, 0x89, 0x75, 0xf0, 0x48, 0x32, 0xc8, 0x99, 0xb7, 0xc2, 0x42, 0x56, 0xbd, 0x23, 0xff, - 0x25, 0x6f, 0xf2, 0x69, 0xdf, 0xca, 0x4c, 0xbd, 0xaf, 0x08, 0x69, 0x2b, 0x55, 0x6b, 0x6e, 0xfe, - 0x12, 0x2e, 0xac, 0x7a, 0xb7, 0xe0, 0x9b, 0xa4, 0x92, 0xa6, 0xdb, 0x55, 0xf0, 0x4f, 0x8b, 0x4a, - 0xd5, 0xad, 0x7c, 0xb6, 0xb6, 0xfc, 0x29, 0x96, 0x99, 0x68, 0x5a, 0x2c, 0xe4, 0x83, 0xee, 0xfd, - 0xf5, 0xef, 0xbc, 0x91, 0x4f, 0xf3, 0x5e, 0x93, 0x1f, 0x88, 0x21, 0x77, 0xd3, 0xa5, 0xee, 0x99, - 0xff, 0xe0, 0x92, 0x5e, 0xde, 0xc7, 0xcb, 0x49, 0xd2, 0xf8, 0x26, 0x39, 0x34, 0xba, 0x4d, 0x6e, - 0xb5, 0xd2, 0x6f, 0x82, 0xb2, 0x65, 0xdb, 0xd3, 0x4b, 0x9a, 0x49, 0x8f, 0x84, 0xf7, 0x56, 0xb6, - 0x8d, 0x9e, 0x09, 0xe9, 0x52, 0xd2, 0xbd, 0x7c, 0x23, 0x6d, 0x32, 0xe4, 0x52, 0xe5, 0xef, 0x6b, - 0xcb, 0x4b, 0x6f, 0xc1, 0x3f, 0x74, 0x94, 0x9a, 0xdf, 0xdf, 0x17, 0x2e, 0xdb, 0xd3, 0x96, 0x5e, - 0x19, 0xcd, 0x04, 0xe0, 0x6c, 0xa9, 0xc4, 0x12, 0x0b, 0xfe, 0xb8, 0x2a, 0x12, 0xe8, 0xb2, 0x7f, - 0x75, 0xbd, 0x70, 0x99, 0x9b, 0xd3, 0x7d, 0x57, 0x04, 0x26, 0xa4, 0x86, 0x95, 0xbe, 0x2c, 0x5d, - 0xdf, 0x2e, 0x25, 0x7e, 0x4a, 0x6b, 0xf8, 0x42, 0xdc, 0xf5, 0x5b, 0xd7, 0xe0, 0xba, 0xda, 0x69, - 0x27, 0x4d, 0x34, 0xeb, 0xe2, 0x24, 0xc6, 0x61, 0x35, 0xba, 0xa4, 0xc8, 0xd9, 0x9e, 0x22, 0x92, - 0x51, 0x24, 0xdd, 0xbf, 0x8a, 0xbe, 0xac, 0x7a, 0xf9, 0x89, 0x97, 0x1d, 0xf3, 0x51, 0x65, 0xbf, - 0x08, 0x95, 0x23, 0x59, 0x2e, 0x2e, 0x4a, 0xec, 0x97, 0xc9, 0x24, 0x58, 0x66, 0x48, 0xe4, 0x9e, - 0x5d, 0x2a, 0x5e, 0x23, 0xb4, 0xd3, 0x44, 0x14, 0x6b, 0xf1, 0x97, 0xbb, 0xb5, 0x1a, 0xc4, 0x2a, - 0x64, 0x87, 0x54, 0x6b, 0xce, 0xbf, 0x13, 0x75, 0x44, 0xc9, 0x32, 0xff, 0xc4, 0x71, 0x1f, 0xb2, - 0xaa, 0xeb, 0x90, 0x44, 0xdf, 0xf0, 0x42, 0x6d, 0xa6, 0xc8, 0x91, 0x87, 0x87, 0x04, 0xd5, 0x3a, - 0xe6, 0xed, 0xff, 0x8f, 0xa7, 0x7a, 0x45, 0xc7, 0xda, 0x6f, 0xf2, 0x5b, 0xcb, 0xfc, 0x34, 0x44, - 0xdf, 0x56, 0xdb, 0x6d, 0xbf, 0xf1, 0x5b, 0x2b, 0xdd, 0x3f, 0x86, 0xfc, 0xb8, 0xab, 0x4d, 0x3f, - 0xf0, 0x51, 0x7b, 0xf9, 0x73, 0x2f, 0x8e, 0x2d, 0xe9, 0x9f, 0x53, 0xe9, 0x97, 0xc5, 0x7e, 0x30, - 0x93, 0x5b, 0xbb, 0xe9, 0x4b, 0x9b, 0xbf, 0x88, 0x3a, 0x69, 0xfb, 0x49, 0xf8, 0x46, 0xd9, 0x74, - 0xfa, 0xfd, 0xdb, 0x3e, 0xd5, 0x7e, 0x17, 0x97, 0xc8, 0xe2, 0xf6, 0xda, 0xd6, 0xea, 0xff, 0xe1, - 0x3d, 0x3a, 0x67, 0xff, 0xc2, 0x5c, 0xbf, 0xcf, 0x9e, 0x0b, 0xef, 0xbc, 0x99, 0x4d, 0x55, 0xd5, - 0xff, 0xc3, 0x86, 0xa5, 0x4b, 0x2a, 0xb7, 0x6f, 0xfc, 0x4e, 0x92, 0x49, 0x3b, 0x6d, 0xfc, 0x4e, - 0xda, 0x49, 0x8c, 0xd4, 0xe6, 0xb5, 0x8a, 0x35, 0xc1, 0x0f, 0x76, 0x93, 0x2f, 0x57, 0x3e, 0xf7, - 0x7f, 0x82, 0x4b, 0x69, 0xf1, 0xcf, 0x82, 0x73, 0x37, 0x0a, 0xad, 0x25, 0xb1, 0xf2, 0x52, 0x48, - 0xb9, 0x17, 0xa3, 0xe5, 0xf0, 0xa0, 0x9c, 0xd2, 0xad, 0x67, 0xfa, 0xaa, 0xdd, 0x3f, 0x11, 0x04, - 0x44, 0x26, 0x6b, 0xdf, 0x26, 0xd2, 0x6f, 0xe4, 0xea, 0xeb, 0xa2, 0x25, 0xfb, 0x29, 0x74, 0xac, - 0xdb, 0xf3, 0x69, 0xd3, 0xf2, 0x6c, 0x6e, 0x66, 0x3d, 0xd7, 0x35, 0xc5, 0x6e, 0xba, 0x74, 0xfd, - 0xe9, 0xdd, 0x70, 0x9f, 0x69, 0xb6, 0xeb, 0xf1, 0xfb, 0x76, 0xf5, 0x4c, 0xd7, 0x57, 0x88, 0x96, - 0xad, 0xfe, 0x27, 0x57, 0x97, 0x1d, 0xdf, 0xc2, 0x37, 0xbe, 0xe4, 0x87, 0x6e, 0xdf, 0x92, 0x93, - 0x93, 0xd5, 0xe1, 0x0c, 0x5a, 0x59, 0x7f, 0x1b, 0x92, 0x2f, 0x25, 0xee, 0xfe, 0x24, 0xef, 0x6e, - 0xab, 0xf8, 0x22, 0xa6, 0x5f, 0xa7, 0xf8, 0xba, 0x69, 0x97, 0xb2, 0x28, 0x9a, 0xcd, 0x0f, 0x7b, - 0xdf, 0xc4, 0x55, 0xa9, 0xb1, 0x2e, 0xd7, 0x82, 0x21, 0xc3, 0x35, 0x7d, 0x2b, 0xf0, 0x59, 0xba, - 0x53, 0x30, 0x5c, 0x61, 0xdb, 0xfb, 0x5f, 0x55, 0xc1, 0x81, 0xdb, 0xa4, 0xb6, 0x96, 0xad, 0xd5, - 0x7f, 0xcb, 0xce, 0xdf, 0x82, 0x4a, 0x5b, 0x71, 0x7c, 0xb2, 0xe7, 0xf8, 0xfa, 0x6d, 0xd2, 0xa4, - 0x38, 0xbf, 0x27, 0xf8, 0x8f, 0x3e, 0x35, 0xd2, 0xf0, 0x57, 0x7b, 0xee, 0xdd, 0xdf, 0x6f, 0x10, - 0xcb, 0x43, 0x52, 0x31, 0xe6, 0x22, 0x26, 0x36, 0xd7, 0xc1, 0x1f, 0x4d, 0x62, 0xfa, 0xe4, 0xab, - 0xc1, 0x17, 0x9b, 0x25, 0xf1, 0x74, 0xe9, 0x56, 0xdf, 0xcd, 0x4c, 0xf9, 0x6b, 0xc1, 0x0e, 0xaf, - 0x8b, 0xe6, 0xa6, 0xd7, 0xe2, 0x3a, 0x6f, 0x74, 0x9b, 0x5d, 0xe9, 0x5b, 0x7c, 0x15, 0x99, 0x84, - 0x5a, 0xb5, 0xa7, 0xa5, 0x2f, 0xe0, 0xf9, 0x79, 0x76, 0xf1, 0x15, 0xd0, 0xba, 0xf8, 0xcb, 0x7a, - 0xdc, 0xd9, 0x55, 0xed, 0x3b, 0x2a, 0xfe, 0x53, 0x5d, 0xdf, 0xc4, 0x4f, 0xfd, 0xbb, 0x78, 0x89, - 0x77, 0x4b, 0xe2, 0xe8, 0x6a, 0x87, 0xd5, 0x78, 0x90, 0x49, 0xdd, 0xde, 0xf8, 0x8d, 0x5b, 0x69, - 0xa6, 0xad, 0x7b, 0x2b, 0x4d, 0x7e, 0x4e, 0x68, 0xfc, 0x23, 0xa6, 0x95, 0xa2, 0xb0, 0x95, 0x50, - 0x69, 0x5f, 0xc2, 0x56, 0xed, 0x2a, 0xa6, 0xdf, 0xd1, 0x59, 0xf1, 0x5b, 0x76, 0xd2, 0x96, 0x7f, - 0x04, 0x73, 0x49, 0x26, 0x8f, 0x87, 0xbc, 0x48, 0x4b, 0x55, 0xd6, 0x9a, 0x0c, 0x88, 0x7c, 0xd5, - 0xbf, 0xc2, 0x25, 0xa6, 0xdd, 0x4d, 0x96, 0xae, 0xff, 0x12, 0x43, 0xed, 0x92, 0xc7, 0x70, 0xcb, - 0xf2, 0x52, 0xba, 0x4f, 0x10, 0xee, 0xff, 0xa1, 0x8e, 0xfa, 0x3e, 0xbe, 0x2e, 0xdd, 0x5f, 0x57, - 0xf0, 0xe5, 0x21, 0xb5, 0x7b, 0x7b, 0xb2, 0x7f, 0xf8, 0xbc, 0x5b, 0xa5, 0x6b, 0xe1, 0x3e, 0xa9, - 0xbe, 0xbe, 0x4b, 0x1a, 0x1d, 0x7c, 0x66, 0xd5, 0x23, 0xe3, 0x5d, 0xdd, 0x6c, 0x76, 0x36, 0xbc, - 0x15, 0xd0, 0xd7, 0x9b, 0x53, 0xdd, 0xfc, 0xdf, 0x05, 0xfb, 0x4b, 0x97, 0x12, 0x8d, 0x73, 0xf2, - 0xff, 0xf3, 0xd5, 0x37, 0xdb, 0xf2, 0x73, 0x53, 0xd4, 0x9c, 0xb7, 0xc8, 0xcf, 0x82, 0x3d, 0xa9, - 0xb6, 0xbe, 0x0a, 0xf4, 0xd3, 0xd0, 0xd3, 0x7b, 0x4d, 0x9b, 0xe5, 0xf3, 0x76, 0x87, 0x4d, 0xcb, - 0x82, 0x52, 0x67, 0xf9, 0xf1, 0xaf, 0x63, 0xe0, 0xb6, 0x58, 0x27, 0xae, 0x94, 0xbe, 0x2c, 0x4d, - 0x24, 0x92, 0x26, 0x93, 0x59, 0xac, 0xdf, 0x04, 0xc3, 0x2f, 0x22, 0x4a, 0xa4, 0xbe, 0xf9, 0x06, - 0xb5, 0x55, 0xf1, 0x15, 0xd5, 0x34, 0xff, 0x17, 0x74, 0xe9, 0xb4, 0xd6, 0xf9, 0x6d, 0x35, 0xf8, - 0x8b, 0xea, 0xfb, 0xae, 0x6d, 0xab, 0x5c, 0x49, 0xb7, 0x5f, 0x84, 0x2d, 0xed, 0xf3, 0xea, 0x6f, - 0xfc, 0x23, 0xe4, 0xe5, 0x64, 0x8c, 0x91, 0x86, 0x30, 0x6d, 0xdf, 0xbf, 0x11, 0xb6, 0xdc, 0xbe, - 0xff, 0x79, 0xa1, 0xf8, 0x4f, 0x61, 0xbb, 0x1a, 0xe9, 0xe2, 0x3f, 0x65, 0xb7, 0x6f, 0xc2, 0x54, - 0x1a, 0x6d, 0xb0, 0xd3, 0x6d, 0x36, 0xdf, 0x26, 0xad, 0x9b, 0xf8, 0xea, 0xaf, 0x0a, 0x70, 0xed, - 0x8b, 0xd5, 0x7c, 0x20, 0x23, 0xa2, 0x5d, 0xd2, 0xa7, 0x4d, 0x72, 0x12, 0xab, 0x27, 0x05, 0x25, - 0x6e, 0x96, 0x5e, 0x9c, 0x7a, 0x22, 0xec, 0xf5, 0xd7, 0xab, 0x82, 0x1b, 0x69, 0xd2, 0xea, 0xee, - 0xde, 0x9f, 0x9a, 0xef, 0x97, 0x82, 0x1d, 0xdd, 0xea, 0xb9, 0x69, 0xdf, 0xeb, 0x32, 0x4e, 0xed, - 0xed, 0xae, 0x0a, 0xa6, 0x93, 0xd5, 0x2b, 0x69, 0xcb, 0xe9, 0x91, 0xbe, 0x88, 0xff, 0x08, 0x15, - 0xad, 0x3e, 0x4d, 0x7d, 0xd7, 0x04, 0x62, 0x9e, 0xf9, 0xdf, 0x28, 0xf5, 0xaf, 0xdd, 0x6b, 0xf2, - 0xcd, 0xba, 0x7e, 0x59, 0xf1, 0xff, 0x11, 0xa6, 0xdd, 0x6b, 0x5d, 0x12, 0xab, 0x98, 0xad, 0x29, - 0x3f, 0xe1, 0x29, 0xfb, 0xb7, 0x7d, 0x7d, 0xeb, 0x6d, 0x72, 0x69, 0xaa, 0x7e, 0xcb, 0x37, 0x9b, - 0xf9, 0x69, 0xd5, 0xfd, 0xdb, 0x33, 0x07, 0xf2, 0x58, 0x81, 0x35, 0xc2, 0x02, 0xb9, 0x79, 0x7f, - 0xde, 0xdb, 0xc4, 0x31, 0x2e, 0xff, 0x8e, 0x25, 0xaa, 0xd2, 0xb4, 0xf4, 0x4d, 0x2e, 0x0b, 0x4c, - 0xe9, 0x6a, 0xb5, 0x9f, 0xec, 0xf7, 0x6e, 0xb8, 0xbb, 0xbe, 0xe9, 0x53, 0xf1, 0x17, 0x9e, 0x17, - 0xd2, 0x5c, 0x11, 0x93, 0x55, 0x63, 0xe2, 0xca, 0x7e, 0xa7, 0x67, 0x55, 0xfc, 0x74, 0xf9, 0xe9, - 0xa5, 0x6a, 0x7d, 0xfc, 0x26, 0x4a, 0xb7, 0xb5, 0x49, 0x70, 0x57, 0xcb, 0xa8, 0xe9, 0x37, 0x36, - 0xda, 0x47, 0xdf, 0x5a, 0xf8, 0x24, 0x2c, 0xfd, 0x0e, 0x8e, 0x0f, 0x82, 0xcb, 0x1c, 0xec, 0x24, - 0x5c, 0xdb, 0x1b, 0xeb, 0x5f, 0x04, 0xb4, 0x9c, 0xd9, 0xd3, 0x58, 0x01, 0xfe, 0x32, 0xe9, 0x29, - 0xf1, 0xb3, 0x6f, 0x26, 0x41, 0xca, 0xcd, 0x94, 0xcc, 0xf8, 0x9d, 0xd3, 0x3f, 0x4f, 0xda, 0xf1, - 0x36, 0x44, 0xc4, 0xfc, 0xcc, 0x37, 0xe3, 0xed, 0xa6, 0xda, 0x6d, 0x65, 0xe9, 0x6f, 0xf2, 0x8a, - 0xb5, 0x4f, 0xd9, 0x69, 0x25, 0xf2, 0xdd, 0xad, 0x72, 0x65, 0xcf, 0xc2, 0xb6, 0x98, 0xce, 0x63, - 0x5d, 0x35, 0x9f, 0xdb, 0xf2, 0x72, 0x89, 0x6d, 0x36, 0xd3, 0x7c, 0x22, 0x76, 0xd0, 0xdb, 0xd3, - 0x27, 0x63, 0x24, 0xfa, 0xd3, 0x5c, 0x7d, 0xbb, 0x76, 0x9a, 0xd2, 0xcf, 0x05, 0xca, 0x67, 0xbb, - 0xf9, 0x7a, 0x91, 0x8f, 0x67, 0xd5, 0xd7, 0x09, 0xdd, 0xbb, 0x6b, 0x5f, 0x8b, 0x31, 0xba, 0x7a, - 0x69, 0xa6, 0x9f, 0x94, 0xab, 0x37, 0xf9, 0x69, 0xea, 0xb9, 0x85, 0x3a, 0x7a, 0xe1, 0x2d, 0x6b, - 0xa4, 0x97, 0x82, 0xdf, 0x27, 0x77, 0xc9, 0x49, 0xc1, 0x38, 0x9a, 0x55, 0x5a, 0xd3, 0xfc, 0xa4, - 0xda, 0x6b, 0xc3, 0xc4, 0xdd, 0xe3, 0x74, 0xf5, 0x54, 0x85, 0x23, 0x2d, 0x65, 0xaf, 0xfa, 0x92, - 0xae, 0x51, 0x64, 0xef, 0x7f, 0x66, 0x97, 0x58, 0xea, 0xf0, 0x45, 0xaa, 0x6b, 0xaf, 0x82, 0x2b, - 0x1e, 0xb5, 0xe2, 0x30, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x02, 0x01, 0x30, 0x22, 0x97, 0x38, - 0x44, 0x75, 0x5d, 0xdd, 0xff, 0x12, 0x21, 0x18, 0x73, 0x1c, 0x78, 0x40, 0x23, 0xc4, 0x88, 0x0c, - 0x55, 0xa7, 0x68, 0xad, 0x6a, 0xa3, 0x63, 0x1c, 0x5b, 0x16, 0xff, 0xc3, 0x96, 0x9a, 0x69, 0xa6, - 0x7d, 0x34, 0xdb, 0x6f, 0xc2, 0xf4, 0xd3, 0x2f, 0x8d, 0x34, 0xd3, 0x4d, 0xf8, 0xb6, 0x2d, 0xe2, - 0xac, 0x55, 0xfa, 0x14, 0xc9, 0xf0, 0x8f, 0xfe, 0x2c, 0x2f, 0xb4, 0xd6, 0xd3, 0x46, 0xe8, 0x40, - 0xf2, 0x9f, 0xa8, 0x9d, 0x26, 0xe1, 0x9b, 0xba, 0xaa, 0xa6, 0x9a, 0x69, 0xfa, 0xe4, 0xb4, 0xd3, - 0x4d, 0x7b, 0xb4, 0xd3, 0x4d, 0x71, 0x1e, 0x24, 0x97, 0x75, 0x52, 0x61, 0x09, 0xb1, 0x0a, 0x3c, - 0xa4, 0xc4, 0xfc, 0x58, 0xc6, 0x9a, 0x68, 0xfb, 0x6a, 0xd7, 0x87, 0xea, 0xb5, 0xd2, 0x26, 0x69, - 0x24, 0xca, 0x69, 0xa6, 0x9f, 0xf8, 0x24, 0xbe, 0xf1, 0x71, 0x14, 0x26, 0xe7, 0x88, 0x65, 0x68, - 0xd9, 0xf8, 0x66, 0x78, 0x27, 0x4c, 0x62, 0x92, 0x6b, 0x37, 0xff, 0x0e, 0x04, 0x0d, 0xa6, 0xda, - 0xa0, 0x1f, 0xd1, 0x9f, 0xcd, 0xfc, 0x31, 0x16, 0xd6, 0xdb, 0x50, 0xd3, 0x29, 0x1f, 0x8c, 0x8a, - 0x29, 0xcb, 0xdd, 0xbc, 0xaf, 0x9c, 0x7f, 0x01, 0xdf, 0x6d, 0xb6, 0xdb, 0xf4, 0x5f, 0xfc, 0x11, - 0x4f, 0x87, 0xc3, 0x63, 0xb0, 0x04, 0x52, 0x61, 0x04, 0x42, 0xa2, 0xaf, 0x25, 0xdd, 0xdf, 0xd6, - 0x2f, 0xaf, 0x2a, 0xf5, 0x2a, 0xcf, 0x82, 0x3e, 0x35, 0xea, 0x8a, 0x9f, 0x39, 0x47, 0x6b, 0x4d, - 0x36, 0xdf, 0xfa, 0x95, 0x7f, 0x52, 0xaf, 0xeb, 0xdf, 0x52, 0xa7, 0xd4, 0xab, 0xf9, 0xe3, 0xb5, - 0xa6, 0x9b, 0x6f, 0xfd, 0x7b, 0xeb, 0xd7, 0xd7, 0x39, 0xf4, 0x3d, 0x3a, 0x27, 0x54, 0xeb, 0xd0, - 0xe4, 0xe9, 0x73, 0xc7, 0x95, 0x34, 0xd3, 0x4f, 0xfc, 0xf1, 0xe5, 0x4d, 0x34, 0xd3, 0xf2, 0x61, - 0x85, 0x4a, 0xb1, 0x1f, 0x9e, 0x3c, 0xa9, 0xa6, 0x9a, 0x7f, 0xe8, 0x9c, 0x8b, 0xd5, 0x22, 0xf5, - 0x48, 0xbd, 0x52, 0x2c, 0x48, 0x95, 0x63, 0xc4, 0xac, 0x5f, 0x05, 0x42, 0x24, 0xa6, 0xd5, 0x6e, - 0xee, 0xe5, 0x2f, 0x82, 0x52, 0xb5, 0x74, 0x89, 0x91, 0x63, 0x2a, 0xc7, 0xc1, 0x77, 0x89, 0x24, - 0x92, 0xdb, 0xc4, 0x2f, 0xcf, 0x12, 0xce, 0x9d, 0x37, 0x9d, 0xef, 0x85, 0x44, 0x69, 0x25, 0xd2, - 0xab, 0xd3, 0xcb, 0xff, 0xc1, 0x81, 0xad, 0x25, 0x1a, 0x9c, 0xf5, 0x32, 0xfe, 0xaf, 0x51, 0x9c, - 0xc3, 0x5a, 0x69, 0xa6, 0x97, 0x11, 0xb5, 0x69, 0xa6, 0x9a, 0x6a, 0x14, 0xcf, 0x14, 0x12, 0x09, - 0x04, 0x82, 0xd0, 0x48, 0x2f, 0xff, 0x58, 0xaa, 0x27, 0xc4, 0xe5, 0xeb, 0x17, 0xcf, 0x54, 0xd3, - 0x4d, 0x3f, 0xf3, 0xd5, 0x34, 0xd3, 0x4f, 0xfc, 0x2b, 0x7d, 0x5d, 0xf4, 0x05, 0xa6, 0x9a, 0x69, - 0xfa, 0xe7, 0x28, 0xe9, 0x3a, 0x6d, 0xb6, 0x9a, 0xf2, 0x73, 0xc7, 0xd4, 0xd3, 0x4d, 0x3f, 0xf5, - 0xaf, 0xad, 0x63, 0xd7, 0x54, 0x12, 0x0b, 0xff, 0x04, 0xf3, 0xf9, 0xfc, 0xdc, 0x5c, 0xdc, 0xbe, - 0xaf, 0xa2, 0x72, 0x2f, 0x52, 0xa7, 0xd7, 0xbc, 0x42, 0x91, 0x58, 0x71, 0x40, 0xe2, 0x8d, 0xae, - 0xdb, 0x7b, 0x6d, 0xff, 0x88, 0xe8, 0x41, 0x48, 0xba, 0x5d, 0xf6, 0xdb, 0xf1, 0xb5, 0x75, 0x75, - 0x57, 0x74, 0x92, 0x49, 0x25, 0x57, 0x75, 0xf6, 0xdb, 0x6d, 0xbe, 0x21, 0x11, 0x1a, 0xfd, 0x15, - 0xfc, 0x4d, 0x75, 0xd7, 0xc1, 0x55, 0x34, 0xe9, 0xd3, 0x37, 0x76, 0xad, 0xa9, 0x79, 0x13, 0xc4, - 0x02, 0xae, 0x3b, 0xeb, 0x76, 0xf7, 0x4e, 0x99, 0x93, 0xe1, 0xab, 0xab, 0xab, 0x2f, 0x6e, 0xff, - 0xe1, 0x5a, 0x4d, 0xe9, 0xa7, 0x68, 0xb2, 0xdc, 0xcc, 0x3b, 0x98, 0xff, 0x16, 0x31, 0x36, 0xa9, - 0x55, 0xeb, 0x9c, 0x26, 0x8f, 0x3e, 0x9a, 0x69, 0xa7, 0xe7, 0xa3, 0xcf, 0xa6, 0x9a, 0x69, 0xf9, - 0xe8, 0xf3, 0xe9, 0xa6, 0x9a, 0x7e, 0x88, 0x8e, 0x9f, 0x54, 0x76, 0x4e, 0x6b, 0xab, 0xaf, 0x82, - 0x81, 0xc4, 0xef, 0x46, 0x37, 0x44, 0x9b, 0x71, 0x25, 0xcd, 0x3e, 0xf8, 0x20, 0xd6, 0xa9, 0x72, - 0xa3, 0xa9, 0x0c, 0x5d, 0x8b, 0x86, 0x51, 0xb6, 0x8d, 0xc9, 0xcd, 0x45, 0xc3, 0x43, 0xf7, 0x74, - 0x46, 0x5f, 0x8a, 0xb6, 0xd7, 0x41, 0x14, 0x8b, 0x11, 0x41, 0x01, 0xb4, 0x45, 0xe0, 0x9a, 0xe7, - 0xa6, 0x7a, 0x7a, 0xf8, 0x23, 0xb4, 0xd2, 0xa9, 0x91, 0x17, 0xae, 0x5f, 0x05, 0x35, 0xdd, 0x57, - 0x77, 0x5e, 0x5f, 0x04, 0x96, 0x9a, 0x69, 0xa1, 0xe5, 0xf0, 0xc0, 0xa7, 0xdd, 0x31, 0xd8, 0xab, - 0x9c, 0xbf, 0xb9, 0xff, 0x82, 0x01, 0x19, 0xe6, 0xca, 0x33, 0x5d, 0x37, 0x49, 0xd2, 0xa6, 0xf9, - 0xcb, 0x1e, 0xf1, 0x37, 0xff, 0x04, 0xe4, 0xd9, 0x13, 0x43, 0xff, 0x53, 0x66, 0x7d, 0xf0, 0x41, - 0x67, 0x6d, 0xae, 0x34, 0xad, 0x91, 0x05, 0x2f, 0x54, 0x92, 0xbf, 0xfb, 0x0b, 0x9e, 0x5a, 0xca, - 0xa4, 0xd8, 0x89, 0xf1, 0x1f, 0x16, 0x46, 0x9a, 0x69, 0xa6, 0xad, 0x50, 0x78, 0x90, 0xb0, 0xb1, - 0x6e, 0xd3, 0x53, 0xeb, 0x55, 0x37, 0x6b, 0x3e, 0xe3, 0x15, 0x29, 0xa7, 0xff, 0x11, 0xe2, 0x64, - 0xe4, 0x2a, 0x74, 0xd8, 0xf1, 0x15, 0x47, 0x9c, 0x4f, 0xe0, 0x8e, 0x31, 0x4d, 0x45, 0x3d, 0x1e, - 0xf8, 0x22, 0x21, 0xfc, 0xfe, 0xcf, 0x87, 0x85, 0x29, 0x59, 0x5e, 0xad, 0xe9, 0x35, 0xfb, 0xea, - 0x6f, 0x6f, 0xca, 0x2c, 0x9e, 0x79, 0x2a, 0xc4, 0x57, 0x45, 0x16, 0x33, 0x89, 0x3a, 0x8f, 0x2f, - 0xa8, 0xda, 0x71, 0x10, 0xf0, 0x40, 0x96, 0xf4, 0x63, 0x5a, 0x19, 0x8a, 0x29, 0x14, 0xf2, 0xec, - 0x18, 0xe2, 0x63, 0xf7, 0xed, 0x4b, 0xbe, 0x36, 0xc8, 0xb6, 0xad, 0x2f, 0x8c, 0x1f, 0xe3, 0xf3, - 0x40, 0xd6, 0x8b, 0xdb, 0xc7, 0xf9, 0x1b, 0xa4, 0x0d, 0xd9, 0xe8, 0xb9, 0xcb, 0x7b, 0x7f, 0xfc, - 0x69, 0x05, 0xc7, 0x14, 0x43, 0x93, 0xc4, 0xf2, 0x4c, 0xa9, 0xce, 0x6f, 0x86, 0x75, 0x47, 0xac, - 0x87, 0x7d, 0xb3, 0x55, 0x39, 0xc4, 0x41, 0x19, 0xf8, 0xa3, 0x06, 0x2d, 0x7b, 0xe8, 0x6e, 0xb8, - 0x81, 0x3c, 0x40, 0x9f, 0x92, 0x7e, 0x81, 0xeb, 0x8a, 0x92, 0x8a, 0xd3, 0x4e, 0xed, 0x35, 0xe0, - 0x90, 0xdc, 0x28, 0xf9, 0xbe, 0x34, 0x42, 0xaf, 0x9b, 0x34, 0x4b, 0xfe, 0xf9, 0xdb, 0x4e, 0xa1, - 0x77, 0x9d, 0x9a, 0x8c, 0xd9, 0xb6, 0xdc, 0x36, 0x8f, 0xc2, 0x86, 0xc7, 0xf0, 0xfc, 0x2e, 0x37, - 0x26, 0x8c, 0xcb, 0x29, 0x33, 0x4a, 0x41, 0x7c, 0x15, 0x53, 0x34, 0x6f, 0x8a, 0x37, 0xd5, 0xd5, - 0x8f, 0x82, 0x9d, 0x25, 0xce, 0xab, 0xa3, 0x81, 0x87, 0xc3, 0xb1, 0xd3, 0x4d, 0x0d, 0x61, 0xc3, - 0x08, 0x1b, 0xd5, 0x3d, 0xf2, 0xd4, 0xc2, 0x57, 0xe4, 0xef, 0xfa, 0x0b, 0x8b, 0xc3, 0x0f, 0xad, - 0x57, 0x57, 0xf0, 0x8c, 0xdc, 0x14, 0x77, 0x7d, 0xdc, 0x79, 0x57, 0x08, 0xd6, 0x4a, 0x5d, 0xc9, - 0x46, 0x53, 0x75, 0x5f, 0x44, 0xe6, 0x5e, 0x15, 0xe6, 0xc6, 0xb6, 0x9a, 0x4c, 0x93, 0x4d, 0x34, - 0xff, 0xcf, 0x7a, 0x69, 0xa6, 0x9f, 0xfa, 0x2f, 0x32, 0xe2, 0x17, 0x2e, 0x10, 0xc9, 0xcd, 0x57, - 0x57, 0xe2, 0x05, 0xc9, 0x42, 0x53, 0x92, 0x84, 0xa7, 0xe2, 0x48, 0xe9, 0xe9, 0xd3, 0xf9, 0xeb, - 0xe9, 0xa6, 0x9a, 0x7e, 0x79, 0x17, 0x77, 0x77, 0xff, 0x04, 0xb5, 0x26, 0xf5, 0xa7, 0x4e, 0x6f, - 0x85, 0x84, 0x57, 0x64, 0xf2, 0x7b, 0xb1, 0x2f, 0xa7, 0xf2, 0xf4, 0x2e, 0xbc, 0x44, 0xbc, 0x2a, - 0x39, 0x27, 0xe6, 0x68, 0xea, 0x18, 0xda, 0x56, 0x45, 0xf7, 0x0c, 0xc5, 0xc7, 0xb8, 0xaf, 0xf1, - 0xb5, 0x52, 0xdb, 0xc2, 0xb5, 0xdc, 0xce, 0xa4, 0x84, 0x4f, 0x97, 0xe8, 0x7e, 0xb4, 0xdb, 0x6a, - 0xf0, 0x59, 0x0c, 0x6d, 0x72, 0x29, 0xec, 0xfe, 0x65, 0x26, 0xa6, 0x22, 0x14, 0xbb, 0x09, 0x5b, - 0x05, 0xee, 0xc3, 0x81, 0xc7, 0x5b, 0xc4, 0xa3, 0x73, 0x1b, 0xa6, 0xec, 0x5f, 0xe5, 0x3f, 0x83, - 0xb3, 0x71, 0x30, 0x4c, 0x4d, 0xd9, 0x67, 0x69, 0xb1, 0x3a, 0x63, 0xd2, 0xc4, 0xfe, 0x37, 0x1a, - 0xc5, 0x51, 0xdc, 0xc6, 0xce, 0xe8, 0x99, 0x85, 0x2a, 0x3f, 0x5d, 0x27, 0x46, 0x28, 0xd3, 0x52, - 0x71, 0x8e, 0x4f, 0xff, 0x0a, 0x5d, 0x2a, 0x71, 0xdd, 0x35, 0x12, 0x8d, 0x18, 0xd2, 0x3e, 0xd2, - 0xae, 0xab, 0xaf, 0x82, 0x91, 0x6e, 0x8b, 0x2a, 0xd4, 0xf0, 0xe7, 0xdd, 0x56, 0x7f, 0x82, 0x01, - 0x95, 0x8d, 0xe7, 0x6e, 0xd5, 0x49, 0xa9, 0x6b, 0x94, 0xe3, 0xed, 0xb9, 0x3f, 0x82, 0xbb, 0x0d, - 0x67, 0x5d, 0x55, 0x55, 0x57, 0x02, 0xd3, 0xd8, 0x5d, 0xa6, 0x9a, 0x6b, 0xd5, 0x1d, 0x3e, 0xad, - 0x5d, 0x62, 0xfa, 0xc5, 0x5d, 0x78, 0xef, 0xc1, 0x3d, 0xa6, 0x9a, 0x6b, 0x55, 0x8b, 0x0e, 0x22, - 0x00, 0x87, 0xfc, 0xfc, 0xff, 0x4d, 0x3d, 0x84, 0xc2, 0x6d, 0xb1, 0x3a, 0x53, 0x4f, 0xdb, 0x6f, - 0xd6, 0x8e, 0xfd, 0x51, 0xaa, 0x51, 0x12, 0x5a, 0x9b, 0x2f, 0x86, 0x2d, 0x34, 0xd3, 0x4d, 0x34, - 0xd3, 0x5d, 0xf4, 0xd3, 0x4d, 0x3f, 0x5e, 0x9b, 0xaa, 0x37, 0xf2, 0xd3, 0x4d, 0x34, 0xf8, 0x93, - 0xe2, 0xbb, 0xbb, 0xff, 0x82, 0x22, 0xbb, 0x4e, 0xd1, 0xf7, 0xc1, 0x09, 0x1a, 0xb4, 0xd3, 0x3e, - 0x09, 0xfc, 0xb8, 0x9e, 0x9e, 0x23, 0x6b, 0xcc, 0x22, 0xea, 0xbe, 0x09, 0x45, 0xbb, 0xbb, 0x9e, - 0x87, 0xa5, 0xfd, 0xf1, 0x77, 0x72, 0xd1, 0xb4, 0x77, 0x6d, 0x1b, 0x4f, 0x51, 0x1d, 0x2f, 0x97, - 0xbb, 0xac, 0x45, 0x62, 0x7c, 0x47, 0xc3, 0xc1, 0x0a, 0xac, 0xf3, 0xcc, 0xc8, 0x3b, 0xf8, 0x5d, - 0xcb, 0x1a, 0xf1, 0xae, 0xbc, 0x77, 0xbc, 0x66, 0x74, 0x94, 0xd9, 0x7f, 0x4e, 0x58, 0x19, 0x0f, - 0x5f, 0x0a, 0x57, 0xe3, 0x26, 0x72, 0x24, 0x73, 0x0d, 0x17, 0x59, 0xbf, 0x83, 0x4b, 0x54, 0x9d, - 0xc4, 0x79, 0xdd, 0xdc, 0x5d, 0x87, 0x82, 0xc1, 0x3a, 0xad, 0x49, 0xe7, 0x55, 0x72, 0x4e, 0x08, - 0x0d, 0x8e, 0x1c, 0x56, 0x57, 0x59, 0xf7, 0x5f, 0x63, 0x17, 0xbf, 0x3f, 0xb7, 0xe1, 0x43, 0x65, - 0xc5, 0x2a, 0xe6, 0x76, 0x4d, 0x25, 0x3c, 0x7a, 0xed, 0xa9, 0x56, 0x7c, 0x50, 0xf5, 0xb6, 0x6e, - 0xdd, 0x76, 0xfc, 0x22, 0x6a, 0xae, 0xab, 0x91, 0xec, 0x9e, 0xab, 0xc1, 0x48, 0x85, 0xc6, 0x26, - 0xd9, 0x2b, 0xb2, 0x5a, 0x9a, 0xe7, 0x2f, 0xa0, 0xb9, 0xd3, 0xe0, 0x8e, 0xee, 0xaa, 0xff, 0x53, - 0xa2, 0xaf, 0x0a, 0x9d, 0xa6, 0xb6, 0x9a, 0xd1, 0xcf, 0xdb, 0x6d, 0xb6, 0xd7, 0x44, 0x7f, 0xa2, - 0x39, 0xf5, 0x47, 0x66, 0xc4, 0x97, 0x25, 0x11, 0xb2, 0x98, 0x8c, 0x81, 0xe2, 0x40, 0x6b, 0x68, - 0xcd, 0xbf, 0xff, 0x8a, 0xea, 0x7f, 0xd4, 0x20, 0x24, 0x5d, 0x24, 0xb2, 0x67, 0xf2, 0xd2, 0x4a, - 0x92, 0xe8, 0xa0, 0x34, 0x06, 0xfa, 0x25, 0x62, 0xc9, 0x0f, 0x78, 0xe8, 0x9f, 0x39, 0x4a, 0x94, - 0xd6, 0x5f, 0xfc, 0x49, 0x84, 0x6a, 0xbe, 0x27, 0xc6, 0xda, 0x2d, 0x81, 0x8d, 0x57, 0xe0, 0x8f, - 0x3e, 0xd8, 0xbc, 0x7c, 0x10, 0x91, 0xa4, 0xd7, 0x24, 0x7e, 0x0a, 0xf6, 0x9f, 0xaa, 0x8f, 0xe9, - 0xd5, 0x73, 0xe7, 0xcc, 0x73, 0xe3, 0xff, 0x86, 0x0f, 0xb4, 0xd6, 0xd3, 0x4a, 0x9a, 0x69, 0xa7, - 0xfe, 0x18, 0xed, 0x35, 0xb4, 0xd2, 0xa6, 0x9a, 0x69, 0xff, 0x86, 0x3b, 0x4d, 0x6d, 0x34, 0xa9, - 0xa6, 0x9a, 0x7f, 0xe0, 0xa3, 0xb4, 0xd6, 0xd3, 0x43, 0xb5, 0x07, 0xb0, 0x59, 0xe4, 0x61, 0x6c, - 0x2d, 0x84, 0xc2, 0xd8, 0x4c, 0x2f, 0x04, 0x0c, 0x0e, 0xf2, 0x69, 0xa6, 0x9b, 0x6d, 0xb6, 0xdc, - 0x38, 0x49, 0x87, 0xbf, 0xff, 0x41, 0x20, 0xb8, 0xd5, 0x68, 0x2e, 0xc2, 0x61, 0x78, 0x26, 0xa4, - 0x97, 0xa4, 0x95, 0x7c, 0x14, 0x72, 0xe1, 0x73, 0x2e, 0x17, 0x3b, 0xe0, 0x97, 0xaa, 0xea, 0xaf, - 0xf0, 0xa0, 0x40, 0xbd, 0xa9, 0x30, 0xfa, 0x84, 0xdf, 0xce, 0x69, 0xb6, 0x98, 0x78, 0x68, 0x54, - 0x38, 0xa7, 0x3e, 0x14, 0xb3, 0xb8, 0xb8, 0x97, 0x05, 0x6d, 0xef, 0x4e, 0xbc, 0x56, 0x9b, 0x9e, - 0xf1, 0x21, 0x09, 0xcb, 0x1d, 0x9d, 0x24, 0xf9, 0x3c, 0x2a, 0xdf, 0xc1, 0x38, 0x57, 0x1e, 0xf2, - 0xef, 0x78, 0xf7, 0x97, 0x79, 0xfe, 0x11, 0x9e, 0x9c, 0xf4, 0xf6, 0xaf, 0xf0, 0x48, 0x6b, 0x4a, - 0xd7, 0xfe, 0x14, 0x08, 0x5b, 0x9a, 0x5a, 0x9e, 0x0a, 0xc6, 0x93, 0x7e, 0x9b, 0xce, 0x3c, 0x48, - 0x91, 0xb3, 0x1c, 0x1c, 0x68, 0xca, 0x39, 0xf8, 0x46, 0xde, 0x6f, 0x36, 0x2a, 0xe5, 0x43, 0x6c, - 0x5d, 0x8f, 0x2b, 0xe0, 0xbc, 0x54, 0xd7, 0x8c, 0x6d, 0xa2, 0x14, 0xcd, 0x56, 0x72, 0xfd, 0x32, - 0x7f, 0xc1, 0x08, 0x55, 0x7c, 0xcf, 0xbc, 0x8e, 0xc9, 0xce, 0x71, 0xe5, 0x4d, 0x34, 0xd3, 0xf7, - 0x89, 0x57, 0xf1, 0x3e, 0x11, 0x31, 0x32, 0x50, 0x94, 0x11, 0xc5, 0x17, 0x97, 0x39, 0x71, 0xf4, - 0x23, 0x2a, 0xef, 0xbb, 0xf8, 0x24, 0x29, 0xf2, 0x6c, 0x17, 0x67, 0xc3, 0x17, 0x71, 0xc6, 0x8e, - 0xa6, 0xc7, 0x64, 0x8b, 0x7f, 0x9b, 0x53, 0xf0, 0x47, 0x51, 0x7f, 0xaf, 0x82, 0x51, 0x0d, 0x34, - 0xd3, 0x5b, 0x4d, 0x38, 0xf2, 0x4b, 0x8a, 0xeb, 0xec, 0xb3, 0xd1, 0x9f, 0xea, 0xe7, 0xcf, 0x5f, - 0x4d, 0x34, 0xd3, 0xf5, 0x6f, 0x94, 0xaa, 0xe4, 0xf1, 0xfa, 0x26, 0x37, 0xc2, 0xc4, 0x6a, 0x6d, - 0x75, 0x3e, 0x2d, 0x5d, 0xf5, 0x4d, 0x35, 0x5d, 0x1e, 0x39, 0xf0, 0x47, 0x5a, 0xfe, 0x5f, 0x58, - 0xbc, 0x45, 0x72, 0xda, 0x69, 0xa6, 0xb1, 0x22, 0x48, 0x4d, 0xb2, 0x7f, 0xc2, 0x82, 0xb7, 0x11, - 0xea, 0xab, 0x44, 0x64, 0x8d, 0x7c, 0xdc, 0x63, 0x37, 0x73, 0x2f, 0x4b, 0x1e, 0x8a, 0xcf, 0x0a, - 0x12, 0x2b, 0xce, 0x92, 0xf3, 0x57, 0x37, 0x15, 0x88, 0x68, 0x5b, 0x25, 0x6e, 0x25, 0x07, 0xc1, - 0x51, 0xf5, 0x54, 0x90, 0xcd, 0x8f, 0x61, 0xb6, 0x69, 0xe4, 0xdc, 0xf7, 0xc1, 0x59, 0xa0, 0x5c, - 0xd1, 0x6d, 0x8f, 0x89, 0xef, 0x37, 0xcf, 0x5f, 0x18, 0x55, 0xcd, 0xf9, 0xf5, 0x74, 0x87, 0x96, - 0xd5, 0x08, 0x79, 0xdb, 0xc1, 0x49, 0xba, 0xa9, 0xf3, 0xbb, 0x64, 0xde, 0x71, 0x81, 0xf8, 0x80, - 0xfb, 0x4d, 0x6d, 0x35, 0xac, 0x40, 0x6c, 0x24, 0x7d, 0x74, 0xcf, 0xa5, 0xad, 0xd5, 0x7d, 0x70, - 0xfd, 0xab, 0x5b, 0xbb, 0xba, 0xad, 0x53, 0xbb, 0xff, 0x10, 0x61, 0x6c, 0xf5, 0xf0, 0x85, 0xdd, - 0x55, 0xa6, 0xb7, 0x75, 0x5e, 0x23, 0xea, 0x38, 0xde, 0x20, 0x97, 0x7c, 0xa1, 0xa4, 0x13, 0x01, - 0x2e, 0x02, 0x83, 0x3f, 0x8f, 0xc4, 0x48, 0x49, 0xa4, 0xdf, 0xe3, 0x80, 0x01, 0x1b, 0xe0, 0x90, - 0x20, 0xee, 0xaa, 0x3a, 0x5f, 0x31, 0x8f, 0x8d, 0x34, 0xd7, 0x86, 0xa6, 0xc3, 0x65, 0xa7, 0x7d, - 0x34, 0xd3, 0x4f, 0xc1, 0x0c, 0xd8, 0xd7, 0xe2, 0xd7, 0xe0, 0xb8, 0xba, 0xb4, 0x8d, 0xa4, 0x92, - 0x49, 0xbe, 0x16, 0xb5, 0x55, 0x49, 0x2b, 0xaf, 0xa6, 0x9b, 0x6d, 0xf9, 0xeb, 0xed, 0xb6, 0xdb, - 0x7e, 0x09, 0x79, 0x70, 0xb9, 0xa4, 0x93, 0x7c, 0x2b, 0xd2, 0x4b, 0x49, 0x25, 0xf6, 0xdb, 0x6d, - 0xbf, 0x1b, 0x69, 0xae, 0xe4, 0xc6, 0xe2, 0xab, 0xbc, 0xcb, 0xba, 0xfb, 0x6d, 0xb6, 0xdf, 0x11, - 0x5c, 0x15, 0xf4, 0xd3, 0x74, 0xf5, 0x75, 0x72, 0xe7, 0xd9, 0x49, 0x84, 0xc2, 0xe3, 0x73, 0xc3, - 0x64, 0x75, 0x75, 0x54, 0xd3, 0x6d, 0xbf, 0xf3, 0x98, 0xc9, 0xf6, 0xdc, 0xdf, 0xf1, 0x05, 0x69, - 0xa6, 0x9a, 0x69, 0xa6, 0x9a, 0xe2, 0x2f, 0xa2, 0x99, 0x2f, 0x82, 0x28, 0xff, 0x97, 0xfb, 0xe2, - 0xf1, 0x00, 0xb0, 0x53, 0xcd, 0xf4, 0x57, 0x84, 0x6a, 0x2f, 0x87, 0x88, 0x05, 0x22, 0x25, 0xe6, - 0xd6, 0x65, 0x18, 0xe5, 0x44, 0xad, 0xca, 0xaa, 0xea, 0xe7, 0xc6, 0xea, 0x7e, 0x3e, 0xb5, 0x66, - 0xc4, 0x38, 0x76, 0x07, 0x55, 0x15, 0xd6, 0x4c, 0xb1, 0x2c, 0x5a, 0x8b, 0x57, 0x2f, 0xa7, 0xfe, - 0x10, 0x85, 0xf0, 0x8d, 0x31, 0x73, 0x4a, 0x63, 0xf5, 0x65, 0xbf, 0x66, 0x79, 0x07, 0xab, 0x22, - 0xfc, 0x29, 0x5c, 0xd4, 0xc1, 0xdb, 0x05, 0x56, 0x94, 0x9e, 0xb1, 0x1b, 0x74, 0x77, 0xf8, 0x29, - 0x24, 0xdc, 0xd9, 0x15, 0x59, 0xb1, 0xcb, 0xc6, 0x17, 0xd7, 0xc1, 0x61, 0xd4, 0xdd, 0x39, 0xad, - 0xb6, 0x91, 0x43, 0xd8, 0x70, 0x7f, 0xf0, 0x4c, 0x23, 0x6f, 0xd1, 0x23, 0x7e, 0x49, 0xaf, 0xa0, - 0xca, 0x01, 0xf8, 0x99, 0x38, 0x24, 0x23, 0x4d, 0x34, 0xd7, 0x7c, 0x61, 0xb5, 0x55, 0x5a, 0x9f, - 0x1d, 0x8f, 0xca, 0xb5, 0x5f, 0x05, 0x1d, 0x24, 0xb4, 0x8b, 0x8d, 0xf0, 0x59, 0xb0, 0xc3, 0xdb, - 0xba, 0xad, 0xa6, 0xab, 0x9b, 0x32, 0xac, 0x42, 0x3b, 0xbf, 0xe2, 0x47, 0x92, 0xeb, 0xd4, 0x5e, - 0xb5, 0x78, 0x8f, 0x13, 0x37, 0x04, 0x45, 0x69, 0xa3, 0x65, 0x5f, 0xf8, 0x21, 0xb4, 0xd3, 0x4d, - 0x3f, 0x88, 0x57, 0xf8, 0x64, 0xe4, 0xc2, 0x66, 0x64, 0x3a, 0x32, 0xe9, 0x77, 0xfd, 0x5f, 0xe7, - 0x8f, 0x3d, 0x34, 0xd3, 0x4f, 0xfd, 0x12, 0x39, 0xf0, 0xc7, 0x55, 0xd5, 0x40, 0x68, 0x07, 0xf6, - 0xdb, 0x6d, 0xbf, 0x45, 0x62, 0xf8, 0x27, 0x32, 0x74, 0xd5, 0xba, 0xdf, 0xc4, 0x2f, 0x71, 0x3b, - 0xe8, 0xa4, 0x4a, 0xeb, 0x5f, 0x52, 0x27, 0x88, 0xae, 0xa4, 0x4f, 0x86, 0x8d, 0xa9, 0xa9, 0x17, - 0x52, 0x7f, 0xf1, 0x82, 0x99, 0x15, 0x9b, 0x7a, 0x4b, 0xd4, 0x94, 0xd0, 0x93, 0xc6, 0xf7, 0xf1, - 0x32, 0x6c, 0x71, 0x97, 0xa5, 0xb7, 0xf0, 0x41, 0x63, 0x7d, 0x6d, 0x2b, 0x7b, 0x75, 0x49, 0x5b, - 0x6d, 0xb6, 0xff, 0xc6, 0xe6, 0x93, 0x28, 0xa2, 0x88, 0x4c, 0xb3, 0x55, 0x93, 0x3a, 0x49, 0x3a, - 0xdb, 0x6d, 0xb7, 0xf8, 0x88, 0xd2, 0xec, 0xc7, 0x38, 0x75, 0x3e, 0x2d, 0x49, 0x8c, 0xde, 0xb4, - 0xaa, 0xdb, 0x6d, 0xb7, 0xfe, 0x36, 0x36, 0xb4, 0xa4, 0xbd, 0x30, 0xdb, 0xb8, 0x7c, 0x22, 0x3c, - 0x9a, 0xc9, 0x7d, 0x4f, 0xfb, 0x98, 0x24, 0x55, 0xb6, 0xdb, 0x6f, 0xfc, 0x14, 0x8c, 0x3d, 0xef, - 0xfb, 0x99, 0x1d, 0x5c, 0xd0, 0x99, 0x2e, 0xd7, 0xc4, 0x85, 0x6a, 0x68, 0xd9, 0x53, 0xea, 0x6e, - 0x17, 0x21, 0xfd, 0x5d, 0x5d, 0x72, 0xc9, 0xd3, 0x67, 0xff, 0x0c, 0x9d, 0x77, 0xaa, 0xe9, 0xbf, - 0x2c, 0x25, 0x86, 0x27, 0xf0, 0x41, 0x6e, 0xbe, 0x35, 0x44, 0xf7, 0x8a, 0x23, 0xbf, 0xd6, 0x25, - 0x14, 0x03, 0x80, 0x1f, 0x51, 0x8a, 0x7d, 0x1b, 0xab, 0x9f, 0xd4, 0xe5, 0xee, 0xdc, 0xdd, 0x7d, - 0x16, 0x3c, 0xc2, 0xd0, 0x46, 0x38, 0x00, 0x11, 0xab, 0x9c, 0x50, 0xf5, 0x55, 0x55, 0xf8, 0xb6, - 0x2e, 0x38, 0x00, 0x11, 0xbc, 0x4f, 0xce, 0x39, 0x1d, 0x3e, 0xdb, 0x6d, 0xb6, 0x6e, 0x1a, 0x22, - 0x49, 0x24, 0x92, 0xfb, 0x6d, 0xb6, 0xda, 0xe7, 0x2b, 0x9f, 0x93, 0xd7, 0xce, 0x65, 0x77, 0x77, - 0xfc, 0x47, 0xe7, 0x8f, 0x32, 0xee, 0xef, 0xeb, 0x82, 0x82, 0xbb, 0xee, 0xf8, 0xb1, 0x80, 0xdf, - 0x04, 0x64, 0xd5, 0x47, 0x6e, 0x22, 0x7f, 0x53, 0x4d, 0x34, 0xff, 0xd7, 0x5f, 0x47, 0x01, 0xaa, - 0xe0, 0x9c, 0x20, 0xda, 0x1c, 0x6e, 0xe1, 0xd9, 0x39, 0x50, 0xdb, 0x54, 0x7f, 0xe1, 0x43, 0x24, - 0xdc, 0x8a, 0x35, 0x98, 0xe5, 0xbc, 0x21, 0xdb, 0x42, 0x37, 0xb6, 0x7e, 0x14, 0x58, 0x8d, 0xf0, - 0x56, 0x55, 0x27, 0x5d, 0xab, 0xb4, 0x46, 0x0f, 0xe1, 0x6e, 0x7c, 0x16, 0xd2, 0x6d, 0xe9, 0xbb, - 0x69, 0x11, 0x1d, 0x78, 0x2b, 0xf2, 0x62, 0x59, 0x7b, 0xa4, 0x0f, 0xb0, 0x9b, 0xb9, 0xf0, 0x51, - 0x26, 0x7d, 0x10, 0xf7, 0x9c, 0xf8, 0xc3, 0xb9, 0x61, 0x65, 0xb4, 0x59, 0x6d, 0xed, 0xbb, 0x4d, - 0xb5, 0xe1, 0x11, 0x82, 0x79, 0x1a, 0x38, 0x2c, 0xb9, 0xa6, 0x9b, 0xb9, 0xfc, 0x63, 0x0a, 0xaf, - 0x78, 0xe1, 0x6a, 0xbd, 0x55, 0x54, 0xd9, 0x85, 0x7c, 0xe2, 0x55, 0x34, 0xd3, 0x11, 0x33, 0xeb, - 0xa9, 0xd2, 0xb8, 0x5f, 0x4e, 0x9d, 0x3a, 0x6b, 0xef, 0x6e, 0xf8, 0x8b, 0x2a, 0xef, 0xe0, 0x8e, - 0xdb, 0x6d, 0xb6, 0xff, 0x56, 0xfa, 0xeb, 0xe6, 0x22, 0x65, 0xff, 0xb2, 0xa6, 0x9a, 0x69, 0xae, - 0xbd, 0x5c, 0xf0, 0x42, 0x56, 0x9a, 0x36, 0xbb, 0x7f, 0xd6, 0x91, 0x7a, 0x9d, 0x5f, 0x46, 0x8b, - 0xc4, 0xa8, 0xe3, 0x7c, 0xe2, 0x47, 0x90, 0x16, 0x9a, 0x69, 0xa7, 0xe5, 0xe8, 0x80, 0x1c, 0x5c, - 0x2e, 0x08, 0x64, 0xc1, 0x8f, 0x74, 0xe9, 0x72, 0x14, 0x98, 0x4c, 0x2e, 0x37, 0x3d, 0x91, 0x24, - 0xa2, 0x4b, 0xd1, 0xd3, 0xb5, 0xce, 0x65, 0x9f, 0x9f, 0xff, 0xea, 0x89, 0x7f, 0x57, 0x1e, 0x72, - 0x71, 0x8a, 0x4d, 0x34, 0xd3, 0xfc, 0x4c, 0x10, 0xf7, 0x71, 0xdb, 0xe2, 0x26, 0xc3, 0x61, 0x28, - 0xca, 0x34, 0xd4, 0x34, 0x7e, 0x08, 0xad, 0x0f, 0x2e, 0x73, 0x7c, 0xdd, 0xdf, 0xcf, 0xeb, 0xbb, - 0xbf, 0xbe, 0x08, 0x85, 0x19, 0x95, 0x29, 0x93, 0x32, 0xa5, 0x33, 0x87, 0xc6, 0x92, 0xca, 0xc6, - 0x33, 0x72, 0x8e, 0xfd, 0x07, 0xf7, 0x7b, 0x5f, 0x23, 0x3e, 0x7b, 0xdf, 0x3e, 0x99, 0xb4, 0xc2, - 0x7d, 0xc3, 0xe6, 0xde, 0x1a, 0x2e, 0xba, 0x73, 0xff, 0xf1, 0xbc, 0x3b, 0x96, 0x77, 0x63, 0x75, - 0x86, 0xc6, 0xb0, 0x3e, 0x59, 0xcb, 0x02, 0x64, 0x47, 0x3e, 0xb5, 0xe9, 0xae, 0xe3, 0x07, 0x20, - 0xa7, 0xe6, 0xdc, 0xfd, 0x5d, 0x7c, 0x16, 0xd2, 0x26, 0xb5, 0xb4, 0x19, 0x56, 0x27, 0x9d, 0x98, - 0xf8, 0x52, 0xdf, 0xb6, 0x4c, 0x9b, 0xc9, 0x8f, 0xd2, 0x52, 0x38, 0xd4, 0xe3, 0x01, 0x72, 0x8d, - 0x2b, 0x20, 0x89, 0x16, 0x5f, 0x19, 0xd5, 0x34, 0xdf, 0xe6, 0xd6, 0x7b, 0x22, 0xeb, 0x6d, 0xae, - 0xa5, 0xe6, 0x3f, 0x6a, 0xf0, 0x81, 0xe5, 0x2a, 0x18, 0xc4, 0x63, 0xea, 0x0d, 0x8a, 0x68, 0x9e, - 0x7e, 0x3e, 0x58, 0xc6, 0x6d, 0x6f, 0x6e, 0x99, 0x6e, 0xaa, 0x92, 0xba, 0x34, 0x36, 0x3f, 0x08, - 0x08, 0x5c, 0x70, 0xae, 0xb5, 0x8d, 0x65, 0x3a, 0xc7, 0x16, 0xeb, 0xa0, 0xad, 0x7d, 0x4a, 0x0a, - 0xe2, 0xe9, 0x24, 0x92, 0x5a, 0x49, 0x78, 0x72, 0x9a, 0x74, 0xd7, 0xdd, 0xdd, 0xfc, 0x2d, 0x49, - 0x2d, 0xdf, 0x5f, 0x6d, 0xb6, 0xdb, 0x51, 0x10, 0x51, 0xab, 0xe5, 0x62, 0xef, 0x5c, 0xe2, 0x52, - 0x2f, 0x18, 0x97, 0x1f, 0xc4, 0xd0, 0x84, 0xdf, 0x38, 0x4d, 0x22, 0xf2, 0xe9, 0x77, 0x37, 0x38, - 0x48, 0xab, 0x93, 0x49, 0xbf, 0xe1, 0x8a, 0xf1, 0xc7, 0xc4, 0x02, 0x1a, 0xa9, 0x18, 0x94, 0x77, - 0xea, 0x63, 0x1f, 0x3d, 0x7d, 0xb6, 0xdb, 0x6d, 0x74, 0x5a, 0xae, 0xa0, 0x2c, 0x05, 0xf9, 0x48, - 0xd3, 0x56, 0x96, 0x26, 0x4e, 0x52, 0x55, 0xb5, 0xf0, 0x49, 0xe2, 0xb6, 0x38, 0x88, 0x23, 0xbb, - 0xf5, 0xf0, 0xde, 0x4c, 0xd5, 0x55, 0x3f, 0xf9, 0x0e, 0x92, 0x49, 0x24, 0xf0, 0x87, 0x11, 0x04, - 0x3c, 0xcc, 0x51, 0xd7, 0xd6, 0xdf, 0x51, 0xf0, 0x09, 0xf4, 0x5c, 0xbe, 0x09, 0xc2, 0x8d, 0xe5, - 0xc8, 0x65, 0xd3, 0x69, 0x78, 0xc1, 0x97, 0xc6, 0x99, 0xa3, 0x66, 0x87, 0xe1, 0x2a, 0x8b, 0x28, - 0x12, 0xb1, 0x2f, 0x72, 0x67, 0x19, 0xa5, 0xe9, 0xf2, 0x8c, 0x47, 0xfa, 0x4b, 0x72, 0x9a, 0x63, - 0xcd, 0xaf, 0xcb, 0x04, 0xdf, 0xfc, 0x64, 0x25, 0xb5, 0x96, 0xd2, 0x76, 0x4e, 0x8a, 0xca, 0x68, - 0x9d, 0xe2, 0x78, 0xeb, 0x7d, 0x65, 0xcd, 0xce, 0xfd, 0x1b, 0x0c, 0x31, 0xc8, 0xaf, 0xde, 0x48, - 0xfe, 0xdc, 0x8f, 0x59, 0x1f, 0x9a, 0x5c, 0x40, 0x2e, 0xbb, 0x1d, 0x8f, 0x3f, 0x4e, 0xe7, 0xc7, - 0xdc, 0xa1, 0xb9, 0xc3, 0x4a, 0x3a, 0xc1, 0x78, 0x3a, 0xe4, 0x29, 0xa5, 0x09, 0xd4, 0xf6, 0x23, - 0x9b, 0x7c, 0x6e, 0x06, 0x26, 0x67, 0xe9, 0xc5, 0xae, 0xfc, 0x29, 0x33, 0xfb, 0x7a, 0xd0, 0xe8, - 0x4e, 0xbc, 0x6b, 0x31, 0xd5, 0x19, 0x75, 0x2d, 0xa2, 0x48, 0xdb, 0x64, 0xbf, 0x36, 0x25, 0xf7, - 0xc4, 0x09, 0xa5, 0x09, 0x6d, 0x5b, 0x7b, 0xf8, 0x48, 0xad, 0x9e, 0x5a, 0xd8, 0xfe, 0x3c, 0x65, - 0x6a, 0x2f, 0x1a, 0xa0, 0x59, 0x96, 0xc4, 0xcb, 0x7f, 0x29, 0x47, 0x4f, 0xab, 0x25, 0xca, 0x74, - 0x7c, 0xe1, 0x11, 0xcd, 0x44, 0x2e, 0x88, 0x5f, 0xfd, 0x45, 0x88, 0x05, 0xfa, 0x91, 0x91, 0xac, - 0x42, 0x9d, 0x67, 0x08, 0x88, 0xae, 0xad, 0x71, 0x15, 0x46, 0xb1, 0x3c, 0xe5, 0x01, 0xa0, 0x27, - 0xd3, 0x4d, 0x34, 0xe3, 0xc8, 0x3e, 0x21, 0x28, 0x62, 0xe8, 0xd5, 0xcd, 0x55, 0xcc, 0x16, 0x71, - 0x21, 0xab, 0xe5, 0xfc, 0xb1, 0x08, 0x21, 0x97, 0xc5, 0x99, 0x53, 0x51, 0x84, 0xcb, 0x5a, 0xaf, - 0xaf, 0x7c, 0x77, 0x9b, 0x1a, 0x6b, 0x13, 0xe7, 0xc5, 0xea, 0xff, 0x82, 0x5b, 0xae, 0xa4, 0xaf, - 0x2e, 0x3f, 0xc4, 0x76, 0xd5, 0x6b, 0x51, 0x1a, 0xea, 0x95, 0x2e, 0x71, 0x24, 0x4b, 0x6d, 0xb6, - 0xdf, 0xfa, 0xf8, 0xf9, 0xe3, 0xd8, 0xaa, 0xaa, 0xff, 0x96, 0x4c, 0x48, 0x98, 0xcc, 0xc2, 0x1e, - 0x26, 0xac, 0xae, 0x16, 0xcf, 0x9a, 0x93, 0x0b, 0x96, 0x4d, 0x93, 0xa6, 0xcf, 0xfe, 0x1c, 0x15, - 0x18, 0x32, 0x26, 0xb0, 0x86, 0xdc, 0xbd, 0x3f, 0xf0, 0xad, 0x87, 0x8c, 0x9c, 0x08, 0xe5, 0x79, - 0x5f, 0x95, 0x1d, 0x57, 0xfc, 0x69, 0xad, 0xb7, 0x4b, 0xb6, 0xd3, 0xad, 0x36, 0x46, 0x10, 0x24, - 0x40, 0xf6, 0xad, 0x53, 0x2d, 0x0f, 0x0d, 0xb1, 0xcc, 0x78, 0x50, 0x98, 0x2e, 0xf0, 0x6f, 0x66, - 0x06, 0xb1, 0x50, 0xda, 0x6b, 0xa6, 0x78, 0x50, 0xd9, 0x9e, 0xa9, 0xc7, 0xc6, 0xcb, 0xbe, 0xa9, - 0xae, 0x99, 0xed, 0x77, 0xdb, 0xdd, 0x9f, 0x55, 0x55, 0xf1, 0x94, 0x34, 0x34, 0x8a, 0xd9, 0xed, - 0xec, 0xba, 0x0f, 0xbd, 0xf1, 0x3f, 0x89, 0xbd, 0xb3, 0xf7, 0xee, 0x22, 0x09, 0x71, 0xd5, 0xfc, - 0x65, 0x16, 0x27, 0x97, 0xdb, 0x67, 0x14, 0x41, 0x95, 0x6a, 0xaf, 0xdd, 0xa6, 0x3e, 0xce, 0xf3, - 0xea, 0xaf, 0x1f, 0x8f, 0x97, 0x9b, 0x6d, 0x1b, 0x5a, 0x76, 0xd4, 0x4f, 0x1f, 0xe3, 0x0b, 0x2f, - 0x4f, 0x3f, 0x94, 0x8f, 0x13, 0xe3, 0xb4, 0xd4, 0xdb, 0xf8, 0xc1, 0xcf, 0x94, 0xf6, 0x54, 0x44, - 0xed, 0xae, 0x5e, 0xcc, 0xbf, 0x94, 0xa0, 0x6b, 0x54, 0x6a, 0x3c, 0xb1, 0x71, 0x12, 0x05, 0x65, - 0xf2, 0xff, 0x52, 0x77, 0xc1, 0x11, 0x1c, 0xf8, 0xb2, 0xde, 0x25, 0x5f, 0xea, 0xff, 0x57, 0xf9, - 0xce, 0x8e, 0xfd, 0xdd, 0xdd, 0xf5, 0x4b, 0x2f, 0x3d, 0x1e, 0xfa, 0xaa, 0xa9, 0xb9, 0x8d, 0x69, - 0x4d, 0xf8, 0x80, 0x50, 0x46, 0x6b, 0xcf, 0x44, 0x9a, 0x69, 0xbe, 0x18, 0xea, 0xaa, 0xbb, 0xfc, - 0x9e, 0x9f, 0xce, 0x75, 0xf7, 0x77, 0x7f, 0x54, 0x79, 0xf0, 0x4c, 0x6b, 0x76, 0xea, 0xb4, 0x71, - 0x93, 0xa3, 0x94, 0x1f, 0x56, 0xf1, 0x3f, 0x05, 0x71, 0x7c, 0x56, 0xee, 0xaa, 0xee, 0xaa, 0x91, - 0xf8, 0x23, 0xbb, 0xaa, 0xa3, 0xd3, 0xf3, 0x84, 0x4b, 0xcc, 0xf0, 0x9e, 0x1f, 0xe0, 0x90, 0x24, - 0x83, 0x49, 0x53, 0xd7, 0xc1, 0x48, 0xce, 0x2d, 0x2c, 0x1d, 0x77, 0x4a, 0x0f, 0x8e, 0xa4, 0xaa, - 0x4e, 0x4d, 0xe6, 0x8a, 0x09, 0x9a, 0xaa, 0x17, 0xc6, 0x92, 0x44, 0xa3, 0x51, 0x84, 0xd3, 0x38, - 0x10, 0xb2, 0x25, 0xa7, 0x19, 0x1b, 0x47, 0xf7, 0x5d, 0x75, 0xfe, 0x37, 0x74, 0x18, 0xfd, 0xdd, - 0x5d, 0x7e, 0x14, 0x23, 0x37, 0x21, 0x96, 0x26, 0x5c, 0x3f, 0x84, 0xb9, 0x26, 0xf1, 0x65, 0x4b, - 0xfb, 0x27, 0x24, 0xf2, 0xfe, 0x76, 0x94, 0x6e, 0x5f, 0x07, 0xa0, 0x7e, 0x71, 0xe1, 0xd3, 0x92, - 0xdf, 0x16, 0x50, 0x9c, 0x31, 0xc0, 0xca, 0x2b, 0x06, 0x25, 0xe3, 0x2e, 0x2a, 0xc7, 0x25, 0xf7, - 0xce, 0xb8, 0xdf, 0xea, 0xa9, 0xfc, 0x76, 0x5c, 0x4f, 0x76, 0x3f, 0x93, 0xfa, 0x49, 0x78, 0xc1, - 0x2b, 0x55, 0xad, 0x72, 0xe2, 0x6a, 0x92, 0x6f, 0xe2, 0x4e, 0x95, 0x2a, 0x49, 0x24, 0x97, 0x12, - 0x09, 0x69, 0x96, 0x62, 0x1f, 0x9a, 0x84, 0xcc, 0x97, 0xc5, 0x08, 0x6a, 0xd5, 0x37, 0x2f, 0xbf, - 0x1e, 0x48, 0xee, 0x7d, 0x8c, 0xda, 0xf9, 0xbf, 0x8e, 0x10, 0xcc, 0x94, 0xd2, 0x2b, 0x64, 0x9c, - 0x4d, 0x5c, 0xbb, 0xe0, 0x8c, 0xf8, 0x8f, 0x54, 0x8b, 0xd0, 0x55, 0xe2, 0x79, 0xe8, 0xf3, 0xe9, - 0xa6, 0x9a, 0x62, 0xfa, 0x19, 0x17, 0xcf, 0xb9, 0x4e, 0x63, 0x14, 0xff, 0xce, 0x25, 0x53, 0x4d, - 0xb6, 0xff, 0xcf, 0x8b, 0xea, 0xaa, 0xbe, 0x1b, 0x22, 0xae, 0xad, 0xb6, 0xdb, 0x7f, 0xe0, 0xa0, - 0x8e, 0xff, 0x26, 0x39, 0xf5, 0x7f, 0x08, 0x1e, 0x22, 0x0d, 0x51, 0x13, 0x22, 0x26, 0x58, 0x54, - 0x2f, 0xf5, 0xef, 0x86, 0xaf, 0xae, 0x54, 0xd2, 0x39, 0x8b, 0xcd, 0x0a, 0xb6, 0xd3, 0xe2, 0x67, - 0xa5, 0x45, 0xd2, 0xec, 0x45, 0xd7, 0xf8, 0x24, 0xaa, 0xbb, 0xa4, 0x5c, 0x42, 0x8e, 0x38, 0xf9, - 0xef, 0x6d, 0xb4, 0xd3, 0xff, 0x0d, 0xd2, 0x4b, 0x52, 0xea, 0x51, 0xa6, 0xd3, 0x4d, 0xb7, 0xe1, - 0x62, 0x2a, 0xe5, 0xc2, 0xe3, 0xf2, 0x93, 0x49, 0xbf, 0xfc, 0xd7, 0x76, 0x6c, 0xfc, 0x3d, 0x77, - 0xdd, 0xf7, 0x53, 0xe6, 0x74, 0xa7, 0x37, 0x6f, 0xfc, 0xe7, 0xc3, 0x6d, 0x99, 0xeb, 0xfe, 0xa5, - 0x99, 0x78, 0x60, 0xd8, 0xcd, 0xbb, 0x5a, 0x4b, 0x46, 0x8c, 0xf4, 0x9e, 0x86, 0xa7, 0xe3, 0x37, - 0x26, 0xc6, 0x5c, 0x56, 0xe6, 0xee, 0xcb, 0xe7, 0xcf, 0x05, 0x92, 0x69, 0x1f, 0x18, 0xbb, 0x9f, - 0x5a, 0xd1, 0x9e, 0xde, 0xcc, 0xbe, 0x30, 0xd3, 0x7b, 0xbd, 0x4d, 0xe2, 0x63, 0xae, 0xc3, 0x33, - 0x9b, 0x3c, 0x65, 0x88, 0x42, 0xc8, 0xea, 0x0d, 0xcb, 0x26, 0x65, 0x11, 0x59, 0x52, 0xc7, 0x03, - 0x14, 0xdb, 0x14, 0x88, 0x75, 0x15, 0x2c, 0x35, 0x78, 0x25, 0x29, 0x69, 0x8f, 0xb5, 0x36, 0x7b, - 0x3b, 0xcb, 0xc4, 0x8a, 0x29, 0x30, 0x9a, 0xb1, 0xd3, 0x92, 0x7e, 0x10, 0xdb, 0xbd, 0xf7, 0x5b, - 0xfc, 0x5f, 0x3b, 0x0e, 0xdd, 0x92, 0x2e, 0x24, 0x24, 0x55, 0xa3, 0xd2, 0x4d, 0xd7, 0x08, 0xed, - 0xa7, 0x4d, 0x32, 0x78, 0xc9, 0xcb, 0xd9, 0xdb, 0xfc, 0x41, 0xa1, 0xb5, 0x68, 0xdf, 0xe4, 0xc5, - 0xf0, 0x58, 0x28, 0x63, 0xbc, 0xde, 0x95, 0x56, 0x4d, 0xad, 0xd6, 0xe2, 0x20, 0x9a, 0xf5, 0xb5, - 0x64, 0xaa, 0xb7, 0x30, 0xb3, 0xa6, 0x5e, 0x26, 0x5c, 0x45, 0xf4, 0x13, 0xef, 0x82, 0x8b, 0x36, - 0x69, 0x24, 0x92, 0x49, 0x24, 0x2b, 0x11, 0x3c, 0x51, 0x95, 0x55, 0x5a, 0xa7, 0xf2, 0x95, 0xdd, - 0xdf, 0xc1, 0x85, 0xdf, 0xc7, 0x1a, 0x16, 0x34, 0x0e, 0xf9, 0x6b, 0xa6, 0x9f, 0xf8, 0x28, 0x27, - 0x69, 0x64, 0xfc, 0xbe, 0x23, 0x36, 0x64, 0xc4, 0x97, 0xe0, 0xc3, 0xa4, 0x91, 0xb1, 0xaa, 0x4c, - 0x9e, 0x8f, 0xa7, 0xfe, 0x2f, 0x4a, 0x93, 0xbf, 0xe2, 0x09, 0xa4, 0x92, 0x49, 0x17, 0x1b, 0x9e, - 0x11, 0xea, 0xa9, 0x25, 0x49, 0x24, 0x92, 0x4b, 0xc2, 0x33, 0x63, 0x5a, 0xed, 0x34, 0xd3, 0x5f, - 0x04, 0xfd, 0xdd, 0xa3, 0x62, 0x51, 0x67, 0xae, 0x23, 0xa4, 0x91, 0xf1, 0xf9, 0xfc, 0x45, 0xa6, - 0x9d, 0xda, 0xd7, 0xc7, 0xdd, 0xf6, 0x0d, 0x83, 0x69, 0xa5, 0x5f, 0xc7, 0xd2, 0x49, 0xa6, 0x92, - 0x49, 0xa6, 0x92, 0x4b, 0xf0, 0x8f, 0x49, 0x29, 0x73, 0x89, 0x2f, 0xd6, 0xff, 0x09, 0xf4, 0x92, - 0xa4, 0xdb, 0x7e, 0x1d, 0xa2, 0x4a, 0xa9, 0xd6, 0x89, 0xa2, 0xfe, 0xb6, 0xc7, 0x3f, 0xff, 0x82, - 0x63, 0x2a, 0x69, 0x24, 0x5d, 0xf6, 0xf8, 0x58, 0xb6, 0x66, 0x96, 0x51, 0x93, 0x3b, 0x18, 0xb9, - 0xbe, 0xb7, 0x7f, 0x18, 0x59, 0xb7, 0x6f, 0xa7, 0x4e, 0x9e, 0x7e, 0xfe, 0x13, 0x8b, 0x44, 0xce, - 0x92, 0x93, 0x7c, 0x28, 0x32, 0x3e, 0x27, 0x06, 0xc9, 0xfa, 0x2c, 0xc8, 0x9b, 0x90, 0x15, 0xcd, - 0xc0, 0xe4, 0x07, 0xd8, 0x44, 0xec, 0x41, 0xf8, 0x3f, 0x1c, 0x09, 0x8b, 0xed, 0x1b, 0xf3, 0x3e, - 0x14, 0x29, 0x3e, 0xa3, 0xba, 0x77, 0x28, 0xa5, 0x69, 0x9d, 0x5e, 0xca, 0xb0, 0xb1, 0x46, 0xf3, - 0xc1, 0x65, 0x4c, 0x27, 0x51, 0xe3, 0x0d, 0x0d, 0x49, 0x7f, 0x7c, 0x49, 0x52, 0x3f, 0xbb, 0x15, - 0xc8, 0x46, 0x0e, 0xd9, 0x64, 0x8f, 0x89, 0x08, 0x6a, 0x6f, 0x25, 0xac, 0xad, 0x64, 0xb5, 0xe2, - 0x7c, 0x40, 0x40, 0x4c, 0xde, 0xdb, 0x6d, 0xa9, 0xf4, 0x90, 0xda, 0x5e, 0x32, 0x7f, 0xcb, 0x13, - 0xc1, 0x13, 0x22, 0xf8, 0x17, 0x1a, 0x92, 0xcb, 0x75, 0xb0, 0xd3, 0xc5, 0x88, 0x96, 0xa6, 0xfe, - 0x22, 0x2b, 0xcd, 0xf6, 0xd7, 0x11, 0x24, 0x8c, 0x26, 0x86, 0x9e, 0x24, 0x40, 0xac, 0xd9, 0xbd, - 0xfe, 0x14, 0x15, 0x67, 0xdb, 0x51, 0xa5, 0xee, 0xb8, 0x96, 0xb0, 0x9f, 0x0a, 0x10, 0x9e, 0x4c, - 0x11, 0xa6, 0x68, 0x16, 0x55, 0x2e, 0x5b, 0x31, 0xd8, 0xca, 0x33, 0x19, 0x9d, 0xf0, 0x87, 0x2e, - 0x3b, 0xb3, 0x95, 0x4a, 0x6c, 0xf9, 0x42, 0xe9, 0x52, 0x48, 0xbc, 0x14, 0x04, 0x29, 0x4b, 0x86, - 0x8b, 0xec, 0x8c, 0x6f, 0x8d, 0x23, 0x8f, 0x6a, 0xf1, 0xa6, 0x7d, 0x4e, 0x15, 0x9d, 0xb1, 0xba, - 0x1e, 0x23, 0x35, 0x52, 0x57, 0x49, 0x2a, 0x1e, 0x3c, 0xeb, 0xe4, 0xbf, 0xf0, 0xfe, 0xdc, 0x92, - 0xa3, 0x7c, 0x36, 0xc9, 0x9d, 0xc5, 0xc3, 0x9b, 0x1a, 0xff, 0x0c, 0x4d, 0x83, 0x43, 0x0b, 0x83, - 0xdc, 0x91, 0xe0, 0xa7, 0x19, 0xc2, 0x9e, 0xf1, 0x1c, 0x3a, 0x13, 0x3e, 0xaf, 0x55, 0x77, 0x49, - 0x22, 0xe4, 0x40, 0x2d, 0x4d, 0x34, 0xd3, 0xff, 0x14, 0x43, 0x6f, 0x26, 0x4b, 0x85, 0xcf, 0x04, - 0x64, 0x55, 0xec, 0x7c, 0x11, 0x14, 0xb9, 0xdc, 0xf9, 0x24, 0xc4, 0xbf, 0x44, 0x67, 0xd5, 0x9f, - 0x12, 0x71, 0x59, 0x73, 0xdd, 0xfd, 0x15, 0x3a, 0xf0, 0x44, 0x44, 0x92, 0x9b, 0xc4, 0xaf, 0xc1, - 0x2d, 0x24, 0xa5, 0x49, 0x8c, 0xce, 0x95, 0x78, 0xf2, 0x24, 0x96, 0x92, 0x49, 0x24, 0xee, 0xef, - 0xe3, 0xa2, 0xd0, 0xb5, 0xe9, 0x24, 0xf7, 0xf8, 0x9e, 0x92, 0x4e, 0xee, 0xeb, 0x9a, 0xee, 0xee, - 0xba, 0xf7, 0xc2, 0x82, 0x39, 0xf6, 0x4d, 0x6b, 0x87, 0xb8, 0xb0, 0xa3, 0x4b, 0xf7, 0xc1, 0x26, - 0xd3, 0x62, 0x7c, 0xa6, 0xf8, 0x7c, 0x93, 0xe4, 0x7a, 0xb6, 0xe8, 0xe2, 0xd9, 0x2a, 0x6e, 0x7d, - 0xd5, 0xd7, 0xc1, 0x49, 0x76, 0xd3, 0x56, 0xab, 0x9b, 0x13, 0x9b, 0xe0, 0xa8, 0xf4, 0xe9, 0xed, - 0xb6, 0xdd, 0xbb, 0x68, 0xa3, 0xe3, 0x0c, 0x9d, 0x3a, 0x6a, 0xa8, 0x7f, 0x5a, 0x7a, 0x6e, 0x71, - 0x05, 0x0e, 0x87, 0xe3, 0x67, 0xd2, 0x19, 0xd5, 0x55, 0xf9, 0x06, 0x26, 0x1d, 0x17, 0x7a, 0x49, - 0x11, 0x5a, 0x0f, 0x71, 0xae, 0x9c, 0x3c, 0xf5, 0x7a, 0xf1, 0x21, 0xd2, 0x3b, 0x19, 0x08, 0xf0, - 0xe1, 0xf2, 0x33, 0xf2, 0x8f, 0x6d, 0xd9, 0xab, 0x68, 0x6b, 0xe9, 0xad, 0xf8, 0x80, 0xa4, 0xfa, - 0x0c, 0x96, 0x12, 0xdb, 0x59, 0x83, 0x19, 0xc5, 0x1e, 0xd5, 0xed, 0x67, 0xd8, 0xef, 0x10, 0x51, - 0x69, 0xbe, 0xd7, 0x8c, 0xed, 0x35, 0x3e, 0xb5, 0x5d, 0xa6, 0xe7, 0x8d, 0x26, 0x99, 0x78, 0x43, - 0x1d, 0xe5, 0xa6, 0xdd, 0x4d, 0xa4, 0xff, 0x8f, 0xba, 0x24, 0x4c, 0x8b, 0x04, 0xee, 0x34, 0x70, - 0x8f, 0x1a, 0x5e, 0x26, 0x11, 0xbb, 0xf6, 0xdb, 0x8a, 0xfe, 0x26, 0x33, 0x3e, 0x76, 0xb7, 0x4f, - 0x4d, 0xef, 0xc4, 0x44, 0x56, 0xb7, 0xd5, 0x70, 0x57, 0x49, 0x27, 0x77, 0xb4, 0xaf, 0xa5, 0x2f, - 0x8d, 0xb5, 0xd2, 0x9b, 0xdd, 0x59, 0xb3, 0x67, 0xb4, 0xfa, 0xbd, 0xdf, 0xfc, 0x16, 0x99, 0x4d, - 0x43, 0x7f, 0x68, 0x94, 0x29, 0x7c, 0x26, 0x6e, 0x68, 0x14, 0xc8, 0xc4, 0x64, 0xeb, 0xe0, 0xa0, - 0x4a, 0xc7, 0x31, 0x53, 0xbd, 0xd1, 0x50, 0xf8, 0x5e, 0x7c, 0x64, 0x92, 0x23, 0xb1, 0x93, 0x12, - 0x58, 0xf2, 0x22, 0xa8, 0xbe, 0xee, 0xef, 0xe3, 0x4c, 0x66, 0x63, 0xac, 0xcc, 0xa5, 0x51, 0x5e, - 0x5f, 0x13, 0xf3, 0xd9, 0xba, 0x36, 0x2a, 0x16, 0x2f, 0xfe, 0x34, 0xe3, 0xfe, 0xa6, 0xf8, 0xd5, - 0xcf, 0x83, 0xb9, 0xc4, 0x6f, 0xd5, 0xc7, 0xef, 0xab, 0x52, 0x2f, 0x36, 0xa2, 0x8f, 0xfc, 0x17, - 0xe7, 0x9c, 0x8c, 0x9a, 0xd9, 0xe8, 0xd6, 0x5d, 0x47, 0x7b, 0xfc, 0x69, 0x19, 0x8e, 0xe2, 0x94, - 0x25, 0xb3, 0x10, 0x7a, 0x39, 0xa5, 0x99, 0xb4, 0xa8, 0x95, 0xfe, 0xe3, 0xff, 0x84, 0x2e, 0xe5, - 0xfb, 0x44, 0x04, 0x67, 0x75, 0xc7, 0x37, 0xf9, 0xc2, 0x6a, 0x9a, 0x69, 0xa6, 0x9a, 0x69, 0xa7, - 0xe7, 0xaa, 0x69, 0xa6, 0x9a, 0x69, 0xa6, 0x9f, 0x86, 0x04, 0x3b, 0xbb, 0xa4, 0x97, 0xdc, 0x7b, - 0xf4, 0xff, 0xc1, 0x1d, 0xa6, 0x9a, 0x6b, 0x5f, 0x0e, 0x1b, 0x97, 0xce, 0x76, 0x63, 0x12, 0xbe, - 0x1c, 0x50, 0x35, 0x94, 0xb6, 0xdb, 0x7b, 0x6d, 0x9b, 0x5d, 0xbd, 0xda, 0xed, 0xc4, 0x02, 0x2a, - 0xc8, 0x3a, 0xb4, 0x1d, 0x5a, 0x3f, 0xd1, 0xfe, 0xa6, 0x98, 0xab, 0x15, 0x6f, 0x83, 0x03, 0xe9, - 0x24, 0x92, 0x5a, 0xa6, 0x9a, 0x69, 0xff, 0xab, 0x7d, 0x48, 0x31, 0xf5, 0xaf, 0x9e, 0xa9, 0xa6, - 0x9a, 0x7f, 0xe7, 0xaa, 0x69, 0xa6, 0x9f, 0xf8, 0x73, 0xa4, 0x92, 0xa6, 0x9a, 0x69, 0xff, 0x82, - 0x8e, 0x92, 0x5a, 0x49, 0x55, 0x73, 0x5f, 0x5f, 0x42, 0x44, 0xc9, 0xf0, 0x43, 0x1f, 0xf5, 0xfe, - 0x45, 0xe0, 0x88, 0x96, 0xe7, 0xd8, 0xc7, 0xd1, 0xc7, 0x1b, 0xe6, 0x33, 0x6d, 0xb6, 0xdf, 0x86, - 0x05, 0x1f, 0x0d, 0x09, 0x52, 0xb7, 0xcb, 0xd3, 0x7e, 0x7e, 0xdd, 0x7e, 0x2e, 0x4d, 0x3e, 0x54, - 0xcd, 0x74, 0xf2, 0xff, 0x05, 0x79, 0xaa, 0x4a, 0x2d, 0xe8, 0xb9, 0x4b, 0x4c, 0xfe, 0x5f, 0x0a, - 0x08, 0xe4, 0x95, 0x35, 0xb6, 0xc6, 0x29, 0x20, 0xad, 0xa8, 0xa7, 0xf3, 0xdf, 0x1a, 0x27, 0x4e, - 0x9d, 0x3a, 0x67, 0xfb, 0x97, 0xdd, 0xbf, 0x7e, 0xae, 0xbe, 0x3c, 0xa7, 0xfd, 0xf6, 0xd2, 0xcf, - 0xdf, 0xc2, 0x82, 0x95, 0x0f, 0x85, 0x15, 0x0b, 0x32, 0x12, 0xbe, 0x43, 0x13, 0x32, 0xe8, 0x01, - 0xd6, 0x1c, 0xc2, 0xb7, 0xee, 0x51, 0x7c, 0x29, 0xc6, 0xaf, 0x63, 0x74, 0x9c, 0x57, 0x4d, 0x27, - 0x77, 0x7b, 0xe1, 0xf0, 0xa1, 0x5b, 0x07, 0xec, 0xdc, 0xf8, 0x5d, 0x85, 0x51, 0x71, 0xb1, 0x76, - 0xd2, 0x5f, 0x8b, 0xbd, 0x14, 0xfc, 0x4d, 0x36, 0xfb, 0xcd, 0x1c, 0x4f, 0xe2, 0x05, 0x9c, 0x85, - 0xb6, 0xcf, 0xb6, 0x9f, 0x88, 0x8f, 0x9f, 0x2a, 0xb5, 0xda, 0x1b, 0xba, 0xd0, 0xb3, 0xc6, 0xff, - 0x89, 0x92, 0x48, 0xa5, 0x3a, 0xa9, 0xfc, 0x28, 0x62, 0xfa, 0x6f, 0xb9, 0x7d, 0xaa, 0xab, 0x35, - 0x54, 0x2b, 0x3e, 0x24, 0xaf, 0xaf, 0xe5, 0x3f, 0x26, 0xf7, 0xf1, 0x86, 0xdd, 0xdb, 0x6f, 0x4d, - 0xeb, 0x6d, 0x11, 0xe3, 0xe3, 0x0b, 0xcf, 0xa9, 0x6a, 0x9f, 0xbb, 0xf8, 0xaf, 0xf0, 0x50, 0x50, - 0x6e, 0xdc, 0x38, 0xa9, 0x25, 0x2f, 0x3c, 0x9f, 0x19, 0xda, 0x69, 0x31, 0x0f, 0x21, 0x76, 0x90, - 0x4f, 0x9d, 0x4d, 0x16, 0x9e, 0x97, 0x12, 0x0a, 0x49, 0x76, 0xae, 0x53, 0x19, 0x79, 0x30, 0xd8, - 0xc9, 0x33, 0x0a, 0x9f, 0x05, 0x43, 0x1d, 0x43, 0xf4, 0xb6, 0xe8, 0xe6, 0x2c, 0xbd, 0x14, 0x5f, - 0x63, 0xe3, 0x4a, 0x92, 0xda, 0x55, 0x69, 0xa0, 0x93, 0x6c, 0x33, 0x25, 0xd9, 0x1e, 0x24, 0x94, - 0xfa, 0xda, 0x3f, 0xf8, 0x23, 0x2d, 0x24, 0x92, 0xef, 0x82, 0x82, 0x6d, 0x34, 0xe5, 0x60, 0xdd, - 0x8c, 0xcb, 0xe3, 0x68, 0x91, 0xcd, 0x43, 0xc1, 0xbd, 0xe8, 0x15, 0x5c, 0x6b, 0x6b, 0x49, 0x42, - 0x6d, 0x50, 0xcf, 0x8e, 0x51, 0x9a, 0xcb, 0x35, 0x7f, 0xff, 0x1b, 0x92, 0x75, 0x3a, 0x26, 0xa5, - 0xb6, 0xf6, 0x7a, 0xbc, 0x99, 0x04, 0xc6, 0x75, 0x64, 0xff, 0x96, 0x4e, 0xb5, 0x59, 0xd5, 0xfe, - 0x0b, 0x08, 0xac, 0xb8, 0x68, 0xd1, 0x1f, 0x4b, 0x43, 0xef, 0xc3, 0xe1, 0xd9, 0x20, 0x9a, 0x34, - 0x76, 0x34, 0x64, 0x9b, 0xb5, 0xfb, 0xc7, 0x19, 0x75, 0xbf, 0xf0, 0x53, 0x64, 0x8d, 0x8e, 0x64, - 0x1f, 0xb4, 0xde, 0xb1, 0x56, 0x3e, 0x34, 0xad, 0x2a, 0xa5, 0xa4, 0x93, 0x93, 0x69, 0xc4, 0x6a, - 0x9a, 0x1c, 0x32, 0x4f, 0x19, 0x28, 0xef, 0xfe, 0x0a, 0x6d, 0x35, 0xaa, 0xbb, 0xba, 0x66, 0xd7, - 0xcf, 0xb8, 0x8b, 0xaa, 0xd2, 0xf3, 0x6d, 0xcf, 0x9e, 0x0b, 0xaf, 0xa4, 0xd9, 0x36, 0x5f, 0x02, - 0xaf, 0x04, 0x9d, 0xde, 0xf5, 0xce, 0x5e, 0xa6, 0x99, 0x0d, 0x40, 0xbf, 0xc1, 0x7d, 0xeb, 0x52, - 0xe7, 0x54, 0xd3, 0x3e, 0xbf, 0x7f, 0xc3, 0x97, 0x97, 0x12, 0x59, 0xb5, 0x04, 0xd3, 0x5f, 0xe1, - 0xca, 0x8b, 0xdf, 0x54, 0xc5, 0xb8, 0x11, 0x0c, 0x7f, 0xcb, 0xdd, 0x2f, 0x17, 0x77, 0xeb, 0x37, - 0xf3, 0xd5, 0xb4, 0xc8, 0x62, 0xc3, 0x5f, 0xe1, 0xcb, 0xbe, 0xa0, 0xff, 0xc6, 0xae, 0x46, 0x9a, - 0xff, 0x04, 0x97, 0x7a, 0xbd, 0x73, 0xea, 0xdb, 0x63, 0x72, 0x34, 0xcf, 0xf0, 0xc9, 0xca, 0x11, - 0x02, 0xa0, 0xf9, 0xa4, 0x0d, 0x00, 0xd5, 0x0e, 0x8a, 0xaf, 0xfa, 0x95, 0x3e, 0xbd, 0x8f, 0x50, - 0xf7, 0x83, 0xed, 0x91, 0x69, 0x03, 0x1f, 0xbf, 0xc3, 0x97, 0x63, 0x73, 0x76, 0x7f, 0xb6, 0x2a, - 0xfc, 0x3c, 0x63, 0xc1, 0x51, 0x97, 0x8a, 0xa3, 0xeb, 0xf2, 0x69, 0x49, 0xb0, 0x7e, 0x9a, 0xa7, - 0xe4, 0x2a, 0x7c, 0x9f, 0xc1, 0x54, 0x97, 0xd4, 0xef, 0x3d, 0xb3, 0xe7, 0x3b, 0xe0, 0xac, 0x41, - 0xd8, 0x83, 0x1a, 0xa4, 0xb5, 0xb1, 0x95, 0x99, 0x5b, 0x73, 0xdf, 0x04, 0xe7, 0x63, 0xcf, 0xda, - 0xa8, 0xdb, 0x57, 0x78, 0x90, 0x86, 0xed, 0x1a, 0x84, 0xbf, 0x46, 0xd4, 0x63, 0x2a, 0xfc, 0x69, - 0x10, 0xea, 0x4d, 0xbd, 0x4d, 0xe2, 0x62, 0x6d, 0x88, 0x7b, 0x0c, 0xc5, 0x0b, 0xc6, 0xc3, 0xea, - 0xad, 0xf8, 0x4f, 0xba, 0x9b, 0x29, 0x7c, 0x71, 0xc7, 0x2b, 0x9c, 0x9b, 0x2f, 0x2e, 0x29, 0x5b, - 0x1a, 0x6c, 0x7e, 0x0a, 0x0e, 0xbb, 0x9f, 0xb6, 0xff, 0x59, 0x2f, 0x12, 0x12, 0x9f, 0x3a, 0x74, - 0xcc, 0xcf, 0x82, 0x4d, 0xc9, 0x8c, 0xc6, 0xf8, 0x46, 0xe6, 0xc7, 0xb4, 0xde, 0x3b, 0xa7, 0x26, - 0x78, 0x40, 0x44, 0x7b, 0xa5, 0x7f, 0xd2, 0x8c, 0xaf, 0x82, 0x6d, 0x2a, 0x76, 0xeb, 0xb9, 0xf0, - 0x80, 0xd3, 0x31, 0x19, 0x98, 0x8c, 0xec, 0x46, 0x76, 0x23, 0x57, 0x75, 0xf2, 0x92, 0xd5, 0x3f, - 0x08, 0x0a, 0x76, 0xda, 0x6d, 0x5b, 0x5a, 0x63, 0xea, 0xee, 0x97, 0x84, 0x4a, 0x5c, 0xdf, 0x72, - 0xc2, 0xdb, 0x8a, 0xfe, 0x2c, 0xe8, 0x26, 0x12, 0x21, 0xb8, 0xd7, 0xdf, 0xc1, 0x2d, 0x14, 0xb7, - 0xe4, 0xc4, 0xeb, 0xc6, 0x46, 0x55, 0xe4, 0x9b, 0x94, 0x18, 0x61, 0x91, 0xdb, 0x41, 0xdb, 0xc8, - 0x65, 0x11, 0x48, 0xfb, 0x5e, 0x30, 0x85, 0x61, 0xaa, 0x9a, 0x79, 0x59, 0x4c, 0x97, 0x17, 0x94, - 0x93, 0x1d, 0x38, 0xf8, 0x44, 0x51, 0x20, 0x7f, 0xab, 0x18, 0xae, 0xe6, 0xc9, 0x66, 0xb2, 0x5e, - 0x37, 0x0f, 0x2a, 0x91, 0x28, 0xb8, 0x9d, 0x1c, 0x63, 0x9b, 0x1b, 0x63, 0x5f, 0xfc, 0x6a, 0x08, - 0x86, 0x48, 0xad, 0x51, 0xeb, 0xfc, 0x3d, 0xa8, 0xf4, 0x2f, 0xbb, 0x8f, 0x2e, 0x69, 0x2a, 0x46, - 0xff, 0xfc, 0x15, 0x95, 0xd5, 0x75, 0x9e, 0xd6, 0xf9, 0xf4, 0xa9, 0x24, 0xd5, 0x22, 0xf0, 0x4b, - 0xd1, 0x0e, 0xfd, 0xb9, 0x76, 0xe5, 0x22, 0xf0, 0xa6, 0xad, 0xa4, 0xb5, 0xd9, 0xdd, 0xa4, 0xb6, - 0x3e, 0x32, 0x4d, 0x48, 0x9f, 0x74, 0x8b, 0xed, 0xf4, 0x3d, 0x1f, 0xcb, 0x94, 0xfc, 0x15, 0xe9, - 0xa4, 0x9e, 0x99, 0xb1, 0xda, 0x5c, 0x4a, 0xe4, 0x51, 0xf0, 0x4f, 0xe7, 0xc6, 0xb1, 0x85, 0x8a, - 0x2f, 0x85, 0x0a, 0x1e, 0x46, 0xe9, 0x79, 0xe6, 0x5d, 0xe5, 0xfd, 0xb5, 0xc5, 0xf1, 0x74, 0xde, - 0x87, 0x8b, 0xfc, 0x29, 0x66, 0x7a, 0xa7, 0x59, 0xe7, 0x17, 0x4e, 0x5c, 0x2e, 0x27, 0x8e, 0x6b, - 0xe0, 0x9f, 0x3d, 0x0f, 0x9a, 0x4f, 0x6c, 0xc9, 0xf0, 0x4d, 0x3d, 0x7b, 0xbe, 0x65, 0xfc, 0x23, - 0xbd, 0xea, 0xc1, 0x8f, 0x32, 0x2d, 0x1b, 0x48, 0x70, 0xfc, 0x15, 0xea, 0x6f, 0xab, 0xe8, 0x6a, - 0x7e, 0xa7, 0xc9, 0x93, 0x37, 0x20, 0x47, 0xc6, 0xea, 0x4f, 0xaa, 0x6d, 0x2b, 0xb5, 0x1d, 0x76, - 0xe4, 0xb4, 0x75, 0x6e, 0xb6, 0xdb, 0xff, 0x05, 0xde, 0x6c, 0xc9, 0x5e, 0x5f, 0x0a, 0x76, 0xcd, - 0xda, 0x7a, 0xbb, 0x92, 0x87, 0xd1, 0xaa, 0xd9, 0x3f, 0x2f, 0x85, 0x2e, 0xa8, 0xd1, 0xb4, 0xd7, - 0xd5, 0x23, 0x69, 0xf6, 0x3a, 0xcc, 0x9f, 0x1b, 0x36, 0x1b, 0x09, 0x8c, 0xcb, 0x44, 0xf7, 0xbd, - 0x74, 0x93, 0xdc, 0xb4, 0xd2, 0xbf, 0xf8, 0x28, 0xb4, 0x9e, 0x5d, 0x59, 0x26, 0x64, 0xf8, 0x82, - 0x9f, 0x15, 0xa7, 0x2e, 0x3a, 0xb5, 0xfc, 0x16, 0x5d, 0x27, 0x78, 0xb4, 0x95, 0xf6, 0xb3, 0x9f, - 0x0a, 0x53, 0xbb, 0xbe, 0xbb, 0x47, 0xc5, 0xea, 0x99, 0x78, 0x2b, 0x9b, 0x93, 0xbb, 0xb3, 0xa6, - 0x5c, 0xc1, 0xfd, 0xe5, 0xf4, 0x56, 0xf8, 0x24, 0xa6, 0x5d, 0x4f, 0x4c, 0xbc, 0x13, 0xda, 0x2e, - 0x25, 0xde, 0xa9, 0x97, 0x82, 0xcc, 0x8c, 0x3e, 0x6f, 0xad, 0x9a, 0xab, 0xdc, 0xf8, 0x7a, 0x3b, - 0x5c, 0x57, 0x77, 0xcf, 0x94, 0x91, 0xe1, 0x2e, 0xb3, 0x53, 0xff, 0xc3, 0xa6, 0xe5, 0x8a, 0x55, - 0x35, 0xb9, 0x36, 0xba, 0x99, 0x29, 0x26, 0xc8, 0xb1, 0x5f, 0xa7, 0xf8, 0xca, 0xb4, 0x92, 0x4d, - 0x37, 0x97, 0xc6, 0x98, 0xfa, 0xb4, 0xf8, 0x54, 0x48, 0xdd, 0x2f, 0x08, 0x45, 0x67, 0xcb, 0x43, - 0xf9, 0xb3, 0x7b, 0x36, 0x6c, 0xd9, 0xf8, 0xfa, 0x49, 0x5e, 0xb4, 0xd1, 0xa3, 0xa5, 0x36, 0xf8, - 0x50, 0x44, 0x9f, 0xdb, 0x8a, 0x5d, 0xaa, 0xc2, 0xd5, 0x4e, 0xff, 0x0a, 0x0d, 0x69, 0x34, 0xcd, - 0xae, 0xd7, 0x6c, 0x6b, 0x56, 0x5c, 0x7f, 0xba, 0x49, 0x7e, 0x10, 0x9b, 0x25, 0xdb, 0xcd, 0x37, - 0x2e, 0x0b, 0x6d, 0x63, 0xf0, 0xa1, 0x0f, 0x65, 0xe9, 0x19, 0x85, 0x6e, 0x35, 0x15, 0x72, 0x5d, - 0x94, 0xf2, 0x63, 0x7c, 0x16, 0x5e, 0xf7, 0x45, 0x4d, 0x95, 0x5a, 0xeb, 0xe1, 0x0b, 0xad, 0x34, - 0xcb, 0xd2, 0xdb, 0x6d, 0xb6, 0xf8, 0x9f, 0x11, 0xe2, 0x42, 0x22, 0x53, 0xb9, 0x35, 0x55, 0xde, - 0x5f, 0x4f, 0xc1, 0x48, 0x83, 0x67, 0xda, 0x6d, 0x53, 0x74, 0xdc, 0xb7, 0x89, 0x1e, 0x7f, 0x27, - 0xbe, 0xdf, 0x6a, 0x92, 0x58, 0x88, 0x27, 0xea, 0xb7, 0xbc, 0xbe, 0x13, 0x2b, 0x1a, 0xaa, 0x97, - 0x97, 0xa6, 0xdf, 0xe0, 0xa0, 0xcf, 0xae, 0x7d, 0x9d, 0xe3, 0x79, 0xbb, 0xe3, 0x0c, 0xea, 0x6c, - 0xf3, 0xbe, 0x91, 0x3d, 0x6a, 0x73, 0xae, 0xef, 0xe2, 0x42, 0x02, 0x59, 0x27, 0x1d, 0xc0, 0x3b, - 0x98, 0xc0, 0x98, 0x43, 0x71, 0x93, 0x1c, 0x6e, 0x9e, 0x9a, 0xf0, 0xa1, 0x07, 0xe5, 0xb6, 0xd9, - 0x55, 0x11, 0x63, 0x49, 0x99, 0xf8, 0xe4, 0x6b, 0x0c, 0xb5, 0xbc, 0xef, 0x8c, 0x39, 0x0c, 0x75, - 0x1c, 0xea, 0x4e, 0x38, 0xba, 0xea, 0x5b, 0x5a, 0x49, 0x32, 0xf1, 0x96, 0x62, 0xac, 0xc3, 0xaa, - 0x5a, 0x87, 0xd4, 0xe1, 0xd7, 0xf9, 0xfb, 0xea, 0x15, 0x40, 0xef, 0x6f, 0xbc, 0x44, 0xbb, 0x6c, - 0x65, 0xcf, 0x21, 0x26, 0xff, 0x9c, 0x42, 0x96, 0xa9, 0x75, 0xbb, 0xbf, 0xf8, 0x5a, 0x5d, 0x67, - 0xf3, 0x3d, 0xcd, 0x13, 0x35, 0x48, 0x29, 0xff, 0x82, 0xa3, 0xba, 0x49, 0x97, 0x5d, 0xd9, 0x7a, - 0x52, 0xe3, 0xb9, 0xf0, 0xec, 0x9a, 0x5d, 0x25, 0x5b, 0x53, 0x46, 0xf6, 0x19, 0x17, 0x26, 0xa4, - 0xf5, 0x37, 0x3f, 0x37, 0x7f, 0xff, 0x0b, 0x49, 0xdb, 0x95, 0xe6, 0xfb, 0x74, 0xe8, 0xb1, 0x6d, - 0xb1, 0xaf, 0xfc, 0x14, 0xf6, 0x43, 0x79, 0xd3, 0xaa, 0x9b, 0xbb, 0x71, 0xb9, 0xf0, 0x4f, 0x9d, - 0x86, 0xe8, 0xd5, 0x52, 0x94, 0x1f, 0x1d, 0x6d, 0xb6, 0xdb, 0xa8, 0x9c, 0x9d, 0x9d, 0x34, 0xad, - 0x78, 0x27, 0xba, 0xbd, 0x6b, 0x2d, 0xf0, 0x41, 0xce, 0xca, 0x1d, 0xa6, 0xb9, 0xb5, 0x3a, 0xd5, - 0xb6, 0xd3, 0x4f, 0xfc, 0x49, 0x65, 0xcb, 0x78, 0xbf, 0xc6, 0xdb, 0x64, 0xb7, 0x6a, 0x89, 0x9a, - 0x63, 0x4b, 0x95, 0x99, 0x23, 0x11, 0xea, 0xaa, 0xab, 0xfe, 0x1f, 0x93, 0x97, 0x72, 0x43, 0x36, - 0xdd, 0xf8, 0xe5, 0x36, 0xdb, 0x4f, 0xfc, 0x15, 0x90, 0x99, 0xf7, 0x2e, 0x5a, 0xc6, 0x59, 0x29, - 0x65, 0xdf, 0x0b, 0x66, 0x5f, 0x18, 0x5a, 0x5b, 0x9f, 0x6d, 0xb4, 0xd3, 0xf0, 0x41, 0x9f, 0x09, - 0x8c, 0xcb, 0xab, 0x51, 0x44, 0xcd, 0x9b, 0x9f, 0x6d, 0xb4, 0xd3, 0xf0, 0x5f, 0x69, 0xac, 0x99, - 0x8c, 0xdc, 0xa9, 0x4d, 0x34, 0x92, 0xff, 0x17, 0x58, 0xc7, 0x99, 0x66, 0xf6, 0xeb, 0xf8, 0x52, - 0xcd, 0x9a, 0xa9, 0xed, 0xf7, 0x33, 0x2e, 0x7a, 0xd6, 0x2f, 0x8c, 0xa4, 0x95, 0x21, 0x74, 0xda, - 0xb5, 0x69, 0xa6, 0xe5, 0xd4, 0xbc, 0x21, 0x67, 0x49, 0x22, 0xe3, 0x32, 0xaa, 0x89, 0xf1, 0xbf, - 0x84, 0xb6, 0xa6, 0xe9, 0x25, 0x10, 0xe7, 0x82, 0x6e, 0xef, 0x3e, 0x26, 0xef, 0x5f, 0x19, 0xd5, - 0x21, 0xbc, 0xbb, 0xb4, 0x7c, 0xb5, 0xa4, 0x99, 0x73, 0xc1, 0x2d, 0x33, 0xe2, 0x7c, 0x36, 0xcb, - 0x9d, 0x7c, 0x13, 0x74, 0xce, 0xee, 0x6c, 0x8b, 0xe3, 0x49, 0xba, 0x48, 0xd4, 0x69, 0x7c, 0x6f, - 0xd7, 0x4d, 0x99, 0x65, 0xab, 0x71, 0xb5, 0xff, 0xc2, 0x9d, 0x99, 0xa8, 0xdb, 0x56, 0x8d, 0x9d, - 0x3b, 0x9e, 0xae, 0xaf, 0xd7, 0xc4, 0x72, 0x59, 0x2f, 0x49, 0x2f, 0x04, 0xd6, 0x8d, 0x56, 0xfb, - 0x69, 0xd2, 0x7c, 0x29, 0x65, 0x19, 0x36, 0x5f, 0x74, 0x4f, 0x74, 0xee, 0xd9, 0x13, 0xe0, 0xb0, - 0xb6, 0xa6, 0xe9, 0xb4, 0x9d, 0xbd, 0xb9, 0xaf, 0x85, 0x36, 0xaf, 0x6a, 0xaf, 0x73, 0xf3, 0x6a, - 0xef, 0xc7, 0x1c, 0xef, 0x8c, 0x10, 0x9b, 0xc7, 0x28, 0x5d, 0x4a, 0xaf, 0x1d, 0x39, 0xbb, 0xcf, - 0x89, 0x1a, 0xda, 0x1b, 0x7a, 0xe7, 0xe5, 0x63, 0xc7, 0x99, 0x6d, 0xb6, 0xda, 0xa5, 0x9f, 0x3f, - 0x18, 0x7a, 0xd5, 0x2a, 0x51, 0x25, 0xb4, 0xd9, 0x16, 0x09, 0x12, 0xf4, 0xbc, 0x45, 0x34, 0xd3, - 0x4c, 0x9a, 0xb0, 0x64, 0xde, 0x24, 0x29, 0x1f, 0xff, 0xe8, 0xd6, 0x65, 0x09, 0xa7, 0x4c, 0xde, - 0xc2, 0x97, 0x88, 0x0a, 0x67, 0xdb, 0x67, 0xc7, 0xa8, 0xfd, 0xad, 0xa2, 0xfd, 0xbc, 0xbd, 0xfe, - 0x13, 0xdd, 0x5a, 0xcb, 0x89, 0x7b, 0xb7, 0x6f, 0xe0, 0x94, 0x89, 0xb6, 0x9e, 0xf7, 0x67, 0x89, - 0x45, 0x4f, 0xe2, 0x4b, 0xdd, 0xfc, 0x7d, 0x24, 0xbc, 0x65, 0x7e, 0x4f, 0xf0, 0x88, 0x87, 0x8a, - 0x58, 0x4c, 0xc3, 0xc2, 0x27, 0x7f, 0x6e, 0xab, 0xa7, 0x82, 0xa3, 0xd8, 0x22, 0x3c, 0x32, 0xf9, - 0x60, 0x89, 0xf1, 0x65, 0x49, 0x12, 0x23, 0xef, 0x8c, 0x2f, 0x32, 0x1c, 0x68, 0xa1, 0x70, 0x38, - 0x8a, 0x28, 0x1f, 0x6a, 0x21, 0x2c, 0x32, 0xd2, 0x94, 0x5e, 0x24, 0x71, 0x34, 0xe7, 0x20, 0x92, - 0x0d, 0xdd, 0x84, 0xc4, 0xb7, 0xf1, 0x9b, 0x26, 0x10, 0xcc, 0x8e, 0x5c, 0xbb, 0xb2, 0x2f, 0xc4, - 0xfe, 0x22, 0x48, 0x9e, 0x44, 0xab, 0x89, 0x89, 0x2d, 0x47, 0xa3, 0x7d, 0x53, 0x27, 0xf0, 0x49, - 0x49, 0xbe, 0xbe, 0x10, 0xc4, 0x3a, 0x9d, 0xd5, 0xf9, 0xff, 0xc6, 0x8c, 0x5a, 0xba, 0x44, 0x87, - 0x2e, 0xf2, 0x1d, 0xe9, 0xe9, 0x76, 0xb1, 0x84, 0xda, 0x7a, 0x47, 0xf8, 0xc2, 0xe7, 0xd6, 0xda, - 0x3e, 0xeb, 0xcc, 0xe1, 0x2d, 0x9a, 0x7c, 0x8d, 0xba, 0x9f, 0xc1, 0x4f, 0xb4, 0x91, 0xf7, 0xdb, - 0x43, 0x95, 0x81, 0x6a, 0x7c, 0x71, 0x5a, 0x3e, 0x2d, 0x4d, 0x1b, 0xa7, 0xa4, 0x93, 0x5f, 0x0a, - 0x6a, 0x49, 0x07, 0x4d, 0xb4, 0x45, 0xe6, 0xee, 0x3d, 0x4a, 0x98, 0xe8, 0xcb, 0x27, 0x45, 0x37, - 0xc2, 0x96, 0x37, 0x8d, 0xbb, 0x6b, 0x6a, 0xd6, 0x1b, 0x44, 0x6c, 0x6e, 0x62, 0xf8, 0xc2, 0x1b, - 0x76, 0xad, 0x29, 0x1f, 0xe7, 0x97, 0xa6, 0xe3, 0x58, 0xf0, 0xfd, 0xab, 0xcc, 0xfb, 0xa2, 0xc6, - 0xb3, 0x7f, 0xcd, 0x91, 0xe3, 0x5f, 0xf8, 0xf2, 0xda, 0x6c, 0xd8, 0xa6, 0xcf, 0x93, 0x0b, 0xbe, - 0x08, 0x89, 0x97, 0x8d, 0x2f, 0xbe, 0x14, 0xc4, 0x33, 0xac, 0x7c, 0x34, 0x6d, 0x0e, 0xae, 0xe4, - 0xd4, 0xb9, 0x5c, 0x5f, 0x04, 0xb6, 0xd0, 0xb4, 0xd9, 0x97, 0x12, 0xfd, 0xf1, 0x44, 0x7d, 0x5d, - 0x5d, 0xb4, 0xbf, 0x76, 0x6d, 0xaf, 0x82, 0x9d, 0xa5, 0xdc, 0xbb, 0xdd, 0xfa, 0xf8, 0x9d, 0x5d, - 0x26, 0xed, 0x9b, 0x7d, 0xe1, 0xc3, 0xbf, 0x82, 0x2d, 0x2a, 0x51, 0x7c, 0x17, 0x69, 0xd3, 0xb4, - 0xfa, 0xf9, 0x77, 0x7f, 0x82, 0x19, 0x37, 0x7d, 0x7c, 0x69, 0x69, 0x0c, 0xad, 0x74, 0x9b, 0x2f, - 0x8d, 0xde, 0x6f, 0x1f, 0x17, 0xdb, 0x6d, 0xb6, 0xfc, 0x17, 0x6e, 0x92, 0x49, 0x5a, 0xb1, 0xf0, - 0xf1, 0xcf, 0x43, 0xd1, 0xaa, 0x8d, 0x46, 0x75, 0x67, 0xc1, 0xb5, 0xc5, 0x3c, 0xb7, 0x37, 0x5f, - 0xf0, 0x4b, 0xb6, 0x9f, 0x26, 0xb9, 0x91, 0xd7, 0x8c, 0x36, 0xac, 0xdb, 0xa4, 0x6e, 0xcd, 0xf5, - 0xe7, 0xc9, 0xfa, 0x3f, 0xcd, 0x65, 0x71, 0x95, 0xf0, 0xee, 0x9a, 0x55, 0x3c, 0x93, 0x63, 0xdd, - 0x6f, 0x95, 0x30, 0x89, 0x9c, 0xfd, 0xb4, 0xab, 0x96, 0xeb, 0x5f, 0x0e, 0xda, 0xf6, 0xb4, 0xa5, - 0xf6, 0x93, 0x6f, 0x5f, 0xd5, 0x55, 0x7c, 0x94, 0x53, 0xc1, 0x17, 0x82, 0x12, 0xbb, 0xfb, 0x3e, - 0x12, 0x25, 0x39, 0x7b, 0xbf, 0xe0, 0x94, 0xc9, 0x22, 0xd0, 0xea, 0xa9, 0x65, 0xf1, 0xc2, 0xe2, - 0xc6, 0x95, 0x9a, 0x7f, 0xdf, 0x88, 0xc3, 0xe1, 0x18, 0xea, 0xbf, 0x36, 0xa9, 0xcc, 0xc2, 0xb1, - 0xff, 0x09, 0xd6, 0xa9, 0x32, 0xbd, 0x9f, 0x26, 0x65, 0x3f, 0x05, 0xb3, 0xe3, 0xb5, 0xb6, 0xde, - 0xbe, 0x3a, 0xc6, 0x25, 0x83, 0x77, 0x12, 0xe6, 0xf7, 0x7f, 0x08, 0x5b, 0x4d, 0xb4, 0x2d, 0xd3, - 0x92, 0x49, 0x52, 0xc4, 0x08, 0x16, 0x53, 0x06, 0x02, 0x40, 0xc0, 0x60, 0x11, 0x79, 0x19, 0xc1, - 0xfc, 0x61, 0x09, 0xb7, 0x26, 0xd2, 0x4b, 0x76, 0xb2, 0xf5, 0x6f, 0xf0, 0x57, 0x76, 0x97, 0x1b, - 0xfb, 0xb4, 0x99, 0x2f, 0xf8, 0x80, 0x84, 0xdf, 0xd5, 0x7d, 0xdf, 0xc5, 0x13, 0x8d, 0xe0, 0x92, - 0xa8, 0x4b, 0x0f, 0xc2, 0x19, 0x7e, 0xd1, 0xb7, 0xa3, 0x6e, 0x5b, 0x39, 0xbf, 0x08, 0x9c, 0xba, - 0xdc, 0x7a, 0x92, 0x37, 0x7f, 0xad, 0x3d, 0x5d, 0x4e, 0x63, 0xe8, 0x3b, 0x7c, 0x14, 0x61, 0x5b, - 0x15, 0x57, 0x2e, 0x75, 0xf0, 0xa5, 0x84, 0x08, 0xde, 0x64, 0x25, 0xd2, 0xa6, 0x37, 0x96, 0x91, - 0xc4, 0x0d, 0x21, 0xd1, 0xd8, 0xe1, 0x01, 0x2a, 0x18, 0x1b, 0xe3, 0x40, 0xe9, 0xbe, 0x14, 0x2d, - 0x0c, 0x78, 0x75, 0x0d, 0xce, 0x38, 0xce, 0x53, 0x13, 0xd6, 0x04, 0xe3, 0x18, 0x99, 0xdb, 0xf3, - 0xdd, 0x1a, 0x77, 0xe1, 0x22, 0x32, 0x49, 0x14, 0xf0, 0x5a, 0xda, 0xe2, 0x4b, 0x41, 0x1e, 0xc7, - 0x23, 0x68, 0x5e, 0x10, 0x2e, 0x5c, 0x2e, 0x3e, 0x87, 0x3f, 0xd2, 0xf1, 0xf4, 0xde, 0xd6, 0x4c, - 0xa3, 0xd5, 0x7c, 0x41, 0x15, 0x55, 0x6d, 0x4d, 0xfc, 0x3c, 0x33, 0x24, 0x92, 0xfa, 0x66, 0xc2, - 0xc6, 0x05, 0x27, 0x52, 0xaa, 0x19, 0x49, 0x91, 0xbf, 0xbf, 0xdf, 0xf0, 0xf8, 0x96, 0xda, 0xcc, - 0xca, 0x7b, 0xc6, 0x06, 0x44, 0x99, 0xad, 0x92, 0xff, 0xff, 0x8d, 0xa4, 0x5e, 0x94, 0xb6, 0x4d, - 0xb5, 0xa1, 0xc8, 0xca, 0xaf, 0xea, 0x64, 0xe9, 0xb3, 0xff, 0x82, 0xc8, 0xd7, 0x43, 0xe6, 0x9d, - 0x36, 0x93, 0x4e, 0x90, 0xa1, 0x3e, 0x1f, 0x24, 0x71, 0xb9, 0xdf, 0x43, 0xbb, 0x77, 0x33, 0x2a, - 0xee, 0xef, 0xfe, 0x0a, 0xaa, 0xec, 0x6e, 0xde, 0xe5, 0xb7, 0x88, 0x9f, 0xd7, 0xc6, 0x94, 0xec, - 0x37, 0x28, 0xfd, 0x23, 0xb7, 0x22, 0x95, 0xba, 0x8e, 0x65, 0x26, 0xda, 0x3b, 0x8b, 0xb7, 0xff, - 0x0a, 0x77, 0x71, 0xca, 0xd6, 0xfd, 0xed, 0xa9, 0xb7, 0x54, 0xe8, 0xcf, 0xab, 0x11, 0xdf, 0xf0, - 0x41, 0x66, 0xcd, 0xe5, 0x61, 0x8d, 0x4d, 0x73, 0x25, 0x10, 0xd7, 0x55, 0x92, 0xaf, 0x4d, 0x34, - 0xd3, 0xf0, 0xf5, 0x27, 0x54, 0xb3, 0x74, 0x9f, 0x4a, 0x6e, 0xa5, 0x36, 0xa8, 0x93, 0x7f, 0xa6, - 0x9a, 0x69, 0xf8, 0x52, 0x33, 0xe8, 0xa4, 0xd8, 0x92, 0x4d, 0xb6, 0xda, 0x7b, 0x49, 0x69, 0x25, - 0x1f, 0xe3, 0x34, 0xa4, 0xd6, 0x9b, 0xd2, 0xa4, 0xd3, 0x4c, 0x93, 0x42, 0x7f, 0x04, 0x16, 0xd3, - 0xa6, 0xfa, 0x6e, 0xff, 0xbe, 0x9a, 0x69, 0xa7, 0xe1, 0x4b, 0xb2, 0x73, 0xf4, 0xcf, 0x73, 0x97, - 0xd6, 0x4d, 0x6e, 0x95, 0x9a, 0x9a, 0x33, 0x1f, 0xe0, 0x84, 0x9d, 0xd5, 0x8f, 0x82, 0xbb, 0x5b, - 0x74, 0xd5, 0xa4, 0x92, 0xb4, 0xc7, 0xc6, 0x52, 0x75, 0xad, 0x2e, 0x92, 0x4d, 0x1e, 0x7f, 0x8d, - 0xbe, 0x6e, 0x6e, 0x96, 0x4d, 0xb1, 0xbb, 0x49, 0xf2, 0xef, 0x32, 0x93, 0xac, 0x7f, 0xe0, 0x9c, - 0xe9, 0x24, 0x91, 0x9a, 0x9b, 0xb9, 0x32, 0x27, 0x7c, 0x10, 0x10, 0xad, 0x93, 0x6c, 0x90, 0xd2, - 0x3c, 0x37, 0x4d, 0x9c, 0x55, 0x5a, 0xff, 0x85, 0x2c, 0xb5, 0x2e, 0xe6, 0xb7, 0x73, 0x35, 0x2d, - 0x8e, 0xbe, 0x1f, 0xb7, 0x74, 0x92, 0x43, 0x48, 0xac, 0xab, 0x3e, 0xb7, 0x6c, 0xff, 0xfc, 0x18, - 0x5b, 0x67, 0x2f, 0xcf, 0x8c, 0xdf, 0x6d, 0xe9, 0xff, 0x82, 0xad, 0x34, 0x8f, 0x03, 0x34, 0x6e, - 0xc5, 0x1a, 0x8a, 0xcd, 0xdb, 0xf7, 0xf8, 0x29, 0xbe, 0x8f, 0xbd, 0x1c, 0x66, 0x8c, 0xf0, 0x7b, - 0x7c, 0xbe, 0x2f, 0x59, 0xb9, 0x1e, 0x69, 0x55, 0x07, 0xe1, 0xd9, 0xe0, 0x91, 0x9b, 0x51, 0x34, - 0xad, 0xc7, 0x6a, 0xad, 0x32, 0xde, 0xf1, 0xb1, 0xcb, 0xb8, 0xc2, 0xc4, 0xff, 0xf0, 0x5f, 0xdd, - 0xdb, 0xb6, 0xb2, 0xfa, 0xaa, 0xaf, 0x85, 0x04, 0x9c, 0x41, 0x60, 0x6f, 0x62, 0x91, 0x84, 0x11, - 0xe1, 0x87, 0x40, 0xde, 0x20, 0xd6, 0x58, 0x53, 0xa6, 0xdf, 0x08, 0x91, 0x92, 0x24, 0x4d, 0x9b, - 0xfe, 0xef, 0xe1, 0x4c, 0xda, 0x79, 0x73, 0xf4, 0xb7, 0x43, 0x75, 0xdd, 0x3d, 0x7c, 0x29, 0x7d, - 0xc1, 0x8d, 0x83, 0xb0, 0x7c, 0x57, 0x52, 0xdc, 0xfb, 0xb3, 0x57, 0x77, 0xc2, 0x22, 0x1b, 0xb2, - 0x79, 0x51, 0x13, 0x1d, 0xe5, 0x4f, 0x98, 0xfe, 0xc5, 0xac, 0x74, 0xfc, 0x16, 0xe9, 0xdd, 0xe6, - 0xc4, 0xd8, 0xf1, 0x00, 0x93, 0x55, 0xf7, 0xc1, 0x4d, 0x24, 0x8f, 0xdb, 0x92, 0x36, 0x94, 0x71, - 0xa6, 0xf9, 0x7c, 0x27, 0x63, 0x2d, 0x66, 0x0e, 0x0f, 0x4d, 0x3f, 0x05, 0x9a, 0x49, 0x53, 0x3f, - 0xfa, 0x49, 0x3f, 0xc1, 0x5d, 0xdf, 0x55, 0xa7, 0x63, 0x5c, 0x5f, 0x05, 0x77, 0xdb, 0x6f, 0x2f, - 0x11, 0xc2, 0x64, 0xb3, 0x08, 0x98, 0xe2, 0x10, 0x18, 0xc5, 0x8a, 0x77, 0xe2, 0xb6, 0x9a, 0x3e, - 0x3d, 0xcb, 0x9e, 0x33, 0x7b, 0x6b, 0xf3, 0xf8, 0xde, 0x4e, 0x8f, 0xa4, 0x78, 0xfe, 0x14, 0x29, - 0xf3, 0xbc, 0x55, 0x25, 0x08, 0xe9, 0x7c, 0xb8, 0x98, 0xda, 0xbf, 0xaf, 0x8c, 0x3d, 0xf0, 0xa5, - 0x99, 0x03, 0xe5, 0x9a, 0xdf, 0x15, 0x6f, 0xd9, 0x16, 0xd3, 0x88, 0x98, 0xc7, 0xc6, 0x5d, 0xad, - 0xe4, 0xee, 0xd7, 0xc9, 0x14, 0xa2, 0xe7, 0xab, 0x64, 0xec, 0x41, 0x43, 0xa5, 0xe1, 0x4c, 0x2d, - 0x0c, 0x9d, 0x01, 0xa3, 0x60, 0x82, 0xa8, 0x61, 0xc5, 0x16, 0xc4, 0xb9, 0x84, 0x11, 0xe8, 0x74, - 0xdc, 0x44, 0x29, 0xf6, 0x74, 0x8c, 0x8c, 0x72, 0x0e, 0x1a, 0xbd, 0x8c, 0x69, 0x36, 0x22, 0xe2, - 0xe4, 0x2c, 0xcd, 0xf1, 0x96, 0xfe, 0xa7, 0xb9, 0x70, 0xba, 0xb3, 0xe2, 0x2f, 0x49, 0x12, 0x2f, - 0x17, 0x1c, 0x93, 0xb7, 0x51, 0x75, 0x55, 0xc4, 0x16, 0x5d, 0x93, 0x37, 0x7f, 0x84, 0x29, 0xdb, - 0x69, 0xdb, 0x15, 0xe0, 0xd7, 0xf7, 0xf2, 0x08, 0xa3, 0x5f, 0x85, 0x8c, 0x86, 0xe3, 0x86, 0xce, - 0x47, 0x2e, 0x6b, 0xc6, 0x8e, 0x12, 0x33, 0x2e, 0xfd, 0x98, 0x34, 0xe5, 0xff, 0x18, 0x25, 0xba, - 0xbb, 0xa7, 0x49, 0xa7, 0x48, 0xbb, 0xa5, 0xf0, 0xc7, 0x73, 0x4a, 0x6d, 0x4f, 0x53, 0xf3, 0xeb, - 0xd7, 0xfe, 0x0a, 0xb6, 0xd2, 0x6c, 0x66, 0xaa, 0x3d, 0x22, 0xeb, 0x34, 0xba, 0xcd, 0x83, 0xe0, - 0xb0, 0x99, 0xfd, 0xb7, 0xcb, 0xdb, 0xbe, 0x74, 0xf8, 0xca, 0x49, 0x74, 0xd3, 0x4d, 0xba, 0x4e, - 0x9a, 0x2b, 0x7e, 0x0b, 0x26, 0xce, 0x5c, 0x59, 0xfb, 0x1b, 0x71, 0xba, 0x8c, 0xdf, 0x11, 0x8b, - 0x97, 0x75, 0x25, 0xf0, 0xf1, 0x6c, 0xdc, 0xb8, 0xce, 0xcc, 0xb4, 0x6e, 0xc7, 0x12, 0x9f, 0xab, - 0xaf, 0xfb, 0x23, 0x56, 0xfe, 0x30, 0xed, 0xdc, 0x9c, 0xf9, 0xed, 0x13, 0x3f, 0x26, 0xfe, 0x09, - 0x2d, 0x14, 0xcd, 0x28, 0xbe, 0x36, 0x5d, 0x71, 0xf3, 0xbd, 0xd9, 0xad, 0xe2, 0xc6, 0xab, 0xaa, - 0x93, 0x4e, 0x71, 0x59, 0x4f, 0x04, 0xff, 0xc6, 0x69, 0x35, 0x6c, 0xdc, 0xfb, 0xb4, 0x5f, 0xea, - 0x6d, 0x7f, 0xf0, 0xa5, 0x62, 0xd5, 0x53, 0x43, 0x47, 0x1f, 0x72, 0x6c, 0xe7, 0x32, 0xd8, 0xd2, - 0x47, 0x09, 0x8f, 0x85, 0x3b, 0xb7, 0x4d, 0x52, 0x8a, 0xd4, 0x9b, 0xe4, 0x47, 0x5e, 0x1e, 0x35, - 0x4b, 0xf4, 0xdd, 0xb5, 0x49, 0x52, 0xaf, 0xa6, 0x9a, 0x69, 0xf8, 0x29, 0xa5, 0x75, 0x9e, 0x19, - 0x76, 0x24, 0x8b, 0xb3, 0x1f, 0x15, 0x39, 0x8a, 0x95, 0xef, 0x73, 0xb3, 0xe2, 0xbb, 0x22, 0x6e, - 0x89, 0xfc, 0x10, 0x5b, 0x3f, 0xda, 0x48, 0xde, 0x27, 0x2e, 0x49, 0xb2, 0x93, 0xc6, 0xbf, 0xf0, - 0xfc, 0xd8, 0xd5, 0x24, 0xed, 0xee, 0xa4, 0xd9, 0x7a, 0xa6, 0xb5, 0xff, 0x05, 0x74, 0x98, 0x57, - 0x49, 0x26, 0xfd, 0xf5, 0x35, 0xf1, 0xd3, 0xd0, 0xcf, 0x4a, 0x93, 0x9a, 0x2f, 0x6d, 0xb5, 0xf8, - 0x30, 0x31, 0x77, 0xd2, 0x1f, 0x36, 0xc7, 0xf7, 0xcc, 0x3a, 0x3c, 0x7c, 0xf7, 0x7f, 0x85, 0x25, - 0xee, 0xd6, 0xdc, 0xfd, 0xb7, 0xe5, 0x99, 0x37, 0x71, 0xe1, 0x43, 0xb7, 0x84, 0x3a, 0xad, 0x63, - 0x6d, 0xf9, 0x51, 0xa7, 0x49, 0x37, 0x44, 0xd4, 0xbe, 0x13, 0x13, 0x48, 0xc6, 0x2d, 0x35, 0xcf, - 0xbe, 0x30, 0x93, 0x7f, 0xb6, 0x6f, 0x24, 0x59, 0x7b, 0x75, 0xf0, 0x5d, 0x76, 0xfd, 0xef, 0xaf, - 0x85, 0x29, 0xc7, 0x69, 0xdb, 0xc7, 0xe3, 0x37, 0xc1, 0x13, 0x4e, 0x7c, 0xab, 0x5f, 0x1e, 0x69, - 0xdd, 0xb1, 0x74, 0xe4, 0x82, 0x4d, 0x4b, 0x33, 0x18, 0x89, 0x65, 0xc6, 0x9b, 0xc7, 0x7f, 0xe2, - 0xce, 0x90, 0xd2, 0xe2, 0xc5, 0xeb, 0xe3, 0xb3, 0x6c, 0x9e, 0x70, 0x76, 0x3c, 0x9d, 0xaf, 0x1f, - 0x4d, 0x8c, 0xbf, 0x56, 0xb3, 0x30, 0x39, 0x51, 0xd8, 0x7b, 0x1e, 0x3b, 0x52, 0x79, 0x74, 0xa9, - 0xc6, 0xb7, 0xf1, 0x38, 0xb6, 0x9b, 0x1a, 0xa7, 0xf8, 0x4f, 0x2f, 0xa7, 0x63, 0x23, 0x2e, 0x6f, - 0x82, 0xaa, 0xde, 0x96, 0x5f, 0xb5, 0x69, 0xdf, 0x08, 0xe5, 0x82, 0x7a, 0x47, 0xc3, 0xfa, 0xb3, - 0xe3, 0x57, 0xe1, 0x2b, 0xa9, 0xf9, 0xfb, 0xbd, 0xb4, 0x33, 0xe7, 0x84, 0x6c, 0xd9, 0xb3, 0x66, - 0xc8, 0xbb, 0x39, 0xa8, 0x11, 0x99, 0x73, 0x35, 0xf8, 0x2c, 0x2a, 0x6d, 0x42, 0x54, 0xab, 0x0c, - 0xce, 0xc9, 0xb5, 0xba, 0xcd, 0xc5, 0x3f, 0xc3, 0x2b, 0x9f, 0x53, 0xf7, 0xc1, 0x5d, 0x03, 0x45, - 0x7a, 0xf3, 0x9f, 0x34, 0xe2, 0xc7, 0x0d, 0x89, 0xaf, 0xc2, 0x67, 0xe1, 0x4c, 0x99, 0x6f, 0x44, - 0x4d, 0x6e, 0xe7, 0xcc, 0xa7, 0x34, 0x95, 0xca, 0x8e, 0xb8, 0x90, 0x55, 0x2d, 0x5a, 0xcc, 0x69, - 0xe9, 0x14, 0xce, 0xa8, 0x8d, 0xb3, 0xdf, 0x9e, 0xc6, 0xfc, 0x56, 0x73, 0xef, 0x52, 0x27, 0x28, - 0x2c, 0xae, 0x4b, 0xbe, 0x3a, 0xee, 0xd3, 0x4c, 0x8b, 0x93, 0xe1, 0xa9, 0xb3, 0x67, 0xe1, 0x1b, - 0xc5, 0x6e, 0xd4, 0x98, 0xa4, 0xf1, 0xc9, 0x3b, 0xe1, 0x3b, 0xdf, 0x2f, 0x97, 0xae, 0x1e, 0x18, - 0x96, 0x92, 0xb0, 0xc4, 0x60, 0x5d, 0xa4, 0x44, 0x93, 0x70, 0x08, 0x71, 0x81, 0x7f, 0x6f, 0x1f, - 0xfc, 0x2f, 0x27, 0x1c, 0xce, 0xcd, 0x4b, 0x3f, 0x76, 0x7f, 0x97, 0xbf, 0x87, 0x4f, 0x55, 0x34, - 0xeb, 0x25, 0x34, 0x69, 0x0a, 0x9a, 0x55, 0xb7, 0x6f, 0x09, 0x7e, 0xc8, 0x91, 0xff, 0x0a, 0x6e, - 0x86, 0x67, 0xbe, 0x8b, 0xb6, 0xd6, 0x68, 0xd3, 0xa8, 0xbf, 0xcf, 0x0b, 0x1c, 0x5f, 0x04, 0x14, - 0x96, 0xd9, 0x9e, 0xd5, 0x76, 0xa9, 0x3a, 0xdb, 0x2f, 0xff, 0xc3, 0xd8, 0xff, 0xdf, 0xf2, 0xe2, - 0x75, 0x31, 0x99, 0x86, 0x26, 0x8b, 0x23, 0x46, 0x17, 0xf8, 0x2b, 0xb5, 0x8f, 0x6e, 0xd1, 0x61, - 0xb4, 0xe3, 0x1f, 0x0a, 0x5f, 0x52, 0x6a, 0x5b, 0xe5, 0xed, 0xcb, 0xd8, 0xdf, 0xee, 0x7c, 0x3f, - 0x6e, 0xd7, 0xa1, 0xa9, 0x62, 0x5e, 0xf8, 0xc2, 0x27, 0x3a, 0x21, 0x18, 0x7f, 0x82, 0x1b, 0x7b, - 0xdc, 0xf9, 0x4b, 0x56, 0x9b, 0xf0, 0xa1, 0x2f, 0x74, 0xad, 0x34, 0xdd, 0xb4, 0xe4, 0xa6, 0xef, - 0x8c, 0xc1, 0xe6, 0xf9, 0xb1, 0xb5, 0xa8, 0xb9, 0xde, 0x97, 0x93, 0xcd, 0xfc, 0x14, 0x53, 0xcd, - 0x86, 0xd5, 0xcb, 0xb4, 0xab, 0xc1, 0x2d, 0x3a, 0x79, 0x99, 0x43, 0x73, 0x04, 0x6f, 0x84, 0x3b, - 0x4d, 0x22, 0x68, 0xb9, 0x13, 0x19, 0x19, 0xfc, 0x44, 0xfe, 0xb6, 0xcd, 0xd3, 0xc6, 0xfe, 0x3a, - 0x46, 0x18, 0xfd, 0x91, 0x7e, 0x78, 0x34, 0x5f, 0x7e, 0x0a, 0x24, 0xb9, 0x7a, 0x74, 0xad, 0x33, - 0xe1, 0x49, 0x17, 0x8d, 0xf7, 0xa6, 0x37, 0xaf, 0xa4, 0xda, 0x4d, 0x34, 0x77, 0x1f, 0x05, 0xb6, - 0xf6, 0xed, 0xb6, 0xdc, 0x81, 0x1f, 0x04, 0x16, 0xdc, 0xfd, 0x6d, 0x0a, 0xc4, 0xac, 0x4f, 0x8b, - 0x69, 0xe4, 0xad, 0x55, 0x57, 0xfc, 0x28, 0x22, 0xf7, 0x63, 0x6d, 0x31, 0x8c, 0x47, 0xb6, 0x89, - 0x8c, 0x15, 0x04, 0xe7, 0xf8, 0x47, 0x9b, 0x9a, 0x32, 0x46, 0x9c, 0xf4, 0xbc, 0x13, 0xed, 0xa6, - 0x7e, 0x48, 0x46, 0x5f, 0xf9, 0xf0, 0x56, 0x5e, 0x34, 0xac, 0xc9, 0x8d, 0xbb, 0x4d, 0xda, 0x97, - 0xc2, 0x85, 0xb6, 0xe8, 0x79, 0xb6, 0x82, 0x48, 0xa6, 0x30, 0xb2, 0xf9, 0x7a, 0x7f, 0x12, 0x42, - 0xa9, 0x2d, 0x94, 0x7e, 0x0b, 0x08, 0x9d, 0x3a, 0x65, 0x8a, 0x6d, 0xf3, 0x99, 0xd6, 0xf8, 0xe2, - 0xa2, 0xa6, 0x37, 0x2d, 0xa3, 0xe5, 0xe6, 0xd6, 0xf4, 0xff, 0x0a, 0x49, 0xb4, 0xe9, 0xb3, 0x53, - 0x6f, 0x36, 0x9b, 0x4d, 0xb1, 0xe9, 0xb2, 0x36, 0xcc, 0x71, 0x16, 0x23, 0xbb, 0x5e, 0x0a, 0xfb, - 0x6a, 0x2e, 0x2e, 0xb8, 0xf2, 0xb6, 0x79, 0xfd, 0xf0, 0x5d, 0x57, 0x5b, 0x87, 0x69, 0x8e, 0x5e, - 0xff, 0x05, 0x65, 0xb1, 0x88, 0xb3, 0x47, 0x34, 0x94, 0xdf, 0x5b, 0x6c, 0x7c, 0xb6, 0x33, 0x35, - 0x8d, 0xec, 0x78, 0xba, 0x6a, 0xd6, 0xad, 0xb7, 0xc4, 0x88, 0x2b, 0xbb, 0xdd, 0xb4, 0x27, 0xe2, - 0x04, 0xfc, 0x74, 0xff, 0x1e, 0x5a, 0x8b, 0xee, 0xa6, 0x8f, 0x73, 0x3e, 0x7c, 0x64, 0xb2, 0x97, - 0xc6, 0x15, 0x12, 0xf9, 0x39, 0xf3, 0x9a, 0x3e, 0x32, 0x46, 0x71, 0xb3, 0x85, 0x63, 0xd1, 0xbb, - 0xe5, 0x93, 0x45, 0x89, 0x23, 0xed, 0x99, 0x9f, 0x09, 0xc7, 0x0d, 0xe8, 0xfa, 0x9e, 0x46, 0xf7, - 0x49, 0xd1, 0x64, 0x3c, 0x15, 0xcf, 0x04, 0xf2, 0x61, 0x33, 0xa2, 0x56, 0x4c, 0x9d, 0xf0, 0x8d, - 0xbd, 0xb7, 0x2e, 0x4b, 0x94, 0x55, 0xf1, 0x5c, 0x57, 0x61, 0xa4, 0xda, 0x03, 0xf7, 0x45, 0x7f, - 0x84, 0xe4, 0xb6, 0x63, 0x0e, 0xd3, 0x4b, 0xf0, 0x89, 0xd7, 0xac, 0xb3, 0x45, 0x41, 0xa6, 0x9a, - 0x69, 0xf8, 0xb2, 0x12, 0x3a, 0xd1, 0x3d, 0x7e, 0x5b, 0x6d, 0xb5, 0xf0, 0x5a, 0x66, 0xfb, 0x73, - 0x36, 0xc6, 0x46, 0xf1, 0x21, 0x01, 0x6f, 0x7b, 0xb9, 0x68, 0xdb, 0x2d, 0x0b, 0x4d, 0x7c, 0x24, - 0x43, 0xf7, 0x40, 0xdb, 0x0a, 0xa4, 0x93, 0x73, 0xc6, 0x8c, 0x4c, 0x68, 0xce, 0x68, 0xdd, 0x57, - 0x7e, 0xa4, 0xb4, 0x86, 0x97, 0xd2, 0x44, 0x9b, 0x92, 0xb2, 0xc5, 0x2c, 0x7f, 0xc2, 0x02, 0x50, - 0xed, 0x29, 0x58, 0xda, 0xcb, 0x1b, 0x19, 0xfb, 0x1f, 0xe3, 0x6d, 0xaf, 0x4c, 0xec, 0xec, 0x69, - 0x53, 0x75, 0xd9, 0xa8, 0xb5, 0xb2, 0x8a, 0x97, 0xf8, 0x48, 0x91, 0xb5, 0xdb, 0x19, 0x72, 0x87, - 0xe3, 0x77, 0x3f, 0xb5, 0x53, 0x1a, 0x1b, 0xa5, 0x9d, 0x8c, 0xef, 0x4e, 0x2b, 0xdd, 0xff, 0xc1, - 0x51, 0x49, 0x5f, 0x48, 0x8f, 0x7b, 0x5a, 0xcb, 0x34, 0xac, 0xb3, 0xa1, 0xd1, 0x95, 0x3e, 0x14, - 0xc2, 0xba, 0x39, 0xa5, 0x4f, 0x7b, 0x87, 0x51, 0xb9, 0x0a, 0xbb, 0x8c, 0xc6, 0x3e, 0x42, 0x36, - 0xad, 0xfc, 0x15, 0x4f, 0xee, 0xd2, 0xae, 0xd3, 0x5b, 0x1f, 0x09, 0xd5, 0xb6, 0x37, 0x35, 0x75, - 0xf1, 0xa5, 0x6d, 0x36, 0xd5, 0x92, 0x46, 0xed, 0xda, 0x4d, 0x37, 0xaa, 0x45, 0x8e, 0x71, 0x44, - 0x68, 0x3e, 0x1f, 0xe1, 0xdc, 0x1d, 0xac, 0x26, 0xee, 0x9e, 0xad, 0x1a, 0x5d, 0x57, 0x8d, 0x3f, - 0xf1, 0x99, 0x22, 0x6c, 0xe3, 0x59, 0x68, 0xef, 0x69, 0xd3, 0xfc, 0x3f, 0x83, 0x88, 0x89, 0x2d, - 0xcc, 0x2b, 0xa8, 0xef, 0x63, 0xe5, 0xdc, 0xca, 0xba, 0x6b, 0x2c, 0x25, 0x87, 0xf8, 0x6e, 0x6d, - 0xd2, 0xc5, 0x75, 0x6f, 0x67, 0xff, 0x19, 0x74, 0x8e, 0xf5, 0x6a, 0xd3, 0x2a, 0xec, 0x75, 0xa4, - 0x5d, 0x74, 0xaf, 0xe0, 0xb2, 0xad, 0x8e, 0xd2, 0xcf, 0x96, 0x8b, 0x8f, 0x61, 0xac, 0x51, 0xa9, - 0xa1, 0x4b, 0xe3, 0x79, 0x78, 0x7b, 0xd8, 0xe6, 0x7e, 0x9c, 0x1a, 0xc1, 0xa6, 0xd9, 0x98, 0xb1, - 0xac, 0x5f, 0xff, 0x0f, 0x93, 0x6d, 0xaa, 0xad, 0xda, 0xa7, 0x82, 0xe5, 0xf4, 0xff, 0xc7, 0xda, - 0x72, 0xf6, 0xc2, 0x4e, 0x86, 0xed, 0x36, 0x2c, 0x5c, 0x7e, 0x4b, 0xbf, 0xe0, 0xa8, 0xb5, 0x5b, - 0x78, 0xf2, 0xad, 0x6b, 0x50, 0xed, 0x31, 0xdf, 0x1a, 0x2b, 0x69, 0x0c, 0x31, 0xbd, 0xb9, 0x2d, - 0x3d, 0x37, 0x7a, 0x16, 0xa5, 0xe4, 0xd7, 0x52, 0xa7, 0x06, 0x3c, 0x80, 0xaa, 0xe7, 0xfc, 0x61, - 0x67, 0xda, 0x6e, 0x8a, 0x68, 0xda, 0x77, 0xcd, 0x08, 0xa9, 0xf8, 0xf8, 0xed, 0x2e, 0xa2, 0xe6, - 0xf4, 0xf1, 0x95, 0x8b, 0xc1, 0x10, 0x92, 0xe4, 0x46, 0xc8, 0xc5, 0x68, 0x53, 0xf0, 0x4c, 0x32, - 0x81, 0xc3, 0xb7, 0x1d, 0xed, 0xaf, 0x0f, 0x84, 0x06, 0x9f, 0xa4, 0xe5, 0xfa, 0x9a, 0xb5, 0xa7, - 0xe1, 0x3c, 0xfa, 0xca, 0xa6, 0x8a, 0xcd, 0x0f, 0xc1, 0x4d, 0xa3, 0x6b, 0x4e, 0xd7, 0x7a, 0xef, - 0xfd, 0x7a, 0xf8, 0x29, 0xd4, 0x25, 0xcb, 0x4e, 0xde, 0x33, 0x69, 0xe5, 0x12, 0x65, 0x91, 0x2c, - 0x35, 0x85, 0x20, 0x3a, 0xcf, 0x2c, 0xde, 0xf2, 0xc1, 0x93, 0x5f, 0xb2, 0x8d, 0xb7, 0xc1, 0x75, - 0xef, 0xab, 0x57, 0x7c, 0x75, 0xdb, 0xc7, 0xb0, 0xe6, 0x1c, 0x8b, 0x55, 0x55, 0xf1, 0x16, 0x64, - 0x74, 0xc7, 0x2a, 0x77, 0x9a, 0xfc, 0x7e, 0x3e, 0xd2, 0xb9, 0xf3, 0x3e, 0x3b, 0x5f, 0x1f, 0xd2, - 0x52, 0xeb, 0x2f, 0x37, 0xb7, 0x6f, 0x88, 0x04, 0x33, 0xe3, 0xc7, 0x6f, 0x84, 0x2e, 0x33, 0xe7, - 0x8b, 0x3f, 0x2f, 0xac, 0xf9, 0xc4, 0x8a, 0xaa, 0xad, 0x56, 0xbe, 0x32, 0xca, 0xaa, 0x21, 0xd8, - 0x7e, 0xbb, 0x0c, 0xaf, 0x91, 0x2c, 0x6c, 0x71, 0xb1, 0xf8, 0x46, 0xb9, 0x9e, 0xad, 0xe9, 0x32, - 0x4c, 0x9f, 0x51, 0x22, 0x46, 0x14, 0x31, 0x75, 0xdd, 0xdf, 0x50, 0xa2, 0xd1, 0xd7, 0x5c, 0x8c, - 0xf8, 0xad, 0x06, 0x48, 0x69, 0xbf, 0xe3, 0xc8, 0xdb, 0x56, 0x45, 0xd7, 0x64, 0x72, 0xac, 0xd7, - 0xe2, 0xb5, 0xb6, 0x9d, 0x12, 0x2f, 0x25, 0xb6, 0xf5, 0xc1, 0x51, 0x28, 0x6d, 0x32, 0xc6, 0x57, - 0xd2, 0xa5, 0x5f, 0x08, 0xef, 0x6d, 0xcb, 0x89, 0xee, 0x95, 0xaf, 0x09, 0x93, 0x76, 0xdd, 0xb9, - 0xbf, 0x8c, 0x3a, 0xd4, 0x7d, 0x76, 0x3b, 0xdb, 0xbf, 0x22, 0x84, 0x7c, 0x8d, 0xe4, 0x3f, 0xa5, - 0xe2, 0x22, 0xba, 0x95, 0x92, 0xeb, 0xb1, 0x7f, 0x0a, 0x11, 0xb9, 0x8d, 0x21, 0xa1, 0xd1, 0xe9, - 0x27, 0x97, 0xd3, 0xc6, 0x73, 0x94, 0x63, 0x6c, 0xbe, 0x0b, 0xb2, 0xbe, 0x4d, 0xaa, 0x5c, 0x3e, - 0x14, 0x2a, 0x49, 0xdd, 0xdb, 0xd6, 0xda, 0x67, 0xc4, 0xa3, 0x74, 0x1f, 0xb6, 0xdd, 0x30, 0x3e, - 0x14, 0xb6, 0x35, 0x35, 0xd7, 0x55, 0x06, 0xd8, 0x2d, 0xdd, 0xd2, 0x6e, 0x0e, 0x53, 0x48, 0x6d, - 0x19, 0x78, 0xcb, 0xf7, 0x1d, 0x5a, 0xb2, 0x61, 0xf2, 0xa6, 0xe4, 0x49, 0xd1, 0x91, 0x97, 0x33, - 0xe1, 0x4a, 0xaf, 0x1b, 0xaa, 0x8d, 0xd8, 0xe6, 0x09, 0xa9, 0x33, 0x5c, 0x7d, 0xbf, 0x6e, 0x03, - 0xfc, 0x33, 0x7c, 0x29, 0x4a, 0xce, 0xdf, 0x4d, 0xb6, 0xad, 0xe9, 0x27, 0x76, 0xcc, 0xdf, 0x08, - 0x46, 0xae, 0x33, 0xe7, 0x72, 0x76, 0x93, 0x54, 0xdf, 0xe3, 0x29, 0x2b, 0xd5, 0x74, 0xc5, 0x77, - 0xdd, 0xfc, 0x65, 0xb6, 0x87, 0xb3, 0x88, 0xed, 0x6b, 0x62, 0x8d, 0x91, 0xae, 0xb9, 0xfe, 0xed, - 0xf8, 0x77, 0xcb, 0x94, 0xe2, 0x76, 0x3b, 0x23, 0x65, 0x58, 0x64, 0xa4, 0xb4, 0xff, 0x19, 0x69, - 0x4e, 0xc5, 0x19, 0xb1, 0x8d, 0x0d, 0x4a, 0xc7, 0xe8, 0xde, 0xf9, 0x2b, 0xa6, 0xde, 0x7f, 0xe1, - 0x4a, 0x6a, 0x9e, 0x9a, 0x51, 0xca, 0x6e, 0x66, 0x7a, 0x3b, 0x23, 0xa4, 0x71, 0xe3, 0x2f, 0x84, - 0x2e, 0x38, 0x48, 0x65, 0x65, 0x15, 0xec, 0x49, 0x07, 0xc9, 0x67, 0xc2, 0x97, 0x6a, 0xa6, 0x89, - 0x3f, 0xc9, 0x22, 0x6e, 0xc6, 0x7f, 0x7e, 0x40, 0xf0, 0x85, 0x37, 0xf4, 0xd7, 0xad, 0x55, 0xd5, - 0x3c, 0xb1, 0xf1, 0xb3, 0x31, 0x5d, 0xb3, 0xb5, 0x8c, 0xb5, 0x8d, 0x0c, 0xac, 0x5c, 0x1c, 0x67, - 0xde, 0xfb, 0xb6, 0xbf, 0xe1, 0x4c, 0x19, 0x5e, 0x32, 0xb2, 0x5d, 0x5b, 0x4a, 0xb6, 0xb1, 0x46, - 0x56, 0x5e, 0xd3, 0x30, 0x56, 0x57, 0x55, 0x06, 0x46, 0xf8, 0x24, 0xb6, 0xd1, 0x77, 0xc3, 0xe3, - 0x2a, 0x8a, 0xc6, 0x19, 0xd5, 0x69, 0x5c, 0xf9, 0x68, 0xad, 0x2a, 0x63, 0x8b, 0xe1, 0x49, 0x9a, - 0xd2, 0x47, 0x69, 0xb1, 0x6a, 0x92, 0xb1, 0x54, 0xa1, 0x87, 0xea, 0x58, 0xe5, 0x55, 0xf1, 0xa2, - 0xb9, 0xbe, 0xa5, 0x65, 0x57, 0x77, 0xeb, 0x45, 0xee, 0x62, 0x8e, 0xfa, 0x25, 0x3c, 0xff, 0xc4, - 0x1e, 0x39, 0x19, 0xf9, 0x73, 0xc2, 0x9d, 0xcb, 0x96, 0x8d, 0xe2, 0x9f, 0x55, 0x9b, 0x97, 0xa6, - 0xdc, 0xcc, 0xf8, 0x21, 0xde, 0x96, 0x77, 0xc5, 0x53, 0x7e, 0x9c, 0xbf, 0xc1, 0x48, 0x82, 0xf3, - 0x30, 0x95, 0x0d, 0x11, 0x3a, 0x5c, 0x67, 0x5b, 0x1d, 0x17, 0xc2, 0x63, 0xdc, 0xdc, 0xcd, 0xe3, - 0x59, 0x6b, 0x84, 0x2a, 0xd3, 0x64, 0xc5, 0x7e, 0xed, 0xd3, 0x5e, 0x24, 0x15, 0xeb, 0x52, 0x0c, - 0x61, 0xe9, 0xc3, 0x6a, 0x9d, 0xfe, 0x0b, 0x36, 0x94, 0xac, 0x4a, 0xbb, 0xcf, 0x96, 0x8e, 0x9f, - 0x05, 0xdb, 0x4f, 0xb4, 0x7c, 0xaa, 0x2f, 0x82, 0x22, 0x3b, 0xa1, 0xa1, 0xc5, 0xe2, 0x41, 0x5d, - 0x8d, 0x8d, 0x8c, 0x7a, 0x9a, 0xd8, 0xce, 0xce, 0xad, 0x7f, 0xe2, 0xca, 0xf3, 0xfe, 0xa6, 0xdf, - 0x11, 0x2f, 0xd3, 0x32, 0xfb, 0x19, 0xf8, 0x27, 0xd6, 0xdb, 0x69, 0x9f, 0xe7, 0x51, 0xe2, 0x42, - 0x73, 0xf0, 0xe5, 0x72, 0xb1, 0xf7, 0x24, 0x75, 0xf0, 0x44, 0x56, 0x9a, 0x69, 0xa6, 0x3e, 0x3a, - 0x3a, 0xa7, 0xb9, 0x1f, 0x5a, 0x67, 0xd8, 0xcf, 0x44, 0x3f, 0xc6, 0x50, 0xd5, 0x0e, 0x18, 0x74, - 0x2c, 0xb8, 0xe7, 0xb9, 0x00, 0xcd, 0x1c, 0xcc, 0xc7, 0x7d, 0x3f, 0x19, 0xda, 0x36, 0x55, 0xcb, - 0xd2, 0x49, 0x24, 0x9d, 0xbd, 0x3f, 0xc7, 0xd3, 0xc7, 0xcb, 0x89, 0x26, 0x9a, 0x69, 0xf8, 0x4a, - 0x5f, 0x4c, 0xcc, 0xd4, 0x55, 0x1c, 0x8f, 0x8c, 0x22, 0x5b, 0x4a, 0x5c, 0x97, 0x13, 0x4e, 0x9a, - 0x51, 0x6a, 0x26, 0x2b, 0x6e, 0x76, 0x2f, 0x63, 0xf0, 0x89, 0x9e, 0xe3, 0x2b, 0x95, 0x85, 0x26, - 0xf1, 0xfc, 0x65, 0xf6, 0xa9, 0x5a, 0xc9, 0xb2, 0x3d, 0xb9, 0xaf, 0xe3, 0x29, 0xea, 0xfd, 0xb8, - 0xf6, 0x66, 0x93, 0x61, 0x9f, 0xbf, 0x88, 0x98, 0x4a, 0xe6, 0xfc, 0x40, 0x82, 0x3e, 0xab, 0xbf, - 0x82, 0xac, 0xf0, 0x6f, 0x77, 0x77, 0xac, 0xde, 0x56, 0x95, 0x78, 0x78, 0xcc, 0x27, 0x54, 0x5b, - 0x97, 0x03, 0x0d, 0x2a, 0x19, 0x09, 0xae, 0xda, 0xc2, 0x08, 0xfa, 0x4b, 0xbe, 0x8b, 0xfc, 0x16, - 0x1d, 0x37, 0xf2, 0x6a, 0xb5, 0x77, 0xf7, 0x5a, 0x6d, 0xe5, 0xf0, 0xa5, 0xdb, 0x14, 0x45, 0xef, - 0x7e, 0x49, 0x96, 0xdf, 0xbc, 0xc4, 0x96, 0xfc, 0x1f, 0x1d, 0x26, 0xda, 0x78, 0x36, 0x49, 0x0d, - 0x65, 0x4c, 0xb4, 0xbf, 0x1b, 0x63, 0x6a, 0x8d, 0x0e, 0x8e, 0x33, 0xb6, 0x33, 0x47, 0xe9, 0xb5, - 0x5b, 0x9f, 0xbf, 0xff, 0x96, 0xea, 0xeb, 0xe0, 0x98, 0x9a, 0x66, 0xe9, 0x44, 0x92, 0x5d, 0xf0, - 0x5c, 0x5d, 0xb4, 0x92, 0x4b, 0x8b, 0xe1, 0x1b, 0x2d, 0x57, 0x43, 0x6e, 0x9b, 0x7e, 0x16, 0x23, - 0xeb, 0x1a, 0xa2, 0x1e, 0xe4, 0x9e, 0x34, 0xd3, 0xff, 0x19, 0x49, 0xfa, 0xb0, 0x69, 0xe6, 0xc6, - 0xcc, 0xc7, 0xad, 0xfe, 0x4b, 0xb3, 0xb6, 0xf8, 0xf8, 0x47, 0x2f, 0xa7, 0x37, 0x6e, 0x1d, 0x5d, - 0x2f, 0x05, 0x65, 0xda, 0x6d, 0xa2, 0x33, 0xc7, 0x7d, 0xf2, 0x31, 0x1f, 0x06, 0x15, 0x7d, 0x3d, - 0xb4, 0xe9, 0xdb, 0xbf, 0xf8, 0xbb, 0x56, 0x9a, 0x2f, 0x5b, 0x5f, 0x05, 0x52, 0xbe, 0xcf, 0x2f, - 0xb2, 0x73, 0x7a, 0x07, 0xe5, 0xf0, 0x4d, 0x56, 0xd5, 0x52, 0x1b, 0x56, 0x3c, 0x97, 0xc3, 0x36, - 0xb4, 0x95, 0xb5, 0x6d, 0xff, 0xc2, 0x15, 0xbd, 0xbb, 0x76, 0x34, 0x8c, 0xdf, 0xc2, 0x82, 0xb8, - 0xd9, 0x8a, 0x2c, 0xba, 0x74, 0xd7, 0x50, 0xac, 0xfd, 0x55, 0x9f, 0x0a, 0x16, 0xf3, 0x58, 0x71, - 0x59, 0x0a, 0xc7, 0xe8, 0xdc, 0xb6, 0x86, 0xd2, 0xfb, 0x89, 0xdc, 0xbe, 0x3e, 0x94, 0xb7, 0xb7, - 0x27, 0xda, 0x74, 0xe9, 0xf8, 0x40, 0xf1, 0x95, 0xb3, 0x57, 0x4e, 0xe6, 0xef, 0xf8, 0xc3, 0x5a, - 0xa7, 0x64, 0x51, 0x82, 0xed, 0xa6, 0x9e, 0xb5, 0x10, 0xda, 0xfc, 0x15, 0x4a, 0x41, 0x6a, 0xb8, - 0x0b, 0xd3, 0x51, 0xbc, 0xee, 0x8e, 0x59, 0x57, 0x84, 0x4e, 0xcd, 0x5e, 0xb5, 0x6d, 0x3f, 0xc2, - 0x94, 0xf3, 0xb3, 0x57, 0x9f, 0xef, 0xbd, 0xd9, 0xf2, 0x1c, 0x75, 0x53, 0x23, 0xe2, 0xf2, 0x12, - 0xf7, 0xf1, 0x7a, 0x4d, 0xa7, 0x4e, 0x58, 0x79, 0x29, 0xd3, 0xf1, 0x22, 0xcf, 0xb1, 0xb9, 0x50, - 0x21, 0x87, 0x7a, 0x82, 0x0d, 0xf1, 0xbc, 0x78, 0x83, 0xf8, 0xd6, 0x95, 0xe8, 0x6e, 0x86, 0xfe, - 0x2c, 0xb2, 0x66, 0x98, 0xfd, 0xdf, 0xe1, 0x1a, 0xb4, 0xed, 0x4a, 0x6d, 0xa6, 0x65, 0x2f, 0x44, - 0xac, 0xf4, 0x86, 0x99, 0xc4, 0x85, 0x2c, 0x6e, 0xc7, 0xae, 0xdf, 0x33, 0x1f, 0x42, 0x4d, 0xce, - 0x8c, 0xfc, 0x11, 0x50, 0xdb, 0x8a, 0xb3, 0xa7, 0x88, 0x08, 0x17, 0x4d, 0x3b, 0xad, 0xd5, 0xd7, - 0xc7, 0xc4, 0xd8, 0x2b, 0x06, 0x61, 0xac, 0x39, 0x69, 0xd5, 0x5d, 0xfc, 0x7e, 0x8d, 0xd5, 0xdf, - 0x6d, 0xb6, 0xdb, 0xe2, 0x02, 0x26, 0x97, 0xbe, 0xc6, 0x66, 0x0c, 0xc3, 0x98, 0xac, 0xde, 0xba, - 0xfc, 0x49, 0x4b, 0x74, 0xf5, 0xce, 0xa7, 0xe1, 0x1a, 0x69, 0xa6, 0x99, 0x14, 0x7e, 0x5c, 0xf0, - 0x91, 0xaf, 0x36, 0xbb, 0x7f, 0xc6, 0x11, 0x5e, 0xfb, 0x27, 0xd2, 0x4d, 0x3c, 0x9b, 0xe3, 0x2d, - 0x35, 0xb4, 0xd1, 0xf2, 0xa9, 0x31, 0x2f, 0x5a, 0xf8, 0x42, 0x92, 0x55, 0x54, 0xd7, 0x26, 0xa4, - 0xcd, 0xf1, 0x9b, 0x6f, 0x9d, 0xed, 0xfd, 0xdc, 0xdd, 0x2c, 0xff, 0xcd, 0xe2, 0xbf, 0x04, 0xc5, - 0x77, 0xc5, 0x93, 0x21, 0x8f, 0x53, 0x3c, 0x9c, 0x4c, 0x66, 0x4c, 0xa5, 0xab, 0xd3, 0x57, 0x67, - 0xaf, 0x8c, 0x2b, 0xea, 0xf6, 0xa9, 0xe9, 0xa6, 0xc2, 0x69, 0xaf, 0x18, 0x44, 0xcb, 0xf7, 0x3f, - 0xbb, 0xe9, 0xd2, 0xf8, 0x25, 0x25, 0x69, 0x6c, 0x8a, 0xaf, 0x97, 0xc3, 0xbc, 0x9e, 0x9c, 0x38, - 0xad, 0xe8, 0x6e, 0x66, 0x6a, 0x53, 0x52, 0x35, 0xa7, 0xfe, 0x3c, 0x4c, 0x99, 0xea, 0x37, 0x49, - 0x6b, 0x39, 0x58, 0x4d, 0x70, 0xf1, 0x13, 0x2b, 0x12, 0xb1, 0x15, 0xfe, 0xdd, 0xba, 0xa7, 0x08, - 0xbe, 0x7f, 0xc4, 0xdc, 0xd8, 0x56, 0x1c, 0xc5, 0x0e, 0x56, 0x7c, 0x5e, 0x3b, 0x44, 0x3e, 0xa3, - 0x30, 0xd3, 0x3f, 0x96, 0x8d, 0x2b, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x03, 0x01, 0xb0, - 0x2e, 0xbd, 0x8f, 0xd2, 0x49, 0x71, 0xc4, 0x37, 0x62, 0xfc, 0x8a, 0x6a, 0x22, 0xc4, 0x8b, 0xd0, - 0xfc, 0xc7, 0xe6, 0xfe, 0x18, 0x10, 0xd5, 0x15, 0x4f, 0x9e, 0xb9, 0x1e, 0x7f, 0x15, 0x62, 0xaf, - 0xc1, 0x1d, 0xde, 0x57, 0x33, 0xe0, 0x8e, 0xef, 0x7c, 0x9d, 0x78, 0xd1, 0x12, 0xa8, 0x56, 0x28, - 0xb7, 0xb7, 0xb6, 0x76, 0x57, 0x64, 0xef, 0xde, 0xf1, 0x5f, 0xd7, 0x18, 0x11, 0xda, 0x6b, 0x69, - 0xad, 0xa6, 0xb6, 0x9a, 0x5c, 0xc5, 0xc7, 0x93, 0x1a, 0xe2, 0xcc, 0xd3, 0x5b, 0x4d, 0x6f, 0x11, - 0x5c, 0x38, 0x27, 0x1a, 0xf2, 0xaf, 0x15, 0x39, 0xb4, 0xdb, 0xfc, 0x41, 0x49, 0xc4, 0x93, 0xe7, - 0x20, 0xe9, 0x53, 0x4d, 0x34, 0xfd, 0xf1, 0x65, 0xda, 0x6b, 0x69, 0xaf, 0x0c, 0x17, 0x1a, 0xf2, - 0xaf, 0x6a, 0xbc, 0xab, 0xc9, 0x97, 0xe5, 0xd2, 0xef, 0x13, 0xe2, 0x02, 0x42, 0x29, 0xa4, 0xfa, - 0x49, 0x71, 0x07, 0xaa, 0x69, 0x90, 0xcb, 0x0c, 0xf9, 0x78, 0xfa, 0x75, 0x6b, 0x69, 0xad, 0xa6, - 0xb8, 0x90, 0x43, 0x69, 0xa2, 0x5b, 0x2c, 0x70, 0x1b, 0xf7, 0x88, 0xf1, 0x24, 0x9b, 0x1d, 0x87, - 0xc7, 0xe2, 0xe6, 0x17, 0x1a, 0xa5, 0x55, 0x38, 0x8a, 0xe2, 0x05, 0x6d, 0x35, 0xb4, 0xd7, 0x8b, - 0xb4, 0xd6, 0xd3, 0x59, 0x39, 0xe3, 0xa5, 0x4d, 0x34, 0xd3, 0xf5, 0x89, 0xae, 0x2c, 0xd8, 0x3e, - 0xa0, 0x3e, 0xa2, 0x06, 0x81, 0x8f, 0xa8, 0x3e, 0xa7, 0x87, 0x0c, 0x33, 0xf6, 0xc2, 0x6a, 0x5f, - 0x4d, 0x34, 0xd3, 0xc4, 0xc2, 0xfd, 0xa3, 0x62, 0x36, 0x5f, 0xbb, 0xf8, 0xb6, 0x2d, 0xf8, 0x7b, - 0x56, 0x76, 0x6e, 0xa1, 0xe9, 0x4d, 0x9d, 0x34, 0x94, 0x9a, 0x30, 0xa9, 0xc7, 0xfe, 0x16, 0x13, - 0xcf, 0x49, 0x97, 0xfa, 0x74, 0xcd, 0x26, 0xff, 0xf4, 0x57, 0x3e, 0x0b, 0xa7, 0x1e, 0xda, 0xb4, - 0xd6, 0x74, 0xf8, 0x54, 0x20, 0x6c, 0xae, 0xad, 0x29, 0x35, 0xf5, 0xca, 0x6a, 0x8d, 0xfa, 0xb3, - 0xbf, 0xc1, 0x37, 0x37, 0x77, 0x41, 0x9e, 0x5b, 0xfc, 0xe3, 0xc7, 0x6a, 0x69, 0xa6, 0x9f, 0xf9, - 0xe3, 0x83, 0xfe, 0x9a, 0x69, 0xa6, 0x5e, 0xb9, 0x32, 0x5d, 0x4a, 0x9f, 0x3c, 0x76, 0x64, 0xd5, - 0x4d, 0xb7, 0xfe, 0xa6, 0x59, 0xf0, 0x47, 0xe4, 0xa6, 0x5f, 0x16, 0x5d, 0x24, 0xb4, 0x92, 0xf0, - 0xad, 0xa6, 0xb6, 0x9a, 0xca, 0xbf, 0xb6, 0xda, 0x69, 0xf8, 0x76, 0xd3, 0x5b, 0x4d, 0x6d, 0x35, - 0x95, 0x7f, 0x6d, 0xb4, 0xd3, 0xf3, 0xfa, 0x9a, 0x6d, 0xb7, 0xfe, 0x15, 0xb4, 0xd6, 0xd3, 0x58, - 0xf2, 0xfe, 0x99, 0x7f, 0x82, 0xfd, 0x55, 0x6d, 0x35, 0x95, 0x7f, 0x6e, 0xb8, 0xd3, 0x5c, 0xf1, - 0xda, 0xdb, 0x6d, 0xb7, 0xfe, 0x78, 0xed, 0xae, 0xb6, 0xdb, 0xfc, 0x4f, 0x1e, 0xb1, 0x00, 0x27, - 0x45, 0x42, 0x26, 0x44, 0x4c, 0x88, 0x99, 0x3a, 0x67, 0x36, 0x9b, 0x7c, 0x2d, 0x6e, 0xdd, 0xbb, - 0x71, 0x19, 0x64, 0xdd, 0xba, 0xdb, 0xff, 0x38, 0xb4, 0xeb, 0xc6, 0x65, 0xa9, 0x97, 0xeb, 0xa1, - 0x89, 0xd7, 0x11, 0xf3, 0x8d, 0x4e, 0xbc, 0x72, 0x5a, 0xc9, 0x7f, 0xe8, 0x52, 0x75, 0xe1, 0x2e, - 0x2b, 0xc5, 0xf3, 0x75, 0x4a, 0xbc, 0x14, 0xe9, 0x53, 0xc2, 0xaa, 0xf1, 0x36, 0x37, 0xf8, 0x4b, - 0x8a, 0xf1, 0x7f, 0xce, 0x41, 0xd9, 0xd2, 0x69, 0xa6, 0x9f, 0xfa, 0xa7, 0x5e, 0xae, 0x7d, 0x69, - 0xd7, 0xaa, 0x55, 0xeb, 0x17, 0xc2, 0xa2, 0x36, 0x99, 0x9b, 0x1b, 0x57, 0x78, 0xb5, 0x55, 0xb7, - 0xfe, 0x1e, 0x28, 0x74, 0x62, 0x43, 0xbf, 0xae, 0x1b, 0xf3, 0x6e, 0x53, 0x4d, 0x34, 0xf9, 0x10, - 0x8e, 0xa7, 0xff, 0xc1, 0x3c, 0x98, 0x91, 0xa2, 0xdc, 0x25, 0x32, 0x62, 0x48, 0xff, 0x86, 0xac, - 0x64, 0xeb, 0x23, 0x55, 0x9f, 0x6d, 0xb3, 0xf7, 0xef, 0x89, 0x3c, 0xbb, 0x37, 0x36, 0x6b, 0x9d, - 0xfe, 0x11, 0x33, 0xba, 0xa9, 0x7d, 0x34, 0xd3, 0x4d, 0x34, 0xfc, 0x65, 0x24, 0x92, 0x48, 0x98, - 0x5c, 0x66, 0x37, 0x12, 0x49, 0x24, 0xa2, 0x89, 0x24, 0xbc, 0x6e, 0x57, 0x9b, 0x03, 0xb3, 0x70, - 0x5f, 0xa4, 0x97, 0x6e, 0xee, 0xf5, 0x4c, 0x99, 0x9b, 0x9b, 0x9b, 0x27, 0xc6, 0x88, 0xa8, 0xd1, - 0x1e, 0xc5, 0xdd, 0xa7, 0x8f, 0x6b, 0x4c, 0x9d, 0x72, 0xf6, 0x3f, 0xf0, 0x46, 0x26, 0xa3, 0xdf, - 0xa3, 0x72, 0xb1, 0x33, 0xf1, 0xe7, 0xda, 0x6b, 0x69, 0xad, 0xa6, 0xbc, 0x65, 0xaa, 0xb6, 0x9a, - 0xda, 0x6b, 0x69, 0xaf, 0xc7, 0x5a, 0x6b, 0x69, 0xad, 0xa6, 0xbe, 0x20, 0x47, 0x49, 0x2d, 0x24, - 0x97, 0x04, 0xa4, 0x25, 0x92, 0xf2, 0x10, 0x48, 0x41, 0xc6, 0x0a, 0x7d, 0x44, 0xa4, 0xae, 0x13, - 0x3e, 0xd3, 0x5b, 0x4d, 0x71, 0x18, 0xf4, 0x2e, 0x95, 0x7e, 0x15, 0xcb, 0x25, 0xcb, 0x27, 0x38, - 0xc1, 0xe5, 0x4d, 0x34, 0xd3, 0xf7, 0xc7, 0x4d, 0x99, 0xf0, 0xd8, 0x6c, 0xcd, 0x91, 0x7d, 0x75, - 0x4e, 0x9f, 0x19, 0x69, 0xad, 0xa6, 0xb6, 0x9a, 0xda, 0x6b, 0xf1, 0x16, 0x9a, 0xda, 0x6b, 0xf5, - 0x22, 0x7d, 0x6a, 0xba, 0xd5, 0x73, 0xc5, 0x00, 0x0b, 0x48, 0xba, 0x9c, 0x7f, 0xe3, 0x7b, 0x4d, - 0x6d, 0x35, 0xb4, 0xd6, 0xd3, 0x5f, 0x3e, 0x9a, 0x6d, 0xb7, 0xe0, 0xa6, 0xd3, 0x5b, 0x4d, 0x6d, - 0x35, 0x99, 0x3e, 0x0b, 0x6d, 0x35, 0xb4, 0xd6, 0x3b, 0x7c, 0x12, 0xf6, 0x9a, 0xda, 0x68, 0xe8, - 0x65, 0x7a, 0x26, 0x5c, 0x23, 0x1f, 0x8a, 0xb8, 0xab, 0x97, 0x24, 0xc9, 0x72, 0x4c, 0xc4, 0x09, - 0x05, 0x5d, 0x22, 0xe9, 0x44, 0x07, 0xd5, 0x69, 0xbb, 0xfc, 0x10, 0xcd, 0x4b, 0xa9, 0x7b, 0xe7, - 0x28, 0xea, 0xbb, 0xbb, 0xff, 0x8a, 0x23, 0x59, 0x28, 0x5e, 0xce, 0x5f, 0xf8, 0x23, 0xa7, 0x4e, - 0x54, 0xf8, 0x6a, 0x6e, 0xfe, 0x6e, 0xfe, 0x8f, 0x7d, 0x55, 0x57, 0xc1, 0x6e, 0xd3, 0x54, 0x96, - 0xdb, 0xbe, 0x1d, 0x14, 0x85, 0x9f, 0x3d, 0x49, 0xd6, 0x54, 0xff, 0xcb, 0x4b, 0xd5, 0x3f, 0x97, - 0x9c, 0x7a, 0x3c, 0xfa, 0x69, 0xa6, 0x9f, 0x9e, 0x8f, 0xfa, 0x69, 0xa6, 0x9f, 0x8a, 0xdd, 0x77, - 0x5b, 0xe1, 0x1e, 0xd3, 0x5b, 0x4d, 0x1b, 0xbf, 0xbb, 0xbf, 0xf8, 0xd1, 0xdb, 0xb8, 0x6a, 0x99, - 0xa2, 0xa6, 0x74, 0x83, 0xe3, 0x5e, 0x56, 0x58, 0xac, 0x51, 0xa8, 0x5a, 0xa4, 0x0b, 0x24, 0xf3, - 0x56, 0x2a, 0x64, 0x31, 0xb6, 0x5a, 0x4f, 0x82, 0xca, 0xd6, 0xf1, 0x05, 0x46, 0x0d, 0xca, 0x19, - 0x6a, 0x15, 0x1f, 0xe7, 0x7c, 0xa3, 0xf2, 0x2f, 0xc3, 0x38, 0x4b, 0x89, 0x3f, 0x98, 0x5b, 0x6c, - 0x1b, 0xb9, 0xda, 0x9a, 0x6d, 0xb4, 0xb9, 0xc6, 0xa4, 0x5e, 0x37, 0x2d, 0x5c, 0xbf, 0xf0, 0x54, - 0x31, 0xa6, 0xb6, 0x9a, 0xda, 0x6b, 0x89, 0xd7, 0x83, 0x0b, 0x07, 0x49, 0x26, 0xb4, 0x88, 0x91, - 0x6c, 0x5b, 0xff, 0xc1, 0x45, 0x03, 0x40, 0xcf, 0x8f, 0xc6, 0x9a, 0xe5, 0x47, 0x5e, 0x0a, 0x2d, - 0x34, 0xd3, 0x4d, 0x34, 0xd3, 0x59, 0x7c, 0x29, 0xa5, 0x26, 0x4b, 0x99, 0xb3, 0x7e, 0x5a, 0x6a, - 0xd6, 0x5f, 0x3c, 0x74, 0xad, 0xb6, 0xdb, 0x7f, 0xe1, 0x81, 0x55, 0x6b, 0xb6, 0x1c, 0x95, 0xe9, - 0xcf, 0x03, 0xb5, 0xd3, 0xe9, 0x6b, 0xf8, 0x7c, 0x43, 0xba, 0xa9, 0x4d, 0x7b, 0x4c, 0xd0, 0x34, - 0x4d, 0xa7, 0x5f, 0x92, 0xcf, 0x7f, 0x85, 0x09, 0x69, 0x90, 0xa9, 0x63, 0x4b, 0x61, 0xef, 0xbf, - 0x52, 0x4c, 0xa9, 0x17, 0x8d, 0xb3, 0x2d, 0x09, 0x44, 0x58, 0x91, 0x08, 0x50, 0x72, 0xba, 0xcc, - 0xb0, 0xdc, 0x71, 0x92, 0x9e, 0x07, 0x24, 0xa5, 0xfe, 0x4e, 0x20, 0x32, 0xd3, 0x5b, 0x4d, 0x67, - 0xc4, 0x78, 0x8e, 0x22, 0x22, 0xd3, 0x5b, 0x4d, 0x7e, 0x63, 0x4a, 0x48, 0x5d, 0xd8, 0xb8, 0x46, - 0xa8, 0x1b, 0x52, 0x53, 0x2e, 0x29, 0x29, 0xfc, 0x15, 0xeb, 0x2d, 0x2a, 0x5b, 0xf5, 0x5f, 0x2b, - 0x88, 0x12, 0x92, 0x5e, 0x92, 0x44, 0xe3, 0x89, 0x4e, 0x9d, 0xb9, 0x59, 0x6d, 0x33, 0x76, 0x31, - 0xe1, 0x8d, 0x89, 0xa3, 0xaa, 0xb1, 0x34, 0x5b, 0x47, 0x4f, 0xa6, 0x9a, 0x69, 0xf8, 0x4a, 0x75, - 0x43, 0xe9, 0xac, 0x4f, 0x5d, 0xb4, 0xab, 0xf8, 0x57, 0x1e, 0x3b, 0x76, 0xfa, 0x3a, 0xb1, 0xbb, - 0x1b, 0xaa, 0xaa, 0xf8, 0x22, 0x24, 0xde, 0x6f, 0xe7, 0xc1, 0x00, 0xaa, 0xba, 0x6a, 0xaa, 0xa6, - 0x92, 0x98, 0xce, 0xea, 0xa9, 0xb8, 0x3f, 0xff, 0xe5, 0x16, 0xf6, 0x8e, 0x2b, 0x4c, 0xda, 0xe1, - 0x12, 0xe9, 0x25, 0xa4, 0x96, 0x92, 0x5e, 0x1d, 0x93, 0x39, 0x68, 0x2e, 0x4c, 0xab, 0xc9, 0x4a, - 0x90, 0xc9, 0x0c, 0xa7, 0x1f, 0xf8, 0x2e, 0xb4, 0xd6, 0xd3, 0x5a, 0x41, 0xe2, 0x04, 0x74, 0x92, - 0xd2, 0x4b, 0x88, 0x11, 0xd2, 0x4b, 0x49, 0x2f, 0x17, 0x69, 0xad, 0xa6, 0xbf, 0x1b, 0xda, 0x6b, - 0x69, 0xad, 0xa6, 0xb6, 0x9a, 0x1d, 0x2a, 0x69, 0xa6, 0x9f, 0xf8, 0x28, 0xb4, 0xd6, 0xd3, 0x59, - 0x13, 0xe1, 0xa0, 0x80, 0xb9, 0xb0, 0x44, 0x40, 0x50, 0x5c, 0xcd, 0x88, 0xfc, 0xda, 0x8f, 0xf5, - 0x7f, 0x8d, 0xd5, 0xa9, 0x85, 0xce, 0x68, 0xbd, 0xb0, 0x56, 0x5b, 0x88, 0xb2, 0x69, 0x33, 0x9b, - 0xd9, 0x89, 0xb7, 0xef, 0x76, 0x7e, 0x34, 0x9a, 0xcd, 0xf7, 0xa2, 0xcc, 0x5c, 0x92, 0x19, 0xc3, - 0x4f, 0xc2, 0xd3, 0x37, 0x6b, 0x92, 0x3f, 0xda, 0x8b, 0x65, 0xa4, 0x2c, 0xf7, 0xf8, 0x50, 0xea, - 0xb2, 0xab, 0x5b, 0x62, 0x5e, 0xa9, 0x31, 0xad, 0x69, 0x43, 0xd0, 0xd3, 0xb4, 0xdc, 0x38, 0x6a, - 0x86, 0x3e, 0xe8, 0xab, 0xc7, 0x31, 0xfe, 0x0a, 0x04, 0x2a, 0x64, 0x31, 0x76, 0x12, 0x68, 0x1b, - 0x08, 0x60, 0x92, 0xaf, 0x1a, 0x62, 0xec, 0x77, 0xd4, 0xeb, 0xf7, 0xa6, 0xda, 0xbe, 0x6c, 0xba, - 0xe3, 0x2c, 0x87, 0x3b, 0x69, 0x2b, 0x0d, 0xb6, 0xff, 0xc1, 0x4d, 0xf6, 0xea, 0x4b, 0xa2, 0xf3, - 0x9d, 0x08, 0xb4, 0x4c, 0xfb, 0x56, 0xac, 0x93, 0x3e, 0x08, 0x23, 0x3f, 0x8b, 0x1b, 0xfe, 0xa4, - 0xe7, 0xd3, 0x46, 0xbf, 0xf0, 0xeb, 0xd7, 0xf8, 0xe7, 0x78, 0x99, 0x59, 0x5d, 0xaa, 0x16, 0x6b, - 0xa7, 0xd5, 0x2b, 0x1f, 0xfc, 0x28, 0x19, 0xda, 0x6b, 0x69, 0xa1, 0x46, 0x28, 0xc4, 0xb8, 0x7b, - 0x9b, 0x4d, 0x25, 0x1f, 0x04, 0xb6, 0x9a, 0xda, 0x6b, 0xaa, 0xe8, 0x8f, 0x27, 0x18, 0x53, 0xff, - 0x6c, 0xfe, 0xb6, 0xcd, 0xdb, 0xfc, 0x4f, 0xae, 0x8c, 0xff, 0x0a, 0x72, 0xe1, 0x73, 0x2e, 0x17, - 0x0e, 0x41, 0x79, 0x07, 0x79, 0x05, 0xe4, 0x1c, 0x46, 0x45, 0x5c, 0x48, 0x28, 0xe7, 0x20, 0x9c, - 0x83, 0x9c, 0x82, 0x72, 0x0b, 0xfc, 0x54, 0xb9, 0xe4, 0xcf, 0xc1, 0x7f, 0x36, 0x1b, 0x1a, 0x9b, - 0x1a, 0xea, 0x69, 0xa6, 0x9f, 0xf9, 0x67, 0xc3, 0xe1, 0xb1, 0xd9, 0xe0, 0x83, 0x92, 0x99, 0x72, - 0x5a, 0x79, 0x71, 0x1d, 0xfb, 0x6d, 0xb6, 0xdf, 0xa2, 0x9e, 0x55, 0xeb, 0x94, 0xbc, 0xd2, 0xf2, - 0x72, 0xf6, 0x7f, 0x17, 0xd2, 0x4b, 0x49, 0x2f, 0x64, 0x1c, 0xcb, 0xa9, 0x3f, 0x05, 0x76, 0x95, - 0xa3, 0x61, 0xf1, 0xf8, 0x7c, 0x7e, 0x1f, 0x55, 0x7d, 0x6e, 0xcd, 0x7c, 0xf2, 0x08, 0xaf, 0xea, - 0xb5, 0xf0, 0xd6, 0x75, 0x9a, 0xc4, 0xf1, 0x60, 0x2f, 0x1c, 0x5f, 0xfc, 0x2c, 0x21, 0x62, 0x45, - 0x7a, 0x45, 0x96, 0x9a, 0x12, 0x73, 0xe6, 0xf5, 0xf8, 0x81, 0xed, 0x35, 0xb4, 0xd6, 0xf8, 0x42, - 0xd3, 0x5b, 0x4d, 0x6d, 0x35, 0xf1, 0x27, 0x20, 0xfa, 0x9a, 0x69, 0xa7, 0xfe, 0x58, 0xac, 0x56, - 0x2b, 0x15, 0xf1, 0x02, 0xcb, 0xa4, 0x96, 0x92, 0x5e, 0x33, 0xb4, 0xd5, 0xb6, 0x97, 0x69, 0xad, - 0xa6, 0xb8, 0x80, 0x97, 0x49, 0x2d, 0x24, 0xbc, 0x23, 0x1f, 0x8d, 0xfb, 0x4d, 0x6d, 0x35, 0xf8, - 0x21, 0x09, 0x1f, 0x63, 0xce, 0x9f, 0x1b, 0x1e, 0xf4, 0x74, 0x04, 0x31, 0x2b, 0x77, 0x1b, 0xcf, - 0x0b, 0xbb, 0xc4, 0x08, 0x49, 0xb6, 0x89, 0x5b, 0xdf, 0x91, 0x9c, 0xb7, 0x59, 0x14, 0x3a, 0xad, - 0xa6, 0x83, 0x32, 0x7e, 0x09, 0xc8, 0xa8, 0xfe, 0x59, 0xf7, 0xc3, 0xf6, 0x94, 0x9e, 0x55, 0x5c, - 0x92, 0x98, 0xbc, 0x72, 0xf6, 0xd2, 0xfa, 0x76, 0xe6, 0xff, 0x28, 0x5f, 0x49, 0x25, 0xc2, 0x76, - 0x9a, 0xda, 0x6b, 0xe2, 0x02, 0x7d, 0x24, 0xb4, 0x92, 0xf3, 0x19, 0xa2, 0x41, 0x14, 0x1f, 0x87, - 0x82, 0x4d, 0x34, 0x58, 0xf0, 0x8a, 0xd9, 0x0a, 0x8c, 0x4e, 0x5a, 0x99, 0xa7, 0x1a, 0x5f, 0xcd, - 0xcd, 0xff, 0x11, 0x75, 0x1f, 0x09, 0x8d, 0x98, 0xea, 0x4f, 0xe1, 0x51, 0xb4, 0x28, 0xdc, 0x75, - 0x36, 0x48, 0xb9, 0x54, 0x2e, 0x29, 0xfa, 0x69, 0xa6, 0x9f, 0x98, 0x60, 0x4c, 0xfb, 0xb5, 0x5c, - 0x02, 0x27, 0xef, 0x82, 0x5b, 0x0a, 0xa2, 0xd6, 0x40, 0x77, 0xee, 0xe7, 0xaa, 0xe1, 0xe0, 0xbb, - 0x55, 0x6d, 0x35, 0xb4, 0xd6, 0x8f, 0x3e, 0xdb, 0x6d, 0xb7, 0xe3, 0x7b, 0x4d, 0x5b, 0x69, 0x76, - 0x9a, 0xda, 0x69, 0xbf, 0x76, 0xcf, 0xf8, 0x8f, 0x82, 0x7b, 0x4d, 0x74, 0xe9, 0xc5, 0xf3, 0xe2, - 0xa6, 0x9b, 0x6d, 0xff, 0x9e, 0xa9, 0xa6, 0x73, 0x2f, 0x33, 0xfe, 0x18, 0xa4, 0x96, 0x92, 0x49, - 0x25, 0xea, 0x69, 0xd6, 0xdf, 0xf8, 0x30, 0xb4, 0x7c, 0xf3, 0xe1, 0xf2, 0x2a, 0x69, 0xb6, 0xdb, - 0x6d, 0x9c, 0xcb, 0xcc, 0xae, 0x73, 0x52, 0x2f, 0x36, 0x9b, 0x75, 0xc1, 0x27, 0x55, 0x7f, 0x9e, - 0x44, 0x93, 0x49, 0xbf, 0xfb, 0xbb, 0xaa, 0xf9, 0x0b, 0x8d, 0x79, 0x57, 0xbc, 0xf1, 0xda, 0x9a, - 0x69, 0xa7, 0xfe, 0xa3, 0xb7, 0xc4, 0xcf, 0xfb, 0xa0, 0x71, 0x79, 0x79, 0x36, 0xa3, 0xd4, 0xf5, - 0x8b, 0xe1, 0x9c, 0x98, 0x5c, 0x6e, 0x45, 0xc7, 0xae, 0xc7, 0xfe, 0x08, 0xae, 0xcc, 0xd9, 0x6f, - 0x82, 0x28, 0x87, 0x9f, 0x0d, 0x8e, 0xc2, 0x21, 0x67, 0xd4, 0xaa, 0xf8, 0x60, 0x52, 0x21, 0x94, - 0x3f, 0x76, 0x93, 0x97, 0xd6, 0xa6, 0xfe, 0x15, 0x17, 0xc9, 0x99, 0x31, 0x21, 0xda, 0x9a, 0x69, - 0xa7, 0xfe, 0x2e, 0x4c, 0x26, 0x64, 0xc2, 0x66, 0xa2, 0x04, 0x2a, 0x38, 0x32, 0xf5, 0xab, 0xe0, - 0x9c, 0x20, 0xa2, 0xfa, 0x8b, 0x5b, 0x45, 0x43, 0x86, 0xd4, 0x31, 0xbc, 0xb9, 0x8f, 0x12, 0x36, - 0x51, 0x63, 0x08, 0x77, 0xf8, 0x07, 0xd2, 0x7e, 0x4a, 0x7f, 0xaa, 0x85, 0x2f, 0x37, 0xe3, 0x17, - 0xaa, 0x4e, 0xe9, 0xc6, 0x29, 0xb2, 0x02, 0xb7, 0x7d, 0x5b, 0x46, 0xbe, 0x14, 0xe2, 0xe3, 0xb9, - 0x3a, 0x88, 0xba, 0xcd, 0x61, 0x92, 0xaa, 0xad, 0x8d, 0x8a, 0x37, 0x73, 0xb8, 0xe6, 0x9f, 0xe6, - 0x33, 0xe0, 0xb0, 0x4a, 0xae, 0x6c, 0xb9, 0x2d, 0x57, 0x7f, 0x82, 0xd1, 0x6d, 0x35, 0xb4, 0xd7, - 0x15, 0x70, 0x95, 0xa6, 0xb6, 0x9a, 0xfc, 0x68, 0x41, 0x55, 0x55, 0x90, 0x42, 0xc4, 0xec, 0x2c, - 0xbb, 0x6d, 0xb5, 0x44, 0xb2, 0xc5, 0x0e, 0x34, 0xf7, 0x51, 0x93, 0x9e, 0x6a, 0x35, 0xff, 0x1c, - 0x67, 0x68, 0x75, 0x59, 0x43, 0x5f, 0x39, 0xd3, 0xda, 0x96, 0xd5, 0x34, 0xd0, 0x7e, 0x14, 0x1e, - 0x9b, 0x26, 0xea, 0xe6, 0x51, 0x31, 0x59, 0xbb, 0xfd, 0xae, 0xa2, 0xd9, 0x57, 0x84, 0x4c, 0x7d, - 0x26, 0xcf, 0xa6, 0xce, 0x7d, 0xa3, 0x36, 0xd7, 0xe1, 0x91, 0x03, 0x75, 0xc1, 0x6d, 0x2f, 0x8e, - 0x76, 0xa3, 0xbf, 0x41, 0x72, 0x27, 0xc1, 0x44, 0xd8, 0x6c, 0x3e, 0x3f, 0x1a, 0x6b, 0xbf, 0xd4, - 0x88, 0xcb, 0xc2, 0xa7, 0x07, 0x5d, 0x07, 0x5d, 0x31, 0xd7, 0x41, 0xd7, 0x4c, 0x88, 0x7c, 0x9a, - 0x4d, 0xce, 0x69, 0xe6, 0x8e, 0x69, 0xe6, 0x97, 0x0d, 0x11, 0xa1, 0xd5, 0xc6, 0xff, 0x6c, 0xfa, - 0xdd, 0x7e, 0x88, 0x8e, 0x9f, 0x56, 0x9b, 0x96, 0x4a, 0x59, 0xca, 0x1c, 0x24, 0x07, 0x13, 0xf9, - 0x6d, 0xb6, 0xf6, 0xdb, 0xff, 0x18, 0xa4, 0x86, 0x48, 0x66, 0xe9, 0xa7, 0x9b, 0x9e, 0x3e, 0xaa, - 0xaa, 0xfa, 0xe7, 0x28, 0x10, 0x3a, 0x5b, 0x0a, 0xb0, 0x81, 0x98, 0x43, 0x58, 0xff, 0x05, 0x82, - 0x16, 0xab, 0xa3, 0x13, 0xe5, 0xac, 0xe8, 0xfe, 0xf8, 0x20, 0xe1, 0xe5, 0x39, 0x65, 0x1b, 0x4c, - 0xd5, 0xd9, 0x46, 0x51, 0x78, 0xc5, 0x55, 0x49, 0x9f, 0xe0, 0xba, 0xab, 0x2b, 0x93, 0x0b, 0x82, - 0xf9, 0x17, 0x87, 0x88, 0x9a, 0x12, 0x66, 0x9a, 0x76, 0x55, 0x33, 0xec, 0xbc, 0x76, 0xf9, 0xb9, - 0x7b, 0x69, 0xf8, 0xde, 0xcd, 0x4d, 0x8d, 0x1f, 0xca, 0x9a, 0x69, 0xa6, 0xab, 0x26, 0x7c, 0x76, - 0xd3, 0x4c, 0xdf, 0xfc, 0x14, 0x56, 0x6a, 0x0b, 0xac, 0x94, 0x47, 0xff, 0x8b, 0x39, 0x2c, 0x97, - 0xc9, 0x64, 0xbf, 0xc5, 0xc9, 0x64, 0xbc, 0x96, 0x4b, 0xfc, 0x5c, 0x96, 0x4b, 0xc9, 0x64, 0xbf, - 0xc3, 0x12, 0x59, 0x2f, 0x25, 0x92, 0xf0, 0x12, 0x02, 0xd3, 0x4d, 0x34, 0xff, 0xde, 0xe4, 0xc9, - 0x5d, 0x7b, 0xe0, 0x8a, 0x42, 0x09, 0x08, 0x3d, 0x32, 0xf0, 0xc7, 0x31, 0x23, 0x12, 0xcc, 0x48, - 0xc4, 0xbb, 0xe6, 0x34, 0x63, 0x49, 0xc7, 0xe7, 0x80, 0x08, 0xed, 0x34, 0xd3, 0x4d, 0xb6, 0xdb, - 0x6f, 0xc1, 0x58, 0x41, 0x7d, 0x55, 0xbd, 0x88, 0x53, 0x98, 0xaf, 0xa0, 0x33, 0xd7, 0x2f, 0x85, - 0x26, 0x4f, 0xa1, 0x8f, 0xac, 0x57, 0x1b, 0xc4, 0x0d, 0xf0, 0x73, 0x12, 0xf6, 0xa8, 0xdb, 0xe1, - 0x0b, 0x10, 0x0e, 0x42, 0xb5, 0x4f, 0x37, 0x93, 0x16, 0xd3, 0x28, 0xfc, 0xe1, 0x57, 0xfa, 0x69, - 0xa6, 0x9f, 0x86, 0x72, 0x61, 0x31, 0x98, 0xbe, 0x9a, 0x64, 0x32, 0xc3, 0x3e, 0x09, 0x0c, 0x6e, - 0x8b, 0xe3, 0x15, 0xe1, 0xd0, 0x82, 0xb2, 0xe7, 0xee, 0xb6, 0xa9, 0x60, 0xc7, 0xa8, 0x8f, 0xad, - 0x1b, 0xba, 0xd7, 0xc1, 0x58, 0x97, 0x2a, 0xd7, 0x67, 0x47, 0x0a, 0x68, 0xc4, 0xfb, 0x62, 0x7d, - 0xde, 0xbe, 0x3f, 0x55, 0xe3, 0x92, 0xfa, 0x8b, 0x43, 0x9f, 0x68, 0x60, 0x7c, 0x14, 0x8a, 0xac, - 0x94, 0xa9, 0xde, 0x7d, 0xfb, 0x61, 0x99, 0x25, 0x5a, 0xf8, 0x26, 0x0a, 0xb0, 0x35, 0x7e, 0xd4, - 0x4d, 0xf2, 0xd5, 0xc4, 0x1d, 0xaa, 0xb6, 0x9a, 0xcb, 0xc1, 0x05, 0xa6, 0xb6, 0x9a, 0xda, 0x6b, - 0x7f, 0xb6, 0xda, 0x69, 0xbe, 0x2e, 0xd3, 0x5b, 0x4d, 0x7e, 0x22, 0xd3, 0x5b, 0x4d, 0x6f, 0x10, - 0x27, 0xa4, 0x96, 0x92, 0x5e, 0x3a, 0xd1, 0xf6, 0xdb, 0x4d, 0x6d, 0x35, 0xf8, 0xac, 0x29, 0x51, - 0x85, 0xf0, 0xa5, 0x46, 0x17, 0xf1, 0x5c, 0xb9, 0xcb, 0x97, 0xc6, 0x88, 0x49, 0x24, 0x84, 0x38, - 0xef, 0x6e, 0xb2, 0xee, 0xaa, 0xee, 0x3a, 0x5f, 0x6d, 0xb6, 0xdb, 0xf0, 0xc5, 0x57, 0x7a, 0xaa, - 0xa6, 0x9a, 0x69, 0xb6, 0xdb, 0x6d, 0xf8, 0x20, 0xbe, 0xef, 0x5d, 0xd5, 0x72, 0x74, 0xee, 0xef, - 0xfe, 0x1e, 0x2a, 0x45, 0x20, 0xa5, 0xa4, 0x95, 0x2b, 0x56, 0x92, 0x3f, 0x55, 0x4f, 0xe1, 0x8b, - 0x46, 0xc6, 0xf6, 0x8f, 0x8d, 0x63, 0xd5, 0x54, 0xdb, 0xff, 0x82, 0x09, 0x49, 0x14, 0x94, 0xa4, - 0x8f, 0xdb, 0x2e, 0xbb, 0x8b, 0xf3, 0x07, 0x6c, 0x55, 0x4d, 0xdd, 0xff, 0xc1, 0x38, 0x8c, 0xe4, - 0x4e, 0x45, 0xaa, 0x9a, 0x69, 0x2a, 0xf0, 0x85, 0xa6, 0xbb, 0x06, 0xc1, 0xb4, 0xd0, 0xff, 0xbf, - 0xe2, 0x0a, 0x53, 0x55, 0xcf, 0x51, 0xfa, 0xef, 0xf8, 0x27, 0xd3, 0x74, 0xda, 0x68, 0x4f, 0x2a, - 0x4c, 0xbc, 0x12, 0xcf, 0x87, 0xc9, 0xea, 0xa9, 0xa6, 0x93, 0x0f, 0x87, 0xbb, 0x4d, 0x5d, 0x5d, - 0xa6, 0xb6, 0xfb, 0xa6, 0x9a, 0x7e, 0x52, 0x97, 0x93, 0xb4, 0xf5, 0x1e, 0x1a, 0x23, 0x4a, 0xb3, - 0x88, 0x25, 0x6e, 0x9d, 0x33, 0x72, 0x63, 0x75, 0x78, 0xd2, 0x5a, 0xa6, 0xd3, 0x4d, 0x1b, 0x0d, - 0xb1, 0xb4, 0xad, 0x3b, 0x07, 0x16, 0x30, 0x09, 0x92, 0x19, 0x3e, 0xd3, 0x61, 0xbf, 0xf0, 0xb9, - 0x6f, 0x57, 0x7b, 0xaa, 0x69, 0xc6, 0x9b, 0x6d, 0xb6, 0xdf, 0x82, 0x9e, 0xee, 0xaa, 0xab, 0x8f, - 0x79, 0x77, 0x84, 0xcb, 0x3e, 0xa3, 0xb1, 0xd3, 0xe1, 0x8a, 0xaa, 0xae, 0xaa, 0x74, 0x93, 0x49, - 0xbf, 0xf1, 0x1f, 0x0c, 0x94, 0xf8, 0x7c, 0x36, 0x3b, 0x07, 0x95, 0x34, 0xd3, 0x4f, 0xd7, 0x34, - 0xd8, 0x6c, 0x36, 0x3b, 0x17, 0x1e, 0x64, 0x79, 0x69, 0x2f, 0xa0, 0xf9, 0x69, 0xe1, 0x41, 0x54, - 0x3a, 0xa4, 0x48, 0x38, 0x31, 0x37, 0x48, 0x89, 0x4c, 0xdf, 0x43, 0x67, 0x8f, 0x56, 0xa4, 0x74, - 0x7b, 0xe0, 0xac, 0x95, 0x66, 0x74, 0x7d, 0x8d, 0xe8, 0xa3, 0x15, 0x6c, 0xcd, 0x33, 0x5c, 0x58, - 0x5d, 0xa6, 0xb6, 0x9a, 0xfc, 0x30, 0x10, 0xa5, 0x68, 0x70, 0x67, 0xe3, 0x9b, 0xb0, 0x66, 0xe4, - 0xdb, 0x5f, 0xf0, 0xa1, 0x81, 0x13, 0xdd, 0xb9, 0x78, 0xcd, 0xc2, 0xca, 0x58, 0xee, 0x44, 0x4c, - 0x6b, 0xdb, 0xe0, 0x90, 0xa3, 0xd3, 0x2b, 0xde, 0xb5, 0x3f, 0x09, 0x7c, 0x3a, 0x63, 0xe3, 0xb0, - 0x83, 0xf7, 0xab, 0x87, 0x1c, 0x6f, 0xa6, 0xb8, 0xfe, 0xff, 0x92, 0x83, 0x1d, 0xfb, 0x0b, 0xb4, - 0x82, 0xd2, 0x0b, 0xb3, 0x37, 0x0a, 0x89, 0x07, 0x5d, 0x01, 0xd7, 0x4c, 0x1d, 0x74, 0x07, 0x5d, - 0x32, 0x24, 0x9a, 0x4d, 0xff, 0xc1, 0x20, 0xa6, 0x8f, 0xb1, 0xe5, 0xaf, 0x94, 0x45, 0x35, 0xd3, - 0x5f, 0x85, 0x6a, 0x8d, 0xba, 0x55, 0x4a, 0x14, 0x9f, 0x3f, 0xff, 0x04, 0xdb, 0x43, 0x8a, 0xed, - 0x6f, 0x8f, 0x4c, 0xfc, 0x20, 0x2e, 0x4c, 0xe4, 0xcc, 0x84, 0xb3, 0xe7, 0x84, 0xe6, 0xc3, 0x66, - 0x6c, 0x36, 0x6f, 0x8a, 0x9b, 0x0d, 0x99, 0x49, 0x14, 0x96, 0xf9, 0x0a, 0xd3, 0x5b, 0xe1, 0xc9, - 0xb0, 0xd8, 0x7c, 0x7e, 0x0e, 0x4a, 0xdb, 0x6d, 0xb7, 0xfe, 0x08, 0x04, 0x3b, 0xaa, 0xb4, 0xd5, - 0x4d, 0x23, 0x46, 0xe6, 0xeb, 0xe9, 0xa6, 0x9a, 0x7e, 0x0a, 0x6a, 0x5a, 0x35, 0x7e, 0x5a, 0x26, - 0xb6, 0xa9, 0xdf, 0x82, 0x5c, 0x72, 0xcb, 0xda, 0xfa, 0xa8, 0x3a, 0x36, 0x3f, 0xfc, 0x32, 0x56, - 0x8f, 0x88, 0x1b, 0xed, 0xbe, 0x6e, 0xdf, 0xe2, 0x79, 0xc8, 0x27, 0x20, 0xe9, 0x13, 0x3c, 0x9a, - 0x64, 0xc6, 0x67, 0xab, 0x57, 0x08, 0xd3, 0x4c, 0x84, 0x2c, 0x21, 0x2e, 0x17, 0x09, 0x8c, 0xc6, - 0xe3, 0x71, 0x98, 0xcc, 0xf0, 0x4b, 0x6c, 0xdf, 0xa4, 0x96, 0x99, 0xf9, 0x29, 0xa4, 0x4d, 0xfc, - 0x17, 0x10, 0x9d, 0xbd, 0x6d, 0xd5, 0xd5, 0x95, 0xc3, 0xa5, 0x17, 0xee, 0xd7, 0x69, 0xb5, 0xda, - 0x6e, 0x7e, 0x6e, 0xfe, 0xab, 0x6e, 0xbf, 0xe1, 0xd3, 0x1b, 0x0f, 0x8e, 0xc7, 0xe3, 0x4d, 0x54, - 0xd2, 0x77, 0x54, 0xf2, 0xf9, 0xff, 0xe0, 0x8c, 0xa2, 0xfc, 0x02, 0x5f, 0x11, 0x3d, 0x0f, 0x4c, - 0xf4, 0x3d, 0x3f, 0x08, 0x16, 0xa6, 0xb6, 0x9a, 0xda, 0x6b, 0xe2, 0x02, 0x7b, 0x69, 0x25, 0xa4, - 0x97, 0xa9, 0x53, 0xe3, 0x2d, 0x35, 0xb4, 0xd6, 0xd3, 0x5b, 0x4d, 0x7e, 0x33, 0xb4, 0xd5, 0xb6, - 0x97, 0x69, 0xad, 0xa6, 0xbc, 0x12, 0x5a, 0x6b, 0x8b, 0xe0, 0x80, 0x55, 0xab, 0xe8, 0x67, 0x6a, - 0x09, 0x3c, 0xd0, 0x18, 0xa6, 0x5a, 0x96, 0x9e, 0xe7, 0xfe, 0x34, 0x40, 0xce, 0x9f, 0xa1, 0xb3, - 0x87, 0x97, 0x22, 0xf6, 0x1b, 0x37, 0xd3, 0xc3, 0x4a, 0x83, 0x95, 0x61, 0x53, 0x85, 0x18, 0xe9, - 0xff, 0xe0, 0xb3, 0x6c, 0xdb, 0x59, 0x22, 0xad, 0x61, 0xb8, 0xd8, 0x39, 0x1e, 0xf5, 0xdb, 0x4a, - 0x1e, 0x36, 0x04, 0x1d, 0x43, 0xde, 0x7b, 0xdc, 0x18, 0x55, 0xbf, 0xab, 0x4f, 0x44, 0x7d, 0x5f, - 0x9d, 0x18, 0xf1, 0xaa, 0xc3, 0x84, 0xab, 0x4d, 0x36, 0xdf, 0xf8, 0x53, 0x9f, 0x8d, 0x69, 0xb0, - 0x82, 0x22, 0x41, 0xa3, 0x7c, 0x56, 0x8e, 0x28, 0x0e, 0xf5, 0xf0, 0x40, 0x44, 0x47, 0x9b, 0x1f, - 0x25, 0x1a, 0xad, 0x65, 0x7b, 0x64, 0x79, 0x3c, 0xbd, 0xff, 0xff, 0x05, 0x67, 0x7d, 0xe5, 0xe9, - 0x93, 0x19, 0xab, 0x56, 0x21, 0xbc, 0x72, 0x30, 0x2c, 0xf0, 0xf8, 0x64, 0x41, 0xf5, 0x84, 0xe5, - 0x1c, 0x61, 0xf2, 0x50, 0x94, 0xfc, 0x60, 0x64, 0xa4, 0x8a, 0x49, 0x03, 0x80, 0xd2, 0x4b, 0xd2, - 0x4b, 0x49, 0x27, 0xc2, 0x16, 0x9a, 0xda, 0x6b, 0x69, 0xaf, 0xc6, 0x76, 0x9a, 0xda, 0x6b, 0x69, - 0xad, 0xa6, 0xbc, 0xe4, 0x1d, 0xa9, 0xa6, 0x9a, 0x7f, 0xe1, 0x53, 0x34, 0xd3, 0x4d, 0x34, 0xd3, - 0x4d, 0x57, 0x52, 0x7f, 0xf0, 0x57, 0xda, 0x69, 0x24, 0xb4, 0x8b, 0x8f, 0xff, 0xe1, 0x6a, 0xae, - 0xd1, 0xb2, 0xb1, 0x54, 0x14, 0xd4, 0x1b, 0xd7, 0xeb, 0x82, 0x13, 0x93, 0x93, 0x93, 0xc6, 0xef, - 0xad, 0x7c, 0x36, 0x44, 0xd3, 0x4d, 0x32, 0x90, 0x1b, 0x97, 0xa6, 0xdb, 0x6d, 0xb7, 0xe1, 0x62, - 0xcf, 0x86, 0xc7, 0x63, 0x55, 0x34, 0xd4, 0xa9, 0xa6, 0x9a, 0x7f, 0xe1, 0x02, 0xb4, 0xd6, 0xd3, - 0x5b, 0x4d, 0x7e, 0x23, 0xa4, 0x96, 0x92, 0x5e, 0x10, 0xb4, 0xd6, 0xd3, 0x5b, 0x4d, 0x6b, 0x88, - 0xb4, 0xd6, 0xd3, 0x5a, 0xc4, 0x57, 0x0b, 0x10, 0x5f, 0x9f, 0x0f, 0x8e, 0xc7, 0x60, 0xec, 0x76, - 0xaa, 0xaa, 0x9a, 0x69, 0xa7, 0xe1, 0xa9, 0xfb, 0xb9, 0xfb, 0xba, 0x3b, 0xf5, 0x55, 0x5f, 0x05, - 0x32, 0xff, 0x26, 0x13, 0x26, 0x24, 0x4a, 0x12, 0x9a, 0x03, 0x8f, 0x9c, 0xe8, 0xe3, 0xf3, 0xf2, - 0xf3, 0x63, 0x3f, 0x82, 0xaa, 0x4b, 0x6e, 0x9d, 0x3a, 0x74, 0xdf, 0xe0, 0xae, 0x9e, 0x9d, 0x3a, - 0x74, 0xea, 0xd3, 0xfc, 0xe4, 0x1e, 0x72, 0x9a, 0x69, 0xa7, 0xfe, 0x2f, 0x9f, 0x0f, 0x99, 0xf0, - 0xf9, 0xe8, 0xa8, 0xf2, 0xf8, 0x70, 0xcd, 0x19, 0x89, 0x98, 0x47, 0x7e, 0xe3, 0xea, 0xf7, 0xea, - 0x31, 0xaf, 0x86, 0x66, 0x5f, 0x43, 0x40, 0xec, 0xaa, 0xd7, 0xfd, 0x14, 0xe9, 0x5c, 0x31, 0xd2, - 0x4b, 0x49, 0x2a, 0xa6, 0x9b, 0x6d, 0xff, 0xa9, 0xd3, 0xe6, 0xe9, 0x25, 0xe1, 0x5b, 0x4d, 0x6d, - 0x35, 0xa8, 0xb6, 0x2d, 0xff, 0xe3, 0x6d, 0x35, 0xb4, 0xd6, 0xd3, 0x5b, 0x4d, 0x6a, 0x2d, 0x8b, - 0x6b, 0xff, 0x04, 0xe6, 0x3e, 0x65, 0x38, 0xcd, 0x3e, 0x34, 0x46, 0x19, 0x43, 0x17, 0xc2, 0x82, - 0x86, 0xcc, 0x40, 0xe8, 0x6c, 0x66, 0x6d, 0x74, 0xac, 0xde, 0x95, 0x22, 0xe1, 0x35, 0xb8, 0x73, - 0xbe, 0x36, 0xda, 0xb7, 0x73, 0x0d, 0x64, 0xec, 0x79, 0x62, 0x33, 0x7a, 0x37, 0x32, 0x25, 0xdd, - 0xa3, 0xb8, 0xb6, 0xdb, 0x6d, 0xff, 0x85, 0x34, 0x9f, 0xad, 0x8e, 0x25, 0xda, 0x24, 0x7f, 0x0e, - 0xf9, 0x83, 0xc6, 0xd5, 0xdc, 0x4f, 0x1d, 0xcb, 0xe9, 0x49, 0x97, 0x85, 0x31, 0x66, 0x67, 0xa8, - 0xe6, 0x50, 0x3e, 0x4c, 0x4b, 0x26, 0x75, 0xf1, 0xc5, 0x4d, 0xb1, 0xab, 0x99, 0x52, 0x6d, 0x37, - 0xc9, 0xfe, 0x0b, 0x23, 0xfe, 0xa1, 0x3d, 0xaf, 0x5e, 0xe8, 0x99, 0x67, 0x96, 0x3e, 0x75, 0xe1, - 0x41, 0x95, 0x12, 0x75, 0x2f, 0x56, 0x9d, 0x80, 0xe9, 0xdc, 0x92, 0xa6, 0x8c, 0x84, 0x45, 0x46, - 0x8e, 0xff, 0x28, 0x56, 0xd1, 0xb2, 0xa5, 0xc4, 0x17, 0x69, 0xad, 0xa6, 0xbc, 0x65, 0xa6, 0xb6, - 0x9a, 0xda, 0x6b, 0x69, 0xaf, 0xc5, 0xda, 0x6b, 0x69, 0xaf, 0xc6, 0xda, 0x6b, 0x69, 0xad, 0xa6, - 0xb6, 0x9a, 0xc8, 0x91, 0x89, 0x6a, 0x25, 0xff, 0xf8, 0x20, 0x11, 0x6e, 0x6e, 0xd9, 0xf5, 0xba, - 0xde, 0xb6, 0xdb, 0x3d, 0x95, 0x55, 0xff, 0x39, 0xd4, 0x0f, 0x52, 0xc7, 0xff, 0xc1, 0x1e, 0x75, - 0xe7, 0x5f, 0x2f, 0x85, 0xe8, 0x53, 0xfe, 0x4f, 0x2a, 0x50, 0x4a, 0x9a, 0x6a, 0xaa, 0xa4, 0xe1, - 0xbb, 0xe9, 0x0e, 0xdf, 0x77, 0x77, 0x5d, 0x7b, 0xeb, 0x1e, 0xf8, 0x48, 0xb8, 0xaf, 0x17, 0xf8, - 0x9c, 0x42, 0xcd, 0xc4, 0x5a, 0x6b, 0x69, 0xaf, 0xc1, 0x45, 0x24, 0xb4, 0x92, 0xd1, 0xc0, 0x1a, - 0x0d, 0xa1, 0x3f, 0xfc, 0x6a, 0x5a, 0xa9, 0x7f, 0x3a, 0x47, 0xe5, 0xaf, 0x97, 0xff, 0xe2, 0xcc, - 0x92, 0x5a, 0x49, 0x78, 0x98, 0xa2, 0x69, 0x25, 0xa4, 0x97, 0x96, 0x4c, 0x26, 0x37, 0x1b, 0x9e, - 0x5e, 0x92, 0x5e, 0x1a, 0xb4, 0xd6, 0xff, 0x27, 0x65, 0x43, 0xf0, 0x44, 0x45, 0x4f, 0x6f, 0xab, - 0x7c, 0x35, 0x27, 0x2f, 0x27, 0x6f, 0x14, 0x03, 0xd4, 0xd3, 0x4d, 0x35, 0x55, 0x5f, 0x0c, 0x59, - 0x29, 0xb2, 0x2a, 0x69, 0x55, 0x34, 0xd3, 0x4f, 0xfc, 0x61, 0x74, 0x92, 0xd2, 0x49, 0x83, 0x60, - 0xd2, 0x49, 0x83, 0x60, 0xd2, 0x4b, 0xc3, 0x84, 0x31, 0x04, 0xc4, 0x1e, 0xa9, 0xa6, 0x99, 0x3f, - 0xf8, 0x28, 0x9b, 0x3c, 0xf7, 0x68, 0xa9, 0xf0, 0x51, 0xda, 0x68, 0xf4, 0x3d, 0x38, 0x3b, 0x57, - 0xc1, 0x00, 0xa1, 0x9a, 0x3f, 0x34, 0x27, 0x7d, 0x08, 0x56, 0x1a, 0xa6, 0x3d, 0x86, 0xb8, 0xbd, - 0xe2, 0xb8, 0xaf, 0xc2, 0x26, 0x54, 0xdf, 0x9a, 0xa5, 0x66, 0x7f, 0x1a, 0x25, 0xb7, 0xe0, 0xa8, - 0xbb, 0xd6, 0x39, 0x46, 0xc6, 0x5e, 0x1e, 0xac, 0x7e, 0x32, 0x3b, 0x72, 0xa7, 0xc6, 0x43, 0xbf, - 0x57, 0x63, 0x74, 0x3b, 0x3d, 0x4d, 0x16, 0x17, 0x15, 0xb7, 0x6c, 0x3e, 0xad, 0x78, 0x52, 0x9a, - 0x45, 0xde, 0xb1, 0x75, 0x37, 0x74, 0x2b, 0x34, 0x7d, 0xb7, 0xf8, 0xcc, 0x59, 0xb2, 0x4d, 0xa6, - 0xb3, 0x75, 0xc5, 0xfc, 0x28, 0x7e, 0x58, 0x31, 0x9f, 0x13, 0xb3, 0x61, 0x9b, 0xec, 0x5a, 0xb6, - 0x9b, 0xe1, 0x41, 0x91, 0xbb, 0xaf, 0x54, 0x18, 0xe1, 0x82, 0x08, 0xf7, 0x55, 0x4b, 0x5a, 0x46, - 0xdd, 0xb5, 0xb6, 0xad, 0xf2, 0x8b, 0x35, 0xa2, 0x51, 0x34, 0xf4, 0x0f, 0x1a, 0x89, 0x71, 0x63, - 0x5a, 0x6b, 0x69, 0xaf, 0xcc, 0x4c, 0xd8, 0x6c, 0xf0, 0xe9, 0x37, 0x77, 0x7d, 0xca, 0xcf, 0x83, - 0x54, 0x89, 0x9f, 0xe1, 0x0b, 0x4d, 0x67, 0xa1, 0xe9, 0x9e, 0x87, 0xa7, 0xe0, 0x9b, 0x26, 0x9b, - 0x3d, 0xda, 0x5d, 0x7c, 0x51, 0x4a, 0xa2, 0x55, 0x12, 0x28, 0x91, 0x47, 0xc7, 0x94, 0xbe, 0x88, - 0x9a, 0xb1, 0x0a, 0x9e, 0x9d, 0x3a, 0x7e, 0x15, 0xb7, 0x6e, 0xdd, 0xbb, 0xfc, 0x5d, 0x45, 0xd7, - 0xc1, 0x6e, 0x9a, 0x43, 0x2b, 0xa4, 0x93, 0x7d, 0x75, 0xf0, 0xb9, 0x09, 0xcb, 0xc9, 0xdb, 0xf4, - 0xd3, 0x7f, 0xbb, 0xbb, 0xbe, 0x7f, 0x5d, 0xdd, 0xfd, 0x75, 0x6f, 0x9c, 0xf4, 0xe9, 0xb6, 0xdb, - 0x6f, 0xfc, 0x2f, 0x69, 0xad, 0xa6, 0x84, 0xa4, 0x4f, 0x48, 0x91, 0x0f, 0xfa, 0x69, 0xa6, 0x9f, - 0x82, 0xf1, 0x0e, 0xed, 0x1f, 0x15, 0x79, 0x12, 0x9a, 0x62, 0x26, 0x4e, 0x99, 0xff, 0x5f, 0xc9, - 0xc5, 0x89, 0xd2, 0x4b, 0x49, 0x2f, 0x04, 0x9c, 0xf6, 0xd1, 0x5b, 0xe6, 0x20, 0xaf, 0xfa, 0xb4, - 0x9c, 0x91, 0x5f, 0xf4, 0x74, 0x5f, 0xf0, 0x89, 0x1b, 0xb7, 0xda, 0x69, 0xb9, 0xf5, 0xaf, 0x0b, - 0xda, 0x3e, 0xdb, 0x68, 0xfb, 0x6d, 0x4f, 0xd8, 0x53, 0xf4, 0xc9, 0xeb, 0xe1, 0x58, 0xfa, 0xd5, - 0x5d, 0xa6, 0xb7, 0xf8, 0x8f, 0x27, 0x2f, 0x9f, 0x0e, 0x10, 0xfa, 0x7d, 0x3e, 0xbf, 0x5c, 0x26, - 0x99, 0x3c, 0x69, 0xa6, 0x5e, 0xdf, 0xe1, 0x5b, 0x4d, 0x09, 0xe5, 0x47, 0xd3, 0xeb, 0xf5, 0xfa, - 0x55, 0xfc, 0x9d, 0x9e, 0x67, 0xc2, 0xb7, 0xe3, 0xf3, 0xbc, 0x88, 0x1d, 0xb6, 0x2b, 0x1a, 0xb9, - 0xfb, 0xde, 0x5d, 0x2e, 0xf8, 0x2d, 0x21, 0x68, 0xda, 0x2c, 0xaa, 0xbb, 0xe5, 0xf0, 0xad, 0xa6, - 0x95, 0x5b, 0x5c, 0xa4, 0xc8, 0xd8, 0xec, 0x97, 0x72, 0xe9, 0xff, 0x82, 0x0d, 0x5d, 0xea, 0xd3, - 0xa4, 0x33, 0xef, 0x94, 0x62, 0x48, 0x15, 0x6d, 0xb6, 0xdd, 0x6d, 0xf8, 0x22, 0x2b, 0x46, 0xd4, - 0xdd, 0xbc, 0xeb, 0x88, 0x09, 0x97, 0x49, 0x2d, 0x24, 0xa1, 0xc5, 0x0d, 0x32, 0xdf, 0xfb, 0x4d, - 0x6d, 0x34, 0xba, 0x69, 0xff, 0x8a, 0x08, 0x35, 0x46, 0x55, 0x12, 0xa8, 0x1b, 0x4c, 0x15, 0x42, - 0xb4, 0xc7, 0x8d, 0x24, 0x42, 0xa2, 0x37, 0x90, 0x3e, 0xf5, 0xe7, 0xed, 0xf0, 0x59, 0x59, 0x0e, - 0xdc, 0x21, 0x16, 0xb4, 0x03, 0x15, 0xfb, 0x0f, 0x97, 0x5d, 0xf9, 0xe3, 0x6b, 0x74, 0xd0, 0x47, - 0x4d, 0x32, 0x79, 0x94, 0x1e, 0x11, 0x88, 0x24, 0x6b, 0x1c, 0x4e, 0x6a, 0x3e, 0xb6, 0x18, 0xc3, - 0xa0, 0xae, 0xcb, 0x1a, 0xe3, 0xc9, 0xac, 0xe1, 0xfc, 0x21, 0x41, 0xa6, 0x56, 0x1b, 0x97, 0xd1, - 0x97, 0x9f, 0xb6, 0x5b, 0x33, 0x3e, 0x14, 0xa4, 0x96, 0x4c, 0xcd, 0x93, 0xc5, 0xb7, 0xf8, 0xa9, - 0x02, 0xba, 0xa6, 0x04, 0x6a, 0xb2, 0xbc, 0xaa, 0xb9, 0x77, 0x7c, 0x29, 0x4a, 0x6e, 0x59, 0x4b, - 0x88, 0x9b, 0x31, 0x3d, 0xa7, 0xf9, 0xce, 0x9f, 0x5f, 0x65, 0xb5, 0x35, 0x4f, 0x5f, 0x92, 0xf8, - 0xc7, 0xf8, 0x50, 0xe3, 0x11, 0x0b, 0x12, 0x09, 0xdc, 0x17, 0xbb, 0xb3, 0xc3, 0xe3, 0x0c, 0xf2, - 0x12, 0xf4, 0xaa, 0x31, 0xe6, 0xeb, 0x2b, 0xd9, 0xf1, 0x9d, 0xde, 0x3e, 0x92, 0xa0, 0x41, 0x6b, - 0xed, 0x52, 0x73, 0x34, 0xca, 0x94, 0x20, 0xf0, 0x56, 0x23, 0x8a, 0x26, 0x05, 0x89, 0x86, 0xe5, - 0x10, 0x3a, 0x95, 0x56, 0x99, 0xf1, 0x3f, 0x41, 0x51, 0xf7, 0xc1, 0x34, 0xfb, 0x53, 0xe8, 0xc2, - 0xfc, 0x55, 0x5f, 0x27, 0x49, 0x2f, 0x09, 0x73, 0xe9, 0x34, 0xd8, 0x6c, 0xfc, 0xe7, 0x6f, 0x93, - 0x93, 0xc9, 0xfc, 0x2c, 0x6b, 0x67, 0x63, 0x3a, 0x83, 0xa8, 0xd1, 0xdf, 0xca, 0xca, 0xf8, 0x83, - 0xa4, 0x96, 0x92, 0x5a, 0xe7, 0x33, 0x3e, 0xee, 0xf3, 0xf3, 0xcc, 0x87, 0x69, 0xa6, 0x9a, 0x6d, - 0xb6, 0xdb, 0x7e, 0x17, 0xcb, 0x2d, 0x22, 0x13, 0x4b, 0x1d, 0xb5, 0xd3, 0x37, 0xaf, 0xfc, 0x33, - 0x1d, 0x4c, 0x7f, 0xd4, 0xc6, 0x70, 0xc2, 0xff, 0xd6, 0x05, 0x4f, 0x82, 0xa2, 0xa4, 0x96, 0x92, - 0xdb, 0x49, 0x6d, 0xd5, 0x70, 0x97, 0x69, 0xad, 0xa6, 0xbd, 0x11, 0x20, 0xf9, 0x8a, 0x81, 0xa0, - 0x62, 0xd0, 0xb4, 0x5e, 0x08, 0x04, 0x29, 0x99, 0x5c, 0xd8, 0x36, 0x9a, 0x37, 0x56, 0xbe, 0xaa, - 0xba, 0x2c, 0x7f, 0x52, 0x7f, 0xc2, 0x92, 0xe2, 0x49, 0x24, 0x92, 0x49, 0x24, 0xb5, 0x57, 0xbc, - 0xca, 0x3e, 0x0a, 0xa9, 0x24, 0xaa, 0x92, 0x4b, 0x67, 0x49, 0x21, 0xf8, 0xf8, 0x26, 0xde, 0xeb, - 0x55, 0x82, 0xb8, 0xf1, 0x29, 0x25, 0xa4, 0x96, 0x92, 0x5b, 0xe1, 0x88, 0xe5, 0x8f, 0xd3, 0xa6, - 0x8e, 0x5f, 0x77, 0x77, 0xf4, 0x4b, 0x7c, 0xf1, 0xda, 0x5e, 0x99, 0x7c, 0x7f, 0xe7, 0x38, 0xe9, - 0x5b, 0x6d, 0xb6, 0xff, 0xc2, 0xe1, 0x43, 0x6b, 0x54, 0x46, 0x53, 0x03, 0xb4, 0x6d, 0x24, 0xb6, - 0xe6, 0x4f, 0x4f, 0xfc, 0x69, 0x9e, 0x8e, 0x3b, 0xd7, 0x04, 0x6d, 0x6a, 0xc1, 0x22, 0xa1, 0xf2, - 0x7a, 0x32, 0xd8, 0xd9, 0x81, 0x5d, 0x0d, 0xd6, 0xe9, 0x0c, 0xb6, 0xdd, 0x0c, 0x3e, 0x5a, 0x69, - 0x8d, 0x8f, 0x24, 0xa6, 0x6a, 0xc9, 0x53, 0xf7, 0x0e, 0xaa, 0xa1, 0xf5, 0xe3, 0x69, 0x5a, 0x2b, - 0x67, 0x45, 0x5c, 0xe9, 0x17, 0xab, 0xfa, 0x7a, 0x23, 0xbc, 0x67, 0x6e, 0x9e, 0x09, 0x38, 0xce, - 0x58, 0xd7, 0x94, 0x39, 0x90, 0x33, 0x31, 0xf1, 0x4a, 0x0d, 0xf4, 0x7c, 0x18, 0xed, 0x26, 0x7d, - 0xe8, 0x86, 0xba, 0x92, 0x8d, 0x3c, 0x6d, 0xdb, 0x4b, 0x57, 0xde, 0x33, 0x38, 0x3a, 0xaa, 0xd9, - 0x87, 0xf4, 0xa3, 0xbc, 0x6e, 0x11, 0x7a, 0xbc, 0x56, 0xff, 0xf8, 0xdc, 0xe7, 0x8a, 0xd2, 0x19, - 0xbd, 0xfb, 0x58, 0x30, 0x41, 0x54, 0x5a, 0x73, 0x44, 0xf0, 0xb5, 0x6c, 0xf6, 0x58, 0x71, 0x90, - 0xfe, 0xe8, 0x01, 0xb3, 0xda, 0xf7, 0xb5, 0x56, 0x7a, 0xee, 0x7e, 0x0e, 0xfd, 0xc7, 0x7f, 0xe3, - 0x78, 0x85, 0x81, 0xc2, 0x2f, 0x70, 0xec, 0x6b, 0x71, 0xee, 0x47, 0xae, 0x2e, 0xab, 0x32, 0x24, - 0x6d, 0xef, 0x94, 0x76, 0xe3, 0xcb, 0x37, 0x3b, 0x0b, 0xf0, 0x56, 0x24, 0x6b, 0xe6, 0x8a, 0xbb, - 0x71, 0x09, 0xe8, 0x68, 0xd6, 0xd0, 0x3e, 0x6e, 0x97, 0xd4, 0x99, 0xf0, 0xb1, 0xa9, 0x2a, 0xf1, - 0x85, 0x7b, 0x56, 0x28, 0xed, 0x51, 0xc6, 0x73, 0xad, 0xb2, 0x31, 0xf8, 0x27, 0x18, 0x77, 0x59, - 0x99, 0xf2, 0x18, 0xa5, 0x3d, 0xf0, 0x91, 0x55, 0x55, 0x70, 0xa4, 0x78, 0x2c, 0x63, 0xce, 0x11, - 0x53, 0xbe, 0x77, 0xfd, 0x75, 0x4e, 0xfd, 0x5c, 0xfa, 0x91, 0x65, 0xf3, 0xdb, 0xee, 0xee, 0xe3, - 0xf9, 0xe3, 0xa5, 0x6d, 0xb6, 0xdb, 0xff, 0x05, 0x04, 0x91, 0x79, 0x58, 0x2d, 0x17, 0x74, 0x58, - 0xfc, 0x65, 0x9b, 0x36, 0x94, 0xf4, 0x3d, 0x29, 0xd3, 0x55, 0xf4, 0x65, 0xa7, 0x84, 0x3c, 0x4e, - 0x8a, 0xef, 0xf5, 0x5f, 0x05, 0xd7, 0x7d, 0xaa, 0x8b, 0x8e, 0xc8, 0xbc, 0x12, 0xdc, 0xf8, 0xbd, - 0x76, 0x9a, 0x7f, 0x82, 0x7d, 0x5e, 0x92, 0x49, 0x24, 0xff, 0x13, 0x6d, 0x71, 0x5f, 0xf1, 0x77, - 0x77, 0x75, 0x57, 0x7f, 0x05, 0x11, 0xaf, 0x2a, 0xf4, 0x51, 0x43, 0x8b, 0xab, 0xfc, 0x17, 0x5d, - 0xf0, 0xba, 0xaa, 0xae, 0xed, 0xf1, 0x74, 0x92, 0x49, 0x24, 0x92, 0x49, 0x2f, 0x05, 0xd4, 0x92, - 0x49, 0x24, 0x92, 0xc5, 0x77, 0xce, 0x25, 0x3a, 0xfa, 0x65, 0x32, 0x3f, 0x33, 0xe7, 0xf0, 0xf7, - 0x4d, 0x36, 0xdb, 0xff, 0x3d, 0x1e, 0x7d, 0x34, 0xd3, 0x4f, 0xcd, 0x49, 0x6d, 0xae, 0x7a, 0x0d, - 0xfe, 0xab, 0x5f, 0x7b, 0x76, 0xfc, 0x31, 0x39, 0x07, 0x10, 0xe6, 0x6a, 0x4e, 0x34, 0x23, 0x6d, - 0x56, 0x04, 0xc3, 0x16, 0x1d, 0xff, 0x0e, 0x0a, 0x76, 0x65, 0x38, 0xba, 0x64, 0xe2, 0x6a, 0x69, - 0xd1, 0xaf, 0xf8, 0xd8, 0xab, 0x0e, 0x3a, 0xc3, 0x62, 0xaf, 0x9a, 0xf7, 0x76, 0x13, 0x0b, 0x1f, - 0xc9, 0x2c, 0x56, 0x21, 0x13, 0x55, 0x90, 0x7d, 0x8f, 0x78, 0xbc, 0xb3, 0x2a, 0x30, 0x7c, 0x5b, - 0xb7, 0xe0, 0xa8, 0xd1, 0x1e, 0x7f, 0x56, 0xbe, 0x5c, 0x3d, 0xc2, 0x34, 0x91, 0x35, 0x51, 0xde, - 0x3c, 0x69, 0x3f, 0x64, 0x85, 0x42, 0xfd, 0xf9, 0x72, 0x06, 0xeb, 0x87, 0x51, 0x73, 0xa8, 0x6a, - 0xa9, 0xbe, 0x31, 0xad, 0x28, 0x69, 0xf8, 0x7e, 0x75, 0x14, 0x71, 0x32, 0x0b, 0x35, 0x37, 0x17, - 0x57, 0x52, 0x5a, 0xbc, 0x57, 0x7f, 0xf8, 0x76, 0xc5, 0x2c, 0x5e, 0x3f, 0xbe, 0xcb, 0x1d, 0x3f, - 0x43, 0xa1, 0x95, 0xa4, 0x9d, 0x7b, 0xb7, 0xfe, 0x14, 0xac, 0x7d, 0x26, 0xcb, 0x2d, 0x5d, 0x51, - 0x20, 0xa8, 0x91, 0x75, 0x9d, 0x07, 0xa5, 0x69, 0x27, 0x6a, 0xff, 0x05, 0x27, 0x70, 0xc4, 0x2d, - 0x32, 0x57, 0x2a, 0xbd, 0x6d, 0x55, 0x4e, 0x91, 0x78, 0xce, 0xf5, 0x7d, 0x33, 0x6d, 0x5b, 0x47, - 0xc2, 0xfa, 0xbc, 0x61, 0x5d, 0xd0, 0x9e, 0x12, 0x33, 0x25, 0xe3, 0x36, 0x97, 0xb7, 0xbb, 0xff, - 0x8f, 0x1d, 0xcc, 0x4c, 0x31, 0xe8, 0xe2, 0x7b, 0x98, 0x1c, 0xb9, 0x55, 0x10, 0x4f, 0xf9, 0x4a, - 0xca, 0x33, 0x50, 0xcd, 0xc4, 0x2e, 0x0c, 0x02, 0x6d, 0xdb, 0xb4, 0xd6, 0x7e, 0xfa, 0xb2, 0x56, - 0x5e, 0x08, 0x26, 0xc9, 0xf0, 0xf8, 0xd3, 0x5d, 0x55, 0x68, 0xff, 0xa6, 0x9a, 0x69, 0xf9, 0xc8, - 0x8e, 0xfd, 0x34, 0xd3, 0x4f, 0xcf, 0x47, 0x7e, 0x9a, 0x69, 0xa7, 0xe7, 0x2b, 0xfd, 0xb6, 0xdb, - 0x6c, 0x9d, 0x52, 0xc5, 0xf0, 0xe5, 0xb3, 0xd6, 0xdb, 0x1f, 0x4d, 0x39, 0xa1, 0xe0, 0xb0, 0xd8, - 0xef, 0xab, 0x40, 0xca, 0x49, 0xe7, 0x3f, 0xd1, 0xff, 0x04, 0xd9, 0xba, 0xf7, 0x6a, 0x03, 0xa5, - 0x4b, 0x9c, 0x4a, 0x38, 0x9f, 0x4d, 0x34, 0xd3, 0xf3, 0x88, 0x45, 0x3f, 0xaa, 0xa9, 0x39, 0xce, - 0xa6, 0x52, 0xc8, 0x71, 0x26, 0x17, 0xfa, 0xb7, 0xc7, 0x73, 0x92, 0x39, 0x26, 0x9a, 0xe6, 0xda, - 0x93, 0xf8, 0x2b, 0x93, 0x59, 0xa4, 0xd6, 0x69, 0xb1, 0xd8, 0x7c, 0x7e, 0x1b, 0x0d, 0x8f, 0xc7, - 0xe2, 0x2f, 0xf8, 0x6e, 0x6c, 0x36, 0x3f, 0x1f, 0x88, 0xeb, 0xea, 0xaa, 0xaf, 0x97, 0xb4, 0xd7, - 0x84, 0x8b, 0x26, 0x2f, 0x75, 0xbe, 0x84, 0xb9, 0xf0, 0xe0, 0xe6, 0x87, 0x4d, 0xa7, 0x10, 0x48, - 0xad, 0xb7, 0xc8, 0x75, 0x5e, 0xdf, 0xfe, 0x30, 0x61, 0x21, 0x8e, 0x9e, 0x2d, 0x8f, 0xad, 0x90, - 0xfe, 0x4d, 0xf8, 0x53, 0xd4, 0xf2, 0x74, 0xee, 0x7e, 0xc2, 0x0a, 0x0b, 0x61, 0x88, 0xe7, 0x93, - 0xa1, 0x37, 0xc1, 0x49, 0x0d, 0x11, 0xa7, 0x22, 0x22, 0x87, 0x19, 0x97, 0x77, 0x70, 0x71, 0x73, - 0x0d, 0x96, 0xbe, 0x3c, 0xb9, 0x3b, 0x64, 0x9a, 0x86, 0x3c, 0x69, 0x25, 0xbd, 0x21, 0x33, 0xb0, - 0x53, 0x7d, 0x73, 0x88, 0x52, 0x21, 0xd0, 0xc1, 0xbd, 0x2d, 0x08, 0x8c, 0xfd, 0xe9, 0x4e, 0x8a, - 0xb7, 0x6e, 0xdb, 0x89, 0x69, 0xb6, 0x9f, 0x8c, 0x39, 0xfc, 0x30, 0x69, 0xb5, 0x3c, 0xdd, 0xc5, - 0xf2, 0xfd, 0x4a, 0xf1, 0x5f, 0x0f, 0xd2, 0xd8, 0xa9, 0x2a, 0x74, 0xfc, 0x29, 0x34, 0xb7, 0x8c, - 0x1c, 0x7a, 0x37, 0x36, 0xb7, 0x1c, 0xcc, 0xea, 0xa7, 0xef, 0x84, 0x44, 0xad, 0x66, 0x85, 0xbd, - 0xd1, 0x0d, 0x31, 0x22, 0xaf, 0xc7, 0x1e, 0x84, 0x9a, 0x67, 0xd2, 0xeb, 0xb5, 0x9a, 0xfe, 0xee, - 0x7e, 0xef, 0xea, 0xff, 0x1c, 0x20, 0x71, 0x56, 0x2b, 0xb5, 0xdb, 0xbd, 0xc9, 0xac, 0xd3, 0x6b, - 0xb7, 0xc7, 0x91, 0xa9, 0x24, 0xd3, 0x0c, 0xfe, 0x3a, 0xaa, 0xa3, 0x0a, 0xef, 0xe3, 0x44, 0x34, - 0xc9, 0x3d, 0x6e, 0x69, 0x28, 0x5f, 0x63, 0xba, 0xab, 0xbb, 0xba, 0x8d, 0xa9, 0x7f, 0x56, 0xa6, - 0xff, 0xe0, 0xa0, 0xe4, 0xf9, 0x27, 0xdd, 0xdc, 0x79, 0xc2, 0xaf, 0xf5, 0x55, 0x50, 0x9f, 0x04, - 0x83, 0x1a, 0x68, 0xf1, 0xeb, 0xe1, 0x6b, 0x6a, 0xdb, 0x6e, 0xe8, 0xd1, 0x91, 0x3e, 0x92, 0x4d, - 0x35, 0xe1, 0xbe, 0xef, 0x13, 0xaa, 0x46, 0xab, 0xb3, 0xd7, 0x0d, 0x1d, 0x49, 0xbc, 0x5d, 0xb3, - 0x7f, 0xf0, 0xe4, 0xe4, 0x8e, 0x48, 0xb8, 0xdc, 0x38, 0xb8, 0xe1, 0xa1, 0x57, 0x7f, 0x9c, 0xc6, - 0x59, 0xf9, 0xf5, 0xb6, 0x9a, 0xf3, 0xcc, 0x85, 0x6a, 0x8c, 0x38, 0x68, 0xba, 0x61, 0xad, 0x0c, - 0xfe, 0x79, 0xd0, 0xca, 0x4d, 0x33, 0xeb, 0xf5, 0xa6, 0x9d, 0xae, 0xdf, 0x0c, 0x75, 0x57, 0x77, - 0x7f, 0xea, 0x68, 0xb5, 0x0a, 0xaf, 0xf0, 0xb5, 0xea, 0xa9, 0x24, 0x91, 0x72, 0x0d, 0xdb, 0x76, - 0xe4, 0x34, 0x97, 0x85, 0x6e, 0xea, 0xb6, 0xad, 0x65, 0xf4, 0x12, 0x4d, 0x97, 0x7c, 0x3d, 0xaa, - 0xa6, 0x9a, 0xaa, 0xa6, 0x9a, 0x49, 0x24, 0x92, 0xca, 0x9a, 0x64, 0x34, 0xc3, 0x49, 0x25, 0x12, - 0x5e, 0x1f, 0xdd, 0xaa, 0x92, 0x8c, 0xa4, 0x59, 0x68, 0x5a, 0x17, 0x21, 0x8d, 0x50, 0xf2, 0x92, - 0x4f, 0xd7, 0xe8, 0xab, 0x15, 0x69, 0x25, 0xe0, 0x92, 0xcd, 0x9b, 0x36, 0x69, 0x57, 0x8d, 0xbb, - 0xfa, 0xa9, 0x09, 0x10, 0x97, 0x53, 0xe6, 0x5f, 0xe4, 0x49, 0x36, 0x92, 0x5f, 0xe0, 0xc3, 0xaa, - 0x88, 0x78, 0xee, 0x7d, 0x7c, 0xfa, 0x7d, 0x2e, 0xb7, 0x71, 0x10, 0xc5, 0xf4, 0x66, 0x7b, 0x7d, - 0xb3, 0xae, 0x64, 0xe2, 0x0b, 0x13, 0x1a, 0x31, 0xa1, 0x6c, 0xbb, 0x6d, 0xb8, 0x92, 0xf0, 0xd9, - 0x1d, 0xfb, 0x92, 0x67, 0x5f, 0xf0, 0x46, 0x7c, 0xa4, 0x12, 0xee, 0x5f, 0x34, 0x56, 0x1e, 0x7e, - 0x1e, 0xbb, 0xa1, 0x2f, 0x08, 0x98, 0x92, 0xf4, 0x43, 0xf9, 0xa3, 0xc7, 0xcd, 0x62, 0x8a, 0xb7, - 0x98, 0xc5, 0x18, 0xd3, 0x67, 0x82, 0xd8, 0xfa, 0xd6, 0xec, 0x9d, 0x75, 0x75, 0x23, 0x0f, 0xc1, - 0x55, 0x29, 0xec, 0x3d, 0xee, 0x0c, 0x92, 0x78, 0x48, 0x5d, 0x7c, 0x69, 0x8d, 0x47, 0xb9, 0xcc, - 0x2e, 0xb9, 0x4a, 0x77, 0xce, 0xf4, 0x96, 0xa3, 0xd7, 0x71, 0xed, 0xbd, 0x3f, 0x19, 0x87, 0x54, - 0xf4, 0xb8, 0x1b, 0xf8, 0xf0, 0xfe, 0xf6, 0x0e, 0x5d, 0x6f, 0x7d, 0xd5, 0x3d, 0x4d, 0x79, 0x1a, - 0xb0, 0xf5, 0x9a, 0x85, 0x71, 0x51, 0xa5, 0xe3, 0x0a, 0x88, 0x73, 0xaf, 0x92, 0x76, 0x6f, 0x3d, - 0x25, 0x14, 0x69, 0x36, 0x57, 0xd3, 0xa7, 0xe3, 0x0a, 0xea, 0xa5, 0x8b, 0x43, 0x2d, 0x30, 0x79, - 0x17, 0x11, 0xca, 0xf4, 0x6a, 0xc5, 0xd0, 0x5f, 0x12, 0x10, 0xf6, 0x37, 0x7a, 0xf4, 0x6d, 0x19, - 0x85, 0x5f, 0xe3, 0x2f, 0x9f, 0xd5, 0x5e, 0xf6, 0x4a, 0xde, 0x11, 0xf5, 0xa7, 0x67, 0x8c, 0x29, - 0x68, 0x5a, 0x16, 0x8d, 0xa6, 0x4e, 0x9a, 0x96, 0x86, 0x98, 0x92, 0xbe, 0x39, 0xf8, 0x9b, 0x0b, - 0xf8, 0xb8, 0x96, 0x0e, 0x21, 0xe4, 0xce, 0x0f, 0xcf, 0xeb, 0xaf, 0xc2, 0x57, 0xee, 0x56, 0x3f, - 0xc6, 0x1a, 0x86, 0x74, 0xac, 0x71, 0xc4, 0x54, 0xac, 0x9c, 0x7d, 0x49, 0x94, 0xe3, 0xaf, 0xf1, - 0xe2, 0xa6, 0x69, 0x8b, 0xa0, 0xd2, 0x22, 0x37, 0x63, 0x6d, 0x9b, 0x2f, 0xc3, 0xfc, 0xfc, 0xfd, - 0x78, 0xe1, 0xf1, 0xb3, 0x34, 0xae, 0xbc, 0x97, 0xe6, 0xfd, 0xb1, 0x3c, 0x38, 0x13, 0x4d, 0x34, - 0xd3, 0x1d, 0xa9, 0xa6, 0x9a, 0x7f, 0xe7, 0xa9, 0x36, 0x2b, 0xc7, 0x0f, 0xc4, 0xf1, 0x66, 0x7b, - 0xd9, 0xe4, 0xa7, 0x82, 0x42, 0xb6, 0x6e, 0xfe, 0x5f, 0x05, 0xba, 0xbb, 0xec, 0x18, 0xd7, 0x85, - 0x0c, 0x77, 0xe0, 0xa0, 0x8a, 0xbd, 0x29, 0x34, 0x76, 0xf8, 0x30, 0x9e, 0xd9, 0xb5, 0x5a, 0xd7, - 0x27, 0x6d, 0xb1, 0x57, 0xf9, 0xe8, 0xed, 0xdb, 0x1f, 0xff, 0x05, 0x14, 0xd9, 0xa7, 0x49, 0x24, - 0x92, 0x2b, 0xdf, 0x1a, 0x44, 0x92, 0xd5, 0x74, 0x8b, 0x89, 0x44, 0x92, 0x49, 0x24, 0x44, 0xfe, - 0xba, 0xd3, 0x4f, 0xd6, 0xbe, 0x12, 0xe9, 0x24, 0xd3, 0x4d, 0x7c, 0x29, 0x7d, 0x36, 0xb6, 0x9a, - 0x69, 0xad, 0x6f, 0x2a, 0x7c, 0x29, 0xd2, 0x49, 0x69, 0x25, 0xbb, 0xb4, 0xd3, 0x4d, 0x65, 0xf1, - 0x96, 0x9a, 0xae, 0x92, 0x4d, 0x34, 0xd3, 0x4d, 0x34, 0xd3, 0x5e, 0x0a, 0xfa, 0x49, 0x1f, 0x2a, - 0xa9, 0xa6, 0x9a, 0x69, 0xac, 0xbe, 0x0a, 0xad, 0x35, 0x54, 0x92, 0xd2, 0x49, 0x56, 0x2a, 0xe0, - 0xa3, 0x4d, 0x7b, 0x4d, 0x31, 0xf1, 0x77, 0x7f, 0x55, 0xf1, 0x55, 0x5d, 0x27, 0x55, 0xf0, 0xf5, - 0x54, 0x4f, 0xd2, 0x7c, 0xf4, 0x49, 0xa6, 0x4e, 0x4b, 0x79, 0x4d, 0xd3, 0x77, 0xf0, 0x60, 0x68, - 0x63, 0xda, 0x65, 0x80, 0xd6, 0x2c, 0x7d, 0x6d, 0xab, 0x7f, 0xe1, 0x42, 0x8f, 0xdc, 0x87, 0x99, - 0xb5, 0x75, 0xbb, 0xa3, 0x96, 0x55, 0x6e, 0x79, 0x71, 0xbe, 0x42, 0xb4, 0xdd, 0x97, 0x8c, 0xa3, - 0xa4, 0x95, 0x26, 0xcd, 0xd2, 0x49, 0x71, 0xa6, 0xd6, 0x3f, 0xc6, 0x8c, 0xb2, 0x64, 0x98, 0xc4, - 0x63, 0xb2, 0x5b, 0xa6, 0xfe, 0xf8, 0x31, 0x9d, 0x1e, 0x8c, 0x05, 0xf1, 0x1b, 0x23, 0xea, 0xd1, - 0xbb, 0x22, 0x37, 0xf2, 0xcc, 0x1b, 0xf4, 0xf1, 0xa5, 0x80, 0xd3, 0xba, 0x85, 0x88, 0x7b, 0xd6, - 0xbe, 0x25, 0xe3, 0x55, 0x71, 0x7d, 0xd1, 0x23, 0x05, 0xc0, 0xad, 0xf8, 0x38, 0x81, 0x52, 0xb9, - 0xbe, 0xf6, 0xd5, 0x69, 0xcb, 0xd9, 0xf8, 0xd2, 0xa3, 0x77, 0x65, 0x4e, 0x5e, 0x9b, 0x51, 0x52, - 0x10, 0xbc, 0x85, 0x57, 0x4c, 0xc7, 0xe5, 0x55, 0x55, 0xff, 0x27, 0x54, 0xfc, 0x61, 0xde, 0x2d, - 0x9d, 0x55, 0xf4, 0x6f, 0x35, 0x59, 0xf8, 0xfc, 0xec, 0xa7, 0xd5, 0xb4, 0xd5, 0xcb, 0xb1, 0xf8, - 0x2b, 0xe7, 0x81, 0x3d, 0x70, 0xdc, 0x7b, 0x35, 0x3f, 0x26, 0x22, 0x88, 0xb8, 0x3b, 0x7c, 0x29, - 0x22, 0x46, 0x3e, 0xa7, 0xb8, 0xfc, 0xbd, 0x46, 0x8c, 0x95, 0x2b, 0x18, 0xdd, 0x37, 0x48, 0xbc, - 0x65, 0x0c, 0xad, 0xd9, 0x2a, 0x7b, 0xcb, 0xd1, 0x2f, 0xf0, 0x81, 0x56, 0xe2, 0xb4, 0x36, 0x34, - 0x36, 0x32, 0xb0, 0x86, 0xd6, 0x20, 0xfc, 0x47, 0x10, 0xd0, 0xb4, 0x0d, 0x65, 0x98, 0x41, 0x7e, - 0x2a, 0xf7, 0x85, 0xc6, 0x2e, 0x68, 0x2e, 0xb8, 0xa6, 0xeb, 0xff, 0x8d, 0x21, 0x66, 0x3b, 0xa3, - 0x67, 0x53, 0x6a, 0xfb, 0x55, 0x5a, 0xad, 0x9e, 0xdd, 0xb1, 0x57, 0xfe, 0x0a, 0x23, 0x51, 0x1e, - 0x31, 0x95, 0x54, 0x62, 0x1a, 0x59, 0xb8, 0x5c, 0xf4, 0x93, 0x19, 0x5d, 0x25, 0xac, 0x89, 0xb3, - 0x4d, 0xdf, 0x7f, 0x8c, 0x21, 0x37, 0x03, 0x1d, 0xca, 0x93, 0xf6, 0x31, 0xfb, 0xbd, 0x26, 0x19, - 0xaf, 0xfe, 0x36, 0x93, 0x22, 0xe7, 0xcd, 0x5c, 0x9a, 0x82, 0x2c, 0x7f, 0x15, 0x7f, 0xdf, 0x7d, - 0x31, 0x6e, 0x9f, 0x87, 0xe9, 0x5a, 0xc8, 0xe9, 0x9d, 0xed, 0x8f, 0x1b, 0x9e, 0xba, 0xae, 0xfc, - 0x96, 0x68, 0xe5, 0xe6, 0xe2, 0x39, 0x02, 0x65, 0xc6, 0xe1, 0x31, 0x99, 0xe5, 0x22, 0x49, 0x0d, - 0x69, 0x3e, 0x34, 0x8f, 0x79, 0x70, 0xb8, 0xd5, 0x5a, 0x49, 0x69, 0xb4, 0xf6, 0xdb, 0x6d, 0xbf, - 0xf0, 0x52, 0x55, 0x72, 0x64, 0x54, 0x92, 0x48, 0x62, 0x9f, 0x47, 0x4f, 0x85, 0x2a, 0xdb, 0x6d, - 0xe9, 0x25, 0x18, 0xf7, 0x89, 0x5d, 0xd0, 0x1b, 0xe0, 0xb4, 0x8b, 0x55, 0x49, 0x2d, 0x1d, 0xf8, - 0x53, 0x2f, 0x5e, 0xdd, 0xea, 0xd0, 0x97, 0xd6, 0xd3, 0x5a, 0x75, 0xe8, 0xe9, 0xd7, 0x82, 0x52, - 0xb4, 0xd6, 0x92, 0x44, 0x22, 0xd2, 0x0a, 0x45, 0xe1, 0xd2, 0x17, 0x4b, 0xb9, 0x74, 0xfc, 0xdf, - 0x93, 0xfc, 0x5f, 0x3f, 0x3f, 0x7b, 0xf0, 0xd7, 0x35, 0x9a, 0xca, 0xdf, 0x4d, 0x34, 0xd3, 0xf0, - 0x54, 0x45, 0x5a, 0x6c, 0xd5, 0x5d, 0xd2, 0x49, 0x24, 0x88, 0x9f, 0x05, 0x57, 0x2f, 0xdd, 0x57, - 0xd5, 0x65, 0x55, 0x54, 0x8a, 0xf8, 0x53, 0x4d, 0x9b, 0xb9, 0xa8, 0xea, 0x4c, 0xa4, 0x92, 0x49, - 0x13, 0x0e, 0xe7, 0x22, 0xbe, 0x0a, 0x6c, 0xcb, 0x8d, 0x50, 0x76, 0xec, 0x1b, 0x07, 0xda, 0x69, - 0x2a, 0xf1, 0x15, 0x5e, 0x5a, 0x57, 0xc2, 0x25, 0xca, 0x41, 0x29, 0x07, 0x72, 0x90, 0x5a, 0xdf, - 0x87, 0xcf, 0x0f, 0x72, 0x90, 0x4a, 0x41, 0x77, 0xe5, 0x61, 0x46, 0xaa, 0x2a, 0x33, 0x21, 0xd9, - 0xd2, 0xa9, 0x3b, 0x3b, 0xb9, 0xfb, 0xff, 0x82, 0x01, 0x83, 0x2d, 0x2d, 0x26, 0xc2, 0x6d, 0x26, - 0x59, 0x0f, 0x0e, 0xcd, 0xd5, 0x65, 0xf4, 0x91, 0xbd, 0x3c, 0x63, 0x46, 0x3f, 0xc3, 0xb1, 0xcc, - 0xf6, 0x99, 0xb4, 0xba, 0xda, 0x3e, 0xca, 0x31, 0xdf, 0xff, 0x0a, 0x12, 0xc6, 0xea, 0x69, 0x70, - 0x8d, 0xd2, 0x5a, 0x93, 0x1f, 0x90, 0xbe, 0xf8, 0xc2, 0xb9, 0x36, 0x16, 0x6b, 0xb7, 0x63, 0x89, - 0x71, 0xe5, 0xe5, 0xfc, 0x2c, 0x77, 0xbd, 0xdd, 0xdd, 0xee, 0xee, 0xff, 0xe1, 0x43, 0x38, 0xd6, - 0x7e, 0x21, 0xac, 0x8d, 0x05, 0x59, 0x34, 0x5f, 0xbf, 0x0f, 0x62, 0x57, 0x3a, 0x88, 0xb7, 0xe3, - 0x68, 0x0c, 0x38, 0x38, 0xd3, 0x4c, 0x25, 0xac, 0x1a, 0x8c, 0xf9, 0x75, 0x2a, 0x94, 0xd2, 0x6e, - 0xb2, 0x54, 0x93, 0x65, 0xff, 0xfc, 0x69, 0x35, 0x43, 0x39, 0xf5, 0x49, 0x61, 0xbb, 0x72, 0x33, - 0x17, 0xda, 0x55, 0xf2, 0xe4, 0x5f, 0x8d, 0xa0, 0xc7, 0xcc, 0xd5, 0xc4, 0x62, 0xed, 0x26, 0xbd, - 0x5f, 0x23, 0x9f, 0xe3, 0xfb, 0x9f, 0x23, 0x4b, 0xaf, 0xf5, 0x55, 0x5f, 0xf1, 0x82, 0xce, 0xa6, - 0xad, 0xbb, 0xb4, 0xd5, 0x4d, 0xa6, 0xda, 0xaa, 0xaf, 0x12, 0x2f, 0xa9, 0xbc, 0x73, 0x88, 0xcc, - 0xe2, 0x23, 0xb3, 0x32, 0xd5, 0x4a, 0xa2, 0x1d, 0xd8, 0x92, 0x80, 0xf2, 0xd3, 0xf1, 0xf3, 0x46, - 0xbb, 0x8d, 0xdf, 0x88, 0xc1, 0x75, 0xfd, 0xb4, 0x41, 0x86, 0x9a, 0xfd, 0xfb, 0x1f, 0xe1, 0x39, - 0x6e, 0xdb, 0xdd, 0xaf, 0x88, 0xa7, 0xa6, 0xdb, 0x72, 0x7f, 0x96, 0x46, 0x24, 0x60, 0x9f, 0xc2, - 0x36, 0x9a, 0x69, 0xab, 0x73, 0x63, 0xe7, 0xe0, 0xb2, 0x91, 0x32, 0xa5, 0xa9, 0xbf, 0x96, 0xab, - 0xdf, 0x1b, 0xdd, 0x1d, 0x58, 0x93, 0x2d, 0x8d, 0xee, 0xac, 0xc4, 0x4f, 0x4b, 0x3d, 0x20, 0xbc, - 0x82, 0x75, 0xd3, 0x74, 0xd3, 0xff, 0x1a, 0x62, 0x61, 0xfc, 0xc6, 0x3c, 0x5e, 0x10, 0xa5, 0x00, - 0xab, 0xe3, 0xbe, 0x1f, 0xe5, 0xbb, 0xe4, 0x84, 0xdd, 0x63, 0xa6, 0x5e, 0xdf, 0xe3, 0x4c, 0x9b, - 0x34, 0x72, 0x1f, 0x32, 0xd7, 0x37, 0x6c, 0x7f, 0x66, 0x5e, 0xf6, 0x5d, 0x64, 0x64, 0xfb, 0xbe, - 0x5b, 0x6e, 0x9f, 0x86, 0xc4, 0xd5, 0x1a, 0x9c, 0x55, 0x22, 0xfb, 0x76, 0xd5, 0xf0, 0x55, 0x77, - 0x77, 0xa6, 0x78, 0xf7, 0x42, 0x43, 0xc4, 0xf8, 0xd3, 0x64, 0x81, 0xe4, 0x92, 0x1b, 0xe1, 0xc4, - 0xe7, 0xb1, 0xda, 0xbb, 0x69, 0x43, 0xb3, 0x55, 0xc8, 0xff, 0xf0, 0xa1, 0xd0, 0x31, 0x91, 0xd3, - 0xe9, 0xa2, 0x2d, 0x71, 0xc3, 0x14, 0x38, 0x34, 0x1c, 0x63, 0x43, 0x1e, 0x09, 0x3f, 0xc6, 0xd8, - 0xd5, 0xb3, 0x29, 0xea, 0x33, 0xd0, 0x6e, 0x18, 0xaa, 0x91, 0x34, 0xba, 0xa9, 0xe2, 0xe7, 0xb5, - 0x97, 0x5c, 0x2a, 0xa0, 0xdb, 0x0e, 0xf3, 0x69, 0x7f, 0x8d, 0x22, 0x75, 0xd4, 0x5d, 0x8e, 0xc9, - 0xb7, 0x0a, 0x1b, 0x6c, 0xe1, 0xb1, 0xb3, 0x43, 0x87, 0xfa, 0x75, 0xd7, 0xc2, 0xd4, 0x69, 0x19, - 0x37, 0xf6, 0x46, 0x83, 0x63, 0x14, 0x85, 0x61, 0x84, 0x95, 0x8d, 0xe9, 0x49, 0x6e, 0xaf, 0x86, - 0x05, 0xb4, 0xd3, 0x4d, 0x2a, 0xaa, 0x94, 0x23, 0x69, 0x48, 0x63, 0xfe, 0x18, 0xbb, 0xee, 0xfe, - 0xb8, 0xdc, 0xb6, 0x99, 0xff, 0x0c, 0x19, 0x56, 0x95, 0x53, 0xc5, 0x69, 0xa5, 0x12, 0x2e, 0x3f, - 0xff, 0x17, 0xd2, 0x4b, 0x49, 0x2f, 0x0f, 0x09, 0x5a, 0x49, 0x69, 0x24, 0xaa, 0xee, 0xa9, 0xa6, - 0x9a, 0x7f, 0xe3, 0x72, 0xa9, 0x24, 0x4a, 0x12, 0x91, 0x44, 0x4c, 0x6e, 0x33, 0x1b, 0x91, 0x25, - 0x12, 0x4a, 0x9a, 0x69, 0xa7, 0xfe, 0x14, 0xb2, 0x8c, 0xa7, 0x5f, 0xe5, 0xcb, 0xe9, 0x25, 0xaa, - 0x7e, 0x5f, 0x0a, 0x6d, 0x5e, 0x7a, 0x0a, 0xcf, 0x6b, 0xfc, 0xbb, 0xae, 0x93, 0xd1, 0xb5, 0xe0, - 0xb3, 0x76, 0x6c, 0xf2, 0xd1, 0x1b, 0xba, 0x34, 0x69, 0x57, 0x82, 0xb9, 0xe8, 0x6a, 0x73, 0x66, - 0xa6, 0xad, 0x34, 0x6c, 0xb9, 0xf0, 0x45, 0xd5, 0x73, 0x9f, 0x04, 0x56, 0x9a, 0x9f, 0x33, 0x9f, - 0x04, 0xd5, 0x5b, 0x72, 0xe3, 0x30, 0x98, 0x77, 0x33, 0x9f, 0x0a, 0x5d, 0xdd, 0xd2, 0x49, 0x24, - 0x9d, 0xf7, 0x7c, 0x7c, 0x59, 0xf0, 0x45, 0xdd, 0xdc, 0xf8, 0x2b, 0xad, 0x67, 0xc6, 0x8d, 0x87, - 0xf1, 0xa7, 0xa9, 0xa7, 0x3e, 0x08, 0x4e, 0x7d, 0xfd, 0xf0, 0x4d, 0x8f, 0x7b, 0x1a, 0x06, 0xe9, - 0x13, 0x3b, 0xe1, 0xd2, 0x23, 0x25, 0x3e, 0x4a, 0x4f, 0x46, 0x7c, 0x48, 0xda, 0x29, 0xa6, 0xeb, - 0xff, 0x47, 0xaf, 0xa3, 0x15, 0x3e, 0x1e, 0x15, 0x15, 0xa4, 0x3c, 0xaf, 0xad, 0x0f, 0x28, 0x84, - 0x66, 0x6a, 0xab, 0xc7, 0x31, 0xef, 0x96, 0x8a, 0x30, 0xef, 0xf6, 0xbc, 0x29, 0xc9, 0xdd, 0x90, - 0xcd, 0xca, 0xdc, 0x67, 0xd1, 0xa3, 0x0e, 0x83, 0x7d, 0x76, 0x1e, 0x32, 0xa6, 0x25, 0xbf, 0x21, - 0xb3, 0xbc, 0x9b, 0x1d, 0x36, 0xd8, 0x63, 0x3f, 0xb6, 0xff, 0x85, 0x44, 0x36, 0x3e, 0x72, 0x9b, - 0xd8, 0xe3, 0x57, 0x5c, 0xc3, 0xfd, 0xd5, 0xd7, 0xc1, 0x58, 0x93, 0x7b, 0xbf, 0x49, 0xaa, 0x6c, - 0x6d, 0xb7, 0xc6, 0x16, 0x92, 0x49, 0x20, 0x92, 0x69, 0x84, 0x9a, 0x69, 0xa6, 0x4d, 0xe1, 0x27, - 0xe3, 0x45, 0x4b, 0x1e, 0xb5, 0xf1, 0xe3, 0x86, 0x70, 0x29, 0x90, 0x25, 0x5a, 0x17, 0x19, 0xec, - 0x55, 0x1b, 0xbf, 0xc1, 0xf7, 0xf1, 0x18, 0x43, 0xb1, 0x83, 0x38, 0x81, 0xc7, 0x49, 0x2f, 0x05, - 0xc5, 0xac, 0xbe, 0x4d, 0x78, 0x9c, 0x78, 0x52, 0xea, 0x94, 0x57, 0x6d, 0x82, 0xe8, 0x9e, 0xbb, - 0x9b, 0x5b, 0x79, 0xbb, 0x51, 0x7c, 0x60, 0x9a, 0x63, 0x94, 0x49, 0x98, 0xdd, 0xf5, 0xab, 0x4e, - 0x87, 0x15, 0xbf, 0x82, 0x99, 0xf2, 0xa6, 0xb1, 0xaf, 0xdd, 0x75, 0x37, 0x0a, 0xf9, 0xe4, 0x89, - 0xf1, 0xf4, 0x32, 0xb1, 0x43, 0x4d, 0xec, 0x4e, 0xc4, 0x97, 0x11, 0x08, 0x47, 0x0d, 0x8e, 0xc6, - 0xd3, 0xed, 0x1b, 0x32, 0xb5, 0xaf, 0x04, 0x24, 0xb6, 0x9d, 0xdf, 0x08, 0x95, 0x52, 0x27, 0x39, - 0xe7, 0x7d, 0xa7, 0x26, 0x76, 0xfe, 0x2b, 0xba, 0x6b, 0x5f, 0x8b, 0x35, 0xed, 0x1e, 0xd8, 0x4f, - 0x32, 0xca, 0x78, 0xc2, 0xdd, 0xa6, 0xb5, 0x56, 0xca, 0xdf, 0x8d, 0x6a, 0xfe, 0xda, 0xc2, 0xf1, - 0x85, 0x09, 0xd4, 0xee, 0xb9, 0x7e, 0x62, 0xc8, 0xeb, 0x5b, 0x22, 0xfa, 0x99, 0xdb, 0x85, 0xfd, - 0x3b, 0x26, 0x50, 0xfd, 0x37, 0x1f, 0xf2, 0xff, 0x78, 0x52, 0xea, 0x2e, 0xb3, 0x0e, 0x1b, 0x4d, - 0x14, 0x78, 0xa5, 0x78, 0xc4, 0x57, 0x14, 0x69, 0xf6, 0xfc, 0x54, 0xfb, 0x86, 0xeb, 0x75, 0xb2, - 0xde, 0xc0, 0x08, 0x80, 0xdf, 0x0f, 0x92, 0xda, 0xe3, 0x12, 0x53, 0xce, 0x71, 0x98, 0x3b, 0xd1, - 0xf4, 0x2d, 0x35, 0xf6, 0xcf, 0xbf, 0x8c, 0x18, 0xcf, 0xd4, 0xda, 0x93, 0x2d, 0xc4, 0x17, 0x77, - 0x7f, 0x33, 0x7c, 0x3c, 0x5d, 0xb5, 0xcb, 0x42, 0xd1, 0x2b, 0xed, 0xb5, 0x36, 0x7f, 0x82, 0x92, - 0xd2, 0x46, 0x8f, 0x3e, 0x17, 0x6a, 0xdb, 0x76, 0xf8, 0x54, 0x8e, 0xf1, 0xd8, 0xc0, 0x7d, 0xeb, - 0x18, 0xda, 0xc6, 0x11, 0x56, 0xae, 0x1c, 0x77, 0x3f, 0xe3, 0x70, 0x6d, 0x63, 0x31, 0xa4, 0x37, - 0x8e, 0x8a, 0x18, 0xee, 0x8a, 0x9b, 0x98, 0xc8, 0xbb, 0x65, 0xf4, 0xfd, 0x5b, 0xe5, 0x55, 0xbf, - 0x87, 0x68, 0xdc, 0x95, 0xb8, 0xdd, 0x96, 0x35, 0x17, 0xe5, 0x58, 0x48, 0xcc, 0x5b, 0x47, 0xa4, - 0x0b, 0xfc, 0x69, 0x12, 0x7b, 0x0d, 0xef, 0x86, 0xca, 0xfd, 0x22, 0x45, 0xe5, 0x38, 0xff, 0xa9, - 0xb6, 0x32, 0xf3, 0x56, 0x2f, 0xf0, 0xfd, 0x27, 0x52, 0xc8, 0x7e, 0x22, 0xb7, 0xce, 0x9a, 0x29, - 0xac, 0x38, 0x8e, 0x72, 0xd2, 0x4a, 0xa9, 0x9f, 0xa7, 0xf8, 0x7e, 0x47, 0x3c, 0x88, 0xc6, 0x1c, - 0xe6, 0x42, 0x3a, 0xe7, 0xca, 0x93, 0xaf, 0xf2, 0x78, 0xab, 0xf0, 0x50, 0x5b, 0xad, 0xb7, 0x3d, - 0x78, 0xbe, 0x1e, 0xaa, 0x9f, 0x1f, 0x8d, 0x35, 0xd9, 0xb3, 0x66, 0x7a, 0x4a, 0x4c, 0x97, 0x7f, - 0xe0, 0xbf, 0x77, 0xb3, 0x32, 0x27, 0x5b, 0xa9, 0x34, 0xd2, 0x5b, 0x00, 0x61, 0x50, 0xbf, 0xc6, - 0xda, 0x79, 0xe0, 0xef, 0x74, 0xf2, 0xfb, 0x34, 0x92, 0x2c, 0xd6, 0x25, 0xb2, 0xd8, 0x4b, 0xe5, - 0xff, 0x8d, 0x9a, 0xd6, 0xf9, 0xf7, 0xd2, 0x5c, 0x9e, 0xcf, 0x7e, 0x9c, 0xfe, 0xab, 0x62, 0xbc, - 0xd5, 0x09, 0xe6, 0xbf, 0x11, 0x0f, 0xf6, 0x63, 0xc6, 0xbd, 0x24, 0xb4, 0x92, 0x51, 0x29, 0xa1, - 0x29, 0xaa, 0x15, 0x0b, 0xf8, 0x44, 0x69, 0x77, 0x77, 0x77, 0x7d, 0x57, 0x2e, 0x17, 0x04, 0x00, - 0x02, 0x80, 0xe9, 0x15, 0x42, 0xa8, 0x1b, 0xa5, 0x95, 0xd2, 0xff, 0xc1, 0x1c, 0xfc, 0xd9, 0x54, - 0xe9, 0x57, 0x85, 0x37, 0x77, 0xbd, 0x6d, 0xd3, 0x36, 0x47, 0x51, 0xb5, 0x2a, 0xf0, 0x47, 0x3e, - 0x1f, 0x3c, 0x4a, 0xbd, 0x60, 0x55, 0x88, 0x9e, 0xff, 0x6d, 0xb6, 0xdb, 0xf0, 0xdd, 0xdf, 0xcf, - 0x16, 0xc5, 0xb4, 0x12, 0x0b, 0xfc, 0x14, 0x55, 0x7b, 0xa4, 0xb1, 0xfc, 0x48, 0x6e, 0x4c, 0xb7, - 0x22, 0x04, 0x54, 0xe9, 0x8b, 0x7f, 0xe1, 0xcb, 0x4d, 0x2d, 0x22, 0x4d, 0x32, 0x9a, 0x69, 0xaf, - 0xf0, 0xb5, 0x55, 0x55, 0x57, 0x7f, 0xb6, 0xdb, 0x6d, 0xf8, 0x2e, 0xbc, 0xea, 0xbb, 0xe1, 0xc4, - 0x50, 0xc4, 0xf5, 0x7b, 0x6d, 0xb6, 0xdf, 0xf8, 0x40, 0x6a, 0xe3, 0xa0, 0x7e, 0x64, 0x86, 0x8b, - 0x42, 0x80, 0x3f, 0x9b, 0x6d, 0xb6, 0xfc, 0x16, 0x77, 0x7d, 0xdf, 0x77, 0x4a, 0xbd, 0x7c, 0x7d, - 0x47, 0x6f, 0x85, 0xe8, 0xc9, 0x45, 0x7b, 0x0d, 0x34, 0xd9, 0x63, 0x46, 0x45, 0x92, 0x74, 0x10, - 0xcc, 0x4b, 0x4c, 0xff, 0x8d, 0x35, 0x04, 0x76, 0xf1, 0x89, 0xd1, 0x99, 0x9f, 0x0c, 0xb7, 0x6b, - 0x4f, 0xfa, 0xc3, 0x77, 0xb2, 0xb7, 0xbf, 0xf8, 0x50, 0xaf, 0x39, 0x10, 0x6d, 0xa9, 0x53, 0x8d, - 0x98, 0xd2, 0x84, 0xcc, 0x91, 0x6c, 0x5b, 0x24, 0x5d, 0x5f, 0xbe, 0x14, 0xed, 0x2a, 0x59, 0x2a, - 0xd6, 0xca, 0x14, 0x79, 0xb4, 0x65, 0x21, 0xb6, 0xf6, 0x7c, 0x14, 0x88, 0x76, 0xe9, 0x21, 0xc7, - 0x15, 0xbd, 0x89, 0x93, 0x96, 0xd2, 0x3f, 0x18, 0x73, 0xfb, 0x2d, 0xed, 0xb1, 0xa1, 0xba, 0x74, - 0xcb, 0xee, 0xfe, 0x12, 0x9f, 0xc3, 0xa4, 0x81, 0xcb, 0x44, 0xbc, 0x69, 0x0c, 0xa2, 0x37, 0xac, - 0xe8, 0x2f, 0x64, 0x4c, 0x51, 0x90, 0xf5, 0x5e, 0x90, 0xf5, 0xe8, 0x95, 0x56, 0x9f, 0xf8, 0x29, - 0xdd, 0x26, 0x52, 0xc1, 0x3d, 0xd3, 0xa6, 0x60, 0x7c, 0x61, 0xd5, 0x26, 0xa7, 0xcf, 0x49, 0xd5, - 0x52, 0x4b, 0xf0, 0xa1, 0xce, 0xa4, 0xc4, 0x73, 0x73, 0xde, 0xde, 0xba, 0xc4, 0xbe, 0x46, 0x18, - 0xe0, 0xd4, 0x7a, 0x0f, 0x2b, 0x09, 0xdf, 0x8c, 0xf3, 0x52, 0x72, 0x55, 0x2b, 0x0b, 0x68, 0xd6, - 0x35, 0xb7, 0x54, 0xba, 0x17, 0xc6, 0x55, 0xe0, 0xa3, 0x93, 0x31, 0xdb, 0x95, 0x7b, 0x78, 0x91, - 0x5d, 0x34, 0xe5, 0xa3, 0x03, 0xfc, 0x15, 0x08, 0xdd, 0x92, 0x96, 0x48, 0xe2, 0x4d, 0x3f, 0x2f, - 0x84, 0x3c, 0xb9, 0x26, 0x22, 0xc5, 0xcb, 0xd3, 0x8f, 0xcc, 0x35, 0xd5, 0x5f, 0xc5, 0x11, 0x53, - 0x23, 0x1d, 0xd3, 0x6f, 0xc1, 0x50, 0xaa, 0xd1, 0x67, 0xc6, 0xc9, 0xdf, 0xb3, 0xcf, 0x2a, 0x2c, - 0xf8, 0x50, 0xb1, 0xc5, 0x86, 0xd8, 0xb6, 0xb5, 0xc7, 0x24, 0x6c, 0x9f, 0xdc, 0x6a, 0x29, 0x85, - 0xf0, 0x4c, 0x7d, 0x5d, 0xb0, 0xda, 0x2d, 0x45, 0x44, 0x2e, 0xb4, 0x70, 0x90, 0x0e, 0xbe, 0x10, - 0xaf, 0x6a, 0xe8, 0xbc, 0x62, 0xb4, 0x7c, 0xb2, 0x54, 0x3a, 0xd9, 0x46, 0xea, 0x12, 0xa3, 0xe3, - 0x6a, 0x46, 0x5f, 0x19, 0x0d, 0x8b, 0x30, 0xe5, 0x42, 0x0d, 0x70, 0x8f, 0x74, 0xde, 0xd8, 0x35, - 0xed, 0x38, 0xb6, 0xe8, 0x6f, 0x31, 0xb3, 0x98, 0xb4, 0x83, 0xe3, 0x09, 0x3d, 0x2c, 0x0e, 0x5c, - 0x62, 0x66, 0x22, 0xc9, 0x1a, 0x1d, 0x7c, 0xdf, 0x4e, 0xfc, 0x3c, 0x2a, 0x6f, 0x70, 0xe6, 0xe2, - 0xe9, 0x2a, 0x8f, 0x1c, 0x19, 0x4a, 0xc2, 0x63, 0x2c, 0x7f, 0x7f, 0xe0, 0xbe, 0x5a, 0xa2, 0xdc, - 0x47, 0x1a, 0x21, 0xda, 0xed, 0xa5, 0xd7, 0x90, 0xbf, 0xc2, 0x9b, 0x49, 0x33, 0x97, 0xbd, 0x23, - 0xdc, 0x4d, 0xbd, 0xe7, 0x99, 0xcb, 0xe1, 0x42, 0xec, 0xfc, 0x69, 0x9a, 0xaf, 0x9a, 0x69, 0x7d, - 0xd5, 0x9e, 0xbe, 0x37, 0x36, 0x1e, 0x11, 0x9e, 0xbc, 0xb8, 0xcc, 0x52, 0xac, 0xfb, 0x75, 0xd5, - 0xa4, 0xb4, 0xc5, 0xb4, 0xff, 0xc5, 0xd9, 0x9e, 0x8d, 0xe6, 0xa9, 0xe6, 0xbf, 0x84, 0xef, 0xa5, - 0x4d, 0x7e, 0x12, 0xd2, 0x3d, 0xbe, 0x6d, 0xa1, 0xb7, 0xf1, 0x96, 0x6c, 0xf7, 0x7c, 0xd9, 0xdc, - 0xb1, 0xde, 0xba, 0xf8, 0x68, 0xad, 0x57, 0xab, 0x69, 0xa6, 0x9f, 0xf8, 0xeb, 0x2a, 0xca, 0xbc, - 0x20, 0x6b, 0xef, 0x74, 0x52, 0x3e, 0x6c, 0x66, 0xdf, 0x24, 0xff, 0x4d, 0x3f, 0x19, 0x1c, 0x9d, - 0x6e, 0x65, 0xb7, 0x59, 0xb5, 0xb5, 0x59, 0x9c, 0xfa, 0x76, 0x1d, 0xfd, 0xda, 0xf0, 0x55, 0xcf, - 0x4e, 0xfa, 0x3e, 0x87, 0x8b, 0xaf, 0x69, 0xa4, 0x8b, 0xcf, 0x2a, 0x7c, 0x2b, 0x96, 0x4b, 0x97, - 0xfe, 0x0a, 0xad, 0x32, 0x68, 0xd1, 0x1e, 0x55, 0x6a, 0xed, 0xcd, 0x36, 0xd8, 0x3b, 0x9f, 0x09, - 0xdd, 0x9e, 0x8c, 0x96, 0x5a, 0x2d, 0x68, 0xf0, 0x41, 0x69, 0xa2, 0x77, 0x46, 0x93, 0x89, 0x38, - 0x94, 0xc2, 0xa0, 0xcb, 0x58, 0xbe, 0x9a, 0x69, 0xa7, 0xe0, 0xae, 0xad, 0x4b, 0x54, 0xcc, 0x4b, - 0xe6, 0xd2, 0x27, 0xc1, 0x05, 0x36, 0xcd, 0xaf, 0xd4, 0x66, 0xd8, 0x70, 0xea, 0xd2, 0xb9, 0xc5, - 0x58, 0xab, 0xff, 0x0c, 0x6d, 0x4f, 0xbb, 0x31, 0xde, 0x62, 0xea, 0xd3, 0x5f, 0xe3, 0x2b, 0x9a, - 0x59, 0x23, 0xa5, 0xb5, 0xa4, 0xd9, 0x29, 0xe0, 0xa0, 0xa6, 0xa8, 0xff, 0xd4, 0x72, 0xae, 0x6e, - 0x3e, 0xfd, 0xf0, 0xa5, 0xd0, 0xee, 0x8c, 0xb4, 0x67, 0x4c, 0x9a, 0xdf, 0xbb, 0x70, 0xe7, 0x1f, - 0x8f, 0x20, 0x99, 0x1d, 0x78, 0xcb, 0x33, 0xc7, 0x2e, 0x97, 0x4f, 0xaf, 0xd3, 0xd1, 0x61, 0x8c, - 0xe9, 0xbe, 0x37, 0x9f, 0x82, 0xda, 0xaa, 0xaa, 0xbe, 0xed, 0xf0, 0x57, 0xa7, 0x4c, 0x90, 0x5e, - 0xa7, 0x7a, 0x1a, 0x9e, 0x51, 0xc5, 0xf1, 0x93, 0x63, 0xb0, 0xf8, 0xa9, 0x5d, 0x1f, 0x19, 0xc1, - 0x7b, 0xfb, 0x3b, 0xbe, 0xa0, 0xef, 0x4e, 0x17, 0x8d, 0x8d, 0x2c, 0xbb, 0xbb, 0x13, 0xc7, 0xa6, - 0xf7, 0x23, 0xe3, 0x43, 0x61, 0x37, 0x1c, 0xa6, 0x9a, 0x69, 0xff, 0x8d, 0xb1, 0x29, 0xd9, 0xb4, - 0x92, 0x77, 0xa9, 0xa2, 0x51, 0x94, 0x77, 0x61, 0x2e, 0x26, 0x5f, 0x97, 0x4b, 0xbe, 0x14, 0x32, - 0x51, 0x99, 0x79, 0x92, 0xf3, 0x47, 0x26, 0x5b, 0x6f, 0x53, 0xc0, 0xdd, 0xf0, 0xa4, 0xcc, 0x52, - 0xcb, 0xed, 0x4f, 0x87, 0x84, 0x2a, 0x4d, 0x52, 0xb6, 0x66, 0xf1, 0x20, 0xab, 0x13, 0xbd, 0x0b, - 0x8a, 0xa8, 0xd9, 0x97, 0x13, 0x75, 0x49, 0x7c, 0x14, 0xd7, 0x69, 0xa4, 0x6c, 0x72, 0x4c, 0xdc, - 0xf9, 0xbb, 0xc4, 0x82, 0xb1, 0x1e, 0x79, 0x9e, 0x8b, 0xcc, 0x9a, 0x8e, 0x0d, 0x2b, 0x37, 0x3e, - 0x14, 0x1b, 0x2a, 0xa4, 0x2b, 0xe3, 0x68, 0x57, 0xa4, 0x9e, 0x91, 0x37, 0x35, 0xf1, 0x9d, 0x53, - 0x1f, 0x55, 0xd6, 0x26, 0x8e, 0x9d, 0x39, 0xda, 0x7d, 0x73, 0x7c, 0x3a, 0x47, 0x62, 0x7b, 0x79, - 0x65, 0x34, 0x87, 0x53, 0x0e, 0x6c, 0x1e, 0xbe, 0x6e, 0xff, 0x85, 0x23, 0xf9, 0xc7, 0x5a, 0x63, - 0xff, 0xfc, 0xfc, 0xe4, 0x1d, 0xd9, 0x53, 0x97, 0xc7, 0x5f, 0x6e, 0xf6, 0xdc, 0xec, 0x3b, 0x99, - 0xf0, 0x99, 0x72, 0x12, 0x21, 0x24, 0x32, 0xe9, 0x18, 0x7d, 0x7c, 0x64, 0xbd, 0xfd, 0x24, 0xee, - 0x9f, 0x6c, 0x9a, 0xdd, 0xf8, 0xc2, 0xbb, 0xad, 0xda, 0x3b, 0x10, 0xe2, 0xa4, 0x88, 0xec, 0x6f, - 0x61, 0xfc, 0x15, 0x08, 0x6e, 0x9d, 0x38, 0x63, 0x72, 0x8e, 0x8e, 0x76, 0x1d, 0xfe, 0x14, 0x39, - 0xb1, 0xa8, 0x51, 0xef, 0xb8, 0x87, 0x35, 0x5e, 0x7d, 0x43, 0xb4, 0x81, 0xac, 0x73, 0xe0, 0xaf, - 0x1b, 0xca, 0x19, 0xe1, 0x06, 0xc9, 0x14, 0x6a, 0x2e, 0x64, 0x10, 0x1d, 0x5c, 0x29, 0x76, 0x9c, - 0xcc, 0x17, 0xa1, 0x53, 0xc8, 0xda, 0xc8, 0xdd, 0x7c, 0x1e, 0x86, 0x7e, 0xa6, 0xc3, 0xfc, 0x28, - 0x22, 0xb6, 0xf4, 0xf6, 0x6a, 0xd8, 0xfe, 0x38, 0x34, 0x34, 0x97, 0xd9, 0xf0, 0xa0, 0x95, 0xa7, - 0x15, 0xf7, 0xab, 0x70, 0xa5, 0x38, 0x34, 0x4d, 0xc5, 0x65, 0x6a, 0x4a, 0xd3, 0x01, 0xc5, 0xb5, - 0x68, 0x4b, 0xda, 0x25, 0xfe, 0x14, 0x25, 0x09, 0x9a, 0xec, 0x35, 0x9e, 0xda, 0x44, 0xd3, 0xee, - 0xe7, 0xd4, 0xb5, 0x16, 0x07, 0xce, 0x22, 0x30, 0x49, 0x0d, 0x44, 0xa8, 0xd0, 0xe3, 0x64, 0x27, - 0x87, 0x4d, 0x3f, 0x24, 0xa2, 0x44, 0xd3, 0xa9, 0x18, 0x8d, 0x73, 0xca, 0x07, 0xaf, 0x8e, 0x22, - 0x08, 0x94, 0x96, 0x4f, 0x2d, 0x1e, 0x18, 0xac, 0xb6, 0x5a, 0x16, 0xf1, 0x31, 0x85, 0xae, 0xb9, - 0xfa, 0x4e, 0xfc, 0xa8, 0x27, 0x70, 0xb1, 0x8a, 0x15, 0x7c, 0x2c, 0x09, 0xf7, 0x32, 0x9f, 0x82, - 0xb3, 0x34, 0xdb, 0xd5, 0xcd, 0xfc, 0xcf, 0x74, 0xc3, 0xe3, 0x44, 0x28, 0xba, 0xd3, 0x36, 0x45, - 0x5a, 0x49, 0x37, 0x5a, 0xa8, 0xd4, 0xd9, 0x1d, 0x3e, 0xe9, 0xbd, 0x3f, 0x0f, 0x69, 0xcf, 0x04, - 0x66, 0xaf, 0x18, 0xd2, 0xbd, 0x73, 0x7f, 0x8e, 0x1c, 0x75, 0x7f, 0xf0, 0x56, 0x73, 0xce, 0xa1, - 0x0f, 0x6e, 0xa4, 0xdf, 0x11, 0x30, 0x9b, 0x5f, 0x5f, 0x17, 0xcd, 0x16, 0x47, 0xcd, 0x5f, 0x0d, - 0xc1, 0xd9, 0xa3, 0x95, 0x1c, 0xed, 0x1a, 0xb9, 0x60, 0xed, 0x87, 0xf8, 0x7e, 0x68, 0xb6, 0x95, - 0xa6, 0x9a, 0x68, 0xb9, 0xaa, 0x47, 0x13, 0x73, 0x71, 0xf7, 0x67, 0xff, 0x19, 0x50, 0xe3, 0xfb, - 0xc6, 0xd8, 0x27, 0xcd, 0x21, 0xfe, 0xb3, 0x8a, 0x66, 0xd1, 0x78, 0xb9, 0xe1, 0x7c, 0x91, 0x33, - 0x66, 0x97, 0xc2, 0x93, 0xf7, 0xb7, 0xa6, 0x9c, 0xfb, 0x6f, 0x43, 0xbe, 0x5f, 0x19, 0x5b, 0x48, - 0xb8, 0xc6, 0x56, 0xc5, 0x04, 0x9d, 0x06, 0xdb, 0x7a, 0x21, 0xa9, 0xaf, 0x18, 0x55, 0xd0, 0xd1, - 0x9b, 0x96, 0x27, 0xf1, 0xb4, 0x36, 0x4d, 0x45, 0x9a, 0xf9, 0x63, 0xf1, 0x58, 0xd4, 0x13, 0x6a, - 0xe8, 0xd6, 0xd1, 0x33, 0xc2, 0x9d, 0x93, 0x9f, 0x51, 0x2e, 0x1c, 0xab, 0x19, 0xe9, 0xb5, 0x4d, - 0x9b, 0xbb, 0x9f, 0x0d, 0x93, 0x21, 0x05, 0x6a, 0xcd, 0x66, 0xc5, 0x17, 0xf8, 0x63, 0x97, 0x1b, - 0xd4, 0xae, 0x5c, 0xba, 0xdf, 0xf8, 0x4a, 0x7c, 0xf5, 0xbe, 0xd9, 0xf8, 0x7e, 0xf6, 0xd5, 0x12, - 0xd8, 0x39, 0xa8, 0x96, 0xbe, 0xdb, 0x69, 0xa7, 0xe0, 0x92, 0xc7, 0x8c, 0x5b, 0x17, 0xc1, 0x5d, - 0xdf, 0x2e, 0xdb, 0x52, 0xd6, 0x9a, 0x34, 0x79, 0x7c, 0x6e, 0xa9, 0x57, 0x60, 0xd2, 0xb7, 0x19, - 0xe7, 0x4f, 0x27, 0x56, 0xdb, 0x4d, 0x3f, 0xf0, 0x4b, 0xc6, 0xda, 0x15, 0xb4, 0x2c, 0xae, 0xf2, - 0xef, 0x41, 0xf0, 0xce, 0xe3, 0xb7, 0x57, 0x05, 0x7d, 0x04, 0xda, 0xff, 0xc6, 0xda, 0x6b, 0x7e, - 0x17, 0x9a, 0xb1, 0xd1, 0x24, 0x59, 0x46, 0x9b, 0x37, 0x2a, 0xcb, 0x0c, 0x90, 0xcd, 0x55, 0x7f, - 0x85, 0x78, 0x9a, 0x54, 0x70, 0xe5, 0xd6, 0xa0, 0x8a, 0x66, 0x2d, 0xff, 0x87, 0xaa, 0x9b, 0x27, - 0x8c, 0xac, 0x51, 0x97, 0x76, 0x9a, 0xd5, 0xdc, 0xbd, 0xff, 0xfc, 0x3b, 0xf1, 0xa4, 0x57, 0xea, - 0x32, 0xb5, 0xf7, 0x31, 0x44, 0x93, 0x67, 0x49, 0x4d, 0x14, 0xd4, 0x51, 0x7f, 0x82, 0x02, 0x36, - 0x4d, 0xab, 0x3d, 0x92, 0xc9, 0x65, 0xc2, 0xe6, 0x31, 0xe7, 0x05, 0x34, 0xd6, 0x97, 0xf8, 0x47, - 0x2f, 0x1d, 0xd6, 0x25, 0x4a, 0xaf, 0x6d, 0x3f, 0x19, 0xaa, 0xae, 0x99, 0xeb, 0x6c, 0xf5, 0x35, - 0x6b, 0x8e, 0x7f, 0x6f, 0xc6, 0xe7, 0xc8, 0x6e, 0xaf, 0xbe, 0xd3, 0x2b, 0x56, 0x4e, 0x96, 0x62, - 0x43, 0x8f, 0xf6, 0xdc, 0xdd, 0x7c, 0x21, 0x54, 0x4c, 0xae, 0xcd, 0xb4, 0x4e, 0xda, 0x7f, 0x1e, - 0x52, 0xd8, 0xc5, 0xa9, 0x44, 0xfc, 0x79, 0x0f, 0x97, 0xcb, 0xfc, 0x10, 0xf4, 0xdb, 0xd9, 0xf0, - 0xe8, 0x85, 0x1a, 0x54, 0xdc, 0x41, 0x9c, 0x0d, 0xb1, 0x85, 0x8a, 0x34, 0x06, 0xcf, 0x8a, 0xe2, - 0xb7, 0xf1, 0x83, 0x6c, 0x4a, 0x46, 0x25, 0xa9, 0x5a, 0x1b, 0xe8, 0x6a, 0x9f, 0x8f, 0x33, 0x66, - 0xff, 0x63, 0x7c, 0xd8, 0xd7, 0x87, 0x4e, 0x35, 0x00, 0x84, 0xd3, 0x1e, 0xa7, 0x7c, 0x4d, 0x3b, - 0x99, 0x96, 0x9f, 0x6a, 0xbf, 0xe0, 0x96, 0xab, 0x94, 0x3a, 0xd8, 0xa1, 0xb5, 0x51, 0x11, 0x47, - 0x0a, 0x44, 0xf8, 0x2a, 0xb0, 0x79, 0xda, 0x47, 0x15, 0x93, 0xb0, 0xc6, 0xd1, 0x8e, 0x40, 0x5c, - 0xd5, 0x5a, 0x33, 0x26, 0x3e, 0x0b, 0x88, 0x2b, 0x15, 0xb4, 0x7c, 0x6a, 0xd3, 0x47, 0x5f, 0xc6, - 0x1d, 0x3b, 0x6a, 0x9a, 0x6d, 0xb6, 0xef, 0x72, 0xe3, 0x33, 0xf8, 0x8b, 0x43, 0xea, 0xd3, 0xf5, - 0xdb, 0x53, 0xb4, 0xfe, 0x78, 0x2c, 0x32, 0x4d, 0xed, 0x35, 0xea, 0x99, 0x67, 0xf8, 0xc2, 0xc3, - 0x49, 0x34, 0xd9, 0xbb, 0xb2, 0x0c, 0x5c, 0x47, 0x2b, 0x4d, 0x99, 0xaa, 0xb8, 0xca, 0x06, 0x81, - 0xa4, 0x95, 0xee, 0xef, 0x19, 0x56, 0x9e, 0x37, 0xf0, 0x52, 0x22, 0xdb, 0xf7, 0xbf, 0x69, 0x95, - 0xcf, 0x2f, 0xc1, 0x11, 0xcb, 0x2b, 0x77, 0xf8, 0xe2, 0x86, 0xae, 0xab, 0x04, 0x08, 0x7f, 0x0e, - 0x06, 0x08, 0x6a, 0x0c, 0xb8, 0x58, 0xfd, 0x24, 0x5c, 0x6c, 0xcb, 0xc6, 0x12, 0x0d, 0x42, 0x55, - 0x1d, 0xa3, 0x5a, 0x94, 0x7a, 0xe2, 0x9d, 0x1d, 0xa3, 0x9c, 0x6d, 0x1c, 0xe9, 0x35, 0xf0, 0xa5, - 0x98, 0xa3, 0x93, 0x7b, 0x48, 0x6a, 0xa9, 0x73, 0x65, 0xcf, 0x6e, 0x4a, 0xe4, 0x75, 0x7c, 0x66, - 0x98, 0x71, 0x72, 0x04, 0x10, 0x14, 0x94, 0xe2, 0x07, 0xc3, 0xbd, 0x5d, 0xcd, 0xdc, 0x91, 0x73, - 0xb4, 0x3f, 0x18, 0x5c, 0x94, 0x75, 0x20, 0x4a, 0x19, 0x7f, 0x4c, 0x8c, 0x39, 0x8a, 0x54, 0xbc, - 0x29, 0x4d, 0x3e, 0xee, 0x6e, 0xba, 0x6f, 0xd3, 0x17, 0x27, 0xc5, 0x5d, 0x8f, 0x2b, 0xe8, 0x7f, - 0x0f, 0x0c, 0xd5, 0x36, 0x95, 0x5d, 0xd6, 0x6d, 0x64, 0x1b, 0x99, 0x95, 0xe9, 0x6e, 0x1a, 0xcb, - 0x7f, 0xe1, 0xf2, 0xf3, 0xb1, 0xc2, 0x7c, 0xee, 0x6a, 0xc6, 0x65, 0x2e, 0x00, 0x45, 0x94, 0xc7, - 0xb2, 0x22, 0x9a, 0xdf, 0x3e, 0x1f, 0xf8, 0x27, 0xa2, 0x5a, 0x09, 0x62, 0x5f, 0x91, 0x67, 0xc2, - 0x25, 0x31, 0x0b, 0x47, 0xb7, 0xf1, 0xea, 0x3f, 0xb9, 0x88, 0x3d, 0xd8, 0xdf, 0xc6, 0xd1, 0x90, - 0x9b, 0x18, 0x74, 0x5b, 0x0c, 0x9e, 0x4f, 0x6f, 0x95, 0x84, 0xf9, 0xcb, 0x56, 0x44, 0xff, 0xe0, - 0xaa, 0x5c, 0x8a, 0x8d, 0x23, 0x36, 0x5e, 0xda, 0xb6, 0x32, 0xbc, 0x76, 0xf8, 0x68, 0x88, 0x66, - 0xe9, 0x51, 0xc1, 0x4e, 0x99, 0x6b, 0xfe, 0x14, 0xb2, 0x69, 0x94, 0x86, 0xb5, 0xba, 0xd1, 0x26, - 0x78, 0xb4, 0xe9, 0x31, 0xf0, 0x58, 0x54, 0xa1, 0x2a, 0xa4, 0x92, 0xaa, 0xec, 0xec, 0x74, 0x76, - 0x7c, 0x69, 0x25, 0x9a, 0x35, 0x9d, 0x06, 0xda, 0xc2, 0xd1, 0x5c, 0x9d, 0x23, 0x65, 0x5e, 0xb9, - 0xf9, 0xbf, 0xf8, 0x53, 0x49, 0x9b, 0x34, 0xf3, 0xd5, 0x9a, 0x49, 0x79, 0x37, 0x7f, 0x82, 0x1b, - 0xda, 0xe7, 0xf8, 0x78, 0x91, 0x25, 0x9a, 0x06, 0x35, 0xe5, 0x63, 0x4a, 0xfd, 0x34, 0xd3, 0x4f, - 0xc2, 0x95, 0xf7, 0xdd, 0x5e, 0xfa, 0x53, 0xd2, 0x2b, 0x0d, 0xd9, 0x31, 0xd5, 0x2b, 0x3f, 0x7c, - 0x29, 0xa7, 0xab, 0x33, 0xde, 0x5c, 0x8a, 0xb6, 0xc3, 0x4f, 0x9b, 0xf6, 0xa3, 0x7c, 0x29, 0x1e, - 0xf3, 0xef, 0x5c, 0x94, 0xed, 0x21, 0xb1, 0xd2, 0xbe, 0x6f, 0x8c, 0xcf, 0xed, 0xa3, 0x86, 0xf7, - 0x76, 0x39, 0x74, 0x69, 0x4d, 0xcf, 0xff, 0x1b, 0xed, 0xa4, 0x94, 0x77, 0x1d, 0x9c, 0x94, 0x75, - 0xba, 0xd9, 0xf5, 0xf6, 0xdb, 0x6d, 0xbf, 0x05, 0x13, 0x92, 0x39, 0x2c, 0x79, 0xa1, 0xe4, 0xab, - 0xaf, 0x2f, 0x82, 0xdc, 0xbe, 0x4e, 0x72, 0x47, 0x25, 0x8e, 0xfb, 0xdf, 0x1b, 0x9f, 0xa7, 0x5a, - 0xde, 0xce, 0x93, 0x67, 0xdc, 0xf4, 0x56, 0x7b, 0x6d, 0xb6, 0xdf, 0x86, 0xca, 0x69, 0x67, 0x82, - 0xe2, 0x1e, 0x23, 0xff, 0xc6, 0x4d, 0x44, 0x9e, 0x5e, 0x79, 0xed, 0xc9, 0xf6, 0x51, 0xbc, 0xfc, - 0x10, 0x1f, 0x2d, 0x0b, 0x42, 0xd8, 0x69, 0x1d, 0x6c, 0xf3, 0xea, 0xe6, 0x7d, 0x97, 0x5b, 0x6d, - 0xb6, 0xfc, 0x3f, 0x92, 0x0d, 0x33, 0x07, 0x79, 0x77, 0x17, 0x55, 0xbd, 0x00, 0xc5, 0x95, 0x5a, - 0xa1, 0x57, 0x56, 0xde, 0xdc, 0xdc, 0xfd, 0xdd, 0xff, 0xc1, 0x81, 0x8a, 0x42, 0xfb, 0x4e, 0x9a, - 0x77, 0x6a, 0xd7, 0x77, 0x76, 0xdb, 0xad, 0xbf, 0x1b, 0xd2, 0x49, 0x34, 0xea, 0xef, 0x91, 0xcd, - 0xcd, 0xbe, 0xdb, 0x6d, 0xb7, 0xe1, 0x4b, 0x6d, 0x52, 0x2c, 0x6b, 0xa7, 0x23, 0x35, 0x1a, 0x36, - 0xc4, 0x75, 0xa3, 0x46, 0xe6, 0x7c, 0x3b, 0xba, 0x69, 0x9b, 0x71, 0xbf, 0x8d, 0xbe, 0xb9, 0x43, - 0xb6, 0xff, 0xe1, 0x4d, 0xa1, 0x0f, 0x53, 0x93, 0xa2, 0xcb, 0xcb, 0x05, 0x78, 0x1e, 0xbd, 0x6b, - 0x57, 0xd8, 0x4c, 0xf8, 0x2a, 0x2d, 0xa6, 0xa7, 0xd7, 0x72, 0x10, 0x58, 0xd6, 0x3d, 0x8c, 0xdd, - 0xfc, 0x48, 0x2e, 0x22, 0x49, 0x65, 0x50, 0x4c, 0xdd, 0x3f, 0x89, 0x0a, 0x19, 0x10, 0x6d, 0xc6, - 0x6e, 0xdf, 0xdb, 0x8e, 0xba, 0x88, 0x78, 0xad, 0x6a, 0xfd, 0xf1, 0xc2, 0xdb, 0xb6, 0xa8, 0x2b, - 0x49, 0x32, 0x7b, 0xf8, 0xe9, 0xb1, 0xac, 0x9b, 0xd5, 0xb4, 0xda, 0xbf, 0xe1, 0x0e, 0xe6, 0xd4, - 0xe3, 0x7c, 0x8c, 0xb5, 0xf8, 0x2c, 0x98, 0x9a, 0x76, 0x1d, 0x91, 0xf2, 0xb3, 0xd2, 0xf3, 0xe1, - 0x7b, 0xe1, 0x4b, 0x63, 0xc3, 0x08, 0xfa, 0xd6, 0xc3, 0x7c, 0x9f, 0x08, 0x58, 0xcf, 0x9a, 0x7e, - 0x46, 0x56, 0x32, 0x32, 0xff, 0x1b, 0x32, 0xe4, 0x51, 0xb1, 0xbf, 0xc1, 0xed, 0xba, 0x5b, 0xa0, - 0xda, 0x1a, 0x79, 0x44, 0xbe, 0xaa, 0xab, 0xe1, 0x02, 0xb1, 0xbe, 0x35, 0x72, 0x0d, 0x95, 0x5d, - 0x09, 0xbb, 0x2b, 0x0f, 0xc2, 0x04, 0x54, 0xae, 0xe5, 0x67, 0x23, 0x14, 0x3f, 0x8c, 0x99, 0xab, - 0x27, 0x27, 0xab, 0x4c, 0x98, 0xcd, 0x93, 0x75, 0x5f, 0x05, 0x3d, 0xdd, 0xaa, 0xb1, 0x5d, 0xee, - 0xfb, 0xa4, 0xdf, 0xe3, 0x08, 0x9e, 0x9a, 0xcb, 0xfa, 0x4d, 0x16, 0x16, 0xcf, 0x5f, 0xc6, 0x63, - 0xb2, 0xaf, 0xf4, 0x9b, 0x93, 0xf1, 0xfc, 0xa3, 0x1d, 0xf2, 0x24, 0x14, 0x49, 0x18, 0xc7, 0xc2, - 0x87, 0x1d, 0x88, 0x86, 0x97, 0x5d, 0x25, 0x74, 0x18, 0x68, 0xad, 0xfb, 0x41, 0xaa, 0x84, 0x2c, - 0x1f, 0x05, 0xc2, 0xef, 0x17, 0xa1, 0x0c, 0xc4, 0x57, 0x80, 0xb7, 0xc2, 0x91, 0x76, 0x40, 0x62, - 0xa7, 0x70, 0xb3, 0x33, 0x3d, 0x59, 0xb6, 0x5a, 0x25, 0x89, 0x50, 0x98, 0xd1, 0x26, 0xc1, 0x04, - 0x89, 0xf0, 0xa4, 0xcb, 0xa3, 0xa5, 0x48, 0x25, 0xe0, 0x97, 0x24, 0x92, 0x16, 0xdd, 0x39, 0xa5, - 0x0e, 0xd1, 0xcc, 0xcf, 0xb6, 0x8d, 0xfb, 0xac, 0xb7, 0x76, 0xd9, 0x69, 0x5b, 0xb0, 0x89, 0xf0, - 0xa1, 0x61, 0x06, 0x1b, 0xa4, 0xb9, 0x1f, 0x4a, 0xea, 0x2c, 0x8d, 0xd3, 0xc4, 0xe3, 0xd0, 0x50, - 0x75, 0x34, 0x7b, 0x84, 0xdb, 0x5b, 0x88, 0xc7, 0xc2, 0x84, 0xa4, 0x67, 0xc2, 0x53, 0x42, 0xfb, - 0x84, 0x37, 0x78, 0xf6, 0xb8, 0xeb, 0x5c, 0xd0, 0xf9, 0x55, 0x50, 0xc9, 0xb9, 0x31, 0xf1, 0x98, - 0x6e, 0x61, 0xd1, 0xad, 0xc7, 0xfc, 0xed, 0xed, 0x9b, 0x84, 0xb0, 0xf7, 0x52, 0xe6, 0x2d, 0xb4, - 0xfc, 0x26, 0x5b, 0x25, 0xf4, 0xa5, 0xc3, 0x7f, 0x1d, 0xb7, 0x4f, 0x33, 0xca, 0xed, 0x26, 0xfc, - 0x61, 0x1b, 0x6f, 0x6d, 0x26, 0x4d, 0xc5, 0x6d, 0x9b, 0x6e, 0x6d, 0x2e, 0xfe, 0x34, 0x62, 0x54, - 0x3b, 0x49, 0x26, 0x83, 0x9f, 0xba, 0x19, 0x3c, 0xd1, 0xb5, 0x0e, 0x56, 0x30, 0x63, 0xbc, 0xcb, - 0x04, 0xf7, 0x2f, 0xf0, 0xa0, 0x95, 0x44, 0xd1, 0x25, 0xbb, 0x65, 0xeb, 0xd2, 0xe5, 0x61, 0xfe, - 0x11, 0xcb, 0x0a, 0x26, 0x93, 0xa8, 0x6d, 0x09, 0xb6, 0xe7, 0xe1, 0x0c, 0xdd, 0x17, 0x24, 0xd2, - 0xae, 0xec, 0x93, 0xf0, 0xa1, 0x23, 0xb8, 0x3c, 0xbc, 0xb8, 0x58, 0xf9, 0x6c, 0xcd, 0x83, 0x93, - 0xb5, 0xbb, 0xcb, 0xe3, 0x63, 0xb3, 0x51, 0xd5, 0x46, 0x5a, 0x96, 0x97, 0x0c, 0xb2, 0x5e, 0x3b, - 0x4d, 0xcf, 0x2c, 0x97, 0xe4, 0x18, 0x7b, 0x26, 0x7f, 0xe0, 0x98, 0xb4, 0xe5, 0x8c, 0xb1, 0x8e, - 0xc3, 0xbf, 0xc3, 0xbc, 0x77, 0xfb, 0x8a, 0xa6, 0x83, 0xac, 0xf5, 0x6c, 0x57, 0x15, 0xff, 0x87, - 0xe4, 0x8f, 0x0a, 0xd3, 0x4a, 0xd2, 0x28, 0xfa, 0x0e, 0x2c, 0x6f, 0xa1, 0xbf, 0xfe, 0x33, 0xcd, - 0x53, 0xc1, 0x74, 0x9b, 0xd5, 0x2b, 0x26, 0xd9, 0x78, 0x20, 0xee, 0xe5, 0x44, 0x8e, 0xb8, 0xdf, - 0x95, 0xfa, 0x9d, 0x36, 0x93, 0xa6, 0x9f, 0xfc, 0x6d, 0xdb, 0xf5, 0x73, 0xc3, 0x4c, 0xe4, 0x25, - 0x51, 0x05, 0x5b, 0x6c, 0x54, 0xde, 0xda, 0x69, 0xa6, 0x9f, 0x85, 0x35, 0x2e, 0x6b, 0x51, 0xd3, - 0x8b, 0x5a, 0x5c, 0xba, 0x94, 0x64, 0x07, 0xc3, 0x33, 0xcd, 0xc7, 0xf1, 0x54, 0x89, 0x91, 0xe2, - 0x78, 0x2f, 0xc7, 0xf8, 0x44, 0x99, 0xf1, 0x92, 0x49, 0x17, 0x56, 0x7f, 0x4a, 0x24, 0xbc, 0x16, - 0x6d, 0x13, 0xed, 0xea, 0x9b, 0xb5, 0x3d, 0xf0, 0xa4, 0xec, 0x41, 0xcb, 0xb4, 0x8d, 0x58, 0x9f, - 0xb9, 0x67, 0x73, 0x7f, 0x82, 0x1d, 0x35, 0x2c, 0x62, 0xf8, 0xd3, 0x95, 0x86, 0xf9, 0x99, 0x43, - 0x63, 0x83, 0x52, 0x5e, 0x0d, 0xdf, 0x6f, 0x6b, 0x1f, 0x8d, 0x57, 0xb6, 0xdb, 0x6d, 0xf8, 0xc2, - 0x73, 0x41, 0x92, 0xef, 0x4c, 0x76, 0xe5, 0x34, 0x92, 0x6b, 0xe1, 0xeb, 0x51, 0xb5, 0x98, 0xc6, - 0xf3, 0xf6, 0x74, 0xff, 0x79, 0x57, 0xff, 0x19, 0x95, 0x42, 0xdb, 0xdb, 0xad, 0xf3, 0x6e, 0x96, - 0xc8, 0xa5, 0x22, 0xf0, 0xa5, 0xf3, 0xe0, 0x33, 0x48, 0x7f, 0xfd, 0x22, 0x69, 0xaa, 0xab, 0x5e, - 0x37, 0xc7, 0xf2, 0xf8, 0x2c, 0xb4, 0x85, 0x66, 0x77, 0xc2, 0x5c, 0x1e, 0xbb, 0x99, 0xac, 0x72, - 0x7f, 0x1e, 0x7c, 0x29, 0xd5, 0x4f, 0x22, 0x51, 0xa4, 0x6b, 0x8f, 0xbb, 0x98, 0x85, 0xc4, 0x18, - 0x51, 0x44, 0x8b, 0xc3, 0xd4, 0x0c, 0x84, 0x14, 0x99, 0x8f, 0x8e, 0xa5, 0x61, 0x0e, 0x35, 0x6c, - 0xde, 0xbf, 0xe3, 0x66, 0xd8, 0xe8, 0x21, 0xa8, 0xfe, 0x94, 0x78, 0x79, 0x39, 0x05, 0xc5, 0x9d, - 0x74, 0x3a, 0x3c, 0x21, 0x94, 0xaf, 0xcb, 0x8f, 0x9c, 0x63, 0x06, 0x68, 0xd3, 0x67, 0xe3, 0xf7, - 0x77, 0x52, 0x62, 0x5e, 0xef, 0xe1, 0x41, 0x2a, 0x24, 0x53, 0xe1, 0xd8, 0x45, 0xc2, 0x39, 0x44, - 0x04, 0xa2, 0x02, 0xc1, 0x03, 0x44, 0xe9, 0xaf, 0x56, 0xfc, 0xf8, 0xdf, 0x05, 0x24, 0xad, 0x4f, - 0xae, 0x84, 0x6a, 0x74, 0x69, 0x3d, 0xb2, 0x5e, 0x20, 0x29, 0x32, 0x8c, 0xba, 0x27, 0xbc, 0xb2, - 0x95, 0x9b, 0x6c, 0x6e, 0x3b, 0x7c, 0x29, 0x6e, 0xd6, 0x21, 0xc8, 0x56, 0x38, 0x18, 0x8e, 0x06, - 0xaa, 0xc7, 0xf2, 0x0e, 0x3c, 0xcc, 0xbf, 0xc2, 0x86, 0x74, 0x17, 0x50, 0xff, 0x3f, 0xd9, 0x98, - 0x32, 0x61, 0xa0, 0xe3, 0x8c, 0x65, 0x70, 0xc2, 0xd3, 0x24, 0x99, 0x13, 0x71, 0x92, 0x2f, 0x0a, - 0x09, 0xa1, 0xc9, 0x8a, 0xb6, 0xe7, 0x62, 0xbd, 0x0d, 0xef, 0x4a, 0xbc, 0x15, 0xe6, 0xa4, 0x99, - 0xca, 0xa2, 0x53, 0x28, 0x6e, 0xe5, 0x45, 0x5e, 0x14, 0x95, 0x88, 0xca, 0xc2, 0xc8, 0xd1, 0x8b, - 0x2d, 0xa3, 0x19, 0x86, 0xe6, 0x13, 0xbe, 0xa3, 0xb9, 0xc9, 0xfb, 0xe0, 0x82, 0x34, 0x99, 0x2d, - 0x6f, 0x62, 0x0d, 0x0d, 0x8e, 0x0c, 0x72, 0xb9, 0xef, 0x99, 0xf4, 0xd3, 0x4d, 0x3f, 0x04, 0x14, - 0x11, 0xb0, 0x83, 0xd2, 0x49, 0x54, 0xf2, 0x63, 0xd8, 0xfb, 0xe9, 0x4f, 0xdb, 0xf0, 0x55, 0xbb, - 0x77, 0x5d, 0x79, 0xac, 0x64, 0xc2, 0x51, 0x94, 0xca, 0xbf, 0x82, 0x2a, 0x19, 0x98, 0x43, 0xc8, - 0x8d, 0xf0, 0x47, 0x74, 0x36, 0x32, 0xb0, 0x9d, 0x78, 0x92, 0x2a, 0xac, 0xb9, 0x6d, 0x7c, 0x23, - 0xa1, 0xbe, 0xd9, 0x63, 0xb5, 0x4c, 0xb5, 0xf1, 0x91, 0xe9, 0xad, 0x7c, 0xd6, 0x82, 0x4d, 0x31, - 0xfc, 0xb1, 0xdc, 0x8f, 0xe1, 0x45, 0x06, 0xe3, 0x5b, 0xf0, 0xa1, 0x6b, 0xdd, 0xed, 0x98, 0xcc, - 0x75, 0x9b, 0x60, 0xdc, 0x1b, 0x4e, 0xb8, 0x3a, 0x77, 0x88, 0x85, 0x38, 0x70, 0x58, 0xc5, 0xb7, - 0xf6, 0x60, 0xe5, 0x87, 0x41, 0xe8, 0xd0, 0x6c, 0x46, 0xac, 0x84, 0x18, 0xb7, 0x59, 0x01, 0x92, - 0xc6, 0x23, 0x1f, 0x08, 0xd0, 0x70, 0x0c, 0x78, 0x65, 0x79, 0xad, 0xf3, 0x62, 0xa0, 0x84, 0x2d, - 0xc9, 0x70, 0x42, 0xab, 0xab, 0xc6, 0x4b, 0xd1, 0xbc, 0x73, 0x07, 0x38, 0x38, 0xd0, 0xc6, 0x3d, - 0xb4, 0xec, 0x51, 0x8e, 0x1d, 0x1c, 0xd6, 0x92, 0xc1, 0x78, 0x62, 0xce, 0x50, 0xa2, 0x8c, 0x28, - 0x64, 0xf0, 0x55, 0x7b, 0x0b, 0xad, 0xd5, 0x08, 0xe8, 0xeb, 0xfa, 0xb3, 0x72, 0xe1, 0x84, 0xd2, - 0xe8, 0x36, 0x74, 0x6a, 0x7c, 0x98, 0xf8, 0x46, 0x6c, 0x51, 0xd5, 0x1c, 0x9d, 0xa7, 0xfa, 0x6c, - 0xc3, 0x28, 0xf6, 0x82, 0xdf, 0x51, 0xf8, 0xcb, 0x3c, 0x6c, 0x83, 0x3e, 0x25, 0xfb, 0x25, 0x1b, - 0xa5, 0xab, 0x9a, 0xbf, 0x84, 0x25, 0x6a, 0x19, 0x3c, 0xd3, 0x5f, 0x1b, 0xa8, 0xf7, 0x3c, 0x20, - 0x54, 0x51, 0xa5, 0xae, 0x75, 0x34, 0x9a, 0xfe, 0x32, 0x7b, 0xbd, 0x4f, 0xf7, 0x6f, 0x9f, 0x9f, - 0x1f, 0xf8, 0x48, 0x41, 0x11, 0x1e, 0x54, 0x4d, 0x2f, 0xe3, 0x4c, 0x30, 0x82, 0x26, 0x08, 0x0c, - 0x24, 0xdb, 0xee, 0x57, 0xcf, 0x48, 0x69, 0x31, 0x46, 0x70, 0x41, 0x3b, 0x72, 0xcf, 0xa4, 0x4a, - 0xb6, 0x17, 0xf8, 0x50, 0x4e, 0xa3, 0x8f, 0xdd, 0x46, 0x69, 0xcd, 0x3d, 0xaf, 0x6d, 0x09, 0xe4, - 0xda, 0xa1, 0xf6, 0x37, 0xcb, 0xe0, 0xbb, 0xa5, 0x4a, 0xc6, 0x6a, 0xbe, 0xb5, 0xf1, 0xb1, 0x8a, - 0xd7, 0x26, 0xb1, 0x94, 0xca, 0x6a, 0x03, 0x49, 0xac, 0xc0, 0x75, 0x4b, 0xe8, 0xf8, 0x5b, 0xfc, - 0xad, 0x5b, 0x15, 0x7f, 0xe3, 0x08, 0xd2, 0x66, 0xcd, 0x8c, 0xad, 0x45, 0x55, 0x24, 0x4c, 0x8b, - 0x0a, 0x69, 0x22, 0xf0, 0x59, 0x9e, 0x8d, 0x66, 0xc5, 0xb4, 0x4f, 0xa5, 0x17, 0xc3, 0xf6, 0x7b, - 0xd0, 0xd8, 0xd2, 0x65, 0x26, 0x25, 0x12, 0xa6, 0x5f, 0xff, 0x8d, 0xe5, 0xcc, 0x4d, 0xf1, 0xe6, - 0x55, 0x48, 0x9b, 0x1a, 0xf6, 0xc5, 0xbf, 0xf0, 0x81, 0x52, 0x39, 0x0e, 0x96, 0xe1, 0xec, 0x63, - 0x0e, 0xe4, 0x27, 0xe0, 0xb4, 0x8a, 0xb1, 0x5a, 0xdf, 0xaf, 0x97, 0xc2, 0x27, 0x63, 0x3c, 0x30, - 0xcb, 0x7b, 0x53, 0x56, 0x6a, 0x95, 0xd4, 0xde, 0x39, 0x71, 0xbe, 0xfc, 0x29, 0xda, 0x68, 0xb9, - 0x7b, 0xc1, 0xd0, 0xce, 0xc1, 0x69, 0xc9, 0x08, 0x31, 0x7c, 0x66, 0x3e, 0x32, 0x7d, 0xb7, 0x99, - 0x28, 0xcd, 0xde, 0x59, 0x50, 0xde, 0xe8, 0xe3, 0xf0, 0x53, 0xb8, 0x0d, 0x3d, 0xbb, 0xc9, 0x5a, - 0xd7, 0xaf, 0x8d, 0xe4, 0xea, 0x88, 0xfa, 0x46, 0xd6, 0xe5, 0x10, 0x2c, 0xa1, 0x5b, 0x0e, 0x1b, - 0xb4, 0x31, 0x6d, 0xb6, 0xdb, 0xff, 0x0b, 0x4f, 0x06, 0x65, 0x2f, 0xad, 0x57, 0xd3, 0x4d, 0x34, - 0xfc, 0x11, 0x19, 0xa6, 0x6d, 0xb1, 0x92, 0x6f, 0x82, 0xeb, 0xeb, 0xd7, 0x2c, 0x6d, 0xac, 0x4c, - 0xfc, 0x15, 0x76, 0x90, 0xc3, 0xad, 0xd9, 0x29, 0xb8, 0x6f, 0xcc, 0xfb, 0x8d, 0xf0, 0xec, 0xb5, - 0x07, 0xfe, 0x97, 0x51, 0x35, 0xad, 0x5b, 0x2e, 0xb3, 0x6a, 0xb2, 0x74, 0xff, 0xc3, 0xfb, 0xa2, - 0x4c, 0x7b, 0x13, 0xe5, 0xe5, 0xfd, 0x6e, 0x99, 0x7f, 0xf8, 0x2f, 0xd3, 0x24, 0x1d, 0xa7, 0x72, - 0x45, 0x96, 0xdf, 0x6d, 0xb6, 0xdb, 0xf0, 0xef, 0x66, 0x79, 0x65, 0xa2, 0x54, 0xb6, 0x47, 0xc5, - 0x6c, 0x55, 0xb7, 0x6d, 0xb6, 0xdb, 0xf1, 0xbd, 0xb2, 0xd2, 0x66, 0xa2, 0xdf, 0x34, 0x99, 0x34, - 0x76, 0x1d, 0xec, 0x22, 0xd0, 0x53, 0xaa, 0xa6, 0x9a, 0x69, 0xf8, 0xd3, 0x5c, 0x6f, 0x3d, 0x20, - 0xc3, 0x5c, 0x8e, 0xde, 0xbc, 0xeb, 0x52, 0xbc, 0xba, 0x66, 0x0d, 0x2e, 0x63, 0xf6, 0xf3, 0xb1, - 0xe6, 0xc0, 0xd0, 0x18, 0x47, 0xcb, 0xcd, 0x7f, 0x89, 0xfc, 0x9a, 0x5c, 0xeb, 0x1f, 0xb9, 0xe0, - 0xb0, 0xe2, 0x39, 0x93, 0x23, 0x92, 0x21, 0x8e, 0x60, 0x6f, 0x8d, 0x9c, 0x9b, 0xbf, 0xc6, 0x09, - 0x8e, 0xdd, 0x64, 0x65, 0xda, 0x82, 0x9b, 0xd7, 0xb6, 0x5b, 0x5c, 0xb6, 0x1f, 0x6a, 0xd9, 0x91, - 0xb6, 0x9e, 0x30, 0x8d, 0x1d, 0x52, 0x51, 0x38, 0xac, 0x56, 0x58, 0x2b, 0xce, 0x87, 0x43, 0x1b, - 0x33, 0x99, 0x47, 0xf0, 0xfc, 0xec, 0xf9, 0x58, 0x1d, 0x55, 0x8a, 0xed, 0x76, 0xd1, 0xb5, 0x47, - 0xef, 0xaa, 0xaa, 0xf8, 0x2b, 0xb3, 0x67, 0x37, 0x97, 0xb1, 0xd9, 0x88, 0x77, 0xef, 0x85, 0x0d, - 0x4b, 0xec, 0x5b, 0x1f, 0xe9, 0x52, 0x26, 0x5f, 0x48, 0xb9, 0x30, 0x7c, 0x14, 0xd4, 0xbd, 0x25, - 0x2b, 0x67, 0x63, 0x92, 0x12, 0x64, 0xee, 0x7a, 0xcc, 0x2a, 0x7c, 0x15, 0x1f, 0x33, 0x2c, 0x6b, - 0x46, 0x5c, 0xd0, 0xd0, 0x31, 0xbb, 0xbb, 0x7c, 0x76, 0x56, 0x36, 0x1b, 0x7c, 0xbe, 0x1e, 0xde, - 0x06, 0x61, 0x45, 0xde, 0x24, 0x75, 0xac, 0x7e, 0x42, 0x2f, 0x99, 0x86, 0x1b, 0x1b, 0xf8, 0xcf, - 0x22, 0xfc, 0x9c, 0xb8, 0x45, 0x4d, 0xa2, 0xe9, 0xd3, 0xf1, 0xf1, 0xd4, 0xd7, 0xb1, 0x3e, 0x92, - 0x42, 0x38, 0x77, 0x05, 0xff, 0x05, 0x72, 0x32, 0xc6, 0xc6, 0x5e, 0xc1, 0x79, 0x78, 0xba, 0x91, - 0x92, 0xec, 0x59, 0x67, 0xf8, 0x52, 0xb2, 0x23, 0xd6, 0x55, 0x1f, 0xf7, 0x6c, 0xea, 0xe3, 0x2d, - 0xfd, 0xa6, 0xc9, 0x1d, 0xf8, 0x46, 0xe3, 0xa6, 0x0c, 0x6b, 0x9c, 0x82, 0xc5, 0x5d, 0x48, 0xcb, - 0x1f, 0xc2, 0x16, 0xe4, 0x7e, 0xe2, 0x9b, 0xd4, 0x75, 0x4c, 0xcb, 0x24, 0x55, 0x8c, 0x5b, 0xe3, - 0x21, 0x98, 0xd9, 0x8e, 0x8e, 0x46, 0x7b, 0xac, 0xe7, 0x6f, 0xd7, 0xe2, 0x88, 0x8a, 0x3c, 0xf3, - 0x0e, 0xeb, 0xc5, 0x19, 0x08, 0xc5, 0xdb, 0x64, 0xc5, 0xa5, 0xf0, 0xa1, 0x72, 0xbc, 0xcc, 0x2f, - 0xb0, 0x3b, 0x0a, 0xd4, 0xc7, 0x03, 0xfe, 0x71, 0x57, 0x1a, 0x1a, 0xc6, 0x01, 0x89, 0x70, 0x6e, - 0x0d, 0x9c, 0x32, 0xd0, 0xd2, 0x23, 0x7c, 0x29, 0x28, 0xaa, 0xe1, 0xda, 0xd1, 0x01, 0x78, 0xab, - 0x98, 0xdc, 0x89, 0xf9, 0x58, 0x43, 0x24, 0x59, 0xb6, 0xdc, 0x01, 0x6f, 0x85, 0x24, 0xa1, 0x36, - 0xa8, 0xae, 0x63, 0xab, 0xf1, 0x66, 0xe0, 0x1b, 0x86, 0x0d, 0x3b, 0x6a, 0x4a, 0x24, 0x5e, 0x32, - 0x88, 0x79, 0x49, 0x05, 0x84, 0x45, 0xa4, 0x4b, 0x68, 0x91, 0xa3, 0x3a, 0xe4, 0x0b, 0xbf, 0xb6, - 0x10, 0xdc, 0xcf, 0xaf, 0x8d, 0x63, 0xf7, 0xf3, 0xf8, 0x52, 0x57, 0x96, 0x9e, 0x64, 0x83, 0x7b, - 0xdc, 0xd2, 0xaf, 0xe3, 0x95, 0xab, 0xa1, 0x74, 0xf8, 0x33, 0x41, 0xf9, 0x88, 0x63, 0x73, 0xba, - 0x0f, 0x84, 0x00, 0x5f, 0x09, 0x5a, 0x41, 0x89, 0xc6, 0xf2, 0xb3, 0x3f, 0xaf, 0xc7, 0x71, 0x5b, - 0x95, 0xfa, 0xa6, 0x94, 0xd9, 0x4b, 0xc6, 0x45, 0x53, 0x29, 0x98, 0x6a, 0xb6, 0xaa, 0xb8, 0xc5, - 0x6c, 0xa3, 0xea, 0x32, 0xed, 0xfc, 0x21, 0x92, 0xea, 0x6c, 0x60, 0x8b, 0x52, 0x82, 0x8d, 0x45, - 0xa5, 0x3f, 0x19, 0xad, 0x5b, 0x6d, 0xb6, 0xcb, 0x87, 0x38, 0x94, 0x5e, 0x7c, 0xf7, 0x53, 0x10, - 0x55, 0xc4, 0x1f, 0x0b, 0x8c, 0xa3, 0x43, 0x1f, 0xfa, 0x81, 0x92, 0x8f, 0x7a, 0xfe, 0x21, 0xf3, - 0x53, 0xc6, 0xd9, 0x1f, 0xae, 0xce, 0x2d, 0x99, 0xbe, 0xa4, 0xc3, 0xa2, 0xc5, 0x31, 0xe9, 0xa1, - 0xa7, 0xa8, 0xc9, 0x58, 0xd8, 0x26, 0x77, 0x2a, 0x52, 0x3f, 0xc6, 0x1c, 0xd3, 0x41, 0x20, 0x4c, - 0xe2, 0x86, 0xc1, 0x8f, 0x47, 0x20, 0x9a, 0x7b, 0xdb, 0x69, 0xf8, 0x26, 0xb1, 0xaf, 0x74, 0x35, - 0x3c, 0xfa, 0x19, 0x98, 0xaf, 0x85, 0x35, 0x36, 0xe5, 0x20, 0xb8, 0xfb, 0x27, 0xa4, 0x79, 0x95, - 0x59, 0x66, 0x65, 0x0c, 0x51, 0x7c, 0x16, 0xdb, 0xdb, 0x48, 0xb8, 0x3d, 0x76, 0x29, 0x3a, 0xf0, - 0xbd, 0x91, 0x9a, 0x9b, 0x35, 0x27, 0x46, 0x68, 0x7c, 0xc4, 0x69, 0x10, 0xd3, 0xfc, 0x6c, 0xd7, - 0xb7, 0x74, 0xe4, 0xdd, 0x52, 0x99, 0x98, 0x3a, 0x22, 0xc7, 0x9c, 0x57, 0x15, 0xff, 0x85, 0x29, - 0x37, 0x5d, 0x35, 0xfa, 0x16, 0x95, 0xae, 0x76, 0xbb, 0x2d, 0x36, 0x3e, 0x0b, 0x79, 0x70, 0xb8, - 0x58, 0xea, 0xf8, 0xf8, 0xd2, 0xf6, 0xdd, 0x3b, 0xfc, 0xaa, 0x4c, 0xd6, 0x3b, 0xae, 0xe2, 0x08, - 0x7a, 0x8c, 0xd5, 0x16, 0xd5, 0x16, 0xaa, 0xb5, 0xff, 0x0b, 0x13, 0x27, 0x1c, 0xce, 0x8d, 0x8c, - 0xb1, 0xf3, 0x2e, 0xec, 0x91, 0x7f, 0x8d, 0xb6, 0x5d, 0xc9, 0xba, 0x2c, 0xb5, 0xb7, 0xaa, 0x55, - 0x4d, 0x34, 0xd3, 0xff, 0x19, 0x27, 0x1b, 0xa2, 0x27, 0x78, 0xda, 0xf3, 0xc6, 0x5e, 0x9b, 0x5f, - 0xc3, 0xdd, 0x4a, 0xc2, 0x0d, 0x57, 0x3b, 0x2b, 0x25, 0x2a, 0xfa, 0x68, 0xb7, 0x9a, 0x2d, 0xff, - 0xe3, 0x76, 0x5d, 0x93, 0x5b, 0x5d, 0xa9, 0xb5, 0x3c, 0xac, 0x2e, 0x4d, 0xa6, 0x53, 0x4b, 0x17, - 0x66, 0x2f, 0xfe, 0x0b, 0x39, 0xb6, 0xe6, 0x34, 0x7d, 0x8c, 0xac, 0x1a, 0xf8, 0x62, 0x92, 0x56, - 0x95, 0xa5, 0x55, 0x4d, 0x34, 0xd3, 0xff, 0x04, 0xbb, 0x56, 0xf4, 0x3a, 0xeb, 0xe1, 0x9e, 0x4d, - 0x93, 0x45, 0x9d, 0x76, 0xe6, 0xff, 0xe0, 0xae, 0x95, 0x29, 0x0c, 0x47, 0x2a, 0xf0, 0x6c, 0x65, - 0x66, 0x8e, 0x9d, 0x78, 0x52, 0xcd, 0x9a, 0x67, 0xc1, 0xe4, 0x6e, 0xb7, 0x2a, 0x89, 0xe6, 0x9c, - 0x45, 0xc2, 0x64, 0x4e, 0x7c, 0x66, 0x2c, 0x73, 0x3a, 0x34, 0x8b, 0xa4, 0x6d, 0x28, 0x92, 0x9a, - 0x19, 0x25, 0x7f, 0x04, 0x02, 0x1e, 0x2d, 0xa3, 0x72, 0x33, 0x66, 0xd2, 0x98, 0xb3, 0xeb, 0x37, - 0x46, 0xc4, 0xff, 0xc3, 0x31, 0xe3, 0xbb, 0x6d, 0x5b, 0xde, 0x99, 0x56, 0x53, 0x17, 0x8e, 0xbf, - 0xc1, 0x49, 0x53, 0xff, 0xc1, 0x4d, 0xa7, 0xe3, 0x6e, 0xcb, 0x37, 0x9b, 0xc5, 0x3c, 0x18, 0xf8, - 0x50, 0xb5, 0xb6, 0xd7, 0xf9, 0x30, 0xf5, 0xd7, 0x3e, 0x6e, 0xf1, 0x21, 0x22, 0xe2, 0xf0, 0x85, - 0xf3, 0x16, 0x6c, 0xb6, 0xd8, 0xf8, 0xf2, 0x96, 0x5c, 0xd8, 0xd1, 0x49, 0xd0, 0x91, 0x29, 0x83, - 0x97, 0x32, 0xab, 0x72, 0xbf, 0x18, 0x46, 0x47, 0x2d, 0x76, 0x36, 0x90, 0x9a, 0xd2, 0x4b, 0x5a, - 0xf8, 0x2a, 0x28, 0xe5, 0xd5, 0xaa, 0xb2, 0x00, 0xbf, 0x29, 0x7a, 0xd3, 0x7b, 0x7e, 0xf8, 0x2b, - 0xed, 0x34, 0xef, 0x74, 0xd5, 0x1e, 0x4a, 0xbc, 0x16, 0x08, 0x5d, 0xdd, 0x34, 0x39, 0xf9, 0x66, - 0xa4, 0xcc, 0x95, 0x78, 0x89, 0xb1, 0x65, 0x75, 0x51, 0x7f, 0x19, 0x59, 0x4e, 0x5a, 0xd3, 0x37, - 0x17, 0x55, 0x99, 0x8c, 0xd9, 0xf0, 0xa1, 0x76, 0x93, 0x69, 0x5a, 0x5d, 0xd2, 0x63, 0x37, 0xdc, - 0xf8, 0xfb, 0x4d, 0x2a, 0xb4, 0xeb, 0x13, 0xea, 0xab, 0xe4, 0x9b, 0x1a, 0x5f, 0x8c, 0x2d, 0xab, - 0x8c, 0xc7, 0xa7, 0x55, 0xba, 0xef, 0x21, 0x2d, 0x57, 0xc2, 0x26, 0x9d, 0x82, 0xe7, 0x60, 0x65, - 0x5f, 0x5d, 0x63, 0xfe, 0x14, 0x2a, 0xf5, 0x5d, 0xd3, 0xd0, 0xb3, 0xb1, 0xbb, 0x4d, 0xdb, 0x4c, - 0x6e, 0x7c, 0x29, 0x7b, 0x9e, 0xab, 0xcd, 0x06, 0xaa, 0x12, 0xe5, 0xdb, 0x91, 0x3e, 0x33, 0x3c, - 0x4e, 0x41, 0x76, 0xea, 0x86, 0xda, 0xf2, 0xad, 0x18, 0x5a, 0x22, 0xae, 0xb4, 0xcd, 0x17, 0x64, - 0x1a, 0xe4, 0xd8, 0xfc, 0x7f, 0x42, 0xec, 0xc4, 0xff, 0xe1, 0xae, 0x8a, 0xc6, 0x8e, 0xd1, 0x69, - 0xb0, 0xea, 0xb1, 0xac, 0xb8, 0xc6, 0x05, 0xe0, 0xa8, 0xa6, 0xce, 0x03, 0xd3, 0x44, 0x1c, 0xa3, - 0x85, 0xc2, 0x0e, 0x7c, 0xc3, 0x04, 0x0e, 0xda, 0xcd, 0x07, 0x68, 0x0d, 0xf4, 0x01, 0x52, 0x7f, - 0x8c, 0xa2, 0xae, 0x33, 0x37, 0x6f, 0xed, 0x88, 0xbb, 0xe9, 0x2b, 0x50, 0xe7, 0xe6, 0x93, 0xf0, - 0xa4, 0x99, 0x9c, 0xe4, 0x90, 0x21, 0x21, 0xc8, 0xdc, 0x33, 0xa8, 0x29, 0xe3, 0x46, 0x6f, 0x25, - 0xce, 0x5c, 0x64, 0x72, 0xe3, 0xba, 0x99, 0xf1, 0x94, 0x6d, 0x72, 0xb8, 0x61, 0x4a, 0x8e, 0xbf, - 0xf3, 0x92, 0xed, 0x35, 0x63, 0x16, 0x55, 0x5c, 0x4d, 0xc9, 0x23, 0xdf, 0x01, 0x9f, 0x78, 0xcb, - 0x7c, 0x6f, 0x62, 0xcb, 0xed, 0x61, 0x4f, 0x26, 0x52, 0x26, 0xfa, 0x68, 0xad, 0x2c, 0x4c, 0x85, - 0x18, 0x52, 0x65, 0x04, 0x8f, 0x7f, 0xc2, 0x84, 0xc4, 0x7a, 0xcc, 0x6a, 0x98, 0x8f, 0xe1, 0xbe, - 0x5d, 0x3d, 0x31, 0x72, 0x01, 0xdf, 0x19, 0xbb, 0x66, 0xe5, 0x20, 0x93, 0x67, 0x78, 0x3c, 0xbc, - 0x9c, 0x28, 0x2a, 0x91, 0x1f, 0x12, 0x11, 0x33, 0x71, 0x21, 0xed, 0xed, 0x55, 0x33, 0x75, 0xc6, - 0x1d, 0xa6, 0x99, 0xa9, 0x1a, 0x38, 0x30, 0xad, 0xce, 0x21, 0x0e, 0xcd, 0x1e, 0x21, 0xc2, 0xd3, - 0xc3, 0xc3, 0x1d, 0x9c, 0x4c, 0x72, 0xf7, 0x91, 0xbb, 0xae, 0x66, 0x28, 0x8f, 0x59, 0x4c, 0x3b, - 0x4f, 0x2f, 0xfc, 0x68, 0x9d, 0xa2, 0xa0, 0xd8, 0xd9, 0x1d, 0x88, 0xab, 0x44, 0x65, 0x13, 0xb5, - 0x75, 0x3c, 0x04, 0xbf, 0x6d, 0x34, 0xd3, 0x4f, 0xc6, 0xd8, 0xa3, 0x37, 0xc7, 0xa9, 0x53, 0x53, - 0x85, 0x51, 0xab, 0xd1, 0x9e, 0xa7, 0x63, 0x3a, 0x2a, 0x2d, 0x0d, 0x3a, 0xff, 0xf0, 0xa1, 0x2b, - 0x0a, 0x35, 0x8e, 0x5d, 0x55, 0x75, 0xbf, 0x73, 0x46, 0x6f, 0x70, 0x65, 0x5f, 0xa3, 0xce, 0xd2, - 0xb2, 0xcf, 0x85, 0x31, 0x96, 0x30, 0xa4, 0x7e, 0x8e, 0x43, 0xec, 0xcd, 0xbd, 0x8e, 0xe8, 0xa7, - 0xe3, 0x4a, 0x6c, 0x46, 0x23, 0x2e, 0x48, 0x47, 0xee, 0x33, 0x09, 0x91, 0x45, 0x56, 0x9a, 0x84, - 0xfe, 0xb8, 0x94, 0xc8, 0x94, 0xcf, 0xf8, 0xda, 0xba, 0xb6, 0x71, 0x9a, 0x16, 0x54, 0x7b, 0xf5, - 0xb7, 0x43, 0x2b, 0x52, 0x73, 0x4a, 0x3e, 0xed, 0xb7, 0xfe, 0x34, 0x91, 0xe4, 0xc1, 0x9a, 0xf5, - 0xf6, 0xe5, 0xd7, 0x6b, 0x37, 0xc6, 0xcd, 0x9d, 0xd3, 0x7c, 0x9b, 0xff, 0x82, 0xbb, 0x26, 0x98, - 0x8b, 0x63, 0x32, 0x37, 0xbb, 0xd7, 0xc1, 0x6d, 0xa7, 0x4c, 0x8a, 0x8e, 0xcb, 0x38, 0x45, 0xcd, - 0x8f, 0x82, 0x02, 0x8c, 0xd2, 0x69, 0x4c, 0xc1, 0x18, 0x39, 0x46, 0xb2, 0xd8, 0xa5, 0x6e, 0x76, - 0x3b, 0x24, 0x18, 0xa5, 0xbf, 0xfc, 0x21, 0x8f, 0xd9, 0xd1, 0x86, 0x55, 0x54, 0xf1, 0xe3, 0x8b, - 0x4d, 0x54, 0x6c, 0xf0, 0x8d, 0x0f, 0x3e, 0x31, 0xa4, 0xf8, 0x2b, 0xc2, 0x28, 0xab, 0x26, 0xf8, - 0xcb, 0x77, 0x29, 0x62, 0xbd, 0xd9, 0xb0, 0x7b, 0x6c, 0x65, 0x6a, 0x17, 0xe3, 0x34, 0xa5, 0xeb, - 0x19, 0x7a, 0x72, 0x49, 0x79, 0x2f, 0x8e, 0xaf, 0x8e, 0x9e, 0x27, 0xfe, 0x0d, 0x95, 0x2c, 0x6d, - 0xa6, 0xa7, 0xe1, 0xd9, 0x6b, 0xb6, 0x99, 0xda, 0xfc, 0x62, 0xa5, 0x75, 0xb6, 0x43, 0x15, 0x8d, - 0x49, 0x07, 0x41, 0x15, 0x2f, 0xf0, 0xe6, 0x9b, 0x64, 0xf9, 0x55, 0x92, 0x25, 0xff, 0x0a, 0x12, - 0x49, 0x50, 0xd4, 0xdd, 0x26, 0x78, 0xdc, 0xe6, 0xf2, 0xc2, 0x7d, 0xaf, 0x86, 0x25, 0x83, 0xea, - 0xdd, 0x2e, 0x57, 0xba, 0xff, 0x83, 0x0a, 0x7a, 0x67, 0x64, 0x6e, 0x83, 0xf5, 0x31, 0xa5, 0x03, - 0xd3, 0x4d, 0x34, 0xff, 0xc6, 0x94, 0xe4, 0xa7, 0xa1, 0xb2, 0x32, 0x87, 0x44, 0x33, 0xbb, 0x20, - 0xec, 0xc5, 0xd1, 0xf1, 0x94, 0x39, 0x1e, 0x4a, 0xe9, 0x19, 0x5d, 0xe5, 0x87, 0x8d, 0x15, 0xb5, - 0x32, 0xb7, 0x87, 0xf6, 0xd1, 0x91, 0x2f, 0x94, 0xc3, 0x90, 0x3e, 0x93, 0xed, 0x0f, 0x52, 0x5b, - 0xff, 0xfc, 0x28, 0x54, 0x90, 0x76, 0xad, 0xd2, 0x8c, 0xdd, 0xd2, 0x73, 0x33, 0x53, 0x27, 0xf8, - 0x24, 0x93, 0x4b, 0x9d, 0x78, 0x90, 0xa0, 0x92, 0x68, 0xff, 0x93, 0x8c, 0xdd, 0xe8, 0x44, 0xf2, - 0xc5, 0xfc, 0x94, 0x6b, 0x9b, 0xc0, 0x34, 0x8f, 0x88, 0x1a, 0x31, 0x61, 0xc2, 0x87, 0x18, 0xe4, - 0x72, 0x72, 0xdb, 0xa4, 0x9e, 0xe3, 0x10, 0x6e, 0xf9, 0x92, 0x87, 0x3b, 0xd8, 0x1b, 0xa6, 0xf5, - 0xff, 0x8c, 0x1b, 0x56, 0xf9, 0xb0, 0x8c, 0x6f, 0x81, 0x0d, 0x40, 0xd9, 0x8c, 0x79, 0xe3, 0x5f, - 0xe0, 0xa7, 0x52, 0x23, 0x0c, 0x1d, 0xa7, 0x26, 0x42, 0xc7, 0x69, 0x5b, 0x47, 0xf8, 0x52, 0xf2, - 0x7e, 0x3c, 0x9f, 0xc6, 0xd3, 0x1a, 0xee, 0x3b, 0xac, 0x64, 0xbc, 0x48, 0x4a, 0x2e, 0x48, 0x12, - 0x9d, 0x59, 0xaf, 0x84, 0x3b, 0xa1, 0xee, 0x86, 0x66, 0x24, 0x62, 0x87, 0x88, 0x82, 0xcd, 0xa6, - 0xbb, 0x47, 0xc4, 0x88, 0xf4, 0x6a, 0x88, 0xea, 0x0d, 0x51, 0x5f, 0x8e, 0x9f, 0x99, 0x5b, 0x5c, - 0x01, 0x59, 0x15, 0xf1, 0xb7, 0x1b, 0x7e, 0x3f, 0x49, 0xaa, 0x06, 0xdb, 0x1a, 0x1b, 0x19, 0x58, - 0x63, 0x6b, 0x1e, 0x3e, 0xab, 0x7d, 0xdd, 0xe7, 0x20, 0xbf, 0x84, 0x23, 0x5c, 0xab, 0x98, 0x4a, - 0xb6, 0x36, 0x42, 0xe4, 0x79, 0xf6, 0xaa, 0xab, 0xf0, 0xa6, 0x72, 0x15, 0xba, 0x86, 0x76, 0xd3, - 0xb1, 0x0d, 0xb4, 0x33, 0xb0, 0x37, 0x47, 0xb1, 0x07, 0x46, 0xdf, 0x19, 0xec, 0x9c, 0xd8, 0x86, - 0xb9, 0x29, 0x7d, 0x4c, 0xfd, 0x43, 0xaa, 0xf3, 0x1a, 0xe1, 0x3f, 0x84, 0x27, 0xa7, 0x6e, 0xa4, - 0xec, 0xf2, 0x89, 0x14, 0x4b, 0xf1, 0xd3, 0x5b, 0x30, 0x60, 0xdd, 0x14, 0x0c, 0x3f, 0xc4, 0x3c, - 0x9b, 0x65, 0x4f, 0x5c, 0x08, 0x0b, 0x80, 0x01, 0x43, 0xfc, 0x7d, 0x81, 0xb4, 0x49, 0x74, 0x6b, - 0x81, 0xf9, 0xf1, 0xa5, 0x35, 0xb1, 0xae, 0xc2, 0x73, 0xe3, 0xaa, 0x66, 0xd4, 0xb7, 0x2b, 0x10, - 0xfd, 0xd9, 0x99, 0x2f, 0x0f, 0x8f, 0x84, 0x4a, 0xec, 0xd2, 0x0b, 0xa2, 0x9e, 0xd3, 0x1d, 0xb1, - 0x43, 0x63, 0x1f, 0x84, 0x74, 0x9c, 0x78, 0x36, 0xde, 0xe9, 0x15, 0x43, 0x10, 0x1f, 0x48, 0x28, - 0xa8, 0x89, 0xc9, 0xdb, 0xfc, 0x61, 0x18, 0x69, 0x66, 0x2a, 0x86, 0xc7, 0xba, 0x94, 0x6e, 0xf1, - 0x9d, 0x27, 0xa7, 0xa6, 0xfe, 0x32, 0xd8, 0xbe, 0x2f, 0x35, 0x0a, 0xf7, 0x62, 0x17, 0x9a, 0x1c, - 0xfd, 0x3f, 0x1f, 0x27, 0x6f, 0x8e, 0x37, 0x2d, 0x79, 0x0e, 0x29, 0x7b, 0xf1, 0x22, 0x42, 0x77, - 0x5e, 0x6a, 0x52, 0x4b, 0xc1, 0x69, 0x0d, 0xbc, 0x9b, 0x92, 0x09, 0xeb, 0xe3, 0x34, 0xcf, 0x01, - 0xff, 0x75, 0x5d, 0xfb, 0x28, 0xd3, 0xed, 0xb5, 0xe1, 0x42, 0x36, 0xb4, 0x5b, 0x6d, 0x28, 0x7a, - 0xa1, 0x18, 0x7f, 0xda, 0xb4, 0x59, 0x3e, 0x3c, 0xe7, 0xd3, 0x90, 0xe7, 0x21, 0x69, 0xaf, 0x3d, - 0x69, 0x78, 0xca, 0x5b, 0x6c, 0xee, 0x75, 0x5a, 0x91, 0x04, 0x91, 0x35, 0x5d, 0xfc, 0x3c, 0x4c, - 0xf8, 0xd8, 0xc6, 0x14, 0xe5, 0x1a, 0x37, 0x21, 0x65, 0x29, 0x57, 0x03, 0xe9, 0x36, 0x1d, 0xe4, - 0x99, 0x7d, 0x3f, 0x05, 0x10, 0xdb, 0x5e, 0x56, 0xad, 0x06, 0x35, 0x9b, 0xf7, 0x4e, 0x0f, 0x8c, - 0x2a, 0x92, 0x09, 0x42, 0xb6, 0x87, 0x50, 0x90, 0x2b, 0x50, 0x67, 0x21, 0x91, 0x9a, 0xfa, 0xdb, - 0xf1, 0xb9, 0x18, 0xb1, 0xd7, 0x41, 0xb5, 0x94, 0xd6, 0x0d, 0x19, 0xae, 0xd2, 0x99, 0x9e, 0x0b, - 0xd1, 0x0f, 0xbb, 0x6d, 0xb6, 0xdb, 0x7e, 0x37, 0x0e, 0xab, 0x79, 0xda, 0xb1, 0xc2, 0x42, 0x0b, - 0x48, 0x60, 0xc7, 0x68, 0x86, 0xb6, 0x8d, 0x62, 0x3b, 0x6b, 0x52, 0xf2, 0xfa, 0xeb, 0xff, 0x1d, - 0xe5, 0xcb, 0x79, 0x8a, 0x5a, 0xc0, 0xfd, 0x29, 0x51, 0xf8, 0xcb, 0x69, 0x58, 0xaa, 0xd0, 0x75, - 0x48, 0x76, 0x49, 0x1f, 0xa4, 0xe6, 0x19, 0xbf, 0x87, 0x66, 0x56, 0x55, 0xd4, 0xd2, 0x64, 0xa2, - 0x4b, 0x57, 0x95, 0x86, 0xd7, 0xc4, 0xa6, 0x44, 0xa6, 0x7f, 0x7e, 0xf8, 0xb0, 0x7e, 0x36, 0xca, - 0x83, 0x39, 0x05, 0xa4, 0x28, 0x0c, 0x67, 0x45, 0xb7, 0x58, 0xbe, 0x3c, 0x84, 0xc5, 0x55, 0x7d, - 0xb5, 0x16, 0xc9, 0xa7, 0xf5, 0x7f, 0x82, 0x0b, 0x36, 0x3a, 0x71, 0xe1, 0xdf, 0x96, 0xf7, 0x56, - 0x37, 0xe2, 0xfd, 0x34, 0xd3, 0x4f, 0xc6, 0xca, 0xc5, 0x1c, 0x69, 0x21, 0xdc, 0x8c, 0x44, 0x30, - 0x9a, 0xd5, 0x1a, 0xba, 0x53, 0x8e, 0xa9, 0x9b, 0xad, 0x69, 0xa6, 0x9a, 0x7e, 0x37, 0x3c, 0x56, - 0x35, 0xf9, 0x3d, 0x65, 0x44, 0x46, 0xaf, 0x1e, 0x5d, 0x78, 0x5b, 0x88, 0xdf, 0x13, 0xff, 0xfc, - 0x66, 0x2d, 0xa2, 0x08, 0xd7, 0x2e, 0x39, 0x5b, 0x5f, 0x05, 0xc3, 0x68, 0x92, 0x74, 0xbc, 0x6c, - 0x39, 0x51, 0x63, 0x87, 0x9f, 0x9a, 0x04, 0xda, 0x15, 0x1b, 0x47, 0xca, 0xdd, 0x05, 0x56, 0x7b, - 0xea, 0x27, 0xc9, 0x07, 0xc7, 0xc2, 0x37, 0xb1, 0xa2, 0xac, 0xd1, 0x0c, 0x61, 0x3a, 0x3f, 0x05, - 0x36, 0x94, 0x33, 0xaf, 0x29, 0x9a, 0x17, 0x59, 0x99, 0xd1, 0x0d, 0x51, 0x17, 0x73, 0xfc, 0x3d, - 0x4a, 0xd1, 0x2d, 0x35, 0x68, 0xfb, 0xdf, 0xb1, 0x75, 0x45, 0xfe, 0x36, 0xd1, 0xb0, 0x8f, 0x66, - 0xbf, 0x50, 0x86, 0x43, 0x19, 0xfb, 0xc7, 0x99, 0x73, 0xd2, 0x40, 0xd1, 0x93, 0xbf, 0xfc, 0x29, - 0x43, 0x0e, 0x55, 0x35, 0xb1, 0x30, 0x62, 0xc2, 0xc6, 0xf2, 0x51, 0x45, 0xb4, 0x9a, 0x34, 0xb8, - 0xcf, 0x84, 0x3b, 0x7e, 0x2f, 0x87, 0x74, 0x36, 0xbf, 0xda, 0x53, 0x65, 0x1d, 0x06, 0xbd, 0xc5, - 0xb1, 0x6f, 0xfc, 0x2a, 0x29, 0xda, 0xea, 0xc0, 0xcb, 0x70, 0x38, 0x24, 0xfd, 0x11, 0x56, 0xff, - 0x1a, 0x77, 0x26, 0xda, 0xe8, 0x1c, 0x64, 0x4a, 0x33, 0x35, 0xb4, 0x78, 0x6d, 0xc6, 0x93, 0x26, - 0x99, 0x0b, 0x47, 0x7b, 0x7f, 0xf0, 0xce, 0x37, 0x2f, 0x5a, 0x76, 0xef, 0x7f, 0xf0, 0x41, 0x93, - 0x65, 0xc5, 0x4f, 0x4b, 0x4b, 0x15, 0x55, 0x57, 0xfc, 0x14, 0xe2, 0x26, 0x45, 0x14, 0x58, 0xca, - 0xb8, 0xca, 0xe3, 0xcb, 0xe1, 0xe1, 0x09, 0x39, 0x0c, 0x1e, 0x63, 0xc3, 0xee, 0x17, 0x43, 0x8e, - 0x5d, 0x6e, 0x69, 0x2d, 0x49, 0xff, 0xf1, 0x83, 0xd6, 0x31, 0xb1, 0x93, 0x77, 0xe4, 0x7a, 0x51, - 0x33, 0x66, 0x6d, 0xf8, 0x29, 0xe6, 0x4e, 0x9b, 0xdb, 0xac, 0x99, 0x8d, 0x9f, 0x19, 0x98, 0x82, - 0xfb, 0x7f, 0x4c, 0xf7, 0x13, 0x81, 0xbc, 0x19, 0xbd, 0x9f, 0x0a, 0x54, 0xca, 0x8b, 0x2e, 0x7c, - 0x4e, 0x27, 0x08, 0x0a, 0x06, 0x91, 0xf4, 0x15, 0x93, 0x96, 0x8f, 0xf0, 0x55, 0x6c, 0x62, 0xc6, - 0xb5, 0x33, 0x16, 0xf7, 0x6e, 0x5a, 0xa7, 0x41, 0xc4, 0x01, 0x7c, 0x16, 0x75, 0x3e, 0x3b, 0x71, - 0xf5, 0x4e, 0x8d, 0x8c, 0x57, 0x56, 0xf1, 0x7c, 0x61, 0x23, 0x9b, 0x5a, 0x43, 0x43, 0x3e, 0x3f, - 0x19, 0xc7, 0x0c, 0xe3, 0x9f, 0x2f, 0xe0, 0xb3, 0x55, 0x56, 0x36, 0x35, 0xad, 0xab, 0x7c, 0x69, - 0x43, 0xea, 0x95, 0x51, 0xec, 0xac, 0x19, 0xaa, 0x8e, 0x02, 0x1e, 0xc6, 0x2b, 0x0a, 0xb5, 0x51, - 0xac, 0x4c, 0xb5, 0x55, 0x12, 0xfa, 0x69, 0xa6, 0x9f, 0x8d, 0xc1, 0xf9, 0x14, 0x5b, 0x96, 0x31, - 0x5d, 0xd1, 0x27, 0x5d, 0xd7, 0xd3, 0x4d, 0x34, 0xfc, 0x29, 0x23, 0xe8, 0xd5, 0x63, 0x34, 0xea, - 0xbf, 0x63, 0x15, 0x1c, 0xaa, 0x1e, 0x52, 0x2f, 0x0a, 0x6c, 0xa2, 0x29, 0xc9, 0x55, 0x9d, 0x0d, - 0x0c, 0xac, 0x1d, 0x2b, 0x14, 0xf3, 0xaf, 0xe1, 0x49, 0xeb, 0x01, 0xc5, 0x65, 0xad, 0x2b, 0x1e, - 0x26, 0x71, 0x01, 0x5c, 0x7e, 0xda, 0x2d, 0xa3, 0xd9, 0x5b, 0x42, 0xd1, 0xe3, 0x96, 0xde, 0xc1, - 0xd4, 0x7c, 0x15, 0x94, 0xf7, 0x02, 0x25, 0xea, 0x47, 0xb8, 0xed, 0x42, 0x7e, 0x6e, 0xc3, 0x65, - 0x0e, 0x56, 0x18, 0xf8, 0xcb, 0x33, 0xd0, 0x8c, 0x57, 0xb5, 0x69, 0x42, 0x4a, 0xf4, 0xcc, 0x28, - 0xde, 0xce, 0xf6, 0x4a, 0xa3, 0xc6, 0x74, 0x29, 0x57, 0x3c, 0x48, 0x89, 0xc9, 0x4b, 0x5a, 0x29, - 0xb3, 0xa7, 0x5b, 0xd7, 0xf1, 0x59, 0x99, 0x63, 0x89, 0x2b, 0x9b, 0x7c, 0x21, 0xcf, 0xe7, 0xe6, - 0xd8, 0x9d, 0xae, 0xd3, 0xe1, 0xf1, 0xd8, 0xec, 0xf0, 0x85, 0xb6, 0xdb, 0x6e, 0xca, 0xce, 0xd6, - 0xe9, 0xf8, 0xc2, 0x5d, 0x27, 0xc9, 0x34, 0xad, 0x5f, 0xb9, 0xa8, 0xfa, 0x78, 0x47, 0x74, 0x32, - 0xfd, 0xdd, 0x9e, 0x7a, 0x07, 0xd5, 0x6f, 0x1f, 0xaa, 0xab, 0x8f, 0x26, 0xa7, 0xb1, 0x83, 0xbb, - 0x11, 0x5f, 0x8e, 0x36, 0xd1, 0x4c, 0xc4, 0x98, 0xcc, 0xe8, 0x65, 0xb9, 0xfe, 0x37, 0x2d, 0x14, - 0x5e, 0x0b, 0xbb, 0x1a, 0x47, 0x6b, 0x64, 0x79, 0xf2, 0xa7, 0x7c, 0x14, 0xdd, 0xfc, 0xbe, 0xab, - 0x09, 0xb6, 0xaa, 0x72, 0xb0, 0xed, 0x3c, 0x9f, 0x18, 0x24, 0xae, 0x67, 0x4c, 0xd4, 0x66, 0xce, - 0x9b, 0x31, 0x2d, 0x1f, 0x47, 0xb8, 0x86, 0x6f, 0x7f, 0x0a, 0x10, 0x95, 0x30, 0x7c, 0xad, 0x77, - 0x7d, 0xe8, 0x50, 0xcd, 0xdb, 0x65, 0xa3, 0x0c, 0x65, 0x96, 0xae, 0x90, 0x6f, 0xed, 0x61, 0x2b, - 0xf1, 0x98, 0xe1, 0xa9, 0xe1, 0xed, 0x36, 0x93, 0xba, 0xbb, 0xce, 0x9a, 0x7e, 0x34, 0xd1, 0xa6, - 0x11, 0xee, 0xb4, 0xb4, 0xeb, 0x43, 0x59, 0x58, 0x2d, 0xb9, 0x52, 0x73, 0x34, 0x36, 0xd1, 0x9d, - 0x4f, 0xf8, 0x7c, 0xe6, 0x63, 0xe9, 0x25, 0x53, 0x52, 0x65, 0xd5, 0xb6, 0xeb, 0x6d, 0x34, 0xd3, - 0x4f, 0xc3, 0xd8, 0xfe, 0x84, 0xec, 0x53, 0x4d, 0x9d, 0x72, 0xa5, 0x9d, 0x97, 0xcb, 0xe9, 0xa6, - 0x9a, 0x7e, 0x36, 0xc9, 0xcc, 0x06, 0x85, 0x19, 0x75, 0xaf, 0xad, 0xbf, 0x3a, 0xeb, 0x6d, 0xb8, - 0x33, 0x30, 0xd2, 0xca, 0xaa, 0x9a, 0x6d, 0xb6, 0x9a, 0x69, 0xa7, 0xe3, 0x74, 0x34, 0x92, 0xba, - 0xbb, 0x44, 0xa3, 0xd6, 0xe9, 0xc9, 0x4b, 0xd3, 0xa5, 0x4d, 0x34, 0xd3, 0xf1, 0xb3, 0xd2, 0x9d, - 0x6d, 0xae, 0xd5, 0xfb, 0x4b, 0x6d, 0xb6, 0xdb, 0xba, 0x4d, 0xd7, 0xcb, 0xc9, 0xdb, 0xd9, 0xfc, - 0x3c, 0x4b, 0x71, 0xbc, 0xb4, 0x86, 0xf6, 0x30, 0xb7, 0x5b, 0x6c, 0x9b, 0x5f, 0x4d, 0x38, 0xd3, - 0xf0, 0x58, 0x53, 0xe1, 0xf1, 0x28, 0xa4, 0xbd, 0x43, 0x42, 0x86, 0x8f, 0xef, 0x8d, 0xb6, 0xdc, - 0x73, 0x0a, 0x5a, 0xb2, 0x39, 0x14, 0xea, 0x10, 0x63, 0xa9, 0x85, 0xb6, 0x16, 0x64, 0xf5, 0xd6, - 0x34, 0xd3, 0x4d, 0xb6, 0xdb, 0x6f, 0xc1, 0x49, 0x11, 0x4d, 0x96, 0xb2, 0x77, 0x83, 0x24, 0xeb, - 0xf0, 0xf8, 0xd9, 0x22, 0xde, 0xcc, 0xcd, 0x0c, 0xd4, 0x8e, 0xac, 0x33, 0xbc, 0xb5, 0x82, 0xb3, - 0xe4, 0xd5, 0x1a, 0xf5, 0x4d, 0xa7, 0xfe, 0x1f, 0xe3, 0xab, 0x84, 0x6f, 0x1e, 0x5a, 0x9e, 0x85, - 0xf0, 0xd7, 0xe5, 0xaa, 0xac, 0x93, 0xfb, 0x8f, 0xfc, 0x74, 0x9a, 0x59, 0xa5, 0xb8, 0xd4, 0x1f, - 0x51, 0xe6, 0xd9, 0x7e, 0x08, 0x0b, 0xae, 0x65, 0x06, 0x80, 0xe5, 0xe4, 0x3a, 0x95, 0x5d, 0xa7, - 0xb4, 0x2d, 0x38, 0x8f, 0x8a, 0xbb, 0x75, 0xa6, 0x9f, 0x87, 0x6c, 0x57, 0x28, 0x69, 0xe9, 0xb7, - 0x93, 0x10, 0xeb, 0x8b, 0xea, 0xaa, 0xbe, 0x1e, 0x99, 0x9d, 0x75, 0xda, 0xda, 0xb2, 0x3e, 0xdb, - 0x4d, 0xb5, 0x15, 0x28, 0xa9, 0x7f, 0xc2, 0xf5, 0x23, 0x0c, 0x71, 0xca, 0x91, 0x8d, 0x6d, 0x3a, - 0xd9, 0xe2, 0xdb, 0xe3, 0xfe, 0x3e, 0x84, 0x38, 0x84, 0x55, 0x4f, 0xd3, 0x3c, 0x94, 0x2c, 0x69, - 0x53, 0x95, 0x93, 0x30, 0xd6, 0x3c, 0x75, 0x1e, 0xe5, 0x6a, 0xe4, 0xd6, 0xb5, 0xcd, 0x63, 0x2b, - 0x2b, 0xb3, 0x83, 0xf0, 0x41, 0x44, 0x6d, 0x2e, 0xd4, 0x63, 0xe9, 0xb1, 0xa7, 0x94, 0x9d, 0xb5, - 0x55, 0x17, 0xff, 0x8d, 0x14, 0x78, 0x25, 0xb2, 0x2b, 0x4f, 0xab, 0x6b, 0xa6, 0x73, 0x2f, 0x4d, - 0xe9, 0x1c, 0xdc, 0xf9, 0x4d, 0x6a, 0x2b, 0x23, 0x1f, 0xe0, 0xb0, 0xb3, 0x35, 0x8f, 0x8c, 0x5d, - 0xf1, 0xb3, 0xa7, 0x5f, 0x05, 0x7b, 0x4d, 0x73, 0x7d, 0xd3, 0x8b, 0x65, 0xf8, 0x50, 0xf9, 0x36, - 0x4c, 0x07, 0xd8, 0x4c, 0x3b, 0x95, 0x2c, 0xbf, 0xcd, 0xe3, 0x7c, 0x10, 0x18, 0x70, 0xb1, 0x60, - 0xc3, 0x4e, 0x82, 0x4b, 0xa4, 0x86, 0xc1, 0x82, 0x3f, 0xbb, 0xb6, 0x12, 0x20, 0x0b, 0x14, 0x9e, - 0x9c, 0xfe, 0xdf, 0x87, 0xe1, 0x9b, 0x35, 0xc7, 0x54, 0xdf, 0x51, 0x2a, 0xbe, 0xd8, 0xf3, 0xc3, - 0x97, 0x9b, 0xa9, 0x39, 0x3b, 0x3b, 0x3f, 0x8f, 0x3d, 0xe7, 0x61, 0x4b, 0x19, 0xac, 0x60, 0xca, - 0x06, 0xf4, 0xae, 0x4b, 0xe1, 0x4c, 0xce, 0xca, 0xb7, 0xbe, 0xf6, 0x31, 0xd1, 0x82, 0xb0, 0xdd, - 0xd2, 0xdf, 0xe1, 0x43, 0xdd, 0x11, 0x7b, 0x8f, 0x5d, 0xe3, 0x8f, 0x4e, 0x67, 0xed, 0xa6, 0x9f, - 0xe1, 0x02, 0x69, 0x2d, 0x5d, 0xee, 0x36, 0xd5, 0x0d, 0x6b, 0xf0, 0x8c, 0xec, 0x41, 0xa1, 0xaa, - 0x4a, 0xc4, 0x84, 0x33, 0x79, 0xb8, 0xf6, 0xb0, 0x63, 0xe3, 0xb5, 0x4d, 0xcd, 0x8a, 0xf2, 0xee, - 0xfe, 0xfe, 0x38, 0xaf, 0xcb, 0xe4, 0x67, 0x23, 0x32, 0x25, 0x22, 0xe4, 0x4a, 0xd4, 0x1e, 0x30, - 0xcc, 0x91, 0x36, 0x86, 0x42, 0x4b, 0x19, 0xd9, 0x0e, 0xd4, 0x45, 0x58, 0xf6, 0x58, 0xcc, 0x75, - 0xc6, 0xdf, 0x85, 0x0e, 0xbb, 0x94, 0x47, 0xdc, 0x0f, 0x20, 0xbd, 0x98, 0x6c, 0xb2, 0x66, 0x5e, - 0x0c, 0xf7, 0x53, 0x9e, 0x59, 0xda, 0x0f, 0x64, 0x89, 0xf0, 0xa1, 0x35, 0x79, 0x5b, 0x06, 0x3b, - 0x61, 0xb4, 0xa6, 0xf7, 0xb6, 0xae, 0x7e, 0xd8, 0x91, 0x3e, 0x11, 0xb3, 0xbb, 0x8d, 0xa0, 0xf4, - 0x21, 0xe4, 0x57, 0xd2, 0xe0, 0xbc, 0x21, 0xbb, 0x99, 0x9a, 0x37, 0x39, 0x1c, 0x32, 0x55, 0xd9, - 0xef, 0xc5, 0x9c, 0xda, 0x6d, 0x76, 0xbb, 0x4d, 0xcf, 0xdd, 0xdf, 0xfc, 0x21, 0x2b, 0x2f, 0x65, - 0x0d, 0xec, 0xdb, 0xf7, 0xea, 0xbe, 0x32, 0x30, 0x8a, 0xfa, 0xb1, 0x43, 0xd4, 0x55, 0x57, 0x34, - 0x99, 0x9c, 0x31, 0x52, 0x36, 0x32, 0xe6, 0x71, 0x11, 0x86, 0x63, 0x7b, 0xcd, 0x47, 0x51, 0xfc, - 0xdf, 0x0d, 0xc7, 0x5d, 0x1b, 0xd9, 0xf1, 0xc9, 0xf8, 0x91, 0xc5, 0x6d, 0x7c, 0x97, 0xa1, 0x68, - 0xd7, 0xc5, 0xcc, 0xa8, 0x8c, 0xa7, 0x1d, 0x36, 0x44, 0x21, 0xf1, 0x86, 0x4d, 0x34, 0xd3, 0x76, - 0x48, 0x91, 0x63, 0x79, 0x46, 0x66, 0x7d, 0x3f, 0x08, 0x12, 0x5f, 0x68, 0x6b, 0x11, 0xe2, 0x24, - 0x13, 0x49, 0xb3, 0x17, 0xda, 0xe9, 0xf8, 0xde, 0x6c, 0x69, 0x2e, 0xf1, 0x1a, 0x89, 0xc4, 0xb6, - 0xf5, 0x6d, 0xb6, 0xdb, 0xff, 0x09, 0x5b, 0x1b, 0xc9, 0x25, 0xd7, 0x95, 0xa3, 0x7f, 0xc2, 0x5e, - 0x76, 0xb6, 0x99, 0xa3, 0xf8, 0x99, 0x3f, 0x4c, 0x9e, 0x32, 0x78, 0xfc, 0x61, 0x51, 0x34, 0xd5, - 0x8c, 0x7f, 0xcb, 0xf3, 0xae, 0xb4, 0xe5, 0x92, 0xb6, 0x7b, 0x4a, 0x3f, 0x08, 0x6d, 0x95, 0x91, - 0xaf, 0xd2, 0x4d, 0x31, 0xbe, 0xaf, 0xc7, 0x56, 0x98, 0x9c, 0x24, 0xbf, 0x6f, 0x1a, 0x93, 0xbb, - 0x3c, 0x65, 0x9b, 0x49, 0xba, 0xd3, 0x2f, 0x49, 0xf6, 0xb9, 0x58, 0xf0, 0xa1, 0x24, 0xd4, 0xf5, - 0x54, 0xe1, 0x15, 0x0e, 0xaa, 0x74, 0xb1, 0xd6, 0x87, 0x2f, 0x84, 0x24, 0xcf, 0x99, 0x59, 0x22, - 0xa7, 0x0e, 0x62, 0xaf, 0xf1, 0x82, 0x53, 0xa7, 0x23, 0xfa, 0x69, 0x9f, 0x93, 0xbb, 0xa4, 0x95, - 0x22, 0xc3, 0xc1, 0x07, 0x8a, 0xf4, 0xc3, 0xd4, 0xfa, 0x3b, 0x9f, 0xca, 0xa6, 0x9a, 0x69, 0xff, - 0x82, 0xb2, 0x1a, 0x1e, 0x98, 0xce, 0x49, 0xd6, 0xec, 0x6f, 0x6e, 0x5f, 0x05, 0x95, 0x6e, 0xda, - 0x95, 0x85, 0x72, 0xe3, 0x14, 0xa3, 0x83, 0x63, 0x23, 0x7c, 0x29, 0x2b, 0x0c, 0x70, 0x6c, 0x67, - 0xc9, 0xca, 0x94, 0xac, 0x42, 0xf9, 0x18, 0x63, 0x2a, 0x7c, 0x10, 0xdb, 0x56, 0xd6, 0x72, 0xc0, - 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x04, 0x02, 0x30, 0x3a, 0xbc, 0x2a, 0x3f, 0x07, 0x5d, 0x01, - 0xd7, 0x41, 0x8a, 0x7d, 0x32, 0xfc, 0xba, 0x5d, 0x5c, 0x61, 0x39, 0x6a, 0x84, 0x32, 0x98, 0x62, - 0xed, 0x50, 0x85, 0x91, 0x72, 0xa8, 0x4f, 0x8f, 0xe0, 0x8c, 0xf1, 0xa4, 0xc5, 0x52, 0x60, 0x05, - 0xbe, 0x08, 0xc4, 0x37, 0x31, 0x5e, 0x4e, 0xbc, 0x37, 0x26, 0x13, 0x0b, 0x8d, 0xcc, 0xcb, 0x09, - 0x84, 0x2d, 0x8b, 0x65, 0x31, 0x69, 0x89, 0xcc, 0x5e, 0x63, 0xe0, 0x8e, 0x4f, 0x93, 0xe5, 0xf1, - 0xa2, 0x83, 0x6a, 0x6b, 0x7d, 0x6a, 0xf0, 0x71, 0xa6, 0x9a, 0x65, 0x5e, 0x0d, 0x0a, 0x9a, 0x65, - 0xed, 0xe9, 0xfe, 0x86, 0xb5, 0x5c, 0x60, 0x4f, 0x1a, 0xf2, 0xaf, 0x6a, 0xbc, 0xab, 0xde, 0x35, - 0xe5, 0x5e, 0xf5, 0x5e, 0x55, 0xe2, 0x71, 0x70, 0x75, 0xd0, 0x1d, 0x74, 0xc1, 0xd7, 0x40, 0x75, - 0xd3, 0x37, 0x05, 0xf1, 0x8a, 0x6a, 0x29, 0xe3, 0xbe, 0x5b, 0xe2, 0xa7, 0x36, 0x9b, 0x7d, 0x73, - 0xc7, 0x09, 0x45, 0xb1, 0x6c, 0x5b, 0x16, 0xff, 0xcb, 0x1f, 0xf2, 0xff, 0x7b, 0xe1, 0xfe, 0x35, - 0xe5, 0x5e, 0xf1, 0xaf, 0x2a, 0xf6, 0xab, 0xca, 0xbc, 0x54, 0x65, 0x9b, 0x4d, 0xb9, 0x74, 0xba, - 0xf8, 0x4b, 0x07, 0x5b, 0x00, 0xeb, 0xa1, 0xb5, 0xa3, 0x07, 0x5d, 0x01, 0xd7, 0x45, 0xdc, 0x65, - 0x31, 0xa9, 0x4c, 0x6f, 0x9a, 0x31, 0x4d, 0x45, 0x3f, 0x0b, 0x70, 0x86, 0x91, 0xf1, 0xaf, 0x2a, - 0xf1, 0x51, 0x96, 0x6d, 0x36, 0xe5, 0xd2, 0xe9, 0x31, 0x22, 0x88, 0x3f, 0x8f, 0x8c, 0x6b, 0x01, - 0xf2, 0xf3, 0x17, 0x1d, 0xf2, 0xdf, 0x3e, 0x2e, 0x0e, 0xba, 0x03, 0xae, 0x98, 0x3a, 0xe8, 0x0e, - 0xba, 0x64, 0xe4, 0xe3, 0xbe, 0x5b, 0xef, 0x2c, 0x7f, 0xcb, 0xfd, 0xef, 0x86, 0x04, 0x20, 0x68, - 0x19, 0x49, 0x34, 0x90, 0xb4, 0x2d, 0x3e, 0xdf, 0x6b, 0xec, 0x32, 0xc3, 0x31, 0xc7, 0xe0, 0x80, - 0xdb, 0x4d, 0x2b, 0x07, 0xac, 0xc4, 0xad, 0xa5, 0x4b, 0x52, 0x31, 0xfe, 0x14, 0x95, 0xb0, 0x7b, - 0x4d, 0x2a, 0x3a, 0x34, 0x6a, 0xcd, 0x2a, 0xa8, 0xc5, 0x9d, 0xf8, 0x52, 0x6a, 0x53, 0x34, 0x9d, - 0x4b, 0x76, 0xe8, 0xcd, 0x4f, 0x3e, 0x1f, 0xe4, 0xaf, 0xc6, 0x89, 0xa8, 0x75, 0xd5, 0x7c, 0x9e, - 0x44, 0x6b, 0xd1, 0x33, 0x26, 0x5c, 0xcb, 0xd1, 0x6d, 0xa4, 0x5d, 0x1f, 0x0d, 0xff, 0xcf, 0xa7, - 0xef, 0x8f, 0x85, 0x4a, 0x53, 0x17, 0x0f, 0xc9, 0x91, 0x96, 0x8d, 0xcf, 0xbb, 0x63, 0x69, 0xaf, - 0xc1, 0x74, 0x65, 0x0b, 0x42, 0xae, 0x60, 0xeb, 0xa0, 0x3a, 0xe9, 0x88, 0xb4, 0xf8, 0x78, 0x21, - 0x2d, 0xa7, 0x07, 0x0e, 0xa4, 0x77, 0xcd, 0xaa, 0x7a, 0x69, 0x7f, 0x85, 0xb8, 0xf2, 0x7d, 0x54, - 0x6c, 0x78, 0x6e, 0xfe, 0xa9, 0x53, 0xdd, 0xaf, 0xf1, 0x83, 0xea, 0xab, 0xaa, 0xad, 0xb6, 0x0c, - 0xc4, 0x1a, 0x89, 0x9f, 0xe0, 0x96, 0xd3, 0x5b, 0x4d, 0x6e, 0x7c, 0xf4, 0x71, 0x3e, 0xdb, 0x6d, - 0xb6, 0x4e, 0xb9, 0x32, 0xf1, 0xbd, 0xa6, 0xb6, 0x9a, 0xda, 0x6b, 0x69, 0xa5, 0x11, 0x32, 0x22, - 0x65, 0x38, 0xff, 0xc1, 0x5d, 0xa6, 0xb6, 0x9a, 0xda, 0x6b, 0x13, 0xa7, 0xc1, 0x5f, 0x49, 0x2d, - 0x24, 0xb4, 0x92, 0x4c, 0xbc, 0x17, 0x6a, 0xab, 0x69, 0xac, 0xc8, 0x74, 0xf8, 0x27, 0xa7, 0x2d, - 0x3b, 0x4d, 0x65, 0xf0, 0x50, 0x5c, 0x77, 0xcb, 0x7d, 0xad, 0xf2, 0xdf, 0x25, 0x5e, 0x1e, 0x8f, - 0xf9, 0x7f, 0xbd, 0x7f, 0x97, 0xfb, 0xe3, 0x54, 0xaa, 0xa0, 0x96, 0x9c, 0x55, 0x8a, 0xbf, 0xf0, - 0xed, 0x7f, 0x97, 0xfb, 0xd7, 0xf9, 0x7f, 0xbd, 0x7f, 0x97, 0xfb, 0xc4, 0xb4, 0xe2, 0xac, 0x55, - 0xff, 0x82, 0x8e, 0x3a, 0xd0, 0xb5, 0xa3, 0x5a, 0xd0, 0xb5, 0xa1, 0x2a, 0xf0, 0xf5, 0x7f, 0x97, - 0xfb, 0xd7, 0xf9, 0x7f, 0xbf, 0x8d, 0x50, 0x43, 0xa2, 0xb3, 0x9a, 0x79, 0xa1, 0x56, 0x5a, 0xf3, - 0x69, 0x65, 0xe0, 0xbe, 0x3f, 0xe5, 0xfe, 0xf1, 0xff, 0x2f, 0xf7, 0x89, 0x69, 0xc5, 0x58, 0xab, - 0xff, 0x54, 0xab, 0xcf, 0x22, 0x2a, 0xfc, 0xda, 0x6d, 0xf3, 0xc8, 0x8a, 0xbf, 0x36, 0x9b, 0x7c, - 0xf4, 0xab, 0xf3, 0x69, 0xb5, 0x70, 0xb4, 0x7e, 0x9a, 0xfa, 0x6b, 0xe9, 0xaf, 0xa6, 0x83, 0x33, - 0xfa, 0x64, 0xb6, 0xea, 0xe1, 0xa8, 0xff, 0x97, 0xfb, 0xc8, 0x8e, 0x89, 0xac, 0xdf, 0xfc, 0xf4, - 0x45, 0xaf, 0x16, 0x85, 0xaf, 0xd5, 0x3a, 0x5c, 0x37, 0xe3, 0x54, 0x22, 0x11, 0x6b, 0xc5, 0x84, - 0x2c, 0x2f, 0xc2, 0x99, 0xa0, 0x58, 0x79, 0xa1, 0x96, 0x1e, 0x68, 0x16, 0x1a, 0x75, 0xe7, 0xa5, - 0x5f, 0x9b, 0x4d, 0xbe, 0x7a, 0x55, 0xf9, 0xb4, 0xdb, 0xe1, 0xc8, 0xcb, 0x42, 0x96, 0x8f, 0x4a, - 0xbf, 0x36, 0x9b, 0x7c, 0xf4, 0xab, 0xf3, 0x69, 0xb7, 0xcf, 0x4a, 0xbf, 0x36, 0x9b, 0x7c, 0xf4, - 0x4b, 0x5f, 0x8b, 0x42, 0xd7, 0x87, 0xf3, 0x36, 0x3b, 0x43, 0x41, 0x45, 0x2f, 0x7e, 0x66, 0x32, - 0xca, 0xbf, 0x36, 0x9b, 0x7c, 0x6e, 0x68, 0x16, 0x1e, 0x68, 0x72, 0xc3, 0xcd, 0x02, 0xc3, 0x4e, - 0xbc, 0xda, 0x6d, 0xfe, 0x09, 0x08, 0xd3, 0x5a, 0x75, 0xe0, 0xa2, 0xd3, 0x5b, 0x4d, 0x69, 0xd7, - 0x8d, 0xed, 0x35, 0xb4, 0xd6, 0xd3, 0x5b, 0x4d, 0x39, 0xf4, 0xd3, 0x6d, 0xbf, 0x05, 0xb6, 0x9a, - 0xda, 0x6b, 0xa7, 0x5e, 0x08, 0xb4, 0x0c, 0x84, 0x98, 0x49, 0x2a, 0xf0, 0x4b, 0x69, 0xa8, 0x0d, - 0x03, 0x69, 0xa4, 0x0d, 0x03, 0x1e, 0x5f, 0x10, 0x23, 0x96, 0xb9, 0xdb, 0x47, 0xe1, 0x52, 0xba, - 0x19, 0x0a, 0xaf, 0xf9, 0xc9, 0x55, 0x1a, 0x45, 0x4a, 0x0a, 0x53, 0x4d, 0xcf, 0xcf, 0xcf, 0x7f, - 0x83, 0x09, 0x08, 0xc5, 0xe4, 0xa4, 0xc4, 0x14, 0x77, 0xed, 0x8a, 0xba, 0xdb, 0xf1, 0xb3, 0x0c, - 0x36, 0x09, 0xa2, 0xb3, 0x53, 0xfd, 0xc7, 0x8f, 0x21, 0x06, 0x42, 0x31, 0xd1, 0x56, 0x2a, 0xd3, - 0x4d, 0xd0, 0x45, 0x33, 0x5f, 0x94, 0xf8, 0xc2, 0xf3, 0xbf, 0xc4, 0x18, 0xb9, 0x79, 0x30, 0x98, - 0x5c, 0x6e, 0x79, 0x24, 0x21, 0x61, 0x09, 0x08, 0x58, 0x43, 0xe3, 0x65, 0xc6, 0xe4, 0x07, 0x01, - 0xa2, 0x04, 0x9f, 0x02, 0x60, 0x66, 0x3f, 0x89, 0xae, 0x92, 0x44, 0xc6, 0x63, 0x31, 0x98, 0x9d, - 0x8d, 0x43, 0xba, 0x1f, 0xfc, 0x68, 0x8c, 0x96, 0x27, 0x30, 0x82, 0x6d, 0xac, 0x63, 0x1a, 0xb9, - 0xfa, 0xbd, 0x67, 0x66, 0xc7, 0x0d, 0x8c, 0xf3, 0x38, 0x12, 0x96, 0x28, 0xe7, 0xc3, 0x62, 0x5b, - 0x1d, 0x51, 0xa9, 0x95, 0x17, 0x93, 0x3e, 0x3b, 0xa7, 0x6c, 0x12, 0x3a, 0x0f, 0x79, 0xf8, 0x68, - 0xe3, 0x2d, 0x0a, 0x5a, 0x3c, 0x93, 0xaf, 0x3e, 0x9f, 0x75, 0xc3, 0x7e, 0x35, 0xe4, 0xcb, 0xf2, - 0xe9, 0x77, 0xc6, 0xc1, 0xd7, 0x40, 0x75, 0xd3, 0x1d, 0x74, 0x1d, 0x74, 0xc1, 0xd7, 0x40, 0x75, - 0xd3, 0x07, 0x5d, 0x01, 0xd7, 0x4c, 0x88, 0xe8, 0x9a, 0x4d, 0xcf, 0xa7, 0xdf, 0xe1, 0xd8, 0xeb, - 0xa0, 0xeb, 0xa6, 0x3a, 0xe8, 0x3a, 0xe9, 0x83, 0xae, 0x80, 0xeb, 0xa6, 0x44, 0x93, 0x49, 0xbf, - 0xf8, 0xfe, 0x0e, 0xba, 0x03, 0xae, 0x9c, 0x1d, 0x74, 0x07, 0x5d, 0x31, 0xaf, 0x7e, 0x16, 0x8f, - 0xfb, 0xe3, 0xfe, 0xf9, 0x11, 0xd1, 0x35, 0x9b, 0x9f, 0x4f, 0xbf, 0xa2, 0x1d, 0x3e, 0x15, 0xb4, - 0xd3, 0x34, 0x9a, 0xab, 0x52, 0x19, 0x3a, 0x64, 0xdb, 0x1f, 0xae, 0x1f, 0x3e, 0x35, 0xe5, 0x5e, - 0xf1, 0xaf, 0x2a, 0xf6, 0xab, 0xca, 0xbc, 0x54, 0x65, 0x9b, 0x4d, 0xb9, 0x74, 0xbb, 0xef, 0x8d, - 0x79, 0x57, 0xa3, 0xd1, 0x69, 0x57, 0xe1, 0x5c, 0xb2, 0x5c, 0xbf, 0x24, 0x31, 0x4c, 0xd0, 0x53, - 0x32, 0x71, 0xa6, 0xe4, 0xa6, 0x35, 0xe6, 0x57, 0x8c, 0xa9, 0x25, 0x7e, 0x99, 0x7e, 0x16, 0x65, - 0xeb, 0x88, 0xcf, 0x86, 0xcf, 0x3e, 0x7c, 0x31, 0x1e, 0x68, 0x5c, 0xd1, 0xeb, 0x9a, 0x17, 0x34, - 0x79, 0x91, 0xd7, 0x9b, 0x4d, 0xbf, 0xaa, 0x22, 0xd3, 0xe3, 0x60, 0xeb, 0xa0, 0x3a, 0xe9, 0x83, - 0xae, 0x80, 0xeb, 0xa6, 0x0e, 0xba, 0x03, 0xae, 0x98, 0x3a, 0xe8, 0x0e, 0xba, 0x64, 0x47, 0x44, - 0xd2, 0x6e, 0x7d, 0x7e, 0xfe, 0x22, 0x0e, 0xba, 0x03, 0xae, 0x98, 0x3a, 0xe8, 0x0e, 0xba, 0x7e, - 0xa2, 0xab, 0xe7, 0x8c, 0xa5, 0x04, 0x82, 0x26, 0xb3, 0x7e, 0x75, 0xf9, 0xe3, 0x29, 0x41, 0x20, - 0x89, 0xac, 0xdf, 0xf5, 0x2a, 0x7c, 0xdc, 0x75, 0xa1, 0x6b, 0x47, 0xa8, 0x21, 0xbe, 0x1d, 0x83, - 0xae, 0x83, 0xae, 0x98, 0xeb, 0xa0, 0xeb, 0xa6, 0x0e, 0xba, 0x03, 0xae, 0x98, 0x8a, 0x47, 0x5e, - 0x6d, 0x76, 0xfe, 0x0b, 0xe0, 0xeb, 0xa0, 0x3a, 0xe9, 0x83, 0xae, 0x80, 0xeb, 0xa6, 0x09, 0x19, - 0xd7, 0x9b, 0x4d, 0xbf, 0x86, 0xf8, 0xd7, 0xb1, 0x16, 0x87, 0x4a, 0x09, 0x04, 0x22, 0x66, 0x33, - 0x6c, 0xba, 0x5d, 0xf0, 0xa1, 0x1a, 0x69, 0x24, 0x9a, 0x69, 0x24, 0x9a, 0x69, 0x83, 0x60, 0xda, - 0x69, 0x83, 0x60, 0xf2, 0xf9, 0x24, 0xdf, 0xe1, 0x4a, 0x4d, 0xb9, 0x08, 0xd0, 0x31, 0x86, 0x4a, - 0xdc, 0x11, 0xe5, 0x7e, 0x37, 0x68, 0xfa, 0x11, 0xea, 0x84, 0x77, 0xe0, 0x87, 0x1c, 0x4c, 0xf4, - 0xf8, 0xed, 0xf0, 0xe1, 0x47, 0xe9, 0xbd, 0x9a, 0x65, 0xf9, 0x74, 0xbb, 0xe1, 0x22, 0x6d, 0x18, - 0xad, 0x3a, 0x7e, 0x14, 0xd3, 0x8c, 0x2b, 0x47, 0x9f, 0xc7, 0x35, 0x8e, 0x40, 0x75, 0x2f, 0xb5, - 0xbe, 0x2a, 0x57, 0x1b, 0xa4, 0x6d, 0x7a, 0x95, 0x47, 0xce, 0x55, 0x5a, 0xb5, 0xa8, 0x5f, 0xbb, - 0xee, 0x2e, 0xe2, 0xfe, 0x14, 0x15, 0xd6, 0xd4, 0x98, 0x9d, 0x3a, 0xcd, 0xc3, 0x8a, 0xdf, 0x76, - 0x3e, 0x1b, 0x08, 0xe3, 0xad, 0x0b, 0x5a, 0x0c, 0x8e, 0xf2, 0xe9, 0x74, 0xfb, 0x93, 0x4b, 0xc3, - 0x51, 0xff, 0x2f, 0xf7, 0x91, 0x24, 0xd2, 0x6f, 0xfe, 0x36, 0xf8, 0x05, 0x1b, 0x95, 0x54, 0xc6, - 0x55, 0x42, 0xe7, 0x81, 0x23, 0x72, 0xaa, 0x98, 0xca, 0xa8, 0x5d, 0x2a, 0xfc, 0xda, 0x6d, 0xf3, - 0xd2, 0xaf, 0xcd, 0xa6, 0xdf, 0x3d, 0x2a, 0xfc, 0xda, 0x6d, 0x5c, 0x68, 0x41, 0xa6, 0x9a, 0x68, - 0x2f, 0x4c, 0xe4, 0xf4, 0xce, 0xc6, 0x10, 0x2d, 0xa0, 0x03, 0xbe, 0x44, 0x99, 0xf0, 0x4c, 0x77, - 0xb0, 0x38, 0xff, 0x82, 0xaf, 0xc0, 0x67, 0x86, 0x80, 0x43, 0xcd, 0xc6, 0x2e, 0x9f, 0xaa, 0x33, - 0x9a, 0x41, 0xab, 0xff, 0x86, 0x2b, 0x21, 0x08, 0x64, 0x19, 0x10, 0xc6, 0xa7, 0xf8, 0x7c, 0x83, - 0x8c, 0x7e, 0xa6, 0x60, 0x0a, 0x4d, 0xc0, 0xc6, 0x4b, 0x16, 0x75, 0xc6, 0xab, 0xa5, 0xf9, 0x47, - 0xe3, 0x00, 0xd7, 0x7e, 0x1a, 0x8c, 0x79, 0x47, 0x97, 0x34, 0x2e, 0x68, 0x00, 0x51, 0xaa, 0xf1, - 0x54, 0x2a, 0xb8, 0xf7, 0xc3, 0x00, 0x28, 0x1e, 0x88, 0x99, 0x3a, 0x64, 0x44, 0xc9, 0xd3, 0x3e, - 0xb8, 0x7a, 0x3a, 0xe8, 0x3a, 0xe9, 0x8e, 0xba, 0x0e, 0xba, 0x60, 0xeb, 0xa0, 0x3a, 0xe9, 0x87, - 0xa8, 0x8b, 0x49, 0x33, 0x6d, 0x8a, 0xa2, 0xd5, 0xf8, 0xde, 0x25, 0xa0, 0x3a, 0xe8, 0x3b, 0xef, - 0xe3, 0xfe, 0xe3, 0xae, 0x9c, 0x4a, 0x47, 0x42, 0xd0, 0xb5, 0x9b, 0x4d, 0xbf, 0x82, 0x38, 0x3d, - 0xd0, 0x1e, 0xe9, 0x89, 0x68, 0x45, 0xaf, 0x3c, 0x46, 0x47, 0x46, 0xd3, 0x6a, 0x0a, 0x04, 0x6d, - 0x36, 0xfe, 0x1e, 0x97, 0x3f, 0x2e, 0x4f, 0x43, 0x63, 0xe8, 0x23, 0x23, 0xa3, 0x69, 0xb6, 0x05, - 0x02, 0x36, 0x9b, 0x7f, 0x54, 0xbf, 0x0e, 0x8a, 0xac, 0x57, 0xb8, 0xae, 0xd1, 0xfe, 0xb3, 0x59, - 0xab, 0x3f, 0xe0, 0x80, 0x41, 0xe9, 0xcb, 0x01, 0xd1, 0x51, 0x4a, 0x05, 0x59, 0xaa, 0x26, 0x63, - 0x2a, 0x54, 0xba, 0x65, 0x4b, 0xff, 0x0b, 0x13, 0x4c, 0x94, 0xc7, 0xf6, 0x9d, 0x28, 0x3e, 0x2a, - 0xc5, 0x5f, 0xe3, 0x64, 0xdb, 0x64, 0x2e, 0x35, 0x08, 0x5d, 0x71, 0x55, 0xc6, 0x51, 0xe3, 0x96, - 0x2e, 0x40, 0xb1, 0x8c, 0x6a, 0x33, 0x8d, 0xf6, 0x84, 0xd2, 0xb7, 0x1f, 0x89, 0x0b, 0xf0, 0x7e, - 0xa0, 0xfd, 0x7c, 0x5f, 0xbe, 0x15, 0x8f, 0xf9, 0x7f, 0xbd, 0x7f, 0x97, 0xfb, 0xc8, 0x92, 0x69, - 0x37, 0xf5, 0xd4, 0xe9, 0x2f, 0x3c, 0xa9, 0xcd, 0xa6, 0xdf, 0x5c, 0x44, 0x7f, 0xcb, 0xfd, 0xeb, - 0xfc, 0xbf, 0xdf, 0xe2, 0x09, 0xd2, 0x4b, 0x49, 0x2f, 0x1f, 0x69, 0xad, 0xa3, 0xed, 0xb9, 0xc8, - 0xda, 0xf1, 0xf6, 0x53, 0x96, 0x85, 0xc3, 0x5b, 0x08, 0x2e, 0xcd, 0x22, 0xe7, 0x87, 0xf9, 0xf0, - 0xb4, 0xe7, 0xcb, 0x45, 0x25, 0xa8, 0xf9, 0xe5, 0xb6, 0xd3, 0x4f, 0xfc, 0x82, 0x46, 0x29, 0xff, - 0x11, 0x18, 0xf2, 0x8f, 0x7f, 0x18, 0xf2, 0x8f, 0x13, 0x86, 0x89, 0x07, 0x5b, 0x19, 0x29, 0x21, - 0x24, 0x3f, 0xe1, 0x0c, 0x75, 0x31, 0x5a, 0x98, 0x8f, 0x6c, 0x51, 0xc1, 0xed, 0x88, 0xf3, 0xbf, - 0x82, 0x38, 0x3b, 0xb1, 0x1d, 0x6c, 0x52, 0x2f, 0x24, 0x1d, 0x6c, 0x41, 0xd6, 0xc7, 0xce, 0x4e, - 0x36, 0xc5, 0xd8, 0xc5, 0xd8, 0xdd, 0x8d, 0x13, 0xf8, 0x54, 0x55, 0xa9, 0x5e, 0x9b, 0x4a, 0xde, - 0x15, 0x44, 0xa5, 0x33, 0x41, 0x3f, 0xfc, 0x68, 0xbf, 0x1a, 0xf7, 0xb4, 0xd6, 0x86, 0x65, 0x77, - 0xb4, 0xd6, 0xbb, 0x9b, 0x61, 0x7f, 0x8c, 0xed, 0x35, 0xb4, 0xd6, 0xd3, 0x5b, 0x4d, 0x78, 0x44, - 0xb8, 0x3a, 0xe8, 0x0e, 0xba, 0x60, 0xeb, 0xa0, 0x3a, 0xe9, 0x83, 0xae, 0x80, 0xeb, 0xa7, 0x86, - 0x32, 0xe6, 0x4c, 0x88, 0xd0, 0x94, 0x4c, 0xbf, 0x2e, 0x97, 0x7c, 0x18, 0x41, 0xd7, 0x40, 0x75, - 0xd3, 0x07, 0x5d, 0x01, 0xd7, 0x4c, 0x88, 0x2c, 0xa2, 0x69, 0x37, 0x3e, 0x9f, 0x7f, 0x85, 0x78, - 0x3a, 0xe8, 0x0e, 0xba, 0x60, 0xeb, 0xa0, 0x3a, 0xe8, 0x64, 0xe5, 0xd2, 0xef, 0xf8, 0x8f, 0x07, - 0x5d, 0x01, 0xd7, 0x4e, 0x0e, 0xba, 0x03, 0xae, 0x9e, 0x18, 0x83, 0xae, 0x80, 0xeb, 0xa6, 0x0e, - 0xba, 0x03, 0xae, 0x99, 0x12, 0x4d, 0x26, 0xff, 0xe7, 0xa6, 0x5f, 0x97, 0x4b, 0xbe, 0x18, 0x83, - 0xae, 0x80, 0xeb, 0xa6, 0x0e, 0xba, 0x03, 0xae, 0x98, 0x7e, 0x9e, 0x4d, 0x4b, 0x34, 0x2e, 0x87, - 0xc6, 0x84, 0x00, 0xab, 0xae, 0x5b, 0x81, 0x93, 0xcb, 0xa7, 0xd9, 0x59, 0x67, 0x6a, 0xe3, 0x27, - 0x62, 0xaf, 0xeb, 0xe7, 0x4f, 0xb8, 0x1f, 0xaa, 0x8f, 0xe3, 0x5f, 0x1c, 0x87, 0xcc, 0xd7, 0x48, - 0xa1, 0x75, 0x0d, 0x19, 0x8e, 0x2f, 0xe3, 0xed, 0x98, 0xc3, 0x92, 0x68, 0x38, 0x33, 0x0d, 0x0d, - 0x1f, 0x85, 0xce, 0xe1, 0x78, 0x29, 0x45, 0x12, 0x0e, 0xb6, 0x58, 0x1c, 0x55, 0x8e, 0x37, 0x3e, - 0x18, 0x6c, 0x07, 0x7d, 0xc7, 0xe3, 0x7a, 0xf7, 0xdc, 0x72, 0x53, 0xdc, 0x0a, 0x3e, 0x06, 0xe5, - 0xa9, 0xe1, 0x23, 0x49, 0xd2, 0xa2, 0x72, 0x44, 0x36, 0x34, 0xe6, 0xb5, 0xb4, 0x88, 0x01, 0xc1, - 0x80, 0x2b, 0x2f, 0xa6, 0x4e, 0xca, 0x69, 0xa6, 0xac, 0x26, 0x40, 0x9a, 0xa6, 0xb3, 0xf4, 0x25, - 0x9d, 0xea, 0xfe, 0x03, 0xbd, 0x0f, 0x8f, 0xc3, 0xe4, 0xd0, 0xeb, 0x0e, 0xb7, 0x73, 0x9a, 0x0d, - 0xfa, 0xcf, 0x71, 0x65, 0x4d, 0x1f, 0x7c, 0x37, 0x38, 0xd7, 0xe9, 0xf0, 0xd6, 0x31, 0x67, 0xc1, - 0x01, 0xeb, 0x52, 0x1a, 0x0b, 0xbc, 0x11, 0xf1, 0xe1, 0x5a, 0xc3, 0x5a, 0x9c, 0xb5, 0xc5, 0x9a, - 0x8b, 0x75, 0x5a, 0x7e, 0x08, 0x06, 0xb4, 0xd6, 0x27, 0x8d, 0x4d, 0xa6, 0xb3, 0xb4, 0xff, 0xd9, - 0x7b, 0xe1, 0x29, 0xc4, 0x44, 0xed, 0x03, 0x80, 0xf4, 0x92, 0xf1, 0xf2, 0x92, 0x29, 0x28, 0x0e, - 0x03, 0xd2, 0x4b, 0x49, 0x2f, 0x0a, 0x52, 0x4a, 0xdc, 0xb4, 0xda, 0x6a, 0xdb, 0x46, 0xcd, 0xcf, - 0x87, 0x8c, 0xd3, 0x4a, 0xba, 0xaa, 0xde, 0x1e, 0x63, 0xd2, 0x6f, 0xdb, 0x6c, 0x18, 0xfd, 0xe1, - 0xe1, 0x0d, 0x34, 0xaa, 0xd4, 0x93, 0x62, 0x3b, 0x10, 0x54, 0x0e, 0x0c, 0xa8, 0x8a, 0x7d, 0xd4, - 0x8e, 0x45, 0x6e, 0xfe, 0x1d, 0x32, 0x23, 0x4a, 0x52, 0x79, 0xf5, 0x08, 0x84, 0x76, 0x90, 0x46, - 0x86, 0x35, 0xf9, 0x6f, 0x4f, 0xc2, 0x92, 0x93, 0xdd, 0x1b, 0x32, 0x1a, 0x2e, 0xc0, 0xa4, 0x91, - 0x4e, 0x37, 0xd7, 0xa9, 0xa3, 0x1f, 0xe3, 0x6b, 0x7d, 0x42, 0x7e, 0xea, 0x35, 0xcd, 0xd2, 0x35, - 0xae, 0x88, 0x70, 0xde, 0xce, 0x76, 0x8b, 0x2c, 0x58, 0xf9, 0x3b, 0xb7, 0xf0, 0xf5, 0xa1, 0xa8, - 0x35, 0x43, 0x2a, 0xfd, 0xa0, 0xa3, 0xaa, 0xaa, 0xab, 0x13, 0x83, 0xaa, 0xae, 0x5a, 0x1f, 0xf8, - 0xd0, 0xce, 0x35, 0xe5, 0x5e, 0xd5, 0x79, 0x57, 0xbc, 0x75, 0xa1, 0x6b, 0x47, 0xaa, 0xf2, 0xaf, - 0x15, 0x05, 0x9f, 0x9b, 0x4d, 0xb9, 0x74, 0xbb, 0xe1, 0x58, 0xff, 0x97, 0xfb, 0xd7, 0xf9, 0x7f, - 0xbc, 0x11, 0x9d, 0x06, 0x3c, 0xcd, 0x64, 0x33, 0xe9, 0xf7, 0xf8, 0xc2, 0x76, 0x9a, 0xda, 0x6b, - 0x69, 0xad, 0xa6, 0xbc, 0x2d, 0x69, 0xad, 0xa6, 0xb7, 0xfb, 0x6d, 0xa6, 0x9b, 0xe7, 0x3a, 0x55, - 0xf9, 0xb4, 0xdb, 0xe0, 0xbf, 0x3f, 0x9b, 0x9f, 0xcd, 0xe9, 0x57, 0xe6, 0xd3, 0x6a, 0xe0, 0x80, - 0x43, 0x4d, 0x6d, 0x35, 0xb4, 0xd6, 0xff, 0x6d, 0xb4, 0xd3, 0xf5, 0xe5, 0x5e, 0x37, 0xa4, 0x96, - 0x92, 0x4d, 0x35, 0xb4, 0xd6, 0xff, 0x6d, 0xb4, 0xd3, 0xf0, 0x84, 0x99, 0xe4, 0xc2, 0x61, 0x88, - 0x35, 0x72, 0xd3, 0xc3, 0x1b, 0x46, 0x21, 0xc7, 0x16, 0xae, 0xbe, 0x25, 0x32, 0x25, 0x32, 0xdd, - 0x7e, 0x15, 0xb4, 0xd3, 0x07, 0x69, 0xad, 0x7c, 0x4a, 0x64, 0x4a, 0x66, 0xba, 0xfc, 0x7c, 0x84, - 0x19, 0xb2, 0x4c, 0xf9, 0x73, 0xf4, 0x51, 0xac, 0x3c, 0xfe, 0x78, 0xe9, 0x4d, 0xa6, 0xd6, 0x9a, - 0x69, 0xaf, 0xf0, 0xe1, 0x63, 0x29, 0x8a, 0x94, 0xc0, 0xe0, 0x94, 0x55, 0x8a, 0xb2, 0xd6, 0x2a, - 0xfc, 0xdc, 0x24, 0x21, 0xa1, 0xea, 0xda, 0x5c, 0xce, 0x9d, 0x3f, 0x06, 0x16, 0x90, 0x9f, 0x1a, - 0x43, 0x9d, 0x73, 0xe7, 0xaa, 0xcd, 0xdb, 0xff, 0x0a, 0x5b, 0xb7, 0x6e, 0xdd, 0x7d, 0x3e, 0x6e, - 0xdb, 0x62, 0x55, 0x22, 0x2d, 0x19, 0xf8, 0x56, 0xd9, 0xcf, 0xb7, 0xa3, 0x18, 0x38, 0xa0, 0x74, - 0x46, 0x17, 0xf1, 0xda, 0x2d, 0xa7, 0x85, 0x04, 0x65, 0x60, 0x3f, 0x70, 0x7e, 0x2f, 0x47, 0x74, - 0xcf, 0x08, 0xf4, 0xfb, 0xe1, 0x51, 0xe3, 0xfe, 0x5f, 0xef, 0x5f, 0xe5, 0xfe, 0xf2, 0x24, 0x9a, - 0x4d, 0xfd, 0x71, 0x84, 0xda, 0x6b, 0x69, 0xad, 0xa6, 0xb6, 0x9a, 0xf0, 0x85, 0xa6, 0xb6, 0x9a, - 0xda, 0x6b, 0xf1, 0x76, 0x9a, 0xda, 0x6b, 0xf1, 0x1d, 0x24, 0xb4, 0x92, 0xf1, 0x65, 0xc7, 0x7c, - 0xb7, 0xda, 0xdf, 0x2d, 0xf7, 0x8c, 0xe3, 0x5e, 0x55, 0xe8, 0xd5, 0x15, 0x78, 0xc5, 0x48, 0xf5, - 0x5e, 0x55, 0xef, 0x55, 0xe5, 0x5e, 0xf0, 0x97, 0x1d, 0xf2, 0xdf, 0x6b, 0x7c, 0xb7, 0xde, 0x18, - 0x8f, 0xf9, 0x7f, 0xbd, 0x7f, 0x97, 0xfb, 0xc8, 0x90, 0xa6, 0x5f, 0xff, 0x88, 0x87, 0x82, 0x4d, - 0x79, 0x14, 0xe4, 0xc9, 0x1b, 0x32, 0xc5, 0x35, 0x0a, 0xe6, 0x46, 0x6f, 0xb2, 0x37, 0x6f, 0x72, - 0x8d, 0xe7, 0x46, 0xb0, 0x91, 0x9a, 0x31, 0x3b, 0xb5, 0x44, 0x14, 0xff, 0x10, 0x63, 0x71, 0x8b, - 0x11, 0x0a, 0x6a, 0x2e, 0x68, 0xdd, 0x66, 0xbe, 0xd5, 0xe2, 0x92, 0xc3, 0x2c, 0x4c, 0x14, 0x22, - 0x40, 0x03, 0x08, 0xdf, 0x99, 0x9d, 0x9f, 0x29, 0x84, 0xec, 0xf4, 0x40, 0x62, 0xab, 0x81, 0x34, - 0xf0, 0x4d, 0xa3, 0x5b, 0xd0, 0xf0, 0xe3, 0xaf, 0x0b, 0xce, 0x8e, 0x0c, 0xe7, 0x8d, 0x25, 0x6d, - 0xaf, 0x71, 0x0f, 0x7d, 0x60, 0xf0, 0xc5, 0xc8, 0x35, 0xc3, 0x09, 0x54, 0x73, 0x7d, 0x71, 0xd5, - 0x99, 0x50, 0xe2, 0x19, 0x5c, 0xb1, 0xed, 0x7b, 0x6a, 0x6f, 0xf8, 0x29, 0xb2, 0xd1, 0xb7, 0xa8, - 0xb8, 0xba, 0x68, 0x73, 0x43, 0x92, 0x24, 0x1f, 0x12, 0x17, 0x1f, 0xa6, 0xbe, 0x9f, 0x1d, 0xf2, - 0xdf, 0x78, 0x66, 0x3f, 0xe5, 0xfe, 0xf2, 0x24, 0x9a, 0x4d, 0xff, 0xc1, 0x84, 0x7f, 0xcb, 0xfd, - 0xe3, 0xfe, 0x5f, 0xef, 0x22, 0x49, 0xa4, 0xdf, 0xfc, 0x27, 0xc7, 0x7c, 0xb7, 0xd8, 0xef, 0x96, - 0xfb, 0xc6, 0x1b, 0x69, 0xad, 0xa6, 0xba, 0x9a, 0x0c, 0x31, 0x94, 0x75, 0x87, 0x1d, 0x8f, 0x1a, - 0x12, 0x52, 0x30, 0xec, 0x34, 0x7b, 0xba, 0x44, 0xe6, 0xcb, 0x61, 0xb6, 0x29, 0x63, 0x43, 0x86, - 0x65, 0xc9, 0x1a, 0xce, 0x1c, 0x52, 0x8f, 0xff, 0xf0, 0x5b, 0x40, 0xea, 0x5b, 0x84, 0x79, 0xd3, - 0xd2, 0xaf, 0x1a, 0x34, 0x25, 0xd3, 0x6b, 0xab, 0xa2, 0x98, 0xa9, 0xa6, 0xe8, 0xe0, 0x00, 0x9f, - 0x79, 0xf5, 0xfa, 0xaf, 0xdf, 0xd3, 0x4d, 0x34, 0xff, 0xc2, 0x83, 0x26, 0x65, 0xc9, 0x0e, 0x51, - 0x66, 0xcd, 0xa1, 0x82, 0xf1, 0x61, 0xb3, 0x65, 0x1d, 0x7c, 0x3b, 0x43, 0x1c, 0x62, 0x42, 0xf0, - 0x1b, 0x8e, 0xec, 0xea, 0x67, 0xf3, 0xe7, 0x69, 0x8f, 0x97, 0xc9, 0x5a, 0xe1, 0xe0, 0xb8, 0xeb, - 0xa0, 0xeb, 0xa6, 0x3a, 0xe8, 0x3a, 0xe9, 0x83, 0xae, 0x80, 0xeb, 0xa6, 0x44, 0x93, 0x59, 0xbf, - 0xf9, 0xe5, 0x40, 0x1f, 0x9b, 0x4d, 0xbe, 0xb8, 0x5e, 0x0e, 0xba, 0x03, 0xae, 0x9c, 0x1d, 0x6c, - 0x41, 0xd6, 0xc0, 0x7a, 0x80, 0x4a, 0x44, 0xdb, 0x7f, 0xe0, 0x8e, 0x3f, 0x4d, 0x7d, 0x32, 0xa7, - 0xc2, 0xdc, 0x4b, 0x85, 0x20, 0xe3, 0xad, 0x0b, 0x5a, 0x04, 0x5a, 0x2a, 0x15, 0x42, 0xab, 0xcd, - 0xa6, 0xdf, 0x0e, 0x70, 0x75, 0xd0, 0x1d, 0x74, 0x2a, 0x1b, 0x5e, 0x53, 0x4d, 0x35, 0x5d, 0x7e, - 0x09, 0xa0, 0xeb, 0xa1, 0xc9, 0x63, 0xcd, 0x0e, 0x20, 0xf2, 0xa5, 0x74, 0x6a, 0xae, 0x19, 0xcb, - 0x49, 0xc8, 0x2f, 0xf6, 0xdb, 0x6d, 0xbf, 0x1d, 0x69, 0xae, 0xd1, 0x88, 0x6a, 0x69, 0xaf, 0xc6, - 0x64, 0xd8, 0x7c, 0x7e, 0x0f, 0x2d, 0x5d, 0xaa, 0xb1, 0xe5, 0xab, 0xf8, 0x7c, 0xbb, 0x4d, 0x6d, - 0x35, 0xb4, 0xd2, 0x64, 0xb2, 0x74, 0xd3, 0x11, 0x32, 0x9c, 0x6b, 0x85, 0x36, 0x92, 0xb4, 0xd5, - 0x22, 0xe2, 0x5e, 0x81, 0x9b, 0x06, 0x8a, 0x7c, 0x4e, 0xc4, 0x90, 0xea, 0x60, 0xd7, 0xbb, 0x65, - 0xe1, 0x7b, 0x10, 0xea, 0x4b, 0x16, 0xdd, 0xba, 0xfb, 0x89, 0x58, 0x73, 0xd6, 0x3c, 0x10, 0xf8, - 0x8a, 0x92, 0x29, 0x8b, 0xe1, 0xb9, 0xed, 0xa4, 0xea, 0x9a, 0x73, 0x9d, 0xff, 0x05, 0xf9, 0x48, - 0x32, 0x90, 0x69, 0xd3, 0x26, 0xfe, 0xe5, 0xdf, 0xd4, 0x55, 0x1e, 0x3c, 0x2f, 0xa6, 0x91, 0x08, - 0x69, 0xd3, 0x13, 0xa2, 0x21, 0x13, 0x22, 0xda, 0x09, 0x05, 0xff, 0x8d, 0x14, 0x39, 0x48, 0x28, - 0xd0, 0x95, 0x33, 0x78, 0xca, 0xc7, 0x65, 0x50, 0x6d, 0x76, 0xc7, 0x54, 0xcd, 0x44, 0xf6, 0x3f, - 0xf1, 0x22, 0xd8, 0x33, 0x51, 0x2e, 0xa6, 0x9a, 0x6b, 0xc2, 0xb4, 0x92, 0xd2, 0x4b, 0x51, 0x13, - 0x22, 0x26, 0x53, 0x8f, 0xfc, 0xdd, 0x24, 0xbc, 0x27, 0xd2, 0x4b, 0x49, 0x2f, 0x1d, 0x69, 0xad, - 0xa6, 0xb6, 0x9a, 0xfc, 0x67, 0x69, 0xab, 0x6d, 0x2e, 0xd3, 0x5b, 0x4d, 0x78, 0x4b, 0xed, 0x35, - 0xb4, 0xd2, 0xe0, 0xaf, 0x55, 0x5b, 0x4d, 0x6d, 0x35, 0xd5, 0x44, 0xc4, 0x72, 0x92, 0x29, 0x26, - 0xf6, 0x97, 0x12, 0x34, 0x21, 0xaf, 0xd3, 0x72, 0xf7, 0x28, 0xa1, 0x96, 0x61, 0x5e, 0x55, 0x55, - 0xa0, 0x26, 0x8a, 0xa5, 0x1f, 0xff, 0x34, 0xef, 0xe3, 0x63, 0x23, 0x8c, 0xdb, 0x7b, 0xc1, 0xc0, - 0x6e, 0x96, 0xd4, 0x86, 0x34, 0xc3, 0xea, 0x90, 0xa8, 0x7b, 0xc4, 0x1a, 0x36, 0x1b, 0xad, 0xc5, - 0xff, 0xe3, 0x6f, 0xeb, 0x6b, 0x6d, 0x6b, 0x43, 0x00, 0x14, 0xee, 0x46, 0xeb, 0x72, 0xe5, 0xbc, - 0xb6, 0x5b, 0x10, 0xf7, 0xec, 0x12, 0xcc, 0x4f, 0x2a, 0x62, 0xda, 0xa7, 0x97, 0xaf, 0x86, 0xc4, - 0xac, 0xeb, 0x50, 0x30, 0x61, 0x3f, 0xdb, 0x6c, 0xf5, 0xaf, 0xc1, 0x78, 0xb0, 0x75, 0xd0, 0x1d, - 0x74, 0xc1, 0xd7, 0x40, 0x75, 0xd3, 0x22, 0x53, 0x26, 0xff, 0xe1, 0xcc, 0x6a, 0x9d, 0x32, 0xfc, - 0xba, 0x5d, 0xf0, 0x5f, 0x1d, 0x74, 0x1d, 0x74, 0xc7, 0x5d, 0x01, 0xd7, 0x4c, 0x89, 0x26, 0x93, - 0x7f, 0xf0, 0x40, 0x10, 0x33, 0x68, 0xca, 0x81, 0x15, 0xab, 0x24, 0x18, 0xe0, 0xe8, 0x68, 0xf1, - 0x31, 0xa4, 0x2c, 0x85, 0x38, 0x02, 0xd5, 0x4d, 0x4b, 0xff, 0xc2, 0x86, 0xd9, 0xa8, 0xb6, 0x13, - 0x1d, 0x43, 0x31, 0x94, 0x3d, 0x8b, 0x38, 0xa2, 0xeb, 0xdc, 0x44, 0xfb, 0x9f, 0x1a, 0x3d, 0x20, - 0xfb, 0x54, 0xf6, 0x4d, 0xf3, 0xaa, 0x3a, 0xa6, 0x8e, 0xab, 0x6b, 0x0a, 0x69, 0xa6, 0x9f, 0xf8, - 0x5c, 0xcb, 0x37, 0x0f, 0xb4, 0xcf, 0x53, 0x90, 0x6c, 0xc8, 0xab, 0xdd, 0xdd, 0xfc, 0x68, 0x84, - 0x41, 0x9d, 0x7c, 0xc9, 0xca, 0x36, 0x62, 0x8e, 0x9b, 0x0d, 0x89, 0x50, 0x6e, 0xc4, 0x87, 0x69, - 0xa9, 0xdd, 0x6a, 0x7a, 0x7f, 0x6f, 0xfe, 0x70, 0xb8, 0x94, 0x8a, 0xbf, 0x36, 0x9b, 0x7c, 0x2f, - 0xc6, 0x29, 0x8e, 0xba, 0x03, 0xae, 0x99, 0xd7, 0xf9, 0xf4, 0xda, 0xed, 0xf0, 0x43, 0xc7, 0x7c, - 0xb7, 0xc2, 0x52, 0x11, 0x49, 0x73, 0xd2, 0xaf, 0xcf, 0xa7, 0xdf, 0x0d, 0x47, 0xfc, 0xf7, 0x63, - 0xb4, 0x22, 0x49, 0xac, 0xdf, 0xf1, 0x30, 0xf7, 0xd8, 0xef, 0xb5, 0xbe, 0x5b, 0xef, 0x1d, 0xf2, - 0xdf, 0x22, 0x0e, 0xbd, 0x04, 0x53, 0x42, 0xac, 0xf7, 0x7c, 0x6f, 0xd6, 0xf9, 0x6f, 0xb5, 0xbe, - 0x5b, 0xef, 0x5b, 0xe5, 0xbe, 0xf5, 0xbe, 0x5b, 0xe4, 0x7f, 0xda, 0x6a, 0xa8, 0xd3, 0xf0, 0xff, - 0x5b, 0xe5, 0xbe, 0xf5, 0xbe, 0x5b, 0xed, 0x6f, 0x96, 0xf9, 0x3a, 0xf6, 0x8d, 0xbf, 0x8d, 0x8f, - 0xf9, 0x7f, 0xbd, 0x7f, 0x97, 0xfb, 0xc7, 0xfc, 0xbf, 0xde, 0xbf, 0xcb, 0xfd, 0xe4, 0x49, 0x34, - 0x9b, 0xe2, 0x53, 0x42, 0x53, 0x5e, 0x37, 0xc6, 0xbc, 0xab, 0xda, 0xaf, 0x2a, 0xf7, 0x8d, 0x79, - 0x57, 0xbd, 0x57, 0x95, 0x79, 0x32, 0xfc, 0x0e, 0xfc, 0xb0, 0xef, 0xcb, 0xf3, 0x95, 0x7f, 0x1d, - 0x66, 0x81, 0xd6, 0x6b, 0xc3, 0x84, 0x1f, 0xf2, 0xff, 0x6a, 0xa8, 0x44, 0x93, 0x49, 0xbe, 0x25, - 0x34, 0x25, 0x35, 0xe0, 0x82, 0x31, 0xef, 0xf1, 0xaf, 0x2a, 0xd1, 0x8c, 0x7b, 0xa5, 0x5f, 0x9f, - 0x4f, 0xbe, 0x37, 0x8d, 0x79, 0x57, 0xb5, 0x5e, 0x55, 0xef, 0x1a, 0xf2, 0xaf, 0x7a, 0xaf, 0x63, - 0x92, 0x64, 0x9a, 0x69, 0x8b, 0x78, 0x1d, 0xf9, 0x61, 0xdf, 0x97, 0xc4, 0x05, 0x7a, 0xdf, 0x2d, - 0xf6, 0xb7, 0xcb, 0x7c, 0x9d, 0x79, 0xb4, 0xdb, 0xfc, 0xf5, 0xfe, 0x25, 0x34, 0x25, 0x35, 0xe1, - 0x88, 0xff, 0x97, 0xfb, 0xd7, 0xf9, 0x7f, 0xbc, 0x89, 0x26, 0x93, 0x7c, 0x4a, 0x68, 0x4a, 0x6b, - 0xcf, 0x4e, 0xbc, 0xfa, 0x7d, 0xeb, 0x85, 0x23, 0x2d, 0x0a, 0x5a, 0x3d, 0x4b, 0x47, 0xf1, 0xff, - 0x2f, 0xf1, 0x08, 0x43, 0x5f, 0x93, 0x47, 0xe5, 0xa4, 0xe1, 0x78, 0xc5, 0x35, 0x14, 0xd4, 0x53, - 0x51, 0x4d, 0x27, 0xcb, 0x03, 0xd6, 0x0b, 0x03, 0xd6, 0x17, 0x5e, 0xf8, 0xd3, 0x5e, 0xd1, 0xfb, - 0x6f, 0xef, 0xed, 0xb6, 0x7a, 0xed, 0x2a, 0xfe, 0x7d, 0x7d, 0x45, 0xbd, 0xf5, 0xa1, 0xaf, 0x8d, - 0xe9, 0x0d, 0x46, 0xa4, 0x95, 0x75, 0x69, 0x50, 0x98, 0x4f, 0xc3, 0x0a, 0x9c, 0xc7, 0xd6, 0x9a, - 0x7e, 0x36, 0x5c, 0x2e, 0x17, 0x1b, 0x90, 0x76, 0xd6, 0xd6, 0x21, 0x13, 0x59, 0x02, 0x6b, 0x9b, - 0xb3, 0x48, 0x42, 0xc2, 0x18, 0x70, 0x7f, 0xdb, 0xe7, 0x31, 0x73, 0xb0, 0x76, 0x2f, 0xc3, 0xa4, - 0xf5, 0x25, 0x2d, 0x5e, 0x22, 0xdf, 0xdb, 0xb3, 0x8b, 0x7f, 0xe1, 0x5b, 0x35, 0xe4, 0x16, 0x5a, - 0xcf, 0x9a, 0xa9, 0xc6, 0x99, 0x59, 0x2e, 0x7e, 0xde, 0x39, 0xc9, 0x23, 0x55, 0xfc, 0x8b, 0xe1, - 0x88, 0xef, 0x54, 0xa6, 0x35, 0x72, 0xc3, 0x91, 0xf1, 0xf1, 0xdf, 0xeb, 0x69, 0x54, 0x92, 0x5e, - 0x14, 0x39, 0xe8, 0x7a, 0x41, 0x97, 0x27, 0xc3, 0xe3, 0xc8, 0x39, 0xf0, 0xe4, 0x11, 0x1a, 0x75, - 0x1c, 0x82, 0x45, 0x9f, 0x09, 0xe6, 0xc6, 0xa0, 0x3b, 0x46, 0xcf, 0xd7, 0xbe, 0x0a, 0x29, 0x25, - 0xa4, 0x92, 0x49, 0x0f, 0x95, 0x7a, 0x8e, 0xdf, 0x19, 0x69, 0xa6, 0x0d, 0x83, 0x6a, 0xa6, 0x0d, - 0x83, 0x49, 0x2d, 0x24, 0xbf, 0x1a, 0x38, 0x16, 0x2e, 0xe0, 0xc9, 0x64, 0xc3, 0x35, 0xc8, 0x34, - 0x2d, 0x80, 0x2f, 0xf2, 0x0d, 0x2f, 0x1f, 0x9b, 0x9a, 0x39, 0x92, 0x10, 0x1d, 0x65, 0x4e, 0x10, - 0x0b, 0x2d, 0x4a, 0xcc, 0x63, 0x8c, 0xa3, 0x7b, 0x90, 0xec, 0x64, 0x1b, 0x6d, 0x18, 0xff, 0x1e, - 0x91, 0xde, 0x3b, 0x5f, 0x1b, 0xbb, 0x22, 0xcb, 0x19, 0x46, 0x38, 0x15, 0xb6, 0x21, 0x71, 0xc2, - 0xea, 0x1c, 0x29, 0x17, 0xe0, 0x99, 0x43, 0x52, 0xab, 0xdc, 0x81, 0xc0, 0x41, 0x35, 0x5f, 0xe5, - 0xbe, 0x6a, 0xa0, 0x95, 0x3c, 0x60, 0x6b, 0xf9, 0xbe, 0x7f, 0xfc, 0x28, 0x42, 0xcc, 0x3d, 0x64, - 0x25, 0x34, 0xc1, 0x49, 0x59, 0x54, 0xc6, 0xc5, 0x4a, 0x9a, 0x98, 0xf9, 0xce, 0x93, 0x67, 0x2e, - 0xdf, 0xe1, 0xc0, 0xb8, 0xcb, 0x43, 0x48, 0x3c, 0xcd, 0x90, 0xd1, 0x77, 0xff, 0x04, 0x18, 0xff, - 0xbc, 0x7f, 0xdf, 0x31, 0x04, 0x68, 0x82, 0xfc, 0x32, 0x11, 0x6b, 0x2e, 0x97, 0x45, 0x51, 0x6a, - 0xfc, 0x3e, 0x68, 0x92, 0xe9, 0x1b, 0x2a, 0x32, 0xa4, 0xda, 0xf5, 0xa9, 0x03, 0xbc, 0xd3, 0x41, - 0x00, 0x3f, 0x7d, 0x6c, 0x4d, 0x39, 0x77, 0xc1, 0x50, 0x41, 0x26, 0x3a, 0x71, 0xd4, 0xd4, 0x34, - 0xe0, 0xae, 0x8e, 0x6b, 0x50, 0x26, 0x7e, 0x14, 0x12, 0xaf, 0x55, 0xc2, 0xe0, 0xf1, 0x4b, 0x8f, - 0xad, 0xb5, 0x95, 0x79, 0x39, 0x8e, 0x8e, 0xc6, 0xb4, 0x00, 0xf8, 0x20, 0xb5, 0x73, 0xb5, 0x65, - 0x66, 0x49, 0xc1, 0xb2, 0x23, 0x97, 0xdb, 0x6d, 0xb6, 0xfc, 0x3a, 0x29, 0x12, 0xbf, 0x1c, 0xa4, - 0x3e, 0xdd, 0x94, 0xa9, 0x9c, 0x9d, 0x06, 0xec, 0x87, 0xbe, 0x7e, 0x7f, 0xff, 0x85, 0x42, 0xa4, - 0xa8, 0x21, 0x15, 0xf6, 0xd2, 0x13, 0xf9, 0x57, 0x13, 0xec, 0x64, 0xf5, 0x7b, 0xba, 0xe1, 0x53, - 0x8f, 0xf9, 0x7f, 0xbd, 0x7f, 0x97, 0xfb, 0xc8, 0x8e, 0x89, 0xa4, 0xdc, 0xfa, 0xfd, 0xfc, 0x37, - 0xc7, 0x5a, 0x16, 0xb4, 0x19, 0x39, 0x74, 0xbb, 0xef, 0x88, 0x8c, 0xb4, 0x29, 0x68, 0xf5, 0x2d, - 0x0a, 0x5a, 0x3f, 0xc1, 0x05, 0x7f, 0x97, 0xfb, 0xc7, 0xfc, 0xbf, 0xde, 0xbf, 0xcb, 0xfd, 0xe5, - 0x4e, 0x6d, 0x36, 0xff, 0x8c, 0x25, 0x55, 0x75, 0x55, 0xd4, 0xd6, 0xd3, 0x5f, 0x8c, 0xc5, 0x17, - 0x14, 0x5a, 0x49, 0x6d, 0x35, 0xf8, 0xbb, 0x4d, 0x6d, 0x35, 0xf8, 0x54, 0xab, 0xfc, 0xbf, 0xde, - 0xbf, 0xcb, 0xfd, 0xe4, 0x47, 0x44, 0xd2, 0x6e, 0xfd, 0x7e, 0xfe, 0x11, 0x23, 0x4d, 0x6d, 0x35, - 0xb4, 0xd7, 0xe3, 0x2d, 0x35, 0xb5, 0x56, 0xd3, 0x5b, 0x4d, 0x7e, 0x27, 0xd2, 0x4b, 0x49, 0x2f, - 0x1d, 0xab, 0xb7, 0x53, 0x5b, 0x4d, 0x7e, 0x24, 0xa7, 0x81, 0x21, 0x9e, 0x04, 0x87, 0xe3, 0x23, - 0x1e, 0xfe, 0x34, 0xd1, 0x8c, 0x7b, 0xfc, 0x69, 0xa3, 0x7c, 0x10, 0x08, 0x26, 0x13, 0x09, 0x8c, - 0xc2, 0xe1, 0x71, 0x98, 0xcc, 0x6e, 0x37, 0x19, 0x8c, 0xc1, 0xe5, 0x4d, 0x34, 0xd3, 0xff, 0x08, - 0x7c, 0xa4, 0x14, 0x9f, 0x8f, 0xca, 0x9d, 0x86, 0xc6, 0x9f, 0x8f, 0xcf, 0x04, 0x13, 0x10, 0x75, - 0x68, 0xf9, 0x55, 0x4d, 0x1b, 0x0f, 0x95, 0x11, 0x11, 0x31, 0xb1, 0x9c, 0xeb, 0xce, 0xa6, 0x99, - 0x0c, 0xb0, 0xcf, 0x86, 0xcb, 0x9b, 0x29, 0x7f, 0x33, 0x26, 0x31, 0x9f, 0x1b, 0xc6, 0xd6, 0x26, - 0xe3, 0x6b, 0x13, 0x08, 0x3b, 0x1b, 0x06, 0xd2, 0x1e, 0x1b, 0x45, 0x42, 0xf5, 0xfc, 0x42, 0x6b, - 0xc3, 0x19, 0x15, 0x14, 0x97, 0x92, 0x94, 0x8b, 0xd0, 0x4d, 0x31, 0x3a, 0x64, 0xbb, 0xf1, 0x02, - 0x18, 0x30, 0xf3, 0x0e, 0x0c, 0x41, 0x71, 0x0b, 0xb0, 0xda, 0xf2, 0x0a, 0x66, 0x1c, 0x78, 0x2f, - 0xb6, 0x3a, 0xcd, 0xbc, 0xf4, 0x3d, 0x35, 0xf6, 0xa9, 0xaf, 0x82, 0x72, 0xcd, 0x94, 0x0d, 0x3a, - 0x49, 0x37, 0xc3, 0x58, 0xa6, 0xf4, 0xbf, 0x1f, 0x88, 0x7d, 0x13, 0x46, 0xbb, 0xbc, 0x3f, 0x31, - 0x0b, 0x88, 0x47, 0x55, 0xda, 0xed, 0x6e, 0x9b, 0x72, 0x62, 0x5a, 0x51, 0xf6, 0xe3, 0x72, 0xef, - 0xc3, 0xd6, 0x9a, 0xcd, 0xa6, 0xd2, 0xf6, 0x72, 0xf6, 0x10, 0x9b, 0x5d, 0xab, 0xf2, 0x98, 0x94, - 0xc6, 0xfc, 0x14, 0x97, 0x69, 0xad, 0xa6, 0xb9, 0x29, 0x9d, 0xf0, 0xd1, 0x1a, 0x1f, 0x64, 0x5e, - 0xc2, 0x2a, 0x3f, 0x4f, 0xff, 0xc3, 0x84, 0xd5, 0xae, 0x41, 0xa3, 0x77, 0x43, 0x41, 0x14, 0xd3, - 0x5b, 0xe1, 0x12, 0xc8, 0x41, 0x94, 0x82, 0x62, 0x0d, 0xc4, 0x19, 0x88, 0x3c, 0xc4, 0x1f, 0x1b, - 0x60, 0xd8, 0x37, 0x10, 0x5c, 0x41, 0x39, 0x04, 0xe4, 0x17, 0x90, 0x5e, 0x41, 0x6a, 0xaf, 0x41, - 0xd0, 0x67, 0x24, 0xf2, 0x5f, 0x2d, 0xb6, 0xdb, 0x7f, 0xe3, 0x6d, 0x1c, 0x83, 0x53, 0xc8, 0x36, - 0x9a, 0x6a, 0x4c, 0x2e, 0x45, 0x97, 0x25, 0xc1, 0xf1, 0xe5, 0x34, 0xd3, 0x4d, 0xb6, 0xdb, 0x6f, - 0xc6, 0x7b, 0x4d, 0x6d, 0x34, 0xdc, 0x6e, 0x37, 0x1b, 0x94, 0x1b, 0x06, 0xf2, 0x0b, 0xc8, 0x3e, - 0x28, 0xb8, 0xef, 0xa2, 0xe9, 0x25, 0xe1, 0x19, 0xb5, 0xa4, 0xed, 0x35, 0xb4, 0xd7, 0xe3, 0x25, - 0x24, 0x52, 0x4c, 0xe0, 0x3e, 0x6b, 0x4b, 0x49, 0x2d, 0x24, 0xbc, 0x4f, 0x69, 0xad, 0xa6, 0xb1, - 0x22, 0x55, 0x3a, 0xe2, 0x42, 0xa6, 0x53, 0xbc, 0xc4, 0x12, 0xff, 0x03, 0x2f, 0x88, 0x4e, 0xea, - 0xf0, 0x34, 0xea, 0xa3, 0xde, 0xb4, 0xe8, 0xff, 0x85, 0x45, 0x59, 0x4a, 0x46, 0x14, 0x30, 0x49, - 0xd4, 0x0e, 0x6d, 0x0f, 0x5c, 0x3f, 0xfa, 0xaf, 0xe6, 0xc1, 0x1d, 0x23, 0x51, 0x8e, 0x34, 0x5e, - 0x34, 0x91, 0x51, 0xa7, 0x4a, 0xb5, 0xbc, 0x3d, 0x31, 0x95, 0xe5, 0x21, 0x55, 0xa5, 0x4a, 0xfb, - 0x92, 0x0e, 0xef, 0xe1, 0x10, 0xae, 0xd3, 0x5b, 0x58, 0x6b, 0x69, 0xa8, 0x71, 0x42, 0x67, 0xa4, - 0x7d, 0x6f, 0xef, 0x2c, 0x0f, 0xa7, 0xde, 0x7d, 0x7e, 0xf5, 0x26, 0xb2, 0xf9, 0xa1, 0xf8, 0x20, - 0x1c, 0x0f, 0x98, 0x64, 0xe8, 0x35, 0x39, 0x9a, 0x1b, 0x18, 0xdb, 0xce, 0xa0, 0x7b, 0x44, 0x77, - 0xfc, 0x57, 0x15, 0xf8, 0xd3, 0x47, 0xcf, 0x23, 0xa6, 0x75, 0x3e, 0x30, 0xab, 0x34, 0x7d, 0x1b, - 0x9e, 0x5f, 0x14, 0xa5, 0xdd, 0xdf, 0xfc, 0x26, 0x58, 0xcf, 0xbb, 0x4c, 0x0c, 0x72, 0x18, 0xe9, - 0x4c, 0x39, 0x6d, 0xdf, 0x0a, 0x1a, 0xc3, 0x72, 0x86, 0x02, 0x53, 0x2e, 0x34, 0xbc, 0x77, 0xf8, - 0x6f, 0x34, 0x47, 0xf5, 0x2a, 0xae, 0x4e, 0xfc, 0x22, 0x17, 0x07, 0xc4, 0x48, 0x42, 0x81, 0xe2, - 0x3f, 0x12, 0x5a, 0x49, 0x62, 0x66, 0xed, 0x35, 0xe2, 0xed, 0x35, 0xb4, 0xd6, 0x5e, 0x0b, 0xad, - 0x35, 0xc3, 0xf9, 0x6f, 0x5f, 0x1a, 0x29, 0xa6, 0x9a, 0x6b, 0x1f, 0xf2, 0xff, 0x48, 0xf4, 0xc9, - 0x61, 0x2c, 0xa3, 0x29, 0x55, 0x50, 0x58, 0x4b, 0x14, 0x62, 0x17, 0xff, 0x1b, 0xd6, 0xb8, 0x28, - 0x32, 0x55, 0x28, 0x9d, 0x47, 0x94, 0x7b, 0xd4, 0x79, 0x47, 0xbe, 0x17, 0xee, 0xee, 0xfe, 0x0b, - 0x2e, 0xea, 0xbd, 0x34, 0xda, 0xc6, 0x94, 0xf7, 0xc1, 0x18, 0xb4, 0xb1, 0x24, 0x01, 0xdf, 0x09, - 0x74, 0x92, 0xda, 0x6b, 0xc6, 0x5a, 0x69, 0x24, 0x9a, 0x69, 0x2b, 0x4d, 0x24, 0xcd, 0x03, 0x35, - 0x10, 0x3f, 0xc2, 0x36, 0x9a, 0xda, 0x6b, 0x69, 0xaf, 0xc4, 0xf4, 0x92, 0xd2, 0x4b, 0xc2, 0x36, - 0x9a, 0xda, 0x6b, 0x69, 0xae, 0x1c, 0x53, 0x10, 0x72, 0xe9, 0x77, 0x6c, 0xbb, 0xcb, 0xa5, 0xdc, - 0xba, 0x5d, 0x2a, 0x1c, 0x03, 0xcd, 0xa6, 0xdf, 0xf1, 0x05, 0x19, 0x68, 0x42, 0xcb, 0x7e, 0x7f, - 0x2f, 0xf7, 0x93, 0x8a, 0x10, 0x6c, 0x76, 0x1f, 0x1f, 0x87, 0xab, 0xea, 0x6f, 0xf8, 0x76, 0xad, - 0x61, 0x42, 0x1a, 0x5e, 0xa3, 0x5d, 0x74, 0xcb, 0xfb, 0xbb, 0xfa, 0x47, 0xea, 0xcc, 0x36, 0x4f, - 0x87, 0x79, 0x88, 0x26, 0x20, 0xa1, 0x1d, 0xad, 0x54, 0xd6, 0xb5, 0x56, 0x0a, 0x63, 0xbf, 0xdb, - 0x2d, 0x2b, 0xf0, 0xa9, 0x5a, 0x43, 0xa8, 0xfe, 0xe8, 0x18, 0x4c, 0xe9, 0xf9, 0xd0, 0xa0, 0x37, - 0x6f, 0xff, 0x34, 0x65, 0x62, 0xfe, 0x2a, 0x25, 0xc0, 0xe8, 0x2a, 0xc2, 0x8c, 0xb1, 0xa4, 0x97, - 0xe0, 0x87, 0x53, 0x49, 0x24, 0x8f, 0xbe, 0x08, 0x64, 0x3e, 0xc9, 0x1a, 0x48, 0xb7, 0xe0, 0xab, - 0xa4, 0x95, 0x10, 0x65, 0x85, 0x2a, 0xf1, 0xdf, 0x26, 0x5e, 0x1f, 0x24, 0x07, 0x2f, 0x27, 0x5d, - 0xd8, 0x7d, 0x27, 0x2f, 0x67, 0x6f, 0x41, 0xb5, 0x53, 0x5b, 0x97, 0xbd, 0xae, 0x72, 0xa9, 0x9c, - 0xd7, 0x11, 0xcf, 0x77, 0xf8, 0x58, 0xc6, 0x21, 0x31, 0x09, 0x88, 0x5c, 0x42, 0xd4, 0x2b, 0x2d, - 0x9a, 0x97, 0xff, 0xe5, 0x2e, 0x30, 0xbf, 0x88, 0xed, 0x35, 0xb4, 0x7c, 0xf0, 0xf9, 0x41, 0xd7, - 0x41, 0xd7, 0x4e, 0x0e, 0xba, 0x03, 0xae, 0x98, 0x3a, 0xe8, 0x0e, 0xba, 0x64, 0x49, 0x34, 0x9b, - 0xff, 0x84, 0xf8, 0x3a, 0xe8, 0x0e, 0xf4, 0xc1, 0xd7, 0x40, 0x75, 0xd3, 0xc1, 0x47, 0x19, 0x68, - 0x52, 0xd1, 0xa9, 0x68, 0x52, 0xd0, 0x25, 0xa7, 0xc6, 0xc1, 0xd7, 0x41, 0xd7, 0x4c, 0x75, 0xd0, - 0x75, 0xd3, 0x07, 0x5d, 0x01, 0xd7, 0x4e, 0x0e, 0xba, 0x03, 0xae, 0x99, 0x12, 0x4d, 0x26, 0xff, - 0xc4, 0x02, 0xcf, 0x1a, 0x68, 0xc7, 0x7c, 0xb7, 0xdd, 0x6f, 0x96, 0xf8, 0x4b, 0x4f, 0x10, 0x08, - 0x23, 0x1e, 0x51, 0xef, 0xd5, 0x78, 0x9e, 0xa0, 0xeb, 0xa0, 0x96, 0x99, 0xb0, 0x4e, 0x9b, 0x31, - 0x3d, 0xab, 0xfc, 0x16, 0x0a, 0x90, 0x93, 0x12, 0xac, 0x0f, 0x76, 0xe7, 0x8c, 0x0e, 0x13, 0x8c, - 0x5c, 0x6a, 0x2f, 0xbe, 0x17, 0x10, 0xd8, 0x66, 0xf4, 0x46, 0x65, 0x76, 0xbf, 0xdd, 0x64, 0x41, - 0x1f, 0xf1, 0x5b, 0xbb, 0xf8, 0x2a, 0xef, 0x52, 0xbd, 0xca, 0xdd, 0x5d, 0x43, 0x26, 0x59, 0x96, - 0x18, 0x37, 0xbb, 0x0d, 0x31, 0xf0, 0xfd, 0x07, 0x43, 0x94, 0x11, 0x17, 0x0d, 0x18, 0xa9, 0x89, - 0x4d, 0xcb, 0x96, 0x16, 0x2f, 0xc5, 0x46, 0x54, 0xef, 0x8a, 0x43, 0xce, 0x4d, 0xa6, 0xdc, 0xdc, - 0x1d, 0xf8, 0xb7, 0xf8, 0xde, 0x3f, 0xbe, 0xdb, 0x43, 0x5f, 0x4d, 0x1b, 0x98, 0x73, 0x1a, 0x36, - 0x6d, 0xe9, 0x69, 0x32, 0xd1, 0xf5, 0xba, 0xd3, 0x4d, 0x34, 0xfc, 0x3e, 0x42, 0x33, 0x55, 0x30, - 0x63, 0x44, 0x13, 0xd4, 0xa5, 0x61, 0x2b, 0x36, 0xdb, 0x39, 0x7c, 0x1d, 0xfe, 0xce, 0x9f, 0x85, - 0x0e, 0x68, 0xa9, 0x9b, 0xd5, 0x11, 0x5a, 0x92, 0xd4, 0xd3, 0x41, 0xd4, 0x63, 0xdb, 0x07, 0x95, - 0x5c, 0xee, 0xba, 0x19, 0xca, 0x47, 0x77, 0xc7, 0x08, 0x76, 0x1d, 0x18, 0x45, 0x8a, 0xfc, 0x5d, - 0x16, 0xf7, 0x3f, 0x32, 0xf4, 0x5a, 0x9d, 0x74, 0xff, 0x16, 0x19, 0xc1, 0xd7, 0x40, 0x75, 0xd3, - 0x07, 0x5d, 0x01, 0xd7, 0x4f, 0x0a, 0xe3, 0xfe, 0xeb, 0xfd, 0xf4, 0xab, 0xf3, 0x69, 0xb7, 0xc3, - 0x1c, 0x75, 0xa1, 0x6b, 0x46, 0xb5, 0xa1, 0x6b, 0x41, 0x93, 0x97, 0x4b, 0xbf, 0xe1, 0xf8, 0x3a, - 0xe8, 0x0e, 0xba, 0x60, 0xeb, 0xa0, 0x3a, 0xe9, 0xc1, 0xd7, 0x40, 0x75, 0xd3, 0x22, 0x49, 0xa4, - 0xdf, 0xfe, 0x79, 0x53, 0x9b, 0x4d, 0xbf, 0xe3, 0x88, 0xd3, 0x5b, 0x4d, 0x6d, 0x35, 0xf8, 0x28, - 0x31, 0xc8, 0x4e, 0x42, 0x72, 0x17, 0x90, 0x93, 0x09, 0x8e, 0xb7, 0x5d, 0x7c, 0x6f, 0x96, 0x9b, - 0xbe, 0x52, 0x45, 0x24, 0xf6, 0x92, 0x29, 0x2e, 0x3b, 0x4e, 0x43, 0x22, 0x26, 0x5b, 0x6d, 0xb6, - 0xfc, 0x16, 0x5a, 0x1d, 0x8d, 0xb8, 0xac, 0x6e, 0xc9, 0x88, 0x2f, 0x20, 0xba, 0xf5, 0x8f, 0x0f, - 0xab, 0x83, 0x03, 0xf3, 0x28, 0x4e, 0x4d, 0x48, 0x84, 0x75, 0x89, 0x58, 0x45, 0x7f, 0xe0, 0x82, - 0xd3, 0xaa, 0x4e, 0xea, 0xe3, 0xbe, 0x8b, 0x49, 0x2a, 0xa6, 0x9a, 0x49, 0xff, 0x84, 0x08, 0xcf, - 0x1c, 0x65, 0xe7, 0x2b, 0x45, 0x44, 0x72, 0xa7, 0xbe, 0x5b, 0xf0, 0x54, 0x53, 0xe7, 0xb4, 0xd6, - 0xd3, 0x58, 0xbd, 0xb0, 0xe6, 0x03, 0x1b, 0xe7, 0xa0, 0xfa, 0xfd, 0xeb, 0x6d, 0xb6, 0xcf, 0xa7, - 0xdd, 0xfa, 0xfd, 0xc0, 0xe3, 0x69, 0x34, 0x9a, 0xff, 0xf8, 0x8e, 0x7a, 0x1e, 0x99, 0xe8, 0x7a, - 0x78, 0x7c, 0xa0, 0xeb, 0xa0, 0xeb, 0xa7, 0x07, 0x5d, 0x01, 0xd7, 0x4c, 0x1d, 0x74, 0x07, 0x5d, - 0x32, 0x24, 0x9a, 0x4d, 0xff, 0xc4, 0x46, 0x5a, 0x14, 0xb4, 0x7a, 0x96, 0x85, 0x2d, 0x1f, 0xe1, - 0x58, 0xeb, 0xa0, 0xeb, 0xa6, 0x3a, 0xe8, 0x3a, 0xe9, 0x91, 0x24, 0xd6, 0x6f, 0xfe, 0x72, 0x99, - 0x39, 0x74, 0xbb, 0xef, 0xb1, 0x18, 0xc2, 0xeb, 0x86, 0x3a, 0x49, 0x09, 0x73, 0x53, 0x4f, 0xf6, - 0xdb, 0x6d, 0xbf, 0x47, 0x63, 0xe1, 0xe8, 0xc7, 0x8c, 0x14, 0x8d, 0x55, 0x31, 0xda, 0x6b, 0x69, - 0x5b, 0x4a, 0xda, 0x11, 0x0e, 0xc9, 0xa4, 0xdd, 0xa0, 0x63, 0xe4, 0x6d, 0x64, 0x7c, 0x3f, 0x51, - 0x4d, 0x45, 0x35, 0x14, 0xd4, 0x53, 0x18, 0xa6, 0x63, 0x48, 0x55, 0xe4, 0x77, 0xee, 0xd3, 0x6a, - 0xc9, 0x6e, 0x35, 0xe8, 0x88, 0xe9, 0xf1, 0x16, 0x9a, 0xda, 0x6b, 0xf3, 0x95, 0x10, 0xeb, 0xca, - 0x68, 0xa6, 0x85, 0x59, 0x6b, 0x7c, 0x16, 0x1a, 0x81, 0xba, 0xe3, 0x48, 0x9b, 0x4c, 0x61, 0xff, - 0xd7, 0x73, 0xe0, 0xc3, 0xa6, 0xd1, 0xb7, 0x49, 0x2d, 0x55, 0xd5, 0xff, 0xcf, 0x57, 0x71, 0x2b, - 0x17, 0xfe, 0x27, 0x6e, 0xdd, 0xbb, 0x7e, 0x14, 0xd8, 0x8e, 0xa1, 0x6a, 0x76, 0xd2, 0x4d, 0x60, - 0x48, 0x19, 0xa8, 0xba, 0x5b, 0x76, 0x36, 0x95, 0x30, 0x99, 0xfa, 0x28, 0x8b, 0x4f, 0x82, 0x88, - 0xcb, 0x42, 0x96, 0x8f, 0x52, 0xd0, 0xa5, 0xa3, 0xc8, 0x9f, 0x17, 0xe0, 0xeb, 0xa0, 0x3a, 0xe9, - 0x83, 0xae, 0x80, 0xeb, 0xa7, 0xa8, 0x8b, 0x4f, 0x86, 0x3c, 0x77, 0xd8, 0xeb, 0xa0, 0x3a, 0xe8, - 0x44, 0x93, 0x49, 0xbf, 0xf1, 0x21, 0x58, 0xcb, 0x42, 0x96, 0x85, 0xfe, 0x5f, 0xe5, 0x2d, 0x0a, - 0x5a, 0x17, 0xf9, 0x7f, 0x84, 0x5a, 0x3a, 0x26, 0x93, 0x73, 0xe9, 0xf7, 0xe2, 0x42, 0x9f, 0x5f, - 0xe5, 0xfe, 0xf5, 0xfe, 0x5f, 0xe5, 0x1e, 0x51, 0xe5, 0xfe, 0x5f, 0xe5, 0x1e, 0x51, 0xe5, 0xfe, - 0x5f, 0xe1, 0x04, 0xd3, 0xe0, 0xa8, 0xdf, 0x12, 0x47, 0x21, 0x7e, 0xd6, 0xe1, 0x8a, 0x36, 0x8c, - 0x2d, 0xc0, 0x85, 0x4d, 0xf0, 0xe8, 0xaf, 0x23, 0x9b, 0x65, 0x33, 0x09, 0xaf, 0x18, 0x88, 0x77, - 0x56, 0x1f, 0x7d, 0xcf, 0x4e, 0xe2, 0xaf, 0xfc, 0x29, 0x8f, 0x58, 0x1c, 0x4c, 0x33, 0xbe, 0xaa, - 0xf2, 0xea, 0x2d, 0xe8, 0x32, 0xe1, 0x54, 0x39, 0x77, 0xb1, 0x06, 0xff, 0x04, 0xb7, 0xdf, 0x68, - 0x21, 0xc4, 0x56, 0xf2, 0xc9, 0xc7, 0x77, 0xc3, 0xb4, 0x58, 0x9d, 0x9c, 0xca, 0xa6, 0x6b, 0xa9, - 0x51, 0x86, 0x0a, 0x34, 0x4a, 0x12, 0x89, 0xdf, 0x4c, 0x5b, 0x27, 0xe9, 0x93, 0xc7, 0xe3, 0x4a, - 0xd8, 0x21, 0xe9, 0x34, 0x39, 0x70, 0x64, 0xc2, 0xf3, 0xda, 0xa2, 0xbb, 0x92, 0xb1, 0x86, 0x13, - 0xd3, 0xa0, 0x77, 0x33, 0x42, 0x49, 0x24, 0xd3, 0x4d, 0x3f, 0x1b, 0x4c, 0x93, 0x4b, 0x8d, 0xf4, - 0xa1, 0x39, 0x1d, 0xb0, 0x55, 0x4c, 0x62, 0x36, 0xbc, 0xf7, 0x3b, 0x5e, 0x66, 0x1a, 0x94, 0xc2, - 0xfc, 0x69, 0xa6, 0x9f, 0x84, 0x46, 0x63, 0x23, 0xa2, 0x32, 0x36, 0x71, 0x8c, 0xe6, 0x96, 0xb9, - 0x15, 0x7c, 0x60, 0x55, 0xb5, 0x1a, 0xa3, 0x07, 0xd4, 0xd6, 0x99, 0x48, 0x32, 0x90, 0xb4, 0xd7, - 0xf1, 0x9a, 0xaa, 0xea, 0xab, 0x69, 0xad, 0xa6, 0xbf, 0x39, 0x4a, 0x8c, 0xb3, 0x69, 0xb7, 0x2e, - 0x97, 0x61, 0xcd, 0x28, 0xcb, 0x3f, 0x5f, 0xa6, 0xd7, 0x6b, 0xf5, 0xfa, 0xed, 0x76, 0x9f, 0x5f, - 0xbb, 0xf5, 0xfb, 0x88, 0xb4, 0x93, 0x59, 0xbf, 0xe1, 0x85, 0x0c, 0x65, 0x93, 0x26, 0xf2, 0x69, - 0x37, 0xff, 0x1c, 0x00, 0x6c, 0x38, 0xa1, 0xf6, 0x58, 0xfa, 0x7d, 0xcf, 0xa7, 0xdf, 0xfc, 0x89, - 0x26, 0xb3, 0x7f, 0xf0, 0x5a, 0x21, 0xa6, 0x0e, 0xd4, 0xf4, 0xf0, 0xf8, 0x2a, 0x3d, 0x06, 0xfa, - 0x2f, 0xa7, 0x4d, 0x32, 0x74, 0xe3, 0x20, 0xbe, 0x15, 0xd7, 0x8f, 0xd1, 0x6f, 0x9b, 0xd7, 0xd3, - 0x17, 0x5f, 0xab, 0x66, 0xfe, 0x1d, 0xb5, 0x56, 0xed, 0xf1, 0xaa, 0x71, 0xc0, 0x1a, 0x4d, 0x25, - 0x7f, 0x7c, 0x12, 0xea, 0x6b, 0x69, 0xaf, 0x2f, 0x82, 0x0a, 0x79, 0x35, 0x21, 0x0f, 0xcf, 0x41, - 0x0f, 0xf8, 0xe3, 0x4d, 0xdb, 0x6d, 0xbf, 0xf5, 0xd2, 0xbf, 0x0a, 0xf6, 0x9a, 0xda, 0x68, 0x76, - 0xfb, 0x6d, 0x9c, 0xfb, 0x77, 0xcf, 0x88, 0xec, 0x1d, 0xb4, 0x1d, 0xb5, 0xba, 0xfd, 0xf1, 0x85, - 0x9a, 0x05, 0x87, 0x9a, 0x19, 0x61, 0xe6, 0x81, 0x61, 0x9f, 0x9e, 0x44, 0x93, 0x49, 0xbf, 0xf8, - 0x88, 0xff, 0x97, 0xfb, 0xd7, 0xf9, 0x7f, 0xbf, 0xc3, 0x11, 0x8f, 0x28, 0xf7, 0xa8, 0xf2, 0x8f, - 0x79, 0x12, 0x4d, 0x26, 0xff, 0xf3, 0xd2, 0x2f, 0x26, 0x93, 0x75, 0xc3, 0x11, 0x8f, 0x28, 0xf7, - 0xa8, 0xf2, 0x8f, 0x79, 0x12, 0x4d, 0x26, 0xff, 0xe0, 0x83, 0x83, 0xae, 0x80, 0xeb, 0xa7, 0x44, - 0x35, 0xec, 0x75, 0xd0, 0x1d, 0x74, 0x4c, 0xbf, 0x2e, 0x97, 0x57, 0x0e, 0xc6, 0x29, 0xf1, 0x8a, - 0x6a, 0x29, 0xe0, 0xeb, 0xa0, 0x3a, 0xe8, 0xe7, 0xcf, 0x09, 0x74, 0xbb, 0xe1, 0x78, 0x3a, 0xe8, - 0x3a, 0xe9, 0xc6, 0xa9, 0x55, 0x43, 0x44, 0x71, 0x96, 0x12, 0xc0, 0x86, 0x89, 0x99, 0xa1, 0xe3, - 0x4c, 0xd3, 0x58, 0xfa, 0xac, 0x48, 0x8b, 0x5c, 0xb5, 0x45, 0x1f, 0xf5, 0x5f, 0xdf, 0x93, 0xa7, - 0x3f, 0x0b, 0x74, 0xda, 0x33, 0x3b, 0x4d, 0x37, 0xd5, 0x55, 0x7d, 0x62, 0xf8, 0x42, 0x2f, 0xcd, - 0x87, 0xc3, 0x46, 0x83, 0x68, 0x0e, 0xfa, 0x41, 0x88, 0x2c, 0xdf, 0x0c, 0x17, 0x83, 0xae, 0x80, - 0xeb, 0xa6, 0x0e, 0xba, 0x03, 0xae, 0x84, 0x49, 0x34, 0x9b, 0xff, 0x8c, 0x23, 0x55, 0x24, 0x95, - 0x4f, 0xc4, 0xa5, 0x83, 0x60, 0xe2, 0x2e, 0xed, 0x35, 0xe1, 0x4b, 0x53, 0x90, 0x4e, 0x41, 0xce, - 0x41, 0x0f, 0x30, 0xe6, 0x6c, 0x36, 0x54, 0xfb, 0xea, 0x52, 0xa7, 0xc1, 0x6d, 0xaa, 0xb6, 0x9a, - 0xce, 0x97, 0xc1, 0x68, 0xad, 0xdf, 0x77, 0x32, 0x1e, 0xf8, 0xc3, 0x69, 0xa7, 0x53, 0xbe, 0x98, - 0xad, 0x23, 0x90, 0x60, 0xa2, 0x0f, 0x29, 0xb1, 0xf4, 0xce, 0xcb, 0x78, 0x50, 0xa1, 0x4b, 0x64, - 0xa1, 0xae, 0x1d, 0xc6, 0xe3, 0x17, 0xaa, 0x07, 0x8d, 0x22, 0x93, 0xb6, 0x96, 0x66, 0x07, 0x50, - 0x31, 0xf0, 0x41, 0x3c, 0x03, 0x3b, 0xa1, 0x3d, 0xcd, 0x3d, 0x96, 0x55, 0x25, 0xca, 0xd9, 0x77, - 0x2f, 0x6f, 0xff, 0x0e, 0xdd, 0x09, 0xde, 0xdc, 0xac, 0x8d, 0xba, 0xb7, 0x28, 0x17, 0xa2, 0xa5, - 0xb3, 0xff, 0xc1, 0x04, 0xba, 0xa5, 0xd8, 0x8f, 0xf4, 0xda, 0x66, 0x31, 0x1c, 0xc8, 0xb1, 0x4d, - 0x34, 0xd3, 0xff, 0x05, 0x67, 0x62, 0x43, 0x19, 0xb6, 0x37, 0xa8, 0x61, 0x8e, 0x87, 0x39, 0x0b, - 0x14, 0x80, 0xb3, 0x1f, 0x18, 0x31, 0x0d, 0x06, 0x78, 0xe8, 0xc9, 0x05, 0x4a, 0x43, 0x17, 0xc2, - 0xb1, 0x63, 0xd2, 0x0d, 0xa4, 0xd3, 0xd3, 0xa2, 0x43, 0xf1, 0x62, 0xc7, 0x0e, 0x2d, 0x64, 0xc8, - 0xde, 0x36, 0x0c, 0x04, 0x57, 0xfe, 0x09, 0xc6, 0xe3, 0x14, 0xd6, 0x35, 0x5a, 0xd1, 0xe4, 0x4f, - 0x82, 0x0f, 0x1a, 0xa0, 0xeb, 0xa0, 0x3a, 0xe9, 0x83, 0xae, 0x87, 0xb4, 0xe2, 0x93, 0x59, 0xbf, - 0xf8, 0x29, 0x27, 0x12, 0x5a, 0x49, 0x72, 0x92, 0x36, 0x15, 0x3e, 0x1a, 0x21, 0xb0, 0xd9, 0xaa, - 0xb2, 0x37, 0xfd, 0x70, 0xb6, 0xc9, 0x83, 0x3e, 0xcd, 0x88, 0x1b, 0xf0, 0xed, 0x71, 0x8d, 0x5b, - 0xff, 0xc4, 0x96, 0xdd, 0xbb, 0x76, 0xfc, 0x3c, 0x58, 0x3d, 0xb1, 0xc1, 0xd6, 0xc4, 0x1d, 0x6c, - 0x41, 0xd6, 0xc4, 0x1d, 0x6c, 0x26, 0x7f, 0x33, 0xcb, 0xb4, 0x7e, 0x15, 0x83, 0xad, 0x88, 0xeb, - 0x62, 0x0e, 0xb6, 0x20, 0xeb, 0x62, 0x97, 0xf3, 0x3e, 0x67, 0xf8, 0x2f, 0xc1, 0xd6, 0xc0, 0x3a, - 0xe8, 0xf7, 0x60, 0xeb, 0xa0, 0x3a, 0xe8, 0x8b, 0xbf, 0x2c, 0x0b, 0xbf, 0xa8, 0x14, 0xe0, 0x37, - 0xc1, 0x49, 0x29, 0xd3, 0xe3, 0xbe, 0xd2, 0x1d, 0xf3, 0x5f, 0x5a, 0xc7, 0x93, 0x04, 0x80, 0x62, - 0x02, 0xea, 0xde, 0x7d, 0x3e, 0x89, 0x4c, 0x9e, 0x99, 0xf3, 0xdb, 0xed, 0xb7, 0x5b, 0x7e, 0x73, - 0xa2, 0x2d, 0x78, 0xb6, 0x2d, 0xfe, 0x17, 0x8f, 0xf9, 0x7f, 0xbc, 0x6b, 0xca, 0xbd, 0xe2, 0x52, - 0x3a, 0x15, 0x08, 0x54, 0x2f, 0xfc, 0x70, 0x8e, 0xd0, 0xf2, 0x9b, 0x0d, 0x90, 0x1c, 0x6f, 0xc7, - 0xe2, 0x07, 0xf8, 0x62, 0x18, 0xca, 0x61, 0x28, 0xf4, 0xe9, 0xc7, 0x7d, 0x34, 0x10, 0x2f, 0xe8, - 0x24, 0x79, 0xb6, 0xd3, 0x4c, 0x9c, 0x30, 0x27, 0x1d, 0xf2, 0xdf, 0x6b, 0x7c, 0xb7, 0xc9, 0x97, - 0xe5, 0xd2, 0xef, 0x85, 0xe3, 0x14, 0xfe, 0x1c, 0xc7, 0x2b, 0xfc, 0x02, 0xd0, 0xb3, 0x12, 0x5a, - 0x17, 0xff, 0x09, 0x13, 0x49, 0x2e, 0x24, 0xbc, 0x12, 0xf4, 0x92, 0xd2, 0x1d, 0xf3, 0x7c, 0x6c, - 0x84, 0xb1, 0xd2, 0x4b, 0x49, 0x2d, 0x24, 0xb6, 0xfd, 0x84, 0x43, 0x27, 0x4c, 0xf1, 0x22, 0xb4, - 0xe9, 0xb4, 0x3f, 0xef, 0xe1, 0x62, 0x8c, 0x53, 0x51, 0x4d, 0x45, 0x35, 0x14, 0xd3, 0x2f, 0xcb, - 0xa5, 0xdf, 0x64, 0xad, 0xa7, 0xf3, 0x9d, 0x03, 0xaf, 0xf1, 0x8e, 0xf1, 0x8e, 0xf1, 0x44, 0x07, - 0x5b, 0x10, 0x75, 0xb1, 0x07, 0x5b, 0x14, 0x7f, 0x1b, 0xe3, 0x54, 0x07, 0x5d, 0x20, 0xff, 0x8d, - 0x50, 0x1d, 0x74, 0x43, 0xe8, 0x08, 0xfd, 0x28, 0xa9, 0x78, 0x56, 0x77, 0x03, 0xae, 0x80, 0xeb, - 0x63, 0x07, 0x5d, 0x01, 0xd7, 0x4c, 0xe6, 0x7c, 0x92, 0xe6, 0x7f, 0x8e, 0x27, 0x69, 0xad, 0xa6, - 0xb8, 0xd7, 0xbc, 0x16, 0xe7, 0x2a, 0x72, 0xb8, 0x51, 0x5f, 0x95, 0x67, 0xc1, 0x04, 0xe5, 0x71, - 0xb7, 0x43, 0x4a, 0xe9, 0x25, 0xd2, 0x48, 0xc8, 0xc8, 0x87, 0x65, 0x7a, 0x1f, 0xf8, 0x29, 0x26, - 0x42, 0x24, 0x23, 0x94, 0x82, 0x52, 0x09, 0x71, 0xb8, 0xcc, 0x66, 0x65, 0xf0, 0xaf, 0x2e, 0x17, - 0x10, 0x9e, 0xaa, 0x90, 0xc8, 0x6b, 0x50, 0x6f, 0x3f, 0xe1, 0xda, 0xf5, 0xfa, 0x45, 0xc9, 0x30, - 0x9b, 0x8c, 0x28, 0xe0, 0xd8, 0x44, 0xd6, 0xeb, 0xff, 0x0a, 0x97, 0x49, 0x20, 0xc0, 0xc3, 0x82, - 0xc6, 0x4e, 0x28, 0x45, 0x8c, 0x10, 0xa0, 0x0d, 0x4c, 0xd1, 0x49, 0xd1, 0xff, 0x09, 0x97, 0x07, - 0x5d, 0x01, 0xd7, 0x4c, 0x1d, 0x74, 0x07, 0x5d, 0x3c, 0xf1, 0x2d, 0x38, 0xaa, 0x15, 0x5f, 0xe1, - 0x70, 0x85, 0xee, 0x9b, 0x69, 0xb6, 0xbe, 0xee, 0xef, 0xe3, 0x49, 0x10, 0x79, 0xdd, 0x15, 0x63, - 0xd4, 0xbd, 0x0e, 0x18, 0xfe, 0x8d, 0xa4, 0x11, 0x0d, 0xa7, 0x8b, 0xc6, 0x53, 0x71, 0xc4, 0x67, - 0x72, 0x06, 0x3c, 0x4e, 0xfb, 0x10, 0xa1, 0x55, 0x6d, 0x98, 0x44, 0x6f, 0x8f, 0x91, 0x1b, 0x5c, - 0x35, 0x35, 0x7c, 0x6f, 0x36, 0xd1, 0xa4, 0x56, 0xfd, 0x13, 0x6c, 0xad, 0x50, 0xaf, 0xee, 0x44, - 0x4f, 0x99, 0x2d, 0x4a, 0x3b, 0x72, 0x0c, 0xcf, 0x1e, 0xe1, 0xaa, 0xad, 0xc8, 0x5a, 0xa1, 0x17, - 0xff, 0x8c, 0x94, 0xf1, 0xb6, 0x3b, 0x74, 0xb9, 0x63, 0x4c, 0x77, 0x26, 0xa1, 0x70, 0x60, 0xe5, - 0x95, 0xf5, 0x55, 0xed, 0xdf, 0xfc, 0x6f, 0x74, 0x93, 0x52, 0x67, 0x64, 0x57, 0xd2, 0x21, 0x33, - 0xcc, 0x42, 0xd6, 0x38, 0x95, 0xf5, 0x55, 0x5d, 0xf2, 0xbf, 0xe3, 0x72, 0x47, 0xcc, 0xe6, 0xf4, - 0x81, 0x4f, 0x52, 0xa0, 0xad, 0xb3, 0x19, 0x21, 0xbc, 0x83, 0xc7, 0x3e, 0xdd, 0x35, 0xf0, 0xa1, - 0xf0, 0xc3, 0x4c, 0xe4, 0xb1, 0xca, 0x93, 0x6d, 0xe8, 0xa5, 0x1f, 0x86, 0xc5, 0xee, 0x51, 0x8a, - 0xba, 0xc6, 0xce, 0x93, 0x3e, 0x32, 0x81, 0xad, 0x7a, 0x1a, 0x19, 0xc5, 0x46, 0xac, 0x27, 0xa5, - 0x11, 0x0c, 0x4e, 0x1b, 0xc0, 0x69, 0xf0, 0x91, 0xfe, 0x4c, 0xf0, 0x80, 0x8d, 0xba, 0xa1, 0x1d, - 0x12, 0xd6, 0xe9, 0xdb, 0x09, 0xd9, 0x64, 0x61, 0x12, 0xe7, 0x0a, 0x8d, 0xd6, 0x11, 0x60, 0xc2, - 0x6c, 0x3f, 0xc3, 0x3a, 0x92, 0x1c, 0x11, 0xc5, 0x96, 0x6c, 0x07, 0xef, 0x8c, 0xa5, 0x16, 0x92, - 0x5b, 0x4d, 0x6d, 0x34, 0x6d, 0xfc, 0x47, 0x49, 0x29, 0xf4, 0x66, 0x73, 0xf3, 0x9d, 0x7f, 0x27, - 0x38, 0x5f, 0xc5, 0x9b, 0x32, 0x86, 0xc9, 0xfb, 0x7e, 0x20, 0xe3, 0xbe, 0x5b, 0xef, 0x5b, 0xe5, - 0xbe, 0xf5, 0xc1, 0x29, 0x8e, 0xbe, 0xc5, 0x2c, 0xba, 0x31, 0x45, 0xe7, 0x29, 0xd1, 0x11, 0xf4, - 0xfb, 0x93, 0x59, 0xbf, 0x9e, 0xa0, 0xea, 0x34, 0x0e, 0xa3, 0x5f, 0xf1, 0x28, 0x83, 0x83, 0x7c, - 0x6e, 0xe9, 0x0e, 0x54, 0x91, 0x40, 0x06, 0x2f, 0xa4, 0x32, 0xb2, 0x86, 0x0d, 0x70, 0x97, 0xdb, - 0x41, 0x89, 0x4c, 0xbe, 0xbe, 0x08, 0x74, 0xe9, 0xb4, 0x62, 0x33, 0xf3, 0xca, 0x22, 0x74, 0x31, - 0x24, 0x6a, 0x16, 0x3f, 0x5d, 0xf1, 0x96, 0x88, 0x0f, 0xc3, 0xc5, 0x51, 0xe5, 0x1e, 0xf5, 0x1e, - 0x30, 0x52, 0x35, 0x54, 0x18, 0xf1, 0x82, 0x91, 0xaa, 0xa0, 0x27, 0x3a, 0x26, 0x86, 0x1e, 0xb6, - 0x07, 0xd7, 0xee, 0xb8, 0x4b, 0x8d, 0x79, 0x57, 0xb1, 0xaf, 0x2a, 0xf7, 0x82, 0xb2, 0x24, 0x97, - 0xcf, 0xb6, 0x9a, 0x4e, 0x80, 0x4f, 0x98, 0xa3, 0x2d, 0x0a, 0x5a, 0x16, 0xb4, 0x2d, 0x68, 0xf2, - 0xd4, 0xb4, 0x29, 0x68, 0x1e, 0x89, 0x0f, 0x44, 0x89, 0xc6, 0x88, 0x17, 0x43, 0xb6, 0x7c, 0x2a, - 0xa7, 0xe3, 0xb4, 0xe4, 0x31, 0xca, 0xab, 0x92, 0x2d, 0x30, 0xf4, 0xc6, 0x21, 0x38, 0xfc, 0x31, - 0x77, 0x79, 0x3b, 0x93, 0xc8, 0xa6, 0x54, 0x99, 0x99, 0x27, 0x8f, 0xfe, 0x1e, 0xe5, 0xc2, 0xe6, - 0x5c, 0x26, 0x92, 0xdd, 0x76, 0xc7, 0x65, 0x69, 0xa6, 0x9a, 0x7f, 0xe3, 0x6d, 0xc2, 0x66, 0xbf, - 0x52, 0x4b, 0xb7, 0x36, 0xe1, 0x71, 0x24, 0xb9, 0x0a, 0x9a, 0x24, 0x93, 0xf5, 0xc3, 0xc2, 0x46, - 0x3c, 0xa3, 0xde, 0xa3, 0xca, 0x3d, 0xe3, 0x1e, 0x51, 0xef, 0x22, 0x3a, 0x26, 0xb3, 0x73, 0xe9, - 0xf7, 0x5c, 0x13, 0xc6, 0x29, 0xa8, 0xa6, 0xa2, 0x9a, 0x8a, 0x69, 0x97, 0x8d, 0x8c, 0x51, 0x52, - 0x63, 0x54, 0x98, 0x51, 0xe5, 0x1e, 0xf3, 0x06, 0x03, 0x92, 0x18, 0xed, 0x2b, 0x68, 0xbe, 0x25, - 0x60, 0x45, 0x81, 0x2b, 0x07, 0x58, 0xf0, 0xb1, 0x22, 0x33, 0x34, 0xf4, 0xf4, 0xed, 0xfa, 0xaa, - 0xae, 0x8e, 0x44, 0xf8, 0x27, 0x0a, 0x43, 0x6a, 0x8f, 0x91, 0x31, 0x94, 0xf6, 0x50, 0xd1, 0x8f, - 0xc6, 0x9b, 0xda, 0xbb, 0xaa, 0xc2, 0xb0, 0x97, 0x94, 0x54, 0x26, 0x34, 0xf7, 0xdb, 0x6e, 0xa5, - 0x99, 0x0e, 0x0d, 0xdb, 0x20, 0x10, 0x5f, 0xef, 0xcf, 0xbe, 0x36, 0x3d, 0x38, 0xf2, 0x95, 0x7f, - 0xdf, 0xb8, 0x48, 0xb2, 0xa7, 0xe3, 0x76, 0x91, 0x47, 0x09, 0x7b, 0xbe, 0x6e, 0xf5, 0x1b, 0x4c, - 0xe5, 0x65, 0xe5, 0x07, 0x0b, 0x19, 0x08, 0x04, 0x51, 0xab, 0x10, 0x08, 0x82, 0xb1, 0x84, 0x7f, - 0x34, 0x8d, 0x33, 0x72, 0xf7, 0x29, 0xc9, 0xbf, 0xf8, 0xdc, 0x32, 0x3f, 0xae, 0xd9, 0x69, 0xfc, - 0x99, 0xc7, 0x31, 0xf2, 0x98, 0x8d, 0x40, 0x20, 0x54, 0xd8, 0xe7, 0x74, 0x05, 0xa7, 0x9b, 0xaa, - 0xaf, 0x85, 0x2b, 0x44, 0x42, 0x81, 0xf5, 0x52, 0xf1, 0x8b, 0x94, 0x1e, 0x06, 0xbb, 0x87, 0xc1, - 0x34, 0x7b, 0x43, 0x96, 0x45, 0x8a, 0x35, 0xd7, 0x10, 0xab, 0x0c, 0x05, 0xc1, 0xb6, 0x9f, 0x29, - 0x7a, 0x28, 0x3c, 0x15, 0xd8, 0x41, 0x4e, 0xaa, 0x34, 0x61, 0xbc, 0x3d, 0x29, 0x38, 0x87, 0x5b, - 0x0e, 0x11, 0xad, 0x33, 0xa0, 0x06, 0x3e, 0x26, 0x31, 0x99, 0xba, 0x6f, 0xf1, 0xa2, 0x57, 0x8c, - 0x91, 0x23, 0x58, 0x7b, 0xb7, 0xb0, 0xe6, 0xf9, 0x3a, 0x3d, 0xd9, 0xbb, 0x3e, 0x27, 0xd4, 0x4e, - 0x0e, 0x87, 0x8c, 0x29, 0x15, 0x3a, 0x06, 0xd4, 0x0a, 0x03, 0x56, 0x28, 0x7c, 0xa2, 0x69, 0x15, - 0x05, 0x8a, 0xa4, 0xbf, 0x05, 0x43, 0x1b, 0x55, 0x27, 0x77, 0x3b, 0x05, 0xd7, 0x27, 0x1d, 0x33, - 0x65, 0x19, 0x2f, 0x94, 0xaa, 0x8e, 0x98, 0x89, 0x65, 0xf6, 0x91, 0x5c, 0x2e, 0x13, 0x18, 0xa6, - 0xa2, 0x9a, 0x8a, 0x6a, 0x29, 0x92, 0x92, 0x19, 0x21, 0xff, 0x0e, 0xdc, 0x7f, 0xc3, 0xf4, 0xd7, - 0xf9, 0x7f, 0xbd, 0x7d, 0x35, 0xf4, 0xce, 0xce, 0xc9, 0xf2, 0x7f, 0xf0, 0x41, 0x18, 0x62, 0xa5, - 0xa1, 0x47, 0xbc, 0x6b, 0xca, 0xbd, 0xd5, 0x7b, 0x3a, 0x17, 0x4d, 0xa6, 0xde, 0x6d, 0x0d, 0x3c, - 0x5d, 0xfc, 0x3b, 0x54, 0xd0, 0xa9, 0xa3, 0xc9, 0x76, 0x3e, 0x31, 0x4f, 0x89, 0x48, 0x47, 0x5f, - 0x1a, 0x72, 0xef, 0x8b, 0xf1, 0xdf, 0x0f, 0x26, 0x3e, 0xb8, 0x22, 0x82, 0xff, 0xbe, 0x82, 0x9b, - 0xe1, 0x68, 0xff, 0xaf, 0x1d, 0xa0, 0xc7, 0x9c, 0xce, 0x3b, 0x44, 0xbf, 0x91, 0xf2, 0x3c, 0x47, - 0x06, 0x11, 0x8f, 0x7f, 0x8d, 0x51, 0x37, 0xe5, 0x84, 0xb0, 0x27, 0x05, 0xfc, 0x77, 0xcb, 0x7d, - 0x8e, 0xf9, 0x6f, 0x93, 0x2f, 0xcb, 0xa5, 0xdf, 0x04, 0x06, 0x6a, 0xa6, 0x8e, 0x45, 0xb3, 0x22, - 0x6f, 0xcf, 0x93, 0x63, 0x7d, 0x32, 0x78, 0xe3, 0xf1, 0xb0, 0x89, 0xea, 0x4c, 0x25, 0x8d, 0xc2, - 0xfc, 0xcb, 0x65, 0xbb, 0x8b, 0xe9, 0x1e, 0x9a, 0xf9, 0x0c, 0x90, 0xcc, 0x71, 0xf8, 0x53, 0x56, - 0xfc, 0x1d, 0x5f, 0x2f, 0x66, 0x44, 0x92, 0x49, 0x59, 0x71, 0xb8, 0xff, 0x1b, 0x54, 0xa2, 0x8a, - 0xfb, 0x4d, 0x54, 0xd2, 0x06, 0xd1, 0xf2, 0xa1, 0xf3, 0xa5, 0x55, 0x5f, 0xf0, 0xec, 0xd9, 0x3e, - 0x60, 0xab, 0x24, 0xfa, 0xf3, 0xb9, 0xfe, 0x23, 0xc9, 0xd5, 0x6c, 0x4f, 0x82, 0x5b, 0x75, 0xba, - 0x5d, 0x6e, 0x92, 0x03, 0x2a, 0xa1, 0x6b, 0x7f, 0x85, 0x79, 0xf3, 0x36, 0x9b, 0x49, 0xac, 0xd5, - 0xf3, 0xe9, 0xf5, 0x85, 0x42, 0xf1, 0x73, 0x10, 0x4c, 0x41, 0x31, 0x05, 0xc4, 0x12, 0xe1, 0x71, - 0x98, 0xcc, 0xf0, 0xf5, 0x24, 0xb4, 0xa9, 0x17, 0x4f, 0x70, 0x2a, 0x6f, 0xf4, 0xc9, 0xdb, 0xaf, - 0xc1, 0x75, 0x8a, 0x12, 0xc3, 0x76, 0x5c, 0x2e, 0x13, 0x19, 0x8d, 0xf3, 0xd7, 0xce, 0x62, 0x73, - 0x13, 0x98, 0xbc, 0xc7, 0xcf, 0xc2, 0xdb, 0x6d, 0xb7, 0xfe, 0x19, 0x12, 0x31, 0x4d, 0x45, 0x34, - 0xe3, 0xe1, 0xe7, 0x9a, 0x6b, 0xf9, 0xe8, 0x7b, 0x7e, 0x4d, 0xa6, 0x4d, 0xf0, 0xcc, 0x7f, 0xcb, - 0xfd, 0xe5, 0x47, 0x59, 0xb4, 0xdb, 0xfe, 0x2f, 0x0f, 0x63, 0x3a, 0x8f, 0x18, 0x29, 0x1a, 0xaa, - 0x79, 0x7d, 0x6f, 0xbf, 0x3d, 0xc7, 0x91, 0xfc, 0x8f, 0xf0, 0xb6, 0x35, 0x4a, 0xaa, 0x55, 0x52, - 0xaa, 0x89, 0x97, 0xe5, 0xd2, 0xef, 0x82, 0x08, 0xd7, 0xbe, 0x31, 0xef, 0xe3, 0x2d, 0x1f, 0x05, - 0x7e, 0x48, 0x50, 0xf9, 0xbb, 0xe1, 0x71, 0x5c, 0x76, 0x34, 0xd8, 0xb8, 0x58, 0x8d, 0x1c, 0x14, - 0x26, 0xa6, 0x19, 0x4c, 0x59, 0x34, 0xd7, 0xf8, 0xd8, 0xc1, 0xc6, 0x00, 0xb9, 0xaa, 0xf6, 0xce, - 0xe4, 0x1c, 0xbf, 0x85, 0x5d, 0xbe, 0x52, 0x9f, 0x11, 0xac, 0x23, 0xf5, 0xff, 0x1a, 0x65, 0x0d, - 0xfb, 0xda, 0x42, 0x4a, 0xf2, 0xd5, 0x8f, 0x43, 0x13, 0x61, 0x1e, 0x24, 0x1c, 0x4a, 0xe0, 0x44, - 0x6d, 0xf3, 0x4a, 0xec, 0x0d, 0x28, 0x18, 0x9e, 0xa9, 0xc3, 0x6d, 0x30, 0xfb, 0xe1, 0xfd, 0x36, - 0x9f, 0x8d, 0x22, 0xc1, 0xa6, 0x81, 0x40, 0x34, 0x6b, 0xdc, 0xeb, 0x73, 0x3f, 0x5a, 0xe8, 0xd8, - 0x42, 0xdb, 0xc8, 0x68, 0xb5, 0x7f, 0xca, 0x7f, 0xf1, 0xb8, 0x47, 0xa9, 0xd9, 0xcf, 0x5e, 0x9b, - 0x2a, 0x8e, 0x1a, 0x3a, 0xa1, 0xb6, 0xb7, 0x3b, 0x17, 0xfe, 0x14, 0x8e, 0xee, 0x8a, 0xcc, 0xbb, - 0x99, 0x54, 0x4f, 0x48, 0x71, 0x94, 0x5e, 0x3e, 0xc1, 0xcd, 0xb1, 0xf3, 0x97, 0xc6, 0xf4, 0xc0, - 0x9f, 0x86, 0x76, 0xc4, 0x17, 0xd2, 0x0d, 0x35, 0xe5, 0xff, 0xe9, 0xcd, 0xe5, 0x84, 0x82, 0xe7, - 0x58, 0x49, 0x14, 0xc7, 0xbd, 0xbe, 0x2a, 0x9a, 0xfc, 0x28, 0x74, 0x0b, 0x49, 0x4e, 0xaa, 0x6c, - 0x5c, 0x34, 0x77, 0xad, 0xb6, 0xa9, 0x97, 0xad, 0xb3, 0xe3, 0xeb, 0x4d, 0x39, 0x7d, 0x83, 0x3b, - 0x1c, 0xbf, 0xc1, 0x51, 0x5a, 0x23, 0x0c, 0x94, 0x63, 0x1d, 0x15, 0xcd, 0x21, 0x86, 0x75, 0xff, - 0xbe, 0x34, 0x72, 0x81, 0xa4, 0x3d, 0xac, 0x25, 0xac, 0xd1, 0x1a, 0x83, 0x4d, 0x67, 0x72, 0xa6, - 0x63, 0xb1, 0xcb, 0xdb, 0x57, 0x24, 0xc9, 0x25, 0xf7, 0xcb, 0xfc, 0x2c, 0x5a, 0x97, 0x74, 0xb8, - 0x0b, 0x61, 0x8b, 0x0a, 0x9d, 0x45, 0xe2, 0xfe, 0xb8, 0x30, 0x09, 0x8e, 0xb6, 0x20, 0xeb, 0x62, - 0x0e, 0xba, 0x03, 0xae, 0x98, 0x8b, 0xa2, 0xa5, 0x8a, 0x97, 0xfc, 0x5c, 0x1d, 0x74, 0x07, 0x5d, - 0x30, 0x75, 0xd0, 0x1d, 0x74, 0xfc, 0x59, 0x1a, 0x6b, 0x69, 0xaf, 0xc2, 0x16, 0xaa, 0xcf, 0x6d, - 0x27, 0x69, 0xaf, 0xce, 0x54, 0x40, 0xd5, 0xe9, 0xa6, 0x4d, 0x66, 0xbe, 0x6c, 0x76, 0x95, 0xb4, - 0xf5, 0x44, 0xb9, 0x07, 0xad, 0x10, 0x40, 0xbe, 0xee, 0xee, 0x7e, 0x2b, 0xc6, 0xa8, 0xc7, 0xbf, - 0xc3, 0x66, 0x16, 0xa6, 0xc3, 0xe2, 0x3b, 0x4d, 0x53, 0x8b, 0x63, 0xee, 0x9c, 0x7e, 0x1f, 0x9f, - 0x47, 0xd0, 0xd1, 0x3f, 0x43, 0xd9, 0x16, 0xe7, 0xbb, 0x74, 0xe9, 0xb9, 0xfc, 0x9c, 0xb4, 0xa4, - 0xf8, 0x5a, 0xdb, 0x13, 0x66, 0x5c, 0x90, 0xe7, 0xd6, 0xf9, 0x3a, 0x64, 0x66, 0x32, 0x73, 0x9f, - 0x0c, 0x77, 0x54, 0x4a, 0x75, 0xff, 0x0b, 0xf8, 0xed, 0x2b, 0x69, 0xcc, 0xaf, 0xf2, 0xc0, 0xbb, - 0xf8, 0x2d, 0x83, 0xbd, 0x07, 0x5d, 0x38, 0x30, 0x75, 0xd3, 0x25, 0xf5, 0x61, 0xe7, 0x9e, 0x9e, - 0x19, 0xe1, 0xff, 0x65, 0x1a, 0x4c, 0x6a, 0x93, 0x1c, 0xeb, 0xf0, 0x41, 0x18, 0xa7, 0xf0, 0x75, - 0xd0, 0x1d, 0x74, 0xc6, 0x5a, 0x14, 0xb4, 0x19, 0x19, 0x63, 0x72, 0xda, 0x6b, 0x2e, 0x97, 0x7c, - 0x17, 0xea, 0x9f, 0x23, 0x0b, 0x8c, 0x79, 0x4f, 0x28, 0x5c, 0x94, 0x90, 0xb2, 0x1f, 0xf0, 0xad, - 0x73, 0x42, 0xe6, 0x8f, 0x5c, 0xd0, 0xb9, 0xa3, 0xd3, 0x7e, 0x58, 0x4b, 0x0f, 0x3d, 0x37, 0xe4, - 0x84, 0x90, 0xf5, 0x73, 0xe0, 0x9c, 0xde, 0x79, 0x1d, 0x67, 0x50, 0x25, 0xf6, 0xa3, 0xa0, 0x8a, - 0x2f, 0x8d, 0x19, 0x1e, 0xb0, 0x83, 0x54, 0xf9, 0x85, 0x03, 0x72, 0xbd, 0x6e, 0x44, 0x4d, 0x33, - 0xd6, 0x07, 0xb3, 0x3b, 0x30, 0x5d, 0xb8, 0x8c, 0x05, 0x93, 0xc5, 0x6e, 0xd9, 0xfb, 0xff, 0x8d, - 0x87, 0xeb, 0x46, 0xf9, 0x50, 0x6a, 0x7c, 0x51, 0x6a, 0xbf, 0x74, 0xde, 0x4d, 0xe5, 0xda, 0x64, - 0xc3, 0xcb, 0x81, 0x08, 0xdf, 0x6d, 0xba, 0xdb, 0xf1, 0xa4, 0xe6, 0xaa, 0x04, 0x55, 0x06, 0xa9, - 0x6d, 0x4b, 0x02, 0xc6, 0x3f, 0x98, 0xef, 0x4d, 0x76, 0x6c, 0x06, 0xd6, 0xd5, 0x66, 0x7d, 0x27, - 0x6a, 0x16, 0xd0, 0x5f, 0x36, 0x02, 0xa5, 0x08, 0xa9, 0x8c, 0x68, 0x4d, 0xd3, 0xfe, 0x34, 0x99, - 0x6d, 0x73, 0x55, 0x17, 0x4b, 0x71, 0xa7, 0xb2, 0xec, 0x4b, 0x11, 0x6e, 0xd8, 0x74, 0x92, 0xf0, - 0xec, 0x0c, 0x81, 0x33, 0xd4, 0xfb, 0xf1, 0xe5, 0x8e, 0xa5, 0xe7, 0x08, 0x2a, 0xdc, 0xf6, 0x87, - 0x0d, 0xbe, 0x1d, 0x3b, 0x8c, 0x60, 0x19, 0xbe, 0x7e, 0xe9, 0x81, 0x80, 0xa0, 0x8c, 0xa1, 0x6c, - 0x73, 0x5f, 0x85, 0x1b, 0xc8, 0xbc, 0x83, 0x93, 0x15, 0xeb, 0x76, 0xe7, 0x96, 0x57, 0xc3, 0xd8, - 0x32, 0x2b, 0xae, 0xb0, 0xfd, 0x94, 0xec, 0x58, 0x84, 0xc6, 0x33, 0xb5, 0xaa, 0x9e, 0xaa, 0xab, - 0xfe, 0x20, 0x4d, 0x7d, 0x23, 0xe7, 0xf8, 0x83, 0x8d, 0x26, 0x19, 0xfd, 0x26, 0x4c, 0x99, 0x78, - 0x29, 0xb9, 0x58, 0x39, 0xa5, 0xf9, 0x1a, 0xb0, 0x1c, 0x4e, 0x42, 0x5a, 0x32, 0x12, 0x3f, 0xe2, - 0x23, 0xcc, 0xd3, 0x71, 0xd4, 0xc9, 0x73, 0xa2, 0x76, 0x8e, 0xa9, 0xf9, 0xe3, 0x0c, 0xf9, 0x79, - 0x3d, 0xaa, 0x1b, 0x0d, 0x60, 0xf9, 0x0e, 0xa3, 0xe6, 0x41, 0xb6, 0x4a, 0x86, 0x87, 0x8d, 0x11, - 0x43, 0x60, 0x74, 0x95, 0x86, 0xd9, 0x44, 0x19, 0x6c, 0x3c, 0xb0, 0x52, 0x7c, 0xbb, 0x83, 0x5b, - 0x37, 0xcb, 0xf2, 0xff, 0x05, 0x07, 0x2c, 0x8a, 0x41, 0x26, 0xc6, 0x54, 0xef, 0xbf, 0xce, 0x15, - 0x3d, 0x34, 0x26, 0x87, 0xc4, 0x70, 0xde, 0x35, 0x4a, 0xaa, 0x25, 0xfc, 0xd0, 0x9a, 0x02, 0xf8, - 0x2f, 0x18, 0x7c, 0xea, 0x89, 0xb3, 0x7a, 0xf9, 0x39, 0x3b, 0x3b, 0x3f, 0x87, 0xf2, 0xe7, 0x9a, - 0xcd, 0x79, 0x2c, 0x97, 0xd4, 0xd3, 0x39, 0x97, 0x99, 0x76, 0xbb, 0x59, 0xac, 0xdf, 0x04, 0x7b, - 0xd6, 0x15, 0x70, 0x5e, 0x71, 0x3c, 0x43, 0xb7, 0x6e, 0xd8, 0xb1, 0x2d, 0xdb, 0x1d, 0x87, 0xff, - 0x50, 0x1e, 0xf8, 0x70, 0xd8, 0xdb, 0x6b, 0x49, 0x74, 0x5a, 0x16, 0x81, 0xd8, 0xc8, 0xec, 0x67, - 0xfc, 0xf7, 0xb9, 0x94, 0x63, 0xf0, 0xdf, 0xe7, 0xaf, 0xcb, 0xa5, 0xdf, 0xc1, 0x47, 0x2e, 0x17, - 0x09, 0x89, 0x33, 0x22, 0x7f, 0x9e, 0xbe, 0x2c, 0x2d, 0xaf, 0x0a, 0xcd, 0x86, 0xc6, 0x9f, 0x8d, - 0x6a, 0xe5, 0x49, 0x22, 0x6b, 0x0c, 0xa4, 0x53, 0x49, 0x57, 0xe7, 0xaf, 0x9f, 0x4f, 0xaf, 0xd7, - 0xef, 0x86, 0x66, 0xc3, 0x61, 0xf1, 0xf8, 0xa6, 0xd3, 0x6f, 0xfe, 0x18, 0xe7, 0x24, 0x72, 0x41, - 0xcc, 0xa4, 0x8c, 0xa4, 0x99, 0x57, 0x19, 0x4e, 0x7c, 0xe6, 0x4e, 0x65, 0x28, 0xbc, 0x35, 0xcb, - 0x89, 0x64, 0xeb, 0xdb, 0x6c, 0xc6, 0xa8, 0x5e, 0x18, 0x9f, 0xb6, 0x5d, 0x6e, 0x96, 0x5f, 0x07, - 0xb6, 0x5d, 0xff, 0x82, 0x19, 0x6f, 0xe7, 0x3e, 0x1c, 0x23, 0x77, 0x3e, 0xe3, 0x3e, 0x2a, 0x8b, - 0x57, 0xe1, 0xb3, 0xa5, 0xac, 0x84, 0x72, 0xab, 0x76, 0xff, 0xcd, 0x49, 0x03, 0x48, 0x32, 0xa4, - 0xfc, 0x10, 0x1a, 0x8c, 0x86, 0x3b, 0x31, 0xf1, 0x8b, 0x3d, 0x06, 0xdc, 0x9b, 0x14, 0xd5, 0x97, - 0xff, 0xc6, 0xcd, 0xba, 0x6d, 0x1a, 0x89, 0xd7, 0xdc, 0x3a, 0xd5, 0xe1, 0xd1, 0xc6, 0xf9, 0xd1, - 0x35, 0x5b, 0xf5, 0xf5, 0x95, 0x5f, 0x0a, 0x61, 0xdd, 0x26, 0x15, 0x09, 0xd0, 0x8a, 0x10, 0xc9, - 0xca, 0xee, 0x6b, 0xb3, 0xd5, 0xd1, 0x5e, 0xd3, 0x46, 0xfa, 0x8e, 0xaf, 0x85, 0x0c, 0x3f, 0x9b, - 0x22, 0xa9, 0x25, 0xba, 0xda, 0x30, 0xc6, 0x8f, 0x61, 0xea, 0xf6, 0x10, 0xf4, 0xe7, 0xe7, 0xf8, - 0x7f, 0x2b, 0x2c, 0x6d, 0x66, 0x5d, 0x0f, 0xd2, 0x71, 0x94, 0x38, 0x48, 0x98, 0xe0, 0xd1, 0xe1, - 0xaf, 0x8a, 0xf1, 0x5f, 0xc2, 0x85, 0x39, 0x59, 0xca, 0x99, 0x89, 0x7b, 0x2d, 0x9d, 0xec, 0x47, - 0x5d, 0x55, 0x9d, 0xbe, 0x0b, 0x0a, 0x82, 0x9a, 0xcd, 0x69, 0xb4, 0xe3, 0xf0, 0xd7, 0xe5, 0xd4, - 0xeb, 0xc6, 0x4e, 0x44, 0xf5, 0xa2, 0xc9, 0xd6, 0x4f, 0x56, 0x49, 0x31, 0xec, 0xd7, 0xc4, 0x50, - 0x32, 0x90, 0x4b, 0x50, 0xef, 0x8f, 0x88, 0xb9, 0xe1, 0x12, 0xa7, 0x21, 0x1d, 0x8e, 0x7c, 0x69, - 0x92, 0xe3, 0xb5, 0xc8, 0xbc, 0x65, 0x24, 0x22, 0xe3, 0x59, 0x7e, 0x3f, 0x17, 0xa1, 0x16, 0xe8, - 0x0e, 0x11, 0xb3, 0x9e, 0x9c, 0x00, 0x62, 0x49, 0x8a, 0x98, 0xab, 0xc4, 0x5d, 0xad, 0x8b, 0xb5, - 0xda, 0xcf, 0x45, 0x04, 0x6f, 0xe3, 0xcd, 0xa0, 0x86, 0xc6, 0x21, 0xf9, 0x9e, 0x75, 0xde, 0x01, - 0xdc, 0xcc, 0xfe, 0x34, 0x57, 0x11, 0xbb, 0x78, 0x77, 0x5e, 0x3b, 0xc9, 0x2c, 0x68, 0x3b, 0xa4, - 0x5d, 0x35, 0xc4, 0xb6, 0x72, 0x9a, 0x9b, 0x9b, 0x9b, 0xbb, 0xff, 0x8b, 0xb1, 0x1c, 0x54, 0x7e, - 0xdd, 0x8d, 0xb9, 0x12, 0xf8, 0x6c, 0x2f, 0x89, 0x49, 0x09, 0x49, 0x1d, 0x27, 0xd3, 0xef, 0xe2, - 0x39, 0x88, 0x65, 0x46, 0x54, 0x72, 0xaf, 0x2b, 0xe7, 0xa9, 0x0d, 0xab, 0x46, 0x77, 0x89, 0xe1, - 0xe3, 0x1f, 0xbf, 0xbf, 0xbf, 0x9f, 0x9b, 0xbf, 0xbb, 0x9f, 0xd2, 0x39, 0xa7, 0xee, 0x53, 0xe9, - 0xb8, 0xed, 0xeb, 0xff, 0x82, 0x82, 0xa4, 0x93, 0xc9, 0xb8, 0x8b, 0x47, 0x54, 0xce, 0xdd, 0xcb, - 0xe1, 0x5b, 0x4d, 0x34, 0xd1, 0x22, 0x5c, 0x76, 0x3b, 0x38, 0xfb, 0x45, 0xaa, 0x09, 0xbd, 0x31, - 0x6c, 0x55, 0xb7, 0xe1, 0x52, 0x03, 0x59, 0xa0, 0xab, 0x34, 0x79, 0x56, 0x68, 0x2a, 0xcd, 0x1f, - 0x56, 0x9a, 0xa9, 0xa2, 0xe9, 0x77, 0xf8, 0x7f, 0x3b, 0x45, 0xcc, 0xb8, 0x91, 0xef, 0xd4, 0xc6, - 0x2a, 0x17, 0xff, 0xc3, 0xfa, 0x45, 0x20, 0xb4, 0x82, 0x4c, 0x66, 0x14, 0x82, 0xd2, 0x09, 0xc9, - 0x0f, 0x34, 0xc7, 0x01, 0xc0, 0xcb, 0xe3, 0x11, 0x0a, 0x22, 0x3f, 0xc1, 0x3e, 0xaa, 0x4d, 0x24, - 0x99, 0xab, 0x4d, 0x15, 0x7c, 0x69, 0x37, 0x76, 0x6c, 0xd1, 0xa3, 0xdd, 0x7b, 0xba, 0xa5, 0x13, - 0x4d, 0x7f, 0x87, 0xfa, 0x4e, 0xcd, 0x99, 0x32, 0x59, 0xb3, 0x55, 0xaa, 0x49, 0x34, 0xd7, 0xf8, - 0x7e, 0x3f, 0xe5, 0xfe, 0x51, 0xe8, 0xb5, 0xab, 0xba, 0xb5, 0xe2, 0x5d, 0x2e, 0xbb, 0x5d, 0xbf, - 0xe0, 0x8f, 0x9a, 0x2e, 0x8a, 0x3e, 0x16, 0xdd, 0x51, 0x9b, 0x2a, 0x69, 0xac, 0xa9, 0x44, 0xd3, - 0x5f, 0xe0, 0xbb, 0x31, 0x05, 0x73, 0x10, 0x6c, 0x19, 0xc8, 0x31, 0x7c, 0x3b, 0xa9, 0x48, 0x3b, - 0xa4, 0x4c, 0x8a, 0x72, 0x0b, 0xd0, 0x79, 0x52, 0x49, 0xa6, 0xbf, 0xc1, 0x5e, 0x83, 0x79, 0x05, - 0x72, 0x51, 0x7a, 0xb5, 0x8c, 0x7c, 0x29, 0x55, 0x55, 0x77, 0x77, 0x66, 0xcd, 0x24, 0xb6, 0x9a, - 0x16, 0x80, 0x2f, 0xc2, 0x9d, 0x21, 0xff, 0x14, 0x76, 0x8d, 0xf4, 0x3d, 0x3e, 0x7a, 0x2c, 0xfc, - 0x91, 0x7a, 0x95, 0x11, 0x78, 0x2f, 0xe4, 0xf1, 0x9f, 0x45, 0x75, 0x4c, 0x9d, 0x36, 0x25, 0xff, - 0x1b, 0x60, 0xed, 0xe5, 0x2e, 0x1c, 0xc5, 0xe9, 0x30, 0x62, 0xcd, 0x86, 0xce, 0x42, 0x0b, 0x1b, - 0x54, 0x7d, 0x2a, 0x18, 0x12, 0xf3, 0x63, 0x24, 0x9a, 0x46, 0x36, 0xbe, 0x2f, 0x82, 0xf3, 0x0e, - 0x67, 0xa3, 0xed, 0x5d, 0x16, 0xbe, 0xef, 0x96, 0xdc, 0xfc, 0x57, 0x8c, 0x5f, 0xc6, 0x96, 0x1a, - 0x6b, 0x06, 0x8b, 0xe0, 0x54, 0x9d, 0x1a, 0xc2, 0x8d, 0x8f, 0x63, 0xbb, 0xdf, 0x59, 0x3f, 0xa7, - 0xfc, 0x61, 0x42, 0x46, 0x6a, 0x74, 0xde, 0xfa, 0xac, 0x61, 0xc9, 0x77, 0x36, 0x6d, 0x6f, 0x6f, - 0xc6, 0x74, 0x13, 0x83, 0xff, 0x1e, 0x87, 0xe5, 0xa4, 0x3c, 0xb8, 0xc8, 0x31, 0xf9, 0x17, 0x9e, - 0x5f, 0xe3, 0x46, 0x6c, 0xe4, 0x20, 0xdd, 0x27, 0x03, 0xb1, 0x92, 0x1e, 0x64, 0x8e, 0x6e, 0x86, - 0xe0, 0xd1, 0x80, 0xfb, 0xe9, 0x78, 0xc8, 0xe5, 0x07, 0x44, 0x04, 0xb0, 0xcf, 0xf8, 0x41, 0xd1, - 0x9a, 0x22, 0xbf, 0xdf, 0xe1, 0xd2, 0xd4, 0x3e, 0xf8, 0x86, 0xb0, 0x5e, 0xa2, 0x0c, 0x96, 0xad, - 0xeb, 0xf8, 0x04, 0x39, 0x23, 0x4b, 0xac, 0x10, 0x84, 0xb9, 0x46, 0xca, 0x7c, 0xd8, 0x7e, 0xcc, - 0x94, 0x61, 0xb1, 0x27, 0x8d, 0x2e, 0xc3, 0x47, 0x65, 0x35, 0xec, 0x0e, 0x0d, 0xb3, 0x87, 0xe4, - 0x61, 0x8e, 0x0d, 0xbe, 0xef, 0x6f, 0xe3, 0x2d, 0xf0, 0xe6, 0x94, 0xd2, 0xcb, 0x06, 0x55, 0xb2, - 0xac, 0x32, 0x10, 0x61, 0xf8, 0xc3, 0xcb, 0x06, 0xfa, 0x53, 0x39, 0x1e, 0x99, 0xeb, 0xcb, 0x46, - 0x63, 0x0d, 0x7b, 0x4f, 0xc2, 0x38, 0xaa, 0x68, 0xd2, 0x9d, 0x40, 0x5d, 0x52, 0xde, 0x91, 0xd2, - 0xbc, 0xd7, 0x85, 0x23, 0x32, 0xde, 0x72, 0x84, 0xc3, 0x8d, 0x8e, 0xf3, 0x92, 0x22, 0x55, 0xe7, - 0x8a, 0xb8, 0x40, 0x70, 0xee, 0xe8, 0x7c, 0x89, 0xf0, 0x95, 0xf5, 0xd6, 0x82, 0x43, 0x5f, 0x1f, - 0x6a, 0x86, 0x56, 0x95, 0x16, 0xdb, 0xcc, 0xb9, 0x19, 0xf1, 0x85, 0x2e, 0x13, 0x59, 0x8c, 0xd5, - 0xa8, 0x6a, 0x10, 0x96, 0xa1, 0xb1, 0x51, 0x99, 0xa2, 0x73, 0x34, 0x5b, 0x76, 0xfc, 0x7f, 0x68, - 0xc4, 0x15, 0xae, 0x18, 0x0c, 0x65, 0xf6, 0xbd, 0x9f, 0x59, 0xbf, 0xe1, 0x91, 0x8c, 0xc1, 0xa3, - 0x75, 0xb9, 0x7b, 0x69, 0xcb, 0x54, 0xcb, 0xd3, 0x8f, 0xc6, 0x92, 0xb3, 0x19, 0x54, 0x99, 0x93, - 0xa4, 0x6e, 0x4d, 0xfc, 0x23, 0xf1, 0x56, 0x98, 0x3f, 0xfe, 0x14, 0xa5, 0x6d, 0xbd, 0xdd, 0x83, - 0x1c, 0x90, 0xf1, 0x96, 0x92, 0x7d, 0xd3, 0xeb, 0xe6, 0x0b, 0x9f, 0x39, 0x78, 0x60, 0x20, 0x8e, - 0x9b, 0x26, 0x9d, 0x13, 0x0b, 0xa8, 0x43, 0x49, 0x45, 0xd5, 0x50, 0x3f, 0xf3, 0x91, 0x57, 0x99, - 0x46, 0xc5, 0x49, 0x5b, 0x22, 0x62, 0xda, 0x62, 0xdf, 0x8d, 0xa1, 0xd0, 0x67, 0xa9, 0xf2, 0xad, - 0x5e, 0xfa, 0x38, 0xd2, 0xfc, 0xf6, 0x9c, 0xbc, 0xd0, 0x93, 0xff, 0x05, 0x7c, 0x22, 0xf3, 0xb1, - 0xa7, 0x29, 0x7b, 0xe7, 0x9d, 0xf7, 0x70, 0x26, 0xeb, 0x1a, 0x2b, 0xdb, 0x69, 0xc6, 0x22, 0x3b, - 0x09, 0x90, 0xfb, 0x5f, 0xc6, 0x10, 0xa4, 0x25, 0xd1, 0xf5, 0xfb, 0x00, 0xd7, 0xaa, 0xe5, 0x7e, - 0xe4, 0x32, 0x3f, 0x8c, 0x99, 0xfc, 0x18, 0x13, 0x37, 0x37, 0xcf, 0x87, 0xc1, 0xad, 0x1f, 0x44, - 0x77, 0xe9, 0xa6, 0x9a, 0x7e, 0x0c, 0x0b, 0x26, 0x58, 0x36, 0xed, 0xd1, 0xe7, 0xd3, 0x4d, 0x34, - 0xfc, 0x7c, 0x67, 0xdf, 0x3d, 0x79, 0x88, 0x25, 0xc2, 0x63, 0x33, 0xc3, 0x84, 0x48, 0xb8, 0xf1, - 0xb7, 0xd5, 0x55, 0x7c, 0x13, 0x69, 0x26, 0x9d, 0x94, 0x83, 0x68, 0xf7, 0xc6, 0x9c, 0xbb, 0xb0, - 0x69, 0x25, 0xed, 0x35, 0xb4, 0xd2, 0x75, 0x88, 0x99, 0x11, 0x33, 0xfe, 0x15, 0x28, 0xeb, 0xa0, - 0xeb, 0xa6, 0x3a, 0xe8, 0x3a, 0xe9, 0x99, 0x09, 0x4b, 0x26, 0x93, 0x7f, 0xc2, 0xa4, 0x29, 0x5c, - 0xe4, 0x12, 0x95, 0xca, 0xa1, 0x8c, 0x79, 0x53, 0x8e, 0x34, 0xff, 0xd4, 0xa0, 0x67, 0xe0, 0xa4, - 0x99, 0x2c, 0x96, 0x52, 0x09, 0x48, 0x3c, 0x98, 0xcc, 0x2e, 0x37, 0x12, 0x2f, 0x05, 0x32, 0x10, - 0xa0, 0x69, 0xa6, 0x8a, 0x91, 0x48, 0x2d, 0x20, 0xd3, 0xa6, 0xdf, 0x05, 0xd2, 0x5b, 0x2f, 0x94, - 0x85, 0xbb, 0x6d, 0xf0, 0x55, 0x25, 0xf2, 0x10, 0x48, 0x41, 0xf1, 0xdf, 0x6e, 0x7c, 0x45, 0xe4, - 0x17, 0x90, 0x7e, 0x6c, 0x3e, 0x79, 0x4a, 0x92, 0x42, 0x1c, 0xfc, 0x65, 0x24, 0xb1, 0x2e, 0x09, - 0x73, 0x69, 0xad, 0x23, 0xf9, 0x37, 0xc6, 0x8c, 0xaf, 0x52, 0xbc, 0xe9, 0x1a, 0xaf, 0x1c, 0xe8, - 0x0e, 0x9a, 0x53, 0x2d, 0x54, 0x81, 0xc3, 0x3b, 0x99, 0x93, 0x6e, 0x6a, 0xa6, 0x38, 0x48, 0xf1, - 0xfe, 0xf1, 0xba, 0x32, 0x48, 0xb8, 0xf3, 0x3c, 0xbd, 0x4d, 0x49, 0xad, 0xe3, 0x0e, 0x53, 0xca, - 0xe7, 0x54, 0x21, 0xfc, 0xfe, 0x97, 0xf1, 0xa4, 0x84, 0xcc, 0x66, 0xee, 0xc2, 0x69, 0x23, 0x4b, - 0x4a, 0x36, 0xeb, 0x6c, 0x51, 0x40, 0xf3, 0x30, 0xab, 0x6a, 0xff, 0xc4, 0x8d, 0x2d, 0xc4, 0x30, - 0xcf, 0x47, 0xd1, 0xd7, 0xe7, 0x08, 0xb3, 0xae, 0x79, 0x33, 0x19, 0x40, 0xeb, 0xe2, 0xb8, 0xad, - 0xbf, 0x1a, 0x7c, 0xaa, 0x32, 0xa8, 0x36, 0xbd, 0x55, 0xbd, 0x50, 0xb9, 0x78, 0xb8, 0xb9, 0xb5, - 0xea, 0xaa, 0xa2, 0x47, 0x7e, 0xaa, 0xab, 0xc4, 0x85, 0x0c, 0x7c, 0x35, 0x7f, 0x37, 0x1f, 0x66, - 0x0e, 0xeb, 0x04, 0x2a, 0x29, 0x2d, 0xf6, 0x33, 0x22, 0x81, 0x76, 0x28, 0x7d, 0x9b, 0x2e, 0x47, - 0x8c, 0x27, 0xa0, 0xab, 0x1b, 0xfc, 0x51, 0xdf, 0x8d, 0x95, 0x04, 0x59, 0x92, 0x52, 0xce, 0xbe, - 0x1c, 0x83, 0x74, 0x3b, 0x7e, 0x8f, 0x60, 0x74, 0x14, 0x82, 0x58, 0x94, 0x72, 0xed, 0x72, 0x29, - 0xc7, 0x97, 0xf1, 0xcc, 0x34, 0x9d, 0x4c, 0xf8, 0xec, 0xe2, 0xf5, 0xcb, 0xc8, 0xac, 0x7c, 0xf6, - 0x34, 0xbf, 0x8d, 0x23, 0x04, 0x07, 0x6c, 0xc3, 0xdb, 0x61, 0x81, 0x84, 0x2d, 0xb9, 0xb0, 0xe6, - 0xd6, 0xd3, 0xd4, 0xcf, 0xac, 0xdf, 0x43, 0x38, 0x2b, 0x95, 0xdb, 0x26, 0x7e, 0x36, 0xb0, 0xa0, - 0x80, 0x6b, 0x4a, 0xd5, 0x43, 0x7b, 0x0c, 0xad, 0xe7, 0x3d, 0x2b, 0x4b, 0x6c, 0x1e, 0x95, 0xec, - 0xac, 0x6b, 0xee, 0xee, 0xfe, 0x0b, 0x85, 0xa6, 0x04, 0x0b, 0x89, 0x20, 0xe4, 0x5b, 0x3d, 0xcc, - 0xf8, 0x7c, 0x7f, 0x84, 0xe4, 0x25, 0x90, 0x82, 0x42, 0x08, 0xcb, 0x35, 0xc0, 0xb2, 0xf1, 0x01, - 0xfc, 0x23, 0x20, 0x8a, 0xe0, 0x43, 0x8d, 0xc4, 0xb2, 0xb7, 0x6a, 0x5e, 0x3d, 0x70, 0xf9, 0x4f, - 0x27, 0xc7, 0x56, 0x18, 0x22, 0xf9, 0x78, 0x77, 0xcb, 0x81, 0xe2, 0x66, 0xb1, 0x93, 0x54, 0x34, - 0x02, 0xb3, 0x70, 0xdb, 0x46, 0xd3, 0xc7, 0xdf, 0x8e, 0xf5, 0x3b, 0x1b, 0x6e, 0xbb, 0x6b, 0x7f, - 0x08, 0xcc, 0xd6, 0x69, 0x9a, 0xcd, 0x22, 0xa6, 0x9b, 0x16, 0x2a, 0x2f, 0x66, 0x17, 0xb3, 0x3c, - 0x7f, 0x4c, 0x8c, 0x31, 0x96, 0x8f, 0x27, 0x2e, 0xe5, 0xd0, 0xd8, 0xca, 0x1c, 0x1f, 0x84, 0x29, - 0x22, 0x8d, 0x3d, 0x24, 0xa9, 0xa4, 0xda, 0x5e, 0x18, 0xb0, 0x36, 0x33, 0x10, 0x6a, 0xb7, 0x6c, - 0x76, 0xae, 0xab, 0xfe, 0x14, 0xa3, 0x8d, 0x30, 0xce, 0x53, 0x95, 0xec, 0x9f, 0xa9, 0xb4, 0xb6, - 0x71, 0xc8, 0xd8, 0x1d, 0x78, 0xd3, 0x36, 0x79, 0x6d, 0x03, 0x1a, 0x80, 0x27, 0xab, 0x52, 0x86, - 0xcb, 0xe9, 0x1c, 0x92, 0x97, 0x29, 0xba, 0xfa, 0x7d, 0x4f, 0x76, 0xad, 0xf8, 0x78, 0xcc, 0xf9, - 0x20, 0xc1, 0xa4, 0x71, 0x01, 0xc2, 0xd4, 0x2a, 0x99, 0x87, 0x4c, 0x72, 0xb7, 0x37, 0x6e, 0x6a, - 0x27, 0x1f, 0x8c, 0x12, 0xef, 0xbb, 0xe1, 0xd3, 0x3e, 0x2a, 0xbe, 0x5f, 0x4e, 0xc6, 0xfc, 0x3b, - 0x5d, 0xbe, 0x1a, 0xa6, 0x93, 0x34, 0x33, 0x8c, 0xb6, 0x43, 0xb3, 0x2a, 0xff, 0x0f, 0x19, 0x23, - 0x37, 0xa4, 0x5c, 0x9a, 0x23, 0x31, 0xbb, 0xce, 0x26, 0xef, 0xea, 0xaa, 0x4f, 0xe3, 0x4f, 0x41, - 0x90, 0x93, 0x28, 0x47, 0x8f, 0x27, 0x50, 0x2a, 0x36, 0x6e, 0x05, 0x8f, 0x25, 0xa2, 0x84, 0x53, - 0x22, 0x94, 0x43, 0x5f, 0x27, 0xea, 0x22, 0xb2, 0x75, 0x0c, 0xa5, 0xb0, 0xff, 0x0f, 0x69, 0x27, - 0x5a, 0x4b, 0x46, 0xf1, 0x24, 0x0c, 0x69, 0x8f, 0xa4, 0x36, 0x68, 0xd3, 0xd5, 0x72, 0xae, 0xcd, - 0xb3, 0x8b, 0x4d, 0x34, 0xd3, 0xf1, 0xa4, 0x54, 0xe6, 0xc6, 0xf6, 0x2a, 0x79, 0x05, 0x85, 0xa6, - 0xd8, 0xd9, 0xdc, 0x1d, 0x9c, 0x6d, 0x70, 0x9a, 0xd9, 0x9f, 0x2b, 0xff, 0x1b, 0xc6, 0x35, 0x81, - 0x66, 0xc3, 0x66, 0x76, 0x5a, 0x6d, 0x52, 0x24, 0x5b, 0x24, 0xea, 0x53, 0x1c, 0x65, 0xa7, 0xbe, - 0x09, 0x05, 0x94, 0x82, 0x52, 0x09, 0xc8, 0x2f, 0x20, 0xb1, 0xf3, 0xf5, 0xfc, 0xda, 0x6d, 0xf3, - 0x99, 0x8b, 0x08, 0xd8, 0x1d, 0x75, 0xcd, 0xdf, 0xf5, 0x9b, 0xe1, 0x31, 0x25, 0xc4, 0x0f, 0x97, - 0x0b, 0x84, 0xc6, 0x67, 0x96, 0x42, 0x12, 0x10, 0xb0, 0x85, 0x84, 0x3e, 0x09, 0x25, 0x21, 0x40, - 0xd0, 0x4d, 0x65, 0xf0, 0xfc, 0xd8, 0x7f, 0x6c, 0x7d, 0x96, 0xc2, 0x23, 0x0c, 0xc7, 0xd9, 0x2e, - 0x67, 0xa8, 0x66, 0x65, 0x1f, 0x4d, 0x36, 0xdb, 0xf1, 0x9c, 0xf6, 0x7b, 0x6a, 0x5b, 0x66, 0xbd, - 0x14, 0x1d, 0xec, 0xea, 0xa8, 0xf6, 0xfb, 0xf1, 0xb6, 0xdb, 0x88, 0xba, 0x4f, 0xf4, 0xdb, 0x71, - 0xe7, 0xdb, 0x67, 0x21, 0x1f, 0x3a, 0x4d, 0x34, 0xd3, 0x27, 0x8b, 0xf3, 0xf3, 0x9f, 0x4d, 0x31, - 0x29, 0x93, 0xd3, 0x3e, 0x15, 0xe2, 0xc1, 0x8b, 0x07, 0x9f, 0x1a, 0xce, 0x7d, 0x34, 0xcf, 0x4c, - 0x9e, 0x99, 0xf0, 0xfc, 0xb8, 0x5c, 0x66, 0x33, 0x0a, 0x42, 0xd2, 0x12, 0x90, 0xbb, 0xa6, 0xdc, - 0x06, 0x81, 0xe7, 0x3e, 0x9a, 0x67, 0xa6, 0x4f, 0x4c, 0xf8, 0x7e, 0x4c, 0x26, 0x13, 0x19, 0x8c, - 0xc6, 0x64, 0x07, 0x01, 0x93, 0x09, 0x90, 0x1c, 0x06, 0x3b, 0x87, 0xa6, 0x9c, 0x69, 0xf8, 0x30, - 0x90, 0x82, 0x42, 0x0e, 0x99, 0x7a, 0x6d, 0xee, 0x7d, 0x34, 0xd3, 0x4f, 0xc1, 0x84, 0xbf, 0x2f, - 0x21, 0x0c, 0xd8, 0x42, 0x0e, 0xe7, 0xd3, 0x4d, 0x34, 0xfc, 0x30, 0x71, 0xcd, 0x3e, 0x23, 0xc4, - 0x3c, 0x47, 0x9c, 0xf1, 0xd9, 0xd1, 0x0d, 0x10, 0xd1, 0x0d, 0x30, 0xd1, 0xb4, 0xdb, 0xfc, 0x2d, - 0xbc, 0x1d, 0x6c, 0x03, 0xdd, 0x2e, 0x02, 0x8e, 0xf2, 0x6d, 0xbf, 0x4f, 0xbf, 0xe0, 0x94, 0x99, - 0x28, 0x95, 0x76, 0xce, 0x55, 0xc7, 0x9c, 0xe3, 0xe5, 0x45, 0x34, 0x53, 0x45, 0x34, 0xd3, 0x59, - 0xb4, 0xdb, 0xe8, 0xc5, 0x4f, 0x82, 0x01, 0x4e, 0xe3, 0x83, 0xf7, 0x28, 0x48, 0xcc, 0x84, 0xf1, - 0xa4, 0xab, 0xb8, 0x66, 0x9e, 0x30, 0xd0, 0xc4, 0x20, 0x6e, 0xeb, 0x7f, 0xf8, 0x52, 0x91, 0x69, - 0xaf, 0xf7, 0xac, 0xb5, 0x63, 0x53, 0x5d, 0x4f, 0x3d, 0x36, 0x34, 0x6e, 0xca, 0x78, 0xfe, 0x43, - 0xf7, 0x18, 0xd1, 0x74, 0x02, 0x7c, 0x14, 0xc9, 0x7e, 0x20, 0xe8, 0x3e, 0x66, 0xf2, 0x73, 0xeb, - 0x67, 0x5c, 0xaf, 0x72, 0xa3, 0x73, 0x2a, 0xd7, 0xe9, 0x57, 0x84, 0x04, 0x33, 0x26, 0x0e, 0x3d, - 0x47, 0xeb, 0x9b, 0xab, 0x63, 0x4b, 0x17, 0x87, 0xc4, 0x8b, 0x93, 0x8b, 0xb3, 0xac, 0x86, 0x30, - 0x8a, 0x0c, 0x2c, 0x55, 0x8a, 0x09, 0x4d, 0x47, 0x79, 0x20, 0x93, 0xf7, 0x3c, 0x2f, 0x89, 0x12, - 0x30, 0xb2, 0x10, 0x64, 0x20, 0x90, 0xbd, 0x4b, 0x40, 0xc1, 0xe8, 0xd7, 0xb6, 0x0f, 0x51, 0xd4, - 0xf5, 0x16, 0x31, 0x58, 0xa3, 0xe2, 0x06, 0x8a, 0x9a, 0xb2, 0x78, 0xe2, 0x15, 0x99, 0x0a, 0x33, - 0x11, 0xfc, 0x0b, 0xee, 0x05, 0x64, 0x74, 0x44, 0x41, 0xa1, 0xca, 0xf2, 0xa0, 0x87, 0x74, 0x5d, - 0x7c, 0x5a, 0xfc, 0xf1, 0x52, 0xac, 0xff, 0xfc, 0x6c, 0x0c, 0xaa, 0x30, 0xc2, 0xd1, 0x26, 0xec, - 0xb0, 0x30, 0x16, 0x58, 0xce, 0x96, 0x7b, 0xf5, 0x51, 0x1e, 0xd6, 0x5f, 0x57, 0x6f, 0xaf, 0xd4, - 0xbf, 0xf1, 0xa5, 0x2c, 0xdc, 0xc1, 0xd6, 0x71, 0x93, 0x4a, 0x9b, 0x90, 0x0c, 0xe5, 0x80, 0x99, - 0xfd, 0x69, 0x9c, 0x41, 0x8e, 0xd7, 0xa6, 0x9e, 0xcb, 0x71, 0xc5, 0x2b, 0xc7, 0x2f, 0x4e, 0x6a, - 0xdf, 0x12, 0x14, 0xb3, 0x1c, 0x30, 0x59, 0x8c, 0xc6, 0x08, 0x0b, 0x04, 0x07, 0xa8, 0x64, 0xb3, - 0xcc, 0x8d, 0x37, 0xd5, 0x9e, 0x34, 0xe0, 0x1d, 0xb8, 0x98, 0x29, 0x12, 0x41, 0x92, 0xf6, 0x3c, - 0xea, 0x82, 0x7f, 0xb2, 0x23, 0x22, 0xe1, 0xec, 0x38, 0xb8, 0x9a, 0xf7, 0xc6, 0x65, 0xab, 0x0e, - 0xb5, 0xe9, 0x4c, 0xa4, 0x1a, 0x17, 0x4d, 0xa6, 0xd2, 0x3e, 0x98, 0x83, 0x5e, 0x5d, 0xf1, 0x9a, - 0xa6, 0x22, 0xea, 0xa1, 0xe1, 0xba, 0x94, 0x4d, 0x95, 0x4b, 0x51, 0xff, 0x0b, 0x90, 0x77, 0x27, - 0xc3, 0x2b, 0xc7, 0xef, 0xec, 0xda, 0x3a, 0xbb, 0xbb, 0xff, 0x8c, 0x2c, 0x4d, 0x44, 0xf5, 0x4a, - 0x50, 0xb1, 0xd6, 0x2c, 0x55, 0x15, 0x4c, 0xd6, 0x2e, 0x4c, 0x26, 0x78, 0xed, 0x6d, 0x1f, 0xee, - 0x9e, 0xdd, 0xff, 0xe3, 0x4d, 0x2f, 0x97, 0xea, 0xfb, 0x45, 0x61, 0xe4, 0x23, 0x97, 0x36, 0xd2, - 0xaa, 0xaa, 0xbf, 0xe1, 0x32, 0xe4, 0xa2, 0x2c, 0xa5, 0xd9, 0xb2, 0xf8, 0x44, 0xa7, 0x16, 0x69, - 0x0e, 0x31, 0xe4, 0x4b, 0xc4, 0xb5, 0xf3, 0xec, 0xb5, 0x29, 0xc8, 0x0f, 0xc6, 0x7b, 0x4e, 0xc1, - 0xb8, 0xa9, 0xd0, 0xf6, 0xe1, 0xb6, 0x6f, 0x6e, 0xa4, 0xc3, 0x4b, 0x33, 0xf1, 0xc4, 0x52, 0x10, - 0x93, 0xbe, 0x98, 0x20, 0xd0, 0xd5, 0x6c, 0x7a, 0xa8, 0xa6, 0x97, 0x02, 0x69, 0xae, 0x22, 0xf8, - 0x50, 0x66, 0xcc, 0x2d, 0x4a, 0x99, 0x83, 0xc6, 0xb2, 0x69, 0xac, 0x94, 0x5b, 0x32, 0x8e, 0x19, - 0x94, 0x3c, 0x30, 0x56, 0x31, 0xd1, 0xb2, 0x46, 0xdb, 0x6f, 0xf6, 0xea, 0x4f, 0xe3, 0x4b, 0xba, - 0xe5, 0xa1, 0xa0, 0x8f, 0x72, 0x4b, 0xaf, 0x4c, 0xb1, 0x6c, 0x5b, 0xff, 0x04, 0x04, 0x42, 0xb6, - 0x78, 0xd5, 0xfc, 0xf2, 0x53, 0xd1, 0x51, 0xa1, 0xd5, 0xa6, 0xd1, 0xb4, 0xba, 0x73, 0xbe, 0x0a, - 0xae, 0x72, 0x0a, 0xe8, 0x45, 0x16, 0x86, 0x19, 0x5d, 0x47, 0x02, 0x59, 0x84, 0x88, 0x2f, 0x8d, - 0xd6, 0xd2, 0xa3, 0xf0, 0xf0, 0xdd, 0xb0, 0x1f, 0xd9, 0x26, 0xd9, 0x89, 0xb0, 0x70, 0x63, 0xad, - 0xac, 0xfe, 0x5e, 0x9f, 0x87, 0x49, 0x6d, 0x36, 0xf3, 0xea, 0xd9, 0x3d, 0xbc, 0x8a, 0xf6, 0xdd, - 0x4e, 0x88, 0x96, 0xd2, 0xa9, 0xdf, 0xf0, 0xef, 0x46, 0x5d, 0xb1, 0xef, 0x3a, 0x33, 0x19, 0xc9, - 0xd0, 0x74, 0x9f, 0x1a, 0x09, 0x86, 0xda, 0x69, 0xdb, 0x4f, 0xe3, 0x71, 0x71, 0xa3, 0x33, 0xbf, - 0x57, 0x9f, 0x55, 0x72, 0xcf, 0x9e, 0x6d, 0x6a, 0x03, 0x35, 0xe2, 0xc7, 0x19, 0xc2, 0x69, 0xc3, - 0xd1, 0x55, 0x1f, 0x85, 0x8a, 0xd9, 0xf5, 0x2d, 0xd7, 0xaa, 0xe4, 0xc6, 0xd6, 0xc5, 0xff, 0x0d, - 0xcf, 0x36, 0x6c, 0xcb, 0xb5, 0x48, 0x9d, 0xe6, 0x68, 0x49, 0x24, 0xd3, 0x5e, 0x37, 0x32, 0x14, - 0x92, 0x3a, 0xca, 0xaa, 0x84, 0xce, 0x95, 0x4a, 0xe1, 0x6d, 0x9a, 0x2f, 0xef, 0x25, 0x5b, 0x93, - 0xf4, 0xd3, 0x4d, 0x3f, 0x19, 0x9e, 0x29, 0xee, 0x3f, 0xb2, 0x11, 0x8a, 0x79, 0xcf, 0x27, 0xc2, - 0x9d, 0x2f, 0x87, 0xba, 0x66, 0x96, 0x69, 0x64, 0xd1, 0xdc, 0xa9, 0xf5, 0x76, 0xae, 0x96, 0xd4, - 0x7f, 0xe4, 0xe3, 0xde, 0x5d, 0xef, 0x0f, 0x95, 0xdf, 0x55, 0x49, 0x25, 0x5d, 0x4f, 0x22, 0xc9, - 0x74, 0x72, 0xc8, 0xe6, 0xdb, 0x49, 0x2f, 0x04, 0x17, 0x75, 0x5a, 0x26, 0xd9, 0x0a, 0xa1, 0xdd, - 0x16, 0x4e, 0xd2, 0x68, 0xc2, 0xb3, 0x2a, 0x6d, 0xb6, 0xdb, 0xf0, 0xfc, 0xf8, 0xd5, 0x4d, 0x46, - 0x92, 0x6d, 0x64, 0xf8, 0xb5, 0x1f, 0x08, 0x62, 0xd3, 0x16, 0xdb, 0x6d, 0xbf, 0x0f, 0xd4, 0xbd, - 0xd7, 0x49, 0x26, 0x8d, 0x85, 0xa5, 0x62, 0xc4, 0xb7, 0xa4, 0x49, 0xb6, 0xdb, 0x6d, 0xf8, 0x7e, - 0xaa, 0xab, 0xd5, 0x52, 0x48, 0x9e, 0x28, 0x3e, 0xdb, 0x6d, 0xb7, 0xe1, 0x8a, 0xac, 0xd0, 0xcb, - 0xcc, 0xd7, 0x22, 0x7a, 0x5d, 0x8d, 0x47, 0x30, 0xd7, 0xfa, 0xbf, 0xc1, 0x24, 0x73, 0xd1, 0x78, - 0xff, 0x04, 0x9d, 0xdf, 0x7f, 0x12, 0x1c, 0xaa, 0xe2, 0x00, 0x04, 0x2a, 0x71, 0x6c, 0x5b, 0xff, - 0x3d, 0x45, 0xb1, 0x6d, 0x04, 0x82, 0xff, 0x05, 0xf1, 0x5a, 0xed, 0x34, 0x2b, 0x68, 0xa3, 0xda, - 0x68, 0xef, 0xfd, 0x73, 0x95, 0x71, 0x68, 0x5a, 0xff, 0x04, 0x33, 0xe1, 0xf3, 0xf1, 0xf0, 0xdc, - 0xf8, 0x7c, 0x69, 0xd8, 0x64, 0xb3, 0x99, 0x8d, 0x7f, 0x82, 0x0b, 0x31, 0xe4, 0x27, 0xcf, 0xdb, - 0x3f, 0x77, 0x2b, 0xd8, 0x3d, 0xa4, 0x74, 0x90, 0xe0, 0x79, 0xf3, 0x25, 0x49, 0x47, 0xb1, 0x79, - 0xcf, 0x1a, 0x67, 0xa5, 0xa6, 0xa9, 0x07, 0xeb, 0xbd, 0x1a, 0x33, 0xf7, 0x90, 0x7e, 0x9b, 0x24, - 0x58, 0xfd, 0x54, 0x61, 0xd5, 0x63, 0xdf, 0xff, 0x1a, 0x51, 0xe3, 0x44, 0x3c, 0x78, 0xd9, 0xa3, - 0x53, 0x8a, 0x31, 0x9a, 0x9c, 0x67, 0x47, 0x68, 0xdc, 0x36, 0xa7, 0x05, 0xbe, 0xaa, 0xab, 0xe3, - 0x6a, 0x9c, 0xe1, 0xbc, 0x94, 0x31, 0xfc, 0x9d, 0x71, 0x57, 0x48, 0xec, 0x36, 0x94, 0x75, 0xb1, - 0x5f, 0x47, 0xb1, 0x78, 0xbc, 0x57, 0x15, 0xf1, 0x23, 0xc4, 0x2d, 0xb9, 0x4b, 0x36, 0xec, 0xd6, - 0x49, 0x5c, 0x9b, 0xc2, 0x03, 0x4e, 0xc7, 0xb9, 0x81, 0xe5, 0x92, 0xce, 0x49, 0x49, 0x75, 0x6f, - 0x67, 0x19, 0x72, 0x2b, 0x46, 0x8c, 0xd0, 0x5a, 0xff, 0x8c, 0x28, 0xe7, 0x67, 0x70, 0xd8, 0x35, - 0x76, 0x16, 0x10, 0x9a, 0xb8, 0x87, 0x0d, 0x22, 0x90, 0x43, 0x9a, 0x77, 0x61, 0xb0, 0x41, 0x69, - 0x88, 0xcb, 0x05, 0x53, 0x78, 0xd1, 0x03, 0x2a, 0xf8, 0x3d, 0xe1, 0xe7, 0x8f, 0x7b, 0x0e, 0xda, - 0xa4, 0x79, 0xf2, 0xa2, 0x68, 0x07, 0x27, 0xc7, 0x7e, 0xe3, 0x1e, 0x51, 0x40, 0x4d, 0x44, 0xe8, - 0xc5, 0xd9, 0x16, 0x2f, 0x3c, 0x48, 0xdc, 0xc1, 0xe9, 0xa6, 0xd2, 0x0c, 0xf6, 0x73, 0x4d, 0xfe, - 0x53, 0xa3, 0x6b, 0xb8, 0xf9, 0x6e, 0xeb, 0xc4, 0x0d, 0x38, 0xbb, 0x26, 0x28, 0x84, 0xbd, 0x96, - 0x31, 0x9e, 0xe6, 0x60, 0xa5, 0x72, 0x8b, 0x91, 0xab, 0xad, 0x47, 0x28, 0xe3, 0xaa, 0x63, 0x3e, - 0x3e, 0xab, 0x5c, 0x4c, 0x3a, 0x74, 0xeb, 0x4d, 0xc4, 0xd7, 0xa6, 0x5b, 0xa3, 0xe1, 0x8e, 0x28, - 0xd2, 0x53, 0x2e, 0x27, 0x2a, 0x63, 0x1e, 0x26, 0x89, 0x7b, 0x2b, 0x3f, 0xdb, 0x78, 0x88, 0xc2, - 0x16, 0xdc, 0x56, 0x2b, 0x15, 0xb8, 0xac, 0x40, 0xa8, 0x15, 0x8a, 0xc5, 0x62, 0xba, 0x4d, 0xa1, - 0x71, 0x21, 0x42, 0xcf, 0xf4, 0xe9, 0xc7, 0xbb, 0x7d, 0x4d, 0x40, 0x7f, 0xa4, 0xcd, 0x03, 0x6f, - 0x84, 0x66, 0xd7, 0xee, 0x14, 0x5a, 0x3d, 0x04, 0x48, 0x26, 0x81, 0x75, 0xb1, 0xf8, 0x2c, 0x10, - 0xd0, 0xd1, 0x83, 0xd5, 0x9c, 0xf2, 0x56, 0x73, 0xb9, 0x11, 0x7c, 0x53, 0xaf, 0xe0, 0xa7, 0x3a, - 0x3b, 0x76, 0xac, 0x86, 0x26, 0x73, 0xa2, 0x8f, 0x98, 0x6b, 0xaa, 0xbf, 0x84, 0x48, 0x19, 0x53, - 0x5b, 0x15, 0x26, 0x9b, 0x69, 0xbc, 0x66, 0xf2, 0xaa, 0xf1, 0xa2, 0x9f, 0x71, 0x22, 0xa0, 0xda, - 0x13, 0xdd, 0x0f, 0xce, 0x13, 0x22, 0x5b, 0x7a, 0x4b, 0x86, 0x4c, 0x09, 0x7e, 0xd9, 0xa1, 0xc3, - 0x00, 0xed, 0x49, 0xd6, 0x6d, 0xbb, 0xf8, 0x50, 0xad, 0x82, 0x36, 0x5b, 0x44, 0x28, 0x27, 0xcd, - 0x36, 0x18, 0xb2, 0xd8, 0x20, 0xe8, 0xec, 0x93, 0xd0, 0x15, 0xf1, 0x87, 0xca, 0xb9, 0x3b, 0x93, - 0x55, 0xf6, 0x1b, 0x8f, 0xa0, 0x2a, 0x41, 0xcf, 0xef, 0x00, 0x29, 0x9b, 0xc6, 0xef, 0xe3, 0x27, - 0x89, 0xbe, 0x7b, 0x54, 0x13, 0xa5, 0xc5, 0x5d, 0x4c, 0xf4, 0x51, 0xf8, 0x41, 0xd5, 0x28, 0x49, - 0x71, 0x7a, 0x17, 0x8c, 0x8e, 0xbe, 0xde, 0x89, 0x41, 0x0d, 0x81, 0xd0, 0x97, 0x27, 0x35, 0x47, - 0x16, 0xa6, 0x65, 0x0e, 0xb2, 0x35, 0x68, 0x6f, 0x08, 0x02, 0xbb, 0x0b, 0xc2, 0x04, 0x6a, 0x62, - 0x10, 0xc2, 0xea, 0xb5, 0x98, 0x34, 0x8a, 0x6e, 0x4e, 0x91, 0x0e, 0x09, 0x17, 0x8d, 0x15, 0x3b, - 0x92, 0xfa, 0x18, 0x37, 0x73, 0x65, 0xda, 0x5b, 0x0c, 0xc7, 0xa8, 0xbf, 0x4e, 0x2d, 0xf8, 0x76, - 0x7e, 0xda, 0x69, 0xd9, 0xb7, 0x17, 0x2d, 0x9f, 0xf1, 0xec, 0x1e, 0x5b, 0x1d, 0x1a, 0x1f, 0xe0, - 0x82, 0xca, 0x15, 0xa3, 0xac, 0x9c, 0xf7, 0xb4, 0x9a, 0x71, 0x41, 0x0d, 0x47, 0xb1, 0x15, 0x97, - 0xb7, 0xfe, 0x34, 0xad, 0x20, 0x86, 0x18, 0xbe, 0x2f, 0xc5, 0xbe, 0x6b, 0x2f, 0x4d, 0xd5, 0xa4, - 0xad, 0xd2, 0xec, 0x71, 0xff, 0x82, 0xfd, 0xd7, 0x40, 0xf1, 0xa4, 0x6b, 0x7c, 0x8f, 0x3e, 0x2d, - 0x8b, 0x7f, 0x87, 0x6d, 0x20, 0xc0, 0x6b, 0x72, 0xc8, 0x42, 0xcc, 0x9a, 0xa1, 0x65, 0x12, 0xb2, - 0xc9, 0xd1, 0xcd, 0x3c, 0xd0, 0xb6, 0x5d, 0xff, 0x8d, 0xb3, 0x67, 0x13, 0x97, 0x19, 0xd3, 0x3c, - 0x36, 0xd2, 0x35, 0x5f, 0x38, 0xf5, 0xfa, 0x69, 0xa6, 0x9f, 0x8d, 0xc3, 0xff, 0xab, 0xb4, 0x5d, - 0xa2, 0xa6, 0x9a, 0x4e, 0xc3, 0xba, 0x9b, 0x1a, 0x1a, 0x07, 0xcf, 0x25, 0x4d, 0x9a, 0xd5, 0x69, - 0xa6, 0x9a, 0x7e, 0x0b, 0xe4, 0xd1, 0xdc, 0x16, 0x5b, 0x3c, 0x6d, 0xa9, 0x77, 0x5c, 0x62, 0x5a, - 0x69, 0xa6, 0x9f, 0x8d, 0x2c, 0x25, 0x7c, 0x89, 0x66, 0x4a, 0x11, 0x1a, 0xc6, 0x8d, 0xa8, 0x3b, - 0xed, 0x9e, 0x07, 0x4b, 0x76, 0x28, 0xe9, 0xa6, 0x9a, 0x7e, 0x08, 0x23, 0x03, 0x06, 0x1e, 0xe3, - 0x49, 0xcd, 0x7c, 0x2d, 0x36, 0xc5, 0xba, 0xa7, 0x1a, 0x49, 0x26, 0x9a, 0x69, 0xf8, 0xdb, 0x27, - 0xe3, 0xdd, 0x46, 0xb6, 0x6a, 0x6a, 0x18, 0x4b, 0x42, 0xca, 0x8e, 0xb6, 0x28, 0x6f, 0x52, 0x85, - 0x6b, 0xe9, 0xa6, 0x9a, 0x7e, 0x1d, 0xbe, 0xcb, 0xd3, 0xee, 0xb8, 0x66, 0xf3, 0x30, 0xbe, 0x9a, - 0x69, 0xa7, 0xe1, 0xb8, 0xff, 0x6f, 0xa1, 0xb1, 0x53, 0x4d, 0xb6, 0xff, 0xc2, 0x94, 0x92, 0x49, - 0x27, 0x77, 0x73, 0xfa, 0xea, 0x6e, 0x99, 0x89, 0x3c, 0x82, 0xff, 0x0b, 0xd8, 0x1e, 0x4d, 0x49, - 0x6e, 0x83, 0xfe, 0x71, 0x18, 0x8e, 0x92, 0x19, 0x81, 0x14, 0xc9, 0xc9, 0x94, 0x92, 0x16, 0x85, - 0xaf, 0x05, 0x98, 0x69, 0x4f, 0x0f, 0xf5, 0xe5, 0x9e, 0xf2, 0xa7, 0x24, 0xc4, 0x66, 0x3b, 0xfc, - 0x35, 0x2d, 0x7a, 0x42, 0x74, 0x3b, 0xc5, 0x58, 0xab, 0x49, 0x24, 0x92, 0xf0, 0xbd, 0xa1, 0xbc, - 0xd8, 0x34, 0x0b, 0x49, 0x64, 0xd8, 0xda, 0x2b, 0x4d, 0x24, 0x97, 0xf8, 0x26, 0xed, 0xa9, 0x67, - 0x16, 0x8d, 0xb2, 0x90, 0x5c, 0xf8, 0x20, 0x86, 0xf7, 0x7a, 0xd6, 0x8a, 0x3a, 0xc7, 0x55, 0xb0, - 0x53, 0x9f, 0xc8, 0xa0, 0xcb, 0xa2, 0x74, 0x4d, 0x26, 0xb3, 0x87, 0xfe, 0x36, 0xca, 0xae, 0x8c, - 0xd8, 0x4d, 0x6d, 0x2c, 0xd0, 0x6f, 0x75, 0x1b, 0xe4, 0x67, 0xa1, 0xca, 0xa6, 0x98, 0xab, 0x15, - 0x78, 0x94, 0xc8, 0x94, 0xcf, 0x85, 0xcb, 0xcf, 0x91, 0xec, 0xcd, 0xae, 0xde, 0x83, 0x34, 0x92, - 0x3b, 0xff, 0xfc, 0x29, 0x8e, 0x51, 0x95, 0x6e, 0xb6, 0xd9, 0x70, 0xf2, 0x93, 0x40, 0xd6, 0x36, - 0x34, 0x82, 0xfe, 0xf2, 0x0d, 0x7d, 0xf1, 0x90, 0xc2, 0x94, 0xe2, 0x68, 0xa5, 0x4a, 0x55, 0xe5, - 0x5e, 0x56, 0xa3, 0x48, 0xe4, 0xbd, 0x34, 0xd9, 0xf8, 0x20, 0x9f, 0x9f, 0x9f, 0xbf, 0x8c, 0xc0, - 0x38, 0xe3, 0x49, 0x49, 0xdf, 0xdc, 0x6f, 0x47, 0xfd, 0xb6, 0xdb, 0x6f, 0xc1, 0x24, 0xab, 0x6c, - 0xe2, 0xf8, 0xc9, 0xc8, 0x4e, 0x42, 0x72, 0x1a, 0x46, 0x20, 0x95, 0x65, 0x0e, 0x86, 0x1a, 0x2a, - 0xa7, 0xaa, 0x6a, 0xa7, 0xaa, 0x8e, 0x36, 0x15, 0x80, 0xfc, 0x3b, 0x97, 0xd3, 0xb7, 0x23, 0x12, - 0x29, 0x62, 0x8f, 0x8e, 0x9f, 0x6d, 0xb6, 0xdb, 0xf0, 0x5d, 0x6d, 0xa4, 0x17, 0x2a, 0x66, 0x49, - 0xe8, 0xa2, 0xf8, 0xd3, 0x31, 0xb8, 0xe4, 0x75, 0x30, 0x3d, 0x94, 0x4e, 0x14, 0x89, 0x87, 0x0c, - 0xfe, 0x07, 0x06, 0x66, 0x1b, 0xa3, 0x45, 0x79, 0x70, 0x72, 0xc5, 0x1f, 0xf8, 0xda, 0x63, 0xa0, - 0x00, 0x9d, 0xd4, 0x8d, 0x0c, 0xce, 0x63, 0x9b, 0x8f, 0x36, 0x8e, 0x72, 0x26, 0x68, 0x42, 0xfb, - 0x6a, 0x20, 0x0b, 0xf5, 0x55, 0x5f, 0x1b, 0x0c, 0xfd, 0x4e, 0x27, 0x4e, 0xa2, 0x49, 0xbd, 0xe7, - 0x0e, 0x7d, 0xdd, 0xec, 0xeb, 0xea, 0xaa, 0xbe, 0x14, 0xe9, 0xd3, 0x72, 0xf4, 0x0d, 0xac, 0x07, - 0xa9, 0xe4, 0x2a, 0x56, 0x3d, 0xb4, 0x37, 0x78, 0x80, 0x56, 0x20, 0xea, 0x56, 0x30, 0xdf, 0x58, - 0xa8, 0x3f, 0x8d, 0x16, 0x9e, 0xf8, 0x1e, 0xa4, 0xa4, 0xeb, 0xc4, 0x94, 0x68, 0xc4, 0x64, 0x75, - 0xb0, 0xb8, 0x91, 0x93, 0xd3, 0xc9, 0x77, 0x24, 0x18, 0xa4, 0x25, 0xef, 0xaa, 0xa9, 0xd8, 0x24, - 0x67, 0x08, 0x2c, 0xc5, 0xfc, 0x1e, 0xf8, 0x81, 0xa4, 0xe3, 0x69, 0x0a, 0xeb, 0xef, 0x52, 0x5e, - 0x23, 0x43, 0xb4, 0x72, 0x4a, 0xab, 0x62, 0x63, 0x9c, 0x98, 0xc9, 0x3a, 0xf2, 0x23, 0xac, 0x9d, - 0xbf, 0xc6, 0xe5, 0x0a, 0x12, 0x15, 0x06, 0xd9, 0xd9, 0xad, 0x9a, 0x18, 0xf7, 0xdf, 0xf6, 0x32, - 0x19, 0x5d, 0x6c, 0xbf, 0x55, 0x5e, 0x24, 0x21, 0x4e, 0xbc, 0xcc, 0x2a, 0x76, 0xb5, 0xbd, 0xf8, - 0x98, 0xc2, 0xb5, 0x53, 0x06, 0xc1, 0xd0, 0xc1, 0xdb, 0xb1, 0x8b, 0xd0, 0xdb, 0xaf, 0x83, 0x10, - 0x20, 0x6b, 0x38, 0x90, 0x59, 0x5a, 0x93, 0x05, 0x59, 0x7d, 0x13, 0xab, 0x8f, 0x7d, 0xb9, 0x4f, - 0xe2, 0x06, 0x14, 0x98, 0xcc, 0x7e, 0x54, 0x91, 0x23, 0x08, 0xfd, 0x34, 0x22, 0x6b, 0x28, 0xae, - 0xda, 0x7e, 0x14, 0x10, 0x72, 0x0f, 0xe2, 0xb8, 0x9b, 0x60, 0xd2, 0x77, 0x76, 0xed, 0xb4, 0x7d, - 0x7f, 0x82, 0xb3, 0xaf, 0x6f, 0x6c, 0x28, 0x74, 0xda, 0x45, 0x02, 0x3b, 0x5c, 0x84, 0x18, 0x7c, - 0x73, 0xe3, 0x2c, 0x56, 0x8e, 0xb8, 0xf2, 0xb3, 0xf8, 0x37, 0xa9, 0x61, 0xd1, 0x17, 0xa4, 0xdf, - 0xf8, 0x4c, 0xa6, 0x5c, 0xbc, 0xf2, 0xac, 0x6e, 0xde, 0x8b, 0xe3, 0x4c, 0x4f, 0x93, 0x93, 0xa4, - 0xf0, 0x40, 0x18, 0x9f, 0x88, 0xb3, 0xaf, 0x5b, 0xb0, 0x68, 0xef, 0xee, 0xef, 0xe0, 0x80, 0xcd, - 0xb6, 0x69, 0x77, 0x48, 0xd3, 0x22, 0x1e, 0x81, 0xb0, 0x33, 0x88, 0x2b, 0x06, 0x10, 0xed, 0x55, - 0x55, 0x77, 0x77, 0xf0, 0x58, 0x24, 0x68, 0x58, 0xae, 0x11, 0xd7, 0x01, 0x02, 0xf3, 0x4c, 0x8c, - 0x85, 0x7c, 0x25, 0x88, 0x28, 0x6b, 0xc8, 0xbb, 0x01, 0x05, 0xfe, 0x14, 0x26, 0xc1, 0x63, 0x27, - 0x78, 0x55, 0x36, 0x88, 0x17, 0x4d, 0xaf, 0x8d, 0xac, 0x42, 0xb7, 0x4d, 0x15, 0xd7, 0x1c, 0x82, - 0xc4, 0x5c, 0xe4, 0x54, 0xfc, 0x20, 0x70, 0x45, 0xf1, 0xd8, 0x4b, 0x2f, 0x17, 0x17, 0xc8, 0xad, - 0x8f, 0xd5, 0x55, 0x26, 0x3b, 0xce, 0x88, 0xc8, 0x06, 0xc0, 0xe0, 0xd0, 0xd1, 0xa7, 0x07, 0x8c, - 0xa2, 0x76, 0x8e, 0xc0, 0x1e, 0x62, 0x4e, 0xe9, 0x31, 0x87, 0x5a, 0xf7, 0xca, 0xfc, 0xa8, 0xff, - 0xcf, 0x5d, 0x5f, 0xe5, 0x32, 0x50, 0xe1, 0x78, 0xca, 0x8f, 0x70, 0x56, 0x0c, 0xb9, 0x40, 0xe0, - 0x6c, 0x18, 0xf4, 0x4c, 0x4c, 0x19, 0xd4, 0x3b, 0xcf, 0x78, 0xc2, 0x3d, 0x5b, 0x67, 0x44, 0xa4, - 0x6a, 0x9c, 0xca, 0x36, 0x50, 0x95, 0x7d, 0xbe, 0x28, 0x06, 0x30, 0xbe, 0x34, 0x44, 0xa5, 0x12, - 0x84, 0x18, 0xd7, 0x1a, 0x56, 0xe2, 0xae, 0xd2, 0xb4, 0xe0, 0xf1, 0x52, 0xd6, 0xe9, 0xbb, 0xf8, - 0x7e, 0xed, 0xd6, 0x0d, 0xb8, 0x29, 0xca, 0xa6, 0xe5, 0xcf, 0x60, 0xb2, 0x6a, 0xfa, 0x69, 0xa6, - 0x9f, 0x87, 0x4e, 0xeb, 0xfb, 0xbe, 0xbb, 0x22, 0xd4, 0xec, 0x36, 0xc2, 0x2d, 0x05, 0x98, 0xa6, - 0x98, 0x9e, 0xc7, 0xfe, 0x0a, 0xae, 0xa3, 0xa9, 0xcc, 0x98, 0xde, 0x0d, 0x2b, 0x21, 0xc5, 0xfa, - 0x1a, 0x74, 0x90, 0x1f, 0xe0, 0xa6, 0xb4, 0xfb, 0x6c, 0x8d, 0x06, 0x63, 0x9f, 0xe6, 0xbc, 0x22, - 0x7f, 0x5d, 0x21, 0x6d, 0xf0, 0xa6, 0x99, 0x66, 0xf4, 0x28, 0x88, 0xa5, 0x1c, 0x06, 0xfa, 0xd0, - 0xca, 0xc3, 0x21, 0xc5, 0x7f, 0x0a, 0x73, 0x09, 0x18, 0xdb, 0x7d, 0x91, 0x96, 0xe1, 0xb2, 0x71, - 0xb8, 0xb3, 0x5f, 0x61, 0x09, 0xdb, 0x90, 0x11, 0xf1, 0xb5, 0x55, 0x50, 0xe3, 0x1f, 0xd1, 0xec, - 0x65, 0x6b, 0xdc, 0xd6, 0x28, 0xc3, 0xec, 0x6a, 0xb6, 0xd6, 0x0d, 0xcf, 0x10, 0xeb, 0x7f, 0xe3, - 0x6e, 0xd3, 0x57, 0xa7, 0x43, 0x57, 0x56, 0x98, 0xdb, 0x1b, 0x4c, 0xc1, 0xe7, 0x3f, 0x55, 0x5f, - 0x0a, 0x53, 0x96, 0x88, 0xdc, 0x9e, 0xea, 0xb6, 0xfa, 0x35, 0xb6, 0xae, 0x84, 0x56, 0x00, 0x14, - 0x04, 0xf8, 0xc2, 0xd9, 0xa6, 0x67, 0xb7, 0x29, 0x9e, 0x3d, 0xc7, 0x95, 0x43, 0xc6, 0xad, 0xba, - 0x09, 0xb7, 0xf6, 0x2f, 0xe3, 0x6c, 0x4a, 0xcc, 0xda, 0x66, 0x43, 0x28, 0xfb, 0xd2, 0x40, 0x0c, - 0xcf, 0xd8, 0x41, 0x75, 0xa1, 0x41, 0x29, 0x9e, 0x77, 0x99, 0xef, 0x7f, 0xf8, 0xda, 0x91, 0xdb, - 0xc0, 0x34, 0x04, 0x4f, 0xf5, 0x13, 0x4e, 0x59, 0xf1, 0x25, 0x92, 0xff, 0x1d, 0x3f, 0x6d, 0xb6, - 0xdb, 0xf1, 0xe4, 0xab, 0xbc, 0xcb, 0xba, 0xaf, 0xe0, 0xae, 0x92, 0x49, 0x17, 0x07, 0x79, 0xee, - 0xcb, 0x84, 0xec, 0xe9, 0xe2, 0xf8, 0x7e, 0xd5, 0x4d, 0x3d, 0x36, 0x34, 0xf4, 0x96, 0x28, 0xb4, - 0x2d, 0x24, 0x97, 0xf8, 0xce, 0x69, 0xdd, 0xd1, 0xa3, 0x66, 0xd8, 0x48, 0xfa, 0xb7, 0xc0, 0xd5, - 0xff, 0x8d, 0x8a, 0x98, 0xa9, 0xf5, 0x54, 0x92, 0x47, 0x69, 0x5a, 0xc7, 0x07, 0x51, 0x18, 0x33, - 0xb8, 0xbe, 0xdb, 0x6d, 0xb7, 0xe1, 0x8b, 0xb7, 0x74, 0x92, 0xa6, 0x23, 0x27, 0xdb, 0x6d, 0xb6, - 0xfc, 0x17, 0xd8, 0xda, 0xac, 0xf9, 0x76, 0x64, 0xa7, 0xdc, 0x72, 0x5b, 0x35, 0xb6, 0xdb, 0x6f, - 0xc3, 0x12, 0x90, 0xa0, 0x68, 0xcc, 0x4a, 0xe4, 0x51, 0x94, 0xa4, 0xd6, 0x98, 0xe9, 0xd7, 0x5b, - 0x6d, 0xf8, 0xda, 0x49, 0x68, 0x27, 0xd3, 0xd3, 0x35, 0x25, 0x20, 0x93, 0x58, 0xc4, 0x49, 0x15, - 0x37, 0x33, 0xb1, 0xf9, 0xb5, 0xa2, 0xd6, 0x2a, 0xfc, 0x3d, 0x2d, 0x1b, 0x4a, 0x74, 0xd9, 0x5e, - 0x46, 0xec, 0x24, 0xa6, 0xad, 0x59, 0xcf, 0x8a, 0xb1, 0x57, 0xf8, 0xd9, 0x33, 0x59, 0xae, 0x81, - 0x96, 0xb0, 0xd3, 0xb0, 0x32, 0x1b, 0xf6, 0xdf, 0x1d, 0xaa, 0x98, 0x67, 0x55, 0xc6, 0xb8, 0xd4, - 0xbf, 0xf0, 0xf6, 0x47, 0x4f, 0x1c, 0x86, 0xd1, 0x2b, 0x18, 0x8d, 0x3f, 0x2e, 0x2d, 0x58, 0x75, - 0xb3, 0x58, 0x45, 0xff, 0xc6, 0xd0, 0xd1, 0xdb, 0x91, 0x86, 0xd1, 0x64, 0x23, 0x83, 0xbd, 0x61, - 0xb9, 0xe8, 0xdf, 0x28, 0x4b, 0xed, 0xb6, 0xdb, 0x7e, 0x1d, 0x22, 0xaf, 0xa9, 0xce, 0x9b, 0xaa, - 0xb4, 0x68, 0x42, 0xf5, 0x47, 0x4f, 0x2f, 0xb6, 0x7d, 0x6e, 0xbf, 0x0c, 0x51, 0xa0, 0x62, 0xcc, - 0x59, 0xee, 0xf3, 0x11, 0x99, 0x4a, 0x65, 0x0e, 0xdb, 0x54, 0x69, 0x8a, 0xb1, 0x57, 0xe0, 0x82, - 0x7f, 0x9f, 0xc6, 0xda, 0x15, 0xb4, 0x43, 0x86, 0xda, 0x92, 0xde, 0xcc, 0x2a, 0xc6, 0x9b, 0x6d, - 0xb6, 0xdb, 0x6d, 0xf8, 0x76, 0x56, 0xd2, 0x3b, 0x76, 0x37, 0x6d, 0x14, 0x1c, 0x8a, 0x89, 0xab, - 0xda, 0x35, 0x3f, 0xc1, 0x4e, 0xa8, 0x34, 0x12, 0x26, 0xc2, 0x8c, 0xb4, 0x93, 0x0c, 0x6f, 0x2d, - 0x5b, 0x6d, 0x8f, 0x87, 0x4a, 0x54, 0x10, 0xa2, 0x3a, 0x48, 0xe8, 0xd0, 0x5d, 0xe8, 0x37, 0x55, - 0x77, 0x77, 0x55, 0x55, 0xf0, 0x57, 0x91, 0xd6, 0xc7, 0xb3, 0xb2, 0xbf, 0xc7, 0x62, 0x15, 0x35, - 0x76, 0x8f, 0x1e, 0xf8, 0x50, 0x44, 0x1b, 0xa1, 0x95, 0x16, 0xd9, 0x8c, 0x5b, 0x23, 0x09, 0x5f, - 0xba, 0x93, 0x34, 0xa5, 0xf0, 0x80, 0xd4, 0x9b, 0x8a, 0x92, 0x4c, 0xca, 0x22, 0xed, 0x7e, 0x28, - 0xb8, 0x90, 0x5a, 0x64, 0x5a, 0xc8, 0x36, 0xd1, 0x55, 0x8b, 0x3b, 0x9d, 0x3e, 0x34, 0xe5, 0x23, - 0xa8, 0x7d, 0xd1, 0x94, 0x9b, 0x48, 0x49, 0x6f, 0x53, 0x85, 0x98, 0xcd, 0x03, 0x06, 0x05, 0xa1, - 0x85, 0x53, 0xc1, 0x8f, 0x83, 0x29, 0x9c, 0x0d, 0x31, 0x89, 0xbf, 0x77, 0x7f, 0x05, 0x75, 0x0e, - 0x96, 0x63, 0x14, 0xab, 0x74, 0x8f, 0x99, 0x0f, 0xfa, 0x07, 0xd5, 0x20, 0xe6, 0x2a, 0x8b, 0x7e, - 0xf8, 0x52, 0xb3, 0x96, 0x18, 0x5e, 0xc7, 0x4e, 0x80, 0x1d, 0x36, 0x5c, 0x01, 0x1b, 0x19, 0x70, - 0x6b, 0x81, 0xd3, 0x60, 0x20, 0x3d, 0xb4, 0x22, 0x00, 0xda, 0xa5, 0x8f, 0x34, 0x86, 0xfd, 0x5e, - 0xeb, 0xf0, 0xf2, 0x20, 0xc2, 0xc7, 0x9f, 0x0a, 0x12, 0x4e, 0xca, 0xf9, 0xc8, 0x6d, 0xa7, 0xba, - 0xf6, 0x55, 0x67, 0xa3, 0x5e, 0xe8, 0x3c, 0xac, 0x23, 0xbc, 0x4c, 0x10, 0x1c, 0x61, 0x32, 0xc5, - 0x29, 0x14, 0x9a, 0xd4, 0x22, 0x60, 0x3e, 0xc3, 0x65, 0x9c, 0xd7, 0x4c, 0x35, 0x7a, 0xd0, 0xa6, - 0x8a, 0xa0, 0x37, 0xfe, 0x5e, 0x9f, 0x12, 0x33, 0x41, 0x8f, 0xfa, 0x8b, 0x7d, 0xf3, 0x31, 0xcf, - 0xd8, 0x04, 0x80, 0x00, 0x19, 0xd7, 0x89, 0x18, 0x67, 0x5b, 0x6c, 0x60, 0x63, 0x63, 0x77, 0x2c, - 0x17, 0x73, 0x98, 0x62, 0x8b, 0xd8, 0xaf, 0xc1, 0x49, 0x51, 0xb3, 0x7e, 0xc7, 0x51, 0x98, 0x82, - 0x6c, 0x5a, 0xa1, 0xbd, 0x6f, 0x8d, 0x05, 0xdf, 0x09, 0xce, 0x64, 0xd2, 0x2e, 0xfa, 0x7a, 0x7e, - 0x3e, 0x4c, 0x26, 0x78, 0xc5, 0xca, 0xcc, 0xca, 0x4d, 0xca, 0x26, 0x51, 0xe1, 0xf1, 0x11, 0x35, - 0x9b, 0x16, 0x09, 0xf7, 0x53, 0x4d, 0x5a, 0x55, 0x55, 0x57, 0x77, 0x7f, 0x0e, 0x9c, 0x27, 0x71, - 0x4f, 0x16, 0x4d, 0x50, 0x96, 0xce, 0x5d, 0x1e, 0xad, 0x62, 0xa8, 0xba, 0x8e, 0xfd, 0xdd, 0xdf, - 0xc6, 0x16, 0x03, 0x56, 0x3a, 0x86, 0xe5, 0xd6, 0x9a, 0x2f, 0x45, 0x68, 0x29, 0x90, 0xde, 0xee, - 0xf4, 0x72, 0xdf, 0x21, 0x80, 0xe9, 0xee, 0x30, 0xc0, 0x07, 0x6a, 0xfc, 0xd3, 0x0c, 0xdb, 0x80, - 0x29, 0x5f, 0x8c, 0x23, 0xdd, 0x01, 0x87, 0x18, 0x29, 0xaa, 0xcc, 0x80, 0x79, 0x2d, 0xe3, 0x0d, - 0x0a, 0x93, 0xdc, 0x6a, 0xa0, 0x42, 0xb2, 0xe4, 0xb0, 0xd4, 0x37, 0x40, 0x7e, 0x14, 0xe3, 0x10, - 0xec, 0x06, 0xbe, 0x1a, 0x28, 0x0e, 0xe7, 0xe7, 0x34, 0x2d, 0xdd, 0x74, 0xc6, 0x86, 0x19, 0x10, - 0xdf, 0xc2, 0x1d, 0xa4, 0xf5, 0x64, 0xa1, 0x1c, 0xee, 0x86, 0x75, 0x3e, 0x3c, 0xac, 0x93, 0x52, - 0xd8, 0x0f, 0x21, 0x05, 0x2a, 0x0d, 0x29, 0x37, 0xe3, 0x3e, 0x4d, 0x4d, 0x0a, 0x08, 0x69, 0x0b, - 0xa5, 0x7a, 0x1c, 0x9a, 0xd7, 0x8c, 0xba, 0xe4, 0xc4, 0x98, 0xf5, 0xae, 0x6d, 0x36, 0xbb, 0x63, - 0x31, 0x0b, 0x9b, 0xf8, 0x30, 0x19, 0x8e, 0x4e, 0xf4, 0x18, 0xd4, 0x21, 0x58, 0x41, 0x51, 0xf2, - 0x1b, 0x8c, 0x71, 0x81, 0xc0, 0xf9, 0x7f, 0x8d, 0x2b, 0x1c, 0x19, 0x8e, 0x50, 0x74, 0x31, 0xe6, - 0x4d, 0xc6, 0x3a, 0x1a, 0x0b, 0x11, 0xcf, 0xca, 0xcd, 0xb1, 0xc6, 0x01, 0x5d, 0x8b, 0x13, 0x8d, - 0xb3, 0xce, 0xf4, 0x9d, 0xed, 0xfc, 0x6c, 0x76, 0xa3, 0xb6, 0xe7, 0x90, 0x9f, 0x6e, 0x66, 0x51, - 0x63, 0x97, 0x09, 0x1d, 0x6f, 0x63, 0x28, 0x7c, 0x25, 0x0a, 0xd5, 0xc8, 0x05, 0x2d, 0x9f, 0x6b, - 0xfe, 0x14, 0x2d, 0xe6, 0x06, 0xad, 0x70, 0xe4, 0xbd, 0x41, 0xd2, 0x44, 0x34, 0x91, 0x0b, 0x21, - 0x49, 0xd9, 0x59, 0x73, 0x83, 0x95, 0x3e, 0x36, 0x99, 0xd1, 0xa2, 0xa7, 0x04, 0xf9, 0x58, 0x3a, - 0x47, 0x55, 0x41, 0x8d, 0xf9, 0xb7, 0x53, 0x4f, 0x90, 0xa6, 0x8d, 0x34, 0x5f, 0xe3, 0x6d, 0x27, - 0xc1, 0x87, 0xf0, 0xc1, 0xa0, 0xd6, 0x3c, 0x1a, 0xdb, 0x95, 0x51, 0x2c, 0xb1, 0xab, 0xb1, 0x94, - 0x40, 0x2f, 0xb6, 0xdb, 0x6d, 0xf8, 0xd2, 0x63, 0xf7, 0x06, 0x6c, 0x78, 0xe5, 0xf1, 0xe9, 0xca, - 0x6a, 0x7a, 0xd4, 0xa6, 0x6b, 0x63, 0x14, 0x7b, 0x1a, 0xb3, 0xa4, 0x7f, 0xfe, 0x37, 0x18, 0x7e, - 0xeb, 0xec, 0x63, 0xa4, 0x7c, 0xa5, 0x53, 0x4d, 0x79, 0x58, 0x6e, 0x31, 0xb0, 0x1e, 0xf9, 0x88, - 0xa9, 0x22, 0xa5, 0xff, 0x0a, 0x16, 0xa6, 0xd8, 0x89, 0x53, 0x12, 0xa1, 0x3d, 0x05, 0x6b, 0x1b, - 0x25, 0xa9, 0xa4, 0xe8, 0xb3, 0xe1, 0x42, 0x23, 0x64, 0xcc, 0x75, 0x6d, 0xfa, 0x35, 0x70, 0x87, - 0x94, 0x7b, 0xb7, 0x33, 0x1e, 0xa3, 0x22, 0x99, 0xaa, 0xba, 0x10, 0x88, 0xbf, 0x8d, 0xb6, 0x3e, - 0x8c, 0xb5, 0xb2, 0x56, 0xd0, 0xd2, 0x0f, 0x56, 0x32, 0x10, 0x58, 0x41, 0x14, 0x3e, 0xb0, 0x9b, - 0x15, 0x7f, 0xe1, 0x4f, 0x64, 0xac, 0xcd, 0x43, 0x51, 0xd4, 0xd5, 0x75, 0x53, 0x23, 0xaf, 0x0f, - 0x90, 0xa4, 0x25, 0x21, 0xad, 0xb2, 0x2e, 0xc7, 0xa5, 0x4d, 0x92, 0x65, 0x4a, 0x6d, 0xa9, 0x3f, - 0xf8, 0x7f, 0x2b, 0x0c, 0x70, 0x79, 0x97, 0x72, 0x46, 0xd8, 0xeb, 0xe9, 0xa6, 0x9a, 0x7e, 0x37, - 0x66, 0xda, 0x6d, 0xaf, 0xa4, 0x93, 0x47, 0x9d, 0xf2, 0x74, 0x23, 0xdb, 0xc4, 0x7c, 0x6d, 0xb6, - 0x9a, 0x7e, 0x09, 0xbc, 0x9b, 0x6b, 0x98, 0xfc, 0x7f, 0x82, 0x0b, 0x1b, 0xb4, 0xd0, 0xed, 0x51, - 0x7d, 0x24, 0x9c, 0xd3, 0x52, 0x71, 0x56, 0x2a, 0xff, 0x05, 0xf7, 0x2f, 0x67, 0x10, 0xe3, 0xf3, - 0xd0, 0xd5, 0x31, 0x6f, 0xff, 0x86, 0x6f, 0xe8, 0x6f, 0x65, 0x8c, 0x45, 0x8e, 0x34, 0xd3, 0x15, - 0x62, 0xaf, 0xf0, 0xc6, 0xd4, 0xf1, 0x9d, 0xcd, 0x3a, 0x77, 0xfb, 0x6d, 0x8b, 0x69, 0xf8, 0x77, - 0x9e, 0x4d, 0x37, 0x5b, 0x6d, 0xe7, 0x36, 0x81, 0xb8, 0xe4, 0xba, 0x93, 0xff, 0x85, 0x0a, 0x35, - 0x35, 0xc1, 0x8c, 0xe4, 0x7d, 0x96, 0x4f, 0x7c, 0x7f, 0xcf, 0xb6, 0x66, 0x27, 0x1f, 0x9c, 0xf8, - 0x76, 0xe7, 0xb0, 0xa0, 0xed, 0x96, 0x39, 0xa4, 0x62, 0x65, 0x26, 0x71, 0xf3, 0x75, 0x33, 0xac, - 0x9b, 0x5d, 0xa9, 0xc6, 0x6d, 0x36, 0xfe, 0x18, 0x39, 0x88, 0x61, 0x8a, 0x7c, 0xc5, 0x05, 0xce, - 0x18, 0xd4, 0xfb, 0xf5, 0x53, 0x18, 0xb8, 0xc7, 0xc6, 0xd3, 0x62, 0x90, 0x95, 0x43, 0x4d, 0xd3, - 0x7b, 0xe1, 0x60, 0x4a, 0xc7, 0x5f, 0x31, 0xd7, 0x9d, 0x71, 0xd7, 0x9d, 0xf1, 0xa6, 0x7d, 0xbb, - 0xea, 0x4e, 0x42, 0x0f, 0x34, 0x33, 0xb2, 0xd9, 0x26, 0x4a, 0xc4, 0xe7, 0x99, 0xe5, 0x24, 0x9a, - 0x6b, 0xfe, 0x36, 0xdf, 0x2e, 0xc7, 0x8c, 0xd5, 0x41, 0xbe, 0xaf, 0xab, 0x49, 0x7b, 0x1b, 0x4c, - 0x64, 0x39, 0xcb, 0xd3, 0x1d, 0xbf, 0xf8, 0xd8, 0x79, 0x4b, 0xad, 0x31, 0x92, 0xf4, 0x32, 0x94, - 0x75, 0x20, 0x33, 0xb9, 0xea, 0x32, 0x67, 0x29, 0xe9, 0x2d, 0x08, 0x54, 0xe9, 0x74, 0x0a, 0x12, - 0xea, 0xa0, 0x4f, 0xb5, 0x49, 0xec, 0x7b, 0x79, 0xfe, 0xa9, 0xc9, 0xfc, 0x29, 0x58, 0xb1, 0xc1, - 0x3a, 0xb1, 0xab, 0x1a, 0xf5, 0x44, 0xac, 0x69, 0xa4, 0xf8, 0x52, 0x3f, 0x79, 0x7b, 0x9f, 0xb6, - 0x87, 0xc4, 0xda, 0xc0, 0xea, 0xbe, 0x8f, 0x0d, 0xf6, 0xc8, 0x1b, 0x1b, 0xd2, 0xfc, 0x3a, 0x5d, - 0x35, 0x4e, 0xa9, 0x10, 0x82, 0xbc, 0x77, 0x2a, 0x36, 0x56, 0xa6, 0x1f, 0x8e, 0xfd, 0x55, 0x57, - 0xc2, 0x84, 0x80, 0xca, 0x41, 0xae, 0xae, 0x5b, 0x46, 0x8c, 0xdd, 0x6b, 0x64, 0x22, 0xbe, 0xbc, - 0x40, 0xd3, 0x31, 0x93, 0x2c, 0x9e, 0x8a, 0xa7, 0x16, 0x77, 0xab, 0x73, 0x8e, 0x17, 0x8a, 0x62, - 0x78, 0xc3, 0xde, 0xef, 0xe3, 0x05, 0xa0, 0x62, 0x0c, 0xdf, 0xd6, 0x1d, 0xbb, 0xbb, 0x33, 0x75, - 0x12, 0xca, 0x84, 0x9e, 0x3a, 0x9b, 0x28, 0x14, 0x57, 0x27, 0x6f, 0xf1, 0x98, 0x48, 0x63, 0xb9, - 0xba, 0x03, 0x9e, 0x71, 0x1b, 0x5c, 0xe3, 0x6a, 0x66, 0x9f, 0xdd, 0xd9, 0x27, 0xc6, 0xb5, 0x86, - 0x7e, 0x11, 0x9c, 0x9a, 0xa3, 0xb1, 0x6e, 0x60, 0xef, 0x92, 0xec, 0x49, 0x82, 0x35, 0x31, 0x38, - 0x2f, 0x0a, 0x5b, 0x42, 0x8c, 0x99, 0xb5, 0x49, 0x92, 0x75, 0x43, 0xbf, 0x70, 0xf7, 0xb7, 0xb4, - 0x81, 0x54, 0xe5, 0xb9, 0x51, 0x81, 0x8a, 0xfd, 0x3f, 0xc3, 0xdd, 0xfb, 0x59, 0xd1, 0x12, 0x4e, - 0x29, 0x56, 0x99, 0x94, 0xa1, 0x37, 0x1f, 0xed, 0xb6, 0x98, 0x89, 0x9f, 0x18, 0x53, 0x85, 0x4b, - 0xec, 0x36, 0xef, 0x29, 0x8e, 0xf2, 0x48, 0x93, 0xea, 0x53, 0x46, 0x28, 0x50, 0x98, 0xbb, 0x80, - 0x28, 0x40, 0xfd, 0x8c, 0xb1, 0x8b, 0x8d, 0xa8, 0x87, 0x2d, 0xd5, 0xe3, 0xe3, 0x3f, 0x33, 0x13, - 0xff, 0x60, 0x48, 0x22, 0x6f, 0x3b, 0x4e, 0xe5, 0x17, 0x6e, 0x24, 0x31, 0xda, 0x34, 0x2d, 0x78, - 0x81, 0x84, 0x74, 0xf3, 0x64, 0x06, 0x81, 0xb5, 0xa2, 0x5c, 0x02, 0x6e, 0x8e, 0x92, 0x5e, 0x33, - 0xb6, 0x94, 0xcd, 0xaf, 0x35, 0x05, 0xcb, 0xd6, 0x5d, 0x39, 0x05, 0xaa, 0x3c, 0x12, 0xec, 0x97, - 0x66, 0xee, 0xef, 0x88, 0xc8, 0xd4, 0xb2, 0x66, 0xdf, 0xc2, 0x24, 0xb4, 0xd3, 0x06, 0x4d, 0xe7, - 0xef, 0xc3, 0xb5, 0xca, 0x3c, 0x16, 0x51, 0x95, 0x83, 0x20, 0xac, 0xac, 0x0f, 0x4d, 0xa8, 0x1e, - 0x6f, 0xe4, 0x8f, 0x95, 0xc0, 0x1f, 0x44, 0x6b, 0x78, 0xaf, 0x8f, 0x39, 0x74, 0xb8, 0xd4, 0x9a, - 0x8a, 0x28, 0xb9, 0x09, 0x3c, 0xae, 0x50, 0x80, 0x28, 0x8c, 0x9d, 0x0b, 0xc6, 0x76, 0x0f, 0x4b, - 0xb9, 0xfb, 0x25, 0xf1, 0xec, 0x2b, 0x61, 0xa2, 0x57, 0x8d, 0x16, 0x0e, 0x45, 0xe3, 0x2c, 0x1e, - 0x37, 0x60, 0x6f, 0x3d, 0x25, 0x43, 0xa7, 0x80, 0x48, 0x95, 0x07, 0xaa, 0x0a, 0x04, 0xe1, 0x03, - 0x56, 0x51, 0xc8, 0x4d, 0x04, 0x09, 0x69, 0x08, 0x3d, 0xa5, 0xcf, 0x1a, 0x50, 0x1b, 0xb8, 0x2d, - 0x06, 0x7f, 0x1c, 0x5c, 0x20, 0xde, 0xf0, 0xb9, 0xa0, 0xc9, 0x48, 0xee, 0x14, 0xc5, 0x57, 0xf1, - 0x6a, 0xde, 0x53, 0xa1, 0x75, 0xff, 0xf4, 0xbc, 0xaa, 0x16, 0x0a, 0x8c, 0x6f, 0x2f, 0xfc, 0x44, - 0x71, 0xbc, 0x7c, 0xc4, 0x26, 0x57, 0x29, 0x39, 0x19, 0x3f, 0x87, 0x98, 0x28, 0x74, 0x1f, 0x63, - 0xc2, 0x3c, 0xdf, 0x39, 0x79, 0xc0, 0xd9, 0x99, 0xb1, 0xf8, 0xc3, 0x84, 0xdd, 0x37, 0xc6, 0x29, - 0xf1, 0x8a, 0x68, 0xe9, 0xbe, 0x52, 0x12, 0x90, 0xfe, 0x32, 0x89, 0x44, 0x0b, 0x46, 0x9d, 0xe5, - 0xdc, 0xef, 0xe7, 0xa2, 0x18, 0x4b, 0x95, 0xdb, 0x1a, 0xf6, 0x3e, 0x52, 0x52, 0xd7, 0xc2, 0x83, - 0x26, 0x68, 0x8f, 0x95, 0xa6, 0xd6, 0x41, 0xa4, 0xd5, 0x71, 0xc3, 0xa3, 0x1d, 0x84, 0x3b, 0x7c, - 0x10, 0x09, 0x69, 0xa1, 0xba, 0xaf, 0x9d, 0x94, 0x70, 0xda, 0x6e, 0x2a, 0x63, 0xbf, 0x6d, 0xb6, - 0xdb, 0xf1, 0xb1, 0xa7, 0x0b, 0x17, 0x8e, 0x26, 0x90, 0x5a, 0x76, 0x33, 0xca, 0xda, 0x1c, 0xe5, - 0x21, 0x6d, 0x7d, 0xb6, 0xdb, 0x6f, 0xc6, 0xdb, 0x08, 0x4e, 0x61, 0x90, 0x43, 0x73, 0x18, 0xe5, - 0x03, 0x6c, 0xe6, 0xa5, 0x05, 0xbe, 0xd3, 0x80, 0xca, 0x27, 0xb1, 0xa4, 0xdb, 0x6d, 0xb6, 0xdf, - 0x82, 0x92, 0x36, 0xf5, 0x21, 0x62, 0xb2, 0x23, 0x4d, 0x4f, 0xad, 0x3f, 0x5d, 0x85, 0x27, 0x75, - 0x5f, 0xe1, 0x4d, 0x64, 0x5a, 0x48, 0xbb, 0xa3, 0x6f, 0x79, 0x5b, 0x0d, 0x98, 0xfd, 0x86, 0xae, - 0x30, 0xe5, 0x46, 0xd6, 0xe7, 0xf8, 0x50, 0xb0, 0x98, 0x54, 0xcf, 0xb4, 0xd8, 0xdc, 0x6a, 0xe9, - 0xbb, 0xb5, 0x8d, 0x1c, 0xd5, 0x7a, 0x0a, 0x0d, 0xec, 0x86, 0x57, 0x5e, 0x8d, 0x97, 0x3c, 0x77, - 0xe3, 0x65, 0xf4, 0xba, 0x69, 0xb1, 0x8c, 0xd9, 0xa3, 0x7d, 0xe5, 0x5d, 0xa8, 0x06, 0xdc, 0x91, - 0x30, 0x52, 0x3e, 0x6e, 0xda, 0xff, 0xc6, 0xd9, 0xbe, 0x6e, 0x57, 0xd2, 0x3c, 0x2e, 0x6c, 0xe6, - 0xd0, 0xb7, 0x9a, 0x6a, 0x7b, 0x3a, 0xf0, 0x9e, 0x48, 0xb4, 0xd2, 0x6d, 0x11, 0x67, 0xfe, 0x36, - 0x4e, 0xcb, 0x2e, 0x45, 0xc6, 0x98, 0xea, 0x26, 0xb3, 0x3c, 0x71, 0xa2, 0x1e, 0x9e, 0x57, 0x77, - 0x98, 0xe9, 0xa6, 0xdb, 0x7e, 0x16, 0xe7, 0xab, 0x1a, 0xc6, 0x8f, 0x66, 0x66, 0x3f, 0x49, 0x53, - 0x16, 0xc5, 0xbf, 0xc1, 0x65, 0x08, 0xee, 0x6b, 0xa0, 0x6c, 0x19, 0xe0, 0x3a, 0x65, 0x49, 0xac, - 0x31, 0xa2, 0xd6, 0x29, 0x3c, 0x6d, 0xf4, 0x4d, 0x8e, 0xa3, 0x36, 0x6f, 0x54, 0x95, 0x45, 0xc1, - 0x3c, 0x16, 0x55, 0xe7, 0xa3, 0xb5, 0x8c, 0xac, 0x84, 0x31, 0x6d, 0xb1, 0xff, 0x0a, 0x62, 0x2b, - 0x23, 0xd7, 0xa0, 0xcf, 0x7b, 0x28, 0x4a, 0x54, 0x6c, 0xf1, 0xa7, 0xa6, 0x8c, 0x20, 0x52, 0xa9, - 0xce, 0x1f, 0x18, 0x43, 0xa8, 0x1a, 0x34, 0xd7, 0x55, 0x6a, 0x72, 0x1a, 0x7b, 0xb6, 0x6e, 0x20, - 0xdb, 0x74, 0x8b, 0xbe, 0x32, 0x3f, 0x63, 0xdd, 0x9b, 0x52, 0x6c, 0xd6, 0x4c, 0xad, 0xe3, 0xfc, - 0x14, 0xd3, 0xb9, 0xa8, 0x64, 0xdd, 0x08, 0xa4, 0x1a, 0xcb, 0xac, 0x6f, 0x8e, 0x97, 0xe1, 0xd9, - 0x35, 0x27, 0xcf, 0xd5, 0x5b, 0x64, 0x37, 0x49, 0x2d, 0x79, 0xa2, 0x82, 0x6d, 0xb6, 0xdb, 0xf0, - 0x40, 0x79, 0x08, 0x25, 0x29, 0x01, 0xb9, 0x28, 0xb0, 0x6c, 0x57, 0x45, 0x4c, 0xf4, 0xfd, 0x5b, - 0x71, 0x6d, 0xdd, 0xdf, 0xc2, 0x84, 0x7f, 0x7f, 0x98, 0x33, 0x0a, 0x37, 0x07, 0x49, 0x0a, 0x9a, - 0x4e, 0x86, 0x3c, 0xe0, 0xe8, 0x06, 0xf8, 0x52, 0xbd, 0xc1, 0xb9, 0x99, 0xf8, 0xd9, 0xcb, 0x06, - 0xb4, 0xe2, 0x9b, 0x4e, 0xfa, 0x53, 0x7d, 0x23, 0x57, 0x7d, 0x7d, 0x29, 0x3f, 0xc6, 0xea, 0xba, - 0x56, 0x34, 0x36, 0x31, 0x97, 0x06, 0xcc, 0xac, 0x40, 0x67, 0x73, 0x59, 0x65, 0xc1, 0xca, 0x78, - 0xb6, 0x2c, 0xa1, 0x7f, 0x87, 0xf7, 0x46, 0xca, 0x40, 0x6f, 0x85, 0x1c, 0xe5, 0xa1, 0xc4, 0x61, - 0x12, 0x45, 0x8f, 0xf7, 0xfe, 0x36, 0x13, 0xb2, 0x72, 0xa6, 0xe7, 0x3e, 0x9b, 0x73, 0x4e, 0xa9, - 0xca, 0x0e, 0xc6, 0xec, 0x0e, 0x34, 0x3c, 0x82, 0xba, 0xd6, 0xb8, 0x52, 0x59, 0x7c, 0x5b, 0xff, - 0x1b, 0x63, 0x23, 0x2d, 0xad, 0x84, 0xf6, 0x40, 0x6d, 0x3a, 0x28, 0xf1, 0xea, 0xd6, 0xce, 0x6c, - 0x68, 0xca, 0x64, 0xad, 0xa4, 0x33, 0x86, 0x50, 0xbf, 0xc1, 0x6e, 0x88, 0xaa, 0xf3, 0x90, 0xa5, - 0x51, 0xda, 0x91, 0x78, 0xdc, 0xaa, 0xc6, 0x52, 0x35, 0x69, 0x85, 0x1a, 0xd6, 0x23, 0xd6, 0xf5, - 0x40, 0x82, 0x75, 0xc9, 0xe5, 0xcc, 0x8a, 0xe5, 0xf7, 0x75, 0x49, 0xc5, 0x87, 0x14, 0x13, 0x52, - 0xc3, 0x1d, 0xa0, 0x79, 0x49, 0x32, 0xa0, 0xac, 0xff, 0x04, 0xde, 0xdb, 0x4e, 0x9e, 0xba, 0x4f, - 0x8d, 0x12, 0x1a, 0xbc, 0x24, 0x36, 0xd8, 0xbc, 0x03, 0xf5, 0x38, 0x64, 0xcd, 0x78, 0x0a, 0x57, - 0x47, 0x28, 0x1d, 0xbd, 0x86, 0xaf, 0x64, 0xe9, 0x1b, 0x14, 0xb2, 0xa0, 0x19, 0xcd, 0x6a, 0x63, - 0x68, 0x41, 0x3b, 0xca, 0x3f, 0xea, 0xaa, 0xbe, 0x11, 0x23, 0x35, 0x36, 0xbd, 0x4e, 0x3c, 0x22, - 0xed, 0x3b, 0x4d, 0xae, 0xdf, 0x0a, 0x63, 0x9b, 0x0e, 0xa4, 0x1a, 0xf7, 0xe7, 0x33, 0x46, 0xc6, - 0x6f, 0x67, 0x7b, 0x35, 0x97, 0x5f, 0x25, 0x59, 0xba, 0x06, 0xdf, 0x04, 0x18, 0xe0, 0xb8, 0x25, - 0x11, 0x5f, 0x04, 0xc6, 0xc5, 0x46, 0xbb, 0xa1, 0x38, 0x60, 0xa3, 0xbf, 0x77, 0x77, 0xf0, 0x56, - 0x67, 0x20, 0xe7, 0x24, 0x10, 0x33, 0x03, 0x1b, 0x38, 0xab, 0xf3, 0xfb, 0xd2, 0x7d, 0xf1, 0x82, - 0x52, 0x52, 0x7f, 0x61, 0x56, 0xe3, 0x71, 0x98, 0xcc, 0x8e, 0x0a, 0x33, 0xa4, 0x98, 0x0d, 0x90, - 0x85, 0xc4, 0x8c, 0xd7, 0xd9, 0x76, 0x45, 0x12, 0x79, 0xe2, 0x7f, 0xbb, 0x19, 0x07, 0x76, 0x7f, - 0x0a, 0x55, 0x96, 0xec, 0xf5, 0xa2, 0x26, 0x67, 0xb5, 0xe3, 0x60, 0xe0, 0xe4, 0x58, 0xd5, 0xd3, - 0x6d, 0x21, 0x8a, 0x1f, 0xf1, 0xb0, 0xd3, 0x22, 0x36, 0x42, 0xd5, 0x5c, 0x58, 0xca, 0x53, 0x4a, - 0x19, 0xb1, 0x2d, 0xaa, 0x15, 0xb7, 0x5b, 0x4b, 0x94, 0x3a, 0x56, 0xdb, 0x6d, 0xb2, 0x18, 0xc9, - 0x0c, 0x67, 0xc1, 0x06, 0x03, 0xc6, 0x50, 0xb6, 0x0d, 0x83, 0x6e, 0x37, 0x23, 0x2b, 0x54, 0x26, - 0xb5, 0xbd, 0xf6, 0x9e, 0xfe, 0x36, 0x6c, 0x76, 0x1b, 0x1d, 0x95, 0x2e, 0xc3, 0x6e, 0xd4, 0x9a, - 0xab, 0x89, 0x94, 0x63, 0x0a, 0xdd, 0x68, 0xef, 0xdb, 0x6d, 0xb6, 0xfc, 0x14, 0x6b, 0x64, 0x90, - 0xd2, 0x41, 0x64, 0xd7, 0x4b, 0xf0, 0x4d, 0x2e, 0xd7, 0x32, 0x81, 0xe4, 0x22, 0x74, 0xa6, 0x57, - 0xb8, 0xb3, 0x5b, 0xe0, 0xb8, 0x8a, 0xbd, 0xa3, 0xe6, 0x45, 0x7c, 0x67, 0x75, 0x9c, 0x84, 0x39, - 0x8f, 0x52, 0x31, 0x05, 0xaa, 0x4c, 0x75, 0x25, 0xad, 0x8f, 0x2c, 0x16, 0xce, 0x16, 0x09, 0xd1, - 0xa1, 0xe3, 0x24, 0x78, 0xfd, 0x57, 0x0e, 0xde, 0x62, 0x59, 0xd3, 0x43, 0x60, 0x59, 0xe8, 0xae, - 0xeb, 0x68, 0x95, 0xbc, 0xbd, 0x8f, 0x04, 0xa5, 0xb6, 0x22, 0x5a, 0xa6, 0x32, 0x93, 0xd2, 0x2f, - 0x0a, 0x5c, 0x8a, 0x6c, 0x54, 0xc8, 0x85, 0x87, 0xb0, 0x13, 0x27, 0x8c, 0x9e, 0x0b, 0x6a, 0x4c, - 0x13, 0x2f, 0x44, 0x4e, 0xbc, 0x25, 0x60, 0x4a, 0xc5, 0x15, 0xa8, 0x36, 0x40, 0x3a, 0xc5, 0xf8, - 0x46, 0x74, 0x9c, 0x41, 0x98, 0x0e, 0xb2, 0x14, 0x7b, 0x67, 0xa7, 0x2f, 0x4d, 0x9f, 0x82, 0xb9, - 0x13, 0x44, 0x64, 0xf3, 0x84, 0x08, 0x4b, 0xae, 0x9c, 0x31, 0xf1, 0xc5, 0xe0, 0xd9, 0x6a, 0x85, - 0x7c, 0x69, 0x4f, 0x8c, 0xab, 0xaa, 0x3a, 0x0c, 0x87, 0x49, 0xd8, 0x38, 0xe3, 0xe0, 0xb8, 0xc3, - 0x85, 0x1c, 0x02, 0x54, 0x82, 0xca, 0xa1, 0xfc, 0x4f, 0x17, 0xaa, 0x07, 0x4c, 0x1f, 0x8b, 0xaa, - 0x2c, 0x68, 0x58, 0x41, 0xfd, 0xd9, 0x26, 0xc2, 0x0b, 0xb7, 0xc4, 0xe8, 0x37, 0x6a, 0x34, 0x6f, - 0xe2, 0x6b, 0xc2, 0x25, 0x4e, 0x9a, 0x8d, 0x84, 0x04, 0x1e, 0x64, 0x5c, 0xbe, 0xf5, 0x0a, 0xd7, - 0x5f, 0x8c, 0xb0, 0x86, 0xe4, 0xde, 0x10, 0x1a, 0x02, 0x1b, 0x5a, 0x98, 0x04, 0x7b, 0x2d, 0x51, - 0x5e, 0xc8, 0xbc, 0x83, 0xf8, 0xd1, 0x18, 0xc7, 0xbc, 0x31, 0xf3, 0x82, 0x25, 0x86, 0x82, 0xd2, - 0x6c, 0x71, 0xec, 0xe9, 0x28, 0x5a, 0xe5, 0x84, 0x2d, 0xcf, 0xfe, 0x34, 0xd0, 0x04, 0x42, 0x8d, - 0x35, 0x54, 0x4d, 0x22, 0x4a, 0xb1, 0x80, 0xe0, 0x4d, 0xe9, 0x52, 0x3b, 0x25, 0x95, 0x0d, 0x1c, - 0xd4, 0x0d, 0xf4, 0xf0, 0xf4, 0xbc, 0x9b, 0x31, 0x8e, 0xf1, 0xa2, 0x51, 0x51, 0x24, 0xcd, 0x06, - 0x51, 0x01, 0xad, 0x0e, 0x39, 0x70, 0x94, 0x1b, 0x4a, 0x53, 0x35, 0xc1, 0xbe, 0x47, 0x6a, 0xb5, - 0xbf, 0xfc, 0x6f, 0x95, 0x29, 0xba, 0xdb, 0x8d, 0xad, 0xbb, 0x4a, 0x1a, 0x7b, 0xa1, 0xb1, 0x99, - 0x2d, 0x4c, 0xca, 0x5f, 0xe1, 0xda, 0x55, 0x34, 0x4d, 0x8e, 0xb1, 0x78, 0x91, 0x3e, 0x63, 0x97, - 0x5d, 0x25, 0x4e, 0x5d, 0x6f, 0xfc, 0x69, 0x20, 0xdc, 0xdb, 0x26, 0x42, 0xbc, 0x8c, 0x95, 0xd4, - 0xcb, 0x48, 0x6c, 0xd8, 0xb1, 0x6b, 0x2a, 0x4e, 0x5e, 0xbe, 0x45, 0xd2, 0x7f, 0x8d, 0xdb, 0xfe, - 0x8d, 0xec, 0xc9, 0x23, 0x46, 0x2d, 0xb4, 0xb1, 0x54, 0x56, 0x5e, 0x5c, 0xff, 0x0f, 0x68, 0x9b, - 0x4c, 0x61, 0x57, 0x34, 0xe5, 0xc4, 0x6e, 0x8b, 0x1b, 0x88, 0x27, 0x51, 0xc5, 0x24, 0xcb, 0x36, - 0x4d, 0x56, 0x9f, 0xe1, 0x4d, 0xba, 0x5a, 0xbf, 0xee, 0x10, 0x21, 0x17, 0x53, 0xc9, 0x6a, 0x51, - 0xa4, 0xc8, 0xb6, 0x9a, 0x90, 0x69, 0xd3, 0x2a, 0x7c, 0x69, 0x76, 0x15, 0x9e, 0x0c, 0xb1, 0x9b, - 0x2e, 0x0d, 0x53, 0xe1, 0x95, 0xbc, 0x2c, 0xac, 0x94, 0xeb, 0x0e, 0xff, 0x82, 0x82, 0x15, 0xe1, - 0xd6, 0xe9, 0x7b, 0x0d, 0x7f, 0x77, 0x00, 0x90, 0x1b, 0xe1, 0xe3, 0xb1, 0x31, 0x4c, 0x8a, 0x54, - 0xdd, 0xe3, 0x39, 0x0f, 0x27, 0x50, 0x77, 0xee, 0x3b, 0x79, 0xff, 0x1b, 0x4e, 0xba, 0xd3, 0x26, - 0xfd, 0x8e, 0xe6, 0x72, 0x8e, 0xbe, 0x3c, 0xa9, 0xc6, 0x9a, 0x7f, 0xe3, 0x38, 0xe0, 0x01, 0x0a, - 0x04, 0xc9, 0x8f, 0x6c, 0x51, 0x80, 0xd7, 0x4d, 0xde, 0x51, 0xd2, 0x29, 0x4a, 0x0e, 0xaf, 0x1b, - 0x95, 0x49, 0xca, 0xc1, 0x3d, 0x96, 0xaa, 0xa1, 0x3b, 0x2f, 0x4a, 0x38, 0x86, 0xca, 0x16, 0xa4, - 0x89, 0xa2, 0x48, 0xba, 0x1f, 0xe3, 0x7a, 0x6c, 0x19, 0x88, 0x4a, 0x10, 0x05, 0xe9, 0x12, 0x4e, - 0x84, 0x0d, 0xa2, 0x07, 0x26, 0x40, 0x16, 0x8f, 0x3e, 0x9a, 0x69, 0xa7, 0xe3, 0x69, 0x32, 0x31, - 0x54, 0x5d, 0x4b, 0x40, 0xc8, 0x4f, 0x1d, 0x70, 0x23, 0x7a, 0x7c, 0xea, 0x7e, 0x6e, 0x7e, 0xef, - 0xfe, 0x34, 0xcc, 0x6a, 0xe3, 0x84, 0x1b, 0x44, 0x94, 0x5c, 0x69, 0xd4, 0x94, 0xff, 0xc1, 0xf7, - 0xda, 0xc3, 0x1b, 0xd6, 0xbb, 0xbb, 0xff, 0x82, 0x08, 0xf5, 0x9a, 0x6a, 0xa1, 0x30, 0x6c, 0x68, - 0x67, 0x61, 0x8c, 0x31, 0xea, 0xd0, 0x3c, 0xfe, 0x2a, 0xad, 0xb6, 0xdb, 0x7f, 0xe1, 0x48, 0xdb, - 0x4d, 0x3a, 0xdd, 0x6e, 0xda, 0x23, 0x91, 0x5c, 0x76, 0x89, 0xd0, 0xdc, 0xf6, 0x3b, 0x2b, 0x22, - 0xf0, 0xa7, 0x60, 0x87, 0xd1, 0xd4, 0xb1, 0x39, 0xa5, 0x12, 0x5a, 0x86, 0xe5, 0x47, 0x9d, 0x0d, - 0x5a, 0x65, 0xae, 0x59, 0x52, 0x35, 0x58, 0x5a, 0xef, 0x87, 0xaf, 0xae, 0xbd, 0x0d, 0xd4, 0x63, - 0x07, 0xef, 0xa5, 0x93, 0x7c, 0x1f, 0x6d, 0xb6, 0xdb, 0xf0, 0xa5, 0x5a, 0x2c, 0xae, 0xbd, 0xd4, - 0xfb, 0x24, 0x37, 0x60, 0xee, 0x57, 0x76, 0x92, 0xae, 0x19, 0xe2, 0x15, 0xb8, 0xf8, 0x7e, 0x1b, - 0x52, 0xb9, 0x88, 0x34, 0x71, 0xcf, 0x46, 0x38, 0x48, 0x67, 0x60, 0x8c, 0x57, 0x13, 0x28, 0xec, - 0xb6, 0xaa, 0xff, 0x0a, 0x6e, 0xa3, 0x12, 0xe1, 0xd3, 0x42, 0x7d, 0x23, 0xa5, 0x56, 0x77, 0x24, - 0xfa, 0x5b, 0x1f, 0x0e, 0x9b, 0x4a, 0xe7, 0x60, 0x74, 0x61, 0x5d, 0x52, 0xb0, 0xde, 0xc1, 0x18, - 0xcf, 0x86, 0x08, 0xd6, 0xc8, 0xe9, 0xb3, 0x06, 0x6d, 0x3c, 0x6f, 0x44, 0x55, 0x35, 0x8c, 0x45, - 0x87, 0x30, 0x46, 0x28, 0xed, 0x8e, 0x55, 0xb3, 0x56, 0x7b, 0x09, 0x7f, 0xb9, 0x3d, 0xcf, 0x82, - 0xb3, 0x90, 0x86, 0x75, 0x62, 0x09, 0xc7, 0x06, 0x26, 0xa3, 0x2c, 0xac, 0x77, 0x89, 0x8c, 0x12, - 0xb9, 0x77, 0x0a, 0x07, 0xf5, 0xb4, 0x11, 0x84, 0x17, 0x3c, 0xf7, 0x03, 0x01, 0x9c, 0xe3, 0x04, - 0xda, 0x8e, 0x9a, 0x91, 0xac, 0x56, 0x4c, 0x9a, 0x3f, 0x0a, 0x11, 0x84, 0x15, 0x2f, 0x14, 0xf1, - 0x8d, 0x8d, 0x9e, 0x16, 0xa7, 0x95, 0x22, 0x51, 0xb6, 0x1d, 0xf0, 0x7d, 0xc8, 0x3e, 0x4b, 0xe3, - 0x75, 0x19, 0x55, 0xf4, 0x75, 0xad, 0x13, 0x25, 0xa2, 0x6d, 0x0e, 0x3b, 0x5d, 0xdd, 0xff, 0xc6, - 0xd0, 0x86, 0xd0, 0x89, 0x57, 0x3b, 0x1e, 0x4a, 0x1f, 0xf5, 0xd0, 0x4b, 0xa3, 0xd0, 0xe8, 0x7b, - 0x21, 0xc6, 0x29, 0x99, 0x07, 0x6d, 0xdd, 0xff, 0xc2, 0x86, 0x94, 0x52, 0x93, 0x6c, 0x5c, 0x66, - 0x1b, 0xf4, 0xf0, 0x54, 0xf9, 0xab, 0xac, 0xd7, 0x3f, 0xa6, 0x98, 0xed, 0xf1, 0x9d, 0xa2, 0x11, - 0xa3, 0xb1, 0x94, 0x02, 0x56, 0x2e, 0x9b, 0x55, 0x2d, 0x26, 0x82, 0x66, 0xe5, 0x4f, 0x1b, 0xf8, - 0xd3, 0xbc, 0x54, 0x68, 0xc4, 0x5d, 0x32, 0xb3, 0xe3, 0x6b, 0x01, 0x94, 0x85, 0x74, 0x0d, 0xbe, - 0x9a, 0xa6, 0x9f, 0x8c, 0xbd, 0x9d, 0x8c, 0x8b, 0xe4, 0x51, 0x18, 0x91, 0x46, 0x67, 0x7b, 0xb6, - 0xbb, 0x53, 0xf8, 0xcd, 0x9f, 0x50, 0xe8, 0xdc, 0xca, 0x69, 0xb2, 0x74, 0x92, 0xd9, 0xb2, 0x1e, - 0x69, 0xfc, 0x21, 0x51, 0x4f, 0xda, 0x93, 0x07, 0x17, 0x8b, 0xe1, 0x09, 0x63, 0x75, 0x26, 0xe6, - 0xe5, 0xd4, 0xd3, 0xc9, 0xbe, 0x10, 0xbd, 0x4d, 0x55, 0x59, 0x99, 0x30, 0x2b, 0x6c, 0x17, 0x2f, - 0xf1, 0x9e, 0x46, 0xa6, 0x14, 0xb1, 0x97, 0x61, 0x67, 0x08, 0xa9, 0x73, 0x9e, 0x5b, 0x12, 0xf2, - 0x75, 0x97, 0x8a, 0xa1, 0x94, 0x02, 0x3a, 0x78, 0x71, 0x1b, 0xa0, 0xec, 0xfc, 0x66, 0x85, 0x6f, - 0xac, 0x6e, 0x6f, 0x95, 0xb5, 0xbb, 0x0c, 0xe4, 0xcf, 0x8f, 0x31, 0x4f, 0xe7, 0x8c, 0x3e, 0x33, - 0x40, 0xa7, 0x97, 0x18, 0xb0, 0xe4, 0x66, 0x44, 0xf2, 0xfc, 0xc9, 0xc2, 0x71, 0xe7, 0xab, 0x34, - 0x25, 0x17, 0x79, 0xe3, 0x4a, 0x48, 0x9d, 0x4a, 0x56, 0xf7, 0x04, 0x3c, 0x0c, 0x09, 0xab, 0x05, - 0xee, 0x78, 0x40, 0x1b, 0x30, 0xce, 0xd4, 0x8c, 0xb4, 0xb8, 0x1c, 0xc7, 0x96, 0xda, 0xb9, 0x3e, - 0x70, 0x34, 0x28, 0x32, 0x2f, 0xf7, 0x57, 0xf8, 0xea, 0xad, 0xc0, 0x1f, 0x50, 0x49, 0xf5, 0xd6, - 0xa1, 0x5c, 0xff, 0xdc, 0x12, 0xb3, 0x26, 0x12, 0xdb, 0x63, 0x73, 0x3e, 0x37, 0x13, 0x6d, 0x73, - 0x35, 0x86, 0x41, 0xa5, 0xc8, 0x2b, 0x37, 0x2e, 0xd7, 0x75, 0x77, 0x48, 0xcf, 0xb7, 0xf7, 0x03, - 0x47, 0x04, 0xa7, 0x22, 0x7f, 0x6f, 0xdb, 0x74, 0xd7, 0xc5, 0xb1, 0x6f, 0xf1, 0x95, 0xe5, 0xbb, - 0x07, 0x75, 0x18, 0x57, 0xce, 0xa6, 0x90, 0xb5, 0xc4, 0x8e, 0x28, 0x09, 0xe4, 0x5d, 0xad, 0x17, - 0x5c, 0x3a, 0xdf, 0x44, 0x4d, 0x7c, 0xf3, 0x77, 0xe3, 0x34, 0x35, 0xc5, 0x91, 0xc2, 0xea, 0xe0, - 0x4a, 0xa6, 0x7c, 0x6e, 0x36, 0x87, 0x06, 0x34, 0xf2, 0x66, 0x84, 0xd8, 0x37, 0xdb, 0x50, 0x40, - 0x1e, 0x80, 0xe0, 0x0f, 0xc6, 0x6a, 0xab, 0xc3, 0x41, 0x18, 0x9b, 0x6c, 0x84, 0x5a, 0xda, 0x76, - 0x75, 0xb7, 0xe3, 0x24, 0xdd, 0xb6, 0x05, 0x13, 0x35, 0xb0, 0xa2, 0x5c, 0xd8, 0x90, 0xeb, 0xc9, - 0xa7, 0xa5, 0x64, 0x9d, 0xae, 0xdf, 0xc6, 0xd2, 0x62, 0x10, 0xb4, 0xdd, 0x6c, 0x53, 0x9c, 0xb9, - 0x3b, 0xb2, 0x36, 0x11, 0x9b, 0x72, 0x60, 0xe6, 0x4a, 0x32, 0x54, 0xd6, 0xbf, 0xe3, 0x23, 0xf9, - 0xd1, 0x54, 0x95, 0xb4, 0x9b, 0xee, 0x90, 0x4e, 0xdb, 0xac, 0x6c, 0x2f, 0xb6, 0x8c, 0x97, 0x84, - 0xf3, 0xf9, 0xf9, 0x10, 0x0e, 0xa1, 0x63, 0xf1, 0x13, 0xe6, 0x7c, 0xc0, 0x63, 0x4c, 0x4c, 0x42, - 0xb5, 0x8f, 0x8d, 0x19, 0x95, 0x2d, 0xee, 0x85, 0x4a, 0x60, 0xc0, 0xbb, 0x79, 0xbd, 0x1d, 0xb5, - 0x46, 0x1f, 0x44, 0xf6, 0x09, 0x69, 0x5f, 0xfe, 0x1b, 0xb0, 0x23, 0x30, 0x43, 0x3c, 0x6b, 0xd4, - 0xda, 0xd2, 0x77, 0x4c, 0xb4, 0xbf, 0x1a, 0x73, 0x94, 0x63, 0xa7, 0x20, 0xb6, 0xaf, 0x83, 0xdb, - 0x87, 0x5c, 0xcc, 0xc5, 0x9d, 0xdd, 0x54, 0x7e, 0xf1, 0x58, 0xcb, 0x71, 0xbe, 0x24, 0xf4, 0xd3, - 0x4d, 0x3f, 0x04, 0x1b, 0x18, 0x75, 0x46, 0xa3, 0x63, 0x23, 0x93, 0x8f, 0x5e, 0xb2, 0x54, 0x2a, - 0x2b, 0x50, 0x39, 0x61, 0x75, 0x64, 0x96, 0xe6, 0x8a, 0x34, 0xd3, 0x4d, 0x3f, 0x04, 0x11, 0xbb, - 0xef, 0x6e, 0x5a, 0xe7, 0x20, 0xa1, 0xa9, 0xba, 0xc6, 0xaf, 0x4f, 0xc2, 0xf8, 0x2f, 0x8c, 0xa4, - 0xe8, 0x7f, 0x82, 0xab, 0xa2, 0xe3, 0x99, 0x3d, 0xa5, 0x19, 0x1c, 0x77, 0xae, 0x1d, 0x17, 0xa2, - 0x33, 0x7c, 0x6c, 0xac, 0x0f, 0xd1, 0xac, 0x2e, 0xad, 0x45, 0x8a, 0x68, 0x95, 0xca, 0x35, 0xc9, - 0x82, 0x2f, 0xf7, 0xf9, 0x47, 0x73, 0xa3, 0x74, 0x9c, 0x19, 0x57, 0x07, 0x78, 0x8e, 0x8f, 0xef, - 0xff, 0x0e, 0xde, 0xcb, 0xaf, 0x2b, 0x2f, 0x24, 0xd7, 0xbe, 0x88, 0xd6, 0x61, 0x32, 0x13, 0x1c, - 0xb2, 0xe4, 0x79, 0x5f, 0x2b, 0xd1, 0x7f, 0x8d, 0xb4, 0xa2, 0xab, 0x68, 0x34, 0x15, 0x54, 0xf7, - 0xbc, 0x65, 0x31, 0xcc, 0x90, 0x71, 0xb0, 0x81, 0x98, 0x1a, 0xf4, 0xc2, 0x9a, 0xa0, 0x27, 0x46, - 0x9b, 0xe9, 0x74, 0xff, 0xc6, 0xcc, 0xc2, 0x1a, 0x71, 0x46, 0xd7, 0xac, 0xf2, 0xcf, 0x79, 0x46, - 0xe0, 0xe1, 0x18, 0xa6, 0x33, 0x91, 0x6c, 0x76, 0x27, 0x58, 0xb6, 0x2d, 0xff, 0x88, 0x2d, 0x5a, - 0x8c, 0xbd, 0x5a, 0xa3, 0x4b, 0xc1, 0x59, 0x2b, 0x4e, 0xc7, 0xc6, 0x13, 0x4c, 0xc9, 0x59, 0x96, - 0xb0, 0x8f, 0x7c, 0x6d, 0xa5, 0x37, 0x11, 0x76, 0x89, 0x0f, 0x98, 0x9a, 0x1a, 0x9b, 0x90, 0xf0, - 0x0d, 0xce, 0x92, 0x61, 0x71, 0x6d, 0xb6, 0xdb, 0x6f, 0xc2, 0x96, 0x39, 0xb5, 0xa4, 0xa3, 0x5b, - 0xcb, 0xe7, 0x43, 0xd0, 0xe4, 0x78, 0x08, 0x80, 0x7f, 0x1b, 0x34, 0x38, 0xd0, 0x93, 0xf7, 0x48, - 0x30, 0xab, 0x31, 0x0a, 0xd4, 0xe8, 0xec, 0x51, 0x8a, 0xa6, 0x83, 0x2b, 0xff, 0x1b, 0x82, 0xda, - 0x74, 0x36, 0x92, 0x57, 0xb8, 0xc2, 0xb3, 0x3b, 0x99, 0x1b, 0x56, 0xdd, 0x3c, 0x97, 0xfe, 0x11, - 0x93, 0x0f, 0x8c, 0x70, 0x73, 0xb1, 0x3b, 0x0e, 0xc8, 0x2a, 0xbe, 0x0a, 0xad, 0x6d, 0xd4, 0xd3, - 0x39, 0x48, 0x63, 0xac, 0x6f, 0xcd, 0xa7, 0x3a, 0x7c, 0x6e, 0x17, 0x3e, 0x16, 0x83, 0xc3, 0xa3, - 0x06, 0xc7, 0x91, 0xcb, 0x9b, 0x10, 0xbb, 0xd0, 0xc0, 0xcf, 0x2c, 0xd4, 0x91, 0x3c, 0x06, 0x71, - 0x4b, 0xfc, 0x10, 0x5d, 0x19, 0x97, 0x07, 0xee, 0xbf, 0x3a, 0x4d, 0x50, 0x93, 0x48, 0x32, 0xf2, - 0x28, 0xeb, 0x52, 0x4f, 0xff, 0x1b, 0x71, 0xa4, 0x48, 0x7b, 0xe8, 0x7a, 0x37, 0x3b, 0x31, 0xab, - 0xcf, 0x61, 0x23, 0xfb, 0xae, 0xc9, 0x62, 0x58, 0x83, 0xf8, 0xb6, 0x3f, 0xe1, 0x4b, 0xfd, 0x77, - 0x9d, 0xe8, 0xa7, 0xec, 0x91, 0xa3, 0x66, 0xe8, 0xe9, 0xf0, 0x57, 0x87, 0x96, 0x51, 0x99, 0xdf, - 0xca, 0xc3, 0x75, 0x88, 0x93, 0x4e, 0x8e, 0x28, 0x4f, 0x87, 0x84, 0x31, 0xa6, 0x9b, 0xdc, 0xb8, - 0x8e, 0x4f, 0x5a, 0x24, 0x11, 0x18, 0xf2, 0xcc, 0xc8, 0xe3, 0xb0, 0x71, 0x58, 0xaf, 0xe3, 0x65, - 0xd3, 0x30, 0xbb, 0x95, 0x46, 0x97, 0x8c, 0x5c, 0x53, 0x9d, 0x1b, 0x76, 0x0f, 0x77, 0xb3, 0x17, - 0x89, 0x93, 0x57, 0x85, 0x44, 0x55, 0x1f, 0xf0, 0xf7, 0x4d, 0x6f, 0x42, 0x49, 0xa6, 0x4c, 0x64, - 0xf2, 0x74, 0xef, 0x6e, 0xaa, 0xab, 0xe1, 0x42, 0x93, 0x3f, 0x0e, 0x90, 0xc1, 0xb0, 0xcb, 0x3e, - 0x5d, 0x5a, 0x0d, 0x0a, 0xa2, 0x7d, 0x54, 0x57, 0xfe, 0x16, 0x2d, 0x1b, 0x18, 0x89, 0x94, 0x60, - 0xa5, 0x58, 0xcc, 0xa0, 0x7f, 0x2f, 0xbb, 0xbb, 0xf8, 0xf2, 0xc6, 0x7b, 0x2b, 0x35, 0x73, 0x5c, - 0x30, 0x60, 0x93, 0x2c, 0x19, 0x30, 0xf7, 0x12, 0x14, 0x26, 0x66, 0xb1, 0xd5, 0x52, 0x48, 0xd5, - 0x65, 0x4c, 0xbb, 0xce, 0xb1, 0x22, 0x2c, 0x4b, 0x3e, 0x0b, 0x0a, 0xf2, 0x19, 0x68, 0xa1, 0x13, - 0x71, 0xaa, 0xd5, 0x21, 0x36, 0x2b, 0xa6, 0xdd, 0x13, 0xd4, 0x34, 0xbc, 0x7c, 0x16, 0x4d, 0x7a, - 0x12, 0x44, 0xeb, 0xa4, 0x72, 0x0d, 0xbc, 0xdf, 0x2f, 0x82, 0xb1, 0x05, 0xc3, 0x52, 0x70, 0x32, - 0x87, 0x1f, 0x83, 0x6a, 0xe3, 0x8b, 0x50, 0x70, 0x53, 0xca, 0xdf, 0x1f, 0xbe, 0x11, 0x83, 0xef, - 0x93, 0xba, 0x41, 0x4a, 0x8c, 0x71, 0xda, 0x28, 0xb9, 0x1e, 0x5c, 0xc4, 0xc6, 0x4c, 0xa2, 0x64, - 0x90, 0x8d, 0x24, 0x35, 0x63, 0x2e, 0x70, 0x8c, 0x3b, 0xc4, 0x7f, 0x0e, 0xe7, 0x72, 0x0f, 0xff, - 0x82, 0xa2, 0x9f, 0x00, 0xef, 0x56, 0x5b, 0xb0, 0xf6, 0xe7, 0x10, 0x28, 0xea, 0xa1, 0x99, 0x88, - 0x34, 0x74, 0xf8, 0x46, 0xdd, 0xb6, 0xc9, 0x8e, 0xfb, 0x79, 0x26, 0x6c, 0xde, 0x43, 0xf8, 0xcb, - 0x4e, 0xc2, 0xfd, 0x9f, 0x56, 0x36, 0x48, 0x5b, 0x3e, 0xaa, 0xd4, 0x7e, 0x20, 0xbb, 0x43, 0xcd, - 0x31, 0xf2, 0xef, 0x85, 0xe3, 0x0d, 0x65, 0xa5, 0x8d, 0xab, 0xa8, 0x6a, 0x91, 0x62, 0xdd, 0x81, - 0xc1, 0x9d, 0x50, 0x28, 0x2c, 0xad, 0xce, 0xd1, 0x4c, 0xc4, 0x4c, 0xc4, 0xc1, 0x61, 0x47, 0x25, - 0xd0, 0x1c, 0x87, 0x33, 0x81, 0x85, 0x72, 0x1c, 0x39, 0xa7, 0x81, 0x5f, 0xd5, 0x23, 0x46, 0xd7, - 0x8e, 0xb4, 0xf7, 0x36, 0x14, 0xdb, 0x46, 0x77, 0xba, 0x31, 0x16, 0xbc, 0x8a, 0xba, 0x96, 0x55, - 0xe3, 0x28, 0x22, 0x52, 0xed, 0x41, 0x5e, 0x63, 0x21, 0xc8, 0x47, 0x68, 0x1d, 0x19, 0x98, 0x64, - 0x6e, 0xcd, 0x48, 0x1c, 0x0f, 0x89, 0x19, 0x00, 0x5b, 0xcd, 0xde, 0x9b, 0x8b, 0x54, 0x62, 0xcf, - 0x5e, 0x0f, 0x8e, 0x9b, 0x0b, 0x82, 0xf2, 0xec, 0xc4, 0x4d, 0xdc, 0xe3, 0x55, 0x3f, 0x18, 0xa5, - 0x58, 0x80, 0xaf, 0x8c, 0xb4, 0x8a, 0xaf, 0x08, 0x15, 0x7d, 0x6b, 0x1d, 0x0e, 0x35, 0x4b, 0x1d, - 0xce, 0x16, 0xc5, 0xc3, 0x0d, 0xb9, 0x80, 0x53, 0xcf, 0x13, 0xe3, 0x2f, 0x75, 0x29, 0x97, 0x5a, - 0x99, 0x36, 0x3a, 0x51, 0x68, 0xcb, 0x82, 0xc1, 0xa3, 0x40, 0x5b, 0x92, 0x35, 0xf8, 0x2b, 0xa8, - 0xc4, 0x74, 0x1e, 0x15, 0xe5, 0xc7, 0x23, 0x06, 0xb2, 0x35, 0xe1, 0x83, 0x26, 0x8c, 0x1d, 0x87, - 0x80, 0xd9, 0xf1, 0x97, 0xaa, 0x84, 0x78, 0x44, 0x62, 0x8c, 0x59, 0x44, 0x8b, 0x1d, 0xb1, 0xa5, - 0x39, 0x37, 0x22, 0x52, 0x5b, 0xbd, 0x74, 0xde, 0x79, 0x16, 0x47, 0xc6, 0x5c, 0xa7, 0x9c, 0x08, - 0x2e, 0xc2, 0x4a, 0x07, 0x62, 0xac, 0x2e, 0xa6, 0xd2, 0x24, 0xd6, 0x40, 0xe5, 0xdd, 0x7b, 0x6f, - 0x84, 0x4a, 0xc3, 0x23, 0x22, 0x6c, 0x42, 0x92, 0x8a, 0x4d, 0xed, 0xa4, 0x18, 0xc7, 0xbf, 0xc2, - 0x04, 0x3c, 0xe2, 0xcb, 0x05, 0xb3, 0x8d, 0x67, 0x63, 0x26, 0xa4, 0xfd, 0x6e, 0x78, 0xc8, 0x3f, - 0x85, 0xef, 0x16, 0x54, 0xb4, 0x0c, 0xb8, 0xc2, 0x2c, 0xc7, 0x35, 0x6c, 0x6b, 0xa2, 0xc5, 0x4c, - 0x54, 0xeb, 0x52, 0x85, 0xe3, 0x4c, 0x7c, 0x15, 0xf2, 0xb1, 0xb6, 0x7b, 0x66, 0x33, 0xea, 0xb7, - 0x4b, 0x69, 0x55, 0x55, 0x57, 0xfc, 0x20, 0x2c, 0xdc, 0xde, 0xba, 0xf2, 0xdb, 0x58, 0xc4, 0xa8, - 0xbc, 0x61, 0x32, 0x51, 0xa0, 0xd6, 0x24, 0xa5, 0x0d, 0x36, 0x25, 0xa8, 0x09, 0x80, 0xa4, 0x0e, - 0x8d, 0xb7, 0xc5, 0x17, 0xf1, 0xa3, 0x29, 0x8e, 0x8c, 0x47, 0x21, 0x5d, 0x5e, 0x79, 0x35, 0xf5, - 0xd5, 0x03, 0x95, 0x4e, 0xcc, 0x20, 0xff, 0x4f, 0x61, 0x7e, 0x59, 0xf3, 0x4f, 0xc1, 0x58, 0x9e, - 0x48, 0x48, 0xc4, 0x31, 0xc4, 0x93, 0x1b, 0x5c, 0x7d, 0x23, 0xc1, 0xf0, 0xec, 0xfa, 0xf6, 0xf4, - 0x49, 0x56, 0xbc, 0xd2, 0x80, 0x1a, 0x65, 0x26, 0x1d, 0x6e, 0x4d, 0x7a, 0xb2, 0x2f, 0x93, 0xaa, - 0xd7, 0xc6, 0x91, 0x22, 0x9a, 0xee, 0x8f, 0xa9, 0xea, 0x10, 0xbb, 0x95, 0xa4, 0xfe, 0xce, 0xb0, - 0x72, 0xd7, 0x14, 0x69, 0x32, 0x14, 0x9d, 0x0f, 0xf1, 0xb6, 0x9a, 0x83, 0x4a, 0x18, 0x54, 0xf3, - 0xb0, 0xc7, 0x34, 0x53, 0xbd, 0x00, 0x1f, 0x55, 0x55, 0xf1, 0x85, 0x6b, 0xf9, 0xb5, 0xe8, 0x35, - 0x37, 0x68, 0x19, 0xaa, 0xea, 0xc7, 0x1e, 0x39, 0x32, 0xff, 0x86, 0xa6, 0xea, 0x4c, 0x85, 0x91, - 0xdf, 0xa6, 0x9a, 0x69, 0xf8, 0x7c, 0x8e, 0x63, 0xce, 0xc2, 0xc8, 0xda, 0x13, 0x75, 0x0d, 0x26, - 0xb0, 0xf8, 0xc7, 0x7d, 0x32, 0xf4, 0xdb, 0xfc, 0x6c, 0x70, 0x63, 0x59, 0x7f, 0x59, 0x88, 0x92, - 0x80, 0xd0, 0x36, 0xbd, 0x27, 0x7c, 0x80, 0x93, 0xc4, 0x3b, 0x22, 0xe9, 0x69, 0xa7, 0x1a, 0x7e, - 0x36, 0xc1, 0x9d, 0x66, 0x71, 0x84, 0x8d, 0x5a, 0x7c, 0x6e, 0x93, 0x3b, 0x96, 0x83, 0xd0, 0xfc, - 0x47, 0x43, 0xb1, 0x34, 0x51, 0x53, 0x45, 0xfe, 0x0b, 0x8a, 0xab, 0xc6, 0x41, 0xf4, 0x11, 0xa9, - 0xc8, 0x48, 0xa5, 0x54, 0x0b, 0x17, 0xc7, 0x6b, 0xf2, 0x62, 0x47, 0x89, 0x39, 0xb5, 0x41, 0x1b, - 0xd0, 0x6a, 0xfc, 0xac, 0xc9, 0xa4, 0x1f, 0x1b, 0x4c, 0xac, 0x40, 0xa2, 0x6b, 0x23, 0x69, 0xb2, - 0x32, 0x0a, 0x0c, 0xc9, 0xc1, 0x13, 0x82, 0xe0, 0x34, 0x07, 0x5d, 0x55, 0xff, 0xc1, 0x04, 0xfe, - 0x7f, 0x61, 0x9d, 0xe4, 0xf5, 0x22, 0xad, 0xb1, 0x4a, 0x25, 0x91, 0x87, 0x0f, 0x49, 0x06, 0xc1, - 0x90, 0x6c, 0x3f, 0xc7, 0x5e, 0x5d, 0x0e, 0x91, 0x98, 0x99, 0x8e, 0x73, 0xa7, 0xdf, 0x04, 0xf6, - 0x51, 0xb8, 0x05, 0x2d, 0x33, 0x2f, 0xcb, 0xe1, 0x49, 0xd5, 0x25, 0xd3, 0x21, 0x4d, 0x83, 0x6c, - 0xe4, 0xd8, 0x51, 0xec, 0xda, 0x03, 0x7c, 0x65, 0xcf, 0x69, 0x0d, 0x55, 0x5e, 0x0f, 0xac, 0x52, - 0xd1, 0x35, 0xa5, 0x75, 0x39, 0x53, 0x95, 0x45, 0x17, 0x87, 0x49, 0x46, 0xf4, 0xb7, 0xe8, 0x86, - 0xe7, 0x77, 0x18, 0x90, 0x5a, 0x71, 0x75, 0x7a, 0x66, 0x87, 0xf8, 0x7b, 0x5c, 0x64, 0x10, 0x5e, - 0xe0, 0x6b, 0xa6, 0x87, 0x6e, 0xd4, 0x8a, 0xc3, 0xd1, 0xb9, 0x68, 0x37, 0x2c, 0x8b, 0xd6, 0xd9, - 0x07, 0xc5, 0xb1, 0xff, 0x05, 0x93, 0x32, 0xd6, 0x0c, 0xcb, 0x58, 0x23, 0x26, 0x7e, 0xaf, 0x6f, - 0xe2, 0xf8, 0xd2, 0xdc, 0x26, 0xc9, 0x3d, 0x6d, 0xb6, 0xd3, 0xcc, 0xf0, 0x69, 0x2b, 0x1a, 0x25, - 0x92, 0x0f, 0x70, 0x8c, 0xa1, 0x51, 0xc1, 0x5e, 0x49, 0xda, 0x23, 0xf6, 0xd9, 0xaf, 0x77, 0xf0, - 0x5e, 0x29, 0x09, 0xcc, 0xb2, 0xd1, 0x30, 0xda, 0xab, 0x72, 0x81, 0xc2, 0x52, 0x7a, 0xea, 0x2f, - 0xf1, 0xa5, 0x09, 0xf2, 0x68, 0x12, 0x98, 0xbc, 0xe2, 0x63, 0x78, 0xa3, 0x7f, 0xfa, 0x1c, 0xb9, - 0xbf, 0xd5, 0x55, 0x7c, 0x14, 0xcf, 0x0b, 0x0f, 0xb6, 0x35, 0x5b, 0xe8, 0xe8, 0x37, 0x23, 0x65, - 0x66, 0xfc, 0x9f, 0x0e, 0x89, 0x18, 0x44, 0x8f, 0xed, 0x1f, 0x65, 0x4c, 0x67, 0x3e, 0xa8, 0x09, - 0xd6, 0xdb, 0x6d, 0xbf, 0xf0, 0xa0, 0xcd, 0x3d, 0xdb, 0xf1, 0x4b, 0x88, 0x3d, 0xc7, 0x93, 0xc9, - 0x15, 0x38, 0xa0, 0x50, 0x62, 0xbc, 0x7c, 0x40, 0xd4, 0x32, 0x90, 0x5b, 0x8d, 0x98, 0xf9, 0x41, - 0x57, 0xc4, 0x85, 0x2f, 0xdb, 0x40, 0x68, 0x36, 0xdb, 0x63, 0x8f, 0xc6, 0xfc, 0xf5, 0xb6, 0xd3, - 0xfc, 0x16, 0x4d, 0xae, 0xdb, 0x45, 0xae, 0xa4, 0x22, 0x63, 0x72, 0x84, 0xfc, 0xd7, 0xc2, 0x14, - 0x0d, 0x46, 0x0b, 0x24, 0x19, 0x22, 0x51, 0xf6, 0x4d, 0xfb, 0x1b, 0x19, 0xd2, 0x1f, 0xc2, 0x97, - 0x00, 0x01, 0x77, 0x2a, 0xf1, 0xe7, 0xbb, 0x48, 0x1b, 0xf0, 0x7f, 0x18, 0x78, 0x26, 0x87, 0xb6, - 0xd9, 0xd9, 0x20, 0x90, 0xf8, 0x77, 0x0e, 0x8c, 0xd1, 0x90, 0xf8, 0xc6, 0xda, 0xce, 0x74, 0xac, - 0xcf, 0x69, 0x7d, 0xb6, 0xdb, 0x6f, 0xc7, 0xcf, 0xe1, 0xd2, 0x09, 0x67, 0x2c, 0x2b, 0x5e, 0xd8, - 0xb8, 0xb8, 0xb8, 0xbf, 0x88, 0xa0, 0x71, 0x86, 0x32, 0x84, 0xd2, 0x11, 0xd7, 0xf0, 0x85, 0xaa, - 0xfc, 0x90, 0x6e, 0xb5, 0x3e, 0xd2, 0x93, 0x3c, 0x23, 0x31, 0xb7, 0x99, 0xaa, 0x1a, 0x03, 0x8d, - 0xe7, 0xed, 0xd5, 0xe3, 0x66, 0x21, 0x2c, 0x11, 0x29, 0x27, 0x6b, 0x7c, 0xe4, 0x34, 0x75, 0x0e, - 0xde, 0xe6, 0xdb, 0xa3, 0xfe, 0xdb, 0x6d, 0xb7, 0xe2, 0xa1, 0xa4, 0xae, 0x6f, 0x7d, 0xc0, 0xc2, - 0x7e, 0x18, 0x26, 0xad, 0x3f, 0x19, 0xd8, 0xc6, 0x1a, 0x20, 0x26, 0x35, 0x50, 0xe2, 0xa1, 0x36, - 0x6d, 0xc6, 0xab, 0x86, 0xea, 0xed, 0x10, 0x83, 0xf8, 0xeb, 0x92, 0xd6, 0xb5, 0xc0, 0xf2, 0x08, - 0x2e, 0xcf, 0xa4, 0xea, 0xca, 0x0b, 0x1e, 0x13, 0x44, 0x08, 0xd1, 0xc3, 0xf1, 0x95, 0xe1, 0x45, - 0xa4, 0x75, 0x5f, 0x5d, 0x0a, 0x06, 0x74, 0x6c, 0x47, 0x43, 0x54, 0x9d, 0x26, 0xbe, 0x12, 0xc3, - 0x6f, 0x8c, 0xab, 0x36, 0x7c, 0xfa, 0xf6, 0xc7, 0x8c, 0xa8, 0xa8, 0xc6, 0xa7, 0x31, 0xed, 0x78, - 0xc2, 0xa0, 0x96, 0xa9, 0xc7, 0xb7, 0x53, 0x05, 0x00, 0xea, 0x2d, 0x2c, 0x33, 0x77, 0xad, 0xc8, - 0xce, 0x52, 0x92, 0xba, 0x8d, 0x6c, 0x24, 0x8c, 0x9f, 0x65, 0xa0, 0x25, 0x69, 0x82, 0xbf, 0xc7, - 0x46, 0x3c, 0xa3, 0xde, 0x67, 0xc5, 0x77, 0xd1, 0xbd, 0x1a, 0x48, 0x4f, 0xc1, 0x16, 0xb5, 0x45, - 0xe3, 0x08, 0xb9, 0x12, 0x9e, 0x84, 0x34, 0xe8, 0x19, 0x8e, 0x48, 0x45, 0xa4, 0x15, 0xd8, 0xe3, - 0x49, 0x3f, 0x19, 0x5c, 0x73, 0xb8, 0xb0, 0x45, 0xc0, 0x2a, 0x27, 0x42, 0xff, 0xa7, 0xdb, 0xba, - 0x33, 0x1b, 0x8c, 0xb5, 0x4a, 0x5f, 0xc5, 0x64, 0x37, 0x9e, 0xe8, 0x82, 0xd9, 0x53, 0x75, 0xb6, - 0xdf, 0x84, 0x6c, 0x0e, 0x62, 0x26, 0x26, 0xc1, 0x9c, 0x91, 0x33, 0xd9, 0xc3, 0xec, 0x71, 0xe1, - 0x42, 0x13, 0x6d, 0xc0, 0x03, 0x09, 0xf4, 0x8b, 0x3c, 0x12, 0x2a, 0x2a, 0x39, 0xe8, 0x1a, 0xbb, - 0x08, 0x27, 0xb8, 0xa1, 0xb3, 0x26, 0x59, 0xef, 0x84, 0x2e, 0x92, 0xff, 0x40, 0xf4, 0x3b, 0x89, - 0x62, 0x82, 0xf4, 0x47, 0x61, 0x0d, 0x6b, 0x67, 0x8d, 0x25, 0x36, 0xcd, 0x8d, 0xe8, 0x9b, 0x8e, - 0x94, 0x48, 0x91, 0x4f, 0xea, 0xaa, 0xab, 0xfe, 0x0b, 0x0e, 0xfa, 0x3e, 0x87, 0xa3, 0xe8, 0xc1, - 0x8f, 0xce, 0x9c, 0xfb, 0xc8, 0x5a, 0x86, 0xf6, 0x60, 0x2c, 0xe3, 0xe3, 0x2b, 0xd8, 0xaa, 0xd2, - 0x7a, 0xc9, 0xd9, 0xec, 0xa9, 0x33, 0x9a, 0x9f, 0x8d, 0x23, 0x35, 0xb7, 0xd9, 0x78, 0x29, 0x43, - 0x63, 0x9c, 0x36, 0x9b, 0x55, 0x83, 0x5b, 0x53, 0xb1, 0x89, 0x1c, 0x19, 0x69, 0x07, 0xe2, 0x95, - 0x31, 0xc3, 0xc1, 0x7a, 0x57, 0xf8, 0xdd, 0x49, 0x39, 0x96, 0x40, 0x90, 0xf5, 0xc5, 0x75, 0x37, - 0x9c, 0xdd, 0xcc, 0x31, 0xb1, 0xb1, 0x90, 0xa3, 0x3a, 0x26, 0x8e, 0x9f, 0xfe, 0x34, 0xad, 0x21, - 0x82, 0xa6, 0x67, 0x9e, 0x2c, 0x0c, 0x70, 0xdb, 0x76, 0x66, 0x3a, 0xfb, 0x5a, 0xb4, 0xaa, 0x0a, - 0xaa, 0x09, 0x01, 0x93, 0x98, 0x9f, 0x8b, 0x28, 0x4d, 0xb6, 0xdb, 0x7e, 0x14, 0xb6, 0x4f, 0x8a, - 0x14, 0x09, 0xfa, 0xd9, 0x55, 0x44, 0xc5, 0x10, 0x98, 0x43, 0x8d, 0x8c, 0x38, 0x4c, 0xd8, 0x0c, - 0x82, 0xf8, 0x2a, 0xa4, 0x56, 0xd4, 0xe6, 0xc0, 0x57, 0x86, 0x5f, 0x8e, 0xcc, 0x1a, 0x46, 0x54, - 0x94, 0x11, 0xd3, 0xe0, 0x83, 0x24, 0xdb, 0xad, 0x91, 0x09, 0xa1, 0xed, 0x59, 0x5e, 0xa5, 0x29, - 0x4a, 0xaa, 0xaa, 0xbf, 0xe1, 0xd8, 0xd4, 0x7b, 0x26, 0xd5, 0x9d, 0xc7, 0xd0, 0x32, 0x7d, 0xf5, - 0xd8, 0xb3, 0x2a, 0xaa, 0xaa, 0xff, 0x85, 0x39, 0x89, 0x1d, 0x6b, 0x5e, 0xdb, 0xd0, 0x68, 0x8d, - 0x5a, 0x89, 0x57, 0x30, 0xc4, 0x55, 0xd6, 0xe4, 0xa7, 0x3a, 0xf8, 0x77, 0x25, 0x94, 0xf5, 0x32, - 0x59, 0x2d, 0x73, 0x42, 0xe6, 0x86, 0x28, 0xe3, 0xab, 0xb5, 0xda, 0x9c, 0x7f, 0xe3, 0x6c, 0x4c, - 0x89, 0x55, 0xc2, 0xa0, 0xd4, 0xce, 0xa0, 0x74, 0xb6, 0x32, 0xc5, 0xb5, 0x34, 0x94, 0x64, 0xe9, - 0x28, 0xc9, 0x49, 0x9d, 0x5f, 0xf1, 0xb5, 0x9c, 0xbb, 0x5a, 0xd5, 0x66, 0xc7, 0x92, 0x45, 0x4e, - 0x7b, 0x2a, 0x4a, 0x8b, 0x98, 0xd6, 0xa6, 0x5a, 0xfa, 0x5a, 0x38, 0x80, 0xb3, 0xd2, 0x6a, 0x7f, - 0xc1, 0x24, 0x79, 0x29, 0xce, 0xf0, 0x7c, 0x10, 0x46, 0x62, 0x5c, 0x9c, 0x07, 0x52, 0x13, 0x64, - 0x54, 0xcf, 0x0e, 0x69, 0xe9, 0x21, 0x9a, 0x8a, 0xd0, 0xee, 0x48, 0x4c, 0xf4, 0xd3, 0x4d, 0x3f, - 0x0a, 0x61, 0xd0, 0xc8, 0xcb, 0x15, 0x3b, 0xf4, 0xd2, 0xdb, 0xbc, 0xcf, 0x95, 0x83, 0xda, 0x0f, - 0xc5, 0xf0, 0x41, 0x8f, 0x61, 0x2a, 0xd0, 0xcc, 0x8d, 0x93, 0x61, 0x48, 0xa1, 0x8b, 0x99, 0xc7, - 0x69, 0xe6, 0x31, 0xa0, 0xf6, 0x90, 0xc9, 0x06, 0x55, 0xf0, 0xf6, 0x06, 0xc4, 0x12, 0x3f, 0xf5, - 0x4d, 0xf2, 0x1e, 0x5e, 0x0d, 0x2b, 0x11, 0x97, 0x51, 0xda, 0x00, 0xed, 0x00, 0xed, 0x64, 0x1d, - 0xac, 0xbf, 0xc6, 0xf6, 0x93, 0x1a, 0x71, 0x79, 0x43, 0xcb, 0x56, 0xa9, 0xc1, 0xb8, 0x43, 0x8d, - 0xdc, 0x4c, 0x81, 0xdd, 0x8e, 0xfe, 0xaa, 0xab, 0xe3, 0x34, 0xaa, 0x39, 0xb6, 0xc9, 0x8c, 0x92, - 0xc6, 0x6e, 0x4c, 0x88, 0xa7, 0xb4, 0x79, 0xc8, 0x57, 0xc6, 0x68, 0x8c, 0xcd, 0x4b, 0x8d, 0xc8, - 0x74, 0x94, 0x8f, 0x93, 0x49, 0xac, 0x7a, 0x3a, 0x7f, 0x0f, 0x51, 0xa5, 0x52, 0x9d, 0x82, 0x2e, - 0xd0, 0x1b, 0x11, 0x2c, 0xac, 0x2b, 0x15, 0xa0, 0x22, 0x97, 0xb7, 0x97, 0xb7, 0xff, 0x82, 0xbd, - 0x11, 0x4b, 0x2c, 0x6c, 0x62, 0xf1, 0xba, 0x8f, 0xa3, 0x8c, 0xc5, 0x6c, 0xab, 0xef, 0x85, 0xc5, - 0x3b, 0x55, 0xa4, 0xa0, 0xb4, 0x63, 0x71, 0xe5, 0x5a, 0x14, 0x5f, 0x8a, 0xdf, 0xe1, 0x42, 0xad, - 0x8f, 0x3b, 0x8a, 0xa4, 0x7d, 0xb3, 0x10, 0x98, 0xc6, 0xa5, 0x06, 0x3d, 0x29, 0xbd, 0xcc, 0x6e, - 0x21, 0xcc, 0x8d, 0x43, 0xc6, 0xc4, 0xd8, 0x59, 0x59, 0x4c, 0x42, 0x46, 0xbf, 0x3a, 0xa9, 0xda, - 0x3c, 0x19, 0xe2, 0x92, 0xa9, 0x8b, 0xe9, 0x93, 0xfe, 0x14, 0x2d, 0x6b, 0xb5, 0xa3, 0xe9, 0x9e, - 0x85, 0xc6, 0xf3, 0xbc, 0xaa, 0x3c, 0x07, 0x64, 0x20, 0xdb, 0x3e, 0x14, 0xec, 0xdf, 0x4a, 0x96, - 0x4d, 0x1a, 0x4d, 0x71, 0x6a, 0xb4, 0x87, 0x4d, 0xf0, 0xa0, 0xa4, 0xd7, 0x88, 0x34, 0x1a, 0x6b, - 0xa7, 0x66, 0x74, 0xd6, 0xf5, 0x45, 0xc4, 0x6e, 0xe1, 0x9f, 0xd3, 0x27, 0x3e, 0x30, 0x7c, 0x61, - 0xb9, 0xb8, 0x51, 0x25, 0xd8, 0xd3, 0x63, 0x44, 0xd2, 0x1f, 0xc2, 0x96, 0x22, 0xf5, 0xa4, 0xf5, - 0x4e, 0xc9, 0x76, 0x4b, 0x04, 0xba, 0x1b, 0xd2, 0x20, 0xcb, 0x86, 0x97, 0xe1, 0x4d, 0x59, 0x95, - 0x44, 0x6d, 0x5a, 0x64, 0x92, 0x8a, 0x60, 0x52, 0xe9, 0xf1, 0xdf, 0x1b, 0x29, 0xd8, 0xf0, 0x24, - 0x43, 0x4e, 0x55, 0xec, 0x65, 0x38, 0xe6, 0xc0, 0x71, 0xdc, 0xd9, 0xa3, 0x5f, 0x9b, 0xd7, 0xe0, - 0x82, 0x7d, 0x4b, 0x8c, 0x6a, 0x24, 0x9a, 0x69, 0x23, 0x7f, 0x4c, 0x79, 0x53, 0x4d, 0x34, 0xff, - 0xc3, 0xda, 0x82, 0xeb, 0x13, 0xf7, 0xec, 0x67, 0xa0, 0xed, 0xaf, 0xf3, 0x90, 0x5d, 0xe4, 0x11, - 0xe4, 0xe9, 0x34, 0xd3, 0x4f, 0xfc, 0x69, 0x0a, 0xc7, 0x19, 0xe4, 0x9f, 0x74, 0x1f, 0x97, 0x0f, - 0x7f, 0x3a, 0x3a, 0x16, 0xc5, 0xb4, 0xd3, 0x15, 0x62, 0xad, 0xb6, 0xfc, 0x29, 0x73, 0x7b, 0x4b, - 0xa3, 0x25, 0x26, 0xb7, 0x3b, 0x39, 0x10, 0xff, 0x84, 0x4a, 0xc4, 0xc4, 0xa3, 0x0f, 0x58, 0xd1, - 0x11, 0xac, 0xf6, 0x36, 0x93, 0x1b, 0x7e, 0x32, 0x3b, 0x33, 0x1c, 0x72, 0x32, 0xfd, 0x62, 0x6a, - 0x94, 0xc5, 0x5b, 0x13, 0x65, 0xc6, 0x6c, 0x4c, 0xdf, 0x1f, 0x8c, 0xac, 0xe9, 0xa5, 0x99, 0x64, - 0xb5, 0x7f, 0x0a, 0x58, 0x66, 0x16, 0x82, 0x6c, 0x0a, 0x43, 0x0b, 0x2f, 0x6d, 0xe7, 0x4e, 0xce, - 0x38, 0x9b, 0x01, 0x36, 0x29, 0x39, 0x08, 0xbf, 0x85, 0x28, 0x16, 0xf1, 0xa1, 0xec, 0xc7, 0x8f, - 0x2d, 0x93, 0x81, 0x03, 0xe9, 0x77, 0x77, 0xb3, 0x9c, 0xe1, 0x3b, 0x7b, 0x1f, 0x06, 0x05, 0x50, - 0xe9, 0x8f, 0xc5, 0x7a, 0x3c, 0xfa, 0x69, 0xa6, 0x9f, 0x84, 0x6d, 0x67, 0x2a, 0x9b, 0x06, 0x3f, - 0x99, 0x32, 0xac, 0xaa, 0x3f, 0x19, 0x32, 0xa6, 0xf7, 0x2a, 0xd2, 0x29, 0x74, 0x22, 0xae, 0x36, - 0x15, 0x1f, 0xd9, 0xb7, 0x3c, 0x8c, 0x8a, 0x1f, 0x90, 0x4f, 0x55, 0xe3, 0xf5, 0x22, 0xc7, 0xb0, - 0x91, 0x62, 0x13, 0xbd, 0x88, 0x77, 0x7d, 0x98, 0x83, 0x97, 0x98, 0x97, 0x84, 0xa9, 0x24, 0x81, - 0xcc, 0x54, 0x79, 0xb3, 0x71, 0x5f, 0x08, 0x52, 0x0c, 0x30, 0x91, 0x08, 0xb7, 0x0e, 0x10, 0x05, - 0x2a, 0x56, 0x82, 0x66, 0xb9, 0xc3, 0xd8, 0xea, 0x17, 0x84, 0x48, 0x49, 0x53, 0x54, 0x88, 0xab, - 0xc6, 0x99, 0x35, 0x9b, 0xe1, 0x1b, 0x0d, 0x33, 0xae, 0xd0, 0xc1, 0x17, 0x35, 0x0b, 0x32, 0x69, - 0x85, 0x9b, 0xe9, 0x7c, 0x67, 0x77, 0x4b, 0x9d, 0x76, 0x2b, 0xd2, 0x63, 0x3c, 0x6c, 0x7e, 0x15, - 0x36, 0x06, 0x34, 0x65, 0x01, 0xc1, 0x1f, 0x29, 0x8a, 0x13, 0x3f, 0x7f, 0xfc, 0x6e, 0x3d, 0xb5, - 0xad, 0xc8, 0xf1, 0xfa, 0xa9, 0x29, 0xcf, 0x93, 0xd0, 0xdd, 0x55, 0x55, 0xff, 0x19, 0x49, 0x86, - 0xc6, 0xd1, 0x5b, 0x8d, 0xde, 0x6b, 0xd6, 0x36, 0x43, 0xd8, 0xd9, 0x90, 0x7f, 0xc6, 0x09, 0x81, - 0xa8, 0xf4, 0x38, 0x0d, 0x84, 0x98, 0x49, 0x84, 0x8c, 0xb5, 0x4e, 0x42, 0x0d, 0x76, 0xb4, 0xfb, - 0xe1, 0xdc, 0x97, 0xc2, 0x84, 0x79, 0xc4, 0x68, 0xb3, 0x1c, 0x09, 0xcf, 0x91, 0xed, 0x37, 0x25, - 0x58, 0x3e, 0x88, 0xfa, 0x78, 0x71, 0x0b, 0x0c, 0x99, 0xd4, 0x41, 0xd1, 0x3f, 0xc7, 0xe1, 0x2c, - 0x1d, 0x5b, 0x67, 0x61, 0xb6, 0xf4, 0xd5, 0xb6, 0x8d, 0xb6, 0xbc, 0x18, 0x1a, 0x08, 0x3a, 0xb5, - 0x97, 0x32, 0x71, 0x44, 0x34, 0x4c, 0xfa, 0x36, 0x49, 0x80, 0xa8, 0x21, 0xc2, 0x7f, 0xf8, 0x2a, - 0x3b, 0xee, 0xb3, 0xb5, 0x8c, 0xa3, 0x53, 0xaf, 0xba, 0x3d, 0x36, 0x66, 0xda, 0x21, 0x78, 0x03, - 0xbe, 0x14, 0xbe, 0x87, 0x52, 0x52, 0x9d, 0x6d, 0x8e, 0x3b, 0x37, 0x60, 0x38, 0xca, 0x7e, 0xf9, - 0x7e, 0x73, 0xe3, 0x21, 0x23, 0x80, 0x13, 0xe0, 0xd8, 0x33, 0xac, 0xe5, 0x1a, 0x06, 0x86, 0x52, - 0x86, 0x29, 0x46, 0x3f, 0x4a, 0x36, 0xbf, 0xf0, 0x8d, 0x98, 0x6d, 0x4b, 0x1d, 0x7e, 0x70, 0x45, - 0x46, 0x75, 0x6d, 0xd3, 0x72, 0x29, 0x71, 0x3f, 0xc1, 0x57, 0x6a, 0xd4, 0x3a, 0xb8, 0xfb, 0xa6, - 0xfd, 0x2a, 0xf8, 0x60, 0x87, 0xe5, 0xef, 0xed, 0xec, 0x68, 0x76, 0x87, 0x73, 0x8a, 0xb1, 0x57, - 0xfe, 0x1d, 0x29, 0x09, 0x0d, 0xb2, 0x32, 0xab, 0x61, 0x22, 0x12, 0xf4, 0x48, 0x18, 0xfa, 0x17, - 0xd6, 0x14, 0x63, 0x05, 0xdf, 0xf8, 0x7b, 0x0e, 0xe8, 0x1d, 0x7a, 0xce, 0x44, 0x67, 0x32, 0x29, - 0xd5, 0x5d, 0xd5, 0x34, 0xdb, 0x6f, 0xc6, 0x93, 0x51, 0xd5, 0xb1, 0x97, 0x58, 0x67, 0x34, 0xa9, - 0x77, 0x2a, 0x19, 0xb8, 0x19, 0x7c, 0xa7, 0x5e, 0x7c, 0x47, 0x3d, 0x17, 0x8a, 0xb1, 0x56, 0xfe, - 0x36, 0x55, 0x03, 0x89, 0x8d, 0xbd, 0xd0, 0x44, 0xa9, 0x3d, 0x2b, 0x1e, 0x46, 0x89, 0xca, 0xc5, - 0x81, 0xbb, 0x42, 0x0c, 0x53, 0x56, 0xe9, 0x13, 0x49, 0xcb, 0xd9, 0xdb, 0xfc, 0x6e, 0xba, 0x4d, - 0x61, 0xcc, 0x06, 0x5e, 0xc2, 0x9a, 0xfc, 0x87, 0x9d, 0x81, 0xae, 0xe1, 0x1b, 0x49, 0x07, 0x55, - 0x64, 0xa2, 0xf1, 0xa7, 0x1a, 0x7e, 0x37, 0xa4, 0x52, 0x91, 0x9d, 0x83, 0x5a, 0x94, 0x0f, 0xf2, - 0x81, 0xc3, 0x64, 0xd8, 0x3f, 0x78, 0xa6, 0x75, 0x3e, 0x24, 0xdc, 0xff, 0x1a, 0x5a, 0xd7, 0x08, - 0x9b, 0xd9, 0x81, 0xb5, 0x6b, 0x52, 0xd1, 0x4b, 0xc6, 0x3d, 0x74, 0xa6, 0xf7, 0x6b, 0x1b, 0xfe, - 0xee, 0xef, 0xe3, 0x7e, 0x5a, 0x31, 0x2c, 0xae, 0x8b, 0x16, 0xdc, 0xb0, 0x57, 0xf6, 0xee, 0x3e, - 0xba, 0x28, 0xb4, 0x74, 0x21, 0xdf, 0xb9, 0x9f, 0xf0, 0xb7, 0x23, 0x25, 0x10, 0x1d, 0xe4, 0x13, - 0x77, 0x90, 0x5e, 0x41, 0x40, 0x69, 0x5e, 0x57, 0xb5, 0xed, 0x7f, 0xf8, 0x2b, 0xa6, 0x52, 0x90, - 0x97, 0xd5, 0xba, 0xc0, 0xd5, 0xc9, 0x99, 0x9b, 0x43, 0x62, 0x40, 0x5f, 0x85, 0xa3, 0xd7, 0x7a, - 0x33, 0x2e, 0x81, 0xab, 0x4f, 0x1d, 0xcd, 0x8a, 0x54, 0xaf, 0x23, 0xca, 0xf6, 0x3f, 0xfc, 0x6d, - 0x85, 0x0c, 0x39, 0x90, 0x1a, 0xd3, 0x6d, 0xb6, 0xa9, 0xea, 0x4d, 0x66, 0xb3, 0x59, 0xb8, 0x68, - 0x4d, 0xad, 0x09, 0xb5, 0xff, 0x0f, 0x62, 0x54, 0xa9, 0x33, 0x1e, 0x95, 0xcc, 0x2d, 0x4c, 0xed, - 0x26, 0xf2, 0x2e, 0xad, 0xb7, 0x59, 0xff, 0xf8, 0x74, 0x51, 0x74, 0xe0, 0xa9, 0x01, 0x01, 0x5e, - 0xc6, 0x85, 0xc3, 0x12, 0x0c, 0xe2, 0x48, 0xe7, 0x9c, 0xe0, 0xd4, 0x51, 0xf4, 0x57, 0x88, 0x73, - 0x7f, 0xf0, 0xf9, 0x4d, 0x36, 0x60, 0x7f, 0xce, 0x38, 0x85, 0xf9, 0x2c, 0x69, 0x3b, 0x0c, 0xcd, - 0x56, 0x9f, 0xd7, 0x7b, 0x75, 0x55, 0x5f, 0x1b, 0x62, 0x61, 0xf3, 0x2f, 0xc2, 0xa5, 0x2e, 0x77, - 0xaa, 0x33, 0x4d, 0x9f, 0xeb, 0xbb, 0xba, 0xaa, 0xaf, 0x86, 0x0f, 0x73, 0x36, 0x29, 0xa9, 0xc4, - 0x95, 0x55, 0xbb, 0xbf, 0xc1, 0x51, 0xac, 0x3e, 0xb6, 0xae, 0xbe, 0x0e, 0x12, 0x57, 0x72, 0x55, - 0x12, 0x93, 0x5c, 0x26, 0x83, 0x37, 0xc1, 0x64, 0x60, 0xee, 0x0e, 0x8c, 0xd2, 0x52, 0xd3, 0x07, - 0xca, 0xc5, 0x67, 0xd7, 0x69, 0xc3, 0xf8, 0xc3, 0xa6, 0x3b, 0x9c, 0xbf, 0x79, 0xf1, 0x08, 0x9d, - 0xcc, 0xb3, 0xb9, 0x98, 0x0c, 0x74, 0x20, 0xf1, 0x7e, 0x1f, 0x9f, 0x0c, 0xce, 0xc5, 0x91, 0x21, - 0x43, 0x01, 0x5b, 0x9a, 0x18, 0x62, 0x76, 0x2a, 0xc6, 0xbd, 0x99, 0xd1, 0xdf, 0xaa, 0xaa, 0xf8, - 0x50, 0xe3, 0x06, 0x09, 0x13, 0x63, 0x86, 0x0a, 0xa4, 0xa6, 0xc2, 0x83, 0x47, 0xd0, 0xf4, 0x7b, - 0xfd, 0xb7, 0x27, 0x7d, 0x3f, 0xc4, 0x90, 0x84, 0x34, 0xa8, 0x31, 0xac, 0xec, 0x5c, 0xbd, 0xec, - 0xf8, 0xc2, 0xe9, 0x0d, 0x78, 0xaf, 0x25, 0x4e, 0x01, 0xde, 0xa8, 0x8a, 0xb7, 0x68, 0x05, 0xb4, - 0x65, 0x15, 0xd0, 0xa4, 0xdd, 0xa7, 0x3e, 0xe6, 0xaf, 0xfc, 0x26, 0x5c, 0x33, 0xbe, 0xf0, 0xf3, - 0xc7, 0x58, 0xc9, 0x8e, 0x6c, 0x75, 0xe5, 0x1a, 0xa1, 0xdd, 0xaa, 0x1d, 0xf6, 0x54, 0xcd, 0xc6, - 0xac, 0xdf, 0x19, 0x24, 0x5f, 0x9e, 0x1e, 0x6b, 0x2b, 0x0e, 0x34, 0x1c, 0x9a, 0x30, 0x1a, 0x2b, - 0xa8, 0xe5, 0x7f, 0x89, 0x33, 0xc7, 0xa0, 0xaa, 0x1e, 0xad, 0xca, 0xf3, 0x28, 0xf8, 0x50, 0xe1, - 0x61, 0x42, 0x2c, 0x19, 0x63, 0x14, 0x60, 0x7e, 0xd0, 0xdc, 0xb8, 0x7f, 0xa1, 0xd1, 0x1b, 0xaa, - 0x70, 0x0e, 0x2a, 0x25, 0x31, 0xc2, 0x4d, 0x83, 0x0c, 0xbc, 0xe1, 0xd3, 0xe1, 0x42, 0x73, 0x70, - 0xcb, 0x2a, 0xf8, 0xd9, 0xc1, 0x8a, 0xdd, 0x09, 0xcb, 0x27, 0xdb, 0x79, 0xd3, 0xe3, 0xec, 0xc7, - 0xc3, 0x66, 0x66, 0xde, 0x67, 0x10, 0x56, 0xba, 0xf9, 0x77, 0x9c, 0xe3, 0x14, 0x7e, 0x33, 0xc9, - 0x44, 0x26, 0x9b, 0xb2, 0xae, 0xd6, 0xe8, 0xf1, 0xc4, 0x06, 0x4b, 0x7a, 0xd1, 0xeb, 0x8c, 0x2e, - 0x31, 0x56, 0x26, 0x93, 0xaf, 0x57, 0x42, 0xbd, 0x24, 0x84, 0x70, 0xee, 0x78, 0xb9, 0xbf, 0xa4, - 0x75, 0xff, 0x05, 0xa4, 0x23, 0x7b, 0x06, 0x55, 0x56, 0xe4, 0x4f, 0x8c, 0x29, 0x58, 0x76, 0xdb, - 0x72, 0xad, 0xc4, 0x16, 0x0c, 0x72, 0xba, 0xac, 0x30, 0x9e, 0x02, 0x26, 0x0c, 0x95, 0x56, 0xe7, - 0x8b, 0x90, 0x85, 0x1b, 0xd7, 0xa8, 0x31, 0x9b, 0x3d, 0x0b, 0xc2, 0x26, 0xc0, 0x93, 0x58, 0x67, - 0x7d, 0x69, 0x31, 0x41, 0xce, 0xda, 0xdc, 0x78, 0xd2, 0x66, 0x89, 0x3d, 0xa3, 0x56, 0x03, 0x83, - 0x62, 0x87, 0x42, 0x91, 0x78, 0x8e, 0x06, 0xed, 0x46, 0x5b, 0x9f, 0xb7, 0xfe, 0x11, 0xc9, 0x74, - 0x96, 0x30, 0x9c, 0xca, 0x63, 0x88, 0x4a, 0x97, 0xc1, 0x5d, 0x63, 0xd8, 0x8b, 0x5d, 0xb7, 0x63, - 0x4d, 0x3e, 0xf8, 0x2b, 0x8f, 0xdd, 0xf1, 0xcc, 0xda, 0xcc, 0xd8, 0xf5, 0xe6, 0x3e, 0x8e, 0x0c, - 0x01, 0x5f, 0x1b, 0xcc, 0xc9, 0x19, 0x56, 0x98, 0x2b, 0x13, 0x58, 0x3b, 0x7e, 0x8e, 0x55, 0xde, - 0x29, 0x2e, 0x2a, 0xaa, 0xab, 0xbb, 0xbf, 0x8c, 0x2b, 0x5c, 0x3b, 0xad, 0x9e, 0x2c, 0xe9, 0x32, - 0x45, 0x38, 0xfe, 0x11, 0x37, 0x1a, 0xf8, 0x25, 0xcc, 0x02, 0x4d, 0xc0, 0x26, 0x6e, 0xcd, 0x26, - 0x80, 0xb0, 0x1b, 0x88, 0x88, 0xb7, 0x07, 0x07, 0x1e, 0xd6, 0xbf, 0xe3, 0x25, 0x50, 0x85, 0x68, - 0xa9, 0x7a, 0x8a, 0xd7, 0xa6, 0x9c, 0x76, 0xe9, 0x4c, 0x6b, 0xf1, 0xa4, 0xb1, 0xc7, 0xa8, 0x35, - 0x01, 0xb4, 0x55, 0x55, 0x79, 0xd9, 0x4d, 0x76, 0x4b, 0x87, 0x02, 0x9a, 0xb2, 0x36, 0xab, 0x0c, - 0x87, 0x68, 0x7f, 0x8d, 0xc9, 0x06, 0x57, 0x2e, 0xf2, 0xdb, 0x85, 0x54, 0x25, 0x68, 0x0e, 0xcd, - 0xec, 0xd5, 0xea, 0x59, 0x3d, 0x4c, 0x7f, 0xe3, 0x04, 0x96, 0x88, 0x72, 0xe8, 0xa8, 0xb7, 0xa5, - 0x36, 0x9f, 0x59, 0x80, 0xee, 0xa8, 0xea, 0x8e, 0xa9, 0xea, 0x9e, 0x4d, 0xc4, 0xdb, 0xb1, 0x78, - 0xfc, 0x6d, 0xc6, 0xdb, 0x34, 0x9b, 0xa6, 0xc6, 0xac, 0x4f, 0xe1, 0x42, 0x71, 0xd1, 0x01, 0x6e, - 0x8d, 0x38, 0x6a, 0xaa, 0xd4, 0x1e, 0x7d, 0x62, 0x33, 0x0f, 0x50, 0xe6, 0x25, 0xf1, 0x92, 0x32, - 0x72, 0x96, 0xa6, 0x61, 0xb7, 0x30, 0x92, 0x59, 0xa0, 0x6d, 0xaa, 0xa6, 0xbc, 0x76, 0xa7, 0xe5, - 0x4e, 0xc8, 0x06, 0x56, 0xc7, 0x08, 0xd1, 0xe9, 0x16, 0x5e, 0x14, 0xb2, 0x88, 0xe8, 0x34, 0xc9, - 0x42, 0x53, 0xa9, 0x29, 0x68, 0x96, 0x4b, 0x7e, 0x3f, 0x05, 0x4c, 0x06, 0xc0, 0x00, 0x00, 0x00, - 0x01, 0x41, 0x9a, 0x05, 0x02, 0xb0, 0x3a, 0x9f, 0x30, 0xb4, 0xe9, 0xfd, 0x1c, 0x02, 0x5f, 0x04, - 0x62, 0x0e, 0xc7, 0xc9, 0xd7, 0xab, 0x3e, 0xb9, 0x43, 0xd8, 0x82, 0x9c, 0x7f, 0xcb, 0xfd, 0xeb, - 0x9b, 0x19, 0x68, 0xfe, 0xf8, 0xeb, 0x42, 0xd6, 0x83, 0x73, 0xca, 0x9c, 0xda, 0x6d, 0xf1, 0x3c, - 0x14, 0x18, 0xb4, 0x2d, 0x39, 0x68, 0x5a, 0x69, 0x52, 0xe0, 0x9c, 0xd7, 0x67, 0xdd, 0xf2, 0xfa, - 0xe7, 0x3e, 0x0b, 0x84, 0xb4, 0xc0, 0x56, 0xed, 0xa5, 0x1f, 0x57, 0x52, 0x25, 0x71, 0x22, 0x9a, - 0x85, 0x26, 0x1b, 0xf2, 0x41, 0x1d, 0x2f, 0x1c, 0x35, 0xa6, 0xb6, 0x9a, 0xdb, 0x60, 0xed, 0x78, - 0x25, 0xb4, 0xd6, 0xd3, 0x5b, 0x92, 0xf5, 0xc9, 0x97, 0x8c, 0xed, 0x35, 0xb4, 0xd6, 0xd3, 0x5b, - 0x4d, 0x78, 0x2b, 0xb4, 0xd6, 0xd3, 0x5b, 0x4d, 0x62, 0x74, 0xf8, 0x2b, 0xe9, 0x25, 0xa4, 0x96, - 0x92, 0x49, 0x97, 0x82, 0xeb, 0x4d, 0x6d, 0x35, 0x99, 0x0e, 0x9f, 0x04, 0x9d, 0xa6, 0xb2, 0xfa, - 0x2a, 0x54, 0xfa, 0xa5, 0x5e, 0xa9, 0x8a, 0xea, 0x95, 0x7a, 0x91, 0x3e, 0xa4, 0x49, 0x7a, 0xa7, - 0x4b, 0xaa, 0x74, 0xba, 0x91, 0x3e, 0xa9, 0xd1, 0xfa, 0x96, 0xae, 0x09, 0x08, 0xd3, 0x5a, 0x75, - 0xe0, 0xa2, 0xd3, 0x5b, 0x4d, 0x69, 0xd7, 0x10, 0x15, 0xe9, 0x25, 0xa4, 0x90, 0xe1, 0x2a, 0x69, - 0x8b, 0x62, 0xdf, 0xf8, 0x2d, 0xb4, 0xd6, 0xd3, 0x5d, 0x3a, 0xf5, 0x4a, 0xbc, 0x12, 0xda, 0x69, - 0x03, 0x40, 0xda, 0x69, 0x03, 0x40, 0xc7, 0x95, 0x71, 0x04, 0x74, 0x39, 0xd8, 0x9e, 0x87, 0x63, - 0x3f, 0x54, 0xed, 0x75, 0x70, 0x7e, 0x8e, 0x4a, 0x4e, 0x68, 0x8e, 0x08, 0xe0, 0x87, 0x0e, 0x71, - 0xf4, 0x43, 0xa7, 0xc4, 0x5a, 0x69, 0x9a, 0x4d, 0x35, 0x8b, 0xe1, 0x3c, 0x84, 0x8a, 0x4b, 0x3e, - 0x1f, 0x0d, 0x8e, 0xc5, 0xce, 0x74, 0x4a, 0x5e, 0x2d, 0x8b, 0x79, 0x79, 0xe0, 0x9d, 0x21, 0x91, - 0x61, 0x49, 0xbe, 0x4e, 0xa5, 0x4a, 0xe8, 0x81, 0xfd, 0xbe, 0xa5, 0x4f, 0xa8, 0x8e, 0x0a, 0xe1, - 0x4b, 0x4d, 0x24, 0x93, 0x4d, 0x24, 0x93, 0x4d, 0x30, 0x6c, 0x1b, 0x4d, 0x30, 0x6c, 0x1e, 0x55, - 0xd0, 0xa7, 0xfa, 0x2b, 0xdf, 0x26, 0x2b, 0x8a, 0xd7, 0x52, 0xa4, 0x6f, 0x34, 0x56, 0x25, 0xd8, - 0x3a, 0xbc, 0x3a, 0x8a, 0x00, 0x85, 0xa2, 0x4c, 0xd3, 0xf3, 0xfc, 0xba, 0x5d, 0xae, 0xbf, 0x4a, - 0xbf, 0x36, 0x9b, 0x70, 0x24, 0x02, 0x90, 0xdf, 0x1a, 0x32, 0xac, 0x36, 0xa8, 0x84, 0xcb, 0x67, - 0xf5, 0xfe, 0x04, 0x0f, 0xd4, 0xc9, 0x2f, 0x44, 0x32, 0x22, 0x2f, 0x30, 0x43, 0x77, 0xf4, 0x4e, - 0xfa, 0xf4, 0x77, 0x20, 0x4c, 0xf8, 0x7c, 0xdf, 0x56, 0x42, 0xb0, 0x28, 0x01, 0x44, 0x68, 0x43, - 0x85, 0xf5, 0x41, 0xea, 0x84, 0xad, 0x09, 0x83, 0x52, 0x9e, 0x1e, 0xa5, 0x76, 0x44, 0xfc, 0xce, - 0x70, 0x6f, 0x4b, 0x0c, 0xc8, 0xd2, 0x18, 0xb6, 0x3b, 0xa9, 0xb9, 0x6e, 0x2d, 0xf8, 0x90, 0x42, - 0x14, 0x94, 0x01, 0x6f, 0x0b, 0x25, 0xf1, 0x08, 0x3d, 0x43, 0x00, 0x77, 0xb2, 0xe0, 0xdb, 0x43, - 0x0d, 0xe6, 0x58, 0xe7, 0x81, 0xc3, 0x86, 0x0c, 0xbb, 0x23, 0xd8, 0x5b, 0xbb, 0x79, 0xce, 0x8a, - 0x18, 0xbf, 0x88, 0x08, 0x82, 0xb2, 0x3b, 0x37, 0x20, 0x01, 0xd0, 0x3a, 0x89, 0x59, 0x84, 0xa0, - 0x56, 0xb2, 0xf2, 0xb2, 0x55, 0x3c, 0x78, 0x07, 0x87, 0x14, 0x25, 0x8b, 0x84, 0x01, 0x48, 0x23, - 0x2a, 0xaf, 0xe4, 0xfc, 0x87, 0xbc, 0xc1, 0xd6, 0x06, 0x08, 0xc0, 0x9a, 0x8b, 0xa8, 0xb8, 0xbc, - 0x5e, 0x39, 0x46, 0xe2, 0xca, 0x5e, 0x2b, 0x8a, 0xc4, 0x72, 0x05, 0x15, 0x71, 0xfd, 0x0f, 0xe5, - 0x46, 0xeb, 0xe0, 0x15, 0x84, 0x02, 0x21, 0x40, 0x82, 0xcf, 0x87, 0xb1, 0xef, 0xaa, 0xea, 0xaa, - 0xbc, 0x83, 0x84, 0x42, 0x23, 0xc8, 0x34, 0x01, 0xae, 0x31, 0xac, 0x7d, 0x93, 0x0a, 0x93, 0x80, - 0xe4, 0x39, 0x07, 0x88, 0x00, 0x01, 0xa6, 0x26, 0x00, 0x15, 0x26, 0x54, 0xf0, 0x61, 0xf1, 0x01, - 0x00, 0xa7, 0x68, 0xb5, 0x6b, 0x2c, 0xe2, 0x7c, 0x2c, 0x01, 0x50, 0xea, 0x19, 0x64, 0xf1, 0xe3, - 0x40, 0x70, 0xb4, 0x1a, 0xb6, 0x00, 0xf6, 0x97, 0x4b, 0x0f, 0xda, 0x9e, 0x0c, 0xf1, 0xc1, 0xac, - 0xc1, 0x82, 0x11, 0x23, 0x2d, 0xd0, 0xfc, 0x25, 0x2d, 0xd6, 0x3c, 0x5e, 0x59, 0xa6, 0x58, 0xc5, - 0x65, 0x8c, 0x50, 0x6a, 0x2e, 0xe2, 0x7f, 0x08, 0x83, 0x10, 0x87, 0x51, 0x86, 0x7e, 0xb5, 0x27, - 0x96, 0x61, 0x6a, 0xe0, 0x40, 0x05, 0x30, 0x4b, 0xd0, 0x45, 0x91, 0xd0, 0x40, 0x24, 0x78, 0x43, - 0x26, 0x57, 0x96, 0x3e, 0xd2, 0x85, 0x4a, 0xe7, 0x08, 0x46, 0x45, 0x60, 0x75, 0x00, 0xd4, 0x51, - 0xe1, 0xec, 0x03, 0x51, 0xef, 0x46, 0x88, 0x85, 0xe1, 0xa5, 0x80, 0x3e, 0x2d, 0xfb, 0x1a, 0x22, - 0x0b, 0x45, 0xb2, 0xc1, 0x0c, 0x65, 0xf7, 0x52, 0xfa, 0x96, 0xc5, 0x67, 0x8f, 0x3c, 0x18, 0x4d, - 0xc4, 0xbc, 0xff, 0xf1, 0x24, 0x10, 0x7c, 0xb3, 0x59, 0xcf, 0x05, 0x18, 0x31, 0xe8, 0x2b, 0x5c, - 0x1c, 0x83, 0x0e, 0x10, 0x12, 0x30, 0x20, 0xa7, 0xca, 0xbf, 0x69, 0x57, 0x51, 0x75, 0x13, 0xfe, - 0x32, 0x24, 0x1e, 0x73, 0xcb, 0x19, 0x6c, 0x59, 0x07, 0xd5, 0x8a, 0x90, 0x78, 0x0c, 0x98, 0xf8, - 0x1d, 0x0f, 0xe4, 0xe0, 0x2b, 0x64, 0x8e, 0x18, 0x40, 0x77, 0x32, 0xa1, 0x75, 0xe1, 0x81, 0x91, - 0x23, 0xc1, 0xdb, 0xbf, 0xd6, 0x20, 0x38, 0x14, 0x2a, 0x5f, 0x27, 0xbd, 0xdc, 0xb0, 0x6e, 0xe7, - 0x1f, 0x65, 0x81, 0x83, 0xef, 0xc4, 0x97, 0x8a, 0x33, 0xf0, 0x69, 0x86, 0x46, 0x51, 0x3c, 0x4e, - 0x39, 0x7d, 0xde, 0xaa, 0xb8, 0x90, 0xb1, 0x06, 0x24, 0xb8, 0x44, 0x48, 0xc8, 0x34, 0x1b, 0x4c, - 0xa8, 0x9e, 0x2d, 0xdd, 0x91, 0x72, 0x88, 0x1e, 0x0f, 0x05, 0x41, 0xaa, 0x00, 0xfd, 0x1e, 0x00, - 0x1c, 0x3f, 0x3c, 0xf2, 0x88, 0xd4, 0xa2, 0x4b, 0xe3, 0x08, 0x4a, 0x54, 0x98, 0x00, 0xdc, 0xc9, - 0x42, 0xbd, 0x9e, 0x2e, 0x5e, 0x58, 0x62, 0x9a, 0x85, 0xc7, 0xfc, 0x2a, 0xa8, 0x23, 0xe8, 0x2a, - 0xd0, 0x8f, 0x16, 0x21, 0x76, 0xd1, 0x0b, 0x9b, 0x0b, 0xfc, 0x28, 0x28, 0x3a, 0x86, 0xa5, 0x80, - 0x0f, 0x03, 0xb3, 0x53, 0x24, 0x06, 0x96, 0x35, 0x20, 0x60, 0x6a, 0x4a, 0x3c, 0xb2, 0xbf, 0x55, - 0x77, 0x13, 0x19, 0x91, 0x4e, 0x45, 0xc9, 0x8a, 0xb3, 0x4b, 0x34, 0x47, 0x84, 0xbc, 0xba, 0xb7, - 0x26, 0x28, 0x52, 0xc6, 0xff, 0xc4, 0x89, 0x82, 0x55, 0x2e, 0xda, 0xd0, 0xcd, 0x03, 0xcf, 0x1c, - 0xd6, 0x67, 0xc4, 0x82, 0xaf, 0x2e, 0x60, 0xf7, 0x82, 0x1c, 0x3e, 0x0e, 0xbc, 0xfb, 0xe5, 0x8b, - 0xf0, 0xc0, 0x85, 0x9f, 0xa0, 0x9b, 0x90, 0x8f, 0x44, 0xae, 0x11, 0x0c, 0x10, 0x50, 0xb8, 0xa1, - 0xd7, 0x10, 0x19, 0x05, 0xba, 0xd4, 0x51, 0x8a, 0xc5, 0x62, 0xb7, 0xe2, 0x62, 0x62, 0x1e, 0x5b, - 0xb1, 0x58, 0xa3, 0x8a, 0x0d, 0xbf, 0x7d, 0xdf, 0x88, 0x21, 0x5e, 0xf0, 0x9f, 0x43, 0x5e, 0x15, - 0xeb, 0xa8, 0x98, 0x81, 0x3f, 0x08, 0x85, 0x2d, 0x09, 0xe1, 0x7b, 0x9b, 0xc7, 0xae, 0x2c, 0xcc, - 0x78, 0xf0, 0x3e, 0x01, 0xa9, 0x60, 0x03, 0xc2, 0x22, 0x42, 0x85, 0x15, 0x8a, 0xda, 0x68, 0x56, - 0x25, 0xe5, 0xef, 0xe5, 0x8d, 0x21, 0x46, 0x25, 0xe3, 0xef, 0xce, 0xfc, 0x40, 0x90, 0x9f, 0x7b, - 0xad, 0x7c, 0x43, 0xad, 0x7e, 0x2f, 0xbb, 0xdd, 0xdf, 0xcc, 0x7d, 0xdc, 0x6f, 0x43, 0x75, 0x04, - 0x3d, 0xdd, 0xd5, 0x54, 0x48, 0x81, 0x41, 0x28, 0xa3, 0x8a, 0xcc, 0xc9, 0x6c, 0xcc, 0xdf, 0x10, - 0x0a, 0x4c, 0x2b, 0x2d, 0x8a, 0xc5, 0x19, 0x60, 0xc5, 0x18, 0xac, 0x56, 0xe2, 0xb7, 0x77, 0xf0, - 0x80, 0x88, 0xa3, 0x2c, 0x62, 0xb1, 0x5b, 0x8a, 0x3b, 0xfb, 0x8a, 0xff, 0xad, 0x42, 0xfd, 0x05, - 0x6a, 0x1c, 0xe2, 0x82, 0x90, 0x3e, 0x3d, 0x0b, 0xdf, 0x08, 0xb9, 0xb0, 0xfe, 0x78, 0x98, 0x54, - 0x98, 0xe9, 0xc4, 0x0b, 0x6c, 0x93, 0xee, 0x70, 0x65, 0x12, 0x68, 0x50, 0x6c, 0x20, 0x88, 0xf5, - 0xce, 0x71, 0x55, 0xc5, 0x40, 0xb9, 0x5f, 0x0a, 0x84, 0xac, 0x88, 0x2f, 0xed, 0x64, 0x19, 0x99, - 0x04, 0xb9, 0x65, 0x1c, 0x95, 0xf8, 0x42, 0x85, 0xee, 0x73, 0xec, 0xb5, 0xfc, 0x0a, 0xbc, 0xd5, - 0x7c, 0xb8, 0x0d, 0x79, 0x8e, 0xb5, 0x84, 0x3a, 0x09, 0xa6, 0x82, 0x4e, 0x60, 0xc2, 0xae, 0x6e, - 0xc6, 0xea, 0xa0, 0xbf, 0x94, 0x45, 0xef, 0xe2, 0xf7, 0x15, 0xf7, 0x68, 0x9c, 0x48, 0xb3, 0x7e, - 0xab, 0x83, 0x18, 0x98, 0xc0, 0x82, 0x6f, 0x71, 0x0e, 0x0a, 0x03, 0x38, 0x06, 0x07, 0x8e, 0x3d, - 0xea, 0x5f, 0xf1, 0x03, 0x0a, 0x29, 0x93, 0x59, 0x9a, 0xcb, 0x9b, 0xb8, 0x68, 0xf1, 0x20, 0xf5, - 0x75, 0x35, 0xcd, 0x78, 0x82, 0x95, 0x61, 0x53, 0x39, 0x02, 0x06, 0x38, 0x9e, 0x27, 0xe2, 0x05, - 0x68, 0x73, 0x78, 0x92, 0xc2, 0x96, 0x7c, 0x48, 0x8b, 0x4e, 0x3e, 0xfb, 0xbb, 0xf1, 0x22, 0x48, - 0x4a, 0xd7, 0x13, 0x19, 0xc7, 0x2e, 0x2c, 0xea, 0x23, 0xe6, 0xb5, 0x9d, 0x7c, 0xa2, 0xde, 0xff, - 0x36, 0xb2, 0x62, 0xc4, 0x41, 0x66, 0x27, 0x89, 0x10, 0x52, 0x3b, 0xfc, 0x32, 0x3c, 0xaa, 0xaa, - 0xa2, 0xe2, 0x9a, 0xd7, 0x7f, 0x18, 0x2a, 0xaa, 0xaa, 0x9a, 0xaf, 0x17, 0x17, 0xef, 0x90, 0xf2, - 0x62, 0x5e, 0x27, 0xf2, 0x9d, 0xf7, 0xe2, 0x38, 0x91, 0x30, 0x59, 0x89, 0xf1, 0x1e, 0x21, 0xd5, - 0x72, 0x62, 0x02, 0x57, 0x77, 0x77, 0x77, 0x7f, 0x36, 0xf7, 0xc2, 0x32, 0x5d, 0xdd, 0xf1, 0x18, - 0x2d, 0xe0, 0x84, 0x75, 0xef, 0xdf, 0x43, 0x5e, 0x4e, 0x12, 0xbd, 0xdd, 0x0d, 0xfe, 0x24, 0xdd, - 0x55, 0x72, 0x95, 0xef, 0xc4, 0x88, 0xbc, 0x4c, 0xbc, 0xd7, 0x77, 0x70, 0x4b, 0x88, 0x12, 0x32, - 0xf7, 0xbc, 0x6f, 0xcb, 0x90, 0xf7, 0x7f, 0x98, 0xaf, 0x7f, 0x82, 0x8b, 0xbb, 0xbe, 0xee, 0xfe, - 0x25, 0xdd, 0xdd, 0xfc, 0xb6, 0xe5, 0x65, 0x7d, 0x95, 0xdd, 0xdf, 0x11, 0xe2, 0x7c, 0x4e, 0x7e, - 0xef, 0x77, 0x04, 0x98, 0x8f, 0x12, 0x41, 0x8f, 0x7f, 0x12, 0x12, 0x16, 0xef, 0x7b, 0x96, 0x3e, - 0x22, 0x09, 0x33, 0xfe, 0xfc, 0x44, 0x5e, 0xee, 0xef, 0x77, 0xf5, 0x7f, 0x9a, 0xee, 0xef, 0xc4, - 0x08, 0x2b, 0xbb, 0xbb, 0xbb, 0xba, 0xe6, 0x23, 0xbb, 0xf1, 0x1f, 0x97, 0xaa, 0x84, 0xfa, 0xb7, - 0xd5, 0xe4, 0xea, 0xc5, 0x75, 0x70, 0x7e, 0xaf, 0x15, 0xcd, 0x55, 0x55, 0xf1, 0x1a, 0xd6, 0xf7, - 0xc4, 0x89, 0x05, 0x66, 0x8e, 0x86, 0xf2, 0xa4, 0x7b, 0x4d, 0xde, 0xfc, 0x48, 0x8f, 0x10, 0x41, - 0xae, 0xee, 0x75, 0x1c, 0x40, 0x21, 0x95, 0x8f, 0xcd, 0x5c, 0x93, 0xd1, 0xdd, 0xf1, 0x10, 0x89, - 0x08, 0xca, 0x7b, 0x74, 0xf6, 0xd3, 0xe2, 0x44, 0x71, 0x22, 0x14, 0x76, 0x84, 0x79, 0xbb, 0xb8, - 0xbe, 0x8b, 0xa8, 0x8e, 0x72, 0x2c, 0xbd, 0x36, 0xff, 0xf2, 0x5b, 0x29, 0x0b, 0x28, 0xcb, 0x11, - 0x09, 0x09, 0x4d, 0x6a, 0xf6, 0x32, 0x28, 0xf1, 0x24, 0xbc, 0xec, 0x50, 0x65, 0x86, 0xe2, 0x21, - 0x43, 0x45, 0x7b, 0xbb, 0x8a, 0xf5, 0x58, 0xae, 0xf5, 0xc4, 0x09, 0x2d, 0xee, 0xfc, 0x4f, 0xd9, - 0xdd, 0xc4, 0x2c, 0x5f, 0x8c, 0xbb, 0x6e, 0xdb, 0xa6, 0xe6, 0x67, 0x2f, 0x8f, 0xdc, 0xa3, 0x6f, - 0xa3, 0xc4, 0x7e, 0xe4, 0x52, 0xdb, 0x1b, 0x7e, 0x11, 0xad, 0x6b, 0x5a, 0xa6, 0x56, 0x63, 0xf0, - 0x53, 0xdb, 0x2d, 0xae, 0x4b, 0x4b, 0xaa, 0x68, 0xed, 0xf0, 0x8c, 0xba, 0x4b, 0x1f, 0x4c, 0x67, - 0x31, 0x18, 0x1a, 0x70, 0x0d, 0x11, 0x5d, 0x6e, 0xc3, 0x7d, 0xf9, 0x0a, 0xc9, 0xb4, 0xd8, 0xd7, - 0x54, 0xeb, 0xcb, 0x4e, 0x76, 0x4f, 0xfc, 0xb3, 0xc0, 0x60, 0x47, 0x65, 0xae, 0x26, 0xaa, 0xa2, - 0xe2, 0xb1, 0x58, 0xad, 0xfc, 0xd5, 0x77, 0x57, 0xc9, 0x10, 0xd1, 0xc5, 0x62, 0xb5, 0xd0, 0xa6, - 0x05, 0xe8, 0xb8, 0x4b, 0xd1, 0xd1, 0xd5, 0x72, 0xef, 0x63, 0xf5, 0x38, 0xbe, 0x6a, 0x3d, 0x57, - 0x04, 0x94, 0xdb, 0x4d, 0xb2, 0x27, 0xd7, 0x0f, 0xaa, 0x3d, 0xf5, 0x36, 0x7c, 0x12, 0x59, 0xb3, - 0x46, 0xa8, 0xf2, 0xb8, 0x27, 0x11, 0x3d, 0xd1, 0xaa, 0x2a, 0x28, 0xc5, 0x72, 0x5d, 0xdd, 0xfc, - 0x12, 0x14, 0x6e, 0x49, 0xd2, 0xc7, 0xf2, 0x96, 0xe4, 0x07, 0x6b, 0x10, 0x08, 0xa9, 0xa7, 0x3e, - 0x33, 0xe8, 0xbe, 0x3e, 0xb2, 0xe2, 0x60, 0xa8, 0xc2, 0x38, 0x77, 0x14, 0xbc, 0x94, 0x96, 0x6a, - 0x2e, 0xbf, 0x7c, 0x3b, 0x5a, 0xa8, 0xfa, 0x08, 0xd7, 0xa0, 0x95, 0x75, 0xab, 0x6d, 0x9e, 0x1f, - 0xe2, 0x23, 0x28, 0x6e, 0xec, 0xde, 0xef, 0x2d, 0x2e, 0x73, 0x8b, 0xbc, 0x5b, 0x62, 0x8f, 0x05, - 0x75, 0x10, 0xb2, 0xa5, 0xac, 0xa9, 0xe9, 0x46, 0x7d, 0x92, 0xd1, 0x95, 0x83, 0x32, 0xff, 0x6c, - 0x7c, 0x64, 0x4b, 0xcb, 0xcf, 0xf1, 0x0a, 0x88, 0xac, 0x65, 0x03, 0x59, 0x07, 0xcc, 0x0f, 0x98, - 0x2e, 0x33, 0x9a, 0x74, 0xfe, 0x22, 0x99, 0x3e, 0xa8, 0xf7, 0x5c, 0x15, 0xd6, 0x34, 0x93, 0xd9, - 0x25, 0x79, 0xfd, 0x8e, 0xbe, 0x28, 0xa1, 0xb5, 0xb3, 0x45, 0x16, 0x65, 0xfe, 0x3d, 0x4e, 0xab, - 0xc4, 0xd1, 0x67, 0x23, 0x46, 0x93, 0x14, 0x6f, 0xc7, 0xe4, 0xbb, 0x3c, 0xb1, 0x58, 0xa3, 0x14, - 0x62, 0xbe, 0x20, 0x64, 0x34, 0x42, 0xdd, 0x56, 0x1d, 0xe6, 0x6e, 0x81, 0x06, 0x09, 0x99, 0x34, - 0x7d, 0xda, 0x41, 0x01, 0xb1, 0xa5, 0xa2, 0x9f, 0x5f, 0x29, 0x5d, 0xc5, 0x62, 0xbf, 0x2c, 0xf8, - 0x7c, 0x1e, 0xa9, 0x53, 0x2f, 0x56, 0x7c, 0xb0, 0xfb, 0x00, 0x77, 0x6b, 0x0a, 0x98, 0xf9, 0x7c, - 0xec, 0x2e, 0x6c, 0xf4, 0xdf, 0x65, 0x62, 0xb6, 0xdf, 0x89, 0x27, 0x3d, 0x0b, 0x4f, 0x5d, 0x12, - 0x0f, 0xae, 0x1f, 0x04, 0x84, 0xa6, 0xc6, 0x65, 0xd3, 0x0a, 0xe2, 0x8a, 0xed, 0x30, 0x9e, 0xcd, - 0xfe, 0xb9, 0x7c, 0x11, 0x91, 0xdf, 0x8b, 0xe6, 0xaa, 0xfe, 0xbe, 0x3e, 0x8b, 0x8a, 0xb9, 0x24, - 0x95, 0xa4, 0x97, 0x77, 0x77, 0x7f, 0x59, 0x7c, 0x96, 0xd3, 0x64, 0x75, 0x3e, 0xfb, 0xba, 0xe0, - 0xae, 0x45, 0x47, 0x5a, 0x83, 0x1a, 0x4c, 0xb1, 0xd0, 0x7e, 0x88, 0x89, 0x1d, 0xf0, 0xec, 0x77, - 0x2e, 0x21, 0x84, 0xa6, 0x9a, 0xa8, 0xda, 0x8a, 0xbd, 0xe2, 0xb9, 0x71, 0xef, 0xd7, 0x05, 0x22, - 0xb1, 0xd8, 0xe6, 0xa1, 0x4b, 0x12, 0x4c, 0x0c, 0xb8, 0xc4, 0x89, 0x2b, 0x77, 0xc1, 0x19, 0x68, - 0xcc, 0x46, 0x2d, 0xc7, 0x82, 0x1d, 0xb6, 0xcd, 0xfb, 0xe8, 0x4b, 0xbe, 0x86, 0x31, 0x58, 0x80, - 0x4a, 0x37, 0x1e, 0x13, 0xe8, 0x36, 0x90, 0x8a, 0x7f, 0x7f, 0xae, 0xbe, 0xe9, 0x2f, 0x88, 0x82, - 0x4b, 0x18, 0x53, 0x58, 0xd2, 0x08, 0x01, 0x20, 0x90, 0xfb, 0xa3, 0x63, 0xaf, 0x8e, 0x8c, 0x58, - 0xf5, 0x03, 0x9f, 0xa3, 0x17, 0x81, 0xb5, 0x29, 0xd5, 0x6b, 0xc4, 0xc6, 0x4c, 0x44, 0xe0, 0xb2, - 0xc8, 0x3e, 0xb3, 0xa2, 0x53, 0x0a, 0x2d, 0x88, 0xaf, 0x4c, 0x2d, 0xf8, 0xf8, 0x9c, 0xdf, 0xee, - 0x53, 0xb1, 0x11, 0x8f, 0x1d, 0x95, 0x99, 0x3d, 0xa9, 0x14, 0xe7, 0xe5, 0xa1, 0xa0, 0x3b, 0x93, - 0x8c, 0x86, 0x1b, 0xc8, 0x7f, 0xee, 0x87, 0x48, 0x80, 0x3c, 0x3b, 0xb1, 0xf9, 0xd0, 0x4e, 0x5c, - 0x6c, 0xd9, 0x9f, 0xd0, 0xec, 0xbc, 0x83, 0x69, 0x98, 0x3c, 0x69, 0x98, 0x37, 0xc2, 0x25, 0x40, - 0x6d, 0x5c, 0x74, 0x60, 0xd0, 0x15, 0x68, 0x68, 0x18, 0xf0, 0x48, 0xd5, 0xe5, 0xc1, 0x5a, 0x4b, - 0xcc, 0x40, 0x77, 0x65, 0xb6, 0xdb, 0x5c, 0x90, 0x6b, 0x02, 0xc5, 0xa6, 0x23, 0xb9, 0x8b, 0x02, - 0x6b, 0x94, 0x97, 0x20, 0x8e, 0x5e, 0x16, 0xa3, 0x74, 0x07, 0xb1, 0x96, 0x73, 0xb3, 0xf7, 0x57, - 0xf1, 0x15, 0xa7, 0x4d, 0x8c, 0xbf, 0xf0, 0x45, 0x3b, 0x36, 0xd0, 0xca, 0x9f, 0x53, 0xa7, 0xd4, - 0xe9, 0xf5, 0xef, 0xaf, 0x7d, 0x6a, 0xba, 0xf5, 0x75, 0x83, 0xeb, 0xaf, 0x82, 0x1b, 0xdf, 0x17, - 0xd5, 0x9f, 0x7b, 0x77, 0xf5, 0x2a, 0x7c, 0xd7, 0xdd, 0x77, 0x76, 0x0e, 0xfe, 0xbd, 0xf0, 0x4e, - 0x20, 0xc9, 0x17, 0xbd, 0xe2, 0xf8, 0x23, 0x2a, 0x34, 0x88, 0xa9, 0xb3, 0xcb, 0xeb, 0x17, 0xc1, - 0x21, 0x6b, 0x56, 0x7d, 0x47, 0x9b, 0xe4, 0x14, 0x38, 0x93, 0xbd, 0x96, 0xd7, 0x43, 0xd2, 0xfd, - 0x5d, 0xf0, 0xa4, 0x46, 0xd0, 0x24, 0x31, 0x28, 0x80, 0x8c, 0x4a, 0x58, 0xb2, 0xee, 0x60, 0x00, - 0x31, 0x0d, 0x2a, 0xd4, 0x92, 0x64, 0x65, 0xf4, 0x89, 0x75, 0x4e, 0x97, 0x04, 0x44, 0x7e, 0xcc, - 0xe8, 0x77, 0xe1, 0x42, 0x84, 0xcf, 0x5c, 0x9f, 0x8b, 0x53, 0x15, 0x1f, 0x7b, 0x14, 0x52, 0xcb, - 0x1f, 0x1c, 0x4c, 0x77, 0x17, 0xc4, 0x4b, 0xe8, 0xb9, 0x99, 0x23, 0x2c, 0x70, 0x7e, 0x10, 0x8a, - 0xdc, 0x56, 0x2b, 0x3a, 0x9e, 0x1e, 0x53, 0xde, 0x5f, 0xc1, 0x0d, 0x34, 0xc4, 0x59, 0xa3, 0x22, - 0xfc, 0x40, 0x29, 0xa2, 0x2a, 0x16, 0xd7, 0x92, 0x9a, 0x1a, 0x0a, 0xaf, 0x04, 0xaf, 0x3c, 0x68, - 0xd2, 0x6d, 0x8a, 0xe1, 0x22, 0xb5, 0xa6, 0xc1, 0x9c, 0x7a, 0xd7, 0x84, 0xa9, 0x21, 0x21, 0x14, - 0xe9, 0xc6, 0x5c, 0xa6, 0xa3, 0x37, 0x66, 0xbb, 0xd7, 0x04, 0x66, 0x55, 0x55, 0x77, 0xc2, 0x45, - 0x23, 0x0b, 0xb6, 0xce, 0x86, 0xba, 0xbd, 0xf5, 0x8b, 0xeb, 0x9c, 0xf9, 0x6f, 0xbf, 0x92, 0xf2, - 0x88, 0x0f, 0xc1, 0x0d, 0x22, 0x5a, 0x4e, 0xba, 0xf8, 0x22, 0x9a, 0x87, 0xa3, 0x2e, 0x39, 0x5d, - 0xdd, 0xff, 0x0d, 0x6e, 0xcd, 0x1e, 0x1d, 0x49, 0x9f, 0xe6, 0xda, 0xbf, 0x9c, 0x8b, 0xe4, 0xd2, - 0x6f, 0xe1, 0x22, 0xa0, 0xe5, 0x7c, 0xff, 0x3e, 0x78, 0x23, 0xa9, 0x58, 0x79, 0x69, 0x79, 0x2e, - 0xf9, 0x38, 0x2b, 0x9d, 0x86, 0x48, 0x98, 0xd2, 0x3d, 0x33, 0xb9, 0x23, 0x37, 0xea, 0xe4, 0x24, - 0xa3, 0x21, 0x33, 0x8c, 0xc7, 0xcb, 0x1b, 0xea, 0xf5, 0xc1, 0x50, 0x96, 0x59, 0xd2, 0xca, 0x6d, - 0x95, 0x22, 0xc2, 0x00, 0x7d, 0x7c, 0x17, 0x16, 0x5b, 0x60, 0x79, 0x4b, 0xbe, 0x9f, 0x89, 0x8c, - 0x25, 0x13, 0xa3, 0x36, 0xdf, 0x64, 0xc7, 0x06, 0x75, 0xda, 0xc2, 0x67, 0x66, 0x37, 0xb2, 0xbb, - 0x97, 0xb7, 0x6d, 0x72, 0xca, 0xa4, 0xe7, 0x90, 0x9c, 0xa7, 0xd1, 0x4e, 0x9f, 0x04, 0x24, 0x4c, - 0xfc, 0x75, 0x03, 0xf9, 0xd2, 0xfb, 0x38, 0x3b, 0xe1, 0xee, 0x03, 0xb6, 0x4f, 0x8b, 0x9d, 0xd6, - 0xe9, 0x24, 0x81, 0xa0, 0x7e, 0xe8, 0x8e, 0xb7, 0xe8, 0xc4, 0x4f, 0x94, 0xac, 0x4d, 0x3f, 0xc9, - 0x07, 0x5e, 0x03, 0xaf, 0x0d, 0x8e, 0xc5, 0xd0, 0xa3, 0x17, 0xcb, 0x7b, 0xfd, 0x7b, 0xee, 0x7a, - 0x75, 0xc8, 0x56, 0x20, 0xb3, 0x23, 0xc9, 0x3a, 0x27, 0x57, 0x28, 0x92, 0xb1, 0xfc, 0x27, 0x9d, - 0x89, 0xd8, 0x63, 0x57, 0x7f, 0x44, 0x95, 0xf5, 0xac, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x06, - 0x03, 0x30, 0x2e, 0x89, 0xd0, 0x44, 0xb7, 0xd0, 0x8c, 0x9d, 0x7b, 0xbb, 0xaa, 0xfa, 0xe5, 0x06, - 0x1d, 0x52, 0xa2, 0x75, 0xaa, 0xe8, 0xa4, 0x48, 0x9e, 0xb9, 0x32, 0x5d, 0x4a, 0x9f, 0x54, 0xcb, - 0xd4, 0xcb, 0x3e, 0xb9, 0x43, 0x9d, 0x53, 0xaf, 0x54, 0xe9, 0x75, 0xa7, 0x5e, 0xa9, 0x57, 0xac, - 0x50, 0xcf, 0x53, 0xa4, 0x33, 0xd7, 0xbe, 0xa5, 0x4f, 0xae, 0x15, 0xd7, 0x2a, 0xe8, 0x8f, 0xf4, - 0x57, 0x97, 0xa2, 0x15, 0x23, 0x61, 0x98, 0x70, 0x58, 0xa6, 0x46, 0x14, 0xe7, 0x9f, 0x3e, 0xb5, - 0x4c, 0x4f, 0x46, 0x32, 0x22, 0x2c, 0x44, 0x28, 0x10, 0xda, 0x2a, 0x1d, 0xa6, 0x85, 0x53, 0xa0, - 0xab, 0x97, 0x59, 0x5e, 0xe2, 0x3f, 0x0a, 0x10, 0x77, 0xcd, 0xc2, 0x77, 0x22, 0xc6, 0x14, 0x72, - 0xac, 0xf7, 0x2e, 0xdc, 0xf8, 0x46, 0x1e, 0xb9, 0x36, 0xa4, 0xd5, 0x76, 0x13, 0x67, 0x98, 0x84, - 0x39, 0x42, 0x67, 0xc6, 0x94, 0xd9, 0xea, 0xc8, 0x53, 0x9b, 0x15, 0x40, 0xea, 0xe1, 0xd6, 0x00, - 0x96, 0x1d, 0x21, 0x80, 0x01, 0x0f, 0xb3, 0xe7, 0xda, 0xb4, 0x77, 0x76, 0x67, 0x57, 0x5f, 0x72, - 0x50, 0x3a, 0x62, 0xe1, 0xcd, 0xdb, 0x97, 0x60, 0xe4, 0xb8, 0x60, 0x01, 0xa3, 0xc4, 0x00, 0x11, - 0x16, 0x0c, 0x10, 0x29, 0x65, 0x04, 0x0a, 0x5b, 0x70, 0x78, 0x3d, 0x07, 0x83, 0xdc, 0x18, 0x01, - 0x44, 0x6d, 0x55, 0x55, 0x55, 0x54, 0xd9, 0x22, 0x7d, 0x31, 0xf5, 0xf9, 0x9d, 0xa0, 0x98, 0x5e, - 0x12, 0x9d, 0xf2, 0x59, 0x30, 0x66, 0xd7, 0x04, 0xb4, 0xf1, 0x8f, 0x4d, 0x7e, 0x02, 0xc0, 0x14, - 0x87, 0x86, 0x8b, 0x93, 0x04, 0xe8, 0xea, 0x13, 0x09, 0x9b, 0x8a, 0x69, 0x88, 0xfc, 0x5a, 0x82, - 0xfe, 0x12, 0xfd, 0xe0, 0xd1, 0xa3, 0x7b, 0xdb, 0xe7, 0x68, 0x84, 0x5b, 0x6a, 0x1f, 0xed, 0x73, - 0x80, 0x80, 0x89, 0x88, 0xf9, 0xdf, 0xf0, 0xa2, 0xb0, 0xe2, 0x80, 0x28, 0x3f, 0xf0, 0xdf, 0x85, - 0xd2, 0xee, 0x5d, 0x6e, 0x68, 0x79, 0x75, 0x2f, 0xb8, 0x0a, 0x90, 0x49, 0x40, 0x9f, 0x9b, 0x37, - 0x5a, 0x7c, 0xfc, 0x12, 0x0a, 0x69, 0xd6, 0x4c, 0x31, 0x10, 0x50, 0x23, 0x2c, 0x87, 0x90, 0x91, - 0x8a, 0x6c, 0xe7, 0x60, 0xc3, 0xc2, 0x86, 0xb4, 0xaa, 0xaa, 0xa2, 0x98, 0xba, 0x97, 0x93, 0x05, - 0xd7, 0x4b, 0xbe, 0x09, 0x6b, 0xa7, 0x5d, 0x3e, 0xe2, 0x63, 0x22, 0xbf, 0x3e, 0x4d, 0x4e, 0x38, - 0xe0, 0x36, 0x1f, 0x81, 0xfa, 0x7e, 0x3a, 0x55, 0x96, 0xb4, 0x58, 0x8f, 0x30, 0xe3, 0xc0, 0xbf, - 0x50, 0xbf, 0x17, 0xd0, 0x57, 0x99, 0x1b, 0xaf, 0x83, 0x3a, 0xc2, 0x3c, 0x2e, 0x20, 0x1d, 0x2e, - 0x0e, 0xb1, 0x80, 0x11, 0x41, 0x4c, 0x68, 0x07, 0x81, 0x14, 0x8f, 0x7c, 0xfd, 0xbc, 0x18, 0x2e, - 0x03, 0xa8, 0x89, 0x30, 0x57, 0x41, 0xc5, 0x71, 0x5e, 0x04, 0x80, 0x2c, 0x8d, 0x11, 0xd6, 0x70, - 0x70, 0x99, 0xc1, 0x58, 0xc6, 0x10, 0xa9, 0x0a, 0x58, 0x98, 0x3e, 0x2e, 0x07, 0x81, 0xc3, 0x4e, - 0xac, 0x79, 0x88, 0xb6, 0x72, 0xcc, 0x99, 0xaf, 0xa8, 0xa0, 0x03, 0x92, 0x4e, 0x00, 0x01, 0x00, - 0x59, 0xe2, 0x15, 0xcc, 0x66, 0x74, 0x44, 0x3c, 0x3c, 0x8c, 0xda, 0xeb, 0x7f, 0xff, 0x84, 0x01, - 0x00, 0x52, 0x78, 0xce, 0x07, 0xa5, 0x76, 0x43, 0x06, 0x72, 0x24, 0x3d, 0x42, 0x63, 0x81, 0x29, - 0xec, 0xff, 0x64, 0xc3, 0x0a, 0x8d, 0x5b, 0x84, 0x21, 0x38, 0x0e, 0x42, 0x8a, 0x8b, 0x87, 0x2e, - 0x48, 0x31, 0xe9, 0xe7, 0xb9, 0x04, 0x12, 0x1c, 0x10, 0x24, 0x26, 0x1c, 0x09, 0x21, 0x10, 0xa4, - 0x28, 0x00, 0x54, 0x09, 0x88, 0x33, 0xc0, 0x00, 0xbb, 0x78, 0x56, 0xc5, 0x61, 0x38, 0x50, 0x20, - 0x66, 0x81, 0x00, 0x20, 0x87, 0x1b, 0xc2, 0xb8, 0x17, 0x3c, 0x03, 0xdb, 0x83, 0xfc, 0x80, 0xf0, - 0x08, 0x19, 0x80, 0xc0, 0x55, 0x47, 0x85, 0x10, 0x71, 0x2f, 0x15, 0x98, 0x90, 0x62, 0x36, 0xb2, - 0x1a, 0x86, 0x83, 0x10, 0xb5, 0x55, 0xac, 0x08, 0xd2, 0xc1, 0x4c, 0x0b, 0x13, 0xa2, 0x98, 0x2d, - 0x2c, 0x11, 0x56, 0xc7, 0xd6, 0x6d, 0x7a, 0xaa, 0x21, 0x30, 0x1f, 0x15, 0xb6, 0x86, 0x15, 0x86, - 0x29, 0xa6, 0x7d, 0x7f, 0xc1, 0x40, 0x31, 0x05, 0x62, 0x55, 0x54, 0x5e, 0x47, 0x10, 0x70, 0xc2, - 0x27, 0xa5, 0xdb, 0x17, 0xae, 0x0c, 0xa7, 0x8f, 0xe2, 0x22, 0x45, 0xf3, 0x30, 0x2e, 0x5e, 0x30, - 0x84, 0x77, 0x0b, 0xcc, 0x4b, 0x9a, 0x03, 0x39, 0xad, 0xf8, 0xc0, 0x96, 0x6c, 0xa0, 0x9c, 0xb8, - 0x5b, 0xa5, 0x8d, 0xc5, 0x6e, 0x2b, 0x7f, 0x08, 0x4b, 0xcb, 0xc5, 0x30, 0xb6, 0xa0, 0xa5, 0x58, - 0xc6, 0x66, 0x0d, 0x0f, 0xf0, 0x4a, 0x34, 0x8e, 0x0b, 0xdc, 0x53, 0x79, 0x8d, 0x69, 0x6c, 0x96, - 0x5b, 0x0e, 0x8e, 0x87, 0xe2, 0x66, 0x19, 0x14, 0xc4, 0x9c, 0x50, 0xbe, 0x26, 0x48, 0x13, 0x1c, - 0x82, 0xfd, 0x19, 0xfc, 0xa8, 0xbe, 0x82, 0x35, 0xf5, 0x8a, 0xb8, 0x99, 0xe8, 0x7a, 0x67, 0xa1, - 0xe9, 0xf8, 0x47, 0x3d, 0x33, 0xd0, 0xf4, 0xe7, 0xa6, 0xf9, 0xcb, 0x14, 0x86, 0x48, 0x64, 0xfa, - 0xbe, 0x5f, 0x9f, 0xac, 0x55, 0xcf, 0x47, 0xbe, 0xaa, 0xbf, 0x52, 0x28, 0x7a, 0xb4, 0x54, 0x09, - 0x20, 0xa0, 0x41, 0x8e, 0x68, 0x73, 0x45, 0x95, 0xa8, 0x7f, 0x0b, 0xe0, 0x1a, 0x01, 0x55, 0xf7, - 0xbe, 0x60, 0xc2, 0x1e, 0x19, 0x7c, 0x00, 0x08, 0xc0, 0x51, 0x1a, 0x00, 0x3d, 0xce, 0x5a, 0x6f, - 0x50, 0x18, 0xfd, 0x74, 0x01, 0x19, 0x8b, 0xf7, 0x47, 0x5b, 0x0d, 0xf2, 0x76, 0x6a, 0x3c, 0xc4, - 0x65, 0xe0, 0x15, 0xb8, 0x5c, 0xf3, 0xe2, 0x7f, 0xb9, 0xa9, 0x5c, 0x14, 0x04, 0x06, 0xd6, 0x80, - 0x60, 0x42, 0x92, 0x00, 0x04, 0x2d, 0xce, 0xc1, 0xf5, 0x50, 0x46, 0x9c, 0x2e, 0x01, 0x5f, 0x95, - 0x00, 0x3d, 0x50, 0x10, 0xd6, 0x3c, 0x16, 0xe8, 0xe8, 0xa9, 0x00, 0x00, 0x80, 0x2f, 0x27, 0x0e, - 0x34, 0x2c, 0x26, 0xb6, 0xc3, 0x49, 0x30, 0x35, 0xb1, 0x55, 0x4d, 0x39, 0x34, 0xc7, 0xb5, 0x57, - 0xc9, 0x62, 0x95, 0x47, 0x5f, 0x4e, 0x7d, 0x2f, 0xc3, 0x30, 0xa4, 0xb1, 0xf1, 0x10, 0xa4, 0x29, - 0x2c, 0x85, 0xd0, 0x1a, 0xb9, 0x96, 0xf1, 0xd1, 0x7a, 0xb5, 0x87, 0x40, 0x00, 0xe5, 0x1e, 0x99, - 0xb3, 0x21, 0x00, 0x02, 0xaa, 0x9c, 0x80, 0x26, 0x31, 0x3e, 0x39, 0x54, 0x34, 0x82, 0x59, 0xdd, - 0x1a, 0xac, 0x44, 0x29, 0x34, 0x52, 0xd5, 0x20, 0x49, 0xd5, 0x62, 0xc5, 0xe4, 0x28, 0x97, 0x24, - 0xb2, 0x59, 0x81, 0xd2, 0xe0, 0xea, 0xc6, 0x90, 0x8e, 0x82, 0xe4, 0xce, 0x0a, 0x79, 0x41, 0xc4, - 0x81, 0x28, 0xd5, 0x03, 0xe8, 0xfc, 0x30, 0x0a, 0x42, 0x87, 0x99, 0x5c, 0x64, 0x5e, 0x2e, 0x2e, - 0x29, 0x8b, 0xa4, 0x90, 0x45, 0x99, 0x70, 0xf0, 0xec, 0x85, 0xd6, 0x54, 0xab, 0xf9, 0x46, 0x97, - 0xf9, 0x38, 0xa1, 0xd9, 0x83, 0x2d, 0x44, 0x79, 0x6c, 0x28, 0xa9, 0x63, 0xf1, 0xc6, 0x77, 0x3d, - 0xe5, 0xb3, 0xe7, 0xcb, 0x6e, 0x19, 0x15, 0x85, 0xb5, 0xcc, 0x27, 0x89, 0xff, 0x1c, 0x22, 0x11, - 0xa5, 0xfc, 0x0b, 0xd5, 0xc5, 0x6c, 0x6a, 0xff, 0xe4, 0xdc, 0x41, 0xa8, 0xc7, 0xc4, 0x82, 0x30, - 0xba, 0x49, 0x37, 0x1a, 0xa7, 0x88, 0x53, 0xaf, 0xea, 0x74, 0x54, 0x18, 0xeb, 0xdf, 0x04, 0x26, - 0xbc, 0xf4, 0xc2, 0x4e, 0x8c, 0xc3, 0xd7, 0xa7, 0xc4, 0x21, 0x3d, 0xc0, 0xc2, 0x08, 0x16, 0x95, - 0x60, 0x40, 0x08, 0x05, 0x06, 0x7c, 0xdd, 0x18, 0x27, 0xca, 0xa0, 0x8c, 0x4e, 0x45, 0xe0, 0xd5, - 0x68, 0xa1, 0x9e, 0xbd, 0x79, 0x27, 0xfe, 0x70, 0x84, 0x61, 0x0f, 0x01, 0x96, 0xdd, 0x00, 0x24, - 0x83, 0xc7, 0x90, 0x86, 0x30, 0x1b, 0x07, 0x73, 0x86, 0x40, 0x0a, 0x36, 0xf8, 0x77, 0xf0, 0xf8, - 0xd9, 0x1e, 0xe2, 0x94, 0x4b, 0x0f, 0x8f, 0x18, 0x55, 0x49, 0x2f, 0x12, 0x10, 0x0a, 0x14, 0xd4, - 0xa4, 0x24, 0x6a, 0xd3, 0xe9, 0x84, 0x31, 0x83, 0x3c, 0xdf, 0xe3, 0xe0, 0xe1, 0xee, 0xdd, 0x07, - 0x03, 0x07, 0xfe, 0xce, 0x01, 0x83, 0xb0, 0x1c, 0x84, 0x00, 0x0b, 0x05, 0x83, 0x72, 0x02, 0xaf, - 0xbc, 0x35, 0xd0, 0x0f, 0x12, 0x96, 0x1f, 0x11, 0x7c, 0x40, 0x40, 0x61, 0x89, 0xcf, 0x21, 0x00, - 0x31, 0x1d, 0x4a, 0x19, 0x0b, 0x92, 0xec, 0x7b, 0x42, 0x52, 0x4f, 0x3d, 0x10, 0x46, 0x54, 0x52, - 0x09, 0xce, 0x01, 0x53, 0x3a, 0x70, 0xa0, 0x69, 0x9c, 0x21, 0x49, 0xb0, 0x69, 0x75, 0x00, 0x61, - 0x58, 0x28, 0x82, 0x60, 0xa8, 0xb8, 0xb8, 0x9f, 0x91, 0xdf, 0xf1, 0x82, 0x4c, 0xd1, 0x97, 0x9e, - 0x04, 0x3f, 0x10, 0x5f, 0x1d, 0xfa, 0xe0, 0x9a, 0x7a, 0x1e, 0x9c, 0xf4, 0xf0, 0xf8, 0x50, 0x29, - 0x4d, 0x53, 0x2d, 0xb8, 0xad, 0xd5, 0xd3, 0x15, 0xbc, 0xfc, 0xd1, 0x3d, 0xe2, 0x01, 0x08, 0x98, - 0xd5, 0x75, 0xf3, 0x11, 0x93, 0x0a, 0x02, 0xdd, 0x89, 0x9d, 0x5e, 0x0a, 0x4d, 0xc4, 0xc8, 0x24, - 0x81, 0xe6, 0x05, 0xf8, 0x5c, 0xa8, 0x5f, 0x2c, 0x1c, 0x57, 0xda, 0x2f, 0x8b, 0x0c, 0xb4, 0xd6, - 0xd3, 0x5a, 0xe1, 0x1b, 0x4d, 0x6d, 0x35, 0xb4, 0xd7, 0xe3, 0x2d, 0x35, 0xb4, 0xd6, 0xd3, 0x5b, - 0x4d, 0x7e, 0x27, 0xa4, 0x96, 0x92, 0x5e, 0x3a, 0xd6, 0xdb, 0x4d, 0x6d, 0x35, 0x9b, 0x84, 0xc9, - 0xcf, 0x49, 0xe9, 0xbe, 0xa5, 0x59, 0x7d, 0x19, 0xfe, 0x62, 0xec, 0xcf, 0x41, 0x1c, 0x13, 0x4b, - 0x42, 0xd3, 0x3d, 0x0f, 0x4d, 0xca, 0xe3, 0xf9, 0xe8, 0x7a, 0x67, 0xa1, 0xe8, 0x5a, 0x36, 0x99, - 0x61, 0x88, 0xd1, 0x55, 0x09, 0x84, 0x70, 0xee, 0x00, 0x54, 0x17, 0x9a, 0x20, 0x52, 0xe7, 0x22, - 0x1d, 0x6f, 0x38, 0x30, 0xe0, 0xb8, 0xba, 0xaf, 0x3d, 0x55, 0x7c, 0x63, 0x3f, 0xfe, 0x14, 0x21, - 0x6c, 0x51, 0xc2, 0x04, 0x98, 0x03, 0xb7, 0x0b, 0xf3, 0x1a, 0x82, 0x29, 0xa1, 0xa4, 0x50, 0x2f, - 0x12, 0x80, 0x7a, 0x6f, 0x92, 0x84, 0x04, 0x0f, 0x38, 0x62, 0xcd, 0x90, 0x7f, 0xb7, 0x72, 0x75, - 0x9d, 0xd0, 0xad, 0x86, 0x59, 0x81, 0x32, 0xa2, 0x84, 0xfb, 0x11, 0x3a, 0xc2, 0x22, 0x02, 0x92, - 0x04, 0x28, 0xa7, 0x83, 0x41, 0x50, 0x8f, 0x47, 0x2c, 0x38, 0x05, 0xa2, 0xb0, 0x21, 0x1a, 0x7e, - 0x3b, 0xa4, 0x4f, 0x2c, 0x79, 0x3e, 0xd1, 0xf0, 0x00, 0x23, 0xc9, 0x00, 0x1a, 0x8b, 0x59, 0x60, - 0x65, 0xac, 0x48, 0x07, 0xe7, 0x78, 0x90, 0x57, 0x35, 0x27, 0x80, 0x01, 0x46, 0xc0, 0x1b, 0x34, - 0xe7, 0x2c, 0xb4, 0x01, 0x5a, 0x12, 0xa6, 0x90, 0x0b, 0x58, 0x16, 0x61, 0x50, 0x5b, 0x4a, 0x57, - 0x00, 0x20, 0xf8, 0x81, 0x24, 0xa0, 0xff, 0x14, 0x30, 0x4a, 0x00, 0xd2, 0x32, 0x7f, 0x48, 0x8b, - 0xd6, 0x23, 0x5c, 0x16, 0x15, 0xa5, 0x33, 0x0b, 0x2a, 0xad, 0x66, 0xd5, 0xe2, 0xf8, 0xe3, 0x38, - 0xac, 0xb6, 0x76, 0x2e, 0xf8, 0xae, 0xca, 0xc7, 0xe2, 0x8b, 0x69, 0x6d, 0x46, 0xf3, 0x2c, 0x3f, - 0x1c, 0x68, 0xb8, 0xf1, 0x90, 0x77, 0x16, 0x80, 0xaa, 0x2d, 0x60, 0xfd, 0x5d, 0x83, 0x3e, 0x43, - 0x5e, 0x12, 0x77, 0x1c, 0x2e, 0x20, 0x49, 0x02, 0xf4, 0xda, 0x9f, 0xad, 0x57, 0x42, 0x20, 0xfa, - 0xca, 0x6e, 0x84, 0xa3, 0x86, 0x23, 0x82, 0x33, 0x1e, 0x87, 0xa7, 0x83, 0x8f, 0xa3, 0xa4, 0xbe, - 0xad, 0x7d, 0x53, 0x32, 0x72, 0x55, 0xdd, 0x7d, 0x19, 0x92, 0xf4, 0x24, 0xc9, 0x5d, 0x4c, 0x95, - 0x86, 0x46, 0x8e, 0x13, 0xe7, 0x68, 0x23, 0x87, 0x73, 0x48, 0x9a, 0x28, 0x71, 0xbe, 0x79, 0x24, - 0x50, 0x54, 0xbc, 0x5c, 0x9a, 0x4c, 0x2a, 0x05, 0x65, 0x03, 0xe8, 0x1f, 0x92, 0x83, 0xcb, 0x88, - 0x56, 0xcb, 0xac, 0x6e, 0x9f, 0x88, 0x12, 0x34, 0xce, 0x5c, 0x01, 0x49, 0xb1, 0x00, 0x28, 0x78, - 0xdd, 0xea, 0x63, 0xa1, 0xbf, 0x0e, 0x0a, 0x42, 0x0c, 0xec, 0x88, 0x8c, 0x22, 0x8d, 0xa1, 0xc9, - 0x40, 0x3c, 0x18, 0x27, 0x9a, 0xd1, 0x4b, 0x07, 0x55, 0x30, 0x66, 0x70, 0xec, 0xbe, 0xbf, 0x39, - 0xd8, 0x05, 0x65, 0x99, 0x2f, 0x00, 0x03, 0xaa, 0x32, 0x02, 0x0b, 0x86, 0x10, 0x3d, 0x03, 0xad, - 0xf0, 0x28, 0x09, 0xad, 0xe3, 0x06, 0xe5, 0xfe, 0x10, 0x0a, 0x5e, 0x00, 0x0f, 0x38, 0x02, 0xc1, - 0x30, 0x01, 0x40, 0x78, 0x01, 0x82, 0xe8, 0x84, 0xe0, 0xba, 0xa8, 0xf6, 0x48, 0x13, 0x16, 0x1f, - 0x0a, 0x82, 0x25, 0x00, 0x96, 0x6c, 0x00, 0x04, 0x01, 0x14, 0x78, 0x85, 0x77, 0x22, 0x80, 0x0b, - 0x88, 0xa3, 0xc5, 0x81, 0x06, 0xe3, 0x68, 0x48, 0x1f, 0x50, 0x82, 0x11, 0xb3, 0xa8, 0x00, 0x87, - 0xa7, 0x0e, 0xcd, 0xc4, 0x89, 0x1b, 0xe0, 0xb0, 0x38, 0xcb, 0x4e, 0x1b, 0x02, 0x07, 0xfa, 0x90, - 0xc0, 0x00, 0xf0, 0x5e, 0x0e, 0x71, 0xaa, 0x34, 0x81, 0x62, 0x12, 0x68, 0x38, 0xa0, 0x9c, 0x7f, - 0x04, 0xee, 0xba, 0x01, 0x51, 0x78, 0x00, 0xf9, 0x66, 0x40, 0x79, 0x93, 0x90, 0x02, 0x60, 0x90, - 0x0e, 0x5d, 0xcf, 0xa7, 0xda, 0x49, 0x93, 0x71, 0x30, 0xa7, 0xc7, 0x95, 0x69, 0x82, 0x35, 0x99, - 0x87, 0x63, 0x50, 0xbb, 0xe9, 0x1d, 0xe4, 0x28, 0xa9, 0xc4, 0x79, 0xa1, 0x2a, 0xa5, 0xd4, 0x73, - 0xe3, 0x2d, 0xa9, 0x3f, 0x22, 0xfd, 0x59, 0x19, 0xca, 0x82, 0x5a, 0x41, 0xc1, 0xc1, 0xe5, 0xcb, - 0xff, 0xc5, 0xdf, 0x46, 0xaa, 0x6c, 0x27, 0x0a, 0xf8, 0xe2, 0x2a, 0xa8, 0x58, 0xe8, 0x0e, 0xf1, - 0x79, 0x91, 0xf5, 0x0b, 0x9c, 0x1d, 0x60, 0x3e, 0x4b, 0xac, 0x22, 0x20, 0x36, 0x4b, 0x21, 0x26, - 0xf2, 0x12, 0x07, 0xd7, 0xf1, 0x21, 0xaa, 0x49, 0x7d, 0x6d, 0xb4, 0xd3, 0xf2, 0xf4, 0x33, 0x5f, - 0x5e, 0xae, 0x8e, 0xe8, 0xbe, 0x20, 0x4e, 0x92, 0x5a, 0x49, 0x13, 0xab, 0x17, 0xd1, 0x9c, 0x89, - 0xe8, 0x93, 0x3e, 0x8e, 0x44, 0xbe, 0xa4, 0x49, 0x22, 0x60, 0xa8, 0xdc, 0xf4, 0x4f, 0xb8, 0xc5, - 0xaa, 0xa8, 0x1b, 0xbf, 0xd1, 0x1b, 0xbf, 0x41, 0xc6, 0xe1, 0x00, 0x52, 0x14, 0x14, 0x4f, 0xc6, - 0x21, 0x81, 0xc3, 0x02, 0x1d, 0x28, 0x74, 0xe5, 0x26, 0x00, 0xe2, 0x26, 0xd4, 0xe4, 0xc4, 0xe7, - 0x09, 0x3e, 0x66, 0x1c, 0x0e, 0x1c, 0x0e, 0x67, 0xe2, 0x01, 0x88, 0x53, 0xab, 0x1a, 0xd1, 0xb8, - 0x58, 0xcf, 0xf3, 0x21, 0x0b, 0xe6, 0x2e, 0x89, 0x61, 0x23, 0x95, 0x19, 0x28, 0x2b, 0x13, 0x08, - 0x98, 0xd4, 0x91, 0x6c, 0x7c, 0x6a, 0xb1, 0x21, 0x10, 0xa5, 0xf0, 0x05, 0x86, 0x13, 0xe3, 0xc5, - 0x83, 0x87, 0x0d, 0x01, 0x2a, 0x2f, 0x00, 0x1a, 0x5c, 0x23, 0xb5, 0x2c, 0x19, 0x60, 0x03, 0x0b, - 0x00, 0x34, 0x2c, 0x00, 0x69, 0x45, 0x15, 0xbf, 0xc1, 0x4d, 0xc4, 0xd8, 0xf9, 0x83, 0x74, 0xfd, - 0x05, 0xe0, 0x16, 0x93, 0x80, 0x39, 0x33, 0x0e, 0x0e, 0x16, 0x33, 0x0f, 0x40, 0x5d, 0x32, 0xdf, - 0x3f, 0xc4, 0x08, 0x0a, 0x14, 0x3e, 0x12, 0x8d, 0xd7, 0x1c, 0x1f, 0x1b, 0x0b, 0x51, 0xcf, 0x85, - 0xb2, 0xc5, 0x0c, 0x60, 0x72, 0x7f, 0x10, 0x30, 0x56, 0xa5, 0x74, 0xa3, 0x9f, 0x5f, 0xfe, 0x32, - 0x7e, 0xcb, 0xa3, 0xdb, 0x24, 0x6c, 0x12, 0x02, 0x16, 0x22, 0xb6, 0xc1, 0x65, 0x77, 0x48, 0xe7, - 0x96, 0xb8, 0xfe, 0x3c, 0x62, 0x8b, 0xc5, 0xc6, 0x2c, 0xa8, 0xac, 0x4b, 0x02, 0x42, 0xbb, 0x64, - 0xce, 0x4c, 0x4c, 0x9d, 0x05, 0xc8, 0x2f, 0xae, 0x53, 0xf5, 0xef, 0xab, 0xc2, 0xbc, 0xf1, 0xd5, - 0x77, 0x7f, 0xfa, 0xc5, 0x27, 0x44, 0x2a, 0x7d, 0x4e, 0x95, 0xc2, 0x47, 0xda, 0x6b, 0x69, 0xac, - 0x20, 0x08, 0x45, 0x04, 0xad, 0x9a, 0x0d, 0x65, 0x29, 0x35, 0x0e, 0xd5, 0x0a, 0x10, 0x0d, 0x47, - 0x49, 0x92, 0x90, 0x01, 0xd3, 0x12, 0x08, 0x02, 0x91, 0xeb, 0x4b, 0x06, 0x70, 0x00, 0xf3, 0x80, - 0x18, 0x1c, 0x00, 0xe1, 0x9c, 0x37, 0x24, 0x3a, 0x0f, 0x1c, 0x80, 0x99, 0x13, 0x80, 0x0e, 0x81, - 0x47, 0x7e, 0x0a, 0xa0, 0x6a, 0x4e, 0xdb, 0x02, 0xc9, 0x90, 0x48, 0xc8, 0x58, 0x12, 0x4b, 0x0b, - 0x58, 0x00, 0x08, 0x01, 0x10, 0x75, 0x46, 0xc0, 0x00, 0x40, 0x20, 0x07, 0x7a, 0xd4, 0x71, 0xc3, - 0xa8, 0xa0, 0x08, 0x26, 0x50, 0x6b, 0x08, 0x53, 0x34, 0x8d, 0x46, 0x29, 0xca, 0xf9, 0x4b, 0x2b, - 0x8f, 0x5c, 0xbb, 0xcb, 0xc5, 0xc4, 0xf8, 0xea, 0xe5, 0x0f, 0xc8, 0x91, 0xa1, 0xc0, 0x00, 0x8f, - 0x81, 0x10, 0x8f, 0xd5, 0xbe, 0x36, 0x55, 0xf0, 0x36, 0x46, 0x26, 0x9f, 0xf8, 0x81, 0x21, 0x49, - 0x30, 0x00, 0x15, 0x32, 0x2a, 0x26, 0x80, 0xaa, 0x00, 0x6a, 0x78, 0x3d, 0xd7, 0x43, 0xdb, 0x3c, - 0x00, 0x1e, 0x51, 0x19, 0x82, 0x40, 0x00, 0x68, 0x4e, 0xd2, 0x83, 0x7c, 0x66, 0x84, 0x43, 0xbc, - 0x48, 0x80, 0xa4, 0x3e, 0x25, 0x24, 0xa9, 0xde, 0xce, 0xcc, 0x4a, 0x77, 0x76, 0xf1, 0x12, 0x2e, - 0x58, 0x0f, 0x2e, 0x20, 0x40, 0xc8, 0x81, 0xe7, 0x8f, 0x36, 0xbf, 0x0b, 0x6e, 0x5b, 0x8e, 0x19, - 0x8a, 0x33, 0x2c, 0x00, 0x09, 0xcf, 0x00, 0x02, 0x30, 0xa8, 0xca, 0x03, 0xf6, 0xa5, 0x9f, 0x10, - 0x14, 0x2d, 0xdd, 0x0e, 0x5c, 0x8e, 0xb1, 0xb7, 0x1d, 0x6b, 0x8a, 0xce, 0x71, 0xa7, 0xe2, 0x5f, - 0xb1, 0x8b, 0xd4, 0x98, 0x94, 0x13, 0x1d, 0xaf, 0xac, 0x12, 0xf4, 0x71, 0xd5, 0xf4, 0x66, 0xbe, - 0xb5, 0x2f, 0x27, 0x2d, 0x18, 0xc4, 0x75, 0x6a, 0x88, 0xc4, 0x75, 0x2a, 0xcf, 0x92, 0xe2, 0xb1, - 0x58, 0xaf, 0xd1, 0x32, 0xbe, 0x8a, 0x9d, 0x71, 0x20, 0x86, 0x8c, 0x94, 0x47, 0x0c, 0xf5, 0x60, - 0x48, 0x0a, 0x0e, 0x77, 0xb8, 0x38, 0xeb, 0x52, 0xd8, 0x00, 0x1b, 0x5a, 0x04, 0x1b, 0x62, 0x49, - 0x55, 0x0c, 0x6e, 0x58, 0x3e, 0xb8, 0x4b, 0x02, 0xeb, 0x94, 0x15, 0x42, 0xa4, 0x96, 0xe3, 0x12, - 0x24, 0x28, 0x47, 0xc0, 0x00, 0xbf, 0x16, 0x26, 0x11, 0x02, 0xa4, 0x2a, 0x80, 0x6a, 0x14, 0x1f, - 0x80, 0x02, 0x01, 0xc1, 0x39, 0x09, 0xb0, 0x00, 0x08, 0x0c, 0x87, 0x94, 0x00, 0x07, 0x80, 0x00, - 0x80, 0x78, 0xe5, 0x80, 0x8a, 0x06, 0xe4, 0xaa, 0x60, 0x00, 0x20, 0x03, 0xf2, 0x30, 0x15, 0x28, - 0x00, 0x01, 0x80, 0x0e, 0x6c, 0xf3, 0xc9, 0x4a, 0x1c, 0x05, 0x49, 0x83, 0xed, 0xa4, 0xc6, 0x01, - 0x76, 0x04, 0x94, 0x02, 0xd6, 0x8e, 0x13, 0x95, 0x7d, 0xf0, 0xde, 0x3e, 0x63, 0x16, 0x55, 0xa6, - 0x99, 0xd0, 0x70, 0xc6, 0x88, 0x62, 0x44, 0x05, 0x29, 0xc0, 0x68, 0x00, 0x08, 0x01, 0xd2, 0x16, - 0xc8, 0x0c, 0x01, 0x55, 0xd8, 0x00, 0x08, 0x00, 0xca, 0x55, 0xc0, 0x00, 0x40, 0x0f, 0x8d, 0x40, - 0x85, 0x48, 0xf0, 0x00, 0x3f, 0x1e, 0x36, 0x06, 0xb0, 0xc5, 0x00, 0x01, 0x00, 0x34, 0x87, 0xa1, - 0xc5, 0x96, 0x37, 0x13, 0x40, 0xe4, 0x0f, 0x01, 0xbe, 0x03, 0x8b, 0x90, 0x07, 0xb8, 0x5a, 0x80, - 0x78, 0x0a, 0xc0, 0x78, 0x3b, 0x01, 0xb8, 0x3f, 0x9c, 0x40, 0x64, 0x27, 0x2c, 0x1e, 0xad, 0x06, - 0xf7, 0xe1, 0x11, 0x01, 0x4b, 0xa8, 0xae, 0x2b, 0x7c, 0x42, 0xc3, 0x89, 0x05, 0x41, 0x6c, 0xe3, - 0x04, 0x0a, 0xbd, 0x9d, 0x01, 0x51, 0x40, 0x45, 0xaf, 0xcc, 0x66, 0xc3, 0x78, 0x2a, 0xdd, 0x4a, - 0x8f, 0xc4, 0x46, 0x14, 0x48, 0x38, 0x58, 0x37, 0x15, 0x96, 0xc5, 0x6e, 0x2b, 0x03, 0x40, 0x64, - 0x25, 0x14, 0x60, 0x20, 0x14, 0x56, 0x43, 0x58, 0x74, 0xc5, 0xe6, 0x35, 0x3e, 0xd5, 0x65, 0xe3, - 0x0a, 0x93, 0x95, 0xa5, 0x07, 0x9b, 0x0a, 0x89, 0xca, 0x27, 0x44, 0xe6, 0x01, 0xfd, 0xb3, 0xe6, - 0x5f, 0x9d, 0xfc, 0x7d, 0xdb, 0x4e, 0xee, 0x75, 0x2d, 0xf7, 0xb8, 0xde, 0x86, 0xa5, 0x47, 0xeb, - 0x55, 0xd4, 0xc6, 0xfa, 0xa5, 0x43, 0x78, 0x23, 0x23, 0xde, 0xc7, 0xd5, 0x8f, 0xac, 0x8e, 0x93, - 0x74, 0x5a, 0xac, 0x4f, 0x12, 0x20, 0x50, 0xe6, 0x69, 0xe3, 0x91, 0xd3, 0x83, 0xdb, 0xbf, 0x10, - 0x14, 0x31, 0xc0, 0x0f, 0x7c, 0x07, 0x9c, 0x3c, 0x9d, 0x59, 0x23, 0x9b, 0xd0, 0x4e, 0x03, 0x49, - 0x44, 0x98, 0xfa, 0xfd, 0x70, 0xb1, 0x9e, 0x3c, 0x51, 0x93, 0xb5, 0x1b, 0x36, 0x6d, 0x05, 0x36, - 0xd4, 0x45, 0x4c, 0xe9, 0xa1, 0x68, 0x3d, 0xf3, 0x7c, 0xf1, 0x03, 0x62, 0xd8, 0x46, 0x6b, 0x98, - 0x4b, 0x5e, 0x5b, 0x79, 0x67, 0xd9, 0xae, 0xf5, 0x47, 0x80, 0x32, 0xc1, 0xbc, 0x00, 0xf2, 0xa9, - 0xd2, 0x68, 0x11, 0xed, 0x83, 0xa8, 0x93, 0x9d, 0x89, 0x69, 0x02, 0x14, 0x6f, 0xa8, 0x95, 0xc1, - 0xaa, 0xc4, 0x0f, 0xdd, 0xf4, 0x3f, 0x7c, 0xd3, 0x35, 0x5f, 0xe2, 0x42, 0x95, 0xcd, 0xdf, 0x77, - 0x77, 0x71, 0x5d, 0xfb, 0xe3, 0x3b, 0x4f, 0x09, 0xb8, 0x90, 0xce, 0x3b, 0xc8, 0x3f, 0x4a, 0x7e, - 0x01, 0x84, 0xbf, 0x43, 0x6d, 0x55, 0xba, 0x7f, 0x49, 0x7d, 0xf3, 0xc2, 0x8d, 0x03, 0x5c, 0x60, - 0x58, 0x18, 0x9f, 0xec, 0x0f, 0x5c, 0x4e, 0xc1, 0x06, 0x78, 0x43, 0x4c, 0x29, 0x2f, 0x35, 0x68, - 0xb7, 0x37, 0x41, 0x5a, 0xf2, 0x04, 0x2f, 0x75, 0x9c, 0x9b, 0xc4, 0xf3, 0xc4, 0x89, 0x3d, 0x84, - 0xed, 0xd6, 0x19, 0xd6, 0xb9, 0x04, 0x08, 0x58, 0x9f, 0x05, 0x7e, 0x52, 0x86, 0x98, 0x4b, 0x4a, - 0x35, 0x43, 0xda, 0x3e, 0x82, 0x69, 0xda, 0xea, 0x74, 0xbe, 0xae, 0x02, 0x1c, 0xa6, 0x3b, 0x08, - 0x67, 0x63, 0xf2, 0xdc, 0xf4, 0xd7, 0x54, 0xeb, 0xc9, 0x77, 0xfd, 0x5f, 0xea, 0x95, 0x2e, 0x2b, - 0x9e, 0x9e, 0x76, 0x3d, 0x5a, 0x33, 0x82, 0xb2, 0x47, 0x46, 0x81, 0x7d, 0x42, 0x5f, 0xcb, 0x0b, - 0xbb, 0x9e, 0xf8, 0x2b, 0x21, 0xfd, 0x4e, 0xef, 0x96, 0xdb, 0x06, 0xcc, 0xc0, 0xda, 0x63, 0x96, - 0xb3, 0xcd, 0xff, 0x82, 0xb2, 0x3c, 0xfd, 0xf4, 0x6e, 0x9e, 0xcc, 0xb5, 0x14, 0xd6, 0x3d, 0xe7, - 0x63, 0xfc, 0xb7, 0x7a, 0x97, 0xc1, 0x2e, 0xf7, 0xba, 0x31, 0x24, 0x5b, 0x0f, 0x1d, 0x76, 0xfe, - 0x24, 0x14, 0xc5, 0xe4, 0x0f, 0x55, 0x60, 0xe4, 0x81, 0xd9, 0x65, 0x39, 0x97, 0x58, 0x28, 0x03, - 0x4f, 0x91, 0x62, 0x99, 0x8c, 0xc9, 0xd5, 0x53, 0x2c, 0x45, 0x1d, 0xfe, 0x5b, 0xe5, 0xeb, 0x8f, - 0x15, 0x87, 0x87, 0xb0, 0x9b, 0x92, 0xc6, 0xe3, 0xaa, 0x58, 0xf3, 0x6f, 0x94, 0xaf, 0x2d, 0xb8, - 0xae, 0x82, 0xa9, 0x63, 0x79, 0x8d, 0x3b, 0x13, 0xb0, 0xfa, 0xb2, 0x3f, 0xa0, 0x8b, 0x95, 0xc2, - 0x41, 0xa7, 0xbd, 0xdd, 0xdf, 0xc2, 0x7b, 0x9e, 0x96, 0xef, 0xf8, 0x50, 0x8a, 0xce, 0x64, 0x82, - 0x93, 0xe3, 0x45, 0xb9, 0x0b, 0x81, 0x32, 0xd3, 0xeb, 0x01, 0x20, 0x28, 0xb1, 0xe4, 0xa4, 0x60, - 0xad, 0x5e, 0x04, 0x8e, 0x5c, 0xe7, 0xa8, 0x2b, 0x32, 0x2f, 0x6f, 0x85, 0x09, 0xce, 0x17, 0x62, - 0x42, 0x55, 0x0b, 0x24, 0x3e, 0x9a, 0x68, 0x5e, 0xc1, 0xa8, 0x29, 0x4e, 0x9d, 0x8f, 0x13, 0xa3, - 0x6c, 0xf1, 0x00, 0xa6, 0x2e, 0x9c, 0xca, 0x79, 0x7c, 0xf7, 0xc6, 0x1c, 0x2a, 0x1f, 0x13, 0x9c, - 0x96, 0x00, 0x7a, 0xb0, 0xbc, 0xbd, 0x7d, 0xb9, 0x6b, 0xce, 0xa1, 0xeb, 0x16, 0x7b, 0xb4, 0xbd, - 0x5f, 0x88, 0x8c, 0x12, 0xf7, 0x15, 0xaa, 0xa4, 0xb4, 0xa6, 0x50, 0xc2, 0xca, 0xe2, 0x61, 0x13, - 0x88, 0xf9, 0x98, 0x17, 0x55, 0x55, 0x38, 0xf6, 0x72, 0xcd, 0x9f, 0x11, 0x04, 0xb4, 0x39, 0xd4, - 0x5c, 0xb9, 0x9e, 0x5f, 0x88, 0x10, 0xab, 0xab, 0xd3, 0xf1, 0x44, 0x7c, 0xbd, 0xb8, 0x87, 0xfe, - 0x41, 0x1b, 0xbf, 0x82, 0x33, 0xbc, 0x57, 0x78, 0x53, 0xa1, 0x35, 0x2f, 0x45, 0x38, 0xab, 0xa2, - 0x3d, 0x75, 0x79, 0x7a, 0xbf, 0xd7, 0x2a, 0xea, 0xe7, 0xd1, 0x1c, 0xbe, 0x08, 0xad, 0xb6, 0x9e, - 0x39, 0xf3, 0x52, 0x54, 0x92, 0xf0, 0x55, 0x23, 0x2d, 0x20, 0xae, 0x5e, 0x99, 0x22, 0xa5, 0x54, - 0x4a, 0x3e, 0x92, 0x35, 0x4b, 0xe1, 0x43, 0x56, 0xbd, 0x99, 0x3e, 0xb2, 0xbc, 0x26, 0x1a, 0xc6, - 0x7f, 0x85, 0x30, 0x7b, 0x65, 0x99, 0xcb, 0x23, 0x09, 0x89, 0x63, 0x19, 0xb1, 0x55, 0x1d, 0x04, - 0xb0, 0xbf, 0x52, 0xe3, 0x5a, 0x02, 0xa4, 0x5d, 0xf1, 0xc5, 0x66, 0x2c, 0x65, 0x93, 0xf7, 0x16, - 0xaa, 0xa2, 0x34, 0xfc, 0x10, 0x94, 0x41, 0xa0, 0x8d, 0x0b, 0xcb, 0xdf, 0xc2, 0x02, 0xa2, 0xea, - 0xaa, 0xf6, 0xbc, 0x40, 0x99, 0x28, 0x59, 0xc8, 0x9f, 0x43, 0xc8, 0xc2, 0x3e, 0x20, 0xc5, 0x14, - 0x62, 0xb1, 0x46, 0x20, 0x58, 0xe2, 0x04, 0xee, 0xe5, 0xa3, 0xfb, 0xae, 0x43, 0x3b, 0xbb, 0xf8, - 0xf1, 0x57, 0x4a, 0x7a, 0x3b, 0x8a, 0x3d, 0xdf, 0xc2, 0x1d, 0xd2, 0x12, 0x30, 0x2d, 0xbf, 0x0b, - 0x6f, 0x10, 0xe3, 0x84, 0xfa, 0x1b, 0xdf, 0x45, 0xcb, 0xeb, 0x15, 0xf4, 0x48, 0x71, 0x3d, 0x62, - 0x93, 0x9e, 0xa9, 0x5a, 0x36, 0xff, 0xa3, 0x23, 0xfe, 0x0b, 0x09, 0xbb, 0xbb, 0xbd, 0xe9, 0x70, - 0xfa, 0x2b, 0xd6, 0x20, 0x61, 0x45, 0xa8, 0x96, 0x55, 0xd6, 0x92, 0x4d, 0x03, 0x59, 0x96, 0xc6, - 0x38, 0x98, 0x50, 0x61, 0x3f, 0x26, 0x89, 0x61, 0x7d, 0x90, 0x28, 0x90, 0xe9, 0xcc, 0xdf, 0x80, - 0x48, 0x39, 0x10, 0xe5, 0x03, 0xea, 0x05, 0xbd, 0x03, 0x8c, 0x82, 0x82, 0x0e, 0x4d, 0x27, 0x8f, - 0x87, 0x32, 0x00, 0x8f, 0xe2, 0xa0, 0x8e, 0x30, 0x9d, 0xd5, 0x57, 0xfb, 0xe3, 0x2c, 0x88, 0xb2, - 0x38, 0xe9, 0x7b, 0xaa, 0x42, 0x5c, 0xed, 0xde, 0xc7, 0x4a, 0x61, 0x90, 0xcf, 0x39, 0x17, 0xdd, - 0x07, 0x86, 0x77, 0xf6, 0x6c, 0x9f, 0x18, 0x26, 0xd3, 0x57, 0x73, 0x55, 0x55, 0x07, 0xf7, 0xf4, - 0x90, 0x5f, 0x15, 0x62, 0x7c, 0x6e, 0xb4, 0xbd, 0xbe, 0x24, 0x25, 0x5d, 0x56, 0xdf, 0x88, 0x12, - 0x77, 0xdf, 0x77, 0xf1, 0xfa, 0x4b, 0x27, 0xae, 0xb2, 0x9c, 0xf0, 0x4d, 0x2f, 0x77, 0x70, 0xc5, - 0xa2, 0x01, 0xb0, 0x40, 0x5a, 0x21, 0xef, 0xbb, 0x49, 0x10, 0x41, 0xd7, 0x16, 0x59, 0x58, 0x95, - 0x89, 0xd8, 0x9d, 0x85, 0x13, 0x04, 0xa3, 0x2b, 0x46, 0x77, 0x0b, 0x3d, 0x5f, 0x89, 0x82, 0xa2, - 0x05, 0xab, 0x53, 0x32, 0x73, 0x51, 0xa5, 0x17, 0xdf, 0xe2, 0xe2, 0x58, 0x0a, 0xdc, 0x56, 0xdc, - 0x56, 0x5c, 0x13, 0xd5, 0x88, 0xbe, 0x60, 0x89, 0xd8, 0x9d, 0x8b, 0xea, 0x7b, 0xea, 0x9d, 0x7a, - 0x3a, 0x74, 0xba, 0x21, 0x41, 0x5d, 0x19, 0xbe, 0xad, 0xf4, 0x57, 0x24, 0xe4, 0x14, 0xee, 0xf5, - 0x89, 0x1e, 0x41, 0x0c, 0x05, 0x5b, 0xd7, 0x57, 0x3c, 0x1f, 0xe2, 0x42, 0x85, 0x8e, 0xe0, 0x76, - 0x31, 0xac, 0x36, 0x9a, 0xb4, 0x2b, 0xa8, 0xa6, 0x2e, 0x29, 0x8b, 0xb7, 0x12, 0x20, 0x28, 0x73, - 0x6b, 0xe2, 0x5c, 0x14, 0x62, 0x19, 0x1c, 0xdb, 0x46, 0xc1, 0x07, 0x97, 0x9f, 0xec, 0xc3, 0xcd, - 0x16, 0x7b, 0x8f, 0xf8, 0x50, 0x8f, 0xde, 0x21, 0xe5, 0xc5, 0xc2, 0x03, 0x8b, 0x9e, 0x71, 0x38, - 0x13, 0x27, 0x68, 0x77, 0x4a, 0x20, 0xf8, 0x99, 0xf3, 0xb0, 0x03, 0x92, 0x3f, 0xe1, 0x42, 0x24, - 0x07, 0xbf, 0x87, 0x61, 0xa3, 0xb0, 0x31, 0x89, 0x03, 0x80, 0xf1, 0x60, 0x7a, 0xd7, 0x2d, 0x9d, - 0xf9, 0x76, 0x2b, 0xbd, 0xf2, 0xe2, 0x63, 0x24, 0x80, 0xe8, 0x58, 0xdf, 0xd9, 0xcf, 0x71, 0xf0, - 0x9c, 0xa2, 0xe9, 0x18, 0xf3, 0x62, 0x32, 0xf3, 0xb0, 0xc6, 0x6f, 0x13, 0x1f, 0xe4, 0x25, 0xb2, - 0x38, 0xe4, 0xc9, 0x61, 0x84, 0x8b, 0xb6, 0x92, 0x45, 0x87, 0x2d, 0x40, 0x8e, 0xa6, 0x0f, 0x35, - 0x4a, 0xee, 0xec, 0x9c, 0x4c, 0x26, 0x24, 0x14, 0xa4, 0xce, 0x8c, 0x51, 0xbb, 0xf8, 0x98, 0x47, - 0x55, 0xbd, 0xf2, 0x2e, 0xbe, 0x24, 0x40, 0x9b, 0xcb, 0x8c, 0xdf, 0xfb, 0xf8, 0xfa, 0x56, 0xd4, - 0x7b, 0xb8, 0x4c, 0x31, 0x2c, 0x1c, 0xf2, 0xc9, 0x79, 0xb3, 0x89, 0x79, 0xf1, 0xff, 0x09, 0xdd, - 0xdd, 0xdd, 0xdd, 0xfc, 0xd7, 0xbf, 0x13, 0x13, 0xb5, 0x0d, 0x50, 0xcb, 0xae, 0x22, 0x0b, 0x27, - 0xf3, 0xf7, 0x3e, 0x3e, 0xdd, 0xda, 0x2d, 0xf7, 0xc1, 0x25, 0x6a, 0xaf, 0xc4, 0xc1, 0x69, 0x82, - 0x96, 0x43, 0xd6, 0x6a, 0xef, 0x7e, 0xf8, 0x4c, 0xc1, 0x57, 0xd6, 0x5b, 0x14, 0x62, 0xb1, 0x5b, - 0x8a, 0xfc, 0xa7, 0x77, 0x14, 0x65, 0xce, 0x22, 0x6e, 0xf7, 0xba, 0xe6, 0x08, 0x9f, 0x0f, 0x86, - 0xc7, 0x62, 0xe8, 0x43, 0x1f, 0x5d, 0x4b, 0xd7, 0x2a, 0xe1, 0x29, 0xe8, 0xb9, 0x69, 0xd7, 0x5c, - 0xe7, 0xd7, 0x39, 0xf5, 0xce, 0x7d, 0x7a, 0x7e, 0x09, 0x0a, 0x7c, 0x3e, 0x1b, 0x1d, 0x85, 0x4f, - 0x82, 0x11, 0x4a, 0xb5, 0x1d, 0xe3, 0xc1, 0x34, 0xf0, 0xd2, 0x2b, 0x14, 0xe8, 0xc7, 0x6a, 0xc4, - 0x0c, 0x10, 0xee, 0xee, 0xf7, 0x8a, 0xdd, 0xdd, 0xef, 0x86, 0xc8, 0x24, 0x01, 0x1e, 0x8d, 0x59, - 0xbb, 0xfb, 0xbc, 0x56, 0xa2, 0xb5, 0x79, 0x7b, 0x89, 0x7c, 0x96, 0xc4, 0x1e, 0x4c, 0xad, 0x75, - 0xae, 0x11, 0x12, 0x14, 0x29, 0x38, 0x69, 0x24, 0xa5, 0x01, 0x61, 0xca, 0x42, 0x30, 0x79, 0x75, - 0x9f, 0x6b, 0x05, 0xe4, 0xed, 0x1e, 0xcb, 0x98, 0x1e, 0x3f, 0x11, 0x42, 0x74, 0x46, 0xbe, 0x24, - 0x28, 0x28, 0xb3, 0x9e, 0xe6, 0x80, 0x93, 0x70, 0xd1, 0x58, 0xe5, 0x5c, 0x4b, 0x92, 0x30, 0xd9, - 0x19, 0xa4, 0x69, 0xd0, 0x71, 0xb3, 0x58, 0xd9, 0x58, 0xd5, 0x0f, 0x78, 0x91, 0x13, 0x96, 0xd5, - 0x15, 0x5d, 0x7e, 0x14, 0x28, 0xeb, 0xf6, 0x0e, 0x3f, 0x6f, 0x39, 0x63, 0x39, 0x61, 0xc4, 0x2c, - 0x1f, 0x60, 0x56, 0x5e, 0x60, 0xe6, 0x8b, 0x75, 0x3b, 0xfc, 0x21, 0x79, 0xfb, 0xb5, 0x41, 0xec, - 0x0b, 0x65, 0xb7, 0x8a, 0xc4, 0x34, 0xe2, 0x41, 0x48, 0x9b, 0x9f, 0xee, 0x87, 0x8e, 0x63, 0x64, - 0xa7, 0xb8, 0x98, 0x2c, 0xd5, 0x2e, 0x5e, 0xc7, 0x8a, 0xdc, 0xe9, 0xf3, 0x72, 0x7f, 0xb8, 0xac, - 0x4c, 0xc5, 0x5f, 0x0e, 0x20, 0x14, 0x10, 0xdc, 0x47, 0xac, 0xe3, 0x08, 0x3f, 0x25, 0xe1, 0x03, - 0x87, 0xa3, 0x2d, 0x56, 0x8c, 0x7b, 0xc7, 0x8d, 0x8e, 0xf9, 0x66, 0xc0, 0xaf, 0xcc, 0xc6, 0x66, - 0x26, 0x3a, 0x5c, 0xb1, 0xb6, 0x8a, 0x67, 0xa0, 0xfd, 0x80, 0xa8, 0xfc, 0xec, 0x43, 0xed, 0x70, - 0x3b, 0xfe, 0x1c, 0x6b, 0xf8, 0x50, 0x9a, 0xc9, 0x33, 0x77, 0x19, 0xf6, 0xda, 0x23, 0x46, 0x4a, - 0x12, 0x92, 0xff, 0x05, 0x43, 0x04, 0x3c, 0xb1, 0xee, 0x36, 0xb9, 0x6c, 0x57, 0x15, 0xf7, 0xf8, - 0x28, 0x28, 0xad, 0xc5, 0x6e, 0xf7, 0xeb, 0xe6, 0x2a, 0x6b, 0x50, 0x8f, 0x58, 0x2b, 0xab, 0xfd, - 0x63, 0xc9, 0xd5, 0xef, 0xa2, 0xf8, 0xae, 0x2a, 0xb2, 0xaa, 0xd9, 0xa0, 0x68, 0x47, 0xe0, 0xb8, - 0xc7, 0xbf, 0x4c, 0x6f, 0x7f, 0xab, 0xaf, 0x78, 0x91, 0x86, 0x2d, 0x15, 0xca, 0x2e, 0x36, 0x96, - 0xfc, 0x36, 0x35, 0x2d, 0x4a, 0x94, 0x9e, 0x55, 0x7f, 0x9c, 0x4c, 0x14, 0x89, 0xba, 0x6f, 0x5a, - 0x97, 0x96, 0xdb, 0xcb, 0x6d, 0xc4, 0xc2, 0x85, 0xea, 0x42, 0x0a, 0xb3, 0x97, 0xeb, 0x24, 0x62, - 0x6e, 0xcc, 0x1d, 0xf3, 0xbc, 0x40, 0xc1, 0x4b, 0x95, 0x99, 0x61, 0x98, 0x53, 0xa9, 0x6e, 0xff, - 0xd4, 0xd0, 0xac, 0xa9, 0xa5, 0xac, 0xfc, 0x47, 0x55, 0x13, 0xe4, 0xe5, 0xf1, 0xf8, 0x50, 0xf8, - 0x9b, 0x11, 0x36, 0x37, 0x77, 0x4e, 0xd3, 0x71, 0x58, 0xad, 0xc5, 0x6f, 0xc4, 0x88, 0x05, 0x62, - 0x45, 0x62, 0xb4, 0xc5, 0x18, 0xa0, 0xc5, 0x18, 0xa0, 0x31, 0x20, 0x90, 0x45, 0x1b, 0x96, 0x0c, - 0xfd, 0xfe, 0x10, 0x23, 0x8a, 0xdd, 0xd8, 0xce, 0xcf, 0x3f, 0x3e, 0x78, 0x91, 0x23, 0x0a, 0xef, - 0xb4, 0xf5, 0xcb, 0xf4, 0x9d, 0xf1, 0x1e, 0x27, 0xe2, 0x7e, 0x62, 0xba, 0xab, 0xf9, 0x48, 0x76, - 0x1d, 0xec, 0x5f, 0x82, 0xe1, 0x5a, 0xae, 0xab, 0x5f, 0x29, 0x5e, 0x5c, 0x4b, 0x13, 0xe1, 0x01, - 0x03, 0x04, 0xad, 0x8c, 0x57, 0xe3, 0x94, 0x46, 0xf8, 0xa8, 0x5b, 0x23, 0xa8, 0x39, 0xaa, 0x04, - 0x35, 0xd2, 0xa6, 0x1e, 0xb3, 0xc2, 0x35, 0x7d, 0xbf, 0xb2, 0x15, 0xc3, 0x11, 0x54, 0x79, 0xf1, - 0x0b, 0x0d, 0xf8, 0xcb, 0x36, 0x62, 0x76, 0x4b, 0x04, 0x1e, 0xfa, 0x38, 0x9e, 0x3b, 0x37, 0x63, - 0x6d, 0x1b, 0x33, 0xc2, 0xe3, 0x07, 0xf1, 0xb7, 0x89, 0x7c, 0x4b, 0x8c, 0x76, 0xb3, 0xf9, 0x12, - 0xff, 0x82, 0x88, 0x91, 0x84, 0xb6, 0xf9, 0xfc, 0xc9, 0x09, 0x74, 0x25, 0xcf, 0x9b, 0x96, 0xda, - 0x27, 0x21, 0x55, 0xdd, 0x57, 0x58, 0xbe, 0x4b, 0xba, 0xaa, 0xeb, 0x17, 0xc6, 0x9a, 0xaa, 0x6c, - 0x97, 0xe8, 0x93, 0x55, 0x37, 0x1c, 0x57, 0x79, 0x40, 0xcd, 0xd1, 0x03, 0x2d, 0xff, 0xc7, 0xdd, - 0x2c, 0xfc, 0xfd, 0xf4, 0x95, 0x09, 0x17, 0x82, 0x4c, 0xbd, 0xf7, 0xf8, 0x27, 0xa7, 0x5a, 0x34, - 0x68, 0xd1, 0xbb, 0xc4, 0x0c, 0x10, 0x5b, 0x3c, 0x52, 0x3d, 0x6e, 0x84, 0x5b, 0xc4, 0x2c, 0x0c, - 0xe0, 0xe1, 0x60, 0x56, 0x7c, 0x46, 0xe1, 0xe2, 0x22, 0x06, 0xbf, 0xf6, 0x6e, 0xaa, 0x5e, 0xbc, - 0x40, 0x27, 0xac, 0x6b, 0x6c, 0x5d, 0x2e, 0x5f, 0x05, 0xc4, 0x3f, 0x99, 0xba, 0x6a, 0x9a, 0xa6, - 0xff, 0x25, 0xdc, 0x56, 0x2b, 0xc4, 0x45, 0x6f, 0x74, 0xc5, 0x1a, 0x62, 0x8f, 0x08, 0x02, 0x10, - 0xa1, 0x5e, 0xf1, 0x00, 0x2c, 0x15, 0x74, 0x01, 0x65, 0x5f, 0xda, 0xbb, 0x4b, 0xaa, 0xc9, 0xce, - 0x47, 0x87, 0x13, 0xaf, 0x04, 0x77, 0xdc, 0x9f, 0x84, 0x23, 0x8a, 0x28, 0xc4, 0x34, 0x14, 0x19, - 0xef, 0x2d, 0x8a, 0xcb, 0x62, 0xb7, 0x2d, 0x96, 0x07, 0xb0, 0xe2, 0x50, 0x8e, 0xf8, 0x28, 0x39, - 0xa8, 0xc0, 0x95, 0x72, 0x53, 0x1c, 0xe2, 0x60, 0x86, 0x7f, 0xfb, 0x89, 0x12, 0x12, 0x38, 0x8f, - 0x8c, 0x9d, 0xbc, 0x56, 0x28, 0xcb, 0xcb, 0x6b, 0x90, 0x73, 0xbb, 0xfc, 0x15, 0x89, 0x43, 0xd4, - 0xfb, 0x40, 0xbf, 0xa1, 0xf1, 0xb6, 0x54, 0xc6, 0x86, 0x47, 0x19, 0x74, 0x68, 0xfb, 0x57, 0xfe, - 0x0a, 0x88, 0x82, 0x1e, 0x97, 0xab, 0xcb, 0xa9, 0xdb, 0xc7, 0xdc, 0x4c, 0x24, 0x77, 0x6f, 0x72, - 0xdb, 0x8a, 0xc4, 0xbc, 0xb7, 0xe3, 0x2d, 0x0b, 0x44, 0xb5, 0xd6, 0x59, 0xea, 0x69, 0x1c, 0xad, - 0x18, 0xcf, 0x9d, 0xb4, 0xf0, 0x9f, 0x2b, 0x13, 0xdb, 0x43, 0xfe, 0x1f, 0xd3, 0xc1, 0x55, 0xef, - 0xb6, 0xf1, 0x75, 0xae, 0xbe, 0x3c, 0x63, 0xbd, 0xf7, 0x77, 0x7b, 0xb9, 0x7a, 0x13, 0xf0, 0xbb, - 0xbe, 0xfe, 0xb9, 0xd3, 0xf4, 0x4a, 0x8d, 0xeb, 0xaf, 0x82, 0x39, 0x39, 0x8c, 0xa0, 0xa8, 0x44, - 0xab, 0xb2, 0xe5, 0xa3, 0xf8, 0x24, 0x8b, 0xc5, 0xd6, 0xef, 0x85, 0x05, 0x37, 0x96, 0xdd, 0xf7, - 0x97, 0x99, 0x2d, 0xb1, 0x9c, 0x4a, 0xc1, 0xe3, 0xc4, 0x3d, 0xf0, 0x9b, 0xc4, 0x04, 0x07, 0x8c, - 0xa0, 0xcb, 0x67, 0x62, 0xf5, 0x68, 0x4a, 0xe9, 0xae, 0x36, 0xb2, 0x98, 0x81, 0x20, 0x88, 0x42, - 0x8b, 0xac, 0x89, 0xe2, 0x41, 0x39, 0x45, 0x18, 0xa3, 0x15, 0x8a, 0x37, 0x15, 0x88, 0x54, 0x16, - 0xf9, 0x57, 0x85, 0x28, 0x47, 0x50, 0x9d, 0xa3, 0x2f, 0x4e, 0xe6, 0x5d, 0x3c, 0xe5, 0x41, 0x6d, - 0xc5, 0x63, 0xff, 0x12, 0x11, 0x0a, 0x44, 0x03, 0x82, 0x83, 0x3d, 0xf6, 0xdb, 0xb7, 0x2d, 0x85, - 0x56, 0x22, 0x58, 0x16, 0x0d, 0xad, 0x76, 0x32, 0xec, 0xe7, 0xf8, 0x47, 0x3b, 0x12, 0x8b, 0x8b, - 0xc8, 0x5b, 0x62, 0x2f, 0xaf, 0x10, 0x0a, 0x4a, 0x2b, 0x71, 0x5b, 0x8a, 0xc5, 0x62, 0xb1, 0x5b, - 0xb8, 0xad, 0xdf, 0xc4, 0x02, 0xe9, 0x5c, 0x80, 0x7b, 0xec, 0xeb, 0x50, 0x56, 0xbd, 0xe2, 0x19, - 0x94, 0xf9, 0xf1, 0x02, 0xca, 0xf7, 0x7b, 0xdf, 0x10, 0x20, 0x11, 0x49, 0xe4, 0xfe, 0xf8, 0x4e, - 0xee, 0xaa, 0xee, 0xee, 0xb8, 0x52, 0xed, 0x90, 0x46, 0xcf, 0x82, 0xb9, 0x3e, 0x1d, 0x8c, 0x9e, - 0xec, 0x42, 0x76, 0x1e, 0x85, 0x1f, 0xf1, 0xf2, 0x19, 0x78, 0x80, 0xbc, 0x47, 0x3d, 0x10, 0x14, - 0x1f, 0xc6, 0xc6, 0x32, 0x5a, 0x30, 0x8b, 0x43, 0xda, 0x1e, 0x1f, 0x10, 0x14, 0xe6, 0xdc, 0x72, - 0xe3, 0xf1, 0xe4, 0xf7, 0x37, 0xee, 0xa1, 0xd7, 0x8c, 0x5d, 0x01, 0xd4, 0x19, 0x15, 0x4f, 0xf0, - 0x53, 0xcb, 0xc9, 0xf7, 0x15, 0x8a, 0xde, 0x17, 0x73, 0xa1, 0xc7, 0xe1, 0x39, 0x51, 0x0d, 0x37, - 0x45, 0xab, 0x4e, 0xa4, 0xe6, 0x14, 0xf9, 0x69, 0xe8, 0xa3, 0xe9, 0x3a, 0x2c, 0x55, 0xd5, 0x8f, - 0x82, 0x3b, 0xee, 0xc1, 0x74, 0x67, 0xbe, 0xb5, 0x5d, 0x62, 0x93, 0xad, 0x49, 0xc8, 0x25, 0x8e, - 0x76, 0x4a, 0xcb, 0xe4, 0x23, 0xeb, 0xe0, 0x90, 0x8b, 0x5e, 0xb8, 0x81, 0x20, 0xb0, 0xaa, 0xad, - 0x8b, 0xde, 0x86, 0xdd, 0xbf, 0x5f, 0x11, 0xad, 0x54, 0x98, 0x97, 0xc4, 0x02, 0xa1, 0x13, 0xbb, - 0x7b, 0xbc, 0xbd, 0x32, 0xdb, 0xfc, 0xa2, 0x6a, 0xc2, 0x6f, 0x12, 0x20, 0x15, 0x4f, 0xdd, 0xe7, - 0x82, 0x51, 0x46, 0x98, 0xad, 0xdb, 0x47, 0x78, 0x81, 0x20, 0x9e, 0x9e, 0x5f, 0x72, 0xb3, 0x8e, - 0x6f, 0x12, 0x0b, 0x6a, 0xb5, 0x79, 0x58, 0xff, 0xc4, 0x0f, 0xd1, 0xb1, 0xb1, 0xb1, 0xde, 0xe2, - 0xb7, 0x77, 0x7e, 0x20, 0x17, 0x1c, 0x42, 0x20, 0x25, 0xbb, 0x15, 0x9d, 0x80, 0xab, 0x42, 0x32, - 0xe6, 0x4f, 0xfc, 0x40, 0x52, 0xee, 0x2b, 0x0d, 0x08, 0x4c, 0x05, 0x62, 0xbb, 0x76, 0xb0, 0x7a, - 0x90, 0x8e, 0xf0, 0x03, 0x37, 0x02, 0x7f, 0xd0, 0xaf, 0xa2, 0xfb, 0x89, 0x8f, 0x21, 0x23, 0xad, - 0x0e, 0x4a, 0x21, 0xf9, 0x73, 0xc4, 0xfd, 0x5d, 0xe2, 0x7e, 0x42, 0x37, 0x6f, 0xe2, 0xf6, 0x64, - 0xca, 0x15, 0xc7, 0x63, 0x98, 0x6f, 0xc6, 0x1e, 0x71, 0x05, 0xa1, 0xbe, 0xc6, 0x79, 0x06, 0xd8, - 0x66, 0xcf, 0xdb, 0x8f, 0x18, 0x2c, 0x17, 0xcd, 0x18, 0x43, 0xc2, 0xcd, 0xe1, 0x4b, 0xdd, 0xd0, - 0x41, 0x57, 0xce, 0xc3, 0x17, 0xa4, 0x25, 0x4d, 0x9b, 0xc2, 0xe0, 0x79, 0xd2, 0x17, 0xbf, 0xc6, - 0x6d, 0xc8, 0x91, 0x33, 0x78, 0x7f, 0x4c, 0xe8, 0x5a, 0xf1, 0x2a, 0x79, 0x98, 0x47, 0x5b, 0x70, - 0xa7, 0x19, 0x16, 0xc3, 0xa1, 0xb8, 0x9b, 0x2b, 0x37, 0x81, 0x58, 0x72, 0x20, 0xba, 0xef, 0x04, - 0x25, 0xa1, 0x56, 0xec, 0xb5, 0xb1, 0xf0, 0x81, 0x31, 0xdf, 0x8a, 0x36, 0x3d, 0x3a, 0xce, 0x90, - 0xb6, 0xd0, 0xee, 0x9a, 0x0f, 0xcb, 0x56, 0xb5, 0x38, 0x6a, 0x03, 0xc4, 0x08, 0xbe, 0x1e, 0x18, - 0xef, 0x7c, 0x6d, 0x72, 0xde, 0x25, 0x80, 0xc8, 0x71, 0x93, 0x0e, 0x18, 0x3a, 0x05, 0xe5, 0xe8, - 0xaf, 0xf4, 0x57, 0xfa, 0xbd, 0xf5, 0xcc, 0x7d, 0x5e, 0xba, 0xbc, 0xfd, 0x5e, 0x5e, 0x6e, 0xd9, - 0x59, 0xf0, 0xe9, 0x23, 0x58, 0x3a, 0x48, 0x99, 0xf7, 0x0d, 0x9c, 0x21, 0x0f, 0x5f, 0x16, 0x1c, - 0x24, 0x1d, 0x99, 0x60, 0x85, 0x02, 0xef, 0xd6, 0xad, 0xcf, 0xae, 0x24, 0x5c, 0x2b, 0x32, 0x5e, - 0xa2, 0x70, 0x97, 0xc8, 0x61, 0x0f, 0x5e, 0x6c, 0x19, 0x9c, 0x6b, 0x1e, 0x08, 0xcd, 0x5a, 0xfb, - 0xc4, 0x84, 0x85, 0xb8, 0xad, 0xc5, 0x72, 0x45, 0x1d, 0x78, 0x98, 0xbb, 0xca, 0xc4, 0x43, 0xc5, - 0x6e, 0x2b, 0xf0, 0x57, 0x71, 0x58, 0x95, 0x82, 0xde, 0xda, 0x52, 0xf1, 0x5b, 0xbe, 0x6f, 0x10, - 0x09, 0x23, 0xa8, 0x0b, 0x76, 0x2b, 0xe3, 0xbf, 0x05, 0x37, 0xa6, 0xcd, 0x09, 0xac, 0xb7, 0x5b, - 0x8a, 0xdd, 0xff, 0x51, 0x02, 0x41, 0x2c, 0x56, 0xe2, 0x51, 0x01, 0x2d, 0xc1, 0x36, 0x60, 0xbb, - 0xd9, 0xe5, 0xf8, 0xbb, 0x8e, 0xae, 0x73, 0x76, 0xcb, 0xfd, 0x90, 0x56, 0xef, 0x5c, 0x65, 0xb4, - 0x53, 0xcd, 0x52, 0x89, 0x5d, 0xe6, 0x93, 0xde, 0x00, 0x01, 0xc6, 0x32, 0xfc, 0x61, 0x6d, 0xc6, - 0xbd, 0xd2, 0x64, 0x83, 0xaf, 0xd6, 0xda, 0x23, 0x55, 0xcd, 0x00, 0xed, 0xca, 0xf1, 0x30, 0x86, - 0x3a, 0xf0, 0xc2, 0x4c, 0x6f, 0x18, 0x77, 0x39, 0x8b, 0xb7, 0xc2, 0x34, 0x4f, 0x12, 0x20, 0x8a, - 0x81, 0xd8, 0xf5, 0xed, 0x96, 0x54, 0x1d, 0xfc, 0x23, 0x80, 0x65, 0x18, 0x61, 0xa1, 0xba, 0x4e, - 0xf9, 0x24, 0xbf, 0x20, 0x93, 0xec, 0xa9, 0x36, 0xdf, 0xc2, 0x9e, 0x38, 0xb7, 0x1a, 0xd0, 0x7c, - 0x42, 0x40, 0x3e, 0x99, 0xcc, 0xd8, 0x71, 0xd1, 0x06, 0xfb, 0xb4, 0xb9, 0x4f, 0x84, 0x72, 0x91, - 0x77, 0xc0, 0x63, 0x2d, 0x4a, 0x23, 0xe1, 0x73, 0xb1, 0x8e, 0xe5, 0x9d, 0x93, 0xe3, 0x1a, 0x9a, - 0xcb, 0xd7, 0x51, 0x7c, 0x11, 0x0c, 0xb6, 0xb1, 0xf7, 0xc1, 0x0f, 0xbb, 0xbc, 0x9c, 0xc2, 0x6b, - 0x55, 0x88, 0x0a, 0x11, 0x56, 0xd1, 0x3a, 0xa1, 0x3e, 0x51, 0xa3, 0xaf, 0x01, 0xb6, 0x0c, 0xcc, - 0x5b, 0xc7, 0x71, 0x3f, 0x10, 0x8e, 0xf5, 0x88, 0x77, 0x77, 0x2a, 0x4f, 0x1f, 0x77, 0x77, 0x63, - 0x63, 0x63, 0x63, 0x71, 0x59, 0xd8, 0x6f, 0x58, 0x83, 0x65, 0x66, 0xbe, 0x22, 0x5f, 0x6e, 0x21, - 0xc3, 0xa8, 0x6f, 0x6f, 0x6f, 0xf3, 0x6a, 0xab, 0xe3, 0x37, 0x2e, 0xed, 0xde, 0x72, 0xc6, 0x33, - 0x77, 0xd9, 0x3f, 0x10, 0x33, 0x2e, 0x5d, 0xfe, 0x7b, 0x07, 0x6d, 0xfc, 0x08, 0xea, 0x8d, 0x16, - 0xc3, 0x10, 0x20, 0x61, 0x51, 0x39, 0x20, 0x7b, 0x4c, 0xf0, 0x43, 0x5e, 0x6c, 0x3a, 0xc3, 0x7d, - 0xb7, 0xfb, 0x9c, 0x47, 0xc7, 0x59, 0x40, 0xc7, 0x5f, 0x27, 0x4c, 0x7b, 0xb4, 0xed, 0xa7, 0xe2, - 0x15, 0xfe, 0x32, 0x78, 0x6e, 0xd0, 0xc7, 0x83, 0x6e, 0xab, 0x1a, 0x47, 0x27, 0x56, 0x5e, 0x70, - 0x8a, 0x9a, 0x5e, 0xa2, 0xed, 0xf8, 0xcd, 0x34, 0x4e, 0x7a, 0xfc, 0x0d, 0x7d, 0x65, 0x3e, 0x13, - 0x8d, 0xda, 0xbb, 0xea, 0xff, 0xbd, 0x0e, 0xc3, 0x30, 0x87, 0x88, 0x08, 0xc5, 0xc5, 0xc5, 0xc9, - 0x41, 0xa6, 0x87, 0xd3, 0x67, 0xb3, 0x63, 0x7f, 0x71, 0x58, 0xac, 0xb6, 0x2b, 0xf0, 0x9e, 0x4c, - 0x76, 0xe6, 0xae, 0x4e, 0x1e, 0x18, 0xe2, 0xbd, 0xee, 0x5d, 0x8a, 0xda, 0x91, 0x31, 0xb3, 0xc7, - 0xf3, 0x74, 0x7c, 0x25, 0xea, 0xc8, 0x8e, 0xae, 0xae, 0xae, 0x57, 0x05, 0x42, 0x33, 0x32, 0xdd, - 0x61, 0x7a, 0x12, 0x19, 0x31, 0x32, 0x0b, 0xf1, 0x1b, 0x1f, 0x05, 0x30, 0xff, 0x94, 0x67, 0x60, - 0xf7, 0xf7, 0x7e, 0x6f, 0x22, 0x49, 0xc4, 0x0f, 0x23, 0x0c, 0x20, 0xe5, 0xa3, 0xa9, 0x29, 0xfb, - 0x32, 0x1d, 0x0d, 0x3f, 0x45, 0xee, 0x26, 0x89, 0x5f, 0x04, 0xf6, 0xa5, 0xcc, 0x1f, 0xfb, 0x67, - 0xbe, 0x30, 0x8a, 0xab, 0x55, 0x8b, 0xc8, 0xbd, 0x1c, 0x5d, 0xbe, 0x22, 0xbd, 0xf0, 0x50, 0x5c, - 0xd5, 0xaa, 0xaa, 0xb1, 0x51, 0x02, 0x7e, 0x2c, 0xb5, 0x51, 0x76, 0xc5, 0xeb, 0xe0, 0xa0, 0xc2, - 0xf5, 0x5d, 0xcb, 0x8e, 0x7c, 0x20, 0x55, 0x5d, 0x77, 0xb6, 0xfc, 0x4c, 0x14, 0xc5, 0xe3, 0x0b, - 0xe9, 0xc4, 0xfb, 0x9f, 0xfa, 0xb6, 0xa7, 0x4f, 0x9a, 0xed, 0x8d, 0x84, 0x03, 0x3c, 0x48, 0x8b, - 0x5d, 0xdf, 0xbf, 0x10, 0x2c, 0xae, 0xf9, 0x12, 0x9e, 0xac, 0x96, 0x8e, 0x1f, 0x2c, 0x64, 0xd1, - 0x43, 0x71, 0x67, 0xcb, 0x88, 0x17, 0x44, 0x62, 0x63, 0x06, 0x95, 0xd3, 0x24, 0x15, 0x30, 0x85, - 0x40, 0xe8, 0xc0, 0xb8, 0x92, 0xca, 0xc1, 0xce, 0xb8, 0x42, 0xba, 0x11, 0xc4, 0x04, 0xe5, 0xa7, - 0xb3, 0x7c, 0xfc, 0xa3, 0x1f, 0x71, 0x3d, 0x1d, 0x8f, 0xab, 0x45, 0xf0, 0x52, 0x51, 0x9e, 0xbd, - 0x9c, 0xec, 0x39, 0x63, 0x3c, 0xb3, 0x53, 0x81, 0xdf, 0x82, 0x91, 0x94, 0x4a, 0x23, 0xd9, 0xe1, - 0xf0, 0x6a, 0x94, 0xc3, 0x62, 0x27, 0x27, 0x0f, 0x93, 0xfd, 0x15, 0x38, 0x78, 0x2e, 0xbd, 0xef, - 0x7f, 0xbc, 0x40, 0x29, 0x13, 0xbb, 0xa8, 0x68, 0xe5, 0x3b, 0x76, 0xd2, 0x35, 0xe7, 0x6f, 0xab, - 0xfd, 0x75, 0xc4, 0x08, 0x05, 0x37, 0x77, 0x3d, 0x15, 0x66, 0xf6, 0x97, 0xfc, 0x40, 0x91, 0x1b, - 0x73, 0xa9, 0xa7, 0x4f, 0x12, 0x24, 0x17, 0x6d, 0xcd, 0xd6, 0x92, 0x10, 0xed, 0xc4, 0x09, 0x24, - 0x42, 0xc0, 0xaf, 0xf1, 0xf6, 0xa9, 0x27, 0x39, 0x9d, 0x94, 0x77, 0x9f, 0xce, 0xa2, 0xf8, 0x81, - 0x2e, 0xab, 0x3f, 0x05, 0xb5, 0xd2, 0x37, 0xab, 0xf7, 0xc6, 0x6a, 0x74, 0x98, 0xb8, 0xbf, 0x6d, - 0x3b, 0x1b, 0x64, 0xea, 0xe9, 0x89, 0x8e, 0x83, 0x5a, 0x90, 0x67, 0xac, 0xc3, 0x5c, 0x3a, 0xaa, - 0xdd, 0xe0, 0xdd, 0xe0, 0xfc, 0x55, 0xe7, 0xea, 0xdb, 0x60, 0xce, 0x99, 0x52, 0x99, 0xc4, 0x08, - 0xbe, 0x2c, 0xae, 0x80, 0xd1, 0x4f, 0x53, 0xb0, 0x72, 0x3f, 0x8b, 0xbc, 0xea, 0x1d, 0x55, 0x57, - 0x89, 0xf8, 0x42, 0xf7, 0x3e, 0x3f, 0x7b, 0x97, 0x21, 0x2e, 0x68, 0xac, 0x4b, 0x41, 0x59, 0x6d, - 0x73, 0x08, 0x55, 0x5a, 0xe4, 0xaa, 0xaa, 0x8e, 0xeb, 0xa8, 0x8e, 0xbd, 0xf0, 0x4e, 0x22, 0x2e, - 0x6c, 0x67, 0x17, 0x88, 0x1f, 0x7f, 0x55, 0xd9, 0x6e, 0xef, 0xe0, 0x9c, 0xa8, 0xef, 0xbb, 0x97, - 0x19, 0xf5, 0xcb, 0xe4, 0x14, 0xb5, 0xae, 0x87, 0xb2, 0x48, 0x98, 0x2a, 0xb6, 0xba, 0xc9, 0xf9, - 0xb7, 0xf3, 0xe0, 0x88, 0x96, 0xdb, 0x37, 0xae, 0x22, 0x08, 0x62, 0xeb, 0x2a, 0x8e, 0x7e, 0x08, - 0x8a, 0xdb, 0x1a, 0x1b, 0x71, 0x7c, 0x27, 0x63, 0x3b, 0x07, 0x62, 0x6a, 0x9f, 0xc5, 0x53, 0xb5, - 0xea, 0xfe, 0x14, 0x29, 0x0f, 0x57, 0xcd, 0xc3, 0x52, 0x90, 0xc8, 0xae, 0xc5, 0x74, 0x47, 0x2c, - 0x89, 0x16, 0x49, 0x05, 0x32, 0xd8, 0xb8, 0xc8, 0xef, 0xd4, 0x1d, 0xc7, 0xe2, 0x2a, 0xc5, 0x72, - 0xdb, 0x22, 0x93, 0xa9, 0x8c, 0xdc, 0xa6, 0x77, 0x77, 0x7d, 0x19, 0xd3, 0xf4, 0x5c, 0xaf, 0xad, - 0x7d, 0x62, 0x8e, 0xc4, 0x0e, 0x11, 0x07, 0xfe, 0x2b, 0xb7, 0x77, 0x1c, 0xcc, 0xf7, 0xbf, 0x3f, - 0x31, 0x6e, 0xef, 0xe0, 0x9b, 0xba, 0x1b, 0x77, 0xbd, 0x73, 0x55, 0x0d, 0x4c, 0xc2, 0xe1, 0x23, - 0xaa, 0xaa, 0xaa, 0xaa, 0xfa, 0xeb, 0xe8, 0xe9, 0xfe, 0x42, 0x3b, 0xea, 0x22, 0x5b, 0xbb, 0xbf, - 0x8a, 0x29, 0xd9, 0x43, 0x3b, 0x2d, 0x64, 0x58, 0xe0, 0xd0, 0xc5, 0x8d, 0x70, 0x49, 0x71, 0x5b, - 0xb9, 0xd3, 0xe0, 0x88, 0x8f, 0x6d, 0xb3, 0xa7, 0x88, 0x0a, 0x49, 0x84, 0xce, 0xae, 0xaf, 0x10, - 0xe4, 0x8a, 0x2b, 0xaa, 0xf4, 0xbc, 0xb6, 0xcd, 0xd0, 0x9d, 0xc9, 0x88, 0x14, 0x6e, 0x4c, 0x9b, - 0x09, 0x8c, 0xc1, 0x3c, 0x13, 0xca, 0x90, 0x39, 0x58, 0x76, 0x0b, 0x5b, 0xbd, 0xf0, 0xf9, 0x75, - 0xaa, 0xe6, 0x17, 0x57, 0x7f, 0x46, 0x95, 0xf0, 0x47, 0x3f, 0xbe, 0xb0, 0x00, 0x00, 0x00, 0x01, - 0x41, 0x9a, 0x07, 0x03, 0xb0, 0x22, 0x81, 0xdf, 0x42, 0xea, 0x37, 0xa2, 0x95, 0x3e, 0xa9, 0x97, - 0xa9, 0x96, 0x7d, 0x72, 0x87, 0x3a, 0xa7, 0x5e, 0xa9, 0xd2, 0xeb, 0x4e, 0xbd, 0x52, 0xaf, 0x58, - 0xa1, 0x7e, 0xa3, 0xca, 0x14, 0xea, 0x38, 0xd3, 0xf5, 0xef, 0xa9, 0x53, 0xeb, 0x84, 0x9d, 0x19, - 0xfe, 0x8a, 0xf0, 0x97, 0x47, 0x3d, 0x13, 0xd1, 0x8c, 0x88, 0x89, 0x89, 0xe2, 0x44, 0x98, 0x21, - 0x8b, 0xae, 0x11, 0x13, 0xc2, 0x22, 0x45, 0x13, 0x55, 0xdc, 0x43, 0x0c, 0x22, 0x24, 0x48, 0xd7, - 0x76, 0x72, 0x4a, 0xbf, 0x1a, 0xc4, 0xc1, 0x0f, 0x42, 0xc7, 0x1b, 0x84, 0x62, 0xab, 0x5d, 0xe1, - 0x61, 0xc7, 0x0c, 0x82, 0x82, 0x5f, 0x75, 0x55, 0x54, 0xab, 0x03, 0xc0, 0x21, 0xfa, 0x3d, 0x70, - 0xc0, 0x98, 0x9c, 0x4a, 0x09, 0x3f, 0x13, 0x16, 0x61, 0x5b, 0x8a, 0xcb, 0x47, 0x7f, 0xe4, 0xad, - 0x7e, 0x6d, 0x44, 0xf9, 0x66, 0x33, 0xa0, 0xaf, 0x32, 0x37, 0x5f, 0x00, 0x97, 0x2d, 0xdd, 0x55, - 0x40, 0x92, 0x23, 0x0e, 0x28, 0x3a, 0x23, 0x1f, 0xd3, 0x4f, 0x4d, 0x3f, 0xe2, 0x0e, 0x93, 0x4d, - 0x34, 0xdb, 0x6d, 0xb6, 0xe1, 0xc4, 0x20, 0x02, 0x52, 0x7b, 0x89, 0x3c, 0x7f, 0xdb, 0x6e, 0xd9, - 0x3a, 0x65, 0x1f, 0x82, 0x10, 0x09, 0x83, 0x84, 0x40, 0x6a, 0x36, 0x06, 0xa2, 0x83, 0x16, 0x00, - 0x3b, 0x0a, 0x30, 0x60, 0x35, 0x4a, 0x83, 0x56, 0x1c, 0x50, 0x00, 0x4c, 0x5b, 0xbb, 0xaa, 0x26, - 0x55, 0x6e, 0x89, 0xff, 0x2e, 0xbf, 0x05, 0xd2, 0xa7, 0x03, 0xc7, 0x54, 0xe0, 0x75, 0x51, 0x02, - 0xc3, 0x1a, 0x80, 0x04, 0x83, 0x12, 0xd5, 0xb4, 0x58, 0x2c, 0x40, 0x02, 0x65, 0x34, 0xcf, 0xe9, - 0xfd, 0xc1, 0x08, 0x64, 0x10, 0x08, 0xe5, 0xc0, 0x38, 0x00, 0xa0, 0x32, 0x8b, 0x09, 0x7e, 0xc0, - 0x00, 0x12, 0x36, 0x43, 0xf8, 0x8d, 0xf0, 0xd2, 0x80, 0x0f, 0x83, 0x87, 0x00, 0x55, 0x17, 0xc3, - 0x48, 0xaa, 0x00, 0x01, 0x14, 0x1d, 0x00, 0x92, 0x41, 0x85, 0x6c, 0xa9, 0x88, 0x1d, 0x6e, 0xe2, - 0xd9, 0xb7, 0x02, 0x48, 0x20, 0x08, 0x70, 0x5c, 0x12, 0x24, 0xb6, 0x20, 0x0b, 0x24, 0x60, 0x01, - 0xfb, 0x5c, 0x1b, 0xc9, 0x05, 0xd9, 0xa9, 0xc9, 0xd0, 0x06, 0xe2, 0x30, 0xa3, 0xe0, 0x51, 0x04, - 0x00, 0x8c, 0x4d, 0x0e, 0x25, 0x7e, 0x1f, 0x53, 0xf1, 0x0e, 0xd2, 0xf3, 0x1e, 0x3f, 0x8f, 0x89, - 0x82, 0x40, 0x82, 0xd7, 0xdc, 0x44, 0x4f, 0x55, 0x5a, 0xf1, 0x1f, 0x9b, 0x78, 0xaf, 0x11, 0x1d, - 0x70, 0xa0, 0xa8, 0x51, 0x53, 0xc7, 0x93, 0xab, 0xf3, 0x04, 0xc9, 0xcb, 0xff, 0x10, 0x82, 0xae, - 0x70, 0x86, 0x27, 0xa3, 0x57, 0xd6, 0x28, 0xde, 0x8b, 0x15, 0xf5, 0x8c, 0x3d, 0x5a, 0x27, 0x08, - 0x02, 0x72, 0x3b, 0xea, 0x17, 0x2b, 0x1c, 0x11, 0x3c, 0xb8, 0x31, 0x01, 0x52, 0x34, 0x71, 0x39, - 0xce, 0x03, 0xfe, 0x55, 0x35, 0x05, 0x44, 0x5c, 0x35, 0x80, 0x2e, 0x21, 0x81, 0x64, 0xc0, 0x77, - 0xc7, 0x10, 0x2c, 0x3c, 0x0e, 0x1b, 0x40, 0x12, 0x4b, 0x48, 0x91, 0x89, 0x3a, 0x8f, 0x00, 0xfa, - 0xec, 0x31, 0xe0, 0x3e, 0x14, 0x2f, 0xc1, 0xc4, 0x98, 0x59, 0xb8, 0x76, 0x84, 0x9c, 0xdb, 0xcd, - 0x0b, 0x6d, 0x61, 0xe4, 0x40, 0x02, 0xc7, 0x65, 0x0b, 0x6a, 0xcb, 0x38, 0x39, 0x41, 0x97, 0x3b, - 0x9f, 0x59, 0xc7, 0x37, 0x7e, 0xbb, 0x47, 0x0c, 0xe3, 0x81, 0x9c, 0x79, 0x72, 0x85, 0x28, 0xa0, - 0xa1, 0x9e, 0x0b, 0x89, 0xba, 0x28, 0x0b, 0x2c, 0x05, 0x8d, 0xa1, 0xe6, 0xba, 0xfc, 0x71, 0xf0, - 0xc1, 0x20, 0x16, 0x85, 0xe1, 0x81, 0x30, 0x1a, 0xe0, 0xab, 0x6a, 0x67, 0x1f, 0x72, 0xf3, 0xb8, - 0x39, 0x5c, 0x70, 0xee, 0x28, 0x30, 0xce, 0x01, 0xd3, 0xdd, 0x3d, 0xdd, 0x33, 0xdd, 0x3d, 0xd8, - 0xe3, 0x6c, 0x31, 0x28, 0x00, 0x88, 0x1e, 0x07, 0x10, 0xa4, 0x39, 0x60, 0x2a, 0x0a, 0x32, 0xb0, - 0x3a, 0xd7, 0xb0, 0x0d, 0x56, 0x00, 0x07, 0xf1, 0xcf, 0x2b, 0x35, 0xa1, 0x30, 0xb7, 0x99, 0xa1, - 0x58, 0x43, 0x16, 0x65, 0x89, 0x85, 0x25, 0x8c, 0xf1, 0xc2, 0xc6, 0x5b, 0x7c, 0x09, 0x42, 0xa5, - 0x8c, 0x6f, 0x3e, 0x02, 0xe1, 0x50, 0x7a, 0xc0, 0xfc, 0xf0, 0x78, 0x00, 0x08, 0x04, 0xf0, 0xf3, - 0x00, 0x6a, 0x5b, 0x38, 0x7b, 0x63, 0x75, 0xc4, 0x42, 0x92, 0xdb, 0x49, 0xc1, 0xc1, 0xc1, 0x80, - 0x75, 0x6b, 0x72, 0x75, 0x31, 0x9c, 0xe9, 0x66, 0x70, 0xf2, 0x55, 0x57, 0x55, 0x64, 0x87, 0x23, - 0xc3, 0x9d, 0xe2, 0x4a, 0x3c, 0x67, 0x28, 0x86, 0x10, 0xc7, 0xec, 0x91, 0x31, 0x62, 0x17, 0x55, - 0x4c, 0x9e, 0xd4, 0x48, 0x8f, 0xa2, 0xf5, 0x44, 0x08, 0xfa, 0x16, 0x75, 0xfd, 0x4e, 0x8a, 0x83, - 0x1d, 0x7a, 0x6e, 0x85, 0x74, 0xd8, 0x90, 0x52, 0x75, 0x35, 0x2a, 0x94, 0x5a, 0xaa, 0xa8, 0xbd, - 0x43, 0x12, 0x02, 0xa4, 0x68, 0x40, 0x54, 0x0e, 0xa9, 0x10, 0x82, 0xbe, 0x07, 0xe7, 0x7e, 0x42, - 0x06, 0xfe, 0x4c, 0x91, 0xa7, 0x0f, 0x8e, 0x0f, 0xcc, 0x80, 0x2f, 0xe9, 0xe2, 0x32, 0x50, 0x59, - 0x96, 0x62, 0x86, 0x28, 0x65, 0x99, 0xe6, 0x29, 0x8a, 0x63, 0x8c, 0x83, 0xf6, 0x8d, 0xf8, 0x71, - 0x41, 0x5d, 0x06, 0x22, 0xf1, 0x0a, 0x1b, 0x85, 0x4d, 0xda, 0xd3, 0x1b, 0xbd, 0x44, 0xd3, 0x2a, - 0xe1, 0xce, 0x94, 0xb0, 0xaf, 0xfb, 0x21, 0x44, 0xc0, 0x9a, 0x75, 0x49, 0xbe, 0x1c, 0x44, 0x00, - 0x0f, 0xd5, 0xa3, 0x15, 0x21, 0x81, 0x58, 0x79, 0xf9, 0x49, 0xcb, 0xa1, 0xee, 0x58, 0xd3, 0x49, - 0x18, 0xe6, 0xff, 0x6d, 0x4a, 0x8c, 0xbc, 0xc8, 0x6f, 0x4f, 0xb6, 0xde, 0x1c, 0xc0, 0x02, 0xe6, - 0x1f, 0x60, 0x54, 0xc7, 0x1a, 0x30, 0xb7, 0x0a, 0xbf, 0xec, 0x73, 0x8f, 0x3b, 0x70, 0xa9, 0x96, - 0x78, 0x74, 0x3c, 0x34, 0xe0, 0xbc, 0x0e, 0x61, 0xe9, 0xc9, 0xac, 0x19, 0xdf, 0x35, 0x1b, 0x04, - 0xc8, 0x3d, 0x83, 0x3b, 0x7d, 0x34, 0xf1, 0x01, 0x90, 0xa1, 0xc7, 0x40, 0x01, 0xf3, 0xc0, 0x00, - 0x9e, 0x0e, 0x20, 0x01, 0xf2, 0x70, 0x54, 0x68, 0x38, 0x1e, 0x82, 0x82, 0x00, 0xd4, 0xf6, 0x34, - 0x14, 0x2d, 0x03, 0xa0, 0x03, 0xe3, 0xa7, 0xd3, 0x8e, 0x35, 0xde, 0x19, 0xfc, 0x19, 0xcc, 0xf0, - 0xfa, 0x38, 0xf0, 0x80, 0x60, 0x64, 0x6d, 0xd8, 0x39, 0x02, 0xac, 0x23, 0x53, 0xea, 0x0a, 0xc9, - 0x43, 0xa4, 0x06, 0xa7, 0x72, 0xc7, 0x6d, 0x88, 0xf0, 0x3c, 0x9a, 0xad, 0xe7, 0x38, 0x76, 0x28, - 0x00, 0x00, 0x9a, 0x18, 0x31, 0x04, 0x01, 0x02, 0x32, 0x20, 0x1e, 0x1e, 0xc1, 0x99, 0x03, 0xe9, - 0x60, 0x8f, 0xb8, 0x44, 0xa0, 0xdc, 0x0e, 0x59, 0xa9, 0x28, 0x71, 0xd3, 0x7b, 0x7d, 0x04, 0xf0, - 0xe2, 0x04, 0x84, 0x42, 0x4a, 0x2e, 0x2e, 0xaa, 0xcf, 0x17, 0x5f, 0x88, 0xf9, 0x8e, 0x86, 0xb0, - 0x65, 0xaf, 0x10, 0x38, 0x47, 0x2f, 0x70, 0xa0, 0x38, 0x2c, 0x76, 0xe4, 0xa3, 0x95, 0xfe, 0xc2, - 0x66, 0xe2, 0xcd, 0x7c, 0x57, 0x16, 0x73, 0xd0, 0xf4, 0xcf, 0x43, 0xd3, 0x5c, 0x23, 0x3d, 0x0f, - 0x4c, 0xf4, 0x3d, 0x33, 0xd0, 0xf4, 0xe2, 0x17, 0xe2, 0x79, 0xe8, 0x7a, 0x67, 0xa1, 0xe9, 0xe3, - 0xa7, 0xa7, 0x3d, 0x0f, 0x4c, 0xf4, 0x3d, 0x30, 0xaf, 0x44, 0x72, 0x78, 0x12, 0x7e, 0x18, 0x1c, - 0x38, 0x99, 0x52, 0x51, 0xf7, 0xb9, 0xe6, 0xa4, 0x6a, 0xe5, 0x36, 0x5b, 0xbe, 0x18, 0x10, 0x14, - 0xd2, 0x22, 0x6e, 0x25, 0x0a, 0x18, 0x29, 0x45, 0x00, 0x49, 0x33, 0x09, 0x7a, 0xfa, 0xc8, 0xa4, - 0x06, 0x1d, 0xac, 0x40, 0x0d, 0xcf, 0x9d, 0x00, 0x01, 0x03, 0x10, 0xe2, 0x38, 0x35, 0xd5, 0x30, - 0x08, 0x37, 0x43, 0x18, 0x10, 0xc5, 0x68, 0x62, 0xff, 0x80, 0x09, 0x55, 0x50, 0x05, 0xc4, 0x8d, - 0x7c, 0x48, 0xc2, 0x1e, 0x74, 0x38, 0x88, 0x1d, 0x56, 0x19, 0xa2, 0x07, 0xd5, 0x80, 0x04, 0x17, - 0xad, 0xbb, 0x9c, 0x00, 0xc3, 0xb6, 0x7a, 0x61, 0x53, 0xc0, 0x6e, 0x95, 0x38, 0x00, 0x1a, 0x39, - 0x70, 0x3b, 0xe8, 0xc2, 0x60, 0x6a, 0x02, 0x5e, 0x31, 0x97, 0x08, 0xca, 0x15, 0x2b, 0x0f, 0xdb, - 0xae, 0x61, 0xd2, 0x28, 0xf1, 0x22, 0x04, 0x99, 0xef, 0xb7, 0x7e, 0x20, 0x49, 0x8b, 0x77, 0x0a, - 0x00, 0x38, 0xf2, 0x98, 0x4f, 0x15, 0x99, 0xe2, 0x30, 0xe7, 0x41, 0x76, 0x9f, 0x92, 0xaf, 0x53, - 0x75, 0x32, 0x57, 0x53, 0x25, 0x41, 0x88, 0x29, 0x15, 0x25, 0x12, 0x55, 0x3e, 0x3f, 0x2c, 0x3c, - 0x14, 0x86, 0x46, 0x84, 0xbd, 0x20, 0x56, 0x96, 0xb5, 0x6c, 0xb9, 0x04, 0xa0, 0x00, 0x2a, 0xaa, - 0x41, 0xd2, 0x65, 0xdc, 0x65, 0x4b, 0x19, 0x78, 0xa8, 0x45, 0xb9, 0x3f, 0x85, 0x01, 0x60, 0xe9, - 0x65, 0xcf, 0xd7, 0xf1, 0x10, 0xa7, 0xbb, 0xda, 0x2c, 0x63, 0x04, 0x80, 0x1f, 0x3d, 0x93, 0x81, - 0x42, 0x3c, 0x39, 0x54, 0x40, 0x46, 0x98, 0x00, 0x40, 0x9e, 0x3f, 0x8b, 0x14, 0x68, 0x90, 0x17, - 0x1f, 0x95, 0x3e, 0x14, 0x86, 0xb0, 0x65, 0xf1, 0x95, 0x17, 0x28, 0xe6, 0x9b, 0x9a, 0xd1, 0x87, - 0x91, 0xd7, 0x09, 0xc0, 0x37, 0x31, 0x1a, 0x05, 0x7f, 0x1e, 0x0e, 0x72, 0x73, 0x0f, 0x1f, 0x05, - 0x3c, 0x43, 0x89, 0x62, 0x1c, 0x10, 0xe2, 0xfc, 0xb2, 0xf4, 0xf2, 0xfb, 0xee, 0xfe, 0x52, 0xbe, - 0x6c, 0xc4, 0x88, 0x20, 0x87, 0xde, 0xb1, 0x13, 0x74, 0x3f, 0x57, 0xd1, 0xdd, 0x09, 0x75, 0x72, - 0x2b, 0xa2, 0x91, 0x2f, 0xa9, 0x12, 0x58, 0x14, 0x03, 0x21, 0x41, 0x94, 0xa2, 0x8c, 0x56, 0x5c, - 0x12, 0x03, 0x87, 0xb8, 0x0c, 0xb4, 0x03, 0x1c, 0x39, 0x28, 0x2a, 0xdf, 0xb4, 0x11, 0xff, 0x9e, - 0xe0, 0x80, 0x32, 0x14, 0x34, 0x40, 0x5f, 0x96, 0x22, 0xda, 0xbe, 0x49, 0x10, 0x94, 0xe5, 0x30, - 0x43, 0xe6, 0x5d, 0xff, 0xd5, 0x79, 0x70, 0xc0, 0x44, 0x29, 0x70, 0x7c, 0x44, 0xca, 0x61, 0x99, - 0xce, 0xa4, 0x59, 0x93, 0xca, 0x65, 0xe5, 0xbb, 0xb8, 0xac, 0xe9, 0xf0, 0x4b, 0x2f, 0x3f, 0x82, - 0xe5, 0xe5, 0xe5, 0xe2, 0xeb, 0xdf, 0x0a, 0x14, 0x5d, 0x3a, 0x6e, 0xf7, 0xbb, 0xc5, 0x73, 0xc1, - 0xda, 0x12, 0xe8, 0x5f, 0x7d, 0x15, 0xe1, 0x6e, 0xb1, 0x44, 0x73, 0x04, 0x84, 0x2c, 0x1f, 0x8a, - 0x0c, 0x94, 0x15, 0xe1, 0x01, 0x91, 0x71, 0x1c, 0xb9, 0xdc, 0x10, 0x70, 0xe7, 0x31, 0x58, 0xac, - 0xb6, 0x0c, 0x7c, 0xcb, 0x62, 0xb2, 0x80, 0x2d, 0xe1, 0x80, 0x31, 0x07, 0x88, 0x12, 0x14, 0x2a, - 0xab, 0x8a, 0xf7, 0x15, 0x8a, 0x03, 0x10, 0x00, 0xb0, 0x78, 0x00, 0x2c, 0x16, 0x00, 0x04, 0x64, - 0x80, 0xd4, 0x5b, 0x2c, 0x01, 0x9f, 0xd1, 0xc7, 0x89, 0x08, 0x05, 0x21, 0x55, 0x6c, 0xf0, 0x1f, - 0x59, 0x3f, 0xa4, 0x78, 0x00, 0xf2, 0xd9, 0xe0, 0x00, 0xf2, 0xc6, 0x5c, 0xcb, 0x6f, 0x3f, 0xcd, - 0xb8, 0xac, 0x43, 0xf1, 0x30, 0xa5, 0xf7, 0x77, 0x77, 0x49, 0x99, 0x63, 0x10, 0x34, 0x1f, 0x64, - 0x5b, 0x1e, 0xf3, 0x7f, 0x10, 0x2c, 0xa4, 0xf3, 0x63, 0xbb, 0x8a, 0xcf, 0x9e, 0x41, 0x85, 0xf7, - 0x15, 0xf9, 0x45, 0xb7, 0x07, 0x4f, 0xf8, 0x94, 0x34, 0x89, 0x5d, 0x10, 0x76, 0x88, 0xe8, 0xfa, - 0x93, 0xa2, 0x54, 0x39, 0xd5, 0xfe, 0xfb, 0xba, 0x88, 0x8a, 0x09, 0x03, 0x7d, 0x0e, 0x06, 0x8e, - 0x60, 0xf0, 0x70, 0x49, 0xf1, 0x83, 0xab, 0xce, 0x26, 0x30, 0x85, 0x83, 0x3d, 0x89, 0x6c, 0x5c, - 0x0a, 0xac, 0x0b, 0x80, 0x01, 0x08, 0xb8, 0x98, 0x00, 0x02, 0x85, 0xf2, 0x41, 0x30, 0x03, 0xc4, - 0x6a, 0x2e, 0x07, 0x86, 0xc7, 0x00, 0x25, 0xe2, 0x4f, 0x07, 0xd1, 0xac, 0x1a, 0xaa, 0x6c, 0x1a, - 0x50, 0x50, 0x91, 0x81, 0x9d, 0x4d, 0xfe, 0x33, 0x79, 0xa5, 0xbb, 0x0c, 0x48, 0x80, 0xa4, 0x28, - 0x00, 0x05, 0x3d, 0xa4, 0x0f, 0xc9, 0x7c, 0xaa, 0x30, 0x7a, 0x66, 0x50, 0x1e, 0x0e, 0x79, 0x60, - 0x34, 0x82, 0xb0, 0xb0, 0x1a, 0x60, 0xcd, 0x48, 0xde, 0x6e, 0x91, 0xe1, 0xe7, 0xe8, 0x33, 0x0e, - 0x1d, 0xe3, 0xc7, 0x4d, 0xf7, 0x08, 0xc0, 0x54, 0x6f, 0x3d, 0xf7, 0x71, 0x01, 0x10, 0x81, 0x6c, - 0xde, 0xac, 0xf3, 0x2a, 0xf7, 0xf1, 0x03, 0xea, 0xb5, 0xbb, 0x53, 0x0c, 0x10, 0x06, 0x8f, 0xe1, - 0x3f, 0xdb, 0x80, 0x0e, 0x2e, 0x49, 0x10, 0x18, 0xb2, 0xfc, 0x59, 0xc3, 0x78, 0xcb, 0xde, 0x5b, - 0x15, 0xbb, 0x9a, 0x06, 0x52, 0xf0, 0x7b, 0xa7, 0xcb, 0xa5, 0xf8, 0x96, 0x52, 0xdb, 0xfe, 0x5b, - 0xbf, 0xe1, 0x03, 0x0a, 0xee, 0x7e, 0xf6, 0xef, 0x9f, 0xc6, 0x74, 0x15, 0x79, 0xfa, 0xd5, 0x75, - 0x6f, 0xab, 0x11, 0xbd, 0x11, 0x8a, 0xea, 0xc4, 0x4c, 0x4c, 0x82, 0x9c, 0x57, 0x7e, 0x20, 0x61, - 0x8b, 0x19, 0x6e, 0x7c, 0x18, 0xbf, 0x84, 0xac, 0xca, 0x2d, 0xa1, 0x55, 0x2c, 0x2f, 0x35, 0xec, - 0x56, 0x59, 0x3b, 0xaa, 0xac, 0x2f, 0xcf, 0x1c, 0xa6, 0xe5, 0xb8, 0x81, 0x9a, 0x2b, 0xd3, 0x09, - 0x58, 0x67, 0x1f, 0xe5, 0x8b, 0x8f, 0x00, 0x54, 0x50, 0x69, 0x85, 0xcf, 0x96, 0x32, 0x91, 0xd1, - 0xff, 0x43, 0x81, 0xb8, 0x8f, 0x11, 0x8d, 0xe2, 0xce, 0xab, 0x57, 0x87, 0xf5, 0xc7, 0xf8, 0x69, - 0x5b, 0x69, 0x13, 0x66, 0x16, 0x84, 0xd9, 0xdd, 0x9a, 0x3f, 0x8d, 0xb0, 0xe6, 0xa0, 0x3a, 0x0b, - 0x8c, 0x94, 0x9a, 0x64, 0xbc, 0x15, 0xce, 0x72, 0x66, 0xce, 0x31, 0x65, 0xc4, 0x3f, 0x45, 0xe9, - 0x94, 0x04, 0xcb, 0x72, 0x3e, 0x80, 0xce, 0xb5, 0x3a, 0x8b, 0xb3, 0xe5, 0x13, 0x9f, 0x57, 0xc4, - 0x16, 0xee, 0xee, 0xee, 0xfc, 0x40, 0xa1, 0x82, 0xf3, 0x71, 0x4d, 0x45, 0xd5, 0x7c, 0xa5, 0x0a, - 0xab, 0x93, 0x0e, 0x03, 0xf6, 0xa5, 0xe8, 0x22, 0x74, 0xbe, 0xae, 0x02, 0x7d, 0x52, 0x25, 0xd1, - 0x1e, 0x3f, 0x9a, 0x33, 0x82, 0xde, 0x58, 0x71, 0x01, 0x32, 0x55, 0x75, 0x5f, 0x82, 0xe2, 0x3f, - 0x75, 0xa7, 0x7b, 0xe2, 0xab, 0x1b, 0x52, 0x8c, 0x34, 0x9b, 0x9e, 0xf6, 0xbe, 0x22, 0x44, 0x89, - 0xa8, 0xf0, 0xaf, 0x94, 0xfe, 0x53, 0xea, 0xbe, 0x23, 0xf5, 0xc6, 0x08, 0xcb, 0x6e, 0xd0, 0xda, - 0xe4, 0xca, 0x96, 0xdf, 0x78, 0x4f, 0xf9, 0x4a, 0x07, 0xed, 0x72, 0x71, 0xc8, 0x95, 0x51, 0x5d, - 0x05, 0x52, 0xc3, 0xfd, 0x0f, 0x72, 0xb8, 0x23, 0x0f, 0x3d, 0xaf, 0xbf, 0xf0, 0x91, 0x2f, 0x5b, - 0x9f, 0xfe, 0x42, 0x65, 0xcf, 0x88, 0x3b, 0x8a, 0xda, 0xad, 0x7e, 0xaf, 0xf1, 0x62, 0x6b, 0x37, - 0xd3, 0x6f, 0x11, 0x16, 0x75, 0x55, 0xcc, 0xa1, 0x7f, 0x53, 0xd5, 0x88, 0x14, 0x30, 0x9e, 0xde, - 0xb3, 0x7f, 0x1e, 0x23, 0x2c, 0x77, 0x78, 0xa3, 0x77, 0x14, 0x71, 0x5f, 0x82, 0x83, 0x8d, 0xae, - 0x58, 0xc4, 0x39, 0x97, 0x2f, 0x0c, 0xf4, 0x37, 0x28, 0xfe, 0x09, 0x08, 0x2b, 0x78, 0xad, 0x87, - 0x10, 0x12, 0x26, 0x5c, 0x75, 0x16, 0x82, 0x9f, 0xfc, 0x49, 0xb7, 0x2d, 0x2f, 0xc7, 0xd6, 0xaa, - 0xa4, 0xde, 0x95, 0xf8, 0x91, 0xe6, 0xb7, 0xbb, 0xbb, 0x5e, 0x21, 0xfe, 0x10, 0xa8, 0xf2, 0x0a, - 0x5a, 0x63, 0x59, 0x79, 0x51, 0x0e, 0x2e, 0x3d, 0x7a, 0xe8, 0x4b, 0xdf, 0x14, 0x57, 0x7b, 0xad, - 0x2f, 0x12, 0x5a, 0xde, 0xe2, 0x62, 0x02, 0x0a, 0x5f, 0x53, 0xcd, 0x32, 0xbe, 0x2e, 0xee, 0xe2, - 0xbc, 0x56, 0x36, 0xa1, 0x4e, 0x82, 0x39, 0x42, 0x5c, 0x16, 0x0a, 0x7c, 0xb8, 0x8c, 0x9d, 0x5b, - 0x47, 0xbb, 0x78, 0x67, 0xc2, 0x97, 0x2e, 0x1c, 0xf2, 0xd8, 0xa3, 0x15, 0xb9, 0xbd, 0xbb, 0x9f, - 0x9f, 0x3f, 0xdf, 0x79, 0xcd, 0x71, 0x25, 0x77, 0x77, 0x77, 0xf1, 0x22, 0x06, 0x0c, 0x27, 0xe2, - 0x58, 0x3f, 0x83, 0x48, 0x3f, 0x03, 0xa2, 0xae, 0x31, 0x0f, 0x01, 0xcf, 0x07, 0xc1, 0x47, 0x1b, - 0xa5, 0x2c, 0x13, 0xe0, 0xe8, 0x78, 0xec, 0x76, 0x78, 0x52, 0x59, 0xb2, 0x3d, 0xdc, 0xc2, 0x06, - 0x38, 0x6c, 0x13, 0x84, 0xef, 0x26, 0x79, 0xb1, 0xcf, 0x82, 0x83, 0xd3, 0x57, 0xbd, 0xde, 0xa2, - 0x75, 0xd0, 0xbe, 0xac, 0x45, 0x44, 0x08, 0xe2, 0x04, 0x10, 0x41, 0x28, 0x5f, 0x5f, 0x10, 0x67, - 0xbb, 0xee, 0x96, 0x26, 0x2e, 0x2e, 0xb5, 0xd5, 0x7c, 0xa1, 0x5c, 0x77, 0xd8, 0x5f, 0xaa, 0x45, - 0xea, 0x9d, 0x2e, 0xb0, 0x4f, 0xd1, 0x30, 0xf1, 0x00, 0xb0, 0x54, 0xa4, 0x5b, 0x9b, 0x55, 0x59, - 0x31, 0x69, 0x43, 0xc2, 0x9b, 0xdd, 0xde, 0xee, 0xef, 0xbe, 0x97, 0x78, 0x83, 0x11, 0x37, 0x76, - 0xfc, 0x16, 0x17, 0x55, 0x5a, 0xad, 0x6a, 0xfe, 0x20, 0x59, 0xd5, 0x54, 0x98, 0xab, 0xaf, 0x12, - 0x0a, 0x08, 0xa2, 0xe2, 0xe2, 0x98, 0xba, 0x62, 0xe5, 0xe3, 0xb7, 0x13, 0x18, 0x40, 0x3e, 0xf7, - 0x7a, 0xd1, 0x21, 0x42, 0x25, 0x88, 0xbf, 0xd9, 0xee, 0x29, 0xf3, 0xe2, 0x63, 0xe2, 0x8c, 0xf7, - 0x1f, 0x15, 0x96, 0xfb, 0xbb, 0xf8, 0x8a, 0x83, 0xab, 0x6a, 0x15, 0x64, 0xd1, 0x0e, 0x17, 0xc4, - 0xf1, 0x3b, 0xf7, 0xf8, 0x47, 0xc4, 0x08, 0xf8, 0x2d, 0xb8, 0xaf, 0xe6, 0xce, 0xf8, 0xf2, 0x5b, - 0xb8, 0x87, 0x37, 0x71, 0x5b, 0xc7, 0x57, 0xca, 0x77, 0x68, 0xf6, 0x16, 0x18, 0xe8, 0x4f, 0x44, - 0x70, 0x58, 0x62, 0x61, 0x36, 0xed, 0xaa, 0xa7, 0x77, 0xc0, 0x6c, 0x3c, 0x45, 0xdf, 0xb7, 0xa3, - 0xf5, 0xaf, 0x98, 0x43, 0xdf, 0x89, 0x10, 0x38, 0x4b, 0xbb, 0xbd, 0x6b, 0x7b, 0xe1, 0x10, 0x88, - 0xe3, 0xac, 0xa9, 0x31, 0x44, 0x72, 0x2d, 0xfb, 0x7c, 0x40, 0xa1, 0x8b, 0x29, 0x06, 0x07, 0x14, - 0xe7, 0xc5, 0x7e, 0x26, 0x21, 0xc7, 0x2d, 0xb9, 0x6d, 0xdd, 0xf8, 0x91, 0x25, 0x1b, 0xc7, 0x5d, - 0xee, 0xc7, 0x89, 0x84, 0x0a, 0xda, 0xd4, 0xac, 0x46, 0xfd, 0xdf, 0x11, 0x7d, 0xdf, 0x13, 0xf8, - 0x48, 0xee, 0x5e, 0x9d, 0xbb, 0xbd, 0x62, 0x41, 0x21, 0x89, 0xeb, 0xf2, 0xff, 0xcd, 0xb5, 0x26, - 0x78, 0x40, 0xf4, 0x96, 0x8c, 0x97, 0xaa, 0xda, 0xf1, 0x04, 0xb4, 0xd4, 0xf4, 0xf2, 0x10, 0x9f, - 0xaf, 0x8f, 0x18, 0xe2, 0xb9, 0xf1, 0xef, 0xc7, 0x8e, 0xaf, 0xf2, 0x96, 0xee, 0xe1, 0xce, 0x84, - 0xf5, 0x62, 0x14, 0x6d, 0x3c, 0x40, 0x21, 0x34, 0xd9, 0xf7, 0x88, 0x65, 0x35, 0x12, 0xaf, 0x9b, - 0x2b, 0x5a, 0xfc, 0xa2, 0xaf, 0x7e, 0x23, 0xe2, 0x06, 0xaa, 0xaa, 0xb5, 0xb5, 0xe0, 0xa4, 0x44, - 0x5d, 0xb5, 0x7b, 0xdd, 0x36, 0xd3, 0xef, 0xaf, 0x78, 0x81, 0x65, 0xdb, 0x4d, 0xdd, 0xdf, 0x84, - 0x02, 0x07, 0x97, 0xac, 0x6f, 0x15, 0x8a, 0xdd, 0xdd, 0xf8, 0x90, 0x95, 0xde, 0xfb, 0xbf, 0x12, - 0x13, 0xee, 0xe9, 0x2a, 0x49, 0x71, 0x2e, 0xee, 0xee, 0xe2, 0x04, 0x57, 0xfb, 0x23, 0xdf, 0x88, - 0x84, 0x8e, 0xef, 0xb4, 0x97, 0x89, 0x13, 0xc4, 0xc6, 0x6d, 0x39, 0xf1, 0x83, 0x66, 0xdc, 0x89, - 0xae, 0x3b, 0xa5, 0x99, 0x75, 0xe2, 0x04, 0x91, 0x9a, 0x06, 0x7b, 0xa7, 0xd5, 0x7c, 0x78, 0xa8, - 0xaf, 0x15, 0xc5, 0x62, 0x1c, 0x88, 0x7b, 0xfe, 0x08, 0xee, 0xf7, 0xa8, 0x67, 0xa1, 0xf1, 0x5f, - 0x58, 0xbc, 0x4a, 0x11, 0x8a, 0xb1, 0x15, 0xc2, 0x02, 0x13, 0x15, 0xb8, 0x85, 0x88, 0x87, 0xc5, - 0x6f, 0x7f, 0x94, 0x69, 0x3c, 0x72, 0x4f, 0xd5, 0x1d, 0xf1, 0x23, 0x89, 0x4c, 0xfe, 0x5d, 0xef, - 0x5a, 0xa8, 0x88, 0x21, 0xae, 0xac, 0xf1, 0x23, 0x8b, 0x77, 0x7b, 0xbb, 0x8a, 0xc5, 0x62, 0xb1, - 0x5a, 0xc4, 0x09, 0x2b, 0xbb, 0xdf, 0x7f, 0x04, 0xe2, 0x35, 0x55, 0x55, 0x5e, 0xbc, 0x45, 0xf0, - 0x42, 0x7b, 0xdd, 0xfc, 0x48, 0xa2, 0x34, 0xfa, 0xeb, 0xe1, 0x01, 0x38, 0xe2, 0x12, 0xcf, 0x77, - 0x48, 0xb2, 0xc2, 0xe2, 0x04, 0x10, 0x8d, 0x52, 0x4b, 0x11, 0xf8, 0x21, 0xad, 0x7a, 0xf8, 0x22, - 0x14, 0xf7, 0x8b, 0x13, 0xe0, 0x8e, 0xf1, 0x5b, 0x75, 0x3f, 0x42, 0x72, 0x85, 0x78, 0x29, 0x32, - 0xba, 0x6e, 0xed, 0xe9, 0xc9, 0xe3, 0x37, 0x88, 0xf8, 0x4c, 0xf4, 0x6b, 0x55, 0xa5, 0xe0, 0xba, - 0xf3, 0x62, 0xd5, 0x5d, 0xde, 0x20, 0x20, 0x29, 0xdd, 0xcf, 0xd3, 0xb7, 0x2d, 0xbb, 0xed, 0xf1, - 0x22, 0x47, 0xc9, 0x14, 0xac, 0x6b, 0x5f, 0x08, 0x0b, 0x33, 0xef, 0x77, 0xe2, 0x04, 0x82, 0xa2, - 0x91, 0x47, 0x97, 0xdc, 0x1f, 0xf5, 0xd6, 0xfe, 0x24, 0x71, 0x18, 0xf5, 0xa7, 0x2f, 0x6e, 0xde, - 0xfc, 0x4c, 0x75, 0xdd, 0xcf, 0xdd, 0xee, 0xed, 0xcb, 0xac, 0x42, 0x3b, 0xd7, 0x21, 0x95, 0x6b, - 0x89, 0xd6, 0x22, 0xb1, 0x15, 0xc9, 0xab, 0xf8, 0x8a, 0xe4, 0x3e, 0xe2, 0xb7, 0xc1, 0x70, 0xc7, - 0x7d, 0xc2, 0xce, 0x5b, 0x35, 0xf2, 0x97, 0xba, 0x89, 0xee, 0xf7, 0x97, 0xaf, 0x49, 0xd7, 0xa2, - 0x38, 0x5f, 0x17, 0xa9, 0xfb, 0x38, 0x9c, 0x30, 0x0e, 0x4c, 0xb0, 0x83, 0x5f, 0x5f, 0x7d, 0x9d, - 0x56, 0xab, 0x10, 0x3c, 0x62, 0xcf, 0x77, 0xaa, 0xcf, 0xb8, 0x88, 0xa1, 0x2a, 0xb2, 0x65, 0xef, - 0xc4, 0x92, 0xda, 0x74, 0xfc, 0x11, 0xde, 0xee, 0x8e, 0xf1, 0x3f, 0xaa, 0x3b, 0xf0, 0x58, 0x57, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x74, 0x71, 0xf1, 0x3c, 0x40, 0x8f, 0x89, 0xb6, 0xb5, 0xbb, 0xba, - 0xc4, 0x57, 0xfb, 0xd2, 0xa5, 0xee, 0xba, 0xf8, 0x99, 0x04, 0x04, 0x58, 0x19, 0x04, 0x2d, 0x15, - 0x5a, 0xb5, 0xc5, 0xc4, 0xb2, 0xa5, 0xa4, 0xcd, 0x9f, 0x13, 0x27, 0x09, 0x8c, 0x77, 0xbb, 0xdd, - 0xcd, 0xd0, 0x97, 0xfa, 0xbd, 0xf5, 0xcc, 0x7d, 0x5e, 0xba, 0xbc, 0xfd, 0x5e, 0x6e, 0x89, 0x7f, - 0x82, 0x22, 0xbb, 0xde, 0xbe, 0xce, 0xdb, 0x6e, 0xbc, 0x47, 0xfc, 0x4f, 0x88, 0x12, 0x33, 0x55, - 0x55, 0x5f, 0x90, 0x4d, 0xef, 0x89, 0x08, 0x04, 0x4a, 0xee, 0xee, 0xee, 0xee, 0xee, 0xe2, 0xbc, - 0x44, 0x16, 0xdd, 0xdd, 0xde, 0xee, 0xde, 0x20, 0x12, 0x12, 0xeb, 0xef, 0x11, 0xc4, 0x78, 0x99, - 0x6f, 0x76, 0x3e, 0x23, 0xf5, 0xd9, 0x1d, 0xef, 0xe2, 0x4f, 0xa4, 0xf4, 0x9a, 0x60, 0xf8, 0x90, - 0x97, 0x8a, 0xed, 0x2a, 0xf8, 0x4a, 0xd5, 0x2a, 0xd5, 0x4d, 0xca, 0x57, 0x94, 0x82, 0xef, 0x85, - 0x87, 0x1f, 0xdf, 0x76, 0x9c, 0x64, 0x14, 0x73, 0xd0, 0x72, 0x57, 0x86, 0x31, 0x00, 0xae, 0xaa, - 0xab, 0x34, 0xa1, 0x46, 0xe0, 0x97, 0xff, 0x7c, 0x21, 0x77, 0x77, 0x77, 0x15, 0xbb, 0x6b, 0xfb, - 0x2d, 0xef, 0xe5, 0x12, 0xab, 0xfd, 0x7e, 0x24, 0x4f, 0xc4, 0x88, 0xbd, 0xd3, 0xd7, 0x88, 0x04, - 0x45, 0x73, 0xf7, 0xdf, 0x88, 0x12, 0x6b, 0xbb, 0xbf, 0x8e, 0xdb, 0xb6, 0x46, 0x6c, 0x7c, 0xec, - 0x56, 0x5b, 0xe2, 0x04, 0xff, 0x89, 0xfd, 0xd6, 0xab, 0xc4, 0x96, 0xaa, 0xab, 0xfe, 0x24, 0xd8, - 0xcf, 0xae, 0xcc, 0x4c, 0x49, 0x6a, 0x46, 0x78, 0xf3, 0xe2, 0x3c, 0x4f, 0xc2, 0x7e, 0x2e, 0xab, - 0x47, 0xc4, 0xd6, 0x22, 0xb1, 0x17, 0xc8, 0x31, 0xcc, 0xc3, 0xd7, 0xe0, 0x8e, 0x48, 0x5b, 0x59, - 0x45, 0x74, 0x76, 0x44, 0x75, 0x75, 0x75, 0x72, 0xb8, 0x27, 0x11, 0xc1, 0xaa, 0x53, 0x24, 0x4c, - 0x56, 0x09, 0x3e, 0x2d, 0x78, 0x87, 0x0a, 0x0e, 0x59, 0x3a, 0xbf, 0x8e, 0xbb, 0xbf, 0x75, 0x77, - 0x7f, 0x82, 0x22, 0x9b, 0xe6, 0xef, 0xf2, 0x97, 0x0d, 0xda, 0xca, 0x9f, 0x65, 0xad, 0x70, 0x80, - 0x80, 0x46, 0x4a, 0xd6, 0xb8, 0x89, 0x2a, 0xaa, 0x2f, 0xc4, 0x89, 0x23, 0xde, 0xef, 0xe2, 0x65, - 0xd5, 0x57, 0x10, 0x20, 0x11, 0x95, 0x6a, 0xac, 0x71, 0x02, 0x4b, 0x43, 0x43, 0x52, 0x31, 0x89, - 0x92, 0xee, 0xff, 0x77, 0x7b, 0xe2, 0x66, 0xae, 0x8b, 0xeb, 0x10, 0x12, 0x2d, 0x12, 0xee, 0x83, - 0x6b, 0xc9, 0x5d, 0x78, 0x9b, 0xc4, 0x56, 0x23, 0xfe, 0x27, 0xc4, 0x71, 0x02, 0x38, 0x99, 0x35, - 0xaf, 0x82, 0x61, 0x4e, 0xae, 0xdd, 0xee, 0x40, 0x44, 0xf4, 0x76, 0x23, 0x78, 0x29, 0x11, 0x37, - 0x2c, 0x49, 0xf7, 0x0e, 0xff, 0x9b, 0xe1, 0xcf, 0x75, 0xe2, 0x19, 0x57, 0x5f, 0x2d, 0xdd, 0xeb, - 0x84, 0x08, 0xb9, 0x58, 0xc2, 0x81, 0x85, 0x35, 0xa1, 0xc1, 0xdb, 0x93, 0xd0, 0x56, 0x7c, 0x47, - 0xd0, 0xd7, 0xaf, 0x5d, 0x6b, 0x89, 0xbd, 0x55, 0x54, 0x48, 0x8e, 0x20, 0x49, 0xb2, 0xbd, 0x37, - 0x29, 0xc4, 0x5d, 0xdf, 0x78, 0x9a, 0xc4, 0x5e, 0x23, 0xc4, 0xd7, 0x35, 0x6a, 0xbc, 0x4d, 0xf3, - 0x69, 0x23, 0x69, 0x70, 0x44, 0x67, 0xcb, 0x11, 0x70, 0xfa, 0xd4, 0x29, 0xc2, 0x26, 0x9a, 0x0a, - 0xb0, 0xc3, 0xe3, 0x37, 0x56, 0xd9, 0xb7, 0xe2, 0x4b, 0x16, 0xf7, 0xaf, 0x10, 0x5a, 0xd5, 0x7c, - 0xa5, 0x7b, 0xfd, 0x72, 0xf8, 0x44, 0x54, 0xc9, 0xf5, 0x51, 0x79, 0x93, 0xfc, 0xa3, 0xde, 0x36, - 0xb2, 0xbb, 0xd5, 0x6b, 0x11, 0xe2, 0x3c, 0x47, 0xd9, 0x1f, 0x7e, 0x24, 0xa5, 0x5a, 0xf8, 0x87, - 0x41, 0xbd, 0x8d, 0x62, 0x41, 0x71, 0x48, 0xca, 0x6d, 0xcf, 0xd0, 0x9e, 0xfe, 0x21, 0x52, 0xae, - 0x23, 0xc4, 0x93, 0x7b, 0xf1, 0x17, 0x88, 0xe2, 0x35, 0x88, 0x9f, 0x82, 0xa1, 0x95, 0x73, 0x7c, - 0xd0, 0x8b, 0xcd, 0xc6, 0x3a, 0xa1, 0x4e, 0x24, 0x92, 0xf5, 0x11, 0xe6, 0xec, 0x90, 0x1d, 0x95, - 0x2f, 0xc6, 0x15, 0xdf, 0x77, 0x15, 0x9d, 0x8b, 0xdd, 0xef, 0xe2, 0x38, 0x8f, 0xcd, 0x89, 0xc0, - 0x3f, 0xae, 0x1d, 0x0e, 0x20, 0x4c, 0x34, 0x8c, 0xf7, 0x0c, 0x57, 0x3d, 0x1d, 0x6e, 0xd5, 0xff, - 0x94, 0xf5, 0x5f, 0x96, 0xaa, 0xaa, 0xff, 0x89, 0x31, 0x55, 0x55, 0x7f, 0xc4, 0xfc, 0xd7, 0xbb, - 0xf1, 0x26, 0x22, 0x1a, 0x1a, 0x1a, 0x1f, 0x84, 0xaa, 0xaa, 0xb2, 0xb3, 0x2b, 0x3c, 0x44, 0xd8, - 0x8b, 0xc4, 0x18, 0xca, 0xaa, 0xbc, 0x4d, 0xf1, 0x67, 0x77, 0x77, 0x77, 0x77, 0xf2, 0x5d, 0xdd, - 0xf8, 0x8a, 0xe8, 0x98, 0x78, 0x82, 0xc3, 0x63, 0x51, 0xc7, 0x5d, 0x0b, 0xd4, 0x9c, 0xc6, 0x55, - 0x55, 0x80, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x08, 0x04, 0x30, 0x7a, 0x05, 0xbc, 0xe3, 0xd7, - 0xdb, 0x6d, 0x34, 0xc6, 0x74, 0x39, 0xe3, 0xfa, 0x1b, 0x55, 0xd5, 0xc8, 0x21, 0xea, 0xdf, 0x58, - 0xa1, 0x7e, 0xb9, 0x47, 0x72, 0xd5, 0x55, 0x46, 0xf5, 0xea, 0xeb, 0x84, 0x9d, 0x11, 0xfe, 0x8a, - 0xf0, 0x97, 0x47, 0x3d, 0xc3, 0x01, 0x80, 0x48, 0x3a, 0x27, 0x82, 0x7c, 0x9c, 0x00, 0x08, 0x29, - 0x19, 0xdf, 0x87, 0xc8, 0xaa, 0xaa, 0x79, 0xc2, 0xcc, 0xac, 0x0b, 0x0a, 0x71, 0x15, 0x9c, 0x3c, - 0x3e, 0x00, 0xd4, 0x30, 0x00, 0x25, 0x81, 0xe1, 0x80, 0x0d, 0x04, 0xd3, 0x07, 0x0c, 0xe5, 0xdb, - 0x6d, 0x8a, 0xb1, 0x57, 0x0e, 0x28, 0x04, 0xf8, 0x80, 0xa0, 0x78, 0xf7, 0xe9, 0xa6, 0x2d, 0x8a, - 0x5e, 0xd8, 0x9e, 0xbb, 0x4e, 0x1d, 0x39, 0xdd, 0x33, 0x4e, 0x4d, 0x16, 0xfb, 0x70, 0xe6, 0x00, - 0x1a, 0xaa, 0xf3, 0x82, 0xa5, 0x38, 0x35, 0xfb, 0xfd, 0x22, 0x69, 0x76, 0x7f, 0x52, 0x2e, 0x8f, - 0xfb, 0x78, 0x60, 0xc6, 0x86, 0x73, 0xe0, 0xe7, 0xe5, 0xf8, 0xab, 0x37, 0xc0, 0x82, 0x24, 0x11, - 0x8f, 0xdd, 0xc1, 0x0a, 0x49, 0xd4, 0xa8, 0xe8, 0x91, 0x22, 0x41, 0x40, 0x85, 0xad, 0x2b, 0x8e, - 0xb6, 0x1f, 0xf0, 0xc8, 0x90, 0x50, 0x21, 0x63, 0xb4, 0x85, 0x66, 0x23, 0x7c, 0x2f, 0xc3, 0x22, - 0x45, 0x13, 0x8d, 0x79, 0x47, 0xd4, 0x8a, 0x78, 0x64, 0x22, 0x58, 0xad, 0xfc, 0x22, 0x11, 0x2d, - 0xcf, 0xc3, 0x20, 0xfd, 0x82, 0x58, 0x42, 0x82, 0x35, 0xc3, 0x10, 0xb9, 0x84, 0x9e, 0x56, 0x02, - 0xc8, 0x53, 0x0f, 0x2d, 0x53, 0x38, 0x79, 0x79, 0xc0, 0x0f, 0x02, 0x42, 0x50, 0x70, 0x58, 0x8a, - 0x73, 0x78, 0xae, 0xf0, 0xf4, 0x40, 0x02, 0xec, 0x78, 0xff, 0xa4, 0x02, 0x66, 0x03, 0xd7, 0xe5, - 0x1d, 0x4d, 0xbc, 0x7d, 0xc7, 0xdf, 0x2e, 0xc4, 0x3c, 0xff, 0x28, 0xcb, 0x59, 0x6b, 0x28, 0x3a, - 0xa5, 0x46, 0x5a, 0xcb, 0x16, 0x1a, 0x6e, 0x0c, 0x6d, 0x72, 0xd6, 0x2a, 0xf1, 0x6c, 0x5b, 0x87, - 0xb0, 0x01, 0x9a, 0xd1, 0xe8, 0x1b, 0x0b, 0xef, 0xd9, 0xf6, 0xdb, 0xb7, 0x97, 0xae, 0xe6, 0xfe, - 0x2d, 0x8b, 0x60, 0x63, 0xb0, 0xda, 0xed, 0xb7, 0xf0, 0xe2, 0x28, 0x00, 0x56, 0x31, 0x77, 0x2a, - 0x6b, 0x38, 0xbd, 0x7c, 0x0e, 0xdd, 0xf5, 0x6c, 0xb5, 0x8f, 0xf8, 0xff, 0x8e, 0x2b, 0xbe, 0xba, - 0x69, 0xa9, 0x7c, 0xdc, 0x25, 0x38, 0x54, 0xe0, 0xff, 0xd3, 0x83, 0xb7, 0xf0, 0x3c, 0x80, 0x90, - 0x0a, 0x18, 0x94, 0x05, 0x5b, 0x81, 0x60, 0x6d, 0xa8, 0x74, 0x3b, 0x7b, 0x68, 0xe5, 0x80, 0x65, - 0x80, 0x63, 0xec, 0x2e, 0x8c, 0xe1, 0x2b, 0xa2, 0xc2, 0x2e, 0xa3, 0xf8, 0x44, 0xa2, 0x46, 0xd7, - 0x18, 0x01, 0x38, 0x0f, 0xca, 0xd4, 0xb8, 0x90, 0x48, 0x5d, 0xcd, 0x4e, 0xe2, 0x60, 0xa0, 0xda, - 0x97, 0x23, 0xfa, 0x39, 0x6f, 0xbe, 0x41, 0x19, 0xae, 0x22, 0x23, 0x1e, 0xaa, 0xb5, 0xf0, 0x89, - 0xd4, 0x94, 0xd1, 0xeb, 0xa8, 0x93, 0x98, 0x89, 0x04, 0x17, 0x05, 0x6d, 0x70, 0x80, 0x60, 0x10, - 0x85, 0xcb, 0x6f, 0xa3, 0x8c, 0x21, 0xd7, 0xc0, 0x2c, 0x1c, 0x44, 0x00, 0x21, 0x0a, 0xb9, 0xeb, - 0x5e, 0xf6, 0xdd, 0xff, 0xe9, 0xce, 0x9f, 0x5f, 0xad, 0x8a, 0xb5, 0x35, 0x38, 0xcf, 0xe1, 0xc4, - 0x20, 0x01, 0xe9, 0x07, 0xae, 0xa4, 0x51, 0xd4, 0xf1, 0x16, 0xb1, 0x57, 0x83, 0xb7, 0x1d, 0xb8, - 0x3b, 0x77, 0x7f, 0xf1, 0x19, 0x95, 0x76, 0xef, 0x76, 0xa7, 0x0f, 0x4c, 0x00, 0x4c, 0xd2, 0x87, - 0xe1, 0xa9, 0x1c, 0x0a, 0x22, 0x25, 0x5c, 0x3a, 0xbb, 0xbb, 0xbb, 0x34, 0x7d, 0xc7, 0x57, 0x1c, - 0x57, 0xd3, 0x4d, 0x5d, 0xf0, 0x4c, 0x07, 0x98, 0x6f, 0x5d, 0xb4, 0xd3, 0xf0, 0x16, 0x00, 0x84, - 0x6c, 0xe2, 0x44, 0x97, 0xa1, 0xe0, 0x00, 0x47, 0x8a, 0x23, 0x90, 0x2e, 0x21, 0x0f, 0x43, 0xb0, - 0x00, 0x10, 0x07, 0xcb, 0x0e, 0x03, 0x82, 0xc0, 0xaa, 0x38, 0x2d, 0xa7, 0x80, 0x0c, 0x00, 0xc0, - 0x04, 0xc0, 0x19, 0x00, 0xe2, 0x49, 0x4e, 0x74, 0x3b, 0x4a, 0x4a, 0x0a, 0x94, 0x45, 0x80, 0xc4, - 0xb8, 0x64, 0xc5, 0x6c, 0xdc, 0xde, 0x5e, 0x0f, 0xfa, 0x78, 0x18, 0x43, 0x01, 0x42, 0x87, 0xfa, - 0xaa, 0xc2, 0x21, 0x1f, 0x5a, 0x1d, 0x48, 0x28, 0x02, 0x41, 0xcd, 0x13, 0x9e, 0xab, 0x24, 0x95, - 0x12, 0x00, 0xa4, 0x2a, 0xd9, 0x97, 0x00, 0x01, 0x00, 0x2e, 0x98, 0x00, 0x0a, 0x0c, 0xbc, 0xee, - 0x05, 0x86, 0x05, 0xa1, 0xd5, 0x79, 0x16, 0x02, 0x44, 0x0c, 0x01, 0x43, 0x56, 0x04, 0x00, 0x3a, - 0x71, 0x13, 0x06, 0xb5, 0x4b, 0x4a, 0xf8, 0x00, 0xf7, 0x7f, 0xef, 0xdf, 0x84, 0xc0, 0x03, 0x91, - 0x41, 0xd4, 0x76, 0xc4, 0xc7, 0x41, 0x71, 0xa2, 0x80, 0x94, 0xcc, 0xe0, 0xa7, 0xe2, 0x6b, 0x98, - 0x26, 0x7f, 0x88, 0x7e, 0x24, 0x40, 0x27, 0x08, 0x3d, 0x51, 0x78, 0xbe, 0xfc, 0x44, 0x71, 0x2a, - 0xaa, 0xb5, 0x8b, 0xfc, 0x44, 0xc2, 0xdd, 0xdd, 0xfc, 0x12, 0x6a, 0x62, 0x0a, 0x32, 0x9c, 0x45, - 0xf2, 0x0a, 0x10, 0xe1, 0xee, 0x1f, 0x3c, 0x22, 0x21, 0x05, 0x7a, 0x23, 0x92, 0xee, 0xee, 0xba, - 0xd7, 0xd6, 0x28, 0x6a, 0x19, 0xac, 0xb8, 0x09, 0x90, 0x82, 0xb6, 0x18, 0x50, 0xd1, 0x3c, 0xbf, - 0xfb, 0x6d, 0xe2, 0xac, 0x55, 0x8e, 0xc7, 0xe3, 0x95, 0x62, 0xc3, 0x0a, 0x06, 0xdd, 0x12, 0xf6, - 0xdb, 0xff, 0xe2, 0xc3, 0x88, 0x70, 0x01, 0xe0, 0x50, 0x83, 0xd6, 0xb9, 0x27, 0x24, 0x7b, 0x85, - 0x66, 0xef, 0x6c, 0x71, 0x2e, 0x55, 0x5c, 0x3a, 0xb8, 0xe0, 0xb7, 0xf8, 0x3b, 0x7c, 0x02, 0x04, - 0x0f, 0xd4, 0xdf, 0x97, 0xf8, 0x12, 0x00, 0x44, 0x05, 0x24, 0x80, 0x37, 0x35, 0x31, 0x35, 0x13, - 0x3a, 0x3c, 0xdd, 0x0f, 0x0b, 0x3a, 0x02, 0xe1, 0x7e, 0x61, 0x06, 0xb2, 0x78, 0x1d, 0xca, 0x45, - 0x94, 0xc8, 0x78, 0x1f, 0x9a, 0x13, 0x03, 0xec, 0xe4, 0xea, 0x78, 0x00, 0x11, 0x83, 0xad, 0xc2, - 0xb0, 0x6a, 0x9f, 0x84, 0x00, 0x44, 0x05, 0x3a, 0x50, 0xe3, 0xc6, 0x7d, 0x41, 0x78, 0x91, 0x88, - 0x22, 0x21, 0xc2, 0x5e, 0x08, 0x0b, 0x91, 0x72, 0x25, 0xb2, 0x97, 0x70, 0x00, 0x08, 0x00, 0x82, - 0x88, 0x00, 0x56, 0x96, 0x2c, 0x81, 0x3c, 0x00, 0x67, 0x80, 0x01, 0x15, 0x0f, 0x9c, 0x4a, 0x20, - 0x43, 0x9c, 0x0b, 0x11, 0xd4, 0xa2, 0x96, 0x82, 0x8e, 0x20, 0x82, 0xd3, 0x82, 0x10, 0x4c, 0x55, - 0xf4, 0xcb, 0x4f, 0xd7, 0x00, 0x08, 0x55, 0x35, 0xc0, 0x00, 0x44, 0x05, 0x52, 0xfa, 0xf1, 0x22, - 0xbc, 0x8f, 0xb7, 0x37, 0xf1, 0x02, 0xb5, 0x55, 0x5f, 0x12, 0x20, 0xc1, 0x1b, 0xbb, 0xfa, 0xff, - 0x88, 0x8e, 0x08, 0x72, 0xf1, 0x0f, 0x27, 0x55, 0xf9, 0xcf, 0x9e, 0x20, 0x45, 0x74, 0x19, 0x22, - 0x32, 0x04, 0x9d, 0x10, 0xb6, 0x39, 0x4d, 0x87, 0x4c, 0x42, 0x82, 0x46, 0x29, 0xe6, 0x8c, 0x24, - 0x1a, 0xa6, 0x5d, 0x8e, 0x50, 0x32, 0x9a, 0x03, 0x8d, 0x86, 0x14, 0x0f, 0xe6, 0xbf, 0xfa, 0x69, - 0xe9, 0xa6, 0x74, 0xc3, 0xd1, 0x80, 0x01, 0x65, 0xe9, 0xb0, 0xb2, 0xa9, 0xd5, 0x69, 0xf2, 0xff, - 0xfc, 0xfd, 0x80, 0x77, 0x3b, 0xf9, 0x51, 0xf8, 0xf0, 0x68, 0x54, 0x52, 0x9c, 0xc1, 0xed, 0xdf, - 0x03, 0xff, 0x57, 0x0f, 0xec, 0x0a, 0xbe, 0x27, 0xe2, 0x4f, 0x3d, 0x02, 0x8f, 0x4e, 0x1f, 0x0b, - 0xb3, 0x00, 0x2b, 0x31, 0xf2, 0x20, 0x77, 0xcf, 0x8a, 0x49, 0xe6, 0x5f, 0x46, 0xc4, 0xf5, 0x8a, - 0xf6, 0xa7, 0x19, 0x29, 0xd1, 0x46, 0x09, 0xc6, 0x95, 0x9e, 0x0b, 0x15, 0x96, 0x1a, 0x8c, 0x0a, - 0x06, 0x77, 0xb6, 0x1b, 0x65, 0x00, 0x5c, 0x85, 0xa5, 0x41, 0x5b, 0xd4, 0xf4, 0xbc, 0xfe, 0x5b, - 0x4d, 0x20, 0x2a, 0xbf, 0xb8, 0x02, 0xb3, 0x16, 0x8d, 0x65, 0xf8, 0xae, 0x36, 0xb7, 0xad, 0x78, - 0x81, 0x35, 0x12, 0x10, 0xf1, 0x02, 0xcb, 0xbb, 0xbb, 0xdd, 0x70, 0x88, 0xaa, 0xaa, 0xa8, 0x9e, - 0x09, 0x0c, 0x19, 0x8c, 0xcf, 0x82, 0x5e, 0x82, 0xae, 0x5e, 0x27, 0xc4, 0x58, 0x51, 0x4a, 0x6f, - 0xf6, 0xff, 0xf1, 0xca, 0xe3, 0xb6, 0x1c, 0x44, 0x00, 0x0c, 0x5e, 0xb2, 0x39, 0xe1, 0x3f, 0xef, - 0x9e, 0x1f, 0x13, 0xff, 0x13, 0x84, 0x4e, 0x02, 0x5c, 0x45, 0x62, 0x70, 0x89, 0xc2, 0x21, 0x84, - 0x43, 0x08, 0x5d, 0x8e, 0x00, 0x63, 0xcc, 0x80, 0x8a, 0x97, 0x5e, 0xff, 0xa5, 0x66, 0xa8, 0x3c, - 0xa7, 0x60, 0xcf, 0x3b, 0xcb, 0xd4, 0xe3, 0x09, 0x2c, 0x3f, 0x61, 0xb2, 0x40, 0xea, 0x22, 0x44, - 0x03, 0x1d, 0x48, 0x12, 0x8b, 0xfd, 0x7b, 0x2d, 0x36, 0x44, 0xf0, 0xf5, 0x18, 0x2a, 0x9d, 0xc5, - 0x18, 0x1a, 0xc1, 0xac, 0xfd, 0x3a, 0xf5, 0xac, 0x9c, 0xc5, 0xd4, 0x48, 0x61, 0xe1, 0x23, 0x4f, - 0x98, 0xb9, 0x35, 0x9f, 0xc2, 0x1f, 0x08, 0x43, 0x7d, 0x05, 0xda, 0x3f, 0xa9, 0x52, 0x83, 0x88, - 0xc0, 0x06, 0xa4, 0xd9, 0x23, 0x68, 0x77, 0xe7, 0xff, 0xc5, 0x58, 0x96, 0xb4, 0xc2, 0x69, 0xba, - 0x83, 0xef, 0xf8, 0x21, 0x06, 0x00, 0xb0, 0x53, 0x86, 0x88, 0x95, 0x8d, 0x39, 0x33, 0x47, 0x3e, - 0x8a, 0xce, 0x70, 0x88, 0x0f, 0x4c, 0x85, 0xfc, 0x64, 0xa9, 0xb5, 0xc7, 0x0b, 0x2b, 0x38, 0x40, - 0x1c, 0x85, 0x3c, 0x19, 0x2d, 0x41, 0x3b, 0x0b, 0x25, 0xd8, 0x7c, 0x94, 0x54, 0x8f, 0xae, 0xe2, - 0x30, 0x43, 0x51, 0xfe, 0x26, 0x0d, 0x0a, 0x84, 0xb1, 0x03, 0xd3, 0x9d, 0x09, 0x17, 0x84, 0xa7, - 0x52, 0x38, 0xb0, 0x2a, 0x5d, 0xc2, 0x21, 0x00, 0xa1, 0x11, 0x2d, 0x00, 0x1d, 0x22, 0xaf, 0x0c, - 0xbc, 0x12, 0x70, 0x00, 0x27, 0x2a, 0x1a, 0x23, 0xa5, 0xb3, 0x0a, 0xf6, 0x42, 0x40, 0x05, 0xe1, - 0x83, 0x00, 0x5f, 0x0c, 0x05, 0x7e, 0x0f, 0xe9, 0x5b, 0x64, 0xee, 0x36, 0xe3, 0x96, 0xc8, 0x9e, - 0x20, 0x47, 0x3f, 0x82, 0x79, 0x9a, 0x86, 0xa7, 0x89, 0x97, 0x1e, 0xdc, 0x51, 0xbd, 0xfd, 0x9e, - 0xee, 0xfc, 0x40, 0x81, 0x1c, 0xb0, 0x10, 0xc1, 0x7e, 0x4f, 0x87, 0x88, 0xf8, 0x94, 0x19, 0xe9, - 0xba, 0x15, 0xd1, 0xd8, 0x10, 0x10, 0xd1, 0x12, 0x49, 0xfa, 0x23, 0x90, 0x8e, 0x20, 0x12, 0x13, - 0x6c, 0x57, 0x5c, 0x22, 0x18, 0x18, 0x2b, 0x27, 0x37, 0x13, 0xe7, 0x07, 0x37, 0xb9, 0xb2, 0x98, - 0xac, 0x51, 0xf8, 0x91, 0x01, 0x4d, 0x1d, 0xf6, 0x5b, 0x77, 0x77, 0x27, 0xa9, 0xda, 0xdf, 0x84, - 0x23, 0x32, 0xcc, 0x49, 0xbd, 0xf6, 0x1d, 0x96, 0xf1, 0x59, 0x3b, 0xf0, 0xfd, 0xbf, 0x89, 0xbf, - 0x77, 0xf4, 0x5f, 0xfd, 0x5b, 0xec, 0x62, 0xaa, 0xa8, 0x43, 0xa0, 0xaf, 0x7d, 0x15, 0xe1, 0x6e, - 0xb1, 0x44, 0x44, 0x88, 0x14, 0x12, 0xbd, 0xcb, 0xea, 0x89, 0x39, 0x89, 0x12, 0x30, 0x97, 0xae, - 0x2e, 0x2f, 0x17, 0x50, 0x7d, 0xa0, 0xdd, 0xe3, 0xf6, 0x05, 0xa9, 0xe3, 0x01, 0x02, 0x20, 0x1e, - 0xf6, 0x20, 0x48, 0xc3, 0x89, 0x72, 0xaa, 0xc4, 0x9c, 0x13, 0xc1, 0x73, 0xc0, 0xe1, 0x60, 0x6d, - 0xd3, 0xcf, 0x06, 0x24, 0x3a, 0x38, 0x36, 0x01, 0xaa, 0x96, 0x01, 0x8a, 0x06, 0x78, 0x01, 0xc2, - 0xc0, 0x3c, 0x44, 0x29, 0x2c, 0xf1, 0x43, 0x9b, 0xaa, 0xa8, 0x80, 0x3d, 0x4e, 0x0f, 0x95, 0x89, - 0xe5, 0xbc, 0x4f, 0x11, 0x08, 0xeb, 0x55, 0xaa, 0xd0, 0xdb, 0x1a, 0x95, 0xec, 0xf7, 0xbf, 0x10, - 0x41, 0x9a, 0xaf, 0x10, 0x51, 0x29, 0xc4, 0x7f, 0xd0, 0xf3, 0xa4, 0x57, 0x5d, 0x49, 0xd6, 0xa1, - 0xec, 0x42, 0x8c, 0xa7, 0xc1, 0x38, 0x49, 0x22, 0x50, 0x2b, 0x54, 0xaf, 0x66, 0x65, 0x08, 0x3c, - 0xfc, 0x44, 0x61, 0x0b, 0x0d, 0x90, 0x2f, 0x07, 0xdc, 0xb1, 0xb4, 0x59, 0x98, 0x00, 0x41, 0x8a, - 0x88, 0x80, 0x4f, 0x97, 0x40, 0x16, 0x02, 0x28, 0xce, 0x41, 0x4c, 0x8a, 0x0d, 0xa0, 0xe7, 0x09, - 0x86, 0xb5, 0x28, 0x2e, 0xb4, 0x38, 0x2d, 0x44, 0x4b, 0x0d, 0xe0, 0x18, 0x2f, 0x91, 0xa6, 0x20, - 0x48, 0xc8, 0xf1, 0x03, 0xc0, 0xc3, 0x9e, 0x00, 0xed, 0x72, 0x5a, 0x04, 0xd2, 0xcb, 0x60, 0x5f, - 0x3f, 0xe5, 0x81, 0x9f, 0xe5, 0x80, 0x67, 0xee, 0xc2, 0xd5, 0x05, 0x4a, 0xec, 0x2c, 0xcf, 0xf9, - 0xf1, 0x12, 0xc3, 0x17, 0x10, 0x1f, 0x25, 0xff, 0x89, 0x09, 0xdf, 0x77, 0x01, 0xf0, 0xd2, 0xe4, - 0x01, 0x02, 0x7f, 0x82, 0xd9, 0x68, 0x67, 0xfe, 0x0b, 0x0b, 0x9a, 0x87, 0x07, 0x93, 0xc1, 0xc7, - 0x2f, 0x6d, 0xe4, 0x76, 0xcb, 0x91, 0x77, 0x78, 0x8a, 0xe1, 0x02, 0x2d, 0x49, 0xea, 0xab, 0x93, - 0xc6, 0x74, 0x15, 0x79, 0xfa, 0xd5, 0x75, 0x6f, 0xab, 0x11, 0xfd, 0x58, 0x89, 0x88, 0x13, 0xf0, - 0x88, 0x50, 0x8c, 0xeb, 0xe3, 0x68, 0xa4, 0x40, 0x53, 0xf8, 0x15, 0x49, 0x60, 0xb3, 0xd1, 0x24, - 0xe2, 0xb7, 0x3e, 0x13, 0x63, 0x1a, 0x1b, 0x4b, 0x6c, 0x54, 0x4e, 0x50, 0xf2, 0xb3, 0x96, 0xf1, - 0xdc, 0x98, 0x21, 0x0a, 0x7f, 0x98, 0x10, 0xc8, 0x06, 0x5a, 0x1f, 0xab, 0x77, 0xa7, 0xb1, 0xe9, - 0xa8, 0xf3, 0x4c, 0xa7, 0xee, 0x92, 0xc4, 0x0c, 0xc3, 0x49, 0x37, 0x48, 0x37, 0x76, 0x25, 0x70, - 0xf9, 0xba, 0xb2, 0x86, 0x81, 0xea, 0x1a, 0xbd, 0x47, 0xdc, 0xb7, 0xad, 0x88, 0x84, 0x4a, 0x9b, - 0x0a, 0x76, 0xff, 0x08, 0x44, 0xb1, 0xd0, 0xdd, 0xdf, 0x38, 0x05, 0x14, 0x7a, 0xf0, 0x6a, 0xf4, - 0xc1, 0x29, 0xf9, 0x7b, 0xa5, 0x77, 0x27, 0x6a, 0xd1, 0xb1, 0xb6, 0xce, 0x27, 0x8b, 0xe5, 0x13, - 0xbb, 0xf1, 0x3f, 0x14, 0x21, 0xee, 0xf1, 0x5d, 0xf8, 0x82, 0x94, 0x5e, 0x15, 0x2c, 0x4b, 0xc4, - 0x74, 0x13, 0x70, 0x09, 0x31, 0x08, 0x55, 0x7c, 0x10, 0xd1, 0x45, 0x4b, 0xcb, 0xf0, 0x50, 0x45, - 0x55, 0x55, 0x17, 0x0b, 0x72, 0x1b, 0x13, 0xe5, 0x77, 0xc1, 0x21, 0x9e, 0xe2, 0xb6, 0xf1, 0x02, - 0x6a, 0xba, 0xaf, 0xe1, 0x23, 0xef, 0xcb, 0xbd, 0xf8, 0x98, 0x88, 0x15, 0x53, 0xc7, 0x30, 0x7d, - 0x27, 0x2d, 0xc5, 0x4d, 0x00, 0xcb, 0x16, 0xdf, 0x97, 0xc4, 0xa2, 0xbd, 0xe2, 0x07, 0x8c, 0xc9, - 0x98, 0x9e, 0x46, 0x96, 0x73, 0x7f, 0x88, 0x29, 0x41, 0xd5, 0x91, 0x1c, 0x13, 0xc1, 0x5d, 0x05, - 0x52, 0xc3, 0xfd, 0x0f, 0x73, 0xc4, 0x7d, 0x07, 0x9f, 0xe2, 0x2a, 0xa6, 0xa3, 0xa8, 0xb9, 0xf8, - 0x29, 0x20, 0xbf, 0xc3, 0x60, 0x68, 0xbb, 0x0a, 0x3c, 0x58, 0x5e, 0x7e, 0xff, 0x7c, 0x79, 0x09, - 0x55, 0x6e, 0x2a, 0xcc, 0xb6, 0x48, 0xa9, 0xe0, 0x98, 0x8a, 0x3e, 0x59, 0x39, 0xd1, 0x42, 0xf1, - 0xf8, 0x80, 0x81, 0xc1, 0xbf, 0xc5, 0x3e, 0x41, 0xdc, 0xd5, 0xf9, 0x79, 0xef, 0xb4, 0xd7, 0x11, - 0x58, 0x82, 0x0f, 0x7b, 0x2b, 0xc4, 0x98, 0x65, 0xef, 0xc4, 0x02, 0x71, 0x0b, 0x17, 0x58, 0x8e, - 0x7d, 0xc4, 0xca, 0x72, 0x78, 0xba, 0xe1, 0x1c, 0x31, 0xd0, 0xdc, 0xa3, 0xe2, 0x26, 0x36, 0xd8, - 0x57, 0x4e, 0x27, 0xff, 0x31, 0x1b, 0x26, 0xdb, 0xf0, 0x89, 0x2a, 0xaa, 0xeb, 0x5c, 0x94, 0x17, - 0xf1, 0x98, 0xd5, 0x2d, 0x67, 0x72, 0x2f, 0x9b, 0x20, 0xd9, 0xf4, 0x14, 0xcd, 0x17, 0x62, 0x0f, - 0x89, 0x21, 0xc9, 0x91, 0x7e, 0xaf, 0xe2, 0x45, 0x95, 0x55, 0x56, 0xab, 0xf3, 0x53, 0x44, 0xbf, - 0x2e, 0xb5, 0xe2, 0x2b, 0x10, 0x4a, 0xaa, 0xaf, 0x88, 0x1c, 0xab, 0xae, 0x4c, 0xf2, 0xea, 0xef, - 0xc4, 0x14, 0x2b, 0x8d, 0x7b, 0x04, 0xb1, 0x13, 0x0e, 0xaa, 0xae, 0x26, 0x10, 0xdd, 0xcf, 0x8f, - 0xbe, 0xa6, 0xff, 0x10, 0xe9, 0x5d, 0xde, 0x24, 0x60, 0x8d, 0xdc, 0x28, 0xa9, 0x63, 0x30, 0x01, - 0xd8, 0xe0, 0xf0, 0xd3, 0xce, 0x07, 0x5a, 0xc3, 0xbe, 0x05, 0x90, 0x58, 0x39, 0x05, 0x8d, 0xcf, - 0xc2, 0x93, 0xf0, 0x19, 0xa0, 0x7e, 0xd7, 0x5e, 0xda, 0x3c, 0x78, 0xc2, 0xfc, 0x9b, 0x9a, 0x5e, - 0x5c, 0xef, 0x12, 0x10, 0x3e, 0xff, 0x12, 0xc0, 0xb8, 0x54, 0x66, 0x63, 0x18, 0x75, 0x47, 0xeb, - 0xc4, 0x16, 0xf7, 0xf1, 0x1e, 0x21, 0x8b, 0x74, 0x73, 0x5e, 0x24, 0x48, 0x25, 0xd6, 0x89, 0xf7, - 0xef, 0x11, 0x51, 0x02, 0x2b, 0x90, 0x43, 0xa5, 0x6b, 0x13, 0xf8, 0xb2, 0x0a, 0xf7, 0xdd, 0xc3, - 0x3d, 0x05, 0x52, 0x21, 0x3d, 0x1b, 0x0f, 0x82, 0x71, 0x4a, 0x96, 0xf7, 0xf7, 0xc9, 0x77, 0xfc, - 0xc4, 0x7d, 0xd6, 0x25, 0x0b, 0x2d, 0xf3, 0x19, 0x49, 0x94, 0xf8, 0x80, 0x53, 0x0a, 0x0d, 0xc3, - 0xea, 0x2b, 0x93, 0xb8, 0x31, 0xff, 0x3f, 0x90, 0x6a, 0x14, 0x91, 0xab, 0xbe, 0x14, 0xd9, 0xfe, - 0xe7, 0xb8, 0xf7, 0x8a, 0xdb, 0x7d, 0x37, 0xf1, 0x21, 0x49, 0xc1, 0xc3, 0x33, 0x2e, 0x77, 0x0a, - 0x2d, 0x65, 0x74, 0xba, 0xf4, 0xdf, 0x3e, 0x7d, 0xf2, 0x1e, 0xaf, 0xf7, 0x77, 0xf8, 0x92, 0x6b, - 0x5c, 0x4c, 0x93, 0xc1, 0x94, 0xa6, 0x3c, 0x45, 0xfe, 0x10, 0xfd, 0x5f, 0xe2, 0x88, 0xc1, 0x86, - 0x81, 0x1f, 0xd5, 0x71, 0x30, 0x98, 0x87, 0x62, 0x93, 0x35, 0x36, 0x7e, 0x53, 0xbc, 0x56, 0x5c, - 0xe2, 0x21, 0x7e, 0x84, 0xf4, 0x46, 0x20, 0x11, 0x1a, 0x7b, 0xf0, 0x3b, 0xe2, 0x3c, 0x40, 0x22, - 0xea, 0xbd, 0x5c, 0x95, 0x5a, 0xf8, 0x44, 0xea, 0xbd, 0x5e, 0xb4, 0x8b, 0x9e, 0x3c, 0x62, 0xaa, - 0xae, 0xa2, 0xe2, 0xf4, 0xbc, 0x48, 0xf9, 0x3f, 0x29, 0xeb, 0x5a, 0xeb, 0xc4, 0x05, 0x0e, 0xf7, - 0x57, 0x78, 0xad, 0xdb, 0xb6, 0x46, 0x6f, 0x7e, 0xf1, 0x23, 0xab, 0x5e, 0xad, 0x6e, 0xf8, 0x91, - 0x3f, 0x28, 0x9d, 0x27, 0x51, 0x3b, 0xc4, 0x3b, 0xbb, 0xd7, 0x31, 0x25, 0xcb, 0xae, 0x08, 0x4a, - 0xbb, 0x43, 0xb7, 0x88, 0x29, 0x33, 0xc3, 0xc4, 0x88, 0x18, 0xf7, 0xa5, 0x77, 0xf1, 0x3d, 0xdd, - 0xf7, 0x0f, 0x74, 0x2e, 0x5e, 0x25, 0x91, 0x5d, 0xe5, 0xe6, 0x3d, 0x6b, 0xe0, 0x9c, 0x45, 0xde, - 0xed, 0xed, 0xf2, 0x55, 0x55, 0x78, 0x80, 0x4a, 0x59, 0xbd, 0x53, 0x74, 0xef, 0xf0, 0x4e, 0x24, - 0xfd, 0xfb, 0xdc, 0x7d, 0xf6, 0x47, 0x7b, 0xbc, 0x47, 0x88, 0x64, 0x55, 0xab, 0xe8, 0x9d, 0xe2, - 0x11, 0xfb, 0x89, 0xf1, 0x36, 0x25, 0x99, 0xae, 0x51, 0x9c, 0x40, 0x86, 0x4c, 0x94, 0x5f, 0x34, - 0x97, 0xb3, 0xf1, 0xe3, 0x1d, 0xdd, 0xdd, 0xcb, 0xcf, 0x7b, 0xbf, 0x2f, 0xe0, 0x8e, 0x25, 0xed, - 0xbf, 0x2c, 0x06, 0xa1, 0xce, 0x87, 0xc5, 0xe2, 0x05, 0x88, 0x77, 0xdd, 0xfe, 0x20, 0xbd, 0xdb, - 0x24, 0x47, 0xe4, 0x2d, 0x35, 0x4f, 0x88, 0x04, 0x84, 0x5a, 0xdf, 0xe0, 0x8e, 0xba, 0xf7, 0xcd, - 0x4e, 0x9b, 0xbc, 0x47, 0xfe, 0x8e, 0x54, 0xf9, 0x2e, 0xee, 0xf8, 0x81, 0x1e, 0x23, 0xfe, 0x25, - 0x5f, 0x88, 0x10, 0x89, 0xdc, 0x44, 0xa2, 0x76, 0x9a, 0xc4, 0x89, 0xe2, 0x60, 0x9e, 0xef, 0xb4, - 0xef, 0xef, 0xa2, 0x6b, 0xc4, 0x02, 0x21, 0x42, 0xe2, 0x38, 0x2f, 0xfe, 0x23, 0xa1, 0x3d, 0x0a, - 0xf1, 0x26, 0x12, 0xe4, 0x5e, 0xae, 0x9f, 0x89, 0x10, 0x57, 0x77, 0xbb, 0xeb, 0xbe, 0xaa, 0xb1, - 0x15, 0x89, 0x04, 0x45, 0x77, 0xd1, 0xdf, 0x82, 0xa8, 0xf2, 0x0e, 0x74, 0x3b, 0xa6, 0xf7, 0xef, - 0x82, 0x4b, 0xb7, 0xf7, 0xd9, 0x35, 0x5e, 0x21, 0x1d, 0xfc, 0x4f, 0xd9, 0x95, 0x77, 0x89, 0xf9, - 0x08, 0xfb, 0xf1, 0x25, 0x3b, 0xbd, 0xfd, 0x15, 0x8f, 0xf8, 0x9f, 0x8e, 0xe9, 0x9f, 0xcb, 0xdf, - 0x45, 0x67, 0x23, 0xe2, 0x04, 0x17, 0xaa, 0xff, 0x89, 0xf1, 0x00, 0x9c, 0x67, 0x3c, 0x14, 0xbe, - 0xbf, 0xf8, 0x23, 0x2a, 0xcf, 0x0c, 0xa1, 0xae, 0x17, 0xce, 0xcc, 0x1d, 0x98, 0x1a, 0xca, 0x35, - 0xd4, 0xf5, 0x89, 0x44, 0x06, 0x21, 0x11, 0xf2, 0x62, 0x3c, 0x49, 0x8d, 0x7b, 0xf9, 0x44, 0xbb, - 0xbb, 0xf8, 0xab, 0xbb, 0xbb, 0xbb, 0xbe, 0x26, 0x52, 0xbd, 0xfc, 0x4a, 0xbf, 0xcd, 0x63, 0x43, - 0x3b, 0x10, 0x7c, 0x42, 0xbf, 0xcb, 0x4e, 0xd7, 0xe5, 0xe6, 0x36, 0x6b, 0x9b, 0xde, 0x23, 0xe1, - 0x83, 0x3b, 0xdd, 0xcb, 0xb7, 0x35, 0x8f, 0x76, 0x8b, 0xc3, 0x3c, 0x38, 0x26, 0xdc, 0x15, 0x57, - 0x66, 0xea, 0x05, 0xbe, 0x6d, 0xfc, 0x40, 0x2e, 0x23, 0x8a, 0xd5, 0xeb, 0x51, 0xda, 0xb1, 0x1e, - 0x24, 0xa7, 0xbb, 0xd7, 0x25, 0x37, 0x27, 0xfc, 0x13, 0x08, 0xdd, 0xee, 0xf7, 0xf9, 0x84, 0xbb, - 0xbb, 0xbc, 0x40, 0x24, 0xaa, 0x5f, 0x7d, 0x17, 0xfc, 0x4d, 0xd7, 0x2e, 0x3c, 0x49, 0x4c, 0xee, - 0xf5, 0xc9, 0x5b, 0x2e, 0x26, 0xca, 0xa2, 0x38, 0xb3, 0xc4, 0x7c, 0x4d, 0x6a, 0xbb, 0xbb, 0xe1, - 0x2e, 0xad, 0xa0, 0xaa, 0xd7, 0xf8, 0x9f, 0x11, 0xe2, 0x7c, 0x47, 0x88, 0x04, 0x22, 0x93, 0xac, - 0x6a, 0x08, 0xce, 0x84, 0xb1, 0x19, 0xc5, 0x8a, 0x9b, 0x2a, 0xaf, 0xfb, 0xde, 0xef, 0xb1, 0x6f, - 0xbb, 0xe0, 0x88, 0x8f, 0xbf, 0x7c, 0x17, 0x77, 0x7b, 0x97, 0x2d, 0xfe, 0x8a, 0xfe, 0x21, 0xf9, - 0xbf, 0x84, 0xef, 0x77, 0x9b, 0xea, 0x27, 0x58, 0x97, 0x7b, 0xbe, 0x24, 0x45, 0x62, 0x0d, 0xac, - 0xb4, 0xf0, 0x81, 0x5d, 0x4c, 0x66, 0xba, 0x9a, 0xd2, 0x5c, 0x5f, 0xdd, 0x2b, 0x5e, 0x21, 0x5f, - 0xe5, 0xa1, 0xe4, 0x8f, 0x11, 0xff, 0x13, 0xe2, 0x3c, 0x4f, 0x88, 0xf1, 0x3e, 0x20, 0x83, 0x05, - 0xeb, 0xf1, 0x37, 0xa1, 0xf2, 0xec, 0x29, 0xd0, 0x96, 0x2b, 0x82, 0x41, 0x43, 0x79, 0x93, 0x4c, - 0x13, 0xee, 0x28, 0x58, 0x24, 0xe5, 0x12, 0xb5, 0xf1, 0x1f, 0x09, 0xee, 0x9d, 0xdf, 0xf4, 0x5e, - 0xae, 0x43, 0x3b, 0xdf, 0x12, 0x20, 0x10, 0xd6, 0xa9, 0xbf, 0xd5, 0xfc, 0x4f, 0xcd, 0xaa, 0xd6, - 0x26, 0x5c, 0x49, 0x0e, 0xfb, 0xf1, 0x2f, 0x57, 0xac, 0x47, 0x89, 0xf9, 0xa8, 0xd5, 0x6f, 0x11, - 0xe2, 0x61, 0x8e, 0x09, 0x3c, 0x21, 0x19, 0x2f, 0x78, 0x80, 0x4c, 0x32, 0x5f, 0x77, 0xdc, 0xf5, - 0x62, 0x01, 0x41, 0xea, 0xba, 0xd7, 0xf7, 0xcc, 0x7a, 0xd7, 0xd5, 0xfc, 0x45, 0xc4, 0x6b, 0xfc, - 0xdb, 0xbb, 0xfa, 0xf5, 0xf3, 0x65, 0x65, 0x3f, 0x88, 0xf1, 0x17, 0xcc, 0x57, 0x77, 0x75, 0x88, - 0xbc, 0x41, 0x44, 0x6a, 0xbe, 0x6d, 0xde, 0xfb, 0xaa, 0xd7, 0x88, 0x05, 0xb1, 0x72, 0x7a, 0x6f, - 0xb9, 0x1a, 0x15, 0xe0, 0xb0, 0x44, 0xbd, 0xb1, 0x85, 0xe3, 0xca, 0x17, 0xdc, 0xd9, 0xe6, 0xb8, - 0x89, 0x0b, 0x5a, 0xac, 0x47, 0x88, 0x21, 0x69, 0xaa, 0x7e, 0x30, 0x55, 0x8e, 0x6e, 0x3d, 0x73, - 0xf5, 0xa8, 0x8f, 0xff, 0x14, 0x3d, 0x55, 0x56, 0xaa, 0x2f, 0xc4, 0x4d, 0x12, 0x25, 0x13, 0xab, - 0x13, 0x5c, 0xc2, 0x55, 0x55, 0x4b, 0xcb, 0x77, 0x77, 0x78, 0x8f, 0x11, 0x5e, 0xb9, 0x44, 0x6e, - 0xd9, 0x31, 0x00, 0x88, 0x8a, 0xb5, 0xe8, 0x53, 0x82, 0x62, 0x57, 0xdd, 0xb3, 0x9b, 0xb3, 0x85, - 0x66, 0xce, 0x5e, 0x22, 0xf9, 0xb5, 0xaf, 0xbc, 0xdd, 0x72, 0x61, 0x06, 0x36, 0xab, 0xf6, 0x55, - 0x55, 0x5f, 0x2d, 0x55, 0x57, 0xc9, 0x5d, 0x57, 0x04, 0x5d, 0xdc, 0xe9, 0xe2, 0x0a, 0x6d, 0x55, - 0x62, 0x05, 0x95, 0xf7, 0xaa, 0xaa, 0xe5, 0xbd, 0xbf, 0xb3, 0x91, 0x99, 0x19, 0x97, 0x12, 0x61, - 0xdb, 0xbf, 0x8b, 0xe9, 0x25, 0xbb, 0xf1, 0x1e, 0x26, 0xb9, 0x0b, 0xbb, 0x93, 0x11, 0x7d, 0x1f, - 0x52, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x09, 0x04, 0xb0, 0x52, 0x02, 0x7f, 0x04, 0x82, - 0x6b, 0x52, 0xd8, 0x6c, 0x82, 0x00, 0x08, 0xea, 0x15, 0x91, 0x82, 0x34, 0xdf, 0x07, 0xeb, 0x27, - 0x27, 0x4e, 0x7f, 0x55, 0x51, 0x80, 0x02, 0x86, 0x80, 0x52, 0xf7, 0xf0, 0xdb, 0x80, 0x1c, 0xa3, - 0x62, 0x20, 0x52, 0xeb, 0x76, 0x9b, 0xfb, 0xbc, 0xbf, 0x78, 0x24, 0x64, 0xef, 0xd6, 0x0d, 0x3a, - 0x17, 0x2c, 0x36, 0xc5, 0x02, 0x51, 0x21, 0x5a, 0x2b, 0x5f, 0xff, 0x24, 0xf5, 0xad, 0xef, 0x85, - 0xc9, 0x00, 0x23, 0x96, 0xc2, 0x58, 0xcc, 0x0b, 0x77, 0xe5, 0xef, 0x5a, 0xef, 0x15, 0xc5, 0x8b, - 0x61, 0x38, 0xed, 0x06, 0x02, 0x89, 0xce, 0x49, 0xb2, 0x29, 0x53, 0xc0, 0xf0, 0x19, 0x56, 0xf8, - 0x2a, 0x09, 0x56, 0xa5, 0xe2, 0x00, 0x1f, 0x19, 0xc0, 0xf5, 0x39, 0xeb, 0x18, 0x90, 0xe2, 0x22, - 0xc2, 0xf8, 0x01, 0x57, 0xc5, 0x2c, 0x67, 0x13, 0x3e, 0x5c, 0xfc, 0xbe, 0x2f, 0xad, 0x5d, 0xe1, - 0x91, 0x25, 0x3f, 0x9f, 0xcf, 0x7c, 0x74, 0xfc, 0xf0, 0x80, 0x8e, 0x20, 0x47, 0x08, 0x08, 0xe1, - 0x0c, 0x13, 0x0a, 0x5c, 0x41, 0x38, 0xa4, 0x3c, 0x84, 0x18, 0x8f, 0x0e, 0x46, 0x1b, 0xfd, 0x7f, - 0xf1, 0x54, 0xba, 0xd6, 0xf7, 0xc1, 0x88, 0x0c, 0x81, 0x86, 0x11, 0xe2, 0xb2, 0x72, 0xdb, 0x85, - 0x85, 0x5e, 0xc9, 0xcb, 0x18, 0x3c, 0xb9, 0xc3, 0xc5, 0x6e, 0x5b, 0xc2, 0xee, 0x03, 0x01, 0x6d, - 0x43, 0x5e, 0xbd, 0xdf, 0xef, 0xbf, 0xf4, 0xb8, 0x43, 0xc4, 0x5f, 0x24, 0x57, 0xc1, 0x41, 0xe3, - 0xda, 0x9f, 0xce, 0x8a, 0x6c, 0x8e, 0x99, 0xad, 0x70, 0xc0, 0x16, 0x01, 0x48, 0xc1, 0x01, 0xed, - 0xe2, 0x87, 0xdd, 0xe2, 0x86, 0xa2, 0xea, 0xfc, 0x18, 0x80, 0x90, 0x92, 0x10, 0xdf, 0x36, 0xb5, - 0x05, 0x82, 0x97, 0x80, 0xa9, 0x01, 0xa3, 0x84, 0xdc, 0x0d, 0x77, 0xa7, 0xff, 0xbf, 0xf0, 0x62, - 0x07, 0x01, 0x3b, 0xdd, 0xbb, 0x6a, 0xf0, 0xc7, 0x88, 0xbc, 0x44, 0x16, 0x8a, 0x84, 0x52, 0x84, - 0xd8, 0x40, 0x20, 0xe7, 0x3f, 0xf3, 0x43, 0xf8, 0x21, 0x0c, 0x09, 0x8a, 0xc5, 0x01, 0xb8, 0xaf, - 0x8a, 0x6f, 0x97, 0xaa, 0xbe, 0x4c, 0x5f, 0x05, 0xc2, 0x17, 0x84, 0x02, 0x21, 0x3a, 0xaa, 0xdd, - 0xc5, 0x62, 0xbe, 0x10, 0x13, 0x71, 0x2f, 0x7a, 0xed, 0xc5, 0xd6, 0x23, 0xc4, 0xc1, 0x84, 0x14, - 0x81, 0x43, 0x84, 0x40, 0x90, 0x4d, 0x57, 0x86, 0x03, 0x21, 0x0a, 0x57, 0x15, 0xc5, 0x62, 0xe6, - 0xc1, 0x46, 0x6e, 0xfc, 0xf1, 0x21, 0x81, 0x91, 0x0e, 0x23, 0xf0, 0xa0, 0x32, 0x61, 0xcd, 0xd9, - 0x66, 0x6e, 0xfb, 0x7b, 0xe2, 0x35, 0x89, 0xf1, 0x30, 0x5f, 0x10, 0x0a, 0x45, 0x62, 0xbd, 0x55, - 0x45, 0xf8, 0x80, 0x57, 0x15, 0xbe, 0xaa, 0xa2, 0xe2, 0xe2, 0xe2, 0xe2, 0xfe, 0xf8, 0x9a, 0xca, - 0xaa, 0xa8, 0xba, 0x83, 0x38, 0x44, 0x30, 0x6d, 0x66, 0xfe, 0x32, 0xa2, 0xe2, 0xe2, 0xf4, 0x9c, - 0x43, 0x62, 0xe9, 0xc8, 0x51, 0x50, 0x55, 0x5c, 0x78, 0x00, 0x12, 0xc6, 0x41, 0x12, 0x84, 0x80, - 0x01, 0x5c, 0x14, 0x04, 0x06, 0x6a, 0xd4, 0x5c, 0x5d, 0x54, 0xb0, 0xc9, 0xcf, 0x00, 0xe1, 0x59, - 0x2e, 0xb7, 0xc4, 0x82, 0x0e, 0x20, 0x23, 0xe2, 0x4b, 0x6a, 0xaa, 0x0c, 0x4f, 0x86, 0x94, 0xcc, - 0x48, 0x64, 0x64, 0x53, 0x63, 0x0a, 0xaa, 0x84, 0xc0, 0x01, 0xc8, 0xe0, 0xe1, 0xc0, 0x1e, 0x0c, - 0x75, 0x27, 0x23, 0xb7, 0xb6, 0x49, 0x5d, 0xf0, 0xbc, 0x32, 0x6c, 0x58, 0xb1, 0x00, 0xc4, 0x64, - 0xb0, 0x32, 0xc3, 0x2e, 0xb0, 0xb3, 0x1a, 0xa1, 0x61, 0xb1, 0x83, 0x8f, 0x95, 0x1c, 0x45, 0x42, - 0x62, 0xa5, 0xf2, 0x5e, 0xbe, 0xe2, 0x0f, 0x59, 0xf1, 0x26, 0xc6, 0xa5, 0x05, 0xfa, 0x12, 0xda, - 0xf9, 0x6e, 0xa2, 0xf0, 0x65, 0x89, 0x15, 0xdd, 0x64, 0x85, 0x1f, 0x12, 0x3b, 0x14, 0x0c, 0xd9, - 0x8b, 0xa8, 0xbd, 0xb6, 0xbf, 0x88, 0xf8, 0xa9, 0xcc, 0x1f, 0x4e, 0x27, 0x6b, 0x4b, 0xdc, 0x4b, - 0x0e, 0x0c, 0xb1, 0x1f, 0x83, 0x5f, 0x02, 0x07, 0x27, 0x77, 0xc4, 0xe0, 0xaf, 0x84, 0x77, 0x06, - 0x37, 0x9d, 0x93, 0x43, 0x66, 0x33, 0x31, 0x71, 0x22, 0x38, 0x66, 0x13, 0x88, 0xe2, 0xdd, 0xde, - 0xf8, 0x46, 0x5e, 0xee, 0x0d, 0xa1, 0x9f, 0x13, 0x82, 0x7c, 0x44, 0x21, 0x13, 0x83, 0x7c, 0x47, - 0x13, 0x5e, 0x83, 0x78, 0x9c, 0x1b, 0x44, 0xe0, 0x18, 0x68, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, - 0x0a, 0x05, 0x30, 0x52, 0x0d, 0xc0, 0x50, 0x83, 0x03, 0x56, 0x98, 0x50, 0x15, 0xc1, 0x44, 0xbc, - 0xf1, 0xea, 0x0c, 0xe0, 0xc7, 0x8e, 0x8d, 0xcb, 0x84, 0x00, 0xd0, 0x14, 0x18, 0x6e, 0x20, 0x38, - 0x27, 0xce, 0x3c, 0x92, 0xb1, 0xdb, 0x89, 0xf3, 0xbc, 0x4f, 0xb3, 0x4e, 0x79, 0x63, 0x38, 0x07, - 0x9e, 0x0f, 0x14, 0x2f, 0x89, 0x82, 0xb9, 0x60, 0x31, 0x56, 0x24, 0x1c, 0x1d, 0xfd, 0xbb, 0xe1, - 0x72, 0xab, 0x2f, 0xe9, 0x20, 0xcf, 0xa1, 0x7a, 0xe0, 0x61, 0x0c, 0x18, 0x44, 0x4f, 0xc5, 0x3c, - 0x14, 0x46, 0x44, 0x80, 0x1e, 0x70, 0x1e, 0x28, 0x1a, 0x85, 0x8c, 0xb1, 0x9c, 0xf2, 0xd9, 0x25, - 0x49, 0x15, 0x52, 0xa7, 0x00, 0xe1, 0x6d, 0xcb, 0x62, 0xb8, 0x4c, 0x90, 0x05, 0xea, 0x83, 0x50, - 0x77, 0x75, 0xf7, 0x77, 0xf0, 0x68, 0x1b, 0x24, 0x37, 0x4c, 0xf7, 0x57, 0x5f, 0x75, 0xcb, 0x36, - 0xb5, 0xbd, 0xe1, 0x77, 0x03, 0x52, 0xa3, 0x03, 0x0f, 0x7d, 0xef, 0x5a, 0xde, 0xfd, 0x61, 0x32, - 0x40, 0x4e, 0x2c, 0xc8, 0x4f, 0x77, 0x7f, 0xb2, 0xb2, 0xf3, 0x44, 0x04, 0x38, 0x60, 0x47, 0x04, - 0x02, 0x38, 0x40, 0x41, 0x3b, 0xbe, 0x18, 0xc1, 0x50, 0x6f, 0x4f, 0xec, 0xac, 0xbe, 0xcb, 0x5a, - 0xd6, 0xf7, 0x85, 0xdc, 0x02, 0x73, 0xcf, 0x86, 0x7d, 0xef, 0x5a, 0xde, 0xf5, 0xc2, 0x20, 0x84, - 0x13, 0x44, 0x00, 0xf3, 0xde, 0x58, 0x3c, 0xfd, 0x4f, 0xf3, 0xbc, 0xf4, 0x98, 0x43, 0xfc, 0x4e, - 0xe2, 0x70, 0x57, 0xc5, 0x66, 0xf3, 0x79, 0xbd, 0x70, 0x40, 0x18, 0x1d, 0x5b, 0x3e, 0x2b, 0xe3, - 0xaf, 0x04, 0x00, 0x40, 0xb8, 0x43, 0xe2, 0x38, 0x40, 0x4d, 0x44, 0xcd, 0x9a, 0x06, 0xa7, 0x88, - 0xc1, 0x64, 0x44, 0xc5, 0xac, 0xdd, 0x04, 0xd9, 0x8a, 0xc6, 0xbf, 0xff, 0x78, 0x62, 0x4e, 0xf7, - 0x78, 0x2d, 0x86, 0x39, 0xdc, 0x0c, 0x1a, 0xd1, 0x82, 0x0d, 0xf1, 0x7a, 0xaa, 0xad, 0x6a, 0x27, - 0x05, 0xf0, 0x80, 0x63, 0xc4, 0x17, 0xbb, 0x7e, 0x26, 0x24, 0xf5, 0x13, 0xf9, 0xbf, 0x58, 0x40, - 0x97, 0xbf, 0x84, 0x60, 0xc3, 0x08, 0x70, 0xc8, 0x63, 0x84, 0x44, 0x0e, 0x9f, 0x2f, 0xdd, 0xf5, - 0x5c, 0x40, 0x87, 0x48, 0x47, 0x97, 0xd7, 0xe5, 0xbd, 0xef, 0x88, 0xd6, 0xa2, 0x39, 0xe0, 0xbb, - 0x11, 0xe2, 0x41, 0x46, 0xb5, 0xad, 0xfb, 0x84, 0x66, 0xad, 0x7e, 0x2e, 0xb5, 0xf3, 0x62, 0x89, - 0x12, 0x28, 0xab, 0x5a, 0xd6, 0xb1, 0x30, 0x5f, 0x13, 0xe2, 0x21, 0x42, 0x2a, 0xaa, 0xde, 0x6e, - 0xaa, 0xaa, 0x34, 0xc4, 0xb3, 0x3e, 0xc4, 0xf7, 0x88, 0x0a, 0x56, 0x5e, 0xb5, 0x5a, 0xa8, 0xb8, - 0xbe, 0x6a, 0x2f, 0x56, 0x27, 0xe5, 0xda, 0xa8, 0x57, 0xa0, 0x8f, 0x43, 0xb8, 0x91, 0xe1, 0x0a, - 0xa9, 0xbc, 0xac, 0x7a, 0x8f, 0x5c, 0xa7, 0xc2, 0x23, 0x2a, 0xab, 0x91, 0x75, 0xaa, 0xea, 0x99, - 0xbe, 0xb9, 0xb5, 0x3b, 0x37, 0xe4, 0xaa, 0xe0, 0xcb, 0x8a, 0xcb, 0x6b, 0xa9, 0x68, 0xda, 0x78, - 0x9e, 0xaa, 0x8e, 0xa1, 0xf7, 0x83, 0x5c, 0x4d, 0x62, 0x60, 0xd7, 0x88, 0xaa, 0xd5, 0x52, 0x19, - 0x53, 0xdc, 0xe2, 0x60, 0x6a, 0xe5, 0xd5, 0xb8, 0x11, 0x3b, 0xbd, 0xdf, 0x13, 0x83, 0x78, 0x9c, - 0x0d, 0xb1, 0x3f, 0x10, 0xbd, 0x03, 0x6c, 0x4e, 0x01, 0x4f, 0x80, 0x00, 0x00, 0x00, 0x01, 0x41, - 0x9a, 0x0b, 0x05, 0xb0, 0x88, 0x35, 0xc1, 0x41, 0x70, 0xbd, 0x4f, 0x39, 0x8c, 0xaa, 0xb5, 0x89, - 0x96, 0x02, 0x60, 0x14, 0xe2, 0x38, 0x33, 0x80, 0x90, 0xf1, 0x30, 0xa0, 0xa9, 0xc6, 0x55, 0xff, - 0x25, 0x00, 0xac, 0xf3, 0xdb, 0xed, 0xf1, 0x75, 0x5f, 0x9c, 0x20, 0x0c, 0x44, 0x97, 0xa6, 0x7e, - 0x22, 0xa5, 0xec, 0xa9, 0x55, 0x6b, 0x80, 0x80, 0xc1, 0x9c, 0x1c, 0xf0, 0xbb, 0x20, 0x3b, 0x32, - 0x8a, 0x8b, 0xc8, 0xc2, 0x2a, 0x2c, 0x8c, 0x48, 0xc1, 0xe4, 0xf0, 0x42, 0x10, 0xbb, 0xcd, 0x69, - 0x65, 0xea, 0x73, 0xf3, 0xfc, 0x6b, 0x0b, 0xfd, 0x06, 0x61, 0xd8, 0x80, 0xed, 0x33, 0xfb, 0xfd, - 0xf1, 0x8e, 0xd7, 0xfc, 0x18, 0x82, 0x00, 0x54, 0x39, 0x31, 0x5a, 0x6e, 0xfb, 0xf1, 0x7e, 0xb8, - 0x40, 0x18, 0x0f, 0xac, 0xe7, 0x7f, 0x2e, 0x44, 0x8f, 0xc4, 0x90, 0x26, 0xd1, 0xe2, 0x44, 0x71, - 0x22, 0x3c, 0x41, 0x82, 0x55, 0x58, 0x2b, 0x84, 0x41, 0x47, 0x10, 0x0a, 0x44, 0x55, 0x55, 0x4b, - 0x3a, 0xf0, 0x34, 0x66, 0xe4, 0xbb, 0xff, 0xf3, 0x6a, 0xb0, 0x50, 0x23, 0xfa, 0x0a, 0xe5, 0x70, - 0x42, 0x0c, 0x48, 0x10, 0x10, 0xf1, 0x2f, 0xf0, 0xcc, 0xa4, 0x14, 0xd3, 0x14, 0x31, 0x6f, 0x02, - 0x85, 0x04, 0xfb, 0xeb, 0xd7, 0xcc, 0x12, 0xaa, 0xdf, 0xfb, 0xe4, 0xf0, 0x59, 0xc1, 0x3d, 0x3b, - 0xb6, 0xed, 0xe5, 0xdc, 0x32, 0x0c, 0x44, 0x5d, 0xde, 0xa2, 0xea, 0x2f, 0x88, 0xde, 0x27, 0xc4, - 0xd7, 0x36, 0x9c, 0xbf, 0xe0, 0xb7, 0x08, 0x0a, 0x17, 0x3a, 0x89, 0xd4, 0x72, 0xb1, 0x89, 0x0c, - 0x09, 0x14, 0xef, 0x7a, 0xd7, 0xc4, 0x9c, 0x1b, 0x48, 0x38, 0xf9, 0xfd, 0xfb, 0x89, 0x90, 0xd9, - 0x33, 0x88, 0x0c, 0xc1, 0x6e, 0x19, 0x26, 0xf2, 0xfc, 0x48, 0x9f, 0x0c, 0xd6, 0x26, 0xb1, 0x1f, - 0x7c, 0xb8, 0xe0, 0xba, 0x27, 0xc4, 0xf8, 0x91, 0x1f, 0x04, 0x30, 0x75, 0x70, 0x66, 0xa6, 0x28, - 0xaf, 0x13, 0xf7, 0xbd, 0xf8, 0x67, 0xc3, 0x30, 0x5d, 0x89, 0x2f, 0x6d, 0x41, 0xa7, 0x14, 0x7b, - 0xdb, 0xb7, 0x3f, 0x7c, 0xc4, 0xd5, 0x7c, 0xc5, 0xad, 0x7c, 0xbc, 0x99, 0xf3, 0x16, 0xab, 0x06, - 0x3c, 0x82, 0xb5, 0x48, 0x0d, 0xb8, 0x98, 0x35, 0xc4, 0xfc, 0x25, 0xda, 0x5b, 0x76, 0xc0, 0xf3, - 0xca, 0x11, 0xcf, 0xe0, 0xdf, 0x94, 0x20, 0xb5, 0x80, 0xa5, 0x88, 0xc0, 0xdb, 0xc1, 0x25, 0x75, - 0xe8, 0x19, 0x71, 0x13, 0xc4, 0x88, 0x80, 0xe3, 0x80, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x0c, - 0x06, 0x31, 0xa0, 0xaf, 0x61, 0x35, 0x55, 0x52, 0x73, 0x1b, 0x55, 0xc1, 0x00, 0x10, 0x54, 0x6b, - 0x63, 0x65, 0x91, 0x20, 0xd2, 0x04, 0x00, 0x88, 0x27, 0x09, 0x4b, 0xc4, 0x71, 0xbc, 0x9b, 0x70, - 0xbf, 0xa5, 0xc1, 0x40, 0x64, 0x49, 0x06, 0xd7, 0x3c, 0x60, 0x6e, 0xed, 0x7f, 0x2b, 0x25, 0x2d, - 0xe0, 0x20, 0x02, 0x30, 0x69, 0x02, 0x08, 0x60, 0x2e, 0x24, 0x2b, 0x51, 0xcd, 0xf1, 0x1f, 0x12, - 0x58, 0x53, 0xcb, 0x00, 0xe0, 0x4f, 0x06, 0x04, 0x98, 0xbc, 0x53, 0xbc, 0x57, 0x86, 0x43, 0x23, - 0x04, 0x6e, 0xa8, 0x41, 0x9a, 0x84, 0x86, 0x90, 0x64, 0xb9, 0x0b, 0xd4, 0xb0, 0xc4, 0x58, 0xc7, - 0x4f, 0x89, 0x04, 0xc7, 0xee, 0xa2, 0xca, 0x83, 0x17, 0xd2, 0xef, 0x82, 0x30, 0x8a, 0xaa, 0xac, - 0x51, 0x3d, 0x13, 0xa0, 0x9f, 0xab, 0x95, 0xcc, 0x7b, 0xbb, 0xe1, 0x0a, 0x1c, 0x2d, 0x88, 0xdc, - 0x22, 0x05, 0x80, 0x52, 0x30, 0x57, 0xbd, 0x49, 0x8b, 0x97, 0xb5, 0x56, 0xe2, 0x03, 0x22, 0x7a, - 0xa3, 0xcf, 0xdc, 0xf7, 0xf9, 0x02, 0xee, 0xf9, 0xb9, 0x85, 0x4c, 0xc2, 0x4d, 0x49, 0xe6, 0x15, - 0x77, 0x7c, 0x48, 0x8e, 0x20, 0x40, 0xad, 0xe2, 0x8e, 0x7d, 0x3e, 0x60, 0x9f, 0xa0, 0x9f, 0x78, - 0x84, 0x5e, 0xf0, 0x8a, 0xe5, 0x84, 0x14, 0xf5, 0x2a, 0x15, 0x6b, 0xfe, 0x11, 0x04, 0x00, 0x84, - 0x31, 0x77, 0x76, 0xe2, 0x01, 0xc3, 0xa9, 0x7d, 0x23, 0x44, 0xea, 0x23, 0xc4, 0xe0, 0xab, 0x82, - 0x10, 0xdb, 0xbb, 0xba, 0x44, 0xa1, 0x10, 0x42, 0x09, 0xc2, 0x85, 0x49, 0x3e, 0x1e, 0x29, 0xe5, - 0xe7, 0xd2, 0xef, 0x10, 0x30, 0x99, 0xa9, 0x13, 0xe0, 0xf5, 0xcd, 0xd9, 0xea, 0xab, 0xdb, 0x1b, - 0xf6, 0x26, 0x50, 0x9b, 0xbf, 0x78, 0x9f, 0x13, 0xc4, 0xeb, 0x98, 0x28, 0xa2, 0xff, 0xe3, 0x08, - 0x17, 0x3d, 0x0e, 0xb8, 0x26, 0xea, 0xd2, 0x62, 0x11, 0x3b, 0x89, 0x08, 0x82, 0x71, 0x00, 0xff, - 0xd9, 0x79, 0xef, 0x72, 0xc7, 0x7e, 0x3a, 0xf0, 0x8b, 0x11, 0xbb, 0xf0, 0xcd, 0xfb, 0x89, 0x11, - 0xc4, 0xd5, 0xfc, 0x33, 0xc3, 0x21, 0x94, 0x15, 0x78, 0x2a, 0x88, 0x04, 0x18, 0x65, 0x8a, 0x38, - 0xd7, 0xc5, 0xe2, 0xff, 0x5a, 0x88, 0xa8, 0x97, 0xf2, 0x0c, 0xad, 0x7c, 0x49, 0xc8, 0xa2, 0xc5, - 0x16, 0xe7, 0x66, 0xfa, 0x11, 0xdf, 0x63, 0x77, 0x7e, 0x27, 0x88, 0x13, 0x70, 0xc8, 0x66, 0x09, - 0xf9, 0x45, 0xbb, 0xe4, 0x89, 0x08, 0xf1, 0x01, 0x00, 0x80, 0x52, 0xad, 0xeb, 0x55, 0x8b, 0xf1, - 0x21, 0x17, 0xdb, 0x4c, 0x9e, 0xf1, 0x37, 0xc4, 0x86, 0x6b, 0x5a, 0xd4, 0x20, 0x31, 0x63, 0xb4, - 0x33, 0x89, 0x04, 0xc3, 0xaf, 0x7b, 0x4a, 0x4d, 0xef, 0x82, 0xa3, 0x52, 0x79, 0x88, 0xa5, 0xac, - 0xb4, 0x7e, 0xf8, 0x2b, 0xcb, 0x54, 0xf4, 0xd3, 0xa5, 0x37, 0xbb, 0xf8, 0x80, 0x4b, 0x1d, 0xc3, - 0x62, 0x73, 0x96, 0x86, 0xa9, 0x5c, 0xf8, 0x4b, 0x36, 0x49, 0x8e, 0xdd, 0xb7, 0x88, 0x21, 0x85, - 0x7d, 0x8c, 0x41, 0xbf, 0x70, 0x88, 0x46, 0x12, 0xeb, 0x50, 0xcc, 0x44, 0x22, 0x12, 0xbc, 0xf9, - 0xaa, 0xea, 0xcf, 0x88, 0x05, 0x25, 0x74, 0xae, 0xda, 0x1c, 0xd2, 0xcd, 0x6b, 0xef, 0x84, 0x3a, - 0xaa, 0x69, 0xd6, 0x2e, 0x6c, 0x9f, 0x21, 0x95, 0xaa, 0xf8, 0x91, 0x2f, 0x9b, 0xd5, 0x54, 0x4c, - 0x23, 0x84, 0xce, 0xf0, 0xac, 0x47, 0x89, 0x12, 0x0a, 0xc5, 0x5e, 0x5f, 0x49, 0xd0, 0xcd, 0xd8, - 0xe4, 0x8c, 0xb7, 0x84, 0x5d, 0xe9, 0xf8, 0x91, 0xf5, 0x5e, 0x57, 0x7b, 0xfc, 0xc7, 0xb4, 0xbf, - 0x08, 0xd6, 0xb5, 0xd2, 0xa8, 0x5a, 0xb4, 0x81, 0x96, 0x20, 0x22, 0x20, 0x9e, 0x24, 0x36, 0x71, - 0x7a, 0xa2, 0x7f, 0x88, 0x13, 0x49, 0x31, 0xdf, 0x2a, 0xde, 0xfc, 0x61, 0xeb, 0x8b, 0xbb, 0xf6, - 0x8a, 0x23, 0x07, 0xe1, 0x02, 0xaa, 0xe3, 0xcd, 0x07, 0xa4, 0xa2, 0xcd, 0x9c, 0x19, 0x70, 0x99, - 0x15, 0x79, 0xcd, 0x5f, 0xcd, 0x26, 0x75, 0xc5, 0x43, 0x96, 0xbd, 0xf7, 0xd9, 0x18, 0x83, 0x60, - 0xfc, 0xb2, 0x21, 0x97, 0x50, 0x65, 0xca, 0x27, 0x55, 0x58, 0x9a, 0xe2, 0x26, 0xa0, 0xf7, 0xbc, - 0x8b, 0xfc, 0x44, 0x18, 0xf2, 0x11, 0x31, 0xfe, 0xda, 0xee, 0x6b, 0x26, 0x3d, 0xbe, 0x50, 0x8b, - 0xbb, 0xcb, 0xca, 0x10, 0xdd, 0xc0, 0xbd, 0xc9, 0x7d, 0x4b, 0xd9, 0x33, 0x67, 0xca, 0x5d, 0xd4, - 0x4f, 0x04, 0x45, 0x83, 0x37, 0xbb, 0xfc, 0x82, 0x32, 0x62, 0x82, 0x3e, 0x60, 0x8d, 0x6a, 0x6c, - 0x47, 0xca, 0x31, 0xef, 0x58, 0x97, 0x17, 0x1c, 0x5c, 0x93, 0xa1, 0x7d, 0x3c, 0x47, 0x88, 0xc1, - 0x46, 0x22, 0xb8, 0x24, 0x26, 0xee, 0xf2, 0x44, 0xd1, 0x7a, 0x6e, 0x5b, 0x33, 0xde, 0x0a, 0x31, - 0x12, 0x62, 0x01, 0x15, 0xdd, 0xdd, 0xee, 0x24, 0x45, 0xe2, 0x11, 0xde, 0x23, 0x90, 0x25, 0x79, - 0xb0, 0x21, 0xd0, 0x9a, 0x82, 0x1c, 0x44, 0xd1, 0x1f, 0x12, 0x08, 0xc8, 0xf7, 0xd4, 0x1b, 0x62, - 0x61, 0xbe, 0xb5, 0x0d, 0xc4, 0xe0, 0xb3, 0x11, 0xe2, 0x24, 0x89, 0xc1, 0x16, 0x22, 0x2b, 0x10, - 0x8e, 0xf7, 0x11, 0x82, 0xf8, 0x8c, 0xb8, 0x88, 0x8e, 0x8b, 0x50, 0x15, 0x3c, 0xb7, 0x77, 0x71, - 0x70, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x0d, 0x06, 0xb0, 0x4a, 0x0c, 0xf3, 0x0b, 0xe2, 0x79, - 0xe3, 0xb7, 0xbd, 0xef, 0x8b, 0xfd, 0x1f, 0x5f, 0x05, 0x15, 0x5d, 0x57, 0xba, 0x0b, 0xba, 0xb9, - 0x2c, 0x33, 0x0b, 0x84, 0x21, 0x7d, 0xc1, 0x94, 0x09, 0xa8, 0xdc, 0x8c, 0xd4, 0xa7, 0x3d, 0x98, - 0xf6, 0x5a, 0xbf, 0x0c, 0x84, 0x06, 0x1a, 0x55, 0x46, 0x59, 0x18, 0xd1, 0xb7, 0x51, 0xe3, 0x8e, - 0x47, 0xcd, 0xa8, 0x8d, 0x98, 0x46, 0x50, 0xab, 0xbe, 0xe0, 0xcb, 0xae, 0x55, 0x11, 0x42, 0x9f, - 0x89, 0x82, 0xd1, 0x57, 0x71, 0xf4, 0xc3, 0xb9, 0x7b, 0xff, 0x71, 0x30, 0x4d, 0xd7, 0xb1, 0xa2, - 0xbd, 0x65, 0xf4, 0x17, 0xca, 0x27, 0x82, 0x32, 0x3b, 0xbb, 0xa6, 0x40, 0x83, 0x92, 0xee, 0xee, - 0x7e, 0x09, 0x3c, 0xd9, 0xdf, 0x45, 0x3e, 0xae, 0x09, 0xc5, 0x41, 0xaa, 0x59, 0x7d, 0x3b, 0xc1, - 0xc4, 0x41, 0x08, 0xee, 0xe6, 0xd3, 0xde, 0x10, 0x13, 0x76, 0x7c, 0xaa, 0x2d, 0x78, 0x23, 0x0b, - 0xbb, 0xbe, 0xa6, 0xe0, 0x90, 0x53, 0x71, 0xe7, 0xc6, 0xd8, 0x7a, 0x15, 0x17, 0xc1, 0x25, 0xdf, - 0x7f, 0x82, 0x7d, 0xb2, 0xf8, 0x87, 0x68, 0xf7, 0xfe, 0xf0, 0x82, 0x0a, 0xf4, 0x3b, 0xcc, 0x47, - 0x7c, 0x44, 0x31, 0x44, 0xab, 0xe8, 0xb1, 0x63, 0x15, 0x9f, 0x22, 0xe2, 0x41, 0x40, 0x52, 0x5f, - 0xbd, 0xfa, 0xf1, 0x22, 0xe9, 0xee, 0x36, 0xce, 0x95, 0x69, 0xe2, 0x02, 0x33, 0x70, 0x97, 0xbb, - 0xea, 0xab, 0x82, 0x4d, 0x33, 0xe7, 0xdf, 0x75, 0x55, 0x82, 0x8e, 0x82, 0xae, 0xbe, 0x09, 0xc7, - 0x4a, 0x41, 0x5b, 0xd5, 0x3e, 0xe2, 0x04, 0x23, 0x3f, 0x13, 0x28, 0x47, 0x16, 0xe6, 0x89, 0xfc, - 0x50, 0x4b, 0x9b, 0xd9, 0x2f, 0xdd, 0xef, 0xca, 0xec, 0x2f, 0x5a, 0x84, 0x05, 0x22, 0x0d, 0xf8, - 0x2f, 0x88, 0x45, 0x89, 0x57, 0x10, 0xa9, 0x57, 0xaa, 0x55, 0xe0, 0x88, 0x50, 0xc5, 0x74, 0xe1, - 0x1b, 0x96, 0xf0, 0x88, 0x2c, 0x15, 0x2f, 0xa6, 0xee, 0xf7, 0xd5, 0xfc, 0x32, 0x24, 0xe4, 0xa9, - 0x07, 0x23, 0x83, 0xe5, 0x17, 0x30, 0xb5, 0x06, 0xf9, 0xb7, 0xbb, 0xe0, 0x93, 0x69, 0xc1, 0x29, - 0xfd, 0x5b, 0xab, 0xa0, 0x8b, 0xfd, 0x5b, 0xef, 0x7b, 0x82, 0xae, 0x84, 0x17, 0x38, 0x80, 0x50, - 0x13, 0x1c, 0xf6, 0x3a, 0x1a, 0x70, 0xd6, 0x38, 0xe1, 0x01, 0x25, 0x6b, 0x17, 0x9f, 0xda, 0xc4, - 0x9c, 0x12, 0x1d, 0xf7, 0x7f, 0x98, 0xd5, 0x85, 0xb9, 0x79, 0x4c, 0x38, 0x71, 0xf8, 0x21, 0x84, - 0x31, 0xbc, 0xc3, 0xdb, 0xab, 0x5c, 0x22, 0x41, 0x95, 0xd6, 0x56, 0x8f, 0xdd, 0x5d, 0x3a, 0xa6, - 0xc2, 0x35, 0x84, 0x7c, 0x23, 0x05, 0x58, 0x90, 0x54, 0x2d, 0x2b, 0xf9, 0x3a, 0x52, 0xef, 0xff, - 0x12, 0x24, 0x95, 0x2f, 0xbb, 0xd2, 0xf1, 0x84, 0x1c, 0xf4, 0xd3, 0x92, 0xfa, 0x6e, 0x93, 0xbb, - 0x1f, 0xe0, 0x87, 0x3a, 0xee, 0xe9, 0xbd, 0x72, 0xcb, 0x9d, 0x71, 0xc4, 0xe2, 0xb3, 0xe7, 0xbc, - 0x7f, 0x1a, 0xe8, 0x33, 0xdf, 0x5a, 0xac, 0x23, 0xc1, 0x0e, 0x10, 0xeb, 0xd0, 0xcc, 0x44, 0x24, - 0x10, 0x77, 0xeb, 0x6b, 0x10, 0x20, 0x61, 0x46, 0x9a, 0xfd, 0x03, 0x53, 0x52, 0x64, 0x21, 0x46, - 0xaa, 0xba, 0xf5, 0xab, 0xe4, 0xd6, 0x9f, 0xb9, 0xbf, 0xbc, 0x4e, 0x21, 0x60, 0xb3, 0x8a, 0x23, - 0x65, 0x44, 0xde, 0xb6, 0xf8, 0x98, 0xa2, 0x0c, 0x2c, 0xcc, 0x75, 0x3d, 0x2a, 0x51, 0x8c, 0x33, - 0x7e, 0x5d, 0xd1, 0xb1, 0xf9, 0x77, 0xbb, 0xe6, 0x16, 0xba, 0x82, 0xfe, 0xc5, 0xbb, 0xeb, 0x85, - 0x02, 0xd0, 0x76, 0xee, 0xef, 0x47, 0x64, 0x8a, 0x35, 0x6d, 0xe8, 0x29, 0xca, 0xb3, 0x62, 0xb0, - 0x48, 0x78, 0xb9, 0xd4, 0x7c, 0x14, 0xf3, 0x59, 0x8c, 0x6e, 0xa9, 0x5d, 0xe5, 0x1e, 0xf2, 0xb8, - 0x4e, 0xef, 0xea, 0x41, 0x1f, 0x14, 0x5d, 0x56, 0x69, 0xab, 0x30, 0x19, 0xf1, 0x06, 0xb4, 0xd3, - 0x0d, 0xb9, 0x98, 0xae, 0x28, 0xa4, 0x21, 0x79, 0x05, 0xa7, 0xe2, 0x5c, 0xd4, 0xf7, 0x1b, 0x14, - 0x5c, 0x75, 0x88, 0x81, 0x9f, 0x8f, 0x25, 0xee, 0xe8, 0xdb, 0x66, 0x4a, 0x78, 0x10, 0x39, 0x69, - 0x6e, 0x06, 0xf8, 0x9b, 0xad, 0x54, 0x0b, 0x38, 0x8f, 0x08, 0x4d, 0xcc, 0x15, 0x7b, 0xbf, 0x89, - 0x25, 0xde, 0xf7, 0xbe, 0x62, 0x3b, 0xe4, 0xc4, 0x4b, 0xd9, 0x72, 0x5f, 0xc1, 0x38, 0xa5, 0x47, - 0xc9, 0x9c, 0x5f, 0x2c, 0x5f, 0x87, 0x7b, 0x3d, 0x6a, 0xba, 0xbf, 0xe7, 0xe0, 0x90, 0xb5, 0x5b, - 0xf8, 0x88, 0x9c, 0x47, 0xd9, 0xd6, 0xbf, 0x10, 0x44, 0x68, 0xd1, 0xa3, 0x4b, 0x6b, 0xd9, 0x6e, - 0xef, 0xc4, 0x7c, 0x50, 0xe7, 0x6d, 0xde, 0x5f, 0xfa, 0xbc, 0x39, 0xd6, 0x57, 0xe4, 0xc4, 0x5e, - 0x23, 0xc4, 0x82, 0x41, 0xb7, 0xbb, 0xf8, 0x88, 0x98, 0x9f, 0x13, 0xe2, 0x75, 0x88, 0xfa, 0x19, - 0x2f, 0x82, 0x32, 0x92, 0x51, 0x23, 0xf8, 0x41, 0x1e, 0x23, 0xe5, 0x2b, 0xdf, 0xc4, 0xab, 0xcf, - 0x88, 0xf1, 0x1e, 0x22, 0xa2, 0x04, 0x4d, 0xd0, 0xa9, 0x41, 0x8c, 0x45, 0x1f, 0xa0, 0x57, 0xc4, - 0x16, 0xb5, 0x85, 0xfa, 0x2f, 0x4b, 0x88, 0x82, 0x7c, 0x44, 0xfc, 0xb7, 0xdc, 0x1a, 0xf3, 0x5e, - 0xf0, 0xf7, 0x28, 0xec, 0xcc, 0x4d, 0x10, 0x26, 0x09, 0x20, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, - 0x0e, 0x07, 0x30, 0x7a, 0x0c, 0xf3, 0x0b, 0xb5, 0x6f, 0x0c, 0x88, 0x04, 0x64, 0x35, 0x34, 0xd3, - 0xf9, 0xf4, 0x2d, 0xce, 0x18, 0x08, 0xa9, 0xba, 0x14, 0xee, 0xee, 0xaa, 0x18, 0xeb, 0x5f, 0x54, - 0xab, 0xd4, 0xab, 0x24, 0xe4, 0xbb, 0xaa, 0xe1, 0x18, 0x27, 0x08, 0x28, 0x40, 0xc4, 0x61, 0xa0, - 0xe9, 0x22, 0x19, 0x84, 0xb4, 0xe2, 0xac, 0xd1, 0x0f, 0x88, 0x85, 0x0c, 0x7d, 0x83, 0x46, 0x9b, - 0x6e, 0x67, 0x66, 0x15, 0xb8, 0x11, 0xf4, 0x2b, 0x65, 0x8b, 0x0d, 0xee, 0x04, 0x38, 0x60, 0x1b, - 0x96, 0xa5, 0x30, 0x48, 0xb2, 0xfb, 0x84, 0x04, 0x82, 0xd0, 0x9a, 0x49, 0x6c, 0xe4, 0xc0, 0x4d, - 0x66, 0x1d, 0xf1, 0x7c, 0x45, 0xdf, 0x77, 0xc3, 0x3d, 0x5b, 0xeb, 0x14, 0x2f, 0xd1, 0xb2, 0xa8, - 0x9a, 0x33, 0x9c, 0x20, 0x0e, 0x07, 0x8e, 0x52, 0xcc, 0xdc, 0xbe, 0x26, 0xdd, 0xb4, 0xf3, 0x7e, - 0x08, 0x0b, 0xbc, 0x4b, 0xfd, 0x06, 0x72, 0x83, 0x0e, 0x89, 0xdf, 0x45, 0x6a, 0x89, 0x90, 0x42, - 0x1a, 0x1c, 0x8c, 0x71, 0x20, 0xac, 0x21, 0x54, 0xdd, 0x8d, 0xf2, 0xaa, 0x8e, 0x3a, 0xbe, 0xf0, - 0xc0, 0x42, 0x5e, 0xdc, 0x4c, 0xe1, 0xa4, 0xb4, 0x57, 0x68, 0x73, 0x2d, 0xfc, 0x40, 0x94, 0x15, - 0x6f, 0x08, 0xc4, 0xf5, 0xe8, 0x26, 0xeb, 0x6a, 0xeb, 0x97, 0xd6, 0xbc, 0x22, 0x08, 0x82, 0x59, - 0xfa, 0xfd, 0xf1, 0x9c, 0x3c, 0xd6, 0x73, 0xdf, 0x10, 0x2c, 0x6d, 0x1f, 0xd0, 0x95, 0xd5, 0xc0, - 0x3c, 0x34, 0xc2, 0xac, 0x13, 0x6d, 0xff, 0xfe, 0x09, 0x1f, 0x3f, 0x41, 0x27, 0xae, 0xaf, 0xe2, - 0x10, 0x4f, 0xa1, 0x8e, 0x88, 0xc4, 0x7f, 0x45, 0x65, 0xe2, 0x41, 0x00, 0xea, 0x74, 0xeb, 0x55, - 0x22, 0x9b, 0x1b, 0xbf, 0xc5, 0x4b, 0xc2, 0x26, 0x4a, 0xe5, 0xd5, 0xa1, 0xa5, 0x4a, 0x51, 0x01, - 0xf6, 0x3d, 0x3c, 0x77, 0xcd, 0xa7, 0x32, 0x97, 0xd7, 0xab, 0x82, 0x11, 0xc8, 0x8f, 0xd0, 0xf7, - 0xf1, 0x10, 0x57, 0xcc, 0x5a, 0xaf, 0xca, 0x2a, 0xee, 0xe2, 0x7a, 0x0b, 0xbf, 0x89, 0x57, 0x81, - 0x8b, 0x98, 0x2d, 0xa9, 0x19, 0x06, 0x9c, 0xa3, 0xf3, 0x74, 0x5e, 0x53, 0x56, 0xbe, 0x2a, 0xbb, - 0x06, 0x9b, 0x74, 0xfe, 0x12, 0xcd, 0xa8, 0xda, 0x64, 0x43, 0x07, 0x6b, 0xe3, 0x39, 0xa8, 0xf9, - 0xa0, 0x92, 0x4e, 0xfe, 0xaa, 0x58, 0x46, 0x82, 0x7d, 0xf5, 0xe8, 0x4f, 0xaf, 0x40, 0x9f, 0xca, - 0x18, 0x7b, 0xc1, 0xbf, 0x2d, 0xda, 0xb0, 0x30, 0x6b, 0xcd, 0xbb, 0x29, 0xf9, 0x2f, 0xb8, 0x2f, - 0xe6, 0x3a, 0xe6, 0xc0, 0x71, 0xdd, 0x6e, 0xc8, 0x0c, 0x9c, 0xc2, 0x75, 0x55, 0xc8, 0x6b, 0x76, - 0xc9, 0xc6, 0x1a, 0xf2, 0xd0, 0xb9, 0x7e, 0x8e, 0xb5, 0xa4, 0xd2, 0x7e, 0xe5, 0xcf, 0x2c, 0x99, - 0xfe, 0x2c, 0xed, 0xac, 0xb1, 0x55, 0xeb, 0x13, 0x5c, 0x40, 0xbd, 0x55, 0x75, 0xc4, 0xfc, 0x41, - 0x6b, 0x55, 0xc4, 0x89, 0xe2, 0x44, 0x7c, 0x86, 0xd9, 0x16, 0x9e, 0x41, 0x1b, 0xa2, 0xf3, 0x78, - 0xbf, 0x94, 0x27, 0x83, 0x75, 0xec, 0x14, 0xf2, 0x05, 0x37, 0x72, 0xf2, 0x8b, 0xd5, 0x4f, 0xc8, - 0x67, 0x63, 0xd7, 0x2c, 0x66, 0x9b, 0x19, 0x82, 0xae, 0x53, 0xee, 0xe7, 0xc4, 0x40, 0xe9, 0xca, - 0x21, 0xf7, 0x01, 0x0d, 0xcc, 0x36, 0xb5, 0x51, 0x15, 0xef, 0xb3, 0xbb, 0xcb, 0x07, 0xc8, 0x4b, - 0xbb, 0xbe, 0xca, 0xee, 0xef, 0xe6, 0xbb, 0xfe, 0x62, 0x6e, 0xfe, 0x0a, 0x0b, 0x7b, 0xbb, 0xbb, - 0xff, 0xe1, 0x3b, 0xdd, 0xee, 0xef, 0xe4, 0x95, 0x89, 0x58, 0x75, 0x88, 0xf9, 0x84, 0x2d, 0x6b, - 0x94, 0xf4, 0xae, 0xba, 0xbf, 0x88, 0x26, 0xee, 0xcb, 0xc7, 0x77, 0x56, 0xac, 0x89, 0x1c, 0xa6, - 0x52, 0xf2, 0xd9, 0x5b, 0x4c, 0x98, 0x8f, 0x93, 0x12, 0xe4, 0xbc, 0x6f, 0x57, 0x23, 0x78, 0x91, - 0x4f, 0x7b, 0xbb, 0xbf, 0x98, 0xb5, 0x6d, 0x7d, 0x89, 0xaa, 0xa9, 0x39, 0x04, 0x3b, 0xbb, 0xf9, - 0x6e, 0xee, 0xfe, 0x8b, 0x55, 0xcd, 0x77, 0x7b, 0xe2, 0x32, 0xfb, 0xdd, 0xef, 0x11, 0xf1, 0x55, - 0xd5, 0xad, 0x3f, 0x2e, 0x95, 0xa2, 0x77, 0xaa, 0xcf, 0xc8, 0x21, 0xef, 0xf2, 0xcd, 0xe3, 0xf8, - 0x8c, 0x2d, 0xc2, 0xf5, 0xc5, 0xd4, 0xd0, 0x22, 0x4d, 0x65, 0xac, 0x54, 0xff, 0xdc, 0x4e, 0x16, - 0x76, 0x9f, 0x16, 0x7a, 0xc7, 0x31, 0x7d, 0xd6, 0x23, 0xc4, 0x78, 0x8f, 0x92, 0xee, 0xee, 0xf9, - 0x2f, 0x77, 0x26, 0x23, 0xe8, 0xaf, 0x5c, 0xb7, 0x53, 0xfa, 0xf8, 0x8f, 0x11, 0xe2, 0x2b, 0x11, - 0xe2, 0x0d, 0x52, 0x66, 0x58, 0x9b, 0x2b, 0xbf, 0xe4, 0xbd, 0xdf, 0xc1, 0x10, 0xe7, 0xbf, 0xa0, - 0x97, 0x10, 0x8a, 0xf7, 0x89, 0x97, 0x11, 0xe2, 0x62, 0x79, 0x6b, 0x6c, 0xd1, 0x0a, 0x72, 0x0c, - 0xaa, 0xcf, 0xc7, 0x8f, 0x5a, 0xeb, 0x5a, 0xd5, 0xe2, 0x2a, 0x20, 0x47, 0xca, 0x64, 0xe9, 0xcb, - 0xcc, 0x7d, 0x54, 0x9c, 0x9d, 0xdf, 0x88, 0xae, 0xee, 0xf8, 0x2f, 0xc4, 0x18, 0x9a, 0xa8, 0x62, - 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x0f, 0x07, 0xb0, 0x2a, 0x8b, 0xd0, 0x94, 0x8b, 0x11, 0x04, - 0x35, 0xbb, 0xbf, 0x13, 0x5c, 0xa1, 0x2e, 0x5b, 0xba, 0x9b, 0x3c, 0x14, 0x51, 0xc0, 0x1f, 0xbe, - 0xa9, 0xe5, 0xd2, 0x69, 0x53, 0xc7, 0x70, 0x5c, 0xa9, 0xf0, 0xc0, 0x97, 0xaa, 0xf5, 0x59, 0xb0, - 0xd8, 0xe4, 0x46, 0x0d, 0xe1, 0x8f, 0xb7, 0x5b, 0x7e, 0x7c, 0xef, 0xdd, 0x5d, 0x19, 0xa2, 0x44, - 0xc6, 0xc4, 0x78, 0x9b, 0x9b, 0x1d, 0x87, 0xc7, 0xe0, 0x63, 0xa1, 0x15, 0xf5, 0x4c, 0xbd, 0x4c, - 0xb3, 0xeb, 0x95, 0xf2, 0x55, 0x5d, 0xfc, 0x83, 0xae, 0xee, 0xba, 0x1b, 0x14, 0x35, 0xd5, 0xbe, - 0xb1, 0x42, 0xdd, 0x19, 0xcf, 0xaf, 0x49, 0xc1, 0x08, 0x49, 0x85, 0x3c, 0x70, 0xfe, 0x82, 0xf9, - 0x40, 0xcd, 0xd0, 0xae, 0xae, 0xbd, 0x07, 0x5d, 0x11, 0xe0, 0x28, 0x39, 0x36, 0x39, 0x91, 0x78, - 0x40, 0x57, 0x17, 0x9b, 0xab, 0xba, 0xa7, 0xfc, 0xba, 0x75, 0x2f, 0x7e, 0x6a, 0x02, 0xfe, 0x4a, - 0xae, 0x4e, 0xea, 0xb9, 0x3a, 0x0a, 0xf7, 0xd7, 0xa1, 0x3e, 0xbd, 0x0e, 0x73, 0x04, 0x15, 0x57, - 0xe2, 0x4e, 0xd6, 0xd5, 0xba, 0x83, 0x3e, 0x0b, 0x84, 0x2c, 0xd7, 0xb6, 0x71, 0x01, 0xad, 0x22, - 0xf2, 0x6c, 0xea, 0x0d, 0x39, 0x89, 0xbb, 0x7e, 0x6b, 0x77, 0x83, 0x4e, 0x28, 0xf5, 0xb7, 0x6e, - 0xab, 0x94, 0x45, 0xdf, 0xc4, 0xcd, 0xca, 0x7d, 0xdc, 0x17, 0x72, 0x15, 0x3d, 0x44, 0x72, 0x08, - 0x7b, 0xfc, 0xb7, 0xbb, 0x81, 0x93, 0x90, 0xa9, 0xd3, 0x93, 0xb1, 0xbb, 0xba, 0x89, 0xf8, 0x42, - 0xb9, 0x87, 0x38, 0xae, 0xfe, 0x2f, 0x57, 0xe5, 0xc8, 0x2b, 0xe5, 0xbb, 0xe0, 0xc7, 0x11, 0x7c, - 0xc3, 0x75, 0x55, 0xd8, 0x85, 0xa7, 0xf3, 0x6f, 0x7f, 0x13, 0x6f, 0x4b, 0x77, 0x2f, 0x12, 0x25, - 0x6b, 0x5a, 0xcb, 0xc1, 0x15, 0xdf, 0x73, 0xe0, 0xb4, 0x92, 0xa8, 0xf5, 0x35, 0x1e, 0x0a, 0x7b, - 0x20, 0xaf, 0xae, 0x63, 0xbb, 0xfe, 0x42, 0xd5, 0x57, 0xdd, 0x6b, 0xc4, 0xcd, 0x55, 0xd7, 0x46, - 0xae, 0x23, 0x5d, 0x7a, 0xb8, 0x4c, 0x4a, 0xb3, 0xda, 0x6b, 0xf5, 0x6b, 0xe2, 0x47, 0x6a, 0xa3, - 0x14, 0xf5, 0x03, 0x4f, 0x20, 0xf5, 0x55, 0x50, 0x6d, 0xcd, 0x54, 0x75, 0x04, 0x1d, 0x13, 0xbc, - 0x47, 0x88, 0x31, 0xd5, 0x57, 0xc4, 0x56, 0x23, 0xee, 0xed, 0x8a, 0xfe, 0x5b, 0x69, 0xd3, 0x2f, - 0x25, 0xdf, 0x7c, 0xd7, 0x7d, 0x62, 0x01, 0x41, 0x39, 0xe8, 0xfb, 0xd7, 0xcd, 0x56, 0x46, 0xc6, - 0x9a, 0xf2, 0x9e, 0xb5, 0xf0, 0x45, 0xd5, 0x5f, 0xe1, 0x39, 0x4c, 0x4c, 0x2a, 0xd9, 0xac, 0x1d, - 0x41, 0xfb, 0x8e, 0x5c, 0x32, 0x5c, 0x5e, 0x2a, 0xdb, 0xbb, 0xbd, 0xc6, 0xda, 0x3d, 0xd5, 0x57, - 0xe6, 0xbb, 0xbb, 0x93, 0x85, 0xc6, 0x5d, 0x3c, 0xda, 0xbb, 0x5b, 0x0e, 0x29, 0x1f, 0xc1, 0x2f, - 0x43, 0x7f, 0x3f, 0x35, 0x86, 0xc8, 0xa8, 0x14, 0x1b, 0x17, 0x05, 0x3a, 0xba, 0x49, 0x34, 0xd2, - 0x4d, 0xb5, 0xb7, 0xc9, 0x9e, 0x1f, 0x82, 0x39, 0xb7, 0xf5, 0x73, 0x5d, 0xee, 0x5e, 0xc7, 0x6e, - 0xe0, 0xc7, 0x10, 0x85, 0xbd, 0xf2, 0x77, 0x77, 0xd0, 0xca, 0x81, 0x93, 0x11, 0x7c, 0xa5, 0xdd, - 0xc1, 0x76, 0x10, 0x82, 0x6e, 0x63, 0x4d, 0xeb, 0xee, 0xb5, 0x9f, 0x98, 0x7a, 0xea, 0x37, 0x98, - 0x56, 0xe5, 0xcf, 0x35, 0xef, 0x11, 0xd5, 0xfe, 0x5a, 0xea, 0x78, 0x00, 0x00, 0x00, 0x01, 0x41, - 0x9a, 0x10, 0x08, 0x30, 0x36, 0x9f, 0x30, 0xb4, 0xe9, 0xfd, 0x1c, 0x02, 0x5f, 0x42, 0x32, 0x75, - 0xe0, 0x86, 0x7c, 0x8c, 0xd8, 0xec, 0x7f, 0xae, 0x50, 0x94, 0x4c, 0x30, 0x53, 0x61, 0xb0, 0xf8, - 0xfd, 0x6a, 0xd6, 0xa6, 0x54, 0x76, 0xf8, 0x2f, 0x86, 0xf7, 0x1d, 0x97, 0x88, 0x86, 0x08, 0x7b, - 0x1c, 0x33, 0x45, 0x17, 0x86, 0xd4, 0xab, 0xe1, 0x56, 0x89, 0x98, 0x01, 0x39, 0xc2, 0x24, 0x49, - 0x67, 0x25, 0xbe, 0xa4, 0xa9, 0xa5, 0x59, 0xa7, 0x11, 0x0d, 0x89, 0x3f, 0xf1, 0x5a, 0x1d, 0x91, - 0xb7, 0xdc, 0xcf, 0xd1, 0xc2, 0x1c, 0x41, 0xd8, 0x61, 0xed, 0x24, 0x1f, 0x05, 0x6f, 0x7c, 0x26, - 0xd1, 0x85, 0x79, 0xe3, 0x92, 0xa6, 0x9a, 0x69, 0xf9, 0xba, 0x1c, 0x99, 0x13, 0xad, 0x57, 0x45, - 0x22, 0x44, 0xf5, 0xc9, 0x92, 0xeb, 0x5f, 0x54, 0xab, 0xd4, 0xab, 0x3e, 0xb9, 0x5f, 0x24, 0xf8, - 0x7c, 0x36, 0x3b, 0x3c, 0x2e, 0x30, 0xb8, 0xd6, 0x64, 0x04, 0x3a, 0x63, 0x2d, 0x86, 0x53, 0x79, - 0xa9, 0xe3, 0x32, 0x36, 0xd4, 0x89, 0x90, 0xf0, 0xa1, 0xa5, 0x46, 0x21, 0x28, 0x1e, 0xae, 0x0c, - 0x13, 0x36, 0xc8, 0xfa, 0xf0, 0x1d, 0x48, 0xe9, 0x76, 0xc0, 0x66, 0xcc, 0x3a, 0xff, 0x43, 0x4c, - 0x9c, 0xc5, 0x36, 0x7c, 0x15, 0x84, 0xe4, 0x99, 0xa2, 0xcd, 0xe4, 0xce, 0x2f, 0x11, 0x0a, 0xf5, - 0x48, 0xbd, 0x52, 0x25, 0xd6, 0x91, 0x7a, 0xa6, 0x5e, 0xb1, 0x44, 0xf6, 0x31, 0x55, 0x54, 0x57, - 0x20, 0xb7, 0x75, 0x57, 0xd1, 0x1f, 0xeb, 0xd5, 0xc1, 0x51, 0xb7, 0x7b, 0xb7, 0x8b, 0xad, 0x8f, - 0x82, 0x91, 0xcc, 0x63, 0xa5, 0x68, 0x1a, 0x6e, 0x2a, 0xc9, 0x4a, 0x58, 0x7c, 0x21, 0x3a, 0x5e, - 0x69, 0x8d, 0xab, 0x37, 0x8c, 0xd1, 0xd7, 0xa7, 0xfe, 0x83, 0x22, 0x3a, 0x71, 0x01, 0x09, 0x3b, - 0xba, 0xba, 0x93, 0x98, 0x89, 0xd5, 0xd7, 0x45, 0x1e, 0x51, 0x7d, 0x13, 0xab, 0xae, 0x10, 0xc7, - 0x46, 0xef, 0xa2, 0xb5, 0x74, 0x21, 0x95, 0xd8, 0x42, 0xe5, 0xf8, 0xbe, 0x82, 0xfd, 0x01, 0x21, - 0xd6, 0x57, 0xd7, 0x2b, 0xe6, 0x19, 0x42, 0x8d, 0x26, 0x78, 0x86, 0x2a, 0xcd, 0x37, 0xe2, 0x22, - 0x3a, 0x0b, 0xb7, 0xd4, 0xea, 0x82, 0xbe, 0x28, 0x45, 0x65, 0x33, 0x4c, 0xde, 0x32, 0xf0, 0x98, - 0xeb, 0x6f, 0xd3, 0x57, 0xcb, 0x77, 0xd0, 0x85, 0x85, 0x7a, 0x09, 0xb2, 0x18, 0xe4, 0x09, 0x29, - 0xf2, 0x98, 0x23, 0xe8, 0x36, 0xd3, 0xf5, 0x1f, 0x45, 0x70, 0x52, 0x2a, 0x95, 0xd2, 0x9b, 0x18, - 0xac, 0xa5, 0x6c, 0xbe, 0x30, 0x85, 0x32, 0x52, 0x4c, 0x5d, 0x4b, 0x30, 0xe2, 0x18, 0xd4, 0xfa, - 0xef, 0x52, 0xc3, 0x22, 0x3a, 0xb2, 0xee, 0x07, 0xd2, 0xca, 0xce, 0x75, 0xf8, 0x50, 0x99, 0x88, - 0x2f, 0x6a, 0xcd, 0xc6, 0x86, 0xcf, 0x53, 0x98, 0xbd, 0x37, 0x74, 0x24, 0x66, 0x57, 0xc6, 0xd2, - 0x0a, 0x2a, 0xd5, 0xbd, 0x1e, 0xa1, 0xae, 0xad, 0x73, 0xee, 0xb9, 0x29, 0x06, 0x0b, 0x49, 0x4d, - 0xa9, 0xed, 0x9f, 0xfe, 0x23, 0x73, 0x6d, 0x5a, 0x4b, 0xe4, 0xaa, 0xd5, 0x71, 0x24, 0xbd, 0x10, - 0xde, 0x3a, 0xbe, 0x83, 0x3d, 0xf5, 0xe5, 0x5e, 0xa7, 0x45, 0x4f, 0x89, 0x26, 0x5c, 0xe5, 0xc8, - 0x43, 0xa3, 0x8e, 0xd0, 0xc7, 0x30, 0x42, 0x26, 0xcc, 0x67, 0x1e, 0x2c, 0x47, 0x1a, 0xad, 0xaf, - 0x8c, 0x2c, 0x84, 0x16, 0x7b, 0x1b, 0xe6, 0x51, 0x36, 0xdd, 0x75, 0xc7, 0x11, 0x69, 0xda, 0xad, - 0x57, 0xf0, 0x48, 0x7a, 0xd5, 0xe0, 0xc7, 0xa3, 0x77, 0xc8, 0x45, 0xa2, 0x31, 0xb7, 0xd9, 0xc5, - 0x6e, 0xff, 0x09, 0xea, 0x5c, 0x8a, 0x5d, 0xba, 0xe6, 0x11, 0x7b, 0x8c, 0xe8, 0x33, 0xa8, 0x22, - 0xe0, 0x87, 0xbb, 0xe5, 0xf4, 0x12, 0xef, 0x8a, 0x35, 0x39, 0xaa, 0x93, 0xf1, 0x13, 0x83, 0xbe, - 0x10, 0xe3, 0xcd, 0x7c, 0xd5, 0xdf, 0x5e, 0x24, 0x10, 0xd6, 0x3b, 0xdf, 0x7c, 0xd6, 0x11, 0xc6, - 0x12, 0x21, 0x50, 0x58, 0xae, 0xc4, 0xad, 0x60, 0x9f, 0xa1, 0x6c, 0x45, 0x70, 0x88, 0x4a, 0x34, - 0x66, 0x75, 0x3a, 0xaf, 0x90, 0x44, 0xd4, 0x75, 0x3c, 0x45, 0xc2, 0x11, 0xd9, 0x1d, 0xbf, 0x8f, - 0xe2, 0x5f, 0x71, 0xc1, 0xc1, 0xd1, 0xdf, 0x15, 0xdd, 0xdd, 0xf0, 0x30, 0xf4, 0x0b, 0x5c, 0xbe, - 0x2c, 0x3c, 0xcf, 0x55, 0xb5, 0xf0, 0x4a, 0x4b, 0x35, 0x84, 0x9d, 0xd5, 0x52, 0xb1, 0xc7, 0xbf, - 0xc6, 0x12, 0x3b, 0xc6, 0x3d, 0x31, 0x62, 0x7b, 0x11, 0x65, 0x4b, 0x3f, 0x6f, 0xc4, 0x9c, 0x5a, - 0x35, 0xb5, 0x59, 0xb3, 0x76, 0x0f, 0x7b, 0x89, 0x29, 0x51, 0xa3, 0x49, 0x2f, 0x08, 0x95, 0xdf, - 0x77, 0x1b, 0x65, 0x55, 0xee, 0x4c, 0x41, 0x0c, 0xbb, 0x5e, 0x28, 0x43, 0xc5, 0x78, 0xaf, 0xf2, - 0x95, 0xe2, 0xb2, 0xe0, 0x67, 0xa1, 0xf9, 0x46, 0xf2, 0x88, 0x55, 0xdf, 0x2d, 0xcd, 0x81, 0xf9, - 0xf1, 0xd7, 0x17, 0x55, 0xad, 0xaa, 0x5e, 0x09, 0x0d, 0x5b, 0xb1, 0xf1, 0xd8, 0xed, 0x13, 0xeb, - 0xb7, 0x27, 0xff, 0x21, 0x75, 0x5f, 0x45, 0x6f, 0x84, 0xb9, 0xfd, 0xef, 0x58, 0x82, 0x16, 0xb5, - 0x27, 0x10, 0x10, 0x72, 0xdd, 0xcb, 0x8f, 0xbf, 0x8b, 0xde, 0x8f, 0x2d, 0x20, 0x9f, 0x85, 0x0b, - 0x2f, 0x7e, 0xd3, 0x78, 0xad, 0x3b, 0x6a, 0xcb, 0x5f, 0x57, 0xae, 0x63, 0xe9, 0xa5, 0xe0, 0xa4, - 0x67, 0x1e, 0x98, 0xdc, 0x41, 0x27, 0x4d, 0x58, 0xc1, 0x4e, 0xdc, 0x3c, 0x4d, 0x70, 0x46, 0x11, - 0x77, 0xdf, 0xe0, 0xae, 0xab, 0xb0, 0xd6, 0xaa, 0x4c, 0x60, 0xfe, 0xf9, 0x6e, 0xed, 0x3f, 0x9a, - 0xaa, 0xaa, 0xf8, 0x83, 0x2d, 0x65, 0xc6, 0xff, 0x09, 0x88, 0x76, 0x9c, 0xd3, 0xab, 0xaf, 0x89, - 0xdd, 0x94, 0xf5, 0x4f, 0x85, 0xba, 0x1b, 0xab, 0xe0, 0x84, 0x5a, 0x49, 0x34, 0xd2, 0x75, 0xe8, - 0x8c, 0x44, 0x70, 0x49, 0x56, 0xd5, 0xbc, 0x2b, 0x88, 0x1c, 0xb5, 0xaa, 0xaa, 0xf1, 0x00, 0x8a, - 0xee, 0xf7, 0xf1, 0x15, 0xc2, 0x3e, 0x6b, 0xe6, 0xc6, 0x9f, 0x93, 0xf8, 0x29, 0xa0, 0xd8, 0xeb, - 0x6d, 0xeb, 0x8a, 0xd1, 0xf5, 0xc7, 0x88, 0x8b, 0xae, 0xcd, 0xff, 0x11, 0xb3, 0x37, 0xdb, 0x91, - 0x9f, 0x94, 0x4b, 0xdb, 0x55, 0xc5, 0xeb, 0x55, 0xd5, 0x72, 0xd8, 0x1b, 0x03, 0x30, 0x81, 0x92, - 0xf3, 0x55, 0x55, 0x7c, 0x61, 0x0f, 0x82, 0x5c, 0xb9, 0xf8, 0x49, 0xfb, 0xbc, 0xf9, 0xd3, 0x9b, - 0x2b, 0xf0, 0x4e, 0x23, 0x55, 0x6d, 0x77, 0xf8, 0x23, 0x3a, 0x14, 0x65, 0x21, 0xd9, 0x94, 0x31, - 0xd0, 0x9e, 0x88, 0xe1, 0x23, 0x35, 0x5a, 0xd6, 0xfd, 0x71, 0x65, 0xdd, 0xee, 0xe5, 0xfe, 0x28, - 0x54, 0x65, 0x4b, 0x85, 0xb1, 0x03, 0xed, 0xfe, 0x08, 0x79, 0xf5, 0xbd, 0xde, 0x20, 0x11, 0x9d, - 0xf5, 0x7f, 0x97, 0xbb, 0xf8, 0x4c, 0xea, 0xbe, 0xe5, 0xc5, 0xc2, 0x5a, 0xd6, 0xab, 0xf1, 0x15, - 0x55, 0xa5, 0x6b, 0xe2, 0x4c, 0xb5, 0x55, 0x55, 0x5f, 0x31, 0xdd, 0xdd, 0xfc, 0x9a, 0xaa, 0xf9, - 0x8d, 0x39, 0xab, 0xf1, 0x1f, 0x09, 0x89, 0x67, 0x66, 0x6b, 0xaa, 0x5f, 0x7c, 0x96, 0x62, 0x2b, - 0xa1, 0xcd, 0xf0, 0x43, 0xc8, 0xbb, 0xcf, 0x0f, 0x73, 0x09, 0x54, 0xee, 0xbb, 0xbe, 0xef, 0x11, - 0x5c, 0x16, 0x99, 0xf7, 0x54, 0xc9, 0xed, 0xfe, 0x10, 0xbd, 0xef, 0x76, 0xd5, 0x6b, 0xe2, 0xca, - 0xba, 0xb7, 0x6d, 0x3f, 0x62, 0x5b, 0x8b, 0xfd, 0x91, 0xf7, 0xe2, 0x09, 0x77, 0xfd, 0xea, 0xab, - 0xe0, 0x90, 0x9b, 0xbb, 0xfc, 0xb1, 0x5f, 0x34, 0x4c, 0x40, 0x94, 0x6b, 0x19, 0x94, 0x92, 0x57, - 0xc4, 0xc4, 0xdd, 0xdd, 0xea, 0x59, 0xeb, 0xa1, 0xc6, 0x04, 0x3b, 0xd0, 0xf8, 0xbe, 0x41, 0x04, - 0xfe, 0xf9, 0x37, 0xba, 0xe5, 0x28, 0x97, 0xdf, 0xe6, 0xdd, 0xcb, 0xfc, 0x49, 0x15, 0xd5, 0xe5, - 0xff, 0xad, 0x7c, 0x7d, 0x56, 0xa4, 0xfc, 0xcc, 0xc3, 0xef, 0x90, 0x4a, 0xaf, 0x89, 0x90, 0x46, - 0xee, 0x6e, 0x3c, 0xf5, 0x6a, 0xab, 0xa5, 0x5f, 0x8a, 0x25, 0x2a, 0xb5, 0x4b, 0x88, 0x89, 0x13, - 0xcd, 0x94, 0x96, 0xa2, 0x60, 0xb2, 0xfb, 0xa1, 0x39, 0x73, 0x3a, 0x4a, 0x6f, 0xea, 0xe4, 0x1c, - 0xf7, 0x4f, 0xc1, 0x2d, 0xa9, 0x25, 0x3e, 0x1e, 0xf9, 0x4f, 0xd0, 0x9a, 0x85, 0x39, 0x8d, 0x6e, - 0x6f, 0xe1, 0x9b, 0x6f, 0xa8, 0x9c, 0x22, 0xff, 0x5c, 0xa7, 0xaa, 0xfc, 0x11, 0x75, 0x57, 0xf9, - 0x85, 0x5d, 0x36, 0x45, 0xc4, 0x02, 0x71, 0x68, 0x74, 0x37, 0xb1, 0xdf, 0xa6, 0xee, 0xee, 0xef, - 0xe3, 0xcb, 0xbb, 0xbb, 0xbd, 0x69, 0x56, 0x23, 0xc4, 0x02, 0xbb, 0x49, 0x22, 0xbb, 0x1b, 0x4d, - 0xaa, 0x98, 0x63, 0x53, 0x1c, 0x4c, 0x59, 0x1f, 0x43, 0xdd, 0x8d, 0x72, 0xd6, 0x94, 0x9c, 0x50, - 0x8b, 0xbb, 0xde, 0xfe, 0x8b, 0x94, 0x35, 0xc9, 0xad, 0x42, 0x9d, 0x15, 0xf8, 0x99, 0xa8, 0x8e, - 0x92, 0x88, 0xfc, 0xc2, 0x9f, 0x70, 0xd7, 0x31, 0x5b, 0xb7, 0x2e, 0x23, 0xc4, 0x3e, 0xaa, 0x5e, - 0x08, 0x85, 0xee, 0xff, 0xbe, 0x43, 0x3d, 0xeb, 0x88, 0xde, 0xd3, 0xda, 0xae, 0x42, 0xb0, 0xb2, - 0x53, 0xcd, 0x3e, 0x57, 0xe0, 0x9f, 0x55, 0x8c, 0xc6, 0xfd, 0xeb, 0xaf, 0x7c, 0x27, 0xd5, 0x12, - 0xae, 0x5e, 0xb2, 0xf9, 0x46, 0x3d, 0xe3, 0x3a, 0x16, 0xc4, 0x77, 0x10, 0x4b, 0xdd, 0xf5, 0x26, - 0x24, 0xc5, 0xaa, 0xd6, 0x20, 0x11, 0x99, 0x55, 0x55, 0xbc, 0x40, 0x23, 0x3d, 0x6b, 0xef, 0xbf, - 0x2f, 0x5c, 0xbb, 0xbf, 0xdd, 0x3b, 0xd7, 0x37, 0x55, 0x7c, 0x55, 0xac, 0xf5, 0xba, 0x4b, 0xe2, - 0x77, 0x41, 0x26, 0x5c, 0xfa, 0xe0, 0x8a, 0xf4, 0xdd, 0xfe, 0x08, 0xf2, 0x06, 0x37, 0x7b, 0xe4, - 0x3d, 0xdf, 0xee, 0x95, 0xdf, 0x88, 0xf9, 0x2e, 0xfa, 0xe0, 0x88, 0x73, 0xae, 0x71, 0x7c, 0x4d, - 0x64, 0xf3, 0x3e, 0x86, 0x98, 0x53, 0xa1, 0x2e, 0x49, 0xc4, 0x88, 0x77, 0xbd, 0xef, 0xe2, 0xaf, - 0xbb, 0xef, 0xe5, 0x3b, 0xe7, 0x49, 0xe6, 0x3d, 0x53, 0x6d, 0x75, 0xe9, 0x71, 0x05, 0x11, 0xcc, - 0xc1, 0x79, 0x4f, 0x6e, 0xdb, 0xef, 0x25, 0x35, 0xcd, 0x7b, 0xc9, 0x88, 0xff, 0x89, 0x93, 0x98, - 0x52, 0xaa, 0xc2, 0xbc, 0x12, 0x09, 0x5d, 0x5e, 0x5e, 0x24, 0x51, 0x44, 0x0c, 0x2b, 0xcb, 0x17, - 0xfc, 0x24, 0x35, 0x36, 0x48, 0xac, 0x73, 0x31, 0x7c, 0x4d, 0x57, 0xaa, 0xa7, 0xe2, 0x2b, 0x55, - 0xaa, 0xfc, 0x56, 0xb5, 0xc8, 0x41, 0x4d, 0xf3, 0x6a, 0xab, 0xeb, 0xd7, 0x89, 0xf8, 0xeb, 0x9d, - 0x86, 0xed, 0x8e, 0xe7, 0x62, 0x9a, 0xd6, 0x23, 0xc4, 0x5f, 0x2d, 0x75, 0xe2, 0x2b, 0x12, 0x89, - 0x57, 0xc9, 0x55, 0xf8, 0x8f, 0x82, 0x2b, 0xb1, 0xcb, 0xa5, 0x07, 0xd5, 0x80, 0x67, 0x84, 0x85, - 0x66, 0x63, 0x5a, 0xf8, 0xc1, 0xee, 0xda, 0x23, 0x43, 0x9b, 0xb7, 0x3b, 0x6c, 0x48, 0xd7, 0xe6, - 0xad, 0x6b, 0x11, 0x58, 0x8f, 0xa2, 0x3d, 0xf2, 0x14, 0x8a, 0x36, 0x2e, 0x23, 0xe1, 0x32, 0xbd, - 0x09, 0xb2, 0x8d, 0xb1, 0xb1, 0x9d, 0xf8, 0x98, 0xcb, 0x19, 0x99, 0x8e, 0x5d, 0x32, 0x9e, 0x86, - 0xfa, 0xfa, 0x72, 0x30, 0xd6, 0xb9, 0x27, 0x61, 0x8c, 0xec, 0x51, 0xf8, 0x4b, 0xc7, 0x4b, 0x14, - 0xdb, 0x4d, 0xbc, 0x48, 0x97, 0xb1, 0xac, 0x5a, 0x1f, 0x92, 0xef, 0xf1, 0x26, 0x25, 0xee, 0x5c, - 0x4d, 0x72, 0xd6, 0xab, 0xc4, 0x78, 0x8f, 0xb1, 0x0e, 0xb8, 0x4f, 0xa2, 0xc1, 0xf0, 0x90, 0x87, - 0xbd, 0xa8, 0xdd, 0x5f, 0xb2, 0xb9, 0xf3, 0x7c, 0xdb, 0x43, 0x92, 0xbf, 0x13, 0x6c, 0xd4, 0xa6, - 0x14, 0xaf, 0xd7, 0x28, 0x96, 0x33, 0xbd, 0x0e, 0x0f, 0xc8, 0x56, 0x4a, 0x68, 0x42, 0x58, 0x83, - 0x6a, 0xc7, 0xf2, 0xcf, 0xdd, 0xdd, 0xe2, 0x2b, 0x11, 0xe2, 0x17, 0xbe, 0x6a, 0xae, 0xf1, 0x04, - 0x22, 0x1a, 0x1a, 0x1a, 0x1f, 0x10, 0xcb, 0x2f, 0xf8, 0x8a, 0xe2, 0xc5, 0x65, 0xc1, 0x5d, 0xd2, - 0x93, 0x9b, 0x77, 0xf9, 0x6f, 0x77, 0xf2, 0x1d, 0x57, 0xe2, 0x49, 0xc5, 0xfc, 0x47, 0xd1, 0xb5, - 0xf2, 0xd1, 0x42, 0xfa, 0x6b, 0xa1, 0x7a, 0x96, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x11, 0x08, - 0xb0, 0x3e, 0xbc, 0x83, 0xf1, 0x8a, 0x6f, 0xa8, 0x0b, 0x7c, 0x12, 0x18, 0x8a, 0x4d, 0xfc, 0x9d, - 0x78, 0x2e, 0xce, 0xdf, 0x8d, 0x51, 0x18, 0xfd, 0x72, 0xf9, 0xc5, 0x29, 0x61, 0x48, 0xcf, 0xa5, - 0xe1, 0x1e, 0x09, 0x06, 0xb5, 0x60, 0xd3, 0xf0, 0xf0, 0xc6, 0x3c, 0x08, 0x08, 0x21, 0x39, 0xa7, - 0x6a, 0x0d, 0xa1, 0x07, 0x66, 0xd5, 0x41, 0xa4, 0xc7, 0x3f, 0x05, 0x59, 0x12, 0x33, 0x0d, 0x4b, - 0xc7, 0xa6, 0xff, 0x0c, 0x1c, 0x8b, 0xff, 0x8e, 0xbe, 0x57, 0x34, 0x6f, 0xc6, 0x32, 0x28, 0x6f, - 0xff, 0x9e, 0xbe, 0x3f, 0xbf, 0x11, 0xd9, 0x31, 0x96, 0x85, 0x2d, 0x01, 0x3e, 0x88, 0x95, 0x79, - 0x4c, 0x3e, 0xc6, 0xaa, 0xfe, 0x37, 0x3b, 0x74, 0x0c, 0xd8, 0x8f, 0x65, 0x2a, 0xdc, 0x84, 0x12, - 0x10, 0x72, 0x94, 0xc4, 0x66, 0x4b, 0x4c, 0x7f, 0xc3, 0x7c, 0xdf, 0x9c, 0xff, 0x4c, 0x57, 0xe0, - 0xb8, 0x4b, 0x4c, 0x04, 0x89, 0xbb, 0x69, 0x47, 0xd5, 0xd4, 0xe9, 0xf4, 0x33, 0x5f, 0x09, 0x5d, - 0xd5, 0x76, 0x6f, 0xe3, 0x87, 0x8f, 0xf9, 0x7f, 0xbd, 0x7f, 0x97, 0xfb, 0xc7, 0xd8, 0xae, 0x68, - 0xd5, 0x7b, 0xc1, 0x2d, 0x7f, 0x97, 0xfb, 0xd7, 0xf9, 0x7f, 0xbc, 0xcb, 0x25, 0xe1, 0x5e, 0x32, - 0xd0, 0xa5, 0xa3, 0x52, 0xd0, 0xa5, 0xa0, 0x74, 0x89, 0x68, 0xc6, 0x8c, 0x68, 0xba, 0xdd, 0xc5, - 0xa1, 0x6b, 0xc6, 0xf5, 0x5e, 0x55, 0xed, 0x57, 0x95, 0x7b, 0xc6, 0xbc, 0xab, 0xde, 0xab, 0xca, - 0xbc, 0x64, 0xe4, 0xd2, 0x6f, 0xf8, 0x7e, 0x3f, 0xe5, 0xfe, 0xf1, 0xff, 0x2f, 0xf7, 0xaf, 0xf2, - 0xff, 0x78, 0xda, 0x2a, 0xfc, 0xda, 0x6d, 0xf0, 0x57, 0xc7, 0x7c, 0xb7, 0xde, 0x3b, 0xe5, 0xbe, - 0xd6, 0xf9, 0x6f, 0x91, 0x2d, 0x78, 0x30, 0x8f, 0xf9, 0x7f, 0xbc, 0x7f, 0xcb, 0xfd, 0xe2, 0x5a, - 0x11, 0xd7, 0xb6, 0xd9, 0x4d, 0x34, 0xd7, 0x87, 0xb8, 0xd7, 0xb1, 0xda, 0x7f, 0x1a, 0xf2, 0xaf, - 0x0e, 0x94, 0xfa, 0x7d, 0x29, 0xa6, 0x9a, 0xff, 0x45, 0x4a, 0x9f, 0x1a, 0x3a, 0x4c, 0x58, 0x32, - 0x64, 0x4c, 0x82, 0x2a, 0x27, 0xd0, 0xb6, 0x81, 0xa3, 0xac, 0xc5, 0xe5, 0xeb, 0x25, 0x62, 0xe4, - 0x55, 0x6d, 0x65, 0x26, 0x9c, 0x41, 0x5c, 0x7b, 0xa6, 0x79, 0x70, 0x4e, 0x38, 0x0d, 0xc1, 0xec, - 0x8c, 0x27, 0x6f, 0x12, 0x16, 0x73, 0xcc, 0x81, 0x3b, 0xa9, 0xed, 0x32, 0x9b, 0xd7, 0xcf, 0x1a, - 0x20, 0x95, 0xf6, 0xa9, 0x19, 0xa4, 0x07, 0xe8, 0x8f, 0x45, 0xf1, 0x37, 0x35, 0x20, 0x1d, 0xf2, - 0x13, 0xee, 0xff, 0x94, 0x1c, 0x73, 0x4e, 0x10, 0xcc, 0x68, 0xf6, 0xb1, 0x9e, 0x50, 0x51, 0x8b, - 0xec, 0x0b, 0xb1, 0xce, 0x62, 0x23, 0x00, 0x44, 0x68, 0xc5, 0x7c, 0x0f, 0x3c, 0x54, 0x23, 0xd5, - 0xe0, 0xdd, 0xa1, 0x78, 0x28, 0x4e, 0x57, 0x4f, 0xa2, 0x2d, 0x7f, 0xfc, 0x3a, 0x13, 0x6e, 0x7e, - 0xe2, 0x15, 0xad, 0x15, 0xfe, 0x2a, 0x72, 0xba, 0x91, 0xc6, 0x45, 0xe7, 0x04, 0x4e, 0xb8, 0x3f, - 0x40, 0x75, 0x3b, 0xf2, 0x9b, 0xc4, 0x16, 0xe3, 0x73, 0xd7, 0x87, 0x39, 0x67, 0x4d, 0x7f, 0x1b, - 0xea, 0x9a, 0x15, 0x34, 0x6a, 0x9a, 0x15, 0x34, 0x78, 0xef, 0x96, 0xfb, 0xd6, 0xf9, 0x6f, 0x92, - 0xaf, 0xf3, 0x69, 0xb7, 0xce, 0x72, 0x24, 0x7a, 0x5a, 0xe9, 0x7f, 0xfe, 0x79, 0x12, 0xba, 0x5a, - 0xe9, 0x7f, 0xef, 0x9e, 0xa1, 0xc6, 0xbe, 0xfc, 0x33, 0x13, 0xe0, 0xc8, 0xd9, 0xf5, 0xcf, 0x4e, - 0xbc, 0x66, 0x5a, 0x99, 0x7e, 0xb9, 0xe9, 0xd7, 0x8c, 0xcb, 0x53, 0x2f, 0xd7, 0x44, 0x22, 0x7d, - 0x53, 0xa3, 0xf5, 0x2d, 0x5c, 0x31, 0x8f, 0xfb, 0xaf, 0xf2, 0xff, 0x7a, 0x22, 0xd7, 0x8a, 0xa1, - 0x55, 0xc2, 0x0b, 0x10, 0x00, 0x48, 0x92, 0x1a, 0x21, 0xa1, 0x56, 0x5a, 0xff, 0xc2, 0xbc, 0x77, - 0xcb, 0x7d, 0xad, 0xf2, 0xdf, 0x15, 0x15, 0x66, 0xd3, 0x6f, 0xf8, 0x77, 0x1a, 0xa6, 0xaa, 0x8b, - 0xfc, 0xbf, 0xde, 0x3f, 0xe5, 0xfe, 0xf0, 0x4e, 0x22, 0xd1, 0x34, 0x30, 0xf6, 0xd8, 0x0a, 0xa1, - 0x55, 0xfa, 0x22, 0x55, 0xe0, 0x96, 0xd3, 0x48, 0x1a, 0x06, 0xd3, 0x48, 0x1a, 0x06, 0x3c, 0xa2, - 0x7b, 0x14, 0xd3, 0x49, 0x24, 0x2b, 0x90, 0x5b, 0xb1, 0xd8, 0x7c, 0x7e, 0x3e, 0x72, 0x23, 0xbf, - 0x6d, 0xb6, 0xdb, 0xf3, 0xc7, 0x6a, 0x69, 0xa6, 0x9f, 0xf1, 0x3f, 0x1a, 0x67, 0x7e, 0x8d, 0xa8, - 0x18, 0xe3, 0x3e, 0x3e, 0xa7, 0xd9, 0x18, 0x14, 0xcf, 0x8c, 0xbb, 0xc8, 0xa1, 0x2f, 0x1c, 0x9f, - 0xc6, 0x8e, 0x5c, 0x80, 0xf2, 0xc3, 0x30, 0x90, 0xf1, 0x07, 0x40, 0x6e, 0x37, 0xf8, 0x33, 0x21, - 0x5a, 0x25, 0xc4, 0x6a, 0xfa, 0xf7, 0x1a, 0xa9, 0x7c, 0xb3, 0x0d, 0xa9, 0x7f, 0xcf, 0xd1, 0x2b, - 0x1f, 0xf8, 0xdb, 0xe8, 0x12, 0x37, 0xe7, 0xbf, 0xd2, 0x41, 0x80, 0x6a, 0xc5, 0xf5, 0x3f, 0xef, - 0x9c, 0x26, 0x29, 0xb8, 0x64, 0xd3, 0xf3, 0x3b, 0xe3, 0x1f, 0x8f, 0x53, 0xdd, 0x92, 0xe2, 0x72, - 0xdf, 0x09, 0xcd, 0x41, 0x94, 0x9e, 0x91, 0x69, 0xe1, 0xf0, 0xcf, 0xb4, 0xd6, 0xd3, 0x5b, 0x4d, - 0x55, 0x34, 0xe3, 0x4f, 0xfd, 0x72, 0x93, 0xb9, 0xb9, 0xf9, 0xbb, 0xf9, 0x39, 0x88, 0x1a, 0x77, - 0xab, 0x8e, 0x5c, 0xf6, 0x35, 0x73, 0x94, 0x71, 0x2a, 0x69, 0xa6, 0x9f, 0x8b, 0xe8, 0x9d, 0xf5, - 0x32, 0x7d, 0x4e, 0x0a, 0xe1, 0x4b, 0x4d, 0x24, 0x93, 0x4d, 0x24, 0x93, 0x4d, 0x30, 0x6c, 0x1b, - 0x4d, 0x30, 0x6c, 0x1e, 0x55, 0xd0, 0xa7, 0xfa, 0x2b, 0xcb, 0xd4, 0xc9, 0x1b, 0xd1, 0xcf, 0x7c, - 0x14, 0x18, 0xb9, 0xf3, 0x61, 0x89, 0x71, 0x4b, 0xf4, 0x54, 0x8b, 0xdf, 0x71, 0x5f, 0x86, 0x8c, - 0xc7, 0x1c, 0x43, 0x82, 0x2b, 0xdc, 0x57, 0x64, 0xb0, 0xa4, 0x87, 0x10, 0x14, 0x09, 0x31, 0x42, - 0x38, 0x20, 0xfa, 0x9e, 0x12, 0x50, 0x2e, 0xa7, 0x05, 0x35, 0xfe, 0x0e, 0xa9, 0xcf, 0x07, 0xab, - 0x84, 0x0f, 0x95, 0x09, 0xf0, 0xa7, 0xa2, 0xb6, 0xc4, 0x56, 0x8d, 0x07, 0xaf, 0x76, 0xe3, 0x45, - 0xc4, 0x9d, 0x84, 0x74, 0x4e, 0x79, 0x1d, 0xb1, 0xaf, 0xcf, 0xdf, 0x91, 0x41, 0xef, 0x82, 0x20, - 0xa8, 0xcf, 0xa2, 0x6d, 0x2c, 0x8b, 0xae, 0xa6, 0x44, 0x44, 0xe0, 0x90, 0x42, 0x20, 0x40, 0xf3, - 0x33, 0x9a, 0x31, 0xb5, 0x1d, 0x96, 0xe3, 0x7c, 0x16, 0x0a, 0x6a, 0x91, 0x7c, 0x98, 0x10, 0x0f, - 0x5f, 0x71, 0xb0, 0x74, 0x5e, 0xbc, 0x65, 0x2c, 0x56, 0x67, 0xa2, 0x03, 0xa9, 0xb5, 0x29, 0x26, - 0xe2, 0x49, 0xd6, 0x9f, 0x85, 0x29, 0x4a, 0x32, 0x94, 0x74, 0x40, 0x87, 0xaf, 0x29, 0x4c, 0x68, - 0x28, 0x35, 0x9c, 0xe1, 0x18, 0x3b, 0xb9, 0x1a, 0xbd, 0x55, 0xd8, 0xed, 0xf0, 0x5c, 0x15, 0x2d, - 0x62, 0x2a, 0x10, 0xae, 0xb1, 0x5a, 0x67, 0x97, 0x3f, 0x0e, 0xf3, 0x1b, 0x77, 0x13, 0xc1, 0x1d, - 0x77, 0x20, 0x1c, 0x23, 0x94, 0xa4, 0x11, 0x8a, 0xcf, 0xaa, 0x45, 0xe0, 0x86, 0xef, 0x9d, 0x6f, - 0x82, 0xb0, 0xa7, 0x96, 0xb3, 0xc3, 0x9b, 0x10, 0x6a, 0x50, 0x4f, 0xe2, 0x02, 0x57, 0x82, 0x64, - 0x76, 0x28, 0xdb, 0x97, 0xe8, 0x2a, 0xf2, 0x70, 0x48, 0x2b, 0x34, 0x97, 0xbe, 0x61, 0x1c, 0x69, - 0xa3, 0xc2, 0x64, 0xbd, 0xdd, 0xff, 0x04, 0xa5, 0x54, 0xd5, 0x6f, 0x6b, 0xab, 0x88, 0xbb, 0xa4, - 0xfe, 0x93, 0xff, 0x41, 0x3f, 0xf8, 0x95, 0x78, 0xfc, 0x42, 0xfe, 0x17, 0xe8, 0xcc, 0x93, 0x10, - 0x82, 0x8d, 0xf2, 0x8f, 0xdd, 0xdf, 0x36, 0xf7, 0x08, 0x73, 0x5d, 0xdd, 0xc3, 0xdd, 0x17, 0x28, - 0xde, 0xad, 0x05, 0xdd, 0x84, 0x1e, 0xf0, 0xef, 0x41, 0x37, 0x42, 0xf8, 0x93, 0x19, 0x5d, 0x8d, - 0x9f, 0xb1, 0x83, 0x6b, 0x3f, 0x88, 0x13, 0x19, 0x4c, 0x7d, 0x35, 0xd7, 0x14, 0x55, 0xaf, 0x55, - 0x06, 0x3d, 0x1e, 0xaf, 0xb1, 0x13, 0xf9, 0xf9, 0x7a, 0x0a, 0xf7, 0xd7, 0xa1, 0x4e, 0xb5, 0x3f, - 0x57, 0x22, 0xba, 0x29, 0xd2, 0xfa, 0x9d, 0x25, 0xe3, 0x02, 0x06, 0x34, 0xcd, 0x3a, 0x23, 0x85, - 0x09, 0x45, 0x86, 0xd1, 0x85, 0xaf, 0xc7, 0xa0, 0x63, 0xcb, 0xe0, 0xac, 0xb6, 0x06, 0xa5, 0xae, - 0xd0, 0xc1, 0xa6, 0xda, 0x21, 0x90, 0x92, 0x0b, 0x6d, 0x3b, 0xf0, 0x56, 0x4b, 0xb4, 0x72, 0x0b, - 0x3d, 0x31, 0xac, 0xd6, 0xee, 0xbd, 0xf0, 0x4d, 0x55, 0x55, 0x4e, 0xb7, 0xf8, 0x50, 0xee, 0x56, - 0x4a, 0xc4, 0x1a, 0xcb, 0xea, 0xad, 0x37, 0x16, 0x9e, 0xbe, 0x08, 0xc9, 0x55, 0x57, 0xfb, 0x14, - 0xef, 0xac, 0x4f, 0xd0, 0x67, 0xbc, 0x23, 0x19, 0xd1, 0x3b, 0xe8, 0xaf, 0x0f, 0x70, 0x4e, 0x12, - 0x5a, 0xab, 0x67, 0x93, 0x11, 0xa6, 0xa2, 0xbe, 0x0a, 0xc9, 0x9f, 0xa1, 0x6b, 0x5c, 0x84, 0x2f, - 0x35, 0x5f, 0xe3, 0x3e, 0x33, 0x53, 0x4c, 0x1e, 0xd3, 0x4f, 0xa5, 0xef, 0x41, 0xa5, 0xe1, 0x1c, - 0xd8, 0x95, 0x79, 0x6f, 0x92, 0x9f, 0x04, 0x87, 0x36, 0x6a, 0xff, 0x1d, 0x5d, 0xeb, 0x58, 0xc7, - 0x5f, 0x4f, 0x1c, 0x55, 0x55, 0x55, 0xad, 0x57, 0xe2, 0x3c, 0x44, 0x5f, 0x43, 0x75, 0x04, 0x58, - 0x85, 0xcb, 0x0b, 0xb0, 0x90, 0x6a, 0x94, 0xfb, 0x61, 0x3b, 0x1f, 0x2c, 0x11, 0x36, 0x1d, 0xf1, - 0x86, 0x93, 0x25, 0xc7, 0x10, 0x3e, 0xe4, 0x61, 0xe8, 0x41, 0x57, 0x46, 0xc6, 0xbe, 0x1f, 0x51, - 0x0b, 0x58, 0x81, 0xf8, 0xca, 0x25, 0xa0, 0x9b, 0x61, 0xb8, 0x3f, 0xf3, 0xc3, 0x9a, 0xc5, 0x01, - 0x64, 0x30, 0xd1, 0x97, 0xfd, 0x73, 0x63, 0x2d, 0x01, 0x91, 0x59, 0xd2, 0xc4, 0xc2, 0x05, 0x27, - 0x95, 0xb1, 0x22, 0x3a, 0x92, 0x7b, 0xbf, 0x10, 0x13, 0x29, 0x31, 0x4b, 0x49, 0xaa, 0xaa, 0xe1, - 0x31, 0x0b, 0xae, 0x39, 0x4c, 0x27, 0xd0, 0x56, 0xa1, 0x2e, 0xae, 0x44, 0xf2, 0x0e, 0x93, 0x3f, - 0x1e, 0x62, 0x66, 0xb3, 0xf2, 0x9a, 0x85, 0x64, 0x66, 0xab, 0x29, 0x2b, 0x09, 0x1a, 0x7e, 0x3b, - 0x77, 0x5e, 0x6a, 0x93, 0x26, 0xa1, 0xdf, 0xbd, 0x76, 0x98, 0xa7, 0xb4, 0x35, 0x44, 0x45, 0xeb, - 0xea, 0xff, 0x15, 0x28, 0xe3, 0x33, 0x03, 0x9a, 0x08, 0x64, 0xc2, 0x2b, 0x5a, 0xe4, 0x3f, 0x84, - 0x24, 0xce, 0x35, 0x70, 0xc9, 0xd4, 0xce, 0x81, 0xe6, 0x42, 0xfb, 0xbb, 0xe3, 0xf7, 0xbb, 0xe1, - 0x8c, 0xb9, 0x2f, 0xfc, 0xb7, 0xbb, 0x82, 0xee, 0x0b, 0x84, 0xaa, 0xf2, 0xf6, 0x34, 0x7c, 0xc6, - 0x3e, 0x13, 0x22, 0xe8, 0xcf, 0xad, 0x55, 0x72, 0x16, 0x4c, 0xfc, 0x11, 0x4f, 0x7a, 0xdc, 0xfb, - 0x2b, 0xdf, 0xc4, 0x57, 0x14, 0x31, 0xe3, 0xab, 0x78, 0x87, 0xfe, 0x5a, 0x4e, 0xee, 0x2b, 0xa0, - 0xca, 0x68, 0x23, 0xe4, 0x0a, 0x37, 0x1f, 0xe3, 0x08, 0x5c, 0xb4, 0xf9, 0x26, 0xb4, 0xd4, 0xcc, - 0xda, 0xd7, 0xf6, 0x72, 0x7f, 0x3f, 0x10, 0x6b, 0xdf, 0x77, 0x0d, 0x74, 0x13, 0xca, 0x14, 0xe1, - 0x00, 0x85, 0x35, 0x13, 0x66, 0xb5, 0x3f, 0xbf, 0xfc, 0xa7, 0xd5, 0x44, 0x72, 0x08, 0x7b, 0xc1, - 0x57, 0x28, 0xb5, 0xaf, 0xcd, 0x5a, 0xfc, 0x22, 0x31, 0x56, 0xb2, 0xc1, 0x3a, 0xe2, 0xff, 0x8e, - 0xdd, 0x8f, 0x77, 0x75, 0x55, 0x5f, 0x29, 0xdf, 0x72, 0x74, 0x2f, 0xa6, 0xec, 0x75, 0xde, 0x17, - 0xe8, 0x7c, 0xaf, 0xa1, 0x69, 0x17, 0xa2, 0x31, 0x11, 0x13, 0x5c, 0x25, 0xe1, 0x03, 0x2a, 0xad, - 0x6b, 0x55, 0xfc, 0xc6, 0x97, 0xd9, 0x7b, 0x88, 0x7e, 0xec, 0x3f, 0x09, 0x64, 0xc5, 0x9a, 0xaf, - 0xc7, 0xc2, 0x1d, 0x8e, 0x6c, 0xb3, 0x77, 0xdd, 0x36, 0x9b, 0xbe, 0x0b, 0x84, 0xa0, 0xd5, 0x0f, - 0x55, 0xa7, 0xf8, 0x46, 0x14, 0xe3, 0x93, 0x18, 0xaa, 0xeb, 0xaa, 0xf8, 0x8d, 0x53, 0x55, 0x55, - 0x57, 0xc5, 0xea, 0xda, 0xd5, 0x65, 0xe5, 0x10, 0xf7, 0x70, 0xc7, 0x42, 0x7a, 0x2b, 0x98, 0xcd, - 0x6d, 0x78, 0x48, 0x43, 0xdf, 0x7b, 0x93, 0x94, 0xb5, 0xaf, 0x89, 0x2b, 0xdf, 0x5a, 0x8c, 0x89, - 0xf8, 0x82, 0x97, 0x54, 0x61, 0x6e, 0xaf, 0xf5, 0x78, 0xae, 0x42, 0x3e, 0xdf, 0xb2, 0xd5, 0x7e, - 0x4a, 0x5a, 0xf1, 0x26, 0x15, 0x54, 0xbe, 0xc4, 0xbb, 0xfe, 0x08, 0x8b, 0x69, 0x57, 0xbe, 0x10, - 0x11, 0x2f, 0xa7, 0x79, 0x79, 0xfd, 0xfe, 0xfa, 0x1a, 0xff, 0x21, 0x0f, 0x8f, 0xf9, 0xaa, 0xb5, - 0xf7, 0x5a, 0xd7, 0x64, 0x55, 0xdf, 0x29, 0x2e, 0xff, 0x08, 0x1d, 0x75, 0xad, 0x44, 0xf3, 0x02, - 0x4b, 0x88, 0x12, 0x75, 0xa5, 0xd9, 0x8d, 0xbe, 0x78, 0x91, 0xf6, 0x11, 0x2e, 0xc2, 0x21, 0x1c, - 0x4e, 0xd8, 0x51, 0x79, 0x60, 0x7e, 0xe6, 0x23, 0xb7, 0x12, 0xf0, 0x99, 0x11, 0xe0, 0xfa, 0xd4, - 0x94, 0x56, 0x53, 0xc1, 0x10, 0xa7, 0xce, 0x63, 0xaf, 0x82, 0x39, 0x61, 0xd8, 0x86, 0x7a, 0x1f, - 0x15, 0xf5, 0x8b, 0xe8, 0x44, 0x17, 0xc1, 0x2d, 0x55, 0x56, 0x5f, 0xbf, 0xc1, 0x28, 0x8b, 0xbf, - 0x77, 0x77, 0x88, 0x05, 0x83, 0x6b, 0x55, 0x6f, 0x55, 0xdf, 0xe0, 0x8b, 0x2a, 0xed, 0xb5, 0x7d, - 0x7c, 0x84, 0x3b, 0x1b, 0x6f, 0x82, 0x42, 0xcf, 0x92, 0x76, 0xfb, 0xee, 0xbe, 0x13, 0x3a, 0xae, - 0xb2, 0x76, 0x8d, 0xd8, 0xc7, 0xbb, 0xf8, 0xf1, 0x3a, 0x35, 0x44, 0x8d, 0x55, 0x56, 0x31, 0x96, - 0x26, 0x12, 0x22, 0x36, 0xd2, 0xab, 0x2d, 0x1e, 0x26, 0x0a, 0x44, 0x85, 0x62, 0x09, 0xd0, 0xed, - 0x24, 0x1c, 0x86, 0xe7, 0xe8, 0xc7, 0x11, 0xa7, 0xe2, 0x7f, 0x52, 0xdf, 0x04, 0x86, 0xbd, 0xfb, - 0xe0, 0x88, 0x47, 0x1f, 0x8c, 0x7f, 0x96, 0xdd, 0xdb, 0x3f, 0x42, 0x7a, 0xb9, 0x6d, 0xa7, 0x4c, - 0x27, 0xce, 0x61, 0x4b, 0xef, 0x2f, 0xfa, 0xc4, 0x7d, 0x15, 0xbe, 0x08, 0xc4, 0x48, 0xdd, 0xfe, - 0x24, 0x79, 0xfc, 0xfe, 0xf1, 0xd8, 0xcf, 0xc8, 0x6a, 0xd7, 0x13, 0x04, 0x25, 0x77, 0x41, 0xdc, - 0xe2, 0x44, 0x7c, 0x5d, 0xe8, 0x69, 0x1d, 0x86, 0xed, 0xbf, 0x04, 0x64, 0x99, 0x84, 0x5b, 0x12, - 0xf2, 0x55, 0x55, 0x7d, 0x9e, 0x7a, 0x6b, 0x82, 0xe2, 0x3b, 0xbd, 0xb2, 0x40, 0xb5, 0xdf, 0xe0, - 0xa4, 0xad, 0xb4, 0xe3, 0x11, 0x99, 0xd7, 0xe3, 0x70, 0xe3, 0xb8, 0xa8, 0x88, 0xab, 0x7a, 0xc1, - 0xdb, 0x03, 0x79, 0x66, 0x10, 0x71, 0x31, 0x36, 0x92, 0x75, 0x8d, 0x2d, 0xb2, 0x70, 0x4e, 0x33, - 0x72, 0xed, 0x0d, 0x91, 0xab, 0xaf, 0x82, 0x32, 0x96, 0x31, 0xda, 0x44, 0x43, 0x50, 0xd7, 0x35, - 0x0d, 0x86, 0x83, 0x2e, 0x2e, 0x52, 0xe5, 0xbf, 0x88, 0xbb, 0xfa, 0xaf, 0x11, 0x5c, 0xb7, 0xbf, - 0xcd, 0x7d, 0xf8, 0x87, 0x77, 0x45, 0xc4, 0x09, 0x36, 0x7f, 0xf1, 0x1f, 0x04, 0x94, 0xdb, 0x5b, - 0x57, 0x09, 0xdf, 0x7b, 0xbc, 0xbd, 0x12, 0xbe, 0x3c, 0xe3, 0x7d, 0x4d, 0xe9, 0x4b, 0x57, 0x2c, - 0x4d, 0x19, 0x21, 0x26, 0x78, 0x21, 0xf4, 0x4e, 0xdf, 0x08, 0xc6, 0x47, 0x45, 0xe2, 0x07, 0xbd, - 0x0d, 0x85, 0x1d, 0x14, 0x2c, 0xb5, 0xcb, 0x4b, 0x7f, 0x56, 0x7d, 0x96, 0xaa, 0xfc, 0x41, 0x7b, - 0x49, 0x2e, 0x09, 0xc2, 0x1b, 0x6d, 0xd2, 0xbd, 0x4d, 0xd0, 0x96, 0xfa, 0xb4, 0x9d, 0x5a, 0xba, - 0xb4, 0xdd, 0xd7, 0x5f, 0x56, 0x97, 0xad, 0x7c, 0x11, 0x92, 0xed, 0x37, 0xaf, 0x84, 0x8b, 0x5a, - 0xd6, 0xda, 0xe5, 0xd5, 0x7e, 0x6d, 0x57, 0xee, 0xba, 0x92, 0x27, 0xf5, 0xaf, 0x82, 0x63, 0x95, - 0x43, 0xb9, 0x58, 0x7d, 0xff, 0xf9, 0x2e, 0xef, 0xf0, 0x43, 0x4f, 0x4f, 0xbe, 0x08, 0x4c, 0xc6, - 0xc6, 0x66, 0x28, 0xfa, 0xb8, 0xaa, 0x9b, 0x16, 0x6b, 0x4b, 0xc9, 0x6a, 0xd7, 0xcc, 0x5a, 0x23, - 0xa2, 0xa1, 0xf9, 0x2f, 0xda, 0xf5, 0x7f, 0x93, 0x53, 0x79, 0xf0, 0x53, 0x61, 0x36, 0xa8, 0xa4, - 0xaa, 0x7d, 0x57, 0xde, 0x20, 0xba, 0xd5, 0x72, 0xed, 0x1b, 0x22, 0xf2, 0x95, 0xdd, 0x1f, 0xc9, - 0xd5, 0x57, 0x41, 0x0a, 0x8c, 0xe8, 0x5b, 0x91, 0xbc, 0xc2, 0x2f, 0x7f, 0x29, 0x5d, 0x17, 0xe5, - 0x13, 0x7b, 0xf9, 0x89, 0xaa, 0xf1, 0x1f, 0x09, 0xd3, 0xd2, 0x5d, 0x78, 0x82, 0x11, 0x55, 0x22, - 0x62, 0xe0, 0x90, 0xb5, 0x69, 0x1b, 0xf8, 0x81, 0xd9, 0xbc, 0xdd, 0x3c, 0x78, 0xba, 0xd7, 0x09, - 0xd6, 0x39, 0x57, 0xbb, 0xfb, 0xd8, 0xe7, 0xfe, 0x0a, 0xaf, 0x4e, 0xf4, 0x3a, 0xa7, 0x95, 0x3e, - 0x4d, 0xe6, 0xc2, 0x71, 0x54, 0x88, 0x2b, 0x41, 0x66, 0x95, 0x75, 0x6f, 0x82, 0xef, 0x25, 0x6f, - 0x46, 0xde, 0x20, 0x4d, 0x9d, 0xeb, 0xa2, 0xf0, 0x95, 0x6b, 0x5a, 0x9a, 0x8b, 0x82, 0x43, 0xba, - 0xfd, 0xf7, 0x9b, 0xdb, 0x7c, 0xe3, 0x96, 0x3a, 0x83, 0xff, 0x96, 0xde, 0x6c, 0x15, 0xd1, 0xdd, - 0x5d, 0x59, 0x37, 0x56, 0x57, 0x56, 0x2b, 0x82, 0x71, 0x0e, 0xb7, 0xbb, 0xea, 0xbb, 0xd6, 0xbe, - 0x52, 0xde, 0xfe, 0x8a, 0xd7, 0xd1, 0x7b, 0xe8, 0x9d, 0xe2, 0x09, 0x55, 0xaf, 0x12, 0xc8, 0x7f, - 0xb3, 0x31, 0x89, 0x9a, 0xb5, 0xae, 0x5b, 0xa6, 0xf5, 0xd9, 0xf7, 0x75, 0x13, 0x17, 0x56, 0x3e, - 0xb5, 0xf7, 0x2f, 0x9b, 0x5f, 0x88, 0x26, 0xb5, 0xf2, 0x6a, 0xdf, 0xc2, 0x65, 0xa9, 0x4c, 0xc3, - 0x65, 0x97, 0x57, 0x76, 0xe9, 0x36, 0x4c, 0x49, 0xaf, 0x40, 0xcb, 0xd7, 0x66, 0xbd, 0xdf, 0x05, - 0x46, 0x77, 0xa5, 0xee, 0x46, 0x36, 0xe7, 0xfa, 0x89, 0xe8, 0xee, 0x46, 0x75, 0x6f, 0x89, 0x11, - 0x93, 0xb4, 0x31, 0x9c, 0xbf, 0xfe, 0x8b, 0x6a, 0xe4, 0x12, 0xed, 0xa7, 0xe2, 0x04, 0x8c, 0x55, - 0xad, 0x62, 0xfe, 0x61, 0xb7, 0xb9, 0x38, 0x23, 0xa7, 0x76, 0xfb, 0x89, 0xf1, 0x1f, 0x85, 0x0a, - 0x7c, 0x1f, 0x53, 0x51, 0x72, 0xe7, 0xde, 0xfb, 0x5d, 0x57, 0xab, 0x82, 0x83, 0x4b, 0xfb, 0xb1, - 0xfa, 0xb9, 0x2d, 0x1d, 0x93, 0x29, 0xdf, 0x18, 0x52, 0x76, 0x1a, 0xa1, 0xa0, 0x36, 0x40, 0xf9, - 0x98, 0xd0, 0xe6, 0x26, 0xa9, 0xb7, 0x8c, 0xec, 0xcf, 0xbf, 0x92, 0xeb, 0xf9, 0xeb, 0x55, 0x6f, - 0xc2, 0x9c, 0x13, 0x88, 0x85, 0x53, 0x0f, 0xbd, 0xb4, 0x39, 0x4b, 0xc6, 0x5c, 0x81, 0x81, 0x91, - 0x01, 0xf1, 0xb7, 0xa8, 0xed, 0xb5, 0x8e, 0x4d, 0xae, 0x12, 0x1f, 0x6d, 0x7a, 0xab, 0xe6, 0xa6, - 0xf4, 0xde, 0x20, 0x13, 0x19, 0xee, 0xc6, 0xec, 0x6d, 0x5f, 0xec, 0xad, 0xad, 0xbe, 0x21, 0xd0, - 0xcb, 0xad, 0xfe, 0x2f, 0x6d, 0xbd, 0x66, 0xfc, 0x40, 0x25, 0x2e, 0x7f, 0x63, 0x90, 0xed, 0xfe, - 0x69, 0xd7, 0xfc, 0x21, 0xf3, 0x73, 0x51, 0x9a, 0xe3, 0xb3, 0xa5, 0x61, 0xb5, 0x87, 0x7e, 0x31, - 0x4f, 0xbe, 0x62, 0x3e, 0xeb, 0x96, 0xee, 0xee, 0xf9, 0x08, 0x88, 0x92, 0x6b, 0x27, 0x04, 0x84, - 0x63, 0xbd, 0xe1, 0x3e, 0x8a, 0xef, 0xa1, 0x1a, 0xae, 0x63, 0xee, 0xe4, 0xe5, 0x2b, 0xbb, 0xb9, - 0x39, 0x8e, 0x86, 0x66, 0x48, 0xcd, 0x1f, 0x88, 0xa7, 0x91, 0x49, 0xd0, 0x60, 0xd8, 0x7e, 0x13, - 0xab, 0xd6, 0xab, 0xf3, 0x1b, 0x33, 0x2c, 0x7e, 0xcf, 0xcb, 0x9e, 0x53, 0x50, 0xd8, 0xd5, 0x75, - 0xea, 0xe2, 0x4f, 0x4e, 0x33, 0x4f, 0x17, 0x7d, 0xd6, 0xb2, 0x72, 0x8c, 0x77, 0x71, 0x5f, 0x89, - 0x2b, 0xdf, 0x77, 0x77, 0xcb, 0x63, 0x63, 0x7f, 0x98, 0xa9, 0x35, 0x49, 0xf2, 0x1a, 0xb5, 0xf1, - 0x34, 0xe3, 0x8b, 0x93, 0x1b, 0x9f, 0x5d, 0x0b, 0xd4, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, - 0x12, 0x09, 0x30, 0x11, 0xa7, 0xc3, 0xa2, 0xe8, 0x82, 0x16, 0x2f, 0x4c, 0x62, 0xed, 0x30, 0xca, - 0x61, 0x6f, 0xbb, 0x80, 0x4a, 0x53, 0x1e, 0xbe, 0x9a, 0x7f, 0x9e, 0x19, 0xe1, 0xf0, 0xe1, 0x78, - 0x69, 0xe0, 0x09, 0x61, 0xe5, 0x29, 0x3f, 0x5f, 0xf0, 0xe1, 0x87, 0xc6, 0x0f, 0x07, 0xc8, 0x8b, - 0x5b, 0x1a, 0x71, 0xa8, 0x13, 0x4d, 0x7f, 0x82, 0x3f, 0x1a, 0xa2, 0x23, 0x7c, 0x17, 0xf1, 0x94, - 0xc7, 0x69, 0xa8, 0xe9, 0x22, 0x31, 0xa7, 0x1a, 0x29, 0xa6, 0x9a, 0x29, 0xa6, 0x9a, 0x13, 0x34, - 0x7c, 0xd7, 0x86, 0xc5, 0x1a, 0x44, 0x92, 0xeb, 0x46, 0x58, 0x65, 0x83, 0xa1, 0xb7, 0x54, 0x23, - 0xc1, 0x80, 0xfc, 0x6b, 0xca, 0xbc, 0x1b, 0xab, 0xd2, 0xa0, 0xc1, 0x3f, 0x95, 0xb5, 0x3e, 0x07, - 0x86, 0x3f, 0x73, 0x3b, 0xf1, 0x2c, 0x02, 0x47, 0xe7, 0x8d, 0x20, 0xd2, 0x63, 0x82, 0x8d, 0x26, - 0x35, 0x49, 0x8f, 0x5f, 0x09, 0x31, 0x68, 0xab, 0x33, 0x99, 0xda, 0x18, 0x49, 0x28, 0xfe, 0x86, - 0xfc, 0x5f, 0x82, 0x33, 0x8c, 0xa6, 0xfd, 0x3c, 0x67, 0x24, 0x3e, 0x85, 0xc1, 0xf1, 0xfc, 0xbe, - 0x1b, 0xf0, 0xfe, 0x73, 0x1d, 0x09, 0x68, 0xfa, 0x7d, 0xf8, 0xaa, 0x15, 0x5e, 0x1e, 0x37, 0x1a, - 0xa3, 0x4d, 0x7c, 0x3a, 0xc5, 0x5c, 0x4f, 0x19, 0xfa, 0xa6, 0x9f, 0x82, 0x88, 0xeb, 0xa6, 0x83, - 0x23, 0xfd, 0x63, 0x1a, 0x10, 0xb0, 0x77, 0xaf, 0xc3, 0xe3, 0x72, 0xd4, 0x61, 0xf3, 0x5a, 0x4c, - 0x22, 0x93, 0x08, 0xc4, 0x3f, 0x9a, 0x4a, 0xf3, 0xa5, 0x56, 0x53, 0xd9, 0x9f, 0x61, 0x3c, 0x91, - 0xf1, 0xa2, 0x47, 0xfc, 0xbc, 0x21, 0x8d, 0xdf, 0x65, 0xd7, 0x8d, 0x0e, 0xb1, 0x8f, 0x43, 0xc7, - 0x68, 0xc9, 0x6a, 0x63, 0x1a, 0xa2, 0xdf, 0x35, 0xc3, 0x2a, 0x45, 0x85, 0x02, 0x26, 0xb3, 0x59, - 0x1a, 0x0d, 0x6b, 0xd4, 0xf8, 0x2f, 0x2c, 0x63, 0xd5, 0x2d, 0x1c, 0x75, 0xa1, 0x23, 0x2c, 0xbf, - 0x05, 0x7f, 0x5a, 0x6b, 0xc3, 0xb8, 0x2a, 0x94, 0x5e, 0x3f, 0xef, 0x8f, 0xfb, 0x88, 0xb4, 0x83, - 0xe3, 0x23, 0xe3, 0x3f, 0xfc, 0x3c, 0x10, 0x4f, 0x9b, 0x5e, 0x9c, 0x27, 0x4c, 0x3d, 0x94, 0xe9, - 0xe5, 0x22, 0x62, 0x0b, 0xc8, 0x8d, 0x37, 0x49, 0xa9, 0x0e, 0x34, 0xe4, 0xcc, 0xc7, 0xa2, 0xde, - 0x18, 0x3e, 0x08, 0x26, 0xc3, 0x61, 0xf1, 0xf8, 0x38, 0xeb, 0x52, 0x1c, 0x06, 0x1f, 0x4a, 0x33, - 0x4b, 0x58, 0xc2, 0x90, 0xdf, 0xcb, 0xa9, 0x79, 0x87, 0x86, 0x31, 0x5f, 0xf9, 0xe6, 0x46, 0x7f, - 0x31, 0xa2, 0x6e, 0x7e, 0x78, 0xda, 0x49, 0x09, 0x4c, 0x8a, 0xbf, 0xf3, 0xd1, 0x14, 0xbf, 0x16, - 0xc5, 0xbf, 0x3c, 0x45, 0x27, 0x15, 0x62, 0xaf, 0xfc, 0x47, 0x8d, 0x7b, 0x55, 0xaa, 0xaf, 0x7a, - 0xa5, 0x4f, 0x87, 0x85, 0x67, 0xc7, 0x1c, 0x0f, 0x30, 0xf5, 0x9b, 0xd1, 0x09, 0xbf, 0x5d, 0x4c, - 0x3c, 0xd0, 0x40, 0x23, 0xa1, 0x15, 0xa3, 0x5f, 0xc7, 0x3b, 0x81, 0x7f, 0x1a, 0x22, 0x9a, 0x42, - 0x12, 0x91, 0x2c, 0xc3, 0x75, 0x05, 0xc9, 0x74, 0x2b, 0x95, 0x1c, 0x7e, 0x24, 0x2d, 0xb0, 0x36, - 0x52, 0xc2, 0xfa, 0x2d, 0x88, 0x41, 0x37, 0xaa, 0x10, 0x88, 0x12, 0x9c, 0x58, 0xd4, 0x00, 0x09, - 0x84, 0x64, 0xf0, 0xa8, 0x08, 0x06, 0x5b, 0x1b, 0xb4, 0xeb, 0x04, 0xd3, 0x04, 0x1e, 0xb2, 0x90, - 0xa7, 0x03, 0x26, 0xa8, 0x8d, 0x89, 0x7c, 0x30, 0x11, 0x22, 0xd9, 0x84, 0x0f, 0xd9, 0xac, 0xa4, - 0x00, 0x04, 0x4e, 0xd2, 0xd8, 0x10, 0xa5, 0xf7, 0xd5, 0xeb, 0xd1, 0x7f, 0x19, 0xce, 0x52, 0x24, - 0x7a, 0x5a, 0xe9, 0x7f, 0xfe, 0x37, 0x5a, 0x30, 0xc6, 0x46, 0x1f, 0xc7, 0x46, 0x1f, 0x8c, 0x8c, - 0x3f, 0x8e, 0x8c, 0x31, 0x91, 0x87, 0xa7, 0x5f, 0x1c, 0x96, 0xb2, 0x5f, 0x9f, 0x86, 0x23, 0xa3, - 0x0f, 0xc6, 0x11, 0xc3, 0x8e, 0x97, 0x96, 0xd6, 0x35, 0x73, 0xfc, 0x66, 0x3a, 0x30, 0xc6, 0x46, - 0x1f, 0xc7, 0x46, 0x1f, 0xe3, 0x23, 0x0f, 0xe3, 0xa3, 0x0c, 0x64, 0x61, 0xef, 0x9e, 0x95, 0x7e, - 0x39, 0x2d, 0x64, 0xb5, 0xc2, 0xf1, 0x96, 0x84, 0x2c, 0xb5, 0x0b, 0x18, 0xf2, 0x0c, 0xb7, 0xa2, - 0x5a, 0xfc, 0x5b, 0x13, 0x33, 0xe3, 0x69, 0x72, 0xc9, 0x72, 0xc8, 0xf2, 0xd6, 0xf2, 0xc9, 0x72, - 0xc9, 0x72, 0xd6, 0xf2, 0xd6, 0xf2, 0xd7, 0x19, 0x6b, 0x8c, 0xb2, 0x16, 0x5a, 0xcb, 0x2d, 0x71, - 0x96, 0xb8, 0xcb, 0x59, 0x65, 0xac, 0xb2, 0xc2, 0x1d, 0x1d, 0x0f, 0x4b, 0x5d, 0x2c, 0xf9, 0x93, - 0xe6, 0x46, 0x65, 0xa9, 0x97, 0xeb, 0xb1, 0x8e, 0x87, 0x9f, 0xaa, 0x76, 0xba, 0xb8, 0x3f, 0x47, - 0x25, 0x3f, 0x04, 0x02, 0x33, 0x17, 0x43, 0xe6, 0xce, 0xad, 0x29, 0x39, 0xfb, 0x37, 0x1a, 0x89, - 0xe2, 0x06, 0x8e, 0xae, 0x45, 0x5e, 0xa9, 0xef, 0x69, 0x11, 0x8c, 0x6a, 0x2a, 0xc1, 0xb9, 0x8f, - 0x67, 0xa0, 0x45, 0x57, 0x04, 0xf5, 0xa4, 0x0e, 0xf0, 0xa3, 0xff, 0xc2, 0xd6, 0x17, 0x23, 0x66, - 0xb5, 0x49, 0xd1, 0x82, 0xbc, 0x74, 0x49, 0x46, 0x88, 0xe5, 0xd2, 0xe1, 0x1a, 0x00, 0x96, 0xae, - 0x36, 0xf5, 0xff, 0x88, 0x0d, 0x86, 0x71, 0xaf, 0x2a, 0xf1, 0x51, 0x56, 0x6d, 0x36, 0xe6, 0xd3, - 0x6f, 0x86, 0x38, 0xd3, 0x42, 0xa6, 0x8d, 0x53, 0x44, 0x05, 0x94, 0xf0, 0x93, 0x3f, 0x6e, 0xf9, - 0xbb, 0xcf, 0x03, 0x4d, 0x7f, 0x86, 0xf5, 0x2a, 0x57, 0x44, 0x1d, 0xbe, 0xa6, 0x4f, 0xa8, 0x8e, - 0x0a, 0xe1, 0x4f, 0x9e, 0x87, 0xa7, 0x9e, 0x87, 0xa1, 0xe8, 0xfa, 0x6f, 0xa3, 0xe9, 0xe5, 0x5d, - 0x0a, 0x7f, 0xa2, 0xbc, 0xbd, 0x4a, 0x97, 0xd8, 0xc6, 0xea, 0x90, 0xae, 0x82, 0x67, 0xbe, 0x8c, - 0x0a, 0x4b, 0xe8, 0xa8, 0x94, 0xbc, 0x4e, 0x91, 0x73, 0xe5, 0xcc, 0x4c, 0x16, 0x92, 0x2c, 0x70, - 0x32, 0xed, 0x13, 0xf9, 0xf8, 0xd4, 0x07, 0x7e, 0x1e, 0x0a, 0x43, 0xe6, 0x12, 0x67, 0xda, 0xd9, - 0x30, 0x40, 0x1e, 0x9a, 0x78, 0xa6, 0x53, 0x81, 0xf5, 0x8f, 0xf8, 0x80, 0x51, 0xa7, 0x29, 0x06, - 0x76, 0x1e, 0x8f, 0x5e, 0x24, 0x10, 0x85, 0x76, 0x5e, 0x34, 0x05, 0x16, 0xba, 0x95, 0x1d, 0x13, - 0x85, 0xc4, 0x6e, 0x34, 0x6c, 0x31, 0x8c, 0xb3, 0x30, 0x80, 0x8b, 0x41, 0x7b, 0xf6, 0xdb, 0x96, - 0x9e, 0x0b, 0x05, 0x73, 0x5e, 0x93, 0xea, 0x48, 0x77, 0xc3, 0xfc, 0x8b, 0xd0, 0xf1, 0x2a, 0xb3, - 0xfa, 0x2d, 0xa7, 0xff, 0x84, 0x65, 0x48, 0x57, 0x1c, 0x7d, 0xc4, 0x2c, 0x91, 0xca, 0x20, 0x24, - 0xcc, 0x00, 0x95, 0x94, 0x72, 0x63, 0xf8, 0x26, 0x0a, 0xb1, 0x26, 0xac, 0x15, 0xc8, 0xcd, 0x65, - 0xbe, 0x3c, 0x77, 0xc2, 0x1d, 0x11, 0x90, 0xa7, 0x21, 0x1e, 0xff, 0x0e, 0x6a, 0x38, 0xd1, 0x9c, - 0x33, 0xf4, 0x63, 0x52, 0xef, 0xc3, 0x55, 0x55, 0xcb, 0x27, 0x4b, 0xf8, 0x49, 0x16, 0x38, 0x4e, - 0x5b, 0x6f, 0xff, 0x05, 0x93, 0xe1, 0xf3, 0xcf, 0x87, 0xcc, 0xf8, 0x7c, 0xac, 0x38, 0xa0, 0x9f, - 0xd2, 0x28, 0xe4, 0xbf, 0x18, 0xb7, 0xff, 0x98, 0x4d, 0x8f, 0x65, 0x72, 0x8b, 0xfc, 0x40, 0x44, - 0x2c, 0x30, 0x84, 0xc6, 0xec, 0x1b, 0xef, 0x76, 0xda, 0xf1, 0xbb, 0x39, 0xe2, 0xfb, 0x38, 0xc1, - 0x4a, 0x5e, 0xc6, 0xa2, 0x83, 0xac, 0x5c, 0x67, 0xb7, 0x57, 0xff, 0x41, 0x5e, 0x75, 0xe5, 0xe3, - 0xbe, 0x5b, 0xe7, 0xc1, 0x08, 0xa7, 0xbe, 0xbe, 0x0a, 0xc4, 0x5e, 0xfc, 0x69, 0xa2, 0xb2, 0xaf, - 0xf1, 0x44, 0x58, 0xbd, 0x55, 0x70, 0x59, 0x5a, 0x99, 0x4f, 0x0e, 0x0a, 0x8e, 0xf5, 0xc9, 0x5f, - 0x6f, 0xf7, 0x74, 0x28, 0xee, 0xaf, 0x41, 0x7f, 0xfd, 0x4e, 0x8e, 0x84, 0xf5, 0xe5, 0x46, 0xc4, - 0x02, 0x5b, 0xbe, 0xef, 0xf1, 0xc6, 0x23, 0xa2, 0x39, 0x1d, 0x88, 0xf8, 0x22, 0x2a, 0xaa, 0x8b, - 0x80, 0xb1, 0x8a, 0xf4, 0x50, 0x1a, 0xe1, 0x11, 0x2a, 0x91, 0x78, 0x5c, 0x25, 0x1b, 0x10, 0x23, - 0xe9, 0x22, 0x98, 0x6d, 0x98, 0xdb, 0x14, 0x18, 0x6c, 0xcf, 0x81, 0xd2, 0xae, 0x7f, 0x85, 0x0c, - 0xbe, 0x90, 0x32, 0x45, 0x12, 0x8d, 0x60, 0xf2, 0x82, 0xd0, 0xb2, 0xf2, 0x55, 0x54, 0x0c, 0xaf, - 0xd7, 0xa3, 0x11, 0x7e, 0xb7, 0x8b, 0x2f, 0x88, 0x05, 0xa3, 0x75, 0x51, 0xf4, 0x2a, 0xce, 0x7a, - 0xc0, 0xf7, 0xf7, 0xef, 0xe2, 0x41, 0x08, 0x97, 0xe5, 0xf3, 0xa5, 0x73, 0x08, 0x37, 0x49, 0xb2, - 0xe7, 0x84, 0x47, 0x13, 0xd5, 0x5d, 0x5f, 0xa8, 0x4c, 0x48, 0x5c, 0x84, 0x99, 0x49, 0xf1, 0x1c, - 0xaa, 0xea, 0xbe, 0x08, 0x47, 0xba, 0x4e, 0x7c, 0x7f, 0x82, 0x71, 0xca, 0xb6, 0x8b, 0x1c, 0x3c, - 0x27, 0xa9, 0xc1, 0x87, 0xbe, 0x08, 0x60, 0x8f, 0x77, 0xc6, 0xf9, 0x71, 0x3b, 0x8f, 0xbe, 0x15, - 0x0b, 0xbc, 0x57, 0xad, 0xe0, 0xe6, 0xd6, 0xbf, 0x89, 0x57, 0xf1, 0x2b, 0xf8, 0x8e, 0x89, 0x5f, - 0x58, 0xa6, 0xc4, 0xa8, 0xed, 0x15, 0xd5, 0x87, 0xab, 0x44, 0xf0, 0x49, 0x77, 0x4c, 0xec, 0xcb, - 0xe1, 0x1e, 0xef, 0x8b, 0xaa, 0xee, 0xba, 0xc5, 0xf5, 0x8b, 0xe0, 0xae, 0xab, 0xdd, 0xa6, 0xb6, - 0x8b, 0x71, 0x78, 0x90, 0xb8, 0x81, 0x38, 0x26, 0xcc, 0x64, 0x3b, 0x6a, 0x67, 0x36, 0xa8, 0xe1, - 0x06, 0x5c, 0xa8, 0xbf, 0xc6, 0x0a, 0x70, 0x60, 0xc1, 0x63, 0x55, 0x51, 0xe9, 0x18, 0xe8, 0x83, - 0x14, 0xcd, 0x18, 0xf5, 0x73, 0x2b, 0x52, 0x7f, 0xc2, 0x85, 0x90, 0xd8, 0xe5, 0x9f, 0x01, 0xd5, - 0x72, 0x61, 0x10, 0x2c, 0x91, 0xa6, 0xaa, 0x95, 0xf0, 0xf1, 0x02, 0x65, 0xcf, 0xf4, 0xd3, 0x3e, - 0xd4, 0x9a, 0x6d, 0x34, 0x22, 0xd0, 0xff, 0xed, 0xb7, 0xc4, 0xf8, 0x90, 0x54, 0x10, 0xdd, 0xe1, - 0x7a, 0x49, 0xb9, 0x4b, 0xa0, 0xed, 0x0e, 0x16, 0x32, 0xf1, 0x8f, 0xf8, 0x29, 0x34, 0x36, 0x51, - 0xde, 0x59, 0xff, 0x2b, 0x11, 0xbf, 0x71, 0x34, 0x3f, 0xbc, 0x48, 0x24, 0x34, 0x06, 0x7b, 0x3b, - 0x9a, 0x23, 0xbe, 0xf6, 0x45, 0xf0, 0xff, 0x05, 0x22, 0x22, 0x06, 0x02, 0x06, 0x89, 0xde, 0x5e, - 0x63, 0xef, 0x4d, 0xda, 0x7f, 0xdf, 0x27, 0xbe, 0x82, 0xe9, 0x57, 0xaa, 0x45, 0xc4, 0x02, 0x2d, - 0xef, 0xff, 0x12, 0x8a, 0x9d, 0x05, 0xfa, 0xf4, 0xdd, 0x0e, 0xe8, 0x8e, 0x08, 0xc4, 0x92, 0x84, - 0xa6, 0x95, 0x78, 0x2c, 0xea, 0xa5, 0xa1, 0x69, 0xb6, 0x8d, 0xa7, 0xdf, 0x5e, 0xf8, 0x28, 0xee, - 0xfb, 0xbe, 0x5f, 0x04, 0xe6, 0x72, 0x41, 0x4c, 0xbb, 0x54, 0xc3, 0x4a, 0x6d, 0x8d, 0x52, 0x0d, - 0xfc, 0x40, 0x50, 0x77, 0x4c, 0x8e, 0x32, 0xe9, 0xb5, 0x38, 0xf5, 0xb1, 0xea, 0x25, 0x9e, 0x03, - 0xe4, 0x60, 0x20, 0x4e, 0xf8, 0x26, 0x29, 0xea, 0x49, 0xaa, 0xc8, 0xe6, 0x78, 0xf7, 0x2d, 0xde, - 0xb1, 0x00, 0x90, 0x6d, 0xb9, 0xb9, 0x85, 0xe2, 0x41, 0x68, 0x41, 0xec, 0x42, 0xc1, 0x6e, 0xcd, - 0xb1, 0x2e, 0x3f, 0xc1, 0x48, 0xb8, 0x72, 0xa1, 0xbd, 0x1d, 0x1b, 0xb1, 0xbb, 0x1d, 0xfa, 0xf8, - 0x24, 0x36, 0xe1, 0x02, 0x7e, 0xa7, 0xf8, 0x29, 0x36, 0xee, 0x33, 0x87, 0x4b, 0x41, 0xe3, 0x9b, - 0x9c, 0x86, 0x01, 0xef, 0xf6, 0x17, 0x67, 0xdd, 0x8c, 0x45, 0x8e, 0x0d, 0x09, 0xf4, 0x67, 0x9b, - 0xab, 0x02, 0x70, 0x4c, 0x5a, 0xd5, 0xef, 0x2d, 0x27, 0x44, 0x72, 0x5e, 0x5e, 0xee, 0x4e, 0x0b, - 0x08, 0xac, 0x50, 0xac, 0x21, 0xd5, 0x58, 0xd8, 0xa8, 0xdf, 0x4b, 0xe2, 0x42, 0x83, 0xb5, 0xd4, - 0x73, 0xfd, 0x9d, 0x63, 0xd5, 0x9f, 0xc4, 0xd8, 0x39, 0x17, 0x28, 0x9b, 0x94, 0x4f, 0x78, 0x80, - 0x57, 0x79, 0xf5, 0x21, 0x48, 0x37, 0x42, 0x23, 0x36, 0xb6, 0x3b, 0xd7, 0x16, 0x58, 0x87, 0xdc, - 0x43, 0x51, 0x7a, 0xc5, 0xf8, 0x90, 0x52, 0x47, 0x79, 0x04, 0x57, 0x67, 0xec, 0x1f, 0x77, 0x6f, - 0xff, 0x9b, 0x9a, 0x2d, 0xf8, 0x9b, 0xa4, 0xe1, 0x23, 0xd9, 0x41, 0x45, 0xa3, 0x4b, 0xbd, 0x42, - 0x22, 0x41, 0x10, 0x5f, 0x2e, 0x17, 0x0e, 0x95, 0xd4, 0xeb, 0x86, 0x7a, 0xb5, 0xf5, 0x4c, 0xc9, - 0xc9, 0x75, 0x77, 0x37, 0x52, 0xa4, 0x9c, 0x28, 0x29, 0xd8, 0x34, 0xf9, 0xf9, 0xc3, 0x89, 0xb0, - 0x63, 0x74, 0xa1, 0xb6, 0x6b, 0xac, 0xb7, 0x58, 0x48, 0xaf, 0x1e, 0x0a, 0x88, 0xb6, 0x73, 0x3a, - 0x3c, 0x3e, 0x09, 0x08, 0x26, 0xd9, 0x32, 0xd3, 0x98, 0x82, 0xff, 0x18, 0x46, 0x30, 0xf0, 0xd7, - 0x01, 0xb0, 0x86, 0x55, 0xb1, 0x7b, 0x88, 0x93, 0xca, 0x63, 0xba, 0x7e, 0x26, 0x81, 0x48, 0x5f, - 0x46, 0xcd, 0x7a, 0x86, 0x90, 0x3e, 0x7f, 0xe2, 0x61, 0x4e, 0xe5, 0x20, 0xb9, 0x91, 0xf1, 0xa7, - 0x2e, 0x8d, 0x4f, 0x8f, 0xfb, 0xe3, 0xa9, 0xb6, 0x30, 0xc9, 0x98, 0xaa, 0xcc, 0x97, 0x90, 0xb9, - 0xed, 0x6b, 0x8c, 0x24, 0x43, 0xc6, 0x54, 0xb6, 0x6a, 0xb2, 0x15, 0xbf, 0xe7, 0x38, 0xbd, 0x4f, - 0x9f, 0x77, 0xf4, 0x19, 0xef, 0xa8, 0xd5, 0x19, 0x7a, 0xc4, 0xc8, 0xbd, 0x0a, 0xaf, 0xae, 0xab, - 0xa3, 0xba, 0x2f, 0x9c, 0xe3, 0xea, 0x69, 0xa6, 0x9f, 0x9f, 0xa2, 0x39, 0x15, 0xd4, 0x89, 0x7d, - 0x48, 0x92, 0x70, 0x48, 0x66, 0x18, 0xf9, 0xb4, 0x10, 0xb4, 0x60, 0xe3, 0x61, 0x7f, 0xfa, 0xf8, - 0x50, 0x46, 0x66, 0x08, 0xa2, 0x57, 0x87, 0x01, 0x50, 0x1a, 0x9a, 0xfb, 0xc7, 0xa0, 0xa0, 0xfd, - 0x11, 0x21, 0x4d, 0xce, 0x26, 0x14, 0x2b, 0x59, 0x2f, 0xc7, 0x50, 0x1c, 0xc5, 0x4b, 0x2d, 0x03, - 0x1a, 0x1d, 0x38, 0x41, 0xaf, 0x1d, 0x1a, 0x11, 0x06, 0x2e, 0x3a, 0xf8, 0x65, 0x4f, 0x85, 0x09, - 0xa7, 0x1c, 0xac, 0x73, 0x10, 0x74, 0x87, 0x4d, 0xc9, 0x53, 0xe8, 0x0d, 0xb4, 0x9d, 0x4d, 0x4b, - 0x6d, 0xf1, 0x13, 0xc9, 0xae, 0x52, 0x14, 0x45, 0xdf, 0xc1, 0x11, 0xe3, 0x11, 0x84, 0x5f, 0x9c, - 0xf8, 0x50, 0x94, 0xd5, 0x69, 0x93, 0x17, 0x1e, 0x5e, 0x74, 0xe9, 0xf7, 0xc1, 0x38, 0xa2, 0xa4, - 0x46, 0x2b, 0x71, 0x5c, 0x6f, 0xb7, 0x3c, 0x4b, 0x0a, 0x8b, 0xb9, 0xe6, 0xff, 0xd4, 0xe9, 0xf4, - 0x5e, 0xfa, 0x9d, 0x24, 0xea, 0x41, 0x44, 0x74, 0x4e, 0xfa, 0x2b, 0xc2, 0xdc, 0x12, 0x4f, 0x87, - 0xc3, 0x63, 0xb2, 0x29, 0x3a, 0x31, 0x92, 0x4e, 0x11, 0x11, 0x06, 0x83, 0x30, 0x04, 0xd7, 0x33, - 0xd5, 0x2d, 0xdc, 0xa9, 0x72, 0x04, 0xc6, 0xb2, 0x9b, 0x76, 0x78, 0xc3, 0x6c, 0x72, 0xc7, 0x05, - 0x51, 0xc4, 0x37, 0x5a, 0x5e, 0xc9, 0x90, 0x4e, 0x56, 0x98, 0x95, 0x78, 0x40, 0x28, 0x41, 0x34, - 0x6a, 0xa7, 0x13, 0x19, 0xcd, 0x90, 0x1a, 0x81, 0xe0, 0xb9, 0x23, 0xac, 0x6b, 0x70, 0x75, 0xb8, - 0x59, 0x68, 0xe7, 0x2a, 0x4d, 0xb9, 0x1f, 0x8c, 0xf8, 0xe6, 0x35, 0x24, 0x2b, 0x24, 0x62, 0x5b, - 0x53, 0x77, 0x78, 0x7e, 0x08, 0x4e, 0xdb, 0x77, 0xee, 0x26, 0x0a, 0xa9, 0x6b, 0x7a, 0x68, 0x36, - 0x63, 0xe6, 0x9a, 0x1e, 0x5f, 0x09, 0x14, 0x9e, 0xab, 0x3d, 0x24, 0xbc, 0x50, 0xce, 0xe8, 0xea, - 0x9a, 0xf8, 0x48, 0x4b, 0xbe, 0x1a, 0xc9, 0xcf, 0xd0, 0xf2, 0x25, 0x74, 0x4a, 0x88, 0xe8, 0xfa, - 0x93, 0xa2, 0x54, 0x67, 0x3d, 0x5b, 0x6d, 0x34, 0xff, 0xd5, 0xbe, 0x6d, 0x5d, 0x44, 0xf4, 0x47, - 0x2b, 0xae, 0x57, 0xd5, 0xfe, 0x8a, 0x7b, 0xeb, 0x97, 0xc5, 0x0e, 0x2b, 0x25, 0xf1, 0x16, 0x08, - 0xc1, 0xe5, 0x42, 0x9c, 0x7f, 0x85, 0x0d, 0xa4, 0x29, 0x04, 0x50, 0xc4, 0xb9, 0x4f, 0x19, 0x22, - 0x2a, 0x10, 0x66, 0xf8, 0x66, 0x69, 0x72, 0x97, 0x63, 0xa0, 0x06, 0x77, 0x5a, 0xec, 0x87, 0xdc, - 0x00, 0xc5, 0x92, 0xcd, 0xc2, 0xe3, 0x56, 0xdc, 0x5e, 0x9c, 0xf8, 0x52, 0x81, 0xfd, 0x63, 0x0d, - 0xc5, 0x3a, 0xb9, 0xa7, 0x3d, 0x3b, 0x18, 0x9c, 0x8c, 0xfd, 0xcc, 0x92, 0x60, 0x2d, 0xd0, 0x52, - 0xc6, 0x0d, 0x98, 0xde, 0x7d, 0x49, 0x43, 0x89, 0x1f, 0x0a, 0xd1, 0x09, 0x2b, 0xd3, 0xe4, 0xbd, - 0x3d, 0x37, 0x7f, 0x84, 0x6a, 0x2f, 0xaa, 0xe3, 0x23, 0xe0, 0xac, 0x1c, 0x20, 0x44, 0xaa, 0xce, - 0xdb, 0x4e, 0x69, 0xba, 0x78, 0x23, 0x2a, 0x7d, 0x76, 0x2b, 0x4b, 0x98, 0x7c, 0x22, 0xf8, 0x2c, - 0x2e, 0x23, 0x95, 0x52, 0x18, 0xb4, 0x30, 0xf7, 0x76, 0x57, 0x09, 0x88, 0x7d, 0xf3, 0xf8, 0xce, - 0x82, 0xa9, 0x51, 0xfa, 0xd5, 0x75, 0x8d, 0xf5, 0x62, 0x37, 0x82, 0x3a, 0xd6, 0xc7, 0xd5, 0x8f, - 0xac, 0x8e, 0x93, 0x75, 0xab, 0xe0, 0x9c, 0x54, 0x2a, 0x5c, 0x06, 0x89, 0x52, 0x2a, 0x16, 0xa4, - 0xc1, 0x30, 0x27, 0x45, 0xdb, 0xd7, 0xc6, 0x08, 0x75, 0x19, 0x18, 0xa3, 0x65, 0x66, 0x0e, 0xb6, - 0x44, 0x9c, 0x8d, 0x07, 0x38, 0x81, 0xca, 0x3c, 0xd2, 0x66, 0x32, 0x46, 0x8e, 0x5e, 0x34, 0x51, - 0xd6, 0xa2, 0xe9, 0x2b, 0x13, 0xf2, 0x47, 0xd2, 0x7d, 0x1e, 0x14, 0xe8, 0x94, 0xc2, 0xdc, 0x99, - 0xbb, 0xa0, 0x86, 0xe8, 0xaf, 0xb0, 0xb8, 0x1d, 0xa9, 0x71, 0x60, 0x72, 0x92, 0x7a, 0xe8, 0x3a, - 0x0f, 0xd3, 0xae, 0x2b, 0x62, 0xcb, 0x55, 0x6e, 0xf7, 0x35, 0xfc, 0xdf, 0x90, 0xed, 0x4b, 0xf9, - 0x57, 0xf1, 0x22, 0xf5, 0xaa, 0xd5, 0x7c, 0x66, 0x0d, 0xf4, 0x71, 0xae, 0x93, 0x91, 0x3c, 0xef, - 0xf7, 0xb5, 0xea, 0x90, 0x5c, 0x3b, 0x57, 0x07, 0x2e, 0xd0, 0x8b, 0x3b, 0x5b, 0x76, 0xee, 0x55, - 0x6b, 0x4d, 0xd3, 0x60, 0x87, 0xc6, 0x46, 0x46, 0xfe, 0x67, 0xea, 0x53, 0x4a, 0x77, 0x45, 0x39, - 0xbf, 0x78, 0xc8, 0xf4, 0x95, 0x91, 0x74, 0x5f, 0xed, 0x65, 0xf5, 0x6d, 0xf4, 0xc5, 0xb9, 0x2a, - 0xc3, 0x5f, 0x82, 0x61, 0x27, 0x06, 0x0f, 0xc3, 0xaa, 0x1e, 0xc2, 0x8c, 0xd9, 0xbd, 0xbe, 0x3c, - 0xad, 0xaf, 0x7b, 0xec, 0xd7, 0xc5, 0x0c, 0x15, 0x8d, 0xaa, 0x23, 0xd8, 0x1e, 0x15, 0x3b, 0xf9, - 0x62, 0xb7, 0x0e, 0x30, 0x06, 0xe3, 0xe8, 0x2e, 0x9d, 0xae, 0xa4, 0x4b, 0xea, 0xe0, 0x25, 0xd5, - 0xfe, 0xa9, 0xd7, 0x90, 0xca, 0xbf, 0xab, 0xfd, 0x53, 0x27, 0xd1, 0x5a, 0x2f, 0x82, 0x83, 0x65, - 0xa4, 0xc6, 0x26, 0x48, 0x69, 0x35, 0x0f, 0xf8, 0x98, 0x29, 0xb8, 0x65, 0x4c, 0x2c, 0x2a, 0x99, - 0x55, 0x3d, 0x66, 0x4e, 0xff, 0x05, 0x3e, 0x30, 0x90, 0x1d, 0x3b, 0xeb, 0x3e, 0xa2, 0x9a, 0x83, - 0x5b, 0xcd, 0x66, 0x2f, 0xb6, 0x46, 0x37, 0x8e, 0x74, 0x05, 0xe9, 0x35, 0xd4, 0xaa, 0xf3, 0x0c, - 0xf0, 0x54, 0x45, 0xa4, 0x3d, 0xb2, 0xbd, 0xd4, 0xa0, 0xd5, 0x55, 0x55, 0x63, 0xfc, 0x15, 0xc9, - 0x87, 0x70, 0xbc, 0x9f, 0xe5, 0x97, 0xaa, 0xe2, 0xbb, 0xe3, 0x4a, 0x39, 0x4b, 0xdd, 0xc5, 0xbe, - 0x39, 0x72, 0xe5, 0xeb, 0x77, 0x12, 0xc1, 0xdb, 0xea, 0x7f, 0x7c, 0x4c, 0x12, 0xca, 0xb3, 0xd0, - 0x77, 0x27, 0x27, 0xf1, 0x51, 0x77, 0xac, 0xd5, 0xb1, 0x7f, 0x84, 0x0a, 0xed, 0xa8, 0xbd, 0x15, - 0x76, 0xe4, 0xca, 0x19, 0x88, 0x3e, 0x26, 0xef, 0xf3, 0x67, 0x8e, 0xad, 0x74, 0x6e, 0xe8, 0x1a, - 0xaa, 0xf8, 0x50, 0x65, 0x87, 0x50, 0xd5, 0xf1, 0x9c, 0xd4, 0x86, 0xb5, 0x52, 0x80, 0xa1, 0x0a, - 0x36, 0x2d, 0xf1, 0x93, 0x0a, 0x96, 0xb8, 0xef, 0xf2, 0xcb, 0x1b, 0x61, 0xe1, 0xe0, 0xff, 0x52, - 0x72, 0x04, 0xcf, 0x87, 0xc3, 0x63, 0xb0, 0xdd, 0x1d, 0x2c, 0x21, 0xd0, 0x86, 0x47, 0xf4, 0x13, - 0x73, 0xe0, 0x90, 0x20, 0x3a, 0x08, 0x97, 0x6a, 0x7c, 0x09, 0x4f, 0x3b, 0x49, 0x57, 0x82, 0xc1, - 0x46, 0x31, 0xb0, 0xf5, 0x58, 0xb6, 0x2f, 0x89, 0x39, 0x7b, 0xf7, 0xc1, 0x2e, 0x03, 0x53, 0xd2, - 0x2d, 0x44, 0x48, 0x2e, 0x7c, 0x69, 0x21, 0xa4, 0x48, 0x05, 0xf7, 0x5c, 0x37, 0x2f, 0x82, 0x13, - 0x1a, 0x02, 0x43, 0x61, 0xf1, 0x13, 0x9a, 0x2e, 0x3a, 0x88, 0x91, 0xc9, 0x7f, 0x36, 0x9e, 0xa5, - 0x32, 0x7f, 0x31, 0xf8, 0x57, 0xae, 0xbf, 0x0a, 0x10, 0x59, 0xcd, 0x09, 0x34, 0xc3, 0xad, 0x37, - 0x10, 0x6b, 0x74, 0x4e, 0xe8, 0x34, 0x26, 0x60, 0x2b, 0x2b, 0x1e, 0xd1, 0x5a, 0x3f, 0x5e, 0x10, - 0x59, 0xc5, 0xbb, 0x4d, 0xc7, 0x8a, 0x7e, 0xfc, 0x5f, 0xbe, 0x30, 0xaf, 0x38, 0x18, 0x1e, 0x64, - 0x15, 0xda, 0xfe, 0xb1, 0x46, 0x9a, 0x1d, 0x9a, 0xba, 0x99, 0xf8, 0xc3, 0x91, 0x8c, 0x8c, 0x45, - 0x77, 0xa1, 0xd7, 0x6c, 0xb9, 0xf8, 0x40, 0xb7, 0x78, 0x7d, 0x54, 0xd6, 0x69, 0xe9, 0xc7, 0x5d, - 0x1f, 0x8e, 0x3d, 0x08, 0xaa, 0xdc, 0x9d, 0xd1, 0x6d, 0x30, 0x63, 0x2b, 0xe0, 0x96, 0x87, 0x3a, - 0xe8, 0xe4, 0xbe, 0x23, 0xe4, 0x18, 0x15, 0x52, 0x38, 0x24, 0xb8, 0x80, 0xa0, 0x8c, 0xe3, 0x8b, - 0x22, 0x4e, 0x1b, 0x12, 0x81, 0x19, 0x61, 0xa7, 0xae, 0x0f, 0x16, 0x13, 0x0e, 0xe3, 0xfc, 0x59, - 0x43, 0x23, 0x59, 0x67, 0xb8, 0x84, 0x54, 0xc6, 0x77, 0xd8, 0x53, 0xa1, 0x75, 0xf5, 0xca, 0x4e, - 0x8b, 0x97, 0xce, 0x45, 0x15, 0x42, 0xa9, 0xa6, 0xbf, 0xd5, 0xeb, 0xab, 0xcb, 0xd5, 0xfe, 0xb9, - 0x57, 0x57, 0x3e, 0x08, 0xc9, 0xaa, 0xb9, 0x5c, 0x12, 0x65, 0x98, 0xf2, 0x34, 0x73, 0x8d, 0x87, - 0x82, 0x2f, 0x8a, 0xac, 0xbe, 0x0a, 0xe2, 0xe9, 0xfa, 0x8b, 0xbb, 0xee, 0x7c, 0x29, 0xaa, 0xb4, - 0x4f, 0x7c, 0x8b, 0xea, 0x34, 0xca, 0xa7, 0x69, 0x6c, 0xa6, 0x52, 0x9d, 0x8c, 0xbe, 0x14, 0x37, - 0xba, 0xf7, 0x5d, 0xfd, 0x07, 0x2d, 0x3e, 0xf8, 0x52, 0xa0, 0xf1, 0x92, 0xa6, 0x36, 0x0f, 0x1c, - 0x44, 0xf4, 0x38, 0x8e, 0xd0, 0x9b, 0x45, 0xe2, 0x3d, 0xe4, 0xfc, 0x9f, 0x82, 0x15, 0x51, 0x45, - 0xc5, 0x49, 0x85, 0x41, 0x2a, 0xa6, 0x17, 0xd6, 0x00, 0x4a, 0x27, 0x14, 0x26, 0x7c, 0x71, 0x65, - 0x4c, 0x41, 0x96, 0x9a, 0x6b, 0x2a, 0xcf, 0xe1, 0x42, 0x9c, 0x91, 0x88, 0x8b, 0xfd, 0x24, 0xaf, - 0x15, 0xba, 0x37, 0x77, 0xf8, 0x8e, 0x55, 0x1d, 0x34, 0x69, 0xf8, 0x4e, 0xf7, 0x8f, 0xc7, 0x3e, - 0x4a, 0x88, 0x85, 0xab, 0xc2, 0x85, 0xe7, 0x61, 0x6b, 0xb2, 0x8c, 0x5d, 0xd4, 0x19, 0x15, 0xf0, - 0x29, 0x17, 0x48, 0x31, 0xa6, 0xe5, 0x5e, 0x08, 0xe4, 0xa2, 0xc8, 0xba, 0x55, 0xe2, 0xea, 0x2e, - 0x91, 0x33, 0x2e, 0x78, 0x81, 0xe4, 0x87, 0x4e, 0x4c, 0x0f, 0x40, 0x63, 0x57, 0x25, 0x91, 0xdb, - 0xf8, 0xc1, 0x96, 0x73, 0xdb, 0x8c, 0x9d, 0xd0, 0x67, 0xf9, 0x5c, 0x63, 0xce, 0x3b, 0xf7, 0x65, - 0xc8, 0x7e, 0x0a, 0xfc, 0xf0, 0x92, 0x3a, 0x12, 0xac, 0x59, 0x56, 0xa8, 0xa7, 0x3c, 0x18, 0x06, - 0x47, 0x92, 0xac, 0x4c, 0x36, 0x13, 0xc1, 0xd5, 0xad, 0x6e, 0xbf, 0x83, 0x5f, 0x18, 0x4b, 0xa3, - 0x77, 0xd1, 0x72, 0xfa, 0xc5, 0x5c, 0x86, 0x29, 0x04, 0xa4, 0x17, 0xcb, 0xd5, 0x89, 0x7a, 0xc5, - 0x27, 0x34, 0xa4, 0x16, 0x9a, 0xf8, 0x6c, 0x8c, 0x6e, 0xd9, 0xa9, 0xfd, 0x34, 0x10, 0xab, 0xff, - 0x1b, 0x4d, 0x45, 0xe8, 0xe3, 0xd3, 0x70, 0x64, 0x74, 0x69, 0x54, 0xb0, 0x43, 0x3c, 0x15, 0x0f, - 0x60, 0xe1, 0xcc, 0xb8, 0xab, 0xff, 0x82, 0xbb, 0xf1, 0x3f, 0xa1, 0xa8, 0xba, 0x93, 0x0b, 0xe6, - 0x7c, 0x51, 0x6f, 0x69, 0x25, 0x55, 0xf1, 0x96, 0xb1, 0x5d, 0xe4, 0xb6, 0x6f, 0x1e, 0x58, 0x47, - 0xb0, 0xed, 0xd7, 0xc2, 0x83, 0x2e, 0x32, 0xc5, 0x83, 0x40, 0xed, 0xac, 0x41, 0x36, 0xb2, 0x03, - 0xf7, 0xa3, 0x22, 0xb2, 0x3a, 0x90, 0x95, 0xc0, 0x3b, 0xd2, 0xdb, 0xb1, 0xc3, 0x8b, 0x21, 0x45, - 0x48, 0x81, 0x8d, 0x9f, 0xc1, 0xf0, 0xa5, 0xab, 0x18, 0x1f, 0xf3, 0x0c, 0xba, 0x57, 0x6e, 0x42, - 0x77, 0xcf, 0xaf, 0xcf, 0x51, 0x2a, 0x70, 0x78, 0xf0, 0xab, 0x25, 0x61, 0xad, 0xa9, 0xb6, 0xd9, - 0x37, 0xce, 0xc1, 0x5e, 0x71, 0x31, 0x27, 0x15, 0xa8, 0x91, 0xca, 0x13, 0xbb, 0x27, 0x52, 0xc8, - 0x3d, 0x86, 0x95, 0xac, 0x00, 0x70, 0xb9, 0x93, 0x09, 0xa9, 0xe1, 0x3e, 0xef, 0x5a, 0xf8, 0x4c, - 0x49, 0xee, 0x4f, 0x76, 0x3f, 0x13, 0x0a, 0x6e, 0xcf, 0x41, 0xe5, 0xc5, 0x17, 0x26, 0x48, 0xb9, - 0xe7, 0x04, 0xcc, 0x62, 0x4a, 0xbc, 0x67, 0x76, 0xcd, 0x44, 0x5c, 0xe5, 0x95, 0x21, 0x2d, 0xcd, - 0x40, 0xff, 0x04, 0xbb, 0xad, 0xee, 0xef, 0xf7, 0x52, 0xf5, 0x17, 0xf1, 0x05, 0x75, 0x3b, 0x6d, - 0xb5, 0x6f, 0xe3, 0xf4, 0x0e, 0x6a, 0x46, 0x7c, 0x8f, 0xdd, 0xf1, 0x31, 0x02, 0x26, 0x3d, 0xf1, - 0x40, 0x59, 0x10, 0x3f, 0xc1, 0x50, 0x89, 0x87, 0x26, 0x49, 0x38, 0x69, 0xa5, 0x98, 0x4e, 0x6a, - 0xca, 0x55, 0x4e, 0x31, 0x7e, 0xc5, 0xbf, 0xc1, 0x5d, 0xe7, 0x8d, 0x0f, 0x42, 0xdb, 0x70, 0x6b, - 0xea, 0xe5, 0x3c, 0xf7, 0x89, 0x58, 0xcb, 0xe1, 0xb0, 0x9e, 0x1d, 0xdd, 0x7a, 0x2c, 0xfe, 0x0c, - 0x65, 0xc2, 0x7d, 0xe9, 0x34, 0xd2, 0xe8, 0xda, 0xae, 0x08, 0x4e, 0x99, 0x7a, 0xc6, 0x9d, 0x7a, - 0x2a, 0x75, 0xe8, 0x8c, 0x7d, 0x4a, 0x0a, 0xe8, 0xcd, 0xf5, 0x6f, 0xa2, 0xb9, 0x7c, 0x12, 0x48, - 0xcb, 0x1c, 0x8a, 0x0e, 0x1f, 0xc1, 0x40, 0xaa, 0x52, 0xd0, 0xc4, 0xba, 0x50, 0xfe, 0x0a, 0x75, - 0xaa, 0xae, 0xaa, 0x15, 0xfa, 0x5f, 0xe1, 0x42, 0x2c, 0x2d, 0x9a, 0xfe, 0x21, 0x82, 0xfc, 0x9f, - 0x71, 0x59, 0xea, 0x91, 0x46, 0x5a, 0xdd, 0xf0, 0x81, 0x69, 0x22, 0xa4, 0xb2, 0xaa, 0xbc, 0xd4, - 0xf0, 0x58, 0x72, 0x57, 0xae, 0x9a, 0xb4, 0xcc, 0xfe, 0x9f, 0x7c, 0x61, 0xb3, 0x50, 0xd6, 0x48, - 0x68, 0xf2, 0x85, 0xbf, 0x35, 0xd2, 0xd8, 0xbb, 0xb2, 0x81, 0x7a, 0x7b, 0x47, 0x30, 0xc3, 0x99, - 0xf8, 0x52, 0x32, 0x99, 0xa3, 0x39, 0x7b, 0x44, 0x73, 0x9d, 0x3d, 0xf2, 0x8e, 0x8d, 0x8b, 0x15, - 0xc7, 0xfc, 0x93, 0x93, 0x63, 0xbc, 0x4d, 0xf1, 0x97, 0xab, 0x9c, 0x3f, 0xa4, 0xca, 0x70, 0x36, - 0xad, 0x8a, 0x3f, 0x4e, 0xbe, 0x14, 0x96, 0x60, 0x33, 0x5a, 0xd9, 0x21, 0xa0, 0x76, 0xa5, 0x7d, - 0xe6, 0x33, 0xcc, 0xe3, 0x1a, 0x2b, 0x59, 0xf4, 0x1f, 0xb1, 0x69, 0xd6, 0x4e, 0xa9, 0x46, 0xf8, - 0x93, 0xdb, 0x21, 0xdb, 0x72, 0x33, 0x5f, 0x12, 0x53, 0xde, 0xe7, 0xb2, 0xe3, 0xd6, 0x7c, 0xab, - 0xc1, 0x46, 0xee, 0xf2, 0xf6, 0xab, 0x7f, 0x8c, 0x28, 0xe1, 0xc2, 0xb4, 0xd3, 0x17, 0x79, 0x32, - 0x17, 0x25, 0x64, 0xd4, 0x9c, 0xee, 0x63, 0x65, 0x5f, 0x19, 0x7c, 0x86, 0x17, 0xa0, 0xd5, 0x96, - 0x42, 0xd8, 0x14, 0x43, 0x91, 0x18, 0xed, 0x3b, 0xe6, 0x88, 0xfe, 0x7f, 0x85, 0x34, 0xa5, 0x82, - 0x05, 0xa6, 0xda, 0x3b, 0x2d, 0x50, 0xc2, 0x07, 0xd6, 0xd4, 0x7b, 0x3d, 0xcd, 0xbe, 0xfb, 0xa9, - 0xb8, 0x9d, 0x3e, 0x23, 0xc4, 0x0b, 0xde, 0xec, 0xce, 0x41, 0x77, 0x90, 0x71, 0x10, 0x48, 0x42, - 0x51, 0x11, 0xad, 0xc6, 0xfb, 0xe0, 0x9a, 0x95, 0x83, 0x69, 0xaa, 0x97, 0xca, 0xb6, 0xbe, 0xe2, - 0x61, 0x4c, 0xc9, 0x32, 0x23, 0x45, 0x21, 0xc9, 0x07, 0x80, 0xf0, 0x9b, 0x69, 0x0f, 0x69, 0xb4, - 0x7c, 0x54, 0xfc, 0x20, 0x2a, 0xd8, 0xc4, 0x54, 0x5b, 0x09, 0x16, 0x56, 0x9e, 0xf0, 0xcb, 0x09, - 0x2d, 0xc5, 0xdf, 0x82, 0x32, 0xd0, 0xd2, 0x19, 0x32, 0xeb, 0xe5, 0x0a, 0xe3, 0x6b, 0x8a, 0xe8, - 0x53, 0x1f, 0x5d, 0x7d, 0x1b, 0x52, 0x74, 0x7c, 0xbe, 0x5a, 0xdd, 0x27, 0xd7, 0x39, 0xf5, 0xce, - 0x7d, 0x73, 0x9f, 0x5e, 0x9f, 0x82, 0x32, 0x9f, 0x9b, 0x9f, 0xbb, 0x95, 0x3e, 0x0b, 0x05, 0x24, - 0xca, 0x45, 0xdc, 0x93, 0x3c, 0x1f, 0xb9, 0x30, 0xc4, 0x91, 0xdf, 0x87, 0x6b, 0x12, 0xb0, 0x6a, - 0xce, 0x4d, 0x5b, 0x29, 0xa8, 0x8f, 0xff, 0xe0, 0xa7, 0xb3, 0x35, 0xd3, 0xd2, 0x79, 0x33, 0x35, - 0xe2, 0x42, 0x82, 0x1d, 0xc5, 0x62, 0x1e, 0x3a, 0x60, 0x77, 0xe7, 0xbe, 0xbb, 0xc2, 0x8a, 0xbe, - 0x0f, 0xf7, 0x5f, 0x7d, 0x09, 0x6f, 0x10, 0x0a, 0x8a, 0xaa, 0x46, 0x26, 0x53, 0x66, 0xaa, 0x4a, - 0x2a, 0xcf, 0x3b, 0xe3, 0x05, 0x3b, 0xc9, 0x3d, 0x5d, 0x0a, 0xf5, 0x9f, 0x58, 0xde, 0x5e, 0x8a, - 0x68, 0x90, 0xf4, 0xd5, 0xe1, 0x83, 0xf9, 0xee, 0x3f, 0x7c, 0x29, 0x0e, 0x0c, 0x50, 0x9d, 0xbb, - 0xaa, 0x29, 0x94, 0xd5, 0x35, 0xd4, 0x99, 0x51, 0x72, 0x30, 0x2f, 0xf7, 0xc1, 0x59, 0xc6, 0x2f, - 0x47, 0x94, 0xe8, 0xc2, 0x02, 0x74, 0x40, 0xe0, 0x9a, 0x18, 0x16, 0x02, 0x51, 0x3d, 0x15, 0x2e, - 0xf8, 0x52, 0x2d, 0xbe, 0xfc, 0xae, 0x5a, 0x17, 0x53, 0x79, 0xa5, 0x32, 0x99, 0x44, 0xe3, 0x25, - 0xbd, 0x7c, 0x61, 0xe2, 0x25, 0xb6, 0x99, 0xbf, 0xa7, 0x0c, 0xd3, 0xe6, 0x65, 0x8d, 0x27, 0xf1, - 0x3a, 0xd5, 0x6e, 0x4b, 0xe2, 0x06, 0x14, 0x44, 0x30, 0x13, 0x28, 0x17, 0x64, 0x06, 0x53, 0x3b, - 0xe4, 0x81, 0xb1, 0x52, 0x7b, 0x62, 0x7f, 0x14, 0x92, 0xcb, 0x88, 0x18, 0x44, 0x34, 0x06, 0x56, - 0x39, 0x52, 0x51, 0x8a, 0x20, 0xed, 0x26, 0xb5, 0x11, 0x00, 0x00, 0xcf, 0x82, 0xb3, 0x17, 0xa9, - 0x79, 0x3a, 0xcd, 0x65, 0xe4, 0xf1, 0xfd, 0xf1, 0x05, 0x55, 0xab, 0x57, 0xae, 0x2c, 0x8b, 0x57, - 0x78, 0x97, 0x8e, 0x47, 0x78, 0xc2, 0xa5, 0x29, 0x1b, 0x6f, 0xd7, 0xcb, 0xdb, 0x57, 0x18, 0xdc, - 0x51, 0xa6, 0x86, 0x08, 0x09, 0x3d, 0xa3, 0x13, 0x1d, 0x9d, 0x25, 0x25, 0xa3, 0x86, 0x8d, 0xe1, - 0x27, 0x9b, 0x4f, 0x14, 0x37, 0x9b, 0xf0, 0xa1, 0x46, 0x7c, 0xa7, 0xcb, 0x7d, 0xb4, 0x82, 0x3d, - 0x90, 0x47, 0x9b, 0x5e, 0x42, 0x49, 0x19, 0xb3, 0x0e, 0x28, 0xdb, 0xa8, 0xf3, 0x68, 0xd8, 0x21, - 0x3d, 0xf0, 0xa1, 0x2f, 0x26, 0xa9, 0x29, 0x93, 0x26, 0x20, 0xb0, 0x6c, 0xcc, 0xb9, 0x4e, 0xbc, - 0x40, 0xa8, 0x60, 0xfe, 0x94, 0xe9, 0xa2, 0x71, 0x2e, 0x5f, 0x89, 0xf1, 0xd3, 0x1c, 0x13, 0xc5, - 0x78, 0x99, 0x8e, 0xb5, 0x84, 0x7a, 0xc1, 0x5d, 0x5b, 0xeb, 0x1a, 0x4e, 0xb1, 0xef, 0xa2, 0xf8, - 0xae, 0x17, 0x9f, 0x91, 0xa1, 0xb4, 0x75, 0xb4, 0xc6, 0xb9, 0x8b, 0x8d, 0x6b, 0x28, 0xab, 0x5f, - 0xf0, 0x91, 0x8d, 0x9a, 0xe9, 0x3f, 0xc1, 0x59, 0x4b, 0x55, 0xf6, 0x92, 0x3e, 0xab, 0xa9, 0x3b, - 0xf1, 0x30, 0xa6, 0x93, 0xbb, 0xe9, 0x17, 0x09, 0x15, 0xbb, 0x7a, 0x88, 0x38, 0x32, 0x67, 0xfc, - 0x48, 0xc1, 0x47, 0x62, 0xcb, 0x6e, 0xf9, 0xb1, 0xcf, 0x13, 0xd6, 0x0f, 0x1f, 0x37, 0xaf, 0x84, - 0x04, 0xd3, 0x27, 0xdb, 0xfc, 0xbf, 0xf8, 0x26, 0x2b, 0xdd, 0xd0, 0x9c, 0xe9, 0x2f, 0xbe, 0x14, - 0x11, 0x2d, 0x99, 0x21, 0xc0, 0xb0, 0x4a, 0x34, 0xd0, 0x82, 0x6c, 0x83, 0x52, 0xd9, 0x98, 0xb7, - 0xf8, 0x37, 0xb3, 0xf7, 0xc7, 0x58, 0xeb, 0xad, 0x55, 0xbf, 0xc2, 0x85, 0x4f, 0x24, 0x08, 0x42, - 0x4f, 0xb2, 0x0d, 0x1e, 0x31, 0x9b, 0x3d, 0x36, 0x44, 0xc3, 0xdf, 0x0a, 0x09, 0x5d, 0x0f, 0x6c, - 0x8a, 0x5e, 0x55, 0x71, 0x3a, 0x15, 0xb3, 0x3d, 0x1f, 0xe1, 0x42, 0x5f, 0x7c, 0xf9, 0x2b, 0x02, - 0x56, 0x21, 0xd1, 0xae, 0x4c, 0x49, 0x6b, 0x77, 0xf8, 0x28, 0xea, 0xaa, 0xc6, 0x6a, 0x7d, 0xc4, - 0x89, 0x17, 0x6d, 0x58, 0xf7, 0x7f, 0xb2, 0x12, 0x13, 0x4b, 0xc1, 0x4d, 0xb5, 0x48, 0x98, 0xc5, - 0x1c, 0x56, 0x5b, 0x4e, 0xfe, 0x20, 0xc3, 0x68, 0xcb, 0x9f, 0x84, 0x88, 0x4c, 0x5b, 0xd6, 0xbe, - 0x3c, 0x66, 0xed, 0x3e, 0xd3, 0xd2, 0x6b, 0xe0, 0xa0, 0xf6, 0xce, 0x4f, 0x93, 0xac, 0xd7, 0x11, - 0x1c, 0x7c, 0xd8, 0x53, 0x16, 0x51, 0xa6, 0xa5, 0x48, 0x9b, 0x65, 0x99, 0xc0, 0xcf, 0x4c, 0x34, - 0x71, 0x4a, 0x78, 0x4f, 0x45, 0x2d, 0x06, 0x6c, 0x46, 0x49, 0x86, 0x0e, 0x2f, 0x0a, 0x40, 0x75, - 0x50, 0xe1, 0x0c, 0x7e, 0x91, 0xa0, 0xb6, 0x72, 0x65, 0xaa, 0x51, 0x99, 0x3c, 0xd0, 0xa2, 0x7e, - 0x74, 0xb9, 0x5f, 0x11, 0x07, 0x31, 0x60, 0x7a, 0xad, 0x48, 0xd2, 0x46, 0x6a, 0xce, 0x48, 0xb6, - 0x9c, 0xab, 0xc6, 0x10, 0x75, 0x60, 0x3d, 0xda, 0xb6, 0x45, 0xc1, 0xad, 0x1a, 0xe4, 0xf3, 0x22, - 0x5b, 0xa6, 0x2a, 0xd2, 0xcf, 0xbc, 0xb4, 0xf0, 0xb8, 0xa1, 0x0d, 0x30, 0x8a, 0xe1, 0x44, 0xdb, - 0x4d, 0xcc, 0x75, 0x7f, 0xf8, 0xda, 0xd5, 0x0c, 0x4d, 0x57, 0x24, 0x44, 0x85, 0xc6, 0xf7, 0x26, - 0xeb, 0x96, 0xab, 0xf8, 0x4b, 0xa1, 0x2e, 0x7c, 0xd4, 0x74, 0x62, 0xcd, 0x71, 0x25, 0x9e, 0xe5, - 0xb4, 0x65, 0xcc, 0x59, 0x8b, 0x35, 0xc9, 0x75, 0x57, 0xf5, 0x83, 0xeb, 0x15, 0x77, 0x75, 0x5f, - 0x82, 0x68, 0xca, 0x63, 0xe7, 0xfc, 0xa9, 0xe2, 0x41, 0x01, 0x87, 0x2b, 0xe2, 0x12, 0xb1, 0x68, - 0x4f, 0x36, 0xb5, 0x50, 0xdc, 0xe3, 0xb0, 0xbb, 0x2d, 0x79, 0x9a, 0xae, 0xff, 0xc4, 0x74, 0x35, - 0xa5, 0x7f, 0x15, 0x66, 0x9b, 0x06, 0xa8, 0xd1, 0xc9, 0x7e, 0x2a, 0x96, 0xae, 0x91, 0x71, 0x9f, - 0xc4, 0x0d, 0x10, 0xfa, 0x4c, 0x66, 0x87, 0x25, 0x86, 0xe5, 0x85, 0xbe, 0x2a, 0xd5, 0xe4, 0x85, - 0x7f, 0xe0, 0x98, 0x6c, 0x98, 0x8f, 0x51, 0x75, 0x37, 0x7f, 0x85, 0x28, 0x6a, 0xb4, 0x26, 0xd3, - 0x15, 0x6f, 0x63, 0x6d, 0x0d, 0x34, 0x37, 0x1a, 0xa7, 0xc2, 0x84, 0x91, 0x0f, 0x58, 0xdf, 0x16, - 0xd5, 0xa6, 0xe4, 0xcf, 0x7b, 0xdb, 0xf1, 0xf0, 0x4f, 0x55, 0xdc, 0xcc, 0x31, 0xd1, 0xff, 0xe0, - 0xab, 0x24, 0x82, 0x47, 0xe1, 0xc6, 0x0c, 0x47, 0xa6, 0x5d, 0xcf, 0x7c, 0x11, 0x15, 0x3b, 0x57, - 0x7f, 0x82, 0xa8, 0x95, 0x8e, 0xdd, 0xdf, 0x9f, 0xdf, 0x9f, 0xe1, 0x43, 0xe6, 0x50, 0xaf, 0x37, - 0x52, 0xf2, 0x51, 0x5d, 0x9a, 0x86, 0xd9, 0x15, 0x31, 0xef, 0x90, 0x55, 0xd5, 0x3f, 0x08, 0x1f, - 0x46, 0xa3, 0x14, 0xd9, 0x0a, 0xaa, 0xf8, 0x85, 0xee, 0x26, 0x8e, 0xf5, 0xc6, 0x0e, 0xca, 0x65, - 0x25, 0xdc, 0x9f, 0x8f, 0x4b, 0x1f, 0x32, 0xdb, 0x47, 0xf1, 0x82, 0x50, 0x44, 0x35, 0x5c, 0x9d, - 0xb7, 0x02, 0x04, 0xdf, 0x70, 0xc1, 0x20, 0xc1, 0x3d, 0xef, 0x0c, 0x3f, 0x04, 0xa4, 0x5e, 0x14, - 0xb2, 0x92, 0x2a, 0xb6, 0x19, 0xe4, 0x85, 0x9f, 0x18, 0x25, 0x31, 0xa6, 0x4b, 0xa1, 0x97, 0x36, - 0x20, 0xc0, 0x27, 0x09, 0xbf, 0x62, 0x16, 0x21, 0x09, 0xfd, 0xd2, 0xf7, 0xca, 0x83, 0x25, 0x3c, - 0x59, 0x0a, 0xc2, 0x4f, 0x00, 0xe5, 0xa3, 0x9e, 0x97, 0xc4, 0x05, 0x0a, 0x7c, 0x7b, 0x01, 0x23, - 0xc0, 0x3b, 0x5e, 0xad, 0xca, 0x1c, 0x08, 0x84, 0xa1, 0xf5, 0x34, 0xa8, 0x91, 0xbf, 0xc1, 0x29, - 0xb4, 0x89, 0x44, 0x76, 0x78, 0xee, 0xf8, 0xc1, 0x0e, 0xee, 0xef, 0xe6, 0x5e, 0xd8, 0x89, 0xf7, - 0x75, 0x69, 0x8d, 0xf8, 0xd9, 0xf0, 0xf9, 0x5c, 0x9e, 0x82, 0xb7, 0x66, 0xf8, 0x29, 0xc9, 0xbc, - 0xc1, 0xea, 0x3c, 0xa4, 0x4a, 0x6a, 0x4b, 0x45, 0xf2, 0x74, 0x27, 0xe1, 0xf5, 0xfb, 0xee, 0x75, - 0x29, 0xcd, 0x53, 0x74, 0x4a, 0x8a, 0xe4, 0xb3, 0x66, 0xcd, 0x9f, 0xab, 0xab, 0x87, 0x25, 0xf4, - 0xc8, 0xce, 0xb7, 0x8a, 0xff, 0xc6, 0xdc, 0x4f, 0x1a, 0x9d, 0x03, 0x29, 0xb9, 0x2e, 0x49, 0x57, - 0x41, 0xe4, 0xe6, 0x86, 0x0b, 0x41, 0xf2, 0xc9, 0x22, 0x12, 0xff, 0xfd, 0x5f, 0xe0, 0xb8, 0xa5, - 0xe8, 0xe4, 0x96, 0x90, 0xf3, 0x5e, 0xf8, 0x2c, 0xd4, 0x6d, 0xa7, 0x17, 0x17, 0x2f, 0x5e, 0x6c, - 0x25, 0x1f, 0xc4, 0x05, 0x05, 0x46, 0x28, 0xdd, 0x9b, 0x1a, 0x6d, 0xa6, 0x98, 0xf9, 0x85, 0x79, - 0x3f, 0x56, 0xd5, 0x7b, 0x5d, 0xf0, 0xa0, 0xf7, 0xa0, 0x99, 0x21, 0xd6, 0xad, 0xa1, 0xb0, 0x12, - 0x26, 0x51, 0xcd, 0x36, 0x7c, 0x51, 0xaa, 0x84, 0x6b, 0x26, 0x4f, 0xe0, 0xb0, 0xac, 0x53, 0xb0, - 0xef, 0x19, 0x18, 0x54, 0xdd, 0xd0, 0x0d, 0x5c, 0xf8, 0x2e, 0x98, 0x30, 0x13, 0x90, 0xe5, 0x7b, - 0xb3, 0xa0, 0x63, 0x01, 0xb8, 0x98, 0x52, 0x4f, 0x58, 0xd6, 0x59, 0x2f, 0xb6, 0x1a, 0x18, 0x8a, - 0x03, 0x4e, 0xef, 0x03, 0xea, 0x06, 0x04, 0x83, 0xb9, 0x30, 0x7d, 0x8c, 0x7c, 0x48, 0x80, 0x4c, - 0x44, 0x39, 0x94, 0x10, 0xcb, 0x94, 0x1c, 0xf8, 0xa3, 0xef, 0x82, 0x43, 0xbd, 0xe5, 0x57, 0x13, - 0x05, 0x33, 0xb1, 0x6e, 0xee, 0x62, 0x65, 0x71, 0xc0, 0x38, 0x03, 0x7f, 0xe2, 0x44, 0x02, 0x23, - 0x1e, 0x54, 0x8b, 0xd8, 0xf8, 0x26, 0xcb, 0xfd, 0x4d, 0x47, 0xf1, 0x20, 0x8f, 0x54, 0xbd, 0xf1, - 0x25, 0x66, 0x4a, 0x13, 0xb2, 0x89, 0xdd, 0x3f, 0x1e, 0x20, 0xff, 0x93, 0xb3, 0x8e, 0x42, 0x5e, - 0xd3, 0x7f, 0x0a, 0x1d, 0xb8, 0x6f, 0x65, 0x78, 0xcc, 0xfa, 0xb5, 0x86, 0x10, 0xf0, 0xe9, 0x86, - 0x93, 0x2f, 0xb9, 0x92, 0x13, 0xfc, 0x28, 0x58, 0x83, 0xf8, 0x75, 0x9c, 0xca, 0x14, 0x36, 0x99, - 0xb8, 0x30, 0x11, 0xe1, 0xac, 0xb1, 0x9a, 0x35, 0xf3, 0x50, 0x39, 0x97, 0x63, 0xe0, 0xac, 0x83, - 0x46, 0x85, 0xa3, 0x09, 0xa6, 0x27, 0xb0, 0x3e, 0xbc, 0xe9, 0xae, 0x2f, 0x21, 0xc0, 0x1b, 0xd9, - 0xb0, 0x34, 0xab, 0xc7, 0x75, 0x38, 0x8f, 0x46, 0x4a, 0x78, 0x6e, 0x11, 0xe6, 0x8a, 0x78, 0x4f, - 0xbd, 0x99, 0x3c, 0xc3, 0x04, 0xb3, 0xf1, 0xe5, 0x1c, 0x84, 0xb4, 0xc5, 0xe6, 0x2d, 0x83, 0xc8, - 0x37, 0xd0, 0x3c, 0xb9, 0xe0, 0x8f, 0x72, 0xe5, 0xa5, 0x4b, 0x87, 0x86, 0x1b, 0x7b, 0xea, 0xc8, - 0x7a, 0xc3, 0xad, 0xd0, 0xbd, 0xcf, 0x20, 0x25, 0xe4, 0xf3, 0x1f, 0xfc, 0xe5, 0x38, 0x42, 0xc8, - 0x30, 0x42, 0x61, 0xa1, 0xc7, 0x1f, 0x93, 0xa2, 0xc5, 0x5d, 0x58, 0xfa, 0xb0, 0x5d, 0x19, 0xef, - 0xa9, 0xc1, 0x37, 0x5a, 0x88, 0xe1, 0xeb, 0xa5, 0xc5, 0x71, 0x5c, 0x32, 0xe4, 0x0b, 0x26, 0x3c, - 0x63, 0x51, 0x85, 0xf1, 0x94, 0x94, 0xbf, 0xf0, 0x4a, 0x57, 0x41, 0x14, 0xf6, 0xed, 0xf7, 0xcb, - 0xb6, 0xc1, 0x98, 0x69, 0xe2, 0x01, 0x38, 0x8e, 0x6c, 0x82, 0xfa, 0xe2, 0xd6, 0x67, 0xf1, 0x02, - 0x04, 0xb6, 0xdc, 0x6d, 0xc7, 0x54, 0xfc, 0xdb, 0xdf, 0xc1, 0x09, 0x60, 0xee, 0xef, 0xc4, 0xc1, - 0x55, 0x57, 0x51, 0x1a, 0x0b, 0x9d, 0xeb, 0x46, 0xac, 0x18, 0xec, 0x77, 0xe3, 0x2a, 0x53, 0x1d, - 0xa1, 0x48, 0xa7, 0xa4, 0x78, 0xde, 0xd1, 0xb7, 0xca, 0xc4, 0xac, 0x65, 0x61, 0xdb, 0xf1, 0x10, - 0x59, 0xc8, 0xd4, 0x19, 0x58, 0x2b, 0x10, 0x7d, 0x46, 0x44, 0x82, 0xb4, 0xab, 0x88, 0x05, 0x9c, - 0xbe, 0x78, 0xe6, 0x70, 0xcd, 0x4a, 0x20, 0x79, 0x57, 0x82, 0xac, 0x8b, 0xe6, 0xea, 0x32, 0x70, - 0xec, 0xca, 0x47, 0xea, 0xac, 0x76, 0x7f, 0x8e, 0xdc, 0xff, 0x1f, 0x4c, 0x77, 0xdd, 0x04, 0x5f, - 0xc4, 0x82, 0x4e, 0x56, 0x0f, 0x9c, 0xad, 0x70, 0x50, 0x6c, 0xb9, 0x8a, 0xc7, 0x7d, 0x8a, 0x6f, - 0x85, 0x22, 0xba, 0x24, 0x0d, 0xdd, 0x37, 0xcd, 0x8b, 0xb3, 0x1e, 0x88, 0xef, 0x8c, 0x3b, 0x4b, - 0xa2, 0x78, 0xd3, 0x84, 0x35, 0x59, 0x4c, 0x68, 0x94, 0x93, 0x61, 0xb6, 0xb6, 0xfc, 0x12, 0xf2, - 0x80, 0x4b, 0x50, 0xce, 0x02, 0x7e, 0x62, 0xd1, 0xda, 0x49, 0x17, 0x85, 0x38, 0x6c, 0x12, 0xa3, - 0xa2, 0xad, 0x51, 0xa6, 0x64, 0xc8, 0x20, 0x70, 0xe5, 0xf8, 0x66, 0x9f, 0x0d, 0xf8, 0x18, 0xdb, - 0x96, 0x31, 0x2d, 0xc2, 0x1d, 0x79, 0xa6, 0x13, 0x69, 0xaf, 0x03, 0xc8, 0x5c, 0xbb, 0x41, 0xd3, - 0x89, 0x85, 0x35, 0x10, 0x5b, 0xb5, 0x02, 0x21, 0xea, 0x5a, 0x4e, 0x72, 0xbc, 0x03, 0xcc, 0x9f, - 0x2b, 0x55, 0x33, 0x0c, 0xd1, 0x8a, 0xfc, 0x40, 0x52, 0x5a, 0x0e, 0x0c, 0xeb, 0x6f, 0xf3, 0x23, - 0x4c, 0xb5, 0xe3, 0x1a, 0xb1, 0xd1, 0x68, 0xd3, 0x8c, 0x61, 0xac, 0x06, 0x6d, 0x7f, 0x82, 0x6d, - 0xdc, 0x67, 0xc3, 0x4d, 0xea, 0x08, 0x4c, 0x48, 0xc8, 0x33, 0xc4, 0x02, 0xb2, 0xb3, 0x39, 0x4a, - 0x44, 0xf9, 0x68, 0xfa, 0x8b, 0x95, 0x3e, 0x2e, 0x5c, 0x6a, 0x03, 0x74, 0xa5, 0xa7, 0xc2, 0x24, - 0x63, 0x65, 0xbe, 0xfb, 0x6a, 0xaa, 0xbe, 0x0c, 0x06, 0x4f, 0x1b, 0x18, 0xde, 0x5f, 0x83, 0x19, - 0x14, 0x51, 0xff, 0x86, 0xc4, 0xa7, 0x2c, 0x58, 0x6a, 0x48, 0xa2, 0x39, 0x8b, 0x61, 0xfe, 0xe9, - 0x25, 0x69, 0xf4, 0x47, 0xfa, 0x2b, 0xfd, 0x5e, 0xfa, 0xc5, 0xf5, 0x7a, 0xe0, 0x8e, 0x87, 0xbb, - 0xc9, 0xc9, 0x4b, 0x69, 0xf5, 0x79, 0x78, 0x24, 0x9e, 0x29, 0x99, 0xab, 0x82, 0x47, 0x7c, 0x3a, - 0x46, 0x93, 0x40, 0x26, 0x6f, 0xeb, 0x59, 0xb1, 0xed, 0xa9, 0x8a, 0x57, 0x9d, 0xc3, 0x85, 0x07, - 0xf8, 0x2d, 0x29, 0xa0, 0x56, 0x7e, 0x38, 0x98, 0xd7, 0xc4, 0x1d, 0x82, 0x4e, 0x44, 0xee, 0x99, - 0x44, 0x08, 0x9a, 0x45, 0xe6, 0xf5, 0x01, 0x01, 0x79, 0x08, 0xe8, 0x3a, 0xe2, 0x63, 0x21, 0xea, - 0x7e, 0xfc, 0x88, 0xb6, 0xcd, 0xb9, 0xf6, 0xdb, 0x1b, 0x42, 0x5c, 0x6e, 0x2d, 0x40, 0x90, 0x52, - 0x9c, 0x48, 0x29, 0xad, 0x57, 0x6e, 0xb4, 0xc1, 0x92, 0x50, 0xd8, 0xd3, 0x37, 0x40, 0xdf, 0xe3, - 0x04, 0x3f, 0xb6, 0x4c, 0xe1, 0xec, 0x26, 0xed, 0x86, 0xfc, 0xb4, 0x8b, 0xe0, 0xd7, 0xf8, 0x25, - 0x12, 0xc7, 0x6c, 0xd3, 0x7d, 0xdb, 0xe6, 0x2c, 0x8a, 0x48, 0xa5, 0x56, 0x31, 0x10, 0x57, 0x6e, - 0x75, 0x29, 0xca, 0x6a, 0x29, 0x18, 0xfd, 0x2e, 0xcf, 0x99, 0xfc, 0x40, 0x27, 0x22, 0xca, 0xd1, - 0xca, 0xa5, 0xc6, 0xa9, 0xe2, 0x41, 0x49, 0x43, 0xd2, 0x46, 0xa2, 0x91, 0xc6, 0xd6, 0x3a, 0x04, - 0xab, 0x0e, 0xd5, 0xb1, 0xa8, 0x7e, 0x24, 0x29, 0xbd, 0x1e, 0xcc, 0xf4, 0x79, 0xe0, 0x99, 0xd8, - 0xff, 0xf8, 0x88, 0x52, 0x65, 0x0a, 0xe6, 0x1a, 0xa3, 0x23, 0x25, 0x12, 0x7b, 0x02, 0x2a, 0x2c, - 0xc4, 0xd6, 0x49, 0xbc, 0xa8, 0xed, 0xe2, 0x41, 0x19, 0x8c, 0xa3, 0xeb, 0xe0, 0xa2, 0xab, 0xf3, - 0x4b, 0xbe, 0x5c, 0x5f, 0xf1, 0x99, 0x58, 0x2c, 0x1f, 0x2a, 0x78, 0x1b, 0xb9, 0x6b, 0x36, 0xda, - 0x74, 0x34, 0x3f, 0x08, 0x95, 0x38, 0x64, 0x49, 0x50, 0xd8, 0xf0, 0xc0, 0x9c, 0x6d, 0x41, 0x76, - 0x6f, 0x9d, 0x49, 0x56, 0x58, 0xc3, 0xb7, 0xc4, 0x02, 0xc8, 0xc5, 0x1e, 0x8b, 0x18, 0xd2, 0x80, - 0x59, 0x04, 0x1e, 0x6b, 0x07, 0xee, 0xad, 0x2b, 0x86, 0x0c, 0xbb, 0xbf, 0x88, 0x0a, 0x6e, 0xd2, - 0x95, 0x24, 0x7c, 0x1b, 0x2b, 0x4c, 0x7b, 0x89, 0x8c, 0x31, 0x23, 0x0c, 0x81, 0xa7, 0x6a, 0x7f, - 0x6e, 0x8c, 0x57, 0x85, 0x2c, 0xe7, 0x61, 0xff, 0x45, 0x6e, 0x18, 0xd4, 0x8c, 0x97, 0xb9, 0xa0, - 0x76, 0x07, 0xc4, 0x05, 0x50, 0x84, 0x2a, 0x2a, 0xf0, 0xa7, 0xd1, 0xb4, 0xcb, 0xba, 0x44, 0x43, - 0xf0, 0x12, 0xc3, 0xa7, 0x31, 0x99, 0x0e, 0xac, 0xa4, 0x0a, 0x1f, 0xc7, 0xc6, 0x62, 0xe8, 0x12, - 0xc6, 0x04, 0x14, 0x67, 0x4d, 0x82, 0x93, 0x39, 0x28, 0x6a, 0x7e, 0x3b, 0x1e, 0x9d, 0x8c, 0x76, - 0x99, 0xc6, 0xb0, 0x1e, 0x8e, 0xa7, 0x5e, 0x20, 0x13, 0x56, 0x38, 0x3f, 0x1a, 0xe4, 0xd6, 0xb9, - 0x77, 0xca, 0x52, 0x41, 0xa6, 0x55, 0xc3, 0xc6, 0xcf, 0xe3, 0x39, 0x52, 0xd0, 0xae, 0xbe, 0xc2, - 0x66, 0x8d, 0x7f, 0xf0, 0x60, 0x29, 0x28, 0xe1, 0x46, 0x5b, 0x3b, 0x39, 0xfa, 0x18, 0x98, 0x1a, - 0x7a, 0x16, 0x6b, 0x4a, 0x6d, 0x53, 0xeb, 0x90, 0x5d, 0x55, 0x5f, 0x25, 0x26, 0xab, 0xeb, 0x52, - 0xf7, 0x3a, 0x92, 0x29, 0xfd, 0x5f, 0xeb, 0xa9, 0xba, 0x33, 0xa5, 0xe0, 0xb4, 0x95, 0x35, 0x27, - 0x6a, 0x92, 0x62, 0x53, 0x1e, 0xf8, 0x52, 0xce, 0xe8, 0x1d, 0x83, 0xa0, 0xe2, 0xbb, 0x71, 0x79, - 0x17, 0x17, 0x7d, 0x9b, 0x78, 0x80, 0x99, 0xd7, 0x17, 0x5b, 0x64, 0x87, 0xe3, 0x04, 0xc6, 0xf2, - 0x3d, 0x1b, 0x9c, 0xd1, 0x9c, 0x88, 0x0e, 0x21, 0x61, 0xb6, 0x36, 0x9a, 0x5f, 0x29, 0x0d, 0x1f, - 0xf1, 0x5b, 0xe7, 0x20, 0xb7, 0x90, 0x83, 0xf1, 0xd4, 0x0d, 0xa8, 0x91, 0xae, 0x6c, 0x3c, 0x95, - 0x2a, 0x4e, 0x33, 0xe4, 0x25, 0x3b, 0x7e, 0x3b, 0x8f, 0x21, 0x6d, 0xae, 0xb7, 0x04, 0xa8, 0x20, - 0x2f, 0xea, 0x72, 0xf0, 0x52, 0x51, 0x94, 0xc3, 0x58, 0xd1, 0xfa, 0xb5, 0x73, 0xd2, 0xc8, 0xbf, - 0x8b, 0x99, 0x46, 0xa5, 0x52, 0xbf, 0xc6, 0x66, 0x52, 0xc7, 0x1b, 0xd9, 0xd5, 0x0d, 0x3b, 0x76, - 0xde, 0xb3, 0x33, 0x7f, 0x05, 0xd7, 0x31, 0x6d, 0x36, 0xef, 0x63, 0xe0, 0xa6, 0xee, 0x48, 0xee, - 0xe8, 0x77, 0x56, 0xd7, 0xbe, 0x0b, 0x3c, 0xbc, 0x56, 0xee, 0xe7, 0xec, 0x55, 0x5c, 0x1a, 0x55, - 0xe1, 0x0b, 0x6d, 0xd1, 0xb7, 0x73, 0xe5, 0x57, 0xf0, 0x81, 0x2e, 0xfd, 0x48, 0x41, 0x53, 0x79, - 0x77, 0xc4, 0xc6, 0x55, 0x7d, 0xb4, 0xc9, 0xd3, 0x75, 0x19, 0xd6, 0x5f, 0xe2, 0x01, 0x61, 0x46, - 0xf2, 0x76, 0x99, 0x31, 0xdb, 0x5b, 0x6c, 0x74, 0xd8, 0x5c, 0xa7, 0xe0, 0xcf, 0x98, 0xdc, 0x7a, - 0xf0, 0x42, 0x47, 0xf8, 0xc2, 0xbc, 0xde, 0x6d, 0xed, 0xe5, 0x32, 0xac, 0xba, 0x21, 0x40, 0xcf, - 0x84, 0x4d, 0xab, 0x1a, 0xae, 0x85, 0xe4, 0x3b, 0xfa, 0xd9, 0x36, 0xb6, 0x26, 0xd3, 0x1b, 0xa0, - 0x90, 0x0b, 0x89, 0x0a, 0x71, 0x8c, 0x2d, 0x84, 0x06, 0x2a, 0xcf, 0xf9, 0x2f, 0x18, 0xc9, 0x45, - 0xc2, 0xd8, 0xc5, 0x1c, 0x30, 0x32, 0x18, 0xf1, 0xb0, 0x32, 0x3b, 0x21, 0x4a, 0xb1, 0x30, 0xa6, - 0xef, 0x71, 0x4c, 0x9c, 0x8c, 0x1f, 0x18, 0x2f, 0x48, 0xfc, 0x57, 0x19, 0xdc, 0xcd, 0xf8, 0xef, - 0xc2, 0x92, 0x33, 0x78, 0x48, 0xf6, 0xc9, 0x33, 0x1f, 0xfd, 0xbc, 0xca, 0x5b, 0x1b, 0xcf, 0x2a, - 0x29, 0x1b, 0x4a, 0x76, 0x5c, 0xad, 0xec, 0x4e, 0xa7, 0x6c, 0xa3, 0x5f, 0x8c, 0x20, 0xbb, 0x4a, - 0x26, 0xc2, 0x9a, 0x99, 0x31, 0xb6, 0x18, 0xec, 0xb9, 0x0d, 0x78, 0x4a, 0xc9, 0x68, 0x1c, 0xd7, - 0x4f, 0xc2, 0x27, 0xa6, 0x8d, 0xea, 0x42, 0x5a, 0xac, 0x8a, 0x3c, 0x16, 0x5b, 0x9a, 0xed, 0x2f, - 0xcf, 0x46, 0xbe, 0xf8, 0xbc, 0xac, 0x4c, 0x85, 0x55, 0x94, 0x63, 0x1e, 0x68, 0xac, 0x56, 0x16, - 0x78, 0xe1, 0x20, 0xf9, 0x23, 0xc9, 0xb1, 0x67, 0x77, 0x10, 0x1a, 0x1c, 0x29, 0x9b, 0x88, 0xe1, - 0xd8, 0x10, 0x58, 0x9f, 0xff, 0xc6, 0xd3, 0x43, 0x76, 0x40, 0x6e, 0xf8, 0x6a, 0xd6, 0x29, 0xa3, - 0x71, 0x41, 0x8e, 0xec, 0x44, 0x61, 0x47, 0x12, 0x35, 0x49, 0x1f, 0x97, 0xa3, 0xe1, 0x5c, 0x11, - 0x52, 0x4a, 0xd3, 0x17, 0xd5, 0x95, 0xd5, 0xd3, 0x75, 0x75, 0x73, 0xdc, 0xa9, 0xba, 0x7f, 0xae, - 0x1e, 0x10, 0xe8, 0x74, 0x3e, 0x21, 0xee, 0x48, 0xe4, 0x2b, 0x6a, 0xa3, 0x83, 0x66, 0x6a, 0x43, - 0xff, 0x11, 0x2c, 0x28, 0x6b, 0xe9, 0x09, 0x3a, 0xfc, 0xda, 0xa7, 0xf1, 0x85, 0x77, 0x77, 0x8c, - 0x4b, 0xcf, 0x8f, 0x31, 0x7a, 0xd6, 0xff, 0x04, 0xdb, 0xdc, 0x57, 0x08, 0x16, 0xd3, 0x2b, 0x18, - 0x28, 0xef, 0xc4, 0x0b, 0xcb, 0x36, 0x57, 0x40, 0x14, 0x7c, 0x40, 0x2b, 0x25, 0x4b, 0x98, 0xc2, - 0x0a, 0xe6, 0xdb, 0x67, 0x23, 0x49, 0x2f, 0xc1, 0x35, 0x75, 0x45, 0xa6, 0x77, 0x1d, 0x3e, 0x0b, - 0x2a, 0xba, 0xcd, 0x46, 0x0d, 0x75, 0x25, 0xf1, 0xfb, 0x57, 0x41, 0x59, 0x6d, 0x12, 0xaa, 0xdf, - 0x45, 0xb4, 0x6e, 0x27, 0x7f, 0x05, 0x66, 0x2d, 0x89, 0x7d, 0xbf, 0x9f, 0x2e, 0xdd, 0xa3, 0xe5, - 0x73, 0x7c, 0x5d, 0x55, 0x56, 0x5f, 0x2b, 0x1e, 0x23, 0x9a, 0x88, 0x6b, 0x4f, 0xe1, 0x3d, 0x0c, - 0xac, 0x41, 0xa6, 0xe9, 0xfd, 0x94, 0xec, 0x3d, 0x83, 0xb0, 0xf6, 0x3c, 0x13, 0xca, 0xcc, 0x6d, - 0xb5, 0x55, 0x91, 0x3e, 0x5e, 0xa2, 0xfe, 0x0b, 0x0a, 0x66, 0x3a, 0xd5, 0x1b, 0x1a, 0x26, 0x1b, - 0x26, 0x8a, 0xaf, 0x8c, 0xb2, 0xb2, 0xc1, 0xe3, 0x57, 0xa2, 0xa5, 0x64, 0xad, 0xcd, 0xcc, 0xc7, - 0xc4, 0x85, 0x3c, 0x7e, 0x3b, 0x81, 0xda, 0x11, 0x68, 0xe7, 0x15, 0x12, 0x1e, 0xf4, 0x0b, 0x8e, - 0x76, 0x54, 0xf8, 0x52, 0xa3, 0x04, 0x77, 0xd0, 0xd6, 0x5e, 0xfc, 0xb0, 0xcc, 0x70, 0xd8, 0xca, - 0x1e, 0x3c, 0xc5, 0x55, 0x21, 0x7a, 0x52, 0xd2, 0x55, 0xc4, 0x09, 0x97, 0xe2, 0xe2, 0xe2, 0xe2, - 0xec, 0x02, 0xbe, 0x5b, 0x61, 0xa5, 0xfa, 0x9a, 0x62, 0x4e, 0x20, 0x15, 0xf5, 0x9c, 0xaa, 0xb2, - 0x63, 0xda, 0x21, 0x08, 0xe0, 0x74, 0xa9, 0x8c, 0x44, 0x55, 0xfc, 0x4d, 0xf6, 0x43, 0xe3, 0x95, - 0x70, 0xe5, 0xbf, 0xc1, 0x5d, 0x13, 0x43, 0x4c, 0xa7, 0xbb, 0x45, 0xc1, 0x59, 0x6c, 0xbd, 0x2a, - 0xf0, 0x91, 0xca, 0xfa, 0x47, 0x43, 0x49, 0x84, 0x32, 0x0b, 0x34, 0x28, 0x7c, 0x40, 0x2c, 0x24, - 0x90, 0x5f, 0x96, 0x48, 0x1a, 0xb9, 0xae, 0x87, 0x7c, 0x65, 0x94, 0xf6, 0x5b, 0xc5, 0xd5, 0xd0, - 0x9d, 0xa7, 0xc4, 0xc2, 0x46, 0x9c, 0x45, 0x85, 0xa7, 0x5f, 0x08, 0x09, 0x6a, 0xed, 0xf1, 0xdf, - 0x34, 0xd4, 0x07, 0xf1, 0x19, 0x08, 0x2a, 0xc2, 0x09, 0x17, 0x15, 0xa8, 0x4c, 0x7e, 0x34, 0x74, - 0x7b, 0x31, 0xbb, 0x88, 0x7c, 0xac, 0x3e, 0xf9, 0x7a, 0x52, 0xa7, 0xaa, 0x0d, 0xc8, 0xb7, 0xe2, - 0x7a, 0x3b, 0x1f, 0x56, 0x9b, 0x9e, 0xb3, 0xf4, 0xff, 0x2f, 0x04, 0x5a, 0xd7, 0xfe, 0x24, 0x28, - 0x22, 0x27, 0xe0, 0xea, 0xa2, 0x0f, 0x44, 0xa3, 0x3b, 0x3e, 0xa8, 0xcc, 0x15, 0x93, 0xb3, 0xbb, - 0xbb, 0xdb, 0xe0, 0x84, 0xaf, 0xbf, 0x57, 0x05, 0xa2, 0x49, 0xc6, 0xdd, 0x0b, 0xec, 0xdf, 0xbe, - 0x0a, 0xc6, 0x6a, 0x92, 0xd8, 0x1a, 0x02, 0x30, 0x92, 0xda, 0x29, 0x6e, 0xa4, 0x19, 0x86, 0x3b, - 0x1f, 0x18, 0x35, 0x0e, 0x66, 0x0b, 0x43, 0x26, 0x66, 0x31, 0xa9, 0x88, 0xe8, 0xd9, 0x31, 0x9f, - 0xc9, 0xef, 0xf8, 0x85, 0x7f, 0xae, 0xbe, 0x09, 0xb9, 0xa9, 0x35, 0x19, 0xa5, 0xef, 0x82, 0xca, - 0xb1, 0x29, 0x94, 0x11, 0x40, 0x9f, 0x17, 0x2f, 0xea, 0xcf, 0xbe, 0x0a, 0xae, 0xb9, 0xbd, 0x54, - 0xdd, 0x66, 0xaf, 0xf0, 0x53, 0x35, 0x3e, 0x66, 0x36, 0x77, 0x73, 0xb2, 0xea, 0x37, 0xc1, 0x31, - 0x48, 0x7a, 0x9c, 0xaa, 0x68, 0x1a, 0x95, 0x3e, 0x62, 0x65, 0x63, 0xe0, 0xb2, 0xaa, 0xe3, 0x70, - 0x13, 0x7a, 0x32, 0xf6, 0x33, 0x26, 0x08, 0xdf, 0x46, 0x54, 0xf8, 0x46, 0x86, 0xe8, 0x7d, 0xee, - 0xe7, 0xc5, 0x2f, 0xf1, 0xf5, 0x32, 0x55, 0x51, 0xed, 0xcd, 0x43, 0xe6, 0x63, 0xc1, 0x76, 0xab, - 0x0b, 0x42, 0x3c, 0x1b, 0x57, 0xa2, 0xee, 0x26, 0x32, 0x46, 0x0b, 0xc7, 0xa9, 0x5b, 0x79, 0x9f, - 0x9d, 0xec, 0x60, 0x7e, 0xc3, 0x14, 0xc2, 0x4e, 0xb4, 0xdb, 0xe2, 0x06, 0x63, 0x33, 0xf4, 0x07, - 0xc7, 0x06, 0x8a, 0xaa, 0x5d, 0x1c, 0xd4, 0xe2, 0x4b, 0x63, 0x49, 0xac, 0x41, 0xf1, 0x03, 0x8b, - 0x8c, 0x90, 0xb4, 0xde, 0xf8, 0xdd, 0x58, 0x07, 0xe0, 0xb6, 0x46, 0x3b, 0x73, 0x42, 0xde, 0x27, - 0xe0, 0x9a, 0x5e, 0xe3, 0x7e, 0x2d, 0xb0, 0x8a, 0x92, 0x31, 0xf5, 0xd2, 0xaf, 0x1f, 0x36, 0xc5, - 0x66, 0x25, 0x08, 0x2b, 0xe5, 0x0e, 0xf0, 0xf5, 0x25, 0x3c, 0x7d, 0xeb, 0xbf, 0x18, 0x3c, 0x66, - 0xa9, 0xd1, 0xcd, 0x45, 0xfc, 0x16, 0x88, 0x7e, 0xfb, 0x6d, 0x1d, 0x3e, 0x11, 0xdd, 0xc4, 0xbe, - 0xf7, 0x2f, 0xae, 0xcf, 0xfc, 0x61, 0x0f, 0xe6, 0x6b, 0xaa, 0xac, 0xae, 0xab, 0x89, 0x10, 0x63, - 0xd9, 0xa4, 0x5a, 0x78, 0xed, 0xde, 0xe9, 0x0a, 0xd1, 0x1e, 0x8c, 0xed, 0xfc, 0x51, 0x19, 0x5e, - 0x76, 0x05, 0x6e, 0x82, 0xf0, 0xc5, 0x25, 0x1d, 0xbb, 0x35, 0x6e, 0x75, 0x85, 0xa1, 0x9d, 0x8f, - 0x2f, 0x39, 0x57, 0xdb, 0x6d, 0x34, 0xfc, 0xf5, 0x75, 0x2f, 0x67, 0xf5, 0xd7, 0xbe, 0xed, 0xa7, - 0x4d, 0x75, 0xd7, 0xcb, 0xa4, 0x5f, 0x97, 0x84, 0xec, 0x6c, 0x6c, 0x6c, 0x73, 0xb2, 0x86, 0xf6, - 0x57, 0x5e, 0xf8, 0x50, 0x56, 0x56, 0x37, 0x44, 0xdd, 0xda, 0x3a, 0x82, 0xa4, 0x84, 0xf4, 0x95, - 0xb7, 0xc3, 0xe5, 0x1a, 0xef, 0xb1, 0xff, 0x2d, 0x23, 0x38, 0x68, 0xae, 0xc3, 0xfb, 0xb2, 0x3b, - 0xa1, 0xf5, 0x2b, 0xca, 0xff, 0xb9, 0x2a, 0x48, 0x23, 0xfc, 0x10, 0x95, 0x6b, 0x67, 0xc1, 0x3f, - 0x69, 0x56, 0xa4, 0x23, 0x1b, 0xe3, 0x85, 0x52, 0x68, 0xa6, 0x36, 0x89, 0x59, 0x8d, 0x5f, 0x6c, - 0xa4, 0x0b, 0xc6, 0x0f, 0x4d, 0x89, 0x81, 0x99, 0x97, 0xe1, 0xf0, 0xb6, 0x4a, 0xe4, 0x78, 0x2d, - 0xa9, 0xec, 0xe5, 0x23, 0x41, 0x00, 0x72, 0xff, 0x05, 0xd9, 0x3e, 0xae, 0x58, 0x0a, 0xed, 0x2f, - 0xc2, 0x1e, 0x4c, 0x1c, 0x36, 0xcd, 0x74, 0x45, 0x9d, 0x82, 0xf0, 0x59, 0xaa, 0xad, 0x47, 0xa8, - 0xa9, 0x53, 0xed, 0xa4, 0x5e, 0x08, 0xbb, 0x49, 0xf7, 0xc1, 0x65, 0xc6, 0x55, 0xa6, 0xfc, 0x37, - 0x89, 0x6b, 0x96, 0x3e, 0xe2, 0x60, 0x84, 0x95, 0xcf, 0xef, 0x82, 0x8a, 0xa9, 0x4e, 0xfb, 0x4d, - 0x37, 0xc2, 0x65, 0x35, 0x0d, 0x8c, 0x0e, 0x54, 0x1d, 0xd8, 0x0e, 0x75, 0x0d, 0xa7, 0x85, 0x26, - 0x10, 0x1e, 0xdb, 0x07, 0x1d, 0x65, 0x08, 0x7a, 0x8f, 0x66, 0x95, 0x1e, 0xda, 0xfb, 0xe0, 0xaa, - 0xde, 0x4f, 0x23, 0x34, 0x53, 0xb2, 0xf4, 0x6f, 0xf0, 0x54, 0x5e, 0x56, 0x1e, 0x0e, 0x93, 0x1c, - 0x43, 0x14, 0xeb, 0x7f, 0x8c, 0x9d, 0x0a, 0xec, 0x09, 0xec, 0x6a, 0x0d, 0xb4, 0x8c, 0xdf, 0x60, - 0xb9, 0x92, 0x8c, 0x1c, 0xf8, 0x21, 0xec, 0x65, 0x67, 0x2f, 0x8c, 0x8f, 0xd7, 0x6e, 0x6d, 0x91, - 0x76, 0xb2, 0x74, 0x33, 0x07, 0xb9, 0x47, 0x1d, 0xef, 0xc4, 0x02, 0xd9, 0x57, 0x23, 0x0c, 0x6d, - 0x72, 0x1b, 0xb4, 0x53, 0x83, 0x83, 0x78, 0x90, 0x9d, 0xaa, 0x38, 0xaf, 0xf0, 0xd3, 0xa1, 0xa7, - 0xe3, 0xeb, 0x5e, 0xee, 0xca, 0xec, 0x5e, 0x2c, 0x8d, 0x34, 0x92, 0x4b, 0x5a, 0xe1, 0x4b, 0x4c, - 0x9d, 0xc9, 0x2f, 0xbb, 0xd4, 0x34, 0xd7, 0x97, 0x92, 0x6f, 0xf1, 0x37, 0x15, 0x8a, 0xc5, 0x77, - 0x7a, 0xe8, 0x43, 0xfc, 0x22, 0x58, 0xdc, 0xe6, 0x12, 0x63, 0xc8, 0x66, 0x7c, 0x54, 0x71, 0xc5, - 0xaf, 0xc2, 0x87, 0x98, 0xdf, 0x4b, 0xe2, 0x78, 0x5f, 0xa9, 0xff, 0x9b, 0xef, 0xf0, 0x5a, 0x46, - 0x93, 0x36, 0x6c, 0x48, 0x1c, 0xf6, 0xf5, 0xc3, 0xe6, 0x92, 0x41, 0x12, 0xec, 0x5f, 0xf5, 0x22, - 0x43, 0x08, 0x09, 0xf1, 0x01, 0x53, 0x2b, 0xa6, 0xcc, 0xca, 0xfd, 0x74, 0x5c, 0xaf, 0x82, 0x7a, - 0x54, 0x92, 0xb6, 0xde, 0xbe, 0x09, 0x36, 0xd0, 0x9b, 0x8a, 0x5e, 0x89, 0xaa, 0xe2, 0x8f, 0x52, - 0xe4, 0x44, 0xfa, 0xb9, 0xba, 0xe2, 0x7c, 0x60, 0xa8, 0x69, 0x55, 0xb9, 0xac, 0x19, 0x78, 0x2d, - 0xa0, 0x01, 0x08, 0x61, 0x72, 0x23, 0x68, 0xa7, 0xe3, 0xca, 0xa5, 0xe9, 0xe8, 0x35, 0x55, 0xc4, - 0xec, 0xd7, 0xea, 0xff, 0x21, 0xc5, 0x6e, 0x2b, 0x7f, 0x14, 0x21, 0x02, 0x5e, 0x43, 0x39, 0x96, - 0x18, 0xab, 0xe7, 0xf8, 0x9a, 0xf2, 0x24, 0x6d, 0x39, 0xc3, 0xaa, 0x7e, 0x13, 0x3d, 0xdd, 0xed, - 0x2f, 0xc1, 0x51, 0x55, 0x50, 0xc8, 0xc1, 0x50, 0x2b, 0x36, 0x39, 0x04, 0x9e, 0x34, 0x91, 0x77, - 0xf8, 0x50, 0xac, 0xfc, 0x5e, 0x91, 0x0c, 0x5a, 0x01, 0x32, 0x82, 0xf3, 0x28, 0x73, 0x13, 0x97, - 0xd3, 0xfc, 0x20, 0x4a, 0x7e, 0xba, 0xba, 0x1b, 0x1a, 0x1b, 0x1f, 0x8b, 0x28, 0x97, 0x1b, 0x76, - 0x69, 0xa0, 0xd0, 0x69, 0xf8, 0x47, 0xa6, 0x9d, 0x33, 0x47, 0x57, 0x75, 0xf1, 0x94, 0x9a, 0xb5, - 0x3e, 0xa7, 0x1a, 0x1a, 0xe4, 0xeb, 0xd0, 0x88, 0xcf, 0xc4, 0x04, 0x4c, 0x9b, 0x69, 0xe0, 0xc8, - 0xca, 0x1c, 0x7c, 0xcc, 0x9d, 0x4f, 0x8e, 0x39, 0x32, 0x5c, 0xb2, 0x90, 0xf0, 0x7a, 0x65, 0x06, - 0x75, 0x29, 0x68, 0xfc, 0x22, 0x48, 0xa8, 0xc7, 0x07, 0x3c, 0x4b, 0xd8, 0xc2, 0xad, 0x1f, 0xc7, - 0x1d, 0xe4, 0x64, 0xf5, 0x03, 0x19, 0xf0, 0x47, 0x43, 0x2b, 0x2a, 0x13, 0x0d, 0x63, 0xe7, 0xc2, - 0x9d, 0xb2, 0xe1, 0x7b, 0x58, 0x6d, 0x29, 0xdb, 0x5d, 0xcd, 0x86, 0xc3, 0xa5, 0x71, 0x36, 0x21, - 0xd4, 0xc7, 0x99, 0x89, 0x98, 0xf2, 0x1c, 0x47, 0x4e, 0xb8, 0xb6, 0xf5, 0xf1, 0x30, 0x81, 0xb4, - 0xe6, 0x65, 0x75, 0x57, 0xba, 0x1f, 0x10, 0x24, 0xb9, 0x7f, 0x3a, 0x8f, 0x10, 0xfa, 0x6d, 0xf8, - 0x44, 0xc4, 0x48, 0x48, 0x18, 0xc7, 0xdd, 0xf6, 0xd3, 0xf0, 0x58, 0x62, 0xd0, 0xb8, 0xe5, 0x8d, - 0xdc, 0xdb, 0xc7, 0xa5, 0x86, 0x58, 0xd7, 0xf7, 0xc5, 0xf7, 0x7b, 0x8a, 0xcb, 0x96, 0xf1, 0x26, - 0xe9, 0x97, 0xf8, 0xc2, 0xb6, 0x5e, 0x8a, 0x96, 0x58, 0x51, 0x24, 0xfc, 0xb9, 0x9f, 0xbf, 0x8c, - 0x2d, 0x22, 0xc2, 0x33, 0x8e, 0x57, 0xb4, 0xa3, 0x6e, 0x17, 0x10, 0x6a, 0x7c, 0x3c, 0x25, 0x60, - 0x76, 0x93, 0x63, 0x3f, 0x8d, 0xcc, 0xf8, 0x42, 0x6c, 0x4e, 0x24, 0x68, 0x1a, 0xda, 0x2c, 0xd6, - 0xa0, 0xc2, 0x3e, 0x20, 0x13, 0x99, 0xb7, 0xe5, 0xea, 0xa3, 0x2b, 0x2f, 0x82, 0x69, 0x33, 0xe6, - 0xd5, 0x66, 0xd8, 0x1e, 0x15, 0xc2, 0xe2, 0xdb, 0x22, 0x99, 0xd4, 0x5d, 0xdc, 0x75, 0x5d, 0xdd, - 0xff, 0xd1, 0xa5, 0x7c, 0x11, 0xc8, 0xca, 0xf5, 0x80, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x13, - 0x09, 0xb0, 0x3a, 0x8b, 0xd0, 0x94, 0x8b, 0xd5, 0xd0, 0xaf, 0x42, 0x5e, 0x23, 0x96, 0x28, 0x31, - 0x41, 0x8a, 0x0c, 0x50, 0x61, 0x7e, 0x09, 0x06, 0x4f, 0x4f, 0x29, 0xfa, 0x16, 0x64, 0x8b, 0xea, - 0x95, 0x3e, 0x28, 0x62, 0x62, 0x07, 0xc4, 0x03, 0xc5, 0x65, 0xb1, 0x58, 0xaf, 0xc6, 0x88, 0x02, - 0xa8, 0xf7, 0xc0, 0x77, 0x89, 0x47, 0xc0, 0xb0, 0x84, 0x2a, 0x1c, 0xa8, 0x06, 0x71, 0x0a, 0x54, - 0xbe, 0x2a, 0x03, 0xf0, 0x76, 0x07, 0xf9, 0x62, 0xcf, 0x0f, 0x2c, 0xb3, 0x81, 0xe5, 0x29, 0x01, - 0x28, 0xa6, 0x38, 0x8a, 0x88, 0xd1, 0x8d, 0x62, 0xb5, 0xfc, 0xa3, 0xc0, 0x95, 0xa9, 0x12, 0x66, - 0xae, 0x8b, 0x54, 0xda, 0x59, 0xee, 0x87, 0x7b, 0xba, 0x1e, 0x7e, 0xa9, 0xda, 0xea, 0xe0, 0xfd, - 0x1c, 0x94, 0xfc, 0x3c, 0x62, 0x10, 0x57, 0x23, 0x0d, 0x08, 0x02, 0x86, 0xb9, 0x02, 0x07, 0x41, - 0xa4, 0x62, 0xa3, 0x02, 0x84, 0xb9, 0x78, 0x58, 0x50, 0x31, 0x86, 0xef, 0x4c, 0xa3, 0xd7, 0x25, - 0xfc, 0x20, 0x14, 0x08, 0x49, 0x7b, 0x74, 0xb3, 0x70, 0x00, 0x0b, 0xbc, 0x6a, 0xd4, 0xab, 0xd2, - 0x52, 0xaa, 0xa0, 0xc9, 0xed, 0xde, 0x0d, 0xfc, 0x40, 0x9b, 0x82, 0x48, 0xc9, 0x7c, 0xcf, 0x04, - 0x5e, 0x23, 0xd9, 0xa1, 0x5e, 0x82, 0xe5, 0x4a, 0xea, 0x08, 0x6f, 0xa8, 0x8a, 0x4f, 0xa8, 0x4f, - 0x6f, 0xaa, 0x01, 0x3e, 0x89, 0x95, 0x70, 0x43, 0x49, 0xb7, 0x69, 0x1d, 0xfa, 0xf1, 0xd9, 0x39, - 0x74, 0xe9, 0xf8, 0x24, 0xe4, 0x5e, 0x54, 0xae, 0x23, 0x49, 0x00, 0xd3, 0x54, 0x7f, 0x82, 0x11, - 0x4f, 0x63, 0x29, 0x05, 0x88, 0xae, 0x08, 0x02, 0x7c, 0x77, 0xdc, 0x77, 0xd5, 0xb4, 0x36, 0xa4, - 0x61, 0x4c, 0x08, 0xba, 0x2b, 0x8a, 0xff, 0xe1, 0xf3, 0x65, 0xfd, 0xbd, 0xcf, 0x83, 0xdd, 0x34, - 0x2e, 0x32, 0xbd, 0xb6, 0xcf, 0x9f, 0xa2, 0x99, 0x80, 0x4f, 0x83, 0x0c, 0xb8, 0x81, 0xe5, 0xce, - 0x91, 0x79, 0x34, 0x9b, 0xf8, 0x27, 0x24, 0xdf, 0x97, 0x6c, 0x44, 0x23, 0x45, 0x78, 0x50, 0x28, - 0xb4, 0xb1, 0xc3, 0xb5, 0xac, 0x31, 0x1f, 0x40, 0x64, 0xa5, 0x31, 0xa0, 0x90, 0xb3, 0x17, 0x19, - 0xe7, 0x01, 0xa8, 0xb9, 0xb3, 0x01, 0xe9, 0xf4, 0x2c, 0x10, 0x2e, 0x47, 0x78, 0xe2, 0x06, 0xd0, - 0xa7, 0x83, 0x54, 0x1c, 0x2b, 0x78, 0xf1, 0x10, 0x15, 0xc2, 0x73, 0x56, 0x3f, 0xa0, 0x3e, 0xd3, - 0x0a, 0xe0, 0xf2, 0x0a, 0x1e, 0xf0, 0xd9, 0xb7, 0xd3, 0x63, 0x48, 0x24, 0x85, 0x59, 0x09, 0x61, - 0x75, 0xf0, 0x44, 0x15, 0x96, 0xb5, 0x3a, 0x04, 0x3f, 0x11, 0x26, 0x25, 0xd2, 0x4b, 0xf5, 0x2a, - 0x3a, 0x7d, 0x5f, 0xe1, 0x41, 0x17, 0xae, 0xa7, 0x0c, 0xb7, 0x2e, 0x1a, 0x01, 0xe4, 0x52, 0xad, - 0x78, 0x35, 0xb0, 0xf6, 0x1f, 0x1a, 0x2a, 0xcd, 0x82, 0x2c, 0xa8, 0x18, 0xdc, 0x71, 0xd2, 0x08, - 0x4e, 0xba, 0xfe, 0xe7, 0x53, 0xce, 0x20, 0x9f, 0x20, 0x93, 0xcf, 0x07, 0x71, 0xc4, 0x11, 0x95, - 0x99, 0xb5, 0x74, 0xe7, 0xdf, 0x8d, 0x9c, 0x83, 0x27, 0xc8, 0x5e, 0x41, 0x08, 0xe1, 0xc5, 0x70, - 0xc4, 0x5a, 0x55, 0xb3, 0x19, 0x8d, 0xb6, 0x8d, 0x28, 0xa4, 0x28, 0x4d, 0x3f, 0xc5, 0x58, 0x97, - 0x52, 0xfc, 0x6e, 0x93, 0x09, 0xcc, 0x50, 0x40, 0x85, 0xaa, 0xe2, 0x05, 0xe2, 0xa1, 0x8d, 0x4d, - 0x60, 0xc7, 0x5f, 0x0e, 0x20, 0xb8, 0x83, 0x80, 0x89, 0xd2, 0x18, 0x05, 0x41, 0x65, 0xfb, 0x43, - 0xbe, 0xb6, 0x30, 0xbd, 0x3f, 0xd4, 0xf0, 0xcf, 0xa3, 0xde, 0x08, 0x48, 0x3b, 0x9e, 0xcc, 0x57, - 0xf8, 0x58, 0x2b, 0x83, 0x5d, 0x30, 0xbe, 0xc2, 0xa4, 0xc6, 0xb4, 0xde, 0x82, 0x38, 0xc1, 0x4d, - 0x93, 0x9e, 0x56, 0x7d, 0x79, 0xef, 0xc3, 0x91, 0xff, 0x2f, 0xf7, 0x91, 0x24, 0xd2, 0x6f, 0xff, - 0x19, 0x19, 0x68, 0x52, 0xd1, 0xea, 0x5a, 0x14, 0xb4, 0x7a, 0x96, 0x85, 0x2d, 0x1e, 0xa5, 0xa1, - 0x4b, 0x47, 0xbe, 0xa7, 0x48, 0x8e, 0xc9, 0xa4, 0x97, 0x88, 0xb4, 0xd6, 0xd6, 0xdf, 0x97, 0x29, - 0x04, 0xa4, 0x1f, 0xc1, 0x25, 0xab, 0x56, 0x46, 0xe2, 0x02, 0x7d, 0x24, 0xb4, 0x92, 0x3f, 0x14, - 0x42, 0x79, 0x3d, 0x35, 0xfc, 0x10, 0x7e, 0x6e, 0xc7, 0x33, 0xb2, 0xe0, 0x75, 0x70, 0xfc, 0xff, - 0xbc, 0x95, 0xf0, 0x5f, 0x77, 0x2e, 0x6e, 0xf8, 0xf3, 0x0f, 0x2d, 0x78, 0xd3, 0xf0, 0x4a, 0x5d, - 0x24, 0xb4, 0x92, 0x73, 0xe7, 0xd5, 0x34, 0xdb, 0x6f, 0xfd, 0x45, 0x2d, 0xf1, 0xa1, 0x64, 0xd0, - 0xae, 0x47, 0x3d, 0x18, 0xc2, 0x20, 0x4b, 0xbf, 0x2f, 0x8d, 0xfb, 0xd8, 0x9e, 0x2b, 0xc8, 0x39, - 0xf1, 0x44, 0xfd, 0x5f, 0xf8, 0x90, 0xa6, 0x89, 0xc3, 0xe8, 0x97, 0x82, 0x21, 0x4b, 0x82, 0x20, - 0xbe, 0xe3, 0xf2, 0x93, 0xc6, 0x57, 0x80, 0x0d, 0x01, 0xd0, 0x3c, 0xa1, 0x01, 0x5a, 0x90, 0x40, - 0x68, 0x1e, 0x1f, 0x04, 0x21, 0x5c, 0x98, 0x90, 0xb7, 0x15, 0xc8, 0x4c, 0xd6, 0x3b, 0xe5, 0xc1, - 0x01, 0x9f, 0x57, 0xb4, 0x83, 0x39, 0x1c, 0xd3, 0xd2, 0x35, 0x6b, 0x0e, 0xe9, 0x04, 0xa6, 0xd3, - 0x7f, 0x82, 0xc1, 0x1b, 0x96, 0x8e, 0xc1, 0xaa, 0x88, 0xd7, 0x51, 0xcb, 0x18, 0x87, 0x85, 0x08, - 0xce, 0x2d, 0x66, 0x92, 0x9b, 0x15, 0xa6, 0x63, 0x39, 0x08, 0x32, 0xea, 0x67, 0xb8, 0x98, 0x82, - 0x93, 0xb2, 0x12, 0x23, 0x21, 0x3a, 0x64, 0x4a, 0xca, 0xbe, 0xce, 0x30, 0xf8, 0xa2, 0x3d, 0xc2, - 0x8b, 0x24, 0x33, 0x55, 0xd0, 0x7f, 0xbe, 0x78, 0xfb, 0xdd, 0x4d, 0x07, 0xac, 0x57, 0xa6, 0xff, - 0x77, 0xf0, 0x42, 0x17, 0x6e, 0xdc, 0x77, 0xfd, 0x48, 0xa3, 0xe3, 0x3b, 0x4d, 0x6d, 0x35, 0xb4, - 0xd6, 0xd3, 0x5e, 0x26, 0xd3, 0x5b, 0x4d, 0x66, 0xec, 0x87, 0xc3, 0xe1, 0xb1, 0xd9, 0xeb, 0xcc, - 0x8d, 0xc1, 0x2c, 0xd8, 0x6c, 0xdd, 0x86, 0xcf, 0xa2, 0x3a, 0x33, 0x91, 0xf1, 0x22, 0x6b, 0xa3, - 0xa4, 0x5e, 0x17, 0x1d, 0x0d, 0x18, 0xe1, 0xe4, 0x66, 0x88, 0xf4, 0x9e, 0x62, 0xa2, 0xd3, 0x4b, - 0xfd, 0x48, 0xfe, 0x20, 0x13, 0x08, 0xb9, 0xfe, 0xda, 0xef, 0xe2, 0x01, 0x30, 0xdb, 0x9e, 0x5b, - 0x73, 0xca, 0xff, 0x42, 0x48, 0x95, 0xc1, 0x51, 0xa9, 0x1b, 0x3e, 0x6d, 0x2a, 0x08, 0x0e, 0x16, - 0x13, 0x1d, 0xf0, 0x56, 0x10, 0xbb, 0x9f, 0x4a, 0xcc, 0xd6, 0xa6, 0xcc, 0xb0, 0x72, 0xf8, 0x8c, - 0xaa, 0xa8, 0xc2, 0xff, 0xd8, 0xf1, 0x1c, 0xff, 0x08, 0x8e, 0xe5, 0xfc, 0x1f, 0xe0, 0x97, 0x0d, - 0x16, 0xd5, 0x12, 0x37, 0x3f, 0xdc, 0x38, 0x8d, 0x18, 0x8c, 0x6b, 0x9c, 0x9f, 0xe0, 0x88, 0x2f, - 0x7a, 0xcb, 0xea, 0xff, 0x5f, 0xc4, 0x74, 0x4a, 0xfa, 0xc5, 0x37, 0x5a, 0x8a, 0xea, 0xc3, 0xd5, - 0xa2, 0x7a, 0xca, 0xfa, 0xc5, 0xf5, 0x8b, 0xeb, 0x17, 0xc1, 0x38, 0x83, 0xa9, 0x29, 0xc4, 0x78, - 0xff, 0xcf, 0x8e, 0xd2, 0x13, 0x2f, 0xc4, 0x0c, 0x15, 0xd4, 0xca, 0x54, 0x99, 0xe6, 0xa7, 0x31, - 0xd2, 0x43, 0x7f, 0x12, 0x57, 0x90, 0xdd, 0xb7, 0x86, 0x81, 0x82, 0x1b, 0xe2, 0xbb, 0xac, 0xde, - 0xbe, 0xc8, 0xaa, 0xab, 0xe8, 0x7f, 0x57, 0x12, 0x39, 0xdb, 0xf7, 0x8f, 0xe3, 0xf4, 0x17, 0x72, - 0xba, 0xff, 0xe8, 0xa9, 0xd0, 0x47, 0x9c, 0xca, 0xdb, 0x69, 0xa7, 0xe6, 0xe8, 0xbd, 0x37, 0x43, - 0x3a, 0x23, 0xa1, 0x29, 0x97, 0x82, 0x2e, 0xef, 0xdf, 0x5e, 0xf1, 0x0b, 0x9f, 0xc4, 0x9c, 0xdb, - 0xfd, 0x6a, 0x8b, 0x88, 0x08, 0x8e, 0x9b, 0x6c, 0x37, 0x37, 0x63, 0x95, 0x30, 0x20, 0x09, 0x19, - 0xfc, 0x49, 0x50, 0x88, 0x42, 0x65, 0xbb, 0x58, 0x8c, 0x88, 0x88, 0xdf, 0x09, 0x12, 0xab, 0xb6, - 0xc6, 0xbc, 0x4f, 0xcc, 0x5b, 0x93, 0x49, 0x47, 0x1e, 0x38, 0xdb, 0x85, 0x93, 0x21, 0xda, 0x3f, - 0xa7, 0x64, 0xc2, 0x82, 0x88, 0xbd, 0x0d, 0xf9, 0xe2, 0x04, 0xa0, 0xbf, 0x42, 0xdd, 0x5e, 0x6e, - 0x88, 0xc0, 0x98, 0x84, 0x73, 0x52, 0x74, 0x47, 0x22, 0x78, 0x5c, 0x8d, 0x9b, 0xd5, 0x0c, 0xcc, - 0x37, 0x46, 0xa7, 0x66, 0xc6, 0xff, 0xc4, 0x8c, 0x1d, 0x58, 0xa7, 0x53, 0xbc, 0xbc, 0xbe, 0x36, - 0xc4, 0x71, 0x64, 0xbc, 0x8a, 0x45, 0xd4, 0x77, 0x10, 0x26, 0xa5, 0x04, 0x0a, 0xd8, 0x2d, 0xee, - 0xb1, 0x20, 0x9c, 0xea, 0x62, 0x2b, 0xdc, 0x56, 0x21, 0xa1, 0x6f, 0x10, 0xcd, 0x35, 0xf9, 0xb7, - 0x77, 0xf1, 0xdb, 0x8e, 0xe0, 0xe6, 0x17, 0xc1, 0xce, 0x52, 0x6f, 0x66, 0x4e, 0x82, 0xe4, 0x5c, - 0x33, 0xd5, 0xaf, 0xaa, 0x56, 0x4e, 0x4a, 0xba, 0xa9, 0xba, 0x99, 0x24, 0xe0, 0xa0, 0x50, 0xca, - 0x62, 0x75, 0x91, 0x42, 0xef, 0xf1, 0xe4, 0xad, 0x66, 0x31, 0x24, 0x0b, 0xcd, 0xcb, 0xd5, 0x7c, - 0x29, 0x26, 0xb1, 0x78, 0x4a, 0x63, 0x25, 0x2e, 0x06, 0x41, 0xca, 0xd9, 0x01, 0xec, 0x45, 0x0c, - 0x35, 0x4f, 0x54, 0x56, 0x84, 0x12, 0x09, 0xd3, 0x08, 0xcf, 0x53, 0x1f, 0x0a, 0x19, 0x4a, 0x02, - 0x82, 0x3c, 0x3d, 0x82, 0x08, 0xef, 0xd7, 0x59, 0x0f, 0x0e, 0xfe, 0xb5, 0xd4, 0x88, 0x3b, 0x57, - 0x19, 0xb6, 0x89, 0x45, 0xcb, 0xd6, 0xe5, 0xdb, 0xca, 0xc5, 0xfc, 0x20, 0x54, 0x6a, 0x2f, 0x4d, - 0xc9, 0xcb, 0x6e, 0xe7, 0x81, 0xc3, 0x4f, 0x1c, 0x66, 0x92, 0x3b, 0x0a, 0x6e, 0x0c, 0xe9, 0xd2, - 0x92, 0x37, 0x1f, 0x07, 0xff, 0xd0, 0x67, 0xbe, 0xb1, 0x2a, 0xf5, 0x89, 0x51, 0x7a, 0x15, 0x5f, - 0x5d, 0x57, 0x47, 0x74, 0x25, 0xd5, 0xc8, 0x9e, 0xac, 0xfa, 0x29, 0xd2, 0xfa, 0x9d, 0x24, 0xe0, - 0x9c, 0xda, 0x43, 0x46, 0xc2, 0x32, 0xaa, 0x89, 0x93, 0xd6, 0xb8, 0x98, 0xf1, 0x46, 0x85, 0xb7, - 0xf3, 0x88, 0x09, 0x83, 0xf0, 0x18, 0xdf, 0x6f, 0x60, 0xa9, 0x17, 0x19, 0x18, 0x5e, 0xe8, 0xcb, - 0xcb, 0x75, 0xdd, 0x75, 0xda, 0x9a, 0x1e, 0x27, 0xab, 0x64, 0x63, 0xfe, 0x09, 0xcf, 0x59, 0xbd, - 0x0e, 0x45, 0x13, 0x7c, 0x10, 0x91, 0x56, 0x56, 0xbe, 0x30, 0x55, 0xee, 0x2d, 0x78, 0x3f, 0x09, - 0x1b, 0x9c, 0xb9, 0x10, 0xf3, 0x96, 0x24, 0x83, 0x4d, 0x74, 0x17, 0x22, 0x7d, 0x7b, 0xea, 0x74, - 0x93, 0xa9, 0xd2, 0x23, 0xaf, 0x7d, 0x5e, 0x16, 0xeb, 0x14, 0xbd, 0x48, 0x97, 0x13, 0x04, 0xe3, - 0x24, 0xa3, 0x44, 0x22, 0xc1, 0xb1, 0x85, 0xc4, 0x60, 0xb1, 0x96, 0x3e, 0xe2, 0x25, 0x34, 0xaa, - 0x8b, 0xae, 0x0a, 0xab, 0x5b, 0x74, 0x18, 0xbd, 0x6c, 0x97, 0xbe, 0x09, 0xce, 0xf7, 0x10, 0xd1, - 0x03, 0x7d, 0x27, 0xe6, 0x4f, 0xac, 0x5f, 0x18, 0x5a, 0xaa, 0xc5, 0xea, 0xaa, 0x15, 0x15, 0xf6, - 0xcb, 0x9e, 0x3c, 0x54, 0xbf, 0x3d, 0x48, 0xd9, 0x7e, 0x16, 0x55, 0x6d, 0xed, 0xec, 0xf9, 0x4a, - 0xff, 0x2c, 0x7f, 0x41, 0x13, 0xa5, 0x74, 0x4a, 0x88, 0xe8, 0xfa, 0x93, 0xa2, 0x54, 0x6f, 0x56, - 0xf9, 0xba, 0xb8, 0x9e, 0x88, 0xe5, 0x75, 0xca, 0xfa, 0xbf, 0xd1, 0x49, 0x7d, 0x72, 0xf8, 0xa1, - 0x99, 0x18, 0x5d, 0xb3, 0x43, 0xc6, 0x08, 0x53, 0x30, 0x2e, 0x57, 0x50, 0x2a, 0xe3, 0x7f, 0x64, - 0xa5, 0xdb, 0xba, 0xab, 0x2d, 0x0c, 0x7b, 0xf8, 0x52, 0x5b, 0x48, 0xd7, 0x3f, 0x9f, 0x85, 0x9c, - 0x56, 0x56, 0x78, 0x5e, 0x99, 0x71, 0x04, 0x69, 0x41, 0x1d, 0xa2, 0xbb, 0x61, 0xa5, 0xfe, 0xc2, - 0x28, 0x8b, 0xee, 0x33, 0xa6, 0x59, 0xe6, 0x3c, 0x95, 0xf8, 0xca, 0xac, 0xea, 0xb9, 0xad, 0x6b, - 0xf0, 0x8e, 0xef, 0x5d, 0x32, 0x9e, 0x70, 0x5e, 0xa6, 0xdd, 0x4a, 0x3a, 0x5d, 0xf1, 0xa5, 0x49, - 0xde, 0x91, 0x32, 0x90, 0x4a, 0xc1, 0xfc, 0x45, 0xcd, 0x14, 0x15, 0x57, 0xf4, 0x76, 0x35, 0x4c, - 0x20, 0xcb, 0xff, 0x48, 0xbf, 0xc2, 0x05, 0x8d, 0xd4, 0x3c, 0x9a, 0x31, 0x89, 0x99, 0xde, 0x7f, - 0xf1, 0x92, 0x65, 0xac, 0x1d, 0xf9, 0xaa, 0x5a, 0xeb, 0x58, 0xdb, 0xfc, 0x20, 0x21, 0xbc, 0x6d, - 0x72, 0xdc, 0xbe, 0xed, 0xcf, 0xe3, 0x3a, 0x0a, 0xb9, 0x3f, 0x5a, 0xae, 0xb1, 0xbe, 0xac, 0x46, - 0xf0, 0x47, 0x7b, 0xd8, 0xfa, 0xb1, 0xf5, 0x91, 0xe4, 0xdd, 0x6a, 0xf8, 0x22, 0x14, 0xb2, 0xab, - 0xdf, 0x0a, 0x08, 0x3f, 0xce, 0xeb, 0xa1, 0x08, 0x84, 0xb6, 0x92, 0x02, 0xe3, 0x98, 0x9a, 0x7f, - 0x13, 0x7b, 0x52, 0xf6, 0x15, 0x02, 0x22, 0xdf, 0x96, 0xef, 0x8a, 0xe8, 0x7d, 0xb2, 0xec, 0x86, - 0x44, 0x69, 0xaf, 0x99, 0x67, 0xf8, 0x52, 0x6c, 0xf4, 0xb9, 0x19, 0x4d, 0xa4, 0xed, 0xf2, 0x94, - 0x8a, 0x62, 0x01, 0xdb, 0x5b, 0xfd, 0xbc, 0x0a, 0x6a, 0xb2, 0x1c, 0x68, 0x3d, 0xe4, 0xb3, 0xc4, - 0x2e, 0x88, 0xef, 0x3e, 0x3d, 0x5b, 0xe0, 0xae, 0xaa, 0xa2, 0xf5, 0x59, 0xb2, 0x34, 0xd1, 0x3d, - 0xf1, 0x95, 0x00, 0x72, 0xfa, 0xc3, 0xcb, 0x28, 0xf6, 0xf9, 0x05, 0x73, 0xcf, 0x3d, 0xf8, 0x23, - 0x54, 0xab, 0x45, 0xa1, 0x29, 0x6e, 0x51, 0x5f, 0xf5, 0xc9, 0xf9, 0xa8, 0xca, 0xbe, 0x34, 0x53, - 0xa1, 0x1f, 0x6b, 0xe2, 0x64, 0xff, 0x46, 0x9e, 0xa5, 0x9b, 0xfd, 0x8f, 0xfe, 0x98, 0x3d, 0x86, - 0xaa, 0x97, 0xfb, 0x89, 0xef, 0xfa, 0xc2, 0x65, 0x97, 0xde, 0x38, 0x48, 0x44, 0x96, 0xc2, 0x25, - 0x61, 0xd6, 0x18, 0xcd, 0xee, 0x17, 0x90, 0x6d, 0x4e, 0x4f, 0xd5, 0xc7, 0x88, 0x72, 0xf7, 0xc9, - 0x07, 0x9b, 0x15, 0xf5, 0x23, 0x15, 0x99, 0x6d, 0xdf, 0xc2, 0x1d, 0x2a, 0xa6, 0x4a, 0x2b, 0x87, - 0x6d, 0x55, 0xae, 0x4a, 0xae, 0xfa, 0x0b, 0xa7, 0x6b, 0xa9, 0x12, 0xfa, 0xb8, 0x09, 0x75, 0x7f, - 0xaa, 0x74, 0xba, 0x23, 0xfd, 0x52, 0xa7, 0xd5, 0xa2, 0xf8, 0x24, 0x21, 0xa5, 0xff, 0xf5, 0xc3, - 0xe1, 0x42, 0x2b, 0x42, 0xe4, 0xe5, 0xae, 0x64, 0x23, 0xd4, 0xf1, 0x79, 0xb3, 0x6c, 0xe1, 0x80, - 0x21, 0x1b, 0x1d, 0x74, 0x1a, 0x3c, 0xf3, 0xc8, 0xe9, 0xf0, 0xa1, 0x0d, 0x2f, 0xcc, 0xf6, 0xd1, - 0x77, 0x61, 0xca, 0x89, 0xb0, 0xa7, 0x96, 0x36, 0xf3, 0xf1, 0x1c, 0x3b, 0x87, 0x45, 0x27, 0x2f, - 0x82, 0x6c, 0xe6, 0x5e, 0x2f, 0xc1, 0xf4, 0x56, 0x7c, 0x10, 0xe6, 0x4f, 0xf7, 0xf8, 0x26, 0x2a, - 0xfc, 0xab, 0x8f, 0xb2, 0x36, 0x37, 0x88, 0x09, 0x65, 0xa7, 0x55, 0x5c, 0x4c, 0x71, 0x58, 0xd6, - 0xb6, 0x35, 0x52, 0xe3, 0x71, 0xce, 0x48, 0x3e, 0x30, 0x20, 0xff, 0xfb, 0x78, 0x69, 0x80, 0xaf, - 0x3e, 0x12, 0x15, 0x5f, 0xcb, 0x1f, 0xa5, 0x92, 0xb5, 0x16, 0xc5, 0x74, 0x19, 0x4b, 0x08, 0x74, - 0x21, 0x91, 0xfd, 0x04, 0xdc, 0xf8, 0x24, 0x08, 0x21, 0x43, 0x57, 0x09, 0x72, 0xa5, 0x5e, 0x85, - 0x77, 0xd5, 0xcf, 0x85, 0x09, 0x07, 0x68, 0xc1, 0x69, 0xb5, 0x96, 0x01, 0x3d, 0xd8, 0x64, 0x6d, - 0xb6, 0xdf, 0x64, 0x38, 0x81, 0x9d, 0x5f, 0x1e, 0x61, 0xfb, 0x67, 0x59, 0x7c, 0xaa, 0x2c, 0xf8, - 0xc2, 0x14, 0xf5, 0xbd, 0xaf, 0x43, 0xe9, 0x9c, 0x42, 0xfe, 0xe4, 0x48, 0x4e, 0xd1, 0x2f, 0x25, - 0xd0, 0xd1, 0x95, 0xf0, 0xbd, 0x84, 0x93, 0x2c, 0xad, 0x04, 0x8b, 0x8e, 0x98, 0xcf, 0xe2, 0x4a, - 0xd3, 0x85, 0x8a, 0xd5, 0xcd, 0x4f, 0x8a, 0x3d, 0xdd, 0xdd, 0xdd, 0xfc, 0x24, 0x5c, 0xf0, 0x77, - 0x62, 0x2d, 0x2f, 0xd9, 0xdc, 0xee, 0x18, 0x83, 0x16, 0x24, 0x45, 0x62, 0x08, 0x30, 0x4f, 0xb2, - 0x6c, 0x9f, 0xc2, 0x42, 0x39, 0xe8, 0xb6, 0xc9, 0xfc, 0xa5, 0x2e, 0x38, 0xac, 0x2c, 0xf8, 0x29, - 0xd0, 0xda, 0xfa, 0xe5, 0xf0, 0x47, 0xbd, 0x60, 0xae, 0x53, 0xdb, 0xb7, 0xea, 0x3a, 0x55, 0xd1, - 0x9e, 0xba, 0xbc, 0xbd, 0x5f, 0xeb, 0x95, 0x75, 0xce, 0x7d, 0x13, 0x19, 0x5c, 0x12, 0x65, 0x64, - 0x1d, 0xee, 0x9b, 0x0f, 0x05, 0x9a, 0xd9, 0xc2, 0x2a, 0xb8, 0xd2, 0x82, 0xe0, 0x99, 0xab, 0x9e, - 0x09, 0x24, 0xfe, 0x3e, 0xfe, 0xa2, 0xf9, 0x11, 0xe4, 0x8b, 0x3e, 0x14, 0x9e, 0xa2, 0x78, 0x5e, - 0x59, 0x93, 0xe1, 0x98, 0x91, 0x18, 0xe6, 0xb2, 0x6a, 0x69, 0xde, 0x26, 0x14, 0xbe, 0xcb, 0x47, - 0x37, 0xc2, 0xdc, 0x9c, 0xb6, 0xc6, 0x52, 0x08, 0x55, 0x84, 0x3b, 0x96, 0x3a, 0x6f, 0xf0, 0xa1, - 0x9f, 0x1c, 0xd0, 0x8a, 0x8e, 0xe2, 0x7d, 0xd4, 0x98, 0x85, 0x56, 0xa1, 0xff, 0x5c, 0xcd, 0xa0, - 0xa9, 0x64, 0xdf, 0x1b, 0x25, 0xd0, 0x12, 0x0e, 0x53, 0x1e, 0xd2, 0x85, 0x10, 0xca, 0xc3, 0x95, - 0x11, 0x97, 0x87, 0xa6, 0x1f, 0x4c, 0x92, 0x70, 0x64, 0x17, 0xd5, 0xdc, 0xb3, 0x13, 0x28, 0x5f, - 0xf0, 0xd7, 0x7e, 0x65, 0xab, 0x88, 0x4e, 0xe0, 0x19, 0x52, 0xcc, 0x94, 0x18, 0xf8, 0x4c, 0xe5, - 0x17, 0xfb, 0xc7, 0x5b, 0x94, 0x75, 0xf5, 0x5a, 0xf8, 0xe2, 0xc8, 0xc7, 0x85, 0xcb, 0xe2, 0x0e, - 0x65, 0xbb, 0x32, 0x5d, 0xbf, 0x85, 0x0a, 0x5f, 0x11, 0x18, 0x33, 0x90, 0x6d, 0x37, 0x5c, 0x43, - 0xd3, 0x7b, 0xbf, 0xc1, 0x4d, 0xff, 0x7f, 0x9f, 0xda, 0x36, 0x5b, 0x9f, 0xe4, 0xbe, 0x0b, 0x25, - 0xb9, 0x88, 0xf2, 0xa4, 0x4a, 0x1a, 0x5f, 0xb4, 0xf1, 0x92, 0x5f, 0x04, 0x65, 0xd9, 0x8c, 0x12, - 0xbe, 0x65, 0xe0, 0x96, 0x63, 0x2d, 0xec, 0x71, 0xca, 0x44, 0xe5, 0x71, 0x64, 0x3e, 0x72, 0x7a, - 0xbf, 0x82, 0x91, 0x83, 0xaa, 0x58, 0xee, 0x2b, 0x6c, 0xbc, 0xb7, 0x36, 0xfa, 0xf8, 0xbb, 0xbb, - 0xbe, 0x47, 0x3f, 0xa0, 0x9f, 0x42, 0x5d, 0x1b, 0xbe, 0x8b, 0x97, 0xd6, 0x2b, 0xe0, 0x84, 0x89, - 0x5a, 0x6a, 0x1f, 0xd5, 0x83, 0xe8, 0x8c, 0x4b, 0xd6, 0x29, 0x39, 0xb7, 0x7f, 0x82, 0xab, 0x4c, - 0x69, 0x31, 0xb2, 0xa9, 0x4b, 0x13, 0xd1, 0x58, 0x5a, 0x55, 0xe0, 0x90, 0x89, 0x8c, 0xf1, 0x7b, - 0x7f, 0x78, 0x91, 0xa5, 0x50, 0x21, 0x56, 0x26, 0x16, 0x21, 0x4c, 0xeb, 0x5f, 0x8d, 0xfc, 0xd0, - 0x21, 0x21, 0x78, 0xbd, 0x75, 0x3c, 0x26, 0xa4, 0x86, 0xb9, 0x34, 0xd5, 0xfc, 0x68, 0xa9, 0x31, - 0x0e, 0x9b, 0x29, 0x01, 0x05, 0x1c, 0x8a, 0xc1, 0x41, 0x11, 0xf2, 0x0d, 0xe9, 0x00, 0xe3, 0x2b, - 0x43, 0x39, 0x3c, 0x20, 0x7a, 0xd7, 0x6b, 0xb1, 0x66, 0x23, 0x31, 0xbc, 0xe8, 0x35, 0x7a, 0xa7, - 0xa2, 0x36, 0x3f, 0x66, 0xc8, 0x67, 0x2f, 0x1b, 0x44, 0x99, 0x29, 0xf3, 0x02, 0x43, 0x08, 0x49, - 0xfe, 0x76, 0xa6, 0x31, 0xee, 0x18, 0xbc, 0xfa, 0x19, 0x05, 0xb6, 0xe0, 0x90, 0x39, 0x3a, 0xb1, - 0x2f, 0x2f, 0x6d, 0xef, 0x02, 0xf9, 0x4c, 0xbf, 0xac, 0xfb, 0xe0, 0xac, 0xee, 0xa5, 0x9b, 0x10, - 0x3c, 0x44, 0xe9, 0x8e, 0xb6, 0x30, 0x80, 0xe6, 0x34, 0x64, 0x9c, 0x31, 0xdd, 0xc8, 0xd6, 0xb6, - 0x9e, 0xc9, 0x63, 0xe1, 0x2d, 0x66, 0xe3, 0xec, 0xbf, 0xe1, 0x11, 0x22, 0xbe, 0x30, 0x98, 0xf9, - 0x1d, 0xa7, 0xe3, 0x32, 0x74, 0x70, 0xe5, 0x51, 0x8d, 0x7a, 0xa3, 0x42, 0x73, 0xa9, 0xf1, 0x47, - 0x5c, 0x41, 0xf1, 0x35, 0xae, 0xa6, 0x62, 0xa7, 0x54, 0x02, 0x30, 0x70, 0x70, 0x2f, 0x9f, 0x82, - 0x6a, 0x1d, 0x37, 0x89, 0x7b, 0x03, 0x56, 0x66, 0xff, 0x25, 0x55, 0x57, 0x12, 0x21, 0x95, 0xbb, - 0xa5, 0x88, 0x9b, 0xa9, 0xb3, 0xc1, 0x68, 0x89, 0x0b, 0xb5, 0xed, 0x35, 0xaf, 0x8a, 0x11, 0xb3, - 0x22, 0xf2, 0x31, 0xf8, 0x28, 0x9e, 0x0e, 0xe7, 0xed, 0xf7, 0x7f, 0xa0, 0x9d, 0x4d, 0xcc, 0x10, - 0xe6, 0xb1, 0xfd, 0x0b, 0xd7, 0xd6, 0xbe, 0x8e, 0x9d, 0x7a, 0x2a, 0x75, 0xe8, 0x8c, 0x7d, 0x4a, - 0x0f, 0xa2, 0x37, 0xd5, 0xbe, 0xad, 0xf5, 0x72, 0xfa, 0xbf, 0xc1, 0x00, 0x82, 0x90, 0x4d, 0x4a, - 0xe0, 0xc7, 0xc1, 0x7a, 0xc9, 0x91, 0xd1, 0xec, 0x41, 0xfa, 0x26, 0x53, 0xfc, 0x11, 0x55, 0x7f, - 0xfc, 0x28, 0x45, 0x79, 0xe0, 0xb7, 0x0d, 0x61, 0x6a, 0xbf, 0x9e, 0x96, 0xee, 0x3f, 0xe7, 0xac, - 0x29, 0xe7, 0xa8, 0xef, 0x12, 0x0a, 0x8a, 0xf3, 0x2c, 0x95, 0x50, 0xaa, 0x1e, 0x59, 0xff, 0x9b, - 0xa6, 0x72, 0xf8, 0x2d, 0x3a, 0xa8, 0x98, 0x60, 0x33, 0x25, 0x3e, 0xf8, 0x50, 0xc6, 0xeb, 0x24, - 0x20, 0xd3, 0x5a, 0xce, 0x2e, 0x30, 0xb5, 0x38, 0x7f, 0x8d, 0x9d, 0x1e, 0x20, 0xdb, 0xe0, 0x7a, - 0xff, 0x4c, 0x80, 0x2c, 0x7b, 0x8a, 0x3b, 0xd4, 0xb9, 0x9a, 0xa5, 0xe6, 0xd7, 0xad, 0x30, 0x8d, - 0xaf, 0x51, 0xe3, 0x8c, 0xc9, 0x3f, 0x8b, 0x17, 0x10, 0xf1, 0x1a, 0x6f, 0xe2, 0x07, 0x56, 0x2c, - 0x9d, 0xc2, 0xf1, 0xac, 0xde, 0x41, 0x5d, 0x08, 0xd9, 0x9b, 0x7f, 0xc6, 0x5e, 0x38, 0x70, 0xec, - 0x91, 0x05, 0x53, 0xf8, 0xd4, 0xae, 0x3d, 0xc6, 0x40, 0x4c, 0x8d, 0x97, 0xb1, 0x96, 0xbc, 0x42, - 0x3f, 0xa3, 0x5b, 0x83, 0xa8, 0xfc, 0x24, 0x53, 0xf4, 0xb8, 0x32, 0xb4, 0xa1, 0x81, 0xfc, 0x65, - 0x57, 0x37, 0x76, 0x7a, 0xad, 0xb7, 0xe2, 0x62, 0x0a, 0x4b, 0xaa, 0x65, 0x6d, 0x4b, 0x53, 0x62, - 0xa6, 0x58, 0x81, 0x03, 0x39, 0x32, 0x0f, 0x34, 0x46, 0x2e, 0x84, 0x34, 0xeb, 0x5b, 0xcb, 0x0c, - 0xf3, 0x18, 0x00, 0x01, 0x83, 0x66, 0x7e, 0x21, 0x79, 0x38, 0x98, 0x99, 0xd8, 0x9f, 0x26, 0x8d, - 0x8f, 0x88, 0x13, 0xf1, 0xfa, 0x6a, 0xf8, 0xeb, 0x2d, 0x94, 0x51, 0x72, 0x67, 0x82, 0xb2, 0x2d, - 0x55, 0x56, 0x1e, 0x11, 0xe2, 0x74, 0x0f, 0x44, 0x70, 0x0b, 0xbe, 0x14, 0x96, 0x99, 0x89, 0x28, - 0xbc, 0x8b, 0xe8, 0xcf, 0x4a, 0x76, 0x8f, 0x74, 0xfd, 0xf0, 0x4f, 0x71, 0x87, 0xd3, 0xdd, 0xb7, - 0x95, 0x3e, 0x30, 0x53, 0xf1, 0xe1, 0x8d, 0xfb, 0x3c, 0x60, 0xf8, 0xed, 0x2d, 0xe3, 0xdf, 0x0d, - 0xf9, 0xe0, 0x8c, 0xa7, 0xea, 0x94, 0x06, 0xbc, 0x19, 0xdc, 0x86, 0x34, 0x5f, 0x42, 0xd8, 0xfa, - 0xeb, 0xe8, 0xda, 0x93, 0xa3, 0xe5, 0xf0, 0x47, 0x75, 0x56, 0x0e, 0xaf, 0xae, 0x73, 0xeb, 0x9c, - 0xfa, 0xe7, 0x3e, 0x08, 0xed, 0x34, 0x92, 0x43, 0xb4, 0xfd, 0x14, 0xa9, 0xf1, 0x62, 0xb9, 0x98, - 0x4f, 0x1f, 0xc1, 0x27, 0x51, 0xd6, 0xb5, 0xf0, 0x5d, 0x55, 0x5a, 0xd1, 0xdb, 0xe1, 0xe1, 0x09, - 0xbf, 0x7b, 0xbb, 0xdd, 0xd6, 0xea, 0xff, 0xc4, 0x82, 0xb1, 0x39, 0x3e, 0x93, 0xd5, 0x56, 0xdf, - 0x45, 0x4e, 0xfc, 0x40, 0xaa, 0xc8, 0xc9, 0xa9, 0x42, 0x74, 0x60, 0x7e, 0x14, 0x89, 0xc3, 0xc4, - 0xf0, 0x4d, 0x8e, 0x6b, 0x29, 0x6b, 0x5a, 0xf8, 0x50, 0xe6, 0x52, 0x24, 0xd0, 0x78, 0x86, 0x7d, - 0x41, 0x9a, 0xd3, 0xbc, 0x71, 0xe9, 0xb6, 0x16, 0x9b, 0x60, 0x25, 0x98, 0xa1, 0x77, 0xc1, 0x5e, - 0x46, 0xb2, 0x58, 0x92, 0x0c, 0x52, 0x5e, 0x0e, 0x18, 0x77, 0x59, 0xaf, 0x90, 0xeb, 0x7f, 0xac, - 0x5f, 0x29, 0x5b, 0x96, 0x1c, 0x48, 0x91, 0x24, 0xd1, 0x3c, 0x8f, 0x48, 0x78, 0x40, 0x9e, 0x47, - 0x10, 0x24, 0x10, 0x9a, 0x9d, 0x4e, 0xb5, 0xf0, 0x9e, 0xf7, 0x62, 0x21, 0xa2, 0xe7, 0xe5, 0x28, - 0xba, 0xa9, 0xbf, 0x82, 0x62, 0xd5, 0x83, 0x63, 0x12, 0x48, 0x24, 0xd3, 0x02, 0x0b, 0x08, 0xac, - 0x3d, 0xf0, 0x96, 0xc1, 0x8c, 0xbc, 0xa8, 0x04, 0x7c, 0x15, 0x60, 0x54, 0x03, 0x5c, 0x60, 0xe6, - 0x44, 0xf1, 0x82, 0x6b, 0x68, 0x20, 0x71, 0x25, 0xfe, 0x2c, 0x6b, 0xad, 0xbd, 0xf8, 0xef, 0x6f, - 0x82, 0xbe, 0x3a, 0x20, 0x59, 0x63, 0x2c, 0x5d, 0xa4, 0xce, 0x59, 0xce, 0x5a, 0x5e, 0xb1, 0x46, - 0xf3, 0x9e, 0x0c, 0xa6, 0x99, 0x3f, 0xfa, 0xea, 0xdf, 0x58, 0xd2, 0x75, 0x8f, 0x7d, 0x17, 0xc7, - 0xd6, 0x0f, 0x82, 0x2a, 0x51, 0xd1, 0xd1, 0x80, 0xf3, 0xfc, 0x14, 0x98, 0x57, 0x22, 0xeb, 0xcd, - 0x4a, 0xac, 0x67, 0xfc, 0x14, 0x96, 0xd1, 0xad, 0xd8, 0x45, 0x13, 0x06, 0x46, 0xe7, 0x62, 0x3a, - 0xff, 0x05, 0x76, 0x37, 0xe4, 0x66, 0x81, 0xb3, 0x76, 0xdc, 0x68, 0x62, 0x71, 0xdf, 0x12, 0x38, - 0x53, 0xb6, 0x5c, 0xb3, 0xff, 0x96, 0xdc, 0xb6, 0x20, 0x73, 0x88, 0x1c, 0x25, 0x55, 0x5a, 0xad, - 0x48, 0xc4, 0x9b, 0x1d, 0x98, 0x98, 0x24, 0x2b, 0x88, 0x16, 0x27, 0x20, 0xf7, 0xc1, 0x58, 0x85, - 0x93, 0x4b, 0xdc, 0x18, 0x0b, 0x7e, 0xf6, 0xed, 0xb7, 0xcd, 0x29, 0x3a, 0xf1, 0x22, 0x04, 0x95, - 0x8a, 0xe9, 0x1d, 0x8b, 0x3e, 0x5f, 0x82, 0xa1, 0x28, 0x64, 0x50, 0x3e, 0x98, 0x89, 0x8c, 0xdd, - 0x87, 0x60, 0x9b, 0xa3, 0xb3, 0xe8, 0x8f, 0xf0, 0x45, 0xb1, 0x34, 0x57, 0x77, 0xc5, 0xd5, 0x58, - 0x2a, 0x3a, 0xbf, 0x94, 0x98, 0x79, 0x07, 0x47, 0xf5, 0x7a, 0xe1, 0x21, 0x32, 0xe5, 0x2b, 0xdf, - 0xc2, 0x83, 0x15, 0xe2, 0x1c, 0x2d, 0xb7, 0xb9, 0x23, 0x51, 0xfd, 0xb0, 0x99, 0x1c, 0xc7, 0xae, - 0x26, 0x14, 0x39, 0x21, 0x51, 0xd8, 0x28, 0x86, 0x4f, 0x32, 0xcc, 0xef, 0x13, 0x62, 0x6e, 0xc0, - 0x65, 0x20, 0xd9, 0xf1, 0x87, 0xea, 0xd0, 0xde, 0x20, 0x3b, 0xb0, 0x83, 0x51, 0x5c, 0x32, 0x5f, - 0x54, 0x70, 0xc7, 0xe3, 0x23, 0x44, 0x8a, 0x0a, 0xa4, 0x20, 0xee, 0xab, 0x12, 0x90, 0x27, 0x86, - 0x84, 0x82, 0x22, 0x87, 0xaa, 0x56, 0x19, 0xd5, 0x65, 0x2b, 0x77, 0xe0, 0xaa, 0x2a, 0x6c, 0xd9, - 0x89, 0x51, 0x9c, 0xd3, 0x7a, 0x29, 0xc8, 0x4a, 0x4f, 0xf9, 0x5c, 0x24, 0x39, 0xcf, 0x47, 0xb7, - 0xd7, 0xc2, 0xd0, 0xe7, 0x09, 0x53, 0x56, 0x7b, 0x07, 0x73, 0xb0, 0x6a, 0x92, 0x73, 0x31, 0xe2, - 0x3b, 0x13, 0x6a, 0x92, 0xe5, 0xd4, 0xd9, 0xf9, 0x2d, 0x34, 0x92, 0x47, 0xea, 0xe4, 0x9d, 0x17, - 0xbe, 0x4a, 0xbb, 0xaf, 0xa8, 0xf0, 0xfa, 0xc5, 0xf2, 0x56, 0xff, 0x04, 0x3b, 0xba, 0x3e, 0xae, - 0x73, 0x2a, 0x0c, 0xb8, 0x96, 0xee, 0xdf, 0xc2, 0x12, 0x32, 0xde, 0x87, 0x64, 0x9a, 0xd5, 0x3f, - 0x04, 0xd6, 0x79, 0xa4, 0x93, 0xf7, 0x47, 0xfc, 0x21, 0x36, 0x55, 0xbe, 0xcc, 0xd7, 0x76, 0x35, - 0xc4, 0x0c, 0x11, 0x74, 0xe2, 0x6c, 0x28, 0xe3, 0x28, 0xa3, 0x35, 0x3c, 0x37, 0xa8, 0x77, 0x7a, - 0x92, 0xff, 0x04, 0x63, 0x6a, 0xcd, 0x27, 0xf8, 0x28, 0xa1, 0xb1, 0x95, 0x8c, 0xfe, 0xe6, 0xfd, - 0xf0, 0xa4, 0x22, 0x51, 0xd9, 0x08, 0x0d, 0x88, 0xf3, 0xcc, 0x6f, 0x40, 0xa2, 0xcc, 0x56, 0xa2, - 0x32, 0x8f, 0x12, 0x17, 0x34, 0xe1, 0x33, 0x09, 0x92, 0x0a, 0xfa, 0x67, 0xbc, 0x13, 0x6d, 0xa7, - 0x19, 0x95, 0xf8, 0xc2, 0x74, 0xde, 0xa5, 0xc2, 0xf4, 0x3d, 0x9a, 0xc5, 0xaa, 0x99, 0xbf, 0xc4, - 0x88, 0x09, 0xcb, 0x62, 0xb7, 0x72, 0x33, 0xbf, 0x82, 0x82, 0xe4, 0xaa, 0x36, 0xd9, 0x9f, 0x54, - 0xa7, 0xa3, 0xbf, 0x5e, 0xf8, 0x2c, 0x3b, 0x62, 0xea, 0x4f, 0xb1, 0xab, 0x6c, 0x50, 0x56, 0x67, - 0xb8, 0x98, 0xf1, 0x57, 0xbc, 0x4a, 0xa2, 0xee, 0xf7, 0xc4, 0x88, 0x08, 0x1e, 0x28, 0x65, 0xec, - 0x9d, 0xa6, 0xbd, 0x06, 0xe7, 0x23, 0x7e, 0x21, 0x7b, 0xe0, 0x8c, 0xa3, 0x68, 0x1d, 0xdf, 0x07, - 0x77, 0xf1, 0x23, 0x0c, 0xe3, 0xfe, 0x2e, 0x37, 0x3b, 0x47, 0xc5, 0xd5, 0x57, 0x6d, 0x9f, 0x89, - 0x30, 0xf9, 0xb1, 0xf0, 0xba, 0x45, 0x51, 0x76, 0xf8, 0x98, 0xc1, 0x61, 0xba, 0xd4, 0x29, 0x30, - 0x81, 0x1c, 0x17, 0x05, 0x81, 0x83, 0x5b, 0xea, 0x27, 0x87, 0x60, 0x1f, 0x39, 0x10, 0x6b, 0x8c, - 0x64, 0x00, 0x35, 0x11, 0x01, 0xe2, 0xe9, 0xf8, 0x50, 0xca, 0x23, 0xa6, 0x18, 0x9c, 0x35, 0x5c, - 0x97, 0xf2, 0x9d, 0x66, 0xa5, 0x27, 0xc1, 0x10, 0x94, 0x0e, 0xd2, 0xa4, 0xf8, 0xc2, 0x02, 0x11, - 0xa6, 0xc3, 0x67, 0x67, 0x18, 0x2c, 0xa8, 0x5e, 0x97, 0xa3, 0x13, 0xa5, 0x35, 0x83, 0x12, 0x83, - 0x56, 0x38, 0xd9, 0x4a, 0x6a, 0x5a, 0x9a, 0xf0, 0x46, 0x56, 0x04, 0x80, 0x43, 0x0d, 0xd5, 0x44, - 0xff, 0x04, 0x66, 0x6b, 0x56, 0xf8, 0x54, 0x42, 0x77, 0x2f, 0x7d, 0x37, 0xa9, 0xea, 0xa7, 0x5b, - 0x37, 0xfc, 0x37, 0x1b, 0x5e, 0x93, 0x3c, 0xed, 0x78, 0x66, 0x5f, 0xfd, 0x1d, 0x8a, 0xee, 0xdb, - 0x67, 0x67, 0xf5, 0xf8, 0x7d, 0x7e, 0x9b, 0xac, 0x5f, 0x5a, 0xf9, 0x6a, 0xa2, 0xeb, 0xeb, 0x14, - 0x9d, 0x5b, 0xe0, 0x92, 0xda, 0x6d, 0xf3, 0x7d, 0x5a, 0xb9, 0xa8, 0xd1, 0xa3, 0x47, 0xe8, 0x8e, - 0xbe, 0xa7, 0x4f, 0xab, 0xf1, 0x30, 0x52, 0x74, 0xdd, 0xcf, 0xc4, 0x3c, 0xfd, 0xf9, 0x4b, 0x66, - 0xfd, 0xf0, 0x5d, 0x17, 0x1e, 0xf2, 0x97, 0xcd, 0x96, 0x9f, 0xe1, 0x11, 0x43, 0xe6, 0x3d, 0xee, - 0xc1, 0x8f, 0x9a, 0x06, 0x4d, 0x97, 0x6f, 0xe0, 0x84, 0x7a, 0x26, 0x8a, 0x1a, 0xa3, 0x67, 0xc7, - 0x19, 0xb9, 0xaf, 0x6a, 0xb7, 0xb5, 0xe0, 0x90, 0xab, 0x72, 0x90, 0x5c, 0xf8, 0x29, 0xb1, 0xfa, - 0x02, 0x60, 0x6c, 0x64, 0x46, 0xcf, 0x72, 0x33, 0x91, 0x0e, 0xbe, 0x0a, 0xf5, 0x3d, 0x24, 0x8c, - 0x31, 0x50, 0xc1, 0x40, 0xc5, 0x03, 0x92, 0x89, 0xf5, 0x17, 0xce, 0x1f, 0x0a, 0x10, 0x9f, 0x2b, - 0x24, 0xd5, 0x74, 0x27, 0x99, 0xf3, 0xa8, 0x29, 0x1f, 0x9c, 0x4c, 0x13, 0x9c, 0xcc, 0x31, 0x8e, - 0x1c, 0x16, 0x1c, 0x16, 0x21, 0x7f, 0x37, 0x11, 0x05, 0x51, 0x71, 0x1e, 0x79, 0xe5, 0xf1, 0xbd, - 0xf6, 0x0c, 0xdb, 0xff, 0x10, 0x0b, 0x4d, 0x15, 0xa4, 0x5f, 0xaa, 0x4c, 0x71, 0x02, 0x41, 0x15, - 0xb7, 0xf9, 0x56, 0x24, 0x42, 0xf7, 0x12, 0x20, 0x79, 0x6b, 0x55, 0xae, 0xb5, 0xf2, 0x08, 0x46, - 0x88, 0x92, 0x6d, 0xf8, 0x29, 0x38, 0xe0, 0xe4, 0x6a, 0x3a, 0x1e, 0x2e, 0x9a, 0xb2, 0x1b, 0xbe, - 0xda, 0x3b, 0xb8, 0x61, 0x7f, 0x82, 0xd2, 0x96, 0x1d, 0x56, 0x09, 0x26, 0x90, 0xdd, 0x1e, 0x7c, - 0x61, 0x25, 0x48, 0x92, 0x6d, 0x7a, 0xcb, 0xcb, 0xeb, 0x49, 0xe6, 0x10, 0x5d, 0x44, 0x24, 0x86, - 0x3b, 0x21, 0xb4, 0x40, 0xe2, 0x60, 0xa6, 0x7e, 0x9b, 0xe1, 0xb1, 0xaf, 0x2c, 0x0d, 0x82, 0xab, - 0xc7, 0xb3, 0x3e, 0x12, 0xdd, 0xd8, 0x8b, 0x68, 0xd2, 0xf9, 0x6e, 0xe3, 0xd9, 0x47, 0xe5, 0xd6, - 0xab, 0x8f, 0x10, 0xe3, 0xf9, 0x3d, 0xc5, 0x4b, 0x2f, 0xfc, 0x36, 0x52, 0xcd, 0xc4, 0xbd, 0xba, - 0x4c, 0x14, 0xe9, 0x48, 0xa3, 0xf5, 0xd1, 0x4a, 0x9f, 0x3d, 0x4c, 0x69, 0x33, 0x6c, 0x7f, 0xeb, - 0x15, 0x70, 0x45, 0x9e, 0xed, 0x31, 0xf0, 0x45, 0x3b, 0x25, 0x65, 0x8e, 0x0d, 0x87, 0xa2, 0x3f, - 0xd5, 0xef, 0x9e, 0xb8, 0xab, 0x6f, 0xd7, 0x04, 0x94, 0x32, 0x14, 0x43, 0x83, 0x7f, 0xaf, 0xcb, - 0xeb, 0xe3, 0xee, 0xd5, 0x2b, 0xe8, 0xfd, 0xf1, 0x54, 0xa6, 0xc2, 0xe5, 0x58, 0xeb, 0xb2, 0x34, - 0x93, 0x0f, 0xe8, 0x8f, 0xc4, 0x88, 0x0f, 0x14, 0x89, 0x5c, 0xec, 0x4b, 0xbb, 0x8c, 0xf3, 0xde, - 0x1d, 0x69, 0x0c, 0x01, 0xf4, 0xc3, 0xff, 0x10, 0x33, 0x7d, 0xd8, 0xdc, 0x81, 0xbd, 0x37, 0x08, - 0x7c, 0xf8, 0x73, 0x1c, 0x74, 0xcf, 0x4f, 0x11, 0x11, 0x55, 0x55, 0x56, 0x34, 0x7e, 0x20, 0x65, - 0x76, 0x73, 0x51, 0xbd, 0xe8, 0x90, 0xea, 0x9f, 0xc1, 0x51, 0xa8, 0xf7, 0x77, 0x3b, 0x02, 0x5e, - 0xd4, 0x7c, 0x28, 0x9c, 0x23, 0x7c, 0x14, 0x1d, 0x06, 0xc6, 0x99, 0x12, 0x6e, 0xf1, 0x55, 0x4f, - 0xf0, 0x4f, 0xaa, 0xa4, 0xa4, 0xe4, 0xf3, 0xde, 0x20, 0x28, 0x55, 0x8b, 0x9a, 0x8f, 0x30, 0x0b, - 0x95, 0xa4, 0x20, 0xd3, 0x7c, 0x1f, 0x6d, 0xfe, 0x09, 0xa5, 0x87, 0xbe, 0x4d, 0xb7, 0x88, 0x05, - 0x5b, 0xc6, 0xea, 0xa7, 0xa2, 0x20, 0x60, 0x26, 0x51, 0xd0, 0x0d, 0xdf, 0x1b, 0x19, 0x3c, 0xa5, - 0xec, 0x3d, 0x42, 0xc4, 0xc3, 0x14, 0x6c, 0xdb, 0x16, 0x5a, 0x06, 0x91, 0xa2, 0xde, 0xaf, 0x76, - 0xbf, 0xc1, 0x44, 0x86, 0x29, 0x31, 0xc6, 0xf1, 0xfe, 0xf8, 0x28, 0xd8, 0xeb, 0xa2, 0x72, 0x27, - 0xc7, 0x62, 0x2c, 0x30, 0x70, 0x32, 0x30, 0xb3, 0x33, 0x13, 0x47, 0xf0, 0x5b, 0x77, 0xd2, 0x56, - 0x0e, 0x2b, 0xbe, 0x10, 0xb1, 0xe5, 0x61, 0xed, 0x9e, 0x56, 0x1b, 0xf1, 0x02, 0x4c, 0x62, 0xa4, - 0x64, 0x71, 0x03, 0x4f, 0x88, 0x0a, 0x45, 0x62, 0xb7, 0x73, 0x98, 0xa5, 0xb2, 0x3e, 0x5d, 0x4e, - 0xdc, 0xf7, 0xef, 0x8c, 0x3e, 0x11, 0x33, 0xf9, 0x44, 0xda, 0xeb, 0xe7, 0x0f, 0xdd, 0x41, 0xcd, - 0x75, 0x98, 0x59, 0xe1, 0x80, 0xb5, 0xeb, 0x2e, 0x38, 0x60, 0xfe, 0x14, 0xbd, 0x9f, 0x07, 0xf3, - 0x29, 0x05, 0xac, 0x2d, 0x3b, 0xa4, 0x49, 0x30, 0xef, 0x30, 0x0d, 0x14, 0x6c, 0x81, 0xcb, 0xe1, - 0x4c, 0x02, 0xa4, 0xe3, 0x70, 0x69, 0x35, 0x5d, 0x9a, 0x56, 0x02, 0xe3, 0x41, 0x02, 0x5d, 0xe7, - 0xa9, 0x3b, 0xbb, 0xb3, 0x8e, 0x5c, 0x62, 0x10, 0x89, 0xf0, 0xa1, 0x58, 0x13, 0x56, 0x4b, 0x13, - 0x3d, 0x01, 0xd4, 0x67, 0x19, 0xe3, 0x3e, 0xd1, 0x50, 0x75, 0xf8, 0x2f, 0xb3, 0xec, 0x25, 0xe5, - 0xda, 0x1f, 0x6c, 0x06, 0xef, 0x29, 0x6b, 0x9f, 0xe0, 0x90, 0x8c, 0xf5, 0xff, 0x88, 0x05, 0x9c, - 0xd8, 0xa2, 0x69, 0x33, 0x74, 0xf6, 0x7c, 0x13, 0x15, 0xe9, 0xf5, 0x2a, 0x65, 0x4e, 0x26, 0x2e, - 0x58, 0xfb, 0x4c, 0x1b, 0x5e, 0x13, 0x22, 0x1c, 0x2a, 0xd3, 0x2b, 0x12, 0xb1, 0xf0, 0xf0, 0xc4, - 0xcb, 0x69, 0xba, 0x25, 0x1d, 0xca, 0xab, 0x0a, 0x20, 0x81, 0xbd, 0xd5, 0x11, 0x8c, 0x61, 0xb7, - 0x75, 0xfe, 0x1b, 0x13, 0x6b, 0x82, 0xad, 0x9b, 0x1d, 0x46, 0x4b, 0xfc, 0xf5, 0x4d, 0x3a, 0xca, - 0xcf, 0xbe, 0x88, 0xff, 0x04, 0x65, 0x33, 0x28, 0x66, 0x67, 0xbf, 0xd5, 0xef, 0xac, 0x5f, 0x57, - 0xae, 0x09, 0x36, 0xdc, 0xdf, 0x1c, 0x9c, 0x97, 0xdd, 0x70, 0x43, 0xaa, 0xeb, 0xe0, 0x8e, 0x92, - 0x49, 0x33, 0x7b, 0xe0, 0x88, 0x89, 0x25, 0x6a, 0x2a, 0xe3, 0x4a, 0x4a, 0xa3, 0x40, 0xd9, 0xde, - 0x35, 0x41, 0x7e, 0xc6, 0xfc, 0x9f, 0x3f, 0x31, 0xa2, 0x6b, 0x4a, 0xc6, 0x17, 0xf8, 0xd2, 0x50, - 0x9d, 0x15, 0x37, 0x4f, 0xc6, 0x6a, 0x9b, 0x3d, 0x48, 0xee, 0x62, 0xee, 0x60, 0xfe, 0x31, 0x58, - 0xb6, 0x2b, 0x18, 0x82, 0x0a, 0xd3, 0x80, 0xab, 0xd3, 0x08, 0x90, 0xff, 0x10, 0x24, 0x14, 0x16, - 0x46, 0x3c, 0xb9, 0xd7, 0xca, 0x76, 0xed, 0xbf, 0x8f, 0x22, 0xd4, 0x5c, 0x79, 0x72, 0xf3, 0x51, - 0x64, 0x5d, 0x78, 0x81, 0x17, 0x2d, 0x3e, 0x72, 0x2c, 0x37, 0x31, 0xc4, 0x05, 0x38, 0xcd, 0x8b, - 0x0c, 0x8a, 0xe6, 0xe9, 0x15, 0x93, 0xd4, 0xf9, 0xd4, 0x3b, 0x95, 0xec, 0xa6, 0x7e, 0xf8, 0x50, - 0x43, 0xc3, 0x01, 0x7b, 0x12, 0xf2, 0xa8, 0x4a, 0x81, 0x34, 0x48, 0x96, 0xee, 0x7f, 0x9e, 0x90, - 0x5b, 0x1d, 0xef, 0x82, 0xb1, 0x2a, 0xb9, 0x18, 0x18, 0x5e, 0x0a, 0xb4, 0x48, 0x0d, 0x93, 0x7c, - 0xc5, 0x3c, 0x7f, 0x82, 0x39, 0xd4, 0x31, 0x58, 0xb3, 0xfc, 0xa4, 0x4e, 0x1d, 0xac, 0xa7, 0xe0, - 0x8c, 0xac, 0x71, 0xe7, 0x47, 0x0f, 0xe0, 0xbb, 0x26, 0x25, 0xc3, 0xb8, 0x4f, 0x1f, 0xfe, 0x0a, - 0xe3, 0xc8, 0x7d, 0x09, 0xbc, 0xd0, 0xcd, 0xaa, 0xe5, 0x90, 0xfb, 0xe1, 0x43, 0x2d, 0x4d, 0xf1, - 0x94, 0xce, 0x66, 0x1d, 0xe5, 0x53, 0x14, 0x2a, 0x6b, 0xb5, 0xc2, 0xc8, 0x11, 0xf5, 0x3a, 0x7c, - 0x65, 0xee, 0x8c, 0xa6, 0x70, 0x6a, 0xb1, 0xd2, 0xe6, 0x69, 0xbb, 0x3f, 0x0a, 0x4d, 0xd6, 0x01, - 0xb0, 0x2b, 0x69, 0xd9, 0x58, 0xde, 0xd3, 0x5a, 0x7f, 0x10, 0x30, 0xac, 0x68, 0xc3, 0xb6, 0x35, - 0x4e, 0x31, 0x0f, 0x15, 0xa7, 0x0c, 0x29, 0xb1, 0xfa, 0xda, 0x8b, 0xaa, 0xc0, 0xed, 0x2c, 0xb0, - 0x20, 0x4d, 0x5c, 0xbd, 0xab, 0x58, 0x1f, 0xeb, 0xff, 0x84, 0xb9, 0x04, 0x2f, 0xd2, 0x55, 0xf0, - 0x59, 0xa5, 0x08, 0x72, 0x4a, 0xde, 0xfa, 0x10, 0xd0, 0xef, 0x0e, 0xae, 0xb7, 0x30, 0xc8, 0x64, - 0xf8, 0x22, 0xaa, 0x32, 0x48, 0xe3, 0x36, 0x44, 0x25, 0x4d, 0xbb, 0xc7, 0xc6, 0x4f, 0xd0, 0x83, - 0x07, 0xa0, 0x72, 0x82, 0x0d, 0x69, 0x88, 0x20, 0x2c, 0x31, 0x29, 0x8d, 0x87, 0x92, 0x88, 0xfc, - 0x61, 0x78, 0x80, 0x59, 0x7b, 0x06, 0x72, 0x3a, 0xaf, 0x30, 0xc6, 0xaf, 0x35, 0xf5, 0xeb, 0xe1, - 0x4d, 0x51, 0xe1, 0x64, 0x00, 0x04, 0xf8, 0xe2, 0x15, 0xa3, 0x5a, 0x26, 0x9f, 0x5f, 0x04, 0x63, - 0x1d, 0xe2, 0xb9, 0x4d, 0xd0, 0x9a, 0x9b, 0xab, 0xfd, 0x75, 0x11, 0xcf, 0x53, 0xc0, 0x8f, 0x3c, - 0x18, 0xff, 0xf3, 0xea, 0xd9, 0xf7, 0xfa, 0xe1, 0x01, 0x0f, 0xab, 0xbc, 0x64, 0x84, 0x76, 0x18, - 0xf4, 0x7e, 0x27, 0x2a, 0xab, 0x5b, 0x7e, 0x13, 0x3c, 0x5e, 0xc2, 0xbd, 0xfc, 0x20, 0x24, 0xf3, - 0x70, 0x40, 0x4f, 0x17, 0x5c, 0xf4, 0x48, 0x7b, 0xf8, 0x26, 0x22, 0xe9, 0xa9, 0x12, 0x22, 0xcf, - 0x78, 0x92, 0xcb, 0x0c, 0xe3, 0xfc, 0x40, 0xe8, 0x41, 0x46, 0x38, 0x8c, 0x25, 0x56, 0x93, 0xb4, - 0x2d, 0xd8, 0xac, 0x62, 0xb9, 0x69, 0x0b, 0x37, 0x88, 0x14, 0x41, 0x1c, 0x2f, 0x51, 0x79, 0xc3, - 0x72, 0x10, 0x7c, 0x4f, 0x12, 0xf9, 0x3a, 0x82, 0xec, 0x43, 0xfc, 0x12, 0x96, 0xf7, 0x5a, 0x77, - 0xf8, 0x2d, 0x91, 0x9b, 0xc5, 0x6e, 0x2b, 0x12, 0xa4, 0x7f, 0x8a, 0xaa, 0x6d, 0xc8, 0xbd, 0x0c, - 0xcc, 0xf8, 0x2b, 0xb3, 0x97, 0xaa, 0xd4, 0xc3, 0xf0, 0xef, 0xb2, 0x63, 0xeb, 0xdf, 0x13, 0xce, - 0xc5, 0xec, 0xbe, 0xe2, 0x56, 0x0b, 0x62, 0xb1, 0x0b, 0x1e, 0x12, 0x22, 0xc7, 0x95, 0xc6, 0x55, - 0x46, 0x96, 0x57, 0x05, 0x65, 0x4a, 0x63, 0x74, 0x21, 0xd7, 0x24, 0x7a, 0x26, 0xbc, 0x51, 0x08, - 0x68, 0x20, 0x2b, 0x9c, 0xca, 0xbf, 0x88, 0x2a, 0xca, 0xac, 0x17, 0x0f, 0x44, 0xb1, 0xe1, 0x49, - 0xa6, 0x1e, 0xcd, 0x5c, 0x44, 0xea, 0xaa, 0x1a, 0x1b, 0x01, 0x00, 0x48, 0x3e, 0xcc, 0x83, 0xc6, - 0x32, 0x76, 0x30, 0xf2, 0x8e, 0xe9, 0x94, 0xcb, 0xc2, 0xb5, 0x5e, 0x54, 0xf9, 0x60, 0x82, 0x8d, - 0x1f, 0xf6, 0xdb, 0x4d, 0x3c, 0x4c, 0x29, 0x12, 0xc6, 0xf6, 0x43, 0x4a, 0xc7, 0x46, 0x8c, 0xf8, - 0x40, 0x3b, 0x03, 0x30, 0x60, 0xf1, 0x03, 0xba, 0x6f, 0xb2, 0xe4, 0x80, 0xd5, 0x54, 0xd2, 0x2c, - 0xf8, 0xc2, 0x2a, 0xac, 0xf8, 0xca, 0x82, 0x2a, 0x83, 0x9c, 0x97, 0x41, 0x84, 0x89, 0xe6, 0xa7, - 0xc5, 0xd2, 0x5f, 0x2d, 0x3e, 0x43, 0xd8, 0x9d, 0xfd, 0x7b, 0xe6, 0xbb, 0xeb, 0x97, 0x87, 0x53, - 0xd3, 0xf0, 0x44, 0x39, 0x27, 0x7b, 0x3e, 0x09, 0xa5, 0x61, 0x5a, 0x34, 0x43, 0x33, 0x1a, 0xad, - 0x5d, 0xf3, 0x1d, 0x8d, 0x8d, 0x8c, 0x54, 0x64, 0xeb, 0x87, 0xd7, 0x5f, 0x56, 0x2f, 0xab, 0x2b, - 0xab, 0xaf, 0x92, 0x9b, 0x69, 0x9d, 0x97, 0xd5, 0xdf, 0x56, 0x7d, 0x5c, 0xae, 0x61, 0x07, 0x31, - 0x71, 0x5b, 0xf8, 0x25, 0x88, 0x61, 0x5b, 0xdb, 0x47, 0x5d, 0x7c, 0x64, 0x53, 0x17, 0x5d, 0xc4, - 0x9c, 0x6f, 0x17, 0x14, 0xe6, 0xee, 0x84, 0x79, 0xbf, 0x85, 0x0e, 0xef, 0xc5, 0x63, 0x78, 0x60, - 0xcb, 0x6e, 0xde, 0x93, 0x85, 0xdc, 0x92, 0x5a, 0xb5, 0xe2, 0x04, 0xf7, 0xba, 0xc4, 0x15, 0x12, - 0xe3, 0x1a, 0x97, 0xc5, 0x09, 0x4d, 0x6c, 0xd3, 0x3a, 0x94, 0x25, 0xe2, 0xb7, 0xc4, 0x11, 0x72, - 0xd7, 0x96, 0x08, 0xbc, 0x21, 0x45, 0x98, 0xc6, 0xef, 0x75, 0x5f, 0x89, 0x25, 0x65, 0x57, 0xc6, - 0x65, 0xf6, 0x85, 0x6f, 0x12, 0xf4, 0x39, 0x06, 0xc7, 0x31, 0xb3, 0xa0, 0x7c, 0x40, 0x50, 0xca, - 0x42, 0x09, 0xfe, 0x5e, 0xb5, 0x55, 0x5b, 0x35, 0x5c, 0xff, 0xc4, 0x0c, 0xd5, 0x57, 0x54, 0x6a, - 0xba, 0xcc, 0xc2, 0xf8, 0xcb, 0x64, 0x65, 0xbe, 0x3c, 0x8a, 0x66, 0xe5, 0x66, 0x8d, 0x5d, 0x14, - 0xa0, 0xea, 0x63, 0xf1, 0x77, 0x77, 0xbb, 0xbf, 0xd9, 0x50, 0xe8, 0x6d, 0x62, 0x23, 0xbc, 0x9d, - 0xb7, 0xf5, 0x5f, 0x85, 0x2c, 0x73, 0x41, 0x54, 0xdd, 0x7a, 0x4c, 0x9d, 0x2c, 0xc6, 0x2e, 0x7c, - 0x28, 0x50, 0xf9, 0x52, 0x8c, 0xeb, 0x09, 0xa9, 0x95, 0x94, 0x0d, 0x5a, 0xfc, 0x8e, 0xad, 0x0d, - 0x12, 0xd6, 0xe6, 0x57, 0x88, 0x19, 0x46, 0x3e, 0x32, 0x5e, 0x36, 0xd8, 0xb3, 0xd0, 0xea, 0x35, - 0x95, 0x03, 0x28, 0x87, 0x55, 0x29, 0x95, 0xe2, 0x02, 0x9b, 0x9b, 0x0d, 0x1d, 0x7a, 0x78, 0xd8, - 0xe2, 0x17, 0x52, 0x61, 0xec, 0xaa, 0x91, 0x69, 0x40, 0x7a, 0xa5, 0x61, 0xe5, 0x0c, 0x4e, 0x19, - 0x3c, 0x40, 0x52, 0x1f, 0x4a, 0xf1, 0x62, 0x4e, 0x69, 0x24, 0x1f, 0x84, 0x91, 0x04, 0x05, 0x71, - 0xc2, 0x9a, 0xd2, 0x18, 0xc7, 0x30, 0x6a, 0x99, 0x78, 0x26, 0xf3, 0xc0, 0x34, 0xd6, 0x8e, 0x90, - 0xf8, 0xce, 0x34, 0x64, 0xa8, 0x70, 0x26, 0xfd, 0x98, 0xcf, 0x19, 0x96, 0xdb, 0xcf, 0xc1, 0x6d, - 0x87, 0x63, 0x41, 0x31, 0xa1, 0xaa, 0x06, 0x43, 0x17, 0xf8, 0x4b, 0x33, 0x69, 0x92, 0xaa, 0x31, - 0x93, 0x58, 0xf0, 0x55, 0x52, 0x31, 0x72, 0xd8, 0xad, 0xc6, 0xd9, 0x1e, 0x9a, 0x3a, 0x65, 0xe1, - 0x13, 0x98, 0xca, 0x02, 0x90, 0xfc, 0xa7, 0x98, 0x99, 0x3c, 0x3a, 0x97, 0x87, 0xf0, 0x5c, 0x42, - 0x6b, 0x55, 0xa6, 0x93, 0xcc, 0x47, 0xbe, 0x22, 0xda, 0x7b, 0x5b, 0x5e, 0x13, 0x33, 0xea, 0xb5, - 0xbe, 0x34, 0xce, 0x08, 0x8b, 0xb3, 0x53, 0xb5, 0x0e, 0x81, 0x30, 0x7a, 0xea, 0xe5, 0xa1, 0xb7, - 0xa1, 0xee, 0x61, 0xaa, 0x9b, 0x92, 0x07, 0x23, 0x24, 0x62, 0xbf, 0xe8, 0x4c, 0x17, 0xcf, 0x5f, - 0x2b, 0xc8, 0xf2, 0xbd, 0x8f, 0x5d, 0x72, 0xfa, 0x24, 0x55, 0xd5, 0x8f, 0x82, 0x22, 0xc8, 0x45, - 0x2f, 0x17, 0xcd, 0x5d, 0xd7, 0x25, 0x36, 0xd3, 0x6f, 0xde, 0xee, 0xfe, 0xb2, 0x93, 0xab, 0xbe, - 0x4a, 0x69, 0xfe, 0x1d, 0xb3, 0xcb, 0x4d, 0x55, 0x7a, 0x9d, 0x7b, 0x28, 0xce, 0x9f, 0xe2, 0x45, - 0x5b, 0x41, 0x24, 0x83, 0xb3, 0x3a, 0x4f, 0x04, 0x25, 0xd5, 0x7b, 0xc4, 0x8b, 0x97, 0xba, 0x4e, - 0xef, 0x7f, 0x04, 0xc2, 0x58, 0xaa, 0xba, 0x35, 0xe5, 0xf1, 0x00, 0xac, 0x61, 0x4f, 0x87, 0xae, - 0xaa, 0x84, 0x93, 0x62, 0xe3, 0x80, 0xb6, 0xe3, 0xa9, 0x05, 0x79, 0x20, 0x84, 0x72, 0x69, 0xd7, - 0x14, 0xdb, 0x51, 0xef, 0x8b, 0x1a, 0x2b, 0x71, 0x08, 0x80, 0xd9, 0xff, 0xf8, 0x2a, 0xd5, 0x54, - 0x4c, 0x82, 0x2f, 0x99, 0x8b, 0xdd, 0x1c, 0x7c, 0x42, 0xeb, 0x89, 0x10, 0x3b, 0xb1, 0xbb, 0x8d, - 0x98, 0x7c, 0x6e, 0xe2, 0xb1, 0x88, 0xb4, 0x62, 0x39, 0x7c, 0x4c, 0x29, 0xf7, 0x28, 0x00, 0x05, - 0xcf, 0x90, 0x9e, 0x88, 0x56, 0xf6, 0x04, 0x29, 0x2e, 0xd8, 0x82, 0xfd, 0xf0, 0x57, 0x1c, 0xf2, - 0x91, 0x11, 0xce, 0xc6, 0xee, 0x50, 0xc0, 0x4e, 0x92, 0x00, 0xb9, 0x7e, 0x8a, 0xdc, 0x4c, 0x29, - 0x06, 0xa6, 0xb0, 0x35, 0xfa, 0xc4, 0x1b, 0x48, 0x13, 0xdf, 0x5b, 0xe3, 0xe3, 0x46, 0x7b, 0xf4, - 0xf2, 0x2a, 0x32, 0x5d, 0x1b, 0x2f, 0x82, 0xc9, 0x98, 0x53, 0x31, 0x99, 0x89, 0xd9, 0x6c, 0x68, - 0xcb, 0xa3, 0x3c, 0xe3, 0x7d, 0xea, 0xef, 0xc4, 0x02, 0xde, 0x5e, 0xb7, 0x7b, 0xf7, 0x89, 0x1c, - 0x59, 0x1e, 0x34, 0x5d, 0xe3, 0xae, 0x82, 0x4b, 0x41, 0x9d, 0x8e, 0x24, 0x9f, 0x22, 0xe6, 0xa7, - 0x10, 0x3b, 0xa8, 0xd9, 0xb4, 0x69, 0x58, 0xd7, 0x47, 0xe3, 0x3d, 0x4b, 0x83, 0xc9, 0x8b, 0xec, - 0xf2, 0x57, 0x33, 0x1f, 0x10, 0x09, 0x2a, 0x2e, 0x27, 0x87, 0xf1, 0xbc, 0x41, 0x27, 0x11, 0x44, - 0xdb, 0x2f, 0x05, 0x5a, 0x12, 0x36, 0x21, 0x25, 0x8d, 0x91, 0x9d, 0x4b, 0x4c, 0xe4, 0x82, 0x8e, - 0x58, 0xa2, 0x4a, 0xb1, 0x32, 0x63, 0xc5, 0x49, 0xd9, 0x5c, 0x0c, 0x1f, 0x27, 0x7b, 0xf8, 0x4c, - 0xc7, 0x31, 0x35, 0xcd, 0xb2, 0x93, 0xa2, 0xf0, 0x9d, 0x37, 0x28, 0x20, 0x0f, 0x74, 0xaf, 0xbd, - 0x4d, 0x93, 0xe1, 0xeb, 0x06, 0x7c, 0xce, 0x1c, 0x44, 0x75, 0x8e, 0x6a, 0x33, 0xd5, 0x7e, 0x46, - 0x4d, 0x00, 0x53, 0x02, 0x11, 0x90, 0x0e, 0xd3, 0x4e, 0x2a, 0xd1, 0x3f, 0x88, 0x0e, 0xf5, 0x7d, - 0x1d, 0x45, 0x59, 0xd0, 0x50, 0x35, 0x8d, 0x06, 0x7c, 0xee, 0x5e, 0x14, 0xdd, 0xb8, 0xbe, 0x23, - 0xaf, 0x5f, 0x5d, 0x44, 0x75, 0xef, 0x82, 0x01, 0x11, 0x03, 0xc4, 0x3c, 0xaa, 0xd7, 0x83, 0xfe, - 0x33, 0x71, 0x26, 0x98, 0xab, 0xaf, 0x25, 0x4b, 0xdb, 0xff, 0xc1, 0x51, 0xd7, 0x88, 0xf5, 0xb7, - 0x2e, 0x56, 0x69, 0x19, 0x44, 0x8b, 0xab, 0xfc, 0xd5, 0x54, 0x7f, 0x56, 0x7c, 0x11, 0x66, 0xf6, - 0xe3, 0x7c, 0x60, 0x8c, 0xe4, 0x40, 0x62, 0x51, 0x01, 0x72, 0x2c, 0x72, 0x51, 0xa6, 0x49, 0xdb, - 0xdf, 0xf4, 0x2f, 0x14, 0x3d, 0xdd, 0xe8, 0x9d, 0x97, 0xc1, 0x0d, 0x77, 0x77, 0x89, 0x57, 0x71, - 0x02, 0x41, 0x4f, 0x63, 0x55, 0xbc, 0xea, 0x15, 0xf7, 0xf1, 0x20, 0x87, 0x9a, 0x81, 0xc5, 0x5a, - 0xfb, 0xc4, 0xaf, 0x7c, 0x16, 0x90, 0x6a, 0xe7, 0x2a, 0xca, 0x44, 0x88, 0x1f, 0x7c, 0x14, 0xcc, - 0xc5, 0x19, 0xf6, 0x0b, 0xe6, 0x55, 0x55, 0x47, 0x03, 0x40, 0xca, 0x3f, 0xe1, 0x42, 0xd4, 0xa2, - 0x07, 0x8e, 0x0d, 0x03, 0x62, 0x84, 0xc2, 0x06, 0x3d, 0x44, 0x37, 0x31, 0x2a, 0xd2, 0x4f, 0xa8, - 0x6a, 0xdd, 0xf0, 0x4f, 0x3b, 0x07, 0x5e, 0xee, 0x55, 0x02, 0xbb, 0xef, 0x82, 0xc2, 0x8f, 0x3a, - 0x22, 0xc7, 0x8b, 0x17, 0x61, 0xb4, 0xd8, 0xa3, 0x2d, 0xb9, 0x48, 0x2f, 0xf0, 0xa4, 0xba, 0x1d, - 0xf4, 0x3d, 0x53, 0xc1, 0x6a, 0x0a, 0x13, 0xb0, 0xfc, 0x42, 0xa0, 0xb6, 0xfc, 0xa3, 0xa0, 0x1d, - 0x58, 0xf1, 0x02, 0x34, 0x4f, 0xb4, 0x8e, 0x91, 0xe1, 0xe0, 0x9b, 0x6c, 0x6d, 0x06, 0x5c, 0x62, - 0xc6, 0x2c, 0x62, 0xc7, 0x97, 0x88, 0x1f, 0x95, 0x41, 0xff, 0x9e, 0xae, 0xf1, 0xf6, 0x6e, 0xce, - 0x24, 0x64, 0xcc, 0xbb, 0xa9, 0x2d, 0x5b, 0xa0, 0xa3, 0x68, 0x44, 0xe4, 0x57, 0x4b, 0x99, 0xb1, - 0x4a, 0x03, 0xd8, 0x34, 0x82, 0xa6, 0xf2, 0x05, 0x33, 0xf1, 0x1a, 0xc7, 0xc4, 0x3a, 0xb2, 0xfa, - 0x2f, 0x7f, 0x35, 0xdb, 0xb7, 0xc4, 0x84, 0x48, 0xee, 0xe8, 0x6a, 0xac, 0x1b, 0x07, 0x8e, 0xb5, - 0x9c, 0x4c, 0x7d, 0xd1, 0xa0, 0x77, 0x19, 0x36, 0xf7, 0x22, 0xd3, 0xa1, 0x9c, 0x83, 0x41, 0xdf, - 0x11, 0x05, 0x94, 0x04, 0xc6, 0xc9, 0x2a, 0xdc, 0xf4, 0x51, 0x61, 0xb4, 0xa3, 0xe5, 0x5e, 0xed, - 0xbf, 0xe6, 0x35, 0xef, 0xea, 0xf5, 0xc1, 0x08, 0x9a, 0x73, 0xf7, 0xf8, 0x29, 0x23, 0x6a, 0x3a, - 0x70, 0xed, 0x2a, 0xab, 0x2c, 0xa9, 0x48, 0x5a, 0x48, 0x7f, 0x8c, 0x93, 0x04, 0x42, 0x00, 0xf5, - 0xd7, 0x9b, 0x2f, 0x77, 0xf1, 0xa6, 0xd3, 0xd5, 0x36, 0xdd, 0xa4, 0xa4, 0x05, 0x28, 0xa7, 0xd0, - 0xee, 0xe1, 0xcc, 0x57, 0x34, 0x25, 0x6b, 0x34, 0xe4, 0x0a, 0x99, 0x1e, 0x8f, 0xff, 0x47, 0x8b, - 0xeb, 0x9c, 0xbe, 0x0a, 0x29, 0x24, 0xd3, 0x45, 0xfb, 0xd7, 0xd1, 0x22, 0x9f, 0x82, 0x42, 0xde, - 0x9b, 0x5f, 0x24, 0xcf, 0xd0, 0xfc, 0xf5, 0x69, 0xa4, 0x92, 0xf5, 0xc3, 0x96, 0x32, 0xb0, 0xc7, - 0x07, 0x89, 0x35, 0x51, 0x12, 0x34, 0x7f, 0xe0, 0xa4, 0x53, 0x6d, 0x83, 0x8a, 0xad, 0x54, 0xe5, - 0x6d, 0xfa, 0x1c, 0x63, 0xcc, 0xf7, 0xc5, 0x15, 0x55, 0x54, 0xdc, 0xee, 0x2c, 0xf1, 0x2e, 0xef, - 0xf8, 0x48, 0xef, 0x7d, 0x0e, 0xbe, 0x0a, 0x04, 0x2e, 0x6c, 0x39, 0x94, 0x1d, 0x9f, 0x1d, 0xf7, - 0xc4, 0xa1, 0x80, 0xb1, 0xf9, 0x04, 0xbb, 0xbb, 0xf1, 0x00, 0xa6, 0xee, 0xee, 0x44, 0x88, 0x04, - 0xf4, 0x3b, 0x03, 0x38, 0x80, 0xbd, 0xef, 0xe2, 0x01, 0x51, 0xd9, 0x05, 0x16, 0x4e, 0x8d, 0xaa, - 0x2b, 0x8c, 0x30, 0x72, 0xa9, 0xfa, 0x2b, 0xb6, 0xfd, 0x12, 0x7f, 0x8c, 0x22, 0x8d, 0x3d, 0xc1, - 0x06, 0x3d, 0x7a, 0x96, 0x8b, 0x75, 0x63, 0x43, 0x63, 0x43, 0x5c, 0xd7, 0x77, 0x7f, 0x12, 0x5a, - 0x6d, 0xcb, 0xdf, 0xf8, 0x93, 0x4a, 0xe9, 0xba, 0x68, 0x7e, 0x14, 0x3b, 0x4c, 0xcd, 0xcb, 0xe3, - 0x89, 0xb8, 0xa8, 0xc3, 0xc8, 0x4b, 0x87, 0x8c, 0x3c, 0xc7, 0x5e, 0xc0, 0x71, 0xa1, 0xd7, 0xc8, - 0x66, 0xcd, 0xcf, 0xd5, 0x20, 0xe2, 0x14, 0xe8, 0x6a, 0xb8, 0x90, 0x49, 0x55, 0x17, 0x58, 0xae, - 0x26, 0x30, 0x5a, 0x14, 0x8a, 0x2c, 0x65, 0x62, 0x21, 0x19, 0xa2, 0x63, 0x1b, 0x65, 0xd4, 0xb4, - 0x96, 0x8a, 0xb0, 0x76, 0x53, 0xe4, 0x11, 0x05, 0x3f, 0x45, 0xfc, 0x48, 0x44, 0x97, 0xbf, 0x11, - 0x19, 0xd2, 0x39, 0x06, 0x22, 0x1e, 0xc7, 0x1a, 0xbd, 0xf8, 0xdf, 0xe0, 0xa0, 0x42, 0x34, 0xa9, - 0x1e, 0xbb, 0x15, 0xf5, 0x74, 0x52, 0xa7, 0xc4, 0x63, 0x34, 0x7a, 0xad, 0xd8, 0x9f, 0xcc, 0x47, - 0x7f, 0xc2, 0x05, 0x76, 0x13, 0x57, 0x49, 0xed, 0x9e, 0x0f, 0x4b, 0xcc, 0x5a, 0x27, 0xf9, 0xb7, - 0xaf, 0x10, 0x5b, 0xb0, 0x6d, 0x7d, 0x18, 0x8d, 0xf0, 0x5b, 0xb3, 0x49, 0xc8, 0x20, 0x4e, 0xf6, - 0xe3, 0xc3, 0xe7, 0x12, 0xad, 0xa6, 0x9b, 0x7f, 0xe6, 0xdd, 0xdf, 0xd1, 0x25, 0x7d, 0x6b, 0x00, - 0x00, 0x00, 0x01, 0x41, 0x9a, 0x14, 0x0a, 0x30, 0x36, 0x8b, 0xd0, 0x94, 0x8b, 0xd5, 0xd3, 0x62, - 0x4c, 0x37, 0x19, 0x4c, 0x63, 0xa2, 0x60, 0x8c, 0x66, 0x35, 0x1a, 0x90, 0x72, 0x9f, 0x88, 0xa1, - 0x2f, 0x3f, 0x17, 0x21, 0x21, 0x96, 0x8f, 0x71, 0x94, 0xc6, 0x18, 0xe8, 0x66, 0x53, 0xf4, 0x34, - 0xc9, 0x17, 0xd5, 0x2a, 0x71, 0x30, 0xb8, 0xe4, 0x20, 0x40, 0xb5, 0xda, 0x94, 0x3c, 0x2e, 0x3d, - 0x75, 0x3b, 0x01, 0xd8, 0xe9, 0xdc, 0x8c, 0x7e, 0x22, 0x30, 0x46, 0x6e, 0x7b, 0x8e, 0xf4, 0x9b, - 0xb9, 0xe0, 0x59, 0x89, 0x30, 0x92, 0xf6, 0x73, 0x9e, 0xce, 0x73, 0xfc, 0xa3, 0xc7, 0xe9, 0x58, - 0xb0, 0x2b, 0x11, 0x06, 0x1f, 0xe2, 0x2a, 0xa2, 0xe2, 0xf6, 0x6c, 0x4e, 0x5e, 0xa9, 0xd8, 0x42, - 0x24, 0x40, 0x24, 0xbb, 0x5f, 0x1f, 0xe1, 0x00, 0xa0, 0x42, 0x2e, 0xe2, 0x4f, 0xd4, 0x1f, 0x7b, - 0x07, 0x7e, 0xce, 0xd9, 0x7d, 0x09, 0xed, 0x3f, 0xc4, 0xcb, 0x71, 0xf0, 0x84, 0x3f, 0xe2, 0x8d, - 0xc5, 0x18, 0x5f, 0xa0, 0xa8, 0x7f, 0x6f, 0xa9, 0x53, 0xea, 0x23, 0x83, 0xea, 0x80, 0xbf, 0x5c, - 0xab, 0xa2, 0x23, 0xbf, 0x45, 0xe3, 0xb2, 0x72, 0xe9, 0xd3, 0xf5, 0x2a, 0x57, 0x11, 0xa4, 0x80, - 0x69, 0xaa, 0x3f, 0xd0, 0xc6, 0x22, 0xf8, 0x2c, 0x1a, 0x9b, 0x5d, 0xbb, 0xb0, 0x75, 0x39, 0xfe, - 0xfa, 0x29, 0x98, 0xb6, 0xa2, 0x61, 0x72, 0x70, 0x4b, 0xe0, 0xea, 0x96, 0x78, 0x21, 0x8c, 0x73, - 0xba, 0x25, 0xa2, 0x75, 0xf0, 0xa0, 0x51, 0xb4, 0xf9, 0x62, 0x55, 0x1e, 0xc4, 0xe5, 0xf1, 0x79, - 0x48, 0xd9, 0x2f, 0xe2, 0x02, 0x94, 0xc7, 0x45, 0x42, 0x68, 0xbc, 0x60, 0xc7, 0xbc, 0x65, 0xb4, - 0xdd, 0xdb, 0x3f, 0xfb, 0xe8, 0x2e, 0x74, 0x50, 0xf2, 0x52, 0x4b, 0xf5, 0x2a, 0x3a, 0x7d, 0x5f, - 0xe0, 0xb8, 0x55, 0xee, 0x1b, 0x6b, 0x56, 0xa6, 0x29, 0xf3, 0x1c, 0x3e, 0x0a, 0x05, 0x55, 0x55, - 0x55, 0x55, 0x86, 0x26, 0x09, 0xac, 0xe2, 0xb7, 0x77, 0x77, 0xbf, 0xc1, 0x54, 0xf6, 0xd7, 0x2f, - 0x4d, 0xbc, 0x65, 0x4b, 0x67, 0x30, 0xa0, 0x39, 0x7c, 0x10, 0x84, 0xc1, 0x92, 0x56, 0x20, 0x28, - 0x26, 0xac, 0xd8, 0xa5, 0xe8, 0xa7, 0x48, 0x8e, 0xcd, 0xa4, 0x97, 0x88, 0xb4, 0xd6, 0xd6, 0xda, - 0xe0, 0x92, 0xd5, 0xab, 0x22, 0xfa, 0x15, 0x2f, 0x84, 0x45, 0xed, 0x35, 0x43, 0xbe, 0xd3, 0x5e, - 0x13, 0x2e, 0x92, 0x5a, 0x49, 0x1f, 0xa9, 0xef, 0x87, 0x48, 0x32, 0x67, 0xd1, 0xdb, 0xce, 0xb8, - 0xda, 0x77, 0x96, 0xcc, 0xb6, 0xe7, 0x33, 0x3f, 0xe1, 0xdf, 0x3c, 0x8f, 0x8f, 0xce, 0x3b, 0x86, - 0xfe, 0x3c, 0xad, 0xa4, 0xdb, 0x7f, 0xe1, 0x53, 0xe3, 0xbe, 0x5b, 0xed, 0x6f, 0x96, 0xf8, 0xa8, - 0x74, 0xf9, 0x0d, 0x10, 0xd1, 0x35, 0x9b, 0xe1, 0x5c, 0xf8, 0xa9, 0xa1, 0x53, 0x46, 0xa9, 0xa1, - 0x53, 0x42, 0x75, 0xe7, 0xd3, 0xef, 0xe2, 0x41, 0x4c, 0x34, 0x9f, 0x45, 0x3c, 0x4d, 0x0a, 0x9a, - 0x27, 0x24, 0xa9, 0xa1, 0x53, 0x46, 0xb5, 0xa3, 0xd3, 0x87, 0x85, 0x02, 0xc3, 0x68, 0x1a, 0x53, - 0x24, 0x0f, 0xb1, 0x9d, 0xec, 0xa6, 0x2f, 0x34, 0x63, 0xb0, 0x5f, 0xdf, 0x19, 0x1c, 0xe4, 0x08, - 0x8b, 0xf4, 0x40, 0x84, 0x11, 0x69, 0x99, 0x4e, 0xc5, 0x5e, 0x8a, 0x9a, 0x43, 0x83, 0x89, 0xe7, - 0xb8, 0x32, 0xa9, 0xf3, 0x85, 0x71, 0x1f, 0x8e, 0xdd, 0xb9, 0xef, 0x89, 0x22, 0x06, 0x81, 0x9b, - 0x17, 0x2b, 0x55, 0x5b, 0xf0, 0x40, 0x6a, 0xa3, 0xe8, 0x19, 0x61, 0x1e, 0x14, 0xa1, 0x56, 0x44, - 0x65, 0xa0, 0x5e, 0x87, 0x99, 0x3c, 0xe3, 0x0e, 0x91, 0xb7, 0xc6, 0x88, 0x2f, 0xf7, 0x2e, 0x5a, - 0x44, 0x91, 0x42, 0xc2, 0x94, 0x9c, 0x98, 0x96, 0xa0, 0xf9, 0x40, 0xff, 0x2f, 0x06, 0xca, 0x6c, - 0xc5, 0xb4, 0xff, 0xc2, 0x84, 0x15, 0xc7, 0x99, 0x17, 0xc9, 0xfc, 0x14, 0xe5, 0xc9, 0xb0, 0x59, - 0x96, 0x62, 0x63, 0x04, 0x29, 0xb1, 0x2c, 0x20, 0xc4, 0xff, 0x1e, 0x56, 0xa0, 0xf6, 0x65, 0xa6, - 0xf0, 0xc2, 0xe5, 0xef, 0xec, 0x37, 0xef, 0x85, 0x08, 0x16, 0x26, 0x53, 0x3e, 0x09, 0xf7, 0x03, - 0x1a, 0xf6, 0x04, 0x55, 0x0c, 0x70, 0x00, 0x8c, 0xc7, 0x71, 0x60, 0x04, 0xd4, 0x91, 0xc3, 0x91, - 0xb7, 0x23, 0x17, 0xc1, 0x4c, 0x0f, 0x46, 0xa3, 0x1c, 0x35, 0x0f, 0x01, 0xbd, 0x83, 0x77, 0x5f, - 0xb7, 0x37, 0x5d, 0x95, 0xfd, 0xfb, 0xe8, 0x2e, 0x3b, 0x18, 0xaf, 0x52, 0x22, 0x25, 0xc4, 0xcf, - 0x43, 0xd3, 0x3d, 0x0f, 0x4c, 0xdc, 0x22, 0x46, 0x9a, 0xda, 0x6b, 0x69, 0xaf, 0xd7, 0x95, 0x78, - 0xce, 0x92, 0x5a, 0x49, 0x34, 0xd6, 0xd3, 0x5b, 0xe2, 0x2d, 0x34, 0xc1, 0xda, 0x6b, 0x5d, 0x7e, - 0x88, 0xe0, 0xbe, 0xd5, 0xa6, 0xa9, 0xd3, 0x47, 0x4f, 0xa6, 0x9a, 0x69, 0xae, 0x0a, 0xad, 0xdb, - 0xb7, 0x6f, 0x6d, 0xb9, 0x13, 0xeb, 0x87, 0xd0, 0xae, 0xbe, 0x30, 0x5e, 0xd3, 0x5b, 0x4d, 0x6d, - 0x35, 0xb4, 0xd7, 0x84, 0x2d, 0x35, 0xb4, 0xd6, 0xd3, 0x5f, 0x8b, 0xb4, 0xd6, 0xd3, 0x5f, 0x8e, - 0xe9, 0x25, 0xa4, 0x91, 0xb1, 0xd8, 0x7c, 0x7e, 0x2e, 0xa6, 0x2f, 0x87, 0xad, 0x54, 0x92, 0x5a, - 0x49, 0x34, 0xd7, 0xd6, 0xdb, 0x6d, 0xbf, 0xf0, 0x41, 0xd2, 0x26, 0x2a, 0x06, 0xdc, 0x98, 0xcc, - 0x4b, 0xd8, 0x26, 0x6d, 0x61, 0x40, 0xfd, 0xf3, 0x95, 0x3a, 0xf3, 0xf6, 0xff, 0x1a, 0x39, 0xb8, - 0xcd, 0xe2, 0x79, 0x04, 0x76, 0x4a, 0x03, 0x57, 0xcb, 0x5a, 0x69, 0x1a, 0x81, 0x97, 0x4e, 0xc1, - 0x80, 0xa5, 0x09, 0xe8, 0x88, 0xb4, 0xbf, 0xc2, 0x82, 0x0d, 0x1e, 0x64, 0xb8, 0x0b, 0x55, 0x4b, - 0x41, 0xc1, 0x1f, 0x08, 0x34, 0x01, 0xc0, 0x31, 0x9a, 0x21, 0x6e, 0x9c, 0xd0, 0x89, 0x41, 0x3e, - 0x48, 0x61, 0x0b, 0xbe, 0xc1, 0xe7, 0xdb, 0xff, 0x78, 0x80, 0x4c, 0x2d, 0x0f, 0x46, 0x6b, 0x80, - 0x99, 0x36, 0x16, 0x80, 0xc6, 0x40, 0x16, 0x9e, 0x08, 0x45, 0xb0, 0x8d, 0x99, 0xd2, 0xb8, 0xd3, - 0x0c, 0x7a, 0x1e, 0x6c, 0x90, 0xd4, 0x34, 0xec, 0x0c, 0x7a, 0x5d, 0x99, 0x78, 0xee, 0xc0, 0x45, - 0x9c, 0x53, 0xe4, 0x61, 0x2a, 0x74, 0xc2, 0xdb, 0xbf, 0xc4, 0x85, 0x02, 0x16, 0xea, 0x73, 0xe3, - 0x13, 0x9e, 0x2b, 0x38, 0x71, 0x01, 0x8e, 0xdc, 0x8c, 0xb6, 0x70, 0xd0, 0xb1, 0x96, 0x31, 0x23, - 0x90, 0x2f, 0x13, 0x1d, 0x3d, 0x81, 0x60, 0xcb, 0x06, 0x16, 0x78, 0xb6, 0x86, 0xfa, 0x62, 0x15, - 0x1f, 0xf0, 0xa0, 0xf3, 0xcd, 0x16, 0x5d, 0x37, 0x14, 0x53, 0xee, 0xca, 0x62, 0xf6, 0xd3, 0x39, - 0x7d, 0x99, 0xbf, 0xc1, 0x60, 0xeb, 0x93, 0x49, 0x15, 0xdc, 0x2c, 0xe0, 0x16, 0xfc, 0xe0, 0x1d, - 0x1c, 0x02, 0x21, 0x08, 0x2f, 0xcd, 0xc3, 0xfc, 0x14, 0xc3, 0x80, 0xf5, 0x90, 0x1a, 0x8b, 0x00, - 0x91, 0xcb, 0xee, 0x5f, 0x4a, 0xee, 0xbd, 0x7d, 0xff, 0xcc, 0x3c, 0x2a, 0x17, 0x3d, 0x50, 0x36, - 0xa8, 0x19, 0xa9, 0x2f, 0x23, 0x4d, 0x8d, 0x94, 0xcc, 0x0b, 0xfc, 0x13, 0xed, 0x52, 0xb5, 0x48, - 0xe8, 0x77, 0xe1, 0x9a, 0x49, 0x7c, 0x14, 0xaf, 0x6e, 0x99, 0x22, 0xba, 0xb8, 0x37, 0x44, 0xaf, - 0xac, 0x53, 0x75, 0xa9, 0xfa, 0xc5, 0x7c, 0x11, 0x5c, 0xdc, 0xfd, 0xdc, 0x8a, 0x1e, 0xad, 0x27, - 0x58, 0xa5, 0xe0, 0xc3, 0x8f, 0x55, 0x93, 0xb6, 0xc4, 0x30, 0x82, 0x55, 0x52, 0x79, 0xff, 0x04, - 0xbe, 0x7c, 0x97, 0x34, 0xab, 0xc1, 0x55, 0xb8, 0x5c, 0xdb, 0x85, 0xcf, 0x21, 0x22, 0x12, 0x4a, - 0xbc, 0xf1, 0xe5, 0x4d, 0x34, 0xd3, 0xff, 0x58, 0xbe, 0x0b, 0x24, 0xa7, 0x2d, 0x25, 0xa1, 0x69, - 0x92, 0x98, 0xbc, 0x48, 0x78, 0x43, 0x11, 0xba, 0x79, 0x07, 0x31, 0xf1, 0xca, 0xe2, 0xcd, 0x86, - 0x6f, 0x35, 0x5d, 0x45, 0x0a, 0xb7, 0xea, 0xc1, 0x6d, 0x46, 0xa7, 0x5d, 0x16, 0x28, 0xfe, 0x77, - 0xc7, 0xf8, 0x40, 0x28, 0x33, 0xa0, 0xdd, 0x99, 0x98, 0x2f, 0x41, 0x08, 0xc0, 0xe3, 0xcd, 0x92, - 0x75, 0x87, 0x2e, 0xcd, 0xbd, 0x9f, 0x1a, 0x53, 0x6b, 0x7e, 0x63, 0x78, 0x58, 0xb7, 0xa4, 0x27, - 0x68, 0x33, 0x4d, 0x8f, 0xac, 0xd0, 0x20, 0x64, 0x47, 0x6d, 0x3b, 0x7d, 0xc3, 0xc5, 0x7f, 0xf2, - 0x84, 0xf4, 0x93, 0x58, 0x90, 0x58, 0x10, 0x99, 0x87, 0x1a, 0x67, 0xbb, 0x63, 0xc2, 0x0d, 0xe0, - 0x69, 0x88, 0x11, 0x83, 0x98, 0xf8, 0xc3, 0x0d, 0xc0, 0x2c, 0xf1, 0x8a, 0xc6, 0xf2, 0xf6, 0xec, - 0xfb, 0x7b, 0xef, 0xe0, 0x94, 0x78, 0xf2, 0x61, 0x99, 0xe9, 0x3b, 0x8d, 0x53, 0xe2, 0xcd, 0x26, - 0xce, 0x90, 0xf8, 0x2b, 0xa6, 0x02, 0x17, 0x44, 0x18, 0x0e, 0xce, 0x24, 0x14, 0x88, 0x33, 0x04, - 0x37, 0x16, 0x41, 0x72, 0xb4, 0xa5, 0x42, 0xca, 0x93, 0xfe, 0xb2, 0xaf, 0xc8, 0xbd, 0x7c, 0xe1, - 0x77, 0x3e, 0xdc, 0x5b, 0x16, 0xfc, 0x37, 0xc9, 0xea, 0x2a, 0xc5, 0x5f, 0x6c, 0x5b, 0x4f, 0xc1, - 0x16, 0x95, 0xa3, 0xa2, 0xaf, 0x45, 0x4e, 0x82, 0xfd, 0x7b, 0xe8, 0x56, 0x15, 0xdd, 0x5d, 0x5d, - 0x74, 0x66, 0x1e, 0xbd, 0x37, 0x05, 0xc2, 0x72, 0x90, 0xac, 0xf9, 0xa4, 0x0f, 0x05, 0x12, 0x50, - 0x94, 0xc9, 0x42, 0x53, 0x4a, 0xbd, 0x52, 0xaf, 0x04, 0x5c, 0xc4, 0x13, 0x10, 0x7b, 0xe0, 0xb7, - 0x25, 0x39, 0x29, 0xf7, 0xd4, 0xcb, 0xf8, 0x7a, 0x7c, 0xdc, 0x62, 0x81, 0xc2, 0xb2, 0x85, 0xe0, - 0xe6, 0x69, 0x47, 0x0f, 0x3a, 0x8e, 0x2a, 0xca, 0x08, 0x03, 0xa0, 0xa0, 0x71, 0x2c, 0x22, 0x05, - 0x87, 0x0b, 0x6e, 0x1d, 0x83, 0xec, 0x70, 0x80, 0xc0, 0x93, 0xd8, 0xd6, 0x05, 0xd8, 0x0e, 0x25, - 0x18, 0x22, 0x69, 0x28, 0x36, 0x82, 0xcf, 0x82, 0x00, 0x98, 0xf1, 0xba, 0x8c, 0xc8, 0x0e, 0x3c, - 0xb3, 0x4d, 0x7c, 0x89, 0xc8, 0x42, 0x43, 0x6e, 0x08, 0xae, 0xee, 0x5e, 0x23, 0xff, 0xdb, 0xbb, - 0xc4, 0xbd, 0x7d, 0x10, 0x0a, 0xcd, 0xe0, 0x7f, 0xc7, 0x63, 0x6b, 0xd6, 0xb5, 0xc3, 0x81, 0x1c, - 0x7a, 0xab, 0x5d, 0x4d, 0x2f, 0xf0, 0xa0, 0x42, 0xb2, 0xc1, 0xcb, 0x76, 0xe6, 0x22, 0xf5, 0x16, - 0x72, 0x41, 0x6f, 0x7f, 0x7e, 0x69, 0xfc, 0x40, 0xb1, 0x3c, 0xcd, 0x6e, 0xdc, 0xf9, 0x88, 0x86, - 0xe1, 0x56, 0x20, 0xda, 0xee, 0xf3, 0xc1, 0x49, 0xb4, 0xca, 0x41, 0x0f, 0x35, 0x2b, 0x82, 0xeb, - 0x12, 0x88, 0x50, 0x1d, 0x20, 0xe2, 0xf3, 0x11, 0x8e, 0x35, 0xb7, 0x17, 0xf7, 0x89, 0x04, 0x21, - 0x5c, 0x80, 0x3a, 0xd9, 0x71, 0xdf, 0x5d, 0x1c, 0xeb, 0x85, 0x39, 0xcc, 0x8e, 0xfd, 0x55, 0x55, - 0x75, 0x2a, 0xcb, 0xe8, 0xcf, 0xf4, 0x54, 0x78, 0x27, 0x0b, 0x1e, 0x7f, 0x3e, 0x93, 0xf9, 0x7f, - 0xd3, 0xa4, 0xe4, 0xe8, 0x8e, 0x5f, 0x24, 0xf9, 0x36, 0x1b, 0x17, 0x2c, 0xf8, 0x7c, 0xd7, 0x24, - 0xf8, 0x7c, 0x9b, 0x14, 0x48, 0x80, 0xbc, 0xa4, 0x95, 0x81, 0x40, 0x65, 0x26, 0x20, 0x21, 0x2b, - 0x39, 0x04, 0x31, 0xd3, 0x05, 0x59, 0x0c, 0x79, 0x47, 0x0f, 0x75, 0x4b, 0xf8, 0x91, 0x81, 0x2d, - 0x4b, 0x25, 0xa1, 0x59, 0xff, 0xcb, 0x04, 0xd9, 0xdb, 0xf3, 0xa9, 0xc3, 0xd5, 0xa3, 0xbe, 0x67, - 0xc2, 0x01, 0x4b, 0x46, 0x0b, 0xad, 0x42, 0x4a, 0xb5, 0x0e, 0xf7, 0x3b, 0x57, 0x1e, 0x90, 0xaf, - 0x28, 0x93, 0xb9, 0x5c, 0x16, 0x1e, 0x03, 0xc2, 0xcb, 0x86, 0x1f, 0x65, 0xb1, 0xe4, 0xbe, 0x52, - 0xfe, 0xf8, 0x93, 0x04, 0xca, 0xa1, 0xc5, 0x5f, 0x30, 0x2f, 0x2f, 0x11, 0xc1, 0x78, 0x3f, 0x19, - 0x7b, 0x7d, 0xbb, 0xef, 0x2e, 0x40, 0xbe, 0xd2, 0x04, 0xfb, 0x05, 0x3f, 0x06, 0xf2, 0x31, 0x02, - 0x41, 0x4c, 0xd8, 0x12, 0xdc, 0x08, 0x03, 0x77, 0xcc, 0x84, 0xa6, 0xc4, 0x85, 0x86, 0x9b, 0xa1, - 0xfc, 0xde, 0xb1, 0xc8, 0xdf, 0xb9, 0xc6, 0xd2, 0x82, 0xe1, 0x80, 0xbe, 0xdb, 0x5b, 0x4d, 0x11, - 0x2d, 0x8a, 0xbf, 0xfc, 0xb6, 0x9a, 0xfc, 0x37, 0x40, 0xda, 0x9b, 0x9d, 0x17, 0xf5, 0x4d, 0x49, - 0xd1, 0x2a, 0xba, 0x34, 0x1f, 0x59, 0x47, 0xf4, 0x25, 0x25, 0xf5, 0x6b, 0xea, 0x99, 0x93, 0x92, - 0xea, 0xef, 0xe8, 0xcc, 0x97, 0xa1, 0x25, 0x49, 0x22, 0x60, 0xb0, 0x65, 0x83, 0x91, 0xb3, 0x06, - 0x03, 0x0f, 0x5d, 0x48, 0xe4, 0x76, 0xfb, 0xca, 0x25, 0xc7, 0x78, 0x88, 0xc2, 0x37, 0x54, 0xb9, - 0x02, 0x00, 0xf2, 0x15, 0x8b, 0x81, 0x98, 0x02, 0xad, 0x6c, 0x56, 0x10, 0x49, 0x44, 0x5e, 0x4c, - 0xf0, 0xa5, 0x22, 0x68, 0xc8, 0x2e, 0xca, 0x38, 0x62, 0x10, 0x6f, 0xea, 0x04, 0xc2, 0x23, 0x05, - 0xc3, 0xa0, 0x83, 0x80, 0xa1, 0x96, 0x88, 0xd3, 0x84, 0xb8, 0x1c, 0x0e, 0xfd, 0x33, 0xf1, 0xc6, - 0x33, 0xb7, 0x98, 0xb1, 0x37, 0x87, 0x08, 0x81, 0x4d, 0x5b, 0xa6, 0xa2, 0xf0, 0x04, 0x38, 0x34, - 0x3e, 0x58, 0xfe, 0x2e, 0xdb, 0x6d, 0xd5, 0x7f, 0x05, 0x59, 0x98, 0x7a, 0xdd, 0xe6, 0x45, 0xea, - 0xbf, 0x1f, 0x16, 0x51, 0x7b, 0x08, 0x9a, 0x2b, 0x15, 0xd8, 0x1e, 0x83, 0x5f, 0x1c, 0x67, 0x5b, - 0x81, 0xdc, 0x1e, 0x22, 0x03, 0x41, 0x30, 0xf2, 0x6f, 0x2c, 0xe7, 0x1c, 0x98, 0x4c, 0x3f, 0x51, - 0xad, 0x2f, 0xd0, 0x67, 0xbe, 0x09, 0x65, 0x2e, 0x96, 0x91, 0x09, 0x71, 0x2a, 0xf0, 0xae, 0x24, - 0xb4, 0x92, 0xe2, 0x54, 0xdb, 0x69, 0xa7, 0xeb, 0x85, 0xf4, 0xad, 0x52, 0xb5, 0xd6, 0xdb, 0x4d, - 0xfd, 0x72, 0x8a, 0x49, 0x26, 0x9a, 0xf5, 0xaf, 0x9e, 0x7a, 0xe7, 0x87, 0xeb, 0xa3, 0xba, 0x3f, - 0xa3, 0xb1, 0x7d, 0x11, 0xc8, 0x9e, 0x89, 0x33, 0xe8, 0xe7, 0x4b, 0xea, 0x74, 0x93, 0x12, 0x09, - 0xcc, 0xc7, 0x2e, 0x17, 0x91, 0x11, 0xa3, 0xb9, 0x00, 0xd7, 0x4e, 0x5e, 0xad, 0x0f, 0xf1, 0x82, - 0xb8, 0xc1, 0xfc, 0x10, 0xe8, 0x41, 0x1c, 0x08, 0x5a, 0xdf, 0x54, 0x89, 0x99, 0xd3, 0x54, 0x70, - 0x30, 0xc2, 0x47, 0x11, 0x41, 0xf8, 0x50, 0xb0, 0x13, 0xd0, 0x87, 0xd5, 0x7c, 0xe8, 0x60, 0x32, - 0xc8, 0x95, 0xf4, 0x14, 0x74, 0x10, 0x8c, 0x0b, 0x40, 0x94, 0xe4, 0x7c, 0xa1, 0xe1, 0x4e, 0x62, - 0xa7, 0x04, 0x0b, 0xec, 0xb7, 0x02, 0x35, 0x5d, 0x4c, 0xbd, 0x34, 0x60, 0xf4, 0x66, 0xc1, 0xc3, - 0xb1, 0x47, 0x1b, 0xee, 0x2f, 0x74, 0xb4, 0x72, 0x03, 0x8e, 0x71, 0x30, 0x52, 0x67, 0x0d, 0x8c, - 0xab, 0xbb, 0x15, 0x9f, 0xf6, 0x3e, 0xaf, 0xf7, 0xc2, 0x82, 0x4e, 0x84, 0xea, 0xcd, 0xb0, 0x19, - 0xe6, 0x6f, 0x5c, 0x43, 0xde, 0x6a, 0x38, 0x75, 0x69, 0x9f, 0x39, 0x32, 0xc4, 0xc2, 0x84, 0xbb, - 0xd0, 0x6f, 0x77, 0xbc, 0xb9, 0xb4, 0x72, 0x0f, 0x7c, 0x60, 0xa2, 0x31, 0x1e, 0xee, 0xfe, 0x15, - 0x69, 0x89, 0x70, 0xb7, 0x89, 0x60, 0xd6, 0x2f, 0x10, 0x17, 0xc4, 0x09, 0xfa, 0x0b, 0x9d, 0x3e, - 0xbd, 0xf5, 0x22, 0x49, 0xd6, 0x2f, 0xae, 0x53, 0xf5, 0xef, 0xab, 0xc2, 0xdd, 0x62, 0x93, 0xa2, - 0x15, 0x3e, 0xa7, 0x4b, 0xc4, 0x98, 0x43, 0x18, 0x8b, 0x11, 0xac, 0x71, 0x23, 0x0c, 0xee, 0x3b, - 0x48, 0x42, 0x56, 0x0e, 0x07, 0x9e, 0xa4, 0x2d, 0xb4, 0xed, 0x97, 0x87, 0x8e, 0xb0, 0x90, 0x68, - 0x9d, 0x05, 0x06, 0x6b, 0xb6, 0x4c, 0x7f, 0x85, 0x2e, 0x7a, 0x41, 0x7b, 0x78, 0x63, 0x14, 0x02, - 0x1e, 0x0c, 0x78, 0x44, 0xce, 0x7e, 0xd3, 0x4e, 0x29, 0x63, 0x0c, 0x99, 0x41, 0x5f, 0xfe, 0x10, - 0xbe, 0xfe, 0x45, 0x0a, 0x7c, 0x82, 0x71, 0x31, 0x36, 0x2c, 0xf1, 0x31, 0x87, 0x3e, 0x4b, 0x17, - 0x74, 0xa5, 0xa7, 0x19, 0x6c, 0x80, 0xde, 0xd0, 0x3f, 0x82, 0xca, 0xa6, 0x38, 0xab, 0x50, 0x34, - 0x69, 0x99, 0x44, 0x6a, 0x32, 0xa1, 0xd9, 0x24, 0x74, 0xe2, 0x26, 0x2b, 0x53, 0xaf, 0xe2, 0x01, - 0x68, 0xa6, 0xd6, 0x24, 0xb1, 0x55, 0x57, 0xf1, 0x00, 0xa0, 0xa2, 0x3e, 0x16, 0x37, 0x29, 0x3b, - 0xbb, 0xd7, 0xd0, 0x44, 0xe9, 0x5d, 0x12, 0xaf, 0xac, 0x12, 0xf4, 0x71, 0xd5, 0xf4, 0x66, 0xbe, - 0xb5, 0x1b, 0xd5, 0xbe, 0x6b, 0x6d, 0x9f, 0xbb, 0x89, 0xea, 0x55, 0x95, 0xd1, 0x32, 0xbe, 0x8a, - 0x9d, 0x7a, 0x9e, 0xfa, 0x29, 0xd3, 0x89, 0x10, 0x0a, 0x87, 0x3b, 0xec, 0x67, 0x83, 0xe2, 0x05, - 0x84, 0xce, 0x07, 0xc1, 0xe1, 0xf4, 0xbf, 0x1a, 0x20, 0xbc, 0x3b, 0x05, 0x43, 0xfc, 0x60, 0xa2, - 0x4c, 0x74, 0x08, 0x42, 0x07, 0x7c, 0xa2, 0x23, 0x4b, 0x30, 0x60, 0x25, 0x99, 0x31, 0xac, 0xbc, - 0xf8, 0x60, 0x4c, 0x45, 0x8f, 0xda, 0x1c, 0x13, 0x8c, 0x19, 0x23, 0x33, 0xef, 0x61, 0x2e, 0x24, - 0xc5, 0x5d, 0x45, 0xd1, 0x70, 0xe3, 0x93, 0xbd, 0xb1, 0x57, 0xc3, 0xff, 0xfc, 0x29, 0x98, 0x86, - 0xfa, 0x98, 0x37, 0xca, 0xea, 0x99, 0x13, 0xf0, 0x4e, 0xa0, 0x51, 0x21, 0xe8, 0x5c, 0x2d, 0x56, - 0x62, 0x44, 0xa3, 0x85, 0xb0, 0x3f, 0x1e, 0xb0, 0x91, 0xf8, 0x54, 0xb2, 0x0a, 0xab, 0xb8, 0x6e, - 0x1f, 0x04, 0xbb, 0x49, 0xd1, 0xfa, 0xf1, 0x36, 0x05, 0x4a, 0x31, 0xda, 0x99, 0x6f, 0x12, 0x14, - 0x9d, 0xec, 0xc5, 0x85, 0x86, 0x36, 0x32, 0x2b, 0x8d, 0xf8, 0x6d, 0x17, 0xa9, 0x7e, 0xde, 0xdb, - 0xf1, 0x11, 0x92, 0xfa, 0xd2, 0x49, 0x27, 0x36, 0x4b, 0xec, 0x0c, 0x01, 0xed, 0xaf, 0xc0, 0x01, - 0x56, 0xc6, 0xc9, 0x10, 0x7f, 0xb7, 0xa3, 0xec, 0x3a, 0x48, 0x9d, 0xb7, 0x85, 0x0b, 0x77, 0x7d, - 0xdf, 0x78, 0x93, 0x1b, 0x86, 0x46, 0x6b, 0xc3, 0x9e, 0x3d, 0x20, 0xa7, 0xcb, 0x23, 0x9b, 0x6c, - 0xc2, 0x68, 0xf0, 0x52, 0x1e, 0x20, 0x28, 0x53, 0x0c, 0x4b, 0x06, 0xd2, 0x93, 0xa0, 0x23, 0x8a, - 0x74, 0xd2, 0x01, 0x58, 0xac, 0xee, 0x93, 0xd2, 0xe1, 0x66, 0xef, 0x29, 0xfe, 0x3b, 0x35, 0x35, - 0x08, 0xa4, 0xba, 0xd5, 0x15, 0xce, 0xab, 0xe1, 0x01, 0x0e, 0x48, 0xcf, 0x54, 0xdb, 0xae, 0x16, - 0xd3, 0x19, 0xd0, 0x55, 0xc9, 0xfa, 0xd5, 0x75, 0x31, 0xbe, 0xa9, 0x50, 0xde, 0x08, 0xc8, 0xb5, - 0xb1, 0xf5, 0x63, 0xeb, 0x23, 0xa4, 0xdd, 0x16, 0xaf, 0x82, 0x71, 0x90, 0x74, 0x4c, 0x41, 0xd1, - 0x30, 0x35, 0x82, 0x40, 0xaa, 0xa6, 0xc9, 0x1d, 0xff, 0x1a, 0x22, 0x4b, 0xbc, 0xbe, 0x42, 0x66, - 0x00, 0xc0, 0xc2, 0xb3, 0x78, 0x46, 0xa7, 0xcc, 0xa7, 0x81, 0xaf, 0xe0, 0x23, 0x1a, 0xa8, 0xfb, - 0x10, 0x72, 0x69, 0x93, 0xa4, 0xa0, 0xda, 0x6d, 0x65, 0x84, 0x5c, 0x04, 0xad, 0xad, 0x7e, 0x25, - 0xb5, 0x73, 0x39, 0xfa, 0xcb, 0x96, 0xd7, 0xc6, 0xcf, 0x05, 0xf2, 0x87, 0x7c, 0xc2, 0xb8, 0xb6, - 0x7c, 0x1c, 0x4b, 0x5b, 0x41, 0x0b, 0x57, 0xc9, 0x2e, 0x63, 0xe9, 0xf1, 0xc4, 0xc9, 0x01, 0xfe, - 0x8f, 0x5a, 0x74, 0x40, 0x7d, 0x0e, 0xdd, 0x5b, 0x31, 0xc5, 0xf2, 0x4e, 0x33, 0xa9, 0x3f, 0x4c, - 0x8c, 0xe8, 0x7b, 0x5a, 0x9c, 0x46, 0xa6, 0x8f, 0x3e, 0x44, 0xfa, 0x61, 0xf6, 0x49, 0x5a, 0x96, - 0x1f, 0x82, 0x98, 0xb8, 0xb9, 0x78, 0xbb, 0x3f, 0xc5, 0xd6, 0x55, 0xbe, 0x36, 0x26, 0xc0, 0x14, - 0x74, 0xdf, 0xa4, 0xcc, 0xc7, 0x0a, 0x56, 0x4c, 0xde, 0x63, 0x73, 0x51, 0x19, 0x44, 0x54, 0x69, - 0x83, 0x4a, 0xf9, 0x9c, 0xd0, 0x68, 0x32, 0xfa, 0x63, 0x8a, 0xec, 0xbd, 0xa1, 0xa3, 0xa4, 0x17, - 0x75, 0xfa, 0x8c, 0xf4, 0x32, 0x8d, 0xdd, 0xff, 0xbf, 0x7d, 0x64, 0xa7, 0xf8, 0x53, 0x0e, 0x36, - 0x91, 0xd0, 0xb6, 0xe8, 0x95, 0x44, 0x3b, 0x1c, 0xdc, 0xa4, 0x1a, 0x81, 0x2b, 0xc4, 0xe8, 0x02, - 0x70, 0x98, 0xe4, 0xbf, 0x58, 0x55, 0xe6, 0x3f, 0x8f, 0xf3, 0xce, 0x2d, 0x8d, 0x51, 0x9e, 0x77, - 0xc3, 0xf9, 0xec, 0xbf, 0xd6, 0xb4, 0x9f, 0xc4, 0xb1, 0x39, 0x7a, 0x94, 0xe8, 0x31, 0x22, 0x41, - 0x59, 0x5c, 0x4b, 0xdf, 0x3b, 0x19, 0x08, 0x2f, 0x95, 0xef, 0x8c, 0x18, 0xef, 0x19, 0xe3, 0xd8, - 0x0e, 0xd4, 0x5b, 0x26, 0x13, 0x43, 0xdd, 0xdd, 0x4e, 0x3f, 0x84, 0x3d, 0x08, 0xd1, 0xca, 0xef, - 0x70, 0xb0, 0x66, 0x22, 0x33, 0xda, 0xa4, 0x9e, 0xcb, 0xaf, 0xa6, 0xfa, 0x0b, 0xa7, 0x6b, 0xa9, - 0x12, 0xfa, 0xb8, 0x09, 0xf4, 0x44, 0xe9, 0x75, 0x7f, 0xaa, 0x64, 0xfa, 0xb4, 0x5f, 0x04, 0xe6, - 0x77, 0x46, 0x8d, 0x86, 0xa3, 0x59, 0x13, 0x46, 0x09, 0xe3, 0xbf, 0x5c, 0x3e, 0x09, 0x08, 0xc0, - 0x81, 0x4f, 0xac, 0x0a, 0x37, 0x32, 0x9c, 0x11, 0xdf, 0x87, 0x88, 0x73, 0x0e, 0x90, 0x6c, 0x70, - 0x88, 0x5c, 0xb3, 0x55, 0xd4, 0x5d, 0x7d, 0x37, 0xbf, 0x85, 0x22, 0x9b, 0x18, 0x58, 0x0a, 0x9f, - 0xc5, 0x59, 0x53, 0x8e, 0x1d, 0xc7, 0xc3, 0x67, 0xd2, 0x5e, 0xe2, 0x60, 0xa8, 0xa2, 0xbb, 0xb6, - 0x77, 0x3e, 0x54, 0x53, 0x51, 0x4d, 0x7b, 0xe0, 0xa6, 0xcd, 0x21, 0x13, 0xc1, 0x04, 0xe2, 0x59, - 0x08, 0xf2, 0x1a, 0xd5, 0x5f, 0xe8, 0xad, 0xf3, 0x56, 0xbf, 0x05, 0x25, 0x43, 0x2e, 0x5d, 0xc6, - 0xea, 0xb6, 0x98, 0xba, 0xf7, 0xc6, 0x04, 0x35, 0x61, 0x45, 0x3e, 0xb6, 0xe3, 0xe0, 0xf1, 0xbc, - 0x22, 0x70, 0xb2, 0x0a, 0xa4, 0xcf, 0x61, 0x4d, 0x75, 0x19, 0xea, 0xdd, 0x9f, 0x08, 0x7a, 0x50, - 0x54, 0xe1, 0xec, 0xec, 0xd0, 0xd3, 0x16, 0x60, 0x95, 0xa6, 0x28, 0xfd, 0x8a, 0xe8, 0x32, 0x96, - 0x10, 0xe8, 0x43, 0x23, 0xfa, 0x09, 0xb9, 0xe2, 0x50, 0xe1, 0xcf, 0xf1, 0x21, 0x21, 0x8a, 0x7d, - 0x6f, 0xab, 0x79, 0x72, 0xc1, 0x8a, 0xac, 0x4c, 0x17, 0x4d, 0x78, 0x91, 0xcf, 0x84, 0x22, 0xd2, - 0x0b, 0x9f, 0x18, 0x4b, 0x19, 0x0a, 0x92, 0x0a, 0x99, 0x27, 0xfd, 0x98, 0x44, 0xb1, 0xa2, 0x7e, - 0x6f, 0x12, 0x39, 0x29, 0xad, 0xc7, 0x14, 0x53, 0x70, 0x9c, 0x34, 0xef, 0xad, 0xdd, 0xaf, 0xc2, - 0x84, 0x1c, 0x77, 0x4c, 0xc7, 0x7a, 0x1d, 0x85, 0x8e, 0x09, 0x49, 0xcf, 0xdb, 0xc3, 0x4a, 0x7c, - 0x83, 0x3d, 0xad, 0xbd, 0xd9, 0x41, 0x70, 0x3f, 0x52, 0x09, 0x78, 0x66, 0x0f, 0x8d, 0x22, 0x60, - 0xbf, 0x0d, 0xfd, 0x1c, 0x95, 0x54, 0x41, 0xba, 0x67, 0x29, 0xf8, 0x98, 0x50, 0xa1, 0x7b, 0x1b, - 0xd6, 0x30, 0x01, 0xbd, 0xe7, 0xd0, 0xfb, 0x1d, 0x1b, 0xe5, 0xbb, 0x72, 0xe3, 0xe9, 0xb3, 0x63, - 0x88, 0x82, 0xa3, 0xa9, 0x19, 0x27, 0xcb, 0x77, 0x6d, 0x37, 0xb7, 0xdf, 0x65, 0x77, 0x2e, 0x1c, - 0xc0, 0x9c, 0x41, 0x9d, 0x2b, 0x57, 0x3a, 0x83, 0xff, 0x18, 0x22, 0x33, 0x9e, 0x77, 0xc6, 0xd2, - 0x0c, 0xe1, 0x61, 0xc0, 0xeb, 0xa9, 0xbf, 0x93, 0x8e, 0xb1, 0x37, 0x5d, 0x53, 0xbf, 0x05, 0x05, - 0x42, 0x08, 0xe2, 0x39, 0xe5, 0x8f, 0x1d, 0xf6, 0xc0, 0x29, 0xd0, 0xba, 0xfa, 0xe5, 0xf2, 0xeb, - 0x77, 0xd1, 0x72, 0xae, 0x88, 0xf5, 0xd5, 0xe5, 0xea, 0xff, 0x5c, 0xab, 0xab, 0x9f, 0x44, 0x72, - 0xb8, 0x24, 0xf1, 0x27, 0x1f, 0xc4, 0x02, 0x3d, 0xdd, 0xd8, 0x3e, 0x2c, 0xcf, 0x3f, 0xac, 0xc4, - 0x1f, 0x8c, 0x8b, 0x83, 0xda, 0x24, 0xc3, 0x70, 0xb2, 0x85, 0xfc, 0x1e, 0x8c, 0x75, 0xa6, 0x3b, - 0xaa, 0x20, 0x33, 0xa6, 0x33, 0xb6, 0x4c, 0x6e, 0x18, 0xea, 0x1a, 0x82, 0xd4, 0x80, 0xc5, 0xfe, - 0x1f, 0xa0, 0x01, 0xf4, 0xe7, 0x8e, 0x61, 0x74, 0x25, 0xf8, 0x98, 0x2d, 0xdc, 0x9d, 0xbd, 0x76, - 0xbf, 0xf0, 0x55, 0xdd, 0x1b, 0x52, 0xed, 0x14, 0x99, 0x2a, 0x7d, 0x17, 0x95, 0x7a, 0xb9, 0xe2, - 0x3e, 0x30, 0x80, 0xff, 0x99, 0x8a, 0xb4, 0x21, 0xab, 0xba, 0xc6, 0x6d, 0x9d, 0xf8, 0x8b, 0x55, - 0x22, 0x8d, 0xaa, 0x17, 0xc5, 0x0c, 0xbd, 0xdd, 0xff, 0x08, 0x70, 0x64, 0xe5, 0x44, 0x4c, 0xa9, - 0xce, 0x54, 0x7b, 0x95, 0x14, 0x61, 0x91, 0x18, 0x4f, 0xa1, 0xbd, 0xf4, 0x5c, 0xbe, 0xb1, 0x5f, - 0x44, 0x87, 0x13, 0xd6, 0x29, 0x78, 0x28, 0x35, 0xc7, 0x86, 0xc1, 0xe7, 0x07, 0xaa, 0x2f, 0x95, - 0x0d, 0xd1, 0xfc, 0x29, 0x49, 0x8e, 0x68, 0x67, 0xa0, 0x81, 0xeb, 0x53, 0x63, 0x36, 0xd9, 0xc0, - 0xb0, 0xde, 0x70, 0x2c, 0x0e, 0xdf, 0x05, 0x57, 0x6f, 0xaa, 0xd5, 0x6a, 0xbf, 0xf8, 0x48, 0xaa, - 0x4e, 0xaa, 0x39, 0x55, 0x7e, 0x32, 0x6d, 0xc3, 0xa9, 0x7d, 0x34, 0xda, 0xd4, 0x9d, 0xb2, 0xff, - 0x1a, 0x32, 0xf0, 0xdf, 0x58, 0xdc, 0x6f, 0x12, 0x40, 0xd0, 0x63, 0x50, 0x6e, 0x04, 0xe2, 0x4a, - 0x87, 0x6d, 0x88, 0x8f, 0x0a, 0xfe, 0x62, 0xbb, 0x31, 0xa4, 0x97, 0x37, 0x3c, 0x1c, 0xed, 0x98, - 0xff, 0xb7, 0x37, 0xc4, 0xc6, 0x45, 0x18, 0xa8, 0xfa, 0x74, 0x69, 0x0a, 0xd5, 0x72, 0x4e, 0x2b, - 0x22, 0xfb, 0xa4, 0x78, 0x24, 0x13, 0x9c, 0x2c, 0x67, 0xb9, 0xbb, 0xf8, 0x2b, 0x39, 0x7c, 0x59, - 0x3c, 0x24, 0xce, 0x3e, 0x83, 0x2b, 0xe5, 0x1e, 0x9a, 0x88, 0x03, 0x61, 0xf4, 0xdf, 0x49, 0x5f, - 0x89, 0x10, 0x09, 0xfb, 0xbb, 0xbe, 0xfc, 0x47, 0x89, 0x85, 0x04, 0xe6, 0x51, 0x4e, 0xd4, 0x8c, - 0x75, 0xb4, 0x8c, 0xf7, 0xcb, 0x40, 0x63, 0x40, 0xb8, 0x73, 0x14, 0xf7, 0x6b, 0xc1, 0x4d, 0x8c, - 0xd9, 0x43, 0x5a, 0x8b, 0xb1, 0xd0, 0x1b, 0xbc, 0x91, 0x30, 0x44, 0x46, 0xca, 0x57, 0x99, 0x56, - 0x74, 0xf8, 0xc1, 0x07, 0x0b, 0x02, 0x1c, 0xdd, 0xe7, 0xc7, 0x77, 0xed, 0xff, 0x05, 0x7a, 0x8c, - 0xca, 0x88, 0xe7, 0x92, 0xab, 0xb6, 0xe4, 0xf1, 0x80, 0xae, 0x6f, 0x82, 0x30, 0x88, 0xac, 0x56, - 0x2b, 0x15, 0xd4, 0x2b, 0xd1, 0x35, 0x5d, 0x1d, 0x3a, 0xf4, 0x54, 0xeb, 0xd1, 0x18, 0xfa, 0x94, - 0x15, 0xd1, 0x9b, 0xea, 0xdf, 0x45, 0x72, 0xfa, 0xbd, 0x70, 0x5c, 0x32, 0x65, 0x55, 0x6b, 0x7f, - 0x12, 0x33, 0x3f, 0x26, 0xa3, 0x51, 0x99, 0x2b, 0x87, 0xc0, 0xd9, 0x3c, 0x01, 0xaf, 0xe5, 0xfa, - 0x29, 0xe2, 0xd9, 0x23, 0x87, 0xde, 0x5b, 0x7c, 0x38, 0x9f, 0xa1, 0x3d, 0xf0, 0x89, 0x94, 0xd0, - 0x17, 0x3f, 0x1e, 0x65, 0x06, 0xe3, 0xfe, 0x49, 0x56, 0x3f, 0xc1, 0x4d, 0xd0, 0xc6, 0x5f, 0x5a, - 0xd4, 0xa3, 0x19, 0xa7, 0xd5, 0x56, 0xef, 0x77, 0x3e, 0x14, 0x91, 0x21, 0x7e, 0x6e, 0x20, 0xf9, - 0x3a, 0xc1, 0x7a, 0x14, 0xa4, 0xaa, 0x28, 0x7d, 0x89, 0x8b, 0xbe, 0x14, 0x9c, 0x72, 0x0f, 0x89, - 0x03, 0xa5, 0xdf, 0x06, 0xe0, 0x33, 0x95, 0xb6, 0x68, 0x7c, 0x7f, 0xcb, 0xf3, 0xde, 0xe8, 0x7e, - 0x6a, 0x4b, 0xaf, 0x84, 0x0a, 0xfd, 0xc4, 0xbd, 0xb8, 0x72, 0x0e, 0x87, 0x7a, 0xe4, 0x2a, 0xa3, - 0xa5, 0xe2, 0x39, 0x6e, 0xc3, 0x15, 0x66, 0x81, 0x52, 0x32, 0x18, 0x91, 0x20, 0xaf, 0x77, 0xa8, - 0xa0, 0x95, 0x55, 0x54, 0x5d, 0x4f, 0xef, 0x84, 0x37, 0x77, 0x58, 0xbb, 0x45, 0xc7, 0xbe, 0x26, - 0x08, 0xc9, 0xaa, 0xf7, 0xc1, 0x1e, 0x4c, 0x2e, 0x7e, 0xf8, 0xac, 0x34, 0x0e, 0x0b, 0xea, 0xbe, - 0x0a, 0x85, 0x16, 0x37, 0x3e, 0x16, 0xde, 0x25, 0xee, 0x1e, 0x12, 0x04, 0xb1, 0xd4, 0x7c, 0x4e, - 0x1e, 0x52, 0xbb, 0xdb, 0x8b, 0xe8, 0x5b, 0x1f, 0x5d, 0x7d, 0x1b, 0x52, 0x74, 0x7c, 0xbe, 0x5a, - 0xbb, 0xdf, 0x5c, 0xe7, 0xd7, 0x39, 0xf5, 0xce, 0x7d, 0x6a, 0x7e, 0x8a, 0x54, 0xe2, 0x60, 0xb0, - 0x55, 0x55, 0xea, 0x6e, 0xde, 0x2b, 0x72, 0xdd, 0xbe, 0x09, 0x62, 0xea, 0xab, 0x36, 0x5a, 0x6f, - 0x93, 0xa6, 0xfc, 0x48, 0x50, 0x41, 0xcf, 0x2d, 0x96, 0x37, 0x4f, 0x15, 0x8a, 0xc5, 0x1b, 0x9a, - 0xaa, 0x54, 0x56, 0x7e, 0xfc, 0xe5, 0xe2, 0x04, 0x89, 0x5a, 0x9b, 0xe2, 0xff, 0x98, 0xae, 0x45, - 0x0f, 0x3e, 0x14, 0x14, 0xb2, 0xab, 0x1a, 0x6f, 0xc9, 0xa3, 0x1a, 0x25, 0x25, 0x0e, 0x0e, 0x40, - 0x1f, 0x4d, 0x73, 0xdf, 0x1f, 0x77, 0xc2, 0x98, 0x46, 0xf5, 0xca, 0xa8, 0xba, 0xb6, 0xaa, 0xa2, - 0xea, 0xa2, 0xff, 0xe2, 0x61, 0x43, 0xc4, 0x2a, 0x18, 0x6d, 0xef, 0x62, 0xec, 0xe9, 0x0f, 0xfb, - 0x4c, 0x2a, 0xa0, 0xac, 0xf7, 0xef, 0xc4, 0xc1, 0x4e, 0xb5, 0x51, 0x75, 0x57, 0xb4, 0xfd, 0xf1, - 0x07, 0x88, 0x84, 0x6c, 0x1d, 0xd6, 0xb8, 0xf2, 0xee, 0xcf, 0x97, 0x44, 0xc8, 0x25, 0xf3, 0x62, - 0xe0, 0xb4, 0x52, 0xaa, 0x93, 0x15, 0x55, 0x51, 0xbb, 0xe1, 0x1b, 0x73, 0xfd, 0xee, 0xb6, 0x33, - 0x7c, 0x17, 0xc1, 0x71, 0x77, 0x71, 0x58, 0x51, 0xf2, 0x07, 0xbf, 0x13, 0x0a, 0x14, 0x23, 0xc5, - 0x12, 0x66, 0x43, 0x6e, 0x22, 0x3d, 0xab, 0xd2, 0x9a, 0x12, 0x5c, 0xc6, 0xc6, 0x79, 0x26, 0x09, - 0x7f, 0x2a, 0x73, 0x15, 0x2d, 0x1d, 0xf2, 0x59, 0xb3, 0x21, 0x26, 0x12, 0xf2, 0x11, 0x4b, 0xc5, - 0xcd, 0x4f, 0x04, 0xa2, 0x9c, 0xf9, 0x0f, 0x2e, 0x17, 0x1c, 0xf1, 0x84, 0x5f, 0x2d, 0xdd, 0xdc, - 0x29, 0xd1, 0xdb, 0xeb, 0x1a, 0x4e, 0xb1, 0xef, 0xa2, 0xf8, 0xac, 0x48, 0x27, 0xbe, 0x6e, 0xb1, - 0x8b, 0xc7, 0x18, 0xc4, 0x3d, 0x1a, 0x3f, 0xc1, 0x19, 0x56, 0xab, 0x3f, 0xc2, 0x93, 0x50, 0x5d, - 0xa5, 0x49, 0xd9, 0x85, 0x99, 0x33, 0x50, 0x98, 0xbb, 0x30, 0xbc, 0xf7, 0x84, 0x41, 0x58, 0xab, - 0x6b, 0x87, 0x9e, 0x62, 0x5e, 0x82, 0x69, 0x89, 0xc0, 0x39, 0x9f, 0xdd, 0x5d, 0x0d, 0xef, 0x8d, - 0x10, 0x66, 0x0e, 0x1e, 0x6c, 0x38, 0x79, 0x6d, 0xb3, 0xdf, 0x8b, 0x9c, 0x2a, 0x05, 0xc9, 0x84, - 0xf0, 0x3a, 0xfc, 0x75, 0xfd, 0xdf, 0x7b, 0xaf, 0x82, 0x2a, 0x8b, 0xb6, 0xaf, 0x5c, 0x10, 0x8d, - 0x7b, 0x76, 0x7c, 0x12, 0x11, 0xc5, 0x6e, 0xef, 0xf0, 0x47, 0x17, 0x17, 0x55, 0xea, 0xe2, 0x89, - 0x29, 0x97, 0x80, 0xd3, 0xb7, 0xf0, 0x4b, 0xd3, 0x7a, 0xa7, 0x4d, 0xeb, 0x89, 0x13, 0xcb, 0x97, - 0xbf, 0xa1, 0x9d, 0xf0, 0x44, 0x75, 0xba, 0xd5, 0x70, 0x98, 0x90, 0xe2, 0x04, 0xac, 0x34, 0xb4, - 0x55, 0x32, 0x8c, 0xce, 0x7c, 0x7e, 0x21, 0x74, 0xdf, 0x82, 0x42, 0x0b, 0x34, 0x68, 0xd1, 0xfc, - 0xf8, 0xbd, 0x27, 0xd6, 0xcb, 0xc1, 0x50, 0xc8, 0xea, 0xec, 0xb7, 0x15, 0x86, 0x80, 0x57, 0x27, - 0xb9, 0xf8, 0xf8, 0x2b, 0xe8, 0x47, 0xb2, 0x46, 0xc2, 0xb5, 0xb7, 0xe5, 0xcf, 0x7c, 0x15, 0xa1, - 0x2e, 0x84, 0xb9, 0x2f, 0x21, 0x5d, 0x55, 0xfd, 0x70, 0xfa, 0xc5, 0xf2, 0x5e, 0xbf, 0x7a, 0xab, - 0x3f, 0x51, 0xcd, 0xf0, 0xa1, 0xa5, 0xc6, 0x15, 0xde, 0xac, 0xce, 0x41, 0x15, 0xd4, 0xaa, 0xab, - 0x17, 0xc5, 0xf2, 0x7c, 0xd0, 0x58, 0x5e, 0x2a, 0x81, 0xe2, 0x64, 0x47, 0xa5, 0x55, 0xf1, 0x30, - 0x85, 0xee, 0xdc, 0xec, 0x5d, 0xde, 0xfe, 0x20, 0x60, 0x82, 0xf2, 0xdb, 0x97, 0x2b, 0xd7, 0x88, - 0x1f, 0x0a, 0x8d, 0x45, 0xb6, 0x9f, 0xe7, 0xc6, 0x8d, 0x6d, 0x5b, 0xaa, 0xe5, 0x20, 0xdf, 0xe9, - 0xba, 0xaa, 0x0a, 0x7e, 0xb2, 0x43, 0xe3, 0x2b, 0xaa, 0x65, 0x65, 0xe8, 0x98, 0xf7, 0x76, 0xd4, - 0x6a, 0x9e, 0xc9, 0x2d, 0xe4, 0xf6, 0xbb, 0xaa, 0xd7, 0xc1, 0x11, 0x4e, 0xa5, 0x36, 0xd3, 0x6f, - 0x82, 0x4a, 0xad, 0x7b, 0xe0, 0x8c, 0xfb, 0x1a, 0xf7, 0xc4, 0x0a, 0x4d, 0xb6, 0xee, 0xff, 0x98, - 0xeb, 0xaf, 0xa8, 0xed, 0xf4, 0x57, 0xae, 0xc6, 0x3c, 0xf0, 0x7f, 0x62, 0xd1, 0x07, 0x26, 0xff, - 0xfa, 0x35, 0x71, 0x31, 0xe2, 0x4e, 0x45, 0xa2, 0x0c, 0x62, 0xee, 0xa2, 0xe2, 0xe2, 0xe2, 0xfe, - 0x62, 0x5a, 0x6b, 0xe0, 0x86, 0xaa, 0xb7, 0xf1, 0x01, 0x3c, 0x9c, 0xba, 0xc8, 0x26, 0xa8, 0x97, - 0x13, 0x04, 0x42, 0x84, 0x9e, 0xa2, 0xe2, 0xfd, 0xf0, 0x57, 0xb8, 0xed, 0x79, 0x6c, 0x98, 0x7c, - 0x56, 0xa4, 0xfd, 0x31, 0x61, 0xc9, 0xd0, 0x9f, 0x87, 0xd7, 0xe9, 0xfa, 0x25, 0x45, 0xf5, 0x75, - 0x44, 0xc1, 0x1e, 0x5f, 0x2f, 0xef, 0x8d, 0xbb, 0x4c, 0x18, 0xe7, 0x0b, 0x93, 0x97, 0xd0, 0x84, - 0xbf, 0x1b, 0xc7, 0x33, 0x15, 0x10, 0x7f, 0x08, 0x3a, 0xba, 0x06, 0x0b, 0x09, 0x5f, 0xfe, 0x14, - 0xca, 0xaa, 0xaa, 0xa0, 0xb9, 0x65, 0x65, 0xe6, 0xa3, 0xfd, 0x17, 0xbe, 0x0a, 0x6a, 0x4f, 0x59, - 0xaa, 0x6a, 0xa4, 0x20, 0xef, 0xe2, 0x01, 0x70, 0xa4, 0xcf, 0x79, 0x6c, 0xb6, 0xf4, 0xf1, 0xfe, - 0x24, 0x68, 0xac, 0xfc, 0x51, 0xbf, 0xbd, 0x18, 0x95, 0x23, 0x58, 0xf1, 0x44, 0xcb, 0x6a, 0xa2, - 0xea, 0x2f, 0xc4, 0x02, 0xa2, 0x93, 0x94, 0x43, 0x2f, 0xc3, 0xf0, 0x6a, 0x95, 0xfc, 0xfc, 0x07, - 0x84, 0x09, 0xd5, 0x75, 0xd8, 0xd7, 0x9f, 0x0a, 0x6f, 0x5a, 0x03, 0x1b, 0xb9, 0x6c, 0x74, 0x6c, - 0x63, 0xeb, 0x55, 0xd7, 0xc2, 0x99, 0xfd, 0xeb, 0x1e, 0xa2, 0x6c, 0x66, 0x48, 0xba, 0x83, 0xf4, - 0xed, 0x91, 0xc1, 0xf0, 0x52, 0x46, 0x3e, 0xbc, 0xde, 0x6f, 0x37, 0xef, 0x85, 0x0f, 0xc9, 0x62, - 0xf9, 0x38, 0x85, 0x8e, 0xca, 0x41, 0xd7, 0x55, 0xcb, 0xe0, 0x8a, 0xc4, 0xf7, 0xff, 0xc1, 0x11, - 0xaf, 0x6d, 0x8f, 0x84, 0x2a, 0xab, 0x55, 0xdd, 0xef, 0xeb, 0xdf, 0x31, 0x5c, 0x56, 0xe2, 0xbf, - 0x05, 0x82, 0x2e, 0xef, 0x9e, 0x9d, 0xc5, 0x71, 0xcf, 0x82, 0x13, 0xbb, 0xbb, 0x8e, 0x3f, 0xc4, - 0x02, 0x82, 0xe8, 0xde, 0x5a, 0x1e, 0x4e, 0x92, 0x3b, 0xf0, 0x81, 0x1c, 0xb0, 0x64, 0xa8, 0xcb, - 0x74, 0x98, 0xdb, 0x32, 0x24, 0x6a, 0x84, 0x46, 0xf8, 0x28, 0xb2, 0x64, 0xa0, 0x16, 0xa0, 0x49, - 0x33, 0x66, 0x42, 0x6c, 0xf8, 0xc8, 0xef, 0x9a, 0x8a, 0xa5, 0x7e, 0x8b, 0xb9, 0xe5, 0x54, 0x34, - 0x65, 0xa7, 0xf1, 0x31, 0x3b, 0xdd, 0x57, 0xc4, 0x08, 0x04, 0x45, 0x6e, 0x7f, 0x4c, 0xb8, 0x85, - 0xef, 0x8d, 0x15, 0xba, 0x65, 0xdc, 0xb6, 0x7f, 0x2f, 0xec, 0xe5, 0x41, 0x54, 0x1c, 0xd0, 0x15, - 0x58, 0x35, 0x85, 0x69, 0x6a, 0xb7, 0xbf, 0xc1, 0x1e, 0x86, 0x11, 0x3a, 0x73, 0x9e, 0x61, 0x81, - 0x3a, 0x3c, 0x55, 0xd5, 0x8f, 0xab, 0x05, 0xd1, 0x9e, 0x23, 0x92, 0xbb, 0xfa, 0xf4, 0x47, 0x04, - 0xf8, 0x87, 0xc4, 0x2c, 0x3d, 0xbc, 0xb5, 0xf0, 0x5a, 0x7a, 0x1a, 0xf8, 0xc4, 0x67, 0x78, 0x84, - 0x4e, 0xf8, 0x24, 0x21, 0xfe, 0x70, 0x40, 0x3f, 0xf1, 0x03, 0xce, 0xc5, 0x2a, 0xa4, 0x60, 0x5e, - 0x55, 0x54, 0xc6, 0x3f, 0x12, 0x08, 0xfb, 0x6a, 0x7b, 0xe0, 0x88, 0xaa, 0x95, 0xdf, 0xe0, 0xa6, - 0xb5, 0x55, 0xaa, 0x1a, 0xe8, 0x66, 0x5b, 0xe4, 0xb6, 0x6e, 0xf5, 0xe2, 0x44, 0x02, 0xcb, 0xdf, - 0x8c, 0xcb, 0xd0, 0xea, 0xcf, 0xfc, 0x4c, 0x16, 0x77, 0x3f, 0x77, 0x77, 0x7b, 0x2b, 0x17, 0xdf, - 0x05, 0x98, 0xaf, 0x74, 0x3b, 0xd3, 0x60, 0x64, 0xf9, 0x57, 0x5c, 0x2b, 0xb3, 0x49, 0x94, 0xbc, - 0x14, 0x71, 0xbe, 0xdd, 0xef, 0xdf, 0x18, 0x76, 0x91, 0x92, 0x79, 0x64, 0xe3, 0x09, 0x0d, 0x38, - 0xfe, 0x73, 0x1d, 0xf0, 0x85, 0xb1, 0x87, 0x6e, 0xff, 0x82, 0x7b, 0x28, 0x4c, 0x93, 0x3a, 0x47, - 0x83, 0x50, 0x79, 0x0b, 0x89, 0x85, 0x20, 0x33, 0xfe, 0x37, 0xd8, 0x69, 0xbb, 0x47, 0x68, 0xbc, - 0x20, 0x84, 0x36, 0x30, 0x5a, 0x92, 0xb3, 0xa2, 0x02, 0xb3, 0x43, 0x4e, 0x2e, 0x31, 0x83, 0x73, - 0xce, 0x8f, 0xf4, 0x5c, 0xff, 0x05, 0x64, 0x97, 0x1d, 0x76, 0xd0, 0x6c, 0x98, 0xf4, 0x3a, 0xc8, - 0xe4, 0x7d, 0xdf, 0xe0, 0xba, 0xa4, 0x23, 0x0b, 0x7c, 0x2e, 0xc4, 0xb6, 0x7c, 0x11, 0x96, 0xe9, - 0x4a, 0x9e, 0x27, 0xe2, 0x08, 0x76, 0x1c, 0xb4, 0xbd, 0xbb, 0x7e, 0x28, 0x63, 0xbb, 0xdd, 0xdd, - 0xfc, 0xe2, 0x54, 0x7f, 0xdc, 0xa7, 0xe4, 0xe8, 0x8f, 0xf4, 0x57, 0xfa, 0xbd, 0xf5, 0x8b, 0xea, - 0xf5, 0xd5, 0xe7, 0xea, 0xf2, 0xf3, 0x6b, 0x19, 0x5f, 0x04, 0x64, 0x24, 0x4d, 0xeb, 0x9c, 0xbe, - 0x09, 0x0a, 0xaa, 0xbd, 0x57, 0x09, 0x5a, 0x6a, 0x92, 0xaa, 0xaf, 0x12, 0xea, 0xaa, 0xbc, 0x48, - 0x8a, 0xaa, 0xad, 0xef, 0xc4, 0x02, 0x63, 0x5b, 0x9a, 0x15, 0xaf, 0x1d, 0xf8, 0xc1, 0x2d, 0xe9, - 0x93, 0xd9, 0xf9, 0xfd, 0xde, 0x7c, 0xf0, 0x81, 0x5c, 0x56, 0xef, 0x79, 0xc4, 0x05, 0x33, 0x31, - 0x40, 0xfc, 0x48, 0x41, 0x72, 0x2b, 0xa8, 0x81, 0x00, 0x9a, 0x75, 0x85, 0x13, 0xa4, 0xc5, 0xc6, - 0x89, 0x12, 0x8e, 0xf1, 0x22, 0x01, 0x37, 0x3f, 0x3a, 0x12, 0xb1, 0x19, 0x83, 0x0d, 0x19, 0x50, - 0xd4, 0x3c, 0x12, 0x6e, 0xe5, 0x0e, 0x8e, 0xd5, 0xca, 0x64, 0xdd, 0x6b, 0x8b, 0xd2, 0xbd, 0x5b, - 0x5f, 0x29, 0x4e, 0x68, 0x62, 0x13, 0xaa, 0x2c, 0xbc, 0x29, 0x40, 0xec, 0x9f, 0x25, 0xae, 0x35, - 0x72, 0x4e, 0xe3, 0x8c, 0x43, 0x60, 0xad, 0x50, 0x2a, 0x85, 0x6f, 0xe2, 0x01, 0x54, 0xd8, 0xaa, - 0xb2, 0xf9, 0x0e, 0x92, 0x3a, 0xa0, 0x09, 0x57, 0xe2, 0x01, 0x56, 0xde, 0x86, 0xc1, 0xcb, 0xcf, - 0x0a, 0x66, 0x0b, 0x0e, 0xf0, 0xca, 0x9c, 0x4c, 0x29, 0x15, 0xbb, 0xbb, 0x3b, 0x48, 0x9b, 0x8d, - 0x50, 0x2b, 0x2d, 0xd9, 0x68, 0x25, 0x81, 0x6c, 0x76, 0x57, 0xef, 0x7a, 0x03, 0x7f, 0x05, 0x91, - 0x75, 0x17, 0x17, 0x64, 0x38, 0x00, 0x94, 0x15, 0x2d, 0xd6, 0x5b, 0xeb, 0xdc, 0x4c, 0x85, 0x63, - 0xaf, 0x13, 0xf8, 0x83, 0x5d, 0x9c, 0x56, 0xee, 0x2b, 0xe2, 0x02, 0x82, 0x95, 0xd6, 0xb5, 0xa8, - 0xbd, 0x62, 0xe4, 0x48, 0x5e, 0x35, 0x0e, 0x33, 0xa1, 0xaf, 0xf5, 0xd4, 0xfd, 0x60, 0x93, 0x8a, - 0x15, 0xb1, 0x5b, 0x63, 0x23, 0x10, 0xbf, 0xf8, 0xca, 0xaa, 0xa8, 0xad, 0xdd, 0xd5, 0x55, 0x65, - 0xca, 0x2e, 0x20, 0x28, 0x79, 0xe4, 0xdf, 0x2c, 0xb2, 0xf2, 0x40, 0x2d, 0xc9, 0x51, 0xb2, 0xc4, - 0xe4, 0xb0, 0x67, 0x4f, 0x84, 0xc4, 0xb8, 0xac, 0x4a, 0xa1, 0xa4, 0x17, 0xdf, 0xc1, 0x29, 0x15, - 0x54, 0x5c, 0x5c, 0x53, 0x17, 0x52, 0x5e, 0x20, 0x16, 0x43, 0x7e, 0x25, 0xf8, 0xbd, 0x26, 0x5d, - 0xcb, 0xc1, 0xad, 0x74, 0xab, 0xad, 0xba, 0x8e, 0xa2, 0x46, 0x97, 0x78, 0x91, 0x16, 0x37, 0xa0, - 0x31, 0x75, 0x17, 0x5f, 0x19, 0x90, 0x9d, 0xa0, 0xa2, 0x41, 0x27, 0x12, 0x22, 0xb0, 0xa4, 0x4c, - 0x22, 0x03, 0x56, 0x91, 0xe9, 0x15, 0x8b, 0x57, 0x10, 0x10, 0x36, 0x9c, 0x06, 0x9c, 0xc7, 0x19, - 0x6f, 0x6d, 0xae, 0x24, 0x15, 0x1c, 0xbf, 0x2f, 0x66, 0x2b, 0x89, 0x7a, 0x07, 0x76, 0x0d, 0xd1, - 0xc7, 0x89, 0x82, 0xab, 0x8e, 0xd1, 0xcb, 0x67, 0xbe, 0x55, 0xe9, 0xd1, 0x97, 0x96, 0x1a, 0x35, - 0xf8, 0x52, 0xa2, 0xdc, 0xeb, 0x8f, 0xd2, 0x35, 0x69, 0xed, 0xf6, 0x31, 0xbb, 0x31, 0xd1, 0xbd, - 0xa0, 0x76, 0xa9, 0x9e, 0xf1, 0x20, 0xa6, 0xe6, 0x20, 0xf4, 0x31, 0x63, 0x16, 0x30, 0x7e, 0xc9, - 0x71, 0xb6, 0x99, 0xd4, 0xc6, 0xc7, 0xd7, 0xbe, 0x4a, 0x75, 0xbb, 0x7e, 0x48, 0x7b, 0xa1, 0x12, - 0xa3, 0x58, 0x6a, 0x55, 0xc2, 0x93, 0x56, 0x36, 0x34, 0xd2, 0x55, 0x33, 0x10, 0x5c, 0x39, 0x01, - 0x26, 0xa2, 0xce, 0x05, 0x50, 0xc1, 0x23, 0xbe, 0x14, 0xd1, 0x1c, 0xc6, 0x1b, 0x02, 0x66, 0x69, - 0x1b, 0xb7, 0xfb, 0x41, 0xe9, 0x92, 0x66, 0xeb, 0xd6, 0xca, 0x60, 0x93, 0x01, 0x4f, 0xc4, 0xc2, - 0x92, 0x33, 0x7c, 0x62, 0x1c, 0x60, 0x34, 0xdc, 0x10, 0x07, 0x8e, 0xd2, 0x95, 0xef, 0xa3, 0x20, - 0x42, 0x0f, 0x4f, 0x58, 0x93, 0x62, 0xb7, 0x7f, 0x56, 0x7c, 0x27, 0x44, 0x5c, 0x65, 0x49, 0xb2, - 0xf4, 0xef, 0xc6, 0x48, 0xcb, 0x3c, 0x93, 0x65, 0x9c, 0x83, 0xa8, 0xe4, 0x12, 0x30, 0xa4, 0x9a, - 0x8b, 0xfc, 0x61, 0xd9, 0x46, 0x31, 0xd0, 0x83, 0x8c, 0x0d, 0xaa, 0xde, 0xf6, 0xdb, 0x66, 0xf8, - 0x98, 0x22, 0xb5, 0x4e, 0x31, 0xbe, 0x4d, 0xba, 0xe2, 0x04, 0x02, 0x8e, 0x3c, 0xbe, 0x42, 0x25, - 0xc8, 0xab, 0x82, 0x51, 0xd1, 0x5a, 0x4e, 0x5b, 0x37, 0x44, 0x4a, 0xdc, 0xdf, 0xe1, 0x6d, 0xc5, - 0xf4, 0x45, 0x64, 0xc9, 0x9b, 0x14, 0x11, 0x9f, 0x6b, 0x30, 0x18, 0x33, 0xfe, 0x5f, 0x72, 0x40, - 0xbd, 0x1f, 0x0f, 0xae, 0xbe, 0xac, 0x5f, 0x56, 0x57, 0x57, 0x4d, 0xd5, 0xdf, 0x56, 0x7d, 0x5c, - 0xac, 0x48, 0xf1, 0x0f, 0x2b, 0x19, 0xd4, 0x42, 0x71, 0x46, 0x11, 0x82, 0xd1, 0x40, 0x2a, 0x13, - 0x06, 0x94, 0xd5, 0x78, 0x52, 0x0b, 0xdd, 0xc1, 0x1d, 0xf0, 0xfa, 0xb8, 0xb3, 0x5f, 0xac, 0x86, - 0x3e, 0xa7, 0xe1, 0x22, 0xf2, 0xaa, 0x03, 0xaf, 0x89, 0xaa, 0xca, 0xd6, 0xc7, 0xc4, 0x0c, 0x39, - 0x79, 0x78, 0xf2, 0xca, 0x85, 0xe8, 0x34, 0xfb, 0xa9, 0x3f, 0xfc, 0x21, 0xcb, 0x91, 0x2c, 0x08, - 0x6c, 0x34, 0x38, 0x1a, 0x26, 0x6a, 0xaf, 0xff, 0x8a, 0x12, 0x2e, 0xa2, 0xeb, 0xc9, 0x4f, 0x18, - 0x48, 0xfa, 0xae, 0x66, 0x23, 0xcb, 0x12, 0x8a, 0x3b, 0x22, 0xc9, 0x88, 0x2b, 0x10, 0x14, 0x88, - 0xfd, 0x2c, 0xbd, 0xef, 0x66, 0x6a, 0xbf, 0x4b, 0xbe, 0x14, 0xd8, 0xed, 0x2f, 0x20, 0xae, 0xe2, - 0x4a, 0xc9, 0x3c, 0x60, 0x8f, 0xd2, 0xcf, 0x4c, 0x5b, 0xdd, 0x74, 0x67, 0x17, 0x7c, 0x13, 0x98, - 0xca, 0x32, 0x7b, 0xbd, 0xdf, 0xe1, 0x0b, 0xbb, 0xbb, 0xbe, 0xee, 0x53, 0x1b, 0x27, 0x29, 0x45, - 0xd5, 0x45, 0xfd, 0x5c, 0xf8, 0x2e, 0x2a, 0x68, 0x6f, 0x42, 0x63, 0x79, 0x55, 0x5c, 0x29, 0x3a, - 0x56, 0x77, 0x50, 0x81, 0xe1, 0x80, 0xb2, 0x7a, 0x33, 0xa4, 0x7a, 0x50, 0xd4, 0x39, 0xd5, 0x66, - 0x8d, 0x84, 0x16, 0x8a, 0x9f, 0x0a, 0x61, 0x67, 0xe8, 0x99, 0x05, 0x99, 0xc7, 0x26, 0x44, 0xc8, - 0xe9, 0x13, 0xce, 0x30, 0x76, 0xc6, 0xe9, 0x57, 0x85, 0x0a, 0x8c, 0x7e, 0xef, 0x2c, 0x2b, 0xdf, - 0x1d, 0x40, 0x12, 0xd2, 0xbd, 0x9b, 0xb5, 0x22, 0x2b, 0x5a, 0xc4, 0xab, 0xf0, 0x9c, 0xf1, 0x01, - 0x1d, 0x5f, 0x5a, 0xfa, 0x63, 0xb1, 0x9e, 0x26, 0x0b, 0x39, 0xd8, 0x1f, 0x11, 0x04, 0x78, 0x41, - 0xc8, 0x47, 0x1d, 0xce, 0x48, 0x5d, 0x41, 0xdc, 0x1c, 0x23, 0x90, 0xbe, 0x20, 0x47, 0xe2, 0x28, - 0xef, 0xcc, 0x4a, 0x4d, 0x30, 0x7e, 0xa9, 0x56, 0x26, 0x63, 0x8a, 0xc5, 0x62, 0x51, 0x82, 0x58, - 0xf1, 0x10, 0x42, 0x46, 0x48, 0x88, 0xb3, 0xd6, 0xea, 0xe4, 0x30, 0xae, 0xdd, 0xfc, 0x58, 0x9e, - 0x6c, 0xc2, 0xf6, 0x53, 0xc4, 0x0e, 0xca, 0x41, 0x0b, 0x27, 0x0e, 0x5f, 0x60, 0xea, 0xc8, 0x43, - 0xe0, 0xac, 0x77, 0x7b, 0xbd, 0xdd, 0xd1, 0x21, 0x8d, 0xc0, 0x63, 0x7f, 0xa1, 0x30, 0x4b, 0xd7, - 0x2f, 0xa2, 0x45, 0x5d, 0x58, 0xfa, 0x2e, 0x2f, 0x9a, 0xfa, 0xbe, 0xf5, 0x5f, 0xac, 0xa4, 0xea, - 0xef, 0xbb, 0xa4, 0xaf, 0xeb, 0x0f, 0xe0, 0xa4, 0x53, 0x22, 0x68, 0x87, 0x10, 0x80, 0xf1, 0x28, - 0xc9, 0xfd, 0xb8, 0x81, 0xe4, 0xea, 0x89, 0x7e, 0x3b, 0xf0, 0xf1, 0x0a, 0x04, 0xe2, 0x4d, 0xc9, - 0xc9, 0xbb, 0xf4, 0xff, 0xb7, 0x3b, 0x03, 0xd7, 0x6f, 0xa6, 0x4e, 0xce, 0xb1, 0x00, 0xb0, 0x4d, - 0x58, 0xf9, 0x29, 0x1e, 0xf1, 0x79, 0x78, 0xb8, 0xed, 0xf0, 0xa0, 0xcb, 0x2d, 0xb8, 0xaf, 0x56, - 0xf1, 0x5c, 0x56, 0x7e, 0x71, 0x23, 0xdc, 0xde, 0xfa, 0x17, 0xaf, 0x12, 0xba, 0xfa, 0xf7, 0xc1, - 0x1f, 0x43, 0x5e, 0x6f, 0xa3, 0xb7, 0xd4, 0xa8, 0xc9, 0x70, 0xa1, 0x11, 0x1b, 0x0d, 0x9b, 0xbe, - 0x2e, 0xa2, 0x74, 0x64, 0x05, 0x62, 0xb2, 0xd8, 0xaf, 0x2f, 0x82, 0x49, 0xd8, 0x3f, 0x1c, 0x70, - 0xbf, 0xc6, 0xf1, 0x01, 0x48, 0x71, 0xc4, 0xda, 0x61, 0xa6, 0xbd, 0x09, 0x98, 0xee, 0xb0, 0x71, - 0x6e, 0xca, 0xfb, 0x11, 0xdd, 0x91, 0x93, 0x43, 0x4a, 0x40, 0x6b, 0xe8, 0x85, 0x7b, 0x4d, 0xc4, - 0x0b, 0xfc, 0x29, 0x69, 0x04, 0x4a, 0x41, 0x39, 0xa5, 0xcb, 0x99, 0x97, 0x33, 0x6d, 0xc1, 0x95, - 0x95, 0xa1, 0xa9, 0x6d, 0xc2, 0x8e, 0x80, 0xa3, 0x8d, 0x11, 0xd9, 0xfc, 0x40, 0x29, 0xbb, 0x1d, - 0xb9, 0x94, 0x11, 0x46, 0x42, 0x0b, 0x84, 0x07, 0x55, 0x61, 0x67, 0x25, 0x5e, 0x49, 0xe3, 0x9a, - 0x26, 0x8f, 0x10, 0x38, 0xbc, 0xed, 0x36, 0x33, 0x71, 0xff, 0x23, 0xdc, 0xf0, 0xe2, 0x49, 0x6e, - 0xe7, 0x04, 0xfa, 0xb5, 0x70, 0x5d, 0x6b, 0x6a, 0xef, 0x4a, 0xbc, 0xd6, 0x29, 0xa6, 0xdf, 0x8a, - 0xb0, 0x6e, 0xd1, 0xf3, 0x3e, 0x30, 0x7e, 0x30, 0x42, 0x65, 0x33, 0x01, 0xac, 0x56, 0x9f, 0xd9, - 0x26, 0x5a, 0x76, 0x34, 0xbc, 0x57, 0x1e, 0x6f, 0x83, 0xb4, 0x33, 0xb0, 0x5b, 0xf1, 0x24, 0x62, - 0x3f, 0x1f, 0x57, 0xc1, 0xfe, 0xbb, 0x3f, 0xc4, 0x42, 0x27, 0xc6, 0xa9, 0x96, 0xe9, 0xc6, 0x9f, - 0x2b, 0x74, 0xa7, 0x0b, 0xc6, 0x58, 0xc7, 0xcd, 0x4f, 0xd5, 0x71, 0xb8, 0x6b, 0xf2, 0x91, 0x75, - 0xf2, 0xd5, 0x3a, 0xfa, 0x29, 0x92, 0xba, 0x91, 0x3e, 0x08, 0xb3, 0xe3, 0xd5, 0xdf, 0x5e, 0xfa, - 0xd5, 0x75, 0xeb, 0xeb, 0xaf, 0xac, 0x55, 0xcb, 0xb4, 0x7b, 0xfc, 0x5d, 0xb4, 0x34, 0xf7, 0x23, - 0xb2, 0x75, 0xef, 0x8a, 0x14, 0xe7, 0x51, 0x71, 0x2d, 0x26, 0x2f, 0xe0, 0x94, 0xf6, 0xee, 0xea, - 0xab, 0x7f, 0x88, 0xab, 0x2e, 0xab, 0xf0, 0x47, 0x17, 0x8b, 0xab, 0x3e, 0xb1, 0xbe, 0x14, 0x11, - 0x09, 0xc9, 0x93, 0x14, 0x4b, 0x09, 0x1c, 0x3a, 0x6e, 0x00, 0x6c, 0x5d, 0xbd, 0x99, 0xcf, 0x38, - 0x16, 0x2a, 0x5e, 0xb1, 0xdf, 0xe3, 0x07, 0x8f, 0xdc, 0x2d, 0xb4, 0x40, 0x4e, 0x16, 0x15, 0x62, - 0xc6, 0xfe, 0xba, 0xf1, 0x39, 0x43, 0x26, 0x5c, 0x17, 0xe0, 0x86, 0xfa, 0xbb, 0xea, 0xef, 0x82, - 0x6d, 0x0e, 0xee, 0x18, 0x9a, 0x0c, 0x18, 0x1a, 0xdf, 0x89, 0x82, 0xa8, 0xf5, 0x3f, 0x90, 0x84, - 0x6c, 0x82, 0x9c, 0xcc, 0x35, 0xdc, 0x48, 0x80, 0xa4, 0xff, 0xcb, 0x97, 0x4a, 0x87, 0xbf, 0xd3, - 0x8c, 0x3f, 0xf1, 0xaa, 0x2a, 0xc4, 0xc1, 0x09, 0x2b, 0x51, 0xdb, 0xe5, 0x8a, 0xb1, 0x9a, 0x1e, - 0x2d, 0x87, 0xa2, 0xf7, 0xd7, 0xbe, 0x08, 0xe2, 0xb1, 0x58, 0xac, 0xaa, 0x1f, 0xc4, 0x05, 0x0a, - 0xf0, 0x05, 0x69, 0xc4, 0x44, 0x00, 0x07, 0xe0, 0xa8, 0x08, 0x79, 0x0d, 0x4d, 0xd2, 0xf0, 0x6f, - 0xa3, 0xe2, 0xad, 0x39, 0xab, 0x26, 0x6d, 0xff, 0xb5, 0x52, 0x8c, 0x57, 0x12, 0x58, 0xb1, 0xa1, - 0x97, 0x18, 0xb1, 0xe2, 0x61, 0x4e, 0xe5, 0x09, 0xd6, 0xdd, 0x8d, 0x31, 0x16, 0x09, 0x74, 0x18, - 0x4c, 0x3b, 0xd1, 0x99, 0x97, 0xb3, 0xe5, 0xf7, 0x3b, 0x25, 0x65, 0xec, 0xfc, 0x40, 0x29, 0xb8, - 0xea, 0xed, 0x96, 0xb1, 0x58, 0x68, 0x52, 0x42, 0x8c, 0xb6, 0x9e, 0x44, 0x4c, 0x5f, 0x09, 0x11, - 0x56, 0xc6, 0xef, 0xf9, 0x22, 0xb7, 0x77, 0xf0, 0x47, 0xbd, 0x7e, 0x57, 0x04, 0x66, 0x4a, 0xda, - 0xf7, 0x89, 0x05, 0x77, 0x37, 0x3f, 0x93, 0xc6, 0x2c, 0x8c, 0xd3, 0x63, 0x7f, 0x8c, 0xaf, 0x4a, - 0x78, 0x22, 0xc6, 0xee, 0x42, 0x84, 0x7e, 0x25, 0xfa, 0x83, 0x6a, 0xd7, 0x82, 0x21, 0x22, 0x98, - 0xb8, 0xb9, 0x14, 0x3f, 0xd1, 0x1e, 0xb8, 0x23, 0x33, 0x8a, 0xdd, 0xed, 0xf4, 0x78, 0xbe, 0xb9, - 0xcb, 0xeb, 0x5f, 0x44, 0x8a, 0x7e, 0x8a, 0xd2, 0x73, 0xd5, 0x24, 0x9a, 0x6b, 0xd7, 0x56, 0x78, - 0x91, 0x82, 0xa6, 0xef, 0x61, 0xca, 0xd1, 0xc4, 0xc4, 0xfc, 0x14, 0x71, 0xf5, 0x19, 0xa8, 0x1d, - 0xfe, 0xc8, 0xa9, 0x73, 0xf1, 0x65, 0x8b, 0xa6, 0x2e, 0x2e, 0xa6, 0xc9, 0x5c, 0xc7, 0x2f, 0x74, - 0xdf, 0xc1, 0x51, 0xab, 0x56, 0x63, 0x84, 0x94, 0x6a, 0x4b, 0x09, 0x64, 0x45, 0xac, 0x34, 0xb1, - 0xa3, 0xbf, 0x04, 0xb4, 0x09, 0x89, 0xce, 0x1e, 0xda, 0xcb, 0xf6, 0x58, 0xc4, 0xcf, 0xf1, 0x67, - 0x71, 0x58, 0xad, 0xc4, 0xa6, 0x22, 0x8c, 0xb6, 0xfe, 0x08, 0xae, 0x54, 0x83, 0xa1, 0x01, 0x5e, - 0xff, 0x05, 0x07, 0x71, 0x58, 0xac, 0x56, 0x28, 0xdc, 0x56, 0xe9, 0xfe, 0x2c, 0x9a, 0xba, 0x1b, - 0x1a, 0x1b, 0x1e, 0x22, 0xe9, 0xb6, 0x9b, 0x17, 0x10, 0x10, 0xbb, 0xbf, 0x18, 0xa6, 0xba, 0xe2, - 0x26, 0x2b, 0x69, 0xb6, 0x2d, 0xe2, 0x60, 0xa0, 0xd1, 0xd4, 0xc9, 0xd9, 0x57, 0x45, 0xf4, 0xb2, - 0x75, 0x31, 0x8e, 0xde, 0x20, 0xc7, 0x40, 0x53, 0x28, 0x43, 0xf3, 0x19, 0xb8, 0xf8, 0xc1, 0x8f, - 0x13, 0x0a, 0x53, 0xa3, 0x63, 0x63, 0xbb, 0x03, 0x2a, 0x83, 0x77, 0xb3, 0x58, 0xee, 0xce, 0x84, - 0x3a, 0x98, 0x1f, 0xa8, 0x7f, 0x82, 0x2b, 0xa0, 0xf8, 0x21, 0xb2, 0xb1, 0x71, 0x32, 0x1c, 0x5c, - 0x5c, 0x5d, 0x78, 0x91, 0x98, 0x3b, 0x31, 0x9a, 0xb9, 0x62, 0xdd, 0xef, 0x65, 0xcf, 0xc9, 0x2a, - 0x95, 0x3f, 0x95, 0xc9, 0xb6, 0x6a, 0xc7, 0xe1, 0x1a, 0xb0, 0x97, 0x4e, 0x9e, 0xdb, 0x5e, 0x53, - 0x2a, 0xfe, 0x08, 0x4c, 0x78, 0x24, 0x9f, 0xbc, 0x40, 0x2c, 0xac, 0xd8, 0xd1, 0x30, 0x5c, 0x1f, - 0x60, 0xfb, 0x0b, 0xd4, 0xba, 0x16, 0xbb, 0xe1, 0x02, 0x8a, 0xc5, 0x6e, 0x2b, 0x15, 0xb6, 0x2b, - 0xc7, 0xd9, 0x6f, 0xcd, 0xbd, 0xf8, 0x90, 0x54, 0x42, 0xf7, 0xd1, 0x3b, 0xb4, 0xd3, 0xdd, 0xf8, - 0x98, 0x92, 0x8b, 0xb8, 0x82, 0x93, 0x88, 0x99, 0x89, 0x5d, 0x49, 0xf0, 0x58, 0x5c, 0x2e, 0xd2, - 0xd2, 0x44, 0xe7, 0xe9, 0x45, 0x16, 0xea, 0x15, 0x84, 0xff, 0x08, 0xca, 0x22, 0x7c, 0x0d, 0x27, - 0x9f, 0x48, 0x45, 0x85, 0x3e, 0xa2, 0x72, 0x52, 0xfe, 0x58, 0xb9, 0xf0, 0xfe, 0xaf, 0x0b, 0x98, - 0xea, 0x25, 0xe7, 0x21, 0xb2, 0x97, 0xac, 0x56, 0x8b, 0xfe, 0x09, 0xb4, 0x83, 0x5a, 0x88, 0x41, - 0x5c, 0x5e, 0xaf, 0xad, 0x10, 0xb9, 0xab, 0x98, 0x5d, 0xdd, 0xfc, 0x12, 0x1a, 0xee, 0xb2, 0xbe, - 0xb5, 0x80, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x15, 0x0a, 0xb0, 0x36, 0x8b, 0x13, 0x42, 0x58, - 0xe2, 0x2a, 0xe8, 0x53, 0x86, 0x36, 0x61, 0x15, 0xd2, 0x34, 0x70, 0x60, 0xb4, 0x05, 0x5d, 0x92, - 0x59, 0xf7, 0x00, 0xd0, 0x42, 0xb1, 0x0e, 0xb7, 0x85, 0x66, 0x71, 0xfa, 0x12, 0xf0, 0xfc, 0x4d, - 0x0c, 0xcb, 0x88, 0xc2, 0x3d, 0x0d, 0x4a, 0x9f, 0x04, 0xe3, 0x92, 0x76, 0xc4, 0x2c, 0xba, 0xff, - 0x17, 0x18, 0x20, 0x23, 0x2a, 0x3c, 0x48, 0x50, 0x42, 0x86, 0x74, 0xbc, 0x49, 0x4b, 0x66, 0x11, - 0xa2, 0x47, 0x6b, 0xc9, 0x9d, 0xa1, 0x5a, 0xa7, 0x8c, 0xfc, 0x54, 0x6f, 0x1e, 0x01, 0xc3, 0xb5, - 0x48, 0x0c, 0x10, 0x2b, 0x54, 0xb0, 0x0c, 0xa1, 0xdb, 0xe5, 0x1e, 0xf3, 0x88, 0x47, 0x7c, 0x18, - 0x7f, 0x88, 0xaa, 0xf6, 0x77, 0x2f, 0x54, 0xec, 0x21, 0x08, 0x88, 0x51, 0x83, 0x1c, 0xf1, 0x22, - 0x42, 0x81, 0x08, 0x22, 0x45, 0xa3, 0x0d, 0xb4, 0x31, 0x50, 0xce, 0x27, 0x2c, 0x75, 0xbd, 0xf9, - 0xff, 0x67, 0xc2, 0x95, 0x5a, 0x2a, 0x4b, 0x53, 0x5a, 0x19, 0x63, 0x2d, 0x31, 0x7e, 0x76, 0x51, - 0x0a, 0xd0, 0x7f, 0xd5, 0x40, 0xb9, 0x19, 0xc7, 0x7e, 0x7e, 0xd1, 0x5c, 0xc1, 0x36, 0xca, 0x00, - 0x11, 0x56, 0x4e, 0x1b, 0xa3, 0x7a, 0xf7, 0xd1, 0x4a, 0x9f, 0x51, 0x90, 0x57, 0x44, 0xca, 0xb8, - 0x21, 0xa5, 0x7a, 0x3b, 0xf5, 0x79, 0x39, 0x74, 0xe9, 0xfa, 0x95, 0x2f, 0xa1, 0x8c, 0x45, 0xf0, - 0x58, 0x3d, 0x36, 0xbb, 0x77, 0x60, 0xea, 0x9f, 0x7d, 0x5c, 0xa8, 0x88, 0x21, 0x93, 0x97, 0x93, - 0xb7, 0xa7, 0x1c, 0x48, 0x91, 0x81, 0x44, 0x23, 0x28, 0xaa, 0xe4, 0x1e, 0x45, 0x1c, 0xfd, 0x72, - 0xf5, 0xc4, 0x84, 0x41, 0x56, 0x67, 0xac, 0x5d, 0xc0, 0x80, 0x2d, 0x1b, 0x3e, 0xbe, 0x0a, 0x42, - 0xa9, 0x10, 0x83, 0xd8, 0xa1, 0x92, 0xab, 0x3b, 0x0e, 0x75, 0x0f, 0x25, 0x24, 0xbf, 0x52, 0xa3, - 0xa7, 0xd5, 0xfc, 0x48, 0x24, 0x10, 0xc0, 0x21, 0x9d, 0x7c, 0x08, 0xbe, 0xb9, 0xf3, 0x47, 0x40, - 0x46, 0x64, 0x77, 0x84, 0x61, 0x41, 0x59, 0x8d, 0x90, 0xc4, 0xd8, 0xac, 0x6e, 0xcd, 0xbe, 0xe5, - 0xb1, 0x58, 0x94, 0x20, 0x09, 0x6e, 0x0e, 0x26, 0x09, 0x2f, 0xb3, 0x1d, 0xfc, 0x4c, 0x14, 0x77, - 0x38, 0x85, 0xa1, 0x27, 0xbb, 0x19, 0x4e, 0xe2, 0x61, 0x01, 0xa1, 0x3b, 0x83, 0xcb, 0x1a, 0xb0, - 0x61, 0xd4, 0x71, 0xc2, 0x82, 0x45, 0x15, 0x37, 0xfd, 0xc5, 0x6e, 0xe5, 0xe8, 0x59, 0xd2, 0x23, - 0xb3, 0x67, 0xa1, 0xe9, 0xe2, 0x27, 0xa1, 0xe9, 0x9e, 0x9d, 0x70, 0x49, 0xcf, 0x4b, 0x22, 0xfa, - 0x15, 0x2a, 0xe1, 0x31, 0xfa, 0x49, 0x69, 0x24, 0x7e, 0xa7, 0xbe, 0x89, 0x0d, 0x5d, 0x1c, 0xa9, - 0x5d, 0x69, 0xc3, 0x88, 0x05, 0x41, 0x46, 0x06, 0xb6, 0x17, 0xc8, 0xb8, 0xd0, 0xfa, 0x2f, 0xd5, - 0xca, 0x42, 0x38, 0xff, 0x8a, 0x20, 0xf5, 0x25, 0x74, 0xe7, 0x15, 0x84, 0xfe, 0x70, 0xae, 0x22, - 0xc6, 0x99, 0x23, 0xff, 0x88, 0xb4, 0xd6, 0x3a, 0x00, 0x07, 0xc0, 0x68, 0x1f, 0x9b, 0xa4, 0x97, - 0x82, 0x69, 0x68, 0x5a, 0x48, 0xc1, 0xe8, 0xfa, 0x77, 0x38, 0x46, 0x09, 0x04, 0x66, 0xa0, 0x58, - 0x58, 0xdc, 0xf1, 0x20, 0xa4, 0xd5, 0x4d, 0x76, 0x33, 0xd1, 0x50, 0x39, 0x32, 0x44, 0xbf, 0x16, - 0x23, 0x77, 0x7b, 0xf1, 0x02, 0x47, 0x14, 0x5a, 0x76, 0x83, 0x62, 0x66, 0x2a, 0xe6, 0x82, 0x67, - 0xc5, 0xbd, 0x17, 0xfd, 0x14, 0xba, 0x5e, 0x0a, 0x2c, 0x21, 0xfb, 0x9a, 0x3c, 0xc0, 0x44, 0x51, - 0xcb, 0xe0, 0xba, 0xda, 0xa2, 0x0b, 0x1b, 0xa1, 0x7b, 0xdf, 0xe0, 0x84, 0x2a, 0xdd, 0x63, 0xb1, - 0x8a, 0xf5, 0x22, 0x22, 0x11, 0xc2, 0x24, 0x3d, 0x0f, 0x4c, 0xf4, 0x3d, 0x33, 0xd0, 0xf4, 0xfd, - 0x79, 0x57, 0x8c, 0xe7, 0xa1, 0xe9, 0x9e, 0x87, 0xa1, 0xe8, 0xfa, 0x6f, 0xa3, 0xe9, 0x97, 0xaf, - 0xd1, 0x5c, 0x12, 0xce, 0xc4, 0xec, 0x4e, 0xc4, 0xec, 0x48, 0x9f, 0x5c, 0x3e, 0x84, 0x74, 0x9c, - 0x20, 0x34, 0xf4, 0x3d, 0x33, 0xd0, 0xf4, 0xcf, 0x43, 0xd3, 0xf1, 0x73, 0xd0, 0xf4, 0xcf, 0x43, - 0xd3, 0xf1, 0x1c, 0xf4, 0x3d, 0x33, 0xd0, 0xf4, 0x5d, 0x4c, 0x5f, 0x11, 0xcf, 0x43, 0xd3, 0x3d, - 0x0f, 0x4f, 0x04, 0x75, 0x9d, 0x8a, 0x42, 0x4e, 0x34, 0x53, 0x11, 0x57, 0x96, 0x94, 0x8a, 0x89, - 0x10, 0x56, 0xb1, 0x24, 0x1a, 0xca, 0xc7, 0x21, 0x25, 0x69, 0x80, 0x34, 0xf5, 0x8c, 0x00, 0x41, - 0x1e, 0x9f, 0xf2, 0x22, 0x5b, 0xf7, 0xe8, 0xea, 0x7e, 0x5a, 0x5f, 0x88, 0x18, 0x28, 0x98, 0x11, - 0x01, 0x57, 0x42, 0x50, 0x40, 0x41, 0x26, 0x5f, 0x34, 0x21, 0x34, 0x90, 0x19, 0x2c, 0x10, 0x1e, - 0xb4, 0xe0, 0x42, 0xc7, 0x80, 0x32, 0x73, 0x86, 0x04, 0x03, 0xa2, 0x21, 0x90, 0xa3, 0x80, 0x05, - 0x89, 0x10, 0x38, 0xf7, 0x66, 0xb7, 0x0a, 0xc3, 0xdb, 0xa7, 0x62, 0xf4, 0xa5, 0xfa, 0x1e, 0x74, - 0xa8, 0x66, 0x3f, 0x3e, 0x6c, 0xb3, 0x60, 0x71, 0x4d, 0xb6, 0x34, 0x34, 0x82, 0x76, 0xf1, 0x02, - 0x42, 0x81, 0x4a, 0x1b, 0x9e, 0x48, 0xa8, 0xb7, 0x61, 0x41, 0xe1, 0x6d, 0x1c, 0x1b, 0x88, 0xab, - 0x84, 0x03, 0x2f, 0x77, 0x71, 0x8a, 0x86, 0x11, 0x10, 0x14, 0xba, 0x4b, 0x72, 0x7f, 0x79, 0x05, - 0xcf, 0x3c, 0x57, 0x8c, 0x98, 0x6c, 0x1b, 0x15, 0x49, 0x67, 0x7b, 0x7b, 0xfb, 0x9f, 0x05, 0x42, - 0xea, 0x60, 0x77, 0xa6, 0xa8, 0x6a, 0x5e, 0xb6, 0x5f, 0xc4, 0x88, 0x04, 0xe2, 0x93, 0xc1, 0xb7, - 0x51, 0x52, 0x11, 0xb0, 0x30, 0x21, 0xc0, 0x1a, 0xe4, 0x83, 0x2a, 0x26, 0x0b, 0x18, 0x07, 0x1c, - 0xa7, 0xc7, 0x43, 0xc2, 0x00, 0xa1, 0x83, 0xd3, 0x41, 0xd9, 0x81, 0xb6, 0x4a, 0x9a, 0xcc, 0x6b, - 0xbe, 0xf8, 0xfd, 0xfd, 0x0d, 0xf1, 0x14, 0x15, 0x83, 0xe0, 0x9f, 0x6a, 0x95, 0xaa, 0x47, 0x43, - 0xbf, 0x04, 0x34, 0x92, 0xfc, 0xae, 0xae, 0x0d, 0xd1, 0x2b, 0xeb, 0x14, 0x9c, 0x21, 0xda, 0x6b, - 0x69, 0xad, 0xa6, 0x97, 0x05, 0x14, 0x92, 0x40, 0xd0, 0x34, 0x92, 0x40, 0xd0, 0x3a, 0x9f, 0xac, - 0x55, 0xd4, 0x97, 0xc1, 0x14, 0x6f, 0x1f, 0x15, 0x61, 0xe0, 0x9f, 0x4d, 0x2d, 0x3a, 0x69, 0x12, - 0xe5, 0xb4, 0xd3, 0x4d, 0x78, 0x82, 0xa4, 0x96, 0x92, 0x5f, 0x82, 0x4e, 0x92, 0x43, 0xcb, 0xe1, - 0x3e, 0x92, 0x5a, 0x49, 0x78, 0xeb, 0x4d, 0x6d, 0x35, 0xb4, 0xd7, 0xe3, 0x3b, 0x4d, 0x5b, 0x69, - 0x76, 0x9a, 0xda, 0x6b, 0x88, 0xf8, 0x2b, 0xe3, 0x06, 0x20, 0x3a, 0xed, 0x23, 0x98, 0x30, 0x11, - 0xae, 0x65, 0x7b, 0xe1, 0x4d, 0x22, 0x47, 0x2e, 0x4d, 0x9e, 0x6d, 0x2d, 0x1c, 0xcc, 0xc3, 0x51, - 0xaa, 0x55, 0xe0, 0x8e, 0x92, 0x47, 0x49, 0x1d, 0x24, 0x95, 0x2e, 0x89, 0x17, 0xc1, 0x6e, 0x4a, - 0x72, 0x53, 0x8b, 0xe1, 0x71, 0x0b, 0x63, 0x6b, 0x81, 0x70, 0x8c, 0x68, 0x63, 0x40, 0x02, 0xe1, - 0x68, 0xa9, 0x04, 0x42, 0x67, 0x3d, 0x7d, 0x27, 0x8e, 0xaf, 0x08, 0x0c, 0x15, 0x03, 0xad, 0xea, - 0x63, 0xcb, 0x32, 0x12, 0x3c, 0xf3, 0xc1, 0x52, 0x71, 0xe7, 0xaa, 0x4e, 0xb0, 0xe9, 0x23, 0x8d, - 0x75, 0x5f, 0xc4, 0x82, 0x6c, 0x6e, 0x5b, 0x75, 0xa2, 0x03, 0x68, 0x81, 0xaf, 0x09, 0x55, 0xeb, - 0xc4, 0x87, 0x84, 0xaa, 0xed, 0x94, 0xb4, 0x17, 0x09, 0x20, 0x23, 0x31, 0xbc, 0x22, 0x21, 0xb0, - 0x98, 0x7c, 0x0e, 0xc7, 0x6a, 0x68, 0x57, 0xfc, 0x48, 0xa9, 0xca, 0x14, 0xa9, 0xe6, 0x8b, 0xc1, - 0x58, 0x45, 0x12, 0x01, 0xa3, 0x37, 0x16, 0xba, 0xf0, 0xe4, 0x26, 0xfd, 0xcf, 0x2b, 0x86, 0x0a, - 0xc5, 0xe2, 0x02, 0x84, 0x54, 0xf6, 0xe6, 0x31, 0xbc, 0xe6, 0x2e, 0x8c, 0x82, 0x04, 0x8d, 0x20, - 0x05, 0x06, 0x07, 0x23, 0xfe, 0x24, 0x14, 0x8a, 0x81, 0x35, 0xb2, 0x6b, 0x02, 0x07, 0x81, 0x35, - 0x78, 0x08, 0x47, 0x0c, 0xef, 0xf4, 0x0b, 0x70, 0xc1, 0x09, 0x60, 0x4e, 0x79, 0xb7, 0xc6, 0xb4, - 0x51, 0x07, 0x7b, 0x1d, 0xc2, 0x14, 0x17, 0x3a, 0x7d, 0x5f, 0xea, 0x74, 0x31, 0x5e, 0x72, 0x9d, - 0x08, 0xb5, 0xe2, 0xad, 0xbd, 0x72, 0x61, 0xc5, 0xa8, 0xe1, 0x5e, 0x78, 0xed, 0x15, 0x23, 0xe8, - 0x71, 0x39, 0x8f, 0xfd, 0x0a, 0xc3, 0xeb, 0x2f, 0xb9, 0x79, 0x39, 0x7b, 0x3f, 0xa2, 0x37, 0xd5, - 0x87, 0x82, 0x4b, 0xa8, 0xe2, 0xdf, 0x4b, 0xd1, 0xe2, 0xf8, 0x76, 0xb9, 0x7d, 0xbc, 0x83, 0x41, - 0xf6, 0x8c, 0x69, 0x96, 0x9c, 0x1b, 0x5a, 0xff, 0xaa, 0x55, 0xe0, 0x92, 0x92, 0x49, 0x24, 0x95, - 0x7a, 0xf7, 0xd7, 0xbe, 0x0a, 0x2d, 0x35, 0xb4, 0x1b, 0x5d, 0xae, 0x54, 0x3b, 0xf0, 0x41, 0x2f, - 0x14, 0x1b, 0x41, 0xd4, 0x16, 0xb3, 0x57, 0x29, 0x8e, 0xe5, 0x61, 0xad, 0x3e, 0x64, 0x0c, 0xb9, - 0x1e, 0xfb, 0xc9, 0xfb, 0xbf, 0x0c, 0x05, 0x02, 0x54, 0x03, 0x40, 0x88, 0xca, 0x15, 0x05, 0x02, - 0x02, 0x81, 0x26, 0xae, 0x63, 0x07, 0x98, 0xde, 0x00, 0x02, 0x33, 0x51, 0x46, 0x00, 0x01, 0x42, - 0x04, 0xe6, 0x11, 0x13, 0x98, 0xa2, 0x84, 0x35, 0x27, 0xac, 0x72, 0x78, 0x40, 0x15, 0xdd, 0x82, - 0x98, 0x2a, 0x23, 0xa1, 0x30, 0x34, 0x0e, 0x98, 0xe8, 0xcd, 0xd0, 0xaa, 0xe8, 0x99, 0x51, 0x72, - 0x6a, 0x6f, 0x6e, 0x3b, 0x54, 0x23, 0x0d, 0x04, 0xda, 0x3d, 0xb1, 0x40, 0x63, 0x45, 0x39, 0x59, - 0x1f, 0x9d, 0xff, 0x0a, 0x04, 0xa9, 0xa6, 0xe6, 0xc7, 0x51, 0x50, 0x9f, 0x31, 0x3a, 0x41, 0xb4, - 0x72, 0x09, 0x7c, 0x97, 0xaa, 0x43, 0xb7, 0x89, 0x04, 0xa7, 0x28, 0xe6, 0x35, 0x60, 0x81, 0x36, - 0x03, 0xf4, 0xf7, 0xc3, 0xe2, 0xfa, 0x19, 0xaa, 0x92, 0x5b, 0x01, 0xf8, 0xe1, 0x1c, 0xd8, 0x65, - 0x11, 0x5b, 0xcf, 0x6b, 0x2f, 0x12, 0xf8, 0x98, 0xde, 0x6c, 0x7c, 0x1d, 0xff, 0x05, 0x21, 0x1b, - 0xf0, 0x5a, 0x99, 0x1e, 0xef, 0xa4, 0xd9, 0xff, 0xff, 0x82, 0x21, 0x63, 0xfe, 0x5f, 0xef, 0x4e, - 0xbc, 0xf3, 0xaf, 0xe7, 0xd3, 0xef, 0xe1, 0xce, 0x3b, 0xe5, 0xbe, 0x3a, 0x2a, 0x3e, 0x9f, 0x7f, - 0x2e, 0x24, 0x14, 0x11, 0x24, 0xb4, 0x92, 0xdf, 0xe3, 0x29, 0x25, 0xa4, 0x96, 0x92, 0x5b, 0x4d, - 0x63, 0x78, 0xc9, 0x08, 0x22, 0x24, 0x1a, 0x5c, 0x71, 0x8e, 0x7a, 0x7c, 0xbf, 0xdf, 0xcb, 0x9e, - 0x15, 0xe7, 0x72, 0x4d, 0xce, 0xe4, 0x8a, 0x8e, 0xf8, 0xe2, 0xfb, 0xe8, 0x43, 0xfd, 0x15, 0xc1, - 0x3a, 0x39, 0x79, 0x5d, 0x0a, 0xca, 0xba, 0x3b, 0x9f, 0x11, 0xcf, 0x4c, 0xf4, 0x9e, 0x8b, 0xb9, - 0xff, 0xf8, 0x47, 0x69, 0x3b, 0x4d, 0x6d, 0x35, 0xf9, 0xba, 0x49, 0x78, 0x9e, 0xd3, 0x5b, 0x4d, - 0x38, 0x98, 0x77, 0x0d, 0xb2, 0xfb, 0x54, 0xcf, 0xbc, 0xb9, 0x71, 0x38, 0xf1, 0x1e, 0x1a, 0x53, - 0x91, 0x9a, 0xbb, 0x95, 0x99, 0x7e, 0x24, 0x22, 0x14, 0x09, 0x1e, 0xf2, 0x93, 0xe0, 0x75, 0xf6, - 0xf7, 0xc0, 0x7a, 0x76, 0xa0, 0xb0, 0x19, 0xef, 0x07, 0x5f, 0x2e, 0xc1, 0xd3, 0xee, 0x32, 0x20, - 0x01, 0x60, 0xf1, 0xe7, 0x02, 0x18, 0x09, 0x28, 0xd8, 0x3e, 0xf0, 0xc0, 0x53, 0x45, 0x57, 0xb1, - 0x31, 0x67, 0xf9, 0x5b, 0x13, 0x63, 0xe2, 0xc7, 0xb8, 0x51, 0x5b, 0xd9, 0x51, 0xc0, 0x2c, 0x19, - 0x71, 0x46, 0x83, 0xd3, 0x17, 0x65, 0x8f, 0xd5, 0x89, 0xa9, 0x30, 0xf9, 0xea, 0x26, 0x17, 0x12, - 0x70, 0xc1, 0x4c, 0x34, 0x88, 0x1a, 0xe4, 0x56, 0x8c, 0x3c, 0xc6, 0x1c, 0x07, 0xd1, 0x2e, 0xba, - 0x85, 0x0f, 0xf1, 0x22, 0x06, 0x08, 0x48, 0xa6, 0x3e, 0x87, 0x2c, 0x16, 0xeb, 0x64, 0xdc, 0xe7, - 0x2e, 0xe2, 0xbb, 0x5f, 0x05, 0x87, 0xa7, 0x6b, 0x4d, 0xc2, 0x55, 0x95, 0xe9, 0xa6, 0x2d, 0x10, - 0x16, 0xc3, 0xff, 0x28, 0x84, 0x04, 0x70, 0xc5, 0xaf, 0x87, 0xc4, 0x0c, 0x0a, 0xbc, 0x78, 0x84, - 0xed, 0x99, 0x08, 0xc0, 0x81, 0xc2, 0xf6, 0x9a, 0xda, 0x1c, 0xb3, 0x88, 0xfc, 0xa5, 0x3d, 0x0f, - 0x4f, 0xd4, 0xe8, 0xa8, 0x9c, 0x10, 0x91, 0xa6, 0xba, 0xf8, 0x23, 0x10, 0xe4, 0x77, 0x97, 0xd6, - 0x0f, 0x82, 0x2a, 0xab, 0xbc, 0xbe, 0x51, 0x69, 0x52, 0x4b, 0xc2, 0x5d, 0x24, 0xb6, 0x9a, 0xf1, - 0xd6, 0x9a, 0x49, 0x26, 0x9a, 0x4a, 0xd3, 0x49, 0x33, 0xf0, 0x8d, 0xa6, 0xb6, 0x9a, 0xda, 0x6b, - 0xf1, 0x3d, 0x24, 0xb4, 0x92, 0xf0, 0x8d, 0xa6, 0xb6, 0x9a, 0xda, 0x6b, 0x11, 0xd1, 0xb1, 0x0f, - 0x04, 0x47, 0x29, 0x05, 0x03, 0x1f, 0x42, 0xd1, 0x40, 0xb9, 0xa9, 0x25, 0xf8, 0x21, 0xb4, 0xd2, - 0x49, 0x23, 0xef, 0xaa, 0x2d, 0xf8, 0x21, 0xe9, 0x24, 0x99, 0x7a, 0x21, 0xea, 0xe4, 0xba, 0xbb, - 0xfa, 0xb2, 0xbb, 0x2e, 0xd3, 0x4f, 0xa9, 0x52, 0x48, 0x46, 0x34, 0x42, 0x1b, 0x07, 0x78, 0xad, - 0x22, 0x88, 0x63, 0xa3, 0x89, 0x01, 0xb0, 0xcd, 0x35, 0x79, 0x34, 0x10, 0x05, 0xf0, 0xf1, 0xb2, - 0x8c, 0xf7, 0xf8, 0xd3, 0x54, 0x7c, 0x12, 0xdb, 0xac, 0x12, 0x0d, 0x64, 0x0b, 0x3d, 0xe7, 0xbd, - 0xfd, 0xfd, 0x22, 0x76, 0x12, 0xa0, 0xad, 0x66, 0xab, 0xa3, 0x7f, 0xfc, 0x29, 0x33, 0xe0, 0xc6, - 0x31, 0xe4, 0xb0, 0x40, 0x4d, 0xd4, 0x46, 0x8d, 0x50, 0xc2, 0x90, 0xf1, 0x90, 0xda, 0xda, 0x6a, - 0x31, 0xfa, 0x80, 0x12, 0xf1, 0x90, 0x80, 0x46, 0x84, 0x8a, 0xf1, 0x20, 0xdc, 0x4c, 0x28, 0x61, - 0x47, 0x50, 0xa0, 0xde, 0x60, 0x08, 0x13, 0xc1, 0x0c, 0x05, 0xa8, 0x18, 0x45, 0x91, 0x39, 0x8f, - 0x06, 0x1b, 0x1b, 0x19, 0x28, 0x99, 0x2f, 0x73, 0x37, 0x7c, 0x95, 0x2b, 0x4d, 0x25, 0x17, 0xc2, - 0x93, 0x74, 0x99, 0x0d, 0xc0, 0xcb, 0x87, 0x75, 0x94, 0x46, 0x20, 0x50, 0x96, 0xd8, 0x83, 0x2d, - 0xbf, 0xeb, 0xb9, 0xd8, 0x74, 0xf8, 0xc9, 0xf5, 0x71, 0x3e, 0xcb, 0x62, 0x84, 0xc5, 0x57, 0x4f, - 0x1d, 0xa9, 0x27, 0xe7, 0x82, 0xb3, 0x83, 0xf5, 0x26, 0xc6, 0x92, 0x82, 0x6f, 0x66, 0x18, 0xce, - 0xb9, 0x3b, 0x51, 0x35, 0xa8, 0x59, 0xcb, 0x89, 0x10, 0x0a, 0x44, 0x25, 0x81, 0x7a, 0x78, 0x80, - 0xd3, 0x3c, 0x02, 0x8e, 0x6e, 0x09, 0x03, 0x9a, 0x6b, 0xa1, 0x89, 0xa2, 0xb2, 0x0d, 0x48, 0x38, - 0x02, 0x91, 0xf9, 0x7c, 0x10, 0x86, 0x73, 0x17, 0x9f, 0x1d, 0xfc, 0x44, 0xf8, 0x95, 0x24, 0x9a, - 0x69, 0xff, 0xaa, 0x54, 0xba, 0x94, 0xbe, 0x38, 0x8d, 0x35, 0xb4, 0xd6, 0xd3, 0x5f, 0xa3, 0x57, - 0xc1, 0x17, 0x77, 0xaf, 0xa9, 0x81, 0x5c, 0x12, 0x1d, 0x3d, 0x27, 0x7c, 0xdd, 0x24, 0x97, 0x15, - 0x69, 0xad, 0xa6, 0xb2, 0x85, 0x50, 0xb0, 0xfb, 0x2c, 0x3f, 0x2d, 0x7c, 0xbf, 0x5f, 0x2d, 0x7c, - 0xbf, 0xff, 0x37, 0x16, 0x23, 0x49, 0x26, 0x0e, 0xd3, 0x5e, 0x8a, 0xc7, 0xd5, 0xca, 0xe8, 0x88, - 0xe9, 0xf1, 0x16, 0x9a, 0xda, 0x6b, 0x27, 0x05, 0xf9, 0xc2, 0x01, 0xa6, 0x96, 0x98, 0xe5, 0xc9, - 0x3a, 0xaa, 0xff, 0x84, 0xf4, 0xda, 0xe9, 0x25, 0xe7, 0xab, 0xbd, 0xff, 0xc4, 0xed, 0xdb, 0xb7, - 0x6f, 0xd1, 0x26, 0x7d, 0x1c, 0xe9, 0x7d, 0x4e, 0x92, 0x42, 0x22, 0x01, 0x21, 0x20, 0x3b, 0x5e, - 0xc0, 0x71, 0x05, 0x0a, 0xb9, 0x60, 0x02, 0xe8, 0x08, 0xf1, 0x21, 0x41, 0x90, 0x4d, 0xa5, 0xfa, - 0x66, 0x08, 0x03, 0xaa, 0x4c, 0xea, 0xbd, 0x09, 0xb9, 0xa9, 0x40, 0x72, 0x41, 0xe1, 0xb7, 0x1c, - 0xde, 0x50, 0x00, 0x11, 0xc6, 0xf1, 0x23, 0x4a, 0x4a, 0xf8, 0xf7, 0x1c, 0x1d, 0x56, 0x01, 0xe6, - 0x7f, 0x65, 0xdd, 0x86, 0x93, 0x98, 0x5a, 0x0c, 0xd3, 0xc0, 0x93, 0x41, 0x00, 0x50, 0xdf, 0x81, - 0x2c, 0x98, 0x3a, 0x30, 0x4e, 0xa8, 0x1d, 0xef, 0x8d, 0x69, 0x5e, 0x5d, 0xf1, 0xb4, 0xa1, 0x27, - 0x88, 0xc9, 0xa3, 0x04, 0xae, 0x30, 0x4c, 0x20, 0x80, 0x91, 0x1f, 0x11, 0x24, 0x10, 0x02, 0x75, - 0xe8, 0x36, 0x52, 0xa4, 0x50, 0x98, 0x36, 0xac, 0xc3, 0xc6, 0xc4, 0x63, 0x32, 0x2a, 0x90, 0x7e, - 0x88, 0x9a, 0x2f, 0x49, 0xb9, 0xbb, 0x52, 0x5d, 0xf0, 0x5c, 0x6a, 0xe9, 0x38, 0xad, 0xdc, 0xff, - 0x5f, 0x0a, 0x1c, 0x12, 0xb9, 0x80, 0xde, 0xb3, 0xa1, 0x21, 0xa5, 0xbf, 0x85, 0x22, 0x78, 0x20, - 0x8a, 0xf1, 0x48, 0xb7, 0x04, 0xea, 0xca, 0xb9, 0x5a, 0xd8, 0x03, 0x9a, 0x26, 0xbc, 0x40, 0x52, - 0x3f, 0xee, 0x72, 0x30, 0x4f, 0x1a, 0x0c, 0x9a, 0x1e, 0xa4, 0x99, 0x32, 0x7e, 0x8d, 0x99, 0x1e, - 0x88, 0x09, 0x7a, 0x32, 0x28, 0x55, 0x5d, 0x0c, 0x77, 0x63, 0x80, 0xef, 0x8c, 0x15, 0xd9, 0x38, - 0xe5, 0x69, 0x5a, 0x99, 0xc3, 0x80, 0x17, 0xce, 0x0f, 0x21, 0x51, 0xba, 0xe6, 0xb0, 0xec, 0xf6, - 0xd8, 0xe8, 0xb9, 0xd6, 0x4a, 0xa4, 0x80, 0xdc, 0x25, 0x2b, 0x10, 0x24, 0x2a, 0x11, 0xcc, 0x13, - 0x1d, 0x93, 0xde, 0x66, 0xc3, 0xf4, 0x89, 0x79, 0x12, 0x5e, 0x9f, 0xfe, 0x0b, 0x8a, 0x6a, 0x30, - 0x7b, 0x4d, 0x67, 0x4f, 0x85, 0x69, 0x24, 0x92, 0x49, 0x24, 0x92, 0x5d, 0x6d, 0xb4, 0xd3, 0xff, - 0x04, 0xb2, 0x62, 0x5d, 0x24, 0xb2, 0x27, 0x89, 0x04, 0x54, 0x92, 0xc6, 0xa9, 0x84, 0x16, 0x25, - 0x24, 0x86, 0x88, 0x6b, 0xf5, 0xc1, 0x55, 0x83, 0x8c, 0x2f, 0x4e, 0x9a, 0x68, 0x49, 0xa6, 0x44, - 0xfa, 0x8b, 0xaf, 0x82, 0xeb, 0x4d, 0x63, 0xc8, 0xff, 0xab, 0xe0, 0x96, 0xd3, 0x5b, 0x4d, 0x79, - 0x7c, 0x94, 0xf4, 0xbc, 0xfd, 0x2b, 0x4f, 0x1e, 0xaf, 0xfc, 0x12, 0xf6, 0x9a, 0xda, 0x68, 0x76, - 0xfa, 0xa3, 0xb0, 0xa7, 0x05, 0x36, 0x9a, 0xce, 0xea, 0x5b, 0x49, 0x7b, 0xe0, 0x9b, 0x4d, 0xa4, - 0x2d, 0xa6, 0x8c, 0x9f, 0x58, 0xaf, 0x8f, 0xb4, 0xd2, 0x49, 0x35, 0x49, 0x76, 0x9a, 0xf4, 0x43, - 0x27, 0xd4, 0x89, 0x7c, 0x13, 0xf1, 0x3b, 0x50, 0x19, 0xf8, 0x5a, 0x38, 0x29, 0x1d, 0x34, 0x58, - 0x36, 0xdc, 0x7a, 0x2f, 0x10, 0x14, 0x1d, 0xc7, 0x2c, 0xa4, 0x9b, 0x0f, 0x38, 0x7f, 0x0e, 0xe4, - 0x17, 0x23, 0x02, 0x0a, 0x84, 0xa0, 0x4d, 0x83, 0xab, 0xa4, 0x25, 0xc1, 0x1d, 0xdf, 0x1a, 0x5d, - 0x28, 0x23, 0x7e, 0x2c, 0x82, 0xcf, 0x03, 0x80, 0xdb, 0x97, 0x25, 0x06, 0x87, 0x3a, 0x9c, 0x4e, - 0xec, 0x5b, 0x18, 0x85, 0x81, 0x62, 0x41, 0x00, 0xb8, 0x2f, 0x8c, 0xec, 0x80, 0xdc, 0x4b, 0x84, - 0x54, 0x5c, 0xa1, 0x69, 0x95, 0x61, 0xaf, 0x72, 0x01, 0x0b, 0xed, 0x55, 0x2a, 0x4f, 0x0a, 0x79, - 0x96, 0x77, 0x49, 0x5d, 0x72, 0x87, 0x94, 0x4b, 0x6c, 0x78, 0xd3, 0x60, 0xe9, 0x28, 0x0d, 0x5e, - 0xf9, 0x65, 0xe5, 0xe1, 0x0c, 0xbe, 0x5b, 0xe0, 0xae, 0x2e, 0x4a, 0x24, 0xe8, 0xd8, 0xcf, 0x11, - 0x1e, 0xab, 0x36, 0x3b, 0xe1, 0x1f, 0x37, 0x8a, 0x62, 0x64, 0x12, 0xcd, 0x9d, 0x73, 0x19, 0x58, - 0x58, 0x4e, 0x23, 0x07, 0xc4, 0x95, 0x14, 0x18, 0xec, 0x14, 0x37, 0xbf, 0x34, 0xcd, 0x1f, 0x12, - 0x30, 0x41, 0xa9, 0x2b, 0x44, 0x2b, 0x19, 0xab, 0x8b, 0xea, 0x28, 0x32, 0xaa, 0x92, 0x5d, 0x62, - 0x8e, 0x6c, 0xb5, 0x27, 0x10, 0x58, 0x7c, 0xec, 0x62, 0xe1, 0xf4, 0x2d, 0xb9, 0x88, 0xa0, 0xa9, - 0xd2, 0xba, 0x21, 0x81, 0x5c, 0x67, 0x69, 0xa6, 0x9a, 0x69, 0xad, 0x24, 0xb4, 0x92, 0xf0, 0xee, - 0x1a, 0x49, 0xf9, 0x6e, 0x83, 0xae, 0xdd, 0xe9, 0x60, 0x9a, 0x68, 0x68, 0x22, 0x7f, 0xf1, 0x3b, - 0x76, 0xed, 0xdb, 0x27, 0x47, 0x02, 0x9c, 0x01, 0x7c, 0x10, 0x9a, 0x9d, 0x36, 0xbe, 0xb5, 0x2f, - 0x27, 0x8a, 0xcf, 0xc2, 0x5d, 0x24, 0xb4, 0x92, 0xf0, 0x43, 0xd2, 0x49, 0xbe, 0x11, 0xa4, 0x96, - 0x92, 0x59, 0x15, 0x11, 0x56, 0x23, 0x88, 0xed, 0x35, 0xb4, 0xd7, 0xa9, 0x56, 0x7c, 0x14, 0x74, - 0x92, 0xd2, 0x49, 0x32, 0xf4, 0x4c, 0xaf, 0xa2, 0xa0, 0x1b, 0xe1, 0x9e, 0x92, 0x47, 0xaf, 0x1d, - 0xc7, 0xfc, 0x42, 0x28, 0x8b, 0x4e, 0x22, 0x09, 0xc5, 0x39, 0x54, 0x2a, 0x4a, 0xa2, 0xa2, 0x18, - 0xe8, 0x5c, 0x5c, 0x71, 0x0b, 0xf7, 0xc2, 0x82, 0xad, 0xb4, 0x3d, 0x51, 0x01, 0x83, 0x1e, 0x95, - 0xaa, 0xaa, 0xc2, 0xd4, 0xb5, 0x06, 0x02, 0x19, 0xd9, 0x23, 0x65, 0x54, 0xb7, 0xb0, 0xa2, 0x20, - 0x49, 0xc2, 0x19, 0x40, 0x4a, 0x37, 0x96, 0xc2, 0x13, 0x8d, 0x33, 0xe3, 0xa7, 0xf5, 0x8f, 0x5b, - 0x63, 0x6f, 0xf0, 0xc6, 0x1c, 0x48, 0xdd, 0x75, 0x1e, 0x8b, 0xd8, 0xfe, 0x18, 0x85, 0xc0, 0xd6, - 0x39, 0x12, 0x97, 0x73, 0x45, 0xc5, 0x10, 0xec, 0x62, 0x50, 0x18, 0x36, 0x43, 0x48, 0x51, 0xa9, - 0x24, 0x81, 0x9f, 0x93, 0x61, 0x1e, 0x56, 0xb1, 0x3f, 0x16, 0x08, 0x1d, 0x95, 0xa1, 0x9e, 0x30, - 0x73, 0x1f, 0xd1, 0x83, 0x7a, 0x0e, 0x24, 0x29, 0x3b, 0xea, 0xca, 0xa6, 0xac, 0x7c, 0xcb, 0x6b, - 0xc1, 0x50, 0xb6, 0xac, 0x99, 0x78, 0xd4, 0x13, 0x14, 0xe8, 0xed, 0xe2, 0x46, 0x57, 0xfa, 0xeb, - 0xbc, 0x4e, 0x16, 0x4e, 0x07, 0x58, 0xaa, 0x03, 0xc8, 0x94, 0x20, 0x13, 0xcc, 0x40, 0x41, 0x1e, - 0x16, 0x5f, 0x36, 0xc0, 0x38, 0xe8, 0x4e, 0xe4, 0x57, 0xaf, 0x24, 0xcd, 0x86, 0xbc, 0x61, 0x9d, - 0xee, 0x24, 0x16, 0x66, 0x71, 0x1b, 0xcc, 0x19, 0x1e, 0x79, 0x38, 0x0d, 0x6a, 0x72, 0x6c, 0xe0, - 0x83, 0x68, 0x10, 0x11, 0xa0, 0xf9, 0x4c, 0x6c, 0x36, 0x3a, 0xdd, 0x39, 0x7c, 0x28, 0x71, 0x27, - 0x22, 0x01, 0xc4, 0x78, 0xa3, 0xcc, 0x40, 0x58, 0x5a, 0xc5, 0xcd, 0x97, 0x3a, 0xd3, 0x1c, 0xf5, - 0x79, 0xc2, 0xf3, 0x62, 0x72, 0x4c, 0x4b, 0xfc, 0x29, 0xb2, 0x36, 0x4b, 0x26, 0x27, 0xca, 0xa4, - 0xa9, 0xa1, 0xa9, 0x48, 0xbf, 0xc2, 0x82, 0x29, 0x23, 0x05, 0x60, 0xe5, 0xc7, 0x43, 0x27, 0x4a, - 0xa9, 0xb3, 0xa9, 0x48, 0xe9, 0xdf, 0x15, 0x92, 0x78, 0xd2, 0x1b, 0x78, 0x9f, 0xa0, 0xa9, 0xaf, - 0x9e, 0xac, 0x8b, 0x14, 0x15, 0x7e, 0xf8, 0xca, 0x49, 0x69, 0x25, 0xb4, 0xd6, 0xd3, 0x5f, 0x8f, - 0xe9, 0x24, 0x91, 0xc1, 0xe7, 0x07, 0xe3, 0xeb, 0xf5, 0xdf, 0x9f, 0xbe, 0xa9, 0x91, 0xfa, 0x8f, - 0xbe, 0x3b, 0x74, 0xa9, 0x07, 0x90, 0x81, 0x25, 0xe9, 0x1c, 0x4b, 0xc1, 0x0d, 0xf7, 0x4d, 0xa3, - 0x12, 0x7c, 0xf4, 0xaa, 0x31, 0x26, 0x7c, 0xdc, 0x27, 0x49, 0x2d, 0xa6, 0x93, 0x9f, 0x82, 0x32, - 0x3d, 0xec, 0x7d, 0x52, 0xbf, 0x3e, 0x47, 0x9f, 0x6d, 0xb6, 0xdb, 0x37, 0x04, 0xc5, 0x49, 0x0a, - 0x9d, 0x3a, 0x75, 0x5c, 0xe5, 0x3a, 0x4f, 0xa7, 0xdf, 0xf1, 0x30, 0xb8, 0xc8, 0x39, 0x1f, 0x83, - 0x48, 0x68, 0x26, 0xc8, 0xf5, 0xc3, 0x06, 0x10, 0xbf, 0x61, 0xde, 0x77, 0xe6, 0x84, 0xf2, 0xf1, - 0xa2, 0x89, 0xda, 0x1c, 0xf2, 0x55, 0x49, 0x15, 0x67, 0x5e, 0x34, 0x56, 0xf7, 0xfa, 0x64, 0xb2, - 0xec, 0xc7, 0x14, 0xe8, 0x22, 0x84, 0x3c, 0x65, 0xb7, 0x4a, 0x15, 0x86, 0x37, 0xd2, 0x25, 0x42, - 0xae, 0x8f, 0x3e, 0x0d, 0xc7, 0x1c, 0x0d, 0xa8, 0x2b, 0x4e, 0x5e, 0x0f, 0xac, 0x8a, 0xc5, 0xe2, - 0xda, 0x11, 0x6b, 0xe1, 0x42, 0x0e, 0x38, 0x7d, 0x79, 0xfb, 0x1a, 0xca, 0x91, 0xdd, 0x9c, 0x90, - 0xd2, 0x4d, 0x8a, 0x6c, 0x5b, 0x1d, 0xa0, 0x60, 0x30, 0xa3, 0x31, 0xa3, 0x5d, 0x3c, 0x91, 0x49, - 0xc3, 0x6c, 0xcf, 0x7c, 0x82, 0xbb, 0xed, 0xca, 0x59, 0xb6, 0xa8, 0x20, 0x30, 0xca, 0xb6, 0x3b, - 0x02, 0xef, 0x42, 0xa0, 0x6a, 0xaa, 0x36, 0x3e, 0x0a, 0x2b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0xc7, - 0x3e, 0x30, 0xae, 0xe7, 0x46, 0x0e, 0x0d, 0x6e, 0x8c, 0x70, 0xd2, 0x7a, 0x53, 0x8e, 0x40, 0x53, - 0x19, 0x4f, 0xbf, 0xf6, 0x19, 0x01, 0x4a, 0x1b, 0x38, 0x82, 0x7f, 0x6d, 0x32, 0x35, 0x08, 0x6b, - 0x15, 0x4f, 0x18, 0x0d, 0x79, 0x85, 0x62, 0x0f, 0x49, 0x49, 0x8c, 0x29, 0xa0, 0x9d, 0x2f, 0x0f, - 0xdb, 0x44, 0x33, 0x97, 0x6f, 0x07, 0xb7, 0x6b, 0x34, 0xb6, 0x6c, 0x23, 0xb0, 0x17, 0xe2, 0xb6, - 0xa3, 0xd9, 0x17, 0x8f, 0xce, 0xe1, 0x2a, 0xaf, 0xf3, 0x29, 0xbd, 0x8b, 0x6d, 0x18, 0x47, 0x1c, - 0xa6, 0x0f, 0xbf, 0x3b, 0xe2, 0x58, 0x25, 0x7f, 0xbb, 0x50, 0xc0, 0x69, 0x94, 0x66, 0xe2, 0x61, - 0xf3, 0x3e, 0x0f, 0xe9, 0x07, 0xff, 0xe3, 0x8e, 0xf0, 0xc0, 0x5c, 0x1b, 0x4e, 0x8e, 0xf5, 0x46, - 0x71, 0x82, 0xb4, 0xf0, 0xa6, 0x17, 0x11, 0x0a, 0x16, 0x26, 0xc1, 0xbb, 0x18, 0x8e, 0xe3, 0x63, - 0x59, 0x24, 0x24, 0x45, 0x47, 0x29, 0x1e, 0xf1, 0x00, 0xb0, 0x50, 0x26, 0x6f, 0xb6, 0xe9, 0x2c, - 0xcd, 0xbc, 0x6d, 0x35, 0x7b, 0x36, 0xaf, 0xc4, 0xc5, 0xc3, 0x3c, 0x65, 0x52, 0x1a, 0xb3, 0xca, - 0x2a, 0xb9, 0x5b, 0xb2, 0x57, 0xd0, 0x55, 0x3b, 0xf5, 0x4a, 0x7d, 0x48, 0x97, 0xd5, 0xc0, 0x4b, - 0x82, 0x32, 0x73, 0xd1, 0xfe, 0x08, 0xf7, 0x77, 0x4e, 0xbc, 0x84, 0x77, 0xfd, 0x5f, 0xea, 0x95, - 0x3e, 0x8a, 0xdf, 0x57, 0x89, 0xe8, 0xbd, 0xc4, 0x89, 0x04, 0x86, 0xa3, 0x32, 0x0a, 0xdb, 0xe0, - 0x88, 0x87, 0x60, 0xf6, 0x21, 0xa1, 0x6f, 0x02, 0x31, 0xe2, 0x42, 0x84, 0x66, 0x28, 0x5a, 0x9d, - 0xfb, 0xd4, 0x9c, 0xb5, 0x5b, 0xd2, 0x71, 0x2c, 0x03, 0x09, 0x02, 0xbc, 0x61, 0xbf, 0x81, 0x71, - 0xc9, 0x41, 0x51, 0x59, 0xe3, 0x68, 0xfe, 0x26, 0x08, 0xaa, 0xf6, 0x20, 0x52, 0x35, 0x70, 0x3e, - 0xeb, 0xb4, 0xf0, 0xec, 0x2c, 0xe3, 0x0b, 0x0c, 0xd8, 0x5b, 0xb9, 0xe9, 0xe1, 0x28, 0xf9, 0x9c, - 0x13, 0x97, 0x2f, 0x45, 0x20, 0x55, 0x80, 0xa8, 0x0c, 0x82, 0x15, 0xe3, 0xdd, 0xb2, 0x82, 0xaf, - 0xc1, 0x49, 0x95, 0x55, 0x54, 0x98, 0x96, 0x27, 0x42, 0xce, 0x2b, 0x78, 0x81, 0x87, 0xd3, 0xe8, - 0x75, 0x9c, 0xe5, 0x47, 0x0e, 0x0c, 0x8c, 0xd3, 0x46, 0x3d, 0x66, 0xe3, 0x3e, 0x71, 0x01, 0x4a, - 0x70, 0x1c, 0x7d, 0x03, 0x5f, 0x18, 0x8f, 0xff, 0x51, 0xbb, 0xac, 0x0d, 0x00, 0xa5, 0x2b, 0x02, - 0x41, 0x83, 0x12, 0xe7, 0x6f, 0xb3, 0xfb, 0x71, 0x9b, 0x19, 0x6e, 0xc5, 0x67, 0x20, 0xa3, 0x15, - 0xe1, 0x4b, 0xc1, 0xfe, 0x5c, 0x55, 0x90, 0xbe, 0xc3, 0x55, 0x2e, 0x45, 0x66, 0x2f, 0x76, 0xe2, - 0x60, 0x90, 0xaf, 0xa5, 0xc8, 0xf1, 0x22, 0x47, 0xdb, 0xda, 0x92, 0x99, 0xbd, 0xf8, 0x91, 0x23, - 0xc5, 0x7a, 0xe2, 0xc3, 0xc3, 0xb1, 0x79, 0x55, 0x86, 0x15, 0xc3, 0x52, 0x22, 0xda, 0xe1, 0x5e, - 0x26, 0x0a, 0xfc, 0x2d, 0x18, 0x2c, 0x64, 0x33, 0xca, 0x5b, 0x6c, 0x37, 0x56, 0xd1, 0xfe, 0x1f, - 0xd8, 0xa1, 0x8e, 0xa4, 0xe2, 0xc2, 0x2d, 0x35, 0xb4, 0xd7, 0xe1, 0x0b, 0x4d, 0x6c, 0x1b, 0x49, - 0xda, 0x6b, 0x2f, 0x47, 0x44, 0xb8, 0x43, 0xa1, 0x0c, 0x93, 0xa3, 0xe1, 0x17, 0xd0, 0x97, 0x38, - 0x46, 0x17, 0x11, 0xb9, 0x89, 0x50, 0x41, 0xed, 0xb1, 0x00, 0xc7, 0x63, 0xb5, 0x55, 0xff, 0x85, - 0x07, 0x4c, 0xfa, 0xbd, 0x22, 0xd1, 0x8a, 0xdd, 0x25, 0xa2, 0xc3, 0x0d, 0x78, 0x49, 0x2e, 0x84, - 0x6c, 0xc9, 0xe2, 0xf8, 0x7e, 0x49, 0x48, 0x74, 0x67, 0xcd, 0x75, 0x13, 0x31, 0x17, 0x55, 0xe5, - 0x9e, 0x5f, 0x56, 0xed, 0xf8, 0xd2, 0x3d, 0xbd, 0x00, 0x86, 0x82, 0x99, 0xe0, 0x84, 0xd4, 0x95, - 0x98, 0x85, 0x2c, 0x31, 0x09, 0x06, 0x05, 0x5b, 0xfd, 0x7d, 0x64, 0xf7, 0x71, 0xa4, 0x83, 0xd5, - 0xca, 0xfc, 0x69, 0x03, 0x7e, 0x87, 0xb9, 0x0e, 0x42, 0x5e, 0x2f, 0xc2, 0x7e, 0xab, 0x80, 0xb6, - 0xf4, 0x31, 0x2b, 0x60, 0x1b, 0x7d, 0xf1, 0xf5, 0x13, 0x59, 0xb3, 0x0f, 0xa0, 0x91, 0xcd, 0x92, - 0x67, 0x29, 0xc9, 0x84, 0xc8, 0x98, 0xff, 0x98, 0x6f, 0x4a, 0xb4, 0x18, 0xb1, 0xb3, 0x58, 0x25, - 0x0d, 0xe2, 0xdf, 0xa5, 0x0f, 0x59, 0xaf, 0xb2, 0xf0, 0xa1, 0x40, 0x9b, 0x23, 0x29, 0xe4, 0xc5, - 0x8e, 0xe6, 0x8e, 0x9c, 0x01, 0x1e, 0xcc, 0xc8, 0x4c, 0x64, 0x48, 0xc5, 0xa8, 0xc0, 0x91, 0x0a, - 0x48, 0xd2, 0x9c, 0xe2, 0x2a, 0xd9, 0x1c, 0xe7, 0x53, 0x42, 0x3d, 0xe6, 0x59, 0xc4, 0x51, 0xdf, - 0x8d, 0x12, 0x2e, 0x4c, 0x13, 0xee, 0x63, 0x77, 0x1f, 0xd0, 0x25, 0x52, 0x31, 0x79, 0x29, 0x35, - 0x2e, 0x4e, 0x75, 0x53, 0x1e, 0xe5, 0xa7, 0xfd, 0x39, 0x10, 0x23, 0xd9, 0x23, 0xef, 0xff, 0x19, - 0x79, 0x89, 0x6c, 0xf7, 0xf5, 0x54, 0x23, 0x29, 0xa3, 0x73, 0xdc, 0xeb, 0x87, 0x19, 0x78, 0x1f, - 0x10, 0x30, 0x4a, 0xb4, 0x26, 0xb2, 0xe5, 0x0d, 0x1f, 0xcc, 0x94, 0x7c, 0x00, 0x09, 0x3a, 0x0e, - 0x08, 0x66, 0x68, 0xd5, 0x80, 0x21, 0xa2, 0x03, 0x5f, 0x6d, 0xf8, 0x88, 0xf0, 0x23, 0x9c, 0x99, - 0xdd, 0x95, 0xb2, 0xfc, 0xb7, 0xe8, 0x42, 0x7f, 0x8f, 0x91, 0xa9, 0x9a, 0x58, 0x27, 0xc2, 0x6f, - 0x6b, 0x04, 0x89, 0x59, 0x34, 0x91, 0x2a, 0xa6, 0x38, 0xbc, 0x48, 0xce, 0x5d, 0x93, 0xb9, 0x3e, - 0x48, 0x62, 0x60, 0xac, 0xb9, 0xa3, 0x0b, 0x9f, 0x31, 0x81, 0xd5, 0xce, 0x03, 0x4c, 0x61, 0x8e, - 0x64, 0x85, 0x3a, 0x17, 0x5f, 0x5c, 0xbe, 0x08, 0xf7, 0xac, 0x15, 0xd1, 0xcc, 0x5f, 0x3c, 0x74, - 0xa6, 0xed, 0x37, 0xff, 0x39, 0x94, 0xfa, 0x7d, 0x2e, 0xd7, 0xfe, 0xaf, 0x5d, 0x5e, 0x5e, 0xaf, - 0xf5, 0xca, 0xba, 0xe7, 0x3e, 0x89, 0x8c, 0xa8, 0x46, 0x09, 0x0e, 0x88, 0x72, 0x20, 0xb4, 0x26, - 0x51, 0x18, 0x79, 0x44, 0x2a, 0x70, 0x9c, 0x3c, 0x95, 0x5f, 0xc4, 0xd1, 0x4e, 0x45, 0x0b, 0xf1, - 0x21, 0x48, 0xce, 0x55, 0x37, 0x1b, 0x4d, 0xd5, 0x6a, 0x31, 0x47, 0x65, 0xcb, 0x9e, 0xfa, 0xf8, - 0x52, 0x12, 0x1c, 0xea, 0xf0, 0x02, 0xcc, 0x16, 0x9b, 0x42, 0x3f, 0x78, 0xa0, 0x63, 0xc8, 0x89, - 0xc2, 0xad, 0xb5, 0x09, 0x80, 0x55, 0x7a, 0xd3, 0x0a, 0x43, 0xe4, 0x1d, 0xbc, 0xca, 0xf2, 0xf3, - 0x1e, 0x6e, 0x8c, 0x64, 0x5d, 0xe2, 0x42, 0x86, 0x2d, 0xfe, 0xa9, 0x1b, 0x17, 0x43, 0x50, 0xd7, - 0x4d, 0x4b, 0xe3, 0xd2, 0x2e, 0x08, 0x01, 0xc3, 0xde, 0x43, 0xbc, 0x06, 0x2c, 0xbb, 0x61, 0x15, - 0x86, 0xb6, 0x2c, 0x80, 0xa6, 0x1e, 0x3b, 0xf0, 0xa1, 0xeb, 0x2c, 0xa8, 0x46, 0xa9, 0x35, 0x0c, - 0x76, 0x92, 0x7d, 0x89, 0x7d, 0x45, 0xb1, 0x59, 0x63, 0x15, 0xdd, 0x0e, 0xef, 0x12, 0x0a, 0x4f, - 0xe8, 0x3c, 0x4f, 0x4c, 0xf9, 0x8f, 0xad, 0x19, 0x73, 0x17, 0x51, 0x1f, 0x29, 0x7c, 0x48, 0x53, - 0x26, 0xa2, 0xec, 0xce, 0x8c, 0xcc, 0x14, 0x6f, 0x36, 0xb5, 0x05, 0x87, 0xcf, 0xf0, 0x57, 0xf2, - 0x43, 0x71, 0xb6, 0xf9, 0xc4, 0x15, 0x6f, 0xba, 0xb2, 0xf8, 0x28, 0xda, 0x39, 0x0f, 0x94, 0x3a, - 0xd7, 0x7c, 0x25, 0x77, 0x3a, 0x9d, 0xb2, 0xf2, 0x75, 0x3a, 0xa8, 0x91, 0x23, 0x21, 0x98, 0x80, - 0x83, 0xbd, 0xf3, 0xba, 0x48, 0x53, 0x07, 0x5f, 0x1e, 0xb0, 0x1d, 0xbc, 0x29, 0x43, 0x5a, 0x4b, - 0x64, 0x24, 0x22, 0x54, 0x7a, 0x9c, 0x48, 0x91, 0x03, 0x3d, 0x87, 0x1a, 0x6c, 0x3d, 0xdd, 0x41, - 0x3f, 0x3c, 0x5c, 0x1a, 0xb3, 0x24, 0x00, 0xd6, 0x9b, 0x84, 0xcb, 0x73, 0x71, 0x97, 0xf0, 0x50, - 0x11, 0x4a, 0x62, 0xbc, 0xd6, 0x97, 0xc8, 0x4b, 0xa3, 0x77, 0xd1, 0x72, 0xfa, 0xc5, 0x7d, 0x12, - 0x05, 0x5e, 0xac, 0x1f, 0x44, 0x62, 0x5e, 0xb1, 0x49, 0xcd, 0xdc, 0x4b, 0x98, 0x98, 0xda, 0x36, - 0x29, 0xd4, 0x4f, 0xdb, 0xa9, 0x03, 0x6c, 0xcb, 0x50, 0xed, 0xae, 0xc2, 0x5d, 0xc3, 0xac, 0x4f, - 0x1d, 0xa4, 0x3b, 0x3a, 0x99, 0x77, 0xfe, 0x14, 0x34, 0xbc, 0x65, 0x91, 0xc9, 0x06, 0x03, 0xed, - 0xb5, 0x3a, 0x5d, 0xbc, 0x4f, 0xc2, 0xa5, 0xb3, 0x24, 0x5e, 0x30, 0xaf, 0xae, 0x4c, 0x27, 0x73, - 0xb1, 0x64, 0xd9, 0x31, 0xeb, 0xe9, 0x3f, 0xc1, 0x59, 0x46, 0xd2, 0x68, 0x98, 0xa2, 0x37, 0x31, - 0xd0, 0x91, 0xaa, 0xfe, 0xf8, 0x28, 0xb1, 0x9f, 0x38, 0xc0, 0x80, 0xf3, 0xdf, 0x1a, 0x28, 0xb7, - 0x8a, 0xd0, 0x13, 0x59, 0x25, 0x29, 0x00, 0x5e, 0x43, 0xfa, 0xa2, 0x20, 0x61, 0xbd, 0x84, 0xaf, - 0x73, 0x92, 0x23, 0xd9, 0x6a, 0x06, 0x77, 0xf8, 0x2b, 0x9f, 0xff, 0x25, 0x60, 0x26, 0xd6, 0x9b, - 0x6e, 0x63, 0xaf, 0x5c, 0x53, 0x6b, 0xa6, 0x32, 0x68, 0xdc, 0x2d, 0x32, 0xf0, 0xa5, 0x9c, 0x9b, - 0x90, 0xd8, 0x32, 0x7c, 0x98, 0x52, 0x41, 0x89, 0x99, 0x68, 0x9f, 0x08, 0x7b, 0xc8, 0x54, 0x3d, - 0xa5, 0xb7, 0x49, 0x7c, 0x02, 0x96, 0xbc, 0x00, 0x04, 0x11, 0x27, 0xc2, 0xe3, 0x32, 0x42, 0x0e, - 0x32, 0x5c, 0xf9, 0x16, 0x19, 0x66, 0x29, 0x53, 0xe1, 0x02, 0xcc, 0x60, 0xcf, 0x6a, 0x39, 0x1c, - 0x49, 0x52, 0x4c, 0x76, 0x20, 0x80, 0xdf, 0x5c, 0x0c, 0xcd, 0x45, 0xc5, 0x0a, 0x12, 0xd6, 0xa9, - 0x59, 0xe0, 0xb4, 0xd2, 0xec, 0xf1, 0x36, 0xed, 0x8b, 0xb1, 0x83, 0xbe, 0x4e, 0xff, 0x30, 0x9d, - 0x48, 0xcf, 0x96, 0x9d, 0xf5, 0xf8, 0xcb, 0x0c, 0x8c, 0x4c, 0x08, 0x0b, 0x04, 0x17, 0x50, 0xa3, - 0x88, 0x1b, 0xb8, 0x67, 0x42, 0xe0, 0x70, 0x14, 0x4d, 0x46, 0x11, 0x42, 0xbc, 0x64, 0xba, 0x6c, - 0x2f, 0x05, 0x9c, 0xac, 0x5c, 0x56, 0x7a, 0x1e, 0xfb, 0xec, 0xd2, 0xf8, 0x90, 0x91, 0x65, 0x31, - 0x62, 0xae, 0x36, 0x81, 0x08, 0xb7, 0xe0, 0xb7, 0xc8, 0xa2, 0x24, 0x70, 0x4b, 0x82, 0xbb, 0x4f, - 0xc4, 0x08, 0xf8, 0x2a, 0x11, 0xd5, 0x63, 0x43, 0x07, 0x00, 0x85, 0x62, 0xb0, 0xdb, 0xcf, 0xc2, - 0x86, 0x70, 0x88, 0x90, 0x54, 0x22, 0xa1, 0x0b, 0x43, 0x5b, 0x15, 0xb4, 0xed, 0xd3, 0x38, 0xc1, - 0x30, 0x86, 0x68, 0xfb, 0xe0, 0x8a, 0xee, 0x97, 0x10, 0xf0, 0x46, 0x11, 0x07, 0x7f, 0x0c, 0xb8, - 0x3b, 0xd4, 0xdc, 0x12, 0x0e, 0x97, 0x7e, 0x8f, 0xe8, 0x58, 0xea, 0xfa, 0x92, 0xf8, 0x50, 0xec, - 0x57, 0x39, 0x54, 0x92, 0xfb, 0x4d, 0x6d, 0x34, 0x9d, 0x7a, 0x2a, 0x75, 0xe7, 0x23, 0x1f, 0x4d, - 0x33, 0x1d, 0x71, 0xdf, 0x52, 0x81, 0x9f, 0xa2, 0x37, 0xd5, 0xbe, 0xad, 0xf5, 0x72, 0xb9, 0x4a, - 0x92, 0x48, 0x1f, 0xc6, 0xd2, 0x4b, 0x76, 0x0d, 0x3b, 0x4d, 0x68, 0x41, 0x41, 0x4c, 0x19, 0x01, - 0xeb, 0x17, 0xa2, 0x63, 0x52, 0x73, 0xf6, 0xfc, 0x23, 0x05, 0x83, 0x16, 0x92, 0x8c, 0xac, 0xe4, - 0xbd, 0x3d, 0xf9, 0x12, 0xc0, 0x7f, 0xc1, 0x4c, 0x43, 0xcb, 0x76, 0x2b, 0xb1, 0x5b, 0xcb, 0x9b, - 0xbb, 0x7c, 0x7c, 0x56, 0x16, 0x63, 0x5e, 0x93, 0x95, 0x93, 0xd6, 0xb3, 0xc9, 0x8b, 0x11, 0xd4, - 0x80, 0xed, 0xe3, 0xe2, 0x01, 0x4f, 0x8e, 0x49, 0x97, 0xbe, 0xcf, 0x75, 0x72, 0xf1, 0x20, 0xac, - 0xe8, 0x29, 0xdb, 0x1a, 0x11, 0x13, 0x40, 0xbc, 0xcc, 0x7c, 0xf1, 0x00, 0xa8, 0x8e, 0xee, 0xd9, - 0xb0, 0x44, 0x83, 0xb2, 0x66, 0x76, 0x07, 0xb8, 0xd7, 0x3f, 0xda, 0x76, 0xf8, 0x50, 0x84, 0xb2, - 0x09, 0xd2, 0xa8, 0xdd, 0xc8, 0x25, 0xd9, 0x96, 0xff, 0x6c, 0x46, 0x79, 0x44, 0x47, 0x2e, 0xc1, - 0x92, 0x30, 0x02, 0x3e, 0xc3, 0x56, 0x93, 0x2a, 0x32, 0xf1, 0x97, 0xaf, 0x74, 0x0b, 0xff, 0xe2, - 0x06, 0xec, 0x78, 0xb7, 0xc6, 0x28, 0x72, 0x03, 0xd2, 0x25, 0xa8, 0xf3, 0xc9, 0x7a, 0x69, 0xc6, - 0x5c, 0x04, 0xda, 0x8b, 0xcb, 0xc7, 0x09, 0x81, 0xaa, 0x23, 0xf0, 0xbc, 0xda, 0xcd, 0xfc, 0x40, - 0xf9, 0x55, 0xf9, 0xe1, 0x49, 0xc8, 0x84, 0xd7, 0x97, 0xcb, 0x2c, 0x90, 0x58, 0xae, 0xe9, 0x22, - 0xc6, 0x58, 0xc5, 0x62, 0xbf, 0x1c, 0x53, 0x3c, 0x00, 0x5b, 0x2f, 0xa9, 0x7f, 0x53, 0xb6, 0x11, - 0x15, 0x6d, 0x32, 0xa8, 0x79, 0x16, 0xd6, 0xa9, 0xeb, 0x1e, 0x11, 0x2b, 0x3e, 0xb6, 0x72, 0x4a, - 0x6a, 0x94, 0x61, 0x8f, 0x13, 0x04, 0xb4, 0x6c, 0x04, 0x6a, 0x51, 0x88, 0xda, 0x58, 0x84, 0x10, - 0x29, 0xfe, 0x3c, 0xad, 0x19, 0xda, 0x13, 0x19, 0x4c, 0xa0, 0x86, 0xcb, 0x86, 0xd1, 0xab, 0xa6, - 0x91, 0x2a, 0x94, 0x3e, 0xce, 0x2f, 0x05, 0x44, 0x58, 0x18, 0x0f, 0xd2, 0x40, 0x2b, 0xdd, 0x0d, - 0xf7, 0xf1, 0x15, 0xc1, 0x5c, 0x86, 0x35, 0x62, 0x97, 0x91, 0x46, 0xf3, 0x86, 0x02, 0x5e, 0x8e, - 0x0f, 0x89, 0x05, 0x9a, 0x4c, 0xb5, 0xd0, 0x9e, 0x27, 0x3a, 0xc1, 0xaa, 0x69, 0x5c, 0x0f, 0x7b, - 0xff, 0xc6, 0xe3, 0x99, 0x06, 0x97, 0xaa, 0x7d, 0x22, 0xca, 0x7f, 0xd0, 0x33, 0x4d, 0x6f, 0xeb, - 0x24, 0xa7, 0xbe, 0xdd, 0xdb, 0xc2, 0x22, 0x41, 0x6c, 0xe1, 0x81, 0x03, 0x39, 0x0d, 0xeb, 0xb1, - 0xb0, 0x43, 0xa3, 0x1b, 0x9f, 0x05, 0x43, 0x08, 0x97, 0xe1, 0xfe, 0x50, 0x9d, 0x44, 0xa8, 0x65, - 0x02, 0xf4, 0x89, 0x9c, 0x1f, 0x0c, 0x15, 0xb8, 0x86, 0x82, 0xbc, 0x74, 0xc9, 0xdd, 0xf9, 0xcc, - 0x97, 0x7f, 0xd0, 0x55, 0x2a, 0x5d, 0x04, 0x99, 0x11, 0xd0, 0x96, 0x3e, 0xba, 0xfa, 0x36, 0xc7, - 0xd6, 0x57, 0xd1, 0xf2, 0xf8, 0x23, 0xb9, 0x88, 0x2b, 0xd5, 0xf5, 0xce, 0x7d, 0x73, 0x9f, 0x5c, - 0xe7, 0xd4, 0x7d, 0x27, 0x47, 0x73, 0xe0, 0x8a, 0xdd, 0xbb, 0x85, 0xd4, 0xa9, 0xc4, 0xc2, 0x83, - 0x2a, 0xa8, 0xb1, 0x85, 0x64, 0xdc, 0xcc, 0xa1, 0x36, 0x36, 0xa8, 0xdb, 0xe3, 0x67, 0x3c, 0xb6, - 0x58, 0x31, 0x5d, 0x3b, 0x9c, 0xc6, 0xbb, 0x98, 0x92, 0x4e, 0x7d, 0x59, 0xc8, 0xf8, 0xfa, 0x63, - 0xff, 0xe1, 0x48, 0xf6, 0xdb, 0x94, 0xf4, 0x71, 0x99, 0x3b, 0x68, 0x73, 0x35, 0xce, 0x30, 0x58, - 0x04, 0x3d, 0xa5, 0x7c, 0x28, 0x64, 0x89, 0x49, 0x94, 0x1f, 0x50, 0xca, 0x9f, 0xfd, 0x71, 0x73, - 0xcc, 0x07, 0x24, 0x2f, 0x63, 0x1a, 0xf8, 0x2b, 0x3c, 0x1b, 0x93, 0x6d, 0xef, 0x6f, 0x64, 0xac, - 0xff, 0x4e, 0x31, 0xdf, 0x0a, 0x15, 0xc5, 0x6e, 0x2b, 0x7a, 0xd0, 0x91, 0x51, 0x8e, 0x20, 0x89, - 0x8c, 0x9e, 0x9b, 0x1e, 0x24, 0x16, 0x08, 0xaa, 0x61, 0xb0, 0x38, 0x4c, 0x11, 0x89, 0xf0, 0xcb, - 0x5b, 0x2e, 0xbb, 0x18, 0x50, 0xc6, 0x6f, 0x85, 0x24, 0x47, 0x43, 0x50, 0xe8, 0x3c, 0x5c, 0xb0, - 0xfc, 0x24, 0x68, 0x6d, 0xc7, 0x86, 0xfd, 0x21, 0x61, 0xb3, 0x27, 0xb9, 0x49, 0x78, 0xba, 0xb1, - 0xe2, 0x43, 0xa5, 0x18, 0xa5, 0x35, 0x03, 0x46, 0x25, 0x45, 0xc0, 0x73, 0xce, 0xa1, 0x61, 0x51, - 0xda, 0x15, 0xd3, 0x58, 0xbd, 0x0b, 0x67, 0xf5, 0xff, 0x82, 0xcb, 0x8d, 0x8b, 0x81, 0x75, 0x62, - 0x05, 0xb4, 0x6d, 0x1d, 0x57, 0xd4, 0xe7, 0x0f, 0x73, 0xfc, 0x4c, 0x71, 0x69, 0xc4, 0xf9, 0x6a, - 0xaf, 0x5d, 0x1b, 0x16, 0x5a, 0xf9, 0xae, 0x2b, 0x15, 0x8a, 0xf1, 0x02, 0x07, 0x9f, 0x29, 0x88, - 0x61, 0x89, 0x0a, 0xc4, 0x30, 0x39, 0xc2, 0x45, 0xc0, 0x40, 0x00, 0x0e, 0xbf, 0x10, 0x44, 0x06, - 0x52, 0xd3, 0x92, 0xa0, 0x60, 0x09, 0xee, 0x59, 0x6f, 0x88, 0x05, 0x06, 0x15, 0xb8, 0xae, 0x55, - 0x52, 0xed, 0xbe, 0x52, 0xbd, 0x0d, 0x17, 0x8f, 0x39, 0xd1, 0x66, 0x52, 0x45, 0x09, 0xb5, 0x4f, - 0x6e, 0xde, 0x26, 0x3c, 0x56, 0xb5, 0x2f, 0x93, 0x77, 0x52, 0x50, 0x81, 0x37, 0x76, 0xe2, 0x61, - 0x42, 0x8f, 0xfa, 0xe4, 0xd9, 0xa4, 0xc1, 0x27, 0x0f, 0x2a, 0xf9, 0x68, 0xd2, 0xbb, 0xfc, 0x29, - 0x45, 0x81, 0x9e, 0xfe, 0xc6, 0x4c, 0x3b, 0x41, 0xef, 0x28, 0x3c, 0xd6, 0x8e, 0x81, 0x3e, 0x8f, - 0xca, 0xaa, 0x3d, 0xc2, 0x02, 0x02, 0x87, 0x2a, 0xed, 0x53, 0xe5, 0x29, 0x02, 0x07, 0x58, 0xac, - 0xd1, 0x29, 0x96, 0x7d, 0xa7, 0x42, 0x90, 0x91, 0x28, 0x15, 0x01, 0xa5, 0x9e, 0x45, 0x33, 0x62, - 0xc1, 0x2a, 0x37, 0x08, 0x02, 0xac, 0x88, 0x5b, 0xbf, 0x13, 0x18, 0x6b, 0x49, 0x12, 0xad, 0x4d, - 0x49, 0x8a, 0xfd, 0xb6, 0x8d, 0x4b, 0x89, 0x2f, 0x7c, 0x5a, 0xc7, 0x85, 0x05, 0x1e, 0x9a, 0x74, - 0x65, 0x93, 0x58, 0xae, 0xc6, 0x96, 0xb6, 0x8f, 0x67, 0x3f, 0x1a, 0xd7, 0x7f, 0x82, 0xbc, 0xb9, - 0x71, 0x92, 0x89, 0x8b, 0x2d, 0x8a, 0xde, 0x47, 0xdf, 0xec, 0xf7, 0xa7, 0xe5, 0x22, 0x49, 0x6f, - 0xa2, 0x65, 0x2f, 0x45, 0x8a, 0x6e, 0x72, 0xaa, 0x49, 0x24, 0x97, 0xae, 0xb1, 0x57, 0x56, 0xfa, - 0xc6, 0xfa, 0xef, 0x7d, 0x63, 0xdf, 0x45, 0xf1, 0xf5, 0x28, 0xb8, 0x98, 0x2c, 0x9f, 0x06, 0xea, - 0x36, 0xef, 0x7c, 0x2a, 0xe1, 0xc7, 0x6e, 0x55, 0xf8, 0x90, 0xa1, 0x94, 0xf8, 0x91, 0x8c, 0x32, - 0x56, 0xec, 0xe9, 0x1e, 0x8c, 0x11, 0x5d, 0x1b, 0x59, 0x52, 0x3a, 0xd7, 0x4d, 0xa0, 0x1c, 0x12, - 0x3f, 0x05, 0x25, 0x47, 0xa0, 0x1b, 0xa1, 0x8a, 0xca, 0xec, 0xf0, 0xb7, 0x08, 0x60, 0x22, 0x7f, - 0x8c, 0xd9, 0x6d, 0x32, 0xd0, 0x3c, 0x2e, 0x22, 0xfd, 0x67, 0x58, 0x51, 0xf4, 0x47, 0x34, 0xb1, - 0x0a, 0x47, 0x90, 0x4f, 0x1e, 0xd2, 0x0f, 0x10, 0x14, 0x15, 0x26, 0xc1, 0x21, 0xa1, 0x39, 0x44, - 0xa7, 0x7d, 0x8c, 0x13, 0x18, 0x87, 0x40, 0x74, 0x5c, 0xbc, 0xbc, 0x57, 0x42, 0x2a, 0x4b, 0xf0, - 0xa0, 0x92, 0x8b, 0x41, 0x52, 0xf5, 0x80, 0xe5, 0xed, 0x51, 0xb3, 0xf1, 0x36, 0xc6, 0xbb, 0x1f, - 0x0a, 0x16, 0x0d, 0x99, 0x0a, 0x39, 0xc2, 0xb7, 0x5e, 0xe0, 0xbb, 0x6b, 0x07, 0x83, 0xfd, 0x19, - 0x7e, 0xfd, 0xe2, 0x01, 0x50, 0x8e, 0x4c, 0x07, 0xfd, 0xfc, 0xe7, 0x8e, 0xbd, 0x75, 0xca, 0x7d, - 0x2f, 0x97, 0xc2, 0x97, 0x66, 0xb7, 0x43, 0x96, 0x19, 0x99, 0x46, 0xc4, 0xd8, 0xf5, 0xe2, 0x6c, - 0x37, 0x2e, 0x7c, 0x17, 0x59, 0xf9, 0xad, 0x58, 0x3d, 0x78, 0x80, 0x58, 0x2c, 0x2e, 0xb8, 0x0b, - 0x7c, 0xe7, 0x98, 0x36, 0xc7, 0x6e, 0x9d, 0x23, 0xe2, 0x02, 0x97, 0xe5, 0x41, 0x39, 0x06, 0xc7, - 0x2b, 0x07, 0x10, 0x39, 0x14, 0xb5, 0x76, 0xf4, 0xfe, 0x24, 0x12, 0x58, 0xdb, 0x3b, 0x3f, 0x78, - 0x80, 0x84, 0xee, 0x15, 0x89, 0x58, 0x3d, 0xc2, 0xc6, 0x73, 0x8e, 0x5b, 0x66, 0xc2, 0x32, 0x5f, - 0xc5, 0x9a, 0x46, 0x50, 0x38, 0xb4, 0xdf, 0xc2, 0x92, 0x65, 0xc5, 0xd5, 0x8f, 0xbd, 0xca, 0x66, - 0x73, 0x47, 0x7f, 0x84, 0x45, 0xe9, 0x19, 0xed, 0x46, 0x32, 0x60, 0x40, 0x19, 0xcf, 0xa1, 0xa9, - 0xa7, 0x8a, 0xe9, 0x36, 0x35, 0x5c, 0x13, 0x3f, 0xe0, 0xb4, 0x72, 0xb9, 0x48, 0xd1, 0x23, 0xa9, - 0xbe, 0xdf, 0x0a, 0x1c, 0xbc, 0x44, 0x60, 0x8f, 0x61, 0x89, 0x04, 0xd4, 0x6c, 0x55, 0x70, 0xac, - 0x61, 0xe8, 0xdd, 0xae, 0xe4, 0xec, 0x51, 0x4f, 0xce, 0x20, 0x40, 0xa2, 0xe5, 0x63, 0x9c, 0xd2, - 0x2c, 0x48, 0x91, 0xe5, 0x39, 0x50, 0x7a, 0xa0, 0x2a, 0x86, 0x02, 0x72, 0x10, 0x04, 0xb6, 0x2b, - 0x27, 0x40, 0x01, 0x0e, 0x48, 0x28, 0x84, 0x4e, 0x16, 0x32, 0xd8, 0xaf, 0x12, 0x24, 0x69, 0x19, - 0x16, 0x88, 0x58, 0xe2, 0xd5, 0xde, 0x56, 0x4d, 0x6e, 0xc4, 0xfa, 0x31, 0x1b, 0xe8, 0x3f, 0xa4, - 0x5a, 0x04, 0x53, 0x14, 0xef, 0xde, 0xed, 0x61, 0x11, 0x22, 0x24, 0xcb, 0x8a, 0xc2, 0x21, 0x74, - 0xa5, 0x94, 0x5c, 0xb1, 0xe2, 0x44, 0x87, 0x86, 0x5a, 0x69, 0xa7, 0xe0, 0x7c, 0x8e, 0xa5, 0xb9, - 0xa4, 0xe3, 0x79, 0x4f, 0x97, 0x67, 0xa7, 0xf8, 0x5b, 0x76, 0x94, 0x9c, 0xa4, 0x3a, 0x43, 0xd0, - 0x99, 0xd1, 0x28, 0xb7, 0x4a, 0xc0, 0x4b, 0xbb, 0xdf, 0x31, 0xcd, 0x54, 0xe5, 0x67, 0xcf, 0x56, - 0xdb, 0x69, 0xaf, 0x5d, 0x65, 0x19, 0xd5, 0xc9, 0x3a, 0x3f, 0x7c, 0x92, 0x71, 0xd5, 0x2e, 0x4f, - 0xa8, 0xe8, 0x7d, 0x62, 0xf9, 0x2a, 0xd3, 0xb5, 0xe0, 0x87, 0x77, 0x47, 0xdf, 0x25, 0xc5, 0x6e, - 0xfe, 0x34, 0xc9, 0x87, 0x16, 0x22, 0xe2, 0x99, 0x21, 0x23, 0x2b, 0x0b, 0x59, 0x66, 0xc3, 0x40, - 0x2e, 0xc0, 0x66, 0x5b, 0x0a, 0xd9, 0x56, 0xc1, 0x66, 0xff, 0x97, 0x84, 0xdf, 0xd4, 0xf0, 0x1c, - 0x5f, 0xfc, 0x29, 0x3b, 0x8a, 0x17, 0xe5, 0x4c, 0x20, 0x38, 0xba, 0x63, 0x4f, 0x2d, 0xb1, 0x1c, - 0x30, 0xcb, 0x7f, 0x8c, 0xcc, 0x95, 0xc7, 0xb4, 0xe5, 0xb7, 0xbb, 0x8a, 0xc5, 0x68, 0xf1, 0x10, - 0xa4, 0xbc, 0x5d, 0x45, 0xf4, 0xd0, 0x23, 0x15, 0x51, 0x75, 0x52, 0x28, 0x75, 0x27, 0xef, 0x12, - 0x34, 0x44, 0x9f, 0xf8, 0xba, 0x4a, 0x27, 0xb9, 0x46, 0x1f, 0x09, 0xbc, 0xdd, 0xdb, 0x54, 0x97, - 0xb3, 0xe4, 0x7a, 0xfe, 0x0a, 0x46, 0xba, 0x5b, 0x46, 0x0a, 0x1b, 0xb9, 0x48, 0xeb, 0x3f, 0x9b, - 0x63, 0xad, 0x3f, 0xc1, 0x2c, 0xf5, 0x45, 0x8a, 0xc5, 0x62, 0xb7, 0x71, 0x0a, 0x4e, 0x7e, 0x26, - 0x14, 0x22, 0x60, 0xc7, 0xa3, 0x54, 0x3e, 0x24, 0xe0, 0x6c, 0x2e, 0x45, 0x2c, 0xd8, 0xcb, 0x96, - 0xc5, 0x6e, 0xad, 0x90, 0xbc, 0xf7, 0x12, 0x21, 0x51, 0x82, 0xb8, 0x90, 0x4b, 0xe4, 0xe6, 0x4b, - 0x5e, 0xfa, 0xf1, 0x20, 0xac, 0xf0, 0x65, 0xb6, 0x2c, 0x3a, 0xa1, 0xad, 0x75, 0x16, 0xa6, 0x92, - 0xab, 0x78, 0x80, 0x44, 0x4c, 0x82, 0x02, 0xe7, 0xbc, 0x48, 0x2c, 0x38, 0xf1, 0x23, 0xd4, 0x56, - 0x5e, 0x17, 0x14, 0xc1, 0x6c, 0xfc, 0xb6, 0x5b, 0x71, 0xaa, 0x7c, 0x17, 0x18, 0x43, 0x8d, 0x0c, - 0x05, 0xb4, 0xa9, 0xb7, 0xbb, 0xfd, 0xc8, 0xc4, 0x99, 0x41, 0x7f, 0x86, 0x0b, 0xb9, 0x7e, 0x5a, - 0xea, 0xef, 0x4f, 0xfc, 0x16, 0x1f, 0x87, 0x94, 0x6c, 0x9b, 0x1e, 0xb3, 0xb9, 0x7c, 0x37, 0xc6, - 0x4a, 0xbc, 0x11, 0x9a, 0x85, 0x95, 0x42, 0x7f, 0x10, 0x14, 0x10, 0x72, 0xb1, 0xe4, 0xa7, 0x1d, - 0xc7, 0x23, 0x25, 0xea, 0x2d, 0x83, 0x0b, 0x38, 0xd3, 0x88, 0x61, 0xb3, 0xfc, 0x44, 0x20, 0x2d, - 0x59, 0x55, 0x00, 0x34, 0x33, 0x95, 0x19, 0x1e, 0x4c, 0x0c, 0x26, 0xee, 0x02, 0xbd, 0x0d, 0x90, - 0x89, 0x08, 0xa7, 0x45, 0x3f, 0x55, 0x96, 0x24, 0x48, 0x2a, 0x34, 0xb4, 0xb1, 0xbf, 0x9c, 0x88, - 0x09, 0x20, 0xe0, 0xe6, 0x9b, 0xbb, 0xd1, 0xc7, 0x84, 0x04, 0x0c, 0x12, 0x58, 0x0c, 0xf9, 0xa5, - 0xd3, 0xa2, 0xc1, 0x6e, 0xa4, 0x52, 0xbc, 0x82, 0xe2, 0x2b, 0x02, 0xc5, 0x40, 0xb4, 0xa0, 0xdc, - 0x8a, 0x83, 0x5a, 0xf2, 0x35, 0xe0, 0xde, 0x7c, 0x20, 0x20, 0x61, 0x22, 0x75, 0x0b, 0xdd, 0x43, - 0xf9, 0xd8, 0xe1, 0xac, 0x18, 0xd9, 0x18, 0x56, 0x18, 0xf6, 0xca, 0x30, 0x9b, 0x30, 0xee, 0x62, - 0x61, 0x42, 0x84, 0x76, 0x50, 0x1e, 0xc1, 0xf4, 0xc5, 0x4c, 0x01, 0x33, 0xe3, 0xed, 0xc7, 0x96, - 0xbf, 0x97, 0x86, 0x36, 0x84, 0xd3, 0xe6, 0xac, 0x10, 0x2f, 0x0c, 0x15, 0x2f, 0xca, 0x93, 0xfc, - 0x49, 0xa6, 0x5f, 0xcc, 0xc7, 0xc7, 0x88, 0x52, 0xfc, 0xec, 0x75, 0x13, 0xff, 0x85, 0x6c, 0x1b, - 0x06, 0x18, 0x60, 0x64, 0xe4, 0xe9, 0xe5, 0x03, 0xbd, 0xd1, 0xec, 0xff, 0xd1, 0xd8, 0xfa, 0xa0, - 0x03, 0xeb, 0x87, 0xd7, 0xe3, 0xd7, 0x2a, 0xe0, 0x8a, 0xa8, 0xff, 0xbe, 0xa8, 0x06, 0x93, 0x8c, - 0xdd, 0x55, 0xdd, 0x56, 0x81, 0x96, 0xea, 0x77, 0xfd, 0x62, 0xfa, 0xd7, 0xc9, 0x55, 0x66, 0xcf, - 0xd6, 0x2f, 0xaf, 0x5f, 0x56, 0xfa, 0xe6, 0xfa, 0xb5, 0x72, 0xd8, 0xe9, 0x99, 0x6f, 0x44, 0xce, - 0xae, 0x09, 0x30, 0x67, 0xc4, 0x90, 0x14, 0x1d, 0xf0, 0x53, 0xa3, 0x77, 0x75, 0x42, 0x02, 0xce, - 0x77, 0x35, 0x4e, 0x92, 0x18, 0x3b, 0x7f, 0xff, 0xe0, 0xa7, 0xb6, 0xdb, 0x35, 0xb7, 0xa9, 0xb2, - 0x37, 0xf8, 0x50, 0xe3, 0x1c, 0x76, 0x87, 0x68, 0x5e, 0xc6, 0x25, 0x90, 0xc9, 0x92, 0x35, 0xc5, - 0xfb, 0x19, 0x72, 0xc7, 0x7f, 0xc2, 0x94, 0xea, 0xba, 0x8f, 0x58, 0x6e, 0x6a, 0x09, 0xb0, 0x7d, - 0x96, 0xe9, 0xfe, 0x8e, 0xfc, 0x16, 0x0a, 0x62, 0xd5, 0x78, 0xcc, 0x2c, 0x95, 0x71, 0x8b, 0xb2, - 0x6f, 0x84, 0xc6, 0xdc, 0x7d, 0x5e, 0x54, 0xe8, 0x37, 0xf0, 0xa7, 0x31, 0xf4, 0xcb, 0x42, 0x0c, - 0x30, 0xe8, 0x21, 0xe0, 0x00, 0x1a, 0xd5, 0x72, 0x3c, 0x89, 0x9a, 0xb8, 0xe2, 0x53, 0xf1, 0x10, - 0xa5, 0xd0, 0xf1, 0x2f, 0x1c, 0x10, 0x24, 0x98, 0x96, 0xee, 0xcb, 0x63, 0x59, 0xc9, 0x92, 0x6b, - 0x9c, 0x4c, 0x6e, 0x6a, 0x8a, 0x0d, 0x43, 0x18, 0xe0, 0x78, 0x3c, 0x0f, 0x09, 0x40, 0x81, 0x7e, - 0xc2, 0x07, 0x72, 0x0b, 0xcf, 0x7b, 0xd8, 0xea, 0xff, 0xe0, 0xa6, 0xf8, 0x09, 0x70, 0xf5, 0x85, - 0xe2, 0x02, 0x41, 0x60, 0xfa, 0xe3, 0x18, 0xa2, 0x3e, 0xa8, 0x11, 0x18, 0xf4, 0x70, 0x7e, 0x09, - 0xcc, 0x9b, 0x64, 0x66, 0xb6, 0x75, 0x94, 0x1c, 0x44, 0x16, 0x09, 0x15, 0xb8, 0x87, 0x0f, 0x7a, - 0xad, 0xa3, 0xd5, 0x07, 0xbe, 0xce, 0x69, 0x97, 0x88, 0x05, 0x91, 0x5b, 0x8a, 0xc4, 0xbf, 0x6c, - 0xc2, 0x58, 0xe2, 0xff, 0xf8, 0x24, 0x31, 0x7f, 0x63, 0xeb, 0xdf, 0x05, 0x25, 0x2f, 0xe8, 0xa7, - 0x50, 0x52, 0x35, 0x0e, 0x61, 0xcc, 0xb3, 0xb7, 0xf7, 0xcd, 0x4e, 0x3a, 0x79, 0x74, 0x7c, 0x13, - 0x98, 0x7a, 0xc4, 0xb9, 0x44, 0xcd, 0x48, 0xd5, 0x3f, 0xf0, 0xa4, 0x60, 0x85, 0x27, 0x60, 0xe8, - 0x0e, 0xab, 0xfb, 0xb4, 0xb7, 0x17, 0x97, 0x2f, 0x74, 0x71, 0xf1, 0x21, 0x23, 0xea, 0x0e, 0x86, - 0xd6, 0x04, 0x4e, 0xc1, 0x7c, 0x40, 0x80, 0xa5, 0x94, 0x0b, 0xd2, 0x28, 0xd5, 0x5f, 0x61, 0xe4, - 0x76, 0x12, 0x4e, 0x57, 0xe2, 0x24, 0x38, 0x24, 0x16, 0x03, 0x03, 0x40, 0x99, 0xaf, 0x84, 0xaa, - 0x55, 0x90, 0x06, 0xf8, 0x52, 0x7e, 0x49, 0x2e, 0x41, 0x2c, 0x63, 0xd7, 0x31, 0x9a, 0x04, 0x01, - 0xf5, 0xa7, 0x14, 0x6a, 0xc0, 0x15, 0x4e, 0xd2, 0x99, 0xb4, 0x38, 0xe3, 0xb7, 0xa2, 0xaa, 0xa4, - 0x89, 0xb8, 0x44, 0x48, 0x2a, 0x96, 0xce, 0x41, 0x00, 0x42, 0x65, 0xde, 0x8c, 0xec, 0x5b, 0x9b, - 0xc4, 0x06, 0x44, 0xa4, 0x0c, 0x2a, 0xa0, 0x9d, 0x5c, 0x44, 0x12, 0xcc, 0x1d, 0x52, 0x4a, 0x41, - 0x77, 0xb6, 0xff, 0x74, 0x22, 0x28, 0xfc, 0x13, 0xf3, 0xb1, 0x15, 0x8a, 0xc5, 0x62, 0xbe, 0xf1, - 0x01, 0x71, 0x09, 0x86, 0x9a, 0x98, 0xb9, 0x2f, 0xec, 0xe6, 0x42, 0x09, 0xd0, 0xed, 0x18, 0x3b, - 0x52, 0x83, 0xff, 0x0d, 0xc2, 0x21, 0xfd, 0x28, 0x0d, 0xc8, 0x26, 0xc2, 0x47, 0x31, 0x67, 0xb3, - 0x66, 0x06, 0xfb, 0x17, 0xfe, 0x72, 0xe4, 0x05, 0x51, 0x0b, 0x21, 0x65, 0xff, 0x53, 0x25, 0x75, - 0x8a, 0xba, 0xb1, 0xf5, 0x61, 0xe0, 0x86, 0xcd, 0xa6, 0x91, 0xff, 0xe8, 0x8f, 0x2f, 0x57, 0xfa, - 0xfc, 0xbe, 0xbe, 0x2f, 0xa2, 0xb9, 0xf4, 0x5e, 0xf8, 0xac, 0xb2, 0x39, 0x3a, 0x4c, 0x9d, 0x0f, - 0xe6, 0x31, 0xf2, 0x62, 0x0d, 0x44, 0xc1, 0x04, 0xec, 0x9c, 0xf1, 0xe5, 0xc4, 0xbd, 0x98, 0x55, - 0x56, 0x51, 0x7c, 0x3e, 0x69, 0x66, 0x2e, 0xa8, 0x1c, 0xb3, 0xc4, 0x86, 0x01, 0xb4, 0xef, 0x0b, - 0x66, 0x67, 0xf8, 0x29, 0xb3, 0x15, 0x54, 0x5d, 0x45, 0xd5, 0x45, 0xe9, 0x29, 0x51, 0xfe, 0x11, - 0x93, 0xa0, 0xa6, 0x10, 0x15, 0x53, 0x28, 0x64, 0x11, 0x6d, 0x18, 0x3c, 0x4c, 0xa5, 0x74, 0x7f, - 0x12, 0x09, 0x49, 0x49, 0xad, 0xd3, 0xa1, 0x3f, 0x89, 0xf1, 0x21, 0x4b, 0x71, 0xdc, 0xb7, 0x15, - 0x89, 0x58, 0xb3, 0xd5, 0x05, 0x00, 0x00, 0x8a, 0xef, 0xbb, 0x9f, 0x0f, 0x05, 0x45, 0xdb, 0x5a, - 0xa3, 0x7b, 0xd0, 0x1e, 0x87, 0x2b, 0xd3, 0x67, 0xc1, 0x61, 0x58, 0x37, 0x14, 0x21, 0x06, 0x8d, - 0x09, 0x36, 0xc6, 0xdf, 0xf5, 0x76, 0x9f, 0x88, 0x85, 0x09, 0x95, 0x43, 0xde, 0xe4, 0xeb, 0x50, - 0x17, 0xb7, 0xe8, 0x27, 0x58, 0xbe, 0xe7, 0xd8, 0x55, 0xd3, 0x8e, 0x20, 0xf8, 0x52, 0x80, 0xd8, - 0xd0, 0xd4, 0xc8, 0x16, 0x89, 0x8a, 0xb4, 0x34, 0x05, 0x21, 0x05, 0xff, 0xf0, 0x51, 0x42, 0x64, - 0xac, 0x03, 0x62, 0x25, 0x33, 0xff, 0xa9, 0xda, 0xba, 0xf5, 0x71, 0x04, 0xab, 0xf2, 0xe3, 0xbf, - 0xf8, 0x53, 0x1c, 0xe2, 0xd3, 0xb2, 0xd9, 0x66, 0xd9, 0xb0, 0x8b, 0x88, 0xdb, 0x17, 0xd1, 0xe6, - 0x8d, 0x47, 0xa9, 0xab, 0x0b, 0xc7, 0x7b, 0xc4, 0x8c, 0x38, 0x4d, 0x83, 0xe3, 0x34, 0x83, 0xd2, - 0x0a, 0x10, 0x84, 0x18, 0x73, 0x8d, 0x22, 0xd7, 0x34, 0x10, 0x05, 0x04, 0x30, 0x38, 0xcf, 0xff, - 0x4a, 0x9c, 0x6d, 0xc7, 0x41, 0xaa, 0x3c, 0x29, 0x53, 0x18, 0xb7, 0x60, 0xd3, 0x0c, 0xa8, 0x09, - 0x52, 0x21, 0x46, 0x7a, 0x18, 0x09, 0x13, 0xf6, 0xd2, 0x14, 0x24, 0x6c, 0x8b, 0xb6, 0x9a, 0xcc, - 0x87, 0xb8, 0x91, 0x23, 0xef, 0x0c, 0x1d, 0xf9, 0x54, 0x3f, 0x4b, 0x81, 0xaf, 0x17, 0xab, 0x5e, - 0x00, 0x77, 0xeb, 0x67, 0xfd, 0x3f, 0x9d, 0xda, 0x6f, 0xdc, 0x58, 0x71, 0xaa, 0xfe, 0xfb, 0xa6, - 0x20, 0x40, 0x24, 0x8a, 0xc5, 0x6e, 0x50, 0x80, 0x2f, 0xe2, 0x06, 0x42, 0x1c, 0x10, 0xca, 0xf4, - 0x69, 0x09, 0x46, 0x21, 0x20, 0x88, 0x4d, 0x83, 0x06, 0xec, 0xa3, 0xd7, 0x78, 0x91, 0x00, 0x52, - 0x56, 0x1d, 0xa4, 0x94, 0x2e, 0x22, 0xdb, 0xab, 0xd0, 0x67, 0x94, 0x4c, 0xf1, 0x79, 0x80, 0x00, - 0x21, 0xf8, 0x41, 0xbb, 0x02, 0x66, 0x63, 0x95, 0xf8, 0x2b, 0x2b, 0xb1, 0x15, 0x47, 0xa6, 0x38, - 0x13, 0x63, 0xcf, 0x92, 0xaf, 0xe1, 0x3d, 0x80, 0xa3, 0xed, 0x92, 0x90, 0x5a, 0xfc, 0x84, 0x76, - 0xa8, 0xf8, 0x80, 0xa0, 0xc9, 0x92, 0x28, 0x9b, 0x62, 0xef, 0x24, 0x2a, 0xc5, 0x06, 0x18, 0x70, - 0x99, 0x79, 0xd8, 0xef, 0xc3, 0x62, 0x4e, 0xf2, 0x48, 0x1f, 0x7f, 0x3c, 0x31, 0x1a, 0x94, 0x33, - 0xa8, 0x67, 0x0e, 0x33, 0xfb, 0xbf, 0x93, 0xa2, 0x3f, 0xd1, 0x6f, 0xf5, 0x7b, 0xeb, 0x13, 0xaf, - 0x57, 0xae, 0x08, 0xf3, 0xb1, 0x63, 0xc7, 0x7c, 0x11, 0x11, 0x8d, 0x8d, 0x8d, 0x8f, 0x55, 0xc1, - 0x19, 0xde, 0xf6, 0xfa, 0x25, 0x7d, 0x5f, 0xeb, 0x2a, 0xeb, 0x1a, 0xb8, 0x72, 0xc4, 0x78, 0x40, - 0xd8, 0x8b, 0xc3, 0xa3, 0x9e, 0xac, 0x22, 0x54, 0xcf, 0x42, 0x5f, 0xe3, 0x48, 0x57, 0xae, 0x4f, - 0xae, 0xba, 0xaa, 0x52, 0xe2, 0x6d, 0x6d, 0x7d, 0xed, 0x60, 0xe6, 0x27, 0xdc, 0x70, 0x69, 0x7b, - 0xe8, 0x48, 0xa2, 0x42, 0xff, 0x05, 0x87, 0x9c, 0x31, 0x4d, 0x66, 0x32, 0xe7, 0x2a, 0xa3, 0x5f, - 0xc4, 0xc4, 0x1d, 0x3a, 0xa9, 0x2c, 0xe0, 0xdd, 0x99, 0x70, 0x48, 0x78, 0x2a, 0x40, 0x6e, 0x1d, - 0xc4, 0x41, 0x29, 0x36, 0x24, 0xda, 0x37, 0x30, 0xc1, 0x74, 0x19, 0x3e, 0xf8, 0xc8, 0xf4, 0xe4, - 0x78, 0xc7, 0xe2, 0x16, 0x0e, 0x4c, 0x5b, 0x0b, 0xe8, 0x2b, 0x2d, 0xab, 0xb1, 0xd8, 0xce, 0x38, - 0x80, 0x43, 0x71, 0x5d, 0xb9, 0xff, 0x89, 0x08, 0x88, 0x64, 0xc4, 0xe7, 0x2a, 0xf7, 0x2f, 0x3a, - 0x4e, 0xcc, 0x00, 0x0f, 0x82, 0xb1, 0x29, 0xda, 0x9c, 0x76, 0xae, 0x34, 0x88, 0xa3, 0x76, 0x1e, - 0x2c, 0xb4, 0x24, 0x61, 0xc7, 0x6a, 0xc4, 0xc3, 0x69, 0x8a, 0xd4, 0x3f, 0x5c, 0xbc, 0x40, 0x2b, - 0x98, 0x30, 0x13, 0xaf, 0x91, 0x83, 0xa9, 0x40, 0x3a, 0x12, 0x02, 0x1e, 0x62, 0x51, 0x01, 0x45, - 0x8a, 0x1f, 0xfc, 0x17, 0x4a, 0xdf, 0xa1, 0x43, 0xb3, 0xb1, 0x6f, 0x82, 0xaa, 0xca, 0x41, 0xbb, - 0x8a, 0xdc, 0xac, 0x5a, 0x02, 0x4f, 0x77, 0xc1, 0x3c, 0xac, 0xd2, 0x94, 0x34, 0xc1, 0x1e, 0x38, - 0xda, 0x7c, 0x11, 0x18, 0xcc, 0xee, 0xc7, 0xc9, 0x6e, 0x66, 0x3e, 0x0b, 0x73, 0xac, 0xdf, 0x9e, - 0x74, 0x71, 0xf8, 0x46, 0x5a, 0xd1, 0x32, 0xba, 0xca, 0x41, 0xd3, 0x10, 0xe7, 0x8c, 0x28, 0x87, - 0x0a, 0xf4, 0x2a, 0x12, 0xd5, 0xc7, 0xa6, 0xc6, 0x36, 0x7a, 0xc1, 0x2c, 0x92, 0x14, 0xba, 0x99, - 0xa8, 0xb3, 0xea, 0x34, 0x5c, 0x15, 0x4e, 0xfe, 0x27, 0xc2, 0x92, 0x12, 0x49, 0x74, 0x4a, 0xd6, - 0x64, 0xcb, 0x63, 0xf9, 0x6c, 0x9d, 0x00, 0x66, 0x31, 0x39, 0x76, 0xe2, 0xaa, 0xc2, 0x45, 0x86, - 0xea, 0x74, 0x32, 0x12, 0x35, 0x1c, 0x30, 0xff, 0xc2, 0x12, 0xd9, 0x6c, 0xf4, 0x20, 0x09, 0x6f, - 0xba, 0x22, 0x80, 0xeb, 0x43, 0x13, 0x0d, 0xe2, 0x21, 0x49, 0x39, 0x74, 0xe9, 0x1f, 0x84, 0x78, - 0x64, 0x1f, 0xad, 0xd6, 0x83, 0x0d, 0x70, 0x12, 0xa8, 0x3f, 0xd3, 0x92, 0x80, 0x9d, 0xda, 0x96, - 0x3d, 0x8d, 0x99, 0xd0, 0x09, 0x21, 0x6b, 0xdb, 0xa9, 0xbd, 0x7f, 0x85, 0x29, 0x5c, 0x27, 0x56, - 0xc2, 0x08, 0xf0, 0x58, 0x1c, 0xf5, 0x5e, 0xee, 0x68, 0x63, 0x76, 0x20, 0xdb, 0x90, 0x60, 0xac, - 0x08, 0x06, 0x9b, 0x97, 0x27, 0xbc, 0x33, 0x04, 0xa2, 0xb4, 0x5b, 0xf0, 0xa7, 0x79, 0x40, 0x11, - 0x05, 0xb3, 0xfa, 0x4d, 0xd7, 0x40, 0x34, 0x11, 0x02, 0x50, 0x1c, 0x02, 0x7f, 0xca, 0xe0, 0x80, - 0x95, 0x11, 0x0e, 0x02, 0xb0, 0x60, 0xc5, 0xc8, 0x3b, 0x63, 0x7c, 0x23, 0xad, 0x98, 0x35, 0xf2, - 0x32, 0x65, 0x3f, 0x4d, 0x7b, 0x10, 0xd4, 0xcb, 0x6d, 0x78, 0x81, 0x5c, 0x9b, 0x3d, 0xa6, 0x4d, - 0x8b, 0xc6, 0x16, 0x5e, 0x6d, 0xdf, 0xe7, 0x51, 0x89, 0x76, 0x2f, 0xb7, 0xe4, 0xb1, 0x4e, 0x32, - 0x7c, 0xe2, 0x01, 0x41, 0x85, 0x1b, 0xcf, 0x8c, 0x65, 0x97, 0xef, 0x8d, 0x15, 0x7b, 0x8a, 0xf2, - 0x79, 0xec, 0x0f, 0x07, 0x2f, 0x5b, 0x62, 0x16, 0x1d, 0x51, 0xa6, 0xde, 0x5e, 0x41, 0x01, 0xff, - 0x42, 0xf2, 0xfa, 0xea, 0xf9, 0x2c, 0xc6, 0x5c, 0x1f, 0xc1, 0x5e, 0x0d, 0xd8, 0x91, 0xb0, 0x6a, - 0x86, 0xc0, 0x34, 0xaf, 0x5f, 0x53, 0x27, 0xc4, 0xc9, 0x16, 0x23, 0xfe, 0xe8, 0x77, 0xdf, 0x6d, - 0x3f, 0x54, 0x77, 0xeb, 0xa9, 0xfa, 0xc3, 0xbe, 0x8d, 0xae, 0x26, 0x34, 0x8b, 0x0b, 0x6a, 0x99, - 0x30, 0xc8, 0x9a, 0x11, 0xb1, 0xe4, 0x51, 0x02, 0x3d, 0x39, 0xe8, 0x2d, 0xdb, 0xc8, 0xdf, 0x6f, - 0x8f, 0xe5, 0xe0, 0x81, 0x2c, 0x87, 0xa5, 0x9d, 0x42, 0x3d, 0x2c, 0xe5, 0x10, 0x18, 0xff, 0x7f, - 0x04, 0x75, 0x17, 0x33, 0x12, 0xe7, 0xc1, 0x51, 0xd2, 0xa3, 0x5b, 0x93, 0xa9, 0x55, 0x6f, 0x5a, - 0x9c, 0xe2, 0x63, 0x04, 0x86, 0xf9, 0x49, 0x25, 0x57, 0x42, 0x48, 0xa6, 0x2b, 0x90, 0x7c, 0xa6, - 0xb0, 0xb0, 0xf4, 0x33, 0x89, 0x07, 0x73, 0xfa, 0xe2, 0x20, 0x8c, 0x8f, 0xb1, 0xfb, 0x88, 0x82, - 0xc8, 0xe8, 0xd0, 0x95, 0x43, 0x26, 0xa2, 0x24, 0x11, 0xc1, 0xa0, 0xc0, 0x40, 0x15, 0xc2, 0x40, - 0xbc, 0x96, 0xd0, 0x77, 0xf7, 0xc7, 0x45, 0x65, 0xc7, 0x26, 0x41, 0xa0, 0xd8, 0xe5, 0x25, 0xf5, - 0xf0, 0xa5, 0xeb, 0x3f, 0x78, 0x80, 0x88, 0xb0, 0x4e, 0x1a, 0x98, 0x30, 0x4f, 0xfb, 0xca, 0x63, - 0x6f, 0xe5, 0x8e, 0xd1, 0xc1, 0xf8, 0x40, 0xc4, 0xf1, 0x02, 0x8c, 0xbd, 0x68, 0x95, 0xb2, 0x18, - 0xaa, 0x96, 0x6b, 0xe1, 0x23, 0xd5, 0xdf, 0x41, 0x6e, 0xce, 0x5c, 0xf0, 0x8e, 0x45, 0x33, 0xb4, - 0x8c, 0x43, 0x45, 0x89, 0x89, 0x1e, 0x8e, 0x8f, 0xe0, 0xab, 0xe1, 0xc8, 0x81, 0x93, 0x63, 0x14, - 0x07, 0x9d, 0x86, 0x68, 0x34, 0x90, 0x05, 0xe2, 0x01, 0x26, 0x99, 0x6e, 0x8d, 0x23, 0xf5, 0xef, - 0x9a, 0x91, 0x79, 0x2e, 0x3f, 0x04, 0xb1, 0x71, 0x86, 0x26, 0x62, 0x5a, 0x4b, 0x1f, 0xbe, 0x09, - 0xf2, 0xa9, 0x5d, 0x9a, 0xb3, 0x56, 0xf8, 0x2c, 0xe3, 0x37, 0x62, 0x0f, 0x90, 0x86, 0x28, 0xd9, - 0x09, 0x8c, 0x75, 0xe2, 0x81, 0xbc, 0x00, 0x03, 0xdc, 0x44, 0x29, 0x76, 0x39, 0x0e, 0x94, 0x20, - 0x0c, 0x37, 0x84, 0x01, 0x8a, 0xa6, 0x89, 0x4b, 0xa6, 0xf8, 0x16, 0xcb, 0x61, 0x56, 0x71, 0xf8, - 0x88, 0x26, 0x9e, 0x1d, 0x09, 0xcc, 0xe8, 0x3d, 0x00, 0xcf, 0x71, 0x02, 0x1d, 0x8e, 0x37, 0xf1, - 0x30, 0x8f, 0x40, 0xa4, 0xae, 0xe1, 0xe6, 0x02, 0x7e, 0xb5, 0xe2, 0x01, 0x37, 0x44, 0xf1, 0xd1, - 0x09, 0x40, 0xd9, 0x07, 0x0d, 0x33, 0xef, 0x0b, 0x3d, 0x38, 0x90, 0x59, 0x7e, 0xbb, 0x46, 0x95, - 0xaa, 0xa4, 0xf8, 0xc3, 0x9c, 0x83, 0x09, 0xa5, 0x72, 0x79, 0xe0, 0xfb, 0x07, 0x18, 0x17, 0xc4, - 0x69, 0x4b, 0xf6, 0x22, 0x84, 0x01, 0x68, 0x96, 0x22, 0x09, 0x64, 0x50, 0x51, 0x4a, 0x3e, 0x03, - 0x41, 0x8d, 0x3b, 0xfa, 0xf8, 0x43, 0xa6, 0x65, 0x42, 0xe7, 0xf8, 0x8f, 0x3e, 0xa1, 0x33, 0xa4, - 0xfe, 0x0b, 0xa6, 0xd3, 0xe1, 0x3b, 0xb2, 0xe3, 0x64, 0x4e, 0x2f, 0x8e, 0x99, 0x8e, 0x8c, 0x25, - 0xc5, 0xca, 0xde, 0x45, 0x96, 0x10, 0x3f, 0x5f, 0x10, 0x09, 0x47, 0x54, 0x57, 0x54, 0xa9, 0x3f, - 0x25, 0x54, 0x7a, 0x62, 0x31, 0xff, 0x1b, 0x4d, 0xe8, 0xc0, 0xfb, 0xa0, 0xbf, 0x3c, 0x7a, 0x9c, - 0xa8, 0x23, 0xa0, 0xe7, 0x82, 0x10, 0xa2, 0x04, 0x0d, 0xba, 0xc6, 0x09, 0x22, 0xb8, 0x12, 0x4e, - 0xe3, 0x4b, 0xcf, 0xc2, 0x74, 0x10, 0xd6, 0x01, 0x79, 0x0f, 0xb3, 0x9d, 0xf2, 0x81, 0x14, 0x95, - 0x40, 0xef, 0x69, 0xfe, 0x09, 0x4e, 0x96, 0x93, 0x06, 0x61, 0x8a, 0x2a, 0xa0, 0xf9, 0x76, 0x4b, - 0x7d, 0x71, 0x7d, 0x77, 0xfa, 0xa4, 0x5e, 0xa6, 0x55, 0x70, 0x45, 0x54, 0x9d, 0xd9, 0xf3, 0xd5, - 0xa6, 0x92, 0x4b, 0xfd, 0x5d, 0xf5, 0x20, 0xaf, 0xa9, 0xd2, 0xb8, 0x22, 0xb6, 0x86, 0xdd, 0xdf, - 0x52, 0xe7, 0xc1, 0x25, 0x1a, 0x36, 0x6e, 0xe7, 0xcd, 0x57, 0x5e, 0x26, 0x0a, 0xc4, 0x0f, 0x26, - 0x1a, 0xc3, 0xbf, 0x89, 0xf3, 0x79, 0x2e, 0x0f, 0x60, 0xaa, 0x6a, 0xd1, 0x1e, 0xf8, 0x25, 0x8c, - 0xd1, 0xf7, 0x15, 0x57, 0xca, 0xa9, 0x18, 0xcb, 0xe1, 0x4c, 0xaf, 0x13, 0x51, 0xf5, 0x17, 0x53, - 0x28, 0x52, 0xf4, 0xff, 0x67, 0x3f, 0xa3, 0xf8, 0x29, 0xbb, 0x61, 0x46, 0xc6, 0x31, 0x57, 0x03, - 0x37, 0x2b, 0x66, 0x0a, 0x2c, 0xc1, 0xc3, 0x87, 0x30, 0x25, 0xf6, 0x24, 0xea, 0xab, 0x58, 0x2a, - 0x54, 0xb3, 0xf0, 0x48, 0x4d, 0x0d, 0x5d, 0xf2, 0x76, 0x35, 0xc4, 0x41, 0x2c, 0x8c, 0x7e, 0x92, - 0xa3, 0xef, 0x82, 0x59, 0x14, 0x7d, 0x00, 0xac, 0xc8, 0xde, 0xf8, 0x21, 0x32, 0x7c, 0x6e, 0xff, - 0x09, 0xcb, 0xe5, 0x56, 0xdd, 0xbf, 0x13, 0xdb, 0x4e, 0x9d, 0x3f, 0x18, 0x5b, 0x19, 0x5d, 0x00, - 0xf9, 0x54, 0x3a, 0x1c, 0xa8, 0xb8, 0xc8, 0x90, 0xab, 0xc1, 0x27, 0x1e, 0xaf, 0xef, 0x8b, 0xbb, - 0x8f, 0xd4, 0x7b, 0x4c, 0xd4, 0xf8, 0xbe, 0x1b, 0x86, 0xe5, 0xae, 0xdf, 0x82, 0x1d, 0xb5, 0xb5, - 0x70, 0xa1, 0x4b, 0x8a, 0x8c, 0xce, 0x00, 0x01, 0x20, 0xda, 0xd6, 0x51, 0xd2, 0xca, 0x7e, 0xac, - 0x62, 0x8c, 0x0e, 0x5b, 0x32, 0x6e, 0x25, 0x88, 0x91, 0xe3, 0xde, 0x85, 0xb6, 0x52, 0x58, 0x06, - 0x38, 0xac, 0xb1, 0xd0, 0x8c, 0x77, 0x0c, 0x9c, 0x48, 0x90, 0x8d, 0x06, 0x56, 0x12, 0x74, 0x1b, - 0xca, 0x10, 0xbb, 0x3a, 0x7b, 0xb1, 0xf8, 0x24, 0xb4, 0x7c, 0x9b, 0x1c, 0xf1, 0x23, 0x0a, 0xc9, - 0x1a, 0x6b, 0xe6, 0x0f, 0xe6, 0x3f, 0xd6, 0x61, 0x6c, 0xa1, 0xf1, 0x0c, 0xa0, 0x00, 0xec, 0x45, - 0x00, 0x93, 0x3d, 0xec, 0x52, 0x41, 0x2c, 0x44, 0x6e, 0x94, 0x59, 0x44, 0x70, 0xd4, 0x57, 0x85, - 0xc6, 0x41, 0x4e, 0x79, 0xa3, 0x59, 0x13, 0xf6, 0x25, 0x28, 0x60, 0x82, 0x6e, 0x16, 0x68, 0x6c, - 0xdf, 0x83, 0x6b, 0x6e, 0xae, 0x92, 0x8e, 0xfd, 0xd5, 0x24, 0xbc, 0xa4, 0x96, 0x1f, 0x13, 0x13, - 0x5d, 0xb6, 0x79, 0x6a, 0xc1, 0xf8, 0x26, 0x39, 0xff, 0x9c, 0x92, 0x06, 0x5c, 0xd2, 0xbc, 0x4c, - 0x28, 0x43, 0x02, 0x01, 0x3a, 0x42, 0x98, 0xbf, 0x08, 0x1b, 0x58, 0x52, 0x75, 0x52, 0x24, 0xe0, - 0x82, 0xe2, 0x0a, 0x16, 0x4a, 0x0b, 0x53, 0x84, 0x61, 0x29, 0xb9, 0x33, 0x28, 0x60, 0xdb, 0x56, - 0x58, 0x98, 0x40, 0xca, 0x2f, 0xe3, 0x92, 0x69, 0xdf, 0xe1, 0x01, 0x2c, 0x23, 0x3f, 0x2a, 0xa9, - 0xbb, 0x26, 0xe2, 0x06, 0x81, 0x9c, 0xe3, 0xa5, 0xe5, 0xa0, 0x74, 0x08, 0xa6, 0xaf, 0x9f, 0x10, - 0x34, 0x76, 0x2d, 0x5d, 0xa6, 0x7a, 0xba, 0x5b, 0x62, 0x4f, 0xae, 0xbe, 0x22, 0x41, 0x27, 0x04, - 0x68, 0xc9, 0x05, 0x86, 0xe1, 0x70, 0xa0, 0x03, 0xb1, 0x41, 0x49, 0x46, 0x94, 0xb3, 0x1d, 0x11, - 0x66, 0x7f, 0xa1, 0x30, 0x7d, 0x70, 0xae, 0x7c, 0xac, 0x9e, 0x47, 0xff, 0x86, 0xae, 0x81, 0xdd, - 0x55, 0xe5, 0xff, 0xd7, 0x2f, 0xa2, 0x45, 0x5d, 0x58, 0xfa, 0x2e, 0x2f, 0x9a, 0xbb, 0xbe, 0xee, - 0xee, 0xbe, 0xb2, 0xfb, 0xa6, 0xdd, 0x3f, 0x7d, 0xdf, 0xce, 0x45, 0xaa, 0x23, 0x43, 0xdf, 0x04, - 0xe5, 0x15, 0x8a, 0xc4, 0xa0, 0x00, 0x12, 0xd8, 0xda, 0x92, 0xa8, 0x15, 0xde, 0x36, 0x02, 0x2a, - 0x50, 0x04, 0x27, 0x87, 0x46, 0x33, 0x07, 0xbe, 0xef, 0x19, 0xef, 0x8e, 0xa5, 0xef, 0xea, 0xaa, - 0xc4, 0x5a, 0x7f, 0xe0, 0x84, 0xe9, 0x2d, 0x51, 0xda, 0xe0, 0x84, 0x48, 0xc1, 0xaf, 0xbc, 0x5c, - 0x4c, 0x28, 0x30, 0xe2, 0x04, 0x98, 0x35, 0x65, 0x9e, 0xec, 0x2f, 0x78, 0xee, 0x0b, 0x58, 0x6c, - 0x0a, 0x69, 0x4a, 0x81, 0x47, 0xa1, 0x23, 0x2c, 0xc6, 0xd4, 0x81, 0xc4, 0x0c, 0x1a, 0x19, 0x12, - 0x80, 0x3f, 0xad, 0x8c, 0x5b, 0xa0, 0x79, 0x0e, 0x44, 0x7e, 0xc7, 0x8d, 0xc2, 0x09, 0xd5, 0x8d, - 0x63, 0x8b, 0x3a, 0x64, 0xaf, 0x90, 0x31, 0x9b, 0xff, 0x2d, 0x7a, 0x60, 0xb7, 0x6f, 0x89, 0x12, - 0x2e, 0xb0, 0xb5, 0x04, 0x08, 0x4b, 0xf4, 0xdf, 0x11, 0x0d, 0x56, 0xad, 0x1e, 0x61, 0x43, 0x7b, - 0xfe, 0x22, 0x14, 0xbe, 0x18, 0x44, 0x38, 0xa8, 0x94, 0x27, 0xea, 0xe0, 0x40, 0x24, 0x00, 0x00, - 0xc1, 0xa1, 0x77, 0x95, 0x08, 0x50, 0x4e, 0xe5, 0xbe, 0x0a, 0x67, 0xee, 0x17, 0x52, 0x0f, 0x15, - 0x0c, 0x9e, 0xfc, 0x60, 0x44, 0x7d, 0xf0, 0x51, 0x43, 0x9c, 0xaa, 0x9d, 0x40, 0xad, 0xf0, 0xbe, - 0xf8, 0x2a, 0x28, 0x81, 0x50, 0x7a, 0x10, 0x04, 0x2c, 0x3c, 0xbd, 0x8c, 0xbf, 0x42, 0xd8, 0x43, - 0x61, 0x01, 0x95, 0x19, 0x78, 0x2b, 0x23, 0x57, 0x61, 0xed, 0x57, 0x39, 0x4c, 0xa1, 0xe2, 0xe4, - 0x5f, 0x2d, 0x9b, 0x59, 0x54, 0xf8, 0x53, 0xa0, 0x64, 0x85, 0xcb, 0xe7, 0x4b, 0xce, 0xf5, 0x7f, - 0x1b, 0x88, 0x82, 0x3c, 0xea, 0x58, 0x2a, 0xdf, 0x88, 0x85, 0x24, 0xee, 0xb4, 0x22, 0xd5, 0x2d, - 0x73, 0x4d, 0x86, 0xce, 0x81, 0x9f, 0xd2, 0x7c, 0x64, 0x74, 0x6c, 0x20, 0x1e, 0x57, 0x83, 0xd6, - 0x5e, 0x68, 0x30, 0x14, 0x6a, 0xe8, 0xd6, 0x4f, 0x9d, 0xe3, 0x4d, 0xc4, 0x39, 0xe3, 0x2d, 0xc4, - 0x23, 0xac, 0x5e, 0x98, 0x7d, 0x31, 0xea, 0x70, 0x00, 0x05, 0xcc, 0x0a, 0xb5, 0xc1, 0xea, 0xf5, - 0xd0, 0xef, 0x0d, 0xc1, 0x90, 0x30, 0xba, 0x0b, 0x89, 0x28, 0x72, 0x14, 0xdd, 0x5b, 0xa3, 0x2d, - 0x9b, 0x95, 0x43, 0x54, 0xe2, 0x04, 0x02, 0x59, 0xd7, 0xec, 0x23, 0x1f, 0x8e, 0x00, 0xc8, 0x17, - 0x6f, 0x8a, 0xc0, 0x2a, 0xc7, 0xdd, 0x34, 0x50, 0x23, 0xae, 0xc5, 0x78, 0x91, 0x23, 0x39, 0x83, - 0x10, 0xc4, 0x5d, 0xe2, 0x8c, 0x56, 0x4c, 0xb8, 0x0f, 0x54, 0x2a, 0x1d, 0xe5, 0xe1, 0x47, 0x0a, - 0x2e, 0x1d, 0xf5, 0xc3, 0x43, 0x4f, 0x60, 0x58, 0x88, 0x4c, 0x89, 0x2a, 0x1c, 0xf2, 0x55, 0x55, - 0x08, 0x11, 0x58, 0xd0, 0x3f, 0x25, 0xa7, 0xf8, 0x90, 0x50, 0x47, 0x4b, 0x95, 0x09, 0x61, 0x01, - 0xf7, 0x89, 0x19, 0x8a, 0xc5, 0x65, 0x20, 0x9f, 0xa4, 0x4a, 0xd8, 0xd6, 0x5d, 0x2d, 0xc4, 0x96, - 0x45, 0x0b, 0xf1, 0x3c, 0x48, 0x9a, 0xc4, 0x02, 0xcb, 0x5e, 0x18, 0xd0, 0x84, 0x31, 0x35, 0x04, - 0x6f, 0x44, 0xee, 0x5b, 0x4c, 0x66, 0x10, 0x02, 0xcc, 0xfc, 0x3f, 0xa3, 0x75, 0x4c, 0x9a, 0x18, - 0x11, 0x9a, 0x65, 0x26, 0x4b, 0xa0, 0x5b, 0xf0, 0xed, 0x2f, 0xc9, 0x40, 0x2f, 0x60, 0x6f, 0x5d, - 0x0d, 0x19, 0xaf, 0xff, 0x52, 0xa5, 0x75, 0x3a, 0x7d, 0x7b, 0xeb, 0xdf, 0x5a, 0xae, 0xbd, 0x7d, - 0x75, 0xf5, 0x8a, 0x7e, 0xbd, 0xc4, 0xc2, 0x86, 0x05, 0xad, 0x31, 0x75, 0x15, 0xe4, 0x9c, 0xa9, - 0x70, 0x0a, 0x3e, 0xc5, 0x36, 0x54, 0x9a, 0x3e, 0x63, 0xb7, 0xc2, 0x85, 0x7a, 0xa8, 0xd0, 0x36, - 0x1a, 0x32, 0x2a, 0x4b, 0x1e, 0x45, 0xe8, 0xcb, 0x72, 0x60, 0xda, 0x43, 0xbb, 0xfc, 0x14, 0xf5, - 0x55, 0x43, 0xe5, 0x7b, 0x7c, 0x10, 0xea, 0x9d, 0xfe, 0x09, 0xed, 0xa1, 0xd1, 0x3c, 0x6c, 0x64, - 0x7a, 0x81, 0x8a, 0x37, 0xc2, 0x82, 0x2c, 0x1b, 0x72, 0x6c, 0xb8, 0x0f, 0xaf, 0xa1, 0xac, 0x06, - 0x70, 0xf7, 0x63, 0x35, 0x09, 0x4a, 0x22, 0xd5, 0xb8, 0xca, 0xa8, 0xa8, 0xc1, 0x89, 0x0c, 0x0c, - 0x1a, 0x4e, 0xae, 0xbf, 0x97, 0xd5, 0x77, 0x58, 0xae, 0xa6, 0xd2, 0x09, 0x5b, 0x2b, 0x14, 0x67, - 0x8a, 0x43, 0xc7, 0xe1, 0x00, 0xc8, 0x52, 0xf7, 0xaa, 0x97, 0x1e, 0x41, 0x1d, 0x68, 0x39, 0xa5, - 0xb5, 0x86, 0xf3, 0x85, 0x86, 0x88, 0x09, 0x63, 0x11, 0x77, 0x11, 0x19, 0x27, 0xe3, 0x41, 0xf1, - 0xd1, 0x01, 0x55, 0x63, 0x1b, 0x9e, 0x73, 0x43, 0xd8, 0x53, 0x8c, 0xf4, 0x78, 0x35, 0xc6, 0x9c, - 0x5b, 0x1f, 0x3c, 0x86, 0xa9, 0x0f, 0x29, 0x6b, 0xa1, 0x33, 0x15, 0xba, 0x2c, 0xb6, 0x25, 0x18, - 0x25, 0xb4, 0x8e, 0xe3, 0x54, 0x54, 0xdc, 0x08, 0x04, 0x76, 0xb6, 0xdb, 0x6d, 0xff, 0x82, 0x72, - 0x56, 0x72, 0x53, 0xb1, 0x60, 0x7c, 0xcb, 0x11, 0x04, 0x44, 0xad, 0x8d, 0xdc, 0x44, 0x4d, 0x53, - 0x28, 0x86, 0x3b, 0x8c, 0x84, 0x04, 0xe2, 0x0f, 0x82, 0x32, 0xc9, 0x1a, 0x5d, 0xf0, 0x55, 0xb0, - 0x63, 0x87, 0x0f, 0x2e, 0x11, 0x24, 0xed, 0x62, 0xfb, 0xe0, 0x9b, 0x98, 0x40, 0x8d, 0xc2, 0x75, - 0xa1, 0x09, 0x60, 0x50, 0x92, 0xfc, 0x3c, 0x56, 0x83, 0xf0, 0x71, 0x78, 0x0e, 0x30, 0x48, 0xf8, - 0xf6, 0xd4, 0x1f, 0x94, 0xd4, 0x6c, 0x00, 0x2c, 0x0d, 0x3b, 0xf7, 0x97, 0xa7, 0xe3, 0x22, 0x98, - 0xd8, 0x81, 0x58, 0x3e, 0xe5, 0x7a, 0x05, 0x82, 0x0a, 0x9b, 0x0f, 0x10, 0x9a, 0x9d, 0xce, 0x21, - 0xf6, 0x10, 0xd6, 0xe1, 0xfb, 0x29, 0x2a, 0x9a, 0xbb, 0xb5, 0x30, 0xd6, 0x0e, 0x11, 0x82, 0x73, - 0xfc, 0x16, 0x6d, 0x95, 0x4d, 0x67, 0x52, 0x9b, 0x9d, 0x8f, 0xd4, 0xd6, 0x84, 0x74, 0xb9, 0x7c, - 0x67, 0x9d, 0x42, 0x38, 0x9a, 0x08, 0x36, 0xbe, 0x75, 0xcb, 0xfd, 0x83, 0xc4, 0x08, 0x05, 0x72, - 0xb1, 0xa2, 0x1f, 0x04, 0x48, 0xa3, 0x26, 0x44, 0x04, 0x36, 0x3b, 0x2e, 0xf7, 0x74, 0x26, 0x3e, - 0xe5, 0x0e, 0x50, 0x68, 0x37, 0xf1, 0x99, 0xb9, 0x0a, 0xbb, 0x86, 0x32, 0x30, 0x82, 0xa8, 0x2c, - 0x71, 0x8c, 0x28, 0x00, 0x0d, 0x12, 0x79, 0xf6, 0xc1, 0x30, 0xd4, 0xe5, 0x45, 0x89, 0x8c, 0xce, - 0x18, 0x9c, 0x65, 0x8b, 0x20, 0x7b, 0x71, 0x43, 0x33, 0x59, 0x24, 0x2c, 0x37, 0x63, 0x51, 0x6c, - 0x50, 0x8b, 0x10, 0x20, 0x41, 0x1b, 0xe2, 0x73, 0xe6, 0x25, 0xf2, 0x29, 0xe2, 0x44, 0x0a, 0xb0, - 0x26, 0x93, 0xad, 0x86, 0x32, 0x37, 0xf8, 0x22, 0xae, 0x86, 0xff, 0x46, 0xef, 0x82, 0xab, 0xbb, - 0xba, 0x8f, 0x20, 0x13, 0x62, 0x5d, 0x8f, 0x47, 0x07, 0xe3, 0x30, 0x53, 0x30, 0x86, 0x46, 0xa5, - 0x4f, 0x2a, 0xad, 0xad, 0x7e, 0xc4, 0xa1, 0x46, 0x43, 0x01, 0xf1, 0x22, 0x41, 0x41, 0x2c, 0x86, - 0x46, 0x22, 0xb1, 0x88, 0x3f, 0xee, 0x3b, 0xf1, 0x22, 0x46, 0x4a, 0xc5, 0x9f, 0x23, 0x73, 0x84, - 0x40, 0x5e, 0xc5, 0xd4, 0x5d, 0x55, 0x55, 0x78, 0x80, 0xf1, 0xac, 0x5d, 0xb4, 0x1f, 0x14, 0x9d, - 0xb0, 0x60, 0xc9, 0x21, 0x36, 0x17, 0x8a, 0x37, 0x99, 0xdf, 0x02, 0xb5, 0x42, 0x96, 0x82, 0x77, - 0x8d, 0x24, 0x39, 0x7d, 0xfd, 0x1e, 0x2f, 0xae, 0x72, 0xfa, 0xd7, 0xc1, 0x11, 0x11, 0xa3, 0x9a, - 0xe2, 0xbe, 0xbd, 0x5c, 0x13, 0x66, 0x65, 0x0e, 0x8d, 0x0c, 0xcc, 0xfd, 0xf3, 0xd5, 0xd9, 0xb3, - 0x5f, 0xf0, 0x58, 0x55, 0x7d, 0xea, 0xec, 0x6a, 0x9d, 0xa4, 0xe7, 0xab, 0x4d, 0x24, 0x97, 0xae, - 0xbc, 0x7b, 0xe0, 0xac, 0x51, 0x3d, 0x73, 0x78, 0x5a, 0xa6, 0xec, 0x63, 0x25, 0x2c, 0xdf, 0xec, - 0xa3, 0xd9, 0x70, 0x05, 0xf5, 0x47, 0x7e, 0x10, 0x38, 0x6d, 0xdf, 0x74, 0x6a, 0x66, 0x18, 0xa0, - 0x4f, 0xcb, 0x8a, 0x37, 0x12, 0xe7, 0x10, 0x09, 0x0d, 0x0a, 0xa6, 0x40, 0xc6, 0xac, 0xab, 0x54, - 0xcf, 0x82, 0x98, 0x97, 0x13, 0x82, 0x06, 0x20, 0x22, 0x54, 0x32, 0x63, 0xe3, 0x8f, 0xff, 0x2d, - 0x1e, 0x16, 0xbd, 0xb9, 0xf8, 0x91, 0x01, 0x43, 0x88, 0x7b, 0xe0, 0xe4, 0x8b, 0x2b, 0x2d, 0xd8, - 0x51, 0xd0, 0xd4, 0xed, 0x89, 0x61, 0x67, 0xac, 0x6e, 0xe1, 0x10, 0xc0, 0x53, 0x9c, 0x88, 0x08, - 0x84, 0x40, 0x45, 0x62, 0xbb, 0x72, 0xdd, 0x8f, 0xa4, 0x22, 0x15, 0x8e, 0x7a, 0x3d, 0x83, 0xd6, - 0x04, 0x7f, 0xc4, 0x42, 0x87, 0x33, 0x1c, 0x8c, 0x81, 0x93, 0xa1, 0x00, 0xd8, 0x45, 0xea, 0xa1, - 0x44, 0xf4, 0x13, 0x08, 0xc9, 0x6f, 0x1f, 0x20, 0x14, 0x0b, 0x6d, 0x50, 0x4a, 0xd1, 0xe7, 0x1f, - 0x8c, 0x53, 0x40, 0x93, 0xfc, 0x20, 0x42, 0xd8, 0x95, 0x21, 0xe9, 0x89, 0xcf, 0x7f, 0xed, 0x8d, - 0x09, 0x8c, 0xaa, 0x68, 0xf8, 0x91, 0xe5, 0xd8, 0xc6, 0x6a, 0xb4, 0xe3, 0xf1, 0x11, 0x4b, 0xf2, - 0x1e, 0x12, 0x2b, 0xc6, 0x47, 0xa9, 0x2c, 0x18, 0x38, 0x51, 0x00, 0x10, 0x5b, 0x23, 0x73, 0x4a, - 0xd8, 0x43, 0xc0, 0x2b, 0x31, 0xe8, 0xa6, 0x58, 0xd5, 0xc8, 0x2b, 0x38, 0x7e, 0x26, 0x32, 0x32, - 0x90, 0x7a, 0x30, 0xa1, 0x49, 0x08, 0x31, 0xe1, 0x1c, 0xb5, 0xd6, 0x07, 0x79, 0x07, 0x08, 0x81, - 0x08, 0x7f, 0xa1, 0xb4, 0x40, 0x9c, 0x2a, 0x03, 0x7c, 0x79, 0x98, 0x73, 0x0e, 0x98, 0x88, 0x29, - 0x34, 0x1d, 0xf3, 0xf7, 0x7f, 0x7f, 0xd3, 0xfc, 0x20, 0x70, 0xa2, 0x82, 0xd0, 0x29, 0x0f, 0x61, - 0xe7, 0x5e, 0xc1, 0xd8, 0x6a, 0xe5, 0x50, 0x3e, 0xf8, 0xbf, 0xa2, 0x53, 0x3c, 0x24, 0x47, 0x43, - 0x2e, 0x50, 0x96, 0xa2, 0x1e, 0xc0, 0xf1, 0x9e, 0xa8, 0xc4, 0x42, 0xd4, 0x26, 0x35, 0xa0, 0x65, - 0x70, 0xe2, 0x62, 0xe2, 0x3b, 0xfb, 0xb2, 0x7f, 0x05, 0x34, 0x91, 0xd2, 0x63, 0x09, 0x91, 0x09, - 0x06, 0xf6, 0x04, 0x39, 0x62, 0x8d, 0xe2, 0xe2, 0x44, 0x82, 0xa3, 0xf4, 0x7a, 0xf3, 0x8f, 0xcd, - 0xe7, 0xca, 0x07, 0xdf, 0x19, 0x1e, 0x4c, 0x9c, 0xb0, 0xea, 0x41, 0xc0, 0x1a, 0xf3, 0x8a, 0x2a, - 0x2c, 0xbd, 0xb5, 0x2a, 0xb5, 0x0b, 0x7f, 0xf8, 0xfb, 0xd4, 0xed, 0x51, 0x42, 0x37, 0x9b, 0x8a, - 0xcb, 0x18, 0xa3, 0x10, 0xfc, 0x4c, 0x61, 0xa0, 0xf3, 0x29, 0xd5, 0xb4, 0x2e, 0x2e, 0xb3, 0x1b, - 0x66, 0xb0, 0x45, 0xaf, 0x2b, 0x3c, 0x48, 0x91, 0xc5, 0xdd, 0xa1, 0x8c, 0x34, 0x87, 0x20, 0x2c, - 0x6a, 0x41, 0x05, 0x2e, 0x16, 0xc5, 0x62, 0xbc, 0x44, 0x64, 0xf4, 0x30, 0x16, 0xe5, 0x9e, 0x90, - 0x5d, 0xd2, 0x44, 0xe3, 0xb9, 0x46, 0xa8, 0xc1, 0xa8, 0x90, 0x9a, 0x52, 0x78, 0xbc, 0x7e, 0x98, - 0x98, 0x44, 0xda, 0x37, 0x9c, 0x83, 0xa5, 0x6f, 0x4f, 0xc5, 0x90, 0xb8, 0x63, 0x85, 0xb4, 0x43, - 0x2c, 0xee, 0xfa, 0x3f, 0xe2, 0x04, 0x85, 0x37, 0x63, 0x77, 0xdd, 0xcb, 0x43, 0x9a, 0x59, 0x6c, - 0xe6, 0x96, 0xae, 0xa7, 0x86, 0x02, 0x3b, 0x7c, 0x75, 0xdc, 0xf4, 0xb7, 0x45, 0x9c, 0xb0, 0x72, - 0xc1, 0xca, 0x86, 0xd1, 0x62, 0x01, 0x46, 0xf4, 0x93, 0xa6, 0xda, 0x3b, 0xc4, 0x08, 0x13, 0x15, - 0x8a, 0x31, 0x58, 0x84, 0x83, 0x74, 0xfe, 0xce, 0xc2, 0x74, 0x3f, 0xbf, 0x73, 0xe7, 0x8c, 0x9d, - 0x97, 0x30, 0x6f, 0x4e, 0x39, 0xd7, 0xd3, 0xab, 0xd4, 0xa2, 0x8d, 0x07, 0x89, 0x8f, 0x35, 0xe9, - 0x33, 0x1d, 0xa7, 0xd4, 0x1d, 0xf3, 0x51, 0x0b, 0xe2, 0x06, 0xc1, 0xa9, 0x64, 0xe8, 0x80, 0xc9, - 0x96, 0xa1, 0x15, 0xb1, 0x38, 0xae, 0x21, 0xc9, 0x09, 0xdc, 0x74, 0xe0, 0x37, 0x00, 0xf1, 0xe4, - 0x44, 0xc4, 0x4d, 0x35, 0xd1, 0xfc, 0x21, 0x72, 0x40, 0x67, 0xd2, 0x66, 0xc0, 0xc5, 0x47, 0x9f, - 0xeb, 0x98, 0x5b, 0x1b, 0xbb, 0xf8, 0x24, 0x33, 0x35, 0x57, 0x95, 0xf0, 0x47, 0x7a, 0xad, 0x60, - 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x16, 0x0b, 0x30, 0x2e, 0x8b, 0xd0, 0x96, 0x3e, 0xae, 0x85, - 0x38, 0xbd, 0x9b, 0xc5, 0xc5, 0xd5, 0x7d, 0x09, 0x78, 0x8c, 0x44, 0x9c, 0x86, 0x3e, 0x3f, 0x0d, - 0x8e, 0xc0, 0x51, 0x06, 0x22, 0x0c, 0x5e, 0x19, 0x7e, 0xc0, 0x83, 0x08, 0x84, 0x8d, 0x18, 0x42, - 0x18, 0x1e, 0xf8, 0x51, 0x5c, 0x99, 0x52, 0xd6, 0xde, 0x5b, 0x6c, 0x70, 0x20, 0xc2, 0x92, 0x32, - 0xc3, 0x2f, 0x10, 0xb0, 0x9d, 0x45, 0x36, 0x24, 0x8c, 0x3b, 0x04, 0xa2, 0xb6, 0x90, 0xbe, 0x9a, - 0xe4, 0xd0, 0xe3, 0x43, 0xfc, 0x40, 0xb5, 0x5e, 0xce, 0xe3, 0x79, 0x05, 0x8a, 0x31, 0x46, 0x28, - 0xc5, 0x18, 0x88, 0x81, 0x08, 0xdc, 0x70, 0x78, 0x98, 0x2a, 0x14, 0xb2, 0xaa, 0x99, 0xee, 0x14, - 0x30, 0x16, 0x90, 0x53, 0x8c, 0xca, 0x5b, 0xce, 0x9c, 0x22, 0x19, 0x0a, 0x19, 0x08, 0xcd, 0x1e, - 0x70, 0xb0, 0x56, 0x48, 0xed, 0x33, 0x57, 0xbb, 0x89, 0x95, 0x5c, 0x83, 0xaf, 0xbb, 0xd6, 0xee, - 0x77, 0xae, 0x43, 0x38, 0xfa, 0xe5, 0xc0, 0xa2, 0x19, 0x05, 0x62, 0xf6, 0x86, 0x04, 0xcb, 0xa7, - 0x43, 0x80, 0x96, 0xd5, 0x80, 0x00, 0xee, 0xee, 0xe3, 0x8d, 0x11, 0xce, 0x34, 0x71, 0x2b, 0x6d, - 0xb6, 0xdf, 0xf8, 0x28, 0x30, 0xba, 0x8b, 0x8b, 0x9d, 0x89, 0x2e, 0xe9, 0xcc, 0x47, 0x0d, 0xf2, - 0xc5, 0xc5, 0xcb, 0xc5, 0xc6, 0x75, 0xef, 0xa2, 0x95, 0x3e, 0xa4, 0x05, 0x74, 0x6c, 0xab, 0xab, - 0xfd, 0x15, 0xe4, 0xe5, 0x24, 0xec, 0x4e, 0xc7, 0xa9, 0x52, 0x11, 0x82, 0x8a, 0x28, 0x8a, 0xb8, - 0x98, 0x5c, 0x50, 0x18, 0xad, 0x32, 0x4d, 0x7f, 0xf1, 0x1f, 0x63, 0x5a, 0x08, 0x12, 0x1b, 0x78, - 0xa8, 0x14, 0xa5, 0x07, 0x68, 0x59, 0x7f, 0x08, 0x02, 0xc1, 0x4d, 0x9b, 0xb7, 0x3c, 0x57, 0x58, - 0xb8, 0xbb, 0x3c, 0x10, 0x82, 0x69, 0xc2, 0xc5, 0x49, 0x87, 0xf7, 0x30, 0xd6, 0x27, 0xea, 0xe8, - 0x2a, 0x54, 0x74, 0x4e, 0x1c, 0x10, 0x6c, 0x8e, 0x56, 0x33, 0x01, 0xa8, 0x1f, 0x48, 0x4c, 0xbd, - 0x34, 0xd3, 0x4f, 0x05, 0x20, 0xc4, 0x3f, 0x5a, 0xc5, 0xd2, 0x38, 0xd0, 0x8c, 0xe9, 0x67, 0xe9, - 0x6a, 0x16, 0xfe, 0x14, 0x51, 0x46, 0x82, 0x63, 0x0d, 0xd0, 0x66, 0x42, 0xb6, 0x05, 0x6a, 0x6d, - 0x8f, 0xaf, 0xe0, 0x41, 0x06, 0x21, 0x81, 0x0e, 0x8b, 0xe0, 0x1d, 0x43, 0x69, 0xd5, 0x10, 0x39, - 0x41, 0xfe, 0x3b, 0x69, 0x55, 0x6a, 0x5d, 0x93, 0x7f, 0x03, 0x08, 0x29, 0x04, 0x1e, 0x82, 0x0e, - 0x35, 0x10, 0x37, 0xe3, 0x10, 0x8c, 0x85, 0xf0, 0xee, 0x06, 0xab, 0x54, 0x3d, 0xc0, 0x66, 0x1a, - 0xd4, 0x7f, 0x37, 0xf6, 0x01, 0x86, 0x1f, 0x2d, 0x05, 0x07, 0x5f, 0xac, 0x9f, 0x02, 0x88, 0x29, - 0x05, 0x64, 0xe2, 0x2c, 0x6c, 0xff, 0xf0, 0x5d, 0x12, 0x00, 0xd9, 0x53, 0xac, 0x15, 0xb0, 0xff, - 0xdf, 0x28, 0x5c, 0x56, 0x2b, 0x2d, 0x8a, 0xc7, 0xf4, 0x66, 0x45, 0xf3, 0x0a, 0x69, 0xa4, 0xa2, - 0xba, 0x1b, 0x0d, 0x2e, 0x20, 0x2f, 0x80, 0xdf, 0xdb, 0xf1, 0x7d, 0x45, 0xc3, 0xb1, 0x58, 0x53, - 0xcb, 0x0b, 0x16, 0x55, 0xfe, 0x10, 0x1a, 0x12, 0xb1, 0x2e, 0x77, 0xfd, 0xa6, 0xb1, 0xc5, 0x55, - 0x0b, 0x22, 0xf6, 0x5c, 0x1c, 0x63, 0xf8, 0xbb, 0xff, 0x08, 0x82, 0x9a, 0x89, 0x0f, 0x83, 0xab, - 0x93, 0xd9, 0xf3, 0x00, 0x09, 0x3d, 0xb2, 0x4e, 0x09, 0x07, 0x98, 0xcb, 0x91, 0x51, 0xce, 0x5c, - 0xc3, 0xac, 0xa0, 0x1d, 0x60, 0x37, 0x7a, 0x36, 0xdb, 0xdb, 0x6f, 0xfc, 0x70, 0x00, 0x61, 0xb2, - 0xfb, 0x6d, 0xb6, 0xde, 0x04, 0x10, 0x62, 0x34, 0x50, 0xa6, 0x28, 0x62, 0x7c, 0xb0, 0xcb, 0x32, - 0xcc, 0x5c, 0x2f, 0x40, 0x2e, 0x2e, 0x39, 0x28, 0x5b, 0x9a, 0x01, 0x3a, 0x56, 0x7d, 0x50, 0xc7, - 0x4a, 0x26, 0x00, 0x15, 0xd7, 0x13, 0xc1, 0xc0, 0x16, 0xd0, 0xd5, 0x8c, 0x38, 0xab, 0xa7, 0xf8, - 0x46, 0x14, 0x10, 0x59, 0xbe, 0x71, 0x66, 0x41, 0xca, 0x6b, 0x8a, 0x21, 0x90, 0x33, 0x20, 0xc9, - 0xe6, 0xae, 0xd3, 0x43, 0xe3, 0x8b, 0xd4, 0x8c, 0xd4, 0x90, 0x07, 0x23, 0xf8, 0xdf, 0x1b, 0x04, - 0xa8, 0x15, 0x31, 0x10, 0xa5, 0x20, 0x0e, 0x56, 0xf8, 0xfb, 0x73, 0x27, 0x38, 0x90, 0xef, 0x98, - 0xc7, 0x8f, 0xa5, 0xf3, 0xd1, 0xbf, 0xc1, 0x67, 0xe3, 0x8f, 0x2a, 0xea, 0x89, 0xd0, 0x81, 0xf3, - 0xcb, 0xbe, 0x08, 0x66, 0x50, 0xea, 0x2e, 0x6d, 0xb4, 0xff, 0x41, 0x72, 0x28, 0x89, 0xe8, 0x9c, - 0xa8, 0xdd, 0x7a, 0x14, 0xea, 0x62, 0xae, 0xac, 0x09, 0x0c, 0x04, 0x17, 0x0f, 0x0c, 0x8d, 0x08, - 0x0b, 0xc6, 0xa9, 0x88, 0x07, 0x4e, 0x00, 0x38, 0x78, 0x3c, 0x9c, 0xa6, 0x20, 0xd3, 0xd1, 0x49, - 0xcd, 0xd3, 0x80, 0x00, 0x8e, 0x15, 0xba, 0xcf, 0x00, 0x03, 0x3c, 0x71, 0x0f, 0x8e, 0x03, 0x18, - 0x18, 0xb8, 0xac, 0x47, 0x9e, 0xc0, 0x56, 0xa2, 0xb1, 0x4f, 0x88, 0x05, 0xd9, 0x59, 0xb4, 0xa2, - 0xd8, 0xbf, 0x70, 0x24, 0xc4, 0x84, 0x45, 0x18, 0xad, 0xc5, 0x65, 0x63, 0x87, 0x70, 0x2c, 0x89, - 0x05, 0x42, 0x05, 0xd4, 0x5d, 0x76, 0xa3, 0xaf, 0xc9, 0x4e, 0xa3, 0xc2, 0x24, 0xc5, 0x6b, 0x92, - 0xf8, 0x31, 0x0a, 0x0a, 0x55, 0x8c, 0x30, 0x03, 0xf2, 0x43, 0x3b, 0x18, 0x0a, 0x9a, 0x87, 0x60, - 0x00, 0x43, 0x41, 0x69, 0xe0, 0xec, 0x1c, 0xd1, 0xcc, 0x03, 0x35, 0x96, 0xb5, 0x4c, 0x25, 0x34, - 0x77, 0x55, 0x62, 0x9e, 0x71, 0x30, 0xa5, 0xb4, 0x4e, 0xf2, 0xe6, 0x2f, 0xf3, 0xf5, 0x46, 0x78, - 0x07, 0x07, 0x97, 0x29, 0x04, 0xad, 0x97, 0x07, 0x6c, 0x36, 0x78, 0xf8, 0x50, 0x4a, 0xe0, 0x94, - 0x73, 0x88, 0x97, 0x69, 0x6e, 0x55, 0x75, 0xe4, 0x5d, 0xa8, 0x9f, 0x73, 0xfd, 0xf8, 0x91, 0x00, - 0xb0, 0x47, 0x06, 0x5a, 0xf0, 0xe2, 0xa0, 0xee, 0x49, 0x00, 0x62, 0x8e, 0x01, 0xcb, 0x88, 0x76, - 0xf8, 0x29, 0x85, 0x15, 0x2c, 0x64, 0xa9, 0x8c, 0xff, 0xfb, 0x73, 0xe7, 0xde, 0x21, 0x04, 0xce, - 0xb3, 0xeb, 0xd1, 0x1d, 0x6b, 0xeb, 0x14, 0xdd, 0x6a, 0x7e, 0xb1, 0x5f, 0x58, 0x43, 0xc1, 0x16, - 0x76, 0x0f, 0x4d, 0xab, 0x97, 0x9e, 0x87, 0xa7, 0x88, 0x2a, 0x49, 0x69, 0x25, 0xf8, 0x24, 0xe9, - 0x25, 0x17, 0xc2, 0x7d, 0x24, 0xb4, 0x92, 0xf1, 0xd6, 0x9a, 0xda, 0x6b, 0x69, 0xaf, 0xc6, 0x76, - 0x9a, 0xb6, 0xd2, 0xed, 0x35, 0xb4, 0xd2, 0xe5, 0xb7, 0x6b, 0xea, 0x95, 0x78, 0x23, 0xa4, 0x93, - 0x4d, 0x25, 0x4b, 0xa2, 0x45, 0xf5, 0x8b, 0xc4, 0x02, 0x58, 0xba, 0x8b, 0x8b, 0xec, 0x47, 0xc6, - 0xf8, 0xd1, 0x8a, 0x2c, 0x5f, 0x63, 0x84, 0xfc, 0x80, 0x98, 0x00, 0x18, 0x72, 0xae, 0x06, 0x83, - 0x20, 0x83, 0xaf, 0x70, 0x6c, 0x1a, 0xec, 0xb0, 0x18, 0x31, 0x6a, 0x1e, 0x56, 0x2e, 0x41, 0xc8, - 0x0a, 0x00, 0x41, 0x21, 0x00, 0x9c, 0x07, 0x4e, 0x02, 0x70, 0x3d, 0x80, 0x86, 0x07, 0x60, 0x14, - 0x70, 0x76, 0x1c, 0x22, 0x30, 0x85, 0xe2, 0x9a, 0x8b, 0x92, 0x2f, 0x64, 0xbb, 0x5d, 0x4d, 0x27, - 0xe1, 0x6d, 0x81, 0x8e, 0x97, 0x37, 0x25, 0x34, 0xf0, 0xa0, 0x45, 0xc1, 0x89, 0xf4, 0xf4, 0x9c, - 0x27, 0x15, 0xbb, 0x95, 0x86, 0x98, 0x76, 0x07, 0xe3, 0xb8, 0xcd, 0xe9, 0x29, 0x90, 0xd0, 0x52, - 0x0e, 0x22, 0x80, 0x31, 0xb5, 0x6d, 0x67, 0xa6, 0x9f, 0xfb, 0x82, 0x6b, 0xc3, 0xc5, 0x80, 0x7a, - 0xc7, 0x3b, 0xbe, 0x19, 0x82, 0xc0, 0xa1, 0xf6, 0x73, 0x50, 0x90, 0x2f, 0xa7, 0xbb, 0xf4, 0xa6, - 0xe3, 0xcf, 0x2f, 0xee, 0x20, 0x48, 0x52, 0xc0, 0x51, 0x47, 0x4f, 0x14, 0x60, 0x9e, 0x81, 0x55, - 0x47, 0x1c, 0x26, 0x38, 0x53, 0x55, 0x37, 0x31, 0x13, 0x61, 0x42, 0xbf, 0x2f, 0xd3, 0x3f, 0x0a, - 0x0f, 0x28, 0xc0, 0x84, 0x4d, 0x3d, 0x67, 0xd8, 0xd2, 0xd4, 0x66, 0x38, 0x30, 0x1c, 0xee, 0x28, - 0xae, 0xce, 0xc3, 0xb2, 0x63, 0xe2, 0xc7, 0x2d, 0x56, 0x17, 0xa8, 0x2a, 0xa5, 0x16, 0x90, 0xa7, - 0x38, 0x90, 0x53, 0x52, 0xf0, 0xf9, 0x59, 0x24, 0x7c, 0xb4, 0xb4, 0x97, 0x15, 0xbe, 0x14, 0x8a, - 0x25, 0x33, 0xb9, 0x8c, 0xb8, 0x14, 0x01, 0x40, 0x21, 0x09, 0x96, 0x00, 0xc5, 0x18, 0xa3, 0x77, - 0xfa, 0xfe, 0x19, 0xe8, 0x98, 0x49, 0xd1, 0x98, 0x7a, 0xf4, 0xdc, 0x11, 0x89, 0x9e, 0x9a, 0x70, - 0xf5, 0x4a, 0xbc, 0x12, 0x73, 0xd0, 0xf4, 0x4a, 0xbd, 0x7b, 0xeb, 0xdf, 0x05, 0x13, 0xd0, 0xf4, - 0xcf, 0x4e, 0x55, 0xfd, 0x79, 0xf8, 0x40, 0x48, 0x27, 0x18, 0xce, 0x8c, 0x66, 0x02, 0x67, 0x8c, - 0x07, 0x0c, 0x14, 0x9f, 0x65, 0x23, 0xe2, 0xc4, 0x57, 0xc2, 0x86, 0x3f, 0xcb, 0x0e, 0xb1, 0x71, - 0xf7, 0x7f, 0x67, 0x3d, 0xfb, 0x1d, 0x8a, 0xe6, 0x8d, 0x4d, 0xcb, 0x71, 0x21, 0x90, 0x4c, 0x11, - 0x28, 0x46, 0x34, 0x22, 0x0f, 0xc3, 0xa6, 0x51, 0x78, 0x86, 0x8d, 0x58, 0x79, 0xc4, 0xfc, 0x18, - 0x88, 0xe0, 0xc4, 0x40, 0xab, 0xdd, 0xdb, 0x07, 0xef, 0x7c, 0x21, 0xe8, 0xd0, 0x17, 0x10, 0x11, - 0x09, 0x0a, 0x62, 0x40, 0xf1, 0x43, 0x2c, 0xe5, 0x5e, 0x23, 0x9c, 0xb9, 0xe0, 0xac, 0x78, 0x2a, - 0xb5, 0x0b, 0xcd, 0x5b, 0xff, 0x6c, 0x11, 0x6c, 0xb5, 0x91, 0x81, 0xa4, 0xc4, 0xca, 0xce, 0x31, - 0x02, 0x41, 0x21, 0x33, 0x2b, 0x1a, 0x80, 0x77, 0xc2, 0x82, 0xb9, 0x79, 0x6d, 0x30, 0xac, 0x25, - 0x16, 0x4c, 0xc7, 0x47, 0x38, 0x18, 0x1c, 0x30, 0x5f, 0x9b, 0xe0, 0x78, 0xe4, 0x78, 0xed, 0xc2, - 0x30, 0x52, 0x13, 0x12, 0xe2, 0x3e, 0xf5, 0x68, 0xf4, 0xe0, 0xaa, 0xa4, 0xff, 0x04, 0xd8, 0x33, - 0x13, 0x39, 0x34, 0x92, 0xf1, 0x71, 0x83, 0x78, 0x94, 0x24, 0x68, 0x00, 0xa4, 0x2d, 0xd1, 0x9c, - 0xbe, 0x8c, 0xff, 0x45, 0x70, 0x4e, 0x8e, 0x5e, 0x49, 0xd1, 0x1c, 0x93, 0x84, 0x73, 0xd3, 0x3d, - 0x0f, 0x4c, 0xf4, 0x3d, 0x3f, 0x37, 0x3d, 0x0f, 0x42, 0x62, 0x78, 0x81, 0x00, 0xb0, 0x62, 0x02, - 0x78, 0x60, 0x25, 0xe7, 0x00, 0xb1, 0x59, 0xb9, 0x76, 0xd8, 0xad, 0x4c, 0x34, 0x61, 0x6e, 0x20, - 0x30, 0x14, 0x31, 0x66, 0x2e, 0x59, 0x8b, 0x93, 0x92, 0x8d, 0x31, 0xed, 0x83, 0x83, 0xdb, 0xc7, - 0x8b, 0xb7, 0x07, 0x65, 0x35, 0x83, 0xc7, 0x93, 0x33, 0x9d, 0xf0, 0xb0, 0x44, 0x79, 0xcc, 0x01, - 0xa8, 0x80, 0x15, 0x86, 0xc1, 0x06, 0xef, 0x07, 0x28, 0xc4, 0xb6, 0x0a, 0x4b, 0x2e, 0xda, 0xd7, - 0x72, 0x3e, 0x74, 0x71, 0x54, 0x76, 0x39, 0xc4, 0xf2, 0x7a, 0xde, 0x78, 0x7c, 0x13, 0x96, 0x72, - 0x0c, 0xb1, 0xb1, 0xc2, 0x4e, 0x52, 0x03, 0x83, 0xfe, 0x0b, 0x02, 0x49, 0x89, 0x3d, 0x4b, 0x3a, - 0x1b, 0x71, 0xdc, 0x5c, 0x4f, 0x93, 0x44, 0x05, 0xdc, 0x8d, 0xc4, 0x88, 0x19, 0x67, 0xf1, 0x59, - 0xe0, 0xe6, 0x25, 0xf3, 0xdf, 0x17, 0xf8, 0x88, 0x4f, 0x3a, 0xd2, 0x58, 0x76, 0x17, 0xde, 0x26, - 0x0b, 0x49, 0xcd, 0x00, 0xa3, 0x88, 0xb9, 0x66, 0xbd, 0xc4, 0x86, 0x01, 0x48, 0x44, 0x3e, 0x00, - 0xbf, 0x85, 0xd8, 0x24, 0x12, 0xc7, 0xd5, 0xd7, 0x56, 0x8d, 0x0e, 0xa1, 0xbf, 0x64, 0x5c, 0x5c, - 0x6a, 0x07, 0x58, 0x14, 0x03, 0x1f, 0x42, 0x4e, 0x92, 0x70, 0x42, 0x43, 0xd0, 0xf4, 0xea, 0xba, - 0x34, 0x1f, 0x59, 0x57, 0x38, 0x91, 0xe5, 0x4d, 0x34, 0xd3, 0xf1, 0x9d, 0x1b, 0x0f, 0xa3, 0xb9, - 0x7d, 0x5a, 0xfa, 0xb8, 0x27, 0x25, 0xd5, 0xdf, 0xd1, 0x99, 0x2f, 0x42, 0x4a, 0x92, 0x40, 0x83, - 0x30, 0x8c, 0xc2, 0x02, 0x30, 0x08, 0x0e, 0x26, 0x0b, 0x09, 0x71, 0xbc, 0x6e, 0xd3, 0xbc, 0xc9, - 0xb0, 0x44, 0xc6, 0x70, 0xf1, 0x20, 0xb0, 0x41, 0x6e, 0xcf, 0x4b, 0x7b, 0xbb, 0x76, 0xe5, 0x0c, - 0x70, 0x42, 0x14, 0x9c, 0x0e, 0x1c, 0x03, 0x87, 0x83, 0x87, 0x80, 0xe1, 0x6e, 0xc9, 0xc4, 0x60, - 0xf7, 0x97, 0xa9, 0xc8, 0xf6, 0x04, 0x82, 0xa5, 0x80, 0x3c, 0xfe, 0x08, 0x41, 0x5d, 0xd3, 0xa6, - 0xc9, 0xbb, 0x63, 0x1c, 0xbc, 0x38, 0x70, 0x94, 0x1a, 0x8b, 0x69, 0x36, 0x5f, 0xcb, 0xc1, 0x48, - 0x2c, 0xe5, 0x55, 0xe5, 0xa0, 0xae, 0x21, 0xf3, 0xe7, 0x70, 0xc0, 0x29, 0x0a, 0x13, 0x14, 0xc5, - 0xc5, 0xcb, 0xe5, 0x54, 0xbc, 0x5e, 0x57, 0x77, 0xcb, 0xc4, 0x82, 0xb3, 0xee, 0xef, 0x9f, 0xf8, - 0x51, 0xa4, 0xbe, 0x0b, 0x4d, 0x5b, 0x95, 0xf8, 0xb9, 0x17, 0xee, 0x05, 0x00, 0x40, 0x09, 0x42, - 0xa3, 0x88, 0x1e, 0x0e, 0x8f, 0x1f, 0xa5, 0xe4, 0xc5, 0xd4, 0x89, 0xe1, 0x04, 0x74, 0xa9, 0xf1, - 0xc6, 0x3d, 0x0f, 0x4c, 0xf4, 0x3d, 0x33, 0xd0, 0xf4, 0xd7, 0x46, 0xaf, 0xaf, 0x57, 0x47, 0x77, - 0xcd, 0xcf, 0x43, 0xd1, 0x71, 0x53, 0xd0, 0xf4, 0xcf, 0x43, 0xd3, 0x11, 0xc4, 0x14, 0x56, 0x2b, - 0x15, 0x8a, 0xc5, 0x62, 0xb1, 0x58, 0xad, 0xf1, 0x7d, 0x24, 0x98, 0x3b, 0x4d, 0x13, 0xab, 0x9f, - 0x11, 0x69, 0xad, 0xa6, 0xb2, 0xf0, 0x9e, 0x9b, 0x5d, 0x24, 0x97, 0x13, 0xb7, 0x6e, 0xdd, 0xbf, - 0x46, 0x99, 0xf4, 0x73, 0xa5, 0xf5, 0x3a, 0x49, 0xd1, 0x2b, 0xfe, 0x24, 0x22, 0x29, 0x6b, 0x3f, - 0x33, 0x07, 0xe5, 0xe5, 0xe2, 0xea, 0x2f, 0xe3, 0x2e, 0xef, 0x11, 0xf1, 0x7c, 0x5e, 0x60, 0x40, - 0x15, 0x2f, 0x9f, 0x13, 0x19, 0x12, 0xe4, 0xd5, 0xe0, 0x00, 0x16, 0x90, 0x58, 0x30, 0x4b, 0x1d, - 0x6d, 0xe2, 0x47, 0xc4, 0x8e, 0x78, 0xec, 0x8d, 0x04, 0x03, 0x77, 0x29, 0x48, 0x1a, 0x41, 0x67, - 0xb5, 0x99, 0x6f, 0x11, 0x0a, 0x4b, 0x18, 0x81, 0x80, 0x80, 0x1c, 0x2c, 0x1c, 0xdd, 0xe0, 0x84, - 0xbf, 0x12, 0xfe, 0xee, 0xfc, 0x44, 0x22, 0x44, 0xe7, 0xe9, 0xbb, 0x88, 0x48, 0x37, 0x59, 0x3b, - 0x6a, 0x10, 0x78, 0xc3, 0x72, 0x6a, 0xde, 0x59, 0x02, 0xa8, 0xb9, 0x11, 0x50, 0xb1, 0x17, 0x2c, - 0x03, 0x2f, 0x91, 0x75, 0xc0, 0xc0, 0x18, 0x0a, 0x04, 0xc0, 0xa0, 0xe0, 0x1a, 0xa7, 0x56, 0x67, - 0xbd, 0x86, 0xef, 0x95, 0x66, 0x1d, 0xcf, 0x10, 0xcf, 0x9a, 0xa8, 0x63, 0x78, 0x40, 0x41, 0xd2, - 0x49, 0x24, 0x92, 0x49, 0x2f, 0x82, 0x2a, 0x49, 0x64, 0x4f, 0x82, 0x2a, 0x49, 0x71, 0x5f, 0x04, - 0xfa, 0x74, 0xd3, 0x42, 0x4d, 0x32, 0x27, 0xd7, 0x09, 0x38, 0x8b, 0x4d, 0x75, 0x55, 0xbe, 0x89, - 0xdf, 0x45, 0x78, 0x57, 0x89, 0xd3, 0x69, 0x0b, 0x69, 0xaf, 0x58, 0xa4, 0xe8, 0xc6, 0x4f, 0xa9, - 0x12, 0xf8, 0x2a, 0xf3, 0x74, 0x06, 0x03, 0xf3, 0x4a, 0x49, 0x41, 0x15, 0x0a, 0xb8, 0xe0, 0x2d, - 0xd0, 0x85, 0x85, 0x78, 0x13, 0xb8, 0x80, 0xc8, 0x2c, 0x19, 0x15, 0xca, 0x20, 0x2b, 0x95, 0x0b, - 0x57, 0x50, 0xc8, 0x52, 0xd0, 0xff, 0x08, 0x09, 0x0a, 0x59, 0xf3, 0xac, 0x52, 0x9f, 0x1c, 0x9e, - 0xce, 0xd8, 0xa0, 0x62, 0x43, 0x82, 0x81, 0x96, 0x19, 0xde, 0xe1, 0x08, 0x2a, 0x2a, 0x47, 0x70, - 0x32, 0x09, 0x02, 0xe4, 0x05, 0x99, 0x08, 0x49, 0x82, 0x20, 0x93, 0x23, 0x8a, 0xa5, 0xe9, 0xb8, - 0x88, 0x50, 0x89, 0x2a, 0xd8, 0x4c, 0xcf, 0x54, 0xea, 0xb5, 0x63, 0xc4, 0x88, 0x2d, 0xbb, 0x97, - 0xbb, 0xd9, 0xff, 0x8c, 0xdb, 0xee, 0xba, 0xda, 0x17, 0x13, 0xc1, 0x75, 0x95, 0xe2, 0x46, 0x15, - 0xa6, 0x25, 0x8f, 0x98, 0x58, 0x24, 0x6a, 0x36, 0xc9, 0xec, 0xf5, 0x0b, 0x1b, 0x99, 0x46, 0x09, - 0x66, 0x3f, 0xfe, 0x14, 0x18, 0xde, 0xff, 0xc2, 0xf5, 0xad, 0x97, 0x3a, 0xc1, 0x54, 0x5c, 0x7f, - 0x1b, 0x89, 0x08, 0x20, 0xb9, 0xd2, 0xba, 0x25, 0x57, 0x19, 0xcf, 0x43, 0xd3, 0x3d, 0x0f, 0x4c, - 0xf4, 0x3d, 0x33, 0xd0, 0xf4, 0xf1, 0x1e, 0x5a, 0x1d, 0x8b, 0xd8, 0xf8, 0x9c, 0xec, 0x4e, 0xc4, - 0xec, 0x4e, 0xc1, 0x3a, 0x38, 0xea, 0xf8, 0x21, 0x34, 0xec, 0x4e, 0xc3, 0x5f, 0x5a, 0x8c, 0xe1, - 0x2e, 0x7a, 0x1e, 0x99, 0xe8, 0x7a, 0x78, 0x21, 0xe7, 0xa1, 0xe8, 0xd1, 0x5d, 0x4a, 0xb3, 0xe2, - 0xf9, 0xe8, 0x7a, 0x67, 0xa1, 0xe9, 0xe8, 0x99, 0x5f, 0x45, 0x4e, 0x98, 0x71, 0x14, 0x00, 0xc2, - 0xdd, 0x76, 0x4f, 0x3e, 0xbd, 0x95, 0xa3, 0xfb, 0x7c, 0x4d, 0x4f, 0xde, 0xfc, 0x41, 0x02, 0xc5, - 0xe5, 0x9a, 0xf8, 0x81, 0xb3, 0xcf, 0x67, 0x13, 0xec, 0xd9, 0x14, 0xc9, 0x6a, 0x78, 0x1e, 0x0a, - 0xab, 0x81, 0x04, 0x68, 0x91, 0x40, 0xaa, 0xd5, 0x6d, 0x92, 0x38, 0x70, 0x86, 0x41, 0x08, 0x3c, - 0x40, 0x7b, 0x11, 0x85, 0x73, 0x8b, 0x62, 0x34, 0x13, 0x8f, 0x00, 0x43, 0x32, 0xfa, 0x67, 0xf5, - 0x78, 0x52, 0x38, 0xb5, 0x95, 0xd4, 0x16, 0x16, 0xb1, 0x45, 0xcb, 0xc5, 0x3a, 0x5c, 0xe3, 0x20, - 0x3e, 0x86, 0xd7, 0x82, 0xdf, 0xc9, 0x55, 0x70, 0x1b, 0x82, 0x59, 0x8b, 0x9e, 0x01, 0x8b, 0xf7, - 0x10, 0x11, 0x09, 0xd4, 0x53, 0xac, 0x51, 0xc5, 0x78, 0x81, 0x22, 0xce, 0xe3, 0xbe, 0x7b, 0x69, - 0x05, 0xdf, 0x97, 0x89, 0x12, 0x14, 0x29, 0x32, 0x83, 0xb4, 0x15, 0x14, 0x23, 0xde, 0x6e, 0x7b, - 0xed, 0x60, 0x44, 0x08, 0x10, 0x75, 0x95, 0x8d, 0x26, 0x5f, 0x3a, 0x78, 0xb2, 0x12, 0x9a, 0xe2, - 0xe2, 0x3f, 0x1e, 0x29, 0x55, 0x49, 0xa7, 0x8e, 0x65, 0x47, 0x04, 0x04, 0xfe, 0x2b, 0xa1, 0x67, - 0x62, 0x9f, 0x0c, 0x85, 0x03, 0x33, 0x7c, 0x4f, 0x0d, 0x89, 0x44, 0x28, 0xcf, 0xc1, 0x54, 0x68, - 0x18, 0xd9, 0x36, 0x73, 0x9c, 0x10, 0xe0, 0xc0, 0x40, 0x91, 0x7d, 0x11, 0xc9, 0xfa, 0xd5, 0x75, - 0x31, 0xbe, 0xa9, 0x50, 0xde, 0x08, 0xc8, 0xf7, 0xb1, 0xf5, 0x63, 0xeb, 0x29, 0xba, 0x2d, 0x5c, - 0x18, 0x88, 0x04, 0x9c, 0xc8, 0x03, 0xc8, 0x1a, 0x75, 0xf0, 0xa0, 0x4a, 0x28, 0xe1, 0x50, 0x68, - 0xe0, 0xb2, 0xb2, 0x16, 0xca, 0x8a, 0xc2, 0x63, 0xaf, 0xb6, 0x0f, 0x83, 0xf5, 0x70, 0x84, 0xd4, - 0x61, 0xbe, 0x14, 0x23, 0x24, 0x86, 0x0a, 0x01, 0xb5, 0x69, 0xe2, 0x88, 0x2d, 0xe4, 0x5c, 0xe0, - 0x19, 0xfc, 0x07, 0x27, 0x86, 0xb9, 0x4c, 0xbe, 0x03, 0x60, 0x1c, 0xa4, 0x53, 0xc0, 0x65, 0xb2, - 0xa1, 0x79, 0x44, 0x50, 0x3f, 0x08, 0xf7, 0x47, 0x1b, 0x24, 0x1c, 0x50, 0x06, 0x48, 0x15, 0xb7, - 0xc9, 0x68, 0xae, 0xe7, 0x14, 0x0a, 0xa1, 0xe3, 0xf6, 0xc1, 0xd7, 0x88, 0x64, 0xe1, 0x79, 0xf3, - 0x29, 0x28, 0xdd, 0xb3, 0x70, 0x12, 0x04, 0x5d, 0xbc, 0x85, 0xcf, 0xb9, 0x3a, 0xf1, 0xd0, 0x60, - 0x67, 0xb3, 0x8d, 0x99, 0x6d, 0x0f, 0x7d, 0x65, 0x83, 0xaf, 0x97, 0x96, 0xb5, 0x76, 0x14, 0x89, - 0x28, 0x89, 0xe0, 0xd2, 0x55, 0xa1, 0x96, 0x52, 0x1c, 0x40, 0x48, 0xf1, 0x78, 0xbe, 0x5e, 0x8f, - 0xc6, 0x1a, 0xdc, 0x02, 0x8b, 0x8c, 0x56, 0x27, 0xfc, 0x76, 0x53, 0x43, 0x0f, 0xae, 0xe8, 0x68, - 0x1a, 0x69, 0x22, 0x21, 0xa4, 0x0e, 0x3d, 0xc4, 0x56, 0x6b, 0x7a, 0xd6, 0x14, 0xc2, 0x4d, 0x4c, - 0x40, 0x80, 0xa0, 0x93, 0x93, 0x14, 0xe3, 0x52, 0xa6, 0xe4, 0x84, 0x93, 0x65, 0xa7, 0x9a, 0x20, - 0x6f, 0x7b, 0xbb, 0xde, 0x4f, 0xb0, 0x5e, 0xe4, 0xe6, 0xa3, 0x85, 0x43, 0xf8, 0x90, 0x54, 0x73, - 0x72, 0x90, 0xee, 0xe5, 0xcd, 0x69, 0x24, 0xfe, 0x24, 0x13, 0x88, 0x8f, 0x04, 0x23, 0x2e, 0xc1, - 0x57, 0xfe, 0x18, 0x05, 0x7a, 0x82, 0xd2, 0xf0, 0x34, 0x6b, 0x03, 0x38, 0x5e, 0x4c, 0xdb, 0x3a, - 0x60, 0xcd, 0x2f, 0x44, 0xc2, 0x40, 0x63, 0x75, 0xc8, 0xcd, 0x03, 0x35, 0x7d, 0x04, 0xd3, 0xb5, - 0xd4, 0x89, 0x7d, 0x5c, 0x04, 0xfa, 0x22, 0x74, 0xba, 0xbf, 0xd5, 0x2a, 0x5c, 0xd1, 0x58, 0xac, - 0x56, 0x2b, 0xf5, 0x68, 0xbe, 0xad, 0xe2, 0x01, 0x61, 0x8a, 0x80, 0xb5, 0x8f, 0x8c, 0x32, 0x73, - 0x90, 0xd9, 0x96, 0x62, 0xd5, 0xdb, 0xea, 0x47, 0xe5, 0xd8, 0xb9, 0x61, 0x75, 0xdf, 0x3c, 0xb8, - 0x88, 0x2a, 0xbf, 0x66, 0x19, 0x78, 0x52, 0x30, 0x91, 0x63, 0x6a, 0xf1, 0xd5, 0xc5, 0x61, 0xc0, - 0x42, 0x02, 0x51, 0x7c, 0x69, 0x92, 0x83, 0x2a, 0x90, 0x81, 0xbf, 0xa2, 0x5f, 0x24, 0xb0, 0x1a, - 0x59, 0x88, 0xcb, 0x81, 0xb9, 0x71, 0xbc, 0x0e, 0x3a, 0x37, 0x4d, 0xb1, 0xa1, 0x1c, 0xf2, 0xc1, - 0x9c, 0x03, 0x02, 0xc6, 0x58, 0x89, 0x7e, 0x5a, 0x3f, 0xe1, 0x43, 0x2f, 0xca, 0x05, 0x8e, 0x3e, - 0x99, 0x71, 0xdf, 0xc5, 0x65, 0xc2, 0xc6, 0x28, 0xc4, 0x0e, 0x0a, 0x0c, 0xb0, 0x1d, 0x2f, 0x10, - 0x20, 0x60, 0x94, 0x1a, 0x25, 0x9c, 0xbc, 0xc6, 0x24, 0xae, 0x32, 0xb1, 0x28, 0xac, 0xb8, 0x2f, - 0x79, 0x7e, 0x24, 0x48, 0xd2, 0x4b, 0x4b, 0x52, 0x13, 0x4c, 0xeb, 0x11, 0x8a, 0x6e, 0xb3, 0xa4, - 0xb3, 0x7c, 0xda, 0x75, 0xa6, 0xe5, 0xb7, 0x77, 0x3e, 0x7e, 0xb5, 0xc4, 0x09, 0x19, 0x52, 0xa9, - 0x35, 0xc9, 0x0e, 0x07, 0x70, 0x7b, 0xc2, 0xaa, 0x0e, 0xfe, 0x87, 0xe8, 0x5b, 0x39, 0xc9, 0x75, - 0xef, 0x10, 0x24, 0x13, 0x09, 0xd4, 0xbe, 0xce, 0xfe, 0x02, 0x17, 0x67, 0xc1, 0x5d, 0xd8, 0xdc, - 0x81, 0xc7, 0xb6, 0xe2, 0xb7, 0x77, 0xf9, 0xc1, 0x48, 0x31, 0x1e, 0x32, 0xc2, 0xac, 0xd7, 0x64, - 0x38, 0xf1, 0x42, 0xb0, 0xa0, 0x03, 0xe8, 0xb2, 0x96, 0xdc, 0x94, 0xae, 0x0a, 0x41, 0x88, 0x2b, - 0xef, 0xf4, 0xa3, 0xd5, 0xb3, 0xd5, 0x00, 0x02, 0x9a, 0xdb, 0x58, 0xc1, 0xa4, 0xe2, 0xc2, 0x67, - 0xa1, 0xe9, 0x9e, 0x87, 0xa7, 0xe1, 0x09, 0xe8, 0x7a, 0x68, 0xcf, 0x4c, 0xf4, 0x3d, 0x32, 0xf4, - 0x74, 0xd0, 0x87, 0x42, 0x19, 0x1f, 0xd0, 0x4d, 0xcf, 0x82, 0x41, 0x82, 0x98, 0x89, 0x88, 0x9f, - 0x2f, 0x7e, 0x19, 0x0c, 0x8d, 0x18, 0xaa, 0xa2, 0xeb, 0x51, 0x54, 0x5e, 0x2e, 0x29, 0x8c, 0x60, - 0xb0, 0xde, 0x84, 0xf0, 0x1b, 0x01, 0xdb, 0xdd, 0x7f, 0x84, 0x03, 0xda, 0x6e, 0x31, 0x89, 0xe5, - 0x55, 0x40, 0x90, 0x36, 0x81, 0xda, 0x91, 0x3f, 0x0e, 0xae, 0xeb, 0xfe, 0x10, 0x21, 0xe1, 0xbc, - 0x91, 0x89, 0x99, 0xf9, 0x79, 0x6f, 0x10, 0x24, 0x15, 0x19, 0xc5, 0x62, 0xb7, 0x3c, 0x73, 0x3f, - 0x90, 0xe3, 0x90, 0xab, 0xe3, 0x8d, 0x2a, 0xe2, 0x41, 0x65, 0xdd, 0xe4, 0xe3, 0x4c, 0x2c, 0xde, - 0xc6, 0x27, 0x40, 0x7d, 0x82, 0x8c, 0xf1, 0xcc, 0xcf, 0x89, 0x16, 0x9e, 0x33, 0x93, 0x60, 0x4e, - 0xe4, 0xfc, 0x6f, 0x7f, 0xc4, 0x86, 0x46, 0x45, 0xc5, 0xd5, 0x56, 0x2b, 0x15, 0xac, 0x5e, 0x28, - 0xc5, 0x18, 0xac, 0x18, 0xf9, 0x60, 0xa6, 0x14, 0x39, 0x39, 0xed, 0x16, 0x50, 0xe1, 0xe8, 0x40, - 0x56, 0x87, 0x1f, 0x4e, 0x70, 0x3f, 0x96, 0x81, 0xd7, 0x11, 0xf0, 0xe1, 0xc3, 0x84, 0x82, 0x78, - 0x24, 0x12, 0xc1, 0xb8, 0xc2, 0x01, 0x10, 0xa1, 0x47, 0x5f, 0x2e, 0x89, 0x15, 0x38, 0x18, 0x03, - 0xcb, 0x05, 0x03, 0xac, 0x50, 0x32, 0xc0, 0x01, 0x93, 0x80, 0x0a, 0x85, 0x40, 0x1c, 0x16, 0xca, - 0xff, 0x95, 0x2b, 0x22, 0xc0, 0x68, 0x40, 0x62, 0x45, 0x8c, 0x5e, 0x20, 0x48, 0xe1, 0x1b, 0xbd, - 0xa7, 0x5b, 0x15, 0xdb, 0xf8, 0x46, 0x34, 0xa8, 0xa9, 0xef, 0x43, 0x10, 0xb0, 0xc7, 0xcd, 0xcb, - 0x9f, 0x85, 0x06, 0x3d, 0xf5, 0xbb, 0xb7, 0x97, 0x40, 0xcf, 0x95, 0x44, 0xce, 0x4f, 0x89, 0x31, - 0xa4, 0x74, 0xb9, 0x6c, 0xb6, 0x2a, 0x1a, 0xb0, 0xe6, 0x1d, 0xc1, 0x48, 0x31, 0x04, 0x65, 0x6a, - 0xdc, 0x2e, 0x1e, 0x85, 0x3a, 0x17, 0x5f, 0x5c, 0xa6, 0xea, 0xf5, 0xd5, 0xe5, 0xea, 0xff, 0x5c, - 0xab, 0xab, 0x9f, 0x44, 0x73, 0xe8, 0xe3, 0x9b, 0xe0, 0x92, 0x2e, 0x2e, 0x2e, 0xac, 0x30, 0xc8, - 0x44, 0x16, 0x19, 0x45, 0xd7, 0x2e, 0x05, 0x14, 0x05, 0x83, 0x6b, 0x03, 0xd7, 0x9a, 0x08, 0x45, - 0xa0, 0x79, 0x58, 0x7c, 0x29, 0x17, 0x3c, 0xd1, 0x7d, 0x4d, 0xe6, 0xac, 0xa4, 0xb3, 0x63, 0x48, - 0xd4, 0x31, 0x21, 0x00, 0xa4, 0xba, 0xf4, 0xda, 0x4a, 0x21, 0x5b, 0x8a, 0xe5, 0xc3, 0xe2, 0xf4, - 0xd1, 0xdf, 0x12, 0x30, 0x90, 0xdd, 0x49, 0xe1, 0xc3, 0x68, 0xaa, 0x07, 0xbf, 0xa7, 0x6f, 0x2e, - 0x45, 0x61, 0x7f, 0x17, 0xe3, 0xd7, 0x7f, 0x0a, 0x19, 0x54, 0xbd, 0x53, 0x05, 0x00, 0x01, 0x26, - 0xc1, 0x78, 0x78, 0x06, 0x44, 0x02, 0x39, 0x33, 0x38, 0x79, 0x40, 0x00, 0x26, 0x88, 0x04, 0x3c, - 0x15, 0xe0, 0x0d, 0x93, 0xa2, 0x3b, 0xc4, 0x09, 0x19, 0x2c, 0x06, 0x34, 0x3c, 0x02, 0x9b, 0x0e, - 0x0c, 0xb5, 0x2a, 0x8e, 0xa6, 0x1f, 0xa6, 0x5e, 0xcc, 0x38, 0x33, 0xd0, 0xb0, 0x55, 0x91, 0xe0, - 0xc8, 0xaa, 0x07, 0x05, 0x65, 0x25, 0x3f, 0x88, 0x85, 0x07, 0x87, 0x54, 0xd6, 0xe2, 0xd5, 0x17, - 0x49, 0x59, 0x45, 0x55, 0xaa, 0xab, 0x38, 0x80, 0x82, 0x33, 0xf0, 0x20, 0x84, 0x42, 0x82, 0xc4, - 0xea, 0x39, 0x01, 0xf0, 0x66, 0x40, 0x62, 0x01, 0x0b, 0x94, 0x4a, 0x00, 0x04, 0x44, 0x04, 0xf0, - 0x00, 0x23, 0x85, 0xa0, 0x3e, 0x70, 0x00, 0xb0, 0x49, 0x18, 0x34, 0x40, 0xba, 0x8e, 0x57, 0xe9, - 0x96, 0x80, 0x0e, 0x08, 0xc0, 0x00, 0x9e, 0x05, 0x60, 0x1a, 0xae, 0x40, 0xd6, 0x00, 0x24, 0x68, - 0xa8, 0x65, 0xc0, 0x38, 0x3b, 0x62, 0x47, 0x70, 0x60, 0x6d, 0xef, 0xfc, 0x4b, 0xdf, 0xf6, 0xdb, - 0x6d, 0xb1, 0xc6, 0xf0, 0x62, 0x2a, 0x0c, 0xa6, 0x44, 0x96, 0x4d, 0xc2, 0x45, 0x90, 0xac, 0xb6, - 0x28, 0xc5, 0x1e, 0x20, 0x32, 0x33, 0x48, 0x84, 0x1f, 0xc6, 0x90, 0x6a, 0x82, 0x03, 0x78, 0xc6, - 0xef, 0x24, 0x51, 0x8d, 0x49, 0x88, 0x88, 0x11, 0x1f, 0x48, 0xa9, 0xc6, 0x9e, 0xda, 0x18, 0x18, - 0x3e, 0x20, 0x28, 0x29, 0x10, 0xa8, 0xfc, 0xbc, 0x57, 0x12, 0x90, 0x44, 0x38, 0x24, 0x7c, 0x43, - 0xdd, 0xef, 0xae, 0x0a, 0x41, 0x48, 0x28, 0x83, 0x48, 0xbc, 0x68, 0x4a, 0xdc, 0x63, 0x3a, 0xa2, - 0xa7, 0x3b, 0xf1, 0xdb, 0xc2, 0x27, 0x0a, 0xa2, 0x32, 0xfc, 0x55, 0xb6, 0x12, 0xe8, 0x47, 0x7d, - 0x17, 0x2f, 0xac, 0x57, 0xd1, 0x21, 0x95, 0xd1, 0x11, 0xd9, 0xfa, 0xc5, 0x2c, 0x10, 0x89, 0x05, - 0x72, 0x62, 0x88, 0x70, 0xb6, 0x2b, 0x15, 0x9b, 0x1d, 0x4a, 0x50, 0xab, 0x94, 0xdc, 0x4c, 0x12, - 0x19, 0xdf, 0x2a, 0x71, 0x22, 0x01, 0x77, 0x15, 0xc5, 0x6e, 0xee, 0xfe, 0x3e, 0x10, 0x3f, 0x3f, - 0x15, 0xdb, 0xdd, 0xaf, 0x10, 0x25, 0x94, 0x56, 0x70, 0xd1, 0xda, 0xc6, 0x22, 0x11, 0x11, 0x53, - 0x42, 0x57, 0x5a, 0x43, 0x03, 0x64, 0xe1, 0x49, 0xe1, 0x43, 0x0b, 0x8a, 0x62, 0x98, 0xa1, 0x97, - 0xbe, 0x78, 0x58, 0x34, 0x81, 0x83, 0x00, 0x02, 0x16, 0xa0, 0xa0, 0x06, 0x8a, 0xa0, 0x55, 0x30, - 0x1a, 0xb5, 0x23, 0x82, 0x71, 0x40, 0x8e, 0x35, 0xad, 0xe0, 0x70, 0x78, 0xf1, 0xcf, 0x10, 0x30, - 0xe6, 0x58, 0xf2, 0x98, 0x00, 0x11, 0x73, 0xc3, 0x21, 0x8f, 0x19, 0x1f, 0x12, 0xae, 0xa7, 0x45, - 0x1b, 0x99, 0xb6, 0xb1, 0x71, 0x96, 0x3f, 0x12, 0x75, 0x54, 0xae, 0xc4, 0xfc, 0x44, 0x55, 0xde, - 0xee, 0xee, 0xf8, 0x66, 0x20, 0xa4, 0x85, 0x4e, 0x79, 0xc7, 0x9c, 0xf2, 0xdd, 0x9e, 0xd0, 0xf7, - 0x30, 0x80, 0x31, 0x08, 0x4b, 0x6e, 0x79, 0x62, 0x4b, 0x92, 0x20, 0x1c, 0x24, 0x59, 0x43, 0x36, - 0x53, 0xe4, 0xa9, 0x70, 0x84, 0x64, 0x51, 0x85, 0x01, 0x40, 0x21, 0xe7, 0x02, 0xa1, 0x98, 0xee, - 0x90, 0x62, 0x4e, 0xe7, 0x18, 0x26, 0x3c, 0x94, 0xf3, 0x80, 0xc6, 0x6b, 0x65, 0xb3, 0x80, 0xe1, - 0x29, 0x95, 0x84, 0x02, 0x03, 0x25, 0xbf, 0x7e, 0xaa, 0x90, 0x81, 0xc7, 0xe1, 0x60, 0xed, 0x5f, - 0x88, 0x85, 0x2e, 0xe5, 0xf6, 0x5e, 0x6f, 0xe3, 0xd3, 0x77, 0x3b, 0x17, 0xff, 0x88, 0x96, 0xc5, - 0x62, 0xb7, 0x7d, 0xf1, 0x30, 0x58, 0x29, 0xb2, 0x65, 0xdd, 0xdd, 0xde, 0xee, 0x9d, 0x78, 0xc3, - 0x35, 0x66, 0x25, 0xbc, 0x1d, 0x59, 0xbb, 0xf1, 0x7b, 0xf0, 0x88, 0xb2, 0x89, 0x03, 0x82, 0xe7, - 0x6c, 0x7b, 0xc7, 0x7b, 0xf0, 0x8a, 0x09, 0xb4, 0x2b, 0xd0, 0x89, 0x57, 0x04, 0x47, 0x3d, 0x0f, - 0x4d, 0x3a, 0xf4, 0x54, 0xeb, 0xd1, 0x18, 0xfa, 0x94, 0x15, 0xc1, 0x11, 0x8f, 0x8f, 0xb7, 0xd5, - 0xbe, 0x8a, 0xe5, 0x72, 0xcf, 0x43, 0xd0, 0xb4, 0xfc, 0x13, 0xc5, 0x62, 0x1a, 0x0a, 0xcb, 0x68, - 0x77, 0x15, 0xe5, 0xc2, 0x21, 0x11, 0xe2, 0x1d, 0xde, 0xd3, 0x48, 0x18, 0xd3, 0x49, 0x7b, 0xf0, - 0x79, 0xc0, 0xa3, 0xb0, 0x80, 0x90, 0x54, 0x47, 0xe5, 0x4f, 0x25, 0xae, 0xb5, 0x5e, 0x47, 0xfc, - 0x61, 0x45, 0x6e, 0xf3, 0xc0, 0x1b, 0xb2, 0x92, 0xea, 0x8d, 0x51, 0x8f, 0x26, 0xf0, 0xea, 0xeb, - 0x94, 0xf0, 0xe7, 0x82, 0x6d, 0x4a, 0x5e, 0xca, 0x32, 0x06, 0x02, 0xcf, 0x54, 0xbe, 0x09, 0x4a, - 0x37, 0x6d, 0x4e, 0x35, 0x12, 0x45, 0xc6, 0xaa, 0xef, 0x10, 0x14, 0xb5, 0x0b, 0xbd, 0xc4, 0x9e, - 0x26, 0xc2, 0x6d, 0x34, 0xa4, 0x91, 0x71, 0x9a, 0xae, 0x01, 0x18, 0x93, 0xf0, 0x3a, 0xf0, 0x80, - 0xd1, 0x50, 0xb2, 0xb9, 0x88, 0x96, 0x20, 0x38, 0x36, 0x5a, 0xc0, 0xb4, 0xa4, 0xa1, 0x6d, 0xaf, - 0x00, 0x72, 0x16, 0x97, 0x25, 0x1a, 0x2f, 0x41, 0x46, 0x30, 0xba, 0xef, 0x80, 0x05, 0x65, 0x90, - 0x0a, 0xd1, 0xc0, 0x58, 0x5e, 0x80, 0x12, 0xa0, 0xf1, 0x19, 0x51, 0xa8, 0x7c, 0x73, 0x4f, 0xe3, - 0x6b, 0xc8, 0x10, 0x9d, 0xb3, 0xd4, 0xb0, 0xda, 0x35, 0x90, 0xeb, 0xd2, 0x7f, 0xcf, 0x0f, 0x38, - 0xeb, 0xfc, 0x19, 0xef, 0xe6, 0xef, 0xdf, 0x86, 0xdb, 0xa7, 0xe3, 0x25, 0xfc, 0xb8, 0x8c, 0xdc, - 0xb6, 0x70, 0xe3, 0x7c, 0x9c, 0x56, 0x7b, 0x9f, 0xc6, 0x14, 0xb6, 0x2a, 0xc7, 0x5f, 0xa4, 0x2e, - 0x4a, 0x55, 0x12, 0xb0, 0x15, 0xf1, 0x76, 0x1d, 0x59, 0x98, 0xc5, 0xbf, 0xf1, 0xe2, 0x48, 0xa5, - 0xb8, 0x63, 0xf9, 0x9e, 0x85, 0xbb, 0x15, 0x8a, 0x31, 0x46, 0x24, 0x68, 0x58, 0xf0, 0x88, 0x90, - 0x57, 0x26, 0x0c, 0x55, 0xe5, 0xe3, 0x3e, 0xd5, 0xd4, 0x4f, 0xa4, 0x26, 0x8c, 0x30, 0xdb, 0x0b, - 0xa2, 0x80, 0x03, 0xc3, 0xca, 0xf4, 0xb4, 0x9c, 0x7c, 0xff, 0x37, 0xf8, 0x4b, 0xc3, 0xb7, 0x70, - 0xfc, 0x76, 0x79, 0xa8, 0xb5, 0xac, 0x29, 0x6b, 0x10, 0xd6, 0xe9, 0xfd, 0xfd, 0x6d, 0xd7, 0xf5, - 0xb7, 0x48, 0x77, 0x8d, 0xe2, 0x4e, 0xe1, 0xf1, 0x18, 0x05, 0x3c, 0x32, 0x14, 0x37, 0x01, 0xb0, - 0x83, 0xa1, 0x9c, 0x1c, 0x38, 0xe5, 0x9c, 0x38, 0x03, 0x78, 0x8f, 0xde, 0x6d, 0x09, 0xcb, 0x08, - 0x70, 0x0f, 0x08, 0xd1, 0x89, 0x26, 0x46, 0xae, 0x46, 0x95, 0x18, 0xac, 0x40, 0x80, 0x94, 0x51, - 0xb6, 0x2b, 0x12, 0xfb, 0xc1, 0xfc, 0xd5, 0x55, 0x5e, 0x27, 0x89, 0x82, 0x32, 0x8a, 0xdc, 0xf4, - 0x2d, 0xa5, 0x78, 0x31, 0x08, 0x82, 0x72, 0x62, 0xb7, 0x15, 0x8a, 0xc4, 0x34, 0x3d, 0xc6, 0x1e, - 0x14, 0x30, 0xa3, 0x2d, 0x8a, 0x0c, 0x40, 0x0d, 0x01, 0x50, 0xc8, 0x91, 0x98, 0x1f, 0x73, 0x16, - 0x0c, 0xf0, 0x06, 0x82, 0x80, 0xcf, 0x1c, 0x2c, 0x06, 0x7b, 0xcb, 0x19, 0xe3, 0x87, 0x38, 0x70, - 0xe0, 0xd3, 0x1d, 0xf8, 0x50, 0xcd, 0xa4, 0xac, 0x1c, 0x40, 0xcb, 0x1d, 0x2c, 0x57, 0xcb, 0x65, - 0xb2, 0x61, 0x6c, 0xba, 0xcf, 0x01, 0x40, 0x5c, 0x74, 0xa9, 0x29, 0xe6, 0x3c, 0x22, 0x0a, 0x04, - 0x8a, 0x34, 0x05, 0x52, 0xd9, 0xc5, 0x1b, 0x47, 0x76, 0xe6, 0x8e, 0xdf, 0x56, 0x44, 0x74, 0x76, - 0x3e, 0xba, 0xfa, 0x36, 0xa4, 0xe8, 0xf9, 0x7c, 0xb7, 0xbd, 0xf5, 0xce, 0x7d, 0x73, 0x9f, 0x5c, - 0xe7, 0xd7, 0xa7, 0xe8, 0xa5, 0x43, 0x83, 0xc1, 0x0c, 0x14, 0x08, 0x93, 0x0b, 0x9b, 0x86, 0x51, - 0x8f, 0xc0, 0x2c, 0x36, 0x22, 0x33, 0x7c, 0x69, 0x03, 0x8c, 0xb3, 0x0c, 0x66, 0x65, 0xc6, 0x2b, - 0x97, 0xaf, 0x55, 0x58, 0xa1, 0xa1, 0xed, 0xe3, 0xc7, 0xfe, 0x24, 0x27, 0x77, 0x72, 0xd2, 0xac, - 0x1a, 0xf1, 0x21, 0x4b, 0xb6, 0xf2, 0xf2, 0x5d, 0x05, 0xcb, 0x35, 0x17, 0x9b, 0x8a, 0x62, 0x99, - 0xe7, 0x97, 0xfb, 0xc4, 0x9a, 0xaa, 0xab, 0x89, 0x12, 0x10, 0x12, 0x2b, 0x71, 0x5b, 0xe7, 0x50, - 0x56, 0x14, 0x5e, 0x57, 0x89, 0x0a, 0x18, 0xc4, 0x12, 0xf5, 0x52, 0x7b, 0x83, 0x0a, 0x17, 0xc1, - 0x29, 0xb0, 0x5c, 0xbe, 0x32, 0xb5, 0xa2, 0x50, 0xc6, 0x26, 0xe1, 0x01, 0x21, 0x43, 0x7b, 0x31, - 0x94, 0x23, 0x96, 0x1e, 0xd2, 0xac, 0xa3, 0xee, 0x73, 0x0a, 0xdf, 0xf3, 0xb9, 0x35, 0x84, 0x70, - 0x84, 0x28, 0x56, 0xd5, 0x22, 0x60, 0x3c, 0x52, 0xd0, 0x0d, 0xe0, 0xbe, 0xb9, 0xc5, 0x44, 0x14, - 0xaa, 0x19, 0x78, 0x87, 0xd2, 0x3d, 0xc4, 0x09, 0x19, 0x05, 0x5d, 0x61, 0x21, 0x32, 0x39, 0xe5, - 0x7b, 0x2c, 0x57, 0xbc, 0x76, 0xa5, 0xc1, 0x2f, 0x6f, 0xbf, 0x89, 0x0a, 0x4e, 0x0e, 0x33, 0xb9, - 0xa7, 0x3d, 0xab, 0x75, 0x3c, 0x56, 0xed, 0x16, 0xc5, 0x62, 0xb1, 0x5a, 0x3b, 0xc2, 0x30, 0x52, - 0x74, 0xb5, 0x7d, 0x67, 0xcd, 0x1c, 0x78, 0x88, 0xcd, 0xa4, 0x1a, 0x96, 0x78, 0xae, 0x6b, 0x10, - 0x38, 0x58, 0xc5, 0x18, 0xa3, 0x14, 0x62, 0x8f, 0x12, 0x19, 0x0a, 0x53, 0xad, 0x63, 0xde, 0x18, - 0x23, 0xcd, 0x08, 0x01, 0xee, 0xc6, 0xc3, 0x98, 0x41, 0x7b, 0x18, 0xc7, 0xc8, 0x8f, 0x87, 0x4c, - 0x5e, 0x31, 0xbe, 0x1c, 0xc7, 0x1c, 0x35, 0x29, 0x20, 0x83, 0xcc, 0xa8, 0xd5, 0xef, 0x4d, 0xe8, - 0xda, 0x36, 0x93, 0x32, 0xbc, 0x6d, 0xf5, 0xd6, 0xf8, 0x4b, 0xe1, 0x21, 0xd1, 0x0e, 0x11, 0x10, - 0x24, 0xd7, 0x67, 0xb7, 0x5c, 0x4f, 0xe6, 0x29, 0x54, 0x7c, 0x44, 0x13, 0x62, 0xb8, 0xac, 0xca, - 0x2e, 0x86, 0xfe, 0x11, 0x0a, 0x65, 0xc8, 0x76, 0x69, 0x3c, 0x95, 0x06, 0x2c, 0xff, 0x36, 0x9b, - 0x1c, 0xf2, 0xe6, 0x86, 0x4e, 0x4a, 0x33, 0x21, 0xfd, 0xe4, 0x71, 0xe2, 0x03, 0x21, 0x4b, 0xbe, - 0x95, 0x55, 0x64, 0xaf, 0xa7, 0xf0, 0x48, 0x0e, 0x16, 0x35, 0x7e, 0x1e, 0x3c, 0x03, 0x38, 0xc6, - 0x52, 0xfc, 0x1d, 0x41, 0xf8, 0x9c, 0x1e, 0x47, 0x1f, 0x12, 0x14, 0x9c, 0x00, 0xd0, 0xf0, 0x1e, - 0x78, 0xc9, 0xf6, 0x4e, 0x02, 0xd0, 0x63, 0x01, 0xd2, 0x3d, 0xc5, 0x88, 0x6a, 0xc5, 0x40, 0x37, - 0xc3, 0xa2, 0xb2, 0x82, 0x33, 0x23, 0x40, 0x47, 0x53, 0x14, 0x8f, 0xc4, 0x7d, 0x6f, 0x65, 0x95, - 0x39, 0x0c, 0x10, 0x50, 0x2d, 0x58, 0x40, 0x20, 0x14, 0x1d, 0xb6, 0x92, 0x8f, 0x99, 0xf2, 0xc1, - 0x8a, 0xcf, 0x82, 0xad, 0x12, 0xd2, 0xdc, 0xb1, 0x8c, 0xf8, 0xc5, 0x06, 0x58, 0x37, 0xe1, 0x08, - 0x23, 0x92, 0x15, 0xc9, 0x07, 0xc3, 0xc7, 0x91, 0x42, 0x9d, 0x09, 0x6f, 0xac, 0x69, 0x3a, 0xc7, - 0xbe, 0x8b, 0xe3, 0xeb, 0x2e, 0x19, 0x8a, 0x9f, 0x0a, 0x41, 0x36, 0x33, 0xdd, 0x0c, 0xbf, 0x12, - 0x20, 0x28, 0x68, 0x83, 0xc7, 0x1a, 0xce, 0x6d, 0xfd, 0x27, 0xe3, 0x0b, 0xda, 0x8e, 0xe4, 0x29, - 0x1e, 0x11, 0x0a, 0x15, 0xdc, 0x51, 0x8a, 0xda, 0x15, 0x88, 0x73, 0xdb, 0x4a, 0xa9, 0x3d, 0x4f, - 0xc4, 0xc4, 0xdd, 0xdd, 0xde, 0xff, 0x08, 0x88, 0x55, 0x5e, 0xed, 0xad, 0x53, 0xe2, 0x42, 0x62, - 0x48, 0x32, 0xef, 0x9c, 0x83, 0x7e, 0x10, 0x19, 0x17, 0x95, 0x8b, 0x88, 0x0e, 0x2f, 0x71, 0x58, - 0xae, 0xb5, 0xc4, 0x08, 0x0a, 0x10, 0xb3, 0x17, 0x17, 0x17, 0xbe, 0x42, 0xf8, 0xa6, 0x2e, 0x2e, - 0x23, 0x04, 0x85, 0x5a, 0x25, 0x84, 0xf4, 0xcc, 0xef, 0x85, 0x36, 0x2b, 0x0b, 0x8d, 0xcb, 0x2c, - 0x5d, 0x05, 0xf8, 0x84, 0x98, 0x75, 0x17, 0x1f, 0x46, 0xc4, 0xbc, 0x62, 0x1e, 0x2b, 0x10, 0x3c, - 0x9f, 0x4f, 0x6f, 0x10, 0x10, 0x0a, 0x1c, 0xa2, 0x33, 0x8b, 0x78, 0xb8, 0x33, 0x45, 0x0c, 0xe7, - 0x04, 0x8e, 0x16, 0xec, 0xa3, 0x50, 0xbb, 0xa2, 0x10, 0xf9, 0x14, 0xb4, 0xc5, 0x28, 0xe3, 0x86, - 0x19, 0x40, 0x2e, 0x97, 0x80, 0x50, 0x39, 0x69, 0xe7, 0x89, 0x31, 0x04, 0xb9, 0x74, 0x42, 0xea, - 0x1a, 0xb9, 0x4a, 0xe5, 0x67, 0x57, 0xf3, 0xf0, 0xc9, 0xf9, 0x54, 0x58, 0xf1, 0x23, 0x8d, 0x08, - 0xa9, 0x38, 0x44, 0x22, 0x14, 0xe1, 0x5a, 0x09, 0x2c, 0x10, 0x12, 0x6a, 0x16, 0x98, 0xa6, 0x39, - 0x7d, 0x99, 0xd4, 0x56, 0x5b, 0x74, 0x3e, 0xe0, 0xe4, 0x30, 0x0a, 0xa3, 0x8a, 0x91, 0x6c, 0x83, - 0xe4, 0xb8, 0xf2, 0xe5, 0xb7, 0x2f, 0x3d, 0xc0, 0xcd, 0x5a, 0xad, 0x1c, 0x78, 0x60, 0x40, 0x50, - 0xc2, 0xb1, 0x58, 0xac, 0x57, 0x8e, 0x91, 0x6e, 0xed, 0xd6, 0x29, 0x8f, 0xfc, 0x48, 0x64, 0x29, - 0x14, 0x6e, 0x28, 0xc5, 0x6f, 0xf2, 0xbd, 0x04, 0x9f, 0x1f, 0x0c, 0xb0, 0x6c, 0x0f, 0xe2, 0xf6, - 0x23, 0xa2, 0xe8, 0xef, 0xc1, 0x59, 0x53, 0x70, 0xab, 0x88, 0xdd, 0x4f, 0xaa, 0xaa, 0xa3, 0x8d, - 0x62, 0x3c, 0x48, 0x2b, 0x22, 0xd6, 0xbb, 0x3b, 0x49, 0x3f, 0x71, 0x30, 0xa1, 0x59, 0x8c, 0xc7, - 0xb6, 0xd2, 0x2e, 0x28, 0xc5, 0x18, 0x97, 0x0b, 0x18, 0xa0, 0xc5, 0x18, 0xa3, 0x14, 0x6f, 0x86, - 0x51, 0x40, 0x1e, 0xa3, 0x3e, 0x30, 0x42, 0xda, 0x8b, 0x13, 0x75, 0xbb, 0xbb, 0xbb, 0x9b, 0xbb, - 0xbb, 0x8b, 0x62, 0xdb, 0xad, 0xb6, 0xcb, 0x7d, 0x8e, 0x1b, 0x0c, 0xe0, 0x0c, 0x4e, 0x2a, 0x27, - 0xfb, 0xce, 0x3d, 0xff, 0x7b, 0xf3, 0xfc, 0xa0, 0xae, 0x56, 0x76, 0xdb, 0x8d, 0x30, 0x6a, 0x96, - 0x4a, 0x65, 0x1c, 0x33, 0x89, 0x68, 0x07, 0x70, 0xc8, 0x29, 0x0a, 0x12, 0xc5, 0x7b, 0x8a, 0xc2, - 0x83, 0xe1, 0x46, 0x58, 0x34, 0x85, 0xa1, 0x8c, 0xc6, 0x38, 0xbc, 0x15, 0x8a, 0xf8, 0xf8, 0xe3, - 0xc4, 0x42, 0x83, 0x0b, 0x7b, 0xe5, 0xc8, 0x3b, 0xe0, 0x9e, 0x0b, 0x88, 0xf3, 0xb9, 0x5a, 0xd3, - 0xac, 0x44, 0x6d, 0xcf, 0xf6, 0xdc, 0x57, 0x89, 0xe2, 0xc5, 0x5d, 0x82, 0xc3, 0xd5, 0x63, 0x93, - 0x9c, 0x29, 0x56, 0xff, 0x09, 0x74, 0x25, 0xc9, 0xba, 0x2f, 0x7d, 0x62, 0xae, 0xf7, 0xbf, 0x92, - 0xf7, 0x7c, 0x48, 0x81, 0xa6, 0x11, 0xc9, 0xcd, 0x0d, 0xd9, 0x8d, 0xc7, 0xd4, 0xc3, 0xb3, 0x53, - 0xfb, 0x55, 0x3e, 0x93, 0x9e, 0x38, 0xf3, 0x9e, 0x07, 0x2c, 0x48, 0xb6, 0x0e, 0x7e, 0x88, 0x9b, - 0xdf, 0x84, 0x01, 0x08, 0x20, 0xac, 0xd4, 0xbd, 0x4b, 0xd7, 0x99, 0x81, 0x7a, 0xe0, 0xd7, 0xed, - 0x47, 0x7f, 0x89, 0xb2, 0x9e, 0xc9, 0xaf, 0xe2, 0x88, 0xaa, 0x2e, 0xb2, 0x52, 0xbe, 0x0a, 0x8d, - 0xaa, 0xaa, 0x7a, 0x83, 0xfe, 0xb1, 0xf7, 0x10, 0x18, 0x0a, 0x0b, 0x06, 0x39, 0x2a, 0x88, 0xc5, - 0xd9, 0xa3, 0x66, 0x28, 0xcc, 0xa0, 0xf7, 0x28, 0x23, 0x3c, 0x2f, 0x33, 0x05, 0xe6, 0x2e, 0x84, - 0x35, 0x55, 0x1b, 0x30, 0xfb, 0x12, 0xf8, 0xfb, 0xbd, 0xb8, 0xa6, 0x29, 0xa8, 0xba, 0x8b, 0x8b, - 0xae, 0x20, 0x48, 0x50, 0x82, 0x99, 0x61, 0x89, 0x38, 0x59, 0xcd, 0xb1, 0xb1, 0x96, 0x6a, 0x29, - 0x8b, 0xc5, 0x71, 0x5c, 0xee, 0x26, 0x23, 0x2f, 0x27, 0x7d, 0x2f, 0x6f, 0xe0, 0x93, 0x7b, 0x9a, - 0xf0, 0xc8, 0x50, 0x48, 0x3f, 0xf5, 0x82, 0x2a, 0xe2, 0xa3, 0xd6, 0xa7, 0x2c, 0x5f, 0x75, 0x1c, - 0x19, 0x88, 0x27, 0x20, 0xd3, 0xb7, 0x4a, 0x70, 0x88, 0x90, 0x5c, 0x62, 0xd8, 0xad, 0xc5, 0x6d, - 0xdb, 0xb9, 0xc2, 0x10, 0x5b, 0x5d, 0xd4, 0x5d, 0x55, 0x1d, 0xe0, 0xa0, 0x14, 0x82, 0xce, 0xd5, - 0x23, 0xf4, 0xcf, 0xe5, 0xdc, 0xdc, 0xbd, 0xf8, 0x64, 0x20, 0x10, 0xb8, 0xad, 0xa6, 0xa4, 0xca, - 0x4a, 0xaa, 0xb8, 0x91, 0x00, 0x88, 0xa4, 0x92, 0x41, 0x79, 0x78, 0xba, 0x74, 0xa2, 0x7e, 0x20, - 0x48, 0xaa, 0xd6, 0xab, 0xf0, 0x56, 0x25, 0x26, 0xf1, 0x46, 0x28, 0xc3, 0xe2, 0xe8, 0x05, 0x8c, - 0x51, 0x8a, 0x31, 0x46, 0x28, 0xc7, 0xc6, 0x21, 0x88, 0x85, 0x29, 0x9e, 0x05, 0xd6, 0xdd, 0x08, - 0xa6, 0x36, 0xaf, 0x43, 0x9e, 0xf8, 0x1c, 0x98, 0xa6, 0x14, 0xa2, 0x15, 0x99, 0x8a, 0x3b, 0x54, - 0x8a, 0x42, 0x0e, 0x34, 0xc7, 0x78, 0x98, 0xc3, 0x96, 0xdc, 0xf6, 0x17, 0x65, 0xb1, 0x58, 0x84, - 0x60, 0xad, 0xf1, 0xc2, 0x20, 0x27, 0xac, 0x59, 0x60, 0xcb, 0x06, 0x28, 0x31, 0x41, 0xe2, 0x61, - 0x42, 0x09, 0x06, 0x87, 0xa6, 0x25, 0xb2, 0x71, 0xd1, 0xb9, 0xf1, 0x2d, 0x21, 0x13, 0xab, 0xbe, - 0xe3, 0x98, 0xe3, 0xc4, 0xc1, 0x59, 0x6d, 0xf8, 0xe5, 0xb1, 0x58, 0xad, 0xc5, 0x62, 0xb1, 0x58, - 0xac, 0x4a, 0x41, 0x1c, 0x31, 0xc1, 0xe1, 0x90, 0x52, 0x43, 0x0a, 0x31, 0x00, 0xd0, 0xf9, 0x78, - 0x88, 0x54, 0x44, 0xd5, 0x52, 0x15, 0xb8, 0xac, 0x12, 0xa3, 0x39, 0x2d, 0x74, 0xff, 0xc2, 0xd7, - 0xbb, 0x93, 0x9e, 0xe0, 0xbb, 0xb0, 0x45, 0xe8, 0x1e, 0x9f, 0x63, 0xb7, 0x7f, 0x27, 0x42, 0x7e, - 0x17, 0x73, 0x2e, 0x75, 0xcc, 0xa5, 0xca, 0x7d, 0x7e, 0x9f, 0xa2, 0x54, 0x5f, 0x57, 0x54, 0x44, - 0x13, 0xd3, 0x3a, 0x9e, 0x99, 0xb9, 0x77, 0xdc, 0x4c, 0x6e, 0x24, 0x65, 0xc4, 0x4a, 0xb1, 0x25, - 0x63, 0xf1, 0x73, 0xc5, 0x43, 0x3a, 0xf4, 0x32, 0x50, 0xa1, 0x03, 0xab, 0x9d, 0xe4, 0xd9, 0x0b, - 0xc1, 0x20, 0x0a, 0x44, 0xe0, 0x4a, 0xa0, 0x32, 0x84, 0xea, 0x57, 0xfc, 0x14, 0xde, 0x69, 0x5f, - 0x79, 0x6c, 0x6d, 0xb1, 0xed, 0xfe, 0x6b, 0xbb, 0xbf, 0x96, 0xee, 0xef, 0x89, 0x8a, 0x22, 0xa6, - 0xb5, 0x7b, 0xe2, 0x43, 0x23, 0x8a, 0xff, 0xbb, 0x9f, 0xfb, 0x4f, 0x7f, 0x10, 0x09, 0xca, 0xee, - 0xe2, 0xb2, 0x7d, 0x6f, 0xe2, 0x42, 0x91, 0x58, 0xad, 0xdc, 0x48, 0xe6, 0xbb, 0xd2, 0x25, 0xc7, - 0xf8, 0xaf, 0x97, 0x1d, 0x1d, 0xe2, 0x21, 0x48, 0x2e, 0xe6, 0x27, 0x3d, 0xd8, 0x70, 0x3d, 0x06, - 0xf1, 0x8a, 0x34, 0xf4, 0xe2, 0xb3, 0x68, 0x59, 0x55, 0x48, 0x4e, 0xe2, 0x44, 0x02, 0xc8, 0xb6, - 0x98, 0xb7, 0x10, 0xe4, 0xb0, 0x64, 0x23, 0x10, 0x03, 0xc5, 0x63, 0xc0, 0xfe, 0xbe, 0x14, 0x89, - 0x10, 0xc0, 0x94, 0x25, 0x80, 0x62, 0x6a, 0x3f, 0xc3, 0x9a, 0x3e, 0x4e, 0xe7, 0x59, 0x3c, 0x07, - 0xab, 0xa8, 0xaa, 0x7c, 0x7e, 0x88, 0xcc, 0x08, 0x15, 0xca, 0x0d, 0xc7, 0xa4, 0x7e, 0xfc, 0x40, - 0x80, 0xa6, 0x6e, 0xdc, 0x35, 0x08, 0x1a, 0xc3, 0x28, 0xde, 0x59, 0xaa, 0xcb, 0x67, 0x03, 0xc4, - 0xb8, 0x58, 0x32, 0x80, 0xee, 0x1c, 0x65, 0x00, 0x5f, 0xac, 0x03, 0xbd, 0x45, 0xd1, 0xbd, 0x2b, - 0x7f, 0xc4, 0xac, 0x8d, 0x32, 0x73, 0xf4, 0x12, 0xa6, 0x4e, 0xbe, 0x47, 0x98, 0x9c, 0x99, 0x81, - 0x13, 0x63, 0x0f, 0x98, 0xa1, 0xd0, 0x2a, 0xd5, 0x03, 0x4d, 0x7b, 0xff, 0x08, 0x82, 0x80, 0xa1, - 0x2d, 0xcb, 0x62, 0xb7, 0xe1, 0xc2, 0xc6, 0xcc, 0xb6, 0x2b, 0x5c, 0xca, 0x5c, 0x49, 0xe6, 0xe7, - 0x81, 0xe8, 0xe3, 0xf0, 0x55, 0x79, 0xd8, 0xaa, 0xaa, 0x8b, 0xeb, 0xdf, 0x04, 0x85, 0x51, 0x36, - 0x16, 0x7b, 0x89, 0x82, 0xce, 0x8c, 0xc4, 0x11, 0x1e, 0x0f, 0x7d, 0x9e, 0x38, 0x2a, 0x9c, 0xd4, - 0x39, 0x71, 0x10, 0x48, 0x4c, 0x44, 0x82, 0xaf, 0xe2, 0x01, 0x71, 0x96, 0xab, 0x77, 0x77, 0xe2, - 0x61, 0x43, 0xb8, 0xc9, 0x6d, 0x33, 0xb0, 0xe2, 0xb7, 0xc1, 0xb0, 0x13, 0x4a, 0x7b, 0xca, 0xdd, - 0x09, 0x41, 0xe5, 0xfe, 0xb6, 0xe3, 0x7a, 0x5c, 0x33, 0x28, 0x01, 0xe1, 0x25, 0xa4, 0x89, 0x30, - 0xa9, 0xa3, 0xf7, 0x2a, 0x5c, 0x46, 0x4e, 0xb0, 0x73, 0xf0, 0xc9, 0xd3, 0x49, 0x46, 0xe4, 0xaf, - 0xfd, 0x2d, 0x14, 0x89, 0x8a, 0xd1, 0x94, 0x49, 0x85, 0x16, 0xca, 0xdc, 0xd2, 0xd7, 0xf4, 0x83, - 0x52, 0xe5, 0x84, 0xb4, 0xe2, 0x89, 0x84, 0x12, 0x61, 0xa6, 0x8f, 0x05, 0x44, 0x2d, 0xbd, 0xb8, - 0xa3, 0x14, 0x62, 0xb1, 0x59, 0xa7, 0x49, 0x95, 0xc7, 0x10, 0x0a, 0x69, 0x15, 0x1f, 0xc9, 0x95, - 0x27, 0x56, 0x2a, 0xb1, 0x6a, 0xf7, 0x43, 0x1c, 0xdf, 0x05, 0x85, 0x45, 0x6e, 0xfb, 0x4e, 0xe1, - 0x3b, 0x54, 0xb6, 0x39, 0xfc, 0x4f, 0x86, 0x41, 0x48, 0x8d, 0x1b, 0xde, 0xbe, 0x24, 0x15, 0x0a, - 0x9f, 0x17, 0x1d, 0x33, 0x6b, 0x4b, 0x71, 0x09, 0x1c, 0x2d, 0xc4, 0xb0, 0x7f, 0x82, 0xda, 0x57, - 0x70, 0x77, 0x82, 0x01, 0x8f, 0x28, 0x0e, 0xf0, 0x0e, 0xf3, 0x93, 0xa3, 0xc5, 0x5d, 0x58, 0xfa, - 0xb0, 0x5d, 0x19, 0xe2, 0x7a, 0xf4, 0xbc, 0xc7, 0xbb, 0xdf, 0x0b, 0x91, 0x5d, 0x5e, 0x16, 0x79, - 0xb1, 0xa4, 0x08, 0x1f, 0x80, 0xfb, 0xee, 0x94, 0x06, 0x26, 0x40, 0x8d, 0xbf, 0x88, 0x1b, 0x72, - 0x83, 0x96, 0x0f, 0xa8, 0xaa, 0x23, 0x32, 0xd5, 0x42, 0xcc, 0x36, 0x43, 0x14, 0x61, 0xd8, 0x1e, - 0x1e, 0xa1, 0x65, 0x5e, 0x04, 0x13, 0xc0, 0xaf, 0x44, 0xd1, 0x45, 0x14, 0xdb, 0x5f, 0xfe, 0x3b, - 0x7b, 0x95, 0x4a, 0xfb, 0x7b, 0x7f, 0x65, 0x17, 0x53, 0x42, 0x7c, 0x29, 0xa9, 0xfd, 0x71, 0x77, - 0x17, 0x77, 0x77, 0xdd, 0x9f, 0xfe, 0x08, 0x88, 0x82, 0x22, 0x8b, 0xa3, 0xbe, 0x20, 0x84, 0x7b, - 0xbf, 0x8f, 0x12, 0x0c, 0xf7, 0x56, 0x60, 0x5d, 0x99, 0x38, 0x4c, 0xa2, 0x72, 0x80, 0x6f, 0x77, - 0xc3, 0x02, 0x42, 0x91, 0x84, 0x1c, 0x6d, 0x8b, 0xdd, 0x98, 0x50, 0x46, 0x85, 0x1a, 0x25, 0x4c, - 0x50, 0x63, 0xd4, 0x12, 0x03, 0xeb, 0x47, 0x7c, 0x48, 0x27, 0x96, 0xf8, 0xad, 0x3a, 0xe2, 0x38, - 0xf1, 0x22, 0x41, 0x54, 0xbd, 0x7a, 0x06, 0xf3, 0xdf, 0xba, 0xaa, 0xee, 0x8e, 0xf1, 0x31, 0x9b, - 0x8e, 0xae, 0xc9, 0x93, 0x9a, 0xa8, 0xf5, 0x8c, 0x51, 0x96, 0x31, 0x41, 0x8a, 0x3f, 0x0a, 0x5e, - 0xfa, 0x3c, 0x40, 0x2a, 0x05, 0x65, 0x8c, 0xb6, 0x7e, 0x2b, 0xbe, 0x68, 0xd1, 0xc7, 0x89, 0x08, - 0x84, 0x25, 0xb7, 0x15, 0xbb, 0xb4, 0x80, 0x4c, 0x25, 0x55, 0x5e, 0x11, 0xe2, 0x44, 0x84, 0xee, - 0x56, 0x1e, 0xdb, 0xaf, 0x13, 0x11, 0x51, 0x75, 0x17, 0x19, 0xea, 0x99, 0x39, 0xc4, 0x7c, 0x40, - 0x93, 0x2a, 0xaa, 0xad, 0x57, 0x89, 0x18, 0x5d, 0xde, 0xe8, 0x99, 0x6e, 0x2b, 0x69, 0xa0, 0xa3, - 0xe6, 0xe6, 0x26, 0x14, 0x2d, 0x1b, 0xd9, 0x2e, 0x22, 0x56, 0x3f, 0xbf, 0x1f, 0xc7, 0xfc, 0xb6, - 0xfc, 0x7e, 0x13, 0x20, 0x81, 0x16, 0x32, 0xd9, 0xc0, 0xa8, 0x2d, 0x92, 0x38, 0xf1, 0x22, 0x02, - 0x95, 0x79, 0x1e, 0xf3, 0xde, 0x73, 0xed, 0x0c, 0x66, 0x7e, 0x38, 0x60, 0x4c, 0x0e, 0x1a, 0x30, - 0x6f, 0x1a, 0x10, 0x27, 0x1a, 0x61, 0xa6, 0x91, 0x52, 0x01, 0xee, 0xf8, 0xca, 0xa4, 0x02, 0xbe, - 0xa0, 0xe9, 0x89, 0x76, 0x7a, 0x10, 0x04, 0x4a, 0x41, 0x2c, 0x70, 0xe5, 0x92, 0x12, 0x4b, 0x11, - 0x50, 0x34, 0x92, 0xe2, 0x42, 0x93, 0xd1, 0x01, 0x2d, 0xb5, 0x45, 0x8c, 0x92, 0x2e, 0xcb, 0x0b, - 0x77, 0x15, 0xb9, 0x6c, 0x43, 0x85, 0xb7, 0x7c, 0x23, 0xb6, 0x9e, 0xe2, 0xb4, 0x71, 0x75, 0x5c, - 0x48, 0x95, 0x7f, 0x8b, 0xa8, 0xb8, 0xba, 0xaa, 0x8b, 0xae, 0x24, 0x48, 0xeb, 0xdd, 0xd3, 0x64, - 0x37, 0x3d, 0x1e, 0xf8, 0x90, 0xf0, 0xc2, 0x71, 0xc2, 0xad, 0x32, 0xdb, 0xe1, 0x85, 0x6c, 0xac, - 0x5c, 0x02, 0x16, 0x34, 0x69, 0x46, 0x2b, 0xce, 0x2f, 0xf8, 0x28, 0x12, 0x94, 0x55, 0x33, 0x3d, - 0x12, 0xfa, 0x93, 0xa2, 0x3f, 0xd1, 0x5f, 0xea, 0xf7, 0xd6, 0x2f, 0xab, 0xd7, 0x57, 0x93, 0x9e, - 0xaa, 0xea, 0xfe, 0xfa, 0xbc, 0xbc, 0x12, 0x5d, 0xdd, 0xd1, 0xc7, 0x84, 0x44, 0x8d, 0x20, 0x56, - 0xe1, 0x15, 0x12, 0x8c, 0x3c, 0xb2, 0x58, 0x2c, 0xa1, 0x25, 0x7a, 0x30, 0x59, 0x55, 0xd8, 0xc3, - 0x88, 0xc4, 0xe4, 0x7b, 0xcb, 0xcf, 0xf3, 0xfd, 0xd4, 0x12, 0x0c, 0x31, 0x45, 0x24, 0x81, 0x4f, - 0x3b, 0x7b, 0xfc, 0x3e, 0x75, 0x94, 0xe6, 0x5e, 0x99, 0x7a, 0x6e, 0x6e, 0xf2, 0x26, 0x90, 0xf2, - 0xb0, 0xff, 0xe6, 0xbb, 0x8a, 0xc5, 0x7e, 0x08, 0x6e, 0xee, 0xe5, 0xbe, 0x0b, 0xa1, 0xda, 0xb4, - 0xa8, 0xaf, 0x6c, 0x5c, 0xde, 0x51, 0xc7, 0xe0, 0x8b, 0x31, 0xab, 0xeb, 0xe2, 0xc4, 0x35, 0xad, - 0x55, 0x71, 0x30, 0x52, 0x25, 0xce, 0x30, 0x45, 0x77, 0x6e, 0xe2, 0xb4, 0xe9, 0xb6, 0x32, 0x0e, - 0x11, 0x08, 0x09, 0x29, 0xe9, 0x04, 0x56, 0x73, 0x42, 0xdb, 0x8a, 0xc5, 0x62, 0xbc, 0x40, 0x90, - 0x53, 0xc4, 0xbd, 0xc5, 0x65, 0xe2, 0x5a, 0x58, 0xad, 0xdc, 0x57, 0xdc, 0x44, 0x7c, 0xce, 0x6d, - 0xcc, 0x62, 0x16, 0x0f, 0x58, 0x1b, 0xa1, 0x2a, 0x98, 0xb2, 0xdb, 0x85, 0x16, 0xcc, 0x48, 0x60, - 0x10, 0x90, 0xb6, 0x2b, 0x2c, 0x62, 0x8d, 0xdc, 0x48, 0x90, 0x49, 0x55, 0x55, 0x8b, 0x89, 0x12, - 0x26, 0xe5, 0xa0, 0xae, 0xde, 0xfe, 0x24, 0x11, 0xdb, 0xb6, 0x6e, 0xea, 0xe6, 0xb4, 0xd5, 0xac, - 0x40, 0x80, 0x91, 0x9d, 0xdd, 0xdd, 0xdf, 0xe3, 0x04, 0x89, 0xb0, 0x49, 0x65, 0x33, 0x44, 0x28, - 0xe2, 0x05, 0x81, 0x58, 0xac, 0xe4, 0x12, 0xd8, 0xac, 0xb6, 0x2b, 0x38, 0x80, 0xe2, 0x44, 0x02, - 0xb9, 0x69, 0x93, 0x39, 0x16, 0x32, 0xc6, 0x2b, 0x2c, 0x61, 0x51, 0x18, 0x36, 0x05, 0x62, 0xb1, - 0xf1, 0xc1, 0xe0, 0x80, 0x30, 0x14, 0x82, 0xe7, 0x22, 0x88, 0xe6, 0x64, 0x1c, 0x66, 0xa7, 0x8b, - 0x02, 0x8b, 0xe4, 0x92, 0x8e, 0x26, 0x00, 0x18, 0x89, 0x66, 0xdb, 0xa9, 0x52, 0x65, 0xfc, 0x7c, - 0xe4, 0x65, 0x26, 0x3a, 0x78, 0x78, 0xe2, 0x0a, 0x8d, 0x07, 0x31, 0xc7, 0x84, 0x42, 0x21, 0x49, - 0xe2, 0x91, 0x59, 0x95, 0x37, 0xf1, 0xea, 0x4d, 0x07, 0x89, 0x8a, 0xed, 0x0d, 0x07, 0x04, 0xa8, - 0x4a, 0x39, 0x2b, 0xb6, 0x02, 0xb0, 0xe7, 0xe2, 0x8e, 0x5c, 0x82, 0xb4, 0x02, 0x1b, 0x22, 0x38, - 0xf1, 0x31, 0xd8, 0x77, 0xcd, 0x90, 0xac, 0x56, 0xe2, 0xbb, 0x6d, 0x9f, 0xc4, 0xc2, 0x57, 0x72, - 0x98, 0x96, 0xc5, 0x6e, 0xe7, 0x31, 0xf0, 0x85, 0xc5, 0x6e, 0xed, 0x3d, 0x75, 0x5c, 0x48, 0x92, - 0x4c, 0xc0, 0xba, 0x8b, 0xe2, 0x25, 0x28, 0xb8, 0xb8, 0xb8, 0xbf, 0x13, 0xc4, 0x84, 0x47, 0x99, - 0x44, 0x9e, 0x2f, 0x2a, 0x0f, 0x7c, 0x5e, 0x31, 0x71, 0x4d, 0x45, 0xfc, 0x68, 0xa2, 0xfa, 0x48, - 0x35, 0xd6, 0x4c, 0xf7, 0x19, 0x48, 0x11, 0x18, 0x22, 0x06, 0x6c, 0x30, 0xf2, 0x95, 0x0c, 0x79, - 0xfd, 0x78, 0x8e, 0x51, 0x75, 0x63, 0x93, 0xab, 0x7d, 0x75, 0x15, 0xcc, 0x6b, 0xbb, 0xe1, 0x10, - 0x88, 0xd8, 0xab, 0x4c, 0x1d, 0xf9, 0xce, 0x03, 0x5d, 0x4e, 0x05, 0x82, 0xaa, 0xa3, 0x7b, 0xfb, - 0x79, 0xe2, 0xc5, 0x6b, 0xae, 0x12, 0x0d, 0x07, 0xae, 0xfc, 0x23, 0x65, 0xf1, 0x2f, 0xfe, 0x24, - 0x26, 0x4a, 0xa6, 0x6b, 0x5f, 0x82, 0x63, 0xcd, 0xb2, 0x74, 0x0e, 0x4e, 0xcf, 0x3f, 0x12, 0x20, - 0x28, 0x5b, 0xcf, 0x88, 0xde, 0xe1, 0x56, 0x85, 0xb7, 0xe3, 0xc8, 0x29, 0x13, 0x7b, 0x9f, 0x5e, - 0xf8, 0x2b, 0xdc, 0xcc, 0xe9, 0x25, 0xd6, 0xa8, 0xef, 0x89, 0xf1, 0x24, 0xa8, 0xd3, 0x25, 0x9e, - 0x24, 0x82, 0x1e, 0xfe, 0x20, 0x70, 0xb1, 0x2e, 0x6a, 0x2b, 0x15, 0xb8, 0xac, 0x56, 0xca, 0xa2, - 0xf8, 0x90, 0x80, 0x89, 0xd8, 0x2d, 0xdb, 0xb9, 0xc2, 0x00, 0xc5, 0x7e, 0x48, 0x94, 0x30, 0x1b, - 0x15, 0x8a, 0xf8, 0x91, 0x77, 0x15, 0x96, 0x85, 0xb2, 0xb0, 0x6f, 0x5c, 0xf1, 0x3f, 0x35, 0x45, - 0xc5, 0xd5, 0x62, 0x09, 0x2d, 0x1f, 0xe2, 0x19, 0x95, 0x55, 0x78, 0x81, 0x67, 0x39, 0x0a, 0x74, - 0xc5, 0x65, 0x31, 0x72, 0xdf, 0x85, 0x28, 0x12, 0x22, 0x93, 0xa4, 0x15, 0x6e, 0x0f, 0x7c, 0xe5, - 0x85, 0xa3, 0x04, 0xf5, 0x21, 0x6d, 0xf0, 0x39, 0x81, 0x63, 0x2c, 0x65, 0x8c, 0x51, 0xd7, 0x08, - 0x42, 0x91, 0x25, 0xe1, 0xee, 0xcb, 0xa2, 0xb4, 0xf3, 0x02, 0xd9, 0x3b, 0x85, 0xaa, 0xfe, 0xbe, - 0x84, 0x8a, 0xbd, 0x22, 0x57, 0x2a, 0xd6, 0x8d, 0x14, 0x8d, 0x63, 0xfe, 0x39, 0x8e, 0x0f, 0x12, - 0x10, 0x0a, 0x4a, 0xf3, 0x2f, 0x2d, 0x8a, 0xc9, 0xd5, 0x0e, 0x9b, 0xb3, 0x9e, 0x70, 0xe0, 0x87, - 0x1b, 0x43, 0xc1, 0xe5, 0xb2, 0xc6, 0x15, 0x15, 0x46, 0x82, 0xb1, 0x31, 0x93, 0xd9, 0x6c, 0x56, - 0x2b, 0x7b, 0x15, 0x8a, 0xc5, 0x6f, 0x6e, 0x25, 0xa5, 0x96, 0xcf, 0xfc, 0x27, 0x68, 0x20, 0xb5, - 0x09, 0xd0, 0x9b, 0x22, 0x9a, 0xf1, 0x22, 0x45, 0x5c, 0x56, 0xe2, 0xb3, 0xb1, 0x17, 0xe6, 0xaa, - 0xaa, 0xf9, 0xaa, 0xaa, 0xbc, 0x40, 0xb2, 0x8b, 0xa8, 0xb8, 0xb8, 0xb8, 0xba, 0xaf, 0x13, 0xe1, - 0x01, 0xf7, 0xdd, 0x45, 0xc9, 0xaa, 0x7c, 0x7b, 0x1d, 0xf0, 0xd8, 0xec, 0xf0, 0xa0, 0xe9, 0x33, - 0x4a, 0x49, 0x95, 0x23, 0x08, 0xbc, 0x28, 0xdf, 0xc1, 0xa8, 0xa9, 0xf0, 0x09, 0x7c, 0x2d, 0x3d, - 0xe7, 0x89, 0x60, 0x36, 0x4a, 0xaa, 0x4d, 0x9b, 0x0f, 0x90, 0xb3, 0xa3, 0xf6, 0x87, 0xf9, 0x7a, - 0x3e, 0x12, 0xf5, 0x65, 0x75, 0x74, 0xdd, 0x5d, 0x5d, 0x5c, 0xa8, 0x91, 0x23, 0x48, 0x66, 0x1c, - 0xec, 0xdd, 0xd0, 0x9d, 0x44, 0xe0, 0x27, 0xca, 0xec, 0x18, 0x13, 0x34, 0xbd, 0x6c, 0x80, 0x0a, - 0xc3, 0xa9, 0x88, 0x47, 0xa3, 0x1c, 0x39, 0x20, 0xea, 0x27, 0x4f, 0xf0, 0x52, 0x42, 0x66, 0x85, - 0x46, 0xc3, 0x99, 0x1d, 0xfc, 0xf3, 0x2b, 0x8c, 0x7c, 0x54, 0xfe, 0x24, 0x56, 0x7c, 0xd5, 0x7c, - 0x44, 0x22, 0x72, 0x41, 0x16, 0xdb, 0x65, 0x67, 0x51, 0x75, 0x5c, 0x48, 0x90, 0x59, 0xaa, 0xd5, - 0x63, 0x46, 0x16, 0xc8, 0x7d, 0xc4, 0xc6, 0x1c, 0x47, 0xa3, 0x33, 0x19, 0x58, 0x77, 0xa9, 0x08, - 0x22, 0xf3, 0x6e, 0xef, 0x88, 0x12, 0x0a, 0x22, 0xbb, 0xe6, 0xec, 0x1c, 0x9d, 0x0e, 0x3f, 0x0a, - 0x5b, 0x33, 0x0b, 0x02, 0x15, 0xa9, 0x54, 0xcc, 0x1b, 0xf4, 0x11, 0x17, 0xf2, 0xf8, 0x26, 0x23, - 0xbb, 0xbd, 0xbb, 0xbf, 0x1d, 0xf9, 0x27, 0x4a, 0x6e, 0xff, 0x82, 0x82, 0x2a, 0xaa, 0xaa, 0xaa, - 0xf7, 0xc6, 0x6a, 0xb5, 0xac, 0x5c, 0x5d, 0x45, 0xd5, 0x55, 0x78, 0x90, 0x50, 0x57, 0x77, 0x77, - 0x66, 0xef, 0xd5, 0xcb, 0xbb, 0xbf, 0x9a, 0xaa, 0xab, 0xc4, 0x02, 0x98, 0xb8, 0xba, 0xaa, 0xaa, - 0xc9, 0x90, 0x3e, 0xe7, 0xd5, 0xc7, 0x84, 0x74, 0x93, 0x77, 0x6d, 0xbc, 0x64, 0xc7, 0xe2, 0x42, - 0x25, 0xdd, 0xf6, 0xd3, 0x3a, 0x97, 0x3f, 0x6c, 0x6f, 0xc2, 0x39, 0x48, 0x26, 0x22, 0xfe, 0xee, - 0x32, 0x70, 0xb3, 0xc7, 0x07, 0x1f, 0xad, 0x53, 0x81, 0xcf, 0x0a, 0x6d, 0xed, 0xec, 0xa6, 0x2e, - 0x5b, 0x2d, 0x8a, 0xcb, 0x62, 0xb7, 0x37, 0xa1, 0x25, 0xfb, 0x2b, 0xd4, 0xb3, 0xd6, 0xe6, 0x71, - 0x30, 0x55, 0x19, 0x77, 0x72, 0x9e, 0x7b, 0x05, 0xad, 0x81, 0x91, 0x8f, 0x1f, 0x41, 0x00, 0x4f, - 0x79, 0x6c, 0x56, 0x2b, 0x47, 0x07, 0x88, 0xb2, 0x58, 0xae, 0xdf, 0xc2, 0x91, 0xb0, 0x80, 0xa2, - 0xcd, 0x7b, 0x45, 0x1a, 0x8a, 0xe7, 0x31, 0xcf, 0xd9, 0x12, 0xe2, 0x61, 0x13, 0xb6, 0x24, 0xf3, - 0x72, 0xcd, 0x2d, 0x21, 0x71, 0x71, 0x12, 0x09, 0x7f, 0x94, 0x84, 0x80, 0xee, 0x38, 0x58, 0x91, - 0x3c, 0x48, 0x90, 0x44, 0x45, 0x51, 0x75, 0xef, 0x0c, 0x82, 0xa3, 0xbd, 0xba, 0x97, 0x8b, 0x8b, - 0xa8, 0xba, 0x8b, 0x8e, 0x0d, 0xe2, 0x42, 0x95, 0x5e, 0x21, 0xa1, 0xd4, 0x2d, 0xc2, 0x1d, 0x45, - 0xf9, 0x88, 0x23, 0xcc, 0x9f, 0xe3, 0x47, 0x60, 0xc6, 0xa7, 0x06, 0xb3, 0x12, 0x48, 0x4d, 0x90, - 0xe5, 0xfb, 0x40, 0xec, 0x6b, 0x20, 0xc7, 0x4b, 0x6d, 0x78, 0x3a, 0x90, 0x12, 0xc0, 0xbe, 0x91, - 0x91, 0x82, 0xbb, 0xa8, 0x8f, 0xcf, 0xfc, 0x10, 0x89, 0x79, 0xaf, 0xd2, 0x72, 0x57, 0x52, 0x75, - 0x63, 0xea, 0xd2, 0x77, 0x5d, 0xcf, 0xc2, 0xfa, 0x4e, 0xf1, 0x5b, 0x0d, 0xd9, 0xf3, 0x30, 0x66, - 0x17, 0xc4, 0xc6, 0x0c, 0x2c, 0xc7, 0xfd, 0x23, 0x9e, 0x4a, 0x00, 0xd1, 0xf7, 0x0c, 0x41, 0x03, - 0x48, 0xfd, 0xb1, 0xcd, 0xc7, 0x72, 0x89, 0xf7, 0x4e, 0xf9, 0xfd, 0x1e, 0x5f, 0x5e, 0xf8, 0x81, - 0x21, 0x9b, 0xc8, 0xf8, 0xb8, 0xba, 0x8e, 0x5c, 0xc2, 0x01, 0x81, 0x83, 0x05, 0xc2, 0x7d, 0x16, - 0xe9, 0xf1, 0xd7, 0x1b, 0x77, 0x6b, 0x44, 0x22, 0xc3, 0x76, 0xaa, 0x9a, 0xb6, 0x2f, 0x41, 0xfe, - 0x8c, 0x80, 0x96, 0x10, 0x21, 0xd8, 0xe4, 0x14, 0x3d, 0x89, 0x0c, 0x05, 0x06, 0x88, 0xeb, 0xd8, - 0x45, 0x27, 0xa2, 0x9e, 0x85, 0x80, 0xc5, 0x6b, 0xea, 0xb5, 0xac, 0x9a, 0xa0, 0x23, 0xcc, 0x89, - 0x88, 0xaf, 0x8f, 0xa9, 0x3a, 0x22, 0xfb, 0x24, 0x14, 0x04, 0x2e, 0x10, 0x8e, 0xab, 0x9b, 0xde, - 0xea, 0x73, 0x02, 0xd9, 0x6d, 0xf8, 0x91, 0x37, 0xd1, 0xcb, 0x8d, 0x16, 0xf8, 0x90, 0x47, 0x22, - 0x96, 0x2b, 0x69, 0x1f, 0x96, 0xee, 0x2b, 0x15, 0xfa, 0x9e, 0xf8, 0x25, 0x9a, 0x12, 0xf1, 0x73, - 0x41, 0x65, 0xdc, 0x4c, 0x46, 0x47, 0xa2, 0x31, 0xbf, 0xb5, 0x87, 0xff, 0xcd, 0xa1, 0xbf, 0x84, - 0x01, 0x4c, 0x2f, 0x68, 0x2f, 0x2f, 0x51, 0x75, 0x17, 0x17, 0xa5, 0x7c, 0xbc, 0x41, 0x08, 0xee, - 0xef, 0x88, 0xfc, 0x16, 0x95, 0x15, 0xc7, 0xc9, 0x4f, 0x15, 0xcc, 0x8a, 0xf1, 0x11, 0x94, 0xea, - 0x53, 0xf0, 0xdb, 0x5a, 0xaf, 0x43, 0xa0, 0x63, 0xb2, 0x1d, 0x87, 0xe4, 0xe8, 0x69, 0xf8, 0xe9, - 0x92, 0xde, 0x37, 0x88, 0x46, 0x43, 0x95, 0x0b, 0x96, 0xed, 0xe2, 0x22, 0xee, 0xe2, 0xb7, 0x54, - 0xe9, 0xae, 0xa8, 0xef, 0xcd, 0x55, 0xae, 0x24, 0x48, 0x9b, 0xb8, 0xac, 0x56, 0x17, 0x15, 0x97, - 0x64, 0xf9, 0x6a, 0x2e, 0xab, 0xe3, 0x8a, 0x2e, 0x2e, 0x2e, 0x14, 0xf8, 0xbc, 0x5c, 0xbc, 0x44, - 0xc4, 0x44, 0x60, 0x97, 0x8a, 0x62, 0x4e, 0x62, 0x20, 0x94, 0xca, 0x2f, 0x2a, 0xa9, 0xc5, 0xfa, - 0xb1, 0x25, 0x23, 0x8a, 0xdf, 0x89, 0xf1, 0x21, 0x90, 0x8d, 0x65, 0x56, 0xf4, 0x7a, 0x8b, 0xe1, - 0x90, 0x52, 0x32, 0xaa, 0xaa, 0x7f, 0x93, 0x38, 0xe3, 0x17, 0x17, 0x55, 0xab, 0x6b, 0xc4, 0x02, - 0xb8, 0xe4, 0x5c, 0x5c, 0xa4, 0x4a, 0xcc, 0x29, 0x16, 0x2a, 0x2f, 0x1e, 0x24, 0x72, 0xa3, 0x8d, - 0x11, 0xd1, 0x7a, 0xfa, 0xea, 0x23, 0xaf, 0x71, 0x22, 0x42, 0x82, 0x02, 0x8d, 0x07, 0x6f, 0x8b, - 0xf4, 0x40, 0xcb, 0x56, 0xc9, 0xdb, 0xea, 0x1c, 0x27, 0xe0, 0xcc, 0xa0, 0xff, 0x0f, 0x80, 0xae, - 0xf1, 0x20, 0xba, 0x8c, 0x03, 0x94, 0xa2, 0xea, 0xe2, 0x58, 0x72, 0xb5, 0xd5, 0xf2, 0x89, 0x77, - 0x77, 0xc2, 0x22, 0x02, 0x82, 0x97, 0x73, 0x26, 0xea, 0x79, 0x80, 0x99, 0xd4, 0xdc, 0x69, 0x5b, - 0x13, 0x74, 0xf5, 0xe7, 0xa5, 0x3d, 0xf1, 0x5b, 0x40, 0x7c, 0xd5, 0xf8, 0x88, 0xc1, 0x66, 0xe0, - 0xa2, 0x33, 0x38, 0x76, 0xe5, 0x04, 0x71, 0xfd, 0xd9, 0xac, 0x2f, 0xcf, 0x07, 0xc5, 0x23, 0xd2, - 0x1e, 0x3e, 0x00, 0x5e, 0x37, 0x14, 0x78, 0x64, 0x20, 0x2a, 0xd0, 0xae, 0x21, 0xe2, 0xb2, 0x40, - 0x14, 0x02, 0xb3, 0x81, 0xf8, 0x81, 0x21, 0x1b, 0x1b, 0xde, 0xc5, 0x65, 0xb7, 0xcf, 0x82, 0xbc, - 0x44, 0x5d, 0xc5, 0x6e, 0xee, 0xee, 0xfc, 0x48, 0x50, 0xa2, 0x1c, 0xbb, 0xdc, 0xb9, 0x46, 0x2b, - 0x73, 0xf2, 0xc6, 0x7b, 0x46, 0xf3, 0xd8, 0x16, 0xcc, 0xf7, 0x89, 0x05, 0x75, 0x17, 0xdb, 0x55, - 0x5c, 0x42, 0xc3, 0x9c, 0x1f, 0x04, 0x86, 0x27, 0xf9, 0xd5, 0xd7, 0xb8, 0x81, 0x28, 0xbd, 0xf0, - 0x43, 0x4d, 0xb4, 0xdb, 0xef, 0xab, 0xfc, 0xd1, 0x5b, 0x88, 0x7d, 0xe2, 0x44, 0x88, 0xb1, 0xd1, - 0xb1, 0x94, 0x32, 0x48, 0xb7, 0xfc, 0x47, 0xe2, 0xca, 0xe8, 0xae, 0x9d, 0x36, 0xf8, 0x8e, 0x24, - 0x4f, 0x13, 0x25, 0x54, 0x5d, 0x7c, 0x41, 0x24, 0x5d, 0x55, 0x54, 0x5c, 0x5d, 0x44, 0x4d, 0x17, - 0x55, 0x5e, 0x23, 0xe2, 0xcd, 0x7b, 0xad, 0x57, 0x89, 0x25, 0x57, 0xf6, 0x72, 0x90, 0x5d, 0xc5, - 0x78, 0x91, 0x20, 0x96, 0xe8, 0xcc, 0x20, 0x32, 0x93, 0x74, 0x6f, 0x5c, 0x16, 0x08, 0x9b, 0xee, - 0xee, 0x2b, 0x78, 0x85, 0x86, 0xf2, 0xae, 0x8b, 0x95, 0xf5, 0xaf, 0xac, 0x51, 0xbc, 0x12, 0x77, - 0x77, 0xe2, 0x44, 0x0d, 0x10, 0x66, 0xce, 0xc0, 0xa2, 0xd3, 0x1d, 0x35, 0xa9, 0xe0, 0x0f, 0xa6, - 0xa7, 0x49, 0xa0, 0x1d, 0x74, 0xb0, 0x14, 0x52, 0xca, 0x40, 0x7a, 0x4c, 0x26, 0x63, 0xdf, 0x1a, - 0x96, 0x31, 0xa1, 0x55, 0xc1, 0x7f, 0x88, 0x3d, 0xcf, 0x4f, 0x37, 0xf2, 0xcc, 0x41, 0xaf, 0xcd, - 0x77, 0x77, 0xe2, 0x02, 0x5b, 0xce, 0x30, 0x5c, 0xf0, 0x7f, 0x10, 0x24, 0x28, 0x69, 0x71, 0xec, - 0x90, 0x58, 0x96, 0x03, 0x2c, 0x19, 0xfa, 0xa6, 0xa9, 0x89, 0x7e, 0xff, 0x2c, 0xe1, 0x89, 0x08, - 0x05, 0x05, 0xaf, 0x5d, 0xd5, 0x2e, 0x62, 0x1c, 0x39, 0x04, 0x51, 0x96, 0x31, 0x46, 0x28, 0xcb, - 0x19, 0x6c, 0x51, 0x8a, 0xcf, 0x3f, 0x84, 0x06, 0x45, 0x06, 0x75, 0x07, 0xbe, 0xed, 0x69, 0x82, - 0x99, 0x6b, 0x33, 0x6e, 0x64, 0xb6, 0x21, 0x63, 0xc4, 0x82, 0x00, 0xa1, 0x42, 0xcf, 0x82, 0x48, - 0x9e, 0xc3, 0x46, 0xec, 0xc6, 0x34, 0xb0, 0x15, 0xec, 0x33, 0xb8, 0xce, 0x1e, 0x1c, 0x2c, 0x67, - 0x00, 0xc0, 0x93, 0xe1, 0x59, 0x40, 0x2e, 0x91, 0x28, 0xa0, 0x08, 0x28, 0xff, 0xbf, 0x0e, 0xf3, - 0xfe, 0x3a, 0xdf, 0x53, 0xbc, 0xef, 0x6d, 0x6d, 0x65, 0xff, 0x88, 0x8f, 0xb3, 0xbd, 0x44, 0xc6, - 0x5b, 0x15, 0x8a, 0xc5, 0x6e, 0xd8, 0xec, 0x95, 0xf1, 0x00, 0xa8, 0x82, 0xb1, 0x58, 0x87, 0x2e, - 0xc5, 0x6e, 0x2b, 0x15, 0x8a, 0xc5, 0x62, 0xb4, 0x71, 0xc3, 0xb3, 0x80, 0x11, 0xc0, 0xdb, 0x6a, - 0xca, 0x1c, 0xff, 0xff, 0xd0, 0x17, 0x1c, 0x41, 0x93, 0xb8, 0x64, 0x15, 0x65, 0x7e, 0xaa, 0xaa, - 0x80, 0xff, 0x6d, 0xb6, 0xdb, 0xf0, 0x58, 0x62, 0x06, 0x1a, 0xdd, 0xc5, 0x62, 0xb1, 0x5b, 0x8a, - 0xc5, 0x67, 0x6f, 0x82, 0xb8, 0xac, 0x56, 0xee, 0x2b, 0x15, 0x89, 0x7d, 0x8a, 0xc5, 0x62, 0xb7, - 0x47, 0x1f, 0x8b, 0xb8, 0xac, 0x56, 0x25, 0x60, 0x56, 0x51, 0x01, 0xb2, 0xdf, 0x12, 0x2c, 0x8d, - 0x52, 0x49, 0x0d, 0x0d, 0x0c, 0x58, 0xf8, 0x90, 0x54, 0x5e, 0x5e, 0x2a, 0x36, 0x3a, 0x31, 0x51, - 0xb3, 0x96, 0x9e, 0x50, 0xe1, 0x00, 0x59, 0x77, 0x15, 0xb8, 0xac, 0x56, 0x2b, 0x15, 0xbb, 0x8a, - 0xc5, 0x7d, 0xe2, 0x46, 0x14, 0x42, 0x41, 0x29, 0x05, 0xf4, 0x39, 0x20, 0xb8, 0xa3, 0x2c, 0x62, - 0xb2, 0xdd, 0xbb, 0x9f, 0xdc, 0x10, 0x68, 0x40, 0xc3, 0x0e, 0xb2, 0x86, 0x90, 0x7f, 0xbc, 0xbc, - 0x53, 0x14, 0x66, 0xff, 0x11, 0x83, 0xa0, 0x23, 0x07, 0x41, 0x11, 0x7f, 0x2c, 0x25, 0x87, 0x89, - 0x09, 0x08, 0x3b, 0x30, 0x6e, 0x37, 0x41, 0x58, 0xac, 0xb6, 0xfe, 0x09, 0x68, 0x69, 0xc1, 0x99, - 0x91, 0x75, 0x91, 0x76, 0x71, 0x22, 0x02, 0x98, 0x9b, 0x04, 0x61, 0xaf, 0x34, 0x14, 0xbd, 0x45, - 0xdc, 0xc0, 0x5e, 0x70, 0x3e, 0x91, 0xdc, 0xef, 0x59, 0x8c, 0x71, 0xbc, 0x40, 0x42, 0xaa, 0xab, - 0xaa, 0x62, 0xbc, 0xb9, 0xe2, 0x0c, 0x62, 0xf2, 0xe3, 0xde, 0x20, 0x47, 0xcd, 0x55, 0x5f, 0x10, - 0x11, 0xa0, 0x6d, 0x55, 0x55, 0x55, 0xb6, 0xdb, 0x37, 0xc4, 0x09, 0x08, 0x12, 0x87, 0x7b, 0xdd, - 0xc5, 0x77, 0xc4, 0x84, 0x06, 0x55, 0x56, 0x9d, 0x6b, 0x55, 0xaa, 0xf1, 0x02, 0x42, 0x03, 0x53, - 0xb0, 0x0a, 0x4e, 0x55, 0x25, 0x8b, 0xba, 0x8b, 0xc8, 0x8d, 0x17, 0x18, 0x6a, 0x9b, 0x1b, 0x6b, - 0x8e, 0x6e, 0x59, 0xac, 0x62, 0x9d, 0x3e, 0x26, 0x2b, 0x4e, 0x41, 0x02, 0xa7, 0x58, 0x52, 0xfe, - 0x20, 0x14, 0x99, 0xa4, 0xd9, 0x0c, 0xbd, 0xf1, 0x18, 0xcc, 0x77, 0x46, 0xde, 0x5b, 0x67, 0x00, - 0xe5, 0x69, 0xcd, 0x39, 0x57, 0x30, 0xdb, 0xbb, 0xfa, 0x34, 0xaf, 0x82, 0x3e, 0xef, 0x58, 0x00, - 0x00, 0x00, 0x01, 0x41, 0x9a, 0x17, 0x0b, 0xb0, 0x26, 0x8d, 0xd0, 0x97, 0x42, 0x98, 0x45, 0x17, - 0x2f, 0x08, 0x02, 0x32, 0x8b, 0x8b, 0x8b, 0x8b, 0xa3, 0x86, 0x23, 0xaa, 0x38, 0x30, 0x5b, 0x02, - 0x48, 0x60, 0x16, 0x8a, 0x53, 0x3e, 0x1d, 0xe8, 0x55, 0x55, 0x7e, 0x04, 0x11, 0x21, 0x41, 0x8c, - 0xc8, 0xa3, 0x15, 0xe2, 0xac, 0x45, 0x94, 0x42, 0x1e, 0x0e, 0xff, 0x3d, 0x83, 0x20, 0x3b, 0x79, - 0xf1, 0x4b, 0xf2, 0x84, 0xcf, 0xc9, 0x20, 0x7a, 0x0c, 0xfc, 0x7b, 0xc3, 0x3d, 0x47, 0x1a, 0x1a, - 0xeb, 0xde, 0x20, 0x10, 0xc9, 0x8c, 0xc7, 0xc7, 0x7f, 0x82, 0x00, 0xa0, 0x48, 0x78, 0xe0, 0xfb, - 0x2d, 0x94, 0x1b, 0x03, 0xaf, 0x0f, 0x62, 0x4f, 0x4c, 0x62, 0x07, 0x8e, 0x37, 0x85, 0x86, 0x87, - 0x85, 0x81, 0xc5, 0x1d, 0x6c, 0x9c, 0x1f, 0x98, 0xe0, 0x41, 0x12, 0x09, 0xa1, 0xdf, 0xe8, 0x19, - 0x6e, 0x5b, 0x15, 0x9c, 0xf7, 0xb1, 0xd0, 0xb7, 0x41, 0x5e, 0xfa, 0x95, 0x3e, 0xb5, 0x5d, 0x13, - 0x2a, 0xea, 0xff, 0x57, 0x97, 0xa9, 0x92, 0x11, 0x89, 0xa3, 0x8c, 0x63, 0x5f, 0x12, 0xb8, 0x8f, - 0x04, 0x03, 0x02, 0x81, 0xa5, 0x02, 0xdf, 0xe6, 0xc5, 0x0a, 0x59, 0xb2, 0x47, 0x15, 0x11, 0x7a, - 0x47, 0x2c, 0x12, 0x51, 0x02, 0xcd, 0x52, 0x3c, 0x7c, 0x40, 0x52, 0x77, 0xa1, 0x31, 0x8a, 0x29, - 0xca, 0x8a, 0xb5, 0xc9, 0x95, 0xf0, 0x84, 0x00, 0x14, 0xc1, 0x4b, 0x50, 0xb0, 0x0c, 0x6a, 0x4e, - 0x4b, 0x0a, 0x1d, 0x1b, 0xe0, 0xa4, 0x3f, 0x0f, 0x71, 0x02, 0x50, 0x4f, 0xbe, 0xa5, 0x47, 0x44, - 0xe8, 0x43, 0x8f, 0x04, 0x9c, 0x43, 0x80, 0x7c, 0x35, 0x1d, 0x25, 0x58, 0x31, 0x06, 0x21, 0x83, - 0xd5, 0x94, 0x49, 0xf0, 0xba, 0xb8, 0x60, 0xbe, 0x41, 0x34, 0x63, 0xf8, 0x7f, 0x3a, 0x57, 0x97, - 0xe0, 0x49, 0x06, 0x20, 0x80, 0xca, 0xd2, 0x9a, 0x98, 0x5e, 0xf8, 0x93, 0x5a, 0x16, 0x49, 0x6c, - 0x81, 0xf7, 0x40, 0xf4, 0x8b, 0xf8, 0xb6, 0x9e, 0x0a, 0x41, 0xc8, 0x28, 0x32, 0xa8, 0xe4, 0xf1, - 0x10, 0x24, 0x83, 0x33, 0x73, 0xc4, 0x30, 0x10, 0xa8, 0x71, 0x69, 0x0b, 0x43, 0x70, 0x20, 0x83, - 0x10, 0x46, 0x27, 0x4d, 0x81, 0x15, 0xa3, 0x98, 0x24, 0xe8, 0xb0, 0xd3, 0x62, 0x02, 0xe3, 0x2c, - 0xfd, 0x12, 0xba, 0x09, 0xf1, 0xc0, 0xde, 0x6e, 0x50, 0x03, 0xf0, 0x07, 0xcc, 0x09, 0x55, 0x64, - 0x85, 0xe2, 0x8f, 0x84, 0x02, 0x84, 0xae, 0x2b, 0x74, 0x23, 0x52, 0x2a, 0x91, 0x85, 0xe9, 0x91, - 0xbe, 0x4c, 0x5b, 0x77, 0x25, 0x07, 0x55, 0xb2, 0x30, 0x40, 0x65, 0x19, 0xd2, 0xaf, 0xb8, 0x10, - 0x44, 0x89, 0x1e, 0xa0, 0x9f, 0xe6, 0x48, 0x88, 0xab, 0xd3, 0x16, 0x04, 0xe8, 0x41, 0x93, 0x8f, - 0x2b, 0xbe, 0xef, 0x8a, 0xc5, 0x62, 0xb1, 0x5c, 0x3a, 0xa0, 0x0f, 0x53, 0x6c, 0x02, 0xa3, 0x6d, - 0xbd, 0xb6, 0xff, 0xd1, 0x22, 0x5e, 0x9a, 0x69, 0xa7, 0x0e, 0x21, 0x00, 0x02, 0x27, 0x5b, 0xc5, - 0x8a, 0xe0, 0x9f, 0xeb, 0xff, 0xe3, 0x86, 0x81, 0xd7, 0xca, 0x8f, 0xc5, 0x77, 0x04, 0x09, 0x10, - 0x50, 0x89, 0xb4, 0x9c, 0x78, 0xd2, 0x2e, 0x01, 0x4c, 0x4d, 0xb6, 0xd8, 0x30, 0x15, 0xec, 0x33, - 0x1a, 0x33, 0x86, 0x93, 0x30, 0x38, 0xf8, 0x51, 0x62, 0x1b, 0x0b, 0x0e, 0x54, 0x08, 0xd8, 0x15, - 0x43, 0x56, 0x45, 0x5e, 0x17, 0x13, 0x8e, 0xaa, 0xe7, 0x99, 0x60, 0x51, 0x5f, 0x07, 0x9f, 0x63, - 0x17, 0x5a, 0x9d, 0xaf, 0xfa, 0x4d, 0xcf, 0x12, 0x20, 0x12, 0xf9, 0x2f, 0xd2, 0x2c, 0xcb, 0xd2, - 0xf7, 0xc2, 0x9d, 0xac, 0x3d, 0x8a, 0x12, 0x4c, 0xd7, 0x91, 0x2a, 0xb5, 0x6c, 0x46, 0xb7, 0x83, - 0xc3, 0xee, 0x80, 0x65, 0x0d, 0x5f, 0xc2, 0xe3, 0xc8, 0x7f, 0xdf, 0x05, 0x22, 0x54, 0xaa, 0xf5, - 0x07, 0xcf, 0xa7, 0xd8, 0xc4, 0xbc, 0x5c, 0xbc, 0x5f, 0x99, 0xaf, 0x7d, 0x0d, 0x19, 0x48, 0x8e, - 0xbc, 0xa8, 0xdd, 0x7a, 0x14, 0xea, 0x5a, 0xba, 0xb0, 0x27, 0x5c, 0x38, 0x88, 0x5c, 0x62, 0xb7, - 0xcc, 0x30, 0xcc, 0xbc, 0x4d, 0x49, 0x6f, 0xde, 0x58, 0x78, 0x50, 0xc0, 0xa9, 0x83, 0x16, 0xd0, - 0xfd, 0x22, 0xc8, 0x01, 0xc1, 0x05, 0xe9, 0x2c, 0xee, 0xf2, 0xd6, 0x45, 0x20, 0x34, 0xc5, 0x5c, - 0x69, 0xc9, 0x52, 0x01, 0xe0, 0xdf, 0x00, 0xdf, 0xb6, 0x87, 0x23, 0x2b, 0xa2, 0x57, 0x88, 0x13, - 0x3b, 0x8c, 0xfa, 0xa6, 0x3d, 0x44, 0x59, 0x77, 0xfd, 0x44, 0x88, 0xf9, 0x84, 0xdd, 0xdf, 0x02, - 0x88, 0x39, 0x1a, 0x72, 0x71, 0x1c, 0x17, 0x03, 0x8b, 0x0a, 0xa2, 0xdc, 0x32, 0x05, 0xe3, 0x38, - 0x1d, 0x5b, 0x8b, 0xf3, 0xa3, 0xcc, 0x4f, 0x9e, 0x65, 0xe4, 0xc7, 0xc3, 0xc7, 0x8b, 0x93, 0x4e, - 0x42, 0xa5, 0x23, 0xd0, 0x5b, 0x60, 0x35, 0xa0, 0x2d, 0xd1, 0xf2, 0x1b, 0x8f, 0xc2, 0x78, 0x49, - 0xf0, 0x41, 0x18, 0x10, 0xac, 0x47, 0xcd, 0x11, 0x5a, 0x9d, 0xc1, 0x94, 0x94, 0x06, 0xce, 0x68, - 0xa3, 0x42, 0xf8, 0xd0, 0xa9, 0x9f, 0xe7, 0x1c, 0x7e, 0x62, 0xe8, 0x61, 0x18, 0x52, 0x14, 0x74, - 0x51, 0xa0, 0xea, 0xc6, 0x62, 0xe5, 0x2c, 0xd9, 0x23, 0x8e, 0x6c, 0xef, 0x15, 0xbf, 0xb8, 0x60, - 0x48, 0x92, 0x92, 0x1c, 0xbf, 0x72, 0xd3, 0xf1, 0x30, 0x89, 0xa4, 0xa2, 0x9e, 0x1c, 0xe2, 0x4f, - 0x14, 0xd9, 0xa5, 0xff, 0x82, 0xa2, 0x82, 0x25, 0x3b, 0x9a, 0x5b, 0x8d, 0xd1, 0x0b, 0x0d, 0x5f, - 0x6f, 0xea, 0xba, 0xaf, 0xb8, 0x10, 0x01, 0x82, 0x09, 0xf4, 0x47, 0x44, 0xaf, 0xac, 0x53, 0x75, - 0xa9, 0xfa, 0xc5, 0x7d, 0x61, 0x0f, 0x56, 0xbe, 0x20, 0xe7, 0xa1, 0xe9, 0x9e, 0x87, 0xa7, 0xe0, - 0x93, 0x9e, 0x87, 0xa4, 0x5f, 0x09, 0xf3, 0xd0, 0xf4, 0xcf, 0x43, 0xd3, 0xc7, 0x4f, 0x43, 0xd3, - 0x3d, 0x0f, 0x4c, 0xf4, 0x3d, 0x39, 0x3a, 0x22, 0x55, 0xe0, 0x8e, 0x7a, 0x1e, 0x9a, 0x54, 0xba, - 0xc5, 0xf5, 0x8b, 0xea, 0xde, 0x19, 0x04, 0xe2, 0x8c, 0xc2, 0xc4, 0xcd, 0x22, 0x99, 0xb5, 0x2b, - 0x1d, 0xc4, 0x86, 0x42, 0x82, 0x05, 0xd0, 0x35, 0x18, 0x01, 0x7a, 0x32, 0x86, 0x80, 0xa2, 0xe8, - 0xcf, 0x17, 0x4e, 0x0c, 0x02, 0x93, 0xa0, 0xe7, 0xd4, 0x59, 0xc2, 0xec, 0x56, 0x59, 0x62, 0x80, - 0xf9, 0x3c, 0x22, 0x10, 0x8b, 0x79, 0x4f, 0xe5, 0xde, 0x98, 0xba, 0x66, 0x61, 0x65, 0xeb, 0xc4, - 0xfc, 0xc1, 0x5a, 0x1c, 0x24, 0x63, 0xcc, 0x09, 0x33, 0x1a, 0xc0, 0x4c, 0x08, 0xd2, 0xc3, 0x02, - 0x02, 0x81, 0x08, 0x0f, 0x5e, 0xb0, 0x65, 0x4d, 0xec, 0x71, 0x59, 0x07, 0xb9, 0x12, 0xc5, 0x81, - 0x2a, 0xc3, 0x7a, 0x2a, 0x65, 0x95, 0x4e, 0x18, 0x10, 0x2c, 0x15, 0x45, 0x41, 0x8a, 0x1d, 0x40, - 0x05, 0x43, 0xef, 0x6c, 0xb1, 0xf8, 0x98, 0xc2, 0xf2, 0xca, 0x4b, 0x50, 0xde, 0xb9, 0x6d, 0x0f, - 0x72, 0xc8, 0x31, 0x22, 0xd4, 0x68, 0x29, 0xc3, 0xbb, 0xfd, 0x57, 0x11, 0x05, 0x63, 0x6c, 0x86, - 0x9a, 0x1f, 0x58, 0xeb, 0xad, 0x55, 0x37, 0xe2, 0x44, 0x98, 0x76, 0xab, 0xc4, 0x8e, 0xee, 0xd2, - 0xaa, 0xd4, 0x4e, 0x02, 0xf3, 0x81, 0x00, 0x18, 0x20, 0xaf, 0xe1, 0x9e, 0x8d, 0x84, 0xbd, 0x13, - 0xa6, 0xe8, 0xe9, 0xc3, 0xd5, 0x2a, 0xf5, 0x4a, 0xbd, 0x7b, 0xeb, 0xdf, 0x5f, 0xfd, 0x7f, 0xe1, - 0x00, 0x4e, 0x48, 0x99, 0x9a, 0x74, 0xe3, 0x45, 0x8f, 0x78, 0x44, 0x28, 0x38, 0x7a, 0xe4, 0x61, - 0xd0, 0xb0, 0xb3, 0x80, 0x05, 0x89, 0xcc, 0x1c, 0x37, 0x94, 0x41, 0xd0, 0x70, 0xfe, 0x50, 0x12, - 0xd2, 0x31, 0x5b, 0x79, 0x63, 0x11, 0x71, 0x2b, 0xc2, 0x00, 0xae, 0x46, 0x07, 0xae, 0x2e, 0x3c, - 0xb8, 0x9f, 0x26, 0xa8, 0xe9, 0x72, 0xb0, 0x94, 0xbe, 0x71, 0xf7, 0x71, 0x1e, 0x05, 0x90, 0x87, - 0x12, 0x20, 0x51, 0xe7, 0xfa, 0x89, 0xa8, 0x6c, 0xef, 0xc2, 0x01, 0x11, 0xc6, 0xcb, 0xc5, 0xd3, - 0x9d, 0xcb, 0xd3, 0x97, 0xc4, 0x09, 0x04, 0x23, 0xc9, 0xe5, 0xdd, 0x90, 0xef, 0xa3, 0x3f, 0xc5, - 0x08, 0x8a, 0x6a, 0xab, 0x5e, 0x0e, 0x01, 0x40, 0x50, 0x2a, 0x2b, 0x3e, 0x7b, 0xbe, 0xe2, 0xbd, - 0x55, 0x05, 0xb0, 0xb7, 0x57, 0x24, 0xe8, 0x8e, 0x09, 0xd1, 0xcb, 0x49, 0xd1, 0x1c, 0x8a, 0xc4, - 0x02, 0x22, 0x66, 0xbc, 0x63, 0xc4, 0x42, 0x83, 0x98, 0xa4, 0xa2, 0x7c, 0xa5, 0x47, 0x5f, 0xcd, - 0xed, 0x93, 0x2a, 0x38, 0xff, 0x06, 0xb2, 0xa6, 0x2b, 0x8c, 0x51, 0x9f, 0x38, 0x81, 0x03, 0xa5, - 0x75, 0x0e, 0x01, 0xf1, 0xda, 0xfa, 0x7e, 0xd9, 0x49, 0x5f, 0xa0, 0xab, 0xf1, 0x10, 0x4e, 0x6d, - 0x48, 0xc0, 0x9f, 0x04, 0x4b, 0x5d, 0x00, 0x07, 0x75, 0xf3, 0x10, 0xb8, 0xa0, 0x6b, 0x8c, 0x8b, - 0xe0, 0x3d, 0x71, 0x30, 0x90, 0x42, 0x5f, 0x15, 0xdf, 0xb7, 0xe2, 0x42, 0x82, 0xd6, 0x55, 0xad, - 0x32, 0xeb, 0x53, 0xde, 0xe7, 0xcb, 0xa2, 0xab, 0xfc, 0xc6, 0x81, 0xf3, 0x50, 0x64, 0xd5, 0x18, - 0x0f, 0x78, 0x4b, 0x77, 0x10, 0xf9, 0x4f, 0x6b, 0xc1, 0x58, 0xd0, 0x11, 0xff, 0x1f, 0xdb, 0xb3, - 0xd5, 0xb3, 0x12, 0xaa, 0xa2, 0xea, 0xaa, 0xad, 0xe1, 0x04, 0x24, 0xe9, 0x1f, 0xd4, 0x70, 0x69, - 0xfa, 0xb9, 0x7d, 0x5a, 0xfa, 0xb8, 0x27, 0x21, 0x1f, 0x73, 0x74, 0x52, 0xa4, 0x9c, 0x11, 0x08, - 0x77, 0x7a, 0x3f, 0x81, 0x04, 0x22, 0x09, 0xea, 0xaa, 0xa6, 0xc9, 0x27, 0xc7, 0x63, 0xf8, 0x40, - 0x10, 0x82, 0x11, 0x15, 0xab, 0xf8, 0x21, 0x18, 0x44, 0xeb, 0x56, 0xd2, 0xb9, 0x78, 0x3d, 0xe3, - 0x70, 0x50, 0x65, 0x83, 0xc4, 0x0b, 0x02, 0x83, 0x1e, 0x70, 0xe0, 0xc4, 0x21, 0x2f, 0x2c, 0x1e, - 0x28, 0xdc, 0x43, 0xf4, 0xc3, 0xd5, 0x99, 0xa9, 0x93, 0xfc, 0x40, 0x39, 0x0a, 0x1d, 0x55, 0x55, - 0x54, 0x5c, 0x5d, 0x54, 0x56, 0x2b, 0x51, 0x1a, 0x12, 0xe1, 0xfb, 0x82, 0x00, 0x72, 0x14, 0x32, - 0xaa, 0xaf, 0xf8, 0xf3, 0x4d, 0xca, 0x4d, 0xa6, 0x73, 0xec, 0xb6, 0x2b, 0xef, 0x85, 0x2d, 0x2a, - 0xac, 0x9f, 0x77, 0x14, 0x6f, 0xbb, 0xb3, 0xe2, 0xb5, 0x85, 0xea, 0x27, 0x87, 0x86, 0x01, 0xe0, - 0x0f, 0x99, 0xbe, 0x0b, 0x76, 0x80, 0x01, 0xf0, 0x55, 0xc6, 0x7c, 0xed, 0x09, 0xe1, 0x7f, 0x70, - 0x2c, 0x03, 0x80, 0xa0, 0x4c, 0xa4, 0xf2, 0x5d, 0x42, 0xd5, 0x36, 0xf9, 0x33, 0x77, 0x5a, 0xc9, - 0xf8, 0x8c, 0x9d, 0x08, 0xab, 0xe8, 0xee, 0x84, 0xba, 0xb9, 0xf1, 0x05, 0x3d, 0x0f, 0x4c, 0xf4, - 0x3d, 0x32, 0xf0, 0x9e, 0x76, 0x3c, 0xf4, 0x3d, 0x09, 0xd4, 0xe9, 0x7d, 0x4e, 0x92, 0xc0, 0x83, - 0x0c, 0x11, 0xc3, 0x3d, 0xe6, 0x8a, 0x4d, 0xb6, 0xba, 0x6b, 0x52, 0xc3, 0xfc, 0x30, 0x24, 0x12, - 0x8c, 0xdd, 0xf1, 0x5b, 0xf7, 0xc1, 0x4e, 0xef, 0x6c, 0xd8, 0x6f, 0x10, 0xac, 0x56, 0xee, 0xcf, - 0x12, 0x32, 0x6b, 0x1d, 0x41, 0xc0, 0xa8, 0x24, 0x1a, 0x89, 0x85, 0xd0, 0x48, 0x0f, 0x81, 0x28, - 0xe3, 0xe9, 0x3b, 0x2f, 0x98, 0x92, 0x78, 0xf3, 0xde, 0x28, 0x0e, 0xb5, 0xde, 0x8e, 0x7e, 0x0a, - 0xb9, 0xe0, 0xd4, 0xb6, 0xe4, 0x1a, 0x8b, 0x6e, 0xd7, 0xc1, 0xf7, 0xf2, 0xac, 0x21, 0x0a, 0x58, - 0xc1, 0x56, 0x08, 0x8a, 0x32, 0x5e, 0x07, 0x97, 0x84, 0xb1, 0xb5, 0x7d, 0xd1, 0x5b, 0x7a, 0x64, - 0x83, 0x4b, 0x5b, 0x70, 0x77, 0xfd, 0xf8, 0x88, 0x52, 0x21, 0xe4, 0xe2, 0xa7, 0xbc, 0xf7, 0x2e, - 0x5b, 0x6a, 0xcb, 0x6e, 0xee, 0xf7, 0xae, 0x22, 0x11, 0x33, 0xbb, 0xbd, 0xef, 0x15, 0xbb, 0xf1, - 0x00, 0xb2, 0x5b, 0x2d, 0x4a, 0xa2, 0x7c, 0x48, 0x60, 0x4c, 0x01, 0xc1, 0xd8, 0x4a, 0xca, 0xb7, - 0x08, 0x03, 0x01, 0xc1, 0x52, 0xd8, 0xac, 0x48, 0xe3, 0xe9, 0x9e, 0x87, 0xa6, 0x2b, 0x10, 0xe1, - 0x6f, 0xd4, 0x89, 0xf5, 0x8a, 0xf8, 0x27, 0xce, 0xc4, 0xec, 0x67, 0x63, 0x17, 0xd7, 0x09, 0x38, - 0x89, 0xe8, 0x7a, 0x67, 0xa1, 0xe9, 0xbe, 0xbd, 0xf5, 0x78, 0x5b, 0xac, 0x52, 0xf5, 0x3a, 0x5f, - 0x44, 0xc3, 0xc4, 0x18, 0x52, 0xa6, 0xd8, 0xb7, 0xe1, 0x4e, 0x7f, 0x55, 0x17, 0x13, 0xc2, 0xdb, - 0x8a, 0xc4, 0xbe, 0x16, 0xe4, 0xb0, 0x6d, 0xc4, 0x41, 0x41, 0x79, 0xb6, 0x99, 0xa0, 0x2b, 0x97, - 0x38, 0x88, 0x52, 0x24, 0x44, 0x06, 0xb1, 0x2d, 0x2a, 0x8a, 0x31, 0x58, 0x59, 0xf5, 0xbe, 0xf1, - 0x8a, 0xef, 0xf1, 0x33, 0xff, 0x77, 0xbe, 0x26, 0x09, 0x4a, 0xf6, 0xef, 0x8a, 0xdc, 0xf9, 0x17, - 0x11, 0x1c, 0x4c, 0xb4, 0x73, 0x74, 0xcd, 0x0d, 0xda, 0xda, 0xaa, 0xf1, 0x21, 0x41, 0x85, 0xe0, - 0xe2, 0x17, 0x53, 0xfc, 0x52, 0x94, 0x3e, 0xc1, 0xd6, 0x68, 0xe2, 0xf5, 0x0f, 0xba, 0x4a, 0xa3, - 0x22, 0xfe, 0xf8, 0x7c, 0x33, 0x0e, 0xca, 0x47, 0x8c, 0xb4, 0x5d, 0x1c, 0x5c, 0x49, 0xe3, 0x83, - 0x13, 0xb3, 0x68, 0x9e, 0xb7, 0x5f, 0xe0, 0x83, 0xf4, 0x4a, 0x88, 0xe8, 0xfa, 0x93, 0xa2, 0x54, - 0x6f, 0x56, 0x8a, 0xe8, 0x8e, 0x57, 0x5c, 0xaf, 0xab, 0xde, 0x21, 0x1c, 0xa9, 0xc4, 0x06, 0x45, - 0x84, 0x97, 0x5a, 0x69, 0xfc, 0x14, 0x5d, 0xc5, 0x67, 0x21, 0x1e, 0x52, 0x5b, 0x24, 0xa0, 0x48, - 0x15, 0x76, 0x62, 0x61, 0x7c, 0x66, 0xb4, 0xef, 0x78, 0x0d, 0xc3, 0xb5, 0x12, 0x52, 0x7e, 0x5c, - 0xae, 0x22, 0x5a, 0xa6, 0x9b, 0xe2, 0x22, 0x8b, 0x55, 0x17, 0x55, 0x5f, 0x92, 0xcd, 0x63, 0x86, - 0x5e, 0x12, 0xae, 0x6f, 0x7b, 0x78, 0x88, 0xa1, 0x0b, 0x4c, 0x3f, 0xdb, 0xfc, 0xaa, 0x3f, 0x05, - 0x21, 0x15, 0xe8, 0x34, 0x8b, 0xd5, 0x6b, 0x2a, 0xa9, 0x5d, 0xcc, 0x8b, 0xab, 0x2e, 0x47, 0x6f, - 0x12, 0x8b, 0xd1, 0x5d, 0x5c, 0x9f, 0xad, 0x57, 0x58, 0xdf, 0x56, 0x23, 0x7a, 0x23, 0x11, 0x1d, - 0x16, 0xaf, 0xae, 0xb8, 0x88, 0x27, 0x09, 0x0a, 0x62, 0x98, 0xa6, 0x29, 0x8b, 0xb6, 0x38, 0x67, - 0xf7, 0x11, 0x0a, 0x11, 0x56, 0x1b, 0x45, 0xe7, 0x31, 0xb7, 0x80, 0x64, 0x07, 0x6c, 0xe3, 0x4a, - 0x29, 0x99, 0x56, 0x7a, 0x82, 0x88, 0xc1, 0x79, 0x72, 0x4c, 0x32, 0x07, 0xc5, 0x97, 0x38, 0x81, - 0x03, 0x3b, 0x08, 0x23, 0xad, 0x98, 0x51, 0x2f, 0x58, 0x54, 0x05, 0x68, 0x1d, 0x04, 0xf4, 0x0d, - 0x70, 0xe9, 0xcc, 0xb0, 0x4e, 0x43, 0x60, 0xe9, 0x52, 0x61, 0x52, 0x33, 0x19, 0x90, 0x30, 0x4e, - 0x8e, 0xfc, 0x20, 0x30, 0xbb, 0x52, 0xaa, 0xb1, 0xb5, 0xb9, 0xcf, 0x2c, 0x41, 0xff, 0x3c, 0x07, - 0xe2, 0x41, 0x86, 0x22, 0x30, 0x9c, 0x82, 0x32, 0x9b, 0x6b, 0x42, 0x34, 0xad, 0x1f, 0x58, 0x1d, - 0xa1, 0x69, 0x45, 0x6e, 0xc3, 0xa9, 0x98, 0xef, 0x57, 0xc1, 0xbb, 0x05, 0xaa, 0x6f, 0xd6, 0xab, - 0x15, 0x7c, 0xe6, 0x33, 0xdb, 0x59, 0xe6, 0x79, 0x0d, 0xc1, 0x53, 0xf3, 0x10, 0x20, 0x13, 0x1c, - 0xa4, 0x28, 0xca, 0x80, 0xfc, 0x8c, 0x9e, 0x9c, 0x5e, 0xde, 0xcc, 0x0e, 0xa0, 0x7e, 0x6f, 0x7b, - 0x1c, 0x40, 0x80, 0x46, 0x51, 0x59, 0x6a, 0x20, 0x58, 0x57, 0x87, 0xf1, 0x21, 0x19, 0xbd, 0x0c, - 0xb8, 0xef, 0xdb, 0x6d, 0x0b, 0x89, 0x12, 0x66, 0x7d, 0xd4, 0x9f, 0xea, 0xee, 0x5e, 0x5e, 0x82, - 0x64, 0x4b, 0xea, 0xe0, 0x27, 0xd5, 0x3a, 0x5d, 0x11, 0x1f, 0x27, 0x56, 0x8b, 0xe0, 0x86, 0xaa, - 0xaa, 0xdc, 0x32, 0x24, 0x11, 0x92, 0x98, 0x4d, 0x34, 0x8b, 0x7d, 0xe2, 0x07, 0xd3, 0x1d, 0xc1, - 0x95, 0x2b, 0xc8, 0xf1, 0xc1, 0x2f, 0xb7, 0xf7, 0xbf, 0xc7, 0x0a, 0x3b, 0xce, 0x30, 0x2f, 0x26, - 0xe4, 0xda, 0x40, 0x6b, 0x1b, 0xa1, 0x6d, 0xfe, 0x32, 0x73, 0x61, 0xee, 0x37, 0x12, 0xb5, 0x07, - 0xc7, 0x83, 0x14, 0x3e, 0xb4, 0xcd, 0xff, 0x74, 0xbb, 0x71, 0x58, 0x87, 0x3c, 0x28, 0x5c, 0x73, - 0x25, 0xd5, 0x2d, 0x44, 0xa2, 0xbb, 0xa6, 0x4a, 0xae, 0xfc, 0x7d, 0xdf, 0x05, 0x44, 0x97, 0xb8, - 0xb2, 0xfb, 0xba, 0xa8, 0x83, 0x7f, 0x16, 0xa1, 0x44, 0xb0, 0xef, 0x12, 0x10, 0x8f, 0x75, 0xa0, - 0xc6, 0x47, 0x93, 0xd2, 0x12, 0x2c, 0x8f, 0xb7, 0x79, 0xc8, 0xae, 0x90, 0x5c, 0xc9, 0x7a, 0xfb, - 0xf8, 0x50, 0x58, 0x1d, 0xea, 0x2b, 0xa5, 0x1d, 0xdb, 0xbb, 0x88, 0x7d, 0xd0, 0x69, 0xbd, 0xdd, - 0xf8, 0x81, 0x05, 0xbb, 0xbf, 0xc5, 0x0c, 0xd3, 0x15, 0x6a, 0x5a, 0x57, 0x04, 0x20, 0xc4, 0x11, - 0x94, 0x2a, 0xae, 0x95, 0xad, 0x63, 0x06, 0x8a, 0xe8, 0x2a, 0x9a, 0x1f, 0xe8, 0x7b, 0x9f, 0x41, - 0x07, 0xe2, 0x43, 0x20, 0xb0, 0x64, 0x00, 0xfd, 0xe8, 0xcb, 0xc0, 0xf6, 0xbd, 0xd0, 0xaa, 0xab, - 0x2c, 0x72, 0xfa, 0xe2, 0x04, 0x82, 0xda, 0x27, 0x64, 0xe2, 0xb9, 0x6e, 0xe1, 0x44, 0x42, 0x82, - 0x21, 0xe6, 0xe4, 0x14, 0x55, 0xf7, 0x6b, 0x08, 0x17, 0x9a, 0x5c, 0x30, 0xfc, 0xf0, 0x1e, 0x90, - 0x12, 0x04, 0xf9, 0x52, 0x52, 0x65, 0xb0, 0x38, 0x85, 0x83, 0xbe, 0x06, 0x29, 0xba, 0x43, 0xb7, - 0x10, 0x24, 0x67, 0x7b, 0xd8, 0xdd, 0xdd, 0xed, 0xc5, 0x67, 0xd1, 0xe5, 0x0a, 0xa4, 0xb1, 0xd8, - 0x88, 0x2b, 0x13, 0x06, 0xf8, 0xe7, 0x5b, 0xb6, 0x8d, 0xc6, 0xf5, 0xc9, 0x78, 0x90, 0x57, 0x62, - 0x11, 0x60, 0xd4, 0x2f, 0x37, 0x95, 0x6a, 0xe5, 0xe5, 0xbf, 0xf0, 0xcc, 0x28, 0x70, 0x9b, 0x61, - 0xb3, 0x5c, 0xc3, 0xf0, 0x5a, 0x06, 0x7c, 0xcb, 0x6b, 0x4d, 0x19, 0xd7, 0xcf, 0x58, 0x93, 0xe6, - 0x8d, 0x15, 0x88, 0x12, 0x14, 0x9d, 0xc3, 0xf4, 0x39, 0xc2, 0x47, 0xc5, 0xb7, 0xde, 0xed, 0xc5, - 0x62, 0xb7, 0x77, 0x38, 0x7c, 0x40, 0x91, 0x24, 0x7b, 0xdf, 0x7c, 0x48, 0x90, 0x8d, 0x82, 0x13, - 0x31, 0x75, 0x5c, 0xee, 0x3a, 0x65, 0x6f, 0xdf, 0x10, 0x20, 0x28, 0x32, 0x32, 0xc1, 0x9e, 0xf2, - 0xab, 0x35, 0x8b, 0x89, 0xe9, 0xb9, 0x35, 0x4b, 0x6f, 0xc2, 0xc7, 0x79, 0xdc, 0x32, 0x0c, 0x41, - 0x19, 0xd8, 0x39, 0x88, 0x2d, 0x1f, 0x42, 0x9d, 0x09, 0xaf, 0xae, 0x51, 0x1d, 0x5e, 0x2f, 0xab, - 0x0c, 0x32, 0x11, 0x0a, 0x11, 0x55, 0x55, 0x55, 0x55, 0x56, 0x4d, 0x48, 0x5a, 0x1e, 0x3c, 0x56, - 0xb2, 0xf1, 0x00, 0xa7, 0x17, 0x52, 0x48, 0xb9, 0xee, 0x32, 0xb7, 0x45, 0x13, 0x81, 0xc3, 0xc9, - 0xdd, 0xf8, 0x90, 0x58, 0x45, 0x0b, 0x7c, 0xbd, 0x5c, 0x5c, 0x63, 0xb3, 0x8f, 0xb3, 0xe1, 0x43, - 0x17, 0x93, 0xa9, 0x7e, 0xae, 0xa8, 0xde, 0xd3, 0x62, 0xea, 0xab, 0x0e, 0x5f, 0x48, 0x72, 0xdd, - 0x1f, 0x88, 0x12, 0x14, 0x81, 0x8b, 0x15, 0xdb, 0x4f, 0x2a, 0xfe, 0x45, 0x82, 0xd8, 0x95, 0x0e, - 0xfa, 0x39, 0x57, 0x14, 0xb0, 0xce, 0xf2, 0xc0, 0x5f, 0x8e, 0x18, 0xf1, 0xc0, 0x5f, 0x94, 0xb4, - 0xcc, 0xcc, 0xab, 0xf1, 0x02, 0x01, 0x58, 0xd2, 0xd9, 0x6f, 0xce, 0x48, 0x49, 0x20, 0xca, 0x45, - 0xc2, 0x52, 0xfb, 0x88, 0x90, 0x8e, 0x2b, 0xbe, 0x24, 0x40, 0x50, 0xee, 0xe2, 0xb7, 0xb1, 0x59, - 0x72, 0xca, 0xc1, 0x6d, 0x39, 0x63, 0x15, 0x8a, 0x31, 0x46, 0xf8, 0x64, 0x82, 0x40, 0x1f, 0x60, - 0xb7, 0x3a, 0x37, 0xad, 0x77, 0xbf, 0x91, 0x8d, 0x7c, 0x48, 0x50, 0x8e, 0x2b, 0x77, 0xd2, 0x2e, - 0x3b, 0xb8, 0xad, 0xec, 0x56, 0x2b, 0x4d, 0xc4, 0x5e, 0x7b, 0xe1, 0x00, 0x80, 0xe1, 0x58, 0xe2, - 0xa8, 0xfd, 0x8d, 0x01, 0xef, 0x4a, 0x82, 0x2d, 0x1e, 0x5b, 0x7f, 0x82, 0x61, 0x16, 0xe5, 0x8c, - 0x2e, 0x2a, 0xc6, 0x7b, 0xc7, 0xd3, 0x17, 0xfe, 0x24, 0x10, 0x94, 0xa1, 0x5b, 0x8e, 0x3a, 0x76, - 0x07, 0x4f, 0xdf, 0x0c, 0xa0, 0xbf, 0x7c, 0xb1, 0x71, 0x71, 0x71, 0x70, 0x97, 0x42, 0xb2, 0x8d, - 0xe8, 0xd1, 0x49, 0xc1, 0x3d, 0xf7, 0x6b, 0x73, 0xb7, 0x0c, 0x89, 0x04, 0xdc, 0xb8, 0xe2, 0x5c, - 0x56, 0xc9, 0x55, 0x26, 0xbe, 0x14, 0x33, 0xa4, 0xe7, 0xc2, 0xe4, 0xb5, 0x35, 0x17, 0x51, 0x75, - 0x5c, 0x89, 0xc4, 0x42, 0x90, 0x04, 0xc5, 0x6b, 0xea, 0xf5, 0xa0, 0xc1, 0x3c, 0xcb, 0xc2, 0xd9, - 0x52, 0x9b, 0x8e, 0x7a, 0x97, 0xd2, 0x17, 0x55, 0x5b, 0xdc, 0x9d, 0xf7, 0xed, 0xdd, 0xf1, 0x11, - 0xe2, 0x5d, 0xad, 0x83, 0x60, 0xc7, 0x9a, 0xee, 0xc5, 0x55, 0xf1, 0xe6, 0x73, 0x74, 0x95, 0x31, - 0x2f, 0x52, 0xf1, 0x75, 0x33, 0x04, 0x34, 0xa8, 0xeb, 0x10, 0x24, 0x58, 0x8a, 0x47, 0x0d, 0x03, - 0xff, 0xce, 0x95, 0x5e, 0x24, 0x61, 0xe0, 0xe4, 0x99, 0xa6, 0x04, 0x1f, 0x5b, 0x39, 0x15, 0xab, - 0xf3, 0xca, 0x92, 0x03, 0x57, 0xa6, 0x05, 0x43, 0x68, 0xd9, 0xca, 0xb1, 0x7c, 0x20, 0x2e, 0xf2, - 0x6d, 0x49, 0x08, 0x23, 0x62, 0xc5, 0xc4, 0x09, 0x44, 0xff, 0x12, 0x11, 0x04, 0xa5, 0xba, 0xdd, - 0xdd, 0xff, 0xe1, 0x10, 0x9d, 0xa6, 0x92, 0xde, 0xf0, 0xeb, 0x38, 0x01, 0x6b, 0x46, 0x2f, 0xb9, - 0x38, 0x3d, 0xea, 0xaa, 0xaa, 0xa0, 0xed, 0xc7, 0x6f, 0xed, 0xfb, 0x2b, 0x2e, 0x0a, 0x41, 0x59, - 0x0b, 0x92, 0xdc, 0x65, 0x31, 0x79, 0xc8, 0x27, 0xf8, 0x89, 0x9d, 0xf0, 0x55, 0x12, 0xf7, 0x1a, - 0x58, 0x8c, 0x62, 0x19, 0x2a, 0x5b, 0xe2, 0x25, 0xc7, 0xe2, 0x51, 0x77, 0xd1, 0x0e, 0xba, 0x89, - 0x12, 0x10, 0x1d, 0xbb, 0xdd, 0xe5, 0xba, 0x5c, 0x48, 0x21, 0xe0, 0xa3, 0x0a, 0xf4, 0x3e, 0x55, - 0xd1, 0xd3, 0xaf, 0x45, 0x4e, 0x97, 0x44, 0x82, 0xfa, 0x23, 0x49, 0xc1, 0x21, 0x44, 0xac, 0x0a, - 0xdc, 0x56, 0x35, 0x63, 0x8f, 0x0c, 0x89, 0x05, 0x02, 0x1d, 0xda, 0x1e, 0xf3, 0x30, 0xe3, 0x09, - 0x1e, 0x70, 0xb5, 0x3f, 0x10, 0x24, 0x22, 0x6a, 0xdf, 0x66, 0xb6, 0xb5, 0xe2, 0x42, 0x85, 0xb8, - 0xa3, 0x14, 0x62, 0xb9, 0xf2, 0xed, 0x6c, 0xb2, 0x41, 0x57, 0x2d, 0x7c, 0x13, 0x10, 0x6e, 0x59, - 0x7c, 0x92, 0x48, 0xcf, 0x1b, 0x9b, 0x19, 0xe3, 0xf8, 0xe7, 0xf1, 0x20, 0x98, 0xed, 0x3a, 0x07, - 0xaa, 0xaf, 0x71, 0x30, 0x53, 0x7b, 0xbb, 0xbb, 0xeb, 0x17, 0xee, 0x20, 0x40, 0x50, 0x44, 0x69, - 0xa2, 0xec, 0x00, 0xe8, 0x15, 0x79, 0xf4, 0xdd, 0x5c, 0x0f, 0x11, 0xe9, 0x12, 0xd7, 0xfb, 0x32, - 0xd5, 0x54, 0x04, 0xbb, 0x36, 0x5e, 0x7e, 0xee, 0x59, 0x93, 0x00, 0x72, 0x15, 0x41, 0x73, 0x30, - 0x46, 0x3b, 0x88, 0x8d, 0xa2, 0x82, 0xec, 0x94, 0x88, 0x24, 0xa7, 0x97, 0x4e, 0xb1, 0xf7, 0x90, - 0x4a, 0x52, 0xd9, 0x41, 0xb2, 0x1a, 0x38, 0x5d, 0xc2, 0x7c, 0x55, 0x29, 0xd6, 0x05, 0x90, 0x5c, - 0x46, 0x01, 0x29, 0x2d, 0x59, 0xd0, 0xf6, 0xfc, 0x3f, 0xc6, 0x1e, 0xab, 0x6b, 0xff, 0xe1, 0x48, - 0xed, 0xbe, 0x71, 0xc6, 0x81, 0x93, 0xa5, 0x6d, 0xeb, 0xf1, 0x12, 0x47, 0xb9, 0x71, 0x22, 0x78, - 0x57, 0x6d, 0xf2, 0xdf, 0xb1, 0xbf, 0xe3, 0x1a, 0xeb, 0xd8, 0xb5, 0x51, 0x75, 0xe2, 0x0d, 0xbb, - 0xf1, 0x21, 0x10, 0x54, 0x58, 0x95, 0x88, 0xac, 0x50, 0x62, 0xb1, 0x58, 0xa3, 0x10, 0x0e, 0x16, - 0x31, 0x41, 0x8a, 0x0d, 0x1c, 0x78, 0x40, 0x22, 0x14, 0x23, 0xb9, 0x7c, 0x66, 0xf5, 0x13, 0xc9, - 0x12, 0xfd, 0xb0, 0x68, 0xb8, 0xcc, 0xef, 0xc3, 0x00, 0xa0, 0x61, 0x46, 0xfb, 0x63, 0x37, 0xc1, - 0xef, 0x12, 0x62, 0x05, 0x37, 0x89, 0xf9, 0x75, 0x1d, 0x47, 0x08, 0x82, 0xe8, 0xad, 0xdd, 0xea, - 0xaa, 0xfe, 0x11, 0x2d, 0xdd, 0x4d, 0x9e, 0x08, 0x6b, 0x5b, 0xf1, 0x30, 0xa5, 0xb7, 0x96, 0x85, - 0xc0, 0xd3, 0x1a, 0xf4, 0x7d, 0x41, 0xe7, 0x80, 0xf7, 0x84, 0xc2, 0xa5, 0x8d, 0x2f, 0xc2, 0x83, - 0xb7, 0x77, 0x10, 0xd0, 0x56, 0x5b, 0x3e, 0x6e, 0x2b, 0x15, 0xbd, 0xe9, 0xf8, 0x28, 0x8b, 0x88, - 0x70, 0x43, 0x82, 0x83, 0x2c, 0x63, 0xfd, 0x96, 0x31, 0x03, 0x4c, 0x10, 0x4a, 0x37, 0x11, 0xc6, - 0xc5, 0xf5, 0x62, 0xba, 0x36, 0xa2, 0xfa, 0x3f, 0x4f, 0xd1, 0x4a, 0x9c, 0x10, 0xf8, 0x81, 0x21, - 0x41, 0x8a, 0xcc, 0x4c, 0xe1, 0x86, 0xf6, 0xb6, 0xda, 0x2d, 0x3b, 0x8e, 0xdc, 0x20, 0x11, 0x15, - 0x55, 0x55, 0x36, 0x33, 0x3c, 0x40, 0x44, 0x29, 0x15, 0x8a, 0xfd, 0xdd, 0x6b, 0x88, 0x1e, 0x5e, - 0x73, 0xdf, 0xe3, 0xe5, 0x9a, 0x93, 0x25, 0x6b, 0x17, 0x55, 0x5c, 0x4c, 0x15, 0x09, 0x15, 0xdf, - 0x24, 0x05, 0x32, 0xcc, 0x47, 0x0e, 0x39, 0x17, 0x7e, 0x10, 0x10, 0x30, 0xc2, 0x98, 0xb8, 0xba, - 0x8c, 0x29, 0xcf, 0xa9, 0xf8, 0x5e, 0x29, 0x8a, 0x62, 0x9e, 0x59, 0x05, 0xeb, 0x88, 0x12, 0x14, - 0x26, 0x6e, 0xa3, 0xed, 0x48, 0x01, 0xe7, 0xb8, 0xa7, 0x2c, 0x34, 0xb2, 0x1c, 0x0d, 0x1e, 0x18, - 0x27, 0xd0, 0xbf, 0x38, 0xf4, 0xe5, 0xbe, 0xe2, 0x21, 0x42, 0x8a, 0x3a, 0x88, 0x42, 0xa3, 0xfe, - 0xe0, 0xa9, 0x7c, 0x88, 0xe1, 0xdf, 0x66, 0x15, 0x44, 0xfe, 0x15, 0x68, 0x9c, 0x31, 0x10, 0xa5, - 0xac, 0x96, 0x6d, 0x64, 0x93, 0x85, 0x41, 0x33, 0xdd, 0xd9, 0x6c, 0x56, 0xfe, 0x73, 0xec, 0xb7, - 0xde, 0x24, 0x29, 0x0e, 0xe0, 0x54, 0x78, 0xe2, 0x30, 0xc6, 0x17, 0xbd, 0xf2, 0x20, 0x71, 0x8c, - 0xb0, 0x72, 0x5e, 0x7e, 0xde, 0x74, 0xe2, 0x44, 0x8e, 0x3d, 0x2a, 0x8a, 0xc5, 0x62, 0xb1, 0x5a, - 0xf4, 0xf1, 0x1f, 0x12, 0x2a, 0x5e, 0x5b, 0x8a, 0xdd, 0xc4, 0x8c, 0x0b, 0x78, 0x80, 0x70, 0x14, - 0x8d, 0xe1, 0xc8, 0x73, 0xa7, 0x80, 0x38, 0x51, 0x35, 0x48, 0xbb, 0xb9, 0x63, 0x27, 0x55, 0xfd, - 0xb8, 0x2a, 0x2b, 0x91, 0xde, 0x11, 0x02, 0x08, 0x28, 0xda, 0x6e, 0x7b, 0xba, 0x3b, 0xe2, 0x45, - 0x55, 0x55, 0x55, 0x55, 0x70, 0x8f, 0x89, 0x0c, 0x82, 0xce, 0xa2, 0xf9, 0x14, 0x6a, 0xd4, 0xab, - 0xe2, 0x42, 0x20, 0xb8, 0x8a, 0xaa, 0xb7, 0xbf, 0xf8, 0x90, 0xc8, 0x9b, 0x9f, 0x34, 0xa2, 0xb7, - 0xc4, 0x42, 0x91, 0x03, 0x87, 0xbc, 0x40, 0x0e, 0x12, 0x8a, 0xa7, 0xd7, 0x80, 0xfb, 0xbd, 0xb3, - 0x49, 0x6a, 0x07, 0x1c, 0x6a, 0x3a, 0xf1, 0xc9, 0x07, 0x56, 0x1e, 0xe5, 0x8a, 0x0c, 0xac, 0x79, - 0xc9, 0x3a, 0xf0, 0x56, 0x28, 0xe0, 0xf5, 0x1c, 0x77, 0x0e, 0x39, 0x71, 0x69, 0xa9, 0x64, 0xed, - 0xda, 0xe0, 0x82, 0x09, 0x8e, 0xee, 0xf9, 0x4a, 0x4b, 0x97, 0xfa, 0xf4, 0x31, 0xd1, 0x63, 0xdf, - 0x5e, 0xa8, 0x47, 0xe2, 0x41, 0x49, 0x1d, 0xf3, 0xe1, 0xf8, 0x93, 0x8b, 0x15, 0x76, 0xbb, 0x84, - 0x03, 0x3c, 0x4c, 0x93, 0x41, 0x7e, 0x24, 0x29, 0xb5, 0x4a, 0xcb, 0x62, 0xb1, 0x23, 0x9b, 0x8a, - 0xe1, 0x46, 0xa1, 0x2b, 0x07, 0x83, 0x9d, 0xe1, 0x91, 0x85, 0x55, 0x4f, 0xf4, 0xa8, 0xb8, 0xb8, - 0x93, 0x9a, 0x31, 0x5a, 0xa5, 0x77, 0x56, 0x64, 0xbb, 0x31, 0x31, 0x94, 0x79, 0xd6, 0x27, 0xf1, - 0xa6, 0x22, 0x1e, 0xad, 0x8c, 0x96, 0x78, 0xbe, 0x22, 0x14, 0x20, 0xa0, 0x62, 0x99, 0x66, 0x2f, - 0x19, 0x59, 0xb4, 0x1b, 0x31, 0x4c, 0x5c, 0x5c, 0x5e, 0x33, 0x72, 0xfa, 0xcb, 0x71, 0x10, 0x4d, - 0x27, 0x46, 0x0f, 0x5d, 0x7a, 0xea, 0xbf, 0xf8, 0x27, 0xb9, 0x6d, 0xc5, 0x1c, 0x57, 0x73, 0xdc, - 0x44, 0x28, 0x53, 0x28, 0xa1, 0xbf, 0xdb, 0xe5, 0xa5, 0x68, 0x66, 0xfb, 0xdd, 0xff, 0xf0, 0xa1, - 0x42, 0xed, 0x45, 0xa9, 0xb8, 0xd2, 0x45, 0xbb, 0x47, 0x97, 0x56, 0xd4, 0xb1, 0x96, 0xc5, 0x18, - 0xac, 0xb6, 0x5b, 0x71, 0x5b, 0xf1, 0x3e, 0x0a, 0x44, 0x05, 0x0a, 0xaa, 0xab, 0x4a, 0xd2, 0x71, - 0xce, 0xb1, 0x58, 0xad, 0xc5, 0x7d, 0xc1, 0x00, 0x80, 0x52, 0x47, 0x9c, 0x82, 0x72, 0x0e, 0xe6, - 0xcb, 0xde, 0xfc, 0x48, 0x64, 0x17, 0x10, 0x56, 0x2b, 0xef, 0xaa, 0x3b, 0xe2, 0x07, 0xdd, 0xca, - 0xc5, 0xa8, 0xba, 0xa8, 0xb8, 0xb8, 0xb8, 0xbe, 0x24, 0x48, 0x40, 0x5b, 0x5a, 0xbd, 0xb5, 0x51, - 0x71, 0x71, 0x7e, 0x27, 0xc4, 0x05, 0x05, 0x2c, 0x47, 0x37, 0xb8, 0x53, 0x85, 0x57, 0xcb, 0xd9, - 0xe2, 0x77, 0xd2, 0xf9, 0x43, 0x12, 0x24, 0x12, 0x95, 0x6a, 0xa9, 0x25, 0x69, 0xf8, 0x42, 0x0a, - 0x4b, 0x70, 0x5b, 0xcb, 0x37, 0x04, 0xa0, 0x00, 0x13, 0xc0, 0xb6, 0x5b, 0x3d, 0xa1, 0xe3, 0x41, - 0x00, 0xd0, 0xe0, 0x68, 0x44, 0x38, 0xf0, 0x42, 0x0e, 0x44, 0x90, 0xf7, 0xd9, 0xce, 0x58, 0xac, - 0x56, 0x2b, 0x15, 0xe1, 0x10, 0xc8, 0x52, 0x9b, 0xe2, 0x07, 0xa4, 0x00, 0x1a, 0x05, 0x67, 0x02, - 0xa3, 0x36, 0x26, 0x2b, 0x46, 0xa6, 0x0a, 0xef, 0xfc, 0x44, 0x68, 0xe2, 0xa7, 0xcc, 0x79, 0x65, - 0xe9, 0x03, 0xde, 0x13, 0x93, 0x8a, 0xb7, 0xf6, 0xa4, 0xff, 0x64, 0x1f, 0xbf, 0x1b, 0xef, 0xf8, - 0x62, 0x1e, 0x28, 0xac, 0x57, 0x4e, 0x28, 0xc4, 0x8e, 0x1b, 0x1f, 0xaa, 0x77, 0x9b, 0xb3, 0x86, - 0x7a, 0xd4, 0x6d, 0x13, 0xaf, 0xf8, 0x88, 0x22, 0xcd, 0xf8, 0xbe, 0x5e, 0xaa, 0x16, 0xe8, 0x5f, - 0x7d, 0x62, 0x93, 0x82, 0xa3, 0x2e, 0xbc, 0x43, 0xcb, 0x78, 0xba, 0xc5, 0xc2, 0x00, 0xa4, 0x2d, - 0x10, 0xed, 0x93, 0xaa, 0xfc, 0x73, 0x15, 0xb1, 0x43, 0xf0, 0x20, 0x12, 0xb9, 0x62, 0x0a, 0x2f, - 0xba, 0xbf, 0xe0, 0x90, 0xae, 0xee, 0xef, 0xf0, 0x5a, 0x4a, 0xaa, 0xbd, 0xdd, 0xfc, 0x30, 0x30, - 0xda, 0xa8, 0x87, 0x96, 0x36, 0xf2, 0xd8, 0xb9, 0xb1, 0x2f, 0xc9, 0xbc, 0x48, 0x50, 0x4d, 0xe7, - 0x51, 0x5b, 0x54, 0xdd, 0x5a, 0x93, 0x32, 0x42, 0xd9, 0x3d, 0xbf, 0x08, 0x04, 0x07, 0x1e, 0x64, - 0x56, 0x21, 0xc1, 0xb5, 0x27, 0x34, 0x7f, 0x26, 0x35, 0x0a, 0xcb, 0x18, 0xb8, 0x9e, 0x62, 0x02, - 0x01, 0x41, 0x07, 0x7b, 0x31, 0x9c, 0x90, 0x6a, 0xa6, 0x19, 0x00, 0x05, 0x34, 0x5a, 0xd1, 0xa8, - 0x29, 0x6d, 0x31, 0x59, 0xb9, 0x29, 0x59, 0x24, 0x50, 0x87, 0xb9, 0xe2, 0x41, 0x0e, 0x57, 0xf7, - 0xc1, 0x5f, 0x77, 0x77, 0x77, 0x77, 0xb7, 0xdf, 0x05, 0x42, 0x5c, 0x56, 0x70, 0x80, 0x37, 0x15, - 0x8a, 0xde, 0x5f, 0x15, 0xfc, 0xf1, 0x21, 0x43, 0x0a, 0xdc, 0x56, 0x2b, 0xbb, 0xbd, 0xbb, 0xba, - 0xd5, 0x5f, 0x88, 0x12, 0x0a, 0xe3, 0x29, 0x8d, 0x4a, 0x62, 0xd7, 0xfd, 0xbe, 0xbd, 0xc5, 0x77, - 0xae, 0x11, 0x0c, 0x82, 0xc2, 0xbb, 0xe9, 0x89, 0x48, 0x26, 0x51, 0x9a, 0x8c, 0xdc, 0x57, 0xde, - 0x20, 0x15, 0x11, 0xdd, 0xdc, 0xf9, 0x9d, 0x54, 0x5d, 0xf8, 0x64, 0x40, 0x2e, 0xa6, 0x76, 0x0c, - 0xaa, 0xd5, 0x7a, 0xf8, 0x26, 0x3b, 0xbd, 0xc4, 0x73, 0x8b, 0xbf, 0x12, 0x10, 0x17, 0x55, 0x55, - 0x5d, 0x71, 0x02, 0x48, 0x29, 0x56, 0xb8, 0x88, 0x2c, 0x28, 0xc8, 0xc8, 0xbf, 0x23, 0xdc, 0xe1, - 0xdc, 0x4a, 0xdc, 0xb7, 0xdd, 0xfe, 0x14, 0xdb, 0xbb, 0xbb, 0xbb, 0xa5, 0x74, 0x9d, 0xdd, 0xef, - 0x85, 0x58, 0xb0, 0x00, 0xe1, 0x92, 0x0e, 0xce, 0xda, 0x83, 0xfc, 0xde, 0xde, 0xde, 0xde, 0x9a, - 0x71, 0xa7, 0x5e, 0x6e, 0x2f, 0x7b, 0xf0, 0x88, 0x44, 0x99, 0x8b, 0xa4, 0x88, 0xe3, 0x04, 0xfc, - 0xe6, 0x8d, 0xab, 0x32, 0xb9, 0xc2, 0x21, 0x91, 0x91, 0x58, 0xac, 0x56, 0x2b, 0x97, 0xe7, 0x8e, - 0x3f, 0x1d, 0x92, 0x2b, 0x8a, 0xf8, 0x64, 0x10, 0x8c, 0x25, 0xa3, 0x7d, 0x77, 0x77, 0xdd, 0xdd, - 0xf0, 0x84, 0x2a, 0x29, 0x45, 0xd7, 0x93, 0x62, 0x07, 0x81, 0x94, 0x34, 0x46, 0x83, 0xbe, 0xcf, - 0xf8, 0x7c, 0xe5, 0xc5, 0x38, 0x58, 0xc0, 0xd1, 0x57, 0x37, 0x09, 0x00, 0x0e, 0x0c, 0xc2, 0x69, - 0x25, 0x3d, 0xf0, 0x88, 0x8e, 0x2a, 0x53, 0xf6, 0x0e, 0x34, 0xc6, 0xca, 0xf9, 0xfa, 0x2f, 0x42, - 0x5d, 0x19, 0xd5, 0xd7, 0xb8, 0x98, 0x20, 0xad, 0xe3, 0x7c, 0xd6, 0x17, 0xa6, 0xb5, 0x8c, 0x5d, - 0x45, 0x30, 0x24, 0x87, 0xd2, 0x07, 0xd3, 0x64, 0x5b, 0xfc, 0x4c, 0x16, 0x95, 0xdd, 0xdd, 0xdc, - 0xb0, 0xb7, 0xfa, 0xbf, 0xc2, 0x17, 0x77, 0xdd, 0xee, 0xae, 0x6f, 0x89, 0x12, 0x42, 0x55, 0x57, - 0x89, 0x2d, 0xee, 0xf8, 0x91, 0x20, 0x94, 0xe2, 0x3f, 0x17, 0xbd, 0xdd, 0xf8, 0x90, 0x60, 0x14, - 0xee, 0x54, 0x85, 0x81, 0xee, 0xbf, 0x5d, 0x01, 0xaf, 0x55, 0xf1, 0x46, 0x0f, 0x3e, 0x58, 0x00, - 0x31, 0xd8, 0xfe, 0x18, 0x85, 0x23, 0xa8, 0x72, 0x5a, 0xc5, 0xc9, 0xa3, 0x4a, 0x56, 0x90, 0x56, - 0x16, 0xe4, 0x3a, 0xf9, 0xcf, 0x7f, 0x28, 0x55, 0x1f, 0x12, 0x5d, 0x0a, 0xc2, 0x5e, 0x51, 0xf0, - 0x51, 0x3b, 0x0d, 0xda, 0xa6, 0x2e, 0xd8, 0xca, 0xbf, 0x10, 0x19, 0x05, 0x7a, 0xbc, 0x56, 0x2b, - 0x2d, 0x8a, 0xef, 0x68, 0x7d, 0xc4, 0x08, 0x08, 0xf5, 0x75, 0xaa, 0xcb, 0xc4, 0x3c, 0xb7, 0xc4, - 0x82, 0xaa, 0xa8, 0xb9, 0x3b, 0x1b, 0xc6, 0x20, 0x78, 0xac, 0xb1, 0x8a, 0xc5, 0x1d, 0x1d, 0xe1, - 0x10, 0x38, 0x05, 0x0e, 0x78, 0x0b, 0x02, 0x83, 0x3c, 0x1e, 0xfc, 0x0b, 0x8a, 0xbb, 0x2b, 0x2c, - 0x0c, 0x4b, 0xd8, 0x3d, 0x84, 0x37, 0xed, 0xda, 0x73, 0x68, 0xf2, 0x8c, 0x90, 0x28, 0x14, 0x1d, - 0x59, 0x5d, 0x02, 0x4a, 0x44, 0x5f, 0x08, 0x42, 0x86, 0x12, 0xf5, 0xb5, 0x55, 0x5d, 0xcf, 0x7e, - 0xab, 0xa3, 0xb5, 0xc7, 0x95, 0x45, 0xd5, 0x55, 0x55, 0x55, 0x45, 0xd7, 0x12, 0x24, 0x13, 0x45, - 0xd5, 0x55, 0x55, 0x54, 0x71, 0xff, 0x04, 0x83, 0x2f, 0x7f, 0xf1, 0x30, 0xa0, 0xb2, 0x7d, 0x21, - 0x58, 0xac, 0x51, 0x8a, 0xc5, 0x7b, 0x8a, 0x31, 0x58, 0xac, 0x56, 0x2b, 0xa3, 0xbc, 0x44, 0x29, - 0x3f, 0x2c, 0x67, 0xa6, 0x27, 0x30, 0x3f, 0x57, 0x5a, 0x51, 0x3d, 0x35, 0xc5, 0xe2, 0x42, 0xc6, - 0x3c, 0x23, 0x93, 0xd3, 0x14, 0x4d, 0xca, 0x06, 0x1f, 0xf8, 0x5a, 0x64, 0x8e, 0xfc, 0x29, 0x6e, - 0x2f, 0x41, 0x44, 0xf3, 0x13, 0x92, 0x09, 0xc9, 0x04, 0xb6, 0x5b, 0x0e, 0xeb, 0x8e, 0x98, 0xd6, - 0x56, 0x4b, 0x8a, 0xf4, 0x71, 0xf1, 0x23, 0x27, 0xb0, 0x7f, 0x7f, 0x25, 0x59, 0x72, 0xf4, 0xcf, - 0x7a, 0x21, 0x4a, 0x59, 0xe3, 0x0a, 0xcd, 0xd9, 0xfc, 0x48, 0x95, 0x7e, 0x11, 0x0c, 0x82, 0x2b, - 0xc8, 0x47, 0x5c, 0x48, 0x44, 0x46, 0xb5, 0x26, 0x13, 0x35, 0xc3, 0x10, 0x54, 0x2a, 0x54, 0xe1, - 0xf2, 0xab, 0xac, 0xe1, 0xe7, 0x3a, 0x1d, 0x24, 0xae, 0x1f, 0xca, 0x2b, 0x25, 0x52, 0x08, 0x8e, - 0x1e, 0x1b, 0x2b, 0xa3, 0x1a, 0x21, 0x0c, 0xa0, 0xee, 0x90, 0x20, 0xb3, 0x95, 0xc1, 0x50, 0x25, - 0xd8, 0xfc, 0x25, 0xd7, 0xa2, 0x62, 0x44, 0x0d, 0xe2, 0xad, 0x5b, 0x17, 0x58, 0x84, 0x82, 0x29, - 0x88, 0xf0, 0x09, 0x6b, 0x15, 0xf3, 0x39, 0x3e, 0x3b, 0x1d, 0x87, 0x70, 0x08, 0x5a, 0x68, 0xef, - 0xff, 0x7b, 0xdf, 0xd1, 0x5f, 0x89, 0x89, 0xbb, 0xbb, 0xbb, 0xbb, 0xf1, 0x3f, 0x62, 0x1d, 0xe7, - 0x97, 0x0c, 0x8b, 0x13, 0xb6, 0x9c, 0xbd, 0x6f, 0x0c, 0x06, 0x47, 0x45, 0x74, 0xde, 0xea, 0xf8, - 0xba, 0xfc, 0x44, 0xb7, 0x67, 0xf1, 0x8e, 0xbf, 0x19, 0xe3, 0xdb, 0xf0, 0xc8, 0x44, 0x15, 0x44, - 0x8f, 0x6e, 0x16, 0xcb, 0x67, 0x8b, 0x07, 0x8a, 0x84, 0x2f, 0xcf, 0xf3, 0xae, 0xb8, 0x44, 0x43, - 0x21, 0x6c, 0x4b, 0xdb, 0xef, 0x08, 0x42, 0x87, 0x12, 0xb2, 0x89, 0x51, 0x78, 0x30, 0x55, 0xd4, - 0x23, 0x19, 0x75, 0x45, 0x63, 0x08, 0x51, 0x17, 0x0f, 0x7b, 0xf0, 0x7c, 0x77, 0x0d, 0x23, 0x80, - 0x5a, 0xc7, 0xea, 0xe3, 0x9d, 0x7a, 0xd6, 0xee, 0x7f, 0xd2, 0xae, 0xba, 0xdb, 0xb7, 0x6e, 0xb8, - 0x40, 0x14, 0x85, 0x0c, 0x28, 0xeb, 0x10, 0xe1, 0x33, 0x95, 0x9f, 0xfa, 0xbf, 0x2e, 0x44, 0xf0, - 0x8c, 0x16, 0x19, 0x78, 0x8f, 0x7e, 0x11, 0x84, 0xe5, 0xb1, 0x46, 0xee, 0xaa, 0xab, 0xc4, 0x88, - 0xd6, 0xaa, 0xaa, 0xbc, 0x4a, 0xf7, 0x88, 0x66, 0xaa, 0xaf, 0x85, 0x32, 0xf9, 0x19, 0x77, 0xb7, - 0x4e, 0xf7, 0x77, 0x2c, 0x2f, 0xc2, 0x22, 0x42, 0x85, 0x51, 0x5b, 0x18, 0xa3, 0x6d, 0x33, 0xfb, - 0x83, 0xdf, 0x10, 0xfa, 0xcb, 0x68, 0x85, 0x1b, 0x63, 0xe3, 0xbe, 0x0c, 0x02, 0x85, 0x17, 0x58, - 0x41, 0x07, 0x6c, 0x39, 0x4a, 0x3e, 0x80, 0xba, 0xf3, 0x69, 0xe4, 0x83, 0xaa, 0x54, 0x19, 0x7b, - 0x32, 0x71, 0x4d, 0x24, 0x1f, 0x8d, 0xd4, 0x71, 0xd8, 0x7c, 0xef, 0x0f, 0x60, 0x01, 0xae, 0x15, - 0x7e, 0x69, 0xbd, 0xd1, 0x1a, 0xf8, 0x90, 0xa7, 0x02, 0x60, 0x9f, 0x8c, 0x36, 0x0c, 0xf0, 0x72, - 0xc6, 0x29, 0xf5, 0x10, 0x12, 0x10, 0xb8, 0x6a, 0xeb, 0x76, 0xe2, 0x83, 0x6f, 0x3d, 0xc3, 0x9e, - 0x5b, 0x1f, 0x1c, 0x78, 0x98, 0x2b, 0xa6, 0x64, 0xe9, 0x1e, 0xfe, 0x33, 0xd8, 0x16, 0xcb, 0x62, - 0xb1, 0x5b, 0xe3, 0xe3, 0x8f, 0x13, 0x04, 0x77, 0x71, 0x5b, 0xa3, 0x8f, 0x08, 0x89, 0xe1, 0x90, - 0x62, 0x08, 0xea, 0xaa, 0xbd, 0xe1, 0x91, 0x04, 0x55, 0x55, 0x24, 0x3f, 0xc1, 0x08, 0xc1, 0x57, - 0x8d, 0xf8, 0xb6, 0x96, 0xd5, 0xbd, 0x32, 0x61, 0x61, 0xe4, 0xcf, 0x0d, 0x89, 0xd9, 0x28, 0x1a, - 0xda, 0x94, 0x0d, 0xc3, 0xf3, 0xa7, 0xe5, 0xea, 0xff, 0x57, 0xbe, 0xb1, 0x7d, 0x5e, 0xba, 0xbc, - 0xfd, 0x5e, 0x68, 0x91, 0x23, 0x48, 0x4e, 0x0e, 0x97, 0x4c, 0x76, 0xe2, 0x48, 0x80, 0x83, 0x5c, - 0xb4, 0x64, 0x5a, 0xc3, 0xb4, 0xa1, 0x03, 0x6a, 0x36, 0x3f, 0xe4, 0xa2, 0x6d, 0x62, 0x16, 0x71, - 0x02, 0xf6, 0x15, 0x91, 0x08, 0xa4, 0x19, 0xaf, 0xf6, 0xfe, 0x24, 0x14, 0x94, 0x3b, 0x7a, 0x4b, - 0x90, 0xff, 0xe0, 0xff, 0x84, 0x68, 0x47, 0x5f, 0x33, 0x6a, 0xc7, 0xbf, 0x75, 0x23, 0xd7, 0x7e, - 0x24, 0x43, 0xbb, 0xbb, 0xf9, 0x6e, 0xf7, 0xf3, 0x6e, 0xff, 0x15, 0xaa, 0xaa, 0xaa, 0xaa, 0x89, - 0x10, 0x12, 0xbb, 0xbb, 0xe3, 0x52, 0xbc, 0x14, 0x88, 0x18, 0x77, 0x8a, 0xdc, 0x2a, 0x0f, 0x8b, - 0x7c, 0xff, 0xba, 0xcf, 0xfc, 0x22, 0x09, 0xaf, 0x78, 0xa3, 0x14, 0x62, 0x8c, 0x48, 0xb0, 0x5b, - 0xe0, 0xae, 0xda, 0xb6, 0xa5, 0x60, 0x7b, 0x60, 0x1e, 0xd8, 0x6b, 0x06, 0x22, 0x33, 0xea, 0xaf, - 0xfe, 0x10, 0x05, 0x24, 0x77, 0x2e, 0xb3, 0x45, 0x62, 0x5c, 0xd6, 0xf7, 0x7e, 0x3b, 0xc4, 0xc2, - 0x92, 0xc6, 0x5b, 0x15, 0xbd, 0xde, 0xaa, 0xaa, 0xaa, 0xaa, 0xfc, 0x48, 0x97, 0x77, 0x77, 0xe1, - 0x1a, 0xef, 0x55, 0x5f, 0x17, 0xa6, 0x92, 0x71, 0x96, 0xcd, 0x5c, 0x40, 0x92, 0x65, 0xcd, 0xbf, - 0x89, 0x82, 0x4c, 0xb8, 0xf7, 0xdc, 0x08, 0x00, 0xc0, 0x28, 0x24, 0x26, 0x8f, 0x50, 0x4e, 0x09, - 0x81, 0x51, 0x35, 0x99, 0x14, 0x77, 0xc3, 0xfc, 0x77, 0xeb, 0x72, 0x3d, 0xed, 0xc5, 0xc0, 0x80, - 0x8e, 0xf8, 0x48, 0xc8, 0x58, 0x03, 0x26, 0x04, 0xc1, 0xb9, 0x30, 0x8c, 0x1c, 0xc7, 0x1c, 0x38, - 0xa0, 0x8b, 0x81, 0xa7, 0xb9, 0xe3, 0x92, 0xea, 0x14, 0x9c, 0x46, 0x97, 0x4c, 0x49, 0xf9, 0x28, - 0x98, 0xe7, 0x45, 0xa7, 0xa1, 0xd6, 0x6b, 0x3a, 0xbc, 0xf8, 0xc2, 0xd8, 0x63, 0xd4, 0xb0, 0x5e, - 0xc9, 0xf0, 0x06, 0x50, 0x75, 0x04, 0x78, 0xd4, 0x89, 0x57, 0xa6, 0x9f, 0x89, 0x85, 0x25, 0x8d, - 0xde, 0x14, 0x8f, 0x63, 0x15, 0xc5, 0x65, 0x8c, 0xb6, 0x5b, 0x78, 0xae, 0xe3, 0xe3, 0x83, 0xc4, - 0x89, 0x0a, 0x46, 0xf2, 0x6c, 0x0b, 0x76, 0x5c, 0x28, 0x80, 0x96, 0xdf, 0x8e, 0xee, 0xef, 0x7a, - 0x38, 0xf1, 0x02, 0x09, 0x6d, 0x5b, 0x1a, 0x31, 0xeb, 0xfe, 0x10, 0x8c, 0xaa, 0xaa, 0xa8, 0xba, - 0xaa, 0xa8, 0xba, 0xd6, 0xfe, 0x5d, 0x45, 0xc5, 0xfc, 0x22, 0x22, 0x24, 0x60, 0x99, 0xcf, 0xaa, - 0xaa, 0xeb, 0xc2, 0x11, 0xa4, 0x25, 0x52, 0x8b, 0x67, 0x06, 0x0e, 0xd3, 0xf1, 0x1e, 0x5b, 0x3e, - 0xc1, 0xf2, 0x8a, 0xf1, 0x78, 0x9b, 0x00, 0x97, 0x4c, 0x2e, 0x11, 0xe8, 0x67, 0x02, 0x91, 0x83, - 0xe3, 0x3a, 0x12, 0xd1, 0x90, 0x88, 0x91, 0xa6, 0x3a, 0x92, 0x69, 0xd4, 0xb1, 0x4b, 0x62, 0x8d, - 0xde, 0xce, 0xa3, 0x73, 0x71, 0x4e, 0x77, 0xb9, 0xa5, 0xc4, 0x30, 0x85, 0x54, 0x4f, 0xe2, 0x46, - 0xcd, 0xdb, 0xe1, 0x73, 0xeb, 0x0c, 0x6d, 0x50, 0xef, 0xc1, 0xbb, 0xbc, 0xdd, 0xe4, 0x47, 0x3c, - 0x6e, 0x66, 0xa3, 0xda, 0x24, 0x73, 0x2d, 0x2f, 0xff, 0x10, 0x24, 0x17, 0x55, 0xd3, 0x83, 0xea, - 0xff, 0xf1, 0x01, 0x11, 0x2e, 0x2b, 0x78, 0x87, 0xb9, 0x6c, 0x56, 0x33, 0x95, 0x2c, 0x43, 0xf8, - 0x92, 0xdd, 0xed, 0xfd, 0x47, 0xdf, 0x14, 0x45, 0x55, 0xe4, 0xfe, 0x25, 0x51, 0xdf, 0x12, 0x11, - 0x23, 0xdd, 0xe2, 0xf1, 0x7d, 0x57, 0xc7, 0x8b, 0x15, 0xbb, 0x9e, 0x96, 0xf6, 0xe2, 0xb7, 0x77, - 0xf0, 0x4d, 0x7b, 0x77, 0x15, 0xbb, 0xba, 0x38, 0x3f, 0x04, 0xd7, 0xde, 0xc4, 0x45, 0x2d, 0xe5, - 0xfc, 0x48, 0x95, 0x4e, 0x38, 0x91, 0x2a, 0xce, 0x26, 0x2a, 0xdd, 0xba, 0xa9, 0x94, 0x4b, 0xc4, - 0x08, 0x35, 0x55, 0x6f, 0x12, 0x90, 0x7c, 0x7d, 0xdf, 0x94, 0x60, 0xd9, 0x4c, 0x77, 0x77, 0x7e, - 0x24, 0x97, 0x77, 0x7c, 0x4c, 0x28, 0x57, 0x15, 0xb1, 0x0a, 0xda, 0x0b, 0x2a, 0x92, 0x95, 0x2b, - 0x1c, 0xec, 0x6c, 0x56, 0x2b, 0x7e, 0x24, 0x10, 0x82, 0xd9, 0x6c, 0xf1, 0x83, 0xbf, 0x05, 0x66, - 0x94, 0x43, 0x95, 0xc3, 0x20, 0x84, 0x29, 0x2c, 0x18, 0x54, 0x70, 0x58, 0x33, 0xdf, 0x2a, 0x84, - 0xeb, 0x58, 0x2c, 0x62, 0x56, 0x0e, 0x4c, 0x58, 0x71, 0xd6, 0x21, 0xe0, 0xef, 0xc9, 0x15, 0x1f, - 0x1c, 0x7e, 0x0a, 0x67, 0x29, 0x09, 0x91, 0xc8, 0x72, 0x90, 0xb7, 0x77, 0x72, 0xd8, 0xac, 0xb1, - 0x8a, 0xc7, 0xdf, 0x04, 0x57, 0x77, 0x74, 0x71, 0xf8, 0x21, 0xbb, 0xbb, 0xa3, 0xbe, 0x10, 0x1f, - 0x8d, 0x53, 0x3a, 0xdb, 0x26, 0x48, 0xf6, 0x51, 0x61, 0x00, 0xc0, 0x50, 0xa4, 0xf3, 0x2b, 0x5a, - 0x5c, 0xf4, 0x7e, 0xcc, 0xf7, 0x84, 0x7c, 0x48, 0x46, 0xa2, 0xea, 0xa2, 0xea, 0xab, 0x17, 0x5e, - 0x10, 0x8d, 0x1c, 0x98, 0x79, 0x1b, 0xe7, 0x38, 0x36, 0xfc, 0x04, 0x0f, 0x38, 0x52, 0x38, 0xac, - 0x56, 0xea, 0x6e, 0x7c, 0x19, 0xd7, 0xc5, 0x6d, 0x3d, 0xff, 0x84, 0x23, 0x70, 0x6f, 0xa6, 0x0e, - 0x97, 0x07, 0x37, 0x39, 0x64, 0xa9, 0x54, 0x05, 0xd3, 0x59, 0x46, 0xbf, 0x14, 0x89, 0x1a, 0x12, - 0x70, 0x70, 0x3e, 0xb3, 0xb5, 0x46, 0xad, 0x86, 0xcb, 0xc5, 0x74, 0x76, 0x57, 0x57, 0x4d, 0xd5, - 0xd5, 0xd5, 0xca, 0xe0, 0x9c, 0x97, 0xba, 0x1b, 0xc0, 0xbd, 0x34, 0x9f, 0xc4, 0x82, 0x93, 0x17, - 0xd6, 0xdf, 0x5c, 0x6e, 0xfb, 0x2c, 0x6f, 0x7e, 0x20, 0x32, 0x09, 0x3a, 0xab, 0xf8, 0x90, 0x90, - 0x91, 0xfb, 0x85, 0xbb, 0x79, 0x3c, 0x9f, 0xc1, 0x5c, 0xbe, 0xed, 0x8d, 0xb1, 0x1e, 0x7e, 0xd6, - 0x62, 0xe2, 0xea, 0xdc, 0x48, 0x84, 0x74, 0x77, 0xc4, 0xfc, 0x11, 0x13, 0x55, 0xef, 0x10, 0xbd, - 0xe2, 0x41, 0x0d, 0x6a, 0xaf, 0xf1, 0x44, 0xdd, 0xdd, 0xdd, 0xf1, 0x22, 0x01, 0x2d, 0xef, 0xdd, - 0xff, 0xf0, 0x52, 0x7b, 0xdd, 0xdf, 0x4e, 0x9f, 0x7a, 0xe6, 0xaa, 0xaa, 0xac, 0x40, 0x46, 0xb5, - 0xda, 0x6e, 0xaa, 0xa2, 0xef, 0x12, 0x6b, 0xbd, 0xfc, 0x65, 0xdd, 0xdd, 0xf7, 0x7d, 0xee, 0xff, - 0x18, 0x57, 0x2d, 0xbb, 0x8a, 0xdd, 0xce, 0xa1, 0xcf, 0x01, 0x5d, 0xd9, 0x6d, 0xdf, 0xc1, 0x2c, - 0x56, 0xd2, 0x0d, 0xd8, 0xad, 0xdd, 0xdf, 0xe0, 0xab, 0x75, 0x96, 0xcb, 0x18, 0x84, 0x20, 0x0d, - 0x8a, 0xc5, 0x6e, 0xe3, 0xee, 0x20, 0x40, 0xca, 0x21, 0x5f, 0x7b, 0xbb, 0xbb, 0xb6, 0xb5, 0x5c, - 0x57, 0x55, 0x51, 0x75, 0x17, 0xc4, 0x84, 0x42, 0x52, 0xf5, 0x55, 0x55, 0x17, 0x5c, 0x22, 0x24, - 0x4d, 0x75, 0x55, 0x55, 0x5c, 0x44, 0x12, 0x11, 0x6a, 0xe5, 0x4e, 0x24, 0x10, 0x04, 0x0a, 0x66, - 0x37, 0xd4, 0x57, 0xaa, 0xae, 0x19, 0x04, 0x20, 0xaa, 0x25, 0xc2, 0xa9, 0xb2, 0xf6, 0xc1, 0x9f, - 0x35, 0xbb, 0xbf, 0x12, 0x08, 0x46, 0x8c, 0x3e, 0xc6, 0x0e, 0xdc, 0x1f, 0x71, 0x3e, 0x79, 0xc2, - 0xaa, 0x40, 0x3c, 0xba, 0x9f, 0x62, 0xc4, 0x51, 0xd4, 0xad, 0x56, 0x2b, 0x6a, 0x33, 0x35, 0x16, - 0xd8, 0xae, 0xfe, 0x27, 0xa3, 0xb1, 0x19, 0xd4, 0x7d, 0xc4, 0x84, 0x46, 0x0a, 0x17, 0x97, 0x1c, - 0x1d, 0xfd, 0x82, 0x7d, 0x25, 0x46, 0x52, 0xf7, 0xac, 0x4e, 0x0c, 0xcd, 0xd8, 0x68, 0x62, 0x60, - 0xac, 0xe0, 0x20, 0xff, 0x6e, 0x13, 0xbf, 0xef, 0x58, 0x71, 0xa6, 0xea, 0xbb, 0xbb, 0xbb, 0x91, - 0xbe, 0xbd, 0x5c, 0x22, 0x41, 0x70, 0xd4, 0x62, 0x9e, 0xf7, 0xd6, 0x3c, 0xbe, 0x10, 0x1b, 0x2a, - 0x2f, 0x56, 0x0d, 0x70, 0x00, 0x14, 0x96, 0x0d, 0xff, 0x17, 0x77, 0x77, 0x1e, 0xa3, 0x59, 0xf8, - 0x9b, 0xbb, 0xbf, 0x13, 0x5f, 0xf1, 0x35, 0xff, 0xc1, 0x15, 0x54, 0x5d, 0x78, 0xe3, 0xc4, 0x42, - 0x9d, 0x53, 0x5a, 0xd4, 0x8c, 0x5b, 0x95, 0x5f, 0x71, 0x22, 0x41, 0x61, 0x9d, 0x8e, 0xc6, 0x2e, - 0xa2, 0xe2, 0xe5, 0xfe, 0xbd, 0x5c, 0x14, 0x14, 0xcc, 0x19, 0x83, 0x30, 0xe6, 0x15, 0x65, 0x72, - 0xf1, 0x00, 0xb6, 0x2e, 0xa8, 0x1d, 0x54, 0x5d, 0x5f, 0xe2, 0x48, 0xaa, 0xab, 0x5a, 0xae, 0x11, - 0x3d, 0xdc, 0x56, 0xee, 0xee, 0xee, 0x51, 0x83, 0x7e, 0x14, 0xb8, 0xae, 0xe2, 0xb1, 0x58, 0xa3, - 0x12, 0xf7, 0x7b, 0x8a, 0xcb, 0x18, 0xac, 0x56, 0x8e, 0xfc, 0x65, 0xde, 0xdc, 0x56, 0x2b, 0x15, - 0x8a, 0xdd, 0xde, 0xef, 0x7f, 0x05, 0xb7, 0x71, 0x5b, 0x8a, 0xdd, 0xdd, 0x1c, 0x6b, 0x9a, 0xaa, - 0xab, 0xe0, 0x86, 0xef, 0x74, 0x77, 0xe3, 0xab, 0x55, 0xaa, 0xea, 0xab, 0x89, 0x12, 0x14, 0x3b, - 0x4a, 0x31, 0x51, 0x78, 0xb8, 0xb8, 0x7c, 0xfc, 0x5e, 0xea, 0x4a, 0xac, 0x8b, 0xaa, 0xa5, 0xf8, - 0xe3, 0x2a, 0xaa, 0xbb, 0x73, 0x75, 0x55, 0x5f, 0x04, 0x35, 0x59, 0x58, 0xb8, 0x46, 0x38, 0x89, - 0x2e, 0xaa, 0x2e, 0xba, 0xaf, 0x08, 0x84, 0x62, 0xe2, 0xea, 0x2f, 0x7b, 0x8b, 0xaa, 0xac, 0x3a, - 0xc5, 0x80, 0x32, 0x80, 0xb7, 0x9f, 0x61, 0x0f, 0xcf, 0x6d, 0xb6, 0xdb, 0xa6, 0x28, 0x2c, 0x51, - 0x69, 0x8b, 0x62, 0xad, 0xb3, 0xd7, 0xbf, 0xf1, 0x20, 0x84, 0x16, 0x0e, 0x2e, 0xd2, 0x95, 0xa3, - 0x75, 0x57, 0x05, 0xc5, 0xd7, 0x2c, 0xe2, 0xe5, 0x9e, 0xfe, 0x24, 0x13, 0x78, 0xf5, 0xdc, 0x54, - 0x8b, 0x0c, 0x78, 0x5d, 0xca, 0x90, 0xa6, 0x24, 0x6c, 0xf9, 0x43, 0x17, 0x90, 0xe4, 0x76, 0x82, - 0xea, 0x4c, 0x91, 0xe5, 0x29, 0x78, 0x25, 0xa6, 0x11, 0x02, 0x42, 0x00, 0x83, 0xd9, 0x32, 0x64, - 0x2f, 0xf8, 0x81, 0x23, 0x60, 0xb5, 0x34, 0x95, 0xd2, 0x57, 0x49, 0xfb, 0xcf, 0x78, 0xbe, 0x67, - 0x6f, 0x83, 0xde, 0xee, 0x98, 0x2f, 0xcd, 0x82, 0xe7, 0xf0, 0x37, 0xd2, 0x58, 0xb1, 0x53, 0x5f, - 0xc4, 0x88, 0x5e, 0xae, 0xce, 0xee, 0xef, 0x88, 0x10, 0x0b, 0x04, 0x03, 0xb7, 0x23, 0x28, 0xb2, - 0x53, 0xce, 0x2b, 0x8a, 0xcf, 0x07, 0x75, 0x79, 0x16, 0x95, 0x78, 0x81, 0x87, 0x9a, 0x39, 0x4b, - 0xf3, 0xb7, 0x35, 0x3c, 0x43, 0x21, 0x83, 0x39, 0xa0, 0xff, 0x35, 0x80, 0x02, 0x4d, 0xa7, 0x44, - 0x48, 0x6b, 0xa1, 0x95, 0x75, 0x9a, 0xc9, 0xf8, 0x40, 0x28, 0x7d, 0xd5, 0x37, 0x3d, 0x04, 0xa4, - 0x12, 0xd8, 0xda, 0xb3, 0x1f, 0x8e, 0xcb, 0x15, 0xdb, 0x8f, 0xb8, 0x81, 0x3f, 0x5f, 0xfc, 0x11, - 0xdc, 0x56, 0xef, 0xff, 0x84, 0xaa, 0xaa, 0xa9, 0xb6, 0x5f, 0x5f, 0xa3, 0x77, 0x88, 0x04, 0xb5, - 0x5a, 0xaa, 0xaa, 0xf7, 0x88, 0x04, 0xb1, 0x75, 0x17, 0x17, 0x55, 0x55, 0xee, 0x24, 0x43, 0x2c, - 0xca, 0xaf, 0x85, 0x22, 0xe2, 0xeb, 0xdd, 0xce, 0xc3, 0xb1, 0xef, 0x78, 0xbe, 0xf5, 0xaf, 0x12, - 0xbd, 0xf0, 0x49, 0x77, 0x15, 0xba, 0x3b, 0xf0, 0x4b, 0x77, 0x77, 0x77, 0x77, 0x47, 0x7e, 0x0a, - 0x8b, 0x62, 0x4d, 0xb7, 0x15, 0xbb, 0x8a, 0xdd, 0xdc, 0x73, 0x7d, 0xc5, 0x62, 0xb1, 0x5b, 0xa8, - 0x91, 0x23, 0xaa, 0xaa, 0xb6, 0x55, 0x53, 0x50, 0x5c, 0xbf, 0x89, 0x24, 0xe4, 0x27, 0xc8, 0xf3, - 0x83, 0x88, 0x12, 0x4d, 0x67, 0x55, 0x5c, 0x44, 0x21, 0xa9, 0x3f, 0xb4, 0xea, 0xbf, 0x10, 0x08, - 0x49, 0x55, 0x5e, 0xf8, 0xbb, 0xbb, 0xbd, 0xa8, 0xbf, 0xb2, 0x2d, 0x7e, 0x63, 0xea, 0xb8, 0x90, - 0x88, 0xba, 0x8b, 0x8b, 0x8b, 0xab, 0x5e, 0x24, 0x22, 0x5a, 0xd5, 0x78, 0x44, 0x61, 0x8f, 0xc5, - 0x6c, 0x6e, 0xe7, 0x96, 0xc5, 0x65, 0x8c, 0x51, 0xbd, 0xe7, 0xc2, 0x56, 0x8e, 0xd4, 0xa1, 0x3e, - 0x8a, 0xfe, 0x24, 0x60, 0x88, 0xda, 0x88, 0x79, 0xe3, 0x04, 0x82, 0xf7, 0x1e, 0x81, 0x13, 0x0d, - 0x31, 0x5a, 0xd3, 0xc3, 0xdd, 0x50, 0xf2, 0x9e, 0xdf, 0x08, 0x82, 0xb1, 0x37, 0x15, 0xdd, 0xda, - 0x74, 0xce, 0xc7, 0xff, 0x8a, 0x26, 0xee, 0xee, 0xef, 0xc4, 0x22, 0xa7, 0x5e, 0x09, 0x2e, 0x2b, - 0xba, 0x75, 0xe0, 0xb0, 0x56, 0x20, 0x7c, 0x51, 0x8d, 0xe1, 0xd0, 0x98, 0xdc, 0x56, 0x2b, 0x3f, - 0x6f, 0x84, 0x06, 0xa6, 0xe3, 0x1c, 0xfd, 0xc3, 0xf4, 0x97, 0xc9, 0xaf, 0xe2, 0x44, 0x8c, 0xa5, - 0x13, 0x9d, 0x85, 0xcd, 0xf7, 0x93, 0xa6, 0xbc, 0x44, 0x75, 0xdd, 0xdd, 0xde, 0xef, 0x7e, 0x20, - 0x4f, 0x89, 0x04, 0x85, 0x6d, 0x36, 0xc8, 0xa5, 0x1c, 0x78, 0x98, 0x27, 0x95, 0x94, 0xca, 0xa7, - 0x52, 0x62, 0x56, 0x3e, 0xe2, 0x64, 0xb9, 0x52, 0x3d, 0xf8, 0x27, 0xbd, 0xde, 0xf3, 0xf1, 0xf7, - 0x89, 0x05, 0xda, 0x1a, 0xa1, 0xa7, 0x4f, 0xdf, 0x04, 0xb1, 0x84, 0xc7, 0x34, 0xcb, 0xcc, 0xa7, - 0xef, 0x13, 0xf0, 0x45, 0x4d, 0xbd, 0x1c, 0x7c, 0x40, 0x23, 0x8a, 0xdd, 0xc5, 0x68, 0xe3, 0xf1, - 0x45, 0x6e, 0xda, 0x62, 0xb1, 0x58, 0xac, 0x56, 0x4e, 0x28, 0x8a, 0xaa, 0xaa, 0xa2, 0xeb, 0x82, - 0x1b, 0xbb, 0xfe, 0x08, 0x48, 0xaa, 0xaa, 0x3b, 0x71, 0x02, 0x0b, 0x55, 0x4b, 0xea, 0x54, 0xf8, - 0x27, 0x23, 0xbd, 0xd3, 0x77, 0xf7, 0x88, 0x15, 0x5a, 0x3a, 0xeb, 0xe2, 0xeb, 0xa8, 0xbd, 0x57, - 0x11, 0x14, 0x25, 0x56, 0xaa, 0xb5, 0xc2, 0x22, 0x41, 0x55, 0x45, 0x35, 0xa6, 0x6d, 0x57, 0x46, - 0x82, 0x22, 0x8d, 0xf8, 0x91, 0x20, 0xb4, 0x8d, 0x52, 0xaa, 0xad, 0xf8, 0x64, 0x14, 0x8e, 0xad, - 0x56, 0x16, 0xd5, 0x83, 0x5a, 0xaf, 0x08, 0x82, 0x63, 0x32, 0x53, 0xdc, 0x3f, 0x0a, 0xb3, 0xb2, - 0x72, 0x20, 0x33, 0x2a, 0xe6, 0x1b, 0x77, 0x72, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x18, - 0x0c, 0x30, 0x7a, 0x02, 0x86, 0x11, 0x04, 0xe5, 0x76, 0x7c, 0x0c, 0x46, 0x6e, 0x51, 0x61, 0x17, - 0x46, 0x38, 0x80, 0x42, 0x10, 0x11, 0x86, 0x59, 0x67, 0x67, 0x31, 0x40, 0x6e, 0x2f, 0x55, 0xc3, - 0x18, 0x34, 0x88, 0x0c, 0x06, 0x87, 0xb7, 0x7a, 0x70, 0x71, 0x77, 0xb6, 0xf7, 0xc4, 0x82, 0x91, - 0x81, 0x06, 0x37, 0xa4, 0x7e, 0x4b, 0x5d, 0xf6, 0xd5, 0x4b, 0xeb, 0x17, 0xc2, 0x02, 0x44, 0xf9, - 0x3e, 0xed, 0x38, 0x5b, 0xa0, 0xaf, 0x7d, 0x4a, 0x9f, 0x5a, 0x93, 0xa3, 0x3f, 0xd1, 0x5e, 0x16, - 0xe8, 0xbb, 0x30, 0xeb, 0x80, 0x2a, 0xf5, 0x54, 0x3b, 0xdf, 0x9e, 0x1f, 0x98, 0x46, 0xd1, 0x20, - 0x99, 0x20, 0x89, 0xe9, 0x20, 0xac, 0xce, 0x24, 0x26, 0x16, 0xbd, 0xdb, 0xb7, 0xc4, 0x42, 0x98, - 0x9f, 0x58, 0x31, 0x4e, 0x6f, 0x52, 0xf5, 0x6f, 0xd4, 0xbf, 0x67, 0x88, 0x41, 0x3e, 0x97, 0xa3, - 0x38, 0x5c, 0xc7, 0x69, 0xd2, 0x4a, 0x12, 0xc2, 0x1b, 0x15, 0x28, 0x0c, 0x81, 0xbe, 0x9a, 0x69, - 0xa6, 0xdb, 0x6d, 0xb7, 0x0d, 0xa2, 0x00, 0x11, 0x1e, 0xbb, 0xe3, 0xfe, 0x7b, 0xff, 0xf1, 0xef, - 0x0b, 0x86, 0x0c, 0x1f, 0x30, 0x0c, 0xb6, 0xd9, 0xec, 0x9c, 0xfd, 0x2a, 0x30, 0xa3, 0xfc, 0x08, - 0x20, 0xe4, 0x14, 0x15, 0x38, 0xce, 0x7d, 0xe2, 0xeb, 0xcc, 0x81, 0x54, 0x44, 0x12, 0x0e, 0x8a, - 0xe5, 0xfc, 0x5d, 0xc4, 0x84, 0x42, 0x24, 0x89, 0xfa, 0x8b, 0xa9, 0xa3, 0x24, 0x59, 0xcd, 0xeb, - 0x88, 0xc9, 0xc4, 0x04, 0xdd, 0xf7, 0x7d, 0x43, 0x3e, 0x08, 0x60, 0xb0, 0x24, 0xe9, 0x54, 0x86, - 0x23, 0x99, 0x82, 0x29, 0x30, 0xe3, 0xdd, 0xa4, 0xe7, 0xc6, 0x70, 0xc0, 0x44, 0x75, 0x5a, 0x02, - 0xe9, 0x2f, 0xea, 0x26, 0x84, 0xf2, 0x27, 0xde, 0xc3, 0xf9, 0x6d, 0xff, 0x08, 0x09, 0x0a, 0x46, - 0xcb, 0x0f, 0x10, 0x1b, 0xb4, 0xdb, 0x78, 0x99, 0xa3, 0x7e, 0x74, 0x78, 0x79, 0xc8, 0x4b, 0xd8, - 0x8d, 0xf5, 0x31, 0x0f, 0x7e, 0x01, 0xee, 0x0e, 0x86, 0x5c, 0x40, 0x80, 0x42, 0x27, 0x98, 0xcc, - 0x6b, 0x5f, 0x47, 0xf4, 0x2f, 0xa1, 0x4e, 0xa5, 0xa6, 0xeb, 0x87, 0x08, 0x42, 0xe3, 0x01, 0xdb, - 0x94, 0x2b, 0x19, 0x89, 0xf4, 0x33, 0xcb, 0x17, 0xfc, 0xb0, 0xbe, 0x26, 0x30, 0xd5, 0x85, 0xa3, - 0x25, 0x06, 0x91, 0x4d, 0xea, 0x58, 0xdc, 0xb6, 0x17, 0x69, 0x7d, 0xf8, 0x64, 0xa5, 0x2f, 0x96, - 0xcb, 0x84, 0xe6, 0x1b, 0xc0, 0xf8, 0xd7, 0x0c, 0x84, 0x41, 0x60, 0xca, 0xae, 0xad, 0xec, 0x4d, - 0x10, 0xf2, 0xa1, 0x42, 0x03, 0xae, 0x7b, 0x88, 0x08, 0x8c, 0x31, 0x88, 0x29, 0x61, 0xd9, 0xfe, - 0x43, 0xd3, 0x68, 0xcb, 0x72, 0x81, 0xcd, 0xdd, 0xdf, 0x08, 0x84, 0x1f, 0xdd, 0x5a, 0xf3, 0x74, - 0xc4, 0x30, 0xc4, 0x89, 0x1d, 0xce, 0x91, 0xb1, 0x21, 0x84, 0x97, 0xcf, 0xe7, 0xf0, 0x84, 0x47, - 0x41, 0x3a, 0xfa, 0xc5, 0x37, 0x5a, 0x8f, 0xe8, 0xb1, 0x4f, 0xd5, 0x32, 0x5d, 0x12, 0x2f, 0xac, - 0x5e, 0x23, 0x88, 0x0c, 0x82, 0xd1, 0x9c, 0xbd, 0x6a, 0xbd, 0xc4, 0x89, 0x0a, 0x10, 0x3a, 0x02, - 0x8c, 0xfa, 0xc8, 0xb2, 0x1e, 0xc1, 0xe3, 0x17, 0x9c, 0xf6, 0xcc, 0x45, 0x9c, 0xd5, 0x86, 0xa5, - 0x0f, 0x8e, 0xc1, 0x76, 0x7e, 0x53, 0xd0, 0x95, 0x53, 0xe7, 0x84, 0x01, 0x34, 0x84, 0xab, 0x55, - 0x5e, 0x75, 0x96, 0xca, 0x6a, 0x2e, 0xa7, 0x49, 0x08, 0x89, 0x1f, 0x3e, 0xf1, 0x8f, 0x20, 0x07, - 0xce, 0x04, 0x06, 0xd3, 0x15, 0x95, 0x45, 0xf8, 0xeb, 0xd7, 0x3d, 0xeb, 0xd3, 0x0f, 0xfc, 0xbd, - 0xee, 0xdc, 0x4b, 0xfd, 0x8d, 0x1c, 0x29, 0x4d, 0x75, 0x89, 0x1c, 0x3a, 0x2e, 0x27, 0x88, 0x23, - 0x59, 0x87, 0x0e, 0x54, 0xec, 0x91, 0xcb, 0xe2, 0x10, 0x55, 0xe0, 0x9f, 0xaf, 0x7d, 0x7b, 0xea, - 0xff, 0x5f, 0xf1, 0x10, 0x4e, 0x29, 0x31, 0x5d, 0xd4, 0x8c, 0x54, 0xb7, 0x84, 0x42, 0x82, 0xa3, - 0x2d, 0xdc, 0xb0, 0xd9, 0xc2, 0xa1, 0x70, 0x17, 0x71, 0xb6, 0x25, 0xe5, 0xb3, 0xcb, 0x0d, 0xe4, - 0xfa, 0x58, 0xd6, 0x4f, 0x08, 0x89, 0xc7, 0xa7, 0x8d, 0xd3, 0x4d, 0xc2, 0x22, 0x4c, 0x2e, 0xec, - 0x80, 0x4d, 0xbe, 0xd9, 0xe5, 0x14, 0xbf, 0x3d, 0x30, 0x80, 0x90, 0x4a, 0x3e, 0x27, 0xe2, 0x6c, - 0x2f, 0x5e, 0xe2, 0x04, 0x8e, 0xad, 0x76, 0x96, 0xb5, 0x5f, 0x0a, 0x04, 0x38, 0xca, 0x85, 0x15, - 0x3d, 0xe5, 0xb7, 0x7d, 0x97, 0x2c, 0x55, 0x9d, 0xed, 0xfd, 0xf0, 0x42, 0x15, 0x10, 0x3e, 0x87, - 0x1a, 0x9c, 0x5c, 0x1a, 0x8e, 0xde, 0x10, 0x86, 0x7a, 0xb8, 0x27, 0x45, 0x2d, 0x27, 0x44, 0x72, - 0x2b, 0x04, 0x00, 0x9c, 0x96, 0xdd, 0xb4, 0xe9, 0xa5, 0xde, 0x19, 0x12, 0x38, 0xe7, 0x92, 0xb4, - 0x39, 0xe4, 0xad, 0x05, 0x6f, 0xe5, 0xf5, 0xf0, 0x88, 0x21, 0xe0, 0xa5, 0x4b, 0x22, 0x7b, 0xab, - 0x82, 0x41, 0xf0, 0x31, 0xb9, 0x6a, 0x72, 0x3d, 0x7c, 0x14, 0x0e, 0xf9, 0xba, 0xcb, 0xef, 0xe2, - 0x07, 0x1d, 0x63, 0x26, 0xdb, 0x7a, 0xbc, 0x8c, 0xd4, 0x40, 0x44, 0x22, 0x68, 0x33, 0xac, 0x91, - 0xc6, 0x99, 0xf1, 0x3b, 0xd7, 0x89, 0x04, 0x27, 0xdc, 0xe6, 0x0b, 0xd7, 0xb8, 0x80, 0xc4, 0x2d, - 0xd0, 0xf7, 0x2f, 0xab, 0x5f, 0x57, 0x03, 0xf8, 0x24, 0x10, 0xa9, 0x0c, 0xa9, 0xc0, 0x3e, 0x0e, - 0x05, 0x90, 0xc8, 0x28, 0xae, 0x21, 0x95, 0x03, 0xed, 0x47, 0xb8, 0x8e, 0xf8, 0xb7, 0x32, 0x9f, - 0xc4, 0x89, 0x18, 0x2b, 0x51, 0x5a, 0xcc, 0xaa, 0x2a, 0xbe, 0x20, 0x67, 0x54, 0xd7, 0x52, 0x12, - 0xd6, 0xaa, 0x23, 0xe6, 0x1e, 0x61, 0x70, 0x0e, 0x18, 0x95, 0x69, 0x69, 0xa7, 0xa6, 0x9f, 0xf9, - 0xeb, 0xdf, 0xf0, 0xe2, 0x10, 0x00, 0x32, 0x7d, 0xa9, 0xc6, 0x27, 0xfc, 0xff, 0xfc, 0xfc, 0xb0, - 0x1a, 0x90, 0xbc, 0x10, 0x90, 0x8e, 0x2b, 0x71, 0xce, 0x9c, 0x7f, 0xf0, 0x89, 0x47, 0x72, 0xb8, - 0x40, 0x22, 0x13, 0x2a, 0xd2, 0xaa, 0x9b, 0xb3, 0x78, 0x91, 0x86, 0x5c, 0x33, 0x48, 0x48, 0x40, - 0xc0, 0xe6, 0x1a, 0x6d, 0x0c, 0x06, 0xea, 0xc4, 0xe8, 0x23, 0xe7, 0x12, 0x20, 0x12, 0x8f, 0x24, - 0x05, 0x46, 0x0b, 0x74, 0x0a, 0x8f, 0x53, 0xd3, 0x0b, 0xd6, 0x54, 0x76, 0xf0, 0x40, 0xc4, 0xbb, - 0xe7, 0xea, 0xe8, 0x4b, 0xab, 0x90, 0x9c, 0x33, 0x05, 0x83, 0x07, 0xfc, 0xe0, 0x18, 0x0e, 0xa4, - 0x2e, 0x5c, 0x34, 0xab, 0xd0, 0xaf, 0xbe, 0xb8, 0x28, 0x07, 0x20, 0xa8, 0x93, 0xea, 0x19, 0x55, - 0xb8, 0xfb, 0xdd, 0xfd, 0xc4, 0x04, 0x46, 0x43, 0xa2, 0x25, 0x47, 0xb8, 0x58, 0x31, 0xe7, 0x82, - 0xac, 0x18, 0x80, 0x4b, 0x91, 0x4b, 0x20, 0xe1, 0x59, 0xc3, 0xdc, 0xb6, 0x25, 0xf5, 0xb3, 0x8e, - 0x5b, 0xaf, 0x84, 0x42, 0x92, 0x5e, 0x09, 0xcc, 0xb1, 0xff, 0x18, 0xe5, 0x96, 0xb2, 0x32, 0xcb, - 0x11, 0xdc, 0xc4, 0x2e, 0x49, 0x16, 0x3c, 0x3e, 0xa1, 0x26, 0x05, 0xfc, 0x9f, 0xe2, 0xf3, 0x17, - 0x12, 0x24, 0x64, 0x99, 0x3d, 0xd5, 0x7a, 0xc9, 0xc7, 0xa9, 0x25, 0xef, 0x62, 0x1f, 0x84, 0x01, - 0x08, 0xc2, 0x2c, 0x41, 0xf2, 0x64, 0xd4, 0xee, 0x2f, 0x8b, 0xb6, 0xb8, 0x80, 0x88, 0x92, 0xad, - 0x63, 0x18, 0xb2, 0xf2, 0xff, 0x18, 0x6e, 0x11, 0x28, 0xe5, 0x36, 0x11, 0x7e, 0x87, 0x3b, 0xcf, - 0x6a, 0x0e, 0x24, 0xfc, 0x43, 0xd4, 0x63, 0xc4, 0x88, 0x12, 0x13, 0x1b, 0x96, 0x9a, 0xb4, 0xe3, - 0x96, 0xaa, 0xab, 0xc1, 0x07, 0xd1, 0xe2, 0xbe, 0xb1, 0x7d, 0x70, 0x9f, 0xa2, 0x77, 0xd1, 0x5e, - 0x16, 0xeb, 0x14, 0x47, 0x46, 0xc3, 0xe6, 0x15, 0x2e, 0xc2, 0x83, 0x4e, 0x08, 0x42, 0x96, 0x65, - 0x8d, 0xe2, 0x5c, 0x56, 0xe2, 0x8c, 0x75, 0xfc, 0x74, 0xfa, 0x8a, 0xcf, 0x83, 0xca, 0x35, 0xc2, - 0x1f, 0x70, 0x84, 0x61, 0x4b, 0x92, 0xc6, 0x2b, 0x55, 0x4b, 0x5b, 0xd8, 0xac, 0x51, 0xb8, 0xa3, - 0x7f, 0x05, 0x24, 0x3f, 0xb0, 0xaa, 0xb6, 0xed, 0xbb, 0x67, 0x83, 0xec, 0xf7, 0x1b, 0x47, 0xe2, - 0x23, 0xb2, 0xab, 0x54, 0xf5, 0x55, 0xf8, 0xe3, 0xe9, 0xcb, 0x82, 0x58, 0x1c, 0xfa, 0xf9, 0x7b, - 0xdf, 0x12, 0x30, 0x83, 0xea, 0x5b, 0xf2, 0x74, 0x57, 0x5a, 0xa9, 0x7a, 0xfe, 0x30, 0x56, 0x6c, - 0xa4, 0xa3, 0x26, 0x89, 0xf6, 0x1c, 0x43, 0xdc, 0xe1, 0xe2, 0xb9, 0x2d, 0xf1, 0x22, 0x01, 0x58, - 0x44, 0x82, 0xbb, 0x6a, 0x61, 0x48, 0x1b, 0x15, 0x9d, 0x47, 0x7c, 0xaa, 0xaa, 0xfd, 0xc4, 0x02, - 0x0e, 0x10, 0xc4, 0x74, 0x2f, 0x50, 0x47, 0xd4, 0xa9, 0xc4, 0x48, 0x16, 0xdb, 0x64, 0x67, 0x10, - 0x19, 0x0a, 0x4b, 0x62, 0xb3, 0x9a, 0x16, 0xf8, 0x82, 0xce, 0x47, 0x00, 0xe0, 0xee, 0x12, 0x82, - 0x31, 0xcf, 0xcb, 0x1b, 0xc0, 0x03, 0xcf, 0x00, 0x79, 0xe0, 0xe1, 0x30, 0x38, 0x7e, 0x11, 0x12, - 0x14, 0x28, 0x91, 0xfd, 0xdc, 0x43, 0xda, 0x2d, 0x96, 0xdc, 0xb6, 0xda, 0xd5, 0x37, 0xe2, 0x04, - 0x82, 0x6d, 0xdb, 0xd5, 0x45, 0xd5, 0xfc, 0x47, 0x12, 0x20, 0xdd, 0xdf, 0x13, 0x14, 0x26, 0xaa, - 0xc3, 0x9a, 0x49, 0x3d, 0x8e, 0x24, 0xc1, 0x0b, 0xc1, 0xbe, 0x98, 0x40, 0x41, 0x43, 0x23, 0x62, - 0x09, 0x29, 0xd4, 0xc7, 0x7c, 0x4d, 0x7a, 0x2b, 0xab, 0x93, 0xf5, 0xab, 0xea, 0xc4, 0x33, 0x82, - 0x93, 0x05, 0x16, 0xbe, 0x10, 0x18, 0x47, 0x14, 0x71, 0x59, 0x6c, 0xb6, 0x1c, 0x70, 0x38, 0x69, - 0x99, 0x84, 0xce, 0x14, 0x9a, 0xac, 0x1b, 0x6f, 0x57, 0x04, 0x03, 0x27, 0xc7, 0xe2, 0xdd, 0x16, - 0xff, 0x10, 0xb1, 0x2d, 0x61, 0xb9, 0x57, 0x02, 0x69, 0xf2, 0xf7, 0xf0, 0x81, 0x4b, 0x6f, 0xdf, - 0x54, 0xdb, 0x76, 0xfc, 0x29, 0x7b, 0xdd, 0xc5, 0x62, 0xb9, 0xf6, 0x01, 0xb6, 0x25, 0xbc, 0x0e, - 0xf7, 0x8a, 0xa4, 0x68, 0x28, 0xb4, 0xc4, 0xb3, 0xe6, 0x34, 0x7e, 0x98, 0xef, 0x8c, 0x2e, 0x7c, - 0x77, 0x7c, 0xe9, 0x8c, 0xf1, 0x25, 0x9f, 0xfc, 0x49, 0x45, 0x67, 0xe2, 0xbc, 0xd1, 0xa2, 0xf1, - 0x22, 0x8c, 0x7c, 0x79, 0xd2, 0x72, 0xad, 0xc2, 0xdd, 0x65, 0xf5, 0xf0, 0xc8, 0x43, 0xc9, 0x9a, - 0xbb, 0x57, 0x3b, 0x2a, 0xb2, 0xa2, 0x3a, 0x09, 0xb8, 0x04, 0x9d, 0x19, 0xb8, 0x64, 0x48, 0x2b, - 0x26, 0x92, 0x58, 0x03, 0x61, 0xed, 0x61, 0x05, 0xbd, 0x0c, 0xeb, 0xa3, 0x2f, 0xff, 0xc4, 0x1a, - 0xb5, 0x49, 0x7f, 0x14, 0x22, 0x5c, 0x93, 0xbb, 0xbf, 0x8e, 0xa2, 0x05, 0x43, 0x96, 0x02, 0x9c, - 0xf6, 0x31, 0x9c, 0x6f, 0x75, 0x59, 0x39, 0x27, 0xf2, 0x9f, 0x77, 0xf1, 0x84, 0x06, 0x96, 0x60, - 0xe4, 0xc3, 0xe7, 0xec, 0xba, 0xb1, 0xff, 0x5c, 0x2f, 0x43, 0xae, 0xc8, 0x16, 0xd1, 0x03, 0xd6, - 0x83, 0xfe, 0x13, 0x7d, 0xb9, 0xee, 0x69, 0x6d, 0x1a, 0x27, 0x1d, 0x50, 0x05, 0xa3, 0xdb, 0xdb, - 0xc3, 0xb9, 0xab, 0xc9, 0x71, 0x50, 0xa6, 0x89, 0x65, 0x30, 0x3d, 0x64, 0xa2, 0xd8, 0x9e, 0x58, - 0x81, 0x03, 0x0b, 0xfd, 0x69, 0x5a, 0xc8, 0xe5, 0x69, 0xf9, 0x2b, 0x5e, 0x8d, 0x75, 0xf1, 0xc7, - 0xaa, 0xaf, 0x2b, 0x04, 0xfa, 0x8a, 0x7e, 0xee, 0xf6, 0xfc, 0x40, 0x2b, 0x18, 0xac, 0xf1, 0x78, - 0xbe, 0x6d, 0x49, 0x7d, 0xe0, 0xa4, 0x11, 0x84, 0x71, 0xad, 0xd7, 0xd1, 0x5d, 0x0b, 0x4d, 0x0f, - 0xf4, 0x3d, 0xcf, 0xa0, 0x83, 0xf1, 0x00, 0xc4, 0x13, 0x88, 0x81, 0xdb, 0xa4, 0x0a, 0x2d, 0x69, - 0x62, 0x65, 0xf8, 0xc2, 0xbb, 0x3e, 0x0b, 0x89, 0x95, 0x07, 0x88, 0x7a, 0xa8, 0x77, 0x9c, 0xfb, - 0xbe, 0x3b, 0x71, 0x34, 0x47, 0xf1, 0x23, 0x3c, 0x6c, 0x93, 0xc6, 0x7e, 0xda, 0x95, 0x36, 0x0b, - 0x0c, 0x10, 0x59, 0xcc, 0x23, 0x11, 0xae, 0xcc, 0xe5, 0x6b, 0x9c, 0x41, 0x8c, 0x6c, 0x8b, 0x8b, - 0xf9, 0x85, 0xd6, 0xbe, 0x09, 0x76, 0xdd, 0x1b, 0x41, 0x95, 0x25, 0x90, 0x0c, 0x3d, 0x69, 0x95, - 0xff, 0xec, 0xfb, 0x7f, 0x82, 0x52, 0x57, 0x01, 0x85, 0x1a, 0x3d, 0x91, 0xa3, 0x29, 0x7b, 0x0d, - 0x0e, 0x2b, 0xf8, 0x8f, 0x13, 0xf1, 0x55, 0x4b, 0xac, 0xdf, 0xc1, 0x31, 0xae, 0xf4, 0xde, 0x45, - 0x7d, 0xe0, 0xa4, 0x15, 0x84, 0x5d, 0xc5, 0x6e, 0xee, 0x69, 0x42, 0xdd, 0xf5, 0x05, 0x1d, 0x4c, - 0xa1, 0x86, 0x42, 0x20, 0xb2, 0x4c, 0x17, 0x55, 0xdc, 0xe1, 0x95, 0x56, 0x63, 0x71, 0x1d, 0xf8, - 0x29, 0x11, 0x55, 0x55, 0x5d, 0x76, 0xff, 0xf9, 0x0b, 0x49, 0xfc, 0x48, 0xc3, 0x6e, 0xf2, 0xf4, - 0x8d, 0x2e, 0x96, 0xef, 0x2d, 0xbb, 0xf9, 0x8c, 0xfb, 0x1f, 0x10, 0x3a, 0x15, 0x0c, 0xa2, 0xa6, - 0x96, 0x61, 0x39, 0x2b, 0xbd, 0x38, 0x66, 0xfe, 0x6d, 0x35, 0xc6, 0xe2, 0xb9, 0x7c, 0x7f, 0x88, - 0x63, 0x4a, 0xae, 0x58, 0xc5, 0x7c, 0x20, 0x0b, 0x89, 0xbb, 0x77, 0xbb, 0xf1, 0x22, 0x44, 0x9d, - 0xcb, 0xdf, 0x2b, 0x0d, 0x24, 0x14, 0xd4, 0x78, 0x8b, 0x2d, 0xdc, 0x4b, 0x98, 0x8a, 0x23, 0xf8, - 0x9f, 0x12, 0x20, 0x43, 0x6d, 0x6e, 0x1a, 0x01, 0xe1, 0x0f, 0xbf, 0x08, 0x1a, 0xee, 0x5c, 0xbb, - 0xb8, 0xa3, 0xb8, 0xaf, 0x82, 0x94, 0x3c, 0x76, 0x3b, 0xf4, 0x37, 0xa0, 0x83, 0xa0, 0x87, 0x4b, - 0x13, 0x05, 0x1c, 0xcd, 0xd5, 0x20, 0x3e, 0x1a, 0xbf, 0x0c, 0x89, 0x04, 0x04, 0x78, 0xac, 0x57, - 0x97, 0x4a, 0x5a, 0x3f, 0x2f, 0x0f, 0xdc, 0xbb, 0x74, 0xff, 0x08, 0x09, 0x05, 0x50, 0x06, 0x2d, - 0xfd, 0xae, 0x0f, 0x72, 0xcc, 0xed, 0x37, 0x66, 0x8b, 0x81, 0x10, 0x5f, 0x9e, 0x78, 0xdf, 0xd1, - 0xd6, 0xb4, 0xd8, 0x1d, 0xec, 0x2e, 0x56, 0x68, 0x35, 0x0f, 0x12, 0xef, 0xb9, 0xbe, 0x5c, 0x4c, - 0x16, 0x15, 0x5a, 0xdc, 0xd9, 0xe8, 0xcb, 0x4a, 0xf9, 0x88, 0xfa, 0xac, 0x4b, 0x9f, 0x1b, 0x2f, - 0x7a, 0x9e, 0x24, 0x13, 0x09, 0x3e, 0x35, 0xaa, 0xaa, 0x8e, 0xff, 0x12, 0x88, 0xff, 0x04, 0x25, - 0xb7, 0x77, 0x7f, 0x08, 0xd4, 0x40, 0x82, 0x94, 0xa4, 0x1b, 0xbf, 0x13, 0xf1, 0x02, 0x9e, 0x9c, - 0x56, 0x2b, 0x77, 0xf0, 0x98, 0xa1, 0x5b, 0xdc, 0xf8, 0x2b, 0xf8, 0x29, 0x16, 0x56, 0x73, 0xa4, - 0x7c, 0x57, 0xe0, 0xa7, 0x88, 0x0c, 0xc2, 0xbd, 0x0b, 0x95, 0xf4, 0x2d, 0x3a, 0x13, 0xd1, 0x19, - 0xc2, 0x22, 0x41, 0x11, 0xa7, 0xce, 0x97, 0xc4, 0x82, 0xb3, 0x19, 0x72, 0x1d, 0x01, 0xef, 0x69, - 0x56, 0xee, 0xf1, 0x7c, 0x65, 0x64, 0xce, 0xee, 0x58, 0xc5, 0x19, 0xf1, 0xf8, 0xfc, 0xfb, 0x88, - 0x08, 0x8c, 0xb4, 0x2f, 0xee, 0xf4, 0x8d, 0x95, 0x45, 0x31, 0x9c, 0xbc, 0x44, 0x5e, 0xd2, 0xaa, - 0xad, 0x71, 0x3f, 0x12, 0x11, 0x33, 0x8a, 0xc3, 0x2a, 0xd8, 0x09, 0xa9, 0x9f, 0x82, 0x4f, 0x85, - 0xa8, 0xb8, 0x40, 0x3f, 0x88, 0xdf, 0x58, 0x7c, 0x9b, 0xec, 0x0b, 0xfe, 0x0a, 0x09, 0x76, 0xae, - 0xd1, 0xb9, 0x67, 0xdf, 0x29, 0xf1, 0x75, 0xf3, 0x1d, 0x77, 0xe2, 0x4c, 0x55, 0x5f, 0x88, 0x04, - 0x9b, 0xdd, 0x1d, 0xf1, 0x21, 0x1b, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbf, 0x84, 0xae, 0xf7, 0x73, - 0xe5, 0xf1, 0x10, 0x99, 0xde, 0xe4, 0x8e, 0x6d, 0xf8, 0x21, 0x23, 0xdd, 0xdf, 0xe6, 0x2a, 0xaa, - 0xae, 0x24, 0x4f, 0xc8, 0x30, 0x56, 0xef, 0x58, 0x44, 0x5d, 0x3a, 0x4c, 0xf1, 0x5b, 0xf0, 0xc9, - 0x47, 0xd4, 0x77, 0xd8, 0x63, 0xa3, 0x74, 0x44, 0x23, 0x08, 0xd5, 0x7a, 0xa4, 0x84, 0xee, 0x7c, - 0x2d, 0xf8, 0x2d, 0x10, 0xe0, 0x77, 0xd4, 0x5d, 0x9d, 0x27, 0xca, 0x0f, 0x84, 0x7a, 0xae, 0x2b, - 0x72, 0xe5, 0xdb, 0x58, 0x60, 0x10, 0xf1, 0x31, 0x95, 0x26, 0x27, 0x33, 0x5a, 0x66, 0xf5, 0x67, - 0xeb, 0x89, 0x08, 0x04, 0xc4, 0xbb, 0xbb, 0x89, 0xf1, 0x4d, 0x45, 0xf8, 0x40, 0x59, 0x96, 0x6c, - 0x69, 0xc5, 0x6a, 0xfc, 0x48, 0xc2, 0x28, 0xba, 0xa7, 0x07, 0x6d, 0xd9, 0x0a, 0xe6, 0xc6, 0xd3, - 0x3c, 0xf2, 0x4e, 0x38, 0x90, 0xa1, 0x4d, 0x65, 0xe5, 0xbd, 0x0a, 0xa8, 0x9a, 0x89, 0x97, 0xeb, - 0x17, 0xad, 0x5b, 0xe3, 0x89, 0xcd, 0x8a, 0xe7, 0xc6, 0xb6, 0x38, 0xbf, 0x5f, 0x08, 0x41, 0xd7, - 0xdc, 0x38, 0x31, 0xc7, 0xdd, 0xdd, 0xdd, 0xf1, 0x22, 0x4c, 0x35, 0xef, 0xc4, 0xf8, 0x44, 0x48, - 0xc9, 0x99, 0xce, 0xc6, 0xef, 0x2a, 0x99, 0x54, 0xde, 0xff, 0x08, 0x5c, 0xea, 0x2e, 0xf7, 0x7b, - 0xdf, 0x11, 0xf1, 0x2a, 0x8e, 0xf0, 0x88, 0x8e, 0x20, 0x22, 0x09, 0x34, 0xae, 0xfc, 0x48, 0x45, - 0x19, 0x1d, 0xe1, 0x90, 0xc8, 0x4b, 0xbb, 0x8d, 0x55, 0xeb, 0x89, 0x85, 0x0d, 0x1e, 0xee, 0x88, - 0xf1, 0xcf, 0x66, 0x0a, 0xab, 0xe7, 0x8a, 0xc5, 0x7d, 0xdc, 0x05, 0x20, 0xa7, 0x83, 0x00, 0x80, - 0x2a, 0x21, 0x6c, 0x56, 0x3b, 0xe3, 0xf1, 0xde, 0xa3, 0xe5, 0x1b, 0x69, 0x47, 0xe0, 0x82, 0x2c, - 0xe2, 0x3e, 0xce, 0xef, 0x7e, 0x23, 0x0f, 0x70, 0x8e, 0x5c, 0x7b, 0x9b, 0x15, 0x98, 0x5e, 0x4c, - 0x8b, 0xc1, 0x00, 0x29, 0x05, 0x1c, 0xb9, 0x55, 0xab, 0x1e, 0x24, 0x12, 0x6b, 0x57, 0xe2, 0x62, - 0xaa, 0xaa, 0xaa, 0x23, 0xd5, 0x66, 0x3c, 0x29, 0xad, 0x55, 0x57, 0x5d, 0x55, 0x57, 0x7e, 0x11, - 0x82, 0xa2, 0x8a, 0xef, 0x55, 0xe2, 0xf5, 0x7e, 0x20, 0x10, 0x84, 0x48, 0xef, 0x37, 0x58, 0xb9, - 0x3a, 0x97, 0xff, 0x08, 0xc5, 0x36, 0x67, 0xbb, 0xbe, 0xfe, 0x13, 0xcb, 0xed, 0x97, 0x9b, 0xb7, - 0xf1, 0x22, 0x75, 0x5c, 0xeb, 0xe2, 0x6c, 0xa9, 0x9f, 0xbd, 0xe2, 0x44, 0x8f, 0x2a, 0xef, 0x9f, - 0xef, 0x7c, 0x48, 0x80, 0x5b, 0x1a, 0x56, 0xfa, 0xe3, 0x77, 0x15, 0x8a, 0xd1, 0xde, 0x18, 0x82, - 0x3d, 0xde, 0x8e, 0xfc, 0x29, 0x77, 0x77, 0xa7, 0x4d, 0xdd, 0xc5, 0x67, 0xf0, 0x5e, 0xb8, 0x91, - 0x20, 0xbb, 0x8a, 0xea, 0xaa, 0xbc, 0x77, 0xe6, 0x3a, 0xaa, 0xae, 0x24, 0x49, 0x4c, 0xaa, 0xab, - 0xc4, 0xfc, 0xbd, 0xdf, 0x10, 0x20, 0x21, 0x39, 0x04, 0xe7, 0x0a, 0x63, 0x6f, 0x69, 0xdd, 0xdd, - 0xf8, 0x64, 0x29, 0x29, 0xac, 0x6b, 0x74, 0xee, 0x6b, 0xdf, 0x95, 0x24, 0x65, 0x8a, 0xf6, 0x4e, - 0xc6, 0xa4, 0xd8, 0x8e, 0xf1, 0x10, 0xa1, 0x98, 0xe3, 0x79, 0x54, 0x46, 0xb2, 0x15, 0x19, 0x7a, - 0x77, 0x2d, 0xd8, 0xd6, 0xd1, 0x8e, 0xdf, 0x88, 0x12, 0x38, 0x41, 0x6a, 0x9d, 0xc1, 0x21, 0xc7, - 0xd5, 0xb8, 0x9d, 0xf0, 0x80, 0x90, 0x56, 0x51, 0x3c, 0x36, 0x25, 0x13, 0x8a, 0xcf, 0x85, 0xbe, - 0x21, 0xe2, 0x26, 0x90, 0xec, 0x4c, 0x12, 0x16, 0x4d, 0x27, 0x2d, 0xe1, 0xf0, 0x5d, 0x2c, 0x2c, - 0x79, 0x65, 0xc5, 0x76, 0xbb, 0xe0, 0xa8, 0xae, 0x5c, 0x7a, 0x9f, 0x4c, 0x73, 0xdf, 0x7e, 0x26, - 0x24, 0x8e, 0xee, 0x5e, 0xfb, 0xfc, 0x79, 0xab, 0x55, 0x95, 0x89, 0xf2, 0x71, 0x76, 0x7e, 0x24, - 0x14, 0x8b, 0x64, 0xaa, 0xa2, 0x98, 0xb9, 0x32, 0x6f, 0x7a, 0x75, 0xc2, 0x01, 0x42, 0xd9, 0x8c, - 0xb4, 0x5a, 0x8b, 0xe5, 0xb1, 0x46, 0x2b, 0x15, 0x8a, 0xdb, 0x77, 0xef, 0x10, 0x0b, 0x05, 0x53, - 0x8a, 0xee, 0xe2, 0xb7, 0x12, 0xfd, 0xd5, 0xc1, 0x0d, 0xdb, 0xeb, 0xe0, 0xa8, 0x49, 0xfb, 0x89, - 0x60, 0xde, 0xfa, 0xd5, 0xdd, 0xbf, 0xf8, 0x81, 0x20, 0x92, 0xee, 0xee, 0xff, 0x04, 0xfb, 0xdd, - 0x5d, 0x53, 0x47, 0x70, 0xea, 0x38, 0x01, 0xf7, 0xe5, 0x6e, 0x8e, 0xe4, 0xee, 0x31, 0x24, 0x7f, - 0x72, 0xc5, 0xeb, 0x2e, 0x82, 0x18, 0xcf, 0x37, 0xfe, 0x20, 0x48, 0x2c, 0x10, 0xbb, 0xbb, 0xdb, - 0xea, 0xaf, 0xc4, 0x89, 0x04, 0x38, 0xad, 0xdf, 0xb8, 0x98, 0xba, 0xad, 0x56, 0xab, 0x89, 0x98, - 0x4a, 0xaa, 0xaf, 0x98, 0x52, 0xaa, 0xaf, 0x8c, 0x8b, 0x8e, 0xe4, 0x14, 0xd5, 0x1b, 0x71, 0xef, - 0xc8, 0xc5, 0xce, 0x63, 0x7f, 0x0a, 0x15, 0xef, 0x49, 0x23, 0xe3, 0xf1, 0x0b, 0x58, 0xcd, 0x54, - 0x71, 0x2c, 0x7b, 0x97, 0x0e, 0x71, 0xf8, 0x46, 0x38, 0xae, 0xf6, 0xee, 0xee, 0xee, 0xf6, 0xfc, - 0x48, 0x28, 0xa5, 0x29, 0x05, 0xf5, 0x21, 0x05, 0x1d, 0xe0, 0xa4, 0x1c, 0x82, 0xb3, 0x2d, 0xa6, - 0x8f, 0x63, 0xbd, 0xf6, 0x6d, 0x52, 0x7e, 0x0a, 0x41, 0x88, 0x2c, 0xa8, 0x4a, 0x73, 0x46, 0xbd, - 0x82, 0x01, 0x07, 0xde, 0x70, 0xc0, 0x51, 0xbd, 0x33, 0xf9, 0x47, 0x78, 0x30, 0x10, 0x34, 0x46, - 0xfc, 0xee, 0x3f, 0xe9, 0x1c, 0xf1, 0x59, 0x60, 0xe3, 0x75, 0x95, 0x41, 0x6e, 0x2b, 0x03, 0x95, - 0xa3, 0x9d, 0x55, 0x6c, 0xff, 0xc3, 0x65, 0x2f, 0x6c, 0xae, 0x53, 0x85, 0x80, 0x80, 0x91, 0xca, - 0x9d, 0x24, 0x58, 0x27, 0x45, 0xf9, 0xfa, 0x2f, 0x42, 0xbc, 0x38, 0x61, 0x58, 0xa3, 0x69, 0xad, - 0x6e, 0xaf, 0xf8, 0x40, 0x18, 0xf1, 0x22, 0x41, 0x31, 0xdd, 0xef, 0x7b, 0xd1, 0xdf, 0xb2, 0x33, - 0x75, 0x5e, 0x24, 0x84, 0xd5, 0x7c, 0x71, 0x6b, 0x6d, 0xee, 0xee, 0xf7, 0xc4, 0x42, 0x45, 0x77, - 0xb8, 0xbd, 0x78, 0x81, 0x02, 0xc9, 0xc5, 0x6e, 0x21, 0xc1, 0x59, 0xc2, 0xc7, 0x82, 0x6a, 0xae, - 0x5c, 0x96, 0xef, 0xf0, 0x45, 0x77, 0x77, 0x47, 0x7c, 0x23, 0xe2, 0x41, 0x1f, 0x36, 0x1b, 0x1f, - 0x89, 0x12, 0x62, 0xb8, 0xad, 0xc5, 0x1f, 0x01, 0x00, 0x30, 0xe2, 0x40, 0x1c, 0x3c, 0x01, 0xc1, - 0x2f, 0x1d, 0x78, 0x4a, 0xae, 0x1f, 0xbf, 0x2d, 0x69, 0x7e, 0x23, 0xa8, 0x5a, 0x89, 0xea, 0x78, - 0x72, 0x78, 0x79, 0x61, 0xf1, 0x20, 0xb8, 0xd7, 0xb7, 0x55, 0x55, 0xae, 0x27, 0xe2, 0x48, 0x75, - 0x55, 0x5f, 0x04, 0x5d, 0xb5, 0x7f, 0x11, 0xf1, 0xe4, 0x18, 0x32, 0x51, 0x5f, 0x6f, 0xcb, 0xb2, - 0xd1, 0xee, 0xfc, 0x48, 0x2c, 0x23, 0xdb, 0xdd, 0xed, 0x3b, 0x8a, 0xc5, 0x68, 0xef, 0x84, 0x46, - 0x16, 0xf7, 0x77, 0x7b, 0x2b, 0x4e, 0xd5, 0x24, 0xbc, 0x76, 0xc7, 0x72, 0x7f, 0xbb, 0xbd, 0xfe, - 0x14, 0x3a, 0xa3, 0x9f, 0x0b, 0x48, 0xaa, 0x74, 0xa2, 0x9c, 0x10, 0x15, 0x78, 0xd3, 0x63, 0x89, - 0x12, 0x84, 0x3f, 0x04, 0x01, 0x10, 0x4d, 0x17, 0x58, 0xb8, 0xbc, 0x53, 0x17, 0x67, 0x06, 0x02, - 0x06, 0x88, 0x26, 0x05, 0x50, 0x80, 0x0d, 0x0b, 0xbf, 0x60, 0x00, 0x08, 0xaa, 0xdc, 0xa0, 0xf8, - 0x76, 0xb3, 0x0a, 0xf5, 0xb3, 0x07, 0x4f, 0x97, 0x96, 0x90, 0x8e, 0x02, 0x6b, 0xbf, 0xcb, 0xd7, - 0xfc, 0x36, 0x52, 0xb0, 0xa3, 0x54, 0x5d, 0x81, 0x0e, 0x61, 0xc0, 0xe4, 0x87, 0xdf, 0x86, 0xe2, - 0x63, 0x66, 0x50, 0x17, 0xa6, 0x01, 0xc5, 0x28, 0x92, 0xf1, 0x72, 0x61, 0x78, 0x72, 0x4c, 0x99, - 0x22, 0x87, 0x1b, 0xdf, 0xeb, 0xee, 0x27, 0x6b, 0x8b, 0x88, 0x61, 0x1f, 0xe2, 0x04, 0x82, 0x6d, - 0xdd, 0xa7, 0xbd, 0xfe, 0x8a, 0x8e, 0x3f, 0x54, 0x77, 0xe8, 0xcf, 0xf2, 0xdd, 0xfe, 0x24, 0xa5, - 0xb6, 0xeb, 0x86, 0x03, 0x21, 0x19, 0x79, 0x60, 0x03, 0x36, 0x96, 0x00, 0xd0, 0x35, 0x5d, 0x8a, - 0x34, 0xc5, 0x78, 0x20, 0x85, 0x0a, 0x5f, 0xb2, 0xf6, 0xc1, 0xb5, 0x44, 0xb9, 0x19, 0xaa, 0x0b, - 0xda, 0x97, 0x96, 0xb2, 0xf7, 0xf7, 0x74, 0x62, 0xbc, 0x29, 0xb9, 0x6d, 0x77, 0x71, 0xf5, 0x39, - 0xe7, 0xbc, 0xe7, 0x9c, 0x3c, 0xb1, 0x9c, 0xf2, 0xc7, 0x91, 0xde, 0x24, 0x48, 0x25, 0x30, 0xa3, - 0x15, 0x8a, 0xcf, 0xdd, 0xfa, 0x3b, 0xe2, 0x42, 0x25, 0x54, 0xd3, 0x7b, 0xdd, 0xc5, 0x06, 0xe2, - 0x8f, 0x80, 0x80, 0x0a, 0x09, 0x07, 0x40, 0x7c, 0x2e, 0x3e, 0x1d, 0x01, 0xf2, 0xd9, 0xe0, 0x38, - 0x58, 0x03, 0x2d, 0x8a, 0x0c, 0xf0, 0x07, 0xbf, 0x0a, 0x20, 0x6a, 0x7a, 0xcc, 0x18, 0x25, 0x16, - 0x2a, 0x32, 0x88, 0x94, 0x65, 0x0e, 0xe1, 0x75, 0x03, 0x48, 0x1f, 0x59, 0xf3, 0x43, 0x34, 0x3f, - 0x8f, 0x5c, 0x84, 0xba, 0xe4, 0x24, 0x6a, 0xb1, 0x02, 0x04, 0x88, 0x15, 0xde, 0xef, 0x7f, 0x45, - 0xea, 0xc4, 0xab, 0xf8, 0x82, 0x0a, 0xbd, 0xf1, 0x22, 0x42, 0x82, 0x55, 0x33, 0x51, 0xbd, 0xf6, - 0x7e, 0xdb, 0x7b, 0x67, 0x3d, 0xfc, 0xb7, 0x6f, 0x1f, 0x0f, 0x32, 0x80, 0x01, 0xd6, 0x9a, 0x83, - 0xca, 0x3c, 0x37, 0xf6, 0x72, 0x50, 0xe6, 0x94, 0xeb, 0x6c, 0xfd, 0xfc, 0xf6, 0x8d, 0xa6, 0xfb, - 0xc5, 0x72, 0x3a, 0xfb, 0xdf, 0xe3, 0x8c, 0xfb, 0xa3, 0x10, 0xe6, 0x28, 0xef, 0xe1, 0x00, 0x81, - 0xec, 0x9f, 0x62, 0x73, 0xe1, 0x6d, 0x1c, 0xbb, 0xc4, 0xc1, 0x66, 0xaa, 0xae, 0xee, 0xea, 0xaa, - 0xa8, 0x8e, 0xb8, 0x91, 0x7a, 0xaa, 0xaa, 0xaa, 0xe0, 0xc4, 0x08, 0x3c, 0x30, 0x11, 0x20, 0xa5, - 0x38, 0xe5, 0x8f, 0x0c, 0x04, 0x46, 0x92, 0x30, 0x75, 0xf4, 0xc7, 0x5f, 0x0b, 0x1a, 0x1c, 0xf2, - 0xcf, 0x6f, 0x9b, 0x89, 0x0f, 0x43, 0x2c, 0xe3, 0x1b, 0x45, 0x37, 0x7f, 0x0c, 0xf3, 0x1c, 0x99, - 0xa5, 0x89, 0x8d, 0x21, 0x78, 0x3b, 0x74, 0xeb, 0x8d, 0x17, 0x12, 0x6d, 0xcd, 0xcb, 0xad, 0xed, - 0xea, 0xf0, 0x2d, 0x0f, 0x0b, 0xe2, 0xb6, 0x05, 0x4d, 0x89, 0xd5, 0x92, 0x9d, 0x3f, 0x10, 0x19, - 0x0a, 0x14, 0x4e, 0x2e, 0x48, 0xde, 0x73, 0x83, 0x29, 0xb2, 0x1c, 0xc9, 0x9a, 0xec, 0x2f, 0x2c, - 0x31, 0x7d, 0xb9, 0xba, 0x7e, 0x22, 0xe7, 0xeb, 0x5f, 0x89, 0x29, 0x5e, 0xfe, 0x27, 0xc4, 0x8a, - 0x25, 0xaa, 0xad, 0x55, 0x44, 0xcd, 0x77, 0xf0, 0xc8, 0x21, 0x35, 0xdd, 0xdf, 0x04, 0x15, 0xae, - 0x24, 0x22, 0x2f, 0xbb, 0xdd, 0xdf, 0x08, 0x88, 0x0a, 0x49, 0x1b, 0xc7, 0x4c, 0xdc, 0xc9, 0x6e, - 0x83, 0x77, 0x6e, 0x2b, 0x73, 0xe5, 0xd1, 0xde, 0x0e, 0x01, 0x08, 0xc3, 0xb6, 0x5f, 0x2f, 0xde, - 0xaf, 0x1b, 0x8a, 0xe2, 0xf1, 0x78, 0x69, 0xc0, 0x9c, 0xa6, 0x64, 0x86, 0xf7, 0xff, 0xaa, 0xfa, - 0x6f, 0x11, 0xc4, 0x89, 0x29, 0x2d, 0xdb, 0xc4, 0xc1, 0x15, 0x55, 0x6f, 0xe2, 0x5e, 0xee, 0xfc, - 0x41, 0x0c, 0xb5, 0xf8, 0x2d, 0x2d, 0xdd, 0xdd, 0xdd, 0xdf, 0x84, 0x42, 0x23, 0x0b, 0xab, 0xbc, - 0xe9, 0x23, 0xa7, 0x07, 0xc1, 0xa2, 0x03, 0x96, 0xc4, 0x26, 0x22, 0x8c, 0xe1, 0xf8, 0x80, 0x80, - 0x52, 0x76, 0x0f, 0x7b, 0x4f, 0xe2, 0x5e, 0xb4, 0x44, 0x1c, 0x2c, 0x16, 0xcf, 0xf2, 0xf5, 0x4a, - 0xce, 0x6b, 0x78, 0x8f, 0x18, 0x6e, 0x85, 0xb4, 0x4e, 0xa1, 0x77, 0x01, 0x97, 0x39, 0x41, 0x8e, - 0x17, 0xc2, 0x76, 0xe3, 0x5e, 0xf6, 0x23, 0x18, 0xce, 0x97, 0x6f, 0x5b, 0xa3, 0xd0, 0x3f, 0xff, - 0xbc, 0x22, 0x11, 0x9f, 0x29, 0x93, 0x1d, 0xdc, 0x56, 0xf1, 0xcd, 0x7c, 0x41, 0x6f, 0xbe, 0x24, - 0x48, 0x25, 0xee, 0x5c, 0x55, 0x95, 0x47, 0x7c, 0x41, 0x75, 0x55, 0xc4, 0x86, 0x5d, 0xdf, 0xe1, - 0x12, 0x0a, 0x48, 0x4f, 0x21, 0x5a, 0xe1, 0x00, 0xc8, 0xc2, 0x83, 0xb6, 0x08, 0x01, 0xe5, 0x81, - 0xad, 0x50, 0x77, 0xe4, 0xe7, 0xbd, 0x9c, 0x47, 0xc8, 0x92, 0x90, 0xfc, 0x2e, 0x37, 0x6d, 0x8c, - 0xe8, 0xad, 0x19, 0xc3, 0x86, 0x70, 0xa2, 0xb1, 0x92, 0x00, 0xd4, 0x96, 0xb1, 0x38, 0x7e, 0x20, - 0x10, 0x8e, 0x8e, 0xa9, 0x58, 0x33, 0x11, 0x92, 0xb9, 0x2a, 0xb3, 0x43, 0xfd, 0xce, 0x61, 0x8e, - 0x27, 0xfc, 0x4a, 0x2b, 0xf0, 0xc8, 0x60, 0x17, 0x15, 0x52, 0x62, 0xdd, 0xdd, 0x1d, 0xf1, 0x02, - 0xab, 0xad, 0x57, 0xc4, 0x1b, 0xb4, 0xbe, 0x08, 0x89, 0x5a, 0xbf, 0xca, 0x45, 0x5d, 0x43, 0x21, - 0x80, 0x54, 0x34, 0x57, 0x12, 0xfb, 0xdf, 0x4e, 0x9b, 0xf1, 0x30, 0xa4, 0x56, 0xee, 0xe2, 0xb1, - 0x58, 0xac, 0x56, 0xee, 0xee, 0xee, 0xee, 0x3e, 0xe2, 0x20, 0xa8, 0x82, 0xb7, 0xbb, 0xc5, 0x6e, - 0xe5, 0xc7, 0x6d, 0xd1, 0xc7, 0xc3, 0x00, 0x96, 0x2b, 0x15, 0xbb, 0xf5, 0x5e, 0xf1, 0x20, 0x86, - 0xf7, 0x76, 0x78, 0x44, 0x27, 0x7b, 0x55, 0x55, 0x5f, 0x36, 0x4e, 0xb3, 0xc4, 0x98, 0x9a, 0xaf, - 0x97, 0x7b, 0xf1, 0x1e, 0x24, 0x12, 0x94, 0x47, 0xa9, 0x33, 0xbb, 0xbe, 0x47, 0x7c, 0x40, 0xc9, - 0xf3, 0xed, 0xac, 0xb8, 0xe9, 0x5c, 0x57, 0xbb, 0xe2, 0x04, 0x05, 0x36, 0xef, 0xa5, 0x8a, 0xcb, - 0x18, 0xac, 0x51, 0xb2, 0x97, 0x62, 0xb7, 0x9f, 0x2b, 0x0a, 0x4a, 0x01, 0x98, 0x16, 0xc9, 0x11, - 0x30, 0x1f, 0x66, 0xf2, 0xed, 0xd9, 0x51, 0x76, 0x5d, 0x9f, 0x5f, 0xaf, 0xd7, 0xea, 0xd9, 0x6b, - 0x65, 0xbf, 0x4a, 0xad, 0x52, 0x8d, 0x19, 0xe4, 0x86, 0x54, 0x00, 0xb9, 0xcf, 0xe5, 0x6d, 0xe1, - 0x59, 0x3f, 0x87, 0xea, 0xa7, 0x85, 0x95, 0x89, 0xcb, 0xad, 0x66, 0xea, 0x55, 0xd3, 0xfd, 0x4a, - 0x2a, 0xc4, 0x93, 0xfd, 0xb8, 0xca, 0x37, 0x4a, 0xcc, 0xf1, 0x11, 0xc4, 0x2d, 0xb9, 0x6d, 0xe9, - 0x3b, 0x9e, 0xe5, 0x96, 0xc4, 0xbf, 0x10, 0x24, 0x9a, 0xd7, 0x89, 0xe2, 0x04, 0xf1, 0x16, 0x5d, - 0x57, 0x10, 0x24, 0x15, 0x6a, 0xb2, 0x71, 0xd4, 0x0a, 0xdb, 0x56, 0x08, 0x0a, 0xb3, 0xa3, 0xbf, - 0x04, 0xe3, 0xa2, 0x8d, 0xa1, 0x00, 0xb0, 0xe4, 0x80, 0x35, 0x3a, 0x20, 0x14, 0x06, 0xa0, 0xf8, - 0x58, 0xa6, 0xca, 0x1f, 0x64, 0x10, 0x61, 0x57, 0x1f, 0x1b, 0x00, 0x55, 0x81, 0xb4, 0x37, 0x48, - 0x20, 0x2c, 0x52, 0x92, 0xf0, 0x98, 0x20, 0x66, 0xdf, 0x85, 0x3a, 0x2b, 0xd7, 0x04, 0x86, 0x77, - 0x9e, 0x0f, 0xc4, 0x84, 0x41, 0x49, 0x9d, 0xb1, 0x5b, 0x69, 0xbf, 0xee, 0xca, 0xd6, 0xbe, 0xf6, - 0xff, 0x08, 0x82, 0xc1, 0x2e, 0xf7, 0x55, 0x5b, 0xe3, 0x89, 0x97, 0xe2, 0x60, 0xa6, 0x2b, 0x71, - 0x58, 0xae, 0xf7, 0xbb, 0x59, 0x67, 0x7f, 0x12, 0x0b, 0x0f, 0x5a, 0xec, 0xdd, 0x57, 0x2d, 0xc4, - 0x89, 0xe2, 0x68, 0x88, 0xef, 0x13, 0xf0, 0x88, 0xf2, 0x5e, 0xee, 0xee, 0xef, 0xbe, 0x22, 0xce, - 0xee, 0xfc, 0x48, 0x90, 0x8d, 0xde, 0xee, 0xee, 0xef, 0x76, 0xd7, 0x77, 0x77, 0x7e, 0x27, 0xc4, - 0xd4, 0x4c, 0x45, 0xbb, 0xdd, 0xfe, 0x20, 0xa4, 0xdd, 0xf8, 0x91, 0xe7, 0x6a, 0xb8, 0xe7, 0xb6, - 0xe9, 0xbf, 0xc5, 0x71, 0x5b, 0xbb, 0xf8, 0x88, 0xe9, 0xd8, 0x2d, 0xd5, 0x15, 0xba, 0x49, 0x5d, - 0xfc, 0x48, 0x25, 0x2c, 0x1b, 0x6e, 0xef, 0x9f, 0xbd, 0x71, 0x22, 0x41, 0x51, 0x1b, 0xee, 0xc5, - 0x65, 0xbb, 0x15, 0xbe, 0xee, 0x8e, 0xf1, 0x02, 0x02, 0x9b, 0xb1, 0x58, 0x87, 0x0b, 0x65, 0xb2, - 0xdb, 0xbd, 0xd4, 0xf1, 0xf4, 0xd1, 0xdf, 0x9b, 0x59, 0xbf, 0x8a, 0xa8, 0xba, 0xaa, 0xaa, 0xaf, - 0x10, 0x33, 0x36, 0x55, 0x56, 0xab, 0x55, 0x55, 0xfc, 0x45, 0x55, 0x55, 0x55, 0x57, 0x12, 0x19, - 0xf8, 0x27, 0x2a, 0x5d, 0xf5, 0x5e, 0xe2, 0x42, 0x20, 0x8c, 0x55, 0xd6, 0x8e, 0xf0, 0x80, 0x64, - 0x69, 0x16, 0x96, 0x13, 0xce, 0x47, 0xb0, 0x0d, 0xea, 0x3b, 0xf3, 0xbf, 0xaa, 0x5e, 0xcf, 0x44, - 0xd8, 0xe9, 0x65, 0xdd, 0xbf, 0x0b, 0x61, 0x11, 0x84, 0x54, 0xde, 0x2b, 0x34, 0x98, 0xcf, 0xc6, - 0x48, 0x0a, 0xbb, 0xe6, 0x65, 0x7a, 0xb5, 0x38, 0x80, 0xc8, 0x21, 0x39, 0x19, 0xf5, 0xab, 0x21, - 0x84, 0xec, 0xb6, 0x9f, 0x2f, 0xbb, 0xdd, 0xf8, 0x94, 0x57, 0xf1, 0x00, 0xb8, 0x45, 0xef, 0x8d, - 0x99, 0x29, 0x57, 0xe2, 0x44, 0x21, 0xa8, 0xef, 0x89, 0x54, 0x76, 0xba, 0xf7, 0xc1, 0x14, 0xcc, - 0x4d, 0x7f, 0xc4, 0x09, 0x29, 0x95, 0x55, 0x71, 0x32, 0xd7, 0x5e, 0x20, 0x13, 0xe9, 0xd3, 0xd5, - 0x7b, 0x89, 0x12, 0x08, 0xef, 0x77, 0x7e, 0x26, 0x0b, 0xaf, 0x7a, 0xaa, 0xa8, 0xed, 0xc4, 0x88, - 0x04, 0x65, 0x17, 0x55, 0x5e, 0xfa, 0xf7, 0x11, 0x44, 0xef, 0x84, 0x0f, 0xaa, 0xad, 0x6f, 0x7f, - 0x12, 0x0b, 0xb5, 0x55, 0x77, 0x77, 0xaf, 0x85, 0x25, 0xc4, 0x9c, 0x56, 0x7c, 0x12, 0xe1, 0xef, - 0x2d, 0x8a, 0xdc, 0x56, 0xf6, 0xee, 0xf4, 0x77, 0xe0, 0xa7, 0x6f, 0xb7, 0xa9, 0xe2, 0xf6, 0xe3, - 0xef, 0x82, 0x32, 0xaa, 0xd5, 0x1d, 0xe2, 0x21, 0x3b, 0x9f, 0x3d, 0x34, 0xf0, 0x88, 0x92, 0x45, - 0x65, 0xc7, 0xbc, 0x4c, 0x11, 0x11, 0xf7, 0xa3, 0xbf, 0x09, 0x16, 0xb5, 0x5a, 0xaf, 0x8c, 0x22, - 0xa8, 0xba, 0xad, 0x55, 0x55, 0x55, 0xee, 0xdf, 0xba, 0xaa, 0xae, 0x11, 0x12, 0x33, 0xab, 0x4b, - 0x33, 0x09, 0xad, 0x55, 0xd9, 0xbb, 0xf8, 0x46, 0xaa, 0xaa, 0x2b, 0x8a, 0xdb, 0x55, 0x52, 0x66, - 0x22, 0x30, 0xe2, 0x74, 0x14, 0xe5, 0x29, 0x37, 0x55, 0x95, 0xd5, 0x78, 0x81, 0xa3, 0xa2, 0xea, - 0xa8, 0x74, 0xc3, 0xd5, 0x31, 0x3c, 0x13, 0xc5, 0x16, 0x12, 0xe2, 0xf9, 0x07, 0x63, 0xcd, 0x3b, - 0xfe, 0x20, 0x48, 0x26, 0xb8, 0xac, 0xab, 0xd2, 0xf3, 0xe7, 0x06, 0x2a, 0x52, 0xc3, 0x9c, 0x14, - 0xb4, 0x29, 0xcd, 0xa6, 0x98, 0x3c, 0xfe, 0x10, 0x0c, 0x82, 0x92, 0x26, 0x2b, 0x11, 0xd7, 0xf6, - 0x96, 0x56, 0xf2, 0x7e, 0x4c, 0xc0, 0x77, 0x1c, 0x40, 0x94, 0x5c, 0xbc, 0x47, 0xc1, 0x21, 0xde, - 0xee, 0x8e, 0xf8, 0x80, 0xa0, 0x8b, 0xdd, 0x52, 0x93, 0xd5, 0xdc, 0x4a, 0xa4, 0xbb, 0xc3, 0x8a, - 0xdc, 0x57, 0x5d, 0x93, 0xbc, 0x36, 0x4d, 0xa7, 0x7c, 0x49, 0x5f, 0xfb, 0xf9, 0xa8, 0xb4, 0x54, - 0xa8, 0x98, 0x25, 0x07, 0x2b, 0xf8, 0x26, 0x17, 0x54, 0xf4, 0xae, 0x97, 0x89, 0x10, 0xc8, 0xf7, - 0x7f, 0x5e, 0x38, 0xfd, 0x51, 0xdf, 0x92, 0xaa, 0xab, 0xc4, 0x02, 0x2b, 0xbd, 0xf8, 0xef, 0x89, - 0x58, 0xbe, 0x08, 0x8b, 0xaa, 0xc5, 0xe2, 0x38, 0x8b, 0x33, 0xbb, 0x5e, 0x20, 0x14, 0x56, 0x4e, - 0xf4, 0xdd, 0x34, 0x77, 0x89, 0x97, 0x72, 0xfb, 0xe2, 0x46, 0x6f, 0x7d, 0xdd, 0x77, 0x77, 0x77, - 0x85, 0x99, 0x40, 0x35, 0x50, 0x61, 0x69, 0x9d, 0x45, 0x6a, 0x23, 0x4b, 0xa4, 0x2b, 0x3a, 0xda, - 0xd4, 0x9a, 0xff, 0xc2, 0x90, 0xa8, 0x28, 0x1f, 0xd3, 0x8f, 0x2b, 0xa6, 0x25, 0xa1, 0x22, 0xa7, - 0x24, 0x15, 0xa9, 0x86, 0xb2, 0xa5, 0x5a, 0xa1, 0xac, 0x16, 0xda, 0xc5, 0xa3, 0xb5, 0xcd, 0x55, - 0x55, 0xc2, 0x21, 0x13, 0x6b, 0x5e, 0x26, 0xb8, 0x4a, 0xab, 0x56, 0xf5, 0xf6, 0x45, 0xaf, 0x11, - 0x64, 0xaa, 0xfc, 0x4d, 0x75, 0x8b, 0xa8, 0xbe, 0x11, 0x13, 0xc4, 0x84, 0x46, 0x6a, 0x5c, 0xd4, - 0x5d, 0x55, 0xdd, 0x75, 0xae, 0x24, 0x10, 0x85, 0x0b, 0x25, 0xea, 0x42, 0x09, 0x31, 0x98, 0x74, - 0x82, 0x7f, 0x34, 0x89, 0x82, 0xfc, 0xac, 0xb8, 0x42, 0x34, 0xc7, 0x81, 0x60, 0x99, 0xc1, 0x61, - 0x9c, 0xfb, 0x15, 0xd8, 0xac, 0x69, 0x45, 0x4e, 0x91, 0xa4, 0xac, 0x1d, 0x3e, 0xde, 0x84, 0x01, - 0x50, 0xb6, 0x2b, 0xf7, 0xa9, 0x7f, 0x84, 0xf9, 0x8a, 0xf7, 0x7f, 0x05, 0x82, 0x09, 0xbb, 0xbd, - 0x3b, 0xb8, 0xae, 0x2b, 0x2d, 0xe2, 0x41, 0x49, 0xc9, 0x39, 0xbf, 0x1f, 0xe7, 0x34, 0x7c, 0xb9, - 0x7a, 0xee, 0xee, 0xef, 0xc4, 0x71, 0x02, 0x41, 0x60, 0x8b, 0x58, 0x17, 0x6f, 0xa4, 0xda, 0xc4, - 0x0f, 0x4c, 0xb1, 0xf7, 0x11, 0x0a, 0x0d, 0x0b, 0xc2, 0x13, 0xc5, 0x75, 0xa5, 0x43, 0x6d, 0x9d, - 0xeb, 0x27, 0xe3, 0x97, 0x32, 0xff, 0x5f, 0x13, 0xbb, 0xbd, 0xa6, 0xfc, 0x4f, 0x89, 0xf1, 0x35, - 0xaf, 0x13, 0xf5, 0xef, 0x89, 0xd3, 0xa6, 0xef, 0xfa, 0xd7, 0xc1, 0x11, 0x55, 0x55, 0x78, 0xef, - 0x13, 0x44, 0xe3, 0xbe, 0x24, 0x59, 0x5d, 0xdd, 0xca, 0xc1, 0x58, 0x6b, 0x0d, 0x63, 0x89, 0x08, - 0xf7, 0x71, 0x58, 0xac, 0xb6, 0x2b, 0x77, 0x77, 0xe1, 0x11, 0xd2, 0xf5, 0x66, 0x3a, 0xe2, 0xd2, - 0x91, 0x9a, 0x1e, 0x24, 0x10, 0x84, 0x39, 0x19, 0x3f, 0xf7, 0x7b, 0xbf, 0x12, 0x11, 0x05, 0x7b, - 0xb7, 0x74, 0x34, 0x34, 0x34, 0x37, 0x77, 0x74, 0x76, 0xa2, 0x44, 0x82, 0x3a, 0xd5, 0x51, 0xde, - 0x26, 0x23, 0x55, 0x51, 0x71, 0x72, 0x63, 0x33, 0xdc, 0x5c, 0x9e, 0x63, 0xf4, 0x41, 0xdb, 0xc4, - 0xf1, 0x1f, 0x96, 0xaa, 0xbe, 0x20, 0x51, 0xab, 0x55, 0x55, 0x5e, 0x20, 0x20, 0x25, 0xf7, 0xd5, - 0x5a, 0xa5, 0xf0, 0x55, 0x55, 0xc4, 0xf1, 0xd8, 0x4c, 0x66, 0x6a, 0x2e, 0xfe, 0x20, 0xc4, 0x25, - 0x15, 0x57, 0x82, 0x90, 0x4f, 0x51, 0x1b, 0x5e, 0x8a, 0x2a, 0xfd, 0x78, 0x31, 0x0a, 0x45, 0xf3, - 0x7d, 0x54, 0x56, 0x5e, 0x3b, 0x75, 0x8e, 0x17, 0x14, 0x32, 0xf1, 0x4f, 0xa7, 0x80, 0x00, 0x00, - 0x00, 0x01, 0x41, 0x9a, 0x19, 0x0c, 0xb0, 0x4a, 0x0d, 0xe0, 0x41, 0x41, 0x1e, 0x83, 0x50, 0xf2, - 0x14, 0x00, 0x21, 0xef, 0xea, 0x66, 0xbb, 0xdf, 0xff, 0xc5, 0x5f, 0x2b, 0xeb, 0xde, 0x19, 0x94, - 0x37, 0xef, 0xfc, 0x1b, 0x5c, 0x52, 0xfb, 0xf2, 0x09, 0x60, 0xd6, 0x18, 0x02, 0x08, 0x50, 0x52, - 0xaa, 0xaa, 0x91, 0x95, 0x95, 0x55, 0x59, 0x32, 0x2b, 0xf7, 0x0c, 0x03, 0x90, 0x81, 0xa4, 0xb3, - 0x89, 0x3d, 0x4f, 0x39, 0x14, 0xc9, 0xe5, 0xe9, 0xe0, 0xc3, 0x06, 0x81, 0xd4, 0x13, 0x08, 0xd8, - 0x1e, 0xb1, 0xde, 0xda, 0x6f, 0xfe, 0x00, 0x47, 0x75, 0xdd, 0xef, 0x89, 0x07, 0x28, 0x29, 0xdc, - 0x40, 0x31, 0x89, 0xe8, 0x2e, 0x3e, 0xf0, 0xca, 0xb1, 0xf0, 0x47, 0x6e, 0x27, 0x9e, 0x82, 0xac, - 0x40, 0x50, 0x28, 0xa9, 0xd5, 0xb8, 0xf6, 0x93, 0x17, 0x51, 0x7d, 0x42, 0x83, 0x56, 0x3b, 0x20, - 0x70, 0xc8, 0xcd, 0x49, 0xf5, 0xd4, 0xe0, 0xf8, 0x80, 0x0f, 0x27, 0x52, 0x7d, 0x70, 0x51, 0x9b, - 0x82, 0x41, 0xfa, 0x43, 0x79, 0x3f, 0x12, 0x24, 0x16, 0x0e, 0xcb, 0x82, 0x1a, 0x47, 0x5f, 0x71, - 0x33, 0x91, 0xc7, 0xa7, 0x99, 0xee, 0x7d, 0xf8, 0x20, 0x0c, 0x84, 0x7b, 0x63, 0x5f, 0x23, 0x37, - 0xdb, 0x91, 0x5e, 0x10, 0x12, 0x3f, 0x97, 0xae, 0x29, 0x89, 0x0e, 0x44, 0x1c, 0x37, 0x98, 0x79, - 0x84, 0x40, 0x06, 0x46, 0xbe, 0x96, 0xf5, 0x83, 0xfe, 0xdf, 0xa3, 0x1c, 0x9f, 0xf5, 0xfe, 0xe0, - 0xaa, 0x20, 0x30, 0x0a, 0x87, 0x4d, 0xe6, 0xea, 0xea, 0xe3, 0x19, 0xa9, 0x32, 0x40, 0x68, 0xe4, - 0xed, 0x45, 0x8d, 0xfc, 0x71, 0x17, 0x99, 0xb9, 0x66, 0xa2, 0x4f, 0xad, 0x5f, 0xfe, 0x24, 0x48, - 0xf0, 0xce, 0xb5, 0x95, 0xcb, 0xcc, 0x14, 0xea, 0xb2, 0xc4, 0x89, 0x31, 0xa8, 0x9b, 0x4f, 0x11, - 0x09, 0x0a, 0xb6, 0x9a, 0xaa, 0xaf, 0x88, 0x29, 0xee, 0x65, 0xfd, 0x52, 0xc2, 0x21, 0x0e, 0x10, - 0x08, 0x89, 0xcb, 0x83, 0x99, 0x20, 0x9e, 0x90, 0xa4, 0x4b, 0x98, 0x2b, 0x88, 0x05, 0x20, 0xb2, - 0xb9, 0x3d, 0x6b, 0x57, 0x4c, 0xbe, 0x5c, 0x48, 0x44, 0x64, 0x55, 0x9b, 0x5b, 0x67, 0x7d, 0x99, - 0x80, 0x6b, 0xe0, 0xef, 0x6f, 0x73, 0x38, 0x2f, 0x93, 0x1d, 0x72, 0x63, 0x10, 0x26, 0x4e, 0x4b, - 0xed, 0x78, 0xe2, 0x16, 0xc7, 0xbb, 0xe5, 0x7d, 0xdf, 0x13, 0x43, 0x5f, 0xc4, 0x0a, 0x26, 0xab, - 0x59, 0x73, 0xc8, 0x22, 0xeb, 0x05, 0x5d, 0x05, 0xde, 0xa1, 0x00, 0x88, 0xa0, 0x85, 0xd0, 0xca, - 0x4d, 0xf7, 0x5c, 0x48, 0x29, 0x29, 0x1e, 0xfc, 0x40, 0x92, 0xef, 0x15, 0xbc, 0x20, 0x09, 0x05, - 0xcb, 0x28, 0x74, 0xd3, 0x57, 0xca, 0x31, 0xde, 0xfc, 0x40, 0x2a, 0x08, 0x9f, 0xf5, 0x17, 0xad, - 0x57, 0xec, 0x72, 0x8f, 0xa1, 0xf7, 0x84, 0x42, 0x21, 0x0a, 0xae, 0xb5, 0xc4, 0x9c, 0xf1, 0x00, - 0x94, 0x26, 0x7c, 0x64, 0x73, 0x9a, 0xae, 0xd0, 0x59, 0x10, 0x24, 0x28, 0x21, 0x55, 0x55, 0x6a, - 0x80, 0x95, 0x55, 0x56, 0xa4, 0x48, 0x31, 0xbc, 0x10, 0x85, 0x0d, 0x0b, 0xac, 0x6e, 0x2b, 0x22, - 0xfa, 0xbc, 0xbf, 0xca, 0xa8, 0xba, 0xb1, 0xe0, 0xa4, 0x66, 0x7e, 0x9d, 0x6b, 0x5d, 0xb7, 0x3f, - 0x5c, 0xfd, 0x04, 0xdb, 0xe6, 0x37, 0x1b, 0xfa, 0xe2, 0x44, 0x1f, 0xd8, 0xef, 0x7f, 0x9b, 0xc3, - 0x83, 0xd8, 0x44, 0x22, 0x12, 0x36, 0xab, 0x5d, 0x71, 0x02, 0x47, 0x15, 0x41, 0x8a, 0xa3, 0x92, - 0x35, 0x8f, 0x2f, 0x98, 0x32, 0x07, 0x91, 0x6b, 0x1a, 0x2c, 0xfb, 0x05, 0x98, 0x94, 0x2d, 0xfc, - 0x10, 0x23, 0x37, 0x86, 0x46, 0x08, 0xaa, 0xa8, 0xba, 0x6b, 0x5d, 0xeb, 0x5e, 0x08, 0x04, 0x94, - 0x1e, 0x7c, 0x74, 0xf8, 0x45, 0xd4, 0xb4, 0xf9, 0x28, 0x34, 0x83, 0x38, 0x58, 0x7f, 0xe2, 0x3e, - 0x0a, 0x05, 0xaa, 0xaa, 0x9b, 0xcf, 0x3c, 0x49, 0xc7, 0xf1, 0x24, 0x1d, 0x15, 0xbf, 0x89, 0x31, - 0xef, 0x06, 0xfa, 0x70, 0x8f, 0xc4, 0xc3, 0xa2, 0xc9, 0x0c, 0xdb, 0xf4, 0xd4, 0x88, 0x39, 0x27, - 0xe2, 0x04, 0x41, 0x60, 0x75, 0x0b, 0x01, 0x37, 0xd9, 0xd4, 0xf7, 0xf7, 0x7b, 0x29, 0xfd, 0x81, - 0x8e, 0xa9, 0xc5, 0xeb, 0xc2, 0x7b, 0x5a, 0xfe, 0x24, 0x08, 0x23, 0x06, 0x2a, 0xaa, 0xa8, 0xd2, - 0x62, 0x8c, 0xa6, 0x6d, 0xc1, 0x03, 0x8a, 0x62, 0xad, 0x60, 0xe1, 0xf8, 0x59, 0x79, 0x89, 0x06, - 0x01, 0x49, 0x6b, 0x55, 0xf9, 0x97, 0xaa, 0x62, 0xe6, 0x09, 0xb1, 0x2a, 0x1e, 0x70, 0x72, 0x78, - 0x1e, 0x62, 0x52, 0xa8, 0xb2, 0x2e, 0xc9, 0x80, 0x00, 0x87, 0x88, 0x83, 0x04, 0x8d, 0xee, 0x20, - 0x48, 0x2b, 0x9c, 0x2c, 0x64, 0x80, 0xd1, 0x0a, 0x98, 0xae, 0xac, 0x9c, 0xc5, 0xa9, 0x20, 0x0e, - 0x83, 0x90, 0x3c, 0x03, 0x2c, 0xf8, 0x70, 0x15, 0xc1, 0xc7, 0xd7, 0x38, 0x80, 0x62, 0x2e, 0x5b, - 0x71, 0xdf, 0x2a, 0x2e, 0x17, 0x0f, 0x70, 0x75, 0xe6, 0x18, 0x05, 0x21, 0x23, 0x40, 0x71, 0x71, - 0x26, 0x00, 0xf5, 0xf2, 0xc6, 0x4f, 0xf5, 0x5f, 0xfd, 0x7b, 0xba, 0xe2, 0x04, 0x84, 0x04, 0xcf, - 0x98, 0xbd, 0x2f, 0x0a, 0x28, 0x58, 0x81, 0x21, 0x11, 0x12, 0xdb, 0xbc, 0x57, 0x6e, 0xf5, 0xf8, - 0x81, 0xe5, 0xc0, 0x85, 0xb6, 0x64, 0x65, 0x99, 0xec, 0xc5, 0x55, 0xe1, 0x88, 0x2c, 0xc4, 0x84, - 0x0d, 0xb6, 0x45, 0xdb, 0x62, 0xed, 0xc1, 0x1b, 0xdd, 0xd7, 0x02, 0x00, 0x16, 0x41, 0x56, 0x35, - 0x4b, 0x59, 0xee, 0xaa, 0x94, 0x99, 0x14, 0xb9, 0x7e, 0x0a, 0x04, 0x82, 0xab, 0x3f, 0x38, 0xbe, - 0x2f, 0x5b, 0xf8, 0x64, 0x61, 0x0f, 0x07, 0xe2, 0xb7, 0x1b, 0xc5, 0xcb, 0x22, 0xfb, 0x97, 0x77, - 0x76, 0xef, 0xe1, 0x11, 0xf3, 0xcd, 0x98, 0x4c, 0xe6, 0x55, 0x5e, 0xfe, 0x11, 0x18, 0x52, 0xfa, - 0xdc, 0xb6, 0x2b, 0x14, 0x77, 0xbb, 0xbf, 0x89, 0x8e, 0xe8, 0x1b, 0x8a, 0xde, 0xea, 0x25, 0xcb, - 0x5f, 0x8c, 0x11, 0x8a, 0xf6, 0xa8, 0x75, 0x74, 0x1f, 0x53, 0xce, 0x1c, 0x58, 0x2b, 0x0a, 0x8a, - 0xf2, 0xeb, 0xf8, 0x21, 0x1e, 0x78, 0xf0, 0xc7, 0xee, 0xe2, 0x7e, 0x5f, 0xde, 0x18, 0x89, 0xe8, - 0x6e, 0xa1, 0xce, 0x8d, 0x84, 0x44, 0x14, 0x03, 0x11, 0x81, 0x0a, 0xc4, 0xf2, 0x56, 0x39, 0xb9, - 0x7a, 0xa9, 0x35, 0xc7, 0xfe, 0xf8, 0x20, 0x05, 0x91, 0x59, 0x6c, 0x56, 0x2b, 0x73, 0x60, 0x5e, - 0xa3, 0x4a, 0xfb, 0x8e, 0x04, 0x7c, 0x07, 0x08, 0xb9, 0x47, 0x70, 0xcc, 0x48, 0x00, 0x3d, 0x62, - 0xa4, 0x6f, 0x23, 0x82, 0x74, 0x27, 0xff, 0xc9, 0x93, 0xa7, 0x32, 0xb9, 0x7e, 0x39, 0x7c, 0xbf, - 0xe2, 0x75, 0x88, 0x82, 0x12, 0x0a, 0xc5, 0x18, 0xac, 0x56, 0xfc, 0x48, 0x40, 0x45, 0x6b, 0xe5, - 0xcc, 0x4c, 0x20, 0x5c, 0x56, 0x2b, 0x77, 0xdf, 0x7c, 0x44, 0xd7, 0x77, 0x7c, 0x40, 0x65, 0x8c, - 0xcd, 0x70, 0x50, 0x18, 0xfa, 0x0b, 0xf4, 0x16, 0xc2, 0x20, 0xc0, 0x15, 0x05, 0x2f, 0x73, 0x87, - 0x94, 0x47, 0x4b, 0x3d, 0x86, 0xaa, 0xfc, 0x48, 0x29, 0x0a, 0x4b, 0x18, 0x79, 0x00, 0xd4, 0xf5, - 0x84, 0x40, 0x00, 0x4d, 0x58, 0xf0, 0x00, 0x2f, 0x87, 0x80, 0x01, 0x3c, 0x34, 0x40, 0xe9, 0xc7, - 0x80, 0x30, 0x47, 0x47, 0x2d, 0x09, 0x45, 0x9b, 0x61, 0x67, 0xdc, 0x6a, 0x47, 0x6c, 0x2d, 0xa4, - 0xf1, 0xc8, 0x41, 0xa6, 0x54, 0xe1, 0xd0, 0x7b, 0xbf, 0xc6, 0x4f, 0x00, 0x1e, 0x7b, 0xcb, 0x00, - 0x67, 0x8f, 0x10, 0xf1, 0x41, 0xb7, 0x96, 0x03, 0x27, 0x1c, 0x8b, 0x76, 0x2b, 0x2e, 0xc5, 0x18, - 0xb6, 0xf8, 0x40, 0x32, 0x09, 0x8b, 0xaa, 0xad, 0x7d, 0xe2, 0x02, 0x5b, 0xbb, 0xde, 0xfc, 0x40, - 0xc2, 0x8a, 0x31, 0x46, 0x2b, 0x14, 0x69, 0x45, 0x6e, 0xef, 0xb8, 0xae, 0xfc, 0x20, 0x2e, 0x2b, - 0x77, 0x7d, 0xdf, 0x89, 0x14, 0x21, 0x22, 0xb1, 0x7b, 0xbb, 0xf0, 0x42, 0x12, 0x1f, 0xaa, 0x8b, - 0x8b, 0xb7, 0x05, 0xb0, 0x8c, 0x5f, 0x3a, 0xf9, 0x7a, 0x77, 0xc1, 0x08, 0xa1, 0x5a, 0x6d, 0xc7, - 0x72, 0x7a, 0xb8, 0x81, 0x86, 0x16, 0xb5, 0x18, 0x10, 0xc4, 0x04, 0xa9, 0x74, 0x2a, 0x2e, 0x9e, - 0x10, 0x36, 0x31, 0x6b, 0x63, 0xe1, 0x13, 0xb8, 0x7e, 0x11, 0x3e, 0xa4, 0xa1, 0x71, 0x01, 0x2a, - 0x6e, 0xfa, 0x14, 0x7a, 0xe7, 0xc4, 0x7c, 0x64, 0x1a, 0xae, 0x0b, 0xc9, 0x29, 0x33, 0x20, 0xbc, - 0x78, 0xf1, 0x07, 0xa7, 0x95, 0x4a, 0xb0, 0xe8, 0x6c, 0x6a, 0x0e, 0xda, 0xa6, 0x15, 0xbb, 0x0a, - 0xef, 0xed, 0xfb, 0xd7, 0x4b, 0xfb, 0x39, 0xa8, 0xcf, 0xf1, 0x02, 0x04, 0xbb, 0xef, 0x7a, 0xe8, - 0x67, 0x70, 0x50, 0x0a, 0x41, 0x30, 0x5d, 0x37, 0x4d, 0xf5, 0x4c, 0x44, 0x54, 0x15, 0xc4, 0xc1, - 0x68, 0x89, 0x97, 0xd6, 0xab, 0xfe, 0x18, 0x06, 0x24, 0x24, 0x3d, 0x4c, 0xfc, 0x49, 0x6b, 0xaf, - 0x82, 0xdb, 0xb2, 0x54, 0x4d, 0x32, 0x52, 0x24, 0x72, 0xb8, 0x29, 0xdd, 0xef, 0x97, 0xbb, 0xdd, - 0xfe, 0x43, 0x16, 0x50, 0x16, 0xd3, 0xaa, 0x29, 0x4d, 0xff, 0x27, 0x49, 0xdf, 0x5e, 0xf8, 0x28, - 0x23, 0xbd, 0xf1, 0x5f, 0xb0, 0x8b, 0x0c, 0x84, 0x1f, 0x6a, 0x4c, 0xb5, 0xf8, 0x29, 0x89, 0x12, - 0x08, 0xcd, 0x88, 0xb1, 0xbf, 0x08, 0x02, 0x1a, 0xe5, 0x18, 0xee, 0xff, 0x1e, 0x66, 0xe5, 0xcf, - 0x05, 0xb2, 0x0b, 0x05, 0xf7, 0xf5, 0xa6, 0x3c, 0xbe, 0xda, 0x9f, 0x0d, 0xc8, 0x35, 0xdb, 0x7f, - 0x10, 0x09, 0x45, 0x4b, 0x97, 0x66, 0x2c, 0xaf, 0x71, 0x00, 0x87, 0x82, 0x80, 0x8a, 0x0b, 0xf6, - 0x2d, 0x17, 0xd1, 0x87, 0x78, 0x67, 0x8b, 0x09, 0x3b, 0xf7, 0xbe, 0x0c, 0x44, 0xab, 0xf1, 0x01, - 0x10, 0x48, 0x67, 0x41, 0x0a, 0xe3, 0x37, 0x10, 0x24, 0x17, 0x14, 0x43, 0x01, 0x5b, 0xba, 0xba, - 0xab, 0x1c, 0x40, 0x9f, 0x10, 0x3f, 0xbb, 0xbb, 0x61, 0x46, 0xac, 0xf7, 0x16, 0x2f, 0xe1, 0x23, - 0x5f, 0x9e, 0xaa, 0xb8, 0x22, 0x1a, 0xb5, 0xf5, 0x74, 0x57, 0xac, 0x4d, 0x44, 0x89, 0x28, 0x87, - 0x7f, 0xc8, 0x21, 0xd2, 0xf1, 0x21, 0x93, 0x5e, 0xef, 0xc1, 0x4f, 0x02, 0x80, 0x46, 0x08, 0xe1, - 0x18, 0xb1, 0x6f, 0x7f, 0x2e, 0x70, 0x88, 0xa2, 0x6e, 0x7c, 0xd2, 0x2e, 0x60, 0x80, 0x32, 0x13, - 0x23, 0xb5, 0xe5, 0xee, 0x73, 0xf1, 0x31, 0x17, 0x3e, 0x7d, 0x37, 0xc4, 0x88, 0x10, 0x77, 0xbd, - 0x57, 0xe1, 0x12, 0xd6, 0xbc, 0x48, 0x91, 0x62, 0x39, 0x7c, 0x0d, 0xcf, 0x82, 0xfb, 0x13, 0x2d, - 0x8f, 0x91, 0x71, 0x21, 0x22, 0x5e, 0xf2, 0xa7, 0xb6, 0xbc, 0x49, 0xd9, 0x36, 0x6d, 0xc4, 0x71, - 0x0e, 0x48, 0x71, 0x3c, 0x4d, 0x09, 0xe9, 0x71, 0x08, 0xbd, 0xe2, 0x7e, 0x09, 0x4c, 0x92, 0x5d, - 0xd6, 0xfc, 0x4c, 0x82, 0xb5, 0x36, 0x70, 0xcf, 0x04, 0x01, 0x12, 0x8b, 0xcf, 0x28, 0x21, 0xe6, - 0x29, 0xf1, 0xe2, 0x1f, 0xc2, 0x20, 0x8c, 0xcb, 0x8b, 0xf3, 0xe3, 0xe3, 0x1d, 0x1b, 0x33, 0x7b, - 0xf5, 0x4b, 0xc7, 0xdd, 0xde, 0xdb, 0x35, 0xea, 0xa9, 0xb9, 0x7f, 0x08, 0xba, 0xaa, 0xf1, 0x21, - 0x0f, 0x8b, 0xaa, 0xad, 0x77, 0xf0, 0x54, 0x65, 0x95, 0x5d, 0x9c, 0x8c, 0x33, 0xae, 0xb6, 0x71, - 0x32, 0x5e, 0xab, 0x89, 0x93, 0x24, 0x67, 0x87, 0x10, 0x24, 0xb5, 0x4e, 0x12, 0xd6, 0x35, 0x0e, - 0x7c, 0x48, 0xb1, 0x37, 0xbc, 0xb4, 0xf8, 0x9f, 0x84, 0x6f, 0xbb, 0xbb, 0xbb, 0xbb, 0xbe, 0x24, - 0x4a, 0xbf, 0xc2, 0x57, 0xbb, 0xbb, 0xdd, 0x44, 0x89, 0xcf, 0x38, 0x24, 0x75, 0x4b, 0x12, 0x11, - 0x46, 0x7e, 0x11, 0x12, 0x42, 0x49, 0x97, 0xc1, 0x80, 0x80, 0x52, 0x28, 0xfe, 0x03, 0xb6, 0xc5, - 0x9f, 0x1f, 0x77, 0xc8, 0x8e, 0xb0, 0x60, 0x24, 0x28, 0x71, 0x03, 0x82, 0xb1, 0x5b, 0xbb, 0x9f, - 0x1f, 0x8f, 0x8b, 0xe2, 0x98, 0xb9, 0x17, 0x04, 0x10, 0x8c, 0x98, 0xad, 0x5f, 0x04, 0x01, 0x9e, - 0x20, 0x22, 0x62, 0xac, 0x5c, 0x5f, 0x89, 0x14, 0x4e, 0x56, 0x2e, 0xee, 0xa2, 0x44, 0x90, 0xea, - 0xaa, 0xbc, 0x48, 0x22, 0x33, 0xbf, 0xde, 0x24, 0x79, 0x2f, 0x55, 0x7b, 0x6f, 0x77, 0xe2, 0x4c, - 0x7b, 0x76, 0xfc, 0x14, 0xed, 0xdb, 0xd5, 0x5d, 0xf7, 0xa8, 0x90, 0xcf, 0x08, 0x89, 0xe2, 0x3f, - 0x09, 0x9d, 0xee, 0xf7, 0x77, 0xe1, 0x9b, 0xc4, 0x82, 0x4d, 0xde, 0xf5, 0x84, 0x59, 0x2a, 0xbc, - 0x1c, 0x83, 0x90, 0x45, 0x77, 0xfb, 0x83, 0x09, 0x04, 0x6a, 0xb8, 0x30, 0x12, 0x08, 0x6f, 0x6c, - 0xbc, 0x6b, 0x7c, 0xfd, 0x53, 0x4d, 0xdb, 0xf0, 0xf4, 0x20, 0x0e, 0x42, 0xa5, 0x3f, 0xdd, 0xef, - 0x08, 0x43, 0x72, 0xa1, 0x55, 0x77, 0xff, 0xf1, 0x2c, 0xae, 0xfe, 0x24, 0x47, 0xc5, 0x88, 0xad, - 0x56, 0xbe, 0x19, 0x30, 0x95, 0x5f, 0x13, 0xf9, 0x4d, 0x7b, 0xe2, 0x26, 0xd6, 0xab, 0xa1, 0x2f, - 0xf0, 0x44, 0x5b, 0xdd, 0xf8, 0x99, 0x89, 0x7b, 0xc3, 0x4c, 0xe0, 0x13, 0xbd, 0x21, 0x86, 0xd1, - 0xf6, 0x7f, 0xfb, 0x9c, 0x20, 0x20, 0x41, 0x1c, 0x56, 0xef, 0x4d, 0x57, 0x89, 0x04, 0x24, 0x7b, - 0xbd, 0x78, 0x81, 0x25, 0x7b, 0xd5, 0x55, 0x56, 0x27, 0xc4, 0xb3, 0x2d, 0x57, 0x13, 0x12, 0x7a, - 0xa5, 0xc5, 0x6f, 0xe3, 0x0b, 0x7b, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xa8, 0x31, 0x07, 0x3c, - 0x18, 0x08, 0x09, 0x0e, 0x17, 0x17, 0x5e, 0x2e, 0xb8, 0x30, 0x8f, 0x8b, 0x88, 0xf3, 0x72, 0xfb, - 0xb8, 0xae, 0xeb, 0xc4, 0xe1, 0xc8, 0x88, 0x5f, 0x37, 0xd5, 0x52, 0x83, 0x4c, 0x64, 0x9d, 0xfd, - 0x62, 0x7c, 0x4d, 0x44, 0xc1, 0x09, 0xc9, 0xdb, 0xd3, 0xf1, 0x01, 0x01, 0x57, 0xbb, 0xde, 0xf8, - 0x81, 0x03, 0xea, 0x5f, 0x71, 0x58, 0x5d, 0x5d, 0x71, 0xf4, 0x09, 0xaf, 0x41, 0x89, 0xfc, 0x12, - 0x5f, 0x77, 0xa8, 0x91, 0x3c, 0x40, 0x29, 0xf0, 0x11, 0x01, 0x41, 0x22, 0x80, 0x0c, 0x48, 0x0f, - 0x14, 0x06, 0x58, 0x37, 0x06, 0x35, 0x25, 0x15, 0x41, 0x41, 0x8a, 0x03, 0x15, 0x8a, 0x36, 0xcf, - 0x3c, 0x51, 0xab, 0xa3, 0xf1, 0x01, 0x16, 0x6b, 0x7b, 0x75, 0x89, 0x45, 0x7e, 0x26, 0x08, 0x4a, - 0xaa, 0xaa, 0xf7, 0x89, 0x05, 0x62, 0xb6, 0x9d, 0x26, 0xa9, 0x3b, 0xa4, 0xff, 0xf8, 0x44, 0x4b, - 0xbb, 0xb8, 0xac, 0x56, 0x2b, 0x15, 0xbb, 0xbb, 0xf8, 0x8b, 0xbb, 0xdd, 0xfc, 0x4d, 0xe5, 0xa7, - 0x83, 0x10, 0x20, 0xf0, 0x60, 0x24, 0x11, 0x0c, 0x6c, 0x28, 0xac, 0x95, 0xaa, 0x0e, 0x20, 0x32, - 0x36, 0x78, 0x0e, 0x0a, 0x0c, 0x94, 0x1b, 0x85, 0x8c, 0xfc, 0x4b, 0x95, 0x93, 0x54, 0xf0, 0xe1, - 0x5e, 0xa2, 0x43, 0xd1, 0x00, 0x78, 0xa2, 0xd4, 0xb0, 0xdd, 0xb9, 0x2a, 0x50, 0xcb, 0x1d, 0x06, - 0x5f, 0x6a, 0xd1, 0x59, 0x5f, 0x0e, 0x44, 0xc1, 0x65, 0xdf, 0xab, 0x35, 0xaa, 0xae, 0xbc, 0x49, - 0x8b, 0x5a, 0xe2, 0x7f, 0x25, 0xef, 0xf3, 0x19, 0x77, 0xc4, 0xfe, 0x43, 0xdd, 0xdf, 0x10, 0x20, - 0x7f, 0x8a, 0xdf, 0x71, 0x5b, 0x8a, 0xc5, 0x62, 0x8f, 0xc1, 0x35, 0xb5, 0x3b, 0x39, 0x6c, 0x56, - 0xe2, 0xbe, 0xf1, 0x00, 0x93, 0xcb, 0xdf, 0x89, 0x0c, 0x8c, 0x2e, 0xe2, 0xb7, 0xbb, 0x85, 0xdf, - 0x1e, 0xe5, 0xd6, 0x5b, 0x12, 0xe3, 0xfc, 0x48, 0x24, 0x25, 0xdd, 0xeb, 0x89, 0x12, 0x14, 0x2a, - 0xae, 0xe2, 0xb4, 0xc5, 0x63, 0xad, 0x61, 0xb1, 0x9b, 0x3e, 0x2b, 0xf5, 0xda, 0x3b, 0xc1, 0x44, - 0xa4, 0xbb, 0xf8, 0x80, 0x91, 0x56, 0xb7, 0xbf, 0x89, 0xf9, 0x75, 0xab, 0xc4, 0x02, 0xcd, 0xdf, - 0x77, 0x77, 0x7b, 0xbf, 0x08, 0x09, 0x11, 0x3f, 0xa8, 0x60, 0xc6, 0x5c, 0xa0, 0x62, 0xb6, 0xf0, - 0x84, 0x15, 0x6f, 0x71, 0x58, 0xad, 0xc5, 0x77, 0xbb, 0xf1, 0x15, 0x7e, 0x26, 0xa8, 0xef, 0x13, - 0xe2, 0x41, 0x89, 0xab, 0x5e, 0x20, 0x32, 0x41, 0x5b, 0xbc, 0x4f, 0xc3, 0x6c, 0xa0, 0x00, 0xf4, - 0xc9, 0xa9, 0xc8, 0x15, 0xee, 0x9f, 0xf2, 0x1d, 0x8c, 0x7c, 0x94, 0x83, 0x08, 0xfb, 0x76, 0xde, - 0x18, 0x3d, 0x1d, 0x15, 0xa2, 0x01, 0xd8, 0x68, 0x36, 0x43, 0xc3, 0x5c, 0x16, 0x55, 0xd8, 0xfc, - 0xb8, 0x86, 0x1c, 0x1c, 0x80, 0xa3, 0x5a, 0x69, 0x68, 0xf8, 0x03, 0x5f, 0x38, 0x40, 0x14, 0x84, - 0xe2, 0x5c, 0xfd, 0x34, 0xb1, 0x37, 0x77, 0xf8, 0x8a, 0x89, 0xdc, 0x40, 0x64, 0x97, 0x7f, 0x84, - 0x41, 0x2d, 0xde, 0xef, 0x7b, 0xf1, 0x31, 0x17, 0x7d, 0xef, 0xc4, 0x89, 0x57, 0xe2, 0x42, 0x21, - 0x42, 0xac, 0x5f, 0x7b, 0xee, 0xee, 0x2b, 0x77, 0xbf, 0x02, 0xc4, 0x15, 0x8b, 0x3c, 0x01, 0xe7, - 0x8f, 0x2c, 0x00, 0x67, 0xbc, 0x56, 0x7b, 0x8f, 0x59, 0xf0, 0x3b, 0x96, 0x2f, 0x3c, 0x3d, 0xf8, - 0x64, 0x43, 0x10, 0xee, 0xef, 0x89, 0x12, 0x6a, 0xaa, 0xf8, 0x95, 0x1d, 0xb8, 0x91, 0x3f, 0x29, - 0x96, 0xbf, 0x15, 0xbb, 0xef, 0x7f, 0x18, 0x7d, 0xd2, 0x70, 0xd3, 0xe7, 0x2d, 0x8a, 0xdc, 0x57, - 0x12, 0xb0, 0x7a, 0xc3, 0xfc, 0x20, 0x10, 0xdd, 0xf6, 0xfc, 0xbe, 0x5f, 0xc4, 0x02, 0x8e, 0xef, - 0xbb, 0xa3, 0xb8, 0x59, 0x14, 0x09, 0xdf, 0x80, 0xd4, 0x21, 0x3f, 0xd3, 0xd3, 0xb6, 0xdc, 0x9f, - 0x89, 0xe2, 0x3c, 0x4c, 0x12, 0x13, 0x55, 0x47, 0x78, 0x89, 0x2b, 0x5f, 0x07, 0x20, 0x88, 0x64, - 0x5e, 0x2e, 0x5b, 0x88, 0x12, 0x34, 0x5a, 0x8a, 0xc4, 0x7c, 0x67, 0xe4, 0xf5, 0xb3, 0xd4, 0x1a, - 0x05, 0x14, 0x51, 0xf9, 0xdc, 0xa3, 0x62, 0x08, 0x89, 0xdc, 0x58, 0x08, 0x7c, 0x1e, 0x0f, 0xbf, - 0x86, 0x39, 0x89, 0xa6, 0x32, 0xb8, 0x80, 0x42, 0x37, 0x0a, 0x00, 0xaa, 0x8f, 0x1f, 0x7c, 0x07, - 0xd4, 0x55, 0x6b, 0x97, 0x32, 0x88, 0xf1, 0xed, 0xde, 0x0d, 0xc9, 0x3f, 0xf1, 0x02, 0x7e, 0x08, - 0x4b, 0x77, 0xbf, 0x12, 0x25, 0x6b, 0xe4, 0xbd, 0xef, 0x08, 0x16, 0x21, 0x83, 0x1b, 0x69, 0xf1, - 0x00, 0x9e, 0xee, 0xef, 0x77, 0xbf, 0xc1, 0x19, 0x5d, 0xdd, 0xd2, 0xae, 0x24, 0x15, 0xea, 0xf7, - 0xbd, 0xdd, 0xc5, 0x68, 0xef, 0x11, 0x14, 0x47, 0x15, 0x8a, 0xc5, 0x18, 0xac, 0x56, 0xef, 0x83, - 0x01, 0x21, 0x41, 0x67, 0x50, 0xdf, 0x97, 0xd6, 0x29, 0xd6, 0x2e, 0x2b, 0xb6, 0x95, 0x94, 0x4f, - 0x05, 0xd3, 0xf0, 0x88, 0x60, 0x82, 0x1f, 0x7e, 0x11, 0x9b, 0xaa, 0xf0, 0x8f, 0x13, 0xae, 0x08, - 0x8c, 0xfb, 0xf7, 0x89, 0x04, 0x45, 0x8a, 0xe5, 0xf7, 0xf1, 0x21, 0x4b, 0xbe, 0xee, 0xee, 0xee, - 0xfb, 0xbd, 0xdf, 0x89, 0x82, 0xd9, 0xf2, 0xf7, 0x77, 0x77, 0xe2, 0x21, 0x32, 0xbd, 0xee, 0x74, - 0x97, 0xe2, 0x41, 0x5d, 0xdd, 0xde, 0xf7, 0xb3, 0x77, 0x47, 0x78, 0x98, 0x23, 0xdd, 0xe8, 0xef, - 0xd5, 0xfe, 0x2a, 0xaa, 0xaa, 0xaa, 0xbc, 0x44, 0xb5, 0xd7, 0x13, 0xe0, 0x82, 0x30, 0x63, 0x7b, - 0xfd, 0xc5, 0x38, 0x92, 0xc3, 0xde, 0xe7, 0x9f, 0x7b, 0xf9, 0x4a, 0x94, 0xfe, 0x16, 0xe0, 0x93, - 0xbb, 0xd7, 0x12, 0x11, 0x0a, 0x08, 0x7b, 0xea, 0xd9, 0x27, 0x5b, 0xb6, 0x0d, 0x4c, 0xc7, 0x2f, - 0x72, 0xdd, 0x71, 0x02, 0x42, 0x65, 0x7f, 0x5f, 0x5a, 0xf8, 0x2b, 0x3a, 0xd7, 0x75, 0xe9, 0xb7, - 0x5c, 0x22, 0x10, 0x08, 0x5e, 0xf7, 0x6d, 0x37, 0x97, 0x22, 0xbf, 0x45, 0x7f, 0x10, 0xaf, 0x5c, - 0xb5, 0xaf, 0x13, 0x62, 0x2f, 0x7c, 0x22, 0x18, 0x18, 0x2e, 0xee, 0xf7, 0x4d, 0xf1, 0x7b, 0xbb, - 0xb5, 0xe1, 0x4b, 0xbb, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0x8e, 0xf8, 0x20, 0x0a, 0x50, 0xef, - 0xe6, 0xc7, 0x1d, 0xc6, 0x3b, 0x89, 0xcf, 0x8f, 0xe2, 0x06, 0x5d, 0xef, 0x7b, 0xbb, 0xdd, 0xcf, - 0xdd, 0xff, 0x04, 0x21, 0x00, 0x43, 0xbb, 0xba, 0x3b, 0xc4, 0xd5, 0x1d, 0xe1, 0x1a, 0x27, 0x57, - 0x35, 0xdd, 0xdd, 0xf2, 0x5d, 0xdf, 0xe4, 0xdd, 0xfc, 0x32, 0x08, 0xef, 0x7d, 0x71, 0x22, 0x42, - 0x25, 0x77, 0x77, 0x7b, 0xbb, 0xdf, 0x88, 0x82, 0x69, 0x73, 0xde, 0xef, 0xbf, 0xc1, 0x36, 0xf7, - 0xdd, 0xeb, 0xc4, 0x84, 0xea, 0xab, 0x4a, 0xd7, 0x11, 0xe1, 0x01, 0x1f, 0x27, 0x55, 0xc4, 0x82, - 0x10, 0x54, 0x29, 0x57, 0x85, 0xdb, 0x9b, 0xad, 0x60, 0xe1, 0x80, 0xc8, 0x52, 0x5a, 0xc4, 0x1e, - 0x36, 0xa5, 0xe1, 0x65, 0x4b, 0x5c, 0x6d, 0x9e, 0xfd, 0xbe, 0x9c, 0x42, 0xc7, 0x28, 0x5a, 0x24, - 0x22, 0x09, 0xc8, 0x7e, 0xa5, 0x93, 0x67, 0xf4, 0xdf, 0xae, 0x5c, 0x20, 0x19, 0x1d, 0x27, 0x69, - 0xbe, 0xb7, 0x7b, 0x93, 0xff, 0x08, 0xf8, 0x9a, 0xc4, 0x94, 0x6b, 0xbd, 0xf8, 0x8e, 0x27, 0xc4, - 0x88, 0x5e, 0xf1, 0x22, 0x09, 0x5a, 0xad, 0x55, 0x62, 0x0b, 0xaa, 0xaf, 0x82, 0x4a, 0xa6, 0xae, - 0xff, 0x09, 0x96, 0xdb, 0x1b, 0x76, 0xea, 0xb1, 0x35, 0x89, 0x31, 0xb5, 0x5e, 0x27, 0xe0, 0x9c, - 0xf7, 0x7b, 0xc6, 0xd7, 0x7f, 0x10, 0x4b, 0xbf, 0xe2, 0xca, 0xee, 0xef, 0x4e, 0xdb, 0xe0, 0x96, - 0xe7, 0xef, 0x75, 0xdb, 0x7a, 0x3b, 0xe2, 0x19, 0x37, 0x75, 0x10, 0x23, 0x89, 0x08, 0xf8, 0x44, - 0x4d, 0x75, 0xd5, 0xf8, 0x82, 0x6b, 0x5c, 0x4c, 0x14, 0x16, 0xb5, 0x55, 0x5b, 0xf8, 0x44, 0x50, - 0xe1, 0x00, 0xf1, 0x2f, 0x2f, 0x3d, 0xf4, 0xd3, 0x45, 0x88, 0x12, 0x34, 0x4e, 0xdb, 0xd3, 0x55, - 0x14, 0x5a, 0x18, 0x2c, 0x09, 0x54, 0x3d, 0xea, 0x2e, 0xe6, 0x72, 0x8b, 0x8a, 0xfe, 0x15, 0x84, - 0x03, 0x21, 0x41, 0x49, 0xba, 0x6e, 0x7c, 0xf1, 0x70, 0x7d, 0xeb, 0xc5, 0xeb, 0xef, 0x13, 0xe2, - 0x3c, 0x4f, 0x10, 0x10, 0x15, 0x2b, 0x17, 0x77, 0x77, 0x12, 0xa4, 0xf2, 0x8b, 0x07, 0xec, 0x28, - 0xbb, 0xf4, 0xf1, 0x35, 0x88, 0xae, 0xbd, 0xf1, 0xf1, 0x1c, 0x8a, 0xfb, 0x8a, 0xdc, 0x4b, 0x9e, - 0x24, 0x49, 0x48, 0xee, 0xee, 0xb1, 0x3e, 0x26, 0xa2, 0x44, 0x0b, 0x3b, 0xef, 0xbb, 0xe2, 0x60, - 0xae, 0x5e, 0xee, 0xef, 0x15, 0xde, 0xfb, 0xf1, 0x30, 0x86, 0xf7, 0x7b, 0xbb, 0xdf, 0xe1, 0x0b, - 0xbd, 0xdd, 0xdd, 0xde, 0xef, 0xec, 0xa7, 0x49, 0xbf, 0x13, 0x17, 0x55, 0xd6, 0xab, 0xc4, 0x16, - 0xab, 0x55, 0xca, 0x4d, 0x57, 0x11, 0x18, 0x75, 0x5a, 0xaa, 0x8b, 0x8b, 0xaa, 0xaa, 0xaa, 0xaf, - 0x89, 0xa8, 0x91, 0x25, 0x15, 0x55, 0x5e, 0x11, 0x04, 0x55, 0xaa, 0xf6, 0x19, 0x8b, 0x01, 0xd9, - 0x82, 0x9d, 0x7f, 0xed, 0xb7, 0xe6, 0x4f, 0x05, 0x20, 0xb0, 0x64, 0x55, 0xa6, 0xea, 0x2e, 0xaa, - 0xb5, 0x5d, 0x71, 0x11, 0x84, 0x76, 0x96, 0xce, 0x3e, 0xf7, 0xb8, 0x58, 0xd3, 0x2c, 0x30, 0x57, - 0xac, 0xbe, 0xe1, 0x4e, 0x2b, 0x0a, 0x03, 0x8b, 0xfe, 0x2d, 0x8a, 0xf8, 0x97, 0x66, 0x7b, 0xc4, - 0xf8, 0x80, 0x8c, 0xdc, 0xbb, 0x54, 0xde, 0xfb, 0x97, 0x0b, 0x7e, 0x24, 0xb6, 0xc3, 0x17, 0x44, - 0x9b, 0x7e, 0x26, 0x8e, 0xf5, 0x88, 0xf1, 0x0b, 0xff, 0xad, 0x78, 0x95, 0x7f, 0xaf, 0x7d, 0x7a, - 0xb9, 0x2b, 0x43, 0xf1, 0x22, 0xaf, 0x77, 0x7d, 0xf8, 0x90, 0x5d, 0xbb, 0xf7, 0x77, 0xf0, 0x88, - 0x23, 0xbb, 0xbb, 0xdf, 0xc4, 0x88, 0xbb, 0xee, 0xef, 0xe2, 0x04, 0x95, 0xdd, 0xdd, 0xee, 0xfc, - 0x42, 0xa3, 0xbc, 0x4c, 0x25, 0x55, 0x55, 0x5d, 0x70, 0x88, 0x91, 0x75, 0x55, 0x55, 0xd7, 0x12, - 0x24, 0x76, 0xaa, 0x91, 0x21, 0xd5, 0xb5, 0xaf, 0x12, 0x24, 0x8b, 0xaa, 0xae, 0xba, 0x27, 0x78, - 0x8f, 0x13, 0xf0, 0x9d, 0xdf, 0xd5, 0x71, 0x22, 0x45, 0xf5, 0x5d, 0x57, 0x13, 0x15, 0x5a, 0xe9, - 0x25, 0xe0, 0xc4, 0xc4, 0x5d, 0x78, 0x64, 0x15, 0x9f, 0x75, 0x0a, 0xaa, 0xab, 0x05, 0x10, 0x35, - 0xac, 0xbc, 0x5d, 0x54, 0x01, 0x53, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x1a, 0x0d, 0x30, - 0xa8, 0x37, 0xd0, 0x4f, 0xa0, 0xd4, 0x24, 0x8c, 0x0b, 0xb2, 0x05, 0x8a, 0xfd, 0x7b, 0xf8, 0x23, - 0x2e, 0x06, 0x3d, 0xc3, 0x5a, 0xec, 0x90, 0x83, 0x50, 0xf2, 0x18, 0x00, 0x09, 0xab, 0xef, 0x56, - 0xa6, 0x62, 0xff, 0xf3, 0xf1, 0xee, 0x0b, 0x8e, 0x09, 0x80, 0x0f, 0x01, 0xeb, 0x03, 0x3d, 0xc1, - 0xbb, 0xb9, 0xfe, 0x0a, 0x00, 0xa2, 0x0a, 0x08, 0x0c, 0x6e, 0xc1, 0x96, 0x48, 0xba, 0xd5, 0x57, - 0xdc, 0x1c, 0x41, 0x40, 0x4c, 0x5c, 0x5d, 0x55, 0x57, 0x19, 0x48, 0x33, 0xeb, 0x17, 0xc2, 0xe1, - 0x22, 0x50, 0xa9, 0xc6, 0x31, 0x44, 0x21, 0xe4, 0xc0, 0x00, 0x47, 0x28, 0x75, 0x06, 0xa0, 0x49, - 0x18, 0x14, 0x25, 0xfb, 0xcb, 0xf0, 0x52, 0x05, 0x11, 0x84, 0x2d, 0x62, 0x81, 0x9b, 0x97, 0x86, - 0x00, 0x0f, 0x49, 0x66, 0x2e, 0xad, 0x64, 0x74, 0x3f, 0x2a, 0x24, 0xf4, 0xc7, 0x6f, 0x83, 0x00, - 0xc0, 0x93, 0xa4, 0xa5, 0x6f, 0xc1, 0xb3, 0xc2, 0xbc, 0x0a, 0x1d, 0x1e, 0x42, 0x17, 0x7d, 0x7c, - 0x41, 0x4f, 0x44, 0x1d, 0xb8, 0x88, 0x50, 0x24, 0x15, 0x01, 0xa8, 0xb6, 0x73, 0xdf, 0xc4, 0x02, - 0xc1, 0x6d, 0xf8, 0x5b, 0x4c, 0xf7, 0xc4, 0x0b, 0x1c, 0x18, 0xac, 0x33, 0x88, 0x27, 0x07, 0x28, - 0xc2, 0x01, 0x91, 0x36, 0x7d, 0x9e, 0x4f, 0x2a, 0x44, 0xb0, 0x8f, 0xc1, 0x20, 0x45, 0xe9, 0x97, - 0x20, 0xc3, 0xa8, 0x80, 0x06, 0x36, 0xaf, 0x9e, 0xfb, 0xcf, 0xfe, 0xde, 0x1e, 0x8c, 0x5c, 0x30, - 0x60, 0x31, 0x21, 0xc5, 0x5b, 0x5a, 0x69, 0x60, 0xc0, 0x1c, 0x8b, 0x11, 0xbe, 0x82, 0x07, 0x28, - 0x8b, 0x22, 0x39, 0xd7, 0x30, 0x40, 0x04, 0x92, 0x97, 0x75, 0x0c, 0x63, 0x82, 0x0c, 0x15, 0x44, - 0x04, 0x42, 0x86, 0x88, 0x1f, 0x10, 0xf5, 0x6a, 0x78, 0x7d, 0x8e, 0xaf, 0x4e, 0x4e, 0xc6, 0x89, - 0x5a, 0xb3, 0x81, 0xe3, 0x5d, 0xf1, 0x93, 0xce, 0x49, 0x61, 0xa9, 0x18, 0x06, 0x4b, 0x0c, 0xe7, - 0x79, 0x60, 0x62, 0x3c, 0x94, 0x38, 0x38, 0x3f, 0x05, 0xd2, 0x51, 0x22, 0x5a, 0xe0, 0xc3, 0x2e, - 0x11, 0x04, 0xc2, 0x75, 0x55, 0x55, 0xf7, 0x84, 0x48, 0x2a, 0xef, 0xc4, 0x04, 0x47, 0x5e, 0xf9, - 0x2f, 0xab, 0xbb, 0xbe, 0x24, 0x41, 0x0a, 0xaf, 0x87, 0xc9, 0x98, 0x90, 0x42, 0x38, 0xc7, 0x8f, - 0x7e, 0x16, 0x3b, 0xa9, 0x73, 0x7c, 0xfc, 0x15, 0xc4, 0x04, 0x01, 0x51, 0x62, 0xea, 0xb1, 0x03, - 0xd3, 0x39, 0xf1, 0x5c, 0x51, 0xf3, 0x70, 0xc8, 0x29, 0x19, 0x5d, 0x49, 0x16, 0x07, 0x2c, 0x95, - 0x2c, 0x38, 0x90, 0xf1, 0x40, 0x61, 0x10, 0x92, 0x99, 0x0f, 0x3a, 0x81, 0xe5, 0x53, 0x12, 0x54, - 0x37, 0x0f, 0xa8, 0xc2, 0x02, 0x41, 0x18, 0xb7, 0x9c, 0xb0, 0xaf, 0x26, 0x24, 0xc3, 0x1d, 0x5f, - 0x88, 0xba, 0x45, 0x34, 0x56, 0xea, 0x26, 0x20, 0x58, 0x97, 0xdb, 0xef, 0x7e, 0x08, 0x42, 0x23, - 0x2a, 0x2e, 0x4f, 0xc5, 0xcd, 0xe3, 0x2f, 0xf8, 0x81, 0x61, 0x45, 0x20, 0xfa, 0x87, 0xd3, 0x5a, - 0xc1, 0x5c, 0x20, 0x0e, 0x41, 0x61, 0xa3, 0x29, 0x9b, 0xba, 0xaf, 0x19, 0x4c, 0xf1, 0xdd, 0xc4, - 0x86, 0x47, 0x93, 0x9a, 0xcc, 0xe9, 0xc5, 0x6d, 0xe2, 0x04, 0x82, 0x31, 0x36, 0xcb, 0xeb, 0xe9, - 0x22, 0x04, 0xfc, 0x49, 0xeb, 0x5a, 0xd7, 0x86, 0x78, 0x91, 0x1c, 0x32, 0x0a, 0x11, 0xbb, 0x86, - 0x41, 0x84, 0x15, 0xc4, 0x41, 0x24, 0xcc, 0xce, 0x19, 0x15, 0x8e, 0xef, 0x08, 0x82, 0x91, 0x0e, - 0x66, 0x1f, 0xce, 0xc4, 0xeb, 0xb6, 0xad, 0x8b, 0xf7, 0x86, 0x41, 0x48, 0x93, 0x9f, 0x5b, 0x7e, - 0xb5, 0xbd, 0xfd, 0x5c, 0xa7, 0xd5, 0x57, 0xe2, 0x3c, 0x40, 0x92, 0x8c, 0xaa, 0xae, 0x10, 0x84, - 0xa2, 0x47, 0x38, 0x9f, 0x07, 0x97, 0x4b, 0xe0, 0xc2, 0x0a, 0xf1, 0x06, 0x1b, 0x1d, 0xa5, 0xd7, - 0xc3, 0x00, 0xb0, 0x42, 0xa1, 0x2f, 0x5a, 0x87, 0x69, 0x90, 0x6c, 0x63, 0xee, 0x24, 0x20, 0x24, - 0x8a, 0x90, 0x9b, 0x12, 0x79, 0x62, 0x45, 0xf8, 0x80, 0x82, 0x3f, 0x78, 0x43, 0xe0, 0x90, 0xbc, - 0x01, 0x5c, 0xcc, 0x93, 0x7e, 0x55, 0x44, 0x09, 0x04, 0xb4, 0xdd, 0xfa, 0xaf, 0x78, 0x90, 0x88, - 0xce, 0x18, 0xd3, 0xf1, 0x5b, 0xdb, 0x46, 0xdf, 0x24, 0xb8, 0x20, 0x1c, 0x12, 0xe5, 0x58, 0x44, - 0x14, 0x31, 0x61, 0xa9, 0x86, 0x74, 0xbe, 0x0b, 0x22, 0x7c, 0x40, 0x93, 0x1a, 0x45, 0x0c, 0x1b, - 0x1b, 0x84, 0x42, 0x03, 0x26, 0x61, 0xa1, 0x56, 0xae, 0x0e, 0xde, 0x35, 0x42, 0xc5, 0x8b, 0x87, - 0x5c, 0xa4, 0xa1, 0xf5, 0xdc, 0x9a, 0xae, 0x0c, 0x07, 0x08, 0x09, 0x08, 0x4c, 0xce, 0x33, 0xb2, - 0xe6, 0x49, 0x55, 0x71, 0xd4, 0x42, 0x8c, 0xdc, 0x73, 0x80, 0x79, 0xc0, 0x0d, 0x30, 0x50, 0x11, - 0x17, 0xc4, 0x03, 0x42, 0xd2, 0xa3, 0x7f, 0x6d, 0x31, 0x02, 0x42, 0x46, 0x5b, 0x77, 0x90, 0x35, - 0xed, 0x3d, 0x57, 0x88, 0x12, 0x13, 0x17, 0x2b, 0xf8, 0xe8, 0x90, 0x5c, 0x12, 0xc6, 0x14, 0xe6, - 0x9a, 0x94, 0x4e, 0x55, 0x7f, 0xbc, 0x10, 0x41, 0x64, 0x48, 0x83, 0x71, 0xaf, 0x2b, 0x8c, 0xc0, - 0x90, 0x04, 0x91, 0x64, 0x48, 0x51, 0x96, 0xc5, 0x61, 0x75, 0x6a, 0xf8, 0x60, 0x10, 0x8c, 0xe5, - 0xc8, 0x3e, 0xc2, 0x40, 0x0e, 0x4d, 0x13, 0x6a, 0x2d, 0xb8, 0xac, 0x56, 0xc7, 0x3e, 0x20, 0x22, - 0x0a, 0xa3, 0xa0, 0x58, 0x78, 0x06, 0x03, 0x43, 0x49, 0xc1, 0xc3, 0x0c, 0xa5, 0x99, 0x58, 0xb2, - 0x24, 0x2b, 0x0b, 0x17, 0xa8, 0xee, 0xe2, 0x42, 0x21, 0x39, 0x4a, 0xcb, 0x9a, 0x66, 0xa2, 0x8b, - 0xd7, 0x84, 0x46, 0x5a, 0x7e, 0x0b, 0xcb, 0xf2, 0xf7, 0x17, 0xdd, 0xdd, 0xdf, 0x89, 0x15, 0xd4, - 0x9d, 0x79, 0x33, 0x88, 0x14, 0x6f, 0x10, 0xe0, 0xac, 0x95, 0x95, 0xfc, 0x10, 0x8d, 0x6c, 0x37, - 0xc6, 0x3c, 0xc2, 0x7b, 0xc3, 0x10, 0x5b, 0x08, 0x06, 0x42, 0x22, 0x1d, 0x39, 0x5f, 0x15, 0xa5, - 0x77, 0xc1, 0x48, 0x28, 0x19, 0xab, 0xc5, 0x31, 0x4c, 0x5c, 0x47, 0x05, 0x1b, 0x9f, 0x2f, 0x36, - 0x1b, 0x70, 0xc0, 0x21, 0x0a, 0x0b, 0x68, 0x79, 0x59, 0x85, 0xe5, 0xe2, 0x3c, 0x9e, 0x31, 0x0e, - 0x1c, 0x38, 0x70, 0x0e, 0x1e, 0x03, 0xcb, 0x61, 0x66, 0x85, 0x83, 0x26, 0x69, 0x47, 0x78, 0x98, - 0xe1, 0x18, 0xad, 0xc5, 0xf9, 0x63, 0x96, 0x37, 0xc2, 0x21, 0x02, 0xf7, 0x7c, 0x48, 0x40, 0x48, - 0x95, 0xad, 0xdd, 0x32, 0x90, 0x71, 0x30, 0x8d, 0x67, 0x77, 0x77, 0x69, 0x93, 0xbf, 0x11, 0xc1, - 0x00, 0x88, 0x2e, 0x82, 0x01, 0x03, 0x06, 0x49, 0xb1, 0x6d, 0xb9, 0x11, 0xc0, 0xe1, 0xc0, 0x39, - 0x11, 0xf1, 0x4c, 0x99, 0x52, 0xc6, 0xcf, 0x78, 0x31, 0x08, 0x8c, 0xa7, 0x15, 0x83, 0xcf, 0x01, - 0x72, 0xe3, 0xa7, 0xa6, 0xe0, 0x00, 0xf3, 0x0a, 0xab, 0x83, 0xa4, 0x94, 0x7a, 0x12, 0xaf, 0x0f, - 0xe1, 0x4f, 0xca, 0xfb, 0x63, 0xae, 0x11, 0x9e, 0x6c, 0x3b, 0x07, 0xf1, 0xd4, 0xc2, 0x60, 0xe2, - 0xdb, 0x84, 0x12, 0x40, 0xd5, 0xe0, 0x00, 0x27, 0xd3, 0xa3, 0xd7, 0x48, 0xbc, 0x63, 0x86, 0x42, - 0x21, 0x49, 0x63, 0x2c, 0x76, 0xd0, 0xa3, 0x2d, 0xbb, 0x87, 0xe0, 0x6a, 0xd8, 0x85, 0xc0, 0x73, - 0xe2, 0x60, 0x5a, 0xf3, 0x8f, 0x19, 0x5a, 0xe1, 0x81, 0x02, 0x4e, 0x2b, 0x89, 0x7d, 0xb5, 0x9e, - 0x24, 0x20, 0x2b, 0x4a, 0xf6, 0x81, 0xbf, 0xcd, 0xcf, 0x19, 0x4a, 0x21, 0x46, 0x28, 0xd5, 0x32, - 0xe6, 0xe2, 0xbb, 0x96, 0xc5, 0x1b, 0x8a, 0xfc, 0x61, 0xdd, 0xf7, 0x7a, 0xee, 0xe9, 0x5d, 0xf8, - 0x8f, 0xb1, 0x75, 0x93, 0xe1, 0x11, 0x10, 0x59, 0x88, 0x30, 0xae, 0x6b, 0xc2, 0x10, 0xa0, 0x8e, - 0x6e, 0x2b, 0x0d, 0x82, 0x69, 0x55, 0xd5, 0x74, 0xd6, 0xfc, 0x30, 0x08, 0x06, 0x1b, 0x3d, 0x67, - 0xb7, 0x30, 0xd5, 0x2f, 0xc3, 0x87, 0x0b, 0x67, 0x3f, 0x5a, 0x47, 0xe4, 0x83, 0xa3, 0xf1, 0xa1, - 0x80, 0xf1, 0x03, 0xaf, 0x0f, 0x2d, 0x99, 0x0b, 0xd9, 0x59, 0x6f, 0x15, 0xb7, 0xc1, 0x97, 0xed, - 0x62, 0x43, 0x1e, 0x24, 0x64, 0x37, 0xc2, 0x20, 0xf2, 0x94, 0xc4, 0x17, 0xb8, 0x53, 0xba, 0xae, - 0x2b, 0x7d, 0x87, 0xb7, 0x91, 0xb2, 0x6d, 0x97, 0x10, 0x97, 0xad, 0x84, 0xc6, 0x7c, 0xc2, 0x66, - 0x61, 0xb9, 0xf1, 0x07, 0x77, 0xbb, 0xbb, 0xbf, 0x98, 0x45, 0x6b, 0x89, 0x08, 0x96, 0xb5, 0x50, - 0x5b, 0x08, 0x04, 0x45, 0x89, 0x6a, 0xb3, 0xe2, 0xeb, 0x84, 0x48, 0xcc, 0xda, 0xf4, 0xbe, 0x68, - 0x13, 0x2a, 0xcf, 0xc4, 0x78, 0x8f, 0x8f, 0x22, 0x9e, 0x4b, 0x24, 0x31, 0x44, 0xc9, 0xd0, 0x3f, - 0xac, 0xe9, 0xd2, 0xed, 0x57, 0xe2, 0x0b, 0x07, 0x5e, 0x1f, 0x3e, 0x27, 0xc4, 0xd4, 0x40, 0x44, - 0xb7, 0xdf, 0xd0, 0x57, 0xa0, 0xaa, 0x10, 0x0c, 0xd7, 0x30, 0x53, 0x73, 0xfc, 0x48, 0x81, 0xe4, - 0xb2, 0x50, 0x7f, 0xf1, 0xb5, 0xbc, 0x7c, 0xc7, 0xe2, 0x05, 0xdd, 0x86, 0xac, 0xf8, 0x14, 0x7c, - 0xdc, 0xbc, 0xfc, 0x97, 0xdf, 0x10, 0x11, 0x2d, 0xf7, 0xc1, 0x04, 0xa1, 0x95, 0x5c, 0x13, 0xf0, - 0x48, 0x3b, 0x97, 0x35, 0xc4, 0x04, 0x41, 0x49, 0x31, 0x0e, 0x75, 0x49, 0xa5, 0xe3, 0xff, 0x13, - 0x2d, 0xed, 0x54, 0x48, 0x83, 0x5e, 0xab, 0x88, 0x12, 0x28, 0x93, 0xf0, 0x7f, 0xc7, 0x5f, 0x13, - 0x64, 0x77, 0xe1, 0x7c, 0x24, 0xb5, 0xf8, 0x92, 0x83, 0xbf, 0xde, 0xcd, 0xec, 0xd7, 0xd2, 0x7c, - 0xc2, 0x56, 0xaa, 0xb1, 0x32, 0x72, 0x1b, 0x97, 0xe2, 0x64, 0x10, 0xb5, 0xf0, 0x8f, 0x84, 0x60, - 0x96, 0x11, 0x84, 0xc5, 0x93, 0xf7, 0x3e, 0x2c, 0xe1, 0x98, 0x4c, 0xce, 0xfc, 0xde, 0x24, 0xfe, - 0x24, 0xd7, 0xbb, 0xa8, 0x91, 0x26, 0x12, 0xef, 0xac, 0x40, 0x44, 0x66, 0xee, 0xe2, 0xf0, 0x7b, - 0xa0, 0x55, 0xf6, 0xaf, 0xbe, 0x25, 0x9e, 0xb9, 0xd9, 0xac, 0x4f, 0x13, 0xbe, 0x51, 0xb7, 0x7a, - 0x88, 0xfc, 0x40, 0xc5, 0x5d, 0x56, 0xb8, 0x8f, 0x10, 0x11, 0x16, 0x47, 0xd7, 0x2e, 0x17, 0x30, - 0x86, 0x08, 0xa1, 0x1f, 0x04, 0x00, 0x87, 0xe2, 0x8b, 0x3d, 0xf5, 0xaf, 0xba, 0xd7, 0xc2, 0x1c, - 0x4c, 0x97, 0xd5, 0x71, 0x44, 0xb6, 0x8d, 0xcb, 0xd5, 0x55, 0x7c, 0x27, 0xba, 0xd7, 0x55, 0xca, - 0x37, 0x77, 0x71, 0x32, 0xee, 0xfc, 0x40, 0x42, 0x5e, 0x41, 0x03, 0xfe, 0x27, 0x59, 0x74, 0x7c, - 0x22, 0x09, 0x4d, 0x6f, 0x8a, 0xc5, 0x6d, 0x48, 0xb3, 0x86, 0x20, 0xb8, 0x4b, 0xb9, 0xf3, 0x36, - 0x1b, 0x14, 0xbe, 0x28, 0x20, 0xc4, 0x93, 0xbb, 0xfb, 0xb6, 0xa7, 0x67, 0x58, 0x9e, 0x26, 0x26, - 0xaa, 0xaa, 0xa4, 0xeb, 0xe2, 0x44, 0x7c, 0x55, 0xdb, 0x77, 0x7d, 0x7d, 0x90, 0xf9, 0xeb, 0x10, - 0x52, 0xdd, 0xdf, 0xcd, 0x77, 0xbe, 0x24, 0x22, 0x84, 0xbf, 0x89, 0x93, 0x12, 0xbd, 0xc4, 0xf8, - 0x9f, 0x12, 0x27, 0xc4, 0xf8, 0x92, 0xf5, 0x5c, 0x31, 0x61, 0x05, 0x55, 0xe1, 0x01, 0x20, 0xac, - 0xba, 0xad, 0xd3, 0x15, 0xde, 0x55, 0x20, 0x81, 0x48, 0x7f, 0xa8, 0xbe, 0xe1, 0x00, 0xcd, 0x62, - 0x7c, 0x20, 0x0b, 0x8e, 0xaa, 0xab, 0x5a, 0xbf, 0x84, 0x4b, 0x5a, 0xf1, 0x02, 0x7e, 0x20, 0x8d, - 0x2a, 0xf5, 0x5c, 0x4d, 0x5f, 0x89, 0x13, 0xc4, 0x08, 0x20, 0xb7, 0x15, 0xdf, 0x04, 0x22, 0x08, - 0x4b, 0xdf, 0x05, 0x21, 0x1f, 0x11, 0xf7, 0xbd, 0xf1, 0x22, 0x38, 0x81, 0x35, 0x89, 0x35, 0xde, - 0xfc, 0x4f, 0x13, 0x65, 0x77, 0xf0, 0x8f, 0x84, 0x6e, 0xb4, 0xb8, 0x63, 0xc3, 0x10, 0xe8, 0x88, - 0xbd, 0x77, 0x75, 0x55, 0xe1, 0xd3, 0x16, 0xfc, 0x3b, 0xc5, 0xef, 0x77, 0x9b, 0x38, 0x40, 0x33, - 0xc4, 0x89, 0x45, 0x7a, 0xc2, 0x04, 0x14, 0x2b, 0x7b, 0xf1, 0x20, 0x84, 0x4a, 0xae, 0xe5, 0x61, - 0x02, 0x12, 0x7f, 0xf0, 0x8d, 0x44, 0x09, 0xf0, 0x8f, 0x08, 0x78, 0x64, 0x48, 0x91, 0x7b, 0xab, - 0xdd, 0xf8, 0x81, 0x73, 0xe7, 0x55, 0x55, 0x51, 0x22, 0x6f, 0xa3, 0x3f, 0xd6, 0xab, 0x12, 0x84, - 0xd7, 0x12, 0x19, 0xe1, 0x90, 0xc9, 0x08, 0xaa, 0xbc, 0x40, 0x64, 0x13, 0x88, 0x68, 0x40, 0xfe, - 0x6c, 0xe7, 0xf8, 0x6e, 0x0e, 0xda, 0xe2, 0x00, 0x30, 0x0e, 0xa4, 0xa1, 0x48, 0xc7, 0x70, 0x63, - 0x6a, 0xda, 0x78, 0x72, 0x22, 0x0b, 0x77, 0x7b, 0x1b, 0x75, 0xee, 0x20, 0x22, 0x63, 0xb6, 0xba, - 0xc4, 0x78, 0x8f, 0x13, 0xc4, 0x51, 0x1f, 0xc4, 0x1b, 0x7b, 0xe2, 0x75, 0xc2, 0x22, 0x5e, 0x72, - 0x0c, 0x4a, 0x41, 0x77, 0xd8, 0xaf, 0xc2, 0x3f, 0x12, 0xa8, 0xef, 0x05, 0x01, 0x0f, 0x12, 0x08, - 0xef, 0x7f, 0x4b, 0xc1, 0x15, 0xdd, 0xdd, 0xf8, 0x8f, 0x11, 0x92, 0x24, 0x33, 0xc4, 0x02, 0x10, - 0xb8, 0xe5, 0x37, 0xa9, 0xe1, 0x5d, 0xc5, 0x43, 0x9b, 0xd1, 0xff, 0x12, 0x0a, 0x05, 0x93, 0xa9, - 0x58, 0x97, 0x55, 0x58, 0x10, 0xba, 0x1a, 0xe0, 0x90, 0x9b, 0x19, 0xff, 0x71, 0x00, 0x87, 0x89, - 0xdc, 0x48, 0x97, 0xdd, 0xfc, 0xd7, 0x77, 0x7f, 0x2e, 0x4f, 0x4f, 0x86, 0x41, 0x6d, 0xdf, 0x5a, - 0xab, 0xf1, 0x02, 0x41, 0x15, 0xef, 0xae, 0x22, 0x09, 0xca, 0xef, 0x15, 0xb7, 0x6e, 0xfc, 0x48, - 0x47, 0xe6, 0xdb, 0x7e, 0x20, 0x10, 0x05, 0x04, 0xbd, 0xdd, 0xdd, 0xee, 0xe2, 0xb7, 0x7b, 0xdf, - 0x13, 0x84, 0x8a, 0xfc, 0xd4, 0x48, 0x9a, 0xc4, 0xd7, 0x14, 0x6b, 0xbd, 0xee, 0xf8, 0x99, 0xbb, - 0xbf, 0x96, 0xca, 0xee, 0xe2, 0x44, 0x94, 0xea, 0xaa, 0xaa, 0x22, 0x41, 0x11, 0x5f, 0x88, 0x08, - 0x98, 0x53, 0xbb, 0x8a, 0xfc, 0xe2, 0xe0, 0xe0, 0xb7, 0xf7, 0xe1, 0x98, 0x80, 0xc8, 0x29, 0x34, - 0x40, 0xfb, 0x96, 0xee, 0x89, 0xe2, 0x47, 0xf5, 0xf6, 0x55, 0x5a, 0xa0, 0xb3, 0x28, 0xd3, 0x83, - 0xfe, 0xff, 0xfa, 0x23, 0xdf, 0x2d, 0xef, 0xf0, 0x50, 0x54, 0xdb, 0xef, 0x77, 0xf1, 0x20, 0xa2, - 0xf7, 0xde, 0xef, 0xc4, 0xc1, 0x1d, 0xef, 0x7e, 0x26, 0x12, 0xbb, 0xbb, 0xbb, 0xbf, 0x11, 0x09, - 0x97, 0x77, 0xdd, 0xf1, 0x00, 0x87, 0x89, 0x0c, 0x18, 0x95, 0xab, 0xc4, 0xc9, 0x89, 0x04, 0xf7, - 0xdd, 0xef, 0xaf, 0x11, 0xc4, 0xfc, 0x4d, 0x70, 0x91, 0x55, 0x56, 0xb1, 0x7e, 0x27, 0xc4, 0x48, - 0x31, 0x4a, 0xc2, 0xf8, 0x40, 0x48, 0xc8, 0xac, 0xfc, 0x75, 0x4b, 0x6a, 0xe6, 0xfe, 0xdd, 0xcf, - 0xf2, 0xf9, 0x1f, 0xf0, 0xc6, 0x24, 0x16, 0x12, 0x2b, 0x77, 0x4e, 0x30, 0x6c, 0xc4, 0x3e, 0xdf, - 0x07, 0x10, 0x11, 0x10, 0x57, 0xf7, 0xbb, 0xbb, 0xfd, 0x96, 0xf7, 0xc4, 0x88, 0x2e, 0xf7, 0xe1, - 0x19, 0x22, 0x44, 0x70, 0xc8, 0x60, 0x41, 0xdd, 0xde, 0xfb, 0xe2, 0x6e, 0xee, 0xfc, 0x40, 0x81, - 0x37, 0xdd, 0xef, 0xf1, 0x17, 0x77, 0x77, 0xbb, 0xf1, 0x05, 0xbd, 0xdd, 0xe2, 0x65, 0x89, 0x12, - 0x14, 0xbe, 0xee, 0xef, 0xb4, 0xd3, 0xdd, 0xde, 0xbe, 0x0b, 0x6e, 0xfb, 0xbd, 0x13, 0xfd, 0x6f, - 0x5c, 0xbb, 0xbd, 0xc4, 0x57, 0xbc, 0x48, 0x27, 0xaa, 0xad, 0x55, 0x57, 0xb8, 0x88, 0x22, 0x15, - 0x02, 0x6b, 0xb1, 0xf0, 0xba, 0xa9, 0x2d, 0xc2, 0x01, 0x10, 0xe9, 0x7a, 0xd7, 0x52, 0xf3, 0xfa, - 0x75, 0xa7, 0x44, 0x7f, 0x87, 0x1e, 0xef, 0xc2, 0xd8, 0x91, 0x82, 0x17, 0x77, 0x12, 0x30, 0x9f, - 0x1d, 0xf9, 0x7b, 0xaf, 0x5c, 0x20, 0x08, 0x5d, 0xff, 0xf8, 0x9f, 0x94, 0xeb, 0x5e, 0x26, 0x58, - 0xd2, 0x08, 0xf9, 0xa2, 0x3e, 0x27, 0xe1, 0x12, 0xbd, 0xf7, 0xbb, 0xbd, 0xf8, 0x85, 0x7a, 0xeb, - 0xdc, 0x4e, 0xa2, 0x75, 0xcb, 0x77, 0x7f, 0x90, 0xae, 0xee, 0xeb, 0x11, 0xe2, 0x38, 0x8f, 0x10, - 0x10, 0x36, 0xb1, 0x7c, 0x44, 0x95, 0x55, 0xf1, 0x1f, 0x35, 0x6a, 0xbc, 0x21, 0xc2, 0x21, 0x92, - 0x93, 0x55, 0xc2, 0x02, 0x02, 0x62, 0x35, 0x58, 0xae, 0x5f, 0xe6, 0x12, 0x9b, 0x78, 0x53, 0x98, - 0xdc, 0xbf, 0x08, 0x06, 0x42, 0x04, 0x52, 0xdc, 0x43, 0xd6, 0xa9, 0xd5, 0x6e, 0x20, 0x4f, 0x88, - 0xfa, 0x1a, 0xf7, 0x13, 0x54, 0x76, 0xf9, 0x88, 0xef, 0x7e, 0x20, 0xb7, 0x77, 0x7c, 0x48, 0x9f, - 0x8b, 0xaa, 0xfb, 0xbe, 0x24, 0x49, 0x4a, 0xce, 0xff, 0x66, 0xdd, 0xfd, 0xde, 0xfc, 0x47, 0xe0, - 0xa0, 0x4d, 0xd3, 0xbd, 0xdd, 0xfe, 0x4b, 0xde, 0xb1, 0x24, 0x2a, 0xaa, 0xaf, 0x13, 0x5c, 0x86, - 0xad, 0x5e, 0x27, 0xc4, 0xf8, 0x40, 0xd5, 0x5f, 0xc1, 0x41, 0x55, 0x7d, 0x57, 0xb8, 0x90, 0xc9, - 0x06, 0x45, 0xba, 0x16, 0x10, 0x08, 0x02, 0xbb, 0x6e, 0x87, 0x07, 0xde, 0x1d, 0x0a, 0xd7, 0x77, - 0x73, 0xd0, 0xa7, 0x21, 0x25, 0xf1, 0xf5, 0xf2, 0x94, 0x5d, 0x35, 0xf1, 0x15, 0x13, 0xac, 0x48, - 0x98, 0xda, 0xe5, 0xb9, 0x94, 0xaf, 0x89, 0xd7, 0x42, 0x7b, 0x89, 0x13, 0xe2, 0x3c, 0x48, 0x24, - 0xea, 0xbd, 0xf2, 0x5d, 0xdd, 0xf1, 0x22, 0x1d, 0xdd, 0xdf, 0xd5, 0xf8, 0x88, 0x21, 0xbb, 0xef, - 0x51, 0x10, 0x4b, 0x7b, 0xdd, 0xde, 0xff, 0x05, 0x3b, 0xae, 0xf7, 0xbb, 0xdf, 0xe0, 0x86, 0xc6, - 0xc7, 0x77, 0xa8, 0x8d, 0x71, 0x75, 0x55, 0x55, 0x5f, 0xcd, 0xaa, 0xfc, 0x4e, 0xab, 0x5d, 0x7c, - 0xd5, 0x5f, 0x89, 0xbc, 0x4b, 0x20, 0xaf, 0xf8, 0x23, 0xad, 0x57, 0xb8, 0x91, 0x3e, 0x08, 0x51, - 0x8e, 0x0f, 0x82, 0x31, 0x38, 0xab, 0xbc, 0xf0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x1b, 0x0d, - 0xb1, 0xa0, 0x28, 0xf4, 0x3f, 0xa0, 0xd6, 0x05, 0x10, 0x86, 0x1e, 0x90, 0x42, 0x41, 0xff, 0xc1, - 0xbd, 0x7f, 0x5d, 0x3f, 0x83, 0x50, 0xec, 0x40, 0x00, 0x26, 0xa3, 0x77, 0x92, 0x3a, 0x7a, 0xff, - 0xee, 0xdc, 0x7b, 0x0c, 0x80, 0x1f, 0x60, 0x1f, 0x8b, 0x7c, 0xfe, 0x1c, 0xc1, 0xd4, 0xd0, 0x6c, - 0x1f, 0xfc, 0xf1, 0x27, 0xc1, 0x9f, 0xb8, 0x15, 0x62, 0xdf, 0x15, 0x7c, 0x0a, 0x00, 0xa1, 0x0b, - 0xe8, 0xa1, 0xd9, 0x08, 0x5d, 0xf5, 0x78, 0x29, 0x0e, 0x31, 0xc0, 0x00, 0x7e, 0x81, 0xe4, 0x7e, - 0x64, 0x19, 0xf5, 0xe3, 0xef, 0x83, 0x6b, 0x87, 0x2f, 0xf9, 0xe7, 0xb6, 0x70, 0x75, 0x72, 0x92, - 0xb9, 0xbc, 0x5f, 0x97, 0xe0, 0xe4, 0x1c, 0x85, 0x08, 0x4f, 0xb3, 0x1c, 0xa2, 0x25, 0x38, 0x00, - 0x09, 0x10, 0x6b, 0x25, 0x02, 0xa5, 0x16, 0xaf, 0x90, 0xe8, 0xfb, 0x98, 0xc7, 0x6f, 0x15, 0x71, - 0x71, 0x00, 0xa4, 0x13, 0x14, 0x47, 0xc9, 0x8d, 0xcc, 0xee, 0x29, 0x53, 0xe1, 0x28, 0x56, 0x74, - 0x46, 0x11, 0x0c, 0x04, 0xeb, 0x4b, 0x2e, 0x25, 0x97, 0xe3, 0xf2, 0xec, 0x33, 0x09, 0x32, 0x34, - 0xfe, 0x9f, 0xe3, 0x30, 0x35, 0x97, 0x19, 0xa0, 0xab, 0x82, 0x73, 0x41, 0xe7, 0xe9, 0xd6, 0xa3, - 0x19, 0xb8, 0x80, 0x80, 0x50, 0x51, 0x60, 0x31, 0xdb, 0x89, 0x01, 0xc2, 0xab, 0xc2, 0x8a, 0x6c, - 0x60, 0xb0, 0x33, 0xc7, 0x0b, 0x07, 0x62, 0xbc, 0x1d, 0x0b, 0x85, 0x9a, 0x1c, 0x03, 0xac, 0xf0, - 0x88, 0x2b, 0x9f, 0xc6, 0x20, 0x2b, 0x04, 0xb1, 0x95, 0x80, 0x54, 0xcb, 0x00, 0x02, 0x50, 0x72, - 0xbb, 0x75, 0x6b, 0xf7, 0x06, 0x19, 0x60, 0xc4, 0x49, 0x86, 0xf1, 0xd4, 0xfc, 0x18, 0xc1, 0x20, - 0xc2, 0x48, 0xf9, 0x53, 0x22, 0xae, 0x0a, 0x42, 0x84, 0xcb, 0x83, 0xcb, 0x48, 0xa2, 0x99, 0x0e, - 0x36, 0x3f, 0x1d, 0xce, 0x1c, 0x2d, 0x97, 0xcf, 0x17, 0x05, 0x00, 0x84, 0x13, 0xf5, 0x53, 0x72, - 0x50, 0x0e, 0x22, 0xc8, 0x94, 0xbe, 0x1b, 0x67, 0x00, 0x06, 0x5a, 0x64, 0x46, 0x9b, 0x12, 0xb1, - 0x57, 0xff, 0x95, 0x00, 0xf5, 0x0f, 0x23, 0xef, 0x95, 0x67, 0x4f, 0xb7, 0x05, 0x58, 0x94, 0x37, - 0xb8, 0x98, 0x50, 0x20, 0x9b, 0xae, 0xdf, 0xc4, 0x0f, 0x38, 0x71, 0x49, 0xcd, 0xd6, 0x29, 0xc3, - 0xcb, 0x06, 0x78, 0xe1, 0xe0, 0x2c, 0x7b, 0x84, 0x44, 0x0c, 0xcf, 0x33, 0xb8, 0x24, 0x0b, 0x0a, - 0x4a, 0x54, 0x9d, 0x5c, 0xc4, 0xa9, 0x78, 0xba, 0xe2, 0x02, 0x12, 0x61, 0x1e, 0x0c, 0x04, 0x8f, - 0x26, 0x88, 0xd9, 0xa9, 0x75, 0x5f, 0x12, 0x20, 0xb5, 0x78, 0xb8, 0x80, 0xe2, 0xc5, 0xe0, 0xa8, - 0x59, 0x63, 0x1f, 0x57, 0xce, 0xe0, 0xbb, 0xbb, 0xb8, 0xad, 0xdf, 0x82, 0x90, 0x80, 0xf1, 0x09, - 0x24, 0xf1, 0x1c, 0x1e, 0x59, 0x33, 0x02, 0xe6, 0xe5, 0x26, 0x92, 0x0e, 0x30, 0x52, 0x08, 0x41, - 0x49, 0x07, 0x2b, 0x42, 0xf6, 0x8e, 0x37, 0x3c, 0x68, 0x61, 0x94, 0xee, 0x78, 0xcd, 0xcf, 0x75, - 0x9f, 0xa0, 0xaf, 0x07, 0x20, 0xa4, 0xa2, 0xfc, 0x77, 0xc2, 0x16, 0x09, 0x05, 0x31, 0x6c, 0x5e, - 0xff, 0x71, 0xae, 0xc3, 0x6c, 0x80, 0x42, 0x0b, 0xd2, 0x3f, 0x78, 0xb7, 0x6c, 0x2a, 0x66, 0x0d, - 0x07, 0x30, 0x0f, 0x70, 0x50, 0x7f, 0x0e, 0x5c, 0xc0, 0xbe, 0xef, 0xa2, 0xa2, 0xe1, 0x80, 0x42, - 0x09, 0x82, 0x27, 0xdb, 0x98, 0xcc, 0xcd, 0x5f, 0x49, 0x10, 0x24, 0xa1, 0x2b, 0xbf, 0xc1, 0x48, - 0xf2, 0xb0, 0x6c, 0x56, 0x6c, 0xed, 0xd6, 0xf7, 0x3c, 0x33, 0xc4, 0xf8, 0x91, 0x03, 0x86, 0x43, - 0x42, 0x8e, 0x21, 0xe5, 0x13, 0x40, 0x9b, 0x4f, 0x64, 0x07, 0xe3, 0xdb, 0xfd, 0x76, 0x42, 0x79, - 0xe0, 0xe0, 0x4c, 0x11, 0xf4, 0x13, 0x68, 0x88, 0x40, 0x1c, 0x82, 0x61, 0xc2, 0xea, 0x4c, 0x9a, - 0xaa, 0x8e, 0xef, 0x12, 0x12, 0x25, 0x69, 0xac, 0x5f, 0xec, 0x5d, 0x72, 0xb3, 0x78, 0x82, 0x0a, - 0xaa, 0xf0, 0x84, 0xa7, 0x4d, 0xdd, 0xf1, 0x01, 0x06, 0x75, 0xd7, 0x10, 0x10, 0x30, 0x8e, 0x30, - 0x83, 0x08, 0x04, 0x47, 0x12, 0x20, 0x78, 0x36, 0xd9, 0x2f, 0x40, 0x28, 0xc4, 0x80, 0xe2, 0xd5, - 0x7e, 0x2c, 0xe6, 0xf2, 0xf9, 0xc3, 0x22, 0x10, 0x57, 0xab, 0x0c, 0x41, 0x56, 0x0a, 0x01, 0x50, - 0xea, 0xd5, 0x0d, 0x75, 0x55, 0x96, 0x6c, 0x36, 0xcc, 0x00, 0x40, 0xde, 0x7c, 0x48, 0xf5, 0xe2, - 0xf4, 0x39, 0x1f, 0x4e, 0xae, 0x33, 0x75, 0xca, 0x18, 0xfd, 0xdf, 0xdf, 0x84, 0x02, 0x25, 0x1b, - 0xa1, 0xaa, 0x84, 0x04, 0x98, 0xd0, 0xd9, 0x4c, 0x82, 0x17, 0x38, 0xf3, 0xc4, 0x19, 0x22, 0x62, - 0xea, 0xbf, 0x13, 0xc4, 0x06, 0x4d, 0xaa, 0xfc, 0x23, 0x6c, 0xa4, 0x57, 0x1c, 0x58, 0x49, 0x07, - 0x12, 0xc0, 0xd8, 0x3b, 0x69, 0x48, 0xf2, 0xdd, 0x9a, 0xbc, 0x48, 0x28, 0x82, 0xd8, 0x40, 0x23, - 0xc4, 0x84, 0x06, 0x55, 0xc5, 0xf8, 0x9f, 0x89, 0xf5, 0x55, 0x59, 0xbf, 0x88, 0x9b, 0xa4, 0x2d, - 0x61, 0x18, 0x28, 0x2e, 0x2d, 0x25, 0x5a, 0x1f, 0x7c, 0x86, 0xa8, 0x03, 0x00, 0x5b, 0xd6, 0x27, - 0xc4, 0x04, 0x8a, 0x14, 0x54, 0x51, 0x3a, 0x95, 0x58, 0x1d, 0xcb, 0x4e, 0x7c, 0x10, 0x31, 0xa0, - 0x8e, 0xd9, 0xaf, 0x7c, 0x16, 0xc1, 0x40, 0x21, 0x04, 0x63, 0x32, 0xe0, 0xaf, 0xb8, 0x40, 0x22, - 0x32, 0x62, 0x48, 0xe3, 0xe7, 0x90, 0xc9, 0xe2, 0xc3, 0x7f, 0x02, 0x42, 0xad, 0x35, 0x12, 0x4d, - 0xde, 0xd7, 0x84, 0x03, 0x21, 0x48, 0xa6, 0x24, 0xb1, 0x2e, 0x44, 0x23, 0x81, 0xa0, 0xca, 0x99, - 0xc5, 0x7a, 0xd7, 0xbc, 0x22, 0x30, 0xaa, 0x22, 0xab, 0xfb, 0xa1, 0x16, 0x2b, 0xb5, 0x15, 0x5a, - 0x17, 0x11, 0xeb, 0x3c, 0x48, 0x29, 0xbc, 0xf9, 0x10, 0xd0, 0xf5, 0x84, 0x7c, 0xee, 0x74, 0xf8, - 0x53, 0x8b, 0xd6, 0xb2, 0x60, 0x8c, 0x3a, 0x94, 0x99, 0xbf, 0xc7, 0x88, 0x55, 0x55, 0xe5, 0xc1, - 0x5a, 0xf5, 0xf8, 0x44, 0x30, 0xc6, 0x93, 0x46, 0xf4, 0x5a, 0xb7, 0xf0, 0x45, 0xd0, 0xda, 0x8b, - 0x82, 0x00, 0xc8, 0x48, 0x28, 0x98, 0x97, 0xa2, 0xa9, 0x53, 0x5e, 0x22, 0x30, 0xa5, 0x8f, 0xb8, - 0xaf, 0x5b, 0x7c, 0xb9, 0xc4, 0x09, 0x04, 0xfb, 0xc4, 0x3e, 0x0f, 0x3f, 0x07, 0x9f, 0xbf, 0x08, - 0x88, 0x2d, 0xdc, 0xb1, 0xbe, 0x24, 0x41, 0x22, 0xea, 0x2e, 0xb8, 0x81, 0x01, 0x22, 0xb5, 0xa5, - 0xbb, 0xac, 0x47, 0xd0, 0xfe, 0xe1, 0x9c, 0x16, 0x42, 0x01, 0x12, 0x0e, 0xad, 0x71, 0x31, 0x82, - 0x9e, 0x98, 0xae, 0xe5, 0x8b, 0xd9, 0x8a, 0x33, 0x7c, 0xf0, 0x58, 0x33, 0x10, 0xff, 0x81, 0xf0, - 0x53, 0x17, 0xa6, 0x86, 0x11, 0x10, 0x11, 0xdc, 0xfd, 0xaa, 0x0e, 0xd8, 0x1d, 0x2f, 0xc6, 0xdf, - 0xb0, 0x9d, 0x81, 0xd9, 0xb0, 0x76, 0xbd, 0x2a, 0x1e, 0xb9, 0x82, 0xcc, 0xd7, 0x0c, 0x84, 0x42, - 0x85, 0x14, 0x62, 0xb2, 0xc6, 0x28, 0xc5, 0x65, 0xb1, 0x58, 0xa3, 0x71, 0x59, 0xef, 0xc5, 0x62, - 0xb6, 0x9d, 0xf8, 0x40, 0x40, 0xe8, 0xa3, 0x89, 0x7d, 0xdd, 0xf5, 0xd7, 0x84, 0x44, 0x12, 0xaa, - 0xe2, 0xbc, 0x44, 0x21, 0xc5, 0x65, 0xc1, 0x59, 0x6e, 0xef, 0x8a, 0xf8, 0x91, 0xe2, 0xee, 0xee, - 0xf7, 0xae, 0xea, 0x0c, 0x30, 0x5d, 0x12, 0x10, 0x1e, 0x2a, 0x2b, 0xb8, 0x10, 0xbd, 0x63, 0x0c, - 0xff, 0xc8, 0x30, 0x3d, 0x4d, 0x06, 0xbf, 0xb9, 0xd6, 0x59, 0x7c, 0x7b, 0x05, 0xdc, 0x7e, 0x18, - 0x18, 0x61, 0x63, 0x8f, 0xbe, 0xcb, 0x79, 0x79, 0xf7, 0x2d, 0x5a, 0x41, 0x79, 0x6d, 0xdd, 0xf2, - 0xe3, 0xf1, 0x03, 0x24, 0xe0, 0xa1, 0x0f, 0x3f, 0x67, 0x0b, 0x07, 0x8f, 0xee, 0xe5, 0xb6, 0x9d, - 0xef, 0xf1, 0x47, 0x86, 0xcf, 0x5d, 0x2b, 0x54, 0x9f, 0x12, 0x2c, 0x56, 0xe2, 0xb7, 0xba, 0xba, - 0xc4, 0x94, 0x46, 0xee, 0x08, 0x3a, 0x09, 0xf4, 0x6c, 0x20, 0x25, 0x8c, 0x66, 0x7a, 0x7c, 0x47, - 0x11, 0x1e, 0x65, 0x4f, 0x3d, 0xca, 0xeb, 0x5a, 0xf1, 0x15, 0xc9, 0x7d, 0xb5, 0x89, 0xae, 0x28, - 0xcf, 0x7c, 0x57, 0xe1, 0x89, 0x4a, 0xf3, 0xc0, 0xb9, 0xe8, 0x2b, 0xd0, 0x55, 0x08, 0x09, 0x41, - 0x0e, 0xf1, 0x1f, 0x31, 0x0a, 0xc6, 0xbc, 0x40, 0x40, 0x84, 0x84, 0x6d, 0x59, 0x96, 0x7b, 0x9c, - 0xcc, 0x06, 0xda, 0xdd, 0xe2, 0x04, 0x84, 0x0b, 0x9b, 0x0d, 0x8c, 0xc6, 0x4a, 0x14, 0x96, 0x82, - 0xbe, 0xb1, 0x3f, 0x30, 0xd7, 0xdd, 0x61, 0x0b, 0x84, 0x28, 0x57, 0x41, 0x4c, 0x40, 0x90, 0x51, - 0x9b, 0xe6, 0xdd, 0xe5, 0x7c, 0xbb, 0xda, 0xe2, 0x02, 0x64, 0xaa, 0xac, 0x18, 0xd4, 0xb5, 0x92, - 0x62, 0x0a, 0x11, 0xdd, 0xf1, 0x21, 0x9f, 0x08, 0xf1, 0x21, 0x1e, 0x24, 0x22, 0x28, 0x53, 0xbf, - 0x7b, 0xf1, 0x3c, 0x40, 0x9c, 0x4b, 0xc1, 0x2c, 0x4f, 0xe1, 0x32, 0x6e, 0xd5, 0xaa, 0xe2, 0x2f, - 0xbb, 0xbc, 0x48, 0x27, 0xdd, 0x3a, 0x6e, 0x9f, 0xb8, 0x88, 0xc2, 0x0b, 0xa8, 0xba, 0x88, 0x58, - 0x54, 0x99, 0xb7, 0x32, 0x23, 0x9b, 0x69, 0xbe, 0xff, 0x28, 0x9a, 0x88, 0xc2, 0xc9, 0x88, 0xf0, - 0x87, 0x11, 0xf1, 0x15, 0xcc, 0x4a, 0xd7, 0x10, 0x24, 0xa6, 0x5a, 0xae, 0x20, 0x4c, 0x12, 0x42, - 0x01, 0x1f, 0x8a, 0x3d, 0x59, 0xab, 0xd5, 0x78, 0x9f, 0xb1, 0x25, 0xcf, 0x89, 0xfc, 0x24, 0x2a, - 0xac, 0x75, 0xaf, 0xc1, 0x54, 0x5c, 0xbd, 0x6a, 0x6d, 0x3d, 0x55, 0x57, 0xbe, 0x13, 0xaa, 0xf6, - 0xad, 0xf9, 0x8e, 0xf7, 0xf1, 0x25, 0x3b, 0xbd, 0xf1, 0x3e, 0x26, 0x62, 0xde, 0xea, 0x20, 0x47, - 0xd5, 0xee, 0x20, 0x32, 0x22, 0xaa, 0xab, 0x03, 0x04, 0x87, 0xd6, 0x67, 0x8c, 0x1d, 0x2b, 0x2b, - 0x69, 0x55, 0x57, 0x55, 0xf0, 0xc4, 0x26, 0x47, 0x9b, 0x2f, 0xbf, 0x12, 0x09, 0x45, 0xbb, 0xf7, - 0x68, 0xf9, 0x1c, 0x82, 0x0e, 0x69, 0xf1, 0x95, 0xf8, 0x94, 0x4e, 0xe2, 0x03, 0x3e, 0x11, 0xa8, - 0x98, 0x23, 0x12, 0xda, 0xef, 0xc4, 0x09, 0x04, 0x42, 0x1d, 0xfe, 0xf8, 0x2d, 0xad, 0x76, 0xea, - 0xff, 0x25, 0x57, 0xe2, 0x7e, 0x28, 0xae, 0xfb, 0xdf, 0x89, 0x12, 0xcf, 0x7b, 0xe2, 0x35, 0xd9, - 0x1e, 0xf3, 0xf1, 0x1a, 0xad, 0x47, 0x11, 0x33, 0x84, 0x21, 0x71, 0x9c, 0xdd, 0xfb, 0xf6, 0x9c, - 0x55, 0xfe, 0x10, 0x82, 0x42, 0xd6, 0x45, 0x11, 0x43, 0xd1, 0x1e, 0x22, 0xef, 0x77, 0xc4, 0x04, - 0x51, 0xde, 0xb9, 0x04, 0x3b, 0xbf, 0x84, 0x45, 0x09, 0x5a, 0xea, 0xab, 0x89, 0x84, 0xeb, 0x5e, - 0xef, 0xe4, 0x32, 0xd5, 0x49, 0x88, 0x28, 0xd5, 0xaf, 0x08, 0xf8, 0x44, 0x41, 0x62, 0xb7, 0x7f, - 0x82, 0x1b, 0xdf, 0xd5, 0xdd, 0xef, 0x26, 0x27, 0x89, 0x13, 0xc4, 0x78, 0x64, 0x22, 0x22, 0xab, - 0x56, 0x8b, 0x4f, 0x08, 0x48, 0x39, 0xb9, 0x55, 0xc4, 0x41, 0x19, 0xf1, 0x79, 0x52, 0x1d, 0xfc, - 0x40, 0x66, 0xe2, 0x65, 0x11, 0x5a, 0xf8, 0x4c, 0x5a, 0xd2, 0xee, 0xf8, 0x81, 0x26, 0xee, 0xfc, - 0x47, 0xc9, 0x5a, 0xfc, 0xd7, 0x7f, 0xcc, 0x77, 0x77, 0x7f, 0x31, 0x39, 0xd4, 0x62, 0x03, 0x3c, - 0x14, 0x82, 0x11, 0x27, 0x77, 0xde, 0xfc, 0x46, 0x5c, 0x4f, 0xd1, 0x9f, 0x89, 0xdc, 0x22, 0x19, - 0x75, 0x5a, 0xe1, 0x08, 0x27, 0x35, 0x45, 0xd3, 0x5d, 0x4b, 0x7c, 0x37, 0xc7, 0x16, 0xc2, 0xdf, - 0x9c, 0x38, 0x28, 0x7e, 0x1c, 0xf2, 0xc4, 0x06, 0x08, 0x5d, 0xdb, 0xc4, 0x09, 0x75, 0xaf, 0xcb, - 0x77, 0x7b, 0x89, 0x8f, 0x13, 0xbb, 0xbb, 0xde, 0xf3, 0xa8, 0xe1, 0x1f, 0x8a, 0x35, 0xef, 0x77, - 0xe1, 0x80, 0xc0, 0x8b, 0xa3, 0xc7, 0xfd, 0xed, 0xbc, 0x23, 0xc4, 0x86, 0x7c, 0x23, 0x5d, 0xdd, - 0xbf, 0x84, 0x64, 0xc3, 0x3c, 0x40, 0x44, 0x10, 0x8a, 0x91, 0x3c, 0xac, 0x1f, 0x0d, 0x8b, 0xc7, - 0x17, 0x3d, 0xc4, 0x3f, 0xe1, 0xae, 0x09, 0x0c, 0x9b, 0x6e, 0xb5, 0xc4, 0x06, 0x4c, 0x5b, 0xdd, - 0xc4, 0x88, 0xa8, 0x91, 0x35, 0x89, 0x26, 0xee, 0xfc, 0x22, 0x09, 0x6e, 0xee, 0xee, 0xee, 0xef, - 0xe2, 0x42, 0x76, 0xf7, 0x77, 0xf8, 0x9e, 0x24, 0x4f, 0x82, 0x00, 0x88, 0xd3, 0xf7, 0x71, 0x58, - 0xad, 0xdd, 0xe7, 0xf7, 0xe2, 0x7e, 0x09, 0x04, 0x72, 0x77, 0xbc, 0x20, 0x88, 0xff, 0x15, 0x77, - 0x7d, 0xdd, 0xfd, 0x16, 0xbe, 0x09, 0xef, 0x7e, 0xac, 0x6f, 0xc4, 0x7c, 0x4b, 0x2b, 0xde, 0xe2, - 0x35, 0x10, 0x11, 0x05, 0x43, 0x8b, 0xd3, 0xdb, 0x5a, 0xbb, 0x97, 0x96, 0xf2, 0xfa, 0x17, 0xa8, - 0x67, 0x82, 0x71, 0x0d, 0xa9, 0x98, 0xe2, 0x9b, 0x62, 0x9c, 0x5f, 0x14, 0x5b, 0xbb, 0xbe, 0xfe, - 0xaf, 0x51, 0x02, 0x2b, 0x11, 0x51, 0x22, 0x7c, 0x4a, 0xbf, 0x13, 0xf1, 0x3c, 0x4f, 0xc2, 0x3c, - 0x23, 0x21, 0x5e, 0xfc, 0x48, 0x46, 0x48, 0x9f, 0xc5, 0xdd, 0xf7, 0x77, 0x7f, 0x77, 0x6d, 0xfe, - 0x4b, 0xef, 0x88, 0xcb, 0xc1, 0x08, 0x85, 0x5a, 0x95, 0xb8, 0x81, 0x20, 0xae, 0xe2, 0xb1, 0x58, - 0xad, 0x4f, 0x8b, 0x2d, 0x95, 0x44, 0x8a, 0x45, 0x74, 0x31, 0xc2, 0x24, 0x76, 0xba, 0x9c, 0xde, - 0xb8, 0xaf, 0x08, 0x06, 0x44, 0x14, 0xf9, 0xea, 0xbf, 0x21, 0xdd, 0xfc, 0x4c, 0x12, 0x5d, 0xdd, - 0xea, 0x68, 0x90, 0x82, 0x2a, 0x3b, 0xe2, 0x47, 0x6e, 0xf7, 0xbb, 0xde, 0xfe, 0x08, 0xae, 0xf7, - 0x7f, 0x10, 0x22, 0xef, 0xde, 0xf8, 0x90, 0x41, 0xff, 0x9b, 0x5a, 0xa8, 0x44, 0x47, 0x13, 0xa8, - 0x8d, 0xf1, 0x77, 0x77, 0x77, 0x7b, 0xf1, 0x3c, 0x46, 0xb0, 0x8d, 0x77, 0x55, 0xf8, 0x92, 0x0c, - 0xa6, 0xa4, 0xf8, 0x81, 0x20, 0xa4, 0x49, 0xea, 0xba, 0x8c, 0xf5, 0xc7, 0x15, 0xc4, 0x0f, 0x73, - 0xd0, 0xbc, 0x20, 0x19, 0x62, 0x8b, 0x4f, 0x88, 0x08, 0xb3, 0xea, 0xea, 0x24, 0x22, 0xef, 0x7f, - 0x8b, 0x3b, 0xbb, 0xe6, 0xfa, 0x89, 0xf1, 0x22, 0x49, 0x55, 0xaf, 0x13, 0xf0, 0x44, 0x4d, 0xdf, - 0xb8, 0x90, 0x87, 0x12, 0x21, 0x5f, 0xc2, 0x15, 0xeb, 0x12, 0xbd, 0x71, 0x16, 0x57, 0xbb, 0x97, - 0x9a, 0xab, 0xf1, 0x3f, 0x2e, 0xaa, 0xbe, 0x12, 0xaa, 0xaa, 0xaa, 0xd7, 0x89, 0xbc, 0x48, 0x2a, - 0x15, 0x7a, 0xbb, 0x97, 0x96, 0xd3, 0x72, 0x42, 0xdf, 0xe0, 0x8c, 0x4e, 0x7e, 0xfd, 0x0a, 0x71, - 0x46, 0xe3, 0x49, 0x9c, 0x6a, 0x56, 0x70, 0x80, 0x44, 0x10, 0x93, 0xcb, 0xcf, 0x54, 0x40, 0x9a, - 0x89, 0xd4, 0x23, 0xbe, 0x85, 0xbd, 0x76, 0x45, 0xad, 0x61, 0x1f, 0xf1, 0x3e, 0x20, 0x4d, 0x72, - 0x9d, 0xde, 0xfc, 0x4f, 0x13, 0xe2, 0x44, 0xf1, 0x3f, 0x8b, 0x2d, 0x56, 0xb5, 0xae, 0x52, 0x56, - 0xbe, 0x42, 0xd5, 0x57, 0x12, 0x11, 0xac, 0x4f, 0xcc, 0x45, 0x5a, 0xae, 0x08, 0x84, 0x46, 0x71, - 0x85, 0xae, 0x10, 0x08, 0x0c, 0xcd, 0xba, 0xaa, 0xd3, 0x85, 0xab, 0xde, 0xe1, 0x48, 0x81, 0x20, - 0xa0, 0x9c, 0x5e, 0xaa, 0x2e, 0x52, 0xe2, 0x02, 0x32, 0x44, 0x88, 0x17, 0x7b, 0xbe, 0xef, 0xc4, - 0x89, 0x3e, 0x7e, 0xa3, 0xf9, 0x4a, 0xd1, 0xa0, 0xc9, 0x1b, 0x13, 0xf0, 0x5c, 0x25, 0xc5, 0x6e, - 0xef, 0x77, 0xaf, 0x93, 0xbb, 0xf1, 0x3e, 0x22, 0xa2, 0x75, 0xde, 0xef, 0xf7, 0xbd, 0xfc, 0x9a, - 0xd7, 0x11, 0x75, 0xaa, 0xf9, 0xba, 0xaf, 0x96, 0xaa, 0xb5, 0xd5, 0xb8, 0x91, 0x24, 0x22, 0xaf, - 0x89, 0xf8, 0x94, 0x4e, 0xf1, 0x3c, 0x40, 0x9e, 0x19, 0x0c, 0x82, 0x52, 0xaa, 0xd5, 0x57, 0xef, - 0x0c, 0x89, 0x11, 0x35, 0x64, 0xab, 0x88, 0x80, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x1c, 0x0e, - 0x30, 0xe8, 0x37, 0xd0, 0x47, 0xa0, 0x28, 0x3a, 0xc5, 0x84, 0x5e, 0x09, 0xc6, 0xab, 0xec, 0xac, - 0xa3, 0x38, 0x20, 0x68, 0xce, 0xbd, 0x05, 0x30, 0x80, 0x1a, 0x41, 0x60, 0x43, 0x89, 0xe2, 0x9b, - 0x61, 0x63, 0x50, 0x5e, 0xa7, 0x80, 0x01, 0x0e, 0x7e, 0x41, 0x53, 0x8a, 0xa3, 0xb8, 0x80, 0x30, - 0x8b, 0x30, 0x83, 0xc6, 0x55, 0xd1, 0xa4, 0x6d, 0xd5, 0xcb, 0x18, 0x65, 0x84, 0xc1, 0xaa, 0x65, - 0xff, 0xb7, 0xed, 0xec, 0x88, 0xe7, 0x29, 0x5b, 0xb6, 0x16, 0x65, 0xff, 0xa2, 0x35, 0x44, 0xe0, - 0xa6, 0x22, 0x14, 0x08, 0x6e, 0xe5, 0xb2, 0x60, 0x72, 0x15, 0x8a, 0xc6, 0xa2, 0xae, 0x17, 0x1c, - 0xbb, 0xc4, 0x0f, 0x18, 0xee, 0x18, 0x02, 0x40, 0x52, 0x5e, 0x2b, 0x3c, 0x59, 0x4d, 0xe0, 0xe9, - 0x61, 0x3c, 0x3d, 0xdd, 0x4e, 0x0f, 0x1d, 0xfb, 0x31, 0x2a, 0x3c, 0x74, 0x5c, 0xe0, 0x03, 0xc1, - 0x34, 0xd0, 0x63, 0xc0, 0x00, 0x94, 0x7a, 0x0c, 0x2f, 0x83, 0x08, 0x99, 0x9e, 0x83, 0x3f, 0x83, - 0xa9, 0xa2, 0x94, 0x92, 0xa0, 0x59, 0x55, 0xa6, 0x4b, 0xcc, 0x3d, 0xdd, 0xdd, 0x04, 0x51, 0x41, - 0xd7, 0xa2, 0x00, 0xa2, 0x12, 0x6b, 0x10, 0x0e, 0x88, 0x07, 0x74, 0xd3, 0x85, 0x94, 0x11, 0xe5, - 0xa3, 0xff, 0xe9, 0xf0, 0x82, 0x86, 0xfe, 0x8c, 0x73, 0x19, 0x31, 0x9f, 0xc0, 0xc1, 0x04, 0xda, - 0xd7, 0x14, 0xe9, 0x04, 0x15, 0x07, 0x18, 0xe0, 0x01, 0x2a, 0xb3, 0x23, 0x5b, 0x5b, 0xcd, 0xf1, - 0x43, 0x71, 0x27, 0xfb, 0x97, 0xd5, 0x35, 0x10, 0x8c, 0x2b, 0x3c, 0x23, 0x77, 0x3c, 0x28, 0x62, - 0xc0, 0x06, 0x25, 0xe7, 0x80, 0x0e, 0x25, 0x05, 0x07, 0x8e, 0x13, 0x9c, 0x3a, 0x4c, 0x5c, 0xf0, - 0x70, 0xb7, 0x6e, 0x70, 0xf2, 0x8f, 0x82, 0xd9, 0x41, 0x1d, 0x20, 0x2d, 0x30, 0x88, 0x31, 0x0a, - 0x4b, 0xe9, 0x1d, 0x50, 0xc2, 0x58, 0x65, 0x3d, 0x79, 0x66, 0x59, 0x96, 0x62, 0x9c, 0x8b, 0xa8, - 0xa7, 0xae, 0x0a, 0x37, 0xd0, 0xd6, 0xf0, 0x88, 0xa1, 0x57, 0x74, 0x04, 0x5e, 0x95, 0x4c, 0x75, - 0xfa, 0xe0, 0x80, 0x14, 0x94, 0xd7, 0x8d, 0xf1, 0x22, 0x47, 0x68, 0x9e, 0x3c, 0xa3, 0xa5, 0x8a, - 0x2a, 0x38, 0xe0, 0xa0, 0xc5, 0x62, 0xb7, 0xc2, 0x21, 0x10, 0xa6, 0xa2, 0x01, 0xc6, 0xe0, 0x83, - 0x81, 0x60, 0x0d, 0x59, 0x78, 0x97, 0x37, 0xaa, 0xf5, 0xc1, 0x80, 0x14, 0x46, 0x64, 0xe4, 0x22, - 0xb3, 0x05, 0xd4, 0x6c, 0xf7, 0x7e, 0x0a, 0xec, 0x71, 0x05, 0xc2, 0x34, 0x02, 0xb1, 0x96, 0x64, - 0xb0, 0x3a, 0x13, 0x85, 0xe2, 0xc0, 0x02, 0xd1, 0x19, 0x1a, 0xb2, 0x33, 0x5b, 0xff, 0xfb, 0xff, - 0xc1, 0x73, 0x81, 0x0a, 0x18, 0xa8, 0xd8, 0xfb, 0x10, 0x55, 0x0c, 0x45, 0x17, 0x83, 0xa5, 0xe0, - 0xd4, 0x2a, 0x49, 0xc3, 0x4e, 0x04, 0x10, 0xa0, 0xa8, 0xac, 0x3d, 0x8a, 0x2d, 0x68, 0x72, 0x82, - 0x3a, 0x2b, 0xcc, 0x7b, 0x63, 0x9b, 0x97, 0xca, 0xc4, 0x42, 0xc6, 0xce, 0x24, 0x40, 0x53, 0xa9, - 0x14, 0xe2, 0x2c, 0x17, 0x95, 0x92, 0xf4, 0xcf, 0x56, 0x53, 0xa0, 0xb3, 0xb8, 0x59, 0x97, 0x8a, - 0x6f, 0xc1, 0x44, 0x48, 0x4d, 0x6b, 0x5a, 0xab, 0xc4, 0x02, 0x41, 0x96, 0xe5, 0x7f, 0x70, 0x40, - 0x19, 0x10, 0x2a, 0xb4, 0x97, 0x57, 0xf0, 0x4a, 0x36, 0x3b, 0x67, 0xac, 0xee, 0xdd, 0xf0, 0xca, - 0x12, 0x01, 0xe4, 0x8c, 0xa5, 0xc9, 0xa7, 0xff, 0xf9, 0x51, 0xd6, 0x07, 0x10, 0x70, 0x0b, 0x84, - 0x05, 0xc5, 0x6f, 0xa9, 0xb9, 0xb8, 0xaa, 0x17, 0x57, 0x02, 0xc8, 0x40, 0x16, 0x0a, 0xae, 0x40, - 0xdb, 0x93, 0x11, 0x86, 0x5b, 0x74, 0x82, 0x12, 0xde, 0xe8, 0x11, 0x15, 0xbc, 0xf0, 0xbd, 0x15, - 0x89, 0xe3, 0x13, 0x3a, 0x3f, 0x07, 0x36, 0x58, 0x24, 0x87, 0xe5, 0x93, 0x82, 0x81, 0x76, 0x21, - 0x19, 0x57, 0xc1, 0x50, 0x71, 0x8b, 0x00, 0x19, 0x17, 0x5d, 0x6d, 0x3f, 0x77, 0xbf, 0xff, 0x65, - 0x0a, 0x9d, 0x7f, 0xfa, 0xd7, 0x11, 0x0a, 0x0a, 0x2b, 0x37, 0x85, 0xd4, 0x0f, 0xf5, 0x96, 0xb1, - 0x79, 0x7d, 0x8c, 0x1d, 0x5d, 0x8d, 0x18, 0x14, 0xcf, 0x1e, 0x20, 0x28, 0x47, 0x28, 0x8b, 0x53, - 0x33, 0xc6, 0xdf, 0x2f, 0xbb, 0x7f, 0x70, 0x20, 0x41, 0x58, 0x45, 0xde, 0xf9, 0x3f, 0x8d, 0x32, - 0x7a, 0xe0, 0xa2, 0xab, 0xda, 0x74, 0x45, 0x2e, 0x08, 0x01, 0x08, 0xa0, 0x95, 0x6b, 0xa6, 0xfc, - 0x43, 0x17, 0x6d, 0x34, 0xb0, 0x80, 0x67, 0x89, 0x0c, 0x9b, 0xc6, 0xaa, 0xc1, 0x80, 0x90, 0x88, - 0xa1, 0x3e, 0x30, 0x38, 0xea, 0x03, 0xcf, 0x03, 0x3e, 0x07, 0x91, 0x42, 0xfa, 0xca, 0xa0, 0x55, - 0x1d, 0xe4, 0xe0, 0xe9, 0xbe, 0x96, 0xfc, 0x10, 0xc1, 0x49, 0xd0, 0x0a, 0xd7, 0x53, 0x20, 0xfc, - 0xd6, 0x51, 0x52, 0x63, 0xe4, 0x5a, 0x16, 0xa7, 0x27, 0xbe, 0x7a, 0x0b, 0x31, 0x00, 0xaa, 0xa2, - 0x16, 0x17, 0x76, 0x1d, 0xec, 0x65, 0x2b, 0x88, 0xa0, 0xee, 0x91, 0x41, 0x76, 0x35, 0xcf, 0x10, - 0x3c, 0x85, 0xec, 0x53, 0xd5, 0x71, 0x7e, 0x20, 0x41, 0x82, 0x7c, 0xf6, 0xa1, 0x0f, 0xc4, 0x04, - 0x19, 0xdd, 0x2a, 0xbf, 0xc2, 0x62, 0xf1, 0xfc, 0xba, 0xd7, 0x08, 0x02, 0x10, 0x58, 0x45, 0x5a, - 0x75, 0x8d, 0x22, 0x25, 0x3f, 0x9e, 0xe0, 0xe0, 0x18, 0x84, 0x45, 0x06, 0xe8, 0xaf, 0x3e, 0x8a, - 0xe6, 0x8a, 0xc6, 0x04, 0xcd, 0xd3, 0xaf, 0xbe, 0x83, 0xdc, 0xda, 0xef, 0xe0, 0xc0, 0x20, 0x24, - 0x6b, 0x66, 0x21, 0x38, 0xc9, 0x96, 0x07, 0x70, 0x9d, 0x49, 0x7f, 0x49, 0x7c, 0x1c, 0x08, 0x82, - 0xbc, 0x4f, 0xc1, 0x38, 0x85, 0x27, 0x4b, 0x28, 0xc1, 0xb6, 0x2e, 0x3b, 0x78, 0x40, 0x29, 0x58, - 0x9e, 0x1a, 0x20, 0xa4, 0x55, 0x22, 0x6d, 0x15, 0x29, 0xf5, 0x0b, 0x17, 0x13, 0x20, 0x2b, 0x2c, - 0xfb, 0xc4, 0xf1, 0x02, 0x78, 0x91, 0x00, 0xb4, 0x81, 0xf2, 0x92, 0xd9, 0xe2, 0xe4, 0xc5, 0x9e, - 0xe2, 0x42, 0x06, 0x16, 0xab, 0x0b, 0xe9, 0xe6, 0x15, 0xa2, 0x5c, 0x32, 0x08, 0x01, 0x4d, 0x63, - 0x19, 0xc5, 0x2b, 0x06, 0xcf, 0xc1, 0x24, 0xf1, 0x98, 0x05, 0xe5, 0x3b, 0x36, 0x67, 0xb8, 0x80, - 0xc8, 0x21, 0x12, 0x80, 0x11, 0x87, 0xfe, 0x97, 0x31, 0x2f, 0xe8, 0x2c, 0x84, 0x04, 0x8a, 0xd8, - 0xa6, 0x5e, 0x03, 0xb5, 0xa6, 0x0e, 0xfc, 0x7b, 0x5a, 0x66, 0x20, 0x48, 0xb2, 0x77, 0xe4, 0xd4, - 0x67, 0xf8, 0x2a, 0xc6, 0x54, 0xc4, 0x2b, 0xd6, 0xb1, 0x77, 0x50, 0xbd, 0x03, 0x5a, 0x8e, 0xef, - 0x85, 0x0a, 0x43, 0x44, 0xc7, 0x9d, 0x25, 0x73, 0xa8, 0x0f, 0xe7, 0x51, 0xfc, 0x54, 0x31, 0x4f, - 0xa4, 0xa6, 0xcc, 0x55, 0x52, 0xba, 0xd7, 0x78, 0xef, 0x9f, 0x78, 0x90, 0x53, 0x51, 0x76, 0xa5, - 0x56, 0x19, 0x27, 0x7b, 0xec, 0xeb, 0xdf, 0x19, 0x29, 0x05, 0x04, 0x2b, 0x21, 0x11, 0xdf, 0x4d, - 0x55, 0x71, 0x06, 0x94, 0xaf, 0xe3, 0x08, 0xaa, 0xaa, 0xb4, 0xea, 0x9c, 0x9e, 0x2e, 0xef, 0xe1, - 0x12, 0x79, 0x70, 0x5d, 0x04, 0x2e, 0x6d, 0x10, 0xc2, 0xaf, 0x86, 0x41, 0x00, 0x81, 0x63, 0xda, - 0x86, 0x5c, 0x1e, 0x27, 0xcf, 0xd7, 0xe7, 0xfc, 0x14, 0x82, 0x0e, 0x08, 0x70, 0x57, 0x89, 0xe1, - 0x00, 0x88, 0x2a, 0x23, 0x04, 0x10, 0x7a, 0x60, 0xf3, 0x2a, 0xfa, 0x91, 0x45, 0xec, 0x3b, 0xee, - 0x7c, 0xdb, 0xee, 0x10, 0x12, 0x09, 0xb8, 0xca, 0xed, 0x5f, 0x6e, 0x22, 0x3e, 0xb7, 0xae, 0x94, - 0x56, 0x9b, 0xe2, 0x22, 0x32, 0xf5, 0xca, 0xfe, 0x3e, 0xab, 0x55, 0xd7, 0x15, 0xbf, 0x12, 0x10, - 0x3b, 0x8a, 0xe5, 0x61, 0xee, 0xf7, 0xbf, 0xa1, 0x0f, 0xf0, 0x4c, 0x24, 0x19, 0x6c, 0x57, 0xaa, - 0x20, 0x56, 0x79, 0x43, 0x18, 0xa3, 0xa3, 0x07, 0x7e, 0xfc, 0x47, 0x84, 0x3c, 0x23, 0x82, 0xb8, - 0x20, 0x13, 0xe2, 0x02, 0x82, 0x30, 0xdc, 0xc4, 0x0b, 0xb1, 0xd7, 0x61, 0x70, 0x1e, 0xc7, 0x1b, - 0x9d, 0xc9, 0xab, 0x30, 0xc3, 0x38, 0x0d, 0xba, 0x64, 0xa3, 0x38, 0xf8, 0xc4, 0xe0, 0x3e, 0xa1, - 0x16, 0x6c, 0xea, 0xe0, 0xfc, 0xff, 0x08, 0xf7, 0x75, 0x85, 0xbe, 0xe1, 0x12, 0x98, 0xa8, 0x62, - 0x56, 0x23, 0xab, 0x12, 0x11, 0x18, 0x71, 0x58, 0x59, 0xa0, 0xa3, 0x6e, 0x65, 0xd1, 0x59, 0xb2, - 0xce, 0x5e, 0x2b, 0x46, 0xe6, 0xeb, 0x38, 0xd1, 0x38, 0xd3, 0x11, 0x19, 0xa7, 0x5d, 0xdd, 0xfe, - 0x4d, 0x8d, 0x2c, 0xaf, 0x84, 0x73, 0x91, 0x76, 0x11, 0x8a, 0xee, 0x25, 0x20, 0x96, 0xdf, 0x9f, - 0x82, 0xbb, 0x8a, 0xdb, 0xec, 0xf7, 0x0b, 0x7d, 0xce, 0xc5, 0xbf, 0xc9, 0x96, 0x5f, 0x11, 0xc1, - 0x86, 0x0b, 0x78, 0xaf, 0x2d, 0x27, 0xff, 0x8f, 0x11, 0x19, 0xcf, 0x8e, 0xf6, 0x1e, 0x02, 0x6f, - 0xdc, 0xaf, 0x66, 0xc5, 0x80, 0xa2, 0x9b, 0xa2, 0x0e, 0xb7, 0x4b, 0xc2, 0x9a, 0xa4, 0xc3, 0x34, - 0x2e, 0x86, 0x7a, 0x43, 0xe8, 0xfc, 0xd2, 0x5c, 0x39, 0x20, 0x42, 0xae, 0x06, 0xd0, 0xb1, 0x90, - 0xd6, 0xe2, 0x68, 0xc1, 0xbc, 0xb3, 0x63, 0xee, 0x7b, 0xed, 0x34, 0x68, 0x9f, 0xde, 0x58, 0x0e, - 0x9f, 0x43, 0xdc, 0x5f, 0x2e, 0x8e, 0xf8, 0x91, 0x3b, 0x1d, 0xf1, 0x63, 0xb2, 0xc1, 0x8a, 0xb5, - 0xd9, 0xde, 0x24, 0x41, 0xbc, 0xbf, 0x11, 0x19, 0x13, 0xa4, 0x41, 0x80, 0x1c, 0xc7, 0xf6, 0x52, - 0xc2, 0x50, 0x59, 0xd1, 0xdd, 0xb9, 0x83, 0x0c, 0x9b, 0x36, 0x86, 0xbf, 0x49, 0x55, 0xdc, 0xfc, - 0x14, 0x89, 0x4a, 0xd3, 0xde, 0xef, 0x7b, 0xfc, 0x49, 0xca, 0xc3, 0xe9, 0xbb, 0xfe, 0x61, 0xd7, - 0x8a, 0xfc, 0x11, 0x8d, 0x55, 0x59, 0x68, 0x2c, 0xe0, 0x9c, 0xb0, 0xe8, 0xc5, 0xd9, 0x96, 0x14, - 0xdc, 0x7f, 0xf8, 0x82, 0x59, 0x69, 0x90, 0x95, 0x95, 0x7c, 0x15, 0x11, 0x41, 0xbf, 0x35, 0xc7, - 0xac, 0x3a, 0x41, 0x3e, 0x6e, 0x5f, 0x44, 0xfc, 0x48, 0x80, 0x4a, 0x42, 0x61, 0xd1, 0xf7, 0x2f, - 0x24, 0x4b, 0x0d, 0xfe, 0xe2, 0x04, 0x82, 0x3a, 0xaa, 0xfb, 0xc4, 0x02, 0x72, 0x97, 0x57, 0xb5, - 0x7b, 0x77, 0x7b, 0xf1, 0x31, 0x04, 0x50, 0x69, 0x0d, 0x79, 0x27, 0x2e, 0x19, 0x6c, 0x37, 0x91, - 0xef, 0xcb, 0x2f, 0x06, 0x7f, 0x96, 0x8d, 0xeb, 0xe6, 0x12, 0xab, 0xae, 0x0a, 0x86, 0x2e, 0x2f, - 0x8b, 0xc4, 0x73, 0x37, 0xee, 0x18, 0x12, 0x51, 0xae, 0xed, 0x85, 0xc2, 0x2c, 0x37, 0x5f, 0xad, - 0x41, 0x4c, 0x40, 0x8e, 0x18, 0x08, 0xfc, 0xa1, 0xeb, 0x96, 0x8d, 0xa7, 0x84, 0x49, 0x83, 0xbf, - 0x05, 0x77, 0x28, 0xea, 0x0d, 0xd6, 0xce, 0xdc, 0xf8, 0x40, 0x9b, 0x3f, 0x26, 0x5a, 0x64, 0xa8, - 0x23, 0x1a, 0xf1, 0x67, 0x21, 0x04, 0x70, 0x40, 0xaf, 0x66, 0xbf, 0xc4, 0x5f, 0x04, 0x62, 0xdf, - 0x77, 0xf1, 0x35, 0xc2, 0x61, 0x01, 0x0d, 0x15, 0xfb, 0xb9, 0x72, 0x2b, 0xc2, 0x02, 0x50, 0xd7, - 0x82, 0x8e, 0x11, 0xbd, 0xf5, 0x2e, 0x45, 0xcd, 0x98, 0x60, 0x22, 0x0c, 0x08, 0xf1, 0x03, 0x82, - 0xb7, 0x7b, 0x8c, 0xf5, 0xb8, 0xb7, 0xfc, 0x40, 0x90, 0x81, 0x6f, 0x71, 0x5f, 0x76, 0xd7, 0xe3, - 0xef, 0xbb, 0xbb, 0xe4, 0xb3, 0x69, 0xa0, 0x3e, 0xcc, 0x4c, 0x70, 0x87, 0x6b, 0x17, 0xa6, 0xf5, - 0x7f, 0x8e, 0xaa, 0x72, 0x2e, 0x46, 0x17, 0xe5, 0xfa, 0xa1, 0xf8, 0x40, 0xac, 0xc5, 0xf5, 0x5d, - 0x52, 0xc4, 0xef, 0x90, 0x5b, 0xbb, 0xbb, 0xe4, 0x14, 0xed, 0xbb, 0xf8, 0x4c, 0x42, 0xd6, 0xab, - 0xe1, 0x01, 0x28, 0xbd, 0x04, 0xd1, 0x10, 0x54, 0x72, 0xc9, 0xd2, 0x2f, 0xbb, 0x88, 0x71, 0xaa, - 0xb4, 0xab, 0x08, 0x04, 0x41, 0x39, 0xae, 0xfe, 0x2f, 0x2f, 0x12, 0x08, 0x67, 0xa1, 0xea, 0x2b, - 0xaf, 0xb8, 0x9f, 0x10, 0x11, 0x10, 0x72, 0x53, 0x88, 0x60, 0xfc, 0x72, 0xde, 0x26, 0x0b, 0x05, - 0x5d, 0xf4, 0xdb, 0x8d, 0xd2, 0x4c, 0xf9, 0xe1, 0x5b, 0x94, 0xff, 0x08, 0x54, 0x68, 0x2c, 0x36, - 0xb0, 0x2d, 0xfc, 0xda, 0xe2, 0x39, 0x1e, 0x24, 0x48, 0x91, 0x6e, 0xaf, 0xcf, 0xeb, 0x13, 0xf5, - 0x7f, 0x13, 0xc4, 0x09, 0xe2, 0x3c, 0x40, 0x8e, 0x22, 0x4e, 0xed, 0x78, 0x25, 0x11, 0xaa, 0xd2, - 0x53, 0x7e, 0xf0, 0x88, 0xbd, 0x6b, 0x9b, 0x0d, 0xb8, 0x81, 0x25, 0x2e, 0xd3, 0x58, 0x42, 0x61, - 0x79, 0x72, 0x08, 0xa2, 0x26, 0x11, 0x27, 0xf0, 0xc0, 0x44, 0x41, 0x2a, 0xb5, 0x55, 0x5e, 0x24, - 0x67, 0x96, 0x8c, 0xf7, 0xdd, 0xdd, 0xef, 0xeb, 0xdc, 0x4d, 0x1f, 0xb8, 0x81, 0x21, 0x1a, 0xea, - 0xaa, 0xaa, 0xa4, 0xc2, 0xa9, 0xf1, 0x31, 0xc2, 0x9b, 0x11, 0xaa, 0xb9, 0x45, 0xd0, 0x07, 0x18, - 0xb4, 0x1e, 0x57, 0xc6, 0xd4, 0xa9, 0xfc, 0x4b, 0xe7, 0xd1, 0x3a, 0x78, 0x40, 0xa7, 0x85, 0x13, - 0x0e, 0x6f, 0xac, 0x3a, 0x59, 0x53, 0xe5, 0x3d, 0xd3, 0xbe, 0x8e, 0xfe, 0x20, 0xbc, 0x56, 0xfe, - 0x5b, 0xbb, 0xbe, 0x24, 0x4f, 0x12, 0x19, 0xf1, 0x3c, 0x44, 0x12, 0x92, 0x1d, 0xf7, 0x1e, 0xb1, - 0xc5, 0xbe, 0xf8, 0x25, 0x15, 0x2a, 0xaa, 0xef, 0x6e, 0x39, 0xc4, 0x5c, 0xf9, 0xdf, 0x11, 0x05, - 0x42, 0x76, 0x9c, 0xb9, 0xbf, 0x1a, 0xa4, 0x5c, 0x4c, 0xbd, 0x72, 0x62, 0x7d, 0x6a, 0x1e, 0x84, - 0x23, 0x27, 0xc7, 0xc5, 0x61, 0x45, 0x55, 0x31, 0x1d, 0x2b, 0x93, 0x1d, 0x18, 0xbe, 0x24, 0x22, - 0x4d, 0x55, 0xef, 0x5d, 0xf8, 0x47, 0x89, 0xb2, 0x55, 0x57, 0xcc, 0x75, 0xaf, 0x84, 0x38, 0x80, - 0x88, 0xa8, 0xac, 0x51, 0xc7, 0xfc, 0xfb, 0x7f, 0x1c, 0x4b, 0xc5, 0x77, 0x7a, 0xd2, 0xe2, 0x04, - 0x9b, 0xaa, 0xf1, 0x03, 0x8e, 0xf7, 0xaf, 0x49, 0x66, 0x47, 0x6e, 0xdf, 0xe1, 0x1b, 0xee, 0xa9, - 0xa6, 0xe7, 0xfd, 0xf8, 0x46, 0xb8, 0x44, 0xfb, 0x8a, 0xdf, 0x77, 0x77, 0x7f, 0x31, 0x1e, 0xef, - 0xe0, 0x84, 0xaf, 0x7b, 0xf1, 0x02, 0x7e, 0x4d, 0x6b, 0xc4, 0x8b, 0xee, 0xf5, 0xaf, 0x13, 0xe2, - 0x51, 0x3b, 0xc4, 0xf1, 0x02, 0x43, 0x43, 0x1a, 0xc5, 0xc5, 0xc6, 0x0e, 0x93, 0xdb, 0xff, 0x82, - 0x32, 0xe0, 0xd8, 0x97, 0xd7, 0xc1, 0x1f, 0x18, 0xa7, 0xd0, 0xec, 0x21, 0x04, 0xe5, 0xb1, 0xdd, - 0xea, 0x23, 0xfb, 0xe0, 0xba, 0xf3, 0xe5, 0x6a, 0xa2, 0xf1, 0x85, 0x89, 0x1d, 0x7c, 0xff, 0x4f, - 0xff, 0xc9, 0x55, 0xfc, 0xc6, 0x7b, 0xfc, 0x50, 0x95, 0xad, 0x69, 0xfc, 0x27, 0x5a, 0xf7, 0x75, - 0x11, 0x05, 0xc6, 0x34, 0x16, 0xb5, 0x5f, 0x71, 0x31, 0x25, 0x68, 0xdb, 0xbd, 0xbf, 0x8e, 0x3d, - 0x24, 0x9e, 0x4c, 0x4b, 0x77, 0x7f, 0x9a, 0xef, 0xe1, 0x19, 0xae, 0xf7, 0xf1, 0xd7, 0x1b, 0xf7, - 0xb7, 0xf7, 0x7f, 0x2d, 0xef, 0xc4, 0x89, 0x05, 0xa4, 0x77, 0xde, 0xfe, 0xe2, 0x44, 0xde, 0x27, - 0x89, 0xab, 0xf8, 0x90, 0x42, 0x77, 0xd9, 0xbf, 0x08, 0x86, 0x48, 0x45, 0x5a, 0x5c, 0x48, 0x22, - 0xb4, 0x29, 0xbd, 0xb8, 0x40, 0x48, 0x29, 0x14, 0xed, 0x15, 0xa5, 0x74, 0x6d, 0xc5, 0x6f, 0xe5, - 0xf0, 0x4e, 0x72, 0xff, 0x75, 0x81, 0x0b, 0xa1, 0xde, 0x09, 0xeb, 0x7d, 0xc5, 0x6e, 0x33, 0x70, - 0x80, 0x29, 0xf1, 0x26, 0x2d, 0x6e, 0xb8, 0x91, 0x4b, 0x8b, 0xa8, 0xa6, 0xab, 0x89, 0xb3, 0xae, - 0xb8, 0x81, 0x21, 0x1d, 0xdd, 0xab, 0xbd, 0xb4, 0xd2, 0x7c, 0x4c, 0x65, 0xb3, 0x6b, 0x33, 0x2d, - 0x73, 0x3b, 0xc6, 0xef, 0xd7, 0x27, 0xa8, 0x8a, 0xbf, 0x11, 0x30, 0x97, 0x7a, 0x5e, 0x09, 0x2e, - 0xc6, 0xc4, 0x66, 0x3f, 0xe1, 0x10, 0x55, 0x57, 0x17, 0x8a, 0xdc, 0x57, 0x78, 0x97, 0x1e, 0x3f, - 0x13, 0x64, 0x77, 0xf1, 0x13, 0x5b, 0x5a, 0xf1, 0x2e, 0xf7, 0x47, 0x89, 0x10, 0x43, 0xd6, 0xfc, - 0x48, 0xae, 0xab, 0x59, 0xbe, 0x24, 0x41, 0x05, 0x56, 0xbc, 0x48, 0xba, 0xc9, 0x9b, 0xbf, 0x12, - 0x24, 0x51, 0xe5, 0xc7, 0xde, 0xff, 0x31, 0x5f, 0x75, 0x86, 0x7c, 0x22, 0x0b, 0x4c, 0xba, 0xea, - 0xaf, 0xc2, 0x02, 0x41, 0x51, 0xa9, 0x3b, 0x12, 0xc5, 0x33, 0x29, 0x10, 0x72, 0x5b, 0x46, 0x0d, - 0x77, 0xcf, 0x2b, 0x5d, 0x30, 0x67, 0xef, 0xc3, 0x7c, 0xda, 0xaa, 0x1e, 0x20, 0x48, 0x46, 0xd5, - 0xe9, 0x45, 0x71, 0x47, 0x77, 0xf1, 0x22, 0x5e, 0xdd, 0xee, 0xfe, 0x42, 0x4f, 0x4f, 0x89, 0x04, - 0x59, 0xb2, 0xbf, 0xf1, 0x24, 0x10, 0xef, 0xf1, 0x00, 0xb0, 0x5b, 0xde, 0xfb, 0xed, 0xad, 0x71, - 0x1f, 0x12, 0x2c, 0x8f, 0x7b, 0xdf, 0xe4, 0xbb, 0xbb, 0xe2, 0x38, 0x5d, 0x8d, 0x01, 0x00, 0x03, - 0xb5, 0xf1, 0xef, 0xfb, 0xdf, 0xcb, 0xfc, 0x22, 0x61, 0x13, 0x31, 0xf1, 0x22, 0xaf, 0x7b, 0xdc, - 0x8c, 0x62, 0x22, 0x65, 0xc7, 0x7c, 0xfe, 0xf8, 0x91, 0x3e, 0x11, 0xe1, 0x0f, 0x11, 0x14, 0x57, - 0x9e, 0x6f, 0xe2, 0x28, 0x63, 0xfc, 0x78, 0xd1, 0x76, 0xa9, 0x5c, 0xbd, 0xfe, 0xee, 0xf8, 0x88, - 0x93, 0x5e, 0xd6, 0xee, 0xb1, 0x3f, 0x62, 0xde, 0xd7, 0x84, 0x48, 0x23, 0x55, 0xe1, 0x94, 0x4c, - 0x38, 0x40, 0x48, 0x54, 0x91, 0x76, 0x21, 0x4e, 0xb1, 0x73, 0xa6, 0xbc, 0x69, 0x13, 0xfc, 0xe2, - 0x48, 0x4c, 0xb5, 0x3d, 0xf8, 0x6a, 0x18, 0x87, 0xcc, 0xa7, 0xe6, 0x60, 0xf7, 0xb9, 0x6c, 0xf0, - 0xb5, 0xa7, 0x07, 0xe2, 0xe2, 0x34, 0x86, 0x05, 0x17, 0xe2, 0x01, 0x08, 0x26, 0xd6, 0xb4, 0xd5, - 0x65, 0xf3, 0x1d, 0x55, 0x78, 0x46, 0xaf, 0x58, 0x8f, 0x84, 0x6d, 0x8b, 0xee, 0xee, 0xef, 0x72, - 0xa8, 0xc4, 0x04, 0x38, 0x81, 0x20, 0xaa, 0xc6, 0xf7, 0x15, 0xb8, 0x87, 0xdb, 0xbb, 0xbd, 0xf8, - 0x98, 0x52, 0xef, 0x7b, 0xcb, 0x01, 0xda, 0xac, 0xb6, 0x2b, 0x7b, 0x7b, 0xf1, 0x01, 0x11, 0x1b, - 0x6e, 0x5a, 0x3b, 0xef, 0x89, 0x82, 0x9b, 0x8a, 0xdd, 0xdd, 0xdd, 0xdf, 0x69, 0xf8, 0x99, 0xaf, - 0x7e, 0x0a, 0x01, 0x40, 0xe1, 0x22, 0x1e, 0xee, 0xdb, 0x97, 0x42, 0xb1, 0x5b, 0x9f, 0x1e, 0xf8, - 0x67, 0xec, 0xdb, 0x69, 0xe2, 0x6b, 0xdc, 0x4f, 0xe5, 0xae, 0xbe, 0x63, 0x5d, 0xdf, 0xc8, 0x77, - 0x3f, 0x7f, 0xc2, 0x98, 0x57, 0x73, 0xe6, 0x27, 0xbb, 0xdf, 0x4d, 0xf8, 0x89, 0xb7, 0xa5, 0xe4, - 0xbc, 0xf8, 0xd2, 0x88, 0xf1, 0x33, 0x55, 0x7c, 0x21, 0x20, 0x84, 0xcc, 0xc2, 0xce, 0x10, 0x12, - 0x14, 0xab, 0x8a, 0x6a, 0xda, 0xd4, 0x5e, 0xb1, 0x46, 0xe2, 0x47, 0x0b, 0x6d, 0xf0, 0x46, 0x24, - 0xdf, 0xfa, 0x18, 0xe6, 0x35, 0xdf, 0xc4, 0x8d, 0xb9, 0xf4, 0x4d, 0x86, 0x52, 0x36, 0xe0, 0xa7, - 0xfa, 0xce, 0x0a, 0x8e, 0x26, 0x0c, 0xcc, 0x29, 0x79, 0xf2, 0xc4, 0xf5, 0x62, 0x15, 0x1f, 0xe2, - 0x04, 0x8b, 0xde, 0x5e, 0xfb, 0x7f, 0x16, 0x52, 0xe6, 0xaa, 0xd9, 0x57, 0x04, 0x94, 0xde, 0xef, - 0xf0, 0x50, 0x47, 0xbe, 0xb4, 0xdf, 0xe1, 0x2b, 0xf6, 0xd5, 0x69, 0x62, 0x44, 0x98, 0xaf, 0x7f, - 0x12, 0x11, 0xdd, 0xdf, 0x77, 0x7b, 0xfd, 0xdd, 0xdf, 0xe0, 0x9a, 0xee, 0xf7, 0x77, 0x7a, 0xf9, - 0xae, 0xd8, 0xac, 0x6c, 0x62, 0xa8, 0x44, 0x32, 0x13, 0x2b, 0xbb, 0xbb, 0xef, 0xc3, 0x01, 0x3b, - 0xbd, 0xc5, 0x6f, 0x78, 0x5a, 0x46, 0x54, 0xff, 0xff, 0xe2, 0x2f, 0x8a, 0xdd, 0xee, 0xff, 0x82, - 0xcb, 0xbb, 0xdd, 0xf7, 0x7a, 0x68, 0xef, 0x10, 0x20, 0x16, 0x16, 0x86, 0xc3, 0x72, 0xe7, 0x66, - 0xee, 0xe2, 0xb4, 0x77, 0x88, 0x96, 0xfa, 0x78, 0x40, 0x41, 0xbc, 0xbd, 0xf0, 0x45, 0xdd, 0xdf, - 0x89, 0x08, 0x8a, 0xd6, 0xb5, 0xaf, 0x08, 0x84, 0x86, 0x5e, 0xfa, 0xaf, 0x87, 0x7b, 0xbd, 0xdb, - 0x70, 0x2c, 0x93, 0x52, 0x55, 0x49, 0x80, 0xdc, 0x27, 0x72, 0x02, 0x16, 0x85, 0x1e, 0xce, 0x66, - 0x9f, 0x86, 0x22, 0x04, 0x05, 0x29, 0xba, 0x6f, 0x0c, 0x09, 0x04, 0x68, 0x35, 0xe0, 0xdd, 0x8a, - 0x47, 0x4d, 0x5c, 0x25, 0x35, 0x4b, 0x7f, 0x71, 0x01, 0x12, 0x97, 0x2f, 0xfc, 0xa5, 0x7b, 0x64, - 0xfe, 0x3c, 0xa8, 0x98, 0xeb, 0x1c, 0x37, 0x17, 0xd6, 0xee, 0x5c, 0xbc, 0x4d, 0x93, 0x7b, 0xae, - 0x2a, 0xa9, 0xeb, 0x55, 0xc4, 0x89, 0xf1, 0x02, 0x7a, 0xb9, 0x3b, 0xf3, 0xc3, 0x20, 0xa0, 0x61, - 0x45, 0x76, 0xdc, 0xf4, 0xdc, 0xaa, 0x1f, 0x8c, 0x75, 0xc6, 0xe9, 0xbf, 0x0c, 0x85, 0x39, 0xfd, - 0x24, 0xaf, 0x6c, 0xfe, 0x5b, 0xbf, 0x0c, 0x41, 0x09, 0x2f, 0x77, 0xe1, 0x08, 0x29, 0xbe, 0xed, - 0xf7, 0x7b, 0xdf, 0x88, 0x10, 0xee, 0xfa, 0xc4, 0xab, 0xd6, 0x27, 0xe6, 0x35, 0x56, 0xa2, 0x7f, - 0x20, 0x96, 0x9f, 0xc2, 0x32, 0xdd, 0xdd, 0xfc, 0x9b, 0xbc, 0x9c, 0x9a, 0xd7, 0x89, 0xf8, 0x2a, - 0xaa, 0xd4, 0xd9, 0xd5, 0x55, 0x55, 0xf8, 0x80, 0xc8, 0x2c, 0x10, 0xd9, 0x79, 0xb1, 0x3e, 0xa4, - 0xa9, 0xf9, 0x7b, 0xc5, 0x26, 0xf8, 0xd3, 0xa2, 0x5a, 0xd1, 0x5b, 0xbb, 0x67, 0x24, 0x07, 0x26, - 0x35, 0xbd, 0xdb, 0xd5, 0xb8, 0x87, 0xfc, 0x2d, 0x88, 0x14, 0x29, 0xb1, 0x25, 0x99, 0x20, 0xac, - 0x61, 0x7c, 0x20, 0x08, 0x41, 0x4e, 0xed, 0x44, 0x93, 0xbb, 0xf7, 0xbc, 0xbc, 0x48, 0xe3, 0xd6, - 0x56, 0x2e, 0xf4, 0xda, 0xc2, 0xc1, 0xe2, 0x61, 0x12, 0xaa, 0x7a, 0xd4, 0xf9, 0x76, 0x21, 0x5e, - 0x24, 0x48, 0xeb, 0xdf, 0xc5, 0x6f, 0xa5, 0xe0, 0x9a, 0xf7, 0xbe, 0xf5, 0xc2, 0x3a, 0xe1, 0x3a, - 0xae, 0xab, 0x5e, 0x27, 0x89, 0x82, 0x4e, 0xee, 0xfc, 0x48, 0x80, 0x59, 0xc5, 0x6e, 0xef, 0x8a, - 0xdf, 0xaf, 0x84, 0x6e, 0xc6, 0xf9, 0x58, 0xbd, 0xb6, 0xed, 0xc2, 0xca, 0x09, 0x12, 0x4a, 0x76, - 0xf7, 0xd6, 0xb5, 0xff, 0xaf, 0x7c, 0xbb, 0xdf, 0x13, 0xf9, 0xaf, 0xbe, 0x27, 0x51, 0x35, 0x7a, - 0xe4, 0x2a, 0xef, 0xe0, 0x8b, 0xbb, 0xbf, 0xc2, 0x3b, 0xbb, 0xea, 0xf3, 0xe3, 0x5f, 0x82, 0x1b, - 0xef, 0xde, 0x20, 0x12, 0x55, 0x55, 0x47, 0x6f, 0x82, 0xb9, 0xb3, 0xaa, 0xaa, 0xb4, 0xaa, 0x97, - 0x7d, 0xd5, 0x57, 0xe5, 0xdd, 0x6b, 0xb1, 0x4a, 0xbe, 0x20, 0x32, 0x14, 0x96, 0xdc, 0x51, 0x9f, - 0x8a, 0xde, 0xdf, 0x8b, 0xde, 0x2b, 0x30, 0x3e, 0x10, 0x3d, 0xdb, 0xe6, 0x7d, 0x8d, 0x8e, 0xe1, - 0x4c, 0x40, 0xa3, 0x73, 0xb0, 0xdc, 0x37, 0x0e, 0x97, 0x66, 0x18, 0x04, 0x23, 0x49, 0x35, 0x0d, - 0x8a, 0x6c, 0x69, 0xef, 0x32, 0x4c, 0x1c, 0x4b, 0x55, 0xe3, 0xcf, 0x47, 0xfd, 0x62, 0x4a, 0x27, - 0x10, 0xe3, 0x7c, 0x40, 0x2a, 0xac, 0xac, 0x74, 0x44, 0x76, 0x4d, 0x3a, 0x8b, 0xdf, 0xe6, 0x35, - 0xef, 0xe5, 0x17, 0x76, 0x3f, 0x92, 0x48, 0x7f, 0x37, 0x55, 0xe2, 0x3e, 0x09, 0x75, 0xaa, 0xa7, - 0xf5, 0xf2, 0x11, 0xde, 0xfc, 0x43, 0xa7, 0x7e, 0x27, 0x58, 0x90, 0x56, 0x53, 0xd3, 0x8a, 0x37, - 0xbb, 0xbb, 0xdf, 0x89, 0xf1, 0x1e, 0x27, 0xf3, 0x5d, 0x53, 0x7f, 0x31, 0x5f, 0x36, 0x79, 0x6a, - 0xb2, 0xbe, 0x08, 0xa3, 0x4b, 0xcd, 0xfe, 0x6e, 0xab, 0xe4, 0x22, 0xad, 0x78, 0x92, 0x16, 0xb6, - 0xfc, 0x26, 0x4c, 0x99, 0x55, 0xae, 0x24, 0x48, 0xba, 0xd5, 0x5f, 0x6f, 0x11, 0x31, 0x15, 0x7c, - 0x20, 0x20, 0x51, 0xd6, 0xaa, 0xb3, 0x86, 0x7c, 0x47, 0x89, 0x14, 0x32, 0x16, 0x05, 0x06, 0xe3, - 0x97, 0x35, 0xe1, 0x08, 0x44, 0xb7, 0xbd, 0x12, 0x61, 0xd3, 0x5b, 0xee, 0xe2, 0xb0, 0xa4, 0x20, - 0x24, 0x28, 0x6b, 0xbb, 0x8a, 0xb1, 0xf3, 0x01, 0xbe, 0x08, 0x29, 0x93, 0xeb, 0x97, 0x97, 0xcf, - 0x2e, 0x22, 0x38, 0xb1, 0x0b, 0xca, 0x8b, 0xf2, 0x67, 0xae, 0x20, 0xef, 0x7a, 0xaf, 0x89, 0x12, - 0xc9, 0xaa, 0xf8, 0x27, 0x33, 0x9f, 0xd2, 0x77, 0x3b, 0x0f, 0x61, 0xfe, 0x10, 0x17, 0x47, 0x5a, - 0x51, 0xdf, 0x9b, 0xa8, 0xbc, 0xae, 0x24, 0x22, 0x5a, 0xd7, 0x89, 0x08, 0x71, 0x22, 0x01, 0x1d, - 0x6b, 0xaf, 0x11, 0xf5, 0x7e, 0x20, 0x48, 0xa8, 0xac, 0x56, 0xe2, 0xb7, 0x7f, 0xc6, 0x45, 0x71, - 0x5b, 0x93, 0x3c, 0x56, 0x2b, 0x15, 0x8a, 0xde, 0xef, 0xe1, 0x2e, 0x4d, 0x8a, 0xc5, 0x62, 0xb1, - 0x5f, 0x13, 0xf7, 0x77, 0x77, 0xc4, 0x88, 0x2e, 0xee, 0xf8, 0x89, 0x2e, 0x5e, 0xff, 0x10, 0x3c, - 0xb9, 0xf5, 0xdd, 0xdd, 0xdd, 0xdd, 0xf1, 0x02, 0x07, 0x5d, 0x8f, 0x9f, 0x1f, 0x2c, 0x18, 0xfe, - 0x10, 0x10, 0x59, 0xd8, 0xb7, 0xc4, 0x04, 0x38, 0x8b, 0x93, 0xff, 0x8b, 0xaa, 0xd5, 0x6b, 0xc4, - 0x89, 0x7d, 0x57, 0xd9, 0x2a, 0xab, 0xe1, 0x13, 0xaa, 0x88, 0xc0, 0xbd, 0x54, 0xdc, 0xbf, 0x13, - 0xe2, 0xfe, 0x27, 0x51, 0x32, 0x8a, 0x55, 0xf8, 0x44, 0x12, 0x96, 0x4f, 0x5d, 0x62, 0xfd, 0x85, - 0x59, 0x40, 0x08, 0xa8, 0xf4, 0xb9, 0x76, 0x37, 0x6b, 0xed, 0xfb, 0x66, 0xfb, 0x6d, 0xf0, 0xc8, - 0x2b, 0x35, 0x56, 0xab, 0x55, 0xa9, 0x3f, 0x78, 0x44, 0x61, 0xa3, 0x9b, 0x37, 0x57, 0x55, 0x91, - 0xc5, 0x57, 0xe2, 0x20, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x1d, 0x0e, 0xb0, 0x6a, 0x0d, 0xf4, - 0x11, 0xe8, 0x35, 0xe0, 0x9c, 0xd6, 0xad, 0xd2, 0x9b, 0x12, 0x87, 0xa2, 0xe5, 0xe2, 0x60, 0xd7, - 0xa2, 0x22, 0xbf, 0x82, 0x73, 0xea, 0xb9, 0x28, 0x4a, 0x25, 0x41, 0x6e, 0x89, 0xd3, 0x74, 0x47, - 0x85, 0xfa, 0x3c, 0x65, 0x75, 0xee, 0x19, 0x82, 0x6a, 0x1a, 0x56, 0xa5, 0xa2, 0x9c, 0x7a, 0x55, - 0x89, 0xa2, 0x74, 0x57, 0x04, 0x65, 0xb4, 0xc9, 0x7d, 0x05, 0x31, 0x00, 0x84, 0x16, 0x0e, 0xd5, - 0x69, 0x49, 0xa2, 0x6c, 0x25, 0x0c, 0xb1, 0xa8, 0x21, 0x24, 0xe8, 0x03, 0xc2, 0xd1, 0xc4, 0x02, - 0x10, 0x59, 0xaa, 0xce, 0xf1, 0x1c, 0x3c, 0xd4, 0x48, 0xa6, 0xd1, 0x05, 0xeb, 0xb5, 0x67, 0xb8, - 0x88, 0x23, 0x1b, 0x82, 0x26, 0xb1, 0xba, 0x7e, 0x1c, 0x26, 0x77, 0xbd, 0x30, 0x71, 0x57, 0xfe, - 0x34, 0x4c, 0x96, 0xb2, 0x4c, 0xf5, 0x5a, 0xba, 0xb9, 0x73, 0x8a, 0xf2, 0x6a, 0x5b, 0x4d, 0x34, - 0xd7, 0x82, 0x42, 0x35, 0x59, 0x59, 0x6b, 0xab, 0xa0, 0xa7, 0x85, 0x02, 0x4a, 0x8c, 0xab, 0x2b, - 0x2d, 0xff, 0x2f, 0x86, 0x12, 0x87, 0x23, 0x44, 0x62, 0xf6, 0xca, 0xf5, 0x12, 0x30, 0x52, 0x91, - 0xdc, 0x20, 0x08, 0x02, 0x94, 0x80, 0x01, 0x54, 0xe8, 0xa2, 0xae, 0x85, 0x2b, 0x4d, 0x17, 0xd1, - 0x69, 0xa2, 0x99, 0xb9, 0x12, 0x58, 0x53, 0x85, 0xb2, 0x64, 0x8d, 0xb6, 0xf9, 0x51, 0x26, 0x68, - 0x42, 0xad, 0xaf, 0x2c, 0xc7, 0x56, 0x8e, 0xad, 0x38, 0x38, 0x42, 0x09, 0x8f, 0x58, 0xf0, 0xae, - 0x47, 0xe8, 0xf7, 0xb3, 0x33, 0x25, 0xb2, 0x5d, 0x78, 0xb2, 0x37, 0xc6, 0x89, 0x4d, 0xc8, 0x75, - 0x55, 0xa8, 0x10, 0x60, 0x88, 0xe2, 0xb2, 0xdb, 0xe2, 0xc2, 0x0a, 0x81, 0x8f, 0x31, 0xcc, 0x64, - 0xc6, 0x74, 0xd3, 0x50, 0xc8, 0x80, 0x43, 0x77, 0xfa, 0x3f, 0xad, 0x47, 0xf5, 0x8a, 0x2e, 0x10, - 0x08, 0x82, 0x20, 0x92, 0xd7, 0x6e, 0x5c, 0x48, 0x44, 0x29, 0x4d, 0x46, 0x4c, 0xdd, 0x81, 0xcb, - 0x1f, 0xc9, 0xe1, 0x00, 0x00, 0x8f, 0x50, 0x9c, 0x36, 0x04, 0x02, 0x18, 0x08, 0xe1, 0x68, 0x20, - 0x16, 0x31, 0xd5, 0xcf, 0x0a, 0x80, 0x90, 0x54, 0x50, 0xfe, 0x82, 0x93, 0x11, 0x08, 0x11, 0x95, - 0x5e, 0xc8, 0x8d, 0xe9, 0x18, 0xdf, 0x8e, 0xab, 0x67, 0x1e, 0x73, 0xc4, 0x2c, 0xc6, 0x5e, 0x99, - 0xf1, 0x0c, 0x2a, 0xb5, 0x92, 0x10, 0x12, 0x09, 0x02, 0x10, 0x1d, 0xa1, 0xa7, 0x13, 0xd5, 0x06, - 0x5f, 0x08, 0x09, 0x0a, 0x1b, 0x48, 0xb9, 0x88, 0x68, 0x32, 0x47, 0x56, 0x5b, 0x74, 0x99, 0x8f, - 0xbf, 0x08, 0x04, 0x42, 0x9e, 0xa6, 0xb1, 0x3c, 0x08, 0xd1, 0x56, 0xc7, 0x0d, 0x2d, 0xfb, 0x33, - 0x22, 0x3a, 0xc3, 0x00, 0x84, 0x67, 0x75, 0x90, 0x83, 0x8a, 0x61, 0xc3, 0x50, 0x4e, 0xad, 0x77, - 0x32, 0x48, 0x8d, 0x28, 0xf0, 0xc0, 0x29, 0x05, 0x65, 0xdb, 0x93, 0x80, 0x70, 0x75, 0x10, 0xf0, - 0x71, 0x71, 0x06, 0x61, 0xf9, 0x79, 0x0e, 0x9a, 0x7e, 0x0e, 0x01, 0x4a, 0x09, 0x8e, 0xe8, 0x29, - 0xea, 0xfe, 0x24, 0x13, 0x8c, 0x84, 0x31, 0x9e, 0x5a, 0xac, 0xdd, 0x4b, 0x91, 0xb9, 0x35, 0x32, - 0x24, 0xe6, 0xf0, 0x88, 0xd3, 0x78, 0x72, 0x9e, 0x0f, 0xf3, 0x2e, 0x9d, 0x69, 0x58, 0x5a, 0x2d, - 0x28, 0x57, 0x20, 0xb7, 0x31, 0xa1, 0x31, 0x83, 0x82, 0xca, 0xe4, 0x04, 0xa5, 0x24, 0xd1, 0x3f, - 0xe2, 0xf5, 0xc4, 0x08, 0x19, 0x24, 0xf0, 0xf6, 0xc3, 0x3a, 0x9a, 0x0f, 0xd8, 0x27, 0x4a, 0xa6, - 0x1d, 0xec, 0xe7, 0x0b, 0x07, 0x1f, 0x06, 0x72, 0xc3, 0x3b, 0xcc, 0x59, 0xf0, 0x50, 0x11, 0x41, - 0x37, 0xfa, 0xf5, 0x42, 0x13, 0x0e, 0x87, 0x01, 0xa4, 0x11, 0x97, 0x4e, 0x9b, 0xfd, 0x1c, 0x40, - 0x29, 0x33, 0x55, 0x68, 0xbf, 0xed, 0xd9, 0xed, 0xfb, 0x88, 0x89, 0x16, 0x95, 0xa9, 0x48, 0x2e, - 0xfe, 0x24, 0x28, 0x72, 0x92, 0x1d, 0x88, 0x7c, 0xc1, 0x7a, 0x45, 0x5e, 0x97, 0x77, 0x77, 0x71, - 0xba, 0x9f, 0x46, 0xab, 0x04, 0x30, 0x4a, 0x65, 0x66, 0x47, 0xb9, 0x6d, 0xa2, 0xb5, 0x29, 0x4c, - 0xae, 0xd3, 0xac, 0x48, 0x90, 0x54, 0x28, 0xb1, 0xd8, 0xae, 0x53, 0x32, 0xa3, 0x0b, 0xa9, 0x0c, - 0x66, 0xa9, 0x39, 0xea, 0x86, 0x34, 0x80, 0x81, 0xb1, 0xde, 0x11, 0x08, 0x0b, 0x98, 0xa9, 0x21, - 0x01, 0xac, 0x40, 0x92, 0x9e, 0x3d, 0xd8, 0xef, 0x55, 0xc1, 0x56, 0x20, 0x13, 0xd4, 0xa7, 0x63, - 0x8c, 0x5d, 0x44, 0x71, 0x54, 0x40, 0x97, 0x37, 0x10, 0x10, 0x05, 0x46, 0x3b, 0xed, 0x46, 0x76, - 0x4a, 0xa1, 0x0e, 0xde, 0xce, 0xe2, 0x9f, 0x20, 0xa1, 0xcb, 0xf8, 0x91, 0xc4, 0x95, 0x99, 0x6e, - 0xb1, 0x59, 0xfb, 0x3b, 0x14, 0xfc, 0xa1, 0x34, 0xdd, 0xeb, 0x98, 0x8a, 0xbe, 0x20, 0x48, 0x22, - 0x08, 0x3e, 0xfa, 0x1d, 0xfb, 0xe2, 0x46, 0xb3, 0x3a, 0xd1, 0x9c, 0x3d, 0x6d, 0xae, 0x20, 0x22, - 0xca, 0xcd, 0xfe, 0x24, 0xc4, 0xdc, 0x76, 0x05, 0xc4, 0x82, 0x81, 0x55, 0xca, 0x41, 0x09, 0x7a, - 0x75, 0xf5, 0x35, 0xdf, 0x1d, 0x2c, 0x49, 0xcd, 0x08, 0x48, 0x07, 0xce, 0xd5, 0x5e, 0x38, 0x68, - 0x5a, 0x88, 0xa8, 0xf8, 0x30, 0x82, 0x98, 0x81, 0x26, 0x1f, 0xc6, 0xa9, 0x88, 0x10, 0x0b, 0x61, - 0x66, 0x84, 0xa8, 0xd1, 0xe0, 0xf9, 0x46, 0x53, 0x8f, 0x0a, 0x0a, 0xb0, 0xca, 0x65, 0x7a, 0x95, - 0x85, 0x63, 0xbc, 0xcd, 0xb4, 0xea, 0x27, 0xd0, 0xaa, 0x3e, 0x78, 0x80, 0xa1, 0x12, 0x70, 0xe6, - 0xf1, 0xdc, 0xb9, 0x55, 0x18, 0x31, 0x6d, 0xc1, 0x7b, 0x0d, 0x42, 0x60, 0x43, 0x57, 0x19, 0xff, - 0xff, 0xfe, 0xa1, 0x01, 0x02, 0xc2, 0x5c, 0xbd, 0x09, 0x3a, 0x0d, 0x3c, 0x48, 0x40, 0x20, 0x5a, - 0xd6, 0xf7, 0x44, 0xad, 0xaf, 0x82, 0x61, 0x35, 0x55, 0xcb, 0x89, 0x3f, 0x11, 0x05, 0x9a, 0xd4, - 0x32, 0xaa, 0x77, 0x56, 0x39, 0x66, 0x94, 0x15, 0x6f, 0xbb, 0x88, 0x85, 0x07, 0x70, 0xd2, 0x74, - 0x8b, 0xdb, 0xec, 0xe1, 0xc9, 0x6d, 0xbd, 0x5e, 0x61, 0xa1, 0xe1, 0xaf, 0xa9, 0xa8, 0xc3, 0xf7, - 0x88, 0x10, 0x25, 0x81, 0x0d, 0xee, 0x25, 0xeb, 0xde, 0x71, 0xfc, 0x22, 0x08, 0x18, 0xfb, 0x7f, - 0x88, 0x82, 0xa8, 0x66, 0xc9, 0x25, 0xfe, 0x0b, 0x07, 0x4f, 0x76, 0xc9, 0x1a, 0x95, 0xa6, 0x0c, - 0x7d, 0x7d, 0xf0, 0x81, 0x26, 0x35, 0x55, 0x55, 0x21, 0x06, 0x5c, 0x18, 0x4c, 0xbb, 0x71, 0x10, - 0x99, 0x55, 0x6b, 0x88, 0x68, 0x37, 0xd8, 0x42, 0x6c, 0xfd, 0x3f, 0xc2, 0x04, 0x95, 0x83, 0x61, - 0x45, 0x19, 0xcb, 0x31, 0x7a, 0xaa, 0xe2, 0x02, 0x20, 0xac, 0x4d, 0xa5, 0xb5, 0x5f, 0x09, 0x1a, - 0x69, 0x7f, 0xe6, 0x10, 0x83, 0xc7, 0x6b, 0xe2, 0x02, 0x5e, 0x09, 0x31, 0xe0, 0x98, 0x55, 0x1b, - 0xfc, 0x48, 0x80, 0x42, 0x24, 0x09, 0xb2, 0xee, 0xa8, 0x3b, 0xc1, 0xb2, 0x57, 0x3b, 0xda, 0x7e, - 0xf0, 0xc4, 0x67, 0x41, 0x17, 0x87, 0xe1, 0x01, 0x00, 0xb0, 0x21, 0x15, 0x69, 0x9f, 0x58, 0xf3, - 0x90, 0x63, 0xb5, 0x97, 0x1a, 0xc3, 0x9e, 0x20, 0x13, 0x93, 0x93, 0x55, 0xb7, 0xf7, 0x11, 0x19, - 0x29, 0x0c, 0xea, 0x38, 0xf4, 0xd6, 0x04, 0x0f, 0x19, 0x73, 0xb7, 0x51, 0xc4, 0x1b, 0x29, 0x05, - 0xbc, 0xb7, 0xe3, 0xe2, 0xfd, 0xda, 0x41, 0x6c, 0x2e, 0x95, 0xdf, 0xe1, 0x42, 0x96, 0xda, 0x64, - 0x9e, 0x44, 0xab, 0xa1, 0x3c, 0x30, 0x16, 0x46, 0xaa, 0x0e, 0x6d, 0x2f, 0x5f, 0x56, 0x3e, 0x09, - 0x64, 0x24, 0xcf, 0x31, 0xe3, 0x86, 0x02, 0xdc, 0x07, 0x16, 0xff, 0x82, 0xb3, 0x55, 0x52, 0x52, - 0xb0, 0x4c, 0xdc, 0x77, 0x83, 0xc2, 0xb2, 0xe8, 0x90, 0x9d, 0xc4, 0x88, 0x0a, 0x55, 0x54, 0x79, - 0x10, 0xea, 0x38, 0x05, 0x94, 0xcd, 0x71, 0x2e, 0xb0, 0xae, 0xd3, 0x2b, 0x77, 0x83, 0x97, 0xf8, - 0x91, 0x68, 0x10, 0x26, 0x5e, 0x27, 0x4b, 0x06, 0x3e, 0x61, 0xc9, 0x8b, 0x86, 0x42, 0x05, 0x1a, - 0x4f, 0xc4, 0xf5, 0xd4, 0x4f, 0x46, 0x94, 0x27, 0xd6, 0x09, 0xe0, 0x82, 0x28, 0x65, 0x87, 0x1d, - 0x6e, 0x9a, 0x0d, 0xaf, 0x41, 0x5b, 0x96, 0x52, 0x52, 0x66, 0x10, 0x12, 0x14, 0x9c, 0xd3, 0x4d, - 0xbc, 0xe5, 0xd1, 0xe7, 0x60, 0xa4, 0x3a, 0x0f, 0xdd, 0x9f, 0x1f, 0xeb, 0x7e, 0x6d, 0xf0, 0xa4, - 0x94, 0x2c, 0x27, 0x54, 0xa3, 0x89, 0x43, 0x49, 0x8a, 0x37, 0x37, 0x7b, 0xa6, 0x74, 0xe2, 0x61, - 0x1b, 0xb4, 0x7f, 0xdd, 0xde, 0xd5, 0x8d, 0x97, 0x94, 0x9b, 0xbf, 0x82, 0xc2, 0xa3, 0x5f, 0x15, - 0xf7, 0x77, 0xf9, 0x0b, 0x2f, 0x5f, 0x88, 0x20, 0xa2, 0x65, 0x7c, 0xe7, 0x1b, 0xe2, 0x04, 0x8f, - 0x14, 0x13, 0xd8, 0xf3, 0xc5, 0x9b, 0x03, 0x4c, 0x72, 0x4d, 0x74, 0x7e, 0xf9, 0x64, 0xfc, 0x15, - 0xf1, 0x81, 0x4e, 0x34, 0x81, 0xd4, 0xcf, 0xd1, 0xab, 0xbc, 0x69, 0x01, 0x79, 0x39, 0xd6, 0x0e, - 0x3f, 0xc2, 0x9d, 0x1b, 0xd0, 0x33, 0xe5, 0xbd, 0x47, 0x07, 0x0c, 0xb9, 0xad, 0x75, 0x0d, 0x74, - 0x4d, 0x7c, 0x14, 0x15, 0x04, 0x55, 0x0a, 0xc9, 0x59, 0x95, 0x38, 0xac, 0xf0, 0x45, 0x7c, 0x44, - 0x16, 0x5e, 0xb7, 0xdc, 0x9e, 0x16, 0xa0, 0x97, 0xf9, 0x37, 0x7f, 0x82, 0x8e, 0xab, 0xaa, 0xbd, - 0x62, 0x45, 0x5d, 0xbf, 0x9f, 0xe2, 0x44, 0x89, 0x8b, 0xd2, 0x9c, 0xc5, 0xd3, 0xe0, 0xb7, 0x82, - 0x41, 0xbc, 0x3b, 0x96, 0xaf, 0x10, 0x28, 0x60, 0xe1, 0x30, 0xb1, 0x58, 0xc6, 0x4f, 0xf1, 0x31, - 0xe6, 0x7a, 0x46, 0xce, 0xcb, 0x38, 0x73, 0xad, 0xcc, 0x5d, 0x0c, 0xb3, 0xd1, 0x86, 0xc1, 0x45, - 0xd0, 0xa7, 0x4c, 0x1c, 0xb0, 0x1f, 0x74, 0xf1, 0x94, 0x0d, 0xd5, 0xd9, 0x5b, 0xfb, 0x08, 0x67, - 0xa1, 0xcb, 0x0f, 0x10, 0x52, 0xb1, 0x55, 0x14, 0xed, 0x20, 0x0e, 0xb1, 0x30, 0xeb, 0x11, 0x1d, - 0xf8, 0xe3, 0xc5, 0x94, 0xd4, 0x0e, 0xfd, 0xdf, 0x12, 0x20, 0x15, 0x96, 0xc5, 0x7b, 0xec, 0x9f, - 0xbb, 0xf9, 0xf0, 0x8c, 0xcc, 0x0e, 0x73, 0x0c, 0x8d, 0x5e, 0xcb, 0xde, 0x28, 0x88, 0xf2, 0x1e, - 0xaf, 0x1d, 0x1b, 0xf3, 0xc4, 0x05, 0x59, 0xd3, 0xad, 0x34, 0x74, 0xc2, 0xca, 0xf1, 0xd4, 0xe9, - 0x8f, 0xf9, 0x82, 0xb2, 0xd7, 0xd8, 0x7f, 0xf1, 0x27, 0x53, 0x10, 0x6f, 0x9e, 0x1f, 0x8b, 0x2a, - 0x57, 0xa6, 0xe9, 0xf8, 0x93, 0x0e, 0x5a, 0xe1, 0xb4, 0x15, 0x00, 0x62, 0xdd, 0xf8, 0x8e, 0xfc, - 0xbf, 0xf0, 0x5a, 0xfd, 0xf8, 0x21, 0x5f, 0x4f, 0xe0, 0xae, 0x22, 0x8a, 0xfe, 0x18, 0x30, 0xab, - 0x65, 0x35, 0x4b, 0x89, 0x13, 0x76, 0x90, 0x68, 0x84, 0xd8, 0xe2, 0xe2, 0x20, 0x9c, 0xcc, 0xd6, - 0x8f, 0xaf, 0x3e, 0x7d, 0xc4, 0xc2, 0x84, 0xbe, 0x33, 0xd2, 0x56, 0x91, 0x7e, 0x6d, 0x3b, 0xd6, - 0x9a, 0xb8, 0xac, 0x57, 0x77, 0xe2, 0x04, 0x82, 0x92, 0xad, 0x56, 0xeb, 0x4e, 0x2f, 0xd7, 0x11, - 0x0a, 0x66, 0x6c, 0xbd, 0x13, 0xc0, 0xfd, 0xb8, 0x85, 0x32, 0xb5, 0x23, 0x7b, 0xbf, 0x3d, 0xdf, - 0xe3, 0x24, 0x76, 0xa8, 0xea, 0xc2, 0x36, 0xa2, 0xf3, 0x9e, 0x8c, 0x1a, 0x9e, 0x76, 0xf3, 0x78, - 0x28, 0xcb, 0x7f, 0x6f, 0x2c, 0xf8, 0x0e, 0x7c, 0x15, 0x55, 0x71, 0x2a, 0xff, 0x42, 0x7f, 0x50, - 0xc4, 0x26, 0x3a, 0x2b, 0xdf, 0x15, 0xe1, 0x88, 0x23, 0x09, 0xe3, 0x02, 0x8e, 0xe2, 0xfa, 0x0a, - 0xa5, 0x82, 0x8e, 0x60, 0xb7, 0x02, 0x6a, 0xf8, 0xff, 0x08, 0xc1, 0x1f, 0xb1, 0x4c, 0xfb, 0x86, - 0x22, 0xc4, 0x1a, 0x1d, 0xad, 0x2c, 0x4c, 0x9d, 0x57, 0xc5, 0x1a, 0x68, 0x0d, 0xaa, 0x20, 0xf8, - 0xe7, 0x8b, 0x11, 0xfc, 0x9a, 0x61, 0x1e, 0x20, 0x48, 0x2c, 0xe9, 0x88, 0x79, 0x92, 0xf1, 0x97, - 0x91, 0x6d, 0xd8, 0xdc, 0x47, 0x9c, 0x44, 0x06, 0x59, 0x15, 0xd9, 0xc2, 0xef, 0x84, 0x0e, 0x52, - 0x73, 0xc7, 0xc3, 0x15, 0x54, 0x44, 0x98, 0x46, 0x4a, 0xb2, 0x6f, 0x5a, 0xe2, 0x42, 0x3f, 0x04, - 0xe7, 0x97, 0x2f, 0xa6, 0xfd, 0xe2, 0x01, 0x2c, 0xb8, 0x7f, 0xef, 0x7e, 0xa8, 0x99, 0x2b, 0xaf, - 0x8a, 0x10, 0x49, 0x2f, 0x64, 0xdb, 0x14, 0xa1, 0xb9, 0x88, 0xd2, 0xe2, 0x6c, 0x44, 0xd9, 0x9c, - 0x21, 0xfa, 0x0d, 0xf4, 0x13, 0xc2, 0x10, 0x48, 0x10, 0x97, 0x97, 0x2e, 0x2e, 0x22, 0x0a, 0x2a, - 0x89, 0x53, 0xbb, 0x9f, 0x25, 0xc4, 0x78, 0x81, 0x20, 0x93, 0x2d, 0x15, 0x9a, 0xff, 0x04, 0x66, - 0x7d, 0xff, 0xf1, 0x98, 0x90, 0x65, 0x6b, 0x92, 0xe6, 0xe7, 0xf3, 0x1e, 0xbb, 0x3e, 0xcd, 0x77, - 0xfe, 0x26, 0x0b, 0x85, 0xd3, 0xdd, 0x99, 0x71, 0x2f, 0xbe, 0xaf, 0xf2, 0x95, 0xd8, 0x6e, 0x3a, - 0x06, 0x00, 0xe2, 0x60, 0x87, 0x77, 0xf7, 0x13, 0x11, 0x77, 0xba, 0x3d, 0xf1, 0x15, 0x7e, 0x24, - 0x4f, 0x11, 0x10, 0x29, 0x3d, 0xe7, 0xb7, 0xb5, 0x08, 0x7c, 0x23, 0x04, 0xb0, 0x84, 0x31, 0x96, - 0x83, 0x9e, 0x97, 0x77, 0x7c, 0xb3, 0xfa, 0x7f, 0x88, 0x82, 0xed, 0x93, 0x4e, 0xdd, 0x65, 0x07, - 0x10, 0x24, 0x4d, 0xe3, 0xeb, 0x1e, 0xef, 0xf4, 0x57, 0xf8, 0x28, 0x9f, 0x05, 0x7c, 0xb2, 0x63, - 0xfb, 0xe1, 0x11, 0x95, 0x55, 0xaa, 0xa8, 0xb9, 0x39, 0x15, 0x7e, 0x30, 0xaa, 0x3a, 0x99, 0x43, - 0x1d, 0x4c, 0x8e, 0xff, 0x5e, 0x59, 0x17, 0xdf, 0xe5, 0x63, 0x88, 0x12, 0x51, 0xa6, 0xff, 0xc9, - 0xc5, 0xd7, 0xd7, 0xfe, 0x25, 0xf2, 0xfe, 0x20, 0x4f, 0xc2, 0x45, 0xbb, 0xdd, 0x0d, 0xfc, 0x4a, - 0xbf, 0x12, 0x24, 0x12, 0x11, 0xdd, 0xf5, 0xc4, 0x89, 0x44, 0xff, 0xc4, 0x0a, 0x9f, 0x32, 0xe3, - 0xbb, 0xf8, 0x23, 0xad, 0x57, 0xb8, 0x88, 0x24, 0x3e, 0x2b, 0x6e, 0xf0, 0x47, 0x08, 0x41, 0x46, - 0xd2, 0xd3, 0xbf, 0xb8, 0x60, 0x22, 0x08, 0x7a, 0xad, 0xfc, 0x4f, 0xc5, 0xee, 0xf7, 0xaf, 0xcb, - 0xd5, 0x78, 0x90, 0x8d, 0xde, 0x6b, 0xad, 0x55, 0xb0, 0x8f, 0xaf, 0x12, 0x3c, 0x42, 0x85, 0xcc, - 0xac, 0x96, 0xa5, 0x04, 0x5e, 0x1d, 0x2c, 0x0f, 0x92, 0x92, 0x85, 0x62, 0x89, 0xdf, 0x88, 0x2d, - 0x45, 0xd4, 0x5f, 0xca, 0x75, 0xcb, 0xfc, 0x10, 0x89, 0x5a, 0xdf, 0xe4, 0xbb, 0xf8, 0x99, 0x8e, - 0x8f, 0x15, 0xe2, 0x44, 0x89, 0x23, 0xd2, 0x4a, 0xef, 0xc4, 0x89, 0x13, 0x77, 0xbe, 0xef, 0xea, - 0xfe, 0x24, 0x85, 0x4e, 0xbc, 0x47, 0xe2, 0x35, 0xaa, 0x75, 0xa8, 0x88, 0x78, 0x20, 0xba, 0xca, - 0x41, 0xb4, 0xab, 0xc5, 0x4c, 0x5b, 0xff, 0x08, 0x42, 0x37, 0x7d, 0x0e, 0xbd, 0x51, 0xf8, 0x26, - 0x12, 0xef, 0xdd, 0x1d, 0xe1, 0xfe, 0x52, 0xd6, 0xb8, 0x42, 0x09, 0xcc, 0x9e, 0xf4, 0x4e, 0xe7, - 0xb8, 0x60, 0x22, 0x0b, 0xa3, 0x9e, 0xfa, 0xae, 0xfc, 0x4c, 0xc5, 0x49, 0xb8, 0xe4, 0xaf, 0x14, - 0x29, 0x03, 0x6a, 0x95, 0xef, 0xe0, 0x84, 0x4a, 0xad, 0x79, 0xfe, 0x12, 0xd6, 0xab, 0x55, 0xf0, - 0x5a, 0x4e, 0xc6, 0xf9, 0x73, 0xde, 0x20, 0x29, 0x13, 0x60, 0x8c, 0xa8, 0xca, 0x3d, 0xdf, 0x29, - 0x9b, 0xdb, 0xdd, 0xbf, 0xf1, 0x22, 0x41, 0x3f, 0x15, 0xc5, 0x6e, 0xf7, 0xe2, 0x24, 0xa6, 0xf7, - 0xe2, 0x41, 0x68, 0x97, 0x7c, 0x1f, 0x77, 0x4e, 0x8e, 0xfc, 0x11, 0xdd, 0xc5, 0x6e, 0xff, 0x09, - 0x6e, 0xee, 0x9b, 0xfc, 0x40, 0x21, 0xbb, 0xbb, 0xd7, 0x11, 0xfb, 0x2e, 0xee, 0xf9, 0x89, 0x5a, - 0xf1, 0x20, 0x9f, 0x33, 0x1c, 0xcc, 0x7f, 0xe1, 0x11, 0x20, 0x9a, 0x91, 0x33, 0x2d, 0x35, 0x7e, - 0x10, 0x90, 0x54, 0x43, 0x4f, 0x08, 0x41, 0x59, 0x2e, 0xd3, 0x4a, 0xbf, 0x17, 0x8b, 0xe1, 0xb2, - 0xe6, 0xcc, 0x14, 0xd1, 0xb8, 0x1a, 0xf7, 0xde, 0x1e, 0x86, 0x04, 0x82, 0xc2, 0xdc, 0x99, 0x7a, - 0x6d, 0x9f, 0x79, 0x4c, 0x41, 0xd6, 0xf1, 0x04, 0xb7, 0x34, 0x2a, 0x26, 0x08, 0x6b, 0x5b, 0xf1, - 0x21, 0x00, 0x54, 0x65, 0x53, 0x78, 0x96, 0xaa, 0xb5, 0x5e, 0xe2, 0x44, 0x82, 0xe1, 0x2f, 0x4e, - 0xbb, 0xbf, 0xc9, 0xbd, 0xaf, 0x08, 0x88, 0x65, 0x41, 0xaa, 0x77, 0xd2, 0xbf, 0x90, 0xb5, 0x55, - 0xe2, 0x04, 0xf3, 0x78, 0x9b, 0x09, 0xa9, 0x58, 0xf1, 0x42, 0x5b, 0xbb, 0x6a, 0xbf, 0xb9, 0x7b, - 0xc6, 0xf8, 0x46, 0xaf, 0xe2, 0x45, 0x5d, 0xce, 0x93, 0xd3, 0x7c, 0x44, 0x45, 0xdd, 0xde, 0xf7, - 0xf4, 0x47, 0xf1, 0x1f, 0x20, 0xbd, 0x57, 0x89, 0x42, 0x3b, 0xeb, 0xde, 0x25, 0x7b, 0xc4, 0x96, - 0x5c, 0xf8, 0x90, 0x88, 0xbc, 0xd9, 0xed, 0x3f, 0x12, 0x43, 0x3a, 0x5e, 0x10, 0x82, 0x92, 0x63, - 0x77, 0x35, 0x64, 0xed, 0xf4, 0x9d, 0xfc, 0x7c, 0x32, 0x7a, 0x54, 0xd7, 0x06, 0x5a, 0xfe, 0x1d, - 0xe1, 0x4b, 0xea, 0xc7, 0x77, 0x52, 0xfb, 0xbf, 0xef, 0xf9, 0x78, 0x90, 0x43, 0x9a, 0x9f, 0xfe, - 0x08, 0x7b, 0x6b, 0xdc, 0x44, 0x13, 0xf2, 0xf7, 0xd5, 0x37, 0xf8, 0x29, 0x22, 0xc4, 0xc8, 0x35, - 0xac, 0x5d, 0x45, 0xff, 0xfb, 0x2a, 0xaf, 0xe1, 0x1b, 0x9f, 0x28, 0xdf, 0x43, 0x40, 0xf3, 0xef, - 0x8e, 0xd4, 0x2b, 0x58, 0x51, 0xc5, 0xf7, 0x7f, 0x0d, 0x38, 0x16, 0xbc, 0x2a, 0x55, 0xaf, 0x5f, - 0xfc, 0x95, 0x71, 0x24, 0x2a, 0xc9, 0xdf, 0xc5, 0x96, 0xee, 0xfc, 0x69, 0xa3, 0xc5, 0xf4, 0x88, - 0xee, 0x36, 0xdf, 0xa0, 0x58, 0x90, 0x89, 0x2f, 0x7e, 0x26, 0x09, 0x0c, 0xee, 0xef, 0x7f, 0x10, - 0x4b, 0xef, 0xc4, 0x82, 0x32, 0xaa, 0xef, 0xc4, 0x51, 0xdf, 0xc2, 0x26, 0xd5, 0x0d, 0x7c, 0xc3, - 0xab, 0x5f, 0x04, 0x87, 0xdd, 0xfb, 0xe5, 0xdd, 0xf8, 0x8b, 0x12, 0x96, 0xf8, 0x88, 0x89, 0x88, - 0x98, 0x8d, 0x9d, 0x31, 0xd8, 0xc6, 0x64, 0x57, 0xc4, 0xbf, 0x89, 0x09, 0x19, 0x6a, 0xa4, 0xb2, - 0x5a, 0x32, 0xe7, 0x84, 0x44, 0x98, 0x9a, 0xae, 0x20, 0x48, 0x2a, 0x22, 0x57, 0xc6, 0xe5, 0x0b, - 0xc6, 0x29, 0xa8, 0xb9, 0x28, 0x70, 0x7c, 0x13, 0x74, 0x6f, 0xcd, 0x0b, 0x43, 0x70, 0x84, 0x10, - 0x5b, 0x4d, 0xb4, 0x3b, 0x69, 0xe1, 0x7d, 0x10, 0xc9, 0x83, 0x40, 0x25, 0x9e, 0x21, 0xa7, 0xe2, - 0x04, 0xad, 0x78, 0x94, 0x27, 0xff, 0x44, 0xee, 0x22, 0x08, 0xb1, 0x9a, 0x74, 0xbe, 0x24, 0xa2, - 0x16, 0xa9, 0xfa, 0x12, 0xfe, 0x20, 0x12, 0x5d, 0xbe, 0x7f, 0x12, 0x09, 0x31, 0x76, 0xc5, 0xff, - 0xf3, 0x79, 0x3f, 0x94, 0xa8, 0x9b, 0xaf, 0x82, 0x10, 0x80, 0x50, 0x58, 0x90, 0x1e, 0x58, 0xc4, - 0x83, 0xcb, 0x7b, 0xbb, 0x76, 0xeb, 0x58, 0xfd, 0xc4, 0x04, 0x41, 0x50, 0xa8, 0xae, 0x87, 0x91, - 0x44, 0x20, 0x18, 0x1b, 0xa1, 0xfe, 0xe2, 0x24, 0xbb, 0xbb, 0xe2, 0x03, 0x00, 0xa7, 0x2d, 0x94, - 0xb6, 0xe7, 0x47, 0xbb, 0xbb, 0xbf, 0x89, 0x5e, 0xfa, 0xf5, 0x73, 0x6b, 0x5e, 0x27, 0xc4, 0x82, - 0x6e, 0xab, 0xa6, 0x7e, 0xfc, 0x40, 0x9f, 0xa2, 0xbf, 0xc1, 0x2e, 0xee, 0xf7, 0x72, 0xd1, 0xf8, - 0x98, 0x4b, 0xbb, 0x47, 0xa3, 0x3f, 0xd9, 0x92, 0x2e, 0xb5, 0xf8, 0xa3, 0x49, 0xf7, 0x7a, 0x1e, - 0x20, 0x48, 0x29, 0xea, 0x52, 0x19, 0xaa, 0x7c, 0x98, 0xac, 0x21, 0x17, 0xa7, 0xcc, 0x7d, 0xb5, - 0x0d, 0x44, 0x43, 0xa6, 0x33, 0x22, 0x5e, 0x66, 0x6e, 0x99, 0x6e, 0x86, 0xe5, 0x60, 0x56, 0xf9, - 0x45, 0x6e, 0xcc, 0x97, 0xfc, 0x40, 0x44, 0x27, 0x3f, 0xf4, 0x8f, 0xdf, 0xe2, 0x78, 0x8a, 0x2f, - 0x56, 0x24, 0x10, 0x88, 0x54, 0xef, 0xfe, 0x22, 0x09, 0x04, 0xa7, 0x23, 0x3a, 0xf8, 0x9d, 0x32, - 0xb3, 0xb9, 0x18, 0x8b, 0xf8, 0xe2, 0xdd, 0x8d, 0xc6, 0xcd, 0xb1, 0x3f, 0xd9, 0x99, 0x71, 0x08, - 0x59, 0xa5, 0xe2, 0x63, 0x24, 0xe9, 0xe9, 0xee, 0x5f, 0x95, 0x41, 0xf9, 0x40, 0x00, 0x39, 0x6d, - 0xfc, 0x15, 0xc3, 0xac, 0x03, 0xbb, 0x8c, 0xa0, 0xab, 0x48, 0xb7, 0x7e, 0x5b, 0xf1, 0x02, 0x59, - 0x1d, 0xff, 0x05, 0x85, 0x6e, 0xf2, 0x92, 0x2f, 0xed, 0xdd, 0xdf, 0x84, 0x01, 0x89, 0x48, 0x52, - 0x09, 0x09, 0x5f, 0x84, 0x20, 0xb4, 0xb5, 0xab, 0xbd, 0xdf, 0xc1, 0x08, 0x23, 0xa2, 0xb6, 0xbd, - 0xe2, 0x4b, 0xdd, 0xde, 0x24, 0x22, 0x67, 0xbb, 0x7b, 0xbe, 0xe5, 0xcc, 0x4c, 0x17, 0x1d, 0xef, - 0x3b, 0x18, 0xad, 0xfe, 0x0a, 0x2e, 0x58, 0x3e, 0x81, 0xa2, 0x7b, 0xfc, 0x16, 0x69, 0x3b, 0xbd, - 0xee, 0xe5, 0xce, 0x5f, 0x7c, 0xd4, 0xf1, 0x2a, 0xfe, 0x25, 0x5f, 0x89, 0x08, 0xf1, 0x12, 0x0a, - 0x64, 0x62, 0x0d, 0x71, 0x10, 0x53, 0x9f, 0x3b, 0xbc, 0x9e, 0x2f, 0x1d, 0xbe, 0x0a, 0x45, 0xc8, - 0xa5, 0x6d, 0xbb, 0xf2, 0xbd, 0xe2, 0x86, 0x38, 0x70, 0x44, 0xcc, 0x44, 0xd2, 0x2d, 0xe7, 0x9f, - 0xf1, 0x22, 0x60, 0x77, 0xd7, 0x3f, 0xc9, 0x06, 0x65, 0x7a, 0xe2, 0x21, 0x23, 0x9f, 0xdb, 0xbb, - 0xa7, 0xc4, 0x89, 0x5b, 0xfc, 0x11, 0xea, 0xb7, 0xe2, 0x44, 0x88, 0xd6, 0xba, 0x6f, 0xe6, 0x11, - 0x55, 0xe2, 0x44, 0x82, 0xc3, 0xbd, 0xe9, 0xbe, 0xf7, 0x7e, 0xf1, 0x22, 0xe4, 0xff, 0x2d, 0x3c, - 0x48, 0x47, 0xc2, 0x20, 0x86, 0xf5, 0xef, 0xf0, 0x9f, 0x1d, 0x35, 0x4f, 0xf1, 0x55, 0x4e, 0x9b, - 0xcb, 0x85, 0xcf, 0x25, 0xf7, 0xf6, 0x25, 0xee, 0x55, 0x1c, 0x20, 0x24, 0x97, 0x7b, 0xef, 0xc4, - 0x08, 0xbd, 0xea, 0xd7, 0xee, 0xee, 0xfc, 0x4f, 0xc4, 0xa3, 0x77, 0x13, 0x16, 0x5e, 0x4c, 0xe7, - 0x63, 0x10, 0x10, 0x1d, 0x2e, 0x5a, 0x3c, 0x37, 0x7c, 0xb8, 0x4d, 0xf1, 0x77, 0xdd, 0x37, 0xd6, - 0x26, 0x4e, 0x5b, 0xbb, 0xf8, 0x91, 0x42, 0x1d, 0xbe, 0x80, 0xd5, 0x7c, 0x37, 0x15, 0xa2, 0x03, - 0xa5, 0xa9, 0xef, 0x0a, 0x9b, 0x16, 0x70, 0xb2, 0x83, 0xf0, 0xbf, 0x37, 0x8e, 0x47, 0x61, 0x81, - 0x23, 0x60, 0xff, 0x88, 0x16, 0x13, 0x28, 0xf4, 0x09, 0x13, 0xbe, 0xb7, 0x8f, 0x60, 0xcd, 0xd1, - 0xa0, 0x8b, 0x2d, 0x64, 0x3e, 0x35, 0xa4, 0xde, 0xe6, 0x1b, 0x9c, 0x3c, 0x6d, 0x02, 0x3f, 0xf8, - 0x96, 0x57, 0xec, 0xd6, 0x4a, 0x71, 0x0c, 0xae, 0xff, 0x12, 0x09, 0x4a, 0xfa, 0x27, 0xbb, 0xdf, - 0xe0, 0x90, 0x95, 0xad, 0x7c, 0x14, 0x5a, 0x69, 0x6b, 0x55, 0x7a, 0xe4, 0x10, 0xf7, 0xf0, 0x87, - 0x88, 0x18, 0x36, 0xf7, 0x15, 0xbb, 0xbb, 0xb8, 0xaf, 0x77, 0x7e, 0x11, 0x19, 0x49, 0x74, 0xdb, - 0x4d, 0xbd, 0xd5, 0xca, 0xc3, 0xb5, 0x8c, 0x40, 0x93, 0x11, 0xcf, 0x47, 0xbf, 0x05, 0x19, 0xf1, - 0xf7, 0x71, 0x5b, 0xbf, 0x84, 0x01, 0x0e, 0xf7, 0x7e, 0x24, 0x40, 0x21, 0xbe, 0xef, 0x51, 0x3a, - 0x89, 0xf8, 0x85, 0xee, 0x20, 0x48, 0xae, 0xee, 0xfb, 0xf1, 0x22, 0xee, 0xef, 0x77, 0x77, 0xf0, - 0x89, 0x5a, 0x10, 0xe3, 0x9e, 0xe3, 0xbb, 0x8a, 0xdd, 0x4d, 0x05, 0x67, 0x30, 0xf0, 0x59, 0x3e, - 0x59, 0x6f, 0x77, 0x15, 0xb9, 0xfb, 0xf1, 0x30, 0x55, 0xbb, 0xe9, 0xbe, 0xef, 0x7f, 0x82, 0x19, - 0xf1, 0x21, 0x5a, 0x4f, 0xe2, 0x57, 0xbe, 0xbd, 0xe1, 0x12, 0xd5, 0x55, 0x71, 0x21, 0x12, 0x10, - 0x99, 0xfc, 0x32, 0x0a, 0x8d, 0x94, 0x3f, 0x6d, 0x18, 0x87, 0x96, 0x2d, 0x0c, 0x11, 0xd6, 0x43, - 0xd6, 0x41, 0xdf, 0x22, 0xf1, 0xc7, 0xca, 0xc3, 0x11, 0xb4, 0xf9, 0x45, 0xb7, 0x31, 0x5e, 0xdc, - 0xe1, 0x5e, 0x6f, 0x0d, 0x52, 0x7c, 0x30, 0x3c, 0x65, 0x35, 0xd9, 0xdb, 0x95, 0xca, 0xc6, 0x20, - 0x22, 0xea, 0xcc, 0x7b, 0x0f, 0x89, 0x04, 0x42, 0x6f, 0x77, 0xf8, 0xa2, 0xdd, 0xdc, 0xb0, 0xdb, - 0xe2, 0x44, 0x3c, 0xb9, 0xf9, 0x35, 0x55, 0xe2, 0x15, 0xfc, 0x43, 0xd6, 0xbe, 0x6d, 0x6a, 0xa1, - 0x10, 0x80, 0x44, 0xae, 0xee, 0xc6, 0xe7, 0xaa, 0x75, 0xf5, 0x4f, 0x88, 0x0a, 0x5d, 0xdd, 0xf7, - 0x3f, 0x2d, 0x2e, 0x33, 0xd0, 0xec, 0x3f, 0xed, 0xbf, 0x84, 0x01, 0x5e, 0x78, 0x5c, 0x5b, 0xa7, - 0x7b, 0xbd, 0x7c, 0x10, 0xf6, 0xcb, 0xdf, 0xe0, 0x92, 0x2f, 0xbb, 0xfc, 0x10, 0xe9, 0xd3, 0x7e, - 0x26, 0x84, 0x75, 0x62, 0x6a, 0x22, 0x38, 0xf3, 0xed, 0xcd, 0x9f, 0x97, 0x0b, 0x9c, 0x40, 0x4a, - 0x2b, 0x77, 0x7d, 0xd3, 0x58, 0x90, 0x59, 0xcf, 0x47, 0xbd, 0x95, 0xbb, 0xfb, 0x89, 0x82, 0x9b, - 0xbd, 0xef, 0x77, 0x77, 0x7f, 0xfc, 0x10, 0xdd, 0xdd, 0xdf, 0x88, 0xab, 0xfc, 0xba, 0xaa, 0xbe, - 0x09, 0x6e, 0xf9, 0xf1, 0xaa, 0xf7, 0xc5, 0x08, 0x4c, 0x7c, 0x44, 0x55, 0xc9, 0x9a, 0xf0, 0xc8, - 0xde, 0x39, 0x2f, 0x71, 0x46, 0x2b, 0x15, 0x9f, 0xa6, 0x5c, 0x44, 0xd4, 0x97, 0xd8, 0xaf, 0x4a, - 0x02, 0xbf, 0xfe, 0x2c, 0xe9, 0x27, 0xd2, 0xa4, 0x14, 0x88, 0x8a, 0x11, 0xe6, 0xee, 0xb9, 0x60, - 0xb3, 0xb0, 0x9b, 0xab, 0x0c, 0x04, 0x42, 0x17, 0x0c, 0x0c, 0x50, 0x99, 0xc7, 0x6f, 0x94, 0x6e, - 0x2b, 0x3a, 0xaf, 0x11, 0xc4, 0x41, 0x41, 0xd6, 0x95, 0x75, 0xff, 0x88, 0x05, 0xb4, 0x37, 0x56, - 0x96, 0xb7, 0xf0, 0x88, 0x52, 0xf1, 0x58, 0xad, 0xef, 0x3e, 0x62, 0xb3, 0xe3, 0xf7, 0xbf, 0x89, - 0x45, 0x7e, 0x26, 0x09, 0x73, 0xbd, 0xbe, 0x7e, 0xbb, 0xfc, 0x11, 0xeb, 0x57, 0xe2, 0x44, 0x82, - 0x32, 0x2a, 0xaa, 0xbf, 0x89, 0x54, 0x77, 0xe0, 0x8e, 0xb5, 0xbf, 0xd7, 0xbe, 0x6c, 0xec, 0x3d, - 0x1f, 0xab, 0xf1, 0x37, 0x77, 0xd7, 0x16, 0x59, 0x58, 0x7e, 0xe2, 0xb7, 0xc4, 0x89, 0xe2, 0x28, - 0x9d, 0xe2, 0x41, 0x61, 0x5e, 0x5c, 0x7b, 0x6e, 0xf1, 0xbf, 0xdf, 0x79, 0xf1, 0xf5, 0xc4, 0x14, - 0xd4, 0xea, 0xb5, 0x86, 0x70, 0x9b, 0xe4, 0x75, 0x7c, 0xf4, 0xe9, 0x97, 0xfe, 0xdf, 0x57, 0xf8, - 0x2b, 0xe5, 0xa6, 0xab, 0x55, 0x37, 0x9f, 0xfc, 0x95, 0xaa, 0xf9, 0x08, 0xb5, 0xf8, 0x22, 0xaa, - 0xd7, 0xbe, 0x13, 0xad, 0x75, 0x5f, 0x10, 0x0b, 0x3a, 0xaa, 0xae, 0xab, 0x51, 0xda, 0xb8, 0x20, - 0x14, 0x5a, 0x1c, 0x3e, 0x21, 0xf4, 0xd7, 0x2f, 0x8d, 0x65, 0xab, 0xad, 0x97, 0xe2, 0x20, 0xac, - 0xf7, 0x63, 0x75, 0x6b, 0x46, 0x4a, 0x09, 0x06, 0xa2, 0xeb, 0xdb, 0xf4, 0x27, 0x89, 0x5e, 0xe1, - 0x08, 0xc1, 0x09, 0x08, 0x68, 0x21, 0xe7, 0xba, 0x12, 0xe0, 0x70, 0x6d, 0x94, 0xe8, 0x2e, 0xbd, - 0xb9, 0x39, 0xb8, 0x0a, 0x3a, 0x85, 0xcb, 0xca, 0xca, 0xf1, 0x3f, 0x45, 0xff, 0x10, 0x24, 0x24, - 0x25, 0x57, 0xad, 0xf8, 0x80, 0x91, 0xae, 0xca, 0xab, 0xe2, 0x44, 0x09, 0x10, 0x6e, 0xce, 0xb3, - 0x5a, 0x2e, 0x24, 0x22, 0x11, 0xcd, 0x8a, 0x37, 0x8d, 0xfe, 0xa2, 0xeb, 0xe2, 0x02, 0x95, 0x51, - 0x72, 0x7a, 0x3a, 0x89, 0x3e, 0x44, 0x1f, 0xea, 0xaf, 0xf3, 0x13, 0x51, 0x7e, 0x23, 0xc4, 0x71, - 0x3f, 0x8f, 0xde, 0xee, 0x5c, 0x15, 0x96, 0xdc, 0x57, 0xe2, 0x44, 0x8b, 0x23, 0xbb, 0xbb, 0xbb, - 0xbf, 0x12, 0x6d, 0xdf, 0x88, 0x08, 0x8b, 0x39, 0x58, 0x72, 0xfc, 0xf9, 0x55, 0xe2, 0x44, 0x1b, - 0x77, 0x7b, 0xd4, 0x48, 0x80, 0x4c, 0x7d, 0xd2, 0x4d, 0xbe, 0xfe, 0x20, 0x5e, 0xee, 0xfc, 0xcd, - 0xf0, 0x8c, 0x56, 0xf7, 0x77, 0xde, 0xed, 0xdf, 0x16, 0x54, 0x97, 0xad, 0x78, 0x90, 0x99, 0x13, - 0xd3, 0xd5, 0xae, 0x24, 0x95, 0xd7, 0xcb, 0xcd, 0xfe, 0xcf, 0x5a, 0xf8, 0x27, 0x32, 0xcd, 0xc5, - 0xd1, 0x55, 0x7b, 0x89, 0x82, 0x6e, 0xaa, 0xb4, 0xa5, 0x4e, 0x20, 0x49, 0x4c, 0xab, 0xe2, 0x23, - 0xce, 0xd3, 0x6a, 0x6e, 0xaa, 0xe5, 0x1d, 0x64, 0x97, 0x98, 0xa9, 0x2f, 0xe0, 0x9c, 0x55, 0xc2, - 0x0d, 0xaa, 0xaa, 0xf7, 0x86, 0x41, 0x19, 0x09, 0x99, 0xff, 0xe1, 0xb1, 0x28, 0xa5, 0xca, 0xe3, - 0x3d, 0xf9, 0xe0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x1e, 0x0f, 0x30, 0x26, 0x8d, 0xd1, 0xdd, - 0x0a, 0xf4, 0x2f, 0xe4, 0x2b, 0x12, 0x27, 0xc4, 0x7e, 0x1e, 0xe1, 0x73, 0x72, 0x30, 0x66, 0xbf, - 0xf1, 0x23, 0xf3, 0x69, 0x6e, 0xd7, 0xa2, 0x8b, 0xaf, 0x82, 0x39, 0xf1, 0xa0, 0x9f, 0x1c, 0xa9, - 0xc8, 0x33, 0xe8, 0x9d, 0xf0, 0xcf, 0x69, 0x73, 0xe4, 0x83, 0x74, 0xe3, 0xfe, 0xc3, 0xf0, 0x51, - 0x4a, 0x1a, 0x19, 0xb2, 0x2d, 0xdc, 0xe2, 0x63, 0xe1, 0xd3, 0xf9, 0xb3, 0x3e, 0x1f, 0x32, 0x65, - 0xce, 0x22, 0x64, 0x44, 0xcf, 0xf9, 0xe3, 0xca, 0x9a, 0x71, 0xa7, 0xe1, 0x5e, 0x89, 0xdf, 0x53, - 0x27, 0xd6, 0xa4, 0xe8, 0x8f, 0xf5, 0x78, 0x5b, 0xa3, 0x89, 0xdc, 0xf9, 0xfd, 0x4d, 0x34, 0xd3, - 0x2b, 0x35, 0x95, 0x97, 0xc7, 0xcf, 0x1d, 0x80, 0xf4, 0xd3, 0x4d, 0x36, 0xdb, 0xad, 0xbf, 0x0f, - 0xce, 0xc7, 0x61, 0x12, 0xa5, 0x42, 0xe5, 0xc3, 0x2b, 0xa4, 0xee, 0xa7, 0x4c, 0x2d, 0xa5, 0x7f, - 0xfd, 0x13, 0xbe, 0xa5, 0x47, 0x4f, 0x9a, 0xaa, 0xef, 0xe8, 0xcf, 0x5d, 0x1d, 0xeb, 0x9c, 0xa0, - 0x34, 0x00, 0x7d, 0xb6, 0xdb, 0x6f, 0xc1, 0x1c, 0x7d, 0x0a, 0x5c, 0x00, 0x03, 0x01, 0x8e, 0xe8, - 0xce, 0x88, 0xe4, 0x7f, 0x2d, 0xea, 0xe2, 0x7a, 0xba, 0x58, 0x40, 0x40, 0x28, 0x19, 0x8c, 0xa0, - 0xac, 0x18, 0xa6, 0x82, 0x32, 0xc2, 0xd3, 0x89, 0x32, 0xaa, 0x25, 0x8c, 0x2d, 0x1c, 0x20, 0x10, - 0x0c, 0x5d, 0x9b, 0x80, 0x46, 0x0f, 0x6a, 0x97, 0xc5, 0x78, 0x00, 0x8f, 0x1c, 0x5c, 0x4c, 0xd7, - 0xfc, 0x14, 0x0f, 0xb9, 0x86, 0x0c, 0xea, 0x94, 0x83, 0xb7, 0x11, 0x57, 0xf1, 0x2a, 0xf2, 0xf0, - 0x48, 0x42, 0x4c, 0xf0, 0xc5, 0xf7, 0xc2, 0x02, 0x49, 0x19, 0xf0, 0xf8, 0xdc, 0x7e, 0x64, 0xc3, - 0xe1, 0x08, 0x3f, 0x8d, 0x21, 0xc8, 0x35, 0x8a, 0xfe, 0xb5, 0x7d, 0x4e, 0x05, 0x29, 0x67, 0xd6, - 0xa7, 0x48, 0x5d, 0xf5, 0x40, 0x5f, 0x82, 0xde, 0xe7, 0x64, 0xec, 0xee, 0x55, 0xa2, 0x7a, 0xf2, - 0xa3, 0x75, 0xe8, 0x67, 0x11, 0xe2, 0x01, 0x50, 0x60, 0x9e, 0xa7, 0x86, 0x92, 0xcc, 0x45, 0xc5, - 0x89, 0x06, 0xb9, 0x05, 0xeb, 0xe9, 0x9f, 0x85, 0x27, 0x9a, 0x05, 0x51, 0x25, 0x13, 0x4a, 0xe5, - 0xb0, 0x9d, 0x28, 0x41, 0x6d, 0xe8, 0x0b, 0xd9, 0xcd, 0x87, 0x7d, 0x96, 0xcf, 0x11, 0x01, 0x22, - 0x2d, 0xa4, 0x8e, 0x0f, 0x84, 0x85, 0xea, 0xa0, 0xfd, 0x8d, 0x89, 0xf8, 0x64, 0x47, 0x42, 0xc7, - 0x97, 0xd7, 0xbc, 0x40, 0x22, 0xbb, 0xf8, 0x7d, 0x7a, 0x0a, 0x71, 0x20, 0x9c, 0x30, 0xa8, 0xb4, - 0x6c, 0x75, 0xa3, 0xbf, 0x05, 0x54, 0x12, 0xc2, 0x78, 0x20, 0x17, 0xa8, 0x83, 0x8f, 0xd6, 0x20, - 0xf5, 0x0b, 0x50, 0x38, 0xab, 0xf1, 0x01, 0x01, 0x64, 0xab, 0xf2, 0x7e, 0x11, 0x94, 0x2a, 0xba, - 0x92, 0x18, 0x10, 0x11, 0x09, 0x67, 0xde, 0x5b, 0x10, 0xd8, 0xf5, 0x3f, 0x86, 0x04, 0x70, 0xc0, - 0x82, 0x13, 0x54, 0xf0, 0x80, 0x81, 0x1d, 0x57, 0x55, 0xc2, 0x11, 0x25, 0xdb, 0x57, 0xb9, 0x58, - 0xc3, 0x18, 0x2a, 0xc4, 0x7c, 0x13, 0xcf, 0xb1, 0x60, 0xea, 0x60, 0xb6, 0x07, 0x65, 0x42, 0xd8, - 0xec, 0xc1, 0xc8, 0xc1, 0x7f, 0x04, 0x22, 0x6d, 0xeb, 0x56, 0xd4, 0x90, 0xc7, 0xc4, 0xbd, 0xdf, - 0xe1, 0x21, 0xa8, 0x21, 0xf1, 0x3f, 0xde, 0xf8, 0x81, 0x3c, 0x48, 0x92, 0x91, 0xdf, 0xc4, 0x89, - 0x30, 0xae, 0x58, 0x71, 0x20, 0x8c, 0x6a, 0x1c, 0xbf, 0x14, 0x15, 0x62, 0x41, 0x39, 0xad, 0xa7, - 0x4d, 0x88, 0xb1, 0x8c, 0x63, 0xde, 0x20, 0x79, 0x39, 0x14, 0x31, 0x9e, 0xf7, 0x32, 0x7b, 0xc5, - 0xb2, 0xd8, 0xb6, 0x7f, 0xc2, 0x02, 0x6b, 0xba, 0x8d, 0x19, 0x4c, 0x5c, 0x99, 0x7e, 0xc8, 0xb7, - 0x89, 0xb3, 0xb8, 0x62, 0x09, 0x04, 0xc5, 0x73, 0xf7, 0xf9, 0x46, 0x2a, 0xff, 0x61, 0x13, 0xfb, - 0x5c, 0x32, 0x23, 0xc4, 0x18, 0x9c, 0x22, 0xf4, 0x79, 0x85, 0x6a, 0xbe, 0x23, 0xca, 0xd7, 0xa5, - 0xc1, 0x5f, 0x04, 0x43, 0x5b, 0x22, 0x54, 0x3a, 0x21, 0xdb, 0x88, 0x08, 0x84, 0x45, 0x0b, 0xb1, - 0x40, 0x9f, 0x67, 0xaa, 0x77, 0x28, 0x9f, 0x10, 0x10, 0x13, 0x6a, 0x83, 0xdf, 0x6f, 0xe1, 0x45, - 0x09, 0x7e, 0x15, 0x33, 0x04, 0xf7, 0x93, 0xb3, 0xd0, 0x4f, 0xf5, 0xea, 0x27, 0x51, 0x02, 0x78, - 0x8b, 0x18, 0xd0, 0xd6, 0x63, 0x19, 0x63, 0xf9, 0x42, 0x2a, 0xaa, 0xa1, 0xde, 0x43, 0x3b, 0xc4, - 0x3f, 0x88, 0x18, 0x39, 0x3b, 0x19, 0x19, 0x11, 0x06, 0xe2, 0xfa, 0x8b, 0xe6, 0x60, 0xcc, 0x44, - 0xfb, 0x74, 0xbc, 0x66, 0x30, 0x71, 0x2c, 0x34, 0xf0, 0x84, 0x10, 0x71, 0x22, 0x1a, 0x64, 0xe0, - 0xe5, 0xe1, 0xac, 0x4c, 0x96, 0x1b, 0xeb, 0x25, 0x93, 0xa4, 0x83, 0xe7, 0xc6, 0x83, 0xc1, 0x00, - 0x40, 0x5d, 0x8c, 0x2e, 0x23, 0x8a, 0xdc, 0x40, 0xff, 0x38, 0x80, 0x87, 0x55, 0xdd, 0x37, 0xaa, - 0xf8, 0x21, 0xc2, 0x67, 0x81, 0xee, 0x0b, 0xbc, 0x40, 0x27, 0xde, 0xf0, 0xa2, 0xc4, 0x24, 0x62, - 0xa6, 0x5f, 0x71, 0xfe, 0x42, 0x6c, 0x6f, 0x89, 0x8e, 0x2a, 0xa9, 0x71, 0x22, 0x4e, 0x03, 0x82, - 0x62, 0x07, 0x21, 0xb7, 0x8f, 0xdd, 0xaa, 0x17, 0xc6, 0x7f, 0xe2, 0x19, 0xc7, 0x42, 0x02, 0xb5, - 0x7e, 0xa8, 0x16, 0x43, 0x01, 0x00, 0x89, 0x13, 0x40, 0xc9, 0xfb, 0x94, 0x85, 0x1c, 0x2f, 0x52, - 0xf4, 0xbf, 0x10, 0x12, 0x24, 0x2b, 0x32, 0xaf, 0x13, 0xd2, 0x17, 0xf1, 0x22, 0x0d, 0x5c, 0xcc, - 0x7b, 0x2c, 0x94, 0xf1, 0x33, 0x5e, 0x7c, 0x7c, 0x48, 0x81, 0xd4, 0xd2, 0xf7, 0x3d, 0x39, 0xfe, - 0x26, 0x0a, 0x0c, 0xba, 0xaa, 0xad, 0xfe, 0x08, 0xeb, 0x5f, 0x7d, 0x84, 0x41, 0x1b, 0xa1, 0xd8, - 0x43, 0x56, 0xfa, 0xf0, 0x88, 0x98, 0x9e, 0x85, 0xea, 0x1c, 0xe8, 0xd8, 0x4f, 0x0c, 0x04, 0x0c, - 0x39, 0xb5, 0x3c, 0xbc, 0x4c, 0xd5, 0x63, 0xf1, 0x02, 0x44, 0x15, 0xa8, 0xe3, 0x2d, 0x80, 0xb2, - 0x62, 0x89, 0xf1, 0x10, 0x45, 0x68, 0x57, 0xf7, 0xc2, 0x77, 0xaa, 0xd4, 0xbe, 0xfe, 0x41, 0x4f, - 0x7f, 0x82, 0x30, 0xbe, 0x32, 0x2b, 0x27, 0xbc, 0x4a, 0x2c, 0xbe, 0x89, 0xd0, 0x59, 0x10, 0x24, - 0x78, 0x59, 0xde, 0xef, 0x60, 0x2a, 0xf1, 0x6d, 0x4f, 0x9b, 0x95, 0x5e, 0x20, 0x61, 0x5c, 0x71, - 0x1d, 0x09, 0x1e, 0xd1, 0x09, 0x99, 0xac, 0x31, 0x68, 0x20, 0x0b, 0x60, 0x9c, 0xa2, 0x3c, 0xf0, - 0x1a, 0xba, 0x91, 0x99, 0x6c, 0xd0, 0x2b, 0xc1, 0xa7, 0x98, 0x88, 0x2b, 0x98, 0x30, 0x1c, 0xb7, - 0x3d, 0xb8, 0x36, 0xba, 0xeb, 0x59, 0x03, 0xb4, 0xe5, 0xab, 0x89, 0x97, 0x2b, 0x09, 0x19, 0x64, - 0x82, 0x9a, 0xc2, 0x01, 0x11, 0xe5, 0xbd, 0xa3, 0xe1, 0xf3, 0xf3, 0xef, 0x8c, 0xea, 0xa7, 0x22, - 0xd1, 0xdc, 0x3c, 0xe0, 0xba, 0x9d, 0x6c, 0xcc, 0x9b, 0x27, 0x10, 0x24, 0xbc, 0x5d, 0xaf, 0x24, - 0xac, 0x2b, 0xf8, 0x91, 0x35, 0xc7, 0xff, 0x2f, 0xb9, 0xf8, 0x2e, 0xe3, 0xc9, 0x3f, 0xbd, 0x9c, - 0x61, 0x69, 0xdd, 0x31, 0xd5, 0xeb, 0x88, 0x12, 0x30, 0x8e, 0x10, 0x14, 0x27, 0x78, 0x81, 0x13, - 0x1a, 0x6e, 0x50, 0x99, 0xe7, 0x12, 0xe1, 0xd2, 0x62, 0x57, 0x7d, 0xd0, 0x65, 0x9d, 0x41, 0x1e, - 0xa4, 0x8f, 0x46, 0x90, 0xad, 0x1b, 0xaf, 0xac, 0x48, 0x91, 0x96, 0x14, 0xa4, 0xb7, 0xa7, 0x0a, - 0x14, 0xeb, 0x3a, 0x9a, 0xf7, 0x9d, 0x25, 0x4d, 0x55, 0x71, 0xf8, 0xee, 0x52, 0x41, 0x4c, 0x63, - 0x52, 0xc3, 0x17, 0x26, 0xa5, 0x0b, 0xd7, 0x06, 0x2d, 0xb2, 0x91, 0x58, 0x34, 0x7b, 0x88, 0x0f, - 0x82, 0x93, 0x95, 0xec, 0xa2, 0xe9, 0xe2, 0x5b, 0x58, 0x21, 0x64, 0x0b, 0x35, 0x6b, 0xab, 0x4b, - 0x5a, 0xff, 0x1c, 0x75, 0x11, 0xcd, 0xef, 0x24, 0x5b, 0xf8, 0x93, 0x55, 0x7f, 0x30, 0xcc, 0xbf, - 0x1e, 0x82, 0xe0, 0x8f, 0xf7, 0x00, 0x1a, 0xa7, 0x76, 0xb5, 0x82, 0xbe, 0xaf, 0xc3, 0x02, 0x01, - 0x60, 0x81, 0xc6, 0x50, 0x9d, 0x45, 0xd9, 0xb9, 0x71, 0xe9, 0x36, 0x2c, 0x97, 0xef, 0x89, 0x84, - 0x78, 0x85, 0x57, 0xda, 0xdb, 0xf0, 0x89, 0x1f, 0x2d, 0x3a, 0xb7, 0xb9, 0xfb, 0x67, 0xe1, 0x37, - 0x19, 0xce, 0xf1, 0x0c, 0x42, 0xfd, 0x22, 0xba, 0xe3, 0x0f, 0x4a, 0x21, 0xe1, 0x23, 0x89, 0xa1, - 0x06, 0x23, 0x28, 0x44, 0x6f, 0x14, 0xc7, 0x83, 0x6d, 0xe7, 0xcd, 0x7c, 0xad, 0xf8, 0xcb, 0x4a, - 0xfb, 0xb4, 0xdd, 0x21, 0xcd, 0x51, 0xdb, 0x78, 0xff, 0x49, 0x72, 0xe8, 0x2d, 0x72, 0xdd, 0x06, - 0x39, 0x78, 0xda, 0x55, 0x57, 0x89, 0x2d, 0xcd, 0x17, 0xf7, 0xe7, 0xd7, 0x21, 0x8b, 0x82, 0xbb, - 0x1e, 0x22, 0x0b, 0x88, 0xa9, 0xaa, 0x6b, 0x55, 0x6f, 0x82, 0x60, 0x9b, 0xbb, 0xbe, 0x68, 0xdb, - 0xe8, 0x2a, 0x96, 0x0a, 0x61, 0x81, 0x00, 0x88, 0x39, 0x7b, 0xf7, 0x10, 0x24, 0x29, 0x9a, 0xab, - 0x6e, 0xe9, 0x23, 0x9e, 0x0c, 0xbb, 0x47, 0x16, 0xbb, 0xe1, 0x32, 0x2a, 0xae, 0x43, 0x15, 0xf1, - 0x11, 0x86, 0x4d, 0xd8, 0xf3, 0xab, 0x4b, 0x6d, 0xd5, 0x43, 0x6a, 0xd2, 0xc7, 0xe2, 0xf8, 0x87, - 0x03, 0x4d, 0xca, 0xc4, 0x0c, 0x0f, 0xbf, 0xc1, 0x30, 0xbe, 0x5c, 0x1f, 0x37, 0xb7, 0x2f, 0x7f, - 0xab, 0xf0, 0x8c, 0x87, 0xdd, 0xf8, 0x91, 0x71, 0xa4, 0xcf, 0xde, 0xf5, 0xc9, 0x86, 0x9a, 0xfb, - 0x38, 0x81, 0x02, 0x86, 0x17, 0x49, 0x6c, 0x7d, 0xef, 0x88, 0x84, 0x08, 0xec, 0xaa, 0xd5, 0xd2, - 0x5a, 0xe1, 0xb6, 0x15, 0x01, 0x26, 0xe6, 0xb1, 0x9f, 0xff, 0x83, 0x3f, 0x7f, 0xcc, 0x3f, 0xac, - 0x13, 0x74, 0x2a, 0xaa, 0x18, 0x10, 0x0a, 0x3c, 0x79, 0x6a, 0x5e, 0x1c, 0x8c, 0xc9, 0xc4, 0x09, - 0x13, 0x72, 0xa4, 0x42, 0xc7, 0x21, 0x34, 0xb8, 0xdf, 0xde, 0x93, 0xbf, 0x8f, 0x22, 0x5b, 0x8c, - 0xa9, 0xef, 0xf9, 0x37, 0x89, 0x10, 0x3c, 0xc2, 0x4e, 0x64, 0xf9, 0xbb, 0x93, 0x9a, 0x39, 0x3e, - 0x92, 0x7d, 0x38, 0x80, 0x52, 0x52, 0x87, 0xa1, 0x28, 0x35, 0x0f, 0xff, 0x6e, 0xb1, 0xff, 0x8f, - 0xf8, 0x8f, 0xee, 0x22, 0x20, 0x5d, 0x9a, 0xae, 0x6a, 0x2f, 0x90, 0x97, 0x5e, 0x22, 0x10, 0x3b, - 0xdb, 0xba, 0x68, 0x03, 0x15, 0xbb, 0xbf, 0x8e, 0x2b, 0xed, 0xbb, 0xbe, 0xdb, 0xfc, 0x4d, 0xdd, - 0xce, 0xc3, 0xef, 0xf2, 0x91, 0xde, 0xea, 0x20, 0x40, 0x48, 0x52, 0x9a, 0x83, 0x6b, 0xd3, 0xa7, - 0xc4, 0x82, 0x33, 0x2a, 0xfd, 0xc4, 0x89, 0x28, 0x96, 0xa2, 0x74, 0x35, 0x01, 0x2c, 0x21, 0x37, - 0x55, 0xc2, 0x10, 0x59, 0x3d, 0xb5, 0xb9, 0x68, 0x6a, 0x3b, 0x1a, 0x59, 0x98, 0x3f, 0x8f, 0x35, - 0x98, 0x4c, 0xfb, 0xb8, 0xaf, 0xf1, 0x35, 0x89, 0x05, 0x47, 0xbc, 0x56, 0xae, 0xa9, 0x6d, 0x21, - 0xcd, 0x90, 0xb9, 0x57, 0x71, 0x01, 0x10, 0x88, 0x85, 0x15, 0xb5, 0x25, 0x2e, 0x99, 0x78, 0xf0, - 0x81, 0x45, 0x6f, 0x08, 0xe3, 0xf0, 0x81, 0xd3, 0x92, 0x28, 0x75, 0xb2, 0x3e, 0xf4, 0x98, 0x1d, - 0x1f, 0xa5, 0xba, 0x7c, 0xcb, 0xe1, 0xb1, 0x63, 0x33, 0x2f, 0x5e, 0x11, 0xac, 0x4b, 0x13, 0x77, - 0xf9, 0xae, 0xff, 0x94, 0xae, 0xff, 0x88, 0xec, 0x45, 0x62, 0xe9, 0x56, 0x20, 0xc4, 0x77, 0x7e, - 0x18, 0x08, 0x7c, 0xa3, 0xb5, 0x5f, 0x2c, 0x98, 0xbf, 0x82, 0x31, 0x28, 0xe2, 0x78, 0x8f, 0x28, - 0x22, 0x86, 0x26, 0xdd, 0x4d, 0x9e, 0x09, 0xef, 0x4f, 0xbb, 0xc7, 0xe2, 0x63, 0xf2, 0xe4, 0xd4, - 0xb3, 0xe6, 0x6c, 0x9b, 0xc9, 0x9c, 0x4a, 0x27, 0x57, 0x29, 0x55, 0x7f, 0x08, 0x9b, 0x10, 0x71, - 0xe3, 0xc7, 0x35, 0x4e, 0xe8, 0xa5, 0x4b, 0x89, 0x85, 0x08, 0x78, 0xd1, 0x2c, 0xc6, 0xd5, 0x18, - 0xba, 0x0a, 0x7b, 0x76, 0xed, 0x93, 0x67, 0xc7, 0xe2, 0x62, 0x0b, 0x53, 0x30, 0xde, 0x78, 0xb3, - 0xde, 0xa2, 0x25, 0x1a, 0x8e, 0x5e, 0xfe, 0x6e, 0xef, 0xe4, 0xbb, 0xbb, 0xe2, 0x21, 0x0d, 0x6e, - 0xee, 0x93, 0xb9, 0x71, 0xef, 0xc1, 0x25, 0xde, 0xef, 0xc4, 0x4b, 0x7b, 0xd0, 0xa4, 0x24, 0x14, - 0xc7, 0xcb, 0x08, 0x78, 0x8a, 0x14, 0xfc, 0x45, 0x0a, 0x7e, 0x22, 0x6e, 0x7f, 0xf0, 0xe0, 0x9d, - 0x35, 0x53, 0x6a, 0x74, 0xfc, 0x3f, 0x0c, 0x6b, 0x8e, 0xa5, 0x93, 0x92, 0xfd, 0xed, 0x57, 0x10, - 0x24, 0x7d, 0x75, 0xe6, 0xc9, 0x27, 0x11, 0xdf, 0x10, 0x4d, 0x46, 0x6e, 0x3e, 0x3f, 0x08, 0x78, - 0x93, 0x66, 0xa2, 0xce, 0x26, 0x10, 0xb8, 0xa6, 0xeb, 0xd5, 0x5b, 0x4c, 0x47, 0xdf, 0x88, 0xee, - 0xf4, 0xef, 0x88, 0x89, 0x8b, 0xd6, 0xaa, 0xab, 0x89, 0x89, 0x8d, 0xa6, 0x7f, 0x7b, 0x7e, 0x11, - 0x16, 0xfb, 0xe5, 0x85, 0xcb, 0xdf, 0xc4, 0xfc, 0x49, 0x09, 0x77, 0x7c, 0x44, 0x28, 0x5d, 0xa7, - 0x64, 0xed, 0x6e, 0xee, 0xec, 0x62, 0xb7, 0x7f, 0x8a, 0xbb, 0xbb, 0xcb, 0x4f, 0xdd, 0xf7, 0x2c, - 0x48, 0x91, 0x59, 0xcc, 0x5e, 0xef, 0x7e, 0x24, 0x83, 0x1d, 0xe7, 0xcc, 0x44, 0x15, 0x5a, 0xd7, - 0x22, 0x4d, 0xf3, 0x65, 0x45, 0xa3, 0xeb, 0xb9, 0x0e, 0xf4, 0x3f, 0xbe, 0x0b, 0x04, 0x44, 0x2c, - 0x2c, 0x46, 0xfd, 0xc5, 0x62, 0xb8, 0x2d, 0xef, 0x8b, 0xd5, 0x32, 0xee, 0xd3, 0x7c, 0x48, 0x8a, - 0x32, 0xe6, 0xf5, 0xf8, 0xcb, 0x55, 0x55, 0xd6, 0xbb, 0x55, 0x54, 0xfc, 0x49, 0x1e, 0x30, 0x8b, - 0xb7, 0xf7, 0xf0, 0x89, 0xe4, 0xeb, 0x91, 0x47, 0xad, 0x7c, 0x16, 0x55, 0x6a, 0xba, 0xe9, 0x88, - 0x16, 0x1b, 0xe1, 0x43, 0x1b, 0xfa, 0x74, 0xef, 0xaa, 0x6e, 0xef, 0x67, 0x89, 0x05, 0xc5, 0x7d, - 0x6f, 0x76, 0x7d, 0xee, 0xc7, 0xf3, 0x1d, 0x56, 0xb8, 0x98, 0x4a, 0xee, 0xd3, 0x4a, 0xd7, 0xc4, - 0x84, 0xa6, 0x20, 0xed, 0x2d, 0xae, 0x10, 0x10, 0x2e, 0xe5, 0x66, 0xdd, 0xdd, 0xf0, 0x80, 0x83, - 0x5c, 0x6d, 0x06, 0xfc, 0x9b, 0xbb, 0xfa, 0x2a, 0x74, 0xe2, 0x7c, 0x44, 0x51, 0x37, 0x77, 0xdf, - 0xc4, 0xd1, 0x9c, 0x83, 0x47, 0xa4, 0xfe, 0x0b, 0xa7, 0xce, 0xe5, 0x10, 0x1d, 0xf8, 0x88, 0x27, - 0x11, 0x1c, 0x00, 0x06, 0xfd, 0xef, 0xfe, 0x22, 0x0b, 0x89, 0x9c, 0x00, 0x03, 0x7a, 0xbe, 0x5f, - 0x04, 0x47, 0xe5, 0x62, 0x0f, 0xa9, 0xe8, 0x6e, 0x10, 0x8a, 0xa6, 0xee, 0xdc, 0x49, 0x50, 0x27, - 0xc9, 0x82, 0x98, 0xc4, 0x09, 0x04, 0x3b, 0x35, 0x92, 0xc3, 0x44, 0x81, 0x36, 0x7b, 0xcf, 0x92, - 0x95, 0xa7, 0xf9, 0xfe, 0xdd, 0xee, 0x71, 0x12, 0x6b, 0x5e, 0x24, 0x20, 0x45, 0x4b, 0xd5, 0x65, - 0xa3, 0xb4, 0x83, 0xc2, 0x23, 0xed, 0x52, 0xd5, 0x55, 0xb5, 0xf1, 0x21, 0x00, 0x4c, 0x5a, 0xae, - 0xd9, 0x7d, 0x6f, 0xc4, 0x09, 0x1d, 0xe6, 0xe2, 0xb2, 0xda, 0x96, 0xc2, 0xc7, 0x4d, 0xb2, 0x6e, - 0x22, 0xe7, 0xdd, 0x4b, 0x87, 0xc4, 0x7e, 0x14, 0x39, 0xc3, 0x01, 0x7c, 0xff, 0xd2, 0x7b, 0xbb, - 0xbd, 0x7c, 0x10, 0x94, 0xdf, 0xa5, 0x5e, 0x88, 0xdc, 0x22, 0x24, 0x4d, 0x46, 0x53, 0x04, 0xf9, - 0x03, 0x03, 0x31, 0x0f, 0x84, 0x04, 0x93, 0x77, 0x7b, 0xbf, 0x12, 0xfb, 0xbf, 0x94, 0xb5, 0xae, - 0x20, 0x22, 0x0b, 0x8e, 0xab, 0xbd, 0xdd, 0x2f, 0x89, 0x17, 0xbb, 0xeb, 0x5e, 0x25, 0x0e, 0xef, - 0x12, 0x10, 0x3b, 0x25, 0x98, 0xa7, 0x1e, 0x30, 0xfa, 0x45, 0x9e, 0x26, 0x08, 0xb7, 0xb3, 0x7e, - 0x22, 0x2c, 0xf4, 0x53, 0x6b, 0x97, 0x2e, 0xfc, 0x66, 0xd1, 0x69, 0xa8, 0xee, 0x34, 0x5b, 0xb9, - 0x71, 0xdf, 0xf1, 0x21, 0x42, 0x36, 0x1e, 0x5b, 0xab, 0xb3, 0x9a, 0x9a, 0x23, 0x82, 0x00, 0xf7, - 0xc1, 0x69, 0x35, 0x4b, 0x6d, 0x62, 0xf8, 0x7c, 0x8a, 0x4b, 0x24, 0x39, 0x55, 0x2c, 0xe4, 0x51, - 0x05, 0x2a, 0xcd, 0x8d, 0xb1, 0x2f, 0xf8, 0x21, 0xa2, 0x29, 0xdb, 0x1f, 0x43, 0x71, 0x11, 0xb3, - 0x74, 0xc5, 0xd3, 0xe3, 0x15, 0x67, 0xc5, 0x36, 0x0b, 0x6d, 0xda, 0x97, 0xd0, 0x96, 0x70, 0x2d, - 0x81, 0x2c, 0xcb, 0x08, 0xfe, 0x9f, 0x88, 0x12, 0xf8, 0xcb, 0x8f, 0x89, 0xb1, 0x32, 0xd3, 0xc4, - 0xc8, 0x67, 0xbf, 0x12, 0x24, 0x23, 0x59, 0x51, 0xee, 0xd5, 0x6e, 0xfe, 0x20, 0x30, 0xe5, 0xf8, - 0xdf, 0x84, 0x5c, 0x56, 0xdf, 0xe0, 0x8a, 0x3a, 0xd1, 0x16, 0x4e, 0x8e, 0xf1, 0x33, 0x72, 0xfe, - 0x23, 0xc4, 0x09, 0x47, 0x77, 0x84, 0x5d, 0xdd, 0xdf, 0x10, 0x25, 0x5f, 0x88, 0x90, 0x8e, 0xee, - 0xfe, 0x24, 0xa7, 0x20, 0xb4, 0x4d, 0xac, 0x6e, 0xf7, 0xe2, 0x49, 0x5a, 0xaf, 0x08, 0x08, 0x2a, - 0xb1, 0x2c, 0x5e, 0xbc, 0x40, 0x44, 0x16, 0x95, 0xdd, 0xdf, 0x2e, 0x5f, 0xe2, 0x0c, 0xfb, 0xc5, - 0xeb, 0x89, 0x11, 0xf1, 0xe4, 0xd6, 0xb8, 0xcd, 0x1f, 0x77, 0x77, 0xe2, 0x44, 0x78, 0xe2, 0xd5, - 0x77, 0x2c, 0x3c, 0x24, 0x77, 0xbb, 0xbb, 0xbb, 0xf8, 0x28, 0x8d, 0xb2, 0xbb, 0x2a, 0x41, 0x6a, - 0xe2, 0x2d, 0x77, 0xc5, 0xf2, 0xda, 0x31, 0x5b, 0xbf, 0x89, 0x31, 0x2a, 0x5a, 0x57, 0xc4, 0x90, - 0x43, 0xab, 0xf8, 0x90, 0x53, 0x1e, 0x1a, 0x13, 0x21, 0x6a, 0x0a, 0xeb, 0x77, 0x47, 0x8d, 0x42, - 0xf8, 0x74, 0xeb, 0x27, 0xed, 0xab, 0x73, 0x93, 0x4d, 0x58, 0xe3, 0x31, 0x7f, 0x0d, 0x70, 0x52, - 0x60, 0x7d, 0xdf, 0x53, 0x45, 0xfc, 0x7d, 0xed, 0xbd, 0xfc, 0x40, 0xe3, 0xd0, 0x1f, 0x23, 0xbf, - 0x10, 0x24, 0xa5, 0x54, 0xbf, 0x04, 0x9e, 0x5c, 0x47, 0x6b, 0x82, 0xc2, 0xb3, 0xb4, 0xf7, 0xa7, - 0x1d, 0xb8, 0xf5, 0x25, 0xf1, 0x06, 0x14, 0xb2, 0x6f, 0xc8, 0x55, 0x6f, 0xe2, 0x15, 0xfe, 0x0a, - 0xca, 0x5e, 0x1f, 0x68, 0x3e, 0x6e, 0x7e, 0xdf, 0x75, 0x91, 0x7f, 0x08, 0xec, 0x9f, 0x15, 0x9f, - 0xef, 0x4f, 0xe0, 0xaa, 0x4f, 0x5e, 0xee, 0xef, 0x7a, 0xf1, 0x01, 0x3d, 0xde, 0x7a, 0x4b, 0xdf, - 0x12, 0x24, 0xdc, 0x65, 0x31, 0xe2, 0x21, 0x0c, 0x75, 0x09, 0xcb, 0x6e, 0xf4, 0xef, 0x78, 0x6a, - 0x50, 0x02, 0x23, 0x57, 0xd3, 0x3e, 0xde, 0xfa, 0xd7, 0x57, 0x67, 0x54, 0xdf, 0xc2, 0x25, 0xea, - 0x64, 0x98, 0x98, 0xb9, 0xfd, 0xe4, 0xf5, 0xf0, 0xc0, 0x8b, 0xbd, 0xdd, 0xdf, 0x89, 0x12, 0x8d, - 0x17, 0x88, 0x75, 0xaf, 0x89, 0x08, 0x15, 0xef, 0x77, 0x15, 0xdd, 0xdd, 0xfc, 0x97, 0x74, 0xd9, - 0xf8, 0x4e, 0xe3, 0x2c, 0x9d, 0xe4, 0x13, 0xe7, 0xf2, 0xca, 0xc5, 0xeb, 0xbd, 0xef, 0x88, 0x92, - 0xe5, 0xa7, 0xe1, 0xa1, 0x4e, 0xac, 0x1b, 0x6b, 0x1a, 0xec, 0x7f, 0xe3, 0x4b, 0xc7, 0x88, 0xb0, - 0x1d, 0x4c, 0x83, 0x3b, 0xe2, 0x13, 0xe8, 0xeb, 0x79, 0xfd, 0xe0, 0x42, 0xc8, 0x05, 0xb9, 0x67, - 0xff, 0x39, 0xd4, 0xf0, 0x8e, 0xd8, 0xfc, 0x31, 0x10, 0x20, 0x2e, 0x2a, 0x9d, 0x36, 0xc1, 0x61, - 0x13, 0x44, 0x31, 0x3c, 0x04, 0xd5, 0x2f, 0x15, 0xfe, 0x20, 0x48, 0x92, 0xe7, 0x50, 0x9e, 0xc3, - 0x1f, 0x44, 0xbe, 0x13, 0x29, 0x7c, 0x56, 0xfb, 0x37, 0xc4, 0x09, 0x27, 0x74, 0xb8, 0x90, 0x95, - 0xef, 0x93, 0xfe, 0x2a, 0xf7, 0xbd, 0xfe, 0xc5, 0x3e, 0xfe, 0x09, 0xc5, 0xd4, 0xfb, 0xb6, 0xbd, - 0x7c, 0x12, 0xcd, 0x4a, 0xc4, 0x58, 0xad, 0xfe, 0x13, 0xbd, 0xa4, 0x95, 0x6b, 0x84, 0x44, 0x8c, - 0xa7, 0x58, 0x3f, 0x62, 0xd6, 0xf6, 0x98, 0x3b, 0x6b, 0xe3, 0xa9, 0x31, 0xde, 0xef, 0x3b, 0x3e, - 0x87, 0xc4, 0x82, 0x89, 0xba, 0xdf, 0x3e, 0x37, 0xdc, 0x4c, 0x9b, 0x77, 0x7c, 0x20, 0x0a, 0x5c, - 0xff, 0xfc, 0x20, 0x5b, 0xb9, 0x72, 0xf8, 0x41, 0xd1, 0x6f, 0x51, 0x3e, 0x26, 0x52, 0x3b, 0xfc, - 0x48, 0x44, 0xb9, 0xf6, 0x4d, 0xee, 0xe8, 0x9f, 0xc2, 0x17, 0x77, 0xb8, 0xaf, 0x77, 0x63, 0x7e, - 0x20, 0x29, 0x77, 0x77, 0xbc, 0x75, 0x5d, 0xce, 0x92, 0xdf, 0x77, 0x7f, 0x12, 0x13, 0xf2, 0xef, - 0x7f, 0x8b, 0x3e, 0x5c, 0x75, 0xb1, 0xb1, 0xac, 0x4a, 0xbf, 0x88, 0x44, 0xef, 0x12, 0x08, 0xaa, - 0xbf, 0x78, 0x90, 0xd0, 0xa9, 0x72, 0x5f, 0x05, 0xd6, 0x39, 0xa7, 0xf8, 0x43, 0x4a, 0xd8, 0xda, - 0xd6, 0xf8, 0x73, 0x6b, 0x2f, 0xca, 0x56, 0x1a, 0xbc, 0x2d, 0xc1, 0x25, 0x76, 0x9b, 0x86, 0x02, - 0x23, 0x8c, 0x0f, 0x7c, 0x2e, 0x0b, 0x10, 0x7b, 0xe3, 0xa7, 0xcf, 0xc3, 0xfb, 0xe2, 0x5e, 0x9f, - 0x12, 0x24, 0x4b, 0x12, 0x14, 0xcc, 0x63, 0x09, 0xb6, 0xa2, 0x61, 0x03, 0xde, 0xec, 0x62, 0xb1, - 0x5b, 0xd2, 0x7f, 0xa2, 0x23, 0xbe, 0x27, 0x89, 0x12, 0x89, 0x5c, 0x4c, 0x4d, 0x36, 0xf5, 0x5a, - 0x1f, 0x84, 0x8a, 0x60, 0x5d, 0xfa, 0x6f, 0x0c, 0xa3, 0x80, 0x0e, 0xd2, 0xf3, 0xb6, 0x9b, 0x9f, - 0x69, 0xbd, 0xbf, 0x12, 0xf5, 0xb6, 0x98, 0xc9, 0x83, 0x2c, 0xe2, 0x23, 0xfc, 0xaa, 0x0f, 0x36, - 0x66, 0x37, 0xc3, 0xc7, 0xf5, 0x58, 0xcd, 0x31, 0x10, 0xa1, 0xaf, 0xbd, 0x3a, 0x76, 0x9f, 0x0c, - 0xc4, 0x9e, 0xf2, 0x66, 0xf8, 0x6b, 0x00, 0x43, 0x77, 0x71, 0xfb, 0x2b, 0x6d, 0x92, 0xd0, 0x1f, - 0x7f, 0x4d, 0xbf, 0x3f, 0x7e, 0x10, 0x10, 0xf7, 0x77, 0xe1, 0x80, 0x81, 0x47, 0xfa, 0xed, 0xdf, - 0x5d, 0x57, 0x08, 0x88, 0x04, 0xd3, 0xb1, 0x68, 0xd8, 0xe6, 0xf6, 0xfb, 0xc4, 0xa2, 0x3f, 0x89, - 0x75, 0xaf, 0x84, 0x4c, 0x61, 0x7d, 0x7d, 0x0b, 0x7f, 0x88, 0x26, 0x5c, 0x57, 0xbf, 0xc1, 0x4d, - 0xcb, 0x8f, 0x65, 0xb1, 0x5d, 0xdf, 0x77, 0xf1, 0x20, 0xa8, 0xb6, 0xef, 0x72, 0xb0, 0xed, 0x31, - 0x3e, 0xef, 0x7e, 0x20, 0x40, 0x27, 0x8a, 0xde, 0xee, 0xef, 0xae, 0x22, 0x10, 0xdb, 0xbc, 0x56, - 0x7e, 0xf6, 0xe9, 0x6b, 0x8a, 0xf3, 0x41, 0x75, 0xf8, 0x4c, 0xa9, 0xb7, 0xcb, 0xdb, 0xf8, 0x9f, - 0xa1, 0x51, 0x78, 0x91, 0xa4, 0x51, 0x0f, 0x56, 0x33, 0x68, 0x2d, 0x56, 0x3a, 0xba, 0x4e, 0xe7, - 0x04, 0x61, 0x21, 0xd1, 0x87, 0xff, 0x82, 0xb3, 0x8f, 0x95, 0x3f, 0x43, 0x48, 0x7c, 0xe0, 0xaf, - 0x90, 0x36, 0xa0, 0xd8, 0xe0, 0x85, 0xa0, 0x80, 0x22, 0x30, 0x61, 0xf4, 0x3c, 0x74, 0x36, 0xe6, - 0x01, 0x98, 0x3a, 0x3d, 0x33, 0xdf, 0xbf, 0x66, 0x0a, 0xe6, 0xc1, 0xbe, 0x57, 0xfc, 0x13, 0x17, - 0x61, 0x9f, 0x1e, 0xc5, 0xf7, 0x95, 0x44, 0xcc, 0x25, 0xb9, 0xff, 0xc2, 0x57, 0xbd, 0xa7, 0x27, - 0xb7, 0xd5, 0xfc, 0x48, 0x22, 0x35, 0xee, 0xfc, 0x44, 0x11, 0x95, 0x53, 0x37, 0x67, 0xef, 0x8f, - 0x38, 0xc2, 0x06, 0xd1, 0xbe, 0xfb, 0x6f, 0x74, 0xfe, 0x09, 0x08, 0x5c, 0x32, 0x97, 0xfb, 0xc4, - 0x04, 0x2e, 0xee, 0xfb, 0xcb, 0xdd, 0xef, 0xe3, 0x37, 0xbb, 0xdb, 0xbc, 0x57, 0xbe, 0xf8, 0x91, - 0x21, 0x2b, 0xbe, 0x87, 0x76, 0x7e, 0x6b, 0x55, 0xf0, 0x88, 0x22, 0x23, 0xbb, 0xbb, 0xf1, 0x30, - 0x5c, 0x5a, 0xb5, 0xdd, 0xff, 0xe2, 0x45, 0x11, 0xee, 0xed, 0xd6, 0xb1, 0x22, 0x8f, 0x4a, 0xd3, - 0xbb, 0xf8, 0x90, 0x4d, 0x2b, 0x1a, 0xdd, 0xef, 0x7f, 0xba, 0x74, 0xd7, 0xcd, 0x77, 0x77, 0xc4, - 0x89, 0x1f, 0xad, 0x95, 0xed, 0x39, 0x69, 0x7c, 0x46, 0xb1, 0x3c, 0x4c, 0x71, 0x56, 0xaa, 0x8e, - 0xbd, 0x49, 0xfd, 0x7b, 0x88, 0x82, 0x2a, 0x40, 0xd6, 0xe5, 0x73, 0x5f, 0xe0, 0xa4, 0x64, 0xaf, - 0xd5, 0x35, 0x5e, 0x2f, 0x12, 0x32, 0xff, 0x0f, 0x74, 0x27, 0x7a, 0x6e, 0x6d, 0x3d, 0x83, 0xed, - 0xfc, 0x13, 0x1f, 0x44, 0x46, 0x71, 0xd4, 0x2d, 0xe1, 0x48, 0x62, 0x14, 0x14, 0x2d, 0xb4, 0x5e, - 0xee, 0xa4, 0xec, 0x6a, 0x03, 0x1b, 0x93, 0xcd, 0xa7, 0x8f, 0x40, 0xeb, 0x52, 0x88, 0xef, 0x8a, - 0x7a, 0x5b, 0xe0, 0x94, 0xa1, 0xfe, 0xa3, 0xc0, 0x6e, 0x52, 0x70, 0x15, 0xcb, 0x67, 0x62, 0x5f, - 0x13, 0x15, 0xee, 0xe9, 0x3b, 0xf1, 0x24, 0x3a, 0x08, 0xec, 0x5a, 0xf2, 0x13, 0x77, 0xf0, 0x4c, - 0x7b, 0x42, 0xb7, 0xb6, 0xe2, 0xbd, 0x7c, 0x4c, 0xbd, 0xdc, 0xbd, 0xec, 0xbc, 0xb7, 0xe0, 0xa0, - 0x95, 0x55, 0xd5, 0x5c, 0xe2, 0x7e, 0x23, 0xc4, 0xf8, 0x9f, 0x84, 0xae, 0xcb, 0x17, 0xaf, 0x84, - 0x47, 0xe5, 0xff, 0x3f, 0xb7, 0xb9, 0x22, 0x66, 0xde, 0x2b, 0xe2, 0x44, 0x6e, 0xef, 0xaa, 0x6b, - 0x10, 0x2c, 0xae, 0xe5, 0x00, 0x00, 0xf7, 0x77, 0xf2, 0xdd, 0xc5, 0x77, 0xd1, 0x5f, 0xe3, 0xe2, - 0x1e, 0xee, 0x7a, 0x1d, 0x8f, 0x67, 0x76, 0x3e, 0x22, 0x49, 0x30, 0x9f, 0xf1, 0x1d, 0x56, 0x4c, - 0xfc, 0x65, 0x0d, 0xb9, 0xba, 0x48, 0x1d, 0x4e, 0x82, 0x97, 0xe4, 0xcf, 0x94, 0x8b, 0xa7, 0x88, - 0x97, 0x8f, 0xe3, 0xf0, 0x4c, 0x5d, 0xb5, 0xd2, 0x4b, 0x9f, 0xc4, 0x89, 0xd2, 0x4d, 0xb5, 0x5f, - 0x10, 0x20, 0x13, 0x8e, 0x6a, 0x48, 0x14, 0x90, 0x43, 0xc8, 0xdf, 0x36, 0x3d, 0x47, 0xf9, 0x4f, - 0x4c, 0x2f, 0x6c, 0xe4, 0x61, 0x3e, 0x6b, 0x46, 0xe4, 0x60, 0x60, 0x25, 0x09, 0xd8, 0x80, 0x88, - 0x29, 0x34, 0x2a, 0x86, 0x02, 0x7c, 0x5e, 0x9b, 0xcf, 0x41, 0x35, 0x5e, 0xe3, 0x13, 0x29, 0x30, - 0x3e, 0x6b, 0xbe, 0xb1, 0x3e, 0x24, 0x85, 0xa3, 0x97, 0x7c, 0x49, 0x9f, 0x54, 0x9c, 0x7d, 0x02, - 0x73, 0xe6, 0x08, 0xd5, 0x45, 0xf1, 0x22, 0x04, 0x99, 0x56, 0xa2, 0xe2, 0xe2, 0xe2, 0xfe, 0x09, - 0x3a, 0xaa, 0x3b, 0xc4, 0xc1, 0x46, 0xab, 0x75, 0xaf, 0x71, 0x22, 0x05, 0xd5, 0xb5, 0x5a, 0xd7, - 0x12, 0x24, 0x79, 0x57, 0x55, 0xd6, 0xaa, 0xb8, 0x98, 0x28, 0x33, 0xbd, 0xdf, 0x7a, 0xf8, 0x9c, - 0x5d, 0xc9, 0x82, 0xbf, 0xc4, 0x89, 0x2d, 0xbb, 0xbf, 0x12, 0x30, 0xa5, 0xcb, 0xdc, 0xec, 0x31, - 0xd1, 0xde, 0xee, 0xfe, 0x24, 0x48, 0x83, 0x38, 0xaf, 0x71, 0x5c, 0x56, 0xb9, 0x84, 0xcf, 0x0b, - 0xe2, 0x60, 0x86, 0xe2, 0x5e, 0xf6, 0xff, 0x04, 0x37, 0x69, 0xdf, 0xbe, 0xe9, 0xb9, 0x98, 0xf8, - 0x95, 0x7a, 0xe6, 0x93, 0xff, 0x17, 0xad, 0x96, 0xab, 0xc2, 0x23, 0xfb, 0x32, 0xd1, 0x2e, 0x6a, - 0x2e, 0xd9, 0x98, 0xf1, 0x5a, 0xd6, 0xa6, 0x84, 0xf8, 0xea, 0x6d, 0xdd, 0xdb, 0x94, 0xda, 0x55, - 0xae, 0x84, 0x77, 0xc7, 0x9d, 0xdb, 0xd5, 0x75, 0xa9, 0xb3, 0x08, 0xc1, 0x19, 0x66, 0xcd, 0xde, - 0x27, 0xc4, 0x84, 0x07, 0x5a, 0x8d, 0x5d, 0x98, 0xcd, 0xd5, 0x71, 0xb2, 0x9c, 0x71, 0x10, 0x00, - 0x00, 0x00, 0x01, 0x41, 0x9a, 0x1f, 0x0f, 0xb0, 0x2a, 0x8d, 0xd0, 0x97, 0x42, 0x9c, 0xa5, 0xb3, - 0x19, 0x4d, 0xaf, 0xc1, 0x41, 0x5a, 0x68, 0x9f, 0xe6, 0xc1, 0xde, 0x41, 0xaf, 0x0b, 0x9b, 0x37, - 0xb9, 0xe7, 0x67, 0x15, 0xa6, 0xa6, 0x8f, 0xf8, 0x23, 0x2e, 0x7d, 0x1e, 0x10, 0x3c, 0x3e, 0xae, - 0x41, 0x9f, 0x44, 0xef, 0xae, 0xbe, 0x09, 0x3a, 0xaa, 0x53, 0xe0, 0x84, 0xe4, 0xf5, 0xa6, 0x41, - 0x6e, 0x89, 0xdf, 0x52, 0xa7, 0xd6, 0xab, 0xae, 0x55, 0xd1, 0x1f, 0xe8, 0xaf, 0x2f, 0x44, 0x2a, - 0x42, 0x3d, 0x1e, 0x67, 0xce, 0x5a, 0xba, 0xba, 0xfb, 0xe8, 0xc7, 0x4f, 0xa9, 0x91, 0x13, 0xe6, - 0x97, 0x0b, 0x84, 0xc6, 0x67, 0xa1, 0x0f, 0x5c, 0x68, 0x99, 0x7f, 0x9b, 0x2d, 0x1f, 0x19, 0x78, - 0xe2, 0x90, 0xc5, 0xc4, 0x2f, 0xfd, 0x31, 0x6d, 0xf5, 0x1d, 0xd1, 0x9d, 0x5c, 0x86, 0x3a, 0xc3, - 0x4b, 0x88, 0x04, 0x03, 0xb3, 0x75, 0x9a, 0x81, 0x35, 0xaf, 0x90, 0xae, 0x06, 0xd0, 0x12, 0x28, - 0xb6, 0x4f, 0x10, 0x18, 0x8c, 0x52, 0x78, 0xd2, 0xff, 0x10, 0x0a, 0x23, 0x97, 0xc1, 0xef, 0x0c, - 0x46, 0x6d, 0xd7, 0x88, 0xc0, 0x03, 0x0f, 0xa6, 0x39, 0xfc, 0x70, 0xe0, 0x7d, 0xe4, 0xfc, 0x56, - 0x18, 0x7c, 0x13, 0x8f, 0xcd, 0x9c, 0xf9, 0x98, 0x7a, 0xbf, 0xd5, 0xeb, 0xa3, 0x39, 0x7c, 0x38, - 0x51, 0xfa, 0xbb, 0x8a, 0xdb, 0x0d, 0x71, 0x3b, 0x8d, 0xff, 0x87, 0x0f, 0x9c, 0xd1, 0xcb, 0xae, - 0x1e, 0x71, 0x68, 0x47, 0x34, 0xaf, 0xe9, 0xfe, 0x16, 0x26, 0x7f, 0xe5, 0xc5, 0xb9, 0xaa, 0x82, - 0xfa, 0xe0, 0x86, 0xca, 0x2d, 0x6e, 0x89, 0xeb, 0xcc, 0x8d, 0xd7, 0xa1, 0xae, 0x30, 0x2c, 0x95, - 0x89, 0xb7, 0xbb, 0x9f, 0x60, 0xf6, 0x15, 0xc8, 0x7e, 0x42, 0xe1, 0xb3, 0x6c, 0x29, 0xff, 0x24, - 0xda, 0x8e, 0xf5, 0x99, 0x78, 0xdf, 0x3a, 0xec, 0x18, 0xb5, 0x8a, 0x1a, 0xd6, 0xca, 0xd0, 0x72, - 0x38, 0xb6, 0xe9, 0x17, 0x6a, 0x88, 0xdb, 0xc0, 0xb9, 0x08, 0xac, 0xfb, 0x6a, 0x78, 0x62, 0x02, - 0x00, 0x98, 0x4d, 0x5d, 0x9a, 0xdb, 0xb6, 0x29, 0xfa, 0xe7, 0x7d, 0xd5, 0x35, 0x94, 0x89, 0x3c, - 0xfc, 0xe2, 0xca, 0x96, 0xeb, 0x31, 0xa7, 0x1a, 0xff, 0x3c, 0xe9, 0xc7, 0x25, 0xac, 0x97, 0xfe, - 0x09, 0x7b, 0xbe, 0xef, 0xe3, 0xeb, 0x87, 0xd7, 0xa2, 0x3a, 0x25, 0x7d, 0x62, 0x9b, 0xad, 0x47, - 0xf5, 0x8a, 0x2f, 0x8a, 0x0a, 0x13, 0xe9, 0x79, 0xa3, 0xc4, 0x85, 0x2e, 0xfe, 0x85, 0x5f, 0x56, - 0x10, 0x47, 0x57, 0xe4, 0x4f, 0x88, 0xa8, 0x5c, 0x90, 0xaa, 0xbb, 0x28, 0x55, 0x0b, 0x77, 0xf8, - 0x92, 0x69, 0x12, 0xdf, 0xb3, 0xf9, 0xb9, 0xf9, 0xfe, 0x5c, 0x42, 0xbf, 0x88, 0x27, 0x1a, 0x4c, - 0xab, 0x48, 0xc2, 0x22, 0x02, 0x9b, 0x51, 0x68, 0x4a, 0xae, 0xd6, 0xa4, 0x63, 0x7e, 0x20, 0x40, - 0x21, 0x9b, 0x07, 0x14, 0xee, 0x17, 0xbf, 0x88, 0x08, 0x70, 0xf7, 0xbf, 0x34, 0x33, 0x64, 0x15, - 0xe2, 0x01, 0x26, 0x2b, 0x4d, 0xcb, 0x71, 0x02, 0x06, 0x55, 0x91, 0x17, 0x92, 0xd6, 0x2e, 0x2a, - 0xd5, 0x6b, 0x12, 0xb3, 0x22, 0xad, 0x61, 0xb7, 0x30, 0xa0, 0x5f, 0x6d, 0xed, 0xb2, 0xf1, 0x0f, - 0x74, 0x09, 0x47, 0x97, 0x63, 0x29, 0xf1, 0xb5, 0xff, 0xbe, 0x60, 0x8a, 0xaf, 0x88, 0xa0, 0x83, - 0xd7, 0x04, 0xc3, 0xc6, 0xff, 0xcd, 0x6f, 0x7f, 0x9a, 0xe5, 0x63, 0xc4, 0xfc, 0x48, 0xf0, 0x83, - 0xad, 0x5f, 0x7b, 0x4a, 0xaa, 0xbc, 0x40, 0x23, 0x1a, 0xb7, 0xf4, 0x15, 0x44, 0x48, 0x64, 0xea, - 0xbe, 0x28, 0xc6, 0xec, 0xeb, 0xaa, 0x6d, 0x2e, 0x22, 0x10, 0x9c, 0xf6, 0xb0, 0x21, 0x62, 0xcb, - 0x6e, 0x2b, 0x6d, 0x6b, 0x71, 0x1f, 0x89, 0xd5, 0x45, 0xea, 0xa4, 0x63, 0xcc, 0x3e, 0xf7, 0x58, - 0x9e, 0x23, 0xf0, 0x42, 0x30, 0x5c, 0x3d, 0x08, 0x28, 0x9f, 0xe8, 0x2b, 0xe0, 0xa0, 0x5d, 0xce, - 0x4a, 0xeb, 0x5b, 0xbc, 0x49, 0x05, 0x29, 0x3d, 0x71, 0x31, 0xda, 0xd6, 0x98, 0x8f, 0xcd, 0x54, - 0xd4, 0x45, 0xc3, 0xc1, 0x20, 0x55, 0xee, 0xf5, 0x86, 0x14, 0x79, 0x8f, 0xff, 0xd3, 0x85, 0x9b, - 0x9d, 0xf4, 0x16, 0xef, 0x8e, 0x16, 0xa7, 0xe0, 0x4c, 0xd3, 0xd6, 0xb6, 0x4b, 0x82, 0x4e, 0x25, - 0x50, 0x1c, 0x14, 0xd3, 0xfc, 0x20, 0x2b, 0x53, 0x51, 0x65, 0x42, 0xb0, 0x82, 0x27, 0x02, 0x64, - 0x3f, 0xc2, 0x63, 0x51, 0x1a, 0x02, 0x70, 0xd6, 0xb0, 0x59, 0x88, 0xf1, 0x00, 0x9c, 0xdb, 0x1a, - 0xb1, 0xb7, 0x6f, 0xb8, 0x81, 0x02, 0x09, 0xbb, 0xb7, 0x3f, 0xe2, 0x04, 0x71, 0x22, 0x17, 0xaf, - 0x85, 0x2f, 0x2b, 0x27, 0x51, 0x77, 0x12, 0xe0, 0x75, 0x12, 0x15, 0x76, 0x1a, 0xa4, 0x24, 0x5b, - 0xf1, 0x31, 0xde, 0x5b, 0xb1, 0xb0, 0x71, 0x3c, 0x66, 0x7f, 0xb1, 0x27, 0x28, 0xb2, 0x4b, 0x2c, - 0x15, 0xf3, 0x0b, 0xe2, 0x7f, 0x84, 0x01, 0x08, 0xcb, 0xcf, 0xe2, 0xe2, 0x44, 0x08, 0x25, 0x1a, - 0xae, 0x4c, 0xf8, 0xcd, 0xdc, 0x65, 0x09, 0x82, 0x63, 0x78, 0x20, 0x0f, 0x5f, 0x2b, 0xde, 0xdf, - 0x85, 0x0b, 0x18, 0xf7, 0x26, 0x80, 0x01, 0x4c, 0x5a, 0xcb, 0x97, 0x73, 0xd3, 0xbc, 0x41, 0x35, - 0x36, 0x4e, 0x24, 0x40, 0xca, 0xab, 0x3a, 0x8b, 0xfb, 0xba, 0x5b, 0xe2, 0x44, 0x14, 0xdb, 0x9f, - 0xf8, 0x22, 0x2a, 0x63, 0x55, 0x20, 0xb7, 0xf8, 0x21, 0x1e, 0xb7, 0x08, 0x1c, 0x76, 0x25, 0xfb, - 0xc4, 0xc4, 0xf4, 0x27, 0x50, 0xe7, 0x46, 0x82, 0x7c, 0x20, 0x11, 0x08, 0x3e, 0x1f, 0x55, 0x3d, - 0x24, 0xed, 0x4c, 0x99, 0xac, 0x77, 0xf1, 0xfc, 0x44, 0x23, 0xb3, 0x9d, 0x4a, 0x91, 0x47, 0x5a, - 0x58, 0x98, 0xa1, 0x25, 0xb2, 0xb1, 0x72, 0x2a, 0xdc, 0xfb, 0x89, 0x10, 0x38, 0xd6, 0xce, 0xce, - 0xb3, 0x28, 0x26, 0x1d, 0x84, 0x3f, 0xe0, 0x86, 0xbb, 0x31, 0x7b, 0xe3, 0x8b, 0xb4, 0xa6, 0xcc, - 0xcc, 0xc4, 0xa2, 0x6f, 0x10, 0x24, 0xda, 0x6f, 0xe2, 0x48, 0x28, 0x9c, 0x69, 0x02, 0xaa, 0x41, - 0x88, 0x82, 0x30, 0xbb, 0xc7, 0x7d, 0x9e, 0xf1, 0x28, 0xa6, 0x6f, 0xa2, 0x74, 0x16, 0x44, 0x47, - 0x85, 0xa5, 0xf1, 0xa5, 0xa5, 0x34, 0xd3, 0x3e, 0x2d, 0x00, 0x02, 0xf0, 0xa1, 0x4d, 0xb0, 0xe2, - 0xce, 0xec, 0x47, 0x67, 0x52, 0x4f, 0xd6, 0xca, 0x46, 0x09, 0xe2, 0x09, 0xad, 0x9e, 0x5c, 0xc0, - 0xb7, 0x6a, 0x7b, 0xc3, 0x41, 0x5d, 0x40, 0xac, 0xa2, 0x40, 0xe5, 0x56, 0x2f, 0xc1, 0xce, 0x65, - 0x9f, 0x88, 0x8c, 0xa4, 0xb8, 0xb9, 0xdc, 0x5c, 0xfb, 0x1c, 0xc6, 0xc0, 0x6f, 0x91, 0x16, 0x31, - 0x23, 0xf3, 0xe7, 0xaa, 0x41, 0xc9, 0x6f, 0x05, 0x72, 0x6b, 0x7e, 0xf9, 0xf5, 0x57, 0xf1, 0x21, - 0x42, 0xb4, 0xe8, 0xfa, 0x9b, 0x30, 0xed, 0x5b, 0x59, 0x09, 0x46, 0x9a, 0xc8, 0xbe, 0x1a, 0x2d, - 0x7e, 0x26, 0x14, 0xd0, 0xc7, 0xb9, 0xad, 0x63, 0x77, 0x62, 0xea, 0x1f, 0xc3, 0xce, 0x33, 0x17, - 0x87, 0xac, 0x95, 0x0c, 0x8b, 0xd9, 0xcf, 0xf8, 0x81, 0x00, 0x9b, 0x97, 0xcd, 0x36, 0x2f, 0xda, - 0x7e, 0x26, 0x2a, 0x4c, 0x06, 0xa8, 0xc1, 0x39, 0x5e, 0x99, 0x5a, 0x25, 0xe2, 0x04, 0x09, 0xca, - 0xca, 0x8e, 0x53, 0x98, 0x2d, 0xe8, 0x59, 0x6f, 0x12, 0x0a, 0x87, 0x73, 0x30, 0xaf, 0x39, 0x85, - 0x14, 0x16, 0xf6, 0xa0, 0x4f, 0xe2, 0x47, 0x91, 0x50, 0x60, 0x3c, 0x1b, 0xba, 0x81, 0x1a, 0xd7, - 0x5a, 0xe1, 0x08, 0x13, 0x4e, 0xf4, 0x41, 0x8e, 0x86, 0x25, 0x7a, 0x07, 0xc7, 0x89, 0x19, 0x87, - 0x43, 0x60, 0xd9, 0x74, 0x7c, 0xca, 0xaf, 0x21, 0x33, 0x06, 0x02, 0x87, 0x66, 0x7d, 0x9e, 0x0e, - 0xbf, 0x0a, 0x13, 0x42, 0x42, 0x19, 0x79, 0x93, 0xc6, 0x81, 0x66, 0xd1, 0xb2, 0x3d, 0x62, 0x74, - 0x21, 0x6b, 0x9b, 0xd0, 0xa0, 0x5e, 0x7d, 0x7e, 0xf8, 0x92, 0x8f, 0xe8, 0x3f, 0xa6, 0xa0, 0x83, - 0xea, 0x27, 0xa3, 0x07, 0x78, 0xfc, 0x17, 0x1e, 0x2f, 0xe7, 0xf7, 0xe2, 0x64, 0xad, 0x78, 0x88, - 0x4c, 0x54, 0xff, 0x3f, 0xf1, 0xe8, 0x2a, 0x02, 0x1f, 0x7b, 0xf0, 0x56, 0xe3, 0x8e, 0xab, 0xb7, - 0x58, 0x25, 0x3a, 0x38, 0x65, 0xe3, 0x74, 0x47, 0xe2, 0x04, 0x02, 0x71, 0x46, 0x72, 0xa4, 0x14, - 0x55, 0xda, 0x41, 0xbf, 0x7c, 0x97, 0xd7, 0xc4, 0x11, 0xd9, 0x35, 0x27, 0x93, 0x04, 0x27, 0x87, - 0x7a, 0x8e, 0x2f, 0x04, 0x22, 0x38, 0xbb, 0xf7, 0x88, 0x42, 0x5f, 0xe2, 0x09, 0x57, 0x8e, 0x8d, - 0x6d, 0x94, 0x26, 0xff, 0x11, 0x36, 0x3e, 0xd3, 0xdc, 0xcd, 0x75, 0xf0, 0x4c, 0x7c, 0xbe, 0xee, - 0xee, 0xf5, 0xc1, 0x09, 0x9d, 0xde, 0xfc, 0x44, 0x28, 0x4c, 0x56, 0xef, 0x7b, 0x19, 0xe1, 0x33, - 0x3c, 0x56, 0xfd, 0x5d, 0x02, 0x74, 0xb0, 0x53, 0x08, 0x7e, 0xc3, 0x94, 0xd3, 0xf8, 0x48, 0x95, - 0xab, 0xb4, 0xff, 0x04, 0x86, 0x51, 0xf1, 0x9b, 0xbf, 0xc2, 0x92, 0xe3, 0x88, 0x60, 0x5a, 0x9e, - 0x17, 0xb2, 0x94, 0xe5, 0x20, 0x7d, 0x91, 0x96, 0xd4, 0xe4, 0xda, 0x7e, 0xf8, 0x26, 0x16, 0xdd, - 0x6a, 0xea, 0x3d, 0x63, 0x77, 0xf8, 0x89, 0x7b, 0xde, 0xef, 0xe2, 0x4c, 0x77, 0x77, 0x7f, 0x05, - 0x37, 0x77, 0x77, 0xde, 0xef, 0x7e, 0x10, 0xa2, 0x77, 0x89, 0x65, 0x97, 0xfe, 0x08, 0x86, 0x26, - 0x2b, 0xdf, 0x88, 0x82, 0xb2, 0x3c, 0x56, 0xee, 0x5e, 0xf9, 0xfd, 0xdf, 0xbe, 0x82, 0xbd, 0x43, - 0xd0, 0x9f, 0x53, 0xfe, 0x09, 0xa2, 0x28, 0x28, 0xff, 0x04, 0xdb, 0xdd, 0x5d, 0xef, 0x5c, 0x16, - 0x4f, 0x56, 0xad, 0x8c, 0xfb, 0xee, 0xb5, 0xef, 0x82, 0x21, 0x0f, 0x7f, 0x7c, 0x49, 0x43, 0xca, - 0x65, 0x09, 0xc8, 0x64, 0x75, 0x21, 0x8a, 0x16, 0xa6, 0x23, 0xf2, 0x8b, 0x12, 0x91, 0x60, 0xd0, - 0x3f, 0x94, 0x9a, 0x49, 0x78, 0x48, 0xe8, 0x1a, 0xbc, 0xe9, 0x58, 0xfc, 0x48, 0x92, 0xdd, 0xef, - 0xfc, 0x4f, 0x89, 0x12, 0x41, 0x09, 0x66, 0xfe, 0x0a, 0x7b, 0xb1, 0x99, 0x42, 0x53, 0x08, 0xe5, - 0xdb, 0xb9, 0xd3, 0xec, 0x43, 0x29, 0x98, 0x26, 0xe6, 0x17, 0x69, 0xa3, 0x66, 0x22, 0x53, 0x3e, - 0xae, 0x20, 0x48, 0x42, 0xf7, 0xd4, 0x94, 0x87, 0x7b, 0xf1, 0x1f, 0x14, 0x76, 0xa9, 0x4f, 0x2f, - 0xe2, 0x89, 0x27, 0x5e, 0xc7, 0x29, 0x07, 0xc5, 0x98, 0xed, 0x45, 0x8c, 0x0d, 0x26, 0x7a, 0x1d, - 0xfc, 0x13, 0x1e, 0x84, 0x86, 0x4a, 0xa8, 0xa7, 0x26, 0xfb, 0xd7, 0x12, 0x75, 0xda, 0xe5, 0xeb, - 0x10, 0x09, 0xae, 0xf7, 0xbd, 0xfb, 0x88, 0x08, 0x33, 0xbb, 0xdf, 0xc2, 0x17, 0x74, 0xdd, 0x2d, - 0x37, 0xbf, 0x89, 0xe2, 0x35, 0xc2, 0x61, 0x25, 0x54, 0x75, 0xaf, 0xc1, 0x77, 0x36, 0x75, 0x6b, - 0x5f, 0x38, 0x96, 0x3b, 0x62, 0xaf, 0xc1, 0x17, 0x36, 0xaa, 0x2f, 0x88, 0xf1, 0x10, 0x43, 0x55, - 0x5f, 0x7c, 0x5c, 0xbc, 0x56, 0xee, 0x25, 0xeb, 0x5f, 0xd5, 0xeb, 0x82, 0x73, 0x30, 0xe8, 0x8b, - 0x9c, 0x17, 0x6a, 0x85, 0xff, 0xf0, 0xec, 0x37, 0x20, 0xdb, 0xcd, 0x64, 0xbf, 0x68, 0x55, 0x93, - 0x4f, 0x77, 0x75, 0xfb, 0x47, 0xcf, 0xc1, 0x1e, 0xf7, 0xff, 0xc1, 0x15, 0x6b, 0xee, 0x26, 0x08, - 0x46, 0x8b, 0xcd, 0x7b, 0xea, 0xf5, 0xc1, 0x27, 0x77, 0xff, 0x08, 0x06, 0x04, 0x5e, 0xf7, 0x77, - 0x72, 0xf1, 0x58, 0xc8, 0x90, 0x49, 0xca, 0x0f, 0xbc, 0xa6, 0xbd, 0x8c, 0xb7, 0xe0, 0x86, 0x23, - 0xf0, 0x5a, 0x55, 0xa5, 0x26, 0xf1, 0x43, 0xc7, 0xaf, 0x7c, 0x11, 0x5d, 0xf7, 0xe2, 0x60, 0xa6, - 0xb2, 0x40, 0x61, 0x59, 0xee, 0xb2, 0x2f, 0x7f, 0x8b, 0x12, 0x9b, 0xa7, 0x6c, 0xd8, 0x66, 0x35, - 0xc7, 0x8a, 0x76, 0x54, 0xcc, 0xc1, 0x7a, 0xeb, 0x9c, 0xd1, 0xfc, 0x16, 0x1e, 0x8d, 0xb2, 0xe3, - 0xb8, 0xad, 0xe5, 0x63, 0x7f, 0x82, 0x72, 0x4b, 0x26, 0xdd, 0xd6, 0x77, 0xfa, 0xff, 0xe1, 0x11, - 0x6e, 0xf7, 0x77, 0xdd, 0x9d, 0xd7, 0x05, 0xc4, 0xe7, 0x93, 0xdd, 0xde, 0xa2, 0x3e, 0x20, 0x13, - 0x09, 0xdd, 0xdd, 0xef, 0xe7, 0xc9, 0x55, 0x5a, 0xc4, 0xdf, 0x41, 0x07, 0x7c, 0x5d, 0x74, 0xac, - 0x4a, 0xd7, 0x9b, 0xc7, 0x94, 0x3d, 0xc1, 0x59, 0x79, 0xeb, 0x49, 0x32, 0xe3, 0xef, 0xaf, 0xbd, - 0xee, 0xf8, 0x52, 0x4e, 0x27, 0x41, 0x72, 0x4d, 0x13, 0xe5, 0xc1, 0x72, 0xf5, 0x55, 0xd5, 0x5f, - 0xea, 0xfe, 0x20, 0x15, 0x55, 0x57, 0x7b, 0xda, 0x51, 0x07, 0x25, 0xf1, 0xc4, 0x17, 0x8b, 0xa6, - 0xee, 0x2b, 0x75, 0x7d, 0xfc, 0x17, 0x15, 0xa5, 0xb7, 0x7b, 0xf7, 0xd5, 0xfe, 0x53, 0x9f, 0x3b, - 0x89, 0x12, 0x2a, 0xe7, 0x50, 0xf6, 0xee, 0xef, 0xe3, 0x37, 0xbb, 0x95, 0x47, 0x6a, 0xe8, 0xee, - 0xf8, 0x88, 0x28, 0xa1, 0x19, 0x8d, 0xed, 0x2f, 0x7c, 0x85, 0x37, 0xea, 0x23, 0x5c, 0xc4, 0x7b, - 0xfc, 0x5d, 0xdd, 0xdd, 0xef, 0x5d, 0x88, 0xbb, 0xb8, 0x7a, 0x22, 0x2e, 0xdd, 0xba, 0xe2, 0x4a, - 0x9f, 0x3d, 0xee, 0xa6, 0xa7, 0xfe, 0x41, 0x28, 0x8d, 0x24, 0xbf, 0x05, 0x93, 0x74, 0x56, 0xd2, - 0x5d, 0x75, 0x7f, 0x84, 0x44, 0x2a, 0xd7, 0x55, 0x37, 0x93, 0xf4, 0x2f, 0xc4, 0x41, 0x31, 0x45, - 0x71, 0x0e, 0x6d, 0xb3, 0xfb, 0x7f, 0x11, 0xe2, 0x41, 0x64, 0x53, 0x3b, 0xc9, 0x9b, 0xc2, 0xca, - 0x44, 0xd6, 0xa9, 0x57, 0xab, 0xbc, 0x41, 0xae, 0xf7, 0xf0, 0x4c, 0x7b, 0x35, 0x8a, 0xe5, 0x31, - 0x7f, 0xfc, 0x25, 0x5d, 0x37, 0x7a, 0x3f, 0x08, 0x77, 0x77, 0x98, 0x87, 0x22, 0x8f, 0x89, 0x57, - 0xe1, 0x00, 0x80, 0x26, 0x24, 0xaa, 0x61, 0xba, 0x63, 0x43, 0xf5, 0xc7, 0x5d, 0x2a, 0x2d, 0xee, - 0x20, 0x22, 0x5f, 0x37, 0xe2, 0x4a, 0x5a, 0xd7, 0x11, 0x04, 0x02, 0x58, 0xea, 0xee, 0x91, 0xf3, - 0x8a, 0xd8, 0x0e, 0xff, 0x45, 0x44, 0x6f, 0xe8, 0xcf, 0xe2, 0x7e, 0x11, 0x20, 0xad, 0xee, 0xfb, - 0x95, 0x8b, 0xea, 0x22, 0x20, 0xee, 0xee, 0xee, 0x52, 0x0f, 0xe2, 0x27, 0xa1, 0xe8, 0xcd, 0xf4, - 0x6e, 0xc5, 0x5f, 0x29, 0x31, 0xd6, 0x57, 0xe6, 0x21, 0xa8, 0xcd, 0xaf, 0x90, 0x8d, 0xa0, 0x4c, - 0x02, 0xbe, 0x12, 0xed, 0xb5, 0x42, 0x3b, 0x69, 0x06, 0xf8, 0x2c, 0xab, 0x06, 0x16, 0x99, 0xbc, - 0xdd, 0x3d, 0xca, 0x52, 0x37, 0xf8, 0x29, 0x29, 0x60, 0xed, 0x62, 0xdd, 0xde, 0x19, 0x61, 0x19, - 0x22, 0x85, 0xfe, 0xa2, 0x04, 0x9a, 0x87, 0xaf, 0x10, 0x09, 0xcc, 0xec, 0x57, 0xbb, 0x4e, 0xcf, - 0x12, 0x0a, 0x0b, 0x3f, 0x48, 0xf7, 0x9b, 0xd9, 0x2b, 0xfc, 0x9b, 0xb5, 0xc4, 0x42, 0x73, 0xbf, - 0xcd, 0xf6, 0xb1, 0x12, 0x66, 0xe6, 0xcd, 0x44, 0x09, 0x29, 0xdb, 0x5a, 0xfa, 0xa3, 0xbf, 0x04, - 0x7b, 0x07, 0x2e, 0xd7, 0x11, 0x44, 0xfb, 0x84, 0x61, 0x32, 0xd5, 0xd7, 0x55, 0xf1, 0x1d, 0xb2, - 0x75, 0x40, 0xf5, 0x51, 0x30, 0x42, 0x7b, 0xdd, 0x3a, 0xc4, 0xc1, 0x41, 0x1c, 0x56, 0xef, 0x5a, - 0x6f, 0xc4, 0x09, 0x04, 0x23, 0x37, 0x7f, 0xfc, 0x78, 0x99, 0x98, 0xdd, 0xef, 0x7b, 0xf8, 0x26, - 0xe9, 0xba, 0x4e, 0xe9, 0x3d, 0x44, 0x41, 0x09, 0x5d, 0xdd, 0xfb, 0x88, 0x82, 0x9d, 0xbb, 0xba, - 0x8c, 0x80, 0x0d, 0xdd, 0xdd, 0xdf, 0x88, 0x82, 0x1b, 0x08, 0x24, 0xca, 0x5d, 0x0e, 0xf0, 0xe8, - 0xa3, 0x3d, 0xfe, 0x3f, 0x8b, 0x76, 0xc2, 0xd0, 0xa8, 0x9b, 0x32, 0x93, 0x03, 0x17, 0x0a, 0xa8, - 0x27, 0xfc, 0x15, 0x14, 0xb7, 0xbb, 0xc7, 0x65, 0x5d, 0xa5, 0x77, 0xf8, 0x24, 0xa7, 0xa7, 0xdf, - 0x04, 0xb3, 0x53, 0xb7, 0x13, 0xa7, 0xbc, 0x40, 0x27, 0xa4, 0x18, 0x1f, 0x34, 0x80, 0x55, 0x24, - 0xae, 0x01, 0x53, 0x23, 0xfc, 0x14, 0x9a, 0xeb, 0xd7, 0x93, 0xe2, 0x96, 0xfd, 0xc4, 0x89, 0x04, - 0x45, 0x72, 0xa8, 0x7b, 0x7e, 0x24, 0x4f, 0x11, 0x65, 0x9d, 0xfe, 0x26, 0x0a, 0xae, 0x9f, 0x49, - 0xdc, 0xb0, 0xbb, 0xf7, 0xc6, 0x14, 0xff, 0x56, 0x6c, 0xde, 0xe7, 0xeb, 0x4f, 0x9b, 0x9b, 0xee, - 0xef, 0xe2, 0xcc, 0xa4, 0x63, 0x66, 0xd3, 0xfc, 0x20, 0x52, 0x7f, 0x46, 0xb9, 0x81, 0x24, 0x4a, - 0xf7, 0xe2, 0x2d, 0xe9, 0x27, 0x19, 0x5b, 0xc4, 0x7e, 0x2e, 0xb5, 0x57, 0xaf, 0x13, 0x04, 0x77, - 0x8a, 0xdc, 0xb5, 0x62, 0x41, 0x51, 0x9e, 0xee, 0x9d, 0x71, 0xf4, 0xcf, 0x7e, 0x24, 0x40, 0x4e, - 0xaa, 0xab, 0x7a, 0x7e, 0x30, 0xe7, 0xc6, 0x7a, 0x6f, 0x65, 0x71, 0x2f, 0x5b, 0x79, 0x86, 0xef, - 0xa4, 0x07, 0x88, 0x84, 0x26, 0x61, 0xb1, 0x49, 0xfc, 0xd1, 0xb6, 0xbd, 0x7e, 0x5b, 0xa6, 0xc8, - 0xb4, 0xfc, 0x7d, 0x19, 0x68, 0x62, 0x5b, 0x1b, 0xa2, 0x40, 0xcb, 0x4f, 0xf1, 0xfd, 0xd9, 0xcb, - 0x87, 0x20, 0xda, 0x34, 0xed, 0x78, 0x26, 0xf3, 0xd3, 0xb3, 0x7f, 0x7c, 0x56, 0xb5, 0x93, 0xfe, - 0xeb, 0x5f, 0x84, 0xc5, 0x28, 0xf4, 0x23, 0xa3, 0x36, 0x57, 0xc1, 0x69, 0x52, 0x6e, 0x94, 0xdc, - 0x90, 0x8f, 0xbe, 0x1c, 0x3b, 0x4e, 0x85, 0x5f, 0x4d, 0x35, 0x8c, 0xea, 0xf1, 0x91, 0x10, 0x58, - 0x2a, 0x65, 0x2e, 0xb5, 0x36, 0xe9, 0x9d, 0x44, 0x55, 0x4a, 0x0f, 0x0f, 0x0c, 0x01, 0x9a, 0xe2, - 0x17, 0x5f, 0x0a, 0x1d, 0x64, 0x21, 0x51, 0xa5, 0xea, 0x63, 0xa9, 0xd0, 0x37, 0x5f, 0xf8, 0x37, - 0xb0, 0xb9, 0xf0, 0x8c, 0x4c, 0xff, 0x5e, 0xa8, 0x98, 0x22, 0xde, 0xef, 0xf0, 0x5b, 0x49, 0x9a, - 0xb1, 0xa5, 0x77, 0x7f, 0x12, 0x14, 0x10, 0x5b, 0x76, 0xe7, 0xfb, 0x68, 0x6f, 0xe5, 0xf7, 0xf8, - 0x2c, 0x17, 0xbb, 0xbd, 0x36, 0x4e, 0xf7, 0x7f, 0x10, 0x2a, 0x86, 0x55, 0xcb, 0x29, 0x08, 0xbf, - 0x74, 0x2f, 0xeb, 0xfe, 0x23, 0xc4, 0x41, 0x0e, 0xc6, 0xc6, 0xd3, 0xfc, 0x17, 0x56, 0xa6, 0xfb, - 0x33, 0x63, 0xf8, 0x91, 0x15, 0xd3, 0x1e, 0x13, 0xbc, 0x7c, 0x21, 0x15, 0x19, 0x4c, 0x41, 0xdb, - 0x50, 0x3b, 0xc9, 0x85, 0xfc, 0x26, 0x5b, 0x8d, 0xa4, 0x5d, 0x6b, 0xc2, 0x00, 0xb3, 0x77, 0xd4, - 0x99, 0xd6, 0xa5, 0xbe, 0x08, 0x48, 0xee, 0x5a, 0x7d, 0xf1, 0x5a, 0xd6, 0x95, 0xae, 0x25, 0x11, - 0xf8, 0x89, 0x8a, 0x5a, 0x7f, 0x19, 0x7b, 0x2a, 0x8b, 0x89, 0xee, 0x89, 0x22, 0x86, 0x36, 0xd6, - 0xdf, 0x84, 0x67, 0x79, 0xff, 0x76, 0x3a, 0x6c, 0x77, 0xf0, 0x56, 0x55, 0xa9, 0x24, 0x85, 0x6e, - 0xe9, 0x5d, 0xff, 0xe2, 0x41, 0x19, 0x69, 0x4d, 0xaf, 0xf4, 0x67, 0xe2, 0x68, 0xaf, 0xe2, 0x7e, - 0x89, 0x95, 0x70, 0x5e, 0x21, 0x8e, 0x3e, 0x9b, 0x79, 0x58, 0x67, 0x05, 0x94, 0x76, 0x90, 0x4a, - 0xf6, 0xc2, 0xfc, 0xd8, 0x8a, 0x42, 0x24, 0x32, 0x67, 0x1f, 0xc4, 0x91, 0x33, 0x9a, 0x65, 0xec, - 0x7d, 0x4f, 0xe1, 0x41, 0x22, 0x4f, 0xcc, 0x62, 0xb5, 0x77, 0x41, 0xc9, 0xfa, 0xb5, 0xdf, 0x25, - 0xe7, 0x10, 0x1f, 0x85, 0x0f, 0x77, 0xab, 0x56, 0xe4, 0x4e, 0xef, 0x77, 0xef, 0xa2, 0x3f, 0x12, - 0x24, 0x25, 0x7b, 0xcb, 0x7a, 0x7c, 0x48, 0x25, 0x32, 0xea, 0xd5, 0x6f, 0xe2, 0x41, 0x15, 0xdf, - 0x7f, 0x12, 0x43, 0xf3, 0xff, 0x05, 0x27, 0x7e, 0xb5, 0x55, 0x17, 0x52, 0x67, 0xc7, 0x7c, 0x48, - 0x4e, 0x66, 0x1f, 0xb6, 0xed, 0xa0, 0x2f, 0x66, 0x7d, 0x9e, 0x20, 0x42, 0xd7, 0xc4, 0xdd, 0xde, - 0xf1, 0x5b, 0xf8, 0x28, 0x2b, 0x64, 0x52, 0xdc, 0x6f, 0x4f, 0x5f, 0x04, 0xd7, 0x15, 0xbd, 0xe4, - 0x66, 0xff, 0x31, 0x35, 0x5f, 0x37, 0x33, 0x0f, 0xe0, 0x88, 0xcf, 0x7f, 0xfc, 0x48, 0x48, 0x59, - 0xf5, 0x63, 0x9e, 0xa3, 0x77, 0xf0, 0x44, 0x43, 0xc1, 0x8a, 0x75, 0x0f, 0xf7, 0x61, 0x1e, 0xae, - 0x26, 0x0a, 0x8a, 0x86, 0x99, 0x7b, 0xeb, 0x60, 0x63, 0xfe, 0x73, 0x16, 0x4e, 0xd2, 0x5b, 0xb7, - 0xc1, 0x5c, 0xd9, 0xe9, 0x36, 0x14, 0xe8, 0x33, 0x68, 0xd9, 0x61, 0x6e, 0x5f, 0xdc, 0x4d, 0xd9, - 0xee, 0x73, 0x1c, 0x21, 0x11, 0x7d, 0x8d, 0x75, 0xc2, 0x01, 0x0f, 0x90, 0xba, 0x6f, 0xe1, 0x22, - 0x64, 0xcd, 0x6b, 0xc4, 0xa3, 0x27, 0x41, 0x88, 0x88, 0x81, 0x59, 0x75, 0x4a, 0x63, 0xac, 0x4b, - 0x73, 0xc4, 0x04, 0x4b, 0x55, 0x13, 0xc7, 0x2b, 0x17, 0x8a, 0x55, 0x78, 0x90, 0x52, 0x7d, 0xd5, - 0xe9, 0x5a, 0x7d, 0x4b, 0x7c, 0x13, 0xdb, 0x6a, 0x4a, 0xb7, 0xd7, 0xbc, 0x48, 0x25, 0x2c, 0xf9, - 0xef, 0x7e, 0xf8, 0x52, 0x86, 0xad, 0xdd, 0x1b, 0xee, 0xf6, 0x93, 0xfb, 0xe5, 0x22, 0xd7, 0xc4, - 0x10, 0xaa, 0x6e, 0x97, 0xc4, 0x82, 0x21, 0x03, 0x3a, 0x7d, 0xfc, 0x48, 0x25, 0x12, 0xe7, 0x10, - 0x2e, 0xff, 0xcb, 0x8c, 0x71, 0x11, 0xfb, 0xde, 0xf7, 0xba, 0x63, 0x2d, 0x1e, 0x33, 0x4d, 0xce, - 0xbd, 0xcf, 0xf8, 0xda, 0x64, 0x91, 0x68, 0xa3, 0x7f, 0x16, 0xd7, 0xd2, 0x3c, 0x4d, 0xe5, 0xf2, - 0x06, 0x7c, 0x15, 0x56, 0xb1, 0x5b, 0x4e, 0x95, 0xdd, 0xeb, 0xe0, 0x96, 0xef, 0x69, 0xde, 0xdf, - 0x7c, 0x16, 0xe9, 0x9b, 0xc7, 0x69, 0x7d, 0xc4, 0x89, 0x66, 0x6c, 0x2f, 0xff, 0x31, 0x79, 0xd8, - 0xc4, 0xc5, 0x93, 0x6d, 0x4c, 0xc6, 0x0b, 0xe3, 0xca, 0xef, 0xaa, 0x7b, 0xbf, 0xea, 0xff, 0x76, - 0xb4, 0xbc, 0x26, 0x58, 0xae, 0xf7, 0x77, 0xc4, 0x89, 0x05, 0x92, 0x63, 0x7f, 0xba, 0x6e, 0x2b, - 0xdf, 0xc4, 0x8c, 0xe9, 0x5d, 0x93, 0x0e, 0x58, 0x24, 0x7c, 0x6f, 0x7c, 0x67, 0x4b, 0xf0, 0x9c, - 0x56, 0xf0, 0x52, 0xc4, 0xb4, 0xf1, 0x30, 0x57, 0x5b, 0x33, 0x08, 0x60, 0x53, 0x4c, 0x94, 0xcf, - 0xbe, 0x0b, 0x2a, 0xb1, 0x1e, 0x4c, 0x6b, 0xe4, 0xfd, 0xf5, 0xef, 0x82, 0xcc, 0xbe, 0xeb, 0x5b, - 0xdf, 0xde, 0x25, 0x5f, 0xe0, 0x9c, 0x51, 0x9e, 0xfa, 0xea, 0xfe, 0x24, 0x35, 0x7b, 0xb6, 0x60, - 0x47, 0xf4, 0xff, 0x85, 0x71, 0x03, 0x48, 0x99, 0xfb, 0xfc, 0x61, 0x0e, 0x5c, 0xdd, 0xfa, 0x13, - 0xb0, 0x82, 0x3f, 0x5a, 0xcb, 0x4f, 0xe2, 0x41, 0x49, 0x5f, 0xbd, 0xee, 0xed, 0x30, 0xf0, 0x7c, - 0x65, 0xef, 0x40, 0xea, 0x4e, 0x21, 0xee, 0xef, 0x57, 0x5e, 0x24, 0x15, 0x1d, 0x35, 0xd4, 0x92, - 0xad, 0x1a, 0x0c, 0x7e, 0x0f, 0xbf, 0xdf, 0x08, 0x13, 0x54, 0xde, 0xa7, 0xaa, 0x68, 0xd7, 0xe0, - 0xa8, 0xf7, 0x8e, 0xa6, 0x04, 0xbf, 0x67, 0x60, 0xec, 0x74, 0x1f, 0x7c, 0x4d, 0xd0, 0x15, 0x96, - 0x8e, 0xa5, 0x09, 0xed, 0x62, 0x01, 0x35, 0xf3, 0x7a, 0xad, 0xde, 0x20, 0x16, 0x56, 0xaa, 0x4c, - 0xf5, 0x7f, 0x70, 0x84, 0x22, 0x22, 0x93, 0xd4, 0x9d, 0x67, 0xa6, 0xde, 0x26, 0x0a, 0x3a, 0xae, - 0xab, 0xdc, 0x44, 0x11, 0x77, 0xbd, 0x78, 0x90, 0x89, 0xe7, 0xf6, 0xe8, 0x91, 0x88, 0x58, 0x9f, - 0xcc, 0xc7, 0x12, 0x0a, 0xec, 0x6c, 0x6f, 0x7b, 0x1a, 0x8d, 0x8f, 0xbb, 0x9e, 0x11, 0x04, 0xd4, - 0x9f, 0x77, 0xfb, 0x89, 0x92, 0x8d, 0xff, 0x0a, 0x5e, 0xfb, 0xdd, 0x3a, 0x7b, 0xbb, 0xbf, 0x13, - 0xf8, 0x4e, 0xd2, 0xf6, 0x39, 0x23, 0xe3, 0x0a, 0x3b, 0x53, 0x72, 0xed, 0xcc, 0x91, 0xda, 0x90, - 0xb9, 0x0d, 0xaa, 0x16, 0xfd, 0xd4, 0x9a, 0x23, 0xa2, 0xf0, 0xa5, 0xc5, 0x7b, 0xa2, 0x15, 0xf6, - 0x93, 0x9e, 0x24, 0x1b, 0xd1, 0x95, 0x07, 0x7c, 0x11, 0xdd, 0xf2, 0xb5, 0xfe, 0x08, 0xe9, 0x0e, - 0x32, 0xef, 0xf0, 0x55, 0x4d, 0xf4, 0x06, 0xca, 0xfb, 0xbb, 0xf1, 0x02, 0x01, 0x15, 0x78, 0x20, - 0x57, 0x68, 0xbb, 0xe2, 0xf5, 0x63, 0xe6, 0x63, 0xe6, 0xb1, 0xe4, 0xf8, 0x9f, 0x11, 0x09, 0x4d, - 0x4a, 0xa7, 0xcc, 0xc6, 0x24, 0x48, 0x24, 0xae, 0x62, 0x0f, 0x7c, 0x12, 0x6b, 0x5e, 0xf1, 0x03, - 0xf7, 0xb4, 0xa0, 0xd7, 0x10, 0x35, 0x79, 0xd3, 0x76, 0x97, 0xb1, 0xf8, 0xc1, 0x8e, 0xe4, 0x67, - 0x99, 0x74, 0xc6, 0xea, 0x78, 0x3b, 0x6d, 0x3e, 0x3e, 0x98, 0xa2, 0xf0, 0x91, 0xef, 0x2f, 0x3d, - 0x3c, 0x27, 0xc1, 0x3d, 0x56, 0xb0, 0x6a, 0x94, 0x6b, 0x04, 0x40, 0x43, 0x0d, 0x4d, 0x93, 0xbc, - 0x44, 0x14, 0x98, 0xd2, 0x00, 0xcd, 0xdc, 0xbb, 0x8a, 0x7c, 0x7c, 0xf7, 0x80, 0xf9, 0xff, 0x14, - 0x58, 0x4b, 0xd7, 0xc3, 0xee, 0xb5, 0xf8, 0x2e, 0x2c, 0x99, 0xe2, 0xf7, 0xf8, 0x24, 0x2d, 0x56, - 0xff, 0x1e, 0x67, 0xde, 0x65, 0x11, 0x35, 0x0d, 0x97, 0xb6, 0xbe, 0x10, 0xd1, 0x0d, 0x44, 0x78, - 0xda, 0x04, 0x54, 0x57, 0x2b, 0x1e, 0x20, 0x15, 0x0d, 0x2f, 0xb1, 0x47, 0x54, 0x5a, 0xa9, 0x0c, - 0x67, 0xff, 0x09, 0x9b, 0x55, 0x27, 0x55, 0x13, 0xfe, 0x0a, 0x2b, 0x92, 0x75, 0x59, 0x57, 0xf8, - 0x28, 0x8b, 0xaa, 0xad, 0x6a, 0xff, 0x05, 0xba, 0xd6, 0xa4, 0xff, 0x9f, 0x05, 0x55, 0x17, 0xaa, - 0xae, 0x26, 0xc0, 0xe2, 0x64, 0x98, 0xce, 0xff, 0x04, 0x99, 0xd8, 0x6f, 0x7f, 0x90, 0x8b, 0x32, - 0x67, 0x12, 0x11, 0x2f, 0x3f, 0x77, 0xba, 0x76, 0xfc, 0x48, 0x80, 0x8d, 0xdc, 0xea, 0x37, 0x77, - 0x7b, 0xb9, 0xf3, 0x89, 0x04, 0xa4, 0x77, 0x7d, 0xe9, 0xff, 0x89, 0xbb, 0xc2, 0xaf, 0x7e, 0x0b, - 0x04, 0xa4, 0xe8, 0x7e, 0x7c, 0x4f, 0x46, 0xfd, 0xc4, 0x7e, 0x3a, 0xef, 0x23, 0x49, 0xec, 0x50, - 0xe8, 0x36, 0x87, 0x6b, 0xef, 0xe3, 0x2f, 0x77, 0x3a, 0x5a, 0x07, 0xb6, 0xaf, 0xe5, 0xed, 0xe2, - 0x44, 0xfc, 0xda, 0x6b, 0xf0, 0x47, 0x9e, 0x3b, 0xf1, 0x30, 0x43, 0xe5, 0xef, 0xe2, 0x01, 0x6d, - 0x55, 0x55, 0xa6, 0x39, 0xd4, 0x3f, 0xc2, 0x95, 0x7d, 0x66, 0xa4, 0xc4, 0x3e, 0xb1, 0xe4, 0x0c, - 0x7c, 0x23, 0x55, 0x55, 0x53, 0x31, 0x33, 0xcd, 0x86, 0x51, 0x89, 0x90, 0x85, 0xa7, 0xff, 0x82, - 0xe2, 0xbb, 0xa3, 0x44, 0x55, 0x32, 0xa8, 0xbf, 0x89, 0x04, 0x3d, 0x25, 0x7f, 0x82, 0x21, 0x0b, - 0x28, 0x8e, 0x41, 0xa6, 0x5f, 0xe0, 0x94, 0x8d, 0x63, 0xd5, 0xb5, 0x9e, 0xfb, 0x12, 0x9d, 0x67, - 0x80, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x20, 0x10, 0x30, 0x12, 0xa7, 0xc4, 0x0b, 0xa2, 0x1a, - 0x0f, 0x2a, 0xa5, 0xeb, 0xd0, 0x40, 0x25, 0xc3, 0x1c, 0x24, 0x62, 0x5d, 0xf1, 0xd4, 0xc6, 0x89, - 0x97, 0x83, 0x7e, 0x0b, 0xbf, 0xe7, 0xa2, 0x0d, 0xf1, 0xd2, 0x65, 0xac, 0xac, 0x26, 0x54, 0x5d, - 0xf2, 0xe3, 0xc8, 0x63, 0xc8, 0x7f, 0x94, 0x63, 0xde, 0x11, 0xe2, 0xc7, 0xb7, 0x4f, 0x1f, 0x37, - 0x07, 0x19, 0xde, 0x60, 0xa3, 0xe1, 0x88, 0x2d, 0xed, 0x55, 0x46, 0x93, 0x79, 0xa9, 0xf6, 0x8f, - 0xf4, 0xc7, 0x1e, 0xb7, 0x5c, 0xed, 0x12, 0x14, 0xaa, 0x83, 0x41, 0xb8, 0x82, 0x5b, 0xe5, 0x30, - 0x03, 0xdd, 0x71, 0xf0, 0x42, 0x85, 0x30, 0xcd, 0x8a, 0x39, 0x87, 0xd4, 0xc0, 0x11, 0xb7, 0x56, - 0xe7, 0x2f, 0xf7, 0x3f, 0x0c, 0x47, 0x5d, 0x01, 0xd7, 0x44, 0xbb, 0x61, 0xbf, 0x56, 0x34, 0x10, - 0x11, 0x90, 0xfb, 0xb9, 0x99, 0x3b, 0x1c, 0xbd, 0x9a, 0x53, 0x47, 0xe4, 0x9b, 0x84, 0x47, 0xf5, - 0x87, 0xe6, 0x8d, 0xa0, 0xf8, 0x5b, 0x87, 0x04, 0x46, 0x09, 0xd8, 0x78, 0x49, 0xa0, 0xcc, 0xa6, - 0xd1, 0x7d, 0xdf, 0xe0, 0xa6, 0x62, 0xb3, 0x1b, 0x86, 0x29, 0xad, 0x8b, 0xdf, 0x4e, 0x87, 0x82, - 0x3f, 0x0b, 0x46, 0x29, 0xb1, 0x96, 0xd8, 0x67, 0x46, 0x77, 0x40, 0xca, 0x5b, 0xa6, 0x97, 0xf8, - 0x83, 0xe1, 0xc4, 0x5f, 0x6d, 0x7f, 0x8c, 0xb5, 0x7c, 0x34, 0x30, 0xaa, 0xc7, 0xc4, 0x1d, 0xb7, - 0x84, 0xf0, 0x1d, 0x36, 0x5b, 0x0f, 0xf0, 0x4d, 0xa4, 0xd4, 0x02, 0x76, 0x9a, 0x94, 0x8c, 0xe1, - 0x73, 0x8f, 0x32, 0x71, 0xe9, 0x6b, 0xa5, 0xf8, 0xbe, 0x7a, 0x55, 0xf8, 0xe4, 0xb5, 0x92, 0xdf, - 0x0b, 0xd3, 0xad, 0x45, 0x2a, 0x1b, 0x5c, 0xe4, 0x57, 0xb0, 0x55, 0x6f, 0x92, 0x21, 0x36, 0xbf, - 0xff, 0x0b, 0xa6, 0x31, 0xb3, 0xcc, 0x85, 0x74, 0x73, 0xc2, 0x77, 0x7a, 0xd2, 0x0b, 0x2d, 0x73, - 0xc6, 0xcb, 0x4b, 0x3a, 0xcc, 0x17, 0x5b, 0x8f, 0x78, 0x97, 0x49, 0x71, 0x72, 0x96, 0x4f, 0xd7, - 0x64, 0xad, 0xf7, 0xbb, 0xef, 0x1a, 0xc4, 0xee, 0xc1, 0x03, 0x44, 0xb1, 0xc5, 0x4f, 0x0f, 0xff, - 0x40, 0x66, 0xcf, 0xa9, 0xc3, 0x23, 0xfa, 0x27, 0x3e, 0xb9, 0xc2, 0xf1, 0xba, 0x9e, 0x6c, 0x97, - 0xb4, 0xe7, 0x39, 0x69, 0xf5, 0xfd, 0x5a, 0x69, 0x9c, 0x31, 0x8e, 0xfe, 0x24, 0x92, 0x7c, 0x37, - 0x44, 0xd5, 0xa4, 0x6a, 0xdf, 0x4f, 0xf0, 0x1b, 0xde, 0x48, 0xcf, 0x23, 0x26, 0x08, 0x0d, 0x26, - 0x37, 0x12, 0xb9, 0xec, 0xa6, 0xca, 0x57, 0x33, 0x1f, 0xbe, 0x12, 0xe9, 0xb9, 0xe4, 0x5f, 0xc1, - 0x7e, 0x18, 0x51, 0xf8, 0x0d, 0x6b, 0x0e, 0xa4, 0x81, 0xff, 0x5d, 0xc2, 0x44, 0x2d, 0x22, 0x7f, - 0x75, 0x62, 0x0e, 0xeb, 0x32, 0xe6, 0xd8, 0x85, 0x2b, 0x66, 0xac, 0x6d, 0x86, 0xf8, 0x25, 0x10, - 0x6e, 0x8b, 0x44, 0x3e, 0x2e, 0x05, 0xc1, 0x87, 0x7e, 0xf8, 0xd2, 0x96, 0x81, 0xa7, 0x7f, 0x6d, - 0x24, 0xb0, 0x92, 0xbc, 0x9f, 0xa1, 0x5a, 0x88, 0xc7, 0xba, 0x8f, 0x7f, 0x2f, 0xcb, 0x4b, 0xff, - 0x0e, 0xe9, 0x0e, 0xf9, 0x84, 0x90, 0x31, 0xce, 0x62, 0x0a, 0x28, 0x07, 0xf1, 0xff, 0x67, 0xf7, - 0xa5, 0x3f, 0x06, 0x3e, 0x5f, 0xc6, 0xd6, 0x82, 0x21, 0xa3, 0x05, 0x0c, 0x00, 0xee, 0x60, 0x00, - 0x08, 0x2d, 0xcd, 0xc0, 0xca, 0x2d, 0xa2, 0x06, 0x17, 0x8c, 0x1c, 0xc3, 0x05, 0x06, 0x5b, 0xcc, - 0x75, 0x4f, 0x4d, 0x87, 0xd5, 0x1f, 0x8e, 0x69, 0xaf, 0x65, 0xc2, 0x66, 0x0a, 0xff, 0xd7, 0x0f, - 0x90, 0x65, 0xa1, 0xb5, 0x5e, 0xba, 0x05, 0x19, 0x66, 0x9f, 0x8c, 0x7b, 0x91, 0x24, 0xd2, 0x6f, - 0xeb, 0x86, 0xa1, 0xfa, 0xa5, 0xa2, 0x8d, 0x50, 0x0c, 0xb2, 0x42, 0xc0, 0x5f, 0xd1, 0x0f, 0x6c, - 0xe0, 0x82, 0x38, 0x10, 0x41, 0xa2, 0xa8, 0xf4, 0xcf, 0x8d, 0x10, 0x44, 0xfb, 0xfd, 0x84, 0xc9, - 0xa2, 0x88, 0xd7, 0xcb, 0x9d, 0xab, 0x50, 0x88, 0x1a, 0x1b, 0xc2, 0x76, 0x38, 0x1c, 0x04, 0x0f, - 0xb9, 0xdb, 0xec, 0x7e, 0xbb, 0x5b, 0x5f, 0x84, 0x34, 0xd7, 0x85, 0x84, 0xe3, 0x14, 0xd3, 0x2d, - 0x42, 0x74, 0x10, 0x8a, 0xdb, 0xa6, 0x34, 0x04, 0xb6, 0x08, 0x4c, 0x1f, 0x9f, 0x4e, 0x6a, 0x16, - 0x7e, 0x72, 0x92, 0x92, 0x11, 0x8b, 0x9f, 0xae, 0x5e, 0x35, 0xec, 0xbc, 0x2f, 0x6e, 0xf4, 0xfd, - 0xc3, 0x2c, 0xee, 0xca, 0x10, 0xdd, 0x2d, 0x32, 0xd4, 0x40, 0xa6, 0x2d, 0x8d, 0x75, 0xd5, 0x77, - 0x34, 0xed, 0xba, 0xaf, 0x71, 0x09, 0x45, 0x10, 0x9e, 0x37, 0x90, 0x21, 0x6f, 0x1d, 0x24, 0x35, - 0x86, 0x39, 0xb2, 0x21, 0x03, 0x3b, 0x12, 0x13, 0x4f, 0xfc, 0x08, 0xea, 0xb1, 0x9b, 0x24, 0x8d, - 0x2c, 0xa7, 0xa5, 0xa7, 0xc1, 0x0b, 0x85, 0x46, 0x30, 0xb5, 0x65, 0xeb, 0xdd, 0x9e, 0x35, 0x69, - 0x6c, 0xb0, 0xb0, 0x83, 0xc3, 0xfd, 0xfb, 0x03, 0xad, 0xa5, 0xac, 0xd3, 0xb5, 0x2d, 0xd4, 0xe8, - 0xc5, 0x6a, 0xf8, 0xed, 0x6d, 0x8b, 0xf9, 0x90, 0xd0, 0xbc, 0x8e, 0xb2, 0xb3, 0x32, 0x3c, 0x6c, - 0xb2, 0xf8, 0xf1, 0x10, 0xd7, 0x14, 0x4e, 0x24, 0x31, 0x96, 0x41, 0x96, 0xb4, 0xcb, 0x5a, 0x65, - 0xb1, 0xe8, 0x89, 0x96, 0x05, 0xf7, 0x2b, 0xb6, 0x97, 0xfc, 0xf8, 0x8a, 0x20, 0xda, 0x65, 0xad, - 0x32, 0xc5, 0x6d, 0x93, 0x36, 0xc8, 0x2e, 0xb0, 0x94, 0xdb, 0x1d, 0x70, 0x4b, 0x18, 0x93, 0x8b, - 0xf9, 0xf1, 0xe2, 0x66, 0xd1, 0x64, 0x77, 0x2a, 0x71, 0xdf, 0x25, 0x37, 0xfe, 0x16, 0xdc, 0x76, - 0x7f, 0x64, 0xe5, 0x73, 0xdf, 0xed, 0xf8, 0x63, 0x2c, 0x62, 0x22, 0x96, 0xf4, 0x18, 0x96, 0xed, - 0x55, 0x2f, 0xb8, 0xbf, 0xb8, 0x3e, 0x67, 0xcd, 0xe1, 0x23, 0x0c, 0xfc, 0x9b, 0x86, 0x71, 0x81, - 0x86, 0x3c, 0xe1, 0xd3, 0x2c, 0x68, 0xd0, 0xb4, 0xd1, 0x97, 0x5b, 0x5c, 0x66, 0x1f, 0x62, 0xa1, - 0xc6, 0x2b, 0xfc, 0x34, 0xc5, 0x7c, 0x32, 0xf7, 0x57, 0xc7, 0xbc, 0x8e, 0xcd, 0x7f, 0x14, 0x0f, - 0xba, 0xc6, 0x8d, 0x8d, 0xff, 0xb0, 0x28, 0xff, 0xbc, 0xf3, 0x27, 0x1e, 0x96, 0xba, 0x5f, 0x9b, - 0xac, 0x52, 0x73, 0xca, 0x9c, 0x72, 0x5a, 0xc9, 0x7e, 0xb9, 0xe0, 0x00, 0x2c, 0x1f, 0x19, 0x07, - 0xc6, 0x47, 0xc6, 0x7f, 0xcf, 0x12, 0xd3, 0x88, 0x4c, 0x88, 0x4c, 0xff, 0x9e, 0x17, 0x89, 0x13, - 0x32, 0xc2, 0x71, 0x93, 0xe6, 0x7f, 0xc3, 0x7e, 0x35, 0xe4, 0x02, 0x78, 0x68, 0xd9, 0x61, 0xef, - 0x7f, 0x3c, 0x74, 0x9d, 0x0d, 0x4b, 0x55, 0x2f, 0x34, 0xb5, 0xd2, 0xd7, 0xcb, 0x5f, 0x2f, 0xfc, - 0x54, 0x32, 0x87, 0xaf, 0x4b, 0xec, 0xda, 0xe9, 0x69, 0x7d, 0xf8, 0xd2, 0x07, 0xc6, 0x38, 0xad, - 0xec, 0x3d, 0x51, 0x11, 0x0c, 0x37, 0x51, 0xab, 0x13, 0x8c, 0x78, 0xfd, 0x86, 0xcc, 0x76, 0x8f, - 0x04, 0x34, 0x6d, 0x61, 0x1a, 0x2b, 0xca, 0x08, 0x23, 0xc0, 0xc6, 0x3e, 0xf8, 0xae, 0x6f, 0xf0, - 0xf9, 0x70, 0xda, 0x11, 0x18, 0xd6, 0xa9, 0x06, 0x59, 0x6c, 0x2d, 0x1e, 0x9b, 0x2d, 0x41, 0xf2, - 0xa1, 0xa2, 0xaa, 0x35, 0x2d, 0xda, 0x3e, 0x32, 0x0f, 0x8c, 0xaa, 0x96, 0xed, 0x27, 0x0a, 0xf0, - 0xe1, 0xb4, 0xaa, 0xf0, 0x20, 0xdd, 0x77, 0xc6, 0xfd, 0x33, 0xce, 0x8d, 0x1a, 0x96, 0xaa, 0x5f, - 0xc7, 0x6e, 0x5b, 0x0f, 0x1b, 0x86, 0x94, 0xca, 0x3b, 0x50, 0x97, 0x2c, 0x44, 0x78, 0x08, 0xf5, - 0x96, 0x37, 0x8a, 0x82, 0x98, 0x3b, 0x1a, 0x3f, 0x54, 0x73, 0x83, 0xdd, 0x3f, 0xf9, 0xe2, 0x29, - 0x3c, 0x42, 0x64, 0x42, 0x67, 0xfe, 0x79, 0xd2, 0x35, 0x2d, 0x54, 0xbf, 0xff, 0x8e, 0x91, 0xda, - 0xbf, 0xc5, 0x8c, 0xb1, 0x09, 0xb1, 0x7f, 0xf9, 0x16, 0x7e, 0xab, 0xc2, 0x16, 0xab, 0xce, 0x2e, - 0xa4, 0xe8, 0x78, 0x1d, 0x3e, 0x1c, 0xe0, 0x6b, 0x48, 0x7f, 0x87, 0xc6, 0x66, 0x28, 0xfd, 0x41, - 0xdb, 0x5b, 0x87, 0x50, 0x00, 0x6b, 0x02, 0xfe, 0xd2, 0x90, 0x80, 0xea, 0x4c, 0x7c, 0xdc, 0xdc, - 0xdd, 0x56, 0x0f, 0xc4, 0x8d, 0x18, 0x18, 0x7f, 0x18, 0x18, 0x7f, 0x27, 0x1b, 0xc3, 0x8f, 0x20, - 0xf1, 0xaa, 0x1f, 0x65, 0xb4, 0x8e, 0x96, 0x80, 0x6a, 0x61, 0xec, 0x55, 0xc3, 0x61, 0x50, 0x08, - 0xe7, 0x82, 0x4d, 0x9b, 0x25, 0xe8, 0xb7, 0xe9, 0xd0, 0xad, 0x8d, 0x4b, 0x55, 0x2d, 0x67, 0x14, - 0x34, 0x98, 0x62, 0x51, 0xe8, 0x5a, 0x5e, 0x79, 0x98, 0x04, 0xee, 0x5b, 0xc1, 0x5c, 0x24, 0x3f, - 0xc2, 0x1a, 0x63, 0x4f, 0x9f, 0xc6, 0x9f, 0x29, 0xa5, 0xfc, 0x18, 0x70, 0xf3, 0x3a, 0xe1, 0x00, - 0xe2, 0x91, 0x0b, 0x3e, 0x77, 0x1e, 0x8d, 0x22, 0x14, 0x37, 0x72, 0x4b, 0x34, 0x3e, 0x65, 0xf3, - 0x5e, 0x86, 0xf6, 0xaa, 0xae, 0xeb, 0x92, 0xd1, 0xa7, 0xf7, 0x9e, 0x80, 0x4f, 0xff, 0xc7, 0xc6, - 0x7a, 0xe3, 0x63, 0x46, 0xeb, 0xd9, 0x65, 0xad, 0xd8, 0xa3, 0x59, 0x2a, 0x67, 0x53, 0x81, 0x07, - 0x57, 0xdf, 0x6f, 0x6e, 0xce, 0x6f, 0xef, 0x4f, 0xd9, 0x2d, 0xc5, 0xf6, 0x37, 0xcb, 0x08, 0x32, - 0xed, 0x8d, 0xa8, 0x9e, 0xbe, 0xcb, 0x0a, 0x82, 0xa0, 0xc6, 0x0e, 0xbb, 0xa6, 0x41, 0x10, 0x5d, - 0x84, 0xf7, 0x51, 0x49, 0x46, 0x04, 0x9f, 0xfb, 0x2a, 0x6d, 0x3f, 0x8d, 0x81, 0xb5, 0x05, 0x8a, - 0x0c, 0xb2, 0x6d, 0x2f, 0x51, 0xeb, 0x19, 0x64, 0x14, 0xcf, 0x5c, 0xd7, 0x36, 0x6d, 0xda, 0x7c, - 0x56, 0x4c, 0x4b, 0x5a, 0x14, 0x53, 0x07, 0x46, 0xb8, 0xbb, 0xd9, 0x0f, 0x99, 0x94, 0xf6, 0x9d, - 0x8a, 0x5d, 0x5f, 0x08, 0xfc, 0xf1, 0x2d, 0x08, 0xb5, 0x8f, 0x8c, 0x83, 0xe3, 0x22, 0x66, 0x44, - 0xcc, 0xf5, 0xc2, 0x14, 0xe9, 0x68, 0x1c, 0x35, 0x91, 0xa6, 0xb1, 0xaf, 0x78, 0x6e, 0x0f, 0x59, - 0xe9, 0x7f, 0x13, 0xd9, 0xb7, 0xc6, 0x88, 0x40, 0xd5, 0x12, 0xa0, 0x72, 0xe0, 0x4f, 0x83, 0x34, - 0xb2, 0x0b, 0x5b, 0x06, 0x01, 0xa9, 0x7a, 0x59, 0x19, 0x74, 0xd6, 0x98, 0x5b, 0xac, 0x3b, 0x55, - 0x43, 0x8c, 0xdc, 0xc4, 0x4a, 0x33, 0x1a, 0x20, 0x4e, 0x5a, 0x0e, 0x9a, 0x4c, 0xdd, 0x4e, 0x62, - 0x3b, 0x38, 0xbf, 0xed, 0x0d, 0x78, 0x7f, 0x4e, 0x24, 0xef, 0x63, 0x80, 0x2d, 0xfe, 0x1f, 0xb3, - 0x13, 0xde, 0x57, 0xd0, 0x71, 0xba, 0x78, 0x4b, 0x28, 0xc2, 0x13, 0x7f, 0x3f, 0xb6, 0x52, 0xc0, - 0x41, 0x33, 0xdb, 0x02, 0xff, 0x60, 0xaa, 0x61, 0x4f, 0x97, 0x79, 0x35, 0xad, 0xa3, 0x75, 0x26, - 0xcd, 0x81, 0xfd, 0xd3, 0xa5, 0x39, 0x3c, 0x68, 0x9d, 0xb0, 0x87, 0xd2, 0xf0, 0xf7, 0x85, 0x9f, - 0x9d, 0x7b, 0xf1, 0x4b, 0x73, 0xa0, 0xe1, 0xdd, 0x0d, 0x0f, 0xb8, 0xf9, 0xfe, 0xd3, 0xa0, 0x54, - 0x37, 0x6e, 0x8e, 0xc3, 0xfc, 0x5e, 0xf9, 0xbb, 0x82, 0x01, 0x9e, 0xf9, 0x6a, 0x53, 0x2d, 0x25, - 0xc1, 0x8d, 0x8e, 0xfa, 0x4e, 0x4b, 0xb9, 0xb6, 0x64, 0xd7, 0x78, 0x15, 0x5c, 0x43, 0xfc, 0x6f, - 0x88, 0x1e, 0xf2, 0x22, 0xef, 0x3a, 0x5c, 0xb2, 0x5c, 0xb3, 0x95, 0x97, 0x01, 0xc4, 0x0f, 0x79, - 0x80, 0x30, 0x12, 0xb6, 0x5a, 0xd9, 0x79, 0xe5, 0xad, 0x96, 0x31, 0x2d, 0x44, 0xbc, 0x12, 0xd5, - 0x4b, 0xf1, 0x91, 0x00, 0xe0, 0x3d, 0xe7, 0xa4, 0x0f, 0x2c, 0x10, 0x0e, 0x03, 0xde, 0x7d, 0x20, - 0x79, 0x67, 0x86, 0x28, 0x06, 0x0e, 0xbe, 0x19, 0x9e, 0x1b, 0x56, 0x33, 0x96, 0x02, 0x9d, 0x99, - 0x9b, 0xe8, 0x3f, 0x3f, 0x5e, 0x03, 0x00, 0x20, 0x20, 0x45, 0x42, 0x1d, 0x97, 0x2e, 0x84, 0xcc, - 0x89, 0x99, 0x08, 0xf0, 0x5a, 0x9e, 0x4e, 0x79, 0xd2, 0x33, 0x2d, 0x4c, 0xbf, 0xf3, 0xf1, 0x5e, - 0x10, 0xed, 0xaf, 0xc2, 0x1d, 0xb5, 0xf8, 0x5f, 0x86, 0xf2, 0xc8, 0xf2, 0xca, 0x9a, 0x3c, 0xcd, - 0x75, 0xf3, 0xa2, 0x0e, 0xbc, 0x42, 0x64, 0x42, 0x64, 0x6e, 0x5a, 0xb9, 0x7e, 0x17, 0xc1, 0x3b, - 0x67, 0xc3, 0xde, 0x35, 0x4a, 0x51, 0x81, 0xc4, 0x47, 0x43, 0x12, 0xd9, 0xbc, 0x7e, 0x5a, 0xf9, - 0x7f, 0xe3, 0x68, 0x9a, 0x5d, 0x06, 0x89, 0x3d, 0x54, 0x18, 0x37, 0x97, 0x2c, 0x32, 0x41, 0xfb, - 0x2a, 0xca, 0xd1, 0x7d, 0x3f, 0x76, 0x19, 0x5c, 0xd3, 0xbf, 0x2b, 0x46, 0x29, 0xa5, 0x95, 0x34, - 0x19, 0x3c, 0x76, 0x5a, 0xd9, 0x7f, 0xf1, 0xbd, 0x53, 0x46, 0x1b, 0xcb, 0x7f, 0xe1, 0xf6, 0x5b, - 0xc7, 0x9a, 0x11, 0x97, 0xfc, 0x42, 0x64, 0x6a, 0x71, 0x36, 0x70, 0xd4, 0x48, 0x80, 0x50, 0x09, - 0x23, 0x59, 0x4b, 0x2b, 0x9e, 0x8f, 0x2e, 0x24, 0x40, 0xb8, 0x81, 0xc1, 0x03, 0x84, 0xe2, 0x32, - 0x79, 0xd6, 0x1a, 0xbb, 0xe8, 0x7c, 0xa2, 0x3a, 0x2f, 0x5f, 0x5b, 0xa3, 0xfa, 0x27, 0x43, 0x5c, - 0x78, 0x5a, 0x2a, 0xaa, 0xfc, 0xae, 0x45, 0xd5, 0x57, 0x88, 0x10, 0x3b, 0xcd, 0xae, 0x7a, 0x59, - 0x6f, 0x2d, 0x20, 0x64, 0xdc, 0x4d, 0x1d, 0xe2, 0x71, 0x08, 0x6f, 0x41, 0x5c, 0x4f, 0x88, 0x08, - 0x0f, 0x0d, 0x34, 0xfe, 0x2f, 0xb6, 0x1b, 0x0f, 0x0a, 0xd9, 0x98, 0xd3, 0x8c, 0xf1, 0x12, 0xf1, - 0x7e, 0x2e, 0x9a, 0xd5, 0x44, 0x78, 0x9f, 0x13, 0x82, 0xbe, 0x09, 0xc4, 0xaa, 0xb6, 0x61, 0x83, - 0x5a, 0x9b, 0xf8, 0x90, 0xa1, 0x09, 0xda, 0x62, 0x9c, 0x5d, 0xd6, 0x4d, 0x62, 0x0f, 0x9d, 0x20, - 0x77, 0xe5, 0xe8, 0xf4, 0x17, 0xb7, 0xde, 0x9a, 0xc9, 0xc5, 0x6d, 0xb1, 0x1b, 0xac, 0x8b, 0xaf, - 0xba, 0xac, 0xfc, 0xc3, 0xc5, 0x77, 0xa8, 0x42, 0x43, 0x3e, 0xde, 0x26, 0x11, 0x14, 0x78, 0x6d, - 0xd6, 0x15, 0xf8, 0xd8, 0x4d, 0xc8, 0x97, 0x19, 0x3e, 0x24, 0x6e, 0x09, 0xef, 0xf9, 0xb2, 0x8f, - 0x1d, 0x50, 0xcf, 0x42, 0xdc, 0x04, 0x71, 0x01, 0x21, 0x44, 0xcf, 0x8b, 0x5f, 0x8c, 0x30, 0xbb, - 0x8b, 0x97, 0x8e, 0x37, 0x62, 0x82, 0xa3, 0x50, 0xa4, 0xb9, 0x53, 0x24, 0x4b, 0x99, 0x64, 0x55, - 0x09, 0xb4, 0x2a, 0xae, 0x45, 0xa8, 0xe2, 0x44, 0xee, 0xac, 0x6c, 0x35, 0x8d, 0xb5, 0x35, 0xfc, - 0x41, 0x42, 0x79, 0x39, 0x8b, 0xac, 0x48, 0x24, 0x14, 0xd1, 0x79, 0x58, 0xd8, 0xf1, 0x22, 0x05, - 0x4b, 0x9f, 0x4d, 0xfc, 0x12, 0x84, 0x4b, 0xb8, 0xee, 0xef, 0xe3, 0xbf, 0x04, 0xf9, 0x69, 0xbb, - 0xfd, 0xf2, 0x11, 0x9d, 0x7e, 0x09, 0x45, 0x6a, 0x8b, 0x1b, 0x6c, 0xa0, 0xbb, 0xe2, 0x6f, 0x68, - 0x55, 0x17, 0x18, 0xf4, 0xf1, 0x00, 0x84, 0x2e, 0xdb, 0xbb, 0xe5, 0x0a, 0xf5, 0x72, 0xfa, 0xb5, - 0xf5, 0x70, 0x2b, 0xa2, 0x95, 0x2f, 0x12, 0xbd, 0x5c, 0x10, 0x0c, 0x0d, 0x1b, 0x92, 0x66, 0x0a, - 0x41, 0xdf, 0xfb, 0x92, 0xfa, 0xc7, 0x5e, 0xcb, 0xa2, 0x4d, 0xfd, 0xb6, 0x67, 0x33, 0x52, 0x2f, - 0xfc, 0x48, 0x50, 0x46, 0x48, 0x8c, 0x27, 0xd8, 0xed, 0xcd, 0x0a, 0x64, 0xc6, 0x36, 0x62, 0x34, - 0x2e, 0xa1, 0x03, 0xd4, 0x83, 0x81, 0x27, 0x8f, 0x04, 0x9d, 0x69, 0x25, 0xe0, 0xb7, 0x82, 0x00, - 0xa4, 0xfc, 0x8c, 0xc4, 0xe3, 0x25, 0xfa, 0x37, 0x27, 0xba, 0x18, 0x00, 0x02, 0x94, 0x91, 0xc6, - 0xfa, 0x37, 0x20, 0x16, 0x74, 0x7f, 0xf8, 0x40, 0x48, 0x23, 0x09, 0xee, 0xe3, 0xb7, 0xc1, 0x25, - 0x28, 0xae, 0x3b, 0x78, 0x80, 0x5a, 0x16, 0x1e, 0xa1, 0x7c, 0xed, 0xb0, 0x85, 0xe4, 0xeb, 0xc1, - 0x08, 0xb0, 0xc0, 0x6a, 0x53, 0x24, 0xcc, 0xef, 0x84, 0x3a, 0xad, 0x4f, 0x4d, 0xb9, 0xc8, 0x94, - 0xbf, 0x8b, 0xa0, 0x1c, 0x8f, 0xf1, 0x32, 0xde, 0x40, 0xc8, 0xf0, 0xd9, 0xf1, 0x82, 0xa6, 0x5d, - 0xcb, 0x64, 0x1a, 0x42, 0x7b, 0x55, 0x08, 0x10, 0x86, 0x84, 0x27, 0xe6, 0x0f, 0x1c, 0xfb, 0x5a, - 0x1e, 0xe1, 0x86, 0xba, 0x5f, 0xe0, 0xa4, 0x68, 0x76, 0x41, 0xde, 0x08, 0xe5, 0xd3, 0x37, 0x18, - 0x9b, 0x5f, 0xa4, 0x4c, 0xef, 0xa1, 0x79, 0x71, 0x30, 0x51, 0xc7, 0x7c, 0xb7, 0xde, 0x3b, 0xee, - 0xfa, 0x11, 0x17, 0xd6, 0xaf, 0xa3, 0xba, 0x12, 0xea, 0xe4, 0x57, 0x45, 0x3a, 0x5f, 0x53, 0xa4, - 0xd1, 0x30, 0x58, 0x21, 0x39, 0xca, 0x1a, 0xf1, 0x24, 0x61, 0x2f, 0xb1, 0xd4, 0x5a, 0x64, 0x46, - 0x34, 0x61, 0x56, 0xc2, 0x51, 0xfa, 0x35, 0xbf, 0xaf, 0x85, 0x05, 0x24, 0xae, 0x96, 0xfe, 0x99, - 0x44, 0x19, 0x27, 0xd6, 0x36, 0x1d, 0x50, 0x46, 0xe2, 0x0e, 0x74, 0x99, 0xdd, 0x2a, 0x51, 0x41, - 0x6e, 0x8c, 0x00, 0x30, 0xb6, 0x6f, 0x48, 0x7f, 0xc2, 0xef, 0x02, 0x65, 0x95, 0x45, 0x10, 0x75, - 0x47, 0xd3, 0x6e, 0x26, 0x14, 0x27, 0x58, 0x38, 0x32, 0x19, 0x63, 0x9a, 0x50, 0x42, 0x70, 0x67, - 0xa7, 0x46, 0xde, 0x65, 0x02, 0xaf, 0x42, 0xd3, 0x30, 0x83, 0xdd, 0x74, 0xca, 0x92, 0xba, 0xcd, - 0x85, 0xe7, 0x13, 0x19, 0xad, 0x6a, 0xaa, 0xa1, 0xfa, 0x72, 0x35, 0xc9, 0x02, 0xd5, 0x95, 0x22, - 0x27, 0xe4, 0xf1, 0x8f, 0x82, 0x2d, 0x34, 0xc3, 0x08, 0x3e, 0x71, 0xfe, 0x32, 0x0d, 0x6e, 0x37, - 0x24, 0xf0, 0x16, 0x68, 0xdc, 0xcc, 0x5e, 0xcb, 0xcf, 0xe4, 0xd7, 0x2f, 0x2d, 0xe2, 0x66, 0xc3, - 0xe4, 0xda, 0x04, 0xae, 0xa4, 0x1d, 0x7b, 0x13, 0x0a, 0x5d, 0x30, 0xad, 0x33, 0x40, 0xa6, 0x47, - 0x2c, 0x9b, 0x52, 0x43, 0x06, 0xfe, 0x87, 0x1e, 0xf3, 0x02, 0x16, 0xc6, 0x21, 0x03, 0xec, 0x83, - 0x84, 0x2d, 0x27, 0xd3, 0x0b, 0xe5, 0x7e, 0x24, 0x5f, 0xdf, 0x11, 0xd9, 0xac, 0xbe, 0x8d, 0xa0, - 0xfd, 0xa4, 0x10, 0xca, 0xb1, 0xe4, 0xbc, 0x48, 0x93, 0x5e, 0x9c, 0x4e, 0xe7, 0x7d, 0x13, 0x5f, - 0x74, 0x17, 0x71, 0x34, 0x7e, 0xfa, 0x3c, 0x5f, 0x5c, 0x27, 0xeb, 0xdf, 0x57, 0x85, 0xba, 0xc5, - 0x2f, 0x52, 0x25, 0xf0, 0x48, 0x42, 0x4a, 0xfc, 0x38, 0x88, 0x50, 0x64, 0xcc, 0x19, 0x72, 0xb9, - 0x42, 0xaa, 0x65, 0x84, 0x12, 0x56, 0x8b, 0x5d, 0x05, 0x60, 0xd9, 0xa2, 0x08, 0x6b, 0x64, 0x8a, - 0x3e, 0xa7, 0x53, 0x30, 0x9a, 0x21, 0x3e, 0x7c, 0x28, 0x4d, 0x9b, 0xe8, 0x5b, 0xf1, 0x38, 0x0a, - 0x53, 0xb3, 0xc2, 0x7a, 0x0d, 0x09, 0x37, 0x73, 0x89, 0x10, 0x3f, 0x95, 0xa3, 0x51, 0x01, 0x62, - 0xa4, 0xb5, 0x8c, 0x40, 0xb5, 0x9c, 0xea, 0xbf, 0x10, 0x0a, 0x4a, 0x55, 0xfe, 0x6f, 0xca, 0x29, - 0x09, 0xec, 0xc0, 0x1a, 0xb4, 0x29, 0xd9, 0x33, 0xb0, 0x70, 0x0d, 0xde, 0x20, 0x67, 0xbd, 0xbe, - 0x3d, 0x38, 0xb1, 0x9d, 0x50, 0xf3, 0xed, 0x8b, 0x98, 0x86, 0x9f, 0x0a, 0x72, 0x63, 0xa9, 0xc8, - 0x38, 0x55, 0xa3, 0xe2, 0x09, 0x55, 0x7b, 0x05, 0x20, 0xbf, 0x0d, 0x93, 0xbc, 0x30, 0x1a, 0x6e, - 0xf8, 0x40, 0xcf, 0xc2, 0xb1, 0xf1, 0x8c, 0xaa, 0x5a, 0x84, 0x73, 0x81, 0x67, 0x26, 0xd0, 0xb7, - 0xe2, 0x23, 0xa8, 0xc5, 0x62, 0x15, 0x0a, 0xcd, 0x73, 0xd4, 0xb4, 0x65, 0x4e, 0x95, 0xd7, 0x34, - 0x94, 0x68, 0x36, 0x96, 0x0f, 0xf0, 0x4c, 0x13, 0x22, 0x66, 0x6d, 0xf5, 0xa1, 0x8e, 0x87, 0x1a, - 0x3c, 0x91, 0x7e, 0x6a, 0x2b, 0xa1, 0x3a, 0x93, 0xa2, 0x54, 0xbd, 0x13, 0x50, 0x9f, 0x5e, 0x9f, - 0x82, 0xc1, 0xcd, 0xb0, 0x21, 0x81, 0x70, 0x3d, 0x27, 0xae, 0x4c, 0x9c, 0xb1, 0x45, 0x13, 0xf1, - 0x22, 0x02, 0x96, 0x8c, 0x3d, 0x57, 0x54, 0xdd, 0x48, 0x71, 0x62, 0x01, 0xc4, 0x0c, 0x5a, 0x59, - 0xfb, 0xe3, 0x04, 0xa1, 0xcf, 0x26, 0x83, 0xd2, 0x30, 0xd2, 0x2b, 0x3a, 0x55, 0x34, 0x62, 0x3d, - 0xe0, 0x6d, 0x59, 0xf0, 0x62, 0xe0, 0x8f, 0xf3, 0x97, 0x5a, 0xb6, 0x58, 0x81, 0x23, 0x0c, 0xe3, - 0x68, 0x4c, 0x50, 0x4f, 0x50, 0xf6, 0xec, 0x46, 0xd6, 0x6a, 0xb3, 0x34, 0xea, 0x4b, 0xdd, 0x17, - 0xc7, 0x49, 0xf9, 0x36, 0x4c, 0x91, 0x7a, 0x8e, 0x9c, 0x3c, 0x44, 0x61, 0x64, 0xaa, 0x86, 0x84, - 0x0b, 0xa5, 0x55, 0xdb, 0xac, 0x74, 0x94, 0x09, 0x59, 0x01, 0x82, 0xeb, 0xc4, 0xc6, 0x5b, 0x25, - 0xbd, 0xdb, 0x72, 0x06, 0x03, 0xc9, 0xa7, 0xfa, 0xaf, 0x08, 0x02, 0xa1, 0x1a, 0xcc, 0x63, 0x0a, - 0xa6, 0x45, 0xef, 0xd2, 0x76, 0xec, 0x1f, 0x12, 0x7f, 0x10, 0x50, 0x99, 0x41, 0x00, 0xc0, 0x9d, - 0x9c, 0x63, 0x32, 0x74, 0xd7, 0x5e, 0xf8, 0x21, 0xe4, 0xf3, 0xd1, 0x3d, 0x5c, 0x9f, 0xad, 0x57, - 0x56, 0xfa, 0xb1, 0x1b, 0xd5, 0x88, 0xbc, 0x40, 0x50, 0x28, 0x34, 0xa6, 0xa9, 0x34, 0x56, 0x4a, - 0x68, 0x6a, 0x8a, 0x36, 0x23, 0x54, 0x2b, 0xad, 0xa0, 0xc0, 0x30, 0x56, 0x6e, 0x45, 0xcb, 0x49, - 0x19, 0x7b, 0xf1, 0x90, 0xf3, 0x6f, 0x4c, 0x86, 0x7c, 0x3f, 0xc6, 0x16, 0x0d, 0xfe, 0xcd, 0xbd, - 0x4c, 0x4f, 0x27, 0x13, 0xc2, 0xe4, 0xc6, 0x28, 0x88, 0x20, 0x60, 0xab, 0x0a, 0xc2, 0x59, 0xc7, - 0xa6, 0x1f, 0xff, 0xaa, 0x3f, 0xa8, 0x78, 0x39, 0x3f, 0x32, 0xc3, 0x38, 0x7e, 0xd0, 0xc4, 0xb8, - 0x0e, 0x55, 0x00, 0x79, 0x0f, 0x6e, 0x16, 0x1b, 0x50, 0x98, 0x88, 0x2b, 0xdf, 0xc7, 0x94, 0x0f, - 0xa4, 0xa3, 0xfe, 0xbc, 0xe0, 0x40, 0x30, 0xef, 0x80, 0x5a, 0x60, 0x18, 0x45, 0xc7, 0x36, 0x71, - 0xca, 0x37, 0xe2, 0x63, 0xb8, 0x39, 0xd4, 0x69, 0xcb, 0xdd, 0x78, 0x20, 0x80, 0x8b, 0xea, 0xfe, - 0x2a, 0x2c, 0x35, 0xe6, 0x20, 0x48, 0xc2, 0xbe, 0x9e, 0xf9, 0x51, 0x86, 0xfb, 0xc4, 0x19, 0x9b, - 0xbc, 0x70, 0xdb, 0x7c, 0x84, 0x11, 0xa7, 0x78, 0x09, 0x27, 0x1a, 0x12, 0x59, 0xc4, 0x05, 0x24, - 0x61, 0xdd, 0x89, 0x22, 0x7a, 0x41, 0xa2, 0x74, 0x0c, 0x52, 0xa6, 0x52, 0x24, 0x94, 0x4e, 0xdc, - 0xd6, 0xc2, 0xc2, 0xb3, 0xbd, 0xc9, 0xf1, 0xdf, 0xdf, 0x08, 0x67, 0x8d, 0x8c, 0x68, 0x00, 0x4b, - 0xa1, 0x04, 0xe0, 0xca, 0x5a, 0x42, 0xfe, 0x32, 0xa9, 0xac, 0x40, 0xb0, 0x64, 0xa0, 0x34, 0xdd, - 0xc6, 0xaa, 0x39, 0x4d, 0x8e, 0xb2, 0xf9, 0xf1, 0x3c, 0xc9, 0x88, 0xd7, 0xdd, 0x59, 0xca, 0x45, - 0x83, 0x35, 0xa1, 0xf9, 0xc2, 0xeb, 0x34, 0x26, 0x87, 0x97, 0xa1, 0x07, 0x4b, 0xea, 0xe0, 0x27, - 0xd5, 0x22, 0x5d, 0x5f, 0xea, 0x95, 0x3e, 0xad, 0x15, 0xd7, 0x5f, 0x05, 0xd7, 0xbe, 0x38, 0x75, - 0x0c, 0xee, 0xa9, 0x52, 0x7c, 0x60, 0x42, 0x42, 0x31, 0xc1, 0x86, 0xb2, 0x21, 0x42, 0xa6, 0xac, - 0xb5, 0xad, 0xcb, 0xea, 0xcc, 0xe3, 0x5a, 0x10, 0xaf, 0x03, 0xf1, 0xa4, 0x43, 0xfa, 0x42, 0xb7, - 0x71, 0x21, 0x47, 0x68, 0xc0, 0xfd, 0x35, 0x03, 0x31, 0x2b, 0x27, 0x84, 0x3f, 0xd0, 0x85, 0xef, - 0x05, 0x18, 0x9e, 0x76, 0xb1, 0xf8, 0xd1, 0xbc, 0x63, 0xf2, 0xc5, 0xa5, 0x51, 0xa5, 0xa6, 0xdd, - 0x02, 0xc7, 0xc0, 0x03, 0x41, 0x5d, 0xf0, 0xd2, 0x56, 0x66, 0x40, 0x0b, 0xd4, 0x9f, 0x31, 0xd7, - 0x8a, 0xf7, 0x79, 0x9e, 0xfb, 0x22, 0xad, 0x7f, 0x0a, 0x45, 0xc4, 0x09, 0x1b, 0x62, 0x6c, 0x23, - 0x2a, 0x68, 0x38, 0x58, 0x9c, 0x40, 0xd1, 0xce, 0xe3, 0x5c, 0xb1, 0x22, 0xea, 0x31, 0x82, 0x1d, - 0xaa, 0x8c, 0x7b, 0x71, 0xb7, 0x1d, 0x67, 0x88, 0xe8, 0xb7, 0x02, 0x7a, 0x95, 0x41, 0x9e, 0x04, - 0xf3, 0x0a, 0x14, 0xb7, 0xae, 0x7f, 0xf7, 0x89, 0x0a, 0x1d, 0xea, 0x8f, 0x60, 0x80, 0xd2, 0x43, - 0x71, 0x9b, 0x58, 0xa9, 0xa1, 0xb1, 0x02, 0xb7, 0xce, 0x41, 0x34, 0xb5, 0xc4, 0x88, 0x0a, 0x13, - 0x00, 0x5b, 0x73, 0x85, 0x6c, 0xbc, 0x10, 0x49, 0xe0, 0x68, 0x8d, 0xa8, 0x11, 0xaa, 0xb8, 0x9c, - 0x0b, 0x73, 0x5f, 0xff, 0xd0, 0xcd, 0x21, 0x2a, 0x88, 0x89, 0xaa, 0x27, 0x59, 0x8b, 0xd0, 0xa4, - 0x0f, 0x8e, 0x1e, 0xa3, 0x7a, 0x36, 0xda, 0x78, 0x9f, 0x2e, 0xfc, 0xcc, 0xe0, 0x10, 0x2f, 0xf8, - 0xfd, 0x21, 0x3a, 0x0f, 0x7f, 0xeb, 0xf1, 0x22, 0x46, 0x95, 0xc7, 0xb1, 0xbc, 0x91, 0x99, 0x17, - 0xb3, 0xd2, 0xab, 0xa6, 0x6c, 0xa7, 0x83, 0x89, 0xfd, 0xc5, 0x0c, 0xd7, 0x2e, 0x10, 0x4b, 0x89, - 0xcc, 0x9d, 0x64, 0xd0, 0x00, 0xb7, 0x32, 0x5b, 0xb1, 0x03, 0x05, 0x80, 0x09, 0x67, 0x2c, 0x5c, - 0x2f, 0xff, 0x17, 0xf1, 0x21, 0x43, 0xf0, 0x16, 0x35, 0x8d, 0x29, 0x0d, 0x31, 0x1c, 0x0a, 0xfd, - 0x78, 0x81, 0x80, 0x7e, 0xcd, 0x63, 0x2f, 0x65, 0xf8, 0xab, 0xa5, 0xbe, 0x14, 0xc5, 0x33, 0x06, - 0x83, 0xad, 0x06, 0xdf, 0x55, 0x8b, 0xcb, 0xbf, 0xf1, 0x23, 0x05, 0x15, 0x41, 0x48, 0xd3, 0x11, - 0xa1, 0x04, 0x49, 0x9d, 0x6d, 0xde, 0x48, 0x28, 0x2a, 0xea, 0x16, 0x75, 0x3e, 0xaf, 0x82, 0x30, - 0xaf, 0x26, 0x64, 0x58, 0xe3, 0xf0, 0x1d, 0x49, 0xf0, 0x43, 0x90, 0xd6, 0x42, 0xec, 0x85, 0xfc, - 0x57, 0x45, 0x4b, 0x0f, 0xf4, 0x3d, 0xcf, 0x82, 0x70, 0x87, 0x37, 0x83, 0x59, 0x61, 0xdb, 0x8e, - 0xff, 0x88, 0x0a, 0x0a, 0x15, 0x8a, 0xec, 0x51, 0xa7, 0x11, 0xc4, 0x49, 0x2c, 0xd7, 0x25, 0x54, - 0x8c, 0xeb, 0x15, 0x0a, 0x78, 0x94, 0x9b, 0x5b, 0x47, 0x4a, 0x4a, 0xbc, 0x14, 0xe0, 0x8a, 0xc5, - 0x53, 0x86, 0x28, 0xc6, 0xc2, 0xf5, 0x88, 0x25, 0x94, 0x61, 0xbc, 0xff, 0x04, 0x04, 0x31, 0xc3, - 0x49, 0x15, 0xe4, 0x07, 0x67, 0x29, 0xca, 0xe2, 0xb8, 0x86, 0x33, 0x50, 0x1b, 0xe0, 0x34, 0xcc, - 0x07, 0x51, 0xaa, 0xcc, 0xdb, 0x32, 0xe5, 0xfe, 0xf8, 0x3e, 0x2d, 0x5f, 0xa3, 0x27, 0xe2, 0x42, - 0x82, 0x3a, 0xa3, 0x66, 0xc7, 0xdd, 0xfb, 0xdb, 0xcc, 0x6a, 0x5b, 0x82, 0xdd, 0xf4, 0x31, 0xd7, - 0x1c, 0x40, 0x40, 0x4e, 0x78, 0x2d, 0xae, 0x3a, 0xe6, 0x63, 0x89, 0x0a, 0x61, 0xc2, 0x23, 0x0c, - 0x64, 0xd1, 0xa0, 0x3a, 0xce, 0xfd, 0x0d, 0xdb, 0x4e, 0xee, 0x01, 0x94, 0xc7, 0x11, 0xa8, 0x43, - 0x17, 0x9a, 0xbd, 0xa7, 0xff, 0xa6, 0xd4, 0x58, 0xa8, 0x96, 0xca, 0x3c, 0x8e, 0x33, 0xcf, 0xc4, - 0x42, 0x84, 0x7d, 0xad, 0x59, 0xff, 0xc5, 0x10, 0xa5, 0xd1, 0x2d, 0xf9, 0x0c, 0xbf, 0xfd, 0x4c, - 0xfb, 0x0f, 0x39, 0xd1, 0x89, 0x48, 0x2b, 0xe4, 0xc6, 0x64, 0x49, 0xa2, 0xde, 0x62, 0x2e, 0xd5, - 0xc1, 0xc9, 0xaf, 0xce, 0xbc, 0x13, 0x1e, 0x89, 0xfd, 0x50, 0xf8, 0xd2, 0x95, 0xca, 0xaf, 0x10, - 0x0a, 0xcb, 0x61, 0xc9, 0xd0, 0x27, 0x91, 0x6d, 0xd9, 0x60, 0xcd, 0x95, 0x45, 0xf0, 0x58, 0x28, - 0x7d, 0x15, 0x2e, 0xbc, 0xb4, 0x36, 0x1a, 0xaa, 0xa6, 0xc6, 0xc3, 0x8a, 0x66, 0x5f, 0x05, 0x84, - 0xbd, 0xc9, 0x1c, 0x48, 0x86, 0xe4, 0xb6, 0xd3, 0xcc, 0x3c, 0x11, 0x84, 0xd2, 0x43, 0x1e, 0x64, - 0xc6, 0x52, 0xaf, 0x38, 0x55, 0x12, 0xff, 0x15, 0x28, 0xa9, 0x05, 0x3a, 0x0c, 0x57, 0xd7, 0x28, - 0x8e, 0xaf, 0x17, 0xc1, 0x27, 0x61, 0x0d, 0xd6, 0xc3, 0xc1, 0x61, 0x0e, 0x41, 0xb7, 0x09, 0x1c, - 0xa3, 0x3c, 0x76, 0x31, 0xad, 0x3a, 0x02, 0x26, 0xac, 0xdf, 0x0a, 0x58, 0x10, 0x06, 0x17, 0x89, - 0xf6, 0x79, 0x5d, 0xe9, 0x36, 0x30, 0x60, 0xc2, 0xa4, 0xec, 0x32, 0xe1, 0xca, 0xa0, 0x65, 0xac, - 0x25, 0x11, 0x39, 0xe2, 0x42, 0x84, 0xe9, 0xbb, 0x8d, 0xf9, 0xd7, 0x51, 0xda, 0x7b, 0xf2, 0xd3, - 0x27, 0x23, 0x40, 0x3c, 0xff, 0x4f, 0x01, 0x34, 0xfe, 0x20, 0x69, 0xba, 0xb3, 0x19, 0x90, 0xda, - 0xfc, 0xb7, 0x51, 0x0f, 0xef, 0x33, 0x8f, 0xad, 0x0d, 0xac, 0xba, 0xba, 0x44, 0x0b, 0x02, 0xdf, - 0x63, 0x3f, 0x00, 0x88, 0xa0, 0x8e, 0xe1, 0x24, 0xd1, 0xff, 0xc5, 0x5d, 0x3f, 0x0a, 0x4d, 0xe5, - 0x55, 0x88, 0x0f, 0x2e, 0x0f, 0x5c, 0x6b, 0x01, 0x86, 0xf6, 0x46, 0x69, 0x77, 0x42, 0x66, 0x3f, - 0xfc, 0xe6, 0x69, 0xd9, 0x2a, 0x93, 0xa7, 0xa9, 0xda, 0x6c, 0xfe, 0xef, 0x80, 0x9f, 0x0a, 0x0b, - 0xd4, 0x63, 0x99, 0xea, 0xd8, 0xbc, 0xfa, 0x69, 0xbb, 0xac, 0xf5, 0x2b, 0x25, 0x63, 0x5f, 0x78, - 0x80, 0x57, 0x40, 0xda, 0xcd, 0x0e, 0x2b, 0xb5, 0x79, 0xa3, 0xde, 0x20, 0x14, 0x9d, 0xb7, 0x10, - 0xab, 0xb0, 0xb8, 0x13, 0x7a, 0x91, 0xe2, 0x41, 0xec, 0x28, 0xd5, 0x12, 0x41, 0x07, 0x01, 0x58, - 0xe6, 0x75, 0xe3, 0x2a, 0x42, 0x23, 0x22, 0x1f, 0x9a, 0xa8, 0xde, 0xc6, 0xec, 0x51, 0x9a, 0x51, - 0x58, 0xac, 0x56, 0xf8, 0x91, 0x21, 0x4c, 0x5d, 0x59, 0x1d, 0xc6, 0x7d, 0x4f, 0xe8, 0xef, 0x97, - 0xb6, 0xcf, 0x85, 0x3a, 0x4e, 0xe3, 0x5a, 0x65, 0x4b, 0xd7, 0x20, 0x5d, 0x6c, 0xcb, 0xf7, 0x88, - 0x0a, 0x0c, 0x8c, 0x24, 0x67, 0x5f, 0xec, 0xf7, 0x68, 0x21, 0x00, 0x21, 0x52, 0x26, 0x64, 0x47, - 0x2b, 0x54, 0x10, 0x9c, 0x15, 0xa2, 0x1d, 0x3e, 0x0a, 0xc9, 0xb9, 0x2d, 0xf0, 0x6e, 0x8c, 0x32, - 0xa6, 0xb8, 0x5c, 0x37, 0x5b, 0xa0, 0x4c, 0x3c, 0x13, 0x05, 0x78, 0xbd, 0xdd, 0x41, 0x48, 0x67, - 0xe8, 0xbd, 0x86, 0xd1, 0x7f, 0xe7, 0x85, 0xff, 0xd3, 0x69, 0xb4, 0xf0, 0xfc, 0x27, 0xd0, 0xcc, - 0xa1, 0x18, 0x98, 0xa3, 0x52, 0x72, 0xe3, 0xdf, 0xe0, 0x92, 0xc1, 0xa8, 0xee, 0x19, 0xb9, 0x7c, - 0x3f, 0x2d, 0x09, 0xb6, 0x9a, 0xa1, 0x60, 0x0a, 0x22, 0x03, 0xf5, 0x67, 0xb7, 0x08, 0x40, 0x8a, - 0xf3, 0x3d, 0xf8, 0xb7, 0x2d, 0x7c, 0x29, 0x08, 0x9c, 0x1e, 0x10, 0xf5, 0x99, 0x3c, 0x72, 0xa7, - 0x6f, 0xe1, 0x90, 0x63, 0x3a, 0x98, 0x3f, 0xc5, 0x14, 0x7d, 0x69, 0xfe, 0xb2, 0xdb, 0x23, 0xca, - 0xef, 0x22, 0x96, 0x65, 0xe1, 0x1b, 0xf0, 0x99, 0x48, 0x6a, 0xa6, 0x45, 0xdd, 0x70, 0x92, 0x48, - 0x1a, 0xd9, 0xd2, 0xf1, 0xe4, 0x69, 0x18, 0x6d, 0x22, 0xea, 0x51, 0xd6, 0xd5, 0xab, 0xb8, 0xfd, - 0xe8, 0x2f, 0x1e, 0x69, 0x17, 0x1c, 0xc3, 0x29, 0xb8, 0x6a, 0x2e, 0x8c, 0x2b, 0x18, 0x88, 0x35, - 0xa2, 0x17, 0x89, 0x18, 0x5c, 0xb4, 0xae, 0xae, 0xc4, 0x75, 0x19, 0x52, 0xc2, 0xe8, 0xfc, 0xad, - 0x2b, 0xaf, 0x38, 0x38, 0xed, 0x3f, 0x4d, 0xa3, 0x02, 0xff, 0xe1, 0x11, 0x79, 0x95, 0x94, 0xc8, - 0xb8, 0x99, 0x04, 0x5d, 0x9d, 0x94, 0x85, 0x41, 0x1f, 0x3c, 0x61, 0x28, 0xce, 0x45, 0x7b, 0xe9, - 0xed, 0xf9, 0x6d, 0x21, 0x81, 0x5f, 0x7b, 0xf1, 0x21, 0x43, 0x92, 0xa3, 0x10, 0xf4, 0x60, 0xa9, - 0x26, 0x0b, 0x61, 0xb1, 0x91, 0x49, 0x70, 0xbf, 0x96, 0xdc, 0xa3, 0x82, 0x6a, 0x2b, 0x69, 0xaf, - 0xf1, 0x10, 0x56, 0x5b, 0x21, 0x41, 0x5a, 0x11, 0x58, 0xf9, 0xd4, 0x45, 0x62, 0xb1, 0x5c, 0xcc, - 0xe1, 0xe1, 0x4c, 0x7f, 0x4a, 0xea, 0xac, 0x3e, 0xc3, 0x9a, 0xb1, 0x59, 0xcd, 0x0b, 0xd7, 0xa4, - 0x0a, 0x6f, 0xbc, 0x9f, 0xb1, 0x58, 0xf8, 0x50, 0x95, 0x16, 0xf4, 0xd0, 0x71, 0x9a, 0x9e, 0xf6, - 0xae, 0x5e, 0xde, 0x20, 0x11, 0x08, 0x1a, 0x68, 0x70, 0x96, 0xc2, 0x7f, 0x8c, 0xa4, 0x69, 0x97, - 0xa9, 0x33, 0x4c, 0x95, 0xe5, 0x48, 0xa4, 0xe6, 0x5b, 0x61, 0xa3, 0x47, 0x75, 0x56, 0xfc, 0x7e, - 0xcd, 0xf8, 0x40, 0x45, 0x4c, 0x91, 0xb4, 0xa9, 0x56, 0x20, 0xad, 0x98, 0xc5, 0x63, 0x48, 0x51, - 0xdf, 0x94, 0x4c, 0xa8, 0x40, 0xce, 0xca, 0xf5, 0xc3, 0x1d, 0x17, 0x55, 0xd1, 0xd2, 0x2f, 0x45, - 0x48, 0x97, 0x44, 0x82, 0xfa, 0x23, 0x49, 0xd1, 0x59, 0xf0, 0x58, 0x22, 0x38, 0x99, 0xe9, 0xb6, - 0xac, 0xd1, 0xa1, 0x10, 0x82, 0xae, 0xbe, 0xf8, 0xd3, 0x44, 0x81, 0xa0, 0x6f, 0x6f, 0xb4, 0x3c, - 0xc8, 0xbb, 0x93, 0x4e, 0x91, 0xf8, 0xc0, 0xba, 0x54, 0x86, 0xd6, 0x5f, 0xf8, 0x52, 0xc2, 0x0c, - 0x14, 0xa8, 0x96, 0x12, 0x09, 0xf6, 0x1d, 0x43, 0x3c, 0x4d, 0x03, 0x0d, 0x72, 0x7f, 0x8e, 0xdd, - 0x84, 0x15, 0xc9, 0x18, 0x6e, 0x79, 0x7b, 0xe2, 0x4a, 0xed, 0x41, 0xd9, 0x48, 0x4f, 0xae, 0xef, - 0xe0, 0xb6, 0xd1, 0x0b, 0xb1, 0xfb, 0x4c, 0x92, 0x3d, 0xe2, 0x01, 0x4c, 0xb7, 0x1a, 0x71, 0xad, - 0x3d, 0x13, 0x6d, 0x80, 0xa8, 0x0b, 0x1a, 0x52, 0xb0, 0xe5, 0xce, 0x9f, 0x0a, 0x08, 0x86, 0x12, - 0x0e, 0x32, 0x37, 0xed, 0x7a, 0x45, 0x98, 0xc2, 0xd7, 0x00, 0x8c, 0x36, 0x00, 0x02, 0x8a, 0x0d, - 0x9a, 0x32, 0x6b, 0x34, 0x6f, 0xeb, 0xef, 0xf8, 0x91, 0x87, 0x6e, 0x7c, 0x8c, 0xc7, 0x38, 0x15, - 0xb4, 0x35, 0x07, 0xea, 0xe6, 0x04, 0x2f, 0xde, 0x13, 0x48, 0xfb, 0x49, 0xc0, 0xb1, 0x1f, 0x51, - 0xb2, 0xbe, 0x0f, 0xbe, 0x2a, 0xe8, 0xf8, 0x2b, 0x12, 0x4a, 0xb6, 0xa2, 0xdd, 0x69, 0xe2, 0xaa, - 0x1f, 0xdf, 0x05, 0xd5, 0x46, 0xad, 0x5d, 0xef, 0xe2, 0x01, 0x4d, 0xed, 0x10, 0x84, 0x81, 0x0d, - 0x2d, 0xdb, 0xdb, 0xf7, 0xc5, 0xe4, 0x20, 0xa4, 0xf4, 0xd7, 0x13, 0xf8, 0xf2, 0xcb, 0x62, 0xb7, - 0xa0, 0xcc, 0x20, 0x2f, 0x22, 0xbb, 0xfc, 0x13, 0xf2, 0x45, 0xdf, 0x2b, 0x27, 0xff, 0x0a, 0x6a, - 0x46, 0x32, 0x74, 0x59, 0xc6, 0x08, 0x86, 0x16, 0xf6, 0x0b, 0x44, 0x3b, 0xb3, 0xe0, 0xa0, 0x8d, - 0x3d, 0x37, 0xbd, 0xfe, 0x30, 0x8b, 0x55, 0x1b, 0xac, 0xf7, 0x55, 0xae, 0x6c, 0x0a, 0xd7, 0xc2, - 0x82, 0xb0, 0x97, 0x15, 0x48, 0xd9, 0x87, 0x9a, 0x49, 0x1e, 0xd2, 0xcf, 0xcb, 0xf2, 0xf8, 0x2b, - 0xe6, 0x8e, 0x4d, 0xcb, 0x8e, 0x52, 0x5d, 0x7c, 0x58, 0x93, 0x20, 0x9b, 0x4c, 0xcf, 0x1d, 0x00, - 0x09, 0xe1, 0x81, 0x2f, 0x55, 0x74, 0xe7, 0x38, 0xd2, 0x3c, 0xb8, 0xab, 0x3d, 0x7c, 0xdc, 0xc2, - 0x16, 0xb3, 0x74, 0x76, 0x2b, 0xa3, 0x4a, 0x4e, 0x63, 0xb4, 0xd2, 0x53, 0xf5, 0xe9, 0xfa, 0x29, - 0x93, 0xe0, 0xa0, 0x44, 0xcc, 0x49, 0x98, 0xdf, 0xf3, 0x17, 0xc6, 0x99, 0x22, 0x10, 0x5a, 0xa0, - 0xd4, 0xe9, 0xfb, 0x8c, 0x2e, 0x21, 0x51, 0x7f, 0xcc, 0x9d, 0x3a, 0xff, 0xc1, 0x5f, 0x43, 0x36, - 0x34, 0xc1, 0x87, 0x8d, 0xa1, 0xa2, 0x5a, 0x61, 0xfc, 0x40, 0x52, 0x40, 0xc0, 0x5f, 0x42, 0x4a, - 0xf9, 0xbc, 0x25, 0x71, 0x07, 0x17, 0xc9, 0x06, 0x99, 0xf1, 0x87, 0x10, 0xb1, 0x05, 0x06, 0x5a, - 0x3a, 0x9e, 0x3e, 0xa4, 0x45, 0xaa, 0xae, 0xa3, 0x3c, 0xfc, 0x40, 0x53, 0x2e, 0x1a, 0x94, 0xcb, - 0x9a, 0x6c, 0xb6, 0x23, 0x63, 0xb2, 0x54, 0x82, 0x6a, 0x23, 0xff, 0xc1, 0x50, 0x86, 0x9c, 0xba, - 0xec, 0x61, 0x26, 0x29, 0xbc, 0xb0, 0xaa, 0xf7, 0xf0, 0x55, 0x3c, 0x30, 0x9f, 0xcc, 0x44, 0xf9, - 0x06, 0x5f, 0x1b, 0xd7, 0x93, 0x88, 0x00, 0x16, 0x84, 0xd7, 0xe4, 0x4c, 0x0b, 0x1b, 0xe0, 0x89, - 0x0a, 0x26, 0xc1, 0xca, 0x76, 0xf7, 0x1c, 0x46, 0xf4, 0xae, 0xa6, 0xbe, 0x4c, 0x25, 0x53, 0x7d, - 0xf8, 0xde, 0xb8, 0xa9, 0x8b, 0x46, 0x0c, 0x7b, 0xc4, 0x52, 0x89, 0x84, 0xce, 0x55, 0xb3, 0x78, - 0x1c, 0xf3, 0xdc, 0x40, 0xec, 0xb6, 0x94, 0x69, 0x31, 0xaf, 0x8e, 0x5f, 0x37, 0xc7, 0xf1, 0x9e, - 0x8d, 0xaf, 0x37, 0x96, 0x9c, 0xa6, 0xfa, 0x4d, 0x81, 0x2f, 0x3d, 0x6a, 0xe2, 0x04, 0x88, 0x1a, - 0x56, 0x1c, 0x77, 0xfc, 0x95, 0x5f, 0x88, 0x05, 0x94, 0xa9, 0x5d, 0xdd, 0xd9, 0xcb, 0x4b, 0x71, - 0x02, 0x02, 0x37, 0x7a, 0x6e, 0xe7, 0xf8, 0xfe, 0xe2, 0xcf, 0x9c, 0x40, 0x52, 0x25, 0xc3, 0xb0, - 0xff, 0x71, 0xc3, 0x92, 0x0f, 0x93, 0xa3, 0x04, 0xe7, 0x28, 0x67, 0xa1, 0x00, 0x6d, 0xd3, 0x8c, - 0x6e, 0xa6, 0xe2, 0x44, 0x82, 0x8a, 0x24, 0x37, 0xbe, 0xef, 0xf0, 0x59, 0xdd, 0xc5, 0x62, 0xb1, - 0x58, 0xad, 0xe7, 0xc9, 0xff, 0xc2, 0x25, 0x7a, 0x7a, 0xa2, 0x2a, 0x35, 0xc9, 0x01, 0x00, 0x71, - 0x11, 0xc5, 0xac, 0xcc, 0xfb, 0xa1, 0xe4, 0xc5, 0xf0, 0x56, 0x69, 0x9b, 0x1a, 0x55, 0xd6, 0x34, - 0x70, 0x8b, 0x63, 0xe2, 0xdf, 0x82, 0x12, 0x48, 0x42, 0x72, 0x19, 0x9c, 0xf8, 0x54, 0x51, 0xfd, - 0xdc, 0x3a, 0x3d, 0x69, 0x08, 0x93, 0x44, 0x04, 0x8b, 0xf0, 0x70, 0xfb, 0x62, 0xaf, 0xf0, 0xff, - 0xeb, 0x4c, 0x9a, 0xc3, 0x5f, 0x93, 0x8d, 0x88, 0x13, 0x4d, 0x41, 0x0f, 0x20, 0x80, 0xec, 0x5b, - 0x2e, 0xff, 0xf0, 0xa0, 0x9c, 0x3c, 0xd2, 0x7c, 0x9c, 0xb9, 0x07, 0x70, 0x69, 0x73, 0x61, 0x4d, - 0x49, 0x3d, 0x5d, 0x54, 0x18, 0x69, 0xbb, 0x78, 0x0e, 0x89, 0x3b, 0xf0, 0x4d, 0x49, 0x2d, 0xa8, - 0xae, 0xf3, 0xc9, 0x0a, 0x75, 0x6f, 0xac, 0x69, 0x3a, 0xfe, 0xfa, 0xf5, 0x70, 0xbe, 0x78, 0x74, - 0xd2, 0xbf, 0x8f, 0x7f, 0xfc, 0x69, 0x16, 0x9a, 0x61, 0x66, 0x21, 0xa1, 0xa5, 0xa1, 0xcc, 0x35, - 0x8e, 0x7f, 0x1b, 0x36, 0x4b, 0xfc, 0xf6, 0xb1, 0xb7, 0xfe, 0x3b, 0xe5, 0xc6, 0x62, 0xba, 0xf2, - 0xa4, 0x65, 0xf8, 0x52, 0xb5, 0xa5, 0x23, 0x5e, 0xa4, 0xb4, 0x92, 0x78, 0x60, 0x61, 0x46, 0x1b, - 0x61, 0x29, 0x71, 0x02, 0x06, 0x54, 0x89, 0xa5, 0x60, 0x30, 0x6d, 0x7f, 0x39, 0x46, 0xa0, 0x83, - 0x23, 0xb4, 0x3d, 0xd7, 0x9e, 0x3b, 0xf9, 0x59, 0x5f, 0x05, 0x22, 0x46, 0xdb, 0x7c, 0xfd, 0xb9, - 0x7e, 0x50, 0xc0, 0x65, 0x1b, 0x3d, 0xc4, 0x88, 0x04, 0xe2, 0x13, 0x10, 0xf9, 0x71, 0x2b, 0x1b, - 0x68, 0xdf, 0xe1, 0x49, 0x43, 0x02, 0xc5, 0x41, 0x15, 0x09, 0x7a, 0x64, 0xee, 0x0e, 0x98, 0xa1, - 0xe5, 0x8d, 0x1c, 0x68, 0x34, 0xdd, 0xfb, 0x28, 0xb8, 0xa0, 0xa7, 0xca, 0x31, 0x24, 0xb0, 0xf5, - 0x87, 0x9f, 0x18, 0x5c, 0xa4, 0x18, 0x38, 0x12, 0x6c, 0x29, 0xb0, 0x82, 0x31, 0x52, 0x82, 0xe6, - 0x0a, 0x8c, 0x76, 0x95, 0xcd, 0x86, 0xcd, 0x1e, 0x09, 0x88, 0xe4, 0x48, 0xc8, 0xde, 0xc1, 0xba, - 0x14, 0xfb, 0xe0, 0x97, 0xad, 0x33, 0x75, 0x97, 0xa6, 0xc7, 0x89, 0x0a, 0x0b, 0x3a, 0xe8, 0x6b, - 0x51, 0x60, 0x26, 0x0e, 0xd8, 0xfb, 0x81, 0x58, 0x40, 0xb4, 0x66, 0xfa, 0xd2, 0x8c, 0x8a, 0x11, - 0x53, 0x8c, 0xfa, 0x83, 0xa2, 0x8f, 0x85, 0x08, 0x5d, 0x9a, 0xed, 0xed, 0x88, 0xf3, 0x7f, 0xb1, - 0x9b, 0x62, 0x4b, 0x0b, 0x92, 0x7e, 0x12, 0x6c, 0x71, 0x10, 0x57, 0xad, 0x59, 0x92, 0xe9, 0xb4, - 0x81, 0xbc, 0xa4, 0x11, 0x97, 0xd3, 0x78, 0x90, 0xa1, 0x46, 0xe8, 0x95, 0x00, 0x70, 0x73, 0x85, - 0x8e, 0xc2, 0x8e, 0x7c, 0x8d, 0x15, 0xbb, 0x6d, 0x34, 0xd6, 0x03, 0xca, 0x50, 0xbb, 0x4a, 0xad, - 0x57, 0xff, 0x10, 0x08, 0xe4, 0x50, 0xf2, 0xa9, 0xfc, 0x40, 0x29, 0x2b, 0xc8, 0xec, 0xdd, 0xf4, - 0xb2, 0x92, 0x1d, 0x97, 0xe2, 0x6e, 0x63, 0xcd, 0xeb, 0xf0, 0x48, 0x64, 0x34, 0xaf, 0xff, 0x84, - 0x76, 0x37, 0xee, 0xa6, 0xe3, 0x48, 0x29, 0xfe, 0x14, 0x9d, 0x13, 0x44, 0x24, 0x74, 0x94, 0xd2, - 0x34, 0xd5, 0x4b, 0x86, 0xdc, 0xf3, 0x7f, 0x4e, 0x7b, 0x63, 0xe0, 0xae, 0x4b, 0x21, 0x18, 0x0e, - 0x8f, 0x49, 0xb4, 0xc6, 0x59, 0xc6, 0xbd, 0x93, 0x92, 0xb3, 0xe0, 0x94, 0x52, 0x4d, 0xfa, 0x08, - 0x6e, 0x9d, 0x09, 0x84, 0xe7, 0x2f, 0x8d, 0xa9, 0x98, 0xb6, 0x99, 0x2e, 0x19, 0x31, 0x59, 0x80, - 0x68, 0xe8, 0x09, 0xe9, 0xae, 0x8c, 0x47, 0x0d, 0x71, 0xe1, 0x49, 0xa5, 0x1a, 0xf5, 0xfd, 0xcb, - 0x41, 0x7a, 0x1b, 0x63, 0xb5, 0x3f, 0x13, 0x1b, 0x9b, 0x34, 0xec, 0x65, 0x20, 0xc4, 0xd4, 0xf4, - 0x18, 0xd0, 0x95, 0x7b, 0x43, 0x1d, 0xae, 0xd1, 0x6d, 0x4f, 0x7f, 0xe1, 0x6d, 0x51, 0xa3, 0xb9, - 0x56, 0xfd, 0x4a, 0x37, 0xef, 0xf1, 0x30, 0x5b, 0xbb, 0xd8, 0xdd, 0xf9, 0x43, 0x1d, 0x0b, 0x8a, - 0xb9, 0x08, 0xee, 0xef, 0xe8, 0xb5, 0xf0, 0xf0, 0x8a, 0x26, 0xcc, 0x41, 0x0f, 0xe6, 0xec, 0x76, - 0xab, 0x09, 0x05, 0x3f, 0x2d, 0xab, 0x75, 0xb6, 0xdf, 0xf8, 0x2b, 0xa8, 0xb3, 0xe9, 0xa9, 0x3f, - 0x69, 0x5c, 0x99, 0xca, 0x1e, 0x09, 0xec, 0x8b, 0x1a, 0x45, 0xa6, 0x48, 0x5f, 0x88, 0x8c, 0xcc, - 0xf2, 0xd4, 0xb1, 0xde, 0x68, 0x22, 0x70, 0xa2, 0x81, 0xc9, 0x1e, 0xf0, 0xa4, 0xe5, 0x8a, 0xcb, - 0x1b, 0x31, 0x1f, 0x2e, 0xa6, 0xfc, 0xcf, 0x60, 0xe2, 0xf5, 0xb3, 0x88, 0x8c, 0xd6, 0x52, 0x84, - 0x85, 0xd0, 0x52, 0xb6, 0xd9, 0x8b, 0xea, 0xbf, 0x05, 0x9d, 0x4c, 0x41, 0x3e, 0xa1, 0x34, 0x92, - 0x66, 0xee, 0xb9, 0x04, 0x9d, 0xa7, 0xdf, 0x1c, 0x45, 0xc9, 0x96, 0xc0, 0x7f, 0x27, 0xa1, 0x79, - 0x06, 0xe2, 0x93, 0x4c, 0x72, 0x50, 0x6f, 0x97, 0x48, 0xd8, 0xb3, 0xb8, 0x91, 0x87, 0x0a, 0x70, - 0xe6, 0xce, 0xb4, 0x12, 0x98, 0x42, 0x5c, 0x53, 0x96, 0x21, 0x67, 0x88, 0x10, 0x14, 0x3a, 0x09, - 0x21, 0xf1, 0x48, 0xec, 0x31, 0x9a, 0x7f, 0x33, 0x20, 0x37, 0x70, 0x76, 0xf2, 0xca, 0x70, 0xd5, - 0x3a, 0xc4, 0x44, 0xe3, 0x78, 0x11, 0x4c, 0x55, 0x42, 0x15, 0xaa, 0x3c, 0x22, 0x42, 0x96, 0xee, - 0xe7, 0xdd, 0x37, 0xf1, 0x22, 0x41, 0x36, 0xe8, 0x21, 0x80, 0x87, 0xbd, 0x46, 0xff, 0x1f, 0x7b, - 0x77, 0xb3, 0xb0, 0x5e, 0xf6, 0x13, 0xd0, 0x1b, 0xf8, 0x9e, 0xd1, 0x17, 0xd7, 0x5c, 0x44, 0x13, - 0x09, 0x5d, 0x76, 0x35, 0x53, 0xa7, 0x88, 0x27, 0x4c, 0xbf, 0xcc, 0x29, 0xd4, 0xac, 0x3b, 0xf8, - 0x9b, 0xa5, 0xae, 0x3f, 0x84, 0x0b, 0xc5, 0x6d, 0x49, 0x99, 0xfb, 0x5e, 0x22, 0x0a, 0x68, 0xd1, - 0x94, 0xb5, 0xbf, 0x1e, 0x41, 0xda, 0xa4, 0xff, 0x7c, 0x16, 0xe6, 0xa7, 0x79, 0xf2, 0x37, 0xc2, - 0x42, 0x1c, 0x30, 0x8d, 0x04, 0x25, 0x9b, 0xd4, 0x65, 0xa7, 0xc6, 0x92, 0x81, 0x84, 0x5e, 0xb7, - 0xcd, 0xfe, 0x06, 0xae, 0x61, 0xcb, 0xb3, 0xa4, 0xce, 0xfe, 0x1d, 0xa4, 0xb0, 0xb7, 0x28, 0xcd, - 0x4f, 0xf0, 0xf9, 0xd5, 0xa6, 0x65, 0x5a, 0x09, 0x8d, 0x8c, 0xb5, 0x0d, 0x64, 0x7c, 0x62, 0xa4, - 0x1a, 0x74, 0x2b, 0x0d, 0x5b, 0x45, 0xff, 0x0b, 0x72, 0xb1, 0xd2, 0xb2, 0xe1, 0x0c, 0xe0, 0xff, - 0xbf, 0x9f, 0xa2, 0xd4, 0x29, 0xc1, 0x38, 0x84, 0xb4, 0xe6, 0xed, 0x0f, 0x36, 0x46, 0x37, 0xcb, - 0x77, 0xfe, 0x0b, 0x8e, 0x76, 0xdd, 0x9d, 0x68, 0x75, 0xf0, 0x49, 0xc4, 0x39, 0x4d, 0xf0, 0x4e, - 0x2b, 0xbb, 0xbb, 0x8a, 0xc6, 0xe9, 0xde, 0x0a, 0x42, 0x87, 0x93, 0x4a, 0xc5, 0x56, 0xd5, 0x5a, - 0xa2, 0x5b, 0x91, 0x5c, 0x9f, 0x47, 0xbe, 0x13, 0xc8, 0xa2, 0xbc, 0x75, 0x13, 0x11, 0x0a, 0x54, - 0x5c, 0x94, 0xc4, 0x0c, 0x1a, 0xa8, 0x6c, 0xd0, 0xf5, 0x02, 0xe6, 0x32, 0x4d, 0x65, 0xbd, 0x8a, - 0xe8, 0x1c, 0xbe, 0x2b, 0x71, 0x5b, 0xa6, 0x2b, 0x4d, 0xfc, 0xb7, 0xa7, 0xf4, 0x7a, 0xf1, 0x22, - 0xed, 0xa6, 0xe5, 0xe9, 0x23, 0xb3, 0x94, 0xe2, 0x06, 0x6b, 0x54, 0x22, 0x7f, 0x1f, 0x2e, 0xe8, - 0x0d, 0x10, 0xe1, 0x23, 0xf8, 0x22, 0xba, 0x1e, 0xde, 0x20, 0x13, 0x12, 0xf2, 0xb0, 0x5a, 0x1c, - 0xb1, 0xbf, 0xd7, 0xbc, 0x4a, 0x2b, 0x9f, 0x1e, 0x27, 0x2d, 0x1d, 0xdd, 0xfa, 0x6f, 0xe0, 0x84, - 0x8f, 0x7b, 0xd7, 0x21, 0xb7, 0x7f, 0x05, 0x39, 0x69, 0xb6, 0x81, 0xd4, 0x4e, 0x3e, 0x2b, 0xb9, - 0x71, 0xb8, 0x81, 0x00, 0xa0, 0xee, 0xee, 0xe8, 0x23, 0x56, 0x43, 0x85, 0xff, 0x34, 0x4b, 0x87, - 0x20, 0xbb, 0xf3, 0xc2, 0x44, 0x9c, 0x20, 0xd5, 0xfb, 0x25, 0xce, 0x21, 0x4f, 0x4d, 0x19, 0xd4, - 0x7f, 0x86, 0xef, 0x2a, 0x3c, 0x12, 0x9a, 0xf1, 0xc3, 0xcf, 0x86, 0xf8, 0x9d, 0x25, 0x43, 0x4f, - 0x69, 0x71, 0xc2, 0x69, 0x3d, 0x27, 0xd0, 0x68, 0x9f, 0xec, 0xd5, 0xaf, 0x08, 0x0e, 0x26, 0xa6, - 0xc7, 0x85, 0x52, 0xd2, 0x1e, 0xf4, 0xf1, 0x23, 0x0b, 0x6d, 0xce, 0x62, 0x5f, 0xac, 0x8a, 0x2e, - 0xed, 0xb1, 0x31, 0x45, 0x3e, 0x11, 0x15, 0xdc, 0x8f, 0x8b, 0xa6, 0x31, 0x56, 0x24, 0x49, 0x2c, - 0x47, 0xff, 0x82, 0x6a, 0x68, 0x64, 0x8b, 0x18, 0x58, 0xcc, 0x30, 0x77, 0xf8, 0x22, 0xdd, 0xe9, - 0xeb, 0x11, 0xf0, 0x99, 0xda, 0xa7, 0x6f, 0x72, 0xef, 0x89, 0x12, 0x09, 0xc9, 0x44, 0x0f, 0x94, - 0x58, 0xd2, 0x47, 0x1e, 0xbe, 0x53, 0xbe, 0xd7, 0x13, 0xc4, 0x4d, 0x7b, 0xa3, 0xe2, 0x42, 0x45, - 0x3e, 0x5b, 0x8a, 0xd5, 0x31, 0x98, 0x89, 0xf4, 0x47, 0xf8, 0xf1, 0x97, 0xbe, 0xd9, 0x30, 0xca, - 0xb7, 0x4b, 0xca, 0x26, 0xe9, 0x7c, 0x4c, 0xe4, 0x1b, 0x77, 0x72, 0xdf, 0xe2, 0xce, 0xf7, 0xbb, - 0xb8, 0x97, 0xf8, 0x21, 0xb5, 0x4b, 0xdf, 0x05, 0xb4, 0x90, 0x3b, 0x4d, 0x35, 0x64, 0xff, 0x44, - 0xef, 0x82, 0x21, 0x12, 0x18, 0x93, 0xc1, 0x37, 0xc3, 0xda, 0x02, 0x52, 0xb7, 0x38, 0x3c, 0xc0, - 0x11, 0xc1, 0x1b, 0x62, 0x98, 0xe4, 0x04, 0x95, 0x18, 0x2c, 0x0e, 0xae, 0xb2, 0x53, 0xff, 0x04, - 0x07, 0xa6, 0xaa, 0x53, 0x89, 0x35, 0x7c, 0xce, 0xe9, 0xf2, 0x0b, 0x29, 0x7f, 0xcd, 0xd5, 0xfe, - 0xaf, 0x27, 0x57, 0x89, 0xea, 0xf2, 0xf0, 0xe6, 0xb1, 0xeb, 0xb2, 0xee, 0x6a, 0x7f, 0xb3, 0x1b, - 0x34, 0x92, 0xf2, 0x94, 0xa1, 0x81, 0x4f, 0x5c, 0xdb, 0x55, 0xe1, 0x01, 0xdd, 0x2b, 0xe2, 0xa8, - 0x42, 0xc3, 0xcd, 0xc9, 0x9e, 0x10, 0x23, 0x4d, 0xf7, 0x6d, 0x08, 0xd2, 0x23, 0xf0, 0x5c, 0x4c, - 0xb5, 0x93, 0xf1, 0x02, 0x1f, 0x55, 0xc4, 0x41, 0x50, 0x93, 0x72, 0x10, 0x46, 0xef, 0xba, 0x24, - 0x83, 0x27, 0x7b, 0x11, 0xf2, 0xaa, 0xe7, 0xc1, 0x4d, 0xb5, 0x6c, 0x83, 0x06, 0x66, 0x69, 0x9f, - 0x67, 0x18, 0x62, 0xe3, 0x11, 0x11, 0x56, 0x96, 0xb5, 0x17, 0x78, 0x90, 0x57, 0x32, 0xed, 0x65, - 0x22, 0xd7, 0x62, 0x1d, 0x6b, 0xba, 0xb8, 0x9a, 0x67, 0xe4, 0xf5, 0xab, 0xeb, 0x9b, 0x63, 0x37, - 0xfc, 0x12, 0x11, 0xf6, 0x3e, 0xf8, 0x29, 0xee, 0xe9, 0xbd, 0xf9, 0xb1, 0xfe, 0x0a, 0xcb, 0xb3, - 0x2c, 0x19, 0xb7, 0xa1, 0x51, 0x36, 0x86, 0x61, 0xe7, 0xe3, 0x1f, 0x04, 0x95, 0x3e, 0x3d, 0x5d, - 0xf0, 0x47, 0x47, 0x3f, 0x95, 0x7e, 0x24, 0x4f, 0x27, 0xd2, 0x94, 0xcf, 0x82, 0x3b, 0xbf, 0x5f, - 0x36, 0x45, 0x4b, 0xf8, 0x22, 0xd0, 0xe7, 0x50, 0xf5, 0xc3, 0xa6, 0x65, 0x53, 0xab, 0xce, 0x62, - 0xd9, 0xcd, 0x63, 0xc7, 0x29, 0x6d, 0x7a, 0x8f, 0x24, 0xee, 0xb5, 0xff, 0x08, 0x9f, 0x22, 0xf3, - 0x06, 0x0c, 0xa1, 0x83, 0x4d, 0x8d, 0xa3, 0xa5, 0x19, 0xd5, 0xa3, 0x39, 0x45, 0x72, 0xb0, 0xb8, - 0xc1, 0x2c, 0x8a, 0xce, 0x9d, 0x3b, 0xdf, 0x79, 0x1f, 0xe4, 0xbb, 0x7a, 0x89, 0x84, 0xfb, 0x4b, - 0xbb, 0x78, 0x88, 0x91, 0x45, 0x51, 0xbb, 0xcf, 0x0f, 0xc4, 0x09, 0x4f, 0x55, 0xd7, 0xc9, 0x5a, - 0xb1, 0xe2, 0x02, 0x04, 0xae, 0xc7, 0xc4, 0x57, 0x08, 0x96, 0x91, 0x58, 0xba, 0x1b, 0x8d, 0x81, - 0x40, 0x72, 0xb1, 0x5b, 0xc1, 0x1e, 0x11, 0x19, 0x56, 0x08, 0xcd, 0x9c, 0xed, 0x7a, 0x43, 0xa9, - 0x2c, 0x0c, 0x1a, 0xf7, 0x62, 0x09, 0x79, 0x71, 0xb8, 0x80, 0x8d, 0x9d, 0x05, 0x19, 0x07, 0x01, - 0x15, 0xb9, 0xc9, 0x06, 0xdf, 0x7e, 0x20, 0x20, 0x12, 0xd9, 0xdc, 0x57, 0x77, 0xe1, 0x05, 0x73, - 0x88, 0x84, 0xba, 0xa1, 0xca, 0xc5, 0xbf, 0x77, 0xbb, 0x1f, 0x89, 0x33, 0xb5, 0x7d, 0xb2, 0x7f, - 0x05, 0xc5, 0x76, 0xe6, 0xee, 0xe7, 0xce, 0xfa, 0xbd, 0x74, 0x5f, 0xfc, 0x16, 0x16, 0x66, 0x1a, - 0xc9, 0x65, 0xa5, 0xd8, 0x20, 0x2d, 0xb5, 0x01, 0x8e, 0x1a, 0x97, 0x28, 0x7a, 0x33, 0x7c, 0x10, - 0x96, 0x8e, 0xaf, 0xf2, 0x11, 0xb4, 0xef, 0xe0, 0xba, 0x9e, 0xf8, 0xae, 0x00, 0x5f, 0x30, 0xa8, - 0xc8, 0xcc, 0x82, 0xfc, 0xbe, 0x9b, 0x7e, 0x0a, 0x0b, 0xa2, 0x19, 0xcd, 0x2e, 0x94, 0x50, 0xa7, - 0x45, 0x6a, 0xe6, 0x36, 0x92, 0x7e, 0x10, 0x25, 0x00, 0x53, 0x29, 0x0c, 0xe8, 0x46, 0x4d, 0x1e, - 0x86, 0xbe, 0xc4, 0xec, 0x6b, 0xe0, 0x97, 0x76, 0x13, 0x27, 0xec, 0xfb, 0xe0, 0x84, 0xee, 0xee, - 0xfd, 0xf2, 0x93, 0x2f, 0xae, 0x11, 0x33, 0xda, 0xd6, 0x4f, 0x3a, 0x8f, 0xcb, 0x7c, 0xdf, 0x89, - 0x04, 0x82, 0x4d, 0x4d, 0x5f, 0xc4, 0x82, 0xb2, 0xd4, 0x5d, 0x4c, 0xa2, 0x72, 0x42, 0x87, 0x1e, - 0x23, 0xef, 0x8a, 0x91, 0x44, 0x8a, 0x10, 0x95, 0x68, 0x5e, 0x08, 0xcc, 0x92, 0x52, 0x90, 0x7b, - 0xe0, 0x9c, 0xa6, 0xca, 0x25, 0x43, 0x59, 0x69, 0xef, 0x82, 0xcb, 0x1a, 0x14, 0x14, 0x91, 0xf3, - 0x3f, 0x72, 0xd5, 0x0a, 0xf5, 0x7f, 0x7c, 0x25, 0x74, 0x4e, 0x33, 0x26, 0xda, 0x7c, 0x22, 0x08, - 0xef, 0x38, 0x20, 0x0a, 0x37, 0xa8, 0x99, 0xad, 0x39, 0x14, 0x93, 0x29, 0x8f, 0x62, 0x9e, 0xff, - 0x62, 0xd6, 0x82, 0x4b, 0xe8, 0x9d, 0xf0, 0x43, 0x72, 0xd1, 0xec, 0xa9, 0xf4, 0x57, 0xfa, 0xf7, - 0xc9, 0x0c, 0xa2, 0x94, 0x77, 0x6e, 0xf8, 0x26, 0x2a, 0x4f, 0xb4, 0xc8, 0xd0, 0xea, 0xf8, 0xf1, - 0xd3, 0x80, 0x06, 0xf9, 0x4d, 0x31, 0x95, 0x4b, 0x80, 0x02, 0x82, 0x60, 0x60, 0x7c, 0x18, 0x1c, - 0x72, 0x0e, 0x36, 0xac, 0x9a, 0x66, 0x4d, 0x88, 0x65, 0x23, 0x5c, 0x4d, 0xdf, 0x13, 0xd5, 0xe3, - 0x3a, 0xf7, 0xc3, 0xe3, 0x2a, 0x56, 0x37, 0x62, 0x91, 0xb9, 0xc5, 0x53, 0x56, 0xdd, 0x7f, 0xe1, - 0x02, 0xc4, 0x43, 0x69, 0x64, 0x53, 0xdb, 0x67, 0x55, 0x5c, 0x22, 0x27, 0x1e, 0x0a, 0x1a, 0x3b, - 0xa6, 0x32, 0x22, 0x20, 0x66, 0x61, 0xaa, 0x5c, 0xc7, 0x82, 0xb9, 0x25, 0x94, 0xe4, 0x68, 0x9b, - 0x1d, 0x76, 0xee, 0x85, 0x5f, 0x5a, 0xf1, 0x03, 0xea, 0x6c, 0xd5, 0x72, 0xc2, 0x76, 0x4b, 0xb8, - 0x99, 0x73, 0x30, 0x81, 0xcf, 0x8f, 0x34, 0xb4, 0xc7, 0xf1, 0xdb, 0xbb, 0xaf, 0xc1, 0x48, 0xba, - 0x11, 0xc8, 0xdc, 0xe0, 0x84, 0x8b, 0xf9, 0xe0, 0xcf, 0x73, 0xe3, 0x35, 0xaa, 0xca, 0xd9, 0x9b, - 0x9b, 0x27, 0x9c, 0x30, 0xaf, 0x13, 0xe2, 0x41, 0x57, 0x84, 0xce, 0x34, 0xa4, 0xcc, 0xb6, 0xdd, - 0x8d, 0xee, 0xe2, 0x44, 0x89, 0xb8, 0xad, 0xdc, 0x67, 0xa2, 0xda, 0xf0, 0xa4, 0xa4, 0x1b, 0x77, - 0xb7, 0x6d, 0xb9, 0xbe, 0x99, 0xfc, 0x63, 0x9b, 0xe3, 0xec, 0x49, 0x97, 0x21, 0x26, 0xc4, 0x93, - 0x02, 0xa7, 0x5f, 0x08, 0x08, 0x8d, 0x8d, 0x36, 0xdf, 0x73, 0x7e, 0xbe, 0x09, 0xcf, 0x74, 0xb2, - 0xe2, 0x5b, 0xfc, 0x40, 0x87, 0x77, 0x79, 0x8d, 0x57, 0xd1, 0xdf, 0xe5, 0xbe, 0xdf, 0x96, 0xed, - 0x3b, 0xae, 0xaf, 0xf3, 0x1e, 0x3e, 0x63, 0xae, 0x08, 0x65, 0x8e, 0xc3, 0xef, 0xa2, 0x77, 0xc1, - 0x41, 0x6c, 0x9d, 0xc9, 0x84, 0xcf, 0xdf, 0x5e, 0xf8, 0x2c, 0xd2, 0x9c, 0x8b, 0x36, 0xa9, 0x5a, - 0x6a, 0xf5, 0xc5, 0x8c, 0x45, 0x48, 0xc7, 0xd8, 0xd2, 0xa2, 0x63, 0xf0, 0x44, 0x75, 0x5e, 0x28, - 0x53, 0xa1, 0x5d, 0xf3, 0x95, 0x4f, 0x46, 0xff, 0xf7, 0x95, 0x8b, 0x7e, 0x53, 0xa4, 0x45, 0x0d, - 0x7e, 0x09, 0xc8, 0xf9, 0xc8, 0x3b, 0xb7, 0x7f, 0x82, 0x33, 0x90, 0xb9, 0x84, 0x1a, 0x1d, 0x7c, - 0xb9, 0xbf, 0xc4, 0x78, 0x80, 0x43, 0xb6, 0xd5, 0x9c, 0x48, 0x8f, 0x12, 0x24, 0x43, 0xa4, 0x8c, - 0x66, 0x45, 0x8c, 0x5d, 0x71, 0x02, 0x4b, 0xbd, 0xfc, 0x25, 0xbc, 0xb8, 0xaa, 0xab, 0xc4, 0x82, - 0xa3, 0xaa, 0x14, 0xbd, 0x34, 0xd8, 0x93, 0xa6, 0xc7, 0xdf, 0x04, 0xf7, 0x4d, 0xdd, 0xda, 0x7a, - 0x5f, 0x88, 0xef, 0x7d, 0x35, 0xe2, 0x66, 0xda, 0xaf, 0x84, 0xe8, 0x62, 0xe9, 0x2d, 0xcb, 0x8d, - 0xf8, 0x98, 0x2d, 0x26, 0x7f, 0x7e, 0xdf, 0xef, 0x82, 0x21, 0x22, 0xb7, 0x38, 0x60, 0x37, 0xdf, - 0x57, 0xfa, 0xbf, 0xd5, 0xfe, 0xbd, 0x27, 0x36, 0x9a, 0x7f, 0x5e, 0xf8, 0x24, 0xad, 0x3f, 0x57, - 0x04, 0x43, 0x1d, 0xf2, 0x27, 0xd9, 0xf5, 0x4c, 0x27, 0xc1, 0x3d, 0x57, 0x5b, 0x47, 0x56, 0xef, - 0x82, 0x83, 0x31, 0x21, 0xda, 0xd5, 0x6f, 0x5c, 0xa5, 0x55, 0xfc, 0x41, 0x49, 0x4e, 0xd5, 0x52, - 0x7d, 0x1f, 0xff, 0x0a, 0x19, 0x55, 0x55, 0xde, 0xc6, 0xd9, 0x7d, 0x72, 0xca, 0xff, 0x1d, 0xdd, - 0xc9, 0xac, 0x6f, 0xce, 0xa6, 0xff, 0x82, 0x4e, 0xa8, 0x6f, 0xc4, 0x88, 0x11, 0xe7, 0xc9, 0x33, - 0xc4, 0xc7, 0x45, 0xc5, 0xd5, 0x55, 0x2b, 0xd5, 0x57, 0x12, 0x24, 0x23, 0xab, 0x3a, 0x9b, 0x1b, - 0x9a, 0x96, 0xbe, 0x0a, 0x88, 0x4c, 0x64, 0x5a, 0xe5, 0xff, 0x4d, 0xfd, 0xf2, 0x15, 0x8d, 0x8d, - 0x8d, 0x8f, 0x89, 0x04, 0xb7, 0x77, 0x7b, 0xdd, 0xea, 0x26, 0x42, 0x3d, 0xdf, 0x11, 0x04, 0x22, - 0x53, 0x6d, 0x08, 0xdf, 0xff, 0x04, 0x57, 0x15, 0x9d, 0x43, 0xc8, 0x3d, 0x7c, 0x4f, 0x54, 0x95, - 0x3d, 0x75, 0x7f, 0xab, 0xfc, 0x10, 0xd5, 0xaa, 0x06, 0xff, 0x57, 0xf9, 0xaf, 0x69, 0x7d, 0x11, - 0xfe, 0x0a, 0x88, 0xef, 0x9b, 0xfc, 0xc1, 0x80, 0xb6, 0xff, 0x42, 0x5f, 0xea, 0x8e, 0xfc, 0x10, - 0x88, 0x52, 0x66, 0x5c, 0xae, 0x38, 0xa9, 0x37, 0xd9, 0xac, 0xec, 0x1a, 0xe7, 0x79, 0xe0, 0x00, - 0x00, 0x00, 0x01, 0x41, 0x9a, 0x21, 0x10, 0xb0, 0x11, 0xa1, 0x1c, 0xb7, 0xbc, 0x25, 0xd0, 0xda, - 0x87, 0xb8, 0xb1, 0x0d, 0x20, 0x63, 0xae, 0xa5, 0xa9, 0xb3, 0xa8, 0xd1, 0xf8, 0x6e, 0x70, 0x96, - 0x03, 0x22, 0xf8, 0x23, 0x20, 0x81, 0x8d, 0xc6, 0x7f, 0xe5, 0x99, 0x2e, 0x54, 0x45, 0xe8, 0x93, - 0x80, 0x87, 0x43, 0xdf, 0xe4, 0x20, 0xa0, 0xc5, 0x06, 0x28, 0x31, 0x41, 0xae, 0x72, 0xb9, 0xf1, - 0x82, 0x3a, 0xf8, 0x6f, 0x85, 0x45, 0x4e, 0x21, 0x9d, 0xc8, 0x7d, 0xfa, 0x6d, 0x6f, 0x21, 0x8f, - 0xf8, 0x21, 0x2b, 0x69, 0xf7, 0xf9, 0x32, 0xde, 0x6e, 0xb1, 0x7d, 0x08, 0xaf, 0xa1, 0x24, 0x28, - 0xee, 0x6f, 0x0c, 0xad, 0x42, 0xea, 0x7a, 0x11, 0xe8, 0xf1, 0x46, 0x70, 0x99, 0xad, 0x9d, 0x8f, - 0x95, 0x81, 0x3d, 0x08, 0x74, 0x6f, 0x30, 0xf4, 0xd2, 0xcb, 0xd5, 0x97, 0xc2, 0x74, 0xe9, 0x5a, - 0x6b, 0x5c, 0x10, 0x88, 0x40, 0xd5, 0x9a, 0xcb, 0xe0, 0xc3, 0x4d, 0x24, 0xe3, 0x68, 0x48, 0x0b, - 0x1c, 0x84, 0x71, 0x61, 0xc6, 0xc2, 0xf2, 0x72, 0x89, 0x05, 0x68, 0x44, 0x15, 0x2d, 0x01, 0x5a, - 0x40, 0x56, 0x68, 0x02, 0xdc, 0xbe, 0x1c, 0xc7, 0x3e, 0x1d, 0xc7, 0xfd, 0xd3, 0xe3, 0x95, 0xf4, - 0xf1, 0x8f, 0x7d, 0x22, 0xf2, 0x68, 0xc4, 0xbe, 0xb9, 0x88, 0x3f, 0x4d, 0x7d, 0x3f, 0x0f, 0x0a, - 0x4d, 0x4d, 0xe3, 0x62, 0x86, 0x50, 0x1b, 0x82, 0x71, 0x27, 0x96, 0x40, 0xf2, 0xdf, 0xcd, 0xd7, - 0xc3, 0x62, 0xc2, 0x15, 0x21, 0x2c, 0x8e, 0x01, 0x13, 0x6d, 0x30, 0xdf, 0x65, 0xc3, 0xaa, 0x02, - 0x20, 0x37, 0x46, 0x1e, 0x7b, 0x0b, 0x32, 0xff, 0x06, 0x05, 0xc3, 0x4c, 0xb2, 0x26, 0x5b, 0x0d, - 0x32, 0xc8, 0x99, 0x62, 0xa7, 0x55, 0x2d, 0x54, 0xbf, 0x5c, 0x64, 0x33, 0x0b, 0xe7, 0xa9, 0x83, - 0x49, 0x03, 0xa7, 0x4d, 0x31, 0xaf, 0x27, 0x21, 0xb4, 0x5e, 0x4b, 0xfc, 0x5e, 0x18, 0xa5, 0x6a, - 0x03, 0x5a, 0xeb, 0x99, 0x39, 0x6c, 0x54, 0x09, 0x24, 0x01, 0xf0, 0x3e, 0x58, 0x3d, 0x3c, 0x20, - 0xd5, 0xdc, 0xff, 0xc6, 0x90, 0x3c, 0xbd, 0x74, 0x1e, 0x10, 0x0f, 0xcb, 0x55, 0xe5, 0x1c, 0x68, - 0x31, 0x8c, 0xd0, 0xd0, 0x85, 0x9d, 0xdb, 0x2a, 0x83, 0xc2, 0x5e, 0x0f, 0xa8, 0x71, 0x38, 0x03, - 0xb9, 0x70, 0xec, 0xd6, 0xe3, 0x87, 0x36, 0x3c, 0x5e, 0x10, 0xd2, 0x16, 0x7a, 0xf0, 0xfe, 0x57, - 0x22, 0x70, 0xe8, 0x69, 0x3c, 0x63, 0x06, 0x6e, 0xf8, 0x3e, 0x3f, 0xe6, 0xe1, 0xc1, 0xf6, 0x1a, - 0x1d, 0xfb, 0x31, 0x06, 0x9b, 0xce, 0x52, 0xa7, 0x1c, 0x96, 0xb2, 0x5f, 0xfe, 0xf0, 0x3e, 0xda, - 0x3f, 0x86, 0x61, 0x3b, 0x03, 0xbe, 0x51, 0xaa, 0xfe, 0x48, 0x08, 0x8c, 0x72, 0x74, 0x4c, 0x85, - 0xb2, 0xf1, 0x06, 0x0c, 0x10, 0xb6, 0x34, 0xd3, 0x46, 0xa5, 0x38, 0x40, 0x68, 0x41, 0x45, 0xc6, - 0xda, 0x91, 0xda, 0x19, 0xbc, 0x1b, 0x69, 0x50, 0xf1, 0xbd, 0xe3, 0x2f, 0xad, 0x07, 0xfd, 0xf9, - 0x00, 0x43, 0x7f, 0x67, 0xde, 0xe5, 0xe8, 0x9f, 0xbb, 0x47, 0x27, 0x58, 0x45, 0x22, 0xdc, 0x4e, - 0x60, 0x68, 0x27, 0x90, 0xc9, 0x0f, 0x51, 0x89, 0xdc, 0x2a, 0x89, 0x37, 0x87, 0xda, 0x82, 0xad, - 0xa8, 0x76, 0x23, 0x6f, 0x5c, 0x6c, 0xc3, 0x06, 0x25, 0xa6, 0xc2, 0x0e, 0xdd, 0x84, 0xd2, 0xe7, - 0x08, 0x0d, 0xa6, 0xac, 0x37, 0xd3, 0x0e, 0x54, 0x9a, 0x0b, 0x33, 0x2f, 0xbe, 0x0d, 0xea, 0xb3, - 0x96, 0x01, 0xef, 0x89, 0xf5, 0x60, 0x5f, 0xfa, 0x8f, 0xa7, 0x3b, 0x0c, 0x8c, 0xa4, 0x41, 0xb7, - 0x94, 0xe3, 0xeb, 0x43, 0x6f, 0xd6, 0x6d, 0x1c, 0xcd, 0x6e, 0xaa, 0xa2, 0xd6, 0xbe, 0xd8, 0x1d, - 0x7f, 0x11, 0x87, 0x9e, 0x37, 0x3d, 0x47, 0xee, 0x4b, 0x02, 0x3d, 0x48, 0xcf, 0xf8, 0x90, 0xd9, - 0xc9, 0x18, 0xee, 0x54, 0x3e, 0xdf, 0x0e, 0x28, 0x6d, 0xd4, 0xf2, 0xbb, 0x05, 0xb7, 0xe2, 0x22, - 0x4a, 0xb5, 0x4b, 0xe1, 0xd1, 0xe2, 0x56, 0x46, 0xbd, 0x77, 0xda, 0x66, 0x3b, 0x4b, 0xb3, 0x7c, - 0x3f, 0x97, 0xb1, 0x54, 0xef, 0x07, 0x54, 0x3d, 0x04, 0x8a, 0xa4, 0x78, 0x80, 0xdf, 0x7b, 0x78, - 0x06, 0xc0, 0xf3, 0xf6, 0x92, 0x50, 0x9b, 0x5d, 0xf1, 0xb2, 0x25, 0x52, 0xb9, 0x52, 0xd1, 0x82, - 0x9b, 0x44, 0xa1, 0x9b, 0xc8, 0x54, 0xd0, 0x85, 0x4f, 0xb7, 0x60, 0xd7, 0x94, 0xa6, 0x34, 0x2a, - 0x7d, 0x8e, 0xc1, 0x6e, 0xf4, 0xcd, 0xa2, 0x1a, 0x8f, 0xf3, 0xb7, 0xf0, 0x61, 0xd5, 0x79, 0x57, - 0x87, 0xfd, 0xf3, 0xa1, 0xd9, 0xf4, 0xfb, 0xdf, 0xa7, 0xd3, 0x6b, 0xb7, 0xc1, 0x87, 0x8c, 0x8f, - 0x41, 0xaf, 0x2d, 0x68, 0xf4, 0xeb, 0xcf, 0xa7, 0xdf, 0xe3, 0x4d, 0x39, 0x06, 0x88, 0xe3, 0x0a, - 0x74, 0xcf, 0x7b, 0x99, 0x46, 0xae, 0x04, 0x08, 0x49, 0xcb, 0xe2, 0xa9, 0xcb, 0xf0, 0x8a, 0x0c, - 0xd4, 0xe6, 0x22, 0x76, 0xb2, 0xae, 0xff, 0x85, 0x4e, 0x35, 0xe5, 0x5e, 0xf5, 0x5e, 0x55, 0xef, - 0x4d, 0xff, 0x24, 0x24, 0x87, 0x88, 0xaa, 0xf2, 0xaf, 0x7a, 0xaf, 0x2a, 0xf7, 0xf8, 0xda, 0xaf, - 0x2a, 0xf7, 0xaa, 0xf2, 0xaf, 0x7c, 0x69, 0x31, 0x54, 0x98, 0x48, 0x8a, 0x6a, 0x6a, 0xc5, 0xfb, - 0x46, 0xdb, 0xf5, 0x6a, 0x0d, 0xb4, 0xe8, 0x0d, 0xf2, 0xe7, 0x5a, 0x1d, 0x94, 0xe9, 0x93, 0x4c, - 0x68, 0x46, 0xd6, 0xee, 0x66, 0xfd, 0xfa, 0x1b, 0xa8, 0x7f, 0x85, 0x6c, 0x48, 0x24, 0xa6, 0xa8, - 0xf1, 0x26, 0xf1, 0xb0, 0x20, 0xdd, 0x61, 0xff, 0xfd, 0x68, 0x8f, 0x68, 0x55, 0x7f, 0xe1, 0x6a, - 0x58, 0x6d, 0x7a, 0x1b, 0x97, 0xff, 0xc7, 0x7d, 0xa9, 0x25, 0x90, 0xb6, 0x06, 0xa6, 0x05, 0x22, - 0x6e, 0xfc, 0x5a, 0xfa, 0xf2, 0xea, 0x18, 0x4c, 0xcf, 0xdc, 0x7f, 0x8d, 0xe1, 0xf6, 0x58, 0x7c, - 0x70, 0x19, 0xfd, 0xde, 0xc8, 0xd5, 0x7e, 0xcb, 0x4b, 0x55, 0x4d, 0xf3, 0xe6, 0x55, 0x4c, 0x60, - 0xd5, 0xe9, 0x6d, 0x28, 0xbd, 0x59, 0xc5, 0xc2, 0x0e, 0xb9, 0x67, 0x2e, 0x2f, 0xcf, 0xe8, 0xb6, - 0x47, 0x4f, 0xa6, 0xd9, 0x9e, 0x2f, 0xd6, 0xf9, 0x6f, 0xb5, 0xbe, 0x5b, 0xef, 0x1b, 0x31, 0xc5, - 0xa6, 0x34, 0x88, 0x0e, 0xfb, 0xfe, 0x75, 0xa4, 0x1e, 0x56, 0x60, 0xff, 0xb8, 0x0d, 0x51, 0xc4, - 0x36, 0x97, 0xf8, 0x35, 0xfa, 0xdd, 0x14, 0x52, 0xb7, 0x10, 0xe5, 0xf7, 0xb3, 0xae, 0x26, 0x80, - 0x56, 0x20, 0xd3, 0xbe, 0x13, 0x9a, 0xa8, 0x59, 0x63, 0x9c, 0xc5, 0x0d, 0x8a, 0xd4, 0xc7, 0x9e, - 0x64, 0x65, 0x89, 0x3a, 0x24, 0xee, 0xdd, 0x2e, 0xf9, 0xe4, 0x49, 0x34, 0x9b, 0xfd, 0x75, 0x32, - 0x2a, 0x5c, 0x25, 0x9f, 0xe7, 0xff, 0xcf, 0x4a, 0xbf, 0x36, 0x9b, 0x7c, 0xf2, 0x24, 0x9a, 0x4d, - 0xff, 0xcf, 0x1d, 0x89, 0x68, 0xc6, 0x8c, 0x68, 0xc6, 0x9c, 0x6b, 0x16, 0xc5, 0xbf, 0x3c, 0x89, - 0x26, 0x93, 0x7f, 0xf8, 0x7e, 0x32, 0xd0, 0xb7, 0xda, 0xd6, 0x81, 0xb7, 0x1f, 0x68, 0x62, 0x5f, - 0xca, 0x9c, 0xda, 0x6d, 0xff, 0x04, 0x11, 0x96, 0x85, 0x2d, 0x1f, 0x09, 0x5a, 0xed, 0x19, 0x8e, - 0x92, 0x3b, 0x50, 0xbf, 0xde, 0x44, 0x54, 0x4d, 0x26, 0xfc, 0xfa, 0x7d, 0xf3, 0xd2, 0xaf, 0xcf, - 0xa7, 0xdf, 0x19, 0x0e, 0xe7, 0x7f, 0x19, 0x68, 0xf8, 0xef, 0xbe, 0x31, 0x2f, 0xfe, 0x78, 0x24, - 0x62, 0x96, 0x43, 0x31, 0x61, 0x0d, 0x4b, 0x61, 0x17, 0x45, 0x42, 0x79, 0xa1, 0x5d, 0x18, 0x88, - 0xcf, 0xc2, 0xb6, 0xd1, 0x37, 0x24, 0xd1, 0xe3, 0x51, 0x45, 0x63, 0x32, 0x84, 0x2c, 0x1e, 0xff, - 0xf0, 0x46, 0x29, 0x0e, 0xbe, 0x93, 0x9c, 0x69, 0x12, 0x4d, 0x26, 0xfe, 0x4e, 0xa6, 0x94, 0xae, - 0x1f, 0xe6, 0x21, 0x1d, 0x68, 0x13, 0xa7, 0xe2, 0x5f, 0x48, 0x4c, 0x68, 0xa7, 0x27, 0x90, 0xaa, - 0xcf, 0xbf, 0x0d, 0xe3, 0x1e, 0xe9, 0xd7, 0xed, 0x9f, 0x75, 0xcf, 0x32, 0x38, 0xf9, 0x74, 0xba, - 0x68, 0xb3, 0x7c, 0x4c, 0x68, 0x4b, 0x69, 0x5d, 0x1a, 0xd1, 0x64, 0x46, 0x6e, 0x48, 0x8b, 0x68, - 0x8b, 0x4c, 0x47, 0x62, 0x88, 0x24, 0xb0, 0x93, 0xe5, 0xea, 0xca, 0x6d, 0x2b, 0xa0, 0x3a, 0xea, - 0x7b, 0x2d, 0x49, 0xda, 0xc5, 0x40, 0xc0, 0xa1, 0xc5, 0xb7, 0xe5, 0x4a, 0x1a, 0xa8, 0x22, 0xde, - 0x43, 0x0d, 0xab, 0xc1, 0x8e, 0x39, 0x52, 0x50, 0x7a, 0xed, 0x7f, 0xe2, 0x46, 0xd3, 0x6a, 0x1f, - 0x3a, 0x6f, 0x75, 0x01, 0x5b, 0xdb, 0xdd, 0xc8, 0xce, 0xfa, 0x9c, 0x78, 0xfd, 0x5e, 0xf3, 0x95, - 0x47, 0xf6, 0x70, 0x30, 0x3a, 0xea, 0x1b, 0x1b, 0x93, 0x33, 0xbc, 0x5f, 0x0a, 0x0c, 0x06, 0x19, - 0x68, 0x8a, 0x2d, 0x99, 0x53, 0x18, 0xce, 0xd2, 0x8d, 0xa8, 0x0d, 0xda, 0xed, 0x19, 0xf7, 0xc5, - 0xe9, 0x03, 0x04, 0x09, 0x8e, 0x94, 0x32, 0xba, 0x21, 0x9f, 0xf8, 0xf2, 0xbe, 0xe8, 0xbe, 0x47, - 0x39, 0x87, 0xbf, 0xe6, 0x1c, 0x63, 0x61, 0x95, 0x82, 0x43, 0x22, 0x78, 0x5b, 0xe2, 0x03, 0xe5, - 0xaa, 0xc0, 0xc7, 0x1d, 0xdb, 0x14, 0xc4, 0xcc, 0xc9, 0x85, 0xa8, 0xdf, 0x65, 0xef, 0xa5, 0xf5, - 0x73, 0x15, 0x2f, 0xf3, 0x61, 0x7d, 0x01, 0x3d, 0x3d, 0xbf, 0x47, 0xe7, 0x0e, 0x39, 0xee, 0xee, - 0xfe, 0x17, 0x1f, 0xc7, 0x7c, 0xb7, 0xcb, 0xfc, 0xbf, 0xcb, 0x7c, 0xb7, 0xc9, 0x57, 0xf3, 0x69, - 0xb7, 0x89, 0x0a, 0xc6, 0x3c, 0xa3, 0xde, 0xa3, 0xca, 0x3d, 0xe3, 0xb2, 0xa3, 0xe9, 0xf4, 0xda, - 0xed, 0xcd, 0xa6, 0xdf, 0x04, 0x17, 0xc7, 0x87, 0x60, 0xd5, 0x3c, 0x75, 0xa0, 0x7d, 0x48, 0x2f, - 0x1d, 0xe6, 0x1a, 0x21, 0xb5, 0x77, 0xa2, 0xdb, 0x6a, 0x5b, 0xff, 0x0a, 0x0a, 0x19, 0x5d, 0xf6, - 0xb2, 0xca, 0xb3, 0x83, 0xda, 0x5b, 0xa8, 0x60, 0x40, 0x2e, 0x83, 0x50, 0x6a, 0x40, 0xd9, 0xfc, - 0xe6, 0x5f, 0x1a, 0x24, 0x31, 0xcc, 0x64, 0xd1, 0x27, 0xd5, 0x51, 0x62, 0x76, 0x5a, 0x45, 0x2d, - 0x76, 0x92, 0x98, 0xfa, 0x4c, 0x66, 0x8e, 0x1d, 0xb8, 0xb4, 0x3f, 0xf3, 0xe4, 0x12, 0x7e, 0xc0, - 0xd1, 0x73, 0xf0, 0x6a, 0x6a, 0xdc, 0xc8, 0x96, 0x3c, 0x31, 0x18, 0x70, 0x0c, 0xd4, 0x5b, 0x51, - 0xe2, 0x66, 0xd8, 0xff, 0x1a, 0x4d, 0x4c, 0xac, 0xd8, 0x34, 0x66, 0xcb, 0x40, 0x4c, 0xd6, 0x05, - 0x51, 0x8b, 0xef, 0x86, 0xb6, 0xf8, 0x0d, 0x3e, 0xe2, 0xaf, 0x76, 0x74, 0x9b, 0xd1, 0xca, 0xe9, - 0x47, 0x57, 0xf1, 0x91, 0xba, 0xc3, 0xbf, 0xfb, 0x16, 0xa2, 0xf1, 0xe9, 0x1c, 0x96, 0xba, 0x6c, - 0xeb, 0x6c, 0x79, 0xce, 0x9d, 0x7f, 0xf6, 0x1a, 0xd0, 0xd1, 0xc9, 0xa3, 0x93, 0x5e, 0x17, 0xaa, - 0xf6, 0x2f, 0x3f, 0x4f, 0x73, 0x89, 0x78, 0x94, 0x8e, 0xbc, 0x86, 0x88, 0x68, 0xe4, 0xd1, 0xc9, - 0xa8, 0x71, 0x51, 0x32, 0xdf, 0xff, 0x36, 0x9b, 0x73, 0x69, 0xb4, 0x45, 0xa1, 0xc9, 0xa1, 0x50, - 0xb4, 0xe3, 0x8d, 0x3f, 0x0a, 0xfc, 0x77, 0xda, 0xaf, 0x2a, 0xf2, 0xa6, 0x87, 0x60, 0x8e, 0x08, - 0x94, 0xc4, 0xe6, 0x89, 0xe3, 0x0d, 0x86, 0xf0, 0x47, 0xa9, 0x3f, 0xbb, 0xf8, 0x5b, 0x8b, 0xca, - 0xbd, 0xf8, 0xd7, 0xb1, 0x8a, 0x14, 0xad, 0xf7, 0x8d, 0x3f, 0xd7, 0x54, 0x5c, 0x7a, 0x95, 0x2b, - 0xa9, 0x52, 0xf9, 0xc8, 0x3e, 0xa4, 0x92, 0x69, 0xff, 0xa8, 0xf2, 0xf9, 0x32, 0xd0, 0xc4, 0x1f, - 0xc9, 0x9e, 0x8c, 0xff, 0x75, 0xd5, 0x7d, 0xf5, 0x1f, 0x4f, 0xd1, 0x22, 0xbe, 0xb0, 0x87, 0xab, - 0x49, 0xd6, 0x29, 0xba, 0xa6, 0x5e, 0xa9, 0x52, 0xeb, 0x17, 0xd6, 0x2f, 0x10, 0x30, 0x21, 0x14, - 0x6e, 0xfc, 0xde, 0x02, 0x4f, 0x00, 0x77, 0xac, 0x58, 0xc4, 0xdd, 0xf3, 0x66, 0xf2, 0x90, 0xd4, - 0x54, 0x86, 0x10, 0x1a, 0x98, 0x31, 0xff, 0x12, 0x36, 0x61, 0xd2, 0x2c, 0x3b, 0xc6, 0x85, 0xaf, - 0x80, 0xd8, 0x54, 0xdf, 0xe9, 0x2c, 0x2c, 0x26, 0x6e, 0x1a, 0x58, 0x65, 0xae, 0x27, 0x3f, 0x6b, - 0xdc, 0xbf, 0xb4, 0x93, 0xe2, 0xde, 0xaf, 0xee, 0x8d, 0x34, 0xf9, 0x0a, 0x75, 0x9b, 0xff, 0xab, - 0xf1, 0x8d, 0xbb, 0x48, 0x5d, 0xd3, 0xf3, 0x7a, 0x01, 0xf1, 0x03, 0xad, 0xd2, 0xa8, 0x27, 0x7c, - 0x46, 0x9f, 0x88, 0x8c, 0xec, 0x63, 0x37, 0xad, 0xf0, 0x24, 0x5c, 0xfd, 0x19, 0xe0, 0x19, 0x57, - 0x1b, 0x0e, 0x20, 0x28, 0x41, 0x68, 0x60, 0xd7, 0xed, 0xc5, 0xba, 0x17, 0x18, 0x49, 0xa8, 0x24, - 0xa3, 0x4f, 0xad, 0x34, 0x21, 0x57, 0x4c, 0x67, 0x56, 0xac, 0x43, 0xee, 0x9c, 0xff, 0x04, 0xc1, - 0x5c, 0x4f, 0x18, 0xc9, 0xa5, 0xea, 0x99, 0x54, 0xbe, 0x63, 0x28, 0xd3, 0xd0, 0x5c, 0xe8, 0x00, - 0x07, 0xc2, 0x83, 0x27, 0x00, 0x0a, 0x90, 0x0c, 0xe9, 0xd8, 0x69, 0xae, 0x52, 0x63, 0xb5, 0xa4, - 0x00, 0xe2, 0x47, 0x25, 0x27, 0x01, 0x30, 0x1a, 0xd5, 0xe8, 0x7a, 0x1b, 0x7b, 0x8e, 0x7d, 0xc9, - 0x7c, 0x87, 0x24, 0xdd, 0xa6, 0xc0, 0xdb, 0xca, 0x50, 0x30, 0xb4, 0xa0, 0xbd, 0xbe, 0x73, 0x7c, - 0x69, 0x38, 0x1d, 0x9c, 0x58, 0xfe, 0x8d, 0x5f, 0x8b, 0x34, 0xe2, 0x91, 0x02, 0x30, 0x23, 0x26, - 0x6e, 0xd2, 0x2a, 0x68, 0x18, 0x1d, 0xe6, 0x8f, 0x8e, 0x15, 0x26, 0x9d, 0x1f, 0x6a, 0xff, 0x83, - 0x08, 0xd9, 0xe9, 0x43, 0x06, 0x0d, 0xac, 0xd2, 0x73, 0x10, 0x1f, 0xf4, 0xba, 0xb7, 0xa0, 0xc6, - 0x39, 0x1c, 0x80, 0x2d, 0x98, 0xf3, 0xe4, 0x5d, 0x99, 0x88, 0x54, 0x93, 0x0b, 0x25, 0xa0, 0x00, - 0x83, 0xd9, 0x04, 0x94, 0xc6, 0x4d, 0xbf, 0xf1, 0x01, 0x49, 0xbb, 0x4f, 0x49, 0xe9, 0x1b, 0xd9, - 0x46, 0xda, 0xaa, 0x01, 0x1f, 0x7a, 0xef, 0xf5, 0xb0, 0x0a, 0x9b, 0x13, 0xb3, 0x6b, 0xc1, 0xda, - 0x52, 0x05, 0x4f, 0x87, 0x5d, 0xb2, 0xad, 0xe2, 0x01, 0x5d, 0x1c, 0xd3, 0xd0, 0x89, 0xd9, 0xa0, - 0x4b, 0x8f, 0xb5, 0xd0, 0x86, 0x06, 0x80, 0xc6, 0xc2, 0x08, 0xf4, 0x24, 0x7f, 0x01, 0xaf, 0xd3, - 0xa3, 0x81, 0xc3, 0xc1, 0x48, 0x5f, 0x54, 0xe2, 0x16, 0x2f, 0x73, 0xb3, 0x45, 0x4b, 0xc8, 0x79, - 0xb2, 0x27, 0xc3, 0xbd, 0x05, 0x3a, 0x23, 0xa1, 0x29, 0x97, 0xaf, 0x7d, 0x7b, 0xeb, 0xff, 0x08, - 0x02, 0x71, 0xcf, 0x8c, 0xa7, 0x53, 0xac, 0x17, 0xd5, 0x02, 0x25, 0xa0, 0x30, 0x6e, 0xa4, 0xbe, - 0x14, 0x20, 0x31, 0xe4, 0x48, 0x69, 0x3a, 0x3b, 0x47, 0x45, 0x8e, 0xcd, 0xcc, 0xa2, 0x53, 0x1a, - 0x10, 0x14, 0xf2, 0x29, 0xcc, 0xd1, 0x22, 0x99, 0x65, 0xa1, 0x8b, 0x14, 0xb1, 0xb3, 0x3c, 0xeb, - 0x89, 0x0a, 0x7d, 0x8d, 0xb9, 0xdd, 0xf9, 0x33, 0xb8, 0xf9, 0x96, 0xfc, 0x21, 0x04, 0xc1, 0x34, - 0xeb, 0xd3, 0x77, 0xfa, 0xf7, 0xcd, 0xd5, 0x7c, 0x28, 0x12, 0xe5, 0xe7, 0xa5, 0xb7, 0xa7, 0xab, - 0x5c, 0xec, 0x3b, 0x1b, 0x2f, 0xc6, 0x1e, 0x0b, 0x65, 0xb3, 0xd9, 0xf3, 0x47, 0x73, 0x37, 0xbe, - 0x14, 0x1e, 0x8d, 0x05, 0xd9, 0x86, 0xa8, 0xdb, 0x46, 0x9a, 0x05, 0xb2, 0xb2, 0xb5, 0xf6, 0x3d, - 0xd9, 0x6e, 0xd7, 0xef, 0x82, 0x7b, 0xd7, 0x33, 0xe1, 0x8e, 0x18, 0x35, 0x4d, 0x35, 0xd5, 0x5d, - 0x46, 0x71, 0x30, 0x58, 0x64, 0x98, 0x1d, 0x5a, 0xc3, 0x3f, 0xa8, 0xbf, 0xfe, 0x14, 0x14, 0xf5, - 0x4b, 0xc6, 0x16, 0xfa, 0x4b, 0x76, 0xf6, 0xc6, 0xad, 0x0c, 0x4a, 0xca, 0xc6, 0xd0, 0xe2, 0xd9, - 0x86, 0x06, 0x74, 0x6f, 0xc7, 0xe0, 0xef, 0x25, 0x46, 0xf2, 0xb2, 0xc0, 0x39, 0x5f, 0x71, 0x22, - 0x01, 0x30, 0xbd, 0x00, 0x00, 0x26, 0x52, 0x02, 0xad, 0x2b, 0x02, 0x36, 0xfd, 0x9d, 0x5a, 0xa9, - 0x4a, 0x7c, 0xba, 0x58, 0x04, 0x37, 0xd0, 0x55, 0xc1, 0x50, 0x8e, 0x6a, 0x17, 0xfd, 0xb4, 0x87, - 0x29, 0x7d, 0xf0, 0x46, 0x22, 0xee, 0xfd, 0xe2, 0x3e, 0x82, 0x7d, 0x37, 0x30, 0x8e, 0x6f, 0x89, - 0xfc, 0x40, 0x85, 0x67, 0x4e, 0xb5, 0xfa, 0xf3, 0x1a, 0xe1, 0x01, 0x30, 0x57, 0x89, 0x13, 0xbb, - 0xbd, 0xd3, 0x75, 0xd0, 0x4e, 0xab, 0x94, 0x2d, 0x07, 0x57, 0x83, 0x14, 0x83, 0xd8, 0xb5, 0x55, - 0xa8, 0x88, 0xb2, 0x62, 0x78, 0x06, 0xcd, 0x4b, 0x61, 0x7b, 0x55, 0x35, 0x58, 0x91, 0x05, 0x37, - 0x17, 0x7d, 0x05, 0x7b, 0xe8, 0xdd, 0x0b, 0x74, 0x35, 0xc8, 0x4f, 0x82, 0x23, 0x4b, 0xe3, 0x62, - 0x27, 0x5f, 0x62, 0xad, 0xf7, 0x5c, 0x5c, 0x92, 0x8f, 0x10, 0xb6, 0x36, 0xcd, 0xb5, 0x78, 0x44, - 0x9c, 0x79, 0x51, 0x32, 0x6e, 0x88, 0xbd, 0x45, 0xfc, 0x27, 0x3e, 0xc8, 0xd6, 0x1a, 0x6e, 0x6e, - 0xf5, 0xcd, 0x1a, 0xc9, 0xd0, 0x51, 0xde, 0x22, 0x22, 0x2b, 0xa8, 0xdd, 0x98, 0xd9, 0x2c, 0xc3, - 0x97, 0x15, 0x0b, 0x5c, 0xb1, 0x02, 0x58, 0x95, 0x8a, 0xf3, 0x4a, 0x65, 0xdb, 0xe8, 0xfd, 0x13, - 0xd1, 0x7b, 0xe8, 0xaf, 0x0b, 0x75, 0x8a, 0x5e, 0xa7, 0x4b, 0xe0, 0x93, 0x1a, 0x10, 0x22, 0x21, - 0xa5, 0x87, 0xc1, 0x60, 0xe2, 0x98, 0xc8, 0x33, 0x79, 0x64, 0x29, 0xd0, 0x6d, 0x20, 0x63, 0xca, - 0xfc, 0x48, 0x81, 0xc4, 0x8d, 0xf8, 0x5c, 0x9e, 0x68, 0xa9, 0xa6, 0x63, 0x31, 0x02, 0x54, 0x4a, - 0x7d, 0x2f, 0xc6, 0x68, 0x24, 0x9d, 0xee, 0xfb, 0x0c, 0x64, 0x00, 0x15, 0x01, 0xf2, 0xff, 0x10, - 0x5e, 0x18, 0x44, 0xd5, 0x0d, 0x00, 0x62, 0x63, 0xf1, 0x77, 0xb7, 0xc8, 0xc9, 0x2b, 0xe2, 0xb5, - 0x4b, 0x9e, 0x08, 0xbc, 0x51, 0x9d, 0xa2, 0xe2, 0x94, 0x26, 0x27, 0xe1, 0xf2, 0xaf, 0x1f, 0x71, - 0xb1, 0xb1, 0xf4, 0xe4, 0x00, 0x04, 0xef, 0x6e, 0xbf, 0xc1, 0x30, 0x4c, 0x13, 0xe2, 0x7d, 0x06, - 0x6b, 0x4d, 0x90, 0x10, 0x2e, 0x82, 0xa0, 0x33, 0xff, 0xa2, 0xba, 0x13, 0xa9, 0x3a, 0x25, 0x4b, - 0xd1, 0x35, 0x11, 0xd1, 0x5a, 0x2b, 0xa2, 0x39, 0xf5, 0xef, 0xae, 0x57, 0xd5, 0xef, 0x90, 0x72, - 0x0a, 0x34, 0x5c, 0x7f, 0x04, 0xf4, 0x97, 0x37, 0x5b, 0xda, 0xbb, 0xc5, 0xf0, 0x4a, 0x25, 0x7a, - 0x5c, 0xca, 0x98, 0x40, 0x43, 0x57, 0xe0, 0x93, 0xac, 0x45, 0xf0, 0xa1, 0x19, 0xd1, 0xb5, 0xe4, - 0x65, 0xb3, 0xc7, 0x93, 0x28, 0x45, 0x8d, 0x5f, 0x0f, 0x21, 0x34, 0x82, 0xfa, 0x6d, 0xf5, 0xbd, - 0xfe, 0x0a, 0x74, 0x66, 0x61, 0xf9, 0xb4, 0xdb, 0xf7, 0x26, 0xb7, 0x35, 0xf7, 0x3b, 0x2d, 0xb7, - 0xf0, 0x54, 0x51, 0xa6, 0xcf, 0x60, 0xdd, 0x81, 0x47, 0xd3, 0x3c, 0xef, 0xbf, 0x88, 0x1e, 0x2a, - 0xb9, 0x88, 0x70, 0xa8, 0xd8, 0x1f, 0x4d, 0x53, 0x08, 0x2f, 0xd4, 0x3b, 0xda, 0x79, 0x42, 0x20, - 0x75, 0xba, 0x51, 0x3b, 0x69, 0xae, 0x8b, 0xdf, 0x5a, 0x89, 0xea, 0xe4, 0xfd, 0x6a, 0xba, 0xc6, - 0xfa, 0xb1, 0x1b, 0xd1, 0x98, 0x8b, 0xe3, 0xc2, 0x4d, 0xea, 0xc0, 0x6e, 0x4a, 0x62, 0x98, 0x8f, - 0x52, 0x58, 0x9c, 0xf1, 0xa5, 0x78, 0xac, 0x4a, 0x18, 0x0b, 0xce, 0x71, 0xdd, 0x84, 0xf5, 0x2f, - 0x32, 0xce, 0x80, 0xa0, 0xeb, 0xec, 0xaa, 0xbd, 0x4c, 0x93, 0x72, 0x5f, 0xdc, 0xd9, 0xe1, 0x29, - 0x57, 0xb4, 0xcf, 0x40, 0xa4, 0x62, 0x4f, 0x25, 0x6b, 0xf3, 0x16, 0xaa, 0xbe, 0x14, 0xea, 0xa4, - 0x49, 0x95, 0x55, 0xea, 0xc1, 0xab, 0x8f, 0x2d, 0x6b, 0xe2, 0x01, 0x55, 0x6a, 0xa8, 0x64, 0xfa, - 0x5e, 0x96, 0xad, 0x7f, 0xf1, 0x37, 0xb2, 0xfb, 0xa2, 0x6c, 0xfe, 0x0c, 0xdd, 0x0f, 0x22, 0x5f, - 0x57, 0x01, 0x3e, 0xa9, 0xd2, 0xe8, 0x8f, 0x1d, 0xd1, 0x75, 0xe2, 0x0c, 0x4b, 0x73, 0x7e, 0x24, - 0x60, 0xe8, 0x83, 0xe2, 0x3c, 0x98, 0xdc, 0x45, 0xca, 0x54, 0xbc, 0x6d, 0xcf, 0x64, 0x28, 0x4a, - 0x27, 0xfc, 0x16, 0x11, 0x8d, 0x2a, 0xb4, 0x39, 0x63, 0xd5, 0xf1, 0x64, 0x3a, 0x98, 0x08, 0x95, - 0x9c, 0x04, 0x6f, 0x97, 0x3c, 0x5e, 0xf8, 0x29, 0x86, 0xab, 0x36, 0x76, 0x13, 0x6a, 0xf3, 0x09, - 0xd2, 0x63, 0xb7, 0xb1, 0xf3, 0x9c, 0xd8, 0x9a, 0x8e, 0xfb, 0x39, 0x18, 0x59, 0x5f, 0x14, 0x44, - 0x4c, 0x21, 0x9a, 0x9c, 0x31, 0x7e, 0x6d, 0x30, 0x1f, 0x8e, 0x29, 0xb0, 0x3d, 0x1a, 0x54, 0x7d, - 0x36, 0x0f, 0xf4, 0x12, 0x89, 0x1e, 0x3b, 0x6e, 0x1e, 0xee, 0x78, 0x62, 0xba, 0x3b, 0xd7, 0x42, - 0xf2, 0x8b, 0xe8, 0xa9, 0x61, 0xfe, 0x87, 0xb9, 0xf4, 0x10, 0xe3, 0xfe, 0x85, 0x4b, 0xeb, 0x91, - 0xc7, 0xe1, 0x22, 0x32, 0xe1, 0x9d, 0x1e, 0x88, 0x4e, 0x90, 0x6d, 0xfb, 0x88, 0x04, 0xe2, 0x14, - 0x9e, 0xb9, 0x88, 0x2a, 0x9f, 0xe2, 0xc4, 0xad, 0x12, 0xaa, 0xaa, 0xf9, 0x23, 0x66, 0xe3, 0x45, - 0x5d, 0x6e, 0x85, 0x46, 0xb1, 0xbc, 0x20, 0x4e, 0x16, 0x96, 0x79, 0x5b, 0x91, 0x2f, 0x6a, 0x5a, - 0x6f, 0xb3, 0x92, 0x4a, 0x2f, 0x09, 0x9d, 0xab, 0x1b, 0x4e, 0xff, 0xa2, 0xc5, 0x05, 0x9d, 0x58, - 0x2e, 0x08, 0x88, 0x5e, 0x72, 0x0b, 0xdf, 0xfc, 0x40, 0x2c, 0x22, 0xd5, 0x25, 0x5a, 0xab, 0xcf, - 0x9f, 0xf1, 0x23, 0x0c, 0xd1, 0xee, 0x2b, 0x08, 0x25, 0xc4, 0xc6, 0xa9, 0xd0, 0x43, 0xe3, 0xda, - 0x45, 0xdb, 0xc9, 0x13, 0xb2, 0x9b, 0x29, 0xb3, 0xc6, 0x5c, 0x28, 0xab, 0xe8, 0x82, 0x1d, 0xc9, - 0x4b, 0x67, 0xe4, 0xe1, 0xd0, 0x9b, 0xe2, 0x3f, 0x93, 0x4c, 0x95, 0x2d, 0xe3, 0x17, 0xe8, 0xca, - 0x62, 0x0c, 0xdf, 0x27, 0xf0, 0x4c, 0x2e, 0xdf, 0x8a, 0xa1, 0xe5, 0x5f, 0xff, 0x5e, 0xae, 0x43, - 0xdd, 0xfe, 0xac, 0x93, 0x94, 0xb5, 0x57, 0xf4, 0x5e, 0x85, 0x3a, 0x11, 0x94, 0x25, 0xd1, 0xba, - 0xb8, 0x26, 0x94, 0x45, 0x8c, 0xd8, 0xce, 0x66, 0x1b, 0xd0, 0x39, 0x2d, 0xf3, 0x6b, 0x55, 0xc1, - 0x08, 0xa3, 0xe5, 0xef, 0xf0, 0x4c, 0x51, 0x0f, 0xc5, 0x72, 0xfd, 0x84, 0xff, 0x16, 0x2c, 0xd7, - 0x69, 0xa4, 0xd3, 0xa6, 0xba, 0xbf, 0xd1, 0xe2, 0x40, 0x5d, 0x11, 0xa1, 0xce, 0x89, 0xab, 0xe8, - 0x5a, 0x74, 0x27, 0xa2, 0x33, 0xe8, 0x47, 0x57, 0x28, 0x85, 0xaf, 0x88, 0x47, 0x7a, 0xe0, 0xb3, - 0xc8, 0xd5, 0xab, 0x94, 0x40, 0xa2, 0x52, 0x54, 0x20, 0x7c, 0xff, 0xdf, 0xe1, 0x01, 0x19, 0x70, - 0x56, 0x84, 0x7e, 0xaa, 0xe8, 0x13, 0xe4, 0x8b, 0x12, 0x3c, 0x4b, 0xe3, 0x6e, 0xf8, 0xc3, 0x9b, - 0x71, 0xa4, 0x29, 0xaa, 0xa8, 0x5e, 0xdf, 0x5d, 0x5b, 0xd8, 0x2b, 0x66, 0x42, 0x3e, 0x7f, 0x82, - 0x13, 0xa6, 0x71, 0x01, 0x4f, 0xef, 0xab, 0xfd, 0x7a, 0xf8, 0xb3, 0xb8, 0xad, 0xdd, 0xc5, 0x62, - 0xb7, 0xf5, 0x67, 0xc1, 0x09, 0x1d, 0x77, 0x87, 0xba, 0xf4, 0x57, 0x30, 0x84, 0x32, 0x24, 0x59, - 0xf0, 0x84, 0xd0, 0xa3, 0xc8, 0x88, 0xc1, 0xaf, 0x27, 0xe2, 0x11, 0x5b, 0xe0, 0x8e, 0xb5, 0xf7, - 0xc1, 0x38, 0x80, 0xbd, 0x6e, 0x80, 0x46, 0x56, 0x46, 0x54, 0x1f, 0x68, 0xdf, 0xaf, 0x19, 0xbb, - 0xf7, 0xc3, 0xb2, 0x0a, 0x09, 0x58, 0xde, 0x3c, 0x74, 0x32, 0x27, 0x9e, 0x10, 0xca, 0xbc, 0xec, - 0xd0, 0x92, 0xc8, 0xf7, 0xd6, 0x87, 0xcb, 0xfa, 0x44, 0xfe, 0x14, 0xf1, 0x96, 0xcb, 0xcd, 0x81, - 0x32, 0xd5, 0xd4, 0x21, 0xb5, 0x36, 0x17, 0xd6, 0x5f, 0x92, 0x8d, 0x9e, 0x79, 0x43, 0xc1, 0x45, - 0x79, 0xb6, 0x5d, 0x48, 0x97, 0x57, 0xfb, 0x1a, 0xaa, 0xbf, 0x56, 0xae, 0xad, 0xf7, 0x93, 0x7f, - 0x57, 0xae, 0x41, 0x3b, 0xba, 0xe0, 0x88, 0x51, 0x48, 0x39, 0xe9, 0x39, 0x0c, 0xf4, 0x4e, 0x9f, - 0xa2, 0xf5, 0x75, 0x7a, 0xe5, 0x22, 0xd5, 0x7c, 0x29, 0x51, 0x75, 0x51, 0x71, 0x1c, 0x5d, 0x75, - 0xa1, 0xc6, 0xa9, 0xdf, 0x13, 0x58, 0x92, 0xc2, 0x65, 0xec, 0x8b, 0xd3, 0xf3, 0x1d, 0x52, 0x54, - 0xbc, 0x26, 0x22, 0xb5, 0x7b, 0xfc, 0x64, 0xb1, 0xa8, 0xae, 0xdc, 0xc4, 0xea, 0x81, 0x8f, 0x50, - 0x3c, 0xae, 0x8e, 0x12, 0x01, 0x1f, 0xc3, 0xf8, 0xc2, 0x9f, 0x9e, 0xb6, 0xbd, 0xeb, 0x15, 0xef, - 0xc7, 0xd5, 0x84, 0x18, 0xfa, 0xbf, 0xec, 0x91, 0xcc, 0xa7, 0x88, 0x84, 0xed, 0x08, 0x68, 0xad, - 0xe7, 0xfb, 0x1f, 0x10, 0x85, 0xbf, 0xc1, 0x19, 0x1f, 0x2b, 0x0c, 0x7c, 0x12, 0x76, 0x9d, 0xbe, - 0x0b, 0x8b, 0x47, 0x25, 0x13, 0xdf, 0xf5, 0xd1, 0x6a, 0x4e, 0x84, 0x31, 0x0f, 0x74, 0x58, 0xaf, - 0xad, 0x57, 0x14, 0x67, 0xa5, 0x34, 0x3f, 0x82, 0xeb, 0xba, 0x6f, 0x3b, 0x34, 0x37, 0x3e, 0x08, - 0x48, 0xb4, 0xbd, 0xf0, 0x4d, 0x11, 0xc9, 0x17, 0x6c, 0x5c, 0x8a, 0x16, 0x53, 0xf8, 0x80, 0x47, - 0x5b, 0xdf, 0xc4, 0x02, 0xa9, 0x98, 0x4f, 0x45, 0xaa, 0x89, 0xd0, 0x49, 0xa1, 0x37, 0xcf, 0xf1, - 0xd6, 0x24, 0x70, 0xa0, 0x3b, 0xe9, 0xa4, 0x46, 0x69, 0x93, 0x2c, 0x37, 0x7d, 0xb6, 0x82, 0x3d, - 0xf3, 0xfe, 0x33, 0x97, 0xa7, 0xe3, 0x63, 0x47, 0x95, 0x86, 0x3e, 0x93, 0xa4, 0xb8, 0xc1, 0x6a, - 0xaf, 0x56, 0xa9, 0x2a, 0xd6, 0xd3, 0xf8, 0x80, 0x4d, 0xb4, 0x8d, 0xa4, 0x86, 0x94, 0x8a, 0x36, - 0xf1, 0x08, 0x8f, 0xf5, 0x7a, 0xee, 0xf7, 0xbe, 0x5f, 0x35, 0x3c, 0x5c, 0xbc, 0x57, 0x4d, 0xb5, - 0xa5, 0x89, 0x12, 0x0a, 0x2a, 0xa9, 0x78, 0xcc, 0x01, 0xfe, 0x09, 0x77, 0xbb, 0xbf, 0xdf, 0x04, - 0xd1, 0xd6, 0x8b, 0xd0, 0x9d, 0xdd, 0xe2, 0xf9, 0x0d, 0x11, 0x51, 0xf9, 0x09, 0x9f, 0xc4, 0xf4, - 0x2f, 0xa7, 0xeb, 0x51, 0xbc, 0x38, 0x46, 0x3c, 0xd0, 0x96, 0x4f, 0x47, 0xfe, 0x59, 0xab, 0xa7, - 0xf4, 0x7f, 0xbe, 0x12, 0x94, 0xdc, 0x01, 0x16, 0x8f, 0x46, 0x37, 0x9d, 0x3b, 0xf8, 0x2a, 0x14, - 0xa6, 0x63, 0x4d, 0xb5, 0x51, 0x8f, 0x1b, 0x09, 0x69, 0x81, 0x38, 0x47, 0xdc, 0x40, 0x64, 0x28, - 0x70, 0x91, 0x74, 0xd3, 0xbf, 0x93, 0x40, 0x60, 0x20, 0x3a, 0x3a, 0x1b, 0xc3, 0x01, 0x92, 0xc6, - 0x36, 0xa2, 0xec, 0x53, 0xe5, 0xf8, 0x2c, 0xa9, 0x0e, 0xa1, 0xe9, 0x36, 0xa6, 0xfc, 0xd7, 0xde, - 0x24, 0x29, 0x35, 0x0c, 0x42, 0x68, 0xb9, 0xb0, 0x28, 0x9b, 0x42, 0xaf, 0x93, 0x29, 0x81, 0x5d, - 0x09, 0x41, 0x7b, 0xe1, 0x4b, 0xbe, 0x76, 0x2f, 0x74, 0xf7, 0xbe, 0xe7, 0x53, 0xe0, 0x87, 0x74, - 0x91, 0x7f, 0x88, 0x82, 0xd3, 0x95, 0x8b, 0x32, 0xa9, 0x34, 0x51, 0x26, 0xd7, 0x7d, 0xe9, 0x57, - 0x88, 0x09, 0x4d, 0x04, 0xc6, 0xa1, 0x19, 0x42, 0xea, 0x1e, 0x76, 0x54, 0x7c, 0x20, 0x14, 0xa1, - 0x2a, 0x2e, 0x55, 0x08, 0x37, 0x7f, 0x0c, 0xe0, 0x80, 0x43, 0xc2, 0x3b, 0x53, 0x07, 0x5b, 0x1d, - 0xff, 0x04, 0x84, 0x3d, 0x9d, 0x0e, 0xdf, 0x04, 0xfc, 0x8c, 0xaa, 0x1a, 0x07, 0x7a, 0xf8, 0x29, - 0x2d, 0xbb, 0x66, 0x63, 0xcb, 0x97, 0x6f, 0xff, 0x82, 0x11, 0x26, 0x20, 0xaa, 0x4a, 0xcf, 0x82, - 0x92, 0x5e, 0xf5, 0x53, 0x63, 0xb1, 0x99, 0xae, 0x6b, 0xfc, 0x16, 0x0c, 0x1b, 0xb1, 0xec, 0xa4, - 0xbb, 0x86, 0xad, 0xd5, 0x1d, 0x67, 0x6b, 0xfc, 0xc7, 0x0b, 0xa8, 0x2d, 0x13, 0x4d, 0x7e, 0x0b, - 0x2f, 0xd8, 0xdd, 0xbc, 0xbe, 0xcb, 0xed, 0xf8, 0x88, 0x2c, 0x39, 0x71, 0x03, 0x15, 0xbb, 0x18, - 0xc8, 0xe2, 0x42, 0x80, 0x67, 0x34, 0x26, 0x7c, 0x72, 0x62, 0x5b, 0x4e, 0xbc, 0x14, 0xc8, 0x76, - 0x9f, 0x0f, 0x35, 0x63, 0xea, 0xb9, 0xc6, 0x46, 0x7f, 0x29, 0x3b, 0x10, 0x73, 0xcf, 0x70, 0xb7, - 0xd5, 0xc2, 0x82, 0x1a, 0x77, 0x66, 0x33, 0x63, 0xcf, 0x0d, 0xce, 0xcd, 0x86, 0x8c, 0xfa, 0x9d, - 0x78, 0xd2, 0x26, 0x70, 0xf3, 0x8a, 0xd2, 0x36, 0x10, 0x87, 0xc9, 0xa9, 0x1d, 0x31, 0xe0, 0xe7, - 0x1c, 0x00, 0xa7, 0xd2, 0x46, 0xa8, 0xbf, 0xc2, 0x91, 0xc9, 0xb6, 0xad, 0x44, 0xc5, 0x2c, 0x68, - 0xe0, 0xd4, 0xeb, 0x34, 0x9e, 0x80, 0xdb, 0x45, 0xc7, 0xad, 0xa1, 0xa8, 0xbe, 0xb1, 0x4d, 0xd1, - 0x58, 0x85, 0x38, 0x2f, 0x33, 0x3d, 0x06, 0xfa, 0xa2, 0x58, 0xda, 0x0b, 0xeb, 0xfe, 0x1f, 0x38, - 0xf8, 0x81, 0x7c, 0x6d, 0x0f, 0x5a, 0xd0, 0xd6, 0x5a, 0xb3, 0x4b, 0x5d, 0x8a, 0x8c, 0x7f, 0xfc, - 0xa5, 0x20, 0x20, 0x0b, 0x12, 0xe3, 0x09, 0x74, 0x78, 0xf3, 0x72, 0x51, 0x90, 0xbc, 0x19, 0xa0, - 0x5a, 0x67, 0xfe, 0x24, 0x86, 0x18, 0x80, 0x7a, 0x7e, 0x14, 0x38, 0xf8, 0xe8, 0xd6, 0xb6, 0xa9, - 0x3d, 0x9e, 0xf4, 0x92, 0x8a, 0x67, 0xb0, 0x43, 0x37, 0x39, 0x6f, 0xdf, 0x15, 0x9b, 0x69, 0x11, - 0x47, 0x40, 0x2e, 0x20, 0x11, 0x45, 0xc5, 0xcd, 0x49, 0x4c, 0xbc, 0x23, 0xbb, 0x95, 0x43, 0x65, - 0x50, 0xdb, 0x79, 0xcb, 0x16, 0x7b, 0x8f, 0x63, 0x88, 0x0a, 0x77, 0x6b, 0x1d, 0xc5, 0xe7, 0x8e, - 0x3a, 0x67, 0x0c, 0x07, 0xfc, 0x44, 0x13, 0x1c, 0x63, 0x3e, 0xd8, 0xe6, 0xc6, 0x9d, 0x0e, 0xf8, - 0x2c, 0x21, 0x14, 0x26, 0x55, 0xfb, 0xbb, 0x52, 0x6c, 0x53, 0xc8, 0x60, 0x3d, 0xc4, 0x42, 0x85, - 0x80, 0x37, 0x28, 0x60, 0x31, 0xb6, 0x49, 0x35, 0x76, 0x40, 0xa6, 0x37, 0x96, 0x34, 0x39, 0xee, - 0x63, 0xfe, 0x11, 0x05, 0x84, 0xdb, 0x43, 0xb3, 0xe5, 0x23, 0x0d, 0xc5, 0xa0, 0x76, 0x3b, 0x03, - 0x01, 0xfb, 0x88, 0x82, 0x62, 0xa9, 0x08, 0x35, 0x73, 0xfb, 0xe5, 0xc4, 0x08, 0x08, 0x72, 0x43, - 0x77, 0x15, 0xa6, 0xbf, 0x8c, 0x2a, 0x24, 0x48, 0x91, 0x0e, 0x55, 0xea, 0xee, 0x9d, 0x24, 0x53, - 0x98, 0xae, 0x0a, 0xb7, 0x7a, 0x1c, 0xae, 0x4c, 0x81, 0x80, 0xf5, 0x7f, 0x8e, 0x1d, 0x97, 0xb7, - 0x46, 0xc8, 0xa9, 0x6e, 0xef, 0xe2, 0x04, 0x9e, 0x07, 0xcb, 0xdb, 0xdf, 0x01, 0x5b, 0x48, 0x3e, - 0x0a, 0xad, 0xbf, 0x60, 0xc3, 0x6e, 0xec, 0x19, 0x46, 0x92, 0x79, 0xbe, 0xf8, 0xa3, 0xc6, 0xf4, - 0xbc, 0x3b, 0x23, 0x5e, 0x01, 0x78, 0x53, 0x7c, 0x8a, 0xdb, 0x08, 0x78, 0x47, 0x36, 0xb0, 0x32, - 0x00, 0x09, 0x14, 0x0a, 0x72, 0x55, 0x21, 0xb0, 0x63, 0x54, 0xf8, 0x53, 0x4c, 0xc4, 0x39, 0x99, - 0x2d, 0x51, 0x3e, 0xcd, 0x7d, 0x74, 0xba, 0x01, 0x3f, 0x1d, 0x27, 0xf8, 0x2c, 0x22, 0x4f, 0x8a, - 0x59, 0x74, 0xbb, 0x0e, 0xba, 0xa9, 0x22, 0xef, 0x85, 0xc4, 0x0c, 0xd9, 0xa0, 0x79, 0x9b, 0x1b, - 0x13, 0x3a, 0x28, 0xb0, 0x7f, 0x5f, 0xfc, 0x29, 0x60, 0xd0, 0x48, 0x92, 0xfc, 0xc3, 0x4a, 0x0d, - 0xdb, 0xd4, 0xbb, 0x81, 0x6e, 0x4a, 0xc1, 0x01, 0x61, 0x46, 0xa9, 0x8a, 0x80, 0xb2, 0xf8, 0x24, - 0x39, 0x4b, 0x8c, 0x35, 0xb5, 0x56, 0xa6, 0xea, 0xdf, 0x56, 0x93, 0xab, 0x57, 0x44, 0x79, 0xfa, - 0xb4, 0xbc, 0xde, 0x68, 0xf8, 0xd9, 0x8b, 0xe3, 0xc3, 0x45, 0xa1, 0x85, 0x80, 0xf9, 0xf6, 0xe8, - 0xf6, 0x55, 0x6c, 0x6a, 0x2c, 0x64, 0x38, 0xa5, 0xc7, 0xff, 0xc1, 0x55, 0xaa, 0x7a, 0x98, 0x0b, - 0x61, 0x8e, 0x83, 0x82, 0x7f, 0xf9, 0x7c, 0x71, 0x63, 0xdf, 0x8a, 0xd1, 0xa9, 0xcd, 0x85, 0x63, - 0xf0, 0x53, 0xaa, 0x6d, 0xca, 0x9a, 0x4a, 0xad, 0x53, 0x56, 0x7f, 0x5e, 0x20, 0x15, 0x91, 0x3c, - 0x72, 0xdf, 0x48, 0x37, 0x52, 0xc6, 0x3b, 0xc4, 0x85, 0x29, 0x35, 0x18, 0x2b, 0x12, 0xc7, 0x7f, - 0x9e, 0xaa, 0xaa, 0xfe, 0x24, 0x45, 0xb4, 0xc6, 0x1d, 0x56, 0xa3, 0x4a, 0xb0, 0x7c, 0x40, 0x52, - 0xcc, 0xbb, 0x32, 0x70, 0xb5, 0x58, 0x18, 0x0b, 0x6b, 0x59, 0xba, 0x02, 0x77, 0x89, 0x08, 0x1e, - 0x92, 0x37, 0x48, 0xdb, 0xee, 0xc2, 0xdd, 0x21, 0xd0, 0x00, 0x09, 0xf0, 0x00, 0x0c, 0xb0, 0x82, - 0x36, 0x42, 0xa0, 0x9a, 0x30, 0xf8, 0x81, 0x00, 0xb2, 0xae, 0xe3, 0x04, 0x13, 0x45, 0x03, 0xf0, - 0x15, 0x37, 0x26, 0xb1, 0x25, 0x07, 0xac, 0x8e, 0x5a, 0x02, 0x48, 0xef, 0x88, 0x35, 0x32, 0xf3, - 0x8e, 0x47, 0xe0, 0xb0, 0x88, 0x72, 0x38, 0x06, 0x37, 0x94, 0x84, 0xc6, 0x35, 0x31, 0xb4, 0x61, - 0x86, 0xff, 0x18, 0x5e, 0x3e, 0x10, 0x1a, 0x47, 0x52, 0x30, 0xf4, 0x72, 0x8d, 0x39, 0x8a, 0xad, - 0x63, 0xd8, 0x14, 0x65, 0x33, 0x96, 0x68, 0x0a, 0x36, 0x33, 0x78, 0x91, 0x00, 0xab, 0x56, 0xfd, - 0x69, 0x77, 0x27, 0x46, 0xef, 0x57, 0xe7, 0x07, 0x14, 0x60, 0xbf, 0x12, 0x24, 0x95, 0x5d, 0x71, - 0x76, 0xe9, 0x25, 0x15, 0xbd, 0x70, 0x4e, 0x48, 0xf2, 0x61, 0x8f, 0x1f, 0xa9, 0xe8, 0x76, 0x2a, - 0xf8, 0x28, 0xea, 0xc6, 0x2b, 0x30, 0x40, 0xba, 0xb1, 0xa0, 0x9b, 0xe0, 0xb4, 0xae, 0x54, 0x4d, - 0x50, 0x11, 0x41, 0x00, 0x98, 0xf5, 0x2a, 0x02, 0x7f, 0x82, 0xbb, 0x97, 0x1d, 0x58, 0x37, 0x8d, - 0x4d, 0x1b, 0x30, 0x0e, 0xff, 0xb7, 0x7f, 0x9f, 0x0a, 0x46, 0x41, 0xa0, 0xf1, 0x61, 0xc7, 0xe1, - 0x2e, 0x2f, 0x48, 0x6d, 0x06, 0xd3, 0x54, 0x2a, 0xc8, 0x2c, 0xda, 0xbf, 0xc2, 0x85, 0x38, 0x60, - 0xc0, 0xd0, 0xa9, 0xc2, 0x51, 0x1a, 0xdc, 0x75, 0x27, 0x8e, 0xd2, 0x80, 0xd2, 0x6e, 0x9a, 0xb3, - 0xb8, 0x47, 0xfb, 0x8f, 0xff, 0x05, 0x57, 0x40, 0xd2, 0x61, 0x42, 0x3d, 0x2f, 0x28, 0x23, 0xd3, - 0x46, 0x60, 0x80, 0x4c, 0x6e, 0x9f, 0x7c, 0x13, 0x12, 0xbb, 0x68, 0x2a, 0x4b, 0xe5, 0xf0, 0x47, - 0xaa, 0x54, 0xff, 0x04, 0xa2, 0xa4, 0xaa, 0xf5, 0x0d, 0x03, 0xe0, 0x7b, 0x46, 0x83, 0x8f, 0xf0, - 0xa1, 0x68, 0x90, 0x1b, 0x5b, 0x9a, 0x7b, 0x3c, 0x6c, 0x6e, 0xa7, 0x96, 0x12, 0x99, 0xcf, 0x64, - 0xce, 0xa8, 0xad, 0xf0, 0x89, 0xec, 0x34, 0x9b, 0x41, 0x0d, 0x1e, 0x7d, 0xaa, 0x3b, 0x8c, 0xea, - 0xf1, 0x7c, 0xa2, 0x17, 0x7f, 0x0a, 0x69, 0xbc, 0x6d, 0x33, 0x6d, 0x5d, 0x41, 0x11, 0x32, 0xb6, - 0x92, 0xf0, 0x42, 0x6b, 0x2d, 0x71, 0xc8, 0x3e, 0x0a, 0x4a, 0x80, 0x8e, 0x62, 0x6c, 0xe3, 0xb9, - 0x5e, 0x54, 0x3d, 0xfe, 0x65, 0xd5, 0x3a, 0x10, 0x52, 0x75, 0xb7, 0xbb, 0xe6, 0x93, 0xff, 0x11, - 0x34, 0xad, 0x6d, 0x37, 0xf7, 0x5d, 0x5a, 0xf2, 0x59, 0x3d, 0x03, 0x5f, 0x85, 0x04, 0x28, 0x9f, - 0xe3, 0x86, 0x15, 0xc2, 0xdd, 0x32, 0x69, 0x22, 0xad, 0xcc, 0xf7, 0xa4, 0x9f, 0xc4, 0x0c, 0x12, - 0x10, 0xbf, 0x85, 0x16, 0x60, 0x7b, 0x2a, 0x3a, 0x28, 0x46, 0xf0, 0xb7, 0x08, 0x6a, 0x6f, 0xdd, - 0xdf, 0x84, 0x05, 0xf6, 0x93, 0xa9, 0x98, 0xfc, 0x74, 0x36, 0x35, 0x11, 0xdb, 0x76, 0xc7, 0x7d, - 0x57, 0x13, 0x05, 0x3d, 0x51, 0x93, 0x2a, 0x8d, 0xc1, 0x00, 0x58, 0x01, 0x4e, 0x24, 0x3f, 0xfc, - 0x48, 0x2a, 0xd3, 0x28, 0x16, 0x3d, 0x1c, 0x96, 0x7a, 0x2b, 0xf2, 0x2f, 0xbe, 0x13, 0x2e, 0x70, - 0x01, 0x69, 0x53, 0x1e, 0x08, 0x5f, 0x7e, 0x8c, 0x48, 0x90, 0x57, 0x94, 0x10, 0x1a, 0x4c, 0x0b, - 0x98, 0x77, 0xc5, 0x4d, 0x0c, 0x60, 0x68, 0x9f, 0xf8, 0x81, 0x98, 0x51, 0x64, 0xfe, 0x36, 0x64, - 0xeb, 0x6b, 0xd1, 0xc0, 0x0d, 0xa6, 0xdb, 0x54, 0x7e, 0x08, 0x7d, 0x63, 0xe7, 0x7f, 0xab, 0xfc, - 0x10, 0xdc, 0x56, 0xef, 0x2f, 0x97, 0xba, 0x5e, 0x0b, 0x0d, 0xc8, 0xc6, 0x8c, 0xb8, 0xd9, 0x7c, - 0xfb, 0xe0, 0xa4, 0xb6, 0x24, 0x8b, 0x20, 0xc3, 0xb8, 0xfb, 0xf1, 0x5d, 0xfe, 0x14, 0xe8, 0xcb, - 0xed, 0x1c, 0xd5, 0x10, 0x86, 0x8c, 0x1e, 0x12, 0xe3, 0xe0, 0xf1, 0x83, 0x67, 0x38, 0x73, 0x8d, - 0xf0, 0x4b, 0x79, 0x36, 0x3a, 0x03, 0x06, 0x06, 0xe4, 0x8a, 0xd2, 0x18, 0xf8, 0x50, 0xa4, 0x92, - 0xe6, 0xf7, 0x53, 0xa7, 0x99, 0xe3, 0xd4, 0x6e, 0xdc, 0xec, 0x42, 0xcb, 0x1d, 0xf8, 0x50, 0xae, - 0xde, 0x8b, 0x32, 0xd6, 0x63, 0xb2, 0x52, 0xae, 0x92, 0xd9, 0x9d, 0x3e, 0x0a, 0x4d, 0x3b, 0x52, - 0x82, 0xd5, 0x68, 0x42, 0xa1, 0x12, 0x5b, 0xfc, 0x10, 0x95, 0x5d, 0x1d, 0x2a, 0xf1, 0x24, 0x15, - 0xf9, 0x54, 0x4f, 0x8b, 0x87, 0x85, 0x59, 0xa4, 0x25, 0x4d, 0x12, 0x54, 0x68, 0x2a, 0xf2, 0x87, - 0x66, 0x47, 0x27, 0x12, 0xa6, 0x3a, 0x97, 0x80, 0xbf, 0xc3, 0xb0, 0xe4, 0xdb, 0x56, 0x14, 0x58, - 0x18, 0x17, 0xc9, 0x60, 0x73, 0xa7, 0xb2, 0xa0, 0x4a, 0x1a, 0xbc, 0xb9, 0x87, 0x28, 0x62, 0xa6, - 0xe9, 0x9e, 0x5f, 0xe1, 0xf2, 0xca, 0xf1, 0xe4, 0xfe, 0x99, 0xd9, 0xec, 0x64, 0x67, 0xe9, 0x04, - 0x0d, 0x6a, 0xcf, 0x8a, 0xea, 0xf5, 0xd5, 0xe6, 0xea, 0xf5, 0xd1, 0x5e, 0xb8, 0x7c, 0xd2, 0xb1, - 0x43, 0x6b, 0x4a, 0x77, 0xb2, 0xd7, 0x73, 0x57, 0xfc, 0x3a, 0x42, 0x86, 0x5c, 0x10, 0x12, 0x02, - 0x0a, 0x94, 0xc3, 0x94, 0x51, 0x39, 0x2e, 0xb4, 0xd8, 0x9d, 0x42, 0xf5, 0x56, 0x26, 0xa8, 0xff, - 0xc2, 0x22, 0x52, 0x38, 0x60, 0x65, 0x81, 0xc1, 0x01, 0x54, 0x3b, 0xe8, 0x98, 0xbc, 0x14, 0xc3, - 0x2e, 0x4a, 0x17, 0xd3, 0x34, 0x9a, 0x6d, 0x75, 0xf0, 0xa1, 0xd0, 0x48, 0xb0, 0x89, 0x83, 0xb4, - 0x99, 0xb1, 0xe9, 0x06, 0x52, 0x31, 0xfa, 0x48, 0x2b, 0x23, 0xef, 0x7c, 0xa4, 0xbb, 0x2f, 0x84, - 0x2d, 0x29, 0x28, 0xcd, 0x59, 0x54, 0x0e, 0x7c, 0x7f, 0x10, 0x20, 0x28, 0x65, 0x74, 0x17, 0x9c, - 0xd9, 0x35, 0x5a, 0xd7, 0xbc, 0x22, 0x0a, 0x32, 0xeb, 0xe7, 0x49, 0x2b, 0x1e, 0xf8, 0x50, 0x49, - 0xbe, 0x50, 0x00, 0x1a, 0x07, 0x37, 0x58, 0xeb, 0xc2, 0x40, 0x7a, 0x6f, 0x1e, 0x02, 0xaf, 0xac, - 0x21, 0x6f, 0xf8, 0x8d, 0x78, 0x88, 0x50, 0xa1, 0x4e, 0x4e, 0xf5, 0x9f, 0xa2, 0x85, 0xe3, 0x91, - 0x98, 0x4a, 0x68, 0x82, 0xd9, 0x42, 0x90, 0x95, 0x11, 0x7a, 0xc5, 0x91, 0xdb, 0x89, 0x10, 0x14, - 0xab, 0x1a, 0x6b, 0x92, 0xb3, 0x95, 0x8b, 0xd9, 0xc4, 0x36, 0x91, 0xde, 0x11, 0x31, 0xc3, 0xc5, - 0xa0, 0x1f, 0x71, 0x31, 0xc6, 0x40, 0xe5, 0xa4, 0xae, 0x2b, 0x01, 0xe5, 0xcc, 0x50, 0xdd, 0xa7, - 0x23, 0x90, 0x10, 0x1f, 0x04, 0xc5, 0x4e, 0x6a, 0x34, 0x30, 0x3a, 0x3c, 0x71, 0xdf, 0xf0, 0x53, - 0xb2, 0xf1, 0xc8, 0x96, 0x4d, 0xe4, 0x14, 0xa2, 0x17, 0x04, 0x03, 0xa0, 0xae, 0x01, 0x97, 0xd7, - 0xdc, 0x44, 0x29, 0xdf, 0xac, 0x18, 0x8c, 0x7e, 0xda, 0x89, 0x58, 0x43, 0x7b, 0x0d, 0xe9, 0x95, - 0xae, 0xf0, 0x68, 0x60, 0x8c, 0x77, 0xc1, 0x5d, 0xbd, 0x95, 0x8b, 0x7f, 0x25, 0x47, 0x45, 0xe4, - 0x16, 0xb2, 0xef, 0xf0, 0x5c, 0x47, 0x10, 0xc1, 0xcb, 0x74, 0xd7, 0xdf, 0x2c, 0xb8, 0xff, 0x94, - 0xd3, 0x34, 0xa4, 0x1a, 0xbc, 0x60, 0xb3, 0xa3, 0x80, 0x41, 0x87, 0x78, 0x6b, 0x05, 0x29, 0x45, - 0x8d, 0xc2, 0x8b, 0x4d, 0x99, 0xed, 0x0e, 0x70, 0xf5, 0x41, 0xed, 0x3c, 0x61, 0x04, 0x34, 0x7e, - 0x29, 0x95, 0x59, 0x79, 0xd9, 0x60, 0x42, 0xbe, 0x62, 0x9d, 0x52, 0x37, 0x98, 0xa3, 0xad, 0xf9, - 0x5f, 0x8c, 0xfc, 0xec, 0x25, 0x76, 0x25, 0xee, 0x7b, 0x81, 0x1f, 0x29, 0x63, 0xb3, 0xdc, 0x2d, - 0x96, 0xdf, 0xc2, 0x85, 0x1f, 0xe4, 0x48, 0x52, 0x11, 0x8b, 0xc8, 0x7d, 0x20, 0x91, 0x1f, 0x5b, - 0x01, 0xf2, 0xb8, 0xc7, 0xcb, 0xa7, 0xbf, 0x0b, 0x65, 0xb0, 0xb0, 0xf6, 0xad, 0xdb, 0x71, 0x94, - 0xa1, 0xe1, 0x4b, 0xda, 0x3e, 0xeb, 0x86, 0xc2, 0x2b, 0xcb, 0x0c, 0x0a, 0xee, 0x4a, 0xbc, 0xe1, - 0x7d, 0x10, 0xc0, 0xd6, 0x52, 0x70, 0x31, 0xdb, 0xe1, 0x4d, 0x84, 0x36, 0x28, 0xb7, 0x2b, 0x05, - 0x32, 0xe3, 0x39, 0x84, 0x14, 0x0e, 0x38, 0x93, 0x24, 0x13, 0x06, 0xf1, 0x01, 0x97, 0xd7, 0x5f, - 0x58, 0xff, 0x05, 0x45, 0xa1, 0xbc, 0x94, 0x4f, 0x8e, 0xd8, 0xf5, 0xf1, 0xc4, 0x4b, 0x6e, 0xb2, - 0x28, 0x72, 0x8a, 0x95, 0x3f, 0x04, 0x06, 0x28, 0xb3, 0xf1, 0xd6, 0xd2, 0x7e, 0x89, 0xf3, 0xa0, - 0xd6, 0xd8, 0x6d, 0xd6, 0xaa, 0x58, 0x7f, 0xe3, 0x48, 0xc8, 0xd9, 0x6b, 0x8e, 0x83, 0x60, 0x91, - 0xfc, 0x36, 0x80, 0x73, 0xe2, 0x1e, 0xc1, 0xd4, 0x08, 0xa6, 0x15, 0xae, 0x8e, 0x6b, 0xc6, 0x1a, - 0x27, 0x1d, 0x4b, 0x2f, 0xd3, 0xf0, 0x52, 0x76, 0x06, 0x32, 0x2a, 0x9c, 0x47, 0xa0, 0x66, 0x2a, - 0x1b, 0xcf, 0x4c, 0x3a, 0xa0, 0xf3, 0x4a, 0xa4, 0x12, 0x54, 0x27, 0xab, 0x46, 0x72, 0xea, 0x97, - 0xc6, 0x0c, 0x70, 0xda, 0x0a, 0xae, 0xf8, 0x58, 0x6c, 0x87, 0xec, 0x6d, 0xa5, 0x06, 0xf7, 0xf1, - 0x85, 0x0f, 0xa2, 0xec, 0xc0, 0x4a, 0x11, 0x75, 0x6b, 0xa9, 0xb7, 0x43, 0x64, 0xbf, 0x82, 0xb3, - 0xa7, 0x4c, 0x75, 0x4c, 0x46, 0x0c, 0xd9, 0x53, 0x4a, 0x9a, 0x7d, 0xf7, 0x37, 0x87, 0x6d, 0x7f, - 0xe0, 0x88, 0xbb, 0x6d, 0x14, 0x3f, 0x85, 0x2d, 0x27, 0xac, 0xd0, 0x26, 0x48, 0xfb, 0x74, 0x1d, - 0x94, 0x9f, 0xfa, 0xe3, 0x3a, 0x06, 0x68, 0x1d, 0x9f, 0x37, 0x6a, 0x36, 0x7a, 0xaf, 0x11, 0x0a, - 0x08, 0x10, 0xd1, 0xf3, 0x90, 0x75, 0x3f, 0xd6, 0x6b, 0x9e, 0x17, 0x9f, 0x89, 0x12, 0x34, 0x5e, - 0xba, 0xd6, 0x0c, 0x15, 0x65, 0x88, 0x7d, 0x7a, 0x84, 0x0c, 0x1b, 0x1e, 0x3a, 0xda, 0xa5, 0x60, - 0xc4, 0xe1, 0xbb, 0xba, 0xd7, 0xf1, 0x10, 0xa6, 0x8c, 0xb4, 0x65, 0xa3, 0x63, 0x7b, 0x37, 0x7a, - 0xcd, 0xd5, 0x00, 0x08, 0xd1, 0xce, 0xb1, 0x42, 0x59, 0x8f, 0x3d, 0xb8, 0x89, 0x2e, 0xe2, 0x04, - 0x82, 0xc2, 0x53, 0x4c, 0x57, 0x95, 0xb7, 0x07, 0x8c, 0xd0, 0xec, 0xf2, 0xe2, 0x3c, 0x44, 0x28, - 0x56, 0xac, 0x65, 0xe8, 0xc8, 0x5a, 0xec, 0xe4, 0x17, 0x10, 0xac, 0xe9, 0xb8, 0xce, 0x45, 0xe7, - 0x13, 0x05, 0x5f, 0x19, 0x37, 0x3b, 0x4e, 0xc3, 0x46, 0x16, 0x21, 0x6a, 0x81, 0xd4, 0xcd, 0x00, - 0xc7, 0xf8, 0x46, 0xab, 0xd2, 0x0e, 0xae, 0xed, 0x83, 0xfd, 0xf9, 0xc6, 0x8c, 0x08, 0x07, 0x88, - 0x05, 0x02, 0x1f, 0x6c, 0x66, 0x63, 0x5f, 0xfe, 0x20, 0x28, 0x77, 0x4a, 0xab, 0x49, 0x5e, 0xf5, - 0x4e, 0x84, 0xff, 0x04, 0x86, 0x57, 0xb6, 0xff, 0x0a, 0x14, 0xfe, 0xc4, 0xb9, 0x6c, 0x37, 0x22, - 0xa8, 0xab, 0x2f, 0x3f, 0x7c, 0x34, 0x0c, 0xaa, 0x1b, 0xbe, 0xf8, 0x2a, 0x9d, 0x2b, 0x54, 0x6d, - 0xec, 0x51, 0xd4, 0x8b, 0x52, 0xdd, 0xbe, 0x33, 0x7a, 0x06, 0x35, 0x73, 0xdd, 0x8f, 0x9d, 0xb7, - 0x64, 0xff, 0x0a, 0x1e, 0xfa, 0x48, 0x93, 0x4b, 0x12, 0x8c, 0xf5, 0x87, 0xe1, 0x8f, 0x91, 0xec, - 0x6f, 0x48, 0x4d, 0xaa, 0x10, 0x7d, 0xf8, 0xb9, 0xd2, 0x5a, 0x9e, 0x03, 0x39, 0x1c, 0x1f, 0x82, - 0x52, 0x16, 0xcb, 0x7d, 0x9f, 0x0e, 0xab, 0xdb, 0xe3, 0x0a, 0x64, 0x43, 0xa3, 0xd9, 0x12, 0xe4, - 0x31, 0x8f, 0x6c, 0x25, 0x71, 0xc1, 0x6d, 0x10, 0x92, 0x3a, 0x2d, 0x28, 0x0e, 0x46, 0x0a, 0x21, - 0x3d, 0x3a, 0xf2, 0x62, 0x02, 0xf0, 0x44, 0x44, 0x1b, 0x58, 0x22, 0x6f, 0x8f, 0x7c, 0x13, 0x74, - 0xd2, 0x2e, 0x56, 0xab, 0xdf, 0x04, 0x7a, 0xd9, 0xf7, 0xc2, 0x85, 0xbd, 0xa3, 0xda, 0xe8, 0x65, - 0xa6, 0xe6, 0x9c, 0x8b, 0xa2, 0x6a, 0xdd, 0xf0, 0x53, 0xdd, 0xec, 0x72, 0x47, 0x58, 0xf3, 0x1e, - 0xf8, 0x2a, 0x9d, 0xdd, 0x43, 0x69, 0x48, 0xc7, 0x21, 0xaa, 0xe1, 0x86, 0x06, 0xa3, 0x86, 0x8e, - 0xfc, 0x22, 0x31, 0x01, 0x5b, 0x40, 0x9b, 0x62, 0xcd, 0x4f, 0x54, 0xf6, 0xf6, 0x5e, 0x14, 0x8d, - 0x99, 0x7a, 0x26, 0x76, 0x0a, 0xc6, 0x06, 0x5c, 0xa7, 0x9f, 0x9a, 0xbb, 0x19, 0x14, 0xa6, 0x7e, - 0x34, 0xe3, 0x91, 0xbd, 0x15, 0xbd, 0xa2, 0x82, 0x12, 0xe5, 0x02, 0x58, 0x28, 0x97, 0x17, 0x39, - 0x4e, 0x4a, 0xb2, 0xf1, 0xfc, 0x9d, 0x5c, 0xbc, 0x68, 0xa4, 0xa9, 0xb4, 0x50, 0x48, 0x25, 0xd0, - 0xd1, 0x65, 0xc1, 0x8e, 0x61, 0xfc, 0xec, 0x6d, 0x9d, 0x88, 0x4c, 0x3e, 0xe0, 0xf5, 0x0d, 0xf3, - 0xcd, 0x93, 0x54, 0xff, 0x82, 0xa2, 0xde, 0x5c, 0x63, 0x54, 0x6a, 0x63, 0x44, 0x3f, 0x61, 0x49, - 0xcb, 0xc8, 0xd3, 0x5a, 0xb5, 0xdf, 0x19, 0x73, 0x35, 0xf2, 0x50, 0x94, 0xd1, 0x4b, 0x6d, 0x36, - 0x84, 0xdf, 0xc1, 0x09, 0xf6, 0x49, 0x31, 0xd7, 0xc2, 0x44, 0xa3, 0xad, 0x48, 0xc3, 0x1d, 0xe1, - 0x43, 0xa7, 0x60, 0xd3, 0x41, 0x86, 0x5d, 0x97, 0x34, 0xa0, 0x9c, 0x75, 0x93, 0x89, 0x4c, 0x5e, - 0x41, 0xa5, 0xdf, 0x15, 0xe6, 0xc5, 0xeb, 0xe6, 0x22, 0xd3, 0xf8, 0x28, 0xaa, 0xae, 0x4e, 0xb2, - 0xfe, 0x20, 0x16, 0x54, 0xdd, 0xb9, 0x54, 0xd7, 0x57, 0xbf, 0x10, 0x24, 0x29, 0x2f, 0xb7, 0x69, - 0x93, 0x85, 0x70, 0xa3, 0x26, 0x7e, 0x2d, 0x45, 0x39, 0x93, 0x63, 0xdc, 0x42, 0xa5, 0x4f, 0x85, - 0x34, 0x38, 0xcb, 0x2b, 0x7b, 0x05, 0xb5, 0xd6, 0x7b, 0xa1, 0xfb, 0xa6, 0xfe, 0x20, 0x29, 0x56, - 0x0d, 0x0e, 0xbe, 0x37, 0xdb, 0xaa, 0xaa, 0x87, 0xed, 0x60, 0x8e, 0x1d, 0xef, 0xc4, 0x89, 0x0a, - 0x16, 0xee, 0x36, 0x99, 0x6d, 0x32, 0xd6, 0x26, 0x42, 0xac, 0x8e, 0x01, 0x54, 0x9b, 0x7b, 0x65, - 0x54, 0xc7, 0x10, 0x24, 0x13, 0x77, 0x4c, 0xad, 0xe0, 0xda, 0x7f, 0x84, 0x29, 0x89, 0x7d, 0xbc, - 0x98, 0x89, 0xaa, 0xf1, 0x02, 0x41, 0x5d, 0xef, 0x76, 0xb6, 0x98, 0x77, 0x7f, 0x12, 0x0a, 0x6f, - 0x15, 0xbb, 0x8a, 0xdc, 0xaa, 0x18, 0xd8, 0xd8, 0xd9, 0xe6, 0x7c, 0x14, 0x99, 0xf6, 0xf6, 0xad, - 0xbb, 0xe3, 0x29, 0xf0, 0x8d, 0x32, 0xeb, 0xd0, 0xae, 0xee, 0xda, 0x63, 0xf8, 0xfc, 0x16, 0x09, - 0x49, 0x78, 0x4b, 0x66, 0xc0, 0x40, 0x9c, 0x36, 0x75, 0x04, 0x0f, 0x1e, 0x98, 0xb4, 0x31, 0x6b, - 0xda, 0xa3, 0x45, 0x6b, 0xc1, 0x56, 0x5e, 0xdb, 0x63, 0x9e, 0x93, 0x28, 0x8c, 0xb6, 0xff, 0xf8, - 0x21, 0xa3, 0x46, 0xf7, 0xf8, 0x52, 0xeb, 0x61, 0x5c, 0xfe, 0xd4, 0xd5, 0x7d, 0xc2, 0x03, 0x6b, - 0xff, 0xc1, 0x4d, 0x08, 0xe4, 0x19, 0xe8, 0x3e, 0xca, 0xfc, 0xf8, 0xb5, 0x23, 0xbf, 0x0a, 0x5c, - 0xd5, 0xd6, 0xa2, 0x56, 0x2a, 0x2d, 0x52, 0xd6, 0xb1, 0x9a, 0xdb, 0x73, 0x3b, 0xc4, 0xe0, 0x13, - 0x4d, 0x73, 0xbf, 0x15, 0x1a, 0x40, 0xc2, 0x0e, 0xac, 0x6b, 0xf8, 0x29, 0xe6, 0x8d, 0xf2, 0xb1, - 0xad, 0x1f, 0xfe, 0x32, 0xdc, 0x75, 0x6a, 0xc7, 0x9f, 0x15, 0x20, 0x88, 0x52, 0x92, 0xf8, 0xe8, - 0xe7, 0x92, 0xfc, 0x7e, 0x35, 0x11, 0x57, 0xd2, 0x59, 0x54, 0x7e, 0x14, 0x99, 0x8e, 0x0d, 0x0f, - 0x9a, 0x10, 0x71, 0x91, 0xb9, 0x65, 0x99, 0x3f, 0x1d, 0xbe, 0x09, 0x75, 0xa6, 0x2f, 0xb7, 0xdf, - 0x04, 0xbc, 0x6f, 0xcb, 0x5b, 0x11, 0x06, 0x33, 0xcf, 0x39, 0x7c, 0x68, 0xc8, 0x26, 0x9a, 0x4d, - 0x6d, 0xdd, 0x1a, 0xe6, 0x96, 0xa8, 0x5e, 0xd5, 0x0d, 0x49, 0x8b, 0x03, 0x02, 0xe1, 0x88, 0xea, - 0xd5, 0x8a, 0xff, 0xc1, 0x59, 0xc7, 0x2e, 0xef, 0x53, 0xa1, 0x11, 0x25, 0x74, 0x1c, 0x8b, 0xec, - 0x84, 0xfa, 0xc0, 0x81, 0xe3, 0x4c, 0x33, 0xe3, 0x98, 0x1b, 0x1d, 0xd7, 0x1b, 0xb0, 0xf0, 0x80, - 0xdb, 0x41, 0x4a, 0x5b, 0x91, 0xa4, 0x12, 0x82, 0xce, 0xaa, 0x03, 0x75, 0x1d, 0x5f, 0x94, 0x24, - 0xf2, 0xfd, 0x94, 0x53, 0xff, 0xc1, 0x0d, 0xb5, 0xbb, 0x7c, 0x71, 0x5d, 0x92, 0x1d, 0x99, 0xbb, - 0x5d, 0x6b, 0xe2, 0xca, 0xb5, 0x55, 0x53, 0xb6, 0xaf, 0x05, 0x26, 0xcf, 0x4c, 0x84, 0xe9, 0xee, - 0x96, 0x5f, 0x1d, 0x7c, 0x37, 0x8d, 0xdd, 0xf0, 0xc6, 0x6c, 0x56, 0x02, 0x69, 0x52, 0xf5, 0x6e, - 0x05, 0xf0, 0xa0, 0xd2, 0x32, 0xd9, 0x27, 0x52, 0x44, 0xaa, 0xc4, 0x56, 0xb5, 0x94, 0x6b, 0x1c, - 0x5c, 0x43, 0xd4, 0x36, 0x99, 0xe3, 0xbf, 0x05, 0xa6, 0x6a, 0x94, 0xea, 0x10, 0xf2, 0xa2, 0x6f, - 0x10, 0x0a, 0xe6, 0x75, 0x96, 0x5d, 0x63, 0xce, 0xc0, 0xad, 0xa3, 0xaa, 0x7f, 0x12, 0x14, 0x93, - 0x2d, 0xdf, 0x6d, 0xee, 0xea, 0xd8, 0xd5, 0x1b, 0xcc, 0xdc, 0x23, 0x05, 0x57, 0x8a, 0xca, 0x56, - 0xad, 0xce, 0xbd, 0xfe, 0x14, 0x8b, 0x99, 0x59, 0x98, 0x96, 0x7d, 0x99, 0x17, 0x17, 0x11, 0xe5, - 0xf2, 0xaa, 0xaf, 0xc4, 0xc2, 0x92, 0xdd, 0x4c, 0x6c, 0xf5, 0x8d, 0x36, 0x36, 0x8a, 0x97, 0x4d, - 0x3e, 0xf1, 0x04, 0x21, 0xbe, 0xd9, 0x8c, 0xf8, 0x28, 0x2d, 0x86, 0xa3, 0x07, 0x9e, 0xdd, 0xfc, - 0x48, 0x29, 0xd2, 0xa4, 0x56, 0x1e, 0xdd, 0xc5, 0x77, 0xe4, 0x5e, 0x12, 0x21, 0xfe, 0x85, 0x76, - 0x3f, 0xc1, 0x65, 0xef, 0x6f, 0x74, 0xdf, 0xff, 0xc2, 0x82, 0x4f, 0x81, 0xc1, 0xc6, 0x7b, 0xd9, - 0xc6, 0xdc, 0x8d, 0x2c, 0x7c, 0x60, 0xe3, 0xb7, 0x21, 0x2f, 0x49, 0x5d, 0x74, 0xf1, 0x4f, 0xc2, - 0x91, 0xf1, 0x77, 0x46, 0xb4, 0x42, 0x5b, 0x70, 0x9a, 0xac, 0x4e, 0x2f, 0xde, 0xf4, 0x6d, 0x90, - 0xb1, 0x8f, 0x74, 0x38, 0x65, 0x1e, 0xcf, 0x46, 0x0f, 0x27, 0xc7, 0xe8, 0xe0, 0x66, 0xce, 0x18, - 0x4f, 0x75, 0x60, 0x9f, 0x72, 0x87, 0x14, 0xba, 0x36, 0x35, 0xf0, 0x57, 0x41, 0xbd, 0x0c, 0xc8, - 0x93, 0x8c, 0x38, 0xab, 0x76, 0xef, 0xdf, 0x05, 0x5b, 0x1a, 0x64, 0x72, 0x17, 0x1c, 0x64, 0x7a, - 0x56, 0xff, 0xbe, 0x09, 0xe6, 0xcc, 0x42, 0x20, 0x26, 0x29, 0x04, 0x70, 0xc1, 0x80, 0x69, 0x7e, - 0x14, 0x97, 0xab, 0x5a, 0x09, 0xa9, 0x37, 0xb2, 0x1d, 0x33, 0xeb, 0x91, 0xb0, 0x9d, 0x1a, 0x55, - 0xe1, 0x4e, 0x1e, 0xd4, 0xa0, 0xa7, 0xec, 0x7e, 0xc6, 0xd1, 0xb9, 0xc1, 0x00, 0x49, 0xfa, 0x55, - 0xe0, 0xae, 0x8c, 0xe4, 0x33, 0x39, 0xbb, 0x0e, 0xa9, 0x4c, 0xaa, 0x76, 0x9f, 0xe0, 0xb2, 0x52, - 0x35, 0x6d, 0x34, 0x0c, 0x9d, 0xa8, 0xac, 0x4c, 0xce, 0xd4, 0x77, 0xe0, 0xab, 0xb1, 0x87, 0xa2, - 0x18, 0x42, 0xd6, 0x32, 0xa0, 0xd8, 0x6e, 0x9b, 0x26, 0xb0, 0xf8, 0x2d, 0x21, 0x58, 0x4b, 0xb4, - 0xaa, 0xd5, 0xc2, 0x85, 0x69, 0x91, 0x12, 0x50, 0xce, 0x92, 0xf0, 0xeb, 0x06, 0x9b, 0x68, 0x8d, - 0x90, 0xd5, 0x2a, 0x7d, 0x30, 0x1f, 0x2f, 0xc7, 0xd5, 0x55, 0x27, 0x6f, 0x69, 0xaf, 0xc6, 0x08, - 0xd1, 0xbb, 0x0d, 0xe5, 0xa3, 0x23, 0x7d, 0x8d, 0x5a, 0x1c, 0x68, 0xa2, 0xcd, 0xbe, 0x1f, 0x26, - 0x3c, 0xe0, 0x4c, 0xb6, 0x9d, 0x07, 0x09, 0x86, 0xda, 0xb8, 0xba, 0x6b, 0xb6, 0xa8, 0xa2, 0x2a, - 0x3f, 0xe0, 0x8c, 0x4b, 0x47, 0x7a, 0x2e, 0x32, 0xb9, 0x8f, 0x55, 0x52, 0xc0, 0x00, 0x00, 0x00, - 0x01, 0x41, 0x9a, 0x22, 0x11, 0x30, 0x12, 0xa1, 0x1c, 0x14, 0x5e, 0x1c, 0x68, 0xf2, 0xaa, 0x2a, - 0xa2, 0x14, 0x25, 0xd0, 0xba, 0x87, 0xb9, 0x44, 0x34, 0x81, 0xcf, 0x4f, 0x54, 0x8c, 0xdc, 0x3f, - 0x25, 0x23, 0xe0, 0x24, 0xd5, 0x0a, 0x9f, 0xb4, 0x48, 0x99, 0xc5, 0x06, 0x03, 0xbe, 0x69, 0xec, - 0x84, 0x66, 0x2e, 0x08, 0xfa, 0x4e, 0x04, 0xdb, 0x86, 0x1a, 0xda, 0x63, 0xca, 0x63, 0xb1, 0x84, - 0x3a, 0x16, 0xff, 0x76, 0x0d, 0xb0, 0xd2, 0xee, 0x60, 0x35, 0xd5, 0xc8, 0x73, 0xa3, 0x3c, 0xfd, - 0x62, 0xfa, 0x11, 0x5f, 0x04, 0x62, 0xc5, 0x7b, 0x19, 0x0a, 0x10, 0xea, 0x7a, 0x2b, 0x9b, 0x9d, - 0x83, 0x80, 0x00, 0x4f, 0xd1, 0x62, 0x8c, 0xe2, 0x89, 0x40, 0x4c, 0x61, 0xa5, 0xf9, 0xf6, 0x33, - 0x30, 0x27, 0xa1, 0x4e, 0x8d, 0xe6, 0x1e, 0x9a, 0x5a, 0xe6, 0x83, 0x16, 0xc8, 0xa2, 0xd9, 0x14, - 0x53, 0x22, 0x8a, 0x64, 0xfa, 0xb2, 0xf8, 0x4e, 0x9d, 0x2b, 0x4d, 0x6b, 0x82, 0x11, 0x08, 0x1a, - 0xb3, 0x59, 0x7d, 0xe9, 0xa4, 0x98, 0x7b, 0xa3, 0x16, 0x89, 0xe6, 0x1b, 0x0e, 0x21, 0xdd, 0xff, - 0x0e, 0xc7, 0xc4, 0x13, 0xe3, 0xa3, 0x61, 0xec, 0x75, 0x00, 0xbe, 0xa9, 0xab, 0x47, 0xa8, 0x35, - 0xc3, 0x49, 0xc3, 0xff, 0xc1, 0x36, 0x32, 0x30, 0x91, 0x22, 0x69, 0x0d, 0x07, 0xaf, 0xcc, 0x36, - 0x70, 0x49, 0x84, 0x06, 0x8e, 0x0f, 0x9d, 0x0d, 0xb3, 0x26, 0x1e, 0x3c, 0x6a, 0xf8, 0x16, 0x78, - 0x59, 0xf1, 0xd6, 0x88, 0xa3, 0x4b, 0xb0, 0x78, 0x1a, 0xfe, 0x1e, 0x04, 0x45, 0xa7, 0x1b, 0x19, - 0x7a, 0x00, 0x58, 0x05, 0x52, 0x32, 0x79, 0xe8, 0x69, 0xc8, 0x67, 0x38, 0xef, 0x09, 0xab, 0xc5, - 0x71, 0x43, 0x9b, 0xc7, 0x54, 0xc4, 0xf0, 0x34, 0xc0, 0xd4, 0xd7, 0x38, 0x37, 0x93, 0x01, 0xc7, - 0xa2, 0x37, 0xe6, 0x03, 0x0c, 0x63, 0x4c, 0x73, 0x87, 0xd6, 0x8f, 0x82, 0x35, 0xd5, 0x3f, 0x4c, - 0x3f, 0xda, 0xa9, 0x3e, 0xe1, 0x01, 0xb0, 0xab, 0x0c, 0x8c, 0x35, 0x21, 0xa7, 0x19, 0xd5, 0x28, - 0x07, 0xd2, 0xa8, 0x10, 0x58, 0x58, 0x5b, 0x10, 0xb0, 0x94, 0x71, 0x3a, 0x2b, 0xe0, 0x03, 0xf2, - 0x58, 0x6f, 0xa8, 0xb4, 0x00, 0x05, 0xe3, 0x06, 0xcf, 0xa6, 0x00, 0x79, 0x13, 0x7d, 0xcd, 0x43, - 0x70, 0xdb, 0x5b, 0xe8, 0x91, 0x7f, 0x88, 0x58, 0xaf, 0x74, 0x3b, 0x12, 0x4c, 0x34, 0xc4, 0x45, - 0xe6, 0x82, 0x33, 0xd2, 0x94, 0x17, 0x87, 0x42, 0x23, 0xa9, 0xbe, 0x3c, 0xd3, 0xe3, 0x4d, 0x25, - 0xaf, 0x28, 0x3f, 0xca, 0x30, 0x15, 0x6d, 0x48, 0x2a, 0x7f, 0xe0, 0x8a, 0x19, 0x45, 0x9f, 0xac, - 0x0f, 0xd9, 0xeb, 0xe0, 0x90, 0x42, 0xc8, 0x02, 0x4c, 0x8b, 0x2f, 0xa2, 0xf7, 0xc2, 0xa5, 0x1e, - 0x2c, 0x7e, 0x3c, 0x0d, 0x0f, 0xd7, 0xc2, 0x2d, 0xf5, 0x02, 0xfe, 0x1f, 0xb6, 0xdd, 0x83, 0x81, - 0xd9, 0xaf, 0xda, 0x82, 0x6d, 0xad, 0xfe, 0xbf, 0xb6, 0x09, 0x7d, 0xe9, 0x71, 0x5e, 0x36, 0x0b, - 0x5c, 0x38, 0x80, 0xf3, 0x27, 0x3c, 0xc8, 0xab, 0x1b, 0x96, 0xae, 0x5e, 0x33, 0x2d, 0x4c, 0xb5, - 0xc7, 0x43, 0xf1, 0x2d, 0x57, 0xe3, 0x6a, 0xc5, 0x10, 0xda, 0xa7, 0x89, 0x6a, 0x2c, 0xbc, 0x25, - 0x86, 0x33, 0xbe, 0xda, 0x06, 0xc2, 0x0e, 0xe7, 0x7e, 0x5e, 0x09, 0x1e, 0x15, 0xe9, 0x51, 0xb9, - 0xf3, 0xd7, 0xc3, 0xdb, 0x8f, 0xf9, 0x49, 0xc3, 0x89, 0xfe, 0xc4, 0xf0, 0x49, 0x1d, 0x4c, 0x2f, - 0xa7, 0x91, 0x19, 0xf8, 0x7a, 0x3f, 0x4d, 0x7d, 0x33, 0x09, 0x0f, 0x0b, 0x11, 0x87, 0xa2, 0x7e, - 0xd1, 0x47, 0xb8, 0x5f, 0xdf, 0x1f, 0x21, 0x2f, 0x21, 0x7f, 0x85, 0x86, 0x50, 0x6f, 0x13, 0x65, - 0x0c, 0xe7, 0xc6, 0x2e, 0xfb, 0x18, 0x8f, 0x62, 0xb7, 0xce, 0x2c, 0xa8, 0xcb, 0x36, 0x9b, 0x72, - 0xe9, 0x74, 0xbd, 0x4d, 0x29, 0x36, 0x20, 0x16, 0x04, 0x32, 0x82, 0x49, 0x52, 0x78, 0x80, 0xa6, - 0x28, 0x75, 0x99, 0xcd, 0x00, 0xcb, 0x34, 0x63, 0x57, 0x6e, 0x19, 0x54, 0x44, 0x5c, 0x07, 0x02, - 0x30, 0x53, 0xc4, 0x8d, 0xa8, 0xb0, 0x74, 0x2a, 0x2f, 0xd3, 0x1b, 0xd5, 0xbd, 0x27, 0xf2, 0x86, - 0xc0, 0xaa, 0x0e, 0xff, 0xc8, 0x78, 0xe7, 0x23, 0xa3, 0xf6, 0x23, 0x68, 0x90, 0x61, 0x12, 0x25, - 0x98, 0xad, 0xc4, 0xa5, 0xa3, 0x03, 0x23, 0x9b, 0xb1, 0x82, 0xc7, 0xf9, 0x81, 0x98, 0x57, 0x0c, - 0xc3, 0xfd, 0x90, 0x30, 0x82, 0xf5, 0x5c, 0xb2, 0x92, 0xf6, 0x86, 0x11, 0x89, 0xb0, 0x9e, 0x1a, - 0x99, 0xbd, 0x38, 0x62, 0x9e, 0x9f, 0x94, 0x66, 0x4c, 0x1f, 0x58, 0x5f, 0xfe, 0x88, 0xf3, 0x34, - 0x4f, 0xcf, 0xc2, 0x85, 0x60, 0x81, 0x1b, 0xa5, 0x21, 0x60, 0x04, 0xd5, 0x8c, 0xca, 0x1e, 0x8a, - 0x80, 0x2c, 0x0c, 0x67, 0xea, 0x6d, 0x36, 0x17, 0x83, 0x95, 0xc1, 0x7f, 0x38, 0x90, 0xbb, 0x8b, - 0x3b, 0x95, 0xd1, 0x8c, 0xe1, 0x5f, 0x04, 0x83, 0x5b, 0x66, 0x61, 0x0c, 0x05, 0x87, 0xc1, 0x28, - 0x89, 0x76, 0xf7, 0x61, 0xbe, 0x5f, 0x0a, 0x09, 0x0f, 0xa1, 0xa9, 0x56, 0x04, 0x02, 0xc1, 0x01, - 0x37, 0xc1, 0xf0, 0x46, 0xb8, 0xb4, 0x25, 0x5e, 0xfd, 0x63, 0x86, 0xad, 0x7a, 0x02, 0x41, 0x23, - 0x43, 0x68, 0xb8, 0x20, 0x70, 0x61, 0xf0, 0x42, 0x4d, 0xa2, 0x51, 0x8c, 0xa5, 0x4b, 0x86, 0xce, - 0x28, 0x31, 0x41, 0x8a, 0x0c, 0x50, 0x62, 0x2d, 0x22, 0xa1, 0x0a, 0x85, 0xfa, 0xe4, 0xf1, 0xa6, - 0x8f, 0x0a, 0xf5, 0x5e, 0xfc, 0x21, 0x52, 0x11, 0x4a, 0xf2, 0x69, 0x9e, 0x78, 0x42, 0x5d, 0x51, - 0x71, 0xea, 0x54, 0xf9, 0x38, 0xeb, 0x47, 0xea, 0x54, 0x93, 0xa3, 0x0f, 0x29, 0x38, 0x68, 0xbc, - 0x6b, 0xc4, 0x7c, 0x90, 0x96, 0x46, 0xd1, 0x13, 0x34, 0x11, 0x0d, 0x2e, 0x15, 0x8e, 0xb4, 0x2d, - 0x68, 0xf5, 0xad, 0x0b, 0x5a, 0x3c, 0x65, 0x1d, 0x20, 0x90, 0x45, 0xd6, 0xe9, 0xf4, 0xfb, 0x9f, - 0xa3, 0x45, 0x5d, 0x49, 0x7d, 0x61, 0x0f, 0x54, 0x88, 0x9d, 0x62, 0x97, 0x96, 0x76, 0x3f, 0xaa, - 0x65, 0xea, 0x95, 0x2e, 0xb1, 0x7d, 0x62, 0xf1, 0x01, 0xe0, 0x85, 0xbe, 0xea, 0x15, 0x84, 0x18, - 0xd0, 0x21, 0x12, 0x51, 0xef, 0x10, 0x89, 0x04, 0x10, 0x15, 0xfb, 0xab, 0xf0, 0x88, 0xda, 0xf9, - 0x57, 0xa8, 0x16, 0xc1, 0x9c, 0xb4, 0x51, 0x92, 0xec, 0x97, 0xdb, 0xc7, 0x9e, 0x01, 0xb6, 0x3c, - 0x5d, 0xc9, 0x53, 0x0f, 0x29, 0x95, 0x31, 0x04, 0xd8, 0x51, 0x04, 0xa2, 0x08, 0x09, 0xb9, 0xc0, - 0x98, 0x98, 0xa8, 0x47, 0xac, 0x3c, 0x8f, 0xf3, 0xc2, 0x57, 0xf1, 0x23, 0x09, 0x1a, 0xc4, 0xe1, - 0x3f, 0xc7, 0xc6, 0x70, 0x04, 0xf4, 0xc7, 0xfe, 0x0e, 0xfe, 0x3a, 0xb8, 0x43, 0x11, 0x2c, 0xa6, - 0x09, 0x11, 0x8c, 0xc5, 0x4d, 0xfd, 0x6c, 0x23, 0xf0, 0x56, 0x15, 0x4e, 0x99, 0x99, 0x40, 0xf0, - 0xf4, 0x51, 0x9d, 0x5a, 0x95, 0x4a, 0xe6, 0xc5, 0x73, 0xa2, 0xf3, 0x1a, 0xa8, 0x45, 0x5f, 0x11, - 0x0a, 0x0c, 0x4d, 0x48, 0xc6, 0x43, 0x4e, 0xfe, 0x62, 0x44, 0x08, 0x05, 0xb2, 0x4a, 0xb2, 0x8e, - 0x2a, 0x11, 0x84, 0x20, 0x25, 0x86, 0xd4, 0x47, 0x95, 0x05, 0xe5, 0x65, 0xed, 0x71, 0x11, 0x84, - 0x26, 0x82, 0xd6, 0x6d, 0x13, 0xba, 0x31, 0x32, 0x11, 0x52, 0x64, 0x23, 0x0b, 0xaa, 0xc8, 0xd8, - 0x30, 0x11, 0xc5, 0x36, 0xb0, 0x37, 0xcd, 0x5b, 0xf0, 0x96, 0x00, 0x04, 0xb9, 0x77, 0xc6, 0x66, - 0xac, 0x20, 0xae, 0x67, 0x89, 0x10, 0x36, 0x0e, 0xf1, 0x26, 0x39, 0xd5, 0xa8, 0x3c, 0xad, 0xb0, - 0x75, 0xeb, 0x45, 0x40, 0xcf, 0x4d, 0x54, 0x6d, 0x33, 0x43, 0x61, 0x19, 0xf1, 0x2f, 0xc5, 0x5b, - 0x69, 0xf8, 0x80, 0xec, 0x60, 0x6c, 0x4a, 0x8b, 0x30, 0x09, 0x81, 0x30, 0x93, 0x10, 0xf4, 0xb2, - 0xe2, 0xf9, 0x48, 0x2a, 0x4d, 0x4f, 0x3e, 0x9f, 0x7e, 0x20, 0x29, 0x63, 0x28, 0xf1, 0x85, 0x94, - 0x8b, 0x5d, 0x6a, 0xc6, 0xcb, 0x64, 0x47, 0x0f, 0x5c, 0x2e, 0x31, 0x31, 0x83, 0xaa, 0x44, 0x90, - 0x80, 0x8c, 0xc8, 0x4d, 0xc1, 0xdf, 0x04, 0xa1, 0x7c, 0x94, 0x62, 0xbb, 0x06, 0xe8, 0xf7, 0xc8, - 0x7e, 0x3c, 0x98, 0x0c, 0x74, 0x3b, 0x09, 0x7a, 0x27, 0x5f, 0x21, 0xdd, 0xd5, 0x5f, 0x54, 0x81, - 0xea, 0x99, 0x7a, 0xa5, 0x5e, 0xbd, 0xf5, 0xef, 0xa9, 0x57, 0xe1, 0x00, 0xf0, 0xee, 0x6e, 0x66, - 0x49, 0x00, 0x65, 0x13, 0xe1, 0x20, 0xbf, 0x8e, 0x98, 0xd2, 0xbb, 0xdd, 0x02, 0x68, 0x2d, 0x99, - 0x7d, 0x03, 0xbd, 0x95, 0x8b, 0xff, 0x04, 0x03, 0x7a, 0xea, 0xd4, 0x0b, 0x53, 0xa2, 0xe4, 0xbd, - 0xb1, 0xb8, 0x15, 0xdc, 0x16, 0x80, 0xfc, 0x21, 0x80, 0x44, 0x18, 0x57, 0x80, 0x12, 0xe8, 0x6a, - 0x41, 0x32, 0x17, 0xfd, 0x26, 0xe6, 0x10, 0xa4, 0xb6, 0x35, 0xca, 0x49, 0x16, 0x82, 0xe0, 0xd8, - 0x4e, 0xe2, 0x02, 0x7a, 0xd9, 0xaf, 0x81, 0x64, 0x74, 0x71, 0xfa, 0x9e, 0xc0, 0xdc, 0xb7, 0x0d, - 0xb2, 0x06, 0x99, 0x50, 0xdd, 0x44, 0xff, 0xfe, 0x78, 0xdd, 0x05, 0x19, 0x3e, 0x33, 0x5d, 0x8f, - 0x5e, 0xe8, 0xae, 0x5f, 0x2e, 0xc3, 0xa1, 0x16, 0xfe, 0xfd, 0x5a, 0xeb, 0x5f, 0x41, 0x57, 0xfa, - 0xf5, 0x71, 0xa1, 0x27, 0xbc, 0x30, 0x94, 0x05, 0xd6, 0x91, 0xf8, 0xe6, 0x14, 0x38, 0xcf, 0x22, - 0x4f, 0x89, 0x3a, 0x1c, 0x03, 0x64, 0x1f, 0x3e, 0xc1, 0xb2, 0x77, 0x85, 0xf8, 0x98, 0xf9, 0xc3, - 0x84, 0xe2, 0xa9, 0xc6, 0xb2, 0xea, 0x42, 0x8f, 0x1e, 0xae, 0xa5, 0xe2, 0x33, 0xf3, 0x72, 0xe3, - 0x4a, 0x78, 0x50, 0x7b, 0x52, 0x1a, 0xf0, 0xe2, 0x9e, 0x93, 0xaa, 0xe4, 0xf2, 0x38, 0xe9, 0xa5, - 0x86, 0x3e, 0xb8, 0x04, 0xd5, 0x35, 0xdf, 0x8b, 0xb8, 0x98, 0x52, 0x99, 0x17, 0x43, 0xb9, 0xc8, - 0x36, 0x8c, 0x36, 0x95, 0x6c, 0xb4, 0x47, 0x52, 0xdc, 0xfe, 0x1c, 0x8e, 0x7c, 0x10, 0x98, 0xe5, - 0x6e, 0x2d, 0x7c, 0x60, 0x84, 0x69, 0x05, 0x34, 0x4c, 0xef, 0x02, 0x33, 0x37, 0x99, 0x00, 0x71, - 0x97, 0x52, 0xf0, 0x84, 0x05, 0x47, 0x59, 0x30, 0x12, 0x28, 0x22, 0x9b, 0xa8, 0x25, 0xae, 0xf0, - 0x00, 0x21, 0x2f, 0xdc, 0x7d, 0x9a, 0xe1, 0x00, 0xf9, 0xd3, 0xd7, 0xb5, 0x39, 0x81, 0x83, 0x73, - 0x0f, 0x8e, 0x52, 0xa5, 0x68, 0x34, 0xa6, 0x1e, 0xdb, 0xab, 0xed, 0x35, 0xdf, 0xeb, 0x27, 0x86, - 0x7a, 0x3b, 0xc9, 0xd1, 0xcd, 0x49, 0xd1, 0x1c, 0xae, 0x5b, 0xba, 0xa9, 0xf1, 0x23, 0x45, 0x41, - 0xaa, 0x55, 0x21, 0x9e, 0x0c, 0x72, 0xc6, 0x01, 0xe6, 0x7b, 0x26, 0x44, 0x44, 0x85, 0x9a, 0xaa, - 0x3f, 0x45, 0xbd, 0xa2, 0x12, 0x9c, 0x59, 0x4d, 0xf0, 0x14, 0x95, 0x5d, 0x5d, 0xc4, 0x61, 0x5f, - 0x0a, 0x08, 0xd1, 0xb8, 0x64, 0x6c, 0x2d, 0x90, 0xfe, 0xac, 0x99, 0x20, 0x89, 0x23, 0x15, 0x0c, - 0x2e, 0x87, 0x8e, 0x13, 0x23, 0x06, 0x99, 0xc2, 0xc3, 0xc0, 0xf2, 0x50, 0x68, 0x58, 0x0c, 0x95, - 0x41, 0x5e, 0x08, 0x06, 0x6c, 0x92, 0x29, 0xcd, 0x74, 0x42, 0xe4, 0x0f, 0x1f, 0x34, 0x32, 0x5b, - 0x49, 0x6f, 0x51, 0x36, 0xd9, 0xbd, 0x7c, 0x77, 0xe0, 0xa0, 0x27, 0x56, 0x4d, 0xe3, 0x44, 0x4f, - 0xbe, 0xaf, 0xf1, 0xe2, 0x97, 0x55, 0x31, 0x88, 0xf5, 0xda, 0x29, 0x1a, 0x0e, 0x08, 0xcb, 0x34, - 0x32, 0xa5, 0xe1, 0x41, 0x02, 0x18, 0x10, 0xb3, 0xb4, 0x89, 0x07, 0xda, 0xa4, 0xce, 0x30, 0x9b, - 0x94, 0x0b, 0x7a, 0x85, 0xe7, 0x1b, 0xe3, 0x93, 0xe0, 0xf8, 0x50, 0x78, 0xc9, 0x31, 0x1a, 0x93, - 0x54, 0x4e, 0x14, 0xa3, 0xa5, 0x69, 0x0e, 0xd3, 0x72, 0x5a, 0x6c, 0xf7, 0x3c, 0x20, 0x0a, 0x76, - 0xcb, 0x9b, 0x9d, 0x8b, 0xdc, 0x77, 0xfa, 0xf8, 0x2b, 0x34, 0x4b, 0xde, 0xee, 0x80, 0x49, 0x8c, - 0xdf, 0x8e, 0x7c, 0x50, 0xa5, 0x8d, 0x0c, 0x53, 0x2f, 0x6a, 0x52, 0x22, 0x64, 0x70, 0x2a, 0x0f, - 0xe3, 0x8a, 0x7a, 0xfd, 0x0c, 0xe5, 0xc6, 0xe6, 0x74, 0x0d, 0xc0, 0xa8, 0x21, 0xd8, 0xfe, 0x2f, - 0x12, 0x82, 0xa7, 0x48, 0xce, 0xe7, 0xc3, 0xe1, 0xb1, 0xd8, 0x40, 0xd2, 0x08, 0x80, 0x18, 0xcf, - 0x50, 0x0a, 0x04, 0xee, 0xbf, 0x05, 0x74, 0x00, 0xee, 0x88, 0xef, 0xf8, 0xe0, 0x00, 0x4e, 0x97, - 0xa0, 0x93, 0x97, 0xc1, 0x0c, 0x5c, 0x5d, 0x55, 0xaf, 0xab, 0x82, 0x72, 0x55, 0x5d, 0x4d, 0xd4, - 0xc9, 0x7d, 0x7b, 0xe6, 0x35, 0x67, 0x53, 0x88, 0x12, 0x14, 0x23, 0xdc, 0xea, 0x15, 0xdc, 0x44, - 0x5a, 0x23, 0x25, 0x84, 0x22, 0x52, 0x0d, 0x71, 0x51, 0x47, 0xc4, 0x95, 0x31, 0x18, 0x11, 0x1a, - 0x3b, 0xf1, 0x82, 0x0e, 0x1a, 0x1e, 0x84, 0x01, 0x2d, 0x9e, 0x90, 0x5a, 0x30, 0x6d, 0xb9, 0x65, - 0x83, 0x1d, 0x7c, 0xf1, 0x83, 0xfc, 0x46, 0x0c, 0x07, 0xf0, 0x88, 0xed, 0x11, 0x21, 0x26, 0x2f, - 0x37, 0x7e, 0x54, 0x87, 0x50, 0xa6, 0x57, 0xa0, 0x9d, 0x71, 0x30, 0x47, 0x77, 0xcc, 0x8c, 0xbc, - 0x28, 0x16, 0xb7, 0x6e, 0x83, 0x74, 0x1a, 0x67, 0x87, 0x11, 0x1a, 0xbe, 0x33, 0x2c, 0xfd, 0x7c, - 0x14, 0x8b, 0xe9, 0xa4, 0xbb, 0x8e, 0x34, 0x56, 0x5e, 0x6c, 0x3d, 0xf2, 0x6e, 0xbf, 0x16, 0x65, - 0x98, 0x61, 0xcd, 0x12, 0x10, 0x53, 0x41, 0xa3, 0xf0, 0x52, 0x49, 0xa4, 0x0f, 0xf9, 0x94, 0x7f, - 0x83, 0x62, 0xe6, 0xf1, 0xca, 0x6e, 0xdd, 0xe9, 0xb1, 0xf8, 0xb5, 0xa1, 0x9c, 0x40, 0x77, 0xc4, - 0xab, 0x0b, 0x8f, 0x10, 0x3c, 0x95, 0x05, 0x4b, 0xe8, 0x33, 0xe1, 0x54, 0x3d, 0xf8, 0x45, 0x09, - 0x3a, 0x7d, 0x7a, 0xba, 0x11, 0xd7, 0xd1, 0xdd, 0x09, 0x75, 0x72, 0x27, 0xab, 0x3e, 0x8a, 0x44, - 0xbe, 0xa4, 0x49, 0x79, 0x48, 0xbb, 0x3f, 0x04, 0xe4, 0x92, 0x28, 0x2f, 0xa3, 0xda, 0x0c, 0x64, - 0xac, 0xfb, 0xe0, 0x98, 0x51, 0x6c, 0x4b, 0xf3, 0x5b, 0x87, 0xb1, 0xbc, 0x1f, 0x04, 0x08, 0x48, - 0x7a, 0x06, 0x8c, 0x1e, 0xf8, 0xc2, 0x3b, 0x7b, 0xe4, 0x5a, 0xdd, 0x86, 0x45, 0x4d, 0xf7, 0x76, - 0x05, 0xe6, 0xad, 0x57, 0xc1, 0x44, 0xa1, 0x95, 0xc8, 0x18, 0x1b, 0x63, 0xe5, 0x2c, 0xc3, 0x9f, - 0x13, 0x31, 0x05, 0x75, 0xc4, 0xa3, 0x39, 0xa9, 0x5f, 0xbd, 0x6b, 0x88, 0x8c, 0x91, 0x88, 0xd8, - 0x9d, 0x83, 0x88, 0x7b, 0x92, 0xb9, 0x1a, 0xbc, 0xd0, 0x5b, 0x69, 0xa3, 0x98, 0x29, 0xaa, 0x93, - 0xa8, 0xe7, 0x08, 0xc4, 0x53, 0x05, 0x62, 0xcf, 0xe9, 0x25, 0xff, 0x4a, 0xa4, 0xcd, 0xfd, 0xc0, - 0xbf, 0x54, 0xac, 0x6a, 0x7e, 0xc4, 0x9c, 0x79, 0x0f, 0x73, 0x32, 0xbc, 0x3d, 0x7d, 0x2e, 0x27, - 0x10, 0xbf, 0x47, 0xef, 0xa3, 0xc5, 0xf5, 0xc2, 0x7e, 0xbd, 0xf5, 0x78, 0x5b, 0xac, 0x52, 0xf5, - 0x22, 0x5f, 0x44, 0xc3, 0xe6, 0x18, 0xf5, 0x1f, 0x28, 0xd7, 0x19, 0x40, 0x25, 0xe0, 0x36, 0xec, - 0x00, 0x03, 0x4c, 0xe1, 0xa8, 0xf7, 0x56, 0x20, 0x27, 0x11, 0x83, 0xb1, 0xd1, 0x84, 0x8f, 0x7c, - 0x99, 0x5a, 0xf8, 0x4c, 0xd6, 0x96, 0xf7, 0x7f, 0x2c, 0xc3, 0x12, 0xd1, 0x7e, 0x5f, 0x82, 0x10, - 0x98, 0xf0, 0x04, 0x67, 0x7e, 0x8a, 0xe8, 0x4e, 0xa4, 0xe8, 0x95, 0x2f, 0x44, 0xd4, 0x47, 0x45, - 0x68, 0xae, 0x88, 0xe7, 0xd7, 0xbe, 0xb9, 0x5f, 0x57, 0xbe, 0x2c, 0x73, 0xbd, 0x92, 0x6d, 0x8e, - 0x8b, 0x03, 0xae, 0x84, 0xf7, 0xc8, 0x47, 0xdd, 0xf0, 0x42, 0x54, 0x9e, 0x83, 0x7f, 0x88, 0x14, - 0xbb, 0x49, 0xbd, 0xfc, 0xa1, 0x1c, 0x6c, 0x40, 0x65, 0x74, 0x5e, 0xfa, 0xd4, 0x4f, 0x57, 0x27, - 0xeb, 0x55, 0xd6, 0x37, 0xd5, 0x88, 0xde, 0x88, 0xc4, 0x47, 0x45, 0xab, 0xe3, 0x02, 0xd6, 0xd0, - 0x8a, 0xcb, 0x8c, 0xf6, 0xa8, 0x66, 0x35, 0x2a, 0xaa, 0xbe, 0x14, 0x29, 0x48, 0x3b, 0x15, 0xd3, - 0x77, 0x53, 0x0a, 0xd9, 0x14, 0x56, 0x84, 0xab, 0xeb, 0xdf, 0xe2, 0xf6, 0x6c, 0x2b, 0x2e, 0x20, - 0xb0, 0x76, 0x08, 0x12, 0x15, 0xf1, 0x35, 0x59, 0x19, 0x36, 0x6f, 0x00, 0x15, 0xf2, 0x95, 0x3b, - 0xa0, 0x2f, 0x19, 0x9b, 0x14, 0xbf, 0x54, 0xd2, 0x80, 0xab, 0x9d, 0xa8, 0x5e, 0xaa, 0xac, 0xd7, - 0x2e, 0xaa, 0xbe, 0x27, 0x41, 0xc6, 0xce, 0x14, 0x74, 0xcc, 0x9d, 0x91, 0xba, 0x1e, 0x74, 0xbe, - 0xae, 0x02, 0x7d, 0x52, 0x25, 0xd1, 0x1e, 0x4e, 0xad, 0x15, 0xd1, 0x75, 0xf4, 0x47, 0xf1, 0x02, - 0x87, 0x50, 0x0a, 0x2b, 0x73, 0xa4, 0x15, 0xdf, 0x8c, 0x24, 0xca, 0x4b, 0xaa, 0x68, 0x45, 0x61, - 0x91, 0x96, 0x73, 0x35, 0x41, 0xa7, 0xc4, 0xd6, 0x59, 0x05, 0x58, 0x4f, 0x64, 0x22, 0xec, 0xbc, - 0x21, 0x01, 0xed, 0xce, 0x76, 0x6c, 0xdc, 0xa3, 0x5a, 0x35, 0x22, 0x93, 0x54, 0x15, 0x6f, 0x2e, - 0xd1, 0xaa, 0x86, 0x3f, 0xa3, 0xb3, 0xe1, 0x12, 0x2a, 0x31, 0x9a, 0x8d, 0xac, 0x38, 0x29, 0xd3, - 0x69, 0x1a, 0xad, 0x9c, 0xd1, 0x00, 0xea, 0xf1, 0x25, 0xd4, 0xdf, 0x41, 0xfa, 0x65, 0xcd, 0x6f, - 0x6d, 0xf6, 0xd7, 0x25, 0x32, 0x78, 0x15, 0xc1, 0x49, 0xd8, 0xd5, 0x6f, 0x7a, 0xaa, 0x3f, 0x57, - 0x42, 0xf2, 0x8b, 0xe8, 0xa9, 0x61, 0xfe, 0x87, 0xb9, 0xf4, 0x10, 0xff, 0xc8, 0x28, 0x81, 0x83, - 0x6b, 0xe0, 0xb6, 0x91, 0x32, 0x92, 0x1e, 0xff, 0xf8, 0xd2, 0x4e, 0xda, 0xae, 0x50, 0x3c, 0x16, - 0x28, 0xa6, 0x37, 0x4f, 0x4c, 0x9e, 0x01, 0xb5, 0x2d, 0x25, 0xf5, 0x77, 0x62, 0xf2, 0x88, 0xe3, - 0xcc, 0xbc, 0x82, 0x6d, 0xb7, 0xf0, 0x45, 0x04, 0xba, 0x57, 0x25, 0xc6, 0x29, 0x41, 0xfc, 0xb8, - 0x8b, 0x54, 0xc7, 0xc6, 0x13, 0x38, 0x11, 0x7a, 0x98, 0x86, 0x92, 0x5d, 0x1d, 0x86, 0x33, 0x47, - 0x54, 0xbe, 0xce, 0x83, 0x26, 0x22, 0xfc, 0x11, 0x97, 0x2b, 0x18, 0xaf, 0xa2, 0xa6, 0x41, 0x13, - 0xc4, 0x80, 0xf6, 0x9f, 0x13, 0xa1, 0x95, 0xf5, 0xca, 0x23, 0xab, 0xc5, 0xf5, 0x61, 0xe2, 0xc9, - 0x77, 0x76, 0x0e, 0x40, 0x80, 0x97, 0x3c, 0x21, 0x4d, 0x72, 0x74, 0x5a, 0x9c, 0x90, 0x69, 0x08, - 0x1e, 0x9b, 0xa9, 0xe6, 0x25, 0xe8, 0xfc, 0x15, 0x1a, 0x48, 0xef, 0xa5, 0x87, 0x77, 0x34, 0x4b, - 0x89, 0x54, 0xba, 0x7d, 0x93, 0x1f, 0x17, 0x29, 0xc1, 0x5c, 0x20, 0x8d, 0xba, 0x1b, 0x11, 0x4b, - 0x56, 0x99, 0xf8, 0x26, 0x16, 0x5c, 0x2d, 0x44, 0xbd, 0xc6, 0x89, 0xc7, 0x6f, 0x56, 0xcb, 0xda, - 0xb9, 0x0a, 0xef, 0x55, 0xd5, 0x95, 0xc5, 0x0a, 0xad, 0x1b, 0x74, 0xeb, 0x82, 0x30, 0x8d, 0xdd, - 0x6c, 0x7d, 0x17, 0xa1, 0x4e, 0x84, 0x65, 0x09, 0xf3, 0x08, 0x6b, 0x6b, 0xcb, 0x55, 0x55, 0x58, - 0x81, 0x9c, 0x86, 0xda, 0x74, 0x33, 0xb9, 0x50, 0xc1, 0x48, 0xe8, 0x8d, 0xe5, 0xdd, 0xd9, 0xaf, - 0x90, 0x43, 0x23, 0x31, 0xf8, 0xb2, 0xe3, 0x70, 0x87, 0x33, 0x56, 0xd7, 0xc2, 0x42, 0xcd, 0x6c, - 0xcf, 0x72, 0x0d, 0x62, 0xe5, 0xd7, 0x90, 0x10, 0x07, 0xd9, 0x27, 0xa2, 0x06, 0xd2, 0x0f, 0x82, - 0xc3, 0x9c, 0x30, 0x17, 0x47, 0xa4, 0x70, 0xa4, 0x24, 0x56, 0x63, 0xdc, 0xff, 0x45, 0x89, 0xc3, - 0xcd, 0xd0, 0xd7, 0xd1, 0x1b, 0xe4, 0x10, 0xaa, 0xaa, 0xf9, 0x6a, 0xaa, 0x98, 0x6b, 0xa1, 0x69, - 0xd7, 0xa2, 0xa4, 0x4b, 0xa2, 0x41, 0x7d, 0x11, 0xa4, 0xe8, 0xac, 0xae, 0x28, 0x61, 0x06, 0x2d, - 0x48, 0xa1, 0x66, 0xbe, 0x28, 0x92, 0x8c, 0x57, 0x5b, 0x1f, 0xd9, 0xfa, 0xaa, 0xe1, 0x19, 0xc3, - 0x03, 0x1b, 0x69, 0xcb, 0xe9, 0xe5, 0xf4, 0x3f, 0x08, 0x88, 0xdb, 0x7b, 0x98, 0x53, 0xa2, 0x8d, - 0x04, 0x9f, 0x12, 0x7d, 0x01, 0x99, 0xfc, 0x06, 0x96, 0x74, 0x9e, 0x09, 0x04, 0xbd, 0xdf, 0xbe, - 0xaf, 0xf5, 0xea, 0xe5, 0x29, 0x32, 0xff, 0x57, 0xfa, 0xb3, 0xe0, 0x90, 0x8a, 0xaa, 0xaf, 0x5c, - 0x83, 0x96, 0xbf, 0x2e, 0x4c, 0xfc, 0xa2, 0x5d, 0xaa, 0x8d, 0xe8, 0xec, 0x57, 0x46, 0xd4, 0x5f, - 0x47, 0xe9, 0xfa, 0x29, 0x52, 0xf8, 0xb1, 0x8a, 0xab, 0xca, 0xd6, 0x0b, 0x88, 0x08, 0xe2, 0xe8, - 0x97, 0x68, 0x53, 0x5a, 0xfc, 0x11, 0x15, 0x05, 0x9b, 0xf7, 0xc1, 0x46, 0xb5, 0xaa, 0xdf, 0xe1, - 0x11, 0x0d, 0x9c, 0x26, 0x68, 0xa5, 0x93, 0x15, 0x8d, 0xc0, 0xa1, 0x19, 0xe7, 0x21, 0x1f, 0x0b, - 0x14, 0xf7, 0xc1, 0x54, 0x90, 0xb2, 0x2b, 0x23, 0x2e, 0x12, 0xb9, 0x44, 0x85, 0x91, 0xc7, 0xba, - 0x03, 0xec, 0x24, 0x6e, 0xcb, 0xbe, 0x2a, 0xc0, 0xb2, 0xe2, 0xcc, 0x85, 0xbc, 0xb7, 0xb1, 0x27, - 0xc5, 0x8d, 0x4c, 0x78, 0x6c, 0x67, 0xc6, 0xf2, 0xf5, 0x6a, 0xea, 0xdf, 0x57, 0xfa, 0xbd, 0x72, - 0x09, 0xd5, 0x7d, 0x1b, 0xe3, 0xc1, 0x09, 0x1c, 0xb8, 0x53, 0x1b, 0x1d, 0xff, 0x14, 0x29, 0x9a, - 0xb3, 0x67, 0x69, 0x61, 0x7e, 0x8e, 0xff, 0x57, 0x9f, 0xa2, 0xf5, 0x75, 0x7f, 0x8a, 0x32, 0x34, - 0x68, 0xd1, 0xb5, 0x69, 0xa5, 0xdd, 0xba, 0xfc, 0x75, 0x45, 0xdb, 0x45, 0x29, 0x91, 0xf8, 0xf8, - 0x55, 0xaf, 0x10, 0x24, 0x4d, 0xd1, 0xbb, 0xd8, 0x33, 0xd7, 0xc8, 0x22, 0x4d, 0xfc, 0x12, 0xd0, - 0xa1, 0x2e, 0x92, 0x9a, 0x5a, 0xa1, 0xfe, 0xcb, 0x4d, 0xab, 0xfb, 0x23, 0xbb, 0xba, 0xe8, 0x5b, - 0xfc, 0x11, 0x91, 0x55, 0x6f, 0xf5, 0x7f, 0x82, 0xa2, 0xd9, 0x2a, 0x6c, 0x99, 0x22, 0x4d, 0xec, - 0xbf, 0xae, 0x08, 0x4a, 0xe2, 0xb7, 0x15, 0xda, 0xba, 0x37, 0xeb, 0x82, 0x8b, 0xbd, 0xdd, 0xdd, - 0xdf, 0xea, 0xcf, 0x8a, 0x14, 0xab, 0x51, 0xf5, 0xff, 0x82, 0x88, 0x8c, 0x04, 0x69, 0x5c, 0x90, - 0x52, 0xa7, 0xd6, 0x2f, 0xae, 0x50, 0xc7, 0x42, 0xfb, 0xeb, 0x15, 0xf5, 0xaf, 0x82, 0x83, 0x46, - 0x0d, 0x3d, 0x83, 0x48, 0xd1, 0xb8, 0xed, 0xf7, 0x74, 0x6c, 0xfe, 0xac, 0x7c, 0x25, 0x3c, 0x72, - 0x19, 0x4a, 0xd7, 0xc6, 0x45, 0xc5, 0xf1, 0x7d, 0x0d, 0x62, 0x63, 0x04, 0xc3, 0x04, 0xef, 0xd2, - 0x9a, 0x9e, 0x4b, 0xdf, 0xe0, 0x92, 0xdc, 0x78, 0x1b, 0x98, 0xb4, 0x5f, 0x05, 0x24, 0x0b, 0xee, - 0x28, 0x9c, 0x35, 0x48, 0xa2, 0x9a, 0x69, 0xcc, 0x2f, 0xf8, 0x2e, 0xde, 0x2a, 0xe0, 0x94, 0xe4, - 0x48, 0x2f, 0xaa, 0x94, 0x20, 0xc4, 0xff, 0x0a, 0x09, 0x04, 0x8e, 0x87, 0xf0, 0x9f, 0x0c, 0x07, - 0x87, 0x8c, 0x9b, 0xb3, 0x9c, 0x1d, 0x68, 0xa6, 0x6a, 0x74, 0xf3, 0x51, 0xb3, 0xa3, 0x7c, 0x12, - 0xd8, 0x23, 0x03, 0x9d, 0xb9, 0x88, 0x24, 0x10, 0x23, 0xe0, 0xc4, 0xea, 0x71, 0xff, 0x04, 0x66, - 0x52, 0x28, 0x5d, 0xfe, 0x0a, 0x22, 0xb7, 0x77, 0x22, 0x9c, 0x09, 0x0d, 0xfe, 0xbd, 0xf0, 0x45, - 0x7d, 0xba, 0xf8, 0x24, 0x12, 0xae, 0x94, 0x89, 0x71, 0x30, 0x46, 0x22, 0x65, 0x07, 0x51, 0xc1, - 0xf5, 0x7f, 0x82, 0x3d, 0xa6, 0xbd, 0xf5, 0xf7, 0xc4, 0x18, 0x92, 0x9a, 0x5b, 0x6d, 0x7c, 0x49, - 0x2c, 0x06, 0x34, 0xca, 0xac, 0x99, 0xf8, 0x2d, 0x3a, 0x52, 0xfd, 0x35, 0x60, 0xca, 0x9f, 0x04, - 0x7c, 0xbb, 0x79, 0xfa, 0x2f, 0x4f, 0xd1, 0x3a, 0x37, 0x82, 0x2c, 0x60, 0x7b, 0x7c, 0xbe, 0x14, - 0xc8, 0xd0, 0x33, 0xa1, 0xce, 0x26, 0xc2, 0xce, 0x9b, 0x76, 0xa9, 0x99, 0xbe, 0x8b, 0xf5, 0xf0, - 0xa1, 0x16, 0x54, 0x9e, 0x8e, 0xab, 0x35, 0x58, 0xe7, 0xee, 0xab, 0x10, 0x14, 0xb0, 0xb3, 0x66, - 0x3c, 0xac, 0x89, 0x6a, 0xb9, 0x14, 0x1b, 0x25, 0xe6, 0xc3, 0xa6, 0x3d, 0xe2, 0x01, 0x0d, 0x8c, - 0xca, 0x84, 0x1a, 0x3b, 0xe2, 0x01, 0x4d, 0x8e, 0xef, 0x19, 0x40, 0x56, 0x1a, 0xa0, 0xfe, 0xd9, - 0x3d, 0x7d, 0x1f, 0xb8, 0x88, 0x23, 0xcb, 0xde, 0x27, 0xf8, 0x2a, 0x88, 0xa8, 0x17, 0x51, 0x35, - 0x0a, 0xac, 0x49, 0x25, 0x09, 0x47, 0x43, 0x1a, 0xa7, 0xc1, 0x1d, 0x02, 0x6e, 0x93, 0xf8, 0x80, - 0x46, 0x48, 0xd0, 0xce, 0x51, 0x6d, 0xf8, 0x88, 0x2e, 0xab, 0x15, 0x1b, 0xca, 0xd2, 0x91, 0xef, - 0xa2, 0xff, 0xe0, 0x84, 0x4a, 0x4f, 0x76, 0x7d, 0x11, 0xeb, 0xb3, 0x4b, 0xef, 0xea, 0xf5, 0xc4, - 0x15, 0xcb, 0x47, 0x79, 0x8c, 0xc3, 0x11, 0xf0, 0x9d, 0x73, 0x3f, 0x0a, 0x63, 0xcc, 0x91, 0x32, - 0xdb, 0x7d, 0x01, 0xa6, 0x75, 0xa1, 0x52, 0x84, 0xbc, 0x63, 0x84, 0x94, 0x51, 0x23, 0x2d, 0x61, - 0x10, 0x1a, 0xf9, 0x0c, 0xab, 0x57, 0xc1, 0x17, 0x6d, 0x72, 0x9b, 0xab, 0xc2, 0xbc, 0x4c, 0x3b, - 0x64, 0xfe, 0x3a, 0x67, 0x44, 0xb8, 0x28, 0xc6, 0xfe, 0x38, 0x98, 0xfa, 0x1b, 0xf5, 0x70, 0x57, - 0x53, 0x52, 0x38, 0xac, 0x09, 0x90, 0x2c, 0x5d, 0x0a, 0x91, 0x24, 0xb3, 0xe2, 0x69, 0x5b, 0xaa, - 0x1d, 0x0f, 0x89, 0x08, 0x4a, 0x18, 0xc4, 0x41, 0xab, 0x5a, 0x6c, 0x11, 0x18, 0x6f, 0xe2, 0x04, - 0x8c, 0xee, 0x70, 0x83, 0x37, 0xdf, 0x2d, 0x0a, 0x52, 0x99, 0x06, 0x0b, 0xa9, 0xe5, 0xca, 0xca, - 0xeb, 0xaf, 0x7c, 0x17, 0x15, 0xd6, 0xda, 0xd8, 0x6d, 0xff, 0xe0, 0x98, 0x8a, 0xaa, 0x6a, 0x6a, - 0x97, 0x7d, 0x17, 0x2f, 0x10, 0x3e, 0x9b, 0xf3, 0xa0, 0x66, 0xe5, 0x62, 0xdf, 0xc4, 0x08, 0x2e, - 0x4f, 0x56, 0x6b, 0xf1, 0xfd, 0xde, 0xda, 0xdd, 0xec, 0x7e, 0xaf, 0xf3, 0x0e, 0xdd, 0xd7, 0x47, - 0xef, 0xb1, 0x22, 0xb1, 0x58, 0xad, 0xfd, 0x62, 0xf8, 0x52, 0x49, 0x66, 0x6a, 0x89, 0xaa, 0xba, - 0x6f, 0x18, 0xbf, 0x14, 0x8c, 0x22, 0x1a, 0x94, 0x4b, 0x2c, 0x86, 0xff, 0x04, 0xc4, 0x03, 0x1f, - 0x20, 0x58, 0x41, 0xb2, 0x80, 0x03, 0x75, 0x64, 0x77, 0x7d, 0x08, 0x1d, 0xbe, 0x6b, 0xdf, 0xe8, - 0xfa, 0x9b, 0xab, 0x7d, 0x5a, 0x4e, 0xad, 0x5d, 0x11, 0xa7, 0xea, 0xf3, 0x75, 0xaf, 0xac, 0x5f, - 0x21, 0x55, 0x55, 0x7d, 0x6b, 0xe8, 0x95, 0xe2, 0x42, 0x12, 0xa9, 0xcf, 0xd6, 0xaa, 0x41, 0x86, - 0x37, 0x43, 0x0c, 0x32, 0xf8, 0x83, 0xa6, 0x42, 0x7f, 0x5b, 0x36, 0x5c, 0x93, 0x66, 0xc5, 0x6d, - 0xb4, 0x74, 0x7c, 0x27, 0x6c, 0xdd, 0xa0, 0x95, 0x03, 0x92, 0xb5, 0xe2, 0x09, 0x56, 0x39, 0x47, - 0xbd, 0x11, 0xeb, 0xab, 0xfc, 0x17, 0x1d, 0x24, 0xb4, 0xdb, 0x22, 0x9a, 0xdb, 0xc4, 0x82, 0x9b, - 0x4f, 0x10, 0xb1, 0xa6, 0xe9, 0x28, 0xf7, 0xaf, 0x8c, 0x99, 0x47, 0x6a, 0x2b, 0x95, 0x8c, 0xec, - 0x0d, 0xf3, 0xfb, 0x1f, 0x12, 0x09, 0xf3, 0xb0, 0x81, 0xd1, 0xa5, 0x74, 0x04, 0x5f, 0xf0, 0x5c, - 0x65, 0xaa, 0xdd, 0xfd, 0xe2, 0x41, 0x36, 0x7b, 0xd5, 0x64, 0x51, 0x17, 0xc1, 0x21, 0x47, 0x89, - 0x88, 0x12, 0x90, 0x80, 0xa5, 0xfe, 0x08, 0xa5, 0x31, 0x14, 0x62, 0xb6, 0x02, 0xf3, 0xea, 0xff, - 0x45, 0xff, 0xc1, 0x5d, 0x2d, 0x42, 0xd5, 0x96, 0xd7, 0x35, 0x24, 0xc2, 0x53, 0xbe, 0x08, 0x88, - 0xc1, 0xcd, 0x7c, 0xab, 0x90, 0x52, 0xad, 0x57, 0x28, 0xb7, 0x7c, 0x67, 0x57, 0x8c, 0xe7, 0x15, - 0x2d, 0x4b, 0x08, 0x5f, 0xec, 0xe2, 0x5e, 0x81, 0x57, 0xc4, 0x61, 0x97, 0x28, 0xbf, 0x82, 0x5a, - 0x32, 0x70, 0xa1, 0x8d, 0x4a, 0xa2, 0xf2, 0xb2, 0x35, 0x44, 0xcc, 0x6b, 0x75, 0xb7, 0xd9, 0xcf, - 0x16, 0x51, 0xb1, 0xac, 0x40, 0x8a, 0x08, 0xb8, 0xf6, 0x5c, 0x7f, 0xe0, 0xb6, 0x80, 0xdd, 0x92, - 0x6e, 0xff, 0xfe, 0x0a, 0x2f, 0x67, 0xa1, 0xbf, 0xae, 0x22, 0x3c, 0xb3, 0x57, 0x3f, 0x18, 0x42, - 0x47, 0xb4, 0x46, 0x51, 0xde, 0x22, 0xb9, 0xfc, 0x40, 0x24, 0xb4, 0xbb, 0xfc, 0x11, 0x65, 0x61, - 0xdb, 0xe5, 0xf3, 0x53, 0x99, 0x9f, 0xa3, 0x57, 0xc1, 0x11, 0x65, 0x84, 0xf0, 0xbf, 0xc1, 0x14, - 0xb6, 0xee, 0xed, 0xf5, 0x63, 0xe8, 0xad, 0xf4, 0x52, 0x27, 0xd1, 0x9e, 0x5e, 0x61, 0x12, 0x0d, - 0x19, 0x06, 0x2f, 0xa2, 0xb5, 0x75, 0x69, 0xba, 0xb5, 0x75, 0x7b, 0xe1, 0x01, 0x14, 0xce, 0x00, - 0xdc, 0x7d, 0x7d, 0x5b, 0x6b, 0x82, 0xe1, 0x79, 0x4e, 0x36, 0xe8, 0x9b, 0xf7, 0xd1, 0x7a, 0xf8, - 0xa1, 0x4a, 0xaa, 0xa8, 0x75, 0xf8, 0x2c, 0x2a, 0xb7, 0x9a, 0xac, 0x04, 0x35, 0x66, 0x8c, 0x57, - 0x0a, 0xb8, 0x8a, 0xff, 0x04, 0xa5, 0x17, 0x66, 0xc7, 0xb6, 0x95, 0xfc, 0x48, 0x50, 0xab, 0x27, - 0xa8, 0xb8, 0xba, 0xa3, 0xd5, 0x6c, 0x02, 0xb5, 0xc4, 0x09, 0x0a, 0x48, 0x41, 0x28, 0x60, 0x30, - 0x2c, 0xc2, 0x02, 0xa3, 0xd4, 0xc5, 0xf1, 0xc1, 0x70, 0x32, 0xba, 0x1f, 0xfe, 0x0a, 0xcd, 0x8e, - 0xa0, 0x39, 0xc2, 0xf2, 0xd5, 0x26, 0x1f, 0x04, 0xa9, 0x17, 0x35, 0x8a, 0x5f, 0x05, 0xc5, 0x66, - 0x7a, 0x72, 0x32, 0x70, 0xc3, 0x77, 0xe2, 0x20, 0xb2, 0x64, 0x83, 0x86, 0xc1, 0x13, 0xb1, 0xdd, - 0xc7, 0x51, 0x1a, 0xc4, 0x70, 0x0e, 0x7b, 0x89, 0x82, 0x1d, 0xb8, 0xad, 0xfb, 0xc4, 0x02, 0x39, - 0x14, 0x24, 0x5c, 0x52, 0x10, 0x14, 0x7f, 0x12, 0x89, 0xd5, 0x89, 0x09, 0x19, 0x8e, 0xa9, 0x2d, - 0x45, 0xfc, 0x24, 0x2c, 0xe2, 0x02, 0xee, 0xe3, 0xb2, 0xad, 0xf9, 0x6b, 0x82, 0xac, 0x64, 0xaa, - 0x2c, 0x20, 0xa1, 0xa0, 0xce, 0x18, 0x0f, 0x8f, 0x03, 0x81, 0xa6, 0x91, 0xbc, 0x48, 0x53, 0x4a, - 0x66, 0xb3, 0x29, 0x19, 0x50, 0x06, 0x0b, 0x1c, 0x3a, 0xbb, 0x71, 0xee, 0x5f, 0x05, 0x36, 0x88, - 0x41, 0x85, 0x0d, 0x05, 0x26, 0x67, 0x5d, 0x71, 0x30, 0x45, 0x99, 0xcb, 0xc6, 0x7c, 0x10, 0x96, - 0xc6, 0xba, 0xbe, 0x61, 0xcf, 0x77, 0x15, 0xd1, 0x5a, 0x37, 0x82, 0x21, 0x49, 0x96, 0x0c, 0x9f, - 0xfa, 0xba, 0x17, 0xd5, 0xd1, 0x5f, 0xe0, 0x8e, 0x4c, 0x97, 0x1f, 0xf2, 0x44, 0x44, 0xf5, 0x2a, - 0x04, 0xb0, 0x74, 0xfb, 0x07, 0x89, 0x85, 0x3a, 0x6a, 0xda, 0xb7, 0x54, 0xd5, 0x36, 0xcd, 0x9a, - 0x3b, 0xf0, 0x49, 0x6a, 0x60, 0xc1, 0x43, 0x95, 0x71, 0x7d, 0xcb, 0xcf, 0xff, 0x88, 0x05, 0x9c, - 0x94, 0xb5, 0x74, 0x0d, 0x68, 0x1a, 0x1b, 0xf1, 0x02, 0x5d, 0xcb, 0xde, 0xfc, 0x10, 0x91, 0xed, - 0xd3, 0xaf, 0xa2, 0xbd, 0x70, 0x51, 0xdd, 0x37, 0x9d, 0x9f, 0xbe, 0x14, 0x94, 0x10, 0x06, 0xce, - 0x30, 0x74, 0x93, 0x3c, 0xb7, 0xa2, 0xee, 0x41, 0xd6, 0xfa, 0xf5, 0x70, 0x45, 0x77, 0x7b, 0x57, - 0x04, 0x33, 0x90, 0x4b, 0x62, 0xb2, 0xfe, 0xae, 0xbd, 0xf4, 0x5e, 0xfa, 0xf7, 0xd5, 0xab, 0xb1, - 0x8e, 0xf7, 0xf4, 0x77, 0x2b, 0xab, 0xa1, 0x2e, 0x14, 0x14, 0xa8, 0xfb, 0x97, 0xbd, 0x27, 0x0d, - 0x23, 0x6d, 0x28, 0xb2, 0x96, 0xfb, 0xa5, 0x2f, 0x85, 0x0a, 0x2b, 0x1f, 0x33, 0x39, 0x48, 0xb6, - 0x5c, 0x00, 0xae, 0xb3, 0xab, 0x75, 0x55, 0x17, 0xb7, 0xcd, 0x55, 0xfc, 0x12, 0x96, 0xb5, 0x55, - 0x55, 0xaf, 0x84, 0x26, 0x81, 0xc3, 0x52, 0xe5, 0x0a, 0xca, 0x19, 0x45, 0x03, 0x60, 0xe5, 0x54, - 0xbe, 0x8b, 0xdf, 0x35, 0xf7, 0x5c, 0x16, 0xd3, 0x28, 0x21, 0x4f, 0x6e, 0xd9, 0x0a, 0x3f, 0xc1, - 0x09, 0x2a, 0x4c, 0x91, 0xff, 0xec, 0x95, 0x55, 0x5d, 0x5f, 0x88, 0x82, 0x61, 0x36, 0xd5, 0x55, - 0xb1, 0x8d, 0x20, 0x92, 0xaf, 0x57, 0xf8, 0x9b, 0xef, 0x75, 0x5f, 0x57, 0xfa, 0xe6, 0x7c, 0xa6, - 0x77, 0x7a, 0xe3, 0xce, 0xee, 0xe7, 0x50, 0xf2, 0x0b, 0xdb, 0xb7, 0x6d, 0x3e, 0x24, 0x12, 0xcf, - 0x03, 0x11, 0xab, 0xd5, 0xa4, 0x0f, 0xff, 0x57, 0xf8, 0x23, 0x2b, 0x7b, 0x67, 0x5f, 0xd7, 0x24, - 0xf8, 0x28, 0x91, 0x55, 0x9f, 0x33, 0x0c, 0xbb, 0x89, 0x8e, 0x8e, 0xd2, 0x9e, 0x5e, 0x52, 0x25, - 0x62, 0x2d, 0xb4, 0x52, 0x41, 0xdd, 0x7e, 0x09, 0xf3, 0x28, 0xd8, 0x8d, 0x5c, 0xeb, 0xfb, 0x95, - 0x6a, 0x03, 0x66, 0xba, 0x25, 0x7c, 0x16, 0x14, 0xcc, 0x1b, 0x39, 0xa9, 0x65, 0x1d, 0x4e, 0x4a, - 0xc7, 0x6f, 0x82, 0x7b, 0xab, 0xb6, 0x81, 0x18, 0x61, 0x7a, 0xb2, 0xf9, 0x87, 0x69, 0xbf, 0xa3, - 0xbc, 0x23, 0xc9, 0xb6, 0xdb, 0x6b, 0x82, 0x49, 0x66, 0x73, 0x13, 0x93, 0x6c, 0x3b, 0xe3, 0x8c, - 0x3a, 0xc5, 0x2b, 0xef, 0xe6, 0x44, 0xbf, 0x06, 0x9a, 0xd9, 0xeb, 0xc3, 0xc0, 0x83, 0x52, 0x1e, - 0x01, 0xad, 0xed, 0x5c, 0xbe, 0x4a, 0xaa, 0xfc, 0x28, 0x59, 0xef, 0x5d, 0x92, 0xaa, 0xc9, 0x49, - 0x63, 0x56, 0xfb, 0x2a, 0xa9, 0xb2, 0x5f, 0x47, 0xf7, 0xd1, 0x9b, 0xe5, 0x93, 0xd7, 0xe6, 0xaa, - 0x8b, 0xaf, 0xab, 0xfc, 0x16, 0xd5, 0x32, 0x7b, 0xd8, 0xd5, 0xfe, 0x14, 0xea, 0xb4, 0xdb, 0x33, - 0x11, 0x7a, 0xac, 0xfd, 0xc4, 0x09, 0x04, 0x24, 0x73, 0x77, 0xf4, 0x37, 0xfa, 0x2b, 0xfc, 0x12, - 0x5c, 0x56, 0xef, 0x55, 0xc1, 0x09, 0x2f, 0x7a, 0xae, 0x8f, 0xdf, 0x27, 0x66, 0x7c, 0xf2, 0x48, - 0x18, 0x0a, 0xd4, 0xb8, 0x95, 0x7f, 0x82, 0xd2, 0xb9, 0xd8, 0x10, 0xd2, 0xe2, 0xb7, 0x29, 0x8a, - 0x6a, 0xe8, 0xcd, 0xf6, 0x4d, 0xda, 0xf4, 0x27, 0xa4, 0xe8, 0x91, 0x95, 0xcc, 0x7b, 0xbb, 0x96, - 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x23, 0x11, 0xb0, 0x11, 0xa0, 0xd7, 0x43, 0x6a, 0x0b, 0xb9, - 0xe8, 0xe0, 0x9f, 0x15, 0x62, 0xac, 0x55, 0x8a, 0xb1, 0x5d, 0x5c, 0x87, 0x3a, 0x23, 0xcf, 0xd6, - 0x2f, 0xa1, 0x15, 0xf0, 0x46, 0x2c, 0x57, 0xb1, 0x90, 0xa1, 0x0e, 0xa7, 0xa1, 0x1e, 0x8b, 0x14, - 0x67, 0x31, 0xb9, 0x58, 0x13, 0xd0, 0x87, 0x46, 0xf3, 0x0f, 0x4d, 0x2d, 0x70, 0x49, 0x03, 0x58, - 0x92, 0x43, 0x31, 0x24, 0x83, 0x42, 0x53, 0x83, 0x52, 0x44, 0x12, 0x98, 0x1a, 0x90, 0xe0, 0x00, - 0x4e, 0x38, 0x00, 0x12, 0xbe, 0xac, 0xbe, 0x13, 0xa7, 0x4a, 0xd3, 0x5a, 0xe0, 0x84, 0x42, 0x06, - 0xac, 0xd6, 0x5f, 0x7a, 0x69, 0x26, 0x1e, 0xe8, 0xc5, 0xa2, 0xb9, 0x06, 0xce, 0xc7, 0xea, 0x70, - 0x49, 0x10, 0x18, 0x0a, 0x04, 0x0e, 0xc0, 0x6e, 0xa0, 0x23, 0x84, 0x75, 0x0c, 0x94, 0x0b, 0xae, - 0x81, 0xf8, 0x41, 0xd5, 0x43, 0x1a, 0x1e, 0xbd, 0xa2, 0x04, 0xff, 0x42, 0x46, 0xb0, 0x0d, 0x83, - 0xc7, 0x2c, 0xc6, 0x43, 0xcc, 0x42, 0x10, 0xd8, 0x7a, 0xc2, 0x72, 0x60, 0x2a, 0xa1, 0xb6, 0x1b, - 0xb5, 0x66, 0xc5, 0x40, 0x1e, 0x4b, 0xa4, 0x8a, 0x09, 0xa0, 0x3a, 0xfc, 0x8c, 0x06, 0x08, 0x8d, - 0xe8, 0x31, 0xa8, 0x9d, 0x70, 0x80, 0xda, 0x5a, 0x00, 0x35, 0x0b, 0x58, 0x0f, 0x23, 0x90, 0x00, - 0x3e, 0xc5, 0xab, 0x98, 0xca, 0xf8, 0x5f, 0x24, 0x70, 0xe6, 0xc9, 0x90, 0xbd, 0x2c, 0xea, 0xba, - 0x00, 0x1a, 0x13, 0xc3, 0x55, 0x1e, 0xd8, 0x01, 0xab, 0x3a, 0x00, 0x01, 0x00, 0x5c, 0x88, 0x8f, - 0x51, 0x1f, 0x89, 0xad, 0x20, 0x47, 0x53, 0x4d, 0xfb, 0x84, 0x65, 0xf8, 0x23, 0xb0, 0xea, 0x9f, - 0xd3, 0x46, 0x20, 0xf2, 0xf4, 0x65, 0xa7, 0xec, 0x22, 0x28, 0x0c, 0x50, 0x19, 0x60, 0xc5, 0x07, - 0xeb, 0xd7, 0xc1, 0x21, 0x96, 0x92, 0x64, 0x59, 0x7d, 0x17, 0xa1, 0xbe, 0x1d, 0x98, 0x01, 0x3e, - 0x11, 0xfe, 0xc8, 0x2e, 0xd8, 0x8f, 0xfb, 0x9a, 0xcb, 0x09, 0x61, 0xfe, 0x3a, 0x66, 0x2e, 0x62, - 0x31, 0x4d, 0x7d, 0x31, 0xfa, 0x7f, 0xd4, 0x88, 0xcf, 0xc1, 0x15, 0x1b, 0x36, 0x06, 0x3a, 0x04, - 0x5e, 0xf8, 0xd1, 0x07, 0x19, 0x29, 0x8e, 0xc2, 0x69, 0xac, 0x83, 0x0b, 0xce, 0x5b, 0x1f, 0x2c, - 0x3d, 0x5e, 0x96, 0x84, 0xe8, 0x26, 0xd3, 0xc4, 0x73, 0x8d, 0x11, 0x52, 0x98, 0x18, 0xf5, 0x56, - 0x85, 0x52, 0x68, 0x42, 0x77, 0x10, 0x4b, 0x82, 0x0e, 0x03, 0xbf, 0xc7, 0x38, 0x63, 0x15, 0xd4, - 0x3b, 0xfa, 0x41, 0xec, 0x27, 0x12, 0xd8, 0xe1, 0xc4, 0x85, 0x50, 0x50, 0xf5, 0xb5, 0xf0, 0xdc, - 0x63, 0xdf, 0x51, 0xfb, 0x9f, 0xfe, 0xf1, 0x03, 0x42, 0x47, 0x24, 0x1a, 0x4f, 0x1e, 0xf7, 0x88, - 0xaa, 0x33, 0xc1, 0xc3, 0x14, 0x21, 0xe4, 0x36, 0x2e, 0x55, 0x29, 0x91, 0xa7, 0x12, 0xb0, 0x20, - 0x7a, 0xfe, 0x31, 0xb2, 0xd0, 0x61, 0xbf, 0xa5, 0x42, 0x3a, 0xb2, 0x65, 0x33, 0x5c, 0x1d, 0xd4, - 0xfb, 0x03, 0x05, 0xe0, 0xb3, 0x34, 0x04, 0x3d, 0x5b, 0x04, 0x41, 0x73, 0x87, 0x3f, 0x0c, 0x44, - 0x6e, 0xb5, 0x82, 0x5a, 0x3c, 0x1c, 0xce, 0x6f, 0xa7, 0x68, 0xf0, 0x6c, 0x02, 0x00, 0x71, 0xb8, - 0x9b, 0x40, 0x03, 0xf5, 0xa6, 0x36, 0x2f, 0x10, 0xce, 0x41, 0x8b, 0x68, 0x4c, 0x10, 0xa9, 0xec, - 0x2d, 0xa8, 0xf6, 0xb9, 0xb1, 0x57, 0xfc, 0x97, 0x0c, 0xfb, 0x5d, 0x00, 0xf3, 0x5a, 0x60, 0xe2, - 0x89, 0xc1, 0x39, 0x03, 0x14, 0x3e, 0xed, 0xf4, 0xdb, 0x3a, 0x6d, 0x53, 0x3e, 0x14, 0x2f, 0x03, - 0x45, 0x81, 0xe7, 0x41, 0x64, 0xc6, 0xc7, 0x5f, 0x56, 0x08, 0x52, 0x13, 0x30, 0x29, 0x9a, 0x00, - 0x01, 0xb3, 0xe3, 0x46, 0xb8, 0x18, 0x3c, 0xa3, 0xc7, 0xce, 0x3e, 0x92, 0xe3, 0x71, 0x8f, 0x0d, - 0x53, 0x5e, 0xcb, 0x4b, 0xdc, 0x2a, 0x0f, 0x3c, 0x3b, 0xec, 0xc1, 0xfe, 0xf6, 0x92, 0xd9, 0x90, - 0xda, 0x63, 0x3e, 0x83, 0xe7, 0x14, 0x79, 0x31, 0x5a, 0x74, 0x21, 0x7e, 0x3a, 0xf4, 0x72, 0x9f, - 0x1a, 0x2b, 0xc2, 0x17, 0x3b, 0x17, 0x2a, 0xd0, 0x10, 0x9c, 0xfd, 0x8c, 0x43, 0x98, 0x34, 0xb5, - 0x52, 0x43, 0xe0, 0xee, 0x0b, 0x5a, 0x04, 0x04, 0x19, 0xd6, 0x1b, 0x66, 0xa2, 0xa5, 0x58, 0x8c, - 0x3c, 0x68, 0x90, 0xfc, 0xb7, 0x2b, 0xdb, 0x8d, 0xdc, 0x3f, 0x83, 0xb0, 0x1c, 0xc7, 0x86, 0xe3, - 0x76, 0x50, 0x68, 0x95, 0x7a, 0x85, 0x22, 0x6a, 0xb5, 0x5a, 0xb8, 0xc2, 0x7b, 0x56, 0xca, 0x0a, - 0xdb, 0x43, 0x5e, 0x07, 0xd8, 0x3e, 0x4d, 0x2d, 0xcf, 0xe0, 0x58, 0x1f, 0x82, 0x37, 0xcd, 0x9d, - 0x18, 0x3c, 0xd2, 0xb3, 0x7b, 0x23, 0x48, 0x22, 0x7c, 0x73, 0x98, 0xb8, 0x89, 0x9b, 0xc6, 0x90, - 0xd4, 0x6b, 0x65, 0x1f, 0x11, 0xd1, 0xd2, 0xe8, 0x63, 0x00, 0x5e, 0x71, 0x01, 0xe1, 0x8c, 0x8b, - 0xc3, 0x0f, 0xd1, 0x9c, 0x00, 0x45, 0xb2, 0xb8, 0x45, 0x2f, 0xfc, 0xc7, 0x14, 0x06, 0x28, 0x0c, - 0x50, 0x18, 0xa0, 0x3f, 0x15, 0xc3, 0x19, 0xb3, 0x2c, 0x18, 0xa0, 0x31, 0x40, 0x61, 0xc0, 0x01, - 0xe5, 0xcf, 0x50, 0x9b, 0x94, 0xe1, 0xa6, 0xd6, 0x63, 0x80, 0xf9, 0xa0, 0xdf, 0xd6, 0x03, 0xe7, - 0x82, 0x3e, 0x10, 0xb6, 0xd7, 0xa2, 0xd4, 0xb9, 0xe8, 0x0b, 0xf8, 0xe2, 0x0f, 0xe7, 0x95, 0x38, - 0xcc, 0xb5, 0x32, 0xd7, 0xdc, 0xfa, 0xe7, 0x95, 0x38, 0xcc, 0xb5, 0x32, 0xff, 0xd1, 0x0a, 0x9f, - 0x0c, 0x47, 0xfc, 0xbf, 0xde, 0xa5, 0xa1, 0x4b, 0x42, 0xe6, 0x85, 0xcd, 0x04, 0x44, 0x45, 0xd2, - 0xee, 0x5d, 0x2e, 0xfe, 0x14, 0xe3, 0x4d, 0x0a, 0x9a, 0x35, 0x4d, 0x0a, 0x9a, 0x14, 0xb4, 0x29, - 0x68, 0x5a, 0xd0, 0xb5, 0xa1, 0x4b, 0x42, 0x96, 0x85, 0xad, 0x0b, 0x5a, 0x3b, 0xe3, 0x7a, 0xa6, - 0x85, 0x4d, 0x1a, 0xa6, 0x85, 0x4d, 0x0a, 0x5a, 0x14, 0xb4, 0x2d, 0x68, 0x5a, 0xd0, 0xa5, 0xa1, - 0x4b, 0x47, 0x88, 0x64, 0x54, 0x2d, 0x8b, 0x66, 0x34, 0xe3, 0x59, 0xb4, 0xdb, 0xe3, 0x63, 0xad, - 0x1d, 0x58, 0xf3, 0x46, 0xac, 0xa4, 0x11, 0x12, 0x0e, 0x42, 0x0f, 0x10, 0x90, 0x48, 0x92, 0x69, - 0x37, 0xff, 0x93, 0x64, 0x1b, 0xa7, 0x57, 0xe9, 0xe1, 0xe8, 0xf0, 0xe4, 0xf8, 0x6e, 0xd4, 0x6e, - 0x6c, 0x37, 0x6a, 0x37, 0x36, 0xc7, 0xc2, 0x2f, 0x89, 0x9b, 0xfc, 0x9c, 0x6b, 0xd8, 0x9e, 0x89, - 0x15, 0x75, 0x25, 0xf5, 0x80, 0xf1, 0xea, 0x91, 0x78, 0x21, 0x15, 0x4e, 0x9d, 0x95, 0xce, 0x34, - 0xc8, 0xcb, 0x26, 0x93, 0x72, 0xe9, 0x77, 0xc3, 0x3e, 0x3b, 0xe1, 0x32, 0x53, 0x4d, 0xc6, 0x9c, - 0x6b, 0xdf, 0x3d, 0x32, 0xfc, 0xba, 0x5d, 0xf2, 0x71, 0xdf, 0x2d, 0xf7, 0x87, 0xbd, 0x04, 0x32, - 0xd1, 0xe3, 0xfe, 0xe3, 0x2f, 0x9f, 0x98, 0x6e, 0x7c, 0xcf, 0xff, 0x82, 0xbc, 0x77, 0xce, 0x63, - 0xcc, 0xc4, 0xf4, 0x19, 0x75, 0xa3, 0x65, 0x13, 0x2f, 0x04, 0xbe, 0x34, 0xd0, 0xa9, 0xa3, 0xaa, - 0x68, 0x54, 0xd0, 0x89, 0x6a, 0x10, 0x58, 0xe4, 0x88, 0xa4, 0x9a, 0x69, 0xa7, 0xa0, 0x90, 0x5e, - 0x88, 0x3c, 0xbe, 0xa3, 0xcb, 0xc4, 0x8d, 0x1c, 0xed, 0x6b, 0xc2, 0xad, 0x4f, 0x4e, 0xd1, 0x74, - 0xed, 0xcf, 0x0b, 0x8e, 0xcc, 0x10, 0xca, 0x06, 0x65, 0x03, 0xb8, 0xb2, 0xc6, 0x08, 0x00, 0x62, - 0x02, 0x27, 0x8e, 0x29, 0x60, 0xc8, 0x49, 0x0f, 0xc4, 0x08, 0x0a, 0x63, 0xf8, 0x91, 0x69, 0x00, - 0xf8, 0x70, 0x02, 0x50, 0x30, 0x79, 0x24, 0x22, 0x2b, 0x74, 0x78, 0x1e, 0x88, 0x48, 0x8e, 0xc6, - 0x8e, 0x45, 0x96, 0x41, 0xb0, 0x83, 0x01, 0x0a, 0x78, 0xc5, 0x09, 0x90, 0x21, 0x7f, 0x96, 0xc1, - 0x39, 0x89, 0x5f, 0x5d, 0x5a, 0xb3, 0x35, 0x8b, 0xd0, 0x4a, 0x0e, 0x0e, 0xe2, 0x03, 0x01, 0x42, - 0x2e, 0xc6, 0x61, 0x06, 0xc6, 0x3f, 0x07, 0x99, 0xef, 0xc8, 0x77, 0x9b, 0xea, 0x29, 0xa9, 0x83, - 0xa1, 0x70, 0x9a, 0xa2, 0x14, 0x35, 0xa8, 0x83, 0x5e, 0x39, 0x77, 0x4e, 0x1e, 0x0b, 0x82, 0xb2, - 0x31, 0xcd, 0x0c, 0xa8, 0xcf, 0xd7, 0xbe, 0xa5, 0xbe, 0x11, 0x35, 0x83, 0xc5, 0x1f, 0x78, 0xc6, - 0x5f, 0xd6, 0xd8, 0x19, 0x0b, 0xc1, 0xf8, 0x88, 0xd1, 0x94, 0x1b, 0xc3, 0x02, 0xf0, 0x29, 0x83, - 0x15, 0xb6, 0x48, 0x64, 0x50, 0xc0, 0xc6, 0xd9, 0x05, 0x71, 0x0b, 0x33, 0xe2, 0xa2, 0xd0, 0xd1, - 0x41, 0x8a, 0x2a, 0xab, 0x13, 0x64, 0x47, 0x7f, 0xcb, 0xbb, 0xf1, 0x01, 0x42, 0x50, 0xca, 0xd3, - 0x82, 0x08, 0x02, 0x77, 0x97, 0x60, 0xb0, 0xa4, 0xc5, 0x19, 0x54, 0x60, 0xae, 0x0b, 0xf4, 0x93, - 0x4a, 0x02, 0x6a, 0xd9, 0x82, 0x13, 0x12, 0xe8, 0x4c, 0x1c, 0x48, 0x81, 0xb0, 0xa0, 0x65, 0xfe, - 0x56, 0x43, 0xd4, 0xc2, 0x2e, 0x44, 0x44, 0x38, 0xd4, 0x65, 0xb7, 0xb2, 0x34, 0x70, 0xb6, 0xe3, - 0xd8, 0xfa, 0x93, 0x52, 0xff, 0x12, 0x20, 0x29, 0x24, 0x01, 0xd0, 0xe0, 0x68, 0xfd, 0x39, 0x68, - 0x7c, 0x7e, 0x72, 0x20, 0x84, 0x52, 0x34, 0x11, 0xa1, 0x03, 0x16, 0x8c, 0xba, 0x4a, 0x4d, 0x5f, - 0xfe, 0x75, 0xf1, 0x22, 0x02, 0x9b, 0x40, 0x34, 0xf5, 0x17, 0x21, 0x37, 0xa9, 0x53, 0xba, 0xed, - 0xa1, 0xb0, 0x63, 0xb6, 0x2f, 0x70, 0xa0, 0x07, 0x13, 0xc3, 0x4a, 0xe1, 0x18, 0x74, 0x2e, 0x7f, - 0x7d, 0xb5, 0x99, 0x59, 0x68, 0x03, 0xbe, 0xfa, 0x5e, 0xfc, 0xeb, 0x0d, 0x94, 0x3b, 0x71, 0x54, - 0x47, 0x5d, 0x33, 0xb6, 0x42, 0x24, 0x9c, 0x75, 0xb4, 0xb6, 0x22, 0x37, 0xd2, 0xaf, 0x39, 0xce, - 0x9f, 0x8d, 0x77, 0x0b, 0xf5, 0x23, 0x7d, 0x0a, 0xc3, 0xeb, 0x2f, 0xac, 0x1f, 0x44, 0x6f, 0x82, - 0x19, 0x08, 0xa4, 0xd3, 0x4c, 0x3c, 0x12, 0x48, 0x62, 0xf6, 0x2e, 0xbe, 0x43, 0x9b, 0x0d, 0x87, - 0xc7, 0xe2, 0xea, 0x45, 0x9f, 0x0a, 0xc9, 0xda, 0xa1, 0x3d, 0x25, 0xb4, 0xe0, 0xe1, 0xef, 0x26, - 0x7d, 0x52, 0xaf, 0x54, 0xcb, 0xd4, 0x76, 0xf8, 0x21, 0x96, 0x92, 0x90, 0x63, 0xb7, 0xd4, 0xc8, - 0x6a, 0xb1, 0x02, 0x06, 0x8e, 0xbb, 0xa1, 0x42, 0x78, 0x00, 0x04, 0x60, 0x01, 0xa9, 0x0b, 0xf6, - 0x42, 0x26, 0x3a, 0xbd, 0xfa, 0xc1, 0xe0, 0x6c, 0x12, 0xed, 0x83, 0x38, 0xfc, 0xf8, 0xbc, 0x32, - 0x36, 0x0b, 0x67, 0x80, 0x40, 0x34, 0xb8, 0x4f, 0xba, 0x8d, 0xad, 0xd5, 0x44, 0xbd, 0x8c, 0xd4, - 0x38, 0x13, 0xc5, 0xd5, 0x1f, 0x10, 0xea, 0x8b, 0xc1, 0x87, 0x19, 0x9f, 0x70, 0x40, 0x4d, 0x42, - 0x34, 0xc2, 0x80, 0xd5, 0xd3, 0x84, 0x10, 0x28, 0x37, 0xe5, 0xf0, 0x51, 0x87, 0x04, 0xaf, 0x75, - 0x4d, 0x75, 0x0e, 0x0e, 0x84, 0xa1, 0xc8, 0x83, 0x82, 0xff, 0x91, 0xdf, 0x51, 0x1a, 0x41, 0x19, - 0x60, 0x4e, 0x59, 0x22, 0x68, 0x1d, 0x89, 0x51, 0x18, 0x32, 0x24, 0x24, 0x48, 0xe3, 0x22, 0xc6, - 0xca, 0x1b, 0x64, 0x05, 0xc2, 0x93, 0x38, 0xb1, 0x2b, 0xf6, 0xbb, 0xc7, 0xdd, 0x18, 0x7d, 0xe6, - 0xbf, 0x07, 0x7c, 0xab, 0xdd, 0xcb, 0x27, 0xcf, 0xc4, 0x54, 0x4d, 0x00, 0xc5, 0xe8, 0xd8, 0xab, - 0xdc, 0xd1, 0x52, 0x1a, 0x6c, 0xac, 0xef, 0xef, 0x7f, 0x0f, 0x85, 0x58, 0x36, 0x31, 0xda, 0xba, - 0x0c, 0x72, 0xb0, 0x3b, 0x68, 0x52, 0xd1, 0xfc, 0x54, 0x07, 0x1f, 0x79, 0xe7, 0xf0, 0xc5, 0x18, - 0xb1, 0x6c, 0x1c, 0x9a, 0x72, 0x11, 0xad, 0x6c, 0x6f, 0x24, 0xd1, 0x3e, 0xff, 0x05, 0x14, 0x04, - 0x7b, 0xf6, 0x9a, 0x7c, 0xbe, 0x14, 0x09, 0x6d, 0xa6, 0xa4, 0x4a, 0x94, 0xf3, 0x12, 0xb1, 0x1a, - 0xa0, 0x75, 0xd2, 0xe1, 0x34, 0x95, 0x1e, 0x09, 0x19, 0x8d, 0x24, 0xc2, 0x18, 0x00, 0x0b, 0xc0, - 0x98, 0x90, 0x87, 0x7e, 0x08, 0xb5, 0x8e, 0x20, 0x29, 0xa3, 0x08, 0x14, 0x1d, 0xa0, 0xf7, 0x0d, - 0x71, 0x5e, 0x25, 0x81, 0x73, 0xcc, 0x4d, 0xb4, 0x2a, 0x7d, 0x4c, 0xa7, 0x56, 0xa9, 0x59, 0xdc, - 0x57, 0xb7, 0x1a, 0xa2, 0xfc, 0x68, 0xf2, 0x6b, 0x61, 0x24, 0xb8, 0x4d, 0x15, 0xfd, 0x52, 0xa0, - 0x14, 0x35, 0x52, 0x14, 0x3c, 0x12, 0xee, 0xab, 0xd1, 0xbc, 0x57, 0xd1, 0x65, 0xe2, 0x4f, 0xa2, - 0x9d, 0x23, 0x9a, 0x1a, 0x30, 0x5a, 0xbc, 0x93, 0x77, 0xf8, 0xda, 0x14, 0x1d, 0x27, 0x1d, 0x7a, - 0x96, 0xd8, 0x6e, 0x53, 0x82, 0x2d, 0x90, 0xec, 0x6c, 0x44, 0x40, 0x28, 0xe5, 0x69, 0x87, 0xeb, - 0x4f, 0xab, 0x06, 0x15, 0x56, 0x10, 0x91, 0x41, 0x2f, 0x30, 0x48, 0x3f, 0xd1, 0x1a, 0xa9, 0xfb, - 0x69, 0x93, 0xe2, 0x21, 0x43, 0x32, 0x0e, 0x1a, 0x00, 0xce, 0xfb, 0xa0, 0x77, 0x72, 0x6b, 0x86, - 0xc7, 0x1c, 0x10, 0x12, 0x23, 0xf5, 0x2e, 0x2d, 0x56, 0x69, 0x02, 0x91, 0x0c, 0x5a, 0xb1, 0x24, - 0x00, 0xc5, 0xa5, 0x76, 0xb6, 0xa9, 0x3b, 0xb5, 0x05, 0xc5, 0xf0, 0xfd, 0xa8, 0x45, 0xfb, 0xc8, - 0x96, 0xb1, 0x02, 0x06, 0x8a, 0x31, 0x0d, 0x58, 0x40, 0xe3, 0x82, 0xa0, 0xcd, 0x82, 0x61, 0x14, - 0xb4, 0x20, 0xb2, 0x18, 0x61, 0x50, 0x33, 0x09, 0xc7, 0x16, 0x00, 0x54, 0xa0, 0x8f, 0x32, 0xba, - 0xc9, 0xc5, 0xd0, 0x04, 0x0e, 0xc6, 0x96, 0x90, 0x68, 0xda, 0x9e, 0xf8, 0x71, 0x43, 0x3f, 0x77, - 0x67, 0xc2, 0x03, 0x44, 0xaa, 0x34, 0x06, 0x0e, 0x19, 0x6c, 0x9a, 0x09, 0x9f, 0x60, 0x74, 0x69, - 0xd6, 0x92, 0x1f, 0x47, 0xdf, 0xab, 0xf0, 0xd3, 0xed, 0xbd, 0xb0, 0xcf, 0xec, 0xe4, 0x60, 0xbe, - 0x97, 0x6e, 0x2e, 0x80, 0x08, 0xaf, 0xd4, 0xe5, 0xa3, 0xf9, 0x78, 0x28, 0x1a, 0x92, 0x5a, 0x49, - 0x6f, 0xf1, 0x94, 0x92, 0xd2, 0x4b, 0x49, 0x2d, 0xa6, 0xb1, 0xfc, 0x11, 0x11, 0xbd, 0x24, 0xed, - 0xf4, 0x67, 0xfa, 0x2b, 0xc9, 0xd1, 0xcb, 0xca, 0xe8, 0x56, 0x55, 0xd1, 0xdc, 0xae, 0x59, 0xb0, - 0xd8, 0x7c, 0x7e, 0x1f, 0x10, 0x34, 0x50, 0x96, 0xa7, 0x1c, 0x06, 0xd8, 0xc1, 0x34, 0x83, 0x52, - 0x2f, 0x5d, 0x85, 0x8e, 0xcf, 0xa7, 0x43, 0xd0, 0xb1, 0xac, 0xc8, 0xf8, 0xf5, 0xe5, 0xc7, 0xc2, - 0x75, 0x7c, 0x1e, 0x44, 0x50, 0xfa, 0xcd, 0x0e, 0x24, 0x68, 0x8a, 0x61, 0x15, 0xe0, 0x3f, 0x91, - 0xa6, 0x09, 0x1f, 0x87, 0x9f, 0x92, 0x88, 0xa0, 0x06, 0x22, 0x38, 0xd0, 0x00, 0xa8, 0x1d, 0x4f, - 0xe1, 0xa5, 0x36, 0x3c, 0x03, 0xd8, 0xba, 0xe4, 0x3b, 0xea, 0xa3, 0x2f, 0xea, 0xb0, 0x04, 0x5a, - 0x46, 0x5e, 0xc9, 0x29, 0x40, 0x64, 0x86, 0xcc, 0x43, 0xba, 0xf0, 0x7c, 0x09, 0x39, 0xaa, 0xa0, - 0x94, 0x46, 0xe6, 0x84, 0x8d, 0xe7, 0xbe, 0x78, 0x5f, 0xc4, 0x04, 0x42, 0x95, 0xa3, 0xc0, 0x19, - 0xc2, 0x14, 0x7a, 0x62, 0xdc, 0x78, 0xf3, 0xde, 0xa3, 0x50, 0x87, 0x64, 0x9a, 0x02, 0x23, 0x3a, - 0x7d, 0x1c, 0xd0, 0xa5, 0x3e, 0x88, 0x34, 0x63, 0x5d, 0x8b, 0x17, 0xef, 0x5a, 0x4b, 0x9f, 0x0f, - 0x85, 0x59, 0x2d, 0xeb, 0xb4, 0xda, 0x40, 0x48, 0xfc, 0x6f, 0xe6, 0xc4, 0x19, 0xf2, 0x1f, 0x8f, - 0x85, 0x53, 0xde, 0xe4, 0x68, 0xc8, 0xdb, 0x6c, 0xc9, 0x5d, 0x17, 0x97, 0x93, 0xf8, 0x28, 0xed, - 0xb3, 0x66, 0x11, 0x30, 0x31, 0x26, 0xd8, 0xad, 0x7f, 0x1a, 0x32, 0xaa, 0x38, 0x75, 0x0c, 0x65, - 0xe2, 0x43, 0x37, 0x3c, 0xb4, 0x28, 0x20, 0x8f, 0x0f, 0x0e, 0x72, 0xed, 0xb0, 0x23, 0x68, 0xd7, - 0xe9, 0x97, 0x64, 0x5a, 0xb2, 0x7c, 0x3f, 0xc2, 0x82, 0x1e, 0x2e, 0x90, 0x5b, 0x0d, 0x61, 0x08, - 0xc4, 0x84, 0x0f, 0xb0, 0x39, 0x55, 0x9d, 0xca, 0x2d, 0xa0, 0xe5, 0xe1, 0xb0, 0x80, 0x12, 0x11, - 0xca, 0xe8, 0xaa, 0xb3, 0x8e, 0x50, 0x80, 0xb5, 0xa3, 0xc9, 0x2b, 0x6e, 0xa4, 0x59, 0xc3, 0xc6, - 0x8f, 0xc7, 0xb2, 0x9d, 0x30, 0x99, 0x5a, 0xdc, 0x59, 0xa1, 0x18, 0xa9, 0x31, 0xa9, 0xb0, 0xe5, - 0x47, 0x08, 0x60, 0x2e, 0x0c, 0x0a, 0x06, 0xc3, 0x6e, 0x1a, 0x29, 0xdf, 0x91, 0xce, 0x7a, 0x5f, - 0x12, 0x0a, 0xb5, 0x66, 0xe8, 0x6d, 0x21, 0x8a, 0x8f, 0x0c, 0xb1, 0x52, 0x68, 0xf5, 0x22, 0x7c, - 0x15, 0x88, 0x61, 0x16, 0x12, 0xfd, 0x87, 0x13, 0xe3, 0x60, 0x69, 0x62, 0xf0, 0x48, 0xcd, 0x8f, - 0xd0, 0x80, 0x65, 0xf0, 0xa0, 0x82, 0x5a, 0xc6, 0x4a, 0x89, 0x49, 0x09, 0x87, 0x53, 0xb8, 0x8d, - 0x7d, 0xd0, 0x6e, 0xed, 0x41, 0x00, 0x19, 0x51, 0xbc, 0x7e, 0x8b, 0x5c, 0x05, 0x0b, 0x80, 0x1b, - 0x9e, 0x49, 0x2b, 0xc8, 0x04, 0x56, 0x90, 0x51, 0xa4, 0x64, 0xf1, 0x88, 0xa3, 0xb2, 0x31, 0xc9, - 0x6f, 0x34, 0x72, 0xf2, 0x7f, 0xce, 0xae, 0xc8, 0x1f, 0x1e, 0x3b, 0xfc, 0x4c, 0x28, 0x79, 0x06, - 0x10, 0x13, 0x74, 0xc1, 0xa3, 0x8d, 0xbd, 0x1c, 0xb6, 0xe5, 0x48, 0x37, 0x62, 0x99, 0xd2, 0x8e, - 0x06, 0x94, 0xd1, 0x69, 0x9f, 0xf3, 0x8d, 0x23, 0xaa, 0xd4, 0x30, 0x1e, 0xed, 0xe5, 0x4f, 0x77, - 0xf0, 0x88, 0x2a, 0x09, 0xd7, 0xb5, 0xd8, 0x82, 0xad, 0x18, 0x9f, 0x94, 0x62, 0x2d, 0x2f, 0xa2, - 0x57, 0xd0, 0x8c, 0xbe, 0xb0, 0x7c, 0x11, 0x5d, 0xd5, 0x65, 0xf2, 0x8b, 0x4a, 0x92, 0x5e, 0x12, - 0xe9, 0x25, 0xb4, 0xd7, 0x8e, 0xb4, 0xd2, 0x49, 0x34, 0xd2, 0x56, 0x9a, 0x49, 0x9f, 0x84, 0x6d, - 0x35, 0xb4, 0xd6, 0xd3, 0x5f, 0x89, 0xe9, 0x25, 0xa4, 0x97, 0x84, 0x6d, 0x35, 0xb4, 0xd6, 0xd3, - 0x58, 0x8e, 0x08, 0x84, 0x3d, 0x5f, 0x10, 0xf4, 0x77, 0x2b, 0x9a, 0x92, 0x5f, 0x82, 0x1b, 0x4d, - 0x24, 0x93, 0x5f, 0x57, 0x1e, 0xfa, 0x49, 0x3e, 0x48, 0xca, 0x15, 0xaa, 0x55, 0xec, 0x7d, 0x19, - 0x95, 0xd9, 0xf6, 0x9a, 0x7d, 0x4a, 0x97, 0xd7, 0xbe, 0x09, 0xcd, 0xcb, 0xe5, 0x66, 0x87, 0xdc, - 0x48, 0x81, 0xa4, 0x87, 0x98, 0xa5, 0x48, 0x00, 0x0b, 0x0a, 0x84, 0x1c, 0xe3, 0xc1, 0x66, 0x90, - 0xeb, 0xd3, 0xd7, 0x0d, 0x32, 0x29, 0x86, 0x59, 0x18, 0x81, 0x3a, 0x7c, 0x5c, 0x7c, 0x14, 0x31, - 0x15, 0xfb, 0xb6, 0x78, 0x43, 0x71, 0x00, 0x4d, 0xc8, 0x49, 0x47, 0xdb, 0x9c, 0xf3, 0x7c, 0x5a, - 0x65, 0x4e, 0x86, 0xc5, 0x06, 0x4d, 0x7c, 0x05, 0x71, 0xf6, 0x18, 0x6e, 0x93, 0x0e, 0x8c, 0x62, - 0xca, 0xb3, 0x77, 0x85, 0xbc, 0x7d, 0xbd, 0x5a, 0x4c, 0x03, 0xe4, 0x05, 0x52, 0x84, 0xc6, 0x34, - 0x2c, 0xc5, 0xec, 0x0c, 0xd2, 0x0d, 0xcd, 0x09, 0x7b, 0xb8, 0xac, 0x2c, 0x71, 0x93, 0x74, 0xaf, - 0x89, 0x0a, 0x58, 0x58, 0xc1, 0xa8, 0x02, 0x6f, 0x04, 0x47, 0x6c, 0xb1, 0x65, 0x85, 0x9a, 0xc0, - 0xea, 0xcf, 0x23, 0x1e, 0xe8, 0x09, 0x05, 0x65, 0x46, 0x30, 0xf7, 0xe9, 0x3c, 0x87, 0x1f, 0x72, - 0xb6, 0x64, 0xb9, 0xf2, 0x9e, 0x37, 0xc3, 0xe1, 0x3e, 0x2e, 0x95, 0x82, 0x31, 0x8c, 0xa4, 0xed, - 0xc6, 0xd1, 0x00, 0x9f, 0x4d, 0x3f, 0xf0, 0x59, 0x8a, 0x23, 0x6d, 0x44, 0x20, 0x90, 0x82, 0x6a, - 0x79, 0xf2, 0xc4, 0x54, 0x55, 0xe1, 0xe0, 0xb5, 0xa4, 0x4f, 0xca, 0xd1, 0x03, 0xb8, 0x89, 0x94, - 0x61, 0xea, 0xd7, 0xa3, 0x8d, 0x76, 0x53, 0xff, 0x0a, 0x0b, 0x70, 0x9b, 0x10, 0xb1, 0x22, 0xae, - 0x6c, 0xfa, 0x9f, 0xf3, 0x76, 0xc1, 0xf5, 0x14, 0xe2, 0x37, 0x0d, 0x3b, 0x52, 0x6f, 0xe2, 0x55, - 0xe1, 0x1b, 0xc2, 0xe9, 0x8c, 0x04, 0x2b, 0xd2, 0x8a, 0x98, 0xf4, 0x4a, 0xfd, 0xa2, 0x88, 0x16, - 0x24, 0x42, 0x31, 0x57, 0xf0, 0xa5, 0x81, 0x9a, 0xb8, 0x37, 0x20, 0xe0, 0x07, 0x70, 0xc0, 0x6f, - 0xa0, 0x08, 0xd8, 0x24, 0x69, 0xca, 0xf4, 0xdd, 0xba, 0x43, 0x7e, 0x82, 0x44, 0xc7, 0x71, 0x1d, - 0x02, 0x36, 0x04, 0xaf, 0x34, 0x35, 0x17, 0xa0, 0xce, 0x82, 0x1e, 0x6b, 0xd0, 0x7c, 0x0f, 0xbf, - 0xc2, 0x82, 0xcc, 0x02, 0xb8, 0x6a, 0x6f, 0xa6, 0x6f, 0xbf, 0x81, 0xe7, 0x23, 0x0e, 0xaa, 0x31, - 0xf8, 0x3d, 0xdd, 0xc5, 0x63, 0xf2, 0x12, 0x3f, 0xb6, 0x6c, 0x75, 0x7f, 0x12, 0x84, 0x91, 0x3e, - 0xa3, 0xb7, 0xd0, 0x8a, 0xfa, 0xf7, 0xd4, 0xa0, 0xae, 0x8e, 0xe8, 0xfe, 0x8e, 0xc5, 0xf4, 0x47, - 0x25, 0xe5, 0xa5, 0xa6, 0x4e, 0x89, 0x33, 0xe8, 0xe7, 0x4b, 0xea, 0x74, 0x93, 0xa2, 0x57, 0xc1, - 0x44, 0xbd, 0x8c, 0xbe, 0x19, 0x39, 0x52, 0x37, 0xb4, 0x34, 0x5b, 0xe0, 0x80, 0xd8, 0x2c, 0x46, - 0xa9, 0xb3, 0x13, 0x9a, 0xc7, 0x9e, 0x90, 0x6c, 0x4a, 0xe6, 0xc3, 0xc8, 0x88, 0xc2, 0x20, 0x43, - 0x54, 0x29, 0x6a, 0x78, 0x47, 0xf1, 0xfe, 0x14, 0x11, 0x5d, 0x33, 0x87, 0x8d, 0xc8, 0xb1, 0x4e, - 0x08, 0xd2, 0x80, 0x30, 0x21, 0xd8, 0x2d, 0x15, 0x96, 0xce, 0x74, 0x82, 0xc5, 0x00, 0x00, 0x29, - 0xe4, 0x97, 0x30, 0xf3, 0xb0, 0x72, 0xb2, 0x83, 0xf0, 0x0e, 0x3e, 0x02, 0x57, 0xe9, 0xfd, 0xe7, - 0x40, 0xf2, 0x40, 0x30, 0x41, 0xf0, 0xa1, 0x3f, 0x7a, 0x58, 0x8d, 0xf6, 0x29, 0x38, 0x30, 0x17, - 0x66, 0x17, 0x5d, 0x16, 0xa6, 0x39, 0x42, 0x01, 0x47, 0x15, 0x3c, 0x05, 0xcb, 0xd1, 0x1b, 0xfa, - 0xea, 0x61, 0xc7, 0x72, 0xef, 0xb1, 0xfe, 0x1f, 0xf6, 0x08, 0xb1, 0x4e, 0x80, 0x55, 0xd4, 0xa4, - 0xe3, 0x23, 0xd2, 0xd5, 0x64, 0x9b, 0x67, 0x72, 0xd5, 0x5f, 0x69, 0xa3, 0xed, 0x78, 0x98, 0x53, - 0xc7, 0x7d, 0x64, 0xda, 0x18, 0x77, 0xf4, 0x69, 0xa4, 0x8c, 0x3c, 0xcc, 0x34, 0xee, 0xb6, 0xbc, - 0x20, 0x15, 0x93, 0x21, 0x35, 0x60, 0xb1, 0xc5, 0xf0, 0x53, 0x30, 0x41, 0x20, 0x40, 0x1b, 0x28, - 0x21, 0x59, 0x84, 0xee, 0x0c, 0x07, 0x4e, 0xbb, 0x7b, 0x33, 0x61, 0x47, 0x2a, 0x1c, 0x8f, 0xf0, - 0x4f, 0x63, 0x45, 0x59, 0x0a, 0x94, 0x30, 0xa0, 0x87, 0x61, 0x8b, 0x89, 0x10, 0x14, 0xc7, 0x42, - 0x4c, 0x78, 0xdb, 0x41, 0xbd, 0x68, 0x37, 0x04, 0x57, 0xc6, 0x15, 0x7d, 0x6c, 0x22, 0xac, 0x3b, - 0x54, 0xc1, 0x61, 0x09, 0xf4, 0x8f, 0x03, 0xb7, 0x7c, 0x14, 0x94, 0xa0, 0x02, 0x38, 0x55, 0x89, - 0x9a, 0x90, 0x74, 0xc2, 0x9a, 0x37, 0xf5, 0x31, 0x08, 0xda, 0x02, 0x5f, 0xc8, 0x17, 0xe8, 0x30, - 0xd3, 0x2f, 0x21, 0xac, 0xdd, 0x6b, 0xb4, 0x7f, 0xf8, 0x98, 0x29, 0x2c, 0x26, 0x70, 0xd8, 0x50, - 0x28, 0x21, 0x71, 0xb6, 0xb5, 0xe6, 0xb3, 0x9e, 0xf1, 0x28, 0x79, 0x0a, 0xba, 0x10, 0x3b, 0x7c, - 0x12, 0x1c, 0xec, 0x15, 0x8c, 0x89, 0xf5, 0xc2, 0x5e, 0x4a, 0x7a, 0x4b, 0x82, 0x5e, 0xd3, 0x5b, - 0x4d, 0x77, 0xd5, 0xe1, 0x4e, 0x08, 0x6d, 0x35, 0xf7, 0xde, 0x76, 0x28, 0x7e, 0xb1, 0x5f, 0x1f, - 0x69, 0xa4, 0x92, 0x6a, 0x92, 0xed, 0x35, 0xe8, 0x85, 0x4f, 0xa9, 0xd2, 0xf8, 0x24, 0x94, 0xca, - 0x01, 0x1c, 0xd3, 0x54, 0x61, 0xc4, 0xc2, 0x83, 0x06, 0x50, 0x1a, 0x2f, 0xd0, 0x92, 0x99, 0x61, - 0x3a, 0x56, 0x0a, 0xa8, 0xf6, 0x72, 0x07, 0x08, 0x26, 0x94, 0x2c, 0xe6, 0xa2, 0x38, 0x0c, 0x53, - 0xf0, 0xd5, 0x2e, 0x6e, 0x2f, 0x23, 0xcb, 0xff, 0x9e, 0x51, 0x01, 0xd4, 0x31, 0x78, 0x50, 0xa0, - 0x6f, 0x8e, 0x25, 0x8d, 0x17, 0x6e, 0x1b, 0xf4, 0x11, 0x46, 0x95, 0x69, 0x8d, 0x41, 0x57, 0x51, - 0x5b, 0xd4, 0x78, 0xce, 0xf8, 0xd9, 0x34, 0x97, 0xda, 0x56, 0x32, 0x0f, 0xe8, 0xd3, 0x1e, 0xca, - 0x1d, 0xf0, 0xa1, 0x53, 0xa4, 0xe3, 0xc0, 0xd0, 0xa5, 0xe4, 0x68, 0x62, 0x91, 0x2e, 0x21, 0x3e, - 0x9a, 0xd0, 0xdb, 0xa1, 0x8d, 0x85, 0xdc, 0x30, 0x90, 0xf9, 0xea, 0x69, 0x05, 0x53, 0x93, 0xfc, - 0x29, 0xd9, 0x22, 0xbf, 0xce, 0x88, 0xc0, 0xcd, 0x15, 0xa0, 0x80, 0x5f, 0x3b, 0x16, 0xb8, 0x1c, - 0x1d, 0xeb, 0x90, 0x6b, 0x7e, 0xa5, 0xd0, 0x3d, 0x9f, 0x0a, 0x5e, 0x18, 0xe0, 0x0d, 0x8c, 0x9e, - 0xe1, 0x82, 0xa2, 0xa6, 0xd8, 0x8c, 0x74, 0x6c, 0xb8, 0x7d, 0x2e, 0xde, 0xb0, 0x97, 0x94, 0xed, - 0x35, 0x62, 0x9a, 0x0f, 0x85, 0x0d, 0x4e, 0x89, 0x79, 0x52, 0x68, 0xc5, 0x79, 0x60, 0xde, 0x41, - 0xb6, 0x87, 0x3a, 0x09, 0xe1, 0x8a, 0x80, 0x83, 0x1a, 0x72, 0xa2, 0x06, 0x0b, 0x05, 0x51, 0x88, - 0x23, 0x6a, 0x30, 0x59, 0xf1, 0x96, 0x0c, 0x6c, 0x18, 0x28, 0x9e, 0x30, 0x56, 0x88, 0x2d, 0xba, - 0x64, 0x2a, 0x1a, 0x54, 0x12, 0x57, 0x96, 0xcd, 0x33, 0x66, 0x04, 0xd1, 0xf8, 0xfe, 0x09, 0x82, - 0x6b, 0x1d, 0xf6, 0x33, 0x21, 0x84, 0x4d, 0x28, 0xde, 0xf9, 0xe0, 0x2d, 0x27, 0x45, 0x8f, 0xbc, - 0x4f, 0xd5, 0x3c, 0x47, 0x42, 0x47, 0x57, 0xd1, 0x9a, 0xfa, 0xd4, 0xbc, 0xf1, 0xd5, 0x55, 0x55, - 0xf1, 0x1d, 0x5a, 0x2b, 0xa3, 0x15, 0x67, 0xd7, 0xbe, 0xb9, 0x5f, 0x57, 0xbe, 0x11, 0x1c, 0xcd, - 0x24, 0x24, 0x56, 0x0d, 0xbe, 0x18, 0x45, 0xb4, 0x33, 0x12, 0xa1, 0x97, 0xe1, 0x4f, 0x05, 0xcb, - 0x55, 0x15, 0x8d, 0x28, 0x7a, 0x05, 0x0d, 0xc1, 0x15, 0x81, 0x5e, 0x9d, 0xf6, 0xe7, 0xc1, 0x40, - 0x93, 0x9e, 0x92, 0x58, 0xe0, 0xd8, 0x59, 0xef, 0x8c, 0x23, 0x5b, 0xdd, 0x03, 0x6b, 0x4d, 0x01, - 0x87, 0xa0, 0xf8, 0x58, 0x6c, 0x9e, 0x18, 0x0b, 0xb3, 0xcd, 0x9b, 0xd7, 0xc1, 0x15, 0x89, 0x33, - 0x33, 0x57, 0x7d, 0x15, 0xfe, 0x41, 0x4d, 0x31, 0x6f, 0x4d, 0x7a, 0xf9, 0x42, 0x32, 0xd1, 0x8b, - 0xe2, 0x38, 0x8a, 0x2f, 0x7d, 0x6a, 0x27, 0xab, 0x93, 0xf5, 0xaa, 0xeb, 0x11, 0xdf, 0xab, 0x11, - 0xbd, 0x19, 0x88, 0x8e, 0x8b, 0x52, 0x71, 0x61, 0x22, 0x20, 0x43, 0xc1, 0x66, 0x34, 0xa9, 0x94, - 0xb2, 0x40, 0xe2, 0x79, 0xe5, 0x9b, 0x10, 0x18, 0xd6, 0xc2, 0x0d, 0x84, 0xb9, 0x8b, 0x53, 0x79, - 0xf0, 0x85, 0x6a, 0x40, 0xc2, 0xb2, 0x18, 0xa6, 0xe0, 0x12, 0xd6, 0x27, 0xa1, 0xe4, 0x4b, 0xea, - 0xe0, 0x27, 0xd5, 0x3a, 0x5d, 0x11, 0xe4, 0xea, 0xd1, 0x5d, 0x17, 0x5f, 0x44, 0x7a, 0xe4, 0x09, - 0x72, 0x04, 0x01, 0x63, 0x7c, 0x47, 0x91, 0x88, 0x3f, 0xc0, 0x4e, 0xdb, 0x38, 0xde, 0x5e, 0x24, - 0xea, 0x7d, 0x0d, 0xa5, 0x34, 0xd0, 0xdf, 0xec, 0xe8, 0x68, 0x68, 0x68, 0x7e, 0xbd, 0xf3, 0x0c, - 0xdb, 0x5f, 0x41, 0x7c, 0xa2, 0xfa, 0x2a, 0x58, 0x7f, 0xa1, 0xee, 0x7d, 0x04, 0x3f, 0xf0, 0x90, - 0xad, 0xb6, 0xcf, 0xd5, 0xb6, 0xfc, 0x11, 0x5b, 0x57, 0xff, 0xe5, 0x22, 0xaa, 0x91, 0x42, 0xe5, - 0x93, 0xd2, 0x52, 0x74, 0x78, 0xbe, 0x41, 0x4d, 0x87, 0x68, 0x37, 0xf8, 0x40, 0x94, 0xeb, 0xad, - 0xac, 0x99, 0xf0, 0x46, 0x13, 0xb1, 0x9b, 0x18, 0xa1, 0x2a, 0x0a, 0xf4, 0x4a, 0xfa, 0xe5, 0x11, - 0xd5, 0xe2, 0xfa, 0xb0, 0x27, 0x63, 0x97, 0xaf, 0xbb, 0xbb, 0xfc, 0x11, 0x8b, 0x55, 0xab, 0xdf, - 0x21, 0xdf, 0x7f, 0x56, 0x7d, 0x7b, 0xe2, 0x06, 0x2d, 0x55, 0x42, 0xf3, 0x18, 0xbc, 0x26, 0x46, - 0x53, 0x55, 0xd2, 0xba, 0xf8, 0x23, 0x0a, 0xd5, 0x5e, 0xc7, 0xd1, 0x7a, 0x14, 0xe8, 0x46, 0x50, - 0x9f, 0x30, 0x8a, 0xaa, 0xfa, 0xf5, 0xf6, 0x21, 0x0f, 0x7f, 0x05, 0x25, 0x72, 0x29, 0x1b, 0xcd, - 0x94, 0xe4, 0x91, 0x6b, 0xc7, 0x98, 0xb1, 0x96, 0xbe, 0x86, 0xbf, 0xd1, 0x62, 0x40, 0xf3, 0x76, - 0x37, 0xf4, 0x46, 0xf9, 0x04, 0x36, 0x9f, 0xe5, 0x8b, 0xbd, 0x8b, 0xd8, 0x81, 0x72, 0x7a, 0xf9, - 0x44, 0xdd, 0x61, 0x8e, 0x8f, 0xd5, 0xd1, 0xd2, 0x2f, 0x45, 0x4e, 0xbd, 0x11, 0x8f, 0xa9, 0x41, - 0x5d, 0x19, 0xbe, 0xad, 0xf4, 0x57, 0x2f, 0xab, 0x3e, 0x73, 0x56, 0x9c, 0xdf, 0xfc, 0x49, 0x11, - 0x27, 0x4e, 0x5c, 0x6a, 0x7c, 0x26, 0x4c, 0x98, 0xb5, 0xaf, 0x82, 0x93, 0x8d, 0x44, 0x53, 0xd6, - 0x66, 0x3d, 0xdb, 0x4d, 0xf1, 0x56, 0x16, 0x7f, 0x74, 0x7f, 0x04, 0x53, 0x39, 0x08, 0x74, 0x69, - 0xe6, 0xf8, 0xf1, 0x0e, 0x43, 0x4c, 0x3d, 0xe8, 0xb6, 0x88, 0x8e, 0x01, 0x7b, 0x3a, 0xb0, 0x40, - 0x59, 0xcb, 0x5b, 0x14, 0xf8, 0x29, 0x12, 0xcb, 0x1d, 0x4c, 0x31, 0x37, 0x3b, 0x59, 0x0e, 0x31, - 0xaf, 0xff, 0x04, 0x95, 0x55, 0x54, 0xeb, 0xc1, 0x55, 0xa3, 0x90, 0x52, 0xba, 0x37, 0xcb, 0x43, - 0xe5, 0x9d, 0x3e, 0x0a, 0xb8, 0x6a, 0x56, 0x7d, 0x5e, 0xcd, 0x03, 0x74, 0x77, 0xf8, 0x26, 0x2b, - 0xdf, 0xa4, 0xd2, 0x55, 0xe0, 0xa6, 0xc9, 0x22, 0xd2, 0x81, 0x33, 0xb9, 0xb0, 0x84, 0xbb, 0x4f, - 0xf0, 0x49, 0x45, 0x5a, 0x4f, 0x82, 0x52, 0x2a, 0xaa, 0x47, 0xfb, 0xe7, 0xf8, 0x22, 0x24, 0x99, - 0x36, 0x65, 0xf1, 0xe2, 0xb1, 0x7c, 0xd9, 0x26, 0x05, 0x6d, 0x0f, 0x4b, 0xf1, 0x73, 0x22, 0xbb, - 0x9a, 0x99, 0x24, 0x3c, 0x36, 0x24, 0xd8, 0x83, 0x3a, 0x20, 0x32, 0xbf, 0x9b, 0x53, 0x1b, 0xd1, - 0xd8, 0xae, 0x8d, 0x29, 0x39, 0x8e, 0xf7, 0x9f, 0xaf, 0x4f, 0xd1, 0x4c, 0x9f, 0x14, 0x22, 0x19, - 0x96, 0xcf, 0xca, 0x8a, 0xdf, 0x82, 0xc3, 0x5a, 0x8b, 0x96, 0x21, 0xf3, 0xe4, 0x74, 0xa6, 0x98, - 0x5e, 0x4c, 0xae, 0x83, 0x25, 0xf1, 0xd5, 0x33, 0x05, 0x18, 0xc1, 0x0b, 0xd8, 0x59, 0xd7, 0x89, - 0x04, 0x7c, 0xd0, 0x3a, 0x87, 0xfa, 0x3f, 0x7c, 0x10, 0xd2, 0x6f, 0x7f, 0x8d, 0x11, 0x79, 0x42, - 0x03, 0x60, 0x26, 0x61, 0x23, 0x3c, 0x03, 0x1b, 0x4c, 0xbf, 0x40, 0xd1, 0x44, 0x08, 0xdd, 0x9a, - 0xff, 0xe2, 0xfe, 0x1f, 0x94, 0x68, 0xa5, 0x77, 0x10, 0x1e, 0xde, 0xee, 0xdb, 0x69, 0x38, 0xf3, - 0x0d, 0x19, 0x4d, 0x7f, 0x82, 0xb8, 0xcc, 0x5a, 0x79, 0xcb, 0x3e, 0xe7, 0x50, 0xc6, 0xc1, 0xd6, - 0x65, 0xd8, 0xf8, 0x9d, 0x9b, 0x98, 0xfb, 0x52, 0xb2, 0xf8, 0x03, 0x61, 0x78, 0xe1, 0xac, 0x93, - 0xac, 0xbc, 0xdb, 0xd8, 0xc7, 0x2a, 0x80, 0x7e, 0x0a, 0xe7, 0xe4, 0xda, 0xb4, 0x96, 0xac, 0xb6, - 0xf8, 0x2a, 0xbb, 0x1c, 0xaa, 0x2c, 0x36, 0x44, 0x73, 0xec, 0xd1, 0x9d, 0xbe, 0x0a, 0xe9, 0x8e, - 0xa1, 0xd7, 0x95, 0x0e, 0x19, 0xca, 0x16, 0x5a, 0x18, 0xe9, 0x11, 0xbe, 0x14, 0xee, 0x86, 0x32, - 0x22, 0x3d, 0xca, 0xc7, 0x5d, 0x23, 0xb1, 0xbf, 0xd5, 0xfe, 0x24, 0xb3, 0x8d, 0x37, 0xb1, 0xbf, - 0xe2, 0x8b, 0x69, 0xc6, 0xd6, 0xfc, 0xfc, 0x16, 0x98, 0x85, 0x6b, 0xb7, 0x2b, 0x1f, 0x1e, 0x0a, - 0x89, 0x34, 0xf2, 0xd9, 0x6c, 0x4b, 0xee, 0x34, 0x7d, 0xdf, 0xec, 0x53, 0x18, 0x5d, 0x55, 0xd1, - 0xf8, 0x29, 0xb4, 0xd9, 0xd4, 0xd3, 0xdc, 0xf4, 0x36, 0xdb, 0x57, 0x3e, 0x1c, 0x12, 0x92, 0x02, - 0xa6, 0xd9, 0x92, 0x9a, 0xbf, 0x85, 0x7a, 0xb7, 0xd5, 0xa4, 0xeb, 0xfb, 0xeb, 0xd5, 0xc1, 0x17, - 0x76, 0x9f, 0xe1, 0x42, 0x3a, 0x27, 0xa4, 0x2e, 0x36, 0x6e, 0x90, 0xfa, 0x8e, 0xee, 0x4f, 0xf2, - 0x85, 0x67, 0xf9, 0x19, 0xfe, 0x6b, 0x48, 0x6a, 0xdf, 0x82, 0xcb, 0x06, 0x3e, 0xc9, 0xa9, 0x48, - 0xc2, 0x03, 0xca, 0x3a, 0xb7, 0xc1, 0x4e, 0x03, 0xba, 0x34, 0xe8, 0x34, 0x97, 0x56, 0x3e, 0x2c, - 0x4e, 0x3e, 0x10, 0x17, 0x52, 0x8a, 0xfe, 0x61, 0x12, 0xe3, 0xdf, 0x8a, 0x8c, 0x77, 0x9c, 0x30, - 0x16, 0x59, 0xda, 0x73, 0x2b, 0x8f, 0xa1, 0xb4, 0x93, 0x3e, 0xdc, 0x43, 0x40, 0xed, 0x1c, 0xad, - 0x1f, 0x82, 0x2b, 0x6d, 0x6e, 0x7c, 0x15, 0x8b, 0xa0, 0x69, 0xd4, 0x7c, 0x11, 0xb7, 0x84, 0x50, - 0xf8, 0xf3, 0xc1, 0xfe, 0x08, 0x89, 0x32, 0xa4, 0x5e, 0xff, 0x05, 0xd3, 0x2b, 0x38, 0xc4, 0xe1, - 0x8c, 0x13, 0x6d, 0xd8, 0x0a, 0x7f, 0x82, 0x32, 0xdb, 0x76, 0x7f, 0xfa, 0xc5, 0xf4, 0x5b, 0x7c, - 0x9c, 0x9a, 0xbe, 0x0a, 0x4c, 0xad, 0x55, 0x66, 0xf7, 0x17, 0x43, 0x37, 0x2a, 0xfe, 0x09, 0xa6, - 0xfa, 0xa3, 0x77, 0x77, 0x63, 0xe0, 0x86, 0xa6, 0x72, 0xd0, 0x37, 0xf8, 0x29, 0xb9, 0x85, 0x5f, - 0x66, 0x90, 0x42, 0xf5, 0xae, 0xc4, 0x21, 0x60, 0xb6, 0xcf, 0x8a, 0x14, 0x90, 0xe8, 0x76, 0x6e, - 0x62, 0xff, 0x96, 0x38, 0x5c, 0x35, 0x6a, 0x1a, 0xe8, 0x5f, 0x7d, 0x62, 0xbe, 0x09, 0x3a, 0x65, - 0x66, 0xbe, 0x34, 0xd2, 0x90, 0x67, 0xc1, 0xbb, 0x0e, 0xea, 0xe5, 0x31, 0x28, 0x7f, 0xf4, 0x1a, - 0x9f, 0x3e, 0x2a, 0xc7, 0xa7, 0xa4, 0x28, 0xf5, 0x1c, 0xc2, 0x2a, 0xbf, 0x89, 0x0a, 0x4f, 0x48, - 0x3b, 0xea, 0xfa, 0xa9, 0x14, 0x51, 0x34, 0xc5, 0x70, 0x72, 0xb7, 0x77, 0xf8, 0x29, 0xaa, 0xd9, - 0xd1, 0x8d, 0xd1, 0xe6, 0x2a, 0x4c, 0x4b, 0xf9, 0xf0, 0xa7, 0x46, 0x46, 0xb8, 0x50, 0x55, 0x4c, - 0x00, 0xe7, 0xa7, 0x93, 0xa6, 0xde, 0x73, 0xde, 0x62, 0x70, 0xf7, 0xfb, 0xc7, 0x60, 0x81, 0xf8, - 0x53, 0x3a, 0xd5, 0x63, 0xc5, 0x3f, 0x40, 0x25, 0x59, 0x30, 0xf7, 0xc1, 0x67, 0x2a, 0x54, 0xcc, - 0xcb, 0x14, 0x64, 0x08, 0x68, 0x9b, 0xad, 0x02, 0xcb, 0xe5, 0x21, 0x25, 0x81, 0x22, 0xf2, 0xee, - 0xef, 0xe1, 0x43, 0x8c, 0xa0, 0xad, 0x68, 0x3e, 0xf1, 0x20, 0x1a, 0x49, 0xcb, 0x8d, 0x26, 0x4f, - 0x7d, 0x5a, 0xf7, 0xcc, 0x75, 0x17, 0x17, 0x17, 0xf5, 0xff, 0xc1, 0x09, 0x1d, 0x9e, 0xff, 0x04, - 0x56, 0xb6, 0x9f, 0xe0, 0xb7, 0xa4, 0xd6, 0x9a, 0x5d, 0xf0, 0x47, 0x4e, 0xdb, 0x0e, 0xbe, 0x0a, - 0x04, 0xd0, 0xcc, 0x4e, 0x27, 0x5c, 0xe9, 0xf0, 0x9d, 0xb2, 0x74, 0x0f, 0x14, 0xd5, 0x55, 0x70, - 0x48, 0x21, 0x8c, 0x78, 0xe2, 0xc1, 0xf0, 0xfe, 0x0a, 0xaa, 0x92, 0x99, 0x46, 0x76, 0xa4, 0xe2, - 0xb7, 0x77, 0xf8, 0x24, 0xb5, 0x76, 0x7d, 0xf0, 0x57, 0x9c, 0x93, 0x15, 0x68, 0xe3, 0x2d, 0x61, - 0xc7, 0xab, 0xb8, 0x11, 0xf7, 0xc2, 0x86, 0x53, 0x18, 0xe2, 0x20, 0x00, 0x13, 0x60, 0x48, 0xc2, - 0x83, 0xf1, 0x01, 0x7e, 0x35, 0x5d, 0x6a, 0x0a, 0x3d, 0x01, 0x14, 0x95, 0xf8, 0x58, 0x83, 0x06, - 0xde, 0x95, 0x0d, 0x6b, 0xd8, 0xf9, 0xab, 0xff, 0xe8, 0xe7, 0xc7, 0xc1, 0x75, 0xb3, 0x45, 0x96, - 0x7f, 0xda, 0x7e, 0x8b, 0xd3, 0xf4, 0x4a, 0x8b, 0xea, 0xca, 0xe0, 0xaf, 0x33, 0x7a, 0x74, 0xe1, - 0xe9, 0x26, 0xbc, 0x5f, 0x77, 0xa9, 0x8e, 0x71, 0x5f, 0x1a, 0x54, 0xab, 0xd3, 0x6a, 0xe6, 0x3b, - 0x7a, 0x03, 0x28, 0x82, 0x41, 0x01, 0xce, 0x8f, 0xf7, 0xbb, 0x7e, 0x3e, 0x9e, 0x64, 0x4d, 0x24, - 0xd2, 0xf2, 0xe8, 0x34, 0x3f, 0x82, 0x81, 0x44, 0xa7, 0xca, 0xbe, 0xbe, 0x0a, 0xce, 0x25, 0xf1, - 0xba, 0x55, 0x63, 0x89, 0x57, 0xd3, 0x2b, 0x0c, 0x6c, 0x6f, 0x7c, 0x27, 0x42, 0x2d, 0x28, 0x44, - 0x53, 0x90, 0xc7, 0xc1, 0x4f, 0x8f, 0x0e, 0xed, 0x78, 0x18, 0x05, 0xca, 0x1b, 0x9e, 0xef, 0xbd, - 0x8c, 0x8c, 0xc6, 0xb8, 0x26, 0x3b, 0x61, 0x00, 0x87, 0xcc, 0xa3, 0xe6, 0x40, 0x74, 0x83, 0x1b, - 0xe1, 0x4d, 0x81, 0x99, 0x86, 0xb2, 0xdd, 0xac, 0x79, 0xd8, 0xa6, 0x12, 0x6a, 0x72, 0xe2, 0xe9, - 0x2a, 0xf0, 0x59, 0x47, 0x3b, 0x90, 0xd2, 0x40, 0xd5, 0x0b, 0x81, 0x61, 0x8e, 0x61, 0x26, 0xe3, - 0xef, 0x85, 0x21, 0x9c, 0xf8, 0xfb, 0x76, 0x3b, 0x1d, 0xec, 0x43, 0x45, 0xd7, 0x28, 0x3b, 0xa1, - 0xad, 0x11, 0x2c, 0xa1, 0x5f, 0xe8, 0x89, 0x7e, 0xbd, 0xf0, 0x50, 0x54, 0xf4, 0xd5, 0x0f, 0x3f, - 0xf8, 0x21, 0x13, 0x7b, 0xb3, 0xe1, 0x42, 0x48, 0xc7, 0xca, 0xc4, 0x94, 0x43, 0xfa, 0x4e, 0xff, - 0x04, 0xc3, 0x2b, 0x5a, 0x06, 0xa9, 0xcb, 0xe0, 0xb0, 0xee, 0x3e, 0xbc, 0x3e, 0xad, 0x5b, 0x60, - 0xd4, 0x83, 0x3d, 0x70, 0x8f, 0x24, 0xff, 0x0a, 0x6c, 0x65, 0xe8, 0x7c, 0xa9, 0xb8, 0xad, 0x8e, - 0xfb, 0x89, 0xdf, 0x9c, 0xb5, 0xff, 0xf0, 0x56, 0x76, 0x74, 0x94, 0xd4, 0xda, 0x41, 0xbc, 0x49, - 0x1d, 0x03, 0x8e, 0x8c, 0x73, 0xdc, 0x61, 0xc4, 0x85, 0x23, 0xfc, 0x4c, 0x38, 0xda, 0x67, 0x24, - 0x49, 0x2e, 0xb7, 0x82, 0x15, 0xbb, 0x5b, 0xee, 0x9b, 0x11, 0xc9, 0x34, 0x00, 0x0e, 0x1d, 0x42, - 0x91, 0xcf, 0xf4, 0x4a, 0xae, 0x10, 0x11, 0x93, 0xa3, 0x27, 0x64, 0x17, 0x92, 0x06, 0x33, 0x57, - 0x9e, 0xc4, 0x70, 0xd1, 0x5a, 0x99, 0x86, 0x8d, 0x7f, 0xaf, 0x49, 0xd1, 0xe2, 0xae, 0xaf, 0x0a, - 0x70, 0x44, 0x22, 0x3f, 0x10, 0x19, 0x69, 0x7b, 0x85, 0xc1, 0x50, 0xb4, 0x1e, 0x76, 0x07, 0x07, - 0x8b, 0x84, 0x34, 0x1e, 0x3c, 0x3a, 0x2e, 0xa1, 0x25, 0x4b, 0xf7, 0xf8, 0x24, 0x32, 0x48, 0x33, - 0xad, 0xf7, 0xc1, 0x19, 0xa7, 0xd6, 0x6e, 0x99, 0x6f, 0xa3, 0xbc, 0xbd, 0x1f, 0xff, 0x44, 0xef, - 0x82, 0x62, 0xaa, 0x45, 0x80, 0x7e, 0x10, 0xb9, 0x71, 0x54, 0x42, 0x3f, 0xf0, 0x4c, 0x47, 0x77, - 0xe5, 0xc4, 0x0b, 0xbe, 0x0b, 0x4a, 0x33, 0x48, 0x03, 0xde, 0x56, 0x19, 0x79, 0x3a, 0xf0, 0xcd, - 0xd8, 0x0a, 0x9e, 0x56, 0xdb, 0x6d, 0xbf, 0xf1, 0x45, 0xa3, 0x7c, 0xec, 0x7e, 0x3f, 0xaa, 0xa3, - 0x97, 0x2a, 0xb2, 0x2f, 0xe0, 0xaf, 0x56, 0x76, 0x24, 0x9e, 0xc3, 0xd4, 0x21, 0xb1, 0xb8, 0x33, - 0x6f, 0xf1, 0x03, 0x9a, 0xdc, 0xe9, 0x1e, 0xdf, 0x89, 0x0a, 0x1e, 0x80, 0xde, 0x20, 0x28, 0xbd, - 0xa8, 0xe8, 0xca, 0xcb, 0x72, 0x4b, 0xe9, 0x56, 0x24, 0x48, 0x28, 0xbb, 0x96, 0x8f, 0x83, 0x3b, - 0xc8, 0x3e, 0xf1, 0x02, 0xc4, 0x92, 0xe5, 0xa6, 0xeb, 0xf0, 0xa5, 0x61, 0xd4, 0xca, 0x81, 0x99, - 0xab, 0x86, 0x23, 0x9e, 0xf5, 0x98, 0x10, 0x0d, 0x43, 0x4d, 0x2f, 0x0f, 0xd0, 0x4a, 0x07, 0xfd, - 0x1f, 0x17, 0xc1, 0x3d, 0x8e, 0xf2, 0xa4, 0xd1, 0xbf, 0xc1, 0x69, 0x13, 0x56, 0x0d, 0x4f, 0x0f, - 0xef, 0x82, 0x51, 0x02, 0xf5, 0x98, 0x82, 0xa4, 0x3c, 0x1b, 0x81, 0x00, 0x58, 0xf8, 0x73, 0x2a, - 0x1b, 0x8d, 0x42, 0x2d, 0x8e, 0x51, 0x84, 0x6c, 0xf7, 0xfe, 0x1d, 0x3a, 0x36, 0xa9, 0xd0, 0x98, - 0xcd, 0xa8, 0x51, 0xf2, 0xee, 0x96, 0xcf, 0xdb, 0x37, 0xa9, 0x7a, 0x33, 0xfd, 0x15, 0xbe, 0xad, - 0x27, 0x56, 0xae, 0xaf, 0x3f, 0x04, 0x7b, 0xbd, 0xa5, 0xe4, 0xb4, 0xbf, 0x98, 0x83, 0xf1, 0xf0, - 0xb4, 0xb8, 0x90, 0x52, 0x54, 0x09, 0x43, 0x38, 0x3a, 0xad, 0x23, 0xcf, 0x2e, 0x5c, 0xc9, 0xe2, - 0x41, 0x45, 0x26, 0xdf, 0x96, 0x09, 0x39, 0xf0, 0x57, 0x44, 0x92, 0x11, 0xd4, 0xb4, 0xc1, 0x01, - 0xe5, 0xda, 0x8f, 0xbe, 0x14, 0x91, 0x56, 0xf4, 0x86, 0xd1, 0x11, 0xac, 0x08, 0xbb, 0x92, 0x47, - 0x99, 0xa5, 0x0f, 0x3a, 0xdd, 0xe2, 0x01, 0x39, 0x15, 0xbf, 0x9b, 0xf5, 0xf1, 0x82, 0x5d, 0x98, - 0xe8, 0x00, 0x58, 0x30, 0xd2, 0xad, 0xd0, 0x37, 0xd3, 0x99, 0x98, 0xc8, 0x83, 0x60, 0x6c, 0xa7, - 0x82, 0x4d, 0x11, 0x92, 0x6e, 0xf8, 0x2a, 0x8e, 0x0d, 0x0f, 0x67, 0x4d, 0x50, 0x1a, 0x41, 0x44, - 0x44, 0x11, 0x92, 0x46, 0x4f, 0xfc, 0x11, 0x92, 0x0f, 0x99, 0x97, 0xf8, 0x44, 0xa6, 0xa3, 0x0d, - 0x8e, 0x8c, 0x8a, 0xea, 0xd3, 0x63, 0xb0, 0x8f, 0xf0, 0xa7, 0x41, 0xbb, 0x90, 0xba, 0x6e, 0x45, - 0xb9, 0x53, 0xcc, 0x97, 0x15, 0x86, 0xaa, 0x08, 0x83, 0x6d, 0x00, 0x00, 0xd0, 0x93, 0x87, 0x82, - 0x4b, 0xbb, 0xbb, 0x7d, 0x68, 0xe3, 0x5d, 0x5f, 0xe8, 0x9d, 0xf0, 0x53, 0xb0, 0x67, 0x96, 0x58, - 0x1f, 0xd8, 0x53, 0xf9, 0xff, 0x78, 0x80, 0x56, 0x52, 0x84, 0x01, 0xa0, 0xad, 0xde, 0x1f, 0x82, - 0x69, 0x00, 0x68, 0x02, 0x3e, 0x32, 0x3f, 0x0f, 0xe1, 0x49, 0x42, 0x2d, 0x10, 0x17, 0x25, 0x44, - 0x23, 0x26, 0xca, 0x5d, 0x6a, 0x5b, 0x71, 0xb0, 0x82, 0xb2, 0xe3, 0x77, 0xcc, 0x3e, 0x14, 0xb2, - 0x7a, 0x48, 0xd0, 0x13, 0x00, 0x8e, 0x0d, 0x55, 0x16, 0xdc, 0xb4, 0x57, 0x87, 0x14, 0xdd, 0x77, - 0xf8, 0x25, 0x2d, 0xb4, 0x40, 0xbf, 0x40, 0xd0, 0x18, 0xe8, 0xfe, 0x62, 0x5f, 0xfc, 0x15, 0x54, - 0x73, 0xba, 0x75, 0x9d, 0x74, 0x13, 0x29, 0xb2, 0x51, 0xdc, 0xf8, 0x25, 0x22, 0x1e, 0x84, 0xf3, - 0x99, 0x31, 0xdf, 0x2f, 0x8c, 0xaa, 0x06, 0x96, 0x32, 0x0f, 0x9d, 0x6e, 0x45, 0x06, 0xa3, 0x1b, - 0x61, 0xf8, 0x4c, 0x56, 0x84, 0xaa, 0x52, 0x14, 0x4b, 0xf3, 0x14, 0xc4, 0x58, 0xd3, 0xf8, 0x74, - 0xe0, 0x99, 0xa9, 0x22, 0x88, 0xfa, 0x28, 0x7a, 0x37, 0x82, 0x4f, 0x81, 0xcf, 0x7c, 0x25, 0x06, - 0x88, 0x03, 0x32, 0x4b, 0x68, 0x83, 0x09, 0xec, 0xc3, 0xc6, 0xa9, 0xf9, 0xeb, 0xea, 0xea, 0xe2, - 0xfa, 0xbf, 0xc1, 0x25, 0xbb, 0x69, 0xea, 0x2f, 0x9c, 0x56, 0x14, 0x4c, 0xa2, 0xcf, 0xfc, 0x3e, - 0x72, 0x41, 0x80, 0xed, 0x8c, 0x82, 0x23, 0xe7, 0x0e, 0xd0, 0x19, 0xd1, 0x1d, 0x21, 0xe7, 0xee, - 0x7e, 0xb1, 0x20, 0x9f, 0x37, 0x3a, 0x8f, 0x8f, 0x68, 0xf5, 0xcd, 0x6c, 0xb1, 0xd7, 0x75, 0x1a, - 0x10, 0x25, 0x97, 0xc1, 0x56, 0x9b, 0xb0, 0x76, 0xee, 0xe3, 0x43, 0x1f, 0xff, 0xf5, 0xfb, 0xe0, - 0x98, 0xaf, 0x96, 0x93, 0x32, 0x3c, 0x39, 0xd8, 0x25, 0xdf, 0x05, 0xda, 0x6a, 0x86, 0xc4, 0xf7, - 0x7f, 0x84, 0xb4, 0x06, 0xa9, 0x9d, 0x8d, 0x01, 0x30, 0x7e, 0x14, 0xad, 0x25, 0xd5, 0x6d, 0xa0, - 0xc7, 0x6c, 0x2a, 0xc3, 0x9d, 0x7f, 0x04, 0x74, 0x66, 0xa5, 0xdf, 0xe0, 0x8e, 0xb3, 0x66, 0x5f, - 0x05, 0x91, 0xfd, 0xfe, 0x30, 0xf4, 0xfd, 0x00, 0xc7, 0xec, 0x3f, 0xc1, 0x59, 0xa6, 0x97, 0x7b, - 0x2d, 0x23, 0xe6, 0x1b, 0xfb, 0xc4, 0x82, 0xa2, 0xa4, 0xf8, 0x17, 0x21, 0x39, 0x69, 0x3e, 0x0f, - 0xab, 0xcc, 0x60, 0xda, 0x18, 0x0e, 0xff, 0x04, 0x7a, 0x6d, 0xb6, 0xdf, 0x05, 0x92, 0x9c, 0x94, - 0x46, 0x44, 0xcd, 0x9a, 0x32, 0xe9, 0x58, 0x64, 0x61, 0xc1, 0x0f, 0xc7, 0xc9, 0x77, 0x77, 0xf0, - 0x44, 0x7d, 0x90, 0xc6, 0xa7, 0x4f, 0x82, 0x82, 0x1d, 0x86, 0x6e, 0x7a, 0x06, 0x72, 0x74, 0x3f, - 0x2a, 0xf0, 0x5a, 0x57, 0x62, 0xba, 0xa7, 0xc5, 0xf0, 0x44, 0x45, 0x18, 0x4c, 0x2f, 0x5f, 0x1d, - 0xe4, 0xae, 0x40, 0xc0, 0xcc, 0x08, 0x06, 0x6f, 0x47, 0xe8, 0x54, 0xff, 0x2d, 0x84, 0x98, 0xaf, - 0xe0, 0xbc, 0xab, 0xa6, 0x99, 0xe7, 0xaa, 0x43, 0x47, 0xae, 0x48, 0x64, 0x81, 0x9e, 0x2b, 0xab, - 0xd7, 0x57, 0xf9, 0x8b, 0x6d, 0xb4, 0x32, 0xf5, 0x7a, 0xea, 0xf5, 0xd9, 0xaf, 0x3e, 0xf8, 0xc2, - 0x42, 0x45, 0x8b, 0x28, 0x9a, 0x71, 0xc6, 0x0c, 0x77, 0x8a, 0x21, 0x4d, 0xf7, 0xc1, 0x85, 0x04, - 0x61, 0x11, 0xb9, 0xd2, 0x8e, 0x60, 0xbd, 0x45, 0x27, 0x1e, 0x35, 0xf0, 0x5a, 0x24, 0xc6, 0x7a, - 0x6a, 0x9c, 0x98, 0xcc, 0xbe, 0x58, 0xc5, 0xde, 0xaf, 0x12, 0x0a, 0xce, 0x84, 0x76, 0x23, 0xc3, - 0x30, 0xd1, 0xb8, 0x7c, 0x28, 0x95, 0x70, 0x38, 0x20, 0x18, 0x69, 0xb1, 0xa0, 0x78, 0xc4, 0x1e, - 0x24, 0x16, 0x13, 0x19, 0xab, 0xca, 0xd9, 0xd4, 0xe6, 0xd9, 0x14, 0x16, 0x3e, 0xb8, 0x25, 0x32, - 0x90, 0x10, 0x07, 0x2c, 0x2f, 0x7f, 0x82, 0x12, 0xb2, 0x42, 0x4c, 0x81, 0xb7, 0xf8, 0x2e, 0x2c, - 0xac, 0x1c, 0x3d, 0xcb, 0x1b, 0x27, 0xf8, 0x2a, 0x28, 0xd8, 0xc4, 0xd8, 0xa2, 0x2b, 0x1f, 0x70, - 0x20, 0x65, 0xb6, 0x3d, 0xee, 0x7c, 0x17, 0x65, 0x93, 0x3d, 0x01, 0x43, 0x32, 0x84, 0xff, 0xe0, - 0xa0, 0xd1, 0x93, 0xee, 0x63, 0xdb, 0x97, 0xc1, 0x61, 0x52, 0x4e, 0xcd, 0x3b, 0xd2, 0x7a, 0x0e, - 0x8e, 0xfc, 0x16, 0xdb, 0x6a, 0x86, 0x36, 0x08, 0x8f, 0x7c, 0xff, 0x5e, 0xf8, 0x23, 0xb3, 0x43, - 0x43, 0x78, 0xff, 0x44, 0xef, 0x93, 0x9a, 0x9f, 0x66, 0xe3, 0xdd, 0xe0, 0xa8, 0x58, 0xae, 0xdc, - 0xb8, 0xcd, 0x80, 0x90, 0xe9, 0x4e, 0xce, 0x23, 0x02, 0xf7, 0xc1, 0x4e, 0x88, 0x61, 0x2e, 0x90, - 0x84, 0x40, 0x4c, 0x1c, 0xbc, 0x80, 0x77, 0x63, 0x0b, 0x30, 0x68, 0x2e, 0xda, 0x4d, 0x12, 0x83, - 0x24, 0x8b, 0xc2, 0x95, 0xa6, 0x51, 0xb5, 0x23, 0x81, 0x01, 0x1b, 0x75, 0xfc, 0x7c, 0xe3, 0x0d, - 0x3f, 0x29, 0x4c, 0x45, 0x0f, 0x78, 0x6f, 0x82, 0x8d, 0xdd, 0x0f, 0x9d, 0xf9, 0x7d, 0x6c, 0x3c, - 0x7c, 0xf0, 0x47, 0x36, 0x2e, 0x81, 0x10, 0xfa, 0x02, 0x87, 0x32, 0xbf, 0x04, 0xd3, 0x88, 0x0d, - 0x2f, 0x4a, 0xd6, 0xbe, 0x0a, 0xfb, 0xb2, 0xa4, 0xec, 0x28, 0xe2, 0x43, 0x17, 0x13, 0x3f, 0x04, - 0x95, 0x55, 0x17, 0xaf, 0x9a, 0xc0, 0xd0, 0x11, 0xdc, 0xf6, 0x17, 0x28, 0xa2, 0x33, 0x8d, 0x26, - 0x3c, 0x3c, 0x73, 0x82, 0x02, 0xb3, 0x07, 0x58, 0x33, 0x8d, 0x30, 0x3c, 0xd0, 0xc0, 0xd6, 0x65, - 0x4a, 0xc3, 0x32, 0x93, 0x26, 0xef, 0xe2, 0x7a, 0xbf, 0xd5, 0xaf, 0x96, 0xd3, 0x49, 0x24, 0x27, - 0x85, 0x06, 0x36, 0xc2, 0x66, 0x18, 0x64, 0x95, 0x82, 0xd9, 0xbb, 0x26, 0x96, 0xca, 0x90, 0x90, - 0x74, 0x0c, 0x8a, 0xad, 0x08, 0x7f, 0x2f, 0xb2, 0xe8, 0xa0, 0x21, 0x8c, 0xbc, 0x14, 0x1f, 0x87, - 0x30, 0xa2, 0x75, 0x8e, 0x3b, 0x3e, 0x0b, 0x39, 0xc6, 0x14, 0xd4, 0xc1, 0x00, 0x76, 0xa8, 0x8d, - 0x2d, 0x7c, 0x28, 0x72, 0x97, 0x95, 0x06, 0xec, 0x53, 0x11, 0xe3, 0x8e, 0x0a, 0xb1, 0x2f, 0x28, - 0x60, 0x23, 0xeb, 0x05, 0x23, 0x35, 0xf3, 0xf8, 0x80, 0xa5, 0xe0, 0xd7, 0x21, 0x31, 0xb3, 0x65, - 0x03, 0xca, 0x1d, 0x49, 0x8e, 0x60, 0xcf, 0xb0, 0x94, 0x7d, 0x7d, 0x7c, 0xeb, 0xc1, 0x61, 0x9a, - 0xad, 0x8f, 0xaa, 0x04, 0x6c, 0x43, 0xca, 0x95, 0xc1, 0x61, 0x18, 0xe6, 0x41, 0x9b, 0xd5, 0xbf, - 0x2e, 0xcf, 0x82, 0xc1, 0x70, 0xf2, 0x4b, 0x2c, 0x7d, 0xcc, 0x1a, 0xd8, 0x1c, 0xec, 0x8d, 0x12, - 0x4a, 0x9f, 0x05, 0x59, 0x0d, 0x49, 0x0b, 0x96, 0x6b, 0x1c, 0x1c, 0x61, 0x33, 0x47, 0x8f, 0x38, - 0x3b, 0xe8, 0x92, 0xae, 0x0a, 0x4a, 0xc4, 0xa5, 0x8b, 0xe6, 0x51, 0x08, 0xfd, 0x8e, 0x74, 0x6d, - 0x50, 0x87, 0xe9, 0xd7, 0x82, 0xcc, 0x7c, 0x6d, 0x6a, 0x63, 0xde, 0xa6, 0x6f, 0x1f, 0xe1, 0x1b, - 0x6c, 0x47, 0x8c, 0x12, 0xcc, 0x18, 0x73, 0xa8, 0x84, 0xec, 0x0c, 0xb1, 0xe0, 0xa0, 0xcd, 0xeb, - 0x59, 0x31, 0x2c, 0x76, 0xf1, 0x20, 0xb4, 0xaf, 0x9c, 0xc5, 0xb5, 0x37, 0x2f, 0x47, 0x7c, 0x48, - 0x44, 0xc3, 0xec, 0x5c, 0x57, 0xa4, 0x4c, 0x65, 0x12, 0xd3, 0xf1, 0x20, 0x98, 0xab, 0x56, 0xb6, - 0x9e, 0xbc, 0x48, 0x52, 0x2b, 0xe5, 0xcc, 0xc3, 0x06, 0x9c, 0x94, 0xbc, 0xf8, 0x56, 0x3b, 0xeb, - 0xdf, 0x04, 0xa5, 0x58, 0x1b, 0x20, 0x1b, 0x85, 0x30, 0xea, 0x7a, 0x38, 0xca, 0xdc, 0x56, 0xff, - 0x0a, 0x6b, 0x2b, 0x83, 0x0f, 0x2b, 0xc3, 0x1f, 0x1b, 0xb8, 0xce, 0x86, 0xa1, 0xbb, 0xa9, 0x60, - 0x5a, 0x9a, 0x91, 0x95, 0xab, 0x82, 0xbc, 0xe5, 0x19, 0xdc, 0xe1, 0x8b, 0xb8, 0x83, 0x4c, 0x7e, - 0xe7, 0xdf, 0x0a, 0x5a, 0xad, 0x45, 0xc2, 0xf5, 0x78, 0x81, 0x2d, 0x23, 0x9c, 0xf1, 0x82, 0xf0, - 0xc5, 0xc9, 0x21, 0x52, 0x35, 0xf0, 0x57, 0xa4, 0xa8, 0x74, 0x31, 0xe7, 0x34, 0x7b, 0xe6, 0x8c, - 0xac, 0xc1, 0x02, 0xdf, 0xf5, 0xef, 0xaf, 0x7d, 0x5b, 0xc4, 0x82, 0xa1, 0x49, 0xde, 0xe3, 0x05, - 0x61, 0x12, 0xa4, 0x11, 0x62, 0xbd, 0xdf, 0xbe, 0x27, 0xbc, 0x03, 0x21, 0xb2, 0x0a, 0x3d, 0x27, - 0xf0, 0x46, 0x72, 0xa4, 0x43, 0x40, 0xbf, 0x2b, 0xab, 0xa2, 0x7a, 0xea, 0x23, 0xaf, 0x7c, 0x13, - 0x8a, 0x28, 0x60, 0x2c, 0x0a, 0x98, 0xcb, 0x82, 0xd6, 0x8c, 0x8f, 0x74, 0x61, 0xe1, 0x52, 0x92, - 0x2a, 0xbf, 0x03, 0x1f, 0xee, 0x8f, 0xa2, 0x5c, 0x23, 0x26, 0x53, 0x3f, 0xf0, 0x9c, 0x8a, 0x16, - 0x3a, 0xa7, 0xf8, 0x23, 0x28, 0xd3, 0xdf, 0x95, 0x4f, 0x7c, 0x23, 0x8c, 0xb3, 0x41, 0xe9, 0x31, - 0x4e, 0x7c, 0xc6, 0x2c, 0x1c, 0x7f, 0x05, 0xc5, 0xee, 0x8b, 0x61, 0x96, 0x87, 0x0f, 0xe1, 0x3a, - 0xd7, 0xa3, 0xc8, 0x72, 0x20, 0x95, 0x83, 0x3a, 0x0b, 0xc1, 0x29, 0x16, 0x1d, 0x91, 0xc7, 0x28, - 0x9b, 0x29, 0xf9, 0xf5, 0x7f, 0x82, 0x4d, 0x69, 0x3f, 0xc4, 0x10, 0x3e, 0xe9, 0xef, 0x6d, 0x58, - 0xa2, 0xbe, 0x6b, 0xb4, 0xd5, 0x70, 0x58, 0x24, 0x8c, 0x83, 0xb3, 0x23, 0x56, 0x68, 0xcc, 0x95, - 0x03, 0x4f, 0x06, 0x66, 0x50, 0xd7, 0x1c, 0x6b, 0xe0, 0x8a, 0x82, 0x1b, 0x02, 0x01, 0xa9, 0x42, - 0xbf, 0xc9, 0x15, 0xdd, 0xfc, 0x13, 0xfb, 0x06, 0x34, 0x3a, 0x28, 0x1c, 0x98, 0x8b, 0x33, 0x3f, - 0xc2, 0x9d, 0x43, 0x96, 0x79, 0x7a, 0x8b, 0x47, 0x88, 0x0e, 0xc1, 0x50, 0x19, 0x58, 0xcc, 0xf1, - 0x05, 0x35, 0xec, 0x7c, 0x40, 0x25, 0xdb, 0x5a, 0x4e, 0x53, 0x17, 0xc1, 0xfc, 0x41, 0x8f, 0x2f, - 0xbf, 0x82, 0xe8, 0x70, 0x71, 0x8b, 0x77, 0xca, 0xf6, 0x17, 0x3a, 0xf5, 0x7f, 0x82, 0xe2, 0x90, - 0x30, 0x59, 0x16, 0x8b, 0x2e, 0x48, 0xcc, 0x83, 0x0c, 0x7f, 0x82, 0x7a, 0x1b, 0x4d, 0x7a, 0x6f, - 0x9d, 0xf0, 0x5b, 0x20, 0x10, 0xe3, 0x47, 0x1a, 0x60, 0xfb, 0x3a, 0x35, 0x3a, 0x8f, 0x92, 0xf6, - 0x9c, 0xe7, 0xe0, 0xaf, 0x0e, 0x9d, 0x2e, 0x7a, 0x17, 0x75, 0xe3, 0xfc, 0x27, 0x52, 0x63, 0x36, - 0xd6, 0x86, 0x30, 0xd7, 0xf3, 0x11, 0xf3, 0x67, 0xad, 0x7d, 0x16, 0xbe, 0x0a, 0x6c, 0xb3, 0xaf, - 0x75, 0xa7, 0xaa, 0xe7, 0x3e, 0x14, 0x1c, 0xa1, 0xa1, 0xc1, 0xb9, 0x30, 0x77, 0xa6, 0x31, 0x9a, - 0xcd, 0x9a, 0xd8, 0xe3, 0x05, 0xdd, 0x88, 0xaf, 0x35, 0xbc, 0xce, 0xf8, 0x2d, 0x3a, 0x76, 0xf0, - 0x98, 0x4c, 0x0e, 0x44, 0xf0, 0x9f, 0x04, 0x94, 0xb1, 0x0f, 0xef, 0x84, 0x0c, 0xc9, 0x33, 0x98, - 0xb4, 0x30, 0x2f, 0x7b, 0xb4, 0xa4, 0xc9, 0xf0, 0x57, 0xad, 0x75, 0x55, 0x55, 0x56, 0x2b, 0x82, - 0x71, 0x31, 0xc0, 0x48, 0x26, 0x33, 0xb1, 0x53, 0x98, 0x82, 0xdf, 0x04, 0xe6, 0xad, 0x94, 0xa0, - 0x88, 0xbc, 0xbf, 0xc4, 0xee, 0xd5, 0x55, 0x89, 0xc6, 0x81, 0xc0, 0x7c, 0x2a, 0x35, 0xe8, 0x08, - 0xbd, 0x83, 0xda, 0x21, 0xd8, 0xb0, 0xf9, 0x38, 0xbf, 0xe1, 0x43, 0x34, 0x50, 0x80, 0x72, 0x57, - 0x41, 0x99, 0x22, 0x89, 0xf9, 0x1e, 0xa5, 0x3d, 0xae, 0xf8, 0x2b, 0x96, 0x2d, 0x3d, 0x25, 0xee, - 0xd3, 0x42, 0xd2, 0xef, 0xf0, 0x4b, 0xd9, 0x9a, 0x89, 0x6a, 0xf7, 0xc1, 0x6c, 0x73, 0x23, 0xb9, - 0x3a, 0x65, 0x75, 0xb7, 0xf8, 0x22, 0xad, 0x49, 0xff, 0xf0, 0x47, 0xa4, 0xdf, 0xdf, 0x04, 0xa4, - 0x6c, 0xbb, 0xc1, 0xe5, 0x62, 0xdf, 0x04, 0x25, 0x61, 0xba, 0x3b, 0xfc, 0x11, 0xdd, 0xdd, 0xeb, - 0xe2, 0x09, 0x77, 0x78, 0x36, 0xf6, 0xef, 0xc1, 0x65, 0xed, 0xdf, 0x6d, 0x37, 0x2f, 0x7f, 0xdf, - 0x28, 0x91, 0xf9, 0xd9, 0xfe, 0x0a, 0x68, 0x6f, 0x63, 0x46, 0xcd, 0x27, 0xc6, 0xf0, 0xd5, 0x1d, - 0xf0, 0x57, 0x0f, 0xc1, 0x68, 0x61, 0x2d, 0x17, 0xed, 0x10, 0x2d, 0x0c, 0x2e, 0x5f, 0x44, 0x47, - 0x30, 0x79, 0x13, 0xee, 0xc0, 0x4b, 0x27, 0xf5, 0xfa, 0xb8, 0x8b, 0x28, 0xc0, 0x88, 0xf2, 0x88, - 0x11, 0xd0, 0x36, 0xf2, 0xd0, 0x1c, 0x70, 0x62, 0x42, 0xf0, 0x5d, 0x24, 0x99, 0x87, 0xe5, 0xf0, - 0x69, 0x36, 0xd1, 0x12, 0x67, 0xff, 0x24, 0x5d, 0x45, 0xc5, 0xfc, 0x14, 0x46, 0x04, 0x3a, 0xe3, - 0x6f, 0xb8, 0x40, 0x54, 0x4e, 0x93, 0x87, 0xc1, 0x39, 0x16, 0x66, 0xc5, 0x95, 0x17, 0x2a, 0xbe, - 0x09, 0x89, 0x42, 0x55, 0x55, 0x55, 0x67, 0xc1, 0x18, 0x91, 0xb7, 0x76, 0x43, 0x9d, 0x3e, 0x2e, - 0xd4, 0x94, 0xf3, 0x4b, 0xc3, 0x62, 0x29, 0xab, 0x06, 0x94, 0x54, 0xff, 0xff, 0x04, 0x24, 0x1f, - 0x10, 0x90, 0xa3, 0xf7, 0xd0, 0x98, 0xca, 0xe6, 0x3d, 0x55, 0x49, 0xd1, 0xab, 0x00, 0x00, 0x00, - 0x01, 0x41, 0x9a, 0x24, 0x12, 0x30, 0x3a, 0x81, 0x84, 0x4f, 0xe7, 0x08, 0xae, 0x33, 0xdf, 0xf8, - 0x6e, 0x18, 0xf7, 0xd4, 0x7f, 0xbf, 0xe0, 0x83, 0xab, 0x90, 0x35, 0x44, 0x06, 0x01, 0x40, 0xe6, - 0x50, 0xe7, 0x5c, 0x6e, 0x04, 0x99, 0x80, 0xff, 0x48, 0x88, 0x6b, 0x70, 0xb0, 0x50, 0xc8, 0x02, - 0x85, 0x1f, 0xb4, 0x3c, 0xb8, 0x80, 0x40, 0x08, 0xfa, 0xbc, 0x2c, 0x41, 0x45, 0x04, 0x60, 0x0d, - 0x00, 0x40, 0x71, 0x38, 0x25, 0xea, 0x5a, 0x3f, 0x10, 0x34, 0xc8, 0x1f, 0x2a, 0xe2, 0x50, 0xf6, - 0xa1, 0xd8, 0x2c, 0x16, 0xda, 0xc8, 0xac, 0x03, 0x4b, 0xf0, 0x54, 0x55, 0x37, 0xe2, 0x5e, 0x7f, - 0x3b, 0xc4, 0x3f, 0xaf, 0x30, 0x44, 0xb5, 0x84, 0xbb, 0x82, 0x05, 0x06, 0x6a, 0x50, 0x10, 0x3c, - 0x46, 0x3b, 0xf3, 0xf5, 0xaf, 0x12, 0x32, 0x5c, 0x5d, 0xe0, 0x7b, 0x3e, 0x85, 0x8c, 0x43, 0x94, - 0xa0, 0x20, 0x00, 0xbf, 0xbc, 0x00, 0x04, 0x78, 0xdb, 0x01, 0x8d, 0x79, 0x01, 0xf3, 0xa0, 0x00, - 0x37, 0x91, 0xe3, 0x6c, 0x09, 0x47, 0x04, 0xa9, 0x04, 0xbc, 0x12, 0x0b, 0xd2, 0x4e, 0xe4, 0x10, - 0x74, 0x72, 0x23, 0x35, 0xc4, 0x0a, 0x43, 0x33, 0x28, 0x6b, 0x68, 0x7a, 0x1e, 0x9c, 0x77, 0x04, - 0x06, 0x29, 0x16, 0x0e, 0x78, 0x0c, 0x44, 0x62, 0x70, 0xc2, 0x0b, 0x54, 0x1d, 0xb7, 0x39, 0x72, - 0x60, 0xd0, 0xfa, 0x82, 0x70, 0x28, 0x86, 0xb8, 0x97, 0x12, 0x7f, 0xaa, 0xaa, 0xf1, 0x23, 0x3c, - 0x65, 0x83, 0xc5, 0x64, 0xaa, 0x87, 0x51, 0xe0, 0xe1, 0x60, 0x5a, 0xd6, 0x26, 0x83, 0x84, 0x70, - 0x40, 0x12, 0xc1, 0xd6, 0x70, 0x03, 0x84, 0xa2, 0x20, 0x3e, 0x08, 0xca, 0x89, 0xd7, 0x64, 0x55, - 0x16, 0x50, 0x44, 0x70, 0xc0, 0xb3, 0x50, 0x4e, 0xc0, 0x74, 0x52, 0x8c, 0x1d, 0x0a, 0x0a, 0x34, - 0x87, 0x7c, 0x1c, 0x40, 0x42, 0xf8, 0x38, 0x81, 0x0b, 0xe1, 0xc0, 0x1b, 0xe6, 0xd3, 0x69, 0x35, - 0x9b, 0xe5, 0x29, 0x63, 0x14, 0x65, 0x8c, 0x51, 0xfa, 0x9e, 0xae, 0x8a, 0x8e, 0x00, 0x04, 0x61, - 0x5e, 0x84, 0x45, 0x5d, 0x49, 0x7c, 0xf8, 0x0f, 0x1e, 0x86, 0x86, 0xab, 0xea, 0x91, 0x0a, 0xea, - 0x99, 0x7a, 0xa6, 0x4b, 0xa8, 0xf2, 0xfa, 0x8f, 0x2f, 0x10, 0x14, 0x09, 0x5d, 0xdd, 0x9f, 0xd9, - 0xee, 0xef, 0x8d, 0xf7, 0x78, 0x90, 0xa5, 0x0c, 0x16, 0x3e, 0x07, 0xf9, 0x0a, 0x18, 0x19, 0x38, - 0x3d, 0x96, 0xdf, 0x97, 0x0e, 0x84, 0x2a, 0x06, 0x31, 0x88, 0x43, 0xc2, 0x0f, 0x1c, 0x7c, 0x57, - 0xa9, 0x67, 0x23, 0xf8, 0x80, 0x80, 0x26, 0x9f, 0xed, 0x63, 0x60, 0x45, 0x5d, 0xa4, 0x2c, 0xe5, - 0xb7, 0xf9, 0xc2, 0x65, 0x46, 0x7e, 0x46, 0x1e, 0xd7, 0xaf, 0x7d, 0x4b, 0x7c, 0xc6, 0x77, 0x36, - 0x7c, 0x40, 0x2e, 0x1d, 0x77, 0x75, 0x51, 0x71, 0x78, 0xb8, 0x91, 0x01, 0x49, 0x71, 0xc4, 0x21, - 0x80, 0x96, 0xdc, 0x64, 0x82, 0xdd, 0x67, 0x8b, 0x14, 0x1d, 0xb6, 0x64, 0xfa, 0xf2, 0xe2, 0x04, - 0x02, 0xaa, 0x62, 0x10, 0x92, 0xa1, 0x30, 0xe0, 0xc0, 0x44, 0x34, 0x0a, 0x0d, 0x82, 0x03, 0x56, - 0x83, 0xde, 0xec, 0x73, 0xa7, 0x10, 0x10, 0x0a, 0x55, 0x28, 0x00, 0x86, 0xad, 0x08, 0x6c, 0xac, - 0x09, 0xf2, 0x41, 0x8d, 0x15, 0x31, 0x22, 0x7a, 0x85, 0x25, 0xd1, 0x6f, 0x7b, 0xbe, 0x63, 0xc2, - 0x03, 0x21, 0x1c, 0x9d, 0x08, 0x4c, 0x31, 0x76, 0x3d, 0x8d, 0x40, 0x76, 0xf0, 0xba, 0x00, 0xc4, - 0x64, 0x21, 0xc4, 0xcd, 0x78, 0x05, 0x5f, 0xac, 0xfa, 0xa7, 0xa7, 0x90, 0xbf, 0x1e, 0x5a, 0x17, - 0xc3, 0xc0, 0x10, 0xc5, 0x1c, 0x98, 0x90, 0x80, 0x23, 0x16, 0xaa, 0x32, 0x22, 0x8f, 0x8d, 0x89, - 0x32, 0xe8, 0xca, 0x47, 0x07, 0xe8, 0x22, 0x74, 0x85, 0xfa, 0x91, 0xbe, 0x85, 0x61, 0xf5, 0x95, - 0x74, 0x46, 0xfa, 0xb0, 0xf5, 0xe9, 0x7a, 0x3c, 0x55, 0xd5, 0x2a, 0xf5, 0x4c, 0xbd, 0x7b, 0xeb, - 0xdf, 0x53, 0x28, 0xf1, 0x01, 0x11, 0xce, 0x7e, 0xca, 0xde, 0xf2, 0x98, 0xb7, 0x1e, 0xf8, 0x44, - 0x28, 0x4a, 0xc5, 0xc3, 0x51, 0x29, 0xb8, 0x01, 0x53, 0x95, 0x90, 0x11, 0x83, 0x86, 0x79, 0x6e, - 0x2f, 0xa2, 0xf7, 0xac, 0x1d, 0x42, 0xeb, 0x07, 0xb3, 0x2c, 0x2f, 0xeb, 0xa8, 0xd1, 0x66, 0xe4, - 0x38, 0xa8, 0x4d, 0xcc, 0x77, 0x78, 0x40, 0x13, 0x59, 0xd4, 0xd3, 0x63, 0x32, 0x6c, 0x93, 0xeb, - 0x67, 0x88, 0x08, 0x05, 0x4a, 0x56, 0x9e, 0x43, 0x6c, 0x6d, 0x21, 0x68, 0xa6, 0xbf, 0x96, 0x44, - 0x69, 0xfe, 0x09, 0x33, 0x9a, 0x69, 0xa4, 0x1c, 0xbc, 0x40, 0x27, 0x0a, 0x0a, 0xcd, 0xc3, 0x8d, - 0x28, 0x8f, 0xe1, 0x78, 0x9f, 0x9c, 0x7f, 0x05, 0x25, 0x0f, 0x1c, 0x8a, 0x04, 0x05, 0x00, 0x56, - 0xb7, 0x0d, 0x31, 0x43, 0xa0, 0xa0, 0xc4, 0xb3, 0xc9, 0x26, 0xe3, 0x30, 0xf7, 0xd0, 0xd9, 0xf8, - 0x98, 0x28, 0xf0, 0xcf, 0xee, 0xa1, 0xaf, 0x45, 0xf0, 0x56, 0x61, 0xf6, 0x28, 0xe3, 0xb9, 0x43, - 0x28, 0xc1, 0xcb, 0x37, 0x74, 0xcc, 0xd0, 0x40, 0x7d, 0x79, 0xf5, 0x7c, 0x28, 0x2b, 0xed, 0xdc, - 0xfc, 0xa4, 0xd0, 0x12, 0xaa, 0x88, 0x69, 0x38, 0x50, 0x15, 0x3c, 0x68, 0xc7, 0x03, 0x93, 0x13, - 0x01, 0xfb, 0x0b, 0x76, 0xb3, 0xa0, 0x6e, 0x7c, 0x10, 0x89, 0x7c, 0x06, 0x84, 0x82, 0x42, 0x3c, - 0x1c, 0x4e, 0xfd, 0x52, 0xf0, 0x50, 0x35, 0x24, 0xb4, 0x92, 0xdf, 0xe3, 0x29, 0x25, 0xa4, 0x96, - 0x92, 0x5b, 0x4d, 0x63, 0xf8, 0x6a, 0x76, 0x33, 0xd0, 0xa8, 0xef, 0x8f, 0x27, 0xfb, 0xe8, 0x43, - 0xfd, 0x15, 0xe4, 0xe8, 0xe5, 0xe5, 0x74, 0x2b, 0x2a, 0xe8, 0xee, 0x44, 0xe2, 0x02, 0x82, 0x85, - 0xa0, 0x2d, 0x98, 0x84, 0x09, 0x4b, 0x08, 0x41, 0xfa, 0x76, 0xc1, 0x86, 0x22, 0x48, 0xa2, 0x1b, - 0x73, 0xd4, 0xc2, 0xc5, 0xbb, 0x76, 0x05, 0xc1, 0xf7, 0x49, 0x84, 0x3d, 0xd5, 0x90, 0x9c, 0x48, - 0x5a, 0xa1, 0x34, 0x1e, 0x00, 0xf4, 0x7c, 0xc9, 0xe1, 0x90, 0xa0, 0x82, 0xc9, 0x71, 0x60, 0x95, - 0x63, 0xd0, 0xc0, 0x4a, 0x90, 0xc8, 0x23, 0xdd, 0x92, 0x8c, 0x4c, 0x10, 0x17, 0x61, 0x52, 0x8c, - 0x86, 0x77, 0x82, 0x79, 0x01, 0xa5, 0x59, 0x8c, 0x34, 0x95, 0xb0, 0x94, 0x3b, 0x70, 0x5a, 0xb5, - 0x7c, 0x02, 0xb2, 0x6c, 0x59, 0x84, 0x77, 0x12, 0x11, 0x0a, 0x56, 0xc2, 0xa3, 0x0c, 0x41, 0x02, - 0xc5, 0x4d, 0x74, 0x02, 0x00, 0x21, 0x49, 0x49, 0x2b, 0x49, 0x29, 0xaa, 0xb1, 0x70, 0xfc, 0xc4, - 0xa5, 0x64, 0x53, 0x60, 0xff, 0x92, 0x8b, 0x32, 0x9e, 0x08, 0x06, 0xee, 0x22, 0x0a, 0x02, 0xac, - 0x74, 0x8e, 0x20, 0xf1, 0x90, 0x00, 0x3e, 0xfa, 0x8e, 0xbf, 0xc2, 0x83, 0x39, 0xf6, 0x68, 0x29, - 0x4e, 0xb1, 0xaa, 0x62, 0x75, 0x2c, 0xe1, 0xc3, 0x81, 0xc4, 0x71, 0xf8, 0x50, 0x40, 0x37, 0x1c, - 0x45, 0x51, 0x65, 0x0b, 0x52, 0x65, 0x24, 0x26, 0xb0, 0x9f, 0x48, 0xdc, 0xe4, 0x82, 0x38, 0x3f, - 0x24, 0x29, 0xc1, 0x51, 0x1a, 0x2a, 0xc7, 0xa5, 0x8d, 0xfd, 0xce, 0x24, 0x40, 0x26, 0x1e, 0x9d, - 0x2d, 0x0c, 0x6a, 0x22, 0x7d, 0xc8, 0xa6, 0x8a, 0x2f, 0x82, 0xd9, 0x7b, 0x12, 0x06, 0xd1, 0x0e, - 0xc8, 0x15, 0x31, 0x2c, 0xaa, 0x26, 0x11, 0x08, 0x34, 0x61, 0xf6, 0xd5, 0x90, 0xfb, 0xef, 0xb8, - 0x20, 0x09, 0x36, 0x51, 0x0d, 0x7e, 0x14, 0x12, 0x05, 0xd6, 0x19, 0xc7, 0x86, 0x02, 0xee, 0x82, - 0xa0, 0x82, 0x1e, 0xc6, 0x0f, 0xd8, 0x84, 0x47, 0x07, 0xdd, 0xdc, 0xe4, 0x1a, 0x50, 0xe1, 0x14, - 0x11, 0x22, 0x5f, 0x44, 0xaf, 0xa1, 0x19, 0x7d, 0x60, 0xf8, 0x22, 0xaa, 0xbb, 0xcb, 0xe5, 0x16, - 0x95, 0x24, 0xbc, 0x25, 0xd2, 0x4b, 0x69, 0xaf, 0x1d, 0x69, 0xa4, 0x92, 0x69, 0xa4, 0xad, 0x34, - 0x93, 0x3f, 0x08, 0xda, 0x6b, 0x69, 0xad, 0xa6, 0xbf, 0x13, 0xd2, 0x4b, 0x49, 0x2f, 0x08, 0xda, - 0x6b, 0x69, 0xad, 0xa6, 0xb1, 0x1d, 0x08, 0xc4, 0x3d, 0x1d, 0xcb, 0xe0, 0x87, 0x9e, 0x87, 0xa3, - 0x5f, 0x57, 0x1e, 0xf9, 0xe8, 0x7a, 0x3e, 0x49, 0x88, 0x5e, 0x55, 0x5e, 0x8c, 0xca, 0xec, 0xf9, - 0xe8, 0x7a, 0x3e, 0xa5, 0x4b, 0xeb, 0xdf, 0x46, 0xef, 0x82, 0xc3, 0x1e, 0xf5, 0x88, 0x41, 0xb5, - 0x4a, 0xb4, 0x24, 0x5d, 0xb4, 0x56, 0x7d, 0x83, 0x4d, 0xa6, 0x74, 0x14, 0x98, 0x90, 0x80, 0x50, - 0xc7, 0xb4, 0x74, 0xd1, 0x88, 0x1f, 0x13, 0x37, 0x1f, 0x01, 0xcd, 0xd8, 0x2c, 0x06, 0xbe, 0x83, - 0xc0, 0xf8, 0x77, 0x1d, 0x11, 0x00, 0xd6, 0x2a, 0xc3, 0xae, 0x09, 0xd5, 0x5f, 0x30, 0xa8, 0x50, - 0xf2, 0xd6, 0x81, 0xb1, 0xd2, 0xae, 0x11, 0x0a, 0x4b, 0x7e, 0x2c, 0x08, 0x83, 0x3c, 0x1e, 0xad, - 0x58, 0xd4, 0xd6, 0x02, 0x22, 0x32, 0xc6, 0xfe, 0x78, 0xf7, 0xf6, 0x79, 0x72, 0x8e, 0xbe, 0x0a, - 0x02, 0x76, 0x4c, 0x06, 0xae, 0xe5, 0x51, 0xa4, 0x0f, 0x04, 0x5e, 0x7a, 0x15, 0x15, 0x79, 0x02, - 0xcb, 0xdf, 0x89, 0x04, 0x22, 0xce, 0x18, 0x0d, 0xb4, 0x30, 0x1e, 0x2f, 0x12, 0x0b, 0x0a, 0x2e, - 0xa1, 0x5a, 0x63, 0x64, 0x88, 0x3b, 0x48, 0x20, 0xad, 0x2c, 0x22, 0x54, 0x18, 0x58, 0xec, 0xc4, - 0x10, 0x0e, 0x0c, 0x5e, 0x6a, 0xd5, 0xa6, 0x1e, 0x0a, 0xc5, 0x41, 0x2c, 0xe6, 0x07, 0xaf, 0x02, - 0x81, 0x7a, 0xb1, 0x19, 0x7a, 0x60, 0x77, 0xa2, 0xc8, 0x0c, 0x83, 0xb0, 0x8a, 0x01, 0xd4, 0x20, - 0x17, 0x67, 0x71, 0x22, 0x06, 0x5c, 0x32, 0xc5, 0x84, 0x8c, 0x3e, 0x0e, 0xd1, 0x32, 0x7b, 0xb4, - 0x4f, 0xdc, 0x83, 0x1b, 0xb1, 0x6f, 0xaa, 0xd4, 0x0b, 0xb0, 0x5e, 0x0d, 0xb3, 0x10, 0xc4, 0xe6, - 0x6d, 0x56, 0x57, 0x45, 0x34, 0x22, 0x67, 0xe7, 0x58, 0xcb, 0xff, 0x88, 0x12, 0x14, 0x16, 0x0d, - 0x73, 0x90, 0x2a, 0xef, 0x56, 0xde, 0x6d, 0xa9, 0x6e, 0xa6, 0x97, 0xed, 0x2c, 0xb6, 0xee, 0xe9, - 0xd7, 0x12, 0x84, 0x91, 0x3e, 0xa3, 0xb7, 0xd0, 0x8a, 0xfa, 0xf7, 0xd7, 0x0a, 0xe8, 0xee, 0x8f, - 0xe8, 0xec, 0x5f, 0x44, 0x72, 0x5e, 0x5f, 0x3b, 0x04, 0xe8, 0x93, 0x3e, 0x8e, 0x74, 0xbe, 0xa7, - 0x49, 0x3a, 0x25, 0x7d, 0x4b, 0x71, 0x10, 0xa0, 0x85, 0xad, 0x88, 0x8a, 0x0e, 0x43, 0xa8, 0x72, - 0x20, 0xd9, 0x76, 0x35, 0xa5, 0xa6, 0x40, 0x6b, 0xa6, 0x32, 0x03, 0xb3, 0xe3, 0x4c, 0xf0, 0x26, - 0x29, 0xd4, 0x83, 0x84, 0x60, 0x96, 0xfb, 0x2d, 0xb8, 0xac, 0xf1, 0xc7, 0xc3, 0x79, 0x5d, 0xbb, - 0xbf, 0x7c, 0xd0, 0x6c, 0xf0, 0xa5, 0xe1, 0x42, 0x13, 0x39, 0x26, 0xa7, 0xc4, 0xe2, 0x89, 0xd0, - 0x10, 0xec, 0xc3, 0x63, 0x1e, 0x22, 0x64, 0x80, 0x3e, 0x07, 0xec, 0xf8, 0xe1, 0x61, 0xf1, 0x5e, - 0xcc, 0x85, 0x62, 0xf3, 0x6c, 0xb6, 0x52, 0xf8, 0x28, 0x96, 0x18, 0x2c, 0x8a, 0x98, 0x3a, 0xd0, - 0xc5, 0x78, 0x74, 0xb0, 0x4f, 0x0a, 0x6f, 0x14, 0x33, 0x3c, 0xbe, 0x0b, 0x31, 0xaa, 0x30, 0x24, - 0x65, 0x50, 0x5f, 0x93, 0x0c, 0x44, 0x24, 0xa8, 0x0b, 0xcb, 0x82, 0x9c, 0x74, 0xce, 0xa6, 0x1e, - 0x58, 0xbc, 0x8a, 0x17, 0x12, 0x20, 0x5e, 0x9b, 0x63, 0xa5, 0x05, 0x44, 0x9c, 0x9b, 0xf5, 0x99, - 0xe3, 0x0b, 0x13, 0x17, 0x31, 0x8a, 0x6b, 0x33, 0x2d, 0x9b, 0x42, 0xa9, 0x0b, 0x80, 0xf1, 0x10, - 0x52, 0x52, 0x8f, 0x78, 0xf3, 0x66, 0xb0, 0x8e, 0xcf, 0x14, 0xe7, 0x33, 0xd8, 0x2a, 0x6f, 0x8c, - 0xed, 0x57, 0x4e, 0xbb, 0x52, 0xef, 0xee, 0xdf, 0xff, 0x10, 0x5e, 0xda, 0x6a, 0xcd, 0xdc, 0xf9, - 0x7c, 0x4a, 0x1e, 0x42, 0xae, 0x84, 0x57, 0xd1, 0xc8, 0x9f, 0x5c, 0x25, 0xe4, 0xf3, 0xd1, 0x75, - 0xef, 0xab, 0xc2, 0x9c, 0x10, 0xcf, 0x43, 0xd3, 0xea, 0xeb, 0x15, 0xf1, 0xf3, 0xd0, 0xf4, 0xcf, - 0x4d, 0x73, 0xd1, 0x9f, 0xa2, 0x15, 0x3e, 0xa7, 0x4b, 0xeb, 0x87, 0xca, 0x31, 0x26, 0xcc, 0xdf, - 0x13, 0x08, 0x90, 0xb9, 0x78, 0x10, 0x16, 0x3d, 0xbb, 0x03, 0x14, 0x62, 0xb2, 0xff, 0xf8, 0xfd, - 0x8a, 0xd5, 0x5a, 0xda, 0xbd, 0xbf, 0x18, 0x50, 0x6f, 0x19, 0x04, 0x63, 0xcc, 0xb2, 0x53, 0xd6, - 0x54, 0xd5, 0xf0, 0x1a, 0x01, 0xf9, 0x9d, 0x8b, 0x7d, 0x54, 0x43, 0x7d, 0xf6, 0x6e, 0xa5, 0xe8, - 0x88, 0xff, 0x05, 0xb5, 0x75, 0xcb, 0xb0, 0xbd, 0x54, 0x6b, 0x29, 0xe7, 0xf8, 0x2a, 0xf4, 0x95, - 0x49, 0xa7, 0x9e, 0x77, 0xac, 0xd0, 0xee, 0x36, 0x34, 0x8d, 0xd9, 0xfb, 0xe1, 0x42, 0x32, 0x0c, - 0x44, 0xec, 0x7a, 0x87, 0x72, 0x41, 0x52, 0xb1, 0x88, 0x12, 0x46, 0x42, 0xdd, 0x42, 0xb3, 0x87, - 0xa7, 0x00, 0x64, 0x0d, 0x6d, 0xce, 0xd5, 0x5a, 0x76, 0xcd, 0xc4, 0x09, 0x09, 0x72, 0xbe, 0x93, - 0x9f, 0x4b, 0x20, 0xdc, 0x40, 0x56, 0x50, 0x60, 0x2a, 0x0b, 0x89, 0x04, 0x21, 0x1d, 0x94, 0x3c, - 0xc7, 0x0c, 0xc2, 0xa8, 0x76, 0xae, 0xa9, 0xe2, 0x3a, 0x12, 0x3a, 0xbe, 0x8c, 0xd7, 0xd6, 0xa3, - 0x7a, 0xb4, 0x57, 0x53, 0x2c, 0xfa, 0x8e, 0xdf, 0x44, 0xca, 0xfa, 0x2a, 0x74, 0xf8, 0x50, 0x20, - 0xef, 0xc9, 0x01, 0xa3, 0x87, 0x22, 0x08, 0xf8, 0x92, 0x91, 0xa6, 0x8e, 0x04, 0xc3, 0xc2, 0x97, - 0x00, 0x58, 0x20, 0x85, 0x83, 0xc3, 0x2e, 0x00, 0x04, 0x48, 0x29, 0x24, 0x46, 0x8f, 0x60, 0x79, - 0xc6, 0x22, 0x20, 0x27, 0x3c, 0x6d, 0x8b, 0xf0, 0xc0, 0x51, 0x25, 0xac, 0xd9, 0xf0, 0xa0, 0x95, - 0x41, 0xbd, 0x84, 0xb2, 0x04, 0xd5, 0x42, 0xc0, 0xca, 0xf4, 0x71, 0x22, 0xa8, 0xc1, 0x82, 0xa8, - 0x7b, 0x8c, 0xa1, 0x7a, 0x14, 0x57, 0xd8, 0x35, 0x89, 0xff, 0xcf, 0x82, 0xb2, 0x30, 0xae, 0x86, - 0x38, 0x31, 0x4d, 0x78, 0xfe, 0x82, 0xf7, 0x7d, 0x7a, 0xb1, 0x06, 0xf3, 0x4f, 0x33, 0x03, 0x9c, - 0x78, 0x52, 0x0e, 0xae, 0x49, 0x03, 0x80, 0x22, 0x64, 0x15, 0xa3, 0x0f, 0x9e, 0x1d, 0xd2, 0x67, - 0x8b, 0x31, 0x92, 0x53, 0xa1, 0xe5, 0xf0, 0xa4, 0x97, 0xcc, 0x7e, 0xc6, 0x2b, 0x9b, 0x0d, 0x81, - 0x8c, 0xc4, 0xbc, 0x58, 0x7c, 0xcb, 0xad, 0x1d, 0xa3, 0x43, 0xd1, 0x84, 0xd8, 0xdb, 0xce, 0x8d, - 0x0e, 0x4a, 0xf8, 0x50, 0xae, 0x1c, 0x62, 0x1d, 0x74, 0x23, 0x7f, 0x81, 0x2a, 0x29, 0x38, 0x9a, - 0xe6, 0xc5, 0x86, 0x5c, 0xad, 0x06, 0x79, 0x89, 0xea, 0x4c, 0x0b, 0x89, 0xfc, 0x48, 0xf1, 0x51, - 0x07, 0x27, 0xd7, 0x6a, 0x49, 0x1a, 0x9e, 0xbc, 0xf1, 0x70, 0xf8, 0x9e, 0x28, 0x27, 0xb0, 0x6e, - 0x05, 0x9a, 0x24, 0x01, 0x08, 0x4f, 0x04, 0xc1, 0x1d, 0xc3, 0x31, 0x2e, 0x0d, 0x03, 0x1a, 0xe1, - 0x49, 0x0b, 0x03, 0x75, 0x17, 0x7d, 0x1e, 0x2f, 0x82, 0x7d, 0x85, 0x37, 0x60, 0xdd, 0xf1, 0xd9, - 0x7e, 0x19, 0x8c, 0x91, 0x26, 0x8a, 0x4a, 0x0d, 0x7b, 0x99, 0x88, 0xbd, 0xd9, 0x5f, 0x89, 0xea, - 0x99, 0x1f, 0xa8, 0xfa, 0xba, 0x21, 0x88, 0xe3, 0xf5, 0x4a, 0x86, 0xf4, 0x21, 0x88, 0x8e, 0x8b, - 0x57, 0xc5, 0x05, 0x95, 0x45, 0xd7, 0x21, 0x8a, 0x5e, 0x30, 0xa5, 0xf8, 0xb8, 0xbf, 0x55, 0x9e, - 0x8d, 0xd9, 0x4e, 0x6a, 0xe8, 0x06, 0x54, 0x3e, 0xcc, 0x82, 0x5f, 0x78, 0x46, 0xdd, 0x26, 0x61, - 0x7b, 0x25, 0xc5, 0x68, 0x6d, 0x93, 0x7d, 0x4a, 0xa7, 0x4e, 0x4d, 0xfd, 0xd6, 0x31, 0xed, 0xf6, - 0xbe, 0xaa, 0x20, 0x00, 0xa5, 0x8d, 0xe6, 0xb4, 0xbf, 0x8c, 0x2b, 0x74, 0x19, 0xbd, 0x77, 0x66, - 0xcb, 0x96, 0xbb, 0x77, 0xc4, 0x42, 0x36, 0xb5, 0xbc, 0xd9, 0xad, 0x7d, 0xe4, 0xc3, 0x05, 0x65, - 0x72, 0xca, 0x10, 0x0a, 0x65, 0x20, 0xc4, 0x6e, 0x87, 0x9d, 0x2f, 0xab, 0x80, 0x9f, 0x54, 0x89, - 0x74, 0x47, 0x93, 0xab, 0x45, 0x74, 0x5d, 0x7d, 0x11, 0xfe, 0x0b, 0x07, 0x30, 0x63, 0xd6, 0x6d, - 0xc5, 0x4d, 0x27, 0x4e, 0xda, 0x6b, 0xbe, 0x3c, 0x98, 0xe9, 0x8b, 0x61, 0x75, 0x65, 0xc7, 0x74, - 0x2b, 0x79, 0x72, 0x63, 0xa4, 0xe6, 0x6c, 0x39, 0x86, 0x89, 0x64, 0xaf, 0x13, 0xd3, 0x3f, 0x46, - 0x38, 0x26, 0x1a, 0x91, 0xb8, 0x4a, 0xe4, 0xb8, 0xac, 0x08, 0xd5, 0x6e, 0x00, 0x1d, 0x55, 0xdd, - 0x89, 0x5c, 0x37, 0x1e, 0xb6, 0xc7, 0x60, 0xb1, 0x4b, 0xf1, 0xc7, 0x20, 0x93, 0xf0, 0x70, 0xef, - 0xee, 0xac, 0xe9, 0xa6, 0x10, 0x60, 0xef, 0x93, 0x1b, 0x38, 0x7e, 0x24, 0xe3, 0x86, 0x24, 0x93, - 0x93, 0x91, 0x46, 0xe0, 0xfa, 0xaf, 0xcb, 0xd7, 0xab, 0xa1, 0x79, 0x45, 0xf4, 0x54, 0xb0, 0xff, - 0x43, 0xdc, 0xfa, 0x08, 0x7f, 0xc4, 0x82, 0xc1, 0x48, 0xc7, 0x5f, 0xac, 0xb9, 0x26, 0xf4, 0x6b, - 0xdb, 0x28, 0xfb, 0xfd, 0x7f, 0xf1, 0xe4, 0xb6, 0xb7, 0xe3, 0x7a, 0x7b, 0xdf, 0xec, 0x43, 0x73, - 0xaa, 0xe4, 0x3b, 0x62, 0x8a, 0x3e, 0x2b, 0x8c, 0xf1, 0x97, 0xa8, 0x48, 0xcd, 0x99, 0xd3, 0x56, - 0x75, 0x7a, 0x50, 0x5d, 0x19, 0xc6, 0x0b, 0x55, 0x7b, 0x2d, 0x8f, 0x9e, 0x3e, 0x8b, 0x17, 0xc1, - 0x38, 0xa8, 0x88, 0x60, 0x29, 0x4a, 0xad, 0x83, 0xef, 0x84, 0x08, 0x46, 0x58, 0xcb, 0xc7, 0xb2, - 0x53, 0x8c, 0x25, 0xd2, 0x79, 0x25, 0x21, 0x57, 0xbd, 0x04, 0xd3, 0x20, 0xaf, 0x44, 0xaf, 0xae, - 0x51, 0x11, 0x13, 0x5e, 0xf1, 0x7d, 0x58, 0x78, 0x27, 0x23, 0x63, 0x85, 0xc2, 0xd3, 0x82, 0x00, - 0xd4, 0x24, 0x6b, 0x9a, 0x68, 0xc7, 0xe3, 0xf2, 0xc1, 0xc9, 0xb0, 0xd4, 0x35, 0x1d, 0x49, 0x46, - 0x3a, 0x6a, 0xb4, 0x3e, 0x24, 0x59, 0x2f, 0x76, 0x8d, 0x08, 0xc2, 0xf9, 0x8c, 0xef, 0xf8, 0x4e, - 0xb5, 0x94, 0xc5, 0xd8, 0xfe, 0x08, 0xc5, 0xde, 0xef, 0x27, 0x45, 0x67, 0xc9, 0x6d, 0xaf, 0xc6, - 0x0a, 0x5d, 0x49, 0xce, 0x75, 0x47, 0x9b, 0x7d, 0x8e, 0x6e, 0xde, 0x50, 0xc0, 0xd4, 0xf0, 0x40, - 0x1f, 0x08, 0x11, 0x99, 0x17, 0x56, 0x51, 0x94, 0xf5, 0x52, 0x7f, 0x04, 0x61, 0x5b, 0xba, 0xd8, - 0xfa, 0x2f, 0x42, 0x9d, 0x08, 0xca, 0x13, 0xe1, 0x81, 0x19, 0x60, 0x6c, 0x1a, 0xca, 0x91, 0xf6, - 0x0e, 0x07, 0x16, 0x5a, 0xb6, 0xd3, 0x7f, 0xe2, 0xef, 0xb7, 0xaa, 0xaf, 0x82, 0x1c, 0x56, 0x4e, - 0xde, 0xdf, 0x09, 0x73, 0x2c, 0x51, 0xd2, 0x49, 0x76, 0x48, 0xe0, 0xc2, 0x23, 0x0a, 0xae, 0xf9, - 0x45, 0xb4, 0xb6, 0x0d, 0x75, 0x7f, 0xa3, 0xc4, 0xe1, 0xe6, 0x8a, 0xc5, 0x65, 0x62, 0xf8, 0x84, - 0x46, 0x3c, 0x49, 0x04, 0x0f, 0x90, 0x7b, 0x4b, 0xc1, 0x55, 0x98, 0x77, 0x39, 0x80, 0xcb, 0xce, - 0x08, 0x80, 0x87, 0x6a, 0x4b, 0xb2, 0x58, 0xb7, 0xf8, 0x40, 0x44, 0xb4, 0xda, 0xaa, 0xe2, 0x30, - 0x17, 0x31, 0x8c, 0xf9, 0x44, 0xac, 0x48, 0x70, 0x5c, 0x35, 0xd0, 0xb4, 0xeb, 0xd1, 0x53, 0xa5, - 0xd1, 0x2a, 0xfa, 0x23, 0x49, 0xc1, 0x11, 0x6a, 0xee, 0xca, 0xe0, 0xb0, 0x67, 0x23, 0x19, 0x18, - 0x53, 0xa9, 0x66, 0x17, 0xce, 0x3f, 0x12, 0x0a, 0x48, 0x5e, 0x7a, 0x30, 0x4e, 0x72, 0xe9, 0x69, - 0x29, 0x6d, 0x8f, 0xef, 0x12, 0x63, 0xb4, 0xd5, 0x57, 0x5f, 0xd7, 0x19, 0x15, 0x73, 0xc0, 0x62, - 0x86, 0x63, 0xa8, 0x17, 0x68, 0x42, 0x75, 0x92, 0x7c, 0x16, 0x65, 0xb0, 0x54, 0x9f, 0x3f, 0x47, - 0xe9, 0x3a, 0x2a, 0x65, 0xea, 0xff, 0x57, 0xf8, 0x25, 0x22, 0x21, 0x98, 0xcf, 0x4d, 0x12, 0xdf, - 0xe0, 0x9c, 0x83, 0xd2, 0x17, 0xcb, 0x1d, 0x6c, 0xf3, 0xfc, 0x24, 0x29, 0x75, 0xad, 0x71, 0x11, - 0x77, 0xbb, 0x95, 0x8d, 0x8c, 0xa8, 0xee, 0x87, 0xb1, 0x5d, 0x1b, 0xa2, 0xfa, 0x3f, 0x4f, 0xd1, - 0x4a, 0x9f, 0x30, 0x8d, 0xdd, 0x71, 0x04, 0x35, 0x19, 0x8b, 0x3a, 0x64, 0xee, 0x53, 0xe1, 0x08, - 0x6d, 0xcf, 0x42, 0xd1, 0xa3, 0x46, 0x64, 0xe3, 0x27, 0x7b, 0x6f, 0x88, 0xfb, 0xaa, 0xaa, 0xf9, - 0x48, 0x96, 0xbe, 0x32, 0x12, 0x11, 0xe2, 0x27, 0x01, 0xa9, 0x08, 0x24, 0x4c, 0xea, 0x62, 0x9a, - 0x96, 0xdf, 0xe1, 0x22, 0x81, 0x7a, 0xbb, 0xbd, 0xbb, 0x31, 0xaa, 0x3f, 0x19, 0xfb, 0x71, 0xf1, - 0xca, 0x4b, 0x33, 0xfb, 0x7b, 0xbb, 0xfe, 0x6b, 0xd6, 0xba, 0x1e, 0xd5, 0xd5, 0xbe, 0xaf, 0xf0, - 0x43, 0x12, 0xe0, 0x96, 0x0f, 0x6f, 0x71, 0x10, 0x4b, 0x96, 0x9a, 0x4d, 0xca, 0xde, 0x75, 0x89, - 0x82, 0x22, 0x21, 0xed, 0x26, 0xff, 0x05, 0x42, 0x94, 0xd4, 0x7f, 0x9b, 0x26, 0xfb, 0x9f, 0x2d, - 0x69, 0x28, 0x5b, 0xa3, 0xb7, 0xd5, 0xa7, 0xe8, 0xbd, 0x5d, 0x5f, 0xe6, 0x35, 0x55, 0x78, 0x95, - 0xcb, 0xc4, 0x12, 0xf2, 0xd3, 0xe1, 0x48, 0x97, 0xab, 0xe2, 0xf7, 0xc5, 0x94, 0x67, 0x2f, 0xc5, - 0x6f, 0xe1, 0x76, 0x95, 0xca, 0x62, 0x3e, 0x34, 0xb5, 0xc9, 0xbb, 0xdf, 0x13, 0x7b, 0xbc, 0xfd, - 0xff, 0x2d, 0xcb, 0xe8, 0x0b, 0xd0, 0xb7, 0xe2, 0x60, 0xa0, 0x8f, 0x9b, 0xd3, 0x20, 0x40, 0x1d, - 0x1d, 0xfa, 0xbf, 0xd1, 0x7f, 0x5d, 0x16, 0xd5, 0xd1, 0x9e, 0xb8, 0x27, 0xde, 0xe5, 0xce, 0xd3, - 0xf1, 0x10, 0x51, 0x67, 0x76, 0xb9, 0x7b, 0x3e, 0x41, 0x43, 0xc8, 0x8e, 0x21, 0x65, 0x27, 0xc3, - 0xfb, 0x00, 0x85, 0xab, 0x9e, 0x58, 0x11, 0xf1, 0x07, 0x30, 0xd9, 0x08, 0x1b, 0x18, 0xa5, 0x9d, - 0x5f, 0xc3, 0x5d, 0x0b, 0xef, 0xac, 0x57, 0xd6, 0xbe, 0x09, 0x0c, 0xb5, 0x8e, 0xfa, 0xe5, 0xcd, - 0x4f, 0xc9, 0x9a, 0x0b, 0xf8, 0x52, 0x4e, 0x0d, 0x1f, 0xcf, 0x05, 0x8b, 0x95, 0x52, 0x71, 0x20, - 0xfb, 0x0b, 0x89, 0x87, 0xf5, 0xe5, 0x93, 0xd7, 0x05, 0x55, 0xd6, 0x21, 0xf1, 0x59, 0xf0, 0x77, - 0xc2, 0x22, 0xfd, 0xf0, 0x99, 0x18, 0x1d, 0xce, 0x2e, 0xf5, 0x40, 0xfc, 0x57, 0x76, 0xde, 0xef, - 0xe8, 0xfd, 0xf1, 0xc7, 0x71, 0x5b, 0x8a, 0xca, 0x20, 0x22, 0xbb, 0x15, 0x8b, 0x8b, 0xaa, 0xfa, - 0xbf, 0xd1, 0x1f, 0xea, 0x3f, 0xfc, 0x12, 0x5c, 0x56, 0xef, 0xdf, 0x5a, 0xf8, 0x24, 0x12, 0xef, - 0x9d, 0x2a, 0x26, 0x30, 0x55, 0x6b, 0x55, 0x9f, 0xef, 0x55, 0x52, 0x28, 0xf1, 0x5a, 0xd5, 0xdf, - 0xf4, 0x57, 0xe2, 0x44, 0xaf, 0xf8, 0x88, 0x2c, 0xa9, 0x0e, 0x47, 0x92, 0x2d, 0x0b, 0x44, 0xdc, - 0x0e, 0x78, 0x35, 0x70, 0xd8, 0xc1, 0x3e, 0xb5, 0x1a, 0x82, 0x9c, 0xdd, 0x17, 0xae, 0x8e, 0xf3, - 0xf4, 0x5e, 0x9f, 0xa2, 0x74, 0x5f, 0x57, 0xae, 0xbd, 0xf0, 0x4d, 0x69, 0xa4, 0x92, 0x55, 0x99, - 0x47, 0x71, 0x31, 0x85, 0x15, 0x97, 0x37, 0x7c, 0xbf, 0x4c, 0xe7, 0x19, 0x47, 0xe2, 0x6b, 0x06, - 0x21, 0x03, 0x3f, 0x74, 0x3e, 0x71, 0x82, 0xf7, 0x71, 0x5f, 0x08, 0xfd, 0x5e, 0x5e, 0x09, 0x04, - 0xbb, 0xfd, 0xf0, 0x43, 0x7b, 0xbb, 0xfc, 0x24, 0x47, 0x43, 0x77, 0x77, 0x77, 0xf5, 0xef, 0xa2, - 0xbf, 0xc1, 0x08, 0x9b, 0xdd, 0x9c, 0x4d, 0x11, 0xfe, 0x41, 0x8b, 0xad, 0x70, 0x4a, 0x25, 0xa6, - 0x8a, 0x41, 0x89, 0x1e, 0xbf, 0xf9, 0x8b, 0x99, 0xe3, 0x6f, 0xaf, 0x04, 0x33, 0x9b, 0xce, 0x6c, - 0xc6, 0xf9, 0x3e, 0x08, 0xc8, 0x5b, 0x6b, 0xaf, 0x82, 0xf2, 0x13, 0x14, 0xd7, 0x11, 0xdc, 0xcc, - 0xb7, 0x8e, 0x96, 0x1b, 0x8f, 0xff, 0x82, 0x42, 0x6a, 0xfd, 0x11, 0xd1, 0x5e, 0x14, 0xc4, 0x8d, - 0x36, 0xab, 0x0a, 0x47, 0xd0, 0x51, 0x4d, 0x67, 0x2b, 0x1b, 0x56, 0x0d, 0xb1, 0x90, 0xd2, 0xba, - 0xc4, 0xab, 0x0c, 0x3d, 0xa5, 0xeb, 0x12, 0x09, 0xc5, 0x94, 0xd5, 0x66, 0x37, 0x20, 0x83, 0xd7, - 0xd9, 0x97, 0x6f, 0x88, 0x31, 0xa8, 0x04, 0xd9, 0x3f, 0x08, 0x02, 0x83, 0xa0, 0xed, 0xf3, 0x30, - 0xb5, 0xbf, 0xde, 0xaa, 0xbe, 0x4f, 0x37, 0xe2, 0x4b, 0x77, 0x71, 0x5f, 0x82, 0x4b, 0xbb, 0x9e, - 0x15, 0x5d, 0x7b, 0xe0, 0x9c, 0xe7, 0x83, 0xbd, 0xf7, 0xff, 0xc1, 0x39, 0x2f, 0x77, 0x77, 0x7e, - 0xf8, 0x21, 0x3b, 0x96, 0x05, 0x0c, 0x06, 0xf2, 0xf8, 0x21, 0xaa, 0xaa, 0xe5, 0x5c, 0x26, 0x5d, - 0xdd, 0xdf, 0xc4, 0x41, 0x09, 0x1d, 0xb5, 0xbd, 0xc4, 0x42, 0x84, 0xa9, 0x46, 0x3a, 0x27, 0xa3, - 0x20, 0x40, 0x19, 0xc6, 0x1c, 0x80, 0x02, 0xbf, 0x71, 0x1f, 0x98, 0xa7, 0xbc, 0x84, 0xbc, 0x23, - 0x43, 0x36, 0x4c, 0xaa, 0x92, 0xde, 0xdc, 0x7f, 0xde, 0xbd, 0xe2, 0x45, 0x0a, 0x34, 0xe6, 0x78, - 0x4a, 0xc4, 0x9f, 0xcb, 0x5c, 0xaf, 0xa3, 0xea, 0x6e, 0xad, 0xf5, 0x69, 0x3a, 0xb5, 0x74, 0x47, - 0x9f, 0xab, 0x4d, 0xc1, 0x3d, 0xc2, 0x07, 0x2a, 0x86, 0x46, 0x8f, 0x8e, 0xd7, 0x89, 0xfa, 0xf7, - 0x88, 0x0a, 0x6e, 0x45, 0x2f, 0x61, 0x72, 0xa5, 0x85, 0x67, 0x43, 0x48, 0xcc, 0x44, 0xf5, 0x1b, - 0x12, 0xf1, 0x47, 0xbb, 0xdd, 0xdd, 0xf8, 0x94, 0x47, 0xf8, 0xc2, 0xf2, 0xc8, 0x6c, 0xcb, 0x76, - 0x84, 0xae, 0xe4, 0xa0, 0xc6, 0xa6, 0xb5, 0x19, 0x60, 0x55, 0x14, 0xf8, 0x9f, 0xbb, 0xbb, 0xba, - 0xee, 0x56, 0x1f, 0x5d, 0x13, 0xbe, 0x08, 0x6e, 0xe8, 0x3f, 0x78, 0x90, 0x89, 0x5a, 0xb9, 0x95, - 0x38, 0xae, 0xdb, 0x03, 0x5f, 0x91, 0x88, 0x35, 0xe2, 0x6b, 0xde, 0x24, 0x44, 0x69, 0x59, 0x95, - 0x55, 0x68, 0xa6, 0xa0, 0xf1, 0x22, 0x55, 0xf8, 0x91, 0x28, 0xb5, 0xf0, 0x48, 0x4a, 0xd9, 0x65, - 0x5c, 0x82, 0x96, 0xbf, 0x04, 0x65, 0x18, 0x31, 0xf8, 0x23, 0x7a, 0x2b, 0xc6, 0x71, 0x42, 0x29, - 0xb7, 0x72, 0xa4, 0x7a, 0xf8, 0x90, 0x91, 0xde, 0xce, 0xda, 0xfc, 0x4a, 0xd7, 0x88, 0x57, 0xf8, - 0x2b, 0xee, 0x21, 0x83, 0x1c, 0xa9, 0x35, 0x59, 0xf6, 0xf8, 0x28, 0x92, 0x8a, 0xb9, 0x32, 0xf9, - 0xbc, 0x40, 0x4c, 0x43, 0x4f, 0xad, 0x57, 0xc5, 0x09, 0x22, 0x9a, 0x1d, 0x27, 0xfc, 0x23, 0x71, - 0x90, 0xd0, 0x2f, 0x3c, 0x77, 0xdd, 0x6d, 0xf1, 0x3e, 0x25, 0x7f, 0xf0, 0x47, 0xd5, 0x7b, 0xc4, - 0x05, 0x0a, 0xe7, 0xee, 0xf3, 0x2f, 0xd3, 0xd0, 0xcc, 0x41, 0x62, 0x5d, 0x26, 0x7d, 0x5f, 0xe2, - 0x2a, 0x2f, 0x6d, 0xee, 0xfe, 0xaf, 0xf5, 0x7f, 0xac, 0xab, 0x8a, 0x33, 0xdd, 0xdd, 0xdf, 0xe8, - 0xaf, 0xe2, 0x44, 0xd1, 0xbf, 0x26, 0xb0, 0xaf, 0x88, 0x04, 0x39, 0xf1, 0xf6, 0x2a, 0x20, 0x40, - 0x23, 0x3b, 0x4c, 0x9a, 0xc5, 0xc4, 0xd9, 0x37, 0x45, 0xc4, 0x57, 0x35, 0xc6, 0x95, 0xaf, 0xc1, - 0x38, 0xa6, 0xe9, 0xa0, 0x6a, 0xab, 0xef, 0x87, 0xca, 0x30, 0x00, 0x9e, 0xe9, 0x36, 0x37, 0x73, - 0x38, 0x5a, 0xda, 0x5a, 0x87, 0xba, 0x8b, 0x6e, 0x7e, 0x2f, 0xab, 0xd7, 0x57, 0x9b, 0xab, 0xd7, - 0x45, 0x7b, 0xe1, 0x21, 0x4f, 0xb4, 0x78, 0x32, 0x7f, 0x10, 0x41, 0x23, 0x43, 0x27, 0x1f, 0x89, - 0x04, 0x65, 0x49, 0xb7, 0x7c, 0xaf, 0x98, 0x9a, 0xaf, 0x82, 0xc2, 0x0a, 0xdb, 0x77, 0xdb, 0x59, - 0x71, 0xfb, 0x7c, 0x5d, 0xf7, 0x55, 0x5f, 0x12, 0x09, 0xc4, 0xb2, 0x48, 0xc1, 0xcf, 0x6d, 0x5f, - 0xe3, 0x4f, 0x54, 0xbc, 0x94, 0x95, 0xef, 0x13, 0xb8, 0x40, 0x48, 0x20, 0x39, 0x01, 0x3e, 0xb7, - 0xff, 0x82, 0x52, 0x39, 0x45, 0xb8, 0xd8, 0x00, 0x6f, 0xff, 0xec, 0x89, 0xaa, 0x0b, 0xe8, 0xb6, - 0xf1, 0x20, 0x96, 0xce, 0xc6, 0xd4, 0x79, 0xc1, 0x66, 0x3f, 0xc1, 0x25, 0x3a, 0x63, 0xed, 0x3d, - 0xf0, 0x4d, 0x3f, 0x9a, 0x95, 0x17, 0x91, 0x78, 0xff, 0x44, 0xef, 0x92, 0xaa, 0xaa, 0xba, 0x2b, - 0xbc, 0x48, 0xcb, 0x43, 0xa3, 0x0c, 0xd9, 0xca, 0xa0, 0x6c, 0x0e, 0x21, 0xc3, 0xca, 0x00, 0x96, - 0x03, 0x82, 0xe2, 0x0b, 0x51, 0xb0, 0x8f, 0x10, 0xe3, 0x30, 0x9e, 0x36, 0xfc, 0x29, 0x41, 0x30, - 0x45, 0x22, 0xb0, 0xd8, 0x58, 0x05, 0x11, 0x91, 0x59, 0x92, 0xa1, 0xd9, 0x92, 0x66, 0xca, 0xd6, - 0xcf, 0x97, 0xc1, 0x4d, 0x71, 0xba, 0x03, 0x88, 0x60, 0x72, 0x1b, 0x18, 0x74, 0x22, 0xcd, 0x60, - 0x1d, 0x1d, 0x78, 0x90, 0x85, 0x83, 0x24, 0x26, 0x84, 0xa6, 0x49, 0x60, 0xe3, 0x85, 0xc3, 0xf8, - 0x85, 0xd7, 0xc1, 0x15, 0x55, 0x56, 0x2f, 0xad, 0x7c, 0x4c, 0x7d, 0x8f, 0xb6, 0x5c, 0xb7, 0x7f, - 0x1e, 0x68, 0xf3, 0x1b, 0xf6, 0x72, 0xaa, 0xb5, 0xf0, 0xf9, 0x13, 0x23, 0xaf, 0x75, 0x4d, 0x47, - 0x8c, 0x17, 0x59, 0xab, 0xb8, 0xdd, 0x38, 0x2c, 0xda, 0x3c, 0x6f, 0xfd, 0x1f, 0xa2, 0x7a, 0xbc, - 0x6f, 0x08, 0x8c, 0x72, 0xc1, 0xfb, 0xbb, 0xba, 0xba, 0xf1, 0x21, 0x32, 0x98, 0x78, 0x85, 0x75, - 0x7d, 0xdd, 0xf8, 0x84, 0x76, 0x7c, 0x45, 0x55, 0x64, 0xf5, 0xfa, 0x3f, 0x7d, 0x7a, 0xb8, 0x2a, - 0xa4, 0x42, 0x5a, 0x86, 0xc2, 0x42, 0x89, 0x97, 0xbd, 0x9e, 0xaa, 0x24, 0x40, 0xbb, 0xb6, 0xb5, - 0x60, 0xd4, 0x8c, 0x78, 0x52, 0x64, 0x75, 0xca, 0xc2, 0xce, 0xa2, 0x73, 0x6b, 0xdd, 0x0d, 0x88, - 0x74, 0x68, 0xea, 0xee, 0x26, 0x14, 0x24, 0xb8, 0x9d, 0x77, 0x9d, 0x8c, 0x55, 0xc4, 0xb1, 0x4e, - 0x8e, 0xf2, 0xf8, 0x22, 0xcb, 0x14, 0x9a, 0xa5, 0xdc, 0x4c, 0x10, 0x95, 0xed, 0x50, 0xad, 0xf0, - 0x49, 0x6d, 0x1c, 0xd1, 0x22, 0xf8, 0x98, 0x47, 0x83, 0x22, 0x8c, 0xda, 0xd6, 0x81, 0x4c, 0xe9, - 0x7c, 0x49, 0x0c, 0x93, 0xfe, 0x08, 0x4a, 0xce, 0xb6, 0xfb, 0x32, 0xd4, 0xd9, 0xe0, 0x84, 0xaf, - 0x77, 0xaf, 0x82, 0x1a, 0xd7, 0xdf, 0x19, 0x19, 0x95, 0xd7, 0x37, 0xe9, 0x34, 0xd6, 0x9b, 0x6c, - 0x55, 0xd5, 0xab, 0x8e, 0xd2, 0x44, 0xc8, 0xf9, 0xb7, 0xb4, 0xbe, 0x27, 0xeb, 0x87, 0x11, 0x04, - 0x67, 0x49, 0x1a, 0x73, 0x83, 0xeb, 0xdf, 0x05, 0x76, 0x51, 0x96, 0x8d, 0x94, 0xaa, 0x3c, 0xbc, - 0x7e, 0xc3, 0x57, 0x28, 0xc7, 0x92, 0x22, 0x58, 0x7a, 0x3b, 0x95, 0xd5, 0xd0, 0x97, 0x30, 0xa4, - 0x19, 0x60, 0x2b, 0xa1, 0x78, 0xd2, 0x84, 0x6b, 0x75, 0x42, 0x54, 0x6c, 0xa3, 0x70, 0x3f, 0x61, - 0x06, 0x7b, 0xb3, 0xd5, 0x6a, 0x2e, 0x77, 0xca, 0x41, 0x9e, 0xbf, 0x5d, 0x17, 0xab, 0xb2, 0xbb, - 0xdf, 0xcb, 0x6d, 0x3b, 0x5e, 0x89, 0x33, 0xea, 0xff, 0x05, 0xb2, 0x60, 0xc7, 0xb2, 0x9e, 0x9f, - 0x7c, 0x97, 0xbb, 0xf8, 0x4a, 0xc0, 0xdd, 0xdd, 0xe2, 0xb7, 0xe2, 0x01, 0x5d, 0x58, 0xcf, 0xaa, - 0xcf, 0xb3, 0x30, 0xdf, 0x1e, 0x53, 0x7a, 0xcb, 0xce, 0xc1, 0x7e, 0x9b, 0x40, 0xce, 0xbf, 0x10, - 0xaf, 0xc4, 0xc1, 0x47, 0x9b, 0x33, 0x65, 0xfe, 0x09, 0xe9, 0xa6, 0x9b, 0x05, 0x5a, 0xbf, 0x89, - 0x04, 0xd3, 0x6b, 0xd0, 0x0f, 0x4d, 0xb6, 0x7c, 0x51, 0xb7, 0x77, 0xdf, 0x89, 0x75, 0xd3, 0xf3, - 0x1c, 0xff, 0x5f, 0x5e, 0xf8, 0x50, 0xac, 0xd8, 0x9b, 0x0d, 0xe3, 0x84, 0x49, 0xd6, 0x86, 0x9e, - 0x99, 0x99, 0xb4, 0x71, 0x8d, 0x6f, 0xf0, 0x59, 0x55, 0x47, 0x8d, 0x8c, 0x66, 0xa7, 0x9a, 0x1c, - 0x7f, 0x82, 0x38, 0x97, 0x05, 0x62, 0xb1, 0x09, 0x07, 0x2f, 0x12, 0x3b, 0x21, 0x59, 0x86, 0x0d, - 0xa3, 0x07, 0xe0, 0x92, 0x95, 0x3f, 0xf0, 0x47, 0xdc, 0x68, 0x12, 0x1c, 0xf8, 0x21, 0x92, 0x9a, - 0x1b, 0xf8, 0x9f, 0x8b, 0xd0, 0xc9, 0x0a, 0xc5, 0xd4, 0x5c, 0xc1, 0x80, 0xf8, 0x21, 0x26, 0x48, - 0x6b, 0xc4, 0xa2, 0xd7, 0xc1, 0x55, 0xdd, 0xde, 0x8d, 0xf2, 0x51, 0x58, 0x4f, 0x2a, 0xe8, 0x43, - 0xc6, 0xf0, 0x58, 0x25, 0xd7, 0x5d, 0x50, 0xdf, 0x69, 0x39, 0xea, 0x92, 0x4d, 0x35, 0xeb, 0x8d, - 0xae, 0xa9, 0x56, 0x7a, 0x4b, 0x6b, 0x1a, 0xb2, 0x1a, 0x4b, 0x82, 0xb6, 0x1b, 0x20, 0xc5, 0x4b, - 0x2c, 0x18, 0xbe, 0x9f, 0x8a, 0xcb, 0x7e, 0x34, 0x40, 0x78, 0x6f, 0x04, 0x88, 0x2a, 0x0b, 0xf4, - 0xba, 0x22, 0x72, 0xba, 0xb2, 0x72, 0xc0, 0xa1, 0x48, 0x9b, 0xce, 0x8e, 0xcb, 0x49, 0x78, 0xf3, - 0x6a, 0x5e, 0x0e, 0xa4, 0xc1, 0xf3, 0xe5, 0x45, 0x0f, 0xfe, 0x14, 0x91, 0xcc, 0xc7, 0x42, 0x29, - 0x26, 0x0b, 0xcb, 0x3a, 0xa4, 0x66, 0x38, 0xbf, 0x3e, 0x09, 0x6a, 0xc7, 0x5d, 0x1a, 0xbf, 0xc1, - 0x48, 0x94, 0xd0, 0x46, 0xa2, 0x7f, 0x2d, 0x62, 0x61, 0xcc, 0x2b, 0x28, 0x93, 0x94, 0xb7, 0xc1, - 0x49, 0x97, 0x40, 0x64, 0xe4, 0xb6, 0x02, 0x80, 0x83, 0x88, 0x00, 0x73, 0x28, 0xe9, 0xdb, 0xe2, - 0xa3, 0x10, 0xac, 0x33, 0x04, 0xe5, 0x21, 0x89, 0x1a, 0xb4, 0xd8, 0xc0, 0xbd, 0x3f, 0x0a, 0x0d, - 0x37, 0x34, 0x70, 0x54, 0x4e, 0x00, 0x03, 0xd6, 0x8e, 0x48, 0x46, 0x6c, 0xc7, 0x1c, 0x33, 0x63, - 0x44, 0x20, 0xcc, 0xdd, 0xdd, 0x7c, 0xc9, 0xa6, 0x8d, 0xa9, 0x9b, 0x30, 0xf9, 0xa7, 0x00, 0x60, - 0x83, 0x22, 0xe2, 0x42, 0x86, 0x1e, 0x10, 0xd1, 0x39, 0x8e, 0x6a, 0x1b, 0x27, 0x99, 0xde, 0x81, - 0x91, 0x44, 0xa8, 0x6c, 0x92, 0xa7, 0xc2, 0x97, 0x72, 0x5f, 0x52, 0xd3, 0xcb, 0x37, 0x83, 0xc8, - 0x69, 0x83, 0x83, 0x9f, 0xe1, 0x4d, 0x82, 0x96, 0x8e, 0xf6, 0x88, 0x3e, 0xd6, 0x52, 0x2d, 0x1b, - 0x45, 0x10, 0x6a, 0xa5, 0x4d, 0xf0, 0x55, 0x44, 0x10, 0xfc, 0xea, 0xb8, 0x00, 0x17, 0x2b, 0xb2, - 0x2a, 0x35, 0x02, 0xec, 0x8a, 0xb0, 0x3b, 0xf0, 0xa5, 0x8d, 0x0c, 0x94, 0xa4, 0x76, 0x05, 0xdb, - 0x33, 0x26, 0x2e, 0x21, 0x2b, 0x10, 0x3b, 0x10, 0xe4, 0xab, 0x18, 0x93, 0x67, 0x5f, 0xc2, 0x98, - 0xe3, 0x93, 0x41, 0x00, 0xad, 0x88, 0x51, 0x44, 0x52, 0x30, 0x80, 0xb3, 0x34, 0x92, 0xfb, 0x85, - 0xb8, 0x0c, 0x34, 0xd7, 0x10, 0x0d, 0x50, 0xc4, 0x45, 0x46, 0xdd, 0x01, 0xc2, 0xe2, 0x60, 0x88, - 0x84, 0xa8, 0x41, 0x5c, 0x42, 0xf6, 0x60, 0xf7, 0xe2, 0x04, 0x85, 0x0b, 0x35, 0x10, 0xa0, 0x83, - 0x97, 0xb9, 0x60, 0xfb, 0x5d, 0x01, 0x97, 0x20, 0x22, 0xbd, 0xd2, 0x6c, 0x9e, 0xbb, 0x37, 0x7f, - 0x85, 0x30, 0xb2, 0xf4, 0x19, 0xc1, 0x32, 0x5c, 0x2a, 0xae, 0x5a, 0xb0, 0x55, 0x56, 0x8f, 0xdd, - 0xd8, 0xae, 0xcf, 0x52, 0x43, 0xaf, 0x82, 0xc2, 0x1d, 0x98, 0x9c, 0x43, 0x85, 0x5c, 0x7e, 0xaa, - 0x3a, 0x32, 0xdd, 0xf5, 0xe2, 0x41, 0x4e, 0xd1, 0xb2, 0x55, 0x57, 0x2b, 0xff, 0xc4, 0x0c, 0x12, - 0x2b, 0x3a, 0x87, 0xb9, 0x89, 0x34, 0xf8, 0xa0, 0x19, 0x52, 0x5a, 0xc6, 0x00, 0x05, 0x3d, 0x1a, - 0x1e, 0xf0, 0xa5, 0x8d, 0x68, 0xd0, 0xd9, 0x10, 0x00, 0x11, 0xe7, 0x0c, 0xb4, 0xc5, 0xc1, 0x8f, - 0x78, 0x20, 0x34, 0x0c, 0x25, 0xfe, 0xa5, 0xc2, 0x31, 0x57, 0xf0, 0xa4, 0x20, 0xfe, 0xb8, 0x56, - 0x3c, 0x78, 0x0a, 0x88, 0xd8, 0x48, 0x87, 0x08, 0xde, 0x72, 0x20, 0x3d, 0x2a, 0x5b, 0x4a, 0xcc, - 0x1f, 0x80, 0x70, 0x6c, 0x16, 0x5f, 0x0a, 0x57, 0x0e, 0x6b, 0x5d, 0x15, 0x3c, 0x31, 0x78, 0x00, - 0x09, 0x90, 0x37, 0x54, 0x96, 0xc4, 0x2d, 0xae, 0x0a, 0x8d, 0x4e, 0xc5, 0x69, 0x2c, 0x9b, 0x8b, - 0xe1, 0x49, 0x09, 0xe2, 0x3a, 0xe3, 0xe0, 0x0c, 0x90, 0x54, 0x5b, 0xb8, 0x7a, 0x8e, 0x00, 0xa8, - 0x0e, 0x80, 0x58, 0x86, 0x5a, 0x61, 0xdb, 0xfb, 0xc4, 0x8c, 0xb2, 0x03, 0x03, 0xe0, 0xb2, 0x0c, - 0xa3, 0xab, 0x7b, 0xce, 0x03, 0x5e, 0x10, 0x57, 0x06, 0x03, 0x33, 0x2e, 0x36, 0x55, 0x4b, 0x97, - 0x88, 0x0a, 0x78, 0x4c, 0xd5, 0x39, 0x67, 0xc6, 0x51, 0x2f, 0x3d, 0x1d, 0xfa, 0x1e, 0x50, 0x85, - 0x04, 0xc0, 0x4c, 0x00, 0x99, 0xb8, 0x60, 0x4b, 0xc0, 0x00, 0xb9, 0xe2, 0x02, 0x93, 0x1c, 0xad, - 0x80, 0xe6, 0x9c, 0x91, 0xb6, 0xde, 0x29, 0xc2, 0x19, 0x22, 0x0f, 0x0a, 0x5a, 0xa3, 0x69, 0xcf, - 0x10, 0x14, 0x98, 0x72, 0xba, 0x74, 0xa2, 0xbb, 0x34, 0x43, 0x80, 0xb6, 0x96, 0x27, 0x1c, 0x18, - 0x13, 0xa6, 0x30, 0x46, 0xe9, 0xbc, 0x25, 0x53, 0x98, 0x80, 0x15, 0x41, 0x36, 0x46, 0x2b, 0xc1, - 0x56, 0x03, 0x1e, 0x63, 0xaa, 0x56, 0x72, 0x6c, 0xe9, 0x91, 0x0d, 0x80, 0x92, 0xf8, 0x80, 0x5d, - 0x33, 0x24, 0x31, 0x43, 0x80, 0xd0, 0x31, 0xd4, 0x56, 0x01, 0xf0, 0xf8, 0x26, 0x20, 0xe6, 0x91, - 0x17, 0xcf, 0xe2, 0x88, 0xf3, 0xea, 0x1b, 0xe6, 0x20, 0xe2, 0x07, 0xe2, 0xf4, 0x06, 0xd8, 0x6e, - 0xc7, 0xc2, 0x82, 0x61, 0xf8, 0x2e, 0x68, 0x1c, 0x09, 0x78, 0x92, 0xd1, 0xc0, 0x5d, 0xe8, 0x54, - 0x63, 0xfa, 0xf6, 0x00, 0x04, 0x7f, 0x58, 0xbe, 0x2a, 0xab, 0x06, 0xdb, 0x07, 0x03, 0x48, 0x84, - 0xc9, 0x93, 0xe1, 0x71, 0x01, 0x48, 0x30, 0x21, 0x20, 0xa6, 0xad, 0x72, 0x0c, 0x31, 0x80, 0x58, - 0x19, 0x4e, 0x4a, 0xb1, 0xb2, 0xf9, 0xa1, 0x4d, 0x85, 0xe9, 0x13, 0xc9, 0x0a, 0xf8, 0x29, 0x25, - 0xb4, 0xd1, 0x07, 0x84, 0xdd, 0x5d, 0xc7, 0xac, 0x41, 0xdd, 0x83, 0x84, 0x23, 0x43, 0x02, 0xba, - 0x99, 0x48, 0x51, 0x7c, 0x28, 0x25, 0x8c, 0x94, 0x0f, 0x63, 0xab, 0xa8, 0x66, 0x12, 0xc7, 0x3a, - 0xb7, 0x99, 0x40, 0xa4, 0xaa, 0xe9, 0xb1, 0x99, 0x8c, 0xae, 0x63, 0xdd, 0xdf, 0xc1, 0x21, 0x91, - 0xbb, 0xac, 0xaf, 0xad, 0x60, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x25, 0x12, 0xb0, 0x32, 0x81, - 0x96, 0x20, 0xe1, 0x34, 0xab, 0xf3, 0x69, 0xb4, 0x1b, 0x71, 0x64, 0xda, 0x6b, 0x69, 0xa1, 0xbc, - 0xc2, 0x1d, 0x5d, 0x40, 0x8f, 0x10, 0x08, 0x03, 0x06, 0x2c, 0x19, 0x04, 0x6e, 0x91, 0x18, 0x19, - 0x10, 0xc0, 0x79, 0x00, 0xf2, 0x21, 0x1c, 0x07, 0xb8, 0x36, 0x40, 0xe3, 0xed, 0x25, 0x01, 0xaa, - 0xa5, 0x1d, 0x6e, 0xcc, 0xbf, 0xf1, 0x01, 0x82, 0xed, 0xaa, 0x82, 0x8a, 0x83, 0x5e, 0x14, 0x83, - 0x9c, 0xef, 0xd1, 0x10, 0xe1, 0xf1, 0x54, 0x4e, 0x72, 0xa4, 0x2f, 0x64, 0x7a, 0xf5, 0x04, 0x02, - 0xae, 0xf4, 0x5d, 0x16, 0x21, 0x5d, 0x61, 0xbf, 0x2f, 0x50, 0x7f, 0x4e, 0x30, 0x26, 0xb4, 0x18, - 0x62, 0x61, 0x00, 0x04, 0x94, 0x0c, 0xd4, 0x13, 0x7f, 0x12, 0x30, 0xc4, 0xd2, 0x60, 0x15, 0x6f, - 0x2c, 0x63, 0xa3, 0xf3, 0xc0, 0x60, 0x5c, 0x78, 0x1e, 0x78, 0x3d, 0xe0, 0x1e, 0x70, 0x00, 0xe1, - 0xee, 0x1e, 0xf5, 0x6a, 0x4a, 0xd0, 0xbd, 0x0d, 0xb9, 0x04, 0x1d, 0x1c, 0x89, 0x08, 0x62, 0x02, - 0x81, 0x07, 0x13, 0xf1, 0x27, 0xbb, 0xd2, 0x90, 0x02, 0x22, 0x52, 0x56, 0xb2, 0xb6, 0xe2, 0x5e, - 0xbc, 0xc4, 0xf3, 0xf8, 0x90, 0xa5, 0xf7, 0x96, 0xcb, 0x18, 0xa3, 0x38, 0x58, 0x38, 0x58, 0x2c, - 0x65, 0x8c, 0x28, 0xd0, 0xb6, 0x3d, 0xf2, 0xd8, 0xa3, 0x3b, 0x02, 0x05, 0x8b, 0x46, 0xd6, 0x20, - 0x40, 0x2d, 0x3b, 0xb8, 0xad, 0xc2, 0x55, 0xc0, 0xce, 0xcc, 0x83, 0xa7, 0xe1, 0xc1, 0x28, 0xe0, - 0x1c, 0xe3, 0xd2, 0x9e, 0x07, 0x2c, 0x06, 0x1a, 0x17, 0x40, 0x1c, 0xa6, 0xc9, 0xa3, 0x9c, 0x2e, - 0x01, 0x83, 0x89, 0xd6, 0x21, 0xae, 0x10, 0x08, 0x02, 0x81, 0x98, 0x1c, 0x0c, 0xaa, 0x39, 0xd7, - 0x38, 0x18, 0x06, 0xa9, 0xc3, 0x4c, 0xec, 0x0c, 0x3b, 0xe2, 0x7e, 0x17, 0x72, 0xa3, 0x17, 0x08, - 0x88, 0x42, 0xfa, 0x18, 0xe8, 0xb1, 0x57, 0x52, 0x5f, 0x58, 0x63, 0xd5, 0x22, 0x15, 0xd5, 0x32, - 0xf5, 0x4c, 0x97, 0x58, 0xbe, 0xb1, 0x78, 0x40, 0x13, 0x84, 0x93, 0x3f, 0x72, 0xdb, 0x8a, 0xc5, - 0x62, 0xb1, 0x3c, 0x47, 0xf1, 0x20, 0xa6, 0x37, 0xad, 0xe4, 0x3a, 0x32, 0xd1, 0x61, 0xf8, 0x5a, - 0x61, 0xff, 0x2b, 0x4e, 0xd8, 0xa4, 0x39, 0xc7, 0x41, 0xea, 0x07, 0x0c, 0x7a, 0x79, 0xe2, 0x01, - 0x6e, 0xf7, 0x26, 0x53, 0x77, 0xfa, 0x09, 0x95, 0x2f, 0x98, 0xce, 0x33, 0x84, 0xc6, 0x08, 0x64, - 0xee, 0x20, 0x13, 0x8e, 0xdb, 0x55, 0x55, 0x5f, 0xf8, 0x85, 0xee, 0x22, 0x09, 0x62, 0xe2, 0xa8, - 0x99, 0xbf, 0x1f, 0x1c, 0x4b, 0xcc, 0x78, 0x80, 0x52, 0x76, 0x00, 0x99, 0x92, 0xa1, 0x8d, 0x80, - 0x76, 0x25, 0x92, 0xe5, 0x9e, 0xc1, 0xec, 0xc0, 0x05, 0x5a, 0xca, 0xd7, 0x0c, 0x30, 0x86, 0xf5, - 0xd3, 0xd6, 0x1f, 0xfc, 0x78, 0x81, 0xe6, 0x2f, 0x11, 0xf1, 0x1c, 0x61, 0x9a, 0xe3, 0xaa, 0x1f, - 0x0f, 0xd8, 0xc1, 0xee, 0xe1, 0x00, 0x52, 0x25, 0xb9, 0xd8, 0x77, 0x77, 0x71, 0x9c, 0x7c, 0xfe, - 0x4f, 0xa6, 0x00, 0x6f, 0x3a, 0xfd, 0x68, 0x7d, 0x0c, 0xf4, 0x27, 0x09, 0x3a, 0x33, 0x0f, 0x5e, - 0x9f, 0xa1, 0x29, 0x57, 0xaa, 0x65, 0xeb, 0xdf, 0x5e, 0xfa, 0x99, 0x47, 0x84, 0x06, 0x8e, 0x70, - 0x61, 0xc0, 0x00, 0x5c, 0x7b, 0xe5, 0xb1, 0x2e, 0xaf, 0xc4, 0x19, 0x6a, 0x73, 0xd4, 0xe0, 0x58, - 0x38, 0x70, 0x89, 0x6f, 0xb1, 0xc3, 0x94, 0x93, 0xaf, 0x1e, 0x3d, 0x8d, 0xd0, 0xff, 0x82, 0xb2, - 0x48, 0x7a, 0x3a, 0x28, 0x6f, 0x4c, 0xf3, 0xc5, 0xa6, 0x99, 0x8b, 0x11, 0xa6, 0x4a, 0xfe, 0xf8, - 0x26, 0xb8, 0xad, 0xcb, 0xc2, 0xad, 0x0b, 0xbc, 0xbc, 0xf4, 0x98, 0x83, 0x58, 0xf1, 0x7f, 0x05, - 0x25, 0x2b, 0xc8, 0xfd, 0xc2, 0x02, 0xea, 0x11, 0x26, 0xaa, 0x14, 0x98, 0x97, 0xf8, 0x21, 0x1a, - 0x92, 0x47, 0xba, 0x8b, 0x1d, 0xe1, 0x11, 0x00, 0x8b, 0x5a, 0xc6, 0x78, 0x90, 0x58, 0x61, 0x75, - 0x51, 0x76, 0x35, 0xb0, 0x4a, 0xa1, 0x2b, 0x0d, 0xa4, 0x10, 0xde, 0x5b, 0x89, 0x57, 0x8b, 0x15, - 0x25, 0xc0, 0x1e, 0x64, 0x56, 0x6f, 0xe0, 0x84, 0x4c, 0xe0, 0x8c, 0xb2, 0x5a, 0x8b, 0xbc, 0x99, - 0x5a, 0xcb, 0xad, 0x1c, 0x65, 0xe0, 0xa0, 0x6a, 0x49, 0x69, 0x25, 0xbf, 0xc6, 0x52, 0x4b, 0x49, - 0x2d, 0x24, 0xb6, 0x9a, 0xc7, 0xf5, 0x4e, 0xdf, 0x42, 0x1f, 0xe8, 0xaf, 0x27, 0x47, 0x2f, 0x24, - 0xe8, 0x8e, 0x44, 0xf0, 0x54, 0x30, 0x38, 0x0f, 0x16, 0x03, 0x73, 0xc3, 0xbb, 0xc1, 0x6c, 0xb1, - 0x96, 0xc5, 0x6b, 0x55, 0xf1, 0xe1, 0x11, 0xa4, 0x87, 0xa0, 0xe8, 0x86, 0x48, 0x0d, 0x8c, 0x02, - 0x53, 0x5d, 0x38, 0xef, 0xd4, 0xff, 0x68, 0xc1, 0x58, 0x0f, 0xce, 0x85, 0xb0, 0x7d, 0x86, 0xa5, - 0x93, 0x2c, 0x84, 0x97, 0x44, 0xf0, 0xce, 0x2c, 0x33, 0xec, 0x9d, 0x93, 0xf0, 0x88, 0x9f, 0x19, - 0xe3, 0x99, 0xfc, 0xc1, 0xe5, 0x63, 0xc1, 0x08, 0x4e, 0xdb, 0xff, 0xf0, 0x47, 0xc1, 0xc6, 0x22, - 0x3c, 0x18, 0x8a, 0xff, 0x82, 0x41, 0x85, 0xe9, 0x18, 0x30, 0x25, 0xbe, 0xe2, 0x44, 0x05, 0x04, - 0x36, 0x0c, 0xba, 0x4e, 0x60, 0xff, 0x96, 0xef, 0x6e, 0x2b, 0x15, 0xc5, 0x69, 0xf7, 0x12, 0x20, - 0x13, 0x0f, 0x34, 0xc3, 0x68, 0x6b, 0xc0, 0x18, 0xd0, 0xc6, 0xf2, 0x8c, 0x13, 0x78, 0xff, 0x05, - 0x1a, 0xc6, 0x81, 0xf9, 0x36, 0x04, 0xb6, 0xc6, 0x75, 0x9f, 0x43, 0x3b, 0xe1, 0x42, 0x21, 0x85, - 0x9c, 0x39, 0x20, 0xa9, 0x13, 0xe9, 0x61, 0x4f, 0x0a, 0xaf, 0x18, 0xc5, 0x10, 0x54, 0x1e, 0x7f, - 0xbb, 0x5a, 0xbf, 0xef, 0x82, 0xb1, 0xa5, 0x83, 0x12, 0x24, 0x10, 0xb8, 0xed, 0x1d, 0xb0, 0x63, - 0xbd, 0xdd, 0xde, 0xbc, 0x22, 0x0b, 0x86, 0xb7, 0x6a, 0xc5, 0x96, 0xa4, 0x4b, 0xe8, 0x95, 0x5d, - 0x1a, 0x0f, 0x82, 0x2b, 0xba, 0xac, 0xbe, 0x51, 0x29, 0x52, 0x4b, 0xc2, 0x5d, 0x24, 0xb6, 0x9a, - 0x87, 0x09, 0x03, 0x1a, 0x3c, 0xcd, 0xb6, 0xfd, 0x34, 0xd2, 0x4b, 0x41, 0x47, 0x48, 0xc5, 0x36, - 0xda, 0x09, 0x04, 0x9a, 0x6d, 0xb7, 0xe1, 0x1b, 0x4d, 0x6d, 0x35, 0xb4, 0xd7, 0xe2, 0x7a, 0x49, - 0x69, 0x25, 0xe1, 0x1b, 0x4d, 0x6d, 0x35, 0xb4, 0xd6, 0x23, 0xa3, 0x62, 0x1e, 0x8e, 0xe5, 0xf5, - 0x6b, 0xea, 0xe0, 0xbd, 0x19, 0x92, 0xf4, 0x24, 0xa9, 0x7d, 0x47, 0x6f, 0xa1, 0x1d, 0xe2, 0x01, - 0x61, 0x9b, 0x9c, 0x60, 0xab, 0xa6, 0xd2, 0x76, 0xb2, 0x28, 0xd7, 0x84, 0x02, 0x86, 0x06, 0xdd, - 0x18, 0x04, 0x5a, 0x0a, 0x91, 0xa6, 0x16, 0x02, 0x5e, 0x79, 0xc8, 0x32, 0xc3, 0x22, 0x42, 0xb3, - 0xa0, 0xb8, 0x2a, 0xa1, 0x52, 0xe9, 0x50, 0x07, 0xa0, 0xf0, 0x0e, 0x12, 0x9b, 0x16, 0x03, 0xf3, - 0xbd, 0x4c, 0xe2, 0x42, 0x21, 0x48, 0x31, 0x66, 0x0a, 0x02, 0x22, 0x9e, 0x3c, 0x67, 0xe4, 0x9c, - 0xcb, 0x07, 0x59, 0x63, 0x6c, 0x9d, 0xb2, 0x6e, 0x26, 0x5f, 0x05, 0x01, 0x3a, 0x00, 0x95, 0x89, - 0x77, 0xd2, 0x07, 0xa9, 0x51, 0x57, 0x8a, 0x0b, 0x44, 0x2a, 0x25, 0xef, 0x6e, 0xfe, 0x0a, 0x85, - 0xb4, 0xd1, 0x6f, 0x8c, 0x9a, 0x22, 0xc7, 0x7b, 0x9f, 0x51, 0x7f, 0x88, 0x08, 0x82, 0x32, 0xbc, - 0xfe, 0xc3, 0x10, 0x24, 0x58, 0xc7, 0x28, 0xc1, 0x7b, 0xe4, 0x87, 0x12, 0x12, 0xc2, 0xa6, 0x43, - 0x41, 0x94, 0x2d, 0x05, 0x6d, 0xf7, 0x88, 0x12, 0x19, 0x1e, 0x31, 0xff, 0x59, 0xab, 0xe5, 0xac, - 0xa9, 0x64, 0x7f, 0xff, 0x12, 0x8e, 0x44, 0xfa, 0x8e, 0xdf, 0x42, 0x2b, 0xeb, 0xdf, 0x5c, 0x2b, - 0xa3, 0xba, 0x3f, 0xa3, 0xb1, 0x7d, 0x11, 0xc8, 0x9e, 0x89, 0x33, 0xe8, 0xe7, 0x4b, 0xea, 0x74, - 0x93, 0xa2, 0x57, 0xd4, 0xb7, 0x12, 0x24, 0x16, 0x08, 0x82, 0xd0, 0x69, 0x84, 0xe2, 0xc4, 0xd3, - 0x2b, 0x08, 0x79, 0x5b, 0x33, 0x17, 0x56, 0x7c, 0x18, 0x06, 0x31, 0xdd, 0x29, 0x07, 0x42, 0xb0, - 0xdf, 0x0a, 0x1a, 0xda, 0xd2, 0xdf, 0x17, 0x43, 0x5a, 0x21, 0x7e, 0x98, 0xaa, 0x1e, 0x44, 0xc0, - 0x31, 0x0f, 0x3c, 0x94, 0x04, 0xd8, 0xb9, 0x03, 0xd0, 0xc2, 0x78, 0x34, 0xde, 0x15, 0xd7, 0x76, - 0x9b, 0x02, 0xb0, 0x6b, 0x87, 0x94, 0xce, 0x15, 0xcf, 0x12, 0x14, 0x20, 0x31, 0x98, 0xcb, 0x33, - 0x9b, 0xc1, 0x6c, 0xdb, 0xf3, 0xf7, 0xee, 0xa8, 0x38, 0x98, 0x0c, 0xf0, 0xe2, 0x63, 0xe3, 0x8e, - 0x28, 0xcc, 0x6a, 0x43, 0xa0, 0x39, 0x40, 0x3f, 0x70, 0x03, 0x53, 0xb8, 0x88, 0x28, 0xd8, 0xf2, - 0x8a, 0xce, 0xd8, 0x77, 0x95, 0xb6, 0xa3, 0xcc, 0xb7, 0xf8, 0x46, 0xab, 0x8d, 0x79, 0xd8, 0xcc, - 0x65, 0x14, 0x5e, 0x57, 0xc2, 0x15, 0x61, 0x2a, 0xd5, 0x56, 0x89, 0x53, 0xc4, 0x41, 0x5e, 0xec, - 0x09, 0xf1, 0x58, 0xef, 0x93, 0x0b, 0x02, 0x64, 0x48, 0x0a, 0xa3, 0x01, 0xef, 0xf1, 0x22, 0x01, - 0x55, 0x66, 0xc2, 0xe3, 0x8e, 0x8a, 0x8e, 0xdc, 0x62, 0x7d, 0xdd, 0xf8, 0x98, 0x29, 0x28, 0x52, - 0x84, 0x70, 0xc2, 0x69, 0xa0, 0x3c, 0x7d, 0xad, 0xbc, 0x11, 0xad, 0xa8, 0x3a, 0x50, 0x4a, 0x41, - 0x3f, 0xd7, 0x59, 0xe7, 0x7d, 0x1d, 0xf8, 0x21, 0x13, 0x40, 0xcb, 0x44, 0x09, 0xbc, 0x56, 0xd8, - 0x3b, 0x78, 0x94, 0x2c, 0x85, 0x5d, 0x08, 0xaf, 0xa3, 0x91, 0x3e, 0xb8, 0x4f, 0xd7, 0xbe, 0xaf, - 0x0a, 0x75, 0xea, 0xeb, 0x14, 0x9d, 0x10, 0xa9, 0xf5, 0x3a, 0x5f, 0x5c, 0x3c, 0x48, 0x50, 0x64, - 0x23, 0xbc, 0x10, 0x56, 0xbf, 0x75, 0x3c, 0x10, 0x47, 0x9e, 0x06, 0x16, 0x13, 0x98, 0x18, 0xad, - 0x2b, 0xf7, 0x50, 0x1d, 0x9a, 0x95, 0x4c, 0xcb, 0x9a, 0x65, 0x4f, 0x85, 0x09, 0x65, 0x81, 0x51, - 0xd5, 0x45, 0x54, 0x40, 0xc1, 0x90, 0x0a, 0xd0, 0x8c, 0x3b, 0x17, 0x65, 0x72, 0xe2, 0x50, 0xc9, - 0xde, 0x90, 0xbe, 0x85, 0x11, 0x1b, 0x17, 0x89, 0x19, 0xcf, 0xbe, 0x52, 0x03, 0xf0, 0x7e, 0xd5, - 0x90, 0x9a, 0x02, 0x61, 0xcd, 0x4e, 0x53, 0x01, 0x97, 0xed, 0x1d, 0x19, 0xee, 0x20, 0x28, 0x55, - 0xea, 0xc5, 0x0e, 0x08, 0x0a, 0xb9, 0x4a, 0x33, 0x42, 0x3a, 0xe4, 0xf5, 0xce, 0x30, 0xfc, 0xa9, - 0x5f, 0x09, 0x40, 0x1c, 0xf8, 0xff, 0x4c, 0x80, 0x39, 0x5e, 0xf8, 0x52, 0x4e, 0xbe, 0x24, 0xa3, - 0xcb, 0xc2, 0x0f, 0x9e, 0xe2, 0xdc, 0xc3, 0xf9, 0x1f, 0xe6, 0xa4, 0xa4, 0x92, 0x91, 0x38, 0x5e, - 0xcd, 0x2d, 0x8e, 0xdf, 0x1b, 0x42, 0xc5, 0xc1, 0x92, 0xcc, 0x8e, 0x90, 0x4b, 0xdf, 0x47, 0x69, - 0x30, 0x39, 0x50, 0x25, 0x5c, 0xeb, 0x62, 0x22, 0x1b, 0xd2, 0xd9, 0x6d, 0xff, 0xc5, 0xa6, 0xdf, - 0xfe, 0x13, 0x27, 0x7d, 0x1d, 0xcc, 0x2e, 0x74, 0x9f, 0x8e, 0xf3, 0xfd, 0x11, 0x9a, 0x5c, 0x1e, - 0xee, 0x34, 0x43, 0x2d, 0x63, 0x5d, 0xf7, 0xe0, 0x8c, 0x78, 0xce, 0xbf, 0x1d, 0xb8, 0x81, 0x3f, - 0x45, 0x4f, 0x11, 0xd1, 0xc7, 0x57, 0xd1, 0x9a, 0xfa, 0xd4, 0x6f, 0x56, 0x8a, 0xea, 0x65, 0x9f, - 0x51, 0xdb, 0xe8, 0x99, 0x5f, 0x45, 0x4e, 0x9e, 0x24, 0x16, 0x04, 0x20, 0x91, 0x31, 0xdc, 0xe7, - 0xe9, 0xcd, 0x53, 0x30, 0x4a, 0xe4, 0xd8, 0x16, 0xcb, 0x62, 0x13, 0x14, 0xc1, 0xe1, 0x4c, 0xf7, - 0xcd, 0xbc, 0x37, 0x8b, 0xce, 0x26, 0x4e, 0x13, 0x80, 0x66, 0xdc, 0xbb, 0x0d, 0x18, 0x2f, 0x0f, - 0x2c, 0x19, 0xc8, 0xc1, 0x3c, 0x7b, 0xc8, 0x69, 0x8b, 0x4d, 0x65, 0x0e, 0xdf, 0xc4, 0x05, 0x04, - 0xb2, 0x92, 0xa8, 0x0a, 0x03, 0x62, 0x5a, 0x26, 0x01, 0x63, 0x16, 0xdf, 0x4e, 0x28, 0x12, 0xb4, - 0x87, 0xfd, 0xa1, 0xfe, 0x1b, 0x32, 0xbb, 0xd0, 0x86, 0x8a, 0x78, 0x90, 0x54, 0x48, 0x81, 0x2e, - 0x63, 0x70, 0x17, 0x26, 0x9e, 0xfb, 0x69, 0x88, 0x97, 0x96, 0x37, 0x7c, 0xbf, 0xe1, 0x49, 0x6a, - 0x66, 0x31, 0x11, 0x29, 0x13, 0x2a, 0x77, 0x0b, 0xd4, 0xd0, 0x51, 0x72, 0xf2, 0x30, 0x5b, 0xc4, - 0x85, 0x3c, 0xa9, 0x0b, 0xcc, 0x08, 0x0f, 0x7b, 0xba, 0x9a, 0x1b, 0x08, 0x0b, 0x79, 0x06, 0xff, - 0x04, 0x85, 0x31, 0x05, 0x54, 0x4c, 0x82, 0xff, 0x18, 0x28, 0x32, 0xcb, 0x3f, 0x3e, 0x4d, 0x2a, - 0xf6, 0xc1, 0x9a, 0x9e, 0x59, 0x28, 0x54, 0xb8, 0x3d, 0x04, 0x7b, 0xe8, 0xf1, 0x7d, 0x47, 0x65, - 0xfa, 0x90, 0xa2, 0x7a, 0xa6, 0x47, 0xea, 0x3e, 0xae, 0x88, 0x63, 0x7d, 0x52, 0xa1, 0xbc, 0x11, - 0xd6, 0xb6, 0x3e, 0xa9, 0x5f, 0xac, 0xa6, 0xeb, 0x57, 0x88, 0x0a, 0x05, 0x10, 0xc8, 0x9e, 0xbb, - 0x10, 0xf2, 0x9f, 0x3d, 0x81, 0x2c, 0x28, 0x68, 0x46, 0x04, 0x80, 0x0b, 0x60, 0x1a, 0x06, 0x19, - 0x41, 0x80, 0x80, 0x93, 0x46, 0xd4, 0xe1, 0x00, 0x02, 0xbc, 0xaa, 0x74, 0x0b, 0x82, 0x1f, 0xc6, - 0x95, 0x86, 0xd1, 0x5c, 0xf9, 0xa7, 0x08, 0x5b, 0x95, 0xd1, 0x00, 0x0e, 0x27, 0xca, 0x47, 0xb1, - 0x2f, 0x42, 0x89, 0x3e, 0x1c, 0xb8, 0x03, 0x8d, 0x04, 0xc8, 0x6b, 0x22, 0x35, 0x41, 0xa6, 0x8c, - 0xc5, 0x2c, 0xc6, 0x19, 0xdc, 0x15, 0xe0, 0x5d, 0xff, 0x62, 0x4e, 0x09, 0x9c, 0xd2, 0xc4, 0xef, - 0x09, 0xa6, 0xaf, 0xf6, 0x55, 0x68, 0x1b, 0xb1, 0x9b, 0x24, 0x0f, 0xdb, 0x2e, 0xf8, 0x53, 0x76, - 0x48, 0x12, 0x6c, 0x20, 0x82, 0x03, 0x99, 0xe8, 0xc6, 0x09, 0xbe, 0xea, 0x70, 0x1e, 0xc2, 0x0a, - 0xbd, 0x92, 0x63, 0xfe, 0xe9, 0xbb, 0x48, 0x0e, 0xc5, 0x14, 0xd3, 0xb7, 0x24, 0xc3, 0x36, 0x53, - 0x48, 0x06, 0x85, 0xa6, 0xd2, 0x2f, 0x19, 0xa3, 0x3e, 0x59, 0xc8, 0xc1, 0xaa, 0xe3, 0x13, 0x19, - 0xd3, 0xaa, 0x1b, 0x42, 0xa7, 0x2b, 0x1f, 0x81, 0xc1, 0xb4, 0xbb, 0x1d, 0x41, 0xdf, 0xce, 0x61, - 0x06, 0xac, 0xde, 0x4a, 0x7b, 0xc2, 0x87, 0x56, 0x28, 0x90, 0xf4, 0xa8, 0x9c, 0x92, 0x5c, 0x08, - 0x60, 0x35, 0x89, 0x82, 0x06, 0x96, 0x31, 0x3c, 0x80, 0x00, 0x4e, 0xb0, 0x6c, 0xab, 0xa5, 0x35, - 0x91, 0x6c, 0x82, 0x08, 0x52, 0x94, 0x18, 0x86, 0x98, 0x5c, 0x35, 0xbf, 0xef, 0x85, 0x21, 0x2b, - 0xec, 0xa7, 0x75, 0x2d, 0x82, 0x4a, 0xac, 0xcb, 0x42, 0xfc, 0x8b, 0xc5, 0x80, 0xd9, 0x86, 0x0c, - 0xb6, 0x5a, 0x9c, 0x83, 0x64, 0x65, 0x04, 0x3a, 0xe0, 0x14, 0x69, 0x04, 0x4e, 0x75, 0x49, 0xaa, - 0x82, 0x80, 0x0d, 0x6c, 0x8b, 0x10, 0x9c, 0x61, 0xbc, 0xbc, 0x4d, 0x23, 0x15, 0xe1, 0x4b, 0x18, - 0xc9, 0xca, 0x7f, 0x86, 0x00, 0x01, 0x29, 0x17, 0xeb, 0x20, 0x5e, 0x5d, 0x61, 0x21, 0x20, 0xa0, - 0x43, 0xbe, 0xbb, 0x49, 0x38, 0x86, 0x13, 0xee, 0xb6, 0x1c, 0x48, 0x52, 0x4a, 0x10, 0xdb, 0xaf, - 0x24, 0x40, 0x41, 0x40, 0x02, 0x85, 0xae, 0x08, 0x0d, 0xff, 0x04, 0x65, 0x03, 0xf5, 0x3c, 0x20, - 0x39, 0xca, 0xb9, 0xf0, 0x4c, 0x42, 0xaf, 0x11, 0xae, 0xca, 0x19, 0x14, 0x72, 0xbf, 0x47, 0xaf, - 0x51, 0x12, 0x0c, 0xfd, 0xf0, 0xc0, 0x67, 0x3c, 0xc7, 0x7d, 0xaa, 0x68, 0x54, 0xd1, 0xce, 0xb3, - 0x69, 0xb4, 0xfa, 0x7d, 0xfc, 0xa2, 0x29, 0xc4, 0xeb, 0xaa, 0x76, 0xba, 0x91, 0x2f, 0xab, 0x80, - 0x9f, 0x46, 0x4e, 0x97, 0x57, 0xfa, 0xa6, 0x4f, 0xab, 0x45, 0x75, 0xd7, 0xc2, 0x98, 0x97, 0x3c, - 0xa2, 0x13, 0xd9, 0x58, 0xe1, 0x85, 0x3c, 0x7e, 0x29, 0xd9, 0x3e, 0xe2, 0x70, 0xe2, 0x41, 0x60, - 0x42, 0x60, 0x87, 0x86, 0x81, 0x7f, 0x9b, 0xd6, 0x23, 0x4c, 0x35, 0x16, 0x08, 0xbf, 0xe1, 0x42, - 0x5f, 0x04, 0xf5, 0x12, 0xae, 0xc2, 0x49, 0xa9, 0x50, 0xe8, 0x8d, 0xb2, 0x91, 0x1f, 0xf3, 0xa1, - 0x6d, 0x9a, 0xa4, 0xf1, 0x4c, 0x23, 0x23, 0x52, 0x96, 0x6c, 0x51, 0x0c, 0xe1, 0x60, 0xe7, 0x12, - 0x00, 0x32, 0x92, 0x8d, 0xe9, 0x91, 0x49, 0x19, 0x0a, 0x00, 0x7c, 0x35, 0x83, 0xa7, 0x38, 0xd5, - 0xd0, 0xe7, 0xc2, 0x95, 0xc0, 0x4a, 0x02, 0x54, 0xe6, 0xb9, 0xc2, 0x49, 0xbc, 0x5a, 0xb0, 0x43, - 0xd8, 0xb0, 0xcb, 0xc1, 0x71, 0x83, 0x31, 0xfb, 0x69, 0x5d, 0x96, 0xac, 0x63, 0x75, 0x2b, 0x57, - 0x12, 0xfa, 0xf3, 0x38, 0x6e, 0x52, 0xc6, 0x33, 0x30, 0x40, 0x62, 0xf8, 0x29, 0x3f, 0x3c, 0xd3, - 0x98, 0xb0, 0xfc, 0xa3, 0x25, 0xa6, 0x30, 0x1f, 0xfe, 0x14, 0x24, 0x42, 0x2e, 0x46, 0xe0, 0x64, - 0x20, 0x35, 0xa0, 0x92, 0x90, 0xe3, 0x48, 0x06, 0xea, 0x9e, 0xca, 0x60, 0xdd, 0x73, 0x27, 0x8a, - 0x07, 0xf1, 0x30, 0x87, 0x5c, 0x73, 0x6f, 0x78, 0x17, 0xe4, 0xf8, 0x2a, 0x00, 0xa1, 0x98, 0xf4, - 0xeb, 0xbc, 0x6a, 0x18, 0x2f, 0x36, 0x3e, 0x0c, 0x49, 0x97, 0xf6, 0x56, 0x13, 0x83, 0x27, 0x09, - 0x58, 0xdf, 0x1c, 0x51, 0xd0, 0x1f, 0x22, 0x27, 0xed, 0xe1, 0x62, 0x88, 0x9d, 0xcc, 0x9e, 0xae, - 0xde, 0x29, 0x57, 0x8a, 0xda, 0xf8, 0xba, 0x16, 0x64, 0xbf, 0xc7, 0x54, 0x17, 0xda, 0x39, 0x06, - 0xd7, 0x15, 0x1c, 0x2d, 0xdb, 0x06, 0x05, 0x5d, 0x39, 0x30, 0xbc, 0xa7, 0x1d, 0x62, 0x63, 0xa1, - 0x96, 0x95, 0x6c, 0xf8, 0x90, 0x4f, 0x4e, 0x12, 0x79, 0x61, 0x9d, 0x3e, 0x61, 0x4b, 0x0d, 0x85, - 0xa4, 0x4d, 0x5f, 0x41, 0x5c, 0xa2, 0xfa, 0x2a, 0x58, 0x7f, 0xa1, 0xae, 0x7d, 0x0e, 0xff, 0xd0, - 0xa7, 0xf1, 0x21, 0x48, 0xc2, 0x47, 0xa0, 0x63, 0x09, 0xbc, 0x3d, 0x83, 0xb8, 0xad, 0xdf, 0x0e, - 0x4a, 0x58, 0xec, 0x77, 0xe1, 0x42, 0x13, 0xbb, 0x77, 0x48, 0x9e, 0x60, 0x2b, 0xb4, 0x85, 0xb9, - 0xfd, 0x3e, 0x0d, 0x53, 0x85, 0x02, 0x0a, 0x0f, 0xb1, 0xaf, 0x50, 0x66, 0xd8, 0x6c, 0x29, 0x3b, - 0x5b, 0xa6, 0xc0, 0x00, 0x11, 0x90, 0x7c, 0x70, 0x82, 0xa4, 0x64, 0xfd, 0xaa, 0x3d, 0x57, 0x3e, - 0xfc, 0x40, 0x9a, 0xaa, 0x1d, 0xd5, 0x97, 0x8c, 0xb7, 0x87, 0xfa, 0xa8, 0x1c, 0x48, 0x87, 0x01, - 0x94, 0xb8, 0xed, 0x09, 0x70, 0x76, 0xfa, 0x40, 0x1f, 0x7d, 0xe5, 0x73, 0x3b, 0xc2, 0x0b, 0x52, - 0x71, 0x8b, 0xd1, 0xe5, 0xd6, 0xd9, 0x7f, 0x53, 0x97, 0x74, 0x74, 0xf8, 0x90, 0xa1, 0x06, 0xc1, - 0x8d, 0x16, 0xed, 0xd8, 0x0e, 0x63, 0xea, 0xc1, 0x65, 0xfe, 0x1f, 0x7d, 0x8f, 0xaa, 0xfc, 0x9f, - 0x38, 0x45, 0xc2, 0x47, 0x39, 0x38, 0x0b, 0xa5, 0x3b, 0x84, 0xf8, 0x25, 0x11, 0xee, 0xe1, 0x6e, - 0x7d, 0x4e, 0xe2, 0x65, 0xbf, 0xc2, 0x87, 0xaa, 0xb6, 0xc7, 0xdd, 0x6e, 0x1d, 0x8a, 0x6b, 0x6b, - 0xda, 0x7d, 0xfe, 0x09, 0x4b, 0x9b, 0xda, 0x36, 0xd3, 0x2a, 0x7c, 0x40, 0xc9, 0x08, 0x6b, 0x2b, - 0xb9, 0x67, 0xc1, 0x5e, 0x5a, 0x3a, 0x3c, 0x81, 0xa3, 0x7a, 0x8d, 0x55, 0x29, 0x88, 0xa0, 0x97, - 0xe1, 0xf0, 0x46, 0x11, 0xa1, 0x8d, 0x06, 0x8c, 0x94, 0x95, 0x05, 0x7a, 0x25, 0x7d, 0x72, 0x88, - 0xea, 0xf1, 0x7d, 0x6c, 0x3c, 0x13, 0x93, 0x8e, 0x85, 0x2c, 0x8f, 0x00, 0x04, 0x9f, 0xfc, 0x4c, - 0x64, 0x42, 0x9f, 0x83, 0xa1, 0xea, 0xcb, 0xe8, 0x9d, 0xf1, 0xa6, 0x40, 0x44, 0xc4, 0xca, 0x70, - 0xa4, 0x73, 0x24, 0x61, 0x60, 0xfc, 0x02, 0x01, 0x6f, 0x0b, 0x6d, 0x40, 0xca, 0x10, 0x0a, 0x78, - 0x3b, 0x09, 0xaf, 0x62, 0x5a, 0x52, 0xe8, 0x91, 0x0f, 0x25, 0x3e, 0xce, 0x31, 0xdf, 0x8c, 0xa8, - 0xa1, 0xe9, 0x83, 0x9f, 0x05, 0xd5, 0x00, 0x0f, 0xc4, 0xca, 0x20, 0x1d, 0x95, 0x7b, 0x62, 0xd7, - 0xa9, 0x91, 0xdf, 0x47, 0x71, 0xca, 0x35, 0x75, 0x50, 0xf2, 0x9d, 0x8b, 0x2b, 0xf0, 0x56, 0x34, - 0xa5, 0xe4, 0xcb, 0x45, 0x43, 0x81, 0x98, 0x65, 0xb2, 0xd7, 0x01, 0xde, 0xc9, 0xef, 0x10, 0x0b, - 0x8b, 0xb3, 0x6c, 0x8f, 0x55, 0x55, 0x77, 0xc2, 0x9a, 0x47, 0xeb, 0x00, 0x41, 0xd9, 0x4f, 0x07, - 0x76, 0x90, 0x5d, 0xac, 0x3f, 0x12, 0xf8, 0x91, 0xf5, 0xb3, 0x9d, 0x23, 0xc3, 0x77, 0x50, 0x66, - 0x3a, 0x2f, 0x20, 0xc5, 0x57, 0x09, 0x4a, 0xbf, 0xa5, 0xf7, 0x82, 0xb2, 0x28, 0x44, 0xde, 0x38, - 0x1a, 0xa0, 0x2e, 0x59, 0x99, 0x82, 0xf2, 0x7c, 0xa7, 0xaf, 0x12, 0x82, 0xe9, 0x5f, 0xaf, 0x42, - 0x9d, 0x1b, 0x28, 0x4f, 0x82, 0x71, 0x04, 0xbf, 0x49, 0x6c, 0xf8, 0x52, 0x60, 0x80, 0xae, 0xcc, - 0x9d, 0x29, 0xfb, 0xab, 0x59, 0x00, 0xe1, 0xe0, 0xaa, 0x4f, 0xe8, 0x72, 0x56, 0x0d, 0xf0, 0x85, - 0x78, 0x71, 0xfc, 0x48, 0x46, 0xa3, 0xb3, 0x83, 0xa6, 0x17, 0xd5, 0x8b, 0x4e, 0x37, 0x55, 0xeb, - 0x8b, 0xdf, 0xc1, 0x28, 0x88, 0x0f, 0xc9, 0xf9, 0x3d, 0xcf, 0x8c, 0x2d, 0x6e, 0xd0, 0x76, 0xec, - 0xed, 0x2b, 0x4b, 0x4c, 0x78, 0x00, 0x05, 0x9c, 0xa0, 0xaa, 0x6b, 0x5f, 0x85, 0x05, 0xc7, 0xc0, - 0xbc, 0x26, 0xd6, 0x66, 0x98, 0xc1, 0x98, 0x71, 0x38, 0xa7, 0x8e, 0x8d, 0xbf, 0xe5, 0x16, 0xeb, - 0x92, 0x7c, 0x8a, 0x27, 0xfb, 0x24, 0x63, 0xd9, 0xf0, 0xa1, 0xd0, 0x11, 0x83, 0x08, 0x4f, 0xff, - 0x1e, 0xa4, 0xa6, 0x3f, 0xec, 0x19, 0x83, 0x3b, 0xec, 0x7f, 0xf8, 0x2d, 0x2f, 0x14, 0x6b, 0x4f, - 0x12, 0x07, 0x8b, 0xa7, 0x2a, 0x8d, 0xaa, 0xe2, 0x04, 0xfc, 0x12, 0x0c, 0xbb, 0x48, 0xd9, 0xf1, - 0x98, 0xd0, 0x92, 0x34, 0xa0, 0x1c, 0x94, 0x10, 0x0c, 0x88, 0x94, 0x06, 0x05, 0x75, 0x37, 0x19, - 0xea, 0xd7, 0x8c, 0x10, 0x1a, 0x3d, 0x51, 0xdc, 0x38, 0xc3, 0x03, 0x5a, 0xee, 0x69, 0xe7, 0x4c, - 0x53, 0x48, 0x2b, 0x10, 0x1c, 0x44, 0x11, 0x8b, 0x0a, 0x35, 0x43, 0x01, 0x90, 0xeb, 0x36, 0x1a, - 0x7d, 0x7e, 0xac, 0x54, 0x86, 0xba, 0x12, 0x91, 0x7a, 0x2a, 0x75, 0xe8, 0x8c, 0x7d, 0x4c, 0x0a, - 0xe8, 0xcd, 0xf5, 0x6f, 0xa2, 0xb9, 0x7c, 0x11, 0x6e, 0xaa, 0xcf, 0x98, 0xd4, 0x8b, 0x26, 0x91, - 0xe2, 0x41, 0x61, 0x1d, 0x28, 0x50, 0x46, 0x23, 0x11, 0xf2, 0x2d, 0x1d, 0x88, 0x1c, 0x2d, 0x8a, - 0x53, 0xe1, 0x42, 0x1e, 0x4b, 0x32, 0xe3, 0x8a, 0xc3, 0xea, 0x97, 0xb8, 0xae, 0x5a, 0x37, 0x4c, - 0x3e, 0x09, 0x8e, 0xb3, 0x29, 0xc0, 0x81, 0xcd, 0x9a, 0x98, 0xc4, 0xff, 0xe4, 0xb0, 0x6c, 0x48, - 0xb4, 0x5e, 0x11, 0xea, 0xb8, 0xc1, 0xc3, 0xc8, 0xb9, 0x28, 0x93, 0xde, 0x14, 0x10, 0xaa, 0xa2, - 0xeb, 0x4e, 0x2e, 0x27, 0x40, 0xf8, 0x6a, 0x88, 0x06, 0x59, 0x91, 0x0b, 0xf0, 0x64, 0x3a, 0xed, - 0x99, 0xfe, 0x10, 0x38, 0x6e, 0x71, 0xc6, 0x68, 0xcf, 0x47, 0xd1, 0xa4, 0x12, 0xbe, 0x6e, 0x03, - 0x92, 0x17, 0x5d, 0x6b, 0x5f, 0x42, 0x7f, 0x7d, 0x6f, 0xf0, 0x58, 0x73, 0xfa, 0xee, 0x7a, 0x3d, - 0x03, 0x3e, 0x72, 0x5e, 0xfe, 0x24, 0x14, 0xd1, 0xbb, 0x02, 0x97, 0x6b, 0x40, 0x34, 0xb3, 0x16, - 0x7e, 0x22, 0x14, 0xb9, 0x44, 0x0d, 0xf2, 0x03, 0xec, 0x64, 0x48, 0xb2, 0xa3, 0x51, 0xcc, 0x46, - 0x8e, 0xb1, 0xa4, 0xa4, 0x77, 0xe0, 0x8c, 0xc8, 0xd7, 0x7c, 0xff, 0x04, 0xe4, 0x3b, 0x71, 0xb6, - 0x6e, 0xcd, 0x24, 0x9a, 0x7f, 0x8e, 0x15, 0xa6, 0x12, 0x1c, 0xbd, 0x62, 0xbb, 0x10, 0x9e, 0x25, - 0x39, 0x2d, 0x7e, 0x5a, 0x5a, 0x5e, 0x51, 0x35, 0x13, 0xc8, 0xc6, 0xf4, 0x76, 0x23, 0x7a, 0xf4, - 0xfd, 0x14, 0xc9, 0xf3, 0x08, 0xbb, 0xbe, 0x26, 0x11, 0x37, 0x15, 0xd0, 0x9d, 0xc5, 0x6f, 0x7e, - 0x24, 0x29, 0x15, 0x8a, 0xdd, 0xec, 0xc1, 0xed, 0xef, 0xb2, 0x89, 0x55, 0x61, 0xe2, 0x42, 0x97, - 0x9d, 0x43, 0x61, 0x5a, 0x93, 0x1f, 0x17, 0xd6, 0xf6, 0x1b, 0xa7, 0xb0, 0x25, 0x58, 0xcf, 0x36, - 0x1f, 0x3c, 0x48, 0x2b, 0x3f, 0x52, 0x75, 0x9a, 0x1a, 0xa8, 0xd2, 0x22, 0xcf, 0x7c, 0x15, 0x79, - 0xf1, 0x5a, 0xd5, 0xa7, 0x40, 0x64, 0x54, 0xff, 0x18, 0x2b, 0x77, 0x19, 0x5b, 0x00, 0x03, 0xe3, - 0x81, 0x81, 0x6a, 0x85, 0x11, 0x01, 0x9e, 0xe1, 0x6b, 0x0b, 0x9c, 0x3b, 0x27, 0xc6, 0xe2, 0x47, - 0x4f, 0xb0, 0xb1, 0x3c, 0x7c, 0xb1, 0x1b, 0xb1, 0xc8, 0x29, 0xce, 0x82, 0xd9, 0xee, 0x33, 0xfa, - 0x4d, 0x2c, 0xa2, 0xd4, 0xe7, 0xd3, 0x2a, 0x96, 0xbf, 0x0a, 0x4f, 0xa3, 0xe9, 0x0b, 0x19, 0x33, - 0x90, 0x89, 0x8d, 0x8a, 0xdf, 0xe2, 0xb1, 0x73, 0x7d, 0xde, 0xcc, 0x83, 0xd3, 0xe5, 0xba, 0x73, - 0xe2, 0x4b, 0x7b, 0x0f, 0x53, 0x66, 0x0c, 0xf2, 0xa7, 0xb6, 0xb0, 0x42, 0x78, 0xd8, 0x6f, 0x28, - 0xb7, 0x77, 0x7f, 0x56, 0xac, 0x48, 0x28, 0x8d, 0x88, 0x17, 0xb0, 0xd3, 0x3e, 0x1d, 0x25, 0xa6, - 0x78, 0x81, 0x00, 0xaa, 0xd6, 0x9d, 0xf6, 0x35, 0x2b, 0x0e, 0xfd, 0xff, 0x13, 0x57, 0xf9, 0x4a, - 0x86, 0xba, 0xe0, 0x8a, 0x5a, 0x3b, 0x10, 0xf0, 0xd8, 0xf8, 0xc4, 0xc2, 0xe6, 0x3f, 0x03, 0xd8, - 0x96, 0xb5, 0x8e, 0x32, 0x65, 0x0c, 0xe4, 0x76, 0xd9, 0xa9, 0xff, 0x85, 0x05, 0x13, 0xf8, 0xef, - 0xdb, 0x11, 0x04, 0x01, 0x60, 0xd1, 0x04, 0xc5, 0xa2, 0x0b, 0xb1, 0xb5, 0xbd, 0xc9, 0x77, 0xf8, - 0x42, 0xfa, 0xa6, 0xca, 0xac, 0x31, 0x86, 0xd0, 0x36, 0x52, 0xfd, 0x09, 0x68, 0x57, 0xab, 0xfd, - 0x5e, 0x4e, 0xbf, 0xbe, 0xbd, 0x5c, 0x12, 0x5d, 0x9b, 0x9f, 0x1f, 0xc4, 0x82, 0x92, 0x1f, 0x08, - 0x47, 0xdd, 0xcf, 0x83, 0x99, 0x45, 0x17, 0xde, 0x20, 0x94, 0x0e, 0x93, 0xf8, 0x52, 0x9b, 0xb1, - 0xba, 0x65, 0xb1, 0xd5, 0xb9, 0x72, 0x78, 0x59, 0xf3, 0x10, 0xfd, 0x71, 0x30, 0xa4, 0x9b, 0x71, - 0x3c, 0x6c, 0x20, 0xa3, 0x24, 0xe0, 0x9b, 0xcc, 0xbf, 0x79, 0x2c, 0xd5, 0x0c, 0x42, 0xc3, 0x22, - 0x97, 0xfb, 0xad, 0xfe, 0x08, 0xc4, 0x9a, 0x99, 0xf1, 0xa3, 0xf1, 0x22, 0x1d, 0xd3, 0xea, 0x9f, - 0x85, 0x2c, 0x0d, 0x0e, 0x93, 0x9e, 0x79, 0x66, 0x34, 0x31, 0x8f, 0x17, 0x89, 0xc7, 0xf8, 0x14, - 0x65, 0x1c, 0x02, 0x30, 0x50, 0x82, 0x36, 0xa3, 0xb8, 0x55, 0xf2, 0x94, 0x56, 0x80, 0xc4, 0x24, - 0x12, 0xdf, 0x98, 0x8d, 0x29, 0x98, 0x70, 0x60, 0xf8, 0x23, 0xee, 0xec, 0x7c, 0x13, 0x8b, 0x10, - 0xe0, 0xac, 0xa1, 0x80, 0xdb, 0x8a, 0xdd, 0xde, 0xb8, 0x50, 0x8e, 0xdb, 0x69, 0x49, 0xee, 0x95, - 0xab, 0xed, 0xbf, 0xc1, 0x69, 0x43, 0xa8, 0x0a, 0x60, 0xd0, 0x4e, 0xbe, 0x13, 0x88, 0x54, 0x39, - 0x6f, 0xfc, 0x40, 0x90, 0x53, 0x69, 0x64, 0xc9, 0x84, 0x06, 0x2a, 0xc5, 0xfe, 0x27, 0x5c, 0x48, - 0x40, 0xaa, 0x65, 0x62, 0xf2, 0x52, 0x0e, 0xfb, 0x52, 0xea, 0xe8, 0xcf, 0xc4, 0xc1, 0x6e, 0xa9, - 0xcb, 0x89, 0x0a, 0xcb, 0x42, 0xff, 0x85, 0x37, 0x90, 0xde, 0x86, 0x5a, 0x1e, 0x88, 0x0a, 0x4c, - 0xbb, 0xb9, 0xab, 0xcb, 0x3b, 0x83, 0x47, 0x78, 0x91, 0x20, 0xa6, 0xda, 0x5c, 0xc5, 0x1f, 0x1f, - 0x66, 0xac, 0xcf, 0x9f, 0x05, 0x42, 0xab, 0xee, 0x6c, 0x82, 0xc2, 0xbc, 0xae, 0xfc, 0x5f, 0x17, - 0x18, 0xd1, 0x26, 0x68, 0x50, 0xca, 0xde, 0x33, 0xc6, 0x79, 0x06, 0xba, 0x17, 0xdf, 0x58, 0xaf, - 0xad, 0x7c, 0x86, 0xd1, 0x10, 0xc7, 0xc2, 0xd5, 0xed, 0x4b, 0x4b, 0x03, 0x3e, 0xb6, 0xef, 0xff, - 0x04, 0xf4, 0x49, 0x19, 0x5e, 0xa4, 0xa7, 0xdf, 0x05, 0xd2, 0x53, 0x97, 0x07, 0xe5, 0x34, 0x63, - 0x93, 0x1f, 0x89, 0x10, 0x0a, 0x48, 0x59, 0x86, 0x03, 0x38, 0x2e, 0x70, 0x7c, 0x6f, 0xb9, 0x66, - 0xb3, 0x05, 0x99, 0x27, 0x07, 0xb8, 0x98, 0x2c, 0x2d, 0xb2, 0xb1, 0xb2, 0x86, 0x19, 0x66, 0xd2, - 0xb5, 0xcb, 0xe0, 0x9e, 0xa4, 0xc5, 0x92, 0xd1, 0xe0, 0x80, 0x25, 0xfb, 0xfc, 0x15, 0x90, 0xb6, - 0x7a, 0x90, 0x48, 0x98, 0xc0, 0x34, 0xec, 0x7d, 0xca, 0x96, 0x8f, 0xfb, 0xe0, 0xab, 0x77, 0x8a, - 0xde, 0xd2, 0x1a, 0x19, 0x59, 0xa6, 0xe7, 0xc1, 0x71, 0xc5, 0x62, 0x13, 0x13, 0x6b, 0xfa, 0x12, - 0x37, 0xf7, 0xc2, 0x87, 0x1d, 0x7c, 0x56, 0xa2, 0x17, 0xbb, 0x1e, 0x41, 0x7e, 0xd2, 0xf7, 0x7d, - 0xdb, 0xef, 0xc4, 0x89, 0x04, 0x95, 0x9d, 0x43, 0x17, 0x1d, 0xe2, 0x44, 0x82, 0xc2, 0x13, 0xa0, - 0x74, 0x06, 0x85, 0x08, 0xbd, 0x6b, 0xcb, 0x97, 0xe2, 0x04, 0x02, 0xbd, 0xa8, 0x85, 0x4b, 0x3e, - 0x05, 0x1d, 0x00, 0x05, 0xa1, 0xda, 0x2c, 0x0a, 0x74, 0x9f, 0xe0, 0x9f, 0x37, 0x2d, 0x35, 0x26, - 0x10, 0x82, 0xcf, 0xdc, 0x48, 0x85, 0xaf, 0x12, 0x20, 0xf9, 0x7d, 0x2b, 0x5e, 0x23, 0x51, 0x14, - 0x68, 0x38, 0x81, 0x20, 0x9f, 0x3d, 0x34, 0x26, 0xa9, 0x23, 0xbe, 0x20, 0x11, 0x5d, 0xdd, 0xff, - 0xf0, 0x5d, 0x94, 0xc5, 0xee, 0xe3, 0xac, 0xb6, 0xf8, 0x22, 0x10, 0x2f, 0x31, 0x70, 0x09, 0x7c, - 0x27, 0x60, 0x28, 0x72, 0x48, 0x66, 0x1d, 0x63, 0x33, 0x0f, 0xfe, 0x8b, 0x07, 0xd5, 0xa7, 0xe8, - 0xbd, 0x3f, 0x44, 0xa8, 0xbe, 0xad, 0x5c, 0x39, 0x77, 0xd6, 0x6a, 0x2c, 0xff, 0x12, 0x16, 0x86, - 0x30, 0x12, 0x07, 0x25, 0xef, 0x22, 0xf1, 0x72, 0x30, 0x1f, 0xa2, 0x9f, 0xf8, 0x4c, 0xa6, 0x9f, - 0xbb, 0x56, 0x5e, 0x58, 0x61, 0x88, 0x7c, 0x95, 0xcb, 0x3e, 0xab, 0x84, 0x42, 0x82, 0x28, 0x4e, - 0xea, 0xb1, 0xd4, 0xed, 0xc4, 0x31, 0x0e, 0x2a, 0x66, 0x51, 0x6c, 0xf7, 0x9c, 0x8c, 0x17, 0xf7, - 0xe2, 0x03, 0x20, 0xae, 0x78, 0xfc, 0xb7, 0x3d, 0x80, 0xfc, 0x68, 0xf3, 0xe4, 0xea, 0xe0, 0xff, - 0xdd, 0xb7, 0x12, 0x20, 0x13, 0x15, 0x41, 0xb6, 0x9d, 0x03, 0x2f, 0x7e, 0x7d, 0xfe, 0x3e, 0xee, - 0xef, 0x6f, 0x10, 0xb0, 0xdd, 0x48, 0x46, 0x00, 0x00, 0xf1, 0x20, 0xba, 0x2b, 0x40, 0x77, 0x77, - 0xbf, 0x3f, 0xd7, 0xab, 0x12, 0x61, 0x35, 0x63, 0x38, 0x00, 0xe2, 0x20, 0x92, 0x5e, 0x61, 0x53, - 0x81, 0xec, 0x71, 0xfe, 0x24, 0x29, 0x55, 0x66, 0xe0, 0xc7, 0xea, 0xc6, 0x71, 0x5f, 0x7b, 0x4c, - 0x04, 0x4e, 0xc1, 0xaf, 0x26, 0x2b, 0x47, 0x78, 0x9f, 0xc1, 0x59, 0x0d, 0xd2, 0x40, 0xd4, 0xdd, - 0xc9, 0x1a, 0xc6, 0x6d, 0xe2, 0x8e, 0xdf, 0x04, 0x25, 0x64, 0x65, 0xc6, 0x52, 0x34, 0x63, 0xe2, - 0x41, 0x29, 0xe9, 0x4e, 0xa2, 0xe5, 0x53, 0x0d, 0xfe, 0x08, 0xc9, 0x5b, 0x27, 0xac, 0x48, 0x48, - 0xce, 0xf7, 0x17, 0x53, 0x42, 0x7c, 0x11, 0x5a, 0xc6, 0x4c, 0x7f, 0x88, 0x82, 0xa3, 0x92, 0xd2, - 0xb3, 0x90, 0x63, 0x20, 0xdd, 0xc5, 0xc5, 0xd4, 0x5d, 0x86, 0x22, 0x08, 0xad, 0x20, 0x94, 0xdc, - 0x82, 0x02, 0x50, 0x3a, 0xc4, 0x42, 0x84, 0x56, 0x5c, 0xe4, 0x12, 0x0a, 0x4b, 0x0a, 0x08, 0x4c, - 0x30, 0x18, 0x73, 0x48, 0xc8, 0xa0, 0x1e, 0x3f, 0x90, 0xcb, 0x2a, 0xbe, 0x1e, 0x92, 0xa7, 0x2f, - 0x47, 0x90, 0x3c, 0x83, 0x08, 0x78, 0xde, 0x94, 0x29, 0xf8, 0xb4, 0xd2, 0xb1, 0x7e, 0xd3, 0x43, - 0xc6, 0x2c, 0xd1, 0x1b, 0x4a, 0x8f, 0xfc, 0x3b, 0x49, 0xaa, 0x06, 0x73, 0x17, 0xec, 0x70, 0x06, - 0xbc, 0x25, 0xf1, 0xe4, 0x74, 0x99, 0x9a, 0x44, 0xd6, 0xed, 0x37, 0x6d, 0xb9, 0x7a, 0x2c, 0x55, - 0xd5, 0xe1, 0x4e, 0x08, 0x44, 0x6a, 0xba, 0xf1, 0x20, 0x84, 0xf2, 0x80, 0x00, 0x48, 0x7a, 0x2a, - 0xf8, 0x50, 0xa3, 0x01, 0x02, 0x43, 0x89, 0x81, 0x94, 0x40, 0x69, 0xc3, 0xaa, 0x08, 0xc7, 0x94, - 0x68, 0xc0, 0xd6, 0x7a, 0xf8, 0xa3, 0x2a, 0x93, 0x24, 0xca, 0x25, 0x45, 0xf8, 0x60, 0x28, 0x45, - 0x8d, 0x48, 0x1a, 0x25, 0x41, 0x01, 0x6e, 0x4e, 0x23, 0x84, 0xda, 0xbf, 0x96, 0x64, 0x77, 0xfc, - 0x48, 0x50, 0xa7, 0xa0, 0x00, 0x17, 0x2b, 0x2a, 0x87, 0x2a, 0x91, 0x36, 0x35, 0x1e, 0x84, 0x9e, - 0xf5, 0x69, 0x82, 0x75, 0x5b, 0x6e, 0x02, 0xf7, 0xc6, 0x54, 0xdd, 0x75, 0x62, 0x51, 0xe1, 0x01, - 0xd1, 0x2c, 0xfa, 0x43, 0x79, 0xf1, 0x77, 0x77, 0x75, 0x1c, 0x42, 0xcf, 0x84, 0x2d, 0xdf, 0x66, - 0xd7, 0x65, 0xb0, 0x58, 0x18, 0xf3, 0xb7, 0x82, 0xdb, 0xdd, 0x13, 0x6c, 0x1e, 0xbe, 0xfa, 0x3f, - 0xfe, 0x28, 0x8d, 0xf4, 0x9d, 0xdb, 0x30, 0x00, 0x38, 0x98, 0x22, 0x2b, 0xee, 0x3b, 0x1d, 0xf1, - 0x00, 0xb0, 0x8f, 0xcc, 0x4a, 0xa0, 0x3d, 0x26, 0xe8, 0xed, 0x2f, 0x0c, 0x06, 0xfb, 0xf2, 0xfc, - 0x11, 0x9c, 0xe1, 0x86, 0xfc, 0xce, 0x26, 0x0a, 0x7a, 0x21, 0x59, 0xd7, 0xc8, 0xf5, 0x49, 0x44, - 0x38, 0x3b, 0x96, 0x7f, 0x8b, 0xa1, 0xee, 0xd6, 0x5c, 0xe2, 0x46, 0x15, 0xdd, 0x4d, 0x8c, 0x09, - 0x09, 0xe4, 0x65, 0x54, 0x39, 0x30, 0xef, 0xe4, 0xa7, 0x82, 0xe2, 0x68, 0xcb, 0x87, 0x61, 0x0d, - 0x89, 0x24, 0x77, 0xc4, 0x90, 0x61, 0x20, 0xc3, 0xaf, 0x10, 0x14, 0x13, 0x69, 0xbb, 0x98, 0xd1, - 0x88, 0xb5, 0x0e, 0x5f, 0x74, 0xdf, 0x8e, 0xad, 0xe9, 0x57, 0x7c, 0x13, 0x69, 0x90, 0xc6, 0x2c, - 0x83, 0xf1, 0xec, 0xbc, 0x30, 0x88, 0x90, 0x5a, 0x79, 0x69, 0x43, 0x6e, 0x3f, 0x8f, 0x9f, 0x84, - 0x44, 0x82, 0x9a, 0x4e, 0x71, 0x9c, 0x71, 0xab, 0x2d, 0x73, 0x5c, 0x78, 0x89, 0xf2, 0xa7, 0x11, - 0x0a, 0x5b, 0x8f, 0x71, 0xc9, 0x3b, 0x53, 0x55, 0x50, 0x93, 0xab, 0x8e, 0xa1, 0xad, 0x60, 0x00, - 0x13, 0xd3, 0xc1, 0x86, 0x7e, 0x9d, 0x71, 0x20, 0x94, 0x85, 0x83, 0xe4, 0x6b, 0xa0, 0x56, 0xff, - 0xf9, 0x04, 0x3e, 0xed, 0xf8, 0x7e, 0x61, 0x8d, 0x06, 0x7f, 0x31, 0x10, 0x40, 0x11, 0xc5, 0x17, - 0x2c, 0xec, 0x74, 0x2d, 0x1a, 0x30, 0x10, 0x76, 0xe6, 0x46, 0x47, 0xf2, 0xe8, 0x25, 0x48, 0x1b, - 0xff, 0xd1, 0xf5, 0x2f, 0x46, 0x6f, 0xa2, 0xb7, 0xd5, 0xa4, 0xea, 0xd5, 0xd5, 0xa7, 0xea, 0xf3, - 0x70, 0xe9, 0x1c, 0x70, 0x79, 0x18, 0xe5, 0x14, 0xa0, 0xa7, 0xf6, 0x61, 0x75, 0x31, 0x9c, 0x54, - 0x08, 0xca, 0x49, 0x3f, 0xfc, 0xa5, 0x46, 0x4a, 0x25, 0x12, 0xe0, 0x86, 0xaa, 0x3c, 0xb2, 0xfe, - 0x20, 0x29, 0x26, 0x25, 0x78, 0x94, 0xa8, 0xdf, 0x87, 0xbe, 0x33, 0x61, 0xf0, 0xd5, 0x37, 0x19, - 0x45, 0xd6, 0x6c, 0x3c, 0x3e, 0x30, 0xcf, 0x66, 0xb5, 0xe9, 0x9c, 0x61, 0x61, 0x46, 0xeb, 0xc4, - 0x76, 0xb2, 0x4e, 0x34, 0x6a, 0x5b, 0xa0, 0x72, 0xdb, 0x0f, 0x1e, 0x5a, 0x63, 0x80, 0xe0, 0x2d, - 0x63, 0x79, 0xc3, 0xf2, 0xb3, 0x21, 0xef, 0x05, 0x78, 0xcc, 0x7a, 0x3d, 0x8c, 0x14, 0x27, 0x30, - 0x75, 0x73, 0x0e, 0x33, 0xe0, 0xa4, 0xe3, 0xa2, 0x24, 0xd3, 0x77, 0x3a, 0x2f, 0xaf, 0xa1, 0xb3, - 0x1d, 0x93, 0x03, 0x65, 0x20, 0x3e, 0x2f, 0x12, 0x0a, 0xe7, 0x08, 0x03, 0x65, 0xb2, 0xc0, 0xe4, - 0x1b, 0x38, 0xc1, 0xcc, 0xc1, 0xc0, 0x1d, 0xdf, 0x05, 0xb2, 0x94, 0x43, 0x63, 0x19, 0xe5, 0x32, - 0xa0, 0xea, 0x08, 0x23, 0x03, 0x07, 0xff, 0x44, 0x7e, 0x26, 0x42, 0xf1, 0xf5, 0xe2, 0x7e, 0x08, - 0xa2, 0xbe, 0xdf, 0x5a, 0xf8, 0xcb, 0xcf, 0xe8, 0x57, 0x79, 0x79, 0x48, 0x37, 0x5a, 0x1f, 0xab, - 0xf8, 0x94, 0x4e, 0xf8, 0x25, 0xb4, 0x3e, 0xdc, 0x94, 0x4f, 0xc3, 0xe5, 0x0f, 0xff, 0xc1, 0x11, - 0x6c, 0xf0, 0x6d, 0xe9, 0x1f, 0xc4, 0x82, 0xb8, 0xd1, 0x0b, 0x90, 0xac, 0xc8, 0x38, 0xe3, 0x67, - 0x7a, 0x40, 0xd3, 0x27, 0x90, 0xbe, 0x17, 0xe1, 0xc7, 0x7f, 0x10, 0x20, 0x14, 0xda, 0x08, 0x02, - 0xe9, 0x12, 0x05, 0xa1, 0x69, 0xea, 0xc4, 0xbb, 0xfc, 0x28, 0x59, 0x1e, 0x53, 0x1a, 0x06, 0xf4, - 0x13, 0x22, 0x20, 0x6d, 0x21, 0xa5, 0x44, 0x8e, 0x32, 0x21, 0x85, 0x1d, 0x36, 0x35, 0xc2, 0xaf, - 0x88, 0x82, 0x1f, 0x3a, 0x87, 0xf8, 0x50, 0x8e, 0x53, 0x13, 0xa4, 0xd4, 0x94, 0x91, 0x82, 0xb0, - 0xd9, 0xf2, 0x9a, 0x76, 0x93, 0xe5, 0x58, 0x90, 0x58, 0x29, 0xee, 0x36, 0xae, 0xf9, 0xf0, 0xb7, - 0xeb, 0xe8, 0xa7, 0x05, 0xf2, 0x95, 0x6f, 0x15, 0xd5, 0xe3, 0x38, 0x70, 0x44, 0x6e, 0x83, 0xb8, - 0x7f, 0x5a, 0xba, 0xff, 0x86, 0x4e, 0xf0, 0xf6, 0x67, 0xaf, 0xd5, 0xef, 0xe0, 0x8a, 0x96, 0xdf, - 0x7c, 0x11, 0x59, 0x4a, 0xc7, 0x3f, 0xd5, 0xfe, 0xaf, 0xe2, 0x02, 0x82, 0x09, 0xda, 0x12, 0x37, - 0x15, 0xe3, 0xf5, 0x11, 0x65, 0x99, 0xe6, 0xec, 0xb5, 0x87, 0x72, 0xfe, 0x24, 0x14, 0x89, 0x67, - 0x7f, 0xb1, 0x23, 0x97, 0x8d, 0x39, 0xb9, 0xc6, 0x18, 0xfb, 0xc4, 0x84, 0xa6, 0x00, 0x00, 0xe4, - 0x82, 0x24, 0x01, 0x9f, 0x91, 0x47, 0x82, 0x7b, 0x49, 0xa7, 0xdd, 0xae, 0xf8, 0x28, 0xad, 0x73, - 0xc1, 0x2c, 0x77, 0xf1, 0x30, 0x4b, 0x8f, 0x23, 0x28, 0x64, 0x96, 0xb8, 0xed, 0xc4, 0x41, 0x59, - 0x4f, 0x81, 0xde, 0x0b, 0x7c, 0x78, 0x20, 0x87, 0x08, 0x37, 0x0c, 0x19, 0x51, 0x9f, 0xaa, 0x7f, - 0xaf, 0xfe, 0xaf, 0xe2, 0x57, 0x23, 0xbe, 0x11, 0x04, 0xdc, 0x68, 0x21, 0x5d, 0x79, 0x58, 0xb9, - 0x9b, 0xc4, 0x96, 0x5d, 0xda, 0xf4, 0x6e, 0xf1, 0x08, 0xbb, 0xfc, 0x13, 0xcb, 0xbb, 0x04, 0x64, - 0x30, 0x06, 0xf6, 0xf1, 0x21, 0x4a, 0xc6, 0x88, 0xcc, 0x3f, 0x7b, 0xdf, 0x49, 0xfc, 0x78, 0x91, - 0x7a, 0x65, 0xd8, 0xe9, 0x18, 0xfd, 0x0b, 0x12, 0x24, 0x22, 0x27, 0xbb, 0xa6, 0x1e, 0x48, 0x5b, - 0xbe, 0xf1, 0x90, 0x42, 0x20, 0x24, 0xc7, 0xff, 0x04, 0x66, 0xb3, 0xd1, 0xb9, 0x95, 0x3e, 0x09, - 0x8a, 0x5f, 0x4c, 0xea, 0xee, 0x65, 0x75, 0x8e, 0x7d, 0x12, 0xbe, 0x11, 0xf2, 0x56, 0x77, 0x59, - 0xb2, 0x81, 0x2f, 0xc2, 0x62, 0x8f, 0xa4, 0x96, 0x6e, 0xd2, 0x0d, 0x26, 0x03, 0xf0, 0xd1, 0x58, - 0x83, 0x69, 0x6e, 0x26, 0x10, 0xed, 0x28, 0xc1, 0x43, 0x23, 0xaf, 0x37, 0x71, 0x7d, 0x5a, 0xba, - 0xb4, 0xdd, 0x5a, 0xba, 0x2b, 0xde, 0x24, 0x28, 0x28, 0xea, 0x10, 0x65, 0x21, 0x2f, 0x45, 0xac, - 0x3c, 0x71, 0x91, 0xc3, 0xe6, 0xc8, 0x82, 0x62, 0x71, 0xf7, 0x77, 0xa7, 0xf1, 0x20, 0xa4, 0x48, - 0xa3, 0x6c, 0x28, 0xe9, 0xc2, 0xcb, 0xd3, 0x01, 0x92, 0xa3, 0x07, 0x27, 0x50, 0x6f, 0xf0, 0x5a, - 0x51, 0x83, 0x87, 0x40, 0x6c, 0x13, 0xba, 0x12, 0x59, 0x7c, 0x27, 0x18, 0x8c, 0x97, 0x18, 0xc0, - 0x85, 0x40, 0xc5, 0x40, 0xd8, 0x6c, 0x0f, 0xc6, 0x6d, 0x29, 0xa9, 0x17, 0xe2, 0xe6, 0xa5, 0x1e, - 0x7e, 0x33, 0x65, 0x71, 0x42, 0x2d, 0xc2, 0xea, 0xdc, 0x6d, 0xfc, 0x20, 0x0a, 0xba, 0xd8, 0xea, - 0xd4, 0xde, 0x4f, 0xef, 0x10, 0x0b, 0x84, 0xb6, 0x84, 0xeb, 0xe3, 0x9d, 0x37, 0x7e, 0x26, 0x0a, - 0xca, 0xe2, 0xb1, 0x99, 0x0b, 0x70, 0x72, 0x51, 0x23, 0xab, 0x4e, 0x32, 0x99, 0xf9, 0xe2, 0x41, - 0x35, 0x73, 0x04, 0x03, 0x92, 0x11, 0xd8, 0xef, 0xc1, 0x11, 0xb2, 0xb1, 0x7e, 0x26, 0x0a, 0xca, - 0xcb, 0xba, 0x14, 0xec, 0x59, 0x2b, 0x1f, 0x5c, 0x4c, 0x16, 0xdc, 0xe0, 0x00, 0x11, 0x0b, 0x05, - 0xb9, 0x48, 0x32, 0x06, 0x05, 0xf8, 0x98, 0x25, 0x95, 0x22, 0x37, 0x86, 0x02, 0xda, 0x20, 0xec, - 0x71, 0x44, 0x04, 0xab, 0xf8, 0x23, 0x8e, 0x0c, 0x3a, 0x37, 0x10, 0xb3, 0x95, 0x0e, 0xfc, 0x12, - 0x93, 0x4d, 0xb7, 0xbb, 0xf7, 0x88, 0x04, 0xfa, 0x56, 0xaa, 0x2e, 0xaf, 0xf1, 0xc6, 0x74, 0xb0, - 0xaa, 0xc9, 0x5b, 0x39, 0x95, 0x51, 0x3c, 0x2f, 0xe2, 0x02, 0x82, 0xe8, 0x8c, 0x41, 0x99, 0xc6, - 0x9e, 0xc5, 0x65, 0x6e, 0xe4, 0x24, 0xa6, 0x09, 0xab, 0xb1, 0x5e, 0xef, 0x82, 0xc8, 0xf8, 0x40, - 0x5b, 0x86, 0x08, 0xcf, 0xac, 0x98, 0x22, 0xa1, 0xe0, 0x14, 0x6d, 0xec, 0xe3, 0xfd, 0x61, 0xbc, - 0x40, 0x25, 0xb0, 0x19, 0x43, 0x01, 0xb1, 0xc0, 0xc6, 0x2d, 0xf9, 0xc7, 0x10, 0x09, 0xb1, 0xb6, - 0xdc, 0x19, 0x87, 0x2a, 0x90, 0x96, 0xe8, 0x15, 0xe3, 0x8e, 0xbe, 0x4b, 0x2d, 0x1a, 0xf1, 0x20, - 0x96, 0x1f, 0x5e, 0x42, 0xa3, 0x95, 0x57, 0x6a, 0xd4, 0xb1, 0xa6, 0x7b, 0xc4, 0x82, 0x3e, 0xa8, - 0x7a, 0x2b, 0xf1, 0x3c, 0x48, 0x44, 0x12, 0x65, 0x56, 0xcb, 0xef, 0x8b, 0x32, 0xaa, 0xaa, 0x11, - 0x76, 0x64, 0x9e, 0x62, 0x20, 0x33, 0x28, 0x7f, 0xd1, 0xce, 0x08, 0x9e, 0xaf, 0xf5, 0x68, 0xce, - 0x08, 0x06, 0x26, 0x16, 0x13, 0x05, 0xea, 0xcc, 0xe3, 0x2a, 0x32, 0xa5, 0xb4, 0x6f, 0x7f, 0x18, - 0x83, 0x1e, 0x3d, 0x93, 0x87, 0x7f, 0xbf, 0x88, 0x05, 0xa5, 0x99, 0x4d, 0x91, 0x86, 0x0a, 0xaa, - 0xbf, 0xc1, 0x48, 0x98, 0xb2, 0x49, 0xb3, 0x6c, 0x2d, 0x64, 0x9e, 0x51, 0xde, 0x26, 0x14, 0xf9, - 0xd8, 0x90, 0xca, 0x7d, 0xe5, 0x31, 0x9c, 0xa2, 0x0d, 0xcc, 0x3f, 0xd1, 0x7b, 0xe1, 0x4a, 0xb7, - 0xf2, 0xd9, 0x01, 0x00, 0x5b, 0x8f, 0x61, 0x6d, 0x0a, 0xc4, 0x74, 0x02, 0x88, 0x76, 0xf8, 0x25, - 0x32, 0xf2, 0x62, 0xeb, 0xbf, 0xc2, 0x05, 0x43, 0x33, 0x19, 0x30, 0x56, 0x80, 0x8f, 0x51, 0xae, - 0x9c, 0x99, 0x89, 0x82, 0xa1, 0x0a, 0xaa, 0xac, 0x61, 0x5c, 0x92, 0x63, 0x14, 0xcf, 0x71, 0x11, - 0x62, 0x74, 0x9d, 0xc5, 0x67, 0xc1, 0x5d, 0xf1, 0x00, 0xb6, 0xd3, 0x68, 0xbb, 0x4e, 0x81, 0xa1, - 0x8e, 0xdc, 0x40, 0x80, 0xa7, 0x9c, 0x10, 0x05, 0xce, 0xa9, 0x1c, 0x1c, 0xc9, 0x39, 0x93, 0x0d, - 0x22, 0x0a, 0xaa, 0x33, 0xaf, 0x2e, 0x20, 0x40, 0x26, 0xa0, 0x32, 0x88, 0x0b, 0xd7, 0x9b, 0x2e, - 0xe2, 0x04, 0x2b, 0x78, 0x80, 0x57, 0x1f, 0xa6, 0xd5, 0x0e, 0x3f, 0x73, 0x80, 0xab, 0x63, 0x30, - 0xdb, 0xf1, 0x02, 0x1c, 0xcc, 0x08, 0xe2, 0xcf, 0x85, 0x09, 0x41, 0xbb, 0x6d, 0xa1, 0xb6, 0xec, - 0xae, 0xf4, 0xce, 0xae, 0x3e, 0xf1, 0x00, 0x8c, 0xa2, 0xeb, 0x56, 0xf1, 0x02, 0x8d, 0x96, 0x05, - 0xa3, 0xdf, 0xe8, 0xb5, 0xf0, 0x53, 0xcb, 0x42, 0xd2, 0x1a, 0x3b, 0xbc, 0x0d, 0xd8, 0x7d, 0xf5, - 0x6f, 0xa2, 0xbf, 0xc1, 0x6d, 0x0f, 0x51, 0x5b, 0xb8, 0xad, 0xbe, 0x32, 0xf9, 0x51, 0x36, 0x35, - 0x33, 0x07, 0xd0, 0xcb, 0x50, 0x8d, 0xef, 0xa7, 0x6d, 0x1b, 0xca, 0xe9, 0x7c, 0x29, 0x44, 0xaa, - 0xa7, 0xfc, 0xd7, 0x35, 0x13, 0xa0, 0xd7, 0x20, 0x42, 0x2f, 0xe7, 0x88, 0x17, 0x62, 0x46, 0x42, - 0x2e, 0x0c, 0x3a, 0xb2, 0xe2, 0x01, 0x44, 0x79, 0x13, 0xcb, 0xb5, 0x29, 0x78, 0xf0, 0xf1, 0x0b, - 0x07, 0xd7, 0xbe, 0xad, 0x5c, 0xa2, 0x87, 0x70, 0xd4, 0x18, 0x4a, 0xf5, 0x4f, 0x47, 0xf9, 0x5d, - 0x5d, 0x13, 0xd7, 0x51, 0x1d, 0x7b, 0xc4, 0x82, 0xc1, 0x4c, 0x21, 0x34, 0x91, 0x3f, 0x61, 0x4d, - 0xc4, 0x41, 0x00, 0x4f, 0x0c, 0x09, 0x82, 0xf8, 0x86, 0x55, 0x25, 0xdf, 0x12, 0x5b, 0x73, 0x98, - 0x3f, 0x36, 0x26, 0x67, 0xc4, 0x82, 0xc9, 0xd4, 0x27, 0x75, 0x5a, 0xb1, 0xb9, 0x98, 0xbf, 0xf8, - 0x90, 0x89, 0x5c, 0xb8, 0x44, 0x37, 0x6c, 0xff, 0xc6, 0xe4, 0x77, 0x98, 0xe2, 0x44, 0x8c, 0xa7, - 0x00, 0x60, 0xeb, 0x50, 0xd1, 0x85, 0xdd, 0xeb, 0x93, 0x67, 0x2a, 0x31, 0x94, 0x0a, 0xef, 0xa0, - 0x02, 0x70, 0xab, 0xb4, 0x19, 0xec, 0xb1, 0x30, 0xa1, 0x46, 0x16, 0x4e, 0xfd, 0x06, 0x85, 0x0c, - 0x32, 0x06, 0xaa, 0x93, 0x38, 0xb4, 0xed, 0x9d, 0xad, 0xc3, 0xf2, 0xca, 0x07, 0xf1, 0x21, 0x1c, - 0x79, 0xd1, 0x9a, 0x09, 0x86, 0x59, 0x50, 0x1a, 0xb0, 0x68, 0xbe, 0x88, 0x3b, 0xfc, 0x48, 0x2c, - 0xe4, 0xeb, 0x33, 0x08, 0x73, 0x5d, 0x6f, 0xe2, 0x41, 0x17, 0x6d, 0xa1, 0xdf, 0xc4, 0xc1, 0x29, - 0x15, 0x6b, 0x55, 0xff, 0xe0, 0xbb, 0x4e, 0xee, 0xed, 0xdf, 0xe3, 0x2d, 0xea, 0x86, 0x3d, 0x8e, - 0x26, 0x66, 0xcf, 0xb7, 0x37, 0xc4, 0xc7, 0x1d, 0x9b, 0x4f, 0x43, 0x4d, 0x0c, 0xbf, 0x92, 0x3e, - 0xaf, 0xc4, 0x41, 0x35, 0x33, 0xc3, 0xad, 0xb7, 0xfa, 0xbf, 0x89, 0x56, 0x78, 0x90, 0x44, 0x47, - 0xcc, 0x93, 0xbe, 0x2e, 0xab, 0xd4, 0x70, 0xe1, 0xf8, 0xc3, 0xa4, 0xb6, 0x9c, 0x73, 0xd4, 0xcd, - 0x13, 0xb1, 0x72, 0x3e, 0xb7, 0xf6, 0xa9, 0xf0, 0x53, 0xa9, 0xf7, 0x41, 0x0c, 0x88, 0x12, 0x59, - 0xcd, 0x50, 0x7b, 0x8e, 0xde, 0x25, 0x5f, 0xe0, 0x9c, 0xa8, 0x9d, 0x9a, 0xb7, 0x4d, 0x03, 0x22, - 0xfe, 0x14, 0x9f, 0x3e, 0x77, 0x21, 0xa1, 0xa6, 0x4c, 0x0c, 0x55, 0xa6, 0x7c, 0xdd, 0x3f, 0xcb, - 0x31, 0x7d, 0xfc, 0x12, 0xd4, 0x5c, 0xd4, 0x3a, 0xc6, 0x56, 0x37, 0x3e, 0xb1, 0xfe, 0x4c, 0x66, - 0x3d, 0x81, 0xfe, 0x22, 0x5b, 0x77, 0x15, 0xb5, 0x3b, 0x8f, 0x0f, 0x04, 0x64, 0xa9, 0xc6, 0x1c, - 0x89, 0xf0, 0x46, 0x5d, 0x11, 0xeb, 0x5f, 0x05, 0xb5, 0xad, 0x77, 0x29, 0xcf, 0x8f, 0x1c, 0x39, - 0x4b, 0x8c, 0xa9, 0xeb, 0x89, 0x60, 0xe1, 0xda, 0xd9, 0x32, 0x64, 0x5e, 0x8c, 0x56, 0xbd, 0x1d, - 0xe1, 0x3e, 0x6d, 0xe5, 0x87, 0x12, 0x0a, 0x8c, 0xa3, 0x9a, 0x0a, 0x9b, 0x90, 0x1a, 0xf5, 0x6e, - 0x3a, 0x5d, 0xbd, 0xdd, 0x0f, 0x0f, 0x10, 0x0a, 0xfa, 0xaa, 0xaa, 0xd5, 0x55, 0x55, 0xfe, 0xaf, - 0xe2, 0x10, 0x96, 0xe2, 0x28, 0xcd, 0xf2, 0xf3, 0x47, 0xe0, 0x84, 0x6b, 0x8a, 0xdc, 0x56, 0x91, - 0x71, 0x3e, 0x20, 0x14, 0x1b, 0x4c, 0xec, 0x6d, 0x26, 0xff, 0x35, 0xdd, 0xf8, 0x88, 0x22, 0xdd, - 0xdd, 0xbc, 0x48, 0x27, 0xcf, 0x8d, 0xcd, 0x6b, 0xff, 0x82, 0x8d, 0xe7, 0xc4, 0xb7, 0x6f, 0x85, - 0x08, 0x9d, 0x18, 0xe3, 0x65, 0x6d, 0xcd, 0xeb, 0x93, 0x0b, 0xa9, 0xb9, 0x8a, 0xd0, 0xeb, 0xbf, - 0x11, 0x45, 0x7f, 0x8c, 0xaa, 0x93, 0x34, 0x97, 0xdd, 0xd5, 0x17, 0xe8, 0x95, 0xc4, 0x88, 0x5f, - 0xfd, 0x89, 0xdd, 0xfc, 0x10, 0xdd, 0xdf, 0xdf, 0x15, 0x6f, 0xbd, 0xde, 0xb8, 0x23, 0xd1, 0x5f, - 0xea, 0xe2, 0xea, 0xd2, 0x03, 0x4e, 0x99, 0x5f, 0x3e, 0x4b, 0x09, 0x2b, 0xf8, 0x21, 0xb4, 0xf6, - 0xe7, 0x3e, 0xa9, 0x7c, 0x4a, 0xe1, 0xf0, 0x50, 0x49, 0xe1, 0x2f, 0xa0, 0x29, 0xbb, 0x57, 0x45, - 0x8a, 0xf8, 0x91, 0x80, 0xaa, 0xee, 0x33, 0x96, 0x18, 0x18, 0x52, 0x39, 0x72, 0xf2, 0xb1, 0xe8, - 0x4c, 0x65, 0x73, 0x1e, 0xee, 0xe4, 0xe8, 0xd5, 0x80, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x26, - 0x13, 0x30, 0x32, 0x80, 0xd1, 0xc5, 0x8f, 0xda, 0x6b, 0x69, 0xa1, 0x7d, 0x90, 0x9c, 0xbd, 0x36, - 0xf5, 0xcc, 0x45, 0x75, 0x70, 0x23, 0xc4, 0x06, 0x06, 0x88, 0xa1, 0x81, 0x88, 0xd3, 0x8a, 0x86, - 0xe1, 0xe2, 0xe1, 0x16, 0x24, 0x37, 0x8d, 0x42, 0x3a, 0x05, 0x77, 0x54, 0x0e, 0xf9, 0xef, 0x0a, - 0x03, 0x1f, 0xaa, 0x42, 0x1e, 0x32, 0xf4, 0x0d, 0x6a, 0xd8, 0x00, 0x11, 0x31, 0x2c, 0x8f, 0x86, - 0xbe, 0x33, 0xcf, 0x4d, 0x91, 0xac, 0x56, 0x7e, 0x6e, 0x5f, 0x1e, 0x20, 0x30, 0x10, 0xed, 0xc8, - 0xb0, 0x8e, 0x45, 0x14, 0xb2, 0x2a, 0xf6, 0x43, 0x18, 0xc1, 0x03, 0x3f, 0xad, 0x83, 0x5c, 0x48, - 0xd9, 0x46, 0xe4, 0x6d, 0x17, 0x46, 0xc3, 0x4a, 0x90, 0x30, 0x08, 0x01, 0x4c, 0x8b, 0xc8, 0xf6, - 0xe8, 0xd0, 0x99, 0x1a, 0x15, 0x16, 0x97, 0x57, 0x44, 0x33, 0xc8, 0x00, 0xd1, 0xb3, 0x32, 0xa7, - 0xf9, 0x25, 0x06, 0x5c, 0x6a, 0xe8, 0x0e, 0xb3, 0x34, 0x7f, 0xc4, 0x85, 0x08, 0x3f, 0xe6, 0x24, - 0x36, 0x4a, 0xb2, 0x7d, 0x83, 0x20, 0x96, 0x9a, 0x50, 0x01, 0xd6, 0x7e, 0x2b, 0xf1, 0x46, 0x70, - 0xf3, 0xb0, 0x7a, 0xc0, 0xeb, 0xfd, 0x2f, 0x43, 0x6e, 0x41, 0x07, 0x47, 0x22, 0x42, 0x1c, 0x28, - 0x12, 0x6c, 0xb3, 0x83, 0xa5, 0xd7, 0x11, 0xc4, 0x90, 0x88, 0x0a, 0xcb, 0xb0, 0x76, 0xee, 0xef, - 0x39, 0x79, 0x1a, 0x9b, 0xe3, 0x36, 0x28, 0xce, 0x70, 0xb1, 0xdd, 0xb9, 0x7c, 0x51, 0xa6, 0x2b, - 0x14, 0x75, 0x89, 0x1e, 0x7b, 0xf1, 0x02, 0x10, 0x9e, 0x9b, 0x94, 0xe9, 0x4b, 0x85, 0xcc, 0x30, - 0x20, 0x10, 0x0a, 0x77, 0x77, 0xda, 0x6b, 0x80, 0x2b, 0x8d, 0xf1, 0x01, 0xb2, 0xa7, 0x2d, 0x34, - 0xd3, 0x5f, 0x88, 0x08, 0x02, 0xb2, 0x3d, 0xe7, 0xdb, 0x7d, 0xc8, 0x00, 0x2e, 0xd2, 0x53, 0x01, - 0x23, 0x24, 0x0a, 0xb9, 0x2c, 0x5c, 0x48, 0x80, 0x46, 0x26, 0xd0, 0x04, 0xcd, 0x4c, 0x30, 0xc1, - 0xaf, 0xe8, 0x63, 0xa1, 0x71, 0x57, 0x52, 0x5f, 0x58, 0x63, 0xd5, 0x22, 0x15, 0xd5, 0x32, 0xf5, - 0x4c, 0x97, 0x58, 0xbe, 0x08, 0xbc, 0x6a, 0x91, 0x78, 0x60, 0x60, 0x49, 0xd6, 0x52, 0xd6, 0x56, - 0x58, 0x0d, 0x4c, 0x19, 0xe3, 0x8c, 0x0d, 0x39, 0x77, 0x2f, 0x2c, 0x69, 0x15, 0xb3, 0xdc, 0x3c, - 0x7f, 0x12, 0x36, 0x2b, 0x34, 0xc1, 0xd7, 0xca, 0xfa, 0x06, 0xb3, 0x19, 0xcd, 0xef, 0xa4, 0x0b, - 0x4f, 0x9e, 0x79, 0x20, 0x29, 0x83, 0xc7, 0xb9, 0xef, 0xb6, 0xf9, 0xa1, 0x5f, 0x10, 0xe4, 0xe9, - 0xcc, 0xa7, 0xd0, 0x4c, 0xa9, 0x7c, 0xc2, 0x06, 0x10, 0x44, 0xc0, 0xc4, 0x60, 0xb0, 0x2e, 0xe2, - 0x3e, 0x86, 0x38, 0xf0, 0xa1, 0x48, 0x18, 0x0c, 0x01, 0x08, 0xb0, 0xb0, 0x20, 0x5f, 0x6d, 0xc5, - 0x39, 0x1b, 0x25, 0x55, 0xe1, 0x02, 0xae, 0xf7, 0x0b, 0x5e, 0x20, 0x69, 0x48, 0xa5, 0xec, 0x1e, - 0x0e, 0xc5, 0xc4, 0xc7, 0xce, 0x04, 0x01, 0x26, 0x97, 0x2a, 0x02, 0x25, 0x6b, 0xe6, 0x35, 0x6b, - 0x7f, 0xad, 0x03, 0x3b, 0xea, 0x11, 0xd0, 0x99, 0x7e, 0x4d, 0x4f, 0x88, 0x18, 0x21, 0xee, 0x17, - 0xeb, 0x93, 0x4f, 0xe5, 0x7b, 0x44, 0x3c, 0xb7, 0xc3, 0x03, 0x8f, 0x8f, 0x19, 0x6e, 0xee, 0xe6, - 0x80, 0xa6, 0xcc, 0x02, 0x21, 0xf7, 0xdd, 0x4c, 0x7d, 0x4f, 0x6a, 0x06, 0x7a, 0x17, 0x84, 0x9d, - 0x19, 0x87, 0xaf, 0x4f, 0xd0, 0x94, 0xab, 0xd5, 0x32, 0xf5, 0xef, 0xaf, 0x7c, 0x12, 0x45, 0xc5, - 0xc5, 0xc5, 0xcc, 0xa3, 0x88, 0x10, 0x14, 0x08, 0x08, 0x7d, 0x75, 0x38, 0x38, 0x49, 0x40, 0x5f, - 0xc5, 0xcf, 0xf1, 0x7c, 0x80, 0x81, 0x19, 0x8d, 0x7e, 0x16, 0xc9, 0x49, 0xa6, 0x14, 0xe1, 0x62, - 0x0f, 0x1b, 0x07, 0x50, 0x1f, 0x8e, 0x8b, 0xe3, 0x77, 0x36, 0xbf, 0xe2, 0x62, 0xb9, 0xfc, 0x1d, - 0xf9, 0xa2, 0xda, 0x9a, 0x13, 0x10, 0x08, 0x6e, 0xc7, 0x2b, 0x0f, 0xf0, 0x56, 0x53, 0xf2, 0xf2, - 0xfb, 0x51, 0x7d, 0x33, 0xa9, 0xef, 0xf0, 0x44, 0x34, 0x45, 0x40, 0xb8, 0x89, 0x04, 0xbc, 0xb1, - 0xaa, 0xc4, 0x88, 0x31, 0xb6, 0x9d, 0x70, 0x88, 0xc6, 0xcb, 0x28, 0xa6, 0xf7, 0x15, 0xee, 0xfe, - 0x09, 0x45, 0x88, 0xcf, 0xf0, 0x16, 0x9e, 0x77, 0x14, 0x2c, 0x1a, 0x88, 0xc7, 0x28, 0xf6, 0x8e, - 0x5b, 0x71, 0xcd, 0x2f, 0x42, 0xde, 0x10, 0xea, 0x9d, 0xbe, 0x84, 0x3f, 0xd1, 0x5e, 0x4e, 0x8e, - 0x5e, 0x49, 0xd1, 0x1c, 0x89, 0xe0, 0xa8, 0x60, 0x18, 0xa0, 0x31, 0x95, 0x4d, 0x5e, 0xd3, 0xd8, - 0x16, 0xcb, 0x65, 0xb3, 0xf7, 0xba, 0x0f, 0xc7, 0x86, 0x46, 0x11, 0xea, 0x8e, 0x00, 0x58, 0x61, - 0x09, 0xc0, 0xb0, 0x90, 0xc9, 0xe7, 0xd2, 0x03, 0xe0, 0xf3, 0x0e, 0x85, 0xb2, 0x0c, 0x65, 0xe8, - 0xf3, 0xc5, 0x37, 0xc2, 0x18, 0x09, 0xe1, 0x20, 0xf1, 0x20, 0xae, 0xf6, 0x09, 0xd1, 0x82, 0x1e, - 0x14, 0x1f, 0x7a, 0x84, 0xca, 0x50, 0x48, 0x8a, 0x69, 0x64, 0x05, 0x47, 0x41, 0x65, 0x47, 0x6f, - 0x82, 0x10, 0x9c, 0xec, 0x3f, 0xff, 0xa9, 0x5f, 0xf0, 0x4e, 0x30, 0xdc, 0x73, 0x3b, 0x60, 0xa7, - 0x0a, 0x82, 0xd0, 0xe1, 0xfe, 0xf8, 0x23, 0x10, 0x66, 0x13, 0x94, 0xd1, 0xdf, 0x85, 0x07, 0xa8, - 0x99, 0x8a, 0x97, 0xb3, 0x7d, 0xb9, 0x03, 0xb7, 0x60, 0x65, 0x0c, 0x07, 0xff, 0xc1, 0x46, 0xe5, - 0x65, 0xa0, 0x87, 0x87, 0x1c, 0xa7, 0x38, 0x98, 0x28, 0x19, 0xe1, 0x2b, 0x5c, 0x14, 0xc9, 0x08, - 0x67, 0x0a, 0x3b, 0x41, 0xc7, 0x66, 0xc0, 0x47, 0x39, 0xc4, 0xc1, 0x4e, 0x14, 0x88, 0x80, 0x6a, - 0x90, 0x89, 0x8e, 0x43, 0x12, 0x2a, 0xc2, 0x1a, 0xc2, 0x6a, 0x39, 0x03, 0x25, 0x29, 0x1a, 0x16, - 0xda, 0x5b, 0x43, 0xe8, 0xef, 0xc1, 0x50, 0xd7, 0x42, 0xf8, 0xaf, 0x18, 0x96, 0xc5, 0xc4, 0x61, - 0x30, 0xb4, 0x43, 0xfd, 0xca, 0x41, 0x15, 0x96, 0xef, 0xe1, 0x14, 0x24, 0x89, 0x7d, 0x12, 0xab, - 0xa3, 0x41, 0xf0, 0x45, 0x55, 0x77, 0x97, 0xca, 0x27, 0x3d, 0x0f, 0x47, 0xc2, 0x33, 0xd0, 0xf4, - 0xcf, 0x43, 0xd3, 0x3d, 0x0f, 0x4f, 0xc4, 0xf3, 0xd0, 0xf4, 0xe7, 0xa1, 0xe9, 0xe1, 0x19, 0xe8, - 0x7a, 0x67, 0xa1, 0xe9, 0x9e, 0x87, 0xa6, 0x23, 0xa3, 0x62, 0x1e, 0x8e, 0xe5, 0xf5, 0x6b, 0xea, - 0xe0, 0xbd, 0x19, 0x92, 0xf4, 0x24, 0xa9, 0x7d, 0x47, 0x6f, 0x82, 0x71, 0x1a, 0x11, 0xbc, 0x71, - 0x30, 0x6e, 0x6c, 0x73, 0x82, 0x91, 0xe2, 0x01, 0x80, 0x8b, 0xbb, 0xd0, 0x27, 0x3f, 0x52, 0xc2, - 0x58, 0x22, 0xfe, 0x20, 0x28, 0x40, 0x9c, 0x26, 0x78, 0x58, 0x0f, 0xe5, 0x42, 0xf4, 0x17, 0x01, - 0x55, 0x87, 0x07, 0x91, 0x76, 0x07, 0xe5, 0x09, 0x0a, 0xf5, 0x87, 0x42, 0x5a, 0x32, 0x0b, 0xd0, - 0x3a, 0x2f, 0x42, 0x80, 0x3d, 0x4f, 0x03, 0x8a, 0x93, 0x08, 0x00, 0xad, 0x4b, 0xe4, 0x3f, 0xc6, - 0x0b, 0x6e, 0x24, 0x22, 0x14, 0xd9, 0x78, 0x7b, 0x30, 0x94, 0x2c, 0x19, 0x15, 0xb1, 0x94, 0xe5, - 0x7e, 0x58, 0xfa, 0xdf, 0x1e, 0x3b, 0x72, 0x75, 0x26, 0xe1, 0xcd, 0x7f, 0x82, 0x40, 0x9b, 0xbe, - 0x90, 0x3d, 0x4a, 0x8a, 0xbc, 0x16, 0x05, 0x9c, 0xe4, 0xc4, 0x56, 0x5b, 0xc6, 0x81, 0x89, 0x00, - 0xcb, 0x0a, 0xc5, 0x6c, 0x9a, 0xf5, 0x87, 0xe2, 0x41, 0x28, 0xb6, 0xfb, 0x83, 0x89, 0x7a, 0x68, - 0x6f, 0xff, 0xd4, 0x40, 0x90, 0x88, 0x83, 0x14, 0x88, 0xa2, 0x01, 0x43, 0x64, 0x56, 0x59, 0x32, - 0x4a, 0x1c, 0x69, 0x0d, 0x7f, 0xbf, 0x77, 0xe1, 0x01, 0x2c, 0x26, 0x18, 0xb6, 0xc0, 0x07, 0xb9, - 0x4e, 0x5f, 0x38, 0x8f, 0x12, 0xa4, 0x4f, 0xaf, 0x7d, 0x1a, 0xbe, 0xbd, 0xf5, 0xc2, 0xba, 0x3b, - 0xa3, 0xfa, 0x3b, 0x17, 0xd1, 0x1c, 0x89, 0xe8, 0x93, 0x3e, 0x8e, 0x74, 0xbe, 0xa7, 0x49, 0x3a, - 0x25, 0x7d, 0x4b, 0x7c, 0x2e, 0x29, 0x45, 0xd4, 0x7c, 0x99, 0x08, 0x9f, 0x0a, 0x96, 0x15, 0x46, - 0x03, 0x05, 0x16, 0x60, 0x4d, 0xc6, 0x89, 0x75, 0x75, 0x75, 0xaa, 0x78, 0x98, 0xd2, 0x5a, 0x00, - 0x56, 0x53, 0x99, 0x57, 0x8f, 0x80, 0xb0, 0xed, 0xa3, 0xe3, 0x8f, 0x83, 0x05, 0xaa, 0x58, 0x34, - 0x20, 0x02, 0xc9, 0x74, 0x72, 0x49, 0x58, 0xfb, 0x5a, 0x77, 0xbd, 0x41, 0x61, 0x5c, 0xaf, 0xc1, - 0x11, 0xd1, 0x71, 0x3b, 0xac, 0x94, 0xf8, 0x50, 0xc1, 0xcb, 0x94, 0x1e, 0xa2, 0xe2, 0xc6, 0xfe, - 0xc9, 0x5d, 0x18, 0xbc, 0x93, 0x32, 0xc1, 0x92, 0x8e, 0x0f, 0x71, 0x7e, 0x6c, 0x29, 0x49, 0xcf, - 0x93, 0x4c, 0xb8, 0xdf, 0x88, 0x87, 0xcb, 0x37, 0x5d, 0xc6, 0x21, 0x5f, 0x87, 0x5f, 0x17, 0x0e, - 0xca, 0x1b, 0x6a, 0x59, 0x6b, 0x52, 0xc2, 0x98, 0x30, 0xf7, 0x2f, 0xe5, 0xd6, 0xf1, 0x30, 0x41, - 0x89, 0xf8, 0x44, 0xd4, 0x93, 0x64, 0xe5, 0x98, 0x2a, 0x4c, 0x58, 0x32, 0xdd, 0x2c, 0x4d, 0x45, - 0xb8, 0xdd, 0x82, 0x34, 0x17, 0x4c, 0x9b, 0xfe, 0x27, 0xb4, 0x30, 0x13, 0xf9, 0xc8, 0xc4, 0x59, - 0x80, 0x3f, 0x04, 0x56, 0x35, 0xd9, 0xc4, 0xc1, 0x64, 0x56, 0x82, 0x8e, 0xe4, 0x6e, 0x83, 0x58, - 0x9d, 0x36, 0x0b, 0xdf, 0x05, 0x25, 0x00, 0x73, 0x66, 0xc6, 0x2f, 0x4c, 0xec, 0x8d, 0xfd, 0x8e, - 0xb6, 0xe7, 0xd6, 0x20, 0x48, 0xee, 0xd5, 0x71, 0x20, 0xf7, 0xfc, 0xbe, 0x0c, 0x06, 0xd7, 0xa2, - 0xf3, 0x4c, 0xc2, 0x65, 0x94, 0x44, 0xcf, 0x54, 0xed, 0x2f, 0xf1, 0x28, 0xa4, 0x2a, 0xe8, 0x45, - 0x7d, 0x1c, 0x89, 0xf5, 0xc2, 0x7e, 0xbd, 0xf5, 0x78, 0x53, 0xaf, 0x57, 0x58, 0xa4, 0xe8, 0x85, - 0x4f, 0xa9, 0xd2, 0xfa, 0xe1, 0xf0, 0xa0, 0xc4, 0xc3, 0x83, 0x1b, 0x11, 0x52, 0x50, 0x5d, 0x05, - 0xea, 0x71, 0x0b, 0xa9, 0x64, 0xae, 0xb5, 0x6b, 0x13, 0x20, 0xbf, 0xd8, 0x6c, 0xe3, 0x87, 0x4b, - 0x01, 0xe7, 0x10, 0x40, 0x8f, 0x6d, 0xa5, 0xfe, 0x14, 0x23, 0x88, 0xc9, 0x49, 0x90, 0xe8, 0xb0, - 0x6b, 0xdb, 0x61, 0xe1, 0x48, 0x79, 0xa0, 0xf2, 0xc3, 0xb9, 0xa4, 0x49, 0x56, 0x7f, 0x27, 0x5e, - 0x10, 0xf6, 0xfe, 0x7e, 0x87, 0xf2, 0x1c, 0x49, 0x3a, 0xe6, 0x63, 0xc2, 0x85, 0x07, 0x7c, 0x44, - 0x32, 0x85, 0x60, 0xf7, 0xbe, 0xb8, 0x00, 0xd9, 0x11, 0x83, 0x42, 0xf6, 0x9d, 0x62, 0xc8, 0x3f, - 0x1f, 0x87, 0xf2, 0xcc, 0x97, 0x89, 0x38, 0x4e, 0x4c, 0x8a, 0x9f, 0x0a, 0x45, 0x56, 0x20, 0xfb, - 0xd1, 0x86, 0x94, 0xbb, 0xd6, 0xb0, 0x40, 0xa8, 0x1a, 0xe6, 0x4e, 0x48, 0xb9, 0xa2, 0x49, 0x61, - 0x02, 0x13, 0xc0, 0x02, 0x33, 0x1b, 0x84, 0x8a, 0xf1, 0xfe, 0x24, 0x14, 0xfd, 0xce, 0x68, 0x5b, - 0x2d, 0x93, 0x2c, 0x44, 0xac, 0x3c, 0x62, 0xd3, 0x7c, 0x8e, 0x2f, 0x1d, 0xf1, 0x21, 0x42, 0x5b, - 0xde, 0xc6, 0x2e, 0x0e, 0xac, 0x55, 0xb1, 0x0a, 0x19, 0x60, 0x18, 0x50, 0x80, 0x01, 0x38, 0x8b, - 0x1f, 0x09, 0x51, 0x01, 0x47, 0x16, 0xd0, 0x2a, 0x4d, 0x96, 0x39, 0x45, 0xc2, 0x49, 0x1b, 0x4a, - 0x9f, 0x12, 0x0a, 0x42, 0x20, 0x98, 0x91, 0xe7, 0x3e, 0x80, 0x55, 0x81, 0xe6, 0x60, 0x64, 0x72, - 0x50, 0x5e, 0xab, 0xaa, 0x78, 0x8e, 0x84, 0x8e, 0xaf, 0xa3, 0x35, 0xf5, 0xa8, 0xde, 0xad, 0x15, - 0xd4, 0xcb, 0x3e, 0xa3, 0xb7, 0xd1, 0x32, 0xbe, 0x8a, 0x9d, 0x3e, 0x11, 0x08, 0x42, 0x38, 0xa5, - 0xdd, 0x71, 0x07, 0x2a, 0x63, 0x12, 0xff, 0x0a, 0x6c, 0x6b, 0xcf, 0x27, 0xb2, 0xe9, 0x28, 0xb9, - 0x78, 0xc2, 0x01, 0x4e, 0x3b, 0x1e, 0x57, 0xf8, 0xff, 0x82, 0x31, 0x2e, 0x20, 0xa8, 0x56, 0x62, - 0x72, 0xf1, 0x21, 0x42, 0x08, 0xfb, 0x4c, 0x43, 0x85, 0x99, 0x1d, 0xb1, 0xd1, 0x76, 0xf8, 0xe0, - 0xe1, 0xb5, 0x6e, 0x9c, 0x92, 0x2a, 0x5b, 0x6c, 0x1f, 0xdf, 0x88, 0x12, 0x3f, 0xb0, 0x40, 0x13, - 0xe4, 0x1d, 0x2a, 0x0d, 0x6e, 0x13, 0x69, 0x89, 0xd8, 0x7b, 0x0e, 0xd8, 0x71, 0x01, 0x42, 0xeb, - 0xc7, 0x82, 0x80, 0x74, 0x07, 0x54, 0x19, 0x32, 0x0c, 0xfa, 0x44, 0x46, 0x12, 0x50, 0x83, 0x20, - 0xc4, 0x66, 0x3d, 0x96, 0x04, 0xcc, 0x9c, 0x6b, 0xea, 0xf1, 0x00, 0x9a, 0xd6, 0xbe, 0x7d, 0x85, - 0x7f, 0x12, 0x09, 0xc5, 0x12, 0x44, 0x23, 0x43, 0x06, 0x29, 0x76, 0x19, 0xf1, 0x20, 0x22, 0x14, - 0xff, 0x12, 0x13, 0x70, 0x00, 0x5e, 0x49, 0xe8, 0xb3, 0x0c, 0x08, 0xc6, 0xea, 0x39, 0x1c, 0x14, - 0xf4, 0x58, 0xbe, 0xa3, 0xb2, 0xfd, 0x48, 0x51, 0x3d, 0x53, 0x23, 0xf5, 0x1f, 0x57, 0x44, 0x31, - 0xbe, 0xa9, 0x50, 0xde, 0x08, 0xeb, 0x5b, 0x1f, 0x54, 0xaf, 0xd6, 0x53, 0x75, 0xab, 0xe0, 0x9c, - 0x28, 0x27, 0xce, 0xd4, 0x5a, 0x4a, 0x50, 0x12, 0x09, 0x05, 0x28, 0xd0, 0x10, 0xdc, 0xab, 0xe0, - 0x2c, 0xcc, 0x98, 0xf8, 0x50, 0xb0, 0xe4, 0xa0, 0x72, 0x1c, 0x41, 0x61, 0x06, 0x0c, 0x74, 0x58, - 0x0e, 0xac, 0x64, 0x9e, 0x46, 0xc0, 0x5f, 0x2c, 0xe0, 0x1a, 0x36, 0x99, 0x98, 0xf5, 0xd0, 0xc0, - 0x02, 0x9f, 0xbc, 0x18, 0x1a, 0x58, 0x46, 0xfc, 0xa3, 0x60, 0x35, 0x89, 0x20, 0x67, 0x6e, 0x60, - 0xcc, 0x08, 0xb0, 0xf0, 0xc3, 0xc4, 0x8c, 0xdb, 0xdb, 0xb8, 0xae, 0xb6, 0x40, 0x76, 0x19, 0x01, - 0x23, 0x60, 0xf1, 0x36, 0xa9, 0x36, 0x22, 0x4c, 0xbd, 0xe3, 0x81, 0xc4, 0x29, 0xee, 0x20, 0xb7, - 0x7b, 0x7e, 0x24, 0x15, 0x9c, 0xa3, 0x05, 0xbe, 0x7c, 0x0a, 0x21, 0x01, 0x12, 0x3a, 0x39, 0x70, - 0x69, 0x3e, 0x5c, 0x42, 0x47, 0x52, 0xce, 0xf8, 0x52, 0xee, 0x79, 0xc3, 0x02, 0x00, 0x94, 0xc6, - 0x67, 0xf3, 0x22, 0x99, 0x87, 0x1d, 0xc3, 0xb9, 0x49, 0x45, 0xdc, 0x06, 0x29, 0xda, 0x57, 0x9a, - 0xa9, 0x2a, 0xc4, 0x45, 0xc9, 0x13, 0x0f, 0x50, 0x7d, 0x95, 0x31, 0xa5, 0xce, 0x9f, 0x82, 0x52, - 0x6a, 0xb3, 0xcf, 0x59, 0x73, 0xc4, 0x82, 0x38, 0x55, 0xa5, 0x65, 0xb1, 0x5b, 0xd7, 0x28, 0x46, - 0x76, 0x0f, 0x4b, 0x5d, 0x53, 0xb5, 0xd4, 0x89, 0x7d, 0x5c, 0x04, 0xba, 0xbf, 0xc1, 0x1e, 0xee, - 0xe9, 0x17, 0x90, 0xce, 0xff, 0xab, 0xfd, 0x52, 0xa7, 0xd1, 0x5a, 0x2b, 0x9e, 0x3a, 0xae, 0xee, - 0xff, 0xe1, 0xcb, 0x0d, 0x83, 0x3a, 0x54, 0xe9, 0x6e, 0x1c, 0xc2, 0xb3, 0x7f, 0xf0, 0xa0, 0x40, - 0x87, 0x76, 0x38, 0x2a, 0x90, 0x87, 0x48, 0x2a, 0x48, 0xb8, 0x60, 0xab, 0x08, 0x22, 0xe3, 0x69, - 0xef, 0xb2, 0xde, 0x33, 0xe3, 0x48, 0x17, 0x60, 0xec, 0x1a, 0xc1, 0x37, 0x82, 0xe7, 0x9a, 0x3e, - 0xe3, 0x52, 0x3b, 0x28, 0x5c, 0x1b, 0xa7, 0xe8, 0x46, 0x35, 0xf5, 0x45, 0x61, 0xaa, 0x42, 0x27, - 0x49, 0xc9, 0x0f, 0x7c, 0x97, 0x76, 0x35, 0x06, 0x4a, 0x51, 0x5e, 0xa4, 0xb4, 0xca, 0x50, 0x50, - 0x30, 0x47, 0xde, 0x6a, 0xc2, 0xa6, 0x3c, 0x84, 0x5f, 0x81, 0x53, 0x96, 0xe0, 0x33, 0x22, 0x85, - 0xfe, 0x3d, 0xd1, 0xdf, 0x22, 0xc7, 0xe3, 0xa9, 0xe1, 0xd7, 0xa4, 0xf8, 0xdc, 0x6e, 0x25, 0x93, - 0x7e, 0xae, 0x00, 0x33, 0x22, 0x76, 0xeb, 0x93, 0x38, 0x6b, 0xef, 0xd8, 0x26, 0x78, 0xd1, 0xac, - 0x49, 0x12, 0x53, 0xae, 0xb0, 0x57, 0x01, 0xbf, 0xe5, 0x30, 0xfb, 0x68, 0x7b, 0x6b, 0x34, 0xcc, - 0x69, 0xb9, 0x3b, 0xff, 0x53, 0x6d, 0x5e, 0x3f, 0xc3, 0xd4, 0xf9, 0x1d, 0xcc, 0x0b, 0xdf, 0x07, - 0xf1, 0xdd, 0x59, 0x39, 0xfb, 0xb9, 0x45, 0xf8, 0x26, 0x3a, 0xb0, 0xb3, 0x51, 0x8e, 0x27, 0xec, - 0x5d, 0x01, 0xb6, 0xc2, 0x16, 0xa9, 0x6f, 0x8c, 0x24, 0x40, 0xb6, 0x08, 0x5d, 0x10, 0x33, 0xb3, - 0x19, 0x05, 0xc0, 0xb2, 0x21, 0x75, 0xea, 0x4b, 0x1f, 0x7a, 0x3e, 0x1c, 0x31, 0x82, 0xf1, 0xb3, - 0x02, 0x1f, 0x69, 0xd1, 0x89, 0xc0, 0x61, 0x2f, 0xee, 0xa1, 0x29, 0x06, 0x70, 0x78, 0x23, 0xe3, - 0xcf, 0x8d, 0xe6, 0x0a, 0xea, 0x9c, 0xf1, 0xe8, 0x27, 0xeb, 0xc9, 0x2c, 0x1a, 0x6d, 0x16, 0xdb, - 0x47, 0xc7, 0x8d, 0x28, 0xb1, 0x36, 0x04, 0xb7, 0xc8, 0x10, 0x18, 0x24, 0xcd, 0x10, 0xdb, 0x9d, - 0x10, 0xf7, 0x48, 0x35, 0xd0, 0x06, 0xc3, 0x70, 0xcd, 0xe2, 0xfe, 0x0d, 0x1b, 0x23, 0x02, 0x4e, - 0x99, 0x3e, 0xdf, 0x82, 0xb1, 0x8d, 0x5e, 0x5c, 0x57, 0x8f, 0x8b, 0x27, 0xcb, 0xd8, 0xa5, 0x45, - 0x5b, 0xd7, 0x25, 0xb0, 0x42, 0x78, 0xfa, 0x4e, 0x10, 0x1e, 0xbe, 0x2d, 0xfe, 0x24, 0x28, 0x7c, - 0x04, 0xb5, 0xa2, 0x05, 0xad, 0x1d, 0x8a, 0x92, 0x57, 0x9f, 0x9a, 0xe7, 0x23, 0xc8, 0xfe, 0x39, - 0xab, 0x10, 0xc1, 0x41, 0x06, 0xe0, 0xbd, 0x63, 0x65, 0x09, 0xaa, 0x70, 0x6e, 0x38, 0x80, 0x53, - 0x49, 0x92, 0x26, 0x4f, 0x66, 0xc5, 0x23, 0x76, 0xd4, 0x63, 0x26, 0x1e, 0x10, 0x14, 0xd9, 0x82, - 0x00, 0xe1, 0x2d, 0x63, 0x2c, 0xa8, 0xf0, 0xf4, 0x61, 0x93, 0xd1, 0x4f, 0x87, 0x02, 0xb9, 0x72, - 0x23, 0xb6, 0xf3, 0xd3, 0x1f, 0xec, 0xdc, 0xb1, 0x5f, 0x2f, 0x45, 0x4b, 0x08, 0x74, 0x21, 0x92, - 0x74, 0x7c, 0x22, 0xfa, 0x16, 0xe7, 0xc2, 0xe2, 0xad, 0x8c, 0xca, 0x69, 0x5a, 0x36, 0xc4, 0x64, - 0x10, 0x37, 0x86, 0x02, 0x3b, 0x1d, 0xfb, 0x6d, 0xc5, 0xbe, 0x24, 0x30, 0x29, 0x0d, 0x2c, 0xa6, - 0x98, 0x88, 0x91, 0x2c, 0x86, 0x29, 0x78, 0x82, 0x85, 0x78, 0xbf, 0xfe, 0x36, 0x80, 0x85, 0x1b, - 0x4d, 0x26, 0xf4, 0x8d, 0xe5, 0x50, 0x82, 0xb4, 0x61, 0xaa, 0x00, 0xdc, 0xc1, 0xf1, 0x01, 0x4b, - 0xd1, 0x9d, 0xf0, 0xe6, 0x17, 0xe4, 0xda, 0x7c, 0x48, 0xd2, 0x15, 0xa9, 0x55, 0x28, 0xaf, 0xae, - 0x01, 0x93, 0x0a, 0x41, 0x10, 0x6f, 0xa4, 0x24, 0x77, 0x04, 0xd7, 0x3a, 0xc1, 0xa6, 0xbb, 0xb5, - 0x42, 0xe1, 0x64, 0x44, 0x82, 0xb8, 0xe9, 0xdc, 0x81, 0xb5, 0x63, 0x38, 0xcb, 0x08, 0x9f, 0x6c, - 0x23, 0xef, 0xad, 0x38, 0x97, 0x7f, 0x89, 0x1a, 0x20, 0xcd, 0xba, 0xb2, 0x17, 0xfb, 0x8a, 0x8b, - 0x7f, 0x6b, 0x50, 0xdb, 0x8a, 0x0e, 0x3e, 0x17, 0x9b, 0xe9, 0x8c, 0x94, 0x81, 0xef, 0x2d, 0x7e, - 0x1b, 0xbf, 0x89, 0x0a, 0x09, 0x8d, 0x52, 0x08, 0xf6, 0x44, 0xac, 0x58, 0x56, 0x33, 0x60, 0xa3, - 0x0d, 0x4f, 0xcf, 0x45, 0x17, 0xc1, 0x51, 0x1c, 0x65, 0x2b, 0xd0, 0x89, 0x85, 0x47, 0x2c, 0x8f, - 0x76, 0xc8, 0xd2, 0xe0, 0x85, 0xdb, 0xbe, 0x64, 0x8a, 0x1b, 0x80, 0x71, 0x29, 0x94, 0xff, 0xf5, - 0xba, 0x89, 0x19, 0xb2, 0x6b, 0x85, 0xf1, 0xb5, 0xd0, 0xa2, 0x6e, 0x9a, 0xaa, 0x88, 0x30, 0xc4, - 0x1d, 0xdd, 0x5e, 0x85, 0x0a, 0x87, 0xc9, 0xce, 0x20, 0xa6, 0x5d, 0x87, 0x5d, 0xa0, 0xd9, 0xd8, - 0xa0, 0x12, 0x2c, 0xb4, 0xa1, 0xb2, 0x82, 0x84, 0x25, 0xc7, 0x25, 0xdd, 0x4c, 0xcb, 0xfb, 0x51, - 0x94, 0xcb, 0xc9, 0xdc, 0xf9, 0x1f, 0x82, 0x93, 0xe8, 0x08, 0x0e, 0xe2, 0x23, 0xda, 0xe9, 0xc1, - 0xb1, 0xef, 0x09, 0xcd, 0x47, 0xf8, 0x2c, 0x29, 0x59, 0xcb, 0x22, 0xb1, 0x61, 0x47, 0x43, 0x07, - 0x66, 0x32, 0x84, 0xf1, 0x20, 0x94, 0x65, 0xea, 0x28, 0xc9, 0xc1, 0x64, 0x4e, 0x09, 0xb0, 0xf6, - 0x04, 0xc2, 0xb0, 0x7c, 0x15, 0xd3, 0x64, 0x8a, 0xd0, 0x1e, 0x47, 0x0b, 0x23, 0x1d, 0x15, 0x52, - 0x8a, 0x2a, 0x74, 0x69, 0x03, 0x52, 0x41, 0x00, 0x0b, 0x5c, 0x8a, 0xa8, 0xbb, 0xe9, 0xcf, 0x86, - 0xc2, 0x36, 0x35, 0x82, 0x7b, 0xf0, 0xc4, 0xca, 0x98, 0xb6, 0xfe, 0xa2, 0x2c, 0x48, 0xf2, 0x63, - 0x5c, 0x98, 0xc2, 0x7d, 0x0c, 0xaf, 0xae, 0x5f, 0x04, 0x7b, 0xde, 0x09, 0x7a, 0xbd, 0x75, 0x79, - 0x7a, 0xbf, 0xc1, 0x15, 0x83, 0x39, 0x14, 0xbc, 0xab, 0xae, 0x73, 0xe8, 0x98, 0xca, 0xe1, 0xc3, - 0xcc, 0x80, 0xec, 0x2a, 0x07, 0x1a, 0x50, 0xc5, 0x5a, 0x5f, 0xc4, 0x82, 0xc3, 0x61, 0x94, 0x40, - 0xc3, 0x25, 0x3e, 0x80, 0xf6, 0xb9, 0x9c, 0xb0, 0x82, 0x4e, 0x2d, 0xa8, 0x18, 0xe0, 0xff, 0x8d, - 0xb8, 0x77, 0x5c, 0x0a, 0x16, 0xef, 0xb5, 0x0d, 0xc1, 0x05, 0x59, 0x4e, 0x9f, 0xb4, 0x5c, 0x52, - 0x10, 0x11, 0x16, 0x7e, 0x6f, 0x5e, 0x20, 0x28, 0x43, 0x42, 0x58, 0x95, 0x4c, 0xc3, 0x02, 0x41, - 0x83, 0x28, 0x68, 0x1e, 0xa4, 0x18, 0x24, 0x8e, 0x16, 0x34, 0xbc, 0x1e, 0x60, 0xcf, 0x8d, 0x32, - 0xe3, 0x2a, 0x89, 0xba, 0xd6, 0x31, 0xe5, 0x2d, 0x88, 0x54, 0x3a, 0xc7, 0x70, 0x8a, 0x39, 0x68, - 0x0f, 0x64, 0xe2, 0xc6, 0x8a, 0x0f, 0x41, 0x8a, 0x79, 0xd4, 0xb4, 0x30, 0x17, 0xb8, 0xdd, 0x8e, - 0x39, 0x42, 0xdc, 0xdb, 0x9a, 0x47, 0x02, 0xaf, 0x35, 0x06, 0xd1, 0x51, 0x7e, 0x14, 0xbe, 0x04, - 0x80, 0x3e, 0xa2, 0x9a, 0xae, 0x06, 0xa3, 0x9a, 0x26, 0xa5, 0xb8, 0xee, 0xe5, 0xde, 0xda, 0xb2, - 0x1d, 0x8e, 0xae, 0x67, 0x81, 0xd7, 0xb1, 0xd7, 0x8b, 0x17, 0x43, 0x58, 0x48, 0x3f, 0x10, 0xbc, - 0x13, 0xd5, 0x8d, 0xc1, 0x13, 0x7e, 0x41, 0xf2, 0x05, 0xb3, 0x1f, 0xf7, 0xc2, 0x83, 0x57, 0x91, - 0x1a, 0x5d, 0x58, 0x20, 0xc9, 0xc6, 0x22, 0xdb, 0x94, 0x52, 0x1a, 0x41, 0xaf, 0xd7, 0x7f, 0x0c, - 0xc2, 0x63, 0x60, 0xfd, 0x1d, 0x43, 0x46, 0x66, 0x31, 0x0f, 0x05, 0xc4, 0x19, 0x3e, 0xe5, 0x85, - 0x49, 0x75, 0xc4, 0x42, 0x82, 0x43, 0xec, 0x31, 0x95, 0x15, 0x49, 0xa2, 0x84, 0x96, 0xa2, 0x49, - 0x0e, 0xf6, 0x9c, 0xb1, 0x9c, 0xb0, 0xf8, 0x2c, 0x55, 0x8d, 0x4b, 0x0e, 0x2b, 0xc1, 0xe0, 0x30, - 0x9a, 0x73, 0x4c, 0x7c, 0x29, 0x52, 0x00, 0x21, 0x96, 0xd5, 0x14, 0xc6, 0x9a, 0x2b, 0xf5, 0xe8, - 0x1a, 0xde, 0xcd, 0xdf, 0x05, 0xb6, 0xcc, 0x45, 0xbb, 0x49, 0x02, 0x6c, 0x83, 0x0b, 0x7c, 0x29, - 0x74, 0x24, 0x68, 0x19, 0x03, 0x1b, 0xf6, 0x8d, 0x0e, 0x41, 0x01, 0xca, 0x10, 0xa7, 0x7d, 0xf0, - 0xa0, 0xc3, 0x66, 0xd3, 0x0a, 0xf0, 0x7f, 0x46, 0x5a, 0x91, 0x84, 0x2d, 0x09, 0x5b, 0x89, 0x42, - 0x81, 0xa3, 0x60, 0xea, 0x63, 0x25, 0xe1, 0x02, 0x99, 0xae, 0x97, 0xba, 0x54, 0x10, 0x17, 0xf8, - 0x40, 0x82, 0x2f, 0x45, 0xcd, 0xd4, 0xe2, 0x21, 0x9d, 0x08, 0xa2, 0xa1, 0x8d, 0x44, 0x2a, 0x6e, - 0xe4, 0xe6, 0xaf, 0x05, 0x81, 0x73, 0x65, 0x22, 0x31, 0x21, 0x89, 0x0f, 0xfa, 0xbe, 0x84, 0xbb, - 0x32, 0xf8, 0x80, 0x2f, 0x85, 0xad, 0x35, 0xf2, 0xe8, 0x8e, 0x0e, 0xe3, 0x69, 0x4f, 0x0f, 0x86, - 0xd1, 0xff, 0xe7, 0x84, 0xf0, 0xf9, 0x5a, 0x23, 0xa4, 0xd7, 0xc3, 0xf0, 0x97, 0x41, 0x0e, 0xfa, - 0x2e, 0x5f, 0x58, 0xaf, 0xa2, 0x43, 0x3e, 0xac, 0x1f, 0x44, 0x62, 0x27, 0xaf, 0x7c, 0x27, 0x26, - 0x7b, 0x73, 0xc3, 0x13, 0x05, 0x15, 0x26, 0x30, 0x40, 0x59, 0x2b, 0x41, 0x56, 0xa1, 0xab, 0x09, - 0x47, 0xe2, 0x44, 0x02, 0xc9, 0x87, 0x2a, 0x96, 0xfc, 0xb2, 0x75, 0xb0, 0x08, 0x4d, 0x61, 0xd4, - 0xaf, 0x5e, 0x24, 0x16, 0x58, 0xee, 0x3e, 0x2e, 0x04, 0xb4, 0x1b, 0x36, 0x1c, 0x82, 0xfc, 0xd4, - 0x02, 0x0b, 0xdf, 0xc4, 0x02, 0x18, 0xe8, 0x68, 0x1d, 0x60, 0x5f, 0xca, 0x0f, 0x8c, 0x10, 0x80, - 0x42, 0x0c, 0x6d, 0x1e, 0x93, 0x78, 0xc1, 0xbc, 0x83, 0x98, 0x5a, 0x1e, 0xe5, 0x93, 0x61, 0x17, - 0xb8, 0xb7, 0xb0, 0x73, 0x47, 0x86, 0x03, 0xc4, 0x05, 0x0b, 0x86, 0xde, 0xe0, 0xd8, 0x1e, 0x46, - 0x4d, 0x0c, 0x83, 0x34, 0x55, 0x8f, 0xfa, 0x52, 0x68, 0x47, 0x32, 0x1f, 0xb8, 0x89, 0xeb, 0xe5, - 0xe2, 0x42, 0x82, 0xf6, 0x88, 0x59, 0xb4, 0xa6, 0x6a, 0x06, 0xf3, 0xa4, 0xe7, 0xe4, 0xa9, 0x55, - 0x56, 0xd4, 0x9d, 0xf1, 0xb8, 0xba, 0x77, 0xa7, 0xab, 0x70, 0x1a, 0x7f, 0x89, 0x20, 0xfc, 0xe2, - 0xa7, 0x07, 0x06, 0xf1, 0x85, 0x23, 0x2d, 0x15, 0x36, 0x7e, 0x14, 0x3a, 0xd9, 0x3a, 0x12, 0x0c, - 0x66, 0x11, 0x2d, 0x08, 0x0b, 0x82, 0x04, 0xea, 0x97, 0x95, 0x43, 0x80, 0x01, 0xb5, 0x86, 0x4b, - 0x80, 0xa0, 0x58, 0xe6, 0xb1, 0xca, 0x1e, 0x14, 0x28, 0x65, 0x3f, 0x56, 0xe3, 0x2d, 0xda, 0x4c, - 0xac, 0x59, 0x54, 0x3d, 0x13, 0xd8, 0xa9, 0xfb, 0xcc, 0x4e, 0x1e, 0x3e, 0x81, 0xb0, 0x86, 0xb5, - 0x45, 0x71, 0xa2, 0xca, 0xe9, 0x12, 0xc6, 0x05, 0x7d, 0xd8, 0xea, 0x17, 0x8e, 0x26, 0xac, 0x63, - 0x8f, 0x06, 0x85, 0xaf, 0x3b, 0x78, 0x1a, 0x17, 0x8f, 0x10, 0xae, 0x85, 0x39, 0x80, 0xd4, 0x70, - 0x08, 0x0a, 0x93, 0x56, 0x5f, 0xe1, 0x42, 0x3a, 0xaa, 0x16, 0xda, 0x90, 0xff, 0x38, 0x0e, 0x33, - 0x0e, 0xe5, 0x48, 0xe4, 0xf0, 0xb1, 0x3f, 0x2b, 0x87, 0x2e, 0xf8, 0x50, 0x97, 0xf2, 0xca, 0x80, - 0x02, 0x07, 0xe9, 0x52, 0x10, 0x01, 0x39, 0xda, 0x34, 0xac, 0x63, 0x7b, 0x8c, 0xc3, 0xa6, 0x27, - 0x07, 0x1d, 0x8e, 0x81, 0x21, 0xc9, 0x32, 0xc4, 0x42, 0x82, 0xe5, 0xa7, 0x55, 0xba, 0x66, 0x48, - 0xf4, 0x36, 0x68, 0xed, 0xcb, 0xc3, 0x1d, 0x7b, 0xe8, 0xa7, 0xbe, 0x8a, 0x9d, 0x7a, 0x2a, 0x75, - 0xe8, 0x8c, 0x7d, 0x4a, 0x0f, 0xa2, 0x37, 0xc1, 0x14, 0x70, 0x8e, 0x5d, 0x47, 0x51, 0xbe, 0xad, - 0xf5, 0x72, 0xf8, 0x68, 0xa6, 0x22, 0x4c, 0x76, 0xe3, 0x27, 0xee, 0xd9, 0x4c, 0x4c, 0xc2, 0xd7, - 0xc1, 0x00, 0x88, 0xe4, 0x5b, 0x14, 0x46, 0xf2, 0xc0, 0xea, 0xa1, 0x09, 0x46, 0x09, 0xe8, 0x20, - 0x0b, 0xff, 0x8c, 0xe3, 0xc3, 0x64, 0xb7, 0x1d, 0xb2, 0xd6, 0x70, 0x75, 0x55, 0xbf, 0xe2, 0x04, - 0x8d, 0x20, 0x5d, 0x7a, 0x13, 0x89, 0xe0, 0xe1, 0xc3, 0xda, 0x1e, 0xf5, 0x22, 0x1d, 0xe9, 0x17, - 0x82, 0x14, 0x76, 0x4b, 0x6e, 0x31, 0x52, 0xe0, 0x41, 0x28, 0x0f, 0x8d, 0x54, 0x45, 0xcf, 0xe5, - 0xaf, 0xf8, 0x25, 0x3d, 0x19, 0x14, 0xd1, 0x6f, 0x54, 0x40, 0xc0, 0xff, 0xf8, 0x2c, 0xb3, 0x60, - 0x20, 0xa3, 0xd1, 0x31, 0x39, 0x94, 0x4a, 0xba, 0xa0, 0x16, 0x93, 0xfc, 0x15, 0x4a, 0x08, 0x2e, - 0xf5, 0x0b, 0xcf, 0x24, 0x22, 0x1f, 0x14, 0xe3, 0xdc, 0xa4, 0x10, 0xa2, 0xe8, 0x21, 0x3b, 0x5a, - 0x31, 0xf0, 0xa0, 0x82, 0xd9, 0x63, 0x10, 0x38, 0x58, 0x3b, 0x4e, 0x09, 0x54, 0x0f, 0xd2, 0xf2, - 0x56, 0x04, 0x00, 0xd4, 0x16, 0x39, 0x60, 0xea, 0x6c, 0x7f, 0x8d, 0xa9, 0x49, 0x88, 0x0a, 0xda, - 0x23, 0x44, 0x09, 0x9f, 0x05, 0x67, 0x3d, 0x6a, 0x05, 0xd0, 0xa0, 0xcb, 0x30, 0x3b, 0xda, 0x01, - 0xc7, 0xcc, 0x38, 0x6e, 0x80, 0x3e, 0xb8, 0x0f, 0x30, 0x61, 0x2a, 0x43, 0xd5, 0x09, 0x54, 0xf3, - 0x8e, 0xf8, 0x80, 0xa0, 0x92, 0x27, 0xe3, 0x8b, 0x1e, 0x7f, 0xab, 0x0b, 0x44, 0xe6, 0x7b, 0x48, - 0x44, 0xf1, 0x4d, 0xd8, 0x41, 0x3a, 0x18, 0x09, 0xff, 0xc1, 0x56, 0x46, 0x9d, 0x57, 0x12, 0x86, - 0x1e, 0x54, 0x6a, 0xf4, 0xc5, 0x6e, 0x5a, 0x16, 0xd2, 0xbf, 0x09, 0x50, 0x16, 0x76, 0xa3, 0xaa, - 0x12, 0x3f, 0x04, 0x79, 0x11, 0x90, 0xa3, 0xa3, 0x4b, 0xf0, 0x5a, 0x73, 0x34, 0x8b, 0xb2, 0xed, - 0x12, 0xc2, 0xe8, 0x31, 0x57, 0x39, 0xa2, 0xe9, 0x2a, 0xf0, 0x4b, 0xdd, 0x22, 0x36, 0x59, 0x78, - 0x21, 0x3a, 0xf6, 0x9c, 0xe6, 0x5f, 0xe3, 0x6f, 0x69, 0xc7, 0x08, 0x39, 0x42, 0xa2, 0x57, 0x2d, - 0x4a, 0x90, 0x41, 0x58, 0xda, 0x1b, 0xe5, 0xf4, 0x38, 0x01, 0x7a, 0x89, 0x81, 0x00, 0xa3, 0xbf, - 0x68, 0x9d, 0xb9, 0xe2, 0x42, 0x86, 0x40, 0xc6, 0xd9, 0x7c, 0x02, 0x19, 0x71, 0x21, 0x28, 0x99, - 0x24, 0xf7, 0x7a, 0xbb, 0x79, 0x1d, 0xf8, 0x50, 0x8f, 0x23, 0xc8, 0x5f, 0xe3, 0x53, 0x2a, 0xab, - 0x05, 0x1c, 0x63, 0x36, 0x72, 0xb2, 0xee, 0xb5, 0x3f, 0xc2, 0x82, 0x90, 0xe8, 0x25, 0x0e, 0x9e, - 0x8b, 0x16, 0x98, 0x98, 0xf6, 0x83, 0x4c, 0x6f, 0x2c, 0x09, 0x9f, 0xb5, 0x89, 0xae, 0xdc, 0x6e, - 0x22, 0x2f, 0x67, 0xe7, 0x38, 0x95, 0x2d, 0x00, 0xcd, 0x86, 0xee, 0xa1, 0x80, 0x93, 0xa5, 0x87, - 0x11, 0x0c, 0x09, 0x2e, 0x4d, 0x6e, 0xf2, 0x75, 0x49, 0x83, 0xb8, 0xc5, 0x5f, 0xfc, 0x36, 0x26, - 0xcc, 0xd9, 0x5e, 0x5f, 0xc6, 0xd6, 0xfc, 0x3a, 0x5d, 0xa3, 0x66, 0x38, 0xbe, 0x38, 0x51, 0x46, - 0xbc, 0x6f, 0xbd, 0xf4, 0x39, 0x91, 0x1d, 0x09, 0x63, 0xeb, 0xaf, 0xa3, 0x54, 0x9d, 0x1f, 0x2f, - 0x82, 0x3a, 0xd7, 0x57, 0xd7, 0x39, 0xf5, 0xce, 0x7d, 0x73, 0x9f, 0x51, 0xda, 0xb9, 0x37, 0x59, - 0x7a, 0x29, 0x53, 0xe0, 0xb0, 0x44, 0x3a, 0x80, 0x49, 0x27, 0x89, 0x11, 0x83, 0x95, 0x4b, 0x63, - 0x99, 0x57, 0x2d, 0xb9, 0xf0, 0x5e, 0x67, 0xac, 0xe4, 0x74, 0x32, 0x41, 0x8d, 0x9f, 0x10, 0x71, - 0xef, 0xa7, 0x1e, 0xdb, 0x3f, 0xf1, 0xbc, 0x08, 0x69, 0x03, 0x8e, 0x2d, 0xa7, 0xf3, 0xa9, 0x21, - 0x10, 0x3e, 0x18, 0x06, 0xb4, 0x51, 0xb0, 0xe7, 0xff, 0xf0, 0xa4, 0xa1, 0xd7, 0x90, 0x47, 0xd3, - 0x14, 0x11, 0x62, 0x72, 0xad, 0xf7, 0x49, 0xdf, 0x37, 0x98, 0xc9, 0x29, 0xb0, 0x1b, 0xbc, 0x40, - 0x25, 0x38, 0x66, 0x8d, 0xe8, 0x9b, 0x64, 0x3e, 0xcf, 0xff, 0xc2, 0x96, 0x53, 0x95, 0xd4, 0x0e, - 0x57, 0x99, 0x89, 0x13, 0xf2, 0xb2, 0x4a, 0x2c, 0xa9, 0xfe, 0x30, 0x57, 0x2c, 0x89, 0x5a, 0xe1, - 0x8b, 0xc0, 0xb2, 0x3c, 0x30, 0x3b, 0x93, 0x21, 0x59, 0x1a, 0x84, 0x65, 0xe6, 0x86, 0xe0, 0x97, - 0xe2, 0xbb, 0x28, 0x98, 0xd0, 0xcf, 0x8d, 0xcc, 0x26, 0x00, 0x20, 0x27, 0xc8, 0x54, 0x50, 0x02, - 0x63, 0x21, 0xa3, 0x4e, 0xf1, 0xff, 0x05, 0xf2, 0xa0, 0x31, 0x82, 0x02, 0x17, 0xe2, 0x94, 0xb0, - 0x82, 0x8d, 0x5b, 0x13, 0x1a, 0x4f, 0xdd, 0x9a, 0x73, 0x42, 0xfd, 0x49, 0x6d, 0xd2, 0x35, 0x49, - 0x53, 0x46, 0x3f, 0x0a, 0x70, 0x91, 0x9e, 0x37, 0xc3, 0x41, 0xd5, 0x87, 0x38, 0xf2, 0x81, 0xdb, - 0x52, 0x01, 0x67, 0x74, 0x92, 0x6a, 0x10, 0xc2, 0xc9, 0x21, 0x95, 0x28, 0x07, 0x55, 0x09, 0x94, - 0x7c, 0x3f, 0xc3, 0x89, 0x0a, 0x14, 0xb7, 0xe6, 0x12, 0xad, 0xb6, 0x51, 0xb6, 0x28, 0x19, 0x5b, - 0xa7, 0xe5, 0xf3, 0x72, 0xb0, 0x10, 0x1e, 0x55, 0x36, 0x3a, 0x4b, 0xdc, 0x92, 0x7e, 0x7c, 0x17, - 0x0b, 0x25, 0xb1, 0x40, 0x39, 0x28, 0x62, 0x54, 0x32, 0x71, 0xe0, 0xb2, 0x8e, 0x46, 0x08, 0xf4, - 0x0e, 0xd9, 0xe8, 0x67, 0xf4, 0x2f, 0xbe, 0x0b, 0x26, 0x02, 0x14, 0x16, 0x61, 0x8d, 0xb6, 0x40, - 0x6a, 0x03, 0xbc, 0xa3, 0x68, 0xe9, 0x8a, 0x7f, 0xc2, 0x96, 0xa3, 0xe8, 0x11, 0x18, 0x40, 0x78, - 0x92, 0xd9, 0x17, 0xb1, 0x4b, 0x13, 0x1b, 0x2a, 0xc1, 0x01, 0x77, 0xc2, 0x94, 0xe8, 0xd9, 0xb4, - 0x3e, 0x44, 0xc1, 0xb1, 0xaa, 0xf2, 0x9c, 0x3c, 0x33, 0x23, 0x8c, 0x49, 0xc6, 0x2b, 0xc2, 0x9e, - 0x8f, 0x32, 0xa2, 0xe7, 0x96, 0x8b, 0x45, 0x2d, 0x5b, 0x19, 0x04, 0x12, 0xb7, 0xf8, 0xf2, 0xa0, - 0x61, 0xba, 0x10, 0x52, 0x76, 0x91, 0xb9, 0x46, 0x98, 0xe6, 0x3f, 0x8c, 0x29, 0xc8, 0x6e, 0x46, - 0x63, 0x2c, 0xef, 0x27, 0x99, 0xbc, 0x8c, 0x7e, 0x1e, 0x32, 0xc8, 0x6a, 0x2d, 0x95, 0x92, 0xb7, - 0x52, 0x5a, 0xda, 0xd1, 0x63, 0xf6, 0xcc, 0x8a, 0xf8, 0x98, 0xd2, 0x16, 0xc9, 0x44, 0x50, 0x5d, - 0x6d, 0x0c, 0x1f, 0x28, 0xb3, 0x67, 0x41, 0xa4, 0x5a, 0x85, 0x76, 0x4b, 0xe3, 0x92, 0x34, 0x73, - 0x0b, 0x08, 0x62, 0xb7, 0xd2, 0x2d, 0x3f, 0x0a, 0x0c, 0xf1, 0x3a, 0x45, 0x29, 0x60, 0x12, 0x76, - 0xd5, 0x96, 0xc5, 0x77, 0x8b, 0xb9, 0xcc, 0x62, 0xf8, 0xd2, 0xa9, 0x63, 0x0d, 0x9f, 0x19, 0xcb, - 0x62, 0xca, 0xc4, 0x6c, 0x35, 0x88, 0x4e, 0xc7, 0x8c, 0x1d, 0x60, 0xf8, 0x28, 0xa5, 0x58, 0x44, - 0x32, 0xad, 0x1f, 0x4b, 0x5f, 0xfc, 0x3e, 0x7c, 0xa3, 0x65, 0x12, 0x81, 0x9a, 0x31, 0x50, 0xd8, - 0x0a, 0x4a, 0x21, 0x3c, 0x7e, 0x6a, 0x79, 0xb2, 0x0f, 0xb5, 0x2f, 0xc3, 0x11, 0xac, 0x55, 0x06, - 0x34, 0xc8, 0x35, 0x24, 0x4d, 0x0c, 0x39, 0x90, 0xa8, 0x95, 0x22, 0xf1, 0x5c, 0x2f, 0xf1, 0x75, - 0xae, 0xed, 0x9d, 0x81, 0x3d, 0x1a, 0x28, 0xae, 0x8a, 0xff, 0x5b, 0xc9, 0xd7, 0xf5, 0xca, 0x57, - 0x77, 0x7f, 0x5f, 0x1f, 0x53, 0x0b, 0xe0, 0x9e, 0x3d, 0x61, 0x68, 0x00, 0x26, 0xe2, 0x0b, 0x6d, - 0x5c, 0x84, 0x8c, 0xbe, 0xd8, 0x77, 0xfc, 0x32, 0x6e, 0x66, 0x10, 0xde, 0x78, 0x2f, 0xfe, 0x36, - 0x2f, 0x06, 0x81, 0xd5, 0x11, 0x19, 0xe8, 0x35, 0x22, 0x4a, 0x13, 0x14, 0x8d, 0x3b, 0x30, 0x37, - 0xdb, 0x6f, 0xfc, 0x65, 0x38, 0x0d, 0x19, 0x15, 0x85, 0xdb, 0x8e, 0x47, 0x05, 0x8c, 0x75, 0xf2, - 0x19, 0x71, 0x96, 0x19, 0x52, 0x20, 0x45, 0xbe, 0xc7, 0x25, 0xf8, 0x52, 0xb4, 0x60, 0x92, 0xa1, - 0x61, 0x3d, 0x08, 0x03, 0x08, 0xf9, 0x8e, 0xe0, 0xc0, 0x54, 0x1b, 0xc8, 0x24, 0xa3, 0x83, 0x9e, - 0x4e, 0x08, 0x80, 0x97, 0xa6, 0x5f, 0xd1, 0x9f, 0x82, 0xa1, 0x21, 0x4d, 0xc3, 0xb0, 0x2f, 0x2c, - 0xe6, 0x10, 0x9d, 0xec, 0x99, 0x44, 0x98, 0x21, 0x46, 0xb5, 0xbf, 0x9d, 0xf1, 0x01, 0x41, 0x19, - 0xf7, 0x3d, 0xc3, 0xc7, 0x12, 0x24, 0x16, 0xcb, 0xcc, 0x56, 0x9c, 0x50, 0x61, 0x2d, 0x64, 0xdf, - 0x0a, 0x45, 0x66, 0x32, 0x89, 0x37, 0x06, 0x13, 0x8f, 0x84, 0x69, 0xb4, 0x5b, 0xb4, 0x2e, 0x15, - 0x58, 0xc6, 0x45, 0x8e, 0x10, 0x3a, 0xe5, 0x7c, 0x03, 0x05, 0xe8, 0xaa, 0x4c, 0xc3, 0xe2, 0x02, - 0xc0, 0xc1, 0xc6, 0x7c, 0x28, 0x57, 0xbc, 0x3d, 0x6c, 0xa0, 0xd8, 0x76, 0xc0, 0x9d, 0x99, 0x9f, - 0x2a, 0x37, 0x48, 0x3c, 0x04, 0xf8, 0x60, 0x3b, 0x03, 0x01, 0x0b, 0xea, 0x62, 0x21, 0xb3, 0x18, - 0x94, 0x7a, 0xa8, 0xff, 0xc6, 0x13, 0x75, 0x0b, 0xc8, 0x2b, 0xec, 0x34, 0x40, 0x58, 0x90, 0xbd, - 0xcc, 0x17, 0xe7, 0x68, 0xe8, 0xda, 0x99, 0x40, 0xbb, 0x3f, 0x10, 0x14, 0xa9, 0xc7, 0x06, 0xa9, - 0x33, 0xf6, 0xc9, 0xdb, 0x8c, 0x3a, 0x01, 0x40, 0x86, 0x42, 0x04, 0xee, 0xe7, 0xc2, 0x82, 0xd0, - 0x1e, 0xca, 0xc0, 0xf1, 0x11, 0x96, 0xc2, 0xae, 0xaa, 0x1f, 0x1b, 0x72, 0x6d, 0xc0, 0x00, 0x39, - 0x01, 0x05, 0x2f, 0x89, 0x05, 0x84, 0x38, 0xc4, 0xd4, 0x6a, 0x87, 0x1c, 0x10, 0x43, 0xae, 0x51, - 0x93, 0x14, 0xf2, 0xd1, 0xef, 0x12, 0x0a, 0x69, 0x52, 0x29, 0xc3, 0x6b, 0x65, 0xc0, 0xd9, 0x4f, - 0x39, 0xc7, 0xaf, 0x1c, 0x69, 0x99, 0x8e, 0xf8, 0x90, 0x54, 0x56, 0x94, 0x00, 0x8c, 0x26, 0x05, - 0x15, 0x00, 0x73, 0x03, 0x06, 0xf8, 0x6d, 0xda, 0x22, 0x5a, 0x79, 0x18, 0xaf, 0xe0, 0xa2, 0xd5, - 0xdf, 0x63, 0x33, 0x4a, 0xa6, 0x1f, 0x12, 0x2f, 0x1a, 0x56, 0x03, 0x4c, 0x9a, 0xd2, 0x0b, 0x57, - 0xdf, 0xad, 0x66, 0x54, 0x32, 0x68, 0xf9, 0x94, 0x8d, 0xbf, 0xab, 0xe7, 0xfb, 0x7e, 0x32, 0xc8, - 0xb2, 0x63, 0x88, 0x27, 0xc9, 0x7b, 0xd3, 0x4c, 0xdf, 0x19, 0x94, 0xd6, 0x99, 0x88, 0x38, 0x98, - 0x2c, 0x32, 0xb6, 0x27, 0x4a, 0xaa, 0x19, 0x53, 0x17, 0x71, 0x7d, 0x90, 0x0e, 0xd5, 0xb4, 0xff, - 0x05, 0x9d, 0x1b, 0xb6, 0x3f, 0x76, 0x7d, 0xd8, 0x4e, 0x13, 0x76, 0xda, 0x12, 0x29, 0xf8, 0x52, - 0x60, 0xca, 0x89, 0x54, 0x1c, 0x1c, 0x2c, 0x3c, 0x85, 0x10, 0xa0, 0x2d, 0x8e, 0xb2, 0xbd, 0xa7, - 0xfe, 0xc4, 0xb8, 0x90, 0x30, 0xc8, 0x91, 0x98, 0xd0, 0xc7, 0x2e, 0x61, 0x56, 0x8b, 0xc6, 0x36, - 0x28, 0xc3, 0x53, 0x69, 0x53, 0x44, 0x9f, 0xa2, 0xdc, 0xad, 0x17, 0xff, 0xc6, 0x8a, 0xb2, 0x7f, - 0x0a, 0xe2, 0x26, 0x90, 0x5f, 0xd0, 0x9b, 0xe2, 0xf7, 0x8a, 0xea, 0x46, 0xd3, 0x76, 0x6b, 0x3a, - 0xb0, 0x5f, 0x7b, 0xff, 0x87, 0xeb, 0x02, 0x2d, 0xa5, 0x93, 0x9c, 0xa9, 0x25, 0x02, 0x5c, 0x24, - 0x25, 0x46, 0xb0, 0xc9, 0x49, 0x50, 0x8a, 0x04, 0xa8, 0xc7, 0x6e, 0x9e, 0x72, 0x40, 0xc7, 0x75, - 0x86, 0xe3, 0x39, 0xa2, 0x29, 0x3f, 0xf1, 0xbc, 0xa9, 0x90, 0x65, 0x58, 0xf5, 0x41, 0x0e, 0x3b, - 0xb2, 0x3a, 0x36, 0xef, 0x69, 0x01, 0x73, 0x9a, 0xa8, 0x3a, 0x6d, 0x3f, 0xc3, 0xbd, 0x38, 0xa3, - 0x36, 0x05, 0x3c, 0x70, 0xda, 0x3f, 0x0d, 0x14, 0xb3, 0xe1, 0x5b, 0x46, 0x1a, 0xa5, 0x7f, 0xf0, - 0x43, 0x69, 0x8f, 0x65, 0x87, 0xd9, 0x66, 0x43, 0x50, 0x87, 0x57, 0x2b, 0x94, 0xa8, 0xc8, 0xad, - 0x19, 0x73, 0x27, 0x5e, 0xfa, 0x2c, 0x5f, 0x25, 0xd0, 0x37, 0x40, 0xd7, 0x04, 0x92, 0x74, 0x2b, - 0x3a, 0xf1, 0x23, 0x44, 0x50, 0x0a, 0x0f, 0xb1, 0xc1, 0x81, 0x3d, 0xa2, 0xa3, 0x42, 0x39, 0x56, - 0x28, 0x5c, 0x21, 0x19, 0x05, 0x77, 0xb6, 0x71, 0x0d, 0x86, 0x0d, 0x79, 0x44, 0x50, 0x58, 0x96, - 0xb4, 0xdb, 0x6e, 0xfe, 0x0a, 0xe1, 0xe2, 0xb4, 0xdf, 0x45, 0xd4, 0x5e, 0xc2, 0x87, 0xf3, 0xe3, - 0x48, 0x4e, 0xa3, 0xc4, 0x82, 0x1c, 0xec, 0x72, 0xe2, 0x60, 0x9e, 0xaa, 0x98, 0xa8, 0xe9, 0x72, - 0x30, 0x8c, 0xac, 0x17, 0x26, 0x28, 0x8f, 0xf0, 0x56, 0x42, 0x40, 0x6e, 0x0b, 0xae, 0x83, 0x87, - 0x0a, 0x2d, 0x4e, 0x01, 0x80, 0xef, 0xcb, 0x06, 0x4a, 0x2b, 0x55, 0xca, 0x5f, 0xc9, 0xe1, 0x10, - 0xa1, 0xcc, 0xc0, 0xc0, 0x41, 0x01, 0xdd, 0x96, 0x53, 0x79, 0x33, 0x28, 0x77, 0x58, 0x3a, 0x29, - 0x35, 0x84, 0xb0, 0x78, 0x0d, 0xd9, 0x15, 0x32, 0x4b, 0x11, 0x12, 0x9f, 0xe0, 0x90, 0x89, 0x90, - 0x31, 0x4b, 0x7f, 0x82, 0x99, 0xe1, 0x81, 0x31, 0x1d, 0x10, 0x74, 0xa8, 0xb0, 0xa0, 0x68, 0xd2, - 0xd6, 0x2b, 0x0d, 0x10, 0xd4, 0x57, 0x44, 0x81, 0x1b, 0x06, 0x35, 0xe2, 0x01, 0x55, 0xe4, 0x18, - 0x59, 0x6c, 0xb4, 0x5a, 0x78, 0xbd, 0xd8, 0x32, 0x86, 0x98, 0x42, 0xc7, 0x89, 0x0a, 0x14, 0xa6, - 0x84, 0x13, 0xc7, 0x22, 0x81, 0x02, 0x83, 0x2f, 0x50, 0x30, 0x87, 0x02, 0x04, 0x9a, 0xd0, 0x90, - 0xe9, 0xa0, 0x97, 0x2b, 0xbe, 0x9f, 0x3f, 0xc2, 0x87, 0x24, 0x74, 0xb4, 0x73, 0xe8, 0x25, 0xe4, - 0xe8, 0xc7, 0x56, 0x14, 0x66, 0x4d, 0x0c, 0x05, 0x6c, 0x4d, 0x1b, 0x29, 0xd6, 0xdc, 0x88, 0xe1, - 0xe1, 0x4a, 0x68, 0x55, 0x5c, 0x0e, 0xe0, 0x10, 0xeb, 0x35, 0x0c, 0x46, 0xc4, 0x10, 0xb6, 0xde, - 0x7b, 0x8a, 0xc4, 0x11, 0xa2, 0xa5, 0xb3, 0xd6, 0x3d, 0xf0, 0xa1, 0x37, 0x53, 0x2b, 0x0a, 0x86, - 0x83, 0x01, 0x00, 0x70, 0xfa, 0x12, 0xae, 0x5b, 0x27, 0x62, 0x0e, 0x68, 0x31, 0x73, 0xf3, 0x4d, - 0x1d, 0xf8, 0x2c, 0x8e, 0x9d, 0xef, 0x04, 0x0a, 0x52, 0x0c, 0x19, 0x55, 0xa9, 0x41, 0xd1, 0x48, - 0x23, 0xbe, 0x20, 0x29, 0x2b, 0x1c, 0xb9, 0xe4, 0x61, 0x3a, 0xd2, 0x56, 0xd4, 0x04, 0x02, 0x38, - 0x08, 0x26, 0x09, 0x47, 0xc2, 0x92, 0x33, 0xd4, 0x76, 0x38, 0x6f, 0x09, 0x6e, 0x74, 0x99, 0x90, - 0x56, 0x3a, 0x89, 0x4a, 0xbe, 0x28, 0xec, 0x1c, 0xbe, 0xa4, 0x2f, 0xf1, 0x23, 0x3a, 0x9c, 0x20, - 0x62, 0x6b, 0x23, 0x1a, 0xca, 0x83, 0x89, 0x1d, 0x7c, 0x60, 0x8e, 0x86, 0x56, 0x6b, 0x9e, 0xdd, - 0x11, 0x58, 0xcb, 0x58, 0x26, 0xd7, 0x89, 0x0a, 0x66, 0x31, 0x63, 0xf9, 0x34, 0x06, 0x66, 0xf1, - 0xc4, 0x13, 0x11, 0x4a, 0xac, 0x63, 0xea, 0x9f, 0xc4, 0x05, 0x0b, 0x4c, 0xe2, 0x02, 0xa0, 0x6b, - 0x28, 0x20, 0x0c, 0x4f, 0x36, 0xf6, 0x15, 0xd0, 0x60, 0x17, 0xce, 0x1e, 0xe3, 0x5f, 0x9c, 0x44, - 0x29, 0x07, 0xe4, 0xdd, 0x47, 0xd1, 0xf4, 0x75, 0xdb, 0x42, 0xa8, 0x0f, 0xf5, 0x08, 0xff, 0x42, - 0x7b, 0xdf, 0x6d, 0x0c, 0x15, 0x46, 0xe4, 0x4f, 0xfc, 0x14, 0xf8, 0x91, 0xb0, 0xf8, 0xfd, 0x49, - 0xae, 0x84, 0x34, 0xab, 0x08, 0x94, 0x1a, 0x75, 0xaf, 0x5e, 0x0e, 0x02, 0x5d, 0x75, 0x0d, 0xf8, - 0xe1, 0x80, 0xb9, 0x56, 0x34, 0x21, 0x93, 0x63, 0xbd, 0xff, 0xc6, 0x8a, 0xde, 0xed, 0x93, 0x2e, - 0x48, 0x7e, 0x4e, 0x1e, 0xb1, 0xce, 0xe2, 0x5c, 0x53, 0x2b, 0x7e, 0x12, 0x84, 0xdc, 0xbb, 0x26, - 0x37, 0xa7, 0xff, 0xe3, 0x6e, 0x0c, 0xc0, 0x31, 0xfb, 0x60, 0x32, 0x88, 0x1a, 0x7b, 0x19, 0x2e, - 0x70, 0x6b, 0x52, 0x7b, 0xb3, 0x50, 0xc5, 0xde, 0x1c, 0x26, 0xcb, 0x7d, 0xc3, 0x79, 0xa7, 0x57, - 0xfc, 0x69, 0x59, 0xb5, 0x91, 0xe3, 0xa5, 0xc9, 0x28, 0x19, 0x73, 0xb1, 0x25, 0x4e, 0x21, 0x82, - 0x30, 0x61, 0x3a, 0x27, 0x10, 0x68, 0x3e, 0xa0, 0x51, 0x30, 0xc4, 0xcf, 0xe8, 0xd0, 0xf7, 0xf8, - 0x6e, 0xc5, 0x1e, 0x73, 0x6d, 0x1e, 0x43, 0x2e, 0xa2, 0x6e, 0x1f, 0x93, 0xa2, 0xfc, 0x7a, 0xe5, - 0x5c, 0x11, 0x5d, 0x9f, 0xf7, 0xd5, 0x01, 0x24, 0xe3, 0xf5, 0x77, 0x55, 0x77, 0x55, 0xd7, 0x44, - 0xea, 0xeb, 0x14, 0xbd, 0x73, 0x7c, 0x11, 0xd2, 0x48, 0xe4, 0x68, 0x36, 0xbe, 0xb9, 0xeb, 0x8d, - 0xd6, 0x8c, 0x95, 0x78, 0x40, 0x1c, 0x6e, 0xb9, 0x33, 0x2a, 0x84, 0xa8, 0x42, 0x38, 0x72, 0x67, - 0x40, 0x60, 0xfb, 0x0b, 0x71, 0x2c, 0x3f, 0xf1, 0xb9, 0x56, 0xdd, 0x43, 0xd7, 0x63, 0xd6, 0x81, - 0x20, 0x25, 0x62, 0x15, 0x68, 0x82, 0xa8, 0x5e, 0x42, 0x76, 0x4f, 0x77, 0x77, 0xfe, 0x24, 0x28, - 0x52, 0x84, 0x01, 0x60, 0xd2, 0x2b, 0x8f, 0x10, 0x17, 0x1d, 0x33, 0xef, 0x93, 0x8c, 0x9e, 0xf5, - 0x61, 0xcc, 0xbf, 0x2e, 0x84, 0x19, 0x66, 0xc4, 0x19, 0x9d, 0x9c, 0xbf, 0xc6, 0x59, 0x03, 0xc5, - 0xdd, 0xc2, 0x02, 0x30, 0xd8, 0xcc, 0x4b, 0xa9, 0x3a, 0x8c, 0x31, 0x78, 0xce, 0x8c, 0xae, 0xbe, - 0x5f, 0x24, 0x93, 0x42, 0xa0, 0x66, 0xc4, 0xc6, 0x08, 0x72, 0xe5, 0xe5, 0xe5, 0xea, 0x24, 0xe4, - 0xcc, 0x40, 0xa4, 0xf8, 0xc1, 0x24, 0x84, 0x04, 0x4b, 0x18, 0x27, 0x07, 0xe2, 0x44, 0x05, 0x20, - 0x95, 0x71, 0xcb, 0x17, 0x6f, 0x75, 0xb3, 0xf4, 0x1e, 0xcf, 0x85, 0x46, 0xa3, 0x39, 0x2a, 0x39, - 0x50, 0xd5, 0xb6, 0x16, 0x2b, 0x3c, 0x77, 0xc4, 0x82, 0xb2, 0xc1, 0x38, 0xd6, 0xa1, 0xf5, 0x37, - 0xab, 0x27, 0xf2, 0x7e, 0xff, 0x19, 0x6d, 0x8c, 0xa0, 0x80, 0xe9, 0x8f, 0x98, 0xd0, 0x91, 0xa5, - 0x84, 0xd5, 0x0f, 0x61, 0x4d, 0xc1, 0x08, 0x40, 0x1b, 0x68, 0x49, 0xe1, 0x80, 0xf1, 0x00, 0xab, - 0x41, 0x8a, 0x49, 0xa2, 0x89, 0x77, 0xc8, 0x62, 0x86, 0xd5, 0xa6, 0x0f, 0xbc, 0x48, 0x2a, 0xb3, - 0x63, 0x9c, 0x9b, 0xd4, 0xb7, 0x1e, 0x55, 0xf8, 0x5c, 0xdd, 0x3e, 0xf8, 0x50, 0xf6, 0xc1, 0xb3, - 0xe8, 0xe3, 0xb5, 0x1e, 0xc0, 0xe2, 0x4e, 0xb8, 0x6a, 0x5c, 0x1a, 0x06, 0xce, 0x58, 0x62, 0x0a, - 0x3e, 0x2f, 0x31, 0x30, 0xa4, 0x79, 0xa1, 0xa2, 0xd4, 0x6b, 0x6f, 0xb0, 0x30, 0x15, 0x9b, 0x33, - 0x60, 0x20, 0x0c, 0xc4, 0x19, 0x95, 0x98, 0xdb, 0xfc, 0x29, 0xf1, 0x92, 0x60, 0x56, 0x72, 0xa1, - 0x69, 0x82, 0x44, 0xf0, 0xf9, 0xc9, 0x04, 0x2e, 0x99, 0x51, 0xc3, 0xd6, 0x3f, 0x13, 0x57, 0x3c, - 0x40, 0xf2, 0x34, 0xa1, 0x33, 0x80, 0x58, 0xea, 0x40, 0x61, 0x02, 0x83, 0x54, 0xaf, 0xdf, 0xf0, - 0xa6, 0x8d, 0x0e, 0xb4, 0x02, 0xdc, 0x9f, 0x63, 0x5a, 0x97, 0xa9, 0x28, 0x5e, 0xff, 0x05, 0x25, - 0x56, 0x34, 0x3e, 0xe0, 0xfb, 0x0e, 0xb1, 0xc1, 0x18, 0x40, 0x45, 0xdc, 0x91, 0x98, 0xef, 0x8d, - 0x12, 0x50, 0x00, 0x0b, 0xb4, 0x9e, 0xc6, 0x0a, 0xc1, 0xca, 0x32, 0xf4, 0x21, 0xe3, 0x93, 0x84, - 0x6d, 0x60, 0x75, 0x7a, 0x34, 0x63, 0xfa, 0xaa, 0x1f, 0x82, 0x42, 0x36, 0x30, 0xc8, 0xd0, 0xa0, - 0x49, 0x57, 0x8f, 0x19, 0xc8, 0xc4, 0x98, 0xc7, 0x06, 0x36, 0xc6, 0x3d, 0x8f, 0xc1, 0x49, 0xd6, - 0x8d, 0xf4, 0x25, 0xe9, 0x8a, 0x38, 0xf0, 0xd0, 0x4f, 0xb1, 0x0f, 0x18, 0x10, 0x5b, 0x38, 0x9d, - 0x78, 0x2a, 0xb1, 0x16, 0x7a, 0xe3, 0xfa, 0x30, 0x27, 0x2a, 0x23, 0x2c, 0x16, 0xc6, 0x28, 0x77, - 0xc4, 0x85, 0x0e, 0xbb, 0xd2, 0x67, 0x93, 0x6f, 0x03, 0xd0, 0xa7, 0x11, 0xda, 0x0c, 0x12, 0x06, - 0x56, 0x87, 0xe4, 0x14, 0x01, 0x30, 0x20, 0x29, 0x75, 0x4f, 0x0c, 0x4c, 0x29, 0x20, 0x82, 0xa8, - 0xb8, 0xd0, 0xa9, 0x30, 0x30, 0x30, 0xb1, 0x80, 0x20, 0x67, 0x18, 0x3a, 0x48, 0x1b, 0x85, 0x0c, - 0x5d, 0xc1, 0x81, 0x77, 0xc2, 0x84, 0x80, 0x22, 0x52, 0xaa, 0x2a, 0x06, 0x34, 0x22, 0xfc, 0xd8, - 0x61, 0x82, 0x63, 0xa0, 0x41, 0xa8, 0x27, 0x4e, 0x82, 0x68, 0x00, 0x04, 0x5c, 0xb3, 0xe0, 0xa4, - 0xca, 0x74, 0x74, 0x36, 0x24, 0x4d, 0x8f, 0x44, 0x34, 0xa7, 0x29, 0xe6, 0xa6, 0xf8, 0x7f, 0x48, - 0xf0, 0x1c, 0x05, 0x42, 0x44, 0x10, 0x29, 0x49, 0x11, 0x0d, 0xa1, 0x09, 0x21, 0x26, 0x00, 0x2b, - 0x9e, 0x9c, 0x73, 0x45, 0x8b, 0xbf, 0xf8, 0x2c, 0x8f, 0x19, 0xec, 0x0c, 0x67, 0x37, 0x39, 0x79, - 0x85, 0x11, 0x0c, 0x01, 0xc0, 0x2c, 0x2e, 0xe3, 0xc3, 0x71, 0xd1, 0x4f, 0x03, 0x36, 0x6b, 0xd3, - 0xab, 0x22, 0xd1, 0x93, 0x63, 0xeb, 0x82, 0x42, 0xa4, 0x93, 0x52, 0xa5, 0x75, 0x8a, 0xba, 0xbf, - 0xd5, 0x87, 0xa2, 0x3f, 0xd5, 0xe5, 0xea, 0xff, 0x5f, 0x97, 0xc3, 0x94, 0x34, 0x34, 0x34, 0x3b, - 0x13, 0xfb, 0x6d, 0xf9, 0x3a, 0x3f, 0x49, 0xc1, 0x00, 0xa4, 0x94, 0x4c, 0x9c, 0x57, 0x3d, 0x0d, - 0x21, 0xd6, 0x25, 0xb4, 0xac, 0xa8, 0x25, 0x70, 0x15, 0x09, 0x80, 0x09, 0x59, 0x19, 0xf3, 0xc3, - 0xfc, 0x28, 0x7d, 0x60, 0x84, 0x44, 0xa0, 0x7b, 0x38, 0x1d, 0x4f, 0x3e, 0x05, 0x0d, 0x25, 0xcc, - 0x4a, 0x74, 0x63, 0xa3, 0x0e, 0x10, 0xc3, 0x7c, 0x16, 0x17, 0xc9, 0x66, 0x0d, 0x91, 0xf0, 0x24, - 0xe9, 0xcc, 0x8f, 0x8e, 0xc5, 0xa3, 0x17, 0x5d, 0x64, 0x45, 0x6d, 0xf0, 0x54, 0x6b, 0xb4, 0xc8, - 0xbf, 0x3c, 0xad, 0x15, 0x15, 0xa7, 0xe2, 0x21, 0x42, 0x2a, 0x11, 0x99, 0xdc, 0x4d, 0x2c, 0x95, - 0x9c, 0xd2, 0x75, 0x95, 0xcd, 0xa9, 0x0c, 0x20, 0xd1, 0x36, 0x0c, 0x15, 0xe4, 0x2b, 0xfc, 0x14, - 0xdf, 0x61, 0x49, 0xf8, 0x5b, 0x4c, 0xe4, 0xe7, 0x4b, 0x8a, 0xe2, 0x12, 0x3f, 0xcf, 0x10, 0x14, - 0x2b, 0x3d, 0xe1, 0xa9, 0xb5, 0x05, 0x93, 0x89, 0xe1, 0x8c, 0x58, 0x62, 0xd7, 0x33, 0xb5, 0xf0, - 0x5b, 0x6d, 0x52, 0x04, 0x50, 0x59, 0x58, 0x1b, 0x3a, 0xef, 0x12, 0x32, 0xdc, 0xa5, 0x12, 0x92, - 0x29, 0xba, 0x79, 0x63, 0x38, 0x64, 0x2c, 0xb2, 0x52, 0x11, 0x2f, 0x62, 0xd1, 0x02, 0x58, 0x78, - 0x2a, 0x91, 0x8c, 0xea, 0xa5, 0x63, 0x42, 0xcf, 0x3e, 0x55, 0xe1, 0x43, 0xf5, 0x99, 0x89, 0x93, - 0xa0, 0xd1, 0xe8, 0x11, 0xd9, 0xc6, 0x69, 0x9d, 0x7f, 0x04, 0x84, 0x63, 0x0c, 0xb0, 0x52, 0x06, - 0x68, 0xed, 0xf8, 0x4b, 0xc2, 0x21, 0x42, 0x87, 0x60, 0x92, 0x7b, 0xb9, 0x14, 0x8d, 0x99, 0x3c, - 0x24, 0xe5, 0x4f, 0x55, 0x5c, 0x23, 0x3c, 0x35, 0xa7, 0x74, 0x4c, 0x11, 0x84, 0x89, 0x05, 0x4e, - 0x20, 0x28, 0x47, 0x10, 0xd1, 0xb8, 0x58, 0xc7, 0x44, 0x43, 0xc0, 0x1f, 0x68, 0x4f, 0x31, 0xe5, - 0x52, 0xda, 0xd0, 0x68, 0xf7, 0xc2, 0x87, 0x0d, 0xc2, 0x11, 0x60, 0x6d, 0x52, 0x45, 0xd6, 0x47, - 0xd1, 0x64, 0xee, 0x7a, 0x4e, 0xf5, 0x0e, 0xdd, 0x58, 0x7e, 0xf3, 0x99, 0xd4, 0xf8, 0x52, 0x71, - 0x01, 0x8a, 0xda, 0x72, 0x58, 0xad, 0x03, 0x79, 0x66, 0x64, 0x38, 0xbd, 0x9e, 0x6f, 0xf3, 0xfc, - 0x45, 0xc1, 0x80, 0xac, 0x36, 0x1d, 0xa2, 0xa0, 0xa1, 0x6a, 0x44, 0x0e, 0x5b, 0xf2, 0x94, 0x43, - 0x44, 0x83, 0x51, 0x12, 0xa1, 0x71, 0x20, 0xac, 0x96, 0x01, 0x18, 0xb0, 0xe2, 0x1e, 0x6a, 0x13, - 0x1a, 0x1f, 0x1a, 0x0f, 0xa9, 0x2d, 0x32, 0x99, 0x78, 0x29, 0x19, 0x19, 0x68, 0x3d, 0x2e, 0x03, - 0xb1, 0x96, 0x96, 0x82, 0xbb, 0xbe, 0x30, 0xee, 0x63, 0x53, 0x2b, 0x0d, 0x2e, 0x90, 0x65, 0xe1, - 0x5b, 0x58, 0xc7, 0x53, 0xf0, 0x7e, 0x88, 0xe0, 0xd7, 0x39, 0x79, 0x69, 0xe0, 0xaf, 0xd7, 0x5b, - 0xbc, 0xc4, 0xa0, 0x00, 0x16, 0x13, 0x81, 0x48, 0x49, 0xaf, 0xc3, 0x10, 0x20, 0x15, 0x89, 0x60, - 0x56, 0xde, 0x8a, 0x36, 0x1a, 0x18, 0xa3, 0x00, 0x82, 0x22, 0x84, 0x3b, 0x7c, 0x15, 0xd8, 0x32, - 0x24, 0x9c, 0x37, 0x49, 0x50, 0x24, 0xb5, 0x01, 0x36, 0xca, 0x1e, 0x87, 0x03, 0x32, 0x7c, 0x29, - 0x40, 0x24, 0x68, 0x37, 0x97, 0x91, 0x22, 0x2e, 0xb3, 0xdc, 0xa0, 0xc3, 0x80, 0x18, 0x50, 0x31, - 0x31, 0xc0, 0x81, 0xa6, 0x91, 0xa6, 0x7a, 0x76, 0xe2, 0xda, 0xcb, 0x42, 0x5f, 0x03, 0x71, 0xb6, - 0x3e, 0x14, 0x22, 0xc0, 0x06, 0x25, 0x24, 0x16, 0x21, 0x09, 0xa4, 0x0b, 0xf2, 0xb9, 0x6c, 0xd3, - 0x87, 0xca, 0x3e, 0x35, 0x41, 0xaa, 0xfe, 0x0b, 0x04, 0x17, 0x87, 0x79, 0x16, 0x03, 0x55, 0x92, - 0x7b, 0x6a, 0xca, 0xbe, 0x1d, 0xa2, 0x44, 0xfe, 0x3a, 0x0f, 0x09, 0xe1, 0x01, 0x38, 0x00, 0x15, - 0x8e, 0x6c, 0x08, 0x90, 0xdc, 0x3b, 0x0d, 0xb7, 0xff, 0x0f, 0x9f, 0x03, 0x87, 0xd9, 0x1c, 0x21, - 0xce, 0x88, 0x6b, 0xdb, 0x9f, 0x15, 0x64, 0x6f, 0x4d, 0xa2, 0x43, 0xab, 0xfe, 0x16, 0xa9, 0x99, - 0x0c, 0x2a, 0x96, 0xd8, 0xae, 0x92, 0x69, 0xa8, 0x98, 0xc9, 0x55, 0xac, 0xd5, 0xe2, 0x07, 0xc9, - 0xd1, 0x9f, 0xe8, 0xb6, 0xfa, 0xb7, 0xdd, 0xed, 0xaa, 0xeb, 0xdf, 0x56, 0xae, 0xb8, 0xa6, 0xeb, - 0x5f, 0x57, 0xbe, 0x89, 0x15, 0x70, 0x50, 0x52, 0x33, 0x43, 0xba, 0x24, 0xe6, 0x2f, 0x82, 0xb2, - 0x30, 0x40, 0xbc, 0x10, 0x06, 0x3b, 0x83, 0xb0, 0xbc, 0x82, 0x19, 0x96, 0x4e, 0x31, 0x01, 0xce, - 0x43, 0xa8, 0xef, 0xf8, 0x50, 0xb0, 0xe3, 0x1f, 0x1b, 0x18, 0x30, 0x78, 0x96, 0xb0, 0x47, 0x9a, - 0xf1, 0x4a, 0x85, 0x83, 0x5b, 0xd0, 0xc6, 0x18, 0xd7, 0xfe, 0xa3, 0x70, 0xe0, 0xf8, 0x52, 0x89, - 0x90, 0xe6, 0x71, 0x75, 0x5a, 0xaa, 0x8b, 0x8c, 0x42, 0x30, 0xf1, 0x9e, 0x20, 0x29, 0x27, 0x1c, - 0xd2, 0x50, 0x53, 0x22, 0x22, 0xb5, 0xc9, 0x86, 0x02, 0x00, 0x97, 0xc3, 0x55, 0xc6, 0x10, 0x87, - 0x04, 0x07, 0x29, 0x1c, 0x7e, 0x0b, 0x6c, 0x02, 0xb2, 0x18, 0x75, 0x11, 0xe9, 0x19, 0x8a, 0x2e, - 0x61, 0x83, 0x88, 0xf0, 0x80, 0x50, 0xda, 0x18, 0x59, 0x3c, 0xc0, 0xc9, 0x88, 0xb7, 0x2d, 0x21, - 0xbe, 0x12, 0x0f, 0x52, 0xf5, 0x62, 0xfa, 0x05, 0x6d, 0x63, 0x7c, 0x5e, 0x20, 0x15, 0x95, 0x49, - 0xbe, 0x04, 0xf4, 0xaf, 0x2a, 0x83, 0xa3, 0x6e, 0xbb, 0xd0, 0x26, 0x88, 0x92, 0x2f, 0x12, 0x2a, - 0x43, 0xe3, 0x08, 0x46, 0x93, 0x40, 0x00, 0x46, 0x8e, 0x0c, 0x65, 0x61, 0x71, 0x7a, 0x4f, 0x1a, - 0x52, 0x56, 0xaa, 0x07, 0x48, 0x6c, 0xdc, 0xbc, 0x21, 0x24, 0xab, 0xc0, 0xab, 0x0d, 0x4f, 0x3a, - 0xb7, 0x9f, 0x0c, 0xac, 0xda, 0xb3, 0x2e, 0xcc, 0x46, 0x3f, 0x53, 0x7f, 0x88, 0x05, 0x90, 0xc4, - 0x1c, 0x4b, 0xd4, 0xb1, 0x4b, 0x4a, 0xb5, 0xdc, 0xb4, 0x75, 0xb5, 0x16, 0xef, 0x9f, 0xc4, 0x85, - 0x0a, 0x40, 0x15, 0x86, 0xca, 0x20, 0x9a, 0x14, 0x52, 0x81, 0xc8, 0x98, 0xce, 0x58, 0x3d, 0x50, - 0xe3, 0xd1, 0xb0, 0x11, 0x7a, 0xd0, 0x64, 0x16, 0xed, 0x8b, 0x0a, 0x8d, 0x99, 0xe3, 0xbc, 0x4c, - 0x28, 0x64, 0x9f, 0x08, 0x07, 0x1f, 0x60, 0x0e, 0x35, 0x1c, 0x7f, 0xa1, 0x2a, 0x9a, 0x80, 0x4d, - 0x5d, 0x6b, 0x28, 0x03, 0xc8, 0x20, 0x27, 0x43, 0xbf, 0x1a, 0x77, 0xf2, 0x15, 0x1d, 0x00, 0x10, - 0x64, 0xc3, 0x67, 0xa7, 0x45, 0xd2, 0xdf, 0xd0, 0x28, 0x99, 0x21, 0xb5, 0xbb, 0x00, 0xb4, 0xc8, - 0xed, 0x52, 0x94, 0xe6, 0x03, 0x07, 0xb4, 0x43, 0x78, 0x77, 0xe7, 0x45, 0x3f, 0x37, 0xae, 0x22, - 0x14, 0x23, 0xb1, 0xb6, 0x58, 0x7d, 0x27, 0x0f, 0x70, 0x43, 0xe8, 0x6c, 0x79, 0xd4, 0x44, 0xdb, - 0xb5, 0xe1, 0x81, 0x7f, 0x08, 0x85, 0x0a, 0x5c, 0xb9, 0x72, 0x98, 0xeb, 0x3d, 0xe3, 0x13, 0x44, - 0xd5, 0xae, 0x5a, 0xdf, 0xda, 0x19, 0xa0, 0x57, 0x76, 0x7c, 0x69, 0x3e, 0x0a, 0xb6, 0xb5, 0x36, - 0x8e, 0xa2, 0x75, 0x09, 0xac, 0x1e, 0xa8, 0xb4, 0x22, 0x2b, 0x23, 0x3d, 0x7c, 0x29, 0x33, 0x7c, - 0xbc, 0xc8, 0x0a, 0xfa, 0xc8, 0xce, 0x89, 0x43, 0xea, 0x4d, 0xd4, 0x65, 0xdf, 0x05, 0x56, 0xe7, - 0x6e, 0x8d, 0x3a, 0x66, 0x25, 0xa0, 0x19, 0xa0, 0x38, 0xff, 0x12, 0x0b, 0x0d, 0x54, 0x12, 0x95, - 0xdf, 0x9b, 0x84, 0x78, 0xd6, 0x61, 0x90, 0xfe, 0x31, 0xdb, 0xe0, 0xae, 0xf2, 0x4c, 0xde, 0x93, - 0x6f, 0x0c, 0xa6, 0xe2, 0xe8, 0x3a, 0x83, 0xac, 0x04, 0x10, 0xe7, 0x5e, 0x6b, 0x01, 0xdf, 0xf0, - 0xa1, 0x4d, 0x4c, 0x3b, 0x21, 0x88, 0xea, 0x89, 0xfc, 0x75, 0xae, 0x98, 0x75, 0x88, 0x92, 0x24, - 0x40, 0x8d, 0x88, 0xb6, 0x68, 0x8d, 0xe2, 0xb2, 0x25, 0xfe, 0x0a, 0xb2, 0x42, 0x8d, 0x04, 0x10, - 0xa9, 0x51, 0x7e, 0x9a, 0x00, 0x1e, 0xb9, 0xd0, 0x21, 0xa1, 0xf1, 0x32, 0x1d, 0xf8, 0x53, 0x45, - 0x60, 0xca, 0xbc, 0xfe, 0xc6, 0xe4, 0xac, 0x22, 0xdb, 0x8c, 0x1d, 0x83, 0xcf, 0x4d, 0xfe, 0x0a, - 0x8a, 0xd0, 0xa2, 0x83, 0xcb, 0x42, 0x01, 0x80, 0x6a, 0x32, 0x50, 0x26, 0x9c, 0x10, 0x71, 0xc1, - 0x57, 0x00, 0x58, 0xe0, 0x73, 0x32, 0x18, 0xf8, 0x90, 0xa7, 0x62, 0x2c, 0x0c, 0x06, 0x6a, 0x50, - 0x2a, 0x91, 0x45, 0x7c, 0xd8, 0x34, 0x28, 0x9b, 0x18, 0x41, 0xfa, 0x09, 0x00, 0x47, 0x05, 0x81, - 0x59, 0x04, 0xff, 0x0a, 0x10, 0xfd, 0x1d, 0x42, 0x87, 0xf2, 0xda, 0xd2, 0x60, 0xa9, 0x58, 0x66, - 0x24, 0x0e, 0x5a, 0x87, 0x31, 0x71, 0x5a, 0x7c, 0x12, 0xd0, 0x4c, 0x68, 0x26, 0xcf, 0x40, 0xd8, - 0x32, 0xd2, 0x3e, 0xf8, 0x78, 0x51, 0xf7, 0xac, 0xa8, 0x0c, 0xa6, 0x87, 0x3e, 0x47, 0xdc, 0x0a, - 0x48, 0x8e, 0xd0, 0xbf, 0xf8, 0x74, 0xae, 0x41, 0x03, 0x84, 0x82, 0xc3, 0xa8, 0x4f, 0x90, 0x61, - 0xd8, 0xcb, 0x60, 0xa0, 0x90, 0xf2, 0x0e, 0xc8, 0xf7, 0x48, 0x19, 0x3a, 0x68, 0x62, 0xaa, 0x97, - 0xb2, 0x7e, 0x14, 0x3e, 0xd1, 0x6b, 0x4f, 0x1b, 0x1c, 0x72, 0x51, 0xbe, 0x43, 0x6c, 0x47, 0xa9, - 0x02, 0x0c, 0x50, 0xcf, 0xae, 0x5f, 0x5d, 0x49, 0xc1, 0x09, 0x18, 0xd6, 0xce, 0xbe, 0xbd, 0x2f, - 0x57, 0xfa, 0xea, 0x6e, 0x62, 0x24, 0x94, 0xe4, 0x49, 0xcb, 0x4c, 0x9b, 0xf8, 0xd9, 0x70, 0x98, - 0x37, 0x18, 0xe6, 0x70, 0x20, 0x7b, 0x42, 0xc8, 0xa8, 0xd7, 0x5d, 0x15, 0x3d, 0x43, 0x22, 0x74, - 0x26, 0x41, 0x01, 0x72, 0x51, 0x9e, 0x78, 0x83, 0x43, 0x8a, 0x41, 0x1c, 0x0e, 0x5d, 0x03, 0x13, - 0x9a, 0x78, 0x21, 0x89, 0xc1, 0xcb, 0x7f, 0x12, 0x34, 0xa4, 0xcf, 0xad, 0x3f, 0xa5, 0xf4, 0x9d, - 0x4a, 0x22, 0x66, 0xfc, 0xd5, 0x94, 0xad, 0xca, 0x8f, 0x92, 0x6c, 0x90, 0x78, 0xf9, 0x1b, 0x62, - 0xda, 0x8e, 0x89, 0x21, 0x04, 0x50, 0x40, 0x5e, 0x08, 0x06, 0x25, 0x09, 0xd9, 0x35, 0x64, 0x55, - 0xa7, 0xfe, 0x0a, 0xaa, 0x6c, 0x32, 0x30, 0x4c, 0x27, 0xa6, 0xb1, 0xc1, 0x01, 0x84, 0x75, 0x47, - 0xde, 0x20, 0x29, 0x34, 0x19, 0x04, 0xa6, 0x4e, 0x1a, 0x88, 0x61, 0xd4, 0x1f, 0x2e, 0x1a, 0xa8, - 0x19, 0x8c, 0x65, 0xc9, 0x7e, 0x5c, 0x48, 0x90, 0x51, 0x32, 0x44, 0xae, 0x92, 0x2b, 0x27, 0xf8, - 0x52, 0x56, 0x64, 0x71, 0xa0, 0xbc, 0xb2, 0x66, 0xb1, 0x8d, 0x4c, 0x86, 0xfe, 0x8d, 0x93, 0x60, - 0xf4, 0x5a, 0x7f, 0x12, 0x14, 0x10, 0x4e, 0x2a, 0x48, 0x2c, 0x8b, 0x64, 0xe0, 0xad, 0xb7, 0x0c, - 0xff, 0xdd, 0x7d, 0xfd, 0x5a, 0x16, 0x9b, 0x78, 0xde, 0x0e, 0x7b, 0xf0, 0x76, 0xe2, 0x61, 0x41, - 0x25, 0x73, 0x85, 0xa2, 0x4d, 0x63, 0x5a, 0x08, 0x27, 0x65, 0xa2, 0x58, 0x86, 0x23, 0x74, 0x18, - 0x23, 0x35, 0x10, 0x37, 0x67, 0x7c, 0x64, 0x3a, 0x77, 0x09, 0xa1, 0x1c, 0x0f, 0xbb, 0xbd, 0xd9, - 0x06, 0x70, 0x00, 0xb0, 0xc9, 0xcd, 0x2a, 0x77, 0xae, 0x4b, 0xec, 0xa1, 0x80, 0x9e, 0xe6, 0x26, - 0x0a, 0xf6, 0x21, 0xdb, 0x1b, 0x70, 0x4a, 0x41, 0xbb, 0xe3, 0x23, 0x0b, 0xbe, 0x14, 0xc5, 0x5b, - 0x1b, 0x68, 0x06, 0x86, 0xa3, 0x39, 0xf9, 0x98, 0x41, 0xae, 0x08, 0x06, 0x01, 0x56, 0x8e, 0xfc, - 0x16, 0x5e, 0x10, 0x17, 0xd1, 0xf5, 0x47, 0x96, 0x10, 0x69, 0x70, 0xef, 0xc3, 0x89, 0x9a, 0x92, - 0x3a, 0xe2, 0x66, 0xc9, 0x5f, 0x88, 0x0a, 0x14, 0xa1, 0x80, 0xa7, 0x43, 0x88, 0x15, 0x96, 0xeb, - 0xae, 0x56, 0xd0, 0xd5, 0x93, 0x03, 0x60, 0xdc, 0xa0, 0xc3, 0x07, 0xff, 0xc1, 0x57, 0x6e, 0x58, - 0x34, 0x43, 0x40, 0xee, 0xf3, 0xab, 0xa5, 0xf8, 0x27, 0xcb, 0x44, 0xbe, 0x59, 0x66, 0xf8, 0x29, - 0xa9, 0x03, 0x01, 0x52, 0xf2, 0xf3, 0xf0, 0x1a, 0x64, 0x74, 0x82, 0xc3, 0x30, 0xa5, 0x1c, 0x9c, - 0x5c, 0x4c, 0x29, 0xca, 0x30, 0x4c, 0xcb, 0x74, 0xe1, 0x07, 0x2c, 0x8f, 0x9e, 0xd0, 0x36, 0xdc, - 0x18, 0x11, 0xe4, 0x0b, 0x28, 0xff, 0x05, 0x46, 0x95, 0x8e, 0xe0, 0xed, 0xba, 0x12, 0x6c, 0x77, - 0xef, 0x12, 0x0b, 0x0a, 0xa0, 0xd0, 0x8a, 0x53, 0x2c, 0x46, 0xad, 0x20, 0xc2, 0x12, 0x1c, 0xad, - 0x12, 0x73, 0x77, 0x88, 0x0b, 0x10, 0xb5, 0x7d, 0x1d, 0xf8, 0x52, 0x6c, 0xef, 0x1a, 0xd9, 0x8e, - 0x89, 0x81, 0x00, 0x54, 0x9c, 0xb0, 0x30, 0x16, 0x52, 0x01, 0x2f, 0x1c, 0x50, 0x16, 0x38, 0x70, - 0x6a, 0x37, 0xa6, 0x4d, 0x70, 0x40, 0x49, 0x7e, 0x0a, 0xe8, 0xe2, 0xe8, 0x09, 0xd3, 0x9d, 0x50, - 0x48, 0x1b, 0x11, 0xa2, 0x2f, 0x91, 0xf8, 0x2d, 0xb0, 0x1d, 0x8d, 0x0b, 0x86, 0x1d, 0xa2, 0x88, - 0x0e, 0x74, 0x71, 0xc4, 0x46, 0x09, 0x37, 0x1f, 0x10, 0x26, 0xa1, 0x6c, 0x29, 0x54, 0xf8, 0x2f, - 0x40, 0x62, 0xa9, 0xd3, 0xcd, 0x65, 0x44, 0xde, 0xc5, 0x50, 0x35, 0xcf, 0xae, 0x24, 0x20, 0x6d, - 0x76, 0x32, 0xa3, 0xa3, 0x80, 0x48, 0x75, 0x77, 0xe2, 0x41, 0x29, 0x63, 0x89, 0xb2, 0xf7, 0x10, - 0x50, 0x48, 0x35, 0x02, 0xaa, 0x2f, 0x82, 0xa2, 0x3a, 0x88, 0xad, 0xb7, 0xbc, 0xf2, 0x89, 0x64, - 0xca, 0xff, 0x2c, 0xc4, 0x13, 0x10, 0x55, 0xab, 0x69, 0xe3, 0x45, 0x2e, 0xc2, 0xa1, 0x51, 0x73, - 0x04, 0xb9, 0x31, 0xe7, 0x4c, 0x06, 0x60, 0xf0, 0x22, 0xc5, 0x04, 0xc5, 0x16, 0x0d, 0xd4, 0x10, - 0xcb, 0x6c, 0x98, 0xc5, 0xea, 0x38, 0x33, 0x69, 0xc2, 0x8a, 0xb0, 0xc9, 0x53, 0xc5, 0x34, 0x34, - 0x88, 0xae, 0xfe, 0x1f, 0x2d, 0xeb, 0xc1, 0x9d, 0xc1, 0x5d, 0x8a, 0x55, 0x90, 0x00, 0x1a, 0xf0, - 0x35, 0x0d, 0x21, 0x7c, 0xb4, 0x3b, 0xe7, 0x0c, 0x77, 0xb0, 0xc9, 0xe8, 0xd4, 0x9f, 0xf8, 0x30, - 0x90, 0x85, 0x34, 0x0e, 0x42, 0x1c, 0xe9, 0x5a, 0x64, 0xd8, 0x22, 0xa0, 0x85, 0xeb, 0xbd, 0x26, - 0x66, 0xb7, 0xd7, 0x0b, 0xe8, 0xa5, 0x55, 0x70, 0x45, 0x76, 0x0d, 0x55, 0xfe, 0x7a, 0xa4, 0x93, - 0x4d, 0x7f, 0xab, 0xfc, 0x12, 0x4e, 0xca, 0x1e, 0x71, 0x5f, 0x52, 0x25, 0x75, 0x7f, 0xab, 0x3e, - 0x09, 0x2c, 0xd9, 0xa3, 0x57, 0xae, 0x09, 0xcc, 0xb4, 0xa8, 0x08, 0x6e, 0x59, 0x42, 0xcb, 0x23, - 0x36, 0xf8, 0xd2, 0x0d, 0xc4, 0x40, 0x3d, 0xff, 0x6f, 0xc0, 0x11, 0x79, 0xa2, 0xc2, 0x8b, 0x81, - 0xdc, 0xe3, 0xfa, 0xca, 0x18, 0x43, 0xc9, 0x68, 0x19, 0x4f, 0xe2, 0x01, 0x58, 0x9f, 0xdc, 0x69, - 0x30, 0xc1, 0xb6, 0x70, 0xf3, 0x30, 0xd2, 0x23, 0x30, 0x2a, 0x63, 0x28, 0x6a, 0xbc, 0x15, 0x51, - 0x0f, 0x08, 0x47, 0x59, 0x19, 0x63, 0x72, 0x27, 0xfb, 0x58, 0x40, 0x65, 0xb7, 0x68, 0xec, 0x77, - 0xc4, 0x82, 0xa2, 0xb8, 0x40, 0x5a, 0x2a, 0x9a, 0xeb, 0xe9, 0x0f, 0xd9, 0x83, 0xa0, 0xcc, 0x70, - 0xc2, 0x02, 0xbc, 0x6a, 0x21, 0x8b, 0x98, 0xef, 0x10, 0x0a, 0x76, 0x6f, 0x56, 0xa9, 0x41, 0x99, - 0x9a, 0x13, 0x09, 0x9c, 0x5f, 0x18, 0x4a, 0x26, 0x38, 0xf5, 0xc9, 0xbc, 0x5b, 0x96, 0xd9, 0x66, - 0x46, 0x97, 0x89, 0x12, 0x0a, 0xc8, 0x9d, 0x73, 0x4a, 0xc3, 0x41, 0xb9, 0xe1, 0xdf, 0x11, 0x7b, - 0x7d, 0x2a, 0x5e, 0x14, 0x39, 0x02, 0x4d, 0xae, 0xe4, 0x88, 0x20, 0x56, 0xdc, 0xb1, 0xfb, 0x07, - 0x2c, 0x2f, 0xf3, 0x81, 0x50, 0x7c, 0x7b, 0xcf, 0xf0, 0xa1, 0xca, 0x3e, 0xf1, 0x83, 0x9d, 0x8a, - 0xd7, 0xa0, 0xea, 0x63, 0x77, 0xfb, 0x5a, 0xb3, 0xa4, 0x1c, 0xac, 0xe7, 0xf1, 0x01, 0x49, 0x6c, - 0x95, 0x04, 0x20, 0xac, 0xf4, 0x60, 0xa4, 0x40, 0x33, 0xc0, 0xc6, 0x01, 0xe8, 0xa6, 0xb5, 0x68, - 0x7e, 0x06, 0x80, 0x47, 0x8d, 0xb8, 0x88, 0x50, 0xdc, 0x23, 0xbd, 0x11, 0x52, 0xc0, 0x2c, 0xb8, - 0xa0, 0x29, 0xfd, 0xce, 0x25, 0x2f, 0xe2, 0x2a, 0xe7, 0x88, 0x57, 0xf8, 0x50, 0xa2, 0x20, 0x80, - 0x2a, 0x91, 0x04, 0xc4, 0x04, 0xbf, 0x40, 0x16, 0xd2, 0x71, 0xf0, 0x70, 0x3b, 0x82, 0xa1, 0x06, - 0xd0, 0xa9, 0x9f, 0xc2, 0x23, 0x73, 0x18, 0x90, 0x30, 0x76, 0xe8, 0xd2, 0x03, 0x35, 0x52, 0x06, - 0x19, 0x01, 0x6b, 0x41, 0xa5, 0x70, 0x44, 0xb0, 0x86, 0xfc, 0xdf, 0xaa, 0xbe, 0x26, 0x0a, 0xc9, - 0xdb, 0xf5, 0x54, 0x9e, 0x86, 0x46, 0x59, 0x43, 0xa7, 0x11, 0x0a, 0x64, 0xa1, 0xbc, 0x93, 0xa3, - 0xcc, 0xe7, 0x10, 0x5d, 0x49, 0x64, 0x16, 0x82, 0xbb, 0xfc, 0x22, 0x6e, 0xca, 0xc5, 0xa4, 0x5c, - 0x72, 0xdc, 0x19, 0x08, 0x3f, 0x12, 0x0a, 0x84, 0x84, 0x94, 0xe9, 0x99, 0x26, 0x06, 0x02, 0xb5, - 0xc0, 0xd8, 0xd0, 0xc1, 0x7c, 0x49, 0x60, 0x81, 0x5c, 0x4c, 0xcc, 0x45, 0xaf, 0x10, 0x14, 0x9b, - 0xe6, 0x6e, 0x07, 0xd2, 0x21, 0xd8, 0x7c, 0x20, 0xca, 0xf9, 0xa5, 0x5f, 0x47, 0x40, 0xdd, 0x5e, - 0x30, 0x58, 0x32, 0xf2, 0x0e, 0x78, 0x90, 0x57, 0x3d, 0xb2, 0x33, 0xb8, 0x3c, 0x22, 0x92, 0x87, - 0x4d, 0x1d, 0x98, 0xf3, 0x83, 0xef, 0x12, 0x14, 0x9c, 0x9a, 0xa8, 0x44, 0xba, 0xa9, 0x44, 0x65, - 0x61, 0xbb, 0x65, 0x18, 0xc8, 0xc5, 0x38, 0x09, 0x16, 0x7f, 0x12, 0x14, 0xa1, 0xe5, 0x3c, 0x6b, - 0xd3, 0xa2, 0x0d, 0x48, 0x94, 0x61, 0x8b, 0xfa, 0x2f, 0x3a, 0x80, 0xbb, 0xab, 0x31, 0xea, 0x2d, - 0xb4, 0x32, 0xcf, 0x82, 0x8a, 0x6e, 0x45, 0x6b, 0x3a, 0xe2, 0xd0, 0xec, 0x74, 0xf8, 0xcf, 0x10, - 0x14, 0xde, 0x61, 0xfb, 0xa0, 0x68, 0xcf, 0x0d, 0xa9, 0x8c, 0x5a, 0x08, 0x9c, 0x31, 0x84, 0x28, - 0x4f, 0x82, 0x6c, 0xb4, 0x58, 0xb3, 0x3d, 0xe8, 0xca, 0xdf, 0x05, 0x85, 0x5b, 0x46, 0x0c, 0xa6, - 0x80, 0x29, 0x21, 0xd8, 0x1c, 0x6c, 0x6a, 0x20, 0x38, 0x88, 0x53, 0x94, 0x85, 0x24, 0xf2, 0x22, - 0xbc, 0x71, 0xd2, 0x9b, 0xa9, 0x70, 0xb0, 0x31, 0x67, 0x82, 0x1b, 0x9c, 0xa9, 0x33, 0x21, 0x53, - 0xe3, 0x44, 0x5c, 0x0d, 0x0d, 0x03, 0x66, 0xe0, 0x31, 0x09, 0x58, 0x18, 0x69, 0xdd, 0xed, 0xb8, - 0x82, 0x87, 0xa5, 0x92, 0xaa, 0x8e, 0x3f, 0xfc, 0x61, 0x11, 0xdd, 0x27, 0x0c, 0xad, 0x14, 0x2a, - 0x08, 0x2a, 0x08, 0x67, 0x1a, 0x7e, 0xdb, 0x2d, 0x0f, 0x1c, 0xd9, 0xa6, 0x10, 0x74, 0x2d, 0x18, - 0x26, 0x3e, 0x33, 0x5a, 0x78, 0x78, 0xe7, 0x24, 0x80, 0x58, 0xfd, 0xd2, 0x8f, 0x41, 0xd1, 0x91, - 0x1b, 0xc0, 0xe5, 0xa2, 0x30, 0xfc, 0x5e, 0x8f, 0xeb, 0xd2, 0xf5, 0xcb, 0xe8, 0x91, 0x57, 0x57, - 0xfa, 0x2e, 0x2f, 0x9a, 0xfa, 0xbe, 0x13, 0xd5, 0x6c, 0x72, 0xc9, 0x83, 0xf5, 0x94, 0x9d, 0x5d, - 0x5c, 0x10, 0x57, 0x15, 0xe3, 0x58, 0xc7, 0x15, 0xaa, 0x96, 0x79, 0x22, 0xee, 0x08, 0x8c, 0x7d, - 0x91, 0x5f, 0x5f, 0x18, 0x30, 0xc3, 0xc8, 0x3c, 0x6c, 0x4e, 0x24, 0x43, 0x18, 0xbc, 0xdd, 0x18, - 0x40, 0x23, 0x9d, 0x7b, 0x80, 0x00, 0x23, 0xa7, 0x03, 0x91, 0x82, 0xb4, 0x68, 0xff, 0x12, 0x14, - 0x2a, 0x6c, 0x84, 0x36, 0x9d, 0x27, 0x0d, 0xa5, 0x75, 0xd8, 0x9d, 0x5d, 0x3f, 0x1d, 0x10, 0x13, - 0x29, 0x6f, 0x21, 0x78, 0x91, 0x27, 0x09, 0x13, 0x11, 0x5b, 0x94, 0x56, 0x83, 0x39, 0xa0, 0x86, - 0x87, 0xac, 0x16, 0xfc, 0x15, 0x5e, 0xce, 0x8c, 0xa7, 0x9e, 0x8c, 0x21, 0x71, 0x47, 0xe1, 0x8d, - 0x73, 0xfc, 0x16, 0x1e, 0xd1, 0x8e, 0xe3, 0x96, 0xc1, 0x50, 0xfb, 0x02, 0x91, 0xe3, 0xb7, 0xc1, - 0x74, 0x93, 0xc6, 0x2d, 0x8c, 0x63, 0x35, 0x43, 0x22, 0xb1, 0xa3, 0x41, 0xd8, 0xf8, 0x2c, 0x33, - 0x6b, 0x4a, 0xb6, 0x07, 0x28, 0x82, 0x68, 0x74, 0x82, 0xd3, 0x37, 0xe2, 0x04, 0x04, 0x4b, 0x3e, - 0x50, 0x33, 0x54, 0x8d, 0xfa, 0xb3, 0xf0, 0xa0, 0x86, 0xc8, 0x63, 0x2a, 0x92, 0x83, 0xfa, 0x75, - 0x93, 0x4f, 0xda, 0xc5, 0xe6, 0x4e, 0x20, 0x40, 0x50, 0x4a, 0x09, 0x14, 0x94, 0xb1, 0x56, 0x7e, - 0x96, 0xfa, 0x29, 0x08, 0x13, 0x66, 0x25, 0x9c, 0x40, 0xfa, 0x99, 0xc1, 0xe8, 0x3a, 0x9c, 0x6d, - 0xe4, 0x8b, 0x13, 0x0a, 0x4b, 0x66, 0x5e, 0xac, 0x61, 0x34, 0x21, 0x53, 0x4c, 0xb5, 0xa9, 0x04, - 0x05, 0xec, 0xab, 0xa8, 0x23, 0xd4, 0x00, 0x02, 0x6a, 0xbc, 0x44, 0xc9, 0x93, 0x89, 0x82, 0xed, - 0x86, 0x87, 0x1a, 0xee, 0xe3, 0x63, 0x5c, 0x1c, 0x82, 0xc1, 0x31, 0x30, 0x55, 0x28, 0x69, 0x14, - 0x60, 0x4c, 0x43, 0x60, 0xb7, 0x21, 0xde, 0x76, 0x53, 0xf1, 0x30, 0x5d, 0x15, 0x95, 0x87, 0x39, - 0x63, 0x32, 0xea, 0xde, 0x11, 0x05, 0x72, 0x5e, 0xa6, 0x61, 0xca, 0xa1, 0xab, 0x26, 0x27, 0xef, - 0x50, 0xc7, 0x3f, 0x88, 0x04, 0xd5, 0x43, 0xc4, 0xea, 0xdb, 0x3d, 0x37, 0xf8, 0x50, 0x94, 0x7c, - 0x88, 0x98, 0xf6, 0xe8, 0x03, 0x4c, 0xac, 0x29, 0x14, 0x16, 0x20, 0xb2, 0x48, 0xa7, 0x9d, 0x6f, - 0x12, 0x14, 0x2c, 0x99, 0x9d, 0xf2, 0xab, 0x4d, 0x26, 0x39, 0x12, 0x32, 0x81, 0x9a, 0xd3, 0x06, - 0x0e, 0xe7, 0x89, 0x14, 0x66, 0x95, 0x55, 0x57, 0xe2, 0x01, 0x51, 0x4e, 0xa1, 0xa8, 0xe0, 0xf6, - 0xc0, 0x4b, 0xbe, 0xbb, 0x57, 0xa0, 0xc9, 0x94, 0xde, 0x6d, 0xf0, 0xa6, 0x8e, 0xdd, 0x12, 0xea, - 0x38, 0xc5, 0xac, 0x41, 0xc0, 0x34, 0x0a, 0x81, 0xb4, 0x40, 0x4e, 0x00, 0x2f, 0x04, 0x01, 0x84, - 0xfb, 0x43, 0xbb, 0xe1, 0x48, 0xc0, 0x83, 0x1f, 0xc9, 0xc4, 0x9b, 0x6b, 0x8d, 0x10, 0xd0, 0x0a, - 0xd2, 0xa6, 0x8a, 0x06, 0xa8, 0x78, 0x68, 0x17, 0xb8, 0xf5, 0x2b, 0xf2, 0x2e, 0x1b, 0x30, 0x75, - 0x7c, 0x28, 0x70, 0xd4, 0x1e, 0xf6, 0xb3, 0xb0, 0x20, 0x60, 0x37, 0x41, 0x04, 0xfb, 0x35, 0xcc, - 0x58, 0x20, 0x26, 0x58, 0x1a, 0x39, 0x64, 0x9e, 0xe1, 0x75, 0xa3, 0xb9, 0x02, 0x60, 0xc1, 0x4b, - 0xe2, 0x01, 0x61, 0x13, 0x24, 0xa3, 0xba, 0x23, 0x40, 0x2c, 0x5e, 0x4e, 0x71, 0x0b, 0x46, 0xf9, - 0x19, 0xf5, 0x12, 0x32, 0xbc, 0x28, 0x57, 0x70, 0xe2, 0x24, 0xd5, 0x21, 0xb3, 0x68, 0x28, 0x00, - 0x05, 0xa0, 0x50, 0xe9, 0xa4, 0x71, 0x7f, 0xe8, 0x6b, 0x07, 0x82, 0x8b, 0x7c, 0x2a, 0x65, 0xa2, - 0x34, 0x10, 0x51, 0xb2, 0xf8, 0x30, 0x27, 0xc0, 0x8e, 0x41, 0xb3, 0xbe, 0x80, 0xa2, 0x87, 0x31, - 0x7f, 0xfc, 0x14, 0x47, 0xb0, 0xea, 0x54, 0xd7, 0xcc, 0xc0, 0xae, 0xc1, 0x43, 0xdf, 0x05, 0x77, - 0x43, 0x4d, 0xf1, 0xaf, 0xd8, 0x2b, 0xbb, 0x4e, 0x60, 0x2f, 0xc1, 0x69, 0x58, 0x3a, 0xe3, 0x88, - 0xa5, 0x1f, 0x22, 0xa5, 0x42, 0x21, 0xbe, 0x0f, 0x12, 0x14, 0xd4, 0xcf, 0x9e, 0xe6, 0x87, 0xaa, - 0x4b, 0x11, 0xa7, 0xe3, 0x4a, 0x78, 0xe3, 0x14, 0xf8, 0x52, 0xac, 0x6c, 0xa8, 0x8f, 0xb5, 0x25, - 0x86, 0x90, 0x42, 0xc1, 0x8f, 0x15, 0x38, 0x7e, 0x12, 0x0c, 0x2a, 0xf4, 0xf4, 0xd4, 0x05, 0x03, - 0xdb, 0xe3, 0x46, 0x72, 0xc2, 0x8b, 0xa2, 0x88, 0x13, 0x01, 0x16, 0x30, 0x56, 0xf1, 0x1e, 0x41, - 0xd8, 0x62, 0xa0, 0x30, 0x37, 0x10, 0x4c, 0xe6, 0x0f, 0x4a, 0x1e, 0x82, 0xff, 0x1b, 0x1a, 0x11, - 0x59, 0x43, 0x77, 0x02, 0x67, 0x8d, 0x96, 0x4f, 0x50, 0xf1, 0xeb, 0x76, 0x23, 0x23, 0x96, 0x23, - 0xf4, 0x4d, 0x68, 0x33, 0x7b, 0x19, 0xea, 0xb0, 0xc9, 0x81, 0x70, 0x65, 0x83, 0xb3, 0x39, 0x52, - 0x27, 0x2e, 0x7f, 0xc6, 0x9c, 0x7c, 0x1c, 0x05, 0xa2, 0x06, 0xaa, 0x87, 0x5e, 0x1b, 0xde, 0x8a, - 0x81, 0xb0, 0x35, 0x20, 0x4a, 0x69, 0xc0, 0x34, 0x35, 0xc9, 0x20, 0xe3, 0xe0, 0x8c, 0xdd, 0x9e, - 0x64, 0x8e, 0x3b, 0xbf, 0xfd, 0x4c, 0x9f, 0x57, 0x7d, 0x48, 0x9f, 0x5e, 0xfa, 0xf7, 0xd6, 0xab, - 0xaf, 0x5f, 0x3f, 0x5f, 0x69, 0xa4, 0x92, 0xf5, 0x8b, 0xe6, 0x99, 0x94, 0x36, 0x34, 0xd7, 0x25, - 0xb5, 0xc9, 0xd7, 0xbe, 0x08, 0x05, 0x4d, 0x01, 0x2e, 0xca, 0x34, 0xd6, 0xe9, 0x54, 0xcb, 0x75, - 0x34, 0xd9, 0xb7, 0xfc, 0x48, 0x74, 0xa6, 0x10, 0x44, 0xbc, 0xa8, 0x44, 0xa7, 0x81, 0x85, 0xa9, - 0x3e, 0x79, 0xb3, 0xbb, 0x6c, 0x92, 0x32, 0xff, 0x94, 0xcf, 0x44, 0xb8, 0x6d, 0xc1, 0x7f, 0x8c, - 0xb7, 0xab, 0x2b, 0x97, 0xd8, 0x94, 0xa4, 0x55, 0x00, 0xa9, 0x52, 0xb2, 0x17, 0x10, 0x14, 0x2b, - 0xc4, 0x9e, 0x41, 0x78, 0xa3, 0xc2, 0x00, 0xa0, 0x91, 0xaf, 0x42, 0xa3, 0x78, 0x9f, 0xae, 0x32, - 0x45, 0xf3, 0xf8, 0x80, 0xa5, 0x8c, 0x6d, 0x92, 0x1a, 0x3a, 0x69, 0x3d, 0xbf, 0xd9, 0x8d, 0xc4, - 0x34, 0x04, 0x8d, 0x53, 0xa3, 0x6e, 0xb7, 0x2f, 0x4c, 0x7b, 0x4a, 0xf8, 0xe2, 0xed, 0xa6, 0x50, - 0x58, 0xe0, 0x43, 0xba, 0x3d, 0x13, 0xc6, 0x0b, 0x9d, 0x40, 0x3e, 0x0a, 0x73, 0x02, 0x00, 0xa1, - 0x29, 0x1e, 0x3b, 0x1d, 0x6e, 0x56, 0x32, 0x25, 0xf7, 0x13, 0x05, 0x24, 0x0e, 0x21, 0xc0, 0x69, - 0x6c, 0x37, 0xb6, 0x83, 0x4a, 0x8b, 0x4e, 0x8e, 0xf1, 0x10, 0x43, 0x56, 0x15, 0x04, 0x65, 0x08, - 0xef, 0x12, 0x24, 0x11, 0x4a, 0x10, 0x04, 0x60, 0x20, 0x6e, 0xd2, 0x8f, 0xe2, 0x41, 0x59, 0x35, - 0x04, 0x01, 0x7a, 0x86, 0x88, 0x34, 0xed, 0xde, 0xed, 0xb5, 0x5f, 0x05, 0x35, 0xc6, 0x05, 0x43, - 0xd8, 0x9f, 0x9b, 0xc9, 0x94, 0x0b, 0xb3, 0xb7, 0x89, 0x18, 0x53, 0xb0, 0x57, 0xaf, 0x1a, 0x2d, - 0x65, 0xe4, 0x16, 0x88, 0x1b, 0x7c, 0x9e, 0xd6, 0xa2, 0x2c, 0xe8, 0xf2, 0x82, 0x02, 0xb1, 0xe2, - 0x20, 0xa6, 0x46, 0x05, 0x8d, 0x8c, 0x35, 0x82, 0x7e, 0x8c, 0xac, 0xb1, 0x43, 0x86, 0x16, 0x31, - 0x72, 0xe2, 0x61, 0x42, 0xb1, 0x15, 0xd9, 0x44, 0x36, 0x1e, 0x9d, 0xaf, 0x40, 0x1b, 0x21, 0xd7, - 0xd2, 0xea, 0xa9, 0x57, 0x85, 0x35, 0xba, 0x83, 0xe4, 0x94, 0x58, 0x43, 0x5a, 0xd2, 0x55, 0x3a, - 0x8a, 0xa9, 0xaf, 0x26, 0x8f, 0x46, 0x33, 0xa0, 0x63, 0x06, 0x88, 0x72, 0x35, 0x5e, 0x0b, 0x23, - 0x81, 0x0f, 0x02, 0xd5, 0x1a, 0x19, 0x29, 0x12, 0x03, 0x23, 0x87, 0xba, 0x0c, 0xe8, 0xe1, 0xc4, - 0x05, 0x2c, 0x48, 0x82, 0xf9, 0x25, 0xdd, 0x01, 0xa6, 0xe0, 0xd1, 0x14, 0xd4, 0xf7, 0x44, 0x34, - 0x4b, 0x1b, 0x18, 0x8b, 0x61, 0x09, 0x87, 0x88, 0x04, 0x66, 0x96, 0xbf, 0xdf, 0x04, 0x7a, 0x6c, - 0x91, 0x3b, 0xe0, 0x84, 0xe4, 0x0d, 0xa0, 0x34, 0x46, 0x76, 0xbe, 0x0a, 0x66, 0x06, 0xe4, 0x44, - 0x92, 0x2d, 0xca, 0xf5, 0xa3, 0x17, 0x05, 0x71, 0xe0, 0xaa, 0x94, 0x1a, 0xd8, 0x30, 0xd2, 0x20, - 0x9e, 0xf4, 0x27, 0x7f, 0x12, 0x0a, 0xca, 0xf0, 0xe9, 0x86, 0x23, 0xa0, 0x70, 0x0b, 0x80, 0x6a, - 0x20, 0x4b, 0x43, 0x77, 0x0b, 0x69, 0x89, 0xbe, 0x3b, 0xf0, 0x57, 0x18, 0x66, 0xc3, 0x99, 0xe3, - 0x54, 0xf1, 0xe1, 0xc3, 0xa2, 0x6f, 0x10, 0x14, 0x8c, 0x3c, 0x88, 0x1e, 0x03, 0x48, 0xbb, 0x2d, - 0x44, 0x1c, 0x04, 0x8f, 0xc2, 0x6c, 0x08, 0x16, 0x04, 0x01, 0xa0, 0x65, 0x9c, 0x64, 0x54, 0xe8, - 0x30, 0x68, 0x37, 0x82, 0x0a, 0x45, 0xc4, 0x85, 0x21, 0x61, 0xd7, 0xe8, 0x87, 0xae, 0x9a, 0x05, - 0x42, 0xc4, 0x2d, 0x18, 0x5a, 0x00, 0x03, 0x53, 0x92, 0xa8, 0x6f, 0x79, 0x5d, 0x0c, 0x01, 0x3d, - 0xcf, 0x85, 0x2e, 0x18, 0x2c, 0xca, 0xa8, 0xe0, 0x11, 0x01, 0x02, 0x3a, 0x99, 0x6e, 0xaa, 0x9e, - 0x32, 0x47, 0xfa, 0xbe, 0xef, 0xcc, 0x21, 0x14, 0x68, 0x45, 0xfc, 0x65, 0xc8, 0x4d, 0x80, 0xfd, - 0x4d, 0x7d, 0x6e, 0xea, 0x85, 0xd0, 0x0b, 0x01, 0xa8, 0x1b, 0x14, 0x1d, 0x2a, 0xda, 0x19, 0x60, - 0xdc, 0x91, 0x0d, 0xfc, 0x48, 0x21, 0x97, 0x9e, 0x41, 0x00, 0x44, 0xc8, 0x27, 0xc8, 0x39, 0x78, - 0x81, 0xc4, 0x34, 0x86, 0x2f, 0xe8, 0x05, 0xc1, 0x80, 0xa1, 0xd7, 0x63, 0x64, 0x6b, 0xfc, 0xe5, - 0xac, 0x7b, 0x3d, 0x7f, 0xe1, 0x12, 0x20, 0x09, 0x29, 0x57, 0x93, 0xe3, 0x2a, 0xc6, 0x81, 0x09, - 0xfc, 0x68, 0xad, 0x21, 0xb8, 0x00, 0x06, 0x57, 0x10, 0x90, 0xae, 0x90, 0xd4, 0xba, 0xa8, 0x52, - 0xce, 0x61, 0xc9, 0x02, 0x37, 0x85, 0xfa, 0xe7, 0xa6, 0xe9, 0x54, 0xf3, 0x38, 0xac, 0xaa, 0xe9, - 0xff, 0x8d, 0x3c, 0x48, 0x9b, 0x6a, 0xe1, 0xdb, 0x90, 0x9b, 0xb3, 0xed, 0x51, 0xea, 0x0d, 0xe2, - 0x6a, 0xd2, 0xde, 0x81, 0xce, 0x69, 0x8c, 0x2d, 0x0b, 0x4a, 0xa5, 0xab, 0x7e, 0xba, 0xe5, 0x7d, - 0x6b, 0xeb, 0x15, 0xf5, 0xef, 0x96, 0xd5, 0x24, 0x42, 0x79, 0xa7, 0x82, 0x08, 0x1b, 0xf2, 0x24, - 0x01, 0x5f, 0x0c, 0x99, 0xa6, 0x98, 0xbd, 0x4a, 0x41, 0x9d, 0xd7, 0xf8, 0x80, 0x4d, 0x21, 0x8d, - 0x0d, 0x56, 0xbe, 0xf9, 0x23, 0x19, 0x55, 0x52, 0xf8, 0x29, 0x12, 0x56, 0x21, 0xd7, 0x9b, 0xcd, - 0xcf, 0x4a, 0xed, 0xf4, 0x6b, 0xfc, 0x29, 0x0a, 0x0a, 0x43, 0xdf, 0x90, 0x83, 0x48, 0xb0, 0xc0, - 0xc7, 0x82, 0x0d, 0x19, 0xc6, 0xb0, 0xc4, 0xb0, 0x01, 0x43, 0x7f, 0xdf, 0x5a, 0x2a, 0x44, 0xe8, - 0xd2, 0xce, 0xff, 0x0a, 0x0d, 0x70, 0xc1, 0x89, 0xe1, 0x41, 0x01, 0x1b, 0x04, 0x06, 0x8c, 0xab, - 0xe0, 0xde, 0xed, 0x65, 0x07, 0xc9, 0xd0, 0xc3, 0xc0, 0x7f, 0x41, 0x39, 0xf0, 0x42, 0x65, 0x43, - 0xee, 0x78, 0x90, 0x59, 0x7b, 0x9d, 0xce, 0x5e, 0xfa, 0xba, 0xbe, 0x8e, 0xf1, 0x10, 0x43, 0xd5, - 0x38, 0xb8, 0x88, 0x28, 0xb9, 0xf0, 0xad, 0x7b, 0x4c, 0x20, 0x23, 0x48, 0x93, 0x38, 0xb8, 0x81, - 0x01, 0x48, 0x81, 0x62, 0xcb, 0xf2, 0xc1, 0x5c, 0x8a, 0x31, 0x0d, 0x1e, 0xf3, 0x30, 0xcf, 0xe3, - 0xbc, 0x4c, 0x29, 0x46, 0x21, 0x1c, 0x7a, 0x97, 0x9f, 0xd7, 0xb3, 0x9e, 0x9b, 0x8e, 0x21, 0x0a, - 0xce, 0x93, 0x38, 0x00, 0x05, 0xce, 0x20, 0x40, 0x29, 0x24, 0x8c, 0x16, 0x15, 0x3b, 0xe3, 0xc6, - 0xb4, 0x94, 0x5d, 0xe0, 0xdf, 0xe1, 0x42, 0xba, 0xea, 0x78, 0x8c, 0x23, 0x0e, 0xa4, 0x64, 0x6c, - 0x60, 0xc1, 0x99, 0x0e, 0x11, 0x4d, 0x67, 0x00, 0x44, 0xfb, 0xf1, 0x22, 0x02, 0x99, 0xe7, 0x06, - 0x32, 0x98, 0x1c, 0x26, 0x3a, 0x72, 0x42, 0x02, 0x37, 0xf5, 0xc4, 0xc1, 0x59, 0x25, 0x46, 0x98, - 0xf4, 0x60, 0xee, 0xc5, 0x8d, 0xb4, 0x6d, 0x7b, 0xe0, 0xae, 0x9a, 0x11, 0x72, 0xcb, 0x6f, 0xaa, - 0xf1, 0x1d, 0xf8, 0xc1, 0x21, 0x65, 0xd1, 0x78, 0x76, 0x8c, 0xd6, 0x63, 0xaf, 0xad, 0x86, 0x15, - 0xe5, 0xc5, 0x20, 0xa0, 0xf1, 0x71, 0xa3, 0x43, 0xfb, 0x04, 0x1f, 0x04, 0x33, 0x75, 0x29, 0xe6, - 0x8e, 0x55, 0xfd, 0x72, 0xf8, 0x25, 0xb0, 0x1c, 0x6d, 0x04, 0xb6, 0x60, 0x40, 0x16, 0x3b, 0x8b, - 0xe0, 0xaa, 0xc0, 0xec, 0x9d, 0x50, 0xde, 0xfb, 0xfd, 0xe2, 0x04, 0xd4, 0x67, 0x04, 0xf1, 0xcc, - 0x00, 0x17, 0xbe, 0x24, 0x14, 0x4f, 0x09, 0x45, 0x5f, 0x8e, 0x83, 0x02, 0xe7, 0xc4, 0x4c, 0x8c, - 0xe8, 0x69, 0x65, 0x10, 0x19, 0x14, 0x62, 0x63, 0x22, 0xbc, 0x7d, 0x78, 0x6c, 0x49, 0xe6, 0x34, - 0x98, 0x2f, 0x6a, 0xf6, 0x19, 0x7a, 0x98, 0x40, 0xfe, 0x14, 0x2b, 0xc1, 0x02, 0xbc, 0x57, 0x39, - 0x4d, 0x07, 0x04, 0xa9, 0xfc, 0x5f, 0x40, 0x28, 0x13, 0x3b, 0x45, 0x61, 0x29, 0x15, 0xc9, 0x46, - 0x60, 0x16, 0x3b, 0x00, 0xe4, 0x23, 0xb6, 0xf0, 0x49, 0xbe, 0x0a, 0x49, 0xa1, 0xb0, 0x33, 0x5e, - 0x61, 0xa6, 0xe3, 0x62, 0xe3, 0xbc, 0x2b, 0x87, 0x89, 0x05, 0x64, 0x60, 0x63, 0xa1, 0x10, 0xb0, - 0x68, 0x8a, 0xc0, 0x85, 0x82, 0xe4, 0x81, 0x9e, 0xac, 0xe8, 0xdb, 0xc4, 0x82, 0x92, 0x65, 0x83, - 0xe7, 0x20, 0xa7, 0x5d, 0xaf, 0x78, 0x90, 0xa1, 0xf2, 0xb0, 0x86, 0xaa, 0xaa, 0x7c, 0xcb, 0x49, - 0x98, 0xc3, 0x54, 0xf2, 0x94, 0x5f, 0x10, 0x5b, 0xcc, 0x4d, 0xd0, 0x3c, 0xe0, 0x83, 0xe1, 0x21, - 0x59, 0x49, 0x5a, 0x68, 0xd9, 0x3e, 0x1d, 0x21, 0x1b, 0x63, 0xb3, 0x8f, 0xe8, 0x77, 0xb4, 0x84, - 0x32, 0x4a, 0x6a, 0x5e, 0xf4, 0xe5, 0x9a, 0x7f, 0xe8, 0x4c, 0x65, 0x73, 0x1e, 0xaa, 0xbe, 0x09, - 0x0d, 0x55, 0x79, 0x5f, 0x5a, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x27, 0x13, 0xb0, 0x32, - 0x80, 0xd1, 0xc5, 0x8d, 0xda, 0x6b, 0x69, 0xa1, 0xbc, 0xc6, 0x75, 0x75, 0x08, 0xf2, 0x94, 0x5c, - 0x5c, 0x5c, 0x5c, 0x1a, 0xf0, 0xf4, 0x8c, 0x29, 0x18, 0x92, 0x71, 0x3f, 0x06, 0x2a, 0x82, 0xec, - 0xd2, 0x33, 0x2b, 0x6d, 0x13, 0x65, 0x8a, 0x23, 0x46, 0xf8, 0x80, 0xc0, 0x50, 0x20, 0x2e, 0x84, - 0xb4, 0x1c, 0x8b, 0xab, 0x06, 0xc8, 0x2a, 0xc3, 0x51, 0xa7, 0x18, 0xeb, 0xa6, 0x40, 0x34, 0x82, - 0xfc, 0x06, 0x68, 0xaa, 0x31, 0x84, 0xfa, 0xce, 0x11, 0x2a, 0x99, 0x98, 0x35, 0xaa, 0x23, 0x38, - 0xc8, 0x57, 0x04, 0x71, 0xa8, 0xd4, 0x2e, 0x20, 0x30, 0x09, 0xb9, 0xc6, 0x0d, 0x2c, 0x61, 0x9c, - 0x07, 0xe3, 0x08, 0x04, 0x9a, 0xca, 0x03, 0xb0, 0x6b, 0x84, 0x42, 0x90, 0x60, 0x2c, 0xa5, 0x90, - 0x2e, 0x51, 0xa8, 0x2c, 0x41, 0x28, 0xbc, 0xc9, 0xe0, 0x00, 0x1b, 0x88, 0x42, 0x34, 0x40, 0x5a, - 0xcb, 0x3b, 0x72, 0xd6, 0x23, 0xa4, 0x17, 0xd6, 0x26, 0x27, 0x3e, 0x14, 0x92, 0x34, 0x0a, 0xb1, - 0xae, 0x58, 0xc9, 0xc6, 0x99, 0xc2, 0xc4, 0x51, 0x8a, 0x32, 0xc1, 0x8a, 0x0c, 0xe7, 0xc9, 0x9b, - 0x9b, 0x25, 0xe8, 0x6d, 0xcb, 0xe5, 0x29, 0x39, 0x79, 0x3b, 0x78, 0x6f, 0x9e, 0x3a, 0xae, 0xee, - 0xfe, 0x12, 0xe0, 0xa8, 0x24, 0x56, 0x4b, 0xea, 0x9d, 0x69, 0xa0, 0xd6, 0x93, 0xfd, 0xf0, 0xa4, - 0x56, 0x28, 0x30, 0xb6, 0x12, 0x58, 0x38, 0x18, 0x97, 0x0f, 0xe3, 0x33, 0xde, 0x44, 0x83, 0xd6, - 0x58, 0xc9, 0x5a, 0x49, 0xe3, 0xdf, 0x57, 0xe2, 0x20, 0x8c, 0x68, 0x14, 0x5e, 0xf3, 0x96, 0xc0, - 0x34, 0xdf, 0xb7, 0xaf, 0x96, 0xca, 0x07, 0x69, 0xb9, 0xa8, 0x9a, 0x03, 0x3f, 0x4e, 0x2a, 0xaa, - 0xbc, 0x20, 0x20, 0x3e, 0x29, 0xed, 0xdd, 0xdd, 0xd8, 0xec, 0x76, 0x9c, 0x28, 0x83, 0xbd, 0x2a, - 0xb9, 0xb5, 0x3f, 0xe1, 0x00, 0xc4, 0x0c, 0x86, 0x4c, 0x62, 0x80, 0x26, 0xf4, 0xb0, 0xc0, 0x56, - 0x82, 0x0c, 0x4a, 0x1c, 0x61, 0x28, 0xe9, 0x62, 0x03, 0x2c, 0x3c, 0xb2, 0x9d, 0x17, 0x52, 0xd3, - 0xfc, 0x48, 0x80, 0x46, 0x52, 0xe4, 0xa3, 0xe6, 0x35, 0x97, 0x77, 0xca, 0x3c, 0x56, 0x2b, 0x15, - 0x8a, 0xc2, 0xfd, 0x62, 0xae, 0xa4, 0xbe, 0x89, 0x07, 0xd5, 0xa2, 0xba, 0x2a, 0x65, 0xea, 0x99, - 0x2e, 0xb1, 0x71, 0x10, 0xbc, 0x5c, 0x9c, 0x5c, 0xfb, 0x29, 0x47, 0xc5, 0x4c, 0x9d, 0x85, 0xff, - 0x0c, 0x0c, 0x0a, 0x1f, 0x8c, 0xe3, 0x25, 0x6a, 0x7e, 0x15, 0xba, 0x25, 0x1e, 0x7f, 0xa7, 0x66, - 0x36, 0x9c, 0xe0, 0x16, 0x04, 0x5b, 0xc1, 0x2d, 0xf7, 0xc4, 0x85, 0x24, 0x82, 0x60, 0xb6, 0x89, - 0xd0, 0x7a, 0xc5, 0xdd, 0x8f, 0x90, 0x48, 0x75, 0x59, 0x2a, 0xaa, 0x89, 0x92, 0xa9, 0xd2, 0xec, - 0xb6, 0xfe, 0x7c, 0x13, 0x17, 0xbb, 0x6f, 0xb7, 0x29, 0xca, 0x75, 0xfb, 0xe8, 0x22, 0x54, 0xbe, - 0x61, 0x51, 0x27, 0x86, 0xd7, 0x1a, 0x66, 0x21, 0x75, 0xc4, 0x0c, 0x18, 0xed, 0x97, 0xd6, 0x68, - 0xb4, 0x49, 0xc4, 0x92, 0x2d, 0xd4, 0x95, 0x59, 0x8d, 0x4d, 0x6c, 0xcd, 0x98, 0x97, 0x82, 0x9d, - 0x15, 0x5d, 0x95, 0x33, 0x19, 0x84, 0x86, 0x5e, 0xb9, 0x28, 0x62, 0x20, 0xa4, 0x49, 0x20, 0x64, - 0x99, 0x5b, 0x7f, 0x10, 0xf7, 0x84, 0x01, 0x56, 0xab, 0xff, 0x10, 0x14, 0x9e, 0x72, 0x3e, 0xc2, - 0x9a, 0x53, 0x31, 0x99, 0xde, 0xf7, 0x4b, 0x11, 0xd3, 0xc4, 0x02, 0x93, 0x17, 0x97, 0x99, 0x24, - 0x8c, 0x2d, 0xc6, 0x28, 0xf5, 0xa5, 0x97, 0x84, 0x01, 0x59, 0xee, 0x0a, 0x27, 0x45, 0x45, 0x5b, - 0x47, 0x98, 0x9c, 0x28, 0x93, 0xb5, 0x2d, 0x5f, 0xb3, 0xf2, 0x19, 0xe8, 0x5e, 0x12, 0x74, 0x66, - 0x1e, 0xbd, 0x3f, 0x42, 0x52, 0xaf, 0x54, 0xcb, 0xd7, 0xbe, 0xbd, 0xc4, 0xc1, 0x24, 0x7f, 0x21, - 0xb3, 0xa2, 0x51, 0x07, 0x4a, 0xc8, 0xca, 0x38, 0x80, 0x80, 0xd1, 0xc0, 0xe3, 0xf3, 0xe9, 0x01, - 0xc6, 0xe5, 0x81, 0x9c, 0x1f, 0x93, 0x64, 0xb3, 0xd6, 0x65, 0xec, 0x12, 0x35, 0x40, 0x42, 0x15, - 0x17, 0x8a, 0x10, 0x16, 0xe6, 0x60, 0xb0, 0x5e, 0x9b, 0x9b, 0xf1, 0x03, 0x39, 0x54, 0x6a, 0x83, - 0x1d, 0x1f, 0x6f, 0x8d, 0x5e, 0x71, 0xb8, 0x54, 0xa8, 0x8e, 0x41, 0xb4, 0x41, 0xc4, 0xf9, 0xe7, - 0x9d, 0x4a, 0x4a, 0x56, 0x3e, 0x20, 0x13, 0x5f, 0xc7, 0x70, 0x3a, 0xfa, 0xcb, 0x2f, 0xe5, 0xb7, - 0xf7, 0x90, 0x7a, 0x4c, 0x40, 0x22, 0x24, 0x0e, 0x10, 0x9c, 0x2f, 0xbe, 0x14, 0x3b, 0x70, 0xe5, - 0x8c, 0x57, 0x08, 0x8a, 0x16, 0x2e, 0x4d, 0x8c, 0x14, 0x1d, 0x18, 0x87, 0xa1, 0x7f, 0xf8, 0x27, - 0x24, 0x6c, 0x00, 0x05, 0x85, 0x48, 0xd9, 0xd5, 0xeb, 0x82, 0xd1, 0x84, 0x88, 0x42, 0x2b, 0x60, - 0x2a, 0xc4, 0xe0, 0x62, 0x5c, 0x97, 0x9f, 0xd7, 0x0c, 0x04, 0x42, 0xc1, 0x12, 0xb6, 0xde, 0xc0, - 0x1f, 0x71, 0x68, 0xb7, 0x7f, 0x5d, 0xfb, 0xae, 0xca, 0x41, 0x69, 0x07, 0x4a, 0x0d, 0x16, 0x9f, - 0x97, 0xa2, 0xbc, 0x21, 0xd5, 0x3b, 0x7d, 0x08, 0x7f, 0xa2, 0xbc, 0x9d, 0x1c, 0xbc, 0x93, 0xa2, - 0x39, 0x13, 0x89, 0x04, 0xc3, 0x00, 0x2e, 0xc7, 0x0f, 0x61, 0xf2, 0x75, 0xb8, 0xf4, 0xb5, 0xaf, - 0x04, 0x04, 0xf5, 0xb3, 0x91, 0x2d, 0x43, 0x6c, 0x80, 0x04, 0x36, 0x24, 0x41, 0x53, 0x44, 0xab, - 0x2f, 0x1f, 0xfb, 0x0a, 0xb7, 0x15, 0x5d, 0xc2, 0x6e, 0x02, 0xe0, 0x00, 0x43, 0x2c, 0x2a, 0x3c, - 0xc1, 0x50, 0x00, 0x21, 0x2a, 0xd0, 0x8f, 0x55, 0x74, 0x2c, 0x78, 0xf3, 0xac, 0xa0, 0x3a, 0x00, - 0xad, 0x58, 0x4a, 0xf2, 0xd0, 0x00, 0xaa, 0x7a, 0xcf, 0xb2, 0xb2, 0xe2, 0x04, 0x82, 0x9f, 0x67, - 0xbe, 0xcf, 0x7a, 0xac, 0xaa, 0x47, 0x87, 0x5f, 0x62, 0x74, 0x1c, 0x47, 0xfb, 0xe8, 0x27, 0xff, - 0xa9, 0x5f, 0xe2, 0x10, 0xe1, 0xdb, 0xe0, 0xa4, 0xd2, 0x29, 0xa7, 0x20, 0x40, 0x16, 0xeb, 0x51, - 0x75, 0x57, 0xf8, 0x25, 0x1e, 0x87, 0x2f, 0x3d, 0x17, 0xe7, 0x5e, 0x0a, 0x35, 0x04, 0xbb, 0x5e, - 0xbd, 0xfb, 0x04, 0x40, 0xab, 0x86, 0xd3, 0xaf, 0x16, 0x3b, 0x44, 0x07, 0x70, 0x94, 0x49, 0xc0, - 0xb8, 0x78, 0x3e, 0x12, 0xb0, 0xff, 0x82, 0x9a, 0x43, 0x6a, 0x08, 0xd4, 0x1d, 0x2a, 0xe8, 0x1a, - 0x91, 0xb9, 0x53, 0xe0, 0x63, 0xff, 0xd1, 0x52, 0x6b, 0x9a, 0x69, 0x42, 0x45, 0xa7, 0x09, 0x0b, - 0x72, 0x41, 0x57, 0x1d, 0x27, 0xdc, 0xae, 0x10, 0x12, 0x0a, 0x82, 0x78, 0xea, 0x3d, 0x00, 0x00, - 0xbc, 0x20, 0x00, 0x13, 0x95, 0x16, 0x8f, 0x0e, 0x71, 0xf2, 0x90, 0x73, 0x21, 0xc7, 0xe0, 0x90, - 0xad, 0xe5, 0x08, 0x04, 0x89, 0x7d, 0x12, 0xab, 0xa3, 0x41, 0xf0, 0x45, 0x77, 0x55, 0x94, 0x77, - 0x5c, 0x3e, 0x84, 0xb9, 0x7d, 0x5a, 0xfa, 0xb8, 0x2f, 0x46, 0x64, 0xbd, 0x09, 0x2a, 0x5f, 0x51, - 0xdb, 0xe0, 0x90, 0x44, 0xde, 0xc3, 0x8b, 0x88, 0x10, 0x08, 0x04, 0x53, 0x4a, 0xe5, 0x18, 0x2f, - 0x6d, 0x61, 0x3d, 0xde, 0xf7, 0x55, 0xab, 0xf8, 0x52, 0x54, 0x09, 0x68, 0x6e, 0x00, 0x34, 0xd0, - 0xa8, 0x12, 0x85, 0x88, 0xf7, 0x1d, 0x58, 0x5c, 0xb9, 0xa1, 0x6f, 0x42, 0xb1, 0x52, 0x83, 0x86, - 0x1d, 0x18, 0x82, 0x74, 0xc5, 0xa0, 0xd1, 0x82, 0x36, 0x12, 0xa6, 0x4f, 0x3f, 0x8f, 0x07, 0xe2, - 0x04, 0x45, 0x80, 0xf5, 0x24, 0x89, 0xc9, 0x37, 0x12, 0x11, 0x08, 0x1b, 0xb0, 0x47, 0xa2, 0x41, - 0x38, 0xd3, 0x42, 0x27, 0xbd, 0xdd, 0xf1, 0xeb, 0x90, 0x0c, 0x52, 0x59, 0xff, 0x04, 0x81, 0x57, - 0x7d, 0x20, 0x78, 0x24, 0xe2, 0xe2, 0xe5, 0x45, 0x5c, 0x48, 0xc0, 0xb5, 0x05, 0x1e, 0x04, 0x0c, - 0x40, 0xf1, 0x47, 0x7e, 0x84, 0x14, 0x06, 0xa1, 0x0d, 0x1b, 0xbf, 0x85, 0x06, 0x8e, 0x2e, 0x77, - 0x0a, 0x20, 0x87, 0x12, 0x70, 0xb2, 0xd9, 0xe9, 0x01, 0x3d, 0xc8, 0x0e, 0x99, 0xea, 0x8d, 0x7a, - 0x13, 0xc2, 0x00, 0x8e, 0xc7, 0x7e, 0x0a, 0xfc, 0x8c, 0x68, 0x66, 0x96, 0x1b, 0x43, 0x77, 0x6d, - 0xf7, 0xc1, 0x20, 0xa3, 0x84, 0x02, 0xb1, 0x18, 0x77, 0xc2, 0x51, 0x54, 0xb0, 0x1a, 0x61, 0x61, - 0x17, 0x12, 0xe0, 0xe2, 0xd7, 0x86, 0x02, 0x28, 0x26, 0x70, 0x7d, 0x48, 0xdc, 0x23, 0x5e, 0xfa, - 0x35, 0x7d, 0x7b, 0xeb, 0x85, 0x74, 0x77, 0x47, 0xf4, 0x76, 0x2f, 0xa2, 0x39, 0x13, 0xd1, 0x26, - 0x7d, 0x1c, 0xe9, 0x7d, 0x4e, 0x92, 0x74, 0x4a, 0xfa, 0x96, 0xe2, 0x44, 0x82, 0x21, 0x50, 0x6a, - 0x3c, 0xab, 0x44, 0xb7, 0xf8, 0xd2, 0x3e, 0xc1, 0xe0, 0x1e, 0x2c, 0x4d, 0x04, 0xa0, 0x0a, 0xc3, - 0xc1, 0xef, 0x88, 0x80, 0x9e, 0x38, 0x7b, 0x84, 0xa0, 0x38, 0xdf, 0x8b, 0x21, 0xe2, 0x0e, 0xb9, - 0x5f, 0xaa, 0xaa, 0x27, 0x02, 0x08, 0x11, 0xc1, 0xeb, 0xe4, 0x7c, 0x90, 0xf8, 0x50, 0xc8, 0x40, - 0x65, 0xad, 0x03, 0x15, 0x5a, 0x2c, 0x0f, 0x59, 0x49, 0x63, 0x2b, 0x54, 0xc9, 0x7e, 0x26, 0xa9, - 0x39, 0xc1, 0x81, 0x49, 0x1b, 0x13, 0xc6, 0x1c, 0x87, 0x98, 0xe4, 0x25, 0x77, 0xdc, 0x21, 0x0c, - 0x14, 0x20, 0x62, 0xcb, 0x27, 0x90, 0x98, 0x5c, 0x85, 0x43, 0xbc, 0xe8, 0x96, 0xca, 0x85, 0x3c, - 0x1c, 0xf2, 0xab, 0x73, 0x6a, 0x7f, 0xe0, 0xb3, 0xb6, 0x27, 0x86, 0x98, 0x9c, 0x01, 0xda, 0x21, - 0x8f, 0xb0, 0xfb, 0x11, 0xe5, 0xf9, 0x2a, 0xf1, 0x92, 0x7a, 0x7a, 0x6e, 0x3f, 0x93, 0xeb, 0x9a, - 0xa9, 0x06, 0x0f, 0xc4, 0x82, 0x4d, 0x6d, 0xbb, 0x89, 0x8b, 0xb0, 0x0d, 0x52, 0x0e, 0x04, 0x6c, - 0xdd, 0x9e, 0x26, 0x20, 0xe0, 0x1b, 0x85, 0xa6, 0x01, 0xfb, 0x74, 0xc4, 0xc8, 0xc2, 0xea, 0x37, - 0xce, 0xc5, 0xc5, 0x6c, 0xb8, 0x90, 0x42, 0x2c, 0x38, 0x63, 0x79, 0x02, 0x7c, 0x46, 0xed, 0x8d, - 0x55, 0x6c, 0xec, 0x3e, 0x8a, 0x41, 0x62, 0x17, 0xe8, 0x45, 0x7d, 0x1c, 0x89, 0xf5, 0xc2, 0x7e, - 0xbd, 0xf5, 0x78, 0x53, 0xaf, 0x57, 0x58, 0xa4, 0xe8, 0x85, 0x4f, 0xa9, 0xd2, 0xf8, 0x24, 0x8e, - 0x80, 0x29, 0x88, 0xb6, 0x0f, 0x0f, 0x12, 0x14, 0x14, 0x36, 0x60, 0xd1, 0xa6, 0x0c, 0xa3, 0xe1, - 0xd6, 0x85, 0x56, 0x82, 0x99, 0x44, 0xe8, 0xdc, 0x4a, 0xda, 0x56, 0x51, 0x0a, 0xa6, 0xec, 0x3c, - 0x06, 0x48, 0xf9, 0x56, 0x4e, 0xc1, 0xa8, 0x38, 0x88, 0x50, 0xd9, 0x70, 0xb8, 0xd8, 0x6c, 0x00, - 0x3a, 0x17, 0x20, 0xb1, 0x20, 0x4f, 0x70, 0xf7, 0x0b, 0x37, 0x64, 0x01, 0x2c, 0x40, 0xf7, 0xdc, - 0x7f, 0x85, 0x3a, 0xc0, 0xf5, 0xa3, 0xcf, 0x05, 0x3f, 0xde, 0xd3, 0x7e, 0x14, 0x1c, 0xca, 0x4b, - 0xec, 0x79, 0x45, 0xff, 0xf1, 0x10, 0xa1, 0x55, 0x42, 0x1c, 0xf4, 0x44, 0xb1, 0xb8, 0x8b, 0xcf, - 0xa4, 0x54, 0xdd, 0x2c, 0xe6, 0x35, 0x75, 0xa0, 0xc1, 0x0d, 0xbc, 0x60, 0xdf, 0x71, 0x30, 0xa4, - 0x5d, 0x64, 0xc8, 0xf7, 0x9b, 0x25, 0xcc, 0x89, 0xd6, 0x29, 0xfe, 0xad, 0xdd, 0x05, 0x57, 0x2c, - 0xa1, 0xf8, 0x19, 0x86, 0x63, 0x34, 0xe7, 0x07, 0x6f, 0x85, 0x3a, 0x33, 0x97, 0xc4, 0x0a, 0x86, - 0xa4, 0x2a, 0x83, 0x87, 0x27, 0x8f, 0xa2, 0x30, 0x69, 0x91, 0x01, 0x5c, 0x50, 0xff, 0x7c, 0x14, - 0x13, 0x76, 0x57, 0x77, 0xc5, 0xf0, 0x95, 0x40, 0x5d, 0x79, 0x1c, 0x31, 0xbd, 0xcb, 0xde, 0xbc, - 0x0e, 0x3b, 0x5a, 0x02, 0xc4, 0x09, 0x04, 0x21, 0x16, 0x71, 0x0a, 0x4b, 0xbc, 0x39, 0xca, 0xae, - 0xa9, 0xe2, 0x3a, 0x12, 0x3a, 0xbe, 0x8c, 0xd7, 0xd6, 0xa3, 0x7a, 0xb4, 0x57, 0x53, 0x2c, 0xfa, - 0x8e, 0xdf, 0x44, 0xca, 0xfa, 0x2a, 0x74, 0xf1, 0x20, 0xb0, 0x74, 0x40, 0x30, 0x2b, 0x14, 0xec, - 0x71, 0x02, 0x20, 0x36, 0x2b, 0x27, 0x1a, 0x16, 0x3f, 0x3e, 0x14, 0xa3, 0x6b, 0xcd, 0x68, 0xc2, - 0xcc, 0x31, 0xff, 0xc1, 0x08, 0x79, 0x63, 0x3f, 0x14, 0x6b, 0xa9, 0x19, 0xc3, 0xe8, 0x67, 0xb9, - 0xaf, 0x85, 0x0a, 0xdc, 0x05, 0xaa, 0xac, 0x95, 0x65, 0xb2, 0xda, 0x4a, 0xc5, 0x78, 0x97, 0x18, - 0x79, 0xfc, 0x40, 0x2e, 0x24, 0xac, 0xaa, 0x4a, 0xaa, 0xff, 0x19, 0x76, 0x17, 0x89, 0xd0, 0xbc, - 0xee, 0x45, 0x29, 0x97, 0x8b, 0x89, 0xb0, 0x5e, 0xab, 0x17, 0xf1, 0x87, 0x50, 0x85, 0x23, 0xee, - 0xb9, 0x4f, 0x70, 0x9d, 0x06, 0x05, 0xd4, 0x84, 0x5e, 0xce, 0x38, 0xcb, 0x59, 0xe5, 0xcd, 0x0f, - 0x10, 0x67, 0xc1, 0x16, 0xdc, 0x56, 0x2b, 0x7f, 0x8a, 0x14, 0x82, 0x11, 0x20, 0xac, 0x42, 0xf1, - 0x71, 0x07, 0xf1, 0x20, 0x98, 0x26, 0xf0, 0xc0, 0xa7, 0x4f, 0x37, 0xd8, 0x2a, 0x31, 0x00, 0x13, - 0xec, 0x20, 0x8b, 0x2a, 0x73, 0xeb, 0x5f, 0xea, 0x3b, 0x2f, 0xd4, 0x85, 0x13, 0xd5, 0x32, 0x3f, - 0x51, 0xf5, 0x74, 0x43, 0x1b, 0xea, 0x95, 0x0d, 0xe0, 0x8e, 0xb5, 0xb1, 0xf5, 0x4a, 0xfd, 0x65, - 0x37, 0x5a, 0xbe, 0x3c, 0x29, 0x3b, 0xa4, 0x07, 0x9c, 0x22, 0x02, 0x4a, 0xd1, 0x5f, 0x8e, 0x1a, - 0x3b, 0x1e, 0x44, 0x61, 0x91, 0x24, 0x83, 0xe1, 0x42, 0xaf, 0xf5, 0x8f, 0x0f, 0x0a, 0xc7, 0x93, - 0xe7, 0x0e, 0x17, 0x09, 0xc1, 0x6a, 0x34, 0x00, 0x7c, 0x90, 0x94, 0x3c, 0x48, 0xb4, 0x40, 0xb4, - 0xc0, 0x7f, 0x00, 0xe4, 0xb8, 0x66, 0x19, 0xa0, 0x2d, 0x45, 0x24, 0x0e, 0xd1, 0xe1, 0x40, 0xf8, - 0xe7, 0x11, 0x1c, 0xe6, 0x3c, 0x40, 0x2c, 0xa8, 0xba, 0xcb, 0x34, 0x31, 0x7c, 0x2e, 0xb8, 0x38, - 0xcc, 0xac, 0x0a, 0x30, 0xbd, 0xba, 0xda, 0x7f, 0x12, 0x14, 0x9f, 0x29, 0xb6, 0x76, 0x2f, 0x75, - 0x8b, 0x8f, 0x60, 0x25, 0x89, 0x04, 0x99, 0x63, 0x0a, 0x77, 0xd5, 0x87, 0x88, 0x0f, 0x7c, 0x12, - 0x1e, 0xaa, 0xbd, 0xc4, 0x46, 0x65, 0x52, 0x31, 0xaa, 0xc7, 0x04, 0x0b, 0xc5, 0x76, 0x0d, 0x5d, - 0x65, 0x1b, 0xc7, 0x1c, 0x1e, 0x04, 0x05, 0xe4, 0x68, 0x7e, 0x22, 0xcc, 0x72, 0x7c, 0x56, 0xff, - 0x12, 0x09, 0x48, 0x4b, 0x41, 0x6c, 0xb3, 0x01, 0xef, 0xe2, 0x01, 0x37, 0xa6, 0x65, 0xc1, 0xe5, - 0xec, 0x53, 0xbc, 0x9d, 0x04, 0xd3, 0xbf, 0x54, 0xa7, 0xd4, 0x89, 0x7d, 0x5c, 0x04, 0xba, 0x23, - 0xfd, 0x52, 0x2f, 0x21, 0x15, 0x7f, 0x57, 0xfa, 0xa6, 0x4f, 0xa2, 0xb4, 0x5f, 0x56, 0x1e, 0x11, - 0x08, 0x66, 0x4d, 0x29, 0x58, 0xa1, 0x26, 0xec, 0x1c, 0x4d, 0x83, 0x40, 0xbf, 0xc6, 0x91, 0xc0, - 0x04, 0x00, 0x08, 0xce, 0x12, 0xa8, 0x7b, 0x45, 0x0f, 0xb7, 0xfc, 0xb7, 0xad, 0x48, 0xfb, 0xc7, - 0x40, 0x0d, 0xd8, 0x90, 0x57, 0x45, 0x52, 0x34, 0xe1, 0x8a, 0x8f, 0xbd, 0x3b, 0xe8, 0xe0, 0x41, - 0x7c, 0x98, 0xd4, 0x3a, 0x2c, 0x62, 0xaa, 0x38, 0x51, 0xe2, 0xe0, 0x2a, 0xd8, 0x2d, 0x82, 0x58, - 0x6d, 0x89, 0x9e, 0x2a, 0x77, 0x24, 0x3f, 0xc2, 0x91, 0x07, 0xc8, 0x27, 0xb6, 0x3c, 0x52, 0x0b, - 0x3a, 0xad, 0xbd, 0xe4, 0x86, 0xb8, 0xca, 0xa3, 0x31, 0xec, 0xf0, 0x41, 0xb0, 0x56, 0xf6, 0x4a, - 0x08, 0x0c, 0x8c, 0x49, 0xad, 0xe1, 0xd6, 0xa5, 0xab, 0x7d, 0x44, 0xfe, 0xd3, 0xe5, 0x87, 0xdf, - 0x05, 0x67, 0xcc, 0x04, 0x3c, 0x06, 0xf0, 0x00, 0x0c, 0x27, 0x79, 0x78, 0xfa, 0xf0, 0x37, 0xcf, - 0xe2, 0x46, 0x90, 0xf8, 0x06, 0xa3, 0x61, 0xc0, 0xab, 0x09, 0x14, 0x02, 0x01, 0x64, 0xca, 0x01, - 0x3c, 0x1c, 0x1d, 0x02, 0x92, 0xd6, 0x1c, 0x54, 0x01, 0x21, 0xca, 0x74, 0xb2, 0x20, 0x05, 0x71, - 0x4a, 0x4a, 0x96, 0xfc, 0xb5, 0xe2, 0x06, 0xa8, 0x11, 0x03, 0x18, 0x03, 0x54, 0xd7, 0x3f, 0xf5, - 0x4a, 0x0c, 0x9e, 0x94, 0x1e, 0x7d, 0x6c, 0xe4, 0x23, 0x42, 0x88, 0xb6, 0x73, 0xfe, 0x5f, 0x67, - 0xc4, 0x85, 0x0a, 0x74, 0x18, 0x27, 0xcc, 0xcf, 0x16, 0x38, 0x09, 0xe5, 0x3d, 0x8c, 0x88, 0xa5, - 0x31, 0x1a, 0x50, 0x65, 0xa2, 0x86, 0x8d, 0xc3, 0xce, 0x25, 0x89, 0x21, 0x30, 0xb5, 0x63, 0x98, - 0xf8, 0x7f, 0x0f, 0x2d, 0x5d, 0xde, 0x53, 0xfd, 0x6f, 0xcb, 0x26, 0xb9, 0x85, 0xdf, 0xbc, 0x40, - 0x2b, 0x3b, 0x20, 0xed, 0x71, 0x65, 0xce, 0x92, 0x51, 0x6b, 0x23, 0x4a, 0xad, 0x3f, 0xb9, 0xaf, - 0xa7, 0x0f, 0x04, 0xbc, 0xaa, 0x34, 0x04, 0xac, 0xfc, 0x38, 0x90, 0x56, 0x28, 0x6b, 0xe5, 0xb8, - 0x08, 0x51, 0xde, 0xe0, 0xef, 0xe7, 0x09, 0x89, 0x71, 0xe3, 0x3a, 0x0c, 0xa5, 0x84, 0x3a, 0x10, - 0xc9, 0x3a, 0x3e, 0x11, 0x7d, 0x0b, 0x73, 0xe8, 0x50, 0xee, 0x3e, 0x0b, 0x05, 0x1b, 0xd0, 0x0d, - 0x8a, 0x6c, 0x5d, 0xdd, 0x32, 0xec, 0x19, 0x5e, 0xbc, 0x8e, 0xfc, 0x29, 0x43, 0x1a, 0x63, 0x82, - 0xa6, 0x38, 0x22, 0xe0, 0xf7, 0x3c, 0x2d, 0x27, 0x71, 0x08, 0x60, 0x30, 0x8f, 0x10, 0x34, 0x85, - 0x05, 0xb2, 0x16, 0x4e, 0x2c, 0x7b, 0xcc, 0x56, 0x4f, 0x60, 0xe9, 0x42, 0xfc, 0x52, 0xa6, 0x0f, - 0xdc, 0xe7, 0xdf, 0xb0, 0x00, 0x07, 0x0a, 0x0a, 0xa6, 0x1d, 0xf5, 0x56, 0x65, 0x09, 0x9d, 0xd0, - 0x1d, 0x8b, 0x57, 0xa2, 0x4c, 0x31, 0x6e, 0xa7, 0x88, 0x0a, 0x08, 0x6d, 0x1e, 0xd0, 0x12, 0x04, - 0xe4, 0xcb, 0xfe, 0x5c, 0xf4, 0xd8, 0x0b, 0x12, 0x4e, 0xed, 0x17, 0xb9, 0xf0, 0x52, 0x25, 0x2c, - 0xac, 0x67, 0xc6, 0xe2, 0xdc, 0xf9, 0xbf, 0xc3, 0xc4, 0x8a, 0x85, 0x13, 0xe0, 0x6f, 0x65, 0xdb, - 0xd0, 0x9a, 0xc0, 0x7c, 0x6b, 0x38, 0xc2, 0xaf, 0x8b, 0xd3, 0x78, 0x09, 0x45, 0x5f, 0xf9, 0xb8, - 0x98, 0x94, 0xaf, 0xff, 0xda, 0x93, 0x78, 0x81, 0x92, 0x71, 0xdc, 0xac, 0xa1, 0x82, 0xc8, 0x51, - 0xb3, 0x41, 0x93, 0x7f, 0x3c, 0x1e, 0xb0, 0x62, 0x46, 0x82, 0x82, 0x9d, 0x05, 0xcc, 0x12, 0x2d, - 0x38, 0x91, 0x88, 0x02, 0x7f, 0xf3, 0x30, 0xc5, 0xf6, 0xc7, 0x8c, 0x09, 0x65, 0x93, 0x48, 0xe5, - 0xc5, 0x1e, 0xa3, 0xd5, 0xe0, 0xac, 0xf9, 0x86, 0x2a, 0x47, 0x64, 0x2b, 0x00, 0x2c, 0xc2, 0xdb, - 0xb6, 0xe6, 0xfb, 0xfd, 0x16, 0x13, 0xe0, 0x88, 0x62, 0x71, 0x37, 0xc3, 0xe1, 0x0a, 0xc5, 0xd4, - 0xe8, 0x4e, 0xc0, 0x9e, 0x08, 0x79, 0xb3, 0x25, 0xb2, 0x4d, 0x16, 0x43, 0xd0, 0x45, 0x32, 0x0a, - 0xf4, 0x4a, 0xfa, 0xe5, 0xf0, 0x47, 0xad, 0x60, 0x97, 0xab, 0xd7, 0x57, 0x97, 0xab, 0xfd, 0x72, - 0xae, 0xb9, 0xcf, 0xa2, 0x63, 0x2b, 0xa3, 0xa5, 0x0e, 0x24, 0x12, 0x1b, 0x28, 0xc1, 0x71, 0xd8, - 0xe3, 0xe2, 0x01, 0x0e, 0x2e, 0x39, 0xa6, 0x8e, 0xf8, 0x90, 0xa1, 0x1d, 0xdd, 0xdc, 0xb6, 0x2b, - 0x6c, 0x89, 0xda, 0x0d, 0xd8, 0x18, 0x9c, 0x34, 0x46, 0x5e, 0x14, 0x34, 0xd9, 0x24, 0x1f, 0xe3, - 0x5e, 0x1b, 0x8a, 0x10, 0x63, 0x26, 0x15, 0x48, 0x17, 0x3e, 0x75, 0x20, 0x89, 0x07, 0xc1, 0xc0, - 0x1b, 0x7c, 0x5d, 0x3e, 0x6d, 0x69, 0x1f, 0x15, 0x67, 0xc2, 0x96, 0x10, 0x4b, 0x32, 0xf0, 0x73, - 0x68, 0xa7, 0x87, 0x36, 0xad, 0xc7, 0x44, 0x62, 0x8c, 0x1c, 0xf8, 0x47, 0xe8, 0x7e, 0xd8, 0x7b, - 0x92, 0xb9, 0xdb, 0x6a, 0xd3, 0x58, 0xce, 0x41, 0x94, 0xf8, 0x88, 0x0e, 0x67, 0x88, 0x0a, 0x0d, - 0x4e, 0x52, 0xfc, 0x69, 0xc3, 0x8b, 0xb3, 0xa6, 0xe8, 0x08, 0x5f, 0x2d, 0xd8, 0x68, 0xb7, 0xc0, - 0x7d, 0x29, 0xa8, 0x7b, 0x7c, 0xea, 0x06, 0x9f, 0xe2, 0x41, 0x19, 0x23, 0xdd, 0x77, 0x7e, 0x24, - 0x48, 0x2c, 0x12, 0x9d, 0x8b, 0x1d, 0x58, 0x71, 0x50, 0x74, 0x60, 0xa2, 0x90, 0x36, 0x62, 0x1a, - 0xce, 0x10, 0x05, 0xfc, 0x48, 0x2e, 0xb3, 0x36, 0x3f, 0x4a, 0xff, 0x78, 0x91, 0xf4, 0x08, 0x61, - 0x9b, 0x1d, 0x03, 0xd2, 0x22, 0x4d, 0x8e, 0x7c, 0x63, 0xe2, 0x41, 0x4f, 0x74, 0xc5, 0x61, 0x03, - 0x8c, 0xc0, 0x0a, 0xcb, 0x77, 0x9e, 0x7f, 0xf8, 0x50, 0x67, 0x94, 0x82, 0xab, 0x84, 0x0a, 0x86, - 0x5f, 0xb6, 0x87, 0x36, 0xe3, 0xe6, 0x83, 0x31, 0xbf, 0xc1, 0x59, 0x0e, 0x5d, 0x19, 0x20, 0x18, - 0xc6, 0x72, 0x5a, 0x9e, 0x1e, 0xdd, 0x73, 0x06, 0xc7, 0x38, 0xc1, 0x62, 0xf7, 0xd0, 0x5e, 0x2f, - 0x82, 0x1b, 0x4d, 0x6c, 0x42, 0x7d, 0x0a, 0xef, 0xa2, 0xe5, 0xf5, 0x8a, 0xfa, 0x24, 0x33, 0xea, - 0xc1, 0xf4, 0x46, 0x22, 0x7a, 0xf5, 0x70, 0xc6, 0xe2, 0xb4, 0x22, 0xb4, 0x78, 0x10, 0xe9, 0xfc, - 0xa5, 0x35, 0x01, 0x6a, 0x1d, 0xdc, 0xff, 0xff, 0x0d, 0x47, 0x29, 0xd2, 0x18, 0xc1, 0x2f, 0xdc, - 0x55, 0xfc, 0x15, 0xd9, 0x98, 0xcd, 0x52, 0xd3, 0x9b, 0x2a, 0x6c, 0xda, 0x3e, 0xb5, 0x3f, 0x89, - 0x05, 0x32, 0xd5, 0x14, 0x9a, 0xb7, 0xbf, 0x0f, 0x18, 0xd9, 0x9c, 0x04, 0x2b, 0x9e, 0x8f, 0xf0, - 0xa8, 0x82, 0xf9, 0x70, 0x20, 0x0e, 0xb0, 0x7f, 0x7c, 0xfd, 0x7f, 0x05, 0x25, 0x69, 0xb8, 0x70, - 0xdc, 0xd8, 0x07, 0xa6, 0x61, 0x82, 0x4f, 0x34, 0x54, 0x7b, 0x95, 0x54, 0x9c, 0xb8, 0x34, 0xe5, - 0x45, 0x2c, 0x8e, 0xdc, 0x44, 0x28, 0x2e, 0x2d, 0xaa, 0x8d, 0x73, 0x20, 0xed, 0xbd, 0xed, 0xca, - 0x2b, 0x68, 0x94, 0x41, 0x4f, 0x8d, 0x32, 0x73, 0x8d, 0xa2, 0x42, 0x19, 0xc8, 0x20, 0xbc, 0x37, - 0xf8, 0x2e, 0x21, 0x59, 0x50, 0x08, 0x38, 0x07, 0xb3, 0x66, 0x6a, 0xd3, 0xef, 0x85, 0x0f, 0x1d, - 0x74, 0x1c, 0x00, 0x02, 0xde, 0xd0, 0x81, 0x65, 0xed, 0x47, 0x06, 0xf5, 0x50, 0xbc, 0x30, 0x13, - 0xe4, 0x11, 0xaa, 0x18, 0x86, 0x20, 0x40, 0x74, 0xa3, 0x9e, 0x2f, 0xca, 0x4e, 0x73, 0x12, 0xe4, - 0x67, 0xff, 0x2a, 0x38, 0x55, 0x1a, 0xff, 0x82, 0x59, 0x71, 0x86, 0xf6, 0x3a, 0x06, 0x49, 0x5b, - 0xef, 0x82, 0x12, 0x13, 0x3d, 0x23, 0xa7, 0x89, 0x04, 0xe2, 0x03, 0xce, 0x55, 0x1d, 0xb9, 0xcc, - 0x49, 0xd6, 0x32, 0xd9, 0x67, 0x4b, 0x84, 0x04, 0x0b, 0x93, 0xa9, 0x7a, 0xaa, 0xa9, 0x20, 0x27, - 0x8c, 0xc2, 0xff, 0x05, 0x03, 0x44, 0x58, 0x62, 0x2f, 0x40, 0xd6, 0xca, 0xf0, 0xc7, 0x5e, 0xfa, - 0xd7, 0xd1, 0xd3, 0xaf, 0x45, 0x4e, 0xbd, 0x11, 0x8f, 0xa9, 0x41, 0xf4, 0x46, 0xfa, 0xb7, 0xd5, - 0xbe, 0xae, 0x4b, 0xc6, 0x88, 0x1f, 0x62, 0xf6, 0x1a, 0x93, 0x70, 0xd3, 0x3b, 0x29, 0x8d, 0x06, - 0xd4, 0xfa, 0xaa, 0x65, 0x02, 0xe5, 0xe3, 0x61, 0x7d, 0x3b, 0x6f, 0xc4, 0x85, 0x08, 0x49, 0x11, - 0x25, 0x8c, 0x78, 0xf0, 0xb1, 0x91, 0x1d, 0xb3, 0x96, 0xa2, 0x1d, 0xe9, 0x92, 0x8b, 0x80, 0xf7, - 0xaf, 0xea, 0xde, 0x42, 0x89, 0x40, 0xd1, 0xa7, 0xef, 0x82, 0x13, 0x90, 0x91, 0x48, 0x29, 0xfc, - 0xeb, 0x89, 0x05, 0x9b, 0x73, 0x86, 0x02, 0xbc, 0xf0, 0xc7, 0x91, 0x16, 0xa4, 0xa8, 0xef, 0x88, - 0x0a, 0x5f, 0xaa, 0x56, 0xae, 0xc0, 0x98, 0x05, 0xb2, 0x1b, 0x55, 0x3e, 0x30, 0x4b, 0x36, 0x3e, - 0x14, 0x10, 0x6e, 0xaa, 0x28, 0x79, 0x3c, 0x2a, 0x59, 0x16, 0x63, 0x77, 0xc5, 0xb8, 0xc3, 0xe5, - 0x66, 0xbb, 0x1f, 0x05, 0x67, 0x0b, 0xc7, 0x89, 0x63, 0x17, 0x0d, 0xee, 0x3c, 0x2f, 0x7a, 0x76, - 0x92, 0xed, 0x70, 0x6d, 0x11, 0x44, 0x3b, 0x8c, 0x1b, 0x9f, 0xcf, 0x78, 0x94, 0x25, 0xfc, 0x42, - 0xa6, 0x7c, 0x48, 0x29, 0x85, 0xc8, 0xf5, 0x76, 0x08, 0xb7, 0x81, 0x71, 0xbe, 0xae, 0xa7, 0x37, - 0xba, 0x9e, 0x1f, 0x99, 0xbe, 0xc7, 0x28, 0xdb, 0x7f, 0x82, 0xbe, 0xc1, 0x02, 0xef, 0xb1, 0xd9, - 0x99, 0x05, 0xbb, 0xe3, 0x4e, 0xa9, 0xe7, 0x2c, 0x71, 0xe4, 0x0f, 0x94, 0x82, 0x3a, 0x2b, 0xee, - 0xda, 0x2d, 0x37, 0xfd, 0xb2, 0xf8, 0xf8, 0x80, 0x4b, 0x60, 0x2c, 0xaa, 0x05, 0x18, 0xa3, 0x2c, - 0x62, 0x8d, 0xfe, 0x22, 0xf6, 0xdd, 0x81, 0x8d, 0xd1, 0x9b, 0xc4, 0x07, 0xc1, 0x21, 0xae, 0xbc, - 0xdf, 0x04, 0xa4, 0x6d, 0x78, 0xad, 0x21, 0xbf, 0xc2, 0x82, 0x83, 0x21, 0x90, 0x94, 0x91, 0x30, - 0xf6, 0x95, 0x31, 0xee, 0xc8, 0x78, 0x94, 0xe5, 0xb7, 0xda, 0xdc, 0xde, 0xfb, 0xe1, 0x0e, 0xab, - 0xd5, 0x4a, 0xd9, 0x35, 0x55, 0xf4, 0x26, 0xe3, 0xd0, 0x9c, 0xbe, 0xcb, 0x9e, 0x8c, 0x1b, 0xe8, - 0x73, 0x22, 0x3a, 0x12, 0xc7, 0xd7, 0x5f, 0x46, 0xa9, 0x3a, 0x3e, 0x5f, 0x04, 0x77, 0xbe, 0xaf, - 0xae, 0x73, 0xeb, 0x9c, 0xfa, 0xe7, 0x3e, 0xa3, 0xea, 0xe4, 0xd5, 0xe5, 0xe8, 0xa5, 0x4f, 0x82, - 0x43, 0x2d, 0xc4, 0x8d, 0x13, 0x2f, 0x0a, 0x19, 0x0d, 0x08, 0x60, 0x13, 0xb8, 0x0a, 0x32, 0x30, - 0xd4, 0x79, 0x58, 0x44, 0xc1, 0x33, 0x5e, 0x76, 0xbc, 0xe3, 0x91, 0xb0, 0xcd, 0xc8, 0xbf, 0x85, - 0x25, 0xe2, 0x78, 0xb2, 0xf6, 0xb5, 0x1f, 0x31, 0x06, 0x68, 0x44, 0xc8, 0xe4, 0x7b, 0x32, 0x69, - 0x09, 0xfc, 0x48, 0x52, 0x4c, 0x34, 0x25, 0x64, 0x48, 0x09, 0xc0, 0xe5, 0xe1, 0x66, 0x9c, 0x5c, - 0xd1, 0xcb, 0xb3, 0x45, 0x25, 0x16, 0x60, 0xc9, 0x0d, 0x9d, 0x7c, 0x6e, 0x18, 0x30, 0x63, 0x73, - 0x67, 0x47, 0x07, 0xe0, 0xac, 0xa4, 0xd1, 0xa0, 0xe6, 0x0b, 0xcb, 0xf6, 0x06, 0x32, 0x20, 0x22, - 0xe4, 0x31, 0xd7, 0x8d, 0x1f, 0x82, 0xa9, 0x03, 0x07, 0x20, 0x60, 0x26, 0xca, 0x93, 0xad, 0xd0, - 0x5d, 0xd4, 0x56, 0x6a, 0x3b, 0xf0, 0x58, 0x28, 0x9c, 0x61, 0x81, 0x8c, 0x50, 0x63, 0x8b, 0xc7, - 0x10, 0xfc, 0x56, 0x7b, 0xa4, 0x05, 0x93, 0x69, 0xe9, 0x5f, 0x86, 0x02, 0xe3, 0xc6, 0xcd, 0xe2, - 0xa0, 0x79, 0x1c, 0x68, 0x43, 0xa0, 0xb7, 0x0f, 0x98, 0x72, 0x1d, 0x80, 0xf4, 0x1c, 0x0b, 0xe0, - 0x76, 0x1a, 0x94, 0x41, 0xf9, 0xee, 0x42, 0x82, 0xd4, 0xfb, 0xa3, 0x2a, 0x7e, 0x7d, 0xb7, 0xe1, - 0x4f, 0x5a, 0x30, 0x3f, 0x16, 0x0c, 0x3f, 0xd4, 0x9e, 0x6c, 0x83, 0x48, 0x10, 0x01, 0x44, 0x65, - 0x24, 0x56, 0x5b, 0xb9, 0xc0, 0x90, 0x54, 0x2e, 0xa1, 0xf8, 0x78, 0xe3, 0x8f, 0x05, 0x85, 0xbb, - 0x9f, 0x91, 0x15, 0x6d, 0x8e, 0x72, 0xc8, 0x8a, 0x10, 0xeb, 0xcc, 0xb5, 0xcf, 0xfc, 0x4a, 0x16, - 0x7e, 0x3c, 0x11, 0xc7, 0x04, 0x0a, 0x5b, 0x91, 0x73, 0x7c, 0x13, 0xcc, 0x30, 0x69, 0xe1, 0xc4, - 0xe6, 0x58, 0xa2, 0xad, 0xfe, 0x09, 0xaf, 0x23, 0x53, 0x02, 0x4a, 0x96, 0x3e, 0x1e, 0x1f, 0xbc, - 0x22, 0x0a, 0xa8, 0xc6, 0x06, 0x33, 0x3a, 0x5d, 0x4e, 0xea, 0x1a, 0x63, 0x0a, 0xaf, 0x1a, 0xf3, - 0xea, 0xff, 0x65, 0xd3, 0x5f, 0x05, 0x25, 0x49, 0xe8, 0x45, 0xe1, 0x4c, 0x5f, 0xe7, 0x61, 0xfe, - 0x08, 0x8d, 0x77, 0x77, 0x1e, 0x14, 0x21, 0x68, 0x2b, 0x1f, 0x22, 0x75, 0x77, 0x50, 0x27, 0xdc, - 0x0d, 0x9f, 0xb7, 0x54, 0x6c, 0xe6, 0x9c, 0x90, 0xfe, 0x23, 0x65, 0x13, 0x85, 0x71, 0x88, 0xd3, - 0x0b, 0x08, 0x8a, 0xea, 0x1f, 0x32, 0xf1, 0x83, 0x09, 0x22, 0x82, 0x7f, 0x3c, 0x4f, 0x98, 0x82, - 0xa4, 0xc4, 0x10, 0x10, 0xfd, 0x79, 0xb9, 0x76, 0xf5, 0xb9, 0x87, 0x8b, 0xc1, 0x59, 0x6e, 0xec, - 0xcb, 0xda, 0x37, 0x3c, 0xb0, 0x9d, 0x62, 0xd4, 0xff, 0x47, 0xe8, 0xbe, 0x8d, 0xd1, 0x5d, 0x15, - 0xfe, 0xb7, 0x93, 0xaf, 0xef, 0xa2, 0xf8, 0xfa, 0xc1, 0xf5, 0x7f, 0x8d, 0x34, 0xa3, 0x04, 0xb0, - 0xec, 0xc9, 0xb2, 0xcd, 0x1d, 0xa0, 0x85, 0x40, 0xb8, 0xab, 0x17, 0x5a, 0x3b, 0x3a, 0x09, 0x11, - 0xda, 0x36, 0xc3, 0xff, 0x56, 0x1e, 0x3e, 0x85, 0x69, 0xb9, 0x4c, 0x52, 0x02, 0xea, 0x37, 0x8c, - 0x59, 0xd0, 0x67, 0xda, 0x58, 0x91, 0x01, 0x49, 0xe6, 0x69, 0x93, 0x89, 0x7c, 0xf9, 0xc3, 0xec, - 0x51, 0x97, 0x61, 0x57, 0x25, 0x27, 0x12, 0x50, 0x28, 0x85, 0xe5, 0x86, 0x75, 0x49, 0xe2, 0x62, - 0x5d, 0x96, 0x33, 0xe7, 0x88, 0x04, 0x22, 0x6c, 0xc5, 0x8a, 0xbc, 0x58, 0x1f, 0x1f, 0x0a, 0x08, - 0x4c, 0xb4, 0x5c, 0x67, 0x7f, 0x2b, 0xfc, 0x4c, 0x0c, 0x13, 0x30, 0x9a, 0xcb, 0xcb, 0x67, 0x08, - 0x03, 0x7e, 0xf1, 0x21, 0x49, 0x2b, 0x84, 0x78, 0xf5, 0xa9, 0x50, 0x0a, 0xa5, 0x21, 0x01, 0x23, - 0x4a, 0x53, 0xcc, 0x29, 0x30, 0x30, 0x4c, 0x1c, 0x87, 0x54, 0x94, 0x0f, 0x2a, 0x9c, 0xb4, 0xe0, - 0xc0, 0x5c, 0x15, 0x88, 0x5e, 0x67, 0xc2, 0x85, 0x68, 0x79, 0x03, 0x76, 0x6a, 0xb5, 0xb8, 0xfe, - 0x45, 0xbc, 0xea, 0x34, 0x77, 0xe3, 0x08, 0x9b, 0xdb, 0xdd, 0xf7, 0x77, 0xb6, 0x2b, 0x3c, 0x7c, - 0x14, 0xc2, 0x57, 0xdb, 0x02, 0x41, 0x5c, 0xb0, 0xee, 0xe1, 0xdd, 0x8d, 0x37, 0xb7, 0x73, 0xc4, - 0x05, 0x05, 0x89, 0x52, 0x31, 0x1c, 0x80, 0x00, 0x6c, 0x70, 0x68, 0x34, 0xb3, 0x00, 0x2e, 0xa8, - 0x59, 0x41, 0x69, 0xc4, 0x82, 0x56, 0xa5, 0x32, 0x08, 0x04, 0x3e, 0xe8, 0x12, 0x94, 0x8a, 0x6b, - 0x10, 0x09, 0x09, 0x39, 0x89, 0x8f, 0x6d, 0xe2, 0x01, 0x11, 0x45, 0x65, 0x48, 0x28, 0xcb, 0x79, - 0xfe, 0xb1, 0x3a, 0xf0, 0x54, 0x52, 0xb1, 0xdb, 0xdf, 0x9e, 0x15, 0xf1, 0x53, 0x01, 0x77, 0x17, - 0x33, 0x06, 0x50, 0x5f, 0xc4, 0x85, 0x0c, 0xf4, 0x1b, 0xd3, 0xb4, 0xdb, 0xfb, 0xbf, 0xe1, 0xea, - 0x0f, 0x7b, 0x21, 0x47, 0xaf, 0xab, 0x0e, 0x24, 0x17, 0x4a, 0x23, 0x96, 0x8c, 0x72, 0x00, 0x11, - 0x3c, 0x92, 0xc1, 0x49, 0x82, 0x11, 0x20, 0xb2, 0x41, 0xe7, 0x57, 0x22, 0x82, 0x02, 0x00, 0xcf, - 0x41, 0x9e, 0xdc, 0x10, 0x07, 0x5f, 0x05, 0x42, 0xb0, 0xc9, 0x93, 0xe2, 0x04, 0x46, 0xd8, 0x89, - 0xe2, 0x4c, 0xc2, 0xd3, 0x7f, 0x89, 0x90, 0x87, 0x53, 0x46, 0xba, 0x9c, 0x9c, 0x27, 0xd8, 0x99, - 0xaa, 0xe0, 0x04, 0x27, 0xa9, 0xda, 0xba, 0xf4, 0x21, 0xcc, 0x74, 0x68, 0xd1, 0xa3, 0xf5, 0x72, - 0x4e, 0x8b, 0xd5, 0xd7, 0xbe, 0xb1, 0x7c, 0x97, 0xba, 0x5e, 0x08, 0x75, 0x7f, 0x7d, 0x6b, 0xe1, - 0xe3, 0x5d, 0xdf, 0x2c, 0x1a, 0x34, 0x24, 0x72, 0x94, 0x14, 0x72, 0xe6, 0xaa, 0x7f, 0xf8, 0x25, - 0xaa, 0xa8, 0xbf, 0x26, 0x31, 0xf0, 0x57, 0xaa, 0xec, 0x96, 0xaa, 0x3c, 0x80, 0xf9, 0x07, 0xbe, - 0x0a, 0xa8, 0x8e, 0xf4, 0xfb, 0x19, 0x18, 0x36, 0xf8, 0x55, 0x00, 0x04, 0x15, 0x9c, 0x24, 0x14, - 0x77, 0xe1, 0x42, 0x12, 0x03, 0x42, 0x77, 0x8e, 0x07, 0x9e, 0xf3, 0xea, 0x39, 0x54, 0x00, 0x2a, - 0x83, 0xac, 0x6a, 0x70, 0x98, 0x9c, 0x39, 0x9b, 0x1b, 0x91, 0xdb, 0xe0, 0xa0, 0xea, 0x60, 0x80, - 0x35, 0x55, 0x55, 0xef, 0x12, 0x09, 0x89, 0x7a, 0xb3, 0xa1, 0x1f, 0x51, 0xdf, 0x82, 0x98, 0x5c, - 0x02, 0x20, 0x2a, 0x61, 0x70, 0xbc, 0x45, 0x26, 0x63, 0x46, 0x9a, 0xbe, 0x73, 0xc7, 0xda, 0xbe, - 0x38, 0x6c, 0x64, 0x6e, 0x31, 0xe2, 0x41, 0x17, 0x8f, 0x0d, 0xab, 0xfc, 0x14, 0x95, 0xc2, 0x5b, - 0x4a, 0x3c, 0xf7, 0xe2, 0x5f, 0xa6, 0x89, 0x3e, 0xe2, 0x44, 0x85, 0x0e, 0x27, 0xc9, 0xa8, 0x07, - 0x50, 0xf7, 0x20, 0x19, 0x48, 0xad, 0x06, 0x05, 0xa2, 0x0e, 0x74, 0xd8, 0x3a, 0xb5, 0x3a, 0x18, - 0xf1, 0x22, 0x41, 0x25, 0x08, 0xa4, 0x19, 0x2f, 0x94, 0xf8, 0x21, 0x21, 0xf9, 0xbb, 0xbb, 0xb7, - 0xd5, 0xbe, 0xb1, 0x7c, 0x14, 0x5d, 0xc5, 0x6e, 0xaa, 0x6e, 0x5f, 0x5f, 0x18, 0x26, 0x9c, 0xc3, - 0xc7, 0xb9, 0x7b, 0x18, 0x99, 0x8c, 0x97, 0x85, 0x2c, 0x4e, 0xf3, 0x29, 0x67, 0x5a, 0x83, 0xc6, - 0x66, 0xc2, 0xaf, 0x41, 0xb0, 0xcc, 0x5d, 0x8a, 0x20, 0x0b, 0x41, 0x11, 0xc6, 0x57, 0x93, 0xac, - 0x48, 0x44, 0x41, 0x48, 0x23, 0x22, 0x41, 0xfc, 0x5d, 0x0a, 0x71, 0x04, 0xac, 0x37, 0x3c, 0x12, - 0x4b, 0x7a, 0x2f, 0x9e, 0x20, 0x13, 0x4f, 0x46, 0x67, 0xa3, 0xe8, 0x3a, 0x16, 0x5a, 0x46, 0xe8, - 0x17, 0x7c, 0x91, 0xd0, 0x38, 0x02, 0xd0, 0x00, 0x0d, 0xdf, 0x82, 0x21, 0x02, 0xea, 0x90, 0xbb, - 0xfc, 0x3f, 0x59, 0x28, 0x9c, 0x2b, 0xca, 0xcc, 0xd4, 0x9e, 0x97, 0x4c, 0x64, 0x79, 0xf2, 0x53, - 0x35, 0xfa, 0xe8, 0xaf, 0x27, 0x45, 0xf8, 0xf5, 0xca, 0xb8, 0x22, 0xaa, 0x3f, 0xef, 0xaa, 0x01, - 0xa4, 0xe3, 0xf7, 0x55, 0x77, 0x55, 0x77, 0xd7, 0x44, 0xea, 0xeb, 0x14, 0xbd, 0x73, 0x7d, 0x5a, - 0xfa, 0xe7, 0xae, 0xb2, 0xf8, 0x21, 0xa6, 0xa7, 0x52, 0xef, 0x87, 0xc1, 0x09, 0x45, 0x9a, 0x31, - 0x66, 0x2c, 0xef, 0x58, 0x91, 0x42, 0x1a, 0x7c, 0xe5, 0x22, 0xae, 0x58, 0xc4, 0xff, 0x0a, 0x4a, - 0xdd, 0x0f, 0x7a, 0x61, 0x4c, 0x3c, 0x7c, 0x46, 0xba, 0xa8, 0x32, 0xa5, 0xa0, 0x3c, 0x79, 0x5e, - 0xa7, 0xa4, 0x1a, 0xed, 0x3a, 0xc2, 0x3d, 0xe2, 0x42, 0x85, 0x48, 0x8a, 0x2a, 0xcf, 0x41, 0xe8, - 0x6d, 0xb4, 0x34, 0xe0, 0x77, 0x34, 0x3d, 0xa4, 0x68, 0x3f, 0x05, 0x97, 0x77, 0x1f, 0x00, 0x8a, - 0x02, 0x60, 0x9d, 0xcb, 0x8d, 0x91, 0x6c, 0xe7, 0x32, 0xf8, 0x2d, 0xee, 0xe8, 0xd1, 0xc0, 0x35, - 0x05, 0x23, 0xc4, 0x02, 0x19, 0x3f, 0x8e, 0xde, 0x24, 0x13, 0x1c, 0xc2, 0x03, 0x0a, 0x80, 0xab, - 0x46, 0x75, 0xf1, 0x02, 0x01, 0x16, 0xef, 0x7e, 0x24, 0x22, 0x14, 0xb2, 0xbc, 0xee, 0xd8, 0x31, - 0xf7, 0x25, 0x8c, 0x52, 0x30, 0xee, 0x18, 0xc8, 0x8a, 0xc8, 0xb8, 0x4d, 0x18, 0xac, 0x48, 0x90, - 0xa4, 0x30, 0xb1, 0x8e, 0xe7, 0xcc, 0x48, 0xe0, 0xba, 0x99, 0xba, 0x4c, 0x73, 0xa6, 0xbd, 0xd0, - 0x61, 0xa6, 0xe1, 0x59, 0xa0, 0xa8, 0xeb, 0x89, 0x0a, 0x12, 0x0a, 0xaa, 0x92, 0x31, 0x65, 0x58, - 0x1b, 0x55, 0x14, 0xf6, 0x04, 0x01, 0xa0, 0x20, 0xac, 0x61, 0x5b, 0x02, 0x47, 0x19, 0x99, 0xcc, - 0x14, 0xd4, 0x3a, 0x3e, 0x0d, 0xf7, 0x89, 0x04, 0x54, 0xf5, 0x7f, 0x08, 0x82, 0xe2, 0xd4, 0x82, - 0x03, 0x23, 0x27, 0x0e, 0x8e, 0xff, 0x0a, 0x09, 0x1f, 0x34, 0xdd, 0x04, 0x91, 0xca, 0x8d, 0x22, - 0x9e, 0x40, 0x70, 0xfb, 0x18, 0x85, 0xf4, 0x13, 0x99, 0xbb, 0xfd, 0x11, 0x2a, 0xe2, 0x45, 0x8a, - 0x65, 0x55, 0x21, 0xd4, 0x2c, 0xa4, 0x3e, 0x30, 0xab, 0x0c, 0xda, 0x4f, 0x81, 0xb7, 0xd9, 0xba, - 0x0c, 0x82, 0x86, 0x4b, 0x29, 0x4d, 0xc1, 0x01, 0x6b, 0xbc, 0x29, 0x56, 0x94, 0x30, 0x9a, 0x47, - 0x35, 0x48, 0xa7, 0x42, 0x39, 0xcb, 0xf1, 0x0e, 0x2a, 0x9d, 0xb9, 0x6f, 0x82, 0x53, 0x8b, 0x32, - 0x50, 0xb9, 0x97, 0x33, 0xc8, 0xf7, 0x57, 0xe1, 0x88, 0x84, 0x22, 0x24, 0x10, 0xb4, 0x4e, 0x1a, - 0x9b, 0x86, 0xd9, 0xbb, 0x41, 0x99, 0x71, 0x84, 0x55, 0xcc, 0x6c, 0x05, 0x71, 0x21, 0x42, 0x1c, - 0x21, 0x39, 0x8e, 0x54, 0x41, 0x2b, 0x97, 0x22, 0x1e, 0xce, 0x53, 0x6a, 0x6a, 0x4f, 0x00, 0x24, - 0x04, 0x5a, 0x64, 0x06, 0xe9, 0xd7, 0x85, 0x0d, 0x05, 0x94, 0x89, 0xd9, 0x1e, 0x19, 0x25, 0xa4, - 0x33, 0x0b, 0xb0, 0xcb, 0xf1, 0x69, 0xd0, 0x68, 0x64, 0x1b, 0xe3, 0x79, 0x39, 0x0b, 0xa0, 0x8c, - 0x20, 0x2d, 0x0d, 0x2d, 0x30, 0x1e, 0xc1, 0x81, 0xdb, 0x70, 0xbc, 0xc7, 0x93, 0x57, 0x06, 0x13, - 0xe4, 0x77, 0x98, 0x6d, 0x27, 0x28, 0xe7, 0xff, 0xab, 0x87, 0xd1, 0x4c, 0x95, 0xd6, 0x2a, 0xea, - 0xff, 0x56, 0x1e, 0x88, 0xff, 0x57, 0x97, 0xab, 0xfd, 0x7e, 0x5f, 0x56, 0x24, 0xe8, 0xfd, 0x27, - 0x04, 0x02, 0x87, 0xe1, 0x3e, 0x68, 0xa6, 0xf9, 0xfe, 0xec, 0x8b, 0x68, 0x43, 0xda, 0x7f, 0xe8, - 0xf2, 0xfa, 0x2f, 0x7c, 0x12, 0x19, 0x95, 0x11, 0x5e, 0xfe, 0x20, 0x28, 0x44, 0xea, 0x98, 0x54, - 0x72, 0x20, 0xbe, 0x3b, 0xa9, 0x42, 0xce, 0xa6, 0xa3, 0xa8, 0xec, 0xde, 0xad, 0xb0, 0x24, 0x18, - 0xa7, 0x8c, 0x7e, 0x1d, 0xb3, 0x61, 0x00, 0xbd, 0x9b, 0x7a, 0x59, 0xeb, 0x46, 0x73, 0x98, 0xac, - 0x6b, 0x1d, 0xfb, 0xab, 0xaf, 0x85, 0x0b, 0x42, 0xd5, 0x38, 0xdc, 0xd2, 0xf6, 0xaf, 0x79, 0xd4, - 0x3f, 0x88, 0x05, 0x54, 0x74, 0x91, 0xa5, 0x15, 0xea, 0x85, 0xa0, 0x29, 0xf1, 0xdc, 0xae, 0x47, - 0x9f, 0x19, 0x74, 0x1d, 0xfb, 0xe0, 0xa2, 0x2e, 0x2f, 0x22, 0xe4, 0x10, 0x15, 0x82, 0x94, 0x1f, - 0x5e, 0xfa, 0x39, 0x17, 0xc4, 0x89, 0x05, 0xb9, 0xca, 0x48, 0xc1, 0x99, 0x63, 0x1d, 0xa5, 0x18, - 0xec, 0x77, 0x88, 0x82, 0x6c, 0x26, 0x01, 0xc8, 0xb3, 0x02, 0xc8, 0x6d, 0x46, 0xb3, 0xae, 0x20, - 0x16, 0x91, 0xa3, 0x06, 0xdd, 0xdd, 0xdd, 0xfb, 0xe0, 0x8c, 0xae, 0x2b, 0x15, 0x89, 0x48, 0x23, - 0x54, 0xf8, 0x25, 0xd0, 0x32, 0xb1, 0xd8, 0x27, 0x51, 0xaa, 0xf8, 0x98, 0x2e, 0x29, 0x48, 0x21, - 0x74, 0x84, 0x6d, 0x60, 0xc2, 0x39, 0x55, 0x13, 0xb0, 0xfd, 0xe2, 0x41, 0x75, 0x09, 0xd9, 0x5a, - 0x38, 0x00, 0x1d, 0x2a, 0xe2, 0x01, 0x76, 0x70, 0xbb, 0xc1, 0x5d, 0x80, 0xdd, 0xfe, 0x09, 0x07, - 0x31, 0xa6, 0xe5, 0xc4, 0x77, 0xc4, 0x04, 0x8e, 0xd3, 0x0d, 0x30, 0xea, 0x28, 0x24, 0xf9, 0x6e, - 0x63, 0x89, 0x04, 0x75, 0x22, 0x81, 0x79, 0xf0, 0xf0, 0x42, 0x25, 0x55, 0x45, 0xc7, 0x6e, 0x22, - 0x14, 0x8f, 0x91, 0xf8, 0x94, 0x20, 0x20, 0xd6, 0xf2, 0x56, 0xbf, 0x56, 0xdd, 0xba, 0xa8, 0x45, - 0xa0, 0x94, 0xf1, 0xd8, 0xd9, 0xe8, 0x38, 0x12, 0x0d, 0x33, 0x06, 0x39, 0x7c, 0x29, 0xc0, 0xb8, - 0x1b, 0x16, 0xc9, 0xa9, 0x6a, 0xa5, 0xa5, 0x69, 0xa5, 0xba, 0xf2, 0x46, 0xa5, 0x12, 0xf7, 0xd2, - 0x97, 0xd2, 0xe0, 0x60, 0xfb, 0x1f, 0x05, 0xa4, 0xdd, 0xf6, 0x92, 0x4a, 0x3f, 0xc7, 0x8a, 0xaa, - 0x62, 0xbc, 0x93, 0xcd, 0xdb, 0xa2, 0xaf, 0x82, 0x3a, 0x90, 0x00, 0x57, 0x1d, 0xbe, 0x84, 0xb3, - 0xeb, 0x94, 0x9d, 0x19, 0xfe, 0x8b, 0x6f, 0xab, 0x5f, 0x5e, 0xfa, 0xb5, 0x75, 0xc5, 0x37, 0x5a, - 0xfa, 0xbd, 0xf4, 0x48, 0xaf, 0x12, 0x1d, 0x8b, 0xac, 0x43, 0x83, 0x80, 0xd0, 0xf9, 0x38, 0xae, - 0xdc, 0xa4, 0x17, 0xb5, 0x4b, 0x03, 0x30, 0x81, 0x8f, 0xf8, 0x91, 0x25, 0x13, 0xe6, 0x60, 0xe8, - 0x20, 0x0c, 0xaa, 0x90, 0x30, 0x15, 0x8e, 0x0f, 0x04, 0x9c, 0xd8, 0xb8, 0xcf, 0x84, 0xa4, 0xf1, - 0xaa, 0x6b, 0x27, 0x3a, 0x8f, 0x0a, 0x5d, 0x46, 0x7d, 0x2a, 0x2a, 0x83, 0x81, 0xf6, 0x70, 0x3d, - 0x9b, 0x39, 0xb0, 0x86, 0x22, 0xd3, 0x34, 0x40, 0x93, 0x35, 0x98, 0x2f, 0xc6, 0x18, 0xb0, 0x3d, - 0xa6, 0x68, 0xa9, 0x37, 0x78, 0x35, 0x39, 0x18, 0x74, 0x9d, 0x8a, 0xbd, 0x82, 0xdc, 0x19, 0x1b, - 0xe0, 0x8c, 0xa5, 0xa4, 0xb6, 0xf1, 0x56, 0x24, 0x28, 0x50, 0x31, 0x86, 0xa2, 0xda, 0x40, 0xda, - 0xa1, 0x38, 0x38, 0x24, 0x76, 0xa0, 0xae, 0xf0, 0x22, 0x9a, 0xb2, 0x1f, 0x1d, 0x24, 0xe2, 0x91, - 0xd5, 0xbb, 0x4f, 0x68, 0xe6, 0x68, 0xff, 0xe2, 0x42, 0x96, 0xf6, 0x02, 0xc4, 0x8f, 0x21, 0x33, - 0x78, 0x1a, 0xd1, 0x03, 0x87, 0xc4, 0x01, 0x4d, 0x03, 0xa8, 0xf7, 0x63, 0x51, 0x03, 0x1b, 0xe1, - 0x42, 0xb0, 0x32, 0xd6, 0x00, 0xb3, 0x04, 0xdc, 0xe3, 0x05, 0xec, 0xec, 0xde, 0xce, 0x58, 0x32, - 0xd8, 0xac, 0x57, 0xc7, 0x1f, 0x94, 0xc9, 0xa0, 0x10, 0xe0, 0xfc, 0xf1, 0x30, 0x44, 0x76, 0x87, - 0xca, 0xd6, 0x03, 0xa2, 0x3a, 0xf8, 0x81, 0x00, 0xac, 0x95, 0xa0, 0x63, 0x41, 0xa9, 0xbd, 0xd4, - 0x82, 0x18, 0x3c, 0x28, 0xa0, 0x74, 0x54, 0x70, 0x66, 0xb8, 0xf5, 0xe6, 0x8b, 0xf3, 0xfc, 0x10, - 0x95, 0x8e, 0xfd, 0x3f, 0xc1, 0x4d, 0xef, 0x65, 0xbb, 0x36, 0x76, 0x9f, 0xc4, 0x02, 0x4b, 0xdf, - 0xde, 0x24, 0x12, 0xdf, 0x72, 0xd1, 0x83, 0xb3, 0x88, 0x0b, 0xfd, 0x19, 0x9e, 0x20, 0x16, 0xc1, - 0x6c, 0x51, 0xaa, 0xdd, 0x26, 0x8e, 0x3a, 0x37, 0x68, 0xbb, 0xb8, 0xae, 0xff, 0x04, 0x65, 0x64, - 0x55, 0x03, 0xcd, 0xac, 0x4a, 0xfe, 0x24, 0x29, 0x0c, 0x2e, 0xa1, 0xe2, 0x02, 0xc3, 0xb2, 0x71, - 0x8e, 0x86, 0xd8, 0xfb, 0xd0, 0xd1, 0xdf, 0xcc, 0xb3, 0x1e, 0x16, 0x95, 0x08, 0xb4, 0x6e, 0x2c, - 0x10, 0x2a, 0xf8, 0x2a, 0x8a, 0xdc, 0xfb, 0x85, 0x91, 0x02, 0x86, 0xd0, 0x42, 0x69, 0xe2, 0x88, - 0x09, 0x65, 0x4d, 0x7a, 0x3b, 0xe2, 0x41, 0x34, 0xbe, 0x65, 0x4b, 0xc4, 0x58, 0x56, 0x28, 0x4e, - 0xfd, 0x15, 0xfe, 0x89, 0xaf, 0x82, 0x28, 0x8e, 0x48, 0xb8, 0xbf, 0x7c, 0xa2, 0x97, 0x5f, 0x04, - 0x65, 0x34, 0x51, 0x12, 0x36, 0x54, 0xfa, 0x3c, 0x33, 0xeb, 0x97, 0xd7, 0x52, 0x74, 0x4a, 0xfa, - 0xf4, 0xbd, 0x5f, 0xeb, 0xa8, 0xbe, 0x43, 0x53, 0x4d, 0xf8, 0x83, 0x9d, 0x46, 0xc9, 0x7b, 0x86, - 0x16, 0x2f, 0xf5, 0xef, 0xae, 0x5f, 0x57, 0xa8, 0x91, 0x20, 0xac, 0x46, 0x5e, 0xd8, 0xbf, 0x35, - 0x08, 0x20, 0x29, 0x97, 0xfb, 0xe1, 0x41, 0x67, 0xa5, 0x32, 0xb1, 0x19, 0x18, 0x52, 0x6b, 0xd1, - 0x4a, 0x66, 0xba, 0xcd, 0xf0, 0xe1, 0x1d, 0xc9, 0x05, 0xee, 0xa0, 0xee, 0xf8, 0x8b, 0x4d, 0x41, - 0xa0, 0x0b, 0x95, 0x43, 0xbc, 0x83, 0xe0, 0xb2, 0x7c, 0x7a, 0xf9, 0x04, 0x0a, 0x48, 0x0b, 0x8e, - 0x09, 0x98, 0x08, 0x6b, 0x7c, 0x14, 0xe7, 0x32, 0x76, 0x60, 0xbb, 0xb1, 0xf2, 0x41, 0xce, 0x26, - 0x09, 0xbc, 0x7c, 0x49, 0x2d, 0x9f, 0x60, 0x18, 0xbd, 0x7c, 0x44, 0x15, 0x5a, 0x00, 0x37, 0xa0, - 0x08, 0xd4, 0xcb, 0xf9, 0x55, 0x8d, 0x80, 0x08, 0xff, 0x88, 0xf1, 0x21, 0x4d, 0x6b, 0x34, 0x65, - 0x15, 0x1e, 0x37, 0x87, 0xa1, 0xe5, 0xf9, 0x71, 0xd0, 0xd3, 0x53, 0x17, 0x1d, 0xff, 0x05, 0x45, - 0x90, 0x40, 0x4e, 0xab, 0x47, 0x32, 0x47, 0x5a, 0x3b, 0xbe, 0x0a, 0xa3, 0x6d, 0xc6, 0x0d, 0x6c, - 0xbd, 0xca, 0x0a, 0x45, 0x03, 0xa0, 0x75, 0x44, 0x82, 0x3a, 0x78, 0x80, 0x53, 0x73, 0xcb, 0x6a, - 0x22, 0xa2, 0xb1, 0x06, 0x88, 0x59, 0x13, 0x51, 0x15, 0x55, 0x24, 0x17, 0x88, 0x04, 0x52, 0x2a, - 0x46, 0x71, 0x85, 0xe0, 0x67, 0xf8, 0x26, 0x11, 0x72, 0xf2, 0xdb, 0x9e, 0x0f, 0xf3, 0xfd, 0x17, - 0x6f, 0x84, 0xa8, 0x19, 0x5c, 0xbc, 0xe2, 0x03, 0x47, 0xeb, 0x07, 0xc1, 0x14, 0x6d, 0xf1, 0xaa, - 0x54, 0x8a, 0x18, 0x91, 0x20, 0x8c, 0x4d, 0x03, 0x4d, 0xd2, 0xfc, 0x26, 0x6b, 0xd0, 0xee, 0xbf, - 0x04, 0x25, 0x16, 0x92, 0x9c, 0x88, 0xc0, 0x53, 0xe0, 0xb4, 0x8b, 0x58, 0xd7, 0xad, 0x9d, 0x4e, - 0x2f, 0xf2, 0xf4, 0x4f, 0xe0, 0x94, 0x54, 0xb6, 0x91, 0xf4, 0x4f, 0x6f, 0x8e, 0xf7, 0xd1, 0x46, - 0x4f, 0xf5, 0x69, 0x7a, 0xe1, 0x7d, 0x14, 0xca, 0xae, 0x08, 0xab, 0x77, 0x7f, 0x9e, 0xad, 0x34, - 0x92, 0x5f, 0xea, 0xff, 0x52, 0x0a, 0xfa, 0x9d, 0x2b, 0xab, 0xfd, 0x59, 0xf0, 0x49, 0x46, 0x8d, - 0x9b, 0xbd, 0x74, 0x6d, 0xbe, 0x34, 0x93, 0x90, 0x4b, 0xce, 0x1c, 0x02, 0x6f, 0xbe, 0x33, 0xad, - 0x5b, 0xc7, 0x12, 0x08, 0x80, 0xa1, 0x1c, 0xb0, 0xa0, 0xdc, 0xcd, 0x49, 0x66, 0xcf, 0x9e, 0xa6, - 0x1b, 0x59, 0x01, 0xfd, 0x7f, 0xf1, 0x82, 0x54, 0x4c, 0xf0, 0x07, 0x98, 0xcc, 0xab, 0x8f, 0x82, - 0x07, 0x3a, 0x97, 0x21, 0x5f, 0x13, 0x0a, 0x48, 0x7d, 0xf7, 0x19, 0x05, 0x8d, 0x05, 0x6f, 0x2a, - 0x8d, 0xa3, 0x07, 0xbf, 0x7c, 0x28, 0x76, 0x1b, 0x01, 0x94, 0x40, 0xa2, 0x82, 0x3c, 0x87, 0x0e, - 0x82, 0xcc, 0xf1, 0x54, 0xc0, 0x88, 0x7f, 0x58, 0xfc, 0x8f, 0xfe, 0xee, 0x4f, 0x49, 0x82, 0x06, - 0x8d, 0x68, 0xb2, 0x68, 0x41, 0xa4, 0x3b, 0xfe, 0x14, 0x22, 0x42, 0x24, 0xb9, 0xfa, 0xa9, 0x80, - 0x00, 0x38, 0x6c, 0xea, 0x0f, 0xa8, 0x29, 0xb8, 0x3d, 0xac, 0x11, 0x0c, 0x3f, 0x85, 0x2c, 0x19, - 0x61, 0xd0, 0xcf, 0x8c, 0x1c, 0x19, 0x04, 0x12, 0xa4, 0x78, 0x82, 0xa8, 0xd1, 0x55, 0xd4, 0xf7, - 0xc1, 0x39, 0x8e, 0x91, 0xc5, 0x65, 0x50, 0xf6, 0xef, 0xdf, 0x08, 0x68, 0xcf, 0xf7, 0xa8, 0x2e, - 0x5d, 0x83, 0x1f, 0xa1, 0x34, 0x61, 0xaf, 0xc1, 0x19, 0xd4, 0x5d, 0x55, 0xfe, 0x0b, 0x0e, 0xcb, - 0xa8, 0xb5, 0xc4, 0x88, 0x20, 0x08, 0x86, 0x02, 0x83, 0x2d, 0xbc, 0x00, 0x02, 0x2b, 0x48, 0x9c, - 0x23, 0x95, 0x03, 0x54, 0x7f, 0x8e, 0xa6, 0x99, 0xd8, 0x18, 0xa6, 0xbf, 0x6e, 0xeb, 0x10, 0x22, - 0x6c, 0x19, 0xe8, 0xb8, 0x80, 0x42, 0x6b, 0x77, 0x15, 0xbf, 0xc1, 0x51, 0x4b, 0x81, 0x64, 0xf0, - 0x2b, 0x2d, 0xc3, 0xd2, 0x1f, 0x03, 0x3b, 0xd4, 0x21, 0xee, 0x71, 0x22, 0x42, 0x94, 0x31, 0xab, - 0x09, 0xf1, 0xdf, 0x46, 0x8a, 0x88, 0x07, 0xf7, 0x76, 0x3f, 0xff, 0x07, 0x4b, 0x93, 0xf1, 0x00, - 0xac, 0x65, 0x3e, 0xc0, 0x30, 0x72, 0xc0, 0x23, 0x18, 0xef, 0x12, 0x24, 0x15, 0xf0, 0x08, 0x5f, - 0x51, 0x02, 0xc7, 0x02, 0x90, 0xd9, 0x58, 0xdc, 0xe1, 0x80, 0xff, 0xe0, 0x92, 0xe5, 0x20, 0xe4, - 0x1f, 0xe8, 0x9f, 0x3e, 0x08, 0x65, 0xea, 0x2e, 0xaf, 0xe2, 0x41, 0x69, 0xac, 0x4a, 0xb5, 0x37, - 0x2f, 0x4a, 0x1e, 0x0a, 0x44, 0x94, 0x82, 0x60, 0xa4, 0xd4, 0x74, 0x88, 0x4a, 0x40, 0x04, 0x6e, - 0xfe, 0xbe, 0x14, 0xc7, 0x42, 0x04, 0x0f, 0xbe, 0xf2, 0x54, 0x20, 0x43, 0xd2, 0x0e, 0x6d, 0x87, - 0x18, 0x19, 0xa5, 0x01, 0xb6, 0x98, 0xbc, 0xcf, 0x82, 0xbd, 0x90, 0x86, 0x9e, 0x1b, 0x49, 0x92, - 0x1e, 0xbb, 0x42, 0xf6, 0x52, 0x79, 0xfe, 0x09, 0x2a, 0x8f, 0xcf, 0xf0, 0x5b, 0x89, 0x43, 0x06, - 0x86, 0xa4, 0x04, 0x06, 0x32, 0x26, 0x8a, 0xb3, 0xeb, 0x8c, 0xf8, 0x99, 0xd0, 0x94, 0xdb, 0x07, - 0x9f, 0xa5, 0x7f, 0x04, 0x7d, 0x50, 0xcc, 0xdf, 0x45, 0x20, 0x3e, 0x08, 0xaa, 0xf9, 0x52, 0xb8, - 0x2e, 0x18, 0xd1, 0x48, 0x36, 0x9b, 0xa0, 0xce, 0x30, 0x8e, 0xd5, 0xd1, 0xfa, 0x5e, 0xb9, 0x7d, - 0x12, 0x2a, 0xea, 0xff, 0x45, 0xc5, 0xf3, 0x57, 0x77, 0xde, 0xef, 0xf5, 0x94, 0x9d, 0x5d, 0x5d, - 0x7b, 0xc4, 0x85, 0x06, 0x12, 0xd8, 0x37, 0x9b, 0x89, 0x38, 0x13, 0xa5, 0xdd, 0x5b, 0x75, 0x55, - 0x13, 0x50, 0x59, 0xf4, 0x04, 0x8e, 0x95, 0x78, 0xe2, 0xf5, 0x6d, 0xd1, 0x26, 0x9d, 0x55, 0x55, - 0x74, 0x27, 0x7f, 0x82, 0x32, 0x89, 0x48, 0x22, 0x1e, 0x21, 0x04, 0x01, 0x2d, 0x8e, 0xde, 0x24, - 0x25, 0x16, 0x98, 0x44, 0xe3, 0x17, 0x91, 0x1f, 0x1b, 0x35, 0x7f, 0x0a, 0x1b, 0x8e, 0x79, 0xc2, - 0x23, 0x31, 0x31, 0x93, 0xfd, 0xa4, 0x11, 0xdf, 0x56, 0xaf, 0xc4, 0x89, 0x08, 0x15, 0xb1, 0xff, - 0x41, 0xd1, 0xdc, 0x66, 0x92, 0xd2, 0x1b, 0x24, 0xbc, 0x82, 0x1d, 0xcb, 0x07, 0xff, 0x0a, 0x09, - 0x20, 0x81, 0x6b, 0x0d, 0x60, 0xf6, 0x01, 0x26, 0x68, 0x25, 0x68, 0xfd, 0x94, 0x6e, 0x50, 0xab, - 0x63, 0x2e, 0xf7, 0x16, 0x32, 0xd9, 0xeb, 0x17, 0x91, 0xa0, 0xaf, 0x0a, 0x57, 0xfa, 0x9f, 0x6e, - 0xf6, 0x58, 0xc9, 0x6b, 0x8d, 0xef, 0x72, 0xc2, 0x21, 0x51, 0xfe, 0x24, 0x40, 0x52, 0xe6, 0x17, - 0xad, 0x1a, 0xd8, 0x43, 0x68, 0x38, 0x0c, 0x2c, 0xe4, 0xe9, 0x05, 0xd6, 0x3d, 0xb0, 0x8e, 0x89, - 0xad, 0x2b, 0x82, 0x01, 0x1d, 0xf9, 0x5d, 0x83, 0x45, 0xeb, 0x0b, 0x8f, 0x84, 0x6c, 0xf5, 0x30, - 0x85, 0x1f, 0x9d, 0x76, 0xd0, 0x2d, 0xbe, 0x24, 0x7d, 0x63, 0x44, 0x47, 0x10, 0x58, 0x8e, 0xea, - 0x0d, 0xac, 0x4e, 0xcc, 0x57, 0xc4, 0x02, 0x1d, 0x07, 0xa8, 0x1b, 0xea, 0x47, 0x7e, 0x0a, 0xa4, - 0x0d, 0x6e, 0x86, 0xc5, 0x01, 0x98, 0x20, 0x16, 0xd5, 0xb6, 0x00, 0x00, 0xb7, 0x1f, 0x28, 0x78, - 0x50, 0x84, 0xe0, 0xee, 0xde, 0x7a, 0xa3, 0x60, 0xd8, 0xad, 0xb9, 0xf9, 0xa8, 0xc6, 0x76, 0xbe, - 0xf1, 0x00, 0x8e, 0x62, 0x36, 0xb0, 0xff, 0x3e, 0x0a, 0x6a, 0x27, 0x05, 0x50, 0xa8, 0x06, 0xe4, - 0xeb, 0x81, 0x49, 0x20, 0xc4, 0x55, 0x8f, 0x04, 0x56, 0xd8, 0x3f, 0x89, 0x1d, 0x8d, 0xfb, 0xbe, - 0xab, 0x5e, 0x24, 0x79, 0x43, 0x88, 0x30, 0x23, 0xf9, 0xfa, 0x2a, 0x08, 0x0a, 0xcd, 0x77, 0x9e, - 0x20, 0xb8, 0x10, 0xa4, 0x42, 0x3a, 0xe4, 0x16, 0xf7, 0x67, 0x12, 0x32, 0x2a, 0xf9, 0x7a, 0xc4, - 0x25, 0xe3, 0x09, 0x20, 0xcb, 0x09, 0x36, 0x57, 0x69, 0xc5, 0xc0, 0xba, 0x03, 0x61, 0xbf, 0xd5, - 0x1f, 0xc1, 0x69, 0x6a, 0x2e, 0x30, 0x80, 0x47, 0x05, 0xd4, 0x4d, 0x8e, 0x5f, 0x12, 0x14, 0x26, - 0xd3, 0x65, 0xc3, 0xf1, 0x91, 0x70, 0x6f, 0x11, 0x82, 0x15, 0x74, 0x5d, 0x5a, 0x4d, 0x65, 0xf0, - 0x1e, 0xff, 0x04, 0x65, 0xb2, 0x0c, 0xc4, 0xdc, 0x48, 0x96, 0x99, 0x7d, 0x13, 0xcf, 0x82, 0x39, - 0x60, 0xe5, 0x20, 0xbe, 0x05, 0x0d, 0xf0, 0x5d, 0x56, 0x3a, 0xd6, 0xa9, 0xbe, 0x8b, 0x07, 0xc1, - 0x15, 0x75, 0xcb, 0xe0, 0x9a, 0xdd, 0xfb, 0xb3, 0xb7, 0xc1, 0x10, 0xc9, 0xd2, 0x4a, 0x91, 0x95, - 0xd1, 0xe5, 0xf5, 0x2a, 0x7d, 0x5d, 0xf5, 0x3a, 0x7d, 0x7b, 0xeb, 0xdf, 0x5a, 0xae, 0xbd, 0x7c, - 0xfd, 0x7d, 0x24, 0x9a, 0x6b, 0xd6, 0x29, 0xfa, 0xf7, 0xc2, 0x82, 0x98, 0xea, 0xf3, 0x31, 0x33, - 0x2b, 0x90, 0x41, 0x15, 0xa5, 0x07, 0x31, 0x00, 0x38, 0xad, 0xb9, 0x3f, 0xf6, 0x55, 0x2a, 0x72, - 0x91, 0xb0, 0xfc, 0x14, 0xd5, 0x55, 0x58, 0x06, 0x4f, 0x51, 0x79, 0x32, 0xbe, 0x8b, 0x3f, 0xd6, - 0xbc, 0x48, 0x50, 0xec, 0x34, 0x08, 0x30, 0x95, 0x42, 0xb8, 0x11, 0x88, 0x2a, 0xf9, 0x17, 0xb4, - 0x41, 0x9a, 0x47, 0xe8, 0xa8, 0x62, 0x33, 0x17, 0x15, 0x9f, 0xf1, 0x01, 0xa8, 0x6d, 0x9b, 0xa0, - 0xf2, 0x43, 0xbe, 0xa7, 0xff, 0x13, 0xf0, 0x46, 0x43, 0x24, 0x51, 0x71, 0x1f, 0xf3, 0xe0, 0xb2, - 0x66, 0x98, 0xf5, 0xb7, 0x74, 0x1b, 0x8a, 0xc4, 0x2a, 0x21, 0x86, 0x10, 0xfc, 0x4c, 0x71, 0x96, - 0x02, 0x45, 0x17, 0x8f, 0x27, 0x15, 0x9f, 0x9e, 0xb0, 0x7b, 0xfd, 0x7d, 0xc4, 0x41, 0x49, 0x77, - 0x71, 0x5a, 0xcf, 0x64, 0xa4, 0xc1, 0x2c, 0x82, 0x03, 0xef, 0x85, 0x34, 0xa8, 0x8c, 0x30, 0x63, - 0x0b, 0x6e, 0x56, 0x5e, 0xda, 0xe9, 0xb0, 0x0c, 0x7c, 0xed, 0xa2, 0x06, 0x55, 0x10, 0x25, 0x65, - 0xc4, 0x88, 0x76, 0x35, 0xaf, 0x85, 0x0a, 0x4f, 0x9d, 0xe3, 0x4c, 0x49, 0xe9, 0xd1, 0xc0, 0xd6, - 0x9a, 0xce, 0xb0, 0xed, 0x55, 0xd3, 0x2b, 0xd1, 0x22, 0x04, 0x74, 0xe2, 0x60, 0xb0, 0xd6, 0x8d, - 0x06, 0x76, 0xb3, 0x55, 0x08, 0x3f, 0x3f, 0x89, 0x57, 0xf1, 0x00, 0x88, 0xe8, 0x98, 0xd1, 0x1c, - 0x31, 0xd7, 0xc2, 0x94, 0x85, 0xdd, 0x84, 0xd1, 0x08, 0x2f, 0xb6, 0x62, 0xf4, 0x0c, 0xa6, 0x07, - 0xb0, 0x41, 0x86, 0xe8, 0x0a, 0xe3, 0x88, 0x05, 0xd5, 0xee, 0x96, 0x45, 0xbf, 0x5d, 0x5f, 0xe0, - 0x8c, 0xa5, 0x04, 0x9e, 0xf6, 0x05, 0xc7, 0x7e, 0x26, 0xc0, 0xd6, 0xba, 0xb1, 0x6c, 0x31, 0xf1, - 0x0f, 0xea, 0x91, 0x7a, 0xb9, 0xf0, 0x47, 0x55, 0xa9, 0x17, 0xf0, 0x5d, 0x73, 0x06, 0x1d, 0x6f, - 0x1c, 0x06, 0xf8, 0x23, 0x8b, 0x8b, 0x85, 0xa5, 0x01, 0x34, 0x48, 0x65, 0xf1, 0x24, 0x61, 0xda, - 0x38, 0x78, 0x3b, 0xad, 0x22, 0x5a, 0x6c, 0xc4, 0xba, 0x93, 0xc4, 0x82, 0xa1, 0x8e, 0x23, 0x8f, - 0x58, 0xf1, 0x25, 0xbc, 0xbe, 0xc1, 0x66, 0xc1, 0x27, 0xd9, 0x30, 0x6e, 0x23, 0xbf, 0x28, 0x90, - 0xed, 0x18, 0x5e, 0x64, 0x61, 0xdc, 0x37, 0x00, 0x4b, 0xae, 0x57, 0xd6, 0xbe, 0xb1, 0x5f, 0x5e, - 0x8a, 0xe6, 0xa3, 0x4d, 0x41, 0x4b, 0x93, 0xc6, 0x98, 0xe3, 0x05, 0x6e, 0x45, 0x10, 0x13, 0x86, - 0x0d, 0x9b, 0xde, 0xdb, 0xf6, 0x10, 0x19, 0xc3, 0x8b, 0x75, 0xb8, 0x05, 0xe4, 0xe7, 0xac, 0x11, - 0xe8, 0x7a, 0xc7, 0xfe, 0x14, 0xcd, 0x93, 0x60, 0xe6, 0x8b, 0x2a, 0x96, 0x75, 0x2f, 0x95, 0x23, - 0x13, 0x2b, 0xe1, 0xe0, 0x87, 0x9a, 0x95, 0xef, 0xa1, 0x36, 0xf8, 0x50, 0x83, 0x0b, 0x24, 0x98, - 0x03, 0xa8, 0x48, 0x85, 0x44, 0x85, 0x2b, 0xcb, 0x09, 0x79, 0xf4, 0x86, 0x0c, 0x04, 0x96, 0x85, - 0x09, 0x1a, 0x2a, 0x39, 0x38, 0xe0, 0xd3, 0x28, 0x7a, 0x25, 0xfc, 0x4a, 0x1a, 0x9d, 0x78, 0x50, - 0x87, 0x65, 0x8e, 0xc1, 0xa1, 0xd5, 0x81, 0xd8, 0xcc, 0x81, 0x61, 0xc0, 0xf5, 0xe0, 0x0b, 0xce, - 0xb8, 0x85, 0x6f, 0x85, 0x2a, 0x91, 0x72, 0xfa, 0x1b, 0xb8, 0xce, 0x81, 0x96, 0x56, 0x3f, 0xc6, - 0x50, 0x80, 0x31, 0xdf, 0xf8, 0x88, 0x52, 0xf0, 0xc5, 0x72, 0x1f, 0x24, 0x25, 0x50, 0xc6, 0x13, - 0x80, 0x64, 0xa3, 0xdb, 0xe9, 0x78, 0xbe, 0x14, 0xa6, 0x5d, 0x2d, 0xb7, 0x45, 0xcc, 0x41, 0x92, - 0x7d, 0x28, 0x19, 0x84, 0xac, 0x2e, 0x0d, 0x2c, 0xe6, 0x8f, 0xe3, 0xbb, 0xe0, 0xba, 0x75, 0x83, - 0x31, 0xc9, 0x56, 0x03, 0x7f, 0xce, 0x26, 0x14, 0x23, 0x50, 0xad, 0x30, 0xd5, 0x5a, 0x74, 0xcb, - 0xe5, 0x6a, 0xb4, 0xbf, 0xf0, 0x43, 0x55, 0xab, 0xf1, 0x02, 0x46, 0x1c, 0x8d, 0x1c, 0x1b, 0x27, - 0xfe, 0x16, 0xd0, 0x98, 0x7d, 0x83, 0x55, 0xa9, 0x44, 0xb3, 0x51, 0x7f, 0x05, 0x86, 0xca, 0x41, - 0x15, 0xde, 0xd5, 0xbb, 0xfb, 0xeb, 0x17, 0x13, 0x0a, 0x09, 0x05, 0xb5, 0xb3, 0x00, 0x6a, 0x90, - 0xeb, 0x3b, 0x0d, 0x96, 0xce, 0x36, 0x40, 0xf2, 0x5d, 0xef, 0xa7, 0x09, 0x30, 0xab, 0x4f, 0xfc, - 0x10, 0xd2, 0x4b, 0x68, 0xab, 0xf8, 0x52, 0xe3, 0xe4, 0x21, 0x0e, 0x2f, 0xbe, 0x1f, 0xc9, 0x07, - 0x24, 0x15, 0x08, 0x69, 0xd4, 0xd1, 0xb6, 0xee, 0x4c, 0xb6, 0x7a, 0x15, 0x75, 0x2c, 0x81, 0xcf, - 0xe2, 0x42, 0x93, 0x0e, 0x5e, 0xf2, 0x80, 0xfa, 0xc6, 0x40, 0x61, 0x16, 0xf9, 0x42, 0x00, 0x90, - 0x30, 0x1a, 0x07, 0x11, 0x60, 0x86, 0xd6, 0xee, 0x54, 0xf8, 0x52, 0xe5, 0x7a, 0xb2, 0x61, 0xbd, - 0xcb, 0x0b, 0xa1, 0x40, 0x1d, 0x97, 0x77, 0x1e, 0xa0, 0xbd, 0x0f, 0xef, 0x12, 0x2f, 0x04, 0x51, - 0x86, 0xee, 0x80, 0x6c, 0x7f, 0x0a, 0x79, 0x54, 0x4f, 0x06, 0x2b, 0x01, 0x63, 0xd4, 0x69, 0xe6, - 0x32, 0x27, 0x03, 0xb4, 0x26, 0x88, 0x13, 0x95, 0xdf, 0x9d, 0x8f, 0x05, 0x85, 0x75, 0x3f, 0x70, - 0xc1, 0x28, 0x20, 0x29, 0x0f, 0x07, 0x02, 0xd0, 0x5d, 0x7a, 0x80, 0x6b, 0xd3, 0x7d, 0x13, 0x0f, - 0x82, 0x22, 0x14, 0x5d, 0x83, 0x7b, 0x7c, 0x11, 0x11, 0x55, 0x7d, 0xf0, 0x44, 0x77, 0x77, 0xc5, - 0xc4, 0x89, 0x14, 0x52, 0xe1, 0xc3, 0x0f, 0xb0, 0xcf, 0x0f, 0x04, 0xe3, 0x02, 0x4e, 0xfc, 0x0c, - 0xcf, 0x3b, 0x39, 0x62, 0x71, 0x01, 0xbf, 0x7c, 0x15, 0xdd, 0xa6, 0x17, 0x04, 0x25, 0x2f, 0x5b, - 0xd6, 0x49, 0x36, 0xb2, 0x54, 0x76, 0x52, 0xb8, 0x21, 0x88, 0x27, 0xfa, 0x3c, 0x65, 0x73, 0x1e, - 0xaa, 0xbe, 0x09, 0x0d, 0x77, 0x59, 0x5f, 0x5a, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x28, - 0x14, 0x30, 0x32, 0x80, 0xd1, 0xd0, 0xd8, 0xa3, 0x79, 0x8c, 0xae, 0xae, 0x10, 0xe6, 0x2e, 0x2e, - 0x2f, 0xe1, 0x82, 0x34, 0x36, 0x98, 0x00, 0xec, 0x03, 0xc0, 0xca, 0x35, 0x2d, 0x82, 0xc7, 0x18, - 0xfe, 0x26, 0xc5, 0xe5, 0x61, 0xd8, 0xe1, 0x3c, 0xbd, 0xb8, 0xab, 0x07, 0x6f, 0xe0, 0xa0, 0xec, - 0x1c, 0x05, 0xa7, 0x2b, 0x8d, 0xa6, 0xba, 0xf1, 0x10, 0x67, 0x10, 0x18, 0x1a, 0x6a, 0xaa, 0x8e, - 0xe4, 0x03, 0x92, 0x0e, 0xdb, 0x33, 0xec, 0x73, 0xbe, 0x9a, 0xf7, 0xfd, 0xcb, 0xed, 0x27, 0xb8, - 0x2f, 0x75, 0x64, 0x5c, 0x0e, 0x38, 0x36, 0xee, 0x5b, 0x08, 0xd5, 0xca, 0xab, 0x98, 0x80, 0x80, - 0xd1, 0x90, 0xca, 0x54, 0xf4, 0x90, 0x0c, 0x2f, 0x0d, 0x4c, 0x0c, 0x7c, 0x57, 0x40, 0x00, 0x9f, - 0xc6, 0x08, 0xf6, 0x05, 0x67, 0xe3, 0xc0, 0x74, 0xfa, 0xaf, 0xc3, 0xfe, 0x82, 0x18, 0x13, 0xc6, - 0x25, 0xa3, 0xe8, 0x4a, 0xa6, 0x03, 0x5e, 0xa2, 0x5a, 0xcf, 0x59, 0xf4, 0xdb, 0x4f, 0x10, 0x20, - 0xb3, 0x88, 0x08, 0xf4, 0x97, 0xf1, 0x30, 0x69, 0x89, 0x1b, 0x07, 0x45, 0xc7, 0x8b, 0xa3, 0xed, - 0xfc, 0xe1, 0x80, 0xd8, 0x8a, 0x87, 0x11, 0x51, 0x64, 0xe9, 0x83, 0xd8, 0x35, 0xe5, 0x71, 0x8e, - 0x5f, 0x89, 0x61, 0x12, 0xc3, 0xe3, 0x24, 0x8d, 0x0a, 0x5e, 0x0f, 0x70, 0x9d, 0x5b, 0x9e, 0xf9, - 0xe0, 0xf2, 0xd9, 0x60, 0xc2, 0xa9, 0xc2, 0xdd, 0xbf, 0x2f, 0x43, 0x6e, 0x5f, 0x39, 0x55, 0xd5, - 0x5f, 0xc1, 0x66, 0x23, 0xe1, 0x40, 0x92, 0x5b, 0x4c, 0x6a, 0xa1, 0x13, 0xfc, 0xde, 0x5b, 0x43, - 0x4d, 0x4a, 0x10, 0xac, 0xf4, 0x60, 0xfb, 0xc4, 0x85, 0x36, 0xb6, 0x97, 0x65, 0x8e, 0x2b, 0x07, - 0x4f, 0x9e, 0x3c, 0xe7, 0x0f, 0x7d, 0xe1, 0x56, 0xe2, 0x6a, 0x71, 0xdc, 0x44, 0x14, 0x0f, 0x4d, - 0x06, 0x07, 0x96, 0xf5, 0x66, 0x42, 0x0e, 0xf5, 0x34, 0x48, 0x80, 0xc1, 0x30, 0xd0, 0x89, 0x34, - 0x0e, 0xf0, 0x8a, 0x97, 0x39, 0x31, 0xa4, 0xe1, 0xe2, 0x10, 0xac, 0x96, 0x06, 0x40, 0x00, 0x7c, - 0x43, 0xb8, 0x4f, 0x56, 0x10, 0xa6, 0x01, 0xe9, 0xc4, 0xeb, 0xfc, 0x40, 0x24, 0x14, 0x6b, 0x07, - 0x2f, 0x02, 0xef, 0x85, 0x57, 0xf7, 0xcf, 0x10, 0x0b, 0x3b, 0xb8, 0x32, 0x0f, 0xc1, 0xf0, 0x0f, - 0xc5, 0xbe, 0x15, 0x7f, 0x12, 0x00, 0x3e, 0x24, 0x07, 0xd6, 0x7b, 0x91, 0x71, 0x22, 0x01, 0x31, - 0x5d, 0xdd, 0xdf, 0x2d, 0x09, 0x58, 0x88, 0x03, 0xc8, 0xec, 0x31, 0xd0, 0x46, 0x2a, 0xea, 0x4b, - 0xeb, 0x0c, 0x7a, 0xa4, 0x42, 0xba, 0xa6, 0x5e, 0xa9, 0x92, 0xeb, 0x17, 0x89, 0x58, 0xbc, 0x20, - 0x14, 0x09, 0x1e, 0x29, 0x00, 0x70, 0x1e, 0x11, 0x27, 0x83, 0xac, 0x72, 0x7c, 0x42, 0x42, 0x7e, - 0xa5, 0xd8, 0xa0, 0xe2, 0xb2, 0xdf, 0x8d, 0x77, 0xc2, 0x91, 0x9d, 0xa7, 0x84, 0xc9, 0x80, 0x4f, - 0x11, 0xff, 0x31, 0x9c, 0x22, 0x7f, 0xba, 0xc6, 0x22, 0xfa, 0x3b, 0x05, 0x9c, 0x55, 0x29, 0x96, - 0xa1, 0x5b, 0x6f, 0x62, 0xe6, 0xf1, 0x00, 0xa0, 0xf2, 0xfa, 0x9f, 0xf5, 0xff, 0xd0, 0xd2, 0xa5, - 0xe1, 0x00, 0xc0, 0xae, 0x1c, 0x65, 0xa0, 0x8e, 0x9c, 0xc0, 0x76, 0xda, 0x02, 0xc1, 0x66, 0x88, - 0xe3, 0xfa, 0x87, 0x80, 0xba, 0x70, 0xb3, 0x2d, 0xbb, 0xfe, 0x0b, 0x46, 0x2a, 0xf4, 0xd7, 0xdb, - 0x7f, 0x82, 0xa2, 0x97, 0xbc, 0x43, 0x01, 0x17, 0x66, 0x1f, 0x48, 0x07, 0x29, 0x1a, 0x77, 0xf8, - 0xf8, 0x27, 0x3e, 0xd1, 0x01, 0x3e, 0x58, 0xf1, 0x97, 0x2b, 0xff, 0x82, 0x99, 0x6c, 0xb6, 0xd3, - 0x49, 0x5d, 0xea, 0xbc, 0xc7, 0x88, 0x10, 0x20, 0xe2, 0xc1, 0x31, 0xc8, 0xee, 0x3b, 0x09, 0x2b, - 0x07, 0x8c, 0xaf, 0x08, 0x02, 0xd3, 0xbb, 0xbc, 0xc6, 0x5b, 0x03, 0x5c, 0xa2, 0x8c, 0xd1, 0xf1, - 0xd8, 0x67, 0xa1, 0x78, 0x49, 0xd1, 0x98, 0x7a, 0xf4, 0xfd, 0x09, 0x4a, 0xbd, 0x53, 0x2f, 0x5e, - 0xfa, 0xf7, 0x10, 0x20, 0x15, 0x5d, 0xc5, 0x62, 0xb7, 0x3c, 0x45, 0x60, 0x5b, 0xf3, 0x4b, 0xd5, - 0x17, 0x3d, 0x47, 0x91, 0x03, 0x2d, 0x0b, 0x43, 0x28, 0xe2, 0x23, 0x47, 0x09, 0x2c, 0x1f, 0xc7, - 0xc0, 0xb0, 0x3e, 0xc0, 0x7a, 0xf1, 0xf7, 0xe9, 0xdf, 0x8b, 0xa6, 0x92, 0xaf, 0x7a, 0x18, 0x9a, - 0x70, 0x17, 0xff, 0xc4, 0x0d, 0x93, 0x34, 0x4e, 0xa6, 0x2d, 0xa5, 0xf5, 0x32, 0xc1, 0xff, 0xa6, - 0x7c, 0xc8, 0xad, 0xa6, 0x39, 0x04, 0x99, 0x44, 0xa6, 0x32, 0x3d, 0x0e, 0x0f, 0x39, 0xe5, 0x86, - 0x73, 0xdb, 0xe7, 0x7c, 0xef, 0xf8, 0x7c, 0xa2, 0x8d, 0x99, 0xef, 0xb1, 0xdf, 0x9e, 0xf1, 0xc7, - 0xef, 0xe2, 0x58, 0x3a, 0xf2, 0xe1, 0xbe, 0xbd, 0xd7, 0xc9, 0xc6, 0x08, 0x7b, 0xb7, 0x38, 0x58, - 0x93, 0xdb, 0xad, 0x3d, 0x03, 0x53, 0x53, 0xc2, 0x82, 0x4f, 0x60, 0x9d, 0x50, 0x95, 0x15, 0x0b, - 0xa7, 0x31, 0xdf, 0x92, 0x33, 0xd7, 0x32, 0x4c, 0x23, 0x09, 0xc7, 0xa3, 0xbf, 0x04, 0x22, 0x4a, - 0x5d, 0x0f, 0xff, 0x88, 0x44, 0xc9, 0x7e, 0x61, 0x41, 0x44, 0x84, 0x37, 0x1c, 0x86, 0x53, 0xc1, - 0xf0, 0x04, 0x40, 0x7c, 0x29, 0xa4, 0x63, 0x47, 0x30, 0x68, 0x3d, 0xf1, 0xbd, 0x57, 0x2f, 0x39, - 0xe5, 0xb2, 0x71, 0xea, 0xad, 0xdd, 0xdc, 0xe2, 0x04, 0x82, 0x90, 0x9c, 0xdf, 0xc8, 0xff, 0x35, - 0x70, 0xdd, 0x59, 0xb3, 0xb7, 0xb7, 0xde, 0x5e, 0xaf, 0x08, 0x75, 0x4e, 0xdf, 0x42, 0x1f, 0xe8, - 0xaf, 0x27, 0x47, 0x2f, 0x24, 0xe8, 0x8e, 0x44, 0xf1, 0xe3, 0x8e, 0x79, 0xc3, 0x08, 0xde, 0x05, - 0x6e, 0x5b, 0x3f, 0x40, 0xf2, 0xdb, 0x50, 0xdb, 0x80, 0x1f, 0xd2, 0x10, 0xbe, 0xf5, 0x9d, 0x57, - 0xeb, 0x7c, 0xe7, 0x9e, 0x0c, 0x16, 0x5c, 0x0e, 0xe7, 0x82, 0x63, 0x83, 0x42, 0x38, 0x36, 0x16, - 0x61, 0x86, 0x6d, 0x31, 0x53, 0x5c, 0x44, 0xac, 0x0d, 0x3a, 0x24, 0xd5, 0x00, 0xa9, 0xb2, 0xae, - 0x50, 0xb6, 0xb2, 0xe8, 0x2a, 0xa0, 0x2f, 0x81, 0xff, 0xc8, 0xf9, 0x1f, 0xc4, 0x06, 0x01, 0x4f, - 0xb1, 0xdf, 0x93, 0x34, 0x16, 0x13, 0x36, 0x6f, 0x5b, 0xb1, 0xd0, 0x2f, 0x17, 0x19, 0x95, 0xba, - 0xf8, 0xc7, 0xaf, 0xf4, 0x11, 0xff, 0xd4, 0xaf, 0xf8, 0x28, 0x1d, 0xc9, 0x52, 0x68, 0x87, 0x9e, - 0xc0, 0xf1, 0xc6, 0x1e, 0x38, 0xca, 0xeb, 0x6f, 0xac, 0xe7, 0xe8, 0x7f, 0x7c, 0x11, 0xd8, 0xee, - 0x50, 0x01, 0x2e, 0x38, 0x81, 0x21, 0x11, 0xdc, 0x38, 0x2a, 0x43, 0x88, 0xe7, 0x00, 0xe1, 0xc0, - 0xe0, 0x9a, 0xf3, 0x1a, 0x0b, 0x72, 0xe9, 0xb3, 0xdb, 0x88, 0x12, 0x3a, 0x32, 0xa4, 0x80, 0xe4, - 0xf8, 0xfb, 0xa6, 0x0f, 0x89, 0xd8, 0x74, 0xd8, 0x46, 0xe3, 0x49, 0x0b, 0x4b, 0xff, 0x38, 0x4f, - 0x24, 0x02, 0x7a, 0x25, 0xfe, 0x25, 0x14, 0x89, 0x7d, 0x12, 0xab, 0xa3, 0x41, 0xf0, 0x45, 0x55, - 0x77, 0x94, 0x77, 0x5c, 0x3e, 0x84, 0xb9, 0x7d, 0x5a, 0xfa, 0xb8, 0x2f, 0x46, 0x64, 0xbd, 0x09, - 0x2a, 0x5f, 0x51, 0xdb, 0xe8, 0x44, 0x5c, 0x40, 0x81, 0xe2, 0x9d, 0xdd, 0xf6, 0x98, 0x34, 0xc7, - 0x56, 0xad, 0x2c, 0x48, 0x44, 0x29, 0x05, 0x79, 0x81, 0xfc, 0x58, 0x01, 0xac, 0x85, 0x83, 0xf8, - 0xa1, 0xd6, 0x2d, 0x46, 0xb3, 0x41, 0xb7, 0xc7, 0xd9, 0x40, 0x7d, 0x18, 0xba, 0x2f, 0xc1, 0xc0, - 0xf2, 0x71, 0x18, 0x25, 0xb3, 0xc7, 0x92, 0xaf, 0x4b, 0xf8, 0x44, 0x20, 0x47, 0xf2, 0xf4, 0x63, - 0x11, 0x40, 0x47, 0xa3, 0x04, 0xf7, 0x6c, 0x75, 0x71, 0x75, 0x62, 0x8f, 0xc1, 0x20, 0x55, 0xdf, - 0x48, 0x1e, 0xa5, 0x45, 0x5e, 0x28, 0x2c, 0x99, 0xee, 0x39, 0x6d, 0xdd, 0xfc, 0x48, 0x29, 0x1a, - 0xd6, 0x1e, 0x36, 0x30, 0x4b, 0xf7, 0x64, 0x94, 0xf3, 0xb8, 0x35, 0x4d, 0x04, 0xb6, 0xf1, 0x2b, - 0xdf, 0x18, 0x2b, 0x2b, 0x29, 0xbc, 0xe9, 0x19, 0x01, 0x25, 0xec, 0x0d, 0xfa, 0xc7, 0x00, 0x91, - 0x1e, 0x01, 0x81, 0x55, 0xfe, 0x83, 0x36, 0x13, 0x7c, 0x5c, 0xf1, 0x30, 0x5b, 0x0b, 0x72, 0xd2, - 0x2a, 0x09, 0x37, 0x93, 0xf5, 0xc4, 0x41, 0x10, 0x4c, 0x34, 0x94, 0x77, 0xc5, 0xe3, 0x89, 0x12, - 0xa4, 0x6f, 0xaf, 0x7d, 0x1a, 0xbe, 0xbd, 0xf5, 0xc2, 0xba, 0x3b, 0xa3, 0xfa, 0x3b, 0x17, 0xd1, - 0x1c, 0x89, 0xe8, 0x93, 0x3e, 0x8e, 0x74, 0xbe, 0xa7, 0x49, 0x3a, 0x25, 0x7d, 0x4b, 0x78, 0x90, - 0x4e, 0x30, 0x4a, 0x90, 0x9c, 0x4c, 0x63, 0x83, 0xb6, 0xcb, 0x24, 0xe1, 0xe1, 0x49, 0xc3, 0x82, - 0x76, 0x43, 0x32, 0x22, 0xa4, 0x36, 0x2f, 0x80, 0x3d, 0xf0, 0x79, 0xc2, 0x41, 0x3c, 0x1c, 0x46, - 0x0e, 0x09, 0x40, 0x04, 0x00, 0x42, 0x54, 0x6c, 0x14, 0x43, 0x52, 0xaa, 0xa9, 0x7a, 0x11, 0x0e, - 0x94, 0x9c, 0x39, 0x1c, 0x07, 0x06, 0x57, 0xe2, 0x02, 0x82, 0x11, 0xe9, 0x13, 0x87, 0x47, 0xc7, - 0x94, 0x65, 0x29, 0x54, 0xca, 0x12, 0xa5, 0x0c, 0xb0, 0x68, 0x44, 0x00, 0x12, 0x61, 0x62, 0xc8, - 0xeb, 0x49, 0x2c, 0x0f, 0x0e, 0x69, 0xe2, 0x25, 0xc2, 0x10, 0x56, 0x5a, 0x6a, 0xd3, 0x30, 0xd1, - 0x56, 0x51, 0x55, 0x88, 0x0a, 0xf0, 0xa7, 0xce, 0x89, 0x89, 0x03, 0x89, 0x48, 0x61, 0x73, 0xd8, - 0x5f, 0x89, 0x82, 0xcd, 0x64, 0x50, 0x94, 0x1d, 0x91, 0x0c, 0xd1, 0xe9, 0xa0, 0x73, 0x1a, 0x92, - 0x14, 0x33, 0x80, 0x7d, 0xfe, 0x3a, 0x8c, 0xf8, 0xcf, 0x96, 0xc5, 0x77, 0x9c, 0xf1, 0x10, 0xa5, - 0xca, 0x65, 0xfe, 0x12, 0x5f, 0xc7, 0x2f, 0x73, 0x90, 0x40, 0x12, 0xe3, 0x80, 0x46, 0x11, 0x20, - 0x0a, 0x91, 0x39, 0xb3, 0xe4, 0xce, 0x24, 0x40, 0x52, 0x68, 0x7d, 0x81, 0x1e, 0x0c, 0x2d, 0x5c, - 0x08, 0x02, 0xa9, 0x97, 0x2c, 0xc4, 0xc1, 0xa9, 0x7b, 0xbf, 0xc2, 0x82, 0x42, 0x44, 0xce, 0x66, - 0xe7, 0x37, 0xca, 0xcf, 0xfc, 0xc4, 0xaf, 0x9b, 0xc1, 0xf1, 0x34, 0x6f, 0x36, 0x9b, 0x81, 0x7a, - 0x4e, 0x79, 0xf3, 0xe4, 0x70, 0x7e, 0x0a, 0x45, 0x88, 0x5b, 0x80, 0xd3, 0xdb, 0x80, 0xb8, 0xe9, - 0xaa, 0xdf, 0x6f, 0xad, 0xd4, 0x74, 0xa2, 0xfb, 0xc4, 0xac, 0x15, 0xd1, 0xab, 0xe8, 0xe4, 0x4f, - 0xae, 0x13, 0xf5, 0xef, 0xab, 0xc2, 0x9d, 0x7a, 0xba, 0xc5, 0x27, 0x44, 0x2a, 0x7d, 0x4e, 0x97, - 0xd7, 0x0f, 0x85, 0x06, 0x18, 0x30, 0x4d, 0xc5, 0xb1, 0xdf, 0x93, 0xc7, 0xae, 0xd2, 0x6f, 0xf9, - 0x66, 0x23, 0x8f, 0x63, 0xb7, 0x88, 0x1c, 0x4c, 0xd8, 0x6c, 0x8c, 0xb4, 0x09, 0x39, 0x25, 0x86, - 0x58, 0x72, 0x67, 0x84, 0x27, 0x3d, 0xb8, 0x3a, 0xb1, 0xda, 0x91, 0xf1, 0x8b, 0x96, 0xcd, 0xd3, - 0xc5, 0xf1, 0x02, 0x42, 0x87, 0x64, 0x04, 0xcf, 0xa1, 0xf4, 0x0d, 0x24, 0x31, 0x82, 0x02, 0x9c, - 0xe2, 0x64, 0xec, 0xd8, 0x2d, 0x5e, 0x23, 0x42, 0xfd, 0x74, 0x9a, 0xd3, 0x57, 0x4c, 0x02, 0x2e, - 0x76, 0xe2, 0xae, 0xad, 0xc7, 0x02, 0x01, 0xef, 0x12, 0x14, 0x9c, 0x1c, 0x2c, 0xe9, 0x85, 0x39, - 0x16, 0x71, 0x9c, 0x71, 0x86, 0x54, 0x80, 0x00, 0xd6, 0xd0, 0x80, 0x28, 0x65, 0x44, 0xe2, 0x30, - 0x59, 0x19, 0x27, 0x35, 0x7f, 0x88, 0x12, 0x14, 0xd2, 0xdb, 0xca, 0x20, 0x58, 0xa1, 0xde, 0x4b, - 0xef, 0xa0, 0x22, 0x73, 0x48, 0x6f, 0x12, 0x83, 0xb6, 0x16, 0xae, 0xe2, 0x61, 0x43, 0x66, 0x20, - 0xa0, 0x29, 0x92, 0x90, 0x63, 0x50, 0xf1, 0xfa, 0xac, 0x95, 0x54, 0x7c, 0x31, 0xbf, 0x51, 0x3e, - 0xe4, 0x86, 0xf8, 0xff, 0x09, 0x55, 0x50, 0x7e, 0xc9, 0xd6, 0x03, 0xbc, 0xbe, 0xd1, 0x15, 0x34, - 0x9d, 0xb9, 0x57, 0xe1, 0x50, 0x98, 0x14, 0x1c, 0xfd, 0x71, 0xd2, 0x08, 0x26, 0x80, 0xb4, 0xb3, - 0xe5, 0x03, 0xbf, 0x49, 0xcc, 0x92, 0x41, 0xb6, 0xbf, 0xc4, 0xfd, 0x53, 0xc4, 0x74, 0x71, 0xd5, - 0xf4, 0x66, 0xbe, 0xb5, 0x1b, 0xd5, 0xa2, 0xba, 0x99, 0x67, 0xd4, 0x76, 0xfa, 0x26, 0x57, 0xd1, - 0x53, 0xa7, 0xc1, 0x60, 0xe3, 0x28, 0x14, 0xd7, 0xc4, 0x9c, 0x55, 0x3b, 0xcb, 0xff, 0xf0, 0x57, - 0x08, 0x30, 0x1e, 0x61, 0xe8, 0x40, 0x75, 0x17, 0x13, 0xc1, 0x77, 0x40, 0x80, 0x00, 0x12, 0x28, - 0x92, 0x68, 0xc1, 0xef, 0x85, 0x0a, 0x2b, 0xb4, 0x0c, 0x57, 0x77, 0x6b, 0x6b, 0x17, 0xc5, 0xf9, - 0xfc, 0x48, 0x50, 0x82, 0x39, 0x1e, 0xec, 0x63, 0xfa, 0x4e, 0x41, 0x00, 0x45, 0x68, 0x09, 0xb6, - 0x06, 0x99, 0x6d, 0x37, 0x7f, 0x8f, 0x9c, 0x48, 0x35, 0x28, 0xc8, 0xff, 0xa0, 0xde, 0x41, 0xce, - 0xa2, 0xf7, 0xf0, 0xa1, 0xdf, 0x8d, 0x66, 0xd7, 0x91, 0x0d, 0xa8, 0x94, 0x96, 0x48, 0x7e, 0xe0, - 0x80, 0x3b, 0x68, 0xf0, 0x76, 0xa4, 0x80, 0x2d, 0x1a, 0x08, 0x62, 0x61, 0x4c, 0x4a, 0x04, 0x08, - 0xe4, 0x40, 0x60, 0x13, 0x7c, 0xbf, 0x49, 0xa2, 0x83, 0x77, 0x7b, 0x52, 0x56, 0xfe, 0x24, 0x50, - 0xc9, 0x7f, 0xdb, 0x2f, 0x10, 0xe3, 0x30, 0x56, 0xad, 0x7c, 0x48, 0x55, 0x45, 0x5f, 0x20, 0x00, - 0x19, 0xdf, 0x5d, 0x47, 0x68, 0xae, 0xae, 0x4f, 0xd6, 0xab, 0xa9, 0x8d, 0xf5, 0x4a, 0x86, 0xf0, - 0x47, 0x5a, 0xd8, 0xfa, 0xa5, 0x7e, 0xb2, 0x9b, 0xad, 0x5f, 0x05, 0x81, 0x41, 0x72, 0x72, 0x61, - 0x66, 0xaf, 0x44, 0x70, 0x38, 0x73, 0x87, 0x83, 0x85, 0x83, 0x97, 0xc2, 0x85, 0x66, 0x33, 0x07, - 0x45, 0x84, 0xa7, 0xce, 0x51, 0x25, 0x98, 0x8f, 0x28, 0x06, 0xf8, 0xcc, 0x00, 0x33, 0xf3, 0x2c, - 0x06, 0x19, 0xd8, 0xd2, 0x02, 0xe6, 0xc0, 0x2a, 0xfc, 0xf9, 0x5c, 0x0a, 0x5b, 0x02, 0xe6, 0x7f, - 0xe1, 0x41, 0xef, 0xa0, 0x0f, 0x21, 0x85, 0xa7, 0x39, 0xe2, 0x46, 0x5f, 0x47, 0x92, 0x7b, 0xce, - 0x47, 0xa8, 0xd7, 0xea, 0xb2, 0x55, 0x25, 0x28, 0x84, 0xc1, 0xf7, 0x10, 0x0a, 0x72, 0xdb, 0x55, - 0x31, 0x06, 0xb8, 0xf0, 0x76, 0x0d, 0x4b, 0x22, 0x37, 0x12, 0x20, 0x15, 0x9c, 0x5c, 0x62, 0xc6, - 0x55, 0x42, 0xf9, 0x47, 0x12, 0x08, 0xba, 0x93, 0x7c, 0x39, 0xb7, 0xbe, 0x14, 0xc3, 0x82, 0x63, - 0xa8, 0xe7, 0x0a, 0x30, 0x4a, 0xbb, 0x22, 0xdc, 0x6b, 0x84, 0x9a, 0x34, 0x99, 0xfe, 0x5f, 0x10, - 0xc5, 0x5f, 0xf8, 0x8d, 0x01, 0x4b, 0x9d, 0x25, 0xf0, 0x4a, 0x45, 0xd4, 0xe7, 0x09, 0x90, 0x81, - 0x34, 0xaa, 0x49, 0xfc, 0x48, 0x26, 0xf6, 0xe1, 0x98, 0x14, 0x63, 0xbf, 0x10, 0x3e, 0xde, 0x4e, - 0x82, 0x69, 0xdf, 0xaa, 0x53, 0xea, 0x44, 0xbe, 0xae, 0x02, 0x5d, 0x11, 0xfe, 0xa9, 0x17, 0x90, - 0x8e, 0xff, 0xab, 0xfd, 0x52, 0xa7, 0xd1, 0x5a, 0x2f, 0xab, 0x0f, 0x04, 0xe1, 0x08, 0x87, 0xb9, - 0x6e, 0x2b, 0x71, 0x59, 0x13, 0xe3, 0x48, 0x4e, 0x02, 0x84, 0xaa, 0xc9, 0x47, 0xe8, 0xfb, 0x09, - 0x5d, 0xe1, 0x6f, 0x70, 0xe8, 0x19, 0xd7, 0xc1, 0x9c, 0x45, 0x97, 0xae, 0x12, 0x99, 0x61, 0xc4, - 0x09, 0x8a, 0x66, 0x70, 0xd3, 0x88, 0x98, 0x3a, 0x81, 0xb3, 0xe0, 0x3e, 0xf1, 0xd3, 0x92, 0x07, - 0xbd, 0x09, 0xe2, 0x58, 0x5c, 0xf5, 0x28, 0x7a, 0x64, 0x9c, 0x77, 0x7e, 0x14, 0x8e, 0x8e, 0x86, - 0xe9, 0xb4, 0xac, 0x9f, 0x61, 0x62, 0x9b, 0x7b, 0x77, 0xa9, 0x73, 0x2a, 0x20, 0x28, 0xc5, 0xf1, - 0xb7, 0x2b, 0x83, 0x1f, 0xd9, 0xd3, 0x44, 0xbb, 0x1d, 0x5d, 0xb0, 0xfb, 0x7b, 0xb9, 0xc8, 0x4c, - 0xb5, 0x2d, 0xd2, 0xbe, 0x09, 0xce, 0x64, 0x8c, 0x1a, 0x1a, 0x98, 0x30, 0x1d, 0xb5, 0xff, 0xc6, - 0x11, 0xc4, 0x10, 0xf2, 0x1a, 0xe0, 0xa1, 0x1f, 0x84, 0x30, 0xc3, 0x00, 0xfe, 0x03, 0x4e, 0x9f, - 0xb8, 0x10, 0xe0, 0xed, 0x83, 0x50, 0x23, 0xc5, 0xae, 0x43, 0xc6, 0x3b, 0x67, 0x57, 0xae, 0x92, - 0x2a, 0x50, 0xb1, 0xb5, 0x13, 0x62, 0x0e, 0x10, 0x25, 0x33, 0xa6, 0xe1, 0xc4, 0xe9, 0x75, 0xaa, - 0xdf, 0x88, 0x0a, 0x14, 0xe0, 0x61, 0x5b, 0xcf, 0x30, 0xb2, 0x0c, 0x96, 0xd0, 0x9f, 0x05, 0xdd, - 0x69, 0x97, 0xd3, 0x8a, 0x25, 0xa2, 0x23, 0x20, 0xf7, 0x1a, 0x99, 0x8e, 0x97, 0x0a, 0xdc, 0xf1, - 0xc5, 0x60, 0xbe, 0x6d, 0xbd, 0x88, 0x68, 0x89, 0x61, 0x5f, 0x35, 0x5a, 0x43, 0xed, 0x7d, 0xf1, - 0x87, 0xb4, 0xb7, 0xf8, 0xe5, 0xcd, 0x83, 0x0e, 0xa0, 0xcd, 0xbf, 0x22, 0xe5, 0xa5, 0x3a, 0xf8, - 0x2d, 0xdb, 0x43, 0x3f, 0x18, 0x8b, 0x4d, 0x86, 0x2f, 0x31, 0xef, 0x10, 0x10, 0x15, 0x2b, 0x22, - 0xf5, 0xab, 0x4e, 0x2f, 0xf3, 0x85, 0x49, 0x52, 0x58, 0xe2, 0x27, 0x8b, 0xe8, 0xa9, 0x61, 0x0e, - 0x84, 0x32, 0x4e, 0x8f, 0x84, 0x5f, 0x42, 0xdc, 0xfa, 0x14, 0x3b, 0x8f, 0x12, 0x0b, 0x05, 0x24, - 0x2e, 0x3a, 0x16, 0x5c, 0x20, 0x59, 0x8e, 0xf8, 0x30, 0xaa, 0xe0, 0xc8, 0x5f, 0xb4, 0x24, 0x3c, - 0xdd, 0x7a, 0x9f, 0x9a, 0xf8, 0xd9, 0x68, 0x2b, 0xd3, 0x9f, 0x2c, 0x7a, 0x91, 0x82, 0xf9, 0xb0, - 0x5c, 0xbc, 0x75, 0x0f, 0xd4, 0x67, 0xff, 0xf1, 0x23, 0x4c, 0x3d, 0x61, 0x2a, 0x81, 0x76, 0x99, - 0xf5, 0x4d, 0x21, 0xb0, 0x13, 0xa8, 0x31, 0x6d, 0x98, 0x8d, 0x5f, 0xee, 0xc1, 0x26, 0xf8, 0x91, - 0x98, 0x6c, 0x3e, 0x96, 0x35, 0x46, 0xc4, 0x2e, 0x5e, 0x0b, 0xb1, 0x38, 0x79, 0x25, 0x1a, 0x6c, - 0x5c, 0x48, 0xc3, 0x3f, 0x6a, 0x57, 0x45, 0x86, 0x57, 0xe9, 0xc5, 0x25, 0xd9, 0x6d, 0xf6, 0xec, - 0x56, 0xee, 0x21, 0xcb, 0xf0, 0x4c, 0x24, 0xb9, 0xef, 0x15, 0xbb, 0xfc, 0x69, 0x1e, 0xdc, 0x51, - 0xcb, 0x00, 0xc5, 0x65, 0xf1, 0x84, 0x17, 0x2a, 0x3e, 0x4d, 0x82, 0xac, 0x63, 0x46, 0x40, 0x51, - 0x9a, 0xb7, 0xf8, 0xfb, 0x7b, 0xed, 0x31, 0x3b, 0xa4, 0x9a, 0x41, 0xb9, 0xea, 0xaa, 0xff, 0x89, - 0x05, 0x70, 0xab, 0xa1, 0x34, 0x47, 0x4f, 0x6b, 0x96, 0x9b, 0xc8, 0x8e, 0xaf, 0xdf, 0x77, 0x7d, - 0xe7, 0x6f, 0xc0, 0x39, 0xf3, 0x5a, 0x04, 0xe6, 0xbc, 0x92, 0xa8, 0x12, 0xa9, 0x83, 0xa1, 0x2b, - 0x52, 0x93, 0x6a, 0xc1, 0x13, 0x21, 0x4a, 0x78, 0xb2, 0xf8, 0x26, 0x3a, 0x01, 0x8a, 0xd3, 0x1e, - 0xb8, 0x45, 0x72, 0xf7, 0x73, 0xea, 0xff, 0x0c, 0x9c, 0xf4, 0x96, 0x15, 0x2f, 0xdd, 0x6b, 0xe1, - 0x11, 0xc2, 0x00, 0xe0, 0x80, 0xc0, 0x53, 0x38, 0xe2, 0xad, 0x5b, 0x77, 0x59, 0xf0, 0x57, 0x1e, - 0xcf, 0x0d, 0xb4, 0x2c, 0x49, 0x7f, 0xa5, 0xe9, 0x2b, 0x40, 0x1e, 0xc8, 0xa1, 0xd7, 0x65, 0x8b, - 0xde, 0x00, 0x8d, 0x37, 0xbc, 0xf1, 0x20, 0x98, 0x23, 0xa4, 0x91, 0xe1, 0xf4, 0xc8, 0x2b, 0xd1, - 0x2b, 0xeb, 0x97, 0xc1, 0x1e, 0xf7, 0x82, 0x5e, 0xaf, 0x5d, 0x5e, 0x5e, 0xaf, 0xf5, 0xca, 0xba, - 0xe7, 0x3e, 0x89, 0x8c, 0xae, 0x8e, 0x94, 0x16, 0x24, 0x20, 0x21, 0xf8, 0xe2, 0x2c, 0xaa, 0x6d, - 0xf2, 0x29, 0xb8, 0xfe, 0x5c, 0x40, 0xda, 0xa8, 0x8b, 0x12, 0xa2, 0x78, 0x2f, 0x03, 0xae, 0xac, - 0xde, 0xf1, 0xcf, 0xbb, 0x77, 0xf1, 0xa2, 0x28, 0xcf, 0x11, 0x01, 0x4d, 0x76, 0x4f, 0x3f, 0x9a, - 0x43, 0x52, 0x41, 0xc8, 0xe1, 0xa5, 0x0a, 0xb2, 0xc5, 0xac, 0x5e, 0x79, 0xfc, 0x77, 0x3a, 0x2a, - 0x2c, 0x99, 0x89, 0x3a, 0x6d, 0xb7, 0xfc, 0x40, 0xda, 0x8d, 0x65, 0x24, 0xfd, 0x8e, 0x96, 0x07, - 0x61, 0x29, 0x65, 0x0f, 0x59, 0x0a, 0x62, 0xc4, 0xf0, 0xe1, 0xbc, 0xc1, 0x1b, 0x7d, 0x0a, 0x5b, - 0xeb, 0x41, 0xc2, 0x2b, 0xb9, 0x20, 0xbe, 0xc0, 0x80, 0x63, 0x79, 0x09, 0xc0, 0xf0, 0xae, 0xb3, - 0x1c, 0xfb, 0x6d, 0xd7, 0xc1, 0x48, 0xd7, 0x28, 0x98, 0x91, 0xe5, 0xb1, 0xe5, 0x0b, 0x83, 0x1b, - 0x2c, 0x2f, 0x54, 0xea, 0x0b, 0x18, 0x40, 0x77, 0x76, 0xe3, 0xd1, 0x1f, 0xe1, 0xe1, 0x23, 0xb6, - 0x16, 0xf8, 0xac, 0x61, 0x7d, 0x5b, 0xe4, 0x9d, 0x00, 0x00, 0xcc, 0xc4, 0x68, 0xb1, 0x47, 0x6a, - 0xdd, 0x3f, 0xf0, 0xa5, 0x1d, 0x80, 0x00, 0x19, 0xbe, 0xd3, 0x0c, 0x5d, 0xb0, 0x81, 0x9a, 0xe2, - 0xcb, 0x9f, 0x78, 0x83, 0x5f, 0x7f, 0x5f, 0xfc, 0x60, 0xc2, 0xcb, 0x5e, 0x6e, 0x90, 0x56, 0x0d, - 0xf2, 0x84, 0x72, 0x5b, 0x28, 0xde, 0xe4, 0x9b, 0x72, 0x7d, 0x23, 0xcf, 0xac, 0xfe, 0x98, 0x3d, - 0x47, 0x84, 0x08, 0xb3, 0xb7, 0x5a, 0xe4, 0xc9, 0xc2, 0xde, 0xd7, 0x50, 0xbf, 0xd0, 0x5e, 0x2f, - 0x82, 0x1b, 0x4d, 0x6c, 0x42, 0x7d, 0x0a, 0xef, 0xa2, 0xe5, 0xf5, 0x8a, 0xfa, 0x24, 0x33, 0xea, - 0xc1, 0xf4, 0x46, 0x22, 0x7a, 0xf5, 0x71, 0x76, 0xb6, 0x91, 0x90, 0x00, 0x1b, 0xf8, 0xbe, 0x7f, - 0x49, 0x0d, 0x83, 0x6b, 0x89, 0x34, 0x42, 0xa0, 0x56, 0xe2, 0xbe, 0x20, 0x29, 0xb3, 0x8a, 0xd2, - 0x9f, 0x45, 0xcf, 0x06, 0xd7, 0x55, 0xc3, 0xf1, 0x53, 0x13, 0xe0, 0x80, 0xa9, 0x00, 0x43, 0xf8, - 0x91, 0xe2, 0x1b, 0x4c, 0xb6, 0xef, 0xdd, 0xce, 0xc1, 0x58, 0x6f, 0xf1, 0xa5, 0x1e, 0xee, 0xf6, - 0x50, 0x30, 0x10, 0x76, 0xd2, 0x46, 0x8b, 0xf6, 0xf1, 0x01, 0x5c, 0xe8, 0xac, 0x55, 0x25, 0x31, - 0x41, 0x4b, 0x19, 0x8c, 0xf1, 0x9d, 0xfa, 0x00, 0x7c, 0x9f, 0x57, 0xe2, 0x41, 0x58, 0xb7, 0x24, - 0x9a, 0x8e, 0x44, 0x1f, 0x50, 0x6f, 0x95, 0x81, 0xfd, 0xb0, 0x10, 0x25, 0xcc, 0x94, 0x87, 0x0d, - 0xfe, 0x14, 0x22, 0x9c, 0xb7, 0x3b, 0x50, 0xea, 0x33, 0x04, 0xa3, 0x09, 0xee, 0x21, 0x79, 0x26, - 0x37, 0x53, 0xb8, 0x81, 0x01, 0x43, 0x8e, 0x88, 0x5c, 0x9e, 0xc5, 0x1c, 0xb0, 0x43, 0xf0, 0x09, - 0x72, 0xe6, 0xb0, 0x19, 0x07, 0xd5, 0x97, 0xdd, 0x29, 0x6f, 0x16, 0xab, 0x8b, 0x80, 0x68, 0x72, - 0xbe, 0x2f, 0x82, 0x92, 0xf5, 0x0e, 0xe2, 0x54, 0x0f, 0x3b, 0x04, 0xc8, 0xbb, 0xfc, 0x11, 0x58, - 0x1a, 0x01, 0x4e, 0xc7, 0x7c, 0x11, 0x90, 0xd4, 0x8d, 0x1c, 0x33, 0xa7, 0xc5, 0x08, 0x27, 0xf5, - 0xee, 0xbe, 0x14, 0x25, 0x5b, 0x93, 0xc7, 0x44, 0x94, 0xc8, 0x8c, 0xca, 0x7b, 0x81, 0x74, 0xc9, - 0x7d, 0x98, 0xef, 0x86, 0x7f, 0x11, 0x24, 0xfc, 0x8b, 0xcf, 0x18, 0x49, 0x46, 0x5e, 0x15, 0xe9, - 0xb3, 0x93, 0x60, 0x9d, 0xfc, 0xad, 0x09, 0x42, 0xe7, 0x61, 0x89, 0x12, 0x08, 0xc6, 0xae, 0x1d, - 0x95, 0x22, 0xbc, 0x94, 0xac, 0xc1, 0x78, 0x63, 0xaf, 0x7d, 0x6b, 0xe8, 0xe9, 0xd7, 0xa2, 0xa7, - 0x5e, 0x88, 0xc7, 0xd4, 0xa0, 0xfa, 0x23, 0x7d, 0x5b, 0xea, 0xdf, 0x57, 0x24, 0xe6, 0x23, 0x8d, - 0x82, 0xa3, 0x08, 0xad, 0xc4, 0x78, 0x28, 0x26, 0x95, 0x55, 0x23, 0x0b, 0x36, 0x3e, 0x30, 0x86, - 0xc5, 0x4a, 0x2f, 0xc6, 0x20, 0x68, 0x28, 0xc7, 0x5f, 0x92, 0xd1, 0x8c, 0xb1, 0xa0, 0x14, 0x8a, - 0x37, 0xf9, 0xe2, 0x41, 0x19, 0xd3, 0x5f, 0xbc, 0x43, 0xa5, 0x54, 0x0f, 0x89, 0x0a, 0x4f, 0x96, - 0xe2, 0xb8, 0x94, 0xb1, 0xe3, 0xee, 0x3f, 0x3a, 0x47, 0x2f, 0x38, 0x40, 0x00, 0x3d, 0xf1, 0x82, - 0x34, 0x19, 0x79, 0xc3, 0x47, 0x9c, 0xbb, 0x40, 0xce, 0x10, 0x00, 0x09, 0x63, 0x2a, 0xec, 0xd7, - 0x78, 0x55, 0x82, 0xde, 0x85, 0x2b, 0xdf, 0x82, 0x93, 0x96, 0xb8, 0x18, 0x30, 0x6c, 0x6d, 0xd4, - 0xca, 0x96, 0x64, 0x27, 0x0b, 0xc8, 0xf9, 0x8b, 0x80, 0x1f, 0x13, 0x35, 0xf7, 0x88, 0x42, 0x5f, - 0xc4, 0x82, 0x8c, 0xd5, 0x58, 0x2d, 0xd9, 0x3b, 0xea, 0xff, 0x05, 0x15, 0xd0, 0xe8, 0xea, 0xef, - 0x82, 0x13, 0xab, 0xef, 0xf0, 0x55, 0x81, 0x30, 0xc3, 0xce, 0xab, 0xb8, 0xf5, 0xdb, 0x21, 0x6e, - 0x79, 0x6c, 0x1b, 0xca, 0x18, 0x0a, 0xa6, 0x4c, 0xef, 0xf7, 0x7e, 0xfe, 0x09, 0x0d, 0x57, 0xe6, - 0xe2, 0x44, 0x82, 0x53, 0x4a, 0xde, 0x99, 0x6c, 0xc9, 0x1e, 0x41, 0x73, 0x88, 0x10, 0x0a, 0x84, - 0x33, 0x11, 0x9f, 0xaf, 0x6b, 0x54, 0x2c, 0x7c, 0x4c, 0x55, 0xd2, 0x25, 0xaf, 0x1f, 0x71, 0x10, - 0x51, 0x2d, 0xb9, 0xe8, 0x5b, 0x2e, 0x5a, 0x62, 0x5c, 0x7f, 0xa1, 0x37, 0x1e, 0x84, 0xe5, 0x27, - 0x42, 0x99, 0x11, 0xd0, 0x96, 0x3e, 0xba, 0xfa, 0x35, 0x49, 0xd1, 0xf2, 0xf8, 0x23, 0xad, 0x75, - 0x7d, 0x73, 0x9f, 0x5c, 0xe7, 0xd7, 0x39, 0xf5, 0x1d, 0xab, 0x93, 0x75, 0x97, 0xa2, 0x95, 0x3e, - 0x63, 0x05, 0x1f, 0x37, 0x22, 0x69, 0x07, 0x13, 0x0a, 0x1b, 0x56, 0x31, 0x8c, 0xa3, 0xdf, 0x48, - 0x74, 0x40, 0x4b, 0x19, 0x43, 0x01, 0x7f, 0xbc, 0x71, 0xff, 0x05, 0x5a, 0xaa, 0xaa, 0xad, 0x22, - 0x38, 0xd4, 0x89, 0xfc, 0x48, 0xd9, 0x89, 0xd6, 0x11, 0x49, 0x22, 0x46, 0xa9, 0x02, 0xed, 0x63, - 0x23, 0xe5, 0x7d, 0x1a, 0x08, 0x7b, 0xb5, 0x45, 0x53, 0xa9, 0x59, 0x05, 0x47, 0xca, 0x82, 0x74, - 0x31, 0xe3, 0x11, 0x9f, 0x8b, 0xc5, 0xfc, 0x10, 0x95, 0x99, 0xaf, 0xde, 0x20, 0x16, 0x4a, 0x41, - 0x76, 0xd4, 0x98, 0x92, 0x49, 0x39, 0x48, 0x2f, 0xb7, 0xc6, 0x0a, 0x54, 0xd7, 0x58, 0xd1, 0xc2, - 0xe0, 0xb8, 0x7c, 0xc1, 0x11, 0x95, 0x06, 0x1f, 0x23, 0x40, 0xa6, 0xc4, 0x40, 0x65, 0xd6, 0x8d, - 0xb7, 0xf8, 0xca, 0xf0, 0x41, 0x0c, 0xc3, 0xc1, 0x78, 0x20, 0xe2, 0x14, 0x4b, 0xf3, 0xf8, 0x04, - 0xb4, 0x14, 0xf8, 0x3c, 0xef, 0x9e, 0x06, 0x87, 0x00, 0x1c, 0x7d, 0xc6, 0x8c, 0x34, 0x3e, 0x28, - 0xbf, 0x1b, 0x39, 0xe7, 0x83, 0x04, 0x47, 0x05, 0xaa, 0x1d, 0x16, 0x16, 0xa2, 0x3c, 0x66, 0x83, - 0xf4, 0x3e, 0xc6, 0x65, 0x43, 0xb9, 0x7a, 0x09, 0x34, 0xf4, 0x1d, 0xc3, 0xc3, 0x81, 0x4f, 0xe2, - 0xd8, 0x75, 0xc7, 0xf0, 0x5a, 0x54, 0x94, 0x5f, 0x20, 0xbd, 0x92, 0x25, 0x99, 0x30, 0xc6, 0x45, - 0x2b, 0x27, 0xf1, 0x08, 0x5c, 0xe3, 0xd7, 0xcf, 0xab, 0xfd, 0x7e, 0xf8, 0x21, 0xb3, 0x60, 0xee, - 0xe7, 0xd5, 0xfc, 0x48, 0x82, 0xaa, 0x63, 0x4b, 0x2a, 0xbf, 0x8f, 0x2c, 0xa6, 0x32, 0xaa, 0xb6, - 0x96, 0x7a, 0x7e, 0x08, 0x8c, 0x2b, 0x14, 0x62, 0x8c, 0x51, 0xb8, 0xf0, 0xa1, 0x0b, 0x62, 0xb7, - 0x15, 0xc0, 0x09, 0xdc, 0x86, 0x98, 0x92, 0xd9, 0xde, 0xdd, 0xd8, 0xf8, 0x50, 0x60, 0xb9, 0xb1, - 0x99, 0x27, 0x92, 0x4e, 0x25, 0xdb, 0xbb, 0xb3, 0x05, 0xed, 0xba, 0xf8, 0x23, 0x28, 0x9e, 0x18, - 0x82, 0xa2, 0x51, 0x3e, 0x55, 0xfe, 0x08, 0xce, 0x63, 0x14, 0xd4, 0xbf, 0xa2, 0xfa, 0x37, 0x45, - 0x74, 0x57, 0xfa, 0xde, 0x4e, 0xbf, 0xbe, 0x8b, 0xe3, 0xeb, 0x07, 0xc1, 0x24, 0x9c, 0xbc, 0x71, - 0x6d, 0xfe, 0x08, 0xcc, 0xcd, 0xa3, 0xed, 0x4f, 0xe2, 0x41, 0x84, 0xb1, 0x96, 0x8f, 0x6d, 0x4e, - 0x91, 0x00, 0x85, 0xe1, 0x07, 0xea, 0x9a, 0xf8, 0x46, 0xf6, 0xb3, 0x1a, 0x43, 0xd4, 0xab, 0x4c, - 0x5e, 0x63, 0x7e, 0x09, 0xa7, 0x76, 0xdf, 0x88, 0x54, 0x5d, 0x9e, 0x20, 0x15, 0x09, 0x41, 0x9d, - 0xd4, 0x95, 0x39, 0x03, 0x01, 0xd9, 0x9b, 0x39, 0x17, 0x12, 0x0a, 0x04, 0x30, 0x13, 0xee, 0x72, - 0x1d, 0x7e, 0xf1, 0x01, 0x4a, 0x02, 0x2c, 0x45, 0x6e, 0xe6, 0xc2, 0xf3, 0x8f, 0xdf, 0x48, 0x28, - 0x0e, 0x40, 0xcd, 0x9c, 0x47, 0x88, 0x40, 0x1d, 0xcf, 0x82, 0xd2, 0xb8, 0x94, 0x30, 0x14, 0x3b, - 0x15, 0x4c, 0x02, 0x2e, 0xa4, 0x42, 0xa5, 0xc4, 0x0a, 0x21, 0xf3, 0xdd, 0xdd, 0xf8, 0x90, 0x84, - 0xee, 0x9e, 0xe1, 0x29, 0x55, 0x00, 0xc8, 0xa1, 0x76, 0x9f, 0x89, 0x0b, 0x0b, 0x9f, 0xde, 0x8a, - 0xef, 0xfb, 0x53, 0xff, 0x05, 0x84, 0x7a, 0xbc, 0xe2, 0x02, 0x5a, 0x16, 0xe2, 0x28, 0xc1, 0x14, - 0x76, 0x4b, 0x89, 0x12, 0x09, 0xb4, 0xd3, 0x1b, 0xd1, 0x40, 0x40, 0x37, 0x46, 0x5f, 0xcd, 0xf0, - 0xa1, 0x48, 0x4c, 0x0c, 0x6c, 0x00, 0x11, 0x0d, 0x2d, 0xb8, 0x5c, 0xba, 0x53, 0x10, 0x57, 0x43, - 0x34, 0x6e, 0x08, 0x05, 0x73, 0xf8, 0x90, 0x4f, 0xa3, 0x60, 0xcd, 0x0d, 0xcf, 0x54, 0xeb, 0x89, - 0x04, 0x45, 0x3a, 0xf6, 0x9e, 0xbc, 0x47, 0x84, 0x51, 0x9c, 0xf1, 0x21, 0x4d, 0xd2, 0xd0, 0xcd, - 0x47, 0x06, 0x04, 0x82, 0x02, 0xe4, 0x04, 0x01, 0x83, 0x70, 0x80, 0xba, 0x90, 0x0f, 0x36, 0x1e, - 0xa6, 0xc7, 0xc1, 0x14, 0x56, 0x2b, 0x71, 0x5e, 0xbe, 0x14, 0x15, 0xcb, 0xcd, 0x86, 0xc4, 0xa5, - 0xce, 0x41, 0xbb, 0x48, 0x27, 0xfe, 0x8e, 0xff, 0x1b, 0x80, 0x58, 0x4f, 0x53, 0x8e, 0x04, 0x01, - 0x93, 0x27, 0x57, 0x6c, 0x02, 0x71, 0x13, 0x69, 0x07, 0xe9, 0x6d, 0x00, 0x7e, 0x67, 0xc8, 0x6a, - 0x43, 0x0b, 0x00, 0x44, 0x76, 0xd3, 0x46, 0xa2, 0xd5, 0xf7, 0xd7, 0xa1, 0x1e, 0x8e, 0xe4, 0x9d, - 0x17, 0xab, 0xaf, 0x7d, 0x62, 0xf9, 0x2b, 0x5f, 0x82, 0x1d, 0xd7, 0xdf, 0x5a, 0xf8, 0x22, 0x34, - 0x48, 0x1b, 0x57, 0x3e, 0xac, 0x78, 0x80, 0x49, 0x4a, 0x3d, 0x94, 0x7d, 0xf1, 0x9d, 0xcc, 0xd6, - 0x0d, 0xf3, 0x82, 0x00, 0xa7, 0xda, 0x3e, 0x7a, 0x5e, 0x30, 0x8e, 0x21, 0x10, 0x1b, 0x39, 0x10, - 0x1a, 0xd5, 0xcb, 0x6e, 0x2b, 0xbb, 0x6f, 0xe0, 0x8c, 0xf5, 0x5f, 0x7c, 0x51, 0x1b, 0x08, 0xd8, - 0xe3, 0x65, 0x86, 0x38, 0x78, 0x3c, 0xa4, 0x2e, 0x98, 0x93, 0x88, 0x0a, 0x53, 0x82, 0x2c, 0x47, - 0xc6, 0x09, 0x84, 0x12, 0x89, 0x8a, 0xfc, 0x3f, 0x50, 0x07, 0x63, 0x39, 0x2b, 0x2b, 0xe0, 0x48, - 0x22, 0x86, 0x02, 0x76, 0x33, 0x98, 0xa5, 0x5e, 0x09, 0xa5, 0x20, 0x96, 0xdc, 0x56, 0xf1, 0x83, - 0x6d, 0x62, 0xef, 0xe2, 0x42, 0x85, 0x21, 0x66, 0x06, 0x3e, 0x81, 0xa2, 0x02, 0x68, 0x4c, 0xf9, - 0xf9, 0x18, 0x4c, 0xb5, 0xd8, 0xbb, 0x88, 0x10, 0x0b, 0x8a, 0x5b, 0x0a, 0x24, 0x46, 0xad, 0x31, - 0x86, 0x49, 0x3f, 0x3e, 0xf1, 0x20, 0x9a, 0x70, 0x40, 0x17, 0x88, 0x0f, 0xbd, 0x22, 0xa9, 0xe2, - 0x02, 0x93, 0xe4, 0x03, 0x60, 0x45, 0x80, 0x69, 0x56, 0x83, 0xa0, 0xd1, 0x31, 0xd2, 0x6b, 0x09, - 0x5d, 0xbd, 0x06, 0x55, 0x37, 0x6a, 0x4f, 0x82, 0xbd, 0x46, 0x80, 0x80, 0xab, 0x01, 0xbf, 0x6a, - 0xcf, 0x88, 0x68, 0x2b, 0x12, 0x88, 0x09, 0x6f, 0xde, 0x11, 0x05, 0x73, 0x7a, 0x1c, 0x8c, 0x54, - 0x65, 0x4e, 0x86, 0x0d, 0x7f, 0x64, 0x4f, 0x10, 0x08, 0xec, 0x45, 0x69, 0xcb, 0x51, 0x99, 0x43, - 0x89, 0x29, 0x5d, 0xc5, 0x65, 0xce, 0x22, 0xb1, 0x1f, 0x44, 0xf9, 0xe2, 0x42, 0x96, 0x65, 0x00, - 0x06, 0x35, 0x61, 0x55, 0xd4, 0xf9, 0xe4, 0x3c, 0x8e, 0x36, 0x36, 0xdc, 0x18, 0x0c, 0x19, 0x53, - 0xe0, 0xae, 0x12, 0xb8, 0x76, 0x26, 0x86, 0x02, 0xa4, 0xca, 0xcf, 0x71, 0x08, 0xcb, 0x29, 0x65, - 0x6c, 0xc5, 0x9e, 0xa8, 0x75, 0xa1, 0x01, 0x2f, 0x02, 0x01, 0x67, 0xc6, 0x8a, 0xd0, 0xd4, 0x7e, - 0xd0, 0x7e, 0x3f, 0xac, 0x20, 0x9f, 0x61, 0xa6, 0xb4, 0x0f, 0x37, 0xb6, 0x06, 0x6c, 0x77, 0x5c, - 0x63, 0xff, 0x87, 0xe6, 0x8a, 0xa5, 0x0c, 0x05, 0x92, 0x1c, 0x96, 0x2d, 0x23, 0xb8, 0xd7, 0xd6, - 0x2e, 0x09, 0x7a, 0x52, 0xc4, 0x06, 0x00, 0xcd, 0x46, 0xfa, 0x44, 0xd8, 0x7a, 0xe8, 0xaf, 0x27, - 0x45, 0xf8, 0xf5, 0xca, 0xb8, 0x22, 0xbb, 0x3f, 0xef, 0xaa, 0x02, 0x49, 0xc7, 0xea, 0xee, 0xaa, - 0xee, 0xab, 0xae, 0x89, 0xd5, 0xd6, 0x29, 0x7a, 0xe6, 0xfa, 0xb5, 0xf5, 0xcf, 0x5c, 0x12, 0x4f, - 0x24, 0x0d, 0x1b, 0x52, 0xf1, 0x21, 0xd8, 0x6a, 0xb4, 0xe0, 0xc0, 0x8f, 0x78, 0x1f, 0xea, 0xdb, - 0x2a, 0x34, 0x1d, 0xef, 0x0d, 0xf6, 0x85, 0x13, 0xc2, 0xae, 0xa2, 0xff, 0x89, 0x0a, 0x14, 0xc4, - 0x8b, 0x70, 0xd9, 0x52, 0xb8, 0x12, 0x34, 0xa3, 0x7d, 0x8d, 0x8c, 0x4a, 0xbb, 0x01, 0x8d, 0x1b, - 0x17, 0x22, 0x3f, 0xc5, 0x7c, 0x7d, 0x2f, 0x51, 0x3f, 0xe0, 0xb0, 0x46, 0xe7, 0x84, 0x56, 0xe1, - 0x75, 0x08, 0x56, 0x78, 0xe1, 0xc3, 0xc9, 0xdd, 0x28, 0xd5, 0x71, 0x21, 0x48, 0x68, 0x19, 0x1f, - 0xc7, 0xbe, 0x55, 0x78, 0x84, 0xb5, 0xd2, 0x0d, 0xc5, 0x95, 0x85, 0xfb, 0x2b, 0xf9, 0x5c, 0x27, - 0xac, 0xdd, 0x12, 0xbe, 0x8b, 0x97, 0xc1, 0x3c, 0xe3, 0x05, 0xf9, 0x78, 0xae, 0xf9, 0x7c, 0x15, - 0xd5, 0x48, 0x4d, 0x38, 0x23, 0x22, 0x13, 0x99, 0x22, 0x85, 0x95, 0x52, 0x61, 0x7d, 0xde, 0x24, - 0x44, 0x60, 0x36, 0x47, 0xe3, 0x57, 0x58, 0x0a, 0xf8, 0x80, 0x46, 0x7b, 0xd9, 0xc7, 0xf1, 0x20, - 0x8b, 0x66, 0xb7, 0xf1, 0x0a, 0x39, 0x9d, 0x71, 0x20, 0x8b, 0x7c, 0xf0, 0xae, 0x27, 0xf0, 0x57, - 0x52, 0x22, 0x0b, 0x6a, 0x58, 0xaf, 0x38, 0x37, 0xad, 0x30, 0x86, 0xf5, 0x0a, 0xc6, 0x4a, 0xde, - 0xdd, 0x01, 0x5f, 0x57, 0xf8, 0x2e, 0x39, 0x01, 0x36, 0x60, 0x7e, 0xc0, 0x25, 0x20, 0xb0, 0x1b, - 0xc2, 0x00, 0xbf, 0xc1, 0x66, 0x55, 0x07, 0x0c, 0x1d, 0x8c, 0x84, 0xb0, 0xee, 0x14, 0xa0, 0x26, - 0x36, 0x14, 0xa8, 0xb2, 0xae, 0x23, 0xe1, 0x21, 0x0a, 0xaa, 0xa7, 0x60, 0xf4, 0x7b, 0xf5, 0x35, - 0xf0, 0xa0, 0x90, 0xdd, 0x99, 0xd3, 0x49, 0x1a, 0x25, 0x1d, 0xc3, 0x04, 0xcd, 0xc1, 0x6b, 0x9b, - 0xf3, 0x04, 0x02, 0xd3, 0x48, 0xd0, 0x50, 0x66, 0x04, 0x05, 0x1c, 0xad, 0x06, 0x1a, 0x6a, 0x4e, - 0x68, 0xc2, 0xa9, 0x6f, 0x31, 0xa2, 0xf4, 0x2f, 0xaf, 0x0c, 0x48, 0x90, 0x91, 0x1e, 0x93, 0x49, - 0x63, 0x65, 0xb7, 0xe7, 0xea, 0x99, 0xa6, 0xde, 0xd9, 0xfa, 0x7f, 0x82, 0xb1, 0x0f, 0xbd, 0xee, - 0xf5, 0x74, 0x9b, 0xea, 0xe7, 0xd5, 0xc3, 0xe8, 0xa5, 0x4a, 0xeb, 0x15, 0x75, 0x7f, 0xab, 0x0f, - 0x44, 0x7f, 0xab, 0xcb, 0xd5, 0xfe, 0xbf, 0x2f, 0xab, 0x12, 0x74, 0x7e, 0x93, 0x12, 0x34, 0x51, - 0x12, 0x13, 0x04, 0x1c, 0x29, 0x4a, 0xfd, 0x29, 0xe3, 0xd1, 0x44, 0x67, 0x68, 0x09, 0x1a, 0x50, - 0xc3, 0xe9, 0xb4, 0x9d, 0x31, 0x5e, 0x81, 0x63, 0x17, 0x2d, 0x14, 0x7b, 0xa4, 0x88, 0x29, 0x55, - 0x36, 0x90, 0x8a, 0x2f, 0xf1, 0xa5, 0xc8, 0xc8, 0xf2, 0xf7, 0x22, 0x98, 0x97, 0x53, 0xad, 0x15, - 0x92, 0xc8, 0xf5, 0x3d, 0xc4, 0x7c, 0xbf, 0xf1, 0x01, 0x43, 0x8c, 0x17, 0x0b, 0xb1, 0x85, 0xdc, - 0x72, 0x4e, 0x6d, 0x22, 0x79, 0x60, 0x28, 0x98, 0xa0, 0xc1, 0x00, 0x6a, 0x73, 0x1c, 0x08, 0x72, - 0x00, 0xcf, 0x10, 0x28, 0xca, 0x81, 0xda, 0x55, 0x27, 0xf8, 0x80, 0x4e, 0x4d, 0x26, 0x4e, 0x4f, - 0x1f, 0xff, 0x08, 0x05, 0x39, 0x6c, 0xb0, 0xb8, 0xba, 0xe8, 0x87, 0x5c, 0x3b, 0xae, 0x71, 0x01, - 0x4b, 0xbe, 0x08, 0x8b, 0x10, 0xf8, 0x85, 0x87, 0xf8, 0x2a, 0x8a, 0xc4, 0x26, 0x25, 0xb6, 0xc0, - 0x7d, 0x93, 0xf3, 0x3f, 0x7b, 0x8c, 0x99, 0x71, 0xc7, 0xe1, 0x0e, 0xc0, 0x4e, 0x86, 0x2b, 0x3a, - 0x96, 0xf3, 0xde, 0x99, 0x7e, 0x58, 0x78, 0xb9, 0x46, 0xb9, 0x02, 0x01, 0xd0, 0xc8, 0xcf, 0x82, - 0xd3, 0xcd, 0x5e, 0x86, 0xcc, 0xa5, 0x4e, 0x07, 0x5c, 0x40, 0x22, 0xb7, 0x15, 0x69, 0xdb, 0xe0, - 0x8e, 0x2b, 0x77, 0x15, 0xcb, 0xe8, 0x9e, 0x1c, 0x41, 0x8a, 0x91, 0x30, 0x57, 0x7e, 0x09, 0x6e, - 0x5b, 0x3a, 0x83, 0xda, 0x33, 0x0c, 0x06, 0x9f, 0xff, 0x5e, 0xf1, 0x00, 0xa4, 0xe5, 0xee, 0x82, - 0xa0, 0x1c, 0xa0, 0x68, 0xa5, 0x20, 0x94, 0xd3, 0xe8, 0x95, 0x70, 0x88, 0xb2, 0x36, 0x6a, 0x55, - 0x6a, 0xeb, 0x12, 0x14, 0x20, 0x7a, 0xb5, 0x01, 0x98, 0xd1, 0xc7, 0x60, 0x36, 0x9b, 0x1d, 0x39, - 0x2f, 0x3e, 0x10, 0x05, 0xd4, 0x40, 0x7d, 0x9e, 0x8e, 0x65, 0xf4, 0xc7, 0xff, 0x05, 0x95, 0x6f, - 0x12, 0xa8, 0x7e, 0xc7, 0xc0, 0xa0, 0x36, 0x12, 0x79, 0x75, 0x50, 0x3f, 0x0c, 0x48, 0x90, 0x52, - 0x79, 0x60, 0x60, 0x26, 0x20, 0xfe, 0xc2, 0xf6, 0x38, 0x93, 0x40, 0x71, 0xdb, 0xe2, 0x63, 0x45, - 0x97, 0xb0, 0x6d, 0x64, 0x86, 0x22, 0x09, 0x6d, 0x34, 0xe6, 0x04, 0x04, 0xe1, 0x01, 0x28, 0x40, - 0x56, 0x17, 0x2c, 0xc6, 0x3e, 0x08, 0x89, 0xaa, 0xc7, 0xf8, 0x5c, 0x51, 0x20, 0xac, 0x21, 0x36, - 0x2b, 0x6c, 0x56, 0x87, 0x70, 0xbf, 0x1f, 0xfc, 0x31, 0x52, 0x23, 0x59, 0x28, 0x81, 0xd5, 0x5d, - 0x55, 0x1f, 0xfa, 0x12, 0xcf, 0xae, 0x52, 0x74, 0x67, 0xfa, 0x2d, 0xbe, 0xad, 0x7d, 0x7b, 0xea, - 0xd5, 0xd7, 0x14, 0xdd, 0x6b, 0xea, 0xf7, 0xd1, 0x22, 0xbc, 0x40, 0x2b, 0xce, 0x9b, 0xa6, 0x7e, - 0xf6, 0xb8, 0xc0, 0x72, 0xcf, 0xf0, 0x46, 0x5e, 0x56, 0x5e, 0x24, 0x12, 0xd0, 0x33, 0x21, 0x1e, - 0x1d, 0xbf, 0x37, 0x7f, 0x82, 0x5a, 0xe8, 0x94, 0x8c, 0x6c, 0xf8, 0x22, 0xd2, 0xa5, 0x87, 0x88, - 0x1c, 0x68, 0x85, 0x83, 0x73, 0x96, 0x2b, 0x5e, 0x17, 0x9b, 0x1b, 0xe3, 0xf8, 0x80, 0x46, 0x57, - 0xdb, 0x8b, 0xe0, 0xb2, 0xc1, 0xf1, 0xb7, 0xf8, 0xc2, 0x62, 0x02, 0x96, 0x04, 0x9e, 0xc0, 0x69, - 0xa3, 0x8f, 0x88, 0x0a, 0x14, 0x39, 0xc7, 0x22, 0xb9, 0x14, 0xcb, 0x0e, 0xbb, 0x4e, 0x8e, 0xd1, - 0x34, 0x63, 0x95, 0x26, 0xd4, 0x23, 0x44, 0x3b, 0xea, 0x86, 0x0b, 0x18, 0x95, 0x77, 0x4f, 0xbe, - 0x15, 0xd2, 0x8d, 0x81, 0xba, 0x91, 0x08, 0xef, 0xee, 0x2c, 0xdd, 0x7f, 0x88, 0x45, 0xf7, 0x89, - 0x21, 0x8a, 0x00, 0x01, 0x56, 0x6f, 0xc4, 0x82, 0x33, 0x92, 0x4f, 0xff, 0xc4, 0x02, 0x82, 0x2a, - 0x7b, 0xb8, 0x97, 0x1a, 0xc7, 0x7c, 0x10, 0x95, 0xdf, 0x1a, 0x67, 0xf1, 0x00, 0x9a, 0xf7, 0xbb, - 0xef, 0xe2, 0x41, 0x25, 0x36, 0x06, 0xe8, 0xbb, 0xe0, 0xbb, 0x6a, 0xfc, 0x6c, 0x55, 0xa5, 0x5c, - 0x42, 0x33, 0x3e, 0x0a, 0xe2, 0xbd, 0xa6, 0x08, 0xa8, 0x97, 0x92, 0x0d, 0x50, 0x88, 0xbf, 0x12, - 0x1a, 0x2e, 0x6d, 0xaf, 0xba, 0xbf, 0x88, 0x05, 0x75, 0x99, 0x60, 0x41, 0xd3, 0xe0, 0x82, 0x68, - 0x50, 0x36, 0x19, 0x46, 0x5a, 0xb1, 0xf7, 0xc2, 0x9d, 0x10, 0xf0, 0xd0, 0x20, 0xc1, 0x17, 0x3a, - 0x91, 0xd4, 0xe1, 0x90, 0x9d, 0x2a, 0x70, 0x19, 0xcc, 0x7d, 0x15, 0x18, 0x81, 0x04, 0xa4, 0xc1, - 0x34, 0xc1, 0xf8, 0xb2, 0x9b, 0x0c, 0x00, 0x01, 0x6d, 0x40, 0x81, 0x10, 0x00, 0x04, 0x83, 0xc6, - 0x0c, 0xc8, 0xfb, 0xc4, 0x89, 0x05, 0x44, 0xbb, 0xdd, 0x82, 0x67, 0x94, 0x40, 0x59, 0xa7, 0x55, - 0xbb, 0xc4, 0x82, 0xaa, 0x57, 0xc6, 0xc4, 0x26, 0xe8, 0x64, 0x7f, 0xdf, 0x05, 0x42, 0xa5, 0x49, - 0x9a, 0x90, 0x10, 0x05, 0x7d, 0xd2, 0xef, 0x9c, 0xa3, 0x11, 0x53, 0x6d, 0xc7, 0x71, 0xfe, 0x8f, - 0x0c, 0xfa, 0xe5, 0xf5, 0xd4, 0x9d, 0x12, 0xbe, 0xbd, 0x2f, 0x57, 0xfa, 0xea, 0x2f, 0x8a, 0x33, - 0xbd, 0xcb, 0x43, 0x96, 0x07, 0x2c, 0xbf, 0xf1, 0x21, 0x62, 0xa3, 0x93, 0xe0, 0x12, 0x5b, 0xcb, - 0xa6, 0x6f, 0xf8, 0x91, 0x01, 0x42, 0xa2, 0x60, 0x8c, 0x08, 0x06, 0x9b, 0x06, 0x55, 0x09, 0x63, - 0x24, 0x4a, 0x90, 0xb1, 0xfb, 0x6a, 0x32, 0x34, 0x16, 0x91, 0x18, 0xcc, 0x01, 0x1e, 0x38, 0xf8, - 0x90, 0x49, 0x6c, 0xb3, 0x40, 0x70, 0x8c, 0xce, 0x1c, 0x48, 0x25, 0x98, 0x9d, 0xaa, 0x0d, 0x1a, - 0xb6, 0x8e, 0xf1, 0x22, 0x41, 0x55, 0x0d, 0xd6, 0x78, 0xac, 0x69, 0x47, 0x44, 0xc7, 0x9c, 0x86, - 0x1f, 0xc1, 0x48, 0xa1, 0x0f, 0x3f, 0x6b, 0x0d, 0xe5, 0x62, 0xbf, 0x10, 0x65, 0xf1, 0xc1, 0xb5, - 0x5e, 0x24, 0x28, 0x2c, 0x3b, 0x2a, 0xf3, 0xb8, 0xe3, 0xac, 0xc2, 0x06, 0x0a, 0x37, 0xf5, 0xe0, - 0x20, 0xb6, 0xaa, 0xb0, 0x99, 0xd3, 0x70, 0x8f, 0xb0, 0xd2, 0x32, 0x59, 0xa6, 0x0f, 0x05, 0x96, - 0x10, 0xf8, 0xc2, 0x32, 0x88, 0xce, 0x84, 0xe8, 0xa0, 0x2e, 0x01, 0x52, 0x7c, 0xff, 0x04, 0x5b, - 0x2b, 0x30, 0x62, 0x8e, 0x3c, 0x4c, 0x29, 0x1e, 0x20, 0xcc, 0x8b, 0xac, 0x68, 0x10, 0x19, 0x71, - 0xc4, 0x0f, 0xba, 0x07, 0xd8, 0x36, 0x33, 0xf7, 0xc1, 0x1e, 0x80, 0x9c, 0x83, 0x06, 0x7f, 0x85, - 0x28, 0x60, 0xed, 0xc8, 0xa2, 0x90, 0x72, 0xe0, 0xcb, 0xe8, 0x43, 0x61, 0x0b, 0x86, 0xb1, 0x08, - 0xc7, 0x74, 0xf8, 0x6b, 0xa5, 0x5f, 0xc2, 0x52, 0x8d, 0xa4, 0xc2, 0x62, 0x86, 0xc0, 0x6b, 0xc0, - 0xb9, 0xe6, 0xb1, 0x30, 0xa6, 0x2b, 0xbc, 0x4f, 0x04, 0x01, 0xd8, 0x1b, 0xa0, 0x6a, 0x36, 0x99, - 0xad, 0xec, 0x57, 0x7e, 0x26, 0x0a, 0x8a, 0x52, 0x0a, 0x22, 0x8c, 0x79, 0xd4, 0xdd, 0x3a, 0x6d, - 0xa7, 0x1c, 0x4c, 0x12, 0xe3, 0x66, 0xbd, 0xe3, 0x13, 0xb7, 0x2d, 0xf0, 0x47, 0xd5, 0xce, 0x8f, - 0xf5, 0x7f, 0x84, 0x84, 0x0f, 0x99, 0x7b, 0xbb, 0xbf, 0xc2, 0x85, 0x74, 0x09, 0x82, 0x1c, 0x00, - 0x02, 0x38, 0x60, 0x4f, 0xc1, 0x9d, 0xc3, 0x14, 0x9e, 0xc3, 0x1f, 0xb3, 0x9b, 0xed, 0xe2, 0x41, - 0x65, 0x20, 0xcc, 0xa5, 0xf0, 0x89, 0x8b, 0x0f, 0xe8, 0x13, 0x31, 0xe3, 0x78, 0xf8, 0xa8, 0x77, - 0x3e, 0x0a, 0xac, 0x20, 0xce, 0x1d, 0x82, 0x06, 0xc0, 0x40, 0x1a, 0x16, 0x45, 0x73, 0xb2, 0xce, - 0x1b, 0xea, 0x74, 0xf8, 0x28, 0x13, 0x9d, 0x43, 0x8f, 0xab, 0x88, 0x26, 0xec, 0x33, 0x5d, 0x84, - 0x69, 0x7c, 0x48, 0x50, 0xc6, 0xeb, 0xbd, 0xee, 0x30, 0xf3, 0xc0, 0x03, 0x8d, 0x0a, 0xc2, 0x40, - 0x78, 0x61, 0x6c, 0x14, 0x68, 0x61, 0xf5, 0x1c, 0x6f, 0xa2, 0xc5, 0xe2, 0x01, 0x39, 0x1e, 0xf1, - 0x58, 0xac, 0x56, 0x2b, 0xbf, 0xc4, 0xc5, 0xd5, 0x45, 0xc7, 0x3c, 0xdf, 0x89, 0xff, 0x0f, 0x8a, - 0x43, 0x24, 0x58, 0x15, 0x1d, 0xe6, 0x20, 0xa4, 0x37, 0x7a, 0x8d, 0xcc, 0x4f, 0x25, 0x32, 0x69, - 0xa9, 0xfe, 0x08, 0xcb, 0x0a, 0xd3, 0x16, 0xe3, 0xfd, 0x5a, 0x5e, 0xb8, 0x5f, 0x45, 0x2a, 0xab, - 0x82, 0x2b, 0xd5, 0x5f, 0xe7, 0xaa, 0x49, 0x34, 0xd7, 0xfa, 0xbf, 0xd4, 0xe2, 0xbe, 0xa4, 0x4a, - 0xea, 0xff, 0x56, 0x7c, 0x12, 0x59, 0xb3, 0x46, 0xaf, 0x5d, 0x1b, 0x6f, 0x8c, 0x22, 0x7a, 0x79, - 0xe6, 0xcb, 0x85, 0x90, 0x54, 0x06, 0xac, 0x4e, 0x38, 0x40, 0x67, 0x97, 0xf8, 0x48, 0x48, 0xba, - 0x8b, 0xdc, 0x8a, 0x2b, 0xaf, 0x13, 0x04, 0x3d, 0x0d, 0x49, 0xfc, 0xf1, 0x00, 0x9c, 0xa4, 0x5a, - 0xb7, 0x94, 0x40, 0x41, 0xf0, 0x81, 0x03, 0xfc, 0x70, 0xff, 0xf1, 0x00, 0x86, 0x68, 0x96, 0x0c, - 0x99, 0x32, 0x0f, 0xf4, 0x4e, 0xf8, 0x22, 0x23, 0xa4, 0xcd, 0xfb, 0xc4, 0x04, 0x69, 0x4a, 0x41, - 0x40, 0xdf, 0x4e, 0xad, 0xa7, 0xc4, 0x02, 0x63, 0xb9, 0xbd, 0x50, 0xe9, 0xa6, 0xff, 0x04, 0x27, - 0xc6, 0x9f, 0x34, 0x90, 0x05, 0xf0, 0x57, 0x20, 0xd4, 0xea, 0xa7, 0x52, 0x22, 0xa5, 0xb6, 0x29, - 0x0e, 0xa1, 0xe0, 0x35, 0x8e, 0xbe, 0x55, 0xc6, 0x0b, 0x7d, 0x19, 0xf8, 0x98, 0x21, 0x96, 0xfd, - 0xcf, 0x82, 0x2b, 0xa5, 0xbf, 0x11, 0x45, 0xff, 0xc1, 0x4e, 0xa7, 0x0c, 0xc1, 0xa1, 0x2b, 0x56, - 0xe0, 0xab, 0xa4, 0x50, 0x11, 0xd7, 0xf0, 0x48, 0x44, 0x3b, 0x11, 0x3f, 0x17, 0xaf, 0x04, 0x59, - 0xdb, 0x42, 0x4b, 0xe2, 0x02, 0x46, 0x61, 0x51, 0x3d, 0xef, 0xe0, 0x98, 0x48, 0xfe, 0x50, 0xf2, - 0x10, 0xaa, 0xe1, 0x88, 0x6b, 0xf5, 0xf5, 0x8e, 0x7c, 0x21, 0x60, 0x4c, 0x04, 0x15, 0xe1, 0xd0, - 0xa4, 0x77, 0x8c, 0x18, 0x66, 0x11, 0x51, 0x11, 0x3d, 0x53, 0xd1, 0x78, 0x52, 0x79, 0x86, 0xa0, - 0xa0, 0x4e, 0xc2, 0x99, 0x59, 0x1c, 0x6c, 0xce, 0xa9, 0x90, 0xdd, 0x4d, 0xae, 0xd0, 0xfb, 0x54, - 0xce, 0x7d, 0x8c, 0xff, 0x05, 0xb1, 0x58, 0x96, 0x8f, 0x77, 0x92, 0x06, 0xf3, 0x9f, 0x05, 0x5c, - 0x7b, 0xca, 0xe8, 0x70, 0x7c, 0xd4, 0x39, 0x74, 0x01, 0xd8, 0x6e, 0xa7, 0xe2, 0x62, 0x28, 0x0f, - 0x2b, 0x13, 0xde, 0xcf, 0xe0, 0xac, 0xac, 0x0a, 0xe9, 0xb0, 0x52, 0xf6, 0x36, 0x55, 0x3e, 0x9e, - 0xf1, 0x20, 0xb2, 0x3c, 0xd1, 0xc6, 0xd5, 0xd0, 0x31, 0xed, 0x18, 0x87, 0x4e, 0x14, 0x4a, 0x1d, - 0x65, 0x2f, 0x82, 0x2a, 0xbe, 0x54, 0xae, 0x34, 0x60, 0x59, 0x57, 0xf6, 0x18, 0xad, 0x38, 0x1f, - 0x98, 0x83, 0x06, 0xc6, 0x0f, 0x13, 0x9f, 0x44, 0x95, 0x41, 0x2e, 0xe4, 0x7b, 0x05, 0xc1, 0x28, - 0x47, 0x04, 0x54, 0xc6, 0xd1, 0x42, 0xf4, 0x06, 0x5f, 0xea, 0xee, 0xda, 0xe8, 0xfd, 0x2f, 0x5c, - 0xbe, 0x89, 0x15, 0x75, 0x7f, 0xa2, 0xe2, 0xf9, 0xaf, 0xab, 0xef, 0x55, 0xfa, 0xca, 0x4e, 0xae, - 0xae, 0xbd, 0xf1, 0xe3, 0x32, 0xe2, 0xde, 0xe7, 0x20, 0xdd, 0xbf, 0x09, 0x94, 0x9d, 0x18, 0x3d, - 0x64, 0x60, 0x9c, 0xbe, 0xeb, 0x85, 0x04, 0xd6, 0x61, 0x82, 0xcc, 0x97, 0x30, 0x08, 0x7c, 0x58, - 0x18, 0x06, 0xf0, 0xee, 0x9b, 0x04, 0x41, 0x22, 0xde, 0xff, 0x45, 0x1d, 0xbe, 0xe2, 0x63, 0x04, - 0x4f, 0x08, 0x41, 0x2f, 0xf0, 0x46, 0x67, 0x15, 0xbb, 0xbf, 0xc2, 0x25, 0x88, 0xa8, 0x32, 0xb9, - 0xa9, 0xc2, 0x2f, 0x63, 0x63, 0x3c, 0x2f, 0xc2, 0x22, 0x06, 0xa7, 0x6b, 0x8d, 0x06, 0xee, 0xee, - 0x84, 0xf7, 0xf0, 0x4c, 0x25, 0x84, 0x86, 0x45, 0xfd, 0x35, 0xe7, 0x38, 0x98, 0x52, 0x80, 0x2f, - 0x57, 0x71, 0xda, 0x74, 0xaf, 0x9c, 0x04, 0x21, 0xed, 0xa0, 0xef, 0xfa, 0xb1, 0xc4, 0x88, 0x19, - 0x60, 0x98, 0xce, 0xcd, 0x43, 0x2d, 0x0f, 0x18, 0x38, 0xda, 0x6b, 0x26, 0x34, 0xce, 0xf7, 0x7a, - 0x0b, 0x9c, 0x40, 0x8f, 0x12, 0x0b, 0xae, 0xbb, 0x02, 0x64, 0xf1, 0xc1, 0xdf, 0x04, 0x3d, 0x58, - 0xfb, 0x88, 0x12, 0x14, 0x24, 0xaa, 0x89, 0xb0, 0xf6, 0x39, 0xe8, 0x68, 0xdf, 0x77, 0xfd, 0xf5, - 0xef, 0x10, 0x14, 0xbb, 0xbb, 0xdc, 0xbc, 0xf7, 0xa4, 0xe3, 0x34, 0xbb, 0xb4, 0x1b, 0x77, 0xfb, - 0x9d, 0x45, 0xd8, 0xaf, 0xc1, 0x59, 0x50, 0x23, 0x2b, 0x10, 0xe4, 0x43, 0x17, 0x63, 0x80, 0x23, - 0x88, 0x16, 0x4c, 0x0c, 0xea, 0x49, 0x1c, 0x3b, 0xe0, 0xa6, 0x16, 0xde, 0xa9, 0x58, 0xc4, 0xea, - 0xa2, 0xf5, 0x43, 0xba, 0xfb, 0x83, 0xe0, 0xa4, 0xad, 0x23, 0x09, 0xf5, 0x50, 0x3f, 0x17, 0x4a, - 0x3e, 0x41, 0xd6, 0xa1, 0x44, 0x43, 0x01, 0x9e, 0x31, 0xf1, 0x00, 0x8c, 0x89, 0x9d, 0x4d, 0xb7, - 0xf8, 0x2e, 0x2d, 0x56, 0x86, 0x30, 0x31, 0x18, 0x54, 0x1e, 0x5c, 0x4c, 0x16, 0x13, 0x47, 0x21, - 0xd8, 0x07, 0x19, 0x1b, 0xf1, 0x80, 0x01, 0xf7, 0x06, 0x05, 0x8f, 0xcf, 0x8e, 0xb0, 0x09, 0x84, - 0x2d, 0x1b, 0xa4, 0x8f, 0x26, 0x11, 0xce, 0x62, 0x97, 0x89, 0x12, 0x0a, 0xaf, 0x68, 0x80, 0xbd, - 0x68, 0x79, 0x05, 0x1d, 0x2f, 0x12, 0x24, 0x61, 0x4c, 0xde, 0x03, 0x54, 0x27, 0xb2, 0x6e, 0xc5, - 0x33, 0x4d, 0x93, 0x29, 0x33, 0x00, 0x4d, 0xf8, 0x22, 0xae, 0xb9, 0x7c, 0x11, 0xf7, 0x67, 0x6f, - 0x12, 0x0b, 0x06, 0x17, 0x63, 0x2a, 0x43, 0x61, 0x55, 0x4d, 0xa3, 0x61, 0xf3, 0x8b, 0x48, 0xe2, - 0x3d, 0xf2, 0xc1, 0xd3, 0x82, 0x4a, 0xb3, 0x16, 0x4c, 0x20, 0x3e, 0x8f, 0x2f, 0xa9, 0x93, 0xea, - 0xef, 0xa9, 0x13, 0xeb, 0xdf, 0x5e, 0xfa, 0xd5, 0x70, 0x47, 0x48, 0xb8, 0x72, 0x35, 0x75, 0xf3, - 0xf5, 0xf6, 0x9a, 0x49, 0x2f, 0x58, 0xa7, 0xeb, 0xdf, 0x04, 0x02, 0xa5, 0x48, 0x5f, 0x77, 0xbd, - 0x86, 0x01, 0x58, 0x0b, 0xf0, 0x01, 0x14, 0x5f, 0x41, 0x1d, 0x65, 0x51, 0xc4, 0x5f, 0xf0, 0xec, - 0x48, 0xc0, 0x1a, 0xea, 0x70, 0xc2, 0x65, 0x55, 0x57, 0xeb, 0xfa, 0x9c, 0xa3, 0x28, 0x9d, 0x3f, - 0xf8, 0x2b, 0x2d, 0x36, 0xeb, 0x17, 0x55, 0xae, 0xbe, 0x28, 0xa3, 0xa0, 0x8b, 0x15, 0x06, 0x33, - 0x08, 0xd6, 0x99, 0x59, 0xf5, 0xaf, 0xa3, 0xff, 0xe0, 0x86, 0xa5, 0x18, 0x24, 0x35, 0x00, 0xba, - 0xb8, 0x26, 0x22, 0x5b, 0xcf, 0x5b, 0x66, 0xee, 0x7c, 0x12, 0xce, 0x41, 0x69, 0x3d, 0x00, 0x48, - 0x41, 0x58, 0x28, 0xff, 0x66, 0xdb, 0x42, 0x2b, 0x3e, 0x0a, 0x3b, 0xba, 0x1d, 0xd3, 0xff, 0x13, - 0x0a, 0x16, 0x53, 0x2d, 0xd8, 0x2d, 0x8c, 0x6d, 0x8c, 0xe2, 0xb1, 0x93, 0x40, 0xac, 0xb7, 0x9b, - 0xbf, 0xc7, 0x1e, 0x20, 0x48, 0x2e, 0xd0, 0x45, 0x08, 0x57, 0xa2, 0x0e, 0x52, 0xb6, 0x29, 0xe5, - 0xf1, 0xe5, 0x6e, 0xd2, 0xd1, 0x91, 0xde, 0x5c, 0x19, 0x19, 0x3c, 0x17, 0x49, 0xdd, 0x53, 0x21, - 0x15, 0xb5, 0x3f, 0xc4, 0xee, 0x86, 0x72, 0x0e, 0xec, 0xfc, 0x16, 0x5a, 0x60, 0xcc, 0xa1, 0x9c, - 0x84, 0xf6, 0xd6, 0x6a, 0x56, 0xf1, 0x08, 0xdd, 0xf5, 0x7f, 0x12, 0x30, 0xea, 0x30, 0x00, 0x38, - 0xba, 0xee, 0x2e, 0x41, 0xe4, 0x86, 0x38, 0xe2, 0x1a, 0x8c, 0x0d, 0x60, 0xb8, 0x28, 0x6e, 0xa4, - 0x09, 0x8a, 0x20, 0xff, 0x05, 0xdd, 0xdd, 0x89, 0x6f, 0x15, 0x9a, 0xee, 0x3c, 0x28, 0x5c, 0x13, - 0xb4, 0x01, 0x01, 0x23, 0xef, 0x3d, 0x62, 0x82, 0x29, 0xf2, 0x19, 0x04, 0x9a, 0x1e, 0x05, 0x90, - 0x20, 0x35, 0x60, 0x43, 0x42, 0x72, 0xa3, 0x27, 0x15, 0xdd, 0xee, 0x2c, 0x21, 0x82, 0x75, 0xeb, - 0xc7, 0x7c, 0x48, 0x4a, 0x40, 0x2b, 0x19, 0xd4, 0xab, 0x09, 0xb5, 0x49, 0x2f, 0x04, 0x31, 0xd0, - 0xe0, 0x2e, 0x07, 0x40, 0x70, 0x02, 0xdc, 0x44, 0x11, 0x59, 0x1e, 0x3b, 0xbe, 0x0a, 0x35, 0x93, - 0x2c, 0x19, 0x18, 0x56, 0x29, 0x23, 0xfc, 0x21, 0x1c, 0x71, 0x50, 0x20, 0xf6, 0xe0, 0x94, 0x60, - 0x96, 0xcb, 0x62, 0x54, 0x8c, 0x77, 0x86, 0xca, 0x00, 0x03, 0x88, 0x10, 0x14, 0xb7, 0x01, 0xb6, - 0x50, 0x84, 0x74, 0xb4, 0x33, 0xe5, 0x43, 0x54, 0x0c, 0x9b, 0x86, 0x29, 0x37, 0x36, 0x1d, 0x70, - 0x45, 0x61, 0x48, 0x47, 0x33, 0x78, 0x90, 0x99, 0x38, 0xf5, 0xca, 0x48, 0x6c, 0x6d, 0xb0, 0xd6, - 0x24, 0x15, 0x4c, 0xc3, 0x88, 0x39, 0x71, 0xe1, 0x80, 0x8a, 0xcb, 0x64, 0x87, 0x51, 0xc7, 0x9f, - 0x14, 0x32, 0xe9, 0xd5, 0x3b, 0x35, 0xd0, 0xb8, 0xbe, 0xb9, 0xcb, 0xeb, 0x5f, 0x44, 0x8a, 0x7e, - 0x8a, 0xd2, 0x73, 0xd5, 0xa6, 0x92, 0x4b, 0xd7, 0x34, 0xac, 0x07, 0xc7, 0x69, 0x10, 0x34, 0x30, - 0x31, 0x6f, 0x1c, 0x23, 0x2f, 0x3f, 0x7f, 0x9a, 0x0e, 0x48, 0xd4, 0xc0, 0xde, 0x7c, 0xbf, 0x04, - 0xb5, 0x55, 0x55, 0x55, 0x5f, 0xf8, 0x90, 0x5d, 0xa5, 0x77, 0x77, 0x7e, 0xf8, 0x21, 0x12, 0x78, - 0xa6, 0x85, 0xb5, 0x70, 0x46, 0x20, 0x7a, 0xf3, 0x63, 0x47, 0x4b, 0xff, 0x43, 0x53, 0xaf, 0x04, - 0x44, 0x63, 0x8c, 0xf3, 0x04, 0x3e, 0xf8, 0x24, 0xa6, 0xdd, 0xb6, 0xf8, 0x23, 0xb7, 0x6d, 0x3f, - 0xfc, 0x29, 0x9e, 0x8e, 0xd7, 0x14, 0x10, 0x08, 0x99, 0x8e, 0x96, 0x38, 0x31, 0x6b, 0x4c, 0xea, - 0x53, 0x9c, 0x5e, 0x20, 0x11, 0x63, 0x95, 0x0a, 0xe6, 0xde, 0x21, 0x7e, 0x78, 0x80, 0x4e, 0x45, - 0xaa, 0xaa, 0xff, 0xf8, 0x28, 0xcf, 0x47, 0xb4, 0x3d, 0x5f, 0xe3, 0x0e, 0x1a, 0x40, 0x8a, 0xdb, - 0x07, 0x86, 0x09, 0x9d, 0x0e, 0x02, 0xbe, 0x6c, 0x36, 0x46, 0xb0, 0x6c, 0x2f, 0xc4, 0x88, 0x46, - 0xee, 0x26, 0x0a, 0x2e, 0x2b, 0x3f, 0xb7, 0xa6, 0x81, 0xc5, 0xf1, 0x82, 0x64, 0x38, 0x22, 0x20, - 0x27, 0xf1, 0xa4, 0x28, 0x36, 0x87, 0x07, 0x83, 0x49, 0x95, 0xb2, 0x42, 0x12, 0xe3, 0x73, 0xe3, - 0xe1, 0x4a, 0x0c, 0x71, 0xb0, 0xa1, 0x06, 0xd5, 0x11, 0x1a, 0xf6, 0x9b, 0xa1, 0x35, 0x44, 0x0d, - 0xb8, 0x5b, 0xcb, 0x09, 0x44, 0x09, 0x53, 0xe0, 0x8f, 0x7b, 0xe7, 0xf8, 0x24, 0xbe, 0xe5, 0x4f, - 0x12, 0x08, 0xa3, 0xa3, 0x0a, 0x9f, 0xef, 0x10, 0x6b, 0xdf, 0xe0, 0xa3, 0x30, 0x60, 0x32, 0x04, - 0x21, 0x44, 0xc9, 0x4e, 0x85, 0xb2, 0xda, 0x2d, 0xf1, 0x06, 0xc6, 0x85, 0x42, 0xc0, 0x75, 0x78, - 0xc9, 0x31, 0x36, 0x11, 0x03, 0x01, 0x94, 0x82, 0xdc, 0x5b, 0xa0, 0x13, 0x67, 0x53, 0x7f, 0xc2, - 0x25, 0x2b, 0x15, 0x90, 0xfd, 0x65, 0x82, 0x07, 0x2c, 0xb4, 0x02, 0x1f, 0x79, 0x78, 0x88, 0x2e, - 0x26, 0x4d, 0xab, 0x79, 0xc1, 0xf0, 0x58, 0x43, 0xa1, 0x79, 0x8c, 0x64, 0xed, 0x8c, 0xca, 0xd8, - 0x38, 0x4b, 0xc6, 0x09, 0x81, 0xc7, 0x7c, 0x11, 0x11, 0xdc, 0xfe, 0xfb, 0xc4, 0x02, 0x23, 0xbb, - 0xb8, 0xae, 0x2a, 0xe8, 0x47, 0x7c, 0x3b, 0x00, 0xce, 0x9b, 0x65, 0x34, 0x20, 0xb4, 0xa2, 0xcb, - 0xe0, 0xfc, 0xbc, 0x1e, 0xc2, 0x0d, 0xa0, 0x75, 0xf1, 0x8b, 0x47, 0x50, 0x70, 0x98, 0xff, 0xd1, - 0xe3, 0x2b, 0x98, 0xf5, 0x55, 0xf0, 0x48, 0x6a, 0xab, 0xca, 0xfa, 0xd6, 0x00, 0x00, 0x00, 0x01, - 0x41, 0x9a, 0x29, 0x14, 0xb0, 0x32, 0x80, 0xd1, 0xd0, 0xd8, 0xa3, 0x79, 0x8c, 0xea, 0xea, 0x10, - 0x84, 0x04, 0x02, 0xe8, 0xad, 0xc5, 0x6e, 0xd8, 0x2a, 0xa1, 0x87, 0x55, 0x76, 0xc1, 0x58, 0x31, - 0x00, 0xd1, 0xa8, 0xfc, 0x40, 0x60, 0x10, 0x19, 0xc5, 0x6e, 0xf5, 0xd7, 0x86, 0x91, 0x41, 0x50, - 0x28, 0x29, 0x06, 0xd8, 0x0f, 0x74, 0xe3, 0xa1, 0x19, 0x1c, 0x23, 0xb4, 0x3c, 0x06, 0xf3, 0xfd, - 0xb2, 0x7f, 0x04, 0x83, 0x4f, 0x43, 0xd3, 0xa8, 0x34, 0xc4, 0x02, 0x71, 0x11, 0x0b, 0x75, 0x1a, - 0x71, 0x9b, 0x8e, 0xc6, 0x9b, 0xe0, 0x31, 0xf8, 0x50, 0x66, 0xff, 0xb6, 0xd3, 0x3c, 0x06, 0xf2, - 0x18, 0x08, 0x3a, 0x78, 0x7b, 0x49, 0x33, 0x02, 0x6c, 0x7b, 0x88, 0x60, 0x5b, 0xf7, 0x10, 0x10, - 0x04, 0xd0, 0x3b, 0x4b, 0xa0, 0x35, 0x2e, 0xb1, 0x3a, 0x4b, 0x8f, 0x06, 0x91, 0x21, 0x14, 0x17, - 0x1c, 0x01, 0xbc, 0x48, 0x50, 0x28, 0x12, 0x29, 0x54, 0xf1, 0x77, 0x45, 0x67, 0xef, 0x69, 0x9c, - 0x60, 0xe3, 0x1a, 0x4f, 0x0b, 0x67, 0x9e, 0x2b, 0x6a, 0x1f, 0x7c, 0x65, 0xd3, 0x02, 0xa0, 0x74, - 0x54, 0xee, 0xef, 0x2c, 0x62, 0x5e, 0x58, 0x37, 0xc2, 0xf7, 0x2f, 0x43, 0x6e, 0x41, 0x07, 0x47, - 0x22, 0x47, 0xf0, 0x49, 0x17, 0x17, 0x17, 0x17, 0x1c, 0x1b, 0xe1, 0xd0, 0xa1, 0xd9, 0x53, 0xb3, - 0xd2, 0x1f, 0x73, 0x25, 0xa3, 0x3f, 0xd9, 0x13, 0x6a, 0x2d, 0xb4, 0x90, 0x92, 0x1f, 0xf0, 0xa4, - 0xb1, 0xbf, 0x8a, 0xed, 0x71, 0x9d, 0xb8, 0x30, 0x12, 0xd8, 0xec, 0x97, 0x8a, 0x35, 0x67, 0x15, - 0x91, 0xb6, 0xcc, 0x1f, 0x71, 0x02, 0x10, 0xf4, 0xf3, 0x43, 0x22, 0x01, 0x01, 0x85, 0xfe, 0x02, - 0x1e, 0x2e, 0xe7, 0xe8, 0xa9, 0x4c, 0x2d, 0xe5, 0xe3, 0x5c, 0x09, 0xfd, 0x55, 0x80, 0x9e, 0x87, - 0xe1, 0x73, 0x51, 0x2d, 0xd0, 0x79, 0xc0, 0x3f, 0xd1, 0xcf, 0xf8, 0x80, 0x50, 0x23, 0xf2, 0xcc, - 0x0d, 0xa7, 0xc4, 0x82, 0x20, 0x36, 0xfc, 0x8f, 0xe2, 0x01, 0x44, 0xb0, 0x62, 0x8e, 0xdc, 0x50, - 0x62, 0x01, 0x0c, 0x05, 0xef, 0xbc, 0x40, 0xb8, 0xae, 0x2b, 0x12, 0xc1, 0xe7, 0x39, 0x0c, 0x74, - 0x15, 0x8a, 0xba, 0x92, 0xfa, 0xc3, 0x1e, 0xa9, 0x10, 0xae, 0xa9, 0x97, 0xaa, 0x64, 0xba, 0xc5, - 0xc4, 0x51, 0x22, 0xf1, 0x01, 0x41, 0xc5, 0xd8, 0x85, 0x82, 0x7b, 0x4c, 0xa9, 0x2e, 0x28, 0xc4, - 0x8d, 0x04, 0xb8, 0x5b, 0x77, 0x94, 0x40, 0x71, 0x3e, 0x36, 0x1d, 0x01, 0x12, 0x05, 0xac, 0xa4, - 0x69, 0x82, 0xde, 0xee, 0x6a, 0x4c, 0xe1, 0x63, 0x50, 0x88, 0xb2, 0x0d, 0xec, 0x65, 0xf6, 0xa8, - 0xcb, 0x7d, 0x5d, 0x7f, 0xc1, 0x30, 0x97, 0x1b, 0x2c, 0x2b, 0x88, 0x16, 0x0f, 0x40, 0xa0, 0x37, - 0x3e, 0x3b, 0xf4, 0x2c, 0xa9, 0x7c, 0xc3, 0x23, 0x59, 0x1b, 0x87, 0x14, 0x59, 0xe2, 0x20, 0x90, - 0x55, 0x8e, 0x6c, 0xef, 0x88, 0x2b, 0xe6, 0x04, 0xc6, 0xa6, 0xda, 0x10, 0xb8, 0x3e, 0x03, 0x89, - 0x2f, 0x04, 0xa7, 0x59, 0x20, 0xc0, 0x63, 0x61, 0x04, 0xf8, 0xec, 0x71, 0xf8, 0x2e, 0xa0, 0x66, - 0x93, 0x4f, 0x22, 0xa2, 0xe2, 0xe2, 0xe2, 0x3a, 0x8f, 0x10, 0x0a, 0x8c, 0x2e, 0x90, 0x0f, 0xcb, - 0x22, 0xd0, 0x25, 0xa4, 0x80, 0x04, 0x84, 0x66, 0x2c, 0xcc, 0x77, 0x25, 0x2d, 0x8b, 0x48, 0x25, - 0x1c, 0x82, 0x5b, 0xc2, 0x02, 0x4a, 0x5e, 0x46, 0x4e, 0x3d, 0xbd, 0x68, 0xcd, 0x43, 0xe1, 0x9e, - 0x85, 0xe1, 0x27, 0x46, 0x61, 0xeb, 0xd3, 0xf4, 0x25, 0x2a, 0xf5, 0x4c, 0xbd, 0x7b, 0xeb, 0xde, - 0x20, 0x15, 0x11, 0xdf, 0x71, 0xb0, 0x44, 0x72, 0xe0, 0x3c, 0xf0, 0x4b, 0x87, 0x03, 0xdf, 0x88, - 0x8d, 0x10, 0x4c, 0x1a, 0x1c, 0x12, 0x09, 0x58, 0x58, 0x27, 0x80, 0x08, 0x26, 0xf5, 0x21, 0x31, - 0xf5, 0x12, 0x35, 0x23, 0x80, 0x11, 0x95, 0x90, 0x1e, 0xc1, 0x04, 0x45, 0xc9, 0xeb, 0xfe, 0x20, - 0x28, 0x43, 0xd5, 0x07, 0x80, 0x16, 0x0f, 0x58, 0x3c, 0x00, 0xc0, 0xa9, 0xe8, 0x56, 0x0e, 0x81, - 0xd1, 0x5a, 0x24, 0x00, 0x02, 0x28, 0x01, 0x8a, 0x34, 0xc4, 0xe0, 0x05, 0x31, 0x9b, 0xa2, 0x2c, - 0xc2, 0xaa, 0x36, 0xef, 0x11, 0x9f, 0x7a, 0x0a, 0x94, 0xea, 0xf2, 0x79, 0x0e, 0x7b, 0xff, 0xa1, - 0x75, 0xc3, 0x61, 0xc5, 0x6d, 0xc3, 0x8f, 0xf8, 0xe1, 0xde, 0x20, 0x2c, 0x24, 0xa8, 0xb5, 0xef, - 0x8a, 0xbc, 0x65, 0xb0, 0x84, 0x13, 0x35, 0x3e, 0x0b, 0x04, 0xa3, 0x08, 0x1a, 0xff, 0xad, 0x5c, - 0x98, 0x80, 0xb8, 0xa3, 0x5b, 0x54, 0x45, 0x6c, 0xcf, 0x9d, 0x3d, 0x15, 0x5f, 0xfc, 0x13, 0x09, - 0x15, 0x9f, 0x88, 0x7d, 0xd0, 0xd4, 0x5d, 0x26, 0x18, 0x81, 0x23, 0x44, 0xa9, 0xd4, 0x66, 0xc5, - 0x17, 0x17, 0xa5, 0x54, 0x90, 0xa6, 0x68, 0xef, 0xdd, 0x5f, 0xfc, 0x12, 0x12, 0xb3, 0xd7, 0xc7, - 0x11, 0xe2, 0x04, 0x82, 0x91, 0x91, 0x58, 0x80, 0x79, 0xe2, 0xc1, 0xe2, 0x91, 0x2d, 0x42, 0x47, - 0x3f, 0x3f, 0xa8, 0x4e, 0x8c, 0xd6, 0x3c, 0x4a, 0x0a, 0xbc, 0xbd, 0x5e, 0x10, 0xea, 0x9d, 0xbe, - 0x84, 0x3f, 0xd1, 0x5e, 0x4e, 0x8e, 0x5e, 0x49, 0xd1, 0x1c, 0x88, 0xc4, 0xf8, 0x90, 0x56, 0x39, - 0xf2, 0x74, 0x09, 0x5d, 0xcd, 0xc8, 0xa5, 0xfd, 0x72, 0x95, 0x04, 0xb8, 0x6d, 0xc0, 0x12, 0x82, - 0xcf, 0xec, 0x01, 0xa6, 0x41, 0x3b, 0x27, 0x42, 0xf0, 0xac, 0x4d, 0x32, 0xb2, 0x65, 0xab, 0x69, - 0x56, 0x5a, 0xf8, 0x8f, 0x7b, 0x02, 0x92, 0xe2, 0x25, 0x06, 0x09, 0x44, 0x7c, 0x8c, 0x15, 0xd7, - 0x60, 0x03, 0x44, 0x66, 0x81, 0x7a, 0x33, 0xea, 0xeb, 0xc4, 0x06, 0x01, 0x35, 0x99, 0xd0, 0x74, - 0xf9, 0x59, 0xd0, 0xaa, 0x74, 0x5a, 0x12, 0xf1, 0x62, 0x3f, 0x91, 0xb6, 0xa7, 0xfa, 0x08, 0xff, - 0xea, 0x57, 0xfc, 0x13, 0x8e, 0xbd, 0xcb, 0x84, 0x8a, 0x86, 0x91, 0xb8, 0x14, 0x0c, 0x3c, 0x16, - 0x99, 0x4d, 0x05, 0x92, 0xfc, 0xdc, 0x78, 0x22, 0x1e, 0x4c, 0x4a, 0xff, 0x1e, 0x0a, 0x28, 0x73, - 0x08, 0x27, 0x6e, 0x5a, 0xb0, 0x12, 0x30, 0xaf, 0x04, 0x83, 0x92, 0x0a, 0xd8, 0x9c, 0xc9, 0x37, - 0x4f, 0xf1, 0x30, 0x53, 0x08, 0x44, 0x5b, 0x30, 0x2a, 0xd0, 0xa8, 0x0b, 0x86, 0x65, 0xb5, 0x63, - 0x0b, 0x1b, 0xe0, 0xf8, 0xb7, 0xc6, 0xd2, 0x0e, 0xf8, 0xfc, 0xf8, 0x70, 0x41, 0x12, 0x13, 0x2c, - 0x65, 0xb2, 0xd8, 0x95, 0x27, 0x2e, 0x7a, 0x29, 0x12, 0xfa, 0x25, 0x57, 0x46, 0x83, 0xe0, 0x8a, - 0xee, 0xab, 0x28, 0xee, 0xb8, 0x7d, 0x09, 0x72, 0xfa, 0xb5, 0xf5, 0x70, 0x5e, 0x8c, 0xc9, 0x7a, - 0x12, 0x54, 0xbe, 0xa3, 0xb7, 0x13, 0x42, 0x22, 0xe2, 0x04, 0x02, 0x51, 0x4c, 0x3b, 0x78, 0xb9, - 0x39, 0x89, 0x1f, 0x49, 0x7f, 0x85, 0x22, 0x80, 0x13, 0xc8, 0x8b, 0x19, 0x1d, 0x14, 0x09, 0xe8, - 0xca, 0xa8, 0xf7, 0x9d, 0x66, 0x95, 0x38, 0xe3, 0xe9, 0xa8, 0x1c, 0x20, 0xe4, 0x3e, 0x9e, 0x98, - 0x0f, 0x3e, 0x17, 0x9a, 0x41, 0xfc, 0xbf, 0x79, 0x8e, 0x03, 0x94, 0x95, 0x89, 0xe3, 0x2e, 0x3b, - 0xc4, 0x84, 0x41, 0x59, 0x09, 0x8f, 0xf7, 0xd7, 0x93, 0x84, 0x95, 0xcd, 0x6e, 0x16, 0x5a, 0x90, - 0x77, 0x21, 0x4d, 0x7f, 0x85, 0xf7, 0xa7, 0x02, 0x99, 0xd7, 0x65, 0x25, 0xbe, 0x09, 0x02, 0xae, - 0xfa, 0x40, 0xf5, 0x2a, 0x2a, 0xf0, 0x58, 0x16, 0x39, 0x81, 0x6c, 0x56, 0x3e, 0xce, 0x32, 0x30, - 0x66, 0x93, 0x69, 0x1e, 0xe5, 0xe7, 0xa5, 0xe5, 0xe2, 0x41, 0x30, 0xd1, 0x20, 0xe1, 0xfb, 0xf3, - 0x6f, 0xe5, 0xf6, 0xf8, 0x28, 0xcc, 0xd3, 0x80, 0x00, 0x44, 0x43, 0x21, 0x8d, 0x8a, 0x3c, 0x32, - 0x07, 0x0f, 0xc6, 0x2a, 0xe5, 0x40, 0xd9, 0xab, 0x27, 0x89, 0xff, 0x8f, 0xf1, 0x31, 0x82, 0xb2, - 0x71, 0xec, 0xaa, 0x7e, 0x12, 0x49, 0xb8, 0x4c, 0x7a, 0xf0, 0x1f, 0x64, 0x8d, 0x0e, 0xd7, 0x29, - 0x21, 0x14, 0x79, 0x49, 0x8e, 0x37, 0x82, 0x9a, 0x19, 0xa9, 0x4d, 0x64, 0xab, 0xed, 0xc7, 0xfd, - 0xdf, 0xc4, 0xa0, 0x9c, 0x5f, 0x52, 0x37, 0xd7, 0xbe, 0x8d, 0x5f, 0x5e, 0xfa, 0xe1, 0x5d, 0x1d, - 0xd1, 0xfd, 0x1d, 0x8b, 0xe8, 0x8e, 0x44, 0xf4, 0x49, 0x9f, 0x47, 0x3a, 0x5f, 0x53, 0xa4, 0x9d, - 0x12, 0xbe, 0xa5, 0xb8, 0x90, 0x88, 0x25, 0x19, 0x92, 0xe7, 0x60, 0x7d, 0x57, 0xef, 0x85, 0x27, - 0xb0, 0x70, 0x2a, 0x0c, 0x8d, 0x4f, 0x00, 0x70, 0x90, 0x15, 0x9f, 0x8f, 0x31, 0x63, 0xed, 0x08, - 0x03, 0xa1, 0xec, 0x12, 0x82, 0xa3, 0xab, 0x1e, 0x45, 0xb2, 0x27, 0x02, 0xa7, 0x90, 0x80, 0x34, - 0x63, 0xf1, 0x82, 0x2f, 0x80, 0xcd, 0x92, 0x08, 0xe6, 0x57, 0xab, 0xd8, 0x25, 0x4d, 0x45, 0x33, - 0xf8, 0xec, 0x2c, 0x32, 0x94, 0xa4, 0x7a, 0x35, 0x08, 0x38, 0x69, 0x57, 0xa8, 0x71, 0x3c, 0xc4, - 0x41, 0x01, 0xde, 0x52, 0x0a, 0x06, 0xd9, 0xcf, 0x70, 0x3b, 0x18, 0xf3, 0x81, 0xd8, 0x7e, 0x98, - 0x2a, 0xc7, 0x4e, 0x6d, 0x36, 0xa5, 0x48, 0xbb, 0xe3, 0x7c, 0xbe, 0xdb, 0x19, 0x99, 0x6a, 0x53, - 0x85, 0x70, 0x9b, 0xe0, 0xc9, 0xb9, 0x15, 0xc6, 0x38, 0xb9, 0x8f, 0xdd, 0xb6, 0xfc, 0x24, 0x46, - 0xfa, 0x3b, 0x9d, 0xf5, 0x55, 0x13, 0x17, 0x20, 0xb0, 0xf6, 0x43, 0x84, 0x2c, 0x3e, 0x25, 0x8f, - 0xf8, 0x29, 0x16, 0x10, 0xf7, 0x20, 0x1a, 0xd5, 0x68, 0x2c, 0xcb, 0x76, 0x97, 0x0b, 0x40, 0x40, - 0xbf, 0x68, 0x9b, 0x47, 0xfd, 0xbb, 0xf8, 0x90, 0x42, 0x2d, 0x82, 0xe6, 0x5f, 0xbe, 0xb0, 0x57, - 0x46, 0xaf, 0xa3, 0x91, 0x3e, 0xb8, 0x4f, 0xd7, 0xbe, 0xaf, 0x0a, 0x75, 0xea, 0xeb, 0x14, 0x9d, - 0x10, 0xa9, 0xf5, 0x3a, 0x5f, 0x04, 0x9a, 0x09, 0x91, 0x65, 0x87, 0x13, 0x05, 0x82, 0x87, 0x10, - 0x7d, 0xc5, 0x79, 0xe8, 0x3e, 0x45, 0x4d, 0x33, 0x2f, 0xeb, 0x82, 0x3f, 0xf8, 0x80, 0xa1, 0xb3, - 0x60, 0x9e, 0x0c, 0x59, 0x22, 0xed, 0x9c, 0xc5, 0xea, 0x32, 0x19, 0x31, 0xf0, 0xf1, 0x67, 0x16, - 0x48, 0x1f, 0x69, 0x93, 0x2e, 0xf1, 0x01, 0x4b, 0xc8, 0x80, 0xe5, 0x46, 0x64, 0x55, 0x59, 0x37, - 0x16, 0x92, 0xdd, 0x85, 0xb1, 0x9e, 0x19, 0x70, 0xb2, 0xaa, 0x89, 0x38, 0xa0, 0x6f, 0x8b, 0x22, - 0xe7, 0xc2, 0x87, 0x4e, 0x88, 0x2b, 0x5c, 0x6e, 0x13, 0x0b, 0x60, 0xf3, 0xc4, 0x00, 0x94, 0x61, - 0x1d, 0xf0, 0xb1, 0x22, 0x9e, 0xe3, 0xd0, 0xa1, 0x84, 0x21, 0xd4, 0x8e, 0x68, 0x39, 0x67, 0xdf, - 0x0a, 0x49, 0xd2, 0x11, 0xee, 0xa1, 0xba, 0x85, 0x1b, 0xe5, 0x59, 0xd0, 0x00, 0x09, 0x92, 0x39, - 0x44, 0x9f, 0x50, 0x7e, 0x05, 0xea, 0x15, 0x8a, 0x47, 0x6f, 0x85, 0x2f, 0x66, 0x05, 0xa8, 0xa6, - 0x29, 0x85, 0x6a, 0x71, 0x48, 0xd9, 0xb6, 0xae, 0x18, 0x7e, 0x97, 0x18, 0xe3, 0x7c, 0x51, 0xae, - 0xf1, 0xbf, 0x37, 0x23, 0x2d, 0xf8, 0xe9, 0x72, 0x92, 0x99, 0x08, 0x27, 0x1d, 0x00, 0x5c, 0x9d, - 0x06, 0x0b, 0xae, 0x5f, 0xfc, 0x40, 0x94, 0x13, 0xaa, 0xea, 0x9e, 0x23, 0xa3, 0x8e, 0xaf, 0xa3, - 0x35, 0xf5, 0xa8, 0xde, 0xad, 0x15, 0xd4, 0xcb, 0x3e, 0xa3, 0xb7, 0xd1, 0x32, 0xbe, 0x8a, 0x9d, - 0x3c, 0x48, 0x20, 0x1c, 0x1c, 0x69, 0x12, 0x0f, 0x98, 0xb2, 0xf1, 0x02, 0xe2, 0x8c, 0x43, 0xcb, - 0x67, 0x8f, 0x1e, 0x7c, 0x63, 0xf1, 0x7a, 0xff, 0x12, 0x10, 0xa7, 0x52, 0x1d, 0x7e, 0xe2, 0x8c, - 0x51, 0x96, 0x30, 0xba, 0x28, 0x2e, 0x50, 0x00, 0x09, 0x6c, 0xb7, 0xe1, 0x42, 0x8f, 0x82, 0x11, - 0xfd, 0xec, 0x35, 0x8c, 0x4a, 0x20, 0x6d, 0x56, 0xf3, 0x43, 0x59, 0x3b, 0x10, 0xc5, 0xe4, 0x29, - 0x5c, 0xff, 0x0a, 0x12, 0x03, 0x30, 0x80, 0xd4, 0xf2, 0x91, 0x8a, 0x4e, 0x3d, 0x42, 0x06, 0xce, - 0x30, 0xbd, 0x86, 0x99, 0x99, 0x82, 0x63, 0xc8, 0xef, 0x13, 0x05, 0x32, 0xc7, 0x65, 0xb7, 0x7b, - 0xde, 0xf3, 0x27, 0xc1, 0x49, 0xc5, 0xd1, 0x4f, 0x5a, 0xef, 0x34, 0x42, 0x22, 0x0a, 0x5c, 0xc3, - 0x05, 0x71, 0xcd, 0xf0, 0x43, 0xa0, 0xea, 0xf7, 0xf1, 0x23, 0x06, 0x44, 0xf1, 0xec, 0x9c, 0xdc, - 0x24, 0xd5, 0xcc, 0xa3, 0x06, 0xd1, 0x71, 0xcc, 0x59, 0xce, 0x71, 0x20, 0x94, 0x2a, 0xa4, 0xee, - 0xd8, 0x10, 0x39, 0xe3, 0xff, 0x5d, 0x47, 0x68, 0xae, 0xae, 0x4f, 0xd6, 0xab, 0xa9, 0x8d, 0xf5, - 0x4a, 0x89, 0xce, 0x71, 0xc9, 0x53, 0x4d, 0x34, 0xfd, 0x70, 0x99, 0x12, 0x4b, 0x69, 0xa4, 0xe7, - 0xe0, 0x8c, 0x8b, 0x5b, 0x1f, 0x56, 0x3e, 0xb2, 0x9b, 0x82, 0x62, 0xa4, 0x85, 0x4e, 0x9d, 0x3a, - 0xbe, 0x3c, 0x2d, 0x10, 0xfc, 0xb1, 0xbf, 0x89, 0x70, 0xf1, 0x31, 0x06, 0xb7, 0x87, 0x7c, 0x2f, - 0x2f, 0xf0, 0xa1, 0x5f, 0x96, 0x3c, 0xf0, 0xe7, 0x1d, 0xcb, 0x62, 0x10, 0xc0, 0x44, 0x11, 0xc7, - 0x0d, 0x08, 0x23, 0xab, 0xb1, 0xe0, 0x34, 0x82, 0x0a, 0xc0, 0x56, 0xc2, 0x6c, 0x4b, 0x2e, 0x1e, - 0x01, 0x20, 0x88, 0x4c, 0x21, 0xaa, 0x63, 0x64, 0x80, 0x08, 0x7e, 0x00, 0xe6, 0x61, 0xe0, 0xaf, - 0x3e, 0x98, 0x93, 0x99, 0xce, 0x5d, 0x07, 0x71, 0x0e, 0x16, 0x36, 0x3e, 0x14, 0xab, 0x4c, 0xca, - 0xc4, 0x90, 0xc7, 0x48, 0xb8, 0x70, 0x2c, 0x10, 0x09, 0xb4, 0xe6, 0x98, 0x3f, 0x20, 0xff, 0x0d, - 0x87, 0xcc, 0x7c, 0x16, 0x1d, 0x44, 0x73, 0x6d, 0xa5, 0x86, 0x82, 0x7a, 0x8b, 0x9b, 0x09, 0xbe, - 0x35, 0xda, 0x70, 0x53, 0x7c, 0x29, 0x46, 0x6c, 0x4a, 0x21, 0x76, 0x89, 0x85, 0xf8, 0xac, 0xe1, - 0xce, 0xdd, 0xdf, 0x8e, 0xfc, 0x15, 0xcd, 0x5d, 0x55, 0x20, 0x40, 0x11, 0xd4, 0x4d, 0x48, 0x91, - 0x67, 0x1f, 0x88, 0x04, 0x44, 0x84, 0x48, 0xaa, 0x23, 0xab, 0xbf, 0xc1, 0x36, 0x22, 0xb2, 0x1b, - 0xe9, 0xa3, 0x57, 0x9d, 0xf8, 0xbd, 0xe4, 0xe8, 0x26, 0x9d, 0xfa, 0xa5, 0x3e, 0xa4, 0x4b, 0xea, - 0xe0, 0x25, 0xd1, 0x1f, 0xea, 0x91, 0x79, 0x08, 0xab, 0xfa, 0xbf, 0xd5, 0x32, 0x7d, 0x15, 0xa2, - 0xf8, 0x24, 0xda, 0x8d, 0x0c, 0x46, 0x1e, 0x09, 0xc2, 0x04, 0xb2, 0x5a, 0xb7, 0x2a, 0x27, 0x05, - 0x2f, 0xff, 0xc2, 0x84, 0x27, 0x02, 0x60, 0x48, 0xc4, 0x45, 0xf6, 0x50, 0xb2, 0x05, 0xed, 0xe0, - 0x3d, 0xef, 0xe4, 0x28, 0x7e, 0xf8, 0xcc, 0xf0, 0x09, 0x1c, 0x6a, 0x2c, 0x1d, 0xa5, 0x47, 0xda, - 0x25, 0x40, 0xca, 0xf6, 0xf4, 0x69, 0x8b, 0xe7, 0xd4, 0x4e, 0x54, 0x4e, 0xed, 0x74, 0xaf, 0x5a, - 0xb5, 0x53, 0x45, 0x88, 0x70, 0x99, 0xf8, 0xc9, 0x49, 0x77, 0xae, 0xf1, 0x21, 0x4a, 0x84, 0x2a, - 0x6f, 0xb0, 0x1a, 0xed, 0x63, 0x93, 0xc1, 0x73, 0x0f, 0x7b, 0x0d, 0x8c, 0x96, 0x3d, 0x44, 0xed, - 0xe2, 0xf9, 0x15, 0xea, 0xf9, 0x3f, 0x60, 0x50, 0x9b, 0x12, 0x3e, 0xb9, 0x75, 0xf7, 0x56, 0x65, - 0xdb, 0xdd, 0x44, 0x35, 0x4e, 0x1c, 0xb0, 0xaa, 0x7c, 0x17, 0x1c, 0x5e, 0x22, 0x2b, 0x1a, 0x06, - 0xa7, 0xe2, 0x82, 0xf9, 0x7e, 0xff, 0x18, 0x49, 0x07, 0x49, 0x1f, 0x38, 0xe4, 0x39, 0x1d, 0xa2, - 0xc0, 0x78, 0x68, 0xcd, 0x99, 0x50, 0x2b, 0xb9, 0x83, 0x5e, 0x65, 0xfc, 0xf4, 0xb5, 0x2c, 0x12, - 0x3e, 0xc6, 0xc5, 0xb1, 0xa5, 0x8b, 0x85, 0x6d, 0xe1, 0xb0, 0x66, 0xea, 0x9c, 0x24, 0x7c, 0xc0, - 0xda, 0x00, 0x15, 0x27, 0x89, 0x86, 0x0d, 0xe0, 0x0b, 0x7f, 0x6c, 0xdc, 0x48, 0x50, 0xa5, 0x85, - 0x70, 0x1e, 0x3c, 0x56, 0x01, 0x09, 0x4c, 0x24, 0xa0, 0x11, 0x37, 0xcc, 0x52, 0x72, 0x87, 0xf8, - 0x4f, 0x87, 0x19, 0xf9, 0x8a, 0x2e, 0x69, 0xb8, 0x31, 0x07, 0xa6, 0x61, 0xbb, 0xc0, 0x42, 0x18, - 0x71, 0x5c, 0x97, 0x65, 0x2e, 0x1f, 0x0f, 0xfd, 0x2b, 0xf7, 0xc2, 0x87, 0xce, 0x47, 0x4f, 0xca, - 0xa8, 0xb9, 0x16, 0xf7, 0x65, 0xb8, 0x5b, 0x42, 0x74, 0x68, 0xe2, 0xf3, 0x4f, 0xf0, 0x49, 0x3f, - 0x6e, 0xbd, 0xf0, 0x80, 0xa1, 0x1c, 0x07, 0xde, 0x23, 0xd4, 0x9c, 0x98, 0x52, 0xf8, 0xe2, 0x3f, - 0xe8, 0x2a, 0x66, 0x8b, 0xe8, 0xa9, 0x61, 0x0e, 0x84, 0x32, 0x4e, 0x8f, 0x84, 0x5f, 0x42, 0xdc, - 0xfa, 0x14, 0x3b, 0x8f, 0xa1, 0x5a, 0xf8, 0x52, 0x68, 0x04, 0x14, 0xfd, 0x83, 0x03, 0xc9, 0x0a, - 0x10, 0xbc, 0x83, 0x42, 0x2f, 0x9b, 0xbb, 0xa5, 0x2d, 0x1c, 0x76, 0x70, 0xe2, 0x06, 0x98, 0x91, - 0x88, 0x06, 0xf0, 0x78, 0xb0, 0x7b, 0x68, 0x85, 0x69, 0xfd, 0x14, 0x51, 0x03, 0xa7, 0x83, 0x56, - 0x3a, 0xee, 0x98, 0x97, 0x1f, 0xeb, 0x7a, 0x0e, 0x31, 0xf0, 0xfd, 0x5f, 0xd1, 0xf8, 0x50, 0xcd, - 0x4b, 0x37, 0x26, 0x15, 0x9d, 0x39, 0xf6, 0x35, 0xdd, 0xf5, 0x5a, 0x35, 0x96, 0x7f, 0x12, 0x09, - 0x84, 0x85, 0x04, 0xb8, 0x5f, 0x46, 0x8c, 0x1a, 0xed, 0xce, 0x41, 0xbe, 0x3b, 0xf0, 0xa1, 0x0e, - 0xab, 0x28, 0xb8, 0xa6, 0x03, 0x9e, 0xb6, 0xb7, 0x60, 0xb5, 0x4a, 0x80, 0x7c, 0x6e, 0x50, 0xe3, - 0xc9, 0xb6, 0x8b, 0xec, 0x46, 0x75, 0xff, 0xdd, 0x33, 0x1e, 0x98, 0x48, 0x15, 0xb1, 0x1c, 0x35, - 0xa9, 0x0f, 0x28, 0x71, 0x00, 0xae, 0xb2, 0xf4, 0xfa, 0xea, 0x64, 0x65, 0x32, 0xde, 0xe7, 0xbd, - 0x05, 0x40, 0x0a, 0x7a, 0xaa, 0x02, 0x48, 0x67, 0x3d, 0x41, 0xd8, 0xd4, 0x60, 0x3a, 0xcb, 0x15, - 0x3f, 0x8b, 0x11, 0xe0, 0xeb, 0xcf, 0xbe, 0x09, 0x8e, 0xae, 0x5f, 0x24, 0x52, 0xd8, 0x3e, 0x19, - 0x60, 0xf5, 0xc4, 0x08, 0x51, 0x75, 0x5a, 0x04, 0x66, 0x08, 0x10, 0x07, 0xf0, 0x4d, 0x5a, 0xa8, - 0xf7, 0x17, 0xed, 0xbb, 0xe8, 0x22, 0x99, 0x05, 0x7a, 0x25, 0x7d, 0x72, 0xf8, 0x23, 0xd6, 0xb0, - 0x4b, 0xd5, 0xeb, 0xab, 0xcb, 0xd5, 0xfe, 0xb9, 0x57, 0x5c, 0xe7, 0xd1, 0x31, 0x95, 0xd1, 0xd2, - 0x87, 0x98, 0xc2, 0xc3, 0x1a, 0x08, 0x05, 0xb7, 0x24, 0xf0, 0xa4, 0x99, 0x1e, 0x02, 0x47, 0x0a, - 0x39, 0xea, 0xd4, 0x6e, 0xef, 0x84, 0x54, 0xf4, 0xdd, 0x45, 0x5c, 0x20, 0x85, 0x03, 0x2e, 0x24, - 0x28, 0x4b, 0x2f, 0xb2, 0xdd, 0xb8, 0xad, 0xed, 0xf7, 0x75, 0x6d, 0x53, 0xaf, 0x1a, 0x64, 0x33, - 0xf9, 0x20, 0x00, 0x19, 0x17, 0x04, 0x3f, 0x81, 0x28, 0x3a, 0xe5, 0xd0, 0xb2, 0xa3, 0x46, 0x19, - 0x04, 0x69, 0xb5, 0x25, 0x0d, 0x4a, 0x6d, 0x0f, 0xb2, 0xaa, 0x43, 0xda, 0x44, 0x62, 0x7d, 0xb7, - 0x27, 0x8f, 0x89, 0x19, 0x15, 0x8a, 0x33, 0xc7, 0x05, 0x16, 0x66, 0x12, 0x3c, 0xfc, 0x71, 0xf5, - 0x7b, 0x75, 0xb3, 0x83, 0x82, 0x84, 0x88, 0xd2, 0xef, 0x38, 0x1d, 0x6b, 0x82, 0x58, 0x50, 0xb1, - 0x7f, 0x2f, 0x12, 0x96, 0x77, 0x68, 0xf0, 0x4c, 0x37, 0x25, 0xed, 0x05, 0x83, 0x54, 0xca, 0x0c, - 0x87, 0x0b, 0xd3, 0xa7, 0x0f, 0x0a, 0x12, 0x80, 0x9d, 0xb5, 0x93, 0x28, 0xdd, 0xb6, 0x3c, 0xad, - 0x83, 0x7f, 0x12, 0x0a, 0x44, 0x8e, 0x80, 0x28, 0x6b, 0x39, 0x3a, 0x93, 0x89, 0x5d, 0x14, 0x83, - 0xc0, 0x5b, 0x99, 0x80, 0x00, 0x2a, 0x04, 0x04, 0xec, 0x0b, 0xc7, 0x63, 0x45, 0x7a, 0xfd, 0xe2, - 0x42, 0x04, 0x51, 0x1a, 0x51, 0xa3, 0x95, 0x5b, 0x4e, 0x7c, 0xa3, 0xf4, 0x5f, 0xfc, 0x28, 0x30, - 0x47, 0xa2, 0x72, 0x2b, 0x79, 0x6b, 0x0b, 0x06, 0xe1, 0xef, 0x52, 0xcd, 0xb9, 0x85, 0x6c, 0x49, - 0x06, 0xc3, 0xd4, 0x9c, 0xf3, 0xdf, 0xdf, 0x05, 0x64, 0x63, 0x09, 0x23, 0x00, 0xfc, 0x35, 0x90, - 0xcb, 0xce, 0x26, 0x32, 0x59, 0x8e, 0x2e, 0x4c, 0x7c, 0xed, 0xce, 0x3c, 0x17, 0x85, 0xf4, 0x8e, - 0xc1, 0x68, 0x80, 0x7c, 0x52, 0xe3, 0xf3, 0xc9, 0x0d, 0xf1, 0xf0, 0x43, 0x69, 0xae, 0x75, 0xc2, - 0x7d, 0x0a, 0xef, 0xa2, 0xe5, 0xf5, 0x8a, 0xfa, 0x24, 0x33, 0xea, 0xc1, 0xf4, 0x46, 0x22, 0x7a, - 0xf5, 0x70, 0x49, 0x45, 0x3e, 0x8d, 0x00, 0x30, 0x7d, 0xf1, 0xb2, 0x62, 0x4b, 0x11, 0xc9, 0x49, - 0x21, 0xe0, 0x05, 0x66, 0x0b, 0x10, 0x65, 0xa6, 0x49, 0xdf, 0x4b, 0xdb, 0x83, 0xef, 0xff, 0x04, - 0x56, 0x74, 0xcb, 0x3a, 0x63, 0x8d, 0xe2, 0x42, 0x97, 0x1f, 0x88, 0x3d, 0x07, 0x6a, 0x40, 0x95, - 0x9e, 0xb2, 0xa4, 0x51, 0xf7, 0x39, 0xc7, 0xe3, 0x7a, 0x35, 0x4c, 0xbf, 0xc4, 0x02, 0xa1, 0x05, - 0xf2, 0x23, 0xfc, 0xe7, 0xb3, 0xee, 0x68, 0x40, 0x68, 0xbc, 0xe2, 0x07, 0x16, 0xfb, 0x41, 0x6b, - 0xc0, 0xef, 0x29, 0x56, 0x95, 0x77, 0x40, 0x2c, 0x42, 0x82, 0x48, 0x38, 0x89, 0xc2, 0x82, 0x90, - 0x28, 0xab, 0xc1, 0x18, 0xb1, 0x04, 0x90, 0x89, 0x21, 0x05, 0xc5, 0x93, 0x38, 0x0e, 0xfc, 0x13, - 0x10, 0x8a, 0xb2, 0x65, 0x59, 0xaf, 0x7c, 0x28, 0x71, 0x10, 0x40, 0x1c, 0x2b, 0xc3, 0x38, 0xda, - 0x92, 0xa0, 0x80, 0xdb, 0xe8, 0x6c, 0x32, 0x5d, 0x37, 0xbd, 0xa4, 0x17, 0x7a, 0x48, 0x05, 0xf7, - 0x88, 0x05, 0x45, 0x62, 0xe7, 0x61, 0xc9, 0x1c, 0xc9, 0x38, 0xc7, 0x89, 0xaa, 0x5f, 0x24, 0x50, - 0x2e, 0xee, 0x9c, 0x3c, 0x29, 0x51, 0x2e, 0x2e, 0x1f, 0x5f, 0xca, 0xf6, 0x94, 0x3e, 0x4a, 0x91, - 0x7b, 0x8d, 0xe7, 0x2c, 0x2b, 0x4a, 0x84, 0xcf, 0x78, 0x94, 0x43, 0xa7, 0xc5, 0x08, 0x56, 0xb0, - 0x93, 0xb1, 0x65, 0x57, 0xc1, 0x69, 0x25, 0xde, 0x42, 0x0d, 0xd5, 0xdf, 0x89, 0x12, 0x13, 0x21, - 0xb3, 0x11, 0x6c, 0x2c, 0x46, 0x22, 0x5f, 0xc9, 0x1a, 0x6d, 0x1f, 0xe0, 0x8c, 0x6d, 0x90, 0x82, - 0xbb, 0x37, 0x4d, 0xe1, 0x8e, 0xbd, 0xf5, 0xaf, 0xa3, 0xa7, 0x5e, 0x8a, 0x9d, 0x7a, 0x23, 0x1f, - 0x52, 0x83, 0xe8, 0x8d, 0xf5, 0x6f, 0xab, 0x7d, 0x5c, 0x93, 0x85, 0x27, 0xce, 0xe7, 0x18, 0x2b, - 0xbb, 0x10, 0x67, 0x6c, 0xb4, 0x32, 0x1e, 0x2f, 0x8a, 0x37, 0x34, 0x91, 0x06, 0x82, 0x9d, 0x78, - 0x20, 0x10, 0xc1, 0x85, 0x95, 0x95, 0x57, 0x3e, 0xd9, 0x8f, 0xc5, 0x76, 0x3a, 0x19, 0x94, 0x4b, - 0xdb, 0x6c, 0x9f, 0xfc, 0x51, 0x13, 0xb4, 0xdc, 0x56, 0x3f, 0x81, 0x2f, 0x39, 0x87, 0xa3, 0xf2, - 0xbf, 0x2e, 0xb6, 0x7e, 0x0b, 0x35, 0x09, 0x88, 0x08, 0xf2, 0x41, 0x7c, 0xc3, 0xc6, 0x0c, 0x19, - 0xd4, 0xdc, 0xf3, 0x9d, 0xf0, 0xa0, 0x8a, 0xa8, 0x93, 0x0c, 0xd1, 0x58, 0xc4, 0x87, 0x9c, 0x60, - 0x1f, 0x4a, 0x5d, 0x0f, 0xba, 0x12, 0x27, 0x39, 0x3a, 0x78, 0x90, 0xa0, 0x92, 0x70, 0x4d, 0xaa, - 0x68, 0x6e, 0x2b, 0x43, 0xa4, 0x10, 0x16, 0xa8, 0xb7, 0x18, 0xda, 0x3c, 0x3d, 0xdf, 0x4b, 0x1c, - 0x89, 0x2c, 0x34, 0x55, 0xe0, 0xf6, 0x4a, 0x9d, 0x25, 0x85, 0xb8, 0x3b, 0xfe, 0x08, 0x8f, 0x2d, - 0x34, 0x77, 0xc4, 0x2b, 0xbc, 0x4a, 0x97, 0xf8, 0x90, 0x43, 0x17, 0x17, 0x13, 0x18, 0x25, 0xe5, - 0x0f, 0xc4, 0x02, 0x13, 0xad, 0xef, 0xe2, 0x41, 0x35, 0xb2, 0x90, 0x74, 0x24, 0xe1, 0xe8, 0x64, - 0xd1, 0x8f, 0x89, 0x08, 0x5c, 0x74, 0xdd, 0xbe, 0x4b, 0x76, 0x06, 0xb8, 0xb2, 0xfc, 0x10, 0x98, - 0xcd, 0xa7, 0x8d, 0x53, 0xc4, 0x23, 0x39, 0xc4, 0x41, 0x50, 0x82, 0xc6, 0x58, 0xdc, 0x2c, 0xd1, - 0x82, 0x96, 0x0c, 0x56, 0xc1, 0x89, 0x11, 0x83, 0x19, 0x16, 0x05, 0xfe, 0x2e, 0x23, 0x8b, 0xa4, - 0x9c, 0x92, 0xf8, 0x23, 0x13, 0x2b, 0x02, 0x4e, 0x38, 0x30, 0x14, 0xe1, 0xe8, 0x4e, 0x52, 0x74, - 0x29, 0x91, 0x1d, 0x09, 0x63, 0xeb, 0xaf, 0xa3, 0x54, 0x9d, 0x1f, 0x2f, 0x82, 0x3b, 0xdf, 0x57, - 0xd7, 0x39, 0xf5, 0xce, 0x7d, 0x73, 0x9f, 0x51, 0xf5, 0x72, 0x6a, 0xf2, 0xf4, 0x52, 0xa7, 0xcc, - 0x6b, 0xa9, 0x7f, 0x9c, 0xdf, 0xd4, 0xdb, 0xff, 0x8d, 0xa9, 0x86, 0x09, 0x3c, 0x97, 0xd4, 0x65, - 0x88, 0xba, 0x85, 0xa2, 0x03, 0x90, 0x40, 0x92, 0x02, 0xae, 0x80, 0x44, 0x04, 0xe8, 0xe9, 0x6b, - 0x6f, 0xfe, 0x0a, 0x71, 0x59, 0x6c, 0x7d, 0x7d, 0x69, 0xdd, 0xee, 0x79, 0x3e, 0x08, 0xca, 0x38, - 0x65, 0x1d, 0x9b, 0x3e, 0xf1, 0x23, 0x22, 0xea, 0x2e, 0x2f, 0x69, 0x06, 0x52, 0xb6, 0xcb, 0xba, - 0xbb, 0x08, 0x41, 0x87, 0xe0, 0xb0, 0x51, 0x38, 0x72, 0x8d, 0x42, 0x82, 0xa3, 0xa1, 0xe4, 0x43, - 0xe2, 0x1e, 0xfc, 0x5c, 0xb9, 0x7a, 0x50, 0xe2, 0x42, 0x92, 0x38, 0x03, 0x43, 0x49, 0x12, 0x00, - 0x30, 0x25, 0xc1, 0x36, 0x05, 0x92, 0x96, 0x09, 0xe7, 0x10, 0xc0, 0x63, 0x4b, 0x0a, 0xb7, 0x16, - 0xbd, 0x05, 0xe9, 0x46, 0x01, 0x4c, 0x9f, 0x07, 0x1f, 0xcf, 0x72, 0xce, 0xe5, 0xd8, 0xce, 0x1a, - 0x3f, 0xa6, 0x0e, 0x20, 0x29, 0x7f, 0xde, 0x3d, 0xe0, 0x1c, 0x0f, 0x7a, 0x9e, 0x58, 0xa1, 0x96, - 0x60, 0x3f, 0x56, 0x07, 0xb8, 0x58, 0xdf, 0x96, 0x20, 0x70, 0x35, 0x2d, 0x70, 0x99, 0x53, 0xc6, - 0x9c, 0x3c, 0x16, 0x16, 0xef, 0x2a, 0xd9, 0x9c, 0xe2, 0xd3, 0x23, 0xc7, 0x2f, 0x6d, 0xa3, 0xbe, - 0x24, 0x28, 0x2e, 0x3c, 0x58, 0x7a, 0x86, 0x5f, 0x40, 0x71, 0xd1, 0x70, 0x58, 0x20, 0x2a, 0x46, - 0x2a, 0x8d, 0xfc, 0x40, 0x29, 0x90, 0x61, 0x7f, 0x3e, 0x1e, 0x0c, 0xcf, 0x41, 0xa4, 0x4c, 0x63, - 0xfc, 0x48, 0x2a, 0xa1, 0xbe, 0x56, 0x47, 0x63, 0x1e, 0xc4, 0x03, 0x59, 0xa5, 0xb0, 0x1e, 0x6d, - 0x7d, 0x38, 0xef, 0xc1, 0x36, 0xd4, 0xef, 0x07, 0x1d, 0x8d, 0x7e, 0x09, 0xbd, 0x81, 0x92, 0x91, - 0xb6, 0x93, 0x09, 0x63, 0x99, 0xd7, 0x82, 0x1d, 0x0c, 0xf4, 0x78, 0x69, 0x1d, 0xf1, 0x02, 0x0a, - 0xac, 0x48, 0x95, 0x57, 0x5c, 0x16, 0xc7, 0xc8, 0x47, 0x8e, 0x54, 0xd5, 0x5b, 0xa4, 0xe3, 0xc2, - 0x22, 0x0b, 0x50, 0xaf, 0x84, 0x34, 0x86, 0x2b, 0x71, 0x5b, 0xdb, 0xbb, 0xf8, 0x50, 0x54, 0x9f, - 0xc5, 0x25, 0xf0, 0xba, 0x65, 0xe1, 0x5f, 0xad, 0xd7, 0xbd, 0x90, 0x48, 0x7d, 0x8f, 0xf0, 0xc1, - 0x44, 0xc8, 0x23, 0x1c, 0x59, 0x9d, 0xf0, 0x4c, 0x45, 0xfc, 0x0c, 0x52, 0x79, 0xb7, 0xfd, 0x1f, - 0xa2, 0xfa, 0x37, 0x45, 0x74, 0x57, 0xfa, 0xde, 0x4e, 0xbf, 0xbe, 0x8b, 0xe3, 0xeb, 0x07, 0xd5, - 0xfe, 0x1d, 0x32, 0x48, 0xdc, 0xfc, 0x23, 0x7a, 0x75, 0x37, 0x9d, 0xf9, 0x0b, 0xe4, 0xa1, 0x97, - 0xe1, 0xdf, 0x70, 0xb5, 0xf1, 0x01, 0x27, 0x4d, 0xd9, 0x93, 0xab, 0xdd, 0x71, 0x52, 0x19, 0x2d, - 0xbb, 0xbd, 0xfe, 0x14, 0x96, 0x0f, 0xbc, 0xf9, 0x24, 0xfb, 0xdc, 0x56, 0xdb, 0xab, 0x3e, 0x09, - 0x04, 0xe8, 0xd7, 0xbe, 0x08, 0x44, 0x17, 0x1d, 0xfd, 0xe2, 0x46, 0xc5, 0x63, 0x36, 0x33, 0x91, - 0x24, 0x50, 0x25, 0x54, 0x2d, 0xbc, 0x38, 0xfc, 0x9c, 0xc0, 0xb0, 0x4e, 0x19, 0x05, 0xdd, 0x27, - 0x9f, 0xf9, 0xd2, 0x33, 0xfd, 0xd6, 0x8b, 0x88, 0x0e, 0x96, 0xdc, 0xfe, 0x65, 0xeb, 0xbd, 0x91, - 0x69, 0x22, 0xa4, 0x2d, 0xe6, 0x7c, 0xbc, 0x99, 0x5f, 0xc4, 0x85, 0x09, 0x77, 0xe0, 0xa3, 0x48, - 0xb3, 0x3a, 0x85, 0x8f, 0x50, 0xfc, 0xfa, 0x3c, 0x8b, 0xd7, 0x10, 0x08, 0x6f, 0x26, 0x66, 0xfd, - 0xf2, 0x8b, 0x9c, 0x0b, 0x7e, 0x25, 0x10, 0xf7, 0xc1, 0x4c, 0x68, 0x20, 0x2e, 0x31, 0x5e, 0xef, - 0x20, 0x00, 0x06, 0xce, 0x0a, 0x6b, 0x1f, 0xf8, 0x21, 0x2e, 0xee, 0x74, 0x3b, 0xf0, 0xd5, 0x93, - 0x26, 0xb8, 0x1a, 0xa3, 0xfd, 0x7f, 0x88, 0x45, 0xaf, 0x92, 0x36, 0xc9, 0xa4, 0x17, 0x65, 0x5e, - 0x8c, 0xe7, 0xc1, 0x1e, 0xb6, 0x32, 0xe1, 0xc4, 0x85, 0x27, 0x81, 0x3b, 0x53, 0x4e, 0xcd, 0x8e, - 0x3d, 0x47, 0xaa, 0x34, 0x31, 0x2e, 0xa4, 0xb1, 0xe5, 0x8a, 0x78, 0x91, 0x20, 0xa6, 0x7b, 0x5e, - 0x1a, 0x07, 0xd1, 0xaf, 0x12, 0xf1, 0x85, 0x56, 0x86, 0xc0, 0xde, 0xc6, 0x37, 0xfe, 0x0a, 0x85, - 0x6a, 0x2b, 0x48, 0x4f, 0x09, 0x43, 0xa4, 0x12, 0x7f, 0x9b, 0x42, 0x68, 0x6b, 0xff, 0xc4, 0xce, - 0x03, 0x21, 0x8c, 0xc3, 0x76, 0x48, 0x6b, 0x12, 0x60, 0x60, 0x2f, 0xaf, 0x42, 0x3d, 0x1e, 0x39, - 0x27, 0x45, 0xea, 0xeb, 0xdf, 0x58, 0xbe, 0x4b, 0xdf, 0xe0, 0x87, 0x57, 0xf7, 0xd6, 0xbc, 0x48, - 0xd3, 0x6e, 0x6e, 0xe2, 0x53, 0x17, 0x53, 0x1c, 0x19, 0x0b, 0xdd, 0xce, 0xb0, 0x5a, 0x9c, 0xed, - 0x30, 0x60, 0x17, 0x48, 0x34, 0x19, 0xc5, 0x1d, 0x5b, 0x47, 0x53, 0xfc, 0x3d, 0x0f, 0x06, 0xa5, - 0xa4, 0x99, 0x55, 0x7f, 0xb7, 0x9e, 0xd2, 0xd9, 0xa1, 0xf1, 0x6a, 0xfb, 0xd3, 0x4f, 0xc1, 0x64, - 0x73, 0xef, 0x53, 0x43, 0xaa, 0x2a, 0xb3, 0x51, 0x43, 0xe3, 0x81, 0x0c, 0x6f, 0x84, 0x36, 0x6c, - 0x06, 0x70, 0xc0, 0x75, 0x5c, 0xbd, 0x7f, 0x1c, 0x48, 0xae, 0x21, 0x61, 0xdf, 0x77, 0x39, 0x50, - 0x5e, 0x5b, 0xf0, 0x48, 0x74, 0x44, 0xd5, 0x68, 0x80, 0xf7, 0xc5, 0x12, 0xf1, 0x46, 0xe2, 0x46, - 0x0d, 0x35, 0x27, 0x12, 0x36, 0x59, 0xa4, 0x0e, 0x02, 0x0f, 0x60, 0x80, 0xd2, 0xb6, 0x05, 0x0e, - 0xf0, 0xaa, 0xb7, 0x8d, 0xaa, 0x94, 0x2f, 0xfd, 0x6a, 0xfe, 0x0b, 0x2a, 0xb4, 0x03, 0x41, 0xbd, - 0x97, 0x25, 0x80, 0xee, 0x56, 0x8e, 0xf8, 0x80, 0x4a, 0x57, 0x15, 0x8c, 0xd2, 0xdf, 0x41, 0x5d, - 0xfb, 0xc4, 0x82, 0xb2, 0x8c, 0x0d, 0x09, 0x63, 0x73, 0x51, 0x48, 0x08, 0x03, 0x2e, 0xff, 0xde, - 0x20, 0x11, 0x59, 0x18, 0x00, 0x0b, 0xe6, 0x53, 0xc4, 0x05, 0x22, 0xb1, 0x28, 0x80, 0xa0, 0x0b, - 0x43, 0x01, 0x4d, 0x8f, 0x30, 0xd9, 0x58, 0x5f, 0xc5, 0xa7, 0x76, 0xe7, 0x10, 0x17, 0x78, 0x80, - 0x49, 0x57, 0x51, 0xd4, 0x1e, 0xae, 0xa5, 0x50, 0xf2, 0x95, 0xdf, 0x7c, 0x16, 0x9a, 0x60, 0x32, - 0xf4, 0x22, 0x98, 0xc6, 0xfe, 0x21, 0x7e, 0x7d, 0xc5, 0x9a, 0x34, 0x66, 0x10, 0xfa, 0xb3, 0xe1, - 0x21, 0x0a, 0xaa, 0xa5, 0xa0, 0xeb, 0x24, 0xa9, 0xf8, 0x23, 0x90, 0x30, 0x1a, 0xa9, 0xc3, 0xf9, - 0xca, 0xb6, 0x8d, 0xb1, 0xff, 0xab, 0xc9, 0xd1, 0x7e, 0x3d, 0x72, 0xae, 0x08, 0xaa, 0x8f, 0xfb, - 0xea, 0x80, 0x69, 0x38, 0xfd, 0xd5, 0x5d, 0xd5, 0x5d, 0xf5, 0xd1, 0x3a, 0xba, 0xc5, 0x2f, 0x5c, - 0xdf, 0x56, 0xbe, 0xb9, 0xeb, 0x82, 0x4c, 0x57, 0x79, 0x7c, 0x13, 0x46, 0x08, 0x9c, 0xdb, 0x6e, - 0xa3, 0x8d, 0xf0, 0x4a, 0x5a, 0x33, 0x9b, 0x86, 0x73, 0x74, 0x27, 0x9b, 0x87, 0x99, 0x5d, 0x08, - 0x7f, 0x84, 0xb3, 0xe5, 0xbb, 0xdf, 0x89, 0x05, 0x25, 0x49, 0x68, 0xb1, 0x75, 0x1f, 0x4c, 0x7a, - 0x0f, 0x2f, 0x10, 0xb9, 0x78, 0x80, 0xcc, 0xec, 0x16, 0x31, 0x5d, 0xdf, 0x44, 0x7e, 0xff, 0xa9, - 0xef, 0x12, 0x8e, 0x8e, 0xfc, 0x15, 0xde, 0x60, 0x80, 0x3a, 0xa3, 0xe7, 0x9d, 0x18, 0x87, 0x12, - 0x08, 0xb1, 0x9a, 0x2b, 0x7f, 0x87, 0x82, 0x1d, 0xb9, 0x6c, 0x43, 0x95, 0x5c, 0x11, 0xf6, 0x37, - 0x4a, 0x7c, 0x13, 0xc4, 0x48, 0x22, 0x3c, 0x5c, 0xbc, 0x80, 0x80, 0x27, 0xcc, 0x48, 0xc1, 0x7b, - 0xfc, 0x13, 0x9c, 0x5c, 0x5c, 0x5c, 0x5f, 0x2b, 0x08, 0x27, 0xfa, 0x96, 0x55, 0xc4, 0x82, 0x21, - 0x99, 0xb4, 0xec, 0xff, 0xc4, 0x85, 0x0a, 0x4d, 0x8e, 0xab, 0x9f, 0xb3, 0x5b, 0x24, 0x68, 0xd1, - 0xaa, 0xad, 0x23, 0x74, 0xab, 0xc1, 0x4d, 0xd0, 0x3c, 0xdb, 0x0c, 0x2f, 0x88, 0xe8, 0xa9, 0x6e, - 0xe5, 0xb8, 0x8a, 0x3f, 0x2f, 0x11, 0x0a, 0x4a, 0x08, 0x08, 0xf8, 0xa9, 0x1f, 0x08, 0x09, 0x0c, - 0xfb, 0xe0, 0x3b, 0x51, 0x98, 0x9a, 0x4b, 0x68, 0xeb, 0x93, 0x01, 0x00, 0x64, 0xe8, 0x60, 0x2b, - 0x8a, 0xc7, 0x41, 0x82, 0x03, 0xff, 0x12, 0x09, 0x48, 0x74, 0xfd, 0x8d, 0xcf, 0x9b, 0xfc, 0x34, - 0x61, 0x1c, 0x0f, 0x68, 0x36, 0x2a, 0x21, 0x1d, 0x58, 0x35, 0xa4, 0xff, 0xe0, 0x9b, 0x56, 0x66, - 0x61, 0x06, 0x44, 0x8c, 0x83, 0x9f, 0x57, 0x0f, 0xa2, 0x99, 0x2b, 0xac, 0x55, 0xd5, 0xfe, 0xac, - 0x3d, 0x11, 0xfe, 0xaf, 0x2f, 0x57, 0xfa, 0xfc, 0xbe, 0xac, 0x49, 0xd1, 0xfa, 0x4e, 0x0b, 0x45, - 0x51, 0xc9, 0x2b, 0x19, 0x23, 0xc1, 0xf4, 0x57, 0x7d, 0x1d, 0x95, 0xc2, 0x82, 0x91, 0x14, 0xdb, - 0x3d, 0xda, 0xa3, 0x51, 0x7a, 0xaa, 0x4b, 0x1d, 0xff, 0x0a, 0x4a, 0xc2, 0x9b, 0x96, 0xf8, 0x3f, - 0xde, 0xa5, 0x5b, 0x8c, 0x7f, 0x3e, 0x84, 0x64, 0x53, 0xfe, 0xf8, 0x22, 0x2d, 0x6a, 0xff, 0x05, - 0x50, 0xc1, 0xe7, 0x52, 0x2b, 0x61, 0xad, 0x5a, 0x5a, 0x8e, 0xdf, 0x05, 0x7c, 0x94, 0x64, 0x77, - 0x2e, 0x0c, 0x5f, 0x27, 0xf8, 0xf9, 0x2b, 0x68, 0x84, 0x1e, 0x21, 0x1c, 0x81, 0x1f, 0x5c, 0xe3, - 0xd4, 0xb7, 0x89, 0x44, 0x1d, 0xbe, 0x30, 0xa2, 0x12, 0x21, 0x86, 0xbc, 0x20, 0x20, 0x0b, 0xcd, - 0x6d, 0xbe, 0x92, 0x48, 0xf3, 0xd3, 0xe0, 0x86, 0x2e, 0x2e, 0xa2, 0xff, 0xfa, 0xf7, 0xc1, 0x29, - 0xee, 0x70, 0x80, 0x3d, 0xaa, 0x36, 0x04, 0x95, 0x79, 0x88, 0xfb, 0xf8, 0x22, 0x18, 0x96, 0x97, - 0x78, 0x80, 0x58, 0x71, 0x5d, 0x4e, 0x2b, 0x2f, 0x7a, 0x37, 0x7b, 0xbf, 0x12, 0x25, 0x4f, 0x28, - 0x78, 0x50, 0x4b, 0x34, 0x9d, 0x12, 0x0d, 0x94, 0xca, 0x53, 0x98, 0x87, 0x1a, 0x0f, 0xc5, 0xc5, - 0x20, 0x02, 0x07, 0x1b, 0x89, 0x8b, 0xb4, 0xba, 0x09, 0xe1, 0x3d, 0x84, 0x82, 0x39, 0xb6, 0x9a, - 0xe2, 0x42, 0x96, 0x98, 0x32, 0xa8, 0xa6, 0x71, 0x96, 0x6a, 0xf4, 0xd7, 0x91, 0x2f, 0x40, 0x19, - 0x17, 0x98, 0x60, 0xa5, 0x58, 0x88, 0x50, 0x83, 0x43, 0xd3, 0x3f, 0x49, 0xc6, 0x47, 0xc2, 0x06, - 0x5f, 0xda, 0x3c, 0xc3, 0x05, 0xc8, 0xee, 0x04, 0x06, 0x54, 0x70, 0xf0, 0xa0, 0xad, 0x6a, 0x11, - 0xab, 0x19, 0xaa, 0xd5, 0x34, 0x47, 0x4d, 0x74, 0x8d, 0x93, 0x18, 0x8d, 0x53, 0xe0, 0x9b, 0x8e, - 0x63, 0x94, 0xeb, 0x53, 0xdf, 0x42, 0x59, 0xf5, 0xca, 0x4e, 0x8c, 0xff, 0x45, 0xb7, 0xd5, 0xaf, - 0xaf, 0x7d, 0x5a, 0xba, 0xe2, 0xbe, 0x52, 0x24, 0x95, 0xa5, 0xd1, 0xda, 0xb8, 0x23, 0xaa, 0x3d, - 0xef, 0xa3, 0x45, 0x7c, 0x37, 0x15, 0xbb, 0xbe, 0x7c, 0x7d, 0x32, 0xb0, 0xbf, 0xc1, 0x11, 0x49, - 0xc7, 0xd3, 0x08, 0xd6, 0x84, 0x03, 0x2f, 0xab, 0xfc, 0x12, 0x46, 0x15, 0xbf, 0x76, 0x78, 0x90, - 0x55, 0x8e, 0x32, 0x5d, 0xf6, 0x1e, 0x12, 0x42, 0x73, 0x42, 0x84, 0x01, 0x40, 0x20, 0x01, 0xad, - 0xf8, 0x7c, 0x71, 0xbd, 0xef, 0xbb, 0xef, 0x7f, 0x04, 0x25, 0xb7, 0x1c, 0xa4, 0x5e, 0x24, 0x16, - 0x53, 0x6e, 0x84, 0x4a, 0x0d, 0x40, 0x16, 0x7a, 0xa9, 0xd7, 0xf0, 0x5c, 0x55, 0x0f, 0xd3, 0xc1, - 0xf1, 0x93, 0x49, 0x11, 0x7e, 0xdf, 0x05, 0xb5, 0x7c, 0x23, 0xc6, 0xd7, 0x10, 0xd1, 0x87, 0x1c, - 0x48, 0x21, 0x2b, 0xde, 0x5b, 0xe3, 0x0c, 0xc8, 0x38, 0xc7, 0x8a, 0xd7, 0x96, 0x83, 0x39, 0x06, - 0x9a, 0xf6, 0x82, 0xaf, 0x9c, 0x20, 0x09, 0xd0, 0x25, 0x05, 0x57, 0x88, 0x04, 0x87, 0xba, 0xff, - 0xf4, 0x4e, 0xf1, 0x20, 0xb8, 0xb7, 0xb4, 0xc0, 0x98, 0x04, 0xbf, 0x3c, 0xff, 0x04, 0xd7, 0xbc, - 0x51, 0x8a, 0x37, 0x77, 0xf8, 0x24, 0xdd, 0xd8, 0x2e, 0xfa, 0xa5, 0x5e, 0x0b, 0x08, 0x80, 0xc6, - 0x46, 0x81, 0x71, 0xb4, 0xcc, 0xa2, 0x74, 0x96, 0xe1, 0x94, 0x8a, 0xd2, 0xf8, 0x93, 0x93, 0xff, - 0x4e, 0xdb, 0xf1, 0x02, 0x0e, 0x75, 0x16, 0xe5, 0xa1, 0x71, 0xb9, 0x46, 0x87, 0xb7, 0xeb, 0xdc, - 0x44, 0x14, 0xcb, 0x89, 0x16, 0xcb, 0x52, 0xb1, 0x04, 0xa1, 0x71, 0xf0, 0x04, 0xd3, 0xb9, 0xee, - 0x24, 0x48, 0x27, 0xca, 0x06, 0xb9, 0xae, 0x2d, 0xfc, 0x47, 0xd7, 0xbe, 0xbd, 0xf0, 0x4e, 0x2a, - 0x7c, 0xad, 0x6f, 0xd5, 0xd0, 0xb8, 0x67, 0xd7, 0x2f, 0xae, 0xa4, 0xe8, 0x95, 0xf5, 0xeb, 0xe8, - 0xa8, 0xf2, 0xba, 0xa3, 0xbf, 0x5d, 0x45, 0xf0, 0x48, 0x29, 0x73, 0xa8, 0x2d, 0xf0, 0x4c, 0x52, - 0xa4, 0x70, 0x72, 0xf7, 0x7c, 0xab, 0xa2, 0xb0, 0xf5, 0x6f, 0x12, 0x0b, 0x28, 0x0d, 0x6f, 0xa3, - 0xbe, 0xbc, 0xa4, 0xef, 0xcd, 0x01, 0x48, 0x75, 0xe5, 0x14, 0xef, 0x7f, 0x62, 0xdb, 0x60, 0x64, - 0x66, 0x3f, 0x04, 0xdc, 0xf2, 0x62, 0x27, 0x80, 0x42, 0xb5, 0xc8, 0xe0, 0xfc, 0x55, 0xdd, 0xd0, - 0xdc, 0xa1, 0x00, 0x45, 0x65, 0xbc, 0x48, 0x90, 0xa5, 0xdd, 0x13, 0xa4, 0xb6, 0x04, 0xc6, 0xda, - 0xbf, 0x68, 0xb5, 0x1e, 0xc3, 0xa1, 0x25, 0xe7, 0x8b, 0x7c, 0x42, 0xcf, 0xe2, 0x41, 0x55, 0xdc, - 0x10, 0x04, 0x70, 0x20, 0x16, 0x39, 0xf4, 0xb2, 0x0d, 0x17, 0x60, 0x2d, 0x1d, 0xfb, 0xb9, 0xcc, - 0x5c, 0xb7, 0xeb, 0x7f, 0xa2, 0xa7, 0x5e, 0x08, 0x6e, 0x2b, 0x15, 0xb9, 0x6f, 0x82, 0x3e, 0xee, - 0x74, 0x7f, 0xab, 0xf8, 0x94, 0x23, 0xbc, 0x40, 0x2a, 0x2b, 0x9c, 0x40, 0x44, 0xa2, 0x02, 0x5b, - 0x64, 0xc9, 0x00, 0x4f, 0x13, 0xf9, 0x9b, 0xed, 0xf0, 0x45, 0x48, 0xf0, 0xdc, 0xf8, 0x2e, 0xb8, - 0xad, 0xde, 0x48, 0xb2, 0x87, 0x0d, 0xf2, 0x55, 0x49, 0x46, 0x53, 0x89, 0x0a, 0x09, 0x60, 0xc3, - 0x69, 0x5e, 0x3d, 0x33, 0x47, 0x69, 0x6d, 0xa3, 0x09, 0x11, 0x4c, 0x51, 0xa9, 0x91, 0xf6, 0xad, - 0x5e, 0x09, 0x80, 0x1e, 0x5f, 0xb3, 0x2a, 0xfe, 0x8b, 0x17, 0xc1, 0x39, 0x16, 0xb4, 0x92, 0x2e, - 0x37, 0x2f, 0xf1, 0x75, 0x17, 0x91, 0x74, 0x47, 0x0b, 0xd9, 0x78, 0x22, 0x14, 0xd9, 0x5a, 0xca, - 0x86, 0x9f, 0xe1, 0xb2, 0xa0, 0x0c, 0xb9, 0x8f, 0x96, 0xa4, 0x32, 0xc3, 0x3f, 0xea, 0xd2, 0xf5, - 0xc2, 0xfa, 0x29, 0x95, 0x5c, 0x11, 0x56, 0xee, 0xff, 0x3d, 0x5a, 0x69, 0x24, 0xbf, 0xd5, 0xfe, - 0xa4, 0x15, 0xf5, 0x3a, 0x57, 0x57, 0xfa, 0xb3, 0xe0, 0x92, 0x8d, 0x1b, 0x37, 0x7a, 0xe8, 0xdb, - 0x78, 0x90, 0xa1, 0x19, 0xb6, 0xd8, 0xf0, 0x20, 0x47, 0x36, 0x5b, 0x58, 0x08, 0x5c, 0x53, 0x28, - 0x92, 0x40, 0x54, 0x99, 0x30, 0x41, 0xbb, 0x61, 0x30, 0x7f, 0x62, 0x5d, 0x4a, 0x63, 0x3e, 0xbe, - 0x78, 0x90, 0xa1, 0x49, 0x83, 0xd1, 0x86, 0x60, 0xc5, 0xb3, 0x5b, 0xc0, 0x8c, 0x94, 0xc2, 0x38, - 0x76, 0x71, 0x01, 0x60, 0x20, 0x0c, 0x38, 0x09, 0x1c, 0x26, 0x0f, 0x10, 0x46, 0xa1, 0xf8, 0x80, - 0x47, 0x46, 0xdb, 0x88, 0x2d, 0xc3, 0x8f, 0xe2, 0x51, 0x07, 0x6f, 0x82, 0xa2, 0x34, 0xd6, 0x32, - 0xc5, 0xfd, 0xec, 0x3e, 0x84, 0x52, 0x5b, 0x4d, 0xff, 0x5d, 0x1d, 0xfc, 0x48, 0x22, 0x3c, 0x76, - 0x07, 0x80, 0xcb, 0x1d, 0xe2, 0x61, 0x4e, 0x42, 0x4e, 0xa4, 0x00, 0x4a, 0x0c, 0xaa, 0x2b, 0x50, - 0x08, 0x68, 0x38, 0xa2, 0x03, 0x5b, 0xdb, 0xde, 0xa2, 0x1b, 0x10, 0x8c, 0x77, 0x88, 0x04, 0x46, - 0x10, 0xe0, 0xac, 0xe4, 0x1b, 0x7f, 0x12, 0xa9, 0xd7, 0x82, 0x79, 0xe4, 0xc1, 0xd0, 0x13, 0x8c, - 0xf1, 0x2f, 0x7f, 0x82, 0xa2, 0xa0, 0x13, 0x19, 0xe8, 0xfe, 0x3c, 0x0d, 0x04, 0xbd, 0x81, 0x80, - 0xb8, 0x40, 0x6e, 0xed, 0x71, 0xff, 0x05, 0x59, 0x7b, 0x4f, 0xa1, 0xc8, 0x2f, 0xca, 0xc7, 0x3a, - 0xfe, 0x89, 0xd7, 0x13, 0x15, 0x17, 0x13, 0x61, 0x59, 0x00, 0xb7, 0x95, 0x8c, 0x2b, 0xa2, 0xe2, - 0x41, 0x1f, 0x1b, 0x36, 0x05, 0xd0, 0x00, 0x8d, 0xa1, 0x51, 0xd2, 0xe0, 0xa8, 0xa7, 0x0c, 0x13, - 0xa8, 0x9c, 0x8e, 0x9b, 0xd0, 0x36, 0x34, 0x0c, 0x56, 0x9d, 0x78, 0x26, 0xa7, 0x60, 0xc8, 0x81, - 0x07, 0x13, 0xb2, 0xce, 0x7c, 0x16, 0x71, 0x90, 0x00, 0x9b, 0x19, 0x82, 0x73, 0x00, 0x00, 0xdb, - 0x50, 0x07, 0x7f, 0x12, 0x0a, 0xe7, 0xcb, 0x0d, 0x90, 0x69, 0x17, 0xd5, 0x59, 0x08, 0x9a, 0x6e, - 0x34, 0x63, 0x7b, 0xa6, 0x1c, 0x5e, 0x67, 0x40, 0xa8, 0x5f, 0x3e, 0x0a, 0xb0, 0x95, 0xa0, 0x33, - 0xd1, 0x6a, 0xca, 0x81, 0x15, 0x85, 0x80, 0x47, 0xc7, 0xd4, 0xa5, 0xf0, 0x4b, 0x77, 0x77, 0x57, - 0xca, 0x9f, 0x21, 0x94, 0x94, 0x59, 0xf0, 0x99, 0x1a, 0x89, 0x27, 0x21, 0xa0, 0x65, 0x0b, 0xb3, - 0xd7, 0x47, 0xe9, 0x7a, 0xe5, 0xf4, 0x48, 0xab, 0xab, 0xfd, 0x17, 0x17, 0xcd, 0x5d, 0xdf, 0x7b, - 0xbf, 0xd6, 0x52, 0x75, 0x75, 0x75, 0xef, 0x82, 0xc1, 0x8e, 0x21, 0xe2, 0xb4, 0x6f, 0x5d, 0xc5, - 0x18, 0x85, 0x89, 0xa9, 0x41, 0x2a, 0xdf, 0x0a, 0x14, 0xc8, 0x5b, 0x3d, 0xfe, 0x3a, 0xa9, 0x78, - 0xbe, 0xd0, 0x5b, 0x62, 0x92, 0x71, 0x24, 0x30, 0x82, 0xce, 0x5e, 0x5f, 0x96, 0xd9, 0x95, 0x40, - 0xb6, 0xf8, 0x2b, 0x13, 0x40, 0x4d, 0x9d, 0x13, 0x31, 0x43, 0x44, 0xd0, 0xa0, 0x47, 0x20, 0xa1, - 0xd6, 0x3b, 0x7c, 0x12, 0x52, 0x74, 0xbb, 0xf1, 0x30, 0xa1, 0x46, 0x49, 0x75, 0x31, 0xab, 0x28, - 0xc1, 0x02, 0xd3, 0x1b, 0xba, 0x90, 0x40, 0x03, 0xe2, 0xdd, 0x30, 0xf2, 0x10, 0xe0, 0xed, 0x5d, - 0x19, 0xfe, 0x62, 0xd0, 0xea, 0xb8, 0x52, 0x22, 0x10, 0x05, 0x8c, 0x90, 0x91, 0xca, 0x3d, 0x43, - 0xe9, 0x58, 0xab, 0x35, 0x0f, 0xd9, 0x15, 0x83, 0x4f, 0x5f, 0x2f, 0x10, 0x08, 0x64, 0xf9, 0x7b, - 0xfc, 0x29, 0x90, 0x60, 0xbc, 0x26, 0xa8, 0x05, 0xd5, 0x06, 0x10, 0xb0, 0x79, 0x04, 0xac, 0x75, - 0x92, 0x29, 0x84, 0x50, 0x02, 0x5b, 0x98, 0x84, 0x7c, 0xdd, 0x5f, 0x89, 0x19, 0x43, 0x4d, 0x64, - 0x10, 0x12, 0x08, 0x0a, 0xc8, 0x64, 0xa4, 0x5b, 0x59, 0xe7, 0xbf, 0xc1, 0x1d, 0xb2, 0x63, 0x72, - 0xde, 0x24, 0x12, 0xf3, 0xf4, 0x3b, 0x63, 0xf0, 0x9f, 0xbe, 0x08, 0xc8, 0xaa, 0xab, 0xf7, 0xc1, - 0x6c, 0x5d, 0x6b, 0x26, 0x2c, 0xf7, 0xc1, 0x74, 0x5c, 0x5d, 0x55, 0xdc, 0x4a, 0x08, 0x03, 0x77, - 0xf8, 0x2b, 0xbb, 0x58, 0xff, 0xaf, 0xcb, 0xe5, 0xc3, 0xa7, 0xd1, 0x5b, 0xe0, 0x87, 0x7a, 0x1e, - 0x0f, 0x82, 0xd2, 0xb9, 0xe8, 0xf8, 0x8e, 0x0e, 0x32, 0x7f, 0xef, 0x12, 0x09, 0xc8, 0x3e, 0x98, - 0x5e, 0xc5, 0xca, 0x34, 0x24, 0x72, 0xd3, 0x3f, 0xc1, 0x09, 0x75, 0x5e, 0x5c, 0x45, 0x10, 0x77, - 0x2b, 0x82, 0x2d, 0xec, 0x68, 0xd7, 0xe6, 0x2a, 0xaf, 0xe0, 0x8a, 0xba, 0xe5, 0xf0, 0x51, 0xdd, - 0x99, 0xf8, 0xf0, 0x00, 0x09, 0xef, 0x77, 0xb5, 0x72, 0x8c, 0x08, 0x9f, 0x76, 0x56, 0x4f, 0xac, - 0xd1, 0x7d, 0x7a, 0x3c, 0xbe, 0xa5, 0x4f, 0xab, 0xbe, 0xa7, 0x4f, 0xaf, 0x7d, 0x7b, 0xeb, 0x55, - 0xd7, 0xaf, 0x9f, 0xaf, 0xa4, 0x93, 0x4d, 0x7a, 0xc5, 0x3f, 0x5e, 0xf8, 0x24, 0x14, 0xee, 0xee, - 0xff, 0x77, 0x73, 0xfa, 0x3f, 0x05, 0xc5, 0x55, 0x32, 0x89, 0x6c, 0x8a, 0x69, 0xd5, 0x70, 0x8e, - 0xec, 0x37, 0x18, 0xf7, 0x02, 0x13, 0xe6, 0xcb, 0x65, 0x96, 0xf1, 0x30, 0x56, 0x2c, 0x71, 0x8d, - 0x98, 0xe9, 0xcb, 0x3b, 0xd4, 0xd0, 0xef, 0x7e, 0x16, 0xc3, 0xc3, 0xa2, 0x87, 0x63, 0xbf, 0xc4, - 0x82, 0xea, 0x4c, 0x02, 0x43, 0xb8, 0xed, 0xbb, 0x0f, 0x39, 0x41, 0xe2, 0x41, 0x69, 0x84, 0x58, - 0x1e, 0x7a, 0x2b, 0x86, 0x0b, 0x6c, 0x19, 0xe5, 0x7f, 0xfa, 0xb9, 0xf0, 0x43, 0x15, 0xbb, 0xbb, - 0xfc, 0x79, 0x08, 0x63, 0x1e, 0xd5, 0x68, 0xd6, 0x9f, 0xaf, 0xfe, 0x0a, 0xca, 0xc2, 0x45, 0x5a, - 0xb5, 0xc5, 0xd4, 0x76, 0xf8, 0x22, 0xb1, 0x89, 0x6a, 0x3d, 0x53, 0x59, 0x97, 0xc1, 0x11, 0x45, - 0xc4, 0xe8, 0xb2, 0x38, 0xdf, 0x05, 0x5d, 0x5e, 0x2e, 0x40, 0x40, 0x11, 0x79, 0x17, 0x55, 0x17, - 0x2f, 0xfb, 0xd5, 0x8f, 0xc4, 0x82, 0x98, 0x3b, 0x6b, 0x19, 0x8b, 0xb0, 0x31, 0x8f, 0x1b, 0x0b, - 0xcf, 0x8f, 0x0c, 0x04, 0xe6, 0x30, 0x52, 0xf1, 0x21, 0x43, 0x6e, 0xd6, 0x5d, 0xea, 0xdc, 0x5c, - 0x5e, 0xa3, 0x1b, 0xe0, 0x96, 0xf7, 0xbd, 0x3a, 0x35, 0xfb, 0x3a, 0x44, 0xc7, 0x82, 0xf0, 0xa4, - 0x18, 0xfe, 0xa4, 0xe2, 0x0d, 0x06, 0x96, 0x3a, 0x80, 0x67, 0xd0, 0x5b, 0x0c, 0xf0, 0x86, 0xf1, - 0x83, 0x40, 0x34, 0x5e, 0x78, 0x27, 0x2c, 0x32, 0x83, 0x60, 0xf7, 0xce, 0x1e, 0x4e, 0xbd, 0x78, - 0xef, 0xc1, 0x4c, 0xdc, 0x60, 0xe0, 0x16, 0xe4, 0x5e, 0xf6, 0xac, 0xae, 0x3a, 0xaa, 0x27, 0x2a, - 0x5a, 0x9c, 0xfa, 0xb7, 0xc1, 0x34, 0x72, 0x5b, 0x68, 0x4a, 0xc8, 0x5b, 0x80, 0x38, 0x52, 0x00, - 0x44, 0x2e, 0xe2, 0x20, 0xaf, 0xb6, 0x5e, 0x29, 0xb8, 0x82, 0x29, 0xb0, 0x82, 0x50, 0xc0, 0x46, - 0xa8, 0x99, 0x17, 0x73, 0xa2, 0x88, 0xed, 0x70, 0x49, 0x42, 0xcd, 0xa6, 0x6b, 0xe8, 0x8e, 0x7c, - 0x60, 0xc7, 0xac, 0xed, 0x95, 0xeb, 0x89, 0x61, 0xb2, 0x55, 0x1f, 0xf1, 0x0c, 0x70, 0xa8, 0xdc, - 0xf1, 0x62, 0x5f, 0x58, 0xd1, 0x8a, 0x52, 0x5e, 0xba, 0xe5, 0x7d, 0x6b, 0xeb, 0x15, 0xf5, 0xe8, - 0xae, 0x6a, 0x89, 0x84, 0x02, 0xe5, 0x3a, 0xf8, 0xd1, 0x03, 0x20, 0x00, 0x48, 0x9a, 0x8b, 0x1b, - 0x8d, 0x94, 0x44, 0x59, 0xb2, 0x39, 0xe5, 0x6e, 0xca, 0xba, 0xf9, 0xb1, 0x75, 0x84, 0x2f, 0xf0, - 0xb4, 0xff, 0xf0, 0x51, 0x55, 0xaa, 0xaa, 0xab, 0xfc, 0x11, 0x15, 0x53, 0x6f, 0xdf, 0x47, 0xb5, - 0x70, 0x46, 0x21, 0xb2, 0x0e, 0x5b, 0xff, 0x88, 0x43, 0x53, 0xaf, 0x44, 0xf7, 0xd5, 0xbc, 0x48, - 0x21, 0xba, 0x5f, 0xfe, 0xb8, 0xb8, 0x98, 0xc8, 0xf0, 0xf8, 0x97, 0xc4, 0x90, 0xc7, 0x8e, 0xc2, - 0x8e, 0xde, 0x7f, 0x3a, 0x85, 0x3e, 0x68, 0xb7, 0xe1, 0x4c, 0x8b, 0x91, 0x21, 0xdc, 0x22, 0x8b, - 0x73, 0x1d, 0xdb, 0x8a, 0x3e, 0xef, 0xf3, 0xc4, 0x82, 0xb2, 0x65, 0xc8, 0x91, 0x62, 0x5b, 0x97, - 0xd3, 0x8e, 0xc7, 0x78, 0x98, 0x50, 0xa9, 0x3d, 0xc7, 0xf4, 0x68, 0x00, 0x05, 0x6a, 0x23, 0x46, - 0x0a, 0xcc, 0xc0, 0xf7, 0x95, 0x0c, 0x28, 0x03, 0x95, 0xe7, 0xe2, 0x61, 0x29, 0xa9, 0xdd, 0x6f, - 0xc4, 0xc1, 0x61, 0x13, 0xb8, 0xad, 0x8c, 0xfe, 0x50, 0x40, 0x3b, 0xda, 0xee, 0x22, 0x08, 0xe2, - 0xe2, 0xea, 0x23, 0xe2, 0xf8, 0x50, 0x48, 0x56, 0x30, 0xa6, 0x02, 0x9c, 0x93, 0x7b, 0xd0, 0x6c, - 0xdd, 0x07, 0x3e, 0x40, 0x52, 0x80, 0xb8, 0xef, 0xc2, 0x93, 0x82, 0x48, 0x08, 0x05, 0xac, 0x12, - 0x0e, 0x03, 0x88, 0x28, 0x95, 0xd9, 0x11, 0x0b, 0x44, 0x44, 0x0d, 0x06, 0x9e, 0x12, 0x82, 0x16, - 0xee, 0xcd, 0x58, 0xdb, 0xb5, 0x13, 0xc2, 0x01, 0x7b, 0xbe, 0xf1, 0x20, 0x97, 0x60, 0x6c, 0x65, - 0x22, 0x77, 0x61, 0x78, 0xe4, 0x2f, 0xe5, 0x4e, 0xbf, 0x82, 0x4b, 0xee, 0x54, 0xfa, 0xf7, 0xcd, - 0x7b, 0xfc, 0x55, 0x44, 0xf8, 0xbb, 0xb9, 0x08, 0x34, 0x75, 0xe2, 0x46, 0x6e, 0xe3, 0xa0, 0xf2, - 0x2f, 0x77, 0x17, 0x17, 0x25, 0xdc, 0x31, 0x99, 0x78, 0xab, 0x60, 0xe5, 0x5a, 0xc4, 0x96, 0x23, - 0x03, 0x18, 0xab, 0x33, 0xd4, 0xe0, 0xf8, 0x23, 0x21, 0x18, 0x17, 0x36, 0x4b, 0x7d, 0x13, 0xbe, - 0x0b, 0x4e, 0xaa, 0xb2, 0x8c, 0x1d, 0x28, 0xbe, 0x32, 0xf8, 0xad, 0xdd, 0xea, 0xa6, 0xc7, 0x62, - 0xac, 0xaf, 0x82, 0x21, 0x0d, 0xc7, 0x5e, 0xae, 0x8f, 0x19, 0x5c, 0xc7, 0xaa, 0xaf, 0x82, 0x43, - 0x5d, 0xd6, 0x57, 0xd6, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x2a, 0x15, 0x30, 0x52, 0x87, - 0x70, 0x00, 0xe2, 0x42, 0x75, 0x23, 0x51, 0x34, 0x95, 0x27, 0x42, 0x3e, 0x5d, 0xc7, 0x6e, 0xdb, - 0xd6, 0xdc, 0x79, 0x79, 0x78, 0xab, 0x13, 0xf8, 0xb8, 0x0a, 0x00, 0x80, 0x40, 0x17, 0xeb, 0xe1, - 0xdc, 0x00, 0x57, 0xb9, 0xce, 0x45, 0x97, 0x8f, 0xd4, 0x2a, 0x0e, 0x14, 0x3e, 0x3c, 0x7a, 0x93, - 0x0d, 0xc5, 0x38, 0x60, 0x23, 0x31, 0xe6, 0xbd, 0xf8, 0x73, 0x01, 0xaa, 0x04, 0x44, 0x00, 0xc4, - 0x9b, 0x38, 0xe8, 0x8f, 0x5e, 0x91, 0x67, 0x18, 0xb7, 0x6d, 0x66, 0x0b, 0xf1, 0x7e, 0xa2, 0x36, - 0x5e, 0xf5, 0xae, 0x19, 0xc0, 0x75, 0x98, 0x12, 0x67, 0xfe, 0xff, 0x22, 0x1a, 0x2a, 0x1d, 0xc0, - 0x04, 0x70, 0x57, 0x19, 0x03, 0xc6, 0x15, 0xd6, 0xbe, 0x21, 0xed, 0xe5, 0xe5, 0xdf, 0xcb, 0x48, - 0xac, 0xb1, 0xbd, 0xbf, 0xe1, 0xdc, 0x02, 0x94, 0xa1, 0x79, 0xa0, 0x01, 0x1f, 0xbd, 0xf9, 0x76, - 0x2e, 0x20, 0x68, 0x59, 0xad, 0x65, 0x8c, 0x53, 0x10, 0xf2, 0xf5, 0x89, 0xf8, 0x82, 0xe2, 0x56, - 0xfd, 0x6b, 0x0c, 0xca, 0x03, 0x1e, 0x33, 0xcf, 0x5f, 0xff, 0x96, 0x18, 0xc0, 0xc4, 0x42, 0x46, - 0x7a, 0xff, 0xf7, 0xc3, 0xb2, 0x00, 0x04, 0x1c, 0x22, 0xae, 0xa7, 0x33, 0x05, 0xf0, 0xa7, 0x57, - 0xed, 0xde, 0xe0, 0xc5, 0xf5, 0x47, 0x1f, 0x8e, 0x37, 0x01, 0x01, 0x0d, 0xcb, 0xaa, 0x7b, 0xe1, - 0xdc, 0x00, 0x1a, 0xc9, 0xb6, 0x81, 0x15, 0xeb, 0xd1, 0x1e, 0x30, 0xbc, 0xe7, 0xbb, 0x7c, 0x83, - 0xb7, 0xbb, 0xa6, 0x0e, 0xdd, 0xdc, 0x1f, 0xf1, 0xff, 0xc1, 0xff, 0x10, 0x66, 0x27, 0x6b, 0xb6, - 0xfa, 0x70, 0xe2, 0x80, 0x5b, 0xc3, 0x22, 0x04, 0x69, 0x40, 0xfa, 0xad, 0x29, 0x9b, 0xbb, 0x8b, - 0x62, 0xdd, 0x79, 0x77, 0xcd, 0xeb, 0x07, 0x6e, 0x5a, 0xcb, 0x58, 0x32, 0xa2, 0x5d, 0x3d, 0x36, - 0xf6, 0xe1, 0x4c, 0x00, 0x84, 0xcf, 0xf4, 0x60, 0x8f, 0xd1, 0x77, 0xa3, 0x07, 0x6f, 0x2f, 0xff, - 0xc3, 0x38, 0x08, 0xc2, 0xd6, 0x81, 0x95, 0x3b, 0xea, 0x9f, 0x6f, 0x6f, 0x79, 0x7b, 0x66, 0xe7, - 0x3e, 0x4a, 0x8c, 0xa1, 0x99, 0x40, 0x0c, 0xaa, 0xbb, 0xc3, 0xf4, 0x7b, 0xab, 0xae, 0xbf, 0xcf, - 0x86, 0x64, 0x00, 0x13, 0x73, 0x41, 0xaa, 0x5c, 0x50, 0x8d, 0xdc, 0xf7, 0x2f, 0x37, 0xae, 0x72, - 0xf6, 0xeb, 0x8c, 0xb4, 0x97, 0x8e, 0xec, 0x2b, 0x80, 0x0e, 0xf3, 0x68, 0x3f, 0x73, 0xae, 0x79, - 0x5e, 0xeb, 0x17, 0xde, 0x88, 0x5e, 0xcb, 0x0c, 0xe0, 0x05, 0x5a, 0x00, 0x66, 0xb8, 0x0e, 0x10, - 0x27, 0x9a, 0xf3, 0xc0, 0xb0, 0x7c, 0x2c, 0xf6, 0x11, 0x5b, 0x96, 0x62, 0xb2, 0xc7, 0x62, 0x06, - 0x09, 0xb1, 0xb0, 0x99, 0xe0, 0x07, 0x29, 0x54, 0x67, 0x7c, 0x66, 0x2b, 0x1f, 0xf1, 0x11, 0x01, - 0xc1, 0xe8, 0xdc, 0x50, 0x1f, 0x62, 0x62, 0x5e, 0x37, 0x37, 0x1f, 0xf1, 0xbe, 0xf8, 0xd9, 0x03, - 0x4f, 0x36, 0x22, 0x44, 0xe3, 0x62, 0x45, 0x0f, 0xb1, 0xb2, 0x08, 0x78, 0xec, 0x7e, 0x15, 0x88, - 0x0f, 0x30, 0xd5, 0xb9, 0x37, 0xfb, 0xfc, 0x46, 0x06, 0xb8, 0x87, 0xe3, 0x4c, 0x2e, 0x2e, 0x29, - 0x8b, 0x83, 0xcf, 0x96, 0x00, 0xce, 0x79, 0xc0, 0x00, 0xf1, 0x4c, 0x53, 0x10, 0x70, 0xee, 0x1c, - 0xf3, 0x80, 0x1f, 0x19, 0xe0, 0x0e, 0x08, 0x10, 0x1e, 0x24, 0x59, 0x28, 0xbf, 0xc3, 0xb8, 0x01, - 0x39, 0x5d, 0xd1, 0x56, 0xd7, 0x57, 0x72, 0x68, 0xcb, 0x58, 0x3b, 0xf0, 0x77, 0xfb, 0xe2, 0xba, - 0x6d, 0x29, 0x76, 0x31, 0xa5, 0xbc, 0x52, 0x87, 0x1d, 0x32, 0x54, 0xb4, 0x5f, 0xdf, 0x0e, 0x60, - 0x03, 0xa9, 0x87, 0xe2, 0x40, 0x59, 0xb5, 0x6f, 0x2e, 0x2a, 0xdc, 0xb0, 0x07, 0x6f, 0x09, 0xf1, - 0x2e, 0xd2, 0xbf, 0x0e, 0x2b, 0xc3, 0x6c, 0xf7, 0x8e, 0xdc, 0x24, 0x94, 0x3a, 0x63, 0x57, 0x79, - 0xdb, 0xc3, 0x98, 0x09, 0x40, 0x93, 0xf1, 0x30, 0xf2, 0x85, 0x98, 0xdd, 0x0b, 0xae, 0xce, 0x9e, - 0x2e, 0x2d, 0x8b, 0x6e, 0xa1, 0xb8, 0xb1, 0x3f, 0xed, 0x3f, 0x87, 0x70, 0x03, 0x6a, 0xfc, 0xda, - 0xbf, 0xb1, 0x34, 0xdb, 0x3f, 0xf2, 0xff, 0x4e, 0xdd, 0xe6, 0x3b, 0x69, 0xfc, 0x3b, 0x80, 0x13, - 0xc1, 0x5a, 0xf2, 0xa9, 0x33, 0xfc, 0x5f, 0x1c, 0xbc, 0x5e, 0xda, 0x8a, 0xb6, 0xdf, 0xec, 0xdf, - 0x58, 0xc7, 0xdf, 0x1d, 0xf3, 0x78, 0xf6, 0xfe, 0x1c, 0x50, 0x01, 0x49, 0xba, 0x0f, 0xa9, 0x48, - 0x12, 0xb1, 0xbe, 0x1c, 0x7f, 0x89, 0xf4, 0xcb, 0x79, 0x7d, 0x44, 0xfa, 0xb3, 0x82, 0x5a, 0xd6, - 0x5f, 0xf0, 0xee, 0x00, 0x1f, 0x59, 0x14, 0xcf, 0xd0, 0x60, 0x9a, 0x06, 0xfe, 0x2c, 0xbc, 0x56, - 0x5e, 0x5f, 0xb7, 0x77, 0x2f, 0xa6, 0x4e, 0xce, 0x09, 0xb4, 0xdf, 0xcb, 0x5f, 0x87, 0x30, 0x01, - 0xae, 0x79, 0x8f, 0x70, 0x94, 0x24, 0xfd, 0x77, 0x26, 0x5e, 0x6e, 0xea, 0xc9, 0xb9, 0x65, 0x97, - 0x67, 0x7f, 0xb7, 0x6d, 0xb6, 0xc6, 0x05, 0x74, 0x63, 0xfc, 0xbf, 0xbf, 0x86, 0x70, 0x25, 0x6f, - 0xab, 0xef, 0xae, 0xdf, 0xff, 0xab, 0x9d, 0x58, 0x77, 0x00, 0x38, 0x51, 0xa2, 0x02, 0x61, 0x02, - 0xa0, 0xac, 0x5c, 0xbc, 0x7d, 0xf5, 0x4e, 0xfd, 0x70, 0xdd, 0xd6, 0xf6, 0xfe, 0x1d, 0xc0, 0x11, - 0x89, 0xf6, 0xbd, 0x46, 0xfc, 0x76, 0xdb, 0x66, 0x9d, 0xe9, 0xaf, 0x13, 0x29, 0xd5, 0xfe, 0x19, - 0xc0, 0x07, 0x2a, 0x52, 0x4a, 0x67, 0xbe, 0x66, 0xa4, 0xfd, 0x3f, 0x6d, 0xbf, 0x1e, 0x58, 0x57, - 0x00, 0x2f, 0x49, 0x1d, 0xe4, 0x23, 0xff, 0x82, 0x79, 0xfe, 0x6e, 0xfe, 0x9d, 0xb6, 0xe1, 0xcc, - 0x00, 0x4f, 0x6c, 0x57, 0x58, 0xbb, 0xbd, 0xf1, 0xb9, 0xb0, 0xdf, 0x7d, 0xba, 0x7a, 0xc1, 0x2d, - 0xc9, 0xff, 0x1b, 0x38, 0x11, 0x32, 0x0e, 0x56, 0x32, 0x61, 0xd9, 0x80, 0x07, 0xc8, 0x31, 0xeb, - 0x7e, 0x29, 0x21, 0x86, 0xfe, 0x1b, 0xe2, 0xd6, 0x58, 0xd4, 0x2e, 0xf5, 0x31, 0xf7, 0x2e, 0xc7, - 0x79, 0xb4, 0xc2, 0xc3, 0xc5, 0x19, 0x4e, 0x74, 0xfe, 0xad, 0x51, 0xc0, 0xeb, 0x4d, 0x1f, 0x1f, - 0xbf, 0x81, 0xc0, 0x02, 0x40, 0x09, 0xa0, 0xf3, 0xc6, 0xe8, 0xe8, 0x1f, 0x7f, 0x18, 0xe0, 0x06, - 0x31, 0xd7, 0xfa, 0xb1, 0xa0, 0xdc, 0x09, 0x10, 0x5a, 0x3d, 0x57, 0x55, 0xc7, 0x00, 0x1b, 0xe8, - 0x83, 0x80, 0xef, 0xa8, 0xe0, 0x36, 0x27, 0x6a, 0x36, 0x24, 0xd9, 0xd8, 0x5e, 0x12, 0x00, 0x9c, - 0x55, 0xdb, 0xa0, 0x48, 0x02, 0x6a, 0x8d, 0xbd, 0x63, 0x4d, 0x34, 0xcb, 0xd6, 0xb4, 0xcb, 0x71, - 0x46, 0x0a, 0x30, 0x48, 0xe1, 0x72, 0x40, 0x89, 0x56, 0x27, 0x7d, 0xd5, 0x97, 0xa8, 0x1d, 0xd6, - 0x88, 0x8f, 0x30, 0xbe, 0x1b, 0xc0, 0x06, 0x0a, 0xa3, 0x32, 0x20, 0xdf, 0xbf, 0xbb, 0xf7, 0x6f, - 0xbb, 0x75, 0x75, 0x4d, 0x97, 0xff, 0x09, 0xe0, 0x10, 0xf2, 0x9d, 0x55, 0xbf, 0xd3, 0xdf, 0xe1, - 0x35, 0x08, 0x66, 0x79, 0xd7, 0xad, 0x7a, 0xd6, 0x1c, 0xc0, 0x05, 0xfa, 0x2c, 0xe3, 0x11, 0x84, - 0xcb, 0xfc, 0x5f, 0xda, 0x62, 0xf2, 0x7a, 0x69, 0xff, 0xe4, 0xdf, 0x4d, 0x79, 0xdc, 0x31, 0x42, - 0x17, 0x50, 0x01, 0x01, 0x86, 0x9d, 0x49, 0x00, 0xa6, 0x8c, 0x7e, 0xdf, 0x6d, 0xb6, 0xdc, 0xfd, - 0xcb, 0x65, 0xad, 0xb6, 0xd4, 0x3c, 0x70, 0xdd, 0x70, 0x07, 0xb0, 0x01, 0x18, 0x0a, 0x41, 0xa8, - 0x00, 0xd4, 0xa8, 0xea, 0x55, 0x03, 0x51, 0xd5, 0xcf, 0x03, 0xce, 0x0f, 0x2c, 0x00, 0xcb, 0x03, - 0x3c, 0x1e, 0x4b, 0x52, 0xc0, 0x19, 0x6b, 0x38, 0x0e, 0x1c, 0x7c, 0xc4, 0x30, 0x00, 0x0f, 0xc6, - 0x80, 0x05, 0x43, 0xc4, 0x80, 0x8b, 0x22, 0x46, 0x61, 0x0a, 0xa2, 0xb7, 0x75, 0x2f, 0xbb, 0x79, - 0x46, 0x4f, 0x1a, 0xed, 0x8d, 0xe5, 0xef, 0xf8, 0x63, 0x00, 0x61, 0xea, 0x2d, 0xf7, 0x6f, 0xfd, - 0x34, 0xde, 0x5e, 0x9d, 0x1d, 0xc2, 0x92, 0x80, 0x9c, 0x6b, 0xdf, 0x2f, 0xfd, 0xbf, 0xc3, 0x08, - 0x80, 0x04, 0x27, 0x31, 0x5d, 0x95, 0x85, 0xe0, 0xf7, 0xd9, 0xff, 0xbb, 0x67, 0xf2, 0xc3, 0x4e, - 0x03, 0x0b, 0xb8, 0x0d, 0x4c, 0x3a, 0x3d, 0xb7, 0xb7, 0x7d, 0x9e, 0x35, 0x3f, 0xca, 0x8c, 0xa1, - 0x52, 0x40, 0x21, 0xde, 0x2e, 0x66, 0xdf, 0xfd, 0x35, 0xae, 0x19, 0x70, 0x5d, 0x24, 0x1e, 0xeb, - 0xee, 0xdc, 0xd1, 0xde, 0xe6, 0x18, 0xc0, 0x05, 0x37, 0xe8, 0xe3, 0x4c, 0xb3, 0xfd, 0x5d, 0xc9, - 0x1c, 0x4e, 0x61, 0xb0, 0xc6, 0xc8, 0xa5, 0x8d, 0xcd, 0xf0, 0xbe, 0x03, 0x07, 0xeb, 0x7d, 0x7b, - 0xfe, 0x78, 0x44, 0x83, 0x0f, 0xbe, 0x31, 0x04, 0x49, 0xb5, 0x88, 0x51, 0x5c, 0x72, 0x20, 0x95, - 0x47, 0x63, 0xb4, 0xfd, 0x89, 0xf1, 0x6e, 0x6c, 0xd9, 0x8e, 0xc7, 0x99, 0x56, 0x29, 0x42, 0xb9, - 0x51, 0x8a, 0x4c, 0x7c, 0x51, 0x2f, 0x18, 0xcc, 0x58, 0xc5, 0x8a, 0xd9, 0xc3, 0xb3, 0x00, 0x06, - 0x47, 0xea, 0xbf, 0x57, 0xff, 0xff, 0xff, 0xe0, 0xda, 0xee, 0xf5, 0xf8, 0x78, 0x90, 0x01, 0x73, - 0x65, 0x21, 0x75, 0x7f, 0x0e, 0xc1, 0x3a, 0x37, 0x89, 0x3c, 0xa2, 0xd6, 0x38, 0x9f, 0xf1, 0x78, - 0xd9, 0x5f, 0xa6, 0xe0, 0x18, 0x23, 0x05, 0x1b, 0xe1, 0xbe, 0x9e, 0x1e, 0xc0, 0x13, 0xe7, 0x9b, - 0x67, 0xbc, 0x99, 0xba, 0xbf, 0xbe, 0x5e, 0xb8, 0x6d, 0x8a, 0x0c, 0xf6, 0xdf, 0xe1, 0xc5, 0x00, - 0xce, 0x18, 0xc4, 0x97, 0x28, 0xc5, 0xb1, 0xcf, 0x1f, 0x7c, 0x7f, 0xcb, 0x2e, 0x7f, 0xe3, 0x7c, - 0xfa, 0xb7, 0x9d, 0xa9, 0x54, 0x5d, 0x6b, 0xf0, 0xf2, 0x80, 0x1e, 0x6c, 0x8c, 0x14, 0x1e, 0xcf, - 0xbb, 0x13, 0xcc, 0x43, 0xf1, 0x58, 0x3b, 0xf9, 0x8e, 0xde, 0xe7, 0x3e, 0xe4, 0xbc, 0x94, 0xf8, - 0x6d, 0xc0, 0x07, 0x33, 0xfc, 0x42, 0xee, 0x28, 0xa5, 0x96, 0xb1, 0x45, 0x97, 0xb3, 0x96, 0xb2, - 0xd6, 0x3e, 0xe5, 0x97, 0x37, 0x6c, 0xbc, 0x7d, 0xc7, 0x54, 0xbd, 0xd9, 0x6e, 0xff, 0x0f, 0x60, - 0x01, 0x2e, 0xe5, 0x93, 0x46, 0x68, 0xd4, 0x4d, 0x66, 0xbe, 0xbe, 0x2b, 0x89, 0x70, 0x9a, 0xb7, - 0x19, 0x7a, 0xc7, 0x1c, 0x82, 0x97, 0xcd, 0x7f, 0x87, 0x89, 0x00, 0xcc, 0xc7, 0x7a, 0x81, 0x7f, - 0xff, 0xb2, 0xbb, 0x39, 0x7a, 0xd7, 0x1b, 0xd7, 0x5e, 0xde, 0x37, 0xc2, 0xeb, 0x7f, 0xe1, 0xdc, - 0x00, 0xf5, 0x12, 0x20, 0x4b, 0x32, 0x13, 0xc0, 0xef, 0xe6, 0x92, 0xc7, 0x9f, 0x8f, 0x72, 0x77, - 0x78, 0x87, 0xb2, 0x9e, 0x17, 0x8e, 0xdf, 0xc3, 0x38, 0x04, 0x43, 0x63, 0xb8, 0x38, 0x36, 0xfb, - 0xf3, 0x76, 0xfb, 0x77, 0xec, 0x3b, 0x80, 0x0d, 0x45, 0xde, 0x73, 0xa9, 0x50, 0xdb, 0xee, 0xdc, - 0x1a, 0x2d, 0x5b, 0x9f, 0xf3, 0xd4, 0x7f, 0xf3, 0x72, 0x9b, 0xbe, 0x2b, 0x48, 0xe7, 0x29, 0xe8, - 0x6f, 0xff, 0x0e, 0xa2, 0x80, 0x23, 0xf7, 0x4e, 0x7f, 0xf9, 0xff, 0xf7, 0x51, 0x58, 0x9d, 0x15, - 0x72, 0x74, 0xfe, 0x1d, 0x44, 0x00, 0x13, 0xcf, 0x65, 0x03, 0x97, 0x08, 0xff, 0xd3, 0xa7, 0x6c, - 0xbe, 0xc6, 0xf8, 0xab, 0x72, 0xfe, 0x1e, 0xbe, 0x9e, 0x31, 0x0c, 0xe9, 0xfe, 0x1e, 0xc0, 0x0c, - 0xcd, 0x21, 0x31, 0x91, 0x57, 0xc0, 0xef, 0xcf, 0xf8, 0xce, 0xff, 0x4f, 0xfb, 0x63, 0x52, 0xa2, - 0xff, 0x0f, 0x28, 0x03, 0x29, 0xcf, 0x48, 0xf3, 0xea, 0xe2, 0xf5, 0xd3, 0x27, 0xca, 0x7f, 0x6f, - 0xe1, 0x85, 0x00, 0x62, 0x7e, 0x0e, 0xf5, 0x04, 0xff, 0xf6, 0xdb, 0xdb, 0x6f, 0x8b, 0x0b, 0xb2, - 0x82, 0x06, 0x80, 0xb9, 0xef, 0xaf, 0xff, 0xd6, 0x1c, 0x44, 0x00, 0x1b, 0xe2, 0xb6, 0x2e, 0x65, - 0x31, 0x5d, 0x6f, 0xf2, 0xc7, 0x2f, 0xff, 0xad, 0x17, 0xfc, 0x48, 0x26, 0xe0, 0xc4, 0xd7, 0x28, - 0x86, 0xad, 0xc3, 0x80, 0x00, 0xbe, 0x14, 0x40, 0x35, 0x00, 0x40, 0x16, 0x39, 0x84, 0xc6, 0x18, - 0xb6, 0x29, 0x4b, 0x91, 0x2b, 0x8c, 0x53, 0x63, 0x63, 0x91, 0x3d, 0x85, 0xe3, 0x80, 0x12, 0x3f, - 0x24, 0x75, 0xf7, 0xfe, 0xbe, 0x7f, 0xb6, 0x6e, 0xe6, 0x13, 0x24, 0x02, 0x46, 0x6c, 0x9b, 0xe7, - 0xfc, 0xd6, 0xb7, 0x77, 0xad, 0x5d, 0xc5, 0x78, 0x4f, 0x04, 0x69, 0x06, 0x72, 0xcd, 0x7d, 0xd6, - 0xbf, 0x84, 0xd4, 0x13, 0xa2, 0xb1, 0x27, 0xfe, 0xf7, 0xfc, 0x2a, 0x8a, 0x02, 0x5c, 0xd6, 0x15, - 0xf7, 0xff, 0x5c, 0x2c, 0x48, 0x01, 0xab, 0x2d, 0xc3, 0x32, 0xbb, 0xdf, 0xe7, 0xed, 0xbf, 0x5c, - 0x53, 0x89, 0xa2, 0x87, 0xa4, 0x00, 0x23, 0x80, 0x5d, 0x8a, 0xa8, 0x1a, 0xa2, 0xe8, 0xae, 0x5e, - 0x39, 0x83, 0xbe, 0x32, 0xfa, 0xd5, 0x31, 0x1f, 0x55, 0x5f, 0xf0, 0xf6, 0x00, 0x5e, 0x2c, 0x48, - 0x55, 0x3b, 0xaa, 0x1e, 0xb2, 0xce, 0x26, 0x1c, 0x32, 0x04, 0xe0, 0xe3, 0x14, 0xf0, 0xaf, 0x8a, - 0x3e, 0x1d, 0x5a, 0x6c, 0xe2, 0xdc, 0x6d, 0xf1, 0xc6, 0xae, 0xdb, 0xdd, 0x38, 0x6c, 0x90, 0x03, - 0x1f, 0xc3, 0xf6, 0xbb, 0x4f, 0xdf, 0xdc, 0x74, 0xfa, 0x9f, 0xfd, 0xbd, 0x9c, 0x7f, 0xe3, 0xdd, - 0xcb, 0x25, 0x3d, 0x7e, 0x13, 0xc0, 0x17, 0x7d, 0x8a, 0x83, 0xeb, 0x5f, 0xd6, 0xb0, 0xd9, 0x20, - 0x03, 0x44, 0x5b, 0x03, 0xc4, 0xe0, 0xea, 0x37, 0x5e, 0xfd, 0xdb, 0x77, 0xbb, 0xbb, 0xb9, 0x63, - 0x7f, 0xef, 0x0c, 0x28, 0x01, 0x33, 0x4d, 0x06, 0x51, 0x95, 0xce, 0xff, 0x07, 0xe2, 0xac, 0xb6, - 0x78, 0xb7, 0x7d, 0xfa, 0xd7, 0x1d, 0xc6, 0x18, 0x70, 0x01, 0xb9, 0x2a, 0xe5, 0xc8, 0x33, 0x3f, - 0x85, 0x53, 0x60, 0xdf, 0xc5, 0x97, 0x24, 0xe0, 0xf5, 0xcb, 0xb8, 0xd3, 0xe3, 0xe3, 0xa4, 0x79, - 0x85, 0x89, 0x00, 0x3f, 0xdf, 0x0f, 0x0b, 0xb2, 0x7b, 0x7b, 0x77, 0x57, 0xaf, 0x85, 0x30, 0x09, - 0x9b, 0x97, 0x5b, 0xf4, 0xe3, 0xd3, 0x07, 0xfe, 0xfb, 0x6d, 0xfc, 0x2c, 0xa0, 0x0f, 0xa8, 0x2e, - 0x7d, 0xaa, 0x02, 0x9c, 0xd5, 0xe9, 0x97, 0x96, 0xa2, 0xae, 0xcf, 0xde, 0xdb, 0xb9, 0x6d, 0xcb, - 0xe1, 0xbc, 0x02, 0x68, 0xc6, 0x56, 0x7a, 0x56, 0x5c, 0xa1, 0x43, 0xfb, 0x1f, 0x92, 0x71, 0x65, - 0x2b, 0x03, 0xcf, 0xf8, 0xf8, 0xd4, 0x3f, 0x5c, 0xec, 0xa0, 0x26, 0x63, 0x4a, 0x6a, 0x2e, 0x2c, - 0x40, 0x3f, 0xd8, 0xe5, 0x3a, 0x9e, 0xc6, 0x4b, 0x6c, 0x43, 0x10, 0x3e, 0xce, 0x28, 0x90, 0xb9, - 0x58, 0xe5, 0x26, 0x36, 0x26, 0x53, 0x6c, 0x5f, 0x8b, 0x18, 0x42, 0x63, 0x98, 0xc8, 0x56, 0x0e, - 0xa0, 0x52, 0x46, 0x21, 0x9e, 0xc3, 0xc4, 0x09, 0x00, 0x01, 0x34, 0xcb, 0x30, 0xcc, 0xe6, 0x00, - 0x8f, 0x7e, 0xfc, 0x7b, 0xa8, 0x8f, 0x24, 0x3e, 0x1e, 0xbb, 0x6e, 0x23, 0xd4, 0xef, 0x2c, 0xce, - 0x1c, 0xac, 0xb5, 0x96, 0x36, 0x3d, 0x6b, 0x58, 0x6d, 0xc0, 0x45, 0xda, 0x38, 0xd6, 0xfd, 0x6a, - 0xb3, 0xf9, 0xb2, 0x67, 0xb3, 0x2f, 0x4d, 0x33, 0x5d, 0xbf, 0xc2, 0xd8, 0x08, 0x39, 0xc4, 0xaf, - 0xf5, 0xaa, 0x69, 0xdb, 0xfa, 0x7c, 0x3b, 0x81, 0x2a, 0x6b, 0x43, 0xd3, 0xbf, 0x5d, 0x3f, 0x75, - 0x4d, 0x31, 0xbe, 0x1d, 0xb8, 0xad, 0x46, 0x95, 0x3f, 0x87, 0x5c, 0x01, 0x72, 0x4b, 0xc5, 0x65, - 0x2c, 0x32, 0xfc, 0x3e, 0xf6, 0xcd, 0xfd, 0xeb, 0xb1, 0x6c, 0xde, 0x3f, 0xe6, 0xcd, 0xe9, 0xf6, - 0xd3, 0xdb, 0x87, 0x89, 0x00, 0x0b, 0x2d, 0xf7, 0x15, 0x10, 0xbd, 0x5c, 0x5b, 0x9f, 0xea, 0x50, - 0xba, 0xad, 0xd6, 0xe9, 0xee, 0x9e, 0x69, 0x16, 0xe3, 0x0a, 0xbc, 0x7a, 0xcb, 0x2c, 0xa5, 0x70, - 0x9f, 0x77, 0x13, 0x22, 0x2b, 0x64, 0xed, 0xe7, 0xed, 0xe9, 0xc3, 0xce, 0x04, 0xcd, 0xee, 0x0d, - 0xea, 0x8e, 0xef, 0xec, 0xf7, 0xb7, 0x4f, 0x71, 0x57, 0x5e, 0x4a, 0xbf, 0xf0, 0xe3, 0x80, 0x31, - 0x86, 0x0b, 0xe8, 0xee, 0x7c, 0xda, 0xcd, 0xcb, 0x47, 0xd2, 0x38, 0xeb, 0x6f, 0x6d, 0xb1, 0x1d, - 0x77, 0x26, 0x3f, 0xf0, 0xde, 0x02, 0x06, 0x8d, 0x50, 0x7f, 0x77, 0x4d, 0x3f, 0xbd, 0xbf, 0x4e, - 0x30, 0x7f, 0xf0, 0xcb, 0x80, 0x4f, 0xe1, 0x6a, 0x1c, 0x78, 0x7d, 0x3a, 0x69, 0xaf, 0xf9, 0x94, - 0x61, 0x8c, 0x03, 0x01, 0x5a, 0x94, 0x60, 0x4e, 0x5e, 0xdb, 0x7f, 0xfb, 0x30, 0xe6, 0x01, 0x2b, - 0xd3, 0xb3, 0xff, 0xbd, 0x35, 0xc1, 0xaf, 0xf0, 0xee, 0x00, 0x80, 0x56, 0x2d, 0xe2, 0x7c, 0xfe, - 0x8b, 0xb9, 0x5f, 0xcf, 0xe7, 0xe6, 0xfd, 0x46, 0x4a, 0xf5, 0x2f, 0xf8, 0x5e, 0x52, 0x43, 0xfb, - 0x7f, 0x2f, 0x7d, 0xf0, 0xbc, 0x80, 0x06, 0x6f, 0xdc, 0x44, 0xaf, 0x4d, 0xad, 0x7d, 0x35, 0x4d, - 0x7c, 0xa0, 0xc6, 0x21, 0x21, 0x0e, 0x66, 0x1d, 0xd8, 0x77, 0x08, 0x59, 0xe5, 0x53, 0xdb, 0xff, - 0xff, 0xd3, 0xb7, 0xf8, 0x65, 0x88, 0x02, 0x11, 0x3a, 0x4a, 0xbf, 0xc6, 0xf8, 0xb5, 0xd8, 0x3e, - 0xeb, 0xf3, 0x98, 0x6c, 0x90, 0x03, 0xe4, 0x32, 0x94, 0xb4, 0xc1, 0x8c, 0xb3, 0x8e, 0xfc, 0x43, - 0x07, 0xc7, 0xc5, 0x79, 0x78, 0xa5, 0xef, 0x2b, 0x1f, 0xf7, 0xbe, 0x2e, 0x34, 0xd9, 0x81, 0x5f, - 0x80, 0xf8, 0x51, 0xa0, 0x02, 0x98, 0xd2, 0x1c, 0xd9, 0xc8, 0xa2, 0x17, 0x3c, 0x86, 0x20, 0xc3, - 0x71, 0xc0, 0x01, 0xd8, 0xa6, 0x43, 0x17, 0x68, 0xbf, 0x2c, 0x01, 0x4c, 0x19, 0x7c, 0x58, 0xb7, - 0x81, 0x85, 0x8a, 0x2c, 0xb1, 0x6d, 0xb6, 0x4e, 0xf3, 0x7e, 0x2d, 0xdc, 0x1f, 0xf0, 0xa3, 0xc3, - 0x00, 0x18, 0xe1, 0xaa, 0x6b, 0x7f, 0x0d, 0xe0, 0x01, 0xfb, 0xd8, 0xdc, 0x4c, 0xdb, 0x78, 0xe3, - 0x8b, 0xe0, 0x76, 0xe7, 0xf9, 0xfe, 0x79, 0xfc, 0x90, 0xa9, 0x67, 0x22, 0x9d, 0x71, 0x2f, 0x5c, - 0xaf, 0x7f, 0xc2, 0xf8, 0x01, 0x05, 0x71, 0xb4, 0x39, 0x0b, 0xeb, 0xe5, 0x84, 0xb0, 0x76, 0xc2, - 0xaf, 0x16, 0xb5, 0xb1, 0x77, 0x47, 0x70, 0x9b, 0x9a, 0x2b, 0x44, 0xe7, 0xeb, 0x5f, 0xc2, 0xb1, - 0x21, 0x88, 0x3b, 0xd5, 0xf7, 0xff, 0xc2, 0xec, 0x40, 0x01, 0x90, 0x2a, 0x1f, 0xc7, 0xb7, 0xd2, - 0x6e, 0xa3, 0x3d, 0x37, 0x7f, 0x2f, 0x53, 0xda, 0x28, 0xff, 0xc6, 0xb1, 0xc7, 0x76, 0x14, 0x67, - 0x00, 0x7b, 0x6f, 0xab, 0x13, 0x4f, 0x4c, 0x9f, 0xff, 0x85, 0x54, 0x09, 0x9b, 0x87, 0xd4, 0x37, - 0xa7, 0xff, 0xf0, 0xc2, 0x80, 0x3b, 0x99, 0xe1, 0xa4, 0xcb, 0x1a, 0xb7, 0x7f, 0xff, 0xb1, 0x8a, - 0x03, 0xd3, 0x35, 0xaa, 0xc2, 0xae, 0x1b, 0x5e, 0x5f, 0xaf, 0xff, 0x0d, 0x10, 0xc0, 0x23, 0x31, - 0xe1, 0x9c, 0x1f, 0x0b, 0x5e, 0x75, 0x0a, 0xb5, 0xc8, 0x96, 0x2e, 0x31, 0xec, 0x34, 0xe0, 0x20, - 0x49, 0xfd, 0xe9, 0xce, 0xbe, 0xde, 0x8e, 0x74, 0x78, 0x3f, 0xf3, 0x4b, 0x8e, 0x70, 0xe3, 0xeb, - 0xe2, 0x11, 0x42, 0x19, 0xd6, 0xa1, 0x9c, 0x11, 0x34, 0x5b, 0xf2, 0xdf, 0xff, 0xfa, 0xc3, 0x04, - 0x81, 0x3f, 0x9a, 0x16, 0xaf, 0xbf, 0xff, 0x16, 0x1a, 0x90, 0x00, 0xad, 0xe6, 0x05, 0x2e, 0x82, - 0xe0, 0xe9, 0x19, 0xd9, 0x7a, 0xc6, 0x5e, 0xa3, 0x9f, 0x96, 0x5a, 0xd5, 0x53, 0x16, 0xd3, 0x4d, - 0xb0, 0xba, 0x80, 0x01, 0x29, 0x01, 0x57, 0xe3, 0x2c, 0x67, 0xd1, 0x5f, 0x5b, 0x4f, 0xe0, 0xe7, - 0xe0, 0xff, 0x8f, 0xf8, 0xff, 0xa7, 0x2c, 0x2c, 0x1c, 0xfe, 0x73, 0x09, 0xb3, 0x82, 0x41, 0x95, - 0xb3, 0xff, 0x4f, 0xf0, 0xbb, 0x97, 0x3f, 0xff, 0xa6, 0xd8, 0x5a, 0x60, 0x00, 0x3c, 0xc9, 0x81, - 0x44, 0x1d, 0xa2, 0x10, 0x5d, 0xef, 0x5f, 0xd3, 0xc5, 0xb0, 0x70, 0x3b, 0x83, 0xd7, 0x2c, 0xb1, - 0xcd, 0xdb, 0xe1, 0x3c, 0x00, 0x52, 0x92, 0x87, 0xd9, 0x87, 0x69, 0x7b, 0xda, 0x6f, 0xe2, 0x1f, - 0x65, 0xb4, 0xf7, 0xc7, 0x42, 0x60, 0x52, 0x5d, 0x61, 0x9e, 0xc5, 0xa1, 0xb1, 0xd9, 0x14, 0x5a, - 0x09, 0x63, 0x98, 0xb5, 0xa4, 0xce, 0xf8, 0xb4, 0x51, 0x7e, 0x36, 0xa3, 0x10, 0xf8, 0xec, 0x4a, - 0x50, 0xdb, 0x0f, 0x00, 0x0c, 0xa1, 0x98, 0x35, 0xf8, 0x21, 0x5f, 0x7f, 0xc2, 0xbb, 0x74, 0xc4, - 0x1f, 0xb3, 0xe9, 0x93, 0xb6, 0x83, 0xee, 0x15, 0x78, 0xb1, 0x6f, 0xa0, 0x97, 0xf6, 0xff, 0x86, - 0xf0, 0x08, 0xe8, 0xe4, 0x47, 0xf2, 0xac, 0xdd, 0xf6, 0x7d, 0xa6, 0xcf, 0x1f, 0xdd, 0x31, 0x70, - 0x7b, 0xff, 0x87, 0x70, 0x01, 0xce, 0x7d, 0x09, 0x0a, 0xa7, 0xef, 0xeb, 0x5d, 0xd5, 0xb4, 0xdc, - 0x55, 0xb6, 0xea, 0x02, 0x3f, 0x48, 0x9b, 0xf0, 0xee, 0x00, 0x30, 0x8d, 0x81, 0xbc, 0xba, 0x88, - 0xff, 0xdf, 0x4d, 0x83, 0x8f, 0xc4, 0xbe, 0x37, 0xd6, 0x47, 0xaf, 0x1e, 0x23, 0xd3, 0xca, 0x3f, - 0x0e, 0x2b, 0x95, 0xbe, 0x29, 0xb8, 0x18, 0x5b, 0x19, 0x02, 0x75, 0x6a, 0xff, 0xfc, 0x3b, 0x80, - 0x08, 0xa1, 0x40, 0xec, 0x83, 0x51, 0x2d, 0xc7, 0xfd, 0xfb, 0x67, 0xf7, 0x76, 0x36, 0x00, 0xd1, - 0xf0, 0x55, 0xb8, 0xf6, 0x12, 0x12, 0x44, 0x7f, 0xa8, 0x53, 0x9f, 0xc3, 0xaa, 0x00, 0x45, 0xc3, - 0x5e, 0xc4, 0x7e, 0xb0, 0x11, 0x39, 0xff, 0x8e, 0x1f, 0x55, 0x31, 0x4b, 0xac, 0xb1, 0x60, 0xf7, - 0xe3, 0x8a, 0xaa, 0x20, 0x78, 0xf5, 0xee, 0x43, 0x71, 0x43, 0xea, 0xd3, 0xf2, 0xdf, 0xaf, 0xa7, - 0x0d, 0xe0, 0x01, 0x2a, 0xab, 0x5a, 0x28, 0x82, 0x2c, 0x17, 0xfa, 0x4e, 0xd2, 0x53, 0xf1, 0xaf, - 0xc5, 0x62, 0x2a, 0x55, 0xeb, 0xe1, 0xb5, 0x00, 0x0d, 0xf9, 0xe3, 0xb6, 0x53, 0x42, 0x6e, 0x1b, - 0xe2, 0xd6, 0x58, 0xe6, 0xe5, 0xb5, 0x2f, 0x66, 0x2d, 0xab, 0x64, 0xad, 0x7a, 0x63, 0x54, 0x64, - 0xbf, 0xe1, 0xb7, 0x00, 0x29, 0x89, 0xe4, 0x71, 0x09, 0xcf, 0x2e, 0x1f, 0xc5, 0x71, 0x5a, 0xb6, - 0x6e, 0x9e, 0x2d, 0x46, 0x6f, 0x5f, 0xc3, 0x8e, 0x00, 0xcb, 0xab, 0x23, 0x11, 0xbe, 0xd7, 0xfd, - 0x36, 0xdb, 0x4d, 0x36, 0xe4, 0x4e, 0x9f, 0xe2, 0xa7, 0x02, 0x26, 0xb8, 0xfe, 0x18, 0x98, 0x04, - 0xaf, 0xa2, 0x42, 0xa6, 0xbd, 0xdb, 0x6d, 0x34, 0xff, 0xf3, 0x61, 0xe2, 0x40, 0x07, 0xf7, 0x3c, - 0x91, 0xe2, 0xdc, 0xa0, 0xff, 0xe0, 0xfb, 0xcd, 0xbf, 0xf1, 0x6a, 0x5b, 0x7d, 0x3f, 0x86, 0x5c, - 0x02, 0x57, 0x3d, 0x95, 0xf3, 0xfd, 0xbf, 0x6e, 0x9a, 0x7e, 0x7b, 0x0e, 0x28, 0x00, 0x1d, 0xa9, - 0xb0, 0xf3, 0xd2, 0x81, 0x1e, 0xf2, 0x7e, 0xef, 0xe2, 0xaf, 0x2a, 0xf1, 0xde, 0xb8, 0xee, 0x93, - 0x96, 0x8d, 0xdf, 0xc2, 0xee, 0x00, 0x42, 0x6d, 0x5e, 0x93, 0xbf, 0x2f, 0xf6, 0xf5, 0xfe, 0xc3, - 0x33, 0x82, 0x6f, 0x8b, 0xb8, 0xff, 0x5f, 0xc6, 0xfb, 0x4a, 0xa1, 0xe6, 0x60, 0x00, 0xd1, 0x10, - 0x66, 0xcf, 0xc8, 0xe0, 0xe3, 0x4a, 0x38, 0xbf, 0x9f, 0x9f, 0xb6, 0x3a, 0xf8, 0xe2, 0xb9, 0xf8, - 0xeb, 0xf6, 0x73, 0xcf, 0x7e, 0xde, 0x98, 0x6b, 0xa0, 0x48, 0xab, 0x6d, 0xed, 0xbf, 0x03, 0x40, - 0x04, 0x80, 0x12, 0xcb, 0x00, 0x03, 0xb0, 0xd8, 0x00, 0x19, 0x18, 0x71, 0x60, 0x6a, 0x5a, 0xf0, - 0x75, 0xff, 0x01, 0xc0, 0x01, 0x1f, 0x8e, 0x20, 0xb8, 0xfb, 0x11, 0xe2, 0x89, 0xc7, 0x21, 0x36, - 0xc7, 0x23, 0x30, 0x7d, 0x85, 0xe3, 0x00, 0x04, 0x98, 0x57, 0x4e, 0xac, 0x21, 0x00, 0x3e, 0x26, - 0x4f, 0x97, 0x63, 0xef, 0x27, 0xea, 0x48, 0x97, 0xc2, 0x14, 0xc1, 0x60, 0x63, 0x01, 0x50, 0xee, - 0x00, 0xf9, 0x02, 0x26, 0xdc, 0x41, 0x10, 0x8e, 0xcd, 0xdd, 0xa3, 0x10, 0x7c, 0x65, 0xe7, 0x8c, - 0x24, 0xf1, 0x80, 0xa2, 0xfc, 0x98, 0x8f, 0xa8, 0x77, 0x3c, 0x3e, 0xf3, 0x9e, 0xde, 0x02, 0x0d, - 0xeb, 0xf0, 0xde, 0x00, 0x5f, 0xdf, 0x18, 0xc4, 0x2b, 0x3e, 0x8e, 0xfd, 0xf8, 0x9d, 0xd6, 0x6f, - 0x87, 0xd3, 0x52, 0xc2, 0x4b, 0x0c, 0x47, 0x9c, 0x07, 0xb3, 0x9c, 0x30, 0x2f, 0x38, 0x18, 0x17, - 0x83, 0xbb, 0x19, 0xef, 0xf9, 0xdc, 0xe6, 0xa7, 0x94, 0x26, 0x51, 0x69, 0x30, 0x9a, 0x20, 0x01, - 0x27, 0xc3, 0x91, 0x6a, 0x17, 0xdd, 0x5e, 0xf7, 0xbf, 0x3f, 0x6e, 0x13, 0x47, 0x04, 0xea, 0x20, - 0x2c, 0xe3, 0xff, 0x55, 0xfc, 0x2a, 0xa1, 0x11, 0x81, 0x23, 0x7f, 0xbf, 0xfc, 0xee, 0x08, 0x54, - 0xe9, 0xe8, 0x4e, 0x40, 0x08, 0x1e, 0xde, 0x1b, 0x69, 0xff, 0xfc, 0xfe, 0x1c, 0xc0, 0x05, 0xd3, - 0x83, 0x4a, 0xb0, 0x63, 0xce, 0xdd, 0xfb, 0xfc, 0xfc, 0x55, 0x9e, 0xf1, 0xc7, 0xe2, 0xad, 0xb2, - 0xc5, 0x83, 0xb7, 0x12, 0x68, 0x44, 0x96, 0x9a, 0x7b, 0x6d, 0xc3, 0x2e, 0x00, 0x22, 0xae, 0x21, - 0xf7, 0x8c, 0x16, 0xef, 0xf4, 0x57, 0x2f, 0xa6, 0xea, 0xde, 0xef, 0x2f, 0x65, 0x5b, 0xb3, 0x41, - 0xf9, 0x0d, 0xe0, 0x04, 0x21, 0xd0, 0xe6, 0x7b, 0x7b, 0xbd, 0x4b, 0xd6, 0xb6, 0xdc, 0xbe, 0x19, - 0xbd, 0xba, 0x0f, 0xe4, 0x63, 0xa7, 0xfb, 0x70, 0xa6, 0x01, 0x38, 0x74, 0x81, 0x0e, 0x86, 0xa6, - 0xe9, 0xc7, 0xa6, 0x9b, 0x6d, 0xca, 0xcd, 0xf8, 0x53, 0x00, 0x28, 0x19, 0x6e, 0x5d, 0x4b, 0x1f, - 0x74, 0xed, 0xdc, 0xd4, 0xc9, 0x42, 0xea, 0x69, 0xb7, 0x6e, 0x15, 0x50, 0x02, 0xad, 0x3c, 0xb5, - 0x15, 0xff, 0x9f, 0x8a, 0xb5, 0x83, 0xb7, 0x37, 0x85, 0x65, 0x02, 0x26, 0xf4, 0x8f, 0xff, 0xe9, - 0xc2, 0x8c, 0x80, 0x11, 0xb3, 0x94, 0x8a, 0xdf, 0xf7, 0xa6, 0xdf, 0xdb, 0xc2, 0x98, 0x03, 0x7c, - 0x51, 0xe7, 0x70, 0xc4, 0x8a, 0x2b, 0x9b, 0xdb, 0xee, 0xdb, 0xc7, 0xff, 0x74, 0xd3, 0xcb, 0xdb, - 0xd3, 0x2e, 0xe1, 0xac, 0x01, 0x4c, 0xca, 0x0b, 0x14, 0xe0, 0xa3, 0xa2, 0xe3, 0xde, 0x37, 0x9f, - 0xdd, 0x8a, 0xb6, 0xdb, 0x6d, 0xd5, 0x2c, 0xb8, 0xd3, 0x05, 0xc0, 0xc1, 0x9a, 0x00, 0x1d, 0xca, - 0xeb, 0x47, 0xe1, 0xa5, 0x00, 0x0a, 0xec, 0x25, 0xe5, 0x2d, 0x30, 0x62, 0x34, 0xe1, 0x7f, 0xf8, - 0x55, 0x9b, 0x80, 0xef, 0x21, 0x8b, 0x1b, 0x10, 0xf7, 0x85, 0xc9, 0x62, 0x78, 0xfa, 0xf0, 0x7b, - 0xac, 0xb5, 0x8a, 0xb2, 0xd6, 0x2a, 0xc5, 0x58, 0xab, 0x45, 0xaa, 0x1c, 0xc0, 0x07, 0x5e, 0x24, - 0x20, 0x7b, 0xb5, 0xb9, 0x56, 0x79, 0x30, 0x51, 0xb8, 0xf0, 0x1d, 0xae, 0xb3, 0xc0, 0x1d, 0x2a, - 0x00, 0xf5, 0xac, 0xf7, 0xfc, 0x05, 0xb3, 0x3c, 0x00, 0xcc, 0x66, 0xab, 0xc4, 0x74, 0x93, 0x7d, - 0x3f, 0x09, 0xb8, 0x03, 0xe3, 0x4d, 0xbc, 0x18, 0xed, 0xe4, 0x3e, 0xf4, 0x62, 0x8d, 0x0a, 0x32, - 0x77, 0xb9, 0xb2, 0xfd, 0xf5, 0xd6, 0xb8, 0xa5, 0xc4, 0x3e, 0x28, 0x82, 0xc3, 0xf9, 0x27, 0x9c, - 0x99, 0x0d, 0xa0, 0x90, 0x00, 0x45, 0x1b, 0x9a, 0x08, 0xbe, 0x62, 0x17, 0xf8, 0x37, 0x77, 0xcb, - 0x03, 0x8a, 0x07, 0x20, 0xbe, 0xb5, 0x9f, 0xc4, 0x30, 0x86, 0xf0, 0x00, 0x91, 0x44, 0x2b, 0x8a, - 0xe1, 0x2c, 0xc3, 0x45, 0xd8, 0xff, 0xfd, 0xbc, 0x43, 0xe3, 0x1e, 0xfe, 0x33, 0xdc, 0x00, 0x45, - 0x3e, 0x7a, 0xd9, 0x4c, 0x53, 0x16, 0x21, 0xcc, 0x1c, 0x00, 0xc0, 0x04, 0xe2, 0xa0, 0xd8, 0x1a, - 0x97, 0x9c, 0x00, 0xf0, 0x7b, 0xe7, 0x00, 0x0e, 0x17, 0x9c, 0x00, 0x04, 0x78, 0x39, 0x00, 0x30, - 0x48, 0xb0, 0xdb, 0x80, 0x3b, 0x3c, 0xfa, 0x3a, 0x08, 0xf7, 0x7c, 0xe6, 0xed, 0x6a, 0xaa, 0x3b, - 0xac, 0xfe, 0xa0, 0xed, 0xe4, 0x6e, 0x67, 0xa7, 0xf8, 0x7b, 0x00, 0x2d, 0x36, 0x99, 0x82, 0x79, - 0x2b, 0x14, 0x43, 0xd7, 0xd4, 0x1f, 0xf1, 0xf7, 0xb6, 0x7e, 0x5a, 0xeb, 0x2d, 0x66, 0xf1, 0x83, - 0xf6, 0xcd, 0xd6, 0x3f, 0x87, 0x70, 0x01, 0x5e, 0x4d, 0xa3, 0x70, 0x85, 0x77, 0xca, 0xda, 0xbe, - 0xe6, 0x35, 0xd9, 0x39, 0x3f, 0xf9, 0x1d, 0xc6, 0xdb, 0x7f, 0x86, 0x14, 0x02, 0xdd, 0xf3, 0x51, - 0x82, 0x07, 0x57, 0x5e, 0x57, 0xf1, 0x77, 0xf6, 0xdb, 0x7d, 0xb0, 0xdb, 0xf8, 0x79, 0x40, 0x19, - 0x2d, 0x34, 0x46, 0xff, 0x77, 0xa2, 0x1a, 0x17, 0x8a, 0xc5, 0xed, 0x9f, 0xfb, 0x77, 0xc4, 0xbc, - 0x11, 0x53, 0x4f, 0xf8, 0x5f, 0x00, 0xc9, 0xb0, 0xa3, 0x53, 0xeb, 0x17, 0xf5, 0x17, 0xaf, 0xd8, - 0x75, 0x40, 0x09, 0x12, 0x1d, 0xbf, 0x60, 0xce, 0x6e, 0x15, 0x9b, 0xbe, 0x6f, 0x5a, 0x71, 0x2e, - 0x08, 0xf8, 0xff, 0x8d, 0x54, 0xed, 0xaf, 0xc3, 0xaa, 0x00, 0xae, 0x27, 0x10, 0x1c, 0xde, 0x3d, - 0x19, 0xf8, 0xd3, 0xdb, 0x5a, 0xf8, 0x26, 0xb7, 0x7f, 0xc3, 0x98, 0x01, 0xc4, 0x76, 0x4e, 0xce, - 0x9b, 0xfe, 0xfa, 0xb7, 0x4f, 0x3f, 0x14, 0x5e, 0x28, 0xb3, 0x78, 0xad, 0xcd, 0x52, 0x57, 0xe1, - 0xec, 0x00, 0x9a, 0x81, 0x57, 0xb4, 0xa3, 0x6d, 0xfc, 0xdd, 0x3b, 0x6d, 0xb7, 0x70, 0xba, 0xb7, - 0x9f, 0xca, 0xb6, 0x3b, 0x75, 0x7f, 0x87, 0xb0, 0x01, 0x27, 0x89, 0x3a, 0xee, 0x17, 0xca, 0x1f, - 0x6d, 0xbc, 0x4b, 0xc1, 0xdf, 0xbe, 0xab, 0xd4, 0xaa, 0x94, 0xfd, 0x47, 0xdc, 0x32, 0x87, 0x69, - 0xa8, 0xda, 0xfc, 0x32, 0xe0, 0x0d, 0x51, 0xd8, 0x54, 0xe8, 0xee, 0x2b, 0x37, 0x73, 0xbe, 0xbb, - 0x3e, 0xd9, 0x7e, 0x2b, 0x4c, 0x2e, 0xe2, 0x80, 0xb9, 0xb7, 0x39, 0xfa, 0xfe, 0xa4, 0x6c, 0x30, - 0x43, 0x80, 0x4e, 0xfc, 0x2a, 0x9e, 0x7d, 0xbe, 0x2d, 0xff, 0xfc, 0x97, 0x0a, 0x60, 0x53, 0x99, - 0x29, 0x27, 0xff, 0xfe, 0x18, 0x21, 0x80, 0x09, 0x7a, 0xe6, 0xb5, 0x9f, 0xdf, 0xbb, 0xdb, 0xfe, - 0xb0, 0xe2, 0x80, 0x10, 0xc0, 0xc5, 0x4b, 0xd8, 0xe1, 0x1b, 0xbb, 0xa6, 0x5a, 0x45, 0x1d, 0x3d, - 0x31, 0x0f, 0x97, 0xc4, 0x6f, 0xf7, 0xe1, 0xb7, 0x00, 0x30, 0x80, 0x75, 0xe5, 0x35, 0x17, 0x73, - 0xbf, 0xde, 0x3d, 0xf1, 0x6e, 0x98, 0xb6, 0x2d, 0x95, 0x47, 0xf4, 0xd3, 0x85, 0xf0, 0x00, 0x83, - 0xd2, 0x77, 0xa7, 0x3f, 0xff, 0x07, 0x3f, 0x2f, 0xfc, 0xd9, 0xe3, 0x4d, 0x91, 0x0b, 0xe1, 0x05, - 0x1c, 0x00, 0x63, 0x9f, 0x08, 0xa2, 0x8e, 0x00, 0x04, 0x63, 0x87, 0x0d, 0xc2, 0x00, 0x04, 0x14, - 0xe3, 0x68, 0x70, 0x9f, 0xa2, 0x26, 0x45, 0x83, 0xa0, 0x78, 0x6f, 0x86, 0xdd, 0x00, 0x62, 0x7c, - 0x55, 0x58, 0xa5, 0x3d, 0x8b, 0x65, 0x79, 0xfd, 0xbc, 0x30, 0xa0, 0x03, 0x28, 0xcc, 0x57, 0x62, - 0x88, 0xb7, 0xff, 0xfe, 0xaf, 0x76, 0xfa, 0x7a, 0x69, 0xd3, 0x4c, 0x91, 0x11, 0xd0, 0x3f, 0x50, - 0xc6, 0x00, 0xd0, 0x38, 0x88, 0x88, 0xa0, 0xf8, 0x49, 0xc4, 0xcd, 0x4b, 0x6a, 0x25, 0xee, 0xf3, - 0x7b, 0x6b, 0xf9, 0xdf, 0x58, 0x80, 0xcc, 0x26, 0xe0, 0x97, 0x76, 0xe8, 0xb9, 0xff, 0xb7, 0xb7, - 0x85, 0xb0, 0x46, 0x12, 0x1d, 0x97, 0xff, 0xea, 0xf0, 0xd6, 0x00, 0x9b, 0x9a, 0x49, 0x8c, 0xfa, - 0xd7, 0xad, 0x7f, 0xb0, 0x9b, 0x28, 0x03, 0x0d, 0xf7, 0xdd, 0x7b, 0xfd, 0xef, 0xf8, 0x56, 0x50, - 0x9a, 0x73, 0xae, 0x9f, 0xff, 0xc4, 0xa3, 0x02, 0xc0, 0xd8, 0x9c, 0x3d, 0x80, 0x15, 0x86, 0xec, - 0x88, 0x71, 0x78, 0xe7, 0xcf, 0xe2, 0xbc, 0x55, 0x8a, 0x2d, 0xcf, 0xc1, 0xdf, 0x8e, 0xfc, 0x1a, - 0x70, 0x59, 0xe9, 0x93, 0xed, 0xf0, 0x62, 0x03, 0x64, 0x29, 0x2a, 0x20, 0xd6, 0x47, 0x4f, 0xca, - 0x8f, 0xfc, 0x1e, 0xf9, 0xe0, 0xf9, 0x2d, 0x97, 0x62, 0x07, 0x85, 0x05, 0x4b, 0x06, 0x30, 0x00, - 0x0c, 0xc6, 0x80, 0x70, 0xba, 0x80, 0xc2, 0xc2, 0xce, 0x42, 0x2f, 0xf5, 0x2b, 0xcd, 0x56, 0x55, - 0x1d, 0x66, 0xfd, 0x7e, 0x99, 0x43, 0x04, 0x80, 0x48, 0x7a, 0x7f, 0x69, 0x40, 0x8f, 0x3e, 0xe5, - 0xe9, 0x9f, 0xdd, 0xa2, 0x2d, 0x17, 0xf2, 0x14, 0x33, 0xd5, 0x12, 0xa9, 0x04, 0x8c, 0x18, 0xfc, - 0x3d, 0x80, 0x14, 0x7e, 0x58, 0x38, 0x11, 0xea, 0xa5, 0x8f, 0x63, 0x64, 0xec, 0xb6, 0x37, 0xae, - 0x6c, 0xde, 0x98, 0xee, 0xf7, 0xeb, 0x0d, 0x12, 0x22, 0x3e, 0x26, 0x75, 0x7e, 0xdb, 0x77, 0xff, - 0x7c, 0x38, 0x48, 0x01, 0x6b, 0x5d, 0xe3, 0x12, 0x09, 0x24, 0x19, 0x1b, 0xe3, 0xf8, 0x5f, 0xc7, - 0xe3, 0xab, 0x9f, 0xbc, 0x4b, 0xcf, 0x7d, 0x76, 0xa0, 0x86, 0x0b, 0xfe, 0xdf, 0x0b, 0xe0, 0x04, - 0xfc, 0x3e, 0x5b, 0x4d, 0x87, 0xe1, 0x2d, 0x31, 0xee, 0x27, 0xdb, 0xf1, 0xd5, 0xcf, 0xf6, 0x24, - 0x51, 0x70, 0xde, 0x3a, 0xbb, 0x66, 0x45, 0x50, 0xc6, 0x00, 0x6a, 0x7b, 0xc1, 0x43, 0xcd, 0xbd, - 0x3f, 0xfa, 0x69, 0x99, 0x15, 0x43, 0x44, 0x38, 0x0e, 0xc3, 0x78, 0x0b, 0xff, 0xdb, 0xf1, 0xf0, - 0xa2, 0x81, 0xe8, 0x7d, 0xfd, 0x3f, 0xf8, 0x79, 0x08, 0x00, 0x0c, 0x74, 0xdb, 0xe4, 0x4d, 0xaf, - 0x7f, 0xfc, 0xfc, 0x7e, 0x42, 0xab, 0x91, 0xcf, 0xf6, 0xe1, 0xe7, 0x00, 0x0a, 0xd6, 0x8c, 0x18, - 0x8e, 0x95, 0xd0, 0x9d, 0xf7, 0xfe, 0x5a, 0x83, 0xbf, 0x2d, 0xbf, 0x8e, 0xbf, 0x35, 0x8e, 0x2f, - 0xaf, 0x92, 0xb2, 0xd6, 0xaa, 0x4e, 0x8b, 0x0f, 0x7f, 0x12, 0xfc, 0x64, 0x26, 0x4c, 0xec, 0x63, - 0xfb, 0x11, 0x9b, 0xc7, 0x49, 0xbe, 0x1b, 0x63, 0x80, 0x06, 0xcd, 0xa4, 0x11, 0x55, 0x8c, 0x29, - 0xea, 0xf7, 0xf2, 0x7f, 0x8c, 0x61, 0x61, 0x7d, 0xfe, 0xca, 0x1e, 0x50, 0x01, 0xdf, 0xc8, 0x08, - 0x5a, 0x9c, 0x1a, 0x3c, 0x27, 0xd5, 0xe9, 0x27, 0xfb, 0x7a, 0x96, 0xc7, 0x50, 0x49, 0xfe, 0xae, - 0xea, 0xf4, 0x6c, 0xe5, 0xd3, 0xc0, 0xc4, 0xdf, 0x85, 0x68, 0x3c, 0x36, 0xe0, 0x01, 0x87, 0xdd, - 0xf7, 0x7f, 0xef, 0xfb, 0xc9, 0x01, 0xef, 0xd7, 0xfa, 0xfc, 0x11, 0x61, 0x60, 0x05, 0x6b, 0x54, - 0x12, 0x00, 0x28, 0x70, 0xe1, 0xe7, 0x00, 0x2c, 0xc8, 0xc7, 0x76, 0x7b, 0xe0, 0x48, 0xff, 0xdf, - 0x19, 0xef, 0x75, 0x07, 0x3f, 0x1e, 0xbe, 0xce, 0x28, 0xc5, 0x38, 0xc9, 0x41, 0xdb, 0xe0, 0xf3, - 0xf7, 0x07, 0xc1, 0x2d, 0x23, 0x37, 0xba, 0x33, 0x7a, 0x70, 0xee, 0x00, 0x17, 0xb6, 0xe4, 0xc6, - 0x8c, 0xf1, 0x81, 0x5f, 0xfe, 0x74, 0xc1, 0xd5, 0xf6, 0x7d, 0xe5, 0xeb, 0x27, 0xa3, 0x9e, 0x80, - 0xc3, 0x6b, 0x6d, 0xa7, 0xfc, 0x18, 0x42, 0x91, 0x20, 0x00, 0x57, 0x02, 0xe0, 0x00, 0xa8, 0x90, - 0x00, 0x27, 0xca, 0xa6, 0xa3, 0x88, 0xf0, 0x0e, 0x28, 0x0d, 0x71, 0xe3, 0xc0, 0xe9, 0x86, 0xb9, - 0x28, 0x2a, 0x8e, 0x30, 0x7b, 0xe7, 0x00, 0x01, 0x56, 0x16, 0x28, 0xc0, 0x5f, 0x70, 0x1d, 0xc0, - 0x18, 0x8c, 0x10, 0xe9, 0x20, 0x0b, 0xdc, 0xce, 0xc5, 0x94, 0x77, 0x43, 0x77, 0xcf, 0xa4, 0x9f, - 0xf1, 0x36, 0x9a, 0x77, 0xc0, 0xff, 0xac, 0x75, 0x77, 0xf3, 0x77, 0x56, 0x31, 0x0e, 0x86, 0x36, - 0x74, 0x91, 0x7c, 0x3b, 0x80, 0x0e, 0x4c, 0x28, 0x5f, 0x8b, 0x12, 0x9c, 0xfc, 0xff, 0x75, 0x49, - 0x53, 0x72, 0x51, 0xec, 0x99, 0xe1, 0xd2, 0xf8, 0x7d, 0x71, 0x3f, 0x84, 0x52, 0x17, 0x6d, 0xbf, - 0x75, 0x86, 0x70, 0x03, 0x03, 0x2a, 0x93, 0x1f, 0x56, 0xb6, 0xe9, 0x97, 0xcf, 0xed, 0x8a, 0xec, - 0x36, 0x8a, 0x01, 0x11, 0xbd, 0x19, 0xd7, 0x9f, 0x7b, 0xff, 0xdf, 0x5a, 0xfc, 0x3b, 0x20, 0x01, - 0x7f, 0x96, 0x83, 0x44, 0x3b, 0xea, 0xb6, 0x2a, 0xf0, 0x76, 0xed, 0xa6, 0x0f, 0xfd, 0xb1, 0xf7, - 0xf8, 0xed, 0x4f, 0xfc, 0x3a, 0x48, 0x00, 0xee, 0x32, 0x67, 0x54, 0x1a, 0x65, 0xee, 0xe8, 0x56, - 0xc9, 0xc1, 0xf7, 0x27, 0xdb, 0xfe, 0xfa, 0x60, 0xe3, 0xb8, 0x8d, 0x72, 0xfe, 0xeb, 0xf8, 0x78, - 0x90, 0x02, 0xd6, 0x3f, 0xb4, 0x8c, 0xd4, 0xf9, 0xbb, 0x6b, 0xea, 0xa2, 0xdf, 0x79, 0xef, 0x7f, - 0xc3, 0x4a, 0x00, 0x5d, 0x67, 0x29, 0x38, 0x11, 0x79, 0x76, 0xff, 0xbf, 0x77, 0x77, 0x3d, 0x86, - 0x09, 0x00, 0x96, 0xb7, 0x71, 0xfb, 0xf6, 0xfd, 0x6f, 0xc5, 0x86, 0x99, 0x40, 0x08, 0xfe, 0xae, - 0x4d, 0xd7, 0xa7, 0xd6, 0x9f, 0xcd, 0x61, 0x77, 0x13, 0x47, 0xff, 0xdb, 0xf8, 0xd8, 0x6d, 0xc0, - 0x18, 0xfd, 0xa7, 0x5f, 0xfd, 0x9f, 0xbf, 0xde, 0xf1, 0xf9, 0xdf, 0xf0, 0xd2, 0x80, 0x4c, 0xf4, - 0x25, 0x5f, 0xf5, 0x7e, 0x9f, 0xfd, 0xcc, 0x34, 0x88, 0x00, 0x49, 0xd7, 0x66, 0x75, 0x77, 0x76, - 0xfe, 0xf7, 0xf4, 0x4c, 0xe1, 0xc5, 0x00, 0x9c, 0x3e, 0x23, 0x08, 0x9f, 0xce, 0x7e, 0x99, 0x29, - 0x4f, 0xfd, 0xfe, 0x9a, 0x7c, 0x3c, 0x48, 0x02, 0xfb, 0x1a, 0xa5, 0x90, 0x84, 0x18, 0xb7, 0xbd, - 0x9f, 0xdd, 0x48, 0xce, 0xf4, 0xf1, 0x93, 0x6a, 0xa2, 0x1a, 0xcf, 0x40, 0x6a, 0xb9, 0x9c, 0xb8, - 0xfd, 0x36, 0xd9, 0xe0, 0xc4, 0x04, 0x48, 0x52, 0x4c, 0x52, 0xc1, 0x9f, 0xaa, 0xea, 0x1f, 0x03, - 0x53, 0x80, 0x1c, 0x27, 0x00, 0x02, 0x2a, 0x4e, 0x2a, 0x24, 0x1f, 0xf1, 0xa0, 0x03, 0x00, 0x71, - 0x6c, 0x3e, 0x28, 0x63, 0xb1, 0xf8, 0xcf, 0xd8, 0x86, 0x10, 0x60, 0xe1, 0xb8, 0xe0, 0x0c, 0x51, - 0xd4, 0xf1, 0xdc, 0x00, 0x04, 0x00, 0xbf, 0x6f, 0x8f, 0x62, 0x73, 0x19, 0x6c, 0x0b, 0x58, 0x9f, - 0x92, 0xf1, 0x76, 0xc1, 0x5b, 0x09, 0x5c, 0x4f, 0x8c, 0x00, 0x14, 0x34, 0x2a, 0x9f, 0xf0, 0xbb, - 0x80, 0x57, 0xfc, 0x4b, 0x14, 0x4e, 0x89, 0x55, 0x58, 0x96, 0x0a, 0xf8, 0x12, 0x07, 0x9a, 0x03, - 0xed, 0xf8, 0xb0, 0x39, 0x7c, 0x0b, 0x15, 0xf8, 0x04, 0xb3, 0x28, 0x5d, 0xc0, 0x98, 0x64, 0x4d, - 0x76, 0xeb, 0xf6, 0xb7, 0x57, 0x57, 0x35, 0x86, 0xdc, 0x00, 0x7f, 0x48, 0x75, 0x14, 0xc1, 0x51, - 0x3f, 0x5e, 0x21, 0xed, 0x9b, 0xdc, 0xad, 0x8b, 0xb8, 0x3f, 0xf0, 0xdb, 0xdb, 0xc1, 0x4c, 0x13, - 0xaf, 0x7d, 0x38, 0x7b, 0x00, 0x0c, 0x3d, 0x01, 0xf4, 0xa9, 0x08, 0x02, 0x91, 0xff, 0xfb, 0x56, - 0xe2, 0xb8, 0xac, 0x1d, 0xf8, 0xed, 0xdb, 0xf1, 0x56, 0xd8, 0xab, 0x14, 0x58, 0x96, 0x83, 0x75, - 0xe9, 0xed, 0xb7, 0x0a, 0x28, 0x01, 0xbd, 0x17, 0xbc, 0x85, 0x76, 0xfd, 0xe8, 0xcf, 0xe9, 0xf4, - 0xc9, 0xe1, 0xcc, 0x01, 0x56, 0x70, 0xab, 0xc6, 0xff, 0xf4, 0xd3, 0xf2, 0xe9, 0xa7, 0xb6, 0xdc, - 0x38, 0x48, 0x00, 0xd6, 0xad, 0x85, 0xc2, 0xa5, 0x07, 0xbe, 0x5f, 0xee, 0x2a, 0xc5, 0xb0, 0x73, - 0xf0, 0x71, 0xf8, 0xab, 0x1c, 0xfc, 0xbb, 0x01, 0x1d, 0xe9, 0xfc, 0x3c, 0xa0, 0x01, 0xb3, 0x4c, - 0x48, 0xc5, 0x55, 0x23, 0x0f, 0xbd, 0xbb, 0x72, 0xf6, 0xe5, 0xc9, 0xd3, 0xd9, 0xce, 0xf2, 0x73, - 0x8f, 0x5d, 0xb3, 0xfe, 0xb0, 0xf6, 0x00, 0x93, 0x0a, 0x17, 0x59, 0xc0, 0x6c, 0x58, 0xb1, 0x56, - 0x5e, 0x5d, 0xbb, 0xb3, 0x9d, 0xf2, 0xce, 0x5d, 0xcc, 0xbb, 0xa6, 0x0f, 0xf8, 0xd4, 0x8a, 0xab, - 0xd6, 0x6f, 0xa7, 0xc0, 0x92, 0x01, 0x99, 0x0a, 0x43, 0xed, 0x47, 0xf8, 0x4c, 0xa9, 0x3a, 0xad, - 0xcc, 0x77, 0xd1, 0x3c, 0xf1, 0x03, 0x87, 0xe2, 0x7c, 0xb0, 0xf1, 0x27, 0x8c, 0x00, 0x03, 0xf1, - 0xc0, 0x00, 0xb6, 0x1a, 0x50, 0x03, 0x2b, 0x68, 0xb6, 0x0d, 0xf7, 0xf5, 0x15, 0x1c, 0x9b, 0x8f, - 0x9a, 0x5b, 0x43, 0x9e, 0xa8, 0xab, 0x17, 0xe5, 0xb6, 0xdb, 0xdb, 0xf6, 0xc3, 0x6e, 0x01, 0x3e, - 0xa2, 0x33, 0x48, 0x8f, 0x12, 0xa9, 0x4f, 0x01, 0x2f, 0x39, 0x83, 0xf9, 0x61, 0xc2, 0x18, 0xe4, - 0x52, 0xd8, 0x26, 0xa7, 0x11, 0x8e, 0xda, 0x76, 0xfe, 0x1e, 0xc0, 0x0c, 0x8b, 0x59, 0x31, 0x1a, - 0x7f, 0xcf, 0xea, 0xaa, 0xa9, 0xa7, 0xf1, 0x1d, 0x11, 0x5f, 0xf8, 0x5c, 0x90, 0x00, 0xd2, 0xc8, - 0x70, 0xf0, 0xd0, 0x71, 0x7c, 0xbf, 0x26, 0xf7, 0x7b, 0x9f, 0xde, 0xe2, 0x5e, 0xfe, 0x5b, 0xfb, - 0xe1, 0x48, 0x1d, 0xc3, 0x5a, 0xac, 0x5c, 0x53, 0x11, 0xe2, 0x86, 0x5d, 0xae, 0x52, 0xc3, 0x3f, - 0x01, 0xa1, 0xcb, 0x40, 0x1f, 0x12, 0x8c, 0xcf, 0x8b, 0x80, 0xf0, 0x78, 0x07, 0x83, 0x80, 0x01, - 0x78, 0xe0, 0x07, 0x0c, 0xe0, 0x05, 0xb4, 0xe6, 0xe0, 0xb6, 0x28, 0x49, 0xbf, 0xf2, 0x8d, 0x09, - 0xfc, 0xfa, 0x96, 0x6e, 0xf5, 0xef, 0x89, 0x30, 0x07, 0xbe, 0x4b, 0xe0, 0xeb, 0xea, 0xf7, 0xe7, - 0xff, 0x98, 0x61, 0x40, 0x01, 0xee, 0x09, 0x0a, 0xce, 0x53, 0x10, 0x52, 0x4b, 0xaf, 0x5b, 0xb6, - 0x2a, 0xc1, 0x61, 0x43, 0x0a, 0x8f, 0x3e, 0x3a, 0x4f, 0x1c, 0x69, 0x92, 0x03, 0x8d, 0x4e, 0x23, - 0xbb, 0x0a, 0x28, 0x04, 0xf7, 0x50, 0x08, 0x2e, 0x1a, 0xa6, 0x8c, 0x5b, 0x2a, 0xa2, 0x0b, 0x74, - 0x4f, 0x44, 0xf5, 0xba, 0x73, 0xbb, 0x7d, 0x75, 0xf0, 0xa2, 0x80, 0x0c, 0x76, 0x9c, 0x63, 0x45, - 0x21, 0xfb, 0x61, 0x18, 0xc8, 0x87, 0x44, 0x3a, 0xbc, 0xd0, 0xa7, 0xbe, 0x38, 0xf8, 0x61, 0x40, - 0x01, 0xb6, 0x68, 0xc4, 0xb1, 0x60, 0xb4, 0x43, 0x4e, 0x6c, 0x55, 0x97, 0x60, 0xe7, 0xe4, 0xec, - 0x87, 0xb8, 0x59, 0x65, 0x85, 0xa7, 0x1e, 0x9a, 0x7e, 0x48, 0xb8, 0x0b, 0x80, 0x42, 0x52, 0x71, - 0x5f, 0x8e, 0x00, 0x0c, 0x70, 0x0f, 0xc1, 0x27, 0x1e, 0x53, 0xc3, 0x83, 0x80, 0x03, 0x18, 0x15, - 0x0e, 0x48, 0x00, 0x86, 0xed, 0x34, 0xfe, 0xbf, 0x4f, 0x14, 0xb1, 0x4b, 0x2e, 0x96, 0x2e, 0x34, - 0xc4, 0x83, 0xa7, 0x83, 0xb1, 0x97, 0x69, 0x57, 0xe9, 0xa7, 0x0d, 0xb8, 0x00, 0x6d, 0x61, 0xe3, - 0x2a, 0x3d, 0x0d, 0x87, 0xfb, 0xd8, 0xb6, 0x9f, 0x8b, 0x0c, 0x38, 0xd9, 0xc9, 0x7c, 0x0d, 0x3f, - 0x29, 0xe6, 0x73, 0x20, 0xb5, 0x18, 0xa7, 0xf4, 0xf0, 0xbb, 0x3b, 0xff, 0xf1, 0xb9, 0xfb, 0xf6, - 0xc6, 0x21, 0x74, 0xea, 0x1b, 0x61, 0x00, 0x00, 0x49, 0xea, 0xb6, 0xdd, 0x2c, 0x4f, 0xe6, 0x81, - 0x6c, 0x4e, 0x05, 0x8f, 0xc4, 0x98, 0x16, 0x30, 0x96, 0x94, 0x5c, 0x43, 0xee, 0x23, 0x7e, 0xca, - 0xca, 0x1b, 0xc0, 0x02, 0xfe, 0x30, 0xf6, 0x21, 0x79, 0x03, 0xd1, 0x13, 0xe1, 0xc5, 0x22, 0x1f, - 0xda, 0x17, 0x41, 0x83, 0xab, 0xf6, 0x4b, 0x16, 0x51, 0x2c, 0x49, 0x0e, 0x07, 0x91, 0x19, 0x69, - 0xa7, 0xb7, 0x86, 0xf0, 0x25, 0xac, 0x59, 0x15, 0x69, 0x39, 0x03, 0x92, 0xfc, 0x3f, 0xcb, 0xdb, - 0x90, 0x0e, 0x8f, 0x87, 0x9e, 0x00, 0x78, 0x3b, 0x43, 0xf1, 0x60, 0x65, 0x7f, 0x72, 0x84, 0xfb, - 0x32, 0x0f, 0x1d, 0xef, 0x17, 0x9b, 0xb7, 0x1b, 0x16, 0x17, 0xe4, 0x58, 0x37, 0x50, 0xdc, 0x50, - 0x01, 0xec, 0x61, 0x74, 0x96, 0x07, 0xcf, 0xec, 0x8b, 0x73, 0x7b, 0x49, 0x8b, 0x7a, 0x69, 0x83, - 0x06, 0xe3, 0xc1, 0xd1, 0x70, 0xc1, 0x8e, 0x01, 0xdf, 0x81, 0x96, 0x44, 0xcb, 0x4e, 0xb6, 0xc5, - 0x5c, 0x3a, 0xa0, 0x01, 0xcf, 0x42, 0xc0, 0x97, 0x2a, 0x82, 0xe3, 0x7f, 0xdf, 0x0b, 0xd6, 0x4e, - 0xee, 0xe9, 0x7f, 0x57, 0x67, 0x8e, 0x9e, 0xd9, 0x40, 0x31, 0x45, 0x0d, 0x40, 0x75, 0x4a, 0x1d, - 0x5a, 0xd8, 0x46, 0xb0, 0x15, 0xc0, 0xe8, 0x6d, 0x53, 0x6d, 0xbc, 0xda, 0x6d, 0x87, 0x5c, 0x0d, - 0x6c, 0xcb, 0x21, 0xfc, 0x17, 0x48, 0xc6, 0xf8, 0x5b, 0xf5, 0xda, 0x16, 0xca, 0x2b, 0x94, 0x73, - 0x37, 0xc3, 0x8d, 0xeb, 0x5a, 0xb1, 0xed, 0x41, 0xff, 0x3b, 0xf9, 0x27, 0x12, 0xd0, 0xd0, 0x53, - 0xd9, 0x92, 0x8d, 0xce, 0xf4, 0xe1, 0xc2, 0x40, 0x22, 0xe0, 0x42, 0xd6, 0x31, 0x1d, 0xee, 0xef, - 0x72, 0xf5, 0x3c, 0xf2, 0x6f, 0xcb, 0xb1, 0xdb, 0x96, 0x2e, 0x3c, 0xb7, 0xb6, 0x6e, 0x37, 0xd5, - 0xbe, 0x80, 0xbc, 0x81, 0xb6, 0xe9, 0xf8, 0x71, 0xc0, 0x04, 0x45, 0xe2, 0x52, 0x0a, 0xd9, 0xca, - 0xff, 0xbb, 0xa7, 0x2d, 0x9c, 0x68, 0x9c, 0x67, 0xbf, 0x18, 0xdf, 0x05, 0xbc, 0x59, 0x63, 0x82, - 0x9c, 0xa0, 0xd8, 0x01, 0x90, 0x1a, 0xa9, 0xdb, 0x5d, 0x9c, 0x35, 0x80, 0x0f, 0xf4, 0xd9, 0xc2, - 0x92, 0xfa, 0xfd, 0xd7, 0xd5, 0x1a, 0xea, 0x15, 0x78, 0xb5, 0x93, 0x3c, 0xde, 0x0c, 0xe8, 0xee, - 0x1b, 0x70, 0x02, 0x8f, 0xb2, 0x12, 0xa9, 0x2e, 0xee, 0xd7, 0xf8, 0x3b, 0x75, 0x1c, 0xaf, 0x3f, - 0xab, 0xfd, 0x70, 0xe2, 0x80, 0x3b, 0xc9, 0x65, 0xd8, 0x4d, 0x3d, 0x32, 0x7f, 0xfc, 0x17, 0xad, - 0xb7, 0x34, 0x7e, 0x1b, 0xc0, 0x08, 0x53, 0xe4, 0x8c, 0xc4, 0x7a, 0x9f, 0xdf, 0x6d, 0xb3, 0xfa, - 0xee, 0x29, 0xbd, 0x7e, 0x1d, 0xc0, 0x0c, 0xe3, 0xaf, 0x6d, 0x3e, 0xa7, 0xff, 0xfa, 0xa7, 0x54, - 0xf9, 0x35, 0x3f, 0xf0, 0xe2, 0x82, 0x75, 0xeb, 0x38, 0xfb, 0xff, 0xe3, 0xf1, 0xeb, 0xf0, 0xc6, - 0x00, 0x71, 0xa4, 0xde, 0xc7, 0xa4, 0xfe, 0xff, 0xf7, 0x61, 0x79, 0x41, 0x02, 0x8f, 0xe2, 0xd7, - 0xff, 0xe4, 0x4c, 0x3b, 0x80, 0x22, 0xaf, 0x26, 0x53, 0xfe, 0x3f, 0xfd, 0xc1, 0xdb, 0x9e, 0x85, - 0xd9, 0xdf, 0x6f, 0xfc, 0x33, 0x20, 0x04, 0x08, 0xd6, 0xd2, 0x25, 0xb5, 0xb9, 0x7b, 0x6b, 0x8b, - 0xb7, 0x97, 0xeb, 0x91, 0xf8, 0x63, 0x00, 0x1c, 0xeb, 0xa6, 0xc6, 0xc1, 0xff, 0xed, 0xfc, 0x97, - 0x0c, 0x90, 0xe0, 0x9d, 0xca, 0x6e, 0x4d, 0xff, 0xff, 0xac, 0x76, 0x33, 0x72, 0xb0, 0xe4, 0xc0, - 0x08, 0x13, 0x23, 0x68, 0x88, 0xda, 0x9a, 0x0f, 0x7f, 0x1e, 0xbf, 0xff, 0xaf, 0x97, 0xb3, 0xf0, - 0xf6, 0x00, 0x8c, 0x27, 0x89, 0x23, 0x38, 0x25, 0x1b, 0xfe, 0xe6, 0xf2, 0xcb, 0xa8, 0xb7, 0x15, - 0xd5, 0x55, 0x4b, 0xc5, 0x2e, 0x7c, 0xbf, 0x4d, 0xe5, 0xf0, 0xbb, 0x80, 0x22, 0x9b, 0x48, 0xf8, - 0xf7, 0xf8, 0x87, 0xc4, 0xbf, 0xfd, 0x8e, 0x43, 0xf1, 0x1f, 0x88, 0x5c, 0x37, 0x1c, 0x00, 0x52, - 0x93, 0x06, 0xc4, 0x39, 0xc4, 0xdf, 0x2d, 0xfc, 0xbc, 0xbd, 0x36, 0xf8, 0xe2, 0xb7, 0x15, 0xce, - 0xeb, 0xdf, 0x0e, 0x28, 0x02, 0x52, 0xdd, 0x35, 0x06, 0xe4, 0xe8, 0x96, 0xbf, 0xe1, 0x55, 0xa2, - 0x42, 0x07, 0xcf, 0x88, 0x7c, 0xf5, 0x39, 0x88, 0xef, 0xce, 0x18, 0x8e, 0xfd, 0x30, 0x7d, 0x6c, - 0x14, 0x82, 0xcc, 0x77, 0x9b, 0x61, 0x67, 0x0c, 0x2c, 0x65, 0x0e, 0xdd, 0x3f, 0xe1, 0xec, 0x00, - 0xcb, 0x2a, 0x71, 0x72, 0x00, 0x42, 0xfd, 0xf5, 0x79, 0x2d, 0x09, 0xe3, 0x2f, 0x4c, 0x47, 0x96, - 0xd9, 0xdf, 0x01, 0x4e, 0x80, 0xfa, 0x97, 0x37, 0xa7, 0xdb, 0x86, 0xdc, 0x00, 0x0e, 0xf7, 0x89, - 0x75, 0x7b, 0x9b, 0xf6, 0xfd, 0xc5, 0x59, 0xbd, 0xdc, 0x1d, 0xbb, 0xbe, 0x2d, 0xa0, 0xea, 0xe9, - 0xae, 0xdb, 0xc2, 0xee, 0x00, 0x3f, 0x70, 0xfa, 0x90, 0x7e, 0x4a, 0xd4, 0xff, 0x26, 0x21, 0xe2, - 0xad, 0xfe, 0xed, 0xe1, 0x47, 0x9b, 0x77, 0x07, 0xff, 0x77, 0x27, 0x1e, 0x44, 0xf8, 0x14, 0x3c, - 0x3a, 0xa0, 0x02, 0xbc, 0x0a, 0xae, 0x51, 0x42, 0x35, 0xbd, 0x7a, 0xdd, 0xdb, 0xac, 0x9e, 0x38, - 0xc1, 0xf7, 0x3b, 0xd9, 0xcb, 0xb1, 0x6e, 0x32, 0xfc, 0x8e, 0x3d, 0xb6, 0xd7, 0xc3, 0x18, 0x01, - 0x10, 0x76, 0x4c, 0xc1, 0x82, 0x34, 0xfb, 0xb9, 0x5b, 0xe4, 0xe4, 0xec, 0xa1, 0xf9, 0xbd, 0xcb, - 0xbb, 0xf9, 0xff, 0x8a, 0xd6, 0x21, 0xc5, 0x01, 0x1c, 0x01, 0x5c, 0xca, 0x63, 0x81, 0x57, 0x77, - 0xa7, 0x95, 0x2f, 0x1f, 0xf8, 0xc7, 0xfe, 0x5b, 0xb6, 0xdd, 0x6d, 0x8a, 0xb1, 0xf1, 0xc7, 0x37, - 0xfe, 0x1c, 0xc0, 0x23, 0x25, 0x02, 0x55, 0x82, 0xd2, 0x3e, 0xee, 0xac, 0x55, 0xdb, 0x8e, 0xdc, - 0x75, 0x76, 0xc4, 0x71, 0x5e, 0x9b, 0xa8, 0xff, 0x8f, 0xbc, 0x63, 0xee, 0x2a, 0x26, 0xbe, 0xdf, - 0x4e, 0x1e, 0x24, 0x0f, 0xc4, 0x2a, 0xeb, 0x72, 0x77, 0x6e, 0x5c, 0x55, 0x8e, 0xfd, 0xf6, 0x78, - 0xe6, 0x5f, 0x2f, 0x10, 0xf1, 0x4d, 0x4e, 0x3f, 0xe1, 0xe2, 0x40, 0x0f, 0xb3, 0x19, 0x0d, 0xe3, - 0x1e, 0x80, 0x94, 0xf9, 0x5d, 0x93, 0x97, 0x6d, 0xe0, 0xff, 0xc5, 0xf2, 0x6e, 0x0f, 0xf8, 0x39, - 0xfc, 0x9e, 0x6a, 0x2b, 0x59, 0xed, 0xfc, 0x36, 0xa0, 0x00, 0xf6, 0xc5, 0x19, 0x2f, 0xac, 0x51, - 0x37, 0xbf, 0xce, 0xdb, 0xb8, 0x3b, 0x73, 0x52, 0x39, 0x6f, 0xb1, 0xc9, 0xf1, 0xff, 0x4c, 0x9f, - 0x07, 0x7e, 0x25, 0xa1, 0x77, 0xa7, 0x7e, 0x1b, 0x70, 0x0b, 0x14, 0x49, 0x26, 0x31, 0x61, 0xcf, - 0xee, 0x34, 0xb1, 0x4c, 0x28, 0xfc, 0xa0, 0x3c, 0xc3, 0xff, 0x4c, 0x9c, 0x7d, 0xcb, 0xbe, 0x21, - 0x6b, 0x33, 0x6a, 0x7f, 0xc3, 0xae, 0x00, 0x17, 0x86, 0xda, 0xf5, 0x17, 0x18, 0xba, 0xb7, 0x3f, - 0xe2, 0xd4, 0x18, 0x0d, 0x53, 0xdb, 0x1f, 0x73, 0xc6, 0xaa, 0xda, 0x12, 0x9a, 0x33, 0xc6, 0xaa, - 0x56, 0xe8, 0x2a, 0x89, 0x63, 0x78, 0xdc, 0xfc, 0xa9, 0xf6, 0xfc, 0x30, 0xe0, 0x00, 0xef, 0x86, - 0x8e, 0x09, 0x12, 0x85, 0xbc, 0x11, 0x52, 0x7f, 0xf2, 0x62, 0xdc, 0x69, 0x82, 0xc7, 0x19, 0x40, - 0x35, 0x63, 0x2e, 0xd6, 0x71, 0x76, 0x58, 0x8b, 0xb3, 0x8b, 0x62, 0xd9, 0x76, 0x2d, 0x8e, 0x7e, - 0x1d, 0xc0, 0x05, 0x22, 0x24, 0x84, 0xab, 0x46, 0xf5, 0x17, 0x84, 0x9f, 0xf5, 0x8f, 0xfa, 0x21, - 0x1e, 0xa7, 0x35, 0x1d, 0xbe, 0x73, 0xee, 0x3d, 0xf6, 0x54, 0xe7, 0xe2, 0xf0, 0x81, 0x4f, 0xf8, - 0x75, 0xc0, 0x0d, 0x8f, 0xf9, 0x1f, 0x20, 0xf9, 0x4f, 0x7f, 0xfc, 0xb7, 0x9b, 0xdd, 0xdb, 0xec, - 0xfc, 0x1b, 0xdb, 0xd7, 0x62, 0x12, 0xdc, 0x12, 0x9c, 0x69, 0xf0, 0x44, 0x17, 0x9b, 0xfe, 0x13, - 0x70, 0x01, 0xf5, 0xbd, 0xa6, 0x23, 0x29, 0x6e, 0x08, 0x9e, 0x27, 0xee, 0x81, 0xb5, 0xa6, 0x34, - 0x1d, 0x00, 0xa0, 0x65, 0x4d, 0xcb, 0xe3, 0x74, 0x09, 0x01, 0xc1, 0xf8, 0x12, 0x38, 0xc1, 0xc0, - 0x0b, 0x80, 0x46, 0x27, 0x9a, 0x2d, 0x2c, 0x70, 0x00, 0x27, 0x1c, 0x00, 0xe3, 0x58, 0xbb, 0x78, - 0x39, 0x04, 0x83, 0x8d, 0xe5, 0xd1, 0x1e, 0x38, 0x00, 0x31, 0xc0, 0xe2, 0xe3, 0xe9, 0x9c, 0x3c, - 0xc2, 0x40, 0x03, 0x2f, 0x24, 0xcc, 0x64, 0xdd, 0xbc, 0xff, 0xd3, 0x52, 0x7a, 0x8b, 0x60, 0xd2, - 0x96, 0x22, 0x93, 0xf5, 0xc3, 0x44, 0x80, 0x1e, 0x1f, 0x52, 0xf1, 0x1d, 0xa0, 0x77, 0x5f, 0x93, - 0x8f, 0xbe, 0x9e, 0x98, 0xed, 0x87, 0x94, 0x00, 0x21, 0x86, 0x27, 0x0d, 0xea, 0x2d, 0x0e, 0x43, - 0xdd, 0xca, 0x0a, 0x41, 0xbf, 0x6d, 0x1b, 0x17, 0xbc, 0x43, 0xdd, 0xc5, 0x75, 0x9d, 0x8f, 0x3f, - 0x2f, 0xe1, 0xb2, 0x40, 0x2c, 0x85, 0x41, 0x4d, 0x64, 0x0a, 0x54, 0xb8, 0x30, 0xf3, 0xea, 0x89, - 0xf1, 0xf8, 0xe9, 0xa6, 0xce, 0x90, 0x1f, 0x33, 0x96, 0x03, 0xf8, 0x19, 0x61, 0x03, 0xf1, 0xdb, - 0x7f, 0xc3, 0x98, 0x00, 0x77, 0x9a, 0x91, 0x18, 0x75, 0x84, 0x59, 0xfc, 0x2d, 0xef, 0x1c, 0xe6, - 0x73, 0x8f, 0x67, 0x03, 0xec, 0x22, 0x6c, 0x9b, 0x37, 0x86, 0x3e, 0x4c, 0xb4, 0x81, 0x57, 0xe5, - 0xa1, 0xec, 0x00, 0x3d, 0x70, 0x83, 0x2f, 0xff, 0x95, 0x66, 0xdb, 0x7d, 0x80, 0x77, 0x50, 0xc9, - 0x0f, 0xf5, 0xa9, 0xef, 0xdf, 0xbf, 0xdb, 0xb7, 0x35, 0x60, 0x3e, 0x78, 0xcf, 0x29, 0x4a, 0x7f, - 0x8a, 0x00, 0x02, 0xa3, 0x2c, 0x00, 0x09, 0xfe, 0x09, 0x50, 0x61, 0x93, 0xe6, 0xd1, 0xfe, 0x8f, - 0x8f, 0x0e, 0x28, 0x03, 0xfe, 0x18, 0x26, 0x75, 0x5e, 0x90, 0x0b, 0x3e, 0xed, 0x2a, 0xce, 0x53, - 0x28, 0xb6, 0x5d, 0xb3, 0x62, 0x7e, 0x9e, 0xea, 0xc3, 0x20, 0xd5, 0x0b, 0x61, 0x50, 0xaa, 0x2c, - 0x00, 0x2c, 0x1c, 0x00, 0x33, 0x8d, 0xc6, 0x0d, 0xb6, 0xf2, 0xea, 0x69, 0xf0, 0xe6, 0x00, 0x07, - 0x0e, 0x52, 0x0b, 0x93, 0xf0, 0x68, 0xe7, 0xa6, 0xb6, 0xcf, 0xdf, 0x40, 0x6c, 0x7a, 0x0e, 0xdd, - 0x28, 0x00, 0x29, 0x44, 0xdb, 0xf1, 0x5c, 0x66, 0xa4, 0xd3, 0x37, 0xc4, 0x35, 0xd6, 0xfc, 0xbb, - 0x57, 0x6f, 0x0c, 0x00, 0xc0, 0x1b, 0xdd, 0xb9, 0x6d, 0x83, 0xa0, 0xb8, 0xab, 0x1b, 0x85, 0xc9, - 0x78, 0x35, 0x38, 0x18, 0x13, 0x00, 0x01, 0xfd, 0x0a, 0x00, 0xae, 0x16, 0xe4, 0xf0, 0x38, 0x1c, - 0x54, 0xa9, 0x80, 0x07, 0x86, 0x00, 0x80, 0x1d, 0xc0, 0x26, 0xe4, 0xef, 0x6c, 0x1a, 0xfd, 0x3c, - 0x32, 0x14, 0x95, 0x81, 0x64, 0x1c, 0xc4, 0xa5, 0xde, 0x1c, 0x39, 0xa6, 0x96, 0xcb, 0x62, 0x8c, - 0xb0, 0x06, 0x58, 0x0c, 0xb0, 0x01, 0x8a, 0x03, 0x14, 0x18, 0xac, 0x51, 0x81, 0x40, 0x5c, 0x9b, - 0x00, 0xb1, 0x42, 0x40, 0x96, 0x02, 0xa0, 0x08, 0x03, 0x65, 0x80, 0xc9, 0x41, 0xc0, 0x80, 0x18, - 0x01, 0x02, 0x79, 0x98, 0x16, 0xd0, 0x41, 0xcc, 0x5b, 0x79, 0x8a, 0xcc, 0xdc, 0x81, 0x0d, 0xe1, - 0x80, 0x40, 0x3a, 0x1d, 0xd8, 0x68, 0x0c, 0xbd, 0x41, 0x00, 0xd3, 0x8b, 0x43, 0xcb, 0x00, 0x03, - 0xf1, 0x60, 0x00, 0xc1, 0xd9, 0x06, 0x32, 0x40, 0x00, 0x32, 0xa0, 0x6c, 0x00, 0xc3, 0x2a, 0xfc, - 0x95, 0x18, 0xee, 0x1d, 0xc0, 0x10, 0x01, 0xce, 0x58, 0x13, 0xd2, 0x35, 0xc7, 0x35, 0x3c, 0x6a, - 0xea, 0xb3, 0xcc, 0xb3, 0x92, 0xbc, 0xca, 0xd9, 0xfa, 0x8f, 0xf8, 0xed, 0xd7, 0xf1, 0x76, 0x3e, - 0xe1, 0x73, 0x10, 0xed, 0x5f, 0xc3, 0x0e, 0x62, 0xef, 0x4f, 0x87, 0x54, 0x00, 0x3a, 0x76, 0xaf, - 0x86, 0x6e, 0xaf, 0x63, 0xff, 0xe3, 0xf9, 0x7d, 0x65, 0xe4, 0x4b, 0xcf, 0xe3, 0x3b, 0xf9, 0xcd, - 0x1d, 0x47, 0xcc, 0x93, 0x81, 0xf7, 0xf3, 0x1c, 0xaa, 0x50, 0xa8, 0x17, 0xfc, 0x36, 0xa0, 0x01, - 0x6e, 0xb0, 0x91, 0xd4, 0x9d, 0x48, 0x51, 0x52, 0x25, 0xb8, 0xdb, 0xcb, 0x65, 0xe5, 0xb1, 0x38, - 0x36, 0x95, 0xb3, 0x07, 0xdc, 0x1e, 0xfa, 0x4f, 0xad, 0xf0, 0x1a, 0x01, 0xcb, 0x89, 0xc0, 0x43, - 0x87, 0x71, 0x32, 0x7e, 0x1c, 0x24, 0x00, 0x31, 0x94, 0xb3, 0x6c, 0xa2, 0x33, 0xff, 0xf9, 0x7f, - 0x4e, 0x9e, 0x9f, 0x07, 0x7e, 0x2b, 0xc3, 0xfb, 0x2f, 0x89, 0x7f, 0xc3, 0x6e, 0x02, 0x76, 0xda, - 0x0f, 0xd7, 0xbf, 0x71, 0x5b, 0xf8, 0xef, 0xdf, 0xcb, 0xe3, 0xf0, 0x18, 0xfb, 0x8f, 0x2d, 0xbf, - 0x86, 0xf0, 0x06, 0xe5, 0xd7, 0x43, 0xde, 0xff, 0x7b, 0xa9, 0x95, 0xb2, 0x56, 0x5f, 0x0e, 0xa8, - 0x01, 0x9f, 0x3c, 0x85, 0x63, 0xbe, 0xe5, 0x6e, 0x9c, 0xbc, 0xdf, 0x4d, 0x3f, 0x57, 0x53, 0x83, - 0xba, 0xfc, 0x2e, 0xe1, 0x02, 0x3f, 0x78, 0x17, 0x0f, 0x3f, 0xef, 0x75, 0xef, 0x58, 0x5c, 0x90, - 0x25, 0x5a, 0x8d, 0xeb, 0xff, 0x6f, 0xef, 0x8d, 0x47, 0x08, 0xcd, 0x73, 0x65, 0x8d, 0x70, 0xf9, - 0x4d, 0x4f, 0x86, 0x64, 0x00, 0x60, 0x5a, 0xbd, 0x59, 0xfb, 0xfb, 0xfd, 0xef, 0x2c, 0x3c, 0xe0, - 0x05, 0xbd, 0xae, 0xe4, 0x6d, 0x4f, 0xcb, 0xff, 0x7a, 0x66, 0xba, 0x7f, 0x86, 0x5c, 0x05, 0xdd, - 0x09, 0x6a, 0x6d, 0xbf, 0xdb, 0xff, 0x1f, 0x1c, 0xca, 0x13, 0x6b, 0x31, 0xd8, 0xd5, 0x1c, 0x5e, - 0xc2, 0xec, 0xa1, 0xf5, 0x33, 0xfd, 0xbf, 0xe9, 0x70, 0xa4, 0x81, 0x2f, 0x99, 0xcf, 0xdf, 0xff, - 0x87, 0x88, 0x60, 0x0a, 0x82, 0x47, 0xf5, 0x79, 0x9f, 0x40, 0xff, 0x8c, 0xf5, 0x4a, 0xfb, 0x87, - 0xd1, 0xed, 0xb1, 0x37, 0x4b, 0xb4, 0xf7, 0x40, 0x5f, 0x72, 0xfa, 0x62, 0xdc, 0x39, 0x81, 0xc5, - 0xa6, 0x5f, 0xed, 0xb6, 0x9a, 0x6d, 0xb6, 0x9a, 0x66, 0x46, 0x5b, 0x6d, 0xe9, 0xa7, 0x18, 0xa3, - 0x5e, 0xec, 0x2e, 0xe0, 0x0c, 0x3f, 0x99, 0xad, 0xdd, 0xfd, 0xbc, 0xf0, 0xf2, 0x40, 0xf6, 0x07, - 0x18, 0x1e, 0x30, 0x6d, 0x71, 0x72, 0x47, 0x70, 0xbb, 0x80, 0x0d, 0x9c, 0x48, 0x22, 0xbc, 0x18, - 0x3c, 0xdf, 0x3f, 0x26, 0xc8, 0x8c, 0x60, 0xb2, 0x4f, 0x84, 0x6e, 0x8b, 0x39, 0xe5, 0xe1, 0xce, - 0xb4, 0x1c, 0xf0, 0x1c, 0x94, 0x0b, 0x49, 0x9c, 0xb4, 0x8b, 0xc6, 0xd1, 0x54, 0x3a, 0xe0, 0x0f, - 0xa1, 0x4b, 0x0f, 0x46, 0xd5, 0x66, 0x7f, 0xd9, 0xa0, 0x2b, 0x95, 0x58, 0x74, 0x0b, 0xdd, 0x01, - 0xef, 0xc6, 0xde, 0x73, 0xc9, 0x19, 0x7f, 0xcc, 0xdd, 0xbf, 0xc3, 0x78, 0x02, 0xb9, 0xfb, 0x06, - 0x6f, 0xdc, 0x20, 0x87, 0xba, 0x57, 0x85, 0xd8, 0x3d, 0xe7, 0x1f, 0x3d, 0xb7, 0xc4, 0xb3, 0x8a, - 0x1d, 0xef, 0x41, 0x0f, 0x75, 0xd7, 0x0f, 0x38, 0x00, 0x9d, 0x9e, 0x98, 0x13, 0xa4, 0x60, 0x56, - 0xf1, 0x31, 0x6d, 0xb5, 0x11, 0x8b, 0xa2, 0xd8, 0x52, 0x9b, 0xbc, 0xbf, 0xde, 0xe2, 0x8e, 0x6b, - 0xfc, 0x37, 0x80, 0x2e, 0xfc, 0xc7, 0x08, 0xae, 0x70, 0x13, 0xbb, 0xfa, 0x1d, 0x62, 0x5e, 0x7f, - 0xd3, 0x55, 0x2d, 0x97, 0x8a, 0xc5, 0x58, 0xba, 0x83, 0xab, 0x9f, 0xe6, 0x82, 0x1b, 0xef, 0xf0, - 0xc2, 0x80, 0x1a, 0x63, 0x9d, 0x05, 0xc9, 0xef, 0x56, 0xf7, 0xda, 0x7a, 0x69, 0xa3, 0x15, 0x0d, - 0x28, 0x51, 0x1c, 0x85, 0xfb, 0xff, 0xfd, 0x3a, 0x86, 0x94, 0x00, 0xa4, 0x9e, 0x58, 0x4b, 0x0d, - 0xce, 0xa5, 0xf1, 0xb7, 0xbf, 0xcb, 0xee, 0xec, 0x61, 0xdc, 0x00, 0x86, 0xb8, 0xc4, 0xfa, 0xde, - 0xff, 0x6d, 0xdc, 0xb6, 0x99, 0x7d, 0x5d, 0xb8, 0xad, 0xb1, 0x2f, 0xa7, 0x55, 0xef, 0xc3, 0x6e, - 0x00, 0x3b, 0x40, 0x45, 0xf2, 0x76, 0x17, 0xe7, 0xfb, 0xe7, 0x3d, 0x35, 0xae, 0x2a, 0xed, 0x35, - 0xf8, 0x3f, 0xc1, 0xff, 0x8f, 0x0a, 0x3e, 0x2d, 0xdd, 0x7b, 0xc3, 0x64, 0x80, 0x3f, 0x9a, 0x0f, - 0x10, 0x53, 0x6c, 0x82, 0x4f, 0x7b, 0xec, 0xbc, 0xdc, 0x71, 0x3e, 0x25, 0xec, 0xf8, 0x8f, 0x85, - 0x6f, 0xf2, 0x9b, 0x39, 0x3b, 0x38, 0x78, 0xc1, 0xb0, 0x27, 0x87, 0x27, 0xe7, 0xff, 0x0f, 0x12, - 0x02, 0x02, 0x1f, 0x84, 0x39, 0x59, 0xf7, 0x2f, 0xfe, 0x0e, 0xfc, 0x55, 0x9f, 0x9f, 0x96, 0xba, - 0xc1, 0x78, 0x74, 0x3d, 0xbd, 0x34, 0xf8, 0x70, 0x90, 0x08, 0x01, 0x2c, 0x7e, 0xa3, 0x8c, 0xa6, - 0xf6, 0xdf, 0xc6, 0x31, 0xfa, 0xeb, 0xf7, 0xe4, 0x67, 0xf4, 0xfb, 0xc3, 0xb8, 0x01, 0xe1, 0x23, - 0x06, 0xe9, 0x8d, 0x1d, 0xf8, 0x69, 0xcf, 0x85, 0x7e, 0xca, 0x00, 0xb2, 0x01, 0x70, 0xaa, 0x26, - 0x7e, 0xeb, 0x9a, 0x00, 0x29, 0xfc, 0xaf, 0x2a, 0x15, 0x40, 0xb9, 0xe5, 0x81, 0x65, 0xca, 0x0f, - 0xff, 0xf7, 0x47, 0xf8, 0x65, 0x40, 0x09, 0x86, 0xb2, 0x54, 0x1e, 0x52, 0xfa, 0xee, 0xbd, 0xde, - 0x21, 0xe4, 0xe3, 0xad, 0x65, 0xd8, 0x3e, 0xf7, 0x16, 0xc5, 0xb7, 0xc3, 0xb8, 0x0c, 0x30, 0x48, - 0x53, 0x35, 0x13, 0xf8, 0x75, 0x49, 0x8e, 0x9b, 0xd4, 0x6b, 0x52, 0xf6, 0x28, 0x1c, 0xfc, 0xbb, - 0x4d, 0x69, 0x95, 0x0a, 0x97, 0x4d, 0x6d, 0x8a, 0xb8, 0x61, 0x40, 0xab, 0x16, 0xa4, 0xaf, 0xb2, - 0xfe, 0x9e, 0x9a, 0x74, 0x1f, 0xac, 0x05, 0x88, 0x01, 0x26, 0x46, 0xc9, 0x86, 0xb3, 0x83, 0x83, - 0x82, 0xbe, 0x44, 0x1c, 0x10, 0x73, 0x83, 0x88, 0x7f, 0x0f, 0xc0, 0x1a, 0x8e, 0x11, 0x72, 0xe0, - 0xe4, 0x1e, 0x0f, 0x0f, 0x06, 0x80, 0x31, 0x81, 0xb6, 0xd8, 0xea, 0xbb, 0x53, 0x4c, 0x43, 0xa7, - 0x3b, 0x0e, 0x28, 0x01, 0xc1, 0xf9, 0x1f, 0x0e, 0xbf, 0xf8, 0xab, 0xc5, 0x58, 0xab, 0x11, 0x91, - 0x56, 0xdb, 0x7a, 0x66, 0xd8, 0x75, 0xc0, 0x05, 0xed, 0x28, 0x4a, 0xba, 0x48, 0x5b, 0xa9, 0xbc, - 0xb6, 0xce, 0xec, 0xef, 0xa7, 0x27, 0x34, 0x31, 0x2c, 0x45, 0xa0, 0x9d, 0x04, 0xbd, 0x47, 0x16, - 0x37, 0x5b, 0x17, 0x84, 0x14, 0x10, 0x30, 0xeb, 0x4a, 0xdb, 0x7a, 0x69, 0xf8, 0x03, 0xd0, 0x00, - 0x90, 0x0d, 0x88, 0x07, 0x93, 0x80, 0xa8, 0x58, 0x54, 0x77, 0xe1, 0xdc, 0xa8, 0x79, 0xe5, 0x86, - 0x59, 0x8e, 0x96, 0x3e, 0x02, 0x40, 0x03, 0xc3, 0xa4, 0x12, 0x92, 0xd4, 0xb3, 0x91, 0x70, 0x2c, - 0xb1, 0x4c, 0xd4, 0x89, 0xff, 0xc3, 0x98, 0x08, 0xa0, 0xc5, 0x99, 0x05, 0xdd, 0xfd, 0xba, 0x3c, - 0x4e, 0xb3, 0x72, 0xfe, 0xdf, 0x4c, 0x1f, 0xf6, 0xeb, 0x80, 0x61, 0x56, 0xb7, 0xc7, 0x55, 0xfb, - 0x83, 0xff, 0x0e, 0x28, 0x02, 0xd7, 0x20, 0xfa, 0x58, 0x9c, 0x16, 0x7d, 0xff, 0x54, 0xac, 0xcd, - 0xa6, 0xc1, 0xd0, 0x3c, 0x74, 0xa3, 0x2b, 0x6d, 0x83, 0xfe, 0x3f, 0xf5, 0xd6, 0x5d, 0xa6, 0x0f, - 0xd0, 0x44, 0x0e, 0x44, 0xd3, 0x6e, 0x0b, 0x0d, 0x88, 0xad, 0xff, 0xae, 0x1b, 0xc0, 0x0b, 0x0e, - 0x59, 0x4e, 0x43, 0x02, 0xdb, 0x18, 0x26, 0x12, 0x1c, 0x27, 0x05, 0x60, 0xa0, 0x97, 0x2a, 0xfa, - 0xe7, 0xe4, 0x9c, 0x3c, 0x1e, 0x76, 0x05, 0x86, 0x23, 0xa2, 0x3b, 0xb4, 0x07, 0xac, 0x2b, 0x31, - 0x3e, 0x97, 0xb5, 0x0f, 0x60, 0x01, 0xba, 0x40, 0xfa, 0xd5, 0x19, 0x57, 0x4e, 0x71, 0xfd, 0xd3, - 0x13, 0xec, 0xe7, 0x7d, 0x6d, 0xf1, 0xbf, 0x96, 0xbc, 0xfc, 0x4b, 0xa5, 0x5d, 0x41, 0xd6, 0x01, - 0x18, 0x1b, 0x97, 0xbd, 0x30, 0x60, 0xb5, 0x3f, 0xdb, 0xc1, 0x0c, 0x6c, 0x40, 0xc0, 0x3b, 0x86, - 0xa5, 0xac, 0x3b, 0xca, 0xfb, 0xa7, 0x9c, 0x3c, 0xe1, 0x61, 0x8b, 0xa9, 0x47, 0x8e, 0x3e, 0x00, - 0x79, 0x65, 0x8f, 0x2c, 0x38, 0xe1, 0xc0, 0x0e, 0x0f, 0x07, 0x83, 0x00, 0x01, 0x41, 0x8c, 0x15, - 0x6b, 0x4c, 0x5b, 0x93, 0x8a, 0xb2, 0xc5, 0xe0, 0x2e, 0x00, 0x24, 0x03, 0x65, 0xe5, 0x1b, 0x30, - 0x0e, 0xe9, 0x4a, 0x2e, 0xc9, 0xca, 0x16, 0x00, 0x12, 0x02, 0xe2, 0x9b, 0x30, 0x00, 0x10, 0x0b, - 0x0f, 0x8b, 0x10, 0x58, 0xa8, 0x89, 0x46, 0x91, 0x15, 0x39, 0x29, 0x60, 0xf1, 0x27, 0x16, 0x15, - 0x7f, 0xf7, 0x40, 0x06, 0xa2, 0xf7, 0x2e, 0xb2, 0x46, 0x80, 0xc0, 0x72, 0x7d, 0xbf, 0x88, 0x75, - 0xb8, 0x78, 0x90, 0x03, 0x36, 0x6a, 0x20, 0x31, 0x6d, 0xba, 0x05, 0x54, 0x88, 0x60, 0xaf, 0x89, - 0x5c, 0x2e, 0xc5, 0x72, 0x2e, 0x78, 0xf2, 0x8b, 0xc1, 0xe3, 0x07, 0xd0, 0xef, 0x3b, 0xd0, 0xc6, - 0x50, 0x52, 0x81, 0xb0, 0x30, 0x2e, 0x44, 0xf4, 0xed, 0xaa, 0xf0, 0x40, 0x18, 0x0a, 0x4f, 0x1e, - 0x2c, 0xae, 0x3d, 0xce, 0xc8, 0x00, 0x14, 0xe4, 0xc0, 0xb1, 0x31, 0x14, 0x44, 0xaf, 0x00, 0x01, - 0x2c, 0xe3, 0x06, 0x08, 0x73, 0x21, 0xf8, 0x4b, 0x52, 0xa3, 0x80, 0x03, 0x18, 0x00, 0x06, 0x14, - 0x39, 0x80, 0x0f, 0xc3, 0x2c, 0xe8, 0x2a, 0x3d, 0x5e, 0x53, 0x37, 0x1f, 0xdf, 0x5d, 0x51, 0x0f, - 0x27, 0x42, 0xa6, 0xa9, 0x8b, 0x4f, 0xd3, 0x8e, 0xdd, 0x3c, 0x07, 0x40, 0x02, 0x23, 0xa1, 0x44, - 0xc3, 0x78, 0x97, 0x42, 0x61, 0x2e, 0x93, 0x8e, 0x1b, 0x70, 0x42, 0xd6, 0x60, 0x54, 0x87, 0x5c, - 0x13, 0xfb, 0xb6, 0xeb, 0x32, 0x6d, 0x0f, 0xff, 0xb6, 0xe2, 0xd1, 0xf9, 0xd0, 0x26, 0x1e, 0x59, - 0xaf, 0xc9, 0xc0, 0xc2, 0x21, 0x80, 0x64, 0x71, 0xb9, 0xa8, 0x16, 0x50, 0x1e, 0x1f, 0xf0, 0xa9, - 0x41, 0xc3, 0xa4, 0x80, 0x4f, 0x22, 0x3d, 0xbc, 0x32, 0x3b, 0xeb, 0xdb, 0x6d, 0x45, 0x79, 0xf8, - 0xe6, 0x14, 0xe0, 0xbf, 0xcf, 0xeb, 0x2c, 0x09, 0x38, 0xf8, 0x74, 0x90, 0x02, 0xab, 0x8d, 0xd0, - 0x88, 0xf7, 0x74, 0x15, 0xc6, 0x7e, 0x5f, 0x2d, 0xa6, 0x9e, 0xa5, 0xfb, 0x67, 0xf7, 0x0e, 0xc4, - 0xa9, 0x46, 0x58, 0x96, 0x6c, 0x94, 0x7b, 0xe1, 0xd5, 0x00, 0x2d, 0xa1, 0xf5, 0x96, 0x23, 0x77, - 0xe9, 0xbb, 0x7a, 0xd6, 0x9e, 0x5d, 0x6a, 0xe5, 0xa5, 0x61, 0x20, 0xa2, 0xf4, 0xc8, 0xd9, 0x57, - 0xcd, 0x05, 0xba, 0x2f, 0x87, 0x54, 0x00, 0x3f, 0xd9, 0x34, 0xe4, 0x1a, 0xa0, 0xef, 0x7b, 0xb5, - 0x6c, 0x77, 0x8b, 0x2e, 0xbb, 0x73, 0x75, 0x5e, 0x62, 0x6b, 0x42, 0xfc, 0x6b, 0x3c, 0x7d, 0xfc, - 0x31, 0x80, 0xfc, 0x78, 0xf9, 0x56, 0x33, 0x0e, 0xdc, 0xb5, 0xe2, 0xac, 0x55, 0xfe, 0xaf, 0x73, - 0xa6, 0x1e, 0xc0, 0x00, 0xba, 0xbd, 0x73, 0x6a, 0xff, 0xbd, 0xd5, 0xd4, 0xdd, 0xe3, 0xb6, 0xae, - 0xa0, 0xbc, 0xd7, 0xa2, 0xbe, 0xca, 0x1c, 0x24, 0x0e, 0x73, 0x5f, 0xfd, 0xb6, 0xfc, 0x18, 0x6e, - 0xf1, 0x0f, 0xef, 0x0e, 0x38, 0x01, 0x46, 0x9a, 0xe3, 0x9b, 0x3d, 0xf7, 0x97, 0xff, 0x83, 0xd6, - 0x6a, 0xbf, 0x86, 0xf0, 0x06, 0x0a, 0xc8, 0xbf, 0xbb, 0x2a, 0xb3, 0xff, 0xff, 0xa7, 0xbb, 0xff, - 0x0e, 0x60, 0x09, 0x9e, 0x9e, 0xbf, 0xd7, 0xff, 0xed, 0xb6, 0x05, 0xc8, 0x7a, 0x2a, 0xd5, 0x97, - 0xe1, 0xa5, 0x01, 0x3f, 0x2a, 0x00, 0xfa, 0xf5, 0xad, 0x34, 0xf7, 0xbc, 0x4c, 0xbc, 0x30, 0x48, - 0x24, 0x77, 0x7f, 0x9f, 0xbe, 0xdb, 0x7f, 0xd2, 0x38, 0x75, 0x14, 0x34, 0x3a, 0xbf, 0xf6, 0xe9, - 0xb7, 0x4e, 0x88, 0xb5, 0x6d, 0x34, 0xfe, 0x33, 0x04, 0x1e, 0x1d, 0xfa, 0x45, 0x56, 0x10, 0x71, - 0x93, 0x86, 0x5f, 0xef, 0x16, 0xe1, 0x45, 0x05, 0x67, 0x94, 0x79, 0xe7, 0x0d, 0xc8, 0x09, 0x73, - 0x1d, 0x2e, 0xff, 0xfe, 0x7e, 0x64, 0xf3, 0xff, 0x87, 0x88, 0x40, 0x01, 0x18, 0x65, 0x79, 0xa1, - 0x75, 0xfb, 0xe7, 0xcb, 0xdd, 0xbf, 0x2f, 0x37, 0xbf, 0x11, 0x14, 0x6e, 0x5f, 0xbe, 0x89, 0xfc, - 0x30, 0x8a, 0x03, 0xe9, 0xc9, 0x4d, 0x3a, 0x69, 0xa6, 0x9f, 0xf9, 0x15, 0x8c, 0x54, 0x7d, 0x85, - 0xd9, 0x04, 0xc8, 0x91, 0x56, 0x2f, 0x13, 0x08, 0x53, 0x2c, 0x17, 0xc5, 0x0c, 0xb6, 0x16, 0x03, - 0x83, 0xc5, 0x8d, 0x77, 0xc2, 0x6e, 0x00, 0xd4, 0x06, 0x4a, 0xbc, 0x88, 0xe6, 0x09, 0x81, 0xd0, - 0x75, 0x40, 0x71, 0x1c, 0x25, 0x4b, 0xd4, 0x5d, 0xf0, 0xbc, 0x8b, 0x89, 0xf2, 0xf8, 0x7b, 0x01, - 0x15, 0x56, 0x32, 0x2b, 0xfe, 0xfd, 0x6f, 0xf4, 0xfd, 0x69, 0xd3, 0x05, 0x63, 0x47, 0xd7, 0xbc, - 0x36, 0xe0, 0x00, 0x56, 0xa2, 0x8e, 0x8a, 0x06, 0xfe, 0x8d, 0x0b, 0x27, 0xb5, 0xaa, 0xdb, 0x8a, - 0xde, 0xaa, 0xa6, 0xbd, 0xfe, 0x1b, 0x70, 0x02, 0x00, 0x48, 0x37, 0x12, 0x24, 0xfb, 0xfc, 0x27, - 0x4d, 0xd6, 0xaf, 0x15, 0xc5, 0x6d, 0xdb, 0x59, 0x04, 0x3d, 0x75, 0x75, 0x86, 0x14, 0x00, 0x35, - 0x44, 0xd3, 0x04, 0x51, 0xa5, 0x67, 0x37, 0x47, 0xee, 0xfc, 0xff, 0x3f, 0xc4, 0xf8, 0xea, 0xff, - 0x37, 0xd1, 0x1f, 0x0d, 0xe0, 0x05, 0x7f, 0x83, 0xb4, 0x8c, 0x2e, 0x0b, 0x40, 0xa2, 0x63, 0xab, - 0xb7, 0x5a, 0x8e, 0xae, 0x3a, 0xb8, 0x9f, 0x3f, 0xcd, 0xe5, 0xdc, 0x76, 0xf4, 0xcb, 0x74, 0xdb, - 0xdb, 0x84, 0xf0, 0x05, 0x46, 0x6c, 0x81, 0x91, 0xfb, 0xdb, 0xfa, 0xdb, 0x15, 0x6d, 0xd5, 0xb3, - 0x78, 0x77, 0x00, 0x30, 0x10, 0x76, 0x30, 0xb3, 0xcf, 0xaf, 0x3f, 0xf6, 0xc1, 0xdf, 0xe2, 0x8b, - 0x14, 0x5c, 0x5d, 0x34, 0xf6, 0xdb, 0x87, 0x49, 0x00, 0x0e, 0x89, 0xef, 0x1b, 0x49, 0x22, 0x66, - 0x44, 0xb1, 0x4f, 0x97, 0xb6, 0x7b, 0xe1, 0x8b, 0x88, 0xfd, 0x8a, 0xb3, 0x71, 0x9c, 0x2a, 0xa3, - 0x58, 0x68, 0x2d, 0x32, 0xaa, 0x91, 0x08, 0x5c, 0xd6, 0xcd, 0x49, 0xbf, 0xc3, 0x6a, 0x00, 0x40, - 0x70, 0xf9, 0x0b, 0x50, 0x42, 0x1a, 0x77, 0xdd, 0x5f, 0x20, 0x99, 0x8b, 0xd2, 0xfd, 0xc8, 0xc8, - 0x46, 0xfa, 0xc3, 0xc3, 0xf2, 0x5e, 0x79, 0xf7, 0x2d, 0xa9, 0x90, 0xde, 0xcd, 0xee, 0x51, 0xbd, - 0xe1, 0xcc, 0x00, 0x5f, 0x1a, 0x20, 0xcc, 0x12, 0x15, 0xd7, 0xed, 0x0a, 0xd5, 0xc4, 0x79, 0xdf, - 0x5e, 0x25, 0xe4, 0xe3, 0xd7, 0x3b, 0xf1, 0x59, 0x6d, 0xcb, 0xc5, 0xc8, 0x52, 0x73, 0xf5, 0xd5, - 0xe1, 0x92, 0x40, 0x1a, 0x67, 0x0e, 0xa3, 0x05, 0x21, 0x07, 0xef, 0xe1, 0xff, 0xd5, 0x7c, 0x1d, - 0x5c, 0xbe, 0xb6, 0xdb, 0x15, 0x6d, 0xff, 0x0b, 0xe0, 0x03, 0xad, 0xe5, 0x87, 0x39, 0xb3, 0x74, - 0xfb, 0xcb, 0x06, 0xd4, 0xde, 0x75, 0x99, 0x15, 0x43, 0x2e, 0x00, 0x2e, 0xdb, 0xc0, 0xa2, 0xf1, - 0x54, 0x23, 0xf5, 0x8d, 0xee, 0xed, 0xdd, 0xb3, 0xd0, 0x0e, 0xcf, 0x4a, 0xc9, 0xc1, 0xb8, 0xce, - 0x6f, 0x2c, 0xf2, 0x0c, 0xf9, 0x85, 0xdc, 0x00, 0xfa, 0xb4, 0x2a, 0xe5, 0xa7, 0xcb, 0x2c, 0xff, - 0xcd, 0x7e, 0x68, 0xa7, 0x0e, 0xa8, 0x02, 0x77, 0x97, 0x19, 0x33, 0xa7, 0x8b, 0x62, 0xdf, 0xf6, - 0xf3, 0xa1, 0x94, 0xdb, 0x7a, 0x69, 0xf1, 0x8a, 0x09, 0x41, 0x83, 0xa5, 0x11, 0xaa, 0x86, 0x14, - 0x07, 0x43, 0x6b, 0x89, 0xec, 0x9d, 0x5b, 0xdf, 0x6f, 0x6d, 0x53, 0x4e, 0x9a, 0x71, 0x6c, 0x13, - 0xc3, 0x8a, 0x00, 0x33, 0x5c, 0x7c, 0x86, 0xa1, 0x1b, 0xea, 0x0c, 0xeb, 0xcb, 0x2c, 0x50, 0xb6, - 0xd2, 0xdf, 0x6f, 0x8d, 0x4d, 0x3d, 0xb7, 0xef, 0x80, 0x2f, 0x00, 0x09, 0x00, 0xd8, 0x1c, 0x3d, - 0x54, 0x7f, 0xa7, 0x80, 0x03, 0xcb, 0x16, 0x56, 0x54, 0x38, 0x07, 0x95, 0x0b, 0x50, 0xe0, 0x07, - 0x9e, 0x00, 0x38, 0x50, 0x1f, 0x41, 0x00, 0xf2, 0xc0, 0x18, 0xb1, 0x09, 0x61, 0xc0, 0x3d, 0x29, - 0x58, 0x98, 0x1e, 0x07, 0x01, 0x80, 0xe0, 0x5a, 0xc4, 0xb0, 0x88, 0x7e, 0xb1, 0x3f, 0x1d, 0x38, - 0x44, 0x9a, 0x48, 0xb7, 0x0e, 0x4c, 0x00, 0x17, 0xc4, 0x9d, 0x91, 0x80, 0x5c, 0x39, 0x87, 0x95, - 0x5d, 0xd3, 0x94, 0x59, 0xa0, 0x22, 0xfa, 0xff, 0x05, 0x85, 0x62, 0x4f, 0x1b, 0x86, 0xcd, 0xc7, - 0xbb, 0xc1, 0x9c, 0x8f, 0xc3, 0x78, 0x00, 0x9c, 0x8a, 0x61, 0x52, 0xe8, 0x41, 0x76, 0xe7, 0x97, - 0x0b, 0x7f, 0x56, 0x6b, 0x35, 0x2c, 0x7e, 0xab, 0xc6, 0xe0, 0x97, 0x41, 0xa0, 0x1f, 0x2b, 0xff, - 0x8b, 0x4f, 0xc2, 0xb8, 0x80, 0xb2, 0xe0, 0xed, 0xc6, 0x4c, 0x1c, 0xee, 0x0c, 0x39, 0x83, 0x45, - 0x7d, 0x43, 0x98, 0x01, 0x61, 0xcc, 0xa5, 0x6c, 0xa1, 0xfb, 0x94, 0xd9, 0x3d, 0x62, 0x07, 0x53, - 0x4e, 0xb6, 0xa3, 0x8f, 0x83, 0x11, 0x29, 0x5a, 0xfe, 0x50, 0x4b, 0x81, 0x64, 0x00, 0x00, 0x6d, - 0xd4, 0xae, 0x9e, 0x5f, 0x0e, 0xe0, 0x2c, 0x3e, 0xdc, 0x36, 0xac, 0x27, 0xa7, 0xa6, 0x9d, 0xe9, - 0xa7, 0xe5, 0x99, 0x7a, 0x69, 0xc7, 0x86, 0x14, 0x0a, 0x4d, 0x16, 0x49, 0x3e, 0x9c, 0x7f, 0xfb, - 0xb0, 0xe2, 0x80, 0x23, 0x29, 0xf4, 0x61, 0x19, 0x14, 0x8d, 0x3e, 0x32, 0xef, 0xad, 0x79, 0xf9, - 0xd1, 0x1d, 0xbf, 0x5e, 0x0e, 0x61, 0x4b, 0x87, 0x25, 0x19, 0xf1, 0x44, 0x1a, 0xad, 0x4b, 0x83, - 0xcc, 0x3f, 0x0c, 0x01, 0x79, 0x42, 0xae, 0x00, 0x86, 0xf8, 0x00, 0x1a, 0xa1, 0xe0, 0x00, 0xf1, - 0x61, 0xb8, 0xf0, 0x07, 0x96, 0xcb, 0x80, 0xb0, 0x94, 0x00, 0x09, 0x2a, 0xa5, 0x25, 0x00, 0xa8, - 0xc0, 0x00, 0x23, 0x18, 0x00, 0x06, 0x83, 0x0c, 0x80, 0x4e, 0x46, 0xc6, 0x8e, 0x18, 0xc3, 0xbe, - 0xaf, 0xfe, 0xd9, 0x22, 0xe2, 0xe4, 0xa2, 0xad, 0xc2, 0x50, 0x00, 0x54, 0xe0, 0x07, 0x22, 0x48, - 0xe0, 0x1c, 0x38, 0x07, 0x07, 0x00, 0x03, 0x70, 0xd4, 0x05, 0xf2, 0x7b, 0x62, 0xaf, 0x81, 0xe4, - 0x6c, 0x3a, 0x9a, 0x91, 0x40, 0x60, 0x5a, 0x06, 0xd7, 0x49, 0xc0, 0xca, 0x0e, 0x03, 0x00, 0x55, - 0x28, 0x80, 0x00, 0x80, 0x1f, 0x8f, 0x70, 0x94, 0x07, 0x6c, 0xc4, 0x7f, 0x8e, 0x07, 0x0e, 0x71, - 0x2b, 0x4c, 0x6e, 0x5e, 0x2a, 0x05, 0x40, 0x49, 0xcc, 0xc0, 0x00, 0x40, 0x03, 0x21, 0x10, 0x1c, - 0x3e, 0x05, 0xf2, 0xf9, 0x6b, 0x4f, 0x80, 0x80, 0x0a, 0x4b, 0x06, 0x7e, 0x08, 0xc3, 0x48, 0xbd, - 0xd5, 0xe2, 0xc4, 0xb2, 0x00, 0x01, 0x00, 0x04, 0x8f, 0x38, 0xf0, 0x00, 0x08, 0x03, 0x40, 0x14, - 0x51, 0x10, 0x79, 0x62, 0xf6, 0x43, 0xc3, 0xa0, 0x58, 0x38, 0x31, 0xc0, 0x38, 0x6d, 0xc0, 0x31, - 0x36, 0x31, 0x32, 0x75, 0x63, 0xff, 0xfb, 0x64, 0xeb, 0x6d, 0x9f, 0xdf, 0x7b, 0x77, 0x0e, 0xcd, - 0x89, 0x5c, 0x67, 0xca, 0x58, 0x36, 0xb1, 0x10, 0xb1, 0x87, 0x5c, 0x00, 0x86, 0xa3, 0x76, 0xc5, - 0x0f, 0xf7, 0x5b, 0x6e, 0x4e, 0xdb, 0x6c, 0xd5, 0x35, 0x6c, 0x5b, 0x27, 0x6c, 0xb5, 0x82, 0x80, - 0x22, 0xfa, 0x94, 0x73, 0x05, 0x99, 0xdd, 0xf8, 0x6d, 0xc0, 0x1f, 0xcf, 0xd0, 0x51, 0x56, 0x53, - 0x77, 0xfb, 0xa8, 0x99, 0xdf, 0x7b, 0x6b, 0x9f, 0x8f, 0x75, 0xc8, 0x3e, 0xea, 0x5e, 0x0f, 0x69, - 0x64, 0x35, 0x59, 0x9c, 0x7f, 0xc3, 0x78, 0x00, 0xc3, 0xa5, 0x89, 0x39, 0x4a, 0xcf, 0x93, 0x4d, - 0x6c, 0xf6, 0xa2, 0x5f, 0x1c, 0x4b, 0xed, 0xf8, 0x62, 0x0d, 0x28, 0x3d, 0x71, 0x45, 0xa4, 0x56, - 0xf8, 0x7c, 0x36, 0xe0, 0x48, 0x6e, 0xe3, 0x75, 0x35, 0xf7, 0x55, 0xfe, 0x2a, 0x1e, 0x5b, 0x9f, - 0xc3, 0x38, 0x22, 0x33, 0x63, 0x77, 0xff, 0x6f, 0xdb, 0x4a, 0xa3, 0xf0, 0x15, 0xe9, 0xf9, 0xdb, - 0x2b, 0x2b, 0x2b, 0x28, 0x5e, 0x50, 0x14, 0xf9, 0xc8, 0x26, 0x4f, 0xff, 0xf8, 0xd5, 0x30, 0x96, - 0x09, 0x55, 0x81, 0xb8, 0x82, 0x44, 0x14, 0xd3, 0x6c, 0x43, 0xfd, 0xf0, 0xea, 0x20, 0x03, 0x08, - 0xd2, 0x1f, 0xcd, 0xd9, 0xff, 0xb6, 0x2a, 0xcf, 0xfc, 0xe2, 0x2e, 0xe6, 0xff, 0x87, 0x9c, 0x04, - 0xbd, 0xca, 0xd7, 0xfb, 0xf4, 0xf5, 0xf8, 0xec, 0xbd, 0x7a, 0xe1, 0xdc, 0x09, 0x57, 0x23, 0x42, - 0x3f, 0xf6, 0xeb, 0xb6, 0x99, 0xf7, 0xf8, 0x41, 0x94, 0x32, 0x32, 0x8a, 0xb7, 0x4d, 0x3d, 0xb6, - 0xe1, 0xc2, 0x40, 0x2d, 0xe3, 0x21, 0xff, 0x4f, 0xff, 0xb6, 0x9a, 0x6e, 0x74, 0xd3, 0xdb, 0x6e, - 0x18, 0x44, 0x02, 0x07, 0x78, 0x1e, 0x76, 0xff, 0xed, 0xfc, 0x73, 0x08, 0x28, 0xdb, 0x58, 0xbd, - 0x3f, 0x84, 0x14, 0x35, 0xe5, 0xed, 0xfc, 0x20, 0xa8, 0xf5, 0xe9, 0xfc, 0x38, 0xa0, 0x0c, 0xa7, - 0x54, 0x68, 0x77, 0xbb, 0xe5, 0xff, 0xb6, 0x7e, 0x9c, 0x7a, 0xf7, 0xf8, 0x6f, 0x01, 0xc0, 0x29, - 0xff, 0xbd, 0xfd, 0xc6, 0xf9, 0x74, 0xfd, 0xfd, 0xdd, 0xbd, 0x9f, 0x16, 0xc5, 0xb0, 0x3d, 0x64, - 0x00, 0x7f, 0xf2, 0xcb, 0x10, 0x1d, 0xdb, 0x6e, 0x10, 0x50, 0xb0, 0x3e, 0x2a, 0xbb, 0x6d, 0xfc, - 0x62, 0x9c, 0x83, 0x16, 0x17, 0x70, 0x06, 0x50, 0x34, 0xa4, 0x0d, 0x30, 0xc4, 0x0f, 0x9a, 0x6e, - 0x48, 0x27, 0x8d, 0x31, 0x59, 0x21, 0xc0, 0xa3, 0x38, 0x30, 0x6f, 0xb2, 0xdb, 0x82, 0xb0, 0x67, - 0xc3, 0x6e, 0x00, 0x5a, 0xa3, 0xc1, 0x24, 0x0b, 0x0a, 0x7c, 0x0e, 0xd0, 0x24, 0x1d, 0x07, 0x68, - 0x9c, 0x00, 0xf8, 0x58, 0x4e, 0x38, 0xd0, 0x2c, 0x00, 0x63, 0x8d, 0x02, 0xc0, 0x06, 0x88, 0xfc, - 0x6f, 0x05, 0xb2, 0xf6, 0xff, 0xc3, 0x6e, 0x00, 0x2b, 0xce, 0xc1, 0x3c, 0x40, 0x62, 0x4b, 0xdb, - 0x5c, 0x9d, 0x4e, 0xf2, 0xf8, 0x93, 0xd4, 0x9e, 0x65, 0x4d, 0x12, 0xfd, 0xfa, 0xc3, 0xb8, 0x01, - 0x0a, 0x22, 0x3c, 0x83, 0x05, 0xec, 0x6f, 0x19, 0xcc, 0x8c, 0xb2, 0x2f, 0x8a, 0xcf, 0xf9, 0xef, - 0x7c, 0x0b, 0x6f, 0x81, 0xff, 0x55, 0xc5, 0xac, 0x4e, 0x84, 0x52, 0x5a, 0xa6, 0xf7, 0xc3, 0x6e, - 0x00, 0x4d, 0xc7, 0x10, 0x1e, 0x67, 0x77, 0xfe, 0x57, 0xbf, 0x4d, 0xb7, 0x37, 0xc9, 0xf5, 0x27, - 0x86, 0x7f, 0xbc, 0x33, 0x80, 0x0c, 0x34, 0x5a, 0x4c, 0x28, 0xaf, 0xf7, 0x2b, 0x5f, 0xc5, 0x2c, - 0x1f, 0xfd, 0x3f, 0x70, 0x07, 0x80, 0x01, 0x51, 0x0a, 0x44, 0x7e, 0xb1, 0x2e, 0x0e, 0x9e, 0x72, - 0xf9, 0x78, 0xa3, 0x96, 0xc4, 0x38, 0x34, 0x00, 0x0c, 0xa0, 0x48, 0x01, 0xc3, 0xa4, 0x80, 0x43, - 0xb6, 0x16, 0x53, 0x81, 0x88, 0x69, 0x0b, 0x59, 0xbc, 0x9c, 0xb5, 0x96, 0xb8, 0xc1, 0xf7, 0x11, - 0xe3, 0xee, 0x77, 0xc9, 0x76, 0x3e, 0xf5, 0x0d, 0xf8, 0xb1, 0x6f, 0xf8, 0x73, 0x00, 0x22, 0x86, - 0x30, 0x71, 0x8a, 0x14, 0xac, 0xfe, 0xbe, 0x9a, 0x6d, 0xb7, 0xd3, 0x3f, 0x3d, 0xed, 0xe7, 0x3c, - 0x63, 0x1b, 0xf5, 0xef, 0x0f, 0x28, 0x00, 0x7f, 0x4c, 0x70, 0x13, 0x7e, 0x9e, 0x19, 0x2d, 0x8d, - 0xe6, 0x4d, 0xc6, 0xab, 0xf2, 0xca, 0xf1, 0x7c, 0xb6, 0xae, 0xeb, 0xf4, 0x28, 0x6e, 0x3c, 0xf3, - 0xfc, 0xef, 0x91, 0x1b, 0x7b, 0xd5, 0xd6, 0x1b, 0x50, 0x6f, 0x6d, 0xf3, 0x05, 0x02, 0xfb, 0x7e, - 0xe9, 0x6c, 0xb5, 0x88, 0xfa, 0x50, 0xe8, 0xfe, 0x55, 0x5c, 0x9b, 0x28, 0xff, 0x59, 0x98, 0x77, - 0xeb, 0xde, 0x9c, 0x38, 0xa0, 0x0a, 0xcf, 0x6c, 0x90, 0x1f, 0x74, 0x0a, 0xf7, 0x69, 0xbb, 0xb6, - 0x5f, 0x1f, 0xac, 0xdc, 0xbf, 0xa6, 0x0e, 0xdc, 0xff, 0x13, 0x21, 0xaa, 0xfd, 0x3e, 0x1e, 0x70, - 0x02, 0xde, 0xa2, 0x43, 0x17, 0xd5, 0x81, 0x6c, 0x7e, 0xf8, 0xe7, 0xd8, 0xac, 0x56, 0xdb, 0x75, - 0x71, 0x0f, 0xc5, 0x65, 0xf9, 0x6c, 0x4b, 0xc0, 0xe9, 0x42, 0x96, 0xb3, 0x7e, 0xf8, 0x79, 0xc0, - 0x62, 0x71, 0x25, 0x85, 0x1c, 0x1f, 0xbf, 0x79, 0xfe, 0xab, 0x15, 0xa6, 0x2b, 0x6b, 0xdf, 0xf0, - 0xc9, 0x20, 0x0c, 0xfc, 0xc9, 0xc4, 0x40, 0x21, 0x5a, 0x8b, 0x07, 0x27, 0xb4, 0x99, 0x55, 0x5d, - 0x57, 0xb6, 0xd9, 0x23, 0xb8, 0x85, 0x00, 0xee, 0xe0, 0x74, 0xd0, 0xbe, 0x00, 0x86, 0xcd, 0x33, - 0xc2, 0xef, 0xfb, 0xb6, 0x7f, 0xb6, 0xdf, 0x61, 0x37, 0x04, 0xd4, 0x36, 0x32, 0x5f, 0xfb, 0x6d, - 0xfc, 0x6a, 0x38, 0x69, 0x9e, 0x6b, 0x1d, 0x30, 0x40, 0xa5, 0xec, 0x3c, 0xa0, 0x02, 0xd3, 0x72, - 0xc2, 0x7a, 0xca, 0x32, 0xea, 0xd4, 0xb1, 0x93, 0x9c, 0x17, 0xdf, 0xc1, 0xef, 0xe5, 0x40, 0x16, - 0xfc, 0x5f, 0xc0, 0x18, 0x00, 0x0f, 0x81, 0xb3, 0xc7, 0x05, 0x61, 0xc5, 0x02, 0x55, 0xf9, 0x3e, - 0xdc, 0x98, 0x00, 0x0c, 0x5c, 0x1a, 0x24, 0x2e, 0x28, 0x80, 0x09, 0x48, 0x48, 0x00, 0x4b, 0x8a, - 0xc9, 0xab, 0x50, 0x84, 0x34, 0x07, 0x63, 0x4c, 0x5b, 0x5f, 0xe0, 0x48, 0x05, 0x01, 0x4d, 0x27, - 0x15, 0xa4, 0x4c, 0x15, 0xd8, 0xac, 0x51, 0xb4, 0x7c, 0x15, 0xbf, 0x18, 0x00, 0xa1, 0xc1, 0xe0, - 0xe6, 0x15, 0xb3, 0x0f, 0xee, 0x0d, 0xea, 0xb9, 0x7d, 0xab, 0xa8, 0x60, 0x00, 0xa0, 0xd4, 0x6f, - 0xf9, 0x30, 0xa0, 0xf8, 0x0c, 0x18, 0x5b, 0xcf, 0x7b, 0x88, 0x63, 0x8d, 0x9b, 0x8e, 0x30, 0x04, - 0x00, 0x02, 0x82, 0x46, 0x46, 0xf2, 0xaa, 0xec, 0x68, 0x6d, 0xf9, 0x3d, 0x14, 0x3d, 0x80, 0x30, - 0x80, 0x25, 0x31, 0x02, 0x94, 0x97, 0x7f, 0xe0, 0x3a, 0x5e, 0x9c, 0x1d, 0x5f, 0xf6, 0xdb, 0x07, - 0x4b, 0xeb, 0x07, 0x12, 0xe6, 0x89, 0x39, 0x7e, 0x5e, 0x5f, 0xcb, 0xe1, 0x8c, 0x01, 0xfd, 0x2d, - 0x5c, 0x7a, 0x69, 0xf8, 0xa5, 0x8a, 0x5e, 0x29, 0x62, 0x97, 0x11, 0x19, 0xc3, 0xaa, 0x00, 0x3e, - 0x85, 0xd2, 0x91, 0x8e, 0x0a, 0xce, 0xd2, 0x69, 0xdc, 0xff, 0xf7, 0xb9, 0xf8, 0x7f, 0xe3, 0xc7, - 0x8c, 0x58, 0x12, 0xe0, 0xb5, 0x01, 0x9e, 0xe8, 0xb9, 0xe3, 0x0f, 0x60, 0x01, 0xf4, 0x44, 0x27, - 0x5a, 0xdc, 0x23, 0xe8, 0xc9, 0xa3, 0x18, 0xc0, 0xff, 0xbb, 0xec, 0xab, 0x6e, 0x38, 0xbe, 0x4b, - 0xdb, 0xd4, 0xf6, 0x5b, 0x17, 0x30, 0x6b, 0x66, 0xfc, 0xdc, 0xbf, 0x97, 0xc3, 0xaa, 0x12, 0xf5, - 0x83, 0x4f, 0xdd, 0xa7, 0xc7, 0x1d, 0x3e, 0x5f, 0xfe, 0x23, 0x2d, 0x34, 0xf6, 0xdb, 0x87, 0x09, - 0x00, 0xf7, 0x50, 0x17, 0x53, 0x0a, 0x5f, 0xda, 0xd6, 0xa4, 0xe0, 0xe8, 0x48, 0x70, 0xf8, 0x4d, - 0x14, 0x6f, 0x07, 0xe1, 0x96, 0x6f, 0x63, 0xbf, 0xe1, 0xdc, 0x00, 0xef, 0x58, 0x48, 0xd1, 0x21, - 0x31, 0x2e, 0xff, 0xc7, 0x0f, 0xb2, 0x56, 0x8e, 0x1e, 0x19, 0xb1, 0x24, 0x3d, 0x83, 0x4d, 0x83, - 0x19, 0xc3, 0xa5, 0x22, 0x1f, 0xd1, 0xa9, 0x6c, 0x83, 0xc2, 0xb5, 0x59, 0x0a, 0xd9, 0x14, 0x3b, - 0x66, 0xce, 0xc0, 0xdc, 0xec, 0x8d, 0x84, 0x1e, 0xcc, 0xf8, 0xd7, 0x2d, 0x48, 0xe1, 0x43, 0xb8, - 0x01, 0x3f, 0x19, 0xa6, 0xc3, 0x2a, 0xc8, 0xed, 0xeb, 0x14, 0x65, 0xf8, 0x87, 0x7f, 0x44, 0xd3, - 0x8d, 0x35, 0x3a, 0x2e, 0x48, 0x3d, 0xc7, 0x5d, 0x34, 0xc0, 0xf2, 0x03, 0x10, 0xea, 0x2d, 0x93, - 0xc6, 0xaa, 0xe6, 0x77, 0xe1, 0xcc, 0x08, 0xae, 0x34, 0x72, 0xfe, 0xdd, 0xbf, 0xe3, 0xa2, 0xdb, - 0x29, 0xfc, 0x39, 0x80, 0xc0, 0xd6, 0x38, 0x51, 0x0f, 0xea, 0x9e, 0xbb, 0x7f, 0x4f, 0xe3, 0xfe, - 0xdf, 0xc3, 0x8a, 0x00, 0xc1, 0x8d, 0x11, 0x82, 0x5c, 0x9d, 0x71, 0x5d, 0xd3, 0xff, 0x09, 0x17, - 0x4c, 0x8b, 0x63, 0x9f, 0xff, 0x0e, 0x60, 0x04, 0x02, 0xe8, 0xbe, 0x0c, 0xd7, 0xb4, 0xde, 0xd8, - 0xab, 0x07, 0x1f, 0xd3, 0xfd, 0xb6, 0xc2, 0x7d, 0xa5, 0x0a, 0xe6, 0xfa, 0xff, 0x87, 0x89, 0x00, - 0x49, 0x1d, 0x54, 0x1e, 0x89, 0x67, 0x76, 0xe3, 0xb7, 0xe9, 0xe9, 0xa7, 0x94, 0x99, 0x13, 0xa6, - 0xdb, 0x7f, 0x0c, 0x28, 0x12, 0x8f, 0xa6, 0x8d, 0xb6, 0xdb, 0x6d, 0xb6, 0xdf, 0xff, 0x91, 0x43, - 0x8a, 0x38, 0xeb, 0x6f, 0xb6, 0xdf, 0xfe, 0x75, 0x96, 0xdb, 0xdb, 0x6f, 0x87, 0x14, 0x04, 0x2d, - 0x46, 0x13, 0xf4, 0xd3, 0xff, 0x34, 0x4c, 0xb4, 0xf4, 0xd3, 0xe1, 0xc5, 0x04, 0x89, 0x08, 0x65, - 0xa5, 0x3e, 0x5f, 0xb6, 0xdf, 0xfd, 0x6e, 0x97, 0x7f, 0x86, 0x15, 0x0a, 0x55, 0x7f, 0xf6, 0xf3, - 0xf6, 0xde, 0x74, 0xc3, 0x8a, 0x10, 0xe2, 0xa0, 0xd3, 0x4f, 0x4d, 0x3b, 0x6f, 0xaf, 0xa9, 0xf5, - 0xfb, 0xfc, 0x72, 0x86, 0x27, 0xe9, 0xcb, 0x18, 0xa0, 0x83, 0x1d, 0x6d, 0x58, 0x50, 0x90, 0xe6, - 0xab, 0x4f, 0x4d, 0x3f, 0xfe, 0x21, 0x42, 0x17, 0xab, 0xc4, 0x28, 0x1a, 0xc7, 0x2d, 0x0c, 0x28, - 0x17, 0xd6, 0x5b, 0xdb, 0xff, 0xec, 0x61, 0x82, 0x40, 0x89, 0xf3, 0x0b, 0xfd, 0x5f, 0xf9, 0x61, - 0x85, 0x1f, 0x6b, 0xed, 0xb7, 0xfd, 0xfe, 0xc2, 0xca, 0x15, 0x44, 0x0b, 0xfd, 0x7f, 0xc7, 0x12, - 0x13, 0x73, 0xbf, 0x61, 0x3c, 0x00, 0x2e, 0xef, 0x70, 0xb3, 0xf2, 0x90, 0xcf, 0xfe, 0x91, 0x83, - 0xc1, 0x8f, 0xd3, 0x53, 0x7b, 0x53, 0x74, 0x43, 0x45, 0x76, 0x4b, 0xe4, 0xb3, 0xc3, 0x6e, 0x03, - 0x8f, 0x66, 0x3c, 0x0f, 0x7e, 0xef, 0xb2, 0x4e, 0x78, 0x79, 0xd6, 0x56, 0x54, 0x54, 0x58, 0x7b, - 0x00, 0x8b, 0x6d, 0x2b, 0x19, 0x0b, 0x5f, 0xa5, 0xb9, 0xbf, 0xef, 0x59, 0xbc, 0x5d, 0x14, 0xdf, - 0xaf, 0x87, 0x9c, 0x00, 0x57, 0x09, 0x15, 0x5d, 0xf8, 0x64, 0x91, 0x25, 0xf2, 0xfc, 0x5d, 0x35, - 0xbd, 0x90, 0x3f, 0xf1, 0xc6, 0x0f, 0xf9, 0x99, 0x5f, 0x6f, 0xe1, 0xdc, 0x00, 0x55, 0xa9, 0x31, - 0xbb, 0x3b, 0x6b, 0x2e, 0x2b, 0xb8, 0xbb, 0x3a, 0x97, 0xd3, 0x2f, 0xac, 0xb4, 0x1d, 0x2e, 0x7b, - 0xca, 0x2b, 0x8a, 0xc5, 0x9b, 0xff, 0x0e, 0x60, 0x04, 0xee, 0x1a, 0x82, 0x54, 0xde, 0x35, 0x61, - 0x57, 0xcf, 0xb2, 0xf4, 0xe3, 0x6f, 0x76, 0xf1, 0xff, 0x8c, 0x5b, 0x3b, 0xc7, 0xdc, 0xbb, 0x1f, - 0xf2, 0xcb, 0x1c, 0xfc, 0x68, 0x50, 0x0a, 0x2d, 0xb7, 0xa7, 0x6f, 0x0d, 0x12, 0x00, 0x39, 0x29, - 0x98, 0x70, 0xa6, 0x23, 0x7f, 0xec, 0xde, 0xa7, 0xab, 0x59, 0x17, 0x96, 0x35, 0x2d, 0xd5, 0xbb, - 0x6c, 0xc3, 0x04, 0x80, 0x60, 0xb9, 0x4c, 0x1c, 0x0e, 0x6e, 0xd4, 0xd5, 0xb6, 0xcd, 0xdb, 0x77, - 0xff, 0x13, 0x3d, 0x86, 0xc9, 0x00, 0x12, 0xf5, 0xbb, 0xd0, 0x9d, 0xef, 0xbb, 0xd4, 0x90, 0x1d, - 0x05, 0xd3, 0x00, 0x3e, 0xf5, 0xa6, 0xd8, 0x3b, 0x72, 0x21, 0x7a, 0xaf, 0x7e, 0x1e, 0x50, 0x0a, - 0x01, 0x21, 0x8b, 0x01, 0x50, 0x5a, 0x5f, 0xfe, 0xa0, 0x5d, 0x41, 0x1b, 0x38, 0x07, 0xca, 0x61, - 0x78, 0x7b, 0xb1, 0xf9, 0x9d, 0xd3, 0x3b, 0x05, 0xf8, 0x14, 0x1f, 0xc5, 0xbc, 0xc7, 0x1f, 0xb3, - 0x10, 0xfd, 0x9f, 0x03, 0x8f, 0xce, 0x74, 0x55, 0x16, 0x7a, 0x7f, 0x0c, 0xb8, 0x01, 0x2e, 0x6f, - 0x13, 0x75, 0x87, 0x40, 0x65, 0xbf, 0x15, 0xbe, 0x87, 0x20, 0xf7, 0xca, 0xbf, 0x46, 0xdf, 0xcf, - 0x5c, 0x1b, 0xf8, 0xa7, 0xef, 0x1b, 0x82, 0x1c, 0x33, 0x80, 0x84, 0x30, 0x25, 0xa1, 0x16, 0x87, - 0x7f, 0xb2, 0x32, 0xff, 0x37, 0x4e, 0x3e, 0x0e, 0x5f, 0x4f, 0xee, 0x61, 0xc2, 0x40, 0x01, 0x38, - 0x3a, 0x8b, 0xe8, 0x98, 0x82, 0x67, 0x5e, 0x90, 0x74, 0xba, 0xde, 0x77, 0x0f, 0x76, 0x09, 0x86, - 0xc2, 0xed, 0x41, 0xdf, 0x1f, 0x8b, 0xaf, 0x19, 0xda, 0x45, 0xbc, 0xba, 0xec, 0xf1, 0xd6, 0x37, - 0x18, 0xab, 0xde, 0xb5, 0x87, 0x49, 0x00, 0xb2, 0x54, 0x88, 0x53, 0x0e, 0xf7, 0xfc, 0x87, 0xae, - 0xa3, 0xa1, 0xbf, 0xef, 0x7b, 0x9e, 0x99, 0xa1, 0x19, 0x19, 0xd7, 0x4f, 0xb7, 0x0c, 0xe0, 0x03, - 0x5a, 0x5c, 0x46, 0x54, 0x6e, 0xd2, 0xd6, 0xab, 0xa6, 0x98, 0xa5, 0x8b, 0x69, 0xf7, 0x30, 0xc2, - 0x28, 0x27, 0x38, 0xbe, 0x3b, 0x6f, 0x6c, 0xdf, 0xff, 0x7c, 0x28, 0x88, 0x43, 0xe4, 0xf4, 0xbf, - 0xb2, 0xdf, 0xf8, 0x53, 0x00, 0x4b, 0xd3, 0xc2, 0x2c, 0x9f, 0x56, 0xcd, 0xfe, 0xbc, 0x27, 0x80, - 0x0d, 0x7b, 0x1b, 0x58, 0xe5, 0x11, 0x5a, 0xed, 0xcf, 0xc6, 0xb1, 0xcb, 0x71, 0x5b, 0x6f, 0x0d, - 0x28, 0x0b, 0xb4, 0x2e, 0x7f, 0xaf, 0xff, 0xe1, 0xac, 0x00, 0xdf, 0x2f, 0x14, 0x3f, 0x4f, 0xfd, - 0x7f, 0x7c, 0x37, 0x80, 0x66, 0x51, 0x01, 0xf7, 0x8a, 0x0c, 0xf5, 0x96, 0x0e, 0x28, 0x0c, 0xa2, - 0x58, 0xcb, 0x0f, 0x14, 0x1c, 0x40, 0xf0, 0xa0, 0x1c, 0x65, 0x25, 0x88, 0xc1, 0xaf, 0x1f, 0x55, - 0xf0, 0x88, 0x12, 0x42, 0x93, 0x66, 0x29, 0x8b, 0xea, 0x2e, 0x2e, 0x29, 0xa6, 0x5c, 0x14, 0xc5, - 0xe2, 0x8e, 0x00, 0x05, 0x63, 0xb8, 0x71, 0x43, 0xb9, 0x66, 0xdb, 0xdb, 0x6f, 0xdd, 0x7f, 0xa9, - 0xa6, 0xdb, 0x7f, 0x0e, 0x60, 0x30, 0x82, 0x93, 0x48, 0x6f, 0x37, 0x60, 0xc6, 0xd6, 0x2c, 0xde, - 0x8e, 0x4c, 0xa0, 0x7d, 0x3e, 0x4f, 0x30, 0x73, 0xf1, 0x94, 0xb0, 0x09, 0x0d, 0x0d, 0x8b, 0x36, - 0xe8, 0x87, 0xd3, 0x42, 0xd7, 0xb6, 0x56, 0x7d, 0x0e, 0x60, 0x0e, 0x8a, 0xcb, 0x4f, 0x5f, 0xb6, - 0xde, 0xdb, 0x75, 0xca, 0x3f, 0x0e, 0x37, 0x6d, 0xb2, 0xd6, 0x2a, 0xc0, 0x20, 0x41, 0xe3, 0x5f, - 0x5e, 0x51, 0x24, 0x1c, 0x3b, 0x80, 0x09, 0xb3, 0x0c, 0x8d, 0xbf, 0x28, 0x45, 0xac, 0x0d, 0x4b, - 0xb6, 0x50, 0x15, 0x57, 0xbf, 0x1c, 0x3c, 0x7b, 0xae, 0x4d, 0xe8, 0xa4, 0x2f, 0xd3, 0x2f, 0xcb, - 0xe1, 0xbc, 0x00, 0x47, 0x03, 0x75, 0x18, 0x7d, 0xef, 0x84, 0x23, 0xde, 0x85, 0x47, 0xa5, 0x83, - 0xac, 0x68, 0x66, 0x4a, 0x81, 0xdd, 0x68, 0xa1, 0x86, 0x94, 0x8a, 0x0e, 0x0d, 0xbc, 0x07, 0x61, - 0x61, 0x5a, 0x0d, 0x20, 0xae, 0xc2, 0x01, 0xbd, 0xcd, 0xb2, 0x04, 0x99, 0x45, 0x6a, 0xee, 0xc6, - 0x2e, 0x61, 0xc5, 0x00, 0x7b, 0xd8, 0xbb, 0x2b, 0x0b, 0x94, 0x91, 0xff, 0xff, 0x83, 0xcf, 0x9c, - 0xf7, 0x29, 0x3e, 0xac, 0xdf, 0xd7, 0xe3, 0x68, 0x14, 0x0a, 0xae, 0xad, 0xfe, 0x19, 0x08, 0x0d, - 0x8e, 0x9f, 0x8e, 0x9f, 0xc7, 0x96, 0x59, 0x81, 0xc2, 0xa0, 0xaa, 0x70, 0xd0, 0x58, 0x10, 0x1d, - 0x31, 0xdc, 0x43, 0x42, 0x41, 0xf1, 0xfc, 0x1d, 0xb0, 0x31, 0x83, 0x86, 0x06, 0x84, 0xfc, 0x69, - 0xa6, 0x9c, 0x3d, 0x80, 0x1f, 0xcb, 0x99, 0x58, 0x0a, 0xce, 0x7f, 0x7a, 0xb3, 0xde, 0x4e, 0x70, - 0xf3, 0xcf, 0x7f, 0x9a, 0xdb, 0xc9, 0x07, 0x05, 0x8b, 0x7d, 0x71, 0xed, 0x04, 0xb0, 0x48, 0x14, - 0x88, 0x8e, 0x96, 0xfe, 0x9e, 0x18, 0x50, 0x08, 0x8a, 0x30, 0xd9, 0x8c, 0xa0, 0xf8, 0xdf, 0x0b, - 0xf0, 0xfa, 0x16, 0x5c, 0x6d, 0xfc, 0x27, 0xd1, 0xbe, 0xb3, 0xf7, 0xfa, 0xdf, 0xcf, 0x7d, 0x9e, - 0x3e, 0x45, 0x44, 0x36, 0xe0, 0x0c, 0x8d, 0x92, 0x10, 0x2b, 0xc4, 0x2f, 0x9e, 0xb4, 0x61, 0xf6, - 0x57, 0x68, 0xbb, 0xbd, 0xb0, 0x5e, 0x03, 0xaf, 0x7b, 0xc4, 0xb5, 0xc3, 0x04, 0x80, 0xde, 0xb1, - 0x60, 0x93, 0x4f, 0xfd, 0x7d, 0xeb, 0x0c, 0x60, 0x0f, 0xf7, 0x0e, 0xce, 0xff, 0xfe, 0x9c, 0x58, - 0x51, 0x40, 0x0c, 0x2e, 0x94, 0x9a, 0x65, 0xff, 0xf7, 0x3f, 0x1d, 0xfc, 0x28, 0xa0, 0x03, 0x02, - 0x0e, 0x74, 0xc4, 0x1f, 0x48, 0xf6, 0xfe, 0xf6, 0xc1, 0x41, 0xc6, 0x58, 0xb6, 0xc1, 0xd7, 0xc2, - 0xae, 0xa5, 0x77, 0x42, 0x6a, 0x08, 0xe2, 0x1d, 0x8a, 0x8f, 0xf6, 0xfb, 0x78, 0xab, 0x6e, 0x1c, - 0x50, 0x02, 0x44, 0x0f, 0xf6, 0x60, 0x54, 0x94, 0xdd, 0xaf, 0xf3, 0xf6, 0xf7, 0x07, 0x7e, 0x2a, - 0xc7, 0x5f, 0x2d, 0x6b, 0xa6, 0x9f, 0xc3, 0x0a, 0x00, 0x68, 0x00, 0x7c, 0x62, 0x88, 0xb6, 0xf4, - 0xff, 0x4d, 0x34, 0xc5, 0xb9, 0xf8, 0x3f, 0xe7, 0x9a, 0xc5, 0x87, 0x14, 0x00, 0x9a, 0xf6, 0xb0, - 0x9c, 0x3e, 0x9d, 0xfe, 0x5e, 0x9d, 0x74, 0xdc, 0x1d, 0xfd, 0x6b, 0xb6, 0xdf, 0xc3, 0x6a, 0x01, - 0x2f, 0x17, 0x85, 0x03, 0xbf, 0xdb, 0x6f, 0xe7, 0xeb, 0xa7, 0xf8, 0x71, 0x40, 0x06, 0x01, 0x86, - 0xb9, 0x90, 0x55, 0x99, 0xf9, 0xfb, 0xb7, 0x50, 0x77, 0xe7, 0x31, 0x12, 0xf7, 0xf1, 0xc5, 0xf5, - 0xdc, 0xba, 0x69, 0xfc, 0x2e, 0xa0, 0x0a, 0x29, 0x40, 0xec, 0xe5, 0xbf, 0xf7, 0xac, 0xfd, 0xb6, - 0xeb, 0x6c, 0x76, 0xc3, 0x8a, 0x00, 0x78, 0x32, 0x5e, 0x47, 0xe6, 0x03, 0x5e, 0xfe, 0xdb, 0x6f, - 0x6f, 0x89, 0xd3, 0xa6, 0x9f, 0xc3, 0x0a, 0x02, 0x56, 0xd9, 0xdd, 0x6d, 0xdb, 0xfe, 0xde, 0xdb, - 0x79, 0x61, 0xc5, 0x01, 0x0e, 0x33, 0x04, 0x76, 0x71, 0xfb, 0xed, 0x97, 0xc6, 0xdd, 0x34, 0xca, - 0xb3, 0xdb, 0xf8, 0x5f, 0x00, 0xc1, 0xd0, 0x0c, 0x49, 0x9d, 0xfe, 0x6e, 0x2a, 0xcb, 0xdd, 0xbb, - 0x6d, 0x8b, 0x23, 0xb8, 0x69, 0x40, 0x8d, 0x4f, 0x45, 0xdf, 0xfe, 0xdb, 0xf9, 0x53, 0x0e, 0x28, - 0x03, 0x2d, 0xd4, 0xab, 0xfa, 0xff, 0xfe, 0xde, 0xdb, 0x6b, 0xd3, 0xf8, 0x61, 0x40, 0x0c, 0xd5, - 0xb1, 0xad, 0x4d, 0xcb, 0xb7, 0x76, 0xdc, 0xfe, 0xb8, 0xd3, 0x6e, 0x2d, 0x97, 0x95, 0x58, 0x61, - 0x40, 0x19, 0x4d, 0xdc, 0x32, 0xcb, 0x5f, 0x9b, 0xae, 0xdd, 0x45, 0x59, 0xbe, 0x7c, 0x28, 0xa0, - 0x1b, 0xae, 0x18, 0xbf, 0x4f, 0xfe, 0xd9, 0x7b, 0x3c, 0x28, 0x48, 0x15, 0x1c, 0x54, 0x7f, 0xe9, - 0xa7, 0xa6, 0x9c, 0x37, 0x83, 0x83, 0xa6, 0x52, 0xdf, 0xe2, 0xb9, 0x34, 0x09, 0xf7, 0x77, 0x7e, - 0x9a, 0x8d, 0x64, 0xad, 0x6f, 0x7c, 0x2e, 0xe0, 0x0c, 0x03, 0x4c, 0x0f, 0xd8, 0x33, 0xef, 0x36, - 0x14, 0x42, 0x30, 0x27, 0x4e, 0x68, 0x8f, 0x0b, 0x08, 0x8f, 0x02, 0xc4, 0xab, 0x3c, 0xd6, 0x1c, - 0x50, 0x00, 0x28, 0x86, 0x42, 0xd7, 0xa0, 0x89, 0x4a, 0x9b, 0xfa, 0x73, 0x77, 0x67, 0x77, 0x37, - 0x67, 0x1d, 0xf8, 0x3d, 0xf3, 0xbe, 0x9a, 0xbe, 0x25, 0x7a, 0xb2, 0xab, 0xe8, 0x62, 0xc0, 0x62, - 0x1d, 0x7e, 0x1d, 0xc0, 0x01, 0xfc, 0x75, 0xd6, 0xdd, 0x85, 0x85, 0x84, 0x76, 0x6c, 0xd0, 0xac, - 0xfc, 0x32, 0xfd, 0xb3, 0xcc, 0x1b, 0x27, 0x38, 0x5c, 0xc1, 0xd2, 0x89, 0x74, 0xfb, 0x7e, 0x1b, - 0xc0, 0x2e, 0x85, 0x0a, 0x56, 0x18, 0xd7, 0xce, 0xe6, 0xfb, 0x2f, 0x39, 0xfe, 0x4e, 0xf1, 0x0f, - 0x8a, 0x3d, 0xe9, 0x80, 0x80, 0x8a, 0x9e, 0xba, 0xbe, 0x1e, 0xc0, 0x04, 0x12, 0xa0, 0x37, 0x46, - 0x50, 0x17, 0x04, 0x7f, 0xc3, 0x71, 0xdb, 0xd6, 0x3b, 0x7a, 0xec, 0x76, 0xf5, 0xdb, 0x2f, 0x6f, - 0x77, 0xae, 0xb1, 0x57, 0x82, 0x07, 0xdb, 0xe1, 0xb7, 0x00, 0x0c, 0xc2, 0xda, 0x64, 0x46, 0x43, - 0x55, 0xf1, 0x3e, 0x7e, 0x27, 0xe3, 0xa5, 0xcd, 0xfe, 0x20, 0xb5, 0x69, 0xf6, 0xf0, 0xd2, 0x39, - 0x93, 0xbf, 0xff, 0xf9, 0x61, 0xe2, 0x18, 0x00, 0x2b, 0x5f, 0x89, 0xbe, 0x57, 0xe2, 0xd7, 0x97, - 0x9f, 0xbf, 0x89, 0x7f, 0x3f, 0xbd, 0xa6, 0x98, 0x3e, 0xfc, 0x6f, 0xdb, 0xf8, 0x61, 0x40, 0x0b, - 0x52, 0x0e, 0xd4, 0xad, 0x7c, 0x0b, 0x26, 0xbc, 0xb5, 0x9f, 0xea, 0xee, 0x4f, 0x9e, 0xe6, 0xf9, - 0xf0, 0xf3, 0x80, 0x8c, 0x08, 0x4d, 0x57, 0x0c, 0x4a, 0x99, 0xde, 0x7f, 0xaf, 0x88, 0xf9, 0x3b, - 0xe3, 0xf1, 0x1e, 0x26, 0xbd, 0xeb, 0x5c, 0x31, 0x80, 0x05, 0xed, 0xe1, 0x5a, 0xf8, 0xe8, 0x08, - 0xf4, 0x28, 0x39, 0x7f, 0x4d, 0x30, 0x6d, 0xf2, 0x9e, 0xfc, 0x91, 0xc4, 0xe6, 0x0f, 0x86, 0x5c, - 0x05, 0x14, 0xc8, 0x63, 0x3f, 0xf7, 0xf7, 0xc7, 0x51, 0x3e, 0x1b, 0x70, 0x01, 0xa9, 0x47, 0xd6, - 0x49, 0x85, 0x3c, 0xbe, 0x14, 0xe1, 0x34, 0x3f, 0x79, 0x3b, 0xf9, 0x21, 0xba, 0xbf, 0xe1, 0xc7, - 0x00, 0x48, 0xed, 0x83, 0x72, 0x19, 0x03, 0xc3, 0xff, 0xcb, 0x19, 0x58, 0xcf, 0x3a, 0x3f, 0xe5, - 0xf1, 0x93, 0x7e, 0x4d, 0xc2, 0x30, 0x52, 0x0b, 0x0c, 0xaa, 0x77, 0x17, 0xa9, 0xee, 0xdd, 0x8d, - 0x28, 0x0f, 0x9d, 0xbf, 0x5c, 0x39, 0x80, 0x03, 0x44, 0x8e, 0xf0, 0x3c, 0x65, 0x25, 0x74, 0xaa, - 0x63, 0x6d, 0xb7, 0xbb, 0x5b, 0x6e, 0xa6, 0x8a, 0x0c, 0xa3, 0x4b, 0x86, 0xfe, 0xfe, 0x2e, 0x55, - 0x39, 0x40, 0x35, 0x52, 0x83, 0x4f, 0x31, 0x32, 0xcc, 0x76, 0xf1, 0x0d, 0x74, 0xc5, 0xb8, 0x79, - 0xc0, 0x09, 0x2b, 0x62, 0xf0, 0xa2, 0xb7, 0x6b, 0xfd, 0xbd, 0xe3, 0x6f, 0xef, 0x96, 0xbf, 0x2f, - 0xae, 0xdf, 0x4f, 0x0c, 0xa2, 0x80, 0x31, 0xeb, 0x91, 0xaf, 0xb5, 0xff, 0xfa, 0x93, 0xf6, 0x19, - 0x50, 0x06, 0x3e, 0x7b, 0xc1, 0x3a, 0x7e, 0x5e, 0xdb, 0xdf, 0x15, 0xfe, 0x2c, 0x69, 0x20, 0x2c, - 0xe8, 0x73, 0x73, 0x73, 0x0f, 0x10, 0x80, 0x03, 0x19, 0x47, 0xd3, 0x12, 0x0e, 0xfd, 0x7d, 0xff, - 0xc3, 0x9c, 0x60, 0x7d, 0xc1, 0xf7, 0x28, 0x0d, 0x30, 0x0e, 0x38, 0x7b, 0x8e, 0xe7, 0xb7, 0xd3, - 0xc0, 0x5c, 0x00, 0x40, 0x46, 0xc1, 0xd0, 0x17, 0x0b, 0xe0, 0x02, 0x48, 0x17, 0x22, 0xf9, 0x83, - 0x67, 0x61, 0xe2, 0xd9, 0xe3, 0x15, 0x94, 0x43, 0xc8, 0x74, 0xf1, 0x95, 0xe6, 0x7f, 0x0f, 0x72, - 0xa2, 0xf1, 0x70, 0xf0, 0x03, 0x88, 0x6e, 0x4e, 0x9f, 0xc3, 0xd8, 0x26, 0xed, 0x57, 0xff, 0xef, - 0xf7, 0xef, 0x4d, 0x3f, 0xe1, 0xe5, 0x08, 0x02, 0x0c, 0x97, 0xd5, 0xe9, 0xdb, 0x6c, 0xfd, 0x3d, - 0xb6, 0xea, 0x3c, 0xad, 0xff, 0x85, 0x94, 0x05, 0xbe, 0x4b, 0x28, 0x9a, 0x7a, 0x7d, 0xea, 0xfe, - 0xb8, 0x02, 0x40, 0x00, 0x90, 0x0d, 0x94, 0x5a, 0xc9, 0x5e, 0xa7, 0x0e, 0x35, 0x28, 0xeb, 0x38, - 0x36, 0x6a, 0x2e, 0x79, 0xc2, 0xc0, 0x18, 0x32, 0xf3, 0x0c, 0x59, 0x1a, 0x47, 0x80, 0x30, 0xf8, - 0x06, 0x06, 0x1c, 0x45, 0xe2, 0xd7, 0xe2, 0x7f, 0x5c, 0x38, 0x75, 0xc0, 0x0c, 0x37, 0xcc, 0x3c, - 0x33, 0x7f, 0xaf, 0xb7, 0x6f, 0x83, 0x2f, 0xbd, 0xb6, 0xf8, 0xc7, 0xfa, 0x9b, 0xcc, 0x3b, 0x80, - 0x0b, 0x6c, 0xf3, 0x1a, 0x06, 0x26, 0xbd, 0x3b, 0x7c, 0x3d, 0xc7, 0x3c, 0xa2, 0xba, 0x99, 0x33, - 0x84, 0x7b, 0x4a, 0x73, 0xff, 0x11, 0x81, 0xa0, 0xa3, 0x5c, 0x1a, 0x7e, 0xca, 0x03, 0xf8, 0x7c, - 0xc9, 0xe2, 0xb4, 0xcb, 0xf2, 0xde, 0x1e, 0xc0, 0x13, 0xc0, 0x3b, 0x62, 0x56, 0x07, 0x34, 0x87, - 0x9f, 0xf8, 0x3b, 0x1a, 0x18, 0xa3, 0xa0, 0x85, 0xc7, 0xa8, 0x03, 0xb8, 0xef, 0x54, 0x8e, 0x50, - 0x56, 0x39, 0x6f, 0x9d, 0x7a, 0x64, 0xb0, 0x16, 0x2c, 0x0c, 0xc0, 0xb2, 0xc7, 0xdd, 0x67, 0xa3, - 0x1d, 0x81, 0x2a, 0x4e, 0x6d, 0xb6, 0x3b, 0x2c, 0x4f, 0x4b, 0xb8, 0x6d, 0xc0, 0x15, 0x7a, 0xcc, - 0xc1, 0x7e, 0x2c, 0x8e, 0x3f, 0xa1, 0x3e, 0x04, 0x19, 0xdc, 0xef, 0x77, 0x77, 0x8b, 0x0f, 0x88, - 0xac, 0x95, 0x1a, 0x81, 0xeb, 0xbe, 0xf1, 0x05, 0xdf, 0xcd, 0x70, 0xd9, 0x20, 0x01, 0xf7, 0xe7, - 0x0e, 0x9c, 0x4e, 0xd3, 0x5f, 0xfe, 0xf8, 0x5a, 0x8a, 0x8a, 0x48, 0x7f, 0x34, 0x24, 0x6c, 0x4f, - 0xd4, 0xb4, 0x70, 0xd2, 0x01, 0xc7, 0x3c, 0x03, 0xae, 0x5e, 0x3d, 0x9b, 0x04, 0x13, 0x70, 0x73, - 0xd9, 0x01, 0xd3, 0x84, 0x20, 0xee, 0x3c, 0x53, 0x9f, 0xad, 0x61, 0x8c, 0x0c, 0x0c, 0xd4, 0x63, - 0xcb, 0xa6, 0xe5, 0xda, 0x77, 0x4c, 0xbf, 0xc6, 0x9e, 0x9a, 0x69, 0x70, 0xea, 0x80, 0x36, 0xc2, - 0x54, 0x38, 0x59, 0x80, 0xd3, 0x1b, 0xfc, 0x26, 0x78, 0x7b, 0xa5, 0x9c, 0x3c, 0x48, 0xd6, 0xb1, - 0xff, 0x25, 0x7e, 0xf6, 0xe7, 0xed, 0xe7, 0x0f, 0x1d, 0x7d, 0x7f, 0x00, 0x42, 0x14, 0xe5, 0xf0, - 0x68, 0xa3, 0x09, 0xc7, 0x0f, 0x60, 0x01, 0x73, 0x50, 0x21, 0x1b, 0x57, 0xc9, 0x57, 0xb6, 0xff, - 0x26, 0xae, 0xfd, 0x95, 0xc7, 0x3f, 0x2d, 0x95, 0xfc, 0x50, 0x35, 0x4d, 0xf2, 0xa1, 0xaa, 0xdb, - 0x07, 0x87, 0x76, 0xcd, 0xdb, 0xb4, 0x71, 0x8e, 0xde, 0x1e, 0xc0, 0x4b, 0xb8, 0x18, 0x1a, 0xdc, - 0xbf, 0x6f, 0x4c, 0xde, 0xbd, 0x99, 0x38, 0xc6, 0x54, 0x9a, 0x7f, 0xe1, 0xc5, 0x00, 0x15, 0xf7, - 0x74, 0x4b, 0x33, 0x77, 0x5d, 0x34, 0xe3, 0x4d, 0x3f, 0x6e, 0x9a, 0x6b, 0x6f, 0xf8, 0x51, 0x40, - 0x41, 0xb9, 0x0e, 0xdd, 0xfe, 0xf3, 0xdb, 0xed, 0xb1, 0x2f, 0xdb, 0xd3, 0x6d, 0xb8, 0x61, 0x40, - 0x12, 0x74, 0x4e, 0x1c, 0x0d, 0xeb, 0x67, 0xb6, 0xf2, 0x7d, 0xfa, 0xb7, 0x3a, 0x61, 0xd5, 0x00, - 0x1d, 0xfb, 0xf2, 0x66, 0x6c, 0xfc, 0x7f, 0x6d, 0xed, 0xff, 0xae, 0xb6, 0xdb, 0xf2, 0xdd, 0x3f, - 0xc3, 0x98, 0x00, 0xe1, 0x0b, 0xb3, 0x12, 0xab, 0x26, 0x07, 0xfe, 0x59, 0xfb, 0x66, 0xf5, 0xcd, - 0xf9, 0x6a, 0x20, 0x74, 0x10, 0xa6, 0xfd, 0x97, 0xf4, 0x00, 0x3c, 0x38, 0x31, 0xd7, 0xe1, 0x97, - 0x00, 0x32, 0x88, 0xf4, 0xe1, 0x67, 0xdd, 0xde, 0xbd, 0xb6, 0xdb, 0x6d, 0xb6, 0xce, 0xc2, 0xdb, - 0xd3, 0x04, 0x03, 0x61, 0xc5, 0x00, 0x1d, 0xef, 0xb9, 0xc9, 0x7e, 0x7c, 0x57, 0x4f, 0xed, 0xe5, - 0x4a, 0x7f, 0xe1, 0x9c, 0x02, 0x9a, 0x97, 0xf9, 0x01, 0xaf, 0xf9, 0xef, 0x7e, 0xa9, 0xb7, 0x27, - 0x4d, 0x69, 0xc3, 0x19, 0xd8, 0x77, 0x00, 0x70, 0x6b, 0x60, 0x91, 0xa6, 0x37, 0xae, 0x73, 0xff, - 0xfc, 0xb6, 0x9f, 0xf0, 0xce, 0x10, 0x0d, 0x32, 0x9f, 0xf7, 0xfe, 0xae, 0xbb, 0xf3, 0x58, 0x64, - 0x90, 0x03, 0x73, 0xf6, 0x15, 0x55, 0xdb, 0x3f, 0x2f, 0x92, 0xf9, 0xfe, 0xed, 0x87, 0x14, 0x1d, - 0xa3, 0x85, 0xc6, 0x9e, 0x9a, 0x6d, 0xb7, 0xe9, 0xab, 0x78, 0xfd, 0x34, 0xfe, 0x1e, 0x50, 0x06, - 0x31, 0x59, 0xe6, 0x57, 0x72, 0x25, 0x2b, 0xbb, 0xfe, 0x5f, 0x4f, 0x54, 0xd3, 0x6d, 0xbf, 0x86, - 0x14, 0x04, 0xfd, 0xe9, 0x2b, 0x6d, 0xcf, 0xd7, 0xaf, 0x37, 0x7f, 0x2c, 0x3a, 0xa0, 0xb5, 0xc7, - 0xad, 0xf4, 0xd3, 0xfe, 0xbc, 0x5b, 0x7f, 0xc3, 0xb8, 0x03, 0x1f, 0x87, 0xa4, 0x65, 0xef, 0x6d, - 0xfd, 0x38, 0xeb, 0x6c, 0x9e, 0x37, 0x7a, 0xe0, 0xd7, 0xf8, 0x61, 0x40, 0x0c, 0xbf, 0x50, 0xa5, - 0xdd, 0xe6, 0xa9, 0xd7, 0xd3, 0xfa, 0x45, 0x0c, 0x60, 0x04, 0x01, 0xae, 0x30, 0x37, 0x9a, 0xf2, - 0xe7, 0xf6, 0xdb, 0x6e, 0xff, 0xcb, 0x0e, 0x12, 0x04, 0x8f, 0x1c, 0x6f, 0xfd, 0x34, 0xf4, 0xd3, - 0xf5, 0x34, 0xff, 0x85, 0xdc, 0x00, 0xc6, 0x34, 0x13, 0xc1, 0x3f, 0xdd, 0xa6, 0x4e, 0xaf, 0x73, - 0x42, 0xd5, 0xb5, 0x34, 0x25, 0xe5, 0xcd, 0x2e, 0x1b, 0x70, 0x00, 0xee, 0xf5, 0xb0, 0x26, 0x44, - 0xb5, 0x5f, 0xd4, 0xcf, 0x05, 0xb8, 0xde, 0xdc, 0xf6, 0x05, 0xb3, 0xd8, 0x1c, 0x30, 0x6d, 0xf3, - 0xfa, 0x3b, 0x45, 0xd9, 0x78, 0x6f, 0x00, 0x0f, 0xf0, 0xf2, 0xee, 0x50, 0xb2, 0x81, 0x15, 0x7b, - 0x97, 0xff, 0xa8, 0x3d, 0x71, 0x2f, 0xbe, 0x84, 0xe2, 0x3c, 0xef, 0x65, 0x0f, 0x34, 0x55, 0xff, - 0x0e, 0xe0, 0x01, 0x24, 0x82, 0xd7, 0x20, 0xe2, 0x2b, 0x4e, 0x43, 0x5d, 0x04, 0xe9, 0x1f, 0xf3, - 0xfd, 0x47, 0xfe, 0x36, 0xf1, 0xff, 0x74, 0x0f, 0xfc, 0x5c, 0x06, 0x76, 0xed, 0xbd, 0x53, 0x58, - 0x73, 0x00, 0x1b, 0xe6, 0x15, 0x7c, 0x70, 0x20, 0xbe, 0x1e, 0xaf, 0x45, 0x77, 0x10, 0xf8, 0xce, - 0x7c, 0x6a, 0x5e, 0xb8, 0xff, 0x97, 0x69, 0xa6, 0x37, 0x2a, 0xaf, 0xf0, 0xf1, 0x20, 0x0f, 0xfe, - 0xb4, 0x33, 0x67, 0x14, 0x7d, 0x1c, 0x6a, 0x5f, 0x74, 0xcb, 0xcd, 0xeb, 0x77, 0xaf, 0xb7, 0x31, - 0xaf, 0xf0, 0xee, 0x00, 0x60, 0xb3, 0x74, 0xce, 0x0d, 0xf4, 0xa6, 0x6e, 0xc1, 0xd5, 0xcb, 0xe4, - 0xde, 0x7f, 0xa8, 0x3f, 0xed, 0xed, 0xed, 0xf9, 0xbb, 0xc8, 0xc5, 0x02, 0xfb, 0xae, 0xbc, 0x26, - 0xca, 0x04, 0x8f, 0x24, 0xdb, 0xfd, 0x6b, 0xf8, 0x6d, 0x90, 0x00, 0x44, 0xef, 0x46, 0x98, 0xf0, - 0x84, 0xdd, 0xe6, 0x65, 0x55, 0xd5, 0xd5, 0x45, 0xe6, 0xfc, 0x7b, 0x7b, 0xd6, 0xb0, 0xc2, 0x80, - 0x1d, 0x58, 0x48, 0xe0, 0x90, 0x34, 0x36, 0xcd, 0x4f, 0x2f, 0x8d, 0xd3, 0x5c, 0xa7, 0xa6, 0x98, - 0xf8, 0xee, 0x13, 0xc0, 0x68, 0x0f, 0x48, 0xf6, 0x8e, 0xb8, 0xaf, 0xe2, 0xb8, 0xaf, 0xf0, 0x9e, - 0x02, 0x6e, 0x69, 0x3d, 0xdf, 0xff, 0x7b, 0xc3, 0x6e, 0x01, 0x1b, 0x2c, 0x89, 0x1f, 0x51, 0xfe, - 0xed, 0xfc, 0x9f, 0xaf, 0x7f, 0xc2, 0xd8, 0x49, 0x13, 0xcd, 0x33, 0x4f, 0x2f, 0x75, 0x7f, 0x8a, - 0xef, 0x0e, 0xe0, 0x01, 0x5d, 0xe7, 0x0d, 0x3b, 0x05, 0x8c, 0x6e, 0xfc, 0x15, 0x0a, 0x04, 0xc0, - 0x29, 0x18, 0x2c, 0xdd, 0xcb, 0x15, 0xad, 0x2c, 0x6d, 0xfc, 0x5b, 0x2f, 0x2d, 0x65, 0x7f, 0xbc, - 0x66, 0x2b, 0x7b, 0xcd, 0xf3, 0xec, 0x39, 0x80, 0x1d, 0x8a, 0x7e, 0xc2, 0x7d, 0xa4, 0xf7, 0x34, - 0x14, 0xff, 0xd7, 0x76, 0xf9, 0x01, 0x31, 0x07, 0xa8, 0xe3, 0x1c, 0xfc, 0x38, 0x85, 0x57, 0x8c, - 0x04, 0x96, 0x86, 0x01, 0x24, 0xbe, 0xa9, 0xd9, 0x7f, 0x51, 0x56, 0x2a, 0xe1, 0xcc, 0x15, 0x1a, - 0x51, 0xd2, 0xcf, 0xb6, 0x1c, 0x06, 0x9a, 0x7f, 0x48, 0x41, 0xe0, 0x8e, 0xbf, 0xfe, 0xf6, 0x59, - 0x6b, 0xbe, 0xcf, 0x3e, 0x3d, 0xc4, 0x61, 0xda, 0xb1, 0x95, 0xe0, 0x0f, 0x94, 0x9a, 0x13, 0x1f, - 0x79, 0xc1, 0xd6, 0xc5, 0x21, 0xc1, 0x97, 0x5a, 0x3f, 0xd1, 0x29, 0x0d, 0x53, 0xb7, 0x97, 0x4b, - 0xdf, 0xbc, 0x32, 0xe0, 0x08, 0x0d, 0x0b, 0x96, 0x0c, 0xa4, 0xc5, 0xf8, 0x7f, 0xd3, 0x6f, 0x1f, - 0xfa, 0x8b, 0x69, 0xee, 0x0e, 0x2f, 0xd7, 0xac, 0x96, 0x1a, 0xc0, 0x03, 0x9f, 0x24, 0x66, 0xf2, - 0x91, 0x7e, 0xfe, 0x7b, 0xd6, 0xa9, 0xa6, 0x9e, 0x23, 0x43, 0x9d, 0x77, 0xe3, 0xb0, 0xde, 0x00, - 0x1e, 0xd8, 0x42, 0x7a, 0x0c, 0x4c, 0x8d, 0x96, 0xe8, 0xfd, 0xeb, 0x19, 0xe1, 0x40, 0x7e, 0x28, - 0xe7, 0x0d, 0x47, 0x46, 0x3d, 0x81, 0xa6, 0xc0, 0x76, 0xf9, 0x68, 0x7d, 0x02, 0xaa, 0x1d, 0x60, - 0x57, 0x19, 0xeb, 0xc6, 0xc7, 0x50, 0xf4, 0x52, 0xc4, 0x45, 0x18, 0xe3, 0x66, 0x0b, 0xf8, 0x37, - 0x71, 0xbd, 0x70, 0xde, 0x00, 0x4a, 0x1a, 0x91, 0x0c, 0x17, 0xf1, 0x29, 0x79, 0x46, 0x44, 0x48, - 0x09, 0xe2, 0xc8, 0x28, 0xab, 0x10, 0xe6, 0x0e, 0x7b, 0xde, 0xdd, 0x6d, 0x77, 0x84, 0x71, 0x26, - 0x67, 0x2e, 0xb9, 0x4a, 0x96, 0x49, 0x94, 0x24, 0xe9, 0x3a, 0x42, 0xd9, 0xb6, 0x31, 0x1f, 0x87, - 0x7f, 0x9f, 0x02, 0xa9, 0x06, 0x0f, 0xf2, 0x3b, 0xde, 0xef, 0xec, 0xbb, 0x39, 0xd1, 0xdf, 0xc3, - 0xc4, 0x80, 0x13, 0x88, 0xb7, 0xa4, 0x2c, 0x1a, 0xed, 0x1c, 0xb2, 0xb4, 0x1c, 0x90, 0x60, 0x7f, - 0xa6, 0x43, 0x01, 0xcf, 0x5e, 0x22, 0xfb, 0xda, 0x7b, 0xb0, 0xf3, 0x80, 0xe3, 0xc3, 0xe0, 0xb2, - 0xb4, 0x52, 0x85, 0xc3, 0xea, 0x0f, 0x66, 0x96, 0x0c, 0x34, 0xdc, 0xa8, 0x90, 0x7c, 0x41, 0xfc, - 0x2c, 0x5f, 0x96, 0x10, 0xeb, 0x81, 0x35, 0x40, 0xfb, 0xf7, 0xce, 0xad, 0xcb, 0xdb, 0x57, 0x6f, - 0x82, 0x19, 0x96, 0xbf, 0x86, 0x70, 0x01, 0xdf, 0xef, 0x6a, 0xb7, 0xef, 0x1f, 0xb6, 0xe9, 0xad, - 0x5d, 0xbe, 0x6f, 0xf9, 0x61, 0x65, 0x00, 0x3f, 0x1a, 0x48, 0x7e, 0x56, 0x49, 0xd7, 0xfc, 0xfd, - 0xbd, 0xb3, 0xf8, 0x75, 0x40, 0x05, 0xe4, 0xb8, 0x66, 0x2a, 0x47, 0x36, 0x7f, 0xfe, 0x0e, 0xa6, - 0x5e, 0xe3, 0x0d, 0x87, 0xcb, 0x77, 0xd2, 0x81, 0xf6, 0xb0, 0x3d, 0xc0, 0x2e, 0x25, 0x51, 0x2c, - 0x2f, 0xe0, 0x08, 0xc0, 0x06, 0x80, 0xd9, 0xe0, 0x0c, 0x00, 0xad, 0xca, 0x58, 0x33, 0xc1, 0xc3, - 0x8f, 0x76, 0x94, 0xf2, 0xe4, 0xb0, 0x6f, 0xe1, 0x1c, 0xd2, 0x3d, 0x8f, 0x1f, 0x0b, 0x60, 0x1a, - 0x96, 0xca, 0xc1, 0xa8, 0x51, 0xe2, 0x82, 0x08, 0x6f, 0xdb, 0x86, 0x3d, 0xd8, 0xe1, 0xbc, 0x00, - 0x6a, 0x2e, 0x32, 0x40, 0x45, 0x07, 0x5c, 0x19, 0x6f, 0x26, 0x0f, 0x3a, 0x00, 0xfa, 0x17, 0xa9, - 0x09, 0x79, 0x3f, 0x45, 0x38, 0x48, 0x7d, 0xac, 0x1d, 0x05, 0x78, 0x3f, 0x08, 0xcf, 0x35, 0xc5, - 0x30, 0xb5, 0x0a, 0x03, 0xc0, 0xff, 0xdb, 0xb1, 0x38, 0x70, 0xea, 0x80, 0x13, 0x5a, 0x31, 0x69, - 0xae, 0xdb, 0x83, 0x7f, 0xfc, 0xcf, 0x1c, 0xa7, 0x89, 0x1d, 0x7e, 0x18, 0xab, 0x06, 0x91, 0xa0, - 0xfb, 0x83, 0x84, 0xa8, 0x1e, 0x35, 0xa6, 0xcd, 0x3e, 0x3d, 0xdc, 0x38, 0xa0, 0x0b, 0xd7, 0xc6, - 0x8e, 0x87, 0xeb, 0xff, 0xff, 0x68, 0xed, 0xde, 0x77, 0x03, 0x6b, 0x19, 0x30, 0x07, 0x3f, 0x6e, - 0xbf, 0x8c, 0x49, 0xa4, 0xde, 0x9a, 0x7c, 0x38, 0xa3, 0x80, 0x03, 0x33, 0x96, 0x1d, 0xe9, 0xc8, - 0x00, 0xfc, 0xf0, 0x01, 0xdd, 0x33, 0xc0, 0x07, 0x4f, 0x00, 0x1d, 0xfd, 0xb6, 0xf6, 0xd7, 0xd2, - 0x4b, 0x86, 0x14, 0x04, 0xa2, 0xb1, 0xd9, 0xcb, 0xd3, 0x75, 0xb9, 0xc6, 0x4c, 0xde, 0xe4, 0xfa, - 0x69, 0xd8, 0xc3, 0x2a, 0x00, 0xce, 0xb3, 0x7e, 0x32, 0xf6, 0x7f, 0xb6, 0x1c, 0x7e, 0x58, 0xbc, - 0xf1, 0xd3, 0xc7, 0x69, 0xbd, 0xd3, 0x6d, 0xb4, 0xfd, 0x87, 0x54, 0x00, 0x5b, 0x1a, 0x2e, 0xa8, - 0x8a, 0x3c, 0xf3, 0x1a, 0x38, 0xdc, 0x71, 0xff, 0xac, 0xb7, 0x05, 0xca, 0x44, 0xdb, 0x74, 0xc2, - 0xde, 0xb1, 0x4a, 0x1c, 0x7e, 0x15, 0x8d, 0x86, 0xf0, 0xc8, 0xfa, 0x9c, 0x7d, 0x1c, 0x77, 0xc4, - 0x80, 0x20, 0x11, 0xb0, 0xb8, 0x60, 0x22, 0x8e, 0x01, 0xda, 0x90, 0xc0, 0x34, 0x9e, 0x00, 0x02, - 0xb4, 0x1a, 0x49, 0xe5, 0x19, 0x00, 0x2e, 0x9c, 0x28, 0x20, 0x6a, 0x8f, 0x00, 0x32, 0x16, 0x00, - 0x6a, 0x78, 0x00, 0xe1, 0x44, 0x00, 0xf8, 0xf0, 0x07, 0x95, 0x1d, 0x4b, 0x00, 0x31, 0xef, 0x0a, - 0xd5, 0x42, 0x4e, 0x34, 0x2b, 0x1a, 0xef, 0xf8, 0x6d, 0xc0, 0x0d, 0xfd, 0x64, 0x4c, 0x6a, 0x89, - 0xae, 0x1b, 0x3e, 0xaf, 0x6c, 0xfc, 0xb3, 0x52, 0xf2, 0x7c, 0x9d, 0x30, 0x1a, 0x5f, 0x13, 0xed, - 0xeb, 0x86, 0x70, 0x02, 0x0e, 0xe9, 0x76, 0x5f, 0xed, 0xfb, 0xd3, 0xa6, 0xbb, 0xfb, 0x0c, 0x12, - 0x01, 0x27, 0x32, 0x9d, 0xce, 0xef, 0xea, 0x9e, 0x4e, 0x99, 0xbd, 0x65, 0x3e, 0x19, 0x70, 0x03, - 0xf3, 0xd6, 0x5a, 0xb1, 0x4e, 0xdc, 0x9d, 0x6b, 0x4c, 0xbd, 0xbf, 0xa6, 0xf9, 0xf0, 0xe1, 0x20, - 0x02, 0x52, 0xce, 0x42, 0x94, 0x39, 0x68, 0x08, 0xd3, 0xf7, 0xb4, 0x14, 0x47, 0xe3, 0xf1, 0xae, - 0x7e, 0x76, 0x07, 0x4e, 0x35, 0x84, 0x5e, 0x2e, 0xc5, 0x1a, 0x22, 0xb0, 0x51, 0xa2, 0x0a, 0xc3, - 0xfb, 0x3c, 0x16, 0x50, 0x2c, 0xc6, 0x75, 0x9b, 0x5d, 0xbc, 0x3a, 0xe0, 0x12, 0x0a, 0x44, 0xe5, - 0x46, 0x47, 0xd7, 0x71, 0x52, 0x5e, 0x4c, 0x0a, 0x26, 0xa4, 0xea, 0xee, 0x6b, 0x69, 0x89, 0x68, - 0x2c, 0x38, 0xcf, 0x4f, 0x1a, 0x61, 0x3a, 0x10, 0x17, 0x41, 0x5e, 0x34, 0xa7, 0xda, 0xd7, 0x0c, - 0xe0, 0x0f, 0x6a, 0x64, 0xb5, 0xc9, 0xef, 0xff, 0xe5, 0x6c, 0x31, 0x80, 0x40, 0xfb, 0xd7, 0x3a, - 0xdf, 0xff, 0x6f, 0x6c, 0x29, 0x80, 0x45, 0xb7, 0x25, 0xf7, 0x7f, 0xf5, 0x4d, 0x69, 0x93, 0xf0, - 0xa1, 0x0a, 0x01, 0xdf, 0xfb, 0x9f, 0xfd, 0x34, 0xff, 0x86, 0xa4, 0x00, 0x20, 0x3f, 0xec, 0x5e, - 0xbe, 0x29, 0xfd, 0xdb, 0xe9, 0xa6, 0xda, 0xa6, 0x5f, 0x8b, 0x6c, 0x28, 0xa0, 0x07, 0x5e, 0xed, - 0x43, 0x79, 0x7a, 0x7b, 0x75, 0xaf, 0xc2, 0x98, 0x23, 0xfa, 0xb1, 0xee, 0xbf, 0xff, 0x85, 0x1c, - 0x01, 0xc7, 0x95, 0xcf, 0x3b, 0xe4, 0xe9, 0xfb, 0x6d, 0xde, 0x14, 0xc0, 0x22, 0x67, 0xaf, 0xfe, - 0xb7, 0xd3, 0x6f, 0x75, 0xfc, 0x3b, 0x80, 0x1c, 0xcb, 0x38, 0xa0, 0xbf, 0xe6, 0x2f, 0xdd, 0xd7, - 0xff, 0xf5, 0xbf, 0xf0, 0xc2, 0x81, 0x30, 0x2b, 0x27, 0x6a, 0x7f, 0x8a, 0xb1, 0x56, 0x9a, 0x7f, - 0x4e, 0xde, 0x58, 0x61, 0x40, 0x35, 0x54, 0x87, 0x6a, 0xa7, 0xd3, 0x4d, 0x6d, 0xa7, 0xe9, 0x9d, - 0x46, 0x17, 0x21, 0x42, 0x00, 0x86, 0x4d, 0x8b, 0x4d, 0x3d, 0x34, 0xff, 0xe2, 0xc3, 0x6c, 0x80, - 0x01, 0xbf, 0xcd, 0xb0, 0x50, 0x9e, 0x1b, 0xbf, 0xc7, 0xfb, 0xe6, 0x4e, 0xbd, 0x56, 0x61, 0x90, - 0x74, 0x33, 0xc0, 0xff, 0x15, 0x9f, 0xfb, 0x37, 0x77, 0xaa, 0xac, 0x2f, 0x80, 0x0d, 0x18, 0xa5, - 0x29, 0x60, 0x88, 0x12, 0xdf, 0x3e, 0x2b, 0x54, 0xf2, 0xf9, 0x6c, 0x6a, 0xe6, 0x51, 0xae, 0x46, - 0x5f, 0x8a, 0xef, 0x87, 0x09, 0x00, 0x20, 0xa3, 0xf3, 0xaf, 0x51, 0x5f, 0x7e, 0x45, 0x68, 0x97, - 0x14, 0xdc, 0x5d, 0xb1, 0x3f, 0xfd, 0xa3, 0xb3, 0x5b, 0xff, 0x0f, 0x12, 0x00, 0xdb, 0x62, 0x97, - 0x18, 0xa3, 0x2f, 0xdf, 0xd6, 0x9a, 0xc1, 0xff, 0x25, 0xf1, 0x7e, 0xaa, 0xab, 0x88, 0x7c, 0xbc, - 0x50, 0x1f, 0xd6, 0xf7, 0x86, 0xf0, 0x10, 0xdc, 0xd0, 0x4a, 0x37, 0x7f, 0xbf, 0x2b, 0xcd, 0xfe, - 0xa9, 0xfc, 0xdf, 0xeb, 0xe3, 0x59, 0xc0, 0x41, 0xa4, 0xeb, 0x93, 0xe1, 0x84, 0x60, 0x02, 0x7d, - 0x6c, 0xd0, 0x47, 0x36, 0xb5, 0x7c, 0xbe, 0x37, 0x4f, 0xfc, 0x5b, 0x61, 0xbc, 0x00, 0x52, 0xa7, - 0x88, 0xb0, 0x5c, 0x20, 0xf5, 0xd5, 0x5d, 0xbf, 0x15, 0xb6, 0x21, 0xed, 0xe6, 0xed, 0xbb, 0xbb, - 0x95, 0x19, 0x77, 0xeb, 0x0c, 0xe0, 0x04, 0xde, 0x27, 0x2c, 0x08, 0x4d, 0xbb, 0xb4, 0xee, 0xee, - 0xf9, 0x78, 0xb7, 0xe9, 0xa7, 0x2f, 0xec, 0x37, 0x80, 0x0f, 0x97, 0x1b, 0x04, 0x2b, 0xd0, 0x3b, - 0x7f, 0xf0, 0x6f, 0x30, 0xcd, 0xf5, 0x8a, 0xdd, 0xce, 0x1f, 0x9f, 0xf1, 0x3e, 0xa2, 0xb9, 0x9b, - 0xee, 0xba, 0xce, 0x8a, 0x13, 0xea, 0xf8, 0x85, 0x5c, 0x04, 0xc6, 0xc4, 0xb3, 0xb3, 0xe2, 0x18, - 0x7f, 0xf0, 0xdb, 0x20, 0x00, 0x14, 0xaa, 0x0f, 0x91, 0x50, 0x78, 0x3c, 0xf1, 0x0f, 0xad, 0x78, - 0x81, 0xe9, 0xbb, 0xa7, 0xc6, 0x33, 0x56, 0xbb, 0xf0, 0xdb, 0x80, 0x1f, 0xf8, 0x28, 0xbc, 0xf2, - 0xe5, 0xad, 0xd5, 0xd5, 0x6a, 0xdb, 0x9b, 0xe6, 0x96, 0xf7, 0x55, 0x75, 0x78, 0x79, 0x40, 0x43, - 0x1a, 0xaf, 0xd5, 0xe9, 0xdb, 0x6f, 0xa7, 0xa6, 0xdf, 0x69, 0xff, 0x0c, 0x28, 0x01, 0x8c, 0x12, - 0xa1, 0xaa, 0x15, 0x5f, 0x13, 0x11, 0xd6, 0xcb, 0x59, 0x36, 0x2a, 0xdb, 0x4d, 0x3e, 0x98, 0x3e, - 0xe3, 0xee, 0xf8, 0x79, 0x40, 0x09, 0xb6, 0x67, 0x8c, 0x52, 0x14, 0xff, 0xa7, 0x85, 0x59, 0x62, - 0xdb, 0x4c, 0x77, 0xef, 0xf1, 0x97, 0x64, 0xf1, 0xf9, 0x3a, 0xf7, 0xfb, 0x7e, 0x16, 0xc0, 0x23, - 0x24, 0x43, 0xb2, 0x88, 0x84, 0xaf, 0xfb, 0xf4, 0xc9, 0x52, 0x76, 0xf9, 0x92, 0xfb, 0xae, 0xbc, - 0xf5, 0x40, 0x3a, 0xb9, 0xfb, 0x6b, 0x0a, 0x60, 0x03, 0x28, 0x0f, 0x23, 0x1a, 0x94, 0x82, 0xa1, - 0xfe, 0xe5, 0x3c, 0x67, 0x0f, 0x80, 0xa2, 0x34, 0x4b, 0x10, 0x26, 0xf2, 0x2b, 0x5d, 0xac, 0x6b, - 0x30, 0x5d, 0xc3, 0x2a, 0x00, 0xa4, 0xf1, 0x1a, 0xc5, 0xac, 0x88, 0xdd, 0xfc, 0x5d, 0xb6, 0xd9, - 0xc7, 0xbe, 0x38, 0xdc, 0x76, 0xe3, 0xff, 0x55, 0x75, 0xbf, 0x4c, 0x6f, 0x89, 0x8f, 0x71, 0x9c, - 0x3a, 0xa0, 0x05, 0x9d, 0xc1, 0x95, 0x3f, 0x4a, 0x16, 0xdf, 0xff, 0xc4, 0xcd, 0x6f, 0x63, 0xa9, - 0x72, 0xd7, 0x7c, 0xbd, 0xb3, 0x9f, 0x65, 0xad, 0xb4, 0xd6, 0x27, 0xa7, 0xfe, 0x1d, 0xc0, 0x03, - 0x90, 0xac, 0x74, 0x43, 0x93, 0x8a, 0xf2, 0x3b, 0xf0, 0x28, 0x1a, 0x3b, 0x25, 0x0f, 0x47, 0xf2, - 0x92, 0x8e, 0x0b, 0x58, 0xe8, 0xfc, 0x56, 0xd8, 0x7d, 0xf2, 0x87, 0x5d, 0xa9, 0x2a, 0x80, 0x93, - 0x81, 0x6a, 0x31, 0xeb, 0xc9, 0xe1, 0xe7, 0x10, 0x94, 0x5b, 0xed, 0xe1, 0x43, 0xeb, 0x4e, 0xa9, - 0xae, 0xbb, 0xbd, 0xf7, 0xef, 0xf8, 0x65, 0x40, 0x20, 0x75, 0x1c, 0x7c, 0xf6, 0x9f, 0xfb, 0xbb, - 0x75, 0x7c, 0x2b, 0x80, 0x18, 0xf7, 0x90, 0x89, 0xfb, 0x1e, 0xe4, 0xe9, 0xc6, 0xcf, 0x1d, 0xbe, - 0x6b, 0x86, 0x70, 0x83, 0x2c, 0x15, 0xee, 0x3f, 0xff, 0xdb, 0xec, 0x3b, 0x80, 0x1f, 0xd0, 0xde, - 0x2c, 0x09, 0x96, 0x4b, 0xca, 0x78, 0xa0, 0x89, 0x01, 0x6d, 0x29, 0xf5, 0xdd, 0xc5, 0x63, 0xb7, - 0xc2, 0xbd, 0x14, 0x9c, 0xe0, 0xb0, 0x67, 0xe0, 0x58, 0x0e, 0x46, 0xd8, 0x12, 0x90, 0xa3, 0x89, - 0x69, 0xdf, 0x0c, 0xb8, 0x05, 0x5d, 0x89, 0x2a, 0x8f, 0x8b, 0x15, 0x79, 0xff, 0x6c, 0xdd, 0xba, - 0xcb, 0x36, 0xc5, 0xfe, 0x3e, 0x24, 0xf8, 0x07, 0x20, 0x06, 0x80, 0xda, 0x30, 0x00, 0x22, 0xb1, - 0x6d, 0xd2, 0x60, 0x05, 0x45, 0x85, 0xe0, 0x5e, 0x07, 0x53, 0x59, 0x38, 0xc2, 0xa2, 0xc7, 0x2f, - 0x53, 0xcf, 0x2a, 0xaa, 0x16, 0x60, 0x58, 0x47, 0x0b, 0xa4, 0x2f, 0xab, 0xa7, 0x71, 0x18, 0x42, - 0xee, 0x03, 0xda, 0x28, 0x6f, 0xee, 0x5f, 0xdf, 0x5f, 0xab, 0xe1, 0x8c, 0x05, 0xda, 0x49, 0x2e, - 0xff, 0xd7, 0xfb, 0x0a, 0xa8, 0x00, 0xe5, 0x5f, 0x3a, 0x6d, 0xf9, 0xd9, 0x7f, 0xa6, 0xa8, 0x96, - 0x13, 0x70, 0x03, 0x1b, 0xb5, 0xf6, 0xbf, 0xdf, 0xeb, 0x9e, 0x38, 0xbc, 0xdd, 0xb7, 0xf0, 0xf1, - 0x20, 0x09, 0xc1, 0x1a, 0x2f, 0xb6, 0x2c, 0x1f, 0xf3, 0x41, 0xc5, 0x65, 0xb1, 0x5b, 0x22, 0xce, - 0x2e, 0xe2, 0xb7, 0x71, 0x72, 0x11, 0xa8, 0x8b, 0xcb, 0x02, 0xff, 0x87, 0x89, 0x00, 0x5d, 0xe9, - 0x9e, 0x09, 0xcf, 0x85, 0x1f, 0xfe, 0xf4, 0xda, 0x9f, 0xe1, 0xdb, 0xc2, 0xad, 0xc3, 0x75, 0x9f, - 0xd6, 0x2f, 0x08, 0x4f, 0x96, 0xb4, 0x70, 0xfb, 0xba, 0xba, 0xc3, 0x6e, 0x00, 0xa4, 0x4a, 0x10, - 0xa9, 0x54, 0xd9, 0xa9, 0x6a, 0x53, 0x88, 0xc7, 0xd1, 0x6c, 0x7b, 0x62, 0xad, 0x56, 0xad, 0xa1, - 0x79, 0xe0, 0xc3, 0xe0, 0x56, 0x19, 0xb1, 0xc5, 0x4b, 0xf0, 0xe6, 0x00, 0xab, 0x8a, 0x7a, 0xc0, - 0x51, 0xdd, 0x39, 0xa0, 0x9b, 0x3b, 0x7d, 0xbd, 0x3d, 0x31, 0x6f, 0x16, 0xc9, 0xc3, 0x59, 0x73, - 0x83, 0x1d, 0x4b, 0x17, 0xf0, 0xf2, 0x80, 0x27, 0x03, 0x35, 0x5d, 0x8d, 0x3e, 0xa7, 0xfe, 0x6e, - 0x2d, 0x97, 0x76, 0xc5, 0xb0, 0x73, 0xfc, 0xbb, 0x69, 0x7c, 0x3b, 0x80, 0x10, 0x3c, 0x69, 0x27, - 0x7e, 0x76, 0x9e, 0xe9, 0x97, 0xe1, 0x5f, 0xf5, 0x3d, 0xf0, 0xf7, 0xc2, 0x97, 0xb7, 0x0e, 0xc6, - 0xd8, 0x72, 0xc2, 0x1e, 0x70, 0x02, 0x02, 0x2d, 0x05, 0x67, 0x58, 0x83, 0xdf, 0xd4, 0x20, 0x79, - 0xde, 0x73, 0xe3, 0xb7, 0x77, 0xb1, 0x59, 0x76, 0x28, 0x37, 0x7b, 0x89, 0xa4, 0xae, 0x7a, 0xe1, - 0xb7, 0x00, 0x94, 0x95, 0x80, 0xe9, 0x7f, 0x49, 0x64, 0xa2, 0x84, 0x8d, 0xf3, 0x8c, 0x31, 0x42, - 0x51, 0x49, 0x1c, 0x61, 0x51, 0xa7, 0x6c, 0x2a, 0x2b, 0xdf, 0x09, 0x92, 0x00, 0x75, 0x7d, 0x54, - 0x2e, 0xbd, 0xf5, 0xe9, 0xfe, 0x18, 0x50, 0x24, 0x54, 0x06, 0xe8, 0x57, 0x57, 0xa7, 0xad, 0x7f, - 0x58, 0x51, 0x40, 0x0e, 0xae, 0x4d, 0xa8, 0x1a, 0xb6, 0xb9, 0xff, 0x93, 0xa7, 0x3c, 0x53, 0xa5, - 0x09, 0xa8, 0x03, 0x8c, 0x9a, 0x39, 0x78, 0xbf, 0x74, 0xdb, 0x17, 0x75, 0x7b, 0xe1, 0x87, 0x00, - 0xcc, 0x72, 0xb6, 0x56, 0xdb, 0xcf, 0xdb, 0x6d, 0xb7, 0x27, 0xd5, 0xfb, 0xe1, 0x65, 0x02, 0x36, - 0x53, 0xfb, 0x8f, 0x57, 0xfd, 0x3b, 0x6d, 0xc2, 0x6a, 0x02, 0x3a, 0xae, 0xe3, 0xda, 0x74, 0xf6, - 0xf3, 0x76, 0xee, 0xdb, 0xc2, 0xea, 0x00, 0xa7, 0x17, 0x5c, 0x54, 0xe7, 0xb6, 0xdb, 0x75, 0xd5, - 0x31, 0x79, 0x79, 0x3b, 0x97, 0xd6, 0x15, 0xc0, 0x06, 0x2d, 0xe7, 0xa6, 0x2a, 0xf3, 0xfe, 0xb7, - 0xeb, 0x2f, 0x4e, 0xfd, 0xe1, 0x35, 0x00, 0x19, 0xbd, 0xdc, 0xd1, 0xbf, 0x4f, 0xf6, 0xee, 0xbf, - 0x0a, 0x38, 0x22, 0x1b, 0xbf, 0x5f, 0x27, 0x8c, 0x9e, 0x3e, 0xe6, 0xf5, 0xf8, 0x53, 0x00, 0x9d, - 0xf7, 0x20, 0xca, 0x66, 0xfd, 0xb7, 0x6f, 0x7a, 0x69, 0xf1, 0x18, 0x24, 0x0c, 0xab, 0x21, 0xbc, - 0x03, 0x9b, 0x43, 0x9a, 0xde, 0xfc, 0x84, 0x89, 0x12, 0x24, 0xeb, 0xb8, 0xce, 0x21, 0x36, 0x0c, - 0x8b, 0x6f, 0x8a, 0xe7, 0x7f, 0x7c, 0x2e, 0xe0, 0x01, 0xbb, 0xdb, 0x41, 0x6f, 0x9c, 0x12, 0x35, - 0xf2, 0x7c, 0x46, 0x1a, 0xc9, 0x02, 0x73, 0x87, 0xc0, 0xbe, 0xb1, 0x8b, 0x1b, 0x70, 0xe6, 0x00, - 0x39, 0x91, 0x63, 0x32, 0xe5, 0x45, 0x3e, 0xf2, 0xf4, 0xbf, 0x3d, 0x2a, 0xa6, 0x4e, 0xe2, 0x1f, - 0x18, 0xf7, 0xd8, 0xff, 0x78, 0x67, 0x00, 0x6b, 0x99, 0xa9, 0x0c, 0xe1, 0xbe, 0xff, 0x6a, 0xd8, - 0x9f, 0xbf, 0x8b, 0xe6, 0xee, 0x27, 0xf1, 0x8b, 0x2e, 0x19, 0xc0, 0x00, 0xa4, 0xd1, 0x03, 0x64, - 0xbc, 0x14, 0xa6, 0xe9, 0x34, 0xf2, 0xd0, 0xdc, 0x51, 0xd7, 0x3f, 0x97, 0xb6, 0x17, 0x97, 0x8c, - 0x62, 0xec, 0x35, 0x80, 0x09, 0xf7, 0xd8, 0xa2, 0xc1, 0x12, 0xdf, 0x7a, 0x99, 0xbe, 0x9a, 0x7c, - 0xac, 0x6b, 0xaa, 0xc5, 0x86, 0x59, 0xc7, 0x53, 0xff, 0xbf, 0xde, 0xe7, 0xf8, 0x66, 0x60, 0x02, - 0x6d, 0x4d, 0xb0, 0x8f, 0x3d, 0x75, 0x2f, 0xbe, 0x6e, 0x5f, 0xfc, 0xbe, 0xe5, 0xb0, 0xd6, 0x00, - 0x1c, 0xe3, 0x36, 0x89, 0x38, 0x0c, 0x49, 0x79, 0x66, 0xeb, 0xf8, 0x9f, 0xb6, 0xdc, 0xdd, 0xbd, - 0x33, 0x87, 0x70, 0x00, 0xe7, 0xa5, 0x07, 0x55, 0x13, 0x0b, 0x1e, 0x8b, 0xcb, 0xdd, 0xbe, 0x44, - 0xfc, 0x65, 0xfe, 0xea, 0x25, 0xe5, 0xae, 0x76, 0xfb, 0xaf, 0x09, 0xb8, 0x00, 0xca, 0xba, 0x4e, - 0x32, 0x04, 0xd7, 0x7b, 0xef, 0x9b, 0xfe, 0x25, 0xc0, 0x91, 0xc9, 0x4a, 0x43, 0x78, 0x01, 0x83, - 0x91, 0x64, 0xf2, 0xf7, 0x5b, 0xdd, 0x53, 0x59, 0x7d, 0xbb, 0x96, 0x40, 0x5e, 0xfe, 0x18, 0xc0, - 0x04, 0x8a, 0x36, 0x98, 0x1a, 0x0b, 0x97, 0x7f, 0xca, 0xda, 0x26, 0xdb, 0x73, 0x79, 0x44, 0xa5, - 0x9b, 0x7c, 0x9b, 0xeb, 0x16, 0x1d, 0xc0, 0x03, 0x63, 0xca, 0x89, 0xec, 0x28, 0x6b, 0x4d, 0xff, - 0xad, 0x97, 0xb7, 0xbf, 0xbb, 0xc6, 0xef, 0x22, 0xd8, 0xb7, 0x88, 0xa4, 0x31, 0x5d, 0xb4, 0xf4, - 0xe1, 0x85, 0x00, 0x25, 0x43, 0x9e, 0x09, 0x2b, 0xd7, 0xce, 0xf5, 0x53, 0x59, 0x8e, 0xd9, 0x35, - 0x9b, 0xb8, 0xab, 0x97, 0x8b, 0x1e, 0xc3, 0x2e, 0x00, 0x56, 0xf5, 0x67, 0xa1, 0x1f, 0x7b, 0xbd, - 0x9b, 0x8a, 0xb1, 0x57, 0xad, 0xdc, 0xbd, 0x34, 0xcd, 0x15, 0xf4, 0x3f, 0xe6, 0x4c, 0x32, 0xe0, - 0x00, 0xfd, 0xb6, 0x9d, 0xa1, 0xf6, 0xfb, 0xd2, 0xc3, 0x45, 0xf3, 0x68, 0xc4, 0x65, 0x56, 0x44, - 0x4f, 0x1d, 0x32, 0xcb, 0x96, 0xa8, 0xfe, 0x00, 0xf4, 0x00, 0x23, 0x01, 0x49, 0xfc, 0x2c, 0xc9, - 0xc3, 0xc2, 0xda, 0x87, 0x22, 0x39, 0x60, 0xb1, 0x96, 0xcf, 0x79, 0xc3, 0xcd, 0x56, 0xa7, 0x83, - 0x2c, 0x18, 0x97, 0x8a, 0x0c, 0xf1, 0xe3, 0x80, 0xc7, 0x00, 0xe1, 0xd7, 0x00, 0x62, 0x56, 0x63, - 0xbd, 0x18, 0x8f, 0xce, 0xbb, 0xd7, 0x6a, 0x87, 0xe5, 0x0b, 0xf6, 0x4e, 0x6d, 0xfe, 0xaf, 0x14, - 0x5f, 0x9d, 0x8a, 0x7b, 0x7a, 0xf0, 0xc2, 0x80, 0x36, 0xf7, 0x41, 0xb3, 0x2b, 0x1e, 0xfe, 0x23, - 0x16, 0xd3, 0x83, 0x9f, 0x96, 0x5b, 0xa7, 0xa7, 0x4d, 0x33, 0x7c, 0xc8, 0x79, 0x87, 0x94, 0x04, - 0xfe, 0x48, 0xee, 0xe6, 0xfe, 0x3a, 0xe9, 0xf6, 0xfc, 0x19, 0x98, 0xd5, 0x36, 0x34, 0xbf, 0xe1, - 0xcc, 0x00, 0x52, 0xfc, 0xe1, 0x39, 0xd4, 0x8d, 0xad, 0x9f, 0xbb, 0xbe, 0xb0, 0x77, 0xf4, 0xf6, - 0x9f, 0xe0, 0xdb, 0xe1, 0x8a, 0xcf, 0x37, 0x12, 0xa5, 0xed, 0xc3, 0x2e, 0x04, 0xcf, 0xee, 0x77, - 0xfa, 0xd9, 0x5f, 0xfb, 0x0a, 0x28, 0x0d, 0x7e, 0xde, 0x9b, 0xaf, 0x7f, 0xbd, 0xe1, 0x57, 0x00, - 0x32, 0xa9, 0x96, 0x08, 0x9d, 0x7f, 0xf2, 0xf9, 0x39, 0x3e, 0x4f, 0x9a, 0xd7, 0x0f, 0x60, 0x0d, - 0xb1, 0xdb, 0x29, 0xe9, 0x83, 0x1b, 0xbd, 0xab, 0x2d, 0x78, 0x5c, 0x14, 0x43, 0x8f, 0x1f, 0xce, - 0x7c, 0x41, 0x83, 0xa0, 0x29, 0xd2, 0x1a, 0xa0, 0x25, 0x2b, 0xdf, 0x83, 0xbc, 0x30, 0x04, 0x92, - 0x01, 0x29, 0x0a, 0x63, 0x71, 0x1f, 0xc9, 0x8e, 0x5b, 0x38, 0x3d, 0xce, 0x0f, 0xb7, 0x14, 0x18, - 0x87, 0x92, 0x8d, 0x0a, 0x86, 0x95, 0x0d, 0xb8, 0x00, 0x7a, 0x1f, 0xf1, 0x8b, 0xd8, 0xe4, 0xc1, - 0xcf, 0xfe, 0x2f, 0x6f, 0xa6, 0x73, 0xd4, 0xe1, 0x90, 0x0f, 0xed, 0x70, 0x3b, 0x3d, 0x52, 0xa9, - 0x47, 0xb2, 0x2a, 0x92, 0x27, 0x8c, 0x03, 0x83, 0xe6, 0x51, 0x20, 0x29, 0x01, 0xe6, 0xc0, 0x96, - 0x8b, 0x97, 0xca, 0xd2, 0x44, 0x07, 0x7f, 0x10, 0xd3, 0x81, 0x2f, 0x4f, 0x7d, 0x9a, 0xeb, 0xcf, - 0xf8, 0xee, 0xc3, 0x58, 0x05, 0x0e, 0xeb, 0x27, 0x17, 0x75, 0xa6, 0xdb, 0x7f, 0x54, 0xf5, 0x85, - 0x9c, 0x00, 0xe8, 0xf1, 0xe1, 0x5e, 0x1b, 0x61, 0xef, 0xb2, 0xa7, 0x27, 0xad, 0x3a, 0x70, 0xa2, - 0x84, 0x27, 0x35, 0xbe, 0x1f, 0xeb, 0xf5, 0x6c, 0xdf, 0xfe, 0x1e, 0xc0, 0x06, 0x94, 0x63, 0x6e, - 0xc2, 0xe6, 0x1d, 0xfa, 0x8a, 0x6e, 0xdb, 0xbb, 0x62, 0xb7, 0x77, 0x8d, 0x73, 0xeb, 0x8d, 0x72, - 0x58, 0x51, 0xc7, 0x83, 0x6f, 0xbe, 0x1d, 0xc0, 0x03, 0x94, 0x50, 0xe8, 0xf5, 0xe4, 0x7d, 0xfd, - 0x62, 0xb1, 0x0f, 0x6f, 0x2f, 0x79, 0xb7, 0xb7, 0x95, 0x6e, 0x6f, 0x65, 0x8f, 0x71, 0x53, 0xf1, - 0x42, 0xb8, 0x0e, 0xf0, 0x9a, 0x6f, 0x70, 0xee, 0xa9, 0xa7, 0x0e, 0x28, 0x00, 0xfe, 0x36, 0x61, - 0x2a, 0x73, 0x3a, 0xed, 0x85, 0x0c, 0x98, 0x79, 0x63, 0x1c, 0xdc, 0x5b, 0x2f, 0x58, 0xd3, 0xad, - 0xba, 0x9b, 0x8e, 0xdf, 0x23, 0x00, 0x6c, 0x83, 0xe8, 0xfa, 0xdb, 0x6e, 0x1c, 0x50, 0x01, 0x2b, - 0x46, 0x5d, 0xd6, 0x0c, 0xfd, 0x69, 0x34, 0xe5, 0xd2, 0xf6, 0xfb, 0x7e, 0x5f, 0x8f, 0xfe, 0x24, - 0xbf, 0x85, 0xb0, 0x04, 0x9a, 0x61, 0xdd, 0x58, 0x16, 0xbd, 0xff, 0xb3, 0x83, 0xb7, 0xfc, 0x30, - 0x76, 0xe2, 0xb2, 0xd6, 0xdb, 0x66, 0xf5, 0xc3, 0x8a, 0x00, 0x9f, 0x6c, 0x2a, 0xeb, 0x84, 0x59, - 0xcf, 0x76, 0x2b, 0xf8, 0x7f, 0xf8, 0x8e, 0x94, 0xae, 0xdf, 0xdf, 0x33, 0x76, 0xff, 0x86, 0xf0, - 0x04, 0x6c, 0x63, 0x76, 0x49, 0x8b, 0xdf, 0x5b, 0x23, 0xf1, 0xda, 0x0f, 0xb9, 0xcf, 0x26, 0x38, - 0x10, 0xf2, 0xce, 0xc1, 0x8b, 0xe1, 0x46, 0x5b, 0x8b, 0xd7, 0xe1, 0xb2, 0x40, 0x0b, 0x17, 0x99, - 0x04, 0xb7, 0x1b, 0xe7, 0x41, 0xa9, 0x68, 0x0c, 0x46, 0x80, 0x90, 0x0f, 0x52, 0xd2, 0xaf, 0x4b, - 0x2c, 0xe4, 0x53, 0x65, 0x64, 0x98, 0x5b, 0x32, 0x8a, 0xb9, 0x2b, 0x7f, 0x0c, 0xb8, 0x11, 0xd3, - 0x33, 0xe5, 0xe5, 0xba, 0xf6, 0x55, 0x7b, 0xeb, 0xec, 0x28, 0x8a, 0x08, 0x07, 0xc0, 0xcd, 0x4f, - 0x6d, 0xb4, 0xed, 0xff, 0x85, 0x91, 0x00, 0x25, 0xd5, 0xd9, 0xc5, 0x93, 0xbd, 0x7b, 0x7e, 0xb5, - 0x75, 0x66, 0xb0, 0xca, 0x80, 0x87, 0x0d, 0x10, 0xe2, 0x3f, 0xe6, 0xef, 0xb7, 0xe2, 0xc2, 0xd8, - 0x20, 0xbc, 0x0b, 0x42, 0x24, 0xee, 0xee, 0xde, 0xef, 0xef, 0xef, 0x3f, 0xe1, 0x3c, 0x04, 0x75, - 0x93, 0x0e, 0xfd, 0xfa, 0xbc, 0x9e, 0xb7, 0xbe, 0x19, 0xc0, 0x19, 0xff, 0x66, 0x62, 0xd0, 0xdb, - 0x7e, 0xa9, 0xfa, 0xfe, 0xc2, 0xb8, 0x0a, 0xe6, 0x14, 0xb5, 0x4d, 0xd7, 0xad, 0xbb, 0x2f, 0x6f, - 0xc2, 0x98, 0x02, 0xae, 0xb4, 0xf0, 0x29, 0xbf, 0x29, 0xa7, 0x4c, 0xbf, 0x6d, 0xbc, 0xdf, 0xc2, - 0xb8, 0x16, 0xa4, 0xd8, 0xe3, 0x2e, 0xb3, 0xf5, 0x71, 0x76, 0xdb, 0xe2, 0xfc, 0x27, 0x80, 0x89, - 0x2f, 0x69, 0x9a, 0x7f, 0x3f, 0x5e, 0xbc, 0x2d, 0x85, 0x63, 0x5b, 0xcb, 0xd6, 0x58, 0x2b, 0x61, - 0x77, 0x45, 0x2c, 0x2f, 0x09, 0xe1, 0x38, 0x18, 0x4d, 0x5f, 0xeb, 0xb7, 0xb6, 0xdc, 0x36, 0xe0, - 0x1d, 0xeb, 0xe8, 0x45, 0x07, 0xa7, 0x17, 0x64, 0x68, 0xdc, 0x97, 0x8b, 0xb8, 0xb8, 0xaf, 0x17, - 0x4d, 0xeb, 0x5f, 0xc3, 0x2a, 0x00, 0xc0, 0x8a, 0x2c, 0x58, 0x02, 0xfa, 0x8c, 0xea, 0xee, 0x73, - 0x02, 0xff, 0x15, 0xef, 0x7c, 0x2f, 0x80, 0x11, 0xb7, 0x9e, 0x81, 0x7f, 0x85, 0x29, 0x9f, 0x4e, - 0x6f, 0x58, 0xd5, 0x55, 0xb8, 0x55, 0xe3, 0x72, 0xf3, 0xfc, 0xbc, 0xdf, 0x0e, 0xe0, 0x02, 0x18, - 0x50, 0xae, 0x73, 0x8d, 0x24, 0x91, 0xff, 0x64, 0xcb, 0xd3, 0x2c, 0x67, 0xfa, 0xc8, 0x9f, 0x8a, - 0xee, 0xe7, 0xf8, 0xad, 0xdc, 0x14, 0x82, 0xa2, 0xfd, 0x78, 0x6d, 0xc0, 0x06, 0x7b, 0x9c, 0x27, - 0x83, 0x25, 0xed, 0xfb, 0xab, 0xc6, 0xf6, 0xd4, 0xff, 0x2f, 0xbc, 0x56, 0xfa, 0xd6, 0xf7, 0xc0, - 0x90, 0x01, 0x20, 0x0a, 0x44, 0x80, 0x01, 0x1e, 0x58, 0x00, 0xc4, 0x80, 0x01, 0x1e, 0x78, 0x38, - 0x24, 0x07, 0x09, 0x80, 0x00, 0x8a, 0x96, 0xc9, 0x81, 0x53, 0xc0, 0x07, 0x9e, 0x3c, 0xb0, 0x19, - 0xef, 0xb2, 0xde, 0x5e, 0x38, 0x00, 0x1f, 0x8e, 0x00, 0x04, 0xb0, 0xde, 0x00, 0x6f, 0xf7, 0xe0, - 0xa3, 0x8a, 0xe2, 0xaf, 0xfd, 0x33, 0xff, 0xd5, 0xdc, 0xde, 0x66, 0xb5, 0x1f, 0xff, 0xae, 0x19, - 0x65, 0x01, 0x1d, 0x26, 0x61, 0xaf, 0xa7, 0xff, 0x9a, 0x5c, 0x36, 0xc8, 0x00, 0x1d, 0xb8, 0x82, - 0x77, 0xd0, 0xe1, 0x07, 0xd1, 0xce, 0xe2, 0xb1, 0x0f, 0xac, 0x55, 0xdb, 0x72, 0xfb, 0x8f, 0x7c, - 0x7f, 0xc7, 0xbe, 0x3f, 0xe0, 0xe5, 0xc1, 0x95, 0x5d, 0xb7, 0xf0, 0xea, 0x80, 0x0d, 0xdb, 0x98, - 0x22, 0x85, 0x23, 0x60, 0xdd, 0x80, 0xed, 0xc5, 0x5b, 0xbe, 0x7b, 0xeb, 0x74, 0xd9, 0xc5, 0xb6, - 0x76, 0x71, 0x6c, 0x5b, 0xd3, 0xa3, 0xbf, 0xe9, 0xc3, 0x78, 0x08, 0x21, 0x6a, 0x23, 0x20, 0x04, - 0xff, 0x5b, 0x3b, 0xae, 0xbe, 0x5f, 0x2d, 0xf1, 0xf9, 0xd9, 0x1b, 0xf5, 0xae, 0x19, 0x67, 0x00, - 0x7b, 0x75, 0xfe, 0x7d, 0x6b, 0xfe, 0xf8, 0x68, 0x86, 0x00, 0x1c, 0xbb, 0x4f, 0x3f, 0x55, 0xf9, - 0x4f, 0xd4, 0xb1, 0xea, 0xb5, 0x14, 0x6a, 0x58, 0x93, 0xe5, 0x34, 0xee, 0x1e, 0x70, 0x04, 0xef, - 0x19, 0x2b, 0x18, 0x29, 0x0a, 0x1f, 0xfb, 0xd2, 0x57, 0xf0, 0x9f, 0x98, 0xcb, 0xc6, 0x55, 0x9a, - 0xa2, 0x74, 0x27, 0x3c, 0x3c, 0xa9, 0xf8, 0x70, 0xcf, 0xc1, 0x34, 0x2c, 0x7b, 0xfa, 0x70, 0xde, - 0x00, 0x10, 0x19, 0x48, 0xc6, 0x69, 0x9f, 0x7e, 0x95, 0x2e, 0xfe, 0xde, 0xee, 0xfe, 0xf7, 0xeb, - 0xe3, 0x51, 0x40, 0x46, 0xb7, 0x5d, 0x9d, 0x87, 0x64, 0x00, 0x2e, 0x91, 0x6d, 0x02, 0x84, 0x10, - 0xeb, 0x06, 0x07, 0x11, 0x51, 0x46, 0x1f, 0x41, 0xcf, 0xed, 0xbb, 0x41, 0x64, 0x5b, 0x05, 0xeb, - 0x50, 0x7f, 0xf7, 0xfd, 0x1f, 0x0f, 0x28, 0x00, 0xd4, 0x1a, 0xef, 0x81, 0xeb, 0x73, 0x48, 0xf9, - 0x59, 0x37, 0xe4, 0xc7, 0xe3, 0x89, 0x72, 0x33, 0x61, 0x03, 0xcc, 0x8f, 0x00, 0xa8, 0x33, 0xec, - 0x69, 0x0f, 0x25, 0x4b, 0x1b, 0xa6, 0x3f, 0xe7, 0x3a, 0xc2, 0x76, 0x96, 0xa8, 0x8e, 0x27, 0xcd, - 0x54, 0xd1, 0xb7, 0x0e, 0xe0, 0x2a, 0x80, 0x29, 0x68, 0x37, 0x45, 0x47, 0x1f, 0xb7, 0xe4, 0xe2, - 0x12, 0x29, 0x80, 0x75, 0x86, 0xfe, 0x98, 0xe2, 0x26, 0xa3, 0x72, 0x32, 0xa0, 0xaf, 0x0f, 0x4d, - 0x18, 0x00, 0xde, 0x16, 0xa8, 0xe7, 0xaf, 0xf1, 0x28, 0xd4, 0xb5, 0x30, 0xd2, 0x60, 0xe2, 0x2c, - 0xe9, 0xf6, 0xcd, 0x58, 0x68, 0x90, 0x7c, 0xa4, 0x89, 0x00, 0x91, 0x77, 0xe1, 0xeb, 0xcf, 0xd8, - 0x39, 0x98, 0x90, 0x7f, 0xd3, 0xff, 0xd6, 0x15, 0xc0, 0x1f, 0xf2, 0x6a, 0xd9, 0xff, 0xe9, 0xf8, - 0x51, 0x14, 0x00, 0xd0, 0x1b, 0x37, 0x7a, 0xcc, 0xa6, 0xdb, 0xf6, 0xdb, 0xff, 0x86, 0x51, 0x00, - 0x0d, 0x5d, 0x98, 0xbc, 0xed, 0xd9, 0xff, 0x6d, 0xbf, 0x6c, 0x55, 0xd7, 0x00, 0x7a, 0x00, 0xe4, - 0x6d, 0x44, 0x71, 0xe2, 0x17, 0x14, 0x38, 0x56, 0xa2, 0x8c, 0x56, 0x28, 0xc5, 0x19, 0x72, 0x22, - 0xc6, 0x2b, 0x03, 0x28, 0x6b, 0x62, 0xaf, 0xf8, 0x7b, 0x00, 0x30, 0x3b, 0x21, 0xfe, 0x9f, 0xb5, - 0x6f, 0x6f, 0x6d, 0xb8, 0x71, 0x1f, 0x8d, 0xec, 0xf7, 0x3b, 0x60, 0xed, 0xfe, 0x1d, 0x70, 0x08, - 0x3f, 0x78, 0x7e, 0x1f, 0x35, 0xfe, 0xb1, 0x4b, 0x47, 0xeb, 0xb7, 0xfc, 0x01, 0x5c, 0x00, 0xc8, - 0x1b, 0x14, 0xc5, 0xf2, 0x76, 0xea, 0x67, 0x00, 0x38, 0xf7, 0x6d, 0x47, 0x81, 0xf1, 0x72, 0xa1, - 0x75, 0x1a, 0x00, 0x06, 0x60, 0x50, 0x0a, 0x7c, 0x4b, 0x08, 0xae, 0x1d, 0x70, 0x04, 0x02, 0x50, - 0xa2, 0x9b, 0x62, 0x3e, 0xf3, 0x3c, 0xc7, 0x2f, 0x38, 0x60, 0x2e, 0x73, 0x06, 0xfe, 0xeb, 0xcd, - 0xe6, 0xfa, 0xba, 0xbf, 0x0c, 0x0d, 0x96, 0x01, 0x9a, 0x84, 0x49, 0x13, 0x86, 0x87, 0x80, 0x65, - 0x89, 0xf5, 0x57, 0x03, 0xdf, 0x71, 0x90, 0x2b, 0x1d, 0x65, 0x86, 0x2c, 0x81, 0xf1, 0xa3, 0x24, - 0x6a, 0x52, 0x5d, 0x67, 0x98, 0x69, 0x58, 0x1b, 0x80, 0x0c, 0x0d, 0x19, 0x84, 0x51, 0x3e, 0xf3, - 0xd8, 0x0d, 0x20, 0x38, 0x7c, 0x3d, 0x80, 0x3f, 0x98, 0xa3, 0x47, 0x71, 0x47, 0x57, 0xff, 0xfb, - 0xad, 0xb2, 0x61, 0xd3, 0xdb, 0x92, 0xba, 0x07, 0x42, 0x9c, 0xc9, 0xb9, 0x47, 0x16, 0x00, 0x58, - 0x50, 0x0f, 0xdb, 0xa7, 0xb4, 0x03, 0x2e, 0x07, 0x58, 0xb2, 0xd4, 0xfa, 0x6f, 0x3f, 0x8d, 0x43, - 0x78, 0x00, 0x85, 0x41, 0x77, 0x74, 0x38, 0xde, 0xfd, 0xf3, 0xdf, 0xbc, 0xf7, 0xcb, 0x0b, 0x07, - 0x0d, 0xf8, 0x39, 0xff, 0x81, 0xd9, 0x6d, 0xb7, 0x8a, 0xa0, 0xbc, 0xc4, 0x30, 0xe0, 0x1b, 0x72, - 0x36, 0xaa, 0xdf, 0x37, 0xae, 0xeb, 0xd7, 0x2c, 0x26, 0xe0, 0x50, 0x4d, 0x36, 0x97, 0x6f, 0xe5, - 0x81, 0xe0, 0xd8, 0x7c, 0x36, 0xa0, 0x06, 0x36, 0xec, 0xe5, 0xbf, 0xf6, 0xdb, 0x77, 0x99, 0xa1, - 0x7b, 0xea, 0x0b, 0xd7, 0xb5, 0xf1, 0xbe, 0xf8, 0x75, 0xc0, 0x09, 0xb0, 0x5d, 0x8b, 0xf0, 0xa7, - 0x15, 0xcd, 0x3e, 0xe5, 0xba, 0xae, 0xe5, 0xda, 0xa8, 0xee, 0xdf, 0xc7, 0x5f, 0x48, 0x51, 0x75, - 0x9e, 0xcf, 0xdf, 0xc7, 0x4f, 0x8e, 0x2f, 0x8b, 0xaf, 0xc1, 0xbb, 0x63, 0x8c, 0x57, 0x7d, 0x7f, - 0x0f, 0x38, 0x00, 0x7a, 0x5a, 0x09, 0x83, 0xc3, 0x35, 0x00, 0xd4, 0xcf, 0xc9, 0x97, 0x97, 0x65, - 0xbc, 0xb4, 0x73, 0xc7, 0xd8, 0x81, 0xf6, 0x5b, 0x2d, 0x93, 0x0f, 0x08, 0x78, 0xb9, 0x5e, 0x4d, - 0xeb, 0xde, 0x1e, 0x50, 0x01, 0x4e, 0xe0, 0x55, 0xc2, 0xa7, 0x83, 0x0f, 0xfd, 0x98, 0xda, 0x8e, - 0xdf, 0x6c, 0x4b, 0xdf, 0x8e, 0xc0, 0x5c, 0xc9, 0xcc, 0x0b, 0x64, 0xc2, 0xe0, 0xc7, 0xa8, 0xd4, - 0x09, 0xee, 0x00, 0xea, 0xe1, 0xc4, 0x46, 0x5f, 0xd6, 0x17, 0x70, 0x00, 0x5f, 0x1f, 0xf5, 0xdd, - 0x8d, 0x4b, 0x50, 0x80, 0xef, 0xdf, 0x11, 0xdf, 0x93, 0x9d, 0x2f, 0x70, 0x5e, 0xfa, 0xc0, 0x7d, - 0xd9, 0x7d, 0xde, 0x79, 0x30, 0xe6, 0x00, 0x5c, 0xac, 0x6a, 0x85, 0xe1, 0xbd, 0xf9, 0xcd, 0xde, - 0xb6, 0xdb, 0x6d, 0xb7, 0x0b, 0x38, 0x4d, 0xd1, 0xe1, 0x60, 0xfc, 0xa0, 0x6a, 0xa2, 0xb7, 0xfd, - 0xb8, 0x71, 0x40, 0x0c, 0xfb, 0x90, 0x66, 0x15, 0x19, 0x30, 0xfc, 0x5d, 0x8b, 0x78, 0xb6, 0x0b, - 0x4f, 0xc9, 0x9c, 0x03, 0xcd, 0xc5, 0x58, 0xef, 0xa7, 0x83, 0xb0, 0xa0, 0x38, 0x06, 0x83, 0x14, - 0xa8, 0x2a, 0xa2, 0x90, 0x5a, 0xa2, 0x4c, 0x26, 0x86, 0xa9, 0xc3, 0x2e, 0x02, 0x5f, 0xcd, 0x95, - 0x7f, 0xf7, 0xeb, 0x5f, 0xfa, 0x71, 0xf6, 0x19, 0x70, 0x0c, 0x4f, 0x50, 0x9d, 0x5f, 0xfd, 0xf7, - 0xf2, 0xc3, 0x58, 0x27, 0xb5, 0x7b, 0x7f, 0xff, 0xaf, 0x58, 0x65, 0xc0, 0x0f, 0xcf, 0xd4, 0x87, - 0x2f, 0xef, 0xba, 0xd1, 0x96, 0x17, 0xd1, 0x7b, 0xf0, 0x60, 0x01, 0x20, 0x0a, 0x46, 0x94, 0xee, - 0x37, 0x9c, 0xe4, 0x5f, 0x4d, 0x7a, 0xdd, 0xe5, 0x4b, 0xc4, 0x87, 0x09, 0xf0, 0xae, 0x08, 0x8e, - 0xd1, 0xdf, 0xff, 0x3f, 0xe1, 0x5c, 0x00, 0xc6, 0xd4, 0x3c, 0xaf, 0x7d, 0xca, 0xff, 0x8d, 0x61, - 0xde, 0x61, 0xeb, 0x86, 0x54, 0x10, 0x8a, 0x1b, 0xf7, 0xcb, 0xd6, 0x8a, 0xf7, 0xb6, 0x6e, 0xbc, - 0x58, 0x67, 0x00, 0x1d, 0xb7, 0x2c, 0x6b, 0xff, 0xef, 0xf8, 0xbd, 0xfb, 0x26, 0xdf, 0xb9, 0x20, - 0xc8, 0xd6, 0x16, 0x70, 0x02, 0xac, 0x2d, 0x6c, 0x8e, 0x25, 0x35, 0xee, 0xab, 0x9d, 0x5d, 0x61, - 0x9c, 0x00, 0x60, 0xe8, 0xdd, 0x94, 0x54, 0xf1, 0x5f, 0xc5, 0x71, 0x0c, 0x2b, 0x17, 0x2c, 0x32, - 0xc2, 0x98, 0x00, 0xbf, 0xb2, 0x1c, 0xd6, 0xe7, 0xdd, 0xf9, 0x5e, 0xfe, 0xdd, 0xd0, 0x45, 0xf0, - 0xc6, 0x02, 0x47, 0x22, 0x01, 0x8f, 0x9f, 0xcb, 0xe9, 0xff, 0x45, 0x58, 0x64, 0x90, 0x23, 0x09, - 0x6a, 0x33, 0xdf, 0xef, 0x3f, 0xfb, 0xe1, 0x7c, 0x00, 0x8d, 0x32, 0x04, 0x9b, 0x28, 0x7b, 0xb9, - 0x3b, 0x29, 0x33, 0x8d, 0x65, 0x45, 0xcb, 0x71, 0x5c, 0x7c, 0x77, 0x0c, 0x28, 0x03, 0x0c, 0x9b, - 0x82, 0x15, 0xae, 0xdb, 0xe5, 0xfa, 0x28, 0x9f, 0x1f, 0xc7, 0xef, 0x86, 0x70, 0x00, 0x84, 0x62, - 0x22, 0x0e, 0x94, 0xd4, 0xc5, 0x22, 0x65, 0xb2, 0xf3, 0x9e, 0x79, 0xee, 0xf2, 0xef, 0x2f, 0xef, - 0x2f, 0x4c, 0x14, 0xca, 0xe1, 0xe2, 0x40, 0x03, 0x6f, 0x65, 0x85, 0x95, 0xd0, 0x4b, 0xdf, 0x2d, - 0xdd, 0x5e, 0x72, 0x76, 0x76, 0x78, 0xe4, 0xe2, 0xd8, 0xfb, 0x95, 0x19, 0x7b, 0x7e, 0x1e, 0xc0, - 0x3f, 0x83, 0x23, 0x70, 0x74, 0x21, 0x7c, 0x9d, 0xdd, 0xdb, 0x77, 0x6c, 0x48, 0xfa, 0xcb, 0x7b, - 0x6e, 0xad, 0xf5, 0x7e, 0xbe, 0x15, 0x70, 0x0d, 0xd5, 0xfc, 0x48, 0x77, 0xcf, 0x5d, 0xf4, 0xd3, - 0xff, 0xc3, 0x0a, 0x00, 0x3d, 0x48, 0x1c, 0xc8, 0xa2, 0xd7, 0x9f, 0x4d, 0x83, 0xb7, 0xc5, 0x58, - 0xab, 0xfe, 0xdf, 0x58, 0x79, 0x40, 0x15, 0xd6, 0xc0, 0xd9, 0xdd, 0x97, 0x6f, 0x6d, 0xb6, 0xfe, - 0x4e, 0x98, 0xf2, 0x3a, 0x69, 0xed, 0xb7, 0xc3, 0x6e, 0x00, 0x67, 0x13, 0x04, 0x78, 0x14, 0xc6, - 0x2f, 0xf5, 0x53, 0x73, 0xfe, 0x66, 0x54, 0xdc, 0xff, 0xc4, 0xfc, 0xa9, 0x7a, 0x8a, 0x58, 0x17, - 0x7b, 0xfe, 0x18, 0x47, 0x01, 0x4d, 0x5e, 0x2a, 0x3d, 0xe8, 0xff, 0xff, 0xef, 0x88, 0x50, 0x20, - 0x2d, 0x0f, 0x95, 0x0b, 0x10, 0xc0, 0x26, 0xcc, 0x98, 0x79, 0xff, 0xfd, 0xb8, 0x77, 0x00, 0x08, - 0x00, 0x3e, 0xcf, 0xdf, 0x66, 0x21, 0xbb, 0xd8, 0xce, 0x89, 0xbe, 0x07, 0x97, 0x26, 0x74, 0x3b, - 0x42, 0x60, 0x1c, 0x1b, 0x9d, 0x5c, 0x7a, 0xba, 0xeb, 0x38, 0x1e, 0x6e, 0x78, 0xf1, 0xd4, 0x7b, - 0xee, 0x9d, 0xe1, 0xdc, 0x01, 0x51, 0xd8, 0x84, 0x5d, 0xda, 0x50, 0xed, 0xdf, 0x85, 0x77, 0x8a, - 0xfd, 0x9e, 0x06, 0x2f, 0x1a, 0x21, 0x55, 0x7a, 0xd7, 0x2b, 0xd6, 0x58, 0x79, 0x27, 0x47, 0xf0, - 0xd6, 0x4c, 0xdb, 0xeb, 0x6d, 0x15, 0xfd, 0x35, 0x5c, 0x29, 0x80, 0x59, 0xdd, 0x26, 0xef, 0xfd, - 0x34, 0xf4, 0xd3, 0x85, 0x65, 0x01, 0xc7, 0xb9, 0xaf, 0xff, 0x6f, 0xe2, 0x14, 0x0d, 0x3e, 0x7c, - 0xa1, 0x85, 0x00, 0x95, 0xda, 0xa0, 0xfc, 0x22, 0xf4, 0xc5, 0xbf, 0xfd, 0x8c, 0x38, 0xa0, 0x0e, - 0x0d, 0x6e, 0x7e, 0x77, 0x96, 0xb2, 0xd7, 0xff, 0xb7, 0xd3, 0xf8, 0x55, 0x48, 0x3c, 0x9f, 0xff, - 0xf8, 0x57, 0x05, 0x81, 0xb5, 0x2d, 0xbf, 0xff, 0xc2, 0xb8, 0x06, 0xac, 0x8d, 0xa4, 0xc9, 0xa7, - 0xff, 0xfc, 0x72, 0x20, 0x18, 0x61, 0xc8, 0xdf, 0x05, 0x38, 0xea, 0xbe, 0x5b, 0x14, 0x76, 0x84, - 0xbe, 0x24, 0x7c, 0x71, 0x8f, 0xc2, 0x98, 0x02, 0xb7, 0x0a, 0xda, 0x9f, 0x94, 0xfa, 0x74, 0xfd, - 0xb6, 0xf8, 0x71, 0x40, 0x06, 0x5b, 0x5c, 0xf0, 0x25, 0xaf, 0x71, 0xb6, 0xf2, 0xf7, 0xd3, 0x4d, - 0xba, 0x69, 0xdb, 0x15, 0x36, 0x2a, 0xff, 0x87, 0x30, 0x00, 0xc0, 0xa1, 0xe5, 0xab, 0x85, 0x8f, - 0x54, 0xdb, 0x69, 0x83, 0xfe, 0x7e, 0x3a, 0x2e, 0x73, 0x02, 0x70, 0xe3, 0x4c, 0x5b, 0x35, 0x45, - 0xb7, 0xa3, 0x8c, 0x5f, 0x2c, 0x1a, 0xdd, 0x0b, 0x1e, 0x58, 0x86, 0x1e, 0x0a, 0x40, 0x48, 0x8d, - 0x8a, 0x03, 0x3f, 0x38, 0x79, 0xe3, 0xd5, 0xbf, 0x9e, 0xe1, 0x63, 0x91, 0x54, 0xf6, 0xa3, 0x58, - 0x90, 0xbf, 0x99, 0x2b, 0xc0, 0x48, 0xc6, 0xec, 0xad, 0xe6, 0x4e, 0x70, 0xf2, 0xc0, 0x0c, 0x1e, - 0x70, 0xb8, 0x6c, 0x73, 0x03, 0xc0, 0x0c, 0x40, 0x79, 0xfd, 0x14, 0x33, 0xbc, 0x94, 0x01, 0xb8, - 0x32, 0xc5, 0xc4, 0xca, 0xae, 0x5f, 0x06, 0x90, 0x38, 0x90, 0x81, 0x59, 0xcd, 0xff, 0x82, 0x00, - 0x12, 0x03, 0x6c, 0x08, 0xea, 0x17, 0x17, 0xf3, 0x39, 0x7e, 0x0c, 0x80, 0xe9, 0x28, 0x40, 0x3a, - 0x1d, 0xe5, 0x9b, 0x39, 0xfe, 0xa5, 0x40, 0x95, 0x65, 0x91, 0x0f, 0x80, 0x1e, 0x31, 0x96, 0xf7, - 0x4c, 0x57, 0xc3, 0xaa, 0x00, 0x9f, 0xb0, 0xdd, 0xba, 0xe0, 0xa4, 0x37, 0xfb, 0x2b, 0xe0, 0xef, - 0x71, 0x38, 0xe0, 0x9f, 0x86, 0x28, 0x0b, 0x38, 0x7c, 0x0b, 0x1a, 0x60, 0x14, 0x8e, 0xb1, 0x51, - 0x7e, 0xc7, 0x1b, 0xa3, 0x7c, 0xa4, 0xbe, 0x01, 0xd0, 0x2d, 0x89, 0x18, 0x72, 0x5e, 0x31, 0x8e, - 0x43, 0x89, 0xd1, 0x80, 0xf9, 0x01, 0x60, 0x37, 0x5c, 0xec, 0xd3, 0x14, 0x62, 0x3e, 0xa1, 0x41, - 0x6a, 0x17, 0xdb, 0x15, 0x0f, 0xf2, 0xc3, 0x14, 0xcb, 0x0c, 0x5c, 0x10, 0x00, 0x05, 0xe6, 0x7e, - 0xb2, 0xfc, 0x2c, 0xe0, 0x3b, 0x89, 0xe9, 0xbd, 0xf2, 0xdc, 0x47, 0x5c, 0xbd, 0x5d, 0x74, 0xd9, - 0xbd, 0x34, 0xe1, 0xe2, 0x40, 0x07, 0x9c, 0x46, 0xe2, 0xa6, 0xd1, 0xc1, 0x3e, 0xb2, 0xed, 0xbd, - 0x95, 0x0b, 0x1c, 0x16, 0xf7, 0x09, 0x80, 0x2d, 0xf8, 0x24, 0x3d, 0x6f, 0x3c, 0x95, 0xe0, 0xd1, - 0xa5, 0x92, 0x8a, 0x01, 0xbe, 0xa7, 0xf8, 0x39, 0x03, 0x80, 0x52, 0x58, 0x0c, 0x3b, 0x9a, 0x8a, - 0x03, 0x3f, 0xc7, 0x6c, 0x8c, 0xb0, 0xc9, 0xc1, 0xc4, 0xf9, 0xe1, 0xe3, 0xbf, 0x2c, 0xcb, 0x00, - 0xe3, 0x11, 0xcc, 0x51, 0xce, 0x07, 0x10, 0x62, 0x14, 0x8b, 0x81, 0x8d, 0x74, 0x92, 0xd4, 0xf1, - 0x90, 0x92, 0xc8, 0x03, 0x08, 0x3e, 0x09, 0x7b, 0xe6, 0xc3, 0x67, 0x17, 0x54, 0x7e, 0x1c, 0x50, - 0x3b, 0x99, 0x01, 0x64, 0xb0, 0x82, 0x21, 0xfb, 0xbf, 0x55, 0x2c, 0x64, 0x21, 0x45, 0xf5, 0xa1, - 0x83, 0x67, 0x2d, 0x4f, 0xdb, 0x6b, 0x6d, 0xdd, 0x35, 0x98, 0x1d, 0x22, 0x14, 0xbc, 0xda, 0x3e, - 0xfc, 0x36, 0xe0, 0x0a, 0x31, 0x47, 0x7d, 0x78, 0xd1, 0xf0, 0xd7, 0xfc, 0x5a, 0xdb, 0x3b, 0xed, - 0x6b, 0x3b, 0xcb, 0x6a, 0x34, 0x3d, 0xe3, 0x5d, 0x5e, 0x0c, 0x7e, 0xa4, 0x07, 0xeb, 0xe1, 0xd5, - 0x00, 0x0c, 0xcc, 0xdd, 0xb6, 0x1a, 0x73, 0x7f, 0xfe, 0xbc, 0x57, 0x55, 0x5b, 0x6d, 0x96, 0xb5, - 0x27, 0xcf, 0x23, 0x67, 0xe9, 0xf0, 0xce, 0x01, 0x7b, 0xd8, 0x49, 0x7a, 0x7c, 0xca, 0xfe, 0x88, - 0x71, 0x5d, 0x6f, 0x61, 0x72, 0x5f, 0xdb, 0x2d, 0x0f, 0x52, 0xbf, 0xfa, 0xc3, 0xd8, 0x00, 0x76, - 0x29, 0x58, 0x94, 0xa8, 0xae, 0x6b, 0xff, 0x12, 0xa9, 0xb6, 0x95, 0xb2, 0xab, 0x93, 0x3c, 0x6a, - 0xeb, 0xa6, 0x05, 0x12, 0xac, 0x57, 0xcc, 0x24, 0xad, 0x05, 0x54, 0x8b, 0xc6, 0xb4, 0xf8, 0x4d, - 0xc0, 0x25, 0x0a, 0xfc, 0x30, 0x3f, 0xd1, 0x22, 0xa2, 0xd4, 0xde, 0x8a, 0xb2, 0x76, 0x5c, 0x32, - 0xa0, 0x0f, 0xf7, 0xa4, 0x96, 0xaf, 0xdb, 0x67, 0xf7, 0xba, 0xf6, 0x15, 0x50, 0x22, 0x6d, 0x21, - 0xfb, 0x7b, 0x97, 0xa7, 0xfd, 0x6b, 0x85, 0xb0, 0x21, 0xb5, 0x8b, 0xb7, 0x7b, 0xff, 0x5a, 0x7c, - 0x26, 0x48, 0x03, 0x5d, 0xbc, 0x8d, 0x5a, 0x5a, 0xde, 0xf5, 0x75, 0x7d, 0x56, 0x15, 0xc0, 0x11, - 0x8c, 0xb7, 0x54, 0x8a, 0xea, 0xeb, 0x56, 0xef, 0xab, 0x68, 0xb0, 0xaa, 0x80, 0x4e, 0x5c, 0x69, - 0x93, 0x6d, 0xc9, 0xcb, 0xd6, 0xdd, 0x11, 0x60, 0x5e, 0xbe, 0x15, 0x50, 0x04, 0x8e, 0x99, 0xa4, - 0x5f, 0x1a, 0x29, 0xbf, 0x6f, 0x5f, 0x6e, 0x18, 0xc0, 0x04, 0x95, 0xe4, 0x2f, 0x25, 0x67, 0xaf, - 0xfc, 0x2b, 0xc1, 0x79, 0x7d, 0xac, 0x5d, 0xcd, 0x04, 0xe3, 0x8b, 0xa6, 0x2f, 0x16, 0x19, 0x70, - 0x11, 0xd3, 0xc6, 0xba, 0x2b, 0xe9, 0xfd, 0xb0, 0xc2, 0x64, 0xad, 0x83, 0x22, 0xda, 0xb2, 0x5d, - 0xfb, 0xe1, 0x5c, 0x03, 0x4a, 0x44, 0x12, 0x2d, 0x69, 0xe7, 0x42, 0x59, 0xf6, 0xeb, 0x67, 0xdf, - 0x7c, 0x2c, 0xa0, 0x0d, 0xdd, 0x8a, 0x21, 0xb7, 0xc3, 0x77, 0x5a, 0x27, 0x7a, 0xd5, 0xdd, 0xb6, - 0xe1, 0x94, 0x70, 0x35, 0xea, 0x48, 0xc5, 0xff, 0xdb, 0x6f, 0x6d, 0xbe, 0xc2, 0xf3, 0x00, 0x10, - 0xcf, 0x1a, 0xc8, 0x02, 0x3a, 0xff, 0x6f, 0x4d, 0xd4, 0x56, 0xfd, 0x45, 0x6a, 0xf7, 0xc3, 0x38, - 0x08, 0xca, 0x99, 0x8b, 0x8b, 0xff, 0xbb, 0x4b, 0xc9, 0x87, 0x02, 0xe5, 0x8e, 0x55, 0x4d, 0xd4, - 0x57, 0x2c, 0x2b, 0x52, 0xf6, 0x17, 0x70, 0x02, 0xab, 0x14, 0x5d, 0x44, 0x58, 0x98, 0xf4, 0xd3, - 0xd7, 0xad, 0x66, 0x97, 0x0c, 0x28, 0x46, 0x9e, 0x11, 0x96, 0x2b, 0x5b, 0x6e, 0x4f, 0x74, 0xcb, - 0xfe, 0xf9, 0xd1, 0x14, 0x3b, 0x80, 0x0c, 0x04, 0x2d, 0x54, 0x90, 0x4b, 0x4a, 0xf2, 0x69, 0xc6, - 0x99, 0x3b, 0xf7, 0x72, 0xf6, 0xfa, 0xa7, 0x8c, 0xb7, 0xfe, 0x19, 0xc0, 0x08, 0x19, 0xf4, 0x11, - 0x68, 0xb2, 0xff, 0xc7, 0xbb, 0xee, 0x99, 0x43, 0x4e, 0x12, 0x35, 0xe1, 0xff, 0xdb, 0xfe, 0xc3, - 0x4a, 0x00, 0x6f, 0xc8, 0xd0, 0x40, 0x87, 0xf6, 0xba, 0x93, 0xc7, 0x29, 0xd6, 0xab, 0x58, 0xba, - 0x47, 0x0c, 0x12, 0x00, 0x52, 0xbb, 0x15, 0x23, 0xf3, 0xef, 0x37, 0xae, 0xdf, 0xfc, 0xb0, 0xab, - 0x28, 0x13, 0x31, 0xe7, 0xbe, 0x2e, 0xbf, 0xfd, 0xf0, 0xce, 0x09, 0xce, 0x96, 0xde, 0xff, 0xed, - 0xff, 0x7c, 0x46, 0x01, 0x8e, 0x64, 0x83, 0x43, 0x18, 0x03, 0x10, 0xda, 0xdb, 0x1d, 0xfe, 0xbe, - 0xdf, 0xff, 0xd8, 0x63, 0x09, 0xc2, 0xf4, 0x60, 0x51, 0x9d, 0x97, 0xfa, 0x7f, 0xfb, 0xe2, 0x30, - 0x08, 0x9b, 0x4d, 0x06, 0x7b, 0x78, 0xa5, 0x02, 0x5c, 0x4e, 0xa8, 0x51, 0xc0, 0x42, 0xfb, 0xa3, - 0xbf, 0xdf, 0x7f, 0x8a, 0x50, 0xde, 0xe2, 0x23, 0x30, 0xcc, 0x76, 0x13, 0xaa, 0xe3, 0xb1, 0xca, - 0x5b, 0x6c, 0x28, 0xa1, 0x1b, 0x4f, 0x9f, 0xff, 0x6f, 0x85, 0x9c, 0x09, 0x12, 0x86, 0x45, 0xed, - 0xfd, 0x7a, 0x78, 0x51, 0x90, 0x00, 0x8c, 0x17, 0xf1, 0x36, 0x2f, 0xbc, 0x9a, 0x7a, 0x69, 0xff, - 0x15, 0x77, 0x87, 0x94, 0x00, 0xd4, 0x01, 0xd2, 0xf0, 0x4f, 0xd5, 0xdd, 0xc9, 0xd3, 0x4f, 0xc5, - 0x58, 0xab, 0x1f, 0x52, 0xc5, 0x97, 0x53, 0x2c, 0x58, 0xa2, 0xc4, 0xb4, 0x22, 0x4b, 0x4d, 0x3d, - 0xb6, 0xe1, 0x85, 0x02, 0xa0, 0x61, 0x43, 0x7f, 0x7f, 0x6f, 0x6d, 0xba, 0x6d, 0xb6, 0x2d, 0x8a, - 0x5e, 0x7f, 0x85, 0x22, 0x47, 0x96, 0xc4, 0xbf, 0x7b, 0x4e, 0xb9, 0x4b, 0x32, 0xcc, 0x50, 0xc5, - 0xd4, 0x53, 0x14, 0xc6, 0x28, 0xca, 0x18, 0xc0, 0xc4, 0x94, 0x49, 0x3f, 0x6e, 0x9f, 0xff, 0xcc, - 0x3a, 0xa0, 0x11, 0x36, 0xb8, 0xb9, 0xbf, 0x39, 0xac, 0xbe, 0x9b, 0x6d, 0xfa, 0x56, 0x9f, 0xdf, - 0xf1, 0xbb, 0xac, 0x94, 0x38, 0x5d, 0x9a, 0x97, 0xd6, 0x2e, 0x73, 0xa3, 0x78, 0x12, 0xd0, 0xac, - 0x6d, 0xdd, 0xa8, 0xa5, 0x74, 0x60, 0x59, 0x00, 0xc4, 0x34, 0xdf, 0xa8, 0x8a, 0x8d, 0x61, 0x95, - 0x01, 0x83, 0xd4, 0xdb, 0xf5, 0x29, 0x15, 0xa8, 0xaf, 0xeb, 0xa2, 0xb9, 0x62, 0xc8, 0xe7, 0x3e, - 0x14, 0xeb, 0x51, 0x85, 0x9b, 0x3f, 0x4d, 0xf1, 0x58, 0xa3, 0x2d, 0x89, 0x79, 0x6c, 0x70, 0x00, - 0x33, 0x1d, 0xc3, 0xaa, 0x00, 0x1b, 0x36, 0xa2, 0x08, 0xe7, 0xa4, 0x62, 0xe8, 0xb0, 0x3b, 0x03, - 0x98, 0x28, 0xd2, 0xc9, 0xec, 0xbc, 0xb7, 0x67, 0x87, 0x07, 0x8b, 0x87, 0x83, 0xec, 0x2e, 0xe6, - 0xdc, 0x2a, 0x28, 0x3e, 0x1d, 0xc0, 0x0c, 0x49, 0x52, 0x13, 0x64, 0x40, 0x05, 0xbf, 0x1b, 0x84, - 0xbe, 0xbc, 0x7d, 0xeb, 0x6a, 0xfd, 0x7b, 0xc2, 0xa4, 0x12, 0x4e, 0xf7, 0xfe, 0x1a, 0x24, 0x04, - 0x70, 0x36, 0xf8, 0x12, 0x75, 0xba, 0xd7, 0x74, 0xdd, 0x34, 0xd3, 0xfa, 0x74, 0xd8, 0xc3, 0x4a, - 0x03, 0x8b, 0x64, 0x3c, 0x8f, 0xd6, 0xbf, 0x5f, 0xb6, 0xdb, 0x75, 0x86, 0x09, 0x00, 0x25, 0xa3, - 0xe2, 0x33, 0x1b, 0xeb, 0x9e, 0xf2, 0x6c, 0xff, 0x7b, 0xbe, 0x1d, 0x70, 0x03, 0xe1, 0x55, 0x57, - 0x72, 0x55, 0x2a, 0x12, 0x7f, 0xdc, 0x48, 0xe2, 0x3a, 0x60, 0xdb, 0x55, 0x1e, 0xfb, 0xb2, 0xb6, - 0xc4, 0xc3, 0x69, 0xb0, 0x4b, 0xe9, 0x8f, 0xf3, 0x0f, 0x62, 0xdd, 0x01, 0xa7, 0x03, 0x97, 0x29, - 0x51, 0x97, 0x4e, 0x9b, 0xb7, 0x0e, 0xe0, 0x16, 0x41, 0x5a, 0xb9, 0xb0, 0x98, 0x3e, 0x1e, 0xf2, - 0xb9, 0x61, 0xd8, 0x17, 0x55, 0xc0, 0xa0, 0xfd, 0x08, 0x37, 0x36, 0x37, 0x78, 0x15, 0x55, 0x83, - 0x1b, 0x56, 0x23, 0xf9, 0x51, 0x7c, 0xfa, 0xcf, 0xf9, 0xd1, 0x57, 0x93, 0xeb, 0xc2, 0xca, 0x02, - 0x6a, 0xd0, 0x4c, 0xe3, 0xa4, 0xfc, 0x68, 0x7a, 0x7a, 0xd6, 0xbe, 0xb8, 0x79, 0xc0, 0x0e, 0xe6, - 0xe8, 0x18, 0xc8, 0x97, 0x2f, 0xa3, 0x37, 0x15, 0xcf, 0x4c, 0x56, 0xa2, 0xb8, 0x12, 0x21, 0x33, - 0xfe, 0x0b, 0x37, 0xbe, 0x1a, 0x70, 0x06, 0x3f, 0x43, 0xb8, 0xbf, 0x39, 0x20, 0xf5, 0xee, 0xdb, - 0xbf, 0x44, 0xda, 0x9a, 0x03, 0xb6, 0x15, 0x50, 0x45, 0x43, 0x77, 0x6b, 0xfd, 0x7f, 0x0a, 0x38, - 0x02, 0x5f, 0xe9, 0x06, 0x92, 0xf5, 0x7d, 0xe8, 0x99, 0x2c, 0x5f, 0x83, 0x80, 0x30, 0x02, 0xbb, - 0x4d, 0x54, 0x5c, 0x5c, 0x6d, 0x54, 0xad, 0x5b, 0x8e, 0xe6, 0x43, 0xb8, 0x65, 0xc0, 0x08, 0xce, - 0x64, 0x3b, 0x3c, 0xd7, 0xfd, 0x5f, 0x17, 0x53, 0x43, 0x37, 0x52, 0xfb, 0xa1, 0xdf, 0x0c, 0xa8, - 0x00, 0xd9, 0xb5, 0x64, 0x69, 0xe6, 0xe7, 0xea, 0x7b, 0xab, 0xa9, 0xf8, 0x8c, 0x0f, 0xdb, 0x1a, - 0x61, 0x6e, 0x19, 0x02, 0xfa, 0xc2, 0x98, 0x09, 0xc9, 0x3c, 0x35, 0x40, 0xd5, 0xcc, 0x47, 0xa7, - 0x2f, 0x7e, 0xd9, 0xfe, 0xda, 0xa7, 0x85, 0x94, 0x02, 0x01, 0x5e, 0xd8, 0x7e, 0x37, 0xb5, 0x75, - 0x7f, 0xb9, 0x6b, 0x4e, 0xca, 0x65, 0x10, 0xa6, 0x00, 0x55, 0xe7, 0xc3, 0x4c, 0xc2, 0xcb, 0xac, - 0x90, 0x3f, 0x58, 0xf4, 0x4c, 0x9e, 0x14, 0x24, 0x01, 0x87, 0x4b, 0x7f, 0x6f, 0xcd, 0xdb, 0xd5, - 0xb6, 0xd9, 0x7e, 0xfc, 0x2a, 0xa0, 0x08, 0x52, 0x3c, 0x0a, 0x0a, 0xf4, 0x58, 0xd7, 0x4f, 0x4e, - 0x31, 0x8d, 0x90, 0xa6, 0x4f, 0xc3, 0x38, 0x01, 0x79, 0x59, 0x20, 0x25, 0x49, 0xdc, 0xca, 0x68, - 0xea, 0x8b, 0x1a, 0x6c, 0x9e, 0x5f, 0x15, 0xf6, 0x13, 0xc0, 0x25, 0xd8, 0x50, 0xf2, 0xf7, 0xfd, - 0x3d, 0x34, 0xf8, 0xd9, 0xc1, 0x74, 0xda, 0xc3, 0x46, 0x38, 0x6a, 0x60, 0x10, 0x2a, 0x06, 0xb5, - 0x79, 0x2c, 0x25, 0x85, 0x6a, 0xb6, 0xaf, 0xba, 0xc5, 0x84, 0xdc, 0x00, 0x85, 0xad, 0x53, 0x33, - 0x34, 0x90, 0x52, 0xff, 0xa9, 0x20, 0xb0, 0xab, 0xc3, 0x32, 0x80, 0xc1, 0x93, 0x22, 0xdf, 0x5a, - 0xbe, 0xff, 0x7c, 0x33, 0x20, 0x4a, 0x0e, 0xc8, 0x1c, 0xfb, 0x77, 0x6f, 0x4f, 0x4f, 0xfe, 0xb0, - 0xbb, 0x80, 0x0c, 0x99, 0x6c, 0x2e, 0x25, 0xdf, 0xec, 0xed, 0x97, 0xc7, 0x5a, 0xa6, 0x5f, 0x4f, - 0x2f, 0xe6, 0x30, 0x9b, 0x80, 0x32, 0x04, 0xdf, 0x17, 0xf1, 0xf5, 0x55, 0xe9, 0xaa, 0x93, 0xcc, - 0x2e, 0xe0, 0x03, 0x92, 0x6f, 0x15, 0x30, 0x56, 0x96, 0xbc, 0xbf, 0xee, 0x99, 0x7e, 0xf7, 0xc3, - 0x52, 0x87, 0x59, 0x6f, 0xfd, 0xb6, 0xf6, 0xdb, 0x9d, 0x85, 0x5c, 0x02, 0x5f, 0x3a, 0x0f, 0xcb, - 0xcf, 0xbd, 0xff, 0xe1, 0x79, 0x00, 0x0c, 0x0c, 0x1a, 0x2e, 0x84, 0x3b, 0x4d, 0xdf, 0xd6, 0xfd, - 0x7f, 0x23, 0x8d, 0x70, 0x11, 0xa9, 0x9a, 0x6f, 0x17, 0xb0, 0xe1, 0x20, 0x07, 0x1d, 0x92, 0x4c, - 0x72, 0xff, 0xff, 0xb6, 0xdb, 0x67, 0xe7, 0xef, 0xe5, 0x42, 0xef, 0xf7, 0x87, 0x30, 0x02, 0x18, - 0xb8, 0x83, 0x88, 0x11, 0xfb, 0xd7, 0xfd, 0x66, 0xeb, 0x77, 0xae, 0x9f, 0x6f, 0x09, 0xb2, 0x81, - 0x39, 0x68, 0x66, 0xbb, 0x3f, 0x4f, 0xff, 0x11, 0x81, 0x1d, 0xe2, 0xb6, 0x8d, 0x70, 0x09, 0xf3, - 0xf5, 0x5b, 0xbb, 0x12, 0xa1, 0xc0, 0xc1, 0x98, 0x85, 0x03, 0x41, 0xec, 0xa4, 0x76, 0xad, 0x8d, - 0xc0, 0xbb, 0xa2, 0x1b, 0xb1, 0x0a, 0x34, 0xca, 0x21, 0x40, 0x12, 0x3c, 0x87, 0x25, 0x79, 0x09, - 0xb8, 0x01, 0x0d, 0xa5, 0xb9, 0x96, 0x7f, 0xff, 0xff, 0x5a, 0xc3, 0xd2, 0x00, 0x17, 0xcf, 0x28, - 0xf0, 0xca, 0xc0, 0x9f, 0x3b, 0x1c, 0xf2, 0xdb, 0x83, 0xfe, 0xad, 0x96, 0x58, 0xb7, 0xb7, 0xf3, - 0xb0, 0x7f, 0x6d, 0xbf, 0xe1, 0xa2, 0x40, 0x3d, 0x84, 0x88, 0x55, 0x41, 0x56, 0xd8, 0xb6, 0x9f, - 0xed, 0xb7, 0xb6, 0x7e, 0x71, 0xf8, 0x30, 0x01, 0xe0, 0x0a, 0xa1, 0x83, 0xdf, 0x53, 0x64, 0x48, - 0x7b, 0x8e, 0x8b, 0x8a, 0xc7, 0x4b, 0x8e, 0x0c, 0x73, 0x87, 0x14, 0x00, 0xa0, 0x99, 0x21, 0xa0, - 0x76, 0x31, 0x3e, 0xc5, 0x58, 0x3b, 0x7a, 0x6d, 0xb6, 0x5b, 0xae, 0xe6, 0xf2, 0x6e, 0xee, 0x1f, - 0x38, 0xda, 0xe9, 0xff, 0x03, 0xc8, 0x2d, 0xb8, 0xae, 0xe2, 0x3e, 0x71, 0xf1, 0xc6, 0x39, 0xe0, - 0x51, 0x03, 0x08, 0x52, 0xfc, 0x57, 0x2a, 0xf5, 0x8b, 0xc5, 0x6e, 0xe2, 0xb1, 0xc6, 0x3f, 0x81, - 0x04, 0x04, 0xc0, 0x20, 0x85, 0x83, 0x4b, 0x26, 0xd1, 0xfd, 0xe2, 0xb1, 0x5f, 0x6c, 0x48, 0x70, - 0x31, 0x40, 0x38, 0xc4, 0x9b, 0xeb, 0xf8, 0x62, 0x0a, 0xed, 0xbf, 0x78, 0x76, 0x25, 0xa9, 0xde, - 0xd8, 0xe0, 0x00, 0x66, 0x35, 0x50, 0xf1, 0x20, 0x02, 0xf9, 0xe2, 0xe5, 0xe4, 0x08, 0x42, 0x7f, - 0xde, 0x0a, 0xe2, 0xb1, 0x73, 0xbd, 0xd4, 0x62, 0xc5, 0x62, 0x0f, 0x4c, 0xe3, 0x0b, 0x2f, 0xbc, - 0x16, 0x2f, 0xad, 0x20, 0xa3, 0xa4, 0xfc, 0x27, 0x80, 0x18, 0x1a, 0x0f, 0xe8, 0xf5, 0xf9, 0x7e, - 0xa9, 0xef, 0x5a, 0xe1, 0x95, 0x01, 0x00, 0x5a, 0x66, 0x7f, 0x95, 0x7f, 0x6d, 0xbf, 0xbc, 0xbf, - 0x2c, 0x36, 0xe0, 0x01, 0xa7, 0x0f, 0x0b, 0xb1, 0xb0, 0x40, 0xd6, 0xbf, 0xf7, 0x3d, 0xbf, 0x3f, - 0x2d, 0x41, 0xc6, 0xe5, 0x8c, 0x77, 0xe2, 0xaf, 0x1c, 0x19, 0xc5, 0x05, 0x95, 0x19, 0x74, 0xfe, - 0x1a, 0x24, 0x00, 0x86, 0x00, 0xcf, 0xa1, 0x9d, 0xc2, 0xdd, 0xef, 0xbe, 0x28, 0xb1, 0x45, 0x9f, - 0xf5, 0xb6, 0x29, 0x99, 0x60, 0x16, 0x80, 0x20, 0x85, 0x21, 0x71, 0xcc, 0xf0, 0x31, 0xc9, 0xe1, - 0xdc, 0x14, 0x26, 0x37, 0x40, 0x00, 0x5f, 0x95, 0x66, 0x34, 0x18, 0xe3, 0x0b, 0x80, 0x02, 0xa5, - 0xac, 0xf0, 0x71, 0xfc, 0xbe, 0x62, 0x2e, 0x0f, 0x38, 0xc0, 0x10, 0xc8, 0x0e, 0x80, 0xa4, 0xef, - 0xa8, 0x38, 0xc0, 0x12, 0x8f, 0x2e, 0x3c, 0xf8, 0x80, 0x07, 0x9c, 0x3c, 0xb0, 0x19, 0x48, 0x00, - 0x25, 0x1c, 0x8b, 0x92, 0x00, 0x01, 0x05, 0x29, 0x4a, 0x5b, 0x12, 0x38, 0xff, 0x9b, 0x30, 0x9b, - 0x80, 0x1b, 0x8a, 0x58, 0x83, 0xc3, 0x85, 0x45, 0x27, 0x37, 0x77, 0xd9, 0xba, 0xbb, 0xbb, 0xac, - 0xd6, 0x0e, 0xde, 0x6f, 0x0b, 0xe0, 0x05, 0x9e, 0x11, 0xdf, 0x1c, 0x24, 0x91, 0x53, 0x83, 0x17, - 0xd0, 0x66, 0xc1, 0x39, 0xed, 0xb8, 0xeb, 0x6c, 0xef, 0x52, 0xf1, 0x76, 0xc3, 0xd8, 0x0c, 0x12, - 0xd9, 0x5b, 0x5d, 0xb3, 0x2b, 0x7a, 0xfb, 0xe2, 0xb5, 0x89, 0xf8, 0x6d, 0xa4, 0x2f, 0xed, 0x2d, - 0x13, 0xeb, 0xf0, 0xcb, 0x80, 0x11, 0x75, 0x25, 0x63, 0x7a, 0xbe, 0x89, 0x6a, 0xcb, 0x6f, 0xb2, - 0xac, 0x2f, 0x80, 0x48, 0xda, 0x9d, 0xbd, 0x99, 0x3c, 0x56, 0xc9, 0x90, 0xae, 0x78, 0x9c, 0x30, - 0xa4, 0xfa, 0x5e, 0xde, 0xf8, 0x55, 0x40, 0x9a, 0x79, 0x03, 0xa1, 0xaf, 0x9a, 0xfd, 0x6d, 0x59, - 0x36, 0xed, 0xfe, 0x15, 0xc0, 0x20, 0x9a, 0xb3, 0x0d, 0xab, 0x6b, 0xf7, 0x17, 0x53, 0xc1, 0x69, - 0x16, 0xc5, 0xc5, 0x6b, 0x0a, 0xa8, 0x03, 0x24, 0xa9, 0xcb, 0xf9, 0xff, 0x8d, 0xe1, 0xde, 0xe5, - 0x91, 0x3a, 0xc2, 0xb5, 0xac, 0x31, 0x80, 0xbc, 0xf1, 0x55, 0x47, 0xbc, 0xde, 0xf8, 0xac, 0x5c, - 0xd0, 0x44, 0x5f, 0x15, 0xde, 0xb5, 0xc3, 0x0a, 0x61, 0x13, 0x84, 0xc4, 0xad, 0x45, 0xb8, 0xae, - 0x9c, 0x2d, 0xd9, 0x4f, 0x0d, 0x56, 0x13, 0x50, 0x02, 0x9e, 0x9f, 0xc8, 0x4e, 0xed, 0xe8, 0x95, - 0x12, 0xb9, 0xb8, 0xac, 0xfc, 0x3a, 0xe1, 0x35, 0x00, 0x30, 0x1e, 0x39, 0xb2, 0x7f, 0xeb, 0x54, - 0x5e, 0xc9, 0x97, 0x12, 0xc2, 0x68, 0x16, 0x05, 0xf0, 0xaa, 0x80, 0x26, 0x12, 0xce, 0x20, 0x92, - 0x46, 0xed, 0xf6, 0xdb, 0xb8, 0xac, 0x47, 0x8f, 0xe8, 0xa3, 0x17, 0xcf, 0x08, 0x61, 0x40, 0x08, - 0x7a, 0x6a, 0x4e, 0x75, 0x7d, 0x45, 0x76, 0x68, 0xb6, 0xf9, 0xa3, 0x96, 0x1a, 0x50, 0x20, 0x9e, - 0x24, 0x9c, 0xbb, 0x7b, 0x6d, 0xff, 0xe5, 0x9f, 0x04, 0x45, 0x87, 0x4d, 0x09, 0xe0, 0x0c, 0xa9, - 0x74, 0x08, 0x50, 0x7b, 0xe9, 0xaf, 0xd6, 0xb8, 0x59, 0xc0, 0x9b, 0x98, 0xd3, 0xb3, 0x7f, 0x4f, - 0xf7, 0xc2, 0xb8, 0x08, 0xc3, 0x63, 0xac, 0xff, 0xee, 0xdb, 0x6d, 0xb7, 0x16, 0xa0, 0x26, 0x66, - 0xa9, 0xb3, 0x61, 0x85, 0x00, 0x27, 0xcb, 0x8c, 0x27, 0x21, 0x5b, 0xbf, 0x7e, 0x5e, 0x5f, 0x15, - 0xfd, 0xef, 0xca, 0xe1, 0xe2, 0x40, 0x08, 0x3d, 0xb7, 0x0c, 0x83, 0x1f, 0xfb, 0x5b, 0xaf, 0xba, - 0xbd, 0x66, 0xed, 0x8e, 0xb3, 0x7f, 0xe1, 0x82, 0x40, 0x1d, 0xef, 0x60, 0xe0, 0xbf, 0xed, 0xb7, - 0xf9, 0x22, 0xfc, 0x36, 0xe0, 0x04, 0x97, 0x0d, 0xcc, 0xa0, 0xe3, 0x8f, 0xbd, 0x6c, 0xbe, 0xdb, - 0x6d, 0xb6, 0xcb, 0xce, 0x7c, 0x57, 0x77, 0x82, 0x90, 0x19, 0x46, 0xbd, 0xf0, 0xc2, 0x80, 0x15, - 0x06, 0xa3, 0xec, 0x58, 0xb1, 0xbe, 0xb1, 0x7e, 0xed, 0x89, 0xf9, 0xbb, 0xe1, 0x77, 0x00, 0x19, - 0x9f, 0x98, 0xbc, 0xf1, 0xfe, 0xef, 0xff, 0x9b, 0xcf, 0xff, 0xd3, 0xb8, 0x53, 0x00, 0x33, 0x36, - 0x8e, 0x2c, 0xbf, 0xff, 0x7d, 0xff, 0xf0, 0x07, 0x60, 0x06, 0x00, 0xa5, 0xc1, 0xd7, 0x87, 0xe5, - 0xe3, 0xa3, 0xc2, 0xc1, 0xbb, 0x09, 0x95, 0x0a, 0x82, 0xaa, 0x94, 0xb0, 0x06, 0x70, 0xe1, 0x61, - 0xc6, 0xdd, 0x8c, 0x60, 0x31, 0xa7, 0x0c, 0x28, 0x00, 0x85, 0x23, 0x12, 0xe5, 0x27, 0x97, 0xdf, - 0xe7, 0xae, 0x32, 0xf7, 0x70, 0x76, 0xf8, 0xbf, 0xa6, 0xaf, 0x1d, 0xd8, 0x6f, 0x00, 0x0d, 0xf6, - 0x60, 0xe1, 0x90, 0xf8, 0x1c, 0xa1, 0xd7, 0xe3, 0x79, 0xe7, 0xfc, 0xf3, 0xc1, 0xdb, 0x9b, 0x8e, - 0xae, 0x6f, 0x77, 0x8a, 0x93, 0xbf, 0xac, 0x27, 0x38, 0x13, 0xad, 0xe8, 0x72, 0xb6, 0xff, 0xff, - 0x1a, 0xa0, 0x62, 0xac, 0x5d, 0x87, 0x66, 0x00, 0x18, 0x63, 0x56, 0x8e, 0x82, 0xd2, 0xaf, 0xf7, - 0xfb, 0xb6, 0xe7, 0xe6, 0xf1, 0xdb, 0x83, 0xb7, 0x4c, 0xba, 0x7f, 0x0a, 0xb8, 0x03, 0x1f, 0x69, - 0x33, 0xba, 0x5f, 0xfb, 0x7f, 0x9d, 0xc0, 0x2b, 0xd5, 0xcc, 0x8a, 0x21, 0x41, 0x2d, 0x7e, 0x4e, - 0xe1, 0x54, 0xce, 0x2b, 0x29, 0x06, 0x21, 0xc7, 0x06, 0x2c, 0x69, 0x20, 0x1d, 0xe1, 0xd3, 0x1f, - 0x0a, 0x22, 0x82, 0xea, 0x78, 0xbd, 0xba, 0xff, 0xfc, 0x01, 0x08, 0x01, 0xa0, 0x12, 0x98, 0x56, - 0x2b, 0xdc, 0xa2, 0x4b, 0xc7, 0x06, 0x34, 0xe1, 0xec, 0x01, 0x55, 0x0a, 0x7a, 0x0b, 0x92, 0x74, - 0x8c, 0x85, 0xb6, 0xc4, 0x0f, 0x39, 0xf3, 0x27, 0x79, 0xde, 0xe7, 0x3e, 0x5e, 0xcf, 0x31, 0xa9, - 0xf7, 0xef, 0xe0, 0x82, 0x14, 0x9c, 0x7d, 0x9a, 0xf1, 0x71, 0x5a, 0x56, 0x2b, 0x14, 0x62, 0xb1, - 0x58, 0xa3, 0x15, 0xb8, 0xe0, 0x31, 0x80, 0x56, 0x03, 0x42, 0x0a, 0x62, 0x78, 0xa3, 0xcb, 0x0b, - 0x0e, 0x24, 0x70, 0x5f, 0x2c, 0x71, 0x5c, 0x70, 0x18, 0xe1, 0xc3, 0x98, 0x03, 0xf1, 0xfb, 0xb3, - 0xb0, 0xf8, 0xc6, 0x97, 0xbf, 0xc6, 0x9e, 0xe5, 0xb2, 0xf3, 0x9f, 0xf0, 0x7f, 0xf3, 0x22, 0xba, - 0xf7, 0xe1, 0xc5, 0x00, 0x32, 0x82, 0x91, 0x52, 0x8d, 0x3e, 0x51, 0x6e, 0x5a, 0xa2, 0xaa, 0x1e, - 0x5d, 0x93, 0x9e, 0x8d, 0x14, 0x65, 0x54, 0x62, 0xa9, 0xa7, 0xd7, 0x94, 0x03, 0x57, 0xb6, 0xde, - 0x6e, 0x9f, 0x0d, 0xe0, 0x02, 0xc9, 0x67, 0x26, 0x3d, 0x21, 0x61, 0x6e, 0x72, 0xda, 0xce, 0x3d, - 0x85, 0xd5, 0xd9, 0x43, 0x60, 0x75, 0x73, 0xc6, 0x12, 0xe2, 0xc0, 0x29, 0x89, 0x59, 0xa4, 0x2d, - 0x10, 0xec, 0xf0, 0x7e, 0x5e, 0x4a, 0xfc, 0x2b, 0x80, 0x21, 0x58, 0xe9, 0xe8, 0x40, 0xbb, 0xb7, - 0xef, 0xba, 0xeb, 0x0d, 0x38, 0x00, 0xe6, 0xb8, 0x6c, 0x9c, 0x74, 0x2b, 0xbb, 0xe2, 0x5e, 0x7e, - 0x7b, 0xfb, 0xbd, 0xbd, 0xf8, 0x07, 0x40, 0x40, 0xd8, 0xd5, 0x80, 0x7c, 0x7b, 0xcf, 0x70, 0xb6, - 0xb9, 0x4b, 0x38, 0x81, 0xfe, 0x61, 0x7a, 0xb9, 0x29, 0x51, 0xdb, 0x49, 0x85, 0x4b, 0x0c, 0x74, - 0xb0, 0x28, 0xfa, 0x02, 0x76, 0xc4, 0x0e, 0xc1, 0xef, 0xfc, 0x31, 0x80, 0x1e, 0x69, 0xcd, 0x32, - 0x03, 0x77, 0xeb, 0x25, 0xee, 0xf6, 0x5e, 0x77, 0xe4, 0xa6, 0x58, 0x55, 0x40, 0x03, 0xe2, 0xbc, - 0x96, 0x2a, 0x53, 0x1e, 0xe5, 0x59, 0xc8, 0xc7, 0x6e, 0x5d, 0xc6, 0x3b, 0x72, 0x8c, 0xad, 0xfd, - 0xa6, 0xbd, 0x9c, 0x3a, 0x48, 0x01, 0x04, 0x99, 0x59, 0x24, 0x03, 0x1d, 0x73, 0x9f, 0xe1, 0xeb, - 0xb2, 0x65, 0x06, 0x52, 0xa2, 0xf8, 0x71, 0x7c, 0x51, 0x75, 0xac, 0xc6, 0x4f, 0xa6, 0x4e, 0xb1, - 0x90, 0x71, 0x4e, 0xdf, 0xe0, 0x3a, 0x40, 0x44, 0x05, 0x23, 0x8a, 0xfc, 0x1e, 0x2f, 0x8a, 0xef, - 0x2c, 0x0c, 0x4f, 0x04, 0x1c, 0x38, 0x38, 0xb2, 0x4a, 0xb3, 0x07, 0xfe, 0x0a, 0x41, 0x00, 0x53, - 0x5a, 0xaa, 0x93, 0xe2, 0xe2, 0xea, 0x96, 0x31, 0xeb, 0x44, 0x03, 0x83, 0x28, 0x01, 0xa8, 0x58, - 0x00, 0x13, 0x8e, 0x63, 0xb8, 0x6d, 0xc0, 0x04, 0xb3, 0x92, 0x0b, 0xc4, 0x53, 0xb6, 0xe5, 0x27, - 0x18, 0xe9, 0x39, 0xa3, 0x67, 0x8c, 0x3d, 0x72, 0xdc, 0x57, 0x05, 0x27, 0xa4, 0x53, 0x5c, 0x15, - 0x2f, 0xe1, 0x9c, 0x06, 0x83, 0x25, 0x08, 0xbb, 0xad, 0x95, 0xe8, 0x9d, 0xdc, 0xb0, 0xaa, 0x9a, - 0x0f, 0x86, 0x70, 0xc8, 0x74, 0xec, 0x97, 0xaf, 0x75, 0x5e, 0x7b, 0x0d, 0x28, 0x46, 0x29, 0xc5, - 0x49, 0x04, 0x5a, 0xd5, 0xdb, 0xba, 0xa2, 0x45, 0x52, 0xd8, 0x55, 0x40, 0x99, 0x6c, 0xc0, 0x3f, - 0x35, 0x65, 0xb9, 0x20, 0x58, 0x6a, 0xe8, 0xbd, 0x5e, 0x13, 0xc0, 0x8b, 0xff, 0x87, 0xec, 0xfa, - 0x52, 0xbb, 0xd9, 0x5e, 0x78, 0x59, 0x3b, 0xa2, 0xc3, 0x18, 0x00, 0xd7, 0x52, 0xc3, 0x22, 0x97, - 0xdf, 0x85, 0xc5, 0x62, 0xe2, 0xb7, 0x57, 0x56, 0xc1, 0xdf, 0xc4, 0xb0, 0xe4, 0x84, 0x96, 0x1e, - 0xc0, 0x0a, 0x34, 0x3a, 0x9b, 0xcb, 0x9f, 0x9c, 0xb6, 0xf2, 0x42, 0x92, 0x2b, 0xee, 0x37, 0xae, - 0x5e, 0xa6, 0xa8, 0xbf, 0xc3, 0x2a, 0x00, 0x77, 0xbc, 0x69, 0x48, 0xbe, 0xe8, 0x56, 0x3b, 0x42, - 0x2a, 0x55, 0xe1, 0xb3, 0xe9, 0xe0, 0xb6, 0x58, 0x17, 0xb6, 0x07, 0x61, 0xd8, 0x69, 0x40, 0x07, - 0x7a, 0x7b, 0xe9, 0x36, 0xff, 0xa8, 0xe9, 0xc0, 0xbc, 0x99, 0xc5, 0xf7, 0x34, 0x1f, 0x09, 0xb9, - 0xe0, 0xa5, 0xb8, 0xe6, 0x17, 0x50, 0x07, 0x2e, 0xa1, 0xd2, 0x7a, 0x3a, 0x96, 0x72, 0xdc, 0x12, - 0x70, 0x7b, 0x0b, 0x2f, 0x6c, 0x07, 0xa8, 0x07, 0xeb, 0x0b, 0xf0, 0xab, 0x1e, 0x48, 0x36, 0xee, - 0x3e, 0xc3, 0x0a, 0x00, 0x32, 0x71, 0x79, 0xf8, 0x91, 0x3f, 0xbc, 0xc8, 0x57, 0x2f, 0x29, 0x93, - 0xf0, 0xb6, 0xa4, 0xfd, 0x3c, 0x95, 0x42, 0xee, 0x00, 0x3e, 0x9a, 0x1a, 0xec, 0x52, 0xe2, 0xdf, - 0xee, 0xd8, 0x97, 0xdb, 0x6d, 0xf5, 0x85, 0x70, 0x0b, 0x0f, 0x46, 0x89, 0x9e, 0xff, 0x7b, 0xeb, - 0x58, 0x59, 0x40, 0x88, 0xcd, 0xa3, 0xda, 0x34, 0x1d, 0x5f, 0xd7, 0xfc, 0x52, 0x82, 0xa2, 0x7d, - 0x0d, 0xb8, 0x03, 0x44, 0xf3, 0xc0, 0x92, 0x7a, 0xf7, 0x7b, 0xef, 0x7f, 0x18, 0xc4, 0x55, 0x6b, - 0x7b, 0xe1, 0x55, 0x00, 0x31, 0x3b, 0x9f, 0x93, 0xbe, 0xe9, 0xf5, 0xff, 0xe1, 0x9c, 0x01, 0x6c, - 0xd0, 0x36, 0xf2, 0x3f, 0xed, 0xd7, 0xef, 0x86, 0xdc, 0x00, 0xae, 0x99, 0xc8, 0xc6, 0xbb, 0x67, - 0x72, 0xfb, 0xfd, 0xef, 0x57, 0xca, 0xaf, 0xba, 0xf0, 0xbc, 0xa0, 0x9a, 0x9e, 0x9b, 0xef, 0x7f, - 0xbf, 0x58, 0x5d, 0x98, 0x00, 0xab, 0x4d, 0x1b, 0xae, 0xde, 0xde, 0xf7, 0xbd, 0xd7, 0x4d, 0x3f, - 0x38, 0x30, 0x04, 0x20, 0x8c, 0xa7, 0xf7, 0xf8, 0xd2, 0x87, 0x00, 0x02, 0x18, 0x7a, 0x40, 0x02, - 0x5d, 0x8a, 0x75, 0x39, 0xac, 0xf8, 0xdd, 0xb6, 0xcd, 0xf6, 0xfa, 0x75, 0x8b, 0xf2, 0xbe, 0xeb, - 0xac, 0x52, 0x28, 0x54, 0x53, 0x61, 0xc9, 0x00, 0x00, 0xdb, 0x2e, 0x06, 0x47, 0xc3, 0x16, 0x42, - 0xbc, 0x43, 0xc7, 0xbe, 0xe7, 0x3f, 0xe2, 0xbb, 0x8f, 0xfa, 0xf7, 0xf0, 0x43, 0x0a, 0x45, 0xc5, - 0xeb, 0x51, 0x71, 0x4e, 0xa0, 0xef, 0xf1, 0xd3, 0xea, 0xef, 0x71, 0xa5, 0x0e, 0x00, 0x04, 0x30, - 0xdb, 0x84, 0x0a, 0x27, 0xff, 0x2b, 0xde, 0xb1, 0x7b, 0xde, 0xaa, 0xb1, 0xdb, 0x7b, 0xfc, 0x4c, - 0x48, 0x35, 0x96, 0x2b, 0x0f, 0x95, 0x6c, 0x02, 0x20, 0x01, 0x20, 0x0a, 0x08, 0x3f, 0x25, 0x02, - 0xa2, 0x8d, 0xba, 0x70, 0x1e, 0x1d, 0x46, 0xa7, 0x70, 0xbc, 0x50, 0x76, 0x28, 0xc5, 0x7a, 0x51, - 0x46, 0x0a, 0x60, 0x9f, 0x01, 0xf2, 0x08, 0x42, 0x90, 0xec, 0x35, 0x3c, 0x00, 0x1c, 0x3c, 0xe0, - 0x76, 0xd4, 0x50, 0x01, 0x8a, 0x00, 0x33, 0xc0, 0x70, 0xf0, 0x07, 0x0f, 0x0f, 0x26, 0x0a, 0x94, - 0x52, 0x9e, 0x00, 0x1e, 0x1d, 0xa5, 0x3d, 0xc2, 0x60, 0x02, 0xa4, 0xc5, 0x43, 0xe7, 0x1a, 0x54, - 0x26, 0xe0, 0x03, 0x3b, 0x74, 0x68, 0x3d, 0x2b, 0xfd, 0xbb, 0xbf, 0xe2, 0x30, 0x63, 0xcb, 0x85, - 0x99, 0xc0, 0x24, 0xcf, 0x24, 0x37, 0xff, 0xff, 0x4d, 0x3e, 0x37, 0x05, 0x95, 0x01, 0x7b, 0x0a, - 0xa8, 0x64, 0x33, 0xd7, 0xff, 0xa7, 0xe2, 0xb0, 0xfb, 0x95, 0x09, 0xe0, 0x46, 0x6f, 0x9c, 0xdf, - 0xd3, 0xfe, 0xf0, 0xaa, 0x80, 0x25, 0x6a, 0xac, 0xd7, 0xeb, 0xe6, 0xef, 0xff, 0xc2, 0xaa, 0x00, - 0x6e, 0xd5, 0xb4, 0x3e, 0x7d, 0xdb, 0x4f, 0xff, 0xc2, 0xaa, 0x02, 0xec, 0x8d, 0xef, 0x7f, 0xa6, - 0xff, 0x76, 0xf0, 0xaa, 0x84, 0x86, 0x7e, 0x9f, 0xe9, 0xfe, 0x9d, 0x70, 0x73, 0x0a, 0x11, 0x45, - 0xea, 0x2e, 0xbd, 0x37, 0x8a, 0xef, 0x1c, 0x18, 0xfe, 0x00, 0xbc, 0x01, 0x88, 0x2a, 0xdc, 0x5e, - 0xf7, 0x15, 0xda, 0x8b, 0x8e, 0x31, 0xce, 0x18, 0x50, 0x09, 0x52, 0x3e, 0x37, 0x3f, 0xab, 0xf2, - 0x8a, 0xef, 0x4d, 0xb0, 0x76, 0xe9, 0xe9, 0xdf, 0x0f, 0x60, 0x04, 0xb7, 0xde, 0x0f, 0x1b, 0xca, - 0xa0, 0x96, 0x07, 0x67, 0x0e, 0x3c, 0x1a, 0x28, 0xc1, 0x3b, 0x3f, 0xc6, 0x9c, 0x2b, 0xe4, 0xa4, - 0x71, 0xb2, 0x91, 0x53, 0xd3, 0xf8, 0x65, 0xc0, 0x02, 0x7d, 0x1a, 0xdd, 0x1a, 0x17, 0x05, 0xd7, - 0xd3, 0x4e, 0x9c, 0x69, 0x8b, 0x82, 0x98, 0xbf, 0xec, 0x35, 0x80, 0x11, 0x4f, 0x91, 0x01, 0x63, - 0x80, 0x29, 0xe4, 0x9e, 0x9a, 0x69, 0xda, 0x63, 0x1f, 0x5a, 0x9f, 0x83, 0xaf, 0xbf, 0xdd, 0x34, - 0xeb, 0x00, 0x43, 0x11, 0xb8, 0x38, 0xa8, 0x3a, 0x82, 0x70, 0x00, 0xf0, 0x0f, 0xec, 0x65, 0xb3, - 0xc0, 0x00, 0x94, 0x0d, 0x50, 0x43, 0x3b, 0xca, 0x08, 0x4b, 0x18, 0xde, 0x7c, 0x48, 0x00, 0x54, - 0xb8, 0xb0, 0xbd, 0xa7, 0x0e, 0x01, 0x83, 0xc0, 0x20, 0x19, 0xea, 0x65, 0xf7, 0xf8, 0x08, 0x10, - 0x88, 0xdd, 0xb2, 0x61, 0xc2, 0xb5, 0x54, 0xe4, 0x53, 0x29, 0xb0, 0x88, 0x00, 0x56, 0x61, 0xfb, - 0xc8, 0x95, 0x56, 0x61, 0x60, 0x3b, 0x08, 0x8b, 0x80, 0x30, 0x0d, 0xc1, 0xcb, 0xff, 0x86, 0xf0, - 0x02, 0xfd, 0x59, 0xae, 0x4c, 0x2e, 0xfe, 0xb5, 0x3f, 0x9a, 0xb8, 0x78, 0x3e, 0xa4, 0x4a, 0x1e, - 0x1d, 0x92, 0x9e, 0x83, 0xbe, 0x17, 0xa4, 0x56, 0xff, 0x9f, 0xc3, 0x98, 0x04, 0x2c, 0x72, 0x65, - 0xbc, 0x81, 0x57, 0xff, 0x6c, 0xa9, 0xb8, 0x70, 0xfe, 0x7a, 0xc7, 0x7e, 0x76, 0xbb, 0xf8, 0x35, - 0xb0, 0xc8, 0xc6, 0x84, 0x7c, 0x7e, 0x83, 0xfe, 0x2e, 0x57, 0x9f, 0x04, 0x07, 0xe3, 0x21, 0xe6, - 0xe9, 0xeb, 0x58, 0x69, 0xc0, 0x10, 0x82, 0x1c, 0xc2, 0xd2, 0x20, 0xf7, 0xd5, 0x9b, 0x31, 0xeb, - 0xed, 0xd8, 0x97, 0x83, 0xbf, 0x3d, 0xf6, 0xdd, 0xbb, 0xf9, 0x6f, 0x07, 0x5f, 0x1c, 0x31, 0xdc, - 0x36, 0xe0, 0x03, 0xbf, 0xd8, 0x15, 0xf4, 0xae, 0xdf, 0xd8, 0x51, 0xc4, 0xe6, 0x06, 0x2c, 0x9b, - 0x7a, 0xc3, 0xbb, 0x67, 0x9b, 0x9f, 0x85, 0x9f, 0x86, 0x01, 0xd8, 0xc5, 0xc8, 0xf5, 0x0f, 0x86, - 0x70, 0x02, 0x9c, 0xdf, 0x85, 0x12, 0x35, 0xec, 0x95, 0xd0, 0x24, 0x65, 0xcd, 0x07, 0x3b, 0xec, - 0x90, 0x2d, 0xc2, 0x63, 0x0d, 0x12, 0x01, 0x5e, 0xbe, 0xa4, 0xdb, 0xbb, 0xd6, 0x2e, 0xeb, 0x65, - 0xda, 0xd1, 0x5e, 0xcd, 0xb0, 0xb3, 0x80, 0x37, 0xd6, 0x32, 0x5a, 0x67, 0x5e, 0x2a, 0x42, 0xba, - 0x39, 0xe1, 0x15, 0xab, 0x26, 0x50, 0xc6, 0x00, 0x54, 0xb7, 0xc2, 0x8a, 0xe9, 0x6a, 0x68, 0xdd, - 0xeb, 0xdf, 0xb3, 0x32, 0x61, 0xac, 0x04, 0xc0, 0x6d, 0x8f, 0x27, 0x2f, 0x9a, 0x16, 0x55, 0x92, - 0x17, 0xbe, 0xb0, 0xd2, 0x80, 0x19, 0x0f, 0x87, 0x88, 0xbc, 0xdf, 0x17, 0xdb, 0x60, 0xdf, 0x39, - 0x58, 0x4d, 0xed, 0x96, 0xf1, 0x78, 0xbb, 0xe1, 0x55, 0x00, 0x39, 0xcc, 0x74, 0xd6, 0xcd, 0xd7, - 0x7e, 0xc9, 0xcb, 0xf7, 0x27, 0xdb, 0x58, 0x5d, 0xc0, 0x04, 0x3c, 0xe8, 0xe3, 0x0b, 0x7f, 0xf7, - 0x4b, 0x07, 0xb9, 0xb3, 0x40, 0x3b, 0x78, 0x78, 0x91, 0xea, 0x4e, 0x3a, 0xe0, 0xce, 0x3a, 0x70, - 0xec, 0x27, 0x80, 0x12, 0xd5, 0xd1, 0x30, 0x1b, 0xbe, 0x2b, 0xad, 0x62, 0xfe, 0xc8, 0x90, 0x34, - 0x3c, 0x20, 0x18, 0x0a, 0x63, 0x0a, 0x0d, 0x30, 0x65, 0xbb, 0x4c, 0x2f, 0x57, 0x1a, 0xa0, 0x54, - 0x69, 0x25, 0xe7, 0x9e, 0x23, 0xce, 0xe0, 0xe6, 0x38, 0x0f, 0x0c, 0x01, 0x64, 0x29, 0x68, 0x2c, - 0x2a, 0x5f, 0x9e, 0x0e, 0x1e, 0x03, 0x97, 0x9c, 0x62, 0xb2, 0xfc, 0xb1, 0x97, 0x8e, 0x63, 0x83, - 0x86, 0x70, 0x9d, 0xd9, 0xc0, 0x7d, 0x8b, 0x2f, 0xed, 0xb7, 0x54, 0x44, 0x87, 0xe5, 0x84, 0xf1, - 0xd3, 0xc6, 0xbf, 0x5a, 0xfe, 0x17, 0xc1, 0x35, 0x35, 0xb2, 0x3f, 0xd6, 0xbf, 0x7c, 0x27, 0x84, - 0x7e, 0xb6, 0xef, 0xff, 0xf0, 0xd3, 0x86, 0x80, 0x53, 0x6a, 0xea, 0xf3, 0x7d, 0x5d, 0x5e, 0xb5, - 0x96, 0x16, 0xc0, 0x8a, 0x9c, 0x85, 0xfc, 0xdd, 0x7e, 0xae, 0xdf, 0xe1, 0x9c, 0x01, 0x83, 0xe2, - 0x4b, 0xc5, 0xfc, 0xdf, 0xff, 0x6f, 0x96, 0x18, 0x24, 0x01, 0xb3, 0x4c, 0xc2, 0xd7, 0x7f, 0xfb, - 0xa7, 0xc9, 0xb0, 0xb2, 0x82, 0x55, 0x3c, 0xef, 0xfd, 0x7d, 0xe1, 0x7c, 0x00, 0xb7, 0x68, 0x83, - 0xc8, 0x42, 0xff, 0x2f, 0xe5, 0xed, 0x9b, 0xd4, 0x9e, 0x39, 0xec, 0xc2, 0xca, 0x00, 0x71, 0xf9, - 0x16, 0x77, 0x2e, 0x9e, 0x9f, 0x6c, 0xff, 0x6f, 0x0d, 0xe0, 0x07, 0x7b, 0x8a, 0x61, 0x97, 0xf3, - 0xff, 0x7b, 0xdd, 0xdd, 0xb1, 0x59, 0xbc, 0x5b, 0xf5, 0xe1, 0x47, 0x2e, 0x7f, 0xa6, 0x9f, 0x4d, - 0x3e, 0x1c, 0xc0, 0x04, 0x17, 0x93, 0x47, 0x8e, 0xe6, 0xfb, 0xde, 0xdb, 0xee, 0xa9, 0xb9, 0xaf, - 0x7e, 0x17, 0x70, 0x06, 0xc5, 0x7f, 0x88, 0xf0, 0x7f, 0x9b, 0xdf, 0xee, 0x0f, 0xb8, 0xff, 0xbc, - 0x7f, 0xcb, 0xc6, 0x6c, 0x2e, 0xe0, 0x1a, 0x99, 0xa4, 0xd2, 0xdb, 0x6f, 0xfb, 0x7f, 0x58, 0xb7, - 0x02, 0x15, 0x16, 0x0b, 0xe2, 0x48, 0x70, 0x8b, 0x14, 0xce, 0x14, 0x46, 0x04, 0xc2, 0xe9, 0xe9, - 0x7f, 0xee, 0x6f, 0xf8, 0x0a, 0x80, 0x28, 0x85, 0x2e, 0xe5, 0x81, 0xc4, 0x70, 0x9a, 0xa5, 0x48, - 0xd4, 0xb3, 0x2e, 0xdf, 0x77, 0x17, 0x16, 0xd2, 0x06, 0x46, 0xa0, 0xa0, 0x63, 0x0a, 0x86, 0xdc, - 0x04, 0xc9, 0x4f, 0x10, 0xc5, 0xc9, 0xdd, 0x65, 0x7d, 0x56, 0x35, 0xf3, 0xc9, 0x7b, 0xd6, 0xb8, - 0xa9, 0xc3, 0x39, 0xbe, 0x25, 0xc2, 0x66, 0x3c, 0x88, 0x73, 0x88, 0xc4, 0x48, 0x08, 0xe7, 0xcd, - 0x54, 0x46, 0x06, 0x6e, 0x5e, 0x25, 0x40, 0x89, 0xcf, 0x8e, 0x85, 0x54, 0x06, 0x7e, 0x4b, 0xff, - 0xfb, 0xc4, 0x60, 0x81, 0x49, 0x73, 0xf0, 0x09, 0xc8, 0x31, 0x05, 0x51, 0x5e, 0xb8, 0xba, 0xaa, - 0xe3, 0x83, 0x1c, 0xe1, 0x97, 0x04, 0xc3, 0xb5, 0xd5, 0xff, 0x7d, 0x3f, 0xf7, 0x00, 0x9c, 0x83, - 0x80, 0x47, 0xc5, 0x6e, 0x38, 0x31, 0xf8, 0x57, 0x00, 0x33, 0x2e, 0xec, 0x5d, 0xd7, 0x2f, 0xa6, - 0xbe, 0x9d, 0xbf, 0x00, 0xa4, 0xc1, 0x49, 0x02, 0xa1, 0x52, 0xc0, 0x38, 0x89, 0x82, 0x3e, 0xcc, - 0xbd, 0xe3, 0x83, 0x1c, 0xe1, 0x44, 0x50, 0x09, 0x3e, 0xad, 0x1f, 0x6d, 0x5f, 0xfb, 0x7b, 0x7e, - 0x00, 0x9c, 0x20, 0xa8, 0x98, 0x1c, 0x1c, 0x75, 0xe5, 0x80, 0x01, 0x98, 0xa0, 0x00, 0x66, 0x06, - 0x24, 0x1f, 0x16, 0x00, 0x06, 0xf8, 0x18, 0x28, 0x7c, 0xb2, 0x02, 0xa4, 0xc3, 0xb8, 0x00, 0xfe, - 0x1e, 0x75, 0x85, 0x61, 0x7d, 0xdf, 0xf9, 0xfb, 0xdd, 0x3a, 0x6f, 0xab, 0x65, 0x1b, 0x95, 0xea, - 0x6f, 0xfa, 0x31, 0xe9, 0xa7, 0xf0, 0xe2, 0x80, 0x06, 0x97, 0x9b, 0x4f, 0xac, 0x16, 0xff, 0xdd, - 0xe5, 0xf3, 0x13, 0x82, 0x6e, 0x0e, 0xfd, 0x7e, 0x1b, 0xae, 0xb6, 0xcb, 0x01, 0x4e, 0xba, 0x7c, - 0x3b, 0x80, 0x11, 0xca, 0xb0, 0x6c, 0xc5, 0x3b, 0x7c, 0x0f, 0xf8, 0xb1, 0x34, 0x82, 0xc6, 0x33, - 0xc9, 0x46, 0x40, 0xe7, 0xba, 0x0d, 0xe2, 0x47, 0xaa, 0xe3, 0xde, 0xf8, 0xad, 0xc4, 0x7c, 0x56, - 0x11, 0xe9, 0xd3, 0x24, 0x38, 0x71, 0x40, 0x15, 0xa4, 0xe4, 0x1d, 0x7a, 0x21, 0x07, 0x6d, 0xbc, - 0x07, 0xdb, 0xf3, 0xe0, 0x01, 0xe8, 0x9f, 0x0c, 0xc1, 0x78, 0x57, 0x74, 0xe6, 0xb2, 0x7f, 0x26, - 0x0a, 0x2f, 0xf0, 0x2c, 0x42, 0x91, 0xc1, 0xbc, 0x72, 0x3e, 0x38, 0xbe, 0x50, 0x8f, 0x05, 0x5e, - 0x8a, 0x33, 0xe5, 0xf4, 0xe4, 0xb0, 0x19, 0x6c, 0x51, 0xec, 0xde, 0xe3, 0x68, 0x50, 0xe1, 0x97, - 0x00, 0x37, 0xec, 0x73, 0x25, 0xee, 0xc5, 0xf4, 0x4f, 0xed, 0xdc, 0x4f, 0xc1, 0xff, 0x6e, 0xd9, - 0xe6, 0x56, 0xd9, 0x7f, 0xd8, 0x6d, 0xc0, 0x14, 0x6a, 0xb4, 0x3f, 0x57, 0xb2, 0x40, 0x43, 0x08, - 0x4f, 0xa8, 0x86, 0x12, 0x70, 0xc2, 0x10, 0x8a, 0xb3, 0x42, 0x2a, 0x5f, 0x09, 0xe0, 0x1e, 0xf8, - 0x92, 0xac, 0xc6, 0x9d, 0xcf, 0xd1, 0x66, 0x81, 0xe0, 0xbb, 0x46, 0xc4, 0xbe, 0xe6, 0x92, 0xb2, - 0x85, 0x9c, 0x05, 0x5b, 0x83, 0x95, 0xfd, 0x56, 0xc8, 0x43, 0x0b, 0xcc, 0x90, 0xc2, 0x79, 0x24, - 0x40, 0xf7, 0x53, 0xc2, 0xb5, 0x17, 0xa4, 0x48, 0x42, 0xa2, 0x54, 0x50, 0xce, 0x02, 0x72, 0x6e, - 0x4e, 0xbd, 0x76, 0x54, 0x44, 0x82, 0x2e, 0xbd, 0xe2, 0xb8, 0x58, 0x67, 0x00, 0x61, 0x8a, 0x2d, - 0xb8, 0x48, 0xb7, 0xfa, 0xad, 0x17, 0xf6, 0x18, 0x50, 0x20, 0x4a, 0x94, 0x37, 0xeb, 0xee, 0xae, - 0xa8, 0x89, 0x04, 0xfe, 0xc2, 0x8a, 0x00, 0x1b, 0x7f, 0xf8, 0xef, 0xf7, 0x5f, 0xf8, 0xfd, 0xb3, - 0xfa, 0xe6, 0xf5, 0xdf, 0x44, 0xc9, 0x70, 0xcb, 0x80, 0x27, 0xeb, 0x15, 0x49, 0xcd, 0x5b, 0xbe, - 0x7f, 0x3a, 0xc4, 0x97, 0xb6, 0x05, 0xa4, 0x4a, 0xe1, 0x9e, 0x68, 0x56, 0xe6, 0x1d, 0x7c, 0x6b, - 0x0c, 0xe0, 0x03, 0x61, 0xdb, 0x16, 0xfe, 0xa6, 0x37, 0xef, 0xb1, 0xbc, 0x62, 0xe2, 0x5e, 0x89, - 0xf3, 0xbf, 0x74, 0xc0, 0x52, 0x1c, 0x93, 0x88, 0x38, 0x21, 0x01, 0xb0, 0x14, 0x87, 0xfd, 0x31, - 0xc5, 0xf8, 0xc5, 0x76, 0x72, 0xc5, 0x18, 0xef, 0xca, 0xc1, 0x3b, 0x41, 0xdf, 0xb5, 0x83, 0xec, - 0xe2, 0x42, 0xc8, 0xe0, 0x06, 0x38, 0x00, 0xe1, 0xa5, 0x00, 0x18, 0x73, 0x4a, 0x20, 0xc3, 0xc3, - 0xfd, 0xd9, 0x6b, 0x10, 0xc1, 0x46, 0x81, 0xb0, 0x52, 0x35, 0x51, 0xe1, 0x90, 0x7c, 0x3b, 0xce, - 0x92, 0x8d, 0x26, 0xb0, 0xce, 0x01, 0x25, 0x52, 0x4e, 0x1b, 0xeb, 0xf7, 0x75, 0xf9, 0x3f, 0xfd, - 0x61, 0x79, 0x45, 0x07, 0xff, 0xf7, 0xbb, 0xe2, 0x70, 0x14, 0xf4, 0x96, 0xe1, 0x75, 0x00, 0x9d, - 0x39, 0xa5, 0x36, 0xff, 0x15, 0xc5, 0x7a, 0x21, 0xdd, 0x1b, 0x12, 0xa6, 0x16, 0x64, 0x00, 0xef, - 0x0f, 0xa1, 0x5d, 0x5f, 0xc9, 0x0b, 0x84, 0xff, 0x0b, 0x60, 0x20, 0x3e, 0x58, 0x7d, 0x7f, 0x5f, - 0xaf, 0x0c, 0x38, 0x13, 0x04, 0xc8, 0x00, 0x68, 0x6a, 0x96, 0xb4, 0xf2, 0xf5, 0xd7, 0xc7, 0xc7, - 0x70, 0xd3, 0x80, 0x11, 0x0b, 0x71, 0x1c, 0x0c, 0xd9, 0x7e, 0xdb, 0x7e, 0x9c, 0xbc, 0xbf, 0x31, - 0x86, 0x59, 0x40, 0x9f, 0x68, 0x71, 0xb7, 0xff, 0xa7, 0xff, 0x61, 0x94, 0x40, 0x02, 0x13, 0x33, - 0x50, 0xdc, 0x97, 0xb4, 0xdf, 0xdb, 0x3f, 0xbf, 0xfb, 0x0a, 0x92, 0x00, 0x86, 0xcb, 0xdb, 0x9b, - 0xa9, 0xe9, 0xb9, 0xfd, 0xff, 0xe1, 0x00, 0x14, 0x01, 0x48, 0x5c, 0x54, 0xf7, 0x0f, 0x7e, 0xfc, - 0x26, 0x15, 0x53, 0xf8, 0xf7, 0x89, 0xf2, 0xc3, 0x12, 0x79, 0x61, 0x8c, 0x00, 0x03, 0x89, 0x87, - 0x14, 0x0e, 0x0c, 0x81, 0x63, 0xed, 0x0e, 0xed, 0xed, 0xed, 0xb7, 0xfe, 0x3c, 0xe5, 0x34, 0xf6, - 0xdb, 0xe1, 0xbc, 0x00, 0x33, 0xaf, 0x6c, 0x2c, 0xb7, 0x80, 0x8c, 0xf3, 0x6a, 0xda, 0xad, 0x6a, - 0x2e, 0xa2, 0xeb, 0x58, 0x8e, 0xc5, 0x3f, 0xeb, 0x0e, 0x28, 0x00, 0x9f, 0x65, 0x9c, 0x68, 0x11, - 0xd9, 0xae, 0x4d, 0xbf, 0x1f, 0xf1, 0xff, 0x97, 0xff, 0x8b, 0x26, 0xdb, 0xe9, 0xf0, 0xe6, 0x00, - 0x24, 0x47, 0x34, 0xc0, 0x4b, 0xc2, 0x48, 0x73, 0x76, 0xf6, 0x70, 0x75, 0x76, 0xcb, 0xdb, 0x4e, - 0x3f, 0xd9, 0xbf, 0x5e, 0x15, 0x62, 0x41, 0x1b, 0x13, 0x55, 0xed, 0xff, 0xf8, 0x95, 0x1d, 0xc7, - 0x85, 0x04, 0x03, 0xa7, 0xcb, 0xc1, 0xd7, 0xcf, 0x03, 0xcd, 0xa2, 0x8c, 0xac, 0x94, 0xb6, 0x0e, - 0x9f, 0x1d, 0x0b, 0x89, 0x01, 0xe3, 0xfd, 0x38, 0x03, 0xe3, 0x1e, 0x59, 0x18, 0xe3, 0x1f, 0x86, - 0x14, 0x00, 0xdc, 0xf9, 0x90, 0x5f, 0xf5, 0xbd, 0x38, 0xff, 0xf1, 0xf1, 0xdc, 0x4a, 0x38, 0xb0, - 0xe2, 0x94, 0x70, 0x70, 0x44, 0x32, 0x83, 0x44, 0x16, 0x51, 0x0e, 0x38, 0xc6, 0x2a, 0x41, 0x38, - 0x44, 0xa2, 0x95, 0x88, 0x94, 0x40, 0x22, 0x9f, 0x3e, 0x58, 0x07, 0xa2, 0x09, 0xea, 0x29, 0xa8, - 0xbd, 0x6e, 0x38, 0xec, 0x4b, 0x81, 0x43, 0xa9, 0xae, 0x23, 0x00, 0x61, 0xeb, 0x79, 0x1f, 0x30, - 0x08, 0x80, 0x12, 0x01, 0x0d, 0xdd, 0xda, 0x1c, 0x18, 0xfe, 0x04, 0x00, 0xc0, 0x22, 0x9b, 0x8a, - 0x1d, 0x21, 0xc1, 0x8f, 0xc3, 0x33, 0x00, 0x17, 0xd1, 0xdc, 0x41, 0x89, 0x4b, 0x4f, 0x6c, 0xbe, - 0xfe, 0x21, 0xed, 0xd9, 0x66, 0xe0, 0x0c, 0x40, 0x40, 0x52, 0xe2, 0xb1, 0x3c, 0xc5, 0x71, 0x58, - 0xac, 0xf0, 0x0f, 0x03, 0xb0, 0x25, 0x1d, 0x0b, 0x96, 0x00, 0x04, 0xa1, 0xd9, 0x2b, 0xf0, 0x98, - 0x00, 0x2a, 0x1d, 0x89, 0x41, 0x20, 0x31, 0xa1, 0x58, 0x21, 0xa2, 0x8e, 0x0c, 0x73, 0x86, 0x11, - 0x00, 0x37, 0x28, 0x4c, 0x6e, 0xd3, 0xff, 0xfd, 0xf8, 0x38, 0x0c, 0x02, 0x78, 0x58, 0x15, 0x38, - 0x01, 0xf8, 0xa0, 0xe2, 0xb7, 0x8e, 0x32, 0x07, 0x85, 0x27, 0x83, 0xf3, 0xde, 0x9e, 0x2f, 0x3d, - 0xed, 0x61, 0xee, 0x37, 0x2f, 0x1d, 0xf8, 0xc0, 0x01, 0x43, 0xb8, 0x79, 0x41, 0x04, 0xd4, 0xd7, - 0x7d, 0x94, 0xfd, 0xb7, 0xae, 0x7e, 0x71, 0x3d, 0x11, 0x23, 0xfe, 0x01, 0x50, 0x02, 0x48, 0xd8, - 0xa0, 0x0c, 0x48, 0x0f, 0x12, 0x38, 0x58, 0xcb, 0x18, 0x90, 0x70, 0x7d, 0x6a, 0x8a, 0x3b, 0x96, - 0xb1, 0x76, 0xd2, 0x08, 0x88, 0xa0, 0x41, 0xd9, 0x7c, 0xbc, 0x28, 0xf7, 0xc3, 0x38, 0x0a, 0xbb, - 0x31, 0x3b, 0x63, 0xef, 0xd5, 0x6d, 0xb7, 0x5e, 0x68, 0x26, 0x3d, 0x7b, 0xfc, 0x95, 0x42, 0x6e, - 0x00, 0xec, 0xba, 0x0c, 0x4e, 0xfb, 0xaf, 0xd5, 0xc5, 0xc5, 0x7c, 0x05, 0xc0, 0xd9, 0xf9, 0x66, - 0x7e, 0x79, 0xe5, 0x9d, 0x9e, 0xfe, 0x5f, 0x5a, 0x76, 0xe2, 0x5e, 0xfe, 0x1c, 0x2f, 0x1d, 0xc2, - 0x9e, 0x13, 0x87, 0xf0, 0xa3, 0x80, 0x2f, 0x0a, 0xeb, 0x23, 0x55, 0xd5, 0x95, 0xff, 0xf0, 0xaa, - 0x86, 0x71, 0xd7, 0x96, 0x04, 0x82, 0xe5, 0x93, 0xcf, 0xde, 0x1d, 0xc0, 0x18, 0xdd, 0x1d, 0x6d, - 0xf6, 0x91, 0x22, 0x64, 0xea, 0xc9, 0x10, 0x9c, 0x19, 0x55, 0x94, 0x47, 0xd5, 0x7b, 0xfc, 0x32, - 0xa0, 0x07, 0x34, 0x3b, 0x77, 0x35, 0x75, 0xdd, 0x4f, 0x34, 0x52, 0xec, 0x84, 0x8f, 0x3b, 0xcb, - 0x08, 0x56, 0x21, 0x84, 0x7c, 0x2a, 0xa0, 0x03, 0xfe, 0x91, 0x71, 0x08, 0x52, 0xdf, 0xd6, 0x58, - 0x29, 0xcc, 0x11, 0x22, 0xbc, 0x28, 0x48, 0x07, 0x4a, 0xea, 0xb1, 0xd5, 0xd7, 0x7d, 0x77, 0xbe, - 0x14, 0x50, 0x15, 0xb5, 0x01, 0xb9, 0x8e, 0xea, 0x9f, 0x77, 0xfe, 0x0a, 0x00, 0x24, 0x01, 0x4a, - 0x6e, 0x67, 0xef, 0xb6, 0x98, 0xf5, 0x35, 0xd4, 0xc1, 0xdb, 0xc6, 0xd8, 0xb6, 0x38, 0x63, 0x80, - 0x38, 0x75, 0xc0, 0x0c, 0x2a, 0x64, 0xb4, 0x6d, 0xe7, 0x87, 0xbe, 0xe1, 0x1f, 0x83, 0xfe, 0xa7, - 0x8b, 0x27, 0xc1, 0xf0, 0xb5, 0x7f, 0xfc, 0x09, 0x01, 0x4b, 0x79, 0x56, 0xc5, 0xb3, 0x9e, 0x79, - 0x65, 0x9f, 0xec, 0x79, 0x6b, 0x8d, 0xb4, 0x3c, 0xde, 0xa3, 0x86, 0x38, 0x0e, 0x15, 0xc0, 0x07, - 0xff, 0xed, 0xd3, 0x6b, 0xed, 0xf3, 0x28, 0x27, 0x74, 0x6c, 0x59, 0xdb, 0x06, 0x72, 0xdf, 0x2d, - 0xa1, 0x29, 0xbe, 0x07, 0xfc, 0x32, 0x48, 0x4e, 0x98, 0x76, 0xe9, 0xed, 0xfe, 0x7f, 0xf6, 0x15, - 0x94, 0x34, 0xd1, 0xf7, 0xbe, 0xeb, 0x15, 0xcf, 0x48, 0x6e, 0x40, 0x02, 0xae, 0x8a, 0x8f, 0x16, - 0xb5, 0xf8, 0xbe, 0x18, 0x5f, 0xc8, 0xa5, 0xb6, 0xca, 0x9d, 0xff, 0x0f, 0x12, 0x00, 0x4b, 0xc9, - 0x63, 0xb9, 0x15, 0xf7, 0xbd, 0xf6, 0xe8, 0x0a, 0xc7, 0x68, 0x38, 0x9c, 0x26, 0x81, 0x6d, 0x6a, - 0x61, 0xd5, 0x25, 0x3a, 0x8c, 0x41, 0xa2, 0xfe, 0x1e, 0x70, 0x07, 0x76, 0x0a, 0x5c, 0x5e, 0x12, - 0x09, 0x2b, 0xe9, 0x79, 0x7d, 0x34, 0xd5, 0x69, 0x98, 0x14, 0x6c, 0x53, 0x2d, 0x38, 0xc9, 0xd7, - 0x7f, 0xc3, 0x18, 0x01, 0xa1, 0x0e, 0xd6, 0x16, 0x6c, 0x4d, 0xed, 0xfb, 0x6d, 0xdb, 0x26, 0x8e, - 0x7e, 0xdb, 0x6c, 0xab, 0xfb, 0xe1, 0x7c, 0x00, 0x73, 0xd5, 0xd6, 0x94, 0x7f, 0xf7, 0xdb, 0x6e, - 0xf8, 0x61, 0x40, 0x04, 0x65, 0x77, 0x7d, 0xf3, 0xe5, 0xfe, 0x9a, 0x7a, 0x69, 0xb1, 0x85, 0xb0, - 0x06, 0x1f, 0x9c, 0x8a, 0x07, 0x19, 0xdd, 0xf9, 0x7e, 0x9c, 0xfe, 0xcf, 0xcb, 0x5d, 0x70, 0x9b, - 0x80, 0x81, 0x2d, 0x30, 0xfb, 0xfd, 0xb6, 0xf7, 0xfe, 0x1a, 0x50, 0x08, 0xf1, 0xc4, 0x95, 0x61, - 0x56, 0xde, 0xdf, 0xfb, 0xd3, 0x63, 0x86, 0x01, 0x48, 0x2d, 0xa8, 0xa7, 0x17, 0x78, 0xae, 0x38, - 0x00, 0x14, 0x8f, 0xe0, 0xe4, 0x0b, 0x20, 0xb2, 0x2e, 0x27, 0x82, 0x99, 0x66, 0xee, 0xfa, 0xd4, - 0x70, 0x00, 0x31, 0xb0, 0xde, 0x02, 0x95, 0x03, 0x35, 0x1d, 0x17, 0xae, 0xf1, 0x5e, 0xde, 0x2b, - 0x8a, 0xe6, 0xef, 0x2c, 0x6f, 0xd7, 0x85, 0xd9, 0x41, 0x23, 0x52, 0x6f, 0xff, 0x5f, 0x7d, 0x98, - 0xd2, 0x09, 0x19, 0xc3, 0xe2, 0xa6, 0x09, 0x01, 0x23, 0xc8, 0x4d, 0x41, 0x49, 0x26, 0x7f, 0xd6, - 0xbf, 0x0a, 0x28, 0x03, 0xfa, 0x2d, 0x5c, 0x53, 0xe3, 0x4f, 0xff, 0x85, 0x54, 0x08, 0x4d, 0x7a, - 0x6f, 0xff, 0xeb, 0x14, 0xa0, 0x46, 0xa6, 0x92, 0xc8, 0xcc, 0x3f, 0xc5, 0xd8, 0xe9, 0x4b, 0x22, - 0xa6, 0x18, 0x44, 0x01, 0xb9, 0x1c, 0x9f, 0x4f, 0xff, 0xcb, 0x0a, 0x23, 0x00, 0x8e, 0xe1, 0x73, - 0xb2, 0x76, 0x9a, 0x76, 0xfb, 0x7d, 0x36, 0xf0, 0x99, 0x20, 0x06, 0x0f, 0xa6, 0x5b, 0x3e, 0x7f, - 0xa7, 0xa7, 0xf1, 0x4c, 0xe0, 0x8c, 0xd5, 0x2f, 0x04, 0x77, 0xbc, 0x71, 0x8f, 0xe0, 0x10, 0x10, - 0x3c, 0x05, 0x09, 0x8a, 0xdd, 0x45, 0xe2, 0xee, 0xf7, 0x78, 0xad, 0xc7, 0x77, 0x01, 0x00, 0x18, - 0x04, 0x77, 0x8a, 0xdc, 0x77, 0x62, 0x59, 0xca, 0x7e, 0x25, 0x40, 0xab, 0xe9, 0xf0, 0xb4, 0x80, - 0x12, 0xfd, 0x2a, 0x73, 0xef, 0x7d, 0x3f, 0xc3, 0xac, 0x80, 0x0c, 0xe0, 0x06, 0x2a, 0xad, 0xe0, - 0x23, 0x7a, 0xad, 0xcb, 0xdb, 0xf7, 0x74, 0xe3, 0x4c, 0x7f, 0xf2, 0xed, 0x34, 0xd3, 0x0d, 0x5d, - 0x5d, 0xbf, 0x87, 0x70, 0x01, 0xf2, 0xa2, 0x81, 0x0b, 0x99, 0xa6, 0xc0, 0xed, 0xcd, 0xd9, 0xfd, - 0xb6, 0xd9, 0xc5, 0xb9, 0xa7, 0x2f, 0x4f, 0x91, 0x6d, 0xfe, 0x16, 0x70, 0xd6, 0x27, 0xff, 0xa7, - 0xf8, 0x9c, 0x01, 0xa3, 0xe4, 0xcc, 0x3d, 0x61, 0x88, 0x2a, 0xc5, 0x77, 0x38, 0x78, 0xef, 0xcb, - 0x74, 0x6e, 0xf7, 0x04, 0x82, 0xa1, 0x80, 0x6a, 0x00, 0xa0, 0x09, 0xb0, 0x7b, 0xde, 0x21, 0xe3, - 0x80, 0x01, 0x38, 0xef, 0xc1, 0x3c, 0x2c, 0x1a, 0x8a, 0x65, 0x9f, 0x77, 0x07, 0x81, 0xa1, 0xdc, - 0x3a, 0xa2, 0x1f, 0xb3, 0xbc, 0x94, 0xbf, 0x5a, 0xff, 0x24, 0x0f, 0x53, 0x4f, 0xf8, 0x71, 0x40, - 0x0c, 0x40, 0x0d, 0xe6, 0x6a, 0x7a, 0xad, 0xfb, 0x6f, 0x12, 0xf6, 0xdf, 0xdf, 0xa2, 0x7c, 0x56, - 0xa2, 0x76, 0xd3, 0xff, 0xc2, 0x99, 0x15, 0xb3, 0x96, 0xd7, 0xaf, 0x28, 0x64, 0xef, 0xfb, 0x65, - 0xe2, 0x0f, 0x51, 0xeb, 0x81, 0xb0, 0x03, 0x1d, 0xc2, 0x6a, 0x00, 0xc2, 0xa6, 0xfc, 0xad, 0xfb, - 0xd5, 0x97, 0xec, 0xbb, 0xcb, 0x08, 0x65, 0x40, 0x08, 0x39, 0xb3, 0x88, 0x80, 0x0d, 0x79, 0x59, - 0x2b, 0x2b, 0xdc, 0x90, 0x74, 0x07, 0xf1, 0x2f, 0x5a, 0xcc, 0xbc, 0x33, 0x80, 0x30, 0x4c, 0x34, - 0x67, 0xb7, 0x6e, 0xbf, 0x34, 0x23, 0xba, 0x76, 0x4e, 0x73, 0x07, 0x6c, 0x2b, 0x0a, 0xb8, 0x90, - 0x00, 0xce, 0xbb, 0xe4, 0x7b, 0x06, 0x77, 0xc3, 0xa4, 0x58, 0xe7, 0x86, 0x89, 0x55, 0xe5, 0xd6, - 0x19, 0xc0, 0x20, 0xb8, 0xfc, 0xf1, 0xc2, 0x3c, 0xf6, 0x05, 0xe5, 0xb9, 0x71, 0x73, 0xfb, 0xe4, - 0xa4, 0x22, 0xc2, 0x10, 0xa6, 0xc2, 0xb8, 0x06, 0xec, 0x72, 0xbb, 0x57, 0x97, 0xef, 0x64, 0x68, - 0x3a, 0x0e, 0xf7, 0xc0, 0xd2, 0x07, 0x10, 0xa4, 0x48, 0xf6, 0xcf, 0x7e, 0x2b, 0x43, 0x91, 0x83, - 0xde, 0x56, 0x02, 0xa3, 0x4c, 0x8c, 0x9f, 0xe5, 0x62, 0x47, 0x31, 0xc0, 0x78, 0x09, 0x90, 0x88, - 0x52, 0xe6, 0x05, 0x67, 0xd8, 0xce, 0xc5, 0xb1, 0xb5, 0x2d, 0xdb, 0x51, 0x1e, 0x2e, 0xce, 0x3e, - 0x38, 0x0f, 0x01, 0x23, 0x0a, 0x47, 0x54, 0xab, 0x29, 0x36, 0x8e, 0xf8, 0x97, 0x95, 0x88, 0x33, - 0xcb, 0x19, 0xe5, 0x84, 0x34, 0x32, 0x30, 0x87, 0x18, 0xe0, 0x63, 0x80, 0x38, 0x64, 0x90, 0x8f, - 0x1c, 0xd0, 0xdd, 0x9f, 0x75, 0x9a, 0x0f, 0x7d, 0x97, 0x16, 0x1a, 0x52, 0x12, 0xa5, 0xed, 0xd3, - 0x74, 0x1f, 0xf6, 0x6e, 0x2f, 0xf9, 0x61, 0x8c, 0x00, 0x60, 0x6b, 0xef, 0xe3, 0x9f, 0x6f, 0x6d, - 0xb4, 0x56, 0xe9, 0xa7, 0xf6, 0x1d, 0xc0, 0x1a, 0xae, 0xc9, 0x26, 0xd1, 0x7b, 0x2b, 0xd9, 0xc4, - 0xb0, 0x17, 0x2d, 0xa9, 0xa0, 0x2f, 0x4b, 0xbb, 0x2f, 0xc3, 0x98, 0x00, 0xec, 0x4e, 0xf3, 0x40, - 0x48, 0xd3, 0xce, 0x4a, 0x78, 0x4b, 0xd2, 0xa9, 0x53, 0x98, 0x48, 0xab, 0x79, 0x94, 0x39, 0x81, - 0x66, 0xd8, 0x12, 0x1e, 0x51, 0xdf, 0x1a, 0xce, 0xd1, 0x23, 0x45, 0xf8, 0x60, 0x90, 0x04, 0x84, - 0xd4, 0x4f, 0x0d, 0xbd, 0xe2, 0x75, 0x29, 0x97, 0x8f, 0xff, 0xf4, 0x65, 0x43, 0x2a, 0x26, 0x7b, - 0x3b, 0x60, 0xfa, 0xd5, 0x3f, 0xff, 0xac, 0x30, 0xa0, 0x02, 0xf4, 0x9c, 0x19, 0x2e, 0xe5, 0x8a, - 0xf3, 0xd1, 0x20, 0xfa, 0x78, 0xa8, 0xb6, 0xaf, 0x10, 0xc0, 0x19, 0x7a, 0xaf, 0xe2, 0x36, 0x1b, - 0x45, 0x01, 0x19, 0x6a, 0xb3, 0x0a, 0xcf, 0xd7, 0x7d, 0xed, 0xe3, 0x5e, 0xef, 0xf8, 0xb6, 0x40, - 0x05, 0xbd, 0x98, 0x44, 0x9c, 0x8a, 0xd8, 0x4d, 0xc0, 0x0c, 0xfc, 0x2f, 0x90, 0x82, 0xde, 0x75, - 0x2f, 0xdb, 0xde, 0xb5, 0xb7, 0xf0, 0x19, 0x00, 0x70, 0x04, 0x31, 0x5f, 0x1c, 0x00, 0x08, 0x47, - 0x38, 0x63, 0x04, 0xa3, 0x15, 0x1f, 0x6f, 0xff, 0x7c, 0x76, 0x6b, 0x18, 0xa2, 0xae, 0x08, 0x02, - 0x9b, 0x77, 0x9b, 0xc4, 0xfe, 0xaa, 0xf3, 0x89, 0x04, 0xa3, 0xc1, 0x88, 0x28, 0xac, 0xdf, 0x77, - 0x15, 0x8c, 0x00, 0x28, 0x77, 0x0e, 0xe0, 0x03, 0x00, 0x99, 0x16, 0xb1, 0x8d, 0xb4, 0x6e, 0x6f, - 0x37, 0xd7, 0xcb, 0xd7, 0x26, 0xf3, 0xd3, 0xbb, 0xfc, 0x32, 0x42, 0x81, 0x8c, 0xe1, 0x54, 0xef, - 0xff, 0xad, 0x5f, 0x0f, 0x61, 0x6c, 0x1a, 0xcd, 0x0f, 0xcd, 0x7e, 0xaf, 0x7f, 0xc3, 0x64, 0x83, - 0x12, 0x38, 0x7e, 0xbb, 0xdd, 0x7f, 0x75, 0xfc, 0x2a, 0xa0, 0x24, 0x12, 0xf8, 0xfe, 0xa7, 0xf6, - 0x5b, 0xa2, 0x8a, 0x95, 0x94, 0x34, 0xa1, 0x08, 0xc9, 0x7f, 0xfb, 0xec, 0x85, 0x36, 0x17, 0x50, - 0x03, 0x3e, 0x2f, 0x3c, 0x9b, 0x7e, 0xff, 0xe8, 0x99, 0x59, 0x4a, 0x98, 0x69, 0x10, 0x02, 0x00, - 0x57, 0xb1, 0x16, 0xbf, 0xdf, 0x2f, 0x55, 0xd4, 0x63, 0xf8, 0x39, 0x00, 0x90, 0x05, 0x22, 0xb1, - 0x59, 0xfe, 0x25, 0xee, 0x56, 0x58, 0xc9, 0xef, 0x96, 0xd8, 0xca, 0xcc, 0x6f, 0xf1, 0x89, 0x01, - 0xa1, 0xdc, 0x32, 0x48, 0x09, 0x97, 0xb5, 0x4d, 0x7b, 0xfd, 0xd5, 0x93, 0xba, 0x2a, 0xc2, 0xce, - 0x05, 0xdf, 0x2e, 0x57, 0xfe, 0xeb, 0xf0, 0xaa, 0x80, 0x35, 0x69, 0xa7, 0xf7, 0x8d, 0xff, 0xff, - 0x85, 0x14, 0x09, 0x44, 0x0a, 0xe7, 0x6b, 0x4d, 0x3f, 0xed, 0xa6, 0x9f, 0x15, 0x80, 0x85, 0x9b, - 0x0a, 0x4f, 0x60, 0x16, 0x00, 0x12, 0x20, 0x90, 0xf8, 0xba, 0x8e, 0x31, 0xfc, 0x22, 0x02, 0x20, - 0x11, 0x55, 0x6a, 0x3b, 0x63, 0x49, 0x04, 0x3c, 0xde, 0xb1, 0xb8, 0x38, 0x08, 0x28, 0xe0, 0xf6, - 0x30, 0x84, 0x02, 0x3a, 0x62, 0x96, 0x33, 0x08, 0x28, 0xe8, 0x91, 0x2a, 0x2a, 0xd1, 0x7e, 0x1d, - 0x50, 0x20, 0x9d, 0x93, 0x5f, 0xef, 0x7f, 0xeb, 0xbb, 0xfe, 0x00, 0xb4, 0x01, 0x80, 0x52, 0x91, - 0x30, 0x56, 0x5b, 0x37, 0x14, 0xeb, 0x17, 0x8a, 0xee, 0xeb, 0x51, 0x80, 0x2a, 0xe0, 0x09, 0xa0, - 0x1c, 0x82, 0xe8, 0xbc, 0x5d, 0x53, 0x97, 0x89, 0x78, 0xc0, 0x05, 0x46, 0x24, 0x90, 0x21, 0x62, - 0x73, 0xaf, 0x83, 0x80, 0xc0, 0x2a, 0xa9, 0xcf, 0x58, 0xde, 0xdc, 0xdd, 0x35, 0x4c, 0x42, 0x03, - 0xb0, 0xc3, 0x80, 0x40, 0xd3, 0x0d, 0x4a, 0xb9, 0x5d, 0x5e, 0xec, 0x9c, 0x46, 0x14, 0x9d, 0xf1, - 0xfb, 0x0e, 0x7c, 0x2f, 0xb0, 0xd2, 0x80, 0x11, 0x16, 0xce, 0x5d, 0x74, 0xac, 0xac, 0x9d, 0xb0, - 0xb8, 0xf7, 0x65, 0xec, 0xae, 0xcb, 0xd8, 0x5d, 0x40, 0x63, 0x20, 0x67, 0x6d, 0x91, 0xe0, 0xac, - 0x8e, 0xc2, 0xd5, 0xf0, 0x17, 0x7c, 0x25, 0xf7, 0xec, 0x26, 0xe0, 0x26, 0xb5, 0x20, 0x29, 0xa1, - 0xef, 0x45, 0xbd, 0xf5, 0x7b, 0xe1, 0x3c, 0x02, 0x08, 0xec, 0xb2, 0x5e, 0xf6, 0x54, 0x94, 0xd0, - 0xbb, 0xb8, 0x8c, 0x25, 0x90, 0xa5, 0x81, 0xe4, 0x04, 0xc0, 0x2a, 0xe5, 0xf9, 0xc0, 0x3c, 0x2e, - 0x0a, 0x85, 0x95, 0xad, 0xac, 0x49, 0xf9, 0x78, 0xe0, 0x00, 0x5e, 0x3b, 0x85, 0x14, 0x02, 0x37, - 0xaf, 0xdc, 0xf3, 0xef, 0x36, 0x2e, 0x87, 0x74, 0x6d, 0x67, 0x98, 0xac, 0xef, 0xa4, 0x49, 0x8b, - 0x92, 0xa9, 0x1c, 0x32, 0xa1, 0x80, 0x53, 0x15, 0x1a, 0xfd, 0x7e, 0xaa, 0x3b, 0x61, 0x6c, 0x02, - 0x47, 0xaf, 0x46, 0xa7, 0xba, 0x29, 0x60, 0xfe, 0x2b, 0x8a, 0xe1, 0x72, 0x40, 0x45, 0x92, 0xe2, - 0x04, 0x50, 0x64, 0x19, 0x06, 0x41, 0x90, 0xeb, 0x2e, 0x43, 0xe8, 0x03, 0xf8, 0x32, 0x12, 0xba, - 0xd6, 0x1a, 0x50, 0x06, 0xee, 0xfd, 0xf6, 0x23, 0xdf, 0xcf, 0xdd, 0xd5, 0x78, 0x97, 0xca, 0xfc, - 0x4a, 0xd7, 0x98, 0xe0, 0x50, 0x0c, 0x85, 0x35, 0x73, 0x30, 0x2e, 0xc6, 0x49, 0xcd, 0x0a, 0x5d, - 0x1f, 0x3f, 0x2b, 0x07, 0x85, 0x82, 0x41, 0xa1, 0x61, 0x9c, 0x0b, 0x03, 0x98, 0xe0, 0x0e, 0x14, - 0x24, 0x07, 0xef, 0x9c, 0x86, 0xb6, 0x34, 0x52, 0xe8, 0x86, 0x31, 0xe7, 0x35, 0x54, 0x42, 0xf0, - 0xa2, 0x81, 0x2b, 0x52, 0x90, 0x7d, 0xdd, 0x6d, 0xee, 0xb5, 0xbd, 0xe1, 0x77, 0x00, 0x33, 0xf2, - 0x15, 0xd9, 0x3e, 0xb9, 0x95, 0x55, 0xdd, 0xdd, 0x6a, 0x89, 0xf3, 0x40, 0xb6, 0x16, 0x50, 0x44, - 0xfa, 0xb7, 0x91, 0x7a, 0xff, 0xfe, 0x1d, 0xc0, 0x1d, 0x31, 0xc0, 0xc0, 0xc3, 0xfe, 0x69, 0x5e, - 0x88, 0x5d, 0xd4, 0x56, 0xe5, 0x8b, 0xce, 0x7f, 0x3f, 0x12, 0x0d, 0x2e, 0xcb, 0xf8, 0x7b, 0x00, - 0xa5, 0x4e, 0xa4, 0x30, 0xab, 0xfa, 0xf7, 0xfa, 0xb8, 0x8c, 0x07, 0x74, 0x92, 0xc6, 0x3a, 0xb8, - 0xe2, 0xfa, 0xae, 0x5f, 0xa4, 0xc5, 0xf4, 0xdf, 0xc3, 0xb8, 0x01, 0x9f, 0xc4, 0x63, 0xd6, 0x7f, - 0x75, 0xf0, 0x58, 0x61, 0x96, 0xb6, 0x64, 0x81, 0xf1, 0x1f, 0xf9, 0x6a, 0xac, 0xf1, 0x5f, 0xd2, - 0xc3, 0x6a, 0x00, 0x21, 0x95, 0x1e, 0x6b, 0x87, 0x3d, 0xff, 0x6b, 0x7c, 0xfd, 0xa1, 0x7d, 0x68, - 0xe0, 0xef, 0x1c, 0xbf, 0x4f, 0x87, 0x54, 0x00, 0x0b, 0xf1, 0xf2, 0xc7, 0xc3, 0x5c, 0x7f, 0x64, - 0x60, 0xc1, 0x66, 0x2c, 0x9f, 0xfb, 0x93, 0xca, 0x51, 0x9b, 0xf0, 0xc2, 0xb7, 0x71, 0x0d, 0x1d, - 0x03, 0x98, 0x1f, 0xef, 0xe2, 0x09, 0xa3, 0xa1, 0x85, 0x6e, 0xef, 0x6f, 0x87, 0x1c, 0x00, 0x80, - 0x8a, 0x6c, 0x60, 0xb3, 0x83, 0xe1, 0xef, 0x96, 0x59, 0x7b, 0xb7, 0x88, 0x0e, 0x88, 0x0e, 0xf2, - 0x5e, 0x15, 0xea, 0xb7, 0x59, 0xa6, 0xda, 0x85, 0x9d, 0x08, 0xfd, 0x72, 0x7f, 0xc3, 0xae, 0x00, - 0x39, 0x5a, 0x0d, 0x48, 0xe7, 0xeb, 0xb6, 0x14, 0x2c, 0x46, 0xa8, 0x9f, 0xfc, 0xb1, 0xad, 0xb1, - 0xae, 0xed, 0xb6, 0x1d, 0x0e, 0xac, 0x9f, 0xf0, 0xe2, 0x80, 0x31, 0x8c, 0xc9, 0x18, 0xdb, 0xad, - 0xf5, 0xdc, 0xff, 0x6d, 0xb4, 0xdc, 0x75, 0xff, 0x19, 0xb5, 0xfe, 0x17, 0x24, 0x00, 0xeb, 0xd1, - 0xdc, 0x83, 0xfb, 0xdd, 0x7d, 0xd5, 0xb5, 0xf3, 0xe3, 0x0c, 0x92, 0x0a, 0x64, 0x9f, 0xfe, 0xff, - 0x1d, 0x8c, 0x54, 0x30, 0x48, 0x02, 0xf4, 0xe7, 0xa3, 0xf1, 0xfd, 0x7d, 0xcd, 0x3b, 0xf3, 0xac, - 0x1c, 0xc2, 0x91, 0x2f, 0x8d, 0xfe, 0x5b, 0x76, 0x5b, 0x54, 0xe2, 0xdb, 0x63, 0x94, 0x3d, 0xe3, - 0x86, 0x38, 0xe1, 0x65, 0x00, 0x5f, 0x2e, 0xd7, 0xd2, 0x37, 0xf7, 0x7d, 0xfd, 0xe5, 0xe2, 0xee, - 0x4b, 0xe7, 0xd2, 0x18, 0x50, 0x12, 0x8f, 0xa6, 0x76, 0x25, 0xf9, 0xa1, 0xb9, 0x61, 0xb6, 0x6e, - 0xfb, 0xfb, 0x6f, 0x85, 0xc9, 0x00, 0x33, 0xad, 0x05, 0x6e, 0xdf, 0xcf, 0x96, 0x5f, 0xde, 0x39, - 0xa7, 0x6a, 0xee, 0xef, 0xac, 0x3b, 0x80, 0x18, 0x52, 0x77, 0xd6, 0x9f, 0x99, 0x5c, 0x4f, 0xf7, - 0x77, 0x4e, 0x78, 0x5d, 0x44, 0x30, 0xe4, 0xa2, 0xff, 0x0c, 0x92, 0x01, 0xad, 0xc8, 0x9c, 0xb2, - 0xab, 0x92, 0x0e, 0xc8, 0x57, 0x79, 0xc7, 0x6c, 0x38, 0xa0, 0x3b, 0x85, 0xe4, 0xc9, 0xb5, 0x2d, - 0x2f, 0xb2, 0xb2, 0xdf, 0xab, 0xff, 0x86, 0x49, 0x09, 0x18, 0x9c, 0x7a, 0xb2, 0xfd, 0xd5, 0xc5, - 0xc6, 0xab, 0xc2, 0xea, 0x02, 0x13, 0xf5, 0x39, 0xef, 0xae, 0xf7, 0x96, 0x12, 0xc2, 0x4b, 0x09, - 0xa8, 0x08, 0x50, 0xd1, 0x44, 0x02, 0xe1, 0xeb, 0xef, 0xd6, 0xaf, 0x7f, 0x01, 0x32, 0x0b, 0x34, - 0xdd, 0x62, 0xad, 0x8c, 0x6e, 0x96, 0xd6, 0x50, 0xf7, 0x8e, 0x00, 0x05, 0xe3, 0x8e, 0x16, 0x24, - 0x02, 0x11, 0x6b, 0xd9, 0x6f, 0x85, 0x72, 0xc2, 0x2b, 0x11, 0x81, 0x60, 0x5f, 0x32, 0xff, 0xc3, - 0x6a, 0x03, 0x22, 0xef, 0x82, 0xb0, 0x5e, 0xc9, 0x90, 0xaf, 0x24, 0x17, 0x8e, 0xe8, 0x8d, 0x5e, - 0xa3, 0x03, 0xf9, 0xa7, 0xfc, 0x37, 0x80, 0x18, 0x1c, 0xb3, 0xf5, 0xaf, 0x9f, 0xee, 0xe5, 0x99, - 0x6f, 0x37, 0x82, 0xb7, 0x4f, 0xf0, 0xd6, 0x31, 0x67, 0xff, 0xed, 0xf5, 0x85, 0xb0, 0x02, 0x03, - 0x75, 0xc8, 0x97, 0xef, 0x6f, 0xec, 0xbf, 0x80, 0x70, 0x04, 0x82, 0x58, 0xae, 0x2b, 0x71, 0x71, - 0x77, 0x8e, 0x37, 0x00, 0xb0, 0x02, 0x90, 0xa5, 0x57, 0x17, 0x55, 0xbe, 0x9f, 0x10, 0x3c, 0x71, - 0xb8, 0x31, 0x07, 0x20, 0xa2, 0xdd, 0xfd, 0x5c, 0xdc, 0x56, 0x3b, 0x71, 0x80, 0x29, 0xe0, 0x51, - 0x05, 0x1c, 0x4f, 0xe4, 0xf3, 0x30, 0x09, 0x00, 0x6f, 0x07, 0x00, 0xb2, 0xed, 0xa6, 0xdd, 0x6a, - 0x0f, 0xbe, 0x39, 0x17, 0x6c, 0x48, 0x1a, 0x61, 0xb2, 0x40, 0x8c, 0x66, 0xba, 0xdf, 0xaf, 0x45, - 0x24, 0x1d, 0x90, 0x96, 0x0c, 0x9f, 0x41, 0xc1, 0xf4, 0x48, 0xbf, 0xc0, 0xc0, 0x0a, 0x42, 0x9b, - 0x73, 0x71, 0x7b, 0x3d, 0xdd, 0xdf, 0xe3, 0xb8, 0x97, 0xb8, 0xe0, 0x00, 0x47, 0xe1, 0xb5, 0x01, - 0x03, 0xac, 0xd6, 0x37, 0x3f, 0xef, 0xf3, 0xcc, 0xfc, 0xbc, 0x62, 0xbd, 0x95, 0x97, 0xf8, 0x52, - 0x5e, 0x2a, 0xec, 0x1d, 0x5c, 0xbb, 0xd4, 0xd3, 0x2d, 0x93, 0x9a, 0x0a, 0xcf, 0xb0, 0x72, 0xc2, - 0x9c, 0xb1, 0x18, 0xe0, 0x00, 0x5f, 0xf0, 0x24, 0x41, 0x67, 0x15, 0x69, 0xdd, 0xdc, 0x55, 0xee, - 0x38, 0x00, 0x15, 0xf8, 0x5d, 0x40, 0x16, 0xce, 0x5c, 0x8d, 0x1b, 0xf7, 0x9e, 0x19, 0xbd, 0xe3, - 0xbf, 0xe1, 0x48, 0xa3, 0x0b, 0xaa, 0x7f, 0x92, 0x8e, 0x0f, 0x79, 0x57, 0xc5, 0x42, 0x5f, 0x12, - 0x3f, 0x46, 0x0e, 0xaf, 0x64, 0x30, 0x00, 0x0c, 0xc7, 0x70, 0xca, 0x84, 0x05, 0xae, 0x9c, 0xb5, - 0x75, 0x15, 0xc5, 0x68, 0xa1, 0x56, 0xfd, 0xf0, 0x9b, 0x80, 0x4c, 0x7c, 0xe1, 0x0c, 0xa2, 0x92, - 0x02, 0xe6, 0x84, 0xba, 0x15, 0x71, 0x75, 0xd5, 0xe1, 0x7c, 0x02, 0x55, 0xc1, 0xba, 0x1a, 0xff, - 0x7a, 0x27, 0x54, 0x42, 0xe5, 0x82, 0x24, 0x44, 0x86, 0x29, 0x92, 0xb8, 0x17, 0x2c, 0x64, 0x4c, - 0x35, 0x80, 0x1b, 0xec, 0x2b, 0x72, 0xba, 0xfa, 0xa7, 0x97, 0xb8, 0x9c, 0x2f, 0xb2, 0x2c, 0x04, - 0x98, 0x59, 0x31, 0xc5, 0xd6, 0x1a, 0x50, 0x00, 0xfb, 0x5d, 0x92, 0x0d, 0x59, 0xad, 0xff, 0x16, - 0x82, 0xe5, 0xb2, 0x52, 0xd7, 0x11, 0xe7, 0xa5, 0xc9, 0xe1, 0x24, 0x11, 0x32, 0x03, 0xb6, 0x15, - 0x70, 0x8f, 0x01, 0xce, 0x76, 0xfe, 0x59, 0x3e, 0xdf, 0x5a, 0xef, 0x15, 0x8b, 0xc2, 0xdd, 0x21, - 0x60, 0x16, 0x10, 0x1b, 0x01, 0x4b, 0xb6, 0x5f, 0x88, 0x58, 0x6f, 0x6d, 0xac, 0x17, 0xe3, 0x6f, - 0x18, 0xa1, 0xf6, 0x07, 0x00, 0x02, 0xf1, 0xdc, 0x2f, 0x81, 0x28, 0xbc, 0x40, 0x40, 0xa9, 0x70, - 0xb1, 0x77, 0x25, 0x1f, 0xeb, 0x5a, 0xe1, 0x90, 0x10, 0x01, 0x4b, 0xb9, 0x4b, 0xa1, 0x2e, 0x83, - 0xee, 0x5b, 0x12, 0x3e, 0xdf, 0xa7, 0x87, 0x8f, 0xb9, 0x67, 0x1d, 0xf0, 0xb9, 0x51, 0xf1, 0xc0, - 0x70, 0xbb, 0x80, 0xcb, 0x6c, 0xa3, 0x00, 0x5f, 0xff, 0xfa, 0x5f, 0x2c, 0xd9, 0xad, 0x60, 0xc5, - 0x60, 0xef, 0x17, 0x82, 0x45, 0x73, 0x24, 0x1f, 0x58, 0x65, 0x40, 0x02, 0x5a, 0x4e, 0x70, 0x03, - 0x59, 0xb1, 0xbf, 0x85, 0x64, 0x82, 0x90, 0xe4, 0xee, 0x8e, 0x86, 0xe8, 0x44, 0xbe, 0x4f, 0x1f, - 0x25, 0xf1, 0x75, 0xec, 0x26, 0xa0, 0x00, 0x5d, 0x54, 0x87, 0x71, 0x5d, 0xb7, 0xed, 0xc5, 0x6c, - 0x96, 0x89, 0xc5, 0x1b, 0x89, 0x60, 0x68, 0xb6, 0x0e, 0x89, 0x63, 0x85, 0xd4, 0x01, 0x8d, 0x49, - 0x0e, 0xa3, 0x75, 0x99, 0xa1, 0xb1, 0xa2, 0x24, 0x1d, 0x0c, 0xd1, 0x6c, 0xa5, 0x56, 0x16, 0xc0, - 0x0e, 0x51, 0x54, 0x61, 0xb2, 0xb4, 0x51, 0x38, 0x16, 0x05, 0xea, 0xe4, 0x85, 0xd8, 0xbc, 0x1f, - 0x42, 0x19, 0x50, 0x0e, 0xb3, 0xc8, 0x9b, 0xff, 0xd7, 0x4d, 0x3c, 0x89, 0x85, 0xf0, 0x13, 0x03, - 0xb6, 0x01, 0x4d, 0xaf, 0x3c, 0x3b, 0xde, 0xe6, 0x85, 0xcb, 0x21, 0xc6, 0xc2, 0xd8, 0x01, 0x80, - 0x79, 0x66, 0x0d, 0x1d, 0xf6, 0x29, 0xe8, 0x48, 0x79, 0xff, 0xcf, 0x73, 0x50, 0x48, 0xf2, 0x43, - 0xa4, 0x3c, 0xa0, 0x0d, 0xe9, 0xc3, 0xf4, 0xe5, 0xdb, 0xf0, 0xec, 0x30, 0x7d, 0x07, 0x6e, 0x91, - 0x6b, 0x5a, 0xa4, 0x17, 0xed, 0xbe, 0x24, 0x49, 0xa7, 0xfc, 0x30, 0x48, 0x00, 0x6a, 0x77, 0x4c, - 0xe8, 0xb3, 0x5c, 0xe3, 0xf9, 0xd4, 0xcf, 0x74, 0x1b, 0x02, 0x6e, 0x22, 0x9d, 0x56, 0xe1, 0x66, - 0x9c, 0x7e, 0x30, 0xf2, 0x80, 0x4f, 0x0e, 0xf8, 0xa9, 0x5e, 0x44, 0x5b, 0x27, 0x70, 0x7b, 0x49, - 0x85, 0x37, 0xd3, 0x2f, 0x2f, 0x5b, 0xa0, 0xf3, 0x95, 0xaf, 0xe1, 0xa5, 0x00, 0xff, 0x4b, 0x24, - 0x67, 0xec, 0x2d, 0xc6, 0x58, 0xd5, 0x4f, 0x69, 0x66, 0x17, 0x74, 0x9a, 0x57, 0x11, 0xf1, 0x1e, - 0x35, 0x5f, 0x03, 0x40, 0x08, 0x10, 0xa4, 0xf7, 0x09, 0x9a, 0x6d, 0xe7, 0x83, 0xce, 0x7d, 0x9c, - 0xb0, 0xf2, 0x7b, 0xe5, 0x0d, 0xac, 0x97, 0x9f, 0xe3, 0x86, 0x38, 0xf0, 0x11, 0x20, 0xc0, 0x29, - 0xcf, 0xd8, 0xdf, 0xe5, 0x65, 0x60, 0xf7, 0xb8, 0x5f, 0x46, 0xf3, 0xfc, 0xa7, 0xa0, 0xe1, 0x8e, - 0xe1, 0x75, 0x10, 0x0f, 0x63, 0xe5, 0xd2, 0xf7, 0x47, 0xfb, 0xbe, 0x0e, 0xaf, 0xbe, 0x13, 0xc2, - 0x40, 0xb2, 0x23, 0x27, 0xaf, 0xac, 0x5f, 0xf0, 0xaa, 0x80, 0x8d, 0x24, 0xb3, 0xb3, 0xe1, 0xc9, - 0x07, 0x2f, 0x77, 0xfb, 0xaa, 0x8b, 0x8b, 0xc2, 0xae, 0x00, 0xc1, 0x4c, 0x38, 0x90, 0x47, 0xd5, - 0x45, 0xf4, 0x4c, 0xa9, 0x42, 0x8b, 0xe2, 0xb1, 0x78, 0xbd, 0x61, 0x9c, 0x00, 0x7c, 0x82, 0xb2, - 0x2e, 0x45, 0x47, 0x7d, 0x63, 0xe2, 0x1e, 0x2f, 0x6e, 0xe2, 0x1e, 0x5e, 0x73, 0xd9, 0x4d, 0xed, - 0x92, 0x8a, 0xef, 0x85, 0xd4, 0x03, 0x3b, 0x32, 0x15, 0x97, 0x0f, 0xff, 0x9b, 0x51, 0x5c, 0xaa, - 0xab, 0x22, 0xc2, 0x8a, 0x4d, 0x05, 0x74, 0x2b, 0x0a, 0x28, 0x01, 0x1b, 0x23, 0x92, 0x9b, 0xbf, - 0xe5, 0xec, 0xa7, 0xe4, 0x83, 0xe4, 0x9d, 0x1b, 0x8a, 0xf0, 0xde, 0x00, 0x4d, 0xd6, 0x11, 0x75, - 0x57, 0x7f, 0x59, 0x71, 0x71, 0x59, 0x21, 0x27, 0x60, 0x7e, 0x02, 0xe2, 0x8e, 0x0f, 0x70, 0x2f, - 0x2f, 0x74, 0x24, 0x63, 0x55, 0xd5, 0xfe, 0x16, 0xc0, 0x1c, 0x8a, 0xc4, 0x58, 0xf8, 0xf0, 0x2c, - 0x1f, 0x08, 0x52, 0xc2, 0x58, 0x3e, 0x1b, 0xe1, 0xbd, 0xe1, 0xa7, 0x01, 0x8b, 0x8a, 0x7a, 0xfb, - 0xf4, 0xcb, 0xf6, 0x56, 0x4a, 0xff, 0xff, 0x09, 0xa8, 0x01, 0xb3, 0x20, 0x8f, 0x1e, 0x8e, 0x17, - 0x39, 0x20, 0xca, 0xe8, 0x65, 0x83, 0x23, 0x98, 0x4a, 0x22, 0xf1, 0x9b, 0x90, 0xd6, 0x00, 0x73, - 0x43, 0x91, 0xe0, 0x6d, 0x4c, 0xf4, 0x5b, 0xdd, 0x17, 0x7b, 0xf5, 0x85, 0xf0, 0x46, 0x60, 0x63, - 0xd7, 0x28, 0xa8, 0xb6, 0x4e, 0xcb, 0x7b, 0xbb, 0xe2, 0xc2, 0xea, 0x00, 0x4d, 0x78, 0xd6, 0x55, - 0xae, 0xb4, 0x23, 0x09, 0x0f, 0xad, 0x27, 0x55, 0x97, 0x26, 0x45, 0x89, 0xfa, 0x55, 0xc5, 0x3a, - 0xc2, 0xb8, 0x04, 0x8e, 0xbc, 0xc3, 0xff, 0x9c, 0x2f, 0xf5, 0x8e, 0xe9, 0x7d, 0x14, 0x3d, 0x80, - 0x1b, 0xed, 0xb4, 0x69, 0xfa, 0xf8, 0xad, 0xe5, 0xd0, 0xd2, 0x36, 0xd2, 0xae, 0xae, 0xd8, 0x1b, - 0xe3, 0xba, 0x4f, 0xd9, 0x7e, 0x19, 0xc0, 0x11, 0xe3, 0x6c, 0xd2, 0x0b, 0x8a, 0xf3, 0xd2, 0x10, - 0xbc, 0x9a, 0x77, 0x77, 0xb1, 0x73, 0x87, 0xad, 0x83, 0x71, 0x87, 0x94, 0x04, 0x46, 0xb0, 0x8e, - 0x77, 0x05, 0x75, 0x7a, 0x4a, 0xba, 0x3c, 0xa6, 0x5a, 0x4f, 0x51, 0xb2, 0xcb, 0xff, 0x87, 0x09, - 0x00, 0x24, 0x0f, 0xb5, 0x98, 0x2f, 0x08, 0xae, 0x3c, 0x22, 0x58, 0x16, 0xb4, 0xf1, 0xfd, 0x2c, - 0xe6, 0x96, 0x27, 0xdc, 0xed, 0x2b, 0xd7, 0x5f, 0xc3, 0x44, 0x80, 0x20, 0xf3, 0xb1, 0x50, 0xbf, - 0x7d, 0x57, 0x72, 0x76, 0xf5, 0xf1, 0x6f, 0x30, 0xe9, 0x20, 0x09, 0x47, 0x6c, 0x1c, 0xbf, 0xcc, - 0x21, 0x81, 0x2f, 0x01, 0x57, 0x07, 0x61, 0x4b, 0xa5, 0x38, 0x60, 0x76, 0x02, 0x8c, 0xbf, 0xe6, - 0xa5, 0x82, 0x19, 0x60, 0xd6, 0x3e, 0x1b, 0x24, 0x02, 0x7a, 0xb3, 0x41, 0xa7, 0xcf, 0x15, 0xad, - 0x13, 0x2b, 0x8b, 0xc5, 0xdd, 0x45, 0x62, 0xe3, 0x47, 0xd1, 0x61, 0x2f, 0xf0, 0x2c, 0x85, 0x25, - 0xe2, 0x1e, 0x2e, 0x73, 0xd8, 0xee, 0x8d, 0xd4, 0x7f, 0xd4, 0x7f, 0xeb, 0x8e, 0xdc, 0x1e, 0xb8, - 0xc0, 0x00, 0x2e, 0xbe, 0x0e, 0x40, 0x54, 0x05, 0x2a, 0x4e, 0x96, 0x1d, 0x16, 0xa0, 0xeb, 0xe1, - 0xd4, 0xa8, 0x3b, 0xf1, 0x5b, 0x9e, 0x3d, 0xfc, 0xfb, 0x03, 0xbf, 0x2f, 0x39, 0x60, 0x70, 0x00, - 0x33, 0x1d, 0xc3, 0xce, 0x00, 0x5e, 0xbb, 0xc4, 0x8f, 0xf1, 0xbf, 0xef, 0xac, 0xbf, 0x5a, 0xaa, - 0xab, 0x29, 0x73, 0x42, 0x4f, 0xc2, 0x13, 0xe5, 0x84, 0xb0, 0xf8, 0x69, 0x40, 0x45, 0x72, 0xa6, - 0x5a, 0xf9, 0x16, 0x31, 0x73, 0xc2, 0x6f, 0xd2, 0xad, 0x71, 0x5b, 0xe1, 0x72, 0x40, 0x48, 0x87, - 0x34, 0x59, 0xd6, 0xbd, 0xfa, 0xe2, 0xb8, 0xad, 0x4b, 0x5b, 0x37, 0xc3, 0x4a, 0x00, 0x55, 0xfd, - 0x72, 0x06, 0x23, 0xdd, 0x82, 0x1a, 0x1f, 0x80, 0xa3, 0x9b, 0x57, 0xeb, 0x6f, 0xc6, 0xec, 0x30, - 0xa0, 0x20, 0x06, 0x23, 0x80, 0xa5, 0x97, 0xba, 0x8a, 0xff, 0x45, 0x2c, 0x14, 0x76, 0xc2, 0xca, - 0x19, 0x05, 0x52, 0xf7, 0x5a, 0xae, 0xae, 0xaf, 0x85, 0x89, 0x01, 0x11, 0xcd, 0xe9, 0x05, 0xed, - 0xfe, 0xcf, 0x09, 0xe0, 0x58, 0x4c, 0x25, 0x77, 0x40, 0x43, 0x02, 0xcf, 0xf0, 0xc1, 0x20, 0xb3, - 0xa7, 0x1f, 0xea, 0xf7, 0xfa, 0xe0, 0x28, 0x03, 0x20, 0xae, 0xa4, 0xf2, 0x77, 0x67, 0x78, 0xe2, - 0xb7, 0x15, 0x8e, 0x00, 0x06, 0x63, 0xb8, 0x57, 0x00, 0x3b, 0xee, 0xc5, 0x4f, 0xd5, 0x7d, 0x54, - 0x56, 0x3b, 0xa1, 0xcc, 0x1d, 0x5d, 0x4b, 0x6d, 0x83, 0xdc, 0x27, 0x80, 0x36, 0x37, 0x8b, 0x2b, - 0xdd, 0x5b, 0x0c, 0xe6, 0x1a, 0xd4, 0xe6, 0x16, 0xc3, 0x0a, 0xb8, 0x04, 0xc0, 0x32, 0xd4, 0xc9, - 0xad, 0xcf, 0x07, 0xc0, 0xf0, 0xf1, 0x18, 0x39, 0x7b, 0xe8, 0xbf, 0x00, 0xb0, 0x00, 0xe9, 0x1b, - 0x14, 0x6c, 0x6e, 0x3d, 0x4b, 0x15, 0xb5, 0x82, 0x8f, 0x47, 0x2f, 0x71, 0x78, 0xce, 0x58, 0x53, - 0x96, 0x02, 0x51, 0x80, 0x31, 0xc7, 0x10, 0xf9, 0xe9, 0xfe, 0x1d, 0x89, 0xe9, 0xe3, 0xca, 0xea, - 0x16, 0xf1, 0x3e, 0xc6, 0x7f, 0xc5, 0x2c, 0x66, 0x60, 0x3a, 0x48, 0x70, 0x1e, 0x21, 0xff, 0x85, - 0xdc, 0x00, 0xab, 0xa0, 0xa5, 0xa4, 0xbe, 0xf6, 0xab, 0xad, 0x56, 0xb5, 0x1e, 0xd2, 0x5f, 0x0d, - 0x12, 0x00, 0x63, 0x92, 0xa8, 0xdf, 0xe4, 0xe2, 0xe2, 0xb2, 0x43, 0x7b, 0xf7, 0x65, 0xbc, 0xb0, - 0xce, 0x01, 0x33, 0x56, 0x15, 0x15, 0x12, 0x3f, 0x89, 0x0e, 0x9e, 0x49, 0x8d, 0x61, 0xfd, 0xb1, - 0xb6, 0x45, 0xb6, 0x4f, 0x09, 0xd1, 0x65, 0x85, 0x09, 0x00, 0xf3, 0xd6, 0xa2, 0x05, 0x7b, 0xed, - 0x8c, 0x63, 0x0a, 0x12, 0xa2, 0x6e, 0xf7, 0x44, 0xc8, 0x90, 0xa5, 0x0b, 0x28, 0x03, 0x1f, 0x1f, - 0x84, 0xd7, 0xdc, 0x3d, 0x24, 0x42, 0x70, 0x97, 0xcd, 0x02, 0xc3, 0xb7, 0x72, 0xf9, 0x3c, 0x2e, - 0xe0, 0x03, 0x1f, 0x91, 0x92, 0x60, 0xd0, 0xff, 0xd7, 0x8a, 0xc9, 0x06, 0xcb, 0x90, 0xae, 0x21, - 0x81, 0x20, 0x5b, 0x6c, 0x6e, 0xd9, 0x77, 0x07, 0x21, 0x90, 0xa4, 0x7b, 0xe5, 0xb6, 0xfb, 0x8d, - 0xd1, 0x6b, 0x8c, 0x56, 0x35, 0x82, 0x67, 0x1d, 0x64, 0x60, 0x70, 0xc7, 0x07, 0x0a, 0xb8, 0x07, - 0xbb, 0x48, 0xd4, 0x52, 0xf4, 0x8f, 0xe0, 0x94, 0x8e, 0xb6, 0xd3, 0x4d, 0x96, 0x5b, 0xdb, 0x6f, - 0x04, 0x00, 0x40, 0x0a, 0x5d, 0xc4, 0xbf, 0x74, 0xd5, 0x32, 0xdb, 0x73, 0xf9, 0x7d, 0xc7, 0x3f, - 0x0d, 0x28, 0x03, 0x03, 0x47, 0x32, 0x13, 0xbc, 0xf7, 0x97, 0x5a, 0xdd, 0xc5, 0xe2, 0x7d, 0xf8, - 0x0c, 0x80, 0x1b, 0x21, 0x4c, 0x43, 0xe9, 0x8a, 0xf9, 0x98, 0xcb, 0x5d, 0xdd, 0x31, 0x58, 0xe0, - 0x63, 0xb8, 0x4f, 0x00, 0xcd, 0xd2, 0x2b, 0xab, 0xad, 0x5d, 0x59, 0x7f, 0x0a, 0xa8, 0x25, 0xd8, - 0x19, 0x74, 0xbe, 0x68, 0x5a, 0x9f, 0xdd, 0x51, 0x0b, 0xd2, 0x34, 0x2e, 0x1d, 0xc0, 0x0c, 0x74, - 0x6e, 0x89, 0xe8, 0x27, 0xfa, 0xc9, 0xdd, 0x62, 0xff, 0x63, 0x7b, 0xfc, 0x2e, 0xe2, 0x02, 0x88, - 0xdf, 0x73, 0xa4, 0xef, 0x85, 0xe7, 0x86, 0xef, 0xd1, 0x51, 0x4b, 0x82, 0x10, 0x30, 0x02, 0x9c, - 0x56, 0xaf, 0x97, 0x6e, 0x98, 0x8f, 0xce, 0xf8, 0xe1, 0x8e, 0x38, 0x5f, 0x22, 0x91, 0x41, 0xf2, - 0x14, 0x96, 0xab, 0x5c, 0x5d, 0xc5, 0xd6, 0xa5, 0x87, 0x61, 0x6c, 0x11, 0x84, 0x9d, 0xd1, 0xef, - 0xd7, 0xd5, 0x7c, 0x37, 0x80, 0x84, 0xd9, 0xaa, 0x4f, 0xc4, 0x34, 0xd6, 0xa5, 0x8d, 0x45, 0x1b, - 0x6b, 0x7f, 0xe1, 0x77, 0x00, 0x2a, 0xfa, 0x16, 0x5d, 0xe3, 0xe2, 0xc1, 0x90, 0x79, 0xb9, 0xe1, - 0x72, 0x43, 0xb6, 0xcf, 0xdf, 0xef, 0x86, 0x70, 0x01, 0x9d, 0xde, 0xb8, 0x3a, 0x47, 0xfa, 0x8d, - 0xcb, 0x6f, 0x8d, 0xa8, 0xae, 0xe5, 0xb4, 0x58, 0xbd, 0xdf, 0x1c, 0xc3, 0x04, 0x80, 0x0f, 0xaf, - 0x86, 0xdb, 0xba, 0x7f, 0xf9, 0xea, 0x2e, 0xac, 0x96, 0x94, 0xf0, 0x8a, 0xee, 0x6f, 0x6e, 0xf6, - 0x54, 0xc3, 0x4a, 0x02, 0x83, 0x0b, 0x4b, 0x1d, 0x1a, 0xaf, 0x96, 0x0a, 0x37, 0x89, 0x54, 0x6a, - 0xfa, 0xd4, 0x59, 0x61, 0xc2, 0x40, 0x12, 0x99, 0x85, 0xcb, 0x43, 0xf1, 0xbc, 0x83, 0xf8, 0x49, - 0x0a, 0x48, 0x9f, 0x06, 0x42, 0xb9, 0x33, 0x88, 0x57, 0x96, 0xff, 0xc3, 0x2e, 0x04, 0x0d, 0x35, - 0x87, 0x0a, 0x2d, 0x75, 0x77, 0x77, 0x59, 0xa0, 0x78, 0x3f, 0x2c, 0x3b, 0x09, 0xe0, 0x04, 0xff, - 0xe2, 0xb6, 0x47, 0x7b, 0xac, 0xf1, 0xaf, 0x65, 0xd1, 0x77, 0x85, 0xf0, 0x08, 0x44, 0x7e, 0x04, - 0xf3, 0xcd, 0x3e, 0x21, 0x83, 0x23, 0x41, 0xec, 0x3a, 0x0b, 0xee, 0x16, 0x07, 0xe0, 0xd8, 0x3a, - 0x12, 0xbd, 0x3e, 0x56, 0xd8, 0xd6, 0x1e, 0x70, 0x01, 0xfa, 0x1f, 0xb5, 0x49, 0x16, 0xbb, 0xee, - 0xd4, 0x7b, 0x4b, 0x2c, 0xdb, 0x03, 0xc2, 0xe9, 0x58, 0xa7, 0x88, 0xc0, 0x4b, 0xcb, 0xcf, 0x1f, - 0x32, 0xd7, 0xf8, 0x5b, 0x01, 0x0a, 0x46, 0xfc, 0xb9, 0x4c, 0x90, 0x51, 0x58, 0xb9, 0xe1, 0xca, - 0xcd, 0x0a, 0x57, 0x47, 0xe1, 0x4a, 0xa5, 0x2e, 0xda, 0xcc, 0xb6, 0x0e, 0x7e, 0x37, 0x42, 0xec, - 0xfd, 0xdc, 0x56, 0x5a, 0xed, 0xb9, 0xf8, 0xe0, 0x00, 0x4e, 0x38, 0x38, 0x65, 0xc0, 0x18, 0x9e, - 0x33, 0xfc, 0xc2, 0x7e, 0x7d, 0x6d, 0xde, 0x27, 0xe3, 0x9a, 0x7d, 0xf0, 0x52, 0xd8, 0xc7, 0x70, - 0x07, 0x00, 0x19, 0x0a, 0x63, 0x3f, 0x3b, 0xee, 0x3a, 0x5d, 0x64, 0xe3, 0xf1, 0xc9, 0x77, 0xdd, - 0xc7, 0x00, 0x02, 0xff, 0x80, 0x3f, 0x10, 0x1d, 0x00, 0xb3, 0x6c, 0xcc, 0x5d, 0xb7, 0x2b, 0x03, - 0xef, 0x97, 0x6d, 0x8c, 0x00, 0x03, 0x31, 0xc7, 0x0c, 0xe0, 0x33, 0xdc, 0xaf, 0xbf, 0x5d, 0x6b, - 0x27, 0xfa, 0x35, 0x12, 0xfb, 0x8b, 0x8a, 0xcf, 0x7c, 0x15, 0xc4, 0xbc, 0xbe, 0x26, 0xc4, 0x2d, - 0xa1, 0x39, 0x66, 0xf7, 0x9d, 0x92, 0xec, 0x9f, 0x41, 0xc0, 0x00, 0xcc, 0x77, 0x09, 0x92, 0x02, - 0x27, 0x6a, 0x9b, 0x7e, 0x68, 0x7e, 0x68, 0x39, 0xa0, 0xf8, 0x60, 0x41, 0x85, 0x2b, 0x58, 0xa3, - 0x73, 0xfa, 0xd7, 0xac, 0x1d, 0x5d, 0x33, 0xfc, 0x70, 0x00, 0x37, 0x1c, 0x78, 0x29, 0x0c, 0x85, - 0x30, 0x7f, 0xe5, 0xf5, 0x8b, 0x96, 0xb5, 0x4d, 0xbe, 0x36, 0xf7, 0xfd, 0xfe, 0x38, 0x00, 0x1b, - 0x8d, 0x1c, 0x30, 0xa0, 0x02, 0x97, 0xd8, 0xb5, 0xeb, 0x0b, 0x4b, 0x35, 0x2d, 0x97, 0xb9, 0xa1, - 0xf6, 0x5b, 0xe1, 0x35, 0x00, 0xe7, 0xad, 0xd0, 0x62, 0x7b, 0xf6, 0xdd, 0x5d, 0x72, 0x78, 0xb8, - 0xad, 0x65, 0xec, 0x94, 0xf0, 0xc0, 0x18, 0x44, 0x29, 0x17, 0x55, 0x93, 0x1a, 0x23, 0x15, 0x26, - 0xbd, 0xb1, 0x0b, 0x0d, 0xb7, 0xb6, 0x38, 0x00, 0x19, 0x8e, 0xe1, 0x52, 0x42, 0x3c, 0x34, 0x53, - 0x8f, 0x83, 0xb0, 0x64, 0xab, 0x14, 0xa2, 0xb7, 0x72, 0xf8, 0xbb, 0x96, 0x1f, 0x86, 0x54, 0x01, - 0x3a, 0x66, 0xfc, 0x93, 0xb7, 0xa2, 0x6c, 0x4b, 0xe6, 0x29, 0xc5, 0xdc, 0x5c, 0x56, 0x29, 0xb8, - 0x9c, 0x1c, 0xfc, 0x3b, 0x09, 0xe0, 0x21, 0x4c, 0xc1, 0x40, 0x25, 0xa2, 0xb2, 0x9a, 0x0b, 0xe5, - 0x81, 0x79, 0x6c, 0x5e, 0x8b, 0xc0, 0x16, 0x84, 0x29, 0x14, 0x00, 0x62, 0x5e, 0x28, 0x0d, 0xfd, - 0x76, 0x78, 0x76, 0x15, 0xca, 0x31, 0x5f, 0x27, 0x1c, 0x45, 0xc7, 0xdc, 0xe5, 0x91, 0xc8, 0xb8, - 0xe0, 0x00, 0x5e, 0x3b, 0x85, 0x70, 0x06, 0xa8, 0xe2, 0xa1, 0x67, 0xd2, 0xae, 0x2e, 0xef, 0x15, - 0xd8, 0x9c, 0x33, 0x42, 0x17, 0x78, 0x6f, 0xae, 0x18, 0x70, 0x19, 0x4a, 0x85, 0x63, 0x4b, 0xf9, - 0xfc, 0xbf, 0x46, 0xf3, 0xf5, 0xd1, 0x5d, 0xfe, 0x6d, 0x4a, 0x9c, 0x06, 0x84, 0x29, 0x14, 0x18, - 0xa3, 0x12, 0xfa, 0x85, 0x66, 0xf5, 0x57, 0x43, 0x8f, 0x83, 0x2c, 0xd5, 0x62, 0x7c, 0x70, 0x00, - 0x2f, 0x1d, 0xc3, 0x58, 0x13, 0x59, 0x31, 0xab, 0x8d, 0xa8, 0x4a, 0xba, 0xb8, 0xbe, 0xb7, 0x12, - 0x7b, 0xba, 0x0f, 0xc0, 0x50, 0x42, 0x91, 0x47, 0x12, 0x3c, 0xdc, 0x56, 0x7f, 0x1b, 0xfd, 0x97, - 0xe6, 0xeb, 0xca, 0x63, 0x80, 0x01, 0x98, 0xee, 0x17, 0xc0, 0x18, 0x03, 0xc1, 0xfb, 0x47, 0xf7, - 0xfb, 0x9a, 0x08, 0x9d, 0x0e, 0x2b, 0x96, 0x03, 0xb4, 0x1b, 0x07, 0xc0, 0xb6, 0xba, 0xff, 0x0b, - 0xa8, 0x01, 0xb8, 0xe1, 0x59, 0xe5, 0x11, 0xb6, 0x56, 0x5a, 0xcd, 0x07, 0x65, 0x64, 0x68, 0x32, - 0x66, 0x3b, 0xc1, 0x90, 0xac, 0x2a, 0xa0, 0x07, 0x46, 0xce, 0x27, 0x86, 0xb9, 0x59, 0x44, 0x3e, - 0x8a, 0x89, 0x4b, 0x72, 0x2b, 0xd9, 0x61, 0x85, 0x00, 0x30, 0x74, 0x36, 0x56, 0xbe, 0xeb, 0x39, - 0x79, 0x7b, 0xa1, 0xf4, 0xee, 0xb1, 0x75, 0xcb, 0x0b, 0x12, 0x02, 0xc2, 0xa1, 0xbd, 0x5d, 0xef, - 0x35, 0x7b, 0xdd, 0x5c, 0xd0, 0xb8, 0x58, 0x90, 0x14, 0x06, 0x2c, 0x17, 0x62, 0xb2, 0xee, 0xe7, - 0x87, 0xde, 0xf0, 0xb1, 0x20, 0x24, 0xe4, 0x22, 0xa7, 0x63, 0x2f, 0xba, 0xbf, 0xab, 0x8b, 0xe1, - 0x65, 0x00, 0x75, 0xea, 0x30, 0x29, 0xaf, 0xce, 0xfd, 0x59, 0x3b, 0x27, 0xc4, 0x04, 0x42, 0x9b, - 0x6e, 0xda, 0xea, 0xa2, 0x8d, 0xb1, 0x41, 0x9f, 0xd5, 0xdc, 0x73, 0x1c, 0x07, 0x82, 0x98, 0x52, - 0x27, 0xb6, 0x7d, 0x8d, 0x64, 0xf8, 0xa2, 0xb6, 0xd3, 0xa7, 0xa3, 0x83, 0x85, 0xd4, 0x07, 0x3b, - 0x84, 0xc5, 0x7f, 0x2b, 0x3b, 0x07, 0x2f, 0x2d, 0x9f, 0x83, 0xba, 0x05, 0xe5, 0x9b, 0x86, 0x3e, - 0x10, 0xc0, 0xb3, 0x2d, 0x8a, 0x77, 0xe1, 0x88, 0x25, 0xc2, 0x15, 0x96, 0xb5, 0x77, 0x36, 0x48, - 0xca, 0x1c, 0x07, 0x83, 0x90, 0x18, 0x20, 0xba, 0x2f, 0xdd, 0xdb, 0x15, 0xb6, 0x38, 0x63, 0xbc, - 0x10, 0x42, 0x91, 0x5b, 0xbb, 0xa6, 0xfe, 0x66, 0x1f, 0xc5, 0xb7, 0x4e, 0xef, 0x2d, 0xc7, 0x31, - 0xdc, 0x32, 0xe0, 0x1d, 0x7e, 0x1e, 0x5f, 0x9f, 0x7f, 0xed, 0x5e, 0x99, 0xfe, 0x5e, 0xbd, 0x61, - 0xd3, 0x8b, 0xb8, 0xbe, 0xf8, 0x65, 0x40, 0x20, 0xcd, 0x49, 0x3d, 0xd6, 0xf7, 0xad, 0x6f, 0xf7, - 0x5a, 0xc2, 0x98, 0x00, 0x3d, 0x42, 0xb5, 0x6c, 0x5f, 0x1c, 0xc9, 0xff, 0xac, 0xdc, 0xdf, 0xa2, - 0xbb, 0xa0, 0x21, 0xf4, 0xa1, 0x1a, 0x03, 0x58, 0x74, 0x21, 0xb7, 0x02, 0x26, 0x90, 0xfc, 0x36, - 0xe4, 0x80, 0xee, 0x95, 0xd5, 0xb4, 0x2d, 0x96, 0x37, 0x55, 0xae, 0xba, 0x25, 0xf8, 0x7b, 0x02, - 0x3c, 0x67, 0x2c, 0xf5, 0x75, 0x7d, 0x5d, 0x45, 0x6a, 0x2b, 0xc3, 0x5a, 0xfc, 0x2e, 0xe2, 0x52, - 0x48, 0x0c, 0xba, 0x3a, 0xf5, 0x7f, 0x57, 0xbd, 0xf0, 0xba, 0x80, 0x18, 0xb6, 0xe5, 0x86, 0xad, - 0xe4, 0x52, 0x43, 0xec, 0x83, 0xb2, 0x17, 0x76, 0x47, 0x85, 0x61, 0x5c, 0x05, 0x55, 0xf3, 0x57, - 0xf5, 0xbd, 0xee, 0xb5, 0x5c, 0x30, 0x04, 0x80, 0xa4, 0x50, 0x61, 0x70, 0x54, 0x43, 0xea, 0x7f, - 0x8f, 0x27, 0x44, 0xa0, 0xe3, 0x73, 0xbc, 0x5d, 0x9c, 0xf0, 0xb0, 0x77, 0x8c, 0x31, 0xdc, 0x34, - 0x48, 0x11, 0x1f, 0x31, 0xf1, 0xda, 0xe5, 0xb5, 0xdc, 0x58, 0x1f, 0x82, 0xf5, 0xa8, 0xac, 0x5e, - 0x58, 0x61, 0x40, 0x42, 0x05, 0x1d, 0x43, 0xbb, 0x96, 0xb7, 0x3f, 0xeb, 0x79, 0x60, 0xab, 0x2a, - 0xd8, 0x5d, 0x40, 0x2b, 0x3f, 0x10, 0x1b, 0xac, 0xbb, 0xf5, 0xab, 0xf8, 0xbb, 0x8b, 0x9e, 0xc2, - 0xf8, 0x04, 0x08, 0xfd, 0x4e, 0x7d, 0x72, 0xa8, 0x97, 0xaa, 0x23, 0x41, 0xcb, 0xff, 0x2c, 0x34, - 0xa0, 0x47, 0x45, 0xfd, 0xfe, 0xad, 0xd7, 0xaf, 0xba, 0xb8, 0xbd, 0x78, 0x16, 0x01, 0x4c, 0xed, - 0xac, 0xbe, 0xfd, 0x44, 0xd8, 0xee, 0x30, 0x00, 0x0d, 0xc7, 0x1c, 0x33, 0x80, 0x57, 0x68, 0x87, - 0xaa, 0x2c, 0x19, 0x0b, 0x2f, 0xe8, 0x9d, 0x5e, 0xfb, 0xe5, 0x84, 0xdc, 0x00, 0x85, 0xb3, 0x07, - 0x35, 0xe7, 0xfa, 0xf4, 0xb6, 0x48, 0x52, 0x5d, 0x59, 0x29, 0xa0, 0x2e, 0xe8, 0x36, 0x12, 0x5b, - 0x58, 0x59, 0xc0, 0x09, 0x6d, 0x44, 0xf0, 0x99, 0xdd, 0xd7, 0xbc, 0x23, 0xc3, 0xa5, 0xd6, 0x62, - 0xce, 0xfa, 0x44, 0xf6, 0x7c, 0x28, 0xa0, 0x13, 0x82, 0x36, 0x96, 0xa5, 0xf1, 0xf7, 0xc5, 0x77, - 0xd7, 0x77, 0xc3, 0x4a, 0x00, 0x44, 0x6e, 0x6e, 0x13, 0xee, 0xf5, 0xff, 0xdc, 0x9d, 0x7f, 0xb0, - 0xba, 0x82, 0x5f, 0x37, 0x4b, 0xeb, 0xf7, 0x8a, 0xcd, 0x41, 0x59, 0x67, 0xd8, 0x4c, 0x90, 0x04, - 0x54, 0xce, 0x4e, 0xd6, 0x2e, 0x2b, 0x15, 0xad, 0x10, 0xce, 0x8f, 0x99, 0xc3, 0x09, 0x57, 0x5c, - 0x2e, 0xe0, 0x06, 0x56, 0x9f, 0x26, 0xbd, 0xd7, 0x34, 0x1f, 0x07, 0xdd, 0x66, 0xaf, 0x81, 0x6e, - 0x95, 0xee, 0xf8, 0x57, 0x00, 0x23, 0x77, 0x2b, 0x07, 0x1e, 0x96, 0xd1, 0x6e, 0xfd, 0x5c, 0xf3, - 0x79, 0x3f, 0xc0, 0xe2, 0x0c, 0x42, 0x9b, 0xb6, 0x2d, 0x85, 0x06, 0xe4, 0x8e, 0xbe, 0xb2, 0x82, - 0xe0, 0xe4, 0xf9, 0xde, 0x3c, 0x7c, 0x71, 0x7c, 0xf2, 0xc9, 0x6b, 0x1c, 0xfc, 0x70, 0x00, 0x37, - 0x1c, 0x1e, 0x19, 0x0c, 0x85, 0x22, 0x1e, 0xd9, 0xe3, 0xcb, 0xe3, 0x73, 0x10, 0x7d, 0xc7, 0x5f, - 0x67, 0x2d, 0x71, 0x9b, 0xb3, 0x9f, 0xf1, 0x8e, 0x00, 0x06, 0x63, 0xbf, 0x0a, 0x5d, 0x73, 0x74, - 0x39, 0xd6, 0x2e, 0x35, 0x43, 0x8f, 0xd3, 0x15, 0x8e, 0x00, 0x06, 0xe3, 0x8e, 0x19, 0x70, 0x06, - 0x2a, 0x3a, 0x3d, 0x8f, 0x12, 0x12, 0xc8, 0x4d, 0xa8, 0x96, 0x05, 0xfa, 0x9f, 0x9f, 0xcb, 0xa9, - 0x92, 0xe0, 0x49, 0x06, 0x21, 0x48, 0xac, 0x2f, 0xa3, 0x9f, 0x62, 0x49, 0xf4, 0xdc, 0xae, 0xa1, - 0xff, 0x62, 0x1e, 0xeb, 0xd4, 0x70, 0x00, 0x2f, 0x1d, 0xc3, 0x38, 0x0c, 0xeb, 0xf6, 0x53, 0xee, - 0x63, 0x98, 0x39, 0x6d, 0xc5, 0xcb, 0x6a, 0x2b, 0x1d, 0xe7, 0x67, 0x69, 0xa8, 0xad, 0x5e, 0x2c, - 0x2e, 0xa0, 0x10, 0x7e, 0x41, 0xbe, 0x78, 0xff, 0x56, 0x4a, 0xcb, 0x8b, 0xcb, 0x09, 0xb8, 0x44, - 0xc1, 0xc4, 0xb2, 0x76, 0x4e, 0xa5, 0x84, 0xbc, 0x56, 0xa5, 0x84, 0xe8, 0xa1, 0x85, 0x00, 0x62, - 0xc0, 0xc4, 0x8a, 0xda, 0xfe, 0xd0, 0xac, 0x5d, 0xc5, 0xe7, 0x8b, 0xd2, 0xaa, 0xdd, 0xe2, 0xbb, - 0xf0, 0x24, 0x42, 0x91, 0xdf, 0xb7, 0xd6, 0x52, 0xe8, 0x2b, 0x15, 0xd8, 0xad, 0x4e, 0x78, 0xa7, - 0x1d, 0x9f, 0x22, 0x4e, 0x0e, 0x00, 0x05, 0xe3, 0xbc, 0x30, 0x20, 0x29, 0x12, 0x3e, 0xdf, 0xdb, - 0xcb, 0x19, 0xf6, 0x0b, 0x6e, 0x62, 0xbe, 0x36, 0xd4, 0xbd, 0x63, 0x80, 0x01, 0x78, 0xe3, 0xc0, - 0x64, 0x89, 0x0a, 0x45, 0x1e, 0x72, 0xc5, 0xef, 0x1d, 0xf8, 0x9b, 0x35, 0xb7, 0xcb, 0xdb, 0x71, - 0x72, 0xb0, 0x5e, 0x38, 0x00, 0x15, 0x8e, 0x3c, 0x0e, 0x10, 0x59, 0x93, 0xef, 0x7e, 0xe2, 0xb1, - 0xc0, 0x00, 0xbc, 0x71, 0xf0, 0x72, 0x14, 0xea, 0xb4, 0x32, 0xf8, 0xba, 0xc5, 0xd0, 0xd3, 0x37, - 0x4e, 0xb1, 0xc0, 0x00, 0xcc, 0x71, 0xc2, 0xf8, 0x12, 0xc8, 0x81, 0xbc, 0x6e, 0xaf, 0x09, 0xd1, - 0x6b, 0xba, 0x27, 0x45, 0xdc, 0x14, 0x42, 0x94, 0xcb, 0x58, 0xb9, 0x58, 0x06, 0x7a, 0x51, 0x8f, - 0xfd, 0x18, 0x9f, 0x29, 0xe9, 0x9c, 0xfa, 0xd8, 0xc7, 0x5f, 0x8c, 0x70, 0x00, 0x33, 0x1c, 0x70, - 0x9e, 0x02, 0x3b, 0x09, 0x64, 0x7e, 0xef, 0x3d, 0x0a, 0x12, 0x24, 0x57, 0xba, 0x24, 0x44, 0x87, - 0xf8, 0x20, 0x02, 0x80, 0x52, 0xae, 0xd8, 0x58, 0x34, 0x77, 0x39, 0xe3, 0xb7, 0x8e, 0x56, 0x2a, - 0x36, 0x4c, 0x1a, 0x16, 0xb4, 0xdf, 0xe3, 0x1c, 0x00, 0x0d, 0xc7, 0x7e, 0x14, 0x9c, 0xf3, 0xc1, - 0xfb, 0xe2, 0x83, 0x57, 0x6d, 0x33, 0xfc, 0x5c, 0x5c, 0x5c, 0x49, 0xe3, 0x80, 0x01, 0x98, 0xee, - 0x19, 0x24, 0x00, 0x8e, 0xec, 0x5f, 0xac, 0x5f, 0x6f, 0x29, 0xe8, 0x35, 0x86, 0x42, 0x45, 0xec, - 0x46, 0x0d, 0x83, 0x21, 0x0a, 0x6c, 0xb3, 0x75, 0x97, 0x02, 0x80, 0x64, 0x29, 0x10, 0xf3, 0xde, - 0xf6, 0x0b, 0x17, 0x18, 0xac, 0x1b, 0x25, 0x76, 0xbd, 0x91, 0xdb, 0x9f, 0x60, 0xb3, 0x38, 0x0f, - 0x3c, 0x2c, 0x16, 0x19, 0xe0, 0x7c, 0x47, 0x1e, 0x02, 0x26, 0x14, 0xf3, 0xfa, 0xd6, 0x21, 0x60, - 0x9e, 0xd4, 0x5c, 0x5c, 0x4f, 0xa3, 0x8f, 0x07, 0x21, 0x00, 0xa6, 0xae, 0xb4, 0xdc, 0xbf, 0x07, - 0xae, 0xef, 0xd6, 0x8e, 0x0e, 0x17, 0x70, 0x01, 0x0b, 0xb6, 0xe6, 0x87, 0xa6, 0xf3, 0xa2, 0x2d, - 0x96, 0x0a, 0xac, 0x84, 0xbb, 0x60, 0x8a, 0x13, 0x20, 0x4f, 0xc0, 0xfe, 0x07, 0xf9, 0x16, 0x61, - 0x7c, 0x04, 0x40, 0x33, 0xcf, 0xcd, 0xba, 0xf5, 0xb1, 0x38, 0x6a, 0xe2, 0x30, 0x66, 0x7f, 0xcb, - 0x0d, 0x60, 0x02, 0xfe, 0xeb, 0x07, 0x67, 0xaf, 0x7e, 0x9e, 0x88, 0xbd, 0x5d, 0x61, 0x23, 0xc4, - 0xbc, 0xf3, 0xc9, 0x8a, 0x07, 0xfa, 0xe0, 0xa0, 0x14, 0x05, 0x25, 0xd9, 0x2d, 0xc1, 0xd5, 0xc7, - 0x2b, 0xb6, 0xa3, 0x07, 0xd0, 0xa0, 0xdc, 0x3e, 0xc9, 0x55, 0xad, 0x27, 0x79, 0x94, 0x70, 0x78, - 0x66, 0x14, 0xc4, 0xb8, 0xec, 0x91, 0x2e, 0x09, 0x72, 0x66, 0x77, 0xdd, 0xd1, 0xc1, 0xc0, 0x00, - 0x00, 0x00, 0x01, 0x41, 0x9a, 0x2b, 0x15, 0xb0, 0x52, 0x04, 0x3d, 0xdd, 0xf0, 0xaf, 0x41, 0x16, - 0x89, 0xec, 0x21, 0x77, 0x68, 0x0c, 0x63, 0x50, 0x4e, 0xe4, 0x1a, 0x61, 0x95, 0x6b, 0xe8, 0x24, - 0xf0, 0x67, 0x82, 0x94, 0x3d, 0xa0, 0xdf, 0xa0, 0x8f, 0x46, 0x70, 0x44, 0x1e, 0x77, 0xfc, 0x4b, - 0xdd, 0xb6, 0xed, 0x88, 0xeb, 0xd3, 0xf6, 0x2d, 0xf5, 0x06, 0x3c, 0xa2, 0xab, 0x50, 0x45, 0xcb, - 0xd5, 0x42, 0x3d, 0x7f, 0x06, 0x9c, 0xb9, 0xe0, 0xf8, 0x21, 0xeb, 0xd0, 0xc7, 0x04, 0x56, 0xb7, - 0x7f, 0xaf, 0x45, 0xf2, 0x6a, 0xf0, 0x28, 0xf3, 0x55, 0x57, 0xeb, 0xd0, 0x3c, 0x73, 0x6a, 0xb0, - 0x41, 0xc9, 0xdd, 0xc2, 0x7d, 0x7a, 0x3b, 0x93, 0x7b, 0x83, 0x9e, 0x6c, 0x33, 0xba, 0x20, 0x8a, - 0x51, 0xfa, 0x78, 0x2c, 0xd4, 0xb9, 0x10, 0x23, 0x24, 0x3c, 0x70, 0x19, 0xb4, 0x32, 0xcf, 0x98, - 0x78, 0x3f, 0x8d, 0xf2, 0xc8, 0xba, 0xe0, 0x00, 0x13, 0xa6, 0x3c, 0x01, 0xe2, 0xdc, 0x9f, 0x45, - 0x32, 0x95, 0x18, 0xaf, 0x13, 0x5a, 0xeb, 0xd7, 0xe2, 0x05, 0xea, 0xaa, 0x90, 0xd3, 0x50, 0x63, - 0x44, 0x04, 0xb6, 0x79, 0x0d, 0xe5, 0xf5, 0x67, 0xfc, 0xd8, 0x97, 0xab, 0xc5, 0xf5, 0x78, 0x6b, - 0xaf, 0x7d, 0x60, 0xf9, 0x79, 0x32, 0x6e, 0x4c, 0x67, 0x3d, 0x6f, 0xe2, 0x41, 0x2d, 0x4c, 0x5d, - 0xf0, 0xef, 0xbd, 0xee, 0x97, 0x7c, 0xdb, 0xdf, 0xc1, 0x6f, 0xbb, 0xf1, 0x3e, 0xed, 0xff, 0x7d, - 0xea, 0x32, 0xb3, 0xe1, 0x1e, 0x0b, 0x3a, 0xf5, 0x75, 0x79, 0xb9, 0xb8, 0x9d, 0x01, 0xd5, 0x9e, - 0x3a, 0xd5, 0xa2, 0x9a, 0x70, 0x6f, 0x68, 0x8a, 0x2c, 0xd9, 0x37, 0x72, 0xfe, 0x09, 0xf9, 0xbb, - 0xb8, 0x8e, 0x09, 0x7b, 0xb6, 0xf0, 0xd5, 0x7b, 0xe2, 0x3c, 0x47, 0xef, 0x70, 0x27, 0xf0, 0x44, - 0x59, 0x7e, 0xd0, 0xaf, 0x27, 0x49, 0x41, 0xa6, 0x26, 0xb8, 0x4a, 0x2f, 0xf4, 0x8b, 0x84, 0xe4, - 0x25, 0xda, 0x84, 0x79, 0x6c, 0x7b, 0x82, 0x9e, 0x4b, 0xbe, 0x16, 0xea, 0xf1, 0x1d, 0x8b, 0xbd, - 0xc1, 0xef, 0x20, 0xa6, 0x9d, 0xb8, 0x3e, 0xeb, 0x14, 0x09, 0xfd, 0x5e, 0x1a, 0xea, 0xf3, 0x75, - 0x78, 0x20, 0xeb, 0x14, 0x23, 0xd5, 0xe1, 0xb8, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x2c, 0x16, - 0x30, 0x89, 0x73, 0x6d, 0xca, 0xc8, 0xae, 0xb3, 0xbe, 0xac, 0x3d, 0x17, 0xc4, 0xfc, 0x87, 0x5d, - 0xd7, 0x42, 0x5b, 0xe8, 0x95, 0x5d, 0x58, 0xf0, 0x87, 0xf8, 0x67, 0x86, 0x11, 0x80, 0x4a, 0xd7, - 0x79, 0xf5, 0xbd, 0x7f, 0xff, 0x4b, 0xc8, 0x31, 0xf5, 0xf0, 0x48, 0x5d, 0x12, 0xff, 0xe4, 0xe5, - 0xf3, 0x72, 0x6d, 0xd2, 0xf7, 0x48, 0x92, 0xfd, 0x65, 0x5d, 0x9f, 0x97, 0x17, 0x38, 0xae, 0xbc, - 0xff, 0xfe, 0x10, 0x09, 0xaa, 0xfa, 0xaa, 0xaf, 0xc1, 0x02, 0xbf, 0x86, 0x7f, 0xf9, 0x7a, 0x18, - 0xd3, 0x77, 0xe4, 0xc2, 0x75, 0x7f, 0xab, 0xd7, 0x2d, 0xb8, 0x51, 0xca, 0x48, 0x3a, 0x34, 0xdb, - 0xef, 0xae, 0xa5, 0xc3, 0x3f, 0x42, 0x27, 0x93, 0x94, 0xc7, 0x72, 0xa7, 0x27, 0x08, 0x72, 0x74, - 0x51, 0xef, 0x7d, 0xb4, 0xfe, 0x08, 0xb9, 0xaa, 0x86, 0xff, 0x26, 0xad, 0x7c, 0xdd, 0xd5, 0x72, - 0x15, 0xef, 0x27, 0x0a, 0x63, 0x6a, 0xd5, 0x51, 0x25, 0x6f, 0x6d, 0x26, 0xa9, 0x64, 0x88, 0x37, - 0xd5, 0xe6, 0xe8, 0xbd, 0x08, 0x74, 0x21, 0xe2, 0xba, 0x16, 0xd3, 0xf6, 0x29, 0x6b, 0xf3, 0x09, - 0xad, 0x5f, 0x76, 0xda, 0xc4, 0x44, 0x42, 0x36, 0xb7, 0x55, 0xee, 0x87, 0xf0, 0x96, 0x4c, 0xee, - 0xf7, 0xcb, 0x5a, 0x2f, 0x9b, 0xc4, 0x38, 0x61, 0x68, 0xea, 0x92, 0x5e, 0x50, 0x82, 0xd2, 0x88, - 0xec, 0xa9, 0x25, 0xfa, 0x2e, 0x53, 0x77, 0xcf, 0x92, 0x61, 0x9b, 0x18, 0x85, 0xbf, 0x45, 0xf3, - 0x05, 0x96, 0xb3, 0xf0, 0x48, 0x27, 0x4d, 0xfe, 0x9b, 0xa1, 0x2f, 0x3f, 0x43, 0xa2, 0x9f, 0xab, - 0xfc, 0x11, 0x15, 0xb7, 0xf7, 0xf8, 0x22, 0xdb, 0x4a, 0x5b, 0xe5, 0xee, 0xc6, 0xb9, 0x2f, 0x5f, - 0x8b, 0xdc, 0x9b, 0xb7, 0x5b, 0xe0, 0x8f, 0xb6, 0xac, 0x49, 0xd0, 0xd7, 0x7d, 0x7b, 0xea, 0xc7, - 0xd1, 0x4e, 0xa3, 0xe8, 0x28, 0xf2, 0x73, 0x14, 0x9f, 0xf8, 0x23, 0xd3, 0xbc, 0xab, 0xb3, 0xd5, - 0x62, 0xfa, 0xb9, 0xf3, 0x5a, 0x69, 0xa6, 0xbd, 0x19, 0x82, 0xe4, 0x1e, 0xab, 0x88, 0xe0, 0x88, - 0x73, 0xa7, 0xf4, 0xdd, 0xd2, 0x4a, 0xfe, 0x8a, 0xf7, 0xd1, 0x9c, 0xae, 0x0b, 0x4b, 0x4a, 0xd3, - 0xd6, 0xe0, 0xbc, 0x9c, 0x9f, 0xe0, 0x97, 0x6d, 0xd5, 0x5a, 0x4a, 0xc5, 0x72, 0x9b, 0x2c, 0x2b, - 0xa0, 0x46, 0x3b, 0x49, 0xc8, 0x08, 0x2e, 0xb7, 0xd1, 0x1e, 0x12, 0xe2, 0xaf, 0x3d, 0xb3, 0x2d, - 0x0e, 0x69, 0xf1, 0x26, 0xe5, 0xc7, 0x85, 0xd8, 0xf7, 0xff, 0xc6, 0x7b, 0xff, 0x42, 0x1c, 0x40, - 0x8b, 0x77, 0xad, 0xfc, 0x27, 0x27, 0xf4, 0x92, 0xc5, 0xf4, 0x3f, 0xa1, 0x7e, 0x09, 0x02, 0x0b, - 0x5b, 0xd6, 0x24, 0x24, 0x47, 0xb5, 0x77, 0xbf, 0x12, 0x22, 0xec, 0xab, 0xee, 0xe3, 0x7a, 0x3e, - 0xbe, 0x27, 0xb6, 0xbb, 0xb6, 0xf9, 0x0f, 0x93, 0xba, 0xe8, 0x98, 0x7c, 0x4e, 0xa9, 0x97, 0xda, - 0xa7, 0xe0, 0x86, 0xdd, 0xbb, 0xfc, 0xa5, 0x55, 0xfd, 0xd5, 0xf5, 0xc1, 0x26, 0xda, 0xff, 0x5d, - 0x19, 0x93, 0xf6, 0x6a, 0xd7, 0xc7, 0x9f, 0x48, 0x99, 0x4e, 0x9d, 0x3a, 0x7e, 0xf4, 0xde, 0xb8, - 0xbb, 0xbd, 0xdd, 0xff, 0x66, 0x5d, 0x46, 0x70, 0x41, 0x64, 0x31, 0xee, 0xed, 0xb4, 0x2b, 0xdb, - 0x55, 0xfc, 0x75, 0x13, 0x7d, 0xe4, 0xf2, 0x71, 0x9c, 0x12, 0x89, 0x4f, 0x76, 0x8f, 0x85, 0xcf, - 0x55, 0xc9, 0x49, 0x35, 0x4f, 0xc1, 0x3e, 0x6f, 0xdd, 0xb4, 0xdf, 0xee, 0xd3, 0xcb, 0xf1, 0x35, - 0xef, 0x82, 0x8a, 0xda, 0x6a, 0xd3, 0xd8, 0xfa, 0xbf, 0xd6, 0x2f, 0x84, 0xca, 0x5c, 0xfb, 0xb7, - 0xe0, 0x8a, 0x91, 0x75, 0xaa, 0x9f, 0xe6, 0xbd, 0xeb, 0x9b, 0x79, 0xba, 0xe4, 0xee, 0xe2, 0xf9, - 0x06, 0x5d, 0xe7, 0xe0, 0xb4, 0xfa, 0x69, 0xd5, 0xfd, 0x5d, 0x5c, 0x2e, 0xcc, 0xe8, 0xa5, 0x61, - 0x44, 0x78, 0x88, 0x2c, 0xd5, 0x9a, 0x56, 0x9a, 0x6c, 0x42, 0xc0, 0xbb, 0xcb, 0x7f, 0x7c, 0xb4, - 0xec, 0xb7, 0xc6, 0xf0, 0x5a, 0x26, 0xdd, 0xa7, 0x7a, 0x72, 0xfa, 0xf7, 0xd5, 0x9f, 0x37, 0x97, - 0x17, 0x08, 0xf4, 0xdd, 0x36, 0xda, 0xa7, 0xbf, 0x82, 0x29, 0x3d, 0xa7, 0x8b, 0xe0, 0x93, 0xbb, - 0xbd, 0x70, 0x9d, 0x37, 0xbe, 0xd3, 0x43, 0xb8, 0xf2, 0x5a, 0xa7, 0xba, 0xf2, 0xf5, 0xd9, 0x37, - 0x73, 0xf3, 0x1e, 0xed, 0x26, 0xb9, 0x2b, 0xbf, 0xb3, 0xed, 0xab, 0xe5, 0x19, 0x5a, 0x2f, 0x0b, - 0x9f, 0x97, 0x2e, 0xd3, 0x5d, 0x16, 0xd3, 0xff, 0xc3, 0xb9, 0x31, 0xf8, 0x96, 0x0a, 0xe4, 0xa2, - 0xbb, 0x59, 0x45, 0xb4, 0xff, 0xf0, 0xa4, 0xb8, 0x5c, 0xf5, 0x77, 0x33, 0x30, 0xfb, 0x92, 0x93, - 0xcd, 0x8d, 0x69, 0xc1, 0x75, 0x7b, 0xee, 0xda, 0x77, 0x27, 0x58, 0xbe, 0x4d, 0xda, 0x75, 0xc9, - 0xcf, 0x19, 0x7b, 0xb6, 0x96, 0x14, 0xeb, 0xd3, 0x70, 0x49, 0xda, 0x3c, 0x18, 0x78, 0x23, 0xa7, - 0xbb, 0xfd, 0x15, 0x89, 0x79, 0x84, 0x3d, 0xeb, 0xd7, 0x06, 0x1c, 0x67, 0x3b, 0x7b, 0xa2, 0xd8, - 0x79, 0x79, 0xa9, 0x62, 0x15, 0xd1, 0xf5, 0xf1, 0xd4, 0x92, 0x48, 0xb8, 0x96, 0x2a, 0x7d, 0xa5, - 0xc2, 0x75, 0xae, 0xf6, 0x89, 0xc2, 0x77, 0x4b, 0xbb, 0xb4, 0x33, 0x94, 0x99, 0xfc, 0x6f, 0x21, - 0x5f, 0x6c, 0x6f, 0x0b, 0x08, 0xa9, 0x52, 0x45, 0x64, 0x6c, 0x6c, 0x97, 0x2f, 0x47, 0xe6, 0xec, - 0x4d, 0x34, 0xe6, 0xe0, 0xba, 0xd6, 0x97, 0x36, 0x3f, 0xcb, 0xb6, 0xb2, 0xf7, 0xba, 0x4d, 0xf8, - 0xee, 0xda, 0x4d, 0x52, 0x4a, 0x93, 0x97, 0xae, 0x23, 0x4a, 0x7d, 0x7e, 0x4f, 0xe6, 0xb6, 0xbf, - 0x89, 0xbb, 0x5d, 0xa4, 0x93, 0xf1, 0x36, 0xe9, 0x5f, 0x7f, 0x5e, 0xbe, 0x0a, 0x6d, 0x24, 0x30, - 0xb9, 0x70, 0xb9, 0xc7, 0x2f, 0xbc, 0x6f, 0x2e, 0x4e, 0x58, 0xe2, 0x7b, 0x11, 0x9f, 0xd7, 0x47, - 0xef, 0xac, 0x55, 0xd9, 0xaa, 0xed, 0x8a, 0xe2, 0x4f, 0x9b, 0x13, 0x27, 0x8f, 0xf3, 0x6e, 0xed, - 0x78, 0xbd, 0x69, 0x2b, 0x7b, 0xee, 0x7f, 0x6b, 0xef, 0xa4, 0x92, 0xe8, 0xb5, 0x7c, 0x55, 0x2b, - 0xdc, 0xfa, 0xd7, 0xe1, 0x0b, 0xe9, 0x35, 0xa4, 0x9b, 0x5f, 0x9a, 0x4f, 0xfd, 0x92, 0x93, 0xfc, - 0x12, 0x76, 0x9f, 0xab, 0x8b, 0x2c, 0xf9, 0x9f, 0x0f, 0x99, 0xbb, 0xae, 0xa5, 0xee, 0xf7, 0xf8, - 0x25, 0xa6, 0xe9, 0xeb, 0x77, 0x8b, 0xec, 0x84, 0xda, 0x5f, 0x75, 0xd8, 0xfc, 0xba, 0x74, 0xcd, - 0xc9, 0xad, 0xd7, 0x27, 0x56, 0x32, 0x71, 0x5a, 0xba, 0x57, 0x2d, 0x35, 0xd7, 0x52, 0x73, 0x72, - 0xf6, 0xc9, 0xc5, 0xea, 0xc8, 0xb1, 0xcf, 0x8a, 0xb8, 0x4f, 0x54, 0xf6, 0x3b, 0xbe, 0x4e, 0xee, - 0xbb, 0xb7, 0x1c, 0xaa, 0xfd, 0x13, 0xa5, 0xeb, 0xdf, 0x30, 0xbd, 0xdc, 0x67, 0x04, 0x42, 0x93, - 0x7e, 0x52, 0x73, 0x55, 0x7f, 0x29, 0xd0, 0xe6, 0xb4, 0xfc, 0xb6, 0x44, 0xd2, 0x6d, 0x65, 0xe6, - 0xdb, 0xb6, 0xb9, 0xa3, 0x95, 0x7b, 0xf8, 0xbb, 0x1d, 0x8d, 0xbb, 0xa7, 0x27, 0x04, 0xe6, 0xb4, - 0xfb, 0xd5, 0xcf, 0x11, 0xf2, 0xd7, 0x57, 0xc4, 0x15, 0xda, 0xda, 0xa7, 0x5c, 0xb2, 0xb3, 0x6e, - 0xb9, 0x2c, 0x64, 0x6d, 0x0f, 0xcd, 0x3f, 0xdb, 0xf0, 0x8d, 0xad, 0xe9, 0x26, 0x5c, 0x4b, 0x1b, - 0x7e, 0xe9, 0xe6, 0x63, 0xcd, 0xb6, 0xee, 0xb8, 0x4f, 0xb6, 0x9b, 0x57, 0xae, 0x09, 0x29, 0x25, - 0xf5, 0x73, 0x68, 0x8b, 0xbb, 0xe8, 0x95, 0xf2, 0xf3, 0xf9, 0xb9, 0x45, 0xe4, 0xf2, 0x70, 0x4d, - 0xb5, 0x6b, 0x93, 0x32, 0x97, 0x8b, 0x23, 0x97, 0x3d, 0xd2, 0xf5, 0x73, 0xe0, 0x9e, 0x5c, 0x49, - 0x24, 0xb2, 0xcd, 0x37, 0x3e, 0x43, 0x2d, 0x6b, 0x94, 0xab, 0x29, 0x96, 0x66, 0xe2, 0xfa, 0x4f, - 0x4a, 0x5c, 0xf7, 0xab, 0xfc, 0xdb, 0x1d, 0xd7, 0x04, 0xe6, 0x9b, 0xea, 0x0b, 0x13, 0xc5, 0x06, - 0xd4, 0x38, 0x9d, 0x1f, 0xe1, 0x4a, 0xa8, 0x80, 0x70, 0x70, 0x97, 0x30, 0x72, 0x3c, 0x06, 0xcf, - 0xc0, 0x87, 0x03, 0xb7, 0x04, 0xe9, 0x95, 0xd4, 0x7b, 0xfd, 0x70, 0x94, 0xd0, 0x9d, 0xbc, 0x47, - 0xef, 0x35, 0x84, 0xab, 0x88, 0x13, 0xa7, 0x77, 0xfa, 0xf5, 0xf8, 0x81, 0x78, 0xba, 0x91, 0x25, - 0x21, 0x89, 0xc3, 0x66, 0x77, 0x2e, 0x20, 0x4d, 0x57, 0xbb, 0x51, 0x5a, 0xe2, 0x44, 0xd6, 0x76, - 0x48, 0xc6, 0xa9, 0xf8, 0x2e, 0xbd, 0xaa, 0x7b, 0xc5, 0xf2, 0x6f, 0x36, 0x78, 0xcb, 0x2b, 0x5e, - 0xdd, 0x5b, 0x6c, 0xb0, 0xb6, 0x9b, 0x8d, 0xd6, 0x35, 0x54, 0xf8, 0x28, 0xc1, 0xb7, 0x7d, 0x10, - 0xf6, 0x22, 0xf9, 0x2d, 0xdf, 0xe2, 0x29, 0x59, 0xfc, 0xdb, 0x2f, 0xdf, 0x21, 0x15, 0x71, 0xbc, - 0x82, 0x5b, 0xb7, 0xf7, 0x5d, 0xc9, 0xc1, 0x09, 0x15, 0xed, 0x31, 0xf0, 0x9e, 0xf7, 0xda, 0x75, - 0xd5, 0xab, 0x90, 0xba, 0x4b, 0xe0, 0xaf, 0xab, 0x49, 0x2f, 0x3e, 0x6e, 0x5f, 0x08, 0x99, 0xde, - 0xef, 0x2e, 0x3d, 0xdd, 0xc9, 0xcc, 0x46, 0xe6, 0x9f, 0xc1, 0x25, 0xbc, 0xac, 0x4a, 0xf9, 0xeb, - 0x8b, 0xc6, 0xf5, 0xfb, 0xe0, 0x86, 0xd4, 0xbb, 0x77, 0xc9, 0x8c, 0x5a, 0x48, 0x59, 0xf0, 0x5d, - 0x67, 0x67, 0xd6, 0xf7, 0xf0, 0x88, 0x9b, 0xa9, 0x33, 0x37, 0xdb, 0xe1, 0x10, 0x45, 0x37, 0xde, - 0xac, 0xf1, 0xbe, 0xff, 0x04, 0xd6, 0x63, 0x19, 0x58, 0x1d, 0x27, 0xb9, 0x5c, 0x49, 0x6a, 0x87, - 0xe5, 0x63, 0xc2, 0x54, 0xde, 0x46, 0x2d, 0xbd, 0x71, 0x7c, 0xad, 0xa1, 0xde, 0xb9, 0xa8, 0x77, - 0xf8, 0x9b, 0x1a, 0x4d, 0x9f, 0x50, 0xe3, 0xb5, 0xee, 0x46, 0x3a, 0xee, 0x95, 0xfe, 0x26, 0xba, - 0x1c, 0x8c, 0x50, 0xfc, 0xbd, 0xa6, 0x97, 0x57, 0x97, 0xb9, 0x32, 0xe9, 0x1b, 0x98, 0xb4, 0xe9, - 0xf9, 0x2d, 0x6d, 0x7b, 0xed, 0x34, 0xb8, 0x24, 0xde, 0xd7, 0x7c, 0xdd, 0x54, 0xdc, 0x4d, 0xa6, - 0xb9, 0x32, 0xfe, 0x43, 0x3d, 0xef, 0x82, 0x5b, 0xcf, 0x99, 0x71, 0xea, 0xef, 0x94, 0xad, 0x6f, - 0xe3, 0xef, 0x4b, 0x56, 0xa9, 0x69, 0x2e, 0x4a, 0x19, 0x3f, 0xe1, 0x4f, 0x37, 0xa4, 0x9b, 0xd2, - 0x44, 0x5e, 0x89, 0x3a, 0xb9, 0x57, 0x66, 0x5d, 0xc9, 0x88, 0x05, 0x76, 0x65, 0x9f, 0x08, 0x94, - 0xd5, 0x01, 0x69, 0xaa, 0x72, 0x72, 0xca, 0x9d, 0xcd, 0x10, 0xae, 0xa0, 0xe9, 0x67, 0x7c, 0x25, - 0x2e, 0x1c, 0xc4, 0xc6, 0x2c, 0x85, 0x42, 0x35, 0x63, 0xa7, 0x89, 0xbe, 0x3c, 0xe9, 0xd2, 0x4a, - 0x95, 0xe9, 0xb6, 0x9f, 0x8a, 0xa2, 0x4a, 0xca, 0xa7, 0x62, 0xfc, 0x15, 0x58, 0x86, 0xef, 0x52, - 0x30, 0x4f, 0x24, 0xc9, 0x74, 0xaa, 0xb9, 0x89, 0xcb, 0x01, 0x1c, 0x82, 0x6b, 0x72, 0xf4, 0x29, - 0xe4, 0xe4, 0x13, 0x57, 0x49, 0x73, 0x13, 0x6d, 0x5f, 0x45, 0x6f, 0x97, 0x57, 0xf9, 0x75, 0x4e, - 0x7e, 0x4e, 0x7d, 0x97, 0x82, 0x42, 0x55, 0xaf, 0x7d, 0xdd, 0x27, 0xf8, 0xf2, 0x37, 0xae, 0x4d, - 0xab, 0x5f, 0x82, 0xc2, 0xad, 0x2d, 0xda, 0x77, 0xa7, 0xe9, 0x79, 0x0d, 0x05, 0x94, 0x99, 0x34, - 0x63, 0x9c, 0x42, 0xb9, 0xe2, 0x01, 0x26, 0xef, 0x79, 0x38, 0x4c, 0x4a, 0x69, 0x3a, 0x4a, 0x9e, - 0x4e, 0x6d, 0x0e, 0xeb, 0x8e, 0xc9, 0x2d, 0x52, 0xdb, 0xb7, 0xf2, 0x51, 0x21, 0xb6, 0x56, 0x17, - 0x64, 0xe4, 0xfe, 0xbd, 0xf1, 0x35, 0xbd, 0x3d, 0xfd, 0x96, 0xdd, 0xb5, 0xc1, 0x56, 0x86, 0xfd, - 0x53, 0x6e, 0xf2, 0x5f, 0x04, 0x9d, 0x55, 0xdf, 0x09, 0xe7, 0xf6, 0xde, 0xa9, 0xbe, 0x23, 0xb4, - 0xd1, 0xf5, 0xad, 0x49, 0xc9, 0x48, 0xde, 0x97, 0x98, 0x45, 0x56, 0x7e, 0x51, 0x35, 0x7a, 0xe1, - 0x32, 0xbb, 0xe7, 0xce, 0xba, 0xf5, 0x72, 0x6e, 0xbf, 0x09, 0x13, 0x76, 0xeb, 0x55, 0xc1, 0x6f, - 0x49, 0xb7, 0xdf, 0x2f, 0x88, 0x23, 0x4d, 0x36, 0xcc, 0xf9, 0x8e, 0x4e, 0x4b, 0x56, 0xab, 0x94, - 0x8f, 0x7a, 0xff, 0x11, 0xcb, 0x8e, 0xe2, 0xbc, 0x47, 0x62, 0x67, 0xdc, 0xfc, 0xa4, 0x23, 0xf5, - 0x11, 0xc1, 0x10, 0x9b, 0xaf, 0x10, 0x5c, 0x18, 0x6e, 0x5c, 0xd4, 0x99, 0x99, 0x22, 0x5d, 0x15, - 0x7f, 0xa8, 0x9c, 0x9c, 0x97, 0x7d, 0x72, 0x0c, 0xd5, 0x7c, 0xb5, 0x5a, 0xfb, 0x3a, 0x6d, 0xb5, - 0xf2, 0x5e, 0x7c, 0x6b, 0xd1, 0xda, 0xfa, 0xb5, 0x72, 0xda, 0x69, 0xa6, 0xbd, 0xf9, 0x7f, 0x93, - 0x5a, 0x4b, 0x8b, 0x22, 0xdb, 0xdd, 0xaf, 0x8c, 0x93, 0xb4, 0x9d, 0xdd, 0xa7, 0x55, 0xd5, 0x6d, - 0xf9, 0x49, 0xaa, 0x84, 0xf8, 0xed, 0xa5, 0xa6, 0xd6, 0x96, 0x92, 0xe3, 0x0a, 0xd2, 0x4e, 0xd2, - 0x49, 0x6a, 0x87, 0xa4, 0x97, 0xc4, 0x57, 0x2d, 0xdb, 0xd7, 0x35, 0x32, 0xff, 0xd5, 0x8f, 0x84, - 0xb3, 0xe5, 0xa4, 0xb7, 0xf2, 0xef, 0x71, 0x5c, 0xbb, 0xd5, 0xf4, 0x7e, 0x97, 0x94, 0x8e, 0xfb, - 0xe6, 0xd2, 0xba, 0xe1, 0x3c, 0xba, 0xbd, 0x4b, 0x91, 0x78, 0xad, 0xbb, 0xa6, 0xff, 0xb1, 0x0b, - 0x6d, 0x2e, 0x20, 0xc2, 0x72, 0xed, 0x74, 0x23, 0x2b, 0xeb, 0xd2, 0xf4, 0x79, 0x7c, 0x29, 0x23, - 0x3a, 0xae, 0x87, 0x61, 0xa6, 0xf4, 0xca, 0xc5, 0x7a, 0xf8, 0x42, 0xdd, 0xbe, 0x46, 0xa6, 0x92, - 0x2a, 0xf8, 0x24, 0xbe, 0xdc, 0x5f, 0x1f, 0x63, 0x3c, 0xb6, 0x9a, 0x43, 0x43, 0xcf, 0xc9, 0xa4, - 0xe2, 0xcc, 0xe8, 0xb6, 0xa8, 0x6e, 0xb9, 0x0b, 0xb4, 0xd7, 0x90, 0xb6, 0xed, 0xae, 0x2b, 0x4e, - 0x9e, 0xd3, 0x6b, 0x8a, 0x97, 0xfd, 0x22, 0x6b, 0xc4, 0x93, 0xbb, 0xae, 0x62, 0x37, 0xb7, 0xe1, - 0x2c, 0xf8, 0xde, 0x7f, 0xe6, 0xe5, 0x17, 0x75, 0xf8, 0x6c, 0x73, 0xe6, 0xea, 0xb5, 0x77, 0xba, - 0x93, 0xa1, 0xed, 0x5d, 0x91, 0xeb, 0x7c, 0x27, 0x7b, 0xbc, 0xdf, 0xf2, 0xd2, 0x57, 0xf8, 0x22, - 0xed, 0x34, 0xff, 0x08, 0xdd, 0x5a, 0xaa, 0xad, 0x5f, 0xf0, 0x4f, 0x48, 0xba, 0xf5, 0xf3, 0x76, - 0xbe, 0x3e, 0xad, 0x6f, 0xca, 0xde, 0xff, 0x09, 0x9a, 0x9c, 0x9a, 0xf7, 0xf9, 0x09, 0x6a, 0xfe, - 0x34, 0xb1, 0xeb, 0x8f, 0xd4, 0xec, 0x7c, 0xac, 0x55, 0x0e, 0x86, 0xa2, 0xe9, 0xaf, 0xfc, 0xbc, - 0x8c, 0x57, 0x76, 0xab, 0xf2, 0x52, 0xbb, 0xf8, 0x2d, 0xa9, 0x19, 0x4a, 0xe7, 0x7d, 0x29, 0x7c, - 0x25, 0x6f, 0x6e, 0x9d, 0x3f, 0x09, 0x50, 0xf5, 0x74, 0x3d, 0xf3, 0x4f, 0xff, 0x97, 0x49, 0x3f, - 0x88, 0x99, 0xba, 0xa4, 0xdf, 0xe1, 0x1b, 0x4c, 0x88, 0xc6, 0xde, 0xe8, 0x64, 0xff, 0x92, 0xa9, - 0x7e, 0x0a, 0x67, 0x61, 0x8c, 0x8f, 0xe3, 0x86, 0xdf, 0x43, 0xbc, 0x7f, 0x84, 0xf7, 0x76, 0x19, - 0xe5, 0xfc, 0xbc, 0x8c, 0x40, 0xa7, 0xcb, 0xdd, 0xc2, 0x9d, 0x1b, 0xa0, 0x37, 0xa0, 0x00, 0x00, - 0x00, 0x01, 0x41, 0x9a, 0x2d, 0x16, 0xb1, 0xaf, 0x10, 0x63, 0x31, 0xfd, 0x34, 0xfc, 0x15, 0x15, - 0xed, 0xc6, 0x33, 0x7a, 0xda, 0x52, 0xb1, 0xa7, 0x15, 0xc4, 0x94, 0xdd, 0xdd, 0xba, 0xc6, 0xf1, - 0xd7, 0xf0, 0x44, 0x69, 0xbb, 0x78, 0xad, 0x63, 0xc8, 0x45, 0xa5, 0xf0, 0x5c, 0x36, 0x7e, 0xf3, - 0x93, 0xa7, 0xf3, 0xe1, 0x4b, 0x76, 0xf9, 0x3d, 0xbb, 0x6e, 0x9d, 0x3b, 0x9f, 0x42, 0xa2, 0xf8, - 0xa9, 0x21, 0x0a, 0xc7, 0x37, 0x4b, 0xf7, 0x54, 0xd5, 0x7c, 0x71, 0xf4, 0xdb, 0x99, 0x84, 0xb6, - 0xdb, 0x7f, 0x82, 0xbb, 0x69, 0x11, 0xab, 0xa7, 0x4a, 0xb4, 0x4d, 0x1c, 0x1f, 0x04, 0xe5, 0x4d, - 0x52, 0x7a, 0xb4, 0xd4, 0xbe, 0x14, 0x11, 0x69, 0xbe, 0x35, 0x94, 0xa7, 0x4f, 0xab, 0x74, 0xaf, - 0xc1, 0x5c, 0xad, 0xf6, 0xf2, 0x36, 0xc7, 0x4d, 0x79, 0x17, 0x82, 0x5d, 0x8d, 0xf3, 0x28, 0x9d, - 0x4b, 0x1f, 0x04, 0x21, 0x79, 0x59, 0x53, 0x22, 0xaf, 0x04, 0x97, 0x77, 0x73, 0x22, 0xaf, 0x57, - 0xae, 0xcc, 0x2f, 0xfc, 0x16, 0x1e, 0xee, 0xee, 0xee, 0xee, 0xee, 0xe6, 0x4a, 0xe0, 0x86, 0xaa, - 0xaa, 0x65, 0x1f, 0x44, 0x3a, 0x5e, 0x11, 0x5c, 0x91, 0x71, 0x0c, 0xd3, 0x7f, 0x88, 0x29, 0x1f, - 0x5f, 0x08, 0x8a, 0x4d, 0x95, 0xd5, 0x3a, 0x6e, 0xe6, 0xdf, 0xc6, 0x15, 0x22, 0x6d, 0x0f, 0xcf, - 0x2b, 0x6c, 0x69, 0xad, 0xfe, 0x24, 0x8f, 0xcd, 0xd3, 0xed, 0x79, 0x74, 0xe9, 0x78, 0xe3, 0x9e, - 0x31, 0xf9, 0xef, 0x4c, 0xb9, 0xf8, 0x2b, 0xb2, 0x2c, 0x73, 0x75, 0x4f, 0x4e, 0xd9, 0x6a, 0xe0, - 0xb0, 0x86, 0xf1, 0x33, 0xba, 0xf5, 0x97, 0x3b, 0xef, 0x6e, 0xfe, 0x14, 0x39, 0xf6, 0x36, 0xd3, - 0x6d, 0xba, 0x5b, 0x9f, 0x49, 0xbe, 0x7c, 0x73, 0xe1, 0x13, 0x32, 0x44, 0x97, 0x37, 0x4d, 0x69, - 0x7c, 0x28, 0x5e, 0x37, 0x9e, 0xec, 0xdd, 0xed, 0xea, 0x8a, 0xff, 0x17, 0x49, 0x2e, 0x9b, 0xfc, - 0x10, 0x6e, 0xcd, 0x9b, 0x69, 0x5a, 0xcd, 0xd7, 0xc5, 0x9e, 0x39, 0xdf, 0xe3, 0x7a, 0xb9, 0xf3, - 0xb4, 0xcb, 0x56, 0xc9, 0xd6, 0xb3, 0xcb, 0xb3, 0xae, 0x24, 0x94, 0xbf, 0xc7, 0xb3, 0xff, 0x0e, - 0x9c, 0xff, 0x76, 0xd2, 0x4d, 0xf2, 0xd6, 0x53, 0x1f, 0x97, 0xcf, 0xe2, 0x86, 0x35, 0x4f, 0xc9, - 0x0f, 0x1d, 0x2e, 0x67, 0xa5, 0x57, 0x8d, 0xf8, 0xf4, 0xfc, 0x11, 0x05, 0x75, 0x5c, 0xd8, 0xc5, - 0x1e, 0x64, 0xd3, 0x72, 0x86, 0x15, 0x5e, 0x6e, 0xac, 0xfb, 0xea, 0xab, 0xb1, 0x36, 0xee, 0xf9, - 0x67, 0xdf, 0xe2, 0xab, 0x6e, 0x48, 0x68, 0x80, 0xd5, 0xcd, 0xcd, 0x8d, 0x02, 0x0e, 0x2f, 0x34, - 0x52, 0xea, 0xf1, 0x9c, 0x5e, 0x9a, 0xa9, 0xf3, 0xfc, 0x49, 0x75, 0x4d, 0xb4, 0xdb, 0x4f, 0xca, - 0x49, 0x7f, 0xe0, 0x9c, 0xfb, 0xac, 0xdf, 0xf7, 0xc1, 0x35, 0xde, 0x9a, 0xef, 0xdf, 0x04, 0xfa, - 0x74, 0xd2, 0xbd, 0xbe, 0x52, 0x3e, 0xd3, 0xe6, 0x22, 0x74, 0x46, 0x51, 0xe6, 0xb5, 0x6d, 0xbf, - 0x25, 0x64, 0xbf, 0x82, 0x3b, 0x7a, 0xa5, 0x5e, 0x09, 0x04, 0xab, 0x5f, 0x7c, 0xc4, 0x5c, 0xdb, - 0xe4, 0x11, 0x5a, 0x9b, 0x88, 0x08, 0xbb, 0xee, 0xfa, 0xe8, 0x4a, 0x65, 0xe8, 0x2d, 0xd7, 0xc3, - 0xd5, 0x5d, 0x34, 0xdd, 0x13, 0xb2, 0x63, 0x7e, 0xd6, 0x4c, 0xff, 0x1f, 0x69, 0x36, 0x59, 0x7f, - 0x87, 0xeb, 0x70, 0x7e, 0xad, 0xf2, 0x6e, 0x9d, 0x77, 0x66, 0xce, 0xeb, 0xba, 0x29, 0x6a, 0x97, - 0xb2, 0xe9, 0xbf, 0x82, 0xba, 0xb7, 0xe5, 0x8a, 0xdb, 0xb5, 0x07, 0xc2, 0x1b, 0x52, 0xcb, 0x8e, - 0xe6, 0xb8, 0x5f, 0x16, 0x4b, 0x32, 0xc7, 0x6b, 0x49, 0x70, 0x54, 0x7a, 0x56, 0xb3, 0xfd, 0x39, - 0x71, 0xbe, 0x08, 0xf7, 0xb5, 0x07, 0xc1, 0x29, 0x53, 0xa7, 0x7d, 0xa4, 0x59, 0xf0, 0x89, 0xad, - 0xbc, 0xf9, 0xa6, 0xd4, 0xd9, 0xf0, 0x46, 0x44, 0x9b, 0xdd, 0xf1, 0x74, 0xaf, 0xbd, 0x93, 0xe8, - 0x26, 0xd0, 0x22, 0xf3, 0x05, 0xa6, 0xf4, 0x9f, 0x05, 0x96, 0xd9, 0x2f, 0x56, 0x79, 0x23, 0xf0, - 0x2f, 0x04, 0x59, 0x88, 0x2c, 0xfe, 0xae, 0x8a, 0xde, 0x27, 0x88, 0xf0, 0x51, 0x8f, 0xe0, 0x8a, - 0xe9, 0xd3, 0x62, 0x16, 0xe5, 0x22, 0x57, 0x97, 0x9b, 0x1a, 0xc3, 0xd6, 0xbb, 0xad, 0xd2, 0x7c, - 0xc3, 0xf7, 0x75, 0xc1, 0x21, 0x24, 0xef, 0xf9, 0x5c, 0x49, 0xad, 0x57, 0x2e, 0xae, 0x20, 0x4f, - 0xca, 0x65, 0x5a, 0xf8, 0x9b, 0xde, 0xf7, 0x89, 0xe8, 0xaf, 0x27, 0x45, 0x73, 0xea, 0xc7, 0xc1, - 0x0d, 0x6d, 0xd2, 0xfc, 0x4f, 0x56, 0xb5, 0x4d, 0x70, 0x46, 0x25, 0xad, 0xa2, 0x02, 0xf8, 0xb2, - 0x4d, 0x8d, 0xb3, 0x53, 0xea, 0xba, 0x28, 0xa7, 0x7d, 0x6f, 0xf1, 0x5a, 0x4b, 0xe5, 0xd1, 0x1d, - 0x0e, 0x7a, 0xec, 0xe9, 0x25, 0xf8, 0xab, 0xb7, 0x49, 0xdf, 0x5c, 0xd4, 0xee, 0xfe, 0x53, 0x36, - 0xad, 0xfc, 0xd4, 0xd3, 0xd7, 0x04, 0xe7, 0x72, 0x25, 0x6b, 0xdd, 0xb7, 0xf8, 0xc1, 0x0d, 0xab, - 0x97, 0x71, 0x18, 0x27, 0x3c, 0x2f, 0x91, 0x87, 0xfc, 0x24, 0x59, 0x76, 0xe3, 0x55, 0xf0, 0xd7, - 0xcb, 0x7b, 0xd7, 0x17, 0x43, 0xbf, 0x9a, 0xd7, 0x37, 0x6d, 0xd4, 0x40, 0x91, 0xc4, 0x7b, 0xe7, - 0xc5, 0x9d, 0x5a, 0xc4, 0x88, 0xf8, 0xe2, 0x8b, 0xaf, 0xc5, 0xf7, 0x7f, 0x64, 0x4c, 0x4b, 0xd3, - 0x7f, 0x13, 0xc8, 0x77, 0x6d, 0xdb, 0x5c, 0x55, 0xdb, 0xd6, 0x97, 0xd1, 0x70, 0xf9, 0x88, 0xdd, - 0x7e, 0x8a, 0xe7, 0xc9, 0xe6, 0x92, 0xe4, 0xb4, 0xd2, 0x4b, 0xeb, 0x38, 0xf2, 0x5e, 0x7d, 0xf8, - 0x2e, 0xa4, 0x96, 0x9c, 0x91, 0xc1, 0x5d, 0x17, 0xc5, 0x77, 0xb5, 0x4b, 0xd7, 0x60, 0x27, 0xa1, - 0x8f, 0x5c, 0xa5, 0x3e, 0xf2, 0x73, 0x11, 0xdd, 0xeb, 0x94, 0xae, 0xd5, 0x7c, 0xa4, 0x6d, 0x36, - 0xfe, 0x26, 0xb5, 0x5d, 0x26, 0xfc, 0x87, 0x4d, 0x3b, 0x5e, 0xf6, 0x9a, 0x69, 0x72, 0x92, 0xef, - 0xf1, 0x24, 0xdd, 0xef, 0x75, 0x11, 0xe2, 0x44, 0xf1, 0x31, 0x3d, 0x21, 0xdf, 0x03, 0x89, 0xe3, - 0xf3, 0x2f, 0x04, 0x25, 0xb3, 0xab, 0x93, 0x72, 0xcb, 0x0e, 0x4e, 0x10, 0x12, 0x2f, 0xda, 0xdf, - 0x69, 0xaf, 0x56, 0x0f, 0x85, 0xfa, 0x6d, 0x25, 0x6a, 0xe1, 0x9c, 0x9c, 0xdb, 0xfe, 0xae, 0x7c, - 0x17, 0x77, 0x37, 0xab, 0x79, 0x4d, 0xd8, 0x8d, 0x19, 0x28, 0x5e, 0x09, 0x0b, 0x26, 0xf0, 0xc2, - 0xe5, 0x33, 0xdf, 0xe0, 0x94, 0xf9, 0x32, 0xb9, 0x71, 0x28, 0x78, 0x2b, 0xdc, 0x99, 0xea, 0xf7, - 0x79, 0x87, 0x57, 0x14, 0x4e, 0x58, 0xbd, 0xdf, 0xdf, 0x55, 0xf3, 0x77, 0x7f, 0x74, 0x9f, 0xf5, - 0x7a, 0xee, 0xeb, 0x49, 0x70, 0x81, 0xd2, 0xb9, 0xfd, 0xd6, 0xd2, 0xfe, 0xf7, 0x7f, 0x82, 0x33, - 0x9e, 0x34, 0xe9, 0x52, 0xc4, 0x18, 0x75, 0x6f, 0xe2, 0x77, 0x5a, 0xeb, 0xe1, 0x31, 0x3c, 0xb8, - 0xd1, 0x99, 0xf1, 0x10, 0x4e, 0x49, 0x4c, 0x62, 0xb9, 0xf3, 0x7e, 0x22, 0x08, 0xe7, 0xed, 0x3e, - 0x2f, 0x88, 0xa2, 0xb9, 0x64, 0x5d, 0x26, 0x52, 0xfc, 0x10, 0x9e, 0xb4, 0x99, 0x7c, 0x16, 0x5b, - 0xbd, 0xa6, 0xaa, 0xfb, 0xc5, 0x27, 0x04, 0x64, 0x6b, 0x5c, 0x2b, 0x82, 0x4e, 0xd3, 0x4f, 0xf0, - 0x4b, 0x4d, 0xf2, 0xc7, 0xb0, 0xf1, 0x35, 0x19, 0xed, 0x34, 0x9e, 0xeb, 0xbd, 0xa4, 0xfe, 0x5d, - 0xa4, 0xab, 0x84, 0xb4, 0xa6, 0xd3, 0x67, 0xf5, 0xca, 0xfa, 0xb1, 0xf0, 0x45, 0xe6, 0xec, 0x7d, - 0x58, 0xfb, 0xb4, 0xd6, 0xba, 0xc5, 0xf5, 0x8a, 0x6e, 0x3e, 0xd5, 0xea, 0x99, 0x98, 0x67, 0x4b, - 0x2b, 0x4c, 0xc3, 0xe1, 0x0a, 0x6d, 0x35, 0x4e, 0x9e, 0x9d, 0x3f, 0x15, 0x7d, 0xdc, 0xce, 0xdf, - 0x05, 0x13, 0xf8, 0xae, 0xda, 0x54, 0x8a, 0xdf, 0x08, 0x91, 0xe7, 0xda, 0xa2, 0x4a, 0xe8, 0x49, - 0xfe, 0x38, 0xa4, 0xc9, 0x36, 0xed, 0xf4, 0xaf, 0xe5, 0xf3, 0xd3, 0xc4, 0x1f, 0x36, 0xcd, 0xd7, - 0xf0, 0x44, 0x4c, 0xad, 0xb1, 0xf0, 0x59, 0x4d, 0xd3, 0xe9, 0x24, 0x9e, 0xaf, 0xf0, 0x95, 0xc4, - 0xbe, 0xda, 0x6d, 0x13, 0xd7, 0x89, 0x84, 0x6d, 0x2f, 0xa9, 0x71, 0x24, 0xbf, 0x94, 0x89, 0xa7, - 0x7f, 0x1e, 0x4d, 0x37, 0x34, 0x2c, 0xf3, 0x31, 0x4f, 0xe3, 0x4f, 0x6a, 0xd1, 0xf1, 0xbe, 0x4d, - 0x94, 0x92, 0xd2, 0x57, 0xa6, 0x9b, 0x6d, 0xfe, 0x11, 0x82, 0x7e, 0xd3, 0x4b, 0x49, 0x27, 0xe2, - 0x23, 0x32, 0x1d, 0x99, 0x83, 0x47, 0x5d, 0xf5, 0xde, 0x3a, 0xb8, 0x89, 0x30, 0xcd, 0x4e, 0xf8, - 0xab, 0x0e, 0x92, 0x53, 0xc4, 0xdb, 0xae, 0x62, 0x35, 0x24, 0x2b, 0x82, 0xa2, 0xa5, 0x19, 0x5d, - 0x24, 0x92, 0x49, 0x3b, 0x5d, 0x7c, 0x25, 0x75, 0xe9, 0x5f, 0xc6, 0x15, 0x24, 0x92, 0xa5, 0x19, - 0x5a, 0xf4, 0x92, 0x8c, 0xfa, 0x97, 0xe2, 0x34, 0xd7, 0x4a, 0x92, 0xe2, 0x29, 0x26, 0x95, 0x24, - 0xbf, 0x42, 0x22, 0xae, 0x6e, 0xe6, 0x87, 0x8a, 0x3b, 0xde, 0x9d, 0x34, 0x4b, 0x84, 0xed, 0xda, - 0x69, 0xeb, 0x27, 0x05, 0x5d, 0xa4, 0xf6, 0xdb, 0x65, 0x24, 0x38, 0x7c, 0x4d, 0xb2, 0xfd, 0x29, - 0x7c, 0x9c, 0x16, 0xed, 0x97, 0xe9, 0x4f, 0x2d, 0x7c, 0x45, 0x3d, 0x2c, 0xb8, 0x5c, 0x37, 0x42, - 0xba, 0x7e, 0x51, 0x6e, 0x5c, 0x3e, 0xeb, 0x94, 0x42, 0xba, 0x9f, 0xf9, 0xbc, 0x1e, 0xbf, 0x96, - 0xf8, 0x37, 0xf4, 0x2f, 0xb8, 0x98, 0x42, 0xed, 0x6e, 0xa7, 0x67, 0x9f, 0xb1, 0xbf, 0xf8, 0x22, - 0x91, 0x81, 0x7f, 0xbe, 0x61, 0x19, 0x26, 0x35, 0x4f, 0x04, 0x12, 0x33, 0x49, 0xb2, 0x45, 0xdc, - 0x93, 0x6e, 0xd6, 0x5f, 0xc5, 0xe4, 0xe2, 0xb9, 0x20, 0x9a, 0x4c, 0x67, 0xf4, 0x82, 0xbc, 0x49, - 0xf3, 0x6f, 0x9b, 0x3c, 0x45, 0xa6, 0xfa, 0x93, 0xd7, 0x04, 0x52, 0x73, 0x30, 0xd3, 0xb7, 0x0f, - 0x84, 0xe9, 0x6a, 0xbd, 0x6b, 0x82, 0xe2, 0x13, 0x29, 0xf4, 0x92, 0x82, 0xb8, 0xbf, 0x36, 0x2a, - 0x4c, 0xfa, 0xe6, 0x26, 0xaa, 0x4e, 0x4a, 0xd7, 0xe8, 0x5f, 0x7c, 0x11, 0x08, 0x5d, 0x7a, 0xf8, - 0x21, 0x2a, 0x74, 0xef, 0x5c, 0x12, 0x6f, 0x64, 0x99, 0xfb, 0x30, 0xe5, 0xc6, 0xb1, 0xa0, 0xd7, - 0x25, 0xa7, 0x55, 0x51, 0x10, 0x48, 0x52, 0xe9, 0x61, 0xb9, 0xf1, 0x46, 0xe4, 0x82, 0x59, 0xe0, - 0xfe, 0x22, 0x58, 0x11, 0x7d, 0x96, 0xd6, 0x62, 0x7f, 0xcb, 0x3e, 0xff, 0x1c, 0x7c, 0xf8, 0xd3, - 0xbb, 0x7b, 0x69, 0xde, 0x24, 0x84, 0x5b, 0xfd, 0xc7, 0x73, 0x85, 0xcd, 0xd7, 0xab, 0xb9, 0xe6, - 0xc2, 0x26, 0xeb, 0x98, 0xf4, 0x92, 0x9b, 0x97, 0x3f, 0xd7, 0x14, 0x5b, 0xb7, 0x49, 0x3f, 0xc8, - 0x6d, 0x4d, 0xc4, 0xf2, 0x6a, 0xc6, 0x4e, 0xbb, 0x93, 0x6d, 0x49, 0xd5, 0x8f, 0x97, 0x5b, 0xbe, - 0x63, 0xb7, 0x6f, 0xe4, 0xd6, 0x56, 0x4d, 0xcc, 0x21, 0x92, 0xd8, 0xfc, 0x13, 0xde, 0xec, 0x9b, - 0x23, 0x55, 0x8c, 0xb3, 0xe4, 0xae, 0x93, 0xe4, 0x2a, 0xdb, 0x4b, 0xc9, 0xd2, 0x4b, 0xc7, 0xde, - 0x5c, 0x93, 0xfb, 0x77, 0xf1, 0x3a, 0x1c, 0x8c, 0xac, 0x79, 0xb8, 0x43, 0x4e, 0xb6, 0x34, 0x92, - 0x78, 0xaf, 0xe6, 0xd2, 0x6e, 0x4e, 0x08, 0x74, 0xe6, 0x7e, 0x52, 0xf7, 0xb4, 0xb5, 0xc1, 0x0d, - 0x0d, 0x8e, 0xef, 0xf0, 0x53, 0x93, 0x13, 0x8a, 0xa9, 0x5f, 0x43, 0x8f, 0xf5, 0x8a, 0xb8, 0xc9, - 0xb3, 0x4a, 0xed, 0xd3, 0x4b, 0x4b, 0x6b, 0xc9, 0xe6, 0xdf, 0x15, 0x4f, 0x72, 0xff, 0xf2, 0xdb, - 0x65, 0x4b, 0xcd, 0xc9, 0xfe, 0x49, 0xf5, 0x36, 0xbe, 0x4e, 0x92, 0x4f, 0xb2, 0x52, 0xa4, 0x2f, - 0x92, 0x9d, 0x36, 0x9c, 0x4c, 0xb6, 0xa9, 0xb7, 0xe2, 0x2d, 0x5a, 0xb1, 0x8d, 0xab, 0x70, 0x7e, - 0x3b, 0xcc, 0xd3, 0x41, 0x63, 0xe3, 0xb2, 0xb7, 0xe2, 0x1f, 0x84, 0x6b, 0x43, 0xb6, 0xba, 0x54, - 0xab, 0xb8, 0xe7, 0x7f, 0xdf, 0x24, 0x3e, 0x63, 0xe5, 0xc6, 0xfd, 0xdb, 0x4f, 0xf6, 0x43, 0xef, - 0xf0, 0x51, 0xda, 0x4c, 0xac, 0x74, 0xb5, 0xf2, 0x91, 0x3d, 0x3f, 0x56, 0x1e, 0x41, 0x29, 0x5f, - 0xe2, 0x88, 0x5c, 0x7e, 0xd3, 0x6a, 0x6e, 0x32, 0xaf, 0x79, 0x3d, 0x26, 0xab, 0x68, 0xf8, 0xb5, - 0x78, 0x8d, 0x24, 0xa9, 0x5f, 0xe1, 0x19, 0x48, 0x6d, 0xf5, 0x6a, 0x95, 0x7c, 0x25, 0xbd, 0x2b, - 0xb5, 0xf1, 0x34, 0x48, 0xc8, 0x63, 0x93, 0x3a, 0xe1, 0x33, 0xa7, 0x23, 0x39, 0xba, 0x1f, 0xec, - 0x8f, 0x5f, 0x8c, 0xbd, 0x3d, 0x24, 0xe8, 0xad, 0xac, 0x7d, 0x7f, 0x89, 0xa4, 0xf7, 0xea, 0x97, - 0x82, 0x9d, 0x95, 0xdb, 0xbe, 0xf6, 0xdb, 0xe0, 0x9b, 0x9f, 0x69, 0x21, 0xa5, 0x6f, 0x9a, 0x7f, - 0xd7, 0x15, 0xd5, 0x2b, 0x49, 0x7c, 0x9d, 0x24, 0xbc, 0x12, 0xd5, 0x5e, 0x9b, 0xf1, 0x7c, 0x14, - 0xd3, 0xd2, 0xd2, 0x49, 0xd2, 0xf2, 0xae, 0x13, 0xae, 0xa9, 0x25, 0x93, 0x82, 0x5e, 0xdb, 0x67, - 0xc3, 0x6f, 0x8d, 0x5c, 0x85, 0x76, 0xd6, 0x27, 0x88, 0x10, 0x91, 0x20, 0xfd, 0x51, 0x3a, 0xe0, - 0x94, 0x84, 0x20, 0xb3, 0x76, 0x3d, 0xdf, 0xc4, 0xb2, 0x9e, 0x57, 0x25, 0xae, 0x51, 0x2e, 0xba, - 0xe2, 0x44, 0x65, 0xde, 0x7c, 0xae, 0x09, 0xca, 0xed, 0xa7, 0xa7, 0x4e, 0x5f, 0x0e, 0x1a, 0x56, - 0x35, 0xbc, 0x57, 0xeb, 0x8a, 0xed, 0x27, 0x9b, 0xfd, 0x5e, 0xba, 0x3a, 0x55, 0xe2, 0xa5, 0x6d, - 0xad, 0x57, 0xe2, 0x76, 0x93, 0xbb, 0x7b, 0xe2, 0x84, 0x2a, 0xe8, 0xaf, 0x27, 0x04, 0xe2, 0x58, - 0xdd, 0x8d, 0x0f, 0x6c, 0xba, 0xd1, 0x1c, 0x65, 0x2d, 0xba, 0xaf, 0x36, 0x37, 0xa4, 0xdf, 0x82, - 0x3b, 0x53, 0x30, 0x96, 0x5f, 0x2d, 0x2a, 0x5f, 0x13, 0xb7, 0x49, 0x8c, 0x6e, 0x8b, 0xf9, 0x29, - 0x52, 0x7f, 0x08, 0x49, 0x96, 0xed, 0xef, 0x55, 0xd7, 0x09, 0xd5, 0x4b, 0xbd, 0xda, 0xbe, 0x43, - 0x3d, 0xfe, 0x28, 0xe4, 0xcf, 0x75, 0xf8, 0x25, 0xa7, 0xaa, 0x63, 0xaa, 0x5f, 0x1e, 0x20, 0x2b, - 0xb2, 0xbd, 0xdf, 0xc1, 0x14, 0xbb, 0xdd, 0xf7, 0x26, 0x13, 0x7f, 0x7a, 0xbc, 0x9d, 0x91, 0x69, - 0x7c, 0x57, 0x2e, 0x72, 0xe5, 0xf6, 0x44, 0xdb, 0x7a, 0xe3, 0xad, 0x50, 0xda, 0x52, 0xa8, 0x4f, - 0x27, 0xff, 0x35, 0x84, 0x87, 0x5f, 0x27, 0x93, 0xae, 0x5a, 0x1e, 0xfe, 0x2e, 0xd5, 0xfa, 0x6d, - 0x79, 0xaa, 0xad, 0x57, 0x72, 0x7f, 0xe4, 0x8f, 0x0e, 0x8f, 0xb6, 0xf9, 0x0a, 0x76, 0xd8, 0xeb, - 0xbf, 0x36, 0x79, 0xb2, 0x31, 0x43, 0xf5, 0xea, 0xe1, 0x3b, 0x6d, 0xf6, 0xab, 0xe2, 0xb9, 0x3e, - 0xc6, 0x66, 0x35, 0xcb, 0x6a, 0xd7, 0xde, 0x6d, 0xfc, 0x99, 0xf3, 0xf2, 0x9d, 0x3a, 0x50, 0xdf, - 0x12, 0x2b, 0x4d, 0xa2, 0x7d, 0x6f, 0x88, 0x9e, 0x5a, 0x1b, 0x75, 0x52, 0x73, 0x6b, 0x5f, 0x37, - 0x2f, 0xbe, 0x2c, 0x91, 0xac, 0x84, 0xf0, 0x59, 0x2b, 0x95, 0x2a, 0x10, 0xd5, 0x07, 0x4a, 0x9e, - 0x5e, 0x24, 0xd0, 0x98, 0x33, 0x94, 0xfc, 0xac, 0x78, 0x9b, 0xa1, 0xf4, 0x93, 0xf9, 0x7b, 0x4b, - 0xe5, 0xe4, 0xf2, 0xf2, 0x6d, 0xbb, 0x66, 0xe2, 0x6b, 0xa6, 0x92, 0x58, 0xbe, 0x63, 0xea, 0xa5, - 0xec, 0x41, 0x3d, 0x67, 0xe0, 0x88, 0xb2, 0x67, 0x97, 0xc1, 0x17, 0x9b, 0x1e, 0xb8, 0xb1, 0x1a, - 0xad, 0x55, 0x7c, 0x97, 0xd9, 0x6a, 0xfc, 0xb7, 0xbb, 0x82, 0xae, 0xc4, 0xbb, 0x56, 0x82, 0x7d, - 0xde, 0x9c, 0x39, 0xcb, 0x4d, 0xa5, 0x6b, 0xcb, 0x69, 0xac, 0x21, 0xc8, 0x21, 0xdf, 0x7d, 0xdd, - 0xf2, 0xf6, 0x75, 0x4b, 0x3f, 0x15, 0x69, 0xf2, 0x33, 0x4b, 0xe6, 0xe8, 0x8c, 0xa5, 0xf3, 0x15, - 0xe9, 0xa6, 0xfb, 0xd2, 0x4b, 0xe2, 0x7a, 0x49, 0x5b, 0x4d, 0xb1, 0xdc, 0x11, 0x88, 0x5a, 0xaf, - 0x91, 0x5c, 0xa2, 0x77, 0x71, 0xdc, 0xd4, 0x3d, 0xc3, 0xbc, 0x84, 0xad, 0x2f, 0x12, 0x72, 0x7f, - 0xdd, 0xe3, 0x39, 0x84, 0x56, 0xbe, 0x52, 0x2a, 0xe4, 0xe8, 0xf2, 0x84, 0xb9, 0x8a, 0xeb, 0x9b, - 0x82, 0xda, 0x5b, 0x77, 0x79, 0x92, 0xb9, 0x0c, 0xde, 0xab, 0x82, 0x4b, 0xb7, 0x6d, 0xbe, 0x4b, - 0x56, 0xeb, 0x82, 0x33, 0xe6, 0xc7, 0xfd, 0x72, 0x75, 0x57, 0xc5, 0xf7, 0x7d, 0x5c, 0xbc, 0xa4, - 0x6a, 0xb7, 0xc4, 0x1d, 0x57, 0x95, 0x9b, 0x7c, 0x47, 0xc1, 0x26, 0xb2, 0x67, 0x4d, 0xc1, 0x19, - 0x09, 0xfd, 0x7c, 0x4c, 0xbb, 0xdf, 0x7f, 0x04, 0xf7, 0x3f, 0x1d, 0x5a, 0xf7, 0x73, 0xe4, 0x8b, - 0x3e, 0x32, 0x94, 0xac, 0x6e, 0x7e, 0x73, 0xed, 0x3f, 0x5d, 0xbf, 0xc4, 0x92, 0xad, 0xab, 0x78, - 0xaf, 0xc1, 0x19, 0x5d, 0xab, 0x1e, 0x15, 0xc3, 0xe4, 0x6d, 0x3b, 0xca, 0xc7, 0xa9, 0x98, 0x51, - 0x8e, 0xff, 0xbe, 0x5c, 0xcd, 0xcb, 0xc9, 0x6c, 0xec, 0x7e, 0x3e, 0xc7, 0x69, 0x50, 0xd0, 0xe7, - 0xce, 0x31, 0x57, 0x82, 0x52, 0xd0, 0xde, 0x95, 0xfd, 0xf0, 0x95, 0x33, 0x33, 0x33, 0x0f, 0x36, - 0x7c, 0xd3, 0x61, 0xb3, 0xf0, 0x9d, 0xbb, 0x8e, 0x5d, 0xda, 0x55, 0xc1, 0x55, 0x9a, 0x55, 0x47, - 0x9e, 0xb3, 0x63, 0x71, 0x57, 0xc4, 0xdd, 0xe0, 0xfc, 0xbe, 0xf8, 0x23, 0xa9, 0x7d, 0x36, 0x57, - 0x05, 0x5d, 0xa5, 0xb4, 0xfd, 0x56, 0x2f, 0x88, 0xb4, 0xd7, 0x2f, 0xfc, 0x12, 0x6b, 0x78, 0x3e, - 0x0a, 0x48, 0x5e, 0xfd, 0x6d, 0xae, 0x9d, 0x7c, 0x99, 0xf3, 0x5d, 0x1f, 0xab, 0x82, 0x6d, 0xbb, - 0x75, 0xaf, 0x57, 0x52, 0xaf, 0xe0, 0x8e, 0xd5, 0xb6, 0xde, 0xb8, 0x4c, 0x97, 0x6d, 0xe4, 0x65, - 0x0f, 0x5d, 0x62, 0xf8, 0xa9, 0x71, 0x2e, 0xd5, 0x7c, 0x25, 0xd2, 0x49, 0xab, 0x55, 0xc2, 0x27, - 0x76, 0xde, 0xb2, 0xe2, 0x4b, 0xaf, 0x82, 0xca, 0xed, 0xee, 0x92, 0x4f, 0x7e, 0x6a, 0xe0, 0xa7, - 0x5a, 0xae, 0xfb, 0xb6, 0x57, 0x5f, 0x04, 0x84, 0xcc, 0xc6, 0x2f, 0x8a, 0x93, 0x14, 0xfe, 0x4f, - 0xf3, 0xff, 0x85, 0x32, 0x7e, 0x23, 0x98, 0x9f, 0xcf, 0xe7, 0xe9, 0xf3, 0x7d, 0x62, 0xf8, 0x25, - 0xcf, 0x9e, 0xf2, 0x32, 0xcf, 0xae, 0xbe, 0x2e, 0x46, 0x58, 0xc6, 0xb2, 0xd3, 0x96, 0x55, 0xc1, - 0x1e, 0x9a, 0x1a, 0xbf, 0xc9, 0xcc, 0xc7, 0xd1, 0x22, 0xae, 0x20, 0xf7, 0xb7, 0x4d, 0x39, 0x39, - 0x44, 0x53, 0x79, 0x39, 0x4b, 0xbb, 0x84, 0xb8, 0x22, 0xd6, 0xdb, 0xfc, 0xdc, 0xde, 0x27, 0x84, - 0xa5, 0xd9, 0xa4, 0xef, 0xf8, 0xbe, 0xd1, 0x5e, 0xa9, 0xe9, 0x78, 0xea, 0xef, 0x59, 0xbb, 0xcf, - 0xdb, 0xf0, 0x43, 0x15, 0xb7, 0x77, 0x5f, 0x44, 0xde, 0xfa, 0xbc, 0x33, 0xd5, 0xe4, 0xea, 0xf0, - 0x9f, 0x57, 0xfb, 0xee, 0x98, 0xde, 0xf6, 0xd3, 0x89, 0xeb, 0x14, 0x47, 0x35, 0xef, 0x09, 0xf5, - 0xeb, 0xe1, 0x3e, 0x4f, 0x6d, 0xbc, 0x57, 0x57, 0x8e, 0xe4, 0xbb, 0xeb, 0xab, 0xc4, 0xf5, 0x78, - 0x6f, 0x96, 0xf7, 0xae, 0xbd, 0x2f, 0x57, 0xae, 0xb2, 0x88, 0x80, 0x00, 0x00, 0x00, 0x01, 0x41, - 0x9a, 0x2e, 0x17, 0x30, 0xeb, 0xc6, 0x1a, 0x33, 0xde, 0x39, 0x58, 0x79, 0x23, 0x45, 0x36, 0x3a, - 0xe1, 0x4d, 0x36, 0xbc, 0xbe, 0x4d, 0x4f, 0x1e, 0xa7, 0x34, 0xbf, 0x04, 0x47, 0x5d, 0x62, 0x77, - 0xe1, 0x13, 0x3d, 0x97, 0x69, 0xdb, 0x4b, 0xf0, 0x53, 0x26, 0x42, 0x9a, 0x09, 0xa7, 0xa6, 0x76, - 0x1c, 0xc3, 0x1b, 0x9f, 0xdf, 0x08, 0x8b, 0x97, 0x7b, 0x6a, 0xa9, 0xa7, 0x7f, 0x1f, 0xee, 0xfc, - 0xbd, 0x6d, 0x2f, 0x82, 0x41, 0x4c, 0x6d, 0x47, 0x99, 0x30, 0xf0, 0xdd, 0xb7, 0x9c, 0x16, 0xe9, - 0xaf, 0xf8, 0x9d, 0x69, 0xd3, 0xaf, 0x82, 0x43, 0xab, 0x77, 0xcf, 0x7c, 0x16, 0x92, 0xdc, 0xb6, - 0x79, 0x23, 0x63, 0x23, 0xb2, 0xf8, 0x4b, 0x2b, 0x11, 0x9a, 0x26, 0x5d, 0x24, 0xe2, 0x27, 0x41, - 0x53, 0x2f, 0xe6, 0x11, 0x7b, 0xf8, 0x2e, 0x2e, 0xae, 0xee, 0xef, 0x62, 0xa1, 0x1a, 0xd2, 0xaf, - 0x45, 0x47, 0x78, 0x62, 0x88, 0xdc, 0x4c, 0x25, 0x55, 0xd6, 0xbe, 0x11, 0x04, 0x45, 0x55, 0x55, - 0x3a, 0x22, 0xff, 0x08, 0x31, 0x12, 0xcb, 0x5c, 0x12, 0x0e, 0xb3, 0x72, 0xbc, 0x83, 0x2b, 0x82, - 0xee, 0x6d, 0x44, 0xdb, 0x23, 0xee, 0xe3, 0xc1, 0x47, 0x34, 0x91, 0x52, 0x9a, 0x2f, 0xf0, 0xc1, - 0x68, 0x99, 0x25, 0xb6, 0xd2, 0xb4, 0x8e, 0x6a, 0x7f, 0x84, 0xe7, 0xff, 0xa2, 0x2e, 0x78, 0x7c, - 0x89, 0x24, 0xd4, 0xf1, 0x4b, 0x48, 0x6b, 0x4e, 0x96, 0x29, 0xab, 0x7f, 0xae, 0x0b, 0x6b, 0xa7, - 0x36, 0xa7, 0xc1, 0xf0, 0xc8, 0x97, 0xcb, 0x8f, 0x9b, 0xaf, 0xfe, 0x30, 0xd5, 0x64, 0xc6, 0xfb, - 0x24, 0xb4, 0xaa, 0x9b, 0xf8, 0x2b, 0x2d, 0xd1, 0x5a, 0xab, 0x22, 0x69, 0x23, 0x16, 0xc7, 0xc1, - 0x35, 0xe8, 0x8b, 0x6f, 0xef, 0xa4, 0x95, 0x73, 0xe0, 0x9f, 0xab, 0x52, 0x7b, 0x3c, 0xbe, 0x09, - 0x77, 0x45, 0xad, 0xa8, 0x2b, 0x84, 0x0d, 0x25, 0x4d, 0x27, 0x5d, 0x8c, 0xf9, 0xa2, 0x3e, 0x7e, - 0xf2, 0xc1, 0x2a, 0x7e, 0xc2, 0xba, 0xaf, 0xab, 0xdf, 0x56, 0x2b, 0x82, 0xd0, 0xb7, 0x1f, 0xbb, - 0x4e, 0x9b, 0xfc, 0x14, 0xf5, 0x4b, 0xa7, 0x4f, 0xe6, 0xfd, 0xf0, 0x47, 0x59, 0xfa, 0xbb, 0xe4, - 0x2d, 0x5b, 0x7f, 0x10, 0x66, 0xe8, 0xea, 0xb5, 0xf8, 0xa3, 0xa7, 0x4e, 0x9b, 0xa6, 0xa4, 0xe0, - 0x8e, 0x9a, 0x6f, 0x4a, 0xfc, 0x9a, 0xd3, 0xf0, 0x4e, 0x4a, 0x26, 0xdd, 0xbb, 0x6d, 0xf7, 0xc1, - 0x1d, 0xe8, 0xbd, 0xf0, 0x99, 0x6d, 0x5a, 0x36, 0x1b, 0xa5, 0xf9, 0x64, 0x7a, 0x26, 0xcc, 0x97, - 0xcc, 0x47, 0x43, 0x6a, 0xf1, 0x11, 0x18, 0x41, 0x0f, 0xaa, 0x88, 0xa2, 0x3b, 0xe8, 0x44, 0xbe, - 0x52, 0x69, 0x3f, 0x84, 0xca, 0x4b, 0x74, 0x56, 0x59, 0xa3, 0xe0, 0xb8, 0x8c, 0x91, 0x36, 0x93, - 0x6b, 0xcb, 0xef, 0x9e, 0x0d, 0xf8, 0x9e, 0x6a, 0xaa, 0x6d, 0xe4, 0xe6, 0x2b, 0xa2, 0x69, 0xb5, - 0xca, 0x54, 0x9e, 0xdf, 0x82, 0xe3, 0x36, 0xd7, 0xba, 0x6f, 0xf0, 0x43, 0x6d, 0xf3, 0x34, 0x3d, - 0xbe, 0x2a, 0x7c, 0x9d, 0xb7, 0x7a, 0xe8, 0xe7, 0x3f, 0xc1, 0x29, 0x97, 0x36, 0x31, 0x93, 0x36, - 0x58, 0x7c, 0xa4, 0x6f, 0x19, 0xbb, 0xc4, 0xd1, 0xd0, 0x64, 0xb2, 0x15, 0x88, 0xf9, 0x83, 0x8f, - 0xb8, 0x33, 0xe4, 0xea, 0xa1, 0x0e, 0x6e, 0xee, 0x05, 0x7e, 0x08, 0xc4, 0x95, 0x9c, 0xfc, 0xf8, - 0x53, 0x74, 0xe9, 0x24, 0x95, 0x3a, 0x79, 0x19, 0x4b, 0x20, 0xbe, 0xe4, 0xff, 0xc5, 0xd0, 0xe5, - 0x6f, 0x53, 0x6f, 0x8a, 0x2d, 0x69, 0x24, 0xd9, 0x72, 0xfc, 0x45, 0xd7, 0x2e, 0x93, 0x52, 0x8b, - 0xc1, 0x31, 0x53, 0x3f, 0xd6, 0xbe, 0xf9, 0x29, 0xe9, 0xf8, 0xca, 0x6e, 0x5e, 0xfd, 0x7d, 0x53, - 0xe5, 0x73, 0x7b, 0xcf, 0xbe, 0x2c, 0x56, 0xd8, 0xbd, 0x4d, 0x85, 0xfe, 0x09, 0xb9, 0xfd, 0xf1, - 0x6f, 0xf7, 0xcb, 0xd4, 0xdb, 0x89, 0x85, 0x0b, 0x2f, 0xa2, 0xb4, 0xa9, 0x35, 0x1d, 0x9a, 0x76, - 0x0a, 0x86, 0x7f, 0x03, 0x81, 0xf7, 0x12, 0x24, 0x10, 0xd3, 0xdf, 0xbe, 0x27, 0x93, 0x39, 0x79, - 0x77, 0xc5, 0x11, 0xa7, 0x45, 0x7c, 0xd0, 0xf2, 0xcd, 0x96, 0x24, 0xf8, 0x25, 0x3a, 0x4d, 0xc9, - 0xb4, 0xd2, 0x49, 0xdf, 0x0a, 0x09, 0x27, 0x3e, 0x4d, 0x4e, 0xdb, 0x4f, 0x9b, 0x1a, 0xb4, 0xd7, - 0x24, 0xf8, 0x2d, 0xa5, 0x73, 0xe3, 0x4d, 0x6e, 0x7c, 0x14, 0x08, 0x7c, 0xd9, 0xc5, 0xdd, 0x2e, - 0x08, 0x2f, 0xa1, 0x0f, 0xf0, 0xd8, 0x93, 0x3e, 0x74, 0x16, 0x7f, 0x1b, 0xd7, 0xf0, 0x4f, 0x24, - 0x43, 0x6a, 0xd6, 0x9a, 0x97, 0xed, 0xf0, 0x54, 0x4e, 0x86, 0x66, 0x17, 0x08, 0xb3, 0x9a, 0x09, - 0x73, 0x8f, 0x0a, 0x69, 0x27, 0x48, 0xb0, 0xb2, 0x84, 0xd1, 0xa3, 0xda, 0x6f, 0x17, 0xc6, 0xe5, - 0x90, 0xce, 0x97, 0x77, 0x35, 0x76, 0x8b, 0x47, 0x3c, 0xd2, 0x64, 0xa8, 0xdc, 0x53, 0x09, 0xfb, - 0x6e, 0xa7, 0xea, 0x6d, 0x67, 0xf0, 0xed, 0xa1, 0xac, 0xe1, 0x52, 0xea, 0xd4, 0x22, 0xf9, 0xa3, - 0x5b, 0x64, 0x94, 0x5f, 0xe1, 0x4a, 0x59, 0x60, 0xd6, 0x3e, 0x91, 0x31, 0x3c, 0xe5, 0xf4, 0x56, - 0x3e, 0x0a, 0xca, 0x9b, 0xda, 0x6e, 0x79, 0x67, 0xf6, 0xf2, 0xf9, 0x8c, 0x89, 0x2a, 0x7e, 0x0a, - 0x25, 0xc7, 0xed, 0xb7, 0x49, 0xfe, 0x12, 0xa4, 0xba, 0x5b, 0xf8, 0x52, 0x68, 0x13, 0xea, 0xda, - 0x4d, 0xba, 0x5d, 0xaa, 0xb9, 0xf1, 0x85, 0xe7, 0xdb, 0xdd, 0xa7, 0xc3, 0x4b, 0x7f, 0x04, 0xb2, - 0xc5, 0xdf, 0x25, 0x0b, 0xdb, 0xb1, 0xf0, 0x47, 0xb9, 0xb3, 0xc3, 0xeb, 0x97, 0xc1, 0x4e, 0x6f, - 0x2e, 0x26, 0x96, 0xe9, 0x69, 0xb9, 0xef, 0x82, 0x5a, 0x6d, 0x73, 0xe6, 0xe3, 0xc1, 0x2c, 0xf0, - 0x49, 0xbb, 0x2a, 0xb6, 0xe1, 0x70, 0xf9, 0xa9, 0x12, 0xaf, 0xe9, 0x45, 0x69, 0x1b, 0x67, 0xb9, - 0xf1, 0xfc, 0x67, 0xda, 0xe8, 0x11, 0x80, 0xd0, 0x1b, 0xe8, 0x21, 0x14, 0xbc, 0xa1, 0xa5, 0x5c, - 0x9c, 0xb7, 0xbf, 0xdd, 0x57, 0x71, 0x16, 0x58, 0x38, 0xca, 0x7e, 0x96, 0x27, 0xf6, 0x4b, 0xdc, - 0x4c, 0x40, 0x93, 0x5a, 0x93, 0x38, 0x81, 0x30, 0x8f, 0x42, 0x73, 0xfd, 0x5e, 0xf9, 0x3b, 0x6b, - 0xe1, 0x2e, 0xdb, 0x76, 0xed, 0xfb, 0x2b, 0xad, 0xfd, 0x70, 0x8e, 0xec, 0x66, 0xaa, 0xf9, 0x2b, - 0xaa, 0xe3, 0xf7, 0x6b, 0x58, 0x8f, 0x7e, 0x7f, 0xe5, 0xea, 0xc8, 0x44, 0x40, 0x9a, 0xe2, 0xb7, - 0xb9, 0xbf, 0xe2, 0x25, 0xa7, 0x4d, 0xb0, 0xf7, 0x04, 0x85, 0x55, 0x5c, 0xab, 0x88, 0xd5, 0xaa, - 0xd3, 0xae, 0x33, 0xaa, 0xa7, 0x4f, 0x5a, 0xac, 0x5e, 0xb8, 0xb1, 0x2f, 0x75, 0xa6, 0xb5, 0xca, - 0x47, 0xbb, 0xfb, 0x23, 0x6b, 0xfb, 0xd2, 0xba, 0xe1, 0x23, 0xdd, 0xfb, 0xb5, 0xe1, 0x31, 0x09, - 0x29, 0xe1, 0xba, 0x2d, 0x76, 0x59, 0x33, 0x5d, 0x7d, 0x5c, 0x14, 0x67, 0xd3, 0xc7, 0x93, 0xa1, - 0xc7, 0x3b, 0xe5, 0xb4, 0xd3, 0xfc, 0x16, 0x90, 0x4e, 0x15, 0x37, 0x59, 0xbb, 0x26, 0x71, 0x22, - 0x07, 0x49, 0x89, 0x33, 0xea, 0xba, 0xa7, 0xe2, 0x60, 0x9c, 0xa1, 0x4a, 0xdb, 0x32, 0x8a, 0xb5, - 0x6f, 0x89, 0x23, 0x62, 0x3c, 0xde, 0x3e, 0xaf, 0xea, 0xdf, 0x11, 0x68, 0xf9, 0x9f, 0x3f, 0x96, - 0x46, 0x4a, 0x20, 0x75, 0xd6, 0x11, 0x7d, 0x1e, 0x5f, 0x7a, 0xb2, 0xf8, 0x4b, 0x4e, 0x9a, 0x3a, - 0xfd, 0x62, 0xf8, 0x25, 0x2b, 0x47, 0xf6, 0xa9, 0xd2, 0xca, 0xb8, 0x2a, 0xbd, 0x72, 0xe6, 0xde, - 0xfa, 0xf8, 0x5a, 0x5c, 0xad, 0xed, 0x66, 0x4f, 0x59, 0xbf, 0xfc, 0xb7, 0xbf, 0xd5, 0xc7, 0x97, - 0x27, 0xfc, 0x10, 0xc9, 0xbb, 0x6c, 0x17, 0x04, 0x25, 0x93, 0x0d, 0xe5, 0xfe, 0x22, 0x9d, 0x2b, - 0xed, 0xf8, 0x22, 0xaa, 0xf5, 0xf0, 0x47, 0xad, 0x4d, 0x5f, 0x09, 0xd5, 0xe9, 0x3b, 0xfe, 0x22, - 0xd3, 0x5b, 0x4d, 0x6b, 0x89, 0x15, 0x41, 0x9e, 0x14, 0x98, 0x8d, 0x03, 0xaf, 0xae, 0x5a, 0x54, - 0x36, 0xbc, 0x16, 0xef, 0x6a, 0xef, 0x38, 0x3e, 0x23, 0xb6, 0xa4, 0xf9, 0x52, 0x71, 0x04, 0x77, - 0xdd, 0xef, 0xe6, 0xbb, 0xeb, 0x97, 0x53, 0xff, 0xc8, 0x7b, 0x77, 0xf1, 0x84, 0xc2, 0xcd, 0xde, - 0x58, 0xdb, 0xad, 0x4a, 0xa2, 0x6a, 0xa4, 0xcf, 0x73, 0x62, 0xcc, 0xbc, 0x29, 0x46, 0x8e, 0x3a, - 0x81, 0xb8, 0xbb, 0x2c, 0xd3, 0x1f, 0xfe, 0xb4, 0xc3, 0xae, 0x0c, 0xed, 0xf4, 0x36, 0xe3, 0x89, - 0x09, 0x8e, 0x95, 0x46, 0xe2, 0xbb, 0xf1, 0x20, 0xa2, 0xfb, 0x81, 0x8d, 0x60, 0xbb, 0xcb, 0x2a, - 0xb8, 0x7f, 0x04, 0xd5, 0x8e, 0x73, 0x70, 0x28, 0xe3, 0xa2, 0x78, 0xee, 0x8f, 0x28, 0xbe, 0x12, - 0x2d, 0x2a, 0x49, 0x6e, 0xf8, 0x6c, 0x95, 0xb6, 0xac, 0xc4, 0x75, 0x7f, 0xf0, 0x4e, 0x5a, 0xd5, - 0x2b, 0xd8, 0x2e, 0xc8, 0xf2, 0xbe, 0xb8, 0x25, 0x3b, 0x46, 0xf6, 0xed, 0x35, 0x99, 0xf0, 0x47, - 0xb9, 0xb7, 0x73, 0xe0, 0x8b, 0xb4, 0xfa, 0xf8, 0x2e, 0xb7, 0xa4, 0xd9, 0x3d, 0xe2, 0x5f, 0x84, - 0x4b, 0x49, 0xbe, 0x7d, 0x69, 0xbb, 0x7f, 0x0a, 0x49, 0xb7, 0x97, 0x52, 0xa7, 0x8e, 0x2e, 0x76, - 0xbf, 0x47, 0x2b, 0x89, 0x32, 0x7c, 0x14, 0x53, 0xa2, 0x37, 0xb4, 0x4e, 0xaf, 0x3d, 0x7c, 0xf2, - 0x14, 0xd4, 0xdf, 0xc9, 0xc5, 0xde, 0xb2, 0x62, 0x5f, 0x94, 0x89, 0x25, 0xfa, 0xfc, 0xf8, 0x24, - 0xbb, 0xee, 0x57, 0x13, 0xcf, 0x0b, 0x36, 0x69, 0x24, 0xb8, 0xbe, 0xeb, 0xaa, 0x88, 0xec, 0x96, - 0x97, 0xe1, 0x0b, 0xee, 0xef, 0xbd, 0xfe, 0x3a, 0xa4, 0xfe, 0xa8, 0x75, 0x7a, 0xe6, 0xea, 0x6c, - 0xf1, 0x3b, 0xbf, 0x3c, 0xbe, 0x5a, 0xaf, 0xe3, 0xae, 0x95, 0x57, 0xaa, 0xd6, 0xf8, 0xb1, 0x34, - 0xeb, 0x74, 0xf8, 0x98, 0x4c, 0xb7, 0x49, 0xad, 0x5b, 0x5c, 0x11, 0x0e, 0x2d, 0xc0, 0xb6, 0xf8, - 0xbd, 0x6c, 0x79, 0x3d, 0x44, 0x48, 0x5b, 0x45, 0x15, 0xe2, 0x21, 0x2c, 0x99, 0x9f, 0xd0, 0x57, - 0xcb, 0xb7, 0x6d, 0xf2, 0x6a, 0x77, 0xfe, 0x23, 0x45, 0x19, 0xa4, 0xb9, 0x40, 0x9a, 0x1c, 0x0c, - 0xf1, 0x35, 0x99, 0x8c, 0x6b, 0x34, 0x5b, 0xe0, 0x8f, 0xaa, 0x4f, 0x5c, 0x34, 0x57, 0xdd, 0xf4, - 0xd4, 0x9f, 0xd7, 0x62, 0x26, 0xf6, 0x2c, 0x4d, 0x5e, 0xb8, 0x8a, 0xa7, 0x4f, 0x2b, 0x0b, 0xe0, - 0xa8, 0xeb, 0xbd, 0xd3, 0xe5, 0x64, 0x9f, 0x1a, 0x78, 0x98, 0x24, 0xaa, 0x5f, 0x7c, 0x51, 0x87, - 0x29, 0xcc, 0xcc, 0x44, 0x7a, 0x7e, 0x8f, 0xd5, 0x11, 0x0e, 0x47, 0x84, 0x2f, 0x4d, 0xdc, 0x79, - 0x66, 0xc3, 0x8c, 0x98, 0xf0, 0x47, 0x5d, 0xd2, 0xb0, 0xc7, 0x13, 0x97, 0x37, 0x4f, 0x5c, 0x93, - 0xfb, 0x77, 0xc2, 0x53, 0x66, 0xf9, 0x98, 0xf9, 0x34, 0xab, 0xe0, 0xaa, 0xdd, 0xbb, 0xba, 0x2d, - 0x6a, 0xff, 0x12, 0x47, 0xde, 0xe9, 0xd7, 0x2c, 0xdf, 0xf8, 0x2b, 0x3c, 0xba, 0x6d, 0xf9, 0xb1, - 0xb5, 0xf0, 0x7c, 0x60, 0x97, 0xa6, 0xd9, 0x3a, 0x71, 0xd3, 0xa7, 0x59, 0xfa, 0xfa, 0x1d, 0xdf, - 0x05, 0x05, 0x54, 0xb9, 0xb7, 0xc2, 0xa2, 0x63, 0x32, 0x66, 0xaa, 0x97, 0x63, 0x7a, 0xd7, 0xc1, - 0x39, 0xed, 0xd2, 0xbb, 0x4f, 0x1f, 0xe3, 0xcc, 0xfb, 0x8a, 0xb2, 0x4a, 0x06, 0xd9, 0xa6, 0xf6, - 0xc6, 0xdf, 0x8c, 0xcb, 0xf7, 0x92, 0x2d, 0x1a, 0x00, 0xf9, 0xee, 0x61, 0x08, 0xa6, 0x68, 0xaf, - 0xe2, 0xc8, 0x88, 0xe6, 0xb4, 0xea, 0x87, 0xe1, 0x42, 0xb7, 0x7e, 0xa7, 0xca, 0x62, 0x68, 0x28, - 0x1b, 0x7b, 0xf3, 0xfc, 0xa2, 0x6a, 0xbf, 0x04, 0xb3, 0x6e, 0xbc, 0xec, 0x27, 0x4b, 0x8a, 0x10, - 0xef, 0x49, 0x65, 0xed, 0xf8, 0x52, 0x7c, 0x1e, 0xe9, 0x59, 0xe2, 0x4a, 0xf7, 0x0c, 0x63, 0xbd, - 0x27, 0xcb, 0x69, 0xaa, 0xa4, 0x5e, 0x2a, 0xf9, 0x3d, 0x35, 0xf8, 0x27, 0xa4, 0xf5, 0xcb, 0xbe, - 0xf8, 0x23, 0xdd, 0x24, 0xfb, 0x88, 0x8d, 0x97, 0x1f, 0x5a, 0xb0, 0xe6, 0x42, 0xc7, 0x6a, 0xdd, - 0x84, 0x2e, 0xcc, 0x1e, 0xf6, 0x14, 0x4c, 0x90, 0x3c, 0x64, 0xd7, 0x75, 0x53, 0xf0, 0x57, 0xcd, - 0xff, 0xa9, 0xa2, 0x33, 0x83, 0xc5, 0xf0, 0x55, 0x7b, 0x1e, 0xc3, 0x2e, 0xf2, 0x99, 0x3e, 0xc3, - 0xb9, 0x7c, 0x16, 0xc6, 0xc7, 0x0f, 0x53, 0x68, 0x50, 0xe2, 0xd6, 0x56, 0xcf, 0x82, 0x73, 0xd2, - 0xa4, 0xad, 0xee, 0x57, 0x16, 0x23, 0x21, 0x24, 0xa8, 0xcb, 0x1f, 0xcd, 0x49, 0x34, 0x7f, 0x04, - 0xa5, 0x7a, 0x7b, 0x72, 0xeb, 0xfc, 0x11, 0x5c, 0xb2, 0xdf, 0xe3, 0xb6, 0xd3, 0xa7, 0x4e, 0x9d, - 0xaf, 0x93, 0x97, 0xd7, 0x73, 0xe3, 0x47, 0xd7, 0xe7, 0x84, 0xf4, 0xda, 0x8e, 0xad, 0xff, 0x1d, - 0x7d, 0xaa, 0xa5, 0x4d, 0x27, 0xfb, 0xa7, 0x7b, 0xe2, 0x8a, 0x92, 0x7b, 0x5a, 0x7e, 0x3e, 0xec, - 0x99, 0xb3, 0x9b, 0x0d, 0x95, 0x53, 0x26, 0xc1, 0xf8, 0x42, 0x59, 0x67, 0xb6, 0x91, 0x63, 0xbf, - 0x84, 0x2e, 0xc9, 0x9d, 0x3d, 0x33, 0xf6, 0x37, 0xff, 0xc1, 0x6f, 0x2b, 0x26, 0x81, 0xfe, 0xba, - 0xf8, 0xe3, 0x26, 0xdf, 0x26, 0xbe, 0xa9, 0xfe, 0x6d, 0xbb, 0x7e, 0x0a, 0xca, 0xef, 0xbb, 0x5b, - 0x4d, 0x6c, 0x4b, 0xc5, 0x08, 0xad, 0x6b, 0x6f, 0xdd, 0x6b, 0xf1, 0xf5, 0xeb, 0x55, 0x5a, 0xa4, - 0xbe, 0x51, 0x78, 0xbf, 0xc2, 0x42, 0x1a, 0x55, 0xe9, 0x25, 0xe0, 0x8f, 0xa6, 0x9b, 0x1f, 0x57, - 0x7c, 0x85, 0xb1, 0x4e, 0xa3, 0xcb, 0xda, 0x27, 0xc4, 0xc9, 0x23, 0x3a, 0xfc, 0x41, 0x8c, 0x91, - 0xfe, 0xd7, 0x15, 0xba, 0xe0, 0xa8, 0x84, 0x82, 0x37, 0x2d, 0x76, 0xa5, 0x2d, 0xd6, 0x31, 0x13, - 0xdf, 0xe2, 0x0b, 0xcf, 0x0a, 0xa7, 0x4f, 0xcc, 0x5e, 0x7f, 0xe5, 0x36, 0xab, 0xe3, 0x23, 0xa3, - 0x41, 0x4d, 0x1e, 0x7d, 0x7a, 0xe6, 0xf8, 0x31, 0xa9, 0x97, 0xc6, 0x34, 0xca, 0x75, 0x74, 0xf0, - 0x4d, 0x85, 0x42, 0x29, 0x9e, 0x7b, 0x93, 0x16, 0xbe, 0x38, 0xe9, 0x25, 0xda, 0xa6, 0x56, 0xff, - 0x08, 0xe4, 0x85, 0x2b, 0x54, 0x9e, 0x9f, 0xc1, 0x25, 0xb6, 0xbe, 0xae, 0xc9, 0xcd, 0x33, 0xf7, - 0x67, 0xaa, 0xe5, 0xad, 0x7e, 0x43, 0x99, 0xb7, 0xf8, 0x9e, 0x9b, 0xa5, 0xb5, 0xe4, 0x8e, 0x65, - 0xe8, 0x9f, 0x15, 0xb6, 0x9b, 0xd3, 0xb5, 0xe1, 0x1b, 0x4d, 0xed, 0x35, 0xad, 0x24, 0xbc, 0x25, - 0xa4, 0x94, 0x99, 0xfe, 0x30, 0xbb, 0xb5, 0x49, 0xa6, 0x93, 0x6f, 0xa5, 0x2c, 0x97, 0x09, 0x11, - 0x34, 0x8f, 0x9b, 0x76, 0xda, 0x27, 0x1f, 0x7d, 0x74, 0xd4, 0x9b, 0x97, 0x3e, 0x09, 0x6d, 0x6a, - 0xda, 0xd2, 0x83, 0xe5, 0xb6, 0x9e, 0xb9, 0x88, 0xdd, 0x8d, 0x7c, 0xdb, 0x74, 0x97, 0x05, 0x34, - 0xd0, 0xe9, 0xb7, 0x79, 0x3e, 0xb7, 0x04, 0xe1, 0x3f, 0x27, 0xa7, 0x5f, 0x36, 0xdb, 0xfc, 0x21, - 0x5d, 0x5b, 0xb9, 0x75, 0x53, 0x9f, 0x98, 0x4d, 0xb9, 0xf5, 0x76, 0x21, 0x28, 0xce, 0xcf, 0xef, - 0x4e, 0xab, 0x84, 0xf7, 0x7d, 0xd7, 0xe2, 0x64, 0x99, 0x6a, 0xcf, 0x26, 0x6b, 0xe0, 0x9e, 0xc9, - 0x26, 0xd9, 0x67, 0xce, 0x1f, 0x1f, 0x4b, 0x4d, 0x3a, 0xcc, 0x83, 0x93, 0xb7, 0xf9, 0xbc, 0x7b, - 0x2f, 0x13, 0x65, 0x66, 0x9b, 0xed, 0x2f, 0x2f, 0x4c, 0xfd, 0x70, 0x81, 0xe6, 0xcd, 0x36, 0xda, - 0x56, 0x9d, 0x2a, 0xe0, 0xaa, 0x4e, 0x5f, 0xb4, 0xa9, 0xa5, 0x9f, 0x7d, 0x5c, 0xa6, 0x36, 0x57, - 0xe0, 0x8c, 0x8e, 0xcb, 0xef, 0x8c, 0x17, 0x6d, 0xd5, 0x24, 0xe8, 0x8f, 0xf9, 0xb0, 0xfb, 0xbd, - 0xab, 0xe3, 0x36, 0xda, 0xe9, 0xa4, 0xe9, 0x37, 0x4d, 0x24, 0xd2, 0xf2, 0x58, 0xcf, 0x94, 0xfc, - 0x65, 0x33, 0x62, 0x7b, 0x54, 0xb4, 0x87, 0x2e, 0x47, 0x33, 0x1b, 0xe0, 0x8c, 0xd5, 0xa2, 0x72, - 0x4e, 0x5d, 0x13, 0xfc, 0x4e, 0x92, 0x6f, 0x3a, 0x8a, 0x0f, 0xc2, 0x27, 0x4d, 0x2d, 0x57, 0xb4, - 0xff, 0x1d, 0x49, 0x2c, 0x9b, 0xf3, 0x63, 0x5a, 0xe2, 0xf6, 0xa4, 0x8b, 0x19, 0xf3, 0xf8, 0x4f, - 0x49, 0xa2, 0xf3, 0xea, 0xd3, 0xf1, 0x96, 0xe7, 0x66, 0x96, 0xdd, 0x74, 0xd7, 0x43, 0x36, 0xf8, - 0x43, 0x59, 0x7a, 0x51, 0xcb, 0x9f, 0xa2, 0x7e, 0xd2, 0x5c, 0x15, 0xdb, 0xcb, 0xa8, 0x7a, 0x37, - 0x4a, 0x46, 0x58, 0xcf, 0x7c, 0x21, 0xa4, 0x94, 0x8f, 0x33, 0x34, 0xba, 0xbf, 0xc7, 0x49, 0x89, - 0x5e, 0xf3, 0xed, 0xa7, 0x4b, 0xc4, 0xf6, 0x9a, 0xd8, 0xd7, 0xc7, 0xe9, 0x52, 0x49, 0x2d, 0xa6, - 0xb1, 0x7c, 0xa2, 0x0d, 0x95, 0x9f, 0x93, 0xcb, 0xd7, 0x09, 0x71, 0xa7, 0xcd, 0x28, 0x27, 0xe6, - 0xbe, 0xeb, 0x11, 0x15, 0xc4, 0x4f, 0x06, 0x7b, 0x96, 0x2b, 0xe2, 0x62, 0x08, 0xf7, 0x45, 0x57, - 0xf9, 0xbc, 0x92, 0x05, 0xbd, 0x8d, 0xa7, 0x51, 0xbc, 0xc6, 0xdd, 0xc2, 0x1c, 0x9d, 0x57, 0xd7, - 0x08, 0x26, 0xea, 0xe5, 0x73, 0x13, 0x55, 0x3f, 0x57, 0x97, 0x84, 0x76, 0x9f, 0x1a, 0xc1, 0xbe, - 0xb1, 0x71, 0xf6, 0x03, 0xaa, 0x9e, 0x12, 0xb2, 0x76, 0x59, 0xb0, 0x2d, 0xf3, 0x38, 0x28, 0x89, - 0xbd, 0x5e, 0xfb, 0xee, 0xe5, 0xe5, 0xd3, 0xa4, 0x4e, 0x4d, 0x0e, 0x68, 0x71, 0x00, 0xa7, 0x5d, - 0xbb, 0x96, 0x9b, 0xdf, 0x17, 0xc7, 0x49, 0xfe, 0x89, 0xb9, 0x6f, 0xbb, 0xbe, 0x14, 0xe5, 0x3d, - 0xbb, 0x63, 0xba, 0xb4, 0x4f, 0x62, 0x1e, 0xf1, 0x3d, 0x95, 0x57, 0xf2, 0x65, 0xcf, 0xc2, 0x73, - 0xe5, 0x49, 0x8f, 0x7f, 0x84, 0xbb, 0x4d, 0xd6, 0xe0, 0x87, 0x82, 0x42, 0x6a, 0xbd, 0x15, 0xcc, - 0x2d, 0xdf, 0x5c, 0x9a, 0x6b, 0x02, 0xff, 0x62, 0xad, 0x3d, 0x76, 0x34, 0x99, 0xc4, 0xf3, 0x76, - 0xd5, 0xf2, 0x08, 0x5a, 0xa9, 0x39, 0x29, 0xdd, 0x30, 0xf7, 0x2d, 0xef, 0x0b, 0x72, 0xf7, 0x70, - 0xb7, 0x26, 0xb4, 0x82, 0xdc, 0xa5, 0x3f, 0xef, 0x9b, 0xa4, 0xa1, 0x4e, 0x13, 0xdd, 0xf4, 0x34, - 0xda, 0x27, 0x7a, 0x55, 0xf7, 0x6e, 0xf1, 0x7c, 0x9b, 0x6e, 0xdf, 0x97, 0x43, 0xaf, 0x93, 0x9f, - 0xfc, 0x7e, 0x76, 0xdb, 0x72, 0xbd, 0x0e, 0x39, 0x71, 0x3b, 0xf1, 0x76, 0x45, 0x84, 0xaf, 0xbb, - 0x1f, 0xcd, 0xa7, 0x4f, 0xc2, 0x56, 0xd8, 0xe7, 0x66, 0x99, 0x9b, 0x2b, 0x9a, 0xe8, 0x6d, 0xa1, - 0xae, 0xe7, 0xce, 0xf8, 0xa9, 0x58, 0x1e, 0xaf, 0x46, 0x66, 0x1c, 0xda, 0x4f, 0x8b, 0xcb, 0x2d, - 0x39, 0x21, 0x7d, 0x7b, 0xeb, 0x17, 0xc2, 0x74, 0xd2, 0xed, 0xc8, 0xc7, 0x9e, 0xaf, 0x2b, 0x1f, - 0xf0, 0x51, 0x56, 0xdb, 0x53, 0x63, 0x74, 0x68, 0x72, 0xae, 0x14, 0xb1, 0xae, 0xb4, 0xb9, 0x62, - 0xc9, 0x0e, 0x56, 0x08, 0xc9, 0x52, 0xb8, 0xa2, 0x4f, 0xd3, 0x9a, 0xb7, 0xf0, 0xa1, 0x78, 0xe5, - 0x1b, 0x5f, 0xe7, 0xf7, 0x33, 0x0c, 0x7c, 0x5f, 0x13, 0x9f, 0xf5, 0x65, 0xf1, 0x9d, 0xdd, 0xab, - 0xf2, 0xb2, 0xa9, 0xd1, 0x0f, 0x53, 0xcb, 0x4f, 0x06, 0xd9, 0xb8, 0xcd, 0xdd, 0x8d, 0x15, 0xa4, - 0x56, 0xd3, 0x91, 0x85, 0xd4, 0x5f, 0xc5, 0x46, 0x6f, 0x74, 0xb5, 0xa1, 0x97, 0x84, 0xae, 0x9b, - 0x59, 0xf7, 0x5d, 0x6b, 0xe2, 0xe9, 0xd3, 0xd8, 0xe3, 0x98, 0x37, 0x16, 0x46, 0xdb, 0xef, 0x2a, - 0x2f, 0x17, 0x4f, 0x3b, 0xb7, 0x1f, 0xc4, 0x95, 0xe9, 0xd0, 0x67, 0x65, 0xb7, 0xa1, 0xf2, 0x69, - 0x99, 0xb9, 0x38, 0x2b, 0xd2, 0xbb, 0xa1, 0xf3, 0xb1, 0xca, 0xf9, 0x48, 0xb2, 0x78, 0x9e, 0x13, - 0x2e, 0x66, 0x2f, 0xb1, 0xf8, 0x25, 0x93, 0x13, 0x7a, 0x9b, 0xad, 0xf7, 0xdd, 0x50, 0xf2, 0x70, - 0xa5, 0x8e, 0x89, 0xbb, 0x19, 0xbe, 0x3b, 0x75, 0xed, 0xa5, 0xe6, 0xf6, 0xdf, 0xe3, 0xed, 0x27, - 0xba, 0xcb, 0xcf, 0x9d, 0xcd, 0xcc, 0x44, 0xef, 0x5c, 0xb7, 0xb4, 0xeb, 0x8a, 0xe7, 0xe5, 0x63, - 0x72, 0xea, 0xe0, 0x98, 0xa7, 0xcf, 0xb4, 0xde, 0x5f, 0x09, 0xd8, 0xf7, 0x95, 0x86, 0x3d, 0x70, - 0x4b, 0xc9, 0xd3, 0x97, 0xf5, 0x5c, 0xdb, 0x6b, 0x11, 0xc5, 0xf3, 0x7b, 0x1b, 0xb1, 0xc9, 0xc8, - 0x44, 0x9a, 0xdf, 0x05, 0x65, 0x4d, 0xc9, 0xfb, 0xdb, 0xb6, 0xbe, 0xfb, 0x91, 0xae, 0xd7, 0xc7, - 0xc3, 0xea, 0xdb, 0xd9, 0xd3, 0x43, 0xbb, 0x79, 0x92, 0xb2, 0x5c, 0x21, 0xa6, 0xa9, 0xa7, 0xb7, - 0xa1, 0xaa, 0xe2, 0x34, 0xd3, 0xea, 0xab, 0xbc, 0x66, 0xbf, 0xe4, 0xb6, 0xf6, 0x32, 0xf2, 0xed, - 0xaf, 0xc1, 0x69, 0x0f, 0xbd, 0x6a, 0xbe, 0x8c, 0xef, 0x3e, 0xeb, 0xbf, 0x36, 0x78, 0x8d, 0xee, - 0x94, 0x56, 0xfe, 0xed, 0x37, 0x75, 0xd9, 0x4e, 0xce, 0xe5, 0xe1, 0x0f, 0x37, 0x4f, 0x4f, 0x63, - 0x5f, 0x82, 0x1b, 0xed, 0x95, 0x3e, 0xc9, 0xbb, 0x61, 0x0e, 0x12, 0xd8, 0xdf, 0x4a, 0xfe, 0x4a, - 0x6a, 0x87, 0xf0, 0x91, 0x4b, 0xf2, 0xb1, 0x9d, 0xfa, 0xe0, 0xa7, 0xcc, 0xc2, 0x1a, 0xd6, 0x5c, - 0x43, 0x99, 0x23, 0xfa, 0xe0, 0x8f, 0x77, 0xd7, 0xcd, 0x7b, 0x6a, 0xb8, 0x92, 0x53, 0x6f, 0x43, - 0x69, 0xaf, 0x1d, 0x97, 0xed, 0xa7, 0xde, 0x89, 0x72, 0xe9, 0xbf, 0xc5, 0x6b, 0x1e, 0xa6, 0x8d, - 0xe4, 0xe2, 0xad, 0xb5, 0xd3, 0xb9, 0x39, 0x79, 0x19, 0x43, 0x2f, 0x36, 0xdb, 0x5f, 0x35, 0xdf, - 0x80, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x2f, 0x17, 0xb0, 0xe8, 0x57, 0x66, 0xbb, 0xbf, 0x9a, - 0xbb, 0xbe, 0x10, 0x17, 0x2b, 0x29, 0xb1, 0x84, 0xfb, 0x5b, 0x6d, 0xfb, 0x10, 0x86, 0x89, 0x29, - 0x7a, 0x0a, 0xbd, 0x74, 0x4f, 0x92, 0x75, 0x79, 0xf8, 0x90, 0x86, 0xef, 0x75, 0x2b, 0x7c, 0x37, - 0x46, 0x69, 0xf5, 0x8e, 0xed, 0xff, 0xf0, 0xc6, 0x57, 0xf7, 0x6b, 0x55, 0xb8, 0xed, 0x8b, 0xdf, - 0x26, 0xdb, 0x23, 0x47, 0xc2, 0xba, 0x24, 0xda, 0xa6, 0x6d, 0x59, 0x45, 0x2a, 0xa5, 0x29, 0x4b, - 0xf8, 0x9e, 0x09, 0x68, 0xd4, 0xf4, 0x84, 0xc6, 0x87, 0x7d, 0x7c, 0xd5, 0x5d, 0xf4, 0x11, 0xca, - 0xf8, 0x80, 0x92, 0x75, 0x92, 0x56, 0xd1, 0x2e, 0xeb, 0xaf, 0x88, 0x2b, 0xb6, 0x9f, 0x6d, 0x3f, - 0x05, 0x45, 0xa6, 0xdb, 0x6b, 0xa6, 0x5d, 0x76, 0xd2, 0xf8, 0xf0, 0x46, 0x23, 0x27, 0x53, 0xa7, - 0xc1, 0x50, 0x9a, 0xd6, 0x9c, 0x65, 0x7b, 0x4d, 0x77, 0xc3, 0x42, 0x1f, 0x1e, 0x5c, 0x34, 0xd5, - 0x3f, 0xf0, 0xa6, 0xd5, 0x6d, 0x9b, 0x1a, 0xd3, 0x1f, 0xc5, 0x6a, 0xd5, 0xec, 0x49, 0x92, 0x76, - 0xf8, 0x52, 0xa9, 0xa1, 0xb5, 0x75, 0xea, 0x9b, 0x2c, 0x92, 0xb3, 0xe3, 0xc4, 0x97, 0x09, 0x89, - 0x46, 0xaa, 0x5c, 0xc6, 0xb3, 0xa9, 0x6e, 0x5f, 0x8c, 0xa1, 0xca, 0xc6, 0x86, 0xda, 0x1d, 0x4b, - 0x68, 0xf9, 0x55, 0x46, 0xcf, 0x05, 0x44, 0x75, 0xa4, 0xc9, 0x27, 0x6e, 0x7d, 0x7d, 0xdf, 0x0a, - 0x4b, 0xb6, 0xfd, 0xd2, 0xda, 0xed, 0x86, 0xbc, 0x6c, 0xaa, 0x2c, 0xe7, 0xc2, 0x25, 0x2e, 0xa4, - 0x87, 0xd2, 0x55, 0xa2, 0xf8, 0x52, 0xa4, 0x64, 0x8c, 0xe5, 0xd9, 0xdb, 0x8c, 0x1c, 0x2c, 0x62, - 0x81, 0xa1, 0xba, 0xb0, 0x64, 0x4f, 0x8e, 0x23, 0x61, 0xda, 0xd2, 0xfb, 0x11, 0x75, 0x6a, 0x14, - 0xac, 0x07, 0x1d, 0x75, 0x3f, 0x04, 0xd7, 0xd6, 0xa4, 0x97, 0xb5, 0x73, 0x04, 0x5d, 0xff, 0x2d, - 0xde, 0xe8, 0x5e, 0x1b, 0xf1, 0xda, 0xb1, 0x1f, 0x21, 0xab, 0x5e, 0x10, 0xf8, 0x2e, 0x2a, 0xd6, - 0xf7, 0x77, 0xf8, 0x24, 0x33, 0xab, 0x62, 0x3f, 0x3b, 0xe4, 0xa9, 0x99, 0xfc, 0x12, 0x1b, 0x88, - 0x73, 0x0f, 0x85, 0x4c, 0x4d, 0x24, 0xb4, 0x9a, 0x64, 0xcd, 0x66, 0xa9, 0x72, 0xbf, 0xf0, 0xa1, - 0x5e, 0x12, 0x32, 0xde, 0xab, 0x45, 0x3c, 0x0d, 0x9f, 0x77, 0xc1, 0x04, 0x6a, 0xff, 0xb1, 0xe9, - 0x2a, 0x19, 0x99, 0x34, 0xa1, 0xf2, 0xa9, 0xf5, 0xd0, 0x3f, 0xa6, 0x9d, 0x7c, 0x6c, 0x67, 0x28, - 0xea, 0xc9, 0x16, 0xaa, 0x64, 0x9b, 0x5f, 0x7a, 0xb3, 0xc2, 0x2a, 0xcd, 0xd5, 0xf8, 0xbb, 0xd4, - 0xff, 0xf1, 0xbb, 0xc7, 0xac, 0xcb, 0x99, 0x58, 0x64, 0xc9, 0xcd, 0x68, 0x97, 0x73, 0x2c, 0xc5, - 0x87, 0x1f, 0xd5, 0x97, 0xfe, 0x33, 0xcb, 0xae, 0x8b, 0x65, 0xd1, 0x39, 0xef, 0xb3, 0x7f, 0x0e, - 0xd9, 0x19, 0xa6, 0xae, 0x5b, 0x44, 0x4c, 0x6c, 0x35, 0x49, 0x47, 0x74, 0xd9, 0xa8, 0x3f, 0xf1, - 0xb3, 0xb0, 0xc9, 0x98, 0xa7, 0x09, 0xe1, 0x34, 0x33, 0xea, 0xdf, 0x28, 0x8f, 0x3a, 0x94, 0xfe, - 0x2d, 0x51, 0xb4, 0x1d, 0x71, 0xa1, 0x7f, 0x88, 0xe9, 0xbd, 0x33, 0x67, 0xe1, 0x4a, 0x8c, 0xea, - 0x1b, 0x7b, 0xd9, 0x53, 0xc4, 0x3f, 0x5d, 0x83, 0x6d, 0x4d, 0x31, 0xac, 0x9e, 0xfd, 0x32, 0xe7, - 0xbf, 0xc2, 0x85, 0x2e, 0x6d, 0xa6, 0xf6, 0xf3, 0xf5, 0x69, 0x5b, 0x45, 0x9f, 0xe3, 0x4d, 0x35, - 0x79, 0x64, 0xee, 0xb7, 0xb3, 0x9b, 0x2b, 0xc5, 0x63, 0x4c, 0x63, 0x7f, 0xf8, 0x5a, 0xcc, 0xdb, - 0xa2, 0x93, 0x7e, 0x97, 0x27, 0xeb, 0xfe, 0xf6, 0x93, 0x65, 0xe0, 0xa4, 0xe7, 0xd2, 0xb0, 0x87, - 0x4d, 0x69, 0xdb, 0x46, 0xac, 0xca, 0xb1, 0xe3, 0xee, 0xaa, 0x9d, 0x6e, 0x9b, 0x53, 0x7f, 0x05, - 0xa4, 0x35, 0x9a, 0x92, 0x38, 0xf8, 0xb7, 0x8b, 0xe3, 0x89, 0x96, 0x2a, 0xab, 0xa4, 0x3b, 0xf6, - 0x4d, 0xa7, 0xa0, 0xbb, 0x38, 0x60, 0x4e, 0x75, 0x2c, 0x96, 0x10, 0x57, 0x3e, 0x83, 0x4f, 0xf2, - 0xf3, 0xe2, 0x6b, 0xbb, 0xdb, 0xae, 0x63, 0xd3, 0x6b, 0xe4, 0xad, 0x22, 0xe2, 0xe5, 0x14, 0xfb, - 0xae, 0x30, 0x5b, 0xa2, 0x2f, 0xf1, 0x3e, 0x94, 0x4d, 0x1b, 0x52, 0xe3, 0x3e, 0x27, 0xf8, 0x2e, - 0x36, 0x5d, 0xf3, 0xae, 0x8b, 0xfe, 0x09, 0x39, 0x35, 0x2d, 0x9f, 0x2e, 0x9a, 0x7f, 0x13, 0x43, - 0x95, 0x89, 0xf3, 0xf8, 0xbb, 0x4d, 0x6d, 0x6d, 0x2e, 0x5e, 0x2b, 0xf8, 0x23, 0x12, 0x7c, 0x7d, - 0x8b, 0x17, 0x1e, 0x1d, 0xf2, 0x3f, 0xe6, 0x11, 0x5a, 0xf9, 0x7a, 0xaf, 0xac, 0x7f, 0xa2, 0x9e, - 0xc5, 0xac, 0xa8, 0xeb, 0xc1, 0x11, 0x1d, 0xf1, 0x6c, 0xdf, 0x47, 0x7b, 0xe1, 0xf0, 0x80, 0xf2, - 0xf5, 0x15, 0xb4, 0x9e, 0x6d, 0x69, 0xba, 0xa7, 0x97, 0x7f, 0xc1, 0x35, 0x15, 0x52, 0xc8, 0x9d, - 0xb8, 0x4d, 0x89, 0x27, 0xc2, 0x99, 0xb0, 0x9e, 0xb9, 0xa4, 0x4c, 0x9a, 0x29, 0x71, 0xed, 0x1a, - 0x0f, 0xf0, 0x47, 0x6f, 0xbb, 0x05, 0xc1, 0x6d, 0xaa, 0xcd, 0x0c, 0xbd, 0x2d, 0xfe, 0x42, 0x5a, - 0x64, 0xfe, 0x12, 0x2e, 0x95, 0xb7, 0x9e, 0x3f, 0x05, 0x56, 0x93, 0xe7, 0x86, 0x93, 0x54, 0x9d, - 0x5c, 0x46, 0xdd, 0x66, 0xf2, 0x67, 0x8c, 0xd1, 0x91, 0xb7, 0xd3, 0x4b, 0x66, 0xda, 0x3c, 0x71, - 0x5f, 0x9e, 0x62, 0xa4, 0x2f, 0xf8, 0x48, 0x89, 0xd3, 0xa7, 0xbf, 0x82, 0xe3, 0xd3, 0xb4, 0xef, - 0x8a, 0x70, 0xf1, 0x3a, 0x4d, 0x37, 0x49, 0xdf, 0xc1, 0x19, 0xa3, 0xd9, 0x32, 0x87, 0xd5, 0xc1, - 0x18, 0xd5, 0xaf, 0x34, 0x82, 0xd1, 0xf1, 0xcf, 0x94, 0x39, 0x5a, 0x9b, 0xa1, 0xbd, 0x08, 0x72, - 0x8c, 0x7b, 0xc1, 0x17, 0x2d, 0x6a, 0xa0, 0x43, 0xe5, 0xde, 0xe0, 0xbb, 0x97, 0xbb, 0x9e, 0x27, - 0xc4, 0xe5, 0xef, 0x37, 0xd6, 0x27, 0xc4, 0x82, 0x3a, 0x4e, 0xcc, 0x99, 0x17, 0x89, 0x84, 0xf9, - 0x05, 0xcd, 0xff, 0x5c, 0x22, 0xba, 0x10, 0xf2, 0x71, 0x54, 0xaf, 0x7b, 0xfc, 0xbc, 0x5e, 0xb8, - 0x2e, 0x3d, 0x25, 0xde, 0xe4, 0x0c, 0x79, 0x48, 0x6f, 0xeb, 0x96, 0x2f, 0xaf, 0x84, 0xb3, 0x66, - 0xb7, 0xe2, 0x7c, 0x44, 0x56, 0x68, 0xbb, 0x18, 0x3f, 0x72, 0x89, 0x91, 0x78, 0x99, 0x73, 0xce, - 0xa2, 0x5b, 0x75, 0xc4, 0xf6, 0x9c, 0xb2, 0x8f, 0x5c, 0xa3, 0xee, 0x83, 0x7f, 0x28, 0xb5, 0x55, - 0x54, 0x35, 0x90, 0x18, 0xf5, 0x23, 0xbc, 0x44, 0x14, 0x04, 0x35, 0x4f, 0x15, 0xdf, 0x88, 0xfc, - 0x51, 0xa4, 0x83, 0xc9, 0x7f, 0xe2, 0x20, 0x8e, 0x14, 0xae, 0xdf, 0x79, 0x79, 0xb7, 0xa1, 0xae, - 0x19, 0xe7, 0x48, 0xdc, 0x60, 0xb5, 0x7f, 0x27, 0x1e, 0x74, 0x9a, 0xae, 0x93, 0xd1, 0x21, 0x8f, - 0x53, 0xde, 0xdb, 0xdf, 0x05, 0x65, 0x26, 0xdd, 0xde, 0xdb, 0x2d, 0x26, 0xa5, 0xf0, 0x4f, 0x7d, - 0x53, 0xde, 0x3b, 0xe0, 0x90, 0xa4, 0xcd, 0x53, 0xd7, 0x09, 0x91, 0xd7, 0xd5, 0x7c, 0x25, 0x18, - 0xcb, 0xe9, 0xa7, 0x66, 0xb8, 0x21, 0x2e, 0x92, 0x5d, 0x11, 0xcc, 0x32, 0xb5, 0xf2, 0xd5, 0x57, - 0xef, 0xcc, 0xc7, 0x8b, 0xa6, 0xfb, 0xbd, 0xc9, 0xc1, 0x71, 0x77, 0x76, 0xd2, 0xf2, 0x92, 0x26, - 0x09, 0xac, 0x6f, 0xf3, 0xe3, 0x1f, 0x04, 0x5b, 0x6d, 0xe2, 0xf8, 0x83, 0x0e, 0x29, 0xec, 0x25, - 0xda, 0xf2, 0xdf, 0x11, 0x14, 0x57, 0x7b, 0xb5, 0x4b, 0xe5, 0xbd, 0xa4, 0x6b, 0x96, 0x69, 0x50, - 0xeb, 0x92, 0x46, 0x56, 0xab, 0x84, 0x88, 0xa7, 0xcf, 0x0e, 0xd2, 0x5e, 0x24, 0x47, 0xc8, 0x51, - 0x36, 0x0a, 0xc4, 0xac, 0x62, 0x21, 0x32, 0x37, 0xdb, 0xf5, 0x78, 0x7b, 0x8a, 0x2a, 0xae, 0x9d, - 0x0d, 0x44, 0x73, 0x11, 0xd1, 0x7e, 0x09, 0xad, 0xe6, 0x80, 0xf6, 0x38, 0xfa, 0xf8, 0x8b, 0xdd, - 0x56, 0x9f, 0x11, 0x7c, 0xd9, 0xfe, 0x22, 0x59, 0x58, 0x9f, 0xfc, 0x49, 0x74, 0x89, 0xc9, 0x9f, - 0xec, 0xae, 0xde, 0xb8, 0xee, 0x6c, 0x4f, 0x49, 0x5b, 0x6b, 0xc4, 0xc1, 0x11, 0x12, 0x4a, 0xd6, - 0x21, 0xe3, 0xc8, 0xef, 0xb7, 0x6e, 0x76, 0x6d, 0xd4, 0x40, 0x97, 0xad, 0x3a, 0xe2, 0x04, 0x8a, - 0xaa, 0xaa, 0xd8, 0x37, 0x7c, 0x4c, 0x11, 0xc1, 0xe7, 0x40, 0xba, 0xbe, 0xe1, 0x73, 0x1e, 0xf5, - 0x27, 0x31, 0x98, 0x6a, 0xdc, 0x4f, 0x38, 0xde, 0xde, 0x6a, 0x79, 0x3b, 0xcf, 0xb8, 0xfe, 0x51, - 0x8e, 0xee, 0xeb, 0xb3, 0xae, 0xab, 0xb2, 0x6e, 0xfe, 0x2b, 0x27, 0xf5, 0x4f, 0x13, 0x15, 0xaa, - 0xed, 0x36, 0xbe, 0x12, 0xbd, 0xbb, 0x7a, 0xf8, 0x4e, 0xfb, 0xb7, 0x72, 0xc3, 0xd7, 0x5f, 0x77, - 0xbf, 0xc2, 0x67, 0x5a, 0xd3, 0xda, 0x2f, 0x21, 0x9b, 0x6d, 0xcf, 0xf8, 0x81, 0x37, 0x5e, 0xa3, - 0x36, 0xfe, 0x23, 0xe3, 0xf1, 0x5b, 0xf7, 0x1d, 0xca, 0x7b, 0x94, 0xfc, 0xe5, 0x7f, 0x97, 0xc2, - 0x55, 0x76, 0xd7, 0x45, 0xd4, 0x47, 0x58, 0xe8, 0x5b, 0xa3, 0x3f, 0xc7, 0xcb, 0x8d, 0xdb, 0x9f, - 0x1b, 0xea, 0xbf, 0x15, 0xad, 0x6b, 0x55, 0xcd, 0x4e, 0x9f, 0xd1, 0xe7, 0x2b, 0x90, 0x42, 0x74, - 0xfe, 0xe9, 0x5d, 0x2f, 0x2f, 0x76, 0xf1, 0x31, 0x17, 0x78, 0xdd, 0x15, 0x9c, 0xf2, 0xc3, 0x7f, - 0x94, 0xf6, 0xee, 0xbb, 0x38, 0xea, 0xff, 0xc5, 0x91, 0x53, 0xf5, 0x4b, 0xde, 0xd3, 0xf1, 0x31, - 0x3c, 0xea, 0x2d, 0xdf, 0xef, 0x99, 0x8f, 0x9a, 0x95, 0x24, 0xbc, 0x60, 0x82, 0xfd, 0xd6, 0x66, - 0x2f, 0xba, 0xcc, 0xc5, 0x76, 0x7d, 0xa6, 0xb1, 0x11, 0xb1, 0xb3, 0x77, 0x84, 0x8c, 0xe1, 0xf7, - 0x3d, 0xab, 0x98, 0xd2, 0xdb, 0xa8, 0xb1, 0xf3, 0x1d, 0xf5, 0xbc, 0xa9, 0x06, 0xdf, 0xeb, 0x9f, - 0xe0, 0xb8, 0x88, 0x7b, 0x9b, 0x6f, 0x82, 0xf8, 0xcb, 0xb4, 0x7f, 0xb5, 0x53, 0x70, 0xf3, 0xb5, - 0x89, 0x4d, 0x55, 0x9a, 0x50, 0xe3, 0x6f, 0xc1, 0x2f, 0x33, 0x68, 0x72, 0xb6, 0x9c, 0x7c, 0x10, - 0xef, 0x2c, 0x62, 0xf9, 0x4a, 0xf3, 0x53, 0xe4, 0xa4, 0x92, 0x49, 0x78, 0x29, 0x2e, 0xe9, 0x52, - 0xa4, 0x9d, 0x3f, 0x7c, 0x11, 0xf4, 0xdf, 0x2f, 0x82, 0x31, 0x0d, 0x65, 0xbe, 0xae, 0x6a, 0xa1, - 0xd8, 0x37, 0xd1, 0xfb, 0xe0, 0x90, 0xce, 0x6c, 0x34, 0x3e, 0xae, 0x5b, 0x4d, 0xd5, 0x72, 0xcf, - 0xad, 0x62, 0xf8, 0x9e, 0xee, 0xed, 0x7e, 0x5d, 0xd3, 0x72, 0x73, 0x75, 0x55, 0xde, 0xab, 0x7c, - 0x94, 0x32, 0x76, 0xe3, 0xf2, 0xcd, 0xcb, 0x05, 0xfc, 0x15, 0xf7, 0x6e, 0xdb, 0xcb, 0x74, 0x82, - 0xd4, 0x0f, 0xf2, 0xf2, 0x1b, 0xc9, 0xf3, 0xfd, 0x8b, 0xa8, 0xaf, 0xee, 0xa5, 0x62, 0xd7, 0x92, - 0x96, 0x96, 0x26, 0x0a, 0x04, 0x6a, 0x95, 0x26, 0x81, 0xf7, 0x71, 0xe2, 0x35, 0xab, 0x3f, 0xbe, - 0x1a, 0xce, 0x52, 0x68, 0xb8, 0xf8, 0xef, 0x7f, 0x05, 0x72, 0x40, 0x6b, 0x32, 0xec, 0xcf, 0xe9, - 0xa3, 0x27, 0x7a, 0x36, 0x7c, 0x28, 0x53, 0x66, 0xd2, 0x76, 0xad, 0xc1, 0x3b, 0x59, 0x7b, 0x4a, - 0x99, 0x89, 0xe1, 0x1b, 0x6a, 0xd4, 0x9f, 0xb9, 0xb6, 0x9f, 0x9a, 0x95, 0x3f, 0x96, 0x31, 0x97, - 0xfd, 0xed, 0x3c, 0xbc, 0x25, 0xe2, 0xed, 0x35, 0xf8, 0x46, 0xe5, 0xbd, 0xe9, 0x52, 0x4d, 0xc9, - 0x9e, 0xfb, 0x93, 0x4f, 0xc1, 0x4f, 0x23, 0xd0, 0xe5, 0x81, 0xab, 0x5d, 0x67, 0xd4, 0xd5, 0xcc, - 0x45, 0xaf, 0xcd, 0x63, 0xb4, 0xd7, 0x82, 0x1a, 0x19, 0xd7, 0x6d, 0x72, 0x62, 0x0f, 0x8c, 0x93, - 0x7c, 0xdb, 0x68, 0x5c, 0xdf, 0xce, 0xcb, 0xae, 0x33, 0xaa, 0x6d, 0xdb, 0x49, 0x55, 0x76, 0xda, - 0x7f, 0x05, 0x76, 0x97, 0x6d, 0x2b, 0xaa, 0x7b, 0x7c, 0x14, 0x09, 0xab, 0x59, 0xbe, 0xdf, 0x14, - 0x21, 0x72, 0x75, 0x9a, 0xf8, 0x23, 0xad, 0x70, 0xc7, 0xab, 0xfc, 0x16, 0x16, 0x5f, 0x4d, 0x3a, - 0x79, 0x7d, 0x36, 0x1e, 0x10, 0x8f, 0xd2, 0x27, 0xb3, 0xda, 0xda, 0xcd, 0x4f, 0x82, 0x1f, 0x3e, - 0x6d, 0xf0, 0xa1, 0x8d, 0xc6, 0xee, 0x51, 0x7d, 0x75, 0xba, 0x56, 0xfd, 0xdd, 0x52, 0x76, 0x57, - 0xe5, 0xc4, 0xfe, 0x3c, 0x8c, 0xda, 0x22, 0x9a, 0x44, 0xcb, 0x33, 0x0b, 0x3e, 0x26, 0x8a, 0xfc, - 0x4d, 0x97, 0x55, 0xf0, 0x91, 0xb8, 0xdd, 0xc8, 0xe7, 0xa5, 0xbc, 0x44, 0x64, 0x8c, 0x9b, 0xd6, - 0xfc, 0xc3, 0x57, 0x2f, 0x32, 0xf1, 0x87, 0xba, 0x84, 0xcf, 0x4d, 0x75, 0xe2, 0xd1, 0xf7, 0xe2, - 0x6c, 0x2a, 0x84, 0xf6, 0x71, 0xdf, 0xb3, 0xeb, 0xe5, 0x3b, 0x27, 0x45, 0x5c, 0x4d, 0x93, 0xda, - 0xa6, 0xff, 0x21, 0x04, 0x2c, 0x5f, 0xe0, 0x87, 0x83, 0xce, 0x62, 0xa7, 0x1a, 0xf7, 0xc1, 0x0f, - 0x97, 0xb1, 0xf3, 0x5a, 0x6b, 0x27, 0x26, 0xda, 0x5f, 0x15, 0x65, 0x95, 0x8a, 0x44, 0x8e, 0xf8, - 0x83, 0xb1, 0xcc, 0xcb, 0x4d, 0xef, 0xe3, 0x33, 0x7e, 0x9d, 0x27, 0x7d, 0x2d, 0xbf, 0x09, 0xd2, - 0x97, 0x54, 0x9b, 0xfc, 0x82, 0x0c, 0x89, 0x0d, 0x0b, 0xe6, 0x2d, 0x6d, 0xf8, 0x2c, 0x3d, 0x55, - 0x2d, 0x31, 0xbc, 0x0f, 0x55, 0x53, 0xdb, 0x1d, 0x7c, 0x4d, 0x6e, 0x88, 0xff, 0xab, 0xe0, 0xab, - 0xb6, 0x99, 0x33, 0x74, 0xdb, 0xf5, 0x5c, 0x59, 0x36, 0x9a, 0xda, 0x69, 0x71, 0x25, 0x97, 0xb7, - 0x5b, 0x4d, 0x7e, 0x3b, 0x69, 0xc9, 0xd9, 0x0c, 0xe3, 0xad, 0x37, 0xea, 0x5f, 0x82, 0xc9, 0xfc, - 0x98, 0x9b, 0x57, 0x65, 0x27, 0x4f, 0xcb, 0xe0, 0xb6, 0xbb, 0x6d, 0x97, 0x6d, 0xe5, 0x27, 0x04, - 0x46, 0x54, 0xd7, 0xaf, 0x96, 0x86, 0x4f, 0xf8, 0xbf, 0x33, 0x76, 0x97, 0xc5, 0x79, 0x9a, 0x96, - 0x97, 0xc5, 0xea, 0xdf, 0x69, 0x3f, 0x62, 0x52, 0x4d, 0x2f, 0x8f, 0x35, 0x2b, 0x69, 0x52, 0xdb, - 0xb7, 0xe0, 0x8e, 0xdd, 0xfe, 0x5f, 0x05, 0x27, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0xcd, 0xed, 0xdb, - 0xaf, 0x84, 0x34, 0xe9, 0xa7, 0x4c, 0xd9, 0xcd, 0x9e, 0x08, 0xc4, 0x26, 0xdd, 0x5c, 0x3e, 0x0b, - 0x2f, 0x7a, 0xea, 0x9b, 0x6d, 0x3a, 0x5e, 0x26, 0xaf, 0xc4, 0x44, 0x51, 0xd1, 0x3a, 0x56, 0xb8, - 0x98, 0x27, 0xb4, 0xcd, 0x9e, 0xf5, 0x73, 0xe6, 0xb0, 0xf2, 0x7f, 0x08, 0xdb, 0x27, 0x13, 0xfe, - 0x7c, 0x8e, 0x61, 0xfd, 0x91, 0xaf, 0xc1, 0x76, 0xa8, 0xd7, 0x88, 0x72, 0x39, 0xc4, 0xcb, 0x55, - 0xfe, 0x0b, 0xa6, 0x9c, 0x4e, 0x1d, 0x56, 0x2a, 0x03, 0x41, 0x22, 0x67, 0xc1, 0x59, 0x47, 0x0f, - 0xda, 0xca, 0x83, 0xdc, 0x5d, 0x8c, 0xb0, 0x7d, 0xf5, 0x5c, 0xba, 0x32, 0xee, 0xb8, 0x4c, 0x41, - 0x58, 0xa7, 0x6a, 0xdd, 0x70, 0x8e, 0xf6, 0xa7, 0xcf, 0x24, 0x27, 0xe1, 0x22, 0xa6, 0xfd, 0x06, - 0xd3, 0x6b, 0x82, 0x3a, 0xd9, 0x58, 0xae, 0x6e, 0x56, 0x57, 0xcd, 0x43, 0x5b, 0x62, 0xb9, 0x0e, - 0x56, 0x2d, 0xd7, 0x25, 0x12, 0x1c, 0x8c, 0xf8, 0xbc, 0xf9, 0xbb, 0xfe, 0x28, 0xc9, 0xb6, 0xfd, - 0x35, 0xf0, 0xa4, 0xad, 0xe8, 0x69, 0x26, 0xc6, 0xd2, 0x19, 0xb2, 0x77, 0x69, 0xfe, 0x08, 0xb4, - 0xca, 0xc4, 0xe7, 0xf8, 0x4a, 0xfb, 0x6a, 0x8a, 0xc7, 0xe0, 0x92, 0x78, 0xde, 0x2c, 0x6f, 0x82, - 0x3a, 0x9b, 0x2b, 0x07, 0xc2, 0x22, 0xe7, 0xd4, 0xa6, 0xeb, 0x75, 0xfc, 0x12, 0x08, 0x4a, 0xf7, - 0x1e, 0x0a, 0xed, 0x54, 0x4f, 0x34, 0x8c, 0xfb, 0xb5, 0x8b, 0xe1, 0x4e, 0x5c, 0x8d, 0x63, 0xad, - 0x7c, 0xf8, 0x5d, 0x76, 0x5d, 0x1b, 0x1f, 0x35, 0x5b, 0xd7, 0x04, 0xdb, 0xa5, 0xe5, 0x63, 0x0f, - 0x85, 0x09, 0x6a, 0xaa, 0x5e, 0x2f, 0x9d, 0x4e, 0x5f, 0x5c, 0xd9, 0xdc, 0x4c, 0x4d, 0x2b, 0xdf, - 0x53, 0xe2, 0x20, 0x93, 0xbb, 0x6f, 0xc4, 0x42, 0x05, 0xdd, 0x1e, 0x63, 0x12, 0xf6, 0x5d, 0xfc, - 0x13, 0xcc, 0x65, 0x56, 0x81, 0xda, 0x99, 0xc6, 0x5e, 0xef, 0xdf, 0x19, 0xf1, 0x84, 0xbf, 0xd4, - 0x1e, 0x6e, 0x55, 0xf5, 0xa1, 0xb0, 0xa8, 0x63, 0x8d, 0x0d, 0xc4, 0x65, 0xcf, 0x88, 0x85, 0x2e, - 0x7f, 0x6c, 0x6e, 0xb5, 0x19, 0x7e, 0xe1, 0x1b, 0x78, 0x92, 0x1a, 0x50, 0xc7, 0x89, 0xf4, 0xde, - 0xa6, 0xa8, 0xbc, 0x84, 0xa7, 0x5f, 0x5d, 0x7c, 0x10, 0x89, 0x73, 0xf1, 0xba, 0xae, 0x2f, 0x92, - 0x7d, 0x36, 0xa5, 0x2b, 0x90, 0xc7, 0xba, 0x49, 0x78, 0xfb, 0x9f, 0x1a, 0xbb, 0x69, 0x8c, 0xab, - 0xc1, 0x97, 0x3f, 0x64, 0x7b, 0x6b, 0xf1, 0x22, 0xcb, 0xd2, 0xa4, 0xd5, 0x8c, 0xf9, 0xe8, 0x91, - 0x7c, 0x93, 0xe5, 0xb7, 0xf7, 0xa6, 0xdd, 0x70, 0x4c, 0x46, 0xd7, 0xa4, 0x8d, 0x93, 0x12, 0x72, - 0xea, 0xdd, 0xf0, 0x50, 0x74, 0xca, 0xd2, 0x33, 0x8e, 0x53, 0xa3, 0xf7, 0xc1, 0x59, 0x52, 0xbd, - 0xd5, 0x29, 0x98, 0xe7, 0xdf, 0x64, 0x76, 0x3f, 0xc5, 0x4d, 0x0b, 0x9f, 0x72, 0x76, 0xfc, 0x14, - 0x74, 0x9c, 0xcd, 0x58, 0x8c, 0xd7, 0x3e, 0x0a, 0x63, 0x38, 0xf4, 0x9f, 0x4e, 0x95, 0xcc, 0xd5, - 0xc1, 0x64, 0xff, 0x26, 0xce, 0xc2, 0x5c, 0xb2, 0x2e, 0xd7, 0x2f, 0x84, 0xb6, 0x38, 0xed, 0x6f, - 0x63, 0x1b, 0x5f, 0x13, 0x26, 0xa5, 0x12, 0x48, 0x8a, 0xc7, 0xe1, 0x2c, 0xad, 0xed, 0x1a, 0x30, - 0xbc, 0x25, 0x49, 0x26, 0x9a, 0x69, 0xe9, 0xf8, 0xcd, 0xa4, 0xed, 0x34, 0xaa, 0x37, 0x4d, 0xd8, - 0x9b, 0xbe, 0xb9, 0x04, 0x56, 0xa7, 0xe5, 0x23, 0xbe, 0x2a, 0x26, 0xf1, 0x5d, 0xaf, 0x73, 0xfe, - 0x3c, 0x23, 0xcb, 0x3e, 0xea, 0x05, 0xf8, 0x9f, 0xcb, 0xbb, 0xba, 0x89, 0xc5, 0x70, 0x99, 0x64, - 0xce, 0xf6, 0xbc, 0x59, 0x2a, 0xd1, 0xb3, 0x19, 0x96, 0x3e, 0xcf, 0x2c, 0xb6, 0xab, 0x25, 0x48, - 0x27, 0x89, 0xdc, 0x48, 0x9f, 0x96, 0xf7, 0x89, 0xe6, 0xaa, 0xeb, 0x89, 0xca, 0x7b, 0xde, 0x0a, - 0xb9, 0x84, 0xad, 0x7c, 0x40, 0xa1, 0x1a, 0xaa, 0xd6, 0xf9, 0x2f, 0x77, 0x11, 0xd5, 0xfe, 0x62, - 0x9b, 0x0d, 0x95, 0x04, 0x3c, 0x26, 0x45, 0x55, 0xad, 0x61, 0x3e, 0xef, 0x64, 0xe0, 0x8f, 0x9a, - 0xab, 0x5c, 0x48, 0x98, 0x35, 0xe4, 0x3b, 0x64, 0xcf, 0xd9, 0x55, 0x70, 0xc7, 0x26, 0x7c, 0xa6, - 0x5e, 0xc9, 0x49, 0x29, 0xf9, 0x6d, 0x21, 0xd0, 0xfc, 0x93, 0xb3, 0x96, 0x0f, 0x97, 0xcd, 0x8f, - 0x9b, 0x4a, 0x97, 0x9b, 0x55, 0x7f, 0x09, 0x6d, 0xdb, 0xba, 0x5f, 0x05, 0xd7, 0xbd, 0x52, 0x6f, - 0x14, 0x11, 0xf2, 0x59, 0x3e, 0xb8, 0x4e, 0xf7, 0xd0, 0xdd, 0x7c, 0x10, 0xcd, 0x8c, 0x68, 0x4d, - 0xbf, 0xc5, 0xd6, 0x9d, 0xd3, 0xc7, 0xf3, 0x65, 0xd9, 0xff, 0xbd, 0x6a, 0xb9, 0x4b, 0x5a, 0x84, - 0x7b, 0xee, 0xe1, 0xfe, 0xb1, 0x7c, 0x5d, 0xbb, 0xe9, 0xd3, 0x3f, 0x04, 0x7d, 0x8d, 0xdc, 0xae, - 0x4d, 0xb6, 0xe7, 0xe4, 0xf2, 0xe7, 0x89, 0xda, 0x4b, 0x49, 0xaf, 0x84, 0xf2, 0xef, 0x7a, 0x7e, - 0x11, 0xd6, 0xb9, 0x59, 0x7b, 0xa5, 0xf7, 0xbb, 0xfc, 0xdc, 0xcc, 0x4d, 0xc5, 0xf2, 0xe6, 0x9d, - 0xb0, 0x8f, 0x17, 0x69, 0x0d, 0x6d, 0x34, 0xd3, 0x42, 0xb9, 0x24, 0xff, 0xe0, 0x8c, 0x9a, 0xa1, - 0xf7, 0xcb, 0x9d, 0xff, 0x9b, 0x2c, 0x65, 0xdf, 0x2d, 0x3e, 0xfe, 0x5e, 0xd2, 0x64, 0xee, 0xda, - 0x79, 0xb8, 0x8b, 0xd7, 0x6a, 0xdf, 0x97, 0x5b, 0x4f, 0xab, 0xd7, 0x3d, 0x5d, 0xdd, 0xff, 0xc5, - 0x56, 0x89, 0xd3, 0xa7, 0x27, 0x09, 0xf3, 0xb5, 0x36, 0xeb, 0x5d, 0xd0, 0xdf, 0xf2, 0xd5, 0x3c, - 0xdc, 0x13, 0xdb, 0xbe, 0x78, 0x27, 0x1b, 0x22, 0x38, 0xbd, 0xda, 0x93, 0x3a, 0xe2, 0x2d, 0xbe, - 0xd1, 0x98, 0xd7, 0x2c, 0xb1, 0xc8, 0xc1, 0x39, 0x2f, 0xb6, 0x6e, 0x6f, 0x37, 0x5c, 0xd6, 0xf2, - 0xb1, 0xe2, 0x7a, 0x1b, 0xd1, 0x4b, 0x86, 0xe0, 0x96, 0xa8, 0x6f, 0xbd, 0x17, 0x7c, 0xd4, 0xd5, - 0x3f, 0x82, 0x5a, 0x7b, 0x7c, 0xaf, 0xe9, 0xb8, 0x4a, 0xde, 0xdd, 0x8d, 0xe6, 0xe6, 0xcd, 0xf3, - 0x70, 0x47, 0x3f, 0xef, 0x2f, 0x2d, 0xee, 0xda, 0xe5, 0xa7, 0x7a, 0xe6, 0xc9, 0xb4, 0xbc, 0x4e, - 0xf6, 0xd8, 0xf7, 0x5c, 0x14, 0x5d, 0x5e, 0x4c, 0x26, 0x75, 0xf0, 0x85, 0x6a, 0x9e, 0xa4, 0xef, - 0xdd, 0x72, 0x5a, 0xa7, 0x7c, 0xbd, 0xd5, 0x75, 0xab, 0xe4, 0xc7, 0x57, 0x93, 0x88, 0xea, 0xc6, - 0xb0, 0x7a, 0xef, 0x73, 0xb3, 0xf9, 0x33, 0x7d, 0xf7, 0x43, 0xdc, 0xfc, 0x21, 0xb4, 0x89, 0xb7, - 0x63, 0x7b, 0x69, 0xd4, 0x4f, 0x17, 0xd9, 0x3b, 0x74, 0xfe, 0xba, 0xf8, 0x22, 0xac, 0x9d, 0x8e, - 0x5f, 0x35, 0xf7, 0xf3, 0x5e, 0xff, 0x09, 0xca, 0xd5, 0xb2, 0x3b, 0x1d, 0x70, 0x4f, 0xa1, 0xad, - 0x6f, 0x7f, 0x85, 0x3b, 0x9f, 0x18, 0xf2, 0xd6, 0xe9, 0xcd, 0xf8, 0xa4, 0xe4, 0xa6, 0xf9, 0x38, - 0x29, 0xbb, 0x76, 0x48, 0x64, 0xfd, 0x3b, 0x72, 0xa8, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x30, - 0x18, 0x30, 0x6a, 0xf1, 0xa6, 0x96, 0x5f, 0x68, 0xaf, 0x44, 0xad, 0xec, 0x8f, 0xae, 0xc5, 0x4d, - 0x39, 0x7b, 0x6d, 0xcd, 0xfc, 0x14, 0x5a, 0xbb, 0x53, 0x2a, 0x8c, 0x74, 0xab, 0xc2, 0x91, 0xcf, - 0x31, 0x44, 0xc1, 0x28, 0x5f, 0x91, 0x87, 0x31, 0x2c, 0xab, 0x58, 0xe7, 0xc6, 0x09, 0x24, 0x29, - 0x63, 0x19, 0xd5, 0x5e, 0x78, 0xb5, 0x35, 0x8b, 0xfe, 0x1e, 0x31, 0xb5, 0x6e, 0x4f, 0xbf, 0x29, - 0x0a, 0xce, 0xd1, 0xdc, 0xb6, 0xf2, 0xb3, 0x63, 0xf2, 0xfb, 0xf8, 0x50, 0x8a, 0x30, 0x85, 0x5b, - 0x57, 0xe4, 0xf3, 0xca, 0x6d, 0x65, 0xd5, 0xa8, 0xbe, 0x12, 0x1a, 0xdc, 0x65, 0x77, 0x5b, 0x7e, - 0x4b, 0x6d, 0xd2, 0xf1, 0x82, 0x9c, 0xff, 0xd2, 0x33, 0x0e, 0xc6, 0xcf, 0xcf, 0x9d, 0x58, 0xf3, - 0x81, 0x9f, 0xc1, 0x04, 0xba, 0xee, 0x5c, 0xa9, 0xdb, 0x7c, 0xa9, 0x57, 0xb4, 0xe3, 0xd3, 0x9e, - 0xaf, 0xe0, 0xa7, 0x35, 0xe9, 0x9a, 0x23, 0xde, 0x97, 0x6c, 0x2b, 0x9f, 0x05, 0x87, 0x3b, 0xdb, - 0x16, 0x5e, 0xdb, 0x69, 0xd2, 0x4a, 0x18, 0xf0, 0xf9, 0x2a, 0xa9, 0x3d, 0xa7, 0x76, 0xc7, 0xb0, - 0xcd, 0xd5, 0x72, 0x9d, 0x4b, 0xdb, 0xb9, 0xbf, 0x8c, 0x12, 0xef, 0x92, 0x0f, 0x91, 0xa2, 0xe7, - 0xd4, 0xf5, 0xa7, 0xce, 0xd2, 0x31, 0xe3, 0x44, 0x44, 0x5a, 0x35, 0x8a, 0x74, 0x8c, 0xc5, 0x93, - 0x19, 0x5e, 0xd8, 0x52, 0x3f, 0x46, 0xd7, 0x2e, 0x6f, 0x2a, 0xa7, 0x6f, 0xfc, 0x6f, 0x3b, 0x53, - 0xea, 0xb2, 0x64, 0xf4, 0x66, 0x41, 0x1f, 0xc3, 0x20, 0xba, 0xb6, 0x3e, 0x36, 0x49, 0xe9, 0x3e, - 0x3b, 0xaa, 0x7f, 0x0a, 0x11, 0x32, 0xe4, 0x6b, 0x1f, 0x26, 0x3f, 0xae, 0x39, 0x9e, 0x0d, 0x99, - 0x2e, 0x75, 0xf4, 0x19, 0x7f, 0x82, 0x61, 0x0a, 0xaa, 0xaa, 0xea, 0xe9, 0x56, 0x26, 0x8b, 0x63, - 0xc4, 0x22, 0xbf, 0x11, 0x53, 0xa5, 0x74, 0x4c, 0xdf, 0x04, 0xfd, 0x24, 0xb2, 0x67, 0xc7, 0xd9, - 0x5d, 0x5d, 0x7d, 0x91, 0x56, 0xbe, 0x0b, 0x08, 0x37, 0x7a, 0xfe, 0xa5, 0x21, 0xc3, 0x18, 0xdc, - 0xb1, 0xf0, 0x4a, 0x4a, 0x9f, 0x2a, 0x69, 0xa3, 0x63, 0xb2, 0x3f, 0xc1, 0x00, 0xa6, 0x87, 0x6a, - 0x24, 0x60, 0xf9, 0xa8, 0x92, 0x1b, 0x67, 0x4c, 0xa9, 0x35, 0x36, 0x87, 0xba, 0xaa, 0x2f, 0xe1, - 0x1b, 0xe9, 0x99, 0xa4, 0x6c, 0x2c, 0x72, 0xa8, 0x76, 0x57, 0xf8, 0x7a, 0xd3, 0xe9, 0x24, 0xc9, - 0xb6, 0x6d, 0x21, 0xe3, 0x47, 0xf4, 0xf6, 0x2f, 0xf1, 0x35, 0xa5, 0x33, 0xe7, 0x72, 0x1f, 0x85, - 0x0a, 0xb4, 0x44, 0xe4, 0xbe, 0x8c, 0x62, 0xb6, 0xbb, 0x76, 0xc9, 0x1d, 0x2c, 0x1c, 0x7c, 0x10, - 0x67, 0xc4, 0x9d, 0xcf, 0x32, 0xce, 0x0d, 0xbb, 0x4e, 0xe1, 0xd3, 0xa8, 0xfe, 0xc3, 0xdc, 0xf8, - 0xcc, 0x27, 0x15, 0x7f, 0x0b, 0x13, 0x45, 0x39, 0x06, 0xcd, 0x24, 0x4f, 0xcb, 0x6e, 0xcf, 0xfc, - 0x29, 0x49, 0xcf, 0x8b, 0xf9, 0x23, 0x3f, 0x44, 0x95, 0x5b, 0x77, 0x46, 0x9c, 0x3c, 0x13, 0xd8, - 0xd3, 0x1e, 0xaa, 0x6a, 0x76, 0xcf, 0xaf, 0xf1, 0xa2, 0x6a, 0xb6, 0x40, 0xbe, 0xf8, 0x94, 0xae, - 0x7a, 0x1a, 0xb0, 0xb2, 0xd2, 0x9b, 0x0f, 0xb8, 0x51, 0xe7, 0xff, 0x1a, 0x6e, 0x9b, 0x19, 0x6a, - 0xc8, 0x27, 0x57, 0xcf, 0xf5, 0xbb, 0x4f, 0x2f, 0x48, 0xb0, 0xf9, 0x80, 0x33, 0xee, 0xb8, 0xd3, - 0xff, 0x1a, 0x57, 0x69, 0x9b, 0xd1, 0x8c, 0x6a, 0xe8, 0x56, 0xd5, 0x1e, 0xd2, 0x77, 0x5c, 0x94, - 0x47, 0x3f, 0xe1, 0xe8, 0xe5, 0xf8, 0x3e, 0x46, 0xbd, 0x96, 0xb7, 0xb6, 0x7d, 0xc2, 0x4e, 0xf1, - 0x73, 0xd9, 0xff, 0x8c, 0xbd, 0xaa, 0x2b, 0xaa, 0xca, 0x36, 0xba, 0x37, 0x4d, 0xf2, 0x84, 0x49, - 0x92, 0x70, 0x7f, 0x87, 0xe3, 0x1f, 0xde, 0xcd, 0x45, 0xc5, 0x96, 0x69, 0x77, 0x4d, 0xb5, 0x47, - 0x1c, 0x37, 0x29, 0x34, 0x7f, 0x8c, 0x2a, 0x4a, 0xca, 0xe5, 0xc9, 0x3e, 0x3a, 0xb1, 0xa5, 0xbf, - 0xc3, 0x82, 0x87, 0x1c, 0x34, 0x1f, 0x4e, 0xc7, 0xf1, 0xc5, 0xff, 0x1d, 0x6e, 0x89, 0x8f, 0x55, - 0x19, 0xb3, 0x4b, 0xfa, 0x0a, 0x95, 0x95, 0x70, 0xc2, 0xd1, 0x8a, 0xe1, 0x95, 0x89, 0x14, 0x32, - 0xa0, 0x74, 0xd3, 0x26, 0xdb, 0xdb, 0x6f, 0x6f, 0xb6, 0xdd, 0xb1, 0x3a, 0x1d, 0x3c, 0x4a, 0x8e, - 0xfa, 0xe0, 0x94, 0x2c, 0x9a, 0xe9, 0x9f, 0x78, 0xbe, 0x0a, 0x2a, 0xaa, 0xb3, 0xb2, 0x95, 0x19, - 0x44, 0xcd, 0xf1, 0xd7, 0x53, 0xf8, 0x89, 0xd8, 0xc3, 0x23, 0x8f, 0x55, 0xc5, 0x5c, 0xa4, 0xbb, - 0xc9, 0xc1, 0x18, 0xb4, 0x3d, 0xe2, 0x5f, 0x94, 0xcd, 0x34, 0xd3, 0x41, 0x1e, 0x2c, 0x5a, 0xd7, - 0x7b, 0xae, 0x0a, 0x46, 0x5b, 0x2c, 0x38, 0x68, 0x8a, 0xc3, 0xdb, 0x6d, 0x36, 0x5a, 0xf9, 0xca, - 0xa7, 0x84, 0xf0, 0xf9, 0x38, 0x6e, 0xb4, 0xe9, 0x81, 0x6e, 0xae, 0x8d, 0x3a, 0x5f, 0xea, 0xcf, - 0xaf, 0x7c, 0x11, 0xf2, 0x49, 0x1c, 0xaf, 0x82, 0x3a, 0x34, 0x43, 0x58, 0x8d, 0xc2, 0xe0, 0x96, - 0x9e, 0x94, 0xf2, 0x45, 0xcc, 0xae, 0x08, 0xcb, 0x4d, 0xbb, 0x07, 0xd0, 0xd6, 0x51, 0xd4, 0xb2, - 0xe2, 0x7c, 0x42, 0xb9, 0x5c, 0x11, 0x86, 0x25, 0xfb, 0xd7, 0x57, 0x93, 0x98, 0x9b, 0xbf, 0x84, - 0xfb, 0xbb, 0xbb, 0xcb, 0xdc, 0x7e, 0x4f, 0xf8, 0x27, 0x29, 0x1a, 0x92, 0x1e, 0xd2, 0xb5, 0x50, - 0xbf, 0x74, 0xdd, 0x8d, 0x0d, 0xf0, 0x5a, 0x57, 0xda, 0x5a, 0x52, 0x1c, 0x93, 0x84, 0x36, 0x47, - 0x96, 0xba, 0x2e, 0x6c, 0x12, 0x2d, 0x04, 0x71, 0xc9, 0x7a, 0x19, 0xd7, 0xd7, 0xaf, 0x82, 0x4d, - 0x6d, 0x92, 0xf9, 0x87, 0x3e, 0xe1, 0x4e, 0x42, 0xcb, 0xd7, 0x5c, 0xd6, 0x8d, 0x3b, 0x32, 0x71, - 0x3e, 0x4d, 0x1b, 0x5f, 0xbe, 0x84, 0xd5, 0x73, 0x08, 0x56, 0xb5, 0xc5, 0xe4, 0xcf, 0x6d, 0x23, - 0xf4, 0x13, 0xe8, 0xee, 0x60, 0xa5, 0x69, 0x3e, 0x5e, 0x4f, 0x3f, 0x36, 0xef, 0x04, 0x7c, 0x94, - 0x3a, 0xc9, 0xcc, 0x25, 0x55, 0x55, 0xf2, 0x8a, 0xd5, 0x41, 0x6f, 0x09, 0x9f, 0x63, 0x59, 0xf1, - 0xaf, 0xcb, 0x32, 0x06, 0x9b, 0x5f, 0x04, 0xa5, 0x6e, 0xb4, 0xdb, 0x48, 0xdd, 0xdf, 0x30, 0x88, - 0xbd, 0x7c, 0xd5, 0xad, 0x70, 0x56, 0x54, 0x9b, 0xb6, 0x92, 0x49, 0xf6, 0xd3, 0xc1, 0x47, 0xc1, - 0x25, 0xcb, 0xfa, 0x2b, 0x5e, 0x14, 0xa5, 0x7d, 0x54, 0x99, 0x6e, 0x9b, 0x9d, 0x93, 0xbf, 0x57, - 0x2b, 0x8c, 0xa6, 0x7e, 0x5e, 0xf6, 0x11, 0x66, 0x9e, 0xee, 0x96, 0x66, 0x3c, 0x29, 0x69, 0x25, - 0x24, 0x0b, 0x29, 0xcf, 0x03, 0xfa, 0x22, 0x94, 0xfe, 0x12, 0x26, 0xa9, 0x2f, 0x34, 0x54, 0xf8, - 0xe9, 0x52, 0x5e, 0x22, 0xd5, 0x0e, 0x6f, 0xb2, 0x21, 0xa8, 0x5e, 0x09, 0xb5, 0x4e, 0xd9, 0x3e, - 0xef, 0x94, 0x8f, 0x3e, 0x57, 0x11, 0x18, 0x5d, 0xd8, 0x31, 0x46, 0x37, 0xe5, 0xe0, 0x84, 0x68, - 0xfb, 0x45, 0x7d, 0x8e, 0x26, 0x6e, 0xa0, 0xcb, 0x68, 0xc4, 0x09, 0x05, 0x02, 0x25, 0xca, 0xa2, - 0x19, 0xf4, 0x08, 0x3b, 0xdd, 0x3d, 0xc4, 0x09, 0x56, 0x93, 0x8b, 0x98, 0xe4, 0xd0, 0xab, 0x49, - 0xfc, 0xc4, 0xdd, 0xfd, 0x04, 0xf0, 0xf8, 0x23, 0x08, 0x46, 0xf7, 0xfb, 0xe1, 0xab, 0xe8, 0xfb, - 0x79, 0xf7, 0xfc, 0x56, 0xda, 0x73, 0x5f, 0xf1, 0x56, 0x9f, 0x52, 0xdf, 0xe6, 0xbc, 0xb2, 0xf8, - 0xc2, 0xa6, 0xd5, 0xe5, 0xfd, 0xce, 0xfe, 0x8e, 0x6b, 0xf0, 0xef, 0x36, 0x1b, 0x53, 0xee, 0xe9, - 0xf2, 0x33, 0x71, 0x59, 0xa3, 0x9f, 0xff, 0x84, 0x2d, 0xa5, 0xbe, 0xed, 0xa6, 0xff, 0x35, 0x16, - 0x35, 0x97, 0x82, 0x5b, 0x53, 0x6d, 0xaa, 0xcc, 0xdf, 0x06, 0x05, 0x49, 0xe9, 0x36, 0xbc, 0x16, - 0x21, 0xee, 0x2c, 0x20, 0xbf, 0xc1, 0x76, 0x4d, 0x2e, 0x6d, 0xa7, 0x8b, 0x93, 0xe3, 0xab, 0x5a, - 0xe9, 0x55, 0x24, 0xbc, 0x27, 0xcb, 0x89, 0x16, 0x5f, 0xc2, 0x9b, 0x55, 0x6d, 0xa4, 0x92, 0xb5, - 0x55, 0x74, 0xf0, 0x8f, 0x82, 0xcc, 0xfa, 0xf2, 0xe7, 0xc6, 0xbe, 0x4c, 0xc7, 0x1e, 0x08, 0xca, - 0xb5, 0x8b, 0xa7, 0x5e, 0x09, 0x35, 0x7b, 0x1f, 0x10, 0x21, 0x59, 0x64, 0x8a, 0xeb, 0x96, 0x58, - 0x5b, 0xae, 0x82, 0x79, 0x57, 0x20, 0x5a, 0x25, 0xcb, 0x5e, 0x6a, 0x67, 0xcf, 0xc1, 0x1d, 0xf5, - 0x8b, 0xe3, 0x34, 0xaf, 0xbb, 0xb9, 0xf0, 0x57, 0x79, 0xfd, 0xaf, 0x17, 0x5d, 0x53, 0x4f, 0xf0, - 0x8d, 0x49, 0xc9, 0xf6, 0xd5, 0x8d, 0x59, 0xf3, 0xf1, 0x65, 0x54, 0xfa, 0x57, 0xf1, 0x44, 0x9b, - 0x34, 0x93, 0xfc, 0x7e, 0xa9, 0xdd, 0xed, 0x6e, 0xbe, 0x10, 0xbe, 0x6f, 0x55, 0xb2, 0xaf, 0xc2, - 0x72, 0xcb, 0xf2, 0x67, 0xcb, 0x9b, 0x09, 0x9e, 0x26, 0x2a, 0xe7, 0xa3, 0x47, 0x2c, 0x0f, 0x20, - 0x6f, 0xc7, 0x2e, 0x78, 0x22, 0xa4, 0x42, 0x0e, 0xff, 0x11, 0x21, 0x07, 0x5b, 0x4b, 0x5c, 0xd5, - 0xcf, 0x0f, 0x30, 0xf7, 0x7d, 0x44, 0xcc, 0x4b, 0x52, 0x33, 0x88, 0x90, 0x5d, 0x6b, 0xc4, 0x82, - 0x40, 0x87, 0x2e, 0x30, 0xf3, 0x19, 0x5b, 0xfc, 0x94, 0xde, 0xf8, 0x88, 0x29, 0x29, 0x09, 0x56, - 0x2f, 0x77, 0xc7, 0x19, 0x5d, 0xfe, 0x08, 0x6e, 0xfe, 0x1f, 0x64, 0x7a, 0x77, 0xc2, 0x55, 0xa2, - 0x63, 0x63, 0xce, 0xa3, 0xc9, 0x49, 0x24, 0xbe, 0x32, 0xe6, 0x41, 0x8d, 0x18, 0x87, 0x46, 0x46, - 0xb1, 0xa6, 0x8c, 0x6e, 0x5c, 0xd1, 0xa5, 0x09, 0x71, 0x25, 0x47, 0x3b, 0x86, 0xab, 0xb1, 0xff, - 0x84, 0x6c, 0x66, 0x61, 0xb8, 0xda, 0x3c, 0x5b, 0xdf, 0x3d, 0x1d, 0xf1, 0x45, 0x75, 0xa5, 0x56, - 0x99, 0x78, 0x7a, 0x58, 0xe9, 0xa2, 0x4e, 0x24, 0x99, 0x5a, 0x9a, 0x8b, 0x37, 0xb3, 0xf7, 0xd1, - 0xdc, 0x2e, 0x52, 0x66, 0xdf, 0xbe, 0x6c, 0xae, 0x3c, 0xad, 0x35, 0xb5, 0x4b, 0xb4, 0xd7, 0xab, - 0x8f, 0x2c, 0x57, 0xba, 0xe2, 0x86, 0x53, 0xab, 0x7a, 0x5e, 0x8e, 0xe3, 0xcf, 0x5c, 0xba, 0x5d, - 0xf5, 0xc2, 0x46, 0xaa, 0xa9, 0xfd, 0x8b, 0xe2, 0xfa, 0x4b, 0xcd, 0x9e, 0x08, 0xed, 0xac, 0xf2, - 0xf8, 0x2a, 0xe9, 0x97, 0xe2, 0xb2, 0xea, 0x1e, 0xf7, 0x1e, 0x3e, 0xab, 0x5a, 0xad, 0x53, 0xd5, - 0x7c, 0xa7, 0xaa, 0xfc, 0x9b, 0xdf, 0xc1, 0x2d, 0xcf, 0xee, 0x95, 0xd3, 0x7f, 0x8c, 0xa4, 0xaf, - 0xa5, 0x6f, 0x1d, 0x56, 0xfb, 0xbb, 0xf8, 0xe3, 0x6a, 0xa6, 0xcd, 0x56, 0x35, 0x75, 0xe2, 0x42, - 0x93, 0xe0, 0xad, 0x3d, 0x75, 0xa0, 0xdd, 0xbd, 0xef, 0x05, 0x70, 0x4a, 0x76, 0xab, 0xae, 0x8e, - 0xdb, 0x05, 0xca, 0x41, 0x84, 0xc7, 0x4b, 0xe1, 0x4e, 0xda, 0x6f, 0x6a, 0xd9, 0x92, 0x23, 0x6e, - 0xdf, 0x47, 0x87, 0xd4, 0xa5, 0xf7, 0x3b, 0x33, 0xb0, 0x97, 0x97, 0x76, 0x7c, 0x4c, 0x55, 0xb8, - 0xe9, 0xb6, 0xf7, 0xf3, 0x5a, 0x1d, 0x5f, 0xe1, 0x42, 0x39, 0xa8, 0xf6, 0x39, 0xf3, 0xdc, 0x7c, - 0xa6, 0xef, 0xad, 0x7b, 0x89, 0x10, 0x3a, 0x4c, 0x5e, 0xaa, 0x92, 0x42, 0xe9, 0x78, 0x98, 0x82, - 0x8b, 0x88, 0xe2, 0x50, 0x30, 0x7d, 0xc1, 0x8b, 0xc4, 0xbf, 0x3c, 0x13, 0x10, 0xa8, 0x96, 0x18, - 0xc9, 0xff, 0xde, 0xee, 0x5f, 0x08, 0xcc, 0x59, 0x04, 0x9d, 0xce, 0x10, 0xa7, 0x2f, 0x65, 0x13, - 0x3e, 0xb8, 0x99, 0xdb, 0x49, 0xbb, 0x53, 0x45, 0xa7, 0xc4, 0x1e, 0x78, 0xdb, 0x4f, 0x6f, 0xc5, - 0xef, 0x36, 0xdb, 0xaf, 0x88, 0xa9, 0xe3, 0x66, 0xab, 0x2f, 0xfb, 0xed, 0x34, 0xb8, 0x21, 0xd3, - 0xb6, 0xc3, 0xce, 0x56, 0x31, 0xdd, 0x53, 0xfd, 0xf0, 0x5b, 0xdb, 0x4a, 0xd5, 0xa9, 0x7c, 0xd2, - 0x47, 0x52, 0x71, 0x65, 0xc5, 0xea, 0xbf, 0x82, 0x39, 0x33, 0xc1, 0x5c, 0x11, 0x55, 0xbe, 0xbe, - 0x20, 0x51, 0xa9, 0x74, 0x8d, 0x5f, 0x48, 0x9c, 0x25, 0xd5, 0x4e, 0xd6, 0xbf, 0x09, 0x92, 0x4c, - 0xd2, 0xbc, 0x9c, 0x21, 0xc5, 0xea, 0xbe, 0x6c, 0xf9, 0x4f, 0xab, 0x5e, 0x0a, 0x69, 0xc9, 0xdb, - 0x6a, 0x9d, 0x33, 0x7f, 0x05, 0x3e, 0x28, 0xce, 0xee, 0x54, 0xaf, 0x59, 0xf3, 0xf1, 0x93, 0xc1, - 0x72, 0xea, 0x93, 0x12, 0xfb, 0x90, 0x40, 0x67, 0xa6, 0xfc, 0x4c, 0x45, 0x6a, 0xee, 0xef, 0xc4, - 0xcd, 0x77, 0x3b, 0x16, 0xb8, 0xca, 0x49, 0xb6, 0x4f, 0x74, 0xe7, 0xf9, 0x58, 0x5a, 0xd7, 0x13, - 0x65, 0xbd, 0xdf, 0x2e, 0xab, 0xf0, 0x4f, 0xa3, 0x77, 0x6b, 0x57, 0x38, 0x98, 0xa2, 0x13, 0xd8, - 0x3e, 0xef, 0x52, 0x0f, 0xbd, 0x89, 0xb1, 0x7e, 0x61, 0xea, 0xbe, 0x22, 0x09, 0x07, 0x09, 0x48, - 0x29, 0xb8, 0xaf, 0x94, 0xf1, 0x22, 0xb5, 0xa9, 0x6c, 0xb5, 0x28, 0xb5, 0xe0, 0xae, 0xd4, 0x5d, - 0x98, 0x48, 0x11, 0xd3, 0x8c, 0x17, 0x73, 0x7a, 0xf9, 0x3f, 0xe7, 0xd1, 0x5c, 0x2e, 0xb0, 0xc7, - 0xb2, 0x37, 0xb6, 0xb8, 0x4a, 0xc2, 0x69, 0xa2, 0x42, 0x9d, 0xfc, 0x5d, 0x01, 0xb4, 0xcc, 0x74, - 0x69, 0xb5, 0x5b, 0x06, 0xb8, 0x5c, 0xe8, 0xa9, 0xad, 0x13, 0x45, 0x8c, 0x56, 0x45, 0xa3, 0x0a, - 0x97, 0xf9, 0xef, 0x32, 0x4d, 0x33, 0x25, 0xff, 0x7a, 0x69, 0x7d, 0xf2, 0x6f, 0xc1, 0x09, 0x5d, - 0xd5, 0xe2, 0x97, 0x87, 0x3b, 0x4d, 0x75, 0x34, 0x64, 0x8f, 0xe6, 0xe2, 0x09, 0x4e, 0xed, 0x56, - 0xb8, 0x6f, 0xaa, 0x4b, 0x1d, 0xef, 0xeb, 0xac, 0x5f, 0x37, 0x69, 0xa5, 0xca, 0x47, 0x49, 0x0a, - 0xb8, 0x2e, 0xb1, 0x35, 0x6e, 0xf2, 0xff, 0xfc, 0x27, 0xd3, 0x7c, 0x98, 0xab, 0x90, 0xad, 0x52, - 0xf9, 0x0d, 0xab, 0xf1, 0x0e, 0xe5, 0xa2, 0xcf, 0x89, 0xea, 0xb5, 0xaf, 0x97, 0x9b, 0xfc, 0xdd, - 0xdf, 0x11, 0x37, 0x77, 0x51, 0x30, 0x42, 0x50, 0xbe, 0x8c, 0x62, 0x76, 0x3e, 0x52, 0xbb, 0x4d, - 0x57, 0x13, 0x1a, 0x5f, 0xa7, 0x5f, 0x94, 0xef, 0xa1, 0xe2, 0x7e, 0x24, 0x50, 0xc3, 0x31, 0xc5, - 0xe9, 0x5a, 0xf1, 0x34, 0xb2, 0x7a, 0x26, 0xd2, 0x58, 0x90, 0x55, 0x2d, 0x02, 0xac, 0x87, 0xa5, - 0xd6, 0xe7, 0xf4, 0x32, 0xfe, 0xf9, 0x71, 0x10, 0x5e, 0x72, 0x68, 0x5e, 0x26, 0xb8, 0x87, 0x1b, - 0x2a, 0xd2, 0xde, 0xc3, 0xc4, 0x76, 0x9d, 0x1c, 0x77, 0xf9, 0x38, 0x23, 0x11, 0xca, 0xf6, 0x3e, - 0xc5, 0xa4, 0xff, 0x94, 0xc9, 0xe5, 0x67, 0xc5, 0xd0, 0xc8, 0xa4, 0x68, 0xc9, 0xb3, 0xaa, 0x5f, - 0x04, 0x76, 0xa5, 0x42, 0x9c, 0x78, 0x63, 0xbb, 0x56, 0xab, 0x92, 0xab, 0x4f, 0xcb, 0x27, 0xef, - 0x92, 0xe3, 0xeb, 0xfc, 0x41, 0x32, 0xa0, 0xb1, 0x91, 0x8f, 0x24, 0x4d, 0x9c, 0x56, 0xfa, 0xe4, - 0x2a, 0xeb, 0xe2, 0x2d, 0x6d, 0xb1, 0x9d, 0x84, 0x3c, 0x9c, 0xc4, 0x7d, 0xfc, 0x61, 0xa7, 0xef, - 0x62, 0x30, 0x93, 0xe9, 0xdd, 0xdb, 0x27, 0xd1, 0x98, 0xe6, 0x3c, 0x4f, 0xe8, 0xed, 0xe2, 0x42, - 0x97, 0x43, 0xe4, 0xcd, 0xce, 0x91, 0xf1, 0xd1, 0x85, 0xb9, 0xed, 0xe6, 0x3e, 0x09, 0xbb, 0x4d, - 0x63, 0xc6, 0x6f, 0x48, 0x8a, 0xeb, 0x98, 0x46, 0x99, 0xfb, 0xe1, 0x22, 0xe9, 0xb6, 0x8d, 0xe4, - 0x65, 0xf0, 0x48, 0x79, 0x76, 0xd1, 0x68, 0xae, 0x08, 0x69, 0x6f, 0x14, 0x9d, 0x7a, 0x5e, 0x14, - 0xe9, 0x37, 0x4a, 0x5d, 0x6d, 0xdd, 0xcf, 0xb3, 0xf2, 0x97, 0x88, 0x33, 0xb7, 0xa5, 0xb6, 0xb8, - 0x4e, 0xb5, 0x5d, 0x54, 0xbc, 0xb5, 0x4b, 0x5c, 0x13, 0x09, 0xcb, 0x91, 0xda, 0xab, 0x5f, 0x4d, - 0xdc, 0x44, 0x51, 0x8d, 0xc9, 0xd0, 0xd4, 0x2b, 0x6a, 0x2e, 0x9b, 0xdf, 0x82, 0x3a, 0x95, 0x25, - 0x4e, 0x27, 0x0f, 0x0e, 0xf5, 0x1f, 0x88, 0xfc, 0x13, 0x5f, 0x77, 0x84, 0x6c, 0x57, 0x04, 0xd7, - 0x16, 0xb1, 0x97, 0x13, 0x16, 0x2f, 0x23, 0x0a, 0xdd, 0xa4, 0x3f, 0x16, 0x4d, 0x37, 0x5a, 0xdf, - 0x1c, 0x21, 0xdb, 0x69, 0x59, 0xec, 0x7c, 0x39, 0xa1, 0xfd, 0x12, 0xb3, 0xf2, 0x94, 0xda, 0x5e, - 0x4d, 0x8f, 0xc4, 0x5b, 0xa7, 0xcf, 0xbf, 0x04, 0x58, 0x3b, 0x4a, 0x1a, 0x79, 0x8f, 0x12, 0x2c, - 0x97, 0x52, 0x40, 0xf0, 0x4b, 0x3c, 0x3c, 0x11, 0x9e, 0xcc, 0xd9, 0xbf, 0xc5, 0x1a, 0x5f, 0xc9, - 0x0f, 0xc4, 0x10, 0x43, 0x87, 0x48, 0x3a, 0xa7, 0xb0, 0x78, 0xff, 0x0b, 0x9e, 0x26, 0xef, 0x75, - 0x6f, 0xf6, 0x5a, 0xce, 0x1c, 0x5c, 0x75, 0x0c, 0x7a, 0xc7, 0xe5, 0x8d, 0xdf, 0x0c, 0x70, 0x49, - 0x55, 0xaf, 0x4b, 0x88, 0xae, 0x3c, 0xa4, 0xc9, 0x3d, 0x73, 0x79, 0x75, 0x3f, 0xd6, 0x52, 0x71, - 0x04, 0x56, 0xfa, 0x29, 0x7d, 0xd4, 0x4c, 0x41, 0x15, 0x98, 0xf7, 0xe4, 0xef, 0x24, 0xa2, 0x1f, - 0x88, 0xdc, 0x4c, 0x27, 0x07, 0x6e, 0x0f, 0x6c, 0xbb, 0x98, 0x92, 0x35, 0xf1, 0x34, 0x14, 0xdc, - 0x85, 0x8d, 0xeb, 0x3d, 0x52, 0x75, 0x5d, 0x8b, 0x7d, 0x56, 0x24, 0x20, 0x66, 0xfb, 0xd4, 0x4f, - 0x35, 0xcd, 0x9e, 0x0a, 0x6d, 0xae, 0xd5, 0x57, 0x1f, 0x31, 0xb0, 0x5c, 0x96, 0xa9, 0x7d, 0xe7, - 0xf8, 0xae, 0xae, 0x0b, 0xc1, 0x08, 0xb4, 0xad, 0x27, 0x15, 0xf3, 0x5a, 0xdf, 0xc1, 0x25, 0x13, - 0xd7, 0xbe, 0x08, 0x76, 0xad, 0x74, 0x9c, 0x15, 0xc6, 0xea, 0xfe, 0x7d, 0xee, 0xf9, 0x5f, 0x31, - 0x9b, 0x6b, 0x5c, 0x10, 0xee, 0xd5, 0x9f, 0x67, 0x5d, 0x57, 0x30, 0x85, 0xaf, 0xc1, 0x6d, 0xbb, - 0xef, 0x6d, 0xc7, 0xba, 0xb4, 0xaa, 0xf8, 0xaa, 0xb7, 0xd6, 0xdf, 0xad, 0x57, 0x5a, 0x9b, 0x8e, - 0xba, 0xee, 0x5a, 0xb2, 0x81, 0xdd, 0x31, 0x9b, 0x8b, 0x90, 0xf6, 0x98, 0xd8, 0xc4, 0x71, 0x9b, - 0x44, 0xf5, 0x2a, 0x7e, 0xd9, 0xd9, 0x2b, 0x7b, 0x1a, 0xe1, 0x31, 0x1c, 0x9a, 0xda, 0x56, 0xfc, - 0x23, 0xab, 0x56, 0xf5, 0x76, 0xe8, 0x6b, 0x84, 0x8a, 0xda, 0x5d, 0xa5, 0xf8, 0x8e, 0x6c, 0xa6, - 0xdb, 0x1a, 0x5e, 0x59, 0xb5, 0xb3, 0xfc, 0x57, 0x2e, 0xf4, 0xcf, 0xc2, 0x74, 0xd3, 0xf9, 0xde, - 0xb9, 0x76, 0x8b, 0xb9, 0x39, 0x2d, 0xdd, 0x12, 0xe6, 0xbd, 0xe5, 0xe0, 0xab, 0x91, 0x2b, 0x74, - 0xa9, 0x11, 0xae, 0xa6, 0xff, 0x18, 0x45, 0x4b, 0xa6, 0xb3, 0x53, 0xf2, 0xe1, 0x22, 0x61, 0x22, - 0xb2, 0x3f, 0xb2, 0x5c, 0xd1, 0xf3, 0x47, 0xf1, 0xed, 0x2e, 0x16, 0xbe, 0xd1, 0xa6, 0xa6, 0x5f, - 0x5c, 0xb6, 0xbe, 0x4e, 0x23, 0x33, 0x29, 0xd5, 0x3a, 0x1b, 0x18, 0xae, 0x11, 0xee, 0xe9, 0xad, - 0x56, 0xd7, 0xc1, 0x1c, 0xf0, 0xcc, 0xc5, 0x57, 0x0f, 0xd2, 0x3b, 0xfa, 0x6d, 0x24, 0xde, 0xac, - 0xf1, 0xed, 0x7f, 0xcf, 0x8a, 0x3d, 0xaf, 0x5f, 0xc6, 0x76, 0x56, 0x4c, 0xa9, 0x2e, 0x63, 0x34, - 0x57, 0xcb, 0xd7, 0x54, 0xbf, 0x05, 0x77, 0x7a, 0x57, 0x4d, 0xde, 0x2b, 0x6e, 0x3b, 0xe0, 0x9a, - 0xe9, 0xbd, 0x3a, 0xe1, 0x85, 0xc1, 0x1f, 0x55, 0x71, 0xe0, 0x88, 0x4d, 0xef, 0xaf, 0xb1, 0x49, - 0x53, 0x7f, 0x09, 0x5d, 0xbc, 0x61, 0x67, 0x5f, 0x08, 0x55, 0x49, 0xea, 0x5b, 0x77, 0x7f, 0xc2, - 0x43, 0x53, 0x7c, 0xbf, 0xf8, 0x50, 0x54, 0x66, 0xee, 0x8f, 0xc6, 0x31, 0x64, 0x6c, 0xf9, 0xa3, - 0x83, 0xef, 0x59, 0x7c, 0x4f, 0xe0, 0x88, 0x49, 0xf2, 0xb3, 0xe6, 0x91, 0x62, 0x60, 0x94, 0x40, - 0xbb, 0x46, 0x45, 0x34, 0x19, 0xaa, 0xd8, 0xd7, 0xc4, 0x13, 0x52, 0xa1, 0x4c, 0xf9, 0xfd, 0xca, - 0x89, 0x7e, 0x24, 0x41, 0x43, 0x68, 0x46, 0x98, 0xf7, 0x0c, 0x1c, 0x6d, 0x97, 0xfc, 0x12, 0x9f, - 0x3f, 0xa5, 0xa5, 0x73, 0xe6, 0xcb, 0x9f, 0x89, 0xd2, 0x57, 0xa6, 0x4a, 0xfe, 0x08, 0x0c, 0x89, - 0xb6, 0x10, 0xe6, 0x4e, 0x5c, 0xeb, 0xe9, 0x64, 0x80, 0x4a, 0x2f, 0xfe, 0x13, 0xea, 0xf5, 0x7b, - 0x21, 0x9a, 0xfd, 0xb2, 0x47, 0xe1, 0x02, 0xa2, 0x6c, 0x9e, 0xbd, 0xc9, 0x85, 0x85, 0xfb, 0xf1, - 0x86, 0x26, 0xd2, 0x4a, 0x95, 0x26, 0xdd, 0xed, 0x1e, 0x5a, 0xe3, 0x70, 0xeb, 0xbd, 0x32, 0x8f, - 0x8e, 0x0d, 0x1a, 0x33, 0x21, 0xd5, 0x90, 0x7a, 0x0e, 0xbf, 0xa8, 0xea, 0x47, 0x82, 0xfb, 0x4d, - 0x53, 0x1d, 0x18, 0xd9, 0xfa, 0xf8, 0xd6, 0x9f, 0xf1, 0x37, 0x69, 0xb9, 0x0d, 0xb4, 0x8f, 0xe3, - 0x0e, 0xd5, 0xb4, 0x89, 0xfb, 0x97, 0x62, 0x43, 0x4a, 0x5f, 0xf9, 0x6c, 0x69, 0x24, 0x97, 0x85, - 0x2d, 0xe6, 0xca, 0x95, 0xf2, 0x4d, 0xd2, 0x6c, 0x8c, 0xd7, 0xa7, 0x04, 0x9c, 0x49, 0xa6, 0x34, - 0x21, 0x85, 0x62, 0xb9, 0xca, 0x7c, 0x23, 0xd5, 0x51, 0x5b, 0x5c, 0xe2, 0x04, 0xe6, 0xbc, 0xbb, - 0x98, 0x61, 0x73, 0xbc, 0x69, 0xd0, 0xca, 0xd4, 0x3e, 0x33, 0x5f, 0x23, 0x52, 0x23, 0x62, 0x4b, - 0x5d, 0x7d, 0xdd, 0xdf, 0xc5, 0x49, 0xfc, 0x8c, 0xd0, 0xfc, 0x25, 0x19, 0xa5, 0x1a, 0x9a, 0x51, - 0xaa, 0xaf, 0xc1, 0x64, 0x9a, 0x8b, 0xda, 0x6c, 0xbb, 0xab, 0x2f, 0x82, 0xaa, 0x19, 0x3d, 0x0d, - 0xb2, 0xed, 0xce, 0xdf, 0xbb, 0xe1, 0x2d, 0x8c, 0xdf, 0xc7, 0x57, 0xf0, 0x4f, 0x4a, 0x93, 0xb1, - 0x9f, 0xf5, 0xf1, 0x5d, 0xa4, 0xdd, 0x0d, 0x24, 0x5e, 0x0a, 0xa8, 0x74, 0x37, 0x2e, 0xb1, 0xf2, - 0x32, 0x65, 0x5c, 0xbe, 0x10, 0xa6, 0x93, 0xe3, 0x92, 0x4e, 0xdd, 0xfe, 0x13, 0x99, 0x8c, 0x9d, - 0x0c, 0xb1, 0xfc, 0x66, 0xc6, 0x9b, 0x65, 0xc3, 0x36, 0x28, 0xa3, 0x4a, 0xe5, 0xca, 0xe0, 0xd8, - 0xfc, 0x15, 0xd0, 0xc8, 0xcb, 0xd6, 0x5f, 0x46, 0xaa, 0xb7, 0x32, 0x9d, 0xf8, 0xfa, 0xf8, 0x4a, - 0x92, 0x5b, 0x6b, 0x6b, 0xcc, 0x43, 0xb2, 0x6d, 0x63, 0xfc, 0x15, 0x17, 0x75, 0x26, 0x2e, 0xde, - 0x9a, 0x6c, 0xf8, 0x25, 0x26, 0xa9, 0x64, 0x95, 0x87, 0x82, 0x7b, 0xa4, 0xfb, 0xa7, 0x86, 0x3c, - 0x16, 0x6e, 0xee, 0xa9, 0xb7, 0x73, 0xf2, 0xff, 0x0f, 0x82, 0x62, 0xba, 0x4d, 0xa5, 0xdd, 0x26, - 0xbe, 0x08, 0xcc, 0xb5, 0xb3, 0xe0, 0x88, 0x6a, 0xae, 0xff, 0x04, 0x52, 0xfa, 0x7a, 0x5f, 0x8b, - 0x37, 0x36, 0x27, 0xab, 0xe4, 0x35, 0xb2, 0xe7, 0xe2, 0x68, 0x6b, 0xda, 0x4f, 0xe2, 0x84, 0xed, - 0x3a, 0x69, 0xa6, 0x3a, 0xab, 0x96, 0x7c, 0xb4, 0xfe, 0x0a, 0xa9, 0x24, 0x6c, 0xa9, 0xf5, 0xba, - 0x79, 0x71, 0x3f, 0x82, 0x62, 0xb6, 0xfd, 0xc5, 0x6e, 0xe7, 0xc1, 0x16, 0x4c, 0x2d, 0xb6, 0x91, - 0x57, 0x04, 0x26, 0x49, 0x27, 0xbf, 0xc4, 0xcb, 0x36, 0x13, 0x77, 0x12, 0xf7, 0x25, 0x57, 0xd5, - 0xbe, 0x0c, 0x39, 0x70, 0xba, 0x93, 0x6d, 0x56, 0x35, 0xef, 0xfe, 0x13, 0x32, 0xb6, 0x5d, 0xcb, - 0x56, 0x1f, 0xe5, 0xf2, 0x7f, 0x0a, 0xea, 0xd4, 0x98, 0x9a, 0x2e, 0x5f, 0x8e, 0xd4, 0xa3, 0xf0, - 0x49, 0x4e, 0xad, 0x7f, 0xe2, 0x32, 0x25, 0x65, 0xb1, 0xb6, 0xc3, 0x7f, 0x0b, 0x65, 0xc2, 0xc1, - 0xf8, 0x74, 0x95, 0x8d, 0x9b, 0x3c, 0x7f, 0xc6, 0xbf, 0xf8, 0xc2, 0xdb, 0x9b, 0x54, 0x9b, 0x5e, - 0x66, 0x22, 0x72, 0xf6, 0x5d, 0xd7, 0x64, 0xd1, 0x1f, 0x7c, 0x47, 0x4d, 0x22, 0xc8, 0x7a, 0x8f, - 0x73, 0x10, 0x78, 0x8b, 0x0e, 0x2c, 0x48, 0xcf, 0x6b, 0xfc, 0x23, 0x3e, 0x1f, 0xcf, 0xbb, 0xba, - 0xf5, 0xf0, 0xa1, 0x73, 0x65, 0x60, 0x14, 0xda, 0x3d, 0x7e, 0xab, 0xcb, 0xe0, 0xa7, 0xa1, 0x26, - 0x35, 0x5c, 0x8d, 0xca, 0xc2, 0xb2, 0x8d, 0x65, 0x6a, 0xe0, 0x8e, 0xd5, 0x72, 0xf8, 0x48, 0xaf, - 0x23, 0xf7, 0x2b, 0x68, 0xfc, 0x25, 0x93, 0xa7, 0xd8, 0xe7, 0x67, 0xc1, 0x6f, 0x2b, 0x1b, 0x24, - 0xd8, 0xf2, 0xf8, 0x43, 0x2c, 0x76, 0x32, 0xe6, 0x5c, 0x63, 0x91, 0x94, 0xe2, 0xf1, 0x9b, 0xd7, - 0x2b, 0x1a, 0xa4, 0x5d, 0xcf, 0xec, 0xbc, 0x4d, 0xec, 0x68, 0x78, 0xdd, 0xc4, 0x94, 0x1c, 0x7c, - 0x17, 0x6d, 0x34, 0x7d, 0x97, 0x38, 0xbe, 0x28, 0xd7, 0x6e, 0xc6, 0x9b, 0x72, 0x70, 0x98, 0xb5, - 0x4e, 0x2b, 0xd5, 0x7c, 0xc2, 0x13, 0x4a, 0x97, 0x85, 0x29, 0xb1, 0x19, 0x9c, 0xd9, 0xd3, 0x8c, - 0xaf, 0x26, 0x44, 0xa4, 0xf4, 0xb1, 0x0f, 0x04, 0x73, 0x65, 0xda, 0x87, 0x71, 0xe0, 0x96, 0xdb, - 0x24, 0x9e, 0x56, 0x6e, 0xdf, 0x04, 0x36, 0xea, 0x6a, 0xd7, 0x73, 0xe0, 0xb7, 0x9f, 0xdb, 0x44, - 0x7c, 0xe2, 0xf8, 0x44, 0xa6, 0xd3, 0x62, 0xc4, 0xb4, 0x5b, 0x4d, 0x7c, 0x10, 0x88, 0xdb, 0x7e, - 0xf8, 0x22, 0xc5, 0x7f, 0x7c, 0x15, 0x8b, 0x27, 0xcd, 0xd3, 0xe9, 0xbd, 0x26, 0xa7, 0xf8, 0x28, - 0xf3, 0x6c, 0xde, 0xf0, 0x95, 0xc5, 0x53, 0x2f, 0xe2, 0xed, 0xfc, 0x25, 0x11, 0xcd, 0xa5, 0xaf, - 0xc1, 0x67, 0x1c, 0x75, 0x5e, 0x5d, 0xf6, 0x8d, 0x9d, 0xf0, 0x8d, 0x2c, 0xb9, 0x7b, 0xa7, 0xb5, - 0xf0, 0x45, 0xa6, 0x5d, 0x9e, 0xf8, 0x2b, 0x9f, 0xfd, 0xe9, 0x8d, 0xaf, 0x6d, 0xf7, 0xc2, 0x77, - 0xdd, 0xf5, 0xf7, 0x79, 0xf3, 0x89, 0x84, 0xe9, 0x25, 0xda, 0xaf, 0x85, 0x29, 0x5f, 0x5a, 0xe9, - 0xb6, 0xb7, 0xfb, 0xe0, 0xaa, 0xb4, 0x92, 0x76, 0x92, 0x4b, 0x3e, 0x25, 0xdf, 0x05, 0x44, 0x78, - 0xa7, 0xc4, 0xb9, 0x69, 0x61, 0xa4, 0x4c, 0x77, 0xc2, 0x06, 0xa4, 0xf7, 0xc2, 0xbe, 0xfe, 0x6d, - 0x55, 0x7c, 0x4c, 0xcd, 0xbd, 0xa6, 0x95, 0x7c, 0x28, 0x26, 0xad, 0x51, 0x62, 0xea, 0xd3, 0x4d, - 0x5a, 0xb4, 0xcf, 0x84, 0x2d, 0x6d, 0x3d, 0x76, 0xed, 0xf8, 0x2b, 0x31, 0x91, 0xa4, 0xce, 0x68, - 0x33, 0xad, 0x18, 0x4b, 0xbd, 0x28, 0xe0, 0x73, 0x3b, 0xe1, 0x42, 0x9d, 0xf4, 0x54, 0xe9, 0x66, - 0x93, 0x7c, 0x1b, 0x45, 0x4b, 0x9d, 0x3e, 0x0b, 0x36, 0xe9, 0x21, 0xb7, 0x64, 0x87, 0x91, 0x96, - 0x3e, 0x08, 0x8c, 0xf9, 0xa5, 0x97, 0xc5, 0x6d, 0xd5, 0x12, 0xfe, 0xed, 0xd2, 0xf8, 0x2c, 0x2d, - 0x92, 0xe6, 0xd6, 0xf7, 0x62, 0x7b, 0xfc, 0x16, 0x47, 0x39, 0xc4, 0x79, 0x33, 0x97, 0xb5, 0xbf, - 0xc6, 0x1a, 0xe8, 0x9a, 0xb3, 0xbc, 0x23, 0x67, 0x0a, 0xb2, 0x45, 0x5e, 0xd6, 0x6d, 0x99, 0xe3, - 0x0a, 0x68, 0x73, 0xd6, 0xc1, 0xc6, 0x9c, 0x4c, 0x41, 0x4c, 0xaf, 0x2b, 0x4c, 0xb4, 0x8a, 0x8b, - 0xbf, 0xf1, 0xf2, 0x91, 0x34, 0xb7, 0x23, 0x79, 0x72, 0xf7, 0xf2, 0x58, 0xde, 0x45, 0x1e, 0x14, - 0x2a, 0x1b, 0xf3, 0x37, 0x64, 0xd2, 0xc8, 0xd3, 0x6c, 0xc5, 0x97, 0xc5, 0x52, 0xa7, 0xb4, 0x97, - 0xc2, 0x36, 0x3d, 0xed, 0x32, 0x59, 0xd9, 0x4e, 0x8f, 0xcb, 0x49, 0x23, 0xb1, 0xf8, 0x2a, 0xb9, - 0xd9, 0x8f, 0xdc, 0xd2, 0x8c, 0xbd, 0x13, 0xb6, 0x3a, 0xa6, 0xbe, 0x32, 0x97, 0x6e, 0x86, 0xc6, - 0xc4, 0x9e, 0xc3, 0xa4, 0x30, 0x6d, 0x3e, 0xcb, 0x91, 0x41, 0xf8, 0xc8, 0xdd, 0xd7, 0x3e, 0x38, - 0xa6, 0x83, 0x71, 0xb4, 0x7f, 0x6e, 0xb6, 0x46, 0x8b, 0x7f, 0x85, 0x25, 0xfd, 0xf3, 0x62, 0x1a, - 0x61, 0x1b, 0x78, 0xad, 0x37, 0x46, 0xcc, 0x52, 0xab, 0x97, 0xc2, 0x1c, 0x8f, 0x4e, 0xb8, 0xf5, - 0x19, 0xa8, 0x3b, 0x34, 0x43, 0x9e, 0x0a, 0xb1, 0x0b, 0x09, 0xc1, 0xb1, 0x9f, 0x4a, 0xd7, 0xb6, - 0x76, 0x99, 0x9a, 0x3e, 0xf8, 0x53, 0x5a, 0xdb, 0xa5, 0xb4, 0xd5, 0x0c, 0xb6, 0xa6, 0xd3, 0xa7, - 0xc7, 0x52, 0xb6, 0xc6, 0x56, 0xab, 0x77, 0xed, 0xaf, 0x05, 0x76, 0xed, 0xcf, 0xe7, 0x6f, 0x77, - 0x3a, 0x44, 0xf5, 0x4f, 0x37, 0x26, 0xb2, 0xe3, 0xc4, 0xfc, 0x55, 0xa6, 0xbd, 0x57, 0xcd, 0x5d, - 0xcd, 0x13, 0xf9, 0x84, 0x3d, 0xfe, 0x52, 0x3b, 0xbc, 0x4c, 0x44, 0x55, 0xc4, 0x3e, 0x3e, 0x84, - 0xd7, 0x5e, 0x21, 0x5c, 0xf9, 0x77, 0xb8, 0x33, 0xef, 0x7b, 0xac, 0x47, 0xc2, 0x35, 0xbe, 0xf7, - 0x7b, 0xc1, 0x17, 0x17, 0xaa, 0xe4, 0xf5, 0x06, 0xdc, 0x12, 0xc9, 0x9d, 0x57, 0x94, 0x4f, 0x20, - 0xbb, 0xa7, 0x15, 0xd8, 0x85, 0x5c, 0x11, 0x72, 0x5f, 0x4c, 0x7f, 0x04, 0x3d, 0x36, 0x8a, 0x90, - 0x4f, 0xc8, 0x72, 0x67, 0x37, 0x5a, 0x8a, 0xe1, 0x33, 0x3b, 0xef, 0x78, 0x04, 0x8e, 0x00, 0x00, - 0x00, 0x01, 0x41, 0x9a, 0x31, 0x18, 0xb0, 0x22, 0xbc, 0x58, 0x8d, 0x25, 0xdd, 0x3f, 0x0a, 0x95, - 0x32, 0xef, 0x43, 0x23, 0x48, 0xcb, 0xd7, 0x28, 0xaa, 0x0e, 0xf0, 0x83, 0xaa, 0x0e, 0x48, 0xcb, - 0x0f, 0x04, 0x64, 0xcc, 0xc7, 0x0f, 0x8b, 0x12, 0x56, 0x0e, 0xc7, 0xb2, 0x5f, 0x04, 0x66, 0xaa, - 0xdf, 0xe1, 0xdb, 0x68, 0x30, 0x87, 0x6f, 0xe6, 0x62, 0xac, 0x1d, 0xfe, 0x09, 0xbb, 0x91, 0xad, - 0x38, 0x42, 0x1a, 0x7f, 0x88, 0x16, 0xed, 0x47, 0xeb, 0xb2, 0x73, 0xff, 0x08, 0x6d, 0x52, 0x63, - 0x3b, 0x0c, 0x6e, 0x6a, 0x49, 0xdb, 0xf8, 0x54, 0x52, 0x6d, 0x5a, 0x33, 0xa7, 0x4d, 0x53, 0x4c, - 0xdb, 0xff, 0x85, 0x25, 0x66, 0x3c, 0xef, 0x66, 0x83, 0xb2, 0xc5, 0xa5, 0x77, 0x95, 0x45, 0x3b, - 0xe0, 0x52, 0x0b, 0x7c, 0x3d, 0x56, 0x52, 0xaa, 0x94, 0xf8, 0x6d, 0xdd, 0x35, 0xf5, 0x55, 0x5f, - 0x18, 0x76, 0xd9, 0x5c, 0xf9, 0xa9, 0xd2, 0x5d, 0x2a, 0x27, 0x43, 0xf0, 0x40, 0x46, 0xcf, 0xe2, - 0x5e, 0x89, 0x13, 0x71, 0xcb, 0x9d, 0x75, 0xa6, 0x6f, 0xff, 0xa3, 0x99, 0x1d, 0x78, 0x78, 0xd6, - 0xcf, 0x38, 0x90, 0xd9, 0xa7, 0x9e, 0x0f, 0x4b, 0x0f, 0x8a, 0xe4, 0xe9, 0xf8, 0x30, 0x96, 0xad, - 0x88, 0xce, 0xfc, 0x98, 0xc6, 0xff, 0x3d, 0x79, 0x5f, 0x0a, 0x11, 0xd3, 0x4d, 0xa6, 0x44, 0x91, - 0x9f, 0x46, 0xc7, 0xaa, 0x51, 0xc4, 0xd7, 0xbd, 0xaf, 0x9c, 0x32, 0x8e, 0xfd, 0xb6, 0xdb, 0x6f, - 0xd0, 0x83, 0x27, 0xd6, 0xc7, 0xd0, 0x97, 0xae, 0x16, 0x93, 0xff, 0x36, 0x3b, 0xf7, 0x77, 0xf4, - 0x4c, 0xdf, 0x04, 0x95, 0x5f, 0x90, 0xfb, 0x29, 0xbb, 0xf9, 0xbb, 0xff, 0xa2, 0x15, 0x4f, 0xa3, - 0x3f, 0xc1, 0x0d, 0xf3, 0x73, 0xac, 0xf8, 0x74, 0x67, 0x16, 0xed, 0xb4, 0xc3, 0x69, 0xa6, 0xae, - 0x0d, 0x18, 0x4c, 0x8b, 0x2f, 0xf0, 0xec, 0x91, 0xa1, 0xd1, 0xcd, 0x1e, 0x86, 0xcb, 0x1f, 0x8c, - 0xeb, 0x48, 0xb1, 0xac, 0x95, 0xd5, 0xfc, 0x17, 0xec, 0x65, 0xdc, 0x88, 0x07, 0x4e, 0x0c, 0x33, - 0x46, 0xb5, 0xb3, 0x16, 0xd3, 0xcd, 0x5c, 0x5d, 0xbf, 0x0f, 0x64, 0xd6, 0xf8, 0x91, 0x36, 0x89, - 0x65, 0x89, 0xe8, 0xc5, 0xac, 0x65, 0x97, 0xf8, 0xd2, 0xb6, 0x63, 0x96, 0x55, 0xee, 0x4f, 0x37, - 0x63, 0x66, 0x6c, 0x69, 0xb5, 0x97, 0x57, 0x8b, 0x76, 0xfc, 0x3d, 0x43, 0x33, 0x08, 0x6f, 0x7b, - 0x23, 0x5e, 0x8c, 0xcc, 0xc2, 0x18, 0x65, 0xe1, 0x6a, 0xa5, 0x65, 0x02, 0x05, 0x15, 0x66, 0xfe, - 0x08, 0x08, 0x9b, 0x4c, 0x1d, 0x8d, 0x38, 0xe5, 0x84, 0xdb, 0x89, 0x38, 0x67, 0x61, 0xb6, 0x3f, - 0xff, 0xf0, 0x84, 0xec, 0x7b, 0x36, 0x33, 0x6b, 0xdd, 0x3c, 0xe5, 0x21, 0xf1, 0xb6, 0x9c, 0xd9, - 0x06, 0x1b, 0xfb, 0xfc, 0x25, 0xaa, 0xe9, 0x34, 0xaa, 0x68, 0xa8, 0xca, 0xcf, 0xfe, 0x0a, 0x04, - 0xee, 0xd5, 0x21, 0xff, 0x72, 0xf8, 0xd3, 0x17, 0x61, 0x75, 0x45, 0xe7, 0x9a, 0x6d, 0xf8, 0xbe, - 0x9b, 0x6d, 0xa7, 0xe1, 0x72, 0xa2, 0x3c, 0xbd, 0xcf, 0x8a, 0x69, 0x3a, 0x43, 0xb9, 0x52, 0xff, - 0x06, 0x1e, 0x4a, 0x65, 0xa4, 0xb2, 0x5a, 0x8d, 0x85, 0xb7, 0x6f, 0xf8, 0xd9, 0xe9, 0x0e, 0xce, - 0x8d, 0xb3, 0xc2, 0xda, 0x7d, 0x5b, 0x5a, 0x8c, 0x95, 0x41, 0xee, 0xaf, 0xf0, 0x53, 0x39, 0x3f, - 0x09, 0x5b, 0x3c, 0xf1, 0xf8, 0x91, 0x76, 0xcc, 0xd7, 0x7c, 0x79, 0x63, 0x7b, 0x47, 0x0f, 0xb6, - 0xd2, 0xda, 0xf8, 0x74, 0x53, 0x6c, 0x1b, 0x68, 0x65, 0x31, 0xcd, 0x9f, 0x1d, 0x8c, 0x5c, 0x77, - 0xc6, 0xa2, 0x94, 0x3d, 0x31, 0xa3, 0xef, 0xfc, 0x2d, 0xcc, 0xbb, 0x09, 0x83, 0x29, 0xd6, 0x14, - 0xa9, 0x2b, 0x9e, 0xfe, 0xa0, 0x86, 0x82, 0x75, 0xc1, 0x44, 0x17, 0x5d, 0xf6, 0xae, 0xd9, 0x51, - 0x7e, 0xb1, 0x7d, 0x16, 0xff, 0x0e, 0x07, 0x37, 0x49, 0x89, 0xbb, 0x7c, 0xbd, 0x3f, 0xe1, 0x02, - 0xee, 0x9d, 0xde, 0xc3, 0x0e, 0x94, 0x83, 0x3d, 0x69, 0x9f, 0x87, 0x6c, 0x6a, 0x26, 0xc2, 0x85, - 0x52, 0xb3, 0x2a, 0x2e, 0x51, 0xee, 0x6a, 0x4b, 0xe2, 0xff, 0xc2, 0x34, 0xf5, 0x0c, 0xd6, 0xeb, - 0x89, 0x21, 0x7b, 0x7f, 0x1c, 0x54, 0xb6, 0xa6, 0x8a, 0xd2, 0x6d, 0xba, 0x7e, 0x0b, 0xcd, 0x4c, - 0x99, 0xd3, 0xa4, 0xa6, 0xf5, 0xe7, 0xe9, 0xfe, 0x24, 0xf6, 0xdb, 0xc9, 0x89, 0xdf, 0x87, 0xc4, - 0x37, 0xb4, 0xd1, 0xfd, 0x6d, 0x5b, 0x9d, 0x92, 0x30, 0xbf, 0x6d, 0xdb, 0xf0, 0xd6, 0xac, 0x78, - 0x22, 0x3e, 0xb6, 0x65, 0x84, 0xf5, 0xf0, 0x84, 0x8c, 0xd2, 0xd2, 0x2b, 0x98, 0xfb, 0xb7, 0xf0, - 0x50, 0x27, 0x2f, 0x4e, 0xf3, 0x7e, 0xf8, 0xad, 0x24, 0xb2, 0xf6, 0xff, 0x05, 0xa4, 0x43, 0xa4, - 0x49, 0xd3, 0x93, 0xc5, 0xf1, 0xd7, 0xc3, 0x46, 0x66, 0x50, 0xeb, 0x8f, 0xd5, 0x5b, 0xd2, 0x7e, - 0x0a, 0x0a, 0xa6, 0x66, 0xd2, 0x1a, 0x19, 0x59, 0x6e, 0xb9, 0xf0, 0x9d, 0x21, 0xec, 0x99, 0x63, - 0xa7, 0x51, 0xd0, 0xdb, 0xf0, 0xa1, 0x10, 0xf7, 0xb9, 0x61, 0xc7, 0x0d, 0x95, 0x36, 0x8e, 0x6b, - 0x19, 0xa2, 0xc3, 0xf9, 0x41, 0xf5, 0xae, 0x11, 0x08, 0xd8, 0xb2, 0x04, 0x46, 0x32, 0x05, 0xb1, - 0xf7, 0xc2, 0x64, 0x4a, 0x5e, 0xef, 0xbe, 0xad, 0xf0, 0x48, 0x4b, 0x75, 0xc6, 0x57, 0x0c, 0x99, - 0xef, 0x4c, 0x3f, 0xc2, 0xde, 0xf0, 0x58, 0x44, 0xf6, 0xf6, 0x32, 0xb2, 0x9a, 0x4d, 0x96, 0xe7, - 0xc3, 0xc5, 0x45, 0x02, 0x7d, 0xba, 0x5b, 0x6a, 0x50, 0x43, 0x29, 0x9f, 0xf4, 0x0b, 0xfd, 0x91, - 0x1b, 0x2b, 0x4f, 0xc2, 0x57, 0xd1, 0x22, 0xdb, 0x6b, 0xc1, 0x1f, 0x44, 0xec, 0x93, 0x87, 0x4a, - 0xed, 0x6e, 0xf4, 0xd9, 0xb3, 0x46, 0x6c, 0x5a, 0xa4, 0xbf, 0xe1, 0xb2, 0x4c, 0xdd, 0x31, 0x3c, - 0xb5, 0x33, 0xff, 0x1a, 0x25, 0x38, 0xd9, 0xef, 0x76, 0xf4, 0x89, 0xe3, 0xa9, 0xac, 0x29, 0xab, - 0x31, 0xec, 0xbf, 0xc1, 0x79, 0x8f, 0xb0, 0xd9, 0xf3, 0x35, 0x0d, 0x68, 0x66, 0xba, 0x1d, 0x7f, - 0xe0, 0x83, 0x3f, 0x5a, 0xc9, 0x97, 0x6a, 0x93, 0x56, 0x61, 0xbb, 0xff, 0xe1, 0x8f, 0x2f, 0x64, - 0x8b, 0x4d, 0xcc, 0xa2, 0x76, 0x7f, 0xe1, 0xe2, 0xd1, 0xd5, 0x9b, 0xbe, 0xd5, 0x54, 0xf6, 0x2a, - 0xf4, 0xe2, 0xdf, 0xe7, 0xab, 0xbb, 0x7f, 0xf0, 0xe1, 0x25, 0xdf, 0x45, 0xc5, 0x9f, 0xff, 0xe1, - 0xd2, 0x36, 0xbe, 0xab, 0x2c, 0x1b, 0xf5, 0xe0, 0xff, 0xff, 0xc1, 0x40, 0x5e, 0xf7, 0xbd, 0xf4, - 0x9c, 0x20, 0x11, 0x5e, 0xf8, 0x24, 0xea, 0xa8, 0xfa, 0xea, 0xe7, 0xc1, 0x58, 0x68, 0xac, 0x60, - 0xea, 0xe6, 0xde, 0xd3, 0x5d, 0x95, 0xdd, 0x3a, 0xb7, 0xef, 0xb4, 0xd7, 0x8b, 0x13, 0x2c, 0x9a, - 0xa4, 0x6d, 0x6b, 0x6f, 0xc6, 0x5d, 0xb3, 0xfa, 0xae, 0xda, 0x7d, 0xb3, 0xe2, 0xe5, 0x3f, 0x05, - 0x7c, 0xb9, 0xcb, 0xdd, 0x27, 0x3e, 0xfd, 0xf0, 0x44, 0x2a, 0xd1, 0x61, 0xb3, 0xe1, 0xfe, 0x48, - 0xb2, 0x44, 0x7a, 0x51, 0x52, 0xb9, 0x01, 0xc6, 0xbb, 0xff, 0x19, 0xb4, 0x82, 0x3c, 0xe9, 0xa4, - 0xe7, 0x63, 0x7f, 0xb6, 0xdf, 0xe0, 0x88, 0x4d, 0x2b, 0x8b, 0x2f, 0x82, 0x73, 0x39, 0xf1, 0xf7, - 0x69, 0xcf, 0x98, 0x87, 0x85, 0x28, 0xae, 0xee, 0x79, 0x3b, 0xe0, 0x7c, 0xde, 0xc9, 0x33, 0x54, - 0xe0, 0x70, 0xf1, 0xdd, 0x8d, 0xf5, 0xa6, 0x96, 0x97, 0xba, 0x69, 0x15, 0x14, 0x7e, 0x23, 0xcb, - 0x89, 0x74, 0xbc, 0x55, 0x37, 0xa2, 0x2e, 0xc5, 0xf8, 0x52, 0x57, 0xb5, 0x4b, 0xb4, 0x6c, 0x93, - 0x39, 0xa9, 0x79, 0x9f, 0x04, 0x62, 0x65, 0xb3, 0x63, 0xb1, 0xd8, 0xb6, 0x2c, 0x77, 0x1d, 0x7c, - 0x10, 0x91, 0x57, 0xab, 0xe8, 0xac, 0x63, 0xf2, 0x71, 0x8a, 0x07, 0x77, 0xfb, 0x77, 0xc1, 0x15, - 0x57, 0x77, 0xc8, 0x18, 0x57, 0xb5, 0xe0, 0xa8, 0x5d, 0xa2, 0x78, 0xf6, 0xaa, 0x8a, 0x92, 0x45, - 0x6f, 0x82, 0xad, 0x91, 0xe3, 0x67, 0x8c, 0x27, 0xe5, 0xa5, 0xb9, 0x53, 0xea, 0xe3, 0xc2, 0x93, - 0x3e, 0x0d, 0x73, 0xe3, 0x5a, 0x53, 0xc1, 0x26, 0x3b, 0x37, 0xb9, 0xf0, 0x54, 0x6d, 0xa2, 0xb3, - 0x56, 0xac, 0xc7, 0x74, 0xea, 0xee, 0xf8, 0x29, 0x3d, 0x4b, 0x06, 0x4d, 0x12, 0xd4, 0x6f, 0x74, - 0x6c, 0xb3, 0x2b, 0x85, 0x2b, 0x45, 0x26, 0x7e, 0x6e, 0xd3, 0x71, 0x3c, 0x1f, 0x5d, 0x7c, 0x33, - 0x46, 0x4b, 0xa6, 0xad, 0x1b, 0x7f, 0xf0, 0x49, 0xb6, 0xb7, 0x1e, 0x08, 0xba, 0xa5, 0xdf, 0x05, - 0x45, 0x7b, 0xee, 0xd6, 0x78, 0xa7, 0x98, 0xaf, 0x88, 0xd6, 0xb6, 0xd3, 0xae, 0x51, 0x93, 0x36, - 0xaa, 0x11, 0xf8, 0x9a, 0x39, 0x3f, 0x31, 0xb5, 0x51, 0x1d, 0x8d, 0x77, 0xdf, 0x09, 0x0a, 0x7b, - 0x7b, 0xee, 0x7e, 0x2a, 0xd3, 0x5e, 0x7a, 0xc3, 0x3d, 0x1e, 0x17, 0xcd, 0x45, 0x63, 0x23, 0x21, - 0x8e, 0x61, 0x17, 0xb8, 0x8e, 0xef, 0x78, 0x2f, 0xc4, 0x92, 0xa6, 0xa5, 0x4d, 0xc9, 0x77, 0xc1, - 0x6f, 0x37, 0x64, 0xaf, 0x9b, 0x55, 0x9f, 0x12, 0x86, 0xf7, 0x89, 0x28, 0xcd, 0xa3, 0x53, 0x89, - 0xbc, 0x49, 0x37, 0xbf, 0x13, 0x04, 0x1d, 0x7a, 0x11, 0xff, 0x26, 0xb5, 0xc4, 0x7e, 0x09, 0x32, - 0x41, 0x77, 0xf9, 0xae, 0x7c, 0x0a, 0x96, 0x41, 0xd6, 0x5e, 0xe2, 0x06, 0x75, 0x17, 0x55, 0x27, - 0x98, 0x92, 0x6e, 0x37, 0x2d, 0xed, 0xfc, 0x5d, 0xee, 0xef, 0x76, 0xc1, 0x74, 0x47, 0x88, 0x12, - 0x4a, 0xb5, 0x5e, 0x22, 0xa2, 0x21, 0x38, 0x85, 0x88, 0x85, 0x87, 0xcb, 0x4f, 0x93, 0x53, 0x66, - 0xb8, 0x8b, 0x4f, 0xcc, 0xb6, 0xee, 0xfe, 0x0a, 0x6e, 0x28, 0xc5, 0x62, 0x41, 0xe3, 0xeb, 0xdc, - 0x48, 0xe3, 0xfe, 0xe1, 0x71, 0xf7, 0x10, 0xe6, 0x5d, 0xa4, 0xb3, 0x7c, 0x39, 0xc9, 0x55, 0xc9, - 0xc9, 0xbb, 0xcb, 0xcb, 0x2b, 0x12, 0xb1, 0x11, 0x11, 0x04, 0xfc, 0xfe, 0xf3, 0xe0, 0x51, 0x94, - 0xfe, 0x24, 0x5f, 0xcb, 0xb9, 0x30, 0x99, 0xe5, 0x83, 0xde, 0x05, 0x1d, 0x1f, 0x4c, 0xbc, 0xb7, - 0x7f, 0xc6, 0x6a, 0xd2, 0x35, 0x34, 0x52, 0x8a, 0x93, 0xb9, 0x64, 0x54, 0x69, 0x5d, 0xf8, 0xaa, - 0x57, 0xcf, 0xe2, 0x58, 0x78, 0x9d, 0xe2, 0xbb, 0x93, 0xd8, 0x20, 0xe5, 0x2e, 0x92, 0xae, 0xc9, - 0x7b, 0xf9, 0x7a, 0xb6, 0xe2, 0x72, 0x72, 0x6d, 0xdf, 0xcb, 0xab, 0xfc, 0x82, 0x6a, 0xb3, 0xf8, - 0x88, 0x4c, 0x97, 0x14, 0xf8, 0x98, 0xaf, 0xf4, 0x54, 0x57, 0x7c, 0xc6, 0xad, 0x7c, 0x4e, 0xab, - 0xa5, 0x7f, 0x30, 0x95, 0xb3, 0x35, 0xf8, 0xa3, 0x5e, 0xec, 0xa9, 0x33, 0xf1, 0x58, 0x59, 0xa3, - 0xf7, 0xbf, 0x82, 0x6b, 0xfd, 0x89, 0x7a, 0x15, 0x61, 0xec, 0x0b, 0x59, 0xcc, 0x37, 0x01, 0x9e, - 0x62, 0x2d, 0x62, 0x78, 0x8e, 0xab, 0x8a, 0xd4, 0x5f, 0x21, 0xe5, 0x97, 0x88, 0x84, 0x3a, 0x9e, - 0x12, 0x43, 0xcc, 0xf3, 0xff, 0x3d, 0x87, 0xe3, 0xe8, 0x9a, 0xe2, 0x8d, 0x0f, 0x53, 0x36, 0x5f, - 0x59, 0x22, 0x2c, 0xbc, 0x3c, 0x85, 0x7b, 0xbf, 0x8b, 0x20, 0x97, 0x1a, 0xda, 0x69, 0x45, 0xf8, - 0x80, 0x51, 0xcb, 0x6d, 0x56, 0x9f, 0x57, 0x67, 0x3f, 0xe1, 0xfe, 0xf2, 0xcb, 0x5c, 0x92, 0xe5, - 0xdd, 0x62, 0x49, 0x9b, 0x5e, 0x5c, 0x4c, 0xbc, 0x3c, 0x3b, 0xcb, 0x83, 0x2a, 0x27, 0x51, 0x35, - 0x7f, 0x84, 0x88, 0xb5, 0xe5, 0x6c, 0x9d, 0xd6, 0x95, 0x62, 0x47, 0xd3, 0x51, 0x74, 0x38, 0xcb, - 0x6b, 0x1a, 0x5f, 0x0b, 0x95, 0xe2, 0x41, 0x1f, 0x27, 0x0f, 0x8f, 0xe4, 0x5f, 0x08, 0x4b, 0xe0, - 0xcb, 0xca, 0xde, 0xed, 0x8c, 0x34, 0x0d, 0x48, 0xd9, 0x44, 0xff, 0xfb, 0xaa, 0xe1, 0xbe, 0xad, - 0x5c, 0xb5, 0xaf, 0x13, 0x2d, 0x57, 0x5c, 0x41, 0x56, 0xd6, 0xb5, 0x7c, 0x51, 0x63, 0xb4, 0xad, - 0xa5, 0xbe, 0x21, 0xeb, 0x8a, 0x83, 0xb7, 0x9b, 0xd5, 0x8f, 0xf6, 0x66, 0xca, 0xc4, 0x72, 0x9e, - 0x62, 0x2a, 0xfe, 0x5a, 0xaf, 0xe6, 0x29, 0xf3, 0xae, 0x08, 0xb9, 0x69, 0x3a, 0x7c, 0x21, 0x4d, - 0x34, 0x9f, 0x92, 0xec, 0xaf, 0xe0, 0x9a, 0x38, 0x71, 0xc6, 0x99, 0x69, 0xb9, 0x82, 0x03, 0xbf, - 0x9c, 0xf8, 0xe5, 0x26, 0x49, 0xc9, 0xc5, 0x7f, 0x74, 0x9a, 0xd7, 0x04, 0x54, 0x47, 0xce, 0x2f, - 0x88, 0xdd, 0xe3, 0xa7, 0x87, 0xf8, 0x6f, 0x90, 0xb5, 0x49, 0x5f, 0x47, 0xe9, 0x3a, 0x14, 0xd5, - 0xc8, 0x26, 0x5f, 0x4f, 0xd9, 0xb1, 0x5d, 0xc4, 0xc4, 0x77, 0x7d, 0xdf, 0x13, 0xae, 0x2b, 0x72, - 0xfa, 0xc6, 0xe8, 0xcf, 0xa7, 0xe5, 0xdd, 0xeb, 0xbd, 0x92, 0x6d, 0xfc, 0x16, 0x62, 0x2b, 0x9a, - 0xab, 0xf8, 0x4b, 0x7b, 0xf3, 0x62, 0xe2, 0xfb, 0x64, 0x4b, 0x97, 0x53, 0xf2, 0x5b, 0x7a, 0x03, - 0xf0, 0x94, 0x89, 0x34, 0xf5, 0x7b, 0xea, 0xc0, 0x6f, 0x36, 0x5a, 0x5c, 0x2b, 0xc1, 0x51, 0x49, - 0x0e, 0xdb, 0x26, 0xb5, 0xa4, 0xeb, 0xe0, 0x8a, 0x94, 0x56, 0xdb, 0xdf, 0x04, 0xc2, 0x56, 0x5d, - 0xd6, 0x6f, 0x5f, 0x63, 0x1f, 0x7f, 0x1d, 0xbd, 0xa6, 0x9e, 0xda, 0xa7, 0xae, 0x09, 0x06, 0xea, - 0xa9, 0x93, 0xec, 0x55, 0xa5, 0xbe, 0x33, 0xb0, 0x83, 0x0d, 0x70, 0x63, 0x59, 0x2e, 0x95, 0x8a, - 0x79, 0xd8, 0xba, 0x1f, 0x8f, 0x21, 0xd5, 0x0c, 0x0c, 0x1f, 0xcc, 0x18, 0x31, 0x2a, 0x43, 0xe4, - 0x29, 0x3f, 0x89, 0x29, 0x58, 0x32, 0x46, 0xa5, 0xc9, 0xa6, 0x5f, 0xf6, 0x76, 0xf6, 0xc4, 0x70, - 0x4a, 0x22, 0xa5, 0xdd, 0x86, 0x99, 0x12, 0xd6, 0xe3, 0xcd, 0x07, 0xba, 0x04, 0x0b, 0x4e, 0x09, - 0x5a, 0x96, 0xf9, 0xe1, 0x8a, 0xff, 0x57, 0x62, 0x1a, 0x62, 0xb1, 0x9c, 0x9b, 0xed, 0xc9, 0xa4, - 0x50, 0x4e, 0x08, 0xb3, 0xb1, 0x65, 0x94, 0xfc, 0x48, 0x92, 0xb3, 0x43, 0xd6, 0xfe, 0x6a, 0x1a, - 0xa1, 0xd7, 0x27, 0x54, 0x3f, 0x7b, 0x1a, 0x1b, 0x7e, 0x4d, 0x2a, 0x42, 0x78, 0x2d, 0xea, 0x95, - 0x8d, 0x91, 0x21, 0x0a, 0xbb, 0x35, 0xd7, 0xe4, 0xde, 0xfe, 0x52, 0xb7, 0x6f, 0xe4, 0xea, 0xd7, - 0x94, 0xd5, 0xa5, 0xeb, 0xa9, 0xf8, 0x44, 0x5b, 0x4d, 0x36, 0x9e, 0x7c, 0xda, 0xb5, 0xe4, 0xf3, - 0x62, 0xe2, 0x35, 0x59, 0x92, 0xde, 0xf8, 0x2a, 0xb7, 0x3e, 0xd2, 0x8d, 0xad, 0x6e, 0xca, 0x57, - 0x69, 0xb8, 0x29, 0x11, 0x2e, 0x35, 0xde, 0x9a, 0x6f, 0x44, 0xdf, 0x15, 0x63, 0x54, 0x95, 0x93, - 0x1b, 0x4c, 0xbc, 0x7c, 0x86, 0x5b, 0xfa, 0x70, 0xf7, 0x95, 0x65, 0xcf, 0xc4, 0x02, 0xb9, 0x58, - 0x81, 0x5d, 0xac, 0x26, 0x07, 0xee, 0xac, 0xf8, 0xfb, 0x7c, 0x11, 0xcb, 0xd0, 0xda, 0xb2, 0xb8, - 0x27, 0xb2, 0x23, 0x39, 0x90, 0x6d, 0xc1, 0xf1, 0x9b, 0x65, 0x63, 0x65, 0x2d, 0xb2, 0x7b, 0x43, - 0xd8, 0x4d, 0x7f, 0xbb, 0x33, 0x19, 0xa1, 0xae, 0xb9, 0x8b, 0xe1, 0x1a, 0x56, 0x37, 0x23, 0x90, - 0xd0, 0xd1, 0xb2, 0x91, 0xff, 0x09, 0x95, 0xb2, 0x6b, 0x50, 0x74, 0x34, 0x32, 0x3c, 0x4f, 0x1f, - 0xb6, 0x68, 0xe7, 0x62, 0x4d, 0x26, 0x25, 0xb4, 0xdf, 0x82, 0xac, 0xac, 0x46, 0x33, 0x3b, 0xf4, - 0x72, 0xcb, 0x43, 0x38, 0xbe, 0x11, 0xee, 0x86, 0x3b, 0x5f, 0xa1, 0xdb, 0x53, 0x41, 0x77, 0x6e, - 0xf5, 0xc9, 0x7b, 0xcb, 0xd9, 0xaa, 0xb0, 0x8f, 0x2e, 0x8d, 0xdf, 0xcd, 0xb5, 0x17, 0x19, 0xc1, - 0x45, 0xa2, 0x1a, 0x96, 0x43, 0xd9, 0xca, 0xcd, 0x19, 0x92, 0xf9, 0x75, 0x59, 0x38, 0x91, 0x2d, - 0x31, 0xb7, 0x69, 0x36, 0x36, 0x35, 0xc3, 0x94, 0xdb, 0xb3, 0x5d, 0xb1, 0x57, 0xe6, 0xe0, 0x92, - 0x9d, 0xd9, 0x4a, 0xf8, 0x4f, 0x4e, 0x93, 0x4d, 0x7e, 0x09, 0x85, 0x97, 0x83, 0xbf, 0xef, 0x7d, - 0x7c, 0x12, 0x8c, 0x7a, 0x72, 0x77, 0x63, 0x6a, 0x73, 0xe1, 0x42, 0xb1, 0xbd, 0x0d, 0xe7, 0xe4, - 0xd2, 0x6e, 0x5c, 0x73, 0xb5, 0xfd, 0x65, 0x6a, 0xf2, 0x30, 0x4f, 0x8c, 0x3a, 0xeb, 0xbd, 0x24, - 0xa2, 0x93, 0xb9, 0x37, 0xa6, 0x6d, 0xd7, 0xc1, 0x49, 0xa9, 0x5d, 0xb4, 0x8b, 0xa5, 0xb6, 0xf6, - 0xf5, 0xf0, 0xa4, 0xb2, 0xd9, 0x22, 0x9b, 0x75, 0xb6, 0xda, 0x95, 0x2e, 0x16, 0xce, 0x77, 0x2d, - 0xa5, 0x88, 0x78, 0x52, 0x95, 0xa3, 0xe1, 0xa2, 0xdb, 0xd8, 0x56, 0xba, 0x49, 0xe0, 0xe4, 0xdd, - 0x9f, 0x0a, 0x4b, 0xa4, 0xc6, 0xe5, 0x62, 0x3c, 0x9e, 0x26, 0x75, 0x2b, 0x13, 0x7d, 0x60, 0xc6, - 0x5c, 0xe7, 0x27, 0x22, 0x95, 0xe0, 0x98, 0xfb, 0xbf, 0x17, 0xce, 0x3c, 0x16, 0x67, 0xfe, 0xd3, - 0x59, 0xb0, 0x9e, 0x02, 0xd5, 0xe1, 0x43, 0x34, 0xd9, 0x71, 0xd8, 0x6d, 0x4d, 0xdb, 0x1e, 0x92, - 0x4a, 0x4f, 0x27, 0x17, 0xb2, 0x07, 0x85, 0x25, 0xde, 0xda, 0xd6, 0xed, 0xdb, 0x71, 0xd5, 0xbb, - 0x23, 0x9f, 0x0a, 0x75, 0x5b, 0x73, 0xea, 0xc5, 0xaa, 0x37, 0x1b, 0x5e, 0xc4, 0xf9, 0x84, 0xa7, - 0xc1, 0x59, 0x2a, 0xd4, 0xf8, 0x78, 0x2e, 0x5e, 0x92, 0xd2, 0xaf, 0x05, 0x42, 0xdb, 0x2e, 0xac, - 0x49, 0x27, 0x76, 0x8f, 0xb6, 0xe3, 0x9f, 0x05, 0x5b, 0x47, 0xed, 0xd6, 0x8d, 0xb9, 0x39, 0xb9, - 0xfc, 0xa5, 0xef, 0x8f, 0xa6, 0xdc, 0x6d, 0x9f, 0xec, 0xfd, 0x63, 0x9b, 0x7c, 0x29, 0x25, 0x06, - 0x3b, 0x8b, 0x46, 0xba, 0x62, 0xb6, 0xd2, 0xb5, 0x6f, 0x82, 0xdb, 0xea, 0x7e, 0x6e, 0xdb, 0xbb, - 0x7c, 0x11, 0xea, 0xbe, 0xf8, 0x52, 0xd3, 0x4d, 0x34, 0xab, 0xb8, 0x8e, 0x52, 0x4e, 0x91, 0x35, - 0xfe, 0x08, 0xe9, 0x24, 0x73, 0x91, 0x7b, 0xe0, 0xaa, 0xd1, 0xf3, 0x3e, 0x73, 0x63, 0x57, 0x6f, - 0x82, 0x98, 0xc5, 0x6d, 0xcd, 0xa7, 0xd8, 0xda, 0x1e, 0x5f, 0xc5, 0xaf, 0xc1, 0x28, 0xc7, 0x2e, - 0x3d, 0xb3, 0x6a, 0xb0, 0x7c, 0x15, 0x5d, 0xaa, 0x8b, 0x88, 0xe7, 0x1b, 0xab, 0xb1, 0xf0, 0xa1, - 0xc1, 0x7a, 0x4d, 0x6f, 0x5d, 0x92, 0x35, 0x2e, 0xb3, 0xc0, 0xb2, 0xe5, 0xdb, 0x42, 0x4e, 0xb8, - 0x90, 0xa1, 0x33, 0xd5, 0x55, 0x47, 0x15, 0x9f, 0x51, 0xf5, 0x57, 0xc7, 0x69, 0x0e, 0x53, 0x9c, - 0xf8, 0x50, 0xea, 0x7c, 0x67, 0x6e, 0x05, 0x95, 0xf3, 0x6d, 0x56, 0xe6, 0xd7, 0xed, 0xb7, 0x3e, - 0x36, 0x69, 0x1f, 0xbb, 0x69, 0x17, 0x49, 0x06, 0xec, 0x49, 0x9f, 0x11, 0x0f, 0xbe, 0x91, 0x36, - 0x21, 0x48, 0xc1, 0x8d, 0xdf, 0xfc, 0x69, 0x1a, 0x2b, 0x65, 0xd6, 0x45, 0x86, 0xe9, 0x59, 0x71, - 0xb8, 0x88, 0x7e, 0xe3, 0x71, 0xb1, 0x6f, 0xdb, 0xc4, 0x35, 0xf1, 0xa5, 0x50, 0xcd, 0x6c, 0x1d, - 0xd9, 0x1d, 0xfb, 0xda, 0x7c, 0x8e, 0xdc, 0x89, 0xcd, 0x71, 0xb3, 0x1d, 0x9d, 0x76, 0xfb, 0xb0, - 0x87, 0x83, 0x0f, 0xe0, 0xd6, 0xef, 0xc2, 0x82, 0x29, 0x9b, 0xc4, 0x46, 0xa2, 0x84, 0x77, 0xb1, - 0xbe, 0x87, 0x8c, 0x56, 0x7b, 0xf2, 0xf8, 0xc1, 0x25, 0xd6, 0xeb, 0x69, 0x45, 0xdb, 0x27, 0x3f, - 0xbc, 0x5c, 0x9d, 0xbe, 0xff, 0x0a, 0x42, 0x85, 0x5d, 0xaa, 0x95, 0xdd, 0xcf, 0xfe, 0xdd, 0xb3, - 0x48, 0x19, 0xf3, 0x89, 0x55, 0x4c, 0x7c, 0x16, 0x08, 0x93, 0x77, 0x43, 0x66, 0x7a, 0xb5, 0x22, - 0x64, 0x1e, 0xf8, 0x28, 0xa3, 0x25, 0x35, 0xb4, 0xa9, 0x77, 0xc2, 0x96, 0x99, 0xc6, 0xad, 0xa3, - 0xa9, 0x67, 0xf1, 0xb5, 0x89, 0xb3, 0x51, 0x53, 0x75, 0x1d, 0x4f, 0x3e, 0x14, 0xa2, 0x32, 0xce, - 0x34, 0x3f, 0xce, 0xee, 0x99, 0x6d, 0x25, 0x38, 0xa8, 0xfe, 0x3f, 0x5f, 0x09, 0x14, 0xb1, 0x6d, - 0xa8, 0x9e, 0x7f, 0x0a, 0x72, 0x56, 0x3d, 0xb7, 0x41, 0xed, 0x66, 0x9e, 0xa3, 0xfa, 0xf6, 0x46, - 0x38, 0x97, 0x0e, 0x07, 0x7e, 0x1e, 0x8d, 0x9c, 0x5a, 0xca, 0xb5, 0x6b, 0x31, 0xca, 0xd3, 0x8b, - 0x77, 0x14, 0xf8, 0x4c, 0xc5, 0x91, 0x5b, 0x5f, 0x3f, 0xe1, 0x43, 0xb9, 0xef, 0x48, 0xb6, 0xba, - 0x43, 0xe7, 0x6a, 0xae, 0x28, 0x3b, 0x84, 0xe9, 0x3f, 0x4d, 0x1f, 0xd3, 0x15, 0xc4, 0xea, 0xd8, - 0xee, 0xde, 0x3c, 0xc1, 0xfc, 0x69, 0x1f, 0xd0, 0x97, 0x5e, 0x40, 0xad, 0x86, 0xfc, 0xdf, 0x89, - 0x35, 0x65, 0x70, 0x36, 0xbc, 0x3f, 0x51, 0x41, 0xdc, 0x16, 0xa9, 0x36, 0xa4, 0xe9, 0xb7, 0x4d, - 0xff, 0xc2, 0x92, 0xe0, 0xcd, 0x76, 0xef, 0x26, 0x94, 0x52, 0xee, 0x89, 0x32, 0x37, 0x3e, 0xb7, - 0xf8, 0x39, 0x7c, 0x29, 0x48, 0xef, 0x4e, 0x8d, 0xb6, 0x86, 0x6e, 0xaf, 0x4a, 0xa1, 0x0c, 0x56, - 0xfe, 0xf5, 0x2c, 0x61, 0xca, 0x2d, 0xbe, 0x14, 0xd6, 0xba, 0x0e, 0xd1, 0x19, 0x63, 0x35, 0xb5, - 0x12, 0x2a, 0x9d, 0xc6, 0x99, 0x54, 0x7c, 0x29, 0x69, 0x23, 0x9c, 0xd2, 0x3a, 0xc1, 0x2f, 0x4a, - 0xfd, 0x36, 0xdc, 0x49, 0x25, 0x45, 0x6a, 0xc6, 0x1c, 0xc9, 0xce, 0xb9, 0xa5, 0x4f, 0x85, 0x28, - 0x3b, 0xd8, 0x0f, 0xd6, 0xd3, 0xd9, 0x5b, 0x04, 0xc8, 0xd1, 0xa9, 0x49, 0x63, 0x54, 0xaa, 0xab, - 0xd1, 0x6b, 0xe3, 0xe3, 0xb4, 0xdc, 0xf6, 0x39, 0xe5, 0x4d, 0x64, 0x69, 0x73, 0xc2, 0x93, 0x73, - 0xb7, 0x1d, 0x57, 0x30, 0xec, 0x72, 0x85, 0xca, 0x33, 0x5a, 0x5a, 0xc7, 0x35, 0xb1, 0x5a, 0x71, - 0x74, 0xa0, 0xe2, 0x32, 0x2a, 0xf0, 0xa6, 0x7d, 0x51, 0x72, 0x8c, 0x71, 0x5f, 0x91, 0x6a, 0x4d, - 0xb2, 0xba, 0x8d, 0x81, 0x9a, 0xdc, 0x4c, 0x8c, 0xbf, 0x8c, 0xe3, 0x34, 0xae, 0x46, 0x11, 0x57, - 0x91, 0xa4, 0x45, 0x07, 0x51, 0x36, 0x97, 0x8c, 0xa2, 0x3e, 0x19, 0x97, 0xf6, 0x9a, 0xd7, 0x2e, - 0xa7, 0x5a, 0x44, 0xc7, 0xfc, 0x16, 0x16, 0x9a, 0x93, 0xc1, 0xdb, 0xbf, 0x1c, 0x69, 0x93, 0xdf, - 0xe0, 0x9c, 0x89, 0x13, 0xa4, 0x48, 0xaa, 0x6f, 0xd4, 0xdb, 0xb7, 0xf8, 0x50, 0xb0, 0x6d, 0x68, - 0x6f, 0xd5, 0xd5, 0x57, 0x47, 0x2b, 0x03, 0x2b, 0x07, 0x97, 0x97, 0xd4, 0x98, 0xf8, 0x52, 0xa1, - 0x6e, 0x23, 0xfa, 0x74, 0xe3, 0x77, 0x4f, 0x1b, 0x55, 0x2b, 0x5b, 0x37, 0x02, 0xa5, 0xe0, 0xa3, - 0x57, 0x36, 0x35, 0xaa, 0xe7, 0xc1, 0x51, 0x13, 0x4b, 0x71, 0xb5, 0x1b, 0x56, 0xe5, 0x71, 0x1b, - 0xa9, 0x51, 0x53, 0x30, 0xf8, 0xdf, 0x56, 0xc9, 0xd9, 0xac, 0xf5, 0x09, 0x7b, 0xb9, 0x6b, 0x76, - 0x2e, 0x5a, 0xa5, 0xd9, 0xfa, 0xcd, 0xfc, 0x66, 0xdd, 0xde, 0xdb, 0x6d, 0xbd, 0x54, 0xfa, 0xb9, - 0x5b, 0xad, 0xdf, 0x0a, 0x10, 0xdf, 0xdb, 0x68, 0xf8, 0xb3, 0xbb, 0xbb, 0xdf, 0xdf, 0x0e, 0xd9, - 0xee, 0x3e, 0x92, 0xbd, 0xa7, 0x68, 0x57, 0x33, 0x4c, 0xbe, 0x5f, 0xfe, 0x0b, 0x0f, 0x27, 0x6f, - 0xba, 0x9b, 0x55, 0xf5, 0x21, 0x16, 0x2f, 0x05, 0x5b, 0xb5, 0xa4, 0x7f, 0x76, 0xd3, 0x3f, 0x63, - 0xe3, 0x4c, 0x7c, 0xb4, 0x2f, 0x3e, 0xb6, 0x93, 0xdf, 0x59, 0xfc, 0xda, 0x92, 0xcf, 0x18, 0x48, - 0x96, 0x6e, 0xbf, 0xe1, 0x4e, 0x5e, 0x8f, 0x5a, 0xad, 0xf1, 0xdc, 0x93, 0x29, 0xd3, 0xae, 0x7a, - 0x4c, 0x5f, 0x1b, 0x65, 0x64, 0x6d, 0xda, 0x6a, 0xf7, 0xb6, 0x9d, 0x8b, 0xd3, 0x7f, 0xf0, 0x4c, - 0x34, 0x98, 0x34, 0xb2, 0xbd, 0x72, 0xf3, 0x38, 0xf8, 0x47, 0x37, 0x9f, 0xae, 0xf4, 0x9d, 0xfc, - 0x3e, 0x2a, 0x35, 0xcd, 0xaa, 0x5b, 0x75, 0x73, 0x6b, 0x52, 0x54, 0xfe, 0x7e, 0xdf, 0x85, 0x0e, - 0x7e, 0xa9, 0x67, 0x0e, 0x72, 0xeb, 0x6d, 0x1c, 0xd0, 0x2d, 0x5a, 0xb4, 0x9a, 0xa7, 0x3e, 0x0b, - 0x2f, 0x11, 0xf2, 0xe1, 0x71, 0x28, 0xa6, 0x92, 0xf7, 0xc1, 0x5d, 0x4d, 0xb8, 0xad, 0x2b, 0x49, - 0x66, 0xef, 0xf0, 0xa1, 0x4d, 0xb5, 0xcf, 0x86, 0xf7, 0xfd, 0xaa, 0xf2, 0xe2, 0xb7, 0x89, 0x05, - 0x1d, 0x57, 0x2f, 0x15, 0xb7, 0xc2, 0x99, 0x71, 0x62, 0x49, 0x2f, 0x55, 0x88, 0x70, 0x71, 0x5b, - 0xdc, 0xf8, 0x2b, 0x25, 0xbb, 0x6e, 0xef, 0xf5, 0xbb, 0x9b, 0x3d, 0x33, 0xf0, 0x56, 0x7c, 0x56, - 0xae, 0xed, 0x85, 0xeb, 0x4a, 0xad, 0xfe, 0x14, 0x33, 0x59, 0xf2, 0x3f, 0x82, 0x51, 0xb9, 0xfb, - 0x6e, 0xe3, 0xab, 0xe9, 0xcb, 0xe0, 0xac, 0x56, 0x5b, 0xdf, 0x69, 0xef, 0xd7, 0xc2, 0x82, 0x45, - 0xbe, 0x5c, 0x2e, 0xa3, 0x7e, 0xdd, 0x69, 0xd9, 0x73, 0x7e, 0x7c, 0xd7, 0xc6, 0xdb, 0x8a, 0x7c, - 0xfb, 0x64, 0x63, 0x2f, 0xa8, 0x99, 0x51, 0xa5, 0x1f, 0xeb, 0xb3, 0x1f, 0xe3, 0x24, 0x7c, 0x7e, - 0x1e, 0x28, 0x7e, 0x6e, 0xdf, 0xe3, 0x09, 0x2f, 0xeb, 0x55, 0xf0, 0xc4, 0x38, 0xed, 0xca, 0xaa, - 0xcd, 0x87, 0x82, 0xfc, 0x3f, 0x1f, 0x9e, 0x14, 0x25, 0xd9, 0xce, 0x37, 0xa9, 0xeb, 0xb2, 0xa4, - 0xba, 0xbb, 0x5d, 0xdf, 0xe0, 0xb7, 0x1d, 0xf7, 0x8d, 0x62, 0xbe, 0x30, 0xf7, 0x0b, 0xab, 0xda, - 0x17, 0x36, 0xd4, 0x7d, 0x8d, 0x2c, 0xce, 0xbe, 0x14, 0xb7, 0x92, 0x77, 0x53, 0x57, 0xae, 0xb5, - 0x9f, 0x5b, 0xef, 0x87, 0x4d, 0x7b, 0x96, 0xab, 0x37, 0x3f, 0x7e, 0x56, 0x5b, 0x7a, 0xbd, 0xaf, - 0xf0, 0xa1, 0xdb, 0x88, 0x91, 0x56, 0xc9, 0xc8, 0xc6, 0x32, 0xaf, 0xe9, 0x18, 0xf6, 0xa6, 0xd1, - 0x35, 0xd7, 0x5b, 0x86, 0x67, 0xf8, 0x53, 0xc9, 0xcf, 0x28, 0xd3, 0xc6, 0x72, 0x92, 0x5c, 0xdd, - 0xc7, 0x30, 0xc6, 0x19, 0x17, 0xc3, 0xbe, 0x14, 0xa5, 0x65, 0x8d, 0x45, 0x40, 0xd1, 0x8a, 0x56, - 0x63, 0x1b, 0x36, 0x10, 0x85, 0x38, 0x87, 0x6f, 0x3d, 0x33, 0xd0, 0x99, 0x16, 0xd0, 0xf1, 0xf0, - 0xc9, 0x5e, 0x63, 0xe1, 0x4a, 0xec, 0xe3, 0xaa, 0x7c, 0x3e, 0xa7, 0x9c, 0xf6, 0x8b, 0x63, 0x6b, - 0x4d, 0x0e, 0xbe, 0x5d, 0x68, 0xaa, 0x67, 0xe1, 0x49, 0xf0, 0xfa, 0x6c, 0x77, 0x36, 0x2e, 0xb0, - 0x5e, 0xcc, 0x5d, 0x4a, 0x58, 0xca, 0x9e, 0x85, 0x75, 0x62, 0x2d, 0x72, 0x2e, 0x28, 0xe2, 0xb6, - 0x55, 0xe3, 0x74, 0x91, 0xe4, 0xd6, 0x3a, 0xc4, 0xd4, 0x0a, 0x90, 0xa1, 0x0d, 0xf0, 0xcd, 0x59, - 0x3d, 0xcc, 0x41, 0xea, 0xa7, 0x8c, 0x59, 0x29, 0xa8, 0x81, 0x5c, 0xff, 0x0a, 0x15, 0x55, 0xc6, - 0x24, 0xf1, 0x8c, 0xa8, 0xc9, 0x94, 0x74, 0x89, 0xde, 0x92, 0x7c, 0xe3, 0x48, 0x55, 0x18, 0x1f, - 0x0a, 0x56, 0x51, 0x0d, 0x4e, 0x0f, 0x64, 0xae, 0x4a, 0xd7, 0xad, 0x4c, 0x8e, 0xdd, 0x8d, 0xec, - 0xba, 0x2b, 0x2e, 0x36, 0x19, 0xd9, 0xc5, 0xf0, 0xa5, 0x45, 0x76, 0x5d, 0x86, 0x1d, 0x73, 0xe0, - 0x81, 0xc8, 0xe4, 0xae, 0x48, 0xa7, 0x2f, 0xa3, 0x1d, 0xcd, 0x5d, 0x14, 0x5d, 0xe8, 0x3f, 0xac, - 0x23, 0x7c, 0x29, 0xf7, 0x3b, 0x5f, 0xa6, 0xae, 0x71, 0xb9, 0xb3, 0x03, 0x34, 0x9e, 0xd0, 0xdf, - 0x8b, 0x68, 0x4d, 0xc9, 0x55, 0xcf, 0xd1, 0x45, 0xf0, 0xa5, 0xb1, 0x64, 0x15, 0xa6, 0x38, 0x24, - 0x43, 0x49, 0xa1, 0xdf, 0xa8, 0x77, 0x61, 0xc6, 0xb7, 0xa4, 0xb4, 0xcd, 0x8a, 0x57, 0x64, 0x99, - 0x5b, 0xd9, 0x45, 0xcf, 0x8c, 0x33, 0x9b, 0xd4, 0xd2, 0x54, 0x73, 0x37, 0x6e, 0xa3, 0x77, 0x2d, - 0xcc, 0xc1, 0xf8, 0x53, 0xbb, 0x6d, 0xc8, 0xe0, 0xd8, 0xd0, 0xcb, 0x19, 0x59, 0x83, 0x34, 0x58, - 0x91, 0xcc, 0x33, 0xe3, 0xf2, 0x76, 0xd9, 0xb6, 0xae, 0xeb, 0xbf, 0x1a, 0xac, 0xea, 0x5a, 0xdf, - 0x15, 0x18, 0x38, 0x42, 0x7b, 0x33, 0xb2, 0x32, 0x2f, 0x0e, 0xd8, 0xce, 0xa6, 0x90, 0x68, 0x66, - 0x92, 0xc2, 0xf3, 0xc9, 0x74, 0xcb, 0xff, 0xc2, 0x9a, 0x49, 0x11, 0xb9, 0x9b, 0xe8, 0x32, 0xed, - 0x94, 0xa9, 0x49, 0x27, 0xa4, 0x29, 0x7c, 0x15, 0xe7, 0xe9, 0xbb, 0xd7, 0x5b, 0xfd, 0x59, 0xb0, - 0xd8, 0xe7, 0xde, 0xea, 0xbe, 0x33, 0x3f, 0x63, 0xf5, 0xad, 0xb6, 0xb4, 0xe9, 0xae, 0x43, 0x49, - 0xff, 0x12, 0x76, 0xb4, 0xe4, 0xd5, 0x2e, 0xd7, 0xe1, 0x0d, 0xcd, 0x9b, 0x49, 0x9f, 0x73, 0x6c, - 0xdb, 0xf0, 0x4c, 0x4a, 0x9f, 0x37, 0x49, 0xde, 0xdf, 0x05, 0xc2, 0x69, 0xd3, 0x59, 0xbb, 0x73, - 0x7c, 0x83, 0x1d, 0xbf, 0xca, 0x2f, 0x49, 0xdf, 0x20, 0xa2, 0x67, 0xf8, 0x48, 0xa9, 0x52, 0x2e, - 0xba, 0xbd, 0x70, 0x42, 0x2d, 0x75, 0xef, 0x96, 0xed, 0xdf, 0xc6, 0x04, 0x1b, 0x5e, 0xab, 0x9f, - 0xbd, 0x79, 0xbb, 0xc5, 0xe3, 0x3d, 0x45, 0xf2, 0x7c, 0xd4, 0xd8, 0xad, 0x7f, 0x12, 0x7b, 0xa7, - 0xc9, 0xd3, 0xf2, 0x16, 0xdd, 0xbf, 0x05, 0x65, 0xac, 0x9d, 0x28, 0x9d, 0xde, 0x9e, 0xbe, 0x08, - 0x6d, 0x6d, 0x37, 0xd5, 0x30, 0x79, 0x69, 0xd3, 0x7f, 0x09, 0xf6, 0x93, 0xcf, 0x92, 0x7f, 0x36, - 0x90, 0xad, 0xaf, 0x19, 0x6a, 0xd5, 0xbc, 0xbb, 0x4e, 0x99, 0xf3, 0xfe, 0x3b, 0xcb, 0x8d, 0xdd, - 0xdf, 0x8f, 0xaf, 0x8c, 0xd6, 0x4c, 0xa7, 0x9a, 0x4d, 0xb6, 0x4e, 0xe9, 0x4d, 0xb4, 0x94, 0xf9, - 0xe0, 0xac, 0xd3, 0x65, 0x2e, 0x5f, 0x6e, 0xed, 0xf0, 0x51, 0x5d, 0xf6, 0xcd, 0xfb, 0xe3, 0x3c, - 0x99, 0x8d, 0xe8, 0x94, 0x8e, 0x2e, 0xec, 0xed, 0x17, 0x17, 0x08, 0xe3, 0x99, 0x25, 0xcd, 0xc8, - 0x8e, 0xdb, 0x8f, 0x5d, 0x71, 0x42, 0x3c, 0xb2, 0x59, 0x17, 0x5f, 0x1a, 0x59, 0xfb, 0xfd, 0xcd, - 0xa3, 0xde, 0x5a, 0x68, 0x38, 0xf7, 0x32, 0x7b, 0xeb, 0xad, 0xbd, 0x33, 0xfc, 0x6b, 0xbf, 0x1f, - 0x8a, 0xee, 0xf7, 0xe7, 0x4a, 0xcb, 0xc1, 0x3c, 0xb7, 0x6d, 0x15, 0x03, 0x7b, 0x6e, 0xff, 0x09, - 0x7b, 0xed, 0x34, 0xdd, 0xaf, 0x57, 0xfb, 0x9f, 0xd6, 0xdb, 0x7e, 0x0a, 0x4a, 0xdb, 0x58, 0xd3, - 0xe3, 0x2b, 0x48, 0xef, 0x85, 0x2f, 0x8f, 0xe6, 0x93, 0xbf, 0xc2, 0xcd, 0x12, 0xa2, 0xd9, 0x27, - 0xe3, 0x31, 0x51, 0xe7, 0x65, 0x10, 0xcd, 0x51, 0x2b, 0xb9, 0x63, 0x79, 0xd9, 0x84, 0xd3, 0x1f, - 0x82, 0xaf, 0xb7, 0xcc, 0x71, 0xc9, 0x99, 0x64, 0xb3, 0xea, 0x1d, 0x7c, 0x46, 0x5d, 0x4b, 0x92, - 0x33, 0x26, 0xf8, 0xca, 0xfb, 0x19, 0x99, 0x64, 0x99, 0xbd, 0x8c, 0xac, 0x74, 0x69, 0x21, 0xfc, - 0x21, 0x68, 0xfa, 0x94, 0x1c, 0xac, 0xb1, 0x31, 0x72, 0xae, 0x96, 0xc7, 0xe2, 0xe4, 0x6a, 0x75, - 0xe5, 0x82, 0xd5, 0xe0, 0xb2, 0x86, 0x38, 0x9e, 0x46, 0x5a, 0xcb, 0x6d, 0x0c, 0xd5, 0x5d, 0x54, - 0x6c, 0x6d, 0xcb, 0xe1, 0x4e, 0x56, 0x91, 0x78, 0xeb, 0x7e, 0x8f, 0xd5, 0xc7, 0xa4, 0xa5, 0x5e, - 0xc4, 0x1f, 0xaf, 0x82, 0x3d, 0x25, 0xca, 0xb9, 0xa9, 0x97, 0xe2, 0xb8, 0x23, 0xee, 0xe9, 0xd1, - 0x38, 0x99, 0xf3, 0xaa, 0x7a, 0xe2, 0xfb, 0xbb, 0xee, 0x23, 0x92, 0x94, 0x5b, 0xec, 0x9b, 0xb9, - 0xba, 0x10, 0xc0, 0x11, 0xf2, 0x8f, 0xdd, 0xd7, 0x63, 0x9f, 0x75, 0x89, 0x81, 0x0e, 0x23, 0xf2, - 0xdd, 0xf0, 0x09, 0x1c, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x32, 0x19, 0x30, 0x7a, 0x5c, 0x11, - 0x6a, 0x44, 0x50, 0xea, 0x23, 0x90, 0xd5, 0xaa, 0xec, 0xf7, 0x77, 0xf1, 0x33, 0x66, 0x49, 0x4e, - 0xc4, 0xe9, 0x0e, 0xc2, 0xe5, 0x23, 0xee, 0xba, 0xb3, 0xec, 0x2e, 0x2b, 0x15, 0x8a, 0xc5, 0x64, - 0xe0, 0x84, 0xd3, 0x31, 0x63, 0x26, 0x3e, 0x8a, 0xf7, 0xd7, 0x23, 0x3f, 0x46, 0xea, 0xe8, 0xac, - 0xfa, 0x33, 0xc2, 0xbd, 0x1e, 0xbe, 0xea, 0xbf, 0xac, 0x5f, 0x5b, 0xfc, 0x28, 0x14, 0xba, 0x4d, - 0xbe, 0x7e, 0x93, 0x91, 0xb4, 0x6d, 0x69, 0x60, 0x2d, 0x3c, 0x36, 0x56, 0xed, 0xd6, 0xb3, 0x42, - 0x2b, 0x96, 0x1e, 0x0a, 0xe4, 0xcf, 0x4a, 0x9d, 0x93, 0xb2, 0x2a, 0x7c, 0x17, 0x59, 0x5d, 0x94, - 0xda, 0x8b, 0x2d, 0xf0, 0x81, 0x55, 0x27, 0xd4, 0x92, 0x47, 0xc2, 0x30, 0xb5, 0x7c, 0x12, 0x99, - 0xcb, 0x13, 0x36, 0x8d, 0x9d, 0x19, 0x19, 0xd8, 0xf8, 0xb3, 0xbe, 0xd8, 0xed, 0x50, 0x74, 0x6d, - 0xf8, 0x22, 0x10, 0x7c, 0x1b, 0x53, 0xe6, 0xc3, 0xc6, 0x5a, 0xc1, 0xd4, 0x07, 0x54, 0xd3, 0xd7, - 0x63, 0xd2, 0x49, 0xad, 0xe9, 0x25, 0x26, 0x7c, 0x2b, 0x36, 0x13, 0x3b, 0x43, 0x35, 0xb1, 0xaf, - 0xcc, 0xe6, 0x3e, 0xb4, 0xd7, 0xc2, 0x22, 0x6d, 0x4c, 0xc3, 0x4e, 0xd5, 0x6a, 0xfc, 0x45, 0x35, - 0xeb, 0x45, 0xf0, 0x60, 0x47, 0x8a, 0x9c, 0xec, 0x17, 0x1c, 0xdd, 0x66, 0xf2, 0x7f, 0xf1, 0x9a, - 0x57, 0xc7, 0xee, 0x6c, 0xdf, 0x43, 0x81, 0x9b, 0xcc, 0x93, 0xc2, 0x85, 0x6d, 0x33, 0x7c, 0xaf, - 0x52, 0xfe, 0x93, 0x4c, 0x66, 0x3a, 0x46, 0xc9, 0x5f, 0x9d, 0xf0, 0x41, 0x63, 0xa9, 0x98, 0x30, - 0x40, 0x12, 0x85, 0x96, 0x82, 0x05, 0xc5, 0x8f, 0x42, 0xbc, 0xda, 0xba, 0xba, 0xff, 0x82, 0x82, - 0x36, 0x36, 0x54, 0xb0, 0xe2, 0x7b, 0xad, 0x74, 0xc9, 0x99, 0xaa, 0xcf, 0x96, 0x34, 0x78, 0xba, - 0x2f, 0x94, 0x26, 0xb2, 0x7f, 0x9b, 0x8d, 0xf9, 0x5f, 0xb8, 0x92, 0x13, 0x55, 0x5c, 0xe5, 0x57, - 0x77, 0x7f, 0xf3, 0x91, 0x5d, 0xdd, 0xd5, 0x55, 0x7c, 0x12, 0xc8, 0x41, 0x4b, 0x49, 0x27, 0x78, - 0xff, 0x08, 0xd5, 0xad, 0x57, 0xd5, 0x7c, 0x16, 0x69, 0xcb, 0xda, 0x6b, 0x69, 0xdb, 0xa5, 0x5e, - 0x08, 0xe4, 0xff, 0xff, 0x05, 0xa6, 0xe7, 0xdd, 0x56, 0x04, 0x3e, 0x08, 0x6a, 0xbc, 0xeb, 0x3e, - 0x1c, 0x34, 0xb8, 0xc6, 0xa1, 0xc4, 0xa9, 0xe2, 0x75, 0xff, 0x0f, 0x93, 0x33, 0x23, 0x8a, 0xd8, - 0xf0, 0xfc, 0xac, 0x3b, 0xe4, 0x84, 0x94, 0xf8, 0x6c, 0xa5, 0x32, 0x57, 0x1b, 0x6c, 0xb7, 0x14, - 0xa8, 0x4e, 0x30, 0x86, 0x9a, 0x89, 0x73, 0x7f, 0x1a, 0x42, 0x6d, 0x8f, 0x6e, 0x7b, 0x49, 0x11, - 0x63, 0x13, 0xc4, 0x8c, 0xf9, 0x89, 0x4b, 0x53, 0xff, 0x8d, 0x99, 0x97, 0x7f, 0xd9, 0x38, 0xe2, - 0x65, 0x73, 0x82, 0xb7, 0xec, 0x6b, 0xd7, 0x6b, 0xcb, 0x22, 0x6d, 0xbf, 0xff, 0x8a, 0x9a, 0x49, - 0x91, 0x98, 0x4e, 0x43, 0xed, 0xfe, 0x32, 0x58, 0xb3, 0x73, 0x60, 0xcb, 0xb8, 0x87, 0x2d, 0x64, - 0xfe, 0xb7, 0x78, 0xbc, 0x3f, 0x43, 0x5c, 0x73, 0xf0, 0xaa, 0xb3, 0x6c, 0xf1, 0x26, 0xd2, 0xf0, - 0x48, 0xd6, 0xec, 0x53, 0xfe, 0x1e, 0x9e, 0x2c, 0xd0, 0xd0, 0xd6, 0xe5, 0x83, 0x4f, 0x9b, 0xb6, - 0x8e, 0x09, 0x11, 0xfe, 0xdd, 0x4f, 0xf1, 0xa5, 0x4f, 0x57, 0x6d, 0x5b, 0xbd, 0x11, 0xab, 0xc3, - 0x6a, 0x39, 0xfb, 0xb7, 0x37, 0xf1, 0xe4, 0x98, 0xd0, 0xcc, 0x32, 0xe7, 0x1e, 0x08, 0xb8, 0x9f, - 0x4f, 0xc3, 0x22, 0x51, 0xae, 0xf2, 0xee, 0x68, 0x92, 0x87, 0xa1, 0xa8, 0xda, 0x79, 0x8c, 0x8c, - 0xf2, 0x96, 0x9e, 0x08, 0x6d, 0x4d, 0xb8, 0x3e, 0x1c, 0xcd, 0xa9, 0xfd, 0x92, 0xad, 0xb5, 0x57, - 0xf8, 0xb2, 0xb4, 0xf3, 0x7b, 0x32, 0x47, 0xf0, 0x96, 0xda, 0x74, 0x92, 0x73, 0xe7, 0x88, 0x23, - 0x23, 0xc9, 0x3a, 0xc9, 0x16, 0x26, 0x5d, 0x7e, 0x09, 0x88, 0x67, 0xde, 0xc4, 0x3e, 0xa7, 0x10, - 0x6c, 0xb6, 0x11, 0x8e, 0xfa, 0x0b, 0x9a, 0xfa, 0xf7, 0xd5, 0xeb, 0xaa, 0x3a, 0x7c, 0x24, 0x1a, - 0x1e, 0xbb, 0x7b, 0x56, 0xdf, 0xe3, 0xe7, 0xf7, 0xfb, 0x1a, 0x1d, 0xa6, 0xe8, 0x6d, 0xf8, 0x2c, - 0xd2, 0xae, 0x93, 0x72, 0xb2, 0xed, 0x61, 0x9f, 0x17, 0xa7, 0x4e, 0xeb, 0xf1, 0xc2, 0x5b, 0x8d, - 0xb4, 0xcb, 0xec, 0xee, 0x92, 0xfe, 0xaf, 0xf7, 0xb7, 0x6f, 0xc1, 0x50, 0xa4, 0x68, 0xe6, 0x31, - 0x65, 0x65, 0x58, 0xdc, 0xec, 0x23, 0x87, 0xb1, 0xf1, 0x99, 0x62, 0x8e, 0x8a, 0x0d, 0xb1, 0x5e, - 0x06, 0xc6, 0xed, 0x1f, 0xbd, 0x97, 0xf8, 0x9a, 0x26, 0xda, 0xa5, 0xdf, 0xc1, 0x48, 0x9b, 0x4d, - 0x1a, 0x4d, 0x74, 0xc9, 0xf8, 0xc2, 0xa0, 0x3b, 0xe1, 0x13, 0x68, 0x9c, 0xbd, 0xdb, 0x8d, 0xd2, - 0xf2, 0xa4, 0xf1, 0xf7, 0x33, 0x5e, 0xea, 0xba, 0x44, 0x6d, 0x1f, 0xe2, 0xa4, 0xde, 0xe9, 0xba, - 0x5f, 0x2e, 0xda, 0xaf, 0x84, 0xf1, 0x37, 0xda, 0x6b, 0xe0, 0x9a, 0x76, 0x1e, 0x75, 0xbd, 0x37, - 0xb6, 0xc3, 0xc3, 0x76, 0x79, 0x22, 0xc7, 0xcd, 0x44, 0xd1, 0xfc, 0x12, 0x09, 0xcb, 0xec, 0x09, - 0xca, 0x7d, 0xdf, 0xd5, 0xbc, 0x20, 0xee, 0xf6, 0xbd, 0x15, 0xcc, 0x7e, 0x1e, 0xf0, 0x93, 0x40, - 0x77, 0x5e, 0xdb, 0x6d, 0xfc, 0x11, 0x91, 0x55, 0x55, 0x8f, 0xa3, 0xf7, 0xc1, 0x17, 0x55, 0x67, - 0xc5, 0x06, 0xaa, 0x13, 0x3c, 0xb4, 0x96, 0x1f, 0x04, 0x02, 0xc7, 0x32, 0x81, 0xad, 0xaf, 0x69, - 0xc6, 0xae, 0xb9, 0x8c, 0xd0, 0xb6, 0xd2, 0xc9, 0x92, 0xff, 0xc9, 0xb4, 0xec, 0xfc, 0x6e, 0xb4, - 0x4d, 0x1a, 0x53, 0xeb, 0xb9, 0xe5, 0x95, 0xd1, 0x5b, 0x7f, 0x54, 0xf4, 0x2c, 0x1e, 0xab, 0xfc, - 0x3b, 0x7d, 0x75, 0x4d, 0x95, 0x53, 0x43, 0x1e, 0xba, 0xba, 0x62, 0x1a, 0xd2, 0xff, 0x04, 0xc6, - 0x19, 0xf5, 0x6f, 0xba, 0x65, 0xbe, 0xd4, 0x1f, 0x06, 0x07, 0xca, 0xc5, 0x26, 0xe4, 0xd8, 0x31, - 0xc3, 0x22, 0x67, 0xfe, 0x30, 0x93, 0x49, 0x3b, 0xa9, 0x7a, 0xa4, 0x33, 0xa5, 0x2d, 0xbf, 0x1a, - 0x53, 0x33, 0x93, 0x29, 0xcb, 0x24, 0x9d, 0x94, 0xae, 0xed, 0x4e, 0x4f, 0x5c, 0xbd, 0x1f, 0xf8, - 0x29, 0xb7, 0x7c, 0x5d, 0x3a, 0xa4, 0xcf, 0x72, 0x4f, 0x5f, 0x05, 0x56, 0xb3, 0x63, 0xbb, 0xb3, - 0x54, 0xaf, 0x2f, 0x8d, 0xd9, 0x2d, 0x36, 0x49, 0x36, 0x4c, 0xed, 0x5a, 0xbc, 0xbe, 0xa5, 0xb5, - 0xf8, 0x7a, 0xab, 0xa5, 0xdd, 0xa6, 0x98, 0xd0, 0xda, 0x1f, 0x8f, 0xa6, 0x3a, 0x8b, 0xfe, 0x1e, - 0x2b, 0x76, 0xfb, 0x66, 0xf4, 0xad, 0x3e, 0x6a, 0x64, 0xa7, 0xf8, 0x20, 0x23, 0xde, 0x88, 0x9b, - 0x4a, 0x3a, 0x68, 0xf1, 0x5b, 0xf7, 0xff, 0xf8, 0x4c, 0xeb, 0x65, 0xdd, 0x13, 0x49, 0x7c, 0x3b, - 0x1b, 0xe8, 0x77, 0x2e, 0x24, 0x6c, 0x89, 0x2d, 0x2d, 0xed, 0xa3, 0x9e, 0xab, 0x37, 0x6f, 0xc6, - 0x19, 0x6b, 0xad, 0x72, 0x64, 0xde, 0xb4, 0x8b, 0x9e, 0x10, 0x10, 0xd9, 0x75, 0x93, 0xa1, 0xef, - 0x87, 0x24, 0xbe, 0x2c, 0x27, 0xa6, 0xba, 0xaf, 0x9b, 0x77, 0x72, 0x72, 0x86, 0xb5, 0x55, 0xc1, - 0x41, 0xde, 0xe7, 0x62, 0x87, 0x76, 0x3e, 0x52, 0x93, 0x37, 0xf1, 0xe2, 0x46, 0xd7, 0xcf, 0x96, - 0x49, 0xa7, 0x63, 0x48, 0xcd, 0xf0, 0x80, 0xce, 0x5a, 0x43, 0xf5, 0x6f, 0xa5, 0x5f, 0x30, 0xd7, - 0xbf, 0xc6, 0x5d, 0xc9, 0x9d, 0x2a, 0x6a, 0xb4, 0xa2, 0xff, 0x82, 0x62, 0x25, 0xb6, 0x9e, 0xdb, - 0x7c, 0x12, 0xe9, 0xa4, 0x93, 0x75, 0xbd, 0xf0, 0x88, 0x8a, 0xa7, 0xaa, 0x55, 0x68, 0x90, 0x9f, - 0x67, 0xba, 0xd7, 0x04, 0x25, 0xba, 0x5b, 0xfc, 0x15, 0x77, 0x7a, 0xcb, 0xaf, 0x16, 0xe5, 0x76, - 0x3b, 0x2e, 0xfc, 0x58, 0xda, 0x73, 0x63, 0xea, 0x69, 0xf0, 0x80, 0x8b, 0xdd, 0xec, 0xaf, 0x7f, - 0xa0, 0xaf, 0x67, 0xf1, 0x68, 0x8e, 0x62, 0x53, 0x16, 0xa7, 0xd4, 0x9f, 0x31, 0x55, 0x55, 0x49, - 0xc4, 0x84, 0x9d, 0xb9, 0x21, 0xd3, 0x4f, 0xc1, 0x65, 0x27, 0xf4, 0xdb, 0x3f, 0x65, 0xcc, 0x63, - 0xe4, 0xb5, 0xbf, 0x82, 0xe2, 0x6a, 0x7e, 0xa6, 0xab, 0x0f, 0x24, 0x90, 0x66, 0x8a, 0xb9, 0x2f, - 0xaf, 0x98, 0xa8, 0x99, 0x36, 0x8b, 0xca, 0x54, 0xaa, 0x9e, 0x22, 0x8b, 0x2f, 0x87, 0x8c, 0xd1, - 0xb2, 0x92, 0xd3, 0x4d, 0x2a, 0xf2, 0xa9, 0x72, 0xcf, 0xfc, 0x25, 0xa4, 0xd6, 0xdb, 0xb7, 0xe1, - 0x0e, 0xda, 0xe9, 0xba, 0x72, 0x7f, 0x82, 0x9c, 0xf8, 0x8b, 0xcf, 0xec, 0x92, 0x6d, 0x28, 0x0c, - 0xbe, 0xf5, 0x24, 0x3f, 0x16, 0x7c, 0x9b, 0x37, 0xd5, 0x76, 0x31, 0xa7, 0x9e, 0xbe, 0x82, 0x3a, - 0xfa, 0x2f, 0xd3, 0x76, 0x1a, 0x7b, 0xc5, 0x44, 0x89, 0xe2, 0x70, 0x6b, 0x89, 0x09, 0x16, 0x86, - 0xb6, 0xd7, 0xf2, 0xe5, 0x63, 0x05, 0xbc, 0xb5, 0x55, 0x52, 0x72, 0xee, 0xef, 0xe3, 0xaa, 0xb5, - 0x5d, 0xd6, 0x4e, 0x9b, 0xe1, 0x02, 0xe1, 0x9b, 0xb9, 0x7a, 0x17, 0x24, 0x9f, 0x2e, 0xb3, 0xf3, - 0x11, 0x6b, 0xe2, 0x7e, 0x0b, 0xa9, 0xbb, 0xcd, 0x4a, 0x56, 0x7c, 0x4c, 0xc6, 0x32, 0x1f, 0x26, - 0x0c, 0x65, 0xf3, 0x73, 0x04, 0x76, 0x30, 0x9b, 0xe2, 0xe2, 0x41, 0x40, 0xca, 0x47, 0xa3, 0x11, - 0xdf, 0x0b, 0x89, 0x15, 0x6c, 0xbe, 0xe1, 0x0d, 0xf3, 0x08, 0xe0, 0x73, 0x35, 0xc4, 0x86, 0x41, - 0x51, 0xf5, 0x55, 0x55, 0x4f, 0x6d, 0x5f, 0x89, 0x0c, 0x94, 0x82, 0xbb, 0x47, 0x64, 0x33, 0xc1, - 0x19, 0x77, 0x63, 0xc2, 0xb8, 0x4e, 0xf7, 0xd8, 0xee, 0xf9, 0x75, 0x34, 0x27, 0xcd, 0xd5, 0x7c, - 0x41, 0xc9, 0xf5, 0x4b, 0x7f, 0x08, 0x10, 0xb2, 0xfd, 0xb7, 0x49, 0x74, 0xbc, 0x11, 0x6e, 0xd5, - 0xdf, 0x15, 0x9f, 0xa2, 0xd4, 0x90, 0x65, 0xf9, 0x35, 0x8e, 0x7b, 0x11, 0x05, 0x55, 0x40, 0xe9, - 0xd9, 0x46, 0x62, 0x48, 0x1f, 0x8f, 0x7b, 0x1d, 0x87, 0x86, 0xaf, 0x70, 0xdd, 0x34, 0xe2, 0x5c, - 0x6f, 0xff, 0x05, 0x11, 0x7a, 0xde, 0xef, 0x97, 0xdd, 0x23, 0x31, 0xf9, 0x29, 0x2f, 0xe2, 0xec, - 0x77, 0xca, 0xfd, 0xf0, 0x44, 0x2f, 0x55, 0x6f, 0x82, 0x31, 0x39, 0x3d, 0xf8, 0x81, 0x23, 0x06, - 0x6e, 0xd2, 0xce, 0xd5, 0x55, 0x8d, 0x8c, 0x77, 0x25, 0xb5, 0x78, 0x27, 0x33, 0xa4, 0xa5, 0xf7, - 0x77, 0xc7, 0x3e, 0x0a, 0xa1, 0xa6, 0xa9, 0x2c, 0x86, 0x66, 0x1e, 0xe8, 0x18, 0x6a, 0x73, 0xd2, - 0xfb, 0x88, 0x8b, 0xf0, 0xa8, 0xae, 0xef, 0x7c, 0x48, 0x90, 0xe6, 0xc8, 0x66, 0xa9, 0xbe, 0x7f, - 0x4e, 0x6a, 0xc5, 0x5f, 0x08, 0x85, 0x37, 0x06, 0xc3, 0x32, 0x18, 0xe7, 0xd5, 0xca, 0x9c, 0xe5, - 0x69, 0xa3, 0x56, 0x3e, 0x3f, 0x76, 0x1f, 0xa5, 0x45, 0x1f, 0xc7, 0x87, 0x8c, 0x70, 0x10, 0xc0, - 0x04, 0xcb, 0xc2, 0x92, 0x4a, 0xc3, 0x2d, 0x95, 0x81, 0x58, 0xa3, 0xda, 0x21, 0x83, 0xaf, 0x85, - 0x82, 0xd8, 0x3f, 0xc0, 0x43, 0x1e, 0x15, 0x01, 0xd0, 0xb0, 0x74, 0x16, 0x1c, 0x07, 0x0e, 0x00, - 0xe0, 0xec, 0x6d, 0x62, 0x23, 0x08, 0x5c, 0x38, 0x71, 0xd8, 0x4c, 0xa8, 0x87, 0x27, 0x8e, 0x4b, - 0x0d, 0x62, 0x96, 0x06, 0xce, 0x5b, 0x72, 0xd9, 0x61, 0xe0, 0xa2, 0x12, 0xe5, 0xad, 0x39, 0xef, - 0x8b, 0x16, 0x4f, 0xdd, 0xf0, 0x57, 0xad, 0x6b, 0x37, 0x5c, 0xa9, 0xd2, 0xb8, 0x92, 0x96, 0x91, - 0xce, 0x64, 0xa8, 0xea, 0x9b, 0xbe, 0x1b, 0x2b, 0xc9, 0xbc, 0xab, 0x52, 0xd5, 0xb5, 0xaf, 0x82, - 0x8b, 0x24, 0x65, 0xcd, 0xad, 0x36, 0x2b, 0xac, 0x5f, 0x05, 0x65, 0xba, 0x57, 0xb3, 0x75, 0xcb, - 0x0b, 0x9f, 0x58, 0x7f, 0x39, 0x55, 0x5d, 0x1f, 0xfc, 0xf5, 0x5a, 0xb7, 0xfe, 0x42, 0x5b, 0xb5, - 0xe0, 0xa2, 0x92, 0x9a, 0x99, 0xf7, 0x90, 0x00, 0x47, 0xde, 0xc9, 0x92, 0x6b, 0x89, 0x3a, 0x76, - 0xe3, 0xeb, 0xe9, 0xae, 0x7c, 0xe6, 0x5a, 0x12, 0x96, 0x99, 0x7b, 0xfe, 0x10, 0x1d, 0x5b, 0x2a, - 0x69, 0x65, 0x9a, 0x3d, 0xf7, 0xb1, 0x91, 0x9b, 0xf0, 0xf9, 0x54, 0xc8, 0x3b, 0xa0, 0xc3, 0x14, - 0xfa, 0xba, 0xab, 0xad, 0x17, 0xf8, 0x53, 0x85, 0x37, 0x25, 0x58, 0xd0, 0xcb, 0xe6, 0xa4, 0x8c, - 0xcf, 0x23, 0x39, 0x8b, 0xe1, 0x4c, 0x4e, 0x08, 0x37, 0x72, 0x74, 0xe7, 0x3b, 0x1f, 0x4d, 0x2e, - 0xf8, 0x53, 0x1d, 0xcb, 0x7a, 0x57, 0x3b, 0x0d, 0xf1, 0x3b, 0x5e, 0xa6, 0x8d, 0xc8, 0x3e, 0x14, - 0xbb, 0x19, 0xea, 0x76, 0x4d, 0x15, 0x95, 0x25, 0x2b, 0x97, 0xb3, 0xce, 0x68, 0x72, 0x87, 0x82, - 0x52, 0xb9, 0xbe, 0x5e, 0xe9, 0x2f, 0x7c, 0x28, 0x53, 0xe1, 0x1b, 0x1d, 0x57, 0x4e, 0xdc, 0x6d, - 0x62, 0xb5, 0x36, 0x11, 0x3e, 0x09, 0x48, 0x2b, 0x15, 0x9b, 0x7c, 0xb0, 0x3e, 0x0a, 0xb3, 0xe1, - 0x1e, 0x7e, 0x5c, 0x3f, 0x3f, 0x7b, 0xbd, 0x37, 0xf1, 0xa4, 0x24, 0x87, 0x15, 0xde, 0x63, 0x46, - 0x6f, 0x2d, 0x9a, 0x07, 0xf2, 0x5e, 0x3d, 0x43, 0x4e, 0xd8, 0x4b, 0xd6, 0xff, 0xc6, 0x58, 0x33, - 0x9c, 0x27, 0xb7, 0x68, 0x36, 0x35, 0xbd, 0x07, 0xf4, 0x2f, 0xcf, 0x83, 0x98, 0xe5, 0x65, 0x3f, - 0x04, 0xf6, 0x85, 0xc9, 0x93, 0x33, 0x1f, 0x7c, 0x15, 0x1d, 0x66, 0xdb, 0x84, 0xbd, 0x22, 0xfd, - 0x8c, 0xb1, 0xb5, 0x11, 0x51, 0x49, 0xc5, 0xf0, 0xa0, 0x85, 0x6a, 0xa2, 0xe5, 0xc4, 0xe7, 0x6b, - 0x28, 0xa4, 0x4f, 0xc9, 0x3d, 0xfd, 0x60, 0x89, 0xfd, 0xc4, 0xc2, 0x85, 0xd8, 0xfa, 0x88, 0xc2, - 0xa9, 0x07, 0x69, 0x46, 0x33, 0xd4, 0x3e, 0xec, 0x6c, 0xcf, 0x7d, 0xf1, 0xb2, 0x42, 0xa7, 0x35, - 0x06, 0x2c, 0x9a, 0xfa, 0xac, 0xff, 0x6b, 0xe5, 0x55, 0x54, 0xc6, 0x52, 0xed, 0x7d, 0xd6, 0x8f, - 0xc2, 0xf5, 0xad, 0x21, 0x9a, 0xae, 0xa3, 0xff, 0x48, 0x9b, 0xe1, 0x8d, 0x0e, 0xb9, 0x2b, 0x7b, - 0x38, 0xad, 0xae, 0xd8, 0xd4, 0x6c, 0x0b, 0xfc, 0x31, 0x49, 0x27, 0xd2, 0x73, 0xea, 0xb4, 0xd2, - 0x49, 0x25, 0x1e, 0xf9, 0x77, 0xe3, 0x69, 0x52, 0x63, 0x4c, 0x55, 0x97, 0xe3, 0x38, 0xb6, 0x2f, - 0xd1, 0x2c, 0x2d, 0x41, 0x34, 0x7d, 0x63, 0x2f, 0x73, 0x29, 0x17, 0xaf, 0xe1, 0xcd, 0x28, 0x87, - 0x96, 0xa6, 0x4f, 0x37, 0x4f, 0x2f, 0xf0, 0xa1, 0x31, 0x58, 0x61, 0x02, 0xa9, 0x19, 0xe6, 0x1a, - 0xbd, 0x6a, 0x4b, 0xe0, 0xba, 0xe8, 0xd7, 0x4d, 0x7f, 0xa7, 0xc6, 0xee, 0xc5, 0x3c, 0x52, 0x62, - 0x44, 0x02, 0xb9, 0x79, 0x32, 0x76, 0x71, 0x7e, 0x5c, 0xba, 0x79, 0x71, 0x31, 0xa5, 0x07, 0xac, - 0x0a, 0x85, 0x55, 0x2c, 0x8e, 0x12, 0x85, 0x32, 0x98, 0x74, 0xa7, 0x9b, 0x6e, 0x8e, 0xc5, 0x75, - 0x4b, 0x9d, 0x5e, 0x92, 0x57, 0x3e, 0x5b, 0xff, 0x1a, 0x47, 0x40, 0x6a, 0xcb, 0x34, 0xae, 0x96, - 0x52, 0x0b, 0x7c, 0x43, 0x1e, 0xef, 0xf0, 0x91, 0xb1, 0x3a, 0xb9, 0xcc, 0xf1, 0x03, 0x72, 0xa4, - 0x52, 0xbe, 0x81, 0x6b, 0x0c, 0xe1, 0x28, 0x4c, 0x53, 0x41, 0xa5, 0x7c, 0x29, 0x84, 0x9f, 0x4d, - 0x4d, 0xc7, 0x95, 0xaa, 0x66, 0x8f, 0x61, 0xf1, 0xe1, 0x21, 0xf1, 0x99, 0x1f, 0x47, 0xc2, 0x03, - 0x63, 0x4e, 0x17, 0x01, 0xf5, 0x12, 0xb9, 0xe7, 0xe3, 0xe8, 0xfa, 0x9a, 0x40, 0xe1, 0xeb, 0x08, - 0x03, 0x00, 0x55, 0x2d, 0x3b, 0x1a, 0x9f, 0x2c, 0x1b, 0x0a, 0x8e, 0x40, 0xdc, 0x14, 0x89, 0x35, - 0x6b, 0x0c, 0x94, 0xca, 0x5d, 0xe3, 0xa1, 0x52, 0x70, 0x16, 0x40, 0x86, 0x39, 0xfc, 0x5b, 0x3e, - 0x96, 0xb8, 0x7b, 0x01, 0x60, 0x67, 0x38, 0x79, 0x95, 0x0a, 0x8f, 0x32, 0x41, 0xa6, 0xbc, 0x5b, - 0x6d, 0x40, 0x37, 0x3e, 0x0f, 0xa0, 0x70, 0x4c, 0x34, 0x51, 0x6b, 0x63, 0xbe, 0x20, 0xf0, 0x69, - 0xb0, 0x6b, 0xa7, 0x1c, 0xad, 0x24, 0x80, 0x25, 0x01, 0xfe, 0x5f, 0xa2, 0x0c, 0x11, 0x60, 0x67, - 0x21, 0x14, 0x56, 0x84, 0xb8, 0x2d, 0x06, 0xe4, 0x72, 0x44, 0xe5, 0x80, 0x75, 0x26, 0x2b, 0x41, - 0xab, 0x12, 0x95, 0xd1, 0xb3, 0x06, 0x06, 0xf3, 0x6c, 0xf0, 0x6a, 0x85, 0xee, 0x24, 0x6c, 0x40, - 0x1e, 0x54, 0xaa, 0x0b, 0x4b, 0x9d, 0x1a, 0x12, 0x00, 0x01, 0x3a, 0x8c, 0x04, 0x1a, 0x0f, 0x00, - 0x02, 0x78, 0xe4, 0x01, 0x91, 0xe0, 0xc4, 0x31, 0xa5, 0x50, 0x57, 0xad, 0xe3, 0xa6, 0xe4, 0x07, - 0x89, 0x81, 0x55, 0x00, 0x6c, 0x19, 0x60, 0xec, 0x1b, 0x01, 0x26, 0x0d, 0xa6, 0xb2, 0x76, 0xeb, - 0x36, 0x71, 0x23, 0x77, 0x45, 0x24, 0xee, 0x63, 0x7e, 0x51, 0xa8, 0xb9, 0x50, 0x61, 0x32, 0xf4, - 0x4f, 0x72, 0x0c, 0x15, 0xe9, 0x1a, 0x91, 0xfe, 0x49, 0x29, 0x93, 0xef, 0xcb, 0x59, 0x7e, 0x20, - 0x22, 0x37, 0x43, 0x2f, 0x14, 0x13, 0x5a, 0x1c, 0x1b, 0xa1, 0x62, 0xe8, 0x18, 0x70, 0xb8, 0xdd, - 0x05, 0x96, 0xd8, 0xa4, 0x4a, 0x96, 0x03, 0x96, 0x65, 0x92, 0x86, 0xc2, 0xf8, 0x81, 0xfb, 0x11, - 0x9f, 0xd1, 0xc5, 0x5e, 0x22, 0x36, 0x56, 0x4b, 0xb3, 0x85, 0xe8, 0x49, 0xb6, 0x57, 0x2d, 0x61, - 0x55, 0x09, 0x2e, 0xc6, 0x14, 0x04, 0x92, 0x74, 0x57, 0x21, 0x64, 0xf4, 0x0b, 0x28, 0x34, 0xa0, - 0x4b, 0x47, 0x22, 0x83, 0xc5, 0x34, 0xc7, 0xd1, 0x3f, 0x1a, 0x7a, 0x4a, 0x59, 0x66, 0x64, 0x66, - 0xfc, 0xac, 0x68, 0xa3, 0x93, 0xb5, 0xaf, 0x29, 0x52, 0x18, 0xca, 0x8b, 0xff, 0x0e, 0xcf, 0x06, - 0x3a, 0xa9, 0xbd, 0x13, 0x18, 0xc6, 0x6b, 0xa9, 0x09, 0xef, 0x9c, 0x89, 0x91, 0x0f, 0xf8, 0x7e, - 0x9b, 0x43, 0xdf, 0x76, 0x3b, 0x59, 0x67, 0x6a, 0xdc, 0x92, 0x6b, 0x0f, 0x3f, 0xca, 0x98, 0x67, - 0xb3, 0x7a, 0x28, 0x5f, 0xe3, 0x69, 0xa5, 0xdc, 0xf0, 0xb9, 0xe7, 0x8e, 0x6b, 0x09, 0xf7, 0x38, - 0xe7, 0x1e, 0x2a, 0x95, 0xd5, 0xff, 0x0f, 0x16, 0x13, 0x44, 0xdd, 0xf1, 0x9c, 0x3a, 0xbc, 0xc8, - 0xcd, 0xaa, 0x8c, 0x72, 0xff, 0xe3, 0x48, 0x4c, 0x2c, 0xbb, 0x7a, 0xe4, 0x6d, 0x25, 0x68, 0x38, - 0xad, 0xaa, 0xae, 0x09, 0x94, 0x9e, 0x0f, 0xa7, 0x64, 0xeb, 0xe3, 0x4b, 0x4a, 0x91, 0xbe, 0xb5, - 0x27, 0xd9, 0x4c, 0x61, 0x4d, 0xbd, 0x5e, 0x88, 0xca, 0xff, 0xc2, 0x9d, 0x21, 0xb5, 0x2b, 0x2b, - 0x6f, 0xcd, 0x7e, 0xad, 0x16, 0x2e, 0x8e, 0xf8, 0x7c, 0x14, 0xf4, 0xe4, 0x92, 0xe6, 0x97, 0x72, - 0xac, 0xf8, 0x7a, 0xd3, 0x4d, 0x13, 0x68, 0xe3, 0x56, 0x2c, 0x69, 0x90, 0x3b, 0x1a, 0x7a, 0x22, - 0x17, 0xb6, 0xcd, 0x53, 0xf1, 0x91, 0xf5, 0xdd, 0x98, 0xda, 0xee, 0xbe, 0x9d, 0x33, 0xca, 0x2f, - 0x05, 0x39, 0x4a, 0xb4, 0x94, 0xfa, 0x92, 0x5f, 0x7c, 0x3d, 0xee, 0xea, 0x9e, 0xc9, 0x6d, 0x2b, - 0x69, 0x8d, 0x73, 0xff, 0xf8, 0x50, 0xad, 0xed, 0x2a, 0xe5, 0x6a, 0xca, 0x9d, 0x91, 0x5b, 0x75, - 0x20, 0x3e, 0x15, 0xac, 0xbd, 0xad, 0xdd, 0x4f, 0xcd, 0x44, 0x75, 0x9a, 0xa5, 0xe4, 0xa4, 0xf8, - 0x63, 0x4e, 0x6d, 0xb7, 0x6d, 0x60, 0xed, 0xde, 0x3f, 0xf3, 0x57, 0x7f, 0x0b, 0xe9, 0x3d, 0xcb, - 0x2a, 0x24, 0xb2, 0xa5, 0xd3, 0x25, 0x7f, 0xc1, 0x28, 0xa9, 0xa9, 0xe7, 0xbe, 0x2f, 0x82, 0x61, - 0x3a, 0xbd, 0xd2, 0x4b, 0xab, 0x82, 0x51, 0xcf, 0xba, 0x4d, 0xf2, 0xf8, 0xd3, 0xa5, 0x05, 0x48, - 0xca, 0x25, 0xca, 0xb2, 0xc3, 0x4c, 0x78, 0xfc, 0x75, 0x35, 0xd9, 0x45, 0xab, 0x1b, 0xb1, 0xba, - 0x1b, 0x24, 0x33, 0x43, 0xc1, 0x39, 0x1b, 0x27, 0x6f, 0xad, 0x8e, 0x5f, 0x04, 0x3e, 0x66, 0x37, - 0xf8, 0x29, 0xe9, 0xa5, 0xb6, 0xf2, 0x6f, 0xbf, 0xc1, 0x56, 0xaf, 0xcd, 0xd7, 0x2e, 0x70, 0xf8, - 0x52, 0xd5, 0x32, 0x75, 0x59, 0xd5, 0x56, 0xd5, 0x4a, 0x0f, 0x8f, 0x3d, 0x7a, 0xb6, 0xcf, 0xb4, - 0xd2, 0xfc, 0x16, 0xe7, 0xdd, 0xef, 0x77, 0xc6, 0x9a, 0x31, 0x5c, 0x56, 0xe8, 0xa1, 0x1b, 0xe9, - 0xb6, 0x9a, 0x1f, 0x48, 0xf5, 0x83, 0x55, 0x27, 0x53, 0x4d, 0x32, 0x7f, 0xf0, 0xa5, 0x23, 0x1c, - 0x42, 0xc7, 0x69, 0x8a, 0x4e, 0x31, 0x67, 0x47, 0xc6, 0xe0, 0x53, 0xfd, 0x3c, 0x81, 0xa8, 0x3d, - 0x81, 0x7f, 0xdd, 0x37, 0x32, 0xfe, 0x14, 0xbf, 0x7f, 0xa4, 0xd5, 0x2a, 0x52, 0x7a, 0x7b, 0x1f, - 0x27, 0x49, 0xfc, 0x20, 0x76, 0xe7, 0xc6, 0x33, 0xfa, 0xcf, 0xf5, 0x5f, 0x13, 0x1a, 0x44, 0x38, - 0x72, 0xb0, 0xb7, 0x37, 0xb6, 0x2a, 0x89, 0x32, 0xa2, 0xa0, 0xb5, 0x2a, 0x3e, 0x7e, 0x73, 0x8b, - 0xff, 0x10, 0x24, 0x12, 0xcb, 0xe0, 0xc9, 0x9b, 0xda, 0x4b, 0xb3, 0xe3, 0x4e, 0xdc, 0xa9, 0xfb, - 0x93, 0xf2, 0xfe, 0x93, 0xd2, 0xbb, 0xfd, 0xc6, 0x17, 0xf8, 0xda, 0x8c, 0xf0, 0xae, 0xd9, 0x45, - 0x1e, 0x76, 0x5b, 0x69, 0xb4, 0x9d, 0x42, 0xbd, 0x4d, 0xa6, 0xdd, 0x99, 0x17, 0xe3, 0x65, 0x19, - 0x49, 0x2b, 0xf5, 0xc4, 0xbc, 0x6d, 0x44, 0x38, 0x7e, 0xc9, 0x47, 0x16, 0xdb, 0x4a, 0xd9, 0xa5, - 0x3d, 0xda, 0xcf, 0xbb, 0xc9, 0xbe, 0x30, 0x89, 0x20, 0xda, 0xc5, 0x90, 0x93, 0xa9, 0xce, 0x58, - 0xbb, 0x3e, 0x3d, 0xac, 0x1f, 0x3c, 0x61, 0xa6, 0xe9, 0x37, 0x8a, 0xb4, 0xef, 0x2f, 0x3d, 0x72, - 0xdb, 0x17, 0x82, 0x90, 0x8a, 0x8b, 0xf9, 0xff, 0x55, 0x20, 0x5c, 0x44, 0x3e, 0x38, 0xc3, 0x00, - 0x49, 0xb9, 0x02, 0x4b, 0x4f, 0x5d, 0x42, 0x1e, 0x05, 0xa4, 0x08, 0x98, 0xd4, 0x72, 0xe2, 0xb4, - 0x61, 0xdf, 0x28, 0xea, 0x6c, 0xc0, 0xff, 0xff, 0x12, 0x34, 0xb3, 0x62, 0x9d, 0xca, 0x83, 0x5e, - 0x3f, 0x02, 0xf2, 0xe3, 0x70, 0xf4, 0x82, 0x26, 0xfa, 0x42, 0x30, 0xff, 0x05, 0x2d, 0x29, 0x0c, - 0x6a, 0x2c, 0x34, 0x3e, 0x65, 0x7f, 0xaf, 0xbf, 0x57, 0xd6, 0xae, 0x24, 0x28, 0x4c, 0xf4, 0x36, - 0x46, 0x7e, 0x5b, 0x7e, 0xbf, 0xc8, 0x7c, 0x23, 0x5d, 0xff, 0xe2, 0x2a, 0xaf, 0x36, 0xe2, 0x51, - 0x18, 0x56, 0xf8, 0xe2, 0x97, 0x5b, 0xea, 0x4a, 0x51, 0xed, 0xff, 0x1d, 0xd2, 0xb5, 0x76, 0x9a, - 0x49, 0x2f, 0x11, 0x0a, 0x77, 0x7f, 0xb9, 0x70, 0x56, 0xdb, 0xb6, 0x4f, 0xc5, 0x4a, 0xbc, 0x69, - 0x0b, 0x65, 0xb2, 0xc6, 0xe4, 0xe3, 0x29, 0x73, 0x27, 0xc7, 0x3e, 0xaf, 0xd7, 0xb2, 0x48, 0x99, - 0x0c, 0xfb, 0x19, 0xf4, 0x6f, 0x46, 0x2b, 0xf8, 0x80, 0xa1, 0x5d, 0x06, 0x65, 0x49, 0xbe, 0x8e, - 0x64, 0xc6, 0xee, 0x5c, 0xb4, 0x9b, 0x96, 0xe7, 0x88, 0x1a, 0x4b, 0x2f, 0x7a, 0x75, 0x37, 0x19, - 0xaf, 0x6a, 0x91, 0xf1, 0x25, 0x2a, 0x62, 0xb4, 0xa8, 0xdd, 0xbf, 0x5e, 0xa4, 0xf2, 0xc0, 0xad, - 0x66, 0x5b, 0x77, 0xfe, 0x11, 0x0c, 0x85, 0x27, 0xbd, 0xf1, 0x05, 0x81, 0x29, 0x0c, 0xed, 0xae, - 0x17, 0x8e, 0x2d, 0x72, 0x32, 0x05, 0x8d, 0x0d, 0x02, 0x7d, 0xb3, 0xa5, 0x46, 0x44, 0x81, 0x76, - 0x88, 0xdb, 0x12, 0xef, 0xda, 0x37, 0x8f, 0xb2, 0x14, 0x6a, 0x36, 0x3f, 0x81, 0x9e, 0x38, 0x91, - 0xb4, 0x54, 0x68, 0xd3, 0x21, 0x27, 0x1c, 0xf2, 0x4e, 0x49, 0xd5, 0x6d, 0xff, 0x2b, 0x94, 0x43, - 0xc9, 0x1a, 0x94, 0xa0, 0x38, 0x16, 0x36, 0x63, 0xf0, 0xcb, 0x27, 0xfa, 0x6b, 0x2c, 0x7f, 0xc1, - 0x01, 0xd3, 0x6c, 0x66, 0xad, 0xd5, 0xa4, 0x6c, 0xbb, 0xe0, 0xca, 0x02, 0x09, 0x1a, 0x3f, 0x89, - 0x2c, 0xa9, 0xdf, 0xe1, 0x29, 0x1e, 0xc6, 0xdb, 0x1d, 0xbb, 0x7e, 0x36, 0xe8, 0x35, 0x8b, 0xb4, - 0xd4, 0xe4, 0x9f, 0x8f, 0x54, 0xd6, 0xcf, 0x21, 0x6e, 0xde, 0x49, 0xd8, 0xc2, 0x12, 0xfe, 0xff, - 0x1b, 0xa3, 0x8c, 0xef, 0x51, 0x75, 0xad, 0x1a, 0x1b, 0xd8, 0x83, 0x4a, 0xad, 0x23, 0xad, 0xa5, - 0xdb, 0x51, 0xe4, 0x97, 0x43, 0xff, 0x85, 0x8a, 0x5e, 0x9c, 0x69, 0xec, 0x67, 0x83, 0x9e, 0x3d, - 0xdf, 0xf8, 0x20, 0xf9, 0x75, 0x57, 0x3e, 0x27, 0xa4, 0x37, 0x8c, 0xb1, 0x5d, 0xff, 0xc1, 0x4f, - 0x4d, 0xbd, 0xdd, 0x35, 0x76, 0xd5, 0x2f, 0x8d, 0x97, 0x63, 0x7e, 0xc6, 0xbb, 0xad, 0xd3, 0x11, - 0xf1, 0xd5, 0x59, 0xf9, 0x66, 0xd9, 0x9a, 0x6d, 0xa6, 0x8b, 0xc1, 0x05, 0xb4, 0xdb, 0x36, 0x3b, - 0x6d, 0x9a, 0x44, 0x87, 0x4a, 0xa9, 0x9a, 0x2a, 0x12, 0x7f, 0xf0, 0x41, 0x93, 0x4b, 0x95, 0x3a, - 0xbb, 0x4d, 0x85, 0x2c, 0xbf, 0x5f, 0x89, 0xc2, 0x4d, 0x0f, 0xc1, 0x06, 0x95, 0xed, 0xc6, 0xbe, - 0xda, 0x7a, 0xcf, 0xa3, 0x8f, 0x69, 0xfe, 0x3b, 0x48, 0x9e, 0xd4, 0x99, 0xd9, 0xf3, 0xf0, 0x41, - 0x6c, 0x69, 0x5a, 0x6f, 0xb7, 0x57, 0xe7, 0xaa, 0x77, 0xbb, 0x4d, 0x7e, 0x26, 0x15, 0xf1, 0xa5, - 0x8e, 0xf4, 0xe3, 0xdb, 0x4c, 0xbd, 0xdb, 0xfe, 0x0b, 0x09, 0x74, 0xdf, 0x69, 0xaa, 0x9b, 0x3d, - 0xfe, 0x0b, 0x2f, 0xb4, 0x95, 0xa7, 0xc9, 0xa5, 0xcc, 0x43, 0xc1, 0x44, 0x9d, 0xe2, 0x7d, 0xdc, - 0x50, 0x9f, 0x05, 0xb6, 0xcd, 0x07, 0xac, 0xf9, 0x75, 0xb3, 0x71, 0xe1, 0x48, 0xde, 0x9f, 0x2f, - 0x4d, 0x34, 0xd5, 0x6a, 0xf4, 0xed, 0xf0, 0x49, 0x35, 0x19, 0xdf, 0xff, 0x05, 0x3d, 0xdf, 0x77, - 0x4b, 0x69, 0x3a, 0xf3, 0x08, 0x96, 0x05, 0xdf, 0xc2, 0x85, 0x57, 0x2a, 0x33, 0x30, 0xa3, 0x1f, - 0xae, 0xf6, 0xb5, 0x53, 0xd8, 0x63, 0x84, 0x5d, 0xa3, 0xcc, 0xc1, 0x86, 0x1e, 0x34, 0xb1, 0xaf, - 0x4c, 0x5f, 0x68, 0x98, 0xee, 0xd6, 0x2e, 0xee, 0x6b, 0x3f, 0x2f, 0xe4, 0xe6, 0xff, 0x84, 0x09, - 0x33, 0xcc, 0xb7, 0x07, 0x2e, 0x36, 0xe3, 0xaa, 0x7c, 0x57, 0x73, 0xc2, 0x91, 0x95, 0xbb, 0x6d, - 0xb2, 0xf6, 0x36, 0xb0, 0xa5, 0x5f, 0xed, 0x7a, 0xd7, 0x38, 0xe6, 0x58, 0xfe, 0x34, 0xbc, 0xbb, - 0x37, 0x5c, 0xd4, 0xa9, 0xfb, 0x0b, 0x4c, 0x6f, 0x05, 0xef, 0xbb, 0x6d, 0xbf, 0x87, 0xb0, 0x93, - 0xa4, 0xab, 0x86, 0x15, 0x6a, 0x3a, 0xd2, 0x3a, 0x86, 0x25, 0xd6, 0xde, 0x5f, 0xf1, 0x86, 0x55, - 0xab, 0x49, 0x8e, 0x7d, 0xbc, 0xd0, 0x98, 0x92, 0xcf, 0x9f, 0x85, 0x22, 0x1a, 0x07, 0xd8, 0xd3, - 0xe9, 0x77, 0x74, 0xab, 0x3d, 0x7d, 0xa8, 0xcc, 0xa7, 0x7c, 0x29, 0x9b, 0x1b, 0x3b, 0xcb, 0xf2, - 0x4e, 0x5d, 0xe0, 0x45, 0x24, 0xbd, 0x36, 0xa0, 0x65, 0xe1, 0x42, 0xb7, 0x7c, 0x9d, 0x02, 0x9a, - 0x2e, 0x31, 0x83, 0x4e, 0xd8, 0x0e, 0x46, 0xab, 0x2e, 0x36, 0xa8, 0x9f, 0xe1, 0x3b, 0xd7, 0xf4, - 0xf6, 0x19, 0x6b, 0x89, 0x12, 0x14, 0x23, 0xe7, 0xbc, 0x8b, 0xcb, 0xee, 0x3d, 0xe7, 0xda, 0xf1, - 0x20, 0xa3, 0x72, 0x33, 0x75, 0x15, 0xd9, 0xc4, 0x08, 0x1e, 0x53, 0x9f, 0x46, 0xf5, 0x26, 0x13, - 0x31, 0x85, 0x8a, 0xa6, 0x3f, 0x05, 0x67, 0x1c, 0xab, 0x8b, 0x6c, 0x56, 0xee, 0xac, 0x6e, 0xc7, - 0xc6, 0x68, 0x67, 0xf4, 0x9c, 0xf0, 0xbd, 0x42, 0x3e, 0x96, 0x39, 0x4f, 0x13, 0x05, 0x36, 0x47, - 0xae, 0xa9, 0x4a, 0xc6, 0x5c, 0x15, 0xdf, 0x89, 0x8c, 0x2b, 0xc5, 0x9f, 0x1a, 0xed, 0xb5, 0xde, - 0xdb, 0x63, 0x35, 0xfe, 0x11, 0x10, 0xed, 0x65, 0xb9, 0xab, 0xbe, 0x56, 0x3e, 0x0a, 0x88, 0x4f, - 0xc6, 0xd8, 0xad, 0x8a, 0x5c, 0x73, 0x9e, 0xf7, 0xef, 0x8d, 0x84, 0x5a, 0xef, 0x7b, 0x6b, 0x52, - 0xa2, 0x8a, 0xba, 0x34, 0x2e, 0x1c, 0x25, 0xe9, 0x04, 0x4b, 0xa7, 0x80, 0xf6, 0x94, 0xed, 0x4e, - 0x32, 0x4d, 0x4d, 0x3d, 0xb0, 0x76, 0xff, 0x85, 0x0e, 0x4c, 0xf4, 0xf1, 0x10, 0x8f, 0x3d, 0x4c, - 0x5b, 0x29, 0x52, 0xf9, 0x7e, 0xd3, 0xe2, 0xf8, 0xd2, 0x4e, 0xe7, 0x5a, 0xd2, 0x7d, 0xbe, 0x05, - 0xd4, 0x4f, 0x6a, 0xd5, 0x81, 0x81, 0x2d, 0x2d, 0xa9, 0xe9, 0x05, 0x35, 0xee, 0xb1, 0x8a, 0xd1, - 0x57, 0xa6, 0x34, 0x88, 0xb7, 0x88, 0x10, 0x34, 0xb9, 0x24, 0xf5, 0xeb, 0x32, 0x5d, 0xf0, 0xd1, - 0x80, 0xd1, 0x49, 0xdf, 0x5f, 0xcb, 0x51, 0x28, 0xcd, 0x2f, 0x05, 0xc6, 0x7e, 0xa1, 0xd3, 0x1d, - 0x9c, 0xbc, 0xc7, 0xe3, 0x0f, 0x08, 0x89, 0x77, 0x77, 0xb9, 0xa7, 0xbd, 0xfe, 0x0a, 0x84, 0x08, - 0x72, 0xf0, 0xae, 0xa5, 0x59, 0x68, 0x90, 0x76, 0x1d, 0x72, 0xaa, 0xe9, 0x7c, 0x6c, 0x28, 0x03, - 0x42, 0xa2, 0xd4, 0xaf, 0x52, 0xaf, 0x87, 0x63, 0xb6, 0x63, 0x50, 0x81, 0x2a, 0xb3, 0x77, 0x5b, - 0x93, 0x72, 0xc9, 0x15, 0x15, 0x29, 0xfc, 0x91, 0x7f, 0x0a, 0x09, 0x0b, 0x0e, 0x0a, 0x27, 0x42, - 0x61, 0x52, 0x56, 0xab, 0x7b, 0x12, 0x38, 0xa7, 0x05, 0x8c, 0xe1, 0x83, 0xe8, 0x24, 0x70, 0xf7, - 0x10, 0x0c, 0x87, 0x02, 0x41, 0x45, 0x3e, 0x20, 0x68, 0x8b, 0x58, 0x76, 0xb2, 0x50, 0x92, 0xea, - 0x64, 0xa1, 0xa9, 0x06, 0x73, 0xce, 0x04, 0xc9, 0x33, 0x42, 0x54, 0x68, 0x9c, 0xe5, 0x9e, 0x90, - 0x4f, 0x73, 0x27, 0xfa, 0xd1, 0x3f, 0x08, 0x0d, 0xf2, 0x01, 0x1c, 0xfa, 0x30, 0x11, 0x60, 0x02, - 0x8f, 0x8c, 0xa2, 0xb2, 0x62, 0x0e, 0x25, 0x50, 0x04, 0x70, 0x5b, 0x0a, 0xa0, 0x55, 0x43, 0x13, - 0xbc, 0x1a, 0x89, 0x61, 0x8c, 0x12, 0xb7, 0xc5, 0x72, 0x64, 0x0c, 0xc8, 0x1c, 0x9b, 0x7c, 0xff, - 0xbe, 0x83, 0x8a, 0xdc, 0xa1, 0xd8, 0x92, 0xd8, 0xf9, 0xec, 0x81, 0x2d, 0x02, 0x9b, 0x9e, 0x79, - 0x04, 0xc5, 0x27, 0xb1, 0xfb, 0xc8, 0xb8, 0xf3, 0xa3, 0x03, 0x1a, 0x35, 0x27, 0xc4, 0xc6, 0xc9, - 0x41, 0xd9, 0xd4, 0x3d, 0xaa, 0x86, 0x6c, 0xe0, 0x06, 0x1d, 0x2a, 0x7c, 0x16, 0x1e, 0xcd, 0x7a, - 0x67, 0x50, 0x8a, 0xda, 0x70, 0xe1, 0xed, 0xeb, 0x4b, 0x8c, 0x69, 0xf9, 0x7e, 0xb5, 0xbf, 0x7e, - 0x8d, 0x57, 0xdb, 0x65, 0x67, 0xf0, 0xd1, 0x4d, 0xae, 0x93, 0x4e, 0xde, 0x42, 0xd3, 0xb0, 0x9b, - 0x13, 0x6d, 0xb6, 0xdf, 0x87, 0xa4, 0x94, 0x59, 0xf0, 0x96, 0x9e, 0x6d, 0x4b, 0xb4, 0xc5, 0x4b, - 0xff, 0xf0, 0xed, 0xcd, 0x6b, 0x5f, 0xea, 0x76, 0x55, 0x17, 0x69, 0xa5, 0x58, 0x88, 0xf9, 0x7f, - 0xf0, 0xed, 0xee, 0x6c, 0xd3, 0xef, 0x67, 0x73, 0xe5, 0x47, 0x4c, 0x34, 0xe1, 0xcf, 0xcd, 0xff, - 0x05, 0x36, 0x59, 0x3a, 0x8e, 0xeb, 0x0d, 0xf6, 0xfb, 0xcd, 0xb9, 0xbe, 0x0a, 0xae, 0xda, 0x53, - 0x75, 0x1f, 0xcf, 0x77, 0x3d, 0xe4, 0xc2, 0x68, 0xbd, 0xdf, 0x08, 0x73, 0x7d, 0xa3, 0xe3, 0x76, - 0x33, 0xe9, 0xb1, 0xba, 0xcc, 0xf0, 0x41, 0x56, 0x9e, 0xd6, 0xd2, 0x3e, 0x35, 0xf2, 0x72, 0x5c, - 0x66, 0x37, 0xff, 0x85, 0x26, 0x94, 0x6f, 0x48, 0xd0, 0x36, 0x6e, 0xed, 0xea, 0x6b, 0x9b, 0xe0, - 0xc2, 0xea, 0xd3, 0x36, 0x54, 0xa4, 0xf2, 0x79, 0xad, 0x09, 0x76, 0xdf, 0xf8, 0xcb, 0x37, 0x54, - 0xfb, 0x51, 0xe9, 0x4d, 0xf9, 0xe3, 0x0a, 0x6f, 0x13, 0x1a, 0x92, 0x9a, 0x9b, 0x9e, 0x3a, 0xa5, - 0xea, 0xcf, 0x57, 0xcb, 0xc9, 0xb1, 0x78, 0x2c, 0xbc, 0xe9, 0xba, 0x6e, 0xdd, 0xb9, 0x53, 0xe0, - 0xba, 0x92, 0xc2, 0x8a, 0x9b, 0x4f, 0xbf, 0x7c, 0xba, 0xd7, 0xc1, 0x4c, 0x47, 0xd5, 0xd4, 0xfc, - 0xee, 0xa9, 0xd7, 0xc1, 0x56, 0xba, 0x5b, 0x43, 0x95, 0x71, 0x9b, 0x0f, 0x95, 0xbf, 0xc4, 0xe3, - 0x69, 0x3c, 0xd3, 0x6f, 0xc6, 0x5a, 0x6b, 0x4d, 0xb4, 0xdb, 0xa9, 0xb7, 0xab, 0x46, 0xcf, 0x08, - 0x56, 0x4f, 0xcf, 0xcd, 0xaf, 0xc9, 0x79, 0xf5, 0xd9, 0xe0, 0xa3, 0xb4, 0x7c, 0xcf, 0x87, 0xc8, - 0xbe, 0x0a, 0x4c, 0x76, 0x7a, 0x63, 0xf9, 0x51, 0xbb, 0x28, 0xd8, 0xf2, 0x30, 0xe7, 0xc7, 0x43, - 0x54, 0xfb, 0x6a, 0xae, 0xd0, 0xfe, 0x65, 0x5e, 0x36, 0x82, 0xbf, 0x5a, 0xf8, 0x53, 0x63, 0xbf, - 0x74, 0xee, 0x9e, 0x48, 0xb2, 0x97, 0xf8, 0x50, 0xa2, 0xbb, 0x6a, 0x7d, 0x26, 0xe0, 0x6b, 0x05, - 0xfa, 0x68, 0x91, 0x56, 0x15, 0xf5, 0x52, 0x98, 0x7f, 0x85, 0x2d, 0xd8, 0xaa, 0xeb, 0x8d, 0xac, - 0xcf, 0xc1, 0x52, 0x89, 0x24, 0x8a, 0x22, 0x8f, 0x84, 0x89, 0x49, 0x53, 0x69, 0xba, 0x5e, 0x16, - 0x13, 0x7b, 0x76, 0xed, 0xe2, 0x04, 0xea, 0x9f, 0xfc, 0x12, 0x11, 0x11, 0x7a, 0x1d, 0xeb, 0xe1, - 0x42, 0x18, 0xc5, 0xd8, 0x38, 0x73, 0x3a, 0xcd, 0xc8, 0x3b, 0xdf, 0xcf, 0x3e, 0x38, 0x6c, 0xd5, - 0x7b, 0x6f, 0x8f, 0xaf, 0xa9, 0x6e, 0x52, 0xac, 0xc9, 0x6f, 0xb6, 0xe2, 0x45, 0xbe, 0xfe, 0x3b, - 0x7a, 0x49, 0x25, 0x8d, 0xbc, 0xb9, 0xaf, 0xc9, 0xb0, 0xc4, 0x08, 0x19, 0x9c, 0xcc, 0xb8, 0xeb, - 0xea, 0xea, 0xae, 0xc6, 0xad, 0x27, 0x8d, 0xc9, 0x27, 0xf1, 0xe5, 0x32, 0x6f, 0xd1, 0xd0, 0xd1, - 0x73, 0xe5, 0xda, 0x97, 0x7c, 0x67, 0x54, 0xe8, 0x69, 0x31, 0x9b, 0x26, 0x4d, 0x44, 0xd8, 0x6f, - 0x43, 0x07, 0xe2, 0x0f, 0x37, 0x7f, 0x69, 0x57, 0x13, 0x05, 0x5a, 0x0d, 0xa6, 0xad, 0x8d, 0x93, - 0x73, 0xb6, 0x76, 0x1f, 0xe2, 0x88, 0x58, 0x3b, 0x27, 0x3e, 0x2b, 0xab, 0xe2, 0x21, 0x4d, 0x23, - 0x30, 0xd6, 0x34, 0x8a, 0xc3, 0x58, 0x9b, 0x5e, 0x55, 0x17, 0x7e, 0x26, 0x10, 0x95, 0x57, 0x1f, - 0xab, 0xaa, 0x6b, 0xc4, 0xc2, 0x5a, 0x69, 0x25, 0xaa, 0x58, 0x98, 0xc3, 0x72, 0x84, 0xa4, 0x83, - 0x47, 0xb2, 0x3d, 0xf7, 0xb3, 0x91, 0x44, 0x1c, 0xbe, 0xf6, 0x44, 0x3d, 0xf5, 0xf0, 0xa1, 0xeb, - 0x59, 0xb0, 0xd9, 0x5a, 0x4c, 0xeb, 0xf7, 0x4b, 0x2f, 0x8d, 0xc6, 0xdf, 0x07, 0x9f, 0xaa, 0x44, - 0xd5, 0xe4, 0xd6, 0xed, 0xdf, 0x6c, 0xf4, 0xfc, 0x3f, 0x31, 0x33, 0x96, 0x50, 0xcc, 0x6f, 0xd0, - 0xad, 0x46, 0x78, 0xc7, 0x64, 0x23, 0x1d, 0x93, 0x64, 0xa1, 0xa3, 0x56, 0x20, 0xac, 0x4a, 0x7c, - 0xa1, 0x8d, 0x0b, 0xd1, 0x32, 0x59, 0xef, 0xc2, 0x94, 0x92, 0x77, 0x23, 0x5e, 0xae, 0xa6, 0xf7, - 0xa9, 0x30, 0x85, 0xed, 0x7a, 0xfc, 0x57, 0xf0, 0xe9, 0x16, 0xcd, 0x56, 0xf7, 0x74, 0x86, 0xd7, - 0x4c, 0x7a, 0xca, 0xc5, 0xa8, 0xc9, 0xa3, 0xad, 0xff, 0xc2, 0x84, 0x5b, 0xe4, 0xf3, 0x61, 0x50, - 0x92, 0x35, 0x42, 0x35, 0x7e, 0x54, 0x80, 0x14, 0xc6, 0x0e, 0xa4, 0x27, 0xfd, 0xc8, 0x38, 0x27, - 0x38, 0x75, 0xa6, 0x61, 0xdb, 0x3c, 0x48, 0x50, 0xec, 0xfc, 0x6c, 0xe2, 0xb6, 0xa6, 0x16, 0xb2, - 0xf9, 0x31, 0x98, 0x59, 0x62, 0xf0, 0xc8, 0x1f, 0x11, 0x1a, 0x43, 0xc1, 0xf6, 0x51, 0x1d, 0x0b, - 0x3b, 0x6f, 0x14, 0xd2, 0xf5, 0x11, 0x05, 0x8d, 0x80, 0xa3, 0x49, 0x66, 0x7f, 0xbe, 0xf2, 0x6a, - 0x78, 0x80, 0x88, 0xce, 0xd3, 0x36, 0x5a, 0xd3, 0x99, 0x72, 0x28, 0xfd, 0xc4, 0x7e, 0x86, 0x1a, - 0x56, 0x87, 0x39, 0x9f, 0xd8, 0xf6, 0x0f, 0x7a, 0xc4, 0x1e, 0x14, 0x2e, 0xcc, 0x35, 0xaf, 0x6f, - 0xeb, 0x4b, 0xd0, 0xa7, 0x27, 0x00, 0x38, 0xbe, 0xcc, 0xb6, 0x28, 0xeb, 0x42, 0x5a, 0x02, 0xa9, - 0x43, 0xa8, 0x95, 0x78, 0x5a, 0x42, 0xcd, 0x70, 0x2f, 0x9e, 0xf7, 0x78, 0x44, 0x06, 0x19, 0x1c, - 0x3c, 0x1e, 0xab, 0x30, 0xd7, 0xc3, 0xe5, 0xcb, 0x89, 0x26, 0xed, 0x47, 0xaf, 0x76, 0xeb, 0xa6, - 0x6d, 0xff, 0x04, 0x34, 0xdb, 0x4d, 0xb8, 0x3e, 0x0a, 0x34, 0x9f, 0x88, 0x61, 0x63, 0xe3, 0x0c, - 0xf2, 0x7a, 0x4d, 0xe9, 0xbb, 0x07, 0x43, 0x37, 0x1f, 0xb2, 0xbe, 0x3f, 0xc2, 0x87, 0xf2, 0x6d, - 0xe5, 0xcc, 0x76, 0xd4, 0xf6, 0xdb, 0x63, 0xe1, 0x43, 0x24, 0x97, 0x66, 0x76, 0x37, 0x68, 0xfe, - 0x13, 0x65, 0xaa, 0xae, 0x5e, 0xf8, 0x42, 0x5d, 0x8b, 0x74, 0x9f, 0xd6, 0x97, 0x84, 0xbc, 0xfb, - 0x76, 0x4d, 0x78, 0x50, 0xe5, 0xc3, 0xb1, 0xd2, 0x26, 0xa7, 0xac, 0x9c, 0xda, 0xd6, 0xa6, 0xca, - 0x4a, 0xbc, 0x71, 0xab, 0x56, 0xfb, 0x6d, 0xe3, 0xad, 0xde, 0x0b, 0x0b, 0x7b, 0x53, 0xea, 0x1d, - 0x76, 0xca, 0xce, 0xff, 0x04, 0x64, 0x73, 0xcb, 0xa7, 0x5e, 0x36, 0x9c, 0x71, 0x6b, 0xda, 0x69, - 0xb7, 0x10, 0xf5, 0x86, 0xb1, 0x56, 0xa9, 0xd6, 0x7d, 0x3e, 0xff, 0x82, 0x89, 0x9f, 0x5b, 0x6d, - 0x3d, 0xfe, 0x11, 0x2d, 0x58, 0xda, 0x36, 0x27, 0x49, 0x5a, 0xfc, 0x14, 0x5d, 0xbb, 0xb4, 0x6d, - 0x6a, 0x39, 0x7c, 0x29, 0x79, 0xdb, 0x48, 0xcd, 0xe2, 0x73, 0xe5, 0x6d, 0x1f, 0x6d, 0xc4, 0xcb, - 0xc1, 0x51, 0x34, 0x9a, 0xed, 0xb5, 0x1a, 0xa9, 0xee, 0x2f, 0x82, 0x8e, 0xd1, 0x99, 0x84, 0xde, - 0x7c, 0x73, 0xe5, 0x29, 0xd8, 0xff, 0x0c, 0x4b, 0xb7, 0x36, 0x6d, 0x34, 0xad, 0xb6, 0x5d, 0x6e, - 0xff, 0x82, 0xb2, 0x2d, 0xc9, 0x8b, 0xb7, 0x68, 0x9e, 0xed, 0xf0, 0xff, 0x1b, 0xbd, 0x5c, 0x86, - 0xc5, 0x06, 0x3e, 0x83, 0xbc, 0xb8, 0xbe, 0xf2, 0xbf, 0xe3, 0x2d, 0x66, 0x83, 0x1a, 0x1c, 0x95, - 0x24, 0x8c, 0x15, 0x86, 0x3e, 0x0d, 0x7d, 0xc7, 0x31, 0x07, 0xe1, 0x4a, 0x1b, 0x92, 0xb5, 0x2f, - 0xc2, 0xe5, 0x26, 0xfb, 0xda, 0x58, 0xe2, 0xf2, 0xf8, 0x2c, 0xb5, 0x5c, 0xba, 0x96, 0x96, 0x36, - 0xae, 0xed, 0xf1, 0xb7, 0x64, 0xfb, 0xae, 0x95, 0x4d, 0x84, 0xf0, 0xa1, 0x27, 0x65, 0xe5, 0xf4, - 0xff, 0xc2, 0x85, 0x4f, 0x6f, 0x6d, 0xbb, 0x43, 0xcb, 0x2d, 0x36, 0xd2, 0xb7, 0xc7, 0x89, 0x4d, - 0x3f, 0x54, 0xe5, 0xff, 0x8a, 0x1c, 0xdb, 0x53, 0x62, 0xc8, 0xb8, 0xa7, 0xe1, 0x42, 0xf4, 0xdb, - 0xd9, 0xb3, 0x24, 0x55, 0xb1, 0x75, 0x5d, 0x7d, 0xf0, 0x5d, 0x17, 0x4f, 0x36, 0x6e, 0xed, 0xf1, - 0x9c, 0x64, 0xd1, 0xde, 0x96, 0x4a, 0xa5, 0x4a, 0x96, 0x55, 0x09, 0x31, 0x6c, 0x4c, 0x15, 0x96, - 0xa8, 0x90, 0xca, 0x56, 0x32, 0xb5, 0x86, 0xf9, 0xad, 0xbc, 0x77, 0x9f, 0x0b, 0x91, 0x25, 0x8c, - 0x5a, 0x67, 0x6d, 0x42, 0x8d, 0x62, 0xf2, 0xfb, 0xb2, 0x9e, 0x1e, 0x14, 0xf4, 0x33, 0xd8, 0xe7, - 0xa9, 0xe3, 0x0e, 0x29, 0xd4, 0x73, 0xe9, 0x49, 0x49, 0x80, 0x7d, 0x6b, 0x04, 0xb8, 0x4e, 0xb2, - 0xdf, 0x85, 0x0c, 0xf8, 0x50, 0x9d, 0x27, 0xaa, 0xdb, 0x96, 0x5b, 0x73, 0x4b, 0x60, 0x1a, 0x3e, - 0xcb, 0x3c, 0xc7, 0x11, 0x04, 0x65, 0x56, 0x54, 0x39, 0x5a, 0x69, 0xfc, 0x3e, 0x0a, 0xc5, 0xba, - 0x5b, 0x54, 0x26, 0xab, 0x22, 0x4c, 0x3e, 0x24, 0x85, 0x50, 0xc5, 0x74, 0x93, 0xaf, 0xe1, 0x09, - 0x3e, 0x87, 0xa9, 0x94, 0x46, 0x9e, 0xb8, 0x88, 0x27, 0x36, 0xa6, 0xe8, 0xa9, 0xa5, 0x83, 0x89, - 0x85, 0x2a, 0x4f, 0x30, 0x19, 0xc2, 0xc5, 0x75, 0xcb, 0x75, 0x80, 0xec, 0x1f, 0xc1, 0xec, 0x2e, - 0xbc, 0xbe, 0x09, 0x34, 0xa4, 0xde, 0xf9, 0x67, 0x63, 0x46, 0x5c, 0xf0, 0xf5, 0x53, 0xa7, 0x8b, - 0x4f, 0x4d, 0xb1, 0x7b, 0x53, 0xce, 0xc2, 0xfd, 0x10, 0xfb, 0xe2, 0x23, 0x7b, 0xc2, 0x08, 0xd5, - 0xcf, 0x50, 0x75, 0xab, 0x64, 0xf5, 0x2c, 0x21, 0xad, 0x02, 0x5f, 0xb4, 0xc9, 0x7b, 0xc9, 0xd1, - 0x08, 0x7c, 0x0d, 0x73, 0x29, 0x6d, 0xb5, 0xa6, 0x8f, 0xc6, 0x97, 0x3b, 0x7a, 0x19, 0x77, 0x51, - 0x5d, 0x83, 0x6a, 0xcf, 0x65, 0x5b, 0x3e, 0x3f, 0x83, 0xb5, 0x78, 0x81, 0x23, 0x4c, 0x03, 0x1e, - 0xba, 0xb2, 0xa2, 0x16, 0x97, 0x80, 0x92, 0xab, 0xbd, 0x3d, 0x05, 0x95, 0xd4, 0x03, 0x7f, 0xc1, - 0xb0, 0x46, 0x02, 0x94, 0x5a, 0xac, 0x34, 0x6a, 0x48, 0x5b, 0xdc, 0xc6, 0x05, 0x1c, 0x94, 0xa8, - 0xf2, 0xfb, 0xff, 0xc1, 0x59, 0x38, 0xdc, 0xed, 0x03, 0x7d, 0x12, 0xa4, 0xc8, 0xb4, 0x58, 0x51, - 0x5e, 0xac, 0x2f, 0xf7, 0xb9, 0xf0, 0x85, 0x4d, 0x20, 0x89, 0x1a, 0x71, 0x83, 0xfc, 0x05, 0xae, - 0x91, 0x42, 0x01, 0xa1, 0x3b, 0x61, 0xf8, 0x35, 0x7f, 0xf0, 0xa1, 0x64, 0x4e, 0x0e, 0x82, 0xbd, - 0x11, 0x27, 0x46, 0x92, 0xcd, 0x19, 0x74, 0xd9, 0x06, 0x0c, 0x2d, 0xa3, 0x44, 0x06, 0xf2, 0xb0, - 0xba, 0xf8, 0xd1, 0x36, 0x64, 0x59, 0x72, 0xfb, 0xb7, 0x7e, 0xd5, 0x26, 0xa6, 0x0f, 0xf1, 0x5d, - 0xfc, 0x15, 0x0a, 0x3b, 0x15, 0x73, 0x91, 0xbe, 0x0c, 0x8b, 0x2b, 0x9f, 0x94, 0x82, 0xc1, 0xbf, - 0xb7, 0x13, 0x0a, 0x6e, 0x37, 0xd1, 0xd8, 0xd8, 0xcc, 0xd3, 0x27, 0xa8, 0xa8, 0x7a, 0x63, 0x54, - 0xcf, 0x55, 0xc3, 0xe0, 0x9b, 0x7b, 0x49, 0x34, 0xa8, 0x92, 0x87, 0x82, 0x43, 0xec, 0x8b, 0x09, - 0x7c, 0x4d, 0x21, 0xac, 0xf1, 0x71, 0xe5, 0xf0, 0x45, 0x9e, 0x49, 0x5e, 0xbe, 0xbd, 0xf0, 0x56, - 0x46, 0x9a, 0xeb, 0x6e, 0x32, 0x63, 0x39, 0x3b, 0xf1, 0xf9, 0xff, 0xb6, 0xad, 0xc9, 0xbf, 0x08, - 0x50, 0xe8, 0xd6, 0xd2, 0xd5, 0xf7, 0xf0, 0x54, 0x76, 0xdf, 0xde, 0xd5, 0x3c, 0xf8, 0x7c, 0x97, - 0x5b, 0xe1, 0xab, 0x5b, 0x66, 0x8c, 0x28, 0xef, 0x4e, 0xdf, 0xf8, 0x2a, 0x9d, 0x9b, 0x9b, 0x1c, - 0xb3, 0x74, 0x7b, 0x4d, 0xdb, 0xe0, 0x82, 0xd2, 0x6d, 0x22, 0x48, 0x9a, 0x4d, 0x8a, 0xb2, 0x46, - 0x48, 0x25, 0x56, 0xdb, 0x5f, 0xf0, 0x4d, 0x33, 0x1a, 0x37, 0x73, 0x1c, 0x6c, 0x7d, 0xf0, 0x59, - 0x4e, 0xda, 0x22, 0xeb, 0x6c, 0x94, 0xf0, 0x83, 0xed, 0xf0, 0x59, 0x4d, 0xa6, 0x69, 0xb4, 0xdb, - 0xda, 0xd2, 0x6f, 0x82, 0x1f, 0x4c, 0x6b, 0x5e, 0xf8, 0x7a, 0xf9, 0xe4, 0x89, 0xb7, 0xe6, 0xc9, - 0xee, 0x98, 0x23, 0x2a, 0x4e, 0xfc, 0xff, 0x1c, 0x4c, 0xd4, 0xab, 0x3a, 0xd2, 0x54, 0xb4, 0x97, - 0x10, 0x56, 0x5c, 0xd7, 0x9a, 0xcd, 0x7e, 0x14, 0x25, 0x58, 0xe6, 0x84, 0x57, 0xaa, 0x1a, 0x99, - 0x8e, 0x50, 0xe0, 0xf8, 0x53, 0x59, 0x99, 0xd2, 0xe9, 0x4c, 0x91, 0xbd, 0x36, 0x98, 0xe7, 0x18, - 0x78, 0x53, 0x64, 0x33, 0x7b, 0x8a, 0xd8, 0xbe, 0x68, 0x53, 0xa4, 0x46, 0x29, 0xe7, 0x1e, 0x14, - 0xe6, 0xfe, 0xa4, 0xee, 0xc1, 0xcb, 0x84, 0x95, 0xae, 0xac, 0x92, 0xb0, 0xf0, 0x41, 0x8a, 0x62, - 0xe4, 0xc5, 0x68, 0xba, 0xd8, 0x9f, 0xaf, 0x5f, 0x77, 0x97, 0xf8, 0x25, 0x85, 0xb8, 0x93, 0xbd, - 0xd8, 0x93, 0x5e, 0x17, 0xc3, 0xfa, 0x19, 0xf8, 0xbf, 0xc9, 0x86, 0x49, 0x2f, 0xf6, 0x99, 0xff, - 0xfe, 0x10, 0x3e, 0xcd, 0x56, 0x4f, 0xad, 0x7c, 0x15, 0x19, 0xb6, 0xed, 0x19, 0x89, 0x9c, 0xde, - 0x48, 0x62, 0x1e, 0x0a, 0x64, 0xfe, 0x95, 0x2b, 0x4b, 0x3c, 0xbe, 0x12, 0xab, 0x55, 0x49, 0x5d, - 0x7c, 0x16, 0x15, 0xe0, 0xa5, 0x50, 0xd3, 0x5c, 0xea, 0x09, 0xe8, 0x92, 0x3f, 0x08, 0x49, 0xd4, - 0x16, 0x2e, 0xb4, 0xcb, 0xd1, 0x98, 0xd2, 0xcd, 0x07, 0xf0, 0xc8, 0x3b, 0x57, 0x63, 0x13, 0x0a, - 0x4f, 0x06, 0x67, 0xae, 0xf7, 0x95, 0x1d, 0x01, 0x99, 0x5e, 0x99, 0xf1, 0xa5, 0xac, 0x7b, 0x95, - 0xa4, 0xf7, 0xc2, 0x86, 0x4a, 0x76, 0x2d, 0x9c, 0xbf, 0x6c, 0xae, 0xd1, 0xb7, 0x65, 0x36, 0xfb, - 0x24, 0x61, 0x1a, 0x33, 0x9f, 0x7c, 0x16, 0x92, 0x98, 0xe9, 0x55, 0x5f, 0x1b, 0x34, 0xae, 0x18, - 0x9b, 0xef, 0x2f, 0x8d, 0xf0, 0x81, 0xff, 0xd1, 0x42, 0x42, 0x33, 0xa1, 0xbb, 0x6b, 0x3f, 0x0e, - 0x94, 0x83, 0x62, 0x33, 0x2c, 0xb2, 0x98, 0xfd, 0x73, 0x52, 0xa6, 0xb4, 0xca, 0xad, 0x12, 0x9e, - 0x5d, 0x6b, 0xc6, 0x14, 0x63, 0x2f, 0x67, 0x55, 0xdf, 0xdc, 0x99, 0x32, 0x46, 0x38, 0x6f, 0xb3, - 0x57, 0x89, 0x08, 0x16, 0xef, 0x2b, 0x1d, 0xa0, 0xe2, 0xc7, 0x39, 0x96, 0x97, 0x8c, 0x35, 0x25, - 0x0c, 0x02, 0x89, 0xb3, 0x51, 0x08, 0xfc, 0xf6, 0xab, 0xcb, 0xa9, 0xac, 0x9f, 0x51, 0x55, 0x28, - 0x82, 0x0c, 0x30, 0xde, 0x1f, 0x8c, 0xa8, 0xec, 0xca, 0x74, 0x2c, 0x41, 0xf5, 0xd7, 0x9c, 0x8c, - 0xc8, 0x69, 0x38, 0xc6, 0xc0, 0x90, 0x51, 0x56, 0x30, 0x8d, 0x47, 0x75, 0x24, 0xab, 0xd3, 0x5b, - 0x7e, 0x36, 0x2d, 0x88, 0x94, 0x8a, 0x10, 0x93, 0x2f, 0x9a, 0x1a, 0x50, 0xd9, 0x98, 0x0c, 0x94, - 0xed, 0xf9, 0x9d, 0x37, 0x73, 0xa9, 0xb5, 0xe6, 0x37, 0x3d, 0x48, 0xd9, 0x7a, 0x8b, 0x93, 0x72, - 0xa9, 0x17, 0xc1, 0xd7, 0x0e, 0x68, 0xf8, 0xc3, 0xa6, 0x9e, 0x33, 0x9f, 0x4a, 0xe4, 0xd1, 0x79, - 0xf1, 0x58, 0xcf, 0x82, 0x9c, 0xf5, 0xcf, 0x36, 0xd2, 0xd3, 0x26, 0x5a, 0x55, 0xe3, 0xea, 0x86, - 0x93, 0xa5, 0xb5, 0xdb, 0x5f, 0x1e, 0x46, 0xab, 0x1b, 0x55, 0x6c, 0x81, 0x13, 0xb2, 0x69, 0xde, - 0x40, 0x82, 0xde, 0x36, 0x10, 0x0d, 0xa3, 0x07, 0xc6, 0xcd, 0x94, 0xe4, 0x5d, 0xdd, 0xb6, 0x95, - 0xe9, 0xb6, 0x69, 0xf6, 0x5c, 0xad, 0xe6, 0x99, 0x7d, 0xc9, 0x28, 0x7a, 0xa3, 0xa8, 0x6c, 0xcd, - 0xbb, 0xf1, 0x22, 0x01, 0x7c, 0xcb, 0xe6, 0x44, 0xe1, 0x8e, 0xbb, 0xae, 0xb6, 0x8e, 0xad, 0xb2, - 0x97, 0xe2, 0x44, 0x0d, 0xce, 0xc7, 0x03, 0xad, 0xf8, 0x3b, 0x1a, 0xcc, 0x47, 0x62, 0x53, 0x29, - 0x32, 0x6e, 0xa8, 0xa3, 0x26, 0x8c, 0x2f, 0xf8, 0x91, 0x01, 0x49, 0x77, 0x46, 0xd3, 0xa2, 0x67, - 0xb0, 0x3b, 0x5a, 0xf9, 0xe9, 0xb5, 0x1b, 0x54, 0x32, 0xfd, 0x32, 0x28, 0xf8, 0x52, 0xed, 0xc9, - 0xd5, 0xec, 0xf8, 0xca, 0xe9, 0x5a, 0xe9, 0x9b, 0x37, 0xf8, 0xd9, 0xab, 0x06, 0xdb, 0x44, 0xa2, - 0x51, 0xb3, 0x7d, 0x0e, 0xac, 0x65, 0xc2, 0xa4, 0xda, 0xd7, 0xfe, 0xf6, 0xcf, 0x58, 0xfc, 0x6f, - 0x66, 0x93, 0x67, 0xd6, 0x52, 0x0d, 0x18, 0x52, 0x29, 0x17, 0x2d, 0x96, 0xf4, 0xae, 0x7d, 0x6f, - 0xff, 0x1a, 0x42, 0xf0, 0x41, 0x55, 0x63, 0x2f, 0x8c, 0x95, 0x55, 0xaf, 0x8a, 0x51, 0x4c, 0xf0, - 0xcb, 0x7f, 0xba, 0x8f, 0x02, 0x70, 0x14, 0x8c, 0xb0, 0x63, 0xb7, 0x72, 0x41, 0x3e, 0xad, 0x62, - 0xf5, 0xf0, 0xa1, 0xea, 0x26, 0x9d, 0x17, 0x14, 0xb5, 0x0c, 0xf5, 0x3e, 0x8b, 0x52, 0x1a, 0x56, - 0x55, 0xce, 0x3c, 0x3e, 0x55, 0x89, 0x93, 0x2d, 0x27, 0x7b, 0x65, 0x84, 0x7a, 0xbc, 0xff, 0xfe, - 0x14, 0xa5, 0x6a, 0x49, 0x2d, 0x3b, 0x64, 0x84, 0x6c, 0x65, 0xd2, 0x4a, 0x8d, 0x9f, 0x1b, 0x63, - 0x3f, 0xa5, 0x6d, 0xa6, 0x36, 0xcc, 0xc3, 0x74, 0xb4, 0x93, 0xd1, 0x5b, 0xb4, 0x6c, 0xbf, 0xf0, - 0x4c, 0x21, 0xb8, 0xe1, 0xb3, 0xae, 0x77, 0xdc, 0xf8, 0xd2, 0x8c, 0x08, 0x0b, 0x18, 0x61, 0x8b, - 0xa0, 0xa2, 0xa8, 0x38, 0x52, 0xa5, 0x68, 0x72, 0x1d, 0x97, 0x8a, 0x36, 0xa3, 0x59, 0x7f, 0x1d, - 0xd7, 0xf0, 0x5c, 0x79, 0x70, 0xec, 0x57, 0x75, 0xa6, 0x5e, 0x08, 0x66, 0xd3, 0x6f, 0x3f, 0xc2, - 0x94, 0x88, 0xd4, 0x3e, 0x9d, 0x5b, 0x72, 0xb2, 0xe6, 0x8f, 0xdc, 0xa5, 0x47, 0xc0, 0xaf, 0xe3, - 0xf1, 0xbb, 0x88, 0x7b, 0xdc, 0xda, 0x34, 0x32, 0x3d, 0xf0, 0x64, 0xe6, 0x7c, 0x2a, 0x4b, 0xda, - 0x4d, 0xfb, 0x67, 0x02, 0xa2, 0x78, 0xed, 0xff, 0x82, 0xeb, 0x1c, 0xda, 0xb5, 0xce, 0xa9, 0xf6, - 0xc9, 0x3d, 0x7c, 0x71, 0x53, 0xae, 0xa9, 0x6b, 0x5f, 0x04, 0x14, 0x92, 0xbd, 0x51, 0x1e, 0x18, - 0xda, 0xea, 0x9c, 0x55, 0xff, 0xc2, 0x3d, 0x8c, 0x66, 0xc4, 0x9c, 0x8d, 0xe8, 0xea, 0x4b, 0xe1, - 0xdb, 0x35, 0x51, 0x6e, 0xc6, 0x5a, 0xd9, 0xdc, 0x69, 0x6d, 0x55, 0xbd, 0x6f, 0xfc, 0x13, 0x10, - 0x91, 0x63, 0x14, 0xe9, 0x97, 0x73, 0xcb, 0x37, 0xc6, 0xc7, 0x3f, 0x4e, 0x11, 0xa4, 0x66, 0x8d, - 0xac, 0xbd, 0x85, 0xde, 0xf5, 0x3d, 0x4b, 0xa5, 0xdf, 0xfc, 0x14, 0x9f, 0xcd, 0x9b, 0x4d, 0x68, - 0x8f, 0x9c, 0xbf, 0x0a, 0x08, 0x41, 0xc9, 0x13, 0x60, 0x5f, 0x49, 0x77, 0x96, 0x78, 0x99, 0xda, - 0xd5, 0x59, 0x28, 0x41, 0x53, 0x14, 0xe0, 0xa7, 0xc2, 0x92, 0xee, 0x0c, 0x8a, 0x26, 0x6d, 0x2d, - 0x8d, 0x53, 0xcb, 0x8a, 0x75, 0x8f, 0x0a, 0x5e, 0xd8, 0xdd, 0xd3, 0x7d, 0x90, 0x1e, 0xaf, 0xa4, - 0x31, 0x8c, 0xc2, 0x26, 0xc7, 0x3e, 0x0b, 0x2b, 0x2e, 0xa2, 0x43, 0x43, 0x64, 0xa3, 0xb4, 0xa5, - 0xcc, 0xbe, 0x0a, 0xa9, 0xb1, 0x9f, 0x2e, 0xae, 0xd5, 0x37, 0x7f, 0x82, 0x91, 0x3b, 0x69, 0xaa, - 0x75, 0x6e, 0xda, 0xec, 0xf8, 0x2c, 0x31, 0xfa, 0xbb, 0x8b, 0xf7, 0x4b, 0x3c, 0xe3, 0xe1, 0x4c, - 0x8b, 0x92, 0x13, 0x83, 0xb6, 0xed, 0x5d, 0xe3, 0x54, 0x95, 0xbe, 0x09, 0x88, 0xe9, 0x52, 0xb6, - 0x9a, 0xc1, 0xe2, 0x02, 0x16, 0xa9, 0x97, 0xad, 0x1a, 0x89, 0xb1, 0x75, 0x43, 0xc4, 0xc5, 0x0b, - 0x69, 0xa5, 0xbd, 0xaf, 0x8a, 0xa6, 0x3e, 0x90, 0x6d, 0x7c, 0x13, 0xcd, 0xbf, 0x18, 0x21, 0xec, - 0xa8, 0xf5, 0x7b, 0x63, 0xb5, 0x3c, 0x37, 0x6a, 0x5d, 0x26, 0x62, 0x61, 0x4b, 0x97, 0x36, 0x63, - 0x33, 0x73, 0xf6, 0xfd, 0xee, 0x4c, 0x45, 0xe6, 0x26, 0x33, 0x13, 0x29, 0xa8, 0xf3, 0x2e, 0xab, - 0xaa, 0xd5, 0x9c, 0x68, 0x43, 0xf8, 0xe9, 0x9a, 0xe6, 0xee, 0x90, 0x9a, 0x23, 0x90, 0x5e, 0x41, - 0x66, 0xff, 0xc1, 0x4e, 0xc6, 0x57, 0x70, 0x63, 0x6f, 0xfe, 0xdc, 0x9b, 0x07, 0xc6, 0x6e, 0x92, - 0x8e, 0xa9, 0xb6, 0x3b, 0x7f, 0x5b, 0x1a, 0x5b, 0x4d, 0x1c, 0x30, 0x18, 0x56, 0x36, 0x63, 0xc2, - 0x34, 0xc6, 0x74, 0x05, 0xaf, 0x0c, 0xf6, 0xd2, 0xc4, 0x3d, 0x5e, 0x52, 0x9d, 0x48, 0x9f, 0x0a, - 0x72, 0xe3, 0x31, 0x4f, 0x36, 0x79, 0xe5, 0x74, 0x7e, 0x45, 0xc7, 0x68, 0xd3, 0x1e, 0x17, 0xaf, - 0x7c, 0x6f, 0x8b, 0x63, 0x2c, 0x8c, 0xd2, 0x3c, 0xaf, 0x96, 0xef, 0x49, 0x7b, 0x2a, 0x67, 0x34, - 0xbb, 0xcb, 0xf2, 0x6a, 0x71, 0xf8, 0xda, 0xe3, 0x73, 0x3a, 0xab, 0xa1, 0xe7, 0x58, 0xac, 0x53, - 0xc5, 0x1c, 0x8a, 0xdf, 0xb4, 0x6a, 0xf5, 0x62, 0x95, 0x44, 0x9c, 0xf3, 0xff, 0x0a, 0x15, 0xd2, - 0x95, 0xeb, 0x3e, 0x86, 0x5c, 0xcc, 0xcd, 0xa4, 0xd9, 0xf0, 0xa7, 0xa6, 0x30, 0xad, 0x27, 0xa6, - 0x86, 0xf6, 0x09, 0xe2, 0x45, 0x34, 0x35, 0xf0, 0xa5, 0xb4, 0xdb, 0x6a, 0xc6, 0x3f, 0x53, 0xda, - 0x35, 0x54, 0x5d, 0xcc, 0x51, 0xf2, 0xf8, 0x47, 0x6d, 0xdf, 0x72, 0x41, 0x27, 0xaf, 0xe3, 0x44, - 0x52, 0xb1, 0xa5, 0x4c, 0xb2, 0x5d, 0x54, 0xad, 0x91, 0x0c, 0x1c, 0xac, 0xaa, 0x38, 0x64, 0x79, - 0x25, 0x9e, 0x3f, 0xfd, 0x95, 0x31, 0xc5, 0x9a, 0xbc, 0x28, 0x47, 0x41, 0xb4, 0xe3, 0x79, 0xaa, - 0xad, 0xac, 0xf4, 0x32, 0xed, 0x4a, 0xcf, 0xeb, 0xae, 0x93, 0xe1, 0x11, 0x76, 0x9f, 0x3e, 0xaf, - 0x91, 0x86, 0xff, 0x19, 0xd8, 0xce, 0xd5, 0xb7, 0x31, 0x57, 0xc4, 0xa9, 0x7c, 0x31, 0x2e, 0x97, - 0x5f, 0xcb, 0xad, 0x18, 0x14, 0xd3, 0x6d, 0xbf, 0xf0, 0x4f, 0xa9, 0x59, 0xad, 0x0e, 0x86, 0x4d, - 0x15, 0xac, 0x78, 0x26, 0x10, 0xf6, 0xd2, 0x7b, 0x38, 0xd2, 0xc1, 0xe4, 0x65, 0xdc, 0x48, 0x91, - 0x90, 0x03, 0x05, 0x1a, 0xcb, 0x4f, 0xef, 0xc0, 0xf0, 0x17, 0xda, 0x5a, 0xf8, 0xa6, 0x3c, 0xf0, - 0x71, 0x77, 0x2c, 0x6e, 0x3a, 0x57, 0x51, 0x6c, 0xb6, 0x7a, 0xf4, 0xca, 0x0a, 0x72, 0x79, 0xe8, - 0x00, 0xa6, 0x16, 0xcb, 0x17, 0x83, 0xab, 0xf8, 0xcf, 0xa1, 0x9d, 0x4e, 0x94, 0xdf, 0xb1, 0x91, - 0x4a, 0xe4, 0xda, 0xfa, 0x5e, 0x34, 0xa8, 0x76, 0x4f, 0x63, 0x43, 0x4f, 0x35, 0x46, 0x3e, 0xd2, - 0x7b, 0xc1, 0xcc, 0x6c, 0xbb, 0xfe, 0x14, 0xd7, 0x33, 0x28, 0x66, 0x62, 0x62, 0x3b, 0x29, 0x55, - 0xdd, 0x84, 0x89, 0xa3, 0xf5, 0xf1, 0x72, 0xf8, 0xda, 0xa7, 0xbc, 0x8c, 0x27, 0x06, 0x46, 0x1e, - 0xd8, 0x69, 0xfc, 0xb5, 0x15, 0x23, 0xb2, 0x99, 0x56, 0xb6, 0x76, 0x4c, 0x7d, 0xec, 0x4b, 0x0b, - 0xf8, 0x64, 0x8f, 0x5d, 0x0a, 0x89, 0xec, 0x7d, 0x56, 0xbe, 0x3e, 0x9b, 0xd2, 0xcc, 0xa5, 0xaf, - 0xf7, 0xc9, 0xa9, 0x78, 0xe1, 0x23, 0xd5, 0x56, 0xf6, 0xc7, 0x66, 0x92, 0x1b, 0x1a, 0x49, 0x91, - 0xbe, 0x14, 0xb2, 0x44, 0x89, 0x92, 0x19, 0xf1, 0x12, 0x3a, 0x96, 0x33, 0xfc, 0xf3, 0x6b, 0x28, - 0xf2, 0xa7, 0xc2, 0x97, 0xe4, 0xc1, 0x9d, 0xbc, 0x43, 0xb8, 0xb7, 0x2b, 0x01, 0xba, 0xb2, 0x9b, - 0xed, 0x68, 0xff, 0x70, 0xf8, 0x52, 0x33, 0x55, 0x6c, 0x6a, 0xdc, 0x37, 0xd1, 0xa1, 0xb6, 0x34, - 0xbb, 0x6d, 0xd3, 0xef, 0x85, 0x21, 0xfa, 0xe5, 0x35, 0x96, 0x59, 0x32, 0xe0, 0xca, 0xec, 0xaa, - 0xb5, 0x6f, 0x66, 0x2d, 0xc3, 0xd5, 0x46, 0x31, 0x7b, 0xbe, 0x14, 0xf9, 0x98, 0xba, 0x6c, 0x98, - 0xe8, 0xe8, 0xd8, 0xca, 0xcc, 0xd6, 0xca, 0xbe, 0x11, 0x9b, 0x2e, 0x91, 0xa1, 0xd1, 0x4c, 0xd6, - 0x3f, 0xc1, 0x61, 0x27, 0x71, 0xfb, 0x9e, 0xe8, 0x6c, 0x9b, 0x1c, 0xb7, 0xbe, 0x0b, 0x6c, 0x6d, - 0x24, 0xc6, 0x89, 0xf1, 0x8b, 0x39, 0x7c, 0x15, 0x96, 0xa3, 0x40, 0xac, 0x2e, 0xad, 0x6c, 0xdb, - 0xa1, 0xa6, 0x86, 0xf1, 0x7c, 0x29, 0x4d, 0xb4, 0xdb, 0x1e, 0xea, 0x99, 0x58, 0x6a, 0x6f, 0xec, - 0xc7, 0x2e, 0x29, 0xa9, 0xfe, 0x32, 0x86, 0xc9, 0xcb, 0x05, 0x49, 0xf0, 0x91, 0xfe, 0xbe, 0xaa, - 0xba, 0xd6, 0xab, 0x59, 0xf0, 0xcd, 0x63, 0x6f, 0xd6, 0xdb, 0x4d, 0x3f, 0xf2, 0x08, 0xb1, 0xd7, - 0xdf, 0x4c, 0x9f, 0xc1, 0x46, 0xab, 0xb1, 0xbf, 0xbe, 0x14, 0x9f, 0x5d, 0x88, 0x72, 0x7f, 0x17, - 0xa9, 0xd8, 0xf5, 0x3f, 0x84, 0xf8, 0x76, 0xdd, 0xcb, 0xf2, 0xb2, 0x4e, 0xfe, 0xfe, 0x14, 0xd5, - 0x7f, 0xc2, 0x75, 0xc9, 0x3a, 0x73, 0x62, 0xf9, 0x05, 0xd5, 0xfc, 0x40, 0x21, 0x11, 0xaa, 0x77, - 0x78, 0x90, 0x85, 0x73, 0x45, 0x26, 0x42, 0xdd, 0xaa, 0x7e, 0x1e, 0xd2, 0x4e, 0x4c, 0x2f, 0x6c, - 0x5d, 0xcb, 0x11, 0x95, 0x56, 0xae, 0x9b, 0xaf, 0xfe, 0x11, 0xcd, 0xf2, 0x75, 0x93, 0x65, 0xeb, - 0xe0, 0xac, 0xb4, 0xd5, 0x35, 0xaf, 0x35, 0x3d, 0xf0, 0x58, 0x6d, 0xda, 0xa6, 0xbc, 0xf2, 0xbb, - 0x88, 0x85, 0x29, 0xaa, 0x7b, 0x2a, 0xa1, 0xaa, 0x46, 0x7b, 0x69, 0xe3, 0x58, 0x4a, 0x7c, 0x21, - 0x7b, 0x42, 0xb9, 0x52, 0x4f, 0x5a, 0x58, 0x98, 0x2e, 0xd1, 0x9a, 0x90, 0x66, 0xa6, 0xa0, 0x1b, - 0x3e, 0x14, 0xbd, 0x74, 0x91, 0xcb, 0xb4, 0x45, 0x77, 0x54, 0x8c, 0x0d, 0x1b, 0x3b, 0xe3, 0xac, - 0x68, 0x57, 0x3f, 0x60, 0x9a, 0x05, 0xcb, 0x64, 0x77, 0xd3, 0xe0, 0xa7, 0x2c, 0x83, 0x2a, 0xa2, - 0x52, 0x64, 0xae, 0x38, 0xc3, 0x6d, 0x54, 0x0f, 0xe2, 0x2e, 0x4e, 0x37, 0xc2, 0x34, 0x4c, 0xe6, - 0x86, 0xe6, 0xec, 0x65, 0x78, 0xcb, 0x57, 0x5f, 0x05, 0x55, 0xea, 0xb7, 0x5e, 0x22, 0xdd, 0x6e, - 0xd4, 0x99, 0x46, 0xff, 0x05, 0x53, 0x66, 0xa1, 0x74, 0xf7, 0x78, 0xfc, 0xc1, 0x1b, 0x7b, 0x9f, - 0x9b, 0x0f, 0x85, 0x97, 0xe3, 0xf5, 0x32, 0xf7, 0xa6, 0xd2, 0x22, 0xc6, 0xb6, 0x89, 0x7e, 0x09, - 0xce, 0xc6, 0x2a, 0x3e, 0xdd, 0x27, 0xf8, 0x2a, 0x95, 0x86, 0x44, 0x7f, 0xb9, 0x23, 0x15, 0xf3, - 0xfc, 0x15, 0x91, 0xdb, 0xae, 0x67, 0x94, 0x92, 0x6d, 0x29, 0x71, 0xfb, 0xe3, 0x74, 0x47, 0xca, - 0xf2, 0xae, 0xc9, 0xaa, 0xcd, 0xbf, 0x41, 0xb7, 0x1e, 0xd8, 0x7b, 0x9a, 0x13, 0x39, 0x62, 0x01, - 0x49, 0x95, 0x41, 0xfe, 0x74, 0xe9, 0xbb, 0xb8, 0xcd, 0x20, 0xf8, 0x2c, 0x17, 0x63, 0x48, 0xec, - 0x11, 0x0e, 0xc6, 0xbb, 0xa5, 0xbf, 0xc1, 0x59, 0x1b, 0xe5, 0x96, 0x66, 0xe8, 0x9a, 0x4b, 0x0f, - 0x82, 0x6e, 0xe9, 0xb2, 0x5c, 0x82, 0xf8, 0x42, 0xc7, 0x36, 0x5d, 0xf4, 0xcd, 0xa8, 0x75, 0x78, - 0x48, 0xc9, 0x4d, 0x15, 0x5d, 0xb5, 0xc1, 0x37, 0x0c, 0x6b, 0x59, 0x8e, 0xd5, 0xca, 0xe1, 0x43, - 0xa3, 0xc7, 0x63, 0x3a, 0x56, 0xf9, 0xca, 0x96, 0x9b, 0xbb, 0xfc, 0x10, 0x91, 0x1b, 0x75, 0xab, - 0xb1, 0x7c, 0x24, 0x76, 0x3c, 0xb9, 0xa4, 0xbe, 0x11, 0x29, 0x24, 0x68, 0x87, 0xea, 0x39, 0xa8, - 0x67, 0x6d, 0x15, 0x79, 0x73, 0xe0, 0xb0, 0x96, 0xa9, 0xe8, 0x64, 0x79, 0xdb, 0x07, 0x46, 0x87, - 0x5f, 0x57, 0x3e, 0x0b, 0xb6, 0x32, 0xfb, 0x26, 0xd3, 0xb7, 0xcd, 0xa1, 0x9b, 0xc1, 0xf8, 0x2e, - 0x9b, 0x3d, 0x12, 0x49, 0x45, 0xf8, 0xf8, 0x4e, 0xae, 0x97, 0x3b, 0x1f, 0x17, 0x4e, 0xfa, 0xa2, - 0x6f, 0xcb, 0x4d, 0xbb, 0x7e, 0x69, 0x59, 0x6b, 0xf1, 0x7a, 0x19, 0x18, 0xa3, 0xd2, 0x6f, 0xcb, - 0xcb, 0x1f, 0x8b, 0x22, 0x1a, 0x24, 0x49, 0x26, 0x6d, 0x26, 0x7e, 0x22, 0xd9, 0x5b, 0xda, 0x5f, - 0x85, 0x2d, 0x6d, 0x29, 0x7b, 0x59, 0xdb, 0x99, 0x9a, 0xaa, 0xb5, 0x1c, 0xf8, 0x53, 0x5b, 0xc4, - 0x3e, 0xc8, 0x2a, 0xe2, 0x53, 0x8b, 0xbb, 0xc9, 0xfe, 0x2a, 0xe7, 0xe9, 0x51, 0xdd, 0xcb, 0x9e, - 0x59, 0xf3, 0x53, 0xf8, 0x52, 0x6a, 0x59, 0x2a, 0x74, 0xea, 0xb5, 0x4e, 0x6a, 0xca, 0x0a, 0xe3, - 0xb1, 0xfa, 0x17, 0x22, 0xad, 0x33, 0xfa, 0xe7, 0xf7, 0xf0, 0x55, 0xb6, 0x6a, 0x6d, 0xfb, 0x37, - 0xb6, 0x96, 0x19, 0xf0, 0x4b, 0x6a, 0xa4, 0x93, 0xab, 0xad, 0x7c, 0x10, 0x8b, 0x5d, 0xfb, 0xe1, - 0x21, 0x4a, 0x4d, 0xb4, 0xd2, 0x4a, 0x35, 0xde, 0x0b, 0x25, 0x8c, 0xb6, 0xc8, 0xcc, 0xbc, 0xcc, - 0xbd, 0xfe, 0xff, 0x05, 0x36, 0x72, 0xcc, 0x70, 0xc9, 0x36, 0xf8, 0xf1, 0xbf, 0xd5, 0xfe, 0x13, - 0x12, 0x7c, 0x53, 0xee, 0x4f, 0x5f, 0xa1, 0x09, 0x87, 0xc3, 0xd2, 0xbc, 0xc8, 0x0e, 0xad, 0x5d, - 0x47, 0x40, 0x04, 0x13, 0xdb, 0xa0, 0xcf, 0x73, 0x78, 0x50, 0x7b, 0x9f, 0x18, 0x4f, 0xb4, 0xd2, - 0x26, 0xa7, 0xe2, 0x61, 0x42, 0x68, 0x62, 0x4c, 0x2e, 0x08, 0x58, 0xbe, 0x54, 0xf7, 0x63, 0xc8, - 0x29, 0x8a, 0xa9, 0xd3, 0xa5, 0x18, 0x49, 0x4e, 0xfc, 0x15, 0x94, 0x8c, 0x67, 0xba, 0x4f, 0x65, - 0xdd, 0x50, 0x67, 0x71, 0xe4, 0x76, 0x99, 0xd3, 0xf6, 0xb3, 0xe3, 0x5a, 0xf8, 0xc3, 0xdd, 0x2f, - 0x37, 0x7d, 0xcf, 0xbe, 0x7f, 0xe0, 0xaa, 0xd7, 0x4a, 0xa8, 0x99, 0x25, 0x7d, 0x7c, 0x14, 0x4b, - 0x06, 0xb9, 0xfa, 0x6e, 0x36, 0x50, 0x7c, 0x17, 0x19, 0x84, 0x43, 0x55, 0x7b, 0xbb, 0x3e, 0x36, - 0x37, 0x57, 0xed, 0xac, 0xe6, 0x29, 0x49, 0x76, 0x59, 0xb3, 0xaf, 0xab, 0x2d, 0x9d, 0x2f, 0xf8, - 0x54, 0xa9, 0xed, 0x31, 0xab, 0x5c, 0x67, 0x0d, 0x71, 0xbf, 0xf0, 0x99, 0xa4, 0xdd, 0x8d, 0x35, - 0x43, 0x5c, 0x64, 0xcb, 0x2a, 0x5c, 0x4d, 0x78, 0xd9, 0xca, 0xa3, 0x8f, 0x54, 0x77, 0x71, 0xbb, - 0xb2, 0x98, 0xc7, 0x85, 0x29, 0x55, 0x8e, 0x61, 0x2b, 0xac, 0x77, 0xe9, 0x3e, 0x89, 0x48, 0x8c, - 0xf0, 0xd8, 0x68, 0xe4, 0x8c, 0x3a, 0x06, 0x0e, 0x72, 0x28, 0x3c, 0x39, 0x3d, 0x67, 0xed, 0xe2, - 0x01, 0x5d, 0x37, 0x1c, 0x69, 0x6e, 0x30, 0x2f, 0x32, 0xac, 0xc9, 0xee, 0x0f, 0xf6, 0x6c, 0xed, - 0xa7, 0x3e, 0x09, 0x0f, 0x99, 0xba, 0xf8, 0x2a, 0xca, 0xcc, 0xac, 0xdf, 0x43, 0x4a, 0x5d, 0x8a, - 0x2a, 0xe2, 0xc4, 0x21, 0xbb, 0x96, 0x4d, 0xb1, 0xbb, 0xcf, 0x82, 0xca, 0x52, 0xca, 0x5c, 0xe9, - 0x15, 0x18, 0xd8, 0xe8, 0xd1, 0x35, 0x56, 0x1f, 0x05, 0x7a, 0x43, 0x9f, 0x7f, 0x50, 0x5b, 0xae, - 0x1f, 0x04, 0xc3, 0x3e, 0xbc, 0xe3, 0x81, 0x61, 0x99, 0x11, 0xb6, 0xe8, 0x99, 0x6f, 0xb8, 0xb5, - 0xf0, 0xa1, 0x43, 0x4c, 0x25, 0x69, 0x14, 0x4f, 0xc4, 0xdb, 0xfa, 0xc2, 0xee, 0xd3, 0x4d, 0x98, - 0x95, 0x7c, 0x29, 0x2b, 0x0f, 0x64, 0xa4, 0xa2, 0x79, 0xbc, 0x29, 0x9c, 0x9b, 0x26, 0x64, 0x1a, - 0x16, 0x82, 0x9f, 0x85, 0x39, 0x37, 0x32, 0x8d, 0x56, 0xe1, 0xa3, 0xbd, 0x24, 0xac, 0xe5, 0xb8, - 0x30, 0x91, 0xf2, 0xf0, 0x7c, 0x15, 0x17, 0x91, 0x84, 0xf0, 0x9b, 0x3b, 0x30, 0x67, 0x6f, 0x97, - 0xc2, 0x54, 0xae, 0xdd, 0x8d, 0x0d, 0x2f, 0x09, 0xf4, 0xda, 0xda, 0x4f, 0xc6, 0x60, 0xfd, 0x94, - 0xbe, 0x92, 0x69, 0x2e, 0xc9, 0x0c, 0xb1, 0xfc, 0x3f, 0xa2, 0xba, 0x0e, 0x68, 0x5b, 0xda, 0x56, - 0xd1, 0x93, 0xff, 0xe0, 0x93, 0x44, 0xdb, 0x1c, 0x1f, 0x08, 0x65, 0x61, 0x3e, 0x9a, 0xb5, 0xb6, - 0xfe, 0x22, 0x48, 0x6d, 0x68, 0x8a, 0xc7, 0xa9, 0xd7, 0xf0, 0x5d, 0x4a, 0xd6, 0x91, 0x9b, 0x9b, - 0x1f, 0x05, 0x9b, 0x72, 0x6d, 0x28, 0xcd, 0x69, 0xf5, 0x1d, 0x4b, 0x1f, 0x04, 0xb4, 0xb4, 0x6c, - 0x79, 0x3d, 0xfe, 0x14, 0xa5, 0x2e, 0xdb, 0xae, 0x78, 0xf7, 0xa7, 0x92, 0xaf, 0x05, 0x13, 0x37, - 0xf6, 0x9a, 0x63, 0xe0, 0x84, 0xcc, 0x93, 0x4f, 0x3b, 0xec, 0xb5, 0xaf, 0x82, 0x82, 0x25, 0xa4, - 0x49, 0x6b, 0xe1, 0xf1, 0x3b, 0x53, 0xe1, 0x98, 0xe9, 0xf8, 0x4e, 0x9b, 0xcd, 0xa3, 0xaa, 0xfc, - 0xdb, 0xf6, 0x5c, 0xec, 0x57, 0x31, 0xaa, 0xbf, 0x11, 0x6a, 0xaa, 0xe9, 0x7e, 0xc6, 0x8b, 0xa5, - 0xf9, 0xb7, 0x7f, 0x98, 0xd7, 0xaf, 0x82, 0x13, 0x51, 0xba, 0xef, 0x81, 0x43, 0xf1, 0x7b, 0xa5, - 0x1a, 0x93, 0xfe, 0x84, 0xcf, 0x27, 0x11, 0x55, 0xc9, 0x95, 0xbf, 0xc8, 0x5b, 0xda, 0x7c, 0xa6, - 0x4a, 0xd3, 0xf9, 0xaf, 0x4b, 0xee, 0x5c, 0xff, 0x25, 0x93, 0x34, 0xbe, 0x8d, 0x05, 0x70, 0xd6, - 0xcc, 0xd5, 0xb2, 0x42, 0x4a, 0x17, 0xed, 0xf8, 0xcc, 0xac, 0x64, 0xd7, 0xc4, 0xf7, 0xc2, 0xa4, - 0xe1, 0x63, 0x33, 0xe8, 0xe3, 0xab, 0xcf, 0x1e, 0x20, 0x29, 0x34, 0xbf, 0x4d, 0xbd, 0xb1, 0x59, - 0x4a, 0xb9, 0x58, 0x0c, 0x3a, 0x16, 0xe2, 0xc9, 0x5c, 0x95, 0x5d, 0x7e, 0x37, 0xec, 0x6c, 0xf8, - 0x5b, 0x9a, 0xaf, 0xd2, 0x0d, 0xc2, 0x63, 0x73, 0x16, 0x8d, 0x69, 0xb2, 0xbf, 0x5c, 0xda, 0xd7, - 0xc2, 0x9a, 0xaa, 0xcc, 0x9e, 0x27, 0x06, 0x72, 0xf8, 0xa8, 0xd2, 0x4a, 0xd7, 0xc4, 0xd0, 0x6c, - 0xd1, 0xbb, 0xbd, 0xfc, 0x13, 0x16, 0x39, 0x73, 0x15, 0x9a, 0xa0, 0xa0, 0xf8, 0x9c, 0xeb, 0x26, - 0x77, 0xc1, 0x21, 0x50, 0xc1, 0xf7, 0xcb, 0x7c, 0x17, 0x4e, 0xdd, 0x8d, 0x0f, 0x33, 0x1d, 0xf0, - 0x9d, 0x3d, 0xd2, 0x6d, 0x0f, 0xe1, 0x28, 0x85, 0x98, 0xef, 0x63, 0xbf, 0x82, 0x1b, 0xdb, 0x8b, - 0xcb, 0xe0, 0x92, 0x86, 0xc4, 0x89, 0xa6, 0xf8, 0x2d, 0xa0, 0xc6, 0xe9, 0x73, 0x32, 0xef, 0xe9, - 0x7b, 0x2d, 0xd0, 0xef, 0x8b, 0x36, 0xa9, 0xde, 0xef, 0x8a, 0xa4, 0xdd, 0x27, 0xcd, 0x8a, 0x27, - 0xf0, 0x4a, 0x49, 0x7a, 0x4d, 0xc4, 0xf7, 0xc1, 0x08, 0x8e, 0x51, 0x2a, 0xd2, 0xfd, 0xf9, 0x73, - 0xc2, 0x54, 0x92, 0x77, 0xd5, 0x7c, 0x11, 0x6a, 0xb6, 0xfb, 0xde, 0xfe, 0xf4, 0xad, 0x78, 0x4b, - 0x3c, 0x1f, 0x26, 0x2f, 0xe2, 0x89, 0x9f, 0x37, 0xbf, 0x8b, 0x35, 0x27, 0xde, 0x6d, 0xf2, 0x5d, - 0xef, 0xe0, 0xb2, 0x96, 0xea, 0xa2, 0x9a, 0xea, 0xd2, 0x65, 0xe0, 0xb8, 0x4b, 0x49, 0x6d, 0x5a, - 0xb1, 0xf1, 0xd4, 0x6f, 0x44, 0xde, 0x68, 0x5b, 0xa7, 0xe1, 0xa3, 0x5a, 0xb6, 0xab, 0x46, 0x7a, - 0xfb, 0xe1, 0x3a, 0xae, 0xc6, 0xc3, 0x71, 0x9c, 0x78, 0x2a, 0x92, 0xac, 0xc6, 0x2e, 0xf1, 0x78, - 0x9f, 0xad, 0x65, 0xf1, 0x95, 0x4a, 0x3a, 0x1a, 0xd1, 0x52, 0x27, 0x89, 0x2a, 0x57, 0xc4, 0x91, - 0xf6, 0x34, 0x55, 0x5f, 0x1c, 0x53, 0xb6, 0x39, 0x44, 0x5f, 0x12, 0x31, 0xaf, 0x7a, 0xae, 0x27, - 0x2e, 0xe9, 0x5a, 0xae, 0x08, 0x4e, 0xed, 0x75, 0xf0, 0x55, 0xab, 0x69, 0xae, 0xda, 0x1b, 0x24, - 0xa9, 0x5f, 0xe0, 0xa2, 0xcc, 0xee, 0x6f, 0xa4, 0x47, 0xec, 0x4d, 0xc1, 0x35, 0x36, 0x53, 0xe1, - 0x7e, 0xd2, 0x4c, 0x5f, 0x1d, 0x5a, 0x5d, 0x24, 0x90, 0x87, 0x17, 0x88, 0xe4, 0x32, 0xd6, 0x3b, - 0x98, 0x5d, 0x6a, 0x5e, 0xc4, 0x13, 0x19, 0x99, 0x39, 0xbb, 0xb9, 0xf9, 0x08, 0xab, 0x70, 0xcf, - 0x59, 0x46, 0xf2, 0x8d, 0x55, 0x59, 0xbb, 0x1c, 0xf7, 0xbe, 0x42, 0xbd, 0xdc, 0x31, 0xc1, 0x21, - 0xef, 0x7b, 0xfc, 0x11, 0xed, 0x27, 0xaf, 0x84, 0xe9, 0xbf, 0xb6, 0xbe, 0x63, 0x52, 0x93, 0x7c, - 0x15, 0x1e, 0xd3, 0x57, 0xd1, 0x1b, 0x7b, 0x44, 0x47, 0x5e, 0x6d, 0xa5, 0xf8, 0xb2, 0x5b, 0xa4, - 0x5d, 0xcd, 0x70, 0x48, 0x4d, 0x37, 0x83, 0xec, 0x5b, 0x5b, 0xf8, 0x2b, 0x14, 0xa9, 0xda, 0x6d, - 0xac, 0xdb, 0x5b, 0x1f, 0x14, 0x2d, 0xed, 0x6f, 0x75, 0xc1, 0x09, 0x92, 0xb7, 0xaf, 0x94, 0xd2, - 0xee, 0x4e, 0x08, 0x6a, 0x38, 0xbf, 0x90, 0x7c, 0x87, 0x7b, 0x7f, 0x04, 0xc5, 0x49, 0x2d, 0xdf, - 0x7b, 0xec, 0xa2, 0xbf, 0xe0, 0xab, 0x6c, 0x47, 0xf5, 0x7f, 0x2e, 0x33, 0xe1, 0x2a, 0x5b, 0x4e, - 0xdf, 0xf1, 0x3d, 0x24, 0x9d, 0xff, 0x77, 0x49, 0x3f, 0xba, 0xdd, 0xfd, 0xeb, 0x49, 0x70, 0x99, - 0x9a, 0x4d, 0xf2, 0x41, 0x67, 0xcb, 0x69, 0x95, 0xaf, 0x09, 0x08, 0xd3, 0x4f, 0x93, 0x3d, 0x9e, - 0xab, 0xf1, 0x46, 0xa5, 0x73, 0xb1, 0xdf, 0xc1, 0x6d, 0x34, 0x93, 0x60, 0xd2, 0x52, 0xe4, 0x1c, - 0x5f, 0x0e, 0x16, 0xee, 0xea, 0x9d, 0xd3, 0xff, 0x05, 0x16, 0xdf, 0x36, 0x1c, 0x30, 0x1d, 0x3a, - 0xf1, 0x16, 0x18, 0x97, 0x33, 0xd1, 0x87, 0xf8, 0x4e, 0x7d, 0x65, 0x24, 0x6d, 0x35, 0x5c, 0x5e, - 0x66, 0xe8, 0x77, 0xbe, 0x62, 0xdb, 0xa7, 0xef, 0x43, 0x2c, 0xbf, 0x59, 0x57, 0x25, 0xd0, 0x6b, - 0xf2, 0x6c, 0x98, 0xc8, 0xdf, 0x79, 0x23, 0x69, 0xf0, 0xa1, 0x53, 0xdb, 0x4e, 0x9f, 0x77, 0x4c, - 0xfd, 0x3a, 0xef, 0xf0, 0x4b, 0x4e, 0x99, 0x7d, 0xd7, 0x5f, 0x1d, 0x51, 0xba, 0x60, 0xdd, 0xe6, - 0x7b, 0x9b, 0xf9, 0x04, 0x2e, 0xab, 0xe1, 0x13, 0xd6, 0x9d, 0xa7, 0xe9, 0xa7, 0xe1, 0x4c, 0xda, - 0xcb, 0x8e, 0x9d, 0x32, 0x65, 0x2b, 0xd2, 0xcb, 0xe0, 0xb6, 0xfb, 0x74, 0x49, 0x37, 0xdf, 0x08, - 0x53, 0x93, 0xc9, 0xf7, 0x26, 0x89, 0x7f, 0xf0, 0xa1, 0x32, 0xf4, 0x91, 0x36, 0x4d, 0xb8, 0xd7, - 0xed, 0x0a, 0xdb, 0xe3, 0x37, 0x4b, 0x2f, 0xd2, 0x2d, 0x0b, 0x4d, 0xb6, 0xeb, 0xe3, 0xea, 0x6e, - 0xde, 0xef, 0xe4, 0xed, 0x4f, 0xa3, 0xc5, 0xf0, 0x4e, 0x6d, 0xb3, 0xec, 0xdd, 0xd5, 0xac, 0x5f, - 0x1d, 0x37, 0xcf, 0x69, 0xa8, 0xdf, 0xae, 0x63, 0xa4, 0x93, 0xbf, 0x94, 0xa4, 0xcb, 0xff, 0xc1, - 0x61, 0x1d, 0x5e, 0xd5, 0xa6, 0xe5, 0xd1, 0xc5, 0xe0, 0x60, 0xf1, 0xe3, 0x39, 0xbd, 0x6a, 0xdd, - 0xb1, 0x7f, 0x04, 0xd1, 0x79, 0x98, 0x8b, 0xd6, 0xdf, 0x08, 0x84, 0x52, 0x4a, 0x9b, 0x4d, 0x6b, - 0x5f, 0x82, 0x9a, 0xdc, 0xfe, 0xd5, 0x6d, 0xdb, 0x6f, 0x82, 0x2a, 0xa6, 0x6f, 0x35, 0xf0, 0x4e, - 0x4d, 0xa3, 0xe5, 0x3a, 0x6d, 0xf1, 0x1d, 0xde, 0x4c, 0x7f, 0xc2, 0x74, 0x89, 0x95, 0x6f, 0x2e, - 0xf8, 0x2a, 0xa4, 0x93, 0xba, 0x56, 0xbc, 0x9e, 0xff, 0x09, 0xdd, 0xae, 0xd5, 0xfc, 0x7c, 0xb4, - 0x46, 0x37, 0xdc, 0x43, 0x42, 0xd1, 0xda, 0xfb, 0xfc, 0x15, 0x5d, 0xb7, 0xe6, 0x34, 0xb2, 0xad, - 0x63, 0xdb, 0x7d, 0x7c, 0x65, 0xed, 0x34, 0x91, 0x3e, 0x4c, 0x97, 0x29, 0x0e, 0x52, 0x4b, 0xe0, - 0xb3, 0x1a, 0x6e, 0xc5, 0xcd, 0x55, 0xca, 0x6c, 0xf8, 0x2b, 0x10, 0xd2, 0x18, 0xfb, 0xbb, 0xb8, - 0xae, 0xe6, 0xcc, 0xc7, 0xc1, 0x68, 0x99, 0xf3, 0xdc, 0x36, 0x62, 0xdf, 0xe1, 0x41, 0x91, 0xc8, - 0xdd, 0xd2, 0x9c, 0xc5, 0x95, 0x6b, 0x8e, 0xaf, 0x73, 0xe1, 0x42, 0xdb, 0xba, 0x4d, 0xf5, 0x37, - 0x0d, 0x37, 0x43, 0x9e, 0x6d, 0x62, 0x3c, 0x3e, 0x33, 0xa6, 0xf0, 0xf7, 0x4a, 0x06, 0xd6, 0xea, - 0x55, 0x6d, 0xee, 0x74, 0xd5, 0xbf, 0x0f, 0x6d, 0xd4, 0x7a, 0x27, 0x81, 0xb6, 0xc3, 0x95, 0x8a, - 0xfe, 0x99, 0x3f, 0x94, 0x95, 0x4b, 0xe3, 0x4a, 0x76, 0x13, 0x1d, 0x32, 0x6b, 0x5e, 0xfe, 0x6f, - 0x5b, 0xf0, 0x7d, 0x5e, 0xdd, 0x24, 0xdb, 0x38, 0xc4, 0xb0, 0x7c, 0x73, 0x13, 0xfc, 0x65, 0x0e, - 0xc6, 0x65, 0xcd, 0xaf, 0x26, 0xb5, 0xc9, 0xbe, 0x3a, 0x95, 0x92, 0x4d, 0xbd, 0x37, 0x4e, 0xaf, - 0x84, 0xed, 0xa4, 0x54, 0x19, 0x99, 0x3b, 0x3f, 0x82, 0xb3, 0xa4, 0x7c, 0x19, 0x30, 0x91, 0xd6, - 0xf6, 0x27, 0xda, 0xf2, 0x62, 0x5a, 0x1b, 0x7c, 0x29, 0xa2, 0x1d, 0xca, 0x96, 0x66, 0xed, 0x4c, - 0xb6, 0xb1, 0x33, 0xc4, 0x89, 0xbe, 0x09, 0x67, 0x6a, 0xb4, 0x75, 0x43, 0xe7, 0x92, 0xe5, 0x04, - 0xc7, 0xff, 0x85, 0x32, 0x32, 0xc7, 0x19, 0xd1, 0x01, 0xdf, 0x5a, 0xd7, 0x21, 0x52, 0x24, 0xa1, - 0x71, 0x8a, 0xa8, 0xe0, 0xf8, 0x52, 0xee, 0x35, 0x47, 0xa9, 0x62, 0xf0, 0x69, 0xbf, 0x5f, 0x84, - 0x6c, 0x1b, 0x1a, 0xc6, 0xc5, 0x6d, 0x6c, 0x1b, 0x1f, 0x0a, 0x11, 0x0c, 0x79, 0x33, 0x07, 0x46, - 0xec, 0x1b, 0x4c, 0x31, 0x87, 0x32, 0xd1, 0x98, 0x3b, 0x2a, 0xd7, 0x24, 0x71, 0xda, 0xe2, 0xf8, - 0xc9, 0xbb, 0x9e, 0x2e, 0xbd, 0xed, 0x40, 0x73, 0x06, 0x50, 0x6c, 0x32, 0x45, 0x69, 0x86, 0xb0, - 0xc6, 0xb5, 0x14, 0x0e, 0x8c, 0xdf, 0xc2, 0x94, 0x30, 0xfa, 0x9b, 0xc1, 0xd0, 0xc7, 0xd3, 0x23, - 0x59, 0xae, 0xbc, 0x3e, 0xbf, 0xf3, 0xc4, 0x8b, 0x0a, 0xff, 0xc2, 0x94, 0x2a, 0x43, 0x18, 0xd5, - 0x06, 0x99, 0x1e, 0x56, 0x15, 0x9b, 0x99, 0x57, 0x5e, 0x6a, 0x5b, 0xde, 0xb1, 0x65, 0xf0, 0xa5, - 0x0d, 0x60, 0xe3, 0x79, 0xc1, 0xd6, 0xd3, 0x78, 0xde, 0x1a, 0x89, 0xea, 0x9e, 0x89, 0x3f, 0x9c, - 0x97, 0xcc, 0x7c, 0x13, 0x73, 0x34, 0xfa, 0xa7, 0x15, 0xc2, 0x3f, 0xef, 0x82, 0xc3, 0xa7, 0x4e, - 0xf7, 0xe5, 0xed, 0xd7, 0xc1, 0x6d, 0x49, 0xcf, 0xee, 0xe4, 0xe7, 0x3e, 0xbe, 0x0a, 0xf9, 0xfb, - 0x79, 0x58, 0x1c, 0xa2, 0x1b, 0x99, 0x7e, 0x15, 0x87, 0x76, 0x24, 0x97, 0xd8, 0xa5, 0xa6, 0xdf, - 0x82, 0xd1, 0x34, 0x8d, 0x9b, 0xe9, 0xa4, 0xf8, 0x52, 0x4c, 0x54, 0xab, 0xbb, 0xb3, 0x0b, 0xba, - 0xa6, 0x4f, 0x7a, 0x49, 0x4a, 0x3f, 0xc2, 0xe6, 0x6a, 0xdd, 0xb6, 0xf7, 0x7f, 0x4c, 0xbf, 0xc6, - 0x09, 0xc9, 0x51, 0x95, 0x4c, 0xbb, 0xe3, 0x8f, 0xa7, 0x7f, 0x18, 0x63, 0x7d, 0x29, 0xb6, 0xad, - 0xd2, 0x6d, 0xa6, 0xa9, 0xf8, 0x9b, 0xf1, 0xfa, 0x74, 0xc9, 0x9e, 0xb1, 0xcf, 0x88, 0x25, 0xda, - 0xda, 0xbf, 0x8f, 0xe9, 0xb5, 0xba, 0x77, 0xbf, 0x82, 0x3d, 0xb4, 0xee, 0x3c, 0x23, 0x9f, 0x1a, - 0xeb, 0x54, 0xf7, 0xf0, 0x58, 0x3d, 0xda, 0x4d, 0x5d, 0x2c, 0x9b, 0x6b, 0x6a, 0xe2, 0x87, 0x6f, - 0x3e, 0x53, 0x11, 0xec, 0xcf, 0x04, 0xa7, 0x97, 0x45, 0xf6, 0x64, 0xa4, 0xdc, 0x95, 0xf8, 0xa2, - 0xd6, 0xaf, 0xa7, 0xe0, 0x9c, 0xb9, 0xba, 0x89, 0x60, 0xdd, 0x3e, 0x7d, 0xf1, 0x77, 0xb7, 0xe5, - 0xcf, 0x25, 0xa3, 0xe7, 0xe0, 0xaa, 0xd3, 0x69, 0xed, 0x52, 0x5a, 0xeb, 0xe5, 0xbd, 0xdf, 0xc1, - 0x15, 0x78, 0xae, 0xcf, 0x84, 0x48, 0x6e, 0xef, 0x37, 0x7d, 0x69, 0x39, 0x77, 0xcb, 0xa4, 0x91, - 0x77, 0xc5, 0x49, 0xfb, 0x6d, 0x5b, 0xf1, 0xf4, 0x9d, 0xab, 0x63, 0xb4, 0xc6, 0x92, 0x7f, 0xae, - 0x5f, 0x1e, 0x6a, 0xd2, 0xe5, 0x91, 0x76, 0x66, 0xfe, 0x30, 0xd9, 0xb3, 0x6e, 0xdc, 0x29, 0x7f, - 0x69, 0x3f, 0x12, 0x36, 0xde, 0x96, 0xdc, 0xf0, 0xf8, 0x27, 0x22, 0x4e, 0x5d, 0xdb, 0x6e, 0xdd, - 0x7c, 0x28, 0x4c, 0x22, 0x7e, 0x87, 0x24, 0x73, 0x7b, 0x9b, 0x6e, 0xcf, 0x84, 0x4a, 0xc6, 0xc7, - 0x4c, 0xac, 0x22, 0x56, 0x6e, 0xad, 0x23, 0xf6, 0x3f, 0xc6, 0xcf, 0xa4, 0xf4, 0xa2, 0x83, 0x27, - 0x43, 0x67, 0x89, 0xd2, 0x48, 0xbb, 0xb7, 0x67, 0xa9, 0xa1, 0xa2, 0x19, 0xc7, 0xf8, 0x78, 0xd7, - 0x8d, 0xc9, 0x16, 0xfd, 0x47, 0xae, 0x33, 0x54, 0x73, 0x5b, 0x75, 0x7f, 0xf0, 0x52, 0x5d, 0xba, - 0x6d, 0x34, 0x9a, 0x8e, 0x62, 0x29, 0x43, 0x28, 0x3e, 0x08, 0xf4, 0x3a, 0xf7, 0xc1, 0x4e, 0xd3, - 0xdb, 0x4b, 0x3b, 0x32, 0xb4, 0xc8, 0x3b, 0xe3, 0xed, 0x8c, 0x57, 0xf7, 0x4a, 0xd9, 0xd9, 0xb1, - 0xf8, 0x40, 0xb9, 0x19, 0x7e, 0x0f, 0x2e, 0x21, 0x19, 0x8d, 0x2f, 0x0a, 0x5b, 0x8d, 0x99, 0xb5, - 0xa3, 0x86, 0x6f, 0x8d, 0xad, 0xcd, 0x71, 0xb5, 0x75, 0x22, 0xae, 0x0d, 0xc9, 0x4e, 0xca, 0x93, - 0x1b, 0x7c, 0x28, 0x44, 0x8e, 0xcc, 0x54, 0x68, 0x6c, 0x63, 0x38, 0x58, 0x72, 0xc7, 0xd2, 0xf6, - 0xd8, 0xb1, 0xb6, 0x1d, 0xf1, 0x97, 0xb1, 0xd1, 0xf3, 0x35, 0x0f, 0x92, 0x28, 0xd0, 0xb4, 0xe5, - 0x67, 0xc6, 0x72, 0x30, 0x5d, 0x9a, 0xd3, 0x74, 0xe2, 0xdd, 0xd3, 0x43, 0x4f, 0xc2, 0x9e, 0xba, - 0x4f, 0x99, 0xa9, 0x21, 0xd0, 0xcf, 0xaf, 0x63, 0x0d, 0xdf, 0xe0, 0xaa, 0x44, 0xbb, 0xbc, 0xfe, - 0xb1, 0xb4, 0x3f, 0xb6, 0x5c, 0x8e, 0xf8, 0x52, 0x9c, 0xcc, 0x19, 0xb2, 0xc2, 0xdd, 0x33, 0x30, - 0xc4, 0xa8, 0x9a, 0xb6, 0x33, 0x8b, 0xe3, 0x74, 0x37, 0x64, 0xd2, 0x83, 0x7d, 0xa3, 0xe2, 0x9c, - 0x71, 0xeb, 0x34, 0xaa, 0x4e, 0xcb, 0xff, 0x05, 0xf4, 0xac, 0x64, 0x78, 0xd1, 0xb7, 0xc7, 0xcd, - 0xa2, 0xc1, 0x7c, 0x9f, 0xfc, 0x14, 0x96, 0x90, 0xee, 0x75, 0x24, 0x93, 0x4d, 0x45, 0x1b, 0xce, - 0xa8, 0xa6, 0xe6, 0x15, 0xaa, 0x6b, 0x9b, 0x56, 0xe7, 0xe8, 0x6b, 0xdf, 0x62, 0x1d, 0xbc, 0xbc, - 0x24, 0x54, 0xab, 0x5c, 0xbd, 0x73, 0x11, 0x69, 0x5f, 0x5e, 0x92, 0x23, 0xf4, 0x23, 0xbe, 0xfb, - 0xb9, 0x38, 0xa1, 0x27, 0xfd, 0x8e, 0xdb, 0x6b, 0x82, 0x4e, 0xda, 0x4e, 0x5f, 0x05, 0x56, 0x34, - 0xed, 0x6d, 0x8f, 0xd3, 0xb4, 0xd9, 0xda, 0x4e, 0xe8, 0x57, 0x1e, 0x42, 0xf0, 0x85, 0xd0, 0xda, - 0x8c, 0x9f, 0xf1, 0xe4, 0x5e, 0xe4, 0xe0, 0x8f, 0x3e, 0xfa, 0xf8, 0x43, 0x7f, 0x4b, 0x61, 0xb4, - 0xdb, 0x55, 0x3f, 0xfc, 0xb7, 0x54, 0x1f, 0xcb, 0x4d, 0x5a, 0xae, 0x49, 0x73, 0xf9, 0xaf, 0xb5, - 0xe4, 0x32, 0x5a, 0x5e, 0x0b, 0x84, 0xe7, 0xe9, 0x37, 0x6f, 0x07, 0xd9, 0x39, 0x7f, 0x9b, 0xcf, - 0xcb, 0xc1, 0x15, 0x34, 0xfa, 0xae, 0x8b, 0xaf, 0xab, 0x7d, 0x62, 0xae, 0x2e, 0xdd, 0xb4, 0x3b, - 0x55, 0xf2, 0x71, 0xfa, 0xbf, 0x05, 0x44, 0x73, 0xfb, 0x65, 0xfc, 0xdb, 0xa6, 0xbd, 0x5c, 0xdc, - 0xcc, 0x42, 0x5c, 0xb9, 0x98, 0xdf, 0x1f, 0x96, 0x16, 0x33, 0x6b, 0x76, 0x76, 0xa6, 0xe6, 0x10, - 0xeb, 0xf1, 0x1c, 0xfa, 0x89, 0xb5, 0xb1, 0x93, 0x89, 0xd0, 0xca, 0xcc, 0x1e, 0x68, 0x4d, 0xc2, - 0x76, 0x90, 0xed, 0x2b, 0x6a, 0xdb, 0xe5, 0x9a, 0xf6, 0x82, 0x3c, 0xd4, 0x58, 0xf2, 0xbe, 0xe8, - 0x34, 0x48, 0x94, 0x67, 0x04, 0xdc, 0x66, 0x9d, 0xb1, 0xbd, 0xe5, 0xeb, 0x2a, 0xe5, 0xe4, 0x51, - 0xf2, 0xf3, 0x37, 0xe2, 0xa6, 0x4b, 0xa1, 0x9a, 0x11, 0xe6, 0xe6, 0xcd, 0xd3, 0xcb, 0xc9, 0xda, - 0x68, 0x9c, 0xbc, 0xd1, 0xf8, 0xe9, 0x12, 0xb2, 0x6e, 0xd4, 0xf2, 0x24, 0x5e, 0xff, 0x76, 0x3c, - 0xfd, 0xd2, 0xa7, 0x7c, 0x7f, 0x4d, 0xbb, 0xb6, 0x46, 0x32, 0xe7, 0xc9, 0x45, 0x95, 0x11, 0x3a, - 0xeb, 0xe6, 0xd8, 0xd7, 0xe6, 0xd0, 0x9d, 0xcd, 0xd7, 0x2f, 0x82, 0xad, 0x0e, 0xac, 0x9d, 0xbe, - 0x5d, 0x57, 0xf9, 0x49, 0xb1, 0xa8, 0xae, 0x52, 0xf3, 0x6f, 0x9b, 0xc9, 0xfc, 0x10, 0xde, 0xc6, - 0xc7, 0x53, 0x77, 0x4f, 0x55, 0xcb, 0xa6, 0x97, 0xc2, 0x56, 0xf4, 0xa5, 0x63, 0x5c, 0x55, 0x2d, - 0x33, 0xc7, 0xdf, 0x05, 0xd4, 0x36, 0xd1, 0x66, 0x63, 0x9f, 0xee, 0x3b, 0x8e, 0xaf, 0x82, 0x19, - 0x60, 0xd7, 0xaa, 0xe0, 0x86, 0xfb, 0xbf, 0xc1, 0x0e, 0xdd, 0x70, 0x9f, 0x9b, 0x43, 0xaa, 0xee, - 0xf4, 0x5f, 0x15, 0xc7, 0x57, 0x8e, 0x66, 0x6b, 0x92, 0x95, 0x27, 0x2f, 0x35, 0x5f, 0xf1, 0x16, - 0x1d, 0xb4, 0xf3, 0xfa, 0xe6, 0xed, 0xb6, 0x5e, 0x4c, 0xf8, 0xf5, 0xf9, 0x3b, 0xa1, 0xae, 0x10, - 0xa6, 0xff, 0x3c, 0x72, 0xfb, 0xef, 0x6c, 0x88, 0x3f, 0x05, 0xb9, 0x7e, 0xdd, 0x6e, 0xf9, 0x08, - 0xd6, 0x99, 0x78, 0x25, 0x29, 0x58, 0xf2, 0xb0, 0xfc, 0x5f, 0x24, 0xec, 0x7f, 0x2e, 0x54, 0x34, - 0xfc, 0x46, 0x8a, 0xe8, 0x69, 0x21, 0xd7, 0x34, 0xbf, 0x93, 0x88, 0xbd, 0x3d, 0x0d, 0x7e, 0x0b, - 0x36, 0x36, 0x37, 0x5a, 0x5d, 0x0d, 0x5e, 0x0e, 0x60, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x33, - 0x19, 0xb0, 0x7a, 0x15, 0xd9, 0xaf, 0x7f, 0x76, 0xd5, 0xb4, 0x22, 0x77, 0x4f, 0x73, 0xf4, 0x11, - 0x63, 0xe8, 0xef, 0x7d, 0x13, 0x2f, 0xaf, 0x5f, 0x46, 0x7f, 0xab, 0x90, 0xbf, 0x42, 0xef, 0x37, - 0x30, 0x59, 0x3d, 0xa3, 0x71, 0x62, 0xde, 0x46, 0xdb, 0x9e, 0x89, 0xfb, 0x35, 0xdf, 0xe5, 0xbd, - 0xdc, 0x46, 0x10, 0xbe, 0x86, 0xbd, 0xf5, 0x7f, 0xa2, 0x77, 0xd5, 0xe2, 0x39, 0x84, 0x5a, 0x4b, - 0xe2, 0xe9, 0xd8, 0x32, 0x55, 0x34, 0x3c, 0xf1, 0x17, 0xd0, 0x4f, 0xbe, 0xbd, 0xf5, 0x7a, 0xea, - 0x8f, 0x3e, 0x0b, 0x02, 0x92, 0xeb, 0x1b, 0xfe, 0x86, 0x76, 0x92, 0x31, 0xd7, 0x8b, 0xe1, 0x1e, - 0x33, 0x95, 0xb7, 0xb5, 0x15, 0xaf, 0x82, 0x9b, 0xb1, 0xce, 0xc3, 0xf4, 0xed, 0x3a, 0x2d, 0xfe, - 0x0a, 0xbb, 0xa6, 0x4c, 0xf9, 0x7a, 0x7b, 0xbe, 0x2c, 0xed, 0xdb, 0x49, 0x6f, 0xf0, 0x4b, 0xce, - 0xd6, 0xed, 0xdf, 0x5f, 0x08, 0xda, 0x23, 0x09, 0xc7, 0x26, 0x76, 0xdb, 0xaf, 0x84, 0x44, 0x30, - 0x68, 0x52, 0xe2, 0x65, 0xa2, 0x5b, 0xe7, 0x22, 0x3c, 0xcf, 0xc6, 0xc6, 0x6e, 0x3d, 0x5e, 0x3b, - 0x47, 0x3b, 0xee, 0x08, 0xd6, 0xb4, 0xcb, 0x7b, 0x16, 0x48, 0xbb, 0x73, 0xb4, 0xf1, 0x7f, 0x1c, - 0xef, 0xc2, 0x96, 0xe3, 0xf7, 0xe8, 0x43, 0xdb, 0x5b, 0xef, 0xac, 0x9c, 0xb8, 0xc8, 0xa5, 0x89, - 0x28, 0xbe, 0x3c, 0x4c, 0x5b, 0xbb, 0x2d, 0xa6, 0xff, 0x1a, 0x22, 0xb5, 0xa5, 0x5e, 0x58, 0xcb, - 0xdf, 0x8d, 0x09, 0x83, 0xaa, 0xa0, 0x42, 0x9c, 0xf1, 0x7f, 0xf1, 0xb4, 0xdd, 0x6a, 0x6b, 0x54, - 0x3b, 0xd5, 0x7f, 0xb8, 0x1a, 0x11, 0xa0, 0x49, 0x72, 0xac, 0x8b, 0x69, 0xdb, 0x15, 0x6d, 0xfe, - 0x19, 0xa0, 0x32, 0x08, 0x95, 0xb4, 0xfd, 0x53, 0xf6, 0xf7, 0x27, 0x4e, 0x3f, 0x0a, 0x16, 0x47, - 0xa2, 0x5b, 0x0e, 0xf5, 0x99, 0xc6, 0x39, 0x3a, 0xe5, 0x97, 0x67, 0xbf, 0x33, 0x6a, 0x7a, 0xf8, - 0x29, 0xd1, 0x17, 0xd2, 0x9b, 0x03, 0x28, 0xf7, 0x72, 0xe3, 0x70, 0x80, 0x2f, 0x5e, 0x8c, 0xdf, - 0x13, 0x32, 0x49, 0x7d, 0x0c, 0xcf, 0xfc, 0x11, 0x8b, 0x18, 0xed, 0xd5, 0x35, 0x70, 0xae, 0x20, - 0x6e, 0xab, 0xaa, 0xae, 0x2c, 0x8a, 0xbf, 0x3e, 0xfa, 0x22, 0x7f, 0x12, 0x08, 0xcb, 0xbb, 0xb9, - 0xf5, 0x72, 0xba, 0xb9, 0xf0, 0x44, 0x78, 0xc7, 0xb9, 0xd5, 0xe2, 0x15, 0x9f, 0x0a, 0x06, 0x89, - 0xdb, 0x73, 0x49, 0x0a, 0xfb, 0xb7, 0x46, 0x39, 0x57, 0x0a, 0x9b, 0x28, 0xc7, 0xc6, 0x09, 0x95, - 0xcc, 0xa1, 0xa7, 0x96, 0x7c, 0xb5, 0xb6, 0xdf, 0xc3, 0xf3, 0xb2, 0xfd, 0x24, 0xfd, 0x34, 0xd4, - 0x1f, 0xf4, 0xe5, 0xa7, 0xf8, 0x24, 0xda, 0x34, 0xe1, 0xb3, 0xe3, 0x6d, 0xa7, 0x5e, 0x58, 0x5a, - 0x4a, 0xc2, 0x5d, 0x98, 0xcc, 0x73, 0x22, 0xbe, 0xda, 0x23, 0xff, 0xc3, 0xc6, 0x4c, 0xf4, 0xec, - 0x19, 0xbd, 0x85, 0x33, 0x58, 0xd8, 0xe5, 0x47, 0x3d, 0xa3, 0xff, 0x0f, 0x89, 0xb1, 0xa3, 0x58, - 0x36, 0x51, 0x0c, 0xda, 0x67, 0xe5, 0x97, 0x7d, 0x53, 0x56, 0xfc, 0x3a, 0x43, 0xb9, 0x0e, 0xd9, - 0xfb, 0x1d, 0x61, 0x87, 0xf2, 0x7d, 0x4f, 0x65, 0x11, 0x6b, 0x10, 0xe0, 0xab, 0x1b, 0x34, 0xac, - 0x5f, 0xf0, 0xf9, 0x52, 0xaf, 0x6c, 0x76, 0xe7, 0xd5, 0x92, 0x6d, 0xb8, 0x64, 0x6a, 0x43, 0x94, - 0xd2, 0x9b, 0x7c, 0x6e, 0xcc, 0xd4, 0x55, 0x9d, 0xbd, 0xb8, 0xa1, 0xa4, 0xce, 0x58, 0xbb, 0xe2, - 0xe4, 0xb5, 0x07, 0x7f, 0x7b, 0xe3, 0x2f, 0xf1, 0x95, 0x24, 0x28, 0x92, 0x4b, 0x3e, 0xba, 0x39, - 0x35, 0x27, 0xab, 0xe1, 0xda, 0x27, 0xc9, 0x2f, 0x3f, 0xce, 0xb3, 0x3f, 0x66, 0xaf, 0xbf, 0xd1, - 0x35, 0xf0, 0x44, 0x74, 0xab, 0x98, 0x78, 0x2e, 0x23, 0x63, 0xfe, 0x47, 0xd5, 0x1f, 0xbe, 0x1f, - 0x12, 0xd5, 0x12, 0x6a, 0x5c, 0x27, 0x6e, 0x27, 0xae, 0xef, 0xa7, 0x76, 0xfc, 0x31, 0x6d, 0x53, - 0x97, 0x1d, 0x25, 0x21, 0x7d, 0x32, 0xfb, 0xf8, 0xd3, 0x27, 0xa6, 0x6f, 0x77, 0x9e, 0x11, 0xb6, - 0xbb, 0x5f, 0x2b, 0x15, 0x89, 0xd2, 0x23, 0x4f, 0xf0, 0xb0, 0x89, 0xe4, 0x75, 0x50, 0x66, 0x55, - 0xa1, 0xd3, 0x2f, 0x6d, 0x6b, 0xe1, 0xc0, 0x9a, 0xd6, 0xe7, 0x2f, 0x4f, 0xfd, 0x62, 0xfa, 0x2b, - 0x94, 0x3c, 0x9c, 0x6d, 0x3f, 0xfc, 0x28, 0x1e, 0x77, 0xb2, 0xeb, 0xaa, 0x8d, 0xf6, 0xdb, 0xdb, - 0xad, 0x65, 0x4f, 0x84, 0xed, 0x3e, 0x86, 0xe6, 0x7f, 0xe3, 0x8f, 0x3b, 0x36, 0x3d, 0x5b, 0x97, - 0x5f, 0xf0, 0xa1, 0x4e, 0xca, 0x6f, 0x66, 0x36, 0xaa, 0x94, 0x9b, 0xc7, 0x68, 0xda, 0xff, 0x1c, - 0x26, 0x58, 0xea, 0xf2, 0xaa, 0x24, 0x8b, 0x8a, 0xad, 0x6b, 0xf1, 0xa3, 0x13, 0x33, 0x39, 0x62, - 0xa3, 0xf7, 0x77, 0x6d, 0x23, 0x64, 0xd9, 0x2a, 0xaa, 0x66, 0xef, 0xa3, 0xcb, 0xc9, 0x4f, 0x18, - 0x35, 0xea, 0xad, 0xb6, 0xd0, 0xb6, 0xf8, 0x5e, 0xac, 0x78, 0x8a, 0xc7, 0x8f, 0xed, 0xb4, 0xb1, - 0xdd, 0x24, 0x8b, 0x8d, 0xcf, 0x08, 0x92, 0x93, 0x69, 0x5b, 0x7b, 0xad, 0x3f, 0x2d, 0x3a, 0x7f, - 0x1d, 0x4d, 0xa3, 0x7a, 0x8f, 0x9a, 0x93, 0x17, 0xfc, 0x48, 0xc1, 0x5a, 0x1b, 0xa3, 0x6c, 0xe2, - 0x9d, 0xd2, 0xb9, 0xe7, 0x61, 0x28, 0x5e, 0x0b, 0x7b, 0xb6, 0x68, 0x35, 0x02, 0x18, 0x8b, 0xb3, - 0xe0, 0x9c, 0x4b, 0xea, 0xd3, 0xd5, 0xfe, 0x3b, 0xa5, 0x78, 0xc2, 0xca, 0xd9, 0x8f, 0x75, 0xf0, - 0x58, 0x5c, 0xac, 0x35, 0xbb, 0x1c, 0xd8, 0xdb, 0xb2, 0x2f, 0x84, 0x79, 0x2d, 0x1b, 0xef, 0x57, - 0x6b, 0xc2, 0x61, 0x04, 0x92, 0x97, 0x1e, 0x99, 0x37, 0xc5, 0xe4, 0xcd, 0xbc, 0x6b, 0x4f, 0x04, - 0xc3, 0xd5, 0x75, 0xbe, 0xb7, 0x3e, 0x6d, 0x4d, 0x74, 0xfc, 0x14, 0x0c, 0xb8, 0x87, 0xdb, 0x24, - 0xc9, 0x38, 0x4d, 0xf0, 0x56, 0x54, 0x9b, 0x79, 0x1f, 0xc6, 0xd5, 0x2e, 0xec, 0xfa, 0x0a, 0x8a, - 0xa5, 0x4a, 0x22, 0x09, 0x08, 0xf7, 0xc7, 0x30, 0x91, 0x2c, 0x47, 0x42, 0xc7, 0x97, 0x7a, 0x7f, - 0x45, 0x75, 0xf1, 0x81, 0x8c, 0xdd, 0xeb, 0xd3, 0x4e, 0x7f, 0x13, 0x2a, 0x1c, 0xac, 0x7c, 0x2e, - 0x73, 0x79, 0x5a, 0x39, 0x71, 0xb4, 0x22, 0x3e, 0xc7, 0x71, 0xc3, 0x2f, 0xf0, 0xf5, 0xba, 0xfc, - 0x99, 0xae, 0xdd, 0xb5, 0x6c, 0xdb, 0xab, 0x7b, 0xe6, 0xaa, 0xea, 0xfe, 0x36, 0x8a, 0x53, 0x83, - 0xda, 0xd2, 0xc6, 0x35, 0x4c, 0xab, 0xfe, 0x86, 0x5a, 0xd0, 0x6f, 0xac, 0xea, 0x74, 0xc6, 0x4d, - 0x58, 0xb5, 0x5a, 0x63, 0xf9, 0xf8, 0x50, 0x95, 0x6e, 0xc5, 0xb6, 0x9f, 0x23, 0xd3, 0xf2, 0x39, - 0x2d, 0xfe, 0x36, 0x90, 0xd7, 0x33, 0x8d, 0xd5, 0xdb, 0x41, 0xca, 0x69, 0xd3, 0x7c, 0xe2, 0xa4, - 0x49, 0x6c, 0x46, 0x4d, 0x35, 0xab, 0xfe, 0x54, 0x47, 0xcf, 0xc1, 0x4d, 0x28, 0xa3, 0xcb, 0xd3, - 0xf7, 0x4e, 0x2f, 0x8d, 0xb5, 0x96, 0x3e, 0xaa, 0xc9, 0x1c, 0xda, 0xf8, 0xfe, 0x7a, 0xc2, 0x74, - 0x06, 0xfd, 0xff, 0x85, 0x8b, 0x9f, 0x9b, 0x52, 0xcf, 0x86, 0x81, 0xed, 0x3a, 0x21, 0xde, 0xff, - 0x1a, 0x57, 0x7c, 0xfb, 0x51, 0x76, 0x22, 0x51, 0x36, 0x34, 0x3d, 0xc5, 0x6b, 0x07, 0x7e, 0x1b, - 0x7f, 0xc3, 0xa5, 0xd5, 0x6e, 0x91, 0x9a, 0x2b, 0xad, 0xc1, 0xfa, 0xb7, 0xff, 0xe0, 0xa4, 0xd4, - 0xd2, 0xa6, 0x9e, 0xab, 0xa2, 0xb5, 0xe0, 0xc2, 0xc9, 0x93, 0x97, 0xb3, 0x72, 0x51, 0xf1, 0x48, - 0x01, 0x9e, 0x3b, 0x6f, 0x3f, 0xff, 0x0e, 0xed, 0x34, 0x77, 0x52, 0x0b, 0x57, 0xa6, 0xb4, 0xcd, - 0x3e, 0x7f, 0xfe, 0x36, 0xe8, 0xaa, 0x68, 0xb4, 0xf6, 0xe7, 0x87, 0x26, 0x12, 0xda, 0xef, 0x3d, - 0x09, 0xe7, 0xff, 0x04, 0xda, 0xb2, 0x62, 0xca, 0x46, 0x65, 0xac, 0x20, 0x23, 0xe2, 0xce, 0xda, - 0x57, 0xa6, 0xff, 0x14, 0x39, 0x1c, 0x7a, 0xc5, 0xd2, 0xd7, 0xc1, 0x2e, 0x56, 0x5e, 0x93, 0x1a, - 0xb5, 0x4c, 0x1e, 0x0b, 0x82, 0x6b, 0x57, 0x7b, 0xbf, 0x9f, 0x45, 0x48, 0xc9, 0xc2, 0x61, 0xaa, - 0x93, 0x23, 0x4c, 0xb9, 0xf8, 0x2e, 0xd0, 0x92, 0x49, 0x88, 0xf1, 0x65, 0x5b, 0xbe, 0x5d, 0x55, - 0x35, 0xc1, 0x20, 0xb4, 0xcb, 0xff, 0x7c, 0xc4, 0x6d, 0xa6, 0xd5, 0x70, 0x5a, 0x74, 0xfa, 0x64, - 0xdd, 0xb6, 0xf8, 0x4a, 0xbb, 0xe9, 0xbf, 0x8a, 0x26, 0xdb, 0xe7, 0xdf, 0x98, 0x55, 0xa8, 0xbf, - 0x84, 0x4b, 0x97, 0x38, 0x9e, 0x26, 0x93, 0x76, 0x5e, 0x08, 0xf6, 0x4f, 0x7f, 0x12, 0x12, 0xdd, - 0xdd, 0x8d, 0x35, 0xf9, 0x65, 0x8a, 0x4c, 0xbe, 0x28, 0xaf, 0x17, 0x59, 0x58, 0xf0, 0x48, 0x74, - 0x97, 0xc3, 0xe5, 0x22, 0xd6, 0xb9, 0x86, 0x3b, 0xfe, 0x5b, 0xbf, 0xe0, 0x84, 0xae, 0xfb, 0xfc, - 0x4d, 0x15, 0x48, 0xa7, 0xfd, 0xf4, 0x13, 0xef, 0xa3, 0xa7, 0x1f, 0x20, 0x5a, 0xa9, 0xa1, 0xf9, - 0x48, 0x95, 0xeb, 0x82, 0x42, 0xee, 0x86, 0xc7, 0xde, 0x7c, 0xfc, 0x95, 0xa3, 0x24, 0xd7, 0x3e, - 0x0a, 0x6d, 0x57, 0xfd, 0xd6, 0xdf, 0xc1, 0x76, 0xea, 0x9e, 0x9a, 0x7a, 0xf8, 0x24, 0xed, 0xa5, - 0xaf, 0x98, 0xaf, 0xbf, 0xab, 0xbe, 0x1e, 0xcb, 0xe8, 0xdb, 0x8e, 0x69, 0xe9, 0xd5, 0xba, 0x8f, - 0xeb, 0xeb, 0x82, 0x0b, 0x52, 0x77, 0x66, 0x8b, 0x74, 0x99, 0x53, 0xfd, 0x25, 0x92, 0x4f, 0xfa, - 0xe8, 0xae, 0x57, 0x21, 0x2a, 0xff, 0x05, 0x44, 0x97, 0x69, 0x0c, 0x79, 0xb5, 0xd6, 0x4c, 0xbb, - 0x8f, 0x2f, 0x6d, 0x2f, 0x04, 0x85, 0xcb, 0x94, 0xec, 0x21, 0xca, 0x2a, 0xb5, 0x58, 0x9b, 0xe5, - 0xe5, 0x91, 0x38, 0xce, 0x5d, 0x6a, 0x1d, 0xef, 0x7b, 0xf9, 0xb5, 0xa9, 0x39, 0xb5, 0xa9, 0xba, - 0xbb, 0xe2, 0xfc, 0x5e, 0xab, 0xf7, 0x3a, 0x18, 0x48, 0xa6, 0xe6, 0x1f, 0xc7, 0xb7, 0xc4, 0xf8, - 0x99, 0x30, 0x88, 0xa1, 0xd6, 0xd4, 0xbe, 0x66, 0x29, 0x71, 0x22, 0x6f, 0xbf, 0x07, 0xbc, 0x70, - 0xef, 0x31, 0x5e, 0xd5, 0x73, 0x55, 0x73, 0x72, 0x52, 0xa5, 0xf0, 0x9d, 0xcb, 0x87, 0xcf, 0x6c, - 0x68, 0xcf, 0xc4, 0x4c, 0xc7, 0x21, 0x05, 0x2f, 0xdc, 0x99, 0xe5, 0xe6, 0x17, 0xcd, 0xfc, 0xc7, - 0xe6, 0xf8, 0x81, 0x26, 0x19, 0xbb, 0xe2, 0x20, 0x88, 0x89, 0x1a, 0x9b, 0x9f, 0x19, 0x78, 0xea, - 0xda, 0xc7, 0xb0, 0x9a, 0xa6, 0x54, 0x96, 0x3c, 0xfb, 0x07, 0xee, 0x49, 0x88, 0x10, 0x52, 0xe1, - 0x23, 0x5c, 0xde, 0x26, 0x2b, 0xbb, 0xca, 0x72, 0x49, 0xf0, 0x88, 0x50, 0xd8, 0xac, 0x56, 0x34, - 0xb1, 0xbd, 0x4c, 0xbf, 0x27, 0xd2, 0x7b, 0x51, 0xce, 0x08, 0x02, 0x23, 0xa3, 0x8a, 0x3b, 0xe3, - 0x31, 0x9b, 0x0c, 0xba, 0x5b, 0xb8, 0x5f, 0x08, 0x85, 0x25, 0x13, 0xf0, 0x37, 0x78, 0x70, 0xb8, - 0x96, 0x2e, 0x84, 0x0f, 0x52, 0x8a, 0xe5, 0xe5, 0xac, 0x18, 0x75, 0x7f, 0x04, 0x6d, 0x69, 0x22, - 0xdf, 0x12, 0x14, 0xee, 0xf7, 0x3f, 0x8f, 0x12, 0xd0, 0xaf, 0x36, 0x52, 0x5b, 0x47, 0xff, 0xdf, - 0x2c, 0x98, 0x6e, 0xb8, 0x73, 0x98, 0xab, 0x5b, 0xe6, 0x3f, 0x2f, 0xf1, 0x7d, 0xdf, 0x77, 0x7c, - 0xbc, 0x74, 0xd1, 0xf8, 0x46, 0x86, 0x4e, 0x4c, 0x67, 0x4d, 0xee, 0xff, 0x18, 0x64, 0xe9, 0x0a, - 0xc6, 0xf2, 0x5a, 0x28, 0xf7, 0x2f, 0x9e, 0x52, 0x4b, 0xc9, 0xae, 0xa7, 0x6a, 0xcf, 0x8b, 0x29, - 0xe0, 0xec, 0x83, 0xa9, 0x9b, 0x17, 0xc2, 0x13, 0x7d, 0x5b, 0x56, 0x63, 0x9e, 0x5b, 0x31, 0x2f, - 0x2d, 0xf7, 0x51, 0x3f, 0x9a, 0x7c, 0x59, 0x37, 0x11, 0x15, 0x8d, 0x26, 0x33, 0x0d, 0x51, 0xae, - 0xf8, 0x98, 0xe3, 0x78, 0x51, 0x58, 0x1d, 0x9a, 0xb4, 0x30, 0x1a, 0xfb, 0x7f, 0x10, 0x0b, 0x0a, - 0x4c, 0x26, 0x6b, 0x26, 0x6f, 0x77, 0x1e, 0x09, 0x62, 0xe2, 0x43, 0xe9, 0x41, 0xc4, 0x43, 0x2f, - 0xb6, 0x38, 0x88, 0x2b, 0x8a, 0x5a, 0x6b, 0x4a, 0x0e, 0x8f, 0x77, 0x66, 0x91, 0x30, 0xf9, 0x7a, - 0x5f, 0x85, 0x34, 0xda, 0x2f, 0x37, 0x2c, 0xdf, 0xc9, 0x6b, 0x3b, 0xbe, 0x6d, 0x31, 0xc2, 0x21, - 0x01, 0xb3, 0x50, 0x0b, 0x1d, 0x2b, 0x14, 0x25, 0x13, 0x05, 0x80, 0x28, 0x41, 0x10, 0xb5, 0x66, - 0x88, 0x85, 0x80, 0x90, 0xd1, 0x70, 0xb5, 0x88, 0x00, 0x6a, 0x4d, 0xd0, 0x5e, 0x44, 0x77, 0x58, - 0x6a, 0xa2, 0x88, 0x4a, 0x1a, 0xb4, 0x9a, 0x1c, 0x1b, 0x17, 0x98, 0x49, 0xc4, 0x3d, 0x05, 0xdc, - 0x25, 0xf5, 0x5a, 0x78, 0x34, 0x44, 0x17, 0xc6, 0xf8, 0x62, 0x78, 0xda, 0x62, 0xb7, 0xb0, 0x80, - 0x91, 0xb6, 0x46, 0xf1, 0x22, 0xe2, 0x51, 0x2f, 0x1f, 0xc6, 0xf1, 0x46, 0x7f, 0x1f, 0x81, 0xdb, - 0x86, 0x02, 0x75, 0x89, 0xff, 0x02, 0x8e, 0x2f, 0x94, 0x0d, 0xa9, 0x3e, 0x19, 0xa7, 0x8a, 0x82, - 0x1f, 0x34, 0xe3, 0xdc, 0x00, 0x87, 0xa7, 0x53, 0xd7, 0x35, 0x9a, 0x51, 0x3c, 0x00, 0x21, 0x78, - 0x68, 0x32, 0x3c, 0xc8, 0x4b, 0x11, 0xbd, 0xe6, 0x6e, 0xe2, 0xfc, 0x22, 0x14, 0x88, 0x1c, 0x2c, - 0x19, 0x60, 0xc4, 0x0f, 0x2d, 0x85, 0x1e, 0x34, 0x5b, 0x32, 0x12, 0xe8, 0xf7, 0x2f, 0xb0, 0xb5, - 0x43, 0x6e, 0x0e, 0x15, 0x40, 0x8f, 0xa2, 0x91, 0x03, 0x6f, 0x23, 0x1f, 0x12, 0x32, 0xe1, 0xb0, - 0x77, 0x7c, 0xb2, 0x29, 0x90, 0xb1, 0x54, 0xae, 0x22, 0x3c, 0xaf, 0x61, 0xdc, 0x36, 0x1c, 0x65, - 0xe4, 0xb3, 0xa8, 0xdc, 0xf3, 0x98, 0x40, 0x32, 0x34, 0x92, 0xa5, 0x6b, 0x00, 0xfd, 0x97, 0x05, - 0xb8, 0x14, 0x10, 0x2e, 0x2c, 0xdd, 0x52, 0x9c, 0xc8, 0x2e, 0xe2, 0xdd, 0x92, 0x77, 0x36, 0xdc, - 0x9b, 0x46, 0xe0, 0x0b, 0x62, 0xb3, 0x56, 0x3f, 0xf0, 0xd9, 0x53, 0x85, 0xc1, 0x20, 0xc9, 0x6c, - 0x2d, 0xa9, 0x14, 0x61, 0x47, 0xb0, 0xb7, 0x04, 0xb6, 0x45, 0xd6, 0x55, 0xbe, 0xd3, 0xbe, 0x09, - 0xcb, 0x59, 0x98, 0xaa, 0xd3, 0xa5, 0xc6, 0x54, 0x9d, 0x0b, 0xd0, 0xc9, 0x88, 0x88, 0xbd, 0x63, - 0xd5, 0x3f, 0x19, 0x74, 0xad, 0xf6, 0x8e, 0xc6, 0x9b, 0x68, 0x97, 0xe7, 0x9f, 0x0a, 0xeb, 0x4d, - 0x56, 0xa5, 0x4f, 0x92, 0x28, 0xe2, 0xbf, 0x09, 0x93, 0x55, 0x55, 0xfc, 0xa7, 0xc7, 0x96, 0x57, - 0x21, 0x9e, 0x7f, 0xf0, 0x96, 0xd2, 0x5a, 0x4b, 0xf3, 0x56, 0xbf, 0x2e, 0x74, 0x93, 0xa4, 0x5c, - 0x29, 0xbd, 0xea, 0xeb, 0x15, 0xee, 0xfb, 0x9f, 0x5e, 0xf8, 0x2d, 0x12, 0x0e, 0xd8, 0x7f, 0x29, - 0x3d, 0x79, 0x7c, 0x29, 0x12, 0x70, 0xbe, 0x60, 0xd5, 0x78, 0xaa, 0x5e, 0xf7, 0x73, 0xfb, 0x49, - 0xe2, 0xbc, 0xdc, 0x44, 0x6c, 0xb5, 0x1b, 0x49, 0x91, 0x9a, 0x01, 0x5b, 0x18, 0xa2, 0x1e, 0x78, - 0xdd, 0x3c, 0x6c, 0x76, 0xc8, 0xab, 0xf2, 0xfb, 0xf3, 0xed, 0xaf, 0x1e, 0x49, 0x54, 0xf6, 0x92, - 0x49, 0xc5, 0x74, 0x3f, 0x18, 0x65, 0x54, 0x96, 0x93, 0x71, 0x59, 0x70, 0xbf, 0x7f, 0xfe, 0x1a, - 0x08, 0xc0, 0x44, 0x2b, 0x4c, 0x7d, 0xee, 0x0c, 0x73, 0x44, 0xf5, 0x0d, 0x3e, 0xce, 0x22, 0x0a, - 0xc7, 0x65, 0xcf, 0x84, 0x78, 0x42, 0xce, 0x55, 0x79, 0x40, 0x12, 0x23, 0x39, 0xed, 0x57, 0xde, - 0x24, 0x28, 0x5a, 0xd5, 0x54, 0xac, 0xcd, 0xb3, 0xf1, 0x7b, 0xaf, 0x96, 0xe5, 0xf4, 0xc1, 0xda, - 0x87, 0x0f, 0xe1, 0xb2, 0x13, 0x01, 0x91, 0xe4, 0x40, 0x07, 0x1c, 0xf1, 0xdc, 0x14, 0xe3, 0x6b, - 0xff, 0xa2, 0xbd, 0x62, 0x01, 0x4e, 0x67, 0x2f, 0x31, 0x07, 0x7d, 0xd8, 0xf0, 0x40, 0x34, 0x87, - 0x8c, 0xf1, 0x8a, 0xc2, 0xae, 0x17, 0xb4, 0x39, 0x60, 0x54, 0x9c, 0x6d, 0xa6, 0xe0, 0x1b, 0x9f, - 0x21, 0x11, 0xde, 0xda, 0x3c, 0xc2, 0x4a, 0x57, 0xf8, 0x40, 0x27, 0x23, 0x8f, 0xd1, 0xfb, 0x67, - 0x97, 0x38, 0x40, 0x29, 0xd0, 0x41, 0x10, 0xbc, 0x65, 0x7a, 0xe0, 0x64, 0xc1, 0x51, 0x75, 0xe4, - 0xce, 0x24, 0xc9, 0xb0, 0x81, 0x67, 0xb7, 0xdc, 0x5d, 0x26, 0xb1, 0x24, 0x9f, 0x7a, 0x60, 0xe1, - 0x91, 0x9d, 0x98, 0x0b, 0x00, 0x9c, 0x47, 0x76, 0xe7, 0x06, 0xfc, 0xd6, 0xc7, 0x70, 0x31, 0x91, - 0x82, 0x8d, 0x6c, 0xc5, 0xd4, 0xd6, 0x1c, 0x87, 0xad, 0xa6, 0xcd, 0x91, 0x8f, 0xa4, 0x6a, 0xba, - 0x43, 0xec, 0x69, 0xf8, 0x64, 0x6e, 0x73, 0x16, 0x74, 0x67, 0xac, 0x47, 0x83, 0x23, 0xe0, 0xeb, - 0xd5, 0x19, 0xe2, 0xd0, 0xb0, 0xe5, 0x86, 0x63, 0x7d, 0xaa, 0x51, 0xe2, 0xce, 0x2a, 0x5e, 0x0c, - 0x75, 0x95, 0x3f, 0x7c, 0xfc, 0x2a, 0x36, 0x37, 0x8f, 0x12, 0x5a, 0xfb, 0x71, 0x6e, 0x4e, 0x0c, - 0x29, 0xcf, 0xbb, 0x54, 0xd7, 0xcb, 0x93, 0xf3, 0x7f, 0x26, 0x95, 0xaf, 0x04, 0x92, 0x4b, 0xe1, - 0x13, 0xca, 0x33, 0x63, 0x2a, 0xcb, 0x90, 0x4c, 0xec, 0xb1, 0xfe, 0x42, 0x21, 0xa4, 0x87, 0xf0, - 0x87, 0x77, 0xbb, 0x95, 0x86, 0x34, 0xab, 0xf8, 0x23, 0x2d, 0x35, 0xc5, 0xf0, 0x5b, 0x66, 0x6a, - 0x52, 0x5b, 0x76, 0x3e, 0x14, 0x37, 0x9a, 0x89, 0xbe, 0x7a, 0x37, 0x1f, 0x2d, 0x36, 0x7c, 0x15, - 0x74, 0x33, 0xd0, 0xff, 0xb3, 0x39, 0x07, 0x73, 0xc0, 0x9f, 0xe3, 0x6d, 0xab, 0x4a, 0xd0, 0xe6, - 0x17, 0xe3, 0x90, 0x85, 0x59, 0x4d, 0x53, 0x3f, 0xcb, 0x4a, 0x25, 0xf0, 0x81, 0x72, 0x37, 0x59, - 0x1a, 0x8a, 0x9b, 0x0d, 0xaf, 0x19, 0x45, 0x55, 0x54, 0x35, 0xa3, 0x46, 0xcd, 0x9a, 0x44, 0x44, - 0xc7, 0x7e, 0x0a, 0x09, 0xb3, 0x74, 0x22, 0xee, 0xef, 0x82, 0x2e, 0xc6, 0xbd, 0xe2, 0x46, 0x14, - 0xbc, 0xe4, 0x1d, 0xee, 0xfe, 0x66, 0x1c, 0xf9, 0x93, 0x3c, 0x16, 0x1e, 0x9d, 0x2c, 0x1f, 0xe4, - 0xad, 0xd2, 0xb3, 0xe0, 0xaf, 0x74, 0xfb, 0x69, 0xe3, 0x6a, 0xdc, 0x6f, 0x82, 0x8b, 0x4b, 0x2a, - 0xb0, 0xdf, 0x65, 0xd7, 0xc6, 0x1c, 0x29, 0x59, 0xc6, 0x92, 0x9b, 0x8c, 0xeb, 0x4f, 0x6f, 0x42, - 0xb9, 0xd5, 0x78, 0x2b, 0x10, 0x56, 0x30, 0x6a, 0x46, 0x75, 0x8a, 0xec, 0x43, 0xd4, 0x6c, 0x6f, - 0x82, 0xa3, 0x3d, 0xdc, 0xbd, 0x2f, 0x2d, 0xff, 0x7c, 0x15, 0xce, 0x20, 0x9e, 0x26, 0xf5, 0x56, - 0x30, 0x84, 0xae, 0x87, 0x1c, 0x92, 0x03, 0xee, 0x22, 0x14, 0x3f, 0x1c, 0xb9, 0xa2, 0x69, 0x03, - 0xb9, 0x83, 0xa9, 0x42, 0xa3, 0x99, 0x98, 0x95, 0x47, 0xc3, 0x18, 0x88, 0x2a, 0x30, 0x93, 0x6e, - 0x67, 0xe5, 0xe3, 0x25, 0xec, 0x68, 0x59, 0xf6, 0x91, 0x32, 0x70, 0x56, 0xb9, 0x28, 0x3e, 0x45, - 0x27, 0x86, 0xcf, 0xa1, 0xab, 0x1c, 0x87, 0x34, 0xa1, 0x66, 0xfe, 0x9c, 0x07, 0xb4, 0xf6, 0x3f, - 0x10, 0x63, 0x98, 0xa2, 0x9c, 0xc6, 0xed, 0x7c, 0x68, 0x92, 0xe2, 0x58, 0xac, 0x2a, 0xaf, 0x4a, - 0x3a, 0x70, 0xf6, 0xd5, 0x7d, 0x34, 0xef, 0xc4, 0x07, 0xc4, 0x33, 0xfc, 0x4e, 0x95, 0x33, 0x25, - 0x65, 0xa4, 0x13, 0x30, 0x57, 0x88, 0x9d, 0xfd, 0xb7, 0x5f, 0x19, 0x0e, 0x90, 0xd6, 0x7a, 0x3e, - 0x0b, 0x7f, 0x5f, 0x18, 0xfe, 0x5e, 0xa6, 0xf3, 0x65, 0x94, 0x57, 0x88, 0x10, 0x14, 0x3e, 0x90, - 0xac, 0x40, 0x0f, 0xc5, 0x18, 0x81, 0xc1, 0x41, 0x96, 0x03, 0x10, 0x0c, 0x0f, 0x70, 0x50, 0x65, - 0x83, 0x3d, 0xc3, 0x35, 0x83, 0x18, 0x1f, 0x1d, 0xf1, 0x01, 0x43, 0x24, 0x28, 0xcb, 0x1b, 0x82, - 0x80, 0xed, 0x04, 0x48, 0x96, 0x74, 0x66, 0x52, 0x00, 0xf2, 0x8d, 0xe9, 0x97, 0x1f, 0x0e, 0xee, - 0xe1, 0xcb, 0x16, 0x14, 0x77, 0x52, 0x5b, 0xd2, 0x35, 0xf8, 0xdb, 0x7b, 0x78, 0x03, 0x82, 0x69, - 0x0d, 0xb4, 0xf8, 0x03, 0x82, 0xbf, 0x10, 0xeb, 0x72, 0x43, 0xc0, 0x6c, 0x4c, 0x62, 0x82, 0xd5, - 0xfa, 0x4e, 0x1a, 0x51, 0x01, 0xa3, 0x15, 0xf4, 0x28, 0x76, 0xc0, 0x8a, 0x41, 0x7c, 0x71, 0xd8, - 0xaf, 0x78, 0xc4, 0x4a, 0x14, 0x6f, 0x21, 0xf2, 0x98, 0x32, 0x57, 0x2d, 0xda, 0x29, 0x81, 0xf6, - 0x92, 0x00, 0xc8, 0xde, 0x89, 0x03, 0xe4, 0x84, 0xf1, 0xe1, 0x01, 0xbc, 0xc8, 0x65, 0xb1, 0x6a, - 0x50, 0xb6, 0xf1, 0x58, 0xad, 0x1f, 0x01, 0xfa, 0x8d, 0x11, 0xb4, 0x94, 0xc0, 0x7a, 0x19, 0x5d, - 0x29, 0xcb, 0x62, 0xb0, 0x19, 0x7f, 0x8a, 0xdb, 0xf0, 0x48, 0x56, 0xb1, 0x5e, 0xbe, 0x15, 0xcf, - 0x1d, 0x13, 0x48, 0xa4, 0x17, 0xdc, 0xdd, 0xbf, 0xc9, 0x63, 0x9d, 0xff, 0x04, 0x7a, 0x6f, 0x6a, - 0xe0, 0xbe, 0x96, 0xdb, 0x4d, 0x24, 0x92, 0xb6, 0xc9, 0xb6, 0xdb, 0x6d, 0x34, 0xfd, 0x53, 0x1f, - 0x7d, 0x21, 0x6b, 0xc5, 0x55, 0x9e, 0xfa, 0x7e, 0x27, 0x7a, 0xd2, 0x4b, 0xeb, 0xdf, 0x27, 0x74, - 0xfc, 0x35, 0xd5, 0x57, 0xd3, 0x4d, 0x34, 0xfc, 0x57, 0x77, 0xda, 0x6b, 0xc1, 0x0e, 0x95, 0xa7, - 0xf8, 0x23, 0xdd, 0xa6, 0x9f, 0xe6, 0xdb, 0x33, 0x34, 0x7e, 0x09, 0xe7, 0xd3, 0xe7, 0x79, 0xf7, - 0xbe, 0x0a, 0xfa, 0x9b, 0xdb, 0x59, 0x7a, 0x7f, 0x7c, 0xd4, 0x3a, 0x1a, 0x7e, 0x26, 0xdd, 0xbe, - 0x5f, 0xf0, 0x99, 0xa8, 0x6a, 0x86, 0x57, 0xb1, 0xd3, 0xf1, 0xfb, 0x6c, 0x6d, 0x31, 0xa4, 0xc7, - 0xcc, 0xc1, 0x99, 0xf0, 0x9e, 0xf7, 0x6e, 0xff, 0x05, 0x17, 0x6e, 0xed, 0x6a, 0xef, 0x85, 0x0a, - 0xf6, 0xec, 0x8d, 0xee, 0xea, 0xdd, 0xec, 0x86, 0x10, 0xb4, 0xbb, 0xe0, 0x9a, 0xa8, 0x1d, 0x1f, - 0x54, 0xfb, 0xe0, 0xac, 0x8b, 0x87, 0xd5, 0xbc, 0xa5, 0x6a, 0xd7, 0x62, 0xb8, 0x2f, 0x2c, 0x30, - 0xdd, 0x96, 0x25, 0x69, 0xd3, 0xc3, 0x5d, 0x93, 0xa7, 0xfe, 0x0a, 0xc8, 0xc5, 0x53, 0xac, 0xca, - 0x1f, 0x5a, 0xf5, 0xf2, 0x6a, 0xed, 0xf8, 0x2e, 0xad, 0x2b, 0xb6, 0x93, 0x7f, 0x1e, 0x14, 0x87, - 0x5d, 0x28, 0x7a, 0x84, 0x1d, 0x0d, 0x31, 0x24, 0x63, 0x0d, 0xd9, 0x0a, 0x9d, 0x49, 0xdc, 0xf9, - 0x50, 0xb4, 0x37, 0x7c, 0x13, 0x16, 0xc4, 0xb9, 0x23, 0xb3, 0xeb, 0xf3, 0x1f, 0x0a, 0x67, 0xc7, - 0xda, 0x7e, 0x6a, 0xd0, 0xd6, 0x4a, 0x6d, 0x6b, 0xa4, 0xc7, 0x89, 0x04, 0xe7, 0x21, 0x11, 0x86, - 0x5b, 0xb7, 0x7e, 0xf1, 0x23, 0xaa, 0x19, 0x32, 0x5b, 0xcc, 0x1c, 0xa9, 0x29, 0xa4, 0x9f, 0x12, - 0x30, 0x8a, 0xdb, 0x69, 0x72, 0x22, 0x63, 0xee, 0xe5, 0x63, 0xfc, 0x65, 0xcc, 0x4d, 0x94, 0x36, - 0xb1, 0x0c, 0x0a, 0x0c, 0xa7, 0x54, 0x74, 0x95, 0x34, 0x2e, 0x78, 0x98, 0x2b, 0xd0, 0xf2, 0xdb, - 0xc6, 0x76, 0x49, 0xeb, 0x43, 0x27, 0x43, 0xd2, 0xbe, 0x24, 0x25, 0xab, 0x7e, 0x6d, 0xf0, 0xe1, - 0x9b, 0x9b, 0x39, 0x63, 0x5a, 0x54, 0x69, 0xf8, 0x99, 0x8e, 0x5f, 0xfc, 0x10, 0x4e, 0x48, 0x1d, - 0x46, 0xee, 0xcf, 0xa6, 0x91, 0x77, 0xd3, 0x8f, 0xc0, 0x51, 0x93, 0x0b, 0xe2, 0x20, 0xb0, 0x8f, - 0x15, 0xd9, 0xcf, 0xb6, 0xae, 0xdb, 0x0f, 0x05, 0xe5, 0xaa, 0x1b, 0x4e, 0x79, 0x06, 0x95, 0x90, - 0x34, 0xa1, 0xf6, 0xc1, 0x6e, 0x87, 0xe0, 0xb8, 0x97, 0x3a, 0x26, 0x4f, 0xb2, 0xaf, 0x82, 0x02, - 0x2d, 0x08, 0x9a, 0x61, 0x65, 0x1c, 0x4c, 0xc4, 0x5c, 0x7b, 0xf5, 0x79, 0xc3, 0x20, 0x9a, 0x6c, - 0x39, 0xaf, 0xba, 0x6f, 0xf0, 0x40, 0x70, 0x9d, 0xae, 0xd1, 0xe9, 0x05, 0x2d, 0xd6, 0x3b, 0x73, - 0xf7, 0x77, 0x46, 0xd5, 0x10, 0x7b, 0x4b, 0xfc, 0x5f, 0xc4, 0x8d, 0x21, 0xc3, 0x85, 0xb3, 0xc7, - 0x09, 0xd5, 0x2d, 0x8f, 0xd7, 0x3d, 0x69, 0xc8, 0x60, 0x28, 0x7b, 0x2e, 0x4a, 0xa2, 0xa1, 0xe0, - 0x68, 0xa3, 0x94, 0x9c, 0x0f, 0x03, 0x8b, 0x30, 0xab, 0x1e, 0x5d, 0xb9, 0xff, 0xc6, 0x4e, 0x79, - 0xf5, 0x25, 0x83, 0x3c, 0x2a, 0x4b, 0x4f, 0xa9, 0xc3, 0xd8, 0xb3, 0xdc, 0xf6, 0xc5, 0x61, 0x61, - 0x42, 0x19, 0x40, 0xfc, 0xe1, 0x00, 0xa1, 0x69, 0x73, 0xa7, 0xc1, 0x81, 0xdf, 0x7d, 0x83, 0x5e, - 0xbe, 0xc1, 0xa1, 0x51, 0x74, 0xc6, 0xa2, 0xbb, 0xb3, 0xe5, 0x9c, 0x3c, 0xb5, 0x16, 0x28, 0xdf, - 0xe3, 0x74, 0x50, 0xfc, 0x60, 0xc7, 0x73, 0x93, 0xb7, 0x6c, 0xf8, 0x0f, 0x61, 0x5b, 0x20, 0x7f, - 0xc8, 0xbd, 0xb6, 0xc8, 0x8d, 0x1b, 0xff, 0xc1, 0x19, 0x5f, 0x77, 0x7c, 0x14, 0x77, 0x6d, 0xe5, - 0xf7, 0x1e, 0xb8, 0x7c, 0x34, 0x6e, 0x6e, 0xad, 0xb6, 0x9a, 0x7f, 0xe7, 0x3a, 0xb6, 0xda, 0x69, - 0xfb, 0xe2, 0x48, 0x91, 0x71, 0xfd, 0xd1, 0x78, 0xb2, 0x96, 0xd2, 0xad, 0xab, 0xae, 0x36, 0xee, - 0x9f, 0x69, 0x36, 0x53, 0x47, 0x3b, 0x1a, 0xa7, 0x3e, 0xb5, 0xfe, 0x13, 0x34, 0x57, 0xd1, 0xa4, - 0xcd, 0xf1, 0x25, 0x74, 0xad, 0x51, 0x32, 0x4f, 0xc1, 0x0d, 0x0d, 0x0e, 0xd6, 0x1f, 0x09, 0xd9, - 0x37, 0x43, 0x4d, 0xed, 0x78, 0x48, 0x89, 0x57, 0x2b, 0x0c, 0xd9, 0xb2, 0x4f, 0xc9, 0x93, 0xfe, - 0x62, 0xd2, 0x27, 0xb5, 0xd9, 0x24, 0x7f, 0xe1, 0xaa, 0xd0, 0xe9, 0xa9, 0x21, 0x24, 0x11, 0x7f, - 0x9e, 0xb1, 0xde, 0xc7, 0xfe, 0xee, 0xe5, 0xff, 0x86, 0xb5, 0x5a, 0x9b, 0xdb, 0xff, 0x82, 0x69, - 0x21, 0x96, 0x35, 0x5f, 0xbe, 0x8b, 0x95, 0x71, 0x06, 0xe7, 0xc6, 0xb7, 0xf1, 0xc5, 0x6e, 0xd3, - 0x35, 0xab, 0x33, 0x66, 0xad, 0x78, 0x24, 0xd2, 0x4b, 0x1c, 0xf8, 0x42, 0x92, 0x02, 0x97, 0x12, - 0xd2, 0xa4, 0x83, 0xbf, 0x9c, 0xaa, 0xf2, 0xc3, 0xfe, 0x3c, 0x88, 0x6d, 0xd9, 0xa1, 0x85, 0xfd, - 0x3b, 0xc8, 0xe4, 0x06, 0x36, 0x83, 0x69, 0x8f, 0x12, 0x14, 0xbc, 0x91, 0xca, 0x29, 0x2a, 0x6c, - 0xc0, 0x97, 0xc7, 0x13, 0xe2, 0x41, 0x48, 0x7b, 0x12, 0x8e, 0xbe, 0x7b, 0xd1, 0xe9, 0x40, 0xac, - 0x86, 0x5c, 0x8b, 0x6a, 0x8f, 0x8b, 0xc4, 0x05, 0x2d, 0xaa, 0x60, 0x8e, 0xa3, 0xe5, 0x5d, 0x50, - 0x0d, 0xfc, 0x09, 0x8c, 0x0a, 0xe3, 0xcf, 0x68, 0xb4, 0x40, 0xfe, 0x06, 0x47, 0x69, 0x28, 0x0b, - 0x00, 0xa2, 0x29, 0xc5, 0x1c, 0x00, 0xe8, 0x69, 0x4a, 0x61, 0x86, 0x49, 0x97, 0x10, 0x10, 0xad, - 0x0f, 0x65, 0xc8, 0x86, 0xa3, 0x1b, 0x84, 0x3f, 0x44, 0x9f, 0xfc, 0x3e, 0xce, 0xbd, 0xbc, 0x48, - 0x90, 0x88, 0xbc, 0xfe, 0xca, 0x5c, 0x4b, 0x9b, 0x71, 0x02, 0x42, 0x44, 0x79, 0x7d, 0xf7, 0xf0, - 0x45, 0x2b, 0x0f, 0x6b, 0xbc, 0x40, 0x2b, 0x21, 0x33, 0x9d, 0xb2, 0x62, 0x93, 0x73, 0x02, 0x02, - 0x83, 0xca, 0x1a, 0x26, 0x8b, 0xba, 0x61, 0x05, 0x34, 0xf2, 0x3d, 0xf0, 0xe9, 0x28, 0x91, 0x85, - 0x49, 0x91, 0x31, 0x31, 0xc7, 0x07, 0x56, 0xb9, 0x60, 0x67, 0xcc, 0x4a, 0x3b, 0xd5, 0x3c, 0xd4, - 0xff, 0x82, 0xa2, 0x9b, 0x2b, 0xb6, 0x6a, 0x6f, 0xbe, 0x1f, 0x0a, 0x69, 0x4b, 0xdd, 0x0f, 0xa2, - 0xcf, 0xdb, 0x69, 0x92, 0x87, 0x6a, 0x18, 0x5f, 0x04, 0x10, 0x2f, 0xef, 0x58, 0x28, 0xcd, 0x5f, - 0x1a, 0x41, 0xb8, 0xe1, 0x2b, 0x7d, 0x2a, 0x05, 0x28, 0xfb, 0x4d, 0x3f, 0xf1, 0xa4, 0xf0, 0xab, - 0x18, 0x87, 0x93, 0x43, 0x1e, 0x5b, 0xa2, 0x15, 0xc6, 0x4b, 0x0a, 0xb7, 0x27, 0x92, 0x0b, 0xe7, - 0x46, 0x0b, 0xc8, 0x33, 0xe1, 0x23, 0xd5, 0x3e, 0x0e, 0xd3, 0x2c, 0x38, 0x91, 0xa6, 0x0d, 0x54, - 0x27, 0x2a, 0x4a, 0x07, 0x05, 0x86, 0xe1, 0xc1, 0x45, 0xe3, 0x1a, 0xc6, 0xc8, 0xb3, 0x22, 0x95, - 0x57, 0x67, 0x18, 0x47, 0x21, 0x20, 0x22, 0xb2, 0xa2, 0x74, 0x9a, 0x65, 0x8f, 0xf8, 0x81, 0x23, - 0x49, 0x92, 0x12, 0xea, 0x35, 0xcc, 0x49, 0xd2, 0xc6, 0x1f, 0xaf, 0x6b, 0x63, 0xa5, 0x42, 0x70, - 0xc4, 0x3c, 0x82, 0xe1, 0x8e, 0x33, 0xf9, 0xb4, 0xdb, 0xe1, 0x49, 0xfe, 0x59, 0x9f, 0xe7, 0x58, - 0x3c, 0x03, 0xc1, 0xd8, 0x92, 0x61, 0xc7, 0x03, 0xb4, 0x99, 0x28, 0xb8, 0xd8, 0x26, 0x29, 0x35, - 0xbb, 0xa5, 0x10, 0xec, 0xba, 0x51, 0x1a, 0x04, 0x65, 0x07, 0xc2, 0x85, 0xc1, 0x99, 0xcd, 0x75, - 0xd3, 0x11, 0x61, 0xe4, 0x23, 0x6d, 0x74, 0xbf, 0xae, 0x1a, 0xa8, 0xdc, 0xb3, 0xe4, 0x4c, 0x31, - 0xf3, 0x10, 0xe1, 0xd5, 0x35, 0x16, 0xe9, 0x9d, 0xf0, 0x58, 0x26, 0x2b, 0x97, 0xef, 0x6f, 0xab, - 0x24, 0xbc, 0x4c, 0x15, 0x0a, 0xdf, 0xa8, 0xc7, 0x3a, 0x4a, 0xba, 0xaa, 0x55, 0x89, 0x82, 0xaa, - 0x6e, 0x84, 0x9a, 0x81, 0xda, 0xa2, 0x72, 0x89, 0x1a, 0xfb, 0xe0, 0x9a, 0xed, 0xbe, 0x4e, 0xe4, - 0x61, 0x47, 0x62, 0x3e, 0x11, 0x3d, 0x24, 0xe8, 0x8f, 0xa9, 0x4b, 0x24, 0xca, 0xa6, 0xbc, 0x77, - 0x2c, 0x5f, 0x8d, 0x5d, 0x7c, 0xbf, 0xe0, 0xa3, 0x4d, 0xda, 0x77, 0x4b, 0x87, 0xc1, 0x7d, 0x34, - 0xba, 0x54, 0xb5, 0x56, 0xe9, 0xff, 0x88, 0x22, 0x2a, 0x27, 0xda, 0x6b, 0xd7, 0xab, 0x8b, 0x3d, - 0xb6, 0xf9, 0x60, 0xbe, 0x32, 0xa3, 0x74, 0xf6, 0x8e, 0xce, 0xdb, 0x74, 0x31, 0x36, 0x7f, 0x17, - 0x64, 0xda, 0x77, 0x3d, 0x2c, 0x7e, 0x23, 0x64, 0x92, 0x92, 0x3f, 0xe6, 0x9f, 0xa3, 0xb3, 0xf7, - 0xdd, 0x3f, 0x15, 0x9f, 0x26, 0xb9, 0xf2, 0x9f, 0x8b, 0xf2, 0x35, 0xad, 0x1b, 0x1f, 0x96, 0xf6, - 0xfe, 0x0c, 0x08, 0x7b, 0x65, 0xb7, 0x49, 0x55, 0x27, 0x3e, 0x7f, 0xe0, 0x87, 0x49, 0xab, 0x1f, - 0x31, 0x76, 0x9a, 0xf0, 0x4e, 0x4d, 0x5b, 0x4a, 0xbc, 0xc7, 0xc1, 0x1e, 0x45, 0x04, 0xcf, 0xbe, - 0x0a, 0xa4, 0x97, 0xd5, 0x94, 0xdc, 0x97, 0x38, 0x7d, 0x4a, 0x0f, 0x82, 0xbc, 0x99, 0x26, 0x52, - 0xbd, 0xb7, 0xb7, 0xc6, 0xd6, 0x95, 0x6b, 0x27, 0x5d, 0xa7, 0xa4, 0xb7, 0x4d, 0x7f, 0xc4, 0x59, - 0xcc, 0x96, 0xb4, 0x36, 0xbc, 0xa7, 0x59, 0x14, 0x7c, 0x69, 0xb5, 0x55, 0x17, 0x8b, 0xaa, 0xed, - 0x8d, 0x21, 0x77, 0x7d, 0xe5, 0xef, 0xe1, 0xfe, 0xa4, 0xd6, 0x78, 0xd6, 0xbb, 0xac, 0xdd, 0xff, - 0xf0, 0xa1, 0x62, 0xbd, 0xa5, 0x5d, 0x2b, 0x77, 0xbb, 0x1f, 0x26, 0xeb, 0xf0, 0xd5, 0xe8, 0x90, - 0x4b, 0xf7, 0x57, 0xf0, 0x4b, 0x48, 0x1d, 0xb3, 0x73, 0x14, 0x6a, 0xdb, 0xbe, 0x30, 0xc3, 0xb9, - 0x78, 0xdd, 0x37, 0x66, 0xc8, 0x9b, 0x37, 0x4c, 0x0a, 0x2a, 0xc7, 0x6f, 0xc2, 0x84, 0xd9, 0x19, - 0xfc, 0xf7, 0x2c, 0x9f, 0xd0, 0x24, 0x04, 0xb1, 0xcf, 0xce, 0x18, 0x79, 0x97, 0x83, 0xcd, 0x79, - 0x98, 0x1e, 0x4b, 0xc9, 0x43, 0xc2, 0x93, 0x60, 0x72, 0x2e, 0x78, 0x9c, 0x39, 0x27, 0xd8, 0xae, - 0x3f, 0x95, 0x24, 0x74, 0xca, 0x25, 0xd4, 0xc2, 0xce, 0xb1, 0xc5, 0xaf, 0x14, 0x73, 0x58, 0xac, - 0xe9, 0x62, 0x23, 0x9e, 0x22, 0x4b, 0xc1, 0xf2, 0xf1, 0x40, 0x74, 0xa5, 0x5a, 0xf2, 0x03, 0x4b, - 0xa7, 0x07, 0x88, 0x0a, 0x1f, 0x6d, 0x6b, 0x03, 0xc5, 0x85, 0x98, 0x87, 0xbd, 0x4b, 0xb1, 0xdb, - 0x22, 0xe2, 0x3a, 0x72, 0xc1, 0xdc, 0x2f, 0x39, 0x62, 0xf2, 0xf1, 0x00, 0x92, 0xd0, 0x74, 0x8c, - 0x9a, 0x70, 0xa8, 0x67, 0xc6, 0xf1, 0xb3, 0x90, 0x25, 0x7c, 0xae, 0xd9, 0x01, 0x9f, 0x90, 0xb0, - 0x02, 0xbf, 0x15, 0xb4, 0x0a, 0xbe, 0xc5, 0x71, 0x2c, 0x9a, 0x10, 0x6b, 0x57, 0x0c, 0x50, 0x35, - 0xc1, 0x3f, 0x02, 0x54, 0xdc, 0x1e, 0xe9, 0x09, 0xed, 0x92, 0x94, 0x00, 0x91, 0xe1, 0xec, 0x31, - 0xa3, 0x82, 0x91, 0xb3, 0xf1, 0xbe, 0xfe, 0x34, 0x97, 0xab, 0x28, 0x2c, 0x2c, 0x84, 0xe8, 0x7a, - 0xed, 0xc6, 0x71, 0x88, 0x52, 0x9d, 0xed, 0x7c, 0x6b, 0x8e, 0xfb, 0x24, 0x08, 0x4c, 0x7e, 0xbe, - 0xab, 0xb2, 0x09, 0x1a, 0x15, 0x07, 0x34, 0xb5, 0x11, 0x04, 0x75, 0xbc, 0x1a, 0x62, 0xa0, 0x5c, - 0x92, 0xd7, 0x04, 0x20, 0xa3, 0xe1, 0xff, 0xf8, 0xda, 0xa9, 0xda, 0x88, 0xec, 0x9b, 0xdf, 0x66, - 0x40, 0xf9, 0xad, 0x61, 0xc5, 0x77, 0x84, 0x4c, 0x37, 0xb6, 0x40, 0xcb, 0xf5, 0x6c, 0xc2, 0x75, - 0xea, 0xb9, 0x86, 0x2a, 0x0f, 0x59, 0x44, 0x23, 0xf8, 0xc9, 0xa1, 0x25, 0xd7, 0x20, 0x1b, 0xe3, - 0xb6, 0x29, 0x7f, 0x0c, 0x1d, 0x1b, 0xa3, 0x4e, 0xef, 0x31, 0x99, 0xbe, 0xcf, 0xe2, 0x30, 0xf8, - 0xf9, 0x77, 0x64, 0xd2, 0x54, 0x68, 0x6d, 0xcf, 0x2f, 0xc2, 0x1b, 0x69, 0xe1, 0x34, 0x9e, 0xdb, - 0x5f, 0x05, 0x44, 0xba, 0xb8, 0x74, 0x17, 0x66, 0x42, 0x6f, 0xb3, 0x63, 0x95, 0x88, 0x47, 0xfc, - 0x6b, 0xe0, 0xa6, 0x33, 0x2d, 0xd8, 0xed, 0x65, 0xb3, 0x5f, 0xb4, 0xd8, 0xf9, 0x9e, 0x20, 0x55, - 0xf6, 0x52, 0xbd, 0x86, 0xd3, 0x2f, 0x0e, 0xe9, 0xe4, 0xb8, 0x79, 0x91, 0xb0, 0xfd, 0xd0, 0xdc, - 0x7c, 0xd5, 0x1e, 0x20, 0xfe, 0x49, 0x57, 0x10, 0x25, 0x82, 0x75, 0x26, 0xe7, 0xe3, 0x4a, 0xab, - 0x52, 0xc9, 0x8c, 0xb3, 0x75, 0x8c, 0x8b, 0xca, 0x59, 0x79, 0x29, 0x66, 0xd2, 0xba, 0x75, 0xde, - 0x48, 0x8b, 0xd7, 0x15, 0x65, 0x32, 0x9e, 0x7d, 0x3e, 0xfe, 0x36, 0x6a, 0x45, 0x4e, 0x4c, 0x06, - 0x5a, 0x8d, 0xac, 0x9e, 0x48, 0x29, 0x8c, 0xb5, 0xc3, 0x8c, 0x56, 0x39, 0x9e, 0xfc, 0xf3, 0xa3, - 0xaf, 0x3e, 0xb5, 0xe2, 0x23, 0x71, 0x4f, 0x95, 0x55, 0xda, 0x49, 0x0d, 0x48, 0xc4, 0x72, 0xb1, - 0x43, 0x4d, 0x8d, 0xff, 0xe1, 0x52, 0x18, 0x8e, 0x5c, 0x8a, 0xa4, 0x48, 0x1b, 0x9f, 0x6d, 0xed, - 0xf8, 0x40, 0x88, 0xf2, 0x1e, 0x72, 0x4f, 0x4d, 0x04, 0x5c, 0x2f, 0x3f, 0x24, 0x01, 0x54, 0xea, - 0x67, 0x9c, 0xeb, 0x51, 0x65, 0xff, 0x05, 0xa5, 0xad, 0xab, 0xa1, 0xd3, 0xa5, 0xc1, 0x1e, 0xd2, - 0x53, 0x17, 0xc7, 0x88, 0x8c, 0x9c, 0x91, 0xce, 0x63, 0x2a, 0x44, 0x74, 0x69, 0x3b, 0xd7, 0x38, - 0xb9, 0x45, 0xff, 0xf8, 0x47, 0x93, 0xd9, 0xcf, 0x14, 0x8c, 0xc2, 0x1f, 0x7c, 0x79, 0x0f, 0xa8, - 0x73, 0x53, 0x1c, 0xff, 0xdb, 0x6f, 0xc2, 0x55, 0x4d, 0x3c, 0xfe, 0xdf, 0x98, 0xbc, 0xd2, 0x5c, - 0x2b, 0x3b, 0x35, 0xd8, 0xea, 0x8e, 0xa9, 0xa3, 0x15, 0x7f, 0xf3, 0x64, 0xb4, 0xff, 0x14, 0x44, - 0x38, 0xcd, 0x73, 0xad, 0x3f, 0x09, 0x4d, 0x1d, 0xd8, 0xc8, 0xd4, 0x3f, 0xc3, 0x87, 0x77, 0xdc, - 0xe9, 0x8b, 0x7f, 0xe1, 0xe1, 0x15, 0xa1, 0x8b, 0xf5, 0x53, 0x42, 0x2e, 0xa2, 0xc9, 0xd9, 0x5d, - 0xfc, 0x2d, 0x75, 0xb1, 0xb2, 0xb6, 0xab, 0x6e, 0x6e, 0xe9, 0xd3, 0xf1, 0xf3, 0x21, 0xde, 0x31, - 0x83, 0xb1, 0xb2, 0x3b, 0xdb, 0xfd, 0xd9, 0x9a, 0x1f, 0x82, 0xdb, 0x6f, 0xec, 0x64, 0x85, 0x7d, - 0x89, 0x55, 0x6f, 0xe0, 0x88, 0xce, 0x9f, 0x07, 0xc3, 0x36, 0x63, 0x5b, 0xba, 0x93, 0xee, 0x7f, - 0xe1, 0xa2, 0x12, 0x5d, 0x54, 0xdf, 0xfa, 0xe0, 0xb8, 0x5d, 0x5b, 0xd8, 0xde, 0xff, 0x05, 0xbb, - 0xce, 0xc4, 0x9d, 0xad, 0xbe, 0x84, 0x30, 0x5c, 0x29, 0x54, 0x9e, 0xa3, 0x9c, 0xf6, 0x7f, 0x42, - 0x99, 0x4e, 0xa4, 0xd4, 0x5d, 0xc4, 0xc2, 0x9c, 0xd4, 0x10, 0xf1, 0xe3, 0xc2, 0x7f, 0x89, 0xfe, - 0x38, 0x1c, 0x39, 0x81, 0xf0, 0x77, 0xc6, 0x6c, 0x4b, 0xf2, 0xb4, 0x89, 0x0a, 0x8e, 0x33, 0x89, - 0x8c, 0x9d, 0xc1, 0xca, 0xc3, 0x87, 0x96, 0x31, 0xfe, 0x32, 0x47, 0x8e, 0x2b, 0xa8, 0xe7, 0xaf, - 0xa7, 0xb3, 0x07, 0xf8, 0x32, 0xb1, 0x71, 0x20, 0xaa, 0xa1, 0xb4, 0xe6, 0x87, 0xbe, 0xc6, 0x3d, - 0xcf, 0xc4, 0xaf, 0x33, 0x9a, 0x2b, 0x6b, 0xa4, 0x36, 0x85, 0xd8, 0xfc, 0xbc, 0x48, 0xcb, 0xbe, - 0xaf, 0xc2, 0x8f, 0x2d, 0xdd, 0x64, 0xb9, 0x50, 0xa1, 0x64, 0x74, 0x82, 0xa9, 0xf1, 0xff, 0x12, - 0x14, 0xde, 0x19, 0x2b, 0x43, 0xee, 0x61, 0xfe, 0xc3, 0x21, 0xcb, 0x00, 0xfd, 0x58, 0x87, 0x85, - 0xdc, 0xfb, 0x95, 0xaf, 0xb9, 0xbb, 0x2e, 0x8d, 0xd4, 0xe7, 0x11, 0xc7, 0xf8, 0x52, 0xe7, 0x10, - 0xa3, 0xa5, 0x67, 0x20, 0xf9, 0xda, 0xa4, 0x2c, 0x5e, 0x21, 0xc5, 0xe3, 0x96, 0x0b, 0x7d, 0x87, - 0xa4, 0xc2, 0x94, 0xc2, 0xe3, 0x5b, 0x7e, 0x0e, 0xbc, 0x22, 0xc7, 0x8d, 0xa8, 0xb2, 0x96, 0x5c, - 0x9e, 0x77, 0xe1, 0x6c, 0x5c, 0xca, 0xd3, 0x9d, 0x6e, 0x32, 0x4e, 0xfa, 0x4c, 0x9c, 0xf7, 0x99, - 0xb9, 0x37, 0xf5, 0xf3, 0x46, 0x99, 0xe7, 0xe5, 0x2b, 0xbe, 0x87, 0xe7, 0xab, 0x6d, 0xa6, 0x9f, - 0xfa, 0xe5, 0xf5, 0x97, 0xc1, 0x80, 0x80, 0xda, 0xb2, 0x3b, 0xad, 0x51, 0xb7, 0xdd, 0xb4, 0x4c, - 0xfc, 0x11, 0x17, 0x2e, 0x72, 0x55, 0xe1, 0xf2, 0x3a, 0xf4, 0xe5, 0xfb, 0x95, 0xf2, 0xfd, 0x12, - 0xcd, 0xfc, 0x48, 0xb4, 0xd2, 0x9a, 0x49, 0x42, 0xcb, 0x15, 0xc9, 0x6e, 0xff, 0x7b, 0x74, 0xbc, - 0x13, 0x88, 0x44, 0xbd, 0x0e, 0x56, 0x2b, 0x84, 0x43, 0x21, 0x48, 0x02, 0x3d, 0xee, 0x96, 0x2b, - 0xc7, 0xd2, 0x09, 0x2f, 0x5e, 0x3a, 0xcc, 0x85, 0x19, 0x1c, 0x0e, 0x01, 0xc0, 0x19, 0x72, 0x04, - 0x04, 0xd0, 0xd5, 0xb9, 0x50, 0x74, 0x4a, 0x40, 0x95, 0xc6, 0x99, 0xaf, 0x72, 0xee, 0xab, 0xc3, - 0xd7, 0x00, 0xdd, 0x0f, 0xc1, 0xa8, 0xdb, 0xa8, 0x35, 0xfc, 0xf5, 0x64, 0x98, 0xe0, 0xd8, 0xff, - 0xc1, 0x19, 0x76, 0x47, 0x85, 0x7c, 0x39, 0x66, 0xf4, 0x96, 0xd8, 0xc4, 0xbf, 0xfc, 0x13, 0xd7, - 0x44, 0x8d, 0x23, 0x3f, 0xc4, 0x7c, 0x10, 0x92, 0xf2, 0x2d, 0x97, 0xc3, 0x74, 0xda, 0x8e, 0x88, - 0xab, 0x24, 0x24, 0x87, 0xae, 0x61, 0x2d, 0xaf, 0xe4, 0xe6, 0xdf, 0x9e, 0xb5, 0x75, 0xff, 0x35, - 0x11, 0xe3, 0xf9, 0x34, 0xcb, 0x2f, 0xc4, 0x69, 0xa7, 0xa4, 0xd3, 0x7e, 0x0a, 0x49, 0xa4, 0x5d, - 0xbd, 0x17, 0x34, 0xf2, 0xf9, 0xa8, 0x6c, 0x76, 0xbc, 0x85, 0x45, 0x2b, 0x04, 0xdf, 0x25, 0xab, - 0x55, 0xdd, 0x8d, 0x0e, 0x9f, 0x8d, 0x20, 0xe5, 0x71, 0x76, 0x41, 0x92, 0x77, 0xb2, 0xc5, 0x3b, - 0x07, 0x64, 0x9b, 0x2e, 0x6b, 0x65, 0x8b, 0xee, 0xb5, 0xf0, 0xa7, 0x52, 0x2e, 0xd6, 0xb0, 0xcc, - 0xc5, 0x25, 0x39, 0xed, 0x5a, 0x27, 0xd2, 0x72, 0x4f, 0x8f, 0x8d, 0xa4, 0x66, 0x62, 0x8e, 0x0d, - 0x06, 0x89, 0xbb, 0x6d, 0x3a, 0x19, 0x7a, 0x56, 0x94, 0x4d, 0xd6, 0x27, 0xcb, 0xde, 0x9f, 0x83, - 0x0d, 0x09, 0xa1, 0xb4, 0xa0, 0xc5, 0x4e, 0x37, 0x52, 0xfe, 0xe6, 0xfd, 0x7c, 0x6e, 0x86, 0x91, - 0x9e, 0x5d, 0x57, 0xaa, 0x7b, 0x5a, 0x89, 0x26, 0xa8, 0xa3, 0x08, 0x1f, 0xc5, 0x6b, 0xf6, 0xdd, - 0xfc, 0x3b, 0x4d, 0xaf, 0xa4, 0x91, 0x20, 0x4f, 0xa2, 0xd3, 0x09, 0x2b, 0x2f, 0x4c, 0xf5, 0xbb, - 0x9b, 0xf8, 0x50, 0x5b, 0x7a, 0x6b, 0x6f, 0x9b, 0x4d, 0x94, 0x89, 0xfd, 0x7c, 0x16, 0x08, 0x47, - 0x5a, 0xae, 0xed, 0xa3, 0xeb, 0xe0, 0x82, 0x4c, 0x4b, 0x59, 0xfe, 0x9a, 0xd9, 0x4f, 0x2f, 0x37, - 0xa3, 0x37, 0xf1, 0xb6, 0xd0, 0x3b, 0xb1, 0xa6, 0xc6, 0x89, 0xe6, 0xd7, 0xa5, 0x3f, 0xef, 0x93, - 0x9e, 0x19, 0xe1, 0xe0, 0xa7, 0x5a, 0x93, 0xeb, 0xe6, 0x8a, 0x62, 0xb0, 0x06, 0xf8, 0x44, 0xa9, - 0xba, 0x5b, 0xd9, 0xa6, 0x9d, 0x3f, 0x0e, 0x99, 0xb1, 0xab, 0xb8, 0x1f, 0x3e, 0xd2, 0xcf, 0xe3, - 0x86, 0xe7, 0x89, 0x20, 0x9c, 0xbd, 0xfc, 0x6d, 0xa9, 0x96, 0x63, 0x34, 0x1d, 0xde, 0x38, 0xfd, - 0x93, 0x2d, 0xc2, 0x93, 0x6a, 0x6a, 0x97, 0xef, 0x1e, 0xec, 0x3f, 0x0a, 0x4b, 0x20, 0xa3, 0x47, - 0x36, 0x55, 0x99, 0x2b, 0xb3, 0xc1, 0xd0, 0xcd, 0x15, 0x67, 0x81, 0x18, 0x3b, 0x39, 0x55, 0xc4, - 0x09, 0x19, 0x75, 0x5b, 0x25, 0x35, 0x56, 0xf9, 0xdc, 0x63, 0xd4, 0x6a, 0x42, 0x57, 0xbb, 0x72, - 0xb9, 0x54, 0x71, 0x01, 0x42, 0x84, 0xdb, 0xc5, 0xe7, 0x3f, 0x5e, 0x6f, 0x37, 0x0b, 0x26, 0x61, - 0xe7, 0x87, 0xea, 0x28, 0xd6, 0x0b, 0x62, 0xcd, 0xb8, 0x46, 0x92, 0xd1, 0x14, 0x88, 0x69, 0xa3, - 0x41, 0xdd, 0xd9, 0x16, 0xb4, 0x3f, 0xc4, 0x13, 0xbb, 0x89, 0x8d, 0xa8, 0xc5, 0xd4, 0xef, 0xfd, - 0x08, 0x1d, 0xe2, 0xd0, 0x24, 0x5a, 0xfe, 0x74, 0x43, 0x95, 0x27, 0x0a, 0x09, 0xe8, 0x45, 0x4f, - 0xb5, 0xe1, 0xb5, 0x23, 0x08, 0xee, 0xe0, 0x56, 0x5e, 0x28, 0xf6, 0xb1, 0x70, 0x9d, 0xa8, 0xd8, - 0xda, 0xcb, 0xdb, 0xff, 0xc2, 0x84, 0xeb, 0x86, 0xe4, 0x46, 0x40, 0xf4, 0xf2, 0x06, 0xf9, 0x29, - 0x55, 0x83, 0x56, 0x38, 0x69, 0x2a, 0xfc, 0x48, 0x88, 0xdb, 0x24, 0xed, 0x10, 0xa0, 0xdd, 0xa9, - 0x23, 0x7f, 0x8d, 0xc7, 0x22, 0xf1, 0x5d, 0x1c, 0xc2, 0x64, 0xf9, 0x2c, 0x24, 0xbf, 0x14, 0x5f, - 0x77, 0x23, 0x71, 0xff, 0x73, 0xa6, 0xf3, 0xff, 0xf1, 0x92, 0x65, 0x91, 0x74, 0xea, 0x6c, 0xc5, - 0x97, 0x1d, 0xd0, 0x4c, 0xd3, 0xd9, 0x92, 0xe9, 0xf8, 0x76, 0xa3, 0x51, 0x57, 0xa6, 0x67, 0x85, - 0x1b, 0x1a, 0xe3, 0x2f, 0x15, 0x51, 0x28, 0xe1, 0x95, 0x7c, 0x9d, 0x99, 0xf8, 0xda, 0x21, 0xb5, - 0x3d, 0xd6, 0xe9, 0x16, 0x1c, 0x7e, 0x4b, 0xad, 0x11, 0x6c, 0xed, 0x5f, 0x1a, 0xc3, 0x14, 0xf3, - 0x11, 0xa0, 0xcb, 0xbf, 0xe3, 0x4e, 0x9b, 0x49, 0x8d, 0x5d, 0x6d, 0x71, 0xca, 0x52, 0xb2, 0x12, - 0xbb, 0x9a, 0xf2, 0xb5, 0x9b, 0xa8, 0xb6, 0x9d, 0x6f, 0xfe, 0x3b, 0x1f, 0xaa, 0xdc, 0xcb, 0xde, - 0x87, 0xa1, 0x9f, 0x61, 0x52, 0xf0, 0x58, 0x46, 0x4d, 0x28, 0x8c, 0xa6, 0xf2, 0xe6, 0x5c, 0x43, - 0x6e, 0xcb, 0xe3, 0x6d, 0x1d, 0xde, 0xb3, 0x19, 0x32, 0x6a, 0x07, 0x0a, 0xa5, 0x46, 0xd6, 0xc7, - 0xdf, 0xea, 0x64, 0xf6, 0x51, 0xa4, 0xe7, 0x82, 0xf1, 0xa4, 0x2b, 0x5b, 0xf4, 0xae, 0x76, 0xa6, - 0xc9, 0x72, 0xc2, 0x1d, 0x52, 0x72, 0xba, 0x97, 0xfc, 0xdd, 0xfc, 0x6e, 0x3d, 0x59, 0xfa, 0x8c, - 0x9a, 0xfb, 0x8c, 0xb1, 0x37, 0xcd, 0xfd, 0x69, 0x73, 0xb3, 0xdc, 0xc0, 0xd8, 0xe7, 0x9e, 0xa5, - 0x63, 0x0f, 0x38, 0xd9, 0x55, 0x96, 0x14, 0x53, 0xbd, 0x5a, 0x20, 0x3e, 0x10, 0x12, 0x87, 0x46, - 0xd7, 0xd1, 0xb9, 0x97, 0xb1, 0xed, 0x4f, 0x0f, 0x05, 0x24, 0x69, 0x90, 0xe6, 0x5a, 0x6d, 0xbb, - 0x2c, 0x66, 0xbf, 0xff, 0x8d, 0x91, 0x9c, 0x19, 0xa4, 0x56, 0x08, 0xcb, 0x98, 0xdb, 0xac, 0xbd, - 0xac, 0xf1, 0xca, 0xdd, 0xa9, 0xc1, 0x72, 0xc3, 0xfc, 0x7c, 0xba, 0xc6, 0xc9, 0x31, 0xaa, 0xe0, - 0xd8, 0xcc, 0x1d, 0x8c, 0xf9, 0xf8, 0x78, 0xc6, 0xc3, 0x33, 0x87, 0x55, 0xc9, 0x21, 0x07, 0x93, - 0xbb, 0x67, 0xb8, 0xac, 0xf1, 0xa3, 0xcf, 0xf8, 0x7a, 0x30, 0x63, 0xe2, 0xa2, 0x3a, 0xba, 0xc7, - 0x7c, 0xd3, 0x55, 0x31, 0xb4, 0xe0, 0x73, 0x18, 0x94, 0xa9, 0xb7, 0x53, 0x74, 0xdc, 0x94, 0xf0, - 0x53, 0x46, 0x53, 0x19, 0xa6, 0x63, 0x64, 0x33, 0x16, 0x58, 0x47, 0xb3, 0x35, 0xf1, 0x85, 0xa6, - 0xc2, 0x22, 0xcd, 0x84, 0x86, 0x1b, 0x15, 0x9c, 0xc7, 0x5b, 0xed, 0x1f, 0x66, 0x8d, 0x1f, 0x82, - 0xca, 0xaf, 0x22, 0x51, 0x9b, 0xd1, 0x96, 0x0d, 0xda, 0x5b, 0x9f, 0x0a, 0x46, 0xf2, 0x69, 0x07, - 0xac, 0x1a, 0x6d, 0x8e, 0x55, 0x23, 0x7a, 0x66, 0xfd, 0x45, 0xac, 0x05, 0xe7, 0x85, 0x28, 0x24, - 0xd7, 0xc0, 0xd6, 0x67, 0x6e, 0x2a, 0xd4, 0x98, 0x6f, 0x52, 0xb2, 0xe2, 0x30, 0xea, 0x98, 0x92, - 0x99, 0x7e, 0x9e, 0x0a, 0x0f, 0xe3, 0x63, 0x74, 0x33, 0x62, 0x73, 0x4f, 0x2e, 0xfd, 0xab, 0x1b, - 0x54, 0x67, 0x6e, 0xd5, 0x8e, 0x22, 0xe5, 0x21, 0xeb, 0xbe, 0xa5, 0x1c, 0xc6, 0x52, 0x39, 0xfb, - 0xdf, 0x87, 0x8a, 0x92, 0x1b, 0xe2, 0x81, 0x5b, 0x65, 0xbc, 0xda, 0x5d, 0xad, 0x49, 0xa9, 0x53, - 0xff, 0x16, 0x54, 0xcd, 0x1a, 0x52, 0x6f, 0xe1, 0x02, 0x20, 0xdb, 0x44, 0x3c, 0x71, 0xba, 0x56, - 0xe7, 0x88, 0xd6, 0x57, 0xe0, 0xa6, 0x99, 0xf6, 0xe9, 0x11, 0xf4, 0x36, 0xcb, 0xae, 0xd9, 0x65, - 0xf0, 0xf4, 0xdf, 0x1b, 0x4d, 0xa2, 0x07, 0x76, 0x5b, 0x84, 0xc8, 0x9d, 0xce, 0x29, 0xf1, 0xa7, - 0xff, 0x85, 0x2d, 0x71, 0xfe, 0x43, 0x26, 0x6c, 0x6d, 0x65, 0x4a, 0x47, 0xdd, 0x93, 0xf7, 0xc6, - 0x48, 0xf6, 0x3e, 0x77, 0xb1, 0x87, 0xab, 0x7c, 0x89, 0x6d, 0xde, 0x8b, 0xc2, 0x96, 0xa1, 0x53, - 0x64, 0x36, 0x65, 0x96, 0x3b, 0x65, 0xda, 0xcd, 0x0c, 0x3e, 0x33, 0x9b, 0x4f, 0x8c, 0xe3, 0x17, - 0x6b, 0xf8, 0xed, 0x68, 0xb6, 0xe4, 0x9a, 0x97, 0x8c, 0xd3, 0xb9, 0x60, 0x6d, 0x5f, 0x76, 0x0d, - 0x29, 0x76, 0xf8, 0xa9, 0xc3, 0x70, 0xbc, 0x65, 0xd4, 0x76, 0xf6, 0x94, 0xfd, 0x3a, 0x43, 0x74, - 0xab, 0x39, 0xcb, 0x17, 0xc6, 0x8f, 0xc6, 0x69, 0x91, 0x99, 0x56, 0xcf, 0xde, 0xfa, 0xf4, 0xcf, - 0x9d, 0x1a, 0x1f, 0x84, 0x28, 0x75, 0x35, 0x4f, 0x86, 0x29, 0xa5, 0x58, 0x92, 0xf0, 0xa1, 0x28, - 0xde, 0xca, 0x4e, 0xc6, 0xb6, 0x27, 0x4b, 0xb1, 0x9d, 0x97, 0xb1, 0x4d, 0x9b, 0x50, 0xf3, 0xbe, - 0x0a, 0xe9, 0x26, 0x56, 0x6b, 0x63, 0x59, 0xa4, 0x6b, 0x34, 0x9f, 0x73, 0x31, 0x4a, 0xf0, 0xfe, - 0xe9, 0x4d, 0xfe, 0x79, 0x27, 0x05, 0xf4, 0xcb, 0xd6, 0xd9, 0xbf, 0x82, 0x0b, 0x19, 0x5b, 0xb1, - 0xbc, 0xfc, 0x2a, 0xab, 0x62, 0xdd, 0x5b, 0x51, 0x4a, 0x6f, 0x1c, 0xb3, 0x2f, 0xaf, 0x47, 0xe3, - 0x35, 0xb9, 0xf7, 0xee, 0xfa, 0x75, 0xb4, 0x36, 0xb5, 0xc6, 0xfe, 0x0a, 0xa4, 0x95, 0x5a, 0x23, - 0x31, 0x7e, 0x92, 0x09, 0xc6, 0xdf, 0x0f, 0x8d, 0xb7, 0x9d, 0x20, 0xb3, 0x74, 0xf8, 0x69, 0xa5, - 0x35, 0x13, 0x18, 0x65, 0x1b, 0x2f, 0x77, 0x37, 0x4d, 0xd7, 0xc6, 0x0b, 0x1d, 0xaf, 0xd2, 0x57, - 0x5a, 0xa4, 0x16, 0xad, 0x4b, 0x6b, 0xe3, 0x46, 0x5d, 0xdc, 0xb2, 0xe8, 0xaf, 0x26, 0xbc, 0xf7, - 0x29, 0x42, 0x9a, 0xae, 0x5e, 0x9f, 0x82, 0xfb, 0xbf, 0xbd, 0x36, 0xd4, 0x99, 0x2e, 0x13, 0x27, - 0x7f, 0xfc, 0x4f, 0x34, 0x09, 0x09, 0x49, 0x75, 0xc1, 0x2d, 0x09, 0x88, 0xed, 0xb2, 0x2d, 0x2c, - 0xeb, 0xe3, 0x79, 0x90, 0xb2, 0xf6, 0xa3, 0xbf, 0xa4, 0x6e, 0x60, 0xe6, 0xe6, 0x6c, 0x9f, 0x59, - 0xbd, 0xbf, 0xf0, 0x4d, 0x9f, 0x4d, 0xa5, 0xf3, 0x1f, 0x1c, 0x2d, 0xb4, 0xfb, 0x23, 0x47, 0xc9, - 0x9f, 0x05, 0x42, 0x10, 0x25, 0xdb, 0x8c, 0xab, 0x5d, 0xde, 0xfa, 0x97, 0x4d, 0x74, 0x8d, 0xe7, - 0x15, 0x68, 0x81, 0xb0, 0xd4, 0x1d, 0xbe, 0x6e, 0x74, 0xe2, 0x61, 0x4d, 0x07, 0x85, 0xcc, 0x05, - 0xa7, 0x4b, 0xe7, 0xb4, 0x2f, 0xec, 0x2e, 0x2a, 0xa3, 0x8a, 0x00, 0x95, 0xb3, 0x18, 0x69, 0xff, - 0x7d, 0xa1, 0xa0, 0xba, 0x7f, 0x33, 0x26, 0x4e, 0x4f, 0xcc, 0x47, 0xba, 0xf4, 0xd0, 0x53, 0x8d, - 0x5e, 0xd4, 0xb2, 0xb7, 0x35, 0xd3, 0x77, 0x7b, 0x8e, 0x64, 0x79, 0x19, 0x74, 0x41, 0x8a, 0x21, - 0xd1, 0x78, 0x80, 0xa1, 0x07, 0xa4, 0xc3, 0x96, 0x99, 0x0f, 0xc9, 0x78, 0x81, 0x14, 0x64, 0x46, - 0x96, 0x95, 0x79, 0x7a, 0xe7, 0xd6, 0xb6, 0xcf, 0xf6, 0x19, 0x99, 0x9a, 0xca, 0x56, 0xb9, 0x34, - 0x65, 0x1f, 0xa1, 0x4a, 0xfe, 0xa6, 0xc3, 0x64, 0x43, 0x78, 0x5e, 0xae, 0xf8, 0xd2, 0xcb, 0xd4, - 0xe3, 0xcb, 0x78, 0x9a, 0x82, 0xc9, 0xc1, 0x42, 0x06, 0xa0, 0xf4, 0x34, 0x0f, 0x96, 0x8c, 0x8d, - 0x08, 0xc6, 0xcb, 0x6e, 0x5b, 0xb2, 0x90, 0x50, 0x35, 0x6c, 0x73, 0x0f, 0x0f, 0xd1, 0x56, 0xa1, - 0x2f, 0xf1, 0xe7, 0x2e, 0x25, 0xac, 0xf7, 0xe5, 0xdf, 0x8c, 0xe3, 0x9a, 0xb2, 0xa7, 0x55, 0x37, - 0xcb, 0x89, 0x36, 0xdb, 0x6d, 0xf8, 0x47, 0x5a, 0xee, 0x6e, 0xb4, 0xc2, 0xcc, 0x96, 0xeb, 0x6f, - 0xfe, 0x1d, 0x37, 0xc3, 0x76, 0x66, 0x6e, 0xa4, 0x13, 0x7b, 0xc3, 0x3e, 0x8c, 0x1d, 0xbf, 0xe0, - 0xa7, 0xbb, 0x47, 0xcc, 0x6d, 0xb5, 0x6d, 0x72, 0xf8, 0x50, 0xb4, 0x6d, 0x33, 0xa4, 0x77, 0xbe, - 0x46, 0xc8, 0x3d, 0x8c, 0xd1, 0xda, 0xcb, 0xe1, 0xe3, 0x66, 0xf3, 0x37, 0x1d, 0xa2, 0xdc, 0x7b, - 0x69, 0xec, 0x5b, 0x79, 0x23, 0x0f, 0x29, 0x15, 0xa8, 0x3c, 0x16, 0x6e, 0x54, 0x6c, 0xa2, 0x9b, - 0xb2, 0xdf, 0x8d, 0x7b, 0x56, 0x2f, 0x8b, 0x5f, 0x10, 0x37, 0xc6, 0x38, 0xb2, 0xd5, 0x0a, 0x63, - 0x97, 0x8c, 0x24, 0x15, 0x0e, 0x0c, 0x21, 0x8c, 0xf2, 0x87, 0x1e, 0xa1, 0x77, 0xd5, 0x6e, 0x44, - 0x93, 0x2e, 0x5c, 0x69, 0x25, 0x09, 0xca, 0x7f, 0xc6, 0xed, 0xb0, 0x42, 0xe9, 0xa5, 0xd5, 0xc0, - 0xaa, 0x4e, 0x9c, 0xa7, 0x26, 0x69, 0x92, 0xec, 0xad, 0xb7, 0x1f, 0xca, 0x00, 0x9f, 0x24, 0xa8, - 0xcb, 0x8e, 0x28, 0x22, 0x94, 0x9d, 0x16, 0x5c, 0xcd, 0x69, 0x2b, 0x34, 0x1f, 0x52, 0x64, 0x8d, - 0x9a, 0x29, 0x29, 0x3e, 0x20, 0x6c, 0x9c, 0x7f, 0xd2, 0xea, 0x07, 0x8a, 0x94, 0x90, 0x27, 0x35, - 0x61, 0xad, 0x6e, 0x42, 0x92, 0xaf, 0x24, 0xb4, 0xb0, 0xd9, 0x48, 0xf3, 0xb4, 0x7e, 0xb4, 0x5f, - 0x44, 0x1f, 0x6f, 0xaa, 0x15, 0xa1, 0xd3, 0x95, 0x49, 0xb9, 0x2e, 0xf8, 0x10, 0x67, 0xc6, 0x1c, - 0xfd, 0xba, 0xbd, 0x31, 0x07, 0xa1, 0xa4, 0xdf, 0x06, 0x30, 0x99, 0xe1, 0x41, 0x44, 0x87, 0x6f, - 0xc2, 0x96, 0xd2, 0x2c, 0xbd, 0x3b, 0x75, 0xb1, 0x99, 0x97, 0xb1, 0x4a, 0x30, 0xb8, 0x7c, 0x3b, - 0x43, 0xbc, 0xcb, 0xb5, 0x0a, 0xc2, 0x74, 0xba, 0xee, 0x26, 0xb7, 0xf8, 0x2a, 0x10, 0x7a, 0x8e, - 0x42, 0x78, 0x3a, 0xd5, 0xe6, 0x58, 0xae, 0x4e, 0xb9, 0x60, 0xee, 0x35, 0x45, 0x5f, 0x05, 0x3d, - 0x26, 0xb1, 0x0a, 0x5b, 0xe0, 0xcd, 0x49, 0xe2, 0x46, 0xf8, 0x7a, 0xf9, 0xf3, 0xcd, 0x24, 0x54, - 0xc9, 0x2b, 0x13, 0x08, 0x3b, 0x71, 0xb0, 0x7f, 0x4c, 0x6d, 0x7c, 0x28, 0x54, 0x2d, 0x72, 0xe7, - 0xb8, 0x62, 0xf1, 0x01, 0xc6, 0xf2, 0xad, 0xc9, 0xea, 0x20, 0x9d, 0x12, 0x23, 0x75, 0xe3, 0x7e, - 0xc4, 0x8d, 0xd3, 0x9f, 0x19, 0xda, 0x69, 0x14, 0x69, 0xda, 0x34, 0xea, 0x69, 0x28, 0x77, 0x8c, - 0x59, 0x57, 0x01, 0x20, 0x8e, 0x51, 0x84, 0x1f, 0x1b, 0x74, 0x2d, 0x43, 0x14, 0x8f, 0xd1, 0x24, - 0xa9, 0x4d, 0xdf, 0xc3, 0xad, 0x49, 0x50, 0x60, 0x8f, 0x46, 0xd0, 0xa3, 0x60, 0xd2, 0x84, 0x6e, - 0xe9, 0x7c, 0x1f, 0xf8, 0xd2, 0xbf, 0x27, 0x49, 0xb9, 0xad, 0xcd, 0xe3, 0xf3, 0xf7, 0x83, 0xff, - 0x76, 0xdf, 0xfc, 0x13, 0xd8, 0xe9, 0x21, 0xa1, 0xa4, 0x37, 0x5c, 0x65, 0x4f, 0x8c, 0xb4, 0xde, - 0x69, 0x12, 0x0d, 0x4a, 0x0d, 0x11, 0x9f, 0x43, 0xb1, 0x9f, 0xd1, 0xf8, 0x52, 0x90, 0xce, 0x63, - 0xf7, 0x39, 0x74, 0xf4, 0x33, 0x22, 0x4e, 0x93, 0xd8, 0x41, 0xc0, 0xcc, 0xcd, 0x7c, 0x29, 0x6e, - 0x29, 0x15, 0x71, 0x84, 0x71, 0x83, 0x6b, 0x1b, 0xf1, 0xd0, 0xeb, 0x34, 0x4c, 0x63, 0xe3, 0x29, - 0x96, 0x2c, 0x94, 0x54, 0x64, 0xd4, 0x98, 0xa8, 0xb9, 0xc1, 0xb2, 0x0d, 0xf2, 0xe6, 0xd7, 0xc2, - 0x98, 0xbc, 0xd2, 0xd9, 0x1d, 0x96, 0xdd, 0x01, 0x83, 0x82, 0xfb, 0x92, 0xe6, 0xcc, 0x50, 0x7c, - 0x6d, 0xb6, 0x98, 0xfa, 0x37, 0x3b, 0xce, 0xc5, 0x2a, 0x8d, 0x2a, 0x28, 0x1a, 0x0e, 0x6f, 0x86, - 0x5e, 0xbf, 0xf8, 0x9d, 0x68, 0x1e, 0xe4, 0x41, 0x8d, 0xfc, 0x10, 0x4d, 0xdf, 0x14, 0x36, 0xbd, - 0x08, 0xba, 0x84, 0xd5, 0xa5, 0x91, 0x84, 0xc6, 0xc1, 0xdc, 0xff, 0xfc, 0x14, 0xd9, 0x26, 0x35, - 0x35, 0x55, 0xa1, 0x99, 0x86, 0xb1, 0x2e, 0x67, 0x8b, 0xe1, 0x8a, 0x50, 0xcd, 0x36, 0xf7, 0x91, - 0x93, 0xe3, 0x75, 0xfd, 0x71, 0x5f, 0xfc, 0x2d, 0x92, 0x4c, 0xb8, 0x3e, 0x6c, 0xeb, 0x67, 0xf7, - 0xff, 0x04, 0xb6, 0xe2, 0x93, 0x34, 0x92, 0xcb, 0xe3, 0x49, 0x5c, 0x45, 0xce, 0x11, 0x75, 0x17, - 0x88, 0xea, 0xb5, 0xaf, 0x54, 0x85, 0xa2, 0xa4, 0x26, 0xef, 0xcb, 0xd7, 0xf8, 0xd2, 0xc5, 0x99, - 0x02, 0x4b, 0x4e, 0xb3, 0x38, 0x1c, 0x0d, 0x88, 0x9f, 0x3d, 0x6d, 0x93, 0xdd, 0x33, 0xf9, 0xf1, - 0xa4, 0x44, 0x6c, 0x4e, 0x61, 0x6a, 0xf9, 0xfc, 0xf9, 0x2c, 0x9a, 0x6f, 0x72, 0xa5, 0xf3, 0xbf, - 0x8d, 0x8e, 0x2c, 0x7c, 0xb6, 0xfe, 0xea, 0x6a, 0x66, 0x19, 0xad, 0xbd, 0x86, 0xb7, 0x3d, 0xc7, - 0xaf, 0x52, 0xf8, 0xed, 0xbf, 0xf0, 0xa6, 0xec, 0x94, 0x65, 0x49, 0x94, 0x26, 0xf2, 0x77, 0x24, - 0xaa, 0xdb, 0xb3, 0xf6, 0xee, 0x2e, 0x90, 0x7c, 0x16, 0x15, 0x91, 0x39, 0xb7, 0xd8, 0xcd, 0xc7, - 0xb6, 0xcd, 0x8e, 0x4c, 0xf7, 0xc2, 0x96, 0x48, 0xdc, 0x77, 0xdb, 0x6f, 0xeb, 0xaa, 0x64, 0x8a, - 0x2a, 0x60, 0xed, 0xc5, 0x71, 0x6f, 0xc2, 0x86, 0x76, 0x59, 0x3c, 0xea, 0xb9, 0xf5, 0x2e, 0xa4, - 0xd2, 0x26, 0x15, 0x7f, 0x1b, 0x4e, 0xda, 0xe6, 0xf9, 0xb0, 0x71, 0x56, 0x5e, 0x49, 0x51, 0xda, - 0xae, 0xc6, 0xf5, 0xf6, 0xea, 0xbe, 0x10, 0x1b, 0x16, 0x9d, 0xea, 0xa2, 0x0e, 0x2c, 0xf8, 0x52, - 0x90, 0x3e, 0xe3, 0x2b, 0xdc, 0xf9, 0x1c, 0x69, 0x27, 0x66, 0xc6, 0x97, 0x5f, 0x0a, 0x19, 0x32, - 0xf4, 0xdb, 0xcb, 0xa2, 0xee, 0x8c, 0x57, 0x36, 0x7b, 0x49, 0xa4, 0x9f, 0xe3, 0x4d, 0x51, 0xdb, - 0x09, 0xba, 0x69, 0x60, 0xc3, 0xfc, 0x28, 0x4a, 0x36, 0xfd, 0xab, 0xba, 0xfa, 0xab, 0x75, 0x92, - 0x69, 0xc2, 0xf1, 0xb1, 0xe1, 0x97, 0x81, 0xf0, 0x61, 0x2e, 0x76, 0xe6, 0x06, 0x9a, 0xa4, 0xcf, - 0x1d, 0x67, 0x49, 0xb5, 0xc3, 0xea, 0xca, 0xe9, 0x5b, 0x6e, 0x78, 0x66, 0x59, 0x9a, 0x8b, 0xf1, - 0xf8, 0xc1, 0x2d, 0xc4, 0xbb, 0x3e, 0x34, 0xef, 0x52, 0xb4, 0xf7, 0x3e, 0x7e, 0x14, 0xd4, 0xd3, - 0x4d, 0x36, 0x9a, 0x49, 0x13, 0x2e, 0xad, 0x3e, 0x8a, 0x7e, 0x32, 0x7e, 0x6f, 0xd9, 0xc4, 0x8d, - 0x1d, 0xab, 0x47, 0xc9, 0x76, 0x4f, 0x12, 0x1e, 0xb6, 0x87, 0x0d, 0x25, 0xf6, 0x5b, 0x27, 0x58, - 0xc3, 0xe9, 0x23, 0x71, 0x5a, 0x38, 0x7c, 0x5b, 0xf1, 0x02, 0x42, 0x91, 0x6d, 0x63, 0xb4, 0x9f, - 0x12, 0x0c, 0xe9, 0xd3, 0xfd, 0xbb, 0x4d, 0x97, 0xe2, 0x1c, 0x9f, 0x29, 0x39, 0xd7, 0xf0, 0xa1, - 0x6c, 0x6b, 0x6d, 0x3f, 0xac, 0x5d, 0xf6, 0xef, 0xa5, 0x72, 0x63, 0xff, 0xf8, 0x52, 0x4c, 0x26, - 0x78, 0xb6, 0x9d, 0x27, 0x69, 0xa8, 0x87, 0x26, 0xbe, 0x14, 0x22, 0x45, 0x95, 0x95, 0x65, 0xda, - 0x47, 0xc5, 0xca, 0x7c, 0xab, 0x25, 0xbd, 0xc5, 0xf0, 0xa5, 0xfb, 0xb8, 0x8e, 0x25, 0x16, 0x4f, - 0x48, 0x69, 0x53, 0x6e, 0xa5, 0x7e, 0x14, 0x94, 0xc4, 0xb6, 0x7b, 0x46, 0xe0, 0x31, 0xbe, 0xdb, - 0x57, 0xa7, 0x1f, 0x6e, 0xfc, 0x7c, 0xb5, 0x8e, 0xf8, 0x53, 0x6d, 0x35, 0x07, 0xfa, 0xda, 0x37, - 0x1b, 0x57, 0x65, 0x4d, 0xd8, 0xc9, 0x5e, 0xef, 0x82, 0xc2, 0x34, 0x33, 0x92, 0x29, 0x2d, 0xa3, - 0x49, 0xa7, 0x26, 0x49, 0x71, 0x22, 0xf0, 0xf9, 0x36, 0x34, 0x67, 0xad, 0xb6, 0xac, 0xba, 0xc6, - 0x6e, 0x21, 0xdb, 0x11, 0x79, 0x52, 0x7d, 0x25, 0xaf, 0xfc, 0x6c, 0xac, 0x67, 0xe9, 0x35, 0x9f, - 0x36, 0x4a, 0xc2, 0xab, 0xf6, 0x02, 0xbb, 0xe8, 0xe6, 0xf6, 0x97, 0xc6, 0xd6, 0xe1, 0xac, 0xc6, - 0xde, 0xf3, 0x26, 0x42, 0xb0, 0xa3, 0x7c, 0x5a, 0x2d, 0xa5, 0x22, 0x25, 0x2c, 0xc3, 0x8c, 0x47, - 0x5a, 0x41, 0xf8, 0xce, 0x63, 0x38, 0x5c, 0x97, 0xe3, 0x75, 0x8d, 0x86, 0x99, 0xf9, 0x17, 0xa4, - 0xc6, 0x86, 0x28, 0x93, 0xc8, 0x36, 0xc7, 0x79, 0xba, 0x86, 0x50, 0x49, 0x07, 0x10, 0x0c, 0x8b, - 0x78, 0x3e, 0x83, 0x6a, 0x30, 0xcc, 0x6c, 0xcd, 0x58, 0xdb, 0xf8, 0x81, 0xbb, 0x83, 0xa2, 0xb2, - 0x5d, 0x27, 0xec, 0x63, 0xcc, 0xa4, 0x29, 0xc1, 0xf6, 0x6f, 0x4e, 0xfd, 0x3a, 0x65, 0x35, 0x03, - 0x69, 0x07, 0xfc, 0x0f, 0xe4, 0xf6, 0x3c, 0x6b, 0x37, 0x09, 0x34, 0xe8, 0x46, 0xd1, 0x11, 0x72, - 0x2f, 0xec, 0xe8, 0xf9, 0x30, 0xa5, 0x9f, 0x0d, 0x53, 0x94, 0xf1, 0x7d, 0xc7, 0xbd, 0xdf, 0xc6, - 0xd8, 0xf9, 0xe8, 0x78, 0xfd, 0x59, 0x98, 0xda, 0x69, 0x32, 0x99, 0x89, 0x55, 0xa0, 0xd5, 0x45, - 0xce, 0x28, 0x1a, 0x20, 0x76, 0x6c, 0x44, 0x18, 0xaa, 0x65, 0xfa, 0x00, 0xb6, 0x9a, 0x95, 0xfc, - 0x28, 0x57, 0x6b, 0xc7, 0xaf, 0x63, 0x59, 0xde, 0x9e, 0x18, 0x53, 0xd6, 0x1a, 0x0a, 0x7c, 0xc6, - 0xa8, 0xcf, 0x74, 0x40, 0x0e, 0x7c, 0x69, 0x12, 0x6e, 0x68, 0x0e, 0x57, 0xd2, 0x3c, 0x2a, 0xa4, - 0xc4, 0x0a, 0x1d, 0x26, 0x34, 0x55, 0x95, 0x03, 0x75, 0x61, 0x2a, 0x6a, 0xb4, 0x87, 0x8f, 0x97, - 0xa4, 0xfe, 0x22, 0x37, 0x1f, 0x64, 0x9b, 0x0c, 0x73, 0x7a, 0x49, 0xf0, 0x06, 0x24, 0x0a, 0xbf, - 0xd6, 0x05, 0x5d, 0xb0, 0xdf, 0x47, 0x4b, 0xba, 0x88, 0x8e, 0x57, 0xa9, 0x3e, 0x7f, 0xe1, 0x48, - 0x6e, 0xa3, 0x1f, 0x12, 0xdd, 0x42, 0x2c, 0xf7, 0xc4, 0x69, 0x6e, 0xb8, 0x94, 0x63, 0xe2, 0xe9, - 0x73, 0x64, 0x9c, 0x7c, 0x6d, 0x83, 0x13, 0x9c, 0xd5, 0x2b, 0x36, 0x6e, 0x6f, 0x52, 0x57, 0xe6, - 0x65, 0x3b, 0x2c, 0x31, 0xfd, 0x37, 0x70, 0xdb, 0x72, 0x68, 0xf7, 0xe3, 0xfe, 0x14, 0xad, 0x7c, - 0x5d, 0x2c, 0x5c, 0x87, 0x79, 0x05, 0x7b, 0x54, 0xe5, 0xe4, 0xcf, 0x46, 0x98, 0xab, 0x95, 0x8e, - 0x6d, 0x4d, 0x96, 0x17, 0xc1, 0x7e, 0x14, 0x2b, 0xbb, 0xeb, 0x5d, 0x69, 0x10, 0x8a, 0x88, 0x77, - 0x9d, 0x5f, 0xec, 0x9f, 0x4e, 0x49, 0x8d, 0x21, 0x5c, 0x71, 0xea, 0x1a, 0x1d, 0xdf, 0xe3, 0x78, - 0xe3, 0x78, 0x72, 0x22, 0x6d, 0x47, 0x79, 0xd3, 0x47, 0xcb, 0x80, 0x9f, 0xad, 0x95, 0x37, 0xce, - 0x30, 0xf4, 0xe5, 0x4f, 0xee, 0x98, 0xf1, 0x97, 0x7f, 0x1a, 0x42, 0xe2, 0x6f, 0x31, 0x86, 0x68, - 0x37, 0x5e, 0x93, 0xd4, 0xf5, 0x6e, 0x4b, 0xf4, 0x19, 0x18, 0xc6, 0x43, 0xd3, 0xac, 0xcd, 0xf4, - 0x74, 0x54, 0x7f, 0xfe, 0x34, 0xe9, 0x30, 0xc6, 0x8c, 0x3f, 0xba, 0x0f, 0x82, 0xe3, 0xcb, 0x94, - 0x51, 0xbd, 0x8e, 0x92, 0x9f, 0x2c, 0x5a, 0x2a, 0xa1, 0xd6, 0x5d, 0xff, 0xc2, 0x18, 0x89, 0x0a, - 0xa6, 0xb7, 0x4d, 0x92, 0x22, 0xb5, 0x92, 0xa5, 0xf0, 0x8c, 0xf2, 0xa9, 0x95, 0x36, 0xfa, 0x23, - 0xb0, 0x56, 0x21, 0x78, 0x28, 0xa1, 0xcf, 0x0d, 0xa9, 0xa5, 0xff, 0x8c, 0xb5, 0x4c, 0x7d, 0x68, - 0x4e, 0x8e, 0x87, 0xb5, 0x96, 0xcd, 0x12, 0xe3, 0xa5, 0x07, 0xe3, 0x35, 0xc7, 0xa6, 0x5e, 0x7c, - 0xf7, 0x5a, 0x43, 0x97, 0x9c, 0xdf, 0x19, 0x49, 0xd5, 0x86, 0x6c, 0xbe, 0xb5, 0xc9, 0x97, 0x41, - 0xca, 0x82, 0xa5, 0xe7, 0xfe, 0x3e, 0x92, 0x1b, 0x1a, 0x1a, 0x19, 0x50, 0xdc, 0x60, 0xc4, 0x6f, - 0xd5, 0x4b, 0xe3, 0x48, 0xba, 0xa7, 0xc4, 0x77, 0x65, 0x8f, 0xad, 0x55, 0x77, 0x13, 0x31, 0x8f, - 0x6b, 0x5e, 0xcd, 0x43, 0x75, 0x2d, 0x3f, 0x8b, 0x72, 0x9b, 0x7c, 0xb0, 0xff, 0x0a, 0x5f, 0x14, - 0x9f, 0x95, 0xa0, 0xd0, 0x6e, 0x86, 0xa6, 0x93, 0xb1, 0x93, 0xc1, 0xee, 0x40, 0xfe, 0x33, 0xcd, - 0x1d, 0xbb, 0x6c, 0x79, 0x75, 0xad, 0xd1, 0xe5, 0x8f, 0x82, 0xb8, 0xc5, 0x7a, 0xda, 0x5f, 0x6c, - 0x90, 0x7d, 0x26, 0x22, 0xa7, 0xc1, 0x48, 0xb2, 0xbd, 0x0e, 0x9a, 0xab, 0xb9, 0x14, 0x42, 0x50, - 0x24, 0x5d, 0xf9, 0x97, 0x82, 0xa1, 0x0c, 0x71, 0xb1, 0xa6, 0xe7, 0x64, 0xf0, 0x59, 0x56, 0x8c, - 0xcc, 0xbd, 0x91, 0x52, 0x31, 0xf1, 0xb6, 0xae, 0x96, 0xb4, 0xd5, 0x46, 0xff, 0xfb, 0x95, 0x47, - 0xe7, 0xb5, 0x90, 0xf8, 0x47, 0xf4, 0x6b, 0xaa, 0x59, 0x53, 0x98, 0x53, 0x42, 0xd9, 0x51, 0x28, - 0xb2, 0xf8, 0x52, 0x9c, 0x47, 0xf7, 0xb6, 0x86, 0xb2, 0x35, 0x56, 0xec, 0xaf, 0x1e, 0x0f, 0x8d, - 0xe6, 0x61, 0x9a, 0xfb, 0x2c, 0xf5, 0x65, 0x69, 0x74, 0xba, 0xb6, 0x99, 0x74, 0x99, 0x71, 0x89, - 0xbd, 0x6b, 0x2f, 0x4d, 0xfe, 0x14, 0x99, 0x84, 0xb1, 0xdb, 0xc7, 0xed, 0xc5, 0x79, 0x0e, 0xd1, - 0x19, 0x5d, 0xbd, 0xcf, 0x73, 0x46, 0xf9, 0xd5, 0x77, 0xc2, 0x1a, 0xd9, 0xad, 0xa4, 0x33, 0xc1, - 0xbb, 0x1e, 0x98, 0xce, 0x67, 0xd8, 0xfc, 0x28, 0x53, 0x30, 0xa6, 0xe9, 0x9e, 0xae, 0x93, 0x5b, - 0x37, 0xa3, 0x83, 0x63, 0x43, 0xb2, 0x9b, 0x27, 0x61, 0x99, 0x7c, 0x14, 0x88, 0x4c, 0xd2, 0x63, - 0x6e, 0x29, 0xca, 0x5b, 0x9f, 0x43, 0x58, 0x63, 0xc3, 0x55, 0x8d, 0x3b, 0xad, 0xd5, 0x7f, 0xc2, - 0x02, 0xe5, 0xed, 0xef, 0x79, 0xfd, 0xcb, 0x1f, 0x19, 0x9f, 0x1a, 0x7e, 0x59, 0xf6, 0x37, 0x77, - 0x67, 0xf3, 0x13, 0x97, 0x7c, 0x66, 0x65, 0xf4, 0xd3, 0x4c, 0x9c, 0xdf, 0x5a, 0xea, 0xbe, 0x0a, - 0xed, 0xf1, 0x56, 0x99, 0xb9, 0xf2, 0xa6, 0xe9, 0x53, 0x3f, 0x05, 0x77, 0x3c, 0xb3, 0x66, 0x4e, - 0xe5, 0xcd, 0x3a, 0xf8, 0xed, 0x3a, 0x6e, 0xd6, 0xa7, 0x36, 0xbc, 0xf8, 0xe8, 0xad, 0xb6, 0xa4, - 0xee, 0x9c, 0x9a, 0x4d, 0x69, 0xbf, 0xc6, 0x52, 0x2c, 0x69, 0x57, 0xa6, 0x9b, 0xb4, 0x5c, 0x6b, - 0xb5, 0xe3, 0x35, 0x4d, 0xbd, 0xc5, 0xf1, 0x7d, 0x6b, 0xc4, 0x02, 0xeb, 0x97, 0x5a, 0xdc, 0x57, - 0x78, 0xbe, 0x10, 0xed, 0xb4, 0x92, 0x4f, 0x6d, 0x5f, 0xe2, 0xb2, 0xe4, 0xb8, 0x6c, 0xd7, 0xe2, - 0xa9, 0x69, 0x4b, 0xdb, 0x9f, 0x19, 0xbb, 0xa7, 0x25, 0x65, 0x9d, 0x24, 0x54, 0x87, 0x7b, 0xa6, - 0xcf, 0xc6, 0x92, 0x19, 0x58, 0xe8, 0x1b, 0xba, 0x38, 0x84, 0x2c, 0x7b, 0x43, 0xe2, 0x11, 0xeb, - 0x8b, 0xef, 0x9f, 0xf8, 0x2c, 0x32, 0x4d, 0x97, 0x75, 0x1f, 0xb6, 0xe3, 0xc9, 0x3a, 0x45, 0xad, - 0x07, 0x41, 0xd7, 0x11, 0x0a, 0x56, 0xb6, 0x71, 0xd1, 0xb7, 0x30, 0xd6, 0x2e, 0x2e, 0x2f, 0x17, - 0xc1, 0x5d, 0xea, 0x62, 0x5c, 0x98, 0x6b, 0x13, 0x19, 0x98, 0x67, 0x69, 0xaa, 0x7e, 0xf8, 0x2a, - 0x12, 0xad, 0xa3, 0x46, 0xce, 0x93, 0x6b, 0x78, 0xb6, 0x70, 0xf1, 0xb6, 0x55, 0x66, 0xa2, 0x1d, - 0x7c, 0x55, 0xb0, 0xec, 0x34, 0xec, 0x92, 0x4a, 0x6d, 0xe2, 0xd5, 0xca, 0x90, 0x0f, 0xee, 0xb9, - 0x15, 0x63, 0xaa, 0xbf, 0x8d, 0x33, 0x4e, 0xbb, 0xc0, 0x8d, 0xb3, 0x35, 0xbd, 0x2c, 0x03, 0x48, - 0xc2, 0x0a, 0x09, 0x25, 0xb0, 0xcf, 0x61, 0x54, 0xa5, 0xcc, 0xa2, 0xb4, 0x93, 0x4e, 0xb4, 0x82, - 0xfa, 0xf8, 0x50, 0xad, 0x54, 0xa2, 0xe2, 0x04, 0x79, 0x71, 0x56, 0x0d, 0x12, 0xbc, 0x50, 0xf1, - 0xd5, 0x32, 0x71, 0xd1, 0x86, 0x94, 0x1b, 0xe3, 0x35, 0x8d, 0x50, 0x7b, 0x25, 0x35, 0xb9, 0x24, - 0x25, 0x17, 0xa9, 0x33, 0x60, 0x9a, 0xa3, 0x89, 0x91, 0x52, 0xc2, 0xf1, 0xe6, 0x18, 0xbd, 0xc7, - 0x59, 0x58, 0x6e, 0x68, 0xca, 0x81, 0x95, 0x91, 0x54, 0x0f, 0xc2, 0x96, 0x28, 0x43, 0x76, 0xe0, - 0x7f, 0x9e, 0x7a, 0xac, 0xc2, 0x6c, 0x8f, 0x06, 0xf0, 0xa6, 0xa7, 0x30, 0xee, 0xee, 0x54, 0xf8, - 0x89, 0xdf, 0x33, 0xb4, 0xd9, 0x17, 0xf8, 0x50, 0xa4, 0xc6, 0x60, 0xed, 0x8c, 0xf1, 0xca, 0x58, - 0xd1, 0xbc, 0xf7, 0xc0, 0xda, 0x46, 0x54, 0x5a, 0xf6, 0xaa, 0xcf, 0xe7, 0xc2, 0x95, 0x06, 0x5e, - 0x5f, 0xa3, 0x2d, 0x68, 0x3c, 0x66, 0x90, 0x76, 0xd1, 0x1d, 0xb0, 0x34, 0x1c, 0xf8, 0xc3, 0x33, - 0x5f, 0x94, 0xe3, 0xb8, 0x10, 0xec, 0x66, 0xda, 0x2c, 0x31, 0xbb, 0x56, 0x3e, 0x2d, 0x8b, 0xf9, - 0xac, 0x6b, 0xe3, 0x4a, 0xa4, 0x78, 0x58, 0xb9, 0xaf, 0x3a, 0xc6, 0x4d, 0x35, 0xd9, 0x7c, 0x39, - 0xe5, 0x26, 0x3d, 0x8e, 0x3e, 0x4a, 0x3c, 0xc4, 0x4c, 0x52, 0x7e, 0x81, 0x5a, 0x4c, 0xf6, 0x1f, - 0x2d, 0x21, 0xe8, 0xff, 0x0a, 0x57, 0x10, 0x77, 0xc0, 0x87, 0x21, 0xac, 0x74, 0xcc, 0x02, 0xfd, - 0x90, 0xef, 0x3a, 0xb4, 0xdb, 0x26, 0x3e, 0x36, 0xfd, 0x3a, 0xc9, 0x79, 0x54, 0xbd, 0x6d, 0x60, - 0xed, 0xa6, 0xf9, 0x44, 0x6c, 0x84, 0xe4, 0x22, 0xb7, 0x6d, 0x02, 0xdd, 0x53, 0x2e, 0x77, 0xf8, - 0x50, 0xb6, 0x37, 0x24, 0x13, 0x08, 0x9b, 0xd5, 0x43, 0xdf, 0x05, 0xc7, 0xe9, 0xbb, 0x1d, 0x74, - 0x69, 0xa0, 0xc8, 0x92, 0xbe, 0x08, 0x36, 0xf3, 0xe6, 0x9e, 0x06, 0x54, 0xd5, 0x8f, 0xab, 0xbb, - 0xbf, 0xf8, 0x52, 0x89, 0x2a, 0x4d, 0x4b, 0x71, 0x15, 0x11, 0x91, 0x70, 0xcb, 0x96, 0x6d, 0xea, - 0x9d, 0xbe, 0x14, 0xe3, 0xc9, 0xec, 0x3d, 0x79, 0xb9, 0xb1, 0x84, 0xac, 0xdc, 0x76, 0x13, 0x45, - 0x63, 0x84, 0x7a, 0x6f, 0xf1, 0x95, 0x37, 0x5c, 0xa9, 0xf8, 0xfd, 0x94, 0x36, 0x63, 0x58, 0xc0, - 0x76, 0xb5, 0xa4, 0x92, 0xab, 0x74, 0x3a, 0x48, 0x5e, 0x85, 0xe3, 0x66, 0x53, 0x6b, 0x12, 0xa3, - 0x58, 0x87, 0xc4, 0x1e, 0x53, 0x49, 0x14, 0xf1, 0xf1, 0x78, 0x60, 0x58, 0xba, 0xa3, 0xbd, 0xe3, - 0x09, 0xc8, 0x8a, 0x65, 0xb3, 0x72, 0xff, 0xfc, 0x29, 0x66, 0x47, 0x8d, 0xe1, 0x0e, 0x8d, 0xf8, - 0xdc, 0x23, 0xea, 0x88, 0xd9, 0xe3, 0x06, 0xe3, 0xb7, 0xc2, 0x99, 0xb6, 0xd3, 0xdb, 0xee, 0x5c, - 0xde, 0xb1, 0x64, 0xc8, 0x60, 0x4e, 0x19, 0xf2, 0x59, 0x4b, 0xff, 0xea, 0xf8, 0x52, 0x35, 0x76, - 0xb7, 0xe3, 0xd0, 0x35, 0x96, 0xb5, 0xd9, 0x6d, 0x41, 0x4b, 0x79, 0x31, 0xee, 0xf0, 0x9d, 0x08, - 0xeb, 0xe2, 0xad, 0x11, 0x84, 0xdd, 0xcc, 0xc7, 0xf8, 0x2a, 0xd1, 0xb2, 0x50, 0xad, 0x6c, 0xd2, - 0x97, 0xb6, 0xfe, 0x39, 0x4e, 0x05, 0x5e, 0x14, 0xb1, 0x23, 0x52, 0xd0, 0xdb, 0xbb, 0x46, 0x61, - 0xcf, 0x7b, 0x2d, 0x89, 0x1c, 0xa6, 0xca, 0x93, 0x3e, 0xa0, 0xc2, 0xa0, 0xb7, 0xfc, 0x4f, 0x22, - 0xe8, 0x6a, 0x28, 0x69, 0x41, 0xb5, 0x6b, 0xf0, 0x89, 0xd3, 0xa3, 0xb1, 0xbb, 0x45, 0xcf, 0x4d, - 0x3f, 0x05, 0x83, 0x39, 0x36, 0x86, 0x86, 0x86, 0x87, 0xa7, 0x19, 0x57, 0x7c, 0x3a, 0x5a, 0x4a, - 0x5d, 0x24, 0x97, 0xd8, 0xf3, 0x32, 0xc3, 0xc5, 0xeb, 0xf1, 0x27, 0x49, 0xb2, 0xe6, 0xe8, 0xbf, - 0x31, 0x9b, 0xb6, 0xfe, 0x24, 0x95, 0xbd, 0xef, 0xe3, 0x0e, 0xd9, 0x9e, 0x87, 0x56, 0x31, 0x57, - 0x3e, 0xea, 0xd2, 0xab, 0x65, 0xcf, 0x0a, 0x13, 0x24, 0x35, 0x4e, 0x9e, 0xef, 0xcd, 0xe5, 0xf3, - 0x09, 0xc5, 0xd7, 0xc2, 0x33, 0xfb, 0xb4, 0xda, 0x69, 0xb6, 0xa5, 0xd6, 0xaa, 0xf0, 0xf9, 0x9c, - 0x5e, 0x6f, 0x17, 0x6c, 0x98, 0x4c, 0xb3, 0x3c, 0x5d, 0xbb, 0x67, 0xf5, 0x2f, 0x67, 0xf0, 0x52, - 0x5b, 0x6d, 0x49, 0xe3, 0xab, 0xaf, 0xaf, 0x85, 0xc9, 0xb4, 0x6e, 0xf6, 0xed, 0x66, 0xf1, 0x1f, - 0xfe, 0x89, 0x17, 0xca, 0x2c, 0xda, 0x6d, 0x1c, 0x57, 0x6f, 0x8c, 0x93, 0x34, 0xac, 0x91, 0x22, - 0x64, 0xd6, 0xd4, 0x9d, 0xb9, 0xf1, 0xf6, 0xaa, 0xb4, 0x93, 0xd2, 0x49, 0x2a, 0xf8, 0x43, 0x93, - 0x53, 0xa6, 0xf7, 0xb3, 0xaf, 0x9a, 0xd3, 0x4d, 0x34, 0xb8, 0x8b, 0xea, 0xf7, 0x7f, 0x76, 0x9a, - 0xfc, 0x23, 0xab, 0x4d, 0x6a, 0xb7, 0xb5, 0xe1, 0x1a, 0x1a, 0x13, 0x26, 0x9e, 0xd4, 0x8c, 0x44, - 0xd2, 0x7e, 0x14, 0x19, 0x47, 0xca, 0x95, 0x15, 0x8f, 0x35, 0x1e, 0xfc, 0xcd, 0xb1, 0xb1, 0xc4, - 0xc2, 0x93, 0xdd, 0x38, 0x4a, 0x55, 0x73, 0x5d, 0xba, 0xcc, 0x2d, 0xec, 0xf4, 0xdb, 0xef, 0x85, - 0x0e, 0xb1, 0x04, 0x2a, 0x04, 0xc6, 0x4f, 0x66, 0x0e, 0x41, 0xd3, 0x4f, 0x6d, 0x50, 0x3f, 0x6b, - 0xf1, 0xdf, 0x16, 0x41, 0x29, 0x8b, 0xb6, 0x05, 0xb2, 0x6f, 0xf8, 0x2b, 0x3a, 0x6f, 0x9e, 0x16, - 0xad, 0xd1, 0xa3, 0x8b, 0xe1, 0x1e, 0x99, 0x73, 0x7b, 0xb4, 0x38, 0xaa, 0xd7, 0x8b, 0xc3, 0xe4, - 0x65, 0x3d, 0x97, 0x1f, 0x1f, 0xb0, 0xe3, 0x31, 0x65, 0x04, 0x4a, 0x94, 0xd7, 0x6f, 0xfc, 0x10, - 0x16, 0x37, 0x4f, 0x3a, 0x11, 0x93, 0xff, 0x74, 0xd5, 0xe2, 0x5a, 0xff, 0xc3, 0xc2, 0x36, 0x45, - 0x41, 0x7b, 0xa4, 0x2b, 0x71, 0x0f, 0x72, 0xda, 0x55, 0x1f, 0x45, 0x15, 0x7f, 0xf8, 0x29, 0x12, - 0x58, 0xe4, 0xb0, 0xae, 0x4b, 0xd2, 0x5b, 0x5d, 0x2a, 0xf1, 0xd5, 0x91, 0x8a, 0x72, 0xc5, 0xb6, - 0xe7, 0xef, 0xe0, 0xa8, 0x45, 0xd9, 0x3d, 0xea, 0x8a, 0xd9, 0xc9, 0x56, 0x47, 0x9f, 0x05, 0x35, - 0xad, 0xd6, 0x5d, 0x7e, 0x76, 0xaa, 0xce, 0x77, 0xc1, 0x76, 0xb7, 0x31, 0x26, 0x5e, 0x66, 0x5f, - 0xe3, 0xb1, 0x68, 0xcf, 0x77, 0x1d, 0x1c, 0x77, 0x46, 0xa8, 0xb7, 0xef, 0x82, 0xb2, 0x97, 0x2d, - 0x38, 0xf3, 0x6d, 0x06, 0xec, 0xcf, 0xa2, 0x1c, 0x1e, 0x5e, 0x39, 0xf0, 0x55, 0x4a, 0xb9, 0x1d, - 0x61, 0x4b, 0xcb, 0x48, 0x3b, 0x1c, 0x5f, 0x0f, 0xf7, 0x65, 0x8d, 0x9a, 0xb6, 0xd3, 0xfb, 0x1b, - 0x23, 0xb0, 0xe1, 0x01, 0xa9, 0x56, 0x54, 0x7b, 0xff, 0x0f, 0x9d, 0x2a, 0x64, 0x4e, 0xe6, 0xe4, - 0x29, 0x6a, 0x31, 0x75, 0x5b, 0x7c, 0xbf, 0xfc, 0x16, 0x11, 0x09, 0x0d, 0x64, 0x7f, 0x42, 0x6d, - 0x13, 0xcd, 0x7c, 0x44, 0xeb, 0x3a, 0x4c, 0x4b, 0xae, 0x51, 0x33, 0xb9, 0x7f, 0x05, 0x7a, 0xa5, - 0xc2, 0x3c, 0x2a, 0x73, 0xbc, 0xac, 0xe2, 0x48, 0xad, 0xf0, 0x9d, 0xfa, 0x66, 0x55, 0x32, 0xaf, - 0x85, 0xa9, 0xb2, 0x19, 0x99, 0x4f, 0x59, 0x79, 0xe3, 0x0b, 0xfc, 0x6d, 0xb8, 0x2a, 0xd1, 0x51, - 0xb1, 0x2a, 0x5a, 0x9d, 0x47, 0x9d, 0x75, 0x4c, 0x9c, 0x45, 0xff, 0xf8, 0xce, 0x83, 0x3e, 0xd6, - 0xf4, 0x5b, 0x12, 0x46, 0x95, 0xa8, 0x75, 0x45, 0x5b, 0x85, 0x06, 0xc7, 0xe0, 0xb2, 0xc4, 0x89, - 0x25, 0x22, 0x0c, 0x7b, 0x24, 0x47, 0x4b, 0x07, 0xc3, 0xd2, 0x30, 0x54, 0x1b, 0x2a, 0x6c, 0xde, - 0xae, 0x46, 0xb1, 0xaa, 0x9a, 0x6d, 0xb7, 0xfe, 0x14, 0xec, 0xf7, 0xf4, 0xcb, 0x24, 0xb0, 0x49, - 0x1d, 0x98, 0x37, 0x66, 0x71, 0x7c, 0x25, 0x7b, 0x74, 0x9d, 0x2f, 0x8e, 0x2f, 0x71, 0x59, 0x3e, - 0xcf, 0x4e, 0xd8, 0xf5, 0x3c, 0x71, 0x1d, 0xbf, 0x26, 0x65, 0xec, 0x0d, 0xa6, 0x75, 0x69, 0x9f, - 0xc4, 0x94, 0xb1, 0xea, 0xa6, 0x97, 0xe1, 0xbd, 0xb9, 0xba, 0xfd, 0xb7, 0x6f, 0xc7, 0xdf, 0x63, - 0xe2, 0xb6, 0x9a, 0xb5, 0xe0, 0x80, 0x9c, 0xb8, 0xba, 0xad, 0x7a, 0xfc, 0x43, 0xef, 0xe3, 0x63, - 0xf5, 0xd4, 0xf6, 0xd5, 0x2f, 0x4e, 0x36, 0xe6, 0xe7, 0x6a, 0xac, 0xa5, 0x95, 0xd6, 0x2b, 0xff, - 0x0b, 0x5f, 0xeb, 0x8e, 0x92, 0x44, 0xc8, 0xaf, 0x55, 0x55, 0x7b, 0x67, 0xfe, 0x10, 0x23, 0x6d, - 0xba, 0x4e, 0xf2, 0xe0, 0xda, 0xca, 0xb5, 0xfc, 0x7e, 0xdd, 0xb6, 0xb5, 0x33, 0x13, 0x11, 0xfe, - 0x16, 0x3d, 0xd3, 0x86, 0xab, 0x32, 0x6b, 0x19, 0xf7, 0x10, 0xf9, 0xbe, 0x27, 0xfe, 0x0a, 0x6f, - 0x76, 0xae, 0x97, 0x49, 0x2d, 0x7c, 0x69, 0x9c, 0x67, 0x0f, 0xba, 0x2b, 0xee, 0x34, 0xde, 0xde, - 0x95, 0xdd, 0x09, 0x84, 0x9e, 0xdf, 0xf8, 0x28, 0xe9, 0xb5, 0x93, 0x4d, 0x5f, 0x3e, 0x1d, 0xe4, - 0xed, 0x69, 0xd3, 0xb4, 0x94, 0x2c, 0xbe, 0x6f, 0x46, 0xdf, 0x88, 0x1a, 0x94, 0x9f, 0xb4, 0xd7, - 0x85, 0x36, 0x9a, 0x69, 0x69, 0xcb, 0xb1, 0x24, 0x91, 0x36, 0xcd, 0x48, 0xc8, 0x8b, 0xc6, 0x8a, - 0x36, 0x7b, 0xa7, 0x4d, 0x3a, 0x19, 0x9e, 0xf8, 0x55, 0xc7, 0x3a, 0xff, 0xc6, 0x1d, 0x2a, 0x4d, - 0xbd, 0x24, 0x89, 0x5c, 0xd3, 0x6a, 0xab, 0xf3, 0x77, 0x4b, 0xc6, 0x5a, 0x76, 0xd5, 0xd7, 0xb9, - 0x3c, 0x69, 0xa4, 0xff, 0x09, 0x96, 0x4c, 0xf6, 0xd5, 0xf1, 0x44, 0xbd, 0xdb, 0x2e, 0xfe, 0x0a, - 0xce, 0xa6, 0xc3, 0xe7, 0xbb, 0xdd, 0xd6, 0xe7, 0xc6, 0x19, 0xab, 0x77, 0xe3, 0xd4, 0x1e, 0x4a, - 0x68, 0x7f, 0xb7, 0x6b, 0xef, 0xe0, 0x94, 0x53, 0xfa, 0xfa, 0x50, 0x9e, 0xc5, 0x3d, 0xe6, 0xf8, - 0x74, 0x4d, 0x35, 0x4e, 0x7c, 0x34, 0x37, 0xdb, 0xe8, 0xaf, 0x8b, 0xbf, 0xe1, 0xd9, 0xec, 0x2e, - 0xee, 0x8d, 0xd3, 0x47, 0x6d, 0xab, 0x25, 0xe9, 0xff, 0xe0, 0xb0, 0x84, 0x68, 0x74, 0x50, 0x9e, - 0xd1, 0x37, 0xa6, 0xd3, 0xf1, 0x3e, 0x38, 0xf0, 0xa7, 0x5a, 0x0a, 0xcb, 0x62, 0xb7, 0x70, 0xc3, - 0x4c, 0xaf, 0x36, 0x90, 0xd8, 0x75, 0xf4, 0xf6, 0x5c, 0x89, 0x87, 0x8d, 0x21, 0x11, 0x0d, 0x27, - 0xd1, 0xde, 0x2b, 0xb8, 0xdc, 0x5a, 0xf6, 0x9e, 0x32, 0x38, 0xd8, 0xe7, 0x1f, 0x8d, 0x73, 0xeb, - 0xe0, 0x90, 0xed, 0x0e, 0x29, 0x3c, 0x8b, 0x2f, 0x8f, 0xc6, 0x14, 0xde, 0x28, 0xc9, 0x14, 0x54, - 0x4d, 0x1d, 0xff, 0x84, 0x0c, 0xd3, 0x6e, 0x78, 0x5e, 0xfb, 0x96, 0x0f, 0x20, 0xf8, 0x29, 0x3b, - 0x36, 0x6c, 0x63, 0x25, 0x59, 0x52, 0xb0, 0xe7, 0x44, 0xf8, 0x78, 0xf8, 0x24, 0xd9, 0x31, 0x8f, - 0xe3, 0x63, 0xe3, 0x28, 0x6b, 0xb4, 0x18, 0xa9, 0x84, 0xd1, 0x4f, 0x3a, 0xdb, 0x87, 0xac, 0x37, - 0xbc, 0x83, 0x5d, 0x9e, 0x90, 0x52, 0x33, 0x45, 0xaf, 0x65, 0xe0, 0xb7, 0x49, 0x7b, 0x22, 0x12, - 0xdb, 0x91, 0x25, 0xf8, 0x2d, 0xb2, 0x61, 0x39, 0xcd, 0xb4, 0xcc, 0xcd, 0xeb, 0xe3, 0x23, 0x76, - 0x69, 0x52, 0xd2, 0x3c, 0x60, 0xd0, 0xcd, 0xbe, 0x75, 0x09, 0x7e, 0x11, 0x29, 0x16, 0xa1, 0xb9, - 0x35, 0x86, 0x4d, 0x43, 0xb7, 0xb0, 0xa0, 0xe3, 0xc0, 0xfc, 0x44, 0x35, 0x49, 0xd0, 0xe4, 0xe8, - 0x49, 0x26, 0x28, 0x3f, 0x84, 0x27, 0x4d, 0x8a, 0x99, 0x52, 0xd4, 0xb3, 0x2c, 0x86, 0x3b, 0x89, - 0xf1, 0xfd, 0xd8, 0xc7, 0xcf, 0x11, 0xd2, 0x2a, 0x42, 0xb5, 0xac, 0xa0, 0xdc, 0x18, 0x3e, 0x49, - 0x1e, 0x86, 0xdb, 0x7e, 0x34, 0xc7, 0x81, 0x71, 0x8f, 0xdb, 0xb7, 0x4e, 0x56, 0x1a, 0x69, 0x36, - 0x9e, 0x07, 0x4c, 0x8b, 0x14, 0xff, 0xf0, 0xfd, 0x26, 0x44, 0x6d, 0x27, 0xcb, 0xb9, 0x22, 0xd2, - 0x18, 0xd9, 0xeb, 0x1e, 0xd5, 0x12, 0x7f, 0xe0, 0x9e, 0xec, 0x36, 0x32, 0x21, 0x1f, 0x3c, 0xc1, - 0x40, 0xd6, 0x3f, 0xc1, 0x4c, 0x72, 0xbd, 0xed, 0x63, 0x42, 0x83, 0x1a, 0x4a, 0x6a, 0x07, 0xb1, - 0x44, 0xf4, 0x0f, 0x4e, 0xff, 0x0a, 0x58, 0x6d, 0x50, 0xde, 0xdc, 0x82, 0xc3, 0x3e, 0x3a, 0x19, - 0x5e, 0xd4, 0x44, 0x65, 0x71, 0xf9, 0x40, 0xab, 0xc1, 0x06, 0x6d, 0xa4, 0x89, 0xe5, 0x29, 0xa1, - 0x4c, 0xbe, 0xa3, 0xfc, 0x8f, 0xff, 0x13, 0xe5, 0x63, 0xba, 0x4c, 0x7e, 0x38, 0xe5, 0xff, 0x27, - 0x4d, 0x34, 0xdc, 0x5f, 0xf0, 0xa6, 0xe9, 0x9b, 0x8e, 0x51, 0xcc, 0xa6, 0xa8, 0xba, 0xb6, 0x37, - 0x31, 0x1e, 0xb9, 0x34, 0x75, 0xb1, 0xbf, 0xc2, 0x92, 0x31, 0x63, 0x2e, 0xdd, 0x55, 0xac, 0x41, - 0xb5, 0x86, 0xb0, 0xdb, 0x56, 0xaf, 0xf0, 0xa1, 0xa7, 0xc7, 0xa9, 0xa6, 0xa9, 0xe9, 0x24, 0x4c, - 0xe2, 0xcb, 0xe3, 0xcf, 0x3f, 0x5c, 0xff, 0x64, 0x9a, 0xaa, 0x7f, 0x1b, 0xd4, 0xd8, 0xd8, 0x9f, - 0xe8, 0xae, 0xda, 0x1d, 0x0c, 0xda, 0xcf, 0xb7, 0x6d, 0x7c, 0x28, 0x44, 0x0a, 0x94, 0x6d, 0x61, - 0x6d, 0x69, 0xe3, 0x27, 0x6e, 0x8d, 0x6a, 0xda, 0x29, 0x49, 0x14, 0xef, 0x82, 0xc1, 0x29, 0xa9, - 0x3c, 0x72, 0x79, 0x3e, 0xd3, 0x5c, 0xbe, 0x30, 0x63, 0x76, 0xd0, 0xea, 0xbf, 0x1a, 0xd2, 0x78, - 0xf3, 0xf8, 0xad, 0xf8, 0x50, 0x5b, 0xed, 0x24, 0xd8, 0x41, 0xdb, 0x1a, 0xd2, 0x6e, 0x49, 0x8d, - 0xf5, 0xf0, 0x52, 0x2b, 0x74, 0x53, 0xf3, 0xf1, 0xcc, 0x3f, 0xe6, 0xe9, 0x19, 0x4f, 0x84, 0x45, - 0xa6, 0x76, 0x55, 0xed, 0x58, 0xc5, 0x3a, 0x74, 0xfc, 0x60, 0xa1, 0xa5, 0x6e, 0xfb, 0x54, 0x8f, - 0xd3, 0x6c, 0xbf, 0x6d, 0x45, 0x4d, 0xa9, 0xaf, 0xc3, 0xe5, 0x2c, 0x54, 0x2a, 0x4a, 0xd6, 0x9b, - 0xb3, 0x68, 0xd6, 0xd6, 0xf6, 0x5a, 0x48, 0x9a, 0xb5, 0x4c, 0x1b, 0x6d, 0xb6, 0xff, 0xc1, 0x51, - 0xb2, 0x61, 0x75, 0x3e, 0x9e, 0xda, 0x73, 0x7c, 0x70, 0x45, 0x3d, 0xb3, 0xea, 0x75, 0xa6, 0xf7, - 0xf8, 0x2a, 0xdd, 0xcf, 0xaf, 0xc7, 0xe7, 0x4c, 0x57, 0x4c, 0xae, 0x3e, 0x15, 0x08, 0x45, 0x8d, - 0xae, 0x35, 0x95, 0x55, 0x8c, 0x61, 0x5d, 0xfb, 0x65, 0xfa, 0x7e, 0x37, 0x51, 0xe1, 0x1c, 0x75, - 0x3b, 0x49, 0x92, 0x59, 0xf5, 0x3d, 0x4d, 0x87, 0x14, 0xbd, 0x3c, 0xbd, 0xb3, 0x7f, 0xc1, 0x59, - 0xde, 0xad, 0x08, 0xfe, 0x67, 0xc6, 0x97, 0x11, 0x73, 0xf1, 0x85, 0xe3, 0xaa, 0x9f, 0x74, 0xeb, - 0x77, 0x12, 0xe7, 0x52, 0xf8, 0xc2, 0x97, 0xf9, 0x77, 0xe5, 0xe9, 0xe6, 0xd6, 0xff, 0x08, 0x5d, - 0xd5, 0x54, 0x5f, 0xba, 0x62, 0x1f, 0xe3, 0x2d, 0xb7, 0x93, 0x97, 0xbc, 0x97, 0x09, 0x8f, 0xc7, - 0x63, 0xf2, 0x2a, 0x92, 0xf0, 0x5d, 0x3e, 0x6a, 0xad, 0x29, 0xef, 0x8f, 0x9b, 0xa6, 0x7f, 0x79, - 0x6a, 0x6f, 0x44, 0x7f, 0xf8, 0x2d, 0xb4, 0x5d, 0x26, 0xc7, 0xaa, 0xd8, 0xf8, 0x2b, 0xa6, 0xc9, - 0x4b, 0x89, 0x74, 0xa7, 0xcc, 0x8a, 0x1e, 0x36, 0xd5, 0x2e, 0x7d, 0x78, 0x9c, 0xf9, 0xc4, 0x9a, - 0x42, 0x5e, 0x54, 0xab, 0xab, 0xba, 0xba, 0xf8, 0x52, 0x4c, 0x96, 0xec, 0x8c, 0x63, 0x76, 0x76, - 0x8f, 0xd5, 0xae, 0x7f, 0x0b, 0x2a, 0x37, 0xc6, 0x19, 0xba, 0xb2, 0xb5, 0x49, 0x4e, 0x7b, 0xa4, - 0x49, 0x24, 0x96, 0xdf, 0x82, 0xca, 0x49, 0x26, 0x35, 0xf1, 0x95, 0xe5, 0x18, 0xd6, 0x54, 0xe2, - 0x67, 0x17, 0xc2, 0x96, 0xd2, 0x6d, 0x59, 0x73, 0x05, 0x0c, 0x9b, 0x4a, 0xa4, 0x43, 0x8e, 0x90, - 0xdf, 0x9d, 0x7c, 0x27, 0xd2, 0x26, 0x5e, 0x34, 0x41, 0x84, 0x0d, 0x0e, 0xae, 0x06, 0x93, 0x6b, - 0x8f, 0xa6, 0x6a, 0x32, 0xb1, 0xa8, 0x95, 0x7c, 0xf4, 0xff, 0x0e, 0x9e, 0x9d, 0x26, 0xcf, 0x57, - 0x58, 0xab, 0x36, 0xcf, 0x10, 0xd3, 0x85, 0x19, 0xc6, 0x7b, 0xff, 0x0a, 0x1a, 0xcb, 0x91, 0xb7, - 0x2e, 0x8e, 0xcb, 0xb8, 0xad, 0xa4, 0x50, 0x72, 0x6b, 0x3e, 0x37, 0x08, 0x1d, 0x3c, 0xa8, 0x36, - 0x3a, 0x95, 0x86, 0x35, 0xde, 0xa1, 0x3d, 0x0a, 0xbd, 0x63, 0x48, 0xe3, 0xba, 0x5b, 0x9e, 0x90, - 0xa8, 0x49, 0x59, 0x79, 0x2b, 0x2d, 0x23, 0xff, 0xf1, 0xa5, 0x19, 0xce, 0x12, 0x47, 0x51, 0xa1, - 0xd4, 0x44, 0x1a, 0x88, 0xc5, 0xc3, 0x2b, 0x3a, 0x05, 0xcd, 0xb0, 0xd9, 0x91, 0xec, 0x4e, 0x18, - 0x75, 0x33, 0xdb, 0x7f, 0xf0, 0xa5, 0x90, 0xca, 0x10, 0xe5, 0x6b, 0x55, 0x7d, 0x2d, 0x7d, 0x4c, - 0x65, 0x8d, 0x5f, 0x75, 0xb0, 0xe0, 0x90, 0x3b, 0x68, 0xa9, 0xbb, 0xe3, 0x69, 0xda, 0x05, 0x65, - 0xa4, 0xc0, 0xcf, 0xfc, 0x86, 0xe5, 0x9a, 0xa8, 0x34, 0x45, 0x0c, 0x3f, 0xde, 0x4c, 0xb1, 0xa7, - 0x77, 0xd5, 0x6c, 0xdd, 0xdb, 0x1b, 0x49, 0x37, 0x7a, 0xde, 0x33, 0x23, 0xd0, 0x94, 0x6f, 0x74, - 0x1a, 0x27, 0xc1, 0xcb, 0xb6, 0x7f, 0x59, 0x20, 0xc7, 0x2e, 0x31, 0x77, 0xf1, 0xb1, 0xdd, 0x03, - 0xb6, 0x81, 0x75, 0x6b, 0x53, 0x15, 0x36, 0xc4, 0xaf, 0xfb, 0xf9, 0xb3, 0x56, 0x90, 0xac, 0xed, - 0x65, 0xd5, 0xe7, 0x8a, 0xcf, 0x58, 0x1f, 0xf6, 0x7f, 0xc2, 0x99, 0xda, 0xc6, 0xf7, 0x91, 0xba, - 0xf4, 0x26, 0x6a, 0xca, 0xe9, 0x6f, 0x99, 0xa8, 0x78, 0xa5, 0xbe, 0x14, 0x28, 0xe2, 0x16, 0xd6, - 0x46, 0x30, 0xe3, 0x57, 0x94, 0xdc, 0xa1, 0xd7, 0x04, 0x91, 0xfb, 0xe4, 0xa0, 0xee, 0x30, 0x76, - 0xa5, 0x97, 0x3e, 0x14, 0xd1, 0xcc, 0xcd, 0xc8, 0x59, 0xc8, 0xcb, 0xd0, 0x02, 0x7a, 0xd2, 0x83, - 0xc2, 0x73, 0xbd, 0x88, 0x1a, 0xa4, 0x6d, 0xf0, 0xa6, 0x34, 0x24, 0x5d, 0x68, 0x9e, 0xb8, 0x45, - 0xad, 0x48, 0x98, 0x8c, 0xac, 0xd0, 0xda, 0x8a, 0x38, 0x8f, 0x89, 0xd5, 0x1b, 0xe3, 0x68, 0x67, - 0x92, 0x0e, 0x11, 0xd4, 0x11, 0x14, 0xe5, 0xa3, 0x64, 0x58, 0xc6, 0x3b, 0x71, 0xfb, 0xc8, 0x57, - 0xa2, 0x34, 0x3f, 0xc6, 0xd4, 0xdd, 0x5d, 0x71, 0xf1, 0xe3, 0x8c, 0xe6, 0xf8, 0x58, 0xd5, 0x43, - 0x07, 0x14, 0x4a, 0x8e, 0x6c, 0x79, 0xd9, 0x32, 0x4d, 0xdb, 0x9f, 0xf8, 0x52, 0x93, 0xb1, 0xba, - 0x5d, 0x27, 0xea, 0x54, 0x46, 0x60, 0x78, 0xf2, 0xf8, 0xb2, 0x15, 0x00, 0xd7, 0xc6, 0xc6, 0xf1, - 0xd9, 0x75, 0x8c, 0x7e, 0xb6, 0x2f, 0x03, 0x40, 0x90, 0xba, 0x4c, 0x7a, 0xf1, 0x0d, 0x49, 0x12, - 0x45, 0x63, 0x54, 0x0a, 0x4a, 0xa8, 0xe7, 0xaf, 0xf8, 0x53, 0x18, 0x7d, 0xd6, 0x07, 0xda, 0xda, - 0x4a, 0xc6, 0x33, 0x17, 0xa4, 0x91, 0x50, 0x0c, 0xd1, 0xed, 0xc3, 0x7d, 0x8c, 0xbe, 0x36, 0x48, - 0x5a, 0x1d, 0x48, 0xee, 0xca, 0xc3, 0xb8, 0x1f, 0xb2, 0xd0, 0x86, 0xcf, 0xa9, 0x58, 0xa6, 0x9b, - 0x6d, 0xff, 0x8d, 0xa1, 0x22, 0x6d, 0x8c, 0x32, 0xef, 0x0d, 0x51, 0x49, 0x7e, 0x63, 0xd7, 0xb6, - 0xe1, 0x1e, 0x74, 0xdd, 0x1b, 0x72, 0x2a, 0xa6, 0x2d, 0xff, 0xe1, 0xfa, 0xab, 0x92, 0xfd, 0xa9, - 0xea, 0x55, 0xa0, 0xad, 0x12, 0x9b, 0xb7, 0x89, 0x26, 0xa6, 0x9b, 0x6d, 0xff, 0x8a, 0x2b, 0xb7, - 0x6e, 0xdc, 0xff, 0xc6, 0x5e, 0x2d, 0x53, 0x4e, 0xdb, 0xd6, 0xfc, 0xb9, 0xe6, 0xc5, 0x6b, 0xf0, - 0xa0, 0x8b, 0x76, 0xee, 0xd9, 0x36, 0xdd, 0xb2, 0x64, 0x5b, 0xd7, 0xc7, 0x1d, 0x97, 0x2c, 0x5d, - 0x3e, 0x49, 0x5c, 0x43, 0xf9, 0xf8, 0x53, 0x8d, 0xd2, 0x8f, 0x49, 0xd9, 0x92, 0x94, 0xf4, 0x88, - 0x6d, 0x5f, 0x4f, 0xbe, 0x36, 0xdd, 0x3d, 0xf7, 0x13, 0x2f, 0x64, 0xad, 0xbb, 0x61, 0x53, 0xe6, - 0xc6, 0xee, 0x9c, 0xaa, 0x4c, 0xbd, 0xdd, 0xdf, 0xc2, 0x96, 0xaa, 0x68, 0xd9, 0x8b, 0xd2, 0x66, - 0xb7, 0x62, 0xe9, 0x93, 0xc7, 0x3e, 0x14, 0x26, 0x35, 0x7a, 0x34, 0xcf, 0x2f, 0xc7, 0x68, 0x79, - 0x3c, 0x66, 0x8e, 0xcf, 0x8c, 0xb7, 0x4e, 0x7c, 0xd5, 0xd3, 0xdf, 0x1a, 0xaa, 0xaf, 0x1b, 0x23, - 0xfd, 0xb3, 0x31, 0x73, 0x09, 0xa5, 0x4a, 0x1d, 0xac, 0x83, 0x64, 0x32, 0x89, 0x9f, 0xa7, 0x9b, - 0xf8, 0xc3, 0xb3, 0x09, 0x8d, 0xc6, 0xe4, 0x43, 0xfa, 0xaa, 0x49, 0x2c, 0x43, 0x9f, 0x0a, 0x1a, - 0xd4, 0xd9, 0x53, 0x75, 0xb4, 0x86, 0x7d, 0x8a, 0xd0, 0xd5, 0x53, 0x14, 0xf2, 0xfc, 0x3f, 0x9e, - 0x66, 0x4d, 0x6e, 0xbd, 0x99, 0xec, 0x2c, 0xac, 0x58, 0x3d, 0x66, 0xe6, 0xf9, 0x79, 0xbf, 0x85, - 0x0d, 0x57, 0xb7, 0x6f, 0x52, 0x76, 0x32, 0xb2, 0x97, 0x48, 0xfc, 0x60, 0xdb, 0x49, 0xa6, 0xd0, - 0xbb, 0xc9, 0xb9, 0x71, 0x32, 0xf3, 0xf8, 0xeb, 0xf0, 0xa1, 0x53, 0x4e, 0x9a, 0x45, 0xed, 0xcb, - 0x74, 0xaf, 0x77, 0x3d, 0xf0, 0x91, 0x1b, 0x6f, 0x73, 0xe1, 0x23, 0xf8, 0xd1, 0x95, 0x87, 0x2b, - 0x5f, 0x3e, 0xab, 0xb2, 0x91, 0xfb, 0x72, 0x6e, 0x94, 0x5c, 0xa2, 0x6f, 0xdb, 0xff, 0x13, 0x8e, - 0xe5, 0x1e, 0xab, 0xe3, 0x02, 0x29, 0x17, 0x12, 0x9b, 0x6c, 0xdf, 0xe5, 0xca, 0x74, 0xfc, 0x15, - 0xee, 0x92, 0x57, 0x36, 0x5b, 0xbf, 0x2f, 0x85, 0x2d, 0xa9, 0xb2, 0x2a, 0xd3, 0xb6, 0x95, 0xe9, - 0x0e, 0x2b, 0x7c, 0x1f, 0x08, 0x12, 0xae, 0xd5, 0xa2, 0xe9, 0xff, 0x7b, 0xf8, 0x42, 0xe9, 0x6d, - 0x35, 0x76, 0x96, 0xd7, 0x8e, 0xd5, 0xf5, 0xb6, 0x3e, 0xaf, 0xd6, 0x9a, 0xfc, 0x29, 0xa4, 0xed, - 0x5b, 0x76, 0xdc, 0xdd, 0xfc, 0x7d, 0x5f, 0x8b, 0xe1, 0x1e, 0xd0, 0x55, 0xaa, 0x72, 0xf3, 0x63, - 0x7c, 0xad, 0xef, 0x19, 0x19, 0x7c, 0xb4, 0x82, 0xad, 0xc0, 0xbd, 0x4e, 0x69, 0x01, 0xb4, 0x85, - 0xb4, 0x7f, 0x5d, 0xe7, 0xe6, 0xfa, 0x5c, 0xf4, 0xf0, 0xa7, 0x89, 0x3d, 0x6a, 0x9a, 0x75, 0x25, - 0x57, 0xc0, 0xe1, 0xe1, 0x4c, 0x74, 0x9d, 0xd8, 0xf5, 0x49, 0x12, 0x06, 0x6b, 0xb4, 0xdb, 0x34, - 0xab, 0xc2, 0x96, 0xa2, 0xb9, 0xa3, 0xb1, 0xda, 0xa4, 0x34, 0xc8, 0x6f, 0x25, 0x2b, 0xbf, 0x18, - 0x78, 0x2a, 0x10, 0x93, 0x24, 0x3b, 0xa3, 0xb0, 0x3b, 0x6a, 0xfc, 0x8f, 0x49, 0x26, 0x9b, 0xef, - 0x85, 0x04, 0x8d, 0xdd, 0xe1, 0xc7, 0xea, 0xda, 0x41, 0x21, 0x26, 0x43, 0x3a, 0xa3, 0x83, 0xca, - 0x41, 0x1a, 0x68, 0x92, 0x27, 0xc6, 0x8c, 0x84, 0xc1, 0x4b, 0xc8, 0x6d, 0x34, 0x06, 0x1d, 0xe9, - 0xdd, 0x54, 0xda, 0xd1, 0x0c, 0xf1, 0x69, 0x8c, 0xf7, 0xff, 0x1a, 0x57, 0x76, 0xfa, 0x77, 0x3f, - 0xad, 0x4c, 0x43, 0xa8, 0x9f, 0x1c, 0xd6, 0xf4, 0x0e, 0xd7, 0x06, 0x98, 0x86, 0xbf, 0xa6, 0x6f, - 0xf8, 0xdd, 0xf9, 0x1e, 0xfb, 0x4c, 0xac, 0xca, 0x94, 0x26, 0x14, 0x0d, 0x63, 0x73, 0xf5, 0x4c, - 0x87, 0x52, 0x91, 0x5e, 0x58, 0x9e, 0x6d, 0x67, 0xfe, 0x36, 0x6b, 0xbf, 0xe6, 0x29, 0x17, 0x20, - 0x71, 0xd5, 0x49, 0x4e, 0x62, 0x5a, 0xc5, 0x26, 0x2e, 0x30, 0x81, 0x0a, 0x9e, 0x31, 0xea, 0xef, - 0x76, 0xd9, 0x7c, 0x5b, 0x1b, 0x3d, 0x2a, 0x8f, 0xc3, 0xa4, 0x5c, 0xbe, 0x98, 0xf9, 0xf2, 0xf3, - 0x7c, 0x1c, 0x16, 0xd3, 0x25, 0x86, 0xdb, 0x53, 0xf8, 0xee, 0x31, 0xf8, 0x74, 0xb4, 0xca, 0xa0, - 0x36, 0xae, 0xb8, 0xf2, 0x93, 0x76, 0x34, 0x6f, 0x5a, 0xa6, 0x39, 0x88, 0x6d, 0xb3, 0xf9, 0x28, - 0x9f, 0xe3, 0x2d, 0xab, 0x6a, 0xbb, 0xcf, 0x38, 0xc6, 0x4d, 0xdd, 0x37, 0xc1, 0xc1, 0xac, 0x9c, - 0x67, 0xbf, 0x8d, 0xd8, 0x75, 0xad, 0x9d, 0x6d, 0x65, 0x8f, 0xa3, 0xc6, 0x93, 0x1a, 0x19, 0xd9, - 0x7e, 0x36, 0x7d, 0x06, 0x46, 0x45, 0x42, 0x89, 0x7d, 0xc4, 0x4e, 0x63, 0xfc, 0x14, 0xc3, 0x2a, - 0xd2, 0x4e, 0xf3, 0xb7, 0x8d, 0xcc, 0x0f, 0x51, 0xf0, 0x52, 0x7e, 0xb1, 0x0e, 0xb5, 0x89, 0x10, - 0x62, 0xe0, 0xff, 0x0a, 0x1e, 0x86, 0xa4, 0xef, 0x83, 0x6a, 0x26, 0xc5, 0xe8, 0x5b, 0x81, 0x37, - 0x27, 0x73, 0x50, 0x35, 0x7f, 0x9d, 0xa7, 0x55, 0x07, 0xc2, 0x9a, 0x8a, 0x89, 0x52, 0x65, 0xa8, - 0x20, 0x87, 0x4f, 0x15, 0xb6, 0x0f, 0x4d, 0xcb, 0xad, 0x38, 0x33, 0x68, 0x6e, 0x5b, 0x2a, 0x08, - 0xbe, 0x37, 0x65, 0x0c, 0x15, 0x27, 0x2b, 0xcd, 0xaa, 0xb2, 0x6a, 0x96, 0xea, 0x1e, 0xc3, 0xd3, - 0x41, 0x4d, 0x56, 0x53, 0x1e, 0x90, 0xd3, 0x3f, 0x68, 0x8d, 0x9c, 0x70, 0xa7, 0x24, 0x07, 0xb1, - 0xfe, 0x14, 0xc6, 0x40, 0xc0, 0x79, 0xd8, 0x43, 0x0c, 0x3b, 0xda, 0x30, 0xeb, 0x83, 0x59, 0xd0, - 0x37, 0x47, 0x43, 0x1b, 0xc2, 0x25, 0x06, 0x49, 0x5f, 0x8d, 0xaa, 0x12, 0xf8, 0x28, 0x46, 0xd3, - 0x75, 0xc7, 0x74, 0xa3, 0x82, 0x6e, 0x69, 0xd6, 0xc6, 0x75, 0x17, 0x2a, 0x69, 0xb6, 0xdf, 0xf8, - 0x27, 0x22, 0x1b, 0x56, 0x99, 0x31, 0x0d, 0x24, 0xf0, 0x8f, 0x8d, 0xf8, 0x6f, 0xb8, 0x57, 0x9d, - 0x0d, 0xac, 0xde, 0xe4, 0x18, 0x69, 0x5b, 0x52, 0x92, 0xc9, 0x14, 0x4c, 0xa2, 0xd5, 0x11, 0xa3, - 0xfe, 0x37, 0x74, 0x34, 0x4c, 0x58, 0xa4, 0x4a, 0xc8, 0xba, 0xac, 0xe1, 0x03, 0xfa, 0xf5, 0x67, - 0xd8, 0xf0, 0xab, 0x12, 0xc4, 0x9a, 0xff, 0xc6, 0xc9, 0x28, 0x59, 0xe0, 0x9a, 0x4c, 0x9b, 0xd6, - 0x1b, 0x6c, 0xfb, 0x43, 0xd0, 0xda, 0x93, 0xce, 0x87, 0x11, 0x19, 0xd7, 0xd1, 0xff, 0x82, 0xcb, - 0xd5, 0x2a, 0x87, 0x1d, 0x4d, 0xa3, 0x56, 0x6d, 0x68, 0x8f, 0x48, 0x7a, 0xe3, 0xfc, 0x15, 0xc2, - 0x06, 0xff, 0x98, 0x2b, 0xde, 0x14, 0x66, 0x40, 0xb9, 0x35, 0x49, 0xc6, 0x8e, 0x24, 0x95, 0x4a, - 0x2f, 0xb3, 0xbb, 0xfe, 0x32, 0xc6, 0x46, 0x58, 0xd8, 0xcb, 0x71, 0x64, 0xd4, 0xe3, 0xdb, 0x1d, - 0xd9, 0x3b, 0x05, 0xa3, 0xf0, 0xee, 0xc6, 0xe7, 0x62, 0xa5, 0x60, 0x7c, 0xc3, 0x19, 0xa3, 0x8e, - 0xa8, 0x91, 0x12, 0x2c, 0x8f, 0xf8, 0x2d, 0x15, 0x3e, 0x1b, 0x37, 0x97, 0xf6, 0xf8, 0xc1, 0x2b, - 0xf2, 0x3b, 0xdb, 0xdd, 0x89, 0x73, 0x63, 0x59, 0xba, 0x49, 0x44, 0x9b, 0xf8, 0xde, 0xa5, 0xfb, - 0x6e, 0x4e, 0xdf, 0x74, 0xa2, 0xdc, 0x7a, 0xa6, 0xbf, 0x1a, 0x65, 0xea, 0x7b, 0x9f, 0x76, 0x25, - 0xa4, 0x5d, 0xd7, 0xae, 0x5b, 0xca, 0xb6, 0xcd, 0xff, 0xc1, 0x60, 0x92, 0xe3, 0x0e, 0x27, 0x99, - 0x87, 0x33, 0xe2, 0x69, 0xa4, 0xd1, 0xeb, 0xe1, 0x43, 0x25, 0xb4, 0x66, 0x63, 0x79, 0x35, 0xbb, - 0x5a, 0x57, 0xf3, 0x59, 0x18, 0xbf, 0xe1, 0x4e, 0x79, 0x5a, 0x6c, 0x52, 0x56, 0x44, 0xcc, 0x79, - 0x73, 0x4a, 0xd4, 0x9b, 0xe3, 0x75, 0xa7, 0xdf, 0xea, 0xb3, 0xf6, 0xab, 0x9b, 0x41, 0xb2, 0xa4, - 0xa2, 0xd8, 0xb7, 0xff, 0x85, 0x09, 0x49, 0x36, 0xaa, 0xb5, 0x66, 0x7b, 0xee, 0xcd, 0xdb, 0xe0, - 0xa7, 0x7a, 0x72, 0x6e, 0xa5, 0xc5, 0x8f, 0x67, 0xc1, 0x4d, 0x52, 0xa5, 0xb6, 0x5d, 0x88, 0xbf, - 0x9f, 0xc1, 0xf0, 0xf4, 0x6b, 0x27, 0x33, 0x6b, 0x6e, 0xa6, 0x5f, 0xd2, 0x77, 0xea, 0xda, 0xb7, - 0xff, 0x1c, 0x3f, 0x69, 0xb6, 0xc9, 0xb7, 0x36, 0xcf, 0xde, 0xf8, 0x90, 0x4d, 0x9b, 0xaf, 0x7a, - 0x70, 0x7c, 0x68, 0xe9, 0xfc, 0xed, 0x3c, 0x2f, 0x65, 0x91, 0x58, 0xac, 0x43, 0x8f, 0x8b, 0xb3, - 0x76, 0x26, 0x62, 0x40, 0x4c, 0xbf, 0x6c, 0xdd, 0x3f, 0xc2, 0x87, 0x2e, 0xfa, 0x45, 0x26, 0xa1, - 0xb3, 0x9d, 0x32, 0xfb, 0x69, 0x25, 0x97, 0xc4, 0xd3, 0x98, 0xa1, 0xdf, 0x3b, 0x6a, 0xdb, 0x7e, - 0x09, 0x84, 0xa7, 0x65, 0xf2, 0x5c, 0xbb, 0x51, 0xfe, 0x26, 0x7c, 0x7e, 0x6d, 0xdc, 0x9f, 0xc1, - 0x1c, 0x98, 0x98, 0xda, 0xec, 0x7c, 0x25, 0xdd, 0xcd, 0x86, 0xc4, 0xa2, 0xf0, 0x9c, 0x71, 0x6a, - 0x50, 0xb1, 0x2d, 0xdf, 0xc1, 0x5c, 0xbd, 0xd3, 0xc3, 0xe8, 0xf5, 0xd4, 0x7c, 0x15, 0xd5, 0xaf, - 0x82, 0xe2, 0x37, 0x7a, 0x5a, 0xfb, 0xe0, 0xaa, 0xfd, 0x34, 0xf6, 0x9a, 0xce, 0xc8, 0xba, 0x7f, - 0x85, 0x35, 0x9f, 0x65, 0xde, 0x5c, 0xad, 0x52, 0x44, 0xcf, 0x89, 0xb7, 0xd6, 0xcd, 0xb6, 0xac, - 0x6b, 0xe0, 0x9e, 0xa9, 0x32, 0x74, 0xcf, 0xaf, 0x2d, 0xf0, 0xa1, 0x89, 0x9b, 0xf5, 0xb3, 0xe4, - 0xd5, 0x7e, 0xd7, 0x67, 0xc6, 0x58, 0x8a, 0xfd, 0xcf, 0x87, 0xcc, 0x9e, 0x9a, 0xe5, 0x13, 0xba, - 0x2a, 0xa7, 0x97, 0xff, 0x85, 0x06, 0xb3, 0x66, 0xda, 0xdb, 0x72, 0xf4, 0x93, 0x2d, 0xf7, 0x68, - 0xf8, 0xe3, 0xc6, 0x10, 0x76, 0xba, 0x9b, 0xbb, 0x69, 0xb9, 0x75, 0x98, 0x22, 0xce, 0x6d, 0x98, - 0xb4, 0xbc, 0x14, 0x91, 0xf0, 0xab, 0xb4, 0x31, 0x7a, 0x72, 0x2f, 0x97, 0x1f, 0xe7, 0xc6, 0x95, - 0x7a, 0x1d, 0x6f, 0x92, 0x67, 0x65, 0x3c, 0xaf, 0x61, 0xc5, 0x1b, 0x37, 0x19, 0x92, 0x49, 0xb8, - 0xd8, 0x79, 0x16, 0xde, 0xb2, 0x17, 0xfe, 0x36, 0xd5, 0xde, 0x80, 0xca, 0x34, 0xd0, 0xd3, 0xc6, - 0x94, 0x7a, 0x4e, 0x92, 0x47, 0xb8, 0xf8, 0xd0, 0xff, 0xc3, 0x06, 0x3e, 0x88, 0xb2, 0xf7, 0xe8, - 0x93, 0x68, 0xec, 0x47, 0xa1, 0xbd, 0x63, 0x3d, 0xed, 0xff, 0x18, 0x5d, 0x47, 0xaa, 0xad, 0x1a, - 0x64, 0x6a, 0x4e, 0xb5, 0xe8, 0x1b, 0x05, 0x95, 0xc7, 0x18, 0x8e, 0xf8, 0x52, 0x3c, 0xa7, 0x76, - 0x8d, 0x8c, 0xd6, 0xda, 0x55, 0x37, 0x1a, 0xd2, 0xf8, 0x52, 0x3a, 0x72, 0xef, 0x8d, 0xb1, 0xf4, - 0x68, 0xdc, 0x99, 0xde, 0xc6, 0x08, 0xcc, 0x1b, 0xd0, 0x93, 0x15, 0x68, 0xde, 0xc9, 0x56, 0xdc, - 0xd6, 0x48, 0x85, 0x76, 0x7f, 0xf0, 0x59, 0x25, 0x0e, 0xcb, 0x1e, 0xda, 0x11, 0x54, 0xda, 0xd8, - 0xe6, 0x4f, 0x85, 0x0a, 0xb0, 0xc2, 0x2a, 0xc8, 0xdc, 0xcb, 0x12, 0x35, 0x36, 0x31, 0x06, 0xc9, - 0xb1, 0x08, 0xba, 0x5f, 0x18, 0xce, 0x63, 0x15, 0xe9, 0x17, 0x82, 0x09, 0x58, 0x6a, 0x01, 0x9c, - 0x50, 0xe8, 0x99, 0x24, 0x32, 0x90, 0xd4, 0xad, 0x96, 0x45, 0x8e, 0x0a, 0x24, 0x51, 0x65, 0xfe, - 0x14, 0x25, 0x1c, 0xb9, 0x3d, 0xc5, 0x06, 0x58, 0x3f, 0xc6, 0xac, 0xfe, 0x86, 0x44, 0xb1, 0x67, - 0xd9, 0x7c, 0x29, 0xad, 0xe0, 0xa9, 0x4a, 0x8d, 0xa9, 0x92, 0xe0, 0xf7, 0x34, 0x6a, 0xa6, 0xa8, - 0x6f, 0x8c, 0xc9, 0xba, 0x51, 0x17, 0x12, 0xa3, 0x3c, 0x3f, 0x63, 0x5f, 0x85, 0x2a, 0xa4, 0xf0, - 0x54, 0x6a, 0xf6, 0xc2, 0x3a, 0xb6, 0xf6, 0x8c, 0x5f, 0x1b, 0xb6, 0xb2, 0xc7, 0x44, 0xa1, 0x3e, - 0xfe, 0x77, 0xb1, 0xee, 0xc6, 0x9d, 0x26, 0xce, 0xbf, 0xf8, 0x7f, 0x2a, 0x52, 0x6e, 0xba, 0x26, - 0x99, 0x51, 0x2a, 0x94, 0x9d, 0xf0, 0x5f, 0xf1, 0xb9, 0x96, 0x3e, 0x3d, 0x02, 0x0e, 0x25, 0xd7, - 0xa0, 0x70, 0x7b, 0x27, 0xad, 0xa6, 0xd5, 0xc8, 0xe1, 0x85, 0x48, 0xad, 0x87, 0xfe, 0x36, 0x3d, - 0x9b, 0x51, 0x28, 0x4d, 0x7b, 0x0c, 0x42, 0xc5, 0x19, 0x54, 0xa9, 0x4c, 0x2b, 0x10, 0xc6, 0x38, - 0x8c, 0xea, 0xa1, 0xa9, 0x38, 0xa6, 0xe8, 0x47, 0x75, 0x2f, 0xff, 0xc2, 0x85, 0x85, 0x7f, 0x7d, - 0xdd, 0xfd, 0xf9, 0xa6, 0xfc, 0x7e, 0x3f, 0x1f, 0x9a, 0xf8, 0xfe, 0xaa, 0x5f, 0x39, 0xea, 0x98, - 0x42, 0xe9, 0xf0, 0x7d, 0x6b, 0x7e, 0x34, 0x80, 0xff, 0xa7, 0x68, 0xa8, 0x86, 0x28, 0x56, 0x54, - 0x51, 0xe1, 0x81, 0x8a, 0x95, 0x1f, 0x06, 0x3d, 0x19, 0x05, 0x07, 0x15, 0xa2, 0x1c, 0x49, 0x64, - 0x7f, 0xc6, 0xeb, 0x06, 0x32, 0x66, 0xb1, 0x8d, 0xa6, 0x33, 0x01, 0x0b, 0xff, 0xb5, 0x95, 0x23, - 0xab, 0xfb, 0x69, 0x97, 0x9a, 0x7f, 0x73, 0x27, 0x39, 0x43, 0x91, 0xb7, 0xd6, 0xcb, 0xb4, 0x2f, - 0xb1, 0xf0, 0x64, 0x9c, 0x20, 0x57, 0x7f, 0xc2, 0x84, 0xf2, 0xee, 0x94, 0x43, 0xde, 0x34, 0xbd, - 0x33, 0x3c, 0x97, 0xb6, 0x0c, 0xd6, 0xf8, 0xa3, 0x28, 0x95, 0x78, 0xdd, 0x69, 0x89, 0x75, 0x6a, - 0xa6, 0xd5, 0xbb, 0xf7, 0x56, 0xd9, 0x02, 0x4d, 0xce, 0x6e, 0x10, 0xbd, 0x95, 0x5c, 0xf1, 0x7c, - 0x3f, 0xc2, 0x85, 0x68, 0x71, 0x7b, 0xbe, 0xe2, 0xe6, 0xeb, 0x85, 0xab, 0xc7, 0x01, 0xd2, 0x7c, - 0x15, 0x17, 0x15, 0xbb, 0x69, 0x26, 0x93, 0xdd, 0xd3, 0x8f, 0x8d, 0x30, 0xff, 0x76, 0x62, 0x53, - 0xea, 0x75, 0x9e, 0x33, 0x51, 0x64, 0xd7, 0x1e, 0xc6, 0x33, 0xe9, 0xa6, 0xef, 0xe1, 0x49, 0x6a, - 0x1e, 0xcd, 0x26, 0xee, 0xa3, 0x4b, 0xd3, 0xac, 0xdd, 0x98, 0xac, 0xcc, 0x5b, 0x2a, 0xf0, 0xa1, - 0x62, 0x07, 0x6c, 0x5e, 0x0e, 0xdc, 0xbe, 0xb0, 0x3e, 0xd4, 0x7f, 0x9b, 0x4a, 0x15, 0x9a, 0xed, - 0x7c, 0x8e, 0x81, 0x6f, 0x11, 0x05, 0x32, 0xab, 0xf2, 0x75, 0x6e, 0xbf, 0xc5, 0xa2, 0x6b, 0xb9, - 0xb4, 0x95, 0x4c, 0x3f, 0x91, 0x67, 0xc2, 0x94, 0x96, 0x91, 0x74, 0x55, 0xe2, 0x17, 0x26, 0xbf, - 0x9e, 0x0f, 0xe9, 0x15, 0xb9, 0x4a, 0xeb, 0x32, 0x0b, 0xe1, 0x43, 0x24, 0xe9, 0x12, 0x27, 0xcb, - 0x79, 0xb4, 0x47, 0x1b, 0x85, 0xca, 0xf2, 0xf4, 0x43, 0xb6, 0x3f, 0xc2, 0x82, 0xd3, 0xb6, 0x7d, - 0xb6, 0xdb, 0x6d, 0x9d, 0x74, 0xc6, 0x95, 0x52, 0xc5, 0x14, 0x5f, 0x05, 0x67, 0x4d, 0x34, 0xd3, - 0x95, 0x2e, 0x37, 0x2f, 0x36, 0x6e, 0xf8, 0xf3, 0x3b, 0xe7, 0xd3, 0xe3, 0x7b, 0x6a, 0xd9, 0xbf, - 0x89, 0x89, 0x73, 0x97, 0xab, 0xf9, 0x67, 0xf8, 0x29, 0x9f, 0x93, 0x74, 0x4a, 0x22, 0x42, 0xd0, - 0x53, 0x62, 0x28, 0xae, 0xb3, 0xa1, 0x95, 0xe1, 0x0c, 0xad, 0x51, 0xb5, 0x96, 0x61, 0x46, 0x5d, - 0x6e, 0xd2, 0x6e, 0xd7, 0x85, 0x2d, 0x89, 0xf9, 0x71, 0x45, 0xb8, 0x89, 0xee, 0xe2, 0x5e, 0x6e, - 0x5f, 0x06, 0xbd, 0xf0, 0xa6, 0xdd, 0xb6, 0x8d, 0xb4, 0xee, 0x90, 0x9e, 0x6e, 0x6e, 0x46, 0xf8, - 0x2a, 0x2d, 0x72, 0xb2, 0x62, 0x9f, 0x2c, 0xf9, 0x55, 0x77, 0xf8, 0x2c, 0xab, 0x45, 0xe4, 0x8a, - 0xb8, 0xea, 0x88, 0x7d, 0x4f, 0xcb, 0xa9, 0xc8, 0x9f, 0x18, 0x21, 0xa3, 0xed, 0x4f, 0xe0, 0xed, - 0x85, 0xd1, 0xfe, 0xb3, 0x1e, 0x3d, 0x2b, 0xc4, 0xf5, 0x8d, 0x76, 0x5e, 0x32, 0xe6, 0xcb, 0xf5, - 0x4d, 0x5f, 0xa5, 0xd6, 0xe5, 0x7d, 0xb2, 0xe7, 0x84, 0x0f, 0x7b, 0xa4, 0x5c, 0x6e, 0x7a, 0xaf, - 0x85, 0x36, 0x92, 0x1a, 0x54, 0xce, 0xa4, 0x7f, 0xd6, 0xa6, 0x25, 0xbb, 0xd8, 0xdf, 0xa6, 0x5a, - 0xc9, 0x51, 0x97, 0x85, 0x08, 0x07, 0xff, 0x95, 0xf6, 0xfe, 0xb9, 0x57, 0x50, 0xa3, 0x73, 0x9d, - 0x4e, 0xe1, 0xb4, 0xda, 0xb9, 0x8c, 0x4c, 0x91, 0x91, 0x97, 0x8c, 0xf2, 0x37, 0x0c, 0x65, 0xbb, - 0x1a, 0xea, 0x6a, 0x6e, 0xb6, 0xd5, 0x7f, 0x0a, 0x1c, 0x7d, 0x9b, 0x97, 0x26, 0xd8, 0x58, 0xab, - 0x52, 0x5c, 0x24, 0x55, 0xb8, 0xdf, 0xed, 0x9c, 0x4c, 0x29, 0x3b, 0x0e, 0xf6, 0xbf, 0x0a, 0xc3, - 0xb1, 0x5d, 0x55, 0x5e, 0xc6, 0x95, 0xa5, 0x19, 0x5a, 0x57, 0xe3, 0x4d, 0x71, 0x34, 0x21, 0x60, - 0x98, 0xa9, 0x33, 0x11, 0x32, 0x64, 0x94, 0x1a, 0x37, 0x24, 0x44, 0x69, 0xad, 0x7f, 0xd6, 0xb0, - 0xe1, 0xa8, 0xd1, 0x8f, 0xd4, 0xbd, 0x69, 0x78, 0xd1, 0x0b, 0x2a, 0x8b, 0xc3, 0xb4, 0xc5, 0x6f, - 0x7f, 0x4f, 0xb7, 0x6c, 0x6e, 0x8a, 0x5f, 0xa3, 0x6d, 0x34, 0xfc, 0x29, 0x6f, 0x1f, 0xc5, 0xa2, - 0x7a, 0xab, 0x39, 0xeb, 0x56, 0xfe, 0x5c, 0x89, 0x5e, 0x8b, 0x7a, 0x28, 0x8c, 0xbf, 0x85, 0x04, - 0x85, 0x45, 0x55, 0x2a, 0xd5, 0x7f, 0x8c, 0x4e, 0x53, 0xe2, 0x5c, 0x2f, 0x73, 0x71, 0x59, 0x21, - 0x53, 0x8f, 0x0a, 0x72, 0xe9, 0xe0, 0x51, 0xd6, 0xb1, 0x2d, 0xad, 0xc8, 0x4f, 0x4b, 0x61, 0xfc, - 0xaa, 0x95, 0x5a, 0x87, 0xed, 0x4c, 0xcb, 0xf1, 0xb0, 0xbc, 0xcd, 0xc9, 0x61, 0xa2, 0x78, 0xd0, - 0xea, 0xc3, 0x9d, 0xec, 0x84, 0x77, 0x87, 0x7b, 0x32, 0x9f, 0x08, 0x51, 0xec, 0xae, 0x70, 0x75, - 0x20, 0xd5, 0x75, 0xca, 0xc9, 0x40, 0x6b, 0x72, 0x70, 0xfc, 0x3f, 0x64, 0x49, 0xb5, 0x31, 0x96, - 0xb6, 0xd9, 0xd8, 0xd7, 0x0c, 0xab, 0x45, 0xa3, 0x6b, 0x18, 0x39, 0xcb, 0x00, 0x55, 0x5e, 0xa7, - 0xff, 0x1a, 0x43, 0xb0, 0xdb, 0x95, 0x91, 0xec, 0x39, 0x02, 0x4a, 0x8a, 0x0e, 0xf0, 0xca, 0xa1, - 0x9b, 0x5e, 0x1c, 0xa2, 0x3d, 0xff, 0x5b, 0xc7, 0x37, 0x2d, 0xb2, 0x7f, 0xe3, 0x4a, 0x14, 0x75, - 0xfc, 0xb4, 0xe5, 0x66, 0x3b, 0xce, 0xa2, 0x99, 0x24, 0x0e, 0xf6, 0xb7, 0xbb, 0x09, 0x54, 0x9b, - 0x58, 0x6a, 0x50, 0xd2, 0xb2, 0xd1, 0xfb, 0x15, 0xda, 0x1d, 0x70, 0x2a, 0x72, 0xf8, 0xe3, 0xff, - 0x1a, 0x65, 0xaa, 0xb1, 0x70, 0xa6, 0x5a, 0xa9, 0xda, 0xe5, 0xe4, 0xdd, 0x8e, 0x35, 0x75, 0x34, - 0xa3, 0x5b, 0x45, 0x75, 0xe7, 0xad, 0xad, 0x0c, 0x7a, 0x3d, 0x73, 0xa1, 0x16, 0x6c, 0x65, 0x3f, - 0xf1, 0xb4, 0x7d, 0x62, 0x83, 0x9a, 0xad, 0xff, 0x38, 0xe8, 0xc7, 0x8d, 0xa1, 0x38, 0xc9, 0x62, - 0xcb, 0x82, 0x2c, 0x9c, 0xf5, 0xcb, 0xa7, 0x7b, 0xd2, 0x74, 0xf2, 0xd5, 0x88, 0x3f, 0xfe, 0x14, - 0x2c, 0xb1, 0xb1, 0x53, 0x62, 0x3c, 0x9e, 0xe5, 0xa2, 0xf1, 0xfc, 0xcf, 0xc9, 0x89, 0x92, 0x94, - 0xc1, 0x17, 0xdf, 0x95, 0xfb, 0xfc, 0x29, 0x63, 0x21, 0x93, 0xa9, 0x2c, 0x93, 0x94, 0xc4, 0x4c, - 0x48, 0xa8, 0xe6, 0xdf, 0x76, 0x46, 0xb8, 0xf1, 0xcc, 0xf1, 0x71, 0x03, 0xb3, 0x94, 0x55, 0xd4, - 0x00, 0xef, 0x8d, 0x94, 0xd5, 0xa4, 0x2a, 0x29, 0xa9, 0x56, 0xd3, 0x68, 0x8a, 0x68, 0x31, 0xac, - 0xf2, 0xd2, 0x9e, 0xdd, 0x77, 0x58, 0x2a, 0xdd, 0x40, 0xf9, 0xce, 0x51, 0x12, 0x2a, 0x69, 0x7d, - 0x6f, 0x0a, 0x93, 0x83, 0x15, 0x9b, 0xff, 0xe3, 0x79, 0xae, 0x20, 0xa7, 0xb9, 0x4f, 0x8f, 0x8d, - 0x5d, 0xc4, 0x6e, 0xb1, 0x69, 0x82, 0xde, 0x17, 0x7a, 0xd4, 0x62, 0x9a, 0x19, 0xed, 0x2d, 0x58, - 0x23, 0x77, 0x87, 0x66, 0x1d, 0x8d, 0xc0, 0x01, 0xb1, 0x0b, 0x03, 0x9c, 0xbf, 0x4f, 0xf1, 0xb5, - 0x47, 0x05, 0x74, 0x7a, 0x08, 0xd5, 0xa6, 0xc6, 0xe6, 0x9a, 0x73, 0x88, 0x45, 0x69, 0xf0, 0xaf, - 0x4e, 0xe5, 0x6f, 0x24, 0xca, 0x7a, 0xa1, 0x01, 0xe6, 0x46, 0x89, 0x3b, 0xa2, 0xcf, 0xfe, 0x36, - 0xc6, 0xdc, 0x21, 0xba, 0xc6, 0xcc, 0x40, 0xde, 0xd4, 0xfd, 0x37, 0x6b, 0x51, 0x27, 0xad, 0x3d, - 0x0b, 0x94, 0x46, 0xbe, 0x8a, 0x50, 0xf9, 0x90, 0xdd, 0xcf, 0x43, 0xff, 0x0a, 0x5a, 0x05, 0xdd, - 0x69, 0xea, 0x97, 0x1b, 0x83, 0xfe, 0xb7, 0xaa, 0x46, 0xad, 0x07, 0x6d, 0x24, 0xb8, 0xdc, 0xa5, - 0xba, 0x1f, 0x74, 0x6e, 0x40, 0xd4, 0x56, 0xf6, 0x46, 0x5e, 0x7c, 0x6d, 0xaa, 0x5d, 0xb2, 0x99, - 0xd7, 0x3d, 0xe5, 0xc9, 0xda, 0x3b, 0x70, 0xb4, 0xf5, 0xf1, 0x83, 0x1d, 0x00, 0x79, 0x4f, 0x94, - 0x53, 0x3a, 0x65, 0x01, 0x50, 0x8b, 0x23, 0xb8, 0x8f, 0x45, 0xfe, 0x36, 0x75, 0x0b, 0xa8, 0xb1, - 0x01, 0xf9, 0x1a, 0xdf, 0xe0, 0xd5, 0x7f, 0x8b, 0x0a, 0xd1, 0xe9, 0x1d, 0x89, 0x57, 0x30, 0xf5, - 0xc9, 0xd4, 0x8d, 0xf5, 0x59, 0xb9, 0xb9, 0x18, 0xae, 0xad, 0xc2, 0xcc, 0x3e, 0x0e, 0x87, 0xf8, - 0x52, 0xc6, 0xf9, 0x59, 0x0d, 0xab, 0x23, 0x52, 0x76, 0xa4, 0xca, 0xab, 0x4c, 0x70, 0xc4, 0x6a, - 0x2b, 0xa8, 0xb4, 0x79, 0x3a, 0xf0, 0xa5, 0x1b, 0xb2, 0x85, 0xba, 0x49, 0x9f, 0x2d, 0x42, 0x4c, - 0x60, 0xee, 0x5b, 0x3b, 0x33, 0x30, 0x29, 0xff, 0x0a, 0x4f, 0xd0, 0xd3, 0x66, 0xc3, 0x9a, 0xe3, - 0xaa, 0xaf, 0xb4, 0x9f, 0x19, 0xd5, 0x77, 0xf8, 0x68, 0xcf, 0x29, 0xa2, 0x2a, 0x49, 0x05, 0x92, - 0xaf, 0xfe, 0x14, 0x23, 0x63, 0x67, 0x04, 0x5c, 0x58, 0xf0, 0xc9, 0x97, 0x50, 0x67, 0x59, 0x8d, - 0x86, 0xfb, 0x9d, 0x3e, 0x1e, 0x2a, 0x28, 0x49, 0x33, 0x8e, 0xa3, 0xba, 0xed, 0xbd, 0xdf, 0xcf, - 0xdb, 0xfc, 0x29, 0x43, 0xde, 0x3d, 0x10, 0xcd, 0x7d, 0x73, 0x6b, 0xa5, 0xe7, 0xdc, 0x5f, 0x05, - 0x84, 0x43, 0x22, 0x4e, 0x48, 0x1e, 0x0c, 0xc2, 0xbc, 0x68, 0xc9, 0x2e, 0x96, 0xe8, 0x3b, 0xe0, - 0x80, 0x4c, 0x7d, 0x52, 0xde, 0xc5, 0xec, 0x5a, 0x57, 0x49, 0x29, 0x18, 0xb3, 0xad, 0xc6, 0x9c, - 0xbf, 0xe1, 0x42, 0x3b, 0x66, 0xdd, 0x5e, 0xed, 0xcb, 0x58, 0xe2, 0xd9, 0x43, 0x3e, 0x0a, 0xb4, - 0x9e, 0xbc, 0x92, 0xab, 0x79, 0x2b, 0xf1, 0x97, 0x5b, 0x5b, 0xe8, 0xf7, 0x5f, 0x6d, 0xff, 0x6d, - 0x66, 0xf6, 0xfc, 0x16, 0x4d, 0xbd, 0x74, 0xdd, 0xa1, 0x5f, 0x17, 0xc7, 0xef, 0xbd, 0x5b, 0x69, - 0x24, 0x93, 0xf8, 0x5e, 0xdf, 0x61, 0xb0, 0xd3, 0x2a, 0x74, 0x9e, 0x4e, 0x5f, 0x4f, 0xfc, 0x6c, - 0x61, 0x22, 0xb7, 0x42, 0xb7, 0x7b, 0x0c, 0x3d, 0x41, 0xb6, 0x5c, 0xd7, 0x45, 0x44, 0x59, 0x89, - 0x9b, 0x19, 0x4c, 0x5b, 0x4f, 0xfe, 0x14, 0x26, 0x7c, 0xd2, 0x6a, 0xdd, 0xc5, 0x1c, 0x5e, 0x36, - 0x33, 0xa9, 0xf0, 0x56, 0x26, 0xbe, 0xa8, 0x69, 0xd8, 0xec, 0x46, 0xee, 0x51, 0x18, 0xf8, 0x28, - 0x83, 0xbb, 0x33, 0xec, 0x26, 0xdd, 0xbe, 0x73, 0xe1, 0x1d, 0x0d, 0x50, 0xcd, 0xdb, 0xb1, 0x8d, - 0xd2, 0x0f, 0x07, 0xcc, 0xf8, 0x2b, 0xbe, 0xaa, 0x9d, 0x44, 0xf5, 0x27, 0x27, 0xd2, 0x2f, 0x82, - 0x0a, 0x97, 0xee, 0x9f, 0x43, 0x43, 0x1a, 0x36, 0xb1, 0x26, 0x1a, 0x64, 0xf1, 0xff, 0x87, 0xfb, - 0x6e, 0x6e, 0x5e, 0xfd, 0x83, 0x72, 0x46, 0x36, 0x3a, 0x1b, 0xca, 0x68, 0xa6, 0xb3, 0x0b, 0x71, - 0xfe, 0x11, 0x23, 0x55, 0xe4, 0x69, 0xbf, 0x2b, 0x16, 0x3f, 0x8d, 0x86, 0xde, 0x7e, 0xdb, 0x5a, - 0x8b, 0x43, 0x1f, 0xca, 0x68, 0xba, 0x9c, 0xb8, 0x1b, 0x75, 0x8c, 0x31, 0x4c, 0x91, 0xa2, 0xff, - 0x0a, 0x5f, 0xb5, 0x56, 0xe8, 0x93, 0x6b, 0x32, 0xdc, 0xb1, 0x1f, 0xc1, 0x2f, 0x82, 0x9c, 0xb8, - 0xd7, 0x14, 0xf4, 0x38, 0x32, 0xbc, 0xa0, 0x2b, 0xf8, 0x53, 0x18, 0xee, 0x2e, 0xda, 0xfa, 0x92, - 0xbd, 0x53, 0x2f, 0xef, 0xf0, 0xa4, 0xba, 0x95, 0xb7, 0x5a, 0xad, 0xd3, 0x67, 0xd4, 0x4f, 0x2a, - 0x32, 0x2a, 0xf0, 0x5b, 0x6a, 0xa6, 0x9a, 0xb6, 0xd3, 0xf7, 0xc1, 0x69, 0xea, 0xd3, 0x73, 0x63, - 0xd7, 0xb3, 0xe0, 0xaa, 0xff, 0xee, 0x91, 0x3d, 0x5e, 0xcd, 0xe7, 0x7c, 0x29, 0xf5, 0x75, 0x26, - 0x1f, 0x3c, 0xb8, 0x4c, 0x93, 0xfe, 0x7c, 0x11, 0xf4, 0xdf, 0xbe, 0x0b, 0x08, 0xb6, 0xda, 0xba, - 0x44, 0xfd, 0x2b, 0xeb, 0xe3, 0x7c, 0xb8, 0xe9, 0x4b, 0x72, 0xb3, 0x1a, 0xa7, 0x73, 0x26, 0x66, - 0x2a, 0x74, 0xc9, 0x0f, 0xf1, 0x96, 0x6c, 0x7d, 0xcb, 0x9e, 0x76, 0x26, 0xdc, 0xb9, 0xe1, 0xf9, - 0x68, 0xca, 0xb5, 0x2d, 0xd4, 0xcf, 0xee, 0x5e, 0x86, 0x66, 0x3a, 0xe3, 0x18, 0x26, 0x71, 0xfe, - 0x1f, 0xea, 0x9c, 0x48, 0x61, 0xe5, 0x6f, 0x3c, 0x12, 0xcc, 0x59, 0x19, 0x67, 0x8f, 0xfc, 0x29, - 0x2e, 0x44, 0x92, 0x55, 0xa6, 0x87, 0x43, 0x15, 0xae, 0xfc, 0xcb, 0xc6, 0xdd, 0xac, 0x67, 0x3e, - 0x2f, 0xab, 0x35, 0x64, 0xbc, 0xfc, 0x57, 0x48, 0x8c, 0xa9, 0x4d, 0x42, 0x87, 0x59, 0xa2, 0x8b, - 0x91, 0xcf, 0xf8, 0x52, 0x95, 0x0d, 0x8c, 0x56, 0x38, 0x98, 0x3e, 0xbd, 0x4d, 0xa6, 0xa0, 0xda, - 0x99, 0xdd, 0x2c, 0xba, 0x8a, 0x91, 0xb2, 0x95, 0x17, 0x3b, 0xe3, 0x3c, 0x18, 0xd9, 0x8e, 0x8f, - 0x50, 0xed, 0x46, 0x24, 0xc7, 0x50, 0x9a, 0x9c, 0x7d, 0x0f, 0x1b, 0x3c, 0xae, 0x43, 0xf1, 0xe4, - 0x5b, 0xbd, 0x14, 0x11, 0xd4, 0x2a, 0x4d, 0xd1, 0xa6, 0x55, 0xfc, 0x16, 0x5b, 0x16, 0x32, 0xb3, - 0xae, 0xed, 0xa6, 0xd8, 0xcd, 0x32, 0xf8, 0xb9, 0x59, 0x6e, 0x46, 0xaf, 0x58, 0xd8, 0xa5, 0xbf, - 0xc1, 0x45, 0xd7, 0x96, 0x17, 0x45, 0xff, 0x84, 0x27, 0xf4, 0x57, 0x69, 0x58, 0x6c, 0x94, 0xc8, - 0x99, 0x20, 0xeb, 0x7c, 0x61, 0xd9, 0x8a, 0xef, 0x69, 0x52, 0xcb, 0x0b, 0x76, 0x69, 0x59, 0x10, - 0xf7, 0x83, 0x3b, 0x7c, 0x14, 0x92, 0x9d, 0xd1, 0xf5, 0x9d, 0xae, 0x38, 0xf9, 0xe1, 0xce, 0xf8, - 0x29, 0x25, 0x13, 0x14, 0x19, 0x76, 0x2f, 0xc5, 0x4e, 0x84, 0xda, 0x79, 0x7c, 0x13, 0xe0, 0xed, - 0x3b, 0x7b, 0xbf, 0xc1, 0x66, 0xb5, 0x2b, 0x83, 0xe5, 0x8b, 0x19, 0x58, 0x54, 0x99, 0xb3, 0xb9, - 0xf0, 0xa1, 0x53, 0x53, 0x37, 0xf1, 0x6a, 0x6a, 0x40, 0xac, 0xda, 0xc4, 0xb1, 0xa4, 0x66, 0x9d, - 0x35, 0xf7, 0x92, 0xd2, 0x5e, 0x2c, 0xbe, 0x14, 0xf6, 0x92, 0x4c, 0x65, 0xf1, 0xaa, 0x65, 0x61, - 0xb8, 0xec, 0xe9, 0x39, 0x56, 0x5f, 0x0a, 0x5f, 0x2a, 0x36, 0x78, 0x9e, 0xaa, 0xb3, 0xc1, 0xc6, - 0x5c, 0xb1, 0x9b, 0xbd, 0x8c, 0xbe, 0x0a, 0x6e, 0xfd, 0xab, 0xbf, 0x76, 0xf9, 0x4b, 0xc5, 0x0a, - 0xd6, 0x43, 0x63, 0xd9, 0xc5, 0xdf, 0x36, 0xd5, 0x2f, 0x05, 0x07, 0x3e, 0x79, 0x7f, 0xef, 0x82, - 0x2e, 0x93, 0xb3, 0xea, 0x76, 0xf8, 0x29, 0xd1, 0x56, 0x9b, 0x99, 0xe7, 0x8f, 0x90, 0xbe, 0x0a, - 0x6e, 0x94, 0x70, 0xa9, 0x6e, 0x4c, 0xb1, 0xa6, 0xef, 0xf1, 0xf8, 0xaf, 0x44, 0x58, 0xa5, 0xa5, - 0x2f, 0xf9, 0x78, 0xe9, 0xb7, 0xf0, 0x53, 0x1d, 0x36, 0xbe, 0x1e, 0xb6, 0xec, 0x72, 0x7b, 0x6e, - 0x7c, 0x13, 0xdf, 0x6f, 0x7b, 0xb3, 0xe7, 0xa9, 0x5f, 0x3c, 0x3f, 0xeb, 0xaf, 0x8c, 0xb7, 0xad, - 0x0e, 0x56, 0x72, 0xfb, 0x1e, 0x9d, 0x57, 0x08, 0x70, 0x72, 0xa5, 0x22, 0x9b, 0x71, 0xb5, 0xe4, - 0xff, 0xc1, 0x45, 0xfb, 0x68, 0x63, 0x97, 0x75, 0xbd, 0x71, 0x7e, 0x46, 0xd6, 0x6d, 0xf0, 0x47, - 0x5b, 0xd9, 0x4d, 0xca, 0xe3, 0xed, 0xdd, 0xf2, 0xea, 0xf2, 0xe7, 0x82, 0x1e, 0x92, 0xb1, 0xf3, - 0xd6, 0xb3, 0x43, 0xfc, 0x65, 0x37, 0x6e, 0xb9, 0x58, 0x6d, 0x32, 0x2f, 0x6b, 0x47, 0xf8, 0x26, - 0xb8, 0xae, 0xcd, 0xdb, 0xed, 0x9c, 0x1f, 0x1b, 0xc1, 0xd6, 0x38, 0xf6, 0x94, 0xd9, 0xcb, 0x24, - 0xe8, 0xd5, 0xf3, 0xc1, 0xff, 0xc3, 0xf7, 0xfd, 0xba, 0xc9, 0xb9, 0x75, 0x25, 0x77, 0x65, 0xff, - 0x0a, 0x72, 0xfb, 0x19, 0x62, 0xfe, 0xe4, 0x62, 0xd2, 0xf1, 0x15, 0xc1, 0x27, 0x64, 0xec, 0x7c, - 0x56, 0xcf, 0x6d, 0x8c, 0xd0, 0xfc, 0x7f, 0x6a, 0x16, 0x95, 0x26, 0x60, 0xe0, 0xf6, 0xde, 0x74, - 0x1f, 0x19, 0xa3, 0x74, 0x3b, 0x98, 0xfa, 0x1b, 0xd0, 0xe5, 0x65, 0x0c, 0xdc, 0x14, 0x5c, 0xac, - 0x3b, 0x58, 0x4c, 0x32, 0xee, 0xbf, 0xbe, 0x33, 0x74, 0xed, 0xad, 0x95, 0x51, 0xea, 0x51, 0xae, - 0xfe, 0x09, 0x4d, 0xab, 0x52, 0xc9, 0xe9, 0x45, 0xf2, 0x6f, 0x52, 0x70, 0x99, 0x68, 0x77, 0x43, - 0x95, 0x98, 0x0a, 0x48, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x34, 0x1a, 0x32, 0x8f, 0x12, 0x20, - 0x87, 0x27, 0x77, 0x5f, 0x10, 0x11, 0x10, 0x49, 0x55, 0x55, 0xac, 0xbc, 0x26, 0x45, 0xd6, 0xb5, - 0xf2, 0x9d, 0x55, 0x60, 0xd6, 0x20, 0x40, 0xc3, 0x56, 0xaa, 0x29, 0xc9, 0x91, 0x3e, 0x6e, 0x78, - 0x7a, 0xe7, 0x96, 0x10, 0xf8, 0x80, 0x84, 0x5d, 0x59, 0x9a, 0x85, 0x4e, 0x04, 0x7a, 0x3a, 0xc2, - 0x9a, 0x99, 0x72, 0xff, 0x04, 0x65, 0x95, 0x8b, 0xb7, 0xc5, 0xd3, 0xdb, 0x5b, 0xfc, 0x5f, 0x07, - 0x68, 0x86, 0x5a, 0x8d, 0xc6, 0x2a, 0x0a, 0xf1, 0x3f, 0x2e, 0xef, 0x2c, 0x40, 0x83, 0x08, 0x93, - 0xaa, 0xea, 0x61, 0x90, 0x80, 0xca, 0xc1, 0x05, 0xc9, 0x88, 0x2d, 0x5d, 0xb2, 0xce, 0x5f, 0x55, - 0x51, 0x7c, 0x23, 0x13, 0x2f, 0x48, 0x05, 0x68, 0x9e, 0x65, 0xfc, 0x48, 0x80, 0xa0, 0x93, 0xfb, - 0x12, 0xc0, 0xc1, 0x06, 0x71, 0xe7, 0xbd, 0xb1, 0x03, 0xed, 0x80, 0xe0, 0x7c, 0xeb, 0xad, 0xf8, - 0x9f, 0x13, 0x30, 0x8d, 0x57, 0xcb, 0x77, 0xbe, 0x11, 0x13, 0x05, 0xdd, 0x8f, 0xad, 0x71, 0x10, - 0x88, 0xe1, 0x79, 0x3a, 0x13, 0xbe, 0xaa, 0xb2, 0xa9, 0x57, 0xf1, 0x35, 0xe9, 0xc6, 0x92, 0x45, - 0xfe, 0x24, 0x48, 0xbe, 0xb5, 0xbf, 0x08, 0xf8, 0x9f, 0x13, 0xfa, 0x89, 0x13, 0x8b, 0x20, 0xd1, - 0xa6, 0xad, 0xc1, 0x48, 0x44, 0xc1, 0x0d, 0x33, 0xfc, 0x32, 0x19, 0x09, 0x55, 0x6a, 0x56, 0x36, - 0xe0, 0x9b, 0x94, 0x4a, 0xaa, 0xa4, 0x58, 0x40, 0x48, 0x44, 0x50, 0x9f, 0x17, 0x17, 0x14, 0xf1, - 0x4c, 0x7b, 0x35, 0x17, 0xbe, 0x10, 0x05, 0x01, 0x0a, 0xb3, 0xd4, 0x2c, 0x15, 0x25, 0xe4, 0x58, - 0x65, 0x9c, 0x68, 0x30, 0x66, 0x52, 0xae, 0x63, 0x10, 0x20, 0x66, 0x9a, 0xb7, 0x5a, 0x8b, 0xc9, - 0x34, 0xf3, 0x30, 0x3d, 0x4c, 0x30, 0x20, 0x61, 0x4d, 0x87, 0xb9, 0xf1, 0x38, 0x44, 0x7a, 0x9c, - 0x13, 0x12, 0x6a, 0xc6, 0x4c, 0x76, 0x78, 0x89, 0x6b, 0x17, 0xf9, 0x8f, 0xa8, 0x9e, 0x79, 0x48, - 0xab, 0x22, 0xfe, 0x61, 0x0a, 0xbf, 0x98, 0x80, 0xf7, 0x81, 0x41, 0xd0, 0xf9, 0xe0, 0x84, 0x40, - 0xee, 0x5c, 0x10, 0xe5, 0x4f, 0xab, 0x25, 0x1e, 0xe7, 0xe2, 0x2e, 0xf3, 0xd8, 0x78, 0x91, 0x31, - 0x5d, 0xdd, 0xdc, 0xd9, 0x25, 0x88, 0x98, 0xf3, 0x31, 0x12, 0x54, 0x79, 0x6a, 0xaf, 0x8e, 0x6e, - 0x42, 0xa9, 0x22, 0x97, 0xe2, 0xed, 0xb5, 0xb2, 0x2c, 0x7f, 0x09, 0x53, 0x4f, 0xac, 0x9a, 0x12, - 0xe5, 0x23, 0x5a, 0xae, 0xe4, 0xc5, 0xa6, 0x4e, 0x13, 0x17, 0xaa, 0xee, 0xef, 0x8b, 0x19, 0xaa, - 0x9b, 0x25, 0xff, 0x14, 0x55, 0xae, 0xb6, 0xf8, 0x28, 0x19, 0x0a, 0x70, 0x3e, 0xd6, 0xe3, 0x60, - 0x4d, 0xf3, 0x3d, 0x59, 0xee, 0x57, 0x08, 0xe7, 0x02, 0xfc, 0x95, 0x6c, 0x7f, 0x81, 0xd9, 0xce, - 0x43, 0x44, 0x80, 0x5f, 0xeb, 0x70, 0xd1, 0xd7, 0xa7, 0xa8, 0xc8, 0x95, 0x1b, 0xe2, 0x5b, 0xbb, - 0x6b, 0x6d, 0x56, 0xda, 0xba, 0xbe, 0xb2, 0x7c, 0xe1, 0x80, 0x50, 0x0a, 0xe5, 0x86, 0x16, 0x0a, - 0x9e, 0x28, 0x3f, 0x3a, 0xb5, 0xdd, 0x11, 0xf1, 0xb2, 0x53, 0x8b, 0xf1, 0x31, 0x05, 0x37, 0x66, - 0x5b, 0x88, 0x69, 0x57, 0xc4, 0x08, 0x05, 0x42, 0x19, 0x7e, 0x6c, 0x37, 0x26, 0x3e, 0xc9, 0x59, - 0x8f, 0xbc, 0x49, 0x6a, 0x88, 0x4b, 0x02, 0x55, 0x7d, 0x9e, 0xb5, 0xc4, 0xc1, 0x60, 0x96, 0xaa, - 0xaa, 0xaa, 0xaa, 0xbf, 0x71, 0x22, 0x02, 0x75, 0x5a, 0x55, 0xae, 0x10, 0x82, 0x43, 0x54, 0xc3, - 0x05, 0x4b, 0x57, 0x3c, 0x30, 0x41, 0x85, 0xe2, 0x46, 0x82, 0x5c, 0x7e, 0x78, 0x21, 0x1a, 0xf9, - 0x73, 0x79, 0x70, 0x87, 0x89, 0x30, 0xaa, 0x75, 0xe2, 0x63, 0xf8, 0x28, 0x1e, 0x9b, 0xf6, 0x9a, - 0xb1, 0x2f, 0x62, 0x9a, 0x4a, 0x98, 0x8e, 0x09, 0xfc, 0x5d, 0xb4, 0xad, 0xce, 0xbe, 0xbd, 0xc4, - 0xc1, 0x5f, 0x77, 0x77, 0x7d, 0xe9, 0xbf, 0xc2, 0x55, 0xaa, 0xba, 0x4d, 0x57, 0x2f, 0x2e, 0x78, - 0x90, 0xa4, 0x3b, 0xe2, 0xce, 0x48, 0x62, 0x5e, 0x5e, 0x5e, 0x81, 0x2e, 0xaa, 0xaa, 0x9f, 0xb8, - 0x42, 0x14, 0x2e, 0x68, 0x30, 0xf9, 0xaa, 0x9b, 0x89, 0xe0, 0x9f, 0x2f, 0x94, 0xd5, 0xa7, 0xe0, - 0xa0, 0x22, 0x30, 0xcd, 0xa6, 0xa0, 0xff, 0xa5, 0x76, 0xe2, 0x3f, 0x67, 0xb8, 0xae, 0x20, 0x7e, - 0x22, 0x5d, 0x55, 0x7c, 0x23, 0xe2, 0x18, 0x6c, 0x63, 0xd9, 0x34, 0xf9, 0x32, 0x9e, 0x20, 0x40, - 0x88, 0x50, 0x4d, 0x96, 0xf8, 0x16, 0xdc, 0x56, 0xdf, 0x11, 0x1f, 0xa6, 0x9e, 0xdb, 0x63, 0xfa, - 0xbe, 0x82, 0x63, 0xc4, 0x7c, 0x48, 0x82, 0x6d, 0xad, 0xa1, 0x3a, 0x1d, 0x20, 0xf9, 0x2d, 0x6f, - 0xe2, 0x2a, 0x20, 0x4e, 0x1b, 0x84, 0xc0, 0x04, 0x1f, 0x5f, 0x77, 0xff, 0xaf, 0xfc, 0x0a, 0x22, - 0xb8, 0x7e, 0xee, 0x9f, 0xdf, 0x14, 0x10, 0x2f, 0x6c, 0xbe, 0xb2, 0xfe, 0xfe, 0x30, 0xeb, 0x55, - 0x51, 0xc3, 0x25, 0xd3, 0xbd, 0x62, 0xe4, 0xdf, 0x29, 0x1c, 0x9e, 0xf5, 0xcd, 0xad, 0xfc, 0x5d, - 0x24, 0xb4, 0x92, 0xcd, 0xc1, 0x38, 0x96, 0x6c, 0xe9, 0xed, 0x92, 0x0e, 0xf9, 0xb1, 0xec, 0x99, - 0x57, 0xe0, 0x87, 0x6a, 0xd6, 0x11, 0x3c, 0x12, 0x75, 0x58, 0x4a, 0xea, 0xd1, 0x51, 0x02, 0x0c, - 0x47, 0x77, 0x15, 0xf9, 0x49, 0xbb, 0xfb, 0xae, 0xbe, 0x5a, 0xad, 0x7c, 0x54, 0x43, 0x83, 0x39, - 0x1b, 0x4f, 0x73, 0x54, 0xf1, 0x02, 0x46, 0x14, 0xa3, 0x34, 0x6e, 0x20, 0xd5, 0x54, 0x0d, 0x33, - 0x18, 0x51, 0xf0, 0x54, 0xce, 0x91, 0x20, 0x0a, 0xbe, 0x00, 0xe0, 0x3d, 0x40, 0x7f, 0x2a, 0x2c, - 0x39, 0x0f, 0x1e, 0xeb, 0x87, 0x9c, 0x00, 0xd7, 0xc6, 0x06, 0xe9, 0x45, 0x19, 0xe9, 0xfe, 0xe7, - 0xf0, 0x79, 0xea, 0x74, 0x65, 0x77, 0x08, 0x76, 0x98, 0xf5, 0xc7, 0xdc, 0xbd, 0xc7, 0x37, 0x1f, - 0x79, 0x8f, 0xce, 0xce, 0x04, 0xf6, 0xe7, 0xf4, 0xf8, 0x62, 0x14, 0xab, 0x45, 0xe3, 0x15, 0x03, - 0xa7, 0x80, 0x3a, 0xbf, 0xa0, 0xdd, 0xaa, 0x5e, 0x03, 0xd1, 0xfc, 0x5e, 0x2e, 0x5e, 0x2e, 0x29, - 0xf7, 0xc2, 0x84, 0x2f, 0x2c, 0xcb, 0xd4, 0xb3, 0x51, 0x1c, 0x2c, 0xc5, 0xc5, 0xc5, 0xc5, 0xdd, - 0x85, 0xf2, 0x48, 0x77, 0xcb, 0x59, 0x7a, 0x64, 0x14, 0x83, 0x23, 0x8b, 0x0f, 0x44, 0x04, 0xdc, - 0x4d, 0xbf, 0xff, 0x78, 0x86, 0x09, 0x7f, 0xd7, 0x89, 0x04, 0xe2, 0xa7, 0xbf, 0x15, 0x88, 0x71, - 0xfe, 0x53, 0x69, 0x17, 0x31, 0x02, 0x41, 0x3e, 0x5e, 0xed, 0x66, 0x21, 0x66, 0xec, 0x31, 0x1e, - 0x22, 0x6d, 0xdf, 0x88, 0x10, 0x12, 0x83, 0xab, 0xc7, 0xde, 0xf8, 0x40, 0x40, 0x9a, 0x9e, 0x9a, - 0x26, 0xa9, 0x62, 0x21, 0x32, 0x36, 0x21, 0x63, 0x95, 0x88, 0xd6, 0x6b, 0x82, 0x12, 0xe4, 0xf6, - 0x43, 0xdc, 0x50, 0xb7, 0x15, 0xdd, 0xdd, 0xdf, 0x10, 0x20, 0xc6, 0xdd, 0xd7, 0x0a, 0x6b, 0x55, - 0x55, 0xa8, 0xbe, 0xa6, 0xa2, 0x86, 0xbb, 0x00, 0x94, 0xe0, 0xe0, 0x82, 0x0a, 0x88, 0x24, 0x01, - 0xc0, 0xa8, 0x02, 0xa6, 0x32, 0x6e, 0xea, 0xbd, 0x6f, 0x9d, 0xa5, 0x58, 0xe7, 0x10, 0x08, 0x02, - 0x85, 0x8e, 0xcd, 0x93, 0x76, 0xe2, 0xb8, 0xae, 0xdd, 0xd5, 0x62, 0xc3, 0x04, 0x80, 0x29, 0x4d, - 0x7a, 0x21, 0xbf, 0x2a, 0xb6, 0xf6, 0xdb, 0x6d, 0xbb, 0x76, 0xcf, 0xdf, 0xee, 0xd3, 0xbc, 0x0f, - 0x20, 0xe0, 0x29, 0x2d, 0xf1, 0x2e, 0x5a, 0x75, 0x88, 0xf5, 0x5a, 0x82, 0x16, 0x5f, 0x09, 0x28, - 0x43, 0x38, 0x00, 0x56, 0x66, 0x99, 0x8c, 0x8a, 0xac, 0x7e, 0x37, 0xfe, 0x6f, 0x37, 0x4c, 0x79, - 0xfa, 0xc9, 0x1c, 0x3f, 0xdb, 0xae, 0x2a, 0xc1, 0xdb, 0xe3, 0x38, 0x90, 0x42, 0x14, 0x97, 0x6a, - 0xc8, 0x1c, 0xb4, 0x90, 0x7a, 0xb1, 0x18, 0x05, 0x82, 0xae, 0xe4, 0xa5, 0x59, 0xcb, 0x3f, 0x8a, - 0x0c, 0x48, 0x44, 0x10, 0x1d, 0x8d, 0xb4, 0xf8, 0x35, 0x55, 0x54, 0xe7, 0xed, 0x55, 0x91, 0xde, - 0xd9, 0x77, 0x13, 0xd3, 0x6f, 0x12, 0x1f, 0x10, 0xee, 0xef, 0x76, 0x81, 0x82, 0xbd, 0x8b, 0x34, - 0xb1, 0xcd, 0xd1, 0x8a, 0xfc, 0x71, 0x5d, 0xbe, 0x08, 0xcb, 0x83, 0x05, 0x79, 0x3f, 0x29, 0x8e, - 0x07, 0x81, 0x21, 0xf8, 0x3a, 0x7e, 0x17, 0x15, 0xdf, 0xef, 0x9b, 0xb9, 0x44, 0xa8, 0x2a, 0x3c, - 0xfe, 0x2b, 0xff, 0x1e, 0x47, 0x77, 0x79, 0xbb, 0xd7, 0x9b, 0x0f, 0x0f, 0x04, 0x44, 0x81, 0xdb, - 0x57, 0xd8, 0xe2, 0x44, 0x2b, 0x78, 0x81, 0xc5, 0x07, 0xac, 0x10, 0x73, 0x43, 0x0d, 0x14, 0xcb, - 0xb7, 0x77, 0xe2, 0x02, 0x76, 0xec, 0xab, 0xe3, 0x26, 0x13, 0x1f, 0xc4, 0xc4, 0xe2, 0x1e, 0xbe, - 0xb4, 0xbc, 0x28, 0x4b, 0x65, 0xe8, 0x41, 0x1a, 0x8b, 0x91, 0xb3, 0xa1, 0x90, 0xaf, 0x8b, 0xca, - 0xde, 0x7d, 0x26, 0x25, 0x58, 0x9a, 0xb7, 0xa3, 0x15, 0xc4, 0x05, 0x2a, 0x7c, 0x3f, 0x71, 0x0a, - 0x31, 0x0e, 0x44, 0xb8, 0x06, 0xf8, 0xf2, 0x9b, 0x94, 0x58, 0xe6, 0xbc, 0xb3, 0x16, 0xe9, 0xc4, - 0x2b, 0x4a, 0xb8, 0x81, 0x9b, 0x8a, 0xc5, 0x6f, 0x8a, 0xd5, 0xc4, 0x3d, 0xf3, 0xc7, 0xed, 0x0a, - 0xf1, 0x02, 0x01, 0x3d, 0x25, 0xd4, 0xbe, 0x2e, 0xdf, 0x0c, 0x46, 0xf2, 0x7e, 0xcc, 0x9b, 0x2c, - 0xc2, 0x7a, 0xfe, 0x5a, 0x9e, 0xa0, 0x83, 0x8a, 0xde, 0xae, 0x0f, 0x3c, 0x81, 0x64, 0x9e, 0xc6, - 0x10, 0x85, 0x20, 0xb2, 0xff, 0x3b, 0xd2, 0x9e, 0x29, 0x59, 0xe5, 0xf5, 0xad, 0x1d, 0xb7, 0xd9, - 0xb9, 0xde, 0x78, 0x7b, 0x39, 0xc1, 0xc4, 0x09, 0x19, 0xad, 0x77, 0x0b, 0xd7, 0x12, 0x1c, 0x12, - 0x1a, 0x09, 0xe1, 0x61, 0x9d, 0xc2, 0xeb, 0x82, 0x81, 0x93, 0x73, 0x8f, 0xa4, 0xc8, 0x0a, 0xa1, - 0x70, 0xd4, 0x82, 0xe1, 0xb7, 0x71, 0x14, 0x02, 0xc8, 0x71, 0x6c, 0xe0, 0x0f, 0x67, 0xd2, 0x0f, - 0xdb, 0xc0, 0xc3, 0x0a, 0x4f, 0x01, 0xf5, 0x3f, 0x26, 0xae, 0x90, 0xf3, 0xc0, 0xf7, 0x28, 0xbc, - 0x3e, 0x2e, 0x01, 0xe1, 0xfc, 0x0e, 0xcd, 0x47, 0x21, 0xe0, 0x7b, 0xd4, 0x70, 0x31, 0xc1, 0xe1, - 0x10, 0x88, 0x53, 0x32, 0xe0, 0x87, 0x2c, 0xe5, 0xcb, 0x26, 0x07, 0x07, 0x80, 0xf0, 0x7b, 0x8b, - 0x87, 0x01, 0xd8, 0x5b, 0x94, 0x1b, 0xd8, 0xf8, 0xee, 0x1e, 0x21, 0x40, 0x41, 0xe7, 0x12, 0x60, - 0x8b, 0xd7, 0x4c, 0xbe, 0xa9, 0xab, 0x76, 0xdb, 0xfe, 0x44, 0xb5, 0xe9, 0xa7, 0xe0, 0x84, 0x04, - 0x08, 0x52, 0x31, 0xa5, 0x1b, 0xce, 0x3e, 0xc5, 0x1d, 0x42, 0x63, 0x88, 0x19, 0xe1, 0x60, 0x50, - 0xd3, 0x0a, 0x9c, 0x1e, 0x70, 0x4b, 0xd9, 0x95, 0x49, 0x98, 0xc5, 0xc3, 0xd3, 0x81, 0x59, 0x38, - 0x9d, 0xc9, 0xdf, 0x8d, 0x7e, 0x74, 0xf8, 0x9c, 0x20, 0x35, 0x0e, 0xe6, 0xfa, 0x35, 0x86, 0xd8, - 0x80, 0x04, 0xde, 0x20, 0x9c, 0xab, 0xea, 0x1a, 0xb8, 0x90, 0x7c, 0xc6, 0x0f, 0x06, 0x1f, 0xc5, - 0xcf, 0x01, 0x81, 0xd6, 0x0f, 0x01, 0x87, 0x8e, 0x18, 0xc6, 0x58, 0x7f, 0xe3, 0x10, 0xd0, 0xf4, - 0x26, 0xa3, 0x29, 0x87, 0x62, 0x00, 0x03, 0x8a, 0x23, 0x79, 0x90, 0x48, 0xa5, 0x69, 0xff, 0xf8, - 0x3a, 0xf8, 0x31, 0x7c, 0xfe, 0x12, 0x88, 0xc2, 0xb6, 0x5c, 0x1a, 0x4b, 0xb8, 0x3a, 0xfc, 0x3b, - 0x20, 0x00, 0x7f, 0x3b, 0x03, 0x82, 0xdf, 0xe1, 0x04, 0x78, 0xe0, 0xd5, 0xe0, 0x4b, 0xdb, 0xcf, - 0x34, 0x16, 0x4b, 0xc4, 0x87, 0x4e, 0x74, 0xd4, 0x9d, 0x9f, 0xe1, 0x88, 0xec, 0x49, 0x32, 0x73, - 0xc0, 0x91, 0xd3, 0x3f, 0xba, 0x0b, 0x88, 0x12, 0x27, 0xc4, 0x7c, 0xdc, 0xdb, 0xe2, 0x44, 0x82, - 0x42, 0xf3, 0xeb, 0x0c, 0x22, 0x24, 0x14, 0x11, 0x64, 0x8e, 0x96, 0x14, 0x6a, 0x56, 0xb6, 0x78, - 0xe1, 0x53, 0x88, 0xcb, 0xc2, 0x38, 0x82, 0x62, 0x21, 0xc9, 0x96, 0x11, 0x0a, 0x93, 0x7a, 0xec, - 0xe2, 0x2c, 0x75, 0x7f, 0xc4, 0x44, 0xe6, 0x23, 0xe7, 0xd8, 0xb7, 0x7c, 0x49, 0x23, 0x75, 0x72, - 0xa1, 0xee, 0x13, 0xdd, 0xef, 0xba, 0x88, 0x08, 0x85, 0x22, 0x8c, 0x56, 0x2b, 0x15, 0x97, 0xca, - 0xa4, 0x1b, 0x0f, 0x23, 0x2b, 0x65, 0x4b, 0xf9, 0x71, 0x43, 0x71, 0x4d, 0x39, 0x31, 0xc3, 0x21, - 0x10, 0xa4, 0xf7, 0x4e, 0x03, 0x91, 0x44, 0xcd, 0x25, 0x54, 0xb6, 0x5b, 0x15, 0x8a, 0x34, 0xc5, - 0x06, 0x28, 0xdc, 0x50, 0x62, 0x1c, 0xa3, 0xbe, 0x04, 0x10, 0x55, 0x93, 0xb9, 0x11, 0xc1, 0x01, - 0xc2, 0xc3, 0x95, 0xd5, 0x5f, 0x81, 0xa0, 0x09, 0x23, 0x24, 0x80, 0x71, 0x65, 0x86, 0x23, 0xdb, - 0xa5, 0x10, 0x25, 0xb5, 0x4a, 0xbb, 0xbf, 0x8a, 0xe1, 0xc5, 0x02, 0xa5, 0x5a, 0x06, 0xce, 0x6c, - 0x23, 0x77, 0x02, 0x6f, 0x8d, 0xd8, 0x0a, 0xa8, 0x73, 0x9a, 0xa3, 0xfe, 0xcf, 0x1b, 0x3a, 0xc6, - 0x4f, 0x4a, 0x9b, 0xe9, 0xfc, 0x05, 0x00, 0x60, 0x15, 0x1c, 0x98, 0x00, 0x08, 0x29, 0x66, 0x1f, - 0x09, 0x4e, 0xe0, 0xb8, 0x74, 0xf1, 0x66, 0xce, 0x24, 0x3c, 0x7d, 0xd2, 0x6f, 0x88, 0xe9, 0x87, - 0x30, 0x8a, 0x25, 0x5c, 0x0a, 0xdf, 0xf4, 0xe1, 0x3b, 0x79, 0x77, 0x97, 0xa6, 0x9f, 0x4c, 0x7f, - 0xf1, 0xf1, 0x27, 0xaf, 0x7e, 0x1e, 0x50, 0x01, 0x09, 0x5f, 0xb3, 0x62, 0x5a, 0x0b, 0x69, 0xbf, - 0xbf, 0xbc, 0xfb, 0x8f, 0xa7, 0xf1, 0xa5, 0x49, 0xad, 0xd6, 0x7d, 0x2a, 0xca, 0x9c, 0x70, 0xe2, - 0x30, 0x02, 0x3a, 0x36, 0x7b, 0x55, 0xb3, 0xa7, 0xbe, 0x77, 0x26, 0x1e, 0xe5, 0xd8, 0xb7, 0x4f, - 0xfc, 0x1e, 0x90, 0x04, 0x29, 0x8b, 0x7d, 0x62, 0xaf, 0x87, 0x94, 0x01, 0x7e, 0x61, 0x3b, 0xbf, - 0x9d, 0x3d, 0x3d, 0x3b, 0x6d, 0xdb, 0x6d, 0xb6, 0xdb, 0x47, 0x04, 0xfa, 0x49, 0x70, 0xf2, 0x80, - 0x0f, 0xb2, 0x26, 0x60, 0xef, 0x12, 0x5f, 0x77, 0xf3, 0x53, 0xf2, 0xd1, 0x7f, 0x9f, 0x59, 0x67, - 0x8e, 0x99, 0x76, 0xb8, 0xc4, 0x34, 0x6c, 0x74, 0x7c, 0x2f, 0x18, 0x49, 0x6a, 0x73, 0x5c, 0xbc, - 0xbb, 0xf0, 0x60, 0x24, 0x13, 0x44, 0x00, 0x07, 0xa8, 0xac, 0xac, 0x02, 0xa6, 0x39, 0x05, 0xe5, - 0x36, 0x78, 0x1c, 0x73, 0x03, 0x51, 0x78, 0x22, 0x2b, 0xef, 0xdf, 0x64, 0x7b, 0xfd, 0x09, 0x45, - 0x29, 0x7f, 0x10, 0x09, 0xc5, 0x2a, 0x9b, 0xcc, 0xde, 0xbd, 0xf3, 0x5d, 0xef, 0xe1, 0x31, 0x75, - 0xaa, 0xed, 0xf1, 0x0c, 0x44, 0x49, 0xf5, 0xe2, 0x02, 0x91, 0xda, 0x0a, 0xc1, 0xd4, 0xac, 0x18, - 0x7c, 0xc6, 0x57, 0x04, 0x2e, 0xef, 0x83, 0xa9, 0x04, 0x31, 0xce, 0x1e, 0x87, 0x4c, 0x6b, 0x79, - 0x54, 0xb5, 0xb4, 0x5f, 0x27, 0x20, 0x5a, 0xb1, 0xff, 0x4c, 0x60, 0x7f, 0xd0, 0xcf, 0x89, 0xd6, - 0x55, 0xcc, 0x49, 0x7a, 0x60, 0x82, 0x24, 0x30, 0x32, 0xd9, 0x0c, 0x70, 0x6b, 0x43, 0xd8, 0xa7, - 0xd4, 0x96, 0xb2, 0xed, 0xc4, 0xf8, 0xaf, 0x83, 0xb7, 0xf8, 0x60, 0x46, 0x16, 0x15, 0xe1, 0xc6, - 0x01, 0xa8, 0xb2, 0x00, 0x1f, 0xd6, 0x3a, 0xf3, 0x12, 0x11, 0x0a, 0x6d, 0xf7, 0xe1, 0x80, 0x54, - 0x14, 0x62, 0xb1, 0x41, 0x88, 0x07, 0x04, 0x3c, 0xe0, 0x00, 0x58, 0x0f, 0x81, 0xa9, 0x38, 0x02, - 0xaf, 0xe2, 0x02, 0x91, 0x03, 0x85, 0xb2, 0x71, 0x54, 0xf5, 0x25, 0xf9, 0x79, 0x63, 0x0f, 0xb5, - 0x2c, 0x65, 0x80, 0xce, 0x1c, 0x38, 0x79, 0xee, 0x16, 0xe4, 0xef, 0x02, 0x80, 0x0e, 0x90, 0x52, - 0x52, 0x10, 0x94, 0x1d, 0x6c, 0x00, 0x15, 0xa3, 0xcc, 0x62, 0x8d, 0x42, 0x75, 0x57, 0xfd, 0xf1, - 0xf5, 0x87, 0xb6, 0xa7, 0x98, 0xe2, 0x3f, 0x26, 0x01, 0x82, 0x18, 0x64, 0x10, 0x85, 0x04, 0xd8, - 0xa3, 0x4c, 0x56, 0x28, 0xcb, 0x19, 0xfa, 0xd5, 0x77, 0x10, 0xe7, 0x5b, 0x7b, 0x92, 0x0a, 0xa3, - 0xf8, 0x39, 0x85, 0x08, 0x28, 0xc5, 0x6f, 0xd8, 0xc5, 0x61, 0x60, 0x05, 0x5c, 0xb1, 0xca, 0xc5, - 0xcb, 0x9b, 0xe1, 0x24, 0x40, 0xd9, 0xce, 0x87, 0xfa, 0x7e, 0x1c, 0x50, 0x24, 0x69, 0xa2, 0x64, - 0xd3, 0xd3, 0x4f, 0xff, 0xab, 0x7d, 0x3f, 0x0b, 0x90, 0xa0, 0x07, 0xbe, 0x25, 0x9c, 0x89, 0x5a, - 0x77, 0x7d, 0xf7, 0x7f, 0xc6, 0x3d, 0x86, 0xe3, 0x00, 0x0c, 0x4a, 0x31, 0x6a, 0x3f, 0x2b, 0xba, - 0xbc, 0x7b, 0x0e, 0x1d, 0xec, 0x78, 0xad, 0xd0, 0x15, 0xe5, 0xe7, 0xeb, 0x5c, 0x0a, 0x11, 0x27, - 0x51, 0x97, 0x5d, 0x6e, 0xec, 0x2e, 0x21, 0x02, 0x25, 0xf1, 0x1f, 0x26, 0x06, 0x36, 0xb5, 0x8f, - 0x89, 0x2d, 0xee, 0xfe, 0x5e, 0xee, 0xb8, 0x44, 0xd3, 0xf0, 0x7f, 0xca, 0xbd, 0x2a, 0x6f, 0x2a, - 0xf1, 0x5a, 0x10, 0x54, 0xfc, 0xa7, 0xc3, 0x95, 0x9f, 0xb2, 0x3d, 0xfe, 0x5e, 0xa9, 0xf8, 0xa2, - 0xba, 0xb3, 0x75, 0xc8, 0x65, 0x62, 0xfe, 0x59, 0x3c, 0xaf, 0xc9, 0x90, 0x0f, 0x72, 0x11, 0xdf, - 0xf1, 0xe5, 0x7b, 0xdd, 0xdd, 0xdf, 0x7f, 0x13, 0x7b, 0xdf, 0x4f, 0x10, 0x25, 0xdd, 0xd7, 0x0e, - 0x90, 0xe0, 0x05, 0xe2, 0x52, 0x8b, 0x18, 0x8d, 0x89, 0xb6, 0x1b, 0x3f, 0xa7, 0xe2, 0xb8, 0xac, - 0x08, 0x70, 0x2f, 0x5e, 0xf5, 0xac, 0x35, 0x20, 0x00, 0xcc, 0x6d, 0xad, 0xcc, 0x5e, 0xfd, 0x7d, - 0x5f, 0x1f, 0xa5, 0x32, 0x4f, 0x37, 0x93, 0xeb, 0x2f, 0x9c, 0xb8, 0x80, 0x30, 0x82, 0xb9, 0xe0, - 0xfc, 0xf7, 0xcb, 0xe4, 0xcc, 0x43, 0xcb, 0xcb, 0x07, 0xd8, 0x5d, 0x89, 0x00, 0xa7, 0x48, 0x00, - 0x75, 0xf3, 0x99, 0x87, 0x99, 0xd7, 0x6a, 0x37, 0x47, 0x75, 0xcd, 0x2e, 0x1a, 0x44, 0x02, 0x4e, - 0xb4, 0x7d, 0x5f, 0xff, 0xd5, 0xb0, 0xc2, 0x86, 0x28, 0xef, 0xa7, 0xd3, 0xa7, 0xff, 0x61, 0xa2, - 0x40, 0x18, 0x72, 0x9e, 0x5d, 0xd9, 0x7b, 0x77, 0xfb, 0xbd, 0xdf, 0x16, 0xca, 0x08, 0x92, 0xeb, - 0x71, 0xdb, 0x0b, 0xc7, 0x00, 0x0c, 0xa3, 0x21, 0x15, 0xea, 0x1a, 0xbc, 0xdf, 0xc9, 0xfd, 0x59, - 0xd4, 0xbf, 0x99, 0x61, 0x90, 0x08, 0xc8, 0xd8, 0xde, 0x04, 0xb4, 0x35, 0x20, 0xf8, 0x6d, 0x8b, - 0x98, 0x0c, 0xc1, 0x60, 0x00, 0x56, 0x28, 0x00, 0x15, 0x9e, 0x00, 0xe1, 0xe0, 0x38, 0xdf, 0x5b, - 0xb4, 0xf6, 0x15, 0x54, 0xab, 0x05, 0x86, 0x18, 0xa0, 0x1c, 0x73, 0x07, 0x6e, 0x2a, 0xd7, 0xef, - 0x82, 0x22, 0xd6, 0x3b, 0x84, 0x58, 0xb1, 0x13, 0x4f, 0x0c, 0x56, 0xb0, 0x88, 0x29, 0x20, 0x5f, - 0x93, 0x98, 0x38, 0x30, 0x92, 0x51, 0xa7, 0x6d, 0x83, 0xb7, 0x38, 0xf1, 0xe5, 0x51, 0x5b, 0xf8, - 0x90, 0x87, 0xb9, 0x6c, 0x3a, 0x0f, 0xc3, 0xfc, 0xd5, 0x26, 0xbc, 0x4c, 0x64, 0x0e, 0xe2, 0xa6, - 0x1d, 0xd5, 0x39, 0x58, 0x76, 0xb0, 0x35, 0xfe, 0xe5, 0x68, 0x71, 0xdc, 0x62, 0x60, 0xac, 0xb8, - 0x31, 0xe8, 0x0a, 0x72, 0x07, 0x3d, 0xd2, 0x46, 0xe6, 0x43, 0xfd, 0x27, 0x5f, 0x2b, 0x0c, 0xa8, - 0x99, 0x89, 0x51, 0xa6, 0xa5, 0x14, 0xd7, 0x88, 0x13, 0xdd, 0xc7, 0xa9, 0x93, 0xee, 0x61, 0xf8, - 0x8f, 0x10, 0x20, 0x85, 0x88, 0x7d, 0xe1, 0x99, 0xc0, 0x07, 0x79, 0xfd, 0x18, 0xf3, 0x7f, 0xf6, - 0xf6, 0xdb, 0xf5, 0xb6, 0x0e, 0xdd, 0xbe, 0xda, 0x3f, 0x81, 0xa4, 0x06, 0x80, 0x50, 0x97, 0x77, - 0xac, 0x50, 0x0e, 0x20, 0xe0, 0xac, 0x56, 0x2b, 0x15, 0x9d, 0x93, 0x9c, 0xb7, 0xe3, 0x9c, 0x10, - 0x00, 0xd1, 0x0a, 0x77, 0x3f, 0x3f, 0xec, 0x2c, 0x2a, 0x79, 0xc7, 0x69, 0x28, 0x2a, 0x3a, 0x2e, - 0x4a, 0x0d, 0x47, 0xf9, 0x60, 0x19, 0xc7, 0x96, 0x01, 0x96, 0x06, 0x31, 0x8d, 0xe1, 0xa7, 0x09, - 0x4d, 0x91, 0xa7, 0xd5, 0xff, 0xd3, 0x4f, 0xfb, 0x0c, 0x60, 0x98, 0x61, 0x2d, 0xad, 0x34, 0xf4, - 0xd3, 0xa7, 0xd7, 0xeb, 0x0b, 0xa8, 0x00, 0xdb, 0xf2, 0x8d, 0x18, 0x5f, 0xf4, 0xff, 0x6e, 0x6e, - 0xde, 0xb7, 0xc2, 0x71, 0x60, 0x0c, 0x6e, 0x4a, 0x38, 0x07, 0xbe, 0xb5, 0xf7, 0x9f, 0xb7, 0x82, - 0x90, 0x0a, 0x08, 0x50, 0x42, 0xab, 0x78, 0xae, 0xf2, 0xe2, 0x96, 0xef, 0x15, 0x8e, 0xee, 0x0c, - 0x41, 0x88, 0x50, 0x8e, 0x2b, 0xbc, 0xdd, 0x4b, 0x3d, 0xdc, 0x5c, 0x48, 0x1e, 0x27, 0xcb, 0x0f, - 0xb0, 0xd9, 0x20, 0x1d, 0xee, 0x33, 0x9c, 0xbd, 0xec, 0x56, 0xe2, 0xb2, 0x53, 0x71, 0xbd, 0x18, - 0x15, 0x97, 0x62, 0xba, 0x67, 0x07, 0xb7, 0xa2, 0x8d, 0x7a, 0x8f, 0x41, 0x34, 0xe8, 0x9d, 0x17, - 0xf9, 0x4a, 0x13, 0x39, 0xcc, 0xb5, 0xf7, 0x7c, 0x86, 0x7b, 0xfc, 0x21, 0x5b, 0x97, 0x22, 0xbc, - 0x48, 0xe3, 0xb4, 0xd3, 0xc4, 0x88, 0xcd, 0x4c, 0xb3, 0x1d, 0x79, 0xf8, 0xf3, 0x96, 0xf8, 0x3b, - 0xe6, 0xd3, 0xf3, 0x7d, 0xfc, 0x74, 0x4b, 0x8e, 0xb7, 0x7d, 0x24, 0xad, 0x71, 0x20, 0x96, 0x2e, - 0x23, 0x9b, 0x30, 0x7d, 0x9b, 0xfc, 0x41, 0x99, 0x84, 0xcd, 0x99, 0xee, 0xa0, 0x82, 0x10, 0x8f, - 0x3a, 0xaf, 0x55, 0x55, 0xdf, 0x0c, 0x41, 0x6c, 0x5a, 0x14, 0xa7, 0x89, 0x1e, 0xe5, 0x8c, 0x57, - 0x30, 0xc4, 0xc1, 0x55, 0x24, 0x9d, 0xa8, 0x54, 0xe4, 0x6e, 0x78, 0x1e, 0xa3, 0xa2, 0xea, 0x53, - 0xd6, 0xec, 0x38, 0xa0, 0x02, 0xfe, 0x3e, 0xa7, 0x4a, 0xc1, 0x54, 0xb4, 0xf3, 0x30, 0x72, 0xf9, - 0x46, 0xe4, 0x7f, 0x0e, 0x7e, 0x3f, 0xe7, 0x3c, 0x7f, 0xf7, 0x76, 0xfe, 0xbd, 0xb1, 0x56, 0x24, - 0x41, 0x9a, 0xbb, 0x7f, 0x84, 0x00, 0x25, 0x23, 0x09, 0xc5, 0x62, 0xb7, 0x7c, 0xf8, 0x5b, 0x3f, - 0x77, 0x56, 0xc5, 0xf0, 0x41, 0x1e, 0x24, 0x2c, 0x02, 0xa7, 0x80, 0x38, 0xfc, 0x7e, 0x09, 0x00, - 0x70, 0x48, 0x0e, 0x16, 0xf5, 0x17, 0xae, 0x10, 0x08, 0x85, 0x04, 0x16, 0x31, 0x40, 0x77, 0x07, - 0x4f, 0x8a, 0xcb, 0x62, 0x07, 0xad, 0x6e, 0x58, 0xe2, 0x8f, 0xb0, 0xb1, 0x20, 0x0e, 0x6e, 0x07, - 0x67, 0x1f, 0xea, 0xea, 0xf9, 0x7a, 0x78, 0x10, 0x01, 0x88, 0x2b, 0x2b, 0x76, 0xed, 0xcf, 0xf2, - 0xf7, 0x38, 0x1f, 0xdc, 0x09, 0x21, 0x80, 0xa5, 0xa9, 0x3c, 0xdc, 0xf0, 0x3e, 0x24, 0x3c, 0xbd, - 0x32, 0xf4, 0xdb, 0x88, 0xb8, 0xaf, 0x1c, 0x1d, 0x2c, 0x3c, 0x42, 0x00, 0x08, 0xe5, 0xe2, 0xb1, - 0x0d, 0xf0, 0x9f, 0xa1, 0x58, 0x36, 0x5c, 0xde, 0x48, 0x7b, 0x8e, 0x3b, 0x6d, 0x5f, 0x14, 0x6c, - 0x27, 0x7d, 0x8b, 0xbf, 0xe0, 0x57, 0xba, 0xbb, 0x29, 0xa1, 0xf6, 0x50, 0xe9, 0x8e, 0x96, 0x0d, - 0x5b, 0x31, 0xf6, 0xec, 0x9c, 0x50, 0x83, 0x73, 0xf8, 0x24, 0xf3, 0x8f, 0x17, 0x92, 0x7f, 0xd9, - 0x45, 0xf3, 0x3e, 0x24, 0x28, 0x40, 0x07, 0xbf, 0xbe, 0xfb, 0x1b, 0x95, 0x2e, 0xf1, 0x09, 0x14, - 0x8b, 0xa9, 0xf8, 0xac, 0x56, 0xe2, 0xb6, 0x9e, 0x1d, 0xe6, 0x2b, 0xde, 0xb9, 0x0f, 0x15, 0xdf, - 0x08, 0xd9, 0x9e, 0xed, 0xf0, 0x62, 0x14, 0x8a, 0x37, 0x0a, 0xb5, 0xbb, 0x67, 0x03, 0xe0, 0xd9, - 0xa9, 0x41, 0xa8, 0x3e, 0xeb, 0x72, 0x19, 0xcf, 0xb9, 0xc3, 0x8d, 0xbb, 0x89, 0x03, 0xc8, 0x52, - 0x70, 0x2c, 0x39, 0xee, 0x75, 0x36, 0x3b, 0x05, 0xe2, 0x9a, 0x54, 0x93, 0x15, 0xc3, 0xe0, 0xe4, - 0x04, 0x00, 0x53, 0x39, 0x8a, 0xc2, 0xe3, 0xe3, 0xe3, 0xf1, 0x22, 0xe3, 0xd8, 0xff, 0x07, 0xf8, - 0xfc, 0x0e, 0xc3, 0x5c, 0xb8, 0x64, 0x02, 0x60, 0x14, 0xb3, 0x01, 0xeb, 0x0e, 0x70, 0xe7, 0x04, - 0x01, 0xc1, 0xe0, 0x59, 0x11, 0xdc, 0x25, 0x00, 0x07, 0xc4, 0xe0, 0x00, 0xe1, 0x7a, 0x87, 0x15, - 0xa9, 0xef, 0xcb, 0x16, 0x07, 0x62, 0x5b, 0xe1, 0x4c, 0x03, 0x17, 0xca, 0x75, 0x2e, 0xad, 0xb8, - 0xd3, 0x37, 0xad, 0x90, 0xb6, 0xdb, 0x89, 0x2a, 0xcf, 0xcb, 0x8c, 0xd8, 0x51, 0x40, 0x27, 0x31, - 0x59, 0xda, 0xcb, 0xfd, 0x78, 0xdf, 0x75, 0xe1, 0x85, 0x00, 0x23, 0x51, 0xec, 0x43, 0x55, 0xbf, - 0x9f, 0xa6, 0x2d, 0xc9, 0xed, 0xc6, 0x4d, 0x15, 0x65, 0x8b, 0xe4, 0x50, 0xe6, 0x00, 0x1d, 0xaf, - 0xe1, 0x39, 0xb9, 0x56, 0xfe, 0xf9, 0x34, 0xd5, 0xb6, 0xf2, 0xc7, 0x62, 0xba, 0xdb, 0xdb, 0x7c, - 0x65, 0x11, 0x7d, 0xf8, 0x76, 0x40, 0x01, 0xb7, 0xd1, 0x10, 0x02, 0x18, 0x5d, 0x27, 0x8a, 0xa4, - 0xce, 0x48, 0xe1, 0x9c, 0xb6, 0x2a, 0x89, 0x16, 0x18, 0x36, 0x8d, 0x87, 0xfd, 0xbc, 0xb1, 0xb8, - 0x81, 0xe5, 0x89, 0x31, 0x80, 0xe3, 0x96, 0x98, 0x12, 0x0a, 0x18, 0x11, 0xb6, 0xec, 0xb5, 0xfc, - 0xa5, 0x5a, 0xcd, 0xc1, 0x21, 0x17, 0x4f, 0x53, 0x71, 0x91, 0x0f, 0x2c, 0x1b, 0x4d, 0x1f, 0xb2, - 0xfc, 0x5f, 0xd4, 0x9c, 0x39, 0xde, 0xf7, 0x71, 0x10, 0x98, 0xf7, 0x77, 0x77, 0x77, 0x75, 0x83, - 0x02, 0x0c, 0x71, 0x03, 0xde, 0xe1, 0xe5, 0x00, 0x94, 0x73, 0x4d, 0xef, 0x93, 0xff, 0x1d, 0x5e, - 0xb9, 0xb6, 0xdf, 0xb6, 0x6e, 0x9a, 0x75, 0xb6, 0xbf, 0xb7, 0x87, 0x30, 0x00, 0xde, 0x89, 0xf4, - 0x28, 0xb3, 0xbd, 0xe9, 0xb3, 0xe9, 0xe9, 0x8a, 0xb1, 0x56, 0x0f, 0xfb, 0x2b, 0xdd, 0xb6, 0xf4, - 0xd3, 0xc0, 0xa2, 0x02, 0x84, 0x28, 0x52, 0x70, 0x55, 0xf8, 0x5a, 0xdd, 0x87, 0xb0, 0x38, 0x07, - 0x07, 0x9f, 0x2c, 0x00, 0x18, 0x3b, 0xf8, 0xc9, 0x95, 0x42, 0xf4, 0x20, 0xb2, 0xb9, 0x3f, 0x38, - 0xcf, 0x0c, 0x85, 0x27, 0xbf, 0x3c, 0x1f, 0x26, 0x17, 0x42, 0xb1, 0x41, 0x93, 0x80, 0xad, 0xed, - 0xb4, 0x0e, 0xf8, 0x24, 0x3c, 0xf0, 0x00, 0xe5, 0x61, 0x9c, 0x00, 0x42, 0x14, 0xc6, 0x2c, 0xfd, - 0x3d, 0x8b, 0xfb, 0x93, 0x2d, 0x9f, 0xa7, 0xf8, 0x9d, 0x36, 0x7c, 0xaa, 0xf8, 0xf3, 0x26, 0xf4, - 0xe7, 0xf3, 0xfb, 0xf0, 0x34, 0x01, 0xe4, 0x29, 0x03, 0x53, 0x0d, 0x64, 0x44, 0xe0, 0x02, 0xa5, - 0x59, 0x47, 0xbe, 0x55, 0x7e, 0x8e, 0xc3, 0xad, 0xaa, 0x43, 0xc9, 0xc0, 0x2b, 0x4c, 0x5a, 0xb7, - 0x1f, 0x42, 0x40, 0x00, 0x54, 0x3f, 0x06, 0xa0, 0x85, 0x02, 0xa4, 0x38, 0xa0, 0x0a, 0xca, 0x73, - 0x1b, 0x73, 0xc6, 0xbf, 0x6d, 0x97, 0xe6, 0xf5, 0x2e, 0xef, 0xe3, 0x4a, 0x9c, 0x6e, 0x76, 0xdb, - 0xd3, 0x4f, 0x88, 0x05, 0x50, 0x62, 0x5c, 0x0c, 0x72, 0x30, 0x00, 0xb0, 0x5e, 0xf7, 0x07, 0x84, - 0x44, 0x19, 0xc5, 0xf3, 0x55, 0xc5, 0xe0, 0x1b, 0x47, 0xe2, 0x88, 0x9c, 0x90, 0xaa, 0x1c, 0xcc, - 0x78, 0x47, 0x87, 0x9f, 0x8a, 0xdf, 0x93, 0x10, 0xc3, 0x68, 0xaa, 0xfc, 0x9d, 0xf9, 0xd8, 0x9b, - 0x4b, 0x88, 0x04, 0x75, 0xca, 0x4d, 0x5e, 0x5b, 0x17, 0x20, 0x8f, 0x8a, 0x3d, 0xde, 0xfb, 0xae, - 0x28, 0xd7, 0x77, 0xbd, 0xf1, 0x01, 0x91, 0xe2, 0x5f, 0x79, 0xf2, 0xfb, 0xde, 0x15, 0x50, 0x03, - 0x50, 0x6c, 0x97, 0x7a, 0xeb, 0xbb, 0xfa, 0x7b, 0x6d, 0xb6, 0xdb, 0x6d, 0xe2, 0x60, 0xa8, 0x93, - 0x55, 0x20, 0x51, 0x75, 0xe4, 0xde, 0x20, 0x49, 0x79, 0xa0, 0xd0, 0x1a, 0x74, 0x94, 0x06, 0x66, - 0xa4, 0xb5, 0x3a, 0x04, 0xf0, 0xd6, 0x00, 0x4d, 0xbe, 0xcf, 0x05, 0x38, 0x4c, 0x41, 0xbf, 0xe9, - 0xc6, 0x4e, 0x0f, 0xf8, 0xf2, 0xe7, 0x34, 0x2c, 0x39, 0x67, 0x86, 0x58, 0xb1, 0x73, 0x8c, 0xd0, - 0x97, 0x0f, 0x01, 0xd6, 0x57, 0xf1, 0xd4, 0x9c, 0x14, 0x84, 0x42, 0x92, 0x4d, 0x0a, 0x08, 0xb2, - 0x40, 0x00, 0x56, 0x41, 0x15, 0x01, 0x4d, 0x81, 0xa3, 0xe4, 0x81, 0x1f, 0x58, 0x77, 0x33, 0xb2, - 0xa1, 0xf7, 0x1d, 0x7d, 0x2d, 0xd1, 0x99, 0x64, 0xb2, 0xf8, 0xe7, 0x0c, 0x21, 0xa7, 0x28, 0xb6, - 0xc8, 0x78, 0xcf, 0x18, 0xac, 0x6a, 0x87, 0x9c, 0x09, 0x20, 0x78, 0x0a, 0x15, 0x42, 0x45, 0xdd, - 0xfe, 0xed, 0xdc, 0x56, 0xe2, 0xb1, 0x5b, 0xb8, 0xac, 0x57, 0x5f, 0x19, 0x7b, 0xbd, 0xdd, 0xdd, - 0xc5, 0x62, 0xbb, 0xbb, 0xe2, 0x66, 0xbb, 0xbf, 0x88, 0xf8, 0xbd, 0x62, 0xf8, 0x93, 0x82, 0x4e, - 0x1b, 0x88, 0x32, 0xaf, 0xb9, 0x89, 0xbf, 0x10, 0x12, 0xa1, 0xe6, 0x65, 0x37, 0x7f, 0x82, 0x6b, - 0xee, 0x0d, 0x6a, 0xf5, 0x19, 0x71, 0x80, 0x22, 0x88, 0x13, 0xc4, 0x89, 0x12, 0x77, 0xbe, 0xee, - 0xfe, 0x11, 0xbb, 0xbb, 0xde, 0xee, 0xee, 0xf8, 0x28, 0x8e, 0xbd, 0xdc, 0x5d, 0x3f, 0x0a, 0xab, - 0xe0, 0xa2, 0x3e, 0x28, 0xcf, 0xdf, 0xdd, 0xc5, 0x71, 0x47, 0x1d, 0x58, 0x61, 0x40, 0x21, 0xfe, - 0x39, 0x5d, 0x9e, 0xdd, 0x7a, 0x7d, 0xfd, 0xf8, 0x44, 0x40, 0x2c, 0xcb, 0x79, 0xb9, 0xb4, 0x53, - 0x2c, 0xea, 0xaa, 0x9f, 0x81, 0xc4, 0x1c, 0x08, 0x85, 0x0d, 0x2b, 0xcd, 0x2e, 0xce, 0x70, 0xe7, - 0x0b, 0x19, 0x6e, 0x1a, 0x73, 0x77, 0x0c, 0xef, 0xdb, 0xf4, 0xd6, 0xdf, 0xf7, 0x03, 0x48, 0x44, - 0x25, 0xdd, 0xb7, 0xbf, 0x03, 0xcc, 0x55, 0x4d, 0x95, 0x77, 0xf1, 0x11, 0x71, 0x5b, 0xbb, 0xee, - 0xf8, 0x20, 0x10, 0x0a, 0x4c, 0xe2, 0x4f, 0x93, 0x0b, 0x00, 0xcb, 0x03, 0x38, 0xe4, 0x8a, 0xed, - 0xec, 0x70, 0xc0, 0x80, 0x89, 0x1d, 0xdf, 0x71, 0x7b, 0xbb, 0xbf, 0x9b, 0x9b, 0x04, 0x87, 0x30, - 0x43, 0x05, 0x77, 0x79, 0xf9, 0xb2, 0xa3, 0xc0, 0xe0, 0xe8, 0x58, 0xd4, 0x74, 0x16, 0x01, 0xc6, - 0x09, 0x4a, 0xaf, 0x94, 0x4e, 0x3a, 0x2c, 0x27, 0x04, 0xff, 0xc4, 0x70, 0xc8, 0x40, 0x15, 0x16, - 0xdd, 0xde, 0xee, 0xe2, 0xb1, 0x46, 0xe2, 0xb7, 0xe0, 0xc4, 0x32, 0x3e, 0x28, 0xe2, 0x47, 0xf6, - 0x2b, 0x14, 0x77, 0x97, 0xc2, 0xae, 0x00, 0x66, 0x7a, 0x8c, 0xfd, 0xfd, 0xda, 0xd7, 0xfa, 0xeb, - 0xc3, 0x4a, 0x00, 0x90, 0x6b, 0xda, 0xae, 0x1b, 0x6f, 0x6d, 0xbd, 0x3b, 0x6f, 0xed, 0xe2, 0x02, - 0x11, 0x5f, 0x15, 0xc5, 0x75, 0x8b, 0xac, 0x2c, 0x48, 0x49, 0x45, 0x70, 0x69, 0xff, 0xff, 0x86, - 0x61, 0x0b, 0xbf, 0x48, 0x56, 0x20, 0x71, 0xc5, 0x67, 0x0e, 0x1c, 0x0e, 0x43, 0x0a, 0x02, 0x16, - 0xda, 0xaa, 0x5f, 0xe9, 0xa7, 0xff, 0xb8, 0x90, 0xc8, 0xec, 0xd8, 0xf1, 0x6f, 0x68, 0x56, 0xee, - 0x2b, 0xe0, 0x84, 0x26, 0x67, 0x7b, 0xbe, 0xfc, 0x32, 0x14, 0x30, 0x1b, 0xcb, 0x87, 0x20, 0x58, - 0xec, 0x76, 0x0e, 0x40, 0x58, 0x39, 0x01, 0x61, 0x66, 0x59, 0x8b, 0x96, 0x07, 0x26, 0x09, 0x00, - 0xe1, 0xe0, 0x70, 0x7a, 0xc3, 0x8e, 0x0e, 0xce, 0xb0, 0x62, 0x24, 0x29, 0x52, 0x60, 0x3a, 0x16, - 0x0e, 0x96, 0x0f, 0x58, 0x70, 0x1c, 0x76, 0xc4, 0x70, 0x00, 0x12, 0xc2, 0x60, 0x03, 0xe3, 0xb9, - 0x9d, 0xfe, 0x3b, 0xcc, 0x39, 0x80, 0x21, 0x94, 0x7e, 0x45, 0x07, 0x9f, 0xde, 0x2e, 0xd9, 0xeb, - 0x1c, 0x71, 0x57, 0x37, 0x4f, 0x6c, 0xfd, 0xcf, 0x79, 0x9a, 0xdb, 0x7f, 0xe2, 0x43, 0x23, 0xa7, - 0x00, 0x07, 0x96, 0x1b, 0x32, 0x21, 0x75, 0x59, 0xce, 0x58, 0xea, 0xca, 0x9f, 0x31, 0xdc, 0xb8, - 0x2b, 0x38, 0x07, 0x38, 0x90, 0x5a, 0x55, 0xbe, 0xe5, 0xcf, 0x28, 0x22, 0xc4, 0x71, 0x22, 0x48, - 0x21, 0x57, 0xf3, 0x5e, 0xff, 0x15, 0xbb, 0xbb, 0xdf, 0x0c, 0xb1, 0xa0, 0x13, 0xa7, 0x9e, 0x75, - 0xc2, 0x6e, 0x2a, 0xdb, 0xff, 0xf7, 0xc2, 0xca, 0x02, 0xa3, 0xc2, 0xf3, 0xef, 0x77, 0xbf, 0xf0, - 0x70, 0x18, 0x18, 0x68, 0xae, 0xe5, 0xc7, 0x2c, 0x62, 0x8d, 0xdb, 0x14, 0x6d, 0x88, 0x79, 0x60, - 0xe4, 0xf9, 0x0c, 0x60, 0x06, 0x32, 0x9f, 0x88, 0xac, 0xbe, 0xa4, 0xd3, 0xa6, 0x9d, 0x3b, 0x6d, - 0xfe, 0x9b, 0xf1, 0x00, 0xe4, 0x65, 0x6b, 0x7b, 0x8a, 0xd5, 0x5e, 0xef, 0x78, 0x5d, 0x14, 0x08, - 0xd6, 0x97, 0xbd, 0xe6, 0xf5, 0xfd, 0x35, 0x37, 0x27, 0xf7, 0xc2, 0xee, 0x02, 0x71, 0xb3, 0x46, - 0xde, 0xa6, 0xff, 0xfb, 0x7d, 0xb8, 0x14, 0x42, 0x22, 0x6f, 0xbd, 0xa4, 0xb0, 0xc4, 0xa0, 0x08, - 0x6f, 0x8d, 0x2c, 0xbd, 0x3d, 0xbb, 0x7f, 0xa6, 0x78, 0x91, 0x04, 0x32, 0xcf, 0x88, 0xf1, 0x12, - 0x62, 0xf1, 0x7e, 0x25, 0x8a, 0x2c, 0x31, 0x71, 0x72, 0x77, 0x13, 0xfb, 0x8a, 0x0c, 0x51, 0xb9, - 0xf0, 0x12, 0x62, 0x3c, 0x41, 0x37, 0xbc, 0x6b, 0x08, 0x80, 0x8b, 0x9b, 0x13, 0xf3, 0xb0, 0xd3, - 0x80, 0x55, 0xbc, 0x59, 0xe6, 0xf7, 0xbf, 0x2f, 0xba, 0xf6, 0x70, 0x88, 0x16, 0x02, 0x83, 0x0f, - 0xcb, 0x31, 0x59, 0x74, 0x0c, 0x4b, 0xe0, 0xe0, 0xb0, 0x1d, 0x63, 0x0e, 0xcd, 0x45, 0x76, 0xf1, - 0x3e, 0x2e, 0x80, 0x86, 0xa5, 0x10, 0x97, 0x10, 0xc0, 0xb0, 0x24, 0x29, 0xbc, 0xd4, 0xbd, 0x59, - 0xd0, 0xbd, 0x96, 0x21, 0xf1, 0x3c, 0x8b, 0xa6, 0x5c, 0x97, 0x12, 0x24, 0x28, 0x52, 0xd8, 0xac, - 0xb6, 0xe2, 0xb1, 0x58, 0xac, 0x57, 0x85, 0x40, 0x56, 0xee, 0xef, 0x7f, 0x88, 0x8a, 0x32, 0xc6, - 0x2b, 0x15, 0x8a, 0xdc, 0xf9, 0x56, 0x24, 0x48, 0xc3, 0x97, 0x89, 0x1c, 0x67, 0xdd, 0xf4, 0x84, - 0x38, 0xf6, 0x21, 0xc1, 0x0e, 0x3f, 0x1f, 0x98, 0x64, 0x22, 0x3e, 0xef, 0xb8, 0xaf, 0xbd, 0xf0, - 0xc0, 0x60, 0x4c, 0x56, 0xfb, 0xdc, 0xff, 0x13, 0x82, 0xce, 0x61, 0xdb, 0xbe, 0x22, 0x28, 0x6b, - 0xbb, 0xbb, 0xbb, 0xbc, 0x2a, 0x42, 0x80, 0x1f, 0x9a, 0xf4, 0x8e, 0xa9, 0xfe, 0xf7, 0xfc, 0x30, - 0x88, 0x00, 0x6a, 0xb4, 0x68, 0x39, 0x17, 0xf9, 0xff, 0x6e, 0x7e, 0x0e, 0xdf, 0x6e, 0xde, 0x20, - 0x28, 0x28, 0x48, 0x38, 0x3a, 0x0f, 0x0b, 0x98, 0x75, 0x00, 0x1a, 0x9e, 0x00, 0x02, 0x00, 0x30, - 0x2b, 0x6a, 0x54, 0x80, 0x01, 0xa8, 0xad, 0xb1, 0x5e, 0x32, 0xa1, 0x0e, 0xaa, 0x54, 0x86, 0xa6, - 0xf8, 0x6d, 0x8b, 0x01, 0x90, 0x73, 0x58, 0xda, 0xbf, 0x78, 0xf5, 0x8b, 0x3d, 0x62, 0xd6, 0xba, - 0x37, 0xa3, 0x7b, 0x76, 0xd1, 0x1e, 0xb5, 0xfe, 0x0e, 0x43, 0x24, 0xbb, 0xbb, 0xc3, 0x2c, 0xa0, - 0x20, 0x1e, 0x34, 0x06, 0x76, 0x7d, 0xbe, 0xf7, 0xfe, 0xc3, 0x18, 0x09, 0x46, 0xb8, 0x0d, 0xa5, - 0x3e, 0xa5, 0xff, 0xfe, 0xcf, 0x08, 0x89, 0x25, 0xef, 0xbb, 0x93, 0x8b, 0xc5, 0xe2, 0xe2, 0xf1, - 0x4d, 0x4b, 0xd9, 0x9d, 0xee, 0x09, 0x71, 0x21, 0x41, 0x6e, 0xee, 0xfb, 0xbb, 0xbc, 0x56, 0x2b, - 0x3e, 0x0a, 0xed, 0xf1, 0x38, 0x2e, 0xa3, 0xed, 0xf6, 0x3a, 0xee, 0xfc, 0x40, 0xc3, 0xbb, 0xed, - 0xef, 0xbd, 0xdd, 0xf8, 0x56, 0x70, 0x11, 0xa5, 0xec, 0xdb, 0xd0, 0x5f, 0xfe, 0xef, 0x9b, 0xe1, - 0x57, 0x01, 0x6f, 0x36, 0xea, 0xff, 0xfa, 0x6d, 0xf0, 0x88, 0x44, 0xc5, 0xb8, 0xac, 0x57, 0xe5, - 0xee, 0xf8, 0x9c, 0x9c, 0x86, 0x17, 0x14, 0xd4, 0x5f, 0xdc, 0x5e, 0x29, 0xa8, 0x29, 0x89, 0x13, - 0xc4, 0x04, 0x49, 0x7b, 0xbf, 0xbb, 0xdd, 0xf8, 0x87, 0xbd, 0xde, 0x10, 0x47, 0xff, 0x84, 0x0c, - 0x4c, 0x6b, 0xc9, 0x72, 0xcf, 0xbd, 0xee, 0x06, 0xde, 0x3e, 0xd2, 0xb7, 0xd3, 0x1d, 0x55, 0xd2, - 0x86, 0xf9, 0x89, 0xaa, 0xf9, 0x27, 0xc6, 0xd8, 0xe7, 0xe1, 0x4b, 0xdb, 0x43, 0x6e, 0xd1, 0x70, - 0xc9, 0x32, 0x3d, 0x34, 0x50, 0x6c, 0x6d, 0x45, 0xf1, 0x98, 0xd9, 0xb1, 0xe3, 0x84, 0xc9, 0x92, - 0x26, 0x39, 0xdb, 0x5a, 0x7f, 0x77, 0x74, 0xdf, 0xc7, 0xd0, 0xcd, 0x1d, 0xc9, 0xe5, 0xd3, 0xe6, - 0x87, 0x7c, 0x75, 0x92, 0xa6, 0xef, 0x43, 0xa2, 0xcd, 0xbe, 0x3f, 0xba, 0x95, 0x93, 0xb3, 0xec, - 0x92, 0x1a, 0xab, 0xca, 0x6e, 0x34, 0xbc, 0x59, 0x55, 0x0d, 0x7b, 0xbf, 0xb9, 0x3e, 0xd9, 0x39, - 0x26, 0x62, 0xc7, 0xf7, 0xda, 0x2f, 0x2f, 0x2d, 0x3d, 0xfc, 0xb6, 0x9a, 0x43, 0xf8, 0x9c, 0xab, - 0xed, 0xa4, 0xdf, 0xc2, 0x14, 0x34, 0x39, 0x19, 0x43, 0x6b, 0x19, 0xd9, 0x36, 0xfe, 0xb2, 0xf8, - 0x4e, 0x86, 0x86, 0xe6, 0xd5, 0x23, 0x69, 0xf8, 0x26, 0xdd, 0xb2, 0xfa, 0xf6, 0x31, 0xfa, 0xfb, - 0xe3, 0xf4, 0x37, 0x43, 0xd2, 0x2a, 0xd4, 0x32, 0xf9, 0xf2, 0xc9, 0xbf, 0xe2, 0xba, 0x63, 0xf7, - 0x5e, 0x3f, 0xc9, 0xa7, 0x4b, 0xc2, 0x34, 0xa9, 0x5a, 0x65, 0x7e, 0x7c, 0x5d, 0x5f, 0xe6, 0xa5, - 0x95, 0x95, 0xde, 0xdd, 0x2f, 0x11, 0x7b, 0xe5, 0x64, 0xd1, 0xfc, 0x5d, 0xee, 0x9a, 0xd3, 0xf9, - 0xb4, 0xdf, 0xe6, 0x9b, 0xed, 0x2e, 0x09, 0x6b, 0xb4, 0x9e, 0xed, 0x5c, 0x9b, 0x73, 0x31, 0xe5, - 0xbb, 0x6c, 0x68, 0x6b, 0x8b, 0xb2, 0x97, 0xc9, 0xe9, 0x7c, 0x9d, 0xd3, 0xf3, 0x59, 0x1b, 0x7f, - 0x37, 0x9b, 0xf9, 0x37, 0x63, 0xae, 0x27, 0x74, 0xa9, 0x21, 0xd0, 0xd7, 0x09, 0xf8, 0xc5, 0x24, - 0x7d, 0xb2, 0x71, 0x79, 0xa2, 0x87, 0x07, 0xcf, 0x2f, 0x24, 0xac, 0x6d, 0x79, 0xaf, 0xa7, 0xe0, - 0x87, 0x34, 0xac, 0xb2, 0xf8, 0x4e, 0x3a, 0x66, 0xed, 0xa5, 0xdb, 0x2b, 0x3b, 0xe6, 0x23, 0xe9, - 0x97, 0x8a, 0x3a, 0xc9, 0xec, 0x6f, 0xf8, 0x47, 0x76, 0xec, 0x65, 0x60, 0xcc, 0x41, 0xac, 0xc3, - 0x1f, 0xb5, 0xe1, 0x1b, 0xa6, 0xdd, 0x51, 0x4e, 0xca, 0x6d, 0xed, 0x78, 0x23, 0xd9, 0x0d, 0x18, - 0xdf, 0xe0, 0x96, 0xc6, 0xc6, 0xc6, 0xc6, 0xf6, 0xb8, 0x57, 0x17, 0x26, 0xef, 0xce, 0xc2, 0xe1, - 0x4e, 0xa3, 0x34, 0xe1, 0x0d, 0x5c, 0x37, 0xbd, 0x28, 0x39, 0x59, 0x97, 0xc2, 0x1f, 0x1a, 0x68, - 0x6d, 0xc1, 0xda, 0x4d, 0x6f, 0x8b, 0x31, 0xf2, 0xea, 0xc3, 0x3c, 0xa7, 0x6a, 0xe2, 0x8a, 0xdc, - 0x7d, 0xa6, 0xfe, 0x3f, 0x6c, 0x6e, 0x9b, 0x1c, 0x3f, 0x52, 0xbd, 0xb2, 0xb3, 0xf8, 0x28, 0xa7, - 0xbb, 0x19, 0xd8, 0xa2, 0x8a, 0xbb, 0xae, 0xd7, 0x84, 0xf9, 0xda, 0x91, 0x23, 0x6b, 0xe5, 0xbd, - 0x8f, 0xe3, 0xb4, 0xe9, 0x97, 0xbf, 0x4b, 0x6d, 0x77, 0xc8, 0xcb, 0x1b, 0xe0, 0xb6, 0xd6, 0x76, - 0xa6, 0xc6, 0xec, 0x6f, 0xf1, 0x11, 0xa3, 0xbe, 0x8e, 0xdd, 0x2f, 0xb2, 0x19, 0x8d, 0x53, 0xf1, - 0xe5, 0x63, 0xbf, 0x9b, 0x34, 0x92, 0xf0, 0x94, 0xdd, 0x3d, 0x4d, 0xad, 0xfe, 0x14, 0x92, 0x2f, - 0x2b, 0xe8, 0x8b, 0x2e, 0xd4, 0xec, 0xc5, 0xa4, 0x4f, 0xaf, 0x84, 0xf2, 0x40, 0x88, 0x25, 0x2b, - 0x68, 0xbc, 0x54, 0xad, 0xad, 0x15, 0xbb, 0xfc, 0x45, 0x13, 0x52, 0x25, 0x63, 0x6e, 0xb4, 0x3f, - 0x09, 0xec, 0x6f, 0xa1, 0xa6, 0x86, 0xbb, 0xa7, 0xb6, 0xfa, 0xcb, 0xe1, 0x3b, 0x72, 0x76, 0xdb, - 0x33, 0x3a, 0xe5, 0xdb, 0x6f, 0xe2, 0xed, 0xd0, 0xd8, 0xee, 0xff, 0x11, 0x63, 0x2b, 0x19, 0xff, - 0xf0, 0x8c, 0xfa, 0x7c, 0x5e, 0xed, 0xdb, 0x56, 0xfe, 0x5d, 0x36, 0x34, 0xd7, 0x2f, 0x76, 0xfc, - 0x12, 0xe9, 0x52, 0x4a, 0x4d, 0x6d, 0xbe, 0x6a, 0x52, 0xc3, 0xe2, 0xed, 0xe5, 0xf4, 0xd7, 0xeb, - 0x2f, 0xb9, 0xdb, 0xb7, 0xe0, 0xa3, 0x7b, 0x72, 0xca, 0xcb, 0xbe, 0xc9, 0x37, 0x6e, 0x92, 0xe0, - 0x98, 0xed, 0xb7, 0xd5, 0x12, 0x6f, 0xf0, 0x59, 0x63, 0xdd, 0x53, 0x91, 0xe3, 0x67, 0x6c, 0x7b, - 0x91, 0x6c, 0xf8, 0xbe, 0x7e, 0xad, 0x8e, 0x9c, 0x2d, 0x4b, 0xe2, 0x08, 0x7c, 0x43, 0xea, 0x9b, - 0xf8, 0x44, 0xbb, 0x6b, 0x93, 0x5b, 0xa6, 0x56, 0x7f, 0x09, 0x51, 0x5b, 0x23, 0x36, 0x33, 0x31, - 0xf9, 0x0c, 0xda, 0x6f, 0x7c, 0x61, 0x4a, 0xce, 0xdd, 0x8d, 0xce, 0xd4, 0x37, 0xba, 0x2a, 0x36, - 0x46, 0x7f, 0x82, 0x39, 0x59, 0xc1, 0xa6, 0x74, 0xf8, 0x2c, 0xbb, 0x69, 0xe5, 0x60, 0xfb, 0xe9, - 0x52, 0xcb, 0xe5, 0xb7, 0xa7, 0xe1, 0x1b, 0x25, 0x22, 0x19, 0x43, 0x72, 0x35, 0xbe, 0x15, 0x8d, - 0xf8, 0x21, 0xb6, 0x97, 0xff, 0x84, 0x2d, 0xb4, 0x87, 0x6e, 0xa9, 0xa5, 0x49, 0x3f, 0x04, 0x54, - 0xd3, 0x63, 0xf7, 0xd6, 0x2f, 0x8b, 0x21, 0xf5, 0x4d, 0x9e, 0xad, 0xae, 0x0a, 0x0a, 0x6d, 0xb5, - 0xa7, 0x6d, 0xcf, 0x96, 0x37, 0x5f, 0x52, 0x7e, 0x5e, 0x6c, 0xf8, 0xcd, 0x8c, 0xfe, 0x36, 0xf2, - 0x6b, 0x75, 0x6d, 0x36, 0xc1, 0x0f, 0xf1, 0xd6, 0x5a, 0xc7, 0x2a, 0xa2, 0x77, 0xf8, 0x8d, 0x2f, - 0xc2, 0x77, 0xa7, 0x49, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x35, 0x1a, 0xb0, 0x52, 0x37, - 0x15, 0x55, 0x55, 0x55, 0x55, 0x8d, 0x45, 0x02, 0xc3, 0xf1, 0xf9, 0xde, 0x0a, 0x60, 0xd6, 0x26, - 0x27, 0x55, 0x5a, 0xd4, 0xbc, 0xda, 0xa8, 0xbf, 0x0c, 0x0a, 0x20, 0x9f, 0x0a, 0x57, 0x69, 0xb7, - 0x6f, 0x88, 0x17, 0x51, 0x71, 0x1f, 0x24, 0xfd, 0xd6, 0x23, 0xe5, 0xe5, 0xc7, 0x06, 0x30, 0x40, - 0x20, 0x23, 0xe7, 0xf7, 0x77, 0xd5, 0x78, 0x81, 0x91, 0x72, 0x30, 0x71, 0xf3, 0x37, 0xa8, 0x8f, - 0x92, 0xf5, 0x6c, 0x5e, 0x2f, 0xc4, 0x09, 0x9d, 0xfc, 0xc5, 0xc9, 0xc5, 0x39, 0xc4, 0xc4, 0x5b, - 0x5d, 0x45, 0xeb, 0x89, 0x13, 0xc4, 0xc4, 0x5d, 0xf7, 0xdd, 0x42, 0x18, 0x2e, 0xe6, 0x2d, 0x62, - 0xf8, 0x60, 0x32, 0x38, 0x91, 0x27, 0xc7, 0xb0, 0x77, 0x97, 0x9d, 0xfe, 0x6b, 0xc3, 0x21, 0x0a, - 0xd6, 0x36, 0xbe, 0xb7, 0x6b, 0xee, 0x2e, 0xaa, 0xbc, 0x4c, 0xe7, 0x41, 0x16, 0xe2, 0xb8, 0x2a, - 0xe2, 0x82, 0x11, 0x27, 0xc4, 0xfe, 0x92, 0x78, 0x20, 0x08, 0x84, 0x7a, 0x8b, 0xac, 0x2c, 0x15, - 0xd4, 0x5d, 0xb5, 0xc4, 0x86, 0x05, 0xd6, 0x29, 0xb4, 0xa4, 0xe2, 0xe3, 0xef, 0x84, 0x04, 0x82, - 0x79, 0xf3, 0xf1, 0x0a, 0x4e, 0xe0, 0xc2, 0x6a, 0xaf, 0xe5, 0xac, 0x53, 0x55, 0x89, 0xe2, 0x44, - 0xf0, 0x42, 0x08, 0x42, 0x11, 0x5b, 0xda, 0x51, 0x77, 0x8b, 0xe0, 0xe8, 0xb3, 0x02, 0x00, 0x18, - 0x45, 0xd6, 0x7e, 0xc5, 0xac, 0x92, 0xe0, 0xe4, 0x40, 0xbc, 0xd8, 0x19, 0x07, 0xd7, 0xbb, 0xe1, - 0x00, 0x30, 0x96, 0xf7, 0x96, 0x23, 0xc4, 0x60, 0x93, 0xab, 0xb8, 0x80, 0xc0, 0xc9, 0x79, 0xb5, - 0xdb, 0xb2, 0x2f, 0x2b, 0x77, 0xe9, 0xb7, 0xc4, 0x0f, 0xad, 0x54, 0xde, 0x3f, 0x2f, 0x15, 0x96, - 0xf0, 0x40, 0x20, 0x65, 0x57, 0x5d, 0x54, 0xfe, 0x5b, 0x6f, 0x55, 0xe2, 0x4d, 0xbd, 0xf0, 0x40, - 0x10, 0x19, 0x76, 0xaa, 0xa2, 0xe2, 0x38, 0x48, 0x56, 0x5c, 0x8a, 0xce, 0x18, 0x16, 0xcb, 0x61, - 0x46, 0xe7, 0x08, 0x82, 0x3a, 0xa9, 0xce, 0x5b, 0xf8, 0x92, 0x75, 0x55, 0x07, 0x22, 0x09, 0x8c, - 0x7b, 0xc3, 0x0a, 0x20, 0x75, 0xb8, 0xd3, 0xf1, 0x57, 0xff, 0xb1, 0xe1, 0x80, 0x59, 0x9b, 0xa9, - 0xf8, 0x0b, 0xaa, 0x89, 0xe0, 0xca, 0x94, 0x43, 0xc8, 0x74, 0xb2, 0x5b, 0x88, 0x0c, 0x88, 0xca, - 0x6e, 0x33, 0x6e, 0xf9, 0x71, 0x3f, 0x25, 0xe9, 0xe1, 0x36, 0x77, 0xff, 0xc3, 0x83, 0xef, 0xc1, - 0x0f, 0x31, 0x97, 0x5f, 0x25, 0x57, 0xf2, 0x79, 0x7e, 0x18, 0x05, 0x23, 0xaa, 0x2e, 0x5e, 0x69, - 0xcf, 0x03, 0x64, 0x21, 0x1f, 0x85, 0x82, 0xbf, 0x84, 0x2e, 0xe2, 0xb1, 0x0e, 0x0e, 0xa9, 0x60, - 0xe4, 0xda, 0x7e, 0xa5, 0xb2, 0x66, 0x26, 0x3a, 0x2b, 0x7e, 0x2f, 0x55, 0xca, 0xe2, 0x02, 0x20, - 0xa6, 0xb5, 0xbb, 0xa6, 0xeb, 0x5f, 0x71, 0x11, 0xf5, 0xd3, 0x2a, 0x13, 0x98, 0x36, 0x4f, 0x82, - 0x44, 0xc0, 0xab, 0x44, 0xc0, 0x38, 0xe2, 0x01, 0x4c, 0xaa, 0x6a, 0x58, 0xc9, 0x15, 0x3d, 0xc7, - 0x7b, 0x72, 0xab, 0x5d, 0xb9, 0x73, 0xe6, 0x97, 0xcb, 0xf8, 0x8d, 0x62, 0x42, 0x57, 0x15, 0xcd, - 0x44, 0x92, 0xf1, 0x20, 0x81, 0xc7, 0xfc, 0xfb, 0x9d, 0x62, 0x73, 0xad, 0xf1, 0x55, 0xaa, 0x99, - 0x89, 0x17, 0x17, 0xe1, 0x01, 0x7c, 0xd8, 0x6c, 0xc4, 0xf0, 0xd0, 0xc4, 0x4b, 0x7d, 0xd7, 0x05, - 0x1e, 0x5c, 0x35, 0x12, 0x6e, 0x16, 0xd3, 0x2f, 0x17, 0x35, 0xa4, 0x7b, 0x8f, 0xc2, 0xe1, 0x72, - 0xa3, 0xf4, 0x0b, 0xf2, 0x6f, 0x73, 0x77, 0xbd, 0xfc, 0x9a, 0xd5, 0xe2, 0x06, 0x61, 0x88, 0x70, - 0x5c, 0xf7, 0x2a, 0x7c, 0xa7, 0x51, 0x0e, 0x37, 0x0b, 0x0c, 0x16, 0xb8, 0x88, 0x77, 0x84, 0x03, - 0x20, 0xb2, 0xef, 0xc1, 0x03, 0x85, 0xb1, 0xfe, 0x06, 0x01, 0xf8, 0xf0, 0x70, 0x98, 0x72, 0x0e, - 0xed, 0x5d, 0x87, 0x39, 0x11, 0x80, 0x77, 0x82, 0x91, 0x03, 0x36, 0x95, 0x9c, 0x47, 0x2b, 0x71, - 0x46, 0xf5, 0x8b, 0xe2, 0x23, 0x3b, 0xae, 0x23, 0x97, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, - 0x14, 0x3e, 0x10, 0x0a, 0x44, 0x64, 0x88, 0xab, 0x78, 0xfe, 0x0b, 0xa2, 0x3c, 0x5e, 0x58, 0x67, - 0x79, 0x79, 0xc7, 0xc8, 0x9f, 0x40, 0x54, 0x8a, 0x3f, 0x78, 0x89, 0xa2, 0x26, 0xee, 0x21, 0xcc, - 0x45, 0x5c, 0xf1, 0x20, 0x9f, 0xa9, 0x7d, 0x39, 0x21, 0xaa, 0x86, 0x20, 0x9f, 0xc6, 0x55, 0x4f, - 0xc1, 0x90, 0x7d, 0xaf, 0x78, 0x60, 0x64, 0x5c, 0x9a, 0xa5, 0x4b, 0x06, 0x5b, 0x3f, 0x12, 0xfe, - 0xc5, 0x67, 0x3d, 0xfe, 0xee, 0xa0, 0xa7, 0x84, 0x44, 0x04, 0xb5, 0x55, 0xcd, 0x9c, 0x20, 0x10, - 0x1f, 0x33, 0x01, 0x56, 0xe7, 0x7c, 0xb1, 0x5a, 0x97, 0xb7, 0x71, 0x10, 0xe7, 0x35, 0x2b, 0xf8, - 0xff, 0x7e, 0x08, 0x6e, 0x5b, 0x7b, 0x00, 0xe7, 0x04, 0x3a, 0xd7, 0xab, 0x90, 0xbb, 0xbb, 0xe0, - 0x9c, 0x9c, 0x90, 0x51, 0xd0, 0xb8, 0x38, 0x85, 0xca, 0x40, 0x94, 0x04, 0x45, 0x47, 0x10, 0x14, - 0x85, 0x00, 0x15, 0x1a, 0xe6, 0xa0, 0xeb, 0xcb, 0x6f, 0xbc, 0x5f, 0xe2, 0x78, 0x6e, 0x77, 0x0b, - 0x37, 0x61, 0x1e, 0xf0, 0x80, 0xcf, 0x62, 0xeb, 0x7b, 0xcf, 0x2e, 0x5c, 0x43, 0x97, 0xe1, 0x3e, - 0xef, 0x5a, 0xf0, 0x50, 0x10, 0xaa, 0xaa, 0xa8, 0xb8, 0xb8, 0xb9, 0x36, 0xb2, 0x9e, 0x20, 0x10, - 0x0f, 0xaa, 0xd4, 0x5c, 0x5d, 0x56, 0xe6, 0xc3, 0xfb, 0xe2, 0x64, 0xf2, 0xf6, 0x85, 0x0c, 0x5c, - 0xbc, 0x5c, 0xbc, 0x12, 0x66, 0xee, 0xa6, 0xb9, 0x7c, 0x95, 0x0e, 0x36, 0xb9, 0xe2, 0x1f, 0x93, - 0xfc, 0x12, 0xcd, 0xc6, 0x31, 0xf1, 0x3f, 0x11, 0xc6, 0xe2, 0x04, 0x02, 0x4e, 0xef, 0x1c, 0xf8, - 0x47, 0x2c, 0x62, 0x3c, 0xb7, 0x57, 0xcb, 0x37, 0xe1, 0x11, 0x23, 0x65, 0x5d, 0x51, 0x11, 0x91, - 0xd3, 0x08, 0x19, 0x48, 0x89, 0x1c, 0xc5, 0x2d, 0xa8, 0x73, 0xfe, 0xaa, 0x10, 0x55, 0x32, 0x61, - 0x60, 0x00, 0x49, 0xb0, 0x29, 0x6f, 0x92, 0x59, 0xe6, 0xc3, 0xc7, 0x0b, 0xdd, 0x84, 0x22, 0x23, - 0x5f, 0x4c, 0xfa, 0xfd, 0xc4, 0x08, 0x0a, 0x44, 0xa1, 0xa3, 0x98, 0x5c, 0xf0, 0x7b, 0x40, 0x08, - 0x60, 0x27, 0x64, 0x61, 0xe6, 0x1e, 0x0a, 0xde, 0x10, 0xac, 0xed, 0xee, 0xcf, 0x0d, 0x0f, 0x36, - 0x71, 0xcf, 0x96, 0x0d, 0x40, 0xd1, 0xc2, 0x50, 0xba, 0x0f, 0x2b, 0xd8, 0x07, 0x5f, 0x08, 0x42, - 0x9d, 0x53, 0x10, 0x3d, 0xec, 0xbf, 0x09, 0xb5, 0x16, 0x61, 0xc8, 0xdb, 0x41, 0xd7, 0x8a, 0x9a, - 0xc4, 0x3a, 0xf0, 0xf1, 0xc7, 0x3c, 0x40, 0x2d, 0xc9, 0xdb, 0x9c, 0x56, 0xf2, 0xe2, 0x44, 0x0c, - 0xe1, 0x57, 0xbc, 0xea, 0x3b, 0xb9, 0xf2, 0xcf, 0xcb, 0x76, 0x1f, 0x88, 0x12, 0x6e, 0xab, 0xe1, - 0x4b, 0xbd, 0xde, 0xfb, 0xde, 0x0b, 0x13, 0xe3, 0xf0, 0xec, 0x6b, 0x5c, 0x31, 0x0a, 0x43, 0xa0, - 0xfe, 0x33, 0x5c, 0x69, 0x25, 0xf2, 0xf6, 0x32, 0xb7, 0x82, 0xba, 0xec, 0xdd, 0x40, 0xeb, 0x4a, - 0x79, 0xe5, 0x81, 0xfb, 0x88, 0x10, 0x14, 0x8a, 0x65, 0xe2, 0x0f, 0x95, 0x2c, 0x0c, 0x5c, 0x48, - 0x1e, 0x71, 0xee, 0xc3, 0xbd, 0x99, 0x2c, 0xce, 0x3b, 0x9c, 0x22, 0x08, 0x02, 0x50, 0xd0, 0x0f, - 0x0d, 0x60, 0x0f, 0xad, 0xb2, 0x4e, 0x0d, 0x89, 0x78, 0x75, 0xc0, 0x3d, 0xdf, 0x18, 0x6d, 0xab, - 0xe5, 0x5e, 0xbf, 0x56, 0xd7, 0xfd, 0x9f, 0xeb, 0x82, 0x90, 0x2c, 0x82, 0xea, 0xaf, 0x69, 0x45, - 0xe8, 0xee, 0x19, 0x50, 0x05, 0xf3, 0x13, 0x79, 0x1b, 0x2f, 0x4d, 0x36, 0x7e, 0xef, 0xfe, 0x45, - 0x88, 0x08, 0xfc, 0xbd, 0x55, 0x88, 0x47, 0x3e, 0x43, 0x88, 0xc0, 0x01, 0x0b, 0xdd, 0xdc, 0xf9, - 0xfd, 0x18, 0x14, 0x8c, 0xff, 0xb1, 0xaf, 0x7f, 0xd5, 0xfc, 0x4f, 0x12, 0x24, 0x7d, 0xef, 0x7d, - 0x47, 0x17, 0x8b, 0x84, 0x20, 0x87, 0x55, 0xbf, 0xc1, 0x3e, 0xf1, 0x5d, 0xee, 0xfc, 0x21, 0xe2, - 0x04, 0x8e, 0x9f, 0xc8, 0x96, 0x11, 0x2c, 0xef, 0x3f, 0xf8, 0x22, 0xcb, 0x59, 0x31, 0xce, 0x10, - 0x10, 0x33, 0x53, 0x5c, 0xf0, 0x26, 0x44, 0xd8, 0x54, 0xd5, 0x60, 0xc6, 0xa2, 0xc1, 0xe1, 0x00, - 0x80, 0x29, 0xce, 0xd8, 0xe5, 0x85, 0xc5, 0x84, 0xf1, 0x65, 0x04, 0xfc, 0x88, 0x6a, 0x8c, 0x38, - 0x81, 0x33, 0xff, 0x51, 0x1e, 0xa5, 0x98, 0x7b, 0x10, 0x3e, 0xe7, 0xcd, 0xf8, 0xfc, 0xf9, 0x35, - 0x44, 0x09, 0x0a, 0x45, 0x6f, 0xe0, 0x76, 0x4b, 0x72, 0x0f, 0xb5, 0xcb, 0x18, 0x3b, 0x42, 0x50, - 0xb6, 0x2a, 0x95, 0x66, 0x2b, 0x15, 0xf9, 0x2f, 0x12, 0x11, 0x0a, 0x4b, 0x19, 0x6d, 0xef, 0x3e, - 0x4f, 0xe2, 0x8c, 0x43, 0x99, 0x75, 0x47, 0xc7, 0x7c, 0x22, 0x0b, 0x62, 0xe1, 0x50, 0xaa, 0xcd, - 0x56, 0x36, 0xbe, 0x24, 0x18, 0x05, 0x39, 0x77, 0x14, 0x31, 0x01, 0xea, 0xcc, 0xe7, 0xd8, 0x87, - 0x01, 0x83, 0x78, 0xb0, 0x50, 0xf8, 0xee, 0x1d, 0xc0, 0x08, 0x29, 0x5e, 0xb1, 0xd5, 0xf8, 0x9f, - 0xfe, 0xe2, 0x8b, 0x07, 0x7f, 0x7b, 0xaf, 0xf6, 0xf0, 0x38, 0x01, 0x44, 0x29, 0x3e, 0x1f, 0x31, - 0x58, 0x97, 0x23, 0xca, 0xf0, 0x71, 0x2c, 0x15, 0x46, 0xc3, 0xc3, 0xe5, 0x66, 0xe3, 0x9c, 0x10, - 0x01, 0x24, 0x29, 0x3e, 0x0a, 0x32, 0x62, 0xbb, 0x69, 0xcb, 0xc9, 0x80, 0x02, 0xa4, 0xc5, 0x4a, - 0x57, 0x90, 0x23, 0xdc, 0xb0, 0x62, 0x80, 0xca, 0x33, 0xc0, 0x82, 0x14, 0x8a, 0xdc, 0xb6, 0xf7, - 0x57, 0x58, 0x87, 0x05, 0x6b, 0x6c, 0x5f, 0x25, 0x58, 0x44, 0x18, 0x8d, 0x8a, 0x30, 0x76, 0xef, - 0x8a, 0xc4, 0x38, 0x28, 0x32, 0xc0, 0x69, 0xb8, 0xbc, 0x37, 0xe1, 0xd5, 0x87, 0xf9, 0x60, 0x61, - 0xab, 0x83, 0x85, 0xd2, 0x93, 0x4d, 0xbe, 0x5d, 0x4a, 0x1c, 0x50, 0x0e, 0xf7, 0xd6, 0xff, 0xed, - 0xb7, 0xf8, 0xd5, 0x15, 0x67, 0xd3, 0xee, 0x9a, 0x70, 0xe2, 0x80, 0x10, 0x82, 0x1a, 0xd6, 0x21, - 0xd4, 0x86, 0xed, 0x7f, 0xdb, 0x84, 0x82, 0xf0, 0x6d, 0xb1, 0x60, 0x6d, 0xc2, 0xf9, 0x7c, 0x0c, - 0xe9, 0x34, 0xf4, 0xf8, 0xab, 0x87, 0x14, 0x00, 0x6c, 0xc0, 0xb2, 0x29, 0xc7, 0xa5, 0x6d, 0xf7, - 0x6f, 0xc5, 0x58, 0xa2, 0xd9, 0xa8, 0x4d, 0xd2, 0xa9, 0x8a, 0x14, 0x36, 0x69, 0xe1, 0xaa, 0x36, - 0xdb, 0xd9, 0x83, 0xef, 0x88, 0xfc, 0x13, 0xdd, 0xde, 0xee, 0x9b, 0xe5, 0xe2, 0x3c, 0x4b, 0xae, - 0xb8, 0x8f, 0x84, 0x01, 0x64, 0x53, 0x51, 0x07, 0x25, 0x69, 0xcb, 0x19, 0x37, 0xfb, 0xc3, 0x03, - 0x25, 0xe5, 0xe2, 0x3f, 0x14, 0x73, 0xe3, 0x9f, 0xf5, 0x0a, 0x4c, 0x3b, 0xdb, 0xe2, 0x64, 0xaa, - 0xaf, 0x10, 0x24, 0x23, 0x88, 0x58, 0x8a, 0xc4, 0xd8, 0x8b, 0x93, 0xb8, 0x87, 0x30, 0x85, 0xd2, - 0xe2, 0x06, 0xc0, 0xc6, 0xa3, 0x2b, 0xc9, 0xa2, 0xc0, 0xb9, 0xd2, 0x92, 0x23, 0x13, 0x74, 0x0b, - 0xa9, 0x74, 0xf8, 0x25, 0xa0, 0x05, 0xe9, 0x31, 0xd7, 0xa2, 0x52, 0xaf, 0x07, 0x1e, 0xf9, 0x5c, - 0x08, 0x98, 0x10, 0x1a, 0x97, 0x0c, 0x86, 0x49, 0x4c, 0xb4, 0x23, 0x8f, 0xd5, 0xd5, 0xf1, 0x02, - 0x44, 0xf9, 0xef, 0xcd, 0x9d, 0xb0, 0xd7, 0x26, 0xb5, 0x27, 0x37, 0x77, 0xf1, 0x7d, 0xde, 0xee, - 0xf8, 0x44, 0x48, 0xc9, 0xfe, 0x39, 0x51, 0xbb, 0x23, 0x3d, 0x67, 0x4e, 0xa2, 0x79, 0x0a, 0x95, - 0xe2, 0x42, 0x79, 0x69, 0xbb, 0xdf, 0x89, 0x0a, 0x40, 0xee, 0x94, 0x63, 0x43, 0x28, 0x81, 0x2d, - 0xc0, 0x00, 0x24, 0x37, 0x60, 0x9e, 0x24, 0x08, 0xcb, 0x28, 0xf3, 0xe3, 0xac, 0x19, 0xd5, 0x20, - 0x2a, 0x14, 0x41, 0xe4, 0xe4, 0x07, 0x18, 0xff, 0xc3, 0x21, 0x01, 0x90, 0xf0, 0x04, 0x64, 0xe0, - 0x1e, 0x0e, 0x6d, 0x4b, 0xa3, 0x80, 0x38, 0x48, 0x15, 0x66, 0x17, 0x8e, 0x3e, 0x0e, 0xf8, 0x4c, - 0x92, 0xdb, 0x77, 0xc0, 0x80, 0x06, 0x9e, 0x24, 0x18, 0x0a, 0xaf, 0x17, 0x51, 0x7a, 0x58, 0x1a, - 0x41, 0x48, 0xf9, 0x6e, 0xea, 0x7c, 0xbf, 0x78, 0xaf, 0x05, 0x20, 0xe4, 0x29, 0x1d, 0x78, 0x7b, - 0x97, 0xea, 0x2e, 0xf1, 0x5d, 0x45, 0x0e, 0xb2, 0xc2, 0x8a, 0x00, 0xa0, 0xd2, 0xe3, 0x9b, 0xcd, - 0xb6, 0xdb, 0x75, 0xdb, 0x6d, 0x34, 0xff, 0xc1, 0x00, 0x16, 0x42, 0x9c, 0xd9, 0xa6, 0xa2, 0xea, - 0xae, 0xe4, 0xc2, 0xfb, 0xf7, 0x0c, 0x86, 0x41, 0x54, 0x0a, 0xba, 0xc2, 0xe1, 0x1b, 0x79, 0x63, - 0xfc, 0xfd, 0x6d, 0xdb, 0x17, 0xa2, 0x06, 0x10, 0x82, 0x68, 0x70, 0x00, 0x08, 0x73, 0x82, 0xa3, - 0xc5, 0xf2, 0x84, 0xa9, 0xa9, 0xcb, 0x41, 0x13, 0x13, 0xae, 0x5c, 0xf0, 0xd4, 0x4d, 0xdf, 0x7e, - 0x24, 0x64, 0xbe, 0x21, 0xe9, 0x8d, 0xd3, 0x28, 0x87, 0x4c, 0x4f, 0x09, 0xa7, 0x11, 0x07, 0x05, - 0x26, 0xa2, 0xbb, 0xd1, 0xe9, 0x22, 0x7d, 0x38, 0x92, 0x6f, 0x7e, 0x20, 0x23, 0x54, 0xf7, 0x15, - 0xc5, 0x6f, 0x15, 0xf8, 0x90, 0x9c, 0x9f, 0xcd, 0xeb, 0xc2, 0x32, 0x59, 0x13, 0xd8, 0xfc, 0x43, - 0xcd, 0x61, 0xec, 0x4f, 0x88, 0x1f, 0xbd, 0xee, 0xfb, 0xbb, 0xf1, 0x1e, 0x23, 0x84, 0x61, 0x39, - 0x79, 0xe3, 0xcb, 0xeb, 0xbd, 0xf8, 0x29, 0x09, 0xdd, 0xf9, 0xbd, 0x70, 0x88, 0x14, 0x42, 0x75, - 0x7b, 0xad, 0x3f, 0x90, 0x4b, 0xdf, 0x81, 0x60, 0x14, 0xe1, 0x84, 0x20, 0x11, 0x6e, 0x4b, 0x7f, - 0xff, 0x6d, 0xcf, 0x05, 0x2f, 0xaa, 0xc4, 0x22, 0x80, 0xdd, 0x07, 0x87, 0x03, 0xc8, 0x50, 0x82, - 0xb7, 0x79, 0xf6, 0x35, 0x06, 0x4f, 0x85, 0x77, 0x37, 0x55, 0xaa, 0x59, 0x9d, 0xef, 0xc1, 0x00, - 0x0b, 0x90, 0xa4, 0xe0, 0x78, 0xa0, 0xcb, 0x18, 0xa3, 0x14, 0x62, 0x8c, 0x56, 0xe5, 0x5b, 0x2a, - 0x8a, 0xc0, 0x94, 0xf3, 0x8d, 0x4b, 0xcd, 0x83, 0xba, 0x48, 0x9d, 0x44, 0x04, 0x41, 0x67, 0x9b, - 0xa8, 0xe2, 0xe9, 0xc0, 0x02, 0xa5, 0xda, 0x2e, 0x64, 0x2f, 0x12, 0x14, 0x88, 0xfc, 0x37, 0xa1, - 0xd4, 0xb4, 0x66, 0x35, 0x50, 0x58, 0xf9, 0x20, 0x47, 0xfc, 0x81, 0xe1, 0x4a, 0x6f, 0x71, 0x5d, - 0xfd, 0x5e, 0xe0, 0xdb, 0xc8, 0x7b, 0xc7, 0x38, 0x81, 0x21, 0x39, 0x33, 0xe4, 0xa1, 0xb3, 0xcb, - 0xdd, 0xfc, 0xd7, 0x76, 0x85, 0x57, 0x10, 0x09, 0xef, 0x7d, 0xd1, 0xbb, 0x9f, 0x04, 0x73, 0x64, - 0xa7, 0xce, 0x5a, 0x19, 0x89, 0xcb, 0xf8, 0x88, 0xfa, 0xd7, 0x7b, 0xdd, 0x7c, 0x14, 0x98, 0xaf, - 0x77, 0xe0, 0x22, 0x42, 0x84, 0x1f, 0xcf, 0x8e, 0xbb, 0xbc, 0x56, 0x15, 0x55, 0x31, 0x47, 0xbb, - 0xf1, 0x01, 0x9f, 0x11, 0x41, 0x4c, 0x0b, 0xb7, 0x02, 0xbe, 0xeb, 0xff, 0xf0, 0xc8, 0x21, 0x3a, - 0xad, 0x7d, 0x8a, 0x50, 0x0d, 0xdd, 0x3b, 0xb1, 0x02, 0x42, 0x86, 0x7d, 0xeb, 0x5d, 0x37, 0xbb, - 0xac, 0xb8, 0x5c, 0x7c, 0x36, 0xe0, 0x18, 0x4f, 0xa2, 0xa0, 0x10, 0x87, 0xfd, 0xe3, 0xe3, 0x2f, - 0x81, 0x2f, 0x04, 0xf1, 0xcb, 0x89, 0x60, 0x59, 0x93, 0x38, 0x28, 0xae, 0xeb, 0x6e, 0x40, 0xea, - 0x22, 0x42, 0xbd, 0xbe, 0x26, 0x5b, 0xde, 0xf9, 0x23, 0xe6, 0x3f, 0xe1, 0x08, 0xc6, 0x5e, 0x94, - 0x75, 0x7b, 0xfb, 0x89, 0xe1, 0xfc, 0xc2, 0x32, 0xdb, 0x97, 0xaa, 0x84, 0x44, 0x78, 0x91, 0x12, - 0x61, 0x33, 0x99, 0xfe, 0xb1, 0x20, 0xaa, 0x4c, 0x26, 0x67, 0x71, 0x90, 0xaa, 0xaf, 0x93, 0xaf, - 0x71, 0xdb, 0x78, 0xe1, 0xe8, 0x8f, 0xcd, 0xbc, 0xbf, 0x08, 0x06, 0x02, 0x57, 0x15, 0xef, 0x2d, - 0x8a, 0xe1, 0xa5, 0x00, 0x03, 0xa7, 0xce, 0x58, 0x0b, 0xbf, 0xef, 0x74, 0xd3, 0x64, 0x6e, 0x5f, - 0xaa, 0x6b, 0xde, 0xe3, 0x69, 0xc3, 0x30, 0xa4, 0x51, 0x8a, 0xdc, 0x55, 0xb4, 0xa2, 0x40, 0xe1, - 0x30, 0x55, 0x33, 0x75, 0x2f, 0x3c, 0x0f, 0x2c, 0x03, 0x2c, 0x31, 0x40, 0xc6, 0x31, 0xbe, 0x19, - 0x04, 0x20, 0xae, 0x9c, 0xef, 0x9c, 0x1e, 0x99, 0x60, 0x62, 0x3d, 0xdf, 0xe9, 0x38, 0x64, 0x14, - 0x9b, 0x77, 0x7c, 0x18, 0x04, 0x68, 0x2b, 0x81, 0x31, 0x7d, 0x17, 0xff, 0xed, 0xb7, 0x84, 0x42, - 0x21, 0x3b, 0xbb, 0xf8, 0xf2, 0xe1, 0x00, 0x10, 0x23, 0x77, 0x62, 0xb7, 0xbd, 0xdf, 0x8c, 0xd4, - 0x6c, 0x8c, 0xb0, 0xc5, 0xb6, 0xfe, 0xd9, 0xb9, 0x62, 0x02, 0x00, 0x9e, 0x4c, 0x2c, 0xd4, 0x49, - 0xe3, 0x74, 0x2c, 0xc9, 0x55, 0x43, 0x1c, 0xbe, 0xe2, 0x0f, 0xd9, 0xe7, 0xe2, 0x25, 0x6e, 0xf4, - 0x9d, 0xc1, 0x07, 0x09, 0x5c, 0x57, 0x77, 0x6d, 0xfc, 0x09, 0x25, 0xaa, 0xa4, 0x96, 0x0c, 0x41, - 0x48, 0x52, 0xa1, 0x5a, 0xeb, 0x3b, 0x9e, 0xe2, 0x07, 0x2b, 0x12, 0x38, 0x70, 0x38, 0x2e, 0x5e, - 0xdd, 0x2f, 0x97, 0x0c, 0x88, 0x17, 0x7d, 0xd7, 0x5c, 0x08, 0x02, 0x3e, 0x5d, 0x35, 0xe1, 0x89, - 0x2e, 0xfe, 0x0c, 0x04, 0xf1, 0x20, 0x80, 0x23, 0x7e, 0xbc, 0xb8, 0x3b, 0x90, 0x7e, 0xf0, 0x1f, - 0x9e, 0x46, 0xd6, 0x96, 0x0c, 0x01, 0x48, 0x52, 0x1f, 0xac, 0x70, 0x0d, 0x45, 0xe7, 0x8e, 0x37, - 0x4d, 0x64, 0x93, 0xf5, 0xf0, 0x0b, 0x05, 0xff, 0x13, 0xe1, 0xd8, 0x0a, 0x80, 0xd4, 0x4a, 0x36, - 0x16, 0xc0, 0x12, 0x05, 0x0e, 0x00, 0x04, 0x27, 0xe6, 0xb6, 0xf4, 0xcd, 0x10, 0x24, 0x23, 0x58, - 0xbb, 0xd4, 0x0e, 0xd2, 0xd8, 0x93, 0x81, 0xd9, 0x2b, 0x2d, 0xcc, 0x07, 0x62, 0x6e, 0xf7, 0xe2, - 0x2e, 0x2f, 0x55, 0xc4, 0x6b, 0x02, 0x40, 0x2a, 0xb8, 0x58, 0x55, 0xf3, 0x80, 0x07, 0x8a, 0x00, - 0x0c, 0x0e, 0xcd, 0x47, 0x43, 0xcd, 0xef, 0x4e, 0xb0, 0x70, 0x06, 0x00, 0xa6, 0x7d, 0x27, 0x10, - 0xe5, 0xc2, 0xa2, 0xb6, 0x58, 0x0c, 0x57, 0xba, 0x46, 0x02, 0x86, 0x18, 0x02, 0x40, 0xf8, 0xac, - 0x56, 0x7c, 0xa8, 0xfc, 0xee, 0x55, 0x22, 0xe2, 0x39, 0xe1, 0x00, 0x24, 0x05, 0x2a, 0xb4, 0xab, - 0x55, 0x2f, 0x13, 0xc8, 0xc5, 0x6e, 0x28, 0xcf, 0xdf, 0x0a, 0x60, 0x10, 0x1b, 0x35, 0x9a, 0xe7, - 0xc6, 0xb1, 0xeb, 0x6f, 0x4d, 0x37, 0x7d, 0x34, 0xd3, 0xc2, 0x98, 0x08, 0xd6, 0x59, 0x7b, 0x77, - 0xfe, 0xe4, 0xfd, 0xf8, 0x40, 0x65, 0x54, 0x98, 0xcc, 0x5c, 0x43, 0x2a, 0x6c, 0x1d, 0x59, 0xa4, - 0xec, 0x76, 0x33, 0x19, 0x9c, 0x10, 0x0c, 0xae, 0x70, 0xe0, 0xa3, 0x3f, 0x21, 0x7a, 0x86, 0xa7, - 0xb9, 0xd5, 0x55, 0x98, 0x4d, 0xc4, 0x38, 0x20, 0x73, 0x12, 0x04, 0x81, 0x12, 0x6f, 0x1c, 0xfc, - 0xf8, 0x55, 0x78, 0xfe, 0x7e, 0x2a, 0xca, 0xc6, 0xdc, 0xd1, 0xfc, 0x29, 0x7a, 0x7c, 0x38, 0x8c, - 0x7b, 0xcc, 0xf8, 0xfb, 0xf3, 0x35, 0x07, 0x28, 0xc7, 0xc1, 0x46, 0x5c, 0xcd, 0x49, 0xf9, 0xd2, - 0xdb, 0x49, 0xc5, 0x4d, 0xcb, 0xd6, 0xb5, 0x87, 0xbc, 0x91, 0x20, 0xe0, 0x92, 0x63, 0x33, 0xc1, - 0x48, 0x20, 0x36, 0xed, 0x1b, 0x31, 0x11, 0xf8, 0xad, 0xbb, 0x9e, 0xf6, 0xac, 0xb8, 0xec, 0x6a, - 0xbc, 0x20, 0x11, 0x19, 0xb3, 0xe0, 0xa3, 0x6e, 0x3f, 0x38, 0x50, 0x56, 0xcb, 0x01, 0xc5, 0x50, - 0x80, 0x68, 0x4e, 0x0a, 0x96, 0xaa, 0xb0, 0x41, 0x0a, 0x5a, 0xb6, 0xe5, 0x8a, 0xcf, 0xdd, 0x4a, - 0xf5, 0x03, 0x68, 0x78, 0x05, 0x15, 0x3c, 0x70, 0xb4, 0xfe, 0xfc, 0x22, 0x04, 0x81, 0x13, 0xe4, - 0xf6, 0x61, 0xdc, 0xaf, 0x10, 0xe7, 0x71, 0x99, 0xd4, 0x21, 0x71, 0x75, 0xf0, 0x80, 0x81, 0x7a, - 0xaa, 0xe2, 0xea, 0x6e, 0x4e, 0x6b, 0xc4, 0x04, 0xa9, 0xa6, 0xee, 0xfa, 0x7e, 0x08, 0xe6, 0xca, - 0x3b, 0x10, 0x4d, 0x10, 0x0c, 0x19, 0x5d, 0xfc, 0x48, 0x30, 0x24, 0x98, 0x59, 0xf8, 0x80, 0x70, - 0x38, 0x86, 0xcd, 0x71, 0x0f, 0xd6, 0xbc, 0x22, 0x10, 0xf1, 0x32, 0x42, 0x02, 0x01, 0x2e, 0x2f, - 0x51, 0x43, 0x14, 0x31, 0x4c, 0x47, 0x0e, 0x9f, 0x08, 0x45, 0xfd, 0x6b, 0xbd, 0xf0, 0xc8, 0x90, - 0x51, 0xd2, 0x10, 0xe5, 0x41, 0xc9, 0xe0, 0xe4, 0x78, 0xc7, 0x0c, 0x84, 0x45, 0xc4, 0x71, 0x47, - 0x23, 0xc1, 0xe3, 0xc5, 0xdc, 0x13, 0xf2, 0x77, 0x75, 0x11, 0x15, 0xbd, 0xee, 0xbf, 0x65, 0x77, - 0xf0, 0x43, 0x25, 0xf7, 0x70, 0xc8, 0x46, 0xa1, 0x98, 0xbe, 0xef, 0x7b, 0x92, 0x18, 0x05, 0x04, - 0x23, 0x85, 0x85, 0x6d, 0xf8, 0x1e, 0x01, 0xc0, 0xe9, 0xe7, 0x1b, 0xce, 0xfe, 0xee, 0xea, 0xae, - 0xf8, 0x18, 0x00, 0x80, 0x14, 0xe2, 0xf5, 0x12, 0x07, 0x8a, 0x00, 0x19, 0xc7, 0x0f, 0x00, 0xf3, - 0x66, 0x24, 0x3c, 0x40, 0x1f, 0x13, 0xe2, 0x4e, 0x13, 0x81, 0x51, 0xd8, 0xd8, 0xe1, 0x80, 0x70, - 0x14, 0x88, 0x00, 0xf2, 0x73, 0x80, 0x3d, 0x9e, 0xf7, 0x3b, 0x98, 0x76, 0x12, 0x97, 0xe2, 0x43, - 0x80, 0xe9, 0x66, 0x95, 0x3e, 0x6e, 0xe2, 0xbf, 0x2f, 0x0a, 0xab, 0x82, 0x3e, 0x5d, 0xef, 0x89, - 0xbb, 0xbb, 0xdf, 0x31, 0xf7, 0x78, 0x4e, 0x40, 0x16, 0xe5, 0x6f, 0x8f, 0xad, 0x7e, 0xbe, 0x24, - 0x47, 0xc9, 0x7b, 0xbb, 0x84, 0x72, 0x40, 0xa0, 0x04, 0x10, 0xa4, 0x56, 0x70, 0xe2, 0xbf, 0x1b, - 0x81, 0xec, 0x94, 0xb1, 0x9e, 0xf1, 0x72, 0x73, 0xe1, 0x72, 0xce, 0xac, 0x48, 0x70, 0x71, 0x4b, - 0x86, 0x19, 0x85, 0x23, 0xc1, 0x73, 0xbc, 0xa4, 0x12, 0x9d, 0xc9, 0x9e, 0x48, 0x15, 0x88, 0xef, - 0xb7, 0xbd, 0x17, 0xa7, 0x04, 0x21, 0x91, 0x57, 0x7b, 0xbb, 0xf0, 0xe2, 0x88, 0xed, 0xc9, 0x5d, - 0x5b, 0x74, 0xc4, 0xfb, 0x7a, 0xb6, 0xdd, 0x3b, 0x78, 0xa9, 0x82, 0x87, 0x07, 0x6f, 0xdb, 0xc1, - 0x1e, 0x22, 0xb8, 0xbb, 0xef, 0x77, 0x76, 0x25, 0xc1, 0xa3, 0x32, 0x85, 0xb0, 0xba, 0x65, 0xff, - 0xd7, 0xf8, 0x97, 0x77, 0xf1, 0x02, 0x5d, 0xef, 0xe2, 0x45, 0x95, 0xdd, 0xee, 0xf9, 0x43, 0xd3, - 0x00, 0xad, 0x26, 0x9c, 0xfe, 0xe5, 0xe5, 0xff, 0xf6, 0xd7, 0xaf, 0xe2, 0x60, 0x9a, 0xcf, 0x88, - 0xf8, 0x80, 0xf9, 0xc0, 0x1e, 0x23, 0xd2, 0x41, 0x44, 0x4d, 0xd6, 0xb2, 0x86, 0x14, 0x02, 0x10, - 0x4b, 0x78, 0x5f, 0x96, 0xfd, 0x77, 0xfd, 0xbe, 0x52, 0xbc, 0xff, 0x10, 0xe1, 0x5b, 0x61, 0x82, - 0xec, 0x80, 0x04, 0x95, 0xdb, 0x41, 0xa2, 0x3d, 0xdb, 0x77, 0xf7, 0x77, 0x2f, 0x2c, 0xd8, 0x6b, - 0x00, 0x42, 0xe6, 0xa9, 0x0d, 0xcc, 0x0c, 0xea, 0xdd, 0xe6, 0xf9, 0xbe, 0xa2, 0xda, 0x7f, 0xcc, - 0x41, 0x67, 0x35, 0xf7, 0xc4, 0x06, 0x19, 0x5e, 0xfe, 0x26, 0x7e, 0x42, 0x29, 0x7f, 0xee, 0x2e, - 0x2f, 0x82, 0xfe, 0xc4, 0xde, 0xe0, 0x13, 0x08, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x36, 0x1b, - 0x30, 0x52, 0x1b, 0xc5, 0x55, 0x55, 0x55, 0x55, 0x7c, 0x4d, 0x6b, 0xd5, 0x41, 0xa6, 0x18, 0x26, - 0xab, 0xc3, 0x01, 0x81, 0x95, 0x17, 0x8b, 0x85, 0x6a, 0x48, 0x57, 0xbd, 0xb7, 0x9b, 0xc4, 0x9f, - 0x83, 0x01, 0x02, 0x65, 0x9e, 0x5e, 0x27, 0xe6, 0x2a, 0xe2, 0xf7, 0xbb, 0xdd, 0xc1, 0x5e, 0x19, - 0x21, 0x6f, 0x7e, 0x11, 0x77, 0xbc, 0xbc, 0xd5, 0x55, 0x14, 0xf0, 0x84, 0x61, 0x2e, 0xa1, 0x46, - 0x9b, 0xba, 0x89, 0xe1, 0x76, 0x79, 0xec, 0xe3, 0xb7, 0x2f, 0x3f, 0xcb, 0xe1, 0x97, 0x00, 0x32, - 0xd0, 0x5f, 0xa6, 0x2a, 0xb0, 0xfc, 0xff, 0xd4, 0xff, 0xb5, 0x55, 0x55, 0x2f, 0x96, 0xfc, 0xe9, - 0xe0, 0x80, 0x64, 0x9f, 0xe6, 0xf5, 0x4e, 0x4f, 0x89, 0xf8, 0x9f, 0xe1, 0x90, 0x53, 0x71, 0x3c, - 0x0f, 0x94, 0x0e, 0x0f, 0x88, 0x7a, 0x96, 0xcb, 0x0c, 0x90, 0xa9, 0xdc, 0xdf, 0x86, 0x04, 0x7c, - 0x45, 0x31, 0x5d, 0xc5, 0x1b, 0xbb, 0xf8, 0x53, 0x88, 0x71, 0xf7, 0x71, 0x5b, 0xbd, 0xc5, 0x62, - 0xb1, 0x5f, 0xb8, 0x60, 0x4c, 0x14, 0x09, 0x62, 0x42, 0x04, 0x60, 0xe4, 0xbc, 0x48, 0x87, 0x77, - 0x77, 0xbc, 0xb0, 0x60, 0x19, 0x11, 0x5a, 0xd4, 0x47, 0xac, 0xe1, 0x80, 0x42, 0x14, 0xe6, 0xe4, - 0xf9, 0x7a, 0x9b, 0xca, 0xc6, 0xd7, 0x55, 0x55, 0x7e, 0x10, 0x06, 0x23, 0x2f, 0x7b, 0x46, 0xe2, - 0xf3, 0x8a, 0xc6, 0x73, 0x55, 0xf8, 0x88, 0xba, 0xcb, 0x82, 0x1c, 0xc4, 0x38, 0x2b, 0xe0, 0x83, - 0x84, 0x04, 0x70, 0x80, 0x8f, 0x10, 0x13, 0xbb, 0xee, 0xff, 0x10, 0x2f, 0xba, 0x59, 0x72, 0x0a, - 0x22, 0x3e, 0x25, 0xee, 0xef, 0x88, 0x94, 0xef, 0xb9, 0x20, 0x84, 0x30, 0x30, 0xd5, 0x55, 0x17, - 0x17, 0x12, 0x70, 0xb3, 0xab, 0xcf, 0x0f, 0x2c, 0x03, 0x48, 0x0f, 0xd2, 0xc3, 0x38, 0x4e, 0xeb, - 0xcd, 0xe3, 0xb4, 0xf4, 0xff, 0xfe, 0x2e, 0x26, 0x0b, 0x24, 0x83, 0x55, 0xd9, 0xaa, 0x2b, 0xbf, - 0x70, 0x40, 0x18, 0x19, 0x9c, 0x53, 0xb8, 0xae, 0xe3, 0x0b, 0xdf, 0x70, 0x7f, 0x9e, 0x10, 0xa4, - 0x5c, 0x3e, 0x5a, 0x9b, 0x03, 0xfd, 0x62, 0x51, 0x74, 0x92, 0x41, 0x44, 0x24, 0xb7, 0xd3, 0xff, - 0xff, 0x29, 0x9d, 0xc5, 0x62, 0xbf, 0x37, 0x55, 0xc4, 0x09, 0x08, 0x44, 0x39, 0xc5, 0xa1, 0x68, - 0xf8, 0xfc, 0x4b, 0x8d, 0x7a, 0x25, 0x94, 0x25, 0x6a, 0xe7, 0x83, 0x00, 0x62, 0x63, 0x56, 0xb0, - 0x9b, 0x39, 0x9b, 0xff, 0xbf, 0xcd, 0x11, 0x82, 0x08, 0x80, 0x89, 0x6e, 0xee, 0xe4, 0x88, 0x12, - 0x14, 0x33, 0xde, 0x2b, 0x6e, 0x3b, 0xf1, 0xe9, 0xbb, 0xb7, 0x2f, 0x37, 0x05, 0x00, 0x84, 0x15, - 0xd3, 0x48, 0xef, 0xcb, 0x39, 0x3e, 0xaf, 0xef, 0x82, 0x7c, 0xdf, 0x62, 0x78, 0x9e, 0xb1, 0xc4, - 0x04, 0x4b, 0x6f, 0x7c, 0x20, 0x19, 0x36, 0xdb, 0x9b, 0xf0, 0x80, 0x52, 0x7c, 0x0a, 0x8d, 0x44, - 0xee, 0xeb, 0x98, 0x97, 0x92, 0x59, 0x49, 0xde, 0x3c, 0x3c, 0x73, 0x27, 0x80, 0xe1, 0x28, 0xab, - 0x70, 0xaa, 0x6b, 0x74, 0xe1, 0xeb, 0x7e, 0x24, 0x48, 0x2e, 0xbb, 0x7a, 0xaf, 0xd5, 0x0c, 0x86, - 0x44, 0x45, 0x76, 0x7c, 0x7e, 0x4f, 0x39, 0xc3, 0x98, 0x04, 0x3d, 0x14, 0x2a, 0xdc, 0xdb, 0x62, - 0x96, 0x20, 0xea, 0x8e, 0x74, 0x73, 0xfe, 0xdf, 0xd3, 0xe2, 0x21, 0x3b, 0x3a, 0x5b, 0x90, 0xe3, - 0x8f, 0xa1, 0x78, 0x38, 0x07, 0x32, 0xe2, 0x3c, 0x4c, 0x10, 0x71, 0xd7, 0x7b, 0xee, 0xf7, 0xbb, - 0xee, 0xab, 0xe1, 0x11, 0x03, 0x22, 0xbb, 0xdc, 0x56, 0x5e, 0x70, 0x00, 0xe5, 0xea, 0x70, 0xf3, - 0x80, 0x18, 0x60, 0x74, 0x83, 0x5c, 0x32, 0x19, 0x0a, 0x6d, 0xdf, 0x96, 0xe9, 0x38, 0xae, 0xb1, - 0x7d, 0x53, 0x10, 0x03, 0xe0, 0xf0, 0x7d, 0x98, 0x73, 0x00, 0x32, 0x01, 0x9e, 0xce, 0xdf, 0xee, - 0xfe, 0x99, 0xb6, 0x2e, 0x9a, 0xc7, 0x1c, 0x8b, 0x69, 0xc5, 0xb0, 0x7f, 0xcc, 0x9e, 0xdf, 0x4f, - 0x89, 0x13, 0x6a, 0x23, 0xe2, 0x03, 0xe5, 0x81, 0x93, 0xf1, 0x20, 0xaf, 0x2f, 0xd6, 0xbb, 0x4a, - 0xae, 0x21, 0xbc, 0x00, 0x5f, 0x5a, 0x95, 0x38, 0xb7, 0xbc, 0xf5, 0xc2, 0xe4, 0xd9, 0x08, 0x8f, - 0x7f, 0x51, 0x71, 0x57, 0xe0, 0x35, 0xf3, 0x3b, 0x0e, 0xa9, 0x23, 0x75, 0xbd, 0x45, 0xdf, 0x9f, - 0xdf, 0x89, 0x82, 0x58, 0x91, 0x60, 0xfc, 0x9d, 0xa3, 0xf8, 0xad, 0xee, 0xfc, 0x4c, 0x57, 0x3f, - 0x0d, 0x03, 0x50, 0x56, 0x15, 0x66, 0x9f, 0x86, 0x26, 0x8a, 0xcb, 0x0f, 0x08, 0x89, 0x19, 0xd5, - 0x78, 0x3d, 0xe3, 0xa1, 0xac, 0x62, 0x30, 0x3b, 0x35, 0xe7, 0x89, 0x09, 0x6a, 0xc2, 0x46, 0x5b, - 0x7f, 0x11, 0x78, 0x97, 0x0b, 0x0f, 0x07, 0x20, 0xe3, 0x0a, 0x4b, 0xff, 0xe9, 0xe9, 0xc9, 0x84, - 0x0c, 0x47, 0x8a, 0xcb, 0xb8, 0x80, 0xc0, 0xcd, 0xd6, 0xd9, 0x3c, 0x7a, 0x97, 0x76, 0x8f, 0x9f, - 0xc4, 0x04, 0x0b, 0x4e, 0x4e, 0x5c, 0x5c, 0xda, 0xbb, 0xf8, 0xbc, 0x65, 0x77, 0x6e, 0xda, 0x86, - 0xb9, 0xb7, 0x7b, 0xe2, 0xf7, 0x77, 0x7b, 0xbb, 0xe0, 0x9f, 0x6f, 0x97, 0xac, 0xad, 0xb8, 0x38, - 0x10, 0x14, 0xb4, 0xd4, 0x59, 0x78, 0x87, 0x96, 0x0d, 0xa6, 0x81, 0x01, 0xc6, 0x09, 0x69, 0x72, - 0x64, 0xd8, 0x3b, 0xe2, 0x60, 0x03, 0xe5, 0x19, 0x8d, 0xa0, 0x43, 0x87, 0x54, 0x02, 0x93, 0x20, - 0x5b, 0x14, 0xab, 0x3b, 0xc9, 0xa6, 0x8e, 0xed, 0x82, 0x83, 0x8e, 0xb0, 0x77, 0xf8, 0xb6, 0x9d, - 0x1b, 0xbf, 0xcb, 0xb2, 0xec, 0x8c, 0x5d, 0xd3, 0x6f, 0xa7, 0xc4, 0x05, 0x21, 0x5a, 0xcf, 0x58, - 0xa6, 0x2e, 0xd0, 0x8e, 0x4c, 0xaf, 0x2b, 0xf7, 0x13, 0x05, 0x90, 0xe9, 0x88, 0x4c, 0x1f, 0x15, - 0xf9, 0xcd, 0xc1, 0x02, 0x2e, 0xbc, 0x7a, 0xf5, 0x94, 0x5b, 0xc2, 0x10, 0xa5, 0x66, 0xa9, 0x79, - 0x6d, 0x91, 0x73, 0xf8, 0x2e, 0x59, 0x9c, 0x1c, 0x14, 0x39, 0x17, 0x93, 0x13, 0x7b, 0x1d, 0x3f, - 0x15, 0x97, 0x3d, 0xdf, 0xc1, 0x2c, 0xb4, 0x39, 0xa6, 0xa7, 0xde, 0xd7, 0x78, 0x90, 0x57, 0x7b, - 0xcb, 0xde, 0x2b, 0x37, 0x4f, 0x4d, 0xea, 0x20, 0x40, 0x72, 0xa4, 0xc5, 0x2d, 0xfb, 0xf6, 0xe4, - 0xf8, 0x98, 0x53, 0x2f, 0xb9, 0x6f, 0x78, 0xac, 0x6f, 0x41, 0x59, 0xcd, 0x2a, 0x70, 0xe5, 0xfe, - 0x1a, 0x1a, 0xbf, 0x5f, 0xc4, 0x04, 0x6a, 0xbb, 0xa0, 0x67, 0xb0, 0xda, 0x55, 0x17, 0xc4, 0xc2, - 0x9a, 0x89, 0x9c, 0x2c, 0x6f, 0x66, 0x51, 0xb0, 0x77, 0xe2, 0xeb, 0x80, 0xc3, 0xe1, 0x33, 0x55, - 0x1b, 0xce, 0xde, 0x20, 0x5d, 0xde, 0x4d, 0xb9, 0xee, 0x49, 0x62, 0x44, 0x3d, 0xdf, 0xe2, 0x36, - 0xa9, 0x13, 0x1b, 0xf8, 0x63, 0x96, 0xb5, 0x55, 0xcd, 0x77, 0xfc, 0xdd, 0x57, 0x11, 0xc3, 0x32, - 0x82, 0x3b, 0xfe, 0x3d, 0xff, 0xff, 0x7f, 0x89, 0x20, 0xae, 0xfb, 0xdf, 0xcb, 0xdd, 0xfc, 0x16, - 0x78, 0x5e, 0xbb, 0x9b, 0x81, 0x8b, 0x2e, 0x2c, 0xdc, 0xf0, 0x03, 0x83, 0xfe, 0x29, 0x99, 0x61, - 0x80, 0x40, 0x0a, 0x62, 0xa2, 0x00, 0xc6, 0xf8, 0xdf, 0x3f, 0x4d, 0xdb, 0xbc, 0xcb, 0x35, 0x21, - 0xcf, 0x85, 0x2d, 0x6e, 0xee, 0xfc, 0x49, 0xc5, 0xba, 0xf7, 0x3e, 0xaf, 0xc4, 0x81, 0x00, 0x7d, - 0xf7, 0xdd, 0xda, 0xdf, 0xc7, 0x54, 0x5d, 0x55, 0x5f, 0x8b, 0x25, 0xc8, 0x8b, 0x62, 0x8f, 0xc1, - 0x5d, 0xe6, 0xd3, 0xf2, 0x7a, 0xd4, 0xd1, 0x4f, 0x1d, 0xc1, 0x62, 0x3e, 0x24, 0x25, 0x81, 0xdb, - 0x5d, 0x71, 0x0c, 0x3c, 0x48, 0x80, 0x55, 0x3d, 0xf7, 0xe3, 0xc9, 0x9b, 0xdd, 0xd2, 0x2f, 0x04, - 0xb5, 0x5c, 0x6b, 0x8a, 0x29, 0x59, 0x81, 0xfc, 0xb9, 0x8f, 0x82, 0x7e, 0x92, 0x4f, 0xbb, 0x1f, - 0x05, 0x59, 0xb1, 0x4b, 0xe3, 0x0d, 0xaa, 0x51, 0x95, 0x57, 0x31, 0xb3, 0xc4, 0x82, 0x5a, 0x30, - 0xd0, 0x1e, 0x89, 0x58, 0xa5, 0x51, 0x90, 0xc3, 0xa1, 0x96, 0x42, 0xce, 0x1b, 0x28, 0x82, 0xd5, - 0x89, 0x85, 0x24, 0x99, 0x42, 0xe3, 0x1e, 0xb6, 0x10, 0x64, 0xb7, 0x83, 0x12, 0x32, 0x11, 0xc9, - 0x27, 0x5b, 0xe9, 0x38, 0x01, 0xa4, 0x1a, 0x8f, 0x0d, 0x56, 0xe1, 0x01, 0x21, 0x48, 0x90, 0xf2, - 0x60, 0xa8, 0xe8, 0x5c, 0xe0, 0x0f, 0x25, 0x6a, 0x3e, 0xc1, 0xdf, 0x9f, 0xe3, 0xd6, 0x5e, 0x49, - 0x5f, 0x7f, 0x78, 0x90, 0xa6, 0xee, 0xe4, 0xca, 0xb0, 0x60, 0xa9, 0x2e, 0x72, 0x1e, 0xa5, 0x53, - 0x2c, 0x7d, 0xc2, 0x21, 0x00, 0xa4, 0x32, 0x0f, 0x79, 0xf6, 0xeb, 0x71, 0xca, 0x2f, 0xec, 0xb6, - 0x7b, 0x82, 0xbc, 0xf1, 0xc6, 0xdd, 0xb7, 0xf9, 0x78, 0x31, 0x35, 0xc3, 0xbc, 0x97, 0x7b, 0xf8, - 0xcb, 0xbb, 0xbe, 0xee, 0xef, 0xbb, 0xfe, 0x11, 0xde, 0x69, 0x3b, 0xbb, 0x9f, 0x94, 0x0b, 0xa0, - 0xc9, 0x07, 0x18, 0x60, 0x22, 0x14, 0x84, 0xab, 0x81, 0x33, 0xf5, 0x24, 0xba, 0x64, 0x9e, 0xaa, - 0x55, 0x02, 0x5e, 0xf7, 0x0b, 0x85, 0x4e, 0x00, 0x02, 0x18, 0x3e, 0xc0, 0xf5, 0xa8, 0xb6, 0xe1, - 0x00, 0xc0, 0x29, 0xb3, 0x6e, 0x3d, 0x5b, 0x52, 0x60, 0x2b, 0x19, 0xc7, 0x1d, 0x87, 0x5f, 0x0c, - 0x84, 0x09, 0x5b, 0xb5, 0x88, 0x08, 0xf0, 0x88, 0x30, 0x0a, 0x5e, 0xfb, 0x6f, 0x74, 0xb1, 0x0e, - 0x1d, 0x81, 0x5d, 0xbb, 0x89, 0x04, 0x06, 0xb4, 0xd1, 0xb2, 0x70, 0x80, 0x63, 0xe0, 0x8f, 0x77, - 0x69, 0xec, 0x3a, 0xa0, 0x03, 0x11, 0x7f, 0x22, 0x7a, 0x6b, 0xbf, 0xfb, 0x78, 0xab, 0x6c, 0x04, - 0x41, 0x7f, 0x13, 0xde, 0xde, 0x22, 0x12, 0xcd, 0xfc, 0x48, 0x71, 0x78, 0x9a, 0xe0, 0x8f, 0xa4, - 0xe9, 0x9f, 0xad, 0x71, 0x1e, 0x23, 0xf0, 0x43, 0xe4, 0xda, 0x75, 0xe0, 0x8a, 0x33, 0x63, 0xf1, - 0x71, 0x11, 0xdb, 0x9f, 0x30, 0xf8, 0xd4, 0x8b, 0x79, 0x78, 0x3b, 0x78, 0x9b, 0x1c, 0x40, 0x40, - 0x67, 0x8a, 0xf3, 0xf8, 0x6d, 0xd2, 0x53, 0x18, 0x06, 0xfe, 0x42, 0xde, 0xe9, 0xaa, 0x9c, 0x0b, - 0xb0, 0xdf, 0x51, 0x6d, 0x78, 0xa5, 0x9e, 0xc3, 0x88, 0x1d, 0x26, 0x71, 0xf4, 0x9d, 0xde, 0x4c, - 0xc4, 0xe1, 0xee, 0x2a, 0xee, 0xef, 0x7b, 0xf8, 0xac, 0xe7, 0xf6, 0xdf, 0xe3, 0x37, 0xbb, 0xee, - 0xd2, 0x62, 0xb1, 0x22, 0xc1, 0xc0, 0x0e, 0x0a, 0xd2, 0x38, 0x01, 0xc0, 0xfc, 0x35, 0xc4, 0x04, - 0x41, 0x65, 0xf7, 0x55, 0x42, 0xc9, 0x0a, 0xf7, 0xbf, 0x88, 0x05, 0x9b, 0xdd, 0x3b, 0x88, 0x72, - 0x2b, 0x10, 0xe1, 0xc3, 0x99, 0x2a, 0xc4, 0x02, 0x9e, 0x20, 0x18, 0x84, 0x22, 0xbb, 0xf3, 0x74, - 0xd6, 0xdf, 0x05, 0x01, 0x90, 0xa4, 0xfc, 0xdc, 0xfe, 0x4b, 0x30, 0xb8, 0x15, 0x14, 0x32, 0xc0, - 0x39, 0xb0, 0x48, 0x68, 0x54, 0x97, 0x8b, 0xc0, 0xea, 0x5e, 0x8c, 0x75, 0xe0, 0xe3, 0x1f, 0xc2, - 0x21, 0x00, 0xa4, 0xe3, 0xc9, 0xce, 0xe3, 0x31, 0x31, 0x5f, 0x2e, 0xeb, 0x39, 0xc5, 0x6a, 0x2f, - 0xd7, 0xb0, 0xe2, 0x80, 0x13, 0xd6, 0x7d, 0x31, 0x2d, 0xd7, 0xb9, 0xba, 0xcd, 0xb1, 0x57, 0xdb, - 0xc5, 0xac, 0x83, 0xfa, 0x5f, 0x05, 0x11, 0x0e, 0x17, 0x05, 0x00, 0x65, 0x83, 0x78, 0xa3, 0x12, - 0x3e, 0x06, 0x58, 0x1c, 0x00, 0x90, 0x36, 0x20, 0x38, 0x20, 0x38, 0x92, 0xa5, 0x10, 0x1c, 0x0a, - 0x80, 0x19, 0x49, 0x43, 0xcf, 0x07, 0x02, 0xe3, 0x28, 0x75, 0xee, 0x4c, 0x2f, 0x95, 0x9e, 0x6f, - 0x18, 0x50, 0xec, 0x5b, 0x4f, 0xfc, 0x09, 0x00, 0x60, 0x1b, 0x24, 0xe4, 0x59, 0xc6, 0xe3, 0x0a, - 0x2a, 0x22, 0xa1, 0x76, 0x0b, 0x96, 0x03, 0x64, 0xb6, 0x48, 0x15, 0xb8, 0xb6, 0xa4, 0x01, 0x62, - 0xf2, 0x99, 0x57, 0x12, 0xfe, 0x04, 0x01, 0x20, 0xa6, 0x52, 0x96, 0xfc, 0x0d, 0xb1, 0x76, 0x46, - 0xd7, 0x5e, 0xb9, 0xc9, 0x0f, 0x93, 0x7b, 0xf1, 0x20, 0x8a, 0x92, 0x57, 0x82, 0xff, 0xc1, 0x16, - 0xa9, 0xdd, 0xf0, 0xa5, 0x37, 0x4d, 0xde, 0xf5, 0xd5, 0xcf, 0xf7, 0xf1, 0x03, 0xea, 0xba, 0xaa, - 0xd6, 0xbe, 0x24, 0x15, 0xcf, 0xb1, 0x11, 0xf5, 0xa7, 0xa2, 0x95, 0x9e, 0xe2, 0x61, 0x48, 0xd9, - 0x54, 0x1a, 0xcb, 0x8b, 0x91, 0x6c, 0x29, 0xcd, 0x32, 0x0b, 0x72, 0x6e, 0x74, 0x07, 0xc7, 0xf4, - 0xf3, 0x29, 0x8c, 0x0e, 0xae, 0xf7, 0x99, 0x3a, 0x5c, 0xb1, 0x82, 0xba, 0x85, 0xe7, 0x75, 0x2a, - 0xe2, 0x41, 0x35, 0xec, 0xdd, 0xd4, 0x9a, 0xbe, 0xee, 0x87, 0xb8, 0xcb, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xef, 0xe4, 0xee, 0xfc, 0x22, 0x32, 0x76, 0x5d, 0xa4, 0xfa, 0x59, 0x6c, 0xb7, 0xa6, - 0x3a, 0x16, 0xac, 0xfd, 0x57, 0x04, 0x20, 0x84, 0x56, 0x94, 0x56, 0xda, 0x1b, 0x46, 0xcc, 0x08, - 0x21, 0x10, 0xa4, 0x47, 0x19, 0x97, 0x8f, 0x1f, 0x2c, 0x00, 0x18, 0x43, 0x6a, 0x1c, 0x60, 0x35, - 0x06, 0x3e, 0x64, 0x50, 0x72, 0xb9, 0x0c, 0x58, 0x96, 0x25, 0xc0, 0x25, 0x70, 0x55, 0xbe, 0xf1, - 0x1b, 0xe8, 0x27, 0x61, 0xab, 0xe0, 0x50, 0x08, 0x8e, 0x89, 0x0d, 0x04, 0x1c, 0x57, 0xed, 0x31, - 0x2e, 0x54, 0xbe, 0x7f, 0x0d, 0x98, 0x60, 0x48, 0x53, 0x96, 0x82, 0xfe, 0x7c, 0x5d, 0x25, 0x7a, - 0xad, 0x51, 0xde, 0x0a, 0x02, 0x20, 0xaf, 0x51, 0x6d, 0x6e, 0xef, 0x75, 0xad, 0xf0, 0xca, 0x82, - 0x74, 0xeb, 0xe6, 0xd7, 0xb7, 0xff, 0xe2, 0x75, 0x0d, 0x60, 0x12, 0x3f, 0x62, 0x99, 0xff, 0xd3, - 0xf8, 0xb0, 0xc2, 0x80, 0x19, 0xff, 0xc5, 0x92, 0xec, 0xfe, 0x9f, 0xfd, 0x70, 0x72, 0x24, 0x16, - 0xf9, 0x71, 0xee, 0xef, 0x7c, 0x36, 0xe0, 0x61, 0x0c, 0xbe, 0x96, 0x77, 0x63, 0x71, 0x5f, 0x78, - 0x91, 0xe3, 0x58, 0x14, 0x73, 0x72, 0xf2, 0x72, 0xc6, 0xba, 0x7a, 0xd7, 0x81, 0x83, 0xe2, 0x3e, - 0x49, 0x78, 0x51, 0x19, 0x2f, 0xcf, 0x0d, 0xe4, 0x86, 0xbe, 0x3c, 0x63, 0xeb, 0x9b, 0x37, 0x55, - 0xd8, 0xf1, 0x91, 0x0f, 0x77, 0x05, 0xaf, 0x98, 0xf7, 0x96, 0xc2, 0x4f, 0x7d, 0x1b, 0xd6, 0x6d, - 0xf5, 0x7f, 0x8c, 0xd2, 0x77, 0x49, 0xbc, 0x56, 0x2b, 0x77, 0xb7, 0x5f, 0x08, 0xee, 0x6f, 0x9b, - 0x54, 0x7d, 0xe0, 0x22, 0xfa, 0x7c, 0x44, 0x96, 0x13, 0xf6, 0xdf, 0x82, 0x39, 0x21, 0x72, 0x41, - 0x39, 0x0e, 0xc4, 0x59, 0xef, 0x75, 0x11, 0x18, 0x6b, 0xdd, 0xd7, 0x8a, 0xee, 0xf7, 0xe2, 0x44, - 0x0e, 0xad, 0x65, 0xd3, 0x21, 0x01, 0x2d, 0xbb, 0xbb, 0xe2, 0x24, 0x93, 0x0b, 0xa7, 0x7c, 0x48, - 0x28, 0x11, 0x1f, 0x63, 0xdc, 0x8f, 0x3d, 0xca, 0xbe, 0x0e, 0x49, 0x77, 0xf0, 0x40, 0x24, 0x79, - 0x5f, 0x77, 0xbb, 0xde, 0xf0, 0xa2, 0x84, 0x80, 0xc6, 0xdf, 0x6e, 0x9f, 0xee, 0xdf, 0x0c, 0x88, - 0xde, 0xf5, 0xac, 0x2a, 0xe0, 0x47, 0xb5, 0x9d, 0xef, 0xff, 0xb7, 0x13, 0x80, 0x8b, 0xc7, 0x3e, - 0xee, 0x14, 0x24, 0x01, 0xb2, 0xb9, 0xcf, 0x7b, 0xef, 0x7f, 0xbd, 0xf0, 0x62, 0x0c, 0x02, 0x84, - 0x12, 0x78, 0xc8, 0x99, 0x20, 0xe3, 0x87, 0x1e, 0x6e, 0x3a, 0x5a, 0xe7, 0x46, 0x58, 0x3e, 0xe2, - 0xb0, 0x75, 0x73, 0xf5, 0x39, 0xc5, 0x58, 0xd1, 0x77, 0x05, 0x22, 0x44, 0xdd, 0xf5, 0xd7, 0xc4, - 0xf8, 0x9f, 0xc9, 0x3c, 0x11, 0x5f, 0x89, 0x17, 0xd4, 0xd8, 0x97, 0x6f, 0x12, 0x24, 0x11, 0x7c, - 0x43, 0xdd, 0xc4, 0x09, 0x1b, 0x6e, 0x7c, 0x90, 0x24, 0x16, 0xca, 0xc1, 0x08, 0xe2, 0xf9, 0xdf, - 0x0d, 0x7e, 0xcc, 0xbf, 0xe2, 0x41, 0x44, 0x6d, 0x62, 0xa8, 0x94, 0x11, 0xc5, 0xee, 0xf8, 0x46, - 0xfb, 0x76, 0x92, 0x4b, 0x06, 0xff, 0x0b, 0x1d, 0x95, 0xe1, 0x2e, 0xd2, 0xe7, 0x38, 0xf8, 0x91, - 0x25, 0xea, 0xb8, 0x9a, 0xbf, 0x13, 0x17, 0x19, 0xa5, 0xa1, 0x1c, 0x6a, 0xa9, 0x34, 0xd7, 0x82, - 0x3a, 0xcb, 0xb4, 0xe4, 0x29, 0xcd, 0x5a, 0xcd, 0xc9, 0x5a, 0xde, 0x23, 0xe4, 0xbd, 0xf8, 0x99, - 0xb7, 0x97, 0xe1, 0x80, 0xc8, 0xad, 0x62, 0x7e, 0x2f, 0x17, 0xc4, 0x82, 0x90, 0x87, 0x49, 0xdc, - 0x56, 0x21, 0xc7, 0xe6, 0x2e, 0xbc, 0x1c, 0x82, 0xe2, 0xbb, 0xbf, 0x14, 0xc5, 0xf9, 0x96, 0x0a, - 0x01, 0x0e, 0x23, 0x00, 0xff, 0xca, 0xba, 0x60, 0xe0, 0x32, 0x10, 0x23, 0xbb, 0xdf, 0x77, 0x77, - 0x78, 0xe9, 0x43, 0xb1, 0xfb, 0x12, 0x42, 0x87, 0x05, 0x37, 0x86, 0x00, 0x90, 0x30, 0x43, 0x62, - 0xed, 0xe3, 0x2d, 0xc5, 0x6e, 0xe2, 0xb7, 0xbd, 0xe1, 0xec, 0x00, 0x8c, 0x27, 0x14, 0x40, 0x3b, - 0xfb, 0x96, 0x3d, 0x8d, 0x34, 0xee, 0xf8, 0x8a, 0xbd, 0x31, 0x45, 0x8a, 0xb4, 0xda, 0x18, 0x0a, - 0x17, 0x71, 0x79, 0xbd, 0x1b, 0x78, 0x89, 0x6b, 0x07, 0x97, 0xbe, 0x23, 0x0d, 0x3d, 0xf8, 0xea, - 0xfe, 0x6b, 0x51, 0x71, 0x7c, 0x4c, 0x4f, 0x95, 0x8b, 0x55, 0xe2, 0x64, 0xc4, 0x73, 0xe2, 0x78, - 0x99, 0x29, 0x25, 0xbe, 0x1a, 0x92, 0xd9, 0x97, 0xef, 0xb6, 0x2a, 0xff, 0x7c, 0x57, 0x70, 0xe6, - 0x23, 0xc4, 0x93, 0x77, 0x7f, 0x65, 0xdd, 0xf8, 0x92, 0x11, 0x3b, 0xf0, 0xcc, 0xbc, 0x6d, 0x6f, - 0x0c, 0x89, 0x0a, 0x5e, 0xe2, 0xb7, 0xbd, 0x28, 0x3b, 0xf1, 0x3c, 0xd5, 0x5d, 0x87, 0x09, 0x00, - 0x31, 0x9a, 0x1f, 0x76, 0xcb, 0xb7, 0xd6, 0xef, 0x5a, 0xa6, 0x9b, 0x49, 0xa6, 0x99, 0x39, 0x76, - 0x38, 0xc7, 0x3f, 0x7f, 0x82, 0x10, 0xc8, 0x23, 0x2a, 0xd2, 0xf6, 0x21, 0xd0, 0xe2, 0x1f, 0x09, - 0xe0, 0x9b, 0xfa, 0xcf, 0xff, 0xef, 0x81, 0x64, 0x32, 0x09, 0xc9, 0x58, 0xba, 0x44, 0xcf, 0xb8, - 0x62, 0x4c, 0x8c, 0x78, 0x30, 0x01, 0x12, 0x36, 0x13, 0x40, 0x92, 0x1f, 0x60, 0xd8, 0x53, 0x87, - 0x81, 0xe0, 0xf5, 0x81, 0xcd, 0x28, 0xe4, 0x0f, 0x03, 0xe0, 0x35, 0x28, 0x4f, 0x05, 0x80, 0x01, - 0x3b, 0x66, 0x3a, 0x3c, 0x38, 0x00, 0x0a, 0xf2, 0xc0, 0x00, 0xac, 0x3b, 0x06, 0xa2, 0xe1, 0x0a, - 0xb0, 0x19, 0x04, 0x81, 0xc2, 0x32, 0x37, 0x6e, 0x89, 0xd3, 0x4d, 0x3c, 0x48, 0x80, 0xa4, 0x3e, - 0x35, 0x25, 0x05, 0x43, 0xf0, 0x06, 0xa3, 0xa0, 0xfd, 0x6d, 0x16, 0xb1, 0x20, 0x70, 0xf0, 0x00, - 0x37, 0xc7, 0x40, 0xf9, 0xe0, 0x00, 0x67, 0x9e, 0x00, 0x3c, 0x76, 0xe3, 0xa0, 0x0b, 0x96, 0xb1, - 0xd0, 0x0b, 0x86, 0xc0, 0x51, 0x80, 0x04, 0x3c, 0x13, 0x70, 0xb5, 0x72, 0xa4, 0x09, 0x64, 0xa9, - 0x00, 0x54, 0x96, 0xbe, 0x09, 0x75, 0xb6, 0x29, 0x8b, 0xaf, 0x91, 0x08, 0x88, 0x08, 0x0a, 0xb1, - 0x83, 0xb7, 0x57, 0x75, 0x83, 0x25, 0x55, 0xd0, 0x37, 0x88, 0xf1, 0x25, 0xbd, 0xf8, 0x99, 0x37, - 0xbb, 0xc1, 0x00, 0xae, 0xe2, 0xb4, 0xc5, 0x1b, 0xbe, 0x04, 0x00, 0x28, 0x8c, 0x9f, 0x0b, 0xcb, - 0xb1, 0x59, 0x31, 0x4a, 0xcb, 0x78, 0x3e, 0xf6, 0x3d, 0x7b, 0xc4, 0xbf, 0x0c, 0xe0, 0x14, 0x95, - 0xb2, 0x1c, 0xa8, 0xdd, 0x5f, 0x37, 0x77, 0x9b, 0xe0, 0xff, 0xa7, 0xa6, 0x9e, 0x97, 0x82, 0x01, - 0x0b, 0xdc, 0x33, 0x04, 0xbb, 0xdd, 0xc5, 0x6e, 0x2b, 0xec, 0x26, 0xe0, 0x13, 0x0d, 0x1f, 0x4f, - 0x3f, 0xf3, 0x7f, 0x7c, 0x0a, 0x00, 0x51, 0x77, 0x77, 0xe1, 0x10, 0x62, 0x5d, 0xef, 0x81, 0x44, - 0x18, 0x05, 0x2a, 0x27, 0xd4, 0xb3, 0x0b, 0x86, 0xe1, 0x4d, 0x90, 0x63, 0x0a, 0x1c, 0x64, 0x4e, - 0x82, 0x4e, 0x16, 0x18, 0x90, 0x0c, 0x09, 0x2a, 0x68, 0x7f, 0x4e, 0x0f, 0x79, 0x23, 0x54, 0x63, - 0x0e, 0x12, 0x00, 0xe2, 0x8e, 0x62, 0x6c, 0x1f, 0xb4, 0xaf, 0xab, 0x77, 0x9a, 0xeb, 0x1d, 0x17, - 0x6c, 0x97, 0xcb, 0x9d, 0x6c, 0x4f, 0x1d, 0x22, 0xeb, 0x67, 0xab, 0xea, 0x7e, 0xb7, 0x0d, 0xb8, - 0x00, 0x84, 0x71, 0xc9, 0x8c, 0x50, 0xbf, 0x63, 0x2d, 0xdf, 0xdb, 0x65, 0x9a, 0x07, 0xa5, 0x31, - 0xbe, 0xbe, 0x04, 0xe7, 0x4c, 0x90, 0x3c, 0x54, 0xfc, 0x58, 0xb5, 0x56, 0x0e, 0xdd, 0xef, 0xf7, - 0x36, 0x02, 0x13, 0xc4, 0xd8, 0x3d, 0x97, 0x97, 0xc3, 0xb5, 0x86, 0xe3, 0x2a, 0x20, 0xe5, 0x4b, - 0xfd, 0x57, 0x36, 0x52, 0x85, 0xf9, 0xbb, 0xb9, 0x62, 0x7c, 0x46, 0xf8, 0x8b, 0xde, 0xee, 0xef, - 0xe0, 0xab, 0x8e, 0xaf, 0xac, 0x5c, 0x65, 0x4e, 0x71, 0x13, 0xc1, 0xc1, 0xaa, 0xb9, 0x7b, 0x70, - 0x50, 0x05, 0x11, 0x92, 0x67, 0x0d, 0xdb, 0x1d, 0xf3, 0x8c, 0xf8, 0xe7, 0x2f, 0xbc, 0xd4, 0xe5, - 0xa6, 0x19, 0x12, 0x10, 0xb5, 0x8a, 0x2a, 0x9c, 0xe6, 0x8d, 0xa6, 0x7c, 0x2f, 0xe2, 0x04, 0xf7, - 0x75, 0xb7, 0x38, 0x90, 0xc8, 0x9f, 0x2f, 0x97, 0xaf, 0x84, 0x44, 0x97, 0x8b, 0xaf, 0x12, 0x33, - 0x51, 0x71, 0x4c, 0x48, 0x70, 0x1f, 0x71, 0xf6, 0x92, 0x3a, 0x08, 0x0f, 0x2f, 0x11, 0xc9, 0x2c, - 0xcb, 0x0d, 0x20, 0x7d, 0x9c, 0x20, 0x33, 0x1b, 0xf1, 0xb9, 0xd4, 0xf8, 0xac, 0xbf, 0x25, 0x98, - 0x89, 0x06, 0x2e, 0x42, 0x09, 0x7e, 0x04, 0x81, 0x02, 0xb5, 0xae, 0x6e, 0x24, 0x39, 0xe2, 0x62, - 0x99, 0xdc, 0xd6, 0x78, 0x70, 0x5c, 0xdc, 0x13, 0xd3, 0x63, 0x24, 0x3a, 0x72, 0x41, 0xfc, 0x40, - 0xcb, 0x79, 0xb3, 0x1e, 0xca, 0x9d, 0x4d, 0x48, 0xb9, 0x69, 0xe2, 0x04, 0xef, 0x69, 0x55, 0x25, - 0x0e, 0x73, 0x5d, 0xee, 0x23, 0x9a, 0xf7, 0xae, 0x11, 0xbd, 0xdb, 0x56, 0x85, 0xc5, 0xda, 0x14, - 0x62, 0xeb, 0x84, 0x42, 0x03, 0x27, 0x83, 0x84, 0xe2, 0xae, 0xa6, 0x7b, 0x9a, 0x48, 0xac, 0x57, - 0x13, 0xc1, 0x59, 0xfa, 0xef, 0x3f, 0x31, 0x22, 0x47, 0x55, 0x7a, 0xbb, 0x22, 0xe4, 0xb6, 0xf8, - 0x98, 0x52, 0xaa, 0x95, 0x57, 0x69, 0x65, 0xd9, 0xb0, 0x4f, 0x0f, 0x0c, 0x1f, 0x84, 0x61, 0x08, - 0x93, 0xce, 0x3c, 0x77, 0x3c, 0xfe, 0x2b, 0x3e, 0xa2, 0x7e, 0x1e, 0x2b, 0x58, 0x66, 0x32, 0xa4, - 0xe0, 0xba, 0x4a, 0x17, 0xdd, 0x8b, 0x8b, 0x9c, 0x07, 0xcb, 0x32, 0x6a, 0xab, 0x82, 0x81, 0x2f, - 0xaa, 0xf1, 0x24, 0x89, 0x3c, 0xe0, 0x39, 0x11, 0xcc, 0x40, 0x90, 0x43, 0x24, 0x02, 0xa7, 0x72, - 0x7e, 0xe1, 0x01, 0x00, 0xae, 0xba, 0xa8, 0xb8, 0xa6, 0x2e, 0xb5, 0x17, 0x2a, 0x32, 0x36, 0x25, - 0xc9, 0x91, 0x7e, 0x3b, 0x97, 0xd0, 0x79, 0x98, 0x33, 0x1f, 0xc1, 0x35, 0xf7, 0x17, 0xf0, 0x5f, - 0x2d, 0xef, 0x0e, 0xf3, 0x1e, 0xf7, 0xe2, 0x7c, 0x4d, 0x62, 0x7c, 0x1c, 0x78, 0x10, 0x30, 0xf4, - 0xc0, 0x48, 0xdc, 0x07, 0xdb, 0xe9, 0xe9, 0xa9, 0x6a, 0xea, 0xfd, 0x1f, 0x5f, 0x7d, 0x3c, 0x22, - 0x08, 0x46, 0x5f, 0x6e, 0x4b, 0x96, 0x1b, 0x7c, 0x4f, 0x88, 0x1c, 0x56, 0x0a, 0xa1, 0x71, 0x7a, - 0xa9, 0x4f, 0xbc, 0x48, 0xcb, 0x3d, 0xd8, 0x81, 0xb2, 0xbc, 0xe3, 0x93, 0x2a, 0xaa, 0xbc, 0x08, - 0x01, 0x0c, 0x52, 0x29, 0xff, 0x10, 0xea, 0xba, 0x84, 0x42, 0x20, 0xa8, 0x82, 0x98, 0x83, 0x89, - 0x4b, 0x3b, 0x58, 0xb2, 0xd8, 0x87, 0x0e, 0x70, 0x40, 0x3c, 0x90, 0x00, 0x08, 0xf6, 0x48, 0xe1, - 0xbc, 0x00, 0xa5, 0xdc, 0x0a, 0x2f, 0x15, 0xcd, 0x34, 0xfe, 0xbe, 0xdd, 0xc5, 0x58, 0x3b, 0xf9, - 0x28, 0xf4, 0xfb, 0x78, 0x28, 0x08, 0x02, 0x8e, 0x03, 0x6f, 0x54, 0x0b, 0x08, 0x29, 0x64, 0x31, - 0x27, 0x07, 0x40, 0x58, 0x3a, 0x00, 0xb3, 0xb8, 0x10, 0x01, 0x40, 0x2c, 0xa4, 0x4c, 0xb9, 0xb1, - 0x4b, 0x35, 0xaa, 0x89, 0x38, 0x54, 0xe2, 0x04, 0x17, 0xaa, 0x82, 0x48, 0x91, 0x3e, 0x22, 0x4e, - 0x62, 0xdd, 0xee, 0x10, 0x07, 0x13, 0x41, 0x48, 0x63, 0x0b, 0xa2, 0x00, 0x16, 0xfb, 0x8d, 0x4b, - 0xfe, 0x9e, 0xfb, 0xa7, 0xf5, 0x6d, 0x4b, 0x36, 0x1e, 0x70, 0x0a, 0x49, 0x36, 0x22, 0x90, 0xac, - 0xa6, 0xae, 0xb2, 0xfe, 0xba, 0xf8, 0xcb, 0xe9, 0xe0, 0xff, 0x8b, 0x60, 0x30, 0x30, 0xd7, 0xdb, - 0xc0, 0x80, 0x05, 0x00, 0xa6, 0xa2, 0xfa, 0xa4, 0x4c, 0x34, 0x05, 0xc9, 0x05, 0x49, 0x45, 0x5c, - 0xf7, 0xfe, 0x3a, 0x7c, 0x13, 0x45, 0xd6, 0x71, 0x45, 0x06, 0xfd, 0x04, 0x71, 0x3e, 0x23, 0x27, - 0x2d, 0xdd, 0xfe, 0x6d, 0xee, 0xa2, 0x31, 0x01, 0x62, 0x40, 0x24, 0x71, 0x89, 0xb9, 0xdb, 0x5e, - 0x9b, 0x66, 0xe9, 0xb3, 0xfa, 0x71, 0xf8, 0x31, 0x02, 0x08, 0x89, 0x3e, 0x77, 0xc9, 0x8a, 0x17, - 0xe0, 0x20, 0x41, 0x48, 0x2a, 0xb3, 0x3b, 0xc9, 0x8f, 0x6e, 0x2b, 0xbb, 0x78, 0x81, 0x33, 0xc0, - 0x79, 0x6c, 0x9d, 0x5a, 0xad, 0x4f, 0xf2, 0x70, 0x4b, 0x12, 0x78, 0x90, 0xe4, 0x47, 0x16, 0x71, - 0xc3, 0x61, 0xd2, 0x1f, 0xe4, 0xbd, 0xe5, 0xc4, 0x1a, 0xef, 0x75, 0x86, 0x7c, 0x33, 0x51, 0x02, - 0x62, 0x02, 0xa8, 0xa0, 0x1a, 0xd7, 0xb1, 0x97, 0xfd, 0xbf, 0xf0, 0x40, 0x10, 0x29, 0x12, 0x51, - 0xb5, 0xc1, 0x47, 0x25, 0xde, 0xfe, 0x4b, 0xde, 0xb9, 0x04, 0xdd, 0xfc, 0x49, 0x88, 0xef, 0x7c, - 0x08, 0x20, 0x84, 0x56, 0x6f, 0x2e, 0x45, 0x6a, 0x5e, 0x22, 0x0c, 0x44, 0x82, 0x29, 0xfd, 0xef, - 0xc3, 0x02, 0x01, 0x59, 0x07, 0x47, 0xe0, 0xe8, 0x7e, 0x0e, 0x87, 0xc4, 0xf8, 0x5d, 0x59, 0x17, - 0x51, 0x75, 0xa8, 0x29, 0xc4, 0x3a, 0xea, 0x82, 0x71, 0x60, 0x9b, 0xd3, 0x7e, 0xeb, 0xf5, 0xaf, - 0xfc, 0xa2, 0x9e, 0xef, 0xc2, 0x02, 0xce, 0xfb, 0xbd, 0xdf, 0xdd, 0xdf, 0xf3, 0x5f, 0x73, 0x72, - 0x5c, 0x51, 0xe0, 0xab, 0x90, 0xae, 0xef, 0x09, 0xc4, 0x60, 0x12, 0x38, 0x00, 0x00, 0x00, 0x01, - 0x41, 0x9a, 0x37, 0x1b, 0xb0, 0x52, 0x2f, 0x08, 0x77, 0x7b, 0xbb, 0xdd, 0xdf, 0xc5, 0x5d, 0xdd, - 0xdd, 0xdd, 0xe3, 0x65, 0x00, 0xc7, 0xe6, 0x1d, 0xdf, 0x7d, 0xdc, 0xbc, 0xa4, 0xad, 0x7c, 0xa5, - 0xdd, 0xc1, 0x6e, 0x18, 0x0a, 0x5d, 0xdd, 0xdd, 0xb7, 0x77, 0x77, 0x77, 0x77, 0xbd, 0x44, 0x65, - 0xc3, 0x01, 0x12, 0x2a, 0xef, 0x36, 0xea, 0xe4, 0xbc, 0x18, 0x46, 0x62, 0x83, 0xb8, 0x31, 0xd5, - 0x98, 0x78, 0xf6, 0xe5, 0xa5, 0x27, 0x3c, 0x1c, 0x3c, 0x1e, 0x7b, 0x85, 0x8e, 0x17, 0x70, 0x6a, - 0x83, 0xf3, 0xe7, 0x6d, 0xbf, 0xfd, 0x4b, 0x0d, 0x32, 0xf2, 0xd6, 0x29, 0x88, 0xff, 0x2d, 0xdc, - 0x56, 0xe0, 0xaf, 0x08, 0x88, 0x2b, 0xdf, 0x79, 0x7f, 0xbb, 0xbf, 0x2f, 0x31, 0x22, 0x7c, 0xdc, - 0x9c, 0x2b, 0x82, 0x80, 0x88, 0xec, 0x98, 0x25, 0xfb, 0x30, 0xbf, 0x1d, 0x3f, 0x2c, 0x6f, 0x89, - 0x8c, 0x83, 0xb7, 0x2c, 0x32, 0xb2, 0x58, 0x72, 0xe2, 0xe4, 0xf1, 0x4c, 0x5c, 0x53, 0x14, 0xd9, - 0xc4, 0x1e, 0xcf, 0x0b, 0xe0, 0x06, 0x33, 0x1c, 0xc8, 0x65, 0x57, 0x77, 0xbd, 0xd7, 0xdc, 0x2d, - 0xc5, 0x66, 0x3b, 0x86, 0x20, 0xaa, 0x29, 0xc9, 0x3f, 0xaa, 0xd6, 0xb7, 0xe1, 0x08, 0xeb, 0x55, - 0x56, 0xab, 0x55, 0x55, 0xe2, 0x1d, 0x3a, 0xaf, 0x10, 0xbe, 0x82, 0xf8, 0x28, 0x05, 0x23, 0xfa, - 0xae, 0x5b, 0x8c, 0xd2, 0xec, 0x4b, 0x0c, 0x4c, 0x21, 0x3c, 0x7d, 0xeb, 0xd6, 0xcd, 0xd7, 0x13, - 0xf8, 0x90, 0x2c, 0x82, 0xbb, 0x69, 0xba, 0x93, 0xb9, 0x87, 0x78, 0xee, 0xe2, 0x07, 0xf7, 0xc1, - 0x67, 0x2f, 0xbd, 0xde, 0xef, 0xd2, 0x62, 0x44, 0x62, 0xfa, 0xcf, 0x8d, 0x61, 0x01, 0x18, 0xa6, - 0x75, 0x04, 0xfc, 0x97, 0xdc, 0xd8, 0x80, 0x58, 0x60, 0xb2, 0xa7, 0x3b, 0x8a, 0xcd, 0xd4, 0x2a, - 0xac, 0xad, 0x7d, 0xe2, 0x49, 0x6b, 0x8b, 0xe1, 0x98, 0x52, 0xca, 0xa9, 0xcb, 0xc4, 0xf9, 0xfd, - 0x5a, 0xbd, 0x38, 0x87, 0x1c, 0x71, 0x01, 0x08, 0xba, 0xb9, 0x8e, 0x3b, 0xb7, 0x54, 0x89, 0x9c, - 0x40, 0x9b, 0xbb, 0x4e, 0xad, 0x74, 0x2a, 0x24, 0x84, 0x70, 0x84, 0xa2, 0x1e, 0xfe, 0x23, 0x84, - 0x04, 0x2f, 0x54, 0x10, 0x60, 0x9a, 0x24, 0x44, 0xa1, 0x77, 0x00, 0x57, 0xdd, 0xe2, 0xbe, 0x1a, - 0x3f, 0xfc, 0xf3, 0xfe, 0xda, 0x8e, 0xdf, 0xf4, 0xd9, 0xa3, 0x17, 0xd4, 0x91, 0x91, 0xd9, 0xb8, - 0x20, 0x8b, 0xa5, 0xbb, 0xc5, 0x6f, 0x88, 0x8b, 0xe2, 0x1c, 0x76, 0x3a, 0xf8, 0x67, 0xc2, 0x21, - 0x1a, 0xa6, 0x6f, 0xee, 0xf2, 0xed, 0xbf, 0x0a, 0x5e, 0xd4, 0xd4, 0x9b, 0xa9, 0x36, 0xa6, 0xea, - 0xca, 0x12, 0x83, 0x48, 0x96, 0xef, 0xc4, 0x04, 0x09, 0xbb, 0xde, 0x24, 0x94, 0x65, 0xb8, 0xc7, - 0xb1, 0x11, 0x13, 0x61, 0xb1, 0x99, 0x12, 0xbf, 0x88, 0xf0, 0x50, 0x08, 0x18, 0xd1, 0x03, 0x0b, - 0xc1, 0x37, 0x05, 0x23, 0x2e, 0xee, 0xf7, 0xbd, 0xf5, 0x5c, 0x5f, 0x77, 0xab, 0x75, 0x06, 0x01, - 0x10, 0x84, 0x51, 0x97, 0x4d, 0xba, 0x67, 0xe2, 0x1c, 0x7f, 0x8a, 0xdc, 0x4b, 0x4c, 0x10, 0x03, - 0x80, 0xa4, 0x56, 0x28, 0xc5, 0x06, 0xe2, 0xb1, 0x5b, 0x4d, 0x0a, 0x0c, 0x6d, 0x5f, 0x95, 0x12, - 0xd4, 0xb3, 0xd4, 0x7c, 0x63, 0xc2, 0x20, 0xe0, 0x29, 0x2d, 0x8a, 0xc7, 0x54, 0xb6, 0x66, 0x0d, - 0xe4, 0xbc, 0xbc, 0xda, 0x5d, 0xdd, 0xce, 0x0f, 0x48, 0xe0, 0xc2, 0x4f, 0xc4, 0x06, 0x44, 0xd6, - 0x4f, 0x26, 0x2b, 0x8f, 0x0b, 0xf8, 0x90, 0x55, 0x73, 0xff, 0x97, 0xae, 0xab, 0x97, 0x08, 0xc6, - 0x71, 0x5b, 0x58, 0x2b, 0x32, 0xfe, 0x95, 0xf7, 0x14, 0x76, 0xd4, 0x36, 0xe4, 0x53, 0x8e, 0x3c, - 0x22, 0x25, 0xe9, 0xbf, 0x08, 0x89, 0x11, 0x4d, 0xd6, 0xee, 0x5f, 0x16, 0x26, 0x2e, 0x42, 0x0a, - 0xe2, 0x0c, 0x06, 0xae, 0xfc, 0x21, 0x08, 0xf6, 0x6e, 0xa3, 0x2a, 0x1f, 0x77, 0xfc, 0x99, 0x79, - 0x70, 0xb6, 0xb1, 0x32, 0xe2, 0x0d, 0x79, 0x58, 0x65, 0xc4, 0x02, 0xcc, 0x9e, 0x48, 0x1b, 0x05, - 0xf9, 0xb0, 0xfe, 0x7d, 0xe2, 0x0b, 0x59, 0x30, 0xb8, 0x08, 0x39, 0x2f, 0x7b, 0x83, 0x91, 0x23, - 0x2a, 0x77, 0x30, 0xec, 0xd4, 0x1d, 0xa0, 0x0f, 0xd5, 0x13, 0x02, 0xb5, 0xa9, 0x30, 0x91, 0xee, - 0x9c, 0x2e, 0xe0, 0x15, 0xed, 0x5a, 0x8f, 0x3a, 0x8d, 0xe5, 0x39, 0xb9, 0x7c, 0x72, 0xda, 0x65, - 0xde, 0x36, 0x61, 0x9f, 0xb8, 0x46, 0x32, 0x58, 0xdd, 0xa3, 0xc2, 0x23, 0x82, 0xb1, 0xef, 0x04, - 0x39, 0xf1, 0x2e, 0x6f, 0xf0, 0x57, 0x3b, 0x9a, 0xd4, 0xb9, 0x5b, 0xbd, 0x5e, 0xdc, 0x4c, 0x29, - 0xaa, 0x33, 0x51, 0x23, 0x6c, 0xa5, 0x00, 0x0a, 0xe2, 0xcd, 0x66, 0x4d, 0xb0, 0xb9, 0x56, 0x7c, - 0x29, 0x1f, 0x62, 0xd5, 0x55, 0x8b, 0x93, 0x05, 0x5d, 0x87, 0x07, 0x0b, 0x3a, 0xdf, 0xa7, 0xe4, - 0xa4, 0x5c, 0x3e, 0x7c, 0x48, 0x99, 0xb4, 0x2e, 0xb5, 0xf8, 0x81, 0xc1, 0x5f, 0x12, 0xef, 0xba, - 0xe1, 0xad, 0xe5, 0x44, 0xee, 0xa7, 0xff, 0xe2, 0xe9, 0x97, 0x62, 0xb8, 0x86, 0x0e, 0xb7, 0x4f, - 0x19, 0xe2, 0xb7, 0xbe, 0xb7, 0x55, 0x13, 0xe5, 0x87, 0xe1, 0x49, 0xba, 0xc5, 0x6e, 0x49, 0xd3, - 0x18, 0xfd, 0x85, 0x17, 0x17, 0x12, 0x68, 0x58, 0x75, 0x05, 0xf4, 0x11, 0xfb, 0x3e, 0x5f, 0x2e, - 0x2e, 0x24, 0x40, 0x9a, 0x69, 0x6f, 0x78, 0x6b, 0x88, 0xd6, 0xab, 0x59, 0xf8, 0x28, 0xf1, 0x3e, - 0x6c, 0x71, 0x6c, 0x35, 0xeb, 0xdc, 0x40, 0x40, 0x29, 0x06, 0x10, 0xf2, 0x2b, 0xf2, 0x0b, 0xbb, - 0x57, 0xdc, 0x24, 0x72, 0x7e, 0x5f, 0xe5, 0x6a, 0xa2, 0xe2, 0x66, 0x73, 0x84, 0x61, 0x4e, 0xee, - 0xee, 0xee, 0x6c, 0xcb, 0xc5, 0xde, 0x38, 0xb7, 0x19, 0x8c, 0x50, 0x21, 0x19, 0xc4, 0xd6, 0x4a, - 0xb0, 0x40, 0x05, 0x00, 0x57, 0x75, 0x15, 0xbb, 0xef, 0x8a, 0xc5, 0x18, 0xec, 0x7e, 0x1a, 0xc0, - 0x02, 0xfa, 0x39, 0x1b, 0x59, 0x88, 0xac, 0xfa, 0xfb, 0x63, 0x4a, 0x5e, 0xe9, 0xf9, 0x7d, 0xcb, - 0xd3, 0x7c, 0x15, 0xeb, 0x48, 0xf6, 0x1b, 0xb5, 0xb9, 0xe6, 0xdb, 0xcb, 0xc5, 0x78, 0x9b, 0x15, - 0x49, 0x7c, 0x56, 0x9d, 0x57, 0x5c, 0x48, 0x87, 0x56, 0xbd, 0xbf, 0x86, 0xa6, 0x60, 0x4f, 0x8e, - 0x6d, 0x98, 0xc7, 0xd3, 0x2d, 0xfe, 0x3e, 0xb8, 0x7d, 0xdf, 0x3e, 0x7c, 0x15, 0x6d, 0xb5, 0x4e, - 0x9b, 0x74, 0xaf, 0x88, 0x71, 0x22, 0x26, 0x87, 0xf1, 0x5b, 0xf1, 0xbd, 0x56, 0x15, 0xaf, 0x26, - 0x1d, 0xc8, 0x79, 0xf9, 0x64, 0x83, 0xa2, 0x31, 0x1b, 0x1f, 0x77, 0x6d, 0xf8, 0x90, 0xa4, 0xb3, - 0x12, 0x00, 0x58, 0x11, 0x60, 0xe0, 0xe1, 0xc1, 0xe9, 0x1d, 0xf9, 0x31, 0x99, 0xe5, 0x7e, 0x40, - 0xe2, 0x06, 0x6f, 0x78, 0x14, 0x79, 0x52, 0x66, 0x61, 0x71, 0x8c, 0x1e, 0xf1, 0xcb, 0x65, 0xb1, - 0x47, 0x89, 0x10, 0x33, 0x51, 0xb3, 0x39, 0x88, 0x87, 0xb4, 0x4a, 0xd2, 0x4f, 0xff, 0x66, 0xf5, - 0xf0, 0x47, 0x1b, 0x5c, 0x9c, 0x07, 0x1b, 0x80, 0xf4, 0x4f, 0xe3, 0xfb, 0xbe, 0xec, 0xe3, 0x38, - 0x74, 0x2a, 0x98, 0x40, 0x40, 0x52, 0x02, 0xa2, 0xf2, 0xcd, 0xa6, 0x1b, 0x48, 0x22, 0x3b, 0x73, - 0xca, 0xfb, 0x96, 0x35, 0x52, 0xa8, 0x17, 0xfb, 0xc2, 0x01, 0x4b, 0xbb, 0x8a, 0xde, 0xf9, 0x8b, - 0x83, 0xa5, 0x8f, 0x67, 0x7e, 0xe0, 0xe0, 0x14, 0x02, 0xa8, 0xbf, 0xb7, 0x5b, 0x1e, 0xa3, 0x8c, - 0x7f, 0x08, 0x01, 0x64, 0x7d, 0xef, 0x4c, 0x57, 0x7b, 0xde, 0x17, 0x24, 0x00, 0xc4, 0x9b, 0x53, - 0xd9, 0xe7, 0xec, 0xbf, 0xb2, 0x91, 0xe7, 0x82, 0x80, 0xa5, 0xc5, 0x7b, 0xbb, 0xbf, 0x55, 0x55, - 0x50, 0x6e, 0xf0, 0x57, 0x74, 0x0e, 0xee, 0x10, 0x0c, 0x04, 0x62, 0x9a, 0xaa, 0xac, 0x54, 0xf2, - 0xc1, 0x89, 0x4e, 0x8c, 0x7b, 0xc2, 0xe7, 0x8b, 0xe0, 0xe4, 0x78, 0x0e, 0x43, 0xcc, 0x1c, 0x87, - 0x80, 0xe4, 0x79, 0xe0, 0xa3, 0x83, 0xcf, 0x01, 0xc9, 0xe6, 0x0e, 0x4f, 0x01, 0xe7, 0x91, 0xbc, - 0x32, 0x18, 0xe5, 0xc1, 0x1c, 0x0b, 0x85, 0x4b, 0xb1, 0xf6, 0x37, 0x81, 0xc3, 0x9c, 0x0c, 0x0f, - 0x6c, 0x1f, 0x74, 0xdb, 0x6c, 0x1d, 0xfd, 0x70, 0xe6, 0x00, 0xae, 0x69, 0x18, 0xc3, 0xef, 0xa6, - 0x99, 0x74, 0xfe, 0x3b, 0xcf, 0xdb, 0xbe, 0x14, 0xe3, 0x09, 0x2d, 0x0b, 0x60, 0xfb, 0xa3, 0x1d, - 0xfb, 0x62, 0xae, 0x0f, 0xbf, 0x12, 0x09, 0xa1, 0x60, 0x2a, 0xce, 0x48, 0x15, 0xe6, 0x21, 0xc9, - 0xd4, 0xf1, 0x2a, 0xfe, 0x25, 0x7f, 0xf0, 0x51, 0xc6, 0x72, 0xb6, 0xf5, 0x8b, 0xc4, 0x56, 0x20, - 0x27, 0x55, 0xf5, 0x6f, 0x89, 0x13, 0xb3, 0x35, 0x8c, 0x2f, 0xe2, 0x2b, 0xbb, 0x45, 0xbf, 0x89, - 0x1f, 0x8f, 0x1c, 0x3b, 0x1d, 0xa8, 0x88, 0xf8, 0xec, 0x47, 0xd2, 0xbb, 0xcb, 0xbe, 0x14, 0xb8, - 0xac, 0x74, 0xb0, 0x6b, 0x2e, 0x3f, 0x92, 0xda, 0xb2, 0x83, 0xcb, 0x24, 0xe8, 0x60, 0x22, 0xb2, - 0xe7, 0xf2, 0x7e, 0x09, 0xaa, 0xe7, 0xc1, 0x34, 0xad, 0xab, 0xfa, 0x2f, 0x5c, 0xdd, 0xfd, 0x0d, - 0x72, 0xde, 0xee, 0x4e, 0xee, 0xf7, 0xf1, 0x17, 0x77, 0xed, 0x36, 0xf0, 0xc0, 0x90, 0x57, 0x07, - 0x11, 0xf9, 0x3d, 0xfe, 0x21, 0xc1, 0x0e, 0x6e, 0x93, 0x1c, 0x22, 0x08, 0x41, 0x67, 0x8a, 0xc1, - 0xdb, 0x01, 0x80, 0xef, 0x14, 0x42, 0x51, 0xe0, 0x05, 0x83, 0xb6, 0x2f, 0xc8, 0x78, 0x0b, 0x9d, - 0xfa, 0x5e, 0x24, 0x1c, 0x02, 0xcb, 0x54, 0x8d, 0x8c, 0xef, 0x18, 0x80, 0x70, 0xa4, 0x24, 0xe5, - 0x49, 0x9c, 0x83, 0xf9, 0x72, 0xc2, 0x78, 0x02, 0xa7, 0x91, 0xa6, 0xfb, 0x59, 0x75, 0xbf, 0x8d, - 0x3d, 0x4b, 0xf7, 0x87, 0x14, 0x00, 0xea, 0xcf, 0x02, 0x4c, 0xe1, 0xc6, 0x3a, 0x97, 0x83, 0x4e, - 0xb1, 0x7f, 0xf9, 0x8d, 0xbe, 0x9f, 0x86, 0x00, 0x90, 0x14, 0xbe, 0xdc, 0x88, 0xb9, 0x71, 0x17, - 0x58, 0xa3, 0x14, 0x6e, 0x2b, 0x7b, 0x8a, 0xe2, 0xf0, 0x24, 0x02, 0x2d, 0xdd, 0xe3, 0x98, 0x63, - 0x14, 0x05, 0x6b, 0x88, 0xbf, 0xff, 0xdd, 0xc1, 0x08, 0x0c, 0x01, 0xd1, 0x46, 0x5b, 0x7c, 0x4c, - 0xcd, 0xef, 0xc1, 0x40, 0x08, 0x00, 0x55, 0xc1, 0xf6, 0x6c, 0xc2, 0xbe, 0x8b, 0xd5, 0x45, 0xdf, - 0x82, 0x80, 0x70, 0x1d, 0xa7, 0x56, 0xcf, 0xfd, 0x44, 0x1c, 0x10, 0x73, 0x85, 0x06, 0xc6, 0x35, - 0x92, 0x98, 0xc2, 0xba, 0x65, 0xdf, 0xf8, 0x60, 0x41, 0x75, 0xae, 0x20, 0x47, 0xc4, 0x5e, 0xf7, - 0x12, 0xe7, 0xe7, 0xbf, 0xf1, 0x9e, 0xde, 0x20, 0x77, 0x56, 0xa6, 0xf3, 0x75, 0x54, 0xeb, 0x8b, - 0x9b, 0x0d, 0x8a, 0x5e, 0xd1, 0x3c, 0x9d, 0x71, 0xf4, 0x37, 0x73, 0x64, 0x97, 0xa5, 0x0e, 0xc4, - 0xfa, 0x8a, 0xa5, 0xc4, 0x5f, 0xbb, 0x61, 0xae, 0xee, 0xff, 0x96, 0xb5, 0xa8, 0x8d, 0x77, 0x7b, - 0xf1, 0x21, 0x91, 0x95, 0x76, 0x55, 0xd9, 0xca, 0x8d, 0x66, 0xff, 0x3f, 0x55, 0xf0, 0x4f, 0x26, - 0x47, 0xcd, 0x18, 0x71, 0x51, 0xf8, 0x60, 0x05, 0x00, 0x52, 0x48, 0x0e, 0xd8, 0x36, 0xa7, 0x87, - 0x8e, 0xd8, 0xda, 0x12, 0x05, 0x72, 0xc0, 0x6a, 0xd4, 0x5e, 0x7c, 0x78, 0x0f, 0x88, 0x63, 0xa3, - 0xb8, 0x68, 0x90, 0x28, 0xba, 0xf7, 0x17, 0xf7, 0xbe, 0xdd, 0x3f, 0xa6, 0xe1, 0x10, 0x87, 0x02, - 0xc0, 0x38, 0xf8, 0xad, 0xef, 0xc5, 0xf8, 0x1c, 0x41, 0x27, 0x55, 0x7e, 0x0a, 0x01, 0x87, 0x82, - 0x00, 0x96, 0x34, 0xb8, 0xaa, 0xab, 0xc0, 0xc0, 0x14, 0xe9, 0xc1, 0xdb, 0xe5, 0xb1, 0x43, 0x14, - 0x32, 0x5a, 0x9c, 0x1c, 0xcf, 0x4e, 0x21, 0xc1, 0x0f, 0x38, 0x00, 0x72, 0x8b, 0xf8, 0x67, 0x5c, - 0x11, 0x4f, 0x85, 0x8d, 0x06, 0x8b, 0x8c, 0x44, 0xb9, 0xfe, 0xf8, 0x2b, 0xd3, 0xbc, 0xf9, 0xb7, - 0x37, 0xbf, 0xc5, 0x74, 0xcb, 0x49, 0x7c, 0xbf, 0x88, 0x19, 0xc6, 0x7d, 0xd5, 0x2d, 0xdf, 0xdc, - 0xfb, 0xad, 0x7c, 0x67, 0x15, 0xac, 0xda, 0xb9, 0x12, 0xd6, 0xe6, 0x1f, 0xcd, 0xff, 0xc1, 0x2c, - 0xff, 0xad, 0x55, 0xdc, 0x4d, 0xc2, 0xda, 0xb9, 0x86, 0x78, 0x9e, 0xee, 0xef, 0x93, 0x98, 0xef, - 0x7f, 0x84, 0xcd, 0x7b, 0xde, 0xeb, 0x12, 0x0a, 0x62, 0x0f, 0x51, 0x43, 0x17, 0x0b, 0x1b, 0x85, - 0xf2, 0x20, 0xc0, 0x47, 0x27, 0xee, 0x0c, 0x41, 0x88, 0xae, 0x1c, 0x43, 0x93, 0xe7, 0x89, 0x08, - 0x05, 0x23, 0xfe, 0x78, 0xf6, 0x72, 0x56, 0x84, 0xe7, 0x07, 0x70, 0xbe, 0x4e, 0xf9, 0x55, 0x8b, - 0xc4, 0x72, 0xb8, 0x44, 0x30, 0x0a, 0xe5, 0x98, 0x83, 0xc5, 0x36, 0x72, 0x7e, 0x31, 0x2f, 0x73, - 0x7a, 0x8b, 0xc4, 0xb8, 0x3b, 0x70, 0x24, 0x01, 0x23, 0x86, 0x7c, 0x20, 0x0a, 0x01, 0x61, 0x62, - 0x39, 0xbe, 0x2f, 0x8b, 0xab, 0x9c, 0x40, 0x30, 0x04, 0x75, 0xae, 0xb8, 0x28, 0x02, 0x03, 0xaa, - 0xf8, 0x60, 0x0b, 0x01, 0x02, 0x2d, 0x6b, 0xae, 0xef, 0x84, 0x21, 0x48, 0xac, 0xfd, 0xae, 0x45, - 0xc8, 0x7d, 0x1c, 0x03, 0xf8, 0xba, 0x8a, 0x64, 0xf0, 0xe8, 0x15, 0xb7, 0x4e, 0x06, 0x34, 0x3e, - 0x55, 0x0e, 0x60, 0x12, 0x87, 0x25, 0x86, 0xbd, 0xeb, 0xee, 0x9a, 0x76, 0xd3, 0x4f, 0x6c, 0xf7, - 0x4f, 0x74, 0x76, 0x59, 0x33, 0x2e, 0xbc, 0x3a, 0xe3, 0x11, 0xd3, 0x4f, 0x6d, 0xbf, 0x0c, 0x51, - 0x11, 0xe1, 0xe8, 0x09, 0x43, 0x94, 0xd5, 0x22, 0xe0, 0xf0, 0x1e, 0x1e, 0x03, 0xca, 0x22, 0x09, - 0x2f, 0xc5, 0x5b, 0x7e, 0x0a, 0x29, 0x0e, 0x78, 0xb0, 0x67, 0x03, 0x9c, 0x50, 0x18, 0x91, 0xe2, - 0x09, 0x21, 0x04, 0x97, 0x93, 0xc7, 0x73, 0x7c, 0x56, 0x38, 0xac, 0xdd, 0x27, 0x6e, 0x7e, 0x23, - 0x4a, 0xa7, 0xdc, 0x1e, 0xfb, 0x45, 0x7e, 0x31, 0x31, 0x99, 0xcf, 0x81, 0xdb, 0xa2, 0xae, 0x99, - 0x23, 0x72, 0x8c, 0x70, 0xc4, 0xf8, 0x81, 0x02, 0xfb, 0xbe, 0x5a, 0x78, 0x82, 0x49, 0x17, 0xf1, - 0x30, 0x85, 0x37, 0x4e, 0x0f, 0xfc, 0x93, 0x36, 0x6a, 0xd7, 0x96, 0xaa, 0xe9, 0x05, 0xf9, 0x6b, - 0x5f, 0x92, 0xf7, 0x6c, 0xbc, 0x5e, 0xef, 0x7d, 0xf1, 0x01, 0x8e, 0x11, 0x07, 0x26, 0xad, 0x78, - 0x30, 0x02, 0x08, 0x52, 0xb1, 0xb5, 0x99, 0x98, 0xa8, 0xeb, 0xf2, 0x0e, 0xbf, 0x8a, 0xe2, 0xb0, - 0x75, 0x7b, 0xe1, 0xc7, 0x11, 0x32, 0xa7, 0x57, 0x4e, 0x9a, 0x69, 0xa7, 0xb0, 0x98, 0x4d, 0xb6, - 0x73, 0x2f, 0x32, 0x74, 0x45, 0xef, 0xf0, 0x40, 0x18, 0x13, 0x27, 0xee, 0xbb, 0x6f, 0x83, 0x0f, - 0x02, 0xc8, 0x23, 0xe2, 0x78, 0xd7, 0xb0, 0x9e, 0x02, 0x1a, 0xba, 0x97, 0x7f, 0xfe, 0xff, 0x17, - 0xc5, 0x6e, 0xee, 0xf9, 0xd4, 0x0f, 0xd2, 0x1e, 0x0a, 0x40, 0xb0, 0x14, 0xa9, 0x7a, 0x45, 0xc5, - 0x29, 0xea, 0x1d, 0x98, 0x38, 0x00, 0x70, 0x28, 0xa9, 0xc0, 0x38, 0xd9, 0x15, 0x1a, 0xa4, 0xfd, - 0xe8, 0x76, 0x0d, 0x56, 0xb7, 0x32, 0x65, 0x63, 0x0e, 0x28, 0x0a, 0x0b, 0x34, 0x45, 0x81, 0x4a, - 0x69, 0x8b, 0x4c, 0xb7, 0xc7, 0x02, 0x21, 0x8a, 0x6c, 0xf1, 0xa7, 0x58, 0x3b, 0xf4, 0xf2, 0xd6, - 0x0e, 0xfc, 0x41, 0xd0, 0xe4, 0xb6, 0xdb, 0x76, 0x9a, 0x4d, 0x38, 0x74, 0x90, 0x05, 0x29, 0x20, - 0xd8, 0xc4, 0x10, 0x36, 0x35, 0x7f, 0xec, 0x1c, 0x97, 0x67, 0x51, 0xd5, 0xee, 0xde, 0xb0, 0x71, - 0x7c, 0x77, 0xef, 0xa1, 0x62, 0xc1, 0xc6, 0xfa, 0x84, 0x82, 0xde, 0xb3, 0x4c, 0x1f, 0x71, 0xf7, - 0xfc, 0x32, 0x04, 0x10, 0xa4, 0x48, 0xb0, 0x84, 0x00, 0x54, 0x12, 0x02, 0xc0, 0xaa, 0x0d, 0x4b, - 0x2c, 0x3a, 0xc2, 0x95, 0x1d, 0x3c, 0x2c, 0x65, 0xea, 0x76, 0x2f, 0x50, 0xf0, 0x51, 0x20, 0x97, - 0xb9, 0x3f, 0xf8, 0x27, 0x9f, 0xf8, 0xfe, 0x31, 0xd7, 0xc1, 0x27, 0x56, 0x9c, 0xbe, 0x49, 0x33, - 0xfc, 0x10, 0xc9, 0x88, 0xfe, 0xf1, 0x24, 0xaa, 0x5f, 0x88, 0x93, 0x3a, 0xad, 0x2f, 0x3d, 0x4f, - 0xad, 0xff, 0xe1, 0x3b, 0xbe, 0xb1, 0x4e, 0x14, 0xe4, 0xaa, 0xaa, 0x9f, 0x96, 0xf7, 0x75, 0xcb, - 0xdd, 0xd4, 0x14, 0xdd, 0xef, 0xc1, 0x88, 0x91, 0x95, 0x57, 0x8b, 0x92, 0x85, 0x54, 0xbc, 0x57, - 0x69, 0xeb, 0x5c, 0x08, 0x00, 0x24, 0x01, 0x5f, 0xbb, 0xe2, 0xe2, 0x3b, 0x72, 0xc7, 0x7c, 0x33, - 0x84, 0x00, 0x91, 0x65, 0x3d, 0xb6, 0xfd, 0x3f, 0xc3, 0x11, 0x0e, 0x12, 0x2e, 0xa6, 0xc2, 0x00, - 0x68, 0x35, 0xdd, 0xf8, 0x98, 0x9a, 0xd7, 0xbb, 0xcf, 0x84, 0xdf, 0x7e, 0xc3, 0xd8, 0x00, 0xa4, - 0x38, 0x55, 0xce, 0x60, 0xfc, 0xe3, 0x5f, 0x3c, 0x9c, 0xd4, 0x0a, 0x1c, 0x0d, 0x19, 0x2e, 0x36, - 0xdb, 0xb9, 0x41, 0xb1, 0x7d, 0x48, 0x5c, 0xbb, 0xd8, 0x38, 0x29, 0x02, 0x8b, 0x83, 0xaf, 0x9f, - 0xc7, 0x06, 0xd7, 0x0e, 0x77, 0x88, 0x01, 0x12, 0x14, 0x9e, 0x70, 0xcc, 0x2c, 0xe1, 0xe0, 0x58, - 0x3c, 0xb5, 0x80, 0x80, 0xab, 0x1d, 0x80, 0xa8, 0xd1, 0x18, 0xfd, 0xbe, 0x9c, 0x07, 0x96, 0x59, - 0xc1, 0xee, 0xa8, 0xbb, 0xa8, 0x50, 0x4a, 0x87, 0xe0, 0x50, 0x4a, 0x82, 0x4a, 0x0e, 0x27, 0x87, - 0x5c, 0x03, 0x38, 0xed, 0x4f, 0xc2, 0x35, 0x7f, 0x56, 0xff, 0x5b, 0x3d, 0x71, 0xed, 0x97, 0xd7, - 0xfc, 0x1a, 0x01, 0xa1, 0x83, 0x4d, 0x3f, 0xe1, 0xe5, 0x01, 0x35, 0xda, 0x27, 0x5d, 0x7b, 0x7c, - 0x77, 0xaa, 0x6b, 0x5b, 0xbd, 0xf9, 0x6b, 0xaf, 0xf8, 0x65, 0x40, 0x40, 0xa8, 0xe5, 0xf7, 0x69, - 0xff, 0xbd, 0xbf, 0xaf, 0x92, 0xab, 0x88, 0xc4, 0x05, 0x24, 0x48, 0xb1, 0x3e, 0x2e, 0x65, 0x05, - 0x9c, 0xc5, 0xf1, 0x1f, 0x14, 0xf8, 0xd0, 0xef, 0x2e, 0xef, 0x50, 0x40, 0x0e, 0x3c, 0x40, 0xcc, - 0x53, 0x9b, 0xaa, 0xb3, 0x26, 0xb3, 0x7c, 0xb8, 0x99, 0x6f, 0x02, 0x00, 0x18, 0x02, 0x92, 0x79, - 0x1e, 0x5f, 0x0a, 0x8c, 0x1a, 0x47, 0x8e, 0x67, 0xc5, 0x0b, 0x93, 0x05, 0x73, 0x31, 0xe5, 0x66, - 0x70, 0xf6, 0x10, 0x0c, 0xb3, 0x3f, 0x7e, 0x8d, 0x32, 0x56, 0xb4, 0xd3, 0x15, 0x6d, 0xb6, 0x6a, - 0xe5, 0xd9, 0xb7, 0xcf, 0xf4, 0xd3, 0xb7, 0x81, 0x40, 0x22, 0x0b, 0x3a, 0xa8, 0x52, 0xb9, 0x63, - 0x74, 0x82, 0xb5, 0x15, 0x9e, 0xfc, 0xb8, 0x44, 0x1c, 0x8c, 0xbb, 0xdd, 0xee, 0xf1, 0x4b, 0x7b, - 0xcd, 0x90, 0xab, 0x80, 0x46, 0xec, 0xa8, 0x09, 0xef, 0xff, 0xfc, 0x30, 0x02, 0x80, 0x16, 0x54, - 0x48, 0x7a, 0x45, 0xd2, 0xd4, 0x53, 0x10, 0x3c, 0xf1, 0xc3, 0xc0, 0xe1, 0xc7, 0xeb, 0x0e, 0x60, - 0x08, 0xcc, 0xdc, 0x65, 0x50, 0x27, 0x5d, 0x34, 0xe3, 0x1f, 0x72, 0x79, 0xe9, 0xa7, 0x3e, 0xe4, - 0x63, 0x45, 0xe9, 0xa7, 0xb7, 0xe2, 0x61, 0x4e, 0xaa, 0xa9, 0x23, 0xba, 0x47, 0xf1, 0x45, 0x7d, - 0x5a, 0x97, 0x04, 0x20, 0x69, 0x0a, 0x4b, 0x62, 0xb7, 0xc4, 0x9c, 0x83, 0x10, 0x95, 0x38, 0x9e, - 0xc9, 0x93, 0x8d, 0xb1, 0x17, 0xc0, 0xb0, 0x0a, 0x01, 0x54, 0x40, 0xf1, 0x8e, 0x0d, 0x45, 0xf5, - 0xb8, 0x1a, 0x3f, 0xed, 0xb6, 0x81, 0xa8, 0x96, 0x1f, 0xa5, 0x17, 0x80, 0x3b, 0xee, 0x0c, 0x04, - 0x29, 0x8b, 0x4e, 0x3d, 0x97, 0x8b, 0xd3, 0xac, 0xaf, 0x6e, 0x06, 0x1d, 0xe6, 0xbd, 0xe2, 0x31, - 0x3c, 0x40, 0x44, 0x92, 0xf2, 0xdf, 0xe0, 0xab, 0x6d, 0xe0, 0xe9, 0x60, 0x1d, 0xa5, 0x0e, 0x84, - 0x67, 0x80, 0x78, 0xa0, 0x1c, 0xbb, 0xe3, 0x83, 0x00, 0x34, 0x04, 0x6a, 0x2f, 0x49, 0x78, 0xf7, - 0x38, 0x97, 0x26, 0x71, 0x00, 0x84, 0x7d, 0x2b, 0xcb, 0x27, 0xe2, 0xce, 0xaf, 0xe3, 0x35, 0x34, - 0x2f, 0xd5, 0x71, 0x5b, 0xd6, 0xb8, 0x42, 0x32, 0xee, 0xa6, 0xc7, 0xca, 0xa4, 0xcc, 0xbe, 0xad, - 0x8b, 0xf0, 0x88, 0xcd, 0xc9, 0xb7, 0x7a, 0xad, 0xab, 0xc5, 0xc4, 0x6b, 0x1a, 0x31, 0xe0, 0xa6, - 0xb1, 0x1c, 0x58, 0xf2, 0xa9, 0x67, 0x5d, 0xdd, 0x7b, 0x81, 0x20, 0x1c, 0x8c, 0x9c, 0x01, 0xc1, - 0x40, 0xdb, 0x92, 0xbb, 0xe2, 0xeb, 0x2f, 0xbe, 0x04, 0x10, 0x42, 0x08, 0xeb, 0x55, 0xef, 0x89, - 0x9f, 0x1a, 0xad, 0x23, 0x64, 0x9b, 0xaf, 0x9f, 0x0a, 0x79, 0x73, 0x10, 0xe0, 0x64, 0x7e, 0x7b, - 0xfa, 0xdb, 0xe1, 0xe2, 0x02, 0x5d, 0xd4, 0x5c, 0x98, 0xb3, 0xe5, 0xe7, 0xf3, 0x72, 0xdd, 0xf0, - 0xa7, 0x25, 0xef, 0xf2, 0x6e, 0xee, 0x28, 0x56, 0x06, 0xb9, 0x91, 0xcc, 0x30, 0x24, 0xdb, 0xaf, - 0x82, 0x10, 0x9e, 0xad, 0x4b, 0x8f, 0x6b, 0x89, 0x05, 0x78, 0xb4, 0x89, 0xdc, 0xcc, 0x08, 0x1c, - 0x6e, 0x26, 0x58, 0xab, 0xcc, 0x3b, 0x85, 0xa3, 0xb8, 0x98, 0x46, 0xbc, 0x5c, 0x3e, 0x54, 0x97, - 0x1c, 0xa4, 0x5c, 0x5c, 0x5d, 0x70, 0x13, 0x01, 0x91, 0x27, 0x26, 0x4f, 0x5b, 0xbf, 0x8e, 0x21, - 0x33, 0x5e, 0xee, 0xab, 0xf0, 0x88, 0x2c, 0xb8, 0x8e, 0x3d, 0x6a, 0x2e, 0xaa, 0x6c, 0xe4, 0x5c, - 0xea, 0xe0, 0xe2, 0x14, 0x92, 0x00, 0x15, 0x3b, 0x87, 0x1c, 0xd2, 0x07, 0xac, 0x7b, 0x55, 0x17, - 0x57, 0x6d, 0xd7, 0xdf, 0x05, 0x10, 0x74, 0x58, 0x2e, 0x58, 0x01, 0x88, 0x03, 0xd6, 0x77, 0xaf, - 0x7c, 0xbc, 0x5e, 0x4e, 0x08, 0xb0, 0xef, 0xbf, 0x7d, 0x79, 0xd7, 0x10, 0x0a, 0xa8, 0x79, 0xd8, - 0xcb, 0x8d, 0xd6, 0xaf, 0xf0, 0x47, 0x13, 0xa7, 0xb0, 0x7c, 0xb7, 0x9f, 0xdf, 0x7b, 0xdc, 0x3f, - 0x12, 0x10, 0xe0, 0x49, 0x02, 0x0f, 0x12, 0x24, 0x99, 0x33, 0xe1, 0x11, 0xf6, 0x64, 0x3a, 0xde, - 0xba, 0xd5, 0x61, 0x9e, 0x0c, 0x42, 0x18, 0xa2, 0x43, 0xad, 0x3e, 0x05, 0x00, 0x28, 0x12, 0xa0, - 0x7e, 0x4b, 0xf1, 0x02, 0x41, 0x54, 0xb0, 0xce, 0x38, 0x23, 0x92, 0x59, 0x85, 0x8f, 0xba, 0xae, - 0x77, 0x1c, 0x22, 0x24, 0x17, 0x6b, 0x57, 0xee, 0xef, 0xe2, 0x02, 0x9a, 0xd5, 0xa3, 0x32, 0xb2, - 0xf1, 0x00, 0x0e, 0x05, 0x41, 0x51, 0xcf, 0x4a, 0xb6, 0x3c, 0xb8, 0x81, 0x01, 0x2d, 0x5e, 0xab, - 0x5f, 0x5e, 0x82, 0x68, 0x99, 0xb7, 0xba, 0xe5, 0xee, 0xaa, 0x08, 0x00, 0xa0, 0x52, 0xbb, 0xfc, - 0x10, 0x12, 0xa2, 0xf5, 0xc0, 0xb2, 0x0e, 0x5d, 0x6b, 0xc1, 0xc7, 0x15, 0x9f, 0x21, 0x67, 0x04, - 0x22, 0xaa, 0xbf, 0xff, 0xa7, 0xf1, 0x38, 0x10, 0xf5, 0xa2, 0xbf, 0x07, 0x00, 0xa1, 0xd5, 0x55, - 0x70, 0x80, 0x40, 0x4d, 0x57, 0xd5, 0x70, 0x43, 0x1e, 0x4a, 0xaa, 0xc4, 0xb9, 0xae, 0x21, 0xcc, - 0x1c, 0xc1, 0x66, 0x45, 0xd7, 0x2e, 0x0a, 0x32, 0xc7, 0xc5, 0x6f, 0x98, 0x61, 0x80, 0x88, 0x52, - 0x91, 0x28, 0xf6, 0x4c, 0x10, 0x07, 0x20, 0xd9, 0x87, 0xee, 0xc2, 0xab, 0x62, 0x4e, 0x05, 0x6a, - 0x8c, 0xf0, 0x0e, 0x1e, 0x1a, 0x23, 0x1f, 0x82, 0x8d, 0x45, 0x0d, 0x6a, 0xaa, 0x9e, 0xf9, 0xaa, - 0x6c, 0x52, 0xc0, 0xf8, 0x82, 0xf0, 0xb1, 0x5c, 0x13, 0x88, 0x94, 0x15, 0xd8, 0xa7, 0x90, 0x16, - 0xaa, 0xcc, 0x18, 0x83, 0x13, 0x75, 0x59, 0xf0, 0x42, 0x74, 0xae, 0xb8, 0x9c, 0x0c, 0xa6, 0x87, - 0x88, 0x2d, 0xee, 0xb4, 0xb1, 0x4e, 0x10, 0xeb, 0xa5, 0x15, 0x84, 0x8c, 0xe1, 0xe1, 0xa6, 0x60, - 0x23, 0xaf, 0x1c, 0x37, 0x1f, 0xdf, 0xef, 0xb6, 0x1c, 0x24, 0x00, 0x31, 0x30, 0x6a, 0x91, 0xe1, - 0x00, 0xfc, 0x71, 0xb6, 0xdb, 0x37, 0x6f, 0x5d, 0xeb, 0x10, 0xfd, 0xb3, 0x76, 0xdd, 0xc4, 0xe8, - 0xcd, 0x3d, 0x3f, 0xc1, 0x00, 0x44, 0x29, 0x5f, 0x99, 0x38, 0x15, 0x92, 0xcc, 0xb0, 0xd6, 0x64, - 0x14, 0xa9, 0xcf, 0x95, 0x38, 0x3e, 0x71, 0x2e, 0x2f, 0xde, 0x25, 0xcb, 0x0d, 0x4e, 0xe4, 0x4e, - 0x22, 0x4c, 0x49, 0xf1, 0x27, 0xf1, 0x20, 0xa6, 0x78, 0x07, 0x84, 0x70, 0x4a, 0x78, 0x06, 0x87, - 0x9a, 0xc5, 0xc7, 0xac, 0x51, 0x07, 0x0e, 0xfc, 0xf1, 0xf0, 0x4d, 0x86, 0x28, 0x43, 0x28, 0x7d, - 0x97, 0xc2, 0x20, 0x80, 0x95, 0x5d, 0x44, 0x84, 0x5d, 0x54, 0x99, 0xf1, 0x15, 0x84, 0x68, 0x3d, - 0x20, 0x01, 0xb8, 0x1f, 0x15, 0x50, 0x09, 0xcc, 0xbf, 0x17, 0x97, 0xa6, 0xdf, 0x1c, 0x97, 0x60, - 0xfb, 0xfa, 0x73, 0xed, 0x5f, 0xf0, 0xb9, 0x20, 0x17, 0xe5, 0xc5, 0x13, 0xf7, 0xfe, 0xa9, 0xaf, - 0xbd, 0xfe, 0x44, 0x31, 0xf9, 0x4a, 0xdc, 0x56, 0x90, 0x2d, 0xe0, 0x8a, 0xef, 0xbf, 0x0c, 0x89, - 0xe1, 0x10, 0x50, 0x3c, 0xbb, 0xba, 0xaf, 0x7b, 0x98, 0x33, 0x81, 0x16, 0xe6, 0x7a, 0x9f, 0xdf, - 0xfe, 0x58, 0xc4, 0x60, 0x11, 0x30, 0xe4, 0xcf, 0x37, 0x0c, 0x82, 0x91, 0x75, 0x5d, 0xdd, 0xc5, - 0x60, 0xaf, 0x11, 0xe1, 0x9f, 0x08, 0xf8, 0x66, 0x7c, 0x43, 0xbb, 0xe4, 0xe6, 0xd6, 0xa0, 0xdf, - 0x93, 0x7b, 0xf9, 0xaf, 0x78, 0x04, 0x8e, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x38, 0x1c, 0x30, - 0x52, 0x2f, 0x77, 0x7c, 0x4e, 0x24, 0x49, 0x5e, 0xfb, 0xdc, 0x15, 0xe2, 0x24, 0xef, 0xbb, 0x96, - 0x0a, 0x02, 0x2c, 0x8e, 0xfe, 0x0a, 0x23, 0x22, 0xb0, 0xb0, 0x2a, 0xef, 0xa0, 0xeb, 0xe4, 0xe5, - 0xbd, 0xb5, 0xaa, 0x6f, 0x36, 0xfe, 0x08, 0x04, 0x02, 0xac, 0x57, 0x12, 0xe3, 0xbd, 0xbb, 0x44, - 0xe2, 0x4e, 0x1f, 0xc8, 0xbe, 0x5e, 0x9b, 0xae, 0x5f, 0x2e, 0x02, 0xae, 0x42, 0xcb, 0xff, 0x36, - 0xf7, 0x2c, 0x21, 0x08, 0x92, 0xca, 0x0d, 0xa4, 0x0a, 0xb5, 0x93, 0x9a, 0x3d, 0x2c, 0x48, 0x91, - 0xd6, 0xd5, 0xfd, 0x5d, 0x13, 0x1a, 0xa4, 0x75, 0x96, 0xec, 0x66, 0x9f, 0x82, 0x6c, 0xaa, 0xaa, - 0xad, 0x7d, 0xf0, 0x4f, 0x14, 0x0c, 0xef, 0x12, 0x58, 0x93, 0x79, 0xac, 0xdc, 0x31, 0x36, 0xb5, - 0xc2, 0x17, 0xad, 0x71, 0x11, 0x12, 0x7a, 0xb2, 0x7a, 0xf8, 0x91, 0x77, 0x76, 0x9a, 0x15, 0xed, - 0x02, 0xf8, 0x80, 0xc8, 0xcd, 0x55, 0xb8, 0x8f, 0x4f, 0x51, 0x5e, 0x78, 0x5c, 0x4b, 0xfc, 0x55, - 0xba, 0x0d, 0xb3, 0x7e, 0xbe, 0x09, 0xb8, 0xe2, 0xe5, 0xe9, 0x7e, 0xf8, 0xa8, 0xba, 0x89, 0xf9, - 0x6d, 0x5d, 0x2e, 0x23, 0xc2, 0x15, 0x08, 0x08, 0x11, 0x4f, 0x3d, 0xbb, 0xfc, 0x20, 0x22, 0x0b, - 0x79, 0xb5, 0xaf, 0x82, 0xc9, 0xc1, 0x01, 0xb7, 0xb6, 0x2f, 0x57, 0x7b, 0xc7, 0x3e, 0x09, 0x2b, - 0x5b, 0xb8, 0x98, 0xfb, 0xbb, 0x57, 0xbd, 0x57, 0xf0, 0x8d, 0xad, 0xed, 0xbb, 0xaa, 0xcd, 0x4e, - 0x24, 0x21, 0x77, 0x7e, 0xab, 0x5a, 0x48, 0x44, 0xa1, 0xc4, 0x7e, 0x52, 0x5d, 0xc5, 0x6a, 0x10, - 0x96, 0x7f, 0x46, 0xb8, 0x28, 0xf0, 0x40, 0x23, 0x86, 0x30, 0x55, 0x89, 0x13, 0x0a, 0xab, 0x11, - 0xe3, 0xea, 0x12, 0x0f, 0xc4, 0x3c, 0xff, 0xc2, 0x7b, 0xdd, 0x3b, 0xfc, 0x23, 0xaa, 0x8b, 0x7b, - 0x93, 0x05, 0xd3, 0x2f, 0x55, 0xc1, 0x25, 0x32, 0xb2, 0x5e, 0x72, 0xcc, 0x5c, 0x4c, 0x66, 0x91, - 0x3b, 0xf0, 0x67, 0x4e, 0x95, 0x72, 0x61, 0xb8, 0x5f, 0x76, 0xc7, 0x43, 0xc2, 0x01, 0x0f, 0x82, - 0x5b, 0xbb, 0xf5, 0x5f, 0x1f, 0x35, 0xee, 0xf8, 0x98, 0x8b, 0x9f, 0xcf, 0x8d, 0x77, 0xc4, 0x49, - 0xbd, 0xfc, 0xba, 0x85, 0x63, 0x26, 0x0a, 0xb9, 0xb7, 0x8a, 0xf1, 0x02, 0x02, 0x90, 0x7b, 0xef, - 0xe6, 0xd5, 0x7f, 0xb0, 0x8b, 0xc9, 0x0e, 0x21, 0x0e, 0x6b, 0x48, 0xbe, 0xb9, 0x71, 0x22, 0x4b, - 0xad, 0x70, 0x88, 0x81, 0xf4, 0xeb, 0xc3, 0x2a, 0xbf, 0xab, 0xb9, 0xd8, 0xbe, 0x24, 0x15, 0xd3, - 0x93, 0xe6, 0x2f, 0x54, 0xfe, 0xe2, 0x63, 0xad, 0x2d, 0x59, 0xd6, 0xd5, 0x2d, 0xed, 0xd5, 0x2c, - 0x4c, 0x29, 0x6e, 0xa9, 0xa3, 0xd2, 0x39, 0x96, 0xb3, 0x1e, 0x5f, 0x2e, 0x35, 0x9e, 0x25, 0x3e, - 0x2d, 0xfa, 0xe1, 0x18, 0x4a, 0xf6, 0x3d, 0xe5, 0xac, 0x22, 0x24, 0x9d, 0x4d, 0xf0, 0x80, 0x81, - 0x3e, 0x6c, 0x59, 0xf1, 0x10, 0x87, 0x36, 0x47, 0xb2, 0x96, 0x64, 0x8b, 0xff, 0x25, 0x47, 0x19, - 0x12, 0xf5, 0xcc, 0x37, 0x8d, 0x7a, 0x14, 0x93, 0xff, 0xe6, 0xdd, 0x39, 0x78, 0x28, 0x10, 0x2e, - 0x6a, 0x66, 0xa5, 0x9d, 0xbe, 0x5b, 0x56, 0x31, 0x23, 0x00, 0xf7, 0x2f, 0x55, 0xf1, 0x7a, 0xdb, - 0xd5, 0x35, 0xcb, 0xdd, 0xd0, 0x63, 0x00, 0x1d, 0xb7, 0x2e, 0x29, 0x3f, 0x7f, 0xef, 0x1c, 0xfa, - 0x63, 0xfe, 0x71, 0x4a, 0xab, 0xea, 0xfe, 0xbb, 0x96, 0xb6, 0xc5, 0x5c, 0x78, 0xd1, 0xab, 0xb4, - 0x52, 0xb3, 0xc3, 0x21, 0x3c, 0xac, 0xdf, 0x7c, 0x4c, 0x15, 0xd1, 0x5f, 0x9f, 0xbd, 0xdd, 0xdf, - 0xe1, 0x09, 0x32, 0x2b, 0x5d, 0xdf, 0x77, 0xc4, 0x89, 0x05, 0x51, 0x75, 0x53, 0x65, 0x36, 0x41, - 0x63, 0x50, 0xe5, 0xda, 0xf4, 0x1a, 0x75, 0x89, 0x96, 0x38, 0xb9, 0x66, 0x98, 0xbe, 0x2b, 0x4e, - 0xdd, 0x39, 0x61, 0xe0, 0xb2, 0xdc, 0xb8, 0x5c, 0x48, 0x57, 0xb4, 0x5b, 0x7d, 0x1a, 0x7d, 0xbf, - 0x10, 0x20, 0x64, 0x5d, 0x7e, 0x2b, 0x70, 0x79, 0xd0, 0xb4, 0xbf, 0x4d, 0xfc, 0x40, 0x62, 0xda, - 0xd6, 0x0d, 0xa3, 0x62, 0x6f, 0x8f, 0x7f, 0x8b, 0xf8, 0xbf, 0x0f, 0x8e, 0x4d, 0x2b, 0x50, 0xcf, - 0x36, 0xb5, 0x2c, 0x4f, 0xec, 0xab, 0xaf, 0x82, 0x22, 0x3d, 0xf5, 0x5c, 0x10, 0x59, 0x87, 0x1c, - 0xbd, 0x5d, 0xbc, 0x9e, 0xba, 0x92, 0xbf, 0xe0, 0x96, 0xcc, 0x2e, 0xfb, 0x96, 0xdb, 0xbb, 0xb8, - 0x81, 0x0b, 0xdc, 0x32, 0x24, 0x12, 0x77, 0x77, 0xf8, 0x23, 0xbb, 0x62, 0xb7, 0xee, 0x20, 0x48, - 0x27, 0x9f, 0x66, 0x98, 0x22, 0xb5, 0xb4, 0xba, 0xbf, 0x8b, 0xe5, 0x88, 0x7b, 0x8b, 0x67, 0xef, - 0x82, 0x4c, 0x0f, 0x8d, 0x4b, 0xcb, 0x00, 0x60, 0x22, 0x01, 0xfc, 0x3b, 0xe5, 0xcb, 0x62, 0xb6, - 0xce, 0x01, 0xc2, 0xc6, 0x4e, 0x0a, 0xaf, 0x50, 0xe8, 0x68, 0x37, 0x12, 0x54, 0xe7, 0xf6, 0xe2, - 0x3f, 0xdd, 0x6b, 0xf2, 0xe2, 0xfb, 0xe0, 0x86, 0x9e, 0xec, 0x7c, 0x97, 0x7f, 0x7f, 0xcd, 0x65, - 0x7f, 0x12, 0x09, 0x6a, 0x48, 0x6f, 0x93, 0x1a, 0x9b, 0xe5, 0xf0, 0x4b, 0x51, 0x76, 0x63, 0x39, - 0x3d, 0xcd, 0x23, 0xf0, 0x55, 0xde, 0xf0, 0xf8, 0x46, 0xeb, 0x22, 0xdb, 0x85, 0xf6, 0x52, 0x63, - 0xc4, 0x12, 0x0c, 0x9a, 0xaf, 0xaf, 0x9f, 0x2d, 0xef, 0x0f, 0xf1, 0x57, 0xc3, 0xca, 0xc4, 0x35, - 0xa6, 0x2a, 0xf1, 0x88, 0x12, 0x14, 0x8f, 0xe5, 0x5b, 0x8e, 0x79, 0x78, 0xba, 0xed, 0x5f, 0xe6, - 0x86, 0xab, 0xd8, 0x63, 0x00, 0x1f, 0x63, 0x9e, 0x7e, 0x24, 0x6e, 0xfe, 0x79, 0x34, 0xd3, 0x4d, - 0x34, 0xd3, 0x4c, 0xdc, 0xb5, 0xe7, 0xec, 0xdc, 0xa0, 0xdc, 0x2c, 0xc3, 0x15, 0x06, 0x7e, 0x0b, - 0x37, 0x6a, 0x07, 0x39, 0xa8, 0xff, 0x1e, 0x00, 0x03, 0x38, 0x70, 0x00, 0x15, 0xc6, 0x60, 0x9d, - 0x03, 0xf0, 0x35, 0x25, 0x15, 0x0d, 0xa9, 0x5e, 0x24, 0x32, 0x0b, 0x2e, 0x2b, 0x71, 0x58, 0x3a, - 0xb0, 0x1d, 0x2c, 0x66, 0x1c, 0x70, 0x71, 0xb0, 0x99, 0x51, 0xe5, 0x84, 0x9c, 0xbb, 0x84, 0x43, - 0x23, 0x22, 0x8c, 0x4b, 0xdc, 0xb6, 0xf6, 0xd4, 0xf1, 0xf7, 0x8a, 0xc4, 0x38, 0x1f, 0x1a, 0x96, - 0x0c, 0xe0, 0x01, 0xf0, 0xe2, 0x80, 0x14, 0x7c, 0x76, 0x90, 0x49, 0x7e, 0xa7, 0x7a, 0x65, 0xe0, - 0xdc, 0xa7, 0x87, 0x59, 0xa9, 0x6d, 0x96, 0xb2, 0xd6, 0xdc, 0xc9, 0xdb, 0xfc, 0x31, 0x80, 0x56, - 0x27, 0x34, 0x92, 0x2c, 0xb8, 0xb6, 0x23, 0xa3, 0x9a, 0x63, 0xd6, 0x83, 0xec, 0xff, 0x36, 0x3c, - 0x0b, 0x00, 0xaa, 0x27, 0x9e, 0xab, 0xd2, 0x71, 0x5b, 0xbc, 0x0b, 0x01, 0x48, 0x9f, 0x07, 0x8b, - 0xc8, 0x72, 0x90, 0xac, 0x51, 0xdd, 0xdc, 0x56, 0xf5, 0xc9, 0x16, 0x18, 0x03, 0x40, 0x52, 0x9d, - 0xdb, 0x15, 0xb9, 0xb2, 0xa6, 0x95, 0x45, 0xcb, 0x0c, 0x2f, 0x90, 0x41, 0xc2, 0xa2, 0x48, 0x06, - 0x43, 0xc3, 0xa4, 0x91, 0xe9, 0x80, 0xf2, 0x07, 0x7f, 0xc7, 0xfe, 0xef, 0xf0, 0x3b, 0x08, 0xa2, - 0x0e, 0xfe, 0x6a, 0x4f, 0xf0, 0xea, 0x80, 0x06, 0x23, 0xd1, 0x93, 0x5e, 0x4f, 0xf7, 0xc2, 0xa7, - 0x4a, 0x50, 0xfb, 0xff, 0x01, 0x95, 0x1a, 0xef, 0x7d, 0xf0, 0x47, 0x65, 0x7b, 0xc9, 0xc2, 0x54, - 0x4b, 0x9b, 0x3e, 0x27, 0xf0, 0x55, 0x49, 0x21, 0xee, 0x99, 0xb0, 0x89, 0x07, 0x6e, 0xd0, 0xe2, - 0xf8, 0xcd, 0xd5, 0x6b, 0x2e, 0xb3, 0x1d, 0xf5, 0x5d, 0x19, 0x22, 0x1b, 0xef, 0x7b, 0x93, 0x84, - 0x77, 0xbd, 0xde, 0xee, 0xff, 0x08, 0xe2, 0xae, 0xa6, 0xbc, 0xff, 0xc4, 0x3f, 0x10, 0x25, 0x72, - 0xf8, 0x47, 0xbe, 0x99, 0x70, 0x1c, 0xbc, 0x03, 0xa8, 0xd4, 0x74, 0x01, 0xe0, 0x3d, 0xe0, 0x51, - 0x53, 0xc0, 0x00, 0x8e, 0x1e, 0x03, 0xf0, 0x50, 0x11, 0x19, 0x22, 0x80, 0xc7, 0xc3, 0x02, 0x03, - 0xf4, 0xc9, 0x60, 0x00, 0x46, 0x70, 0x03, 0x81, 0xd5, 0x78, 0x76, 0x1a, 0xea, 0x3d, 0x54, 0xb3, - 0x4b, 0x77, 0x86, 0x70, 0x11, 0x82, 0xd0, 0x69, 0x69, 0xce, 0xf0, 0xff, 0xf9, 0x7a, 0xfa, 0x9b, - 0xf6, 0xdd, 0x6a, 0xec, 0x2a, 0x8a, 0x00, 0x60, 0x6e, 0xb4, 0xdb, 0xbe, 0xbd, 0xba, 0xff, 0xfc, - 0x10, 0x01, 0xe0, 0x24, 0x4b, 0xdd, 0x57, 0x85, 0x30, 0x07, 0xb5, 0x6e, 0x9e, 0xff, 0xfe, 0xdf, - 0x06, 0x03, 0xae, 0x2b, 0xbb, 0xbb, 0xf3, 0x53, 0x83, 0x10, 0x60, 0x11, 0x2d, 0x6b, 0x5a, 0xaa, - 0xa8, 0xbe, 0x08, 0x00, 0xa0, 0x11, 0x20, 0xda, 0xcf, 0x17, 0x55, 0x5a, 0x8b, 0x93, 0xe1, 0x10, - 0x62, 0x14, 0xd2, 0x03, 0x79, 0x21, 0x7f, 0x1e, 0x2c, 0x10, 0x72, 0xed, 0x29, 0x2d, 0xb6, 0xd3, - 0x41, 0x70, 0x2a, 0x78, 0x70, 0x48, 0x92, 0xf8, 0x9c, 0xdb, 0xbb, 0xf8, 0x9c, 0xbc, 0xda, 0xab, - 0x1f, 0x96, 0x6e, 0x4e, 0xee, 0xcf, 0xe1, 0x2d, 0x57, 0x92, 0x10, 0xef, 0x2d, 0xef, 0x7c, 0x99, - 0xf2, 0x96, 0x20, 0x48, 0x42, 0xd6, 0xac, 0x95, 0x55, 0x6a, 0xbc, 0x40, 0x53, 0xc2, 0xea, 0xe2, - 0x5c, 0x7f, 0xf8, 0xba, 0xf3, 0x77, 0xe2, 0x63, 0xe7, 0x70, 0x79, 0x66, 0x3c, 0xb0, 0x4e, 0x99, - 0x35, 0xc5, 0x67, 0xcc, 0x10, 0x00, 0xc8, 0x0a, 0x5f, 0x54, 0xb7, 0x37, 0x2c, 0xf1, 0x4d, 0x39, - 0x3c, 0x73, 0x1c, 0x1c, 0x26, 0xce, 0x01, 0xbf, 0x9f, 0xeb, 0xff, 0x5f, 0xe1, 0x99, 0x0d, 0x5a, - 0xc3, 0x28, 0xa1, 0x83, 0x02, 0xeb, 0xff, 0xfe, 0xac, 0x1c, 0x14, 0x93, 0x77, 0xf0, 0x80, 0x40, - 0x11, 0x56, 0x6a, 0xfc, 0x48, 0x60, 0x29, 0x12, 0x70, 0xbc, 0xb3, 0x17, 0x67, 0x3c, 0xf9, 0x2f, - 0x17, 0x35, 0x39, 0x06, 0x9a, 0x82, 0x4f, 0x2a, 0x05, 0x28, 0x8c, 0x7e, 0x26, 0xb5, 0x97, 0xf9, - 0xb9, 0x2c, 0xa5, 0xcf, 0x8a, 0xee, 0x53, 0x1b, 0xc4, 0x3f, 0xd5, 0xfe, 0x26, 0xdc, 0x8d, 0xdc, - 0xd6, 0x51, 0xfd, 0xcc, 0x2f, 0xc8, 0x11, 0x62, 0x42, 0x91, 0x4d, 0x45, 0x35, 0x36, 0x4c, 0x88, - 0xd0, 0x5d, 0x75, 0x3e, 0xc5, 0x7d, 0xc3, 0x20, 0x84, 0x4d, 0x57, 0xaa, 0x99, 0x54, 0xe2, 0x42, - 0x20, 0xb2, 0x2f, 0x8b, 0x83, 0xa5, 0xd4, 0xac, 0xac, 0xb3, 0x95, 0x10, 0x96, 0x47, 0x10, 0x5d, - 0xf0, 0xdb, 0x80, 0x33, 0x8b, 0x50, 0x79, 0xaf, 0xb8, 0x7d, 0x6b, 0x34, 0x2b, 0xf6, 0xcd, 0xed, - 0x8d, 0x63, 0x3f, 0xad, 0x70, 0x50, 0x10, 0x08, 0x66, 0x9f, 0xcd, 0xee, 0x4f, 0xe1, 0x80, 0xc0, - 0x46, 0x2e, 0xaa, 0xaf, 0x7d, 0x62, 0xf0, 0xba, 0x80, 0x33, 0x96, 0xe6, 0x24, 0xe9, 0xbf, 0xde, - 0xdb, 0x79, 0xba, 0x8e, 0xee, 0x24, 0x1c, 0x04, 0xeb, 0x5b, 0x1a, 0xea, 0x08, 0x00, 0x82, 0x0a, - 0x35, 0x8b, 0xab, 0x83, 0xfe, 0x4e, 0xaf, 0x17, 0x70, 0x88, 0x60, 0x29, 0x97, 0x02, 0x82, 0xa5, - 0x83, 0x1d, 0xba, 0x00, 0xf0, 0x75, 0xea, 0xef, 0x91, 0x38, 0x2b, 0x5b, 0x5a, 0x2e, 0x75, 0x0e, - 0x03, 0xc1, 0xfe, 0x01, 0x7c, 0x1a, 0x0c, 0xa8, 0x78, 0xbb, 0xfe, 0x0a, 0x40, 0x4d, 0x70, 0xc0, - 0xcf, 0x38, 0x1c, 0x10, 0xe5, 0xc5, 0x67, 0xd2, 0x75, 0x69, 0x9e, 0xdc, 0x98, 0x3e, 0xc2, 0xd9, - 0x6f, 0x82, 0x00, 0xa4, 0x56, 0x2b, 0xb8, 0xa0, 0xc4, 0x8f, 0xb3, 0x89, 0xda, 0x3e, 0x3b, 0xf1, - 0xf7, 0x10, 0x08, 0x02, 0x93, 0xfa, 0xfe, 0x2d, 0x31, 0x0e, 0x08, 0x70, 0xb1, 0xa3, 0x07, 0x8f, - 0x1c, 0x2c, 0x1d, 0x10, 0x81, 0xa0, 0xe3, 0x70, 0x6f, 0xf5, 0xdc, 0xb8, 0xd4, 0x5c, 0xf9, 0x61, - 0x4d, 0x3f, 0xae, 0x7a, 0xfc, 0xb0, 0x7f, 0xc9, 0x37, 0xd7, 0xc9, 0x97, 0xaa, 0xda, 0x78, 0x28, - 0xa4, 0x39, 0xeb, 0xe8, 0x5e, 0x66, 0x12, 0xb4, 0xd0, 0x0d, 0xcb, 0xe6, 0xed, 0x35, 0xe6, 0x97, - 0x12, 0xfc, 0xdc, 0x18, 0xac, 0xb2, 0xc4, 0x89, 0x17, 0x5d, 0xf1, 0x0e, 0x05, 0x53, 0x2f, 0x2f, - 0x03, 0xb7, 0xe1, 0x02, 0xce, 0x10, 0xe6, 0xd6, 0xa2, 0x79, 0x2a, 0xbe, 0x11, 0x08, 0x8c, 0xc5, - 0xe2, 0xea, 0x78, 0x07, 0x8a, 0x67, 0x1c, 0x89, 0xfa, 0x9e, 0x60, 0xb2, 0xb2, 0xf7, 0x33, 0x89, - 0x03, 0x40, 0xc8, 0xa6, 0x2e, 0x59, 0xc9, 0xce, 0x78, 0xbb, 0x7c, 0x55, 0xab, 0x64, 0xcf, 0xf8, - 0x29, 0xd6, 0xa5, 0xea, 0x2e, 0xb5, 0x5f, 0x62, 0x08, 0x50, 0xf8, 0x8f, 0x89, 0xe2, 0x43, 0x3c, - 0x20, 0x11, 0xc3, 0xc4, 0x20, 0x00, 0x5e, 0x4a, 0x36, 0x1a, 0x95, 0x8e, 0x64, 0x02, 0x7e, 0xff, - 0x7b, 0x80, 0xeb, 0x8b, 0xcd, 0x2d, 0x50, 0xab, 0x08, 0xe9, 0x85, 0xa4, 0x0a, 0xcf, 0x00, 0x30, - 0x72, 0x6e, 0x88, 0x15, 0x04, 0xaa, 0x80, 0xfe, 0x94, 0x60, 0x6c, 0x3c, 0xd4, 0x1c, 0x16, 0x81, - 0xa2, 0x72, 0xd1, 0xb3, 0xd2, 0xa1, 0xce, 0x67, 0x3b, 0x48, 0x78, 0x90, 0x2c, 0x05, 0x27, 0x81, - 0x80, 0xf0, 0x2c, 0x38, 0x3c, 0xf3, 0xdf, 0xf1, 0xf6, 0x3a, 0x43, 0xdf, 0x73, 0x13, 0x2a, 0xa6, - 0x87, 0x00, 0xf2, 0x46, 0xe1, 0xc3, 0xd3, 0xfc, 0x27, 0xe4, 0xe9, 0x56, 0xd6, 0x22, 0x14, 0xac, - 0xda, 0x06, 0x36, 0x4f, 0x91, 0x5d, 0xe2, 0x4e, 0x4c, 0x9d, 0xa5, 0xbd, 0x7d, 0xf0, 0xa4, 0xb9, - 0x07, 0x23, 0x7e, 0xd1, 0x96, 0x41, 0x9a, 0xef, 0xa9, 0x56, 0xae, 0xe4, 0x2b, 0xea, 0xf3, 0xc2, - 0x31, 0xf8, 0x9f, 0xaa, 0x49, 0xbe, 0x2b, 0x4f, 0x89, 0x10, 0x10, 0x89, 0x74, 0x4e, 0x9d, 0xce, - 0x20, 0xd5, 0xa8, 0xe7, 0xb1, 0x39, 0x21, 0x11, 0x21, 0x3c, 0xfe, 0xe2, 0xb8, 0xaf, 0x86, 0x44, - 0x8a, 0x97, 0x8a, 0xc5, 0x67, 0xc7, 0xde, 0x11, 0xe5, 0xad, 0x62, 0x05, 0x62, 0x79, 0x86, 0x42, - 0x21, 0x1a, 0xc8, 0xba, 0xc6, 0x69, 0x53, 0x4d, 0x5f, 0xfe, 0x24, 0x29, 0x8d, 0xb5, 0x8a, 0x31, - 0x5b, 0xb4, 0xad, 0x0b, 0xaa, 0xc5, 0xc4, 0xf2, 0x2f, 0x08, 0x05, 0x39, 0xb2, 0xee, 0xd3, 0x81, - 0xfa, 0x52, 0xc3, 0x2d, 0x47, 0x88, 0x90, 0x0e, 0x15, 0x40, 0xbc, 0x1f, 0x92, 0x8f, 0x0b, 0x1f, - 0x0e, 0x60, 0x01, 0xa3, 0x70, 0x1c, 0x94, 0x54, 0x2b, 0x2d, 0xfb, 0xfd, 0xdc, 0x69, 0x5d, 0xae, - 0xd8, 0x84, 0x1d, 0x76, 0x2e, 0x53, 0x2f, 0xdb, 0xd2, 0xe0, 0xa4, 0x14, 0x96, 0xb6, 0x61, 0x73, - 0x86, 0x42, 0x15, 0x5c, 0x57, 0xd6, 0xbc, 0x30, 0x24, 0x15, 0xdd, 0xdd, 0xee, 0xa2, 0x78, 0x2b, - 0x2e, 0x46, 0x58, 0xd9, 0xf0, 0x55, 0x10, 0x72, 0x55, 0x75, 0x17, 0x11, 0xc4, 0x73, 0xb9, 0xc4, - 0x89, 0x1d, 0x85, 0x16, 0xc1, 0x0c, 0x1f, 0x1c, 0x43, 0xd1, 0x2d, 0x30, 0xe6, 0x3f, 0x10, 0x11, - 0x1d, 0x1a, 0x56, 0x71, 0xd3, 0xed, 0xed, 0xae, 0xe0, 0xd7, 0xa5, 0x55, 0xf1, 0x20, 0x86, 0x6e, - 0x2f, 0x77, 0xe7, 0xf2, 0xc4, 0xc4, 0xd8, 0xcf, 0xd8, 0xed, 0x8d, 0x8d, 0xfe, 0x32, 0x66, 0xa9, - 0xf7, 0x86, 0xfc, 0x17, 0xe2, 0xf9, 0x32, 0x42, 0x09, 0x49, 0x79, 0x6f, 0x6f, 0xac, 0x4f, 0x88, - 0x04, 0x9b, 0xc7, 0x97, 0xb8, 0x89, 0x29, 0xd3, 0xe1, 0x19, 0xb5, 0xa8, 0x5f, 0x9b, 0x7b, 0xb8, - 0x44, 0x22, 0x0a, 0xfb, 0xbb, 0x9b, 0xcd, 0xd6, 0x77, 0xc8, 0xf3, 0x0d, 0x92, 0x00, 0x7d, 0x38, - 0xc8, 0xc5, 0xa6, 0xf3, 0xcf, 0xcd, 0xe9, 0xab, 0x65, 0xf4, 0x9d, 0x3e, 0x9b, 0xf6, 0xd7, 0xf0, - 0xc8, 0x64, 0x45, 0x67, 0x99, 0xf0, 0x88, 0x80, 0x8d, 0x27, 0xe2, 0x97, 0xe6, 0x82, 0xe6, 0xce, - 0x20, 0x32, 0x32, 0x5b, 0x3d, 0xc5, 0x91, 0x54, 0xab, 0x5d, 0xea, 0xbc, 0x48, 0x92, 0xf4, 0x6f, - 0x86, 0x63, 0x2b, 0x2a, 0x91, 0x88, 0xb3, 0x38, 0xc2, 0xbf, 0x3d, 0x69, 0xc2, 0xea, 0x00, 0x2b, - 0x3d, 0x2e, 0x32, 0xaf, 0xdb, 0xcf, 0x7d, 0xb2, 0xf6, 0xf1, 0x2f, 0x1e, 0x40, 0xbf, 0x0b, 0x38, - 0xb5, 0xf1, 0xc5, 0x68, 0xc3, 0x0e, 0x28, 0x04, 0xdf, 0x22, 0xba, 0xef, 0xff, 0x16, 0xd3, 0x37, - 0xeb, 0x6f, 0xff, 0x57, 0x9f, 0x84, 0xaf, 0xb7, 0x36, 0x65, 0xc2, 0x1f, 0x19, 0xc5, 0xe9, 0x55, - 0x88, 0xe4, 0x49, 0xcb, 0x5b, 0xae, 0x13, 0xaa, 0xad, 0xee, 0xf8, 0x81, 0x3c, 0x4f, 0xe5, 0xea, - 0x9e, 0x26, 0x3f, 0xcf, 0xcd, 0x0e, 0x7a, 0x6e, 0x11, 0xee, 0xfb, 0xf9, 0xb7, 0xba, 0xc4, 0x5f, - 0x25, 0xdf, 0x27, 0x05, 0x57, 0x4f, 0x07, 0x8f, 0x03, 0xfd, 0x41, 0xd3, 0xc1, 0xd0, 0xf1, 0x21, - 0xcb, 0xc9, 0xf2, 0x27, 0x5c, 0x32, 0x2a, 0x8c, 0x43, 0x4d, 0xdd, 0xdf, 0x10, 0x11, 0x7a, 0x9a, - 0x51, 0x7e, 0x27, 0xc4, 0x8a, 0xa3, 0x21, 0x8a, 0xf6, 0x43, 0x7e, 0x74, 0x71, 0x01, 0x10, 0x59, - 0x52, 0x46, 0xbc, 0x0d, 0x4c, 0x98, 0x42, 0xa4, 0xc8, 0xbd, 0xc5, 0x4b, 0xca, 0x0e, 0x26, 0x3b, - 0xe7, 0x6d, 0x45, 0xd4, 0x5c, 0xbd, 0x57, 0x83, 0x80, 0x41, 0x11, 0xc5, 0x48, 0xcc, 0xe8, 0x12, - 0x64, 0x83, 0x9d, 0x07, 0x10, 0x3b, 0xcd, 0x9a, 0xa2, 0x6b, 0x5d, 0x6a, 0x9d, 0x38, 0x80, 0x47, - 0x17, 0xd7, 0xbe, 0x7a, 0xfe, 0x3d, 0xdb, 0x88, 0x84, 0xe6, 0xe2, 0x3f, 0xa7, 0x4f, 0x08, 0x09, - 0x08, 0xf8, 0x0f, 0xf9, 0x32, 0xf7, 0x82, 0x7f, 0x8f, 0x0c, 0x19, 0xd4, 0x30, 0x1f, 0x17, 0xf3, - 0x63, 0x83, 0xb7, 0xfe, 0x10, 0xdd, 0x31, 0x2f, 0x2b, 0x4b, 0x63, 0xef, 0x6f, 0x7e, 0x10, 0x13, - 0xc4, 0x09, 0x84, 0x39, 0x2b, 0x5a, 0xe4, 0xde, 0xe3, 0x03, 0x32, 0x80, 0xef, 0x71, 0x4f, 0xfe, - 0xde, 0xdd, 0xf8, 0x29, 0x03, 0x48, 0x2a, 0x21, 0xb5, 0xf6, 0x85, 0x71, 0x3c, 0xac, 0xe2, 0x02, - 0x44, 0x35, 0x0c, 0x4c, 0x46, 0x13, 0x32, 0x8f, 0xfb, 0xa9, 0x83, 0x66, 0x73, 0x0c, 0xdf, 0x03, - 0x00, 0x18, 0x5d, 0x4d, 0xeb, 0xd3, 0xf8, 0x9f, 0x84, 0xbb, 0x8a, 0xd5, 0x75, 0x13, 0x36, 0xb4, - 0xbc, 0x15, 0xf5, 0x55, 0x5d, 0x35, 0xda, 0x6c, 0x49, 0x33, 0x7b, 0x7c, 0x41, 0x6d, 0xdf, 0xe1, - 0x6b, 0xcd, 0xb1, 0x1c, 0xeb, 0xee, 0x9c, 0xfe, 0xb8, 0xbf, 0x2d, 0xf1, 0xdf, 0x78, 0xcd, 0x27, - 0x15, 0x88, 0xda, 0x0c, 0xb5, 0xf1, 0xf5, 0xf6, 0xff, 0x88, 0x88, 0xd7, 0x97, 0x06, 0x93, 0x07, - 0xbf, 0xf8, 0xa9, 0xf2, 0xb4, 0x96, 0xfc, 0x48, 0x9a, 0x6f, 0xe6, 0xe2, 0x3f, 0xc6, 0x62, 0x6c, - 0x60, 0x89, 0xf6, 0x3e, 0x89, 0x46, 0x77, 0xe9, 0xdc, 0xdc, 0x5e, 0xfe, 0xf1, 0x83, 0xb3, 0xe7, - 0x67, 0xcb, 0xbb, 0x25, 0x0a, 0xf3, 0x56, 0xb3, 0xf2, 0x15, 0x75, 0xc3, 0x3f, 0x84, 0xaa, 0x6b, - 0x78, 0x73, 0x75, 0xae, 0x0e, 0x01, 0x47, 0x04, 0x3e, 0x08, 0x42, 0x37, 0x08, 0xcb, 0xad, 0xf1, - 0x22, 0x3e, 0x0b, 0x88, 0x4c, 0xfa, 0x62, 0x1c, 0xcb, 0xc4, 0x05, 0x2b, 0x55, 0x69, 0xa3, 0x67, - 0x51, 0x00, 0xd0, 0xb1, 0xb3, 0x16, 0xec, 0x71, 0x02, 0x09, 0xb7, 0x71, 0x10, 0x85, 0xcf, 0xfa, - 0x88, 0xf1, 0x11, 0x91, 0x1c, 0x2f, 0xaa, 0xd7, 0x89, 0xe7, 0x56, 0xb1, 0x1e, 0x22, 0x4d, 0xee, - 0x19, 0xee, 0xf7, 0x93, 0x98, 0xb5, 0x5e, 0x08, 0x26, 0xd6, 0xb8, 0x90, 0x81, 0xab, 0x55, 0x8a, - 0xc2, 0x8a, 0xf8, 0xb9, 0xfd, 0xea, 0xaa, 0xab, 0x9a, 0xaa, 0xb5, 0xcb, 0xaa, 0xae, 0x23, 0xf0, - 0x96, 0x16, 0x57, 0x6a, 0xbe, 0x26, 0x24, 0x8f, 0xce, 0xf7, 0x77, 0xc4, 0xcd, 0xe3, 0x40, 0x81, - 0x13, 0x8b, 0xc5, 0xf1, 0x27, 0x14, 0x2a, 0x54, 0xb3, 0xf2, 0xf1, 0x3c, 0xb8, 0x9f, 0xcb, 0xc5, - 0x75, 0xc4, 0x42, 0x9f, 0x32, 0xfe, 0xb1, 0x77, 0xc5, 0xef, 0x77, 0xbb, 0x85, 0x39, 0x6f, 0x78, - 0x8c, 0x46, 0x15, 0x67, 0x00, 0xd7, 0xf4, 0x87, 0x6f, 0xff, 0xf1, 0x18, 0x6c, 0xe3, 0xe0, 0xa4, - 0x49, 0x48, 0xab, 0xf9, 0xb8, 0xba, 0xf1, 0x3c, 0x18, 0x89, 0xe1, 0x80, 0xc5, 0xc2, 0x3e, 0x11, - 0x82, 0x7b, 0xbd, 0xdb, 0xdf, 0xb8, 0x44, 0x48, 0x2d, 0x9b, 0x97, 0xa5, 0xd4, 0xd9, 0x07, 0xc1, - 0x1e, 0xef, 0xeb, 0x84, 0x04, 0x7c, 0x4c, 0x41, 0xc5, 0x17, 0x26, 0x2b, 0x33, 0x78, 0x8e, 0x11, - 0x10, 0x13, 0xae, 0xb7, 0x54, 0xf8, 0x8f, 0x11, 0xc4, 0x84, 0x1e, 0xe2, 0x5f, 0xa8, 0x89, 0x2e, - 0xf8, 0x52, 0x27, 0x27, 0x09, 0xd7, 0x55, 0xac, 0xb8, 0x63, 0x14, 0x8a, 0x26, 0xc4, 0x46, 0x3f, - 0x5e, 0x11, 0x0c, 0x12, 0xa4, 0xcb, 0xf8, 0x48, 0xca, 0x2f, 0x5d, 0x57, 0x88, 0x75, 0x5f, 0xc7, - 0x1d, 0x6a, 0x2f, 0xaa, 0xaa, 0xf8, 0x40, 0x31, 0x78, 0x82, 0x1b, 0x73, 0x7c, 0x32, 0x24, 0x45, - 0xeb, 0xf7, 0xa8, 0x88, 0x89, 0x78, 0x9e, 0x78, 0x83, 0x5e, 0xd7, 0xc5, 0x5a, 0xaa, 0xac, 0x53, - 0x17, 0xf2, 0xd6, 0xbe, 0x20, 0x56, 0xdd, 0x6a, 0xab, 0xc4, 0x0c, 0xb8, 0xaf, 0x77, 0xb9, 0x3c, - 0xef, 0x1a, 0xc5, 0xb8, 0xfc, 0x4f, 0x89, 0x85, 0xf1, 0x13, 0x09, 0x89, 0x04, 0x5b, 0x53, 0x1c, - 0x23, 0xf0, 0x99, 0x96, 0xaa, 0xaa, 0x2e, 0x2f, 0x13, 0x28, 0x19, 0xd1, 0xa7, 0x14, 0x48, 0x41, - 0xab, 0x6c, 0x31, 0x75, 0x5f, 0x08, 0xe3, 0xb8, 0x48, 0xc2, 0x38, 0xcc, 0xd3, 0x6d, 0x31, 0x2b, - 0x3e, 0x5e, 0xd8, 0xf5, 0x3c, 0x90, 0xf5, 0x60, 0xb3, 0xa6, 0x0e, 0xcc, 0xaf, 0xc6, 0x22, 0x26, - 0x5f, 0xe5, 0xf7, 0x78, 0x7c, 0x4a, 0x16, 0x3b, 0x8c, 0x48, 0x92, 0x8a, 0xd5, 0x78, 0x64, 0x95, - 0x5f, 0x86, 0x22, 0x39, 0x0a, 0xef, 0x97, 0x98, 0x9b, 0xb8, 0x05, 0x6a, 0x00, 0x00, 0x00, 0x01, - 0x41, 0x9a, 0x39, 0x1c, 0xb0, 0x52, 0x02, 0x14, 0x31, 0x13, 0x78, 0xae, 0xf9, 0xd8, 0xc2, 0x10, - 0x8c, 0xfc, 0x29, 0x5f, 0x99, 0x8b, 0xbb, 0xbe, 0x20, 0x40, 0x9e, 0xee, 0xf6, 0x38, 0x92, 0xc7, - 0x96, 0x9d, 0xdf, 0x89, 0x83, 0x18, 0x60, 0x48, 0x42, 0xb6, 0xaa, 0xba, 0xdb, 0x11, 0x67, 0x89, - 0x19, 0xa9, 0xff, 0x23, 0x14, 0xdd, 0x36, 0xfa, 0xe8, 0x6b, 0xf1, 0x32, 0xfc, 0xaa, 0x2e, 0x99, - 0xfe, 0x20, 0x48, 0x53, 0x1a, 0x55, 0xcb, 0xcd, 0x77, 0x5a, 0xee, 0xbe, 0xe1, 0x88, 0x24, 0xd6, - 0xaf, 0xf2, 0x65, 0xab, 0xfc, 0x48, 0xfc, 0x4f, 0x2d, 0x35, 0x6a, 0xbb, 0x5e, 0x26, 0xf1, 0x5b, - 0xbd, 0x44, 0xf0, 0x17, 0x73, 0x16, 0xb5, 0xe1, 0x11, 0x44, 0x88, 0xa9, 0xc5, 0x6e, 0x2b, 0x7f, - 0x1f, 0xbb, 0xc9, 0x05, 0xaa, 0x6b, 0xe2, 0x04, 0x12, 0xaa, 0x2f, 0xc4, 0xc2, 0x35, 0xad, 0xef, - 0x55, 0x74, 0xbc, 0xa5, 0xc5, 0xaa, 0xe6, 0xbd, 0xf8, 0x40, 0x47, 0x08, 0x08, 0x21, 0x0e, 0xa3, - 0xe1, 0x89, 0x4f, 0xaa, 0x82, 0xdc, 0x48, 0x83, 0x4f, 0x0e, 0xdd, 0xfc, 0x41, 0x6b, 0x7f, 0x84, - 0xad, 0xaa, 0xaa, 0xdf, 0xc4, 0x16, 0x86, 0xb5, 0xe1, 0x00, 0x43, 0x77, 0xdf, 0x88, 0x11, 0xe2, - 0x0c, 0x5d, 0xdf, 0xca, 0x4d, 0xdf, 0xc9, 0xb4, 0x92, 0x5c, 0x47, 0x0c, 0x08, 0x37, 0x77, 0xc3, - 0x01, 0x08, 0x2a, 0xe2, 0xf5, 0xad, 0xef, 0x0b, 0xe0, 0x04, 0x6b, 0xa6, 0xe2, 0xc8, 0x6e, 0xda, - 0x7f, 0x2d, 0x9b, 0xcf, 0x4d, 0x9c, 0x4c, 0x45, 0xf7, 0x76, 0xbe, 0x20, 0x15, 0x5e, 0xdd, 0xbb, - 0x6f, 0xaa, 0xf7, 0xc1, 0x75, 0xc5, 0x6d, 0x79, 0x71, 0xfc, 0x48, 0x27, 0xcd, 0xea, 0xe1, 0x54, - 0x40, 0x53, 0x7f, 0x73, 0xe3, 0x22, 0x3d, 0xce, 0xfb, 0x7b, 0x6b, 0x46, 0x25, 0xe4, 0xe5, 0x4e, - 0x58, 0xaf, 0x5b, 0x7e, 0x0b, 0x77, 0xbe, 0x35, 0x11, 0xbf, 0xdd, 0xdf, 0xf1, 0x77, 0xbe, 0xf7, - 0xf0, 0x5b, 0x22, 0xb2, 0x90, 0x6d, 0x5d, 0xec, 0x7c, 0x55, 0xdd, 0xcb, 0x99, 0x89, 0x1e, 0xbe, - 0x5b, 0x4b, 0xc1, 0x37, 0x2e, 0xaa, 0xa4, 0xe4, 0xde, 0xf8, 0x40, 0x48, 0x42, 0xde, 0x4a, 0xac, - 0x7a, 0xc5, 0x75, 0x9e, 0x15, 0x08, 0x89, 0x05, 0x57, 0x63, 0xc7, 0xe9, 0xfa, 0x1d, 0xdf, 0x89, - 0x88, 0xaa, 0xae, 0xed, 0x71, 0x11, 0x54, 0xed, 0x6a, 0xb5, 0xc4, 0x88, 0x19, 0x8d, 0x7a, 0x96, - 0x11, 0xf2, 0xe5, 0x7d, 0x1f, 0xef, 0xcf, 0x9e, 0x24, 0x49, 0x26, 0xe9, 0xf8, 0x46, 0x6a, 0xca, - 0xcf, 0x13, 0x09, 0x72, 0x42, 0xab, 0xe2, 0x2f, 0x8f, 0x55, 0xfa, 0xf6, 0x26, 0x11, 0x2f, 0x05, - 0x71, 0x22, 0x46, 0x04, 0x1e, 0xe2, 0xbb, 0x21, 0x59, 0x72, 0xf5, 0x7d, 0xc5, 0x7e, 0xf5, 0x55, - 0xc2, 0x3f, 0x85, 0x3b, 0xb4, 0x2f, 0x5a, 0xa5, 0x74, 0x9d, 0xdf, 0xbe, 0x08, 0xb1, 0xea, 0x93, - 0x3e, 0xc3, 0xcd, 0x04, 0x00, 0x40, 0x0c, 0x61, 0x41, 0x54, 0xcb, 0x1d, 0x70, 0xbd, 0x4f, 0x38, - 0x55, 0x9d, 0x32, 0x7f, 0x5d, 0x5a, 0x4e, 0x6b, 0x54, 0x9f, 0xc2, 0x14, 0xdf, 0x72, 0xd1, 0xe9, - 0x8a, 0xc5, 0x6c, 0xd9, 0xf8, 0x53, 0xa4, 0x5c, 0xdd, 0xc5, 0x67, 0xbd, 0xa2, 0xd9, 0x6c, 0x56, - 0x2b, 0x15, 0xbc, 0x3b, 0xcb, 0xad, 0x57, 0x25, 0x6b, 0x27, 0x37, 0x77, 0xc4, 0xc2, 0x55, 0xaf, - 0x6d, 0x7c, 0x57, 0x9b, 0xc1, 0x9d, 0x9c, 0x99, 0x5e, 0x20, 0x15, 0xf4, 0xdc, 0xee, 0x3b, 0x45, - 0x60, 0x71, 0x22, 0x85, 0xcb, 0x69, 0xc9, 0xc0, 0x3c, 0x38, 0x8b, 0x0c, 0x0e, 0x11, 0x8b, 0xe6, - 0xcf, 0x2e, 0x78, 0x24, 0xee, 0xcd, 0xbe, 0x12, 0x9f, 0xf5, 0x5a, 0xae, 0x2f, 0x97, 0x01, 0xe7, - 0x98, 0x39, 0x1e, 0x03, 0x91, 0xe7, 0x10, 0x0a, 0x38, 0x3c, 0xf0, 0x18, 0x17, 0x65, 0x8e, 0x04, - 0xf8, 0x0c, 0x02, 0x76, 0x5c, 0xcb, 0x04, 0x00, 0xa0, 0x29, 0x14, 0xc4, 0x1c, 0x17, 0x90, 0x7d, - 0x81, 0x47, 0x1d, 0x44, 0xce, 0xdd, 0x10, 0x5b, 0x99, 0x08, 0x87, 0xa0, 0x3b, 0x80, 0xa1, 0x82, - 0x4f, 0x0c, 0x02, 0x90, 0x53, 0x3c, 0x00, 0x08, 0xe0, 0xc5, 0x87, 0xc4, 0xc0, 0x27, 0x07, 0x7b, - 0x9e, 0xb2, 0xa5, 0x16, 0x67, 0x27, 0x1c, 0xfa, 0x4e, 0xe4, 0xce, 0xba, 0xbd, 0x70, 0x45, 0x1d, - 0x55, 0x72, 0x7f, 0x7c, 0xd5, 0xd4, 0x3d, 0xc9, 0x55, 0xc9, 0xc1, 0x26, 0x56, 0x27, 0xef, 0xf0, - 0x85, 0xed, 0xeb, 0x5d, 0x56, 0xab, 0xe0, 0xa3, 0x37, 0xc1, 0x82, 0x0b, 0x20, 0xe3, 0x01, 0x28, - 0x7e, 0x25, 0x42, 0x00, 0x06, 0x38, 0x63, 0x70, 0xc8, 0x16, 0x02, 0x91, 0x82, 0x26, 0xc1, 0xd8, - 0xb2, 0x28, 0x4b, 0xce, 0xaa, 0xf6, 0x24, 0xdc, 0x9f, 0x4f, 0x93, 0x05, 0x4f, 0x38, 0x1a, 0x04, - 0x61, 0xce, 0x35, 0xd3, 0x03, 0xc1, 0xfe, 0x2c, 0xe0, 0x84, 0x1c, 0x02, 0x99, 0x5f, 0xf3, 0x51, - 0x12, 0x71, 0x63, 0x6e, 0xa2, 0x11, 0x9e, 0x0a, 0x43, 0xb8, 0x8c, 0xfc, 0xfc, 0x7e, 0x07, 0xed, - 0x76, 0xe1, 0x90, 0x50, 0x13, 0x96, 0x8e, 0x6f, 0x16, 0x11, 0xb9, 0xfb, 0xde, 0x24, 0x14, 0x13, - 0x11, 0xcf, 0x08, 0x02, 0x07, 0x49, 0x2f, 0x82, 0x80, 0x91, 0x4d, 0x4a, 0x6f, 0x73, 0xe7, 0xe1, - 0x02, 0x45, 0x8a, 0xfa, 0xaa, 0x8b, 0xa8, 0xbe, 0x24, 0x14, 0x05, 0x31, 0x6f, 0x16, 0x81, 0xf3, - 0x00, 0x0f, 0x30, 0x35, 0x04, 0x5a, 0x0e, 0x3c, 0x1b, 0xe6, 0x57, 0x5c, 0x2b, 0xef, 0x32, 0x83, - 0x71, 0x83, 0x10, 0x80, 0x7e, 0xc9, 0x39, 0x6b, 0xff, 0x27, 0x13, 0xcd, 0x4d, 0x80, 0xd2, 0x06, - 0xb5, 0xab, 0x7e, 0x7e, 0x6c, 0xde, 0xab, 0x84, 0x73, 0xcb, 0x7b, 0x46, 0xc7, 0x7f, 0xe0, 0xa7, - 0x48, 0x86, 0x9d, 0x44, 0x55, 0xf1, 0x66, 0xf7, 0xb9, 0xf1, 0x74, 0x92, 0xf4, 0x94, 0x37, 0xcb, - 0xbb, 0xcb, 0xc6, 0x6d, 0x37, 0x7a, 0xe5, 0x64, 0xff, 0xd2, 0x95, 0x8f, 0x11, 0x51, 0x79, 0x93, - 0xff, 0x82, 0x5a, 0xd5, 0x6a, 0xd6, 0xc7, 0x82, 0x90, 0xa7, 0x26, 0x27, 0x83, 0x91, 0x61, 0x42, - 0x2c, 0x92, 0xb1, 0x07, 0xc2, 0xc1, 0x24, 0x4b, 0x45, 0xff, 0x8f, 0x89, 0xf1, 0x2f, 0xda, 0xba, - 0xf8, 0xae, 0xaa, 0xab, 0xf0, 0xc7, 0x84, 0x0d, 0x97, 0x2f, 0xc3, 0x02, 0x2d, 0x56, 0xeb, 0xe1, - 0x81, 0x3c, 0x48, 0x60, 0x9a, 0xa8, 0xbf, 0x05, 0x03, 0x7a, 0xd4, 0x47, 0x0e, 0x0e, 0x4e, 0x23, - 0xe5, 0x64, 0x50, 0x66, 0x30, 0x4f, 0xd3, 0x16, 0xff, 0xf2, 0xd6, 0xaa, 0x7e, 0x2e, 0xfb, 0xd6, - 0xdf, 0x88, 0xae, 0xab, 0x58, 0xbf, 0x84, 0xef, 0x6d, 0x55, 0x35, 0xfb, 0x93, 0xc8, 0x18, 0x0f, - 0xd5, 0x90, 0xd7, 0x26, 0xb5, 0x2f, 0x09, 0x6f, 0x37, 0x7b, 0xf1, 0x11, 0x37, 0x7a, 0x9a, 0x27, - 0xe5, 0x63, 0xdd, 0x2b, 0xbe, 0x18, 0x08, 0x8a, 0xa7, 0x4f, 0xbb, 0x78, 0x62, 0x0a, 0xef, 0x75, - 0x3e, 0xc9, 0x78, 0x8f, 0xdc, 0xfd, 0xcf, 0xab, 0xf0, 0x60, 0x10, 0xf9, 0x6b, 0x14, 0xc5, 0x3c, - 0x48, 0x63, 0x86, 0x43, 0x1e, 0x24, 0xd5, 0x51, 0x71, 0x1f, 0x89, 0x82, 0xcc, 0x4f, 0x5d, 0xd8, - 0xc6, 0x5c, 0x38, 0x1c, 0x1e, 0x0e, 0x85, 0x66, 0x64, 0x3a, 0xb8, 0x77, 0x6a, 0x1f, 0xca, 0xcf, - 0x89, 0x97, 0xaf, 0x15, 0xf9, 0xb9, 0xad, 0x4c, 0xc7, 0x88, 0x15, 0xac, 0x9b, 0x07, 0xbf, 0x2f, - 0xf0, 0xa5, 0xc5, 0x6f, 0xba, 0xa6, 0x7b, 0x55, 0x69, 0x3d, 0x57, 0xaf, 0x85, 0x25, 0xd5, 0xba, - 0xd0, 0xe8, 0x9b, 0x37, 0x7f, 0x34, 0x10, 0xfa, 0x56, 0x08, 0x7b, 0xbd, 0xdf, 0x89, 0x75, 0x8d, - 0x57, 0x89, 0x09, 0x5a, 0xdf, 0x64, 0xfe, 0x2b, 0x37, 0xd4, 0x28, 0xd4, 0x4e, 0x48, 0x0d, 0x3c, - 0x29, 0x2f, 0x91, 0x74, 0xef, 0x5f, 0x5a, 0xd2, 0x5b, 0x1e, 0x08, 0x09, 0x77, 0xf0, 0x61, 0x11, - 0x15, 0xdf, 0x37, 0x97, 0x71, 0x20, 0xa0, 0x15, 0xe5, 0x4b, 0xc5, 0xd4, 0x5d, 0x55, 0x6b, 0x3a, - 0x22, 0xc4, 0x84, 0x70, 0xd3, 0x82, 0x2f, 0x27, 0x57, 0xff, 0xf7, 0x77, 0x10, 0x24, 0x29, 0x9b, - 0xa9, 0x79, 0x7b, 0x60, 0x9d, 0x09, 0x45, 0xe0, 0xa8, 0x26, 0xc0, 0x18, 0x2a, 0x51, 0xf8, 0x4e, - 0x28, 0x99, 0x26, 0x2f, 0xcd, 0xc4, 0x88, 0x1b, 0x0e, 0xf2, 0x9e, 0x1a, 0x30, 0x30, 0x11, 0xac, - 0xe8, 0x67, 0x31, 0x20, 0x67, 0x82, 0xca, 0x58, 0xb9, 0x4b, 0x79, 0xe7, 0x90, 0xa9, 0x7a, 0x61, - 0x4a, 0x55, 0x46, 0x19, 0x45, 0x80, 0x7f, 0x92, 0xc7, 0x82, 0xc4, 0x89, 0x83, 0xe2, 0xfe, 0x24, - 0x20, 0x23, 0xbb, 0x70, 0xe6, 0x8e, 0xf7, 0xe1, 0x01, 0xf1, 0x0c, 0x05, 0x61, 0xd1, 0x96, 0xc2, - 0xcb, 0x22, 0xdc, 0x65, 0xcb, 0x4f, 0xe1, 0x01, 0x97, 0x0a, 0x2b, 0xa9, 0xc3, 0x70, 0x67, 0x67, - 0xb8, 0x9e, 0xb1, 0xae, 0xd8, 0x93, 0xc8, 0xd5, 0x6f, 0x8a, 0xf4, 0x6f, 0xbe, 0xac, 0xfb, 0xe4, - 0xab, 0xd8, 0x7e, 0x08, 0xb3, 0x33, 0x0f, 0x2a, 0x45, 0xf1, 0x9b, 0xd6, 0x29, 0xe2, 0x3c, 0xdc, - 0xd2, 0x0f, 0xe5, 0xd4, 0x92, 0x39, 0x7e, 0x7e, 0xe4, 0x63, 0xe4, 0x89, 0x86, 0x3c, 0xdf, 0x07, - 0x4a, 0x80, 0x37, 0xb0, 0xb1, 0xc6, 0x4f, 0x10, 0xef, 0xf9, 0x7a, 0x6f, 0x64, 0xe0, 0x93, 0x8e, - 0xe1, 0x20, 0x03, 0x4c, 0x2d, 0x4f, 0x97, 0x98, 0xa3, 0x40, 0xe2, 0x58, 0x19, 0x88, 0xab, 0xfc, - 0x16, 0xd5, 0xec, 0x53, 0xe7, 0xef, 0xc4, 0x88, 0x05, 0x72, 0xf5, 0x11, 0xc7, 0x59, 0xe0, 0x5b, - 0x96, 0x37, 0x4e, 0xfc, 0x48, 0x44, 0x5e, 0x8c, 0xf9, 0x0e, 0xe9, 0x3e, 0x11, 0x12, 0x08, 0xef, - 0x2e, 0x24, 0xe7, 0x83, 0x1f, 0x06, 0x04, 0xaa, 0xaa, 0xe2, 0x44, 0x05, 0x3b, 0xbc, 0xcc, 0x56, - 0xee, 0xf5, 0x0a, 0x8e, 0x0f, 0xe7, 0x8f, 0x08, 0x82, 0xa8, 0x93, 0xca, 0x65, 0x2f, 0x83, 0x27, - 0xd4, 0x07, 0x6b, 0x51, 0xbc, 0xaf, 0x89, 0xb6, 0x58, 0x4b, 0xda, 0xf2, 0x77, 0xc2, 0x36, 0x79, - 0x18, 0xa7, 0x04, 0xc8, 0x43, 0x81, 0x47, 0xd5, 0xac, 0xa7, 0xca, 0x7e, 0x27, 0x8f, 0xd5, 0x55, - 0x6a, 0x25, 0xff, 0x82, 0xd9, 0x64, 0x7c, 0x7b, 0x8a, 0xfe, 0xf8, 0x8d, 0xb2, 0xec, 0x19, 0xa0, - 0xc8, 0x66, 0xef, 0xba, 0x2c, 0x66, 0x51, 0xe2, 0x60, 0x9e, 0x95, 0xf0, 0x5d, 0x48, 0x21, 0x96, - 0x19, 0x7f, 0x0c, 0xc6, 0x64, 0xb1, 0xc3, 0x3e, 0x05, 0x54, 0xdf, 0x7f, 0x92, 0x75, 0x3f, 0xf3, - 0x7c, 0x32, 0x20, 0x65, 0x65, 0xdd, 0xec, 0x27, 0x57, 0xa2, 0x53, 0x28, 0xcb, 0xb3, 0xb0, 0xda, - 0xed, 0x92, 0x19, 0x12, 0x32, 0xef, 0x78, 0x8c, 0x5d, 0x23, 0x6f, 0x4a, 0xf1, 0x3f, 0x9d, 0x82, - 0xf7, 0xb1, 0x86, 0x44, 0x88, 0xe9, 0xcf, 0xfe, 0xe2, 0x8c, 0xac, 0x1e, 0xe0, 0xee, 0x6d, 0x6a, - 0x32, 0x26, 0xf3, 0x7f, 0xc5, 0x53, 0x6d, 0x62, 0xe2, 0xea, 0x29, 0xe1, 0x01, 0x21, 0x4c, 0x42, - 0x38, 0x78, 0x59, 0x54, 0x4d, 0x01, 0xdc, 0x17, 0xb9, 0x3f, 0x87, 0xb6, 0x77, 0x0b, 0xc5, 0x52, - 0x31, 0x71, 0x78, 0x88, 0xcf, 0xc6, 0xc3, 0xac, 0x0b, 0xc1, 0x71, 0x22, 0xc0, 0xe3, 0x43, 0xcc, - 0x98, 0x63, 0x87, 0x8e, 0xc9, 0xf1, 0xe1, 0x4c, 0xb1, 0xca, 0x3c, 0x49, 0xf4, 0xb0, 0x82, 0xca, - 0x73, 0x11, 0x68, 0x07, 0xe4, 0x0a, 0x71, 0x55, 0xfe, 0x19, 0x10, 0x14, 0x8a, 0xcb, 0x89, 0xca, - 0xc5, 0x89, 0x29, 0x24, 0x5b, 0x7a, 0x79, 0xc9, 0x06, 0xd0, 0x93, 0x82, 0xec, 0xf3, 0xf8, 0x92, - 0x6b, 0x5c, 0x48, 0x81, 0x99, 0xf2, 0xa9, 0xde, 0x1e, 0xb2, 0xab, 0x55, 0x19, 0x52, 0xf5, 0x55, - 0xf1, 0x03, 0xa9, 0x24, 0xe5, 0xa2, 0x5b, 0xad, 0x54, 0xbd, 0xc7, 0xf5, 0x3e, 0xaa, 0x60, 0xf1, - 0x01, 0x11, 0x30, 0x74, 0x7d, 0xcf, 0xf3, 0xc1, 0xf1, 0x90, 0x88, 0x87, 0x71, 0x47, 0x15, 0xf9, - 0x2b, 0x3e, 0x22, 0x3b, 0x6e, 0xe9, 0xb1, 0xd8, 0xf2, 0x77, 0xf3, 0x74, 0xcd, 0xd7, 0x0b, 0xef, - 0x79, 0x7e, 0xcd, 0x66, 0x87, 0xe2, 0x04, 0xb8, 0xaf, 0x15, 0xbe, 0x27, 0x0a, 0xe2, 0x25, 0xe0, - 0xaf, 0x45, 0x7e, 0x6f, 0x9a, 0x14, 0xfc, 0x48, 0x29, 0x04, 0x56, 0xd6, 0x4c, 0xc9, 0x8f, 0x08, - 0x93, 0x36, 0x57, 0x12, 0x24, 0x77, 0xa4, 0xb2, 0x66, 0x7b, 0xd4, 0xd9, 0xc4, 0x89, 0xb9, 0x85, - 0xdd, 0xfc, 0x48, 0x90, 0x87, 0x3b, 0xf5, 0x37, 0x8b, 0x55, 0xe2, 0x47, 0x6d, 0x35, 0x54, 0x7a, - 0x9b, 0xaa, 0xd1, 0xc9, 0x67, 0x12, 0x24, 0x29, 0xd5, 0x44, 0xb8, 0xeb, 0x96, 0x55, 0x56, 0x58, - 0x62, 0xea, 0x2e, 0x7d, 0xe0, 0xa4, 0x44, 0x19, 0xfc, 0x3f, 0xcd, 0x98, 0xb4, 0x07, 0xe9, 0x59, - 0xdf, 0x9e, 0xbe, 0xf2, 0xc2, 0x7e, 0x2b, 0xa6, 0xeb, 0x64, 0x99, 0x7b, 0xad, 0x78, 0x88, 0x53, - 0x44, 0x24, 0xe0, 0xea, 0xca, 0xa7, 0x17, 0x1e, 0xb0, 0x53, 0x3f, 0x87, 0x85, 0x80, 0xb5, 0x95, - 0x75, 0x15, 0x38, 0x88, 0xab, 0xac, 0xb9, 0x15, 0xb4, 0xd2, 0xc4, 0x17, 0xbb, 0x7e, 0x49, 0xb0, - 0x4f, 0xd2, 0xe2, 0x78, 0x91, 0x22, 0xb4, 0xeb, 0x9a, 0x10, 0xbf, 0x27, 0x77, 0x24, 0x20, 0x24, - 0x11, 0x62, 0x8d, 0xa4, 0xc5, 0xc4, 0xf1, 0x23, 0xef, 0x0b, 0xab, 0xb5, 0xbb, 0xbf, 0xe2, 0x24, - 0xcf, 0x9b, 0x88, 0xf7, 0xf8, 0x90, 0x9e, 0x68, 0x65, 0xe5, 0xdb, 0x5c, 0x48, 0x53, 0x24, 0x69, - 0xad, 0xd2, 0x27, 0x4e, 0xf1, 0x58, 0x87, 0x01, 0x61, 0x25, 0xa2, 0xaa, 0xf0, 0xb7, 0xa6, 0xb0, - 0x31, 0x44, 0xab, 0x13, 0x08, 0xea, 0x6e, 0x77, 0x9b, 0xd6, 0x3e, 0xfa, 0xcd, 0x85, 0xf2, 0xcf, - 0x38, 0x60, 0x10, 0xdc, 0x46, 0x5e, 0xef, 0x7f, 0x82, 0x7d, 0xb5, 0x3a, 0x46, 0xdd, 0xb6, 0xdf, - 0xe0, 0xab, 0xc7, 0x2b, 0x81, 0xb9, 0xf2, 0x10, 0x7e, 0x55, 0xf1, 0xf3, 0x58, 0xde, 0x20, 0x21, - 0xb9, 0x79, 0xb0, 0xcc, 0x6c, 0x82, 0xaa, 0xfe, 0xa9, 0x2f, 0x8f, 0x88, 0xf2, 0x60, 0xd8, 0x53, - 0xb9, 0xac, 0x47, 0xac, 0xcc, 0x47, 0x12, 0x20, 0x64, 0x32, 0xa6, 0x60, 0xf9, 0xe9, 0x9d, 0x39, - 0x99, 0x07, 0xa6, 0xd3, 0x33, 0x01, 0xc9, 0xe7, 0x9d, 0x11, 0x14, 0x22, 0x2e, 0x90, 0x47, 0xbd, - 0x41, 0xfe, 0x38, 0x78, 0x59, 0xcb, 0x04, 0x21, 0x11, 0x91, 0x26, 0x84, 0xca, 0xdb, 0x8a, 0xa3, - 0xde, 0x37, 0x56, 0x08, 0xd0, 0x15, 0x01, 0x6a, 0x51, 0x85, 0xee, 0x4c, 0x3d, 0xff, 0xc3, 0x44, - 0x85, 0x28, 0x15, 0x67, 0x82, 0x39, 0xd6, 0x63, 0x61, 0x88, 0x58, 0x5f, 0xf2, 0xcb, 0x7f, 0xe6, - 0xe2, 0xb2, 0xc7, 0x10, 0x20, 0x99, 0x71, 0x7c, 0x40, 0x40, 0xf5, 0x18, 0xef, 0xf8, 0xfe, 0x6a, - 0xd6, 0x33, 0x97, 0x7b, 0xbe, 0xaf, 0xf0, 0x5d, 0x57, 0x66, 0xfb, 0xb1, 0xc1, 0x40, 0x21, 0x72, - 0xa5, 0x8d, 0xa9, 0x22, 0x44, 0x71, 0x32, 0xf7, 0x73, 0xf1, 0x1d, 0x53, 0x24, 0x36, 0x6f, 0xe1, - 0x9e, 0x35, 0xed, 0x51, 0xcf, 0xfe, 0xb8, 0x46, 0xbb, 0xf2, 0xca, 0xf7, 0xe2, 0x05, 0xcb, 0xd9, - 0x3f, 0xe2, 0x1e, 0xdf, 0x84, 0x3c, 0x40, 0x81, 0x5e, 0x9a, 0xa4, 0x16, 0x28, 0x95, 0x7f, 0x10, - 0x21, 0xdd, 0xd3, 0x94, 0xfc, 0x76, 0x15, 0x1a, 0xb1, 0x91, 0x34, 0xcb, 0xd1, 0x7d, 0x63, 0xbf, - 0x5a, 0xbf, 0x89, 0xb3, 0xa1, 0xaa, 0x19, 0xa9, 0x57, 0xe1, 0x08, 0xfd, 0x35, 0xf8, 0x95, 0x59, - 0xa5, 0x1e, 0xad, 0x1f, 0xf9, 0x5e, 0x1b, 0xc4, 0x57, 0x10, 0x59, 0xbe, 0x2f, 0xf0, 0x40, 0x0a, - 0x7e, 0xf5, 0xaf, 0x11, 0x20, 0x55, 0x40, 0x99, 0xec, 0x0f, 0x7e, 0x2b, 0x6d, 0xff, 0xaf, 0xf1, - 0x36, 0x47, 0x7f, 0xc1, 0x3f, 0x8b, 0xba, 0x4f, 0x63, 0xc4, 0x04, 0x3a, 0x8b, 0xac, 0x56, 0x28, - 0xc9, 0x8a, 0x7b, 0xff, 0x04, 0xdb, 0xa7, 0x11, 0xc5, 0xfb, 0xe5, 0xaa, 0xaa, 0x9b, 0x8c, 0x94, - 0xd4, 0x49, 0xe2, 0xbb, 0xdd, 0xe7, 0xf7, 0xf1, 0x3c, 0x40, 0x8f, 0x9b, 0xa8, 0x9e, 0x78, 0x9a, - 0xaa, 0xaa, 0xe5, 0x71, 0x11, 0xdc, 0xf2, 0x4b, 0x35, 0x2e, 0xd2, 0xfc, 0x46, 0x2b, 0xb9, 0x7e, - 0xfe, 0x5a, 0xd2, 0x85, 0x62, 0x44, 0x4f, 0xc8, 0x55, 0xaf, 0x88, 0xf9, 0x2a, 0xb5, 0xc4, 0xfe, - 0x6e, 0x6c, 0xc5, 0x3f, 0xc9, 0x5d, 0x78, 0x97, 0xd5, 0x49, 0x13, 0x09, 0x91, 0xdf, 0xbd, 0xf1, - 0x35, 0xef, 0xba, 0xae, 0xf8, 0x43, 0xaa, 0xa9, 0xbe, 0xad, 0x2a, 0xac, 0x47, 0x89, 0x77, 0xbf, - 0x11, 0xf1, 0x02, 0xfb, 0xbe, 0xef, 0xc4, 0x04, 0x66, 0xf3, 0x37, 0xbb, 0xde, 0x0e, 0xfe, 0x3b, - 0x93, 0xf9, 0xb9, 0xdf, 0xea, 0x20, 0x4f, 0x89, 0x17, 0xe7, 0xc7, 0xdb, 0xf9, 0x77, 0x92, 0x21, - 0x68, 0x9f, 0x88, 0x9f, 0xf0, 0x87, 0xee, 0xab, 0x5f, 0x65, 0x5a, 0xcb, 0xcc, 0x4c, 0xfd, 0x2f, - 0x17, 0xad, 0x5e, 0x9b, 0xf9, 0x6e, 0xf9, 0xb1, 0x17, 0x10, 0x11, 0xf9, 0xb4, 0xeb, 0xe1, 0x0d, - 0x56, 0xab, 0x54, 0xde, 0x2b, 0xe2, 0x0d, 0xaa, 0x9b, 0xe2, 0x04, 0x92, 0xf4, 0xfc, 0x48, 0x9b, - 0xef, 0xbd, 0xc3, 0x90, 0xc0, 0x20, 0xbe, 0x52, 0xad, 0x6b, 0x8b, 0xad, 0x75, 0x55, 0x2c, 0x23, - 0x09, 0x91, 0x53, 0xf5, 0x5f, 0x17, 0x15, 0xfd, 0xdc, 0xf8, 0x91, 0x5d, 0x56, 0x4d, 0xff, 0xc4, - 0xfc, 0xdc, 0xd8, 0xab, 0x84, 0x2a, 0xb5, 0x5b, 0x75, 0x12, 0x72, 0x15, 0x2b, 0xe1, 0x2b, 0xee, - 0xc7, 0xb3, 0xb5, 0xe6, 0xde, 0xfe, 0x27, 0x5a, 0x97, 0xb9, 0x8d, 0xb0, 0xa6, 0x22, 0xf9, 0x2b, - 0x55, 0x38, 0x52, 0x50, 0x0d, 0x67, 0x39, 0xeb, 0xff, 0xdd, 0xbf, 0xf1, 0x64, 0xad, 0x55, 0x55, - 0x32, 0x72, 0x0b, 0xd5, 0x45, 0x72, 0x0a, 0x7b, 0xde, 0x20, 0x5d, 0xb2, 0xf9, 0x58, 0x3c, 0x1d, - 0x8f, 0xfc, 0x25, 0x17, 0x52, 0x7d, 0xdb, 0xb7, 0xe2, 0x77, 0x77, 0x79, 0xfb, 0x7e, 0x49, 0xa2, - 0x3b, 0x74, 0xdd, 0xfd, 0xd9, 0xe7, 0xf1, 0x10, 0xe7, 0x7a, 0xaa, 0xbe, 0x09, 0x2b, 0xaf, 0x49, - 0x08, 0x08, 0x8b, 0xe5, 0xdd, 0x67, 0xff, 0x36, 0xf1, 0x58, 0x4f, 0x11, 0x12, 0x7e, 0x12, 0x88, - 0xfc, 0xb7, 0x7c, 0x02, 0x47, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x3a, 0x1d, 0x30, 0x52, 0x1b, - 0xc5, 0x6f, 0x7b, 0xdf, 0xcb, 0x7b, 0xc1, 0x5f, 0x13, 0xdd, 0xdd, 0xf7, 0xcb, 0x7b, 0xcd, 0x0c, - 0x42, 0x17, 0x77, 0xbb, 0xde, 0x6e, 0x5e, 0xef, 0x88, 0x10, 0x32, 0xd3, 0x35, 0x73, 0xf2, 0xfb, - 0x72, 0xfc, 0xc5, 0x77, 0x6f, 0x10, 0x20, 0x29, 0x54, 0xee, 0xef, 0xae, 0x2e, 0xaa, 0xa4, 0xf1, - 0x7c, 0x5f, 0x76, 0xf5, 0x50, 0x4d, 0xd0, 0x47, 0xa3, 0x21, 0x80, 0xc8, 0xe0, 0x82, 0xaf, 0x53, - 0xfc, 0x5c, 0x71, 0x57, 0xf1, 0xf4, 0x3b, 0xd0, 0x9f, 0xd0, 0xe0, 0xd3, 0x2a, 0x05, 0xa5, 0x88, - 0x12, 0x11, 0xcd, 0xea, 0xfa, 0xaa, 0xaa, 0xe2, 0x23, 0xa5, 0xee, 0x63, 0x59, 0xd0, 0xf5, 0x99, - 0x8c, 0x47, 0xe2, 0x35, 0x5d, 0x64, 0xcc, 0x45, 0xcd, 0x8b, 0x3f, 0x2f, 0x36, 0x13, 0x82, 0xae, - 0x4b, 0xbe, 0x4e, 0x62, 0xae, 0xb0, 0xf1, 0x08, 0x00, 0x62, 0x52, 0xdf, 0xeb, 0xf6, 0x56, 0xf0, - 0xb3, 0xa5, 0x26, 0xce, 0x75, 0x7e, 0x4f, 0x4b, 0xfe, 0xb8, 0x88, 0x46, 0xa4, 0xeb, 0x2a, 0xbe, - 0xb5, 0x85, 0xb0, 0x08, 0x9a, 0xed, 0xc4, 0xaf, 0xd6, 0x8f, 0xf6, 0xfc, 0x17, 0x56, 0x62, 0xea, - 0xa9, 0xa5, 0xea, 0xe8, 0xef, 0x51, 0x10, 0x42, 0x61, 0x5d, 0xfd, 0xc2, 0x02, 0x0b, 0x36, 0x68, - 0x81, 0x6c, 0x47, 0x88, 0x12, 0x09, 0x6d, 0x0f, 0xe4, 0x34, 0xb4, 0x0e, 0xec, 0xf0, 0xb7, 0xf8, - 0x22, 0xbe, 0xdb, 0xd4, 0x21, 0xe2, 0x26, 0xae, 0x8d, 0xc4, 0x08, 0x2f, 0x77, 0xc4, 0xdd, 0x57, - 0xf3, 0x72, 0xe0, 0xef, 0xb0, 0x80, 0x40, 0xbf, 0x36, 0x61, 0x00, 0x84, 0x15, 0xe2, 0x42, 0x77, - 0xbd, 0x2b, 0xf1, 0x22, 0x41, 0x45, 0xf7, 0xc5, 0x76, 0x3c, 0x47, 0x88, 0xf8, 0xfa, 0xae, 0x6a, - 0x69, 0x8e, 0xa1, 0xb9, 0x3a, 0xa9, 0xa7, 0x76, 0x31, 0x31, 0x94, 0xc4, 0x34, 0x69, 0x06, 0xf7, - 0x4e, 0xa7, 0xa3, 0x7b, 0x68, 0x46, 0xfc, 0x40, 0xbe, 0xaa, 0xf4, 0x4e, 0xb9, 0x0a, 0x93, 0xf8, - 0x81, 0x02, 0x08, 0xa2, 0x74, 0xdd, 0x42, 0x6f, 0xbf, 0x84, 0xec, 0xcf, 0x78, 0xac, 0xfc, 0xfc, - 0xdd, 0x36, 0xc1, 0x1f, 0x2d, 0xdb, 0xfc, 0x25, 0x88, 0x7e, 0xb5, 0xf8, 0x25, 0xbb, 0xa6, 0x2a, - 0x8f, 0x8f, 0x6e, 0xff, 0x05, 0x37, 0x7c, 0x56, 0xfe, 0xd1, 0xb2, 0xff, 0x25, 0xf3, 0x31, 0x89, - 0x12, 0x08, 0xb3, 0xe9, 0xbc, 0xb7, 0x88, 0x08, 0x6d, 0xbf, 0x2d, 0x1d, 0x75, 0xc4, 0x89, 0x04, - 0xd7, 0x9f, 0x49, 0xa9, 0xdb, 0xd9, 0xc4, 0x89, 0x25, 0x45, 0xfc, 0x4f, 0x84, 0x04, 0x08, 0xdd, - 0xc7, 0x6e, 0x3d, 0xf9, 0xc4, 0x09, 0x1d, 0xc4, 0x9c, 0x5d, 0x99, 0xb0, 0x47, 0x0b, 0xfc, 0x40, - 0x45, 0xcd, 0x40, 0x7d, 0x85, 0xf8, 0x9e, 0x08, 0x69, 0xd6, 0xe0, 0x11, 0xc4, 0xc1, 0x3d, 0xee, - 0x7e, 0x2b, 0xbb, 0xbf, 0xc2, 0x19, 0x29, 0xb4, 0xbb, 0xda, 0xf8, 0x4b, 0x7b, 0xdd, 0x5a, 0xc4, - 0xc4, 0x66, 0xf5, 0xaa, 0xfc, 0x76, 0x76, 0xde, 0xca, 0xf7, 0xfb, 0x9f, 0x79, 0x22, 0x04, 0x78, - 0x60, 0x13, 0x6b, 0x37, 0xa9, 0xa2, 0xda, 0xf6, 0x16, 0x89, 0x6f, 0xff, 0xfb, 0x9b, 0x82, 0x71, - 0x19, 0x70, 0x43, 0x8f, 0x6c, 0x19, 0x66, 0x95, 0x78, 0x53, 0xbb, 0xbb, 0xdc, 0xfe, 0xd7, 0xca, - 0x57, 0xe7, 0x72, 0xdb, 0xbf, 0xc4, 0xea, 0x95, 0xe2, 0xb8, 0x77, 0x9b, 0xbb, 0x9e, 0x26, 0x3f, - 0x19, 0x68, 0xf7, 0xbc, 0x55, 0x46, 0x97, 0x12, 0x0c, 0x02, 0x90, 0x50, 0x75, 0x09, 0x80, 0xd0, - 0x9c, 0x65, 0x1c, 0x6e, 0x31, 0x5a, 0x83, 0x33, 0xc5, 0x82, 0xa2, 0x68, 0x16, 0xaa, 0x50, 0x78, - 0xf3, 0x3d, 0xe7, 0x32, 0x76, 0x3b, 0xdf, 0x89, 0x04, 0x01, 0x4b, 0xee, 0xa9, 0x63, 0xb6, 0x5d, - 0x26, 0x62, 0xb8, 0x6f, 0xad, 0x56, 0xad, 0x5c, 0x9e, 0x5d, 0xf0, 0x5d, 0xca, 0xc7, 0x97, 0x2b, - 0xc4, 0x17, 0x8e, 0x34, 0x7e, 0x14, 0x8b, 0xaa, 0xd5, 0x75, 0xcd, 0x0c, 0x98, 0x58, 0x16, 0xe1, - 0x18, 0x27, 0x85, 0x5c, 0x83, 0xbc, 0xb2, 0x36, 0xac, 0x04, 0xd8, 0x40, 0x37, 0x10, 0x45, 0x48, - 0x3f, 0x4e, 0x6f, 0x82, 0x9b, 0x1e, 0x2d, 0x2c, 0x09, 0x44, 0xcf, 0xf5, 0x55, 0xdb, 0xaf, 0xcb, - 0x4d, 0xc9, 0x15, 0xb6, 0x7c, 0xad, 0x71, 0xfd, 0x99, 0xd0, 0x8f, 0x97, 0x95, 0x23, 0x5f, 0xbc, - 0x1d, 0xe0, 0x97, 0x82, 0xa9, 0x33, 0xa0, 0x7e, 0x25, 0xf3, 0xbe, 0x57, 0x2f, 0x24, 0x9d, 0x4e, - 0xf8, 0xcd, 0x95, 0x85, 0xd9, 0x04, 0xc0, 0x35, 0xf4, 0x9f, 0x19, 0xcf, 0x0e, 0x5d, 0xbc, 0x22, - 0x10, 0x05, 0x5a, 0xb8, 0x56, 0xc9, 0x45, 0xfb, 0x8a, 0xee, 0xde, 0x20, 0x25, 0x93, 0x32, 0xe7, - 0xf8, 0x42, 0x92, 0x5b, 0xea, 0xee, 0xbf, 0x35, 0xf3, 0x7f, 0x26, 0xeb, 0xc4, 0xc6, 0x64, 0x62, - 0x3c, 0x80, 0x40, 0xb0, 0x8e, 0xc6, 0x78, 0xa5, 0x00, 0xf0, 0xd5, 0x75, 0x42, 0xf4, 0xd5, 0x75, - 0x75, 0x0e, 0x8c, 0x4b, 0xf0, 0x57, 0x67, 0xcd, 0x9f, 0x2b, 0x9b, 0x17, 0x29, 0xfa, 0xb0, 0x7c, - 0x15, 0x59, 0x3d, 0x91, 0xea, 0xd4, 0xa0, 0x36, 0x57, 0xbf, 0xc5, 0xeb, 0x3e, 0x2d, 0xde, 0x1f, - 0xef, 0x7b, 0x97, 0x82, 0x59, 0x7d, 0xf3, 0xff, 0x5f, 0x26, 0xb5, 0xf1, 0x45, 0xad, 0x77, 0x7e, - 0x10, 0x21, 0x1e, 0xbe, 0x10, 0x57, 0xf0, 0x80, 0x22, 0xf1, 0x7a, 0xf0, 0x80, 0x22, 0xca, 0xa8, - 0xbb, 0xf8, 0x80, 0x55, 0xa8, 0xc2, 0xd2, 0x91, 0x73, 0x31, 0x35, 0xa6, 0x2e, 0x1c, 0x4c, 0xbc, - 0x94, 0x9b, 0x9a, 0x56, 0x15, 0xba, 0xe0, 0xb2, 0xba, 0xaa, 0xd2, 0x99, 0x86, 0x38, 0xbb, 0xe5, - 0xb6, 0xad, 0xfc, 0x23, 0xb6, 0x95, 0xe9, 0xdb, 0xdb, 0xf2, 0xd5, 0xb5, 0x82, 0x38, 0x89, 0x24, - 0xed, 0xf1, 0x4e, 0x72, 0x38, 0x40, 0x31, 0xc4, 0x88, 0x04, 0x74, 0xda, 0x17, 0x58, 0xb8, 0x99, - 0x66, 0xeb, 0xf0, 0xc7, 0x89, 0xf8, 0xce, 0xaf, 0x6e, 0x2f, 0x72, 0xd1, 0xb4, 0x40, 0xd4, 0x9d, - 0x57, 0x48, 0x4f, 0x25, 0xf5, 0xf1, 0xd3, 0xfb, 0xa3, 0x5a, 0xcd, 0x42, 0xe2, 0xd4, 0x1b, 0xee, - 0xed, 0xe2, 0x79, 0xb7, 0xbe, 0x24, 0x40, 0x25, 0x85, 0xb8, 0xc9, 0x34, 0xe7, 0xdf, 0x7f, 0x08, - 0x17, 0x5a, 0xf8, 0x8b, 0xbf, 0x17, 0xfc, 0x44, 0x5d, 0x55, 0x45, 0xd5, 0x57, 0x88, 0x26, 0x6f, - 0xac, 0x48, 0x53, 0x55, 0x59, 0x52, 0x8c, 0xe5, 0xa8, 0xd6, 0x72, 0xf7, 0x60, 0xe7, 0x94, 0x61, - 0x5e, 0x5b, 0x1f, 0x0a, 0x4e, 0xe4, 0x50, 0xde, 0xe1, 0xc2, 0x03, 0x6f, 0x6b, 0x7c, 0xea, 0xd7, - 0x11, 0xf0, 0x60, 0x76, 0x54, 0xdc, 0xe2, 0x3f, 0x13, 0xcd, 0x71, 0x59, 0x48, 0x3f, 0x10, 0x0a, - 0xae, 0x3a, 0xc9, 0x28, 0xb1, 0x36, 0x23, 0x95, 0x9b, 0xd8, 0xc5, 0x51, 0xc7, 0x06, 0xe1, 0x4b, - 0x6d, 0x1b, 0x9f, 0xcc, 0xd9, 0x90, 0xd5, 0x36, 0x49, 0x92, 0xf9, 0x50, 0x24, 0x92, 0xf1, 0x77, - 0xdd, 0x63, 0xd8, 0x33, 0x2b, 0x1d, 0xe0, 0x8e, 0xaa, 0x0b, 0xfc, 0x05, 0x9e, 0xe7, 0x29, 0x79, - 0x78, 0x58, 0x72, 0x25, 0x54, 0x77, 0x37, 0x55, 0x2c, 0x48, 0x97, 0xbb, 0xfc, 0x55, 0x75, 0x6d, - 0x75, 0xc9, 0xad, 0x7d, 0xd7, 0x72, 0x62, 0x07, 0xd5, 0x36, 0x34, 0xb7, 0x76, 0x3b, 0xfc, 0x5c, - 0x1f, 0xe4, 0x7f, 0xef, 0xbc, 0x43, 0x41, 0xbf, 0x71, 0x22, 0xfa, 0x16, 0x59, 0x3d, 0x6f, 0x48, - 0x03, 0xc4, 0x53, 0x8f, 0x98, 0x88, 0xbd, 0x62, 0xe8, 0xd7, 0x12, 0x25, 0xea, 0xfe, 0x11, 0x05, - 0x97, 0x3d, 0x5e, 0xbe, 0x5e, 0xed, 0xb5, 0x89, 0xce, 0x3c, 0x29, 0x50, 0x62, 0xa8, 0x4e, 0xee, - 0xc4, 0x81, 0xcb, 0x3a, 0x33, 0xad, 0xf7, 0x77, 0x25, 0x3d, 0x27, 0xf8, 0x52, 0x39, 0x99, 0xdc, - 0x71, 0x26, 0x0e, 0xc8, 0x07, 0x79, 0x49, 0x7d, 0x46, 0x12, 0xea, 0x84, 0x4e, 0x2f, 0x15, 0x7c, - 0x55, 0xec, 0x1a, 0xaa, 0xbb, 0x5e, 0x23, 0x69, 0x49, 0xac, 0xd6, 0xfe, 0xbd, 0x13, 0xd7, 0xbe, - 0x09, 0x29, 0x9f, 0x62, 0x7c, 0x04, 0x5c, 0x23, 0x19, 0xac, 0x5e, 0x4e, 0x98, 0x93, 0x24, 0xd9, - 0x3a, 0x02, 0x8d, 0xeb, 0x84, 0x44, 0x02, 0xbe, 0x2b, 0xb2, 0xe5, 0x3f, 0x49, 0x35, 0x5e, 0x57, - 0xc5, 0x6f, 0x7b, 0xdf, 0x08, 0x89, 0x11, 0x77, 0x77, 0x84, 0x76, 0xcd, 0x6b, 0x18, 0x44, 0x48, - 0x8e, 0x3c, 0xdd, 0x09, 0xe2, 0xb4, 0x47, 0xc0, 0x8f, 0x75, 0xac, 0x57, 0x05, 0x59, 0xba, 0xd7, - 0x9e, 0x1a, 0x8b, 0xad, 0xde, 0x24, 0x16, 0x7a, 0x41, 0xea, 0xb2, 0xd5, 0x7a, 0x92, 0x8e, 0x78, - 0x90, 0xa6, 0x4a, 0xd5, 0x09, 0x6d, 0x0e, 0xa2, 0xff, 0xaf, 0x16, 0xe6, 0x72, 0xbe, 0xcf, 0x4e, - 0x66, 0x24, 0xb5, 0x77, 0x4e, 0xb1, 0x21, 0x10, 0x55, 0x20, 0x7a, 0x4c, 0x17, 0xe3, 0xe2, 0xc9, - 0xc5, 0x4f, 0x71, 0xf5, 0x9a, 0xad, 0xdf, 0x04, 0xd7, 0xac, 0x99, 0x65, 0x6e, 0x26, 0x3b, 0xaa, - 0xcb, 0x8b, 0xee, 0x68, 0xf1, 0x02, 0x37, 0x77, 0x8e, 0x78, 0x57, 0x7e, 0x33, 0x93, 0x17, 0xde, - 0xe9, 0x6a, 0xee, 0xbf, 0x13, 0x7b, 0xcf, 0xbc, 0x64, 0x4c, 0x7e, 0x7f, 0xa6, 0xba, 0x9c, 0xde, - 0x6e, 0x9f, 0x11, 0xf0, 0x96, 0xef, 0x37, 0xd1, 0xae, 0x5d, 0x53, 0x75, 0xc1, 0x37, 0x76, 0xb6, - 0xd2, 0x7a, 0xe5, 0x83, 0x2a, 0x99, 0x4a, 0xa6, 0x1a, 0xc2, 0x20, 0x93, 0x7b, 0xbf, 0xc1, 0x5f, - 0x37, 0xf1, 0x3c, 0xb4, 0xb3, 0x7e, 0xe2, 0x60, 0xaf, 0x7b, 0x54, 0x94, 0xd8, 0x92, 0xc6, 0xcb, - 0xbe, 0x6e, 0xad, 0xf8, 0xea, 0xb2, 0xa2, 0x4a, 0xfa, 0xab, 0x2f, 0x11, 0x58, 0x15, 0xeb, 0x5e, - 0x11, 0x04, 0xb8, 0xf2, 0xf6, 0x71, 0x54, 0xa9, 0x33, 0xe3, 0xe7, 0xc6, 0xd2, 0x2f, 0xbb, 0xbb, - 0xfe, 0xf8, 0xae, 0x33, 0x08, 0x0b, 0xaa, 0xf5, 0xa5, 0x88, 0x85, 0x3a, 0xab, 0xa9, 0xb1, 0xd8, - 0x2e, 0xc9, 0x54, 0x93, 0xe2, 0xfc, 0x5c, 0xa0, 0xf8, 0xea, 0x85, 0xb4, 0x99, 0xf2, 0xe0, 0xe2, - 0x09, 0x9f, 0x10, 0x23, 0x36, 0x3e, 0x2e, 0x4c, 0xf1, 0x3f, 0x93, 0x1c, 0xec, 0xe2, 0x22, 0xae, - 0x99, 0x58, 0xca, 0xc7, 0xc4, 0xcd, 0x55, 0xfd, 0xd4, 0x2f, 0xc2, 0x1c, 0xd7, 0xdb, 0x15, 0xd5, - 0xfc, 0x4b, 0xd2, 0x1b, 0x4a, 0xf8, 0x9e, 0x22, 0x3f, 0x5a, 0xd5, 0xf3, 0xc1, 0x6a, 0xe2, 0x42, - 0x39, 0x69, 0x46, 0xe3, 0xac, 0x8d, 0x95, 0x0c, 0x74, 0x64, 0xcc, 0xaa, 0x9f, 0x84, 0x75, 0x54, - 0xc9, 0x2e, 0xc8, 0x9f, 0xe4, 0xe2, 0xf5, 0xb7, 0xaa, 0x9b, 0x9e, 0xbf, 0xc5, 0xfc, 0x3d, 0xe2, - 0xb1, 0xdc, 0x13, 0x0c, 0xa4, 0x23, 0x52, 0xaa, 0xf5, 0x5c, 0xba, 0x0b, 0xe1, 0xf9, 0xfd, 0x9f, - 0x10, 0x33, 0xa5, 0x89, 0xe6, 0x4e, 0xa4, 0xfa, 0x91, 0x89, 0x21, 0xf8, 0x23, 0x9f, 0xde, 0x9c, - 0xbe, 0x14, 0x91, 0x42, 0xea, 0x8a, 0xa6, 0x64, 0x5f, 0x19, 0x4c, 0xf4, 0xaa, 0x66, 0x05, 0xcf, - 0x34, 0xcb, 0xc4, 0x04, 0x77, 0xa1, 0x9d, 0x45, 0x9f, 0x1e, 0x8c, 0x05, 0xf4, 0xb3, 0x2e, 0xfa, - 0xf1, 0x78, 0x88, 0xdb, 0xa0, 0xe2, 0xb7, 0xf1, 0x05, 0x97, 0xb6, 0xef, 0xe2, 0xab, 0x55, 0xcb, - 0x9e, 0x23, 0x88, 0x85, 0xa7, 0xf6, 0xed, 0xc7, 0xe9, 0x80, 0x15, 0x64, 0x87, 0xc3, 0xd1, 0x22, - 0x59, 0x62, 0xfa, 0x88, 0x97, 0x69, 0x03, 0x17, 0x5c, 0xd9, 0xf3, 0x7c, 0xc4, 0xd5, 0x7c, 0xbc, - 0xd8, 0xa6, 0xe0, 0x97, 0x8d, 0x65, 0xb3, 0x1e, 0xaa, 0xc3, 0x5c, 0xa5, 0xf1, 0x5d, 0x53, 0x49, - 0xc7, 0xb3, 0x8f, 0x88, 0x09, 0x5f, 0x4e, 0xeb, 0xf1, 0x22, 0x74, 0xaa, 0xaa, 0x97, 0xcd, 0xe3, - 0x74, 0xc4, 0x5d, 0xb5, 0xf1, 0x12, 0x47, 0xc7, 0x28, 0x65, 0x6f, 0x71, 0xf8, 0x98, 0x4f, 0x50, - 0xdc, 0xed, 0xac, 0xd2, 0x5f, 0x89, 0xdd, 0xee, 0x33, 0x2a, 0xfc, 0x1f, 0xc9, 0xad, 0x4d, 0x13, - 0x8a, 0x15, 0x28, 0xd4, 0xd4, 0x28, 0x48, 0x4b, 0xa6, 0xa7, 0xa6, 0x9f, 0xfe, 0xb9, 0xba, 0xab, - 0xe4, 0x25, 0x52, 0x49, 0x72, 0x5a, 0x71, 0x71, 0xc5, 0xc4, 0xc1, 0x0d, 0xf5, 0x3b, 0xfc, 0xbc, - 0x5e, 0x6e, 0xea, 0xf7, 0xf2, 0x5d, 0xfc, 0x47, 0xe6, 0xd5, 0x43, 0xc7, 0xe5, 0x88, 0x25, 0xc2, - 0xcf, 0x81, 0xae, 0xd4, 0xab, 0x34, 0x2e, 0x6e, 0xee, 0x1a, 0x89, 0xf1, 0x3a, 0xe1, 0x33, 0xaa, - 0xeb, 0x5f, 0x96, 0xaa, 0xbc, 0x4f, 0xe4, 0xd6, 0xab, 0x8e, 0xea, 0xb5, 0x5d, 0x55, 0x46, 0x71, - 0x46, 0x27, 0x7e, 0xf7, 0xf2, 0xde, 0xfe, 0x21, 0xc5, 0xeb, 0xc4, 0x42, 0x7c, 0xd9, 0xba, 0x06, - 0xf8, 0x8f, 0xc7, 0xd6, 0x2f, 0x77, 0xb5, 0x55, 0xf9, 0xb7, 0xba, 0xc4, 0x84, 0xae, 0x2b, 0xec, - 0xe7, 0xcf, 0x5e, 0x82, 0x0c, 0x4d, 0x72, 0x1d, 0x57, 0x27, 0x66, 0x55, 0x58, 0x9e, 0x5d, 0x6b, - 0x89, 0x12, 0x6d, 0xc5, 0xd0, 0xff, 0x88, 0xfc, 0x98, 0xad, 0x4b, 0xfc, 0x25, 0x71, 0x5e, 0xdd, - 0xbf, 0x12, 0x2b, 0x7b, 0xee, 0xe1, 0xde, 0x84, 0xb4, 0xdc, 0x56, 0xab, 0x5d, 0xd7, 0x7a, 0xd5, - 0xe2, 0x18, 0x87, 0x7c, 0xfc, 0x96, 0x95, 0x7e, 0x6d, 0xdf, 0xe3, 0xee, 0xfc, 0xac, 0x36, 0xba, - 0xe6, 0x37, 0x7e, 0x24, 0x15, 0xda, 0x15, 0x50, 0xad, 0xdb, 0x5b, 0x4d, 0xd3, 0x2c, 0x40, 0x90, - 0x95, 0x56, 0xa6, 0xdb, 0x0f, 0xe6, 0xe3, 0x98, 0x6c, 0x7c, 0x5c, 0xd1, 0xc7, 0xcf, 0x06, 0xd7, - 0x2e, 0x6f, 0x82, 0xfe, 0x4b, 0xb7, 0xa8, 0x88, 0x4a, 0xa9, 0x76, 0xed, 0xf1, 0x01, 0x2d, 0x6a, - 0x87, 0x1b, 0xa5, 0x1e, 0x20, 0x48, 0x8f, 0x2f, 0x3f, 0xd4, 0xd7, 0x5b, 0x58, 0xe2, 0x5d, 0xac, - 0x2b, 0xe9, 0x3c, 0x4c, 0x33, 0x13, 0x9b, 0xbe, 0xaa, 0x16, 0xc4, 0x12, 0xf7, 0xac, 0x4c, 0x16, - 0xf3, 0x6e, 0xff, 0x7d, 0xdc, 0x02, 0x47, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x3b, 0x1d, 0xb0, - 0x88, 0x9c, 0xd7, 0x7b, 0x89, 0xe5, 0xea, 0xd7, 0x94, 0xad, 0x49, 0xae, 0x0b, 0x78, 0xfa, 0x77, - 0x72, 0xfe, 0xe9, 0x34, 0xee, 0xb9, 0x77, 0xb9, 0x39, 0x89, 0x17, 0x51, 0x21, 0xf8, 0x42, 0x0a, - 0x4c, 0xec, 0x1b, 0xd6, 0x6e, 0x4e, 0xfb, 0xc7, 0x38, 0x88, 0xfa, 0x6d, 0xc7, 0x7b, 0x77, 0xbf, - 0x11, 0x05, 0x13, 0x75, 0xaa, 0xef, 0xdf, 0x09, 0x09, 0xc4, 0xe0, 0xb8, 0x54, 0x57, 0xf1, 0x9d, - 0xdd, 0xef, 0x68, 0x7b, 0x52, 0x7a, 0x97, 0xaf, 0x9b, 0x3c, 0x5f, 0x0c, 0xb7, 0x55, 0xa3, 0x31, - 0x72, 0x5b, 0x70, 0x55, 0xcb, 0xcd, 0x89, 0x78, 0x46, 0xfb, 0xe5, 0xcb, 0xde, 0x58, 0x88, 0x44, - 0x45, 0x8e, 0x76, 0x54, 0x8c, 0x49, 0xd7, 0x6c, 0x52, 0xc4, 0x41, 0x51, 0x5d, 0x8d, 0xfe, 0xa6, - 0x49, 0x0e, 0xdc, 0x6e, 0xab, 0xb9, 0x4a, 0x3b, 0xf1, 0x02, 0x42, 0x13, 0x10, 0x7a, 0xaa, 0xd5, - 0x56, 0x6f, 0xe1, 0x22, 0x3b, 0xea, 0x22, 0xc4, 0x73, 0x84, 0x21, 0x41, 0x3e, 0x2e, 0x68, 0x25, - 0x2d, 0x54, 0xcc, 0x6a, 0x2e, 0xba, 0xfa, 0x33, 0xfc, 0x74, 0x9b, 0x4f, 0x5b, 0xdd, 0x45, 0xff, - 0x27, 0x77, 0x5d, 0x04, 0xfa, 0x09, 0xf8, 0xe3, 0x2a, 0xf6, 0xa9, 0xaa, 0xfe, 0x61, 0x8f, 0xb9, - 0x38, 0xa1, 0x35, 0x8b, 0xea, 0x6f, 0xc2, 0x22, 0x05, 0x56, 0x44, 0x8d, 0x65, 0x91, 0x83, 0xf8, - 0x80, 0x52, 0x56, 0xe6, 0xd5, 0x49, 0xfb, 0x77, 0x7f, 0x84, 0xc9, 0x5a, 0xd5, 0x57, 0x13, 0x19, - 0x24, 0x25, 0x49, 0xf5, 0x55, 0x26, 0xd1, 0x67, 0x57, 0x4b, 0xc1, 0x20, 0xbd, 0xdd, 0xfc, 0x20, - 0xbd, 0xf0, 0x44, 0x49, 0x9b, 0xbd, 0x72, 0x91, 0x03, 0xaa, 0x82, 0x9e, 0x42, 0xbe, 0xef, 0x98, - 0xf5, 0xae, 0x20, 0x22, 0x41, 0x11, 0x3c, 0x88, 0xe6, 0x20, 0x40, 0x52, 0x99, 0xc8, 0x2c, 0x1d, - 0x80, 0x9e, 0xe2, 0xb6, 0xd3, 0x6d, 0x5d, 0xdd, 0xf5, 0xf1, 0x1a, 0x06, 0xe8, 0x7a, 0x19, 0x98, - 0x85, 0xdc, 0x01, 0xd6, 0x91, 0xd3, 0xdf, 0x76, 0x5d, 0x8b, 0x46, 0xee, 0x3d, 0xda, 0xea, 0x4b, - 0xf1, 0x02, 0x01, 0x65, 0xdf, 0xaa, 0xd5, 0x6a, 0xfc, 0x44, 0x15, 0xcf, 0x92, 0xdb, 0x26, 0x7f, - 0xd5, 0xcb, 0x95, 0xc2, 0x1f, 0x08, 0x18, 0xbb, 0x9d, 0x8f, 0x14, 0x47, 0xbf, 0x77, 0xc4, 0x08, - 0x21, 0x32, 0x67, 0x10, 0x20, 0x5f, 0x46, 0x5a, 0x65, 0xc1, 0x0e, 0x62, 0x02, 0x06, 0xb6, 0x26, - 0xc0, 0xf2, 0xce, 0x20, 0x47, 0xd0, 0x45, 0xe0, 0x9b, 0xb3, 0x5d, 0x27, 0x71, 0x22, 0x05, 0x0a, - 0x5d, 0x3d, 0x37, 0xf0, 0xa1, 0xdd, 0xdd, 0xc4, 0xb8, 0x5b, 0xdc, 0x2c, 0xe9, 0x59, 0x79, 0xa9, - 0x1b, 0xa7, 0xbf, 0x13, 0x0a, 0x4b, 0x8e, 0xb7, 0xaa, 0xbb, 0x06, 0x50, 0xc0, 0x62, 0x77, 0x97, - 0x1b, 0xfc, 0xff, 0x19, 0x29, 0x0c, 0xd6, 0xc6, 0xab, 0x26, 0x6d, 0x2d, 0xb9, 0x25, 0xf8, 0xc2, - 0x62, 0xb8, 0x3e, 0x26, 0x13, 0xde, 0xad, 0x17, 0xa2, 0xbc, 0x23, 0x05, 0x06, 0x6d, 0x55, 0x27, - 0x77, 0x15, 0xf7, 0x89, 0x19, 0x71, 0x59, 0x79, 0xcb, 0x0f, 0xaf, 0x9e, 0x1f, 0x69, 0x78, 0x80, - 0x9f, 0x77, 0xd3, 0x7f, 0x18, 0x25, 0xdd, 0xdd, 0xef, 0x77, 0xbb, 0xbf, 0xe0, 0x84, 0xae, 0xfb, - 0xf8, 0x80, 0x4a, 0x21, 0x20, 0xfd, 0x2f, 0x3b, 0x9f, 0xdf, 0x21, 0x24, 0x47, 0xd7, 0x10, 0x22, - 0x6c, 0x45, 0x05, 0xd8, 0x47, 0xff, 0x87, 0x07, 0xdf, 0xde, 0x08, 0xb8, 0xa0, 0x83, 0xba, 0x59, - 0x73, 0xf1, 0x85, 0x1a, 0x66, 0xaf, 0xcb, 0x35, 0x24, 0x7d, 0xa3, 0x64, 0xb6, 0x10, 0xb7, 0x4b, - 0x9e, 0x44, 0xa9, 0x7c, 0x40, 0xbb, 0xea, 0x6e, 0xec, 0xf3, 0x89, 0x13, 0xf0, 0x51, 0x17, 0xaa, - 0x35, 0x45, 0xf5, 0x62, 0x44, 0x91, 0xe5, 0x4a, 0xe9, 0x1f, 0x9f, 0x3e, 0x24, 0x45, 0x55, 0xea, - 0x6e, 0x94, 0xf8, 0xae, 0xa2, 0xe6, 0xf9, 0xbd, 0x44, 0x09, 0x11, 0xc5, 0xd6, 0xf5, 0xe2, 0x68, - 0x41, 0x34, 0x2d, 0x05, 0x53, 0x72, 0x4e, 0x82, 0x5d, 0xf0, 0x86, 0x6c, 0x71, 0xea, 0x7f, 0x3f, - 0xae, 0x2f, 0xcf, 0x0b, 0x27, 0xf8, 0xbb, 0x2b, 0xe8, 0xd0, 0xcd, 0x00, 0xc7, 0x77, 0xbf, 0xcb, - 0xe2, 0xfe, 0x11, 0xba, 0x4e, 0xf7, 0xbb, 0xee, 0x4e, 0xf3, 0xe6, 0xb8, 0xcd, 0xcf, 0x84, 0xaa, - 0xbb, 0xba, 0xf5, 0xba, 0xdc, 0xf8, 0xf8, 0x99, 0xbb, 0xbf, 0x8b, 0xf1, 0x27, 0x1c, 0xe9, 0x34, - 0x35, 0xc9, 0x96, 0x56, 0xfc, 0xbc, 0xcf, 0x64, 0x4e, 0x2f, 0xa9, 0xb3, 0x0d, 0xe2, 0x5f, 0x12, - 0x26, 0xf0, 0x77, 0xe8, 0x63, 0xd7, 0x74, 0x0a, 0x9c, 0x34, 0xc6, 0x8c, 0xdd, 0xff, 0xfe, 0x7f, - 0xdf, 0x30, 0xad, 0x91, 0x71, 0xf5, 0xcb, 0xe4, 0x24, 0xd2, 0xfc, 0x31, 0x77, 0x44, 0x51, 0x84, - 0xbd, 0xe4, 0xe4, 0x56, 0xdc, 0x9f, 0xfc, 0x15, 0xee, 0xee, 0xee, 0xfb, 0xbb, 0xb8, 0xae, 0xbe, - 0x4e, 0xab, 0xe4, 0xd6, 0xe1, 0x9e, 0x6e, 0xab, 0xe5, 0xb4, 0xab, 0x2f, 0x16, 0x2c, 0xdd, 0x7d, - 0x57, 0xc2, 0x66, 0x77, 0xde, 0xef, 0xe5, 0xbb, 0xdf, 0xc6, 0x55, 0x6b, 0xad, 0x26, 0xe9, 0x22, - 0x27, 0xff, 0x89, 0x23, 0x09, 0xd2, 0xae, 0xb8, 0x46, 0x14, 0xa4, 0x4d, 0xf0, 0xae, 0x03, 0x33, - 0xc7, 0x32, 0xf0, 0xcc, 0x8a, 0x15, 0xdc, 0x7f, 0x16, 0x67, 0x7e, 0x11, 0x8b, 0x80, 0xcd, 0xc4, - 0x62, 0xaf, 0xee, 0x63, 0x8f, 0xde, 0x4a, 0xa9, 0xe4, 0xd1, 0xd7, 0xc9, 0xb9, 0x7d, 0x92, 0x11, - 0x10, 0x14, 0xac, 0x4b, 0xc0, 0x63, 0xc8, 0xf0, 0x18, 0xc6, 0x34, 0x89, 0x3d, 0x71, 0xe4, 0xe3, - 0x2a, 0x74, 0xe2, 0x20, 0x9b, 0x9e, 0xcf, 0x42, 0x9d, 0x9c, 0xdc, 0x17, 0xae, 0x5f, 0x7d, 0xdf, - 0xdc, 0x4e, 0x9f, 0xe4, 0xbb, 0xfe, 0x13, 0xd5, 0x0f, 0x4e, 0xbe, 0x5e, 0x6c, 0x50, 0xcf, 0x26, - 0xb5, 0xf7, 0x26, 0x2f, 0x27, 0x75, 0xac, 0xd0, 0x80, 0x80, 0x4b, 0x7b, 0xc5, 0xc5, 0xfe, 0xf1, - 0x02, 0x3a, 0xac, 0x96, 0xaf, 0xdc, 0x5e, 0xc8, 0x92, 0x7c, 0x24, 0x7d, 0xdd, 0x9b, 0xfe, 0x09, - 0x89, 0x7b, 0xea, 0xad, 0xf0, 0x4f, 0xa4, 0x74, 0x49, 0x06, 0x8e, 0xd4, 0x8d, 0x5b, 0xbe, 0xeb, - 0x0c, 0x7a, 0xae, 0x5b, 0xee, 0xba, 0xea, 0xb1, 0x0c, 0xaa, 0xb5, 0xf0, 0xa5, 0xb2, 0x6b, 0x7a, - 0x4a, 0xd5, 0xd7, 0x55, 0x31, 0x08, 0xed, 0xf0, 0xf8, 0x93, 0x29, 0x32, 0xd2, 0x78, 0xbe, 0x23, - 0xbb, 0x96, 0x54, 0x2b, 0xf9, 0xae, 0xcb, 0xf0, 0x85, 0xa6, 0x96, 0x3b, 0xfa, 0x79, 0xcc, 0x71, - 0xc3, 0x74, 0x87, 0xa2, 0x25, 0xaa, 0xaf, 0xc5, 0x5e, 0xf7, 0xdf, 0xdd, 0xf5, 0x27, 0x16, 0x56, - 0x65, 0x66, 0x6f, 0x4e, 0x7c, 0xf1, 0x85, 0x17, 0xf9, 0x3d, 0xf6, 0xaa, 0xbe, 0x22, 0x5d, 0x24, - 0xbe, 0x3f, 0xa9, 0x32, 0x6f, 0xbd, 0xfe, 0x3e, 0xca, 0x5c, 0xd9, 0x9f, 0x35, 0x5f, 0xc5, 0x1a, - 0xab, 0x55, 0x55, 0xf0, 0x43, 0x55, 0xeb, 0xe5, 0xaa, 0x7a, 0xeb, 0xdf, 0x24, 0x6f, 0xdf, 0xf4, - 0x25, 0x2b, 0x51, 0x15, 0x7f, 0x8a, 0x14, 0x95, 0x62, 0xbe, 0x7f, 0xf7, 0x77, 0xfc, 0x15, 0x1e, - 0xa4, 0xc8, 0xf2, 0xec, 0xf2, 0x6d, 0x2b, 0x1e, 0x23, 0xe0, 0xb4, 0xd0, 0x91, 0x4a, 0xc8, 0x87, - 0xbe, 0xdf, 0x04, 0x3c, 0x9f, 0xd0, 0xcf, 0x37, 0x55, 0xf0, 0x9d, 0xf7, 0xad, 0x5f, 0x18, 0x75, - 0x7b, 0xbd, 0xf7, 0xbb, 0xdf, 0xe6, 0x26, 0xef, 0xef, 0x37, 0xfc, 0x9b, 0x02, 0x54, 0xfd, 0x59, - 0x5d, 0x5f, 0xe6, 0x3b, 0xda, 0x6b, 0x10, 0x20, 0x49, 0x1c, 0xb4, 0xde, 0xfe, 0x20, 0xb5, 0x63, - 0x27, 0xf8, 0x40, 0x55, 0x55, 0x56, 0xb5, 0xf2, 0xd6, 0xbf, 0x05, 0x17, 0x6f, 0x5c, 0xac, 0x4b, - 0xe1, 0x22, 0x6e, 0xdd, 0xda, 0xfb, 0x29, 0x7e, 0x3a, 0xe0, 0x8a, 0x44, 0xac, 0x77, 0x62, 0xf9, - 0x89, 0xcd, 0xfc, 0x76, 0x0f, 0xf9, 0x14, 0x35, 0x84, 0xea, 0x67, 0xef, 0x3f, 0x58, 0x80, 0x95, - 0x57, 0x75, 0xaf, 0x13, 0x0f, 0xc4, 0x41, 0x50, 0xdb, 0xde, 0x5f, 0xee, 0xef, 0x5c, 0x50, 0xad, - 0xdb, 0x7b, 0xfd, 0x7a, 0x4e, 0xbd, 0xf6, 0x56, 0x75, 0xfb, 0xaa, 0xaa, 0xf8, 0x4f, 0x54, 0x18, - 0xe5, 0x54, 0xe9, 0xae, 0x38, 0xcb, 0x58, 0x71, 0xea, 0xec, 0xfe, 0x1e, 0x17, 0xc8, 0xbf, 0xbd, - 0x6c, 0xfc, 0x23, 0xe7, 0xad, 0xe5, 0x20, 0xee, 0xfe, 0x08, 0xaf, 0x77, 0xaf, 0x8a, 0xd2, 0x3e, - 0x8f, 0xfa, 0xc1, 0xb0, 0x37, 0xf2, 0xcf, 0xfd, 0x73, 0x16, 0x3a, 0xbf, 0xc8, 0x45, 0x64, 0xd9, - 0x23, 0xe6, 0xcd, 0x4f, 0xc7, 0xe2, 0xe6, 0x60, 0xbc, 0x71, 0x73, 0xbe, 0xb4, 0xdb, 0x15, 0xc5, - 0x97, 0x77, 0xb8, 0xef, 0x99, 0x20, 0xaf, 0x21, 0x2a, 0xab, 0xc2, 0x04, 0x3b, 0xbe, 0xb8, 0x4b, - 0x15, 0xbf, 0x57, 0xf1, 0x12, 0x77, 0x5d, 0x6a, 0xb8, 0x21, 0x26, 0xad, 0xbb, 0xe6, 0xdd, 0xfe, - 0x6e, 0x3d, 0xe1, 0x8f, 0x4b, 0x78, 0xbe, 0x0f, 0xf6, 0x32, 0x67, 0x4c, 0xa9, 0xf2, 0x15, 0xcc, - 0x7f, 0x09, 0x6f, 0x7e, 0x22, 0x4b, 0xc7, 0x97, 0x2f, 0xd5, 0x55, 0x52, 0x5f, 0x98, 0xc3, 0x37, - 0x3f, 0xe2, 0xf9, 0x72, 0x94, 0xb8, 0x21, 0xcf, 0x05, 0x1a, 0x4f, 0xd4, 0x9d, 0xcf, 0xbf, 0x36, - 0x7b, 0xd6, 0x91, 0x39, 0x39, 0x25, 0x7c, 0x13, 0x1c, 0x98, 0x23, 0x9a, 0x6f, 0xf5, 0x71, 0x99, - 0x33, 0x49, 0x25, 0xa5, 0x6a, 0xfa, 0xfb, 0xc9, 0x7f, 0x8d, 0xba, 0xed, 0xac, 0x9a, 0x7c, 0xca, - 0xc5, 0x14, 0xcc, 0x2d, 0x9c, 0x5f, 0xc4, 0x72, 0xd6, 0xb1, 0xfc, 0x98, 0xbd, 0x5f, 0x73, 0x72, - 0x7f, 0x13, 0xae, 0x52, 0x3d, 0xeb, 0x8c, 0x16, 0xef, 0xee, 0x6e, 0xef, 0x77, 0xae, 0xaf, 0x82, - 0x91, 0x05, 0xeb, 0x46, 0x9b, 0x4a, 0xac, 0x67, 0xf7, 0x95, 0x62, 0x44, 0x13, 0xc6, 0x55, 0xb9, - 0x02, 0x4d, 0xfa, 0x2b, 0xe2, 0x42, 0x76, 0x1a, 0x83, 0x53, 0xa5, 0xaa, 0x7f, 0xb2, 0xea, 0xbe, - 0x32, 0xd6, 0xd8, 0xf7, 0xbd, 0x5d, 0xa2, 0xc6, 0xde, 0x21, 0xcf, 0x8c, 0x9e, 0x87, 0xa7, 0xa7, - 0xde, 0xdb, 0xd7, 0x1a, 0x55, 0xcb, 0x7b, 0x4b, 0xeb, 0xdf, 0x08, 0x16, 0x6c, 0xab, 0xb7, 0x53, - 0xef, 0x4d, 0xf1, 0x62, 0x15, 0x3b, 0x1d, 0x6a, 0x33, 0xa2, 0xca, 0xb9, 0xaa, 0xb8, 0xfe, 0xea, - 0xba, 0xc4, 0x54, 0x4f, 0x88, 0xfc, 0x98, 0xaf, 0x5c, 0xdd, 0xdf, 0xc2, 0x5d, 0xdd, 0x6b, 0xf0, - 0x42, 0x5a, 0xbd, 0xeb, 0x8e, 0x26, 0xd1, 0x6a, 0xad, 0x6a, 0xb3, 0x4b, 0xc7, 0x75, 0x27, 0x5c, - 0x54, 0xa3, 0xfc, 0x57, 0x56, 0xb5, 0x32, 0x2f, 0x75, 0x49, 0xfe, 0x62, 0x6a, 0xd3, 0xe0, 0x94, - 0xb7, 0x77, 0x3f, 0xdb, 0xd7, 0xc1, 0x1d, 0xdb, 0xb5, 0x97, 0xc1, 0x1e, 0x37, 0xbe, 0xf3, 0x72, - 0x91, 0xb2, 0x25, 0x99, 0x27, 0x94, 0x4e, 0x37, 0x8f, 0xd1, 0x1c, 0xbe, 0x13, 0xea, 0xb5, 0xa9, - 0x38, 0x9a, 0xde, 0xed, 0xeb, 0x96, 0xb5, 0x50, 0x87, 0x2d, 0x56, 0xab, 0x84, 0xf7, 0x7c, 0xfd, - 0xec, 0x9c, 0xc2, 0x77, 0x7f, 0x08, 0x8c, 0x7b, 0xef, 0x77, 0xbc, 0xdc, 0x14, 0x9c, 0x61, 0x1d, - 0xde, 0x6a, 0x64, 0x59, 0xf7, 0x1e, 0x09, 0x4b, 0x2e, 0x21, 0xdb, 0x09, 0xa4, 0x5a, 0xe2, 0xdd, - 0x6e, 0xf9, 0x4d, 0x64, 0xda, 0xf8, 0x40, 0x95, 0x4b, 0xb3, 0x36, 0x0f, 0x4a, 0x99, 0x5f, 0x2f, - 0x26, 0x7c, 0x16, 0x89, 0x17, 0xeb, 0x5f, 0xbe, 0x12, 0xc7, 0x55, 0xee, 0x9a, 0xfc, 0xc4, 0xda, - 0x3e, 0xf9, 0x7a, 0xa9, 0xb8, 0xa2, 0x0c, 0x18, 0x98, 0x54, 0x33, 0x1f, 0xaf, 0x8f, 0xf4, 0xd2, - 0x29, 0xb0, 0x2f, 0x9e, 0xd8, 0xfc, 0xcd, 0x86, 0xd9, 0xd7, 0xf0, 0x4d, 0x7d, 0xe3, 0x19, 0xf3, - 0x64, 0xe4, 0x86, 0x63, 0x62, 0xf9, 0x8b, 0xcd, 0xdf, 0x29, 0x0f, 0x0d, 0xdf, 0x12, 0x5c, 0x9e, - 0x9d, 0x04, 0x79, 0x78, 0x9b, 0xde, 0x76, 0x38, 0xfe, 0x13, 0xd6, 0xb5, 0xaa, 0xe4, 0xbb, 0x6f, - 0xf3, 0x11, 0xdf, 0xf1, 0x27, 0x79, 0xfe, 0xef, 0x71, 0x3a, 0xc4, 0x7c, 0x97, 0xdd, 0xf3, 0x55, - 0x7e, 0x21, 0x95, 0xdf, 0xf1, 0x52, 0x74, 0xaf, 0xab, 0xfb, 0x10, 0x4b, 0x87, 0xbf, 0xb3, 0x94, - 0xaa, 0xaf, 0xd9, 0x49, 0x9f, 0xc4, 0x12, 0xb7, 0xba, 0x34, 0x9f, 0x05, 0x82, 0x33, 0x65, 0x54, - 0x98, 0x5f, 0x35, 0x36, 0x45, 0xf2, 0x95, 0x73, 0x2f, 0x70, 0xb7, 0xd0, 0xff, 0x82, 0x5a, 0x71, - 0xea, 0x66, 0x61, 0x94, 0xdd, 0xfe, 0x16, 0xd3, 0x0b, 0xfd, 0xc5, 0x4a, 0xff, 0x16, 0xec, 0xe6, - 0xe6, 0x23, 0xef, 0xe4, 0xb4, 0xde, 0x12, 0xc4, 0x44, 0xf4, 0x2d, 0xef, 0x84, 0x75, 0x5a, 0xd5, - 0x6b, 0x5f, 0x25, 0x25, 0xfc, 0x17, 0x56, 0xbc, 0x5e, 0x9d, 0x13, 0x9a, 0xab, 0xf0, 0x81, 0xb7, - 0xaf, 0x93, 0x2e, 0xf8, 0x89, 0x05, 0x0b, 0x97, 0xd7, 0xd9, 0x45, 0xd7, 0xf0, 0x54, 0x4a, 0xaa, - 0xd3, 0x55, 0x52, 0x67, 0x97, 0xc5, 0xd5, 0x55, 0x75, 0x5f, 0x17, 0x56, 0xab, 0x8b, 0xcd, 0xc9, - 0x97, 0xfe, 0x38, 0xba, 0xa6, 0x4d, 0xf5, 0x4c, 0xdf, 0x2c, 0x44, 0x93, 0xb1, 0x78, 0x53, 0x11, - 0x71, 0x32, 0x95, 0x56, 0xb8, 0x9d, 0x72, 0x5d, 0xfe, 0x26, 0xa2, 0x61, 0x3a, 0xae, 0xab, 0xf9, - 0x0b, 0x51, 0x7f, 0x9a, 0xab, 0xe2, 0x7f, 0x27, 0x54, 0x96, 0x25, 0xd5, 0x7c, 0x21, 0x05, 0xba, - 0xaa, 0xaa, 0xfd, 0xf1, 0xf5, 0x69, 0x57, 0x95, 0x8d, 0x56, 0x1a, 0x50, 0x33, 0x62, 0x79, 0x4d, - 0x3f, 0xff, 0x4f, 0xef, 0x90, 0x93, 0x12, 0xa6, 0xb9, 0x44, 0x3b, 0x13, 0xc9, 0xcb, 0xad, 0x5f, - 0x14, 0x77, 0xbe, 0xb5, 0xf1, 0xfa, 0xd6, 0xab, 0xad, 0x22, 0xf7, 0xbb, 0xd7, 0x64, 0x4e, 0x49, - 0x42, 0x38, 0x9f, 0x11, 0x58, 0x82, 0x1d, 0xdf, 0xc4, 0x08, 0xf9, 0x0c, 0xb5, 0xbe, 0x4b, 0xbe, - 0xf8, 0x28, 0x17, 0xaa, 0xd6, 0xad, 0x5c, 0x49, 0x16, 0xb5, 0x52, 0x64, 0xf8, 0xfe, 0xae, 0xab, - 0xea, 0x1b, 0x9e, 0xaf, 0x15, 0xc5, 0xea, 0xb5, 0xf3, 0x6b, 0x37, 0xf1, 0x65, 0xaa, 0xcd, 0x9f, - 0xde, 0xab, 0x5d, 0x11, 0xeb, 0x90, 0x43, 0xde, 0xb9, 0x0f, 0x7b, 0xe2, 0x3f, 0x27, 0x9d, 0x43, - 0xc4, 0x49, 0xcc, 0x4a, 0xd4, 0x31, 0xf8, 0x91, 0x35, 0x88, 0xfa, 0x12, 0xff, 0x30, 0x8b, 0xdf, - 0xcd, 0xad, 0x57, 0x43, 0x7a, 0xc2, 0x88, 0x80, 0x1a, 0xde, 0xc9, 0x5f, 0x9a, 0xae, 0xbf, 0xec, - 0x82, 0x3f, 0x3f, 0x24, 0x9f, 0xff, 0xc4, 0x7c, 0xa7, 0xad, 0x5f, 0x20, 0xc6, 0xaa, 0xbe, 0x51, - 0x65, 0x84, 0x6d, 0x73, 0xf6, 0x65, 0xac, 0xbc, 0x75, 0x37, 0xcf, 0x13, 0x4a, 0xda, 0xd0, 0xc7, - 0xaa, 0x09, 0xf3, 0x16, 0xb5, 0x7c, 0x27, 0x5a, 0xac, 0xb9, 0x93, 0x97, 0x88, 0xfe, 0x27, 0x37, - 0x35, 0x75, 0xf2, 0xd5, 0x7f, 0x21, 0xf5, 0x5f, 0x2f, 0x77, 0xf3, 0x55, 0x77, 0x08, 0x89, 0xf8, - 0x24, 0xae, 0xba, 0xf9, 0x0c, 0xf4, 0xe2, 0x39, 0x8c, 0x66, 0x6e, 0xc6, 0xbb, 0xad, 0x3f, 0x93, - 0x2b, 0xf0, 0xac, 0x4e, 0x7e, 0x5d, 0x6a, 0xf1, 0x02, 0x46, 0xea, 0xaa, 0xb5, 0x7c, 0x24, 0x65, - 0x26, 0x6b, 0x5f, 0x90, 0xaa, 0xab, 0xf7, 0x5a, 0xf1, 0x22, 0x26, 0xe3, 0xa5, 0xa0, 0xdf, 0xbe, - 0xee, 0x2b, 0xc3, 0x4c, 0xb3, 0xaf, 0xd9, 0x1e, 0x2b, 0x72, 0xf4, 0x57, 0xbe, 0xcc, 0x2f, 0x5b, - 0xe5, 0xb7, 0xbf, 0x93, 0x77, 0x84, 0xfb, 0xd6, 0xa2, 0xe2, 0x71, 0xf1, 0x1a, 0xe5, 0xde, 0xe0, - 0xc3, 0xb3, 0xbe, 0xe0, 0x3c, 0xe0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x3c, 0x1e, 0x31, 0xa7, - 0xca, 0x21, 0xef, 0xf2, 0x0b, 0x77, 0xdf, 0x09, 0xed, 0xd7, 0x27, 0x4f, 0x88, 0x19, 0xb4, 0xe5, - 0xce, 0x5f, 0x74, 0x68, 0xdf, 0x7f, 0x12, 0x61, 0x15, 0xaf, 0x9a, 0xef, 0xae, 0x41, 0x2e, 0x95, - 0xfc, 0x11, 0x92, 0xf2, 0xfe, 0xf8, 0x4c, 0xef, 0x77, 0x7b, 0xfd, 0x9b, 0x8a, 0xc1, 0x57, 0x05, - 0x77, 0x77, 0xbd, 0xfa, 0xad, 0x7c, 0x9b, 0xbb, 0xf8, 0xb2, 0xba, 0x77, 0xbb, 0xfc, 0x86, 0x7b, - 0xfd, 0x9d, 0xdf, 0x27, 0x04, 0x93, 0x63, 0x46, 0xe3, 0x1c, 0xb9, 0xb8, 0x88, 0x50, 0x52, 0x67, - 0xe9, 0xd2, 0x69, 0x54, 0x4f, 0x1e, 0xff, 0x13, 0xe5, 0xe3, 0x07, 0xfc, 0xb8, 0x88, 0x50, 0xb4, - 0x24, 0xcd, 0x01, 0xba, 0x1d, 0xcd, 0x20, 0x66, 0xc6, 0x69, 0xa6, 0xf7, 0xbd, 0xb7, 0xe2, 0x21, - 0x4a, 0xb9, 0x76, 0x83, 0x6d, 0xd8, 0x33, 0x61, 0x3a, 0x8a, 0xec, 0xd7, 0x48, 0x61, 0x99, 0x23, - 0x57, 0xbc, 0x40, 0x2c, 0x3c, 0xd8, 0xb2, 0x7e, 0x48, 0xed, 0xd6, 0xa2, 0xe6, 0x20, 0xf7, 0xc2, - 0x1b, 0xdb, 0x3c, 0xfe, 0x78, 0x63, 0x50, 0x8f, 0x17, 0xdd, 0x86, 0x31, 0xbd, 0xc5, 0xf4, 0x2d, - 0xe1, 0xfe, 0x2c, 0x65, 0x6c, 0x96, 0x97, 0xdf, 0x77, 0x2c, 0x44, 0xc2, 0x8f, 0x89, 0xb1, 0x3f, - 0x85, 0x0a, 0x19, 0x07, 0x59, 0x04, 0xd8, 0x51, 0x6a, 0x37, 0x73, 0x7c, 0x54, 0x63, 0xad, 0xbe, - 0xe3, 0x39, 0x7c, 0x29, 0x84, 0x6d, 0x6e, 0x5a, 0x8a, 0x6a, 0x66, 0x35, 0x55, 0x55, 0x57, 0x3e, - 0x09, 0x89, 0x48, 0xdc, 0xbf, 0x36, 0x21, 0x17, 0xf7, 0xc1, 0x48, 0xbb, 0x48, 0x6b, 0x33, 0x0d, - 0x4b, 0x1e, 0xaf, 0xc4, 0x59, 0x95, 0x03, 0x34, 0x20, 0xfc, 0x65, 0x62, 0x55, 0x4d, 0x25, 0x43, - 0x54, 0xb5, 0x2b, 0x13, 0x67, 0x84, 0x2e, 0xee, 0xf5, 0x4f, 0x34, 0x35, 0x2e, 0xa9, 0x71, 0x28, - 0x6f, 0x41, 0x47, 0x35, 0x69, 0xfd, 0x0c, 0xaf, 0x89, 0x16, 0xef, 0xdd, 0xee, 0x20, 0x49, 0x89, - 0x17, 0xf8, 0x91, 0xe2, 0x24, 0x1a, 0x5a, 0xeb, 0x3a, 0x8b, 0x02, 0xdd, 0xfc, 0x61, 0x46, 0xb4, - 0x9c, 0x62, 0x90, 0x42, 0xbc, 0x56, 0x3a, 0x81, 0xd7, 0xb9, 0x58, 0x52, 0x6d, 0x9a, 0xf8, 0x96, - 0x4a, 0xba, 0xf8, 0xcb, 0x63, 0x57, 0x1b, 0x2f, 0xe6, 0xcc, 0xd6, 0xba, 0x8c, 0x9d, 0x9f, 0xca, - 0x2f, 0x06, 0xd9, 0x96, 0xba, 0x27, 0x7c, 0x58, 0xaa, 0x55, 0x49, 0x2f, 0xd1, 0xdc, 0xf9, 0x45, - 0x9b, 0x37, 0x7d, 0x5e, 0x09, 0x22, 0x62, 0xb2, 0xf7, 0xee, 0xe5, 0xfe, 0x63, 0x5e, 0x9f, 0x98, - 0xfb, 0x6b, 0xef, 0xaa, 0xfb, 0xe4, 0xff, 0x10, 0x22, 0xf7, 0x55, 0x51, 0x81, 0x97, 0xc1, 0x2c, - 0xd1, 0x22, 0x5a, 0x37, 0x4d, 0xf8, 0x5b, 0xbb, 0xf1, 0x11, 0xf7, 0xdb, 0x9b, 0xd5, 0x54, 0x35, - 0x1f, 0xc4, 0x0a, 0xa9, 0xbd, 0x56, 0x89, 0x7c, 0x75, 0x98, 0xab, 0x3a, 0x76, 0x9a, 0x64, 0x28, - 0x5f, 0xc5, 0xe4, 0xfa, 0x4d, 0xa3, 0x40, 0xf1, 0x30, 0x47, 0x58, 0xc8, 0x40, 0x5b, 0xf8, 0x80, - 0x46, 0x54, 0xaf, 0xee, 0x20, 0x41, 0x49, 0xbb, 0xe2, 0x04, 0x71, 0x02, 0x05, 0x99, 0xbb, 0xa3, - 0xa4, 0x2b, 0x0a, 0x36, 0x30, 0x80, 0x83, 0x45, 0x6e, 0xef, 0x88, 0x08, 0x31, 0x75, 0xb1, 0xfb, - 0x13, 0x7b, 0x97, 0x98, 0x21, 0x3f, 0x89, 0x78, 0x73, 0xa2, 0xf7, 0xc5, 0x4f, 0xa6, 0xdd, 0xa5, - 0xfd, 0xdb, 0xbd, 0x72, 0x56, 0xb5, 0xcc, 0x2e, 0x99, 0xbf, 0xc4, 0x71, 0x22, 0x01, 0x50, 0xe5, - 0x5a, 0xd2, 0x57, 0x97, 0xd3, 0x73, 0xc4, 0x05, 0x04, 0xbc, 0x2a, 0xfa, 0xde, 0xf5, 0x8f, 0xaa, - 0x6b, 0x16, 0x9d, 0x83, 0x3c, 0xa9, 0xbf, 0xc6, 0x65, 0xd7, 0x6f, 0xa0, 0x58, 0x06, 0x1e, 0x42, - 0x38, 0x1c, 0x11, 0xae, 0xcb, 0x02, 0xa4, 0x78, 0x99, 0x6d, 0xe1, 0x03, 0x89, 0x88, 0x24, 0x55, - 0xed, 0x8c, 0xa6, 0x5a, 0xc3, 0x17, 0xfc, 0x12, 0xd5, 0x49, 0xb2, 0xaa, 0x97, 0xff, 0x04, 0xe4, - 0x3e, 0x59, 0x70, 0x8b, 0xfb, 0x43, 0x3b, 0xc3, 0x76, 0x57, 0xe2, 0x2f, 0x84, 0x25, 0xb4, 0x3e, - 0x06, 0x3f, 0xd4, 0x36, 0x88, 0x31, 0x50, 0xd0, 0x83, 0xa5, 0x65, 0x72, 0x57, 0x8b, 0xb7, 0xa2, - 0x2f, 0x11, 0x83, 0xd9, 0xfe, 0x20, 0x49, 0xfd, 0xee, 0xb4, 0xbc, 0x41, 0x53, 0xa4, 0x9d, 0x00, - 0xdd, 0xfc, 0x61, 0x34, 0x9d, 0x83, 0xd3, 0x77, 0x7c, 0xb0, 0xbf, 0xc5, 0x0c, 0xc9, 0x01, 0xc3, - 0x04, 0x87, 0xf1, 0x00, 0x84, 0x22, 0x62, 0x35, 0x55, 0xff, 0x9b, 0x08, 0x10, 0x21, 0x3b, 0x35, - 0xf7, 0x7d, 0xb8, 0x6d, 0x86, 0x7f, 0xf8, 0x45, 0xcd, 0xbf, 0xbf, 0xd6, 0xb0, 0xbf, 0x47, 0x8a, - 0xbb, 0x0c, 0x2a, 0xef, 0x90, 0x8e, 0xbf, 0xbe, 0xaa, 0xf9, 0x77, 0xba, 0xe4, 0xbb, 0x39, 0xf3, - 0xc2, 0x87, 0x36, 0xd8, 0xcd, 0xa6, 0xd1, 0x89, 0xb4, 0x84, 0xf5, 0xa8, 0xc7, 0x15, 0x8c, 0x17, - 0x50, 0x0d, 0x78, 0x40, 0x4d, 0x48, 0xf3, 0x6d, 0x10, 0x17, 0xf8, 0x53, 0x77, 0x66, 0x19, 0x60, - 0xc5, 0x1b, 0xfc, 0x55, 0xa1, 0xc3, 0x6b, 0x2a, 0xa5, 0x83, 0x8f, 0xc4, 0xc2, 0x04, 0x3f, 0x2a, - 0x44, 0x4a, 0xbe, 0x5b, 0xe9, 0xb6, 0x89, 0xf1, 0x32, 0x6a, 0xa8, 0x3e, 0x20, 0x45, 0x67, 0xfc, - 0x4e, 0x56, 0x38, 0x91, 0x96, 0xed, 0x39, 0xf2, 0xe1, 0x7e, 0xd6, 0xcd, 0x78, 0x90, 0x8c, 0x98, - 0xab, 0x6b, 0x5c, 0xfc, 0xb9, 0x89, 0x8a, 0xb1, 0x90, 0x82, 0x3d, 0x4d, 0xeb, 0xaa, 0x1f, 0x13, - 0x04, 0x24, 0xb7, 0x5e, 0xb8, 0x29, 0x13, 0x41, 0x44, 0x15, 0x67, 0xff, 0xc2, 0xb9, 0x7b, 0xb6, - 0x4e, 0x11, 0x0a, 0x3d, 0xfc, 0xb8, 0x56, 0x1b, 0x2d, 0x98, 0xd7, 0x8c, 0x3d, 0x3a, 0xa1, 0x84, - 0x4d, 0xff, 0x5e, 0x8c, 0xa6, 0x67, 0xa4, 0x34, 0x89, 0xfc, 0x13, 0x76, 0x53, 0x64, 0x26, 0x2d, - 0x5e, 0x41, 0x38, 0x62, 0xb1, 0xa1, 0xef, 0x84, 0xc9, 0xc9, 0x42, 0x5a, 0x2b, 0x30, 0xef, 0x45, - 0x7f, 0x8b, 0xd2, 0x4b, 0x54, 0xbe, 0x3e, 0xaa, 0xb9, 0x7f, 0x2e, 0xd2, 0xf1, 0x95, 0xec, 0xab, - 0x87, 0x6f, 0xbb, 0x97, 0xa1, 0x24, 0x09, 0x1e, 0xb0, 0xef, 0xd8, 0xf5, 0xbe, 0x0a, 0x6e, 0xb2, - 0xef, 0x3a, 0x86, 0xf8, 0xbd, 0xf1, 0x9b, 0xbb, 0xb6, 0xef, 0x79, 0x68, 0x1f, 0xa9, 0x0c, 0x27, - 0x9c, 0x98, 0xf7, 0xf8, 0x82, 0x36, 0xb5, 0x17, 0x66, 0xab, 0xe2, 0x2b, 0x27, 0xbb, 0xfe, 0x0b, - 0x0b, 0x62, 0x53, 0x76, 0x54, 0xdc, 0x8c, 0x24, 0xa1, 0x16, 0xef, 0x89, 0xd2, 0x27, 0xe5, 0x95, - 0x5e, 0x24, 0xd6, 0x36, 0x31, 0xc3, 0x09, 0x52, 0x17, 0xe2, 0x6d, 0xde, 0x9c, 0x49, 0xa6, 0x89, - 0xb7, 0x55, 0x0a, 0xb1, 0xa0, 0x11, 0xb5, 0xb4, 0x37, 0xbf, 0xff, 0x85, 0x5e, 0xf0, 0x4e, 0x28, - 0xf0, 0x39, 0x79, 0xc8, 0x39, 0x2b, 0x61, 0xe2, 0x88, 0xd6, 0xfb, 0xbf, 0x87, 0xba, 0x46, 0x96, - 0xec, 0x68, 0x1e, 0x1c, 0xd4, 0x5f, 0x6e, 0x5f, 0xeb, 0x85, 0xf7, 0xb4, 0x53, 0x16, 0xe1, 0x7d, - 0xfc, 0x7c, 0x64, 0xf0, 0xff, 0x8d, 0xda, 0xbe, 0x5c, 0x14, 0x6e, 0x18, 0x62, 0x1a, 0x75, 0x1f, - 0x47, 0xd2, 0x2d, 0x7e, 0x34, 0xdb, 0x6f, 0xc2, 0x97, 0x8a, 0xcb, 0xf1, 0x59, 0x71, 0x6f, 0xad, - 0xb0, 0x5f, 0x91, 0x72, 0xed, 0xdf, 0xe1, 0x22, 0x2d, 0x86, 0x9b, 0xcf, 0xfe, 0x2b, 0xcb, 0x07, - 0xbb, 0xf8, 0x4c, 0xae, 0x7f, 0x7f, 0x0d, 0xf5, 0x9e, 0x0a, 0x70, 0x84, 0x65, 0x1b, 0xce, 0xbe, - 0xda, 0x01, 0xdf, 0xab, 0x6b, 0xfe, 0xf9, 0xff, 0xe8, 0x7f, 0x9b, 0x7b, 0xbc, 0x40, 0xc2, 0x5f, - 0x1e, 0x68, 0xd2, 0x15, 0xdc, 0x7c, 0x78, 0x2b, 0x93, 0x53, 0x13, 0x08, 0xd5, 0x72, 0x31, 0xd1, - 0x63, 0xb4, 0x56, 0x70, 0x34, 0x4c, 0x97, 0x1d, 0x26, 0xcb, 0xfe, 0xf6, 0x72, 0x73, 0x7c, 0xd7, - 0xdd, 0x75, 0xee, 0x22, 0x49, 0x3b, 0x7a, 0xc1, 0xae, 0x49, 0xf2, 0xdf, 0xe2, 0x6b, 0xd7, 0xe5, - 0x4a, 0x8b, 0xf1, 0x54, 0xca, 0x66, 0x9a, 0x6f, 0x7f, 0x0b, 0xd8, 0xb6, 0xc7, 0x24, 0xbb, 0xe9, - 0x43, 0xe3, 0x9d, 0xac, 0x37, 0xcb, 0x7b, 0xba, 0xe2, 0xea, 0xbe, 0xaa, 0xb9, 0x8b, 0x7b, 0xf9, - 0x08, 0xee, 0xef, 0xe6, 0xd5, 0x6b, 0x92, 0xbd, 0x7c, 0x9d, 0x98, 0xcb, 0xf7, 0x35, 0x15, 0xb9, - 0x78, 0x22, 0xcb, 0xf9, 0x44, 0xf0, 0x9c, 0xd8, 0xc2, 0x45, 0xbd, 0xaf, 0x26, 0x52, 0x37, 0xf1, - 0xd4, 0x78, 0xc2, 0xb1, 0xe9, 0x9f, 0xee, 0xf8, 0x88, 0xce, 0xd2, 0xbe, 0xe8, 0x4a, 0x68, 0xe3, - 0xd2, 0xaf, 0x4f, 0xc4, 0xda, 0xae, 0x9c, 0x9c, 0x35, 0xcd, 0xe2, 0xe4, 0xee, 0xf7, 0x97, 0x10, - 0x8a, 0xf7, 0xca, 0x5d, 0x5f, 0xc5, 0xea, 0xa2, 0xfa, 0xab, 0xec, 0x45, 0xb5, 0x9b, 0x98, 0x4a, - 0xa7, 0x4f, 0x88, 0x20, 0x89, 0x98, 0x79, 0xc4, 0x08, 0xf8, 0xb3, 0xda, 0x4b, 0x65, 0x7f, 0x04, - 0x66, 0xd9, 0x2b, 0x7c, 0x64, 0x4a, 0xc8, 0x18, 0xd5, 0x79, 0x5c, 0x68, 0x39, 0xeb, 0x2a, 0xb2, - 0x55, 0x25, 0xef, 0xab, 0xa6, 0xbf, 0x13, 0x9e, 0x73, 0x58, 0x6b, 0xbd, 0xdf, 0xe2, 0x6b, 0x5a, - 0xd6, 0x2f, 0x10, 0x08, 0x77, 0xbb, 0x9f, 0x12, 0x7a, 0xaa, 0xae, 0xab, 0x88, 0xdd, 0xf1, 0x7f, - 0xca, 0x6a, 0x3b, 0x9a, 0x22, 0x10, 0xad, 0x64, 0xeb, 0xde, 0x56, 0x31, 0x30, 0x87, 0x6c, 0xca, - 0x45, 0xda, 0x81, 0xcc, 0xc4, 0xf4, 0xfc, 0x49, 0x3c, 0xfb, 0xe1, 0x0b, 0xf6, 0x50, 0xb6, 0x93, - 0x8f, 0xbd, 0xfd, 0xf7, 0x37, 0xf2, 0x50, 0x4b, 0x6f, 0xc4, 0x96, 0xef, 0xe3, 0x26, 0xa1, 0x9e, - 0x20, 0x97, 0x73, 0xf1, 0x7f, 0x15, 0xc9, 0xb3, 0x49, 0xbf, 0x27, 0x8b, 0xf8, 0x48, 0xf2, 0x43, - 0x5a, 0xfc, 0xb5, 0x5f, 0xc2, 0x54, 0xec, 0xd2, 0xad, 0x57, 0x08, 0x9b, 0x97, 0x25, 0xf6, 0x82, - 0xea, 0xdf, 0xf1, 0x19, 0xb1, 0xed, 0x3b, 0x72, 0x73, 0x79, 0x98, 0xf3, 0x77, 0x45, 0xe8, 0xae, - 0x3c, 0x26, 0x42, 0xf7, 0xf9, 0xe0, 0x78, 0x7f, 0x0c, 0xdf, 0x44, 0xbf, 0x6c, 0xd5, 0x8f, 0xc2, - 0x91, 0x3c, 0x2c, 0x0c, 0x53, 0x12, 0x1e, 0x9b, 0x71, 0xa6, 0x8c, 0x7d, 0x9b, 0x24, 0xd8, 0x1f, - 0x1f, 0x2e, 0xf9, 0x6b, 0x76, 0x28, 0x2b, 0xe2, 0xf9, 0xac, 0xb9, 0x8e, 0xf9, 0xb4, 0xf1, 0x7b, - 0x96, 0x93, 0x5a, 0x9b, 0x89, 0x9a, 0x86, 0x8b, 0xf7, 0xaf, 0xbb, 0xcf, 0xef, 0x82, 0x41, 0x34, - 0xad, 0x65, 0xf5, 0x7f, 0x9a, 0xd3, 0x5f, 0x9a, 0xc6, 0xb6, 0xc3, 0x5d, 0xeb, 0x52, 0x76, 0x21, - 0x53, 0xcb, 0x10, 0x20, 0x21, 0x60, 0xcd, 0xb9, 0xb3, 0x5d, 0x52, 0xf0, 0x55, 0xa4, 0x3a, 0xc8, - 0xe7, 0x31, 0x0e, 0x16, 0x89, 0x45, 0xea, 0x2f, 0x9a, 0x49, 0x36, 0x7f, 0xfb, 0xd5, 0x60, 0xa7, - 0x8f, 0x2a, 0xae, 0xab, 0xf3, 0xd3, 0x11, 0x35, 0xea, 0x79, 0x2e, 0x42, 0x6e, 0xeb, 0x8f, 0xb4, - 0xab, 0x44, 0xfe, 0xab, 0xec, 0xaf, 0xb8, 0x8e, 0x28, 0x85, 0xf4, 0x56, 0xdd, 0x0e, 0x6e, 0x6e, - 0xaa, 0x1a, 0xe5, 0xaa, 0xd5, 0x77, 0x7d, 0xfc, 0x97, 0x7f, 0xcb, 0x55, 0xcd, 0xcc, 0x54, 0x4d, - 0x52, 0xf1, 0x64, 0x74, 0x12, 0x8f, 0x79, 0x6e, 0xa1, 0x33, 0xc9, 0xaa, 0xc4, 0xf2, 0xdd, 0xfe, - 0x20, 0x11, 0xd6, 0xd9, 0x3b, 0x1f, 0x11, 0x7b, 0x9c, 0xc4, 0xb8, 0xf5, 0x7d, 0xcd, 0x94, 0x65, - 0x31, 0x27, 0x05, 0xbd, 0x56, 0xb5, 0xeb, 0xe2, 0x69, 0xef, 0x7b, 0x84, 0xb9, 0x0b, 0x5a, 0xbe, - 0x42, 0x5e, 0xeb, 0x90, 0xea, 0xb8, 0x9e, 0x52, 0xdd, 0xfe, 0xac, 0xf1, 0x05, 0x35, 0xa6, 0xb8, - 0x8f, 0xcc, 0x25, 0x57, 0x5c, 0x82, 0xad, 0xb5, 0x5c, 0x15, 0xf5, 0x69, 0x4d, 0x95, 0x69, 0x57, - 0xd1, 0x5c, 0xba, 0x49, 0xa2, 0xf1, 0x7c, 0xfe, 0x89, 0x90, 0xbd, 0xf2, 0xdd, 0xff, 0x09, 0x4e, - 0x18, 0x0b, 0x5e, 0x6a, 0x22, 0xf1, 0x3d, 0x4d, 0x29, 0xb7, 0xf3, 0x73, 0x31, 0x0e, 0x73, 0x09, - 0x5a, 0xde, 0x22, 0x6e, 0x85, 0x75, 0xf3, 0x55, 0x7f, 0x58, 0xa2, 0xb9, 0xb9, 0xee, 0x1f, 0xec, - 0x5e, 0xaa, 0x37, 0xb1, 0x52, 0x62, 0x3d, 0xf5, 0xf4, 0xfc, 0xb5, 0xd4, 0x2f, 0x13, 0x88, 0xc4, - 0x39, 0xfd, 0xe5, 0xec, 0x4e, 0xab, 0x89, 0xcb, 0xca, 0x21, 0x77, 0x27, 0x67, 0xc5, 0x71, 0x1c, - 0x84, 0x5d, 0xc2, 0xbc, 0x87, 0x7b, 0xd7, 0x31, 0x1b, 0x5a, 0x93, 0xa2, 0x35, 0xf2, 0x95, 0xef, - 0x3f, 0x65, 0x4a, 0xab, 0xe2, 0x4a, 0xb5, 0xd6, 0xa1, 0x2e, 0x85, 0x3c, 0x39, 0xdd, 0xef, 0x26, - 0x22, 0xf9, 0x46, 0xea, 0xab, 0x08, 0x3d, 0x56, 0x11, 0xec, 0x64, 0xcc, 0xd8, 0xc3, 0x58, 0x8f, - 0xbd, 0x6a, 0x4e, 0x24, 0x7d, 0x57, 0x75, 0x93, 0x84, 0x6b, 0xaa, 0xae, 0xba, 0xae, 0x23, 0xaa, - 0xaa, 0xaf, 0x88, 0x88, 0xe6, 0x1c, 0xab, 0x5f, 0x35, 0xf7, 0x04, 0x58, 0x88, 0x4f, 0x90, 0xb2, - 0x7d, 0x70, 0x9f, 0x77, 0xbd, 0xc0, 0x59, 0x75, 0xd4, 0x27, 0xdc, 0xef, 0x4f, 0x02, 0xf4, 0x00, - 0x00, 0x00, 0x01, 0x41, 0x9a, 0x3d, 0x1e, 0xb0, 0x4a, 0x7d, 0x88, 0x77, 0xbf, 0x82, 0x21, 0x6e, - 0xee, 0xf5, 0x5c, 0x20, 0x29, 0xdd, 0xde, 0x9d, 0xde, 0xef, 0xe3, 0x86, 0xa6, 0xf6, 0xd3, 0x1a, - 0xa2, 0x7b, 0xb7, 0x37, 0xf0, 0x49, 0x96, 0x45, 0xa6, 0xd5, 0xc7, 0x0a, 0xbd, 0xde, 0xef, 0x8b, - 0xaf, 0x97, 0x5a, 0xf8, 0xf1, 0x32, 0xfe, 0xcd, 0xf9, 0xf2, 0x17, 0xaf, 0x8c, 0x26, 0x27, 0x8b, - 0x25, 0xbf, 0x5e, 0xae, 0x2b, 0xf8, 0x44, 0xf5, 0x7a, 0x6e, 0x81, 0xa5, 0x3f, 0xb7, 0xe3, 0xcd, - 0x74, 0xef, 0x7b, 0xed, 0x1f, 0xa1, 0xec, 0x7d, 0x15, 0xef, 0xae, 0x50, 0xe7, 0x5b, 0xd7, 0x30, - 0x4a, 0xf4, 0xfc, 0x15, 0xdc, 0xfc, 0xb8, 0xff, 0x6f, 0xe7, 0xc7, 0xfb, 0x6d, 0x5f, 0xe0, 0x92, - 0xee, 0xef, 0x7f, 0x82, 0x92, 0xa4, 0x5c, 0xec, 0xce, 0xd7, 0x49, 0xaa, 0x69, 0xd7, 0xc4, 0x9a, - 0xef, 0xbd, 0xfc, 0x49, 0xd3, 0xad, 0xee, 0xd9, 0xd8, 0xfd, 0x08, 0xaf, 0xab, 0xfc, 0x12, 0x57, - 0x5e, 0xf9, 0x8a, 0xdb, 0x19, 0x18, 0x9f, 0x0a, 0x1a, 0x31, 0x7d, 0xeb, 0x6d, 0x66, 0x0d, 0x13, - 0x91, 0x20, 0xde, 0x1c, 0xc3, 0x22, 0xa0, 0xe4, 0xfa, 0x4c, 0xe0, 0xf8, 0x29, 0x28, 0xcb, 0x26, - 0xd3, 0x28, 0x60, 0x55, 0xf6, 0x81, 0x56, 0xd0, 0x27, 0x31, 0x92, 0x3e, 0xa7, 0x07, 0xc1, 0x5f, - 0x6c, 0xb2, 0x3c, 0x5d, 0x00, 0xfc, 0x88, 0xf2, 0x68, 0x64, 0x91, 0x33, 0xd6, 0xe7, 0xc2, 0x87, - 0x4c, 0xbc, 0x73, 0xca, 0xbc, 0xcc, 0x86, 0x39, 0x0d, 0xd6, 0xcc, 0x3f, 0x76, 0x19, 0x8a, 0x37, - 0xb2, 0xb6, 0xd9, 0x7c, 0x29, 0x4d, 0x2f, 0xa4, 0xe3, 0x95, 0xd1, 0xb4, 0x20, 0x2c, 0x40, 0x32, - 0x38, 0xde, 0xc4, 0xd2, 0x7f, 0x82, 0x6b, 0x56, 0xaa, 0xcd, 0x8b, 0xc9, 0x97, 0x30, 0x86, 0xae, - 0xeb, 0xec, 0x5a, 0xaa, 0xc4, 0x75, 0x68, 0x5f, 0xa3, 0xf5, 0xf4, 0x47, 0x26, 0xe8, 0x25, 0x52, - 0xf0, 0x88, 0xa7, 0x30, 0x60, 0x28, 0x7e, 0xa3, 0x57, 0x90, 0xd1, 0x31, 0x9f, 0x11, 0x1e, 0x57, - 0x09, 0x24, 0x77, 0x84, 0x19, 0x2a, 0x78, 0x57, 0x47, 0x41, 0x62, 0x66, 0x51, 0xae, 0x42, 0xb5, - 0x46, 0x70, 0x3f, 0x05, 0x16, 0xc9, 0xd7, 0x5a, 0x58, 0xff, 0x04, 0x44, 0xbb, 0x5d, 0x7c, 0x58, - 0xb2, 0x61, 0x33, 0x55, 0xa5, 0xe4, 0x33, 0x24, 0x1a, 0x6c, 0x7e, 0xfc, 0xa5, 0xf0, 0x4d, 0xa4, - 0xdc, 0xb4, 0x6a, 0x66, 0x5f, 0xe8, 0x6b, 0x41, 0x47, 0x74, 0x93, 0x5f, 0x8c, 0x18, 0xfb, 0xbd, - 0xde, 0xf7, 0xbb, 0xcb, 0x11, 0x0a, 0x67, 0x89, 0x05, 0x89, 0xe9, 0x0e, 0x58, 0x72, 0xdb, 0x1f, - 0x15, 0x89, 0x7d, 0xdb, 0xbf, 0x13, 0x13, 0xb0, 0x22, 0xee, 0xb4, 0x60, 0xb9, 0xef, 0x62, 0xfc, - 0x15, 0x5b, 0xb6, 0x5a, 0x3e, 0xa2, 0x29, 0xa9, 0xbc, 0xf7, 0xc1, 0x5c, 0x15, 0x52, 0x2a, 0x06, - 0xe6, 0x1d, 0x93, 0x2c, 0xd8, 0x9b, 0x96, 0x83, 0x31, 0x1d, 0xf6, 0x26, 0x66, 0x2c, 0x7e, 0x12, - 0xaa, 0xee, 0xff, 0x94, 0x97, 0xbf, 0x88, 0x14, 0x9b, 0xff, 0x79, 0xf3, 0x10, 0x20, 0xc7, 0xaa, - 0x55, 0x84, 0x0c, 0x3f, 0x1d, 0x38, 0x2d, 0x2c, 0x2b, 0x9b, 0x55, 0x50, 0x4b, 0xc1, 0x68, 0xab, - 0xba, 0x4e, 0x2b, 0xbb, 0x9f, 0x12, 0x77, 0xbe, 0xef, 0x7c, 0xc2, 0x29, 0x53, 0xf1, 0x31, 0xdc, - 0xea, 0x1f, 0x46, 0xd5, 0x69, 0xfc, 0x44, 0x28, 0x51, 0x0f, 0xae, 0x76, 0x58, 0x31, 0xaa, 0x2b, - 0xc6, 0x82, 0x77, 0x62, 0xe9, 0xc7, 0x2e, 0x4c, 0x73, 0xe2, 0xcd, 0x5a, 0xcd, 0xff, 0x35, 0x22, - 0x63, 0x05, 0xf8, 0x2e, 0x9f, 0x1a, 0x6a, 0xda, 0xcb, 0x8f, 0xf1, 0x65, 0x27, 0x6a, 0x04, 0xae, - 0xff, 0x82, 0x2d, 0xee, 0xfc, 0x40, 0x80, 0x47, 0x1c, 0x5d, 0xb8, 0xff, 0xf9, 0x05, 0x16, 0xf7, - 0xc4, 0x55, 0xcf, 0x8c, 0xf1, 0x5b, 0x58, 0xee, 0x2b, 0x15, 0xbb, 0x46, 0xf6, 0x7e, 0x20, 0x40, - 0x91, 0xef, 0x7b, 0xdb, 0x5f, 0x29, 0xd6, 0xdc, 0xb1, 0x11, 0x41, 0x0a, 0xaa, 0x46, 0xf1, 0x87, - 0x69, 0x8a, 0x10, 0x71, 0x20, 0x8e, 0x75, 0x17, 0xa8, 0x64, 0xe1, 0xf0, 0x46, 0x54, 0xd1, 0xd1, - 0x42, 0x1e, 0x5b, 0x49, 0xfe, 0xa4, 0xa2, 0x39, 0x2d, 0x69, 0x8d, 0xe2, 0xf5, 0x55, 0x6f, 0x4d, - 0x72, 0xcf, 0xbc, 0xbc, 0xa2, 0xda, 0x7b, 0xbe, 0x0b, 0x0d, 0x7b, 0x86, 0x96, 0x36, 0xc1, 0x56, - 0x9a, 0xda, 0x32, 0x7c, 0x16, 0x5e, 0x92, 0x03, 0x7e, 0x1d, 0xb5, 0xfc, 0xe0, 0x80, 0x2c, 0x36, - 0xa9, 0x7f, 0x84, 0x08, 0x59, 0x56, 0xc1, 0x37, 0x07, 0x79, 0x88, 0x4f, 0xc9, 0x69, 0xb4, 0xeb, - 0xf8, 0x47, 0x37, 0x45, 0xc9, 0x9f, 0x9f, 0xf8, 0xf2, 0x23, 0x45, 0x59, 0xf2, 0xc0, 0xb4, 0xdf, - 0xc2, 0x9e, 0x5c, 0x9d, 0x94, 0xd6, 0x7c, 0x2b, 0x2f, 0x18, 0x30, 0xb5, 0x4d, 0x7b, 0xe1, 0x1b, - 0xbd, 0xd5, 0x03, 0x55, 0x3c, 0xb9, 0x5f, 0x05, 0x02, 0x77, 0x4b, 0x03, 0x7e, 0x3b, 0xff, 0xc1, - 0x09, 0x5e, 0x5c, 0xbf, 0x13, 0x14, 0x4b, 0xbf, 0x35, 0xa0, 0x78, 0x88, 0xe1, 0xd2, 0xfb, 0xdb, - 0x48, 0x0e, 0xe5, 0xc1, 0x5b, 0xff, 0x82, 0xa0, 0xc9, 0x57, 0xb7, 0xd6, 0xca, 0xaa, 0xaf, 0x36, - 0x10, 0x14, 0x16, 0x6f, 0xae, 0x66, 0x1e, 0xb7, 0xf1, 0x26, 0xe6, 0x62, 0x37, 0x82, 0x31, 0x72, - 0x74, 0xbd, 0x57, 0x16, 0x5a, 0xd7, 0x26, 0x97, 0x57, 0x04, 0xf7, 0x6b, 0x97, 0x1a, 0x94, 0x9f, - 0x57, 0x4d, 0xd0, 0x47, 0xab, 0x90, 0x30, 0xba, 0xf9, 0xb5, 0x2f, 0xfc, 0x11, 0x9d, 0x8e, 0xf7, - 0xbe, 0x61, 0x54, 0xd6, 0xf8, 0xad, 0x6a, 0xde, 0x97, 0x84, 0xf4, 0x96, 0xf4, 0xc7, 0x57, 0xc1, - 0x49, 0xcb, 0x4d, 0x20, 0xe3, 0x12, 0x4b, 0x40, 0xc7, 0x63, 0x09, 0x37, 0xe5, 0x7d, 0xfe, 0x3b, - 0xb2, 0x7c, 0x3b, 0x9c, 0xbc, 0x01, 0x5d, 0xfe, 0x0a, 0x88, 0xfa, 0x74, 0x50, 0x1e, 0x4e, 0x52, - 0x53, 0xbb, 0x77, 0xf9, 0xa7, 0x7d, 0x53, 0xf0, 0xf6, 0xb5, 0x2f, 0xbd, 0xd3, 0x2d, 0x19, 0x6b, - 0xf7, 0x57, 0xf2, 0xd8, 0x54, 0x33, 0xcf, 0xdd, 0x29, 0xe8, 0xde, 0x26, 0x14, 0xb0, 0x66, 0xdd, - 0x7b, 0x23, 0xdf, 0x3d, 0x6a, 0x6f, 0xad, 0x0b, 0xb8, 0x8f, 0x13, 0x64, 0xe6, 0xcc, 0x4f, 0x14, - 0x4d, 0x8b, 0x41, 0x94, 0xd3, 0x27, 0x11, 0x14, 0x18, 0x10, 0x7c, 0x9e, 0x23, 0xe4, 0x22, 0xfe, - 0x11, 0x38, 0x78, 0x52, 0x63, 0xf7, 0xc6, 0x75, 0x29, 0xa9, 0xf3, 0xa0, 0xbf, 0x12, 0x08, 0xf8, - 0x59, 0xb8, 0x94, 0x1d, 0x0e, 0x7c, 0x12, 0x0d, 0xe0, 0x7c, 0xd5, 0xcf, 0x8b, 0x08, 0x6d, 0xe5, - 0xc9, 0xac, 0x67, 0x26, 0xd3, 0x11, 0x05, 0x55, 0xac, 0xf8, 0x3d, 0x46, 0xae, 0x93, 0x90, 0xee, - 0x5f, 0x2e, 0x7a, 0xa7, 0xf8, 0x2b, 0x2a, 0x2c, 0x9a, 0x93, 0x63, 0xe5, 0x8e, 0x19, 0xf0, 0x94, - 0xf3, 0xe8, 0x61, 0xea, 0xa4, 0x37, 0xb2, 0x2b, 0xa2, 0xb0, 0x37, 0x7c, 0xb9, 0x5d, 0x04, 0x62, - 0x97, 0x88, 0x0b, 0x69, 0xbd, 0xd9, 0x37, 0xe5, 0xaa, 0xfe, 0x0b, 0xad, 0x6a, 0xa9, 0xed, 0x5c, - 0xbd, 0xd2, 0x5c, 0x28, 0x56, 0x67, 0x23, 0x48, 0x61, 0xac, 0x04, 0xd9, 0xd5, 0x3e, 0x6b, 0x71, - 0xc0, 0xa9, 0xc3, 0xc1, 0x5d, 0x81, 0xb6, 0xdf, 0x37, 0x64, 0x9e, 0x9e, 0x5f, 0x17, 0xbb, 0x6d, - 0x8f, 0x90, 0xb7, 0x10, 0x9e, 0x1e, 0x38, 0xca, 0xba, 0x69, 0x66, 0x97, 0xf8, 0x9d, 0x24, 0xb4, - 0x92, 0xf8, 0x4c, 0xa3, 0x6e, 0x08, 0x4b, 0x5a, 0x3c, 0x91, 0x45, 0xeb, 0xd7, 0x89, 0x04, 0x94, - 0xf2, 0xb3, 0x17, 0xcb, 0x7b, 0x19, 0xae, 0x6b, 0xdf, 0xe7, 0x94, 0x33, 0xfb, 0x65, 0xd7, 0xc1, - 0x39, 0x25, 0xc4, 0xdf, 0x4b, 0x8e, 0xe0, 0xb7, 0x03, 0x06, 0x22, 0x32, 0xbc, 0x93, 0x7d, 0xa5, - 0xbb, 0xcb, 0x8c, 0xdf, 0x5f, 0x17, 0x7b, 0xc6, 0x0b, 0xbd, 0xf8, 0x88, 0x53, 0xc6, 0xf0, 0x59, - 0x3c, 0x34, 0x42, 0xb3, 0x7b, 0xdb, 0xdd, 0x26, 0xa0, 0xe2, 0x20, 0x9f, 0x77, 0x53, 0xb9, 0x9b, - 0x30, 0x7c, 0x5d, 0xf7, 0x8c, 0xab, 0x90, 0x1f, 0xed, 0x89, 0x8e, 0xc7, 0x94, 0x36, 0x54, 0x57, - 0x2c, 0x0d, 0xb3, 0x83, 0xff, 0x5a, 0xb6, 0x3f, 0xe1, 0x8e, 0x8b, 0xdf, 0x05, 0x59, 0xbd, 0x49, - 0xd5, 0x9e, 0x49, 0xfb, 0xeb, 0xe1, 0x4b, 0xbd, 0xde, 0xef, 0x77, 0x77, 0x7d, 0xfe, 0x52, 0x45, - 0xeb, 0xec, 0xe9, 0xd3, 0xf8, 0x2b, 0x3a, 0x44, 0xfd, 0x5b, 0x5e, 0x4e, 0xe7, 0xc1, 0x59, 0xaf, - 0x77, 0xde, 0xed, 0xdf, 0xe0, 0xbb, 0x97, 0x3c, 0x9a, 0xff, 0x05, 0x33, 0xd6, 0xdc, 0x94, 0x26, - 0x43, 0x9e, 0x7c, 0x19, 0x5a, 0x70, 0xbe, 0x0b, 0x88, 0xce, 0xf2, 0xf1, 0xd7, 0x4c, 0xdf, 0x83, - 0xe3, 0x31, 0x91, 0x42, 0x58, 0x2f, 0x13, 0xb0, 0x3d, 0xc4, 0x14, 0x4a, 0x45, 0x5a, 0xb1, 0x01, - 0x5b, 0x46, 0xd7, 0x5a, 0x5e, 0x6d, 0x8d, 0x4e, 0x18, 0x1f, 0x1d, 0xb9, 0xff, 0x8f, 0x44, 0x6f, - 0xff, 0xe1, 0x4a, 0xd5, 0x5c, 0xb6, 0xc2, 0xf5, 0x5b, 0x62, 0xec, 0xf5, 0xf1, 0x70, 0xc7, 0x79, - 0x7c, 0x58, 0xb6, 0x68, 0x2c, 0xf0, 0xf1, 0x7c, 0x7b, 0x36, 0x7d, 0x57, 0xc5, 0xf1, 0xc6, 0x4e, - 0x20, 0xd4, 0x9e, 0x3f, 0x0f, 0x64, 0x66, 0x46, 0xd0, 0x1a, 0x91, 0xeb, 0x1c, 0x23, 0xe2, 0xd8, - 0xc2, 0xf2, 0x7f, 0xf1, 0xbc, 0xb0, 0x9d, 0xaa, 0x9e, 0x99, 0x33, 0xe8, 0xea, 0x9f, 0x03, 0xcf, - 0x0d, 0xff, 0xc1, 0x75, 0xef, 0xe4, 0x93, 0xfc, 0x84, 0x44, 0xfe, 0x22, 0x10, 0x2a, 0x39, 0x3d, - 0x5a, 0x5d, 0xd2, 0xf8, 0x25, 0xc9, 0xf9, 0x28, 0xde, 0xc7, 0xc6, 0x74, 0xd2, 0xdc, 0x56, 0xc9, - 0xda, 0x3e, 0x3b, 0xed, 0x78, 0x77, 0x66, 0xe9, 0x3d, 0x45, 0x56, 0xaf, 0x77, 0xd8, 0x79, 0xe8, - 0xb4, 0xf1, 0x10, 0x52, 0x47, 0x29, 0x06, 0x7a, 0x6c, 0x6e, 0xc1, 0xbd, 0xd1, 0x90, 0x5f, 0x05, - 0x57, 0x0f, 0x92, 0x99, 0x1d, 0x9b, 0xa2, 0xe1, 0x16, 0x38, 0x7b, 0xdb, 0xc9, 0x5e, 0xf8, 0xfe, - 0x0a, 0xe2, 0x16, 0x27, 0x2c, 0x29, 0x6b, 0xf9, 0x31, 0x75, 0xc4, 0xc6, 0x96, 0x6e, 0x5c, 0x86, - 0xae, 0xa5, 0xfb, 0x64, 0x2e, 0xb6, 0x51, 0x4b, 0x0b, 0xfe, 0xf2, 0x7c, 0x44, 0x7d, 0x3d, 0x16, - 0xe2, 0xac, 0xc1, 0xb7, 0x27, 0x5b, 0x7d, 0x38, 0xca, 0xff, 0x0d, 0xd9, 0x08, 0x8e, 0x57, 0xf0, - 0xbf, 0xb0, 0xc7, 0x64, 0x4e, 0x9d, 0xf2, 0x75, 0x52, 0x77, 0xbd, 0x3f, 0x0c, 0xdb, 0xdc, 0xdd, - 0x7e, 0x9c, 0xff, 0xc1, 0x51, 0x58, 0x37, 0x4d, 0xf4, 0xee, 0x6f, 0x50, 0xee, 0x6b, 0x7f, 0x87, - 0xc1, 0x65, 0x4e, 0x44, 0xf1, 0x60, 0x60, 0x7c, 0x30, 0xbe, 0xa3, 0x24, 0xdd, 0x86, 0x61, 0xbe, - 0x32, 0x40, 0xc0, 0x89, 0x54, 0x46, 0xd9, 0x57, 0x16, 0xdc, 0x99, 0x52, 0x67, 0x9f, 0xf8, 0x2b, - 0x86, 0x69, 0x27, 0x10, 0xa2, 0x62, 0x8c, 0xc6, 0x28, 0xae, 0x5a, 0x7b, 0xd2, 0x3f, 0x25, 0x27, - 0x6b, 0xe2, 0xa4, 0xbd, 0x9b, 0x3b, 0x9a, 0xae, 0xa7, 0x82, 0x43, 0x9f, 0x1d, 0xde, 0x1f, 0x13, - 0x31, 0xab, 0x5e, 0x24, 0x61, 0x2d, 0xb5, 0xe5, 0x89, 0x94, 0xcb, 0xe9, 0xdc, 0x7f, 0x12, 0x09, - 0x8a, 0x64, 0xb7, 0x02, 0x01, 0xb3, 0xe1, 0xb9, 0xb8, 0x7f, 0xab, 0x8f, 0x13, 0x68, 0xf8, 0x5c, - 0xbc, 0x6d, 0x8e, 0xb8, 0xce, 0x7f, 0x6a, 0xbd, 0x84, 0x33, 0x10, 0x5c, 0x5b, 0x0b, 0xae, 0x8f, - 0x2f, 0x75, 0xf1, 0x10, 0x44, 0x5b, 0x29, 0xd4, 0x3f, 0xc1, 0x11, 0x25, 0xf4, 0x4e, 0x78, 0x86, - 0x40, 0xe8, 0xb2, 0x8f, 0x65, 0xaf, 0x10, 0x09, 0xe5, 0xa4, 0x3e, 0x56, 0x56, 0x7b, 0x89, 0x8c, - 0xbb, 0x96, 0x3b, 0x78, 0xda, 0x99, 0xa6, 0xab, 0xf4, 0x7b, 0xde, 0x8d, 0xeb, 0x2a, 0x5d, 0x29, - 0x92, 0x27, 0x84, 0x4b, 0x69, 0x36, 0x24, 0xb3, 0x50, 0xe5, 0x15, 0x91, 0x5a, 0x4a, 0xfb, 0x41, - 0x53, 0x3c, 0xb1, 0x10, 0x53, 0x39, 0xf5, 0x38, 0xc5, 0xd1, 0x2f, 0x6d, 0x3e, 0x92, 0x19, 0xe6, - 0xf1, 0x0f, 0x2c, 0x4c, 0xd6, 0x35, 0x9b, 0xae, 0x0a, 0x6c, 0x89, 0x89, 0x63, 0x92, 0xba, 0x3e, - 0x38, 0xce, 0x26, 0x3e, 0x89, 0x97, 0xc6, 0x16, 0x89, 0x5b, 0xfd, 0x91, 0x5c, 0x5f, 0x21, 0xe6, - 0x47, 0xa5, 0xed, 0x7b, 0xdb, 0x7f, 0x8c, 0x39, 0x37, 0x2e, 0x67, 0x25, 0x33, 0x15, 0x6b, 0xaa, - 0xf8, 0x52, 0x6c, 0xb3, 0x3c, 0x99, 0xcf, 0x42, 0xef, 0x47, 0x67, 0xc2, 0x99, 0x6b, 0xd5, 0x52, - 0x6f, 0x2e, 0x71, 0x5b, 0xbf, 0xc4, 0x42, 0xab, 0x2a, 0x7d, 0x9a, 0xa1, 0xaf, 0x12, 0x0a, 0x0d, - 0x10, 0xfc, 0xff, 0xbf, 0xc5, 0x68, 0x11, 0x15, 0xd7, 0x6e, 0xbe, 0x0b, 0xa3, 0xcb, 0xd5, 0xf6, - 0x33, 0x30, 0xff, 0x2f, 0x1b, 0xc7, 0xe0, 0x97, 0x6c, 0x1d, 0xf7, 0x7c, 0xbe, 0x0a, 0xf8, 0xce, - 0x4d, 0xda, 0xae, 0xd1, 0x91, 0x6e, 0xff, 0x0d, 0x9f, 0x2f, 0xaf, 0xe3, 0x3d, 0xf8, 0x81, 0x0f, - 0x88, 0x71, 0xa7, 0xf8, 0x9a, 0x12, 0xdc, 0x48, 0x80, 0x88, 0xc1, 0x59, 0xb8, 0x85, 0x8c, 0x5d, - 0x31, 0x3f, 0x2b, 0xf1, 0x3f, 0x12, 0x27, 0xc4, 0x0a, 0x17, 0x98, 0x82, 0x33, 0x45, 0x8d, 0x7e, - 0x30, 0xc2, 0xf2, 0x4a, 0xdb, 0x6c, 0x85, 0x4b, 0xb3, 0xf1, 0x6e, 0xb9, 0x6e, 0xb8, 0x88, 0x52, - 0x8c, 0x08, 0xb4, 0x14, 0x81, 0x76, 0xc1, 0x05, 0x95, 0x3f, 0x6d, 0x20, 0x65, 0xab, 0xd6, 0x1f, - 0x57, 0x19, 0xb5, 0xee, 0x37, 0x76, 0x30, 0x54, 0xb0, 0x36, 0xf8, 0x26, 0xdb, 0x1d, 0xda, 0xc7, - 0xa4, 0x21, 0x9e, 0x4c, 0x57, 0xf8, 0xab, 0x6b, 0x59, 0xbe, 0x5e, 0x4a, 0x68, 0x74, 0x3f, 0x2c, - 0x7d, 0x2e, 0xb8, 0xd2, 0xf1, 0x56, 0x87, 0xd2, 0xbf, 0x3d, 0xf8, 0xeb, 0x09, 0x4f, 0x49, 0xe9, - 0x25, 0x52, 0x7c, 0x40, 0xae, 0x9b, 0xa7, 0x7a, 0xe6, 0xd6, 0x2f, 0xe1, 0x1b, 0xdb, 0x57, 0x6b, - 0xad, 0xf8, 0x90, 0x4e, 0x74, 0xf3, 0xeb, 0x1e, 0xac, 0x5d, 0xf0, 0x43, 0x2b, 0x09, 0x6b, 0xb3, - 0xc4, 0x82, 0xa9, 0x3a, 0x7e, 0xa9, 0xb6, 0x9d, 0xfb, 0xe1, 0x11, 0x48, 0xfa, 0xaa, 0x9a, 0xcb, - 0xa5, 0x26, 0x3d, 0x5e, 0x13, 0x12, 0x8a, 0xac, 0xcc, 0x63, 0x1e, 0xaa, 0xf8, 0x66, 0x7e, 0xbf, - 0x87, 0xf3, 0xd0, 0x70, 0xf0, 0xba, 0x22, 0x51, 0xe2, 0x04, 0x90, 0x99, 0xb6, 0x33, 0x52, 0xb7, - 0xa7, 0x5e, 0x22, 0x11, 0x2b, 0x48, 0x71, 0x5f, 0x27, 0x8c, 0xa6, 0x25, 0xde, 0x20, 0x48, 0x52, - 0xe3, 0x67, 0x2d, 0x8f, 0x2f, 0x96, 0x1d, 0x67, 0x1f, 0x14, 0x35, 0xad, 0xfe, 0x0a, 0x65, 0x1d, - 0x74, 0xab, 0x8c, 0xcd, 0xf3, 0x79, 0x3e, 0xb6, 0xeb, 0xd3, 0x7f, 0x7e, 0x26, 0x49, 0x98, 0x8b, - 0xf0, 0x50, 0x52, 0x20, 0x48, 0xac, 0xa6, 0x9f, 0x1d, 0xcf, 0xe1, 0x7d, 0x7a, 0x15, 0xe4, 0x23, - 0xbd, 0xfc, 0xb7, 0x3f, 0x7a, 0xfc, 0xd7, 0xbf, 0xdd, 0x56, 0xaf, 0x12, 0x4a, 0xaf, 0xe2, 0xf9, - 0x3e, 0x7f, 0xf9, 0x69, 0x5f, 0xe5, 0x91, 0xd9, 0x24, 0xb8, 0x26, 0x8c, 0x26, 0x36, 0x2d, 0x26, - 0x76, 0x7c, 0x95, 0x36, 0x7e, 0x30, 0xf9, 0xb1, 0x56, 0xaa, 0xab, 0x51, 0x75, 0xf8, 0x90, 0x51, - 0x6d, 0x2d, 0x76, 0xbb, 0xe2, 0x35, 0x56, 0xb8, 0xe6, 0xbe, 0x0b, 0x3c, 0x57, 0xb8, 0xae, 0xd3, - 0xa1, 0x77, 0xc5, 0x99, 0xcd, 0x70, 0xaa, 0x64, 0x03, 0xe8, 0xfe, 0x46, 0x23, 0xd4, 0x20, 0x0b, - 0xcc, 0x7c, 0x64, 0xe4, 0x1a, 0x92, 0xa1, 0x48, 0x7c, 0xa8, 0xb6, 0xcc, 0xff, 0x48, 0x7c, 0x68, - 0x2d, 0x64, 0xb8, 0xb9, 0x08, 0x5f, 0x3f, 0xfe, 0x0b, 0xf6, 0x38, 0x79, 0xbe, 0x9a, 0x5b, 0x6a, - 0xde, 0x2f, 0xfe, 0x12, 0xb2, 0x18, 0x31, 0xe9, 0xd3, 0x5c, 0x16, 0x96, 0x33, 0x5c, 0x7e, 0xce, - 0x79, 0x4d, 0x2b, 0xc4, 0x09, 0x12, 0x67, 0x76, 0x7a, 0xe7, 0x35, 0x3e, 0x0b, 0x72, 0xf5, 0x3e, - 0xc8, 0xf3, 0x5f, 0xf3, 0x2f, 0x19, 0x63, 0x14, 0x3a, 0x30, 0xad, 0x45, 0x32, 0x30, 0x5f, 0x36, - 0xe2, 0xf1, 0x0e, 0x50, 0xf9, 0xf8, 0x2b, 0x2b, 0x18, 0xe7, 0xd5, 0xb2, 0x4b, 0x57, 0xab, 0x88, - 0x24, 0x96, 0xbd, 0xf6, 0x3f, 0x97, 0xf5, 0xff, 0xc1, 0x1f, 0x22, 0xef, 0xa9, 0x78, 0x40, 0xe7, - 0x0d, 0x2a, 0xe5, 0xce, 0x52, 0x46, 0x8b, 0x7f, 0x82, 0x8d, 0x52, 0x2e, 0x6a, 0xae, 0x47, 0x71, - 0x64, 0xac, 0xdd, 0x57, 0x4d, 0xf2, 0x56, 0xbf, 0x15, 0xb7, 0x57, 0x6f, 0xf1, 0x5b, 0x77, 0xbd, - 0xfc, 0x11, 0x55, 0xaf, 0xbe, 0x12, 0x3e, 0xee, 0x4f, 0x5f, 0x82, 0x72, 0x36, 0xbd, 0x5f, 0xd7, - 0xc9, 0x4b, 0x4b, 0xc2, 0x3a, 0x73, 0xcb, 0x2f, 0x4a, 0x45, 0x29, 0x33, 0x7c, 0x67, 0x48, 0x56, - 0x43, 0x56, 0x98, 0xda, 0x30, 0x7a, 0x48, 0x8e, 0x30, 0x4c, 0xea, 0xbf, 0x08, 0x55, 0x77, 0x2e, - 0x20, 0xa1, 0x63, 0xdd, 0x3e, 0x5b, 0x3b, 0x46, 0x5f, 0x88, 0x17, 0xc8, 0x88, 0xdd, 0x72, 0x6c, - 0xf1, 0x25, 0xe5, 0xd6, 0xb5, 0x59, 0xd5, 0xc4, 0x18, 0xcb, 0x37, 0xf1, 0x02, 0x88, 0x92, 0x29, - 0xd7, 0x05, 0x46, 0x70, 0x7a, 0xf7, 0xfb, 0xf0, 0xaa, 0xfd, 0xfc, 0x27, 0x7c, 0x26, 0x0f, 0xf8, - 0xda, 0x69, 0x7e, 0x28, 0xb3, 0xeb, 0x53, 0x67, 0x7f, 0x11, 0xe3, 0xf3, 0x83, 0x12, 0x9e, 0x5f, - 0xf8, 0x2b, 0xb2, 0x5a, 0x56, 0x96, 0xf7, 0xbd, 0x71, 0x19, 0x7e, 0x5c, 0x3c, 0x0a, 0x92, 0xfc, - 0x3f, 0x45, 0x6b, 0x1d, 0x99, 0x33, 0x33, 0x5a, 0x1d, 0xd3, 0x6c, 0xa7, 0x07, 0xe5, 0xf6, 0xf1, - 0x31, 0x10, 0xe3, 0xac, 0xae, 0xb9, 0xba, 0x7a, 0x89, 0x82, 0x53, 0xc6, 0x3d, 0xd8, 0x44, 0x35, - 0x5a, 0xf9, 0x7c, 0x94, 0x68, 0xd2, 0xf9, 0x74, 0xad, 0x78, 0x4b, 0x9a, 0xd9, 0xea, 0xbe, 0x1b, - 0xe4, 0x54, 0xdb, 0x3e, 0xd1, 0xb3, 0x37, 0x09, 0x99, 0x2b, 0x5e, 0x56, 0x3c, 0x7d, 0xba, 0xb4, - 0xe7, 0xc7, 0x19, 0xe9, 0xcd, 0x2f, 0x12, 0x25, 0x6b, 0xad, 0x46, 0xf0, 0x44, 0x65, 0x27, 0x6d, - 0x9e, 0x6f, 0x96, 0xaa, 0xaa, 0x6c, 0x41, 0xbb, 0xba, 0xe6, 0xa7, 0x51, 0xc5, 0x7c, 0x92, 0x7d, - 0x17, 0xc5, 0x5b, 0x1c, 0x6c, 0x4d, 0x98, 0x6e, 0xe6, 0x29, 0x78, 0x4f, 0x6e, 0xd9, 0xd4, 0xaa, - 0x81, 0xaf, 0x8e, 0x36, 0x21, 0xa0, 0xeb, 0x47, 0x0c, 0xb4, 0xf2, 0xdb, 0x5e, 0x0a, 0xca, 0x36, - 0x6d, 0x5e, 0x5c, 0x2d, 0xa3, 0x4d, 0x6e, 0x86, 0x60, 0xca, 0x2d, 0x5f, 0xe0, 0xa0, 0xad, 0xaf, - 0xcb, 0xfb, 0xe3, 0x3c, 0x7a, 0xc1, 0x0b, 0x72, 0xff, 0x18, 0xad, 0xf6, 0xd3, 0xee, 0x86, 0xd3, - 0x7c, 0x07, 0xe3, 0xc8, 0x95, 0xad, 0x19, 0x72, 0xef, 0x3e, 0x78, 0x68, 0xab, 0x79, 0xef, 0x88, - 0xc2, 0x4a, 0xfc, 0x95, 0xb6, 0x97, 0x84, 0x8b, 0x99, 0xa6, 0x6a, 0x76, 0xaf, 0x98, 0x53, 0xd0, - 0xfe, 0x09, 0x8a, 0x4e, 0x9e, 0xb5, 0xb7, 0x88, 0x97, 0x82, 0x79, 0x15, 0x11, 0x53, 0x5d, 0x33, - 0x76, 0x33, 0x2f, 0x85, 0x2a, 0x9e, 0x6d, 0x3e, 0x72, 0xf7, 0xd1, 0x29, 0x04, 0x07, 0xef, 0x8e, - 0xb1, 0x30, 0xd5, 0x33, 0xa8, 0xfa, 0x19, 0xc4, 0x0d, 0xf9, 0x7c, 0xdf, 0xc1, 0x3f, 0x77, 0xd2, - 0x73, 0x27, 0xc1, 0x3e, 0x9d, 0x3e, 0x59, 0x3f, 0xd7, 0xbe, 0x08, 0xb3, 0x6a, 0x97, 0xbb, 0xec, - 0xb8, 0xc5, 0x30, 0xef, 0x21, 0x95, 0x58, 0x3f, 0x89, 0x21, 0x65, 0x64, 0x9a, 0x2c, 0xc8, 0xbc, - 0xdd, 0x55, 0x76, 0x54, 0x77, 0x9b, 0x84, 0x88, 0xea, 0x9c, 0xff, 0xac, 0x40, 0x9e, 0x7f, 0x12, - 0xf8, 0x5d, 0xa3, 0xff, 0x94, 0x4e, 0x3b, 0x56, 0x5e, 0x24, 0x46, 0xab, 0x25, 0x30, 0xaf, 0x31, - 0x75, 0x55, 0xc2, 0x3c, 0x57, 0xbd, 0xde, 0x9f, 0xc9, 0x7b, 0xb9, 0x62, 0x77, 0xc7, 0x55, 0x7b, - 0xdd, 0x75, 0x78, 0x80, 0x91, 0xdb, 0x6b, 0x55, 0xd7, 0x08, 0x8a, 0x64, 0x39, 0xdd, 0x1b, 0x66, - 0xee, 0xa1, 0x39, 0x6d, 0xd0, 0x9f, 0x2d, 0x56, 0xc2, 0x5c, 0xc2, 0x5b, 0xd4, 0xd1, 0x33, 0x1a, - 0xf2, 0xb1, 0x89, 0x82, 0x1b, 0xbe, 0xef, 0x85, 0x24, 0xed, 0x29, 0x1e, 0xfe, 0x7f, 0x64, 0xf4, - 0xbb, 0x9b, 0xa5, 0xf8, 0x62, 0xe7, 0xcd, 0x9e, 0x69, 0x56, 0x3e, 0xbf, 0xfc, 0x11, 0x77, 0x2e, - 0x74, 0x9d, 0x70, 0xf8, 0xbd, 0x6c, 0xb8, 0xce, 0x9e, 0xbd, 0xf1, 0x3c, 0xac, 0x5e, 0x9c, 0x29, - 0xc9, 0x77, 0xfc, 0xdb, 0xbb, 0x8a, 0xe8, 0xec, 0x04, 0x76, 0x65, 0x42, 0x5f, 0x96, 0xaa, 0xa9, - 0x38, 0x89, 0x35, 0xae, 0x26, 0x26, 0xf7, 0xbe, 0xd0, 0x24, 0xc4, 0x98, 0x5b, 0xdd, 0xfc, 0x25, - 0x7d, 0xdf, 0x52, 0x72, 0x72, 0xea, 0x6b, 0x93, 0x93, 0x15, 0xf7, 0x77, 0xdf, 0x26, 0xb5, 0x2f, - 0x04, 0x62, 0xb5, 0x35, 0x1c, 0x9b, 0x9b, 0x6e, 0xe4, 0xe5, 0xd2, 0x9a, 0xdf, 0x35, 0x3a, 0x70, - 0xaf, 0x25, 0x56, 0xbe, 0x63, 0xea, 0xaa, 0x27, 0x3f, 0x21, 0x75, 0x51, 0x1c, 0x83, 0x37, 0x71, - 0x1c, 0x24, 0x77, 0xdd, 0xb7, 0xdf, 0x21, 0x9d, 0x3c, 0x37, 0xc9, 0xad, 0x7c, 0xa5, 0x5a, 0xd4, - 0x4e, 0x1a, 0xe1, 0x3c, 0xf9, 0xea, 0x98, 0x5f, 0x94, 0xf8, 0xbd, 0xf3, 0x0a, 0xd5, 0x5f, 0x09, - 0x16, 0xb5, 0x7b, 0xc6, 0x70, 0x9f, 0x54, 0xda, 0x3e, 0x63, 0x79, 0x89, 0xcd, 0xc3, 0x51, 0x3f, - 0x94, 0x4e, 0xaa, 0x11, 0xea, 0xf1, 0x9c, 0x51, 0x29, 0x3e, 0xe9, 0x78, 0x98, 0x4f, 0x11, 0x37, - 0x04, 0xe4, 0x5a, 0xd6, 0xb6, 0x84, 0xf9, 0xba, 0xaa, 0xe5, 0x1b, 0x8a, 0xe1, 0xbc, 0x44, 0x35, - 0xc8, 0x31, 0xee, 0xe1, 0xdc, 0x44, 0x02, 0x0f, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x3e, 0x1f, - 0x30, 0x22, 0xbc, 0x41, 0x91, 0xcc, 0xc3, 0x69, 0x15, 0xbf, 0xb2, 0xeb, 0x6f, 0xc7, 0x13, 0x77, - 0x9e, 0x08, 0xb4, 0x84, 0x34, 0xbf, 0x84, 0x05, 0xb7, 0xd9, 0xd6, 0x24, 0x70, 0xef, 0xc6, 0x2f, - 0x3e, 0x13, 0x7c, 0x68, 0x86, 0xd5, 0x38, 0xe2, 0x61, 0x8c, 0x42, 0x80, 0xc5, 0x6f, 0x13, 0xb9, - 0x18, 0x99, 0x44, 0xec, 0x47, 0xd7, 0xfc, 0x29, 0x56, 0xfc, 0x8f, 0x88, 0x54, 0x5b, 0x97, 0x43, - 0xd4, 0xc3, 0x96, 0x25, 0x92, 0xdc, 0x57, 0x97, 0xc2, 0x82, 0xf1, 0x9a, 0x54, 0x45, 0x1b, 0x24, - 0x86, 0xd0, 0xc0, 0x65, 0xb9, 0x5d, 0x45, 0x99, 0xed, 0x50, 0x65, 0xfc, 0x29, 0x3e, 0x3c, 0x82, - 0xdc, 0x69, 0x2b, 0x4e, 0xef, 0xb3, 0xd2, 0x34, 0x1b, 0x89, 0xb7, 0x0a, 0x63, 0x55, 0x7a, 0xf8, - 0x74, 0x66, 0xef, 0xcd, 0x96, 0xf7, 0x5f, 0x6d, 0xb5, 0x6f, 0xc1, 0x04, 0xbb, 0xdb, 0x46, 0xec, - 0xda, 0x69, 0x03, 0x69, 0x1a, 0xfa, 0xa3, 0x5f, 0x84, 0x39, 0x57, 0xcb, 0x59, 0xa9, 0xfc, 0x24, - 0x27, 0x3e, 0x75, 0x4b, 0xc3, 0xe4, 0x1b, 0xce, 0xa5, 0x3f, 0xad, 0xaf, 0xa7, 0x9e, 0x8e, 0x3f, - 0x52, 0xda, 0x85, 0xcc, 0x8b, 0xf2, 0xf6, 0xbc, 0x28, 0x74, 0xe3, 0x2c, 0x9c, 0xca, 0x49, 0xe6, - 0x6a, 0xf6, 0xf6, 0x5a, 0xa4, 0xf6, 0xb0, 0x8e, 0x8e, 0x2d, 0x7c, 0x28, 0x66, 0x24, 0x9e, 0xa2, - 0x34, 0x9c, 0x3a, 0xd6, 0x3d, 0x88, 0x47, 0xa4, 0xd4, 0x4a, 0xfc, 0x5b, 0xca, 0x41, 0x4a, 0x1e, - 0x0a, 0x73, 0xa8, 0x41, 0xbd, 0x88, 0x36, 0x1a, 0xba, 0x40, 0xc3, 0x6a, 0x0f, 0x9d, 0x5b, 0x92, - 0x62, 0x3e, 0x51, 0xa9, 0xa6, 0x9a, 0x7e, 0xb9, 0xfe, 0x71, 0x28, 0xef, 0xd3, 0x4d, 0xb6, 0xff, - 0xfe, 0x25, 0x13, 0x3b, 0xe0, 0xbb, 0x3e, 0x5f, 0x66, 0x4c, 0xea, 0xea, 0x65, 0x3e, 0x0b, 0x8d, - 0xcf, 0x96, 0xad, 0xbf, 0xcb, 0x3e, 0x9f, 0x6b, 0xd7, 0x1a, 0x29, 0x0f, 0x2e, 0x95, 0x02, 0xe3, - 0x8b, 0x5b, 0xa7, 0xb4, 0x84, 0x1b, 0x60, 0x4d, 0x1c, 0x36, 0x70, 0x71, 0xe4, 0x48, 0x7e, 0xb8, - 0x52, 0x9e, 0x4f, 0x72, 0xee, 0x63, 0x15, 0x32, 0xad, 0x56, 0xe3, 0x28, 0xe9, 0xe0, 0x93, 0x85, - 0xad, 0xa3, 0x90, 0xea, 0x1d, 0x68, 0x66, 0x8a, 0x9e, 0x74, 0xcd, 0x1a, 0xff, 0xc1, 0x5c, 0x6a, - 0xe4, 0x4f, 0x8c, 0x21, 0xfb, 0x58, 0xf5, 0x1a, 0x5b, 0x48, 0xec, 0x8c, 0x2f, 0x82, 0xf3, 0x95, - 0xbb, 0x72, 0xeb, 0x79, 0xb9, 0xaa, 0x29, 0xe6, 0x68, 0xff, 0x82, 0x33, 0x51, 0x95, 0xd4, 0x66, - 0x15, 0x70, 0x4e, 0x5d, 0x59, 0x37, 0xb9, 0xd3, 0xe2, 0xb3, 0x99, 0xb6, 0xb6, 0x6c, 0x6b, 0x86, - 0xca, 0x6b, 0x4d, 0x95, 0x7e, 0x68, 0x1e, 0xbf, 0x8f, 0x14, 0x73, 0x55, 0x71, 0xb5, 0xd6, 0xb2, - 0x33, 0xf0, 0x47, 0x3a, 0xd6, 0x0d, 0x96, 0x5f, 0x0d, 0x85, 0x79, 0x71, 0x71, 0x57, 0xff, 0x0c, - 0x65, 0xcc, 0xb9, 0xea, 0x7a, 0x47, 0xff, 0xb2, 0x3b, 0xfe, 0xb1, 0x7d, 0x1e, 0xf5, 0xc5, 0x06, - 0x90, 0x90, 0x68, 0x41, 0x44, 0xc9, 0x36, 0xfb, 0xf8, 0x26, 0x97, 0xe5, 0xb9, 0x6d, 0xde, 0xef, - 0x96, 0xfb, 0xae, 0x33, 0x35, 0x9e, 0x17, 0x6e, 0xee, 0xdb, 0x1d, 0xee, 0xef, 0xe6, 0x2f, 0x2f, - 0x2f, 0x0a, 0x0a, 0xe4, 0x62, 0x76, 0xb1, 0x38, 0x30, 0x16, 0xa5, 0x09, 0xbc, 0x64, 0x6d, 0xe9, - 0x57, 0x82, 0xa2, 0xcf, 0x96, 0x3e, 0x69, 0x9d, 0x8c, 0xaa, 0x4a, 0xa1, 0x8f, 0x84, 0xf3, 0x19, - 0x88, 0x3b, 0x32, 0xa8, 0x87, 0xd5, 0x3c, 0x51, 0xe7, 0x8b, 0x0b, 0xc3, 0xc9, 0x5a, 0xb5, 0xc2, - 0x56, 0x36, 0xd7, 0x45, 0x51, 0x7d, 0x0b, 0x7a, 0xe8, 0x8f, 0x0a, 0xf4, 0x2f, 0xaf, 0xa2, 0x39, - 0x2f, 0x28, 0x49, 0xdb, 0xfc, 0xb9, 0xb2, 0x97, 0xbe, 0xee, 0x4e, 0x0b, 0x85, 0x2b, 0x3d, 0x89, - 0x8d, 0xdb, 0x62, 0xb8, 0xf2, 0xa0, 0x1a, 0x23, 0xa0, 0xaa, 0x74, 0x26, 0xa6, 0xca, 0xf8, 0x40, - 0x88, 0xd3, 0x63, 0x67, 0xd5, 0xb5, 0x43, 0xfd, 0x8b, 0x3d, 0x29, 0xfd, 0x9a, 0x4c, 0xfc, 0x12, - 0xd9, 0x99, 0x0d, 0x57, 0x1d, 0x41, 0x98, 0xf8, 0x8d, 0xee, 0xf4, 0xa2, 0x3a, 0x09, 0xb9, 0x0f, - 0xf2, 0x85, 0x35, 0x17, 0x5c, 0xc3, 0xeb, 0x48, 0x9c, 0xc4, 0xd5, 0x7c, 0x5d, 0x49, 0xfd, 0x8c, - 0xd3, 0x5c, 0x15, 0x1a, 0x64, 0x07, 0x14, 0xdd, 0xb2, 0xc1, 0xfc, 0xaa, 0x28, 0xd0, 0x16, 0xbe, - 0x08, 0x66, 0x6a, 0x3d, 0x26, 0xf8, 0xcd, 0xa1, 0xe3, 0x46, 0x56, 0xa6, 0xb9, 0xa1, 0xc9, 0x8a, - 0x39, 0x1b, 0xf8, 0x93, 0xd9, 0xaf, 0x1f, 0xc7, 0x89, 0x82, 0xed, 0x56, 0xda, 0xf2, 0xf1, 0x02, - 0xa9, 0x1a, 0x96, 0x26, 0x98, 0xec, 0x7c, 0x40, 0xe1, 0xcc, 0xcd, 0x4a, 0xea, 0xba, 0xab, 0xc4, - 0x7d, 0x86, 0x56, 0xb5, 0x13, 0xae, 0xbf, 0xfa, 0xbc, 0x39, 0xc3, 0x41, 0x4a, 0x54, 0xd7, 0xd3, - 0x2f, 0xfc, 0xd9, 0xb3, 0xf0, 0xa6, 0x66, 0x17, 0x2b, 0x7c, 0x69, 0xa5, 0x2c, 0xa8, 0xac, 0x7c, - 0xa5, 0xdb, 0x4c, 0x9c, 0xa2, 0x6a, 0xb5, 0xc8, 0x20, 0xe7, 0x61, 0x47, 0xa3, 0x3c, 0x56, 0xc1, - 0x9f, 0xad, 0x6f, 0x38, 0x80, 0xd8, 0xfc, 0x9f, 0x82, 0x62, 0xd2, 0xb4, 0xac, 0x86, 0xda, 0x20, - 0x6e, 0xf8, 0x83, 0x21, 0xca, 0xa6, 0x4d, 0xdb, 0xf1, 0x14, 0x56, 0x97, 0x99, 0x47, 0xcb, 0x6a, - 0xac, 0x5e, 0x24, 0xb9, 0xb2, 0xd1, 0x3a, 0xb9, 0x8f, 0xf8, 0xea, 0xae, 0x68, 0x2d, 0x35, 0x5f, - 0x88, 0x1c, 0x29, 0x47, 0x17, 0xb6, 0xe9, 0x54, 0x99, 0xf8, 0x24, 0xa4, 0x33, 0x73, 0xf7, 0xc7, - 0x72, 0xe0, 0x59, 0x64, 0xf5, 0x6c, 0x64, 0xb7, 0x5c, 0xd9, 0xc2, 0x05, 0x1f, 0x8f, 0xaf, 0xec, - 0xef, 0x7c, 0x72, 0x8e, 0xbe, 0x9a, 0x4e, 0x28, 0x21, 0x9b, 0x22, 0x7d, 0x33, 0x76, 0x7e, 0x22, - 0x5e, 0x10, 0x2a, 0x8e, 0xdd, 0xba, 0x0c, 0xa3, 0xa3, 0xdb, 0x69, 0xf0, 0x43, 0xa7, 0x78, 0xe7, - 0xc3, 0x16, 0x36, 0x6d, 0xa6, 0xdb, 0x5f, 0x8a, 0x8c, 0xaf, 0xf2, 0x70, 0xcf, 0x49, 0xb5, 0xa4, - 0x4f, 0xfa, 0xe1, 0x22, 0xb7, 0x6a, 0xd6, 0xab, 0x98, 0xbb, 0xa8, 0xae, 0x28, 0x42, 0x19, 0xd9, - 0x7d, 0xbc, 0xb0, 0xf5, 0xd7, 0xcb, 0x49, 0x5e, 0xb8, 0x4f, 0x56, 0xd2, 0xbb, 0x4f, 0xe5, 0x3d, - 0xb7, 0xf9, 0x4a, 0x9e, 0x9f, 0x89, 0x32, 0x49, 0x7c, 0x6b, 0xde, 0x09, 0x04, 0x6e, 0xf1, 0x7c, - 0xc2, 0x58, 0x66, 0x9f, 0xe1, 0x4f, 0x3b, 0x05, 0x51, 0x45, 0x77, 0xa8, 0xd8, 0x37, 0x8f, 0x08, - 0x1a, 0x5b, 0xfc, 0xc4, 0x7d, 0x0f, 0xc1, 0x5c, 0xe4, 0xea, 0xad, 0xd2, 0xbb, 0x9c, 0x5a, 0x05, - 0xb3, 0xe0, 0x8c, 0x95, 0x31, 0xbf, 0xbe, 0x33, 0x6a, 0x40, 0x00, 0x0a, 0xb4, 0x87, 0xb4, 0x3f, - 0x8c, 0x79, 0x1e, 0x33, 0x65, 0xc9, 0x0f, 0xfa, 0x1a, 0xc1, 0x17, 0xc2, 0x1c, 0x4b, 0xcb, 0x8c, - 0x21, 0x7b, 0x0e, 0x20, 0x93, 0xd8, 0xb9, 0xeb, 0x96, 0xf1, 0x22, 0x45, 0x1d, 0xf6, 0xad, 0xda, - 0xc4, 0x89, 0x0a, 0x1f, 0x43, 0x72, 0xe3, 0xe2, 0x18, 0x21, 0xb3, 0x36, 0x40, 0x1b, 0x1b, 0xe1, - 0x1d, 0x0c, 0x1e, 0x75, 0xe0, 0x88, 0xcf, 0xbb, 0x0f, 0x04, 0xc3, 0x1f, 0x7a, 0x36, 0x23, 0xe7, - 0xd5, 0x10, 0x10, 0x9b, 0x10, 0x62, 0xa9, 0x98, 0xe1, 0xb6, 0x19, 0xff, 0xef, 0xf1, 0xf1, 0xc7, - 0xeb, 0x5a, 0xe8, 0x29, 0x15, 0x71, 0x53, 0xd2, 0x95, 0x86, 0x9c, 0xe4, 0xda, 0x7c, 0x85, 0x76, - 0x7f, 0x85, 0x0b, 0x49, 0xfc, 0x5a, 0xb5, 0x4b, 0x49, 0x28, 0x3e, 0x08, 0x4c, 0x4d, 0xd3, 0x2c, - 0xf4, 0xbf, 0x0a, 0xe6, 0xb3, 0x4b, 0x4e, 0xed, 0x29, 0x63, 0xaf, 0xfa, 0xfd, 0x5c, 0x49, 0x69, - 0x1b, 0x76, 0x34, 0x34, 0xdc, 0xbc, 0x12, 0x4f, 0x9e, 0x0f, 0x82, 0x3a, 0xaf, 0x5f, 0x1c, 0x21, - 0x6d, 0xe9, 0xa3, 0x2c, 0x13, 0xdb, 0x7d, 0x06, 0xfb, 0xe2, 0x0d, 0xbb, 0xee, 0xfe, 0x50, 0x96, - 0x9b, 0x6b, 0x84, 0x8f, 0xa6, 0x96, 0xe6, 0xd5, 0xc1, 0x48, 0xa4, 0xd3, 0xf6, 0x9a, 0x5a, 0x48, - 0x93, 0x3f, 0x25, 0x74, 0xfc, 0x10, 0x96, 0xb5, 0xf1, 0xf2, 0x73, 0xff, 0x82, 0xce, 0xac, 0x8d, - 0x27, 0xf6, 0x4b, 0x3b, 0xe0, 0x88, 0x86, 0xbb, 0x45, 0xef, 0x84, 0x4e, 0xc0, 0xcd, 0xe5, 0x10, - 0x90, 0x2e, 0x72, 0x48, 0xf7, 0xa4, 0x88, 0xaa, 0x3c, 0x55, 0xdd, 0xa8, 0xd8, 0xc5, 0x7a, 0x4f, - 0xe0, 0xb8, 0x8d, 0xa1, 0xbd, 0xd0, 0x39, 0xe1, 0x17, 0xc9, 0x76, 0x53, 0x43, 0xd7, 0x3f, 0xc7, - 0xf4, 0xa5, 0x81, 0x18, 0x83, 0x69, 0xe7, 0xab, 0x7e, 0x7a, 0xf8, 0x25, 0xd6, 0xaa, 0xe5, 0x74, - 0x6e, 0xa3, 0x33, 0x91, 0x38, 0x88, 0x8b, 0x72, 0x64, 0x4f, 0x96, 0x6a, 0xcb, 0x10, 0x20, 0x45, - 0x08, 0x90, 0x27, 0x8e, 0x71, 0x2a, 0x84, 0x63, 0x1e, 0x34, 0xaf, 0xd8, 0x98, 0x82, 0x1c, 0xe1, - 0x48, 0x30, 0x2e, 0x5a, 0xfe, 0x09, 0x86, 0x90, 0xfe, 0xe9, 0x22, 0x4a, 0x7f, 0x36, 0xde, 0xb1, - 0x34, 0x2d, 0x0d, 0x4d, 0x32, 0x7c, 0xa1, 0x8d, 0xa3, 0x43, 0xc2, 0x87, 0xe6, 0xd4, 0xc1, 0xd9, - 0xee, 0x25, 0x5c, 0x99, 0xb3, 0x25, 0xf1, 0x78, 0x8b, 0xe6, 0x24, 0xed, 0xb5, 0xe2, 0x68, 0xeb, - 0x8d, 0x24, 0xaf, 0x82, 0x93, 0xdd, 0xfa, 0x4f, 0xc8, 0xf9, 0x7c, 0x11, 0xd6, 0xcd, 0x26, 0x4b, - 0xd9, 0x6e, 0x8a, 0xb9, 0xad, 0xd2, 0xf9, 0xa6, 0x93, 0x69, 0xfd, 0xdd, 0xdd, 0x7d, 0x95, 0xba, - 0xfc, 0x10, 0xdb, 0x4e, 0xba, 0x6b, 0xe8, 0xdd, 0xf4, 0x3c, 0xb7, 0xd7, 0x2a, 0xe4, 0x0b, 0x3b, - 0xe2, 0x78, 0x25, 0x3b, 0xee, 0xf9, 0x85, 0x1e, 0xbe, 0x09, 0xe9, 0x11, 0x5d, 0x37, 0xc6, 0x51, - 0x18, 0xf8, 0x4a, 0xf1, 0xb3, 0x29, 0xc4, 0x4c, 0x2c, 0x79, 0x8a, 0xe6, 0x31, 0x22, 0xdd, 0x97, - 0x82, 0x32, 0x95, 0x51, 0x97, 0x66, 0x6c, 0x7c, 0x25, 0x96, 0x54, 0x12, 0x6d, 0x35, 0xf0, 0x4f, - 0x49, 0xf9, 0xd4, 0x6c, 0xf1, 0x25, 0x17, 0x89, 0x54, 0xf8, 0x44, 0x12, 0x0a, 0xb9, 0xd4, 0x7d, - 0xe2, 0x41, 0x34, 0x8f, 0x4c, 0x6e, 0xe2, 0x4a, 0x5b, 0x03, 0x03, 0x59, 0x19, 0xdc, 0xae, 0x2e, - 0xfb, 0x58, 0x18, 0xd7, 0x1e, 0x30, 0xf0, 0xa5, 0x01, 0x98, 0x62, 0xdf, 0x6d, 0x3b, 0xb9, 0xe3, - 0xc9, 0x55, 0xa2, 0x25, 0x56, 0xb4, 0x6c, 0x3c, 0x10, 0x13, 0x97, 0x1f, 0x3c, 0x2e, 0x86, 0x40, - 0xb3, 0x3f, 0x4d, 0x99, 0xbe, 0x22, 0x8e, 0xff, 0x04, 0xe6, 0x9b, 0x24, 0x31, 0xcd, 0xd7, 0x05, - 0x0c, 0x4c, 0x29, 0x25, 0x65, 0x7a, 0x6d, 0x46, 0x59, 0x1c, 0xf0, 0xe2, 0xaf, 0x53, 0xb2, 0x53, - 0xb1, 0x33, 0xfc, 0xa6, 0xf0, 0xf0, 0x58, 0xfc, 0x48, 0x80, 0xa5, 0x49, 0x42, 0x4a, 0xb3, 0x25, - 0x62, 0xd4, 0xda, 0x22, 0x66, 0xaa, 0x22, 0xbf, 0xa1, 0x50, 0x42, 0xb4, 0xab, 0x12, 0x24, 0x65, - 0xef, 0x7b, 0xca, 0xc7, 0x6c, 0x39, 0x2a, 0xc6, 0x99, 0x9f, 0xc1, 0x1d, 0x8a, 0x02, 0x29, 0xd8, - 0xc7, 0xf7, 0x5e, 0x5f, 0x09, 0xc9, 0x6b, 0xb8, 0xf2, 0xcf, 0x30, 0xf0, 0xee, 0x09, 0x1d, 0x36, - 0x82, 0x11, 0x5d, 0x56, 0xa7, 0x53, 0x64, 0xbf, 0xa7, 0xa5, 0xb1, 0xff, 0xff, 0xc7, 0x3b, 0xeb, - 0x8a, 0x2d, 0xec, 0xb9, 0x23, 0xe0, 0x86, 0x78, 0xfb, 0xc9, 0xd9, 0x5a, 0xa5, 0x27, 0x42, 0x65, - 0x7c, 0x20, 0x42, 0xc1, 0xf4, 0xa9, 0x74, 0xdb, 0x13, 0xd0, 0xae, 0xf9, 0x6a, 0x9d, 0x5f, 0x1f, - 0x55, 0x9b, 0xa7, 0x8e, 0x2e, 0x4e, 0xb2, 0xb8, 0x22, 0x17, 0x93, 0xfb, 0xec, 0xd6, 0xda, 0xae, - 0x18, 0xd5, 0xdb, 0x0e, 0x5d, 0xdb, 0xcd, 0x39, 0x8d, 0x7e, 0xdb, 0xb7, 0xe0, 0xb0, 0x87, 0x23, - 0xd3, 0x69, 0xaa, 0x08, 0xf1, 0xf5, 0xef, 0x85, 0x29, 0xad, 0x18, 0x5b, 0x64, 0x35, 0x92, 0x06, - 0x50, 0xc0, 0x16, 0x65, 0xea, 0x5e, 0x91, 0x30, 0x9c, 0x78, 0x2b, 0xe2, 0x3e, 0x83, 0x52, 0x71, - 0x05, 0xaa, 0x96, 0x0a, 0x34, 0x3b, 0xbb, 0x1f, 0x57, 0x54, 0xcf, 0xc1, 0x2d, 0x2c, 0x92, 0xd5, - 0x34, 0xff, 0x17, 0xd4, 0x71, 0xc1, 0xca, 0xf8, 0x2b, 0xb1, 0x2d, 0x5b, 0xaa, 0xe3, 0xcd, 0x12, - 0xef, 0x8d, 0xaa, 0xf8, 0xab, 0x23, 0xf5, 0xa2, 0x96, 0xa4, 0xa8, 0x46, 0xda, 0x36, 0x8a, 0xf9, - 0x69, 0x9f, 0xf8, 0xef, 0x3f, 0xb4, 0x7c, 0xeb, 0xbe, 0x5f, 0x58, 0xbe, 0x09, 0x49, 0x5a, 0x97, - 0xa3, 0x03, 0xf6, 0x5f, 0x89, 0x10, 0x0a, 0xca, 0xb0, 0x29, 0x38, 0x9b, 0xb2, 0xd5, 0x57, 0x5b, - 0xc3, 0x78, 0x40, 0x12, 0xd9, 0x30, 0x82, 0xb8, 0xfa, 0xc2, 0x81, 0xfb, 0x12, 0xc4, 0xe7, 0x88, - 0x0f, 0x60, 0xf5, 0x53, 0x62, 0xca, 0xaa, 0xb4, 0xbe, 0x2a, 0xdb, 0xa7, 0x89, 0x10, 0x09, 0x6b, - 0x13, 0x31, 0x91, 0xa4, 0x8a, 0xbb, 0x60, 0xcf, 0x8c, 0x21, 0x60, 0xc4, 0x0d, 0x11, 0x83, 0x4e, - 0x03, 0x76, 0xdc, 0x01, 0x0c, 0x4a, 0xe2, 0x50, 0x5d, 0x24, 0x0b, 0xa4, 0x11, 0x73, 0x4f, 0x2a, - 0xb0, 0xc7, 0xd9, 0x3e, 0x1a, 0x65, 0xf8, 0x98, 0xd9, 0xfe, 0x16, 0x6b, 0x44, 0x02, 0x09, 0x40, - 0xb0, 0x16, 0xa8, 0xc9, 0x21, 0xd1, 0xc2, 0x13, 0xdf, 0x2a, 0x83, 0xcf, 0x22, 0xf4, 0xba, 0x90, - 0xf7, 0x85, 0x98, 0x5b, 0xe4, 0x0f, 0xdb, 0xc2, 0x82, 0xdf, 0xdb, 0x6c, 0xf4, 0xc4, 0x88, 0x0a, - 0x46, 0xe9, 0x19, 0x47, 0xa4, 0x22, 0xe3, 0xbe, 0x17, 0x59, 0x73, 0xd9, 0x72, 0x71, 0x6c, 0xbc, - 0x40, 0xcf, 0xad, 0x26, 0x30, 0x60, 0x87, 0xec, 0xb5, 0xcd, 0x8d, 0x0b, 0x93, 0xcc, 0xa7, 0xc7, - 0x73, 0x53, 0x07, 0x4b, 0xcd, 0xef, 0x7f, 0x45, 0xd4, 0x2f, 0xc1, 0x39, 0xc4, 0xf9, 0x31, 0x62, - 0x89, 0xb0, 0x91, 0xf6, 0x25, 0xf1, 0xc4, 0x43, 0xa9, 0x75, 0x57, 0x58, 0xf8, 0xfe, 0xf5, 0x5f, - 0x88, 0xbd, 0xdd, 0xc5, 0x7f, 0x9b, 0x26, 0x7e, 0x27, 0xa9, 0xb1, 0x92, 0xe4, 0xcf, 0x16, 0x7d, - 0x53, 0x8a, 0xd3, 0x7f, 0x19, 0x1f, 0xa7, 0xa3, 0x77, 0x72, 0xe0, 0xfd, 0x2e, 0xdc, 0xf9, 0xa9, - 0x70, 0x30, 0x87, 0xc6, 0x91, 0xf9, 0xf1, 0x23, 0x98, 0xb9, 0x00, 0x89, 0xeb, 0xb6, 0xde, 0xdb, - 0xed, 0x13, 0x97, 0x98, 0x76, 0x2d, 0x74, 0x10, 0xb7, 0xbf, 0x46, 0xb4, 0xe1, 0x97, 0xeb, 0x6d, - 0x9e, 0x1e, 0x14, 0xb4, 0x30, 0x15, 0xbb, 0xc0, 0x28, 0xd4, 0xb5, 0x60, 0xc1, 0x35, 0x0c, 0x2b, - 0x59, 0xa7, 0x79, 0x68, 0x2c, 0x8e, 0x84, 0x49, 0x2c, 0xa8, 0x3c, 0x26, 0x5b, 0xab, 0xcd, 0xb7, - 0x02, 0x8a, 0x65, 0xf8, 0xed, 0x24, 0x63, 0x3e, 0x49, 0x83, 0x6d, 0x5b, 0x6b, 0xbf, 0xc9, 0x77, - 0xc1, 0x4e, 0x13, 0xb0, 0x3b, 0x70, 0xe7, 0x6e, 0xc2, 0x27, 0x5f, 0x49, 0xca, 0x94, 0x0e, 0x44, - 0x57, 0xf8, 0xf4, 0xe5, 0x6f, 0x82, 0x9b, 0x5d, 0x49, 0x70, 0xe8, 0xc3, 0x39, 0xa2, 0x8b, 0x6f, - 0x61, 0xb9, 0x41, 0xe5, 0xf0, 0xa5, 0x26, 0xec, 0x57, 0x79, 0xe6, 0x90, 0xa7, 0x81, 0x88, 0x99, - 0xc7, 0x6f, 0xf4, 0xab, 0x1c, 0xa2, 0x69, 0x6e, 0x76, 0xf8, 0xc9, 0xf9, 0x4a, 0x1d, 0x99, 0x1b, - 0x1a, 0x3c, 0xd7, 0xbc, 0x56, 0x33, 0x83, 0xe2, 0x76, 0x6f, 0xe1, 0x48, 0xdb, 0x74, 0xba, 0xba, - 0x49, 0x49, 0x96, 0xf9, 0x2b, 0x55, 0x15, 0x7c, 0x28, 0x24, 0x44, 0x92, 0xe6, 0x83, 0xf2, 0x40, - 0x8e, 0x83, 0x48, 0xae, 0xf4, 0x4b, 0x57, 0xda, 0x44, 0xa4, 0x1d, 0x83, 0x6d, 0xd8, 0xf1, 0x21, - 0x42, 0x33, 0x3d, 0xbe, 0x73, 0xcd, 0x1e, 0xa4, 0xab, 0x1a, 0x0a, 0xd5, 0x98, 0xe3, 0x81, 0x8c, - 0x4a, 0x1a, 0x62, 0x51, 0xf1, 0xa6, 0xf6, 0x7e, 0x92, 0x6c, 0x15, 0xf7, 0x19, 0xea, 0x4e, 0xe9, - 0x4c, 0xc2, 0x41, 0xd6, 0x37, 0x05, 0xe3, 0x0b, 0xf1, 0x98, 0x87, 0xfe, 0x16, 0x2b, 0xac, 0x78, - 0x71, 0xae, 0x18, 0x5f, 0x1c, 0x13, 0x7e, 0x5d, 0xc6, 0x4b, 0x78, 0x85, 0xfb, 0xdd, 0x3f, 0x04, - 0xf9, 0x2e, 0x34, 0x87, 0x8e, 0xa2, 0xde, 0xf8, 0x7e, 0x9e, 0xb8, 0x7e, 0xed, 0xbf, 0x33, 0x23, - 0xb8, 0x4c, 0xed, 0x16, 0xe3, 0xf0, 0x67, 0x22, 0xaa, 0x35, 0xe2, 0x46, 0x15, 0x6a, 0xb3, 0x82, - 0x02, 0xa4, 0x46, 0x80, 0xe3, 0xa4, 0xad, 0x23, 0x4b, 0x5e, 0xc4, 0xe0, 0x56, 0x24, 0x48, 0xd3, - 0x30, 0x08, 0xea, 0xf0, 0x04, 0xdf, 0x53, 0xdb, 0xbd, 0x29, 0x6a, 0x27, 0xa8, 0x8d, 0xf1, 0x6e, - 0x60, 0x9e, 0x92, 0xb4, 0x35, 0x26, 0xb5, 0xfb, 0x67, 0xbf, 0x11, 0x05, 0xa5, 0xcb, 0x8e, 0xdc, - 0x3e, 0x27, 0xe0, 0x6f, 0xef, 0x12, 0x0a, 0xae, 0x7c, 0x49, 0xb9, 0x74, 0x33, 0xae, 0x96, 0xe8, - 0x36, 0x18, 0x98, 0x52, 0xab, 0xe4, 0xd2, 0xa0, 0x87, 0xaa, 0xa5, 0x0c, 0xd4, 0x44, 0x0c, 0x55, - 0x05, 0x2d, 0x35, 0x70, 0x06, 0xa6, 0x46, 0xf1, 0x21, 0x42, 0x11, 0x1f, 0x75, 0x5c, 0x35, 0x73, - 0xf7, 0xe7, 0x5a, 0x95, 0x7f, 0x6d, 0x07, 0x4b, 0x16, 0x28, 0x5f, 0x81, 0x1e, 0x99, 0x40, 0x26, - 0x4b, 0xfd, 0x46, 0x70, 0x1f, 0x82, 0x50, 0x7f, 0x11, 0x05, 0x79, 0x5e, 0xb9, 0xf6, 0x6f, 0x37, - 0xe3, 0xa7, 0x08, 0xc6, 0xcb, 0x74, 0x30, 0x95, 0x81, 0x8e, 0x16, 0x9a, 0x01, 0xcb, 0x77, 0xe0, - 0x33, 0x0c, 0x8d, 0x30, 0x3a, 0x7e, 0xd5, 0x51, 0xc5, 0x30, 0x95, 0xda, 0xe5, 0x66, 0x7b, 0xa5, - 0x4f, 0x42, 0x55, 0x32, 0xc0, 0xc0, 0x76, 0x3d, 0x08, 0x92, 0xf8, 0xbb, 0xe1, 0x0b, 0x7e, 0xb0, - 0xf4, 0x7e, 0x1f, 0xfc, 0xc9, 0x4f, 0x3c, 0x43, 0x56, 0x0c, 0x2c, 0x0b, 0xda, 0x10, 0x86, 0x01, - 0x45, 0x0a, 0x90, 0x0c, 0x80, 0x6f, 0xb5, 0x6e, 0x24, 0xf0, 0xc5, 0x63, 0xc6, 0xb9, 0xa0, 0x37, - 0x3e, 0xdc, 0xa9, 0x01, 0xdb, 0xf8, 0x76, 0x1d, 0xb7, 0xcf, 0x48, 0xf4, 0x1a, 0x4e, 0xd3, 0x58, - 0xcb, 0xbf, 0xca, 0x58, 0x24, 0x8a, 0x77, 0xdd, 0x09, 0xf9, 0xc5, 0xaa, 0x21, 0xad, 0x5b, 0xfc, - 0xbc, 0xf5, 0xfc, 0x9a, 0x4d, 0x19, 0xc8, 0x67, 0x77, 0x7f, 0x0c, 0x11, 0xee, 0x3a, 0x84, 0x9b, - 0xb7, 0xdc, 0x16, 0xde, 0xf5, 0x9b, 0xf8, 0x50, 0x8f, 0x7e, 0x7f, 0xbb, 0x9f, 0xd6, 0xb5, 0xb5, - 0x2f, 0x8b, 0x12, 0xb1, 0x07, 0xa6, 0x9b, 0xfe, 0x2e, 0xee, 0xee, 0xee, 0xee, 0xb8, 0x50, 0x8d, - 0x26, 0xef, 0xa6, 0x83, 0x0e, 0x56, 0x17, 0x2e, 0x9e, 0xa7, 0x2c, 0x9f, 0xe0, 0xb0, 0x89, 0xea, - 0xf8, 0xf1, 0xf5, 0x3c, 0x2b, 0x95, 0xe9, 0xdb, 0xbe, 0x0a, 0xca, 0xf1, 0x02, 0xe7, 0x33, 0x70, - 0xc5, 0xd4, 0x54, 0x98, 0xe8, 0x4b, 0xef, 0x3a, 0x47, 0xa5, 0x05, 0x59, 0x36, 0x5b, 0xe1, 0x49, - 0x3a, 0xc5, 0xd0, 0x9b, 0xdd, 0x46, 0x6b, 0x70, 0x98, 0x2b, 0xe9, 0xdc, 0x6e, 0x3d, 0x1a, 0xe7, - 0xaf, 0x93, 0x81, 0xc3, 0xc6, 0x68, 0x35, 0x77, 0x97, 0xca, 0x25, 0x07, 0x3b, 0x7a, 0x87, 0x09, - 0xe6, 0x64, 0x6d, 0xf5, 0x75, 0x07, 0x06, 0x3f, 0xc2, 0x85, 0x76, 0xe0, 0xda, 0x6a, 0x58, 0x87, - 0xeb, 0x41, 0x0b, 0xdf, 0x97, 0xa1, 0xb0, 0xf9, 0x2b, 0x50, 0xb4, 0xef, 0xe8, 0xb3, 0xa7, 0x4f, - 0x96, 0x67, 0xc7, 0x15, 0x58, 0xcc, 0x2d, 0x4d, 0xc8, 0xa1, 0xf5, 0x2a, 0xd8, 0x3f, 0x85, 0x2f, - 0x26, 0x72, 0x3a, 0x78, 0xdf, 0xcc, 0xe4, 0x37, 0xb8, 0xa8, 0xe6, 0xa3, 0x76, 0x21, 0x6d, 0xd6, - 0xd0, 0xb4, 0xdd, 0xf0, 0xa5, 0x0d, 0x5d, 0xad, 0xe2, 0xc8, 0xe2, 0x57, 0x41, 0xb3, 0x83, 0x5f, - 0x3a, 0x3d, 0xd4, 0xfa, 0xf8, 0x29, 0xb6, 0x4d, 0x27, 0x2c, 0x8e, 0x3e, 0xdc, 0x38, 0x8e, 0x21, - 0xcf, 0x75, 0xf5, 0xe1, 0x11, 0x84, 0x95, 0xc5, 0xe0, 0xcf, 0x5d, 0x50, 0x38, 0xc4, 0x22, 0xb3, - 0x10, 0x49, 0xfe, 0x62, 0xf8, 0x90, 0x88, 0x2a, 0xc0, 0x72, 0x72, 0x61, 0x3b, 0x40, 0x0a, 0x8a, - 0xb7, 0x18, 0x8e, 0x0d, 0x05, 0x73, 0x09, 0x7c, 0x48, 0x50, 0x9f, 0x42, 0x39, 0x06, 0xd1, 0x88, - 0x70, 0x2a, 0xa1, 0x35, 0x44, 0x2b, 0x24, 0xc9, 0x59, 0xa1, 0x7a, 0x5e, 0x4f, 0x4c, 0x0e, 0xdf, - 0x0a, 0x14, 0xb4, 0x7c, 0xfb, 0x04, 0xfa, 0x59, 0xcd, 0x3f, 0x41, 0x26, 0x8a, 0xef, 0xe3, 0xb4, - 0x85, 0xd5, 0x8d, 0xb3, 0xff, 0x82, 0xca, 0x97, 0x03, 0xd8, 0xae, 0x06, 0x99, 0xf1, 0x7b, 0x7b, - 0x58, 0x31, 0xf1, 0xa4, 0xcc, 0x7d, 0x86, 0xe1, 0x55, 0x70, 0x97, 0x08, 0xd0, 0xf2, 0x08, 0x18, - 0x07, 0x23, 0x38, 0x18, 0x1d, 0x9a, 0x9f, 0x32, 0x42, 0xdb, 0xe6, 0xe9, 0xb3, 0x5f, 0x0a, 0x09, - 0x14, 0xdb, 0xce, 0x99, 0xfa, 0x31, 0xa4, 0xc6, 0xb7, 0x4a, 0x0d, 0x13, 0xdc, 0xb8, 0x72, 0x50, - 0xf0, 0x54, 0x21, 0xec, 0x2a, 0x74, 0x89, 0x48, 0xc4, 0x4d, 0xa8, 0xa1, 0xfd, 0x68, 0xb6, 0xd6, - 0x56, 0x51, 0xfc, 0x40, 0xb1, 0x79, 0x09, 0xba, 0x7f, 0x69, 0x55, 0x71, 0x01, 0x10, 0x90, 0xe5, - 0x4e, 0x0d, 0x7a, 0x78, 0x4c, 0x23, 0x76, 0x9a, 0x61, 0x71, 0x23, 0x2e, 0x6a, 0x3c, 0xb0, 0x1b, - 0xec, 0xfb, 0x79, 0xc1, 0x80, 0x90, 0xe1, 0xa0, 0x71, 0xc0, 0xf4, 0x33, 0x03, 0x2d, 0xf2, 0xd5, - 0x1f, 0x78, 0x0d, 0x63, 0x3d, 0x1e, 0x2f, 0xc2, 0x21, 0x41, 0xa1, 0x62, 0xc8, 0xb3, 0x3f, 0x84, - 0x9a, 0x87, 0xda, 0x87, 0x5a, 0x52, 0xec, 0x50, 0x16, 0x58, 0xba, 0x8b, 0x3c, 0x8c, 0x00, 0x08, - 0x72, 0xd4, 0x0a, 0x59, 0xc9, 0x05, 0x01, 0xd5, 0x82, 0xb0, 0xb1, 0x2e, 0xf5, 0xb1, 0xd8, 0xfe, - 0x26, 0x14, 0x10, 0x7e, 0xb5, 0x92, 0x92, 0x85, 0xd4, 0xbd, 0xaa, 0x98, 0xab, 0x3e, 0x54, 0x97, - 0x86, 0x99, 0x19, 0xc2, 0xcc, 0xf3, 0x4c, 0x9b, 0xe3, 0xf4, 0x24, 0x08, 0x84, 0xc4, 0x31, 0x22, - 0x46, 0xc3, 0x2c, 0x4a, 0x1d, 0x28, 0xb1, 0x8e, 0xf3, 0xce, 0x72, 0x68, 0x60, 0xca, 0xa6, 0xf9, - 0xe8, 0x2c, 0x0f, 0x48, 0x89, 0xf9, 0xec, 0x06, 0x62, 0x08, 0x04, 0xce, 0x6b, 0x5d, 0x60, 0x27, - 0x75, 0xff, 0x0c, 0x08, 0x7a, 0x07, 0x58, 0x72, 0x71, 0xb2, 0xb6, 0x2f, 0xd5, 0x6d, 0x80, 0x10, - 0x90, 0xb1, 0xe0, 0x70, 0x5a, 0x93, 0x5d, 0xbe, 0x80, 0x1b, 0xec, 0x13, 0x30, 0x1a, 0xc7, 0x8d, - 0xc2, 0x95, 0x5b, 0xf9, 0xaa, 0x72, 0x6b, 0x0b, 0xd7, 0x58, 0x3b, 0x04, 0xcb, 0xc6, 0xf9, 0x6a, - 0x0b, 0x2e, 0x5e, 0x16, 0xc2, 0x43, 0xdb, 0xbb, 0x71, 0x2b, 0x1b, 0xb2, 0x0d, 0xdf, 0x2d, 0x29, - 0x21, 0x0c, 0x70, 0x9d, 0xe5, 0xf7, 0xbf, 0xc1, 0x5d, 0xf7, 0x10, 0xb1, 0x15, 0xb9, 0xf9, 0xba, - 0xae, 0xa4, 0x77, 0x3e, 0x0a, 0xa7, 0xca, 0xb5, 0x51, 0xaa, 0x7a, 0xdb, 0x20, 0xbe, 0x10, 0xc7, - 0x4e, 0x6d, 0x56, 0x76, 0x77, 0x7b, 0xf8, 0xcb, 0xbb, 0xef, 0x7b, 0xdd, 0x77, 0xf1, 0xe7, 0x1c, - 0xaf, 0xa3, 0xd8, 0x9c, 0xea, 0x6d, 0xdf, 0xc2, 0x84, 0x8a, 0xee, 0x5e, 0x4a, 0x35, 0x5d, 0xbb, - 0xbb, 0xbb, 0xd2, 0x4a, 0xbc, 0x69, 0x33, 0xbe, 0xbb, 0xb6, 0xc5, 0x2f, 0x1b, 0x5b, 0x7f, 0xdb, - 0x89, 0x25, 0x5e, 0xe4, 0x61, 0xff, 0x0a, 0x51, 0x3b, 0x01, 0x1f, 0xd7, 0x12, 0xf2, 0x4a, 0x28, - 0x2e, 0x67, 0x6b, 0xa8, 0xc8, 0x6f, 0xb6, 0x28, 0x5d, 0xfe, 0x14, 0xac, 0x19, 0xd6, 0x5d, 0xe8, - 0x3f, 0x20, 0xa0, 0xd0, 0xd3, 0x15, 0x43, 0xe8, 0x4d, 0x3a, 0x90, 0x19, 0x4c, 0x5d, 0x6b, 0x82, - 0x31, 0xaf, 0x85, 0x3f, 0x24, 0xb8, 0xe9, 0xfe, 0xdd, 0x7e, 0x09, 0x12, 0x6b, 0x37, 0xc1, 0x5e, - 0xd5, 0xb6, 0x25, 0x96, 0x37, 0xd7, 0xa6, 0xd1, 0x5b, 0xe3, 0x05, 0xa7, 0x57, 0x9b, 0x8a, 0xbb, - 0x2b, 0x13, 0x5e, 0xe7, 0xf3, 0xe3, 0x0d, 0x5c, 0xfe, 0x2b, 0xfa, 0x4d, 0x95, 0x43, 0x6a, 0x58, - 0x5d, 0x8c, 0xfc, 0x29, 0x4a, 0x32, 0xb9, 0xfb, 0x63, 0xe9, 0x8e, 0x29, 0xb6, 0xf4, 0xb6, 0x0d, - 0x99, 0x53, 0xe1, 0x42, 0xaa, 0x82, 0x16, 0xae, 0xde, 0x2a, 0x58, 0xd9, 0xf6, 0xae, 0x82, 0xb2, - 0xb8, 0x68, 0xa8, 0x39, 0x7c, 0x23, 0xc1, 0xe4, 0x45, 0x9e, 0x10, 0x19, 0x10, 0x3d, 0xf2, 0x19, - 0x37, 0x39, 0x99, 0x76, 0x6b, 0xd9, 0xf2, 0x75, 0x8f, 0xc2, 0x9b, 0x19, 0x3c, 0x4d, 0xa7, 0x91, - 0x8b, 0x20, 0xc6, 0x55, 0xdc, 0xcb, 0x8f, 0x25, 0x0b, 0xa8, 0x3b, 0x44, 0xdf, 0x1a, 0x23, 0x26, - 0x2e, 0x34, 0x30, 0x55, 0xe7, 0x30, 0x6c, 0x20, 0x8b, 0x92, 0x79, 0x47, 0x88, 0x18, 0x0b, 0x48, - 0xe2, 0xb5, 0x97, 0xd6, 0x2f, 0x34, 0x3c, 0x14, 0x9e, 0xd8, 0x31, 0x71, 0x9a, 0xed, 0x26, 0x65, - 0xdd, 0xf4, 0x6f, 0x07, 0x61, 0xe2, 0xe6, 0x8d, 0xf7, 0x4f, 0xe1, 0x79, 0xaf, 0x2f, 0x59, 0x8c, - 0xd6, 0x30, 0x46, 0xff, 0x35, 0x8c, 0xde, 0x35, 0xf8, 0x36, 0xc8, 0x3f, 0xc1, 0x05, 0xf1, 0x0f, - 0x3f, 0x1a, 0x14, 0x2a, 0x76, 0xbb, 0x06, 0x5b, 0xb9, 0x5f, 0xba, 0xa1, 0xfb, 0xd9, 0x09, 0xfe, - 0xe4, 0xdd, 0x3f, 0x86, 0x39, 0x74, 0x61, 0x49, 0x8f, 0xb2, 0x7f, 0xe3, 0x3d, 0xf1, 0x20, 0xb0, - 0x8a, 0x9a, 0x32, 0x3d, 0xd0, 0x9d, 0xb9, 0x50, 0xc0, 0xdd, 0xd8, 0x45, 0xf1, 0xa4, 0x29, 0x0a, - 0xc8, 0x44, 0x33, 0xfd, 0x61, 0x8d, 0x26, 0x7f, 0xd2, 0x17, 0x49, 0x31, 0x03, 0x5a, 0xa7, 0x4f, - 0xa3, 0x02, 0x08, 0xf9, 0x2f, 0x7f, 0xd3, 0x27, 0xf1, 0x21, 0x00, 0x52, 0x7f, 0x15, 0xd9, 0x00, - 0x85, 0xec, 0x10, 0xca, 0xa3, 0xa0, 0x02, 0xc3, 0xea, 0x53, 0x3c, 0x72, 0x95, 0xf1, 0x01, 0x42, - 0x2d, 0x08, 0x9f, 0x5c, 0x00, 0x0d, 0x48, 0xf5, 0x90, 0xce, 0x54, 0x38, 0x3d, 0xa5, 0x29, 0xa5, - 0x72, 0x3c, 0x30, 0x60, 0x9a, 0x07, 0x7b, 0xa5, 0x50, 0xf0, 0x48, 0xb1, 0x78, 0x74, 0x90, 0x31, - 0x89, 0x44, 0x7c, 0xf2, 0x2e, 0x20, 0x6d, 0x8b, 0x30, 0x68, 0xc9, 0x08, 0xde, 0x29, 0x25, 0xcb, - 0x6b, 0x3c, 0xf2, 0xc3, 0x75, 0x75, 0x31, 0x02, 0x12, 0xa8, 0x73, 0xc1, 0x64, 0x88, 0x86, 0xd8, - 0xa1, 0x1b, 0x62, 0x6b, 0xcd, 0xbf, 0xaf, 0xd9, 0x3a, 0xe2, 0x23, 0xfd, 0x22, 0x43, 0x48, 0xf5, - 0xbd, 0x48, 0x89, 0x42, 0x04, 0x94, 0x21, 0x67, 0x11, 0x1a, 0x75, 0x92, 0xa9, 0x6b, 0x55, 0x57, - 0x33, 0xa6, 0xa0, 0xd1, 0x01, 0xdd, 0xc5, 0xf2, 0xaf, 0x1f, 0xed, 0x52, 0x08, 0xfd, 0x5a, 0x12, - 0xe3, 0x37, 0x3e, 0x7a, 0x44, 0xdc, 0xb7, 0x3e, 0x79, 0x3a, 0x27, 0x7c, 0x13, 0xda, 0xa6, 0x5f, - 0x76, 0x7d, 0x7c, 0x10, 0x72, 0x62, 0xc6, 0x3a, 0xb5, 0x75, 0x8b, 0xc8, 0x27, 0x16, 0xdb, 0x4d, - 0xff, 0xcb, 0x77, 0x97, 0xf8, 0xfa, 0x53, 0xac, 0x5d, 0xa5, 0x5f, 0x13, 0x08, 0xdd, 0xf6, 0x37, - 0xb6, 0xf5, 0xf8, 0x2c, 0x1b, 0x7b, 0xa6, 0x16, 0x50, 0x27, 0xd1, 0xd3, 0x6f, 0x2f, 0x82, 0xa1, - 0xcf, 0x75, 0x6a, 0xbd, 0x24, 0xfb, 0xe1, 0x42, 0xe5, 0xfb, 0x58, 0x7a, 0x93, 0x35, 0x6a, 0x13, - 0x59, 0x7e, 0x0d, 0xb6, 0xeb, 0xe1, 0x4a, 0xc6, 0x83, 0x25, 0x3c, 0x51, 0x99, 0xcb, 0x12, 0x36, - 0x9d, 0x0e, 0x45, 0x22, 0x7f, 0x46, 0xb9, 0x9d, 0xf6, 0xfb, 0x7e, 0x82, 0x2f, 0xa1, 0xdf, 0x7a, - 0x97, 0xd5, 0xb3, 0xe1, 0x48, 0xd7, 0x3b, 0x4b, 0x6f, 0x2b, 0xb4, 0xa7, 0x19, 0x8a, 0xe8, 0x10, - 0x0b, 0x75, 0x79, 0x61, 0xcb, 0xe0, 0x94, 0xf9, 0x19, 0xf0, 0xa4, 0xa3, 0xe3, 0xc5, 0xda, 0xe4, - 0x23, 0xb4, 0x5f, 0x75, 0x2d, 0x24, 0xc2, 0xab, 0x53, 0x35, 0x9d, 0xab, 0x52, 0xaa, 0xa3, 0xda, - 0xb3, 0x3d, 0x52, 0x4b, 0xbc, 0x40, 0x53, 0x54, 0xef, 0x34, 0x1c, 0xaa, 0x1d, 0x4a, 0x65, 0xf2, - 0xe6, 0x15, 0x00, 0x83, 0x4d, 0xb5, 0xe0, 0x00, 0x7e, 0x5c, 0x44, 0x29, 0xcd, 0x56, 0xa5, 0xa8, - 0xb9, 0xb1, 0xd5, 0xb1, 0x70, 0xa5, 0x46, 0x1a, 0x27, 0xbe, 0x0a, 0x8a, 0x6c, 0x56, 0xd7, 0xc6, - 0x1e, 0x63, 0x77, 0x7a, 0xaf, 0x2f, 0x12, 0x32, 0x49, 0x40, 0x77, 0xbb, 0x23, 0x37, 0x48, 0xe8, - 0xfe, 0x2c, 0x43, 0x59, 0x6c, 0x93, 0xfc, 0x4e, 0xc1, 0xf8, 0xdd, 0x69, 0xab, 0x0a, 0x90, 0x9d, - 0x2d, 0x0b, 0x97, 0x70, 0x71, 0xa0, 0x80, 0xcb, 0xa1, 0x4c, 0x8c, 0x79, 0x22, 0xf7, 0x57, 0xf0, - 0x88, 0x43, 0x1b, 0xd1, 0xbb, 0x1b, 0xbb, 0xbe, 0x97, 0x8d, 0x33, 0xdf, 0x58, 0xcc, 0xd0, 0x52, - 0x62, 0x50, 0x43, 0x18, 0x8c, 0x41, 0x34, 0xb4, 0x7b, 0x70, 0x92, 0x43, 0xff, 0x34, 0x20, 0x8e, - 0xac, 0xf3, 0xe2, 0xf3, 0xff, 0xf1, 0xb4, 0x4d, 0x86, 0xec, 0x6b, 0xcb, 0x90, 0x4e, 0xf0, 0xa9, - 0x5d, 0xc3, 0x27, 0x08, 0x4b, 0x91, 0x54, 0xa8, 0xc6, 0x42, 0xf1, 0x4a, 0xad, 0xb8, 0xe0, 0xea, - 0x6d, 0xf9, 0x19, 0x7c, 0x68, 0x8c, 0x1f, 0xf2, 0x87, 0x31, 0x79, 0x4d, 0x44, 0x87, 0xda, 0x5d, - 0x86, 0xdb, 0xfc, 0x29, 0xbb, 0xf8, 0xcb, 0x6d, 0x83, 0x69, 0x96, 0x9c, 0xe0, 0x3a, 0xa9, 0xb5, - 0xa1, 0x8d, 0x34, 0xa1, 0x63, 0x9e, 0x77, 0xe3, 0x63, 0x8e, 0x5b, 0x14, 0x3a, 0x65, 0x88, 0xdb, - 0x45, 0x4d, 0x50, 0xfc, 0xa9, 0xf9, 0x57, 0x34, 0x92, 0x4b, 0xc6, 0xd4, 0xe9, 0x0a, 0xe3, 0x35, - 0x48, 0x5c, 0xb9, 0xe3, 0x63, 0xad, 0x34, 0x0d, 0x33, 0x14, 0x19, 0xba, 0xa4, 0x41, 0x0e, 0x6e, - 0x4f, 0xbc, 0xa0, 0xe2, 0xfe, 0xaf, 0xee, 0x61, 0x44, 0x41, 0x15, 0xe5, 0xf6, 0xea, 0x1e, 0x0a, - 0x32, 0x9e, 0x75, 0x57, 0x82, 0x3d, 0x9d, 0x99, 0xed, 0xb3, 0xc9, 0x0f, 0x0e, 0xdf, 0xe7, 0x1d, - 0x69, 0xb1, 0x03, 0xdb, 0x87, 0x1c, 0x7a, 0x33, 0x30, 0xaa, 0x92, 0xef, 0xc4, 0x3f, 0xf1, 0xbb, - 0xdc, 0x62, 0x73, 0x4b, 0x77, 0x4c, 0x12, 0xb7, 0x2e, 0x7b, 0x49, 0x59, 0x90, 0xf3, 0xc0, 0x77, - 0xaa, 0x22, 0x5b, 0xaa, 0x22, 0xc4, 0x9c, 0xfa, 0xdf, 0xff, 0x10, 0x20, 0x10, 0x16, 0x54, 0xf4, - 0x8e, 0x0a, 0x33, 0xa0, 0xd6, 0x6f, 0x34, 0x99, 0x88, 0x61, 0xfe, 0x26, 0x34, 0xdf, 0xc9, 0x6c, - 0x9e, 0xc2, 0x86, 0x2e, 0x0c, 0x04, 0x7c, 0x64, 0xc3, 0x52, 0x12, 0xa4, 0x46, 0x98, 0xc3, 0x8d, - 0x92, 0x34, 0xb5, 0x24, 0x6d, 0x72, 0x00, 0xd4, 0x90, 0x92, 0xbf, 0xc4, 0x09, 0x0a, 0x75, 0x08, - 0x59, 0x39, 0x76, 0x50, 0xf2, 0xa3, 0x6d, 0x02, 0xcc, 0x51, 0xa4, 0x1f, 0x34, 0x49, 0x8a, 0x03, - 0xb1, 0xd2, 0xcb, 0x3d, 0x28, 0xd4, 0xc9, 0x5f, 0xcb, 0x6b, 0x4e, 0x55, 0x89, 0x85, 0x25, 0x89, - 0x30, 0x05, 0x86, 0xb5, 0x5c, 0x05, 0x9f, 0x59, 0x74, 0xfb, 0xc5, 0x0f, 0x06, 0x78, 0xdc, 0x70, - 0x28, 0x10, 0x83, 0x51, 0xa8, 0xc4, 0xd1, 0xc8, 0xb1, 0x74, 0xc4, 0x50, 0xf7, 0xbb, 0xaa, 0x28, - 0xf3, 0x13, 0xc7, 0xd1, 0x69, 0x90, 0x73, 0x9e, 0x24, 0x76, 0x22, 0xee, 0x08, 0x6b, 0x7a, 0xa9, - 0x3f, 0xc5, 0x0e, 0xd2, 0x94, 0x66, 0x5e, 0x0a, 0x0f, 0xb9, 0x29, 0x8d, 0x64, 0xb7, 0x79, 0x32, - 0xc2, 0x11, 0xe6, 0xc4, 0x2a, 0x2f, 0x15, 0xcb, 0xd5, 0xe3, 0x14, 0x0d, 0x12, 0x26, 0x46, 0x22, - 0x36, 0x88, 0x76, 0x96, 0x5b, 0xa3, 0x69, 0xdb, 0x16, 0x6c, 0x85, 0xed, 0x9f, 0x64, 0x76, 0x0e, - 0xe4, 0xda, 0x3a, 0xf2, 0x06, 0xcc, 0x7f, 0x9a, 0xd3, 0xb5, 0xe0, 0x83, 0xaa, 0x8a, 0x33, 0xf3, - 0x3d, 0xce, 0x38, 0x48, 0x64, 0x36, 0xac, 0xf3, 0x08, 0x7e, 0x2a, 0xdb, 0xf0, 0xdf, 0x52, 0x6e, - 0x4b, 0xd6, 0xab, 0x71, 0xee, 0xfc, 0x9c, 0x69, 0xc2, 0x76, 0x0e, 0x93, 0xbf, 0x67, 0xda, 0x49, - 0x0e, 0xd5, 0xc7, 0x72, 0xe9, 0x05, 0xa8, 0xd1, 0x63, 0xa6, 0xd8, 0x37, 0x2f, 0xf8, 0x42, 0xdd, - 0xf7, 0x92, 0x75, 0x2b, 0xe0, 0xfc, 0xf7, 0x35, 0x49, 0x2f, 0x2f, 0x21, 0x64, 0xca, 0x42, 0x38, - 0x27, 0x11, 0xaa, 0xcd, 0xab, 0x2d, 0x5c, 0x57, 0x85, 0xeb, 0x95, 0x5f, 0x19, 0xb4, 0x7f, 0x3a, - 0xd4, 0xef, 0x52, 0x4a, 0xca, 0xaf, 0xe4, 0xd6, 0xdf, 0x82, 0xcb, 0x4a, 0x9d, 0x54, 0x53, 0xa7, - 0x7c, 0x1f, 0x0a, 0x66, 0xee, 0xef, 0x51, 0x3a, 0xa5, 0x67, 0xbd, 0xe4, 0xb3, 0x72, 0x64, 0xbe, - 0x0b, 0x8f, 0x1e, 0x37, 0xb6, 0xf3, 0xe7, 0xc2, 0x24, 0xb2, 0x6d, 0x6f, 0x79, 0xbf, 0xe0, 0xa6, - 0x4f, 0xb3, 0xe7, 0x6d, 0x8c, 0xef, 0x93, 0xaf, 0x7c, 0x5f, 0x8a, 0xeb, 0x5f, 0x13, 0xc7, 0x19, - 0xb7, 0x26, 0xf2, 0xba, 0x93, 0xe1, 0x49, 0x59, 0x7c, 0x4d, 0x73, 0xa8, 0x6a, 0xac, 0x85, 0xbb, - 0xa8, 0x58, 0x50, 0x63, 0x8e, 0xb9, 0x7c, 0x29, 0x78, 0x43, 0x42, 0x0f, 0xc8, 0x6a, 0x15, 0x6d, - 0x4a, 0x4f, 0xad, 0x1d, 0x42, 0x2e, 0x57, 0xca, 0x94, 0x0e, 0x50, 0x6d, 0xc9, 0x42, 0xa3, 0x39, - 0x9e, 0xb7, 0xaa, 0x6f, 0x6f, 0x98, 0xf8, 0x52, 0x3e, 0xe5, 0x4d, 0xd4, 0xf4, 0x9c, 0x57, 0x51, - 0xfa, 0xcc, 0x98, 0x41, 0x6e, 0x37, 0xc2, 0x57, 0xae, 0x77, 0xc5, 0x77, 0x78, 0xf1, 0x90, 0x41, - 0xde, 0xc8, 0xdd, 0x3f, 0x17, 0x65, 0x09, 0x45, 0x78, 0x33, 0x6b, 0x9b, 0x95, 0xf1, 0x85, 0x0f, - 0x29, 0x28, 0x50, 0x3b, 0x18, 0xb6, 0xa7, 0x50, 0x55, 0x2e, 0x4a, 0xfa, 0xc6, 0x65, 0x0f, 0x66, - 0x17, 0x10, 0x14, 0x31, 0x58, 0xb6, 0xe3, 0x7b, 0xb1, 0xd3, 0x67, 0x74, 0xcd, 0x19, 0x0d, 0xb0, - 0x3d, 0x76, 0x4c, 0x80, 0x99, 0xf9, 0x1f, 0x54, 0x23, 0xc4, 0x0c, 0x20, 0x55, 0xf4, 0x0a, 0x09, - 0x31, 0x83, 0x6e, 0xef, 0xe4, 0xba, 0x32, 0xb7, 0x37, 0x0c, 0x60, 0xd3, 0x36, 0xf3, 0x5e, 0x94, - 0x2f, 0xd5, 0x20, 0xb7, 0x86, 0x53, 0xc9, 0x43, 0x37, 0x97, 0xf1, 0xb1, 0x2d, 0xff, 0xfd, 0xfb, - 0x91, 0x79, 0xe0, 0xdc, 0x30, 0xef, 0x04, 0x21, 0x3b, 0x0a, 0x1d, 0x2a, 0x54, 0xf5, 0xa7, 0x7f, - 0x0d, 0x76, 0x9a, 0x53, 0x65, 0x09, 0x0d, 0x0b, 0x34, 0x1b, 0x99, 0x7b, 0x6e, 0xcf, 0x1a, 0x53, - 0xaf, 0x79, 0x9d, 0x09, 0x58, 0x23, 0x09, 0xb4, 0xa5, 0x41, 0xd1, 0xb9, 0x86, 0xb2, 0xcd, 0xc7, - 0x73, 0x41, 0xc3, 0x2a, 0x76, 0x89, 0xff, 0xc2, 0x98, 0x55, 0x8f, 0x38, 0x29, 0x36, 0xea, 0x9c, - 0x85, 0x6d, 0x85, 0x4d, 0xad, 0x86, 0xc3, 0xba, 0x8d, 0x91, 0x0a, 0x51, 0xd7, 0x8d, 0xa6, 0x63, - 0xb9, 0x0d, 0x78, 0x16, 0xa9, 0x11, 0x6a, 0xa9, 0xa9, 0xca, 0x1b, 0x2f, 0xaa, 0xd5, 0xf7, 0x48, - 0x3e, 0x9c, 0x26, 0x9b, 0xf6, 0x77, 0xfe, 0x7e, 0x34, 0xd8, 0x2a, 0xff, 0x7c, 0x73, 0x93, 0x77, - 0xb7, 0x91, 0x5b, 0xcd, 0x71, 0x5b, 0xe6, 0xcc, 0x1d, 0xbf, 0x44, 0x95, 0x36, 0x68, 0xab, 0x18, - 0x44, 0xdf, 0xf8, 0xdf, 0x24, 0x72, 0x47, 0xe2, 0x1f, 0x5b, 0x30, 0x77, 0xca, 0x9a, 0x3d, 0xf2, - 0xd0, 0xf7, 0x6a, 0x7c, 0x66, 0xdf, 0xd6, 0x78, 0x34, 0x7c, 0x48, 0x2f, 0x3d, 0xaa, 0x5a, 0x63, - 0xc6, 0x21, 0xfc, 0x44, 0x3b, 0x0f, 0x8e, 0xe6, 0xd8, 0x2a, 0x2d, 0x07, 0x40, 0xa2, 0x25, 0x30, - 0xc9, 0x14, 0x65, 0xe3, 0xdd, 0xec, 0xee, 0xd7, 0x68, 0x98, 0x47, 0xa5, 0xe8, 0xa8, 0xff, 0x11, - 0x11, 0xf7, 0x57, 0x0f, 0xc9, 0x43, 0x9d, 0x2f, 0xe1, 0x08, 0x50, 0xe8, 0x3a, 0x44, 0xf8, 0xee, - 0x22, 0x11, 0xa9, 0x1a, 0xdd, 0xef, 0xfa, 0xda, 0xc0, 0xc2, 0x75, 0x5a, 0x8f, 0x9a, 0x36, 0xfb, - 0xfc, 0x65, 0x8c, 0xd0, 0x40, 0x35, 0x4d, 0xc4, 0xcf, 0xe6, 0xa7, 0x1b, 0xf5, 0xf7, 0xf1, 0xd4, - 0x99, 0x8d, 0x0e, 0xfb, 0xb2, 0x87, 0x93, 0xed, 0xf6, 0xf8, 0x98, 0x7a, 0x30, 0xae, 0x31, 0xab, - 0x52, 0xd3, 0xa1, 0x2e, 0xee, 0xab, 0x9c, 0xcf, 0xb4, 0x8f, 0xa7, 0xdf, 0xc6, 0xf4, 0xb4, 0x8a, - 0xb9, 0xe9, 0x28, 0x92, 0x58, 0x43, 0x4d, 0xbd, 0x53, 0x57, 0x5a, 0x20, 0xb4, 0xeb, 0x49, 0x7f, - 0xb7, 0x24, 0x34, 0xf1, 0xdb, 0x36, 0x33, 0x58, 0x8b, 0xf8, 0x88, 0x50, 0x47, 0x60, 0x81, 0x9f, - 0x47, 0x3d, 0x7e, 0xb0, 0xd0, 0xf1, 0x15, 0xe4, 0xfe, 0x18, 0xce, 0x05, 0x0f, 0xf7, 0x8e, 0x38, - 0x40, 0x12, 0x3d, 0x58, 0x71, 0xda, 0x79, 0x8b, 0x98, 0xeb, 0x46, 0x05, 0x87, 0x9d, 0xf8, 0x53, - 0xea, 0x0f, 0x2a, 0x31, 0x05, 0xab, 0xc9, 0xb4, 0xcb, 0xae, 0x3f, 0x08, 0x4d, 0xb8, 0xc9, 0x91, - 0x7d, 0x09, 0xaa, 0xe6, 0xee, 0xc7, 0xe1, 0x43, 0x36, 0x7a, 0xc6, 0xea, 0x73, 0x2d, 0x01, 0xbd, - 0x74, 0x2a, 0xd4, 0xe6, 0x9b, 0xd9, 0xc7, 0x0f, 0x51, 0xc1, 0xf1, 0xb0, 0x87, 0xee, 0x8d, 0x8f, - 0xf4, 0xe9, 0x81, 0x0f, 0xfe, 0xb6, 0xf6, 0x83, 0x1d, 0x83, 0x2f, 0xd4, 0xa7, 0x5e, 0xc2, 0xe6, - 0x50, 0x56, 0x89, 0x68, 0x8a, 0x61, 0x01, 0xf3, 0x72, 0x9c, 0xf9, 0x8c, 0xdc, 0x11, 0xc7, 0x92, - 0xb6, 0xcd, 0xf9, 0x9b, 0xa7, 0x33, 0xfc, 0x13, 0xe9, 0xaf, 0x27, 0xf5, 0x70, 0x53, 0x8d, 0x53, - 0x5a, 0x57, 0x27, 0x8e, 0xba, 0xae, 0xce, 0x95, 0xb4, 0xbc, 0x11, 0x12, 0x2b, 0x63, 0x78, 0xbe, - 0x32, 0x27, 0xd6, 0x93, 0x1b, 0xbd, 0xed, 0xb3, 0x54, 0x9f, 0xf0, 0xa5, 0x1a, 0x6f, 0x3e, 0x1f, - 0xb7, 0xdd, 0x9b, 0x9f, 0x1e, 0xdd, 0xfe, 0x14, 0x26, 0xac, 0x94, 0xbe, 0xea, 0x3b, 0x8d, 0x49, - 0xae, 0x75, 0xef, 0x84, 0x46, 0xcd, 0xe5, 0x52, 0xd3, 0x5b, 0x5a, 0x19, 0xbf, 0x82, 0x52, 0x71, - 0x7b, 0xe6, 0xf9, 0xfe, 0x14, 0x11, 0x1a, 0x63, 0xa5, 0xbe, 0x27, 0xad, 0x39, 0x68, 0xbb, 0xa5, - 0xb5, 0x7f, 0x85, 0x0a, 0x61, 0xa3, 0xfb, 0x76, 0x4d, 0x7e, 0x8f, 0xa5, 0x8a, 0xf5, 0x38, 0x6a, - 0x44, 0x64, 0xd1, 0x57, 0xc2, 0x69, 0x86, 0x56, 0x28, 0xd9, 0xae, 0xc2, 0x4a, 0xe9, 0xc2, 0xe2, - 0x63, 0x08, 0xb3, 0x32, 0x8e, 0xa8, 0x7f, 0xa6, 0xc4, 0x89, 0x7d, 0x49, 0x5f, 0x93, 0x35, 0x9e, - 0xf1, 0x18, 0x40, 0xd6, 0xa4, 0x90, 0xda, 0x78, 0xd2, 0x43, 0x1d, 0xa0, 0xbf, 0x85, 0x0b, 0xf4, - 0xd6, 0x4b, 0x45, 0xf8, 0x76, 0x36, 0x87, 0x12, 0x77, 0xe0, 0x37, 0x80, 0xe9, 0x34, 0xd3, 0x0f, - 0x68, 0x55, 0xa6, 0x9f, 0x85, 0x0a, 0xb4, 0x4b, 0xc6, 0x20, 0x8b, 0x4b, 0x95, 0x2f, 0x48, 0x34, - 0x72, 0x46, 0x14, 0xd5, 0x5b, 0xc4, 0x15, 0xed, 0x4e, 0x41, 0xf6, 0xa3, 0x8f, 0x0a, 0x15, 0xac, - 0xb5, 0x52, 0x54, 0x2c, 0xa3, 0x2f, 0x1a, 0x52, 0x7a, 0xd1, 0xa1, 0x2e, 0x51, 0x18, 0x72, 0xc4, - 0x4d, 0xb8, 0x0d, 0x47, 0xb8, 0xff, 0x19, 0x64, 0xaa, 0xa6, 0xe4, 0xce, 0x59, 0x50, 0xe3, 0xa5, - 0x1e, 0x12, 0x8e, 0x45, 0x69, 0x82, 0x77, 0x26, 0xc5, 0xa4, 0x26, 0xcf, 0x5a, 0xf1, 0xb4, 0xa9, - 0xc4, 0xa6, 0xf2, 0x6f, 0xc5, 0x6f, 0xc6, 0x0b, 0x3c, 0x82, 0x7b, 0x8a, 0x08, 0xb4, 0x1e, 0xb7, - 0x6e, 0xd6, 0xda, 0x59, 0x52, 0x84, 0xbe, 0x91, 0x35, 0xaa, 0xbc, 0x28, 0x49, 0xa7, 0x6c, 0x99, - 0x6d, 0x62, 0xdd, 0x6b, 0x0d, 0x07, 0x75, 0xb8, 0xd3, 0x6d, 0xca, 0x6f, 0xcd, 0x29, 0xf1, 0xa5, - 0x2d, 0x25, 0x06, 0xe4, 0x4e, 0xe7, 0x1a, 0x61, 0xa5, 0x51, 0x2a, 0xef, 0x64, 0xc7, 0xfb, 0x1e, - 0x91, 0xac, 0x9d, 0xf0, 0x39, 0x58, 0xa9, 0xc2, 0x48, 0xc1, 0x8d, 0x87, 0xe9, 0x77, 0x3f, 0xe0, - 0xae, 0xdc, 0x6b, 0x38, 0xea, 0x55, 0x7a, 0xb8, 0x36, 0x34, 0x47, 0x61, 0xfb, 0xfc, 0x28, 0x55, - 0xa1, 0x99, 0xad, 0x0e, 0x2e, 0xce, 0x87, 0x46, 0x9a, 0x4c, 0x76, 0x69, 0x35, 0x07, 0xef, 0x8c, - 0x14, 0x3f, 0x86, 0xec, 0x05, 0x65, 0x8c, 0xe6, 0x02, 0xbd, 0x8c, 0xcc, 0x0e, 0x66, 0xe4, 0x30, - 0x6d, 0x58, 0xe3, 0x77, 0x87, 0xcb, 0x4b, 0x49, 0x45, 0xd3, 0x94, 0xf7, 0x48, 0xf5, 0xe2, 0xbf, - 0xf8, 0x40, 0x89, 0x22, 0x10, 0xf7, 0xf7, 0xbb, 0x9d, 0x9a, 0xd8, 0x46, 0x5e, 0x0a, 0x65, 0x6f, - 0x77, 0x68, 0x63, 0x1e, 0x36, 0xcf, 0x85, 0xff, 0x70, 0x84, 0x29, 0x89, 0xfe, 0xdb, 0x98, 0x2a, - 0xb6, 0x59, 0xd5, 0xdd, 0x2d, 0x32, 0xd3, 0x61, 0xb3, 0x6c, 0x56, 0xee, 0xdd, 0x48, 0x69, 0xa6, - 0xf8, 0x2a, 0xb3, 0xb1, 0x4c, 0xc1, 0xc7, 0xb1, 0x39, 0xb7, 0x33, 0x0f, 0xdf, 0x0e, 0x1f, 0x52, - 0x98, 0x95, 0x35, 0x49, 0x2f, 0xf0, 0xfe, 0x21, 0xa5, 0xd2, 0x44, 0x16, 0x6f, 0x13, 0xe3, 0x58, - 0x73, 0xfa, 0xe2, 0x13, 0x22, 0x1d, 0xff, 0x04, 0x17, 0x63, 0x77, 0xcc, 0x3d, 0x4c, 0xd8, 0xe6, - 0xa2, 0x19, 0x8b, 0xf6, 0x4d, 0x89, 0xc3, 0xc6, 0x91, 0x08, 0x6e, 0xca, 0x14, 0x0d, 0x51, 0x9b, - 0xf3, 0x8f, 0xca, 0x51, 0xcc, 0x37, 0x1c, 0x72, 0xe3, 0xee, 0xbc, 0xac, 0x71, 0x5f, 0xd7, 0x6f, - 0x82, 0x63, 0xaa, 0x9a, 0x12, 0x84, 0xa1, 0xaa, 0x26, 0x72, 0x51, 0xdc, 0x12, 0x19, 0x55, 0x45, - 0xdb, 0xe1, 0x3b, 0xbe, 0xef, 0xf8, 0x21, 0x97, 0x77, 0x36, 0x77, 0xc1, 0x66, 0xee, 0xf7, 0x88, - 0x7b, 0xdf, 0xf5, 0xf7, 0x3f, 0x9e, 0xff, 0x8f, 0x16, 0xef, 0x77, 0x7b, 0xdd, 0xf8, 0x98, 0xf3, - 0x39, 0x31, 0xee, 0xd3, 0x03, 0x36, 0x49, 0x97, 0xf0, 0x5a, 0x4b, 0xbb, 0xb7, 0x15, 0x97, 0x2b, - 0x89, 0x12, 0x0a, 0xb7, 0x8a, 0xde, 0xd9, 0x7b, 0xed, 0x99, 0x8c, 0xbe, 0x10, 0xa6, 0xec, 0xfa, - 0xef, 0x77, 0x7f, 0x04, 0xa2, 0x47, 0x6c, 0xf5, 0xc4, 0x68, 0x41, 0x4e, 0xbe, 0x14, 0x11, 0x13, - 0xce, 0xa4, 0x7f, 0xd9, 0x3e, 0xa8, 0xed, 0xbb, 0x6b, 0x29, 0x06, 0xc6, 0x54, 0xe4, 0x61, 0x7c, - 0x29, 0x1e, 0xe7, 0x6a, 0xbe, 0x6b, 0x72, 0x8d, 0x83, 0x77, 0xcf, 0xbf, 0x94, 0xc4, 0x96, 0xdf, - 0x4e, 0x04, 0x41, 0x8f, 0x85, 0x31, 0x37, 0x5e, 0xc3, 0xa5, 0x8d, 0x64, 0x89, 0x66, 0xd5, 0xfd, - 0x8a, 0xf1, 0xc5, 0x75, 0x9b, 0xfa, 0x99, 0xf9, 0xc1, 0xe4, 0x9f, 0x0a, 0x4b, 0xc5, 0xd4, 0x3a, - 0xa0, 0x52, 0x0c, 0x14, 0x9e, 0x41, 0xc3, 0x28, 0x81, 0xf9, 0xb6, 0x54, 0x6d, 0xdc, 0x6f, 0x6d, - 0x7f, 0xc3, 0x30, 0x94, 0x95, 0x19, 0x78, 0xca, 0xf0, 0x3c, 0x77, 0x4a, 0xfd, 0x58, 0x72, 0xb5, - 0xb7, 0x4c, 0x85, 0x23, 0xa2, 0xf6, 0xa5, 0x51, 0x22, 0x53, 0x6c, 0x73, 0xc4, 0x8c, 0xb6, 0xc3, - 0x5c, 0xc9, 0x43, 0xc7, 0x76, 0xc5, 0xd4, 0xc4, 0x08, 0x0a, 0xa2, 0x11, 0x9a, 0x89, 0xf8, 0x61, - 0x3b, 0x91, 0x51, 0x28, 0x6b, 0x45, 0xe1, 0x4a, 0xb4, 0xf4, 0x4c, 0x38, 0x71, 0x45, 0xc9, 0x32, - 0xb1, 0x8a, 0xea, 0x6f, 0xd3, 0x3a, 0x1c, 0xf0, 0x0b, 0xb5, 0xdf, 0x17, 0xe6, 0xce, 0x8c, 0x6b, - 0x4a, 0x75, 0x7d, 0xf0, 0xa4, 0xbd, 0x98, 0xc4, 0xea, 0x6b, 0x2d, 0x2d, 0xa6, 0xe9, 0xdc, 0xdd, - 0xd0, 0xd4, 0x48, 0xc7, 0xba, 0x40, 0xd8, 0xea, 0x2f, 0xd6, 0x57, 0xd8, 0xf7, 0x6f, 0x45, 0x47, - 0x03, 0x9f, 0x05, 0x93, 0x36, 0x37, 0xea, 0x9c, 0x28, 0x3c, 0x4c, 0xd4, 0x9b, 0x3d, 0xd1, 0x4f, - 0xc1, 0x05, 0xa3, 0x71, 0xae, 0x81, 0x0c, 0xd2, 0x83, 0x58, 0x99, 0x7d, 0x28, 0x33, 0x0c, 0x6a, - 0xa7, 0xce, 0xc5, 0x58, 0x8e, 0x1a, 0x19, 0x62, 0xbf, 0x8d, 0x9a, 0x36, 0xa6, 0xb1, 0xfa, 0x69, - 0xac, 0xcd, 0x5e, 0xf8, 0x17, 0xdb, 0x65, 0x9e, 0x65, 0xa6, 0x3a, 0x2d, 0x8d, 0x90, 0xf6, 0x0f, - 0x3b, 0x15, 0xdb, 0x48, 0xfe, 0x7d, 0xfb, 0x38, 0xf6, 0xdf, 0xbe, 0x30, 0x46, 0xd9, 0xfe, 0x08, - 0x5b, 0xed, 0x6c, 0x74, 0xcc, 0xd5, 0xfd, 0xf0, 0x98, 0xe3, 0xf4, 0xc3, 0x8a, 0xa8, 0x3a, 0xfa, - 0xa4, 0xc1, 0x2b, 0x4c, 0x4c, 0x4c, 0xf7, 0xf7, 0xba, 0x9a, 0x3f, 0xf8, 0xda, 0x70, 0x66, 0xbd, - 0x66, 0x3e, 0xc9, 0xa6, 0x55, 0x0b, 0x2f, 0x02, 0x25, 0xbd, 0xe7, 0x46, 0x38, 0x2f, 0xd1, 0xc9, - 0x8b, 0x31, 0xbf, 0x44, 0xc2, 0xec, 0xbf, 0x3b, 0x75, 0xc2, 0x94, 0x8e, 0x78, 0x29, 0x6f, 0xc3, - 0x62, 0x78, 0xa3, 0xf7, 0x80, 0x1b, 0xf8, 0x4a, 0xa3, 0x6f, 0xc1, 0x19, 0x2a, 0x39, 0xf5, 0x39, - 0xb5, 0xf1, 0x92, 0x2e, 0xd2, 0x1b, 0x47, 0x80, 0x76, 0x97, 0x8e, 0xd9, 0x33, 0x0a, 0xcc, 0x45, - 0xaa, 0xa4, 0x1e, 0x20, 0x40, 0x50, 0xd9, 0x37, 0xc3, 0x6e, 0x15, 0x2c, 0x5c, 0xc1, 0x54, 0x95, - 0xb8, 0x3f, 0xda, 0xd6, 0x64, 0x01, 0x23, 0x37, 0xc1, 0x9f, 0xad, 0x39, 0xd5, 0x33, 0x4d, 0x93, - 0x87, 0x8f, 0xb2, 0x9f, 0xc2, 0xbd, 0xf0, 0xa5, 0x55, 0xd8, 0x9c, 0xa7, 0x7d, 0xcb, 0xba, 0xc1, - 0x50, 0xef, 0x25, 0x4c, 0x4b, 0x8d, 0x4b, 0x3e, 0x30, 0xa6, 0xa2, 0x71, 0x93, 0x09, 0xaa, 0x62, - 0x7b, 0xbb, 0x67, 0x56, 0x95, 0x2f, 0x13, 0xe3, 0xcc, 0xd6, 0xad, 0x8c, 0x88, 0xde, 0xcf, 0x87, - 0xb8, 0xad, 0xdd, 0x4d, 0xd7, 0x9f, 0x9e, 0x3d, 0xef, 0x06, 0x0a, 0xb0, 0xff, 0xf8, 0x52, 0x33, - 0x4d, 0xe3, 0x24, 0x53, 0x2c, 0x60, 0x39, 0x4f, 0x7c, 0x8c, 0xd1, 0xa9, 0x97, 0xeb, 0xc6, 0xe9, - 0xe5, 0xf0, 0x59, 0x56, 0xc6, 0x39, 0x39, 0x56, 0x9b, 0x96, 0xcc, 0x92, 0xc9, 0x00, 0xf4, 0x5c, - 0x8a, 0xd7, 0xbe, 0x09, 0x8a, 0xa2, 0xe7, 0xca, 0xaa, 0xf6, 0x8e, 0xe4, 0x11, 0x17, 0xfc, 0x49, - 0x16, 0xba, 0xd5, 0xf0, 0x91, 0x55, 0x77, 0xbd, 0x62, 0x08, 0x26, 0xf7, 0xf0, 0x5c, 0x32, 0x9b, - 0xdd, 0xbe, 0xab, 0xb9, 0xfa, 0x6d, 0xfc, 0xa3, 0x6f, 0x75, 0xc1, 0x28, 0xc6, 0xef, 0x77, 0xd8, - 0x78, 0x25, 0x3a, 0x2a, 0xef, 0x8d, 0xdc, 0x7e, 0x0f, 0x82, 0xe2, 0xde, 0xfb, 0xbe, 0x1f, 0x88, - 0x09, 0x18, 0x8c, 0x69, 0x06, 0x78, 0xed, 0x55, 0x7c, 0x28, 0x49, 0xf6, 0xdb, 0x5f, 0xb4, 0x3a, - 0x4e, 0x0d, 0x1f, 0x8f, 0xdc, 0x10, 0x04, 0x9c, 0xbc, 0xba, 0xcb, 0xe1, 0x49, 0x6f, 0x47, 0x8f, - 0x88, 0xe3, 0xfa, 0xac, 0x33, 0x70, 0xc1, 0x39, 0xb8, 0xe2, 0x47, 0x0a, 0xef, 0x5b, 0xe3, 0x2d, - 0xf1, 0x22, 0x6c, 0xb9, 0x3a, 0xb9, 0xd6, 0xbe, 0x26, 0xed, 0xd3, 0xa3, 0x52, 0x7f, 0x05, 0x64, - 0xbd, 0x7a, 0xa7, 0x66, 0xe2, 0xed, 0xf1, 0xd7, 0xaf, 0xaa, 0xac, 0x4f, 0x0d, 0x9e, 0x5d, 0x56, - 0xf1, 0x00, 0xa7, 0x33, 0x31, 0x99, 0xab, 0x1e, 0x6b, 0xef, 0x82, 0x5f, 0x77, 0xa6, 0xdd, 0xfc, - 0x40, 0xd2, 0x0e, 0xbf, 0x83, 0xbf, 0x5b, 0xd3, 0x63, 0x6d, 0x45, 0x75, 0xb9, 0x6b, 0x17, 0xea, - 0xf5, 0xf0, 0x4d, 0x6b, 0x15, 0x47, 0x1a, 0x3a, 0x3a, 0x3a, 0xd5, 0x6c, 0x7c, 0x76, 0x94, 0xe9, - 0x5a, 0xd3, 0x6f, 0xe8, 0xa6, 0x04, 0xdc, 0xb2, 0x3a, 0x73, 0x16, 0xfc, 0x4e, 0xb5, 0xe0, 0x8f, - 0x7d, 0xbc, 0x57, 0x1f, 0xaa, 0xea, 0x62, 0xb5, 0xf5, 0x25, 0x1f, 0xc1, 0x3d, 0x6b, 0x54, 0xd5, - 0x3e, 0xae, 0x4a, 0x7b, 0xfa, 0x35, 0x7d, 0x89, 0x6e, 0xf5, 0xd9, 0x96, 0xaa, 0xb9, 0x45, 0xde, - 0xfe, 0x4d, 0xdd, 0xc9, 0xc1, 0x2c, 0x5e, 0xdb, 0x75, 0x55, 0xd2, 0xaf, 0x5a, 0xe2, 0x62, 0xe9, - 0xba, 0xf2, 0x7f, 0x82, 0x92, 0x3e, 0x8d, 0xa3, 0x76, 0xfc, 0x9e, 0x30, 0xfc, 0xf5, 0xef, 0x84, - 0xca, 0x0a, 0x3e, 0x2f, 0xe2, 0xf5, 0xc7, 0x5b, 0x8a, 0x9e, 0xe8, 0xd2, 0xa5, 0xf1, 0x42, 0x12, - 0x46, 0xce, 0x9d, 0x7e, 0x2e, 0x4c, 0xfc, 0x94, 0xf1, 0x44, 0xe6, 0xc5, 0xd5, 0x7c, 0x59, 0xea, - 0x9d, 0x6b, 0xf5, 0xef, 0x82, 0x7c, 0xde, 0x0e, 0xde, 0x34, 0xbd, 0x9f, 0x04, 0xb5, 0xcb, 0xbb, - 0xec, 0xf8, 0x82, 0x4b, 0xd6, 0x6f, 0x2b, 0x1f, 0x0a, 0x94, 0x3e, 0x4a, 0xcc, 0xf3, 0x79, 0x90, - 0x65, 0xf6, 0xc5, 0xff, 0x05, 0x36, 0x38, 0x82, 0x02, 0xea, 0x66, 0x45, 0x45, 0xb8, 0xdd, 0x23, - 0x84, 0xfa, 0xf5, 0x71, 0x44, 0xe5, 0x87, 0x3c, 0x3d, 0xee, 0xc8, 0x6e, 0x8b, 0xba, 0x77, 0xae, - 0xef, 0xf7, 0x5c, 0x4c, 0xa6, 0x69, 0x4e, 0xda, 0x28, 0x43, 0x84, 0x8e, 0xab, 0xea, 0xa5, 0xe6, - 0x22, 0x75, 0xae, 0xc5, 0xbd, 0xfe, 0x6d, 0xef, 0xc4, 0x49, 0xc4, 0x69, 0x55, 0x3a, 0x4b, 0xe2, - 0xf6, 0xad, 0xae, 0x4f, 0xe6, 0xb7, 0x7a, 0xe4, 0xaa, 0xef, 0xac, 0xbe, 0x09, 0x46, 0x55, 0x69, - 0x0f, 0x20, 0xec, 0x7d, 0xe6, 0xbf, 0x19, 0xe7, 0xd5, 0xd5, 0x8d, 0x2f, 0x72, 0x84, 0x0f, 0x5c, - 0xb6, 0xab, 0x3f, 0x14, 0x59, 0xf7, 0xe2, 0xfe, 0x4e, 0x86, 0xab, 0xb3, 0x5a, 0xb5, 0xe5, 0x2a, - 0x48, 0xdf, 0xe2, 0x6e, 0x33, 0xc8, 0x1c, 0x3a, 0x74, 0xbc, 0x7d, 0x86, 0x13, 0x3f, 0x6c, 0xdd, - 0x3d, 0x69, 0x04, 0x39, 0x2b, 0x5a, 0xc4, 0x7d, 0xdd, 0xf3, 0x74, 0x7a, 0xf9, 0xaf, 0xbb, 0xe8, - 0xad, 0xf2, 0x6c, 0xd6, 0xa2, 0x04, 0x02, 0x3b, 0xeb, 0xea, 0xe5, 0xc9, 0x9a, 0xeb, 0xd5, 0xc1, - 0x51, 0x13, 0x6f, 0x69, 0xfc, 0xd6, 0xee, 0x7d, 0x88, 0xdd, 0xfc, 0x13, 0x49, 0xb2, 0x3e, 0x56, - 0x19, 0xf1, 0x7d, 0xc6, 0x2a, 0xf5, 0x7c, 0x21, 0xe6, 0xc2, 0x64, 0x5f, 0x24, 0x89, 0xc5, 0x15, - 0x76, 0xb9, 0x97, 0x5c, 0x24, 0x6b, 0xdd, 0xdd, 0xfe, 0x6a, 0xeb, 0xe4, 0xbe, 0xfe, 0x63, 0xbb, - 0xfe, 0x33, 0x49, 0xe9, 0xa6, 0xe9, 0xc8, 0x44, 0x67, 0xa3, 0xe2, 0xb7, 0xf0, 0x9c, 0xf2, 0xcf, - 0x1b, 0x5c, 0x21, 0x88, 0xf1, 0x37, 0xc8, 0x5b, 0xdf, 0xcc, 0x23, 0x77, 0xf3, 0x55, 0x7f, 0x65, - 0xc9, 0xfe, 0x3c, 0xbb, 0xbc, 0x57, 0x7b, 0xdd, 0x71, 0xc6, 0xab, 0x7a, 0xd5, 0x57, 0x27, 0x21, - 0xd5, 0x5b, 0x5f, 0x17, 0x59, 0xa8, 0x9b, 0x3b, 0x35, 0xf2, 0xea, 0xef, 0xe4, 0xad, 0x7e, 0x11, - 0x2e, 0x92, 0xec, 0xd7, 0x26, 0x2a, 0xea, 0xdf, 0x05, 0xc4, 0xd5, 0x57, 0x76, 0x7c, 0x50, 0x8b, - 0xaa, 0x72, 0x7f, 0xcb, 0xa6, 0xb7, 0xca, 0x7d, 0x57, 0xc6, 0x5d, 0x7a, 0x49, 0x8c, 0xc4, 0x55, - 0x26, 0x75, 0xa9, 0x8f, 0xec, 0xd4, 0xf4, 0xc9, 0xc4, 0x5e, 0xda, 0x78, 0xaf, 0xe2, 0x8b, 0xc9, - 0xea, 0x6c, 0x9f, 0x04, 0x54, 0x89, 0x9f, 0x7c, 0x64, 0xb8, 0xe5, 0x96, 0xf7, 0x69, 0xba, 0x54, - 0xde, 0xbe, 0x10, 0xbb, 0xb7, 0x79, 0x73, 0x9b, 0x4d, 0x9e, 0x0b, 0x2f, 0xb1, 0xaf, 0x74, 0xdb, - 0xdf, 0xe3, 0xae, 0xa6, 0x9f, 0x49, 0x7c, 0xb4, 0x6a, 0xc2, 0x7c, 0x45, 0xee, 0xf5, 0x55, 0xf2, - 0x9d, 0x75, 0xf2, 0x8a, 0xaa, 0xaa, 0xe5, 0xd6, 0xab, 0x93, 0xc5, 0x6f, 0x8b, 0x1e, 0xed, 0xdd, - 0x56, 0xbc, 0x20, 0x5f, 0x36, 0x3e, 0x11, 0x11, 0x33, 0x06, 0xfa, 0xe6, 0xc5, 0xca, 0xf8, 0xed, - 0x52, 0x49, 0x52, 0xf6, 0x97, 0xc2, 0x67, 0xda, 0x5d, 0xdf, 0xcb, 0x55, 0xfc, 0x9a, 0xaf, 0x13, - 0xf8, 0x48, 0x51, 0x33, 0xd6, 0xbe, 0x32, 0xd0, 0xf2, 0x06, 0xb9, 0xd3, 0x97, 0x5a, 0xc9, 0x93, - 0xfa, 0x3b, 0xa6, 0xe6, 0x10, 0xaf, 0xf8, 0xb2, 0xb7, 0x7f, 0x3f, 0x5c, 0x15, 0x90, 0xb5, 0xe9, - 0x6d, 0x1f, 0x7a, 0xf5, 0x70, 0x96, 0xb1, 0x34, 0x93, 0x7f, 0xdf, 0x3e, 0x6b, 0x88, 0xee, 0x6e, - 0xba, 0x38, 0x4b, 0x94, 0xeb, 0x17, 0x5f, 0x26, 0x6e, 0xff, 0x96, 0xab, 0x93, 0x9b, 0xaa, 0xae, - 0xc4, 0x3d, 0xea, 0x27, 0x5d, 0x8b, 0x55, 0xd7, 0x7d, 0x55, 0x73, 0x15, 0x56, 0xfe, 0x59, 0x33, - 0xf0, 0x8f, 0xc4, 0xdf, 0x09, 0x9a, 0xd2, 0xf2, 0xe7, 0xcd, 0x97, 0x31, 0x7c, 0x26, 0x62, 0x47, - 0x66, 0xf4, 0xe1, 0x4e, 0x24, 0xaa, 0xba, 0xd6, 0x5e, 0x4c, 0x5f, 0x2f, 0x30, 0x95, 0xad, 0xf4, - 0x67, 0xf8, 0x26, 0x2d, 0x53, 0xd6, 0xbd, 0x08, 0x72, 0x0a, 0x6c, 0x99, 0xbe, 0x23, 0x77, 0x6c, - 0xf8, 0xbc, 0x39, 0xc9, 0x5a, 0xd0, 0xb4, 0x3c, 0x35, 0x3d, 0x9c, 0xd2, 0xe2, 0x6b, 0x9b, 0xcb, - 0x62, 0xf9, 0x82, 0x0e, 0xff, 0x82, 0x22, 0xe2, 0xbd, 0xe1, 0xae, 0x43, 0xaa, 0xe0, 0x43, 0xe5, - 0xd8, 0xdb, 0x63, 0x17, 0xc9, 0x6f, 0x50, 0x5f, 0xc2, 0x74, 0x4c, 0xad, 0x35, 0x69, 0x30, 0x8f, - 0x09, 0xd3, 0x63, 0xb1, 0xdb, 0xb6, 0x13, 0xe1, 0x19, 0x64, 0xcb, 0x4c, 0x66, 0xb4, 0x1f, 0xd1, - 0x17, 0x41, 0xaf, 0x11, 0x4a, 0x3b, 0x9f, 0x7b, 0x9b, 0x8c, 0xee, 0xf1, 0xbc, 0xad, 0x91, 0x19, - 0xe8, 0x76, 0x49, 0xb1, 0x82, 0xd8, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x3f, 0x1f, 0xb0, 0x5a, - 0xf3, 0x19, 0x6b, 0x5c, 0x11, 0xde, 0xf7, 0xae, 0x4a, 0xea, 0xba, 0x1a, 0xf0, 0x9f, 0x42, 0x72, - 0xfa, 0xf5, 0xf4, 0x67, 0x86, 0x30, 0x20, 0xa0, 0x88, 0xc2, 0x95, 0xc8, 0x1a, 0xba, 0x7f, 0x77, - 0xbd, 0xf1, 0x3a, 0x74, 0xde, 0xff, 0x67, 0x3b, 0x76, 0xdf, 0x28, 0xaa, 0x6b, 0xf2, 0x9e, 0xa2, - 0xff, 0x66, 0x3c, 0x3a, 0xe5, 0x95, 0x84, 0xc2, 0x8d, 0x1c, 0xc7, 0x88, 0x12, 0xb8, 0xc4, 0x62, - 0xaf, 0x15, 0xd0, 0xb7, 0xbe, 0xaf, 0xf4, 0x4e, 0xfa, 0xb4, 0x29, 0xd0, 0xbe, 0xfa, 0xf5, 0xf5, - 0x72, 0x4e, 0x82, 0x95, 0xf0, 0x81, 0xd2, 0xae, 0x59, 0x54, 0x95, 0x1c, 0x6d, 0xe2, 0xf0, 0x55, - 0x6e, 0xd6, 0xe7, 0xa4, 0x66, 0xae, 0x73, 0x57, 0x3e, 0x12, 0xaa, 0xee, 0xba, 0xe8, 0x63, 0x8f, - 0x10, 0x55, 0x5d, 0x6b, 0xf0, 0xa6, 0x45, 0x87, 0x16, 0x10, 0x6d, 0x57, 0x69, 0xf5, 0xa9, 0x0a, - 0x0d, 0x2e, 0xa2, 0xac, 0x86, 0xd3, 0x29, 0x20, 0xfa, 0x20, 0x1c, 0x99, 0xc6, 0xc6, 0xe2, 0xa8, - 0x85, 0x6b, 0x2f, 0x10, 0x14, 0x8d, 0x92, 0x11, 0x22, 0xa4, 0x32, 0xba, 0xa6, 0xa3, 0x05, 0xea, - 0x06, 0x92, 0x1a, 0x20, 0x28, 0xca, 0xae, 0xb6, 0x06, 0x07, 0xab, 0x38, 0xdc, 0x56, 0xd1, 0x2b, - 0x3d, 0xfe, 0x14, 0xa1, 0x80, 0x66, 0x76, 0x20, 0xb9, 0x43, 0x79, 0xcb, 0x30, 0x3f, 0x4c, 0x58, - 0xbe, 0x8c, 0xca, 0xbb, 0xe1, 0x48, 0x3f, 0xcd, 0x44, 0xa4, 0xa1, 0x00, 0x73, 0xfb, 0xc1, 0x7a, - 0x18, 0x0a, 0xc5, 0x7d, 0x91, 0x19, 0x56, 0x9e, 0xb0, 0x3d, 0xb0, 0x4a, 0x74, 0xb3, 0x36, 0xd6, - 0x17, 0xba, 0x83, 0x35, 0x99, 0x33, 0xd3, 0x2f, 0x0a, 0x1d, 0xb5, 0xa9, 0x43, 0xbb, 0x36, 0x17, - 0x84, 0x87, 0x4e, 0xa1, 0xee, 0x3d, 0x34, 0x27, 0x34, 0x65, 0x0e, 0x60, 0x70, 0xf1, 0x86, 0x0c, - 0x61, 0xba, 0x1f, 0xa2, 0x18, 0x6a, 0xc2, 0x78, 0xe6, 0x44, 0xd7, 0x92, 0xd5, 0x67, 0xc4, 0xc6, - 0x49, 0xc6, 0x4d, 0xe8, 0x31, 0xc6, 0xd4, 0x52, 0x7b, 0x79, 0x77, 0x4b, 0xd5, 0xda, 0x7b, 0x8a, - 0xaf, 0x18, 0x42, 0xf0, 0x41, 0xdd, 0x23, 0x2e, 0x5e, 0xb5, 0x08, 0x7f, 0x96, 0x97, 0x5f, 0x47, - 0x3d, 0x13, 0xf0, 0x88, 0xdd, 0x56, 0x39, 0xe0, 0xa5, 0x5b, 0x9c, 0xba, 0xa6, 0xe8, 0xae, 0x7d, - 0x58, 0xae, 0xae, 0x7d, 0x15, 0xbe, 0xac, 0x85, 0x3a, 0x24, 0x73, 0xeb, 0x15, 0x8f, 0x47, 0xf3, - 0xa4, 0xd3, 0x4d, 0x34, 0x12, 0x0b, 0xf1, 0x61, 0xa6, 0x26, 0x3b, 0xa5, 0x7f, 0x8d, 0xcd, 0xd7, - 0x43, 0x4a, 0xd5, 0x09, 0x22, 0xae, 0x84, 0xc6, 0xc4, 0xf4, 0x8f, 0xcd, 0xec, 0xbe, 0x0a, 0xcb, - 0xb6, 0x7d, 0x69, 0xcc, 0x36, 0xe9, 0x5b, 0x43, 0x43, 0x34, 0x9f, 0x21, 0x6d, 0x2f, 0xc6, 0x09, - 0x3c, 0x58, 0xfb, 0x48, 0xab, 0x4a, 0xa6, 0xed, 0x31, 0xc4, 0xfe, 0x34, 0x56, 0x86, 0x74, 0x4d, - 0xee, 0x33, 0x71, 0x59, 0xe9, 0xac, 0xd1, 0xbb, 0x53, 0xd3, 0x5f, 0x9b, 0xd3, 0xf6, 0x25, 0xdb, - 0x76, 0x97, 0x19, 0xb6, 0xd2, 0xbb, 0x6b, 0x7a, 0x75, 0x9b, 0x7e, 0x11, 0xb2, 0x44, 0x34, 0x99, - 0x5c, 0xb6, 0x35, 0xeb, 0x6e, 0x9b, 0x12, 0x5e, 0x2f, 0x18, 0x31, 0x7d, 0x5a, 0x07, 0x14, 0xd7, - 0x6b, 0xcc, 0x62, 0x33, 0x79, 0x8d, 0x3c, 0xe1, 0x02, 0xc4, 0x70, 0x6e, 0x12, 0xa7, 0x43, 0x19, - 0x83, 0xf0, 0xa1, 0x5c, 0x24, 0x70, 0x40, 0x30, 0x06, 0x96, 0xe3, 0x99, 0x0a, 0x14, 0x5e, 0x77, - 0x60, 0x4b, 0xa7, 0xf2, 0x83, 0xcf, 0xfc, 0x23, 0x0f, 0x28, 0x41, 0x7a, 0xa0, 0x1c, 0x11, 0x5b, - 0x5f, 0x0a, 0x72, 0xf4, 0x88, 0x41, 0x42, 0x5f, 0x29, 0x8c, 0x35, 0xb2, 0xb8, 0xaf, 0x82, 0x66, - 0x31, 0x78, 0x13, 0x17, 0x39, 0x21, 0xf1, 0x92, 0x44, 0x68, 0x52, 0xa7, 0x50, 0x72, 0x18, 0x0e, - 0x34, 0x57, 0x13, 0x1b, 0x94, 0x06, 0xaa, 0x41, 0x45, 0x23, 0x26, 0x28, 0x6e, 0xca, 0x95, 0xb6, - 0x78, 0x50, 0xe7, 0x66, 0x27, 0xb3, 0x2b, 0xa2, 0x19, 0x2a, 0xa9, 0x33, 0xf0, 0x18, 0x65, 0xe4, - 0x92, 0xee, 0x7c, 0x12, 0x50, 0xae, 0x8d, 0xfe, 0x3a, 0x2e, 0x9c, 0x99, 0x24, 0x55, 0x32, 0x44, - 0x44, 0x4d, 0x83, 0xab, 0x07, 0xe1, 0x41, 0x85, 0xb4, 0x42, 0x7c, 0x9f, 0x8f, 0xef, 0x20, 0xa5, - 0xa2, 0x69, 0xf9, 0x68, 0x65, 0xa2, 0x03, 0xcf, 0x9d, 0xe2, 0x0a, 0x50, 0xb7, 0x23, 0x4d, 0xff, - 0xa9, 0x2c, 0x89, 0xf0, 0x50, 0x34, 0x1f, 0x61, 0xb2, 0x9e, 0x5f, 0xf9, 0xe1, 0x00, 0x48, 0x4c, - 0x06, 0x3f, 0x7c, 0x24, 0x74, 0x7e, 0x11, 0x94, 0x49, 0xfb, 0xbe, 0x9f, 0xa2, 0x66, 0x3c, 0x31, - 0x5d, 0x16, 0xdf, 0x56, 0xfa, 0x3b, 0xbe, 0x7a, 0xfb, 0x6d, 0xb6, 0xda, 0xe0, 0xb4, 0x34, 0xb7, - 0xa4, 0x9b, 0xd3, 0xfc, 0x20, 0x79, 0xa5, 0x52, 0xcb, 0xf7, 0x37, 0xf1, 0x78, 0x65, 0x1e, 0x9c, - 0x2c, 0xb9, 0xe1, 0x5b, 0xb0, 0x74, 0xac, 0xcb, 0xbc, 0x0a, 0x49, 0x2b, 0x6d, 0x7f, 0x9c, 0x8a, - 0x6b, 0xef, 0xfe, 0x09, 0x6c, 0x91, 0x5e, 0xa9, 0x6b, 0xe3, 0x4a, 0x66, 0x11, 0x1e, 0x14, 0xa9, - 0x52, 0x6d, 0x11, 0xf7, 0x4c, 0xfa, 0x9d, 0x3e, 0xab, 0x68, 0x8d, 0x5f, 0xf1, 0xf6, 0x43, 0xdc, - 0xce, 0x60, 0xd3, 0x26, 0xe9, 0xb2, 0x99, 0x9f, 0x15, 0xc5, 0x55, 0xb4, 0xf7, 0xc2, 0x65, 0xdd, - 0x53, 0xdf, 0xc6, 0xf4, 0xda, 0x44, 0x89, 0x1a, 0x5b, 0x4d, 0x35, 0x3e, 0xd4, 0x94, 0x9a, 0x68, - 0xaa, 0x9b, 0xf9, 0xb5, 0x49, 0x25, 0xc1, 0x07, 0x69, 0xad, 0x49, 0x24, 0xba, 0x4a, 0x83, 0x66, - 0x32, 0x68, 0x2f, 0xff, 0x0f, 0x97, 0x9f, 0x16, 0x3f, 0x9a, 0x4b, 0xe4, 0xe9, 0xfe, 0x28, 0x71, - 0x22, 0x8d, 0xbe, 0x6a, 0x57, 0x04, 0x61, 0x35, 0xde, 0xef, 0xb2, 0xee, 0xfe, 0xb5, 0xe1, 0x15, - 0xe4, 0x47, 0xec, 0x28, 0xe9, 0xa1, 0xd7, 0x31, 0xda, 0xaa, 0x93, 0xb2, 0x7b, 0x0c, 0x6c, 0x72, - 0xf9, 0x8d, 0xaa, 0xf9, 0x74, 0x97, 0x89, 0x89, 0xed, 0x9d, 0xb9, 0xa0, 0x8b, 0x13, 0x29, 0x78, - 0xe7, 0xd7, 0x08, 0xee, 0x9b, 0xee, 0x8b, 0x77, 0xc4, 0xf8, 0x81, 0x0c, 0x55, 0x5b, 0xf1, 0x01, - 0x0c, 0xd8, 0x17, 0xb2, 0x3b, 0xce, 0xe4, 0x5c, 0x9f, 0xe2, 0x18, 0xd9, 0x14, 0xca, 0xcf, 0xf8, - 0x9a, 0xe8, 0x5b, 0xa5, 0xe7, 0x08, 0x2c, 0x9e, 0x48, 0x78, 0x8e, 0x52, 0xcd, 0xbf, 0x9e, 0xb3, - 0xdb, 0x55, 0x7b, 0xe0, 0x8b, 0xb2, 0x7d, 0x42, 0xf8, 0x8b, 0x88, 0xa1, 0x8d, 0xf1, 0xfc, 0xd5, - 0x6a, 0xa6, 0xff, 0x89, 0x97, 0x33, 0x16, 0xf1, 0x02, 0x0c, 0x5c, 0xb8, 0x5c, 0xf1, 0x67, 0xcb, - 0x85, 0xcc, 0xb9, 0xc4, 0xfe, 0x51, 0x8e, 0xe2, 0xbc, 0x6b, 0x0c, 0x9d, 0xad, 0x0f, 0xf4, 0x5e, - 0x84, 0x3a, 0x0d, 0x75, 0xf1, 0x57, 0x2d, 0xad, 0xb4, 0x34, 0x3f, 0x88, 0x96, 0xcb, 0x79, 0x63, - 0x15, 0xdf, 0x08, 0xdc, 0x56, 0x2b, 0x6b, 0xec, 0x58, 0xaf, 0x9f, 0x8a, 0x18, 0xf7, 0xbc, 0xb4, - 0x75, 0xc5, 0xf8, 0x87, 0xe3, 0x6b, 0xae, 0x6c, 0xf9, 0x5f, 0x17, 0x69, 0xa5, 0x51, 0xef, 0x15, - 0x6f, 0x1f, 0xc8, 0x83, 0x3c, 0x13, 0x89, 0xd5, 0x73, 0x47, 0xdf, 0x54, 0xbf, 0x5d, 0x7c, 0x9b, - 0x36, 0x4a, 0xf9, 0x37, 0xb5, 0xe5, 0x2b, 0x1c, 0xcf, 0xae, 0x6b, 0x08, 0x81, 0x93, 0x67, 0xe1, - 0x33, 0x17, 0x1d, 0x17, 0x77, 0x3f, 0x12, 0x74, 0x97, 0x3b, 0xe1, 0xe4, 0x90, 0x79, 0xd5, 0x13, - 0x05, 0x98, 0x87, 0x03, 0x6d, 0x36, 0xa9, 0x93, 0xe7, 0x38, 0x21, 0xc0, 0xdd, 0xe2, 0x05, 0xee, - 0x6e, 0x7f, 0x88, 0x87, 0xc8, 0x2d, 0x17, 0x32, 0xe2, 0xbc, 0x38, 0x73, 0x9b, 0x97, 0x3e, 0x7e, - 0x9c, 0x55, 0xf1, 0x21, 0x48, 0x65, 0xa3, 0xb0, 0xbb, 0x19, 0x9c, 0xe7, 0x61, 0x55, 0x7a, 0x12, - 0x6d, 0x10, 0xa6, 0xaa, 0x26, 0x09, 0xf2, 0xe1, 0x35, 0xbc, 0xa6, 0x36, 0x5c, 0x2d, 0xb1, 0xf0, - 0xa5, 0xac, 0xae, 0x99, 0x68, 0x54, 0xf5, 0xdb, 0xa2, 0x12, 0x71, 0x31, 0x3f, 0xc4, 0xe0, 0xe0, - 0x7e, 0x12, 0xe2, 0x71, 0x31, 0xb3, 0xb0, 0xe4, 0xaf, 0x9b, 0x47, 0x7d, 0x0f, 0x9c, 0x94, 0x24, - 0x45, 0x43, 0x09, 0x74, 0xd3, 0x7f, 0x8b, 0x7f, 0x13, 0x04, 0xe4, 0xaf, 0x23, 0x11, 0x36, 0x28, - 0x1b, 0x8f, 0x04, 0x71, 0xb5, 0xdd, 0x1b, 0x8c, 0x44, 0x27, 0x17, 0x26, 0x25, 0xd0, 0x14, 0xdf, - 0x11, 0x0a, 0x64, 0x7c, 0xd0, 0xa5, 0xc5, 0x64, 0xf9, 0x77, 0x8a, 0xd5, 0xd8, 0x04, 0xb9, 0x42, - 0x35, 0x58, 0x43, 0x90, 0x61, 0xa8, 0xa3, 0xb9, 0x4f, 0x89, 0xe6, 0xc9, 0x30, 0x60, 0x40, 0x5d, - 0x6e, 0x7e, 0xef, 0x77, 0xf0, 0x55, 0x54, 0xec, 0x79, 0x65, 0x54, 0x1d, 0x5a, 0xb9, 0xba, 0x1a, - 0xf8, 0x73, 0xaa, 0xe1, 0xf4, 0xd3, 0x6d, 0xb5, 0xc4, 0xef, 0x0c, 0xab, 0x37, 0xb2, 0xa7, 0x67, - 0xf3, 0x6b, 0x5f, 0x08, 0x91, 0xd2, 0x72, 0x15, 0xca, 0x8e, 0x79, 0x3b, 0x59, 0xe9, 0x9e, 0x24, - 0x40, 0xc2, 0xa5, 0x7d, 0x27, 0xf2, 0x93, 0x58, 0xce, 0x73, 0x2b, 0x5d, 0x2b, 0xf1, 0x01, 0x19, - 0x8d, 0x9c, 0x72, 0xbc, 0xb4, 0xdd, 0xf8, 0x81, 0xbc, 0x86, 0x95, 0xa6, 0x94, 0x47, 0x26, 0x51, - 0xea, 0x89, 0x70, 0x2b, 0x49, 0x9b, 0x73, 0xa5, 0x2e, 0xfe, 0x0b, 0x22, 0xe3, 0x2a, 0x5b, 0x0e, - 0xda, 0xae, 0x92, 0x54, 0x1b, 0xb5, 0x97, 0x12, 0x20, 0x28, 0x4b, 0x30, 0x40, 0x15, 0x65, 0x0b, - 0x21, 0x7b, 0xe4, 0x68, 0xc9, 0x7a, 0xad, 0x5a, 0xe3, 0x9f, 0x19, 0x85, 0x40, 0x86, 0x38, 0xd4, - 0xf2, 0xc0, 0x55, 0xe6, 0x48, 0x36, 0xb5, 0x5a, 0x8d, 0xb7, 0x45, 0xe0, 0xba, 0xc8, 0x47, 0xb0, - 0x6a, 0x14, 0x1a, 0xaa, 0x8a, 0x29, 0x96, 0x49, 0xef, 0x1e, 0x20, 0x65, 0x57, 0x1a, 0xcc, 0x50, - 0x12, 0xad, 0x42, 0x2f, 0xf1, 0x0f, 0x73, 0x62, 0xe4, 0xff, 0x2e, 0x1e, 0x0e, 0x26, 0x48, 0x07, - 0x7b, 0x09, 0x2f, 0xe0, 0xa3, 0x98, 0x6e, 0xef, 0xe5, 0x23, 0xdf, 0xe2, 0x8d, 0x2f, 0x34, 0x78, - 0x87, 0xd7, 0xca, 0x56, 0x51, 0x9e, 0x7f, 0xe2, 0x41, 0x16, 0xf3, 0x3d, 0x8f, 0x12, 0xe5, 0xcb, - 0x7c, 0x3c, 0x48, 0x91, 0x65, 0xcd, 0x8a, 0xbb, 0x5c, 0x48, 0x2a, 0x36, 0x6e, 0x98, 0xad, 0xdc, - 0x56, 0x3c, 0xb5, 0x62, 0x9b, 0xf8, 0x80, 0x81, 0x6d, 0x3a, 0x37, 0x8d, 0xae, 0xf7, 0xe2, 0x60, - 0x97, 0x7b, 0xd4, 0xbe, 0xdb, 0xc4, 0x9b, 0x27, 0x17, 0x59, 0x4e, 0x20, 0x28, 0x61, 0xe7, 0xd7, - 0xae, 0xf7, 0x7d, 0xa1, 0x8b, 0x5c, 0x3a, 0x2c, 0xb8, 0x9e, 0x71, 0x54, 0x22, 0x24, 0x74, 0x39, - 0x1e, 0x69, 0x76, 0xf8, 0x15, 0xbd, 0xc6, 0xb3, 0x6c, 0x92, 0x1b, 0x7d, 0xf1, 0x30, 0x84, 0xd1, - 0x51, 0x49, 0x13, 0x18, 0xd7, 0x49, 0x8b, 0xa5, 0x26, 0x75, 0xa3, 0xd5, 0x1f, 0xda, 0x83, 0x43, - 0x65, 0xc0, 0xea, 0xff, 0x04, 0xd5, 0x9b, 0xab, 0xbc, 0x6e, 0xec, 0xe9, 0xe1, 0xee, 0xca, 0xfb, - 0xfa, 0x27, 0x4f, 0xc7, 0x8b, 0x77, 0xcb, 0x8f, 0x55, 0x7f, 0xc4, 0x5e, 0xb6, 0x9a, 0x4b, 0x89, - 0x12, 0x09, 0xed, 0xd5, 0xa5, 0x9a, 0x9e, 0xf1, 0x20, 0xb4, 0x8e, 0x21, 0x61, 0xec, 0xbd, 0xfc, - 0xbe, 0x37, 0x74, 0x31, 0x2c, 0x2e, 0x21, 0xcb, 0xbb, 0xbe, 0x4f, 0x48, 0xb5, 0xd3, 0xb7, 0xfc, - 0x47, 0x11, 0x11, 0x86, 0xbf, 0x2f, 0xe5, 0xbe, 0x24, 0x29, 0x09, 0xde, 0xb7, 0x0e, 0x0d, 0x9d, - 0xe7, 0x24, 0x10, 0xa8, 0x35, 0xae, 0x60, 0xec, 0x5e, 0xfd, 0x7a, 0x95, 0x87, 0xa9, 0xb6, 0x1e, - 0xce, 0xfc, 0xfe, 0x10, 0x11, 0x1b, 0xdf, 0x77, 0x7b, 0x85, 0x56, 0xcf, 0x04, 0x62, 0xf2, 0x17, - 0xcd, 0x2a, 0xb0, 0xf0, 0x88, 0x50, 0x75, 0x6a, 0x29, 0xc7, 0xc7, 0xcf, 0x6d, 0xaa, 0xab, 0x7a, - 0x1b, 0xfb, 0xc2, 0x21, 0x48, 0xf3, 0xd2, 0xcc, 0x2c, 0x33, 0x8a, 0xb0, 0x77, 0x05, 0x39, 0xd9, - 0x30, 0x0e, 0x53, 0x19, 0xca, 0xd4, 0x6d, 0x8f, 0x09, 0xcc, 0x7c, 0x28, 0x2c, 0x5d, 0x55, 0x56, - 0x94, 0x9e, 0xa3, 0xc3, 0x87, 0x87, 0x15, 0x8c, 0xef, 0x5b, 0xff, 0x1c, 0x48, 0x81, 0x86, 0x8d, - 0xd1, 0x8d, 0xfd, 0x9c, 0x5e, 0x55, 0x8c, 0x77, 0xf2, 0x3b, 0xf9, 0x5d, 0x71, 0x10, 0xa4, 0x05, - 0xee, 0x8c, 0x1d, 0x07, 0x00, 0x10, 0x98, 0xbe, 0x80, 0x68, 0x65, 0xc3, 0xaa, 0xd8, 0xc8, 0xdb, - 0x6b, 0xc9, 0x0a, 0x3a, 0x97, 0x44, 0xa0, 0xb3, 0x7a, 0xea, 0x1c, 0x06, 0xdf, 0x91, 0xad, 0xea, - 0x15, 0x59, 0x68, 0xd5, 0x65, 0x0a, 0xb5, 0x69, 0x8d, 0xa0, 0xba, 0xd6, 0xdb, 0x88, 0x97, 0x36, - 0x31, 0x04, 0x7d, 0xf9, 0xe0, 0x4c, 0x48, 0x93, 0xd5, 0x56, 0xd5, 0x7c, 0x96, 0x3d, 0x71, 0x32, - 0x54, 0x5d, 0x57, 0xc2, 0x22, 0x26, 0xfe, 0x24, 0xe0, 0xa1, 0xa9, 0x7a, 0x57, 0xe2, 0x4e, 0x0f, - 0xec, 0xa4, 0x48, 0x6f, 0x9d, 0xd7, 0x0d, 0x43, 0x43, 0x92, 0x07, 0x46, 0x07, 0x67, 0x92, 0x45, - 0xf0, 0xdf, 0x77, 0xf1, 0x11, 0x70, 0x48, 0xd6, 0xd2, 0x17, 0x9d, 0xe0, 0x70, 0x73, 0x22, 0x20, - 0x80, 0xf1, 0x3e, 0x24, 0x61, 0x20, 0xdd, 0xda, 0xb4, 0xee, 0xe7, 0x81, 0xf3, 0xaf, 0x3b, 0x3e, - 0x14, 0x21, 0xb9, 0xde, 0x5f, 0x12, 0x04, 0xd1, 0x8e, 0xf2, 0x23, 0x34, 0x82, 0x8c, 0x62, 0xa4, - 0xc1, 0x21, 0x59, 0x4c, 0x93, 0x4d, 0xeb, 0x88, 0x0c, 0x05, 0x05, 0xb0, 0xf2, 0xdb, 0xb0, 0xe0, - 0x15, 0x1d, 0x31, 0x03, 0xe4, 0x0b, 0x0b, 0xb9, 0xfe, 0xfb, 0x8e, 0xf3, 0xb8, 0x98, 0x50, 0x55, - 0x44, 0x5d, 0x16, 0x80, 0xb1, 0x1d, 0x91, 0xcb, 0x80, 0x00, 0x61, 0x42, 0x60, 0x0a, 0x9f, 0xc7, - 0x80, 0x03, 0x01, 0xe0, 0xbb, 0x30, 0xe0, 0xe6, 0xd8, 0x7e, 0x4a, 0x48, 0x05, 0x43, 0xd0, 0xea, - 0x3b, 0x83, 0x55, 0x7c, 0x61, 0x65, 0xa9, 0x25, 0xc3, 0x0a, 0xae, 0x06, 0xef, 0x48, 0x79, 0x7a, - 0xd4, 0x2a, 0xe3, 0x81, 0xde, 0x84, 0x76, 0x16, 0x1d, 0xed, 0x9e, 0x14, 0xc9, 0xd8, 0x77, 0x41, - 0xd0, 0x51, 0xcd, 0xf4, 0xea, 0xdc, 0x28, 0xbb, 0x38, 0x88, 0xc2, 0xea, 0xea, 0xb5, 0xbb, 0x60, - 0xd6, 0x97, 0x49, 0x69, 0x1f, 0x87, 0xf9, 0x77, 0x59, 0x39, 0xb4, 0xab, 0xe5, 0xd6, 0xb8, 0x88, - 0x43, 0x7a, 0xaa, 0xd5, 0x55, 0x7e, 0x3a, 0xb5, 0xea, 0xab, 0x55, 0x5c, 0x16, 0x16, 0x9b, 0xbb, - 0xdf, 0x77, 0x79, 0x7c, 0x68, 0x87, 0x7b, 0xc5, 0xc4, 0xfb, 0x22, 0xf7, 0x1e, 0xe8, 0xf1, 0x08, - 0x07, 0x07, 0x49, 0x23, 0x2a, 0x0b, 0xc5, 0x8e, 0x76, 0x83, 0xef, 0x93, 0xf8, 0x52, 0x7c, 0x8c, - 0xe0, 0xd2, 0xe2, 0x93, 0xd8, 0xa2, 0xe8, 0x11, 0xb3, 0x27, 0xed, 0x6e, 0x81, 0x83, 0xf5, 0xd9, - 0x5a, 0x84, 0xa6, 0x15, 0x67, 0x8a, 0xde, 0x8b, 0x4b, 0x49, 0xe4, 0xe0, 0x9e, 0x3a, 0x66, 0xce, - 0xde, 0x65, 0x7b, 0x5d, 0x13, 0x87, 0x45, 0x5f, 0x05, 0x74, 0x6e, 0xa2, 0x8e, 0xdb, 0x3e, 0x66, - 0x26, 0x1a, 0x14, 0xe4, 0x0e, 0xd9, 0x6e, 0x8e, 0x2f, 0x38, 0x62, 0x04, 0x02, 0x72, 0xc1, 0xb6, - 0xb2, 0xa9, 0x2d, 0xba, 0xf9, 0x62, 0x93, 0x12, 0x20, 0x15, 0x99, 0xec, 0x1f, 0xfa, 0x83, 0x3a, - 0xe5, 0x42, 0x29, 0x82, 0x76, 0xb9, 0x32, 0x5d, 0x16, 0xe2, 0x04, 0x85, 0x38, 0x28, 0xa7, 0x50, - 0x98, 0x34, 0x5b, 0xf7, 0x0a, 0xb0, 0xa8, 0xb7, 0x8a, 0x62, 0xf2, 0xe6, 0xa6, 0x47, 0x35, 0xb2, - 0x47, 0xa9, 0x5f, 0x98, 0xf8, 0x52, 0x21, 0x50, 0x70, 0xe0, 0x7c, 0x0d, 0x4f, 0x00, 0x70, 0xc4, - 0x20, 0x3f, 0x0b, 0x96, 0xa3, 0x90, 0x01, 0xc9, 0x94, 0xe8, 0xbf, 0xd8, 0xe5, 0xe0, 0x51, 0xf1, - 0xee, 0x2b, 0xac, 0xa4, 0x64, 0x20, 0xdd, 0x9d, 0x17, 0x38, 0x81, 0x23, 0x23, 0xff, 0x28, 0x2e, - 0xaa, 0x4f, 0x41, 0xf1, 0x7a, 0x75, 0xfd, 0x27, 0x6b, 0x65, 0x4a, 0xf7, 0x7b, 0x62, 0x3e, 0x33, - 0xb6, 0xd2, 0x33, 0x88, 0x90, 0xf5, 0xae, 0x22, 0x14, 0x32, 0xd5, 0x5b, 0xa4, 0xd5, 0x8a, 0xe8, - 0x94, 0x53, 0x15, 0xa4, 0xaa, 0x92, 0xb7, 0x0c, 0x42, 0x92, 0x41, 0x35, 0x92, 0x46, 0x2b, 0x07, - 0x6e, 0x9d, 0x72, 0x6e, 0x14, 0xae, 0x5e, 0x6c, 0x1c, 0x94, 0x71, 0xc6, 0xc3, 0xca, 0x00, 0x66, - 0xb7, 0x5e, 0x4f, 0xef, 0xe9, 0x1b, 0xf6, 0xf6, 0xe4, 0xcd, 0x57, 0x9d, 0x4a, 0x97, 0x9d, 0xe2, - 0x74, 0x07, 0x30, 0x7f, 0x9a, 0x82, 0xdf, 0x82, 0x32, 0x8a, 0xc5, 0x60, 0x35, 0x9a, 0x17, 0x00, - 0xa3, 0x52, 0x7f, 0x48, 0xa5, 0xe2, 0xee, 0xee, 0x0f, 0x3c, 0xdd, 0xc2, 0x3d, 0x62, 0xae, 0xea, - 0xab, 0x5c, 0xa5, 0x17, 0x4d, 0x7e, 0x14, 0xbe, 0xea, 0xb5, 0x49, 0x2f, 0x43, 0x1a, 0x59, 0x7c, - 0x66, 0x9a, 0xab, 0xa7, 0x7a, 0xcf, 0x15, 0xfc, 0x25, 0x9d, 0x9b, 0x1b, 0xbf, 0xe0, 0x8b, 0x41, - 0xa9, 0x49, 0xf5, 0x70, 0x4a, 0x4b, 0xda, 0x77, 0xf5, 0x7c, 0xc5, 0x63, 0x94, 0x51, 0xbe, 0x25, - 0xe8, 0x37, 0x63, 0xe2, 0x06, 0xd9, 0xa6, 0xcf, 0x0a, 0x2e, 0x87, 0x25, 0x4b, 0x0d, 0xe3, 0xca, - 0x1f, 0xad, 0x70, 0x1e, 0xd9, 0x2b, 0xf6, 0xe0, 0xfb, 0xf1, 0x00, 0xa8, 0x41, 0xcc, 0x1f, 0x07, - 0xc7, 0xc0, 0x3d, 0xad, 0x42, 0x1d, 0x39, 0x81, 0x88, 0xfb, 0x01, 0xa7, 0xac, 0xa7, 0xab, 0x68, - 0xc1, 0x61, 0xe3, 0x3b, 0xb1, 0x41, 0xd8, 0x56, 0xb5, 0x26, 0x3f, 0xf9, 0x70, 0x3a, 0xb2, 0xa8, - 0xb9, 0xa1, 0xe5, 0x2d, 0x21, 0x8f, 0x33, 0x3d, 0x65, 0x78, 0x90, 0xa7, 0x66, 0x3b, 0x7d, 0x37, - 0x6f, 0x56, 0x62, 0xf3, 0x19, 0xa9, 0x8b, 0x88, 0x85, 0x25, 0x10, 0x17, 0x68, 0xf0, 0xe0, 0xb2, - 0x93, 0x39, 0xe0, 0x21, 0xc8, 0xb5, 0x7c, 0x15, 0x15, 0xbc, 0x3a, 0x32, 0xe2, 0x21, 0x49, 0x5a, - 0x41, 0x97, 0x4c, 0xc2, 0xad, 0x8a, 0x32, 0x9e, 0x9d, 0xf1, 0x78, 0xc2, 0x04, 0x77, 0xa1, 0x4c, - 0xcb, 0x38, 0xdf, 0x24, 0x63, 0xc7, 0x73, 0xe2, 0x21, 0xe1, 0x23, 0x64, 0x46, 0x6b, 0x06, 0x5b, - 0xf1, 0x03, 0x83, 0xc3, 0xa3, 0xed, 0x3f, 0x5a, 0x3e, 0xff, 0xe1, 0x5f, 0xb1, 0x95, 0x81, 0x86, - 0xb0, 0x1f, 0x79, 0xf5, 0xbf, 0xf1, 0x30, 0xcf, 0x29, 0x22, 0x92, 0xe9, 0xf5, 0xaf, 0xf0, 0x8d, - 0xd1, 0xab, 0xa5, 0xe1, 0x7c, 0x3e, 0xb2, 0x06, 0xe6, 0xfe, 0xf0, 0xb7, 0xbf, 0x04, 0x20, 0x49, - 0x1a, 0x20, 0x28, 0x00, 0x6f, 0xb8, 0x60, 0x0c, 0xc8, 0x2e, 0x0e, 0x3a, 0xbc, 0x00, 0x04, 0x68, - 0x1b, 0x98, 0x58, 0xc9, 0xa0, 0xc3, 0x27, 0x4f, 0x20, 0x63, 0x07, 0x4b, 0x00, 0x02, 0x88, 0x1a, - 0xe4, 0xe0, 0x1e, 0x1c, 0x7f, 0x18, 0xa8, 0xbe, 0xb6, 0x5d, 0x21, 0x08, 0x1f, 0xab, 0x16, 0x19, - 0xc0, 0xc2, 0xd8, 0xb1, 0x00, 0x01, 0x00, 0xac, 0x10, 0x00, 0x50, 0x01, 0xc0, 0x17, 0x6e, 0x15, - 0x4c, 0xcc, 0xc4, 0xcc, 0x59, 0x5e, 0x05, 0x0b, 0x1e, 0x55, 0x6b, 0x5f, 0x05, 0x23, 0x62, 0xf2, - 0x80, 0xf2, 0xcf, 0x38, 0xb4, 0x02, 0x22, 0xc0, 0x97, 0x2b, 0xb5, 0xd0, 0xa3, 0x0b, 0xaa, 0x43, - 0xca, 0x1d, 0xc9, 0x6a, 0x00, 0x01, 0x03, 0x11, 0x31, 0x88, 0x0a, 0x1a, 0x02, 0xaa, 0xd7, 0xb8, - 0x84, 0x1e, 0x16, 0x15, 0x25, 0x90, 0x5b, 0x03, 0x56, 0x20, 0x1f, 0xbb, 0xcf, 0x54, 0x37, 0xe4, - 0x82, 0x01, 0x21, 0x48, 0xa5, 0x04, 0x0e, 0x42, 0x07, 0x05, 0x32, 0xd8, 0x2b, 0x4c, 0x80, 0x15, - 0x69, 0xdc, 0xc1, 0x41, 0x78, 0x2d, 0xd0, 0xa6, 0xb0, 0xed, 0xb0, 0x1b, 0xc2, 0x51, 0xeb, 0x2e, - 0x90, 0x6f, 0xfa, 0x4f, 0xc4, 0x5d, 0x9c, 0x9d, 0x81, 0xc8, 0x93, 0x48, 0x38, 0x30, 0x0c, 0x8d, - 0x90, 0x18, 0x77, 0x6b, 0x7d, 0xa6, 0x00, 0x4a, 0xe8, 0x65, 0x2a, 0x0a, 0x93, 0x50, 0x90, 0x00, - 0x09, 0xd1, 0x92, 0x25, 0x0e, 0x30, 0x6a, 0xff, 0x8b, 0x32, 0xac, 0xca, 0x84, 0xa8, 0x8c, 0x96, - 0xb7, 0x02, 0xa5, 0x1d, 0x55, 0x32, 0xf6, 0xeb, 0xff, 0x12, 0x26, 0xf7, 0x12, 0xc1, 0xed, 0xcb, - 0xdd, 0x29, 0x23, 0x15, 0xc5, 0x11, 0xb1, 0xca, 0xae, 0xf5, 0xb6, 0xb9, 0xbb, 0xb5, 0xec, 0xaa, - 0xb8, 0x8e, 0x1a, 0x23, 0x20, 0xd1, 0xf6, 0x5d, 0xf9, 0x68, 0xf4, 0xfc, 0x41, 0x1d, 0x31, 0xd9, - 0x53, 0x4f, 0x71, 0x54, 0x37, 0xef, 0x1c, 0x44, 0xa3, 0xfa, 0x05, 0x96, 0x8a, 0x38, 0x63, 0x7c, - 0x94, 0x5f, 0xb2, 0xcf, 0xdf, 0x8d, 0x18, 0x7c, 0xa5, 0x39, 0x1a, 0x48, 0x3f, 0x19, 0xee, 0xd1, - 0x69, 0xbd, 0x44, 0xca, 0x6c, 0xca, 0xd4, 0xd8, 0xd2, 0xda, 0xf1, 0xdc, 0xf8, 0xeb, 0xba, 0x3b, - 0x6b, 0xf1, 0x84, 0x70, 0xb3, 0x33, 0x93, 0x3e, 0xf6, 0x9d, 0xef, 0xec, 0xbb, 0xb4, 0x64, 0x44, - 0xe4, 0x2a, 0x60, 0xee, 0xc7, 0x89, 0x85, 0x05, 0x3f, 0xa6, 0x47, 0x52, 0xb7, 0xc1, 0x96, 0x7c, - 0x71, 0xe1, 0x61, 0xea, 0x5b, 0x54, 0x66, 0xc6, 0xdc, 0x7a, 0x4c, 0x90, 0x53, 0x0b, 0x90, 0x40, - 0xff, 0x29, 0x76, 0x7f, 0x82, 0xe2, 0x71, 0xdd, 0x06, 0xe4, 0xda, 0xc6, 0xf2, 0x87, 0x59, 0xc0, - 0x06, 0x07, 0x20, 0x51, 0x87, 0xae, 0xe7, 0xa0, 0x91, 0x88, 0x86, 0x26, 0x8c, 0xab, 0xf9, 0xbd, - 0x89, 0xc5, 0x66, 0x02, 0xdc, 0x52, 0x53, 0xc3, 0x9a, 0x67, 0xb0, 0x0f, 0x43, 0xc0, 0x53, 0x38, - 0x22, 0xc6, 0x88, 0x92, 0xa8, 0x94, 0x28, 0xe6, 0x79, 0x2d, 0x62, 0x47, 0xc3, 0xd8, 0x03, 0xcd, - 0xf1, 0xf8, 0x08, 0x59, 0x7f, 0x40, 0xe9, 0x88, 0x97, 0xc5, 0x8b, 0xe3, 0x8b, 0xee, 0xa6, 0xf3, - 0x38, 0xc0, 0xe3, 0xce, 0x3e, 0x91, 0x66, 0x79, 0x88, 0xf5, 0xcb, 0xce, 0x3c, 0xef, 0x2c, 0x30, - 0x89, 0x26, 0x11, 0x42, 0x09, 0xa7, 0xfd, 0xca, 0xaf, 0xab, 0xfc, 0x18, 0x8d, 0x35, 0x00, 0x3f, - 0xf9, 0x9c, 0xc6, 0x66, 0x52, 0xc0, 0x4b, 0x81, 0xd0, 0x1e, 0x14, 0x1b, 0x21, 0xc1, 0x26, 0x0e, - 0x21, 0x30, 0x1f, 0x9d, 0x0d, 0x4d, 0xfd, 0x29, 0x61, 0xa8, 0x4e, 0x01, 0xc1, 0x58, 0x0a, 0xaa, - 0x21, 0x11, 0xe7, 0x23, 0xa2, 0x2e, 0x9b, 0xa3, 0xfe, 0x24, 0x69, 0xdd, 0xce, 0xf7, 0x60, 0xa3, - 0x72, 0xfe, 0xa2, 0x78, 0x17, 0x9d, 0x8e, 0x26, 0x56, 0x02, 0x6f, 0x87, 0x10, 0xb0, 0x0e, 0x18, - 0xaa, 0x28, 0x1d, 0x52, 0x9e, 0x1d, 0xfe, 0x24, 0x6d, 0xdd, 0xa7, 0x4a, 0xe2, 0xb3, 0x76, 0x71, - 0x80, 0x34, 0x9c, 0x38, 0x24, 0xc9, 0x36, 0x0c, 0x06, 0x98, 0x65, 0x00, 0x44, 0xf0, 0x80, 0x4e, - 0x9b, 0x60, 0xe8, 0x2d, 0x1d, 0x0b, 0x7f, 0x88, 0x0d, 0xf0, 0xb0, 0x00, 0xe1, 0x94, 0xd7, 0x28, - 0x02, 0xb8, 0x18, 0x96, 0x36, 0x7f, 0xc2, 0x30, 0xa1, 0x86, 0x6e, 0xd6, 0x8b, 0xc3, 0x75, 0xfe, - 0x2c, 0x8d, 0x66, 0xda, 0x96, 0x9b, 0x97, 0x3c, 0xf0, 0xa3, 0x41, 0xd5, 0xce, 0x3f, 0x0f, 0xc5, - 0x4c, 0x89, 0xc2, 0x00, 0xa4, 0x15, 0x6b, 0xa8, 0xee, 0xe6, 0x65, 0xf8, 0x7c, 0x07, 0x8b, 0x6f, - 0x2f, 0xa7, 0xdc, 0x54, 0x7e, 0x75, 0x9a, 0x31, 0xcd, 0xcd, 0x7c, 0x15, 0x8b, 0x7f, 0xca, 0xae, - 0x96, 0x1c, 0x43, 0x3d, 0x30, 0x77, 0x03, 0x3a, 0x9b, 0xb1, 0xef, 0x11, 0xc1, 0x4d, 0xa6, 0x32, - 0xb1, 0x6c, 0x9b, 0xb2, 0x4d, 0xaf, 0x1c, 0xdd, 0x9a, 0xb1, 0x77, 0xdd, 0xf7, 0xf2, 0xed, 0xaf, - 0xca, 0x2e, 0x9a, 0xfc, 0x86, 0x44, 0x7c, 0xa7, 0xe5, 0x23, 0xef, 0xe1, 0x3d, 0xdf, 0x76, 0xbe, - 0xe8, 0xeb, 0x5d, 0x58, 0x78, 0x67, 0xba, 0x25, 0xfc, 0x73, 0xa3, 0xf0, 0x8d, 0x63, 0x2c, 0xa8, - 0xcf, 0x94, 0xbb, 0xbb, 0xf8, 0xca, 0xe3, 0x83, 0xc4, 0x39, 0x87, 0x7d, 0x58, 0x61, 0x0c, 0xe8, - 0xfc, 0xd9, 0xaf, 0xbd, 0x74, 0xfe, 0x23, 0xcc, 0xd6, 0x18, 0xe6, 0x50, 0xeb, 0xf1, 0x38, 0x1c, - 0x74, 0xe3, 0xbc, 0x41, 0x63, 0x61, 0x8e, 0x99, 0x78, 0x25, 0x9e, 0x3a, 0x22, 0x86, 0x03, 0x5a, - 0xcb, 0xef, 0x37, 0x1c, 0x42, 0x33, 0xc4, 0x6b, 0xc1, 0x0e, 0x91, 0x4d, 0xb6, 0x5a, 0xf8, 0xec, - 0xa4, 0x58, 0x9f, 0xf4, 0x92, 0x65, 0x13, 0xfc, 0xd3, 0xbf, 0x92, 0x26, 0x14, 0xcc, 0xcc, 0x5c, - 0xd0, 0x06, 0x71, 0x6f, 0xa8, 0x1f, 0xbd, 0x01, 0x4e, 0x49, 0xe4, 0x1e, 0xbe, 0x53, 0xd3, 0xa3, - 0x39, 0x86, 0x9c, 0x17, 0x1a, 0x4c, 0x38, 0xeb, 0x72, 0xf3, 0xb3, 0x1b, 0x90, 0x3d, 0x9d, 0x11, - 0x16, 0xb0, 0xa0, 0x8e, 0x98, 0x95, 0xfd, 0x4d, 0x0e, 0xb3, 0x4f, 0x0f, 0xdd, 0x53, 0xf0, 0x46, - 0x2f, 0x43, 0x0b, 0xa6, 0x3a, 0xf8, 0xb2, 0x6e, 0xad, 0x69, 0xb8, 0x80, 0x42, 0x36, 0x6c, 0x03, - 0xaa, 0x61, 0x74, 0x86, 0x4c, 0x6a, 0x78, 0xe0, 0x16, 0x36, 0xca, 0xb2, 0x6b, 0x00, 0x4a, 0xe2, - 0xc5, 0x28, 0x65, 0xa4, 0xbe, 0x90, 0xcf, 0x79, 0x6d, 0xbe, 0x90, 0x04, 0x72, 0x61, 0x69, 0xa0, - 0xb0, 0x9f, 0x81, 0x9f, 0x55, 0x28, 0xa1, 0x39, 0x87, 0xe0, 0x80, 0x0a, 0x03, 0x4c, 0xb8, 0x12, - 0xd3, 0x08, 0x1b, 0x1d, 0xda, 0x50, 0x04, 0x52, 0x76, 0x3a, 0x2d, 0x8b, 0x00, 0xaa, 0xb8, 0xd3, - 0x80, 0x14, 0x42, 0x89, 0xa5, 0x0e, 0xaf, 0xc0, 0x00, 0x83, 0xc3, 0xce, 0x60, 0x00, 0x20, 0x02, - 0xb1, 0x91, 0x15, 0x00, 0xf9, 0x00, 0xeb, 0xfc, 0xae, 0x08, 0x08, 0xf1, 0xc8, 0x6e, 0x2b, 0x30, - 0x05, 0x82, 0xc0, 0x91, 0x06, 0x01, 0x4a, 0x01, 0x60, 0x78, 0x82, 0x00, 0xa4, 0xfe, 0xcb, 0x3d, - 0xb7, 0x34, 0x70, 0x80, 0x29, 0x19, 0x78, 0x11, 0x82, 0x70, 0x3d, 0xf6, 0x85, 0x08, 0x1a, 0x8f, - 0x66, 0xd6, 0x57, 0x44, 0x17, 0xbf, 0x23, 0x68, 0x3a, 0x12, 0x00, 0xac, 0x22, 0x18, 0x5c, 0xb9, - 0x6b, 0x2a, 0x83, 0xfe, 0x04, 0x00, 0x35, 0x14, 0xaa, 0x05, 0x84, 0xa0, 0x00, 0x51, 0x4c, 0x10, - 0x84, 0x46, 0xc7, 0x56, 0x3f, 0xa0, 0x29, 0x2c, 0x0f, 0x0e, 0x47, 0xc3, 0x74, 0x31, 0xbc, 0x86, - 0x43, 0xb5, 0x60, 0x6f, 0xb2, 0x2d, 0x0c, 0xf0, 0xe5, 0xd8, 0xcb, 0x03, 0x2c, 0xcf, 0x00, 0x3c, - 0x41, 0xe7, 0x70, 0xe9, 0x2d, 0x65, 0xaf, 0xfc, 0x40, 0x64, 0x29, 0xe2, 0x1f, 0x61, 0xcd, 0x0b, - 0x1c, 0x4a, 0x7c, 0x2b, 0xd1, 0x80, 0x68, 0x0e, 0xc4, 0xa7, 0x07, 0x0a, 0x45, 0x93, 0xb2, 0x58, - 0x6b, 0xdc, 0x40, 0x91, 0xb7, 0x40, 0x7c, 0xab, 0x21, 0x97, 0xb7, 0xad, 0xc5, 0x1a, 0xa8, 0xf3, - 0xed, 0x26, 0x32, 0x19, 0xbb, 0xb4, 0x99, 0x52, 0xc3, 0x2c, 0x31, 0x16, 0x97, 0xa5, 0x6e, 0xff, - 0x84, 0x63, 0x0a, 0x56, 0x74, 0x3d, 0x64, 0x58, 0xe4, 0x46, 0xea, 0x70, 0xe8, 0x13, 0xbb, 0xd2, - 0x62, 0xc3, 0xe7, 0xab, 0x14, 0x38, 0x3a, 0x5e, 0x41, 0x64, 0x96, 0x47, 0x82, 0x00, 0x52, 0x37, - 0xf5, 0x26, 0x8f, 0x56, 0x98, 0xa7, 0xae, 0x60, 0x6a, 0xd0, 0xcd, 0x68, 0x00, 0x56, 0x8e, 0x01, - 0x80, 0x2d, 0x66, 0xc5, 0xf6, 0x02, 0x3f, 0x2f, 0x0f, 0x87, 0x91, 0x46, 0x64, 0x48, 0xe6, 0x3a, - 0x05, 0xae, 0x1b, 0xae, 0xd9, 0x5f, 0xf6, 0x55, 0xe9, 0xf7, 0xf1, 0xdc, 0x16, 0x45, 0xdb, 0x3b, - 0x27, 0xfd, 0x35, 0x57, 0x42, 0x6a, 0xf7, 0xc2, 0x46, 0xbc, 0xbd, 0x6b, 0xf0, 0xa5, 0xde, 0xa1, - 0x5e, 0x7f, 0x97, 0xf6, 0xee, 0x2b, 0x4e, 0x1e, 0x2b, 0x74, 0xee, 0xf1, 0x0b, 0x1e, 0x12, 0x2a, - 0x5a, 0xe7, 0xff, 0x18, 0x45, 0x53, 0x40, 0xb3, 0x7d, 0xea, 0x93, 0x6b, 0x5f, 0x82, 0xd1, 0xae, - 0xd3, 0xbb, 0xde, 0xff, 0x0a, 0x0c, 0x77, 0x4d, 0xdb, 0x85, 0x5a, 0x56, 0x5f, 0xbe, 0xed, 0x36, - 0xff, 0x05, 0x71, 0x46, 0xee, 0x7e, 0x6d, 0xad, 0x9f, 0xaa, 0xa7, 0x1c, 0xf8, 0x26, 0xb1, 0x29, - 0x94, 0x33, 0xd7, 0xb7, 0x67, 0xc2, 0x23, 0x73, 0xf5, 0xda, 0x4e, 0x15, 0xd2, 0xa8, 0xe3, 0xe1, - 0x41, 0x53, 0xd5, 0x58, 0xa0, 0x91, 0x3e, 0x55, 0x56, 0xcd, 0x56, 0x2a, 0x43, 0x4e, 0xec, 0xf8, - 0xdc, 0xa8, 0x9b, 0xcd, 0xa9, 0x87, 0x35, 0x55, 0x7e, 0x2b, 0x0b, 0x75, 0xd8, 0x52, 0xb6, 0xde, - 0xae, 0x9a, 0xdd, 0xdb, 0xa6, 0x87, 0xe3, 0x4a, 0x7e, 0x53, 0x17, 0xa5, 0xcd, 0xbb, 0x7a, 0x52, - 0x39, 0x18, 0xbd, 0xb7, 0x6b, 0x95, 0x9c, 0x28, 0xa6, 0x2f, 0x2d, 0x7e, 0xa9, 0xfe, 0x76, 0x09, - 0xeb, 0xe0, 0xa4, 0xaa, 0x21, 0xd7, 0xe9, 0xb7, 0xc2, 0x30, 0x60, 0x6b, 0x84, 0x72, 0x53, 0xa3, - 0x97, 0xc1, 0x51, 0x83, 0x2a, 0x96, 0xfc, 0x61, 0xc1, 0xf1, 0x70, 0x57, 0x38, 0x12, 0xad, 0x6e, - 0xc6, 0x2e, 0x34, 0xa2, 0xe0, 0xe9, 0xa0, 0x4e, 0xeb, 0x9b, 0xd9, 0xcf, 0x85, 0x09, 0x48, 0xd5, - 0xa9, 0xea, 0xc4, 0x86, 0x89, 0x11, 0xc3, 0x74, 0x45, 0x33, 0x44, 0xec, 0x16, 0x7f, 0x8a, 0x2a, - 0x49, 0x29, 0x7b, 0xf7, 0x48, 0x55, 0x58, 0x43, 0x74, 0xae, 0x95, 0xcc, 0xf1, 0x44, 0xab, 0x1a, - 0x66, 0xa3, 0x47, 0x13, 0x1f, 0x1b, 0x46, 0xe5, 0xb4, 0x6d, 0x0a, 0xde, 0x70, 0xed, 0x24, 0xa2, - 0x70, 0xfa, 0x43, 0xaf, 0xbc, 0x54, 0x35, 0x66, 0xaa, 0xd4, 0x59, 0x6d, 0x75, 0x4c, 0xd4, 0xeb, - 0x0f, 0xd4, 0xa4, 0x3f, 0x3c, 0x71, 0xa7, 0x1f, 0xb3, 0x1f, 0xe9, 0xf0, 0xa0, 0x95, 0xe3, 0x06, - 0x09, 0xa7, 0xd7, 0x1b, 0x0a, 0xa4, 0x72, 0xb6, 0x2b, 0x62, 0x5a, 0x9a, 0xd5, 0xf6, 0x19, 0x6f, - 0x4a, 0xbc, 0x29, 0xa3, 0xee, 0x89, 0x11, 0xdb, 0x46, 0x3d, 0x53, 0xce, 0xed, 0x1a, 0x38, 0xdb, - 0x8a, 0xa1, 0xa5, 0xaf, 0x82, 0x22, 0x47, 0xab, 0xac, 0xaa, 0x39, 0xf0, 0xa5, 0xc4, 0x8f, 0xfa, - 0xa7, 0x9f, 0x47, 0x44, 0x9a, 0x15, 0x3e, 0xd0, 0x22, 0x66, 0x06, 0xe9, 0x95, 0x67, 0xcd, 0xaa, - 0xab, 0x89, 0x8d, 0x8c, 0x62, 0x35, 0x68, 0x3e, 0xa0, 0x7c, 0xd3, 0x0a, 0xd0, 0x35, 0x82, 0x03, - 0xbd, 0x66, 0x26, 0xab, 0x28, 0x48, 0x98, 0xa6, 0xb7, 0xcb, 0xf1, 0x0b, 0x14, 0x58, 0x98, 0x52, - 0x28, 0xdc, 0xf6, 0x1b, 0xa1, 0xbb, 0xc2, 0x93, 0x8a, 0x62, 0x89, 0xdd, 0xa6, 0x87, 0xdc, 0x48, - 0x90, 0xa1, 0xab, 0xca, 0x86, 0xc1, 0x26, 0x51, 0xe5, 0xc1, 0x36, 0xd9, 0x26, 0x55, 0x1b, 0x4e, - 0x9d, 0x78, 0x52, 0xf8, 0xda, 0x5b, 0x5b, 0xe5, 0xbc, 0x60, 0xef, 0x50, 0x48, 0xf3, 0x16, 0xa2, - 0xf6, 0xa6, 0x2b, 0xd1, 0x52, 0x38, 0xfc, 0x44, 0x01, 0x48, 0x37, 0x06, 0xd9, 0x53, 0x79, 0xd6, - 0xa2, 0x22, 0x22, 0x46, 0x54, 0x68, 0x4c, 0x8a, 0x3b, 0x92, 0x3e, 0x36, 0xc3, 0x1a, 0x51, 0x9d, - 0x91, 0x06, 0x0e, 0x82, 0x0c, 0x68, 0xfa, 0x44, 0x35, 0x95, 0x34, 0x57, 0xe8, 0xf6, 0x36, 0xca, - 0x2f, 0xb3, 0x92, 0x74, 0xfc, 0x36, 0x70, 0xe2, 0xb7, 0xbe, 0x28, 0x79, 0x70, 0x6a, 0xba, 0xbc, - 0x46, 0x15, 0x13, 0x0e, 0x64, 0x7c, 0x06, 0x4c, 0x0c, 0x44, 0xa2, 0xf0, 0x35, 0x57, 0xbf, 0x83, - 0x11, 0xa4, 0x07, 0x6c, 0x35, 0x5a, 0xc0, 0xa2, 0x03, 0x70, 0x02, 0x0b, 0x8f, 0x41, 0x3a, 0xd4, - 0x6a, 0xe4, 0x6e, 0xd2, 0xb9, 0x46, 0xc0, 0x2e, 0xe2, 0x93, 0x2f, 0xcd, 0x2f, 0x4a, 0xbc, 0xdb, - 0xb9, 0x86, 0x48, 0xbd, 0x68, 0x40, 0x3a, 0x76, 0x1d, 0xa5, 0x7e, 0x0b, 0xf8, 0x90, 0x88, 0xc8, - 0xd4, 0x67, 0x51, 0xf0, 0xe0, 0x71, 0x44, 0x79, 0xe2, 0xb6, 0x95, 0x30, 0x11, 0x9a, 0xc8, 0x8c, - 0xe8, 0x1b, 0xc2, 0xad, 0x0e, 0x79, 0xea, 0x40, 0x20, 0x1d, 0x03, 0x28, 0xd4, 0xf6, 0x10, 0x10, - 0x14, 0x97, 0x43, 0x4a, 0x7b, 0xea, 0x26, 0x35, 0x1b, 0x16, 0x4f, 0x2a, 0x81, 0xea, 0x06, 0x9c, - 0x19, 0x88, 0x11, 0xc0, 0xd4, 0x2e, 0x4a, 0x02, 0x7f, 0x26, 0x60, 0xc4, 0xa1, 0x8b, 0x93, 0x45, - 0x30, 0x40, 0xa8, 0x9e, 0x02, 0xa7, 0x0f, 0x80, 0xd3, 0x0a, 0xd3, 0x30, 0x99, 0x5c, 0x9c, 0x22, - 0xa8, 0xd4, 0x03, 0x01, 0x02, 0x4f, 0xf2, 0x39, 0xc4, 0x86, 0x42, 0x9e, 0x21, 0xbd, 0x70, 0xbf, - 0x54, 0xf8, 0x3c, 0x9b, 0x51, 0xdc, 0x39, 0xc5, 0x6a, 0x59, 0x7d, 0x38, 0xad, 0x59, 0x15, 0xa7, - 0x42, 0x60, 0xf0, 0x1e, 0x58, 0x32, 0xc0, 0x62, 0x83, 0x97, 0x08, 0x89, 0x19, 0x17, 0x1f, 0x7a, - 0xd9, 0xce, 0xe1, 0x28, 0x05, 0x64, 0x98, 0xd5, 0x17, 0x1f, 0xa4, 0xac, 0x8a, 0x18, 0x35, 0x26, - 0x58, 0x98, 0x50, 0xa4, 0x80, 0x01, 0x48, 0x38, 0x0f, 0x25, 0x02, 0xa6, 0x11, 0x25, 0xb4, 0x7e, - 0x8d, 0x22, 0x5e, 0x77, 0x09, 0x68, 0x48, 0xeb, 0x65, 0xfd, 0xe2, 0xf0, 0xc0, 0x5a, 0x1c, 0x70, - 0xd6, 0xbb, 0x66, 0x1b, 0xa3, 0x39, 0xbb, 0xc8, 0xc4, 0x37, 0x0e, 0xf2, 0xa0, 0x08, 0xe8, 0x31, - 0x08, 0xa8, 0x1a, 0xa9, 0x16, 0x4e, 0x7b, 0xf1, 0xfc, 0x29, 0x51, 0x7a, 0xd3, 0xa7, 0x17, 0xeb, - 0x56, 0xae, 0x0a, 0xb7, 0xbd, 0xdd, 0xc5, 0x67, 0xed, 0x55, 0x5f, 0x04, 0xe6, 0xdc, 0x56, 0x9d, - 0x3e, 0x97, 0xe2, 0x44, 0x9d, 0x8d, 0xb6, 0x25, 0xfb, 0xfc, 0x25, 0xac, 0x98, 0xd6, 0x97, 0x90, - 0xca, 0xa2, 0x78, 0xec, 0xf1, 0x7c, 0xcc, 0x5e, 0xc7, 0xc4, 0xc2, 0x82, 0xd6, 0xef, 0x77, 0x77, - 0xbf, 0x77, 0x63, 0xe2, 0xe9, 0xbf, 0x77, 0x7f, 0x08, 0x91, 0x56, 0xd0, 0xdb, 0xe2, 0xba, 0x82, - 0x2d, 0xb2, 0x6f, 0xe1, 0x03, 0x6a, 0x7f, 0xf7, 0x77, 0xbd, 0x0f, 0xc1, 0x3d, 0x96, 0x2f, 0x7b, - 0xdc, 0x78, 0x50, 0x4d, 0x73, 0x57, 0xe9, 0x9f, 0xd6, 0xb9, 0x35, 0x3f, 0x13, 0xe0, 0xb2, 0x7f, - 0xaa, 0x56, 0x6d, 0xe9, 0xab, 0x3e, 0x14, 0xc5, 0xd2, 0x26, 0x76, 0x1d, 0x62, 0x3a, 0xb4, 0xda, - 0x93, 0x25, 0xb4, 0xa1, 0x89, 0x85, 0x3d, 0x48, 0x87, 0x58, 0x1b, 0xa5, 0x7a, 0x6b, 0xd3, 0x09, - 0x2b, 0xc2, 0x34, 0x2a, 0xe7, 0x01, 0xb3, 0x55, 0xc4, 0x50, 0x50, 0x16, 0x76, 0x84, 0xa9, 0xa1, - 0xe3, 0xfe, 0x61, 0x88, 0x8e, 0xe6, 0xbb, 0xed, 0x32, 0xce, 0xc7, 0x57, 0xd2, 0x44, 0x3c, 0x45, - 0x31, 0x6a, 0xd7, 0x85, 0x0b, 0x59, 0x20, 0xed, 0xab, 0x79, 0x7c, 0x25, 0xaa, 0x94, 0x49, 0x12, - 0x89, 0x26, 0xd7, 0x3c, 0x3c, 0xbe, 0x0a, 0xc9, 0xd6, 0x5b, 0xea, 0x4c, 0x27, 0x35, 0x35, 0x7f, - 0x82, 0xb3, 0x17, 0x76, 0xb5, 0x17, 0x55, 0xe1, 0x1f, 0x0f, 0x42, 0x92, 0x80, 0xbc, 0xef, 0x6a, - 0xcf, 0xfa, 0x51, 0xef, 0x16, 0xde, 0x54, 0xe0, 0x40, 0x3f, 0xd4, 0x9f, 0x6f, 0xc1, 0x59, 0x16, - 0x6c, 0x5d, 0x66, 0xf1, 0xc5, 0xba, 0xbc, 0xcb, 0xc1, 0x19, 0xe7, 0x26, 0xdd, 0xbe, 0x2f, 0x55, - 0x36, 0x2e, 0x57, 0x11, 0x04, 0x13, 0x21, 0x2a, 0x95, 0x12, 0x42, 0x50, 0xcd, 0x0d, 0x8c, 0x72, - 0x2b, 0x5e, 0xd8, 0x9b, 0x1f, 0x12, 0x36, 0xa7, 0x0f, 0x53, 0xbf, 0xad, 0x96, 0xa1, 0xac, 0xd8, - 0xab, 0xa1, 0x42, 0x54, 0xa8, 0x8f, 0x0b, 0x8c, 0xd2, 0x63, 0x8e, 0x3c, 0x5e, 0xbf, 0x1a, 0x42, - 0x4f, 0x29, 0xe6, 0x66, 0xb8, 0xe4, 0xe4, 0xca, 0xf5, 0x9d, 0x4b, 0x91, 0x39, 0x8a, 0xf5, 0xb9, - 0xf8, 0xf1, 0x8f, 0xe1, 0xe2, 0xdc, 0xaf, 0x45, 0x9b, 0x61, 0xec, 0xd7, 0x3e, 0x5d, 0x86, 0x95, - 0xbc, 0x0d, 0xcb, 0x65, 0xff, 0xfc, 0x6d, 0xe2, 0x35, 0x01, 0x99, 0x78, 0xce, 0x1c, 0x42, 0xf9, - 0x41, 0x0c, 0x0e, 0xcd, 0xf5, 0xc8, 0xe9, 0x53, 0xa9, 0x3a, 0xe6, 0x66, 0xfa, 0xb2, 0x52, 0x5e, - 0x7f, 0xf0, 0xb6, 0x88, 0x6a, 0xa0, 0xac, 0xd8, 0x82, 0xb4, 0x64, 0xc7, 0x9e, 0xba, 0xe7, 0xb1, - 0x5d, 0x9f, 0x4e, 0x6c, 0xcd, 0xbe, 0xdc, 0xa8, 0x80, 0x62, 0x34, 0x82, 0x83, 0x15, 0x80, 0x7b, - 0x72, 0xa0, 0x1e, 0xfa, 0x5c, 0xcc, 0xb2, 0xea, 0x41, 0x59, 0x51, 0x05, 0xe0, 0x9e, 0x09, 0x8a, - 0x97, 0xfa, 0xaa, 0x03, 0x88, 0x84, 0xfe, 0x41, 0xcc, 0x17, 0xa0, 0xff, 0x8b, 0x9b, 0xc0, 0xec, - 0x77, 0xc2, 0xab, 0x05, 0x81, 0x6d, 0xca, 0xe7, 0xaf, 0xe0, 0x80, 0x22, 0x14, 0xb9, 0x0a, 0x94, - 0x45, 0x55, 0xb6, 0x38, 0x94, 0x7e, 0xf2, 0xa8, 0xd9, 0xbd, 0xda, 0x8c, 0x73, 0x41, 0xa2, 0x28, - 0x6b, 0xd6, 0xe4, 0x03, 0x10, 0x1d, 0xec, 0x83, 0xda, 0xc3, 0x80, 0x39, 0x07, 0x14, 0xd4, 0x98, - 0x03, 0x85, 0x0b, 0xdc, 0x32, 0x24, 0x6f, 0x7c, 0x2d, 0x90, 0x5d, 0x8e, 0x72, 0x6b, 0xcd, 0xc6, - 0xe0, 0x1b, 0x8c, 0x66, 0x65, 0x21, 0x3f, 0x64, 0xc0, 0x00, 0x40, 0x08, 0xdd, 0xc0, 0x8f, 0xa4, - 0x82, 0x84, 0xe8, 0x2e, 0xc8, 0x66, 0xab, 0x85, 0xcf, 0xa7, 0x48, 0xfd, 0x6f, 0xfd, 0x1c, 0x04, - 0xaa, 0x09, 0xe4, 0x55, 0xd5, 0xda, 0xbc, 0x96, 0x02, 0xfe, 0xf2, 0xff, 0x0a, 0x5b, 0x85, 0x00, - 0x10, 0x0c, 0x1f, 0xa2, 0x05, 0x80, 0xb4, 0x78, 0xe6, 0xea, 0x74, 0xa9, 0x65, 0x00, 0x3c, 0x77, - 0xa1, 0xb2, 0x63, 0x4b, 0x3e, 0xd6, 0x26, 0x80, 0x79, 0x6b, 0xb4, 0xe8, 0x1f, 0xc4, 0x0e, 0x12, - 0xaf, 0x94, 0x83, 0x90, 0xb0, 0xac, 0x2f, 0x70, 0xe6, 0x73, 0xb6, 0x93, 0x80, 0x15, 0x66, 0x51, - 0x78, 0xa8, 0x07, 0x38, 0x80, 0x50, 0x14, 0x94, 0xc8, 0x4f, 0x03, 0xcf, 0x60, 0x42, 0x61, 0xe1, - 0xff, 0x2f, 0x8a, 0xd1, 0x5c, 0x09, 0x6d, 0x81, 0xeb, 0x80, 0x00, 0x40, 0x6b, 0xa1, 0x28, 0x54, - 0xca, 0x73, 0xc8, 0xc6, 0xa1, 0xcc, 0x0d, 0x46, 0x2a, 0x71, 0x22, 0x42, 0x9a, 0xd5, 0xcb, 0x80, - 0x29, 0x19, 0xc4, 0x8d, 0x20, 0x86, 0x80, 0x47, 0x0c, 0x32, 0x2d, 0xf4, 0xd9, 0xdf, 0x81, 0xe9, - 0x1c, 0x36, 0x3d, 0x6a, 0xce, 0x7b, 0x79, 0x6d, 0xf5, 0x45, 0x98, 0xc9, 0x85, 0x4f, 0x00, 0x70, - 0x7c, 0x29, 0x31, 0x85, 0x0c, 0xd4, 0x33, 0x86, 0x08, 0x67, 0x0d, 0x04, 0xef, 0x09, 0xf1, 0x27, - 0x24, 0x21, 0xbe, 0x65, 0xd2, 0xc5, 0xe8, 0xd8, 0x56, 0x15, 0x56, 0xe3, 0x95, 0x24, 0x58, 0x13, - 0x82, 0xaf, 0xb0, 0xae, 0x0a, 0xa4, 0xc5, 0x51, 0x94, 0x0b, 0x86, 0x94, 0x21, 0x8e, 0xc1, 0x5e, - 0x19, 0x08, 0x8d, 0xae, 0xa2, 0x94, 0x0b, 0xb4, 0x32, 0x61, 0x69, 0x3f, 0x85, 0x46, 0x99, 0x28, - 0x78, 0x3b, 0xa5, 0xf3, 0x0e, 0xa1, 0xbe, 0x2b, 0x41, 0x54, 0x9c, 0x3e, 0x84, 0xf3, 0xd7, 0x5a, - 0x48, 0x8d, 0x44, 0x9a, 0xff, 0xe3, 0xf8, 0x22, 0x8b, 0xae, 0xdf, 0x04, 0xc5, 0xc9, 0xe4, 0xe9, - 0xec, 0xf8, 0xeb, 0xdd, 0xb5, 0xad, 0xdf, 0xf1, 0x57, 0x7d, 0xef, 0x5c, 0xc7, 0x7d, 0xfc, 0x16, - 0x08, 0x2c, 0x2a, 0xb3, 0x79, 0xbb, 0x14, 0x6c, 0x50, 0xbd, 0x5c, 0x22, 0x2e, 0xee, 0xe2, 0xb7, - 0x7d, 0xc7, 0x71, 0xf8, 0x26, 0x96, 0x9f, 0xbb, 0xcb, 0xe3, 0xb7, 0x77, 0x47, 0x92, 0x8e, 0xe1, - 0x65, 0xad, 0x5e, 0x0b, 0x08, 0xe1, 0x23, 0x3f, 0xb2, 0xf8, 0xaf, 0x5b, 0xbb, 0xbf, 0xc7, 0xd3, - 0xae, 0x5c, 0x7d, 0x75, 0x5a, 0x9b, 0x3c, 0x14, 0xd6, 0xb6, 0xab, 0xad, 0x5f, 0xe3, 0xec, 0x6c, - 0x96, 0xce, 0x4e, 0xda, 0xab, 0x6b, 0xe2, 0x6d, 0xaa, 0xd0, 0xa9, 0xaf, 0x85, 0x29, 0x2f, 0x3a, - 0xde, 0x9d, 0x52, 0x6d, 0x3b, 0xc4, 0x4d, 0x7d, 0x7c, 0x4e, 0xaa, 0xa2, 0x38, 0xcc, 0xfe, 0x3a, - 0x9f, 0x74, 0xaf, 0xad, 0x71, 0x11, 0x57, 0x2a, 0x27, 0x8a, 0xd2, 0xfc, 0x16, 0x66, 0x9d, 0x26, - 0x53, 0xe5, 0x9b, 0x93, 0x34, 0xe3, 0xe1, 0x41, 0x06, 0x85, 0x1e, 0x88, 0xb5, 0x81, 0x2a, 0xb9, - 0x11, 0x98, 0xd8, 0xec, 0x66, 0xb2, 0x7a, 0x6d, 0xf0, 0x55, 0x35, 0x59, 0xad, 0xde, 0x2e, 0xb2, - 0x6b, 0x69, 0x0c, 0xb1, 0xaf, 0x8d, 0xae, 0xd0, 0xd6, 0x96, 0xa5, 0x47, 0x50, 0xe0, 0xdb, 0x8a, - 0xdf, 0x21, 0xc6, 0xb6, 0xc3, 0x7a, 0x5b, 0x4c, 0x8b, 0x42, 0xb8, 0xb6, 0xad, 0xbb, 0x6e, 0xbe, - 0x14, 0x25, 0x1c, 0xd8, 0xa9, 0x2d, 0x1a, 0x8c, 0xa7, 0x48, 0xd9, 0x0d, 0xc4, 0x19, 0x4a, 0x38, - 0x81, 0x01, 0x43, 0x97, 0xc9, 0x32, 0x21, 0x8f, 0x7a, 0x9d, 0xf2, 0x87, 0x1c, 0xb0, 0x82, 0xb6, - 0x73, 0x50, 0x56, 0x5f, 0x1e, 0x74, 0x64, 0xa2, 0xf1, 0x23, 0x0b, 0x4b, 0xaf, 0xb3, 0x17, 0x25, - 0xbb, 0xc4, 0x82, 0xab, 0x79, 0xfc, 0x57, 0x6c, 0xed, 0x33, 0x53, 0x38, 0x0c, 0xe9, 0x62, 0xbc, - 0xab, 0x83, 0x0b, 0x88, 0x10, 0x32, 0x90, 0x0d, 0x70, 0x69, 0xc6, 0x9d, 0xf4, 0x20, 0x5b, 0x87, - 0x15, 0x50, 0x7a, 0xa0, 0x1c, 0xdd, 0x49, 0xa0, 0x62, 0x2f, 0x6b, 0x80, 0x56, 0x36, 0xed, 0xc8, - 0x57, 0x96, 0xc0, 0xa0, 0xce, 0x40, 0xf0, 0x07, 0x93, 0x55, 0xd1, 0xa5, 0x42, 0xd0, 0x77, 0xba, - 0x06, 0x98, 0x60, 0x18, 0x0c, 0xb3, 0x11, 0x91, 0x2e, 0x9e, 0xcc, 0x1e, 0x2e, 0x4a, 0xe4, 0x4a, - 0x07, 0x03, 0xa1, 0x63, 0xd8, 0x2d, 0x96, 0x0c, 0x43, 0xc9, 0xf8, 0x0f, 0xd2, 0x92, 0xaa, 0x3b, - 0xfc, 0x22, 0x08, 0x42, 0x93, 0xc7, 0xde, 0xe7, 0xbe, 0x3b, 0x06, 0x75, 0x6e, 0x3e, 0x05, 0xbb, - 0xdb, 0x2d, 0xf8, 0x64, 0x32, 0x14, 0x9c, 0x34, 0x2d, 0xa3, 0x04, 0x6f, 0xa1, 0xc3, 0xcb, 0x6f, - 0xc3, 0x96, 0xbb, 0x0b, 0x50, 0xa6, 0x28, 0x65, 0x5b, 0xc8, 0xc0, 0x33, 0xa2, 0xc0, 0xca, 0xd2, - 0xc7, 0xe2, 0x42, 0x23, 0x62, 0x80, 0x21, 0x90, 0x80, 0xb8, 0x00, 0x82, 0x06, 0xa8, 0x85, 0xba, - 0x90, 0x41, 0x92, 0xe5, 0x30, 0x05, 0x06, 0xde, 0x6d, 0x34, 0x2d, 0x80, 0x00, 0x80, 0x15, 0x22, - 0x00, 0x58, 0x22, 0x99, 0x8e, 0x96, 0x83, 0x8d, 0xa4, 0xb6, 0x05, 0xd9, 0x6c, 0x6a, 0xe6, 0x56, - 0x27, 0x80, 0x49, 0xf3, 0xa0, 0xa2, 0xe1, 0x20, 0x70, 0xb2, 0xc0, 0x00, 0x40, 0x13, 0x09, 0x63, - 0x00, 0x97, 0x07, 0x81, 0x43, 0x06, 0x51, 0xf6, 0xd3, 0x16, 0xf1, 0x21, 0x90, 0xa4, 0x98, 0x0a, - 0x96, 0x19, 0x30, 0x00, 0x78, 0xeb, 0x06, 0xb1, 0xa0, 0xa2, 0x03, 0xf7, 0x7c, 0x80, 0x60, 0x0b, - 0x61, 0x09, 0x58, 0x95, 0x95, 0x3c, 0x4d, 0x13, 0xdb, 0xc1, 0x6b, 0x24, 0x4c, 0xb8, 0x73, 0xdb, - 0x03, 0x84, 0x17, 0xa6, 0x80, 0x96, 0xd3, 0xfb, 0x38, 0x90, 0xc8, 0xc8, 0xe2, 0x0f, 0x06, 0x8e, - 0x18, 0xcf, 0x96, 0x68, 0xf8, 0x74, 0xc5, 0xfd, 0x61, 0xfc, 0x78, 0xa4, 0x2b, 0x64, 0x23, 0xe4, - 0x9e, 0x0e, 0x1f, 0xa3, 0x2a, 0x73, 0xe6, 0x83, 0xe2, 0x46, 0xd9, 0x2a, 0x45, 0x83, 0x1b, 0x5d, - 0xb6, 0xad, 0x95, 0x56, 0x9a, 0x69, 0x22, 0x0a, 0xb8, 0xa8, 0x75, 0x66, 0x8c, 0x57, 0xe1, 0x0e, - 0x69, 0x98, 0xef, 0x9a, 0xea, 0xff, 0x45, 0x7f, 0x85, 0x08, 0xa5, 0xfc, 0xa6, 0xb1, 0x5b, 0xbd, - 0xd5, 0xdd, 0x8f, 0x89, 0x3d, 0xcc, 0xc7, 0x47, 0x6c, 0xd9, 0xe1, 0x12, 0xa9, 0xf1, 0x6e, 0xcf, - 0x94, 0x95, 0x75, 0x5f, 0x62, 0x0a, 0xc5, 0xf5, 0xc5, 0x77, 0x6f, 0x3e, 0x7c, 0x22, 0x4a, 0xd6, - 0x6c, 0x6d, 0x8a, 0x57, 0x1f, 0xc2, 0x82, 0xe6, 0x86, 0x30, 0x99, 0x98, 0xcb, 0xb5, 0x3a, 0xee, - 0xf9, 0x3a, 0xf7, 0xc7, 0x52, 0x45, 0x8d, 0x28, 0xe2, 0xf9, 0xaf, 0x26, 0xc2, 0xff, 0x05, 0x76, - 0x8f, 0xb2, 0x5f, 0xa4, 0x42, 0x26, 0x5d, 0x25, 0x1e, 0xdf, 0xe3, 0x2d, 0xa9, 0xbe, 0xd3, 0x5c, - 0x5b, 0x4f, 0x6b, 0xe2, 0x75, 0x3e, 0x47, 0x1d, 0x41, 0xfc, 0xd5, 0xdf, 0xc2, 0x1d, 0x57, 0x2d, - 0xb2, 0xd2, 0x5f, 0x09, 0xc5, 0xd6, 0x6e, 0xab, 0xf8, 0xc9, 0x20, 0xb4, 0xb4, 0x92, 0xae, 0x6e, - 0xa8, 0x7b, 0x5e, 0x0a, 0x37, 0x7b, 0xe9, 0x37, 0xc1, 0x65, 0xe3, 0x98, 0xe1, 0x31, 0x22, 0xf3, - 0x72, 0x92, 0xa6, 0xa5, 0xf9, 0x9a, 0x5f, 0x84, 0xc5, 0x35, 0x47, 0x5a, 0x19, 0x7b, 0xa5, 0xf0, - 0xa5, 0x1a, 0x87, 0x52, 0xde, 0xf8, 0x3b, 0x29, 0x8e, 0x02, 0x13, 0x3f, 0x43, 0x60, 0x82, 0x6e, - 0xd5, 0x0e, 0xa2, 0xb4, 0x78, 0xcf, 0x85, 0x3a, 0x6e, 0x29, 0x41, 0x9d, 0xcb, 0xa9, 0xbd, 0x9c, - 0x20, 0x8d, 0xaa, 0x84, 0x20, 0xd1, 0xf0, 0x1a, 0x7d, 0xf1, 0x47, 0x68, 0xf9, 0xee, 0xfe, 0x4e, - 0xa6, 0xfe, 0x0a, 0xc8, 0xd3, 0x4e, 0xcd, 0xb6, 0x74, 0x83, 0x5e, 0x74, 0x62, 0xa7, 0x87, 0xcb, - 0x65, 0x1c, 0x62, 0xd7, 0xf1, 0x20, 0xb0, 0x86, 0x63, 0x78, 0x3c, 0xc9, 0xa6, 0x45, 0x9d, 0x98, - 0x65, 0x5a, 0x5d, 0x99, 0x7a, 0x9e, 0x58, 0x2c, 0xca, 0x0c, 0x35, 0x16, 0x00, 0x10, 0x06, 0x3a, - 0x22, 0x6b, 0x47, 0x26, 0xfe, 0x3c, 0xd1, 0xb5, 0x38, 0xd0, 0xf7, 0x9e, 0x3c, 0x94, 0xe0, 0xf7, - 0x9f, 0xf5, 0xbf, 0xcf, 0xe3, 0xf9, 0x13, 0x0c, 0xa8, 0x01, 0x31, 0xfc, 0xc0, 0xc9, 0xdb, 0x84, - 0x6d, 0x9a, 0xd3, 0x55, 0x1e, 0xf8, 0xe4, 0xfc, 0x67, 0x3e, 0x0e, 0xdc, 0xbf, 0x1d, 0xbb, 0xf8, - 0xab, 0x2c, 0x5c, 0xfc, 0x22, 0x24, 0x29, 0x5f, 0x74, 0xe0, 0x70, 0x85, 0x66, 0x9a, 0x48, 0xbd, - 0x20, 0x75, 0xb0, 0x76, 0x7c, 0x4b, 0x06, 0x63, 0xc9, 0xc8, 0x2a, 0x68, 0x20, 0x19, 0x56, 0x3c, - 0x0d, 0x03, 0xfd, 0x4a, 0x2c, 0xc9, 0xb5, 0x32, 0xc7, 0x74, 0x77, 0x89, 0x08, 0x85, 0x04, 0x6d, - 0xb6, 0xd8, 0xb9, 0xe5, 0x81, 0xaa, 0x8e, 0x39, 0x5e, 0xdc, 0x9b, 0xe4, 0x8c, 0xf7, 0x70, 0xbb, - 0x84, 0x41, 0x08, 0x50, 0xd1, 0xe0, 0x65, 0x08, 0xe7, 0x1f, 0x73, 0x0a, 0xff, 0x13, 0x66, 0x43, - 0x52, 0x1a, 0x0c, 0x7d, 0xf4, 0x92, 0x6c, 0x8a, 0xb7, 0xb0, 0xfb, 0x5e, 0xf0, 0x88, 0xc3, 0xee, - 0x18, 0xe0, 0x65, 0xf9, 0xc6, 0x5c, 0xd7, 0x4e, 0x7b, 0xa7, 0x7a, 0x10, 0x07, 0xa2, 0xa8, 0x80, - 0x01, 0x98, 0x6c, 0x39, 0xc7, 0x72, 0xc0, 0xf6, 0xe7, 0x1c, 0xf1, 0x82, 0x4b, 0x0d, 0x66, 0x09, - 0xbc, 0xc5, 0x2b, 0x9d, 0x0b, 0x58, 0xb0, 0xdb, 0x66, 0x70, 0x60, 0x2f, 0x4a, 0x32, 0xce, 0x39, - 0x2e, 0xa1, 0x7b, 0x88, 0x78, 0x44, 0x28, 0x21, 0xed, 0xe6, 0xfc, 0xd5, 0x5d, 0x8a, 0xcc, 0x95, - 0x27, 0x02, 0xb9, 0xa4, 0x5d, 0xe3, 0xfc, 0x2d, 0x97, 0x00, 0xec, 0x4b, 0x8c, 0xa9, 0x48, 0x67, - 0x0c, 0x07, 0x43, 0x84, 0x5c, 0x45, 0x40, 0x61, 0x45, 0xe1, 0x0e, 0x08, 0x4e, 0x2e, 0xa4, 0x63, - 0x67, 0xc1, 0x1e, 0x5e, 0x4f, 0x6f, 0xe2, 0x07, 0xd3, 0xa7, 0x51, 0x1c, 0xa4, 0xd1, 0xf3, 0xf1, - 0x04, 0x27, 0xb1, 0x4e, 0x2b, 0xfd, 0x1d, 0x8e, 0x26, 0x11, 0x11, 0x74, 0xeb, 0xa4, 0xb4, 0xbe, - 0x2b, 0x6a, 0xa9, 0xb7, 0x26, 0x78, 0x92, 0x93, 0xdd, 0x96, 0x7b, 0xaa, 0x9f, 0x8a, 0x29, 0x7d, - 0xee, 0x8f, 0xf0, 0x44, 0x21, 0xe7, 0xed, 0x77, 0xc7, 0xcf, 0xe2, 0xeb, 0x9f, 0x6a, 0xbf, 0x08, - 0x4b, 0x9a, 0xe5, 0xe5, 0x76, 0x96, 0xbe, 0x0b, 0x86, 0xa4, 0x4c, 0x57, 0x62, 0xc5, 0xf2, 0xf1, - 0x21, 0x4e, 0xab, 0x50, 0x9f, 0x5a, 0xd4, 0x5d, 0x6a, 0xcf, 0xf7, 0xc4, 0x93, 0x35, 0x09, 0xdb, - 0x71, 0xfe, 0x3a, 0xd9, 0x76, 0x7b, 0xb6, 0xeb, 0x3d, 0x0e, 0x45, 0xe4, 0xbc, 0x13, 0xec, 0xcd, - 0xba, 0x59, 0xbf, 0x7c, 0x15, 0xfa, 0x99, 0x86, 0x5c, 0x9b, 0x55, 0x0e, 0xd7, 0xbe, 0x09, 0x4a, - 0x2e, 0x84, 0xb3, 0x7a, 0xfd, 0xf0, 0x94, 0x5c, 0x9f, 0xe3, 0x35, 0xf1, 0x20, 0xb2, 0xcc, 0xf6, - 0x6c, 0xea, 0x6f, 0x31, 0x49, 0xda, 0x73, 0xe1, 0x42, 0x66, 0xf6, 0xe6, 0xb5, 0x17, 0x9b, 0xcb, - 0x8b, 0xb9, 0xf0, 0x80, 0x81, 0xef, 0x4c, 0x88, 0x39, 0xcd, 0xcd, 0x61, 0xda, 0x8f, 0x73, 0x98, - 0xfc, 0x29, 0x8d, 0xd9, 0x6b, 0x54, 0xd5, 0x55, 0xaf, 0xf5, 0x54, 0xd7, 0x19, 0x7a, 0xb7, 0x97, - 0x9f, 0x0f, 0xd6, 0x4b, 0xd3, 0x10, 0x0c, 0x49, 0x84, 0xfc, 0x7f, 0xdd, 0xbe, 0xbe, 0x2a, 0xff, - 0x82, 0x93, 0xad, 0x6e, 0x93, 0xb4, 0x96, 0x92, 0x41, 0xf1, 0x37, 0xb4, 0xc0, 0xeb, 0x5f, 0x0a, - 0x5b, 0x1b, 0x72, 0x58, 0x6b, 0x8f, 0x29, 0x91, 0x06, 0xad, 0x44, 0xdc, 0x6a, 0xd9, 0x49, 0x37, - 0x59, 0x05, 0x24, 0x26, 0x92, 0x75, 0x58, 0xf8, 0x50, 0xdc, 0x7d, 0xb8, 0xe6, 0xb7, 0x0c, 0x3b, - 0xaa, 0xaf, 0xeb, 0x7c, 0x66, 0xfa, 0x8b, 0xf9, 0x14, 0x3f, 0x19, 0x93, 0x0c, 0x91, 0x6c, 0x90, - 0x1c, 0xde, 0x0f, 0x8c, 0xb0, 0xd3, 0x7b, 0x04, 0xec, 0x4f, 0x2c, 0xd3, 0x06, 0x54, 0xa2, 0xcf, - 0x10, 0x08, 0x42, 0x25, 0xba, 0xdc, 0xec, 0x51, 0x75, 0x6f, 0x0c, 0x82, 0x91, 0x99, 0x17, 0x51, - 0x74, 0xc2, 0xbc, 0xac, 0xc1, 0x4c, 0x5c, 0x53, 0x14, 0xf1, 0xc5, 0x76, 0x78, 0x50, 0x45, 0xe0, - 0x07, 0x8f, 0x07, 0x8e, 0x5f, 0x26, 0x00, 0x5d, 0x1e, 0xfe, 0x7a, 0x19, 0x08, 0xef, 0xa7, 0xf9, - 0x66, 0xec, 0xbc, 0xb8, 0xe7, 0x11, 0x19, 0x07, 0x7d, 0xa8, 0xe2, 0x41, 0x50, 0xa2, 0x1e, 0x70, - 0xf6, 0x69, 0x63, 0xdb, 0xcb, 0x87, 0x38, 0x5b, 0x15, 0x96, 0xc5, 0x78, 0x08, 0x00, 0x34, 0x05, - 0x0a, 0x0b, 0xa8, 0xd0, 0x44, 0x00, 0x1e, 0x01, 0x14, 0xf0, 0x06, 0x73, 0xa3, 0x00, 0xc0, 0x09, - 0x21, 0x04, 0x41, 0x14, 0xf0, 0x03, 0xc9, 0x40, 0x39, 0x0a, 0xa6, 0xd0, 0x40, 0x07, 0xa1, 0xa6, - 0x83, 0x9e, 0x52, 0xb0, 0x55, 0x1e, 0xa5, 0xca, 0x38, 0xc6, 0x78, 0x1c, 0x01, 0xc0, 0x50, 0xaa, - 0x18, 0x6a, 0x26, 0x2d, 0x24, 0xa0, 0xa0, 0x63, 0xba, 0x00, 0x04, 0x7c, 0x93, 0xe9, 0x28, 0xcb, - 0x88, 0xb0, 0x74, 0x61, 0x2c, 0x1f, 0x65, 0x60, 0x1a, 0xd4, 0x0f, 0xce, 0xf8, 0x94, 0x00, 0x09, - 0xa9, 0x46, 0x59, 0xc0, 0x00, 0xcb, 0x44, 0xe0, 0x7a, 0xe1, 0x1a, 0xf8, 0x81, 0x84, 0x25, 0x06, - 0xa2, 0xc6, 0x3b, 0xf3, 0xf8, 0x28, 0xce, 0x1a, 0x0e, 0xd9, 0x51, 0x33, 0xa9, 0xe0, 0x71, 0xe3, - 0xc7, 0xac, 0x2c, 0x0c, 0x2c, 0x55, 0x98, 0x1f, 0xcb, 0x86, 0x21, 0x48, 0xe9, 0xe0, 0xe8, 0xed, - 0xb9, 0x16, 0x6d, 0x4f, 0x1a, 0x1f, 0xd4, 0x63, 0xa5, 0x53, 0xf5, 0x97, 0x0f, 0x1c, 0x95, 0x4c, - 0x73, 0xe3, 0x64, 0xa0, 0xa9, 0xe0, 0xe1, 0x68, 0x1f, 0x7f, 0x06, 0xad, 0x75, 0x8b, 0x9e, 0x0e, - 0x25, 0x78, 0x7f, 0xc6, 0x50, 0x1a, 0x8e, 0x1c, 0xe9, 0x96, 0xff, 0x08, 0xb6, 0x9a, 0xfd, 0x51, - 0x13, 0x81, 0xb1, 0xe3, 0x38, 0x82, 0xad, 0x2a, 0xae, 0x4e, 0x4a, 0xaf, 0xe1, 0x32, 0xf5, 0x7b, - 0xdf, 0xca, 0x46, 0xd5, 0xb5, 0xf0, 0xa5, 0xdf, 0x5b, 0x69, 0xbb, 0xdd, 0x54, 0xfd, 0xdc, 0x5a, - 0x6f, 0x8b, 0x39, 0xb6, 0xea, 0xa7, 0xcd, 0xfc, 0x70, 0xa9, 0x7e, 0x4e, 0xd2, 0xf7, 0x56, 0x3f, - 0xe4, 0x17, 0x6d, 0xaf, 0x84, 0x05, 0x32, 0x9a, 0xf5, 0x6c, 0x5d, 0x7f, 0x30, 0xb7, 0x77, 0xf8, - 0x27, 0x10, 0x7c, 0x15, 0xdd, 0xc4, 0x3e, 0x9e, 0xbe, 0x3b, 0x88, 0x1c, 0xae, 0xdb, 0xfb, 0xd9, - 0xff, 0x8a, 0x25, 0x6a, 0xeb, 0x5f, 0x09, 0x04, 0x73, 0x75, 0x66, 0x7a, 0x52, 0xf0, 0x45, 0x6a, - 0xab, 0xef, 0x08, 0x0c, 0x26, 0x98, 0xda, 0xcb, 0xfe, 0xb5, 0x5a, 0xaf, 0xc2, 0x35, 0xda, 0x8a, - 0xf6, 0xcd, 0x85, 0xd6, 0xef, 0x82, 0x92, 0x29, 0x28, 0x93, 0x35, 0x78, 0x69, 0x4b, 0xb3, 0xfb, - 0xe3, 0xe4, 0x63, 0x83, 0x4d, 0x26, 0xe5, 0x12, 0x57, 0x30, 0xd7, 0xe0, 0xac, 0xe4, 0xb5, 0xa3, - 0x6a, 0x29, 0xb1, 0xa2, 0x67, 0xbf, 0xc4, 0x45, 0x7d, 0xd5, 0xa8, 0x9a, 0x4f, 0x19, 0x66, 0x65, - 0xe6, 0xc5, 0xeb, 0x49, 0x69, 0x2a, 0xfd, 0x58, 0xe2, 0x23, 0xc5, 0x48, 0xa6, 0x9b, 0xfc, 0xb6, - 0x51, 0x02, 0x8f, 0x5f, 0x85, 0x23, 0x27, 0x4d, 0x6a, 0x8a, 0x3b, 0xe3, 0xaa, 0x65, 0x1a, 0x1c, - 0x7d, 0xe7, 0xc2, 0x50, 0x95, 0xdc, 0xce, 0x3e, 0x34, 0xfc, 0x6b, 0xab, 0xb7, 0xbb, 0x06, 0x3a, - 0xd9, 0xa9, 0xcf, 0x5f, 0x74, 0xdf, 0xe0, 0xa3, 0xcb, 0x97, 0x7d, 0x7d, 0xd5, 0x7f, 0x36, 0xee, - 0xfe, 0x62, 0x56, 0xbe, 0x5a, 0xd2, 0x4b, 0x82, 0x01, 0xe6, 0x14, 0x31, 0x43, 0x8b, 0x42, 0x39, - 0x93, 0x00, 0x39, 0x07, 0xe6, 0xa3, 0x18, 0xf8, 0x87, 0x35, 0x8a, 0x16, 0x10, 0x8c, 0x28, 0xa6, - 0x23, 0x92, 0xcf, 0xda, 0x15, 0x92, 0x8a, 0xbb, 0x82, 0xc8, 0x19, 0x09, 0xb4, 0x7b, 0x96, 0x92, - 0x1a, 0x58, 0x7a, 0x40, 0x00, 0xa3, 0xed, 0x4c, 0x69, 0x33, 0x47, 0xff, 0xe5, 0x2f, 0x17, 0xc7, - 0x31, 0x39, 0xb8, 0xba, 0x97, 0x93, 0x97, 0xb3, 0x94, 0x5f, 0x1c, 0x0d, 0x4a, 0xce, 0xa6, 0xf5, - 0xef, 0x0e, 0x12, 0x00, 0xbc, 0xd0, 0x8e, 0x61, 0x17, 0xeb, 0x96, 0x73, 0xf7, 0xbd, 0x1d, 0xb7, - 0xc6, 0x2b, 0x11, 0xe2, 0x1e, 0x48, 0x70, 0xff, 0x65, 0x46, 0xc2, 0x42, 0x38, 0xdb, 0x52, 0x60, - 0x3f, 0x1c, 0x03, 0xfa, 0xe9, 0xff, 0x12, 0x18, 0x0a, 0x09, 0x2a, 0x6a, 0x94, 0xc6, 0xa2, 0x61, - 0xe7, 0x81, 0xe7, 0xac, 0x1a, 0xb1, 0xa3, 0xc5, 0x41, 0x63, 0x73, 0xcb, 0x22, 0x82, 0x7e, 0x0f, - 0xc0, 0x93, 0x29, 0x56, 0x3f, 0xe2, 0x52, 0x93, 0x05, 0x96, 0xb4, 0xea, 0x77, 0xa1, 0xc1, 0xf0, - 0x2e, 0x1e, 0x3a, 0x14, 0xf0, 0x24, 0x83, 0x90, 0xa4, 0xa8, 0x21, 0xd9, 0x3e, 0x00, 0xf3, 0x80, - 0x54, 0x16, 0x03, 0xeb, 0x75, 0x62, 0x19, 0x1a, 0xdb, 0x15, 0xd2, 0x9d, 0xd3, 0x6b, 0x11, 0xef, - 0xb5, 0x84, 0xce, 0x44, 0xa4, 0xd8, 0x42, 0x11, 0x83, 0x17, 0x83, 0x44, 0x49, 0x4f, 0x44, 0x11, - 0x9b, 0x54, 0x68, 0xac, 0x32, 0x0a, 0x42, 0x86, 0x3d, 0xe3, 0xfd, 0xb3, 0x81, 0x60, 0xe0, 0xc0, - 0xe0, 0xe3, 0x76, 0x2c, 0xb1, 0x0b, 0x9c, 0x09, 0x1c, 0xb0, 0x71, 0xe5, 0xac, 0x99, 0x26, 0xc8, - 0x98, 0x4e, 0x02, 0xa4, 0x35, 0x0c, 0x48, 0x64, 0x29, 0x0e, 0x85, 0x61, 0xf8, 0xa7, 0x2b, 0x23, - 0x39, 0xe3, 0xaf, 0xab, 0xf2, 0xfb, 0x86, 0xb0, 0x58, 0xc5, 0x18, 0xcb, 0x2e, 0x64, 0xc4, 0xdc, - 0xda, 0x3e, 0x9f, 0xb8, 0x90, 0x72, 0x33, 0x5d, 0x9c, 0xd2, 0xa8, 0x23, 0xf0, 0x50, 0x45, 0xbc, - 0x0e, 0x2f, 0xd8, 0x8b, 0x02, 0x8c, 0x75, 0x71, 0xb1, 0xed, 0xe8, 0x3b, 0x99, 0xac, 0x14, 0x80, - 0xd0, 0x65, 0xd3, 0x01, 0x2e, 0x84, 0xeb, 0xe3, 0x2e, 0xf7, 0xbe, 0xde, 0x7f, 0x7b, 0xfc, 0x14, - 0xc5, 0xc4, 0x1e, 0x6e, 0xce, 0xb2, 0x5e, 0xad, 0xb3, 0xd2, 0xeb, 0xe0, 0xa0, 0xcb, 0x5c, 0x5f, - 0xef, 0x82, 0x32, 0x93, 0xa6, 0xaa, 0xdf, 0x17, 0x6a, 0x24, 0xe1, 0xb2, 0xee, 0xfe, 0x3c, 0xc8, - 0x56, 0xee, 0xab, 0x5d, 0x57, 0xc2, 0x14, 0x9f, 0xba, 0x49, 0x6a, 0xbe, 0x28, 0x5b, 0x6a, 0xde, - 0xad, 0xaf, 0x8e, 0x29, 0x3a, 0xd3, 0x6d, 0x38, 0xb8, 0xd2, 0xf5, 0xfc, 0x59, 0x8a, 0x4a, 0x6c, - 0x4e, 0x95, 0xfc, 0x29, 0x89, 0xe4, 0xdf, 0x3f, 0x0b, 0x55, 0x1a, 0x9e, 0x89, 0xfa, 0xda, 0x65, - 0x77, 0x21, 0x62, 0x96, 0x94, 0x37, 0xaa, 0x35, 0x38, 0xe4, 0x0f, 0x19, 0xa7, 0xa6, 0x9b, 0x64, - 0xff, 0x89, 0x55, 0xa9, 0xb3, 0x11, 0x18, 0x72, 0xea, 0x4d, 0xb1, 0x93, 0x12, 0xed, 0x2f, 0x54, - 0xe8, 0x7e, 0x0a, 0x72, 0x86, 0x92, 0xab, 0x4a, 0x2f, 0x37, 0x0e, 0xe5, 0xde, 0x42, 0xff, 0x0a, - 0x6c, 0x6d, 0x26, 0xaa, 0xda, 0x1c, 0x65, 0x5a, 0xaa, 0xb5, 0xfb, 0xe2, 0x48, 0xdd, 0xb5, 0x6a, - 0xaa, 0xbb, 0xc9, 0x9f, 0x82, 0x59, 0x33, 0x5a, 0x56, 0x93, 0x77, 0xc2, 0x93, 0x67, 0x26, 0xca, - 0xaf, 0xc6, 0xaa, 0x7c, 0xf3, 0x65, 0xdd, 0xf0, 0xa5, 0x75, 0x54, 0x89, 0x8f, 0x6c, 0x62, 0x34, - 0x0a, 0xb3, 0x35, 0x36, 0xdb, 0xea, 0xd7, 0xcb, 0x12, 0xf7, 0xbf, 0x8b, 0xe7, 0xa2, 0x4b, 0x2e, - 0x1f, 0xf9, 0x89, 0xbb, 0xf8, 0x52, 0x3a, 0xc4, 0xe1, 0xe5, 0xb7, 0xe2, 0x43, 0x6b, 0x55, 0xbe, - 0xd3, 0xa1, 0xbe, 0xf5, 0xc7, 0x88, 0x8d, 0x2c, 0xc9, 0x5b, 0x88, 0x3b, 0xda, 0x36, 0x62, 0x44, - 0x8c, 0xe3, 0xca, 0xae, 0xe4, 0xe1, 0xb8, 0x30, 0x98, 0x25, 0x0b, 0xdd, 0x85, 0xea, 0xd7, 0x7e, - 0xe3, 0x86, 0x03, 0x0e, 0xbb, 0x01, 0x8c, 0x20, 0x11, 0x1b, 0x48, 0x44, 0x12, 0x93, 0x1e, 0xa5, - 0x2f, 0xe6, 0x66, 0xa1, 0x41, 0x41, 0x9a, 0x20, 0x05, 0xce, 0xb7, 0xc2, 0xa2, 0x3e, 0x67, 0xb7, - 0xc1, 0x80, 0x7b, 0xb0, 0x70, 0x03, 0xcf, 0x05, 0x97, 0xc0, 0xb0, 0xe1, 0xb8, 0x8a, 0x9b, 0xa2, - 0x00, 0x3e, 0xc1, 0x15, 0x3b, 0x9a, 0x97, 0x1a, 0xef, 0x88, 0x12, 0x14, 0x88, 0xc9, 0x19, 0xe7, - 0x1f, 0xa0, 0x39, 0x8d, 0x2c, 0xb6, 0x7a, 0xc4, 0x02, 0xc0, 0xef, 0xc8, 0xce, 0xe1, 0x3d, 0x5d, - 0x02, 0x71, 0x4e, 0x00, 0x56, 0x86, 0x36, 0xa0, 0xeb, 0xef, 0x16, 0x14, 0xd0, 0x1b, 0xa1, 0x7a, - 0xe2, 0x46, 0xd7, 0x56, 0x70, 0xa8, 0x52, 0xa7, 0x0f, 0xeb, 0x41, 0x63, 0x0d, 0x90, 0xf7, 0x89, - 0x7d, 0x18, 0x00, 0x40, 0x9c, 0x00, 0xe0, 0xe9, 0xf3, 0xc0, 0x1c, 0x42, 0x00, 0xdb, 0x24, 0x83, - 0x61, 0x06, 0xc1, 0x66, 0xb1, 0x99, 0xaa, 0xa1, 0x26, 0x84, 0x9c, 0x45, 0x6a, 0xac, 0xbf, 0x84, - 0x02, 0x92, 0x06, 0x09, 0x45, 0xf7, 0x1a, 0x56, 0x01, 0x66, 0x96, 0x02, 0x60, 0x64, 0x43, 0xdc, - 0x41, 0x1f, 0x62, 0x4e, 0xe9, 0x0a, 0x32, 0x87, 0x03, 0x66, 0xb4, 0xc3, 0xc1, 0x84, 0x01, 0x14, - 0x43, 0x89, 0x6a, 0x90, 0x46, 0x11, 0x9d, 0xd5, 0x95, 0x75, 0x7f, 0x88, 0xea, 0x08, 0xb8, 0x84, - 0xbc, 0x20, 0x14, 0x29, 0xec, 0xb0, 0x6c, 0xe7, 0x3c, 0x56, 0x5c, 0x2c, 0x63, 0xc7, 0x84, 0xfa, - 0x87, 0xfd, 0xd0, 0x06, 0xa8, 0xcf, 0x6a, 0x4f, 0xf9, 0x63, 0x39, 0xa7, 0xf8, 0x81, 0x23, 0x65, - 0x67, 0x42, 0x76, 0xa2, 0xc6, 0xde, 0x3f, 0x66, 0xb2, 0xa0, 0x5f, 0xa0, 0x72, 0x3b, 0x4c, 0x48, - 0x44, 0xe9, 0x99, 0xee, 0x57, 0x9e, 0x0f, 0x3c, 0xf7, 0x77, 0x05, 0x2d, 0x86, 0xe9, 0xe6, 0x97, - 0x84, 0x79, 0x0f, 0x13, 0xf1, 0xec, 0x78, 0x29, 0xf2, 0x4e, 0xa9, 0xc4, 0xad, 0xb3, 0xb6, 0xcf, - 0xaf, 0x90, 0xcf, 0x77, 0xf2, 0x89, 0xcf, 0xe4, 0xe2, 0x04, 0x10, 0x8b, 0x08, 0xe9, 0x25, 0x7f, - 0x1c, 0x49, 0xd5, 0x75, 0x55, 0x17, 0x9b, 0xf8, 0x2a, 0x2d, 0xe7, 0xef, 0xbb, 0xbe, 0xff, 0x04, - 0x55, 0xaa, 0xb1, 0xf0, 0xa0, 0xb5, 0x5f, 0x36, 0x2a, 0x55, 0x55, 0x25, 0x36, 0xf8, 0x29, 0x2b, - 0x4d, 0xa6, 0x92, 0xaa, 0xad, 0xdb, 0x4e, 0x0f, 0x84, 0x02, 0x05, 0xe2, 0x9d, 0x45, 0xd7, 0xcb, - 0x6f, 0xe1, 0x41, 0x28, 0xc9, 0x6c, 0x7b, 0x48, 0x2d, 0x24, 0xbb, 0x06, 0xaa, 0xaa, 0xa2, 0xfe, - 0xf8, 0x2a, 0x2b, 0xbb, 0xbe, 0xde, 0xd9, 0x31, 0x65, 0x64, 0x1d, 0xf0, 0x57, 0x4d, 0x72, 0x74, - 0xba, 0xcd, 0xd3, 0xfb, 0xe2, 0xcb, 0x6a, 0x2e, 0xa9, 0x88, 0xf9, 0xf0, 0x53, 0x55, 0xd5, 0x39, - 0x30, 0xb9, 0xd5, 0xf8, 0x88, 0x28, 0x22, 0xaf, 0x5a, 0xbf, 0xc2, 0x45, 0xbb, 0x4d, 0x2b, 0xeb, - 0x84, 0x8c, 0xe9, 0x77, 0xbf, 0x82, 0xcd, 0x1c, 0xb6, 0xb4, 0x90, 0x3d, 0x23, 0x5f, 0x7d, 0x75, - 0xf3, 0x5f, 0x75, 0xc2, 0xe2, 0x35, 0x56, 0xed, 0xa9, 0x77, 0x8b, 0xff, 0x84, 0x49, 0x49, 0xe3, - 0x8a, 0xde, 0xcf, 0x1b, 0x70, 0xb9, 0x7f, 0x84, 0x87, 0xe5, 0xcd, 0xab, 0xac, 0x40, 0xf1, 0x53, - 0xd3, 0x26, 0x70, 0x70, 0x3e, 0xcf, 0x01, 0xc8, 0x68, 0x7b, 0xe1, 0x11, 0x03, 0x24, 0x80, 0x00, - 0x56, 0x86, 0x51, 0xd4, 0xc3, 0xa0, 0xf1, 0xf0, 0x72, 0x56, 0x3a, 0x50, 0xf0, 0xfc, 0x1e, 0x7b, - 0xe0, 0xfd, 0xb3, 0x33, 0xa9, 0xc1, 0xee, 0x5d, 0x7c, 0x14, 0x05, 0x0a, 0x86, 0xd9, 0xeb, 0x25, - 0x6c, 0x0e, 0x61, 0x4a, 0x9c, 0xe0, 0xdb, 0xb0, 0x3c, 0x07, 0x9c, 0x02, 0xc4, 0x65, 0x66, 0xa2, - 0x3e, 0x33, 0xc5, 0x82, 0x60, 0x57, 0x1f, 0xf1, 0xbb, 0x89, 0x04, 0x21, 0x42, 0x14, 0x83, 0xa5, - 0x41, 0x0c, 0x8a, 0x07, 0xf3, 0x51, 0xca, 0x86, 0x30, 0x55, 0x9b, 0x30, 0x7e, 0x6f, 0xeb, 0x9d, - 0xcf, 0xfd, 0xea, 0x0d, 0x7e, 0x59, 0xe4, 0xc2, 0xb1, 0xd0, 0xd5, 0x12, 0xe5, 0xc0, 0x64, 0xcf, - 0x84, 0x01, 0x48, 0x52, 0xcb, 0xb1, 0xb6, 0xab, 0x16, 0xb2, 0x45, 0x49, 0x05, 0x55, 0x0a, 0xe4, - 0x0e, 0x01, 0xe9, 0xc1, 0x40, 0xf8, 0x78, 0x90, 0x43, 0xed, 0x50, 0x80, 0x2a, 0x3f, 0x2b, 0x6e, - 0x65, 0x07, 0x88, 0x0a, 0x5c, 0x95, 0x51, 0x4c, 0x6b, 0xdd, 0xb8, 0xa3, 0x2d, 0x8a, 0xde, 0xe2, - 0x01, 0xc4, 0xcb, 0x1f, 0x78, 0x28, 0x0a, 0x45, 0x61, 0x51, 0x51, 0x00, 0xf2, 0x76, 0xc5, 0xab, - 0xe3, 0x75, 0x23, 0xc3, 0xf0, 0x74, 0xc9, 0xc6, 0x97, 0x15, 0xe7, 0x15, 0x72, 0x9d, 0x3b, 0xfc, - 0x25, 0xbd, 0xf7, 0x77, 0xcd, 0xa5, 0x4b, 0xcd, 0x7b, 0xc5, 0xc4, 0xc7, 0x11, 0x6f, 0xcc, 0xc6, - 0xf4, 0xd7, 0x0f, 0xcf, 0xe2, 0xb7, 0x77, 0x71, 0x5e, 0xe9, 0x2b, 0x75, 0x5f, 0x27, 0x7b, 0xbf, - 0xc2, 0x64, 0xad, 0x45, 0xd5, 0x57, 0xca, 0x2c, 0x9d, 0x39, 0xf8, 0xb3, 0xe5, 0xc2, 0xea, 0xed, - 0xac, 0x40, 0x80, 0x46, 0x47, 0xde, 0xbe, 0x32, 0xab, 0xae, 0xbc, 0xdd, 0xf5, 0x7d, 0x91, 0x6a, - 0xbe, 0xfa, 0xaf, 0x8a, 0xae, 0xa9, 0x2d, 0x7c, 0x49, 0xe2, 0xf5, 0x4e, 0xab, 0xe2, 0xf9, 0x71, - 0xf1, 0xbf, 0xae, 0x6c, 0xf0, 0x9e, 0xf7, 0xce, 0x41, 0x2d, 0xfb, 0x11, 0x77, 0xf9, 0xaa, 0xba, - 0xe5, 0x3b, 0xbd, 0xd7, 0x26, 0x93, 0xbb, 0xe4, 0x10, 0x6e, 0xe6, 0x3c, 0x44, 0x22, 0x44, 0x81, - 0xba, 0xad, 0x8a, 0xc4, 0x2c, 0x5d, 0xd8, 0xef, 0xe1, 0x42, 0x9c, 0xe1, 0x6c, 0xe7, 0x1b, 0x9a, - 0x4e, 0x58, 0xed, 0xe2, 0xb1, 0x5b, 0xe5, 0xf1, 0x25, 0xdd, 0x21, 0x2f, 0xcf, 0x8e, 0xfa, 0xb9, - 0xe0, 0x48, 0x09, 0x10, 0x1a, 0xc8, 0x62, 0xe2, 0x25, 0x07, 0x8b, 0xb3, 0x2b, 0x37, 0xe0, 0xa0, - 0x41, 0x4b, 0x96, 0x33, 0x62, 0x2d, 0x96, 0xc4, 0xbd, 0xa5, 0xd9, 0x71, 0x20, 0xa8, 0x43, 0x99, - 0x0a, 0x8f, 0x4d, 0xc2, 0xaa, 0xd5, 0x60, 0xb5, 0x3e, 0xca, 0x5b, 0x3f, 0x7b, 0x11, 0xd6, 0xa6, - 0xe1, 0xdb, 0xb0, 0x95, 0x04, 0xf2, 0x20, 0xd9, 0x2b, 0x0d, 0xb1, 0xac, 0x0c, 0x22, 0x7e, 0xb8, - 0x4c, 0xad, 0x34, 0x63, 0x5d, 0x6b, 0xe8, 0xc9, 0x9f, 0xb1, 0x32, 0xed, 0x0f, 0x88, 0x0c, 0x13, - 0x27, 0xd2, 0x6a, 0xdc, 0xbd, 0xff, 0xc1, 0x56, 0xf2, 0xf6, 0xef, 0x82, 0x21, 0x0f, 0x7f, 0x12, - 0xe3, 0xf8, 0xfb, 0xe2, 0x29, 0x5b, 0xa7, 0xaf, 0x82, 0xea, 0xef, 0xa4, 0x9b, 0x3e, 0x2a, 0xba, - 0x8b, 0xd4, 0xac, 0xf8, 0x42, 0xc6, 0x93, 0x1b, 0x73, 0xc8, 0x55, 0xf9, 0xd8, 0x61, 0xf8, 0x25, - 0xca, 0x81, 0x2f, 0x59, 0xa4, 0xc7, 0xc2, 0x64, 0x5c, 0xad, 0xa6, 0x35, 0xf0, 0xb0, 0x96, 0xb7, - 0xbb, 0x1d, 0x37, 0x5d, 0xd1, 0x22, 0xff, 0x0e, 0xde, 0x87, 0xba, 0xe9, 0xdd, 0x53, 0x93, 0xaf, - 0xfa, 0xd7, 0xc9, 0x2e, 0x19, 0x9b, 0x1f, 0x8a, 0xa5, 0x6e, 0xfa, 0x1f, 0x8a, 0xd8, 0xe7, 0x6d, - 0xb9, 0x90, 0x78, 0x6c, 0x99, 0x5e, 0xd2, 0x9a, 0x29, 0xd1, 0x7f, 0x86, 0x67, 0x63, 0xfb, 0x2f, - 0x5f, 0xfc, 0x15, 0x6d, 0xb5, 0x8a, 0x3a, 0x6d, 0x19, 0x17, 0x9d, 0xf1, 0x5a, 0xbe, 0xda, 0x7f, - 0x35, 0xad, 0xaf, 0x09, 0xdd, 0xb3, 0xfd, 0xa6, 0xbf, 0x08, 0x71, 0x5b, 0x6d, 0xd7, 0xcb, 0xbe, - 0x13, 0x3d, 0xde, 0xd6, 0xd7, 0x96, 0xee, 0xcc, 0x6d, 0xa3, 0xc1, 0x0e, 0xef, 0xc3, 0xc4, 0x02, - 0xae, 0x7f, 0x8b, 0xf8, 0xef, 0x96, 0xfd, 0xbe, 0x13, 0x25, 0xbb, 0x77, 0xb6, 0xb8, 0x7e, 0xee, - 0xd3, 0x4f, 0x4e, 0xef, 0xae, 0x0f, 0xa2, 0x9f, 0xf9, 0x77, 0x4e, 0xb9, 0xea, 0x8d, 0x5c, 0x95, - 0xff, 0x26, 0xf6, 0x6b, 0x9b, 0x3b, 0x6c, 0xbc, 0x84, 0xce, 0xcb, 0xae, 0xa6, 0x51, 0xf1, 0x11, - 0xb3, 0x2e, 0x8d, 0xa7, 0x6b, 0xf2, 0x65, 0x7b, 0x0e, 0x97, 0x84, 0x8e, 0x64, 0xb9, 0x37, 0x96, - 0x1e, 0x89, 0x87, 0xc1, 0x39, 0x25, 0xfb, 0xd3, 0x77, 0xf8, 0x9c, 0xca, 0x4e, 0xab, 0x1a, 0x31, - 0x05, 0x5b, 0x5e, 0xed, 0xb1, 0xd3, 0xf2, 0x15, 0x06, 0xd2, 0x0d, 0xfc, 0x56, 0x92, 0x59, 0x97, - 0x7f, 0xd7, 0x0f, 0x84, 0xec, 0x23, 0xf4, 0x3f, 0x3e, 0x1f, 0x3c, 0x6d, 0x5b, 0x44, 0x3f, 0x86, - 0x98, 0xd7, 0x56, 0xce, 0xd2, 0xa3, 0xc9, 0xd2, 0x54, 0xe6, 0x6f, 0x1c, 0xa9, 0xe3, 0xc9, 0x3a, - 0xad, 0x1d, 0x1f, 0xf1, 0x86, 0xa8, 0xe1, 0xc6, 0x96, 0x5c, 0x6d, 0x59, 0xb1, 0xf5, 0x8f, 0x7c, - 0x2e, 0x97, 0x85, 0x0a, 0x7c, 0x2f, 0xe3, 0xeb, 0x55, 0x74, 0xc3, 0x4d, 0x7c, 0x63, 0x4a, 0x39, - 0xa4, 0x4e, 0xd6, 0x4f, 0x33, 0x9f, 0x1b, 0x27, 0x49, 0x27, 0xa4, 0x33, 0xe8, 0x15, 0x6c, 0xe4, - 0xa2, 0xba, 0x50, 0xac, 0x7b, 0x0e, 0x76, 0x64, 0xff, 0xe3, 0x61, 0x33, 0x5c, 0xfa, 0xfb, 0x26, - 0x2d, 0x75, 0x42, 0x77, 0xdb, 0xc1, 0xda, 0xe5, 0xeb, 0xa6, 0x31, 0xcb, 0xa5, 0x57, 0x99, 0x40, - 0xf1, 0xc6, 0x0d, 0x63, 0x29, 0x26, 0xd5, 0x9a, 0xff, 0x8d, 0xa0, 0x60, 0x35, 0xaf, 0x02, 0x1d, - 0xc8, 0x70, 0x7b, 0x27, 0xf9, 0x58, 0x81, 0xe4, 0x48, 0x91, 0xb5, 0xf2, 0x73, 0x34, 0x3c, 0x16, - 0xbb, 0x4f, 0x34, 0x7f, 0xc6, 0xd0, 0xeb, 0xf7, 0xd5, 0xbf, 0x9c, 0xb2, 0x84, 0xc6, 0x35, 0x53, - 0x62, 0x83, 0x6a, 0x0b, 0x7b, 0x38, 0x14, 0xdd, 0x3d, 0x3f, 0xf1, 0xba, 0x46, 0xca, 0x5b, 0x91, - 0xad, 0x6e, 0x10, 0xf4, 0x8e, 0xcf, 0x7c, 0x1e, 0x5d, 0x43, 0x71, 0x8e, 0xe1, 0x46, 0x3f, 0xc6, - 0x95, 0x24, 0x9f, 0x99, 0x9b, 0x2e, 0x97, 0x28, 0x72, 0x37, 0x6e, 0xdb, 0xbf, 0x59, 0x3b, 0x2f, - 0x05, 0x33, 0x61, 0xf2, 0x28, 0xaa, 0x97, 0xe9, 0x91, 0xec, 0x7b, 0x9f, 0x05, 0x93, 0xb3, 0x18, - 0xc6, 0x4e, 0xcb, 0xdd, 0xb9, 0x2a, 0xe8, 0x6b, 0xfd, 0x78, 0x7c, 0x23, 0xb4, 0x9e, 0x56, 0x6a, - 0x89, 0xaf, 0x44, 0xd9, 0x35, 0x9f, 0x0a, 0x6c, 0x67, 0x65, 0xec, 0xa6, 0x93, 0xa2, 0xf6, 0x60, - 0xe3, 0x6a, 0x0d, 0x7e, 0x4b, 0x2f, 0x38, 0xfb, 0x90, 0x6b, 0xe1, 0x4a, 0x69, 0x46, 0xe9, 0x34, - 0xc3, 0x34, 0xb1, 0x0f, 0x4e, 0xb8, 0x35, 0x57, 0xb6, 0x76, 0xf8, 0x52, 0x37, 0x7b, 0xab, 0x97, - 0xbf, 0x95, 0x84, 0x36, 0x38, 0x36, 0x3c, 0xbe, 0x36, 0xd3, 0x0d, 0xb1, 0x93, 0x8a, 0x9d, 0x8d, - 0x4d, 0x28, 0x36, 0xec, 0x97, 0xc5, 0x06, 0x3b, 0x52, 0x79, 0x04, 0x9d, 0x13, 0x31, 0x1f, 0xf8, - 0x77, 0x4c, 0xed, 0x73, 0x16, 0x37, 0xec, 0x72, 0x86, 0x77, 0xc4, 0x60, 0x89, 0x90, 0xff, 0xc2, - 0x90, 0xbb, 0x9d, 0xd1, 0xca, 0xc1, 0xd9, 0x6a, 0x12, 0x72, 0x77, 0x6d, 0xcd, 0xdf, 0xcc, 0xf3, - 0xe1, 0xe9, 0xf8, 0x33, 0xd3, 0xae, 0xbc, 0xec, 0x9f, 0xb3, 0xb5, 0x2e, 0x51, 0x4f, 0xcf, 0xff, - 0xc6, 0xe6, 0xed, 0xd2, 0x55, 0x75, 0x24, 0xc6, 0x59, 0x0a, 0x3c, 0x90, 0x2e, 0x41, 0x9c, 0xe3, - 0x79, 0x42, 0xb2, 0xd6, 0x21, 0x8f, 0xf8, 0x2c, 0x24, 0x75, 0x50, 0xeb, 0xb4, 0x46, 0x3a, 0x18, - 0xdd, 0xd8, 0x1f, 0x33, 0xf0, 0x53, 0xb7, 0x74, 0x4c, 0x91, 0x12, 0x3b, 0xd3, 0x64, 0xff, 0x05, - 0x39, 0x99, 0x3c, 0x34, 0x33, 0xeb, 0x2a, 0x90, 0xcc, 0xdb, 0x1c, 0x5f, 0x04, 0x19, 0x5e, 0xca, - 0x0d, 0xb2, 0xa1, 0x4d, 0xdd, 0x6d, 0x21, 0x6c, 0x37, 0x92, 0x28, 0x95, 0xff, 0xc6, 0xf3, 0xf6, - 0xb7, 0x78, 0x9d, 0xcd, 0x16, 0x58, 0xc6, 0xee, 0x5c, 0xa7, 0x64, 0x33, 0xdf, 0xe3, 0x4b, 0x5a, - 0xa4, 0x34, 0xa9, 0xbe, 0x35, 0xd8, 0xd6, 0x28, 0xd2, 0xae, 0xde, 0x9f, 0xf8, 0xed, 0xf4, 0xa9, - 0xdc, 0xec, 0xd6, 0xc6, 0x3f, 0x05, 0x74, 0xad, 0x5d, 0xb6, 0x9e, 0x9b, 0x78, 0x93, 0xe1, 0x8b, - 0x69, 0x2a, 0x6c, 0x69, 0x31, 0xfb, 0x33, 0x24, 0x8d, 0x2f, 0xf1, 0xb4, 0xb7, 0x49, 0x2e, 0xd2, - 0x23, 0xb0, 0x4c, 0x56, 0xb3, 0xf5, 0x33, 0x44, 0x31, 0x58, 0xc6, 0x7f, 0xc6, 0xd1, 0x5a, 0x77, - 0x3e, 0x8e, 0x59, 0x1b, 0x36, 0x90, 0xd0, 0xcd, 0x84, 0x4a, 0xa3, 0x23, 0x81, 0x55, 0x63, 0x3d, - 0xfe, 0x37, 0x6a, 0xd3, 0x8b, 0xb9, 0x71, 0x8e, 0xe6, 0x26, 0x52, 0xd6, 0x07, 0x90, 0xea, 0x62, - 0xc8, 0x91, 0x74, 0x5d, 0x1f, 0xf1, 0x94, 0x36, 0xa5, 0xab, 0x95, 0x8d, 0xea, 0x5c, 0xcc, 0x1b, - 0x99, 0x91, 0xb3, 0x1b, 0x51, 0x78, 0x20, 0x8f, 0x5d, 0x76, 0x41, 0xcb, 0x19, 0x65, 0xd1, 0x17, - 0xa2, 0xb6, 0x24, 0x5d, 0xac, 0x3b, 0xe7, 0xfe, 0x37, 0x59, 0x23, 0x7c, 0xcc, 0x9d, 0xa9, 0xa1, - 0xdb, 0x57, 0x96, 0xe5, 0x45, 0xc8, 0xed, 0x36, 0x44, 0xff, 0xe3, 0x49, 0x23, 0xd1, 0x35, 0x12, - 0x1b, 0x56, 0x76, 0xa1, 0xf0, 0x61, 0xea, 0xc4, 0x3f, 0x0f, 0x56, 0x98, 0x8e, 0x62, 0xe7, 0xfe, - 0x14, 0x2c, 0xda, 0x4f, 0xb1, 0x8f, 0xdd, 0x44, 0xcc, 0x18, 0xae, 0x8f, 0xd2, 0x33, 0x10, 0x7f, - 0xbe, 0x14, 0xbf, 0xa1, 0xe8, 0x63, 0x37, 0x58, 0xf6, 0xb3, 0x06, 0x79, 0x33, 0x43, 0xdd, 0x38, - 0x37, 0x4b, 0xb2, 0x6b, 0x1f, 0x1b, 0x3e, 0x68, 0x8c, 0x68, 0x89, 0x96, 0x4a, 0xe5, 0xb1, 0x01, - 0xd2, 0x37, 0xb9, 0x54, 0x12, 0xd9, 0xea, 0xa1, 0xda, 0xa6, 0x22, 0xae, 0xa9, 0xaf, 0xfc, 0x29, - 0x3a, 0x26, 0xa8, 0x64, 0x59, 0xb6, 0x1d, 0x78, 0x9b, 0x04, 0xb5, 0xb8, 0x51, 0x56, 0xe9, 0x77, - 0xc2, 0x04, 0x32, 0x89, 0xb1, 0xa5, 0xd4, 0xeb, 0x54, 0x1b, 0x0d, 0x27, 0xf0, 0xa4, 0xfc, 0x76, - 0xe9, 0xd1, 0x39, 0x05, 0x22, 0xeb, 0xa3, 0x76, 0xd4, 0x2b, 0x0b, 0x0a, 0xb8, 0x63, 0x62, 0x04, - 0xcf, 0xc2, 0x96, 0x36, 0xcc, 0xc4, 0x52, 0x35, 0x07, 0xe3, 0x79, 0x37, 0xd1, 0xcc, 0xa5, 0xdf, - 0xe3, 0x67, 0x81, 0xa0, 0x5d, 0xb7, 0x1d, 0xc8, 0xfe, 0xe8, 0x39, 0x75, 0x69, 0xe6, 0x2c, 0x65, - 0x02, 0x92, 0x1b, 0xff, 0x82, 0xbe, 0x58, 0xac, 0x54, 0x3a, 0xda, 0x3b, 0x50, 0xe5, 0x3e, 0xf8, - 0x24, 0x9d, 0x0e, 0xd3, 0xfd, 0x5f, 0xe3, 0x6d, 0x1b, 0x5b, 0x83, 0x5f, 0x71, 0xac, 0x47, 0x59, - 0xe2, 0xa2, 0xa5, 0x67, 0xcd, 0xed, 0xd5, 0xdd, 0x5f, 0xfc, 0x20, 0x47, 0xa1, 0x63, 0xf3, 0xec, - 0x8f, 0xbb, 0xd3, 0x6b, 0xc6, 0x4c, 0xd6, 0xb2, 0x2a, 0x2b, 0x24, 0xcd, 0x0c, 0xe8, 0x28, 0x6e, - 0x6a, 0x6a, 0x6a, 0x8f, 0xc2, 0x85, 0x6d, 0xe3, 0x17, 0x47, 0xd2, 0xb8, 0xc9, 0x21, 0xda, 0xaa, - 0xb6, 0x49, 0xc2, 0x96, 0x13, 0x7c, 0x29, 0x63, 0xc9, 0xdb, 0x99, 0x49, 0xc3, 0x5b, 0x0c, 0x6e, - 0x81, 0x97, 0x2d, 0x88, 0x3a, 0x5e, 0xbe, 0x14, 0xd2, 0x49, 0x11, 0xd3, 0x4a, 0x17, 0x3e, 0x99, - 0x2d, 0x4f, 0x81, 0x92, 0x2e, 0x42, 0x70, 0x60, 0x6d, 0xf0, 0x52, 0x53, 0xb2, 0x76, 0x58, 0x9e, - 0xcf, 0x77, 0x72, 0xea, 0x10, 0xa0, 0x6c, 0x43, 0x97, 0xc1, 0x56, 0x06, 0xc6, 0x3d, 0x5b, 0x7d, - 0xec, 0x1b, 0x2e, 0x54, 0x8c, 0x74, 0x65, 0x4f, 0x85, 0x09, 0x32, 0x74, 0xd8, 0xc7, 0x53, 0x01, - 0xd5, 0x23, 0x96, 0x3e, 0xbc, 0x56, 0xbc, 0xf0, 0xe8, 0xec, 0x3e, 0xf8, 0x52, 0xe4, 0x8f, 0x52, - 0xa2, 0xee, 0xd4, 0x29, 0x9d, 0xcf, 0x41, 0xc3, 0xdd, 0x6d, 0x2a, 0x19, 0x71, 0x32, 0x9e, 0x92, - 0xf8, 0xc2, 0x3c, 0x71, 0x5a, 0xa4, 0x54, 0x4f, 0x7a, 0x19, 0x8d, 0xc6, 0xf6, 0x26, 0x2a, 0x5f, - 0x05, 0x34, 0xea, 0x4d, 0xbb, 0x99, 0xd8, 0xc5, 0x6f, 0x40, 0xda, 0x1f, 0xbe, 0x1f, 0x29, 0x63, - 0x4a, 0x6a, 0x91, 0x72, 0x22, 0xed, 0x55, 0xeb, 0x55, 0xd5, 0xbf, 0xf1, 0x96, 0xc2, 0xdc, 0xb2, - 0x2c, 0x13, 0xba, 0xc5, 0x74, 0xfb, 0x4d, 0xad, 0x96, 0x48, 0x74, 0xbc, 0x11, 0x50, 0xd5, 0x93, - 0x28, 0x3e, 0x12, 0xcc, 0xcb, 0x1f, 0xaa, 0x7e, 0x14, 0x2b, 0xfd, 0x26, 0x1b, 0x0e, 0x99, 0xd8, - 0x7f, 0x2b, 0xd8, 0xdb, 0x56, 0xd6, 0x13, 0x39, 0x63, 0xbe, 0x32, 0x8a, 0xd4, 0x83, 0x26, 0xc8, - 0xf5, 0xf4, 0x83, 0xa3, 0x6c, 0x7a, 0xd3, 0xba, 0x4d, 0x45, 0x7e, 0x14, 0x23, 0xa6, 0x77, 0xc2, - 0x6c, 0x29, 0x78, 0x49, 0x21, 0xd2, 0x76, 0xe6, 0xbe, 0x14, 0xb9, 0xe3, 0x57, 0x35, 0x51, 0xb5, - 0xcc, 0xa8, 0x48, 0x66, 0x60, 0x2a, 0xdc, 0x59, 0x7b, 0x57, 0xca, 0x8f, 0x3f, 0xc1, 0x76, 0xec, - 0x69, 0x39, 0xf8, 0xaf, 0xdf, 0xe1, 0x4b, 0x2a, 0x4d, 0xa5, 0x8f, 0xe7, 0xf3, 0xf6, 0x1d, 0xa1, - 0x99, 0x04, 0x75, 0xf0, 0x55, 0x2b, 0xd5, 0x51, 0x0e, 0x0f, 0x59, 0x8c, 0x66, 0xda, 0x32, 0xca, - 0x8f, 0x19, 0xe2, 0x07, 0xe1, 0x4f, 0xe5, 0x66, 0x86, 0xda, 0x0d, 0xb3, 0x37, 0xf0, 0x51, 0x73, - 0xe0, 0xaf, 0x7d, 0x8d, 0x9f, 0x05, 0xdc, 0xfe, 0xc6, 0x93, 0x1a, 0x59, 0x8f, 0x82, 0xb9, 0x1b, - 0x06, 0x5d, 0x8e, 0xba, 0x1b, 0x1a, 0x1b, 0x43, 0x74, 0x4f, 0x51, 0xfe, 0x0a, 0xb4, 0xdb, 0x2f, - 0xb6, 0xf3, 0x30, 0xbb, 0x10, 0xcd, 0x1b, 0xe1, 0x48, 0xe2, 0x13, 0xd6, 0xa1, 0xab, 0xca, 0x55, - 0x0f, 0x42, 0xc5, 0x03, 0x66, 0x74, 0xa0, 0x61, 0xca, 0xdb, 0x22, 0xa9, 0x26, 0x0e, 0x08, 0xc9, - 0xf0, 0x58, 0x52, 0x62, 0x19, 0xe0, 0xa6, 0xba, 0x31, 0x93, 0x61, 0x92, 0x31, 0x88, 0xd8, 0xcb, - 0x99, 0xcb, 0xcf, 0x8d, 0x91, 0x84, 0x75, 0x1a, 0xf7, 0x32, 0xb0, 0xcf, 0xcd, 0xb1, 0x33, 0x53, - 0xc7, 0xcc, 0xd5, 0xdd, 0x31, 0x3f, 0xa5, 0x9d, 0x42, 0x9a, 0x1b, 0xff, 0xc2, 0x84, 0x0c, 0xf2, - 0xeb, 0xa1, 0xb9, 0x91, 0x3f, 0xa9, 0x30, 0xd9, 0x46, 0x67, 0xba, 0x14, 0x79, 0xd0, 0xb5, 0x06, - 0x8b, 0x7e, 0x0a, 0x66, 0x4b, 0x43, 0x72, 0x2c, 0x75, 0x7a, 0x33, 0xa1, 0x43, 0xd3, 0xe4, 0xac, - 0x3b, 0xe1, 0x49, 0x20, 0x9e, 0xd0, 0xd2, 0xe9, 0x9e, 0xbb, 0x45, 0xcb, 0x7c, 0x9a, 0xc4, 0x1b, - 0x59, 0xcb, 0xe1, 0x4a, 0x4d, 0xb7, 0x27, 0x3f, 0x4a, 0x15, 0x22, 0xe5, 0xeb, 0x2b, 0x89, 0x46, - 0x6d, 0xc6, 0x3e, 0x36, 0xf5, 0x1b, 0xd4, 0xb4, 0xd3, 0x7e, 0xa3, 0xf9, 0x6c, 0x66, 0xc9, 0xb9, - 0x4b, 0x1f, 0xc6, 0x97, 0xf8, 0xd9, 0x59, 0x8e, 0x85, 0x5b, 0x13, 0x66, 0x51, 0x42, 0x97, 0x9d, - 0x9a, 0x3b, 0xe5, 0xe5, 0xd0, 0x6e, 0xbf, 0xf0, 0xad, 0xbb, 0x18, 0xeb, 0x15, 0x6c, 0x65, 0x6a, - 0x6d, 0x7a, 0x28, 0x5f, 0xe1, 0xfe, 0x65, 0x13, 0x2a, 0x78, 0x3a, 0x1b, 0x0c, 0x6e, 0xe5, 0x5d, - 0xd8, 0x2c, 0xf4, 0xa5, 0xff, 0xc2, 0x9b, 0x44, 0x6b, 0x10, 0xb1, 0xb9, 0xba, 0x5f, 0x2e, 0x26, - 0xf6, 0xe7, 0x6f, 0x8f, 0xb4, 0x4d, 0x56, 0xc1, 0xfe, 0xe9, 0x63, 0xf5, 0x0d, 0x66, 0xb6, 0xf7, - 0x84, 0x71, 0x94, 0x3b, 0x36, 0xd7, 0x27, 0x43, 0x7f, 0x83, 0x73, 0x3e, 0x14, 0xb5, 0xf1, 0x2b, - 0x36, 0x4e, 0x23, 0xb0, 0xc6, 0x57, 0x1b, 0x3c, 0xdd, 0xa6, 0x33, 0x8c, 0xd3, 0x2f, 0x85, 0x2c, - 0x6b, 0xc7, 0x2a, 0xe2, 0x97, 0xb7, 0x06, 0xc6, 0xda, 0xf9, 0x7c, 0x14, 0xf4, 0x34, 0xdb, 0x9d, - 0xa5, 0x67, 0xb6, 0x9b, 0x19, 0xd3, 0xe0, 0xab, 0x49, 0x06, 0xdb, 0xe9, 0x1d, 0x98, 0xb3, 0xef, - 0x2f, 0x84, 0x0b, 0x5a, 0xb6, 0x98, 0xb6, 0xb3, 0xb0, 0x5f, 0x3e, 0x36, 0xc7, 0x62, 0x1c, 0xa5, - 0x2c, 0x8d, 0x83, 0xca, 0xc1, 0x98, 0x4c, 0xb8, 0xd9, 0xa5, 0x3d, 0x14, 0xf0, 0x73, 0xc2, 0xff, - 0xc2, 0x92, 0x32, 0xb7, 0x34, 0x0a, 0xdf, 0x07, 0x46, 0xd9, 0x1a, 0x4d, 0xd6, 0x35, 0x8c, 0xb1, - 0xad, 0x94, 0xbd, 0x9a, 0xd9, 0x85, 0xff, 0x05, 0x26, 0x82, 0xb1, 0x45, 0x11, 0xfa, 0x15, 0xe6, - 0xd9, 0x98, 0x7f, 0x8c, 0x2a, 0x74, 0x9b, 0x3b, 0xd7, 0x88, 0x88, 0x58, 0xd8, 0xd2, 0xee, 0xa6, - 0xb5, 0x95, 0xc1, 0xd1, 0xf8, 0xdd, 0xa4, 0x46, 0x52, 0x1c, 0x74, 0x95, 0xe5, 0x05, 0xe3, 0xe9, - 0x96, 0xde, 0xbc, 0x19, 0x59, 0x83, 0xbe, 0x2b, 0x51, 0xdc, 0x58, 0xa7, 0xfc, 0x3b, 0x8d, 0x0d, - 0x4a, 0x88, 0xde, 0x16, 0xdb, 0x91, 0x70, 0x63, 0x89, 0x5a, 0xd2, 0xb2, 0xaf, 0xfe, 0x14, 0xa6, - 0xc7, 0x76, 0x31, 0xdc, 0xd8, 0xba, 0x1a, 0x64, 0x8a, 0x24, 0xb4, 0xb5, 0xf0, 0xa5, 0x0a, 0xb2, - 0x0f, 0x4c, 0xf8, 0xf5, 0x9f, 0xb6, 0x96, 0x7c, 0x69, 0x37, 0xb3, 0xe3, 0xf8, 0x50, 0x88, 0x8f, - 0x20, 0xcf, 0x29, 0xc9, 0x1b, 0x0d, 0x8c, 0xf1, 0x93, 0x9a, 0xfb, 0xd1, 0xf3, 0xf9, 0x7c, 0x14, - 0xcd, 0x2f, 0x84, 0x74, 0x0f, 0xa9, 0x5b, 0x17, 0xdf, 0x05, 0xb4, 0x9a, 0x86, 0x68, 0xc3, 0x14, - 0x9a, 0x51, 0x37, 0xc6, 0xf8, 0x4c, 0x9b, 0xbb, 0xc8, 0xcf, 0x43, 0x2a, 0x50, 0xd3, 0x95, 0xc6, - 0x2c, 0x6c, 0xd0, 0x65, 0x3f, 0xe2, 0x39, 0x51, 0x35, 0x6d, 0x4b, 0x03, 0x7b, 0xe9, 0x78, 0x29, - 0x2a, 0x02, 0x72, 0x83, 0xac, 0xe8, 0x65, 0xc2, 0xe3, 0x5b, 0x63, 0x14, 0xdb, 0xe3, 0x2c, 0x71, - 0xba, 0x46, 0x87, 0xbc, 0x34, 0x8c, 0xfc, 0xed, 0x73, 0x58, 0xff, 0x0a, 0x66, 0xd6, 0xf3, 0xbd, - 0x8c, 0x52, 0x44, 0xad, 0xbd, 0xab, 0xb2, 0x89, 0xb6, 0x47, 0x8a, 0xcb, 0xd5, 0xf1, 0x98, 0x32, - 0xb7, 0x7e, 0x39, 0x24, 0x9b, 0x09, 0x9b, 0xd6, 0xe4, 0x99, 0xb3, 0xc3, 0x0e, 0xb3, 0xfc, 0x29, - 0x5d, 0x73, 0x88, 0xef, 0x2e, 0x19, 0xed, 0x87, 0xb6, 0xac, 0x7b, 0x6f, 0x32, 0x2a, 0xf0, 0xa7, - 0x74, 0xdb, 0xbc, 0x89, 0x4a, 0xc5, 0x0e, 0xc6, 0x3f, 0x9b, 0x63, 0x1d, 0x1a, 0x55, 0xe1, 0x4c, - 0x6d, 0xad, 0xbd, 0x06, 0xd6, 0x3d, 0x0e, 0x86, 0x57, 0x95, 0xf6, 0x66, 0x3b, 0x2b, 0x1a, 0xf8, - 0x53, 0xa1, 0x91, 0xa4, 0x65, 0xc8, 0x5a, 0xc5, 0x24, 0x38, 0x9a, 0xcb, 0xfd, 0x49, 0x79, 0xdf, - 0x19, 0x1a, 0x41, 0x70, 0x4e, 0x1c, 0x53, 0x55, 0x31, 0xea, 0xb2, 0x1c, 0xb9, 0x7a, 0x1d, 0x7a, - 0x18, 0xaf, 0xc1, 0x5d, 0x5f, 0x95, 0x95, 0x83, 0x58, 0xfa, 0xdc, 0xd6, 0xf8, 0x52, 0x58, 0x56, - 0x76, 0x6b, 0x4e, 0x2d, 0x37, 0x2b, 0x53, 0x56, 0xa9, 0x47, 0x71, 0xbf, 0xc6, 0xce, 0xc9, 0x58, - 0x3b, 0x2c, 0x65, 0x6d, 0xdd, 0xec, 0x9e, 0x5b, 0xef, 0x36, 0xf1, 0x68, 0xc9, 0x09, 0x61, 0xfe, - 0x36, 0x76, 0x09, 0x95, 0x41, 0xd1, 0x92, 0x48, 0x97, 0xe0, 0xfb, 0xc6, 0x6f, 0x0f, 0x65, 0x0a, - 0x56, 0x39, 0x2c, 0x36, 0x4f, 0xfe, 0x14, 0xee, 0x6e, 0x56, 0xc9, 0x59, 0x67, 0x74, 0x0e, 0xda, - 0x9f, 0x1a, 0x9e, 0xd5, 0xcb, 0x47, 0x95, 0x5f, 0x0a, 0x50, 0xcf, 0x98, 0x3f, 0x96, 0x3b, 0x79, - 0x0f, 0xd3, 0x8f, 0xd6, 0xc9, 0xbc, 0xaf, 0xdb, 0xe1, 0x4c, 0x4e, 0xc3, 0x32, 0x55, 0x35, 0x45, - 0x06, 0x5c, 0x2b, 0x11, 0xb1, 0x06, 0xd3, 0x1a, 0x77, 0xee, 0xf8, 0x52, 0x91, 0xfc, 0x4c, 0x6a, - 0xcb, 0xb7, 0x47, 0x63, 0x73, 0x44, 0xac, 0xb0, 0xda, 0x56, 0xac, 0x48, 0xc7, 0xc2, 0x99, 0xe0, - 0x56, 0x16, 0x5d, 0x7b, 0x08, 0xa8, 0xcf, 0x07, 0x6d, 0x1b, 0xb7, 0x3c, 0x94, 0xde, 0xe2, 0xbb, - 0xe0, 0xae, 0xda, 0x1a, 0xa3, 0x64, 0xb9, 0x2c, 0x76, 0x1d, 0xb7, 0x23, 0xdf, 0xe1, 0x42, 0x15, - 0x91, 0xfa, 0xde, 0x36, 0x28, 0x89, 0x02, 0x85, 0xb7, 0xb2, 0x75, 0xc7, 0x1f, 0xdf, 0xe0, 0xae, - 0x33, 0x7a, 0x5a, 0xce, 0x77, 0xbd, 0x86, 0x33, 0x76, 0x8f, 0x45, 0x4f, 0xf0, 0x53, 0x61, 0x8f, - 0x57, 0x73, 0x30, 0x36, 0x3e, 0x8f, 0x9d, 0xbc, 0x5f, 0x08, 0x6b, 0x64, 0x68, 0x8a, 0xce, 0xda, - 0x4c, 0x8c, 0xd1, 0x9a, 0x52, 0xf1, 0x96, 0x4d, 0x84, 0xb8, 0xd6, 0x46, 0x4e, 0xe0, 0xdd, 0xa8, - 0x75, 0xa1, 0x95, 0x94, 0x38, 0x59, 0x77, 0xc6, 0xde, 0xd6, 0x37, 0xb5, 0xac, 0x4c, 0x55, 0xb6, - 0xe8, 0xb5, 0x87, 0x45, 0x65, 0x74, 0x89, 0x24, 0x8a, 0xd7, 0x14, 0x57, 0x75, 0xff, 0x0a, 0x1d, - 0xf9, 0x5c, 0x0c, 0xfd, 0xa6, 0x54, 0x8b, 0xaf, 0x61, 0x4d, 0x6d, 0xde, 0xd3, 0x1b, 0x1c, 0xbe, - 0x0b, 0x34, 0xdc, 0x8c, 0x1a, 0x2d, 0xc7, 0x3b, 0x5f, 0xec, 0xb0, 0xf8, 0x7f, 0x9b, 0x07, 0xcc, - 0x52, 0xf1, 0xd4, 0xaa, 0xdb, 0x1e, 0xa8, 0x96, 0xbf, 0xe1, 0x48, 0xe2, 0xd1, 0xb3, 0xe9, 0x95, - 0x23, 0xce, 0xc6, 0x76, 0xc9, 0xa6, 0xda, 0x38, 0xca, 0xa3, 0xbe, 0x14, 0xbe, 0x38, 0xdd, 0xaa, - 0xd0, 0x61, 0x9a, 0xd4, 0x75, 0x75, 0x27, 0xeb, 0x7a, 0xa3, 0x3b, 0xca, 0x9f, 0x0f, 0x90, 0xf1, - 0xbc, 0xbe, 0x5e, 0x87, 0x62, 0xb4, 0x37, 0xe5, 0x75, 0x75, 0xff, 0x0a, 0x50, 0xe5, 0x62, 0xec, - 0x73, 0x3e, 0x76, 0x9b, 0xd7, 0xaf, 0x82, 0xb9, 0xd8, 0x8e, 0x8f, 0x3e, 0x22, 0xa9, 0x0d, 0xa9, - 0x20, 0x4d, 0xf0, 0x51, 0x99, 0x0a, 0xad, 0xcb, 0xb6, 0xf2, 0xf8, 0x89, 0x92, 0xb2, 0xd5, 0xa6, - 0xed, 0x5d, 0x97, 0x8c, 0xbb, 0xde, 0x59, 0x33, 0x18, 0xda, 0x38, 0x31, 0xca, 0x44, 0xe1, 0x33, - 0x60, 0xf6, 0x62, 0x7e, 0x0a, 0x6c, 0x6b, 0xf3, 0x85, 0x57, 0x07, 0x2b, 0x5e, 0x56, 0xe6, 0xf8, - 0x52, 0x37, 0x5a, 0x57, 0x26, 0x8d, 0xc3, 0x1d, 0xa3, 0x21, 0xa1, 0xbd, 0xa5, 0x66, 0x8e, 0x24, - 0xc3, 0x55, 0xa8, 0x1c, 0x7f, 0x82, 0xbb, 0x59, 0x5d, 0x59, 0x5b, 0x47, 0xbb, 0x6a, 0x21, 0xe8, - 0x9a, 0xc6, 0x6c, 0x7c, 0x15, 0x46, 0xcd, 0xb0, 0x9e, 0xcb, 0xd2, 0xee, 0xca, 0xfb, 0x58, 0x7c, - 0x14, 0x5a, 0xb4, 0x39, 0x46, 0xd7, 0x1a, 0x42, 0x8b, 0xe0, 0x9e, 0x9d, 0x18, 0xf5, 0x6b, 0xae, - 0x71, 0x25, 0xef, 0x8c, 0xc4, 0xd8, 0xa1, 0x56, 0xb7, 0x46, 0xb2, 0xb7, 0xa8, 0xba, 0x87, 0xc6, - 0x68, 0x9a, 0x34, 0x7e, 0x14, 0x91, 0x96, 0xb2, 0x95, 0x19, 0x62, 0xc7, 0xf1, 0x9b, 0x98, 0x5b, - 0x8d, 0xdd, 0x73, 0x11, 0x7c, 0x6e, 0xd5, 0x70, 0xea, 0xb1, 0x37, 0xf3, 0x31, 0xb3, 0xa4, 0x76, - 0xb3, 0xd7, 0x72, 0xc3, 0xfc, 0x11, 0x52, 0x97, 0xbe, 0x7f, 0x85, 0x29, 0x72, 0xc2, 0x5d, 0xd6, - 0x8e, 0x49, 0x34, 0x5f, 0xcc, 0x1b, 0xe0, 0xb3, 0x43, 0x2f, 0xba, 0xb2, 0xbd, 0xb4, 0x6d, 0x6b, - 0xe3, 0x73, 0xc7, 0x77, 0x1f, 0xab, 0x95, 0x96, 0xf3, 0xfb, 0xb1, 0xad, 0x64, 0x87, 0xf8, 0x2a, - 0xbb, 0xe9, 0x26, 0x2d, 0xb7, 0x07, 0x29, 0x6b, 0x2b, 0xee, 0x2c, 0x9f, 0xe1, 0x4e, 0x6e, 0x5f, - 0x5a, 0x19, 0x99, 0xe9, 0xbf, 0x93, 0xef, 0xf0, 0x55, 0xa3, 0x54, 0xb2, 0x45, 0x8e, 0x48, 0xd7, - 0x30, 0x87, 0x1c, 0xbe, 0x11, 0x8f, 0xde, 0x8e, 0x93, 0x1c, 0x69, 0x5f, 0x8d, 0xba, 0x7e, 0x33, - 0x73, 0xb3, 0x06, 0x95, 0xc7, 0x8e, 0x35, 0xa4, 0x1a, 0x56, 0xa8, 0x67, 0x5e, 0x91, 0xa7, 0x38, - 0xe6, 0x7c, 0x75, 0xbd, 0x71, 0xbb, 0xcd, 0x4e, 0x4c, 0xa5, 0xe1, 0x4e, 0x46, 0x52, 0xfc, 0xcf, - 0x69, 0xfb, 0x91, 0xbc, 0xbe, 0x14, 0xf6, 0xc9, 0xac, 0x77, 0xa1, 0xb5, 0x09, 0x34, 0x4d, 0x91, - 0x92, 0xb1, 0x15, 0x7c, 0x23, 0x3b, 0x0c, 0xa8, 0x66, 0x67, 0x59, 0xf1, 0x33, 0x65, 0x1d, 0x1f, - 0x85, 0x0a, 0x88, 0xc9, 0x63, 0x15, 0xba, 0x35, 0x67, 0x3d, 0xfd, 0x0d, 0xec, 0xde, 0x0c, 0xac, - 0x4f, 0xf0, 0x5a, 0x4b, 0x0d, 0x8c, 0xf2, 0xb4, 0x57, 0xb6, 0x44, 0x5f, 0xc1, 0x4e, 0x2b, 0x50, - 0x58, 0xeb, 0x77, 0x63, 0x6d, 0x26, 0x49, 0x7e, 0x0a, 0x75, 0xea, 0x87, 0xcd, 0xd3, 0x6f, 0x7f, - 0x82, 0xba, 0x1a, 0xea, 0x4e, 0xc6, 0xd0, 0xd0, 0xd4, 0xbf, 0x3a, 0x7c, 0x12, 0xd3, 0xa7, 0xb1, - 0xce, 0xc6, 0x6f, 0x82, 0xb2, 0xc1, 0x9d, 0x88, 0xfc, 0x66, 0xa7, 0x6d, 0x0e, 0x58, 0x63, 0x3e, - 0x30, 0x94, 0x31, 0xec, 0xfb, 0x18, 0x6e, 0xa4, 0x6d, 0x93, 0x29, 0x23, 0x09, 0xaa, 0x51, 0xd4, - 0x2a, 0x3f, 0x0a, 0x75, 0x55, 0xa2, 0x24, 0x65, 0xc7, 0x72, 0x4e, 0xed, 0x27, 0xa6, 0xf8, 0xce, - 0x48, 0x5f, 0x33, 0x31, 0xca, 0xe4, 0x6a, 0xdb, 0x1b, 0x99, 0x33, 0x14, 0x7e, 0x14, 0xb7, 0xe5, - 0x64, 0xed, 0xa9, 0xcc, 0x4e, 0x86, 0x76, 0x4d, 0xe0, 0xfe, 0x5f, 0x04, 0xba, 0xce, 0xd6, 0xf7, - 0x33, 0x74, 0x39, 0x7c, 0x16, 0x72, 0xf2, 0xb1, 0xd3, 0x7b, 0x58, 0x4d, 0x0d, 0xe0, 0xf8, 0x9b, - 0x23, 0x95, 0x82, 0xee, 0xe6, 0x95, 0x8f, 0x0a, 0x63, 0xf9, 0x21, 0xc1, 0xb9, 0x9d, 0xdd, 0x5b, - 0x4a, 0x87, 0xa1, 0xb9, 0x19, 0x20, 0xbe, 0x2a, 0x96, 0xd5, 0xa2, 0xb3, 0x3e, 0x14, 0xcd, 0xac, - 0xa1, 0x0d, 0x2d, 0x1d, 0x1a, 0x8f, 0x64, 0xf6, 0x68, 0x6e, 0x84, 0x97, 0x60, 0xdf, 0xfb, 0xe0, - 0xae, 0xe9, 0xa1, 0xa6, 0xcd, 0x8a, 0x22, 0xe1, 0x1e, 0xc6, 0xaa, 0x8b, 0x6a, 0xf1, 0xf0, 0x59, - 0x8c, 0x62, 0xb4, 0x98, 0xcb, 0x6d, 0x6c, 0xb2, 0x36, 0x91, 0x78, 0x2a, 0xd7, 0x1d, 0x68, 0x65, - 0x63, 0x64, 0x28, 0xa7, 0x66, 0x77, 0x7c, 0x29, 0xb9, 0xe3, 0x15, 0xb6, 0x55, 0x54, 0x21, 0x42, - 0xed, 0x13, 0x74, 0x31, 0x0b, 0x0f, 0x7b, 0xfc, 0x16, 0x76, 0x33, 0xf8, 0xfe, 0x5f, 0x8f, 0xe3, - 0x29, 0x7c, 0x15, 0x48, 0xc9, 0xdf, 0x0b, 0x23, 0xfa, 0x54, 0x3a, 0xcc, 0xf8, 0xda, 0x27, 0xbd, - 0xa5, 0x95, 0x5e, 0x0c, 0xd1, 0x1e, 0xc3, 0x7d, 0x1c, 0x1b, 0xda, 0xdc, 0x4e, 0xad, 0xda, 0xc9, - 0x09, 0x21, 0xfe, 0x14, 0x99, 0x17, 0x06, 0xc8, 0xc9, 0x07, 0x77, 0xc2, 0x7a, 0x0a, 0x99, 0x34, - 0x5e, 0xd7, 0x46, 0x87, 0x97, 0xc2, 0x05, 0xb6, 0x3f, 0x49, 0x72, 0x5d, 0xed, 0x3a, 0x06, 0x45, - 0xc5, 0xd7, 0x4a, 0xfa, 0xfc, 0x64, 0x9a, 0xe6, 0x21, 0xc5, 0x46, 0x21, 0x4a, 0xcf, 0x12, 0x32, - 0xa6, 0xe5, 0xbf, 0xd6, 0xde, 0xe7, 0xc7, 0xe1, 0x0c, 0xa8, 0x98, 0xdd, 0x28, 0x54, 0x31, 0x83, - 0xbe, 0x1c, 0xd4, 0xd9, 0x30, 0xef, 0x85, 0x08, 0x8a, 0x3f, 0x7b, 0xb6, 0xfd, 0xb4, 0x7e, 0xeb, - 0xbf, 0xbd, 0xaa, 0x7f, 0x82, 0xa2, 0xa7, 0x93, 0xb1, 0xa4, 0x5d, 0x7c, 0xc8, 0x0e, 0xf1, 0xbc, - 0x96, 0x99, 0xa4, 0x5e, 0x14, 0xbc, 0x76, 0x95, 0xa1, 0x43, 0xce, 0x56, 0xf6, 0x6b, 0xd8, 0xd5, - 0x99, 0x28, 0xbb, 0x54, 0x6e, 0xf8, 0xf3, 0x2b, 0x99, 0xb1, 0xe3, 0xb7, 0x90, 0xdc, 0xc2, 0x1a, - 0xdb, 0xa8, 0x7f, 0x85, 0x35, 0x21, 0xd9, 0x72, 0xf2, 0xf6, 0xb6, 0xa5, 0x23, 0x12, 0x44, 0x6a, - 0xa5, 0xd4, 0x7f, 0x8e, 0xbf, 0x37, 0xe3, 0x54, 0x89, 0x27, 0xf4, 0xf6, 0xfc, 0x41, 0x76, 0x31, - 0xd5, 0xda, 0xa9, 0x11, 0x24, 0xf8, 0xf8, 0x52, 0xd8, 0x31, 0xa9, 0x5b, 0x18, 0x83, 0x33, 0x30, - 0x36, 0x7d, 0xb7, 0x4c, 0xf6, 0x94, 0x9f, 0xe3, 0xed, 0x6f, 0x5a, 0xa7, 0xbe, 0x6f, 0xf8, 0x29, - 0xb6, 0xf7, 0x97, 0x52, 0xd0, 0xcd, 0xd0, 0xef, 0x2f, 0x82, 0xbd, 0x22, 0x34, 0xb2, 0xf3, 0xc3, - 0x53, 0xa4, 0xfc, 0xf8, 0x2c, 0xab, 0xaa, 0x65, 0x0d, 0x34, 0xcb, 0xf1, 0x84, 0x0d, 0x66, 0x38, - 0x39, 0x7c, 0x14, 0xc8, 0xc7, 0xa6, 0x3c, 0x77, 0xbd, 0x92, 0xf2, 0x31, 0xec, 0x7d, 0xf1, 0x98, - 0xdd, 0xc2, 0xc6, 0x0f, 0x69, 0xa4, 0x37, 0xa5, 0x56, 0x8e, 0xcb, 0x98, 0xf1, 0x96, 0xb2, 0x41, - 0x92, 0x24, 0x34, 0x43, 0xb4, 0x62, 0xce, 0xd5, 0x27, 0x96, 0xca, 0xbb, 0xc8, 0xcf, 0x85, 0x08, - 0x5e, 0x32, 0x6e, 0x6c, 0x28, 0x6e, 0x64, 0x6e, 0xa8, 0xe7, 0x3c, 0xa1, 0xfa, 0x94, 0x65, 0x95, - 0x1e, 0xe7, 0xc6, 0x6e, 0xc6, 0x5c, 0x2b, 0x0e, 0x62, 0xb9, 0x8e, 0xb5, 0xf2, 0x31, 0xe1, 0x42, - 0xcc, 0xc7, 0x06, 0xc9, 0x0d, 0x39, 0xf9, 0xa0, 0xff, 0x99, 0xf5, 0xaf, 0x85, 0x28, 0x71, 0xaa, - 0xaa, 0xd3, 0x34, 0x69, 0x1e, 0x47, 0x83, 0xe4, 0xc7, 0xc7, 0x81, 0xda, 0xa6, 0xbe, 0x36, 0x46, - 0x8a, 0x8d, 0xcb, 0xd1, 0xd0, 0xcf, 0xe0, 0xd6, 0xa6, 0xeb, 0x93, 0x0e, 0x7b, 0x66, 0x8d, 0x4a, - 0x30, 0xd5, 0x44, 0xa8, 0xbf, 0xc2, 0x92, 0x77, 0xd8, 0xc8, 0xfd, 0xed, 0xb4, 0x78, 0xd4, 0xc8, - 0x49, 0x19, 0x67, 0xcc, 0xbf, 0x85, 0x3a, 0x0d, 0xd3, 0xa5, 0x46, 0x44, 0x51, 0x2b, 0x36, 0x50, - 0xe8, 0x68, 0x3a, 0x31, 0xa3, 0x25, 0x2b, 0x8c, 0x8c, 0x5f, 0x1d, 0x33, 0x2d, 0xa5, 0x0e, 0x91, - 0x68, 0x8e, 0x24, 0xb0, 0x7d, 0xad, 0xce, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x40, 0x20, 0x30, - 0xab, 0xd1, 0x9a, 0x0e, 0x38, 0x23, 0x2b, 0xde, 0xf1, 0x31, 0x31, 0x64, 0xdb, 0x33, 0x0b, 0x62, - 0x84, 0x0b, 0xcb, 0x33, 0x19, 0xe2, 0x65, 0x99, 0x88, 0x9f, 0x4d, 0x72, 0x8b, 0x55, 0xa8, 0xce, - 0x84, 0xbc, 0x2f, 0xd1, 0xfa, 0xfa, 0xb9, 0x17, 0xca, 0x18, 0xe5, 0xfc, 0x40, 0xf2, 0x8e, 0xd1, - 0x18, 0xec, 0xa8, 0xd2, 0xab, 0x1e, 0x20, 0x2e, 0xf4, 0x67, 0xf9, 0xbc, 0xd7, 0x13, 0x13, 0xb3, - 0x8c, 0x1b, 0xb1, 0x5d, 0xfc, 0x40, 0x40, 0x86, 0xf8, 0x3a, 0xbc, 0x14, 0x52, 0x91, 0x9f, 0xf0, - 0xb2, 0xe4, 0x9c, 0xbc, 0x56, 0xe2, 0x3a, 0x0a, 0xb1, 0x27, 0x45, 0x64, 0x11, 0xe2, 0x07, 0x06, - 0x1d, 0xac, 0x3d, 0x9f, 0xfb, 0xbf, 0xe1, 0x02, 0xbe, 0xd5, 0x55, 0x55, 0x57, 0xe2, 0x37, 0x6d, - 0x33, 0xf5, 0x83, 0x5e, 0x24, 0x10, 0xca, 0x0c, 0x41, 0x6f, 0x3f, 0xf6, 0x71, 0x3e, 0x27, 0xe2, - 0x3c, 0x43, 0x32, 0x49, 0x51, 0xe2, 0x75, 0x88, 0x82, 0x0e, 0x83, 0x3d, 0x17, 0xc2, 0x41, 0x2b, - 0x29, 0x61, 0x79, 0xb3, 0x89, 0x08, 0x6c, 0x21, 0xdc, 0xbb, 0xb3, 0x60, 0x6a, 0xb7, 0xe2, 0x41, - 0x09, 0x6c, 0x68, 0x63, 0x29, 0x97, 0xf8, 0xa3, 0x27, 0x22, 0x1a, 0x4d, 0xa1, 0xf1, 0x17, 0x56, - 0x5f, 0x8b, 0xe9, 0x98, 0x6b, 0x4d, 0xfc, 0xa5, 0x36, 0x7f, 0x12, 0x5d, 0xd0, 0xfc, 0x40, 0x23, - 0xee, 0xef, 0xe2, 0x08, 0x20, 0xd8, 0x6c, 0x33, 0x1f, 0x84, 0x38, 0xae, 0x82, 0x69, 0x54, 0xe4, - 0x13, 0x83, 0x3f, 0x8f, 0xe4, 0x3a, 0xf8, 0xcb, 0xe2, 0xff, 0x76, 0xe1, 0x65, 0x13, 0x88, 0x62, - 0xee, 0xf3, 0x44, 0x50, 0x8e, 0xe2, 0x2a, 0xf2, 0xf1, 0x47, 0x1f, 0xcb, 0x8b, 0x2b, 0x1f, 0x87, - 0x69, 0x15, 0x9d, 0x8d, 0xfd, 0xb4, 0xd7, 0x19, 0xef, 0xfc, 0x47, 0x34, 0xb9, 0xff, 0xc9, 0xa4, - 0x9f, 0xc4, 0xe3, 0xff, 0xf6, 0x57, 0x3f, 0x18, 0x7c, 0xfe, 0x8d, 0x1d, 0x5d, 0x2d, 0xdf, 0x5c, - 0x26, 0x47, 0xae, 0xb6, 0x97, 0x09, 0x90, 0xfd, 0x5b, 0x54, 0xb2, 0x73, 0x77, 0xaa, 0xba, 0xe2, - 0xb7, 0x6e, 0x76, 0x38, 0x88, 0x98, 0x26, 0x28, 0x62, 0xa4, 0x7f, 0x03, 0x33, 0x34, 0x38, 0x8b, - 0x9c, 0x44, 0x67, 0x69, 0x34, 0x34, 0x74, 0xd3, 0x39, 0xd6, 0x58, 0x97, 0xe7, 0x8a, 0xf8, 0x50, - 0x94, 0xe4, 0xea, 0xae, 0x61, 0xac, 0xbe, 0xe7, 0xeb, 0x39, 0x3c, 0xbe, 0x13, 0x8d, 0x18, 0xf6, - 0xe9, 0xa2, 0x2f, 0xf1, 0x94, 0xa8, 0xd2, 0x53, 0x9a, 0x8d, 0x22, 0xac, 0x8b, 0xb4, 0x50, 0xdc, - 0x8e, 0xcb, 0xa3, 0xda, 0xe1, 0x01, 0x80, 0x22, 0x8a, 0xec, 0x40, 0x81, 0x84, 0x0b, 0x23, 0xc1, - 0x81, 0xe2, 0x80, 0x27, 0x35, 0xaf, 0x27, 0xc9, 0x6a, 0xf8, 0x37, 0x13, 0xe7, 0x35, 0xf2, 0x4f, - 0x84, 0x3b, 0x94, 0x83, 0xa8, 0xb8, 0x85, 0x87, 0x2b, 0xd7, 0xf0, 0x50, 0x54, 0xa1, 0x55, 0xf1, - 0xab, 0x08, 0xcb, 0x4e, 0x39, 0xc7, 0xf1, 0x22, 0xcb, 0x81, 0x0f, 0xd2, 0x39, 0x64, 0x5d, 0xd9, - 0xe2, 0x41, 0x5d, 0x1d, 0xee, 0xed, 0x0c, 0xef, 0x36, 0x69, 0xd9, 0x19, 0xa1, 0xcf, 0x12, 0x20, - 0x67, 0x17, 0x08, 0x5b, 0x63, 0x02, 0xa8, 0xcb, 0xf0, 0x44, 0x1b, 0xad, 0x5e, 0x4e, 0xac, 0xae, - 0x09, 0xc3, 0x15, 0x7b, 0xa8, 0x85, 0x46, 0xea, 0x1e, 0xc3, 0x71, 0xf1, 0xc7, 0xeb, 0x5b, 0xec, - 0x28, 0x69, 0x36, 0xca, 0xb8, 0x46, 0xca, 0x67, 0xec, 0x8f, 0x18, 0xeb, 0xd3, 0xf0, 0xa5, 0x34, - 0xf8, 0xee, 0x09, 0x7c, 0xfb, 0x67, 0x9e, 0x5c, 0x2f, 0x86, 0xca, 0xa8, 0xa9, 0xad, 0xdb, 0x4f, - 0xcb, 0xc1, 0x75, 0xb4, 0x56, 0x89, 0x1d, 0x0d, 0xaf, 0x86, 0x4b, 0x37, 0x4a, 0x25, 0xf7, 0x5a, - 0x97, 0x82, 0x71, 0x5a, 0x49, 0x59, 0xdd, 0x3f, 0xc1, 0x46, 0x8e, 0x7a, 0xa5, 0xaf, 0x05, 0x74, - 0x19, 0xa8, 0xc8, 0x9b, 0x0d, 0x1e, 0xe6, 0x3f, 0x57, 0xe4, 0xde, 0xfe, 0xef, 0x77, 0xc4, 0xc1, - 0x2d, 0xf4, 0xe7, 0x7d, 0xdf, 0xe2, 0x88, 0xf9, 0x7b, 0xb8, 0xae, 0x5f, 0xc4, 0xd7, 0x24, 0xbc, - 0xbd, 0x8f, 0x84, 0x62, 0x2f, 0x4c, 0x67, 0x2f, 0x13, 0x49, 0xe1, 0x11, 0x00, 0x96, 0x78, 0xe1, - 0x63, 0xf7, 0x53, 0xef, 0xb1, 0x63, 0x09, 0x1f, 0x42, 0x63, 0x43, 0x4f, 0x17, 0x98, 0x34, 0xee, - 0xff, 0x18, 0x7a, 0xd7, 0x56, 0x35, 0x23, 0x76, 0x64, 0xf8, 0x89, 0x6c, 0xb0, 0xeb, 0xf2, 0xe2, - 0xc9, 0xb8, 0xef, 0xbb, 0x7f, 0x17, 0x4a, 0xf9, 0xb0, 0x2a, 0x4c, 0x89, 0xb2, 0xbc, 0xb1, 0x2c, - 0x3c, 0x3f, 0x13, 0x12, 0x72, 0x24, 0xbd, 0xd9, 0x6f, 0xb3, 0x54, 0x79, 0x67, 0x11, 0x88, 0xc2, - 0x20, 0x90, 0xa5, 0xc2, 0xe0, 0x18, 0xdf, 0x03, 0xb4, 0x0f, 0xce, 0xe1, 0x00, 0x88, 0x7f, 0xbb, - 0xda, 0x47, 0x00, 0xe1, 0xc0, 0xe1, 0x30, 0x5c, 0xe1, 0xc1, 0xe7, 0x88, 0xda, 0xfd, 0xb1, 0x57, - 0x84, 0x04, 0x94, 0x8a, 0x4c, 0x6b, 0x1a, 0x88, 0xfc, 0x11, 0x5e, 0x70, 0xc0, 0x6f, 0x71, 0x12, - 0x77, 0x7c, 0x44, 0xdb, 0x51, 0x7c, 0x44, 0x23, 0xa4, 0xdc, 0x52, 0xdd, 0x53, 0x2e, 0xc5, 0x6a, - 0xe0, 0x8f, 0x8b, 0x97, 0x4d, 0x97, 0xc9, 0x8d, 0x1b, 0x12, 0x5b, 0xee, 0xa2, 0x04, 0x9b, 0x17, - 0x8b, 0xe2, 0x61, 0x2f, 0x2d, 0xb6, 0x2e, 0x5e, 0x99, 0xc9, 0x9c, 0x22, 0x20, 0x75, 0x7f, 0xae, - 0x77, 0x6e, 0xe2, 0xeb, 0x5c, 0x40, 0x82, 0x43, 0xbe, 0x14, 0x97, 0x7a, 0xff, 0x11, 0x88, 0x7e, - 0x2b, 0xbb, 0xf9, 0xb2, 0x08, 0x0a, 0xef, 0x82, 0x28, 0xe2, 0x17, 0xae, 0x1c, 0x4c, 0xb3, 0x42, - 0x20, 0x30, 0x82, 0x78, 0x9c, 0x91, 0x02, 0x48, 0x5a, 0x53, 0xfc, 0x44, 0x5f, 0x15, 0xbe, 0xef, - 0x89, 0x13, 0xe2, 0x45, 0xee, 0x98, 0x87, 0x0d, 0x98, 0x92, 0xf2, 0xf3, 0xfa, 0xf2, 0x70, 0x51, - 0x5b, 0x8c, 0x16, 0x4f, 0x79, 0xdf, 0x71, 0x10, 0x5b, 0x13, 0x82, 0x6b, 0x5b, 0x7b, 0x10, 0x51, - 0x84, 0x78, 0x90, 0x8a, 0xf7, 0x84, 0x02, 0x1c, 0x98, 0x9b, 0x97, 0x2e, 0xe7, 0xfa, 0x84, 0x20, - 0x96, 0x5d, 0xbd, 0xde, 0xf8, 0x71, 0x10, 0x4b, 0x9a, 0xdc, 0x9d, 0xf2, 0x43, 0x2a, 0x7b, 0x47, - 0xe3, 0x8c, 0x48, 0x80, 0x4c, 0x70, 0x39, 0x94, 0x60, 0xf6, 0xec, 0xf8, 0xfe, 0xf7, 0x63, 0x88, - 0xfe, 0xb1, 0x1f, 0x17, 0xab, 0xd6, 0x39, 0xf1, 0xfe, 0x2e, 0x20, 0x47, 0x18, 0x94, 0xe8, 0x53, - 0x4f, 0xeb, 0xa8, 0x6b, 0xb2, 0xbb, 0x78, 0xde, 0x62, 0xad, 0x59, 0xf1, 0x05, 0xad, 0x7c, 0x4f, - 0x89, 0x08, 0x88, 0x9b, 0xf5, 0x0b, 0xd4, 0xbd, 0x64, 0xef, 0xc4, 0x33, 0x98, 0x91, 0x6c, 0x94, - 0xd4, 0x40, 0x90, 0xa4, 0x5c, 0x34, 0xf7, 0x42, 0x02, 0xc2, 0xdc, 0x35, 0x9e, 0xc3, 0x16, 0x32, - 0x39, 0x79, 0xfb, 0xb7, 0x7e, 0xde, 0xfe, 0xdf, 0x87, 0x11, 0x05, 0xb7, 0x7e, 0x94, 0x7b, 0xcf, - 0x5c, 0x5d, 0xdb, 0xf9, 0x73, 0xc2, 0x42, 0x0f, 0xed, 0x49, 0xac, 0xae, 0xb8, 0x43, 0x69, 0x8c, - 0xfd, 0x68, 0xe5, 0x5d, 0xf6, 0xfe, 0x2c, 0xae, 0x87, 0x3f, 0x4d, 0x95, 0xd7, 0x29, 0x5d, 0x70, - 0x4b, 0xcd, 0x55, 0x49, 0x5f, 0xe2, 0x44, 0x05, 0x37, 0x77, 0x89, 0xf7, 0x59, 0x25, 0xee, 0x79, - 0x60, 0x3d, 0xd4, 0x58, 0x76, 0xd4, 0xdb, 0x6c, 0x7f, 0x89, 0x30, 0x5c, 0x0e, 0xd8, 0x82, 0x85, - 0x1d, 0x3b, 0x7c, 0x2d, 0xad, 0xef, 0x93, 0x12, 0x27, 0xd5, 0x45, 0xc9, 0xe4, 0xfc, 0x49, 0xb5, - 0x3c, 0x16, 0x5c, 0xc4, 0xc8, 0x7b, 0xdf, 0xeb, 0x8f, 0x10, 0x6f, 0x23, 0xd8, 0x97, 0x7b, 0xcb, - 0xef, 0xec, 0xa4, 0x0c, 0x0d, 0xb5, 0x87, 0x51, 0x44, 0x41, 0x55, 0xcc, 0x89, 0x6a, 0x36, 0x5b, - 0x51, 0x26, 0x8a, 0x31, 0xc9, 0x08, 0xde, 0x94, 0x6e, 0x10, 0x8c, 0xac, 0x75, 0x60, 0xe2, 0xb8, - 0x31, 0x97, 0x6e, 0x9d, 0xa1, 0x79, 0x78, 0x8f, 0x10, 0x60, 0xec, 0x92, 0xff, 0x04, 0x9d, 0xc5, - 0x7f, 0xf9, 0x4a, 0xf1, 0x0e, 0x0a, 0xc9, 0xcd, 0xce, 0xc3, 0x85, 0x3a, 0x37, 0x45, 0xf1, 0x62, - 0x73, 0x51, 0x75, 0x55, 0x89, 0x31, 0x37, 0x10, 0x39, 0xe3, 0xcc, 0x2b, 0x3c, 0x0f, 0x9f, 0xc6, - 0xed, 0x0f, 0xca, 0x6d, 0x3f, 0x9b, 0xaa, 0x96, 0x23, 0xf0, 0xa7, 0x9b, 0x2d, 0xcd, 0xef, 0x74, - 0x87, 0xd8, 0xed, 0xef, 0xf1, 0x57, 0x8a, 0xf1, 0x23, 0x09, 0x7e, 0x27, 0x2f, 0x04, 0xa2, 0xd7, - 0xaa, 0x93, 0x36, 0x30, 0xe6, 0x00, 0x09, 0x3c, 0x51, 0x05, 0x8b, 0xb4, 0x75, 0x1b, 0xea, 0x11, - 0xd0, 0x53, 0x0c, 0x1a, 0xd2, 0x3e, 0x99, 0xe2, 0x53, 0x20, 0xd1, 0xe4, 0x77, 0xac, 0xf9, 0x56, - 0x4e, 0xe0, 0xb5, 0x0e, 0x41, 0x9f, 0x80, 0xd7, 0x88, 0xfe, 0x8f, 0xf0, 0x88, 0x16, 0x42, 0x84, - 0x85, 0x4a, 0xd5, 0x93, 0x7c, 0x4c, 0x1f, 0x5b, 0xf8, 0xed, 0xc1, 0x95, 0x44, 0x6e, 0xb5, 0x09, - 0x6d, 0x29, 0x3f, 0x4a, 0x47, 0x39, 0xd2, 0x07, 0x30, 0x00, 0xd3, 0x60, 0x8a, 0x78, 0x84, 0x04, - 0x7a, 0xfb, 0xbf, 0x32, 0x3f, 0x8b, 0x75, 0x9b, 0x8a, 0x58, 0xe6, 0xf0, 0x76, 0xf1, 0xbe, 0x16, - 0x1f, 0xc3, 0x8d, 0xd1, 0x73, 0x6b, 0x39, 0x65, 0xc0, 0xbe, 0x8a, 0x5b, 0x6e, 0x21, 0xde, 0xde, - 0x10, 0x8d, 0x28, 0x2a, 0xbf, 0x2e, 0x51, 0x3f, 0x0c, 0xea, 0xdb, 0x76, 0x30, 0x0c, 0x3d, 0x24, - 0x7f, 0xd0, 0x9b, 0x67, 0xae, 0x84, 0x75, 0x98, 0x08, 0x88, 0xd5, 0x81, 0x64, 0x42, 0xfb, 0xd7, - 0x9c, 0x38, 0x11, 0x21, 0xb9, 0xe2, 0x1a, 0x45, 0xe3, 0x48, 0xfc, 0x27, 0xd7, 0xa2, 0x38, 0x22, - 0xae, 0xad, 0xc4, 0xc4, 0x19, 0x2b, 0xd5, 0x7f, 0x10, 0x4c, 0x6f, 0xcd, 0xa6, 0xe8, 0xd6, 0x24, - 0xc2, 0x6f, 0x7e, 0x22, 0x78, 0x99, 0x0b, 0x05, 0x7f, 0x7c, 0x48, 0x93, 0x0a, 0x2e, 0x5e, 0xb9, - 0xaf, 0x79, 0x78, 0x70, 0x4c, 0x1d, 0x4c, 0x40, 0x75, 0xa0, 0x4a, 0x04, 0xa2, 0x30, 0x2a, 0xe3, - 0x9d, 0x48, 0x14, 0x8a, 0xc5, 0x3c, 0x22, 0x24, 0x69, 0x85, 0xc7, 0x33, 0x1a, 0x50, 0xcb, 0xcb, - 0xa0, 0xcb, 0x35, 0x88, 0x85, 0x80, 0x58, 0x7c, 0x00, 0xc0, 0xe0, 0x0e, 0x0c, 0x74, 0xa3, 0x80, - 0x0a, 0x91, 0x49, 0x62, 0x2c, 0x32, 0xc3, 0x51, 0x70, 0x96, 0xcc, 0x19, 0x03, 0x4c, 0x9a, 0xfe, - 0x5f, 0xda, 0xb6, 0xdf, 0x12, 0x06, 0x90, 0xa5, 0x80, 0x3b, 0xc9, 0x25, 0xf4, 0x8c, 0x46, 0x5c, - 0xf9, 0x20, 0x0a, 0x96, 0x00, 0xcb, 0x00, 0x18, 0x90, 0x73, 0x06, 0x4d, 0x04, 0xa9, 0x3a, 0x23, - 0x07, 0x65, 0x50, 0xf1, 0xb6, 0xa0, 0xb2, 0x25, 0x84, 0x44, 0xf1, 0x08, 0xa5, 0xae, 0x24, 0x08, - 0x21, 0x43, 0x39, 0x40, 0x59, 0x45, 0x1d, 0x63, 0xe8, 0x2d, 0xcb, 0xc4, 0x4b, 0x20, 0xcf, 0x0f, - 0x3e, 0x48, 0x9e, 0x35, 0x81, 0x27, 0x0f, 0x30, 0x1d, 0x05, 0xce, 0x00, 0xfa, 0xe1, 0x00, 0x20, - 0x85, 0x0a, 0x57, 0x36, 0x45, 0x6d, 0xa6, 0x4b, 0xa1, 0x6e, 0x2f, 0xac, 0xb6, 0xf2, 0xc7, 0x18, - 0x97, 0x0f, 0x33, 0x45, 0x3a, 0x0b, 0x34, 0x45, 0xad, 0x33, 0x29, 0x2d, 0x3a, 0x00, 0xb2, 0x88, - 0xd4, 0xc9, 0x9e, 0x99, 0x07, 0x39, 0x2d, 0xaf, 0xe5, 0xbb, 0x5a, 0xe3, 0xe6, 0xda, 0x4f, 0x97, - 0x2e, 0xeb, 0x5c, 0xb5, 0x97, 0xcf, 0xc6, 0xde, 0x56, 0x25, 0xe5, 0x85, 0xde, 0xf5, 0x10, 0xb0, - 0xab, 0x70, 0x97, 0xf7, 0x96, 0x1c, 0x49, 0xaa, 0xab, 0xc4, 0x89, 0x18, 0x47, 0x70, 0x31, 0xee, - 0xba, 0xc8, 0x62, 0xee, 0xce, 0x6f, 0x1a, 0xcd, 0xfc, 0x11, 0x89, 0x78, 0x35, 0x33, 0x1a, 0x65, - 0xea, 0xd7, 0x82, 0x11, 0xa6, 0x55, 0x37, 0x91, 0x8a, 0xd1, 0x74, 0x17, 0xac, 0xa2, 0xa8, 0xb4, - 0xca, 0x6e, 0xf9, 0x47, 0x57, 0x20, 0xf0, 0xc3, 0x87, 0x4c, 0x2d, 0x84, 0x7f, 0x1f, 0x86, 0x02, - 0x03, 0x6e, 0xc0, 0x00, 0x8a, 0x93, 0xbc, 0xab, 0x63, 0xea, 0xc4, 0x9e, 0xd6, 0x7e, 0x28, 0x7c, - 0x44, 0xc1, 0x01, 0xe2, 0x30, 0x07, 0xf8, 0xb8, 0xf0, 0x0e, 0x0a, 0x63, 0x4a, 0xfd, 0xb7, 0xb7, - 0x84, 0x40, 0xc2, 0x14, 0xa1, 0x3f, 0x01, 0x82, 0x90, 0x13, 0x15, 0x2a, 0xca, 0xe8, 0x02, 0x85, - 0x2a, 0x14, 0x71, 0x17, 0x24, 0xd6, 0x57, 0xe6, 0x60, 0x86, 0x93, 0x99, 0x6f, 0x21, 0x4a, 0x85, - 0x83, 0x63, 0x82, 0x90, 0x24, 0x8d, 0xb3, 0xac, 0x45, 0xc2, 0x70, 0xb1, 0xa9, 0xbc, 0xd1, 0x7c, - 0xb2, 0x50, 0x6e, 0x0a, 0xa7, 0x61, 0xcd, 0x0f, 0x6e, 0xc3, 0xf8, 0x08, 0x65, 0x58, 0xb6, 0x97, - 0xe0, 0x49, 0x02, 0x48, 0xd9, 0xdc, 0xfb, 0xb8, 0x31, 0x25, 0x2f, 0x77, 0x8d, 0xf8, 0xd0, 0x9a, - 0x9d, 0xea, 0x24, 0x69, 0xcb, 0xa2, 0x1d, 0xf8, 0x71, 0x40, 0x08, 0x76, 0x80, 0xd7, 0x7d, 0x83, - 0x7f, 0xba, 0xaf, 0x1a, 0x6e, 0xc8, 0xbe, 0x36, 0xe9, 0xce, 0xd8, 0xff, 0x8f, 0x7a, 0x1f, 0xea, - 0xb5, 0x43, 0xb6, 0xa0, 0x7c, 0xe3, 0xa4, 0x0f, 0x5b, 0xf8, 0x64, 0x48, 0xd9, 0xc0, 0x79, 0xc7, - 0x0b, 0xa4, 0x22, 0xa1, 0xe1, 0xc2, 0x5d, 0x0f, 0x00, 0xf2, 0xc0, 0xcf, 0x1e, 0x1f, 0x01, 0xd4, - 0x78, 0x38, 0x70, 0x00, 0x2c, 0x14, 0x14, 0xa7, 0x01, 0x60, 0x99, 0xac, 0x37, 0x71, 0xc5, 0x79, - 0x6f, 0xfe, 0x36, 0x59, 0x92, 0x81, 0x51, 0x73, 0xcf, 0x78, 0x3c, 0xd4, 0x22, 0xd8, 0x38, 0xf1, - 0xea, 0x18, 0x8b, 0x09, 0x34, 0x96, 0x2a, 0x99, 0x79, 0x50, 0x13, 0x60, 0x72, 0xb0, 0xeb, 0x15, - 0x0e, 0xc4, 0x4b, 0x12, 0xc2, 0x2b, 0xff, 0x04, 0x62, 0x67, 0x2a, 0xc8, 0x43, 0xa3, 0x54, 0x4f, - 0x56, 0x93, 0x8a, 0x2a, 0x56, 0x9c, 0x77, 0x33, 0xb0, 0xfe, 0x11, 0x31, 0x4c, 0xae, 0xd0, 0x67, - 0x50, 0x69, 0x33, 0x2a, 0x8f, 0xb1, 0x22, 0x73, 0x17, 0x9a, 0x9e, 0xae, 0x09, 0x13, 0x1f, 0x4d, - 0xef, 0xb5, 0x75, 0x2f, 0xa5, 0xc4, 0x02, 0x9b, 0xbe, 0xf9, 0xfb, 0xce, 0xc3, 0x73, 0xfc, 0x41, - 0x8d, 0xe3, 0xe2, 0x1e, 0xb2, 0xe6, 0xfc, 0x4c, 0x91, 0x31, 0x03, 0xa3, 0x0e, 0x8e, 0x27, 0xc3, - 0x47, 0x05, 0x98, 0xf0, 0x4f, 0x0a, 0xf2, 0xcb, 0xc2, 0x9c, 0x1b, 0x9f, 0xf5, 0x6f, 0x12, 0x08, - 0xce, 0x4f, 0x2f, 0xa4, 0xac, 0x20, 0x17, 0xba, 0xd2, 0x00, 0x6a, 0x49, 0x80, 0x57, 0xcd, 0x81, - 0x2b, 0x4c, 0xe0, 0x7d, 0x0b, 0xf0, 0xc8, 0x0f, 0x91, 0xa6, 0x3c, 0x00, 0x09, 0xf1, 0xd3, 0xe5, - 0x50, 0x6a, 0xbd, 0x4b, 0xc7, 0xbf, 0x83, 0xdf, 0x27, 0x1c, 0x13, 0xd4, 0xa8, 0x17, 0x52, 0x10, - 0x43, 0x5d, 0xa6, 0x73, 0x81, 0xc7, 0x41, 0x52, 0xb1, 0xe0, 0x3c, 0x81, 0x03, 0xd0, 0xbc, 0xb4, - 0xa6, 0x9a, 0x69, 0xe1, 0x80, 0x80, 0x52, 0x48, 0x0a, 0xba, 0x6a, 0x1c, 0x87, 0xc7, 0x80, 0x78, - 0x58, 0x0c, 0x1d, 0xf0, 0xaa, 0x1a, 0x9f, 0xe1, 0xd2, 0x35, 0x0e, 0x26, 0x1a, 0x9d, 0xfd, 0x52, - 0x2e, 0x4c, 0x6c, 0x35, 0x28, 0x01, 0xf8, 0xe3, 0x1c, 0xf3, 0x22, 0xc8, 0x45, 0x5e, 0x4f, 0xa6, - 0x9b, 0xa7, 0xd8, 0xfe, 0x1b, 0x3f, 0x2d, 0x63, 0xbf, 0x0a, 0xa5, 0x1c, 0x0f, 0x01, 0x91, 0x85, - 0x3b, 0xf5, 0x39, 0xe6, 0xa0, 0x55, 0xb5, 0x4c, 0xb6, 0x50, 0x46, 0xc7, 0x1c, 0x05, 0x78, 0x58, - 0x0a, 0xb8, 0xa0, 0xc7, 0x9f, 0x38, 0x01, 0xf0, 0xea, 0x80, 0x20, 0x31, 0x41, 0xa8, 0xb4, 0xe3, - 0xd5, 0xea, 0x3b, 0x71, 0x0f, 0x7f, 0x39, 0xd2, 0xb6, 0xa5, 0xd9, 0xff, 0x8f, 0xe2, 0x34, 0xeb, - 0x6f, 0xa9, 0xc5, 0xfe, 0x08, 0x44, 0x8c, 0x20, 0x76, 0x09, 0x46, 0xa2, 0x3f, 0x0f, 0x16, 0x07, - 0x95, 0x86, 0x04, 0x35, 0xf3, 0x38, 0x69, 0x16, 0xbb, 0x39, 0xc1, 0x41, 0x96, 0x37, 0x81, 0xe2, - 0xa0, 0xcf, 0x1e, 0x03, 0x89, 0x41, 0xf6, 0x11, 0x12, 0x36, 0x50, 0xaa, 0x3b, 0x94, 0xd4, 0xd3, - 0x01, 0xfb, 0x49, 0x20, 0x07, 0x8e, 0x05, 0x87, 0x26, 0xe9, 0xc0, 0xe3, 0x81, 0x90, 0xb0, 0x06, - 0x6e, 0xbc, 0xe6, 0xfc, 0xb0, 0x19, 0x41, 0xd4, 0x1d, 0x4a, 0xdc, 0x1d, 0xfc, 0xf8, 0x4b, 0x13, - 0xf4, 0x5a, 0x8c, 0xee, 0xf7, 0x9f, 0xab, 0x2a, 0x22, 0x42, 0x4d, 0xed, 0xf1, 0x21, 0x1a, 0xd6, - 0x56, 0x32, 0x43, 0x13, 0xc4, 0xf1, 0x10, 0x53, 0x52, 0xfd, 0xe5, 0x63, 0x5b, 0x6e, 0x97, 0x0c, - 0x82, 0x0e, 0x6e, 0x10, 0x88, 0x92, 0x02, 0x8d, 0x1c, 0x5a, 0xa4, 0x85, 0x30, 0xc6, 0x57, 0x2d, - 0x69, 0x74, 0x37, 0x7d, 0x02, 0xc6, 0x96, 0xc3, 0x1b, 0x27, 0x8d, 0x77, 0xc3, 0xb8, 0x02, 0xc4, - 0x88, 0x54, 0xc6, 0xe0, 0xac, 0xe9, 0x1a, 0x7e, 0x54, 0x91, 0x40, 0x99, 0xa5, 0x51, 0x36, 0xc3, - 0xe3, 0xcb, 0x0f, 0xe5, 0x08, 0xba, 0x33, 0xbc, 0xb0, 0x57, 0xba, 0x99, 0xfe, 0x5f, 0x0c, 0x9b, - 0xce, 0x59, 0x81, 0xb8, 0x80, 0xbe, 0x2e, 0x8f, 0xdf, 0xdd, 0x3f, 0x82, 0x91, 0x84, 0xdc, 0xb8, - 0x5b, 0x14, 0x19, 0xee, 0x0a, 0xd5, 0xd0, 0xf1, 0xf6, 0x3a, 0x7c, 0xb6, 0xeb, 0x53, 0x0d, 0x2c, - 0xc6, 0x24, 0x10, 0x82, 0xcc, 0x4f, 0x05, 0xcb, 0x0d, 0xfa, 0x96, 0x20, 0x6d, 0x44, 0x70, 0xe6, - 0xf4, 0xcb, 0x08, 0x89, 0x19, 0x1d, 0x2e, 0x57, 0x73, 0xbb, 0xb4, 0xf7, 0x3a, 0xe7, 0x81, 0xc2, - 0x60, 0xa8, 0x22, 0x23, 0x30, 0xee, 0x4f, 0x00, 0x1e, 0x5e, 0xa7, 0x9c, 0x2f, 0xe0, 0x84, 0x61, - 0x7a, 0x99, 0x95, 0xdc, 0x5f, 0x5d, 0x25, 0x24, 0xf1, 0x21, 0x91, 0x91, 0x2e, 0x13, 0x02, 0xa5, - 0xef, 0xc3, 0xc1, 0xc1, 0xd7, 0x9e, 0xdb, 0x85, 0x55, 0x98, 0xa2, 0xf1, 0xb7, 0x69, 0xf7, 0x12, - 0x0c, 0x02, 0x97, 0x72, 0xcb, 0x8c, 0x47, 0x39, 0xef, 0x5d, 0x59, 0xee, 0xbb, 0x58, 0xcb, 0xcf, - 0xf2, 0xc0, 0xc9, 0x91, 0x02, 0x8a, 0x28, 0x25, 0xea, 0xd1, 0x3c, 0x39, 0x82, 0xa2, 0x16, 0x00, - 0x63, 0xdc, 0x75, 0x38, 0x42, 0x76, 0x03, 0xe6, 0xd3, 0x89, 0xa8, 0xfc, 0x20, 0x0a, 0x46, 0x11, - 0x55, 0x0a, 0x99, 0x4c, 0xc5, 0x78, 0x7b, 0xae, 0xd5, 0x65, 0x0a, 0xe1, 0xc0, 0xa5, 0x07, 0xa4, - 0xb9, 0x3d, 0x5b, 0x0f, 0xb8, 0xcb, 0x29, 0x66, 0xe6, 0x36, 0x71, 0x5e, 0x18, 0x10, 0x14, 0x29, - 0xcc, 0x0f, 0x70, 0xfb, 0x03, 0xb6, 0x13, 0xaa, 0x70, 0x0f, 0x3f, 0x85, 0xa8, 0x41, 0xc2, 0x4a, - 0xe4, 0x8a, 0xc4, 0x0f, 0xf1, 0xfd, 0xbd, 0x28, 0x62, 0x04, 0x85, 0x08, 0x28, 0x9d, 0xe0, 0x78, - 0xe2, 0x7e, 0xb6, 0xa2, 0x67, 0x02, 0x29, 0x9c, 0x10, 0x51, 0x9a, 0x4d, 0xe9, 0x92, 0x52, 0xb1, - 0x6d, 0x2b, 0x8e, 0xdd, 0x6d, 0xf1, 0xbc, 0xa0, 0x2f, 0x08, 0x02, 0x81, 0xb2, 0xd1, 0xe3, 0xf3, - 0xc6, 0x54, 0xf7, 0x0f, 0x33, 0x81, 0xc2, 0x41, 0xc8, 0xf0, 0x38, 0x1c, 0x64, 0xa5, 0x80, 0x01, - 0x09, 0xc0, 0x07, 0x0b, 0x14, 0x34, 0x71, 0x0c, 0xf0, 0x00, 0xf2, 0xc0, 0x00, 0xa4, 0x60, 0xa1, - 0xa0, 0x57, 0xb6, 0xda, 0x69, 0xc2, 0xee, 0x06, 0xfe, 0x6d, 0xe4, 0xd3, 0xf6, 0xfc, 0xc6, 0x99, - 0xc5, 0xd2, 0x5a, 0x7c, 0x3a, 0x6e, 0xf4, 0x7f, 0x3e, 0xc5, 0x9b, 0xeb, 0xb1, 0xed, 0xc4, 0x82, - 0x10, 0xa0, 0x91, 0x21, 0xc3, 0x44, 0xb0, 0x33, 0xf8, 0x48, 0xe0, 0x1d, 0xb1, 0xe8, 0x63, 0x01, - 0xb2, 0x79, 0x3a, 0x04, 0x1c, 0x2f, 0x2e, 0xf2, 0x4c, 0xaa, 0x4c, 0xa3, 0x8c, 0x33, 0x0a, 0x10, - 0x91, 0xd3, 0x04, 0xa8, 0xe5, 0x22, 0x7d, 0xdd, 0x5e, 0xc7, 0xf8, 0xb9, 0x54, 0x5a, 0xca, 0xb5, - 0x13, 0xc9, 0x68, 0x56, 0x18, 0xc4, 0xf9, 0x37, 0x9b, 0x82, 0x90, 0x10, 0x23, 0x6c, 0xf9, 0x20, - 0x0d, 0x56, 0x62, 0x05, 0x78, 0x90, 0x07, 0x2d, 0xc2, 0x24, 0xee, 0x64, 0x70, 0x1d, 0xc3, 0xde, - 0x41, 0xc0, 0x60, 0x96, 0xbf, 0x6e, 0xeb, 0x28, 0x64, 0x9e, 0xc0, 0x42, 0x4c, 0x47, 0xc3, 0xc0, - 0x29, 0x4a, 0x27, 0xdf, 0xe1, 0xba, 0xc5, 0x1f, 0xb0, 0x85, 0x89, 0x13, 0x56, 0x36, 0xdc, 0x81, - 0x41, 0xf8, 0x53, 0xae, 0x52, 0xf3, 0x16, 0xf7, 0x0a, 0x60, 0x84, 0x60, 0x81, 0x8b, 0x91, 0x92, - 0xcc, 0x33, 0x4b, 0x5f, 0x1b, 0xe3, 0xd2, 0xb1, 0x9a, 0x77, 0x6c, 0x2e, 0x56, 0x17, 0x89, 0x00, - 0x55, 0x29, 0xf2, 0x26, 0x44, 0xa3, 0xbb, 0xb8, 0x83, 0xf3, 0xf0, 0xc4, 0x98, 0x28, 0xb9, 0xaa, - 0x79, 0x83, 0x3a, 0x8e, 0x77, 0xb2, 0xfa, 0xe0, 0x40, 0x05, 0x01, 0x42, 0x0b, 0x93, 0x2a, 0x2f, - 0x96, 0x31, 0xd5, 0xc4, 0xb8, 0x7f, 0xcc, 0x43, 0x82, 0x07, 0x0d, 0x84, 0xe0, 0x05, 0x4a, 0x32, - 0x8f, 0x05, 0x92, 0xe1, 0x90, 0x20, 0x85, 0x0a, 0x78, 0x3d, 0x2b, 0x72, 0xd8, 0xca, 0x89, 0x7b, - 0x7c, 0x31, 0x0f, 0x3c, 0xfc, 0xb1, 0x96, 0xcd, 0xba, 0x75, 0x84, 0x41, 0xc8, 0x52, 0xdc, 0x6e, - 0x16, 0x32, 0xc7, 0x10, 0xb8, 0xa3, 0x19, 0xf1, 0xf2, 0xd6, 0xd3, 0xb1, 0x4e, 0xe2, 0x75, 0x0a, - 0xc8, 0x00, 0xd0, 0x12, 0x71, 0xb4, 0xea, 0x86, 0x3c, 0xc8, 0x7f, 0xc9, 0x3d, 0x1c, 0x65, 0xe2, - 0x7d, 0x5d, 0xcb, 0xcb, 0x03, 0xbd, 0xb0, 0x7c, 0x77, 0xc1, 0x61, 0xcc, 0x00, 0x87, 0xcc, 0xb2, - 0x81, 0x8f, 0x95, 0x08, 0x76, 0xdb, 0x15, 0x9d, 0xe7, 0xa1, 0xde, 0xd8, 0xab, 0x10, 0xfa, 0x47, - 0xe8, 0x5e, 0x5e, 0x0e, 0xdf, 0x45, 0xcb, 0xf3, 0xea, 0xe2, 0x01, 0x08, 0x47, 0x76, 0xd4, 0x1e, - 0xf0, 0x1b, 0x72, 0x83, 0x8e, 0x35, 0x2d, 0x57, 0x36, 0x2e, 0x08, 0x42, 0x01, 0x42, 0xed, 0xc9, - 0xaa, 0x85, 0x53, 0xd3, 0x00, 0x0d, 0x0f, 0x80, 0xe1, 0xca, 0x85, 0xea, 0x5b, 0x81, 0xd9, 0x2c, - 0x79, 0x17, 0x14, 0x37, 0xf8, 0x58, 0x82, 0xe0, 0x25, 0xc8, 0x4d, 0x57, 0x63, 0x91, 0x30, 0x68, - 0xb9, 0x4e, 0xf2, 0x70, 0xe0, 0xe0, 0x3c, 0x2a, 0x21, 0x23, 0x55, 0x33, 0x7b, 0xf8, 0x5b, 0xaf, - 0x4b, 0x88, 0x64, 0x7b, 0xb8, 0x4b, 0x8c, 0xe0, 0xd9, 0x19, 0xce, 0x1e, 0x5a, 0xcb, 0x00, 0xc7, - 0x57, 0x3c, 0x03, 0xe2, 0xbc, 0xf3, 0xce, 0x38, 0x6f, 0xc3, 0x2c, 0x68, 0x01, 0x85, 0xfc, 0x48, - 0xcf, 0x20, 0x5b, 0xfb, 0x44, 0x68, 0x56, 0xe2, 0x7e, 0xb4, 0xa2, 0xbd, 0x35, 0xfb, 0x89, 0x01, - 0x32, 0x32, 0x2e, 0xdc, 0x71, 0x50, 0x5e, 0x59, 0xad, 0xb7, 0x38, 0xf5, 0x14, 0xc5, 0xc9, 0xcb, - 0xe6, 0xab, 0xe1, 0x13, 0x2a, 0xbb, 0xc4, 0x3e, 0x20, 0x79, 0x60, 0xc4, 0x83, 0xcb, 0x19, 0x63, - 0x85, 0x11, 0x40, 0x07, 0xd4, 0x71, 0xaa, 0x30, 0x9b, 0xb7, 0x54, 0x9b, 0x1d, 0xb4, 0xd3, 0xc9, - 0x83, 0x3a, 0x56, 0xde, 0xcd, 0xac, 0x77, 0xf8, 0x21, 0x01, 0x82, 0x14, 0x33, 0xf3, 0xe5, 0xe1, - 0xc6, 0x1a, 0xbe, 0x6c, 0x34, 0xa3, 0x6c, 0xb6, 0xa2, 0xe9, 0xd6, 0x24, 0x14, 0x8c, 0x9e, 0x38, - 0x7b, 0x47, 0xb2, 0x55, 0x71, 0xdf, 0x04, 0x9c, 0x4a, 0x11, 0x89, 0x90, 0xb1, 0x4c, 0xee, 0x0b, - 0xf8, 0x90, 0x42, 0x3c, 0xa5, 0x1c, 0xca, 0x8c, 0xef, 0x92, 0xd8, 0x81, 0xea, 0xb5, 0x76, 0xad, - 0x61, 0x01, 0x01, 0x49, 0x61, 0x88, 0xe1, 0xf6, 0x2c, 0xbb, 0x12, 0x3d, 0x4b, 0x75, 0x09, 0xe0, - 0x51, 0xaa, 0x23, 0x8f, 0xd4, 0xb6, 0x87, 0x71, 0x2f, 0x70, 0x52, 0x05, 0x11, 0xa4, 0x63, 0x3b, - 0xa9, 0x1e, 0xa5, 0x52, 0x46, 0x2e, 0x77, 0xb5, 0x83, 0x73, 0x96, 0x0f, 0xf1, 0x52, 0xd6, 0x01, - 0x5f, 0xcc, 0xb4, 0x5f, 0xc2, 0x3c, 0x82, 0x5d, 0xee, 0xb9, 0x08, 0x6e, 0x9d, 0x7c, 0xa7, 0xaa, - 0xdf, 0x62, 0xab, 0x57, 0xcb, 0x7b, 0xc2, 0x9c, 0x46, 0x2b, 0xc5, 0x19, 0xfb, 0xdc, 0x3a, 0xce, - 0x00, 0x44, 0xe5, 0x25, 0x7e, 0xe9, 0x58, 0xa4, 0xff, 0xf7, 0xee, 0xa5, 0xee, 0x4e, 0x05, 0x90, - 0x6d, 0xf4, 0x7f, 0x2f, 0xf1, 0x2f, 0x35, 0xc9, 0x5f, 0xc3, 0x4c, 0xc0, 0x01, 0xc2, 0xd1, 0x67, - 0x54, 0x13, 0x4b, 0x59, 0x01, 0xbd, 0x77, 0xdb, 0x15, 0x77, 0xd3, 0x70, 0x77, 0xe2, 0xb3, 0x9f, - 0x22, 0xa2, 0x1e, 0x50, 0x0f, 0xa7, 0xb8, 0x1c, 0x60, 0x11, 0xa7, 0xa7, 0x77, 0x6c, 0x1d, 0xf8, - 0xff, 0x97, 0x6d, 0xb6, 0x98, 0xb6, 0x25, 0xac, 0xe9, 0xa7, 0xb6, 0xde, 0x0c, 0x00, 0x2a, 0x03, - 0x62, 0x8c, 0x94, 0x01, 0x42, 0x0c, 0xa9, 0xf6, 0x55, 0x0e, 0x2f, 0x52, 0xa0, 0xa3, 0x21, 0x74, - 0x4a, 0x9c, 0x80, 0x01, 0x25, 0x1e, 0x17, 0x3c, 0x38, 0x58, 0x06, 0x78, 0x00, 0x70, 0xb0, 0xc9, - 0x8e, 0x44, 0x9a, 0x17, 0x61, 0xa9, 0x40, 0xee, 0xb3, 0x73, 0x77, 0xb6, 0xb8, 0x90, 0xc0, 0x52, - 0x40, 0x0f, 0x0e, 0xa4, 0x70, 0x5b, 0xa3, 0x88, 0xb6, 0xc3, 0x61, 0x2d, 0x4e, 0xf2, 0xc1, 0x9f, - 0x86, 0x40, 0x1e, 0xbd, 0x6e, 0xc7, 0x02, 0x40, 0x40, 0x21, 0x11, 0xc1, 0x1e, 0xdc, 0x88, 0xe1, - 0xa1, 0x6d, 0xfa, 0xde, 0xef, 0x62, 0x07, 0x38, 0x91, 0x95, 0x74, 0xfd, 0x65, 0x9b, 0x64, 0xc7, - 0xd9, 0x72, 0x0f, 0x1e, 0x01, 0xf3, 0x51, 0x98, 0x00, 0xd4, 0xc2, 0x01, 0x01, 0x93, 0xb8, 0x48, - 0xd2, 0x91, 0xcc, 0x2f, 0xdb, 0x2d, 0x93, 0xb8, 0xf7, 0x34, 0x71, 0x3e, 0x20, 0x79, 0x51, 0x74, - 0x0f, 0xf3, 0x09, 0xbd, 0xc7, 0x72, 0x11, 0xdf, 0x5c, 0x86, 0x12, 0x70, 0xb0, 0x03, 0x51, 0x1c, - 0xf1, 0x85, 0x0a, 0x00, 0x01, 0x25, 0x24, 0x00, 0x2a, 0x1f, 0x4a, 0x33, 0x31, 0x92, 0xec, 0x1f, - 0xd7, 0x23, 0xc7, 0xe0, 0x5b, 0x38, 0x18, 0x0d, 0x66, 0x4e, 0xb2, 0x4f, 0xcf, 0x0f, 0xd7, 0x84, - 0x42, 0x90, 0x57, 0xe0, 0x00, 0xf8, 0x3e, 0x25, 0x14, 0x68, 0x8b, 0xd2, 0x19, 0x7f, 0x07, 0x0f, - 0x22, 0x99, 0x41, 0x2d, 0x4b, 0x2a, 0xf0, 0xc5, 0x07, 0x30, 0xc6, 0x3c, 0xd8, 0x25, 0xe0, 0xd1, - 0xc9, 0xdc, 0x8d, 0x15, 0x88, 0x01, 0x50, 0x36, 0x3e, 0xc2, 0x88, 0x4a, 0x1f, 0x81, 0xa8, 0xf7, - 0xa3, 0x92, 0xee, 0xd6, 0x64, 0x95, 0x40, 0x0d, 0x47, 0x43, 0xe4, 0x3b, 0x53, 0xc7, 0x6e, 0xae, - 0xf1, 0x78, 0xc0, 0x00, 0x2c, 0x03, 0x0d, 0x57, 0x61, 0x39, 0xf8, 0x76, 0x70, 0x06, 0x50, 0x1b, - 0x57, 0x3b, 0x24, 0x0a, 0xff, 0xf4, 0xb2, 0x77, 0x3f, 0x09, 0xe0, 0x5e, 0x3f, 0xe2, 0x58, 0x17, - 0xb6, 0x05, 0xf5, 0xd3, 0x71, 0xac, 0x12, 0x22, 0xdf, 0xf9, 0xfe, 0x0e, 0x41, 0x80, 0xd1, 0x41, - 0xfc, 0xa4, 0xda, 0x83, 0xf0, 0x1a, 0x8a, 0x43, 0xf9, 0xb8, 0x5b, 0x1d, 0x3f, 0x9e, 0x00, 0x05, - 0x52, 0x07, 0x71, 0xa9, 0x10, 0x10, 0x1f, 0xb2, 0x47, 0xa5, 0xe4, 0xfd, 0x12, 0x72, 0xf8, 0x05, - 0x58, 0xb0, 0x38, 0xb9, 0x3a, 0x79, 0xfb, 0x7c, 0x40, 0xc8, 0xae, 0xc2, 0x55, 0x6c, 0x15, 0xcb, - 0x17, 0x75, 0x5c, 0x0b, 0x59, 0xa7, 0x36, 0x08, 0x24, 0x7e, 0xdb, 0xf1, 0x11, 0x85, 0x3f, 0x8f, - 0xd1, 0xd1, 0x07, 0x8f, 0xb7, 0x9e, 0x39, 0x55, 0x70, 0x23, 0x49, 0xb8, 0x72, 0xc3, 0xb9, 0x63, - 0xac, 0x17, 0x74, 0x2d, 0x82, 0xe2, 0x85, 0x2b, 0x2e, 0x0d, 0xeb, 0xf8, 0x91, 0x98, 0x49, 0x95, - 0x8d, 0xf9, 0x73, 0xa8, 0x06, 0x25, 0x76, 0x58, 0xdd, 0x33, 0xb0, 0xe7, 0xf6, 0xff, 0xe0, 0x94, - 0xac, 0x2f, 0x01, 0xdd, 0xe4, 0x8d, 0x21, 0x3c, 0x11, 0x5c, 0x09, 0x34, 0xbb, 0x96, 0x69, 0x14, - 0x39, 0x80, 0x28, 0x9b, 0x20, 0x96, 0x71, 0x76, 0x54, 0xd9, 0xa2, 0x4d, 0xe0, 0xd2, 0xa6, 0x30, - 0x65, 0x42, 0x16, 0xe3, 0x9a, 0x27, 0x84, 0x70, 0x64, 0xe1, 0x28, 0x44, 0xfc, 0x63, 0x01, 0x28, - 0x6a, 0xb2, 0x95, 0x11, 0xe1, 0x15, 0xcb, 0xe1, 0xe4, 0x60, 0x87, 0x61, 0x63, 0x10, 0x86, 0x10, - 0x7f, 0xe1, 0xe2, 0xe0, 0x5e, 0x70, 0x00, 0x0f, 0x9d, 0x00, 0x01, 0x2c, 0x07, 0x60, 0x7c, 0x2f, - 0xc8, 0x25, 0x0e, 0xd6, 0xaf, 0x00, 0x79, 0xb5, 0xa6, 0x50, 0xc5, 0xed, 0xe9, 0x5b, 0x62, 0x50, - 0x57, 0x10, 0xff, 0x47, 0x20, 0xb6, 0x18, 0x62, 0x5f, 0x1a, 0xe8, 0xad, 0xf1, 0xfc, 0x40, 0x91, - 0x95, 0x21, 0x37, 0x1e, 0xfe, 0xad, 0x4e, 0x2b, 0xf1, 0x08, 0x7b, 0x96, 0xc4, 0x0e, 0x03, 0xcf, - 0x0e, 0x79, 0x63, 0xe0, 0xc0, 0x3b, 0xae, 0x39, 0x70, 0x50, 0x6f, 0x71, 0x03, 0x87, 0x8f, 0x2c, - 0x06, 0x7b, 0xd6, 0x6e, 0xec, 0xa7, 0xf1, 0x1f, 0x20, 0x9d, 0xdf, 0xcd, 0xdd, 0xc1, 0x4f, 0x21, - 0x17, 0x52, 0xf2, 0x5e, 0xfe, 0x20, 0x85, 0x83, 0xcf, 0xc4, 0x3e, 0x1b, 0x50, 0x02, 0xdd, 0xa4, - 0xc6, 0x48, 0xfc, 0xe3, 0x76, 0xbd, 0xa2, 0xc1, 0xd7, 0xc2, 0xea, 0x96, 0x0d, 0x82, 0x64, 0xce, - 0x1b, 0x05, 0xda, 0xdc, 0x30, 0xd4, 0x12, 0x2b, 0x71, 0xcd, 0xdf, 0xfe, 0x04, 0x80, 0x53, 0x07, - 0x40, 0xf0, 0xf0, 0x1c, 0x7e, 0x3d, 0x81, 0xd0, 0x78, 0x78, 0x38, 0x5b, 0xbc, 0xac, 0x5c, 0x89, - 0xf0, 0x4e, 0x22, 0x0f, 0x7d, 0x5d, 0x8d, 0xb3, 0x3e, 0xf1, 0x02, 0x0a, 0x4e, 0x03, 0x96, 0xfc, - 0x77, 0x7c, 0x0c, 0x7c, 0xa5, 0xbd, 0xc7, 0x77, 0x2b, 0x17, 0x70, 0x7f, 0xd9, 0x2f, 0x70, 0x35, - 0xc0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x41, 0x20, 0xb0, 0xa8, 0xdc, 0xc2, 0x1e, 0xf0, 0x67, - 0xd9, 0x5e, 0xee, 0x27, 0x98, 0x83, 0xf8, 0x82, 0xbf, 0x97, 0x55, 0xf9, 0x69, 0x9f, 0x83, 0xdf, - 0xaf, 0x89, 0x1c, 0x26, 0xaa, 0xba, 0xb4, 0x95, 0xdc, 0x12, 0x74, 0x13, 0xeb, 0xe8, 0x8e, 0x45, - 0xc4, 0x88, 0x16, 0x16, 0xbd, 0x93, 0x71, 0x83, 0x1e, 0x26, 0xca, 0x9c, 0x72, 0x9f, 0xba, 0xa1, - 0x2f, 0xc4, 0x90, 0x43, 0xeb, 0x07, 0xbf, 0x25, 0xf9, 0x7d, 0x44, 0xf8, 0x9f, 0x88, 0x2d, 0xdd, - 0xa6, 0xb8, 0x88, 0xbe, 0x83, 0x2c, 0x82, 0x3e, 0x40, 0xc4, 0xd9, 0x78, 0x91, 0x67, 0xbd, 0xdc, - 0x56, 0x7a, 0x7c, 0x49, 0x08, 0x9b, 0xdf, 0xdd, 0x6d, 0x3b, 0xb8, 0x98, 0x24, 0x17, 0xc7, 0xae, - 0x3f, 0x12, 0x24, 0x58, 0xee, 0x55, 0xf7, 0xc4, 0xf8, 0x47, 0xe2, 0x0c, 0x26, 0xee, 0x2b, 0xc4, - 0x88, 0x87, 0xfa, 0x08, 0xf4, 0x5f, 0x14, 0x10, 0x76, 0x47, 0x61, 0x2a, 0xeb, 0x35, 0x21, 0x97, - 0x3c, 0x64, 0x5d, 0x5e, 0x2b, 0xdd, 0x59, 0x28, 0x1c, 0x97, 0x26, 0xa9, 0x72, 0x2f, 0xc2, 0x00, - 0x84, 0xab, 0x3a, 0x4b, 0xfc, 0x51, 0xb2, 0x75, 0x58, 0x85, 0x07, 0xcd, 0x9f, 0xea, 0x27, 0xf4, - 0x77, 0xf8, 0x28, 0x23, 0xd2, 0xee, 0xef, 0xf3, 0x08, 0x77, 0xf1, 0x02, 0x02, 0x5d, 0x25, 0x51, - 0x7f, 0x13, 0x1f, 0x2f, 0x7b, 0x3e, 0x1f, 0x3a, 0xd7, 0x89, 0xb1, 0xc4, 0x4d, 0x12, 0x20, 0xd7, - 0x97, 0xb7, 0xc4, 0x02, 0x32, 0xa7, 0x95, 0xee, 0x41, 0x24, 0x40, 0x82, 0x9d, 0xb5, 0x25, 0x3f, - 0x04, 0xf1, 0xd4, 0xc3, 0x03, 0x03, 0x9d, 0x7d, 0xb5, 0x7e, 0x26, 0x0b, 0x23, 0x15, 0xab, 0x28, - 0x14, 0xd2, 0x50, 0x04, 0xbe, 0x9a, 0x94, 0xc5, 0xc1, 0x95, 0x94, 0xfc, 0x4d, 0xf3, 0x7f, 0x11, - 0x16, 0x67, 0xbe, 0xaf, 0xc4, 0x41, 0x54, 0x37, 0x58, 0x7d, 0x89, 0x27, 0x98, 0x17, 0x54, 0x78, - 0x01, 0x7b, 0x19, 0x1e, 0xba, 0x0e, 0x17, 0x8f, 0x82, 0x8c, 0x90, 0x52, 0xd6, 0x86, 0xa6, 0xd9, - 0x7e, 0x26, 0x6e, 0x17, 0xaf, 0x84, 0x61, 0x02, 0xbb, 0xf9, 0xb3, 0x89, 0xe1, 0xb3, 0x13, 0x17, - 0xc3, 0xca, 0x30, 0xff, 0x2a, 0x90, 0x2b, 0xe5, 0xbc, 0x24, 0x28, 0xd0, 0x92, 0x6f, 0x7d, 0xe3, - 0x58, 0x74, 0xed, 0x4f, 0x37, 0x20, 0x69, 0x6a, 0xbe, 0x13, 0xb3, 0xd4, 0xd4, 0x23, 0x23, 0x94, - 0x1c, 0xa2, 0xea, 0x06, 0x3a, 0x0e, 0xd4, 0x67, 0x08, 0x05, 0x85, 0xe2, 0xb7, 0xcd, 0x04, 0x9d, - 0x84, 0xc7, 0xe2, 0x42, 0x85, 0xbc, 0x57, 0x2c, 0x98, 0xa9, 0x20, 0x8d, 0x16, 0xba, 0x0c, 0xe2, - 0x27, 0xdd, 0xce, 0x22, 0x20, 0xc8, 0x6c, 0x69, 0xdf, 0xba, 0xe0, 0x8a, 0x92, 0xb0, 0xad, 0x70, - 0x80, 0x80, 0x59, 0x4c, 0xa8, 0xfc, 0x42, 0x4f, 0x11, 0xa6, 0xb5, 0x3f, 0xd3, 0xaf, 0x97, 0x08, - 0x44, 0x4f, 0x15, 0x02, 0xbc, 0xf6, 0x07, 0x88, 0x20, 0x0f, 0x84, 0x04, 0xb9, 0xc1, 0xc2, 0x6d, - 0x3f, 0x90, 0x59, 0x54, 0x72, 0x0b, 0x42, 0xd3, 0x4c, 0x9c, 0x40, 0x90, 0x88, 0x60, 0x5b, 0x93, - 0xe5, 0xd1, 0x95, 0x3d, 0xea, 0x39, 0xd4, 0x6d, 0x1b, 0x4c, 0x40, 0x81, 0x67, 0x15, 0xb3, 0x9b, - 0xd5, 0x71, 0x10, 0xc4, 0xf0, 0xe1, 0xad, 0x49, 0x75, 0xfb, 0xf8, 0xab, 0xf1, 0x01, 0xc1, 0x2b, - 0xba, 0xf1, 0xce, 0xff, 0x0c, 0x0c, 0x97, 0x41, 0xb7, 0x90, 0xf1, 0xe2, 0x49, 0x1c, 0xd0, 0x51, - 0x71, 0x2d, 0x7f, 0xb6, 0x6d, 0xf0, 0x41, 0xe5, 0xe3, 0x2b, 0x11, 0x6f, 0x81, 0x65, 0xaa, 0x40, - 0x63, 0xae, 0x10, 0xcd, 0x41, 0x8d, 0xc7, 0x81, 0x23, 0x2b, 0xa6, 0x17, 0x1f, 0xa6, 0x4f, 0xeb, - 0x08, 0x9f, 0x94, 0x4a, 0x6d, 0xef, 0x82, 0x62, 0xd2, 0xb4, 0xda, 0x6d, 0xa7, 0x94, 0x57, 0x43, - 0x62, 0x9f, 0x94, 0x2d, 0xba, 0x93, 0x85, 0x0b, 0x18, 0xf5, 0xc4, 0x17, 0x30, 0x68, 0x2d, 0x6b, - 0x00, 0x69, 0xe6, 0xc9, 0xdc, 0x64, 0x18, 0x9d, 0x38, 0xe7, 0x13, 0x1d, 0x86, 0xf7, 0xdd, 0xf7, - 0x7f, 0x97, 0xc8, 0xff, 0x66, 0x40, 0xea, 0x60, 0xc9, 0xb9, 0x8f, 0x6c, 0x70, 0x20, 0x4a, 0x1f, - 0x89, 0xbd, 0x38, 0x42, 0xee, 0x58, 0xf5, 0x05, 0x54, 0x13, 0x6b, 0x8d, 0x61, 0x50, 0xdf, 0x8b, - 0x70, 0x70, 0x05, 0x10, 0x50, 0x14, 0x71, 0x03, 0x90, 0x54, 0x7f, 0xc1, 0x93, 0xc9, 0x6b, 0x25, - 0x56, 0xea, 0x42, 0xf8, 0x28, 0x2e, 0x08, 0xa8, 0x87, 0x11, 0x00, 0x09, 0xbd, 0xd8, 0x93, 0x3a, - 0x9d, 0xfa, 0x69, 0xbb, 0x44, 0x9d, 0x79, 0x32, 0x51, 0xa4, 0x3f, 0xb9, 0xc9, 0x97, 0x2b, 0x01, - 0xb6, 0xd2, 0x06, 0x75, 0x9b, 0x44, 0x35, 0x28, 0x0c, 0x5c, 0x09, 0x02, 0x43, 0x65, 0x1b, 0x1a, - 0x15, 0x91, 0xc8, 0xba, 0x85, 0xa4, 0x88, 0x05, 0x4d, 0xb6, 0x71, 0xae, 0xe9, 0x93, 0x0f, 0xf5, - 0x08, 0x41, 0x39, 0x94, 0xd8, 0xa7, 0x70, 0x5e, 0x35, 0x97, 0x71, 0x10, 0xa7, 0x14, 0x69, 0x8a, - 0x32, 0xc6, 0x4e, 0xc8, 0x28, 0xcb, 0x6f, 0x70, 0x33, 0x06, 0x32, 0xde, 0x30, 0xe0, 0xc6, 0x33, - 0xb1, 0xdf, 0x88, 0x82, 0x99, 0xce, 0x0a, 0xdf, 0x96, 0x2b, 0x10, 0xb0, 0xf6, 0x94, 0x3f, 0xb4, - 0x5d, 0x9b, 0xf1, 0x02, 0x02, 0x99, 0xff, 0xc7, 0x35, 0x15, 0xdd, 0xdd, 0x6e, 0x71, 0x77, 0xe1, - 0x01, 0x20, 0x8e, 0x52, 0x19, 0x71, 0x7b, 0x84, 0x21, 0x7a, 0x5c, 0x28, 0xa9, 0x03, 0x04, 0x51, - 0x77, 0x30, 0x89, 0xf5, 0xa7, 0xc0, 0xe0, 0x57, 0xa7, 0x8f, 0xe3, 0xf1, 0x11, 0xb0, 0xd9, 0xe7, - 0xc9, 0x8d, 0x72, 0xb6, 0x8e, 0xe6, 0xed, 0xa2, 0xdc, 0x92, 0xc7, 0xb5, 0x32, 0xed, 0xb5, 0x10, - 0xf5, 0x6f, 0x3a, 0xe2, 0x7b, 0xaf, 0xe0, 0x87, 0x96, 0xaa, 0xbc, 0x4c, 0x7e, 0xb1, 0xf3, 0x4b, - 0xbb, 0xbd, 0x59, 0x73, 0xe2, 0xfb, 0xa3, 0x6a, 0x58, 0xaa, 0xe1, 0x12, 0xa1, 0xd5, 0xdb, 0x5e, - 0xce, 0x43, 0xbe, 0x1b, 0xd8, 0xd6, 0xbe, 0x65, 0x36, 0xd3, 0xf2, 0xf3, 0x61, 0xa1, 0xe2, 0xc9, - 0x9a, 0x82, 0xfa, 0xaf, 0x8e, 0xbb, 0xef, 0xff, 0x6d, 0xfe, 0x26, 0xa6, 0x9d, 0xcf, 0xed, 0xf0, - 0x8c, 0x15, 0x16, 0xee, 0xee, 0x14, 0x54, 0xf8, 0x51, 0xf2, 0x37, 0x17, 0x10, 0x04, 0xb4, 0x07, - 0x8c, 0x94, 0x72, 0x00, 0x02, 0x00, 0x99, 0x44, 0xeb, 0x0c, 0x82, 0x90, 0xa5, 0xb2, 0xe7, 0x83, - 0x4e, 0x06, 0x85, 0xa2, 0x51, 0x4a, 0x59, 0x9b, 0x09, 0x80, 0x0a, 0xb3, 0x52, 0xb3, 0x98, 0x0e, - 0xac, 0x93, 0xf8, 0x80, 0xa1, 0x38, 0x35, 0x59, 0x07, 0x14, 0x09, 0x5d, 0x1a, 0xb2, 0xa7, 0x00, - 0x01, 0xae, 0x30, 0x48, 0x05, 0xc5, 0x80, 0x01, 0xa9, 0x60, 0x00, 0x5a, 0xae, 0x3a, 0x10, 0xac, - 0x02, 0xe4, 0xde, 0xe3, 0xf8, 0x88, 0x8e, 0x05, 0x8e, 0x4b, 0xc6, 0x06, 0x13, 0x9d, 0x4d, 0x03, - 0xf1, 0x59, 0x70, 0x56, 0x58, 0xef, 0x7c, 0x48, 0x81, 0xf7, 0x61, 0x3a, 0x9b, 0x14, 0x7d, 0xa3, - 0xde, 0x3b, 0xf3, 0xe2, 0x02, 0x91, 0x41, 0xa4, 0x00, 0x04, 0x64, 0x83, 0x28, 0x7a, 0x7c, 0xae, - 0xec, 0x00, 0x56, 0xb0, 0x0f, 0xa7, 0xdf, 0x1f, 0x96, 0xf9, 0x6c, 0xfd, 0x22, 0xf3, 0xaa, 0xc7, - 0x3c, 0x48, 0xce, 0xba, 0x5e, 0x21, 0xf9, 0xa9, 0xe3, 0xde, 0x81, 0x7c, 0xbe, 0x7f, 0x57, 0x98, - 0x85, 0x7d, 0xe9, 0xc5, 0x44, 0x81, 0xbd, 0xcf, 0x88, 0x05, 0x71, 0x58, 0xfa, 0x13, 0xdc, 0x67, - 0x4e, 0x3d, 0xd0, 0x67, 0xc5, 0x24, 0xfa, 0x3f, 0x13, 0x0a, 0x64, 0xf5, 0x06, 0xba, 0x8f, 0x2c, - 0xa2, 0x78, 0x60, 0x3a, 0xaa, 0x0a, 0x55, 0x12, 0x98, 0xf7, 0xc1, 0x54, 0x1f, 0x60, 0x2a, 0x95, - 0x2b, 0xf2, 0x0f, 0x0a, 0xca, 0x99, 0x0e, 0x2f, 0x54, 0xa1, 0x89, 0x86, 0xe6, 0xd8, 0x75, 0x09, - 0x79, 0x28, 0x7e, 0x14, 0x7b, 0x04, 0x7c, 0x97, 0x34, 0xbf, 0x70, 0xb7, 0xce, 0xcb, 0x88, 0x91, - 0x30, 0x89, 0xdc, 0xdd, 0x3e, 0xee, 0xf2, 0xb1, 0xf1, 0x23, 0x0d, 0xbd, 0xd5, 0x8c, 0x4d, 0x8d, - 0xdf, 0x53, 0xf5, 0x8c, 0x5a, 0xc7, 0xe2, 0x4a, 0xdb, 0x7f, 0x2f, 0x10, 0xe6, 0x18, 0x02, 0x08, - 0x52, 0x2b, 0x71, 0x5b, 0xe5, 0xea, 0x4d, 0x77, 0x77, 0x6d, 0xbc, 0x28, 0xd6, 0x4a, 0x6b, 0x4e, - 0x18, 0x80, 0xc8, 0xe2, 0x33, 0x4c, 0x56, 0xa6, 0x40, 0x9e, 0xb2, 0xd0, 0x05, 0x5b, 0x6c, 0x2f, - 0x2f, 0xbe, 0xf6, 0x61, 0x6e, 0xf0, 0x62, 0x0e, 0x44, 0x14, 0x7f, 0xe5, 0xf9, 0x32, 0x69, 0x33, - 0xf8, 0x21, 0x05, 0x21, 0x49, 0xd2, 0x39, 0xf2, 0xcf, 0x87, 0x81, 0xce, 0x71, 0x0f, 0x10, 0xe2, - 0x00, 0x01, 0x5a, 0xb7, 0x27, 0x4c, 0xc2, 0xea, 0x54, 0xa2, 0x50, 0xc4, 0x08, 0x05, 0xa5, 0x4a, - 0xf4, 0xf3, 0xef, 0x8a, 0xbb, 0xbb, 0xcd, 0xfe, 0x24, 0x22, 0x46, 0x87, 0xc4, 0x09, 0x58, 0xfa, - 0xde, 0x78, 0x0b, 0xb8, 0x30, 0x3c, 0x40, 0x52, 0x8d, 0xc7, 0xe0, 0x1e, 0xcf, 0x24, 0x31, 0xfc, - 0x45, 0x62, 0xb9, 0xbd, 0x2e, 0xe1, 0x91, 0x20, 0x8e, 0xd5, 0x57, 0xb8, 0x81, 0x03, 0xc9, 0x09, - 0x8f, 0x4e, 0x4f, 0x0c, 0x3d, 0xb3, 0x5f, 0x53, 0x14, 0x8e, 0x3d, 0x7e, 0x31, 0x08, 0xc2, 0xc4, - 0x42, 0x45, 0x97, 0xd3, 0x83, 0x6c, 0x3b, 0x00, 0x14, 0xa8, 0xdb, 0x84, 0x23, 0x75, 0x8d, 0x52, - 0xbb, 0x06, 0xc4, 0x24, 0x9b, 0x07, 0x1c, 0xb0, 0xfa, 0x3e, 0x7e, 0xaa, 0xa0, 0x9d, 0x15, 0x88, - 0xfb, 0xfc, 0x3d, 0xd6, 0xaf, 0x90, 0x8f, 0x7f, 0x89, 0x2e, 0xee, 0xef, 0x97, 0x12, 0x13, 0x38, - 0xba, 0xa4, 0x95, 0x6b, 0x89, 0x84, 0xea, 0xbd, 0x8c, 0xd9, 0x47, 0xe2, 0x84, 0x5e, 0x71, 0x82, - 0xf7, 0xf8, 0x53, 0xcb, 0x4d, 0xda, 0x72, 0xdb, 0xbb, 0xb6, 0xac, 0x66, 0x63, 0xbc, 0x08, 0x00, - 0x88, 0xb8, 0x2d, 0x18, 0xc6, 0xed, 0x6d, 0x9f, 0x1b, 0x3d, 0x8a, 0x03, 0x2d, 0x0b, 0x62, 0x83, - 0x15, 0x8a, 0x0c, 0x51, 0x81, 0xb6, 0xd8, 0x4e, 0x78, 0xef, 0x8b, 0x54, 0xb1, 0x8e, 0xf8, 0xb1, - 0x96, 0x0f, 0x41, 0x62, 0x3c, 0xf4, 0xfc, 0x38, 0xe0, 0x00, 0x88, 0x86, 0x4a, 0xc1, 0x57, 0x3b, - 0xb8, 0x63, 0xe4, 0x57, 0xc9, 0xe4, 0xef, 0xd6, 0x8c, 0x49, 0xf6, 0x22, 0x96, 0x0f, 0xde, 0x7d, - 0x15, 0x1c, 0x6c, 0x80, 0x03, 0x79, 0x78, 0x0d, 0xa4, 0x88, 0xa5, 0xd3, 0xc1, 0xad, 0xde, 0x08, - 0x41, 0x88, 0x50, 0x87, 0x00, 0x38, 0x31, 0xc7, 0x40, 0x77, 0xd6, 0x56, 0x33, 0x10, 0x68, 0xe3, - 0x4e, 0xe2, 0x63, 0x02, 0x68, 0x13, 0x80, 0x7c, 0x5a, 0x1e, 0x23, 0x44, 0x07, 0xdd, 0x6c, 0x00, - 0x68, 0x21, 0xcd, 0x5f, 0x70, 0xf6, 0x5b, 0x7e, 0x54, 0x01, 0x0b, 0xc4, 0x84, 0x39, 0x16, 0xe4, - 0xdb, 0x57, 0xe7, 0x4a, 0x87, 0xe0, 0x90, 0x4c, 0xbd, 0xd6, 0xd1, 0xfe, 0x38, 0x65, 0xe6, 0xe6, - 0x61, 0xb4, 0x1e, 0xbe, 0xee, 0xe7, 0x0b, 0x0f, 0x53, 0x89, 0x10, 0x10, 0x95, 0xcb, 0x64, 0xbc, - 0x55, 0x21, 0x43, 0x85, 0x32, 0x52, 0x5b, 0xa6, 0x23, 0xbc, 0x44, 0x14, 0x09, 0xce, 0x89, 0xa4, - 0xe1, 0x7f, 0x93, 0x9b, 0xb1, 0xdf, 0x04, 0xe4, 0xa1, 0xaa, 0x1c, 0x6a, 0x95, 0x5d, 0xde, 0x20, - 0x29, 0x0a, 0x8a, 0x2d, 0x98, 0x85, 0x35, 0x54, 0x56, 0x3a, 0x63, 0xb3, 0xd3, 0xb7, 0x8e, 0x3e, - 0x4f, 0x06, 0x4f, 0x25, 0xbe, 0xca, 0x77, 0xbc, 0xb8, 0x6b, 0x88, 0xde, 0xfb, 0x25, 0x19, 0xcb, - 0xd4, 0xed, 0xf1, 0x1a, 0xd5, 0x6b, 0xf2, 0x5d, 0x2b, 0xe2, 0x44, 0x82, 0xed, 0xdb, 0xd9, 0xaa, - 0xbf, 0xc1, 0x61, 0x1d, 0xde, 0xdc, 0x99, 0x13, 0xea, 0x21, 0x60, 0x97, 0x10, 0x70, 0xf7, 0xe2, - 0x44, 0x02, 0x62, 0x97, 0x23, 0xec, 0x18, 0x68, 0x51, 0xa7, 0xdb, 0xe0, 0x8a, 0x3a, 0x60, 0x68, - 0x0b, 0x01, 0x68, 0xf7, 0x18, 0x90, 0x24, 0x8d, 0x23, 0xe3, 0x07, 0x37, 0x90, 0x2c, 0x95, 0xcd, - 0xf0, 0x7e, 0x7f, 0x03, 0x40, 0xe5, 0x05, 0x7a, 0x53, 0xb2, 0x24, 0x04, 0xc0, 0x54, 0x00, 0x15, - 0x38, 0x00, 0x08, 0xfb, 0x20, 0x0f, 0x3b, 0x00, 0x49, 0x09, 0x40, 0x01, 0x1d, 0x18, 0x1f, 0x82, - 0x9e, 0x8c, 0xd4, 0x15, 0x7f, 0xf0, 0xc0, 0x30, 0x04, 0x05, 0x79, 0x79, 0xf9, 0x97, 0xdc, 0x8b, - 0x6d, 0x68, 0xaf, 0x4e, 0xde, 0x94, 0x03, 0x9f, 0x0d, 0xc7, 0xf7, 0x40, 0x39, 0x12, 0xab, 0x43, - 0x0a, 0x8b, 0xf0, 0x1b, 0xd1, 0xf3, 0x01, 0x6f, 0x41, 0xe3, 0xe6, 0xcb, 0x4e, 0x3c, 0x4c, 0x7d, - 0x5b, 0xdb, 0x8c, 0x43, 0xc5, 0xe3, 0x57, 0xf8, 0x81, 0x9c, 0x28, 0x31, 0x14, 0xf1, 0xc6, 0xe0, - 0x71, 0x89, 0x60, 0xcd, 0xdf, 0x95, 0xfe, 0x24, 0x48, 0x82, 0x50, 0x6a, 0xae, 0xe7, 0x51, 0x6f, - 0xe2, 0x84, 0xbb, 0x95, 0xdf, 0xab, 0x48, 0x63, 0xe7, 0x51, 0xe3, 0x08, 0x90, 0x69, 0x92, 0x28, - 0xda, 0xb4, 0x91, 0xc3, 0xce, 0x2d, 0x32, 0x2d, 0xd9, 0x2b, 0x7b, 0xa7, 0x10, 0xff, 0x82, 0xec, - 0x57, 0xa6, 0xfb, 0xfc, 0x13, 0xd5, 0x71, 0x3c, 0x31, 0x08, 0xc7, 0x98, 0x63, 0xdc, 0x4c, 0x28, - 0x75, 0x8a, 0xc7, 0x95, 0x65, 0xf2, 0xdd, 0x65, 0x5b, 0x36, 0x62, 0xf7, 0xfa, 0x09, 0x78, 0xaa, - 0x99, 0x22, 0xca, 0xd5, 0x78, 0x90, 0x53, 0x99, 0xaa, 0xae, 0xab, 0xf7, 0xc4, 0xd6, 0xaa, 0xab, - 0xf1, 0x3c, 0x48, 0x40, 0x28, 0x4e, 0x5c, 0x2e, 0x36, 0x57, 0x49, 0x3b, 0xc6, 0x67, 0x62, 0x01, - 0xaa, 0x94, 0x25, 0x75, 0xe9, 0xab, 0xaf, 0xb3, 0xbc, 0x48, 0xc2, 0x09, 0x30, 0x24, 0xe4, 0x60, - 0xf8, 0xd8, 0x7d, 0xf1, 0x3c, 0xa8, 0x96, 0xb8, 0x73, 0xd8, 0xc8, 0x6b, 0x4d, 0x9e, 0x1c, 0x50, - 0xcf, 0x61, 0xf2, 0x76, 0xff, 0x04, 0x11, 0xb9, 0xac, 0xd9, 0xd7, 0x54, 0x96, 0xc1, 0x5c, 0xba, - 0xd2, 0xd3, 0xcf, 0xbb, 0xb6, 0x58, 0x1c, 0x61, 0x50, 0xac, 0x6e, 0x0e, 0x97, 0x12, 0x58, 0x74, - 0x12, 0x07, 0xbf, 0x52, 0x5a, 0xe5, 0xf8, 0x90, 0x88, 0xd2, 0x9b, 0x07, 0x54, 0x96, 0xa5, 0x69, - 0x4f, 0xf2, 0x73, 0xfd, 0x9c, 0xe3, 0x02, 0x33, 0x25, 0xea, 0x4a, 0x16, 0xd1, 0xbb, 0x34, 0xc0, - 0xfa, 0x53, 0xce, 0x07, 0x19, 0x2a, 0x2f, 0x5e, 0x5f, 0x5c, 0xb0, 0x3c, 0x23, 0x0b, 0xcd, 0xa0, - 0xe0, 0x33, 0xc6, 0xee, 0x5c, 0xcc, 0x1a, 0x5d, 0x13, 0x8f, 0xc7, 0x70, 0x4a, 0xfe, 0x0a, 0xc9, - 0x5a, 0xd8, 0x52, 0x32, 0x5e, 0xd3, 0x47, 0xc2, 0x60, 0x5b, 0xe6, 0x91, 0xa9, 0x38, 0x62, 0x63, - 0x39, 0xf1, 0xf8, 0x47, 0xe5, 0xc4, 0xaf, 0xaa, 0x6d, 0x10, 0x34, 0xcd, 0x63, 0xfc, 0x07, 0x3e, - 0x71, 0x23, 0x3c, 0x60, 0xf7, 0x84, 0x8e, 0xc7, 0x4c, 0x24, 0x62, 0xb6, 0x75, 0x43, 0xb6, 0x27, - 0x06, 0xa5, 0x41, 0x78, 0xce, 0xcd, 0xb3, 0xc2, 0x05, 0x1c, 0xf4, 0x50, 0xbc, 0x1b, 0x76, 0x09, - 0x18, 0x8c, 0x91, 0x08, 0x10, 0xe6, 0x9c, 0x48, 0x2c, 0xe5, 0x96, 0xb7, 0x50, 0x4e, 0x94, 0x30, - 0xbf, 0xdb, 0xf0, 0x80, 0x80, 0xa4, 0x9c, 0x71, 0x02, 0xa8, 0xec, 0x34, 0xe8, 0x1d, 0x4b, 0x3a, - 0x58, 0x65, 0xa5, 0x9a, 0xb7, 0x1f, 0xe1, 0xa1, 0x56, 0x93, 0x3a, 0x5a, 0x65, 0x88, 0x8e, 0xa4, - 0x9a, 0xc9, 0x2a, 0x68, 0xde, 0xdc, 0x8f, 0x1a, 0x0b, 0xcb, 0xfc, 0x16, 0xdd, 0x3f, 0x1f, 0xc9, - 0xbf, 0x62, 0x19, 0xe2, 0x49, 0xaa, 0xae, 0xa4, 0xec, 0xab, 0x59, 0x39, 0xa5, 0x62, 0xdb, 0x27, - 0x10, 0x22, 0xb1, 0x02, 0xb7, 0x77, 0x4f, 0x4f, 0xc7, 0x98, 0xbc, 0x18, 0xe6, 0x1f, 0xef, 0x19, - 0xa7, 0x59, 0xa2, 0x17, 0x58, 0x85, 0xa5, 0xd4, 0x5c, 0x6d, 0x3c, 0xb3, 0xc2, 0xd3, 0x4c, 0x89, - 0x13, 0x20, 0xb8, 0x1f, 0xac, 0xfe, 0x20, 0x22, 0x14, 0x10, 0x35, 0x83, 0x66, 0x54, 0x5e, 0x22, - 0xda, 0x30, 0x1c, 0xaf, 0x1e, 0xb2, 0xed, 0x5d, 0x40, 0xb5, 0x7e, 0x3c, 0x60, 0x5f, 0x74, 0x5e, - 0x24, 0x29, 0x1c, 0xcd, 0xba, 0xc8, 0xbb, 0x15, 0xbf, 0xbf, 0x6e, 0x8c, 0xc8, 0x82, 0xfa, 0x1f, - 0xd3, 0xa7, 0x88, 0x05, 0x91, 0x73, 0x60, 0xe4, 0x63, 0x39, 0x73, 0x7a, 0x5c, 0xbe, 0x0e, 0x24, - 0x49, 0x4b, 0x88, 0x73, 0x84, 0x6c, 0xe0, 0xcd, 0xe2, 0x9b, 0xde, 0xa1, 0x19, 0x39, 0xf3, 0xc4, - 0xc4, 0x4e, 0xe0, 0x3d, 0x67, 0xc5, 0x3a, 0x89, 0x85, 0x2d, 0xcb, 0x7d, 0xd7, 0x71, 0xc5, 0x3d, - 0xc0, 0x65, 0xf3, 0xd8, 0x26, 0x54, 0x11, 0x62, 0x31, 0xd2, 0x47, 0x70, 0xe2, 0x80, 0x0d, 0xf8, - 0x96, 0xcd, 0xa0, 0x64, 0xfc, 0x2a, 0xdb, 0x59, 0x62, 0xd9, 0xf9, 0xef, 0x24, 0x7a, 0x5c, 0x02, - 0x80, 0x72, 0xbc, 0x63, 0xfe, 0x2e, 0x1c, 0x32, 0xa0, 0x6a, 0x80, 0x82, 0x47, 0x93, 0x17, 0xc8, - 0x1b, 0x50, 0x00, 0x94, 0xf5, 0x4b, 0x65, 0x71, 0x13, 0x47, 0xfc, 0x0e, 0x7e, 0x3a, 0xa2, 0x41, - 0xab, 0xad, 0x01, 0x58, 0x49, 0xc2, 0x8c, 0x12, 0x1c, 0x26, 0xbb, 0x08, 0x8b, 0x49, 0xac, 0x94, - 0x6c, 0x28, 0xc3, 0x60, 0x1f, 0x52, 0xa6, 0xcb, 0xbf, 0xf8, 0x5a, 0xb6, 0x55, 0x74, 0x6c, 0x89, - 0x51, 0x09, 0xd9, 0x71, 0x80, 0xd2, 0x4f, 0x0f, 0x8a, 0xe1, 0x7e, 0x61, 0x0b, 0x59, 0x79, 0x34, - 0x9a, 0x6b, 0xc4, 0x12, 0xee, 0xd3, 0x51, 0xbf, 0x3f, 0x3c, 0x26, 0x56, 0x33, 0xfb, 0xdd, 0xaa, - 0xf9, 0x0b, 0x26, 0x7e, 0x2f, 0xb6, 0x5e, 0xf7, 0xe5, 0x73, 0x11, 0xe5, 0xf2, 0xc4, 0x88, 0x21, - 0xf0, 0xd9, 0x84, 0x74, 0xb1, 0xe2, 0x63, 0x04, 0x1a, 0x0b, 0x4a, 0x4f, 0x60, 0xcc, 0x99, 0xe5, - 0xfd, 0xb4, 0xce, 0xc8, 0x87, 0xbf, 0xf9, 0x62, 0xf9, 0xf1, 0x03, 0xad, 0xe9, 0xb4, 0xd6, 0xaa, - 0xaa, 0x5e, 0x84, 0xe2, 0x78, 0x29, 0x0a, 0x19, 0xd3, 0x24, 0x68, 0x4c, 0x58, 0xaf, 0x66, 0xc0, - 0x0a, 0xc3, 0x47, 0x69, 0x9c, 0x2c, 0x6a, 0xa4, 0x58, 0xd5, 0xaf, 0x03, 0xc1, 0x9e, 0x0d, 0x0b, - 0x1e, 0xb8, 0x40, 0x22, 0x14, 0x20, 0xb1, 0xb1, 0x87, 0x57, 0x0b, 0x61, 0xdf, 0xc8, 0x12, 0xb7, - 0x3c, 0xc2, 0xed, 0xf9, 0xa7, 0x2c, 0xff, 0xcd, 0xc3, 0x22, 0xa2, 0x7a, 0x35, 0x8b, 0xe1, 0x21, - 0x2b, 0x7f, 0x17, 0x61, 0xc6, 0x50, 0x01, 0x3c, 0x49, 0xad, 0x0f, 0x20, 0x2a, 0xc9, 0xdc, 0xd4, - 0x2f, 0x2b, 0xfa, 0xb7, 0x73, 0xf3, 0xbe, 0x23, 0x84, 0xe3, 0xa4, 0x25, 0x99, 0x8f, 0xf8, 0x2b, - 0x7a, 0x7b, 0x78, 0x76, 0x60, 0x01, 0xe6, 0xc1, 0x62, 0x1e, 0x8a, 0xb4, 0x33, 0x9e, 0xb2, 0x2e, - 0x6e, 0xdb, 0xdd, 0xbd, 0xd1, 0x01, 0xe6, 0x7c, 0x7e, 0x54, 0x41, 0xe2, 0x1b, 0xc6, 0xfb, 0xfc, - 0x3f, 0xc0, 0xc7, 0x5c, 0x98, 0xf2, 0x23, 0xb0, 0x00, 0x46, 0xa6, 0xa4, 0x00, 0x04, 0x0b, 0x24, - 0x00, 0x04, 0x00, 0x14, 0xb8, 0x05, 0x87, 0x7c, 0x7a, 0xf0, 0x84, 0xc8, 0x80, 0xb9, 0x37, 0x3d, - 0x8b, 0x7e, 0x3f, 0x9b, 0xbb, 0x9f, 0x93, 0x57, 0x97, 0x84, 0xfa, 0x49, 0x3b, 0xfe, 0x5b, 0x5a, - 0x5e, 0x4a, 0x9b, 0xfe, 0x10, 0xed, 0xa7, 0xb0, 0x86, 0xb0, 0x3f, 0x95, 0x7b, 0xae, 0xea, 0xb4, - 0xfc, 0x47, 0x55, 0xda, 0x53, 0x44, 0x88, 0x0a, 0x5c, 0xbe, 0x4e, 0x45, 0xb1, 0xf7, 0x5a, 0x47, - 0xaf, 0x73, 0x53, 0x92, 0x41, 0x57, 0x98, 0xc9, 0xcf, 0x6d, 0x95, 0xb5, 0x63, 0xc2, 0x20, 0xae, - 0x48, 0x44, 0x26, 0xc8, 0x5f, 0xd4, 0xf0, 0x7c, 0xaa, 0xa8, 0x8f, 0x3e, 0x71, 0x30, 0xa4, 0x56, - 0xec, 0x30, 0x63, 0x19, 0x95, 0x81, 0x1e, 0x4a, 0xe4, 0xa6, 0xb1, 0xde, 0x88, 0xad, 0xd1, 0x7a, - 0x63, 0x2d, 0xac, 0x96, 0x3c, 0xff, 0x7c, 0x37, 0x00, 0xec, 0x8c, 0xd2, 0xc7, 0xde, 0x0d, 0x66, - 0x67, 0x38, 0xf7, 0x7f, 0xe5, 0xb5, 0x5b, 0x82, 0x80, 0x38, 0x8d, 0xc4, 0xfb, 0x1b, 0x74, 0x5d, - 0x58, 0xc0, 0xc1, 0x45, 0x94, 0x17, 0xd3, 0x8a, 0x5c, 0x24, 0x70, 0x06, 0x73, 0x5b, 0x2d, 0x16, - 0x0c, 0x18, 0x1f, 0x39, 0x69, 0x0e, 0x0e, 0x4d, 0x41, 0x9f, 0x10, 0xec, 0xa0, 0x0c, 0x81, 0x54, - 0x20, 0x9b, 0x10, 0x0c, 0x4f, 0x39, 0x62, 0x4f, 0x73, 0x31, 0xe9, 0xeb, 0x55, 0x5c, 0x32, 0x49, - 0x8c, 0x00, 0x08, 0x33, 0xee, 0x25, 0xed, 0xdf, 0x08, 0x81, 0x44, 0x69, 0x84, 0x80, 0xe0, 0x21, - 0xf6, 0xd2, 0x2d, 0x8e, 0x06, 0x30, 0x29, 0x7a, 0x19, 0x88, 0x0a, 0x78, 0x7b, 0xc3, 0x62, 0x48, - 0x01, 0x22, 0x94, 0x9a, 0x3d, 0xd4, 0x0e, 0xfe, 0x90, 0x5c, 0x36, 0x31, 0x51, 0x5d, 0x47, 0xf9, - 0xf5, 0x2c, 0xc6, 0xb4, 0xba, 0x1f, 0x0f, 0x22, 0x80, 0x1b, 0xa4, 0x8f, 0x12, 0x6f, 0xc3, 0x7e, - 0x96, 0x7e, 0x9b, 0x7e, 0x58, 0xab, 0xb3, 0x2f, 0x56, 0xf3, 0xa1, 0x2d, 0x57, 0xac, 0x55, 0xff, - 0x0c, 0x8d, 0x89, 0xf1, 0x7a, 0x36, 0xea, 0x9b, 0x64, 0x80, 0xd0, 0x95, 0xa0, 0xe9, 0xe1, 0xa8, - 0xf5, 0x08, 0x05, 0x4b, 0x78, 0x5a, 0x50, 0x06, 0x64, 0x3b, 0x2a, 0xc4, 0xf4, 0x4f, 0x7f, 0x84, - 0x46, 0xc4, 0x9a, 0x0c, 0x2b, 0x70, 0xe7, 0xf1, 0x5b, 0x9c, 0x24, 0x1b, 0x28, 0x00, 0xb7, 0x89, - 0x85, 0xab, 0x8a, 0xd5, 0xfa, 0xb5, 0x6e, 0x7f, 0x7f, 0x0e, 0xe0, 0x01, 0xf4, 0x96, 0x2d, 0x58, - 0x78, 0xf8, 0x6b, 0xe5, 0xaf, 0x77, 0x56, 0xa3, 0xea, 0xfd, 0x19, 0xc3, 0x22, 0xc8, 0xb6, 0x11, - 0xc6, 0xce, 0xde, 0x70, 0x39, 0xa6, 0xdf, 0xe1, 0xe2, 0x18, 0x01, 0xf8, 0xab, 0xd8, 0x27, 0x72, - 0x5a, 0x34, 0xff, 0x5d, 0x4c, 0xbd, 0x46, 0xf0, 0xf9, 0x9e, 0x0f, 0x2c, 0xc9, 0xe1, 0x33, 0x9c, - 0xc0, 0x9d, 0xd0, 0x98, 0xe1, 0xd1, 0x2b, 0x16, 0x00, 0x90, 0x60, 0x2f, 0x96, 0xef, 0xdb, 0xc2, - 0x20, 0xc0, 0x6c, 0x90, 0x28, 0x4c, 0x6b, 0x14, 0x92, 0x00, 0xa8, 0xb5, 0x2c, 0xac, 0x89, 0x9a, - 0xd2, 0x8c, 0x78, 0x1f, 0x6f, 0x38, 0x00, 0x79, 0x44, 0x07, 0x40, 0xc6, 0xc5, 0xea, 0x1d, 0x00, - 0xfd, 0x60, 0x14, 0xf0, 0x06, 0x50, 0x00, 0x20, 0x48, 0x05, 0x13, 0xb7, 0x09, 0x4a, 0x0c, 0x9b, - 0xa7, 0xf8, 0x91, 0xb5, 0x4b, 0x39, 0x85, 0x79, 0x05, 0x5e, 0xe2, 0x38, 0x46, 0x91, 0xb5, 0x2a, - 0x67, 0x91, 0xb1, 0x22, 0xbb, 0xcc, 0xa5, 0x47, 0x71, 0x9f, 0xc2, 0x58, 0xb9, 0xa1, 0x6a, 0xac, - 0x34, 0x91, 0x66, 0x08, 0x89, 0x85, 0x0e, 0xad, 0xe9, 0x5e, 0xce, 0x46, 0x26, 0x37, 0x47, 0x3f, - 0x8c, 0xe3, 0xab, 0xb0, 0x82, 0xc2, 0x8c, 0xf1, 0x01, 0x22, 0x56, 0xa4, 0xf2, 0xb4, 0xa5, 0xbf, - 0x0a, 0x10, 0xad, 0xd0, 0x59, 0x35, 0x07, 0xfc, 0x75, 0xfe, 0x8d, 0xbf, 0x3b, 0x53, 0x25, 0x69, - 0xbd, 0x36, 0x34, 0x52, 0x5e, 0x26, 0x14, 0x9c, 0x0a, 0x41, 0x0e, 0x13, 0x03, 0x84, 0x40, 0x08, - 0xe0, 0x8c, 0x71, 0x61, 0x5b, 0x1d, 0x20, 0x8c, 0x77, 0x83, 0xda, 0xd3, 0x68, 0xd1, 0xcb, 0xb0, - 0x63, 0xdf, 0x36, 0x2b, 0x61, 0xe1, 0xf0, 0x04, 0xa6, 0x24, 0x48, 0xcb, 0xaf, 0x9d, 0x43, 0xf8, - 0xec, 0x0e, 0xd8, 0xdb, 0xb8, 0x26, 0x64, 0xc8, 0x67, 0x36, 0xf8, 0xd0, 0x3b, 0xc4, 0x76, 0xc2, - 0x94, 0xf6, 0x2c, 0x63, 0xca, 0x7a, 0xae, 0x62, 0x83, 0x8a, 0x00, 0x15, 0x98, 0xfe, 0x76, 0x2c, - 0x56, 0x48, 0x4f, 0x39, 0xb8, 0x3b, 0x77, 0xf6, 0xc0, 0x98, 0x1b, 0x8a, 0xb4, 0x35, 0x3a, 0x6b, - 0xbb, 0x97, 0xe2, 0xee, 0x05, 0x30, 0x14, 0x92, 0x67, 0x0c, 0x25, 0xf2, 0x47, 0x1e, 0x1b, 0x70, - 0x03, 0xa2, 0x30, 0x97, 0x71, 0x37, 0xd1, 0x6d, 0xcf, 0xdf, 0x7f, 0x5a, 0x80, 0xd6, 0x81, 0x9b, - 0x56, 0x0f, 0x64, 0x1f, 0xa0, 0x9b, 0xb6, 0xa8, 0x1b, 0x87, 0xfc, 0xbd, 0x3c, 0x48, 0x44, 0x69, - 0x9a, 0xa1, 0xa8, 0x0b, 0x74, 0x66, 0x29, 0xa4, 0x44, 0x5e, 0x8b, 0xc4, 0x0c, 0xa0, 0x05, 0xe8, - 0x75, 0x0f, 0x52, 0x58, 0xc7, 0x5f, 0x25, 0xb8, 0x01, 0x9d, 0x02, 0x05, 0x0e, 0x32, 0x95, 0x42, - 0x89, 0x00, 0x1f, 0x01, 0x97, 0x3c, 0x4b, 0x9f, 0x0e, 0x12, 0x00, 0xa5, 0x46, 0x07, 0x25, 0xcd, - 0x4c, 0xff, 0xdb, 0xa9, 0x32, 0xcf, 0x31, 0x0c, 0x58, 0x2b, 0xc2, 0x8c, 0xa5, 0xad, 0x44, 0x02, - 0x83, 0x0e, 0x81, 0x55, 0x70, 0xfd, 0xe0, 0x77, 0xb7, 0xf2, 0xc1, 0x65, 0x8b, 0x7d, 0xb3, 0x88, - 0x2d, 0x0b, 0xe5, 0xd1, 0xef, 0x63, 0x2e, 0xfe, 0x1c, 0x50, 0x0c, 0x3c, 0x89, 0xb0, 0x74, 0xdf, - 0xff, 0xaa, 0x28, 0xb1, 0xfc, 0x20, 0xfb, 0x68, 0x1e, 0x2c, 0x76, 0xff, 0x16, 0xd1, 0x68, 0xc6, - 0xc7, 0xdb, 0x6d, 0xbf, 0x06, 0x20, 0x49, 0x0a, 0x4f, 0x01, 0xc3, 0xc0, 0x1c, 0x2d, 0x37, 0xd8, - 0x75, 0x86, 0xa7, 0xb2, 0x4e, 0x78, 0xb0, 0xd7, 0x7b, 0xed, 0xa0, 0xb7, 0xfd, 0x71, 0xf7, 0x05, - 0x20, 0x84, 0x6c, 0x75, 0xe1, 0x30, 0xac, 0xc6, 0x4e, 0x0a, 0x9e, 0xfa, 0xb0, 0xa8, 0x7a, 0xa9, - 0xfb, 0x2a, 0x37, 0x87, 0x1f, 0x11, 0x80, 0x1d, 0x0b, 0x13, 0x06, 0xea, 0xf4, 0x47, 0xb4, 0x70, - 0x59, 0x6a, 0xd1, 0xbf, 0xe0, 0x48, 0x04, 0x23, 0x4a, 0x70, 0x59, 0x15, 0x47, 0x80, 0x3c, 0x2e, - 0x72, 0xc0, 0xd9, 0x80, 0x25, 0x18, 0x02, 0x22, 0x8d, 0xe4, 0xa3, 0x35, 0x59, 0xc0, 0x01, 0xe9, - 0x83, 0xcc, 0xc0, 0xa8, 0xf7, 0x77, 0xe3, 0xdf, 0x42, 0x0a, 0x83, 0xcf, 0x84, 0x8c, 0x0a, 0xc0, - 0x85, 0x8c, 0x81, 0x40, 0x1d, 0x1f, 0xca, 0xa1, 0xf5, 0x85, 0x47, 0x19, 0x55, 0xf7, 0x0d, 0xe0, - 0x30, 0x10, 0x7a, 0x47, 0x0a, 0xaa, 0x64, 0x25, 0x46, 0x27, 0xa3, 0xd9, 0x09, 0x64, 0x65, 0xcd, - 0x43, 0xf3, 0xc0, 0xd0, 0x4a, 0x4e, 0x61, 0x6f, 0x7f, 0x82, 0x62, 0x83, 0x08, 0xa9, 0x94, 0x22, - 0xa6, 0xcf, 0xf2, 0x8d, 0xe4, 0xaa, 0xad, 0x72, 0x11, 0xef, 0x1d, 0x88, 0x04, 0x27, 0x53, 0xb8, - 0xed, 0xa3, 0xcb, 0xc2, 0x66, 0x55, 0xaa, 0xad, 0x7c, 0xa4, 0x55, 0x55, 0x71, 0x14, 0x54, 0xa7, - 0xc6, 0xc9, 0x2b, 0x71, 0xbb, 0xa5, 0x86, 0x2b, 0x1f, 0x9f, 0x15, 0xdf, 0xe3, 0xd7, 0x3a, 0x5f, - 0x1f, 0x5b, 0x62, 0x3c, 0x7c, 0xca, 0xa9, 0x58, 0x6c, 0xf3, 0x8f, 0x7b, 0x88, 0xbb, 0x32, 0x2f, - 0xe0, 0x86, 0xf0, 0x64, 0xd6, 0xdb, 0xe0, 0x86, 0x17, 0xd2, 0x4d, 0x17, 0xc7, 0xae, 0x8a, 0x12, - 0xc2, 0x23, 0x2f, 0x69, 0xec, 0x9b, 0x48, 0x99, 0x1d, 0x30, 0xbe, 0x8a, 0x66, 0x57, 0x50, 0x6c, - 0x22, 0xf6, 0x11, 0x05, 0x23, 0x4c, 0x7f, 0x92, 0x07, 0xcf, 0x64, 0x54, 0x0f, 0x56, 0x91, 0x27, - 0xaa, 0xc3, 0x28, 0x16, 0x0e, 0x07, 0xc5, 0x02, 0x60, 0xc5, 0xb2, 0x28, 0x41, 0x9c, 0x5d, 0xc9, - 0xbc, 0x5b, 0x80, 0x21, 0x99, 0x5a, 0x40, 0x27, 0x98, 0x25, 0xb4, 0x7a, 0xf8, 0x78, 0x35, 0xa6, - 0x97, 0x21, 0xe3, 0x93, 0xfe, 0x04, 0x10, 0xa5, 0x5a, 0x61, 0xfa, 0x70, 0x2a, 0x3a, 0xc0, 0x56, - 0xa8, 0xab, 0x80, 0x68, 0x1c, 0x0f, 0x4e, 0x28, 0x5e, 0xd0, 0xe8, 0x6a, 0x66, 0x23, 0xdc, 0x3f, - 0xf1, 0x21, 0xa4, 0x4f, 0xc2, 0x21, 0x11, 0xa7, 0x0e, 0x02, 0xe3, 0xa8, 0xd7, 0xfa, 0x7b, 0xa9, - 0x2d, 0xd4, 0x58, 0xce, 0x06, 0x80, 0xed, 0x87, 0x9c, 0x3f, 0x59, 0x4c, 0xee, 0x33, 0x2c, 0xb6, - 0x28, 0x48, 0x50, 0xff, 0xff, 0xc3, 0x20, 0xae, 0x0b, 0x2f, 0xe8, 0x89, 0x40, 0x00, 0x96, 0x83, - 0x44, 0x8b, 0x83, 0xf9, 0x58, 0x93, 0x23, 0x81, 0xc1, 0xfe, 0x17, 0x8b, 0xc4, 0x15, 0xe1, 0xf0, - 0xc1, 0x0e, 0x00, 0x58, 0xbb, 0x29, 0x13, 0x0c, 0x2d, 0xb7, 0xc5, 0x69, 0xb9, 0x4c, 0x88, 0x4c, - 0xcd, 0x94, 0x79, 0x1a, 0x67, 0xbe, 0x19, 0x44, 0x00, 0xe8, 0x44, 0x84, 0xc2, 0x20, 0xd5, 0xd4, - 0xc5, 0x96, 0x3f, 0xf9, 0xf6, 0x2a, 0x17, 0xf0, 0xee, 0x7d, 0xb9, 0x69, 0x7b, 0x15, 0x67, 0xa6, - 0xec, 0x3d, 0x20, 0x28, 0x26, 0x24, 0xac, 0x19, 0x18, 0x6a, 0x77, 0xc2, 0x19, 0x6b, 0x19, 0x52, - 0xf1, 0x9e, 0xf6, 0x76, 0x70, 0xec, 0x43, 0x43, 0x72, 0x41, 0xc2, 0xec, 0x0e, 0xbe, 0xb7, 0x04, - 0xaf, 0x51, 0xed, 0x74, 0x6c, 0xcb, 0xbf, 0xe1, 0xd9, 0x52, 0x03, 0xa0, 0xba, 0x06, 0xa1, 0xe0, - 0x00, 0x4d, 0x80, 0x77, 0x6d, 0x41, 0xdf, 0xc7, 0xcf, 0x01, 0xf9, 0xef, 0x81, 0x82, 0x41, 0x81, - 0x1c, 0xa5, 0x70, 0x8f, 0xfc, 0x14, 0xf0, 0x90, 0x94, 0xce, 0x1f, 0x6a, 0xd3, 0x5f, 0x12, 0x61, - 0xb5, 0xd3, 0x0d, 0x1e, 0xf5, 0x7c, 0x2e, 0x56, 0x5a, 0xc0, 0x5f, 0x3d, 0x83, 0xc6, 0xa8, 0xbc, - 0x04, 0x21, 0x91, 0x1b, 0xc1, 0x7d, 0xb1, 0xf8, 0x91, 0x01, 0x41, 0x00, 0xd6, 0xa3, 0x58, 0x8e, - 0xe3, 0x02, 0xba, 0x10, 0x79, 0x00, 0xad, 0xe8, 0x1a, 0x68, 0xc6, 0x71, 0xb0, 0x10, 0x6d, 0xf8, - 0xc3, 0x59, 0x32, 0x30, 0x6f, 0xd6, 0x71, 0xf7, 0x12, 0x0c, 0x06, 0x55, 0x75, 0xc7, 0x99, 0xe0, - 0x18, 0x52, 0xa5, 0x76, 0x4f, 0x07, 0x0b, 0x19, 0x82, 0xea, 0x14, 0x29, 0x6e, 0xe2, 0x83, 0x7f, - 0x3e, 0x5e, 0x10, 0x04, 0x21, 0x42, 0xb4, 0x86, 0xef, 0xd6, 0x94, 0xe1, 0xd6, 0x79, 0x79, 0xc0, - 0x91, 0x64, 0x17, 0xde, 0xc1, 0xec, 0xb6, 0x2b, 0xb5, 0xe6, 0x81, 0x03, 0x87, 0x0e, 0x23, 0x5f, - 0x04, 0x21, 0x49, 0x38, 0x02, 0xc8, 0xb0, 0x06, 0x4a, 0x02, 0xc4, 0xb0, 0x62, 0xb9, 0xfc, 0xb1, - 0x89, 0x54, 0x3e, 0x15, 0x4c, 0x1e, 0xf0, 0x1f, 0xe3, 0xf8, 0x39, 0x0a, 0x6c, 0x1c, 0x4c, 0x30, - 0x10, 0xa9, 0x52, 0xcd, 0x98, 0x71, 0x31, 0x1d, 0x4c, 0x22, 0x52, 0x44, 0x83, 0x55, 0x18, 0xf5, - 0x46, 0xe3, 0xbd, 0x80, 0x00, 0x56, 0x9b, 0x57, 0xf8, 0xc8, 0xba, 0xe2, 0xe2, 0x9c, 0x4e, 0x05, - 0xe2, 0xeb, 0x38, 0xcb, 0x71, 0x23, 0x9c, 0x48, 0xe9, 0xf1, 0xf9, 0xb3, 0xbd, 0x99, 0x21, 0xd6, - 0xb8, 0x64, 0x32, 0x14, 0x85, 0x00, 0x72, 0x25, 0x55, 0x10, 0x00, 0x2b, 0x1d, 0x8b, 0x81, 0x99, - 0x60, 0x8d, 0x9a, 0x49, 0x18, 0xdd, 0x84, 0xe3, 0x51, 0x6b, 0x63, 0x0e, 0x80, 0xab, 0x2c, 0x49, - 0x12, 0xff, 0x23, 0x3c, 0xb3, 0x4f, 0xc1, 0x0c, 0x6d, 0x10, 0x1c, 0x07, 0x2f, 0xa9, 0xcb, 0x96, - 0x28, 0xf5, 0x0a, 0xa2, 0x52, 0xd8, 0xde, 0xb9, 0x6d, 0xe5, 0x64, 0x4a, 0x24, 0x44, 0x20, 0xe2, - 0x7d, 0xda, 0xe6, 0x07, 0xdc, 0xfb, 0x01, 0x39, 0x8d, 0x05, 0x93, 0x4a, 0x39, 0x73, 0x58, 0x9b, - 0xa6, 0xaa, 0x3c, 0x29, 0xc9, 0xad, 0x45, 0x72, 0x8b, 0xbb, 0xc7, 0xe2, 0x41, 0x00, 0xe5, 0x36, - 0x59, 0x45, 0x71, 0xdd, 0x05, 0x6d, 0x31, 0x0b, 0x09, 0xd7, 0xdb, 0xb6, 0x0a, 0x6e, 0x14, 0xff, - 0xf8, 0x91, 0x87, 0xac, 0x49, 0x63, 0x13, 0xe4, 0xf9, 0x76, 0xee, 0xee, 0x99, 0xfe, 0x3f, 0xe5, - 0xac, 0xbb, 0x07, 0x7f, 0x0c, 0xa2, 0x80, 0x31, 0xa1, 0xef, 0x8f, 0x26, 0xf3, 0x6d, 0xfa, 0x6d, - 0xdd, 0x9e, 0x31, 0xc4, 0xa8, 0xac, 0x75, 0xfb, 0x93, 0xf0, 0x88, 0x44, 0x28, 0x28, 0x48, 0x0f, - 0x2d, 0x81, 0x67, 0x32, 0x5a, 0x4a, 0x2b, 0x0b, 0x65, 0xac, 0xfe, 0x0f, 0xf0, 0x1a, 0x47, 0x2e, - 0xfc, 0xaa, 0x32, 0x18, 0x4d, 0x4f, 0xd5, 0x8b, 0xa8, 0x94, 0x05, 0x61, 0x52, 0x36, 0x2a, 0xc6, - 0xaa, 0x3b, 0x0f, 0x22, 0x80, 0x2f, 0xf8, 0x35, 0x3a, 0x1c, 0xec, 0x21, 0xbe, 0xf8, 0x70, 0x1b, - 0xc7, 0x06, 0xf5, 0xaa, 0xed, 0x1d, 0xbb, 0xb9, 0x35, 0x49, 0xab, 0xf8, 0x89, 0x8c, 0xf2, 0xa7, - 0xe7, 0x0e, 0x82, 0xd8, 0x15, 0x2e, 0xdb, 0x46, 0xca, 0xc3, 0xce, 0x01, 0x98, 0x59, 0x81, 0x96, - 0xb3, 0x94, 0xff, 0x9f, 0x80, 0xb7, 0xaf, 0x04, 0x31, 0xe1, 0xa0, 0x35, 0x34, 0x32, 0x90, 0xa7, - 0xbe, 0x4e, 0x38, 0x2d, 0xe9, 0x4b, 0x39, 0xa6, 0x07, 0xdd, 0x55, 0x46, 0xd5, 0x81, 0xf9, 0xd7, - 0xc2, 0x70, 0x76, 0xf5, 0xe8, 0xb9, 0xfe, 0xbc, 0x40, 0x90, 0x8d, 0xdf, 0x13, 0xf7, 0x25, 0x6e, - 0xab, 0x4c, 0x5d, 0x3c, 0x48, 0x90, 0xa4, 0xf7, 0xe7, 0xb8, 0x13, 0x36, 0xf2, 0x6c, 0x83, 0x0a, - 0x72, 0x92, 0x9b, 0x3e, 0x41, 0x6c, 0xff, 0x24, 0x28, 0x1d, 0x02, 0xcc, 0xef, 0x1d, 0xdc, 0x48, - 0x0a, 0x10, 0x53, 0x7f, 0xec, 0xe2, 0x02, 0x3b, 0x41, 0x70, 0x20, 0xaa, 0x3d, 0x01, 0x30, 0x02, - 0xb0, 0x96, 0xb4, 0x1e, 0xa9, 0x63, 0x2f, 0xc2, 0x21, 0x91, 0xb2, 0x3b, 0x55, 0x89, 0x08, 0x80, - 0x58, 0x55, 0xbf, 0x06, 0xf7, 0x32, 0x3d, 0xf2, 0xc6, 0xed, 0x44, 0x00, 0xac, 0x50, 0xea, 0xd4, - 0xad, 0xd0, 0xf1, 0xe5, 0x6e, 0x87, 0x8f, 0x10, 0x09, 0x7d, 0x55, 0xc3, 0xc1, 0xa6, 0x0f, 0x70, - 0xf0, 0x9f, 0x2d, 0xef, 0x7c, 0x96, 0x95, 0x55, 0xf2, 0x5d, 0xde, 0x14, 0xc4, 0x02, 0xc2, 0x0a, - 0xdb, 0x15, 0xda, 0x7c, 0x4b, 0xc5, 0xcf, 0x12, 0xf1, 0x7d, 0xc3, 0x20, 0x26, 0x46, 0x89, 0x01, - 0x0b, 0xb0, 0x6e, 0x3e, 0x60, 0xca, 0xfa, 0xc8, 0x3e, 0xb5, 0x8f, 0xc4, 0x2a, 0xaa, 0xf5, 0xd4, - 0xe4, 0x59, 0x94, 0x2c, 0xca, 0xc8, 0x9e, 0x13, 0x95, 0x2b, 0x16, 0x05, 0x0d, 0x17, 0xff, 0x0c, - 0xb2, 0x80, 0x29, 0xfc, 0x1d, 0x9e, 0x37, 0x7b, 0xe8, 0x74, 0xdd, 0x77, 0x27, 0x6f, 0x7c, 0x14, - 0x68, 0x3f, 0xed, 0xee, 0xf6, 0xf8, 0xec, 0xe1, 0x10, 0xc8, 0x50, 0x61, 0xe0, 0x3c, 0xf0, 0xf4, - 0x60, 0x0a, 0x8a, 0x94, 0xe3, 0xc9, 0xea, 0xa1, 0x4b, 0xcb, 0x1d, 0x62, 0x83, 0x10, 0x03, 0x9b, - 0x85, 0x55, 0x39, 0xcc, 0xb0, 0xe2, 0x80, 0x52, 0x8d, 0x42, 0x2d, 0xc3, 0xee, 0x25, 0xdc, 0x6a, - 0x5b, 0xb6, 0x27, 0x46, 0xa2, 0x5c, 0xa6, 0x78, 0xdd, 0xf1, 0x99, 0x21, 0xee, 0x91, 0xfa, 0x7f, - 0x12, 0x24, 0x29, 0xd0, 0x10, 0x11, 0xef, 0xd6, 0xde, 0xf6, 0x64, 0xf5, 0x99, 0x6e, 0x44, 0x39, - 0x5b, 0xbb, 0x39, 0x38, 0x54, 0x98, 0x0a, 0xf7, 0x0c, 0x04, 0x02, 0x87, 0x12, 0x58, 0x92, 0xc0, - 0x31, 0x1e, 0x27, 0x85, 0x99, 0x78, 0xa1, 0x9c, 0x1c, 0x66, 0x22, 0x08, 0xec, 0x91, 0xa8, 0xff, - 0x46, 0x0a, 0x92, 0xf8, 0x71, 0x40, 0x00, 0xa7, 0x71, 0xd3, 0x11, 0xd8, 0xfc, 0xdf, 0xa5, 0x14, - 0x4b, 0x14, 0xd3, 0x7a, 0x6d, 0xf7, 0xe2, 0xd6, 0x9a, 0x7f, 0xe0, 0x84, 0x10, 0x05, 0x0e, 0x4e, - 0x0e, 0x01, 0xde, 0x1a, 0x86, 0xa1, 0xfd, 0x1e, 0x06, 0x81, 0xdc, 0x0d, 0x4a, 0x20, 0x74, 0x6d, - 0x03, 0xf0, 0x3a, 0x0b, 0xc8, 0x4e, 0x93, 0xb0, 0x1a, 0x14, 0x83, 0x30, 0x2a, 0x9c, 0xa1, 0x74, - 0xd4, 0x72, 0x99, 0x38, 0x15, 0x38, 0x1c, 0x7e, 0x20, 0x18, 0x8d, 0x14, 0xff, 0x25, 0xb1, 0xa5, - 0xdb, 0x55, 0x86, 0xb2, 0x78, 0xe4, 0xe6, 0xe7, 0xba, 0xde, 0x79, 0xe3, 0xd7, 0x10, 0x25, 0xb0, - 0x7f, 0x38, 0x80, 0xa8, 0xf0, 0xd7, 0x77, 0xbc, 0x29, 0xc4, 0x4e, 0xe1, 0x7e, 0xcc, 0x38, 0xe0, - 0xcd, 0x0b, 0xf0, 0x42, 0x02, 0x44, 0x61, 0xc9, 0x95, 0x3d, 0x83, 0x71, 0xbd, 0x45, 0x42, 0xb6, - 0x37, 0xf2, 0x6a, 0x89, 0x07, 0xc2, 0x02, 0xa0, 0x00, 0xb0, 0xdd, 0x3a, 0x19, 0xe5, 0x80, 0x7b, - 0xc6, 0x66, 0x11, 0x10, 0x30, 0x87, 0xb8, 0xfc, 0x2f, 0x2f, 0xb7, 0xe6, 0x3a, 0x5c, 0xe0, 0xf1, - 0xfe, 0x87, 0xf2, 0xa8, 0xca, 0xa9, 0x52, 0xc1, 0xc2, 0xca, 0x04, 0x00, 0xed, 0xe8, 0x36, 0xf8, - 0xcd, 0xf6, 0xdb, 0xfd, 0xbd, 0xb6, 0xf8, 0x80, 0xa4, 0xe5, 0x8a, 0xc4, 0x0b, 0x0a, 0xe9, 0x23, - 0x88, 0x2e, 0x48, 0x2a, 0x50, 0x75, 0x10, 0x02, 0xc0, 0xe2, 0xf9, 0x63, 0x26, 0x6b, 0x39, 0xe7, - 0x8f, 0x4c, 0x16, 0x2a, 0x50, 0xc6, 0x20, 0x10, 0x85, 0x25, 0x80, 0x01, 0x48, 0x3c, 0x0b, 0x9c, - 0x00, 0x04, 0x30, 0x78, 0x2e, 0x5e, 0xac, 0xe4, 0x8a, 0x9e, 0x12, 0x09, 0x35, 0x8b, 0x72, 0x2e, - 0xc3, 0xc9, 0xea, 0x44, 0x31, 0x21, 0x7c, 0x00, 0xe2, 0x40, 0x64, 0x8c, 0x2a, 0xa4, 0xad, 0x4e, - 0x60, 0x11, 0xce, 0x9c, 0x4c, 0x28, 0x4e, 0x41, 0xa8, 0xac, 0xf0, 0x90, 0x5e, 0x38, 0xc8, 0x98, - 0xd5, 0x4a, 0xd8, 0xf7, 0xce, 0x70, 0xe7, 0x21, 0x5c, 0x01, 0x0c, 0x24, 0xc7, 0x7d, 0x5f, 0x04, - 0xfb, 0xce, 0xf5, 0xe7, 0xf5, 0xf2, 0xe5, 0xf1, 0xb7, 0x8f, 0xb8, 0xb8, 0x86, 0x98, 0x3a, 0x7f, - 0x08, 0x81, 0x44, 0x28, 0x41, 0x00, 0x3c, 0x5d, 0xd6, 0xc5, 0x10, 0xd4, 0xd2, 0x45, 0x8c, 0xf1, - 0xc2, 0xdc, 0x19, 0x38, 0x03, 0x90, 0xe8, 0x7c, 0xb0, 0x65, 0x8e, 0xc3, 0xc6, 0x36, 0x42, 0x09, - 0x43, 0xa8, 0x9e, 0x78, 0x63, 0x94, 0xab, 0x36, 0x57, 0x12, 0x67, 0x7d, 0xdf, 0x27, 0x28, 0x9d, - 0x49, 0xc2, 0x30, 0x40, 0x02, 0x20, 0x82, 0x85, 0x01, 0x96, 0x00, 0x31, 0x58, 0x3b, 0xec, 0x39, - 0x80, 0x2f, 0x62, 0x71, 0x11, 0x13, 0x90, 0x5e, 0x25, 0xf7, 0xfe, 0x5a, 0xff, 0xb6, 0x0c, 0x75, - 0x16, 0x17, 0x40, 0x58, 0x0f, 0xca, 0x07, 0xf0, 0x3f, 0x68, 0x7b, 0xd4, 0xb0, 0x2c, 0xf0, 0x03, - 0x58, 0xe3, 0x17, 0x31, 0x5f, 0x4d, 0x3d, 0xbe, 0x0c, 0x41, 0x00, 0x52, 0x28, 0xc5, 0x06, 0x55, - 0x59, 0x85, 0x07, 0xd4, 0x50, 0x62, 0xb1, 0xb1, 0xcf, 0xcf, 0x1c, 0x66, 0xb2, 0x20, 0x17, 0x14, - 0x23, 0x51, 0xe7, 0xaa, 0xe0, 0x00, 0x10, 0x00, 0x19, 0x05, 0x20, 0x40, 0x87, 0x30, 0x94, 0xb2, - 0xb4, 0x33, 0x1c, 0x03, 0x0e, 0x04, 0x10, 0x1b, 0x01, 0x48, 0x1a, 0xb0, 0xc6, 0x5a, 0x1e, 0x16, - 0xdf, 0xdf, 0xce, 0x60, 0xab, 0x01, 0x70, 0x63, 0x24, 0xca, 0x59, 0x9a, 0x43, 0x51, 0x94, 0x17, - 0x10, 0x93, 0x57, 0x9d, 0xa8, 0x20, 0x8d, 0x16, 0x00, 0xc5, 0x97, 0xc0, 0x4a, 0x21, 0xa9, 0x86, - 0x30, 0x05, 0xbc, 0x8c, 0x74, 0x67, 0xea, 0x10, 0x70, 0x93, 0xbc, 0x49, 0xe7, 0x78, 0x3d, 0x72, - 0x81, 0x4c, 0x46, 0x9e, 0x34, 0xa7, 0x79, 0x27, 0x49, 0x39, 0x88, 0x8c, 0xd8, 0x70, 0x90, 0x04, - 0x18, 0xcc, 0x1d, 0x3a, 0x71, 0xc3, 0xdb, 0xb7, 0xfa, 0xb8, 0xf4, 0xa3, 0x8d, 0x20, 0x63, 0xac, - 0xdd, 0xc0, 0x64, 0x81, 0x8a, 0x6c, 0x0c, 0x01, 0xea, 0x58, 0xb7, 0xc1, 0x52, 0x38, 0x0c, 0xe0, - 0x7c, 0xc2, 0x8f, 0x9b, 0x51, 0x6e, 0xdb, 0x9f, 0x70, 0xc8, 0x14, 0x02, 0x90, 0xe0, 0xd0, 0x55, - 0x2a, 0x20, 0x06, 0x64, 0x4e, 0xfc, 0x38, 0x39, 0x14, 0x2c, 0x0d, 0x05, 0xa0, 0xb0, 0x4b, 0xae, - 0x5a, 0xca, 0xc2, 0xc8, 0xf6, 0x02, 0xc8, 0x96, 0x59, 0x55, 0x63, 0x4c, 0x38, 0x18, 0x4d, 0xc0, - 0xe7, 0x08, 0x03, 0x11, 0x85, 0x17, 0xaf, 0x1c, 0x3f, 0x0e, 0x2e, 0x0d, 0x4e, 0x02, 0x8d, 0x87, - 0xed, 0x69, 0x97, 0x4f, 0x99, 0x6b, 0x0e, 0x51, 0x95, 0x90, 0xcf, 0x08, 0x91, 0x6b, 0xad, 0x56, - 0xb0, 0x9f, 0x31, 0x75, 0x36, 0x13, 0x8a, 0xd2, 0x87, 0x1e, 0xb6, 0x1e, 0x0e, 0x20, 0xa6, 0xcc, - 0x0f, 0xe5, 0x39, 0x49, 0x63, 0x38, 0x02, 0xe1, 0x92, 0x09, 0x44, 0x31, 0xb8, 0x39, 0xbf, 0x1f, - 0xda, 0xce, 0x85, 0x8b, 0x84, 0x02, 0x85, 0xc3, 0x93, 0xd2, 0x95, 0x06, 0xd2, 0x06, 0x43, 0x00, - 0x63, 0x82, 0x78, 0x0c, 0x8d, 0x60, 0xf7, 0x1e, 0xc2, 0xda, 0x27, 0x96, 0xbb, 0x4d, 0xa4, 0x8b, - 0x02, 0x88, 0x10, 0x02, 0x90, 0x99, 0xbc, 0x62, 0x5c, 0x68, 0x07, 0x5f, 0x55, 0x99, 0x38, 0xac, - 0xeb, 0xe8, 0xf6, 0x47, 0x77, 0xd1, 0x9e, 0x58, 0x9c, 0x70, 0xdc, 0x60, 0x00, 0x1c, 0x01, 0xbe, - 0x24, 0x48, 0x50, 0x41, 0xee, 0x2a, 0xe4, 0x9e, 0x08, 0x58, 0x2a, 0x4a, 0x83, 0xcd, 0x91, 0x4c, - 0xa0, 0x7e, 0x3b, 0xab, 0x0c, 0x98, 0xd1, 0x31, 0xa1, 0x7c, 0xec, 0xfc, 0x1c, 0x14, 0x02, 0x11, - 0xb0, 0x72, 0x40, 0xc6, 0xe9, 0xb0, 0x41, 0x34, 0x97, 0x00, 0x01, 0x34, 0x1b, 0x00, 0x13, 0x2f, - 0xb9, 0x6c, 0xb4, 0x07, 0x18, 0xc0, 0xf8, 0x8d, 0xe4, 0x56, 0x0d, 0x4a, 0xa7, 0xdb, 0xd8, 0xac, - 0x07, 0x10, 0xa8, 0x8b, 0xd6, 0x4f, 0xe2, 0x06, 0x95, 0x7a, 0xe5, 0xb1, 0x2e, 0x4f, 0xc1, 0xbf, - 0x0f, 0x60, 0xec, 0xf4, 0x89, 0xa5, 0x27, 0x83, 0xde, 0x78, 0xf7, 0xf1, 0x48, 0xc1, 0xf4, 0xe5, - 0x87, 0xae, 0x53, 0xbe, 0xe1, 0x7e, 0x41, 0x0b, 0x52, 0x70, 0xc7, 0x21, 0x77, 0x7e, 0x11, 0x16, - 0x57, 0x7b, 0xb8, 0xad, 0xdf, 0x06, 0x10, 0x8d, 0x22, 0x52, 0xa5, 0xce, 0x20, 0x1e, 0x99, 0x6c, - 0xf7, 0xeb, 0xf8, 0x29, 0x97, 0xee, 0xae, 0x2b, 0x3f, 0x77, 0x7b, 0xf8, 0x20, 0x10, 0x21, 0xf8, - 0xd6, 0x31, 0x5e, 0xf1, 0x0f, 0xf6, 0x50, 0xc8, 0x02, 0xb5, 0x46, 0x5b, 0xae, 0x4e, 0xee, 0x0d, - 0xb9, 0x37, 0xb9, 0xb1, 0x10, 0x1b, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x42, 0x21, 0x31, - 0xa2, 0xf1, 0x46, 0x55, 0x5d, 0x6b, 0xe1, 0x2b, 0xde, 0xae, 0xae, 0x7e, 0x8b, 0x50, 0x69, 0xcd, - 0xb6, 0xef, 0x89, 0x89, 0x33, 0xaf, 0xab, 0x1e, 0x26, 0x12, 0x2a, 0xbb, 0x77, 0xdb, 0xc4, 0xc4, - 0xdd, 0xee, 0x9b, 0x68, 0xbe, 0x2c, 0xea, 0xba, 0xae, 0x0b, 0xf9, 0x04, 0x2a, 0xee, 0x24, 0x40, - 0x43, 0x8a, 0xcf, 0xee, 0xa9, 0xe6, 0x63, 0xec, 0xaa, 0x2f, 0x32, 0x47, 0x08, 0xea, 0x26, 0x20, - 0x89, 0xea, 0xfb, 0x7e, 0x26, 0x6f, 0xf8, 0xa3, 0x3d, 0x30, 0x8e, 0x2f, 0xa0, 0xbb, 0xc1, 0x1c, - 0x40, 0x82, 0x05, 0x86, 0x69, 0xff, 0x31, 0x6f, 0x77, 0xca, 0x5d, 0xdf, 0xfe, 0x09, 0x0b, 0x17, - 0xdb, 0x88, 0x10, 0x51, 0xd7, 0x56, 0xb8, 0x8f, 0x11, 0xc4, 0x88, 0xe2, 0x44, 0x4d, 0xcc, 0x17, - 0xdd, 0x43, 0xbc, 0x20, 0x16, 0x55, 0xde, 0xfa, 0xd4, 0xf1, 0x22, 0x38, 0x88, 0x93, 0x9d, 0x23, - 0xd1, 0x6d, 0x2f, 0x90, 0xae, 0xec, 0xab, 0x90, 0x9a, 0xaf, 0x92, 0x7c, 0x6b, 0x27, 0x21, 0xad, - 0x5f, 0x13, 0x12, 0x46, 0x5a, 0x8b, 0x8b, 0xfe, 0x3f, 0x77, 0xb7, 0x5e, 0xab, 0xec, 0x5e, 0x34, - 0x77, 0x9a, 0x11, 0x08, 0x18, 0x97, 0x2f, 0x1d, 0x7f, 0x82, 0x00, 0x57, 0x27, 0xa6, 0x5d, 0x0b, - 0x57, 0x2c, 0xc9, 0xf3, 0x31, 0xd3, 0x08, 0x23, 0xc4, 0x9b, 0xcd, 0x2c, 0x4c, 0x15, 0x9c, 0x5d, - 0x45, 0xd7, 0x08, 0x39, 0x35, 0x73, 0xe7, 0xdf, 0x74, 0x36, 0x49, 0xf1, 0x11, 0xd9, 0x98, 0x7c, - 0x0e, 0xdd, 0xd9, 0x56, 0x99, 0x82, 0x7b, 0xfd, 0xcf, 0x25, 0xd7, 0xc5, 0x1b, 0x63, 0x57, 0x57, - 0x17, 0xc4, 0x47, 0xd4, 0xdd, 0x5d, 0x01, 0x25, 0x20, 0xb9, 0x24, 0xc8, 0xe3, 0xf1, 0xca, 0xbe, - 0x26, 0x2f, 0x88, 0xc2, 0x5d, 0x1b, 0xb9, 0xbf, 0x38, 0x44, 0x48, 0x4e, 0xab, 0xe6, 0xc3, 0x67, - 0x12, 0x2c, 0xba, 0x8e, 0x2e, 0xec, 0x36, 0x62, 0x04, 0x9b, 0x76, 0x9a, 0xf2, 0x8a, 0xb8, 0xad, - 0xfc, 0x10, 0x87, 0x46, 0x07, 0x5f, 0x77, 0x9b, 0x82, 0xc0, 0xd0, 0x3a, 0x5c, 0x92, 0xab, 0x3c, - 0xbd, 0x25, 0x2a, 0xeb, 0x3d, 0xc4, 0x08, 0x0a, 0x64, 0xb6, 0xa6, 0xcb, 0xdd, 0x66, 0xa9, 0xc1, - 0xf7, 0x63, 0xf2, 0x18, 0xe8, 0x3f, 0x53, 0xf2, 0x86, 0xaf, 0x72, 0x72, 0x4d, 0x8c, 0xa4, 0x99, - 0xe1, 0x02, 0xb8, 0x6a, 0xed, 0x5e, 0x38, 0xb5, 0x49, 0x14, 0x5e, 0x20, 0x47, 0x13, 0x04, 0xf4, - 0x63, 0x48, 0xbb, 0x42, 0xa9, 0x35, 0xcf, 0x8f, 0xda, 0xa1, 0xd8, 0xd8, 0xd3, 0xda, 0x31, 0x8f, - 0x88, 0x12, 0x88, 0xff, 0x13, 0x4e, 0x89, 0x54, 0x90, 0x5d, 0x44, 0x49, 0x17, 0x51, 0x2b, 0xe1, - 0x1f, 0x08, 0x5c, 0x1e, 0xb0, 0x4e, 0x8d, 0x5e, 0x22, 0x24, 0x69, 0xf2, 0xaf, 0x22, 0x96, 0xd8, - 0x52, 0x7f, 0xff, 0x21, 0x9d, 0xab, 0x88, 0x08, 0x18, 0x66, 0x5c, 0x19, 0x10, 0xde, 0x10, 0x11, - 0x1a, 0x5a, 0xdf, 0x5a, 0xc2, 0xf6, 0x47, 0xa6, 0x29, 0x16, 0x05, 0x83, 0x39, 0xa6, 0x20, 0x48, - 0x2a, 0x2a, 0x85, 0xf4, 0x8f, 0xb1, 0x3d, 0x60, 0x27, 0xf3, 0x48, 0xbc, 0x91, 0xa1, 0x4c, 0x6b, - 0x3e, 0x5f, 0x70, 0x40, 0x20, 0x25, 0x7b, 0xdd, 0xc4, 0x3d, 0x6c, 0x66, 0x18, 0x10, 0xef, 0x7e, - 0x20, 0x40, 0xc2, 0x45, 0xf2, 0xc8, 0x4b, 0x23, 0x78, 0xb0, 0xe0, 0xcb, 0x2f, 0x65, 0x6a, 0xaf, - 0x82, 0x88, 0x30, 0x2b, 0x90, 0x7b, 0xf0, 0x3a, 0xf4, 0x42, 0x87, 0x43, 0x5b, 0x14, 0x07, 0x79, - 0x20, 0xf8, 0x7a, 0x2c, 0x61, 0xd0, 0xc9, 0x20, 0xdf, 0xea, 0xf0, 0xa7, 0x41, 0x9e, 0x8b, 0x89, - 0x85, 0x02, 0x12, 0x4c, 0x1d, 0xfa, 0x3f, 0xd2, 0xa7, 0x37, 0xad, 0x57, 0xd6, 0x5d, 0x9c, 0x99, - 0x41, 0xfe, 0x7b, 0x88, 0x98, 0x9a, 0xb5, 0x88, 0x9b, 0x88, 0xff, 0xb2, 0x5d, 0xfe, 0xe7, 0xfc, - 0xb8, 0x9f, 0x12, 0x53, 0xe1, 0xe5, 0x33, 0x85, 0xd8, 0x44, 0x12, 0x36, 0x38, 0xbf, 0xa7, 0xfe, - 0x5b, 0x82, 0x01, 0x00, 0xa0, 0x28, 0x5e, 0xe6, 0xb1, 0xa1, 0x8a, 0x33, 0xf3, 0x60, 0xe4, 0x3c, - 0x0a, 0x76, 0xa9, 0x96, 0x10, 0x12, 0x1b, 0xbc, 0xe1, 0xce, 0x88, 0xa5, 0xfb, 0x42, 0xaf, 0x0c, - 0x09, 0xf8, 0x24, 0x2f, 0x1d, 0xa0, 0xb4, 0x86, 0x22, 0x34, 0xd9, 0x31, 0x61, 0xf4, 0xa2, 0xf1, - 0x96, 0x25, 0xe9, 0x5e, 0x53, 0x92, 0xb4, 0x1d, 0xc4, 0xa3, 0xa0, 0x58, 0x34, 0x63, 0xe9, 0xdd, - 0x3f, 0xc3, 0x02, 0x42, 0x93, 0x9e, 0x78, 0x39, 0x4e, 0x99, 0x3a, 0xbd, 0xb8, 0x87, 0x09, 0x87, - 0xc7, 0x3c, 0xa4, 0x01, 0xa9, 0x63, 0x10, 0xd0, 0xa4, 0x00, 0x7e, 0x0a, 0x05, 0x5e, 0x00, 0x39, - 0x8e, 0xfc, 0x11, 0xdd, 0xc9, 0x13, 0x65, 0xd7, 0xc2, 0x99, 0x2a, 0x82, 0x72, 0xc6, 0xd5, 0x2b, - 0xda, 0x0e, 0x22, 0x02, 0x7b, 0xe3, 0x5e, 0x30, 0x4f, 0x9c, 0x44, 0x76, 0x6c, 0x6d, 0x98, 0x2e, - 0x4c, 0x9e, 0x76, 0x62, 0xe2, 0x04, 0x02, 0xcf, 0x15, 0xe1, 0x13, 0xa9, 0x0d, 0xd3, 0xd5, 0x1b, - 0x03, 0x8e, 0x4b, 0xe7, 0x07, 0x0d, 0x7c, 0x14, 0x94, 0x01, 0x90, 0xb0, 0x35, 0xf4, 0x01, 0x3d, - 0x9f, 0x80, 0x1c, 0x43, 0x13, 0x04, 0xc1, 0x84, 0x49, 0x80, 0x65, 0xbe, 0xfd, 0x3f, 0x49, 0x38, - 0xdb, 0x4e, 0x81, 0x07, 0x15, 0x07, 0x7b, 0x3c, 0xba, 0xd7, 0xc7, 0xce, 0x10, 0x12, 0x12, 0x8f, - 0xef, 0x35, 0x26, 0x56, 0x8f, 0xe5, 0x9c, 0x60, 0xc8, 0x18, 0x13, 0x8c, 0xf8, 0x40, 0x99, 0xb2, - 0x92, 0xa6, 0xcb, 0x1c, 0x32, 0xc9, 0xcc, 0x5c, 0xd4, 0x55, 0xcd, 0x28, 0xc2, 0x43, 0x2b, 0x1f, - 0x89, 0xb1, 0x98, 0x0c, 0xdf, 0xe9, 0xe3, 0x88, 0x82, 0x7b, 0x1e, 0x04, 0x11, 0x0b, 0x96, 0x1d, - 0x50, 0x00, 0x44, 0xc8, 0x17, 0x13, 0x55, 0xea, 0xf2, 0x2e, 0x88, 0x5a, 0x71, 0xa6, 0x99, 0x41, - 0x2e, 0x41, 0x99, 0x2e, 0x0f, 0xcc, 0x87, 0xff, 0x1f, 0x1a, 0xa7, 0x5d, 0x4f, 0x4f, 0x08, 0x04, - 0x06, 0x93, 0xb5, 0xd6, 0xb5, 0x6c, 0x3d, 0x18, 0x93, 0x87, 0x80, 0x73, 0x85, 0x82, 0xb8, 0x1d, - 0x22, 0x2b, 0x6e, 0x6e, 0xbf, 0xc2, 0x30, 0x45, 0xbd, 0xd8, 0xe1, 0x00, 0x80, 0x25, 0x89, 0xe1, - 0xb2, 0x28, 0x95, 0xb8, 0xe5, 0xb4, 0x77, 0x84, 0x01, 0x00, 0x52, 0x30, 0xe8, 0x67, 0xeb, 0xb2, - 0x1f, 0x61, 0x38, 0x70, 0x1b, 0xd5, 0x49, 0xb4, 0x57, 0x7f, 0xb3, 0x25, 0x56, 0x5d, 0xe6, 0xf8, - 0x0b, 0xa7, 0x89, 0x10, 0x37, 0x70, 0x18, 0xa5, 0xa0, 0x00, 0x22, 0xa2, 0xe0, 0x3e, 0x5a, 0xe0, - 0x00, 0xc8, 0x91, 0x0c, 0x5b, 0x99, 0x94, 0x03, 0xc9, 0x88, 0x1f, 0x89, 0xc0, 0x01, 0x40, 0xfd, - 0x76, 0x6a, 0x7b, 0x67, 0xb9, 0x24, 0x83, 0x90, 0x92, 0x41, 0xb9, 0xfc, 0x47, 0x53, 0xfc, 0x21, - 0x1d, 0x1f, 0xcf, 0x1f, 0x5e, 0xc7, 0x75, 0x2d, 0xbf, 0xe6, 0x8f, 0x09, 0xc7, 0x66, 0x97, 0x8c, - 0xc9, 0x9a, 0x49, 0x6d, 0x41, 0xf6, 0x16, 0x6e, 0xd6, 0xf8, 0x42, 0x0a, 0x6a, 0x71, 0xfb, 0x9b, - 0x94, 0x41, 0x2e, 0xcc, 0xdd, 0x96, 0x1f, 0x2f, 0x07, 0xde, 0x08, 0xb1, 0x1f, 0x26, 0x84, 0x4b, - 0x7f, 0xc4, 0xc9, 0x04, 0xda, 0xad, 0x6f, 0x82, 0xc1, 0xaa, 0xbe, 0x5a, 0x3a, 0x4e, 0xe7, 0x49, - 0x5f, 0x21, 0xb6, 0x8f, 0xd7, 0x2d, 0x8d, 0x9b, 0x47, 0xf0, 0xec, 0x48, 0x03, 0x08, 0xa5, 0x43, - 0x5e, 0x3f, 0xfe, 0xee, 0x19, 0x1f, 0x0b, 0x18, 0x21, 0x3a, 0x7f, 0x81, 0xa4, 0x0f, 0x23, 0x46, - 0x03, 0xa0, 0x78, 0x24, 0x00, 0x70, 0x4b, 0x83, 0xc3, 0xe2, 0x00, 0x00, 0xaf, 0x14, 0x00, 0x0d, - 0xca, 0x08, 0x07, 0x90, 0x70, 0x69, 0xd5, 0xd8, 0x14, 0x6c, 0xe0, 0x5d, 0x60, 0x12, 0x4e, 0x80, - 0xaf, 0xbb, 0xc9, 0xe1, 0xe2, 0x05, 0x90, 0x89, 0xa2, 0xf4, 0xd9, 0xbf, 0xe0, 0x61, 0x01, 0x02, - 0x36, 0x70, 0x00, 0x19, 0xe4, 0xe0, 0x00, 0x67, 0x03, 0x88, 0xf0, 0x71, 0x0f, 0x08, 0xa4, 0xc7, - 0xc1, 0x80, 0x28, 0xfd, 0x7c, 0x00, 0x7a, 0xf0, 0xec, 0xea, 0xa8, 0xbc, 0x2e, 0x54, 0x76, 0xc1, - 0xdf, 0x0b, 0x00, 0xcb, 0x0c, 0x3d, 0x72, 0x5d, 0x8b, 0x7f, 0xe0, 0x41, 0x07, 0x21, 0x48, 0x56, - 0xc6, 0xb2, 0x9c, 0x18, 0xb8, 0x89, 0x55, 0x8a, 0xe6, 0xf8, 0x00, 0x70, 0x38, 0x38, 0x8a, 0x3c, - 0x01, 0x72, 0x88, 0x01, 0x2f, 0x1a, 0x22, 0x37, 0x65, 0x41, 0xa9, 0x7d, 0x9d, 0xee, 0xf8, 0x98, - 0x2d, 0x8a, 0xcb, 0x19, 0x7d, 0xaa, 0xe9, 0x7c, 0x48, 0x28, 0x33, 0xb8, 0x32, 0x1a, 0x94, 0x10, - 0xd7, 0xc1, 0xff, 0x77, 0xcb, 0xc1, 0xe1, 0xe0, 0x80, 0x73, 0xcd, 0xa6, 0x9a, 0x7e, 0x0a, 0x88, - 0x6a, 0x25, 0xdc, 0x9b, 0xdc, 0xc6, 0x6e, 0xa5, 0x65, 0xd3, 0x83, 0xec, 0xef, 0x97, 0x84, 0x7b, - 0x9e, 0x22, 0x1d, 0x12, 0x4e, 0xa3, 0x98, 0xc2, 0xc7, 0x2b, 0x96, 0x8a, 0x6a, 0x6c, 0xf1, 0x94, - 0x35, 0x96, 0x4a, 0x27, 0xf1, 0x2c, 0x22, 0x58, 0x41, 0x2f, 0x31, 0xf2, 0xb5, 0xb5, 0xdc, 0xfb, - 0x1f, 0xc4, 0x82, 0xea, 0xdf, 0xcb, 0xfb, 0x89, 0x08, 0xfc, 0xa3, 0x0f, 0xf7, 0x87, 0x14, 0x00, - 0x3d, 0x67, 0xc2, 0x0a, 0x56, 0xa5, 0x05, 0xe1, 0xf9, 0x34, 0xf4, 0xc9, 0x40, 0x7a, 0x4e, 0x00, - 0xe3, 0xd3, 0x07, 0x74, 0x7e, 0x4c, 0x1d, 0x97, 0xc3, 0xa7, 0xff, 0x78, 0x63, 0x03, 0x7b, 0x09, - 0x63, 0x78, 0x32, 0x1c, 0xf3, 0x8f, 0xb2, 0xee, 0x30, 0x7d, 0xc5, 0x2c, 0xb2, 0xcb, 0xb0, 0x7d, - 0xfc, 0x69, 0xab, 0xbd, 0x4e, 0xa3, 0x86, 0x40, 0xd2, 0x32, 0x28, 0xed, 0xf9, 0x56, 0x2e, 0xb6, - 0xdb, 0x97, 0x04, 0x7c, 0xc6, 0xf8, 0x39, 0x02, 0x08, 0x50, 0xa0, 0xe7, 0xe2, 0xa8, 0x1a, 0xc2, - 0xec, 0x78, 0x3e, 0xff, 0x01, 0xdf, 0x4a, 0xa2, 0xa1, 0x28, 0x68, 0x98, 0xf0, 0x7c, 0x28, 0x2a, - 0x48, 0x00, 0x04, 0x54, 0x1d, 0x8c, 0x94, 0x70, 0x6a, 0x1e, 0xc6, 0xd4, 0x78, 0x73, 0x88, 0x0a, - 0x71, 0x21, 0x10, 0x51, 0x07, 0x18, 0x33, 0x2c, 0xc1, 0xd8, 0x34, 0x53, 0xc3, 0x2d, 0x1a, 0x0a, - 0xf8, 0x80, 0x49, 0x8a, 0xe2, 0x06, 0x1a, 0xf8, 0x26, 0x30, 0xf0, 0x7c, 0x74, 0x7c, 0x4b, 0x8f, - 0xc7, 0xfc, 0xf0, 0x7b, 0xbf, 0x0c, 0xc6, 0x4f, 0x98, 0x5a, 0xbb, 0xde, 0x94, 0x0e, 0x42, 0x6a, - 0xe4, 0x81, 0xca, 0xdd, 0x62, 0xdf, 0x8a, 0x3d, 0x38, 0xb7, 0x23, 0x25, 0xa5, 0xf9, 0x30, 0x88, - 0x1a, 0xab, 0x75, 0x1e, 0xf0, 0xee, 0x02, 0xbe, 0xba, 0xed, 0xcc, 0xb9, 0x9e, 0x48, 0x6a, 0xe3, - 0x19, 0x3b, 0x31, 0xf6, 0x70, 0x86, 0x67, 0x0d, 0x38, 0xf4, 0x47, 0x82, 0x38, 0xf0, 0x85, 0x75, - 0x0d, 0xf2, 0xd7, 0x51, 0x1c, 0xb5, 0xac, 0x9c, 0x20, 0x79, 0x98, 0xf0, 0xd5, 0x4e, 0xf1, 0x2f, - 0xfa, 0xc4, 0x8c, 0x11, 0x74, 0xee, 0xbd, 0x4e, 0xa7, 0x8c, 0xaa, 0x67, 0x30, 0xe2, 0x07, 0x15, - 0xec, 0xd2, 0x8d, 0xad, 0x49, 0x52, 0x3a, 0x47, 0x8b, 0x82, 0x80, 0x2c, 0x0d, 0xe2, 0xe3, 0x91, - 0xe0, 0xe4, 0xf1, 0x31, 0x41, 0x8f, 0x0f, 0x06, 0xe0, 0x18, 0xc1, 0x68, 0x07, 0x49, 0x08, 0x00, - 0x19, 0xf8, 0x8e, 0x00, 0xd2, 0x52, 0x21, 0x32, 0xcc, 0x71, 0x00, 0x78, 0x0f, 0x80, 0xc0, 0xbf, - 0x12, 0x00, 0x0a, 0x90, 0x70, 0x35, 0x12, 0x24, 0x18, 0x06, 0x0b, 0xc5, 0xbf, 0xc3, 0x58, 0x01, - 0x41, 0x57, 0x10, 0x0e, 0xf8, 0xf2, 0x7f, 0xed, 0xd6, 0xdd, 0x6d, 0xb7, 0x6d, 0xb4, 0x77, 0x0f, - 0x12, 0x00, 0x7b, 0x80, 0xae, 0x77, 0x38, 0x46, 0x16, 0x3f, 0xdf, 0xde, 0x99, 0xdf, 0x04, 0x2f, - 0x99, 0x0a, 0x23, 0xf2, 0xf1, 0x0d, 0x0a, 0x20, 0xd0, 0x05, 0x47, 0x0b, 0xf4, 0x1b, 0x01, 0x7b, - 0xeb, 0xb6, 0xbc, 0x48, 0x29, 0x21, 0x69, 0xb3, 0x5d, 0x72, 0xe7, 0x6a, 0x31, 0x5e, 0x2b, 0x98, - 0xe2, 0x20, 0xb3, 0x0d, 0x00, 0xb0, 0x85, 0xc3, 0xc5, 0x9b, 0xae, 0x66, 0x07, 0x57, 0x29, 0x86, - 0x09, 0xe7, 0xb1, 0x94, 0xde, 0x20, 0x10, 0xc9, 0xc6, 0xee, 0xcf, 0x71, 0xe0, 0x9c, 0x8b, 0x54, - 0xf1, 0xf6, 0x3a, 0x7e, 0x7f, 0x15, 0xbf, 0xc1, 0x5c, 0x4f, 0xa9, 0xff, 0x2b, 0xa9, 0x2b, 0xc4, - 0x4f, 0xcc, 0xc7, 0x7d, 0x97, 0x2f, 0xe2, 0x44, 0x82, 0xe9, 0x9b, 0xbc, 0xba, 0x9d, 0x58, 0x61, - 0x91, 0x22, 0xce, 0xed, 0x82, 0xcf, 0xaf, 0xa0, 0x7c, 0x5c, 0x12, 0xf0, 0x4d, 0xb4, 0x2e, 0xaa, - 0xa2, 0xea, 0xdf, 0x7a, 0x9b, 0x3f, 0x24, 0x9f, 0xfc, 0x51, 0x5d, 0x6f, 0xbb, 0xe2, 0x44, 0x0b, - 0x11, 0x7b, 0xe0, 0x5e, 0x47, 0xb9, 0x07, 0xfc, 0x4f, 0x82, 0x92, 0x01, 0xdc, 0x94, 0x4e, 0x25, - 0x15, 0x82, 0x2a, 0xb9, 0x8a, 0xbe, 0x37, 0x1d, 0xfe, 0xc2, 0xfb, 0xbf, 0x57, 0x04, 0x53, 0x80, - 0x79, 0x60, 0x03, 0x2f, 0xb1, 0x6b, 0x7c, 0x3d, 0x0a, 0x00, 0x0f, 0x1c, 0x00, 0x0d, 0x39, 0x44, - 0x0f, 0xc6, 0xf1, 0xa5, 0x62, 0xd1, 0xe0, 0x3b, 0x4a, 0x10, 0x00, 0x10, 0x01, 0x46, 0x14, 0x14, - 0x00, 0x0d, 0x00, 0x92, 0x0a, 0x84, 0xf1, 0x5f, 0xe0, 0x48, 0x04, 0x23, 0x67, 0x80, 0x01, 0x9c, - 0x12, 0x00, 0x05, 0x70, 0x3a, 0xc3, 0x57, 0xe0, 0x75, 0x8d, 0x6a, 0x27, 0xa9, 0x66, 0x9a, 0xc0, - 0xd5, 0xe7, 0x1c, 0xb9, 0x16, 0xa3, 0xfc, 0xbd, 0xd8, 0x59, 0x89, 0x4c, 0x19, 0x62, 0x69, 0xac, - 0x19, 0xfb, 0x2c, 0x5e, 0x1e, 0x9c, 0x01, 0x9c, 0x96, 0xd2, 0x0c, 0x53, 0xe5, 0xa9, 0xbf, 0x17, - 0x2f, 0x8f, 0x1b, 0xe4, 0xc9, 0xc7, 0x6e, 0x3a, 0xbb, 0xd3, 0xa6, 0x9e, 0xbf, 0x0a, 0x66, 0xf1, - 0x72, 0xc3, 0x84, 0x0f, 0xf3, 0x1f, 0x53, 0xce, 0x3e, 0x0c, 0xb6, 0xb0, 0x1c, 0x9c, 0xca, 0x31, - 0x51, 0x61, 0x93, 0x12, 0x2c, 0x4c, 0x61, 0x85, 0x7f, 0x26, 0x22, 0xf9, 0xa2, 0x80, 0x64, 0xc6, - 0xe7, 0xe3, 0x78, 0xf2, 0x96, 0x70, 0xa0, 0x35, 0x03, 0x12, 0x22, 0x1a, 0x87, 0xc6, 0x8a, 0xd0, - 0x3a, 0xb3, 0xb3, 0x61, 0x7b, 0x14, 0xd3, 0x69, 0xaf, 0xf1, 0x92, 0x55, 0x6d, 0xd8, 0x0e, 0x45, - 0x11, 0xad, 0x3d, 0x3d, 0x5e, 0x4a, 0x79, 0xa2, 0xb6, 0x56, 0x9b, 0x12, 0x6e, 0xf8, 0xbe, 0xab, - 0x8b, 0xaf, 0x10, 0x2a, 0xaa, 0xb5, 0x55, 0x5c, 0x30, 0x20, 0x14, 0xf3, 0xe2, 0xe7, 0xcb, 0xd5, - 0x31, 0x75, 0x73, 0x88, 0x82, 0xcb, 0xb7, 0x6d, 0x62, 0x99, 0xa8, 0x93, 0xdb, 0xf2, 0xaf, 0x04, - 0x65, 0xc5, 0x65, 0xc6, 0x01, 0xae, 0x2b, 0x5a, 0xc9, 0x99, 0xf8, 0x4f, 0xb9, 0xf2, 0xd2, 0xa0, - 0x97, 0x17, 0xd9, 0x8d, 0xdc, 0xd6, 0x1c, 0xcf, 0xb2, 0xad, 0x19, 0x6a, 0xb8, 0xa2, 0x4b, 0x97, - 0x6a, 0x9f, 0xc2, 0x86, 0x71, 0x2e, 0x08, 0x61, 0xfa, 0xa1, 0xa3, 0xaf, 0x9a, 0xc7, 0x55, 0x03, - 0x14, 0xe1, 0x1d, 0xbe, 0x32, 0xf6, 0x77, 0x2b, 0x1f, 0x7a, 0x9a, 0x1e, 0xf9, 0x0f, 0x5a, 0xbf, - 0xc3, 0xd1, 0xa0, 0x28, 0x0b, 0x42, 0x50, 0x00, 0x2f, 0xed, 0x1b, 0xf0, 0x72, 0x61, 0xa9, 0x45, - 0x2a, 0x29, 0xa0, 0x0f, 0x11, 0x01, 0x50, 0xeb, 0x8c, 0x01, 0xc7, 0xee, 0x25, 0x20, 0x81, 0x19, - 0x2e, 0x11, 0x4a, 0x5a, 0xd3, 0x06, 0xfe, 0x15, 0x2c, 0x7f, 0x82, 0x80, 0xc8, 0xd2, 0x05, 0x40, - 0x70, 0x19, 0x47, 0xb4, 0x2f, 0x16, 0x10, 0x26, 0x03, 0xe1, 0x1b, 0x87, 0x82, 0xc3, 0x8e, 0x3d, - 0x0d, 0x81, 0x56, 0x9f, 0x67, 0xba, 0x2a, 0x05, 0x7b, 0xc2, 0xc4, 0x25, 0x2f, 0x0b, 0xbf, 0xf5, - 0xd0, 0xdc, 0xe0, 0x45, 0x7c, 0xab, 0x2f, 0x1f, 0x12, 0x11, 0x0a, 0x54, 0xab, 0x75, 0x6a, 0xd4, - 0xcf, 0x92, 0xe8, 0xc6, 0x47, 0xf4, 0x17, 0xc7, 0x9a, 0x16, 0xd7, 0x29, 0x06, 0x61, 0x64, 0x5c, - 0x99, 0x64, 0x41, 0x54, 0x19, 0xde, 0x7a, 0xee, 0x11, 0x82, 0xaa, 0x8a, 0x21, 0x77, 0x12, 0x22, - 0xa3, 0xb1, 0x46, 0x3c, 0x43, 0x93, 0x6e, 0x67, 0x05, 0x22, 0x42, 0x59, 0x31, 0x7c, 0x2c, 0xa9, - 0x47, 0x5c, 0x10, 0x89, 0x04, 0x23, 0x59, 0x90, 0xf7, 0x2a, 0x19, 0x12, 0x22, 0xa9, 0x70, 0x7d, - 0x89, 0xf8, 0x98, 0x21, 0x8a, 0x69, 0x68, 0x7f, 0x2f, 0xa2, 0x77, 0xc1, 0x75, 0xef, 0xe7, 0x83, - 0x8f, 0x04, 0x7c, 0x43, 0x82, 0xb4, 0xa8, 0xbc, 0xb4, 0xdb, 0x78, 0x57, 0x11, 0x5d, 0x9a, 0xb5, - 0x26, 0x20, 0x49, 0x48, 0x43, 0x76, 0xed, 0xc6, 0xe9, 0xe4, 0x22, 0x56, 0x63, 0x6c, 0xbc, 0x14, - 0xfa, 0xbf, 0x2b, 0xf4, 0x23, 0x33, 0x0f, 0xf6, 0x9a, 0x6f, 0xbd, 0x1b, 0x4d, 0x09, 0x84, 0x44, - 0x8c, 0xb3, 0x38, 0xe9, 0xbb, 0x4d, 0x9e, 0x7c, 0xed, 0xd3, 0x7b, 0xbc, 0xd9, 0x89, 0x10, 0x36, - 0x68, 0xc9, 0x16, 0x97, 0x08, 0x86, 0x86, 0x71, 0x8f, 0xc9, 0x00, 0xa9, 0xf8, 0x7a, 0x4b, 0x5d, - 0xa1, 0xe2, 0x61, 0xb1, 0xa3, 0xfc, 0x70, 0xf3, 0x01, 0x1a, 0x43, 0x51, 0x17, 0x21, 0x60, 0x9f, - 0xa4, 0x42, 0xfa, 0xff, 0x10, 0x0a, 0x61, 0x75, 0x79, 0x4e, 0x2f, 0x53, 0xf8, 0x3e, 0xec, 0xc9, - 0xd9, 0xc2, 0x21, 0x01, 0x9c, 0x96, 0xab, 0xbb, 0x10, 0xc5, 0xd5, 0x6b, 0x34, 0x3b, 0x45, 0xe2, - 0x8b, 0x55, 0x17, 0x81, 0xd1, 0x91, 0x4d, 0x83, 0x5c, 0x00, 0x96, 0x43, 0x93, 0x00, 0x07, 0xa1, - 0xa9, 0x08, 0x3c, 0xf7, 0x3f, 0x1d, 0x2f, 0xcf, 0x39, 0x20, 0x0c, 0x05, 0x78, 0x58, 0x01, 0x4c, - 0x13, 0x67, 0x5d, 0xd5, 0x9e, 0x1a, 0x96, 0x05, 0xca, 0x87, 0x3a, 0xf1, 0xfa, 0x15, 0xfc, 0x34, - 0xff, 0xe0, 0xe0, 0x91, 0x08, 0xa4, 0x5d, 0xc1, 0x8d, 0xdb, 0x66, 0xf8, 0x10, 0x04, 0x85, 0x0a, - 0x78, 0xb3, 0x06, 0x3a, 0x5e, 0xc5, 0x2c, 0x1d, 0x0f, 0x8a, 0xcb, 0x59, 0xf5, 0x1b, 0xfd, 0x6a, - 0x58, 0x11, 0x25, 0x0e, 0xa1, 0x20, 0x02, 0xb2, 0x71, 0xf5, 0x64, 0x67, 0xfe, 0x21, 0xe4, 0xa0, - 0xfe, 0x94, 0x8d, 0xcf, 0xd9, 0xfd, 0x6b, 0x09, 0xdb, 0x2f, 0x8f, 0xdb, 0x6f, 0xe1, 0x95, 0x00, - 0x1b, 0x70, 0x6f, 0xb6, 0x4a, 0x23, 0x7c, 0x3f, 0x82, 0x51, 0xc5, 0x2b, 0x94, 0xc4, 0x7b, 0x22, - 0xc9, 0x38, 0xd3, 0xcf, 0x1f, 0xa1, 0xbe, 0x10, 0x35, 0x5f, 0x97, 0x29, 0x0c, 0xfb, 0xf8, 0xfa, - 0xab, 0x18, 0x87, 0x37, 0x7b, 0xa4, 0x1e, 0x65, 0x79, 0x35, 0xbf, 0x12, 0x28, 0x99, 0xb2, 0xab, - 0xf8, 0x43, 0x7b, 0xe7, 0x7e, 0xb5, 0xf2, 0xd5, 0xbc, 0xf0, 0x88, 0x40, 0x29, 0xc7, 0x12, 0x70, - 0x98, 0x05, 0x50, 0x00, 0x0f, 0xce, 0xd2, 0xaf, 0x54, 0x47, 0x17, 0x8c, 0xe5, 0x93, 0x53, 0x8f, - 0xe0, 0xe0, 0x29, 0x2a, 0x1c, 0xa4, 0xa2, 0xa1, 0xb9, 0x49, 0xce, 0x46, 0xe4, 0x89, 0x0f, 0x77, - 0x2c, 0x3b, 0x6a, 0xd6, 0xda, 0x0d, 0xfe, 0x04, 0x0b, 0xc1, 0xf8, 0xa1, 0xc4, 0x9e, 0x00, 0x11, - 0x13, 0xe1, 0x90, 0xc8, 0x52, 0x5b, 0x14, 0x07, 0x3c, 0x05, 0x18, 0x07, 0xf1, 0xb4, 0x86, 0xa5, - 0x73, 0xa5, 0x57, 0x3c, 0x39, 0xa1, 0x3d, 0x80, 0x63, 0xaa, 0xec, 0xdb, 0x82, 0x90, 0x88, 0x52, - 0x44, 0x4a, 0xdd, 0x3b, 0x54, 0xf2, 0xc9, 0x82, 0x1f, 0xc3, 0xf1, 0xad, 0x99, 0x10, 0x1a, 0x64, - 0xa0, 0x03, 0xca, 0x2f, 0x12, 0x9c, 0xa4, 0x82, 0x88, 0x47, 0x29, 0x74, 0x05, 0x1d, 0x63, 0xcf, - 0x6d, 0x39, 0xb0, 0xdd, 0x92, 0xd7, 0xd7, 0x21, 0x25, 0xc7, 0x0d, 0xca, 0x00, 0x25, 0x14, 0xed, - 0x00, 0x10, 0x0f, 0xb5, 0x43, 0x0c, 0xef, 0x79, 0x0f, 0xc5, 0xac, 0x3f, 0x05, 0xa7, 0xce, 0x00, - 0x30, 0x53, 0x80, 0x30, 0x32, 0x04, 0x9e, 0xef, 0x37, 0xf0, 0x40, 0x11, 0x1a, 0x60, 0x22, 0x1b, - 0xc2, 0x41, 0x87, 0x5a, 0x19, 0x6d, 0x04, 0x5c, 0xa3, 0xf0, 0x97, 0x46, 0x45, 0xaf, 0x25, 0xcb, - 0x14, 0x46, 0x99, 0x89, 0x3c, 0x98, 0x00, 0x72, 0x7b, 0x26, 0xed, 0xea, 0xb5, 0x54, 0x44, 0x72, - 0xce, 0x74, 0x45, 0x46, 0x59, 0xff, 0xa3, 0xf4, 0x81, 0xc4, 0x50, 0x01, 0xf2, 0x65, 0x54, 0x27, - 0xfe, 0x9f, 0x0e, 0x2c, 0x26, 0x66, 0x6d, 0xe9, 0x39, 0x63, 0x9f, 0xe3, 0xd8, 0xb7, 0x2d, 0xff, - 0x86, 0x89, 0x00, 0x1c, 0x77, 0xa0, 0x9e, 0x3e, 0xfb, 0xf1, 0xb6, 0xc5, 0xc9, 0x13, 0xc6, 0x3b, - 0x41, 0x31, 0x4d, 0x5e, 0x03, 0x1f, 0x1e, 0xdd, 0x0d, 0xd0, 0x1b, 0xec, 0xd8, 0x70, 0x82, 0x00, - 0x02, 0x89, 0x60, 0xe8, 0x6e, 0xd4, 0xef, 0x89, 0x8b, 0xce, 0xdb, 0x66, 0xe0, 0xa3, 0x8c, 0x59, - 0xb9, 0xb0, 0x70, 0x57, 0x8e, 0x23, 0xe5, 0x77, 0x03, 0xbf, 0x0e, 0xef, 0xf2, 0xc2, 0x9c, 0xb2, - 0xc0, 0xc0, 0x3d, 0x81, 0x67, 0x83, 0xaf, 0x9e, 0x3f, 0xe5, 0x38, 0xf5, 0xec, 0xf1, 0x9d, 0x5b, - 0xe6, 0x32, 0xd6, 0x68, 0x98, 0x4f, 0x5a, 0xd6, 0xa6, 0xe4, 0x3b, 0xbf, 0xec, 0xae, 0xff, 0x10, - 0x09, 0xc9, 0x38, 0x82, 0x69, 0x3a, 0x91, 0xdd, 0x3f, 0xdf, 0x18, 0x68, 0x69, 0xc1, 0xbd, 0x06, - 0xa5, 0x03, 0x9a, 0xe9, 0x4e, 0xc8, 0x8b, 0xa7, 0x10, 0xd9, 0xa9, 0x78, 0x46, 0x6f, 0x1d, 0xcf, - 0x2c, 0x06, 0xe3, 0xa3, 0x27, 0xc9, 0xcb, 0xd5, 0x49, 0x08, 0x04, 0x42, 0xe7, 0x83, 0x01, 0x4a, - 0x43, 0xc6, 0xd4, 0xaa, 0xa7, 0x2c, 0x02, 0x1f, 0x89, 0x30, 0xae, 0x11, 0x06, 0x01, 0x41, 0x0f, - 0x71, 0x99, 0x89, 0x7c, 0x4f, 0xdb, 0x46, 0x79, 0x75, 0x63, 0xb7, 0x59, 0x42, 0xd9, 0xf9, 0x6c, - 0xb6, 0x83, 0x2f, 0x89, 0x85, 0x25, 0x80, 0x69, 0x8a, 0x01, 0x93, 0xeb, 0x2e, 0xae, 0x70, 0x70, - 0xef, 0x92, 0xf2, 0xf2, 0x71, 0x73, 0xbf, 0xdc, 0x20, 0x08, 0x06, 0xd4, 0x60, 0xf8, 0xb4, 0x07, - 0xe8, 0xc9, 0x80, 0x01, 0xc1, 0x38, 0x98, 0x18, 0x2c, 0x2a, 0x45, 0x51, 0xaf, 0xe7, 0x0c, 0x87, - 0x70, 0x4b, 0x51, 0xd5, 0x83, 0x38, 0x38, 0xfb, 0x1e, 0x41, 0x6c, 0xbd, 0x75, 0x75, 0xe1, 0x98, - 0x53, 0x8f, 0x34, 0x02, 0xaa, 0xc3, 0x96, 0x63, 0xbb, 0x6b, 0xa4, 0x82, 0x53, 0xbc, 0x58, 0x6e, - 0x2e, 0xc7, 0xf9, 0x27, 0xac, 0x39, 0xfa, 0x0a, 0xf1, 0x21, 0x00, 0x4c, 0x56, 0x3a, 0x9b, 0xdb, - 0x03, 0xd3, 0xa2, 0xe5, 0x70, 0xa0, 0xa2, 0x14, 0x8a, 0xb3, 0xbe, 0x24, 0x2c, 0x33, 0x2a, 0x5a, - 0x42, 0xa5, 0xc1, 0xd2, 0xe2, 0xb1, 0xd2, 0xe7, 0x58, 0x53, 0x51, 0x76, 0x2a, 0x43, 0xc9, 0xd8, - 0x6d, 0xc0, 0x04, 0xb7, 0x0e, 0xc8, 0x81, 0x74, 0xc6, 0xf6, 0xfa, 0xba, 0xed, 0x8f, 0x74, 0xad, - 0xd4, 0x1d, 0xf9, 0x6b, 0x90, 0x67, 0x3a, 0xfc, 0x3a, 0xe0, 0x07, 0x61, 0xa3, 0xce, 0x64, 0x01, - 0x64, 0xb8, 0x30, 0x7f, 0xff, 0xa1, 0xbd, 0xae, 0x16, 0x92, 0xad, 0x06, 0xab, 0x58, 0x69, 0xce, - 0x99, 0x05, 0xbf, 0xc3, 0x38, 0x97, 0x0f, 0xf1, 0x79, 0xa4, 0x1e, 0x7a, 0x2f, 0xb4, 0xe2, 0x3f, - 0x90, 0x31, 0xb2, 0xa4, 0x90, 0xac, 0x0c, 0x80, 0xae, 0x0a, 0xba, 0x7a, 0x78, 0x07, 0x63, 0xd3, - 0x6d, 0xe1, 0xe2, 0x40, 0x03, 0xe5, 0xb0, 0x4b, 0xd4, 0xf4, 0x04, 0xdc, 0x7f, 0xb1, 0x91, 0x6a, - 0x1d, 0x9e, 0x09, 0x41, 0x32, 0x07, 0x6e, 0x0e, 0xfc, 0x62, 0xaa, 0x0a, 0x08, 0xa5, 0xe7, 0x35, - 0x67, 0x6f, 0xb6, 0x63, 0x76, 0x1b, 0xb8, 0xe0, 0x91, 0xde, 0x26, 0x6b, 0x16, 0xff, 0x89, 0x19, - 0x5b, 0x74, 0x65, 0x6a, 0xef, 0x0f, 0xcd, 0x87, 0x24, 0x27, 0xcf, 0xd0, 0xfd, 0x0b, 0x0f, 0x10, - 0x24, 0x20, 0x4c, 0x4f, 0x14, 0xb3, 0x11, 0xa0, 0x90, 0x34, 0x2c, 0x37, 0x34, 0x8d, 0x97, 0xc4, - 0x82, 0xcd, 0xd7, 0xbb, 0x23, 0x31, 0x3f, 0x43, 0x30, 0x61, 0xf0, 0xcb, 0x12, 0x00, 0x1c, 0xf2, - 0xa3, 0x1c, 0x7c, 0xa9, 0xfe, 0xff, 0x22, 0x2c, 0x51, 0x67, 0xe0, 0xa7, 0x06, 0x83, 0x60, 0x33, - 0x88, 0xd9, 0x18, 0xd6, 0xe2, 0xdb, 0xc1, 0x6a, 0x31, 0xf0, 0x6d, 0x30, 0xd9, 0x0c, 0x02, 0xe3, - 0x42, 0xa5, 0x34, 0x38, 0xc5, 0xad, 0x56, 0xaf, 0xdf, 0xb2, 0x72, 0x80, 0xaa, 0x00, 0x62, 0x3c, - 0x33, 0xca, 0x8c, 0x2a, 0x3b, 0xef, 0x2c, 0x2d, 0xce, 0x0c, 0x47, 0x37, 0x24, 0x74, 0x26, 0xf0, - 0x60, 0x2a, 0x24, 0x37, 0x2c, 0x1d, 0x7c, 0x1c, 0x5f, 0xed, 0xb7, 0x87, 0xb0, 0x00, 0xb0, 0x09, - 0x49, 0xd0, 0xa0, 0x20, 0xe9, 0x47, 0xbe, 0xfe, 0x5f, 0xc3, 0xcb, 0x8b, 0xef, 0x12, 0x1e, 0x51, - 0xa9, 0x57, 0xc1, 0xef, 0x1d, 0xe2, 0x3d, 0x7e, 0x19, 0xf8, 0x54, 0x70, 0x35, 0xd2, 0xc3, 0xc7, - 0x93, 0x9a, 0x03, 0x56, 0x38, 0x9c, 0x22, 0x4c, 0x1d, 0x6a, 0x37, 0x98, 0xab, 0xa8, 0xce, 0x52, - 0x2d, 0x39, 0x39, 0x84, 0xe7, 0x97, 0xd9, 0x41, 0xd7, 0x94, 0x2d, 0xf2, 0x0a, 0xad, 0x7d, 0xd6, - 0xbf, 0x31, 0x16, 0xab, 0xe5, 0x3d, 0x6a, 0xb8, 0x22, 0xcd, 0xe8, 0x6c, 0xf0, 0x88, 0x50, 0xc7, - 0xf9, 0xf6, 0x15, 0xab, 0x99, 0x8c, 0x51, 0xe2, 0x8c, 0xe1, 0x62, 0x8e, 0xe7, 0xf6, 0x78, 0xc3, - 0x3b, 0x05, 0xa7, 0x10, 0x14, 0x28, 0x97, 0xb2, 0x05, 0xb8, 0x87, 0x6c, 0xa8, 0xbc, 0x1d, 0x17, - 0x12, 0xe1, 0x6f, 0x26, 0x25, 0xf2, 0xad, 0xc6, 0x37, 0x0c, 0x42, 0x58, 0xd2, 0xf3, 0x40, 0x46, - 0x96, 0x58, 0x02, 0x3f, 0xf1, 0x01, 0xd8, 0xf6, 0x84, 0xb0, 0xd5, 0x07, 0xe8, 0x4f, 0xa2, 0x81, - 0xa2, 0xa6, 0x71, 0x98, 0xff, 0x48, 0xcb, 0xbd, 0xf8, 0x2b, 0xd4, 0x57, 0xc4, 0x8a, 0x8f, 0x88, - 0x12, 0x19, 0x8f, 0xe8, 0x1a, 0xc6, 0x46, 0xa1, 0x11, 0xc5, 0xb7, 0xb2, 0xf8, 0x22, 0x14, 0x7c, - 0x48, 0x0c, 0x17, 0x58, 0x90, 0x59, 0xed, 0x93, 0xac, 0x2b, 0x56, 0x62, 0xeb, 0x12, 0x0d, 0xe4, - 0x9d, 0x2e, 0x11, 0x85, 0x0c, 0x0b, 0x37, 0x01, 0x7f, 0xa0, 0xa8, 0xe6, 0x10, 0x49, 0xe9, 0x1e, - 0xc5, 0x68, 0x8e, 0x0d, 0x80, 0x4c, 0x5f, 0x84, 0xee, 0x35, 0xde, 0x0e, 0x01, 0xc8, 0xb2, 0x78, - 0x39, 0x78, 0x3a, 0x1e, 0x1e, 0x00, 0xe0, 0xce, 0xe2, 0x61, 0x49, 0x30, 0xab, 0xe0, 0x0e, 0x59, - 0xcf, 0x3f, 0xcb, 0x0c, 0xf3, 0xd0, 0x47, 0x88, 0x6c, 0x2a, 0x0f, 0x1e, 0x7c, 0x9c, 0xf2, 0xfa, - 0xab, 0x86, 0x42, 0x21, 0x43, 0x85, 0xf8, 0x94, 0x62, 0x21, 0x29, 0xad, 0x06, 0x4c, 0x5e, 0x0b, - 0x98, 0x2c, 0x34, 0xdd, 0xb1, 0xf9, 0x5b, 0x38, 0x1d, 0xd2, 0x9e, 0x07, 0x35, 0x07, 0x4b, 0x0f, - 0xc1, 0xb8, 0x44, 0x32, 0x14, 0x2c, 0x47, 0x0f, 0x7c, 0x96, 0xb7, 0x1e, 0x3e, 0xc3, 0xb9, 0x29, - 0x35, 0x43, 0xa5, 0xa8, 0xb2, 0xfc, 0x3d, 0x61, 0x75, 0x52, 0x97, 0x02, 0x8a, 0xe0, 0x81, 0xcf, - 0x6e, 0x71, 0x21, 0x91, 0x9a, 0xd6, 0xa5, 0x94, 0xb8, 0xa2, 0xb7, 0xa5, 0x14, 0x78, 0x64, 0x32, - 0x14, 0x22, 0x48, 0x93, 0xae, 0xf0, 0xa8, 0x3f, 0x2a, 0x35, 0x4a, 0x90, 0x92, 0xc3, 0xb7, 0x26, - 0xb2, 0x40, 0x1f, 0x16, 0x03, 0xae, 0x10, 0x0c, 0x05, 0x08, 0x14, 0x50, 0xd0, 0x38, 0xbd, 0x93, - 0x50, 0x2c, 0x08, 0x4a, 0x23, 0x43, 0xe0, 0x94, 0x45, 0x50, 0x01, 0x29, 0x01, 0x41, 0x97, 0x49, - 0x6b, 0xdb, 0x8b, 0xd7, 0x24, 0x06, 0xa5, 0xd4, 0x26, 0x15, 0x7b, 0x07, 0x5b, 0x0f, 0x22, 0x80, - 0xb2, 0x85, 0x0e, 0xe7, 0x29, 0x7c, 0x02, 0x9a, 0xdc, 0x86, 0x16, 0x56, 0x04, 0xf9, 0x81, 0x6a, - 0x7b, 0xca, 0xbf, 0x1d, 0xee, 0xa4, 0x37, 0xff, 0x3f, 0x6c, 0xfc, 0x77, 0xe3, 0x8b, 0xe3, 0xc9, - 0x96, 0xdf, 0xe1, 0xb7, 0x00, 0x56, 0x5b, 0x2a, 0x00, 0x37, 0x3d, 0x08, 0x7f, 0xed, 0xdc, 0xfd, - 0x2a, 0xb2, 0xc2, 0xb8, 0x7b, 0xc6, 0x73, 0x59, 0x63, 0xaf, 0xbf, 0xf2, 0x70, 0x2c, 0x12, 0x07, - 0x0b, 0x00, 0x70, 0xb1, 0xc3, 0xa7, 0x92, 0x20, 0xd2, 0xb8, 0x1f, 0x4f, 0xda, 0x6e, 0x13, 0xe0, - 0x93, 0xaa, 0xb4, 0x21, 0xc9, 0x55, 0xaf, 0xba, 0xae, 0xe0, 0x82, 0x49, 0xb4, 0x0e, 0x0c, 0x2a, - 0xfc, 0x10, 0x84, 0x44, 0x1e, 0xdf, 0xd1, 0xd7, 0xc2, 0x66, 0x38, 0x16, 0x0c, 0xc0, 0xef, 0x85, - 0x5f, 0x0b, 0x10, 0x18, 0x27, 0x88, 0xd7, 0x05, 0xc5, 0xa7, 0x6d, 0x4d, 0xe0, 0x51, 0xe5, 0xc3, - 0x89, 0x8c, 0x10, 0x6c, 0x92, 0x6d, 0x58, 0x45, 0x4d, 0x1e, 0x3d, 0x21, 0xcb, 0xe9, 0x3f, 0x49, - 0xf7, 0x4a, 0xe3, 0x15, 0xe9, 0xe4, 0xb0, 0xc5, 0x4b, 0x18, 0x90, 0xf1, 0xf7, 0xe2, 0x46, 0x51, - 0x24, 0x16, 0xf9, 0xeb, 0x53, 0xf0, 0x2e, 0x78, 0xe3, 0xdf, 0x59, 0x2d, 0x96, 0xa5, 0xea, 0x14, - 0xb3, 0x8f, 0x0c, 0x89, 0x18, 0x5c, 0xf8, 0xee, 0x55, 0x41, 0x8b, 0xca, 0xd6, 0x7f, 0x89, 0x3c, - 0xeb, 0x07, 0x7b, 0xbb, 0xb2, 0x70, 0x88, 0x29, 0x1f, 0x87, 0x95, 0x89, 0x79, 0x60, 0xd9, 0x85, - 0x05, 0x67, 0x2c, 0x45, 0x78, 0x21, 0x04, 0x23, 0x0a, 0x55, 0x03, 0x53, 0xde, 0x78, 0xfb, 0x2d, - 0x8a, 0x03, 0x15, 0x8a, 0x3b, 0x8a, 0xde, 0x3a, 0x34, 0x0a, 0x65, 0x5d, 0x58, 0x44, 0x14, 0x85, - 0x22, 0x07, 0x0b, 0x65, 0xb1, 0x5b, 0xdd, 0x64, 0xf8, 0xe4, 0x9e, 0x68, 0x0b, 0x97, 0xf7, 0x0c, - 0x82, 0x90, 0x8f, 0x5b, 0x35, 0x89, 0xc6, 0xef, 0xe0, 0x84, 0x18, 0x85, 0x2e, 0x88, 0x91, 0x61, - 0x17, 0xe7, 0x69, 0x45, 0xf0, 0xe5, 0xf5, 0xf8, 0x29, 0x7d, 0x59, 0x5f, 0x81, 0xae, 0x31, 0x30, - 0x5b, 0x09, 0x56, 0x2a, 0x64, 0x70, 0x02, 0xe0, 0x0b, 0x2a, 0xdd, 0xa9, 0x47, 0x04, 0x00, 0xe0, - 0x3a, 0x60, 0x71, 0x00, 0xf0, 0x3a, 0xc0, 0xd4, 0x3d, 0xbc, 0x86, 0xbf, 0xc7, 0x8e, 0x55, 0x74, - 0x0b, 0x88, 0xd2, 0x1c, 0xe0, 0x60, 0xcc, 0x85, 0xc2, 0x86, 0x49, 0xfd, 0x77, 0xe1, 0x5e, 0x84, - 0xb5, 0x71, 0xe4, 0x77, 0xf3, 0x65, 0x55, 0x6b, 0x9b, 0x7b, 0x85, 0x38, 0xa3, 0x4d, 0x91, 0x29, - 0x59, 0xc0, 0xac, 0xb2, 0x68, 0xaf, 0x08, 0x86, 0x02, 0x67, 0xb2, 0x9f, 0xa3, 0xfd, 0xd3, 0x10, - 0xe6, 0x10, 0x12, 0x32, 0x7e, 0xab, 0xc2, 0xb6, 0x61, 0x66, 0xa5, 0x98, 0xbb, 0xf5, 0xc9, 0x4c, - 0x73, 0x17, 0x88, 0x04, 0x21, 0x4e, 0x21, 0x80, 0xea, 0xdd, 0x6c, 0x1a, 0x34, 0xe4, 0xec, 0x0f, - 0x28, 0x89, 0xf2, 0xdf, 0x5d, 0x89, 0x1a, 0x18, 0x1e, 0x8d, 0x96, 0xf5, 0xd6, 0x1d, 0xbf, 0x89, - 0x08, 0x99, 0x8a, 0x38, 0x98, 0xc5, 0x50, 0x13, 0xae, 0x81, 0x73, 0x03, 0xd7, 0x49, 0x9b, 0xd0, - 0x51, 0x9c, 0x38, 0x70, 0x39, 0x88, 0x8c, 0x2d, 0xb7, 0x7a, 0x9c, 0x24, 0x58, 0x60, 0xe9, 0xe1, - 0xe3, 0x83, 0xcf, 0x0e, 0x68, 0xff, 0x32, 0xba, 0x67, 0xff, 0x0a, 0x17, 0x8a, 0xb5, 0xaa, 0x6d, - 0x46, 0x16, 0xb3, 0xb3, 0x30, 0xde, 0x3a, 0x5d, 0xf8, 0x40, 0x22, 0x32, 0x77, 0xd4, 0x9b, 0x0e, - 0xe2, 0x6f, 0x1d, 0x78, 0x22, 0x09, 0x55, 0x2d, 0x8e, 0x9e, 0x68, 0x87, 0xd6, 0x1f, 0x04, 0x20, - 0xa6, 0x73, 0x5c, 0x6d, 0x76, 0x9d, 0xd4, 0x32, 0xbc, 0x67, 0x2c, 0x0a, 0xc7, 0x98, 0x83, 0x2c, - 0xc0, 0xf1, 0xe4, 0xef, 0x12, 0x14, 0x11, 0xbd, 0x5c, 0x5b, 0x2f, 0xc4, 0x02, 0xc1, 0x2a, 0xa2, - 0x41, 0xc2, 0xc1, 0xc7, 0x4f, 0x28, 0x5b, 0xb2, 0xd6, 0xbc, 0x44, 0x2d, 0xcc, 0x47, 0xc5, 0xfc, - 0x60, 0x93, 0x62, 0xb1, 0x98, 0xf1, 0x7b, 0x9e, 0x70, 0xf2, 0xd6, 0x37, 0x71, 0x9d, 0x8c, 0xc9, - 0xcf, 0x3d, 0x65, 0xda, 0xff, 0x89, 0x8c, 0xbf, 0xf5, 0x2f, 0x55, 0xd2, 0x10, 0xf2, 0xdc, 0xf0, - 0x76, 0xc3, 0x10, 0x24, 0x22, 0x23, 0xcb, 0x6e, 0x21, 0xa0, 0xae, 0x5b, 0x7d, 0xb1, 0xcf, 0x61, - 0x08, 0xc9, 0x44, 0x3f, 0x30, 0x8f, 0xd6, 0x73, 0x83, 0xa1, 0xe0, 0xe9, 0xe1, 0x6d, 0xb9, 0x6a, - 0x25, 0x6a, 0xa1, 0x7e, 0x22, 0x26, 0x78, 0xe5, 0x96, 0xdf, 0x77, 0xc4, 0x08, 0x18, 0x25, 0x4f, - 0xf1, 0x76, 0x77, 0x65, 0xb3, 0xd4, 0x29, 0x97, 0x8b, 0x8b, 0x97, 0x95, 0xaa, 0xcf, 0x88, 0x10, - 0x14, 0x20, 0x87, 0x8b, 0x5f, 0xcc, 0x8a, 0xd1, 0x0f, 0xb5, 0xb3, 0x0a, 0x0f, 0x90, 0xe3, 0xe4, - 0xf2, 0xb3, 0x22, 0x79, 0x0f, 0xb8, 0x88, 0x42, 0xce, 0xed, 0x5b, 0xa5, 0xc7, 0x6f, 0xbb, 0x7c, - 0x1c, 0x8c, 0x9b, 0xc6, 0xda, 0x60, 0xd5, 0xab, 0xb1, 0xa9, 0x4e, 0x39, 0x4d, 0x0c, 0x5b, 0x7e, - 0x16, 0x32, 0xd8, 0x90, 0x1e, 0x13, 0x89, 0x12, 0x6b, 0xdf, 0xc4, 0x5f, 0x04, 0x95, 0xaf, 0xab, - 0x82, 0x2b, 0xbd, 0xeb, 0xe5, 0xbd, 0xfe, 0x62, 0x3d, 0xe1, 0x2e, 0x43, 0xcd, 0xff, 0x1e, 0x48, - 0xab, 0xbd, 0xcf, 0x88, 0x46, 0x8b, 0xf3, 0x08, 0x06, 0x06, 0x1e, 0x24, 0x85, 0x62, 0x5e, 0x1c, - 0x57, 0x2b, 0x2f, 0x45, 0x77, 0x42, 0x68, 0xfd, 0xd9, 0x83, 0xd6, 0x62, 0x41, 0x40, 0xc2, 0x3b, - 0x8a, 0xc4, 0x0e, 0x03, 0x6a, 0xa5, 0x15, 0x2b, 0x56, 0xb1, 0x53, 0xe8, 0xee, 0x57, 0x2b, 0xff, - 0x58, 0xbe, 0x18, 0x10, 0x33, 0x5a, 0x58, 0xad, 0x45, 0xc5, 0x65, 0xc1, 0x58, 0xa3, 0x77, 0x15, - 0x96, 0xdc, 0x57, 0x88, 0x85, 0x3c, 0x43, 0x8d, 0x19, 0x8d, 0x21, 0x59, 0x6c, 0x51, 0x89, 0x7b, - 0x8a, 0x33, 0x9e, 0x58, 0x38, 0xb8, 0x88, 0x2b, 0xc8, 0xbe, 0xf0, 0xa0, 0x02, 0xa3, 0x90, 0x3c, - 0xc3, 0x2f, 0x2d, 0xc3, 0xf0, 0x80, 0x91, 0xfa, 0x8a, 0xe7, 0x70, 0x94, 0xad, 0xb9, 0x2f, 0x07, - 0xba, 0x16, 0x3c, 0x40, 0x64, 0x61, 0xcb, 0xb0, 0xba, 0xa7, 0xbf, 0x24, 0x54, 0x95, 0x4c, 0x5d, - 0x96, 0x31, 0x23, 0xc4, 0x83, 0xcb, 0x7b, 0x57, 0xe0, 0x80, 0x20, 0x65, 0xea, 0xc7, 0xda, 0xb3, - 0x02, 0x06, 0x14, 0x65, 0x8d, 0x1b, 0xde, 0x14, 0xe8, 0xec, 0x5f, 0x14, 0x45, 0x55, 0x27, 0x59, - 0x9b, 0xbe, 0xc8, 0xed, 0xbb, 0x85, 0x78, 0x22, 0xc4, 0x3c, 0xda, 0x58, 0xfb, 0x86, 0x04, 0x85, - 0x2f, 0xed, 0x97, 0x4e, 0x56, 0x78, 0x5e, 0xa3, 0x51, 0xe7, 0x3c, 0x8a, 0x24, 0x01, 0x03, 0xbc, - 0x83, 0xe5, 0x71, 0x29, 0xd2, 0x0c, 0x26, 0x78, 0x78, 0xfb, 0xc0, 0xa0, 0x30, 0x80, 0x7f, 0x29, - 0x61, 0x93, 0x8e, 0x61, 0x63, 0x5d, 0x62, 0xcd, 0x38, 0x35, 0x55, 0x1e, 0x8c, 0x05, 0x6b, 0x53, - 0xf6, 0x22, 0xdf, 0x12, 0x0c, 0x02, 0x85, 0x24, 0x29, 0x1f, 0x84, 0x2c, 0x28, 0xa8, 0x96, 0x07, - 0x9b, 0x07, 0x3c, 0x17, 0x9d, 0x86, 0x80, 0x09, 0xd7, 0x11, 0xce, 0x10, 0xf4, 0x87, 0x6e, 0xe6, - 0xcb, 0x5c, 0x10, 0x02, 0x01, 0x92, 0x41, 0x52, 0xc7, 0x4e, 0x2c, 0x37, 0x2a, 0x60, 0xa4, 0xaa, - 0xf6, 0xce, 0x71, 0xfd, 0x45, 0x1b, 0x98, 0x2c, 0x1e, 0x24, 0x0b, 0x03, 0x08, 0x3c, 0x0b, 0x04, - 0x00, 0x70, 0x96, 0xa7, 0x1c, 0x2c, 0x0c, 0x53, 0x38, 0xe3, 0x30, 0x94, 0x05, 0x49, 0x5c, 0x16, - 0x00, 0x0c, 0x3b, 0xbb, 0xbc, 0xc9, 0xd0, 0xb3, 0xfc, 0x10, 0x0c, 0xe3, 0x98, 0xb9, 0x82, 0x45, - 0x4b, 0x00, 0x69, 0x00, 0x01, 0xd0, 0x1d, 0x66, 0xad, 0xd1, 0xca, 0x64, 0xad, 0x44, 0xc1, 0xcb, - 0xf8, 0x64, 0x28, 0x70, 0xb8, 0xaa, 0xba, 0x97, 0xe1, 0x4d, 0x4f, 0xa6, 0xbe, 0xab, 0x25, 0x1d, - 0x5d, 0xfd, 0x8d, 0xac, 0xc1, 0x9c, 0x10, 0x97, 0x29, 0x6b, 0x53, 0x76, 0x4a, 0xd4, 0xd8, 0x82, - 0xd5, 0x6a, 0x12, 0xe2, 0xb6, 0xf1, 0x5c, 0x75, 0x7f, 0x82, 0xad, 0x34, 0x9c, 0x48, 0x3c, 0xf7, - 0xdd, 0xbb, 0xee, 0xf1, 0x01, 0x42, 0xf5, 0x3c, 0x51, 0x3e, 0xf6, 0xb2, 0xb3, 0x43, 0x2e, 0xe8, - 0xae, 0x78, 0x90, 0x59, 0x2f, 0x26, 0x1a, 0x31, 0xf5, 0x52, 0x30, 0x29, 0x8b, 0x96, 0x62, 0xfd, - 0xc4, 0x08, 0x18, 0x20, 0x98, 0x00, 0x15, 0x0b, 0xa7, 0x9c, 0x2b, 0x35, 0x65, 0xa9, 0xc1, 0xb9, - 0x98, 0x35, 0x18, 0x84, 0xee, 0xbe, 0xcc, 0x59, 0xf1, 0x95, 0x70, 0x93, 0xdf, 0x47, 0x5d, 0x28, - 0x84, 0xc5, 0xd2, 0x19, 0xcc, 0x64, 0xca, 0xef, 0x8a, 0xd5, 0x9c, 0xb7, 0xf0, 0x88, 0xd3, 0x93, - 0x95, 0x6a, 0x5d, 0xbe, 0x1b, 0x7b, 0xd4, 0x56, 0x93, 0xa8, 0x58, 0xce, 0xc1, 0x6f, 0x12, 0xec, - 0x28, 0xdc, 0xb1, 0xbe, 0xb9, 0x8a, 0xef, 0x84, 0x62, 0x71, 0x78, 0x88, 0x43, 0x94, 0x93, 0xe3, - 0xe4, 0xc4, 0x32, 0xee, 0xfe, 0x08, 0xa2, 0x98, 0xa6, 0x97, 0x5f, 0x25, 0x24, 0xaf, 0xe2, 0x04, - 0x5b, 0x33, 0x92, 0xff, 0xd9, 0x5a, 0xc5, 0x0c, 0x7d, 0x7f, 0x04, 0x5b, 0xbe, 0xa2, 0xf9, 0x0b, - 0xbb, 0x82, 0x8e, 0x5b, 0xdd, 0xd7, 0x25, 0xdf, 0xf7, 0x9d, 0x87, 0xd7, 0x21, 0x2f, 0x7f, 0x67, - 0x77, 0x7f, 0x98, 0x8f, 0x7a, 0xe1, 0x3d, 0xdd, 0xce, 0xc5, 0x8e, 0x06, 0xfe, 0x5d, 0xee, 0x0e, - 0xb9, 0x6e, 0xf8, 0x35, 0x80, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x43, 0x21, 0xb1, 0xa1, 0xf1, - 0x31, 0x93, 0x7d, 0xb8, 0x81, 0x60, 0xe7, 0x04, 0x2c, 0x1c, 0x3d, 0xdb, 0x2f, 0x7f, 0xb2, 0xdb, - 0x79, 0x6f, 0x11, 0x05, 0x7e, 0x28, 0xe2, 0x40, 0x70, 0x51, 0xdb, 0x18, 0x97, 0xcf, 0x7e, 0xa0, - 0xa7, 0x89, 0xbb, 0xbd, 0xdf, 0x11, 0xcd, 0x4a, 0xc6, 0x2b, 0xc4, 0xc2, 0x42, 0x39, 0x7c, 0x9d, - 0xbf, 0xc4, 0xc6, 0xe9, 0xbf, 0xd0, 0xd0, 0xdb, 0xe2, 0x44, 0x88, 0x8a, 0xde, 0xda, 0xc5, 0xf8, - 0x81, 0x20, 0xb0, 0x4b, 0x88, 0x1f, 0xaa, 0x2b, 0xcd, 0xeb, 0xdf, 0x04, 0x75, 0x93, 0xfa, 0x0b, - 0xb1, 0x3f, 0x28, 0x8a, 0xaa, 0xa8, 0x99, 0xab, 0x5f, 0x82, 0x63, 0xad, 0x6a, 0xa8, 0x77, 0xff, - 0x88, 0xa8, 0x9f, 0x13, 0x44, 0xef, 0x10, 0x59, 0x68, 0xed, 0x09, 0x64, 0x09, 0xf9, 0x6b, 0x55, - 0x3c, 0x48, 0x8f, 0x97, 0xa6, 0xdf, 0x10, 0xca, 0x7f, 0x4f, 0xc4, 0x7c, 0x11, 0xf7, 0x7e, 0xae, - 0x08, 0x84, 0x93, 0x35, 0x7a, 0x89, 0x84, 0x07, 0x6e, 0xe4, 0xf7, 0xbb, 0xbb, 0xe1, 0x1f, 0x08, - 0xf8, 0x91, 0x06, 0x2e, 0xe7, 0xdc, 0x4e, 0x0a, 0xf1, 0x01, 0x1a, 0xaf, 0x93, 0xd5, 0x7e, 0x24, - 0x10, 0x95, 0xdf, 0x14, 0xdf, 0x04, 0x64, 0x7b, 0xde, 0xbf, 0xc1, 0x1e, 0xab, 0xef, 0x11, 0xf0, - 0x4c, 0x55, 0xae, 0xce, 0xf2, 0xe2, 0x28, 0x43, 0xf1, 0x11, 0x24, 0xdd, 0xdd, 0xfe, 0x23, 0xc4, - 0x4d, 0x04, 0x02, 0x41, 0x39, 0x71, 0x25, 0x84, 0xc5, 0xf5, 0x77, 0x04, 0x01, 0x11, 0x25, 0xcb, - 0x91, 0x2f, 0xad, 0x70, 0x60, 0x92, 0x20, 0x40, 0x9a, 0xaa, 0xae, 0x5a, 0xaf, 0x82, 0x42, 0xe9, - 0x0a, 0xfb, 0xe3, 0xf7, 0xbe, 0x76, 0x1b, 0x6d, 0x0d, 0x0d, 0xfd, 0x5f, 0xe0, 0x9c, 0xca, 0xb1, - 0x3e, 0xee, 0xee, 0xaa, 0x8f, 0xc4, 0x41, 0x55, 0x45, 0xf1, 0xa5, 0x17, 0x36, 0x33, 0xa3, 0x3a, - 0x15, 0xde, 0x6f, 0x2f, 0x82, 0xbf, 0x58, 0xbe, 0x23, 0x06, 0x8b, 0x58, 0x55, 0xa3, 0x31, 0xbd, - 0xcd, 0xef, 0x9b, 0x85, 0xca, 0xca, 0x88, 0x97, 0x9b, 0x0d, 0x9c, 0x49, 0x0c, 0x2e, 0x2e, 0x23, - 0x8c, 0xcc, 0x46, 0x68, 0x81, 0x23, 0xb3, 0x78, 0xbd, 0x6b, 0x97, 0x9f, 0xe2, 0x04, 0x04, 0x0a, - 0xde, 0xde, 0xeb, 0x56, 0xf1, 0xc6, 0x38, 0x63, 0xa0, 0xed, 0x45, 0xf2, 0x07, 0x2b, 0x4b, 0x88, - 0x08, 0x15, 0x98, 0x77, 0x2f, 0x36, 0x57, 0x41, 0x1a, 0x90, 0x3f, 0x04, 0x65, 0x4b, 0x57, 0xe2, - 0x3e, 0x24, 0x66, 0x9b, 0xb1, 0xa4, 0x0c, 0x63, 0x12, 0x26, 0x7d, 0x84, 0x24, 0x12, 0x46, 0xe3, - 0x96, 0xce, 0x79, 0x6b, 0xe5, 0xb4, 0xc2, 0x58, 0x5c, 0x48, 0x40, 0x43, 0x25, 0xff, 0x67, 0xd6, - 0x4d, 0x40, 0x85, 0xac, 0x44, 0x4e, 0x86, 0xec, 0x9b, 0x4f, 0x51, 0x12, 0x55, 0x2c, 0xe9, 0x62, - 0x6e, 0xab, 0xfb, 0xac, 0xf8, 0x8c, 0xd8, 0x40, 0x13, 0x97, 0x97, 0xc7, 0x68, 0x3b, 0x18, 0xdc, - 0x77, 0x08, 0x03, 0x91, 0xb1, 0x03, 0x0d, 0x1b, 0x25, 0x9f, 0x04, 0xfe, 0x2e, 0xec, 0x0d, 0x44, - 0xfd, 0x0e, 0xc8, 0xaf, 0xf6, 0x6a, 0x15, 0x9f, 0x86, 0xf3, 0x1a, 0x55, 0xeb, 0x27, 0x2f, 0xc4, - 0x04, 0x47, 0x11, 0xd5, 0x3e, 0xcb, 0x3b, 0x99, 0x7f, 0xaf, 0xa7, 0x14, 0x45, 0xb1, 0x5e, 0x18, - 0x0c, 0xfc, 0x14, 0x1f, 0x2e, 0x08, 0x73, 0x3f, 0x0b, 0x96, 0x31, 0x71, 0x22, 0x42, 0x26, 0x6c, - 0x1f, 0x63, 0x2b, 0xce, 0x72, 0x16, 0x54, 0x72, 0x0e, 0x92, 0x78, 0x7f, 0x12, 0x37, 0x57, 0x9a, - 0x43, 0x19, 0x6c, 0x68, 0x7b, 0xcb, 0x26, 0x57, 0x47, 0x40, 0x01, 0x71, 0xb2, 0x01, 0x0d, 0xb9, - 0x2b, 0x3c, 0x3e, 0xc4, 0x49, 0xaf, 0xcd, 0x47, 0x0a, 0xf4, 0x19, 0xa8, 0xbc, 0x40, 0xc0, 0x91, - 0x6a, 0xb3, 0x64, 0x98, 0x82, 0xca, 0x4e, 0x9b, 0xa9, 0xb5, 0x19, 0x7f, 0x10, 0x10, 0xea, 0xb2, - 0xab, 0x5d, 0x1a, 0xc4, 0x0e, 0x35, 0xe5, 0xe2, 0x07, 0x96, 0x0c, 0xb6, 0x3e, 0xa5, 0xcb, 0x7e, - 0x22, 0xe2, 0xbf, 0xf9, 0x7a, 0xaf, 0xba, 0xd6, 0x58, 0x10, 0x26, 0x13, 0x51, 0xdc, 0x78, 0x38, - 0x12, 0x8c, 0x99, 0x61, 0x80, 0x88, 0x24, 0x2b, 0x8a, 0xcd, 0xf3, 0x22, 0xf1, 0x12, 0xca, 0x08, - 0x0d, 0x78, 0x38, 0x85, 0xc9, 0xb6, 0x6c, 0x8b, 0x81, 0xf8, 0xd4, 0xba, 0x5f, 0xcb, 0x01, 0x35, - 0x18, 0x29, 0x08, 0x0d, 0x26, 0xa8, 0xa2, 0x84, 0x1f, 0x08, 0xc1, 0xd6, 0x97, 0xc9, 0x85, 0x47, - 0x80, 0x7c, 0xc3, 0xf4, 0xd0, 0x07, 0x89, 0x74, 0x7d, 0x81, 0xa0, 0x40, 0xea, 0x17, 0x88, 0x05, - 0x2c, 0xaa, 0x4a, 0x41, 0xa8, 0x02, 0x17, 0xea, 0xf9, 0xf3, 0x0c, 0x04, 0x06, 0x47, 0x4f, 0x07, - 0x1f, 0x09, 0x8f, 0x99, 0x85, 0xaa, 0x7f, 0x57, 0x48, 0x43, 0x8e, 0xff, 0x10, 0x20, 0x54, 0xba, - 0xb1, 0x25, 0x89, 0xa1, 0xe0, 0x82, 0x1b, 0xc5, 0x19, 0x72, 0xa9, 0x7e, 0xd9, 0xe9, 0x1e, 0x0c, - 0x04, 0x9b, 0xc6, 0xb1, 0x83, 0x01, 0x20, 0x82, 0x95, 0x86, 0xd4, 0xd1, 0xc0, 0x0d, 0x22, 0x7e, - 0x73, 0x83, 0xc9, 0xcf, 0x82, 0xe1, 0x52, 0xb0, 0xb0, 0x10, 0x5d, 0x59, 0xa4, 0x21, 0x82, 0xec, - 0x7f, 0x10, 0x19, 0x38, 0x69, 0x09, 0x09, 0xd6, 0xf9, 0xc1, 0xe9, 0xff, 0x2d, 0x36, 0xdc, 0x11, - 0x72, 0x73, 0xc3, 0xe2, 0xc8, 0xa8, 0xbd, 0x0c, 0x6a, 0xa5, 0xc7, 0x95, 0x55, 0x57, 0x55, 0x51, - 0x75, 0x5f, 0x2f, 0x13, 0x62, 0xb9, 0x89, 0xaa, 0xf9, 0x36, 0xea, 0xe0, 0x82, 0x0a, 0xb4, 0xae, - 0xda, 0x89, 0x7c, 0x8a, 0xde, 0xe5, 0x24, 0x58, 0x28, 0x12, 0x36, 0xd0, 0x3b, 0xe2, 0x52, 0x72, - 0x45, 0x03, 0x95, 0xc3, 0xc1, 0x93, 0x5a, 0xc5, 0xb0, 0x29, 0x4d, 0x9f, 0x74, 0xc2, 0x99, 0x7f, - 0x12, 0x11, 0x05, 0x5b, 0xdf, 0x71, 0x5b, 0xb9, 0x79, 0x63, 0xcc, 0x7c, 0x29, 0x13, 0xc1, 0x6c, - 0x39, 0xb5, 0x40, 0x00, 0xf1, 0x60, 0x03, 0x07, 0x40, 0xf9, 0x60, 0x03, 0x0e, 0xb3, 0x52, 0xc6, - 0x78, 0xe0, 0x97, 0x2d, 0x7a, 0xbb, 0x35, 0x22, 0x06, 0x5a, 0xc2, 0x02, 0x46, 0x90, 0xa0, 0x28, - 0x61, 0xc0, 0x00, 0x14, 0x68, 0x17, 0x10, 0x2f, 0x2c, 0x40, 0x01, 0x45, 0x1c, 0x00, 0x01, 0x46, - 0x4c, 0x41, 0x2a, 0xd1, 0x0a, 0x24, 0xf0, 0x16, 0x0b, 0xf1, 0x7a, 0x00, 0x64, 0x19, 0x87, 0x2c, - 0x7b, 0x97, 0x91, 0xa2, 0x08, 0xc5, 0x5d, 0x32, 0x64, 0x76, 0xf8, 0x91, 0xa5, 0x41, 0xc7, 0x38, - 0x01, 0xc6, 0x72, 0x90, 0x66, 0x00, 0xa9, 0x61, 0xec, 0x1c, 0xf6, 0x50, 0x1a, 0x02, 0x66, 0x83, - 0x90, 0xf0, 0xe0, 0x60, 0x38, 0x8f, 0x0f, 0x00, 0x60, 0x3a, 0x7c, 0xc8, 0x23, 0x38, 0x70, 0xc2, - 0xf0, 0x8c, 0x61, 0x43, 0x04, 0x3f, 0x2e, 0x37, 0xc4, 0x85, 0x29, 0x36, 0x48, 0x02, 0xa5, 0xae, - 0x4d, 0x72, 0xc7, 0x60, 0x00, 0x0b, 0xa8, 0x4c, 0xd4, 0xa0, 0xb5, 0x8c, 0x7e, 0x85, 0xa6, 0x7e, - 0x28, 0x57, 0xc1, 0x3f, 0x89, 0x19, 0x2d, 0x8a, 0xf1, 0xfc, 0x07, 0xcb, 0x2e, 0x93, 0xcb, 0x6f, - 0x4c, 0x43, 0x84, 0x8e, 0x58, 0x88, 0x8c, 0x45, 0xcc, 0x43, 0x84, 0xae, 0x0b, 0x0a, 0xb1, 0x10, - 0x5f, 0x28, 0x80, 0x94, 0xac, 0x02, 0x52, 0x5a, 0x8e, 0x41, 0x62, 0xea, 0x12, 0x4c, 0x5d, 0x98, - 0xff, 0xa3, 0xfc, 0x13, 0xf1, 0x05, 0x55, 0xe4, 0xcd, 0xf1, 0xc4, 0x77, 0xbb, 0x1e, 0x3b, 0x47, - 0xbb, 0xa8, 0x64, 0x40, 0x28, 0x08, 0x9f, 0xc6, 0x5a, 0x78, 0xae, 0x2b, 0x1b, 0x4c, 0x38, 0x88, - 0x01, 0xf6, 0x83, 0xb9, 0xbf, 0xd3, 0x4d, 0x24, 0x93, 0x4d, 0x24, 0x98, 0xed, 0xff, 0x08, 0x08, - 0x1a, 0x32, 0x20, 0xc6, 0x50, 0x19, 0xc3, 0x53, 0x16, 0x35, 0xa6, 0xd9, 0xc0, 0x00, 0x4f, 0x0a, - 0x23, 0x53, 0xc0, 0x00, 0xaf, 0x3c, 0x01, 0xf2, 0xa3, 0xab, 0x9c, 0x78, 0x62, 0x40, 0x14, 0x0a, - 0x41, 0x8a, 0xb5, 0xaf, 0xe1, 0x08, 0xe3, 0x8e, 0x2d, 0xca, 0x7b, 0xdf, 0x14, 0xf0, 0xc2, 0x28, - 0x1d, 0xb5, 0xa9, 0x15, 0x6d, 0xa7, 0xfd, 0xa6, 0xb4, 0xf2, 0x2f, 0xe2, 0x04, 0x82, 0xa2, 0x09, - 0xe1, 0x7a, 0x5e, 0xf2, 0xe4, 0x51, 0x9b, 0x17, 0x66, 0x97, 0x89, 0x85, 0x04, 0x0e, 0xdd, 0x30, - 0x46, 0xdc, 0x53, 0x9c, 0xd5, 0xa4, 0x70, 0x0f, 0x38, 0x01, 0xc3, 0xc0, 0x58, 0x3c, 0x01, 0xc0, - 0x3e, 0x06, 0xa1, 0xf8, 0x0d, 0x4e, 0x00, 0x03, 0x3c, 0xf0, 0x00, 0x33, 0xc0, 0xce, 0x42, 0x46, - 0xbc, 0x16, 0xf2, 0xcb, 0x0f, 0xc3, 0x5b, 0x25, 0x00, 0x02, 0xaa, 0x51, 0x1a, 0xe4, 0xfc, 0x21, - 0x26, 0x4b, 0xd1, 0x97, 0x84, 0x21, 0x02, 0xdb, 0x8f, 0xc0, 0xed, 0xd9, 0x65, 0x7b, 0x64, 0xa7, - 0x81, 0x47, 0x8c, 0x8f, 0x84, 0x20, 0xaf, 0x84, 0x36, 0x95, 0xaa, 0x42, 0xbb, 0xbb, 0xf0, 0xc8, - 0x80, 0xa1, 0xeb, 0x57, 0xab, 0xb8, 0x18, 0xa0, 0xd3, 0x00, 0x7a, 0x19, 0x79, 0x6b, 0x40, 0x23, - 0x40, 0x0c, 0x0a, 0x91, 0xed, 0xe4, 0x10, 0xb2, 0x87, 0x5e, 0x16, 0x32, 0x76, 0xc2, 0x30, 0x54, - 0x30, 0xa0, 0x03, 0x14, 0x1d, 0x92, 0x22, 0x38, 0x15, 0xaf, 0xf8, 0x4f, 0x4f, 0xec, 0x71, 0x9f, - 0xd3, 0xfa, 0x5d, 0x97, 0x71, 0x17, 0x6b, 0xad, 0xba, 0x73, 0xaf, 0x32, 0x7a, 0x64, 0xeb, 0xc3, - 0x8a, 0x03, 0x4b, 0xdc, 0x12, 0x33, 0xbf, 0x6e, 0xdf, 0xa6, 0x9f, 0x2f, 0xa6, 0x9f, 0xc4, 0x82, - 0xb3, 0x03, 0x12, 0x52, 0xb1, 0x29, 0xf8, 0x13, 0x00, 0x6e, 0x14, 0xaa, 0x1e, 0x05, 0x81, 0x8a, - 0x04, 0xa0, 0xe8, 0x2c, 0x02, 0x24, 0xa7, 0x6d, 0xd4, 0x3f, 0x84, 0xea, 0x49, 0xe3, 0x41, 0xf8, - 0x91, 0x6e, 0x72, 0x0b, 0xd9, 0xf3, 0x59, 0x8f, 0x0c, 0x03, 0x90, 0xa0, 0xc1, 0xf5, 0x99, 0x15, - 0x95, 0x41, 0x50, 0x9c, 0x00, 0xdd, 0x28, 0xa5, 0x0f, 0x02, 0x3a, 0x8c, 0xa9, 0x63, 0x2c, 0x74, - 0xaf, 0x0f, 0xe4, 0x1f, 0x02, 0xb5, 0x0e, 0xd0, 0xf8, 0xe1, 0x97, 0xc2, 0x11, 0xb0, 0xa0, 0xb0, - 0x69, 0x32, 0x02, 0xd5, 0x55, 0xe7, 0xb5, 0x6c, 0x00, 0x12, 0xc0, 0xe0, 0xb1, 0xd4, 0x5a, 0x00, - 0x07, 0xe2, 0x11, 0x19, 0x55, 0x48, 0x0e, 0x4e, 0xc6, 0xc3, 0x32, 0x17, 0x03, 0x66, 0x00, 0x09, - 0x48, 0x48, 0x94, 0x2d, 0x18, 0x32, 0x44, 0x28, 0x00, 0x4a, 0x1a, 0xb4, 0x11, 0x3a, 0x52, 0xf5, - 0x5b, 0xc3, 0xf8, 0x3f, 0xed, 0x57, 0x60, 0x49, 0x0c, 0x0d, 0xbb, 0x72, 0x3c, 0x73, 0x81, 0xd8, - 0xa3, 0x15, 0x9f, 0x0b, 0x18, 0x75, 0x02, 0x57, 0x44, 0x3b, 0x00, 0x00, 0x80, 0x22, 0x87, 0x14, - 0x04, 0xb3, 0x1d, 0x2c, 0x0b, 0x05, 0x45, 0x28, 0x6a, 0x7e, 0xdd, 0xdf, 0xc4, 0x84, 0x0a, 0xe6, - 0x65, 0xe3, 0x74, 0xec, 0x5b, 0x8d, 0x51, 0xe0, 0xf1, 0x31, 0x90, 0x3b, 0x15, 0x1b, 0x01, 0x7c, - 0xa1, 0x38, 0xd0, 0x2e, 0xec, 0x69, 0x1c, 0x25, 0x95, 0x8a, 0xea, 0x16, 0x6f, 0x97, 0x7a, 0xb9, - 0xa5, 0xe1, 0x4b, 0x76, 0x32, 0x55, 0xdc, 0xb8, 0x5b, 0x2d, 0x88, 0xb3, 0x43, 0x81, 0xdc, 0x57, - 0x13, 0xcc, 0xcf, 0x82, 0x6b, 0xde, 0xfd, 0x5e, 0x09, 0x79, 0xba, 0xaa, 0xec, 0xeb, 0x5f, 0x12, - 0x24, 0xd5, 0xb6, 0xad, 0xaf, 0x89, 0x45, 0x7f, 0x84, 0xcd, 0xab, 0x58, 0xba, 0x7e, 0x28, 0xb0, - 0xeb, 0x96, 0x38, 0x8b, 0xa9, 0x7c, 0x53, 0xc1, 0x08, 0x0f, 0x11, 0xa2, 0x0b, 0x00, 0x62, 0x80, - 0x0c, 0xb0, 0x18, 0xa0, 0x33, 0xc0, 0x1c, 0x25, 0x01, 0xf0, 0xe3, 0xe5, 0x06, 0x28, 0x0c, 0x27, - 0x64, 0x81, 0xa0, 0xf5, 0xd3, 0x39, 0xee, 0x06, 0x01, 0x28, 0x29, 0x30, 0x77, 0xe0, 0xeb, 0xff, - 0xe2, 0x40, 0x6c, 0x87, 0x8a, 0x4a, 0x00, 0x04, 0x7c, 0x4e, 0x00, 0xad, 0x3a, 0x89, 0x44, 0xc8, - 0x99, 0xcd, 0xd8, 0xd2, 0x6f, 0x95, 0x87, 0x3a, 0x45, 0x5b, 0x7f, 0xc3, 0xaa, 0x02, 0xeb, 0x50, - 0xb2, 0xa2, 0x20, 0xa4, 0x76, 0xdb, 0xe8, 0xe3, 0x79, 0x8c, 0xab, 0x77, 0x19, 0xb8, 0xa6, 0x0f, - 0xf8, 0xb9, 0x2f, 0x54, 0x5f, 0x24, 0x7d, 0x93, 0x55, 0xb3, 0xf1, 0xd0, 0x96, 0x7c, 0xb5, 0x07, - 0x1b, 0xd1, 0xf1, 0x00, 0xa2, 0x9b, 0xd5, 0xa0, 0xe4, 0x05, 0xe2, 0xc4, 0x60, 0xae, 0xe0, 0x95, - 0x8c, 0xc9, 0x49, 0x96, 0x10, 0x08, 0x84, 0x0c, 0x0a, 0xb7, 0x0b, 0xd7, 0x15, 0x4a, 0x8e, 0x38, - 0x5d, 0x42, 0x8d, 0x45, 0xe2, 0x25, 0xa3, 0xee, 0x55, 0x57, 0x89, 0x05, 0xa2, 0x45, 0xb7, 0xd0, - 0x10, 0x2a, 0x10, 0x71, 0x1e, 0xf9, 0xaa, 0x97, 0xb8, 0x42, 0x14, 0x30, 0xbe, 0x94, 0xb5, 0xc8, - 0x0d, 0x48, 0x98, 0x3a, 0x0f, 0xeb, 0x52, 0x58, 0xb1, 0xf0, 0xf6, 0xc4, 0xd4, 0xf0, 0x78, 0x72, - 0x63, 0xa6, 0x0a, 0x0e, 0x15, 0x61, 0x8c, 0x0e, 0x43, 0xe7, 0x80, 0xf7, 0x69, 0xee, 0x68, 0xf7, - 0xc6, 0x16, 0x4e, 0x20, 0x72, 0xbc, 0xbf, 0x1d, 0x1f, 0x15, 0x75, 0x87, 0xb8, 0x4a, 0x98, 0x1f, - 0x7d, 0xfc, 0x7d, 0xdc, 0xd1, 0x5d, 0x9d, 0xeb, 0x52, 0x7c, 0x20, 0x24, 0x7d, 0xdf, 0x93, 0x1d, - 0xb8, 0x20, 0x79, 0x63, 0x10, 0xf7, 0xe6, 0x22, 0x0a, 0xcf, 0x97, 0x15, 0xf9, 0x8c, 0xe1, 0xf7, - 0xa6, 0xe8, 0x21, 0x40, 0x97, 0x8a, 0xd5, 0x45, 0xd4, 0x5d, 0x7e, 0x3a, 0xb5, 0x55, 0x55, 0x55, - 0x55, 0x57, 0x13, 0x31, 0x1c, 0x6f, 0x30, 0x23, 0xe8, 0xdd, 0xcc, 0x5e, 0x31, 0xf1, 0x84, 0x36, - 0x00, 0xc5, 0xc5, 0x8e, 0x03, 0x75, 0x45, 0x95, 0xda, 0x18, 0x65, 0xdf, 0xfb, 0xbb, 0x77, 0xbd, - 0x44, 0x86, 0x06, 0x90, 0x3a, 0x32, 0xa9, 0xe7, 0x02, 0xe2, 0xc2, 0x59, 0x66, 0x15, 0x02, 0x98, - 0xa6, 0xa8, 0x19, 0xe8, 0x19, 0x40, 0x7f, 0x1b, 0x19, 0x25, 0x90, 0x31, 0xb6, 0x03, 0xa7, 0x87, - 0x80, 0x01, 0x19, 0x38, 0x0a, 0x8e, 0x87, 0x87, 0xbf, 0x44, 0x10, 0x4b, 0xdb, 0x6d, 0x78, 0x80, - 0xc8, 0xd2, 0xd4, 0x67, 0x00, 0x63, 0x19, 0x40, 0x1f, 0xc9, 0x07, 0x89, 0x07, 0x59, 0x82, 0xc1, - 0x84, 0xab, 0xa5, 0x85, 0x88, 0x78, 0x30, 0x58, 0xfb, 0x33, 0x00, 0x51, 0x21, 0xbf, 0xcc, 0x18, - 0x40, 0x54, 0x89, 0x13, 0x14, 0x26, 0x00, 0x12, 0x65, 0x00, 0xa3, 0xc4, 0x1d, 0x04, 0xbd, 0xbc, - 0x5f, 0x12, 0x03, 0x44, 0x15, 0x66, 0x4b, 0xec, 0x50, 0x7f, 0x97, 0x62, 0x10, 0x2c, 0x1c, 0xf1, - 0xba, 0x0f, 0xfe, 0x5c, 0x09, 0x20, 0xc0, 0x6e, 0xa0, 0x80, 0x92, 0xc3, 0xc1, 0xc5, 0x63, 0x2a, - 0x50, 0x01, 0x1a, 0x92, 0x64, 0x02, 0x44, 0x8a, 0x80, 0x02, 0xe8, 0x14, 0x50, 0x70, 0x00, 0x4b, - 0xff, 0x71, 0x58, 0x3d, 0x43, 0xe5, 0xf5, 0x15, 0xa7, 0xc4, 0x04, 0x06, 0xd9, 0x08, 0x06, 0xa1, - 0xd6, 0x5c, 0x00, 0x01, 0xe5, 0x0e, 0x90, 0x12, 0xca, 0xe2, 0xd0, 0x73, 0x81, 0x28, 0xf0, 0x16, - 0x07, 0x4c, 0x12, 0xa2, 0x02, 0xb0, 0x2c, 0x1e, 0x48, 0xfb, 0x27, 0xf4, 0x90, 0xec, 0x73, 0xf6, - 0xe4, 0xff, 0x05, 0x9e, 0x6c, 0x69, 0xa3, 0x49, 0xf8, 0x28, 0xff, 0x17, 0x11, 0x85, 0x9c, 0x59, - 0x72, 0xd8, 0xfc, 0xee, 0x22, 0x14, 0x80, 0xd3, 0x43, 0x3a, 0x72, 0x6a, 0xa4, 0x37, 0xf6, 0x78, - 0x01, 0x95, 0x82, 0x56, 0xaa, 0x24, 0x00, 0x0a, 0xb3, 0x96, 0x56, 0x33, 0x36, 0x92, 0x54, 0x0f, - 0x3b, 0x0a, 0xbc, 0x30, 0x72, 0x18, 0xec, 0x9e, 0x21, 0xe3, 0xe0, 0xdf, 0xcc, 0x7e, 0x5f, 0x89, - 0x12, 0x28, 0xc3, 0x8c, 0x4f, 0xf9, 0x95, 0xb8, 0x81, 0xa6, 0x04, 0x01, 0x21, 0x4c, 0xcd, 0x96, - 0xc5, 0xd4, 0x9c, 0x40, 0x78, 0xb8, 0x7a, 0x4a, 0x5d, 0x69, 0x2b, 0x9c, 0x0a, 0x02, 0x42, 0x85, - 0x18, 0x5d, 0xdb, 0x14, 0xc5, 0x00, 0xd4, 0x47, 0x17, 0x74, 0xed, 0xcd, 0x99, 0x7c, 0xb7, 0xdc, - 0x39, 0xc9, 0xad, 0x45, 0x73, 0x5c, 0xf8, 0xbf, 0xb3, 0x5e, 0x3b, 0x47, 0x0c, 0xc6, 0xc1, 0xa2, - 0x1a, 0x01, 0x8b, 0x17, 0x07, 0x17, 0x2a, 0xf0, 0x93, 0x28, 0x62, 0xc0, 0xa9, 0x9d, 0x9a, 0x66, - 0x70, 0x00, 0x70, 0x60, 0xc2, 0xe0, 0x6c, 0xbc, 0x97, 0x84, 0xa4, 0xeb, 0x67, 0x4e, 0x09, 0x4d, - 0x4e, 0xa4, 0x20, 0x63, 0x4b, 0x9b, 0x44, 0xf4, 0x5b, 0xf8, 0x64, 0x69, 0xc4, 0xba, 0xc0, 0x08, - 0x4a, 0x1f, 0x85, 0x8e, 0x95, 0xba, 0x64, 0x40, 0x08, 0x7d, 0xf0, 0x0a, 0x4a, 0xdb, 0xfe, 0x2b, - 0xef, 0x09, 0x55, 0x75, 0x10, 0xf0, 0x97, 0x8a, 0x59, 0x3c, 0x18, 0xfd, 0x89, 0x08, 0x0d, 0x22, - 0xd7, 0x8a, 0x37, 0x1f, 0x50, 0x1b, 0x21, 0xaa, 0x58, 0xb5, 0x86, 0xf5, 0x21, 0xdb, 0x0b, 0xc3, - 0xa6, 0x25, 0x18, 0x26, 0x2a, 0x1f, 0x00, 0x02, 0x94, 0x44, 0x12, 0x5f, 0x94, 0x06, 0xa9, 0xce, - 0xc3, 0xac, 0xe0, 0x0b, 0xdd, 0xb2, 0xcb, 0x30, 0xa0, 0x33, 0xdd, 0xf0, 0x38, 0x2b, 0xcf, 0xe5, - 0xbd, 0x91, 0x02, 0x84, 0x19, 0x38, 0xff, 0xee, 0xf8, 0xea, 0xed, 0xf8, 0x24, 0x43, 0xa0, 0xa7, - 0x4f, 0x88, 0x7c, 0xf1, 0xfc, 0x10, 0x84, 0x42, 0x86, 0x38, 0xe0, 0xfd, 0x83, 0xf0, 0xb7, 0x32, - 0x72, 0xc1, 0x19, 0xea, 0x31, 0xe3, 0xf2, 0x8a, 0x32, 0x02, 0xea, 0xba, 0x94, 0xae, 0xdc, 0xec, - 0x95, 0xcb, 0xb7, 0x66, 0xc7, 0x06, 0x21, 0x80, 0xa5, 0x28, 0x88, 0x87, 0x1d, 0xaa, 0xa9, 0x60, - 0x58, 0x3a, 0x2a, 0xfb, 0x65, 0x45, 0xfa, 0x2c, 0xf7, 0x11, 0x6d, 0xc6, 0x54, 0xad, 0xf9, 0xb2, - 0x0b, 0x0a, 0x1e, 0x07, 0x63, 0x50, 0xc0, 0x82, 0x10, 0x0e, 0x94, 0x3a, 0x67, 0xe4, 0xe8, 0xff, - 0x87, 0x0d, 0xfd, 0x27, 0xf0, 0xdd, 0xf8, 0xa4, 0xa1, 0x6c, 0xdf, 0xfc, 0x09, 0x21, 0x0e, 0x04, - 0x10, 0x81, 0x0e, 0x7c, 0x7e, 0x78, 0x10, 0x44, 0x38, 0x38, 0x8f, 0x01, 0xd7, 0x9e, 0x04, 0x91, - 0x00, 0x97, 0x3a, 0x88, 0xe1, 0xdc, 0x99, 0x48, 0xbc, 0x12, 0xc1, 0x85, 0x32, 0x28, 0x4b, 0xd3, - 0xc5, 0x7a, 0x41, 0xf0, 0x9e, 0x7c, 0xbd, 0xdd, 0xfc, 0x12, 0x77, 0x78, 0x3e, 0xbd, 0x04, 0x11, - 0x31, 0x22, 0x06, 0x73, 0x97, 0xfd, 0xdf, 0xf2, 0x58, 0x49, 0x1f, 0x3f, 0x09, 0x55, 0x7a, 0x4f, - 0x27, 0x2e, 0x2b, 0xba, 0x88, 0x01, 0xa0, 0x43, 0xeb, 0x57, 0xe2, 0x00, 0x64, 0x05, 0x4c, 0x34, - 0x06, 0x1c, 0x61, 0xc0, 0x06, 0x05, 0x5f, 0x16, 0x00, 0x40, 0xff, 0x0f, 0x66, 0x00, 0xfd, 0xbf, - 0x08, 0x80, 0xf6, 0xbd, 0x32, 0xa7, 0xef, 0x0e, 0x28, 0x13, 0xc6, 0xb0, 0x61, 0x3e, 0x3a, 0x4c, - 0x62, 0x7f, 0xf6, 0x2f, 0xf2, 0xa6, 0x52, 0x51, 0xf8, 0xe0, 0xee, 0xc8, 0x6a, 0x8e, 0x96, 0x9b, - 0x00, 0xc5, 0x2c, 0xbd, 0x8e, 0x5d, 0x59, 0xdb, 0xe7, 0x12, 0x90, 0x1c, 0x35, 0x0f, 0x87, 0xde, - 0x3f, 0x87, 0x94, 0x00, 0x72, 0xf3, 0xf0, 0x4c, 0xa8, 0xdb, 0xe1, 0x5f, 0xb6, 0x51, 0x23, 0xa6, - 0x36, 0x4c, 0x64, 0xc1, 0xcc, 0x16, 0x0a, 0x60, 0x1e, 0xaf, 0xeb, 0x02, 0xdb, 0xf4, 0xab, 0x2b, - 0xe5, 0x40, 0x61, 0x84, 0x4e, 0x31, 0x6c, 0x3c, 0x73, 0x81, 0xc5, 0x01, 0x5d, 0x17, 0x5e, 0x0b, - 0x71, 0x89, 0x74, 0x18, 0x0c, 0xe4, 0x87, 0xff, 0x12, 0x19, 0x19, 0xc3, 0xd9, 0xc6, 0x0b, 0xb5, - 0xfa, 0x58, 0x72, 0x7f, 0x9e, 0x71, 0x20, 0x6e, 0xc8, 0x87, 0xb6, 0xfc, 0xdc, 0x7c, 0x0a, 0x21, - 0x29, 0xc0, 0xf2, 0xd7, 0x89, 0x85, 0x22, 0x83, 0x72, 0xdb, 0xe5, 0xe9, 0x25, 0xa6, 0xb1, 0x58, - 0xad, 0xef, 0xc4, 0x86, 0x06, 0xcf, 0x71, 0x44, 0x8d, 0x6f, 0xc1, 0x6e, 0x82, 0xda, 0xd7, 0x0c, - 0xc4, 0x8e, 0x4f, 0x15, 0x82, 0x83, 0xfe, 0xe4, 0x82, 0x40, 0x06, 0x20, 0xfa, 0x70, 0x76, 0xf4, - 0x12, 0x96, 0xd3, 0x06, 0x0d, 0xb9, 0x7f, 0xf8, 0x6e, 0x2f, 0xdb, 0x5c, 0x7a, 0x86, 0x07, 0xe1, - 0x9d, 0xf0, 0xb0, 0x01, 0xb8, 0xf7, 0x7e, 0x48, 0x91, 0x21, 0x43, 0xab, 0x6c, 0x67, 0xe9, 0xb7, - 0xb6, 0xc7, 0x69, 0x9b, 0x53, 0x09, 0x89, 0xa5, 0x26, 0x80, 0x11, 0xfe, 0x3e, 0x1b, 0x70, 0x01, - 0xa2, 0x1f, 0xc8, 0xed, 0x82, 0xe7, 0xdf, 0xf7, 0x0a, 0xf4, 0x24, 0x4f, 0xf8, 0xc3, 0x55, 0x95, - 0x8a, 0xba, 0xce, 0x15, 0x6a, 0xf1, 0x8a, 0xb4, 0x6a, 0xcb, 0x58, 0x07, 0xeb, 0x3d, 0x7f, 0xc6, - 0xde, 0x43, 0xc6, 0x2c, 0x9d, 0x8a, 0x99, 0x1a, 0xab, 0xc8, 0xf3, 0x0d, 0xa8, 0xfe, 0xe5, 0xcb, - 0xb8, 0xa9, 0xa6, 0xff, 0xf7, 0x49, 0x2b, 0x87, 0xf9, 0xb4, 0x72, 0xe7, 0x84, 0x6a, 0xa8, 0xc6, - 0xd5, 0xac, 0x37, 0x7b, 0x77, 0xf2, 0xc4, 0x2c, 0x0f, 0x8c, 0x28, 0xa2, 0xf0, 0x86, 0xb7, 0xd2, - 0x77, 0x29, 0xcd, 0xf1, 0x24, 0x55, 0x52, 0x76, 0x4c, 0x3b, 0xf8, 0x8e, 0xab, 0xaa, 0x9a, 0x24, - 0x22, 0x14, 0xad, 0x30, 0x1a, 0xc6, 0x3c, 0x75, 0xe6, 0x2f, 0x0a, 0xff, 0xfd, 0x5a, 0x01, 0x09, - 0x85, 0x30, 0x53, 0xd7, 0x38, 0xae, 0x07, 0xc2, 0x29, 0x74, 0xdf, 0x4e, 0x74, 0x30, 0x6c, 0xc3, - 0x11, 0x69, 0xc2, 0x00, 0xae, 0xe2, 0x9e, 0x13, 0x9b, 0xc7, 0x65, 0x16, 0xc7, 0xcd, 0x8b, 0x80, - 0xb3, 0x1a, 0xc2, 0x76, 0xcf, 0x62, 0x1c, 0x7f, 0x07, 0x01, 0x42, 0x4c, 0x81, 0x12, 0x42, 0x5e, - 0x7e, 0x91, 0x0b, 0x78, 0xe1, 0x94, 0x22, 0xc0, 0x1f, 0xd1, 0x8b, 0x68, 0xb0, 0x62, 0x4f, 0x2d, - 0x97, 0xa4, 0x2a, 0x67, 0xc0, 0xff, 0xd8, 0xb6, 0xe1, 0x90, 0x2c, 0x05, 0x21, 0x7a, 0x79, 0xbb, - 0xbe, 0x27, 0x8e, 0x50, 0xb9, 0xed, 0x74, 0x66, 0x94, 0x8c, 0xd4, 0xe9, 0x14, 0x47, 0xcb, 0x6f, - 0x86, 0xa6, 0x78, 0x61, 0xd6, 0xb1, 0xb9, 0x17, 0x40, 0x0e, 0xaf, 0x40, 0x10, 0x2c, 0xec, 0xc8, - 0x8a, 0xa1, 0xc5, 0x00, 0x0e, 0xd5, 0xd9, 0x46, 0x28, 0x3f, 0x7f, 0x7f, 0x10, 0xd0, 0x5d, 0xf4, - 0x55, 0xc9, 0xa6, 0x5a, 0xc4, 0xa6, 0x6f, 0xb0, 0x77, 0xeb, 0x59, 0xe0, 0xe8, 0x55, 0x49, 0x78, - 0xe9, 0xef, 0x4a, 0x4a, 0xf8, 0x7f, 0x83, 0x49, 0xf8, 0xc9, 0xd4, 0xb0, 0x00, 0x3b, 0x1c, 0x40, - 0x7c, 0xe0, 0x00, 0x3f, 0x85, 0x04, 0x01, 0xa8, 0x74, 0xac, 0xd8, 0x75, 0x67, 0x09, 0x34, 0x20, - 0xc0, 0x60, 0x9f, 0x6f, 0x62, 0x4f, 0xf0, 0xb9, 0xd5, 0x60, 0x3c, 0x6a, 0x6e, 0x50, 0xd4, 0x15, - 0x19, 0x25, 0x1c, 0x2f, 0xc0, 0x95, 0x1b, 0xc4, 0x0c, 0x3e, 0x1c, 0x46, 0x00, 0x0b, 0xd4, 0x81, - 0xa4, 0xf7, 0x08, 0x55, 0xa3, 0xdf, 0xdd, 0x6d, 0xbe, 0x0d, 0xde, 0x38, 0xea, 0x0d, 0x08, 0x1a, - 0x3d, 0x8b, 0x90, 0x28, 0xef, 0x08, 0xc5, 0xb8, 0xc4, 0x49, 0x08, 0xa4, 0x5d, 0x6e, 0xbb, 0x7e, - 0x1d, 0xc0, 0x0e, 0x84, 0xb1, 0xc3, 0x17, 0x93, 0xf1, 0xa2, 0x5c, 0xfd, 0xfd, 0xdb, 0x6f, 0x59, - 0xcd, 0x95, 0x07, 0x18, 0x32, 0x00, 0x2b, 0x82, 0x1c, 0x12, 0xe0, 0x2c, 0xc3, 0xf1, 0x7c, 0x88, - 0x9a, 0xf0, 0x57, 0x8e, 0x7d, 0x07, 0x1b, 0xfe, 0x04, 0x00, 0x42, 0x14, 0x13, 0x1d, 0x4c, 0x84, - 0x70, 0x2b, 0xc8, 0xf7, 0xc9, 0x6c, 0x65, 0xec, 0xb3, 0x5c, 0x3b, 0x09, 0xe0, 0x70, 0x9c, 0xb7, - 0x1a, 0x42, 0xb1, 0xf1, 0x3d, 0xcf, 0xdf, 0x96, 0x9c, 0x40, 0x28, 0xea, 0x56, 0xd1, 0xc6, 0x9c, - 0x05, 0x4a, 0xe5, 0xdb, 0x6e, 0xb9, 0xae, 0x21, 0xee, 0x58, 0xe1, 0x94, 0x50, 0x04, 0xb2, 0xc7, - 0xaa, 0x07, 0xf7, 0x21, 0x8c, 0x6a, 0x31, 0x96, 0xa0, 0xed, 0xc7, 0x70, 0xb3, 0x52, 0x8d, 0x85, - 0xd8, 0x8e, 0x1b, 0xe1, 0x70, 0xba, 0xf9, 0x48, 0x7f, 0x6e, 0x10, 0xeb, 0x28, 0xce, 0x11, 0x32, - 0x03, 0x36, 0x14, 0xcc, 0x6d, 0x05, 0xea, 0x5d, 0x66, 0x55, 0x8b, 0xe4, 0xb5, 0x58, 0x98, 0x64, - 0x22, 0x34, 0x8c, 0xec, 0xda, 0xae, 0x7b, 0xcb, 0xde, 0xa7, 0xe6, 0x60, 0xb5, 0x93, 0x15, 0xb3, - 0xc0, 0xb1, 0x1b, 0xea, 0xaf, 0xf8, 0x40, 0x48, 0x29, 0x29, 0x3e, 0x15, 0xab, 0x18, 0xd2, 0x0c, - 0x84, 0xd2, 0x6e, 0xc4, 0x78, 0x3c, 0xb6, 0xd8, 0x71, 0x94, 0x00, 0x7c, 0x07, 0x33, 0x1e, 0x30, - 0x7e, 0x70, 0x69, 0x22, 0x6a, 0x6a, 0x65, 0x75, 0x87, 0x47, 0x15, 0xa6, 0x54, 0x4a, 0x74, 0x6c, - 0x13, 0x27, 0xe0, 0x7b, 0x8e, 0xd1, 0x32, 0x0e, 0xe3, 0x94, 0x03, 0xb8, 0xe5, 0x00, 0xe0, 0x4b, - 0x07, 0x0a, 0x8c, 0xa7, 0x8b, 0x6c, 0x91, 0x09, 0xd3, 0x87, 0x11, 0x00, 0x1f, 0x38, 0x12, 0x14, - 0x42, 0xd9, 0x89, 0x30, 0xff, 0x3f, 0x9d, 0xd3, 0xba, 0x5b, 0x91, 0xb2, 0xb9, 0x49, 0x2e, 0xc7, - 0x9c, 0x44, 0x30, 0x92, 0xda, 0xc9, 0x07, 0xac, 0x0a, 0x50, 0x82, 0xb1, 0x47, 0x2f, 0x8a, 0x38, - 0x1d, 0x47, 0xd8, 0x60, 0x20, 0x36, 0x09, 0x83, 0x50, 0x3a, 0xa5, 0x06, 0x8e, 0x95, 0xf1, 0xcb, - 0xf5, 0xf7, 0xc9, 0x4a, 0xc1, 0x6c, 0xb2, 0xf0, 0xe5, 0xb5, 0x91, 0x36, 0x58, 0xc4, 0x61, 0xf9, - 0xae, 0xbc, 0x5d, 0x96, 0xe1, 0x01, 0xa6, 0x20, 0x89, 0x00, 0xc3, 0x08, 0xc5, 0x1d, 0x97, 0x80, - 0xdc, 0xb4, 0xdb, 0x72, 0xe7, 0xc5, 0xbf, 0xbc, 0x17, 0x9e, 0x0d, 0x26, 0xb5, 0x59, 0x8c, 0x53, - 0x51, 0x4d, 0x25, 0xdb, 0xff, 0xe1, 0xe6, 0x60, 0x02, 0xde, 0xf3, 0x21, 0x52, 0xa1, 0xc2, 0x35, - 0xed, 0x37, 0x77, 0x74, 0xe3, 0xe4, 0xa3, 0xb8, 0xcf, 0x66, 0xea, 0x27, 0xdd, 0xc2, 0x91, 0x98, - 0x12, 0xae, 0x20, 0x79, 0x7e, 0x2b, 0x58, 0x71, 0x40, 0x15, 0x0c, 0x51, 0x1b, 0xc5, 0xec, 0xdd, - 0x09, 0x23, 0x45, 0x6b, 0x79, 0x38, 0xc8, 0x28, 0x11, 0x77, 0xe3, 0x07, 0x93, 0x5e, 0x2a, 0x05, - 0xec, 0x11, 0x27, 0x29, 0xee, 0xaa, 0x71, 0xa5, 0x5b, 0x6d, 0xfe, 0x08, 0x04, 0x8d, 0x9a, 0x9e, - 0x13, 0x6c, 0x3c, 0x67, 0xfd, 0x86, 0xa3, 0x54, 0x50, 0x8d, 0xd0, 0xfd, 0x0e, 0x16, 0x36, 0x60, - 0x90, 0x1a, 0x21, 0x05, 0x47, 0xfc, 0xf0, 0x00, 0x7a, 0x41, 0x5b, 0x06, 0x25, 0xe0, 0x4e, 0xe5, - 0x3e, 0xb4, 0x3c, 0xb6, 0x96, 0x25, 0x60, 0x0b, 0x87, 0x03, 0xc3, 0x34, 0x8f, 0x5f, 0xe2, 0x42, - 0x9e, 0xd9, 0x1b, 0x2c, 0xc1, 0x68, 0x9e, 0xae, 0xc7, 0xc0, 0x0e, 0x1e, 0x18, 0x54, 0x28, 0xa3, - 0xb8, 0xcc, 0x87, 0xf1, 0x3a, 0xdd, 0x72, 0xbc, 0x40, 0x52, 0xf1, 0x0d, 0x9b, 0x5f, 0x52, 0xc6, - 0x54, 0x5c, 0x9a, 0xb2, 0x23, 0x06, 0x7f, 0x2f, 0x10, 0x08, 0xf5, 0x1a, 0xca, 0x1f, 0x9f, 0x05, - 0x1e, 0x3c, 0xb8, 0xc0, 0x06, 0x88, 0x30, 0x60, 0x8e, 0xc0, 0xd8, 0x73, 0x84, 0x00, 0xc2, 0x36, - 0xe9, 0xd3, 0x6e, 0x25, 0xee, 0x5b, 0x39, 0xb3, 0x74, 0x48, 0x26, 0x1c, 0x05, 0x28, 0x38, 0x0f, - 0xca, 0x6f, 0x25, 0x26, 0x3b, 0x49, 0x80, 0xf3, 0x42, 0x02, 0xc8, 0x41, 0x4b, 0x07, 0x1f, 0x85, - 0xfe, 0xf8, 0x70, 0x90, 0x02, 0xdc, 0xc2, 0x99, 0xdd, 0x20, 0x9b, 0xf1, 0xb6, 0xf6, 0xd9, 0x13, - 0xc6, 0xfc, 0x1f, 0x96, 0xcf, 0xe2, 0xa0, 0x19, 0xc5, 0x57, 0x2c, 0x5d, 0xa8, 0x3c, 0x00, 0x3a, - 0x38, 0x00, 0x10, 0x9c, 0xf1, 0x8a, 0x16, 0xd3, 0xa9, 0xaf, 0x86, 0xf0, 0x01, 0x42, 0xaa, 0xb4, - 0x97, 0x02, 0xe1, 0x04, 0x5c, 0xd0, 0xb5, 0x74, 0x62, 0xb2, 0xa0, 0x00, 0xe3, 0x05, 0x60, 0x79, - 0x94, 0x00, 0x0e, 0x90, 0xe0, 0x00, 0x99, 0x0c, 0x51, 0xeb, 0xac, 0x03, 0xfc, 0x8c, 0xa4, 0x2e, - 0x25, 0xd0, 0x76, 0xfb, 0x6d, 0x84, 0x39, 0x4e, 0xf6, 0xfe, 0xb0, 0x42, 0x1c, 0xa4, 0x55, 0xfc, - 0xc4, 0x55, 0xfc, 0xa7, 0x5a, 0xdc, 0x32, 0x24, 0x69, 0x81, 0xdb, 0xd8, 0x97, 0xab, 0xa5, 0x1f, - 0x3f, 0x0a, 0xb5, 0x16, 0xbc, 0xdc, 0x76, 0xa7, 0xf1, 0x5b, 0x48, 0x4a, 0x23, 0x46, 0x3f, 0x16, - 0x32, 0xc2, 0xde, 0x08, 0x64, 0xd6, 0xb8, 0x81, 0x01, 0x42, 0xad, 0x26, 0x42, 0x3b, 0x6b, 0x72, - 0x55, 0xb6, 0x76, 0xa9, 0x60, 0x33, 0x81, 0xe7, 0x00, 0xf5, 0x2a, 0x35, 0x28, 0xeb, 0x09, 0x1a, - 0x1c, 0x0f, 0x3e, 0xd1, 0x0e, 0x0c, 0xf8, 0xd8, 0x44, 0x02, 0x44, 0x8a, 0x04, 0x43, 0x1e, 0x05, - 0x9d, 0x10, 0x46, 0xd4, 0x40, 0xb9, 0x49, 0x27, 0x87, 0x96, 0xdb, 0xed, 0x5a, 0xed, 0x6f, 0x53, - 0x90, 0xdc, 0xfe, 0x15, 0xe3, 0xfc, 0x48, 0x56, 0x78, 0x07, 0x92, 0x34, 0x1b, 0x64, 0xa7, 0x1f, - 0x46, 0x3d, 0x8e, 0x03, 0xa1, 0x02, 0xae, 0xbe, 0x0a, 0xb7, 0xae, 0x08, 0xfd, 0x62, 0x41, 0x04, - 0x14, 0x57, 0x07, 0x14, 0x95, 0x5d, 0x66, 0x24, 0xb3, 0x54, 0xe3, 0x75, 0x4f, 0xb6, 0x12, 0x4c, - 0x82, 0x53, 0x47, 0xa3, 0x2b, 0x1c, 0x30, 0x7a, 0x37, 0xf8, 0x08, 0x00, 0x50, 0x34, 0x83, 0x82, - 0x1f, 0x08, 0xe0, 0xb3, 0xcc, 0xf8, 0x0f, 0x2d, 0x5f, 0xac, 0x39, 0xe2, 0x60, 0xae, 0xbc, 0x0c, - 0x45, 0x71, 0x05, 0x40, 0xaa, 0xe4, 0x0c, 0xd0, 0x00, 0x78, 0xcf, 0x80, 0x01, 0x75, 0x08, 0x36, - 0x09, 0x54, 0x60, 0x09, 0x08, 0x75, 0x80, 0x39, 0x92, 0x80, 0x3d, 0x68, 0x91, 0xd6, 0x3b, 0xfb, - 0x7f, 0xe1, 0x49, 0x44, 0x06, 0x41, 0x2c, 0x1f, 0xc8, 0x42, 0x60, 0xe9, 0x3e, 0xa9, 0x26, 0x2a, - 0x9f, 0x82, 0x38, 0x4c, 0x01, 0xed, 0x31, 0x57, 0x4a, 0x52, 0x92, 0x01, 0x5f, 0x70, 0xb6, 0x17, - 0xc3, 0x36, 0x85, 0xb3, 0xf8, 0xb0, 0x71, 0x17, 0xa8, 0x5e, 0x70, 0x27, 0xd3, 0x5b, 0x67, 0x2d, - 0x93, 0xb6, 0xd3, 0x57, 0x53, 0xda, 0xfe, 0x6f, 0x0f, 0xbb, 0x37, 0x52, 0xb2, 0xfe, 0xcc, 0x93, - 0xfc, 0xbc, 0xe9, 0xe2, 0x46, 0x63, 0xa9, 0xb1, 0xcf, 0x9c, 0xbd, 0x76, 0x84, 0xc0, 0x54, 0xb1, - 0x44, 0xbd, 0x0b, 0xc1, 0xdb, 0x1f, 0xc3, 0xfc, 0xe1, 0x17, 0x2d, 0xfe, 0x22, 0x14, 0xb7, 0x4b, - 0xa2, 0x46, 0xa1, 0x86, 0xe1, 0x56, 0x92, 0xd5, 0xfa, 0xb5, 0xc4, 0x6b, 0x73, 0x62, 0xf0, 0x80, - 0x50, 0xd1, 0x12, 0x14, 0x26, 0xf6, 0x90, 0x70, 0x33, 0xcc, 0xaf, 0xe5, 0xfd, 0xdd, 0x24, 0xa2, - 0x8e, 0x2e, 0x24, 0x40, 0x52, 0x7a, 0x8f, 0xf0, 0x7a, 0xc0, 0xf9, 0xa8, 0xf0, 0xb0, 0xb2, 0x05, - 0x84, 0x80, 0xfa, 0x22, 0xc1, 0x9e, 0x03, 0x82, 0xab, 0x3c, 0x1c, 0x2d, 0x94, 0x82, 0x88, 0x19, - 0x6c, 0xb8, 0x31, 0x85, 0x0a, 0x48, 0x1d, 0x94, 0x97, 0x85, 0xd6, 0x3e, 0x26, 0x61, 0x49, 0xad, - 0x9c, 0x0f, 0x7e, 0xf0, 0x18, 0xd3, 0x43, 0x42, 0xa3, 0x54, 0x8f, 0x98, 0x9d, 0xc4, 0x6d, 0x71, - 0x21, 0xd9, 0xc0, 0x03, 0x85, 0x8c, 0x38, 0xb3, 0x55, 0xd9, 0x3e, 0x21, 0xe8, 0x4b, 0xfa, 0x67, - 0x70, 0xa1, 0x21, 0x00, 0xd8, 0x81, 0x7c, 0x32, 0x86, 0xef, 0xf0, 0x97, 0x35, 0x57, 0x0a, 0x41, - 0x04, 0x9d, 0x6c, 0x9f, 0x12, 0x11, 0x11, 0x6d, 0x03, 0x0a, 0x65, 0x5e, 0x4f, 0x60, 0x57, 0xbe, - 0x24, 0x32, 0x14, 0xb6, 0x35, 0xa5, 0x1b, 0x3b, 0x8c, 0x81, 0x56, 0x52, 0xcc, 0xf3, 0xee, 0xa6, - 0xc0, 0x3f, 0x35, 0x48, 0x15, 0x07, 0x6c, 0x79, 0x32, 0x02, 0x4c, 0x48, 0xc2, 0x78, 0x97, 0x6a, - 0xa2, 0xe4, 0x83, 0xa0, 0x15, 0x9c, 0x20, 0x55, 0x93, 0xcc, 0x63, 0x83, 0x10, 0x88, 0xc9, 0x54, - 0x2c, 0x14, 0x32, 0x96, 0x19, 0x43, 0xa9, 0xe0, 0x03, 0x7c, 0x01, 0xe7, 0x83, 0x87, 0xb8, 0x54, - 0xc4, 0x23, 0xd6, 0x0e, 0x79, 0x60, 0xdb, 0x99, 0x6f, 0x84, 0x44, 0x85, 0x0e, 0x78, 0x0c, 0xf0, - 0x70, 0xb1, 0x96, 0xca, 0xa3, 0xc3, 0xfa, 0x70, 0x54, 0x4f, 0xe8, 0xec, 0x8f, 0xf7, 0xb0, 0x27, - 0xae, 0x11, 0x0c, 0x8e, 0xa0, 0x0a, 0x8d, 0xf9, 0x2c, 0xd8, 0x5d, 0x58, 0xfb, 0x43, 0x01, 0xdc, - 0xa5, 0x71, 0x21, 0x91, 0xfc, 0xf9, 0x92, 0x0d, 0x0b, 0x75, 0x0a, 0xc7, 0x4d, 0x7f, 0xc2, 0x22, - 0x77, 0x77, 0xcc, 0xc7, 0x12, 0x11, 0x27, 0x6d, 0x71, 0x01, 0x01, 0x90, 0xb3, 0x92, 0xb5, 0x18, - 0xaf, 0x9d, 0xb9, 0x62, 0xb2, 0xc6, 0x2b, 0x65, 0xa8, 0xe3, 0x76, 0x76, 0xa8, 0x2c, 0x76, 0x15, - 0x57, 0x89, 0x0e, 0x90, 0x46, 0x8a, 0x1a, 0xa6, 0xba, 0x24, 0xa9, 0xee, 0x1e, 0xe6, 0x5d, 0xfb, - 0x6c, 0x07, 0x51, 0x68, 0x9b, 0xff, 0x9c, 0x49, 0x28, 0x8e, 0xff, 0x05, 0x3c, 0x84, 0x80, 0xe8, - 0x94, 0xdd, 0xfd, 0xc5, 0x09, 0x2c, 0xfa, 0xc4, 0x82, 0xa2, 0x53, 0x52, 0x6b, 0x64, 0x45, 0xb9, - 0x9f, 0x53, 0x62, 0x7f, 0x2e, 0x11, 0x08, 0x0c, 0x38, 0x3e, 0x46, 0xb0, 0xb6, 0x9d, 0xa3, 0x97, - 0x67, 0xe4, 0xd5, 0x67, 0x2c, 0x0c, 0xd6, 0xa3, 0x4d, 0x55, 0xa5, 0xc4, 0x82, 0xa2, 0x37, 0xbe, - 0x9f, 0x51, 0x8c, 0x1f, 0xcd, 0x6a, 0xff, 0x08, 0xd2, 0xd4, 0x46, 0x19, 0x50, 0x83, 0xa5, 0x56, - 0x32, 0xb8, 0x98, 0x52, 0x95, 0xaa, 0x26, 0xdb, 0xba, 0x25, 0x42, 0x44, 0x8a, 0xd5, 0x69, 0x57, - 0x2f, 0xed, 0xf8, 0x91, 0x01, 0x4d, 0xee, 0xef, 0x73, 0x86, 0x02, 0x5b, 0xae, 0x21, 0xc6, 0xe0, - 0xa3, 0x38, 0x71, 0xf8, 0x91, 0x03, 0x0b, 0x54, 0x94, 0xda, 0x5c, 0xb7, 0xbc, 0x56, 0xe2, 0xbc, - 0x4c, 0x21, 0x1a, 0xcf, 0xe7, 0xa3, 0x96, 0xc2, 0xe2, 0xb0, 0x48, 0xf6, 0x0a, 0x3f, 0xaf, 0x87, - 0xbc, 0x29, 0x55, 0x08, 0x07, 0xb1, 0xf7, 0x2f, 0xc8, 0xd7, 0x7b, 0xe9, 0xdb, 0xb6, 0xfe, 0x20, - 0x20, 0x22, 0x2e, 0xc1, 0xea, 0x2e, 0xa9, 0xd3, 0x85, 0x79, 0xaf, 0x79, 0x39, 0x37, 0xb8, 0x53, - 0x8a, 0x8a, 0x65, 0xe2, 0xe2, 0x0f, 0x53, 0xce, 0x24, 0x5f, 0x88, 0x08, 0x8c, 0x12, 0x28, 0x67, - 0xf0, 0xeb, 0x12, 0x30, 0xc7, 0x8c, 0x56, 0xda, 0x3b, 0xcf, 0x62, 0x05, 0x88, 0x81, 0x63, 0x12, - 0x10, 0x19, 0x74, 0xb6, 0xc5, 0xc5, 0xc2, 0xa1, 0xa5, 0xc1, 0xdf, 0xb7, 0xa9, 0xe7, 0xeb, 0x89, - 0x8c, 0x30, 0xa1, 0x8b, 0xcc, 0x7e, 0xab, 0xcb, 0xe5, 0x31, 0x18, 0x48, 0xfd, 0x1d, 0x15, 0x28, - 0x88, 0x41, 0xa5, 0x84, 0x61, 0x4a, 0xd1, 0x84, 0xf0, 0xe1, 0xc0, 0xb0, 0x78, 0xc0, 0xc2, 0x19, - 0x85, 0x80, 0x0d, 0xd0, 0xf8, 0xe1, 0xc7, 0xe2, 0x21, 0xe7, 0x5a, 0xdf, 0x96, 0x9e, 0x0e, 0xbc, - 0xd2, 0xd2, 0xfc, 0x29, 0x0a, 0x03, 0xe1, 0xe7, 0x4d, 0x22, 0x61, 0xe3, 0x98, 0x16, 0xeb, 0x69, - 0xa5, 0xb4, 0x2e, 0xf4, 0xfc, 0x48, 0x81, 0x67, 0xb2, 0x32, 0x8d, 0x75, 0xe1, 0x01, 0xe4, 0x1c, - 0xa8, 0xe7, 0x1c, 0xd5, 0x7a, 0x15, 0xbf, 0x3e, 0xd1, 0xf6, 0x55, 0xfd, 0xdd, 0xae, 0x20, 0x29, - 0x59, 0xe5, 0xff, 0x27, 0x6d, 0xed, 0xee, 0xa1, 0x72, 0xd5, 0xbb, 0xbf, 0x78, 0x40, 0x23, 0x0b, - 0x55, 0xda, 0xcc, 0x3f, 0x47, 0xbb, 0x74, 0x31, 0x3c, 0xc3, 0x5c, 0xb7, 0x77, 0x70, 0xa4, 0x40, - 0x81, 0xf4, 0x10, 0xbd, 0x54, 0x91, 0xa0, 0xd2, 0xb7, 0xdd, 0x15, 0x9f, 0x12, 0x14, 0x28, 0xb2, - 0x7c, 0xde, 0x58, 0xeb, 0x10, 0xe3, 0xc3, 0x02, 0xed, 0x56, 0xad, 0x38, 0x70, 0x63, 0x8b, 0x67, - 0x26, 0x15, 0x6e, 0x1c, 0xe3, 0xf0, 0x60, 0x0c, 0x06, 0x4f, 0x39, 0x1a, 0xc9, 0x5a, 0x31, 0x53, - 0x05, 0x56, 0x70, 0xc1, 0xef, 0x6d, 0xbc, 0x3f, 0xd7, 0xc3, 0x67, 0xb0, 0x88, 0x40, 0x22, 0x69, - 0xa9, 0xde, 0x3d, 0xef, 0x84, 0x44, 0x0f, 0x92, 0x56, 0x65, 0xd5, 0xac, 0x4b, 0xc2, 0x8a, 0x9f, - 0x0e, 0x07, 0xf8, 0x50, 0xa3, 0x74, 0xa6, 0x5b, 0x0a, 0xab, 0x49, 0xb8, 0xbd, 0x47, 0x87, 0x85, - 0x80, 0xc9, 0x00, 0x1c, 0x8e, 0x00, 0x68, 0x58, 0xf2, 0x70, 0x14, 0x0f, 0x67, 0x22, 0x75, 0x89, - 0x82, 0xb8, 0xbf, 0xb6, 0xaa, 0xda, 0x49, 0x6d, 0x56, 0x1f, 0xb5, 0x2d, 0xf7, 0x08, 0x88, 0x09, - 0xc1, 0xa6, 0x5d, 0x46, 0x7a, 0xe7, 0xfc, 0x22, 0x3b, 0x1f, 0x5c, 0xf9, 0x58, 0xc7, 0xaa, 0xc1, - 0x84, 0x22, 0x24, 0x61, 0x25, 0x8e, 0x0e, 0xda, 0xf1, 0x16, 0x31, 0x58, 0x31, 0x78, 0x24, 0xca, - 0x82, 0x4a, 0xe0, 0x17, 0x45, 0x93, 0x12, 0x0f, 0x60, 0x87, 0x2d, 0xf0, 0xc0, 0x50, 0x84, 0xc0, - 0x7f, 0x83, 0x38, 0xf8, 0x9d, 0x50, 0x75, 0x71, 0x83, 0x02, 0xe8, 0x32, 0x95, 0xe7, 0x62, 0xab, - 0x97, 0x4e, 0x06, 0x31, 0x12, 0xb7, 0x91, 0x48, 0xee, 0x83, 0xd7, 0x77, 0x86, 0x02, 0x9a, 0xa7, - 0x78, 0x69, 0x58, 0x69, 0x0f, 0xa1, 0xb4, 0x5f, 0x1d, 0x69, 0x86, 0x55, 0x0e, 0xc0, 0x79, 0xb0, - 0x5f, 0x5e, 0x20, 0x28, 0x51, 0xc5, 0xe1, 0x28, 0xf8, 0xba, 0x88, 0xaa, 0x6c, 0x87, 0x47, 0x9a, - 0x1d, 0x8a, 0x38, 0x87, 0x8a, 0x30, 0x76, 0xe5, 0xb7, 0x74, 0x8b, 0x10, 0x20, 0x28, 0x48, 0x99, - 0x8f, 0x7a, 0xb8, 0x87, 0x2a, 0x36, 0x97, 0xa8, 0x62, 0xd8, 0x16, 0xcb, 0x5a, 0x6e, 0x7c, 0x67, - 0x2e, 0x08, 0xa4, 0x7a, 0xa1, 0x8f, 0x29, 0x60, 0xeb, 0x3e, 0x16, 0xdb, 0x2f, 0x64, 0x6f, 0xc4, - 0x8c, 0x3c, 0xa9, 0xfc, 0xdb, 0x24, 0x6d, 0x1d, 0xed, 0x33, 0x92, 0xf0, 0x7f, 0xbf, 0xb6, 0x18, - 0xe4, 0xaa, 0xfe, 0x13, 0x25, 0x6a, 0x4f, 0x58, 0x62, 0x08, 0x02, 0x22, 0x0a, 0x21, 0x63, 0x15, - 0xca, 0x27, 0x51, 0xf6, 0x3e, 0x10, 0x12, 0x30, 0xaa, 0x74, 0xe9, 0x41, 0x85, 0x29, 0x6f, 0x2b, - 0x55, 0x56, 0xbd, 0x70, 0x40, 0x10, 0x1b, 0x6e, 0xbc, 0x7f, 0x31, 0xc3, 0x33, 0xd4, 0xaf, 0xc4, - 0x3d, 0x00, 0xed, 0xce, 0xff, 0xc8, 0xa1, 0xa9, 0x45, 0x17, 0x71, 0x77, 0xff, 0x0a, 0x18, 0xf3, - 0xea, 0x63, 0x07, 0x96, 0x10, 0xd3, 0x71, 0x8a, 0xca, 0x62, 0xf1, 0xea, 0x4c, 0xc8, 0xa7, 0x97, - 0x89, 0x19, 0x26, 0x6a, 0x3d, 0x50, 0x4a, 0x9a, 0xa1, 0xc4, 0x99, 0xeb, 0x94, 0xe9, 0x0e, 0x7c, - 0x4d, 0x7a, 0x92, 0xab, 0x25, 0xa8, 0xdf, 0xc4, 0xe3, 0x27, 0xdc, 0x7a, 0x32, 0x7e, 0x61, 0x9e, - 0x6d, 0x6b, 0xe5, 0x17, 0x93, 0xc2, 0x9d, 0x9b, 0x77, 0x2e, 0x08, 0x41, 0x11, 0x45, 0xeb, 0xee, - 0x20, 0x23, 0x5d, 0x91, 0x22, 0x66, 0x01, 0x1b, 0x80, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x44, - 0x22, 0x32, 0x8d, 0xd8, 0x8b, 0xdc, 0x4f, 0x31, 0xdd, 0xdd, 0xfc, 0x15, 0xf7, 0x10, 0x38, 0xe7, - 0x3e, 0xe2, 0x5f, 0x3d, 0xcb, 0xc1, 0x47, 0x26, 0xf2, 0xf7, 0xc8, 0x5a, 0xd7, 0xc4, 0x19, 0x6b, - 0x15, 0xde, 0x5e, 0x62, 0xde, 0x2b, 0xc4, 0xc2, 0x06, 0x75, 0xe4, 0x62, 0xb1, 0x94, 0xc3, 0x7e, - 0x26, 0x3b, 0xba, 0xb6, 0x9e, 0x5b, 0x9b, 0x78, 0x98, 0x42, 0xfb, 0x46, 0x85, 0xe9, 0xbb, 0xbe, - 0x26, 0x28, 0xf7, 0x76, 0xaa, 0xfe, 0x24, 0x49, 0x5a, 0x61, 0x13, 0xf1, 0x9a, 0x84, 0xf8, 0x31, - 0x89, 0x10, 0xc5, 0x6e, 0x5c, 0xf0, 0x4c, 0x52, 0x72, 0x6d, 0x15, 0xc9, 0x16, 0x6b, 0xd5, 0xca, - 0x47, 0xbb, 0xa8, 0x98, 0x48, 0xb5, 0xaa, 0xaa, 0xae, 0x26, 0x20, 0x85, 0xff, 0x6e, 0x7f, 0xe1, - 0x0a, 0xeb, 0x97, 0x1c, 0x51, 0x8a, 0xde, 0x5c, 0xe2, 0x65, 0x17, 0xaa, 0x82, 0x4e, 0x51, 0xdb, - 0xb9, 0x79, 0x84, 0xbb, 0xbd, 0xf6, 0x75, 0x5d, 0x62, 0x3e, 0xcc, 0xb6, 0xeb, 0x8b, 0xb9, 0xe1, - 0x77, 0x7d, 0xf3, 0x0b, 0x4b, 0x26, 0x78, 0xa0, 0x83, 0x3b, 0xbb, 0xdd, 0xd7, 0x28, 0xfc, 0x3a, - 0x8b, 0x81, 0xd4, 0x4e, 0x0a, 0xa2, 0x44, 0x71, 0x11, 0xc2, 0x04, 0xb8, 0x7c, 0x7d, 0xb5, 0xab, - 0xbf, 0xe1, 0x22, 0xbb, 0xde, 0xb5, 0xf0, 0x89, 0x2f, 0x6a, 0xf3, 0x6d, 0x0d, 0x0d, 0xb5, 0xc9, - 0x3e, 0x57, 0x89, 0xd7, 0x37, 0x77, 0x51, 0x30, 0x88, 0x8c, 0xa4, 0x11, 0x46, 0xef, 0xbe, 0xef, - 0xf1, 0xf2, 0xe0, 0xad, 0xfe, 0xdc, 0xd0, 0xaf, 0x36, 0x71, 0x0c, 0xeb, 0x59, 0xa0, 0x80, 0x10, - 0x82, 0xbf, 0x36, 0x56, 0xa4, 0xcc, 0xdf, 0x82, 0x80, 0xc9, 0x47, 0xd5, 0x54, 0x12, 0x44, 0x88, - 0x08, 0x0c, 0x58, 0xba, 0xa4, 0xc2, 0x88, 0xa4, 0xd2, 0x35, 0x3c, 0xc5, 0x6e, 0xef, 0xe1, 0x4d, - 0x8c, 0xec, 0xd0, 0xcf, 0xdc, 0x69, 0xff, 0x76, 0x33, 0xc2, 0xab, 0x19, 0x11, 0x02, 0x56, 0x0b, - 0x6f, 0xf0, 0x49, 0xad, 0x5f, 0x88, 0x8b, 0x11, 0x2f, 0x4f, 0x3c, 0x76, 0xf1, 0x11, 0xd2, 0x41, - 0x55, 0x45, 0xc4, 0x78, 0x9a, 0x45, 0xc6, 0x2b, 0x4f, 0xc5, 0xe4, 0x84, 0xdc, 0x6d, 0x77, 0xe7, - 0xcd, 0xc4, 0x9c, 0x6b, 0xc5, 0x97, 0x89, 0xe6, 0xab, 0xe4, 0xde, 0xfc, 0x40, 0x48, 0x43, 0xb3, - 0x7b, 0x88, 0x1c, 0xbf, 0x61, 0x51, 0xf5, 0xf9, 0xb0, 0x88, 0x26, 0x09, 0x6a, 0x4e, 0x6f, 0x99, - 0x8f, 0x78, 0x44, 0x49, 0xf1, 0x9c, 0xb6, 0xa4, 0xa2, 0x86, 0x3a, 0x0b, 0xd4, 0xdc, 0xa1, 0xc7, - 0xbc, 0xdc, 0x14, 0x9c, 0x7d, 0x59, 0x43, 0xd8, 0x33, 0x35, 0x66, 0x68, 0x35, 0x88, 0xe2, 0x96, - 0xe2, 0x3c, 0x44, 0x45, 0xdd, 0xce, 0xc5, 0xbe, 0xef, 0x84, 0x08, 0x2f, 0x4c, 0xcc, 0x0f, 0xe7, - 0x33, 0xa6, 0xb5, 0x11, 0x26, 0x4c, 0xfe, 0xb1, 0x33, 0x41, 0x00, 0x31, 0xf1, 0x22, 0xaa, 0xbe, - 0x7f, 0xf2, 0xcb, 0xe5, 0x63, 0xe5, 0x1a, 0x9c, 0xaf, 0xe2, 0x01, 0x4f, 0x12, 0x19, 0x1a, 0x30, - 0xd0, 0x14, 0x2a, 0x07, 0x63, 0x51, 0xac, 0x26, 0x00, 0xfc, 0x4c, 0x0e, 0x45, 0xc0, 0xf3, 0x59, - 0xb1, 0xd8, 0x51, 0xb3, 0x1d, 0x78, 0x3f, 0xb5, 0x7f, 0xa2, 0xd5, 0xf2, 0xf4, 0xd9, 0xfc, 0x17, - 0xf6, 0x9a, 0x03, 0xf6, 0xb9, 0x50, 0x05, 0x33, 0x4e, 0x3c, 0x81, 0xad, 0xfe, 0x32, 0xbf, 0x9e, - 0xbf, 0x8a, 0xe1, 0xbe, 0x6b, 0xbe, 0x4e, 0x3c, 0xfc, 0x1e, 0xb1, 0x20, 0xe6, 0xa0, 0x16, 0x78, - 0xb1, 0xbc, 0xa4, 0xbc, 0x5a, 0x2e, 0xe2, 0x62, 0x09, 0x29, 0xee, 0xfb, 0xf8, 0xbd, 0x65, 0x67, - 0x36, 0x7c, 0x11, 0x12, 0xb4, 0x4f, 0xf1, 0xfc, 0xfb, 0x55, 0xeb, 0x5f, 0x21, 0x4d, 0x8a, 0x92, - 0xf8, 0x9e, 0x4f, 0x17, 0x55, 0x92, 0x22, 0x26, 0x9d, 0x39, 0x83, 0x67, 0x64, 0x81, 0x00, 0xf8, - 0x28, 0x0c, 0xa2, 0xf6, 0x1c, 0x7f, 0xfe, 0x63, 0x43, 0xb2, 0xf5, 0xb2, 0xca, 0xf9, 0x65, 0x11, - 0x61, 0xc4, 0x35, 0xc4, 0x3a, 0x39, 0xd8, 0x60, 0x48, 0x63, 0xbb, 0x3c, 0x8b, 0xe4, 0xab, 0x14, - 0x5f, 0x3c, 0xed, 0x44, 0x09, 0x0f, 0x9b, 0x77, 0xe1, 0xc0, 0x1d, 0x2a, 0x03, 0xc7, 0x96, 0x39, - 0x6e, 0x0d, 0xdd, 0xe2, 0x1a, 0xf8, 0x80, 0x50, 0x48, 0x9f, 0xbc, 0x53, 0x17, 0x26, 0x47, 0x2f, - 0x12, 0x0a, 0x8a, 0xe2, 0xb7, 0x12, 0xe1, 0xee, 0x0a, 0xed, 0xa5, 0x5a, 0xc4, 0xeb, 0x10, 0x24, - 0x17, 0x10, 0x7f, 0xcf, 0xf5, 0x16, 0xc5, 0x1b, 0x18, 0x5d, 0x50, 0x0c, 0x80, 0x83, 0x86, 0x21, - 0x88, 0xa3, 0x78, 0xf7, 0x58, 0x9a, 0x2b, 0x1b, 0x93, 0xff, 0x0c, 0x55, 0x8e, 0x08, 0x02, 0x23, - 0x65, 0xc5, 0x3e, 0xec, 0xb1, 0x9e, 0x19, 0xa0, 0x34, 0xde, 0x10, 0xb9, 0x54, 0x71, 0x0d, 0x60, - 0x43, 0xc8, 0xa4, 0x81, 0xc9, 0x94, 0x03, 0x0e, 0x42, 0x9d, 0x9b, 0x85, 0x9d, 0x7f, 0xd9, 0xd4, - 0xa2, 0xef, 0xf8, 0x67, 0xbd, 0xee, 0x7e, 0x4a, 0x57, 0x3e, 0x78, 0x21, 0xcf, 0x6d, 0x72, 0xf8, - 0xfa, 0x77, 0xeb, 0x26, 0x4f, 0x0f, 0x13, 0x16, 0x44, 0x4f, 0xed, 0x02, 0xcb, 0x51, 0x70, 0x44, - 0x55, 0xaf, 0xbe, 0x08, 0xe4, 0xf9, 0xb3, 0xab, 0xa2, 0x31, 0xf2, 0x77, 0x65, 0xe0, 0x9a, 0x5f, - 0x6b, 0x11, 0x2e, 0xdb, 0xf2, 0x70, 0x20, 0x41, 0x11, 0x60, 0x61, 0x62, 0x92, 0x7b, 0x0f, 0x1c, - 0x20, 0x08, 0x41, 0x29, 0x0b, 0x67, 0xb9, 0xb9, 0x6c, 0xf7, 0xbd, 0xb1, 0xc4, 0x06, 0x43, 0x1c, - 0x4f, 0x16, 0xaa, 0xb1, 0xcf, 0x8d, 0xce, 0xc0, 0xeb, 0xe1, 0x80, 0xc8, 0xbd, 0x2a, 0x5b, 0x8a, - 0xf1, 0x22, 0x06, 0xc1, 0x93, 0x52, 0xc4, 0x3e, 0x2b, 0xf8, 0x9d, 0xc8, 0x56, 0x5b, 0x2c, 0x6e, - 0x3d, 0xe1, 0xc0, 0xe1, 0xe3, 0x87, 0x83, 0x88, 0x47, 0x95, 0x64, 0x4e, 0xa9, 0xe6, 0x06, 0x00, - 0xb4, 0xd0, 0xa9, 0x1e, 0x98, 0x7a, 0x91, 0xed, 0xe2, 0x63, 0x60, 0x68, 0x37, 0x73, 0x39, 0x81, - 0x59, 0xaf, 0x4c, 0x28, 0x13, 0x3a, 0x27, 0x0c, 0x71, 0x7c, 0x84, 0x39, 0x8f, 0xf8, 0x3a, 0x98, - 0x2e, 0x22, 0x02, 0x80, 0x54, 0xf1, 0x9d, 0x7a, 0x51, 0x39, 0x0f, 0x3b, 0xf4, 0x20, 0x67, 0xb9, - 0xfa, 0xe2, 0xba, 0x59, 0x77, 0x8b, 0x78, 0x88, 0x2a, 0xcc, 0xbd, 0x3b, 0xc5, 0x6e, 0x20, 0x79, - 0x58, 0x38, 0x07, 0xd2, 0xf8, 0x90, 0xa5, 0x28, 0x81, 0xc9, 0xf1, 0xfe, 0x2b, 0x38, 0x16, 0x0f, - 0xc9, 0x00, 0x68, 0x58, 0xc5, 0x6e, 0x28, 0xde, 0xfc, 0x40, 0x90, 0xa4, 0xe6, 0x02, 0x79, 0xaf, - 0x07, 0xae, 0x3b, 0xe4, 0xb5, 0x0e, 0x39, 0x0b, 0x07, 0xe4, 0xce, 0x21, 0x88, 0x08, 0x8f, 0xbf, - 0x58, 0x9c, 0x10, 0xd4, 0x66, 0x25, 0x85, 0xcf, 0x90, 0xec, 0x58, 0x0e, 0x7b, 0x80, 0x5a, 0x7d, - 0xbf, 0xa7, 0x9a, 0x09, 0xc6, 0x9f, 0xf8, 0x02, 0x00, 0x42, 0x13, 0x31, 0xdb, 0x5c, 0x95, 0xfe, - 0x8c, 0xe8, 0x20, 0xe6, 0x26, 0xaa, 0xe2, 0x65, 0x2b, 0x77, 0xfb, 0x8d, 0x08, 0x39, 0xc6, 0x7e, - 0x4e, 0x12, 0xe5, 0xfd, 0xdf, 0xcc, 0x49, 0x7f, 0xec, 0xa0, 0xee, 0xcf, 0xc1, 0x4d, 0x0d, 0x63, - 0x88, 0x82, 0xc1, 0xcd, 0xeb, 0xbb, 0xe2, 0xb7, 0x7e, 0x22, 0x14, 0x93, 0x0b, 0xf2, 0x60, 0xa6, - 0x29, 0x97, 0x8b, 0x8c, 0x65, 0x2c, 0x23, 0x01, 0x8b, 0x8b, 0xc4, 0x73, 0xc3, 0x08, 0x09, 0x05, - 0x25, 0x9e, 0x99, 0x6c, 0x4b, 0x97, 0x5c, 0xe8, 0xef, 0x05, 0x21, 0x80, 0x59, 0xc5, 0xde, 0x4c, - 0x9b, 0x15, 0xeb, 0x97, 0x04, 0x01, 0x10, 0x55, 0x77, 0xc8, 0x64, 0x21, 0xc8, 0xa9, 0xea, 0xed, - 0xc1, 0xdb, 0x79, 0xe3, 0x02, 0xc8, 0x38, 0x93, 0x50, 0xb9, 0x53, 0xc0, 0xe2, 0x50, 0xc4, 0x88, - 0x1a, 0x65, 0x19, 0x54, 0x4a, 0xf9, 0x6e, 0x43, 0xc3, 0xc3, 0x42, 0x3b, 0x48, 0xf6, 0x9b, 0xd0, - 0x5e, 0x21, 0x96, 0x43, 0xe4, 0x80, 0x01, 0xc0, 0xc1, 0x2f, 0x87, 0x80, 0x0f, 0x03, 0xf0, 0x0d, - 0x43, 0x83, 0x07, 0x53, 0xc0, 0x00, 0xbe, 0x02, 0x67, 0xf7, 0x6e, 0x9e, 0x18, 0x08, 0x82, 0x69, - 0x02, 0xf5, 0x98, 0xa1, 0xf8, 0x6a, 0x5b, 0x25, 0x00, 0x02, 0xea, 0x51, 0x1a, 0xc9, 0x83, 0x08, - 0x09, 0x19, 0x71, 0x46, 0x5c, 0x6a, 0x47, 0x7b, 0x76, 0xa9, 0x0e, 0xa8, 0x8d, 0xbe, 0xdc, 0xf7, - 0x85, 0x8f, 0x82, 0x42, 0xcb, 0xa8, 0x7f, 0x70, 0x61, 0x0d, 0x94, 0x4b, 0xe0, 0xe9, 0xf3, 0xfa, - 0x3b, 0xf2, 0xf4, 0xcb, 0x3f, 0xd5, 0x80, 0x28, 0xe6, 0xde, 0xfe, 0x09, 0x0c, 0x5a, 0x3d, 0xda, - 0xe0, 0xa4, 0x10, 0x18, 0xef, 0x77, 0xc3, 0x01, 0x80, 0x42, 0x47, 0x8a, 0xef, 0xc2, 0x02, 0x02, - 0x55, 0x17, 0xf7, 0x7e, 0x19, 0x36, 0x1b, 0xf4, 0x54, 0x14, 0xec, 0x40, 0x91, 0xa4, 0xc4, 0x3c, - 0x4b, 0xcf, 0xf2, 0xc3, 0x59, 0x98, 0xa2, 0xb8, 0x3b, 0x4a, 0xad, 0x22, 0xb9, 0x00, 0x92, 0xb0, - 0xa4, 0x0f, 0x0f, 0x94, 0x07, 0xab, 0xf1, 0x1b, 0x96, 0xe3, 0x15, 0xd5, 0xc5, 0xde, 0x1e, 0xc0, - 0x17, 0xd2, 0xc7, 0xe9, 0x28, 0xf2, 0x51, 0xfa, 0xfa, 0xf9, 0x79, 0xbf, 0xb6, 0x5d, 0x83, 0xff, - 0x58, 0x3b, 0x7b, 0xac, 0x1e, 0x68, 0x12, 0x55, 0xe9, 0xcd, 0xed, 0xe0, 0xa4, 0x0a, 0x01, 0x49, - 0xc1, 0xc3, 0x83, 0x82, 0xe5, 0xe0, 0xf1, 0x60, 0x28, 0x09, 0x94, 0x66, 0x94, 0x14, 0xac, 0x51, - 0x41, 0xa4, 0xc2, 0x1b, 0x83, 0xcf, 0x8b, 0x2d, 0x42, 0x23, 0x0e, 0x84, 0xe3, 0xc9, 0x68, 0x6a, - 0x7c, 0x31, 0x0a, 0x79, 0x3c, 0xf5, 0x1d, 0x58, 0x78, 0x1c, 0x70, 0xc6, 0x2c, 0x75, 0x73, 0xde, - 0xe1, 0x5e, 0x07, 0xb9, 0x54, 0x36, 0xb5, 0x3f, 0x12, 0x24, 0x15, 0x94, 0xba, 0xa2, 0xd9, 0xab, - 0x62, 0x24, 0x04, 0x2a, 0x2e, 0x32, 0xb3, 0x40, 0x0a, 0xf9, 0xad, 0x8f, 0x71, 0x0f, 0xd6, 0x5d, - 0xc5, 0x9d, 0x66, 0xfe, 0x20, 0x3f, 0x06, 0x2e, 0x9a, 0x37, 0x26, 0xe6, 0x5c, 0x1b, 0x2a, 0x6e, - 0xf5, 0xb8, 0xf4, 0x51, 0x18, 0x41, 0x5f, 0x17, 0x56, 0x3a, 0xaa, 0x9b, 0x1d, 0x0f, 0x09, 0xd9, - 0xa4, 0xcf, 0x15, 0xde, 0x14, 0x50, 0x00, 0x49, 0xb2, 0x41, 0x39, 0x7b, 0xa1, 0x1b, 0x8a, 0xcf, - 0xbf, 0xf8, 0x0d, 0xc1, 0xae, 0x06, 0xa0, 0x00, 0x4d, 0x76, 0x30, 0x52, 0x04, 0x10, 0xa4, 0x41, - 0xe2, 0x98, 0xa6, 0x29, 0x89, 0xe0, 0x93, 0x85, 0x86, 0x78, 0x58, 0x07, 0x9e, 0x0e, 0x7c, 0xce, - 0xab, 0xda, 0x87, 0xe4, 0xa1, 0xf0, 0x96, 0xdb, 0x83, 0x45, 0x19, 0x62, 0x03, 0x01, 0x4c, 0xa4, - 0x70, 0x38, 0xfe, 0xbd, 0x45, 0x5b, 0xe0, 0xb3, 0x35, 0x3c, 0x0d, 0x2e, 0x78, 0xb6, 0x5d, 0x34, - 0x15, 0xb5, 0x76, 0x7f, 0xe2, 0x01, 0x61, 0x01, 0xff, 0x1c, 0x1f, 0xc1, 0xc9, 0xf1, 0xc4, 0xf8, - 0x7b, 0xd6, 0xa3, 0x2a, 0x89, 0x06, 0xe0, 0x3b, 0x10, 0xf0, 0x21, 0xff, 0xb1, 0xcd, 0x40, 0x1e, - 0xea, 0x7f, 0x85, 0x29, 0x70, 0x26, 0x8e, 0x72, 0x82, 0x17, 0xc2, 0xe4, 0x31, 0xba, 0xcf, 0xed, - 0xac, 0xd9, 0x76, 0x1e, 0x24, 0x00, 0x86, 0x84, 0x84, 0x17, 0xdb, 0xce, 0x41, 0xe1, 0xbe, 0xff, - 0x1d, 0xfb, 0x68, 0xd8, 0xae, 0x25, 0xed, 0x9e, 0x8f, 0xc1, 0x56, 0x5a, 0xdf, 0xf1, 0x60, 0x4f, - 0xe3, 0xc0, 0x13, 0x23, 0xe2, 0xbf, 0x54, 0xf2, 0xf8, 0x6e, 0x50, 0x02, 0xa5, 0x91, 0xeb, 0x00, - 0xcf, 0xbe, 0xff, 0xe2, 0xee, 0x11, 0xf9, 0x47, 0xc6, 0xb3, 0xd3, 0x95, 0xa4, 0x86, 0x30, 0x3a, - 0xa3, 0xfe, 0x54, 0x06, 0xc8, 0x2a, 0x0c, 0xf1, 0x4d, 0x72, 0x0e, 0xcd, 0x62, 0x01, 0x58, 0x08, - 0x20, 0x2c, 0x47, 0xbc, 0x9d, 0xe3, 0xe1, 0x88, 0x52, 0x3a, 0xfd, 0x95, 0x4e, 0x85, 0xb2, 0x8a, - 0xc6, 0xba, 0x96, 0x5b, 0x9d, 0x67, 0x3a, 0xa7, 0x38, 0x81, 0x21, 0x4f, 0xbf, 0xfb, 0x97, 0x9c, - 0x38, 0xee, 0x59, 0x58, 0xf1, 0xf2, 0xc0, 0x06, 0x3f, 0x90, 0xe8, 0xf1, 0xde, 0x24, 0x29, 0x8f, - 0xbf, 0x2e, 0x34, 0x7c, 0x1f, 0xe6, 0xe7, 0x0f, 0x76, 0xfa, 0x55, 0xe1, 0xb2, 0xbe, 0xec, 0x7f, - 0x19, 0xec, 0x12, 0x76, 0x43, 0x53, 0x55, 0xd5, 0xab, 0x84, 0xc4, 0xc9, 0xfb, 0xdf, 0xc8, 0x22, - 0xd5, 0x7c, 0x41, 0x15, 0x47, 0x0c, 0xef, 0x9e, 0x55, 0x13, 0x19, 0x02, 0x0e, 0x10, 0x70, 0x52, - 0x00, 0xa8, 0x0f, 0xe2, 0x43, 0x3f, 0x4b, 0xd7, 0xe2, 0x04, 0xda, 0xbb, 0x0a, 0xae, 0x35, 0x4f, - 0x52, 0x12, 0xdd, 0xbb, 0xd4, 0x7f, 0x1e, 0x70, 0xc8, 0x40, 0x7c, 0x94, 0x00, 0xb4, 0x16, 0x00, - 0x1c, 0x93, 0x03, 0x80, 0x11, 0xb2, 0x38, 0x1d, 0xc4, 0xb2, 0xc0, 0x00, 0x84, 0x6a, 0x87, 0x00, - 0x01, 0x0c, 0xc1, 0x88, 0x39, 0x0a, 0x4b, 0x19, 0xee, 0x3b, 0x17, 0x2f, 0x58, 0x18, 0x2b, 0xc0, - 0xf0, 0xd1, 0x28, 0x70, 0x2f, 0x8b, 0x1d, 0xa3, 0x70, 0xe7, 0x09, 0xc5, 0x4f, 0x07, 0x1b, 0x81, - 0x04, 0x0b, 0x23, 0x6a, 0xdb, 0xe2, 0x50, 0x03, 0x8d, 0xf0, 0x6c, 0x87, 0xa6, 0x2d, 0xe2, 0x00, - 0x04, 0x95, 0x00, 0xb4, 0x97, 0x04, 0x65, 0x1d, 0x02, 0x98, 0x67, 0x1d, 0x7e, 0x5a, 0xf6, 0x69, - 0xc0, 0xf5, 0x18, 0x1a, 0x88, 0x55, 0x82, 0x29, 0x0d, 0x29, 0xb9, 0x58, 0x6c, 0xb0, 0x17, 0x73, - 0x78, 0x6e, 0x50, 0x05, 0x3c, 0xb1, 0xe6, 0xb7, 0x90, 0x19, 0x9e, 0x27, 0x75, 0x7c, 0x1d, 0x0a, - 0x3a, 0x57, 0x50, 0x76, 0xcf, 0xe2, 0xfd, 0xad, 0x51, 0xbd, 0x34, 0xce, 0x06, 0xa7, 0x00, 0x3a, - 0x81, 0x14, 0xfa, 0x6b, 0x17, 0xdc, 0x48, 0xff, 0x02, 0x80, 0x31, 0x05, 0x86, 0x0e, 0xb3, 0x52, - 0xa8, 0x25, 0x2c, 0x59, 0x28, 0x01, 0x5a, 0x86, 0x59, 0xb0, 0x86, 0x01, 0x8b, 0x2c, 0x04, 0x4b, - 0x4b, 0x12, 0xc8, 0x4c, 0xf0, 0x5a, 0xb0, 0x76, 0xf8, 0x52, 0x4e, 0x00, 0x59, 0x10, 0xa9, 0x49, - 0x80, 0x02, 0xc8, 0xe0, 0xf7, 0xc1, 0xc0, 0xf1, 0xad, 0x33, 0x11, 0x3f, 0x07, 0x07, 0x0e, 0x3c, - 0x74, 0x59, 0x06, 0xf8, 0x50, 0x6e, 0x7d, 0xf6, 0x24, 0x54, 0x28, 0xa7, 0x63, 0x53, 0xbe, 0x20, - 0x41, 0x2b, 0x5c, 0x49, 0xc8, 0x56, 0xb8, 0x80, 0x52, 0x14, 0x96, 0x18, 0xa6, 0x58, 0x18, 0x58, - 0x0a, 0x8b, 0x9f, 0xc9, 0x38, 0xe1, 0x30, 0xe3, 0x93, 0x7e, 0xad, 0x1d, 0x1c, 0x30, 0x38, 0x09, - 0x19, 0xd2, 0x48, 0x8c, 0x8b, 0x93, 0x66, 0x42, 0xa0, 0xae, 0x54, 0x1b, 0x95, 0xe5, 0xd2, 0xe4, - 0x3c, 0x8a, 0x00, 0xc0, 0xfa, 0x8e, 0x5f, 0xf5, 0x57, 0x7d, 0xe9, 0xe9, 0xbb, 0xb4, 0x9d, 0x36, - 0xdd, 0x3f, 0xf0, 0x47, 0xcb, 0x94, 0xf0, 0xef, 0x2d, 0x6b, 0x11, 0xcc, 0x5e, 0x6f, 0xe4, 0x34, - 0xbf, 0xf0, 0x54, 0x64, 0xdc, 0x66, 0xc6, 0x83, 0x22, 0x57, 0xc7, 0xcb, 0x0f, 0xd9, 0x5c, 0xc5, - 0x83, 0xff, 0xe0, 0xe0, 0x10, 0x85, 0x21, 0x5f, 0x03, 0xe1, 0x93, 0xe3, 0xfc, 0x2a, 0x84, 0x66, - 0xf4, 0x2a, 0x02, 0x4a, 0x60, 0x6b, 0x8d, 0x36, 0x45, 0xc5, 0x8c, 0xd5, 0x07, 0xd9, 0xe1, 0x48, - 0x9d, 0xc9, 0x85, 0xfa, 0x29, 0x30, 0x88, 0x80, 0xa4, 0xb1, 0x44, 0xc3, 0x80, 0xf3, 0xba, 0x43, - 0x1c, 0x99, 0xed, 0x76, 0x1b, 0x8b, 0x2e, 0xed, 0x7b, 0x87, 0x1c, 0x9f, 0xaa, 0xbf, 0x08, 0x42, - 0x3a, 0xc9, 0xea, 0x0f, 0xf0, 0x97, 0x8c, 0x5d, 0x45, 0x6d, 0xd4, 0xc8, 0x62, 0xef, 0x98, 0x30, - 0x04, 0x01, 0x48, 0xd6, 0x12, 0x68, 0xa5, 0xe0, 0xbf, 0xce, 0x06, 0x81, 0xf8, 0xd4, 0x7f, 0xff, - 0xc9, 0x5c, 0x97, 0xbf, 0x15, 0xca, 0xfd, 0x70, 0x7b, 0x97, 0x74, 0xce, 0x59, 0x22, 0x22, 0xc4, - 0x88, 0x0a, 0x41, 0x38, 0x39, 0x14, 0x80, 0x00, 0x23, 0x15, 0x48, 0x0f, 0xca, 0x39, 0x2c, 0x0b, - 0x80, 0x35, 0x55, 0xc8, 0xb5, 0xd7, 0x8c, 0x18, 0x3e, 0x3d, 0xe5, 0xba, 0x42, 0xb3, 0x9c, 0xa6, - 0x5b, 0x7a, 0x3c, 0xe0, 0x49, 0x8d, 0xd3, 0x3d, 0x56, 0x78, 0x50, 0xfb, 0x81, 0x8c, 0xac, 0x06, - 0xd0, 0xa1, 0x27, 0x2c, 0xa6, 0x5c, 0xe0, 0xe0, 0xe8, 0x4d, 0xce, 0xe1, 0x31, 0x1f, 0x46, 0x73, - 0x43, 0x86, 0x85, 0x8f, 0x87, 0x8a, 0x15, 0x02, 0xb5, 0x22, 0xa0, 0x7f, 0xa8, 0xac, 0x46, 0x5d, - 0x6f, 0x25, 0x45, 0x59, 0xff, 0x84, 0x02, 0x21, 0x4b, 0x8c, 0x48, 0x23, 0x96, 0xe2, 0x98, 0x8b, - 0xb8, 0x66, 0xf5, 0x90, 0x4b, 0xbb, 0xb8, 0x37, 0x20, 0x61, 0x78, 0x71, 0x0a, 0x8a, 0x70, 0xf8, - 0xe6, 0xe5, 0xba, 0xdc, 0xdf, 0x27, 0x58, 0x21, 0x8c, 0x9f, 0x05, 0x69, 0x08, 0xcf, 0x90, 0x5f, - 0x8e, 0xf9, 0x9f, 0x2f, 0x59, 0x32, 0xa2, 0xff, 0x12, 0x33, 0xc4, 0x95, 0xc4, 0x39, 0x76, 0xe2, - 0xe6, 0xca, 0x9c, 0xbd, 0xac, 0x22, 0x24, 0x65, 0xdb, 0x4b, 0xc4, 0x4c, 0xdc, 0x56, 0x7d, 0xa9, - 0x72, 0xfc, 0x40, 0x31, 0x08, 0xd6, 0x6f, 0xb6, 0x93, 0x4d, 0x0b, 0x8b, 0xf8, 0x26, 0x38, 0x18, - 0xd8, 0xcf, 0x70, 0x3b, 0x12, 0xec, 0xc2, 0x67, 0x72, 0x15, 0xe4, 0x22, 0xad, 0x7c, 0xb5, 0xd4, - 0x6f, 0x37, 0x77, 0x5d, 0xc3, 0x6b, 0x1a, 0x26, 0x90, 0x75, 0xc2, 0x54, 0xb6, 0xb9, 0x61, 0xef, - 0xbb, 0xf8, 0xa9, 0x31, 0x2e, 0xf7, 0x50, 0x80, 0x29, 0x0a, 0x51, 0x09, 0x07, 0x48, 0xdf, 0x04, - 0xa0, 0x0b, 0x17, 0x00, 0x90, 0x9e, 0xbb, 0xad, 0x6d, 0x71, 0x05, 0xf8, 0x3c, 0x1f, 0x85, 0x47, - 0x23, 0xc0, 0x1f, 0x64, 0xea, 0xd4, 0xe7, 0xc1, 0x01, 0x15, 0x51, 0x80, 0xfe, 0xc6, 0x24, 0x60, - 0x21, 0xa2, 0xd5, 0xad, 0x6b, 0x4f, 0x11, 0x78, 0xa7, 0x97, 0x11, 0xd4, 0xff, 0x88, 0x0a, 0x56, - 0x1c, 0xb0, 0xfc, 0x35, 0xfe, 0x3a, 0xb7, 0x25, 0x6d, 0xf0, 0x2b, 0x2f, 0x11, 0x49, 0x4f, 0x3c, - 0x6a, 0x4a, 0x88, 0x9b, 0xdf, 0xaf, 0xc2, 0x80, 0xe9, 0xc3, 0x22, 0x42, 0x92, 0xcf, 0xd4, 0x9b, - 0x81, 0xc9, 0x61, 0x95, 0xbc, 0x70, 0xd3, 0x28, 0x0c, 0xe6, 0x8d, 0xa3, 0xbf, 0x3d, 0x38, 0x62, - 0x04, 0x05, 0x22, 0xc1, 0x2d, 0x62, 0x71, 0x4c, 0xee, 0x2b, 0x88, 0x78, 0x87, 0x05, 0x62, 0x8d, - 0xc4, 0x8c, 0x0b, 0x75, 0x5a, 0xbf, 0x12, 0x18, 0x0a, 0x15, 0xee, 0xdf, 0x14, 0x65, 0xbc, 0x4d, - 0x8a, 0xdc, 0x56, 0x28, 0xc5, 0x18, 0xa3, 0x14, 0x1b, 0xf0, 0xc8, 0x10, 0x06, 0xc1, 0x82, 0x81, - 0x72, 0x82, 0x70, 0x0a, 0xb5, 0x23, 0x84, 0x31, 0xa9, 0x68, 0x1e, 0x51, 0xc8, 0xfa, 0x44, 0x71, - 0xb1, 0x88, 0x04, 0xb9, 0x66, 0xc4, 0x76, 0xd2, 0x27, 0xf3, 0x85, 0xf3, 0x82, 0xc5, 0xd8, 0x2b, - 0x1a, 0x15, 0x42, 0x32, 0x05, 0x41, 0x95, 0x93, 0x5f, 0x9f, 0x2d, 0xb6, 0x99, 0x7a, 0xbd, 0xf8, - 0x08, 0x80, 0xa1, 0x04, 0x7d, 0xaa, 0x90, 0x2a, 0x0e, 0x06, 0x8d, 0xa6, 0x3b, 0xf8, 0xc7, 0xb2, - 0xff, 0x48, 0x62, 0x66, 0x9e, 0xa6, 0x71, 0x6d, 0x84, 0xaa, 0x97, 0x61, 0xc6, 0x35, 0x5f, 0x99, - 0x91, 0xf8, 0x21, 0x07, 0x00, 0xa0, 0xb8, 0x74, 0x08, 0x5f, 0x03, 0xa1, 0x52, 0x8f, 0x2b, 0xfd, - 0xb9, 0x7c, 0x59, 0x5e, 0xfd, 0xdc, 0x35, 0xcc, 0x65, 0xac, 0xbc, 0xa5, 0x4a, 0x7f, 0x2f, 0x7d, - 0x27, 0x5c, 0xa4, 0xd3, 0x6f, 0xd5, 0xab, 0xba, 0x59, 0xec, 0x90, 0x88, 0x30, 0x20, 0x95, 0x9f, - 0x08, 0x82, 0x80, 0xd0, 0x80, 0x30, 0x14, 0x2f, 0x02, 0x37, 0x00, 0x03, 0x5c, 0x82, 0xde, 0x0e, - 0x2c, 0x1f, 0xff, 0xf1, 0x02, 0x42, 0x96, 0x41, 0xbd, 0x94, 0x71, 0x8a, 0x72, 0xb1, 0x3f, 0x6e, - 0xe7, 0x3c, 0xe1, 0x83, 0x96, 0xf1, 0xd1, 0x02, 0x95, 0x69, 0x44, 0x18, 0xf8, 0xc2, 0xc6, 0xf2, - 0x98, 0xac, 0x48, 0x3c, 0x43, 0x02, 0xc7, 0x30, 0xb7, 0xf1, 0x62, 0x16, 0x0e, 0x78, 0x87, 0x9c, - 0xe6, 0x18, 0x06, 0x01, 0x43, 0x30, 0xaa, 0x30, 0x6a, 0x3b, 0xac, 0xa1, 0xec, 0x51, 0x2a, 0x2e, - 0xb2, 0xd6, 0xea, 0xbf, 0xc6, 0x5b, 0x3f, 0x12, 0x3e, 0xdf, 0xc3, 0x03, 0x63, 0xfb, 0x1a, 0xd3, - 0xb9, 0x20, 0xd0, 0x7f, 0xa9, 0x0f, 0xb8, 0xc6, 0x18, 0x2e, 0x29, 0x1f, 0x37, 0x96, 0x3c, 0xf9, - 0x7b, 0xb1, 0x5e, 0x4d, 0x7f, 0xf0, 0x88, 0x10, 0x02, 0x9a, 0x8f, 0x70, 0x3b, 0x89, 0x46, 0xb2, - 0xe2, 0xd8, 0x2d, 0xbe, 0x7c, 0x0c, 0x5d, 0x54, 0x2f, 0x11, 0x78, 0xaf, 0x33, 0xa3, 0xd3, 0x62, - 0x93, 0x51, 0xf8, 0x90, 0x50, 0x36, 0x3c, 0x74, 0x01, 0xfe, 0xc7, 0xc1, 0x9e, 0x06, 0x95, 0x1b, - 0x07, 0x97, 0x3c, 0x0b, 0x18, 0xca, 0xd9, 0xee, 0x0c, 0xb3, 0xe2, 0x52, 0xa0, 0x81, 0xb7, 0x9d, - 0x2e, 0x0e, 0x89, 0x4b, 0xdd, 0x53, 0x1d, 0xc7, 0x12, 0x1e, 0x12, 0x46, 0x05, 0xe3, 0xf0, 0x37, - 0x3e, 0x86, 0x17, 0x00, 0xd6, 0x35, 0x30, 0xa4, 0x18, 0xe7, 0x8b, 0xff, 0x06, 0x20, 0xe4, 0x28, - 0x61, 0x3d, 0x1f, 0x52, 0xf2, 0xf7, 0xed, 0x45, 0xe2, 0x9c, 0x88, 0xf2, 0x8d, 0xe2, 0x84, 0xf7, - 0x8b, 0x82, 0xf3, 0xd5, 0x17, 0x80, 0x31, 0x2c, 0xc6, 0x1c, 0x50, 0x01, 0xcb, 0x65, 0x66, 0x34, - 0xde, 0xfd, 0xdf, 0xfe, 0x2d, 0xa6, 0x98, 0xd7, 0x0d, 0x2e, 0xc1, 0xbb, 0x7f, 0x04, 0x7c, 0x82, - 0xc4, 0xb9, 0xd7, 0x08, 0x8a, 0x24, 0x3a, 0xa9, 0xa7, 0x15, 0xb4, 0xbe, 0x10, 0xf3, 0x64, 0x98, - 0x94, 0x24, 0xad, 0xc4, 0xc4, 0x86, 0x42, 0x90, 0xc7, 0x80, 0xfa, 0x22, 0x96, 0xf1, 0x52, 0x8e, - 0x0d, 0x67, 0x65, 0x8e, 0xc5, 0x18, 0xba, 0x11, 0x5a, 0xdd, 0x88, 0x1e, 0x08, 0x98, 0x5d, 0x9e, - 0x7c, 0x5c, 0x48, 0x44, 0x29, 0x2d, 0x9f, 0x1f, 0xa7, 0x15, 0x8c, 0xe7, 0x89, 0x48, 0x22, 0xb2, - 0xdb, 0xc8, 0x26, 0x4b, 0x4a, 0xb5, 0xaa, 0x40, 0x70, 0xc8, 0x39, 0x09, 0x15, 0xed, 0x62, 0x92, - 0xab, 0xf0, 0x42, 0x36, 0xb5, 0xb6, 0x2c, 0xc9, 0x06, 0xe1, 0xd3, 0x4a, 0x6e, 0x86, 0x27, 0xfc, - 0xf0, 0xf5, 0x9f, 0xff, 0x85, 0x7d, 0x88, 0x10, 0x36, 0x35, 0x22, 0x4d, 0x12, 0x95, 0x7e, 0xc1, - 0xe7, 0x8f, 0xe1, 0xc5, 0x03, 0x81, 0x8b, 0x44, 0x61, 0xc8, 0xe0, 0x1b, 0x87, 0x58, 0x2c, 0xcb, - 0xcd, 0x03, 0xe9, 0x29, 0x29, 0xa8, 0xa9, 0xa8, 0x35, 0x8b, 0xcf, 0x1e, 0xc2, 0xf4, 0xec, 0xa2, - 0x92, 0x31, 0x00, 0x41, 0x0a, 0x10, 0xe1, 0xe2, 0x83, 0xa8, 0xf8, 0x08, 0x41, 0xd6, 0xe1, 0xf5, - 0x18, 0xb7, 0x92, 0x48, 0xb5, 0xf1, 0x3f, 0x2b, 0x6b, 0x39, 0xc2, 0x9b, 0x0b, 0xf2, 0x6e, 0x51, - 0x02, 0x78, 0xf1, 0x23, 0x25, 0x60, 0xbc, 0x1f, 0x09, 0x79, 0x22, 0x43, 0xe4, 0x43, 0xb0, 0x3a, - 0xe8, 0x87, 0xae, 0x28, 0xdd, 0xcb, 0x6e, 0xf8, 0x88, 0x2a, 0x21, 0x40, 0x02, 0x13, 0xc5, 0x00, - 0x84, 0xcb, 0xf1, 0xeb, 0xe9, 0x0a, 0x38, 0x59, 0xa6, 0xf2, 0xf0, 0x80, 0x52, 0x02, 0x9e, 0x99, - 0x33, 0xa7, 0xca, 0x23, 0x76, 0x56, 0x97, 0xb7, 0x70, 0xa3, 0x83, 0xdc, 0x2d, 0xd9, 0xcb, 0xc4, - 0x02, 0xc2, 0xe2, 0xdb, 0x8a, 0x3c, 0x7b, 0xca, 0xa9, 0xbe, 0x3f, 0x7d, 0xc4, 0x04, 0x06, 0xc4, - 0x38, 0x15, 0x58, 0x8e, 0xaa, 0x53, 0x29, 0x6b, 0x69, 0x84, 0x77, 0xbd, 0xcb, 0x62, 0x1c, 0x73, - 0xc7, 0x06, 0xa9, 0x26, 0xa5, 0xfe, 0x24, 0x20, 0x36, 0x21, 0xc1, 0x59, 0x6d, 0xdc, 0xf0, 0x85, - 0x15, 0x6e, 0x37, 0x0b, 0x65, 0x8d, 0x2c, 0x57, 0xea, 0x44, 0xdf, 0xf8, 0x60, 0x6c, 0xf8, 0xf2, - 0xa2, 0x8d, 0xb1, 0x0f, 0xd2, 0x24, 0x39, 0xa4, 0xcd, 0x53, 0x64, 0x8c, 0xfb, 0xf8, 0x60, 0x10, - 0x0d, 0x8a, 0xe6, 0xc1, 0x71, 0x21, 0x62, 0x68, 0x21, 0x27, 0x14, 0x01, 0x27, 0x85, 0x30, 0x46, - 0xe0, 0x58, 0x6d, 0xc8, 0x70, 0x9c, 0x30, 0x6c, 0x48, 0x55, 0x29, 0x68, 0x16, 0x10, 0xc0, 0x5d, - 0x91, 0x52, 0xc7, 0xa5, 0x9f, 0x33, 0xfc, 0x1c, 0x05, 0x38, 0xc7, 0x21, 0x95, 0x41, 0x78, 0x1b, - 0xbe, 0x54, 0x8f, 0xc0, 0xe2, 0xe1, 0x0d, 0x50, 0x53, 0x8d, 0xc8, 0x01, 0x90, 0x6d, 0x17, 0x07, - 0xa4, 0xaf, 0x00, 0xf6, 0x27, 0x95, 0x10, 0x56, 0x22, 0x70, 0x15, 0xa8, 0xea, 0x01, 0x0e, 0x61, - 0xbc, 0x01, 0x65, 0xce, 0x10, 0xf6, 0x57, 0xd7, 0x9f, 0x47, 0x6d, 0xa8, 0xb0, 0x30, 0x73, 0xac, - 0xbf, 0xc1, 0xf9, 0xa1, 0xac, 0x00, 0x3e, 0x8a, 0x20, 0x05, 0x70, 0x07, 0x63, 0x21, 0xe9, 0x7d, - 0xde, 0x1d, 0x31, 0x71, 0x5f, 0xdb, 0x06, 0xb7, 0x7c, 0x2c, 0xce, 0x00, 0x36, 0x5c, 0x3b, 0xa2, - 0x17, 0x7f, 0x93, 0x96, 0x17, 0x17, 0x46, 0x8c, 0x6f, 0x09, 0xbb, 0xbe, 0x48, 0xe5, 0xac, 0x77, - 0x21, 0x2f, 0x75, 0xd9, 0x5e, 0xf1, 0xbd, 0x9c, 0x7f, 0x14, 0xe1, 0x49, 0xc4, 0x8a, 0xaa, 0xad, - 0x69, 0x79, 0x48, 0xab, 0x92, 0x11, 0x82, 0xaa, 0xbf, 0x8a, 0x12, 0x7b, 0xea, 0x7a, 0x11, 0xe4, - 0x05, 0x0a, 0xa1, 0x46, 0xa1, 0x40, 0xa5, 0x39, 0x78, 0x64, 0x10, 0x82, 0x1b, 0xbc, 0xeb, 0x5c, - 0x32, 0x19, 0x1a, 0x55, 0xb9, 0xc6, 0xde, 0xfe, 0x5e, 0x20, 0x01, 0xed, 0xe7, 0x0f, 0x36, 0xf5, - 0x15, 0x9c, 0x3c, 0x0f, 0xce, 0xe5, 0x9a, 0x2b, 0x7e, 0xb9, 0x14, 0x62, 0x04, 0xab, 0x8f, 0x04, - 0x5d, 0xbf, 0x4e, 0x94, 0x20, 0x0e, 0x46, 0xc5, 0x67, 0xc1, 0x0f, 0x5b, 0x9d, 0xaa, 0xad, 0x29, - 0x71, 0x73, 0x45, 0x75, 0xd2, 0x20, 0x60, 0xc3, 0x1d, 0x85, 0x30, 0x08, 0xa9, 0x84, 0x11, 0x80, - 0x4f, 0x06, 0x0f, 0xe6, 0xd1, 0xbd, 0x6a, 0x5e, 0xb5, 0xc3, 0x6e, 0x00, 0x25, 0xc5, 0x25, 0xc5, - 0x39, 0x59, 0x19, 0x6d, 0xf4, 0x4d, 0xef, 0xa2, 0x06, 0xa3, 0xf2, 0xc6, 0xea, 0xa3, 0xf9, 0x6a, - 0x98, 0x14, 0xbd, 0x8a, 0x58, 0xc0, 0x15, 0x87, 0x51, 0xff, 0x0c, 0xe0, 0x02, 0xba, 0x64, 0x0e, - 0x16, 0x9c, 0xa1, 0x2c, 0xd9, 0x7f, 0x21, 0x50, 0x7a, 0x7b, 0x45, 0x7e, 0x1d, 0xf6, 0xdb, 0xa4, - 0x85, 0xef, 0x20, 0xb4, 0xc4, 0x06, 0x06, 0x59, 0xff, 0xbb, 0x88, 0x1f, 0x52, 0xe5, 0x6d, 0x3f, - 0x12, 0x6c, 0x38, 0x40, 0x65, 0xe5, 0x83, 0x10, 0xd3, 0x14, 0x62, 0xbc, 0x0f, 0x62, 0x53, 0xe5, - 0x83, 0xdc, 0x17, 0x0b, 0x37, 0xc9, 0x4f, 0x38, 0x03, 0x97, 0x05, 0x03, 0x05, 0xd6, 0xcd, 0x54, - 0xb9, 0xd5, 0x64, 0x2f, 0x6f, 0x84, 0x01, 0x00, 0xf1, 0x09, 0x08, 0xe5, 0x8c, 0x3f, 0x95, 0x08, - 0x50, 0xb6, 0xe5, 0xab, 0x78, 0x64, 0x14, 0x8c, 0x22, 0x41, 0x57, 0x2f, 0x75, 0xf8, 0x24, 0x39, - 0x07, 0x73, 0x52, 0x45, 0x4a, 0x65, 0x1e, 0x1f, 0x8d, 0xfc, 0x71, 0x4b, 0x71, 0xbf, 0x06, 0x54, - 0xb1, 0x70, 0xe6, 0x02, 0x28, 0x0c, 0xb3, 0xbd, 0xbf, 0x75, 0x9f, 0x7a, 0xcb, 0x5f, 0xb6, 0x39, - 0xed, 0xc6, 0x87, 0x65, 0x01, 0xbe, 0xe2, 0x7b, 0xe9, 0xc3, 0x8a, 0x00, 0x3b, 0x46, 0x38, 0x73, - 0x0b, 0x5e, 0x87, 0x94, 0xe7, 0xb2, 0xa5, 0xbd, 0xe9, 0x00, 0x05, 0x70, 0x86, 0x16, 0x17, 0x0d, - 0xb3, 0xfb, 0xac, 0xfb, 0xcf, 0xa2, 0x5d, 0x2a, 0x7a, 0x62, 0x7b, 0xfc, 0x30, 0x36, 0x8b, 0x88, - 0x4c, 0x51, 0x0b, 0xe8, 0x25, 0xda, 0xc2, 0xea, 0xb1, 0x4a, 0xf3, 0xc0, 0x01, 0xe3, 0xd9, 0x89, - 0x60, 0x77, 0x6a, 0xf8, 0x58, 0xe8, 0x6a, 0x12, 0x64, 0x59, 0x06, 0x83, 0x3a, 0xb4, 0xde, 0xfc, - 0x6f, 0x29, 0x57, 0x52, 0xf1, 0x5a, 0xb5, 0xd5, 0x30, 0x8f, 0x56, 0x7c, 0xc6, 0x7b, 0xd4, 0x44, - 0x95, 0x4a, 0x0f, 0xab, 0xbf, 0x13, 0x10, 0x57, 0xc9, 0xfc, 0xf8, 0xfc, 0x20, 0x0b, 0xe5, 0xe6, - 0x60, 0x2b, 0x59, 0x06, 0xaf, 0x26, 0xe1, 0x66, 0xec, 0xaf, 0xc7, 0x50, 0x7f, 0x04, 0x70, 0x5e, - 0x5d, 0x82, 0x33, 0x20, 0x02, 0x4a, 0x49, 0x30, 0x3c, 0x48, 0xc2, 0x30, 0x7c, 0xf0, 0x75, 0x7f, - 0xac, 0xf0, 0xf4, 0xea, 0xd7, 0xbe, 0x26, 0x32, 0x79, 0xba, 0xa5, 0x87, 0x3b, 0x1a, 0xed, 0x23, - 0x2a, 0xb2, 0xd8, 0x64, 0x05, 0x68, 0x40, 0xe1, 0xc3, 0x40, 0xef, 0xad, 0x5c, 0x14, 0x0c, 0x38, - 0x1d, 0xc3, 0x52, 0x77, 0xd6, 0xda, 0x16, 0xdf, 0x78, 0xc9, 0xd5, 0x16, 0xeb, 0xa6, 0xd3, 0x23, - 0x7e, 0x18, 0x7d, 0x58, 0x8d, 0x0e, 0x20, 0x92, 0xd5, 0x1f, 0x89, 0x84, 0xf6, 0xfc, 0xdf, 0xc4, - 0x08, 0x2e, 0x6c, 0xf8, 0x60, 0x7d, 0xba, 0xdc, 0x5f, 0x06, 0x08, 0xa9, 0x2d, 0x6a, 0x56, 0x14, - 0x7b, 0xf8, 0x80, 0xc8, 0x78, 0x85, 0x2b, 0x22, 0x9a, 0xbe, 0xd9, 0x9d, 0x88, 0x76, 0x7e, 0xb2, - 0xa7, 0xda, 0xff, 0x84, 0x61, 0x48, 0x9c, 0x9c, 0xc2, 0x6e, 0x5f, 0x61, 0x1e, 0x4c, 0x1c, 0x47, - 0x9f, 0x82, 0x11, 0x09, 0xc9, 0x80, 0x90, 0x66, 0x49, 0x2d, 0x42, 0x80, 0x15, 0x70, 0x8e, 0xdc, - 0x3c, 0xe5, 0x26, 0xd2, 0x19, 0xa4, 0xe7, 0x02, 0xc1, 0x6c, 0xb0, 0x78, 0x90, 0x80, 0x2a, 0x2a, - 0x27, 0x1d, 0x3f, 0xbb, 0xde, 0xdd, 0xeb, 0xc3, 0x23, 0xe2, 0x1e, 0x9c, 0x65, 0xbb, 0xeb, 0x57, - 0x13, 0xe7, 0xef, 0x8a, 0x55, 0xe2, 0x42, 0x01, 0x02, 0x08, 0x3e, 0x4b, 0x00, 0xc4, 0x79, 0xc1, - 0xc2, 0xf3, 0xc3, 0xcb, 0x0c, 0xd0, 0xa9, 0x53, 0x8f, 0xc2, 0x22, 0x02, 0x35, 0x17, 0x26, 0x33, - 0xb7, 0x2f, 0x1e, 0x50, 0x2a, 0xe0, 0xb0, 0x3c, 0x00, 0xcf, 0x31, 0x43, 0xf1, 0x9c, 0x98, 0xb7, - 0x2f, 0x3d, 0xe7, 0x81, 0xc3, 0xf4, 0x3b, 0x87, 0xd9, 0x22, 0x3e, 0xbd, 0xbf, 0xbd, 0x21, 0x7e, - 0x30, 0x5b, 0xd7, 0xab, 0xbc, 0xdd, 0x65, 0xb8, 0xdc, 0x38, 0x16, 0x0b, 0x1e, 0x44, 0x47, 0xf0, - 0x1f, 0x10, 0x14, 0x10, 0xb2, 0x44, 0xd9, 0xa4, 0x94, 0x8e, 0x16, 0xcb, 0x34, 0x47, 0xea, 0xaa, - 0x69, 0x8f, 0x04, 0x05, 0x86, 0xc5, 0x6b, 0xf8, 0x81, 0x20, 0xa6, 0x5e, 0x1d, 0x53, 0x01, 0xd5, - 0x94, 0xb5, 0x55, 0x10, 0x70, 0x5e, 0x4a, 0x01, 0xfb, 0x5b, 0xa0, 0x15, 0xa9, 0x42, 0x3c, 0xc7, - 0x7b, 0xfc, 0x9b, 0xdf, 0xcc, 0x6d, 0x55, 0xf1, 0x5a, 0xd6, 0xb6, 0xdf, 0x08, 0x5d, 0xef, 0x7b, - 0xee, 0xeb, 0xb2, 0x6a, 0xa1, 0x2e, 0x2a, 0x28, 0xc4, 0xbc, 0x51, 0x9e, 0xf1, 0x5b, 0xfb, 0x57, - 0x88, 0x84, 0x4f, 0x15, 0xa6, 0x2b, 0x73, 0xff, 0x15, 0xc4, 0x3f, 0x12, 0x10, 0x08, 0xe2, 0xf1, - 0x27, 0xbd, 0xfe, 0xa7, 0xf2, 0xb0, 0xcb, 0x80, 0x17, 0x9f, 0xac, 0x10, 0xa8, 0xda, 0x43, 0x77, - 0xff, 0xf4, 0xf6, 0x58, 0xdc, 0x1b, 0x7d, 0x72, 0xfe, 0xfe, 0x4e, 0x11, 0x8e, 0x22, 0x6b, 0x8c, - 0x4d, 0x96, 0x62, 0xe9, 0x13, 0x05, 0xd4, 0x49, 0xc6, 0x7c, 0x4c, 0x29, 0x2f, 0x2c, 0xcb, 0xc4, - 0x70, 0xbd, 0xe5, 0x35, 0x9a, 0xdd, 0xec, 0xf1, 0x23, 0x2d, 0xe5, 0xbc, 0x57, 0x77, 0x76, 0x9c, - 0x53, 0x1a, 0xaa, 0x2b, 0xf8, 0x98, 0xf3, 0xb8, 0xad, 0xc5, 0x69, 0x17, 0x05, 0x67, 0x8c, 0x1f, - 0xae, 0x26, 0x32, 0x58, 0x4b, 0x76, 0xf5, 0x55, 0x17, 0x17, 0xc5, 0xc5, 0xe1, 0xb6, 0x60, 0x24, - 0x77, 0x1b, 0x9b, 0x99, 0x17, 0xb1, 0x09, 0xec, 0x22, 0x2c, 0x5b, 0x08, 0x48, 0x9e, 0xc2, 0x23, - 0xd6, 0x21, 0x22, 0x1f, 0x47, 0x07, 0x55, 0x92, 0x11, 0x36, 0x3c, 0x2f, 0xcd, 0xcd, 0xd4, 0x9c, - 0xbb, 0xdc, 0x67, 0x27, 0x55, 0x3f, 0x11, 0x93, 0xd6, 0x6d, 0xfc, 0x61, 0xc9, 0x85, 0x5b, 0x1d, - 0x26, 0x84, 0xb0, 0x26, 0x14, 0xba, 0x6d, 0x9a, 0x83, 0x58, 0x26, 0xa9, 0xdc, 0x67, 0xc1, 0x00, - 0x30, 0x18, 0x48, 0x84, 0x73, 0x51, 0x43, 0x17, 0x37, 0x50, 0xbd, 0x4b, 0x65, 0xca, 0xdf, 0x87, - 0x39, 0x0c, 0x60, 0x0b, 0xb3, 0x48, 0x37, 0xb7, 0x11, 0xeb, 0xfd, 0xfb, 0xef, 0xe6, 0xfb, 0x6d, - 0x8f, 0xbf, 0xf2, 0xe8, 0x2c, 0x03, 0xf9, 0xf0, 0xe3, 0x80, 0x01, 0xba, 0xa2, 0xc2, 0x5e, 0x47, - 0xbf, 0x45, 0xdd, 0x45, 0xc4, 0x0f, 0x06, 0x37, 0x0e, 0xfd, 0xb6, 0xe2, 0x11, 0x4a, 0x4a, 0xa4, - 0x95, 0xa3, 0x21, 0x73, 0x20, 0xec, 0xfd, 0x3a, 0xfd, 0xb7, 0x87, 0x30, 0x07, 0x71, 0x55, 0x4f, - 0x28, 0x26, 0xc9, 0xff, 0x6d, 0x6d, 0xac, 0x67, 0x1d, 0x14, 0x58, 0xf7, 0x1c, 0x75, 0xb6, 0xb1, - 0x47, 0x56, 0x8a, 0x80, 0xc1, 0x96, 0x00, 0xb4, 0x48, 0xd7, 0xec, 0xa8, 0x37, 0x8f, 0xfe, 0x47, - 0xe9, 0xdb, 0xe2, 0x44, 0x85, 0x37, 0x1d, 0xa8, 0x27, 0x45, 0x57, 0x50, 0xb0, 0xde, 0xbf, 0xd9, - 0x03, 0xec, 0x02, 0xf8, 0xd4, 0xb2, 0x07, 0x89, 0x54, 0x2a, 0xca, 0x00, 0x1e, 0xa6, 0x0a, 0x4b, - 0xd6, 0xa6, 0x23, 0xff, 0xfd, 0xab, 0x7b, 0x34, 0xd5, 0xd3, 0x4c, 0x3f, 0x6a, 0x4c, 0x39, 0xa8, - 0x55, 0xc5, 0x8e, 0x9f, 0xc4, 0x47, 0x11, 0x0d, 0x8c, 0x2c, 0xb5, 0x8d, 0xcf, 0xe4, 0x19, 0xe0, - 0x79, 0xde, 0x14, 0xec, 0xeb, 0xab, 0xec, 0x8e, 0xbe, 0x27, 0x36, 0x23, 0xe6, 0x2e, 0xee, 0x10, - 0xe4, 0x14, 0x29, 0xc8, 0xd2, 0x96, 0x70, 0xeb, 0x28, 0x00, 0x23, 0x34, 0x68, 0xc0, 0x1a, 0x3a, - 0x4a, 0x81, 0x79, 0x1b, 0x73, 0x7e, 0xd8, 0x2b, 0xf1, 0xf0, 0x7e, 0x68, 0x60, 0xdf, 0x0e, 0x04, - 0x3d, 0xa7, 0x50, 0x66, 0x66, 0xa9, 0x8c, 0xe9, 0xa7, 0xf8, 0x64, 0x40, 0x50, 0x82, 0x5c, 0x78, - 0xeb, 0xb0, 0xa4, 0xc5, 0x41, 0xcf, 0xc4, 0x0e, 0x4b, 0x06, 0x07, 0x7a, 0x8e, 0xd9, 0xe3, 0xc9, - 0x45, 0x0e, 0xb8, 0x91, 0x03, 0x63, 0x71, 0x50, 0x53, 0x7a, 0x49, 0xeb, 0xc9, 0x61, 0xa4, 0xf8, - 0x94, 0x2a, 0x28, 0x19, 0xe0, 0x1a, 0x07, 0xc4, 0xa7, 0x70, 0x78, 0x5c, 0xa2, 0x94, 0x66, 0x96, - 0xb8, 0xca, 0x23, 0x6b, 0xdd, 0x5d, 0x71, 0x01, 0x00, 0x58, 0x5d, 0xb1, 0x5e, 0x13, 0xc5, 0x62, - 0x12, 0x0b, 0xdb, 0x66, 0x4e, 0x10, 0x12, 0x30, 0xc3, 0x8a, 0xfc, 0x2c, 0x38, 0xf7, 0xcb, 0x7e, - 0x58, 0xa6, 0x03, 0xe7, 0xac, 0x13, 0x60, 0xb1, 0x69, 0x83, 0xce, 0xc1, 0x4a, 0x58, 0x7d, 0x8e, - 0x10, 0x0a, 0x17, 0x43, 0x54, 0x17, 0xd5, 0xc9, 0x66, 0x59, 0x85, 0x0a, 0x93, 0x85, 0x65, 0x3d, - 0x4b, 0x31, 0x69, 0x70, 0x56, 0xaf, 0x1f, 0x07, 0x13, 0x05, 0x33, 0xbf, 0x3b, 0xd4, 0x5f, 0xc9, - 0x3b, 0xa2, 0x1d, 0x95, 0x25, 0x09, 0x76, 0x7d, 0x57, 0x13, 0x9f, 0x90, 0x97, 0xbf, 0xbe, 0xef, - 0xe5, 0x17, 0x59, 0x31, 0xf2, 0x5d, 0xf0, 0x94, 0x30, 0x24, 0x12, 0x8a, 0x3e, 0x5e, 0x2f, 0x35, - 0x8c, 0x83, 0xf0, 0xde, 0x7b, 0xaf, 0xf0, 0x53, 0x67, 0xa3, 0x83, 0x52, 0x80, 0xfa, 0x1d, 0xe3, - 0xbf, 0x92, 0x33, 0xb7, 0x63, 0x88, 0x85, 0x0e, 0xd0, 0x69, 0x51, 0x49, 0x2b, 0x22, 0x0d, 0x2d, - 0xdc, 0xdd, 0x9d, 0x7d, 0x46, 0xb0, 0xec, 0x83, 0x89, 0x12, 0x09, 0x44, 0x1e, 0x78, 0xe1, 0x9e, - 0x92, 0x8c, 0x1b, 0x02, 0xba, 0x5b, 0xd0, 0xff, 0x24, 0x5c, 0x48, 0x53, 0x50, 0x59, 0x84, 0x29, - 0x47, 0x33, 0xd4, 0xbd, 0x0c, 0xd0, 0x66, 0xd1, 0x56, 0xdb, 0x21, 0x77, 0xe2, 0x21, 0xf2, 0xb1, - 0x9a, 0x3b, 0x63, 0x7a, 0x6d, 0xdc, 0x9e, 0xcd, 0x64, 0x85, 0x7c, 0x29, 0xdd, 0xef, 0x15, 0xd1, - 0xde, 0x10, 0xe4, 0x33, 0xdd, 0x2f, 0x29, 0xdd, 0xf2, 0x61, 0x12, 0xf7, 0x7f, 0xf1, 0x30, 0xde, - 0x20, 0xa2, 0x2b, 0x50, 0x08, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x45, 0x22, 0xb1, 0x27, - 0xca, 0x67, 0xbd, 0x72, 0x56, 0xb1, 0x5c, 0xc7, 0x4d, 0x3f, 0xc1, 0x5f, 0x51, 0x78, 0x93, 0xf1, - 0x07, 0xc5, 0x3b, 0x41, 0x3f, 0x21, 0x16, 0xb1, 0x5c, 0xc7, 0xba, 0x65, 0xf8, 0x46, 0x30, 0xce, - 0xbe, 0xa9, 0xc9, 0xe9, 0xea, 0xab, 0xe3, 0x3b, 0xb1, 0xad, 0x68, 0x6d, 0xa2, 0x0b, 0xee, 0x0f, - 0x53, 0x77, 0xe2, 0x61, 0x18, 0xbf, 0xe3, 0xab, 0x7b, 0x7e, 0x24, 0x51, 0x6e, 0xe5, 0xc8, 0xa3, - 0x71, 0x5f, 0x84, 0x0a, 0xda, 0xf0, 0xca, 0x3e, 0xb4, 0x95, 0x70, 0x5f, 0xcc, 0x31, 0x57, 0x51, - 0x32, 0x5a, 0xeb, 0xc4, 0x0c, 0x3e, 0x7f, 0x7a, 0xa9, 0xd9, 0xb1, 0xeb, 0x5f, 0xf9, 0x49, 0x7b, - 0xe2, 0x75, 0x13, 0xf1, 0x00, 0xa3, 0x77, 0x69, 0xec, 0xfd, 0xc4, 0xe0, 0x93, 0x8b, 0xde, 0xef, - 0x77, 0x2f, 0x29, 0x6f, 0x72, 0x44, 0xd9, 0xef, 0x7f, 0x04, 0xe2, 0x8a, 0xf2, 0x72, 0x42, 0x55, - 0x55, 0x7b, 0xc4, 0x0b, 0x2e, 0x30, 0x63, 0xcb, 0xeb, 0x88, 0xa6, 0xfd, 0xdd, 0xc9, 0x88, 0x08, - 0x91, 0xa6, 0xb5, 0xad, 0xdf, 0xc4, 0xf8, 0x91, 0x1c, 0x4f, 0x89, 0xc1, 0x1f, 0x04, 0x7d, 0xdf, - 0xa7, 0x88, 0x90, 0x4c, 0x51, 0xab, 0x5c, 0x40, 0x2d, 0x26, 0xab, 0x75, 0x5e, 0xf8, 0x48, 0xab, - 0x65, 0x55, 0xfc, 0x20, 0x4d, 0xdd, 0xf7, 0x7b, 0xfc, 0x10, 0xe8, 0xeb, 0xd5, 0x13, 0xbf, 0x5c, - 0x10, 0x9b, 0x77, 0x7f, 0x94, 0xab, 0x18, 0x12, 0x39, 0xa1, 0x80, 0x89, 0x69, 0xca, 0xc4, 0x12, - 0xf0, 0x84, 0x5e, 0x2e, 0xb5, 0xad, 0x5b, 0xf9, 0x8f, 0x22, 0x5a, 0xf8, 0x2c, 0xdd, 0xdd, 0xb6, - 0x1b, 0xab, 0xbb, 0xde, 0xb9, 0x84, 0x56, 0xb8, 0x88, 0xe9, 0xba, 0xb6, 0xa2, 0xea, 0x4c, 0x94, - 0xf5, 0xf1, 0x33, 0x75, 0x74, 0x25, 0x33, 0x31, 0xe2, 0x66, 0xe2, 0x78, 0xda, 0xe8, 0xaf, 0x3c, - 0x20, 0x11, 0x31, 0xe3, 0xa9, 0x8f, 0xe0, 0xa4, 0x50, 0x3c, 0xf8, 0x3b, 0xf1, 0x0c, 0x1f, 0x05, - 0x27, 0xa7, 0x25, 0xbc, 0x6c, 0xd9, 0xb7, 0x08, 0x04, 0x61, 0x8e, 0x83, 0x7d, 0x19, 0x11, 0x1c, - 0x16, 0x11, 0xc5, 0x92, 0x9f, 0x9a, 0xcd, 0x92, 0x7e, 0x22, 0x6e, 0xab, 0x88, 0xbb, 0x19, 0xff, - 0xe0, 0xaf, 0x8a, 0xee, 0xee, 0xfb, 0x9d, 0x87, 0xf1, 0x21, 0x12, 0x63, 0x2b, 0x74, 0xdc, 0xf8, - 0xfc, 0xbf, 0xef, 0x99, 0x13, 0x4f, 0xd7, 0x42, 0xfa, 0x68, 0x90, 0x81, 0x86, 0x56, 0x4f, 0x89, - 0x10, 0x20, 0xb5, 0xeb, 0x05, 0xb2, 0xcb, 0x98, 0xe0, 0x84, 0xb1, 0xf6, 0xdc, 0xf1, 0xf5, 0x12, - 0x08, 0x01, 0x41, 0x75, 0x5d, 0x21, 0x0f, 0x63, 0xe1, 0x83, 0x60, 0x70, 0x30, 0x15, 0x46, 0x1c, - 0x00, 0x63, 0x36, 0x1e, 0x41, 0xe7, 0xaa, 0x85, 0x40, 0xed, 0x7e, 0x2a, 0xd4, 0x10, 0xf1, 0x87, - 0xab, 0x62, 0xeb, 0x5e, 0x9b, 0x8d, 0x2c, 0xb7, 0x4b, 0xf8, 0x92, 0x91, 0x6b, 0x5c, 0x77, 0x37, - 0x4c, 0x56, 0x58, 0xcf, 0x96, 0x1c, 0x70, 0x2d, 0xfc, 0x45, 0x90, 0x48, 0xe3, 0xf2, 0xf3, 0xe1, - 0x1e, 0x0a, 0x04, 0xa1, 0xaf, 0xf4, 0x4a, 0x54, 0xa1, 0x18, 0x6c, 0x9c, 0xb9, 0x1c, 0xfe, 0x37, - 0xd3, 0xc2, 0x20, 0x90, 0x89, 0x3f, 0xdf, 0x26, 0x21, 0xfe, 0x26, 0x0b, 0xa2, 0xa0, 0xf5, 0x8a, - 0x30, 0xf8, 0xe5, 0xe2, 0x5c, 0x2f, 0xb2, 0x01, 0xc3, 0x10, 0x20, 0x16, 0x65, 0xc1, 0x59, 0x60, - 0xe5, 0xe0, 0xda, 0xc3, 0xb9, 0xee, 0x3f, 0x27, 0xc9, 0x5e, 0x24, 0x30, 0x14, 0xc8, 0xba, 0xd6, - 0xa5, 0x52, 0xf5, 0x17, 0x51, 0x72, 0x30, 0xa4, 0x15, 0x96, 0xdb, 0xb8, 0x40, 0x14, 0x05, 0x32, - 0x66, 0x4a, 0x5c, 0x08, 0xe9, 0xa9, 0x99, 0x96, 0xa9, 0xe3, 0x22, 0x6f, 0x8d, 0x63, 0x57, 0x23, - 0x88, 0x2b, 0x1a, 0xdd, 0x1f, 0xfe, 0x49, 0xcf, 0x71, 0xd8, 0xf8, 0x67, 0x94, 0xaf, 0xb8, 0x9e, - 0x13, 0xb9, 0xa8, 0xbd, 0x6b, 0xe4, 0x8d, 0x2c, 0xdb, 0x6b, 0xbb, 0xbf, 0xe1, 0x2b, 0x5a, 0xae, - 0xa4, 0xe2, 0xa9, 0x96, 0x29, 0xb9, 0x86, 0xdc, 0xc9, 0xd9, 0xfc, 0xb7, 0xbf, 0x11, 0x11, 0xbd, - 0xc9, 0x82, 0x9d, 0xa5, 0x89, 0x12, 0x0b, 0x08, 0xef, 0x7d, 0xb5, 0xcd, 0x9c, 0x38, 0x40, 0x4a, - 0xc7, 0x3c, 0x48, 0x62, 0xa6, 0xc4, 0xb6, 0x95, 0x32, 0xfb, 0xd2, 0x93, 0x6d, 0x4f, 0xbf, 0x0a, - 0x67, 0x31, 0x7a, 0xf8, 0x87, 0xae, 0xde, 0xd3, 0x9b, 0xa5, 0x5e, 0x32, 0xd5, 0x6a, 0x17, 0xa4, - 0x91, 0xef, 0x77, 0xf3, 0x98, 0x3b, 0x68, 0xd6, 0x9a, 0xd5, 0xc4, 0xfc, 0x40, 0x53, 0x7b, 0xc4, - 0x44, 0xb3, 0xa0, 0x57, 0x5a, 0xcf, 0xa7, 0x5c, 0x32, 0x14, 0x8a, 0xaf, 0x04, 0x20, 0x0f, 0xd7, - 0x27, 0xb8, 0xff, 0x55, 0x26, 0x0c, 0xfb, 0xd9, 0xc2, 0x00, 0xa4, 0x16, 0x55, 0x74, 0xb0, 0x09, - 0x0b, 0xcd, 0x79, 0xcd, 0x00, 0xbe, 0x0f, 0x60, 0x5d, 0x32, 0x35, 0xe9, 0xf7, 0xdd, 0xc6, 0x11, - 0xc1, 0x57, 0x11, 0xbd, 0x3d, 0x36, 0xd3, 0x7c, 0x92, 0xb0, 0x95, 0xf8, 0x92, 0xc4, 0x60, 0xa9, - 0x2e, 0x20, 0x22, 0x08, 0x8e, 0xfd, 0xdf, 0xee, 0xdb, 0xaf, 0xc5, 0x11, 0x0e, 0x8d, 0x8c, 0x69, - 0xf7, 0x71, 0xa5, 0xf1, 0xb5, 0x1d, 0x54, 0xbb, 0x08, 0x05, 0x7a, 0x05, 0x06, 0xc6, 0xb4, 0x1e, - 0xcc, 0xe1, 0xe5, 0xe5, 0xa8, 0xb0, 0x19, 0x60, 0xda, 0x10, 0xb1, 0x06, 0x9b, 0xb7, 0xf8, 0x81, - 0x21, 0x4c, 0xce, 0xb0, 0x2f, 0x73, 0x65, 0x47, 0x8f, 0x24, 0x6a, 0x3c, 0x00, 0x79, 0x63, 0xd2, - 0x2d, 0x16, 0xb2, 0xc1, 0x3c, 0x48, 0x29, 0xb8, 0xae, 0x21, 0xfb, 0xbb, 0x07, 0x09, 0xb9, 0x1b, - 0x8c, 0x48, 0x92, 0x4d, 0x4d, 0x78, 0x90, 0x42, 0x26, 0xe8, 0x79, 0x3c, 0x15, 0x72, 0x88, 0xbb, - 0xc9, 0x10, 0x10, 0x26, 0xdd, 0xf1, 0x36, 0x55, 0x5f, 0xcd, 0xac, 0xdf, 0xc2, 0x26, 0x10, 0x3c, - 0x95, 0x51, 0x00, 0xf3, 0xc0, 0x7a, 0xe6, 0x7c, 0xa8, 0x1d, 0x2e, 0x88, 0x29, 0x3c, 0x22, 0x18, - 0x08, 0x14, 0x39, 0xc9, 0x4e, 0xf3, 0x81, 0xc6, 0xe9, 0x23, 0x42, 0xc6, 0xe1, 0xc9, 0xf8, 0x2b, - 0x15, 0xbf, 0x0b, 0x7c, 0x20, 0x14, 0x23, 0x36, 0xd6, 0x59, 0xa2, 0xf4, 0xb3, 0x17, 0x51, 0x1c, - 0xd9, 0xdd, 0xe9, 0x7c, 0x48, 0x52, 0xaf, 0x27, 0x4e, 0xfa, 0x8d, 0x64, 0x56, 0xf6, 0xea, 0xfc, - 0xa8, 0x66, 0x49, 0xa6, 0x64, 0x7f, 0x12, 0x08, 0xca, 0x1f, 0xad, 0xd7, 0x59, 0x77, 0xca, 0xe5, - 0xe2, 0x15, 0xc8, 0x2d, 0x82, 0x81, 0x22, 0xae, 0xdf, 0x1e, 0xf0, 0x6a, 0x99, 0xad, 0x30, 0x70, - 0x10, 0x05, 0x7c, 0xb8, 0x90, 0xef, 0x75, 0x0b, 0x0b, 0xf9, 0xf0, 0x67, 0xb0, 0x5d, 0xa9, 0x9f, - 0xc2, 0x02, 0xc8, 0x1c, 0x07, 0xc3, 0x3b, 0xea, 0x22, 0x58, 0x89, 0x98, 0x6d, 0xec, 0xea, 0x58, - 0xfb, 0xe1, 0x01, 0xfd, 0xde, 0x2b, 0x2f, 0xad, 0xce, 0x90, 0x22, 0x27, 0x49, 0x72, 0x6a, 0x71, - 0x24, 0x84, 0x42, 0x49, 0x1e, 0x05, 0xe1, 0x6d, 0xce, 0x20, 0x29, 0x2c, 0x65, 0xbd, 0xcb, 0x6e, - 0xf0, 0xa8, 0x72, 0x76, 0x25, 0x3c, 0x1c, 0xe0, 0x94, 0x75, 0x60, 0x38, 0x96, 0x15, 0x2b, 0x32, - 0x80, 0x1f, 0xe9, 0x0d, 0xee, 0x20, 0x48, 0x50, 0xad, 0xc7, 0x6a, 0x0c, 0x8e, 0x8f, 0xe4, 0x8d, - 0x0b, 0x64, 0xc5, 0x64, 0xa0, 0x76, 0x4c, 0xcb, 0x15, 0xee, 0x9d, 0x78, 0xed, 0xd3, 0x89, 0xb2, - 0xdd, 0x1d, 0x40, 0xfe, 0xbb, 0xf8, 0xce, 0x72, 0x41, 0x77, 0x83, 0xfe, 0x2a, 0x3d, 0x19, 0x7c, - 0x4f, 0x59, 0x35, 0x88, 0xc9, 0xc5, 0x95, 0xfe, 0xe2, 0x3d, 0xf8, 0x25, 0xe4, 0xaa, 0xe5, 0xe6, - 0xf1, 0xff, 0xf8, 0xb2, 0x3e, 0xad, 0x26, 0xfe, 0x4d, 0x6b, 0x82, 0x18, 0x29, 0x81, 0x61, 0x30, - 0x46, 0x93, 0x00, 0x01, 0x4f, 0x07, 0x38, 0x25, 0x78, 0x3d, 0xc1, 0x5c, 0xe3, 0xd3, 0x38, 0xd0, - 0xbd, 0x55, 0xf8, 0x98, 0xf9, 0xcc, 0x06, 0xb0, 0x63, 0xf1, 0xc4, 0x07, 0x87, 0xac, 0xc0, 0xdc, - 0x3e, 0x93, 0x00, 0x0a, 0xcb, 0x1e, 0x18, 0x12, 0x32, 0x5d, 0x61, 0xf4, 0x73, 0xce, 0x01, 0xc6, - 0xf6, 0xcf, 0x7e, 0xfc, 0x7e, 0x69, 0x3f, 0x47, 0x15, 0xdc, 0xbf, 0x0c, 0x09, 0x0a, 0x42, 0x85, - 0x41, 0x85, 0x78, 0x0f, 0xb2, 0xca, 0x28, 0x99, 0xe0, 0xf7, 0x2b, 0xb6, 0x33, 0xe9, 0x5e, 0xc9, - 0x77, 0x75, 0xa4, 0xee, 0x86, 0xec, 0xe2, 0x41, 0x49, 0xc9, 0xd7, 0xaa, 0xe0, 0xdf, 0x96, 0x1d, - 0x46, 0xa7, 0x0e, 0x22, 0xbe, 0x22, 0x14, 0x36, 0xa6, 0x92, 0xde, 0x73, 0xd2, 0xe5, 0xee, 0xde, - 0x4a, 0x0a, 0x9e, 0xa8, 0x2c, 0x00, 0x67, 0x80, 0x2a, 0x25, 0xe2, 0x41, 0x65, 0xee, 0xc7, 0x89, - 0x1e, 0xf9, 0xff, 0xdc, 0x47, 0xe3, 0xeb, 0x56, 0xa2, 0x4e, 0x36, 0x4b, 0x57, 0xdf, 0x88, 0x08, - 0x82, 0x9a, 0xa9, 0xc7, 0x0b, 0x34, 0xd7, 0x8b, 0xd7, 0xfe, 0x24, 0x14, 0x9c, 0xd9, 0x6d, 0x55, - 0x54, 0x9e, 0xe0, 0xd2, 0x7e, 0x1b, 0xf1, 0xfe, 0x1b, 0xe5, 0x32, 0xae, 0xb1, 0x11, 0x5c, 0xa2, - 0xeb, 0x55, 0xca, 0x29, 0x6a, 0xbe, 0x13, 0x8e, 0x8a, 0x5f, 0xea, 0xbe, 0x09, 0x30, 0x39, 0xda, - 0x83, 0x4b, 0xa1, 0xc0, 0x00, 0x67, 0x05, 0x43, 0x88, 0x12, 0x14, 0xb4, 0x27, 0xc4, 0xf9, 0xe0, - 0x1e, 0x20, 0x98, 0x80, 0xb3, 0xcb, 0x04, 0xd5, 0xf2, 0xc0, 0x0c, 0xe0, 0x00, 0xf1, 0x9e, 0xe1, - 0xeb, 0x0e, 0x0f, 0x43, 0x66, 0x7f, 0x38, 0x91, 0x04, 0xbb, 0xb8, 0x87, 0xe2, 0x42, 0x03, 0x34, - 0xe5, 0xe7, 0x3a, 0x70, 0x62, 0xf3, 0x18, 0xd7, 0x5d, 0x13, 0xb7, 0x89, 0x08, 0x85, 0x2d, 0x48, - 0x5b, 0x25, 0x55, 0xf8, 0x2b, 0x15, 0x9e, 0x30, 0x39, 0xcd, 0x47, 0x17, 0x2f, 0x28, 0x8b, 0x28, - 0xe0, 0x9b, 0x98, 0xfc, 0x23, 0x1b, 0x0e, 0x71, 0xaa, 0x27, 0xe2, 0xab, 0xf1, 0x69, 0xe1, 0x69, - 0x98, 0x89, 0x6d, 0x33, 0xf6, 0xee, 0xe2, 0xb4, 0x43, 0xf3, 0x8e, 0x9e, 0x5c, 0x79, 0x76, 0xad, - 0x61, 0x98, 0x52, 0xca, 0x40, 0x76, 0xe1, 0x43, 0x93, 0xb6, 0xb0, 0xfc, 0x96, 0x9c, 0xe1, 0xa0, - 0x81, 0xc6, 0xb1, 0xcb, 0xc0, 0x6f, 0xf1, 0xa0, 0x13, 0xc4, 0x02, 0xb9, 0x3a, 0xb4, 0x62, 0x88, - 0xb2, 0x8e, 0xb2, 0x7f, 0xbb, 0x34, 0x8b, 0xfb, 0x6f, 0xc4, 0x88, 0x15, 0xbb, 0xbd, 0xd7, 0x89, - 0x12, 0x0a, 0xef, 0xba, 0x56, 0x8d, 0x82, 0xe4, 0xf2, 0xec, 0x7f, 0x12, 0x32, 0xee, 0x5f, 0x75, - 0xb1, 0xee, 0xb4, 0x55, 0xf0, 0x88, 0xff, 0x52, 0x49, 0x3e, 0xf6, 0x9f, 0xe2, 0x44, 0xe2, 0xb8, - 0x83, 0xf8, 0x22, 0xe6, 0x8b, 0xd6, 0x5e, 0x42, 0x3a, 0x5f, 0x96, 0xb5, 0xae, 0x4d, 0x85, 0x01, - 0x40, 0x74, 0x7c, 0x30, 0x08, 0x46, 0x13, 0xbb, 0x14, 0x7b, 0x7e, 0xf7, 0x2d, 0x51, 0xd6, 0x0f, - 0x16, 0x60, 0xa4, 0x32, 0x11, 0xe2, 0xb1, 0x58, 0xad, 0xdf, 0x9b, 0x83, 0x7e, 0x60, 0x76, 0xb8, - 0xa3, 0xb2, 0xc2, 0x02, 0x06, 0x52, 0x6c, 0x0e, 0xf2, 0xa6, 0xd4, 0xc6, 0x55, 0x52, 0x9e, 0xeb, - 0x65, 0x34, 0x64, 0x68, 0x91, 0xbb, 0xab, 0xf5, 0xe2, 0x44, 0x0d, 0xcd, 0x2e, 0xa6, 0xa0, 0x48, - 0x43, 0x53, 0x40, 0x46, 0x60, 0x60, 0xd3, 0x5d, 0xfb, 0x60, 0xfc, 0xd7, 0x3f, 0xd3, 0x9b, 0xf1, - 0x10, 0x84, 0x19, 0x97, 0x6d, 0x73, 0x77, 0xd4, 0x5f, 0x12, 0x20, 0x16, 0x16, 0x3b, 0xe7, 0xbb, - 0xbb, 0xc5, 0x6e, 0x71, 0x21, 0x80, 0xa1, 0x01, 0x81, 0xb2, 0xd2, 0xea, 0x87, 0xb8, 0x5b, 0xe1, - 0x57, 0x23, 0x58, 0x6b, 0xb4, 0xdd, 0xf0, 0xe2, 0x02, 0x8e, 0x58, 0xc4, 0x41, 0x31, 0x6d, 0xdd, - 0xe0, 0xc0, 0x6c, 0x4f, 0x15, 0x40, 0xcd, 0xd1, 0x2c, 0x77, 0xca, 0x72, 0x7a, 0x9e, 0xd8, 0x8d, - 0x0b, 0xf8, 0xb3, 0xc4, 0x99, 0x47, 0x93, 0x02, 0xbd, 0xe7, 0x25, 0xca, 0xff, 0x12, 0x0e, 0x01, - 0x67, 0x55, 0x24, 0x7c, 0x3f, 0xd7, 0x67, 0x2b, 0x03, 0x9c, 0x4a, 0x64, 0xf0, 0xc0, 0x60, 0xf8, - 0x54, 0x35, 0x57, 0xa8, 0x17, 0x70, 0x24, 0x07, 0x61, 0x2a, 0x20, 0x92, 0xfc, 0x43, 0xa2, 0x07, - 0x41, 0x07, 0x37, 0x8a, 0xc4, 0xf2, 0x6b, 0x5f, 0x09, 0x73, 0xb6, 0x4c, 0x72, 0x47, 0xf2, 0x71, - 0xef, 0x3a, 0x84, 0x89, 0x10, 0x4a, 0xff, 0x0d, 0x4c, 0xe5, 0xbf, 0x12, 0x24, 0x12, 0x90, 0xb7, - 0xc3, 0xdc, 0xc6, 0xe3, 0x22, 0xb7, 0x22, 0x8e, 0x20, 0x40, 0x2e, 0x8a, 0xc5, 0x62, 0x1c, 0xa3, - 0x93, 0xf5, 0xc2, 0x11, 0x05, 0xb9, 0x3e, 0xf7, 0xe1, 0x08, 0xf3, 0x36, 0x9d, 0x3d, 0x0c, 0x7a, - 0xdd, 0xdf, 0xc4, 0x0c, 0x13, 0xc4, 0xe3, 0x10, 0xb0, 0xe0, 0x7b, 0xc1, 0xc9, 0x60, 0x63, 0x3d, - 0x3f, 0x8f, 0x7c, 0x7b, 0xe5, 0x83, 0x8a, 0xed, 0x56, 0x42, 0x1c, 0xae, 0x1c, 0x46, 0x00, 0x6d, - 0x1d, 0xa0, 0xaf, 0x23, 0xe7, 0xd6, 0xad, 0xf2, 0x4c, 0x0f, 0xa5, 0xeb, 0x71, 0xa7, 0x1a, 0xe7, - 0x32, 0xba, 0x4e, 0x02, 0xe3, 0x4f, 0xa6, 0x9f, 0x83, 0x81, 0xbe, 0x92, 0x80, 0x6b, 0xc1, 0x30, - 0x2c, 0x04, 0xf9, 0x14, 0x5d, 0xc7, 0x70, 0xa9, 0x7f, 0xa8, 0x86, 0xf2, 0x58, 0x00, 0x55, 0x21, - 0x94, 0x01, 0xaa, 0x9c, 0x13, 0xaa, 0xab, 0x5a, 0x4a, 0x22, 0xfa, 0x3c, 0xdc, 0xaf, 0x02, 0x28, - 0x43, 0x00, 0x73, 0x30, 0xeb, 0xe8, 0xdf, 0x06, 0xcd, 0x23, 0xf2, 0x45, 0x21, 0x18, 0x2b, 0x2c, - 0x52, 0x7c, 0x40, 0x7e, 0x14, 0xe3, 0x88, 0x5c, 0x94, 0x01, 0x55, 0x4a, 0x43, 0x0d, 0x49, 0x41, - 0x5c, 0x6b, 0x22, 0xd6, 0x05, 0xc1, 0xe4, 0xcc, 0xc0, 0x17, 0x20, 0xd0, 0x84, 0x9b, 0xe1, 0xb6, - 0x3a, 0xbd, 0x4f, 0x78, 0x29, 0x07, 0x01, 0x4a, 0x6d, 0xa8, 0xb9, 0x3e, 0x3b, 0x28, 0x49, 0x68, - 0x7b, 0x73, 0x19, 0x72, 0xfd, 0xc2, 0x20, 0xc0, 0x66, 0xed, 0x35, 0x77, 0x8f, 0x0f, 0x07, 0x9e, - 0x2f, 0x5c, 0xe7, 0x11, 0x5a, 0xf0, 0xdc, 0x0d, 0x61, 0x51, 0x85, 0xae, 0x48, 0x6e, 0x15, 0x40, - 0x4f, 0x4e, 0x3c, 0x63, 0xf2, 0xc3, 0x20, 0x68, 0x1b, 0xba, 0xac, 0x7d, 0x54, 0xf3, 0xc4, 0xd8, - 0x90, 0xb1, 0x59, 0x27, 0x2f, 0x76, 0x07, 0x70, 0x94, 0x01, 0x7e, 0x2d, 0xfe, 0x1c, 0x50, 0x03, - 0x3f, 0x49, 0xe4, 0x70, 0x5f, 0xff, 0x77, 0x5e, 0xca, 0xa5, 0xd6, 0x72, 0xec, 0x3e, 0x94, 0x58, - 0xc3, 0x2e, 0xdc, 0x6c, 0xca, 0x3b, 0x5f, 0xe0, 0x50, 0x05, 0x93, 0x63, 0x42, 0x6c, 0x16, 0x72, - 0xb2, 0x30, 0xa7, 0xd8, 0x99, 0xf4, 0x35, 0xc8, 0x77, 0x7d, 0xf1, 0xc6, 0x53, 0x9c, 0xd5, 0x97, - 0x2c, 0xa9, 0x09, 0x89, 0x10, 0x43, 0xc0, 0x72, 0x34, 0x2f, 0x7c, 0x48, 0x44, 0x22, 0x21, 0xef, - 0x5b, 0x63, 0x4b, 0x72, 0x6a, 0xb7, 0xe2, 0x20, 0x9e, 0xdc, 0x75, 0x31, 0xd8, 0x55, 0x5b, 0x54, - 0x3b, 0xc4, 0xfc, 0x34, 0x78, 0x0e, 0xe6, 0x00, 0x12, 0xc8, 0xb8, 0x44, 0x5a, 0x00, 0x92, 0xe2, - 0xf5, 0x8b, 0xf0, 0xe2, 0x84, 0x07, 0x82, 0xb6, 0xed, 0xf9, 0xed, 0xe5, 0x3c, 0xf0, 0xb5, 0xec, - 0x8d, 0x4b, 0x45, 0xa0, 0xb7, 0x24, 0xb9, 0x64, 0xb9, 0x74, 0xa5, 0x1d, 0xb7, 0x3e, 0x1d, 0x4f, - 0xa8, 0x63, 0x6a, 0xfc, 0x48, 0x40, 0x6d, 0xd2, 0x60, 0xf0, 0x18, 0x5d, 0x40, 0xa7, 0xc3, 0xdc, - 0x3b, 0xfd, 0x47, 0x94, 0x7f, 0x87, 0x79, 0xfe, 0x4d, 0xa5, 0x65, 0xe4, 0xfc, 0x2e, 0x2d, 0x5a, - 0x3b, 0xd1, 0xe6, 0xef, 0xb4, 0xf8, 0x40, 0x48, 0x6e, 0x52, 0x58, 0xb6, 0x66, 0x51, 0x71, 0xf4, - 0x4f, 0xf8, 0x80, 0x52, 0x58, 0x92, 0x77, 0x81, 0x65, 0x3d, 0x0f, 0x89, 0x79, 0x6e, 0xd3, 0x3c, - 0x18, 0x02, 0x51, 0x5d, 0xee, 0xf1, 0x74, 0x85, 0x19, 0x6e, 0x10, 0x04, 0x00, 0xa6, 0x26, 0xc0, - 0x20, 0x63, 0x05, 0xba, 0x47, 0x4a, 0x16, 0x06, 0x4a, 0x07, 0x7c, 0x53, 0x21, 0xc2, 0x3c, 0x35, - 0x51, 0xaa, 0x70, 0x40, 0x0a, 0x02, 0x96, 0x7a, 0xd9, 0xaf, 0x76, 0x96, 0xf3, 0xa7, 0x08, 0x02, - 0x81, 0x17, 0x66, 0xf3, 0xe1, 0x65, 0x6b, 0x08, 0x46, 0x45, 0x14, 0x13, 0xf4, 0x89, 0x8e, 0x38, - 0x3d, 0xf5, 0xfa, 0xbb, 0xf2, 0xe2, 0x56, 0xb7, 0x34, 0xaa, 0xc1, 0x00, 0x40, 0x29, 0xac, 0x17, - 0xaa, 0x96, 0x7f, 0x09, 0x3a, 0x13, 0x70, 0x5d, 0x20, 0x01, 0xe3, 0xcb, 0x11, 0x97, 0xc5, 0x18, - 0xef, 0x95, 0x6e, 0x20, 0x10, 0x0e, 0x28, 0x73, 0x4a, 0xdc, 0xea, 0xe1, 0xde, 0x5e, 0xa9, 0x70, - 0x50, 0x08, 0x01, 0x49, 0x04, 0x1f, 0xaa, 0x9f, 0x2d, 0x20, 0x8d, 0x63, 0x2e, 0x17, 0x13, 0x2f, - 0x0b, 0x1f, 0x74, 0x60, 0x62, 0x10, 0x98, 0x60, 0xec, 0x80, 0x94, 0xc0, 0x6b, 0x8b, 0xfc, 0x67, - 0x56, 0x85, 0x78, 0x24, 0xaa, 0xaf, 0xa5, 0x89, 0x12, 0x0b, 0x0c, 0x3c, 0xfe, 0x89, 0xc6, 0x69, - 0xfe, 0x07, 0x62, 0xa6, 0x1e, 0x24, 0x11, 0xfc, 0xbd, 0xfc, 0x40, 0x2a, 0x2a, 0x49, 0x1c, 0x82, - 0x7a, 0x63, 0x66, 0x58, 0x61, 0xb0, 0x56, 0x58, 0xf3, 0xed, 0x85, 0x28, 0x92, 0x24, 0x22, 0x0b, - 0x22, 0xf7, 0xdc, 0x3c, 0xcb, 0xa5, 0xc7, 0x49, 0xc3, 0x2f, 0x89, 0xac, 0x53, 0xa6, 0x12, 0xf7, - 0x0c, 0x82, 0x11, 0x9c, 0x36, 0x6b, 0x36, 0x82, 0xf5, 0x10, 0x70, 0xa9, 0x0b, 0xdc, 0x83, 0xa2, - 0xc3, 0x54, 0x24, 0x17, 0x2c, 0x54, 0xda, 0x40, 0x7c, 0x12, 0x87, 0xba, 0x40, 0xe0, 0x25, 0xe1, - 0x00, 0x53, 0xa0, 0xd8, 0x30, 0xec, 0x02, 0xf0, 0xe8, 0x0a, 0x8b, 0x24, 0xaf, 0xd7, 0x24, 0xfc, - 0x4b, 0x1c, 0x48, 0x60, 0x54, 0x2a, 0xe4, 0x3a, 0xf3, 0x17, 0x2e, 0x7e, 0x20, 0x10, 0x0c, 0x87, - 0x1b, 0x53, 0x54, 0x6a, 0x59, 0x93, 0x56, 0xf5, 0x09, 0xe4, 0xee, 0x56, 0x47, 0x45, 0xcd, 0x87, - 0x87, 0xe2, 0x41, 0x47, 0x10, 0x18, 0x08, 0xde, 0xd7, 0x55, 0x55, 0xf8, 0x21, 0x0a, 0x5e, 0x12, - 0xc9, 0x27, 0xf9, 0x30, 0x99, 0x24, 0xe1, 0xa3, 0xb5, 0xdc, 0xe3, 0xc5, 0x55, 0xc3, 0x5a, 0xe7, - 0x71, 0xe2, 0xe0, 0x23, 0xf0, 0x80, 0x64, 0x29, 0xe5, 0xc2, 0xec, 0x4f, 0xc4, 0xfb, 0xbb, 0xf2, - 0xb3, 0x9c, 0x93, 0x6d, 0x57, 0x82, 0x00, 0xa4, 0xe1, 0xcb, 0x5f, 0xed, 0x21, 0x68, 0xd8, 0xec, - 0x2d, 0x9b, 0x8a, 0xeb, 0x3f, 0xce, 0x3c, 0x76, 0xe7, 0x1f, 0x2c, 0x39, 0x38, 0x03, 0x92, 0xf6, - 0xb7, 0x90, 0xcb, 0xf1, 0x2f, 0xc5, 0x8b, 0x8c, 0xf0, 0x07, 0x5f, 0x07, 0x6f, 0xa7, 0x9e, 0x09, - 0xb7, 0xab, 0x6c, 0xf8, 0xbd, 0x52, 0x57, 0xf8, 0x26, 0xc4, 0x10, 0xd3, 0xb9, 0xf9, 0x2e, 0xee, - 0xf8, 0x46, 0x0b, 0x2b, 0x34, 0x9e, 0xad, 0x5a, 0x6a, 0xe3, 0xc3, 0x70, 0xed, 0x66, 0x70, 0x2c, - 0x82, 0xb9, 0x43, 0x92, 0x71, 0x3f, 0xf7, 0x10, 0x11, 0x1c, 0x48, 0xa2, 0x4f, 0x2c, 0xc4, 0xcb, - 0x73, 0x30, 0x6c, 0x9c, 0x48, 0x81, 0x9d, 0x31, 0x98, 0x5b, 0xb1, 0xd5, 0xce, 0x03, 0x85, 0xf0, - 0xad, 0xdb, 0x51, 0x71, 0x27, 0x0f, 0x0e, 0x62, 0x42, 0x00, 0xac, 0xac, 0xf7, 0x31, 0x1e, 0xa4, - 0xc1, 0x53, 0xf8, 0x6f, 0x95, 0xee, 0x24, 0x20, 0x32, 0x2e, 0xaa, 0xc9, 0x55, 0xb4, 0x04, 0xa4, - 0xe6, 0xdc, 0x3a, 0xe5, 0x26, 0x2a, 0x05, 0xd8, 0x16, 0x1e, 0x42, 0x01, 0x47, 0x3a, 0x6c, 0x48, - 0x80, 0x8e, 0xa9, 0xa4, 0xce, 0x88, 0x85, 0x00, 0x4a, 0x30, 0x64, 0xa5, 0xf7, 0xf0, 0x91, 0x78, - 0xd6, 0x4f, 0xbe, 0x11, 0x85, 0x08, 0xab, 0x35, 0xae, 0xcc, 0x76, 0xf0, 0x51, 0x76, 0x43, 0x41, - 0x22, 0x28, 0x95, 0x10, 0xf7, 0x71, 0x21, 0x81, 0x9a, 0xae, 0x43, 0xcc, 0x09, 0x67, 0x9f, 0x52, - 0x74, 0xcb, 0xad, 0xac, 0x10, 0x81, 0x64, 0x23, 0x4d, 0xbb, 0x6a, 0x6d, 0x17, 0xe6, 0xe2, 0xda, - 0xea, 0x62, 0x68, 0xfa, 0x85, 0xb9, 0x09, 0xaa, 0xae, 0x8a, 0xf0, 0x8f, 0x26, 0x1a, 0x1e, 0xfe, - 0xc4, 0x1e, 0xf2, 0x92, 0x31, 0x54, 0xae, 0x24, 0x40, 0x50, 0xb5, 0x3a, 0x59, 0xbd, 0xca, 0xfc, - 0x8c, 0x29, 0x98, 0xe3, 0x78, 0xbc, 0x32, 0x32, 0xe2, 0xbf, 0x0a, 0xd7, 0x2d, 0xcf, 0xee, 0x7e, - 0x25, 0xca, 0xe1, 0x97, 0x00, 0x3d, 0x94, 0xd1, 0x62, 0xce, 0x8c, 0x4f, 0xd9, 0x9d, 0x9e, 0xe4, - 0xe6, 0xa3, 0x8d, 0xe3, 0x39, 0xa3, 0xe1, 0x2d, 0xfc, 0x40, 0xf8, 0x87, 0x8e, 0xc7, 0xf1, 0x22, - 0x02, 0x84, 0x2d, 0x61, 0x4a, 0xd2, 0x6b, 0x2c, 0xa2, 0x68, 0xac, 0x81, 0x62, 0x38, 0x38, 0xf0, - 0x1c, 0x2f, 0xf5, 0xa4, 0xd7, 0xdc, 0x30, 0x24, 0x29, 0x78, 0x00, 0x08, 0x61, 0x60, 0x61, 0xf0, - 0x4a, 0xca, 0x06, 0x05, 0x4b, 0xbc, 0x96, 0x66, 0xf9, 0x3b, 0x76, 0xcf, 0x04, 0x78, 0x90, 0x42, - 0x30, 0xe2, 0x1c, 0x24, 0x15, 0x12, 0xe1, 0x60, 0xce, 0x70, 0xb0, 0x2c, 0x19, 0xee, 0xe2, 0xb1, - 0x95, 0x57, 0x90, 0x85, 0x8d, 0xf8, 0xfc, 0x40, 0x43, 0x17, 0x69, 0x38, 0xac, 0xec, 0x16, 0x31, - 0x00, 0xe0, 0x80, 0x70, 0xf0, 0x70, 0x94, 0x07, 0xd8, 0x88, 0xc9, 0x26, 0xcb, 0x3a, 0x8a, 0xf6, - 0x53, 0xe5, 0xf9, 0x3d, 0x65, 0x4d, 0xc5, 0x39, 0x17, 0xc4, 0x08, 0x18, 0x60, 0xd0, 0x1e, 0xca, - 0x21, 0x2a, 0x22, 0xa0, 0xb6, 0xe6, 0x23, 0x96, 0xe9, 0x21, 0xc5, 0x97, 0xb3, 0xf1, 0xc1, 0x74, - 0x44, 0x71, 0x64, 0xc9, 0x73, 0x79, 0x7a, 0x6d, 0x61, 0x3f, 0x08, 0x86, 0x04, 0xee, 0x5b, 0x3f, - 0x15, 0xdb, 0xbe, 0x10, 0x04, 0x03, 0x22, 0x7c, 0x50, 0xc4, 0xf9, 0x61, 0x88, 0xf3, 0xdc, 0x2c, - 0x33, 0xce, 0x31, 0xc9, 0xae, 0x0c, 0x52, 0x9c, 0x72, 0x35, 0xf7, 0x70, 0xc8, 0x91, 0xdc, 0x5c, - 0xcc, 0x09, 0x70, 0x1d, 0x78, 0x7f, 0x9e, 0x69, 0x25, 0x99, 0x7f, 0x12, 0x10, 0x19, 0x76, 0x4b, - 0xcd, 0x8d, 0x08, 0x7e, 0xd0, 0xbc, 0x8b, 0xad, 0x61, 0x0a, 0xae, 0x31, 0x02, 0x46, 0x5f, 0xcf, - 0x70, 0xf0, 0x60, 0xad, 0x6b, 0x2b, 0x55, 0x2c, 0xbb, 0x4f, 0x1c, 0x21, 0x84, 0xa7, 0xf2, 0xc9, - 0x01, 0xad, 0x28, 0xfd, 0xf1, 0x96, 0x28, 0x2d, 0xce, 0xed, 0x44, 0xf1, 0x90, 0x3e, 0xa8, 0xa2, - 0xa5, 0x62, 0x43, 0xcf, 0x2f, 0x3f, 0xe1, 0x6c, 0x01, 0x8a, 0xeb, 0x33, 0xd4, 0xcb, 0x7b, 0x7b, - 0x32, 0xfd, 0x3a, 0xf2, 0xc3, 0x0c, 0x46, 0xc4, 0x3d, 0xec, 0x47, 0x47, 0x33, 0x31, 0x4d, 0xb4, - 0x95, 0x0b, 0x46, 0x7d, 0x87, 0x7b, 0x36, 0x0c, 0x90, 0xb8, 0x8c, 0x1c, 0xf2, 0xc7, 0x85, 0x31, - 0x1f, 0x21, 0x1d, 0xf2, 0xf2, 0xde, 0xf0, 0xa7, 0x7a, 0xd2, 0xe1, 0x91, 0xe7, 0x3e, 0x5f, 0x4e, - 0x2e, 0xa4, 0xc5, 0x2f, 0xc1, 0x08, 0x91, 0x96, 0xe6, 0xec, 0x36, 0x83, 0xab, 0x94, 0xcb, 0x3c, - 0x96, 0x1a, 0x41, 0x5a, 0xa8, 0xb9, 0x7f, 0x04, 0x22, 0x46, 0x12, 0x44, 0xb8, 0x29, 0x97, 0x8f, - 0xe5, 0x71, 0x97, 0x93, 0x25, 0xdb, 0x88, 0x1e, 0x27, 0x83, 0x07, 0x15, 0x18, 0x90, 0x20, 0x8c, - 0x8a, 0x0c, 0x50, 0x67, 0x83, 0xc3, 0xbe, 0xa0, 0xe2, 0xba, 0xd3, 0x71, 0xe1, 0x81, 0xc7, 0x93, - 0xaa, 0x5e, 0xfb, 0xd2, 0x3c, 0x77, 0x93, 0x81, 0xa2, 0xbc, 0x12, 0x85, 0x70, 0x88, 0x44, 0x79, - 0x1f, 0x1c, 0x3d, 0xca, 0x9b, 0x43, 0xdc, 0x2d, 0x5a, 0xa4, 0xaa, 0xb0, 0xcb, 0x12, 0x00, 0x8e, - 0x2e, 0xe8, 0x6c, 0x52, 0x07, 0x74, 0xc6, 0xb4, 0xe3, 0xcd, 0xcd, 0xeb, 0x1d, 0xbe, 0xa0, 0xe2, - 0xfa, 0x65, 0x89, 0x0c, 0x0c, 0x30, 0x54, 0x55, 0xb8, 0x58, 0x33, 0xc7, 0xb7, 0x1b, 0xbe, 0x21, - 0xe7, 0xbc, 0xb6, 0x2a, 0xae, 0x96, 0x8b, 0xc5, 0xf1, 0x22, 0x01, 0x5e, 0x61, 0xef, 0x65, 0x9a, - 0x6b, 0x7d, 0x3d, 0x43, 0x1c, 0xc7, 0xd5, 0x7c, 0x9b, 0xdf, 0xd9, 0x9d, 0xf0, 0xaf, 0x25, 0x44, - 0x9c, 0x8a, 0x70, 0xeb, 0x80, 0x0f, 0xb8, 0xe1, 0x9f, 0x7d, 0x95, 0xa2, 0x4a, 0xeb, 0xfb, 0x8e, - 0xff, 0x28, 0xdc, 0x64, 0x0c, 0xa6, 0x87, 0x94, 0x65, 0x82, 0x2a, 0x74, 0xff, 0xe1, 0x48, 0x90, - 0x03, 0x87, 0x00, 0x78, 0xf2, 0xc6, 0x69, 0x7f, 0xde, 0x8c, 0x4b, 0xd3, 0x15, 0x8e, 0x0b, 0x34, - 0x41, 0xef, 0x2d, 0x66, 0x4f, 0x12, 0x14, 0x8c, 0xd3, 0xbb, 0x6e, 0x23, 0xfc, 0x5d, 0x8c, 0x0f, - 0xb9, 0x45, 0x61, 0x46, 0x07, 0x05, 0x38, 0xbc, 0x49, 0x05, 0x69, 0x41, 0xf4, 0x96, 0x33, 0x0a, - 0x9c, 0x69, 0x58, 0x80, 0x50, 0x0b, 0x0a, 0x91, 0x30, 0x56, 0x5b, 0xde, 0x31, 0x58, 0xa3, 0x3f, - 0x3e, 0xcd, 0x71, 0x10, 0xa1, 0x8f, 0x00, 0xf1, 0x68, 0xb8, 0x9c, 0x0d, 0x34, 0x7e, 0xa6, 0xd7, - 0xe9, 0x36, 0xa1, 0xc5, 0x79, 0x88, 0x6c, 0x84, 0x31, 0x64, 0x12, 0x84, 0xc6, 0xe6, 0x4c, 0x93, - 0xae, 0x24, 0x64, 0x5c, 0xbc, 0xe2, 0x41, 0x3b, 0x82, 0x98, 0xb9, 0x78, 0x93, 0x87, 0x1f, 0x5b, - 0x3c, 0x8b, 0xa8, 0x55, 0x2f, 0xe2, 0x42, 0x65, 0x17, 0x26, 0xcf, 0x33, 0x30, 0x7f, 0xc3, 0xdd, - 0xd6, 0x2e, 0xa1, 0x2e, 0x4d, 0x9f, 0x3c, 0x20, 0x24, 0x12, 0xef, 0x5c, 0x50, 0x6d, 0x5c, 0xf1, - 0x20, 0x97, 0x83, 0x52, 0xc2, 0xca, 0xcc, 0xa3, 0xa0, 0x34, 0x92, 0x42, 0xad, 0xf0, 0xa1, 0xe5, - 0x28, 0x3d, 0xb6, 0xf5, 0x5d, 0xd3, 0xc8, 0x0f, 0x08, 0x8c, 0x34, 0x56, 0x1c, 0xac, 0x83, 0x63, - 0x3d, 0xbc, 0xd7, 0xcd, 0xf8, 0x90, 0x57, 0x12, 0xc2, 0xcb, 0xb5, 0x13, 0xf9, 0x7d, 0x0d, 0x93, - 0x57, 0x71, 0x31, 0x31, 0x56, 0x0f, 0xbb, 0x7e, 0xaa, 0x19, 0xe4, 0xad, 0x7e, 0x51, 0x2b, 0x58, - 0x67, 0x92, 0xef, 0xe2, 0x44, 0xc2, 0xb8, 0x88, 0x04, 0x22, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, - 0x46, 0x23, 0x31, 0x27, 0xd8, 0x8d, 0xdd, 0xf2, 0xee, 0x9c, 0x4f, 0x21, 0xeb, 0x26, 0x79, 0x6a, - 0xb8, 0x32, 0x89, 0x82, 0xd2, 0x2e, 0x56, 0x1d, 0x6b, 0xdc, 0x4c, 0x25, 0x54, 0xf4, 0xdb, 0x7e, - 0x26, 0x13, 0xbe, 0xca, 0x5e, 0xe5, 0xbe, 0x24, 0xa5, 0xd8, 0xdc, 0x18, 0x73, 0x1b, 0x55, 0x51, - 0x22, 0x02, 0x77, 0xbb, 0xb7, 0x6c, 0x9d, 0x77, 0x77, 0xfc, 0x93, 0xfd, 0xf8, 0x9f, 0x13, 0x21, - 0xdb, 0x5f, 0x08, 0xc8, 0x47, 0x6f, 0xe2, 0x02, 0x15, 0xae, 0xf3, 0xdb, 0xbd, 0x38, 0x2f, 0xc4, - 0x0a, 0xbb, 0x3f, 0x5a, 0x3f, 0x04, 0x65, 0x6d, 0x7e, 0xae, 0xef, 0x7b, 0x89, 0x10, 0x61, 0x75, - 0xae, 0x24, 0x48, 0x40, 0x75, 0xee, 0xb5, 0xbd, 0xf8, 0x9b, 0xe5, 0x63, 0x89, 0xf1, 0x3e, 0x27, - 0x05, 0x5c, 0x87, 0x97, 0xd3, 0xe2, 0x07, 0x12, 0x7c, 0xbf, 0x36, 0x5d, 0x7e, 0x20, 0xfa, 0xae, - 0xad, 0xae, 0x42, 0x66, 0xa2, 0xae, 0x5a, 0xae, 0x4e, 0x8d, 0xd3, 0xc0, 0x90, 0x08, 0x0d, 0x3c, - 0x12, 0x36, 0x13, 0x0e, 0x30, 0x51, 0x29, 0x5b, 0xb7, 0x4c, 0x90, 0x3b, 0xdd, 0xdf, 0x11, 0x88, - 0x1d, 0x17, 0x51, 0x27, 0x3c, 0xdd, 0x52, 0x5a, 0xbe, 0x08, 0xcb, 0x9f, 0xbb, 0xfc, 0x51, 0xb8, - 0x5e, 0xae, 0xee, 0xf5, 0xe2, 0x22, 0x31, 0x7e, 0x6e, 0xa2, 0xe4, 0x63, 0xc5, 0xd3, 0x24, 0x1b, - 0xac, 0x57, 0x2f, 0x63, 0xf3, 0x71, 0x78, 0x90, 0xdb, 0x80, 0x3e, 0xfd, 0x61, 0xff, 0x83, 0xbc, - 0x18, 0xc0, 0x3b, 0xc2, 0x0f, 0xc1, 0xde, 0x0c, 0x78, 0xa9, 0x31, 0xf4, 0x63, 0xf5, 0x64, 0xac, - 0xb0, 0x40, 0x10, 0x0a, 0x4a, 0x2d, 0x4b, 0x32, 0xd8, 0x59, 0x33, 0x5c, 0x72, 0xd9, 0xc0, 0xfb, - 0x2d, 0x95, 0xf7, 0x52, 0x8e, 0x82, 0x2c, 0x6f, 0xd9, 0x22, 0x47, 0xe9, 0x25, 0x1c, 0x14, 0x4a, - 0x3f, 0xaf, 0xa6, 0xb8, 0x60, 0x21, 0x03, 0xe3, 0x50, 0x3d, 0x0d, 0x43, 0x94, 0x00, 0x1a, 0x87, - 0x30, 0x06, 0xa5, 0x10, 0xd4, 0x90, 0x00, 0x04, 0x00, 0x6a, 0x17, 0x05, 0xd4, 0x2a, 0x10, 0x44, - 0xbe, 0xd9, 0xfc, 0x85, 0xba, 0x0e, 0xd4, 0x67, 0x05, 0x61, 0x69, 0xb0, 0xf9, 0xda, 0x93, 0x09, - 0x79, 0x5f, 0x7c, 0xb3, 0x7c, 0xfc, 0x56, 0xf4, 0x4b, 0x6c, 0x5f, 0x11, 0x37, 0x48, 0xb9, 0xc3, - 0x21, 0x42, 0x07, 0xeb, 0x4d, 0xf0, 0xb5, 0xf9, 0xc4, 0xdc, 0x39, 0xe1, 0x7a, 0x9d, 0xd1, 0xeb, - 0x4b, 0x01, 0xdd, 0x8a, 0xc2, 0xce, 0x4d, 0xf1, 0x36, 0xee, 0x81, 0x60, 0x80, 0x1e, 0xb7, 0xc7, - 0xea, 0x22, 0x4a, 0x8b, 0xeb, 0xfd, 0x89, 0x25, 0xf3, 0x05, 0xd8, 0xa0, 0x08, 0x75, 0xf5, 0x2f, - 0xff, 0xcf, 0x86, 0xcd, 0x70, 0x43, 0x0a, 0x15, 0x8d, 0xa5, 0xf4, 0x8e, 0xe2, 0x67, 0x38, 0x9d, - 0x9a, 0xe5, 0x80, 0xf1, 0xfa, 0x87, 0xfd, 0xfe, 0x0a, 0xc8, 0x49, 0xc7, 0x14, 0x58, 0x8d, 0x41, - 0x65, 0xa8, 0x1d, 0x2e, 0x8a, 0x96, 0x00, 0xfb, 0xa1, 0x7b, 0x4e, 0x78, 0x08, 0x80, 0xa5, 0xdd, - 0xa6, 0x9c, 0x43, 0xd3, 0x24, 0x01, 0xc0, 0xb8, 0xc2, 0x18, 0x1a, 0xa0, 0xb4, 0x3f, 0xc2, 0xd9, - 0xee, 0x33, 0xd3, 0x3f, 0x18, 0x30, 0x01, 0x10, 0x14, 0xa6, 0x23, 0xfe, 0x28, 0xa8, 0x89, 0x49, - 0xe5, 0x00, 0x00, 0x80, 0x00, 0x26, 0x42, 0x92, 0x52, 0x41, 0x77, 0x84, 0xd6, 0x90, 0x15, 0x52, - 0x43, 0x9d, 0x0f, 0x31, 0x60, 0x64, 0x50, 0x2a, 0x45, 0x98, 0x08, 0x08, 0x5f, 0x5c, 0x48, 0x53, - 0xa5, 0x9b, 0x54, 0x98, 0x5b, 0x2d, 0xd4, 0x1a, 0x09, 0x99, 0x15, 0x04, 0x46, 0x4b, 0x4a, 0x7f, - 0xad, 0x2a, 0x04, 0x31, 0x02, 0x02, 0x87, 0x6e, 0x6a, 0xc8, 0xd8, 0xaf, 0x04, 0x14, 0xcf, 0xd2, - 0xb6, 0x64, 0xa2, 0x4f, 0x9c, 0xf7, 0xde, 0x71, 0xf1, 0x1e, 0x19, 0x10, 0x14, 0x93, 0xe0, 0xff, - 0x93, 0x46, 0xd1, 0xf0, 0x3f, 0xc3, 0x1a, 0x40, 0x61, 0x55, 0xf1, 0xb6, 0x8a, 0x9d, 0x4e, 0xa9, - 0x57, 0xf8, 0x29, 0x30, 0x73, 0x00, 0x6a, 0x51, 0x00, 0x6a, 0x98, 0x70, 0x01, 0xd0, 0xaa, 0xc6, - 0x62, 0x58, 0x0c, 0x9d, 0x64, 0xfc, 0xef, 0x77, 0xe2, 0x52, 0x2f, 0x31, 0xf7, 0x7f, 0x13, 0x43, - 0xa1, 0xa6, 0xc8, 0x9d, 0x0d, 0x45, 0x23, 0x58, 0x21, 0x96, 0xf9, 0x43, 0x59, 0xb0, 0xd8, 0xe2, - 0x44, 0x02, 0x41, 0x4f, 0x7b, 0x70, 0x88, 0x20, 0x0a, 0x53, 0x2d, 0x37, 0xe3, 0xf3, 0x0b, 0x55, - 0xd8, 0x37, 0x04, 0x32, 0x4e, 0x47, 0x34, 0x21, 0xb1, 0xd0, 0xb0, 0x51, 0x0a, 0x5b, 0x0e, 0x19, - 0x06, 0x03, 0x39, 0x30, 0xd8, 0xec, 0x66, 0x47, 0x2e, 0xa3, 0xc5, 0xfd, 0x71, 0x73, 0x60, 0xb9, - 0x7e, 0x19, 0x08, 0x05, 0x33, 0xaf, 0x37, 0x2f, 0x2d, 0x65, 0xe9, 0x0b, 0xa7, 0x8e, 0x2b, 0x94, - 0x52, 0x8d, 0x50, 0xdf, 0x82, 0x91, 0xb8, 0xca, 0x27, 0x90, 0x28, 0xa4, 0xf7, 0xad, 0x6a, 0xd5, - 0xb4, 0x3f, 0x10, 0x6a, 0x15, 0x13, 0x40, 0xa0, 0xa4, 0xa6, 0xd0, 0x3e, 0x41, 0xc9, 0xc3, 0x60, - 0x2b, 0x5a, 0x34, 0x82, 0xf5, 0x73, 0x46, 0x78, 0x13, 0xc3, 0x78, 0x00, 0x3e, 0x50, 0xfc, 0xa4, - 0x65, 0x49, 0x5f, 0xff, 0x2c, 0xaa, 0xd2, 0x8a, 0x95, 0x56, 0x4d, 0xc0, 0xe3, 0xbc, 0x46, 0x0e, - 0x00, 0xdf, 0x7d, 0x89, 0xc8, 0x8c, 0x79, 0xfd, 0x60, 0xbd, 0x36, 0x21, 0xb5, 0x00, 0x66, 0x48, - 0xd7, 0x05, 0x2a, 0x9f, 0xfe, 0xdd, 0x09, 0xa0, 0x3f, 0xe7, 0xe2, 0x3b, 0x7b, 0x4d, 0x9e, 0xad, - 0xa3, 0xb9, 0x6c, 0xbc, 0x60, 0xc0, 0x9b, 0xab, 0x63, 0xd8, 0xf8, 0x73, 0x84, 0xf7, 0xbb, 0xdd, - 0xcb, 0xc9, 0x6d, 0x2f, 0xf7, 0x3f, 0x60, 0xf5, 0xc2, 0x59, 0x73, 0x9a, 0x99, 0x39, 0x4b, 0x9b, - 0x0d, 0x9e, 0x63, 0x63, 0xde, 0x9c, 0x40, 0x92, 0xf1, 0x2f, 0xfb, 0x91, 0x9c, 0x38, 0x91, 0xcf, - 0x84, 0x42, 0x85, 0x93, 0x05, 0x65, 0xb1, 0x27, 0x05, 0xdd, 0xcb, 0xdd, 0xde, 0xdc, 0x25, 0xaf, - 0x1f, 0xf8, 0x64, 0x22, 0x14, 0x24, 0xe2, 0xea, 0xed, 0x2d, 0xfe, 0x66, 0xf9, 0x39, 0x7d, 0x7c, - 0xb5, 0x58, 0xb8, 0x91, 0x00, 0x93, 0xa8, 0x9e, 0x39, 0xc2, 0x22, 0x01, 0x65, 0x0c, 0xd8, 0xa5, - 0xfa, 0xaa, 0xc5, 0xd2, 0x73, 0x88, 0x10, 0x14, 0x82, 0x9e, 0x01, 0xc3, 0x5f, 0x06, 0x4e, 0xae, - 0xda, 0x41, 0x15, 0x45, 0x1f, 0xe6, 0xa3, 0x6d, 0xf5, 0x0b, 0x45, 0x50, 0x54, 0x69, 0xf2, 0xd2, - 0x71, 0x30, 0xa4, 0xb0, 0x62, 0x8c, 0xb5, 0x0a, 0xcb, 0x19, 0xb5, 0x66, 0xda, 0xd5, 0xb8, 0x9f, - 0x02, 0x8f, 0x2a, 0x80, 0x03, 0x41, 0x28, 0x8b, 0x89, 0x10, 0x32, 0x24, 0x3c, 0x72, 0xb9, 0xe1, - 0xe7, 0x79, 0x6e, 0x75, 0x2f, 0x26, 0xd0, 0x6d, 0xff, 0xe9, 0x42, 0xf1, 0x71, 0xf6, 0x1d, 0xcc, - 0x10, 0xc1, 0x4c, 0xf3, 0xcb, 0x39, 0x59, 0xd3, 0xac, 0xfe, 0x0b, 0xb1, 0xe2, 0x01, 0x4c, 0x43, - 0x45, 0xd8, 0x59, 0x54, 0x0e, 0x13, 0x04, 0x86, 0xa5, 0x08, 0x75, 0xc2, 0xb5, 0x6f, 0x85, 0xbc, - 0xb9, 0x06, 0x08, 0x1a, 0xe7, 0x80, 0x01, 0x5e, 0x0c, 0x4d, 0x40, 0x14, 0x25, 0xa5, 0xc4, 0x3e, - 0xce, 0x24, 0xf8, 0x25, 0xee, 0x31, 0x94, 0xf7, 0xd8, 0xd2, 0x5f, 0xf9, 0x8d, 0x77, 0xf9, 0x0c, - 0xb6, 0x37, 0xf6, 0x51, 0xf4, 0xcf, 0x47, 0x50, 0xcc, 0xbd, 0xdf, 0x0c, 0xc1, 0x59, 0x16, 0xf9, - 0xa9, 0x6c, 0x71, 0x6d, 0x09, 0xe0, 0xec, 0x95, 0x8e, 0x11, 0x82, 0x13, 0xcb, 0x69, 0x29, 0xf3, - 0x70, 0x43, 0x05, 0x55, 0xd5, 0x57, 0x5d, 0x63, 0x9c, 0x22, 0x24, 0x16, 0x45, 0x75, 0xb9, 0xf5, - 0xdd, 0x42, 0x82, 0xae, 0xdc, 0x2d, 0x9e, 0x39, 0x67, 0x07, 0x02, 0x46, 0x98, 0x11, 0xca, 0x3c, - 0x03, 0x96, 0xfa, 0x52, 0x06, 0x7d, 0x27, 0x40, 0x7d, 0x70, 0xfc, 0xc1, 0x2f, 0x11, 0xb5, 0x39, - 0xc5, 0xc0, 0x85, 0x40, 0xfa, 0x0e, 0x98, 0x03, 0x52, 0xc1, 0x96, 0xce, 0x07, 0x8a, 0xcb, 0x66, - 0x42, 0x95, 0xf1, 0xae, 0xf8, 0x28, 0x12, 0x14, 0x9e, 0x67, 0x80, 0x70, 0xe0, 0x3c, 0xa5, 0x78, - 0x90, 0x3e, 0x0e, 0x1a, 0x22, 0x8a, 0xc5, 0xf3, 0x02, 0x2c, 0x8b, 0x0c, 0xad, 0x2a, 0x47, 0x1c, - 0xe9, 0x14, 0x75, 0x3c, 0xb2, 0x7b, 0xf8, 0x8b, 0x58, 0x80, 0x80, 0x52, 0x38, 0xf8, 0x47, 0x3b, - 0xcf, 0x26, 0xae, 0xa8, 0x7e, 0x81, 0x97, 0x74, 0x78, 0xee, 0x0f, 0xbb, 0xd6, 0x68, 0xce, 0x7c, - 0xb7, 0x85, 0x9c, 0x49, 0x46, 0x47, 0xde, 0xe4, 0x90, 0x31, 0x30, 0x56, 0x57, 0xdb, 0x67, 0xb2, - 0x95, 0x3b, 0x18, 0x27, 0xf2, 0x51, 0x3c, 0x96, 0xd3, 0x5a, 0xc3, 0x72, 0x00, 0xcc, 0x32, 0x9c, - 0xb7, 0xdf, 0xff, 0xc5, 0x6c, 0x0a, 0xe5, 0x87, 0x1c, 0xd3, 0xe0, 0x8f, 0x11, 0x17, 0x13, 0xe1, - 0x18, 0x21, 0x89, 0x18, 0x6d, 0xb1, 0x86, 0x18, 0xb0, 0x3d, 0x26, 0xff, 0x4d, 0x3d, 0xb6, 0xe9, - 0xb6, 0xda, 0x69, 0xa7, 0xe0, 0xa4, 0x08, 0x23, 0x0c, 0x28, 0xcb, 0x59, 0xfb, 0x70, 0x47, 0x1b, - 0x1b, 0x1c, 0x6f, 0x67, 0x0c, 0x04, 0x30, 0xa8, 0xb6, 0x5a, 0xc2, 0x82, 0xa2, 0xb0, 0xe2, 0x5c, - 0x10, 0x85, 0x21, 0x71, 0x7d, 0x41, 0x32, 0xac, 0xaa, 0x85, 0x99, 0xee, 0x16, 0x3a, 0x9c, 0x5c, - 0x74, 0xc2, 0xf6, 0x40, 0x6d, 0x0b, 0x0c, 0x50, 0xc4, 0xf0, 0x5e, 0x7b, 0xc2, 0x21, 0x48, 0x54, - 0x7a, 0xcf, 0x07, 0xd6, 0x88, 0x79, 0xf8, 0xb9, 0x63, 0x6d, 0xc9, 0xc0, 0x1e, 0x77, 0x9e, 0x05, - 0x86, 0x72, 0xcd, 0x65, 0x1d, 0xc2, 0x22, 0x06, 0x43, 0xc5, 0xe8, 0x3a, 0x7c, 0xa4, 0x74, 0xb2, - 0x52, 0xab, 0xe9, 0x85, 0xba, 0x53, 0x29, 0xc0, 0xb0, 0x73, 0xcb, 0x1b, 0x7b, 0xfc, 0x19, 0xef, - 0x6a, 0x5c, 0x23, 0x19, 0x4c, 0x26, 0x9d, 0x08, 0xad, 0x05, 0xcc, 0xf0, 0x6d, 0x3e, 0xc5, 0xa3, - 0x6c, 0x7a, 0xdd, 0xb1, 0x55, 0x7a, 0xb7, 0xa5, 0xd7, 0x2c, 0xf9, 0xbb, 0x46, 0x9d, 0x6b, 0xd3, - 0x3e, 0x9b, 0x1a, 0xde, 0x24, 0xc3, 0x20, 0xae, 0x84, 0x60, 0xa6, 0x1d, 0xf1, 0xde, 0xf2, 0xb2, - 0xb9, 0x96, 0x71, 0x96, 0x63, 0x34, 0x63, 0xee, 0xab, 0x05, 0x1d, 0x1f, 0xa4, 0xec, 0x9a, 0xb3, - 0xc1, 0xc0, 0x44, 0x16, 0x5a, 0x5c, 0x51, 0x85, 0x07, 0x21, 0x46, 0x2f, 0xfe, 0xb2, 0x8d, 0x16, - 0xce, 0x7f, 0xb8, 0x18, 0x20, 0xb3, 0x0e, 0xfb, 0x85, 0xde, 0x57, 0xe7, 0xd9, 0x38, 0x4d, 0x0c, - 0xa3, 0x34, 0x87, 0x86, 0xf9, 0x29, 0xf3, 0x0e, 0x28, 0x0e, 0x00, 0x19, 0x5c, 0xd0, 0x5e, 0x19, - 0xa4, 0xdc, 0x9a, 0x4a, 0x78, 0xc4, 0x5b, 0x11, 0x60, 0x16, 0x9a, 0x62, 0x80, 0x58, 0xa0, 0x17, - 0xc4, 0xb5, 0xed, 0x35, 0xe1, 0x90, 0x60, 0x14, 0x23, 0xda, 0xb8, 0xaf, 0x5b, 0x75, 0x1a, 0xa0, - 0x9f, 0x11, 0xbe, 0x04, 0x14, 0x5c, 0x10, 0x82, 0x81, 0xb2, 0x7a, 0x91, 0x8d, 0xc7, 0x44, 0x85, - 0x46, 0x85, 0xed, 0x6d, 0xb3, 0x46, 0xff, 0xbc, 0xc1, 0xe8, 0xd3, 0x80, 0xe1, 0xd8, 0x00, 0x12, - 0xc8, 0xd2, 0x2f, 0x15, 0x4b, 0xd5, 0x07, 0xaf, 0xbc, 0x7b, 0xbc, 0x22, 0x18, 0x0a, 0x49, 0x4a, - 0x94, 0x89, 0x97, 0x8e, 0x4b, 0x03, 0x95, 0xa8, 0x54, 0x5d, 0x02, 0xa2, 0xff, 0x13, 0xc5, 0x38, - 0x0f, 0x2c, 0x32, 0xc0, 0x64, 0x8b, 0x30, 0x77, 0xca, 0x8e, 0xae, 0x20, 0x20, 0x32, 0x2c, 0xea, - 0xdb, 0x14, 0xb6, 0xad, 0xea, 0xdf, 0xa4, 0x9c, 0x29, 0xa8, 0xfa, 0x53, 0x45, 0x93, 0xe6, 0x80, - 0x43, 0xf5, 0x70, 0xc8, 0x53, 0x5c, 0xfc, 0x56, 0xdc, 0x1a, 0x6c, 0x1c, 0x0e, 0x42, 0x92, 0x06, - 0xa2, 0x44, 0x6b, 0xb0, 0x79, 0x61, 0x37, 0xbf, 0x67, 0x08, 0x84, 0x01, 0x2d, 0xf8, 0x7e, 0xbd, - 0x79, 0xb7, 0xbb, 0x83, 0x08, 0x7e, 0xff, 0xac, 0x48, 0x78, 0x58, 0xa8, 0x1e, 0xe5, 0x42, 0x00, - 0x1e, 0x98, 0x71, 0x40, 0x95, 0x76, 0x48, 0x1c, 0x16, 0x37, 0x88, 0xc2, 0x2c, 0xd9, 0xfa, 0x3b, - 0x90, 0x49, 0x11, 0xf8, 0x47, 0x63, 0x55, 0x55, 0x55, 0x55, 0x52, 0x67, 0x12, 0x3e, 0xaa, 0xd5, - 0x55, 0x6b, 0x5a, 0xec, 0xab, 0xaa, 0xe2, 0x46, 0x36, 0xac, 0x8b, 0x29, 0xf3, 0xf2, 0x56, 0xa0, - 0x6f, 0x5d, 0x83, 0x98, 0x88, 0xba, 0x9c, 0x28, 0x5c, 0x6b, 0x1c, 0x81, 0xc6, 0x03, 0x5e, 0x0f, - 0xc1, 0x54, 0xa8, 0x21, 0xf2, 0x28, 0x83, 0xeb, 0xbd, 0x2d, 0xf0, 0xcb, 0x28, 0x91, 0x4b, 0x10, - 0x2c, 0x37, 0x04, 0x01, 0x10, 0xa6, 0xbe, 0xae, 0x6f, 0x37, 0x51, 0x73, 0x9c, 0x6e, 0x34, 0x9c, - 0x2b, 0x55, 0x9e, 0x01, 0xc0, 0x6b, 0x89, 0xf0, 0xeb, 0x80, 0x43, 0x4c, 0xd9, 0x19, 0x01, 0x94, - 0x47, 0xd7, 0x73, 0xdb, 0x0a, 0xbd, 0xbc, 0xcf, 0x68, 0x3d, 0x7b, 0xd6, 0x7e, 0x9b, 0x68, 0x3a, - 0xba, 0xde, 0x28, 0x0e, 0x2d, 0xef, 0x79, 0x7c, 0x37, 0x80, 0x29, 0x78, 0x73, 0x94, 0xa2, 0x2f, - 0x31, 0xf9, 0x5c, 0x96, 0xc8, 0xc5, 0x46, 0x2e, 0x33, 0x95, 0x5e, 0x0a, 0x2a, 0x84, 0xc0, 0x38, - 0x28, 0xae, 0x51, 0x71, 0xba, 0x28, 0x32, 0xc3, 0x9d, 0x40, 0x47, 0xe5, 0x75, 0xe0, 0xa4, 0x29, - 0x2c, 0x30, 0x3a, 0x55, 0x0e, 0x38, 0x4d, 0xac, 0x5c, 0x5a, 0x92, 0x5b, 0x72, 0xf6, 0x71, 0x17, - 0x98, 0x27, 0x39, 0xea, 0xf0, 0x7c, 0x1c, 0xfa, 0xa7, 0x07, 0xe7, 0x80, 0x1c, 0x48, 0x1e, 0x14, - 0xd4, 0x41, 0xe9, 0x3c, 0x0d, 0x64, 0x21, 0x77, 0x0a, 0x0e, 0x01, 0xf0, 0x9d, 0x07, 0xdf, 0x65, - 0xf0, 0xfc, 0x49, 0x59, 0x0f, 0x53, 0x85, 0x20, 0xd4, 0xac, 0x0e, 0x87, 0x8e, 0x1d, 0x83, 0xfb, - 0x28, 0x5a, 0x12, 0x3a, 0x71, 0x22, 0x42, 0x87, 0x38, 0x38, 0x62, 0xaf, 0x35, 0xf3, 0xd7, 0xca, - 0xe7, 0x1f, 0x69, 0x7e, 0x0e, 0xd8, 0x93, 0xb6, 0xc3, 0xbc, 0xac, 0xe2, 0x42, 0x00, 0xae, 0xa9, - 0x3b, 0x9e, 0x16, 0x3d, 0xe1, 0xc3, 0x8f, 0x7f, 0xdf, 0x81, 0x04, 0x09, 0x00, 0x9c, 0xcf, 0x82, - 0xbd, 0x6f, 0xcb, 0x9b, 0x07, 0x6c, 0x63, 0x81, 0x24, 0x09, 0x03, 0x2e, 0xc3, 0xe7, 0x71, 0x58, - 0xaa, 0x3e, 0x2f, 0x5a, 0x46, 0xca, 0xb8, 0x80, 0x51, 0x03, 0xb0, 0x4a, 0xec, 0x25, 0x02, 0xa5, - 0x80, 0x79, 0xb1, 0xa4, 0x0e, 0xa4, 0x09, 0xf9, 0x8b, 0xaa, 0xf8, 0x44, 0x96, 0x10, 0xfc, 0x22, - 0x1d, 0x56, 0xd4, 0x49, 0x17, 0x51, 0xd7, 0x05, 0x1d, 0x47, 0x70, 0x6c, 0x07, 0x04, 0x98, 0x54, - 0x27, 0xf8, 0xd3, 0x00, 0x10, 0xf2, 0xf8, 0xcd, 0xa4, 0x65, 0x34, 0xa6, 0xc8, 0xa4, 0x9c, 0xe5, - 0x27, 0x80, 0x62, 0x9c, 0xd8, 0x2e, 0xcc, 0xf1, 0x96, 0x55, 0x8c, 0xa9, 0x60, 0xec, 0xfa, 0xce, - 0x9f, 0xac, 0x5f, 0x04, 0x11, 0xb6, 0xfe, 0x3a, 0x18, 0xb0, 0x8b, 0x0e, 0x4f, 0x51, 0x59, 0x23, - 0x92, 0x5b, 0x13, 0xf2, 0xc4, 0xff, 0xf0, 0xea, 0x12, 0x00, 0xfe, 0xbd, 0x46, 0x4d, 0x8b, 0xff, - 0xff, 0xfd, 0xad, 0xe4, 0xe3, 0xa8, 0x55, 0x21, 0x97, 0xe6, 0xf9, 0xff, 0xed, 0x88, 0xb4, 0x20, - 0x9a, 0x0a, 0x32, 0xd1, 0x34, 0xf5, 0xd6, 0xdd, 0xb6, 0xde, 0x0e, 0x61, 0x41, 0x0e, 0x4f, 0x8d, - 0xa4, 0x9c, 0xdd, 0x74, 0x68, 0x46, 0x4b, 0x14, 0xaa, 0xa8, 0x54, 0xc9, 0x87, 0x29, 0x55, 0xf4, - 0xdf, 0x81, 0x06, 0x14, 0xb6, 0xc2, 0x00, 0x06, 0x53, 0xb5, 0x9b, 0x60, 0x01, 0x9e, 0x28, 0x00, - 0xa7, 0x8a, 0x49, 0xa9, 0x43, 0x79, 0x65, 0x72, 0x55, 0x2f, 0x62, 0xe0, 0xcb, 0x58, 0x14, 0x04, - 0x8d, 0x90, 0xbf, 0x3f, 0x53, 0xe3, 0x81, 0xc9, 0x2d, 0x44, 0x0e, 0x57, 0x83, 0xa7, 0x81, 0x55, - 0x59, 0x03, 0x87, 0x9e, 0xf2, 0x83, 0x64, 0x30, 0x72, 0x1f, 0xff, 0xa4, 0x39, 0xd0, 0xe2, 0x16, - 0x02, 0x28, 0x06, 0xcb, 0x5d, 0x0e, 0xf9, 0x7c, 0x49, 0x96, 0x52, 0x52, 0xfc, 0xa4, 0xa5, 0x8c, - 0x8a, 0xd1, 0xec, 0x28, 0x71, 0xa9, 0x41, 0xc6, 0xa5, 0xc9, 0xc7, 0x18, 0xd0, 0xe3, 0x1a, 0x1d, - 0x8d, 0x14, 0xd8, 0xab, 0x16, 0xc5, 0xb1, 0x56, 0x2a, 0xfc, 0x30, 0xa0, 0x30, 0xfd, 0x13, 0x84, - 0x5f, 0xd3, 0x57, 0xf2, 0xa3, 0x2e, 0xce, 0x7b, 0xa0, 0xd6, 0x56, 0x7d, 0x3e, 0xb1, 0x56, 0x73, - 0x2b, 0x58, 0x31, 0xbb, 0xb8, 0x14, 0x21, 0x49, 0x50, 0x6f, 0x8a, 0xbf, 0xce, 0x74, 0xef, 0x37, - 0xd4, 0x38, 0x57, 0x92, 0xd4, 0x78, 0xf5, 0x2a, 0xf6, 0x96, 0xdf, 0xce, 0xe5, 0x25, 0x2a, 0x8d, - 0x54, 0x3c, 0xa0, 0x23, 0xb3, 0x4f, 0x73, 0xff, 0xfd, 0x97, 0x75, 0xd3, 0x4e, 0xf6, 0x9b, 0x6d, - 0xa7, 0x1d, 0x99, 0x36, 0xde, 0xdb, 0x7f, 0x82, 0x9b, 0x30, 0x92, 0xc9, 0xb9, 0xb3, 0x3c, 0xf1, - 0xce, 0xc4, 0x12, 0x70, 0x98, 0xaa, 0x19, 0x48, 0xdd, 0xee, 0xf9, 0x8a, 0x92, 0xfe, 0x3e, 0xad, - 0x7b, 0xbb, 0x5a, 0x7e, 0x33, 0x57, 0x10, 0xe2, 0x4b, 0xde, 0xed, 0x3b, 0x6f, 0xc1, 0x40, 0x44, - 0x14, 0x90, 0x1d, 0x3e, 0x16, 0xbb, 0xc1, 0xfb, 0x96, 0x9b, 0x6e, 0x80, 0xf6, 0xf6, 0x6f, 0x67, - 0x04, 0x01, 0x11, 0x77, 0x93, 0xb7, 0x9b, 0x0f, 0xb8, 0x29, 0x82, 0xcc, 0x73, 0x31, 0xca, 0x81, - 0xef, 0xb9, 0x9c, 0x65, 0x86, 0xac, 0xfc, 0xe2, 0x9e, 0xcc, 0xb1, 0x84, 0x04, 0x02, 0xbc, 0x23, - 0x7d, 0xe8, 0xdd, 0xd3, 0x47, 0x7d, 0xf0, 0xd9, 0x96, 0x10, 0x38, 0x2a, 0xc2, 0xaf, 0xa9, 0xe3, - 0x27, 0x3c, 0x48, 0x53, 0xa9, 0x37, 0x19, 0xcb, 0x13, 0xe7, 0xf4, 0xad, 0xec, 0xe6, 0xcf, 0x60, - 0x92, 0x21, 0x19, 0x60, 0x36, 0xe1, 0x01, 0x21, 0x48, 0x86, 0xcb, 0x48, 0x0f, 0x96, 0xdf, 0x0e, - 0x2b, 0x77, 0x71, 0xf7, 0xd3, 0x2c, 0x62, 0xb1, 0x46, 0x28, 0x3d, 0x9c, 0x40, 0x90, 0xa1, 0x56, - 0xbe, 0x6c, 0x63, 0x77, 0xac, 0xa8, 0xba, 0x7e, 0x0a, 0x44, 0x82, 0xcd, 0xbd, 0x2c, 0xb8, 0xaa, - 0x2e, 0x68, 0x92, 0x05, 0xaa, 0xbc, 0x5c, 0x31, 0x04, 0xa4, 0x56, 0xae, 0xee, 0x20, 0xe7, 0x7d, - 0x92, 0xf4, 0xe1, 0x84, 0x44, 0x85, 0x36, 0xcb, 0x8e, 0xef, 0x3a, 0x9f, 0x2f, 0x85, 0xf5, 0x65, - 0xb0, 0xe2, 0x80, 0x1a, 0x97, 0x87, 0xbd, 0x83, 0xc5, 0x7f, 0xf3, 0xcf, 0x1d, 0x6d, 0x8a, 0xbc, - 0x2f, 0xd4, 0x0c, 0x53, 0xc2, 0xcf, 0xe2, 0x70, 0x3f, 0x07, 0xe2, 0xe3, 0x21, 0x72, 0xb2, 0xe6, - 0x00, 0x14, 0x0c, 0xb5, 0xf9, 0x74, 0xc6, 0x7c, 0x3e, 0x5c, 0x4f, 0x14, 0x3f, 0x01, 0x28, 0x55, - 0x80, 0x25, 0x0e, 0x71, 0xf1, 0xc6, 0x17, 0x98, 0x4c, 0x7b, 0x1f, 0xc8, 0x2f, 0x8e, 0xf1, 0x72, - 0x03, 0x83, 0x84, 0xf6, 0xe7, 0x36, 0x0d, 0x57, 0x79, 0x8b, 0xaa, 0xf9, 0x78, 0xba, 0x9b, 0x9b, - 0x51, 0x71, 0x7f, 0x17, 0xa8, 0xb8, 0xbd, 0x54, 0x5f, 0xcb, 0xd5, 0x46, 0xf3, 0x11, 0x75, 0x13, - 0xdd, 0x6b, 0x27, 0x10, 0x5c, 0xb9, 0xdd, 0xfc, 0x25, 0xdd, 0xc6, 0xfd, 0x5d, 0xfc, 0x99, 0x21, - 0xe2, 0x22, 0x8d, 0xcb, 0xdc, 0xb7, 0xfb, 0xde, 0xe6, 0xc4, 0x10, 0x4d, 0x5a, 0xf1, 0x21, 0x81, - 0xc4, 0xba, 0xd3, 0xb5, 0xa9, 0xf2, 0xd9, 0xe2, 0xfe, 0x14, 0x26, 0x25, 0xc4, 0xd7, 0x50, 0xf1, - 0x48, 0x78, 0xf5, 0x8a, 0xb7, 0x16, 0xe8, 0x9e, 0x7a, 0xac, 0x66, 0x2f, 0x8e, 0xda, 0x57, 0x8b, - 0xd6, 0x66, 0x61, 0x78, 0x90, 0xa4, 0x5c, 0xad, 0xaa, 0xc7, 0x5c, 0xfe, 0xab, 0x77, 0xda, 0xaa, - 0x32, 0x59, 0x89, 0xf8, 0x42, 0x30, 0x49, 0x8a, 0x2b, 0xcd, 0xc1, 0x86, 0xf6, 0x34, 0xdf, 0x77, - 0x45, 0x2d, 0x7c, 0x79, 0xa1, 0x3b, 0x38, 0xb5, 0x69, 0xda, 0x3e, 0x78, 0x44, 0x40, 0xdc, 0x37, - 0xd4, 0x1d, 0xb9, 0x1c, 0x50, 0x2c, 0xc5, 0x15, 0x90, 0x5c, 0x07, 0x25, 0x24, 0xa3, 0x85, 0x5d, - 0x9a, 0x04, 0x95, 0x29, 0x97, 0xe2, 0x58, 0x70, 0x2a, 0xc7, 0xe7, 0x8b, 0xe6, 0x17, 0x58, 0xb6, - 0x30, 0xea, 0x54, 0xfb, 0xf8, 0x34, 0x6a, 0x4c, 0x97, 0x91, 0x29, 0xb2, 0x5d, 0x85, 0x31, 0x79, - 0xac, 0xc2, 0x02, 0x06, 0xcb, 0x7f, 0xcd, 0xef, 0x62, 0xc9, 0xd6, 0x95, 0x40, 0x36, 0x4e, 0xbc, - 0x23, 0x95, 0x3b, 0x03, 0x42, 0xf3, 0x54, 0x0e, 0xfb, 0x16, 0xd6, 0xc1, 0xf2, 0x1a, 0xc5, 0x5a, - 0x90, 0x47, 0x87, 0x0d, 0x7e, 0xf3, 0xcf, 0xa9, 0x2b, 0xee, 0x5f, 0x04, 0x02, 0x09, 0x57, 0x72, - 0xe2, 0x01, 0x1f, 0x5e, 0x18, 0x04, 0x01, 0x49, 0xce, 0x1e, 0xfe, 0x5c, 0x6d, 0xa6, 0x9a, 0x6b, - 0x74, 0xaf, 0x97, 0x84, 0x05, 0x95, 0x86, 0x62, 0x8e, 0xb8, 0xec, 0x9e, 0x99, 0x3a, 0xd9, 0x5c, - 0x31, 0xcd, 0x63, 0xbe, 0xc7, 0xf8, 0x07, 0x31, 0xae, 0x5d, 0xb2, 0xef, 0xf8, 0x28, 0xe5, 0x42, - 0xfe, 0x1c, 0x9e, 0x63, 0xbe, 0xf2, 0xf8, 0x24, 0xd6, 0x06, 0x26, 0x17, 0x3b, 0x88, 0x02, 0x00, - 0x50, 0x8e, 0xea, 0x6c, 0x70, 0xe0, 0x2a, 0xa7, 0x24, 0xba, 0xa9, 0x88, 0x16, 0x1d, 0xfd, 0xfc, - 0x09, 0x03, 0xe0, 0xf7, 0x83, 0x19, 0x28, 0xfa, 0x72, 0xdd, 0x24, 0x8d, 0x83, 0xb6, 0x29, 0x7e, - 0x24, 0x09, 0x01, 0x48, 0x37, 0xf9, 0xb8, 0x4a, 0xe8, 0x4c, 0x3a, 0x28, 0xe2, 0xbb, 0x97, 0x9e, - 0xa2, 0x27, 0x72, 0x2f, 0x2c, 0xc9, 0x1f, 0x9d, 0x61, 0x38, 0x14, 0x08, 0xc2, 0x26, 0x07, 0xa3, - 0xf9, 0x8a, 0xf7, 0x77, 0xcd, 0x5a, 0xab, 0x89, 0xfd, 0xcf, 0xfa, 0xe5, 0xd6, 0xa5, 0xe1, 0x18, - 0x76, 0xb9, 0x55, 0x32, 0x6a, 0x8f, 0x42, 0x30, 0xf6, 0x89, 0x26, 0x4f, 0xc2, 0x39, 0x35, 0x35, - 0xa3, 0x26, 0x79, 0x96, 0x85, 0x87, 0xc4, 0x41, 0x00, 0x64, 0x85, 0x80, 0xe9, 0x18, 0x5d, 0xf0, - 0xc0, 0x20, 0x0a, 0x08, 0x2b, 0xb2, 0x48, 0x05, 0x61, 0xcd, 0x12, 0x85, 0x46, 0x74, 0xfa, 0xe4, - 0xe0, 0xef, 0xc2, 0xc3, 0x96, 0x57, 0xad, 0xeb, 0x89, 0x82, 0x5b, 0xde, 0x4c, 0xaa, 0xfa, 0x7b, - 0x8e, 0x24, 0x11, 0x94, 0xb1, 0x85, 0xdc, 0x6c, 0xf1, 0x2a, 0xcf, 0x12, 0x19, 0xc4, 0xfe, 0x88, - 0xb5, 0xe3, 0x5d, 0x9f, 0x4f, 0xf0, 0x53, 0xa4, 0x4c, 0xb9, 0xd8, 0x96, 0xac, 0x3b, 0xc1, 0xa5, - 0x55, 0xef, 0x08, 0x9a, 0xb6, 0xc4, 0xf3, 0x10, 0x20, 0x11, 0x95, 0xee, 0xc6, 0xbe, 0x71, 0x02, - 0x01, 0x61, 0xb5, 0x28, 0xc2, 0x97, 0xfb, 0xad, 0x29, 0x67, 0x11, 0xc6, 0x69, 0x41, 0xc4, 0x04, - 0x01, 0x4e, 0x5f, 0x16, 0xee, 0x96, 0xa7, 0xd1, 0x6b, 0xc2, 0x01, 0x1d, 0xf9, 0xda, 0x19, 0x56, - 0xe3, 0xbf, 0xc2, 0x01, 0x81, 0x1a, 0xba, 0x5c, 0xb9, 0xf0, 0xa4, 0xd8, 0x6d, 0x17, 0xe1, 0x8b, - 0x88, 0xf4, 0x3b, 0x95, 0x4e, 0x90, 0xcf, 0x9b, 0x4d, 0x28, 0x16, 0x5c, 0x6b, 0x0e, 0x10, 0x08, - 0x8e, 0xd5, 0x2c, 0xd4, 0x57, 0xe2, 0x9a, 0xa9, 0x69, 0x88, 0x12, 0x14, 0x2a, 0xaa, 0xaa, 0xaf, - 0x8e, 0xf9, 0x6f, 0x95, 0x47, 0xbc, 0x6e, 0xa2, 0xa5, 0x82, 0x00, 0xc0, 0xd2, 0x54, 0xb9, 0x59, - 0x2d, 0x11, 0x7a, 0x5e, 0x3e, 0xc9, 0x2b, 0xc1, 0xdc, 0xd5, 0xd0, 0x3b, 0xf6, 0xfb, 0x14, 0x6e, - 0x0a, 0xeb, 0x69, 0x93, 0xff, 0x88, 0x12, 0x30, 0xec, 0xe9, 0xee, 0xb6, 0xd0, 0xc0, 0xb5, 0x8d, - 0x2b, 0x17, 0x01, 0x15, 0x4b, 0x3c, 0x37, 0x3e, 0x33, 0x93, 0xaa, 0xbe, 0x61, 0x17, 0xb9, 0x7b, - 0x1a, 0x91, 0x33, 0x1b, 0xc1, 0x28, 0x85, 0x55, 0xad, 0x6d, 0xf0, 0x99, 0x35, 0x55, 0x55, 0x5f, - 0x29, 0xd6, 0xb7, 0x11, 0x04, 0xe6, 0x1c, 0x4b, 0xc9, 0xb9, 0x26, 0x9d, 0xb1, 0x0b, 0x1f, 0xa8, - 0x88, 0xf2, 0xdb, 0xad, 0x6b, 0x52, 0x60, 0xbe, 0x4c, 0x48, 0x52, 0xf3, 0xb1, 0x51, 0xeb, 0x1f, - 0xc7, 0x9f, 0x16, 0x66, 0x4c, 0x17, 0xee, 0x24, 0x48, 0xdb, 0x30, 0x55, 0x0b, 0x98, 0xf1, 0xd0, - 0x16, 0x02, 0xe8, 0x05, 0x2c, 0x34, 0xde, 0xa7, 0x21, 0x85, 0xea, 0x47, 0xa7, 0xb4, 0x16, 0x25, - 0xe2, 0x7c, 0x7e, 0x39, 0x1f, 0xf3, 0x1d, 0x2e, 0xd7, 0x06, 0x21, 0x13, 0x6c, 0x55, 0xff, 0xc1, - 0x54, 0x98, 0x02, 0xa5, 0x86, 0xe0, 0xf8, 0xbc, 0xef, 0xf7, 0x8a, 0xde, 0x91, 0x70, 0x40, 0x11, - 0xb4, 0x6c, 0x8b, 0xaa, 0xaa, 0xaa, 0xaa, 0xf0, 0xc0, 0xcb, 0xb4, 0xb5, 0x4a, 0x8a, 0xc5, 0x7d, - 0x9c, 0xd8, 0x42, 0x08, 0x8f, 0x2c, 0xcb, 0x03, 0xe1, 0x01, 0x7b, 0x4b, 0xb7, 0x5e, 0x10, 0x25, - 0xdd, 0xaf, 0x04, 0x23, 0x62, 0x3c, 0xba, 0x1a, 0x57, 0x62, 0x93, 0x0a, 0xec, 0x12, 0xab, 0x59, - 0x7b, 0x69, 0x25, 0x2b, 0x49, 0x5b, 0x4a, 0x23, 0x8f, 0x2d, 0xa7, 0x0e, 0xf6, 0x9f, 0x89, 0x08, - 0x8d, 0x92, 0x3e, 0xd5, 0xd2, 0x0c, 0x47, 0xa9, 0xf4, 0x6b, 0xb3, 0xdf, 0x37, 0x40, 0xb8, 0xa7, - 0x74, 0xbc, 0x91, 0xa0, 0x7a, 0x68, 0xd7, 0xa1, 0xe1, 0x92, 0x05, 0xf0, 0xcc, 0xe0, 0x10, 0xbb, - 0x99, 0x6d, 0xc7, 0xd7, 0x97, 0x59, 0x26, 0x58, 0xb3, 0xbe, 0x0d, 0x8d, 0x22, 0xdc, 0xb9, 0x38, - 0x29, 0x3f, 0x82, 0x18, 0xeb, 0xcf, 0xea, 0x33, 0x90, 0xd5, 0xa8, 0x63, 0xb2, 0x6e, 0xea, 0x20, - 0x49, 0x0b, 0x26, 0x78, 0x99, 0x2a, 0xab, 0xc2, 0x10, 0x45, 0x7b, 0x9b, 0x9a, 0xf8, 0x23, 0x85, - 0x5b, 0x98, 0xa8, 0x07, 0xe4, 0x16, 0x75, 0x1e, 0xf1, 0x22, 0x89, 0x4d, 0x75, 0xa5, 0x86, 0x41, - 0x40, 0x50, 0xa7, 0x82, 0xa2, 0x10, 0xfb, 0x21, 0xd5, 0xce, 0x55, 0x1c, 0xf3, 0xba, 0x58, 0x39, - 0x71, 0xab, 0x67, 0x32, 0x2c, 0x50, 0xe8, 0x5c, 0xf0, 0x00, 0x21, 0x8f, 0xc4, 0x89, 0x19, 0x75, - 0x15, 0x9a, 0xeb, 0x53, 0xe6, 0x5e, 0xb5, 0x5e, 0x26, 0x30, 0x86, 0xcf, 0x56, 0xd3, 0x09, 0x86, - 0xe1, 0xad, 0x7b, 0x58, 0x61, 0x3e, 0xdc, 0x1b, 0xb8, 0x36, 0x21, 0x33, 0x07, 0xbf, 0xa1, 0x39, - 0x5e, 0xde, 0x17, 0xa8, 0x6f, 0x9c, 0xc4, 0xc6, 0x6b, 0x46, 0xea, 0x30, 0xa6, 0x61, 0xb0, 0x2e, - 0x2e, 0x7c, 0xc9, 0x66, 0xec, 0xe5, 0x61, 0xf8, 0x81, 0x87, 0x67, 0xf5, 0x5e, 0xf7, 0xb0, 0x9d, - 0xf8, 0x91, 0x84, 0xc4, 0x3c, 0x30, 0x00, 0x2c, 0x3a, 0xa1, 0x86, 0xb7, 0x41, 0x8c, 0xf9, 0x05, - 0xb7, 0x4b, 0xf4, 0xc9, 0xfc, 0x23, 0x51, 0x64, 0x25, 0x15, 0x52, 0x9e, 0x3f, 0x35, 0xe0, 0xe4, - 0x4e, 0x0e, 0x3d, 0x56, 0x20, 0x3d, 0x30, 0x55, 0xc8, 0x78, 0x56, 0xbf, 0xc4, 0x99, 0x59, 0x4b, - 0x19, 0x11, 0x98, 0x88, 0xf7, 0x1e, 0xf7, 0xc2, 0x25, 0x57, 0x5a, 0x6a, 0x9a, 0xac, 0x98, 0xfc, - 0x32, 0x3f, 0x4d, 0xbb, 0xf6, 0x4b, 0xf2, 0xf3, 0xf6, 0xbf, 0x19, 0x0b, 0x54, 0xbc, 0xbd, 0x55, - 0x79, 0xcd, 0x94, 0xd7, 0xe0, 0x94, 0x92, 0xb7, 0x31, 0x7c, 0xfc, 0xee, 0x6c, 0x70, 0xc4, 0x29, - 0x64, 0xab, 0x69, 0x7b, 0xb6, 0xf9, 0xb0, 0x4b, 0x03, 0xde, 0x7f, 0x49, 0x40, 0x68, 0xc7, 0xc2, - 0x37, 0xbb, 0xdc, 0xf7, 0xfa, 0xae, 0x26, 0x30, 0xe2, 0xb2, 0xe3, 0xad, 0xeb, 0x96, 0xc5, 0x6e, - 0x72, 0xc7, 0x62, 0xba, 0xe1, 0x01, 0x03, 0xee, 0x4f, 0x8e, 0x58, 0x7e, 0x13, 0xcc, 0x17, 0xc9, - 0x98, 0x17, 0xa3, 0xc4, 0x46, 0x90, 0x8d, 0xcb, 0xb7, 0x55, 0xd1, 0x4c, 0x67, 0x33, 0x2c, 0x71, - 0xf5, 0x06, 0x64, 0x05, 0xd2, 0x72, 0x79, 0x29, 0xe1, 0x15, 0xfc, 0x2b, 0x88, 0xac, 0x45, 0x71, - 0x1d, 0xdd, 0xdd, 0xeb, 0x94, 0x95, 0xa8, 0x4f, 0x98, 0xf2, 0xfb, 0xf9, 0x29, 0x16, 0x36, 0xf8, - 0x92, 0x11, 0x45, 0xdf, 0xc2, 0x22, 0x75, 0x27, 0xcf, 0x37, 0xa7, 0x89, 0x12, 0x11, 0x2a, 0x6f, - 0xc5, 0x99, 0x31, 0x05, 0xe3, 0x1f, 0x1b, 0x33, 0x67, 0xe2, 0x46, 0x10, 0xb1, 0x9f, 0xb4, 0xfc, - 0x2f, 0x44, 0xfc, 0x5d, 0xbb, 0xbd, 0xe2, 0x3d, 0xa3, 0xd7, 0xe1, 0x1d, 0x42, 0xdf, 0x4a, 0xd5, - 0x78, 0xba, 0xe2, 0x62, 0x0a, 0xa2, 0xeb, 0x17, 0x5a, 0xf1, 0x03, 0xa7, 0x7e, 0x5e, 0xba, 0xa9, - 0x9b, 0x2d, 0x26, 0x19, 0xc4, 0x7c, 0x4f, 0x3f, 0xf3, 0xf1, 0xbd, 0x93, 0x55, 0x11, 0x84, 0x45, - 0x1d, 0x91, 0x21, 0x53, 0x43, 0xf8, 0x91, 0x9c, 0x5c, 0x5e, 0xa4, 0xf2, 0x46, 0x25, 0xdb, 0x2c, - 0xc4, 0x9c, 0x14, 0xcf, 0x00, 0x3e, 0x18, 0x66, 0x00, 0x0e, 0x7a, 0x56, 0x6c, 0x49, 0xe5, 0xfe, - 0xfe, 0xdb, 0x69, 0xa4, 0x2a, 0xc5, 0x5a, 0x49, 0x69, 0xb6, 0x6e, 0x27, 0xad, 0xa1, 0x80, 0xb5, - 0x55, 0xff, 0xa2, 0x65, 0xc1, 0x08, 0x52, 0xe3, 0xca, 0xac, 0xc3, 0xbc, 0xb0, 0x38, 0x60, 0xc4, - 0xb1, 0xc7, 0x2f, 0x07, 0x1b, 0x9c, 0x59, 0x87, 0x1d, 0xc5, 0xc2, 0x30, 0xa4, 0x1f, 0x40, 0xf1, - 0x95, 0x47, 0x6e, 0x56, 0x67, 0x87, 0x9e, 0x70, 0xe3, 0x87, 0x70, 0xbf, 0x36, 0xc3, 0xd2, 0x80, - 0x12, 0xde, 0xb4, 0x32, 0x67, 0x6c, 0x37, 0xae, 0xbf, 0x37, 0x79, 0x35, 0x0b, 0x40, 0x7d, 0xc3, - 0x2a, 0x2f, 0x93, 0xbf, 0xed, 0xe2, 0x04, 0x04, 0x48, 0xae, 0xd3, 0x44, 0xd1, 0x36, 0x2a, 0x1d, - 0xbc, 0xab, 0xa9, 0xf8, 0xea, 0xc5, 0xf7, 0x9f, 0xb0, 0x6b, 0x50, 0xbf, 0x14, 0x55, 0x5a, 0xd6, - 0xaf, 0x94, 0x82, 0xb7, 0x79, 0x39, 0x4f, 0xaa, 0x61, 0x1e, 0x43, 0x2a, 0xd2, 0xf1, 0xd1, 0x71, - 0x4d, 0x22, 0x60, 0xa6, 0x78, 0x7c, 0x97, 0xe9, 0xbf, 0x82, 0xa8, 0xf0, 0x58, 0x70, 0x7b, 0x30, - 0xee, 0x3c, 0x70, 0x50, 0xb4, 0x22, 0x2b, 0x1a, 0xa2, 0x39, 0xe7, 0x64, 0xf6, 0x9a, 0xe2, 0x61, - 0x49, 0xc0, 0xb0, 0x58, 0xc9, 0x01, 0xa3, 0xfb, 0xbe, 0xe4, 0x8d, 0x10, 0x0c, 0x4c, 0xe6, 0x08, - 0xc1, 0x37, 0xa6, 0x87, 0xc8, 0x66, 0xd5, 0x5e, 0xad, 0x66, 0xa8, 0x8c, 0x87, 0x08, 0x02, 0x72, - 0x89, 0x68, 0xe2, 0xb7, 0x76, 0xdd, 0xeb, 0x88, 0x12, 0x14, 0x30, 0x3b, 0x72, 0xf7, 0x49, 0xa4, - 0x25, 0x86, 0x59, 0xc8, 0x82, 0x41, 0x2d, 0xae, 0xa0, 0x81, 0xf6, 0xc2, 0x24, 0xb5, 0x2d, 0xb9, - 0x8e, 0xf8, 0xf8, 0xb9, 0xfe, 0xce, 0xef, 0x2a, 0x5e, 0x27, 0x86, 0xc6, 0x61, 0x33, 0xf1, 0x25, - 0xcc, 0xc5, 0x90, 0x15, 0xb7, 0x09, 0x76, 0x55, 0x5c, 0xfd, 0x08, 0xe9, 0x39, 0x02, 0x75, 0xaf, - 0x98, 0x20, 0xf7, 0x85, 0x22, 0x04, 0x82, 0x22, 0xa6, 0x1d, 0xd5, 0x01, 0xf7, 0xa1, 0xbb, 0xe0, - 0xa8, 0xb1, 0xba, 0x6d, 0xcf, 0x8f, 0x6f, 0x7d, 0x7c, 0x15, 0x10, 0x56, 0xf9, 0x7e, 0x55, 0xc2, - 0x38, 0x58, 0x73, 0x37, 0x65, 0xf6, 0xf3, 0x27, 0x89, 0x08, 0x42, 0xee, 0x21, 0x55, 0x0f, 0x9f, - 0x30, 0x8a, 0xca, 0x5d, 0x93, 0x44, 0xaf, 0x89, 0xb6, 0x98, 0xd5, 0xce, 0x49, 0xf8, 0x4b, 0xaf, - 0x41, 0x0e, 0x24, 0x85, 0x77, 0xf1, 0x32, 0x69, 0x4f, 0x80, 0x11, 0xd8, 0x00, 0x00, 0x00, 0x01, - 0x41, 0x9a, 0x47, 0x23, 0xb1, 0x22, 0xe2, 0x62, 0xb8, 0xaa, 0xaf, 0x33, 0x1f, 0x96, 0x23, 0x9a, - 0x82, 0x9e, 0x08, 0x6f, 0x7c, 0xa2, 0x62, 0x62, 0x48, 0xea, 0xeb, 0x95, 0x85, 0xf1, 0x9d, 0x8d, - 0xd6, 0xb1, 0x2f, 0xb0, 0x51, 0x69, 0x95, 0xd5, 0x45, 0xfc, 0xd2, 0xe4, 0x0f, 0x67, 0x4d, 0x70, - 0x5c, 0x72, 0xe5, 0x4d, 0xf4, 0x96, 0x28, 0x31, 0x89, 0x84, 0xc4, 0x72, 0xe3, 0x66, 0x8b, 0x26, - 0x7e, 0x20, 0x75, 0x34, 0xf4, 0xdf, 0xac, 0x9f, 0x12, 0x20, 0x10, 0xf7, 0x6b, 0xdc, 0x4c, 0x12, - 0xea, 0xfc, 0xf8, 0xfb, 0xb8, 0x9f, 0x13, 0x04, 0x45, 0xaa, 0xdf, 0x89, 0xfc, 0x59, 0x9d, 0xef, - 0xb9, 0x73, 0x08, 0xe0, 0xb7, 0x98, 0x6a, 0x6f, 0x15, 0xf9, 0x06, 0x6a, 0xbe, 0x12, 0x3a, 0xb5, - 0xbd, 0x57, 0x89, 0x44, 0x79, 0x78, 0x22, 0xbd, 0xfd, 0x51, 0x3e, 0x24, 0x4f, 0x13, 0x82, 0x3e, - 0x3e, 0xab, 0xae, 0xbb, 0x6a, 0x23, 0x97, 0x89, 0xe7, 0xca, 0x7d, 0x5a, 0xf0, 0x45, 0x54, 0x3b, - 0x7d, 0xf0, 0x47, 0x2b, 0x7b, 0xc9, 0xd5, 0xee, 0x20, 0x48, 0xf1, 0x13, 0x41, 0xb9, 0x52, 0xf9, - 0x7d, 0xef, 0x89, 0xba, 0xe6, 0x58, 0x28, 0x08, 0x84, 0x3c, 0xd8, 0x91, 0x31, 0xa8, 0x2c, 0xa9, - 0x2b, 0xd3, 0x40, 0x03, 0x20, 0xe4, 0x0f, 0x38, 0x64, 0xa2, 0x70, 0x65, 0xe4, 0x3f, 0xc5, 0x10, - 0x02, 0xc0, 0x17, 0x11, 0x55, 0x71, 0x0f, 0x12, 0x70, 0xe5, 0xb9, 0x7c, 0x36, 0x40, 0x29, 0x30, - 0x1a, 0x5d, 0x24, 0x00, 0x04, 0x00, 0x52, 0x0b, 0x5e, 0x92, 0x03, 0x7e, 0xaa, 0xa0, 0x87, 0x9b, - 0x5a, 0xe2, 0x04, 0x04, 0x0b, 0x53, 0x73, 0xbf, 0x58, 0xba, 0xc5, 0xda, 0xf4, 0x5e, 0xf8, 0x47, - 0x97, 0xa6, 0xec, 0x4e, 0x88, 0xad, 0x98, 0xb5, 0x34, 0x6a, 0x8f, 0x2d, 0x8f, 0x6f, 0xe0, 0x9c, - 0xdc, 0xdd, 0x22, 0xf6, 0x84, 0xfb, 0xf1, 0x11, 0x9a, 0xd4, 0x5c, 0x47, 0x9b, 0xb3, 0x8b, 0xe5, - 0xb5, 0x9f, 0x11, 0x08, 0x4d, 0xd5, 0xde, 0x59, 0x9a, 0xe4, 0xff, 0x8b, 0xd6, 0xb8, 0x5c, 0xd5, - 0x78, 0x8d, 0x44, 0xd7, 0xa6, 0xc3, 0x20, 0xab, 0x8c, 0x12, 0x1f, 0x7a, 0xa2, 0x00, 0x1a, 0xba, - 0x00, 0x02, 0x2a, 0x3a, 0x1e, 0x1e, 0x38, 0x0a, 0xab, 0x91, 0x95, 0xb2, 0x80, 0x92, 0x84, 0x21, - 0x19, 0x4d, 0x18, 0xf0, 0x42, 0x0c, 0x02, 0x90, 0x46, 0x2c, 0x6a, 0x2f, 0x02, 0x52, 0x62, 0x7c, - 0x1c, 0x74, 0x03, 0xa1, 0x48, 0x12, 0x9c, 0x79, 0x30, 0xe4, 0x30, 0xff, 0x16, 0xce, 0x07, 0xd9, - 0xee, 0x16, 0x0c, 0xdc, 0x80, 0x39, 0xa0, 0xe0, 0x7d, 0x80, 0x01, 0x34, 0x02, 0x68, 0x68, 0x21, - 0x82, 0x10, 0x70, 0x1f, 0x83, 0x61, 0x2e, 0xe4, 0x2b, 0x2a, 0x1d, 0xa8, 0x7c, 0xcb, 0x80, 0x00, - 0x23, 0xc6, 0x82, 0x69, 0x0c, 0xe5, 0xdd, 0x00, 0x07, 0x90, 0xbc, 0x9d, 0xfb, 0xc5, 0x66, 0xf8, - 0x64, 0x0b, 0x03, 0x7c, 0x4f, 0x97, 0x82, 0x69, 0x80, 0x69, 0xc8, 0x2b, 0x1f, 0x72, 0x0e, 0x84, - 0xc1, 0x35, 0x30, 0x2e, 0x40, 0x96, 0x33, 0x29, 0xcd, 0x18, 0x8f, 0xa6, 0xc9, 0x90, 0x9e, 0x03, - 0x00, 0x6c, 0xfc, 0x38, 0x4e, 0x0c, 0xb1, 0x9f, 0x90, 0xc1, 0x04, 0x01, 0x93, 0x06, 0x28, 0x03, - 0x50, 0x30, 0x1c, 0xc0, 0xc7, 0xac, 0xab, 0x7a, 0x60, 0xeb, 0x29, 0x6d, 0x1a, 0x6d, 0x20, 0xe8, - 0x85, 0xa2, 0xa1, 0x38, 0x0b, 0xdc, 0x3d, 0x11, 0x7e, 0x2a, 0xe5, 0xa0, 0x5b, 0xa0, 0xdf, 0x4b, - 0xc8, 0x1c, 0xbd, 0xfc, 0xb7, 0x7b, 0x93, 0x9b, 0x7b, 0xf9, 0xb5, 0xaf, 0x10, 0x30, 0xe4, 0xc3, - 0xb8, 0xf5, 0xce, 0xa2, 0xed, 0x08, 0xf8, 0x96, 0xbc, 0x45, 0x7b, 0x88, 0x88, 0xee, 0xca, 0x0e, - 0x3b, 0xf8, 0x2e, 0xbd, 0xfb, 0xbb, 0xfc, 0x14, 0x12, 0x52, 0x65, 0xcb, 0x77, 0xdd, 0x7d, 0xd6, - 0xdd, 0x72, 0x52, 0x7f, 0xd0, 0x97, 0xc5, 0xb1, 0xe1, 0xc5, 0x31, 0x3b, 0x28, 0x51, 0x04, 0x00, - 0x01, 0x5a, 0x76, 0xb2, 0x34, 0xf2, 0x3f, 0xc5, 0x84, 0x0b, 0xd2, 0x6e, 0x9f, 0x98, 0xe7, 0x43, - 0xcc, 0xc0, 0x0f, 0xcd, 0xa2, 0x91, 0x33, 0x19, 0xc7, 0xff, 0x4e, 0x4a, 0x71, 0xf2, 0xd0, 0x1d, - 0xf8, 0xe8, 0xb8, 0x3b, 0xf1, 0xcd, 0xe3, 0xb2, 0xec, 0x5b, 0x27, 0x03, 0xe0, 0xc1, 0x91, 0x14, - 0xc9, 0xf3, 0xc1, 0xb0, 0xbb, 0xa7, 0x83, 0x90, 0xc8, 0xd9, 0x44, 0xf2, 0x61, 0xfc, 0x9c, 0x00, - 0xfc, 0xe0, 0x35, 0x32, 0xf9, 0xb3, 0xf0, 0xa2, 0xa3, 0x8c, 0x4b, 0x00, 0x38, 0xcb, 0x00, 0x31, - 0x3c, 0xb8, 0xaa, 0x3e, 0x0c, 0x40, 0x45, 0x00, 0xb6, 0x9e, 0xdb, 0xfd, 0x3c, 0x40, 0x30, 0x1b, - 0x0a, 0x1c, 0x00, 0x26, 0x44, 0x41, 0x11, 0x7d, 0x91, 0x1c, 0x9e, 0x0d, 0x28, 0xe9, 0xe1, 0xe0, - 0x0c, 0x23, 0xbc, 0xf7, 0x8e, 0xa8, 0xac, 0xb6, 0x8d, 0x1f, 0xa1, 0xa4, 0x33, 0xfc, 0x1c, 0x83, - 0x10, 0x59, 0xd7, 0x20, 0xd1, 0x33, 0x14, 0x94, 0x01, 0x55, 0x2f, 0x59, 0x94, 0x1d, 0x54, 0x6f, - 0x88, 0xbc, 0xef, 0x85, 0xa1, 0xc8, 0xc7, 0x56, 0xe0, 0xe0, 0x80, 0xbd, 0x13, 0xac, 0x1c, 0x40, - 0x00, 0x40, 0x07, 0x95, 0x17, 0x42, 0xd0, 0x00, 0x3e, 0x3a, 0x7f, 0x22, 0x12, 0xf8, 0xbb, 0x88, - 0xfc, 0x37, 0xc5, 0x75, 0x55, 0xd4, 0xdc, 0x79, 0x54, 0x2b, 0xd3, 0x58, 0xd1, 0xaa, 0x22, 0x91, - 0x75, 0x5a, 0xae, 0x6e, 0x2f, 0xc4, 0x45, 0x45, 0x62, 0xb4, 0x41, 0xf0, 0xa8, 0xb3, 0x5f, 0x04, - 0xa6, 0x39, 0x90, 0xe9, 0x61, 0x60, 0x19, 0xc7, 0x89, 0x0e, 0x08, 0xe3, 0x32, 0x24, 0x5b, 0x16, - 0x10, 0x47, 0x3b, 0x95, 0xb6, 0xff, 0xc0, 0xe3, 0x0a, 0x13, 0x17, 0x50, 0xe3, 0xd6, 0x00, 0x00, - 0x9a, 0xd1, 0x42, 0x0f, 0x0c, 0xa0, 0xd6, 0x0b, 0x5a, 0x91, 0x5b, 0x41, 0xf0, 0x01, 0xe5, 0x5d, - 0x49, 0xd5, 0x0e, 0xb0, 0x94, 0xe8, 0x3b, 0x58, 0x77, 0x00, 0x3a, 0xd9, 0x30, 0x85, 0x5c, 0x18, - 0x41, 0xb1, 0x1f, 0xeb, 0x5c, 0x9d, 0x59, 0xd9, 0x65, 0x8b, 0x9a, 0xf0, 0x60, 0x3f, 0xa8, 0x40, - 0xdd, 0x2c, 0xa8, 0xeb, 0x58, 0xc5, 0x81, 0xe2, 0x5f, 0x8e, 0x39, 0xc3, 0x9b, 0xe0, 0x40, 0x02, - 0x40, 0xd9, 0x42, 0x1e, 0x47, 0x00, 0x01, 0x1e, 0x38, 0x83, 0xc1, 0xa3, 0xb9, 0x09, 0xc0, 0x05, - 0x4b, 0x00, 0x1f, 0x50, 0xea, 0x93, 0x02, 0xd0, 0x47, 0xd4, 0x94, 0x02, 0xa1, 0xaf, 0x05, 0x41, - 0x24, 0x84, 0x5f, 0x78, 0x7c, 0x84, 0x78, 0x70, 0xc4, 0x81, 0x87, 0xdb, 0x26, 0xf8, 0x1a, 0x40, - 0xa2, 0x14, 0x88, 0xfb, 0x3b, 0xe2, 0x50, 0x2b, 0x3f, 0xfb, 0xad, 0xcc, 0x9b, 0x4b, 0x75, 0xc3, - 0xf9, 0xb3, 0x27, 0x2a, 0x78, 0x1c, 0x2f, 0x70, 0x30, 0x84, 0x06, 0xd6, 0x20, 0x97, 0x2b, 0x84, - 0x2c, 0xae, 0x22, 0x43, 0x97, 0x63, 0x88, 0x17, 0xa0, 0xc3, 0xdc, 0xa7, 0xd7, 0x64, 0xcc, 0x70, - 0x6a, 0x21, 0xe3, 0x54, 0x26, 0x47, 0xa2, 0xea, 0x3b, 0xde, 0x1d, 0x50, 0x01, 0xfd, 0x87, 0x68, - 0x9f, 0xfb, 0xbb, 0x62, 0xa5, 0x9b, 0x3d, 0x82, 0xfe, 0x2e, 0xc1, 0x9b, 0x05, 0xdb, 0x3c, 0x71, - 0xa6, 0x5d, 0x8b, 0x71, 0xa6, 0x9d, 0x0a, 0x34, 0x53, 0xed, 0xb9, 0x2f, 0x85, 0x86, 0x1f, 0x1f, - 0x85, 0xa5, 0xa7, 0x83, 0x10, 0x6b, 0x08, 0xf0, 0x07, 0x9c, 0x00, 0xe2, 0x10, 0x8d, 0x13, 0xda, - 0x95, 0xb1, 0xd5, 0xf0, 0xcf, 0x25, 0xef, 0x2f, 0x65, 0x55, 0xdf, 0x10, 0x48, 0xd2, 0xf9, 0x5f, - 0x88, 0x2d, 0xdf, 0xf0, 0x87, 0x17, 0x9a, 0x5b, 0xad, 0x23, 0x62, 0x89, 0x82, 0xad, 0xd3, 0x71, - 0x2b, 0x2d, 0x93, 0x39, 0x1f, 0x7a, 0xd5, 0x4a, 0x0f, 0x67, 0x00, 0xf7, 0xf9, 0x6a, 0xd7, 0x38, - 0x00, 0x70, 0x0f, 0xcd, 0x7c, 0xc5, 0xaa, 0xfc, 0xa6, 0xd5, 0x57, 0x2c, 0x6c, 0xc7, 0x5f, 0x02, - 0x88, 0x8c, 0x3d, 0x38, 0x08, 0x83, 0xaf, 0x47, 0xe1, 0x3f, 0xfb, 0x7d, 0x31, 0x4b, 0x12, 0x90, - 0x80, 0xaa, 0x07, 0x7f, 0xa6, 0x9e, 0xdc, 0x38, 0x88, 0x00, 0xbd, 0x61, 0x6d, 0x38, 0xff, 0xfa, - 0x6d, 0xb6, 0x0e, 0x74, 0x06, 0x1c, 0xb4, 0xc5, 0xbc, 0x55, 0x89, 0x1d, 0x87, 0x14, 0x01, 0x7a, - 0xb5, 0xcd, 0xef, 0xfb, 0x4d, 0xff, 0xe7, 0x4d, 0x3d, 0xb1, 0x99, 0x70, 0xe2, 0x80, 0x0c, 0x7b, - 0xeb, 0xed, 0xfb, 0xfc, 0xff, 0xed, 0xb4, 0x0f, 0xbb, 0x65, 0x8b, 0x14, 0xc0, 0x3e, 0x92, 0x5e, - 0x1f, 0x69, 0xa1, 0xbc, 0x00, 0x3b, 0x48, 0xc8, 0x0b, 0xf6, 0x20, 0x46, 0x9f, 0xf0, 0xb0, 0x3b, - 0x00, 0xaf, 0x51, 0x4f, 0xe7, 0xb1, 0x49, 0x6d, 0x29, 0x32, 0x25, 0xb4, 0xaa, 0xc3, 0xc7, 0xbd, - 0x95, 0xda, 0xd1, 0xac, 0xc0, 0x34, 0xd0, 0xf8, 0x8f, 0x58, 0xd1, 0x89, 0x1e, 0xf5, 0xb3, 0xc2, - 0x02, 0x46, 0xc0, 0xa0, 0x19, 0x15, 0xcd, 0x42, 0xc0, 0x37, 0x2b, 0xe6, 0x07, 0x68, 0x8b, 0x52, - 0x26, 0xe6, 0x46, 0x1a, 0xbc, 0x00, 0x1c, 0x38, 0x3c, 0xe0, 0xe2, 0x85, 0x6f, 0x29, 0x01, 0xb1, - 0x6f, 0x29, 0x00, 0x6a, 0x0e, 0x5b, 0x0c, 0x18, 0x97, 0x36, 0xf2, 0x58, 0xba, 0x70, 0xee, 0x00, - 0x8a, 0xe2, 0x0b, 0xd4, 0x84, 0x6f, 0x18, 0x94, 0x96, 0x26, 0x90, 0x05, 0xb0, 0xa0, 0x01, 0xb8, - 0x30, 0xaf, 0x32, 0xde, 0x71, 0xe6, 0x07, 0xe2, 0x57, 0x87, 0x13, 0xea, 0x38, 0xa0, 0xfc, 0x39, - 0x7c, 0x7b, 0xe2, 0xeb, 0x1c, 0x6d, 0xf1, 0x82, 0x92, 0x64, 0xe9, 0x65, 0xad, 0x9b, 0x40, 0xc6, - 0xec, 0x22, 0x08, 0x02, 0x90, 0xf9, 0x6e, 0x96, 0x7d, 0x2f, 0x2c, 0x0c, 0xfb, 0x05, 0x0a, 0x66, - 0x15, 0x3e, 0xc9, 0x80, 0x00, 0x82, 0x9b, 0x95, 0x40, 0x87, 0x02, 0xab, 0x2c, 0x31, 0xd7, 0x58, - 0x29, 0x28, 0x8d, 0x56, 0x24, 0x30, 0x14, 0xad, 0x08, 0x3c, 0xfd, 0x6c, 0xbe, 0x90, 0x90, 0xf5, - 0xd4, 0xa3, 0xfb, 0xc0, 0x38, 0x7b, 0xd4, 0x08, 0x19, 0x56, 0xc3, 0x99, 0x57, 0x4e, 0x45, 0x80, - 0xa1, 0x03, 0x00, 0x42, 0xc8, 0x99, 0x37, 0xc9, 0x9b, 0xa4, 0xf6, 0x5c, 0x8b, 0xe0, 0x30, 0x40, - 0xc0, 0x1e, 0x8b, 0x97, 0xad, 0x20, 0xb0, 0x2a, 0xa5, 0x7a, 0xa9, 0x76, 0xa5, 0xe0, 0x64, 0x83, - 0x13, 0xe1, 0x7e, 0x2b, 0xb1, 0xc4, 0xe0, 0x08, 0xb9, 0x2b, 0xaa, 0xef, 0x69, 0xaa, 0xec, 0xa0, - 0xd4, 0xfc, 0x35, 0xcf, 0xbc, 0xd0, 0xcc, 0x16, 0x15, 0xcf, 0xbd, 0xdf, 0xb9, 0xf9, 0xc1, 0xc0, - 0x82, 0x19, 0x0a, 0x0a, 0x0a, 0x03, 0xe2, 0xbf, 0xf6, 0x4e, 0xfa, 0x37, 0xa8, 0x1a, 0xd5, 0x77, - 0x74, 0x85, 0x11, 0x48, 0x2b, 0x39, 0xc7, 0xe1, 0x10, 0x80, 0x52, 0x4f, 0x64, 0xaf, 0x77, 0x25, - 0x57, 0x2d, 0xb6, 0x7c, 0xb3, 0xf9, 0x51, 0xd3, 0x82, 0x91, 0x20, 0xa4, 0xa9, 0x13, 0x1b, 0xcb, - 0x31, 0x43, 0x11, 0xc3, 0x8e, 0x3d, 0xdf, 0xd8, 0x61, 0x40, 0x2b, 0x5f, 0x61, 0x1e, 0x6d, 0x5e, - 0x81, 0x40, 0x9d, 0xb5, 0x10, 0xc5, 0x86, 0x3a, 0xda, 0xdb, 0x6f, 0xe4, 0x0c, 0x06, 0x08, 0x1e, - 0x42, 0x85, 0x6f, 0x26, 0x00, 0x55, 0x9c, 0xb6, 0x78, 0x38, 0x48, 0x00, 0xf6, 0xb5, 0x4b, 0x0c, - 0x5c, 0x50, 0xc1, 0x99, 0x49, 0xa7, 0x38, 0x58, 0x37, 0xfd, 0x16, 0x90, 0xf3, 0x10, 0x00, 0xee, - 0x4a, 0x40, 0xde, 0xdd, 0xc8, 0xcb, 0xf7, 0x8c, 0x9e, 0xae, 0x7f, 0xa6, 0xaa, 0x0f, 0x5c, 0xbb, - 0x19, 0x8e, 0xab, 0x5b, 0xe2, 0xbc, 0x38, 0x42, 0x80, 0x2e, 0xd9, 0xb0, 0x88, 0x53, 0x92, 0x35, - 0xed, 0xfd, 0xb3, 0xc4, 0x7c, 0xfc, 0x1d, 0xf9, 0x62, 0xd4, 0xef, 0x07, 0x57, 0x1d, 0x5f, 0x47, - 0xdf, 0x75, 0xfc, 0x30, 0x14, 0x9e, 0x3e, 0x4f, 0x07, 0xe5, 0xe3, 0xfe, 0xa7, 0x3c, 0xf1, 0xec, - 0x65, 0xb0, 0xb3, 0x42, 0xe1, 0xc0, 0xf3, 0x80, 0x70, 0x90, 0x00, 0x15, 0xa0, 0x87, 0x80, 0x70, - 0x00, 0xe2, 0x36, 0x1e, 0x5a, 0x8d, 0x38, 0x3e, 0xc3, 0x5f, 0x05, 0x40, 0xd0, 0x36, 0x8c, 0x31, - 0xa6, 0xb1, 0x84, 0x73, 0x4c, 0x7c, 0x06, 0x47, 0xf8, 0xba, 0xb3, 0x8e, 0x11, 0xef, 0x07, 0xd7, - 0x0e, 0x45, 0x83, 0x30, 0xbb, 0x46, 0x80, 0x00, 0x80, 0x12, 0x2c, 0x09, 0x50, 0x51, 0xbc, 0x1d, - 0x7f, 0x45, 0xb7, 0xe0, 0x32, 0x40, 0xc0, 0x14, 0x93, 0x7a, 0x30, 0xd6, 0x71, 0x0e, 0x89, 0x63, - 0x54, 0xcb, 0xae, 0x80, 0x6a, 0x44, 0xda, 0x2d, 0x4d, 0x4a, 0xd6, 0x57, 0x2f, 0xab, 0x41, 0x64, - 0x09, 0x10, 0x44, 0x53, 0xe2, 0x57, 0xb9, 0xd3, 0xc2, 0x00, 0xa7, 0xcd, 0x91, 0xab, 0xec, 0x63, - 0x42, 0x4a, 0x2b, 0x2d, 0x19, 0xc0, 0x82, 0x19, 0x05, 0x66, 0x3c, 0x7d, 0x33, 0xdc, 0x7e, 0x3e, - 0x6c, 0x52, 0x60, 0x58, 0xab, 0xb0, 0xc9, 0x16, 0x2e, 0x55, 0xe0, 0xb4, 0xaa, 0xab, 0x59, 0xa4, - 0x90, 0x28, 0x01, 0x28, 0xd6, 0x5c, 0x8a, 0x56, 0x04, 0x10, 0x88, 0x52, 0x21, 0xc2, 0xc0, 0x67, - 0xc3, 0xdc, 0x15, 0xf6, 0x2b, 0xbb, 0x8a, 0xe7, 0xc2, 0xc8, 0x9b, 0xd7, 0xc3, 0x88, 0x80, 0x01, - 0x9e, 0x48, 0xcc, 0x36, 0x12, 0x38, 0x4f, 0x38, 0xbe, 0x3f, 0x18, 0x87, 0xd3, 0x18, 0x90, 0x7f, - 0xc9, 0xaa, 0x4c, 0xa8, 0x51, 0x88, 0x2d, 0x67, 0x8e, 0x3f, 0x0c, 0x81, 0xcb, 0x5f, 0xaa, 0x78, - 0x20, 0x0c, 0x85, 0x21, 0xf8, 0x25, 0x26, 0x00, 0x02, 0x95, 0x2b, 0x51, 0xb6, 0x09, 0x42, 0x43, - 0x86, 0x77, 0x05, 0x63, 0xac, 0xb0, 0xcb, 0x58, 0x93, 0x83, 0xef, 0x19, 0xc7, 0x96, 0x33, 0xa1, - 0x95, 0x0c, 0xc4, 0x80, 0x82, 0xc5, 0xb3, 0x30, 0xaf, 0x27, 0xb6, 0x7f, 0x75, 0xd6, 0xba, 0x7c, - 0x45, 0xfc, 0x30, 0x06, 0x81, 0xa4, 0x12, 0x3e, 0x42, 0xaa, 0xc4, 0xde, 0x58, 0xec, 0x48, 0xe3, - 0xfb, 0xf0, 0x2c, 0x39, 0x2d, 0xfd, 0xf1, 0x17, 0x01, 0x20, 0x01, 0x87, 0xc0, 0x05, 0xfc, 0xf4, - 0x83, 0xfe, 0x9e, 0x03, 0x04, 0x48, 0xdc, 0x65, 0xad, 0xcc, 0xbb, 0xa6, 0xdc, 0x89, 0xd0, 0xdd, - 0x9f, 0x2e, 0x56, 0x78, 0x71, 0x96, 0x78, 0x1e, 0x07, 0xbb, 0x13, 0xd2, 0xbe, 0x0a, 0x39, 0x2e, - 0xfb, 0xe0, 0x93, 0xc0, 0xeb, 0x12, 0xb9, 0xc1, 0xc0, 0x90, 0x8d, 0xee, 0x4c, 0x79, 0x32, 0x88, - 0xfc, 0x3f, 0x77, 0x3d, 0xe4, 0x91, 0x02, 0xc1, 0x80, 0x81, 0x70, 0xb7, 0x48, 0x89, 0x2a, 0x58, - 0xd6, 0x1e, 0x1c, 0xb2, 0xf8, 0x51, 0x41, 0x2e, 0x68, 0xdf, 0xfa, 0x54, 0xd3, 0xe1, 0x85, 0x00, - 0x95, 0x92, 0xb9, 0xe7, 0x4f, 0xa6, 0x9e, 0x63, 0x5e, 0xd8, 0xe9, 0x70, 0x20, 0xc2, 0x84, 0x95, - 0xaa, 0xfb, 0xfe, 0x35, 0x87, 0x7b, 0xba, 0x25, 0x68, 0xb0, 0x2d, 0xe6, 0x30, 0xe6, 0x00, 0x2a, - 0x9b, 0xb8, 0x68, 0x83, 0xa0, 0xf4, 0x5b, 0xa8, 0xf8, 0x7b, 0x8e, 0xd7, 0xe5, 0x48, 0xe3, 0x7d, - 0x36, 0xd6, 0xab, 0xb4, 0xb5, 0xd6, 0x29, 0x00, 0xc2, 0x36, 0xf9, 0xf9, 0x7a, 0xdc, 0x70, 0xc0, - 0x52, 0x60, 0x42, 0x34, 0x58, 0x13, 0xf2, 0xc0, 0xcf, 0x03, 0xa3, 0x13, 0x00, 0x3e, 0x1d, 0x0f, - 0x05, 0xd1, 0x98, 0xd9, 0xe0, 0x00, 0x42, 0x80, 0xfd, 0x05, 0xe2, 0x9b, 0xeb, 0x40, 0xf4, 0x91, - 0x6f, 0x87, 0xb8, 0x68, 0x05, 0xc3, 0x12, 0xb4, 0x3f, 0xa0, 0x83, 0xf0, 0xa7, 0x11, 0xca, 0x61, - 0xdc, 0xa8, 0x52, 0x78, 0x05, 0xd9, 0x0b, 0xb2, 0xa6, 0x07, 0xc3, 0x66, 0xc0, 0x81, 0xd3, 0x62, - 0x56, 0x83, 0xc2, 0x5a, 0x80, 0x36, 0xe8, 0x3e, 0x13, 0x07, 0xe3, 0xc0, 0x00, 0xed, 0xf0, 0x00, - 0x3b, 0x84, 0xe0, 0x00, 0x5d, 0x46, 0x98, 0x34, 0x7c, 0x18, 0x04, 0x02, 0x91, 0xc0, 0xfc, 0x07, - 0x0d, 0xc2, 0xc0, 0x01, 0x96, 0x00, 0x30, 0x73, 0xe1, 0x60, 0x78, 0x0f, 0x7e, 0x8a, 0x00, 0xc4, - 0x80, 0xe0, 0x77, 0x35, 0x0e, 0xb2, 0x51, 0xc7, 0xd3, 0xc3, 0x87, 0x80, 0x07, 0x0a, 0x44, 0xa3, - 0x30, 0x64, 0x6b, 0x01, 0xe2, 0x19, 0x0a, 0x09, 0x31, 0x68, 0xe4, 0xf9, 0xc7, 0x2e, 0x64, 0x96, - 0x27, 0x59, 0x7e, 0xea, 0x4f, 0x10, 0x9d, 0x83, 0x54, 0xa3, 0xca, 0x79, 0xc2, 0xc3, 0x2c, 0xcf, - 0x70, 0x88, 0x44, 0x11, 0x1a, 0x6e, 0xe5, 0xb7, 0x18, 0x0d, 0x10, 0x28, 0x02, 0xa2, 0x28, 0xa1, - 0xe2, 0x0e, 0x0b, 0xa4, 0x5c, 0x72, 0xdb, 0xbb, 0x7c, 0x14, 0x40, 0xb0, 0xc1, 0x2c, 0x92, 0x00, - 0x01, 0xec, 0x82, 0xa3, 0x00, 0x02, 0x55, 0x8d, 0x06, 0x1b, 0x9d, 0x88, 0x6c, 0x28, 0x28, 0xe4, - 0x8e, 0x4a, 0x64, 0xef, 0xf0, 0x45, 0x72, 0x88, 0x5c, 0x7d, 0x3b, 0x8e, 0x30, 0x43, 0x1f, 0x1b, - 0x4b, 0x88, 0x14, 0x06, 0x13, 0x61, 0x4e, 0xd4, 0xf0, 0x00, 0x27, 0x1e, 0x0f, 0x09, 0xc7, 0xc5, - 0x8e, 0xc5, 0x77, 0xf1, 0xf1, 0x42, 0xfe, 0x39, 0xa5, 0xd9, 0xce, 0x87, 0xf6, 0x59, 0x55, 0x63, - 0x99, 0x97, 0xc1, 0x04, 0x6c, 0xfe, 0x27, 0x2e, 0xfb, 0x88, 0x7c, 0x67, 0x3e, 0xb6, 0xd3, 0xe6, - 0x5f, 0x2f, 0xf8, 0x60, 0x87, 0x00, 0x65, 0xaf, 0xec, 0x1f, 0xed, 0xb6, 0xde, 0x7e, 0x6e, 0xfb, - 0xac, 0x9b, 0x97, 0x90, 0xb0, 0xd2, 0x80, 0x18, 0x17, 0x4d, 0xd2, 0xe9, 0xbe, 0x7f, 0x7f, 0x24, - 0x36, 0xf1, 0x70, 0x28, 0x82, 0x91, 0xa4, 0x0a, 0xb8, 0x1d, 0xf1, 0x28, 0x03, 0xc2, 0xca, 0x1a, - 0x72, 0xb5, 0xbe, 0x00, 0x1c, 0x07, 0x04, 0x4c, 0x3c, 0x1c, 0x2d, 0xbc, 0x69, 0xcb, 0x88, 0x80, - 0x79, 0xbb, 0x39, 0x91, 0x7c, 0x98, 0x34, 0x8c, 0xc3, 0x4e, 0x93, 0x31, 0xbe, 0x15, 0x75, 0xdf, - 0x84, 0x46, 0xce, 0xd4, 0xc0, 0x81, 0xe8, 0x15, 0x20, 0xb8, 0x80, 0x62, 0xac, 0x6e, 0x80, 0x00, - 0x40, 0x1e, 0x61, 0x1c, 0x00, 0x04, 0x03, 0x7c, 0xbc, 0x13, 0xfc, 0xbc, 0x43, 0x33, 0x29, 0x82, - 0x93, 0x02, 0xb8, 0x3a, 0x3b, 0x3a, 0x65, 0xb6, 0xdd, 0x43, 0x70, 0xc1, 0x84, 0xbe, 0xd3, 0x6e, - 0x7c, 0x07, 0x56, 0xc3, 0x8a, 0x07, 0x26, 0xa0, 0x07, 0x16, 0x0a, 0xef, 0x43, 0xdd, 0xeb, 0x0d, - 0x39, 0xe0, 0xb3, 0xd6, 0x0d, 0x1d, 0x45, 0x40, 0x1a, 0x36, 0x40, 0x07, 0xad, 0xf4, 0x78, 0xa5, - 0xa0, 0x8a, 0x79, 0x69, 0xc6, 0xc5, 0xcb, 0x19, 0x7d, 0x05, 0xdb, 0x7c, 0x83, 0x9d, 0x7b, 0x67, - 0xe5, 0xd0, 0xff, 0x70, 0x18, 0x00, 0x2e, 0x46, 0xc7, 0x4f, 0x33, 0x9c, 0xe5, 0xa0, 0x38, 0x3d, - 0x94, 0xaa, 0xfe, 0x4e, 0x1c, 0x88, 0xd8, 0xf0, 0x90, 0x0d, 0x5b, 0x82, 0xc0, 0x31, 0x48, 0x52, - 0xc1, 0x53, 0xd5, 0x0f, 0x70, 0x70, 0x90, 0x30, 0x00, 0x6a, 0x7a, 0x69, 0x94, 0x3f, 0x78, 0x08, - 0x80, 0x80, 0x52, 0x29, 0x9d, 0xc6, 0xd1, 0xb4, 0x2f, 0x06, 0xcd, 0x62, 0x6f, 0xba, 0xa4, 0x5c, - 0x48, 0xe1, 0x6d, 0xd9, 0x36, 0x18, 0x20, 0x85, 0x3b, 0x41, 0x90, 0x11, 0xb7, 0x49, 0xc6, 0x50, - 0xce, 0xe3, 0x70, 0x75, 0xe3, 0xda, 0x59, 0x96, 0x6e, 0xfc, 0x9b, 0x23, 0x70, 0x88, 0x91, 0xb9, - 0x5b, 0x9e, 0xc9, 0x85, 0x7d, 0x44, 0xf0, 0xfe, 0x2c, 0xfe, 0x0a, 0x1f, 0xfe, 0x98, 0xb6, 0xde, - 0x1c, 0x50, 0x08, 0xff, 0x2c, 0xda, 0x65, 0xbf, 0x9a, 0xdb, 0xdb, 0xae, 0x18, 0xa8, 0x38, 0x76, - 0x19, 0xea, 0xdb, 0xbc, 0x9f, 0x9d, 0x27, 0xdb, 0x06, 0xb2, 0xff, 0x04, 0x25, 0x0e, 0xc2, 0x5c, - 0x3e, 0x12, 0x97, 0xf0, 0x02, 0x08, 0x38, 0x4c, 0x97, 0xb4, 0x7c, 0xfe, 0x2e, 0xd5, 0x2e, 0x6a, - 0x1a, 0x85, 0xe0, 0x9f, 0x0e, 0x56, 0x6b, 0x3c, 0x2d, 0x6c, 0x7c, 0x25, 0x07, 0xec, 0x22, 0x43, - 0x9f, 0x7f, 0x8b, 0xe6, 0xa8, 0x51, 0xcf, 0x0e, 0x24, 0x12, 0x8e, 0xac, 0xc4, 0xc6, 0x6a, 0x2e, - 0xba, 0xaa, 0x2b, 0x98, 0x36, 0x2a, 0xcf, 0xc7, 0xf2, 0x72, 0xf2, 0xfa, 0xdf, 0xac, 0xe0, 0xd5, - 0x28, 0xf2, 0xe3, 0xa2, 0xe5, 0x43, 0x29, 0x82, 0x01, 0x20, 0xae, 0x5b, 0x0f, 0x8a, 0x47, 0x65, - 0xe5, 0xb1, 0xe7, 0xed, 0xb1, 0x77, 0x12, 0x7a, 0x67, 0x82, 0x11, 0x04, 0x3c, 0x0e, 0x74, 0xbf, - 0x03, 0xc8, 0x30, 0x0a, 0x62, 0x13, 0xe0, 0xd5, 0xa9, 0xe7, 0x0e, 0xb0, 0x2e, 0x5e, 0x99, 0x62, - 0xce, 0x38, 0x1f, 0x62, 0x1b, 0x85, 0x87, 0x58, 0x84, 0x64, 0xa0, 0xc4, 0x9f, 0x84, 0x43, 0x23, - 0x44, 0x41, 0x56, 0x58, 0x5e, 0xb7, 0x20, 0x75, 0x20, 0x04, 0xa7, 0x2a, 0xd6, 0xb7, 0xc8, 0x98, - 0x3e, 0xce, 0xad, 0xe0, 0x1f, 0xb3, 0xe7, 0x24, 0x1d, 0xaf, 0x95, 0xb7, 0xd5, 0xe7, 0xf8, 0x44, - 0x6c, 0x38, 0xc6, 0xa5, 0x53, 0xc8, 0xb0, 0xcb, 0xeb, 0x17, 0x07, 0x56, 0x0e, 0x21, 0x60, 0xa1, - 0x88, 0xf1, 0x4e, 0x62, 0x0e, 0x58, 0x4a, 0x5e, 0x58, 0xc5, 0x31, 0x84, 0x3e, 0x7a, 0x4f, 0xe0, - 0xa4, 0xe3, 0x1e, 0x66, 0x76, 0x67, 0x8c, 0xb3, 0xec, 0x69, 0x0c, 0x0f, 0xc6, 0x83, 0xa5, 0x20, - 0x37, 0x88, 0x1e, 0x59, 0x94, 0x92, 0x9d, 0x26, 0xdf, 0x78, 0x67, 0x00, 0x32, 0xbd, 0xae, 0x9d, - 0x7f, 0xfd, 0x6c, 0x43, 0xdf, 0x67, 0x8d, 0x5b, 0x15, 0xa8, 0xff, 0x3b, 0xb7, 0xa4, 0x9c, 0xb8, - 0x0b, 0x00, 0x24, 0x82, 0x2b, 0xdb, 0xba, 0x75, 0xe0, 0x96, 0x5b, 0x3d, 0xc3, 0xfe, 0xee, 0xe9, - 0xd0, 0x25, 0xec, 0x43, 0x19, 0xfe, 0xb9, 0x3b, 0x4e, 0xb9, 0x34, 0x4f, 0xc4, 0x02, 0x11, 0x92, - 0x40, 0x54, 0x13, 0x4c, 0x0d, 0x22, 0xd8, 0x6f, 0xc7, 0x55, 0x16, 0xf8, 0x72, 0xc2, 0xa7, 0x25, - 0x22, 0x3e, 0xf8, 0xba, 0x48, 0xd5, 0xaa, 0xa2, 0x5c, 0x40, 0x64, 0x20, 0x56, 0x3e, 0xae, 0xf0, - 0xd8, 0xfe, 0x51, 0xbd, 0x8c, 0x74, 0x31, 0x66, 0xfb, 0x08, 0x88, 0x04, 0x04, 0x0b, 0x9c, 0x0c, - 0xda, 0xcc, 0x55, 0x2c, 0x8c, 0x94, 0xa1, 0x1e, 0x46, 0x11, 0xa7, 0x1b, 0x0b, 0xd3, 0x79, 0x4a, - 0x91, 0x32, 0x30, 0x82, 0xe7, 0xcf, 0xe9, 0xe2, 0x03, 0x03, 0x68, 0x5e, 0xdf, 0x74, 0x9e, 0x26, - 0xc1, 0x34, 0xe1, 0xc0, 0x71, 0x2c, 0x21, 0x86, 0x2a, 0x4a, 0xca, 0xfc, 0xcb, 0xfa, 0xdf, 0xe3, - 0xc5, 0xbd, 0xc4, 0x74, 0x60, 0xf2, 0xeb, 0x7f, 0x88, 0x0a, 0x4d, 0x47, 0xb6, 0xcb, 0x20, 0x46, - 0x38, 0xb0, 0xcc, 0x79, 0xc8, 0x51, 0x2d, 0x03, 0xea, 0xb4, 0x1b, 0xda, 0x9e, 0xf0, 0xb1, 0x64, - 0xa5, 0x91, 0x43, 0x8a, 0x08, 0x0a, 0xf2, 0xa9, 0x0e, 0x82, 0xea, 0x8a, 0x7f, 0xdf, 0x86, 0x50, - 0x07, 0xf1, 0x32, 0xa7, 0x9d, 0x27, 0xf0, 0xfc, 0xd0, 0xca, 0x4b, 0xbb, 0xad, 0xd5, 0x76, 0x3b, - 0x1d, 0xae, 0xd4, 0xe7, 0x07, 0x54, 0x31, 0x37, 0x06, 0x22, 0x49, 0x8a, 0xdc, 0x6f, 0x81, 0x57, - 0xc0, 0x9a, 0xaa, 0x25, 0xd7, 0x0d, 0x60, 0x32, 0xba, 0x07, 0x6b, 0x5b, 0x85, 0xac, 0xb5, 0xf5, - 0xfe, 0x9e, 0x9c, 0x7c, 0x71, 0xc3, 0x08, 0xa0, 0x08, 0xea, 0xc7, 0x15, 0x6e, 0xd5, 0xdb, 0x3f, - 0xac, 0x1d, 0xbf, 0x6f, 0xe9, 0xc9, 0xfb, 0x0e, 0xe0, 0x07, 0xf8, 0x1f, 0xde, 0xb8, 0x5f, 0xa2, - 0xd1, 0xbf, 0x8f, 0x6a, 0x5c, 0x7c, 0x55, 0xbe, 0xb5, 0x07, 0x9f, 0xf0, 0x73, 0xf0, 0x7f, 0xc1, - 0x8d, 0xaa, 0x9e, 0x65, 0x0d, 0x4b, 0x36, 0x14, 0x20, 0x48, 0x41, 0xae, 0x5d, 0xd9, 0xfe, 0xe1, - 0xb3, 0xe9, 0x99, 0xe3, 0xac, 0x32, 0xca, 0x00, 0x2b, 0xdd, 0xb3, 0x61, 0x6c, 0x5f, 0x57, 0x6c, - 0xff, 0x5e, 0x9d, 0xaa, 0xd7, 0xdc, 0x48, 0x90, 0xc0, 0x8a, 0x60, 0x68, 0xc5, 0xc5, 0x52, 0x50, - 0xab, 0xe3, 0x40, 0x83, 0x50, 0xe6, 0xd5, 0x0f, 0x0f, 0x12, 0x21, 0x0d, 0x7e, 0x2d, 0xa5, 0x0d, - 0xe0, 0x01, 0xc5, 0xc7, 0x90, 0x76, 0x78, 0xb7, 0xe6, 0xb9, 0xe3, 0x64, 0x4b, 0xfe, 0xe0, 0x1c, - 0x1f, 0xef, 0xaf, 0x10, 0x9d, 0x59, 0xbf, 0x12, 0x29, 0x47, 0xb8, 0xfc, 0xc2, 0x6a, 0xbc, 0x48, - 0x10, 0x06, 0x08, 0xad, 0x4d, 0x8f, 0xf8, 0x31, 0x52, 0x85, 0x62, 0x1c, 0xb4, 0xc2, 0x8d, 0x84, - 0x00, 0x80, 0x33, 0x1e, 0x53, 0x61, 0x79, 0xde, 0xb1, 0x89, 0x7e, 0xb1, 0x08, 0x68, 0x5f, 0x8f, - 0x0e, 0x80, 0x67, 0x0c, 0x7e, 0x1b, 0xaa, 0x82, 0x4d, 0x60, 0x25, 0x1a, 0x0e, 0x12, 0x80, 0x1a, - 0xe0, 0xd6, 0xef, 0xc3, 0x3c, 0xa5, 0xcd, 0xc3, 0x75, 0xa2, 0xf0, 0x84, 0xcd, 0x6f, 0xbb, 0xe6, - 0xf5, 0xf7, 0x52, 0x71, 0x78, 0xfc, 0x75, 0x23, 0x59, 0xf2, 0xa5, 0xaa, 0xaa, 0xf8, 0x90, 0xc3, - 0xe6, 0xc3, 0x67, 0x92, 0x55, 0x7e, 0x65, 0x3f, 0x7f, 0xb2, 0x8e, 0x2f, 0x3b, 0xd6, 0x20, 0x84, - 0x68, 0x11, 0x96, 0x95, 0x67, 0x06, 0x20, 0x80, 0x29, 0x7c, 0xe1, 0x35, 0x4b, 0x0c, 0xf0, 0x0f, - 0xcd, 0x99, 0x22, 0xa3, 0x90, 0xb9, 0x63, 0x53, 0x8e, 0x0a, 0x65, 0xe4, 0x9c, 0x97, 0x29, 0x3d, - 0x4b, 0x03, 0xee, 0x0a, 0x01, 0x40, 0x50, 0x89, 0xfa, 0x51, 0xb3, 0x49, 0x24, 0x83, 0x71, 0x20, - 0x1e, 0x7f, 0x9e, 0x00, 0x7d, 0xa0, 0x6b, 0x69, 0xd9, 0x66, 0x3a, 0x0b, 0x85, 0x8d, 0x43, 0xa0, - 0xbc, 0x4f, 0x86, 0xc9, 0x00, 0x10, 0xcf, 0xbe, 0xde, 0x02, 0x27, 0xa6, 0xd7, 0x55, 0x95, 0x44, - 0x2b, 0x14, 0xce, 0x79, 0x7a, 0x88, 0x60, 0xa7, 0x03, 0x01, 0xc6, 0x34, 0xae, 0xb7, 0xbc, 0x3d, - 0x80, 0x16, 0x79, 0x3c, 0x32, 0x5d, 0x78, 0x24, 0xdf, 0x8e, 0x1a, 0x83, 0xa9, 0xc3, 0xa7, 0x19, - 0x65, 0xb3, 0x82, 0xc9, 0x6c, 0x17, 0x73, 0x8f, 0x82, 0xc2, 0x2d, 0x84, 0xe3, 0x09, 0x46, 0x03, - 0x10, 0x81, 0xa1, 0x6d, 0x4f, 0x56, 0xf2, 0x77, 0x7c, 0x08, 0x00, 0x61, 0x1b, 0x1b, 0x30, 0x78, - 0x1c, 0xf1, 0x60, 0x11, 0x7e, 0x4a, 0x00, 0xe0, 0x58, 0x0c, 0x40, 0x03, 0x87, 0xb8, 0x4c, 0x02, - 0xaf, 0x07, 0x06, 0x32, 0xe3, 0x53, 0x6c, 0x2d, 0x2e, 0xe4, 0xfd, 0x29, 0x6a, 0x57, 0xf8, 0x91, - 0x36, 0x00, 0x04, 0x61, 0x73, 0xb6, 0xc4, 0x69, 0xc6, 0x96, 0x1d, 0xc0, 0x05, 0xa1, 0x1d, 0x9c, - 0x82, 0x7f, 0x39, 0x5f, 0x3f, 0x66, 0xe1, 0x11, 0xb0, 0xb9, 0x5e, 0xc1, 0xef, 0xce, 0x60, 0x0c, - 0x17, 0xda, 0x5b, 0xfb, 0xf8, 0xeb, 0xe1, 0xd6, 0xb8, 0x5a, 0x3f, 0x07, 0xb2, 0xe7, 0x6f, 0x09, - 0x98, 0x2a, 0xcf, 0xc7, 0x39, 0x9d, 0x66, 0xa2, 0x5e, 0xbf, 0x6f, 0x9a, 0xec, 0xe1, 0xd5, 0x00, - 0x25, 0x9e, 0x63, 0x5a, 0x2c, 0xc7, 0xbe, 0x63, 0x3f, 0xff, 0x22, 0x7c, 0x4c, 0x75, 0x65, 0x3c, - 0xca, 0x83, 0x15, 0x6e, 0x8c, 0x80, 0xbd, 0xa2, 0x1e, 0xbf, 0x1c, 0x71, 0xa6, 0x90, 0x0e, 0xc9, - 0xd1, 0x92, 0xf0, 0x8b, 0x6c, 0x2c, 0xe5, 0x7f, 0x38, 0x1a, 0xe2, 0x8c, 0xa7, 0x52, 0x89, 0x20, - 0x6e, 0x9b, 0x73, 0x58, 0x38, 0x05, 0x01, 0xe8, 0x2c, 0x00, 0x0b, 0xce, 0x81, 0xc4, 0x1d, 0xe3, - 0x0f, 0xa5, 0xe2, 0x1a, 0x8e, 0xcb, 0x1e, 0xdc, 0x3d, 0x54, 0x4f, 0x27, 0x08, 0x97, 0x5b, 0xff, - 0xe1, 0x80, 0x40, 0x09, 0x62, 0x5b, 0x0a, 0x8e, 0xf1, 0x15, 0x7c, 0xac, 0xeb, 0x0c, 0x50, 0x75, - 0x8e, 0x20, 0x5c, 0x2e, 0xe2, 0xcb, 0x62, 0x5e, 0xba, 0xcd, 0x4f, 0x04, 0x9c, 0x65, 0x47, 0x9e, - 0x6b, 0xc2, 0x00, 0xa2, 0xab, 0xea, 0x33, 0xe3, 0x9a, 0x57, 0x84, 0x05, 0xea, 0xef, 0x53, 0x64, - 0xf0, 0x88, 0x27, 0xaa, 0xa8, 0x35, 0x25, 0x37, 0x4e, 0x00, 0x15, 0x80, 0xe9, 0x70, 0xf2, 0x94, - 0x03, 0x80, 0x67, 0x11, 0x0e, 0xc1, 0xdf, 0xcb, 0xbb, 0x3a, 0x5d, 0xb4, 0x5f, 0x19, 0xdf, 0x06, - 0xa5, 0xf7, 0xfe, 0x22, 0x14, 0x39, 0xb0, 0xfe, 0x17, 0x97, 0xba, 0x84, 0xa9, 0xab, 0x31, 0x98, - 0xa2, 0x78, 0xb3, 0x25, 0x9a, 0x93, 0xb7, 0x05, 0x00, 0x50, 0x0a, 0x1b, 0x23, 0x1c, 0x66, 0xd2, - 0xf8, 0xce, 0xc0, 0x4f, 0x4a, 0xa1, 0x71, 0xde, 0x92, 0x22, 0x8b, 0xc1, 0x38, 0x6e, 0x2a, 0x59, - 0xc5, 0xd3, 0x00, 0x66, 0x26, 0x14, 0x83, 0x15, 0x49, 0xa0, 0x90, 0x16, 0xe1, 0xac, 0xbb, 0x00, - 0x02, 0xd4, 0xe2, 0xb2, 0x53, 0x82, 0x3a, 0xc0, 0x92, 0xbd, 0x06, 0x99, 0xed, 0xf6, 0x26, 0x2b, - 0xc6, 0xe0, 0x50, 0x0a, 0x0a, 0x73, 0x32, 0x7c, 0x6d, 0x09, 0xbb, 0x28, 0xa5, 0x7e, 0x52, 0x13, - 0xc7, 0x71, 0x79, 0x63, 0x04, 0x9b, 0xa5, 0xd9, 0x55, 0xd1, 0xde, 0x0e, 0x42, 0x92, 0x88, 0x25, - 0x2c, 0x00, 0x32, 0x8c, 0xa5, 0x80, 0x60, 0xf1, 0x71, 0xe3, 0x61, 0x42, 0x99, 0x8a, 0x5c, 0x53, - 0xc5, 0xc7, 0x3f, 0x3c, 0x05, 0x97, 0x60, 0xef, 0xc5, 0xe1, 0x03, 0x10, 0x24, 0x22, 0x78, 0xe3, - 0x2f, 0x8e, 0x2d, 0xad, 0x7c, 0x40, 0x25, 0x27, 0x85, 0x81, 0x43, 0xe2, 0xee, 0x80, 0x00, 0xfe, - 0x0f, 0x00, 0x03, 0x7c, 0x28, 0x0a, 0x0e, 0x91, 0x03, 0x83, 0x50, 0x3d, 0xa0, 0x17, 0x89, 0x86, - 0x4a, 0x1c, 0x4c, 0x0d, 0x7e, 0x90, 0x3e, 0x14, 0xf5, 0x17, 0xf0, 0x4b, 0x23, 0x32, 0xcf, 0x15, - 0x55, 0x33, 0x70, 0xc8, 0x21, 0x18, 0x4b, 0x93, 0xd7, 0x9f, 0x31, 0x76, 0x5e, 0x25, 0x81, 0x73, - 0x08, 0x42, 0x25, 0xb5, 0x6f, 0x2e, 0x09, 0xde, 0x35, 0x80, 0xee, 0x25, 0xc4, 0x08, 0x0a, 0x6e, - 0xa2, 0xe2, 0xfa, 0xa7, 0x17, 0x3b, 0xe4, 0x5c, 0xb0, 0x57, 0xac, 0x29, 0x05, 0x9c, 0x44, 0x15, - 0x91, 0x65, 0xa3, 0xf9, 0x73, 0x2e, 0x4e, 0x0f, 0x10, 0x30, 0xa2, 0x7c, 0x2d, 0x62, 0x2e, 0xcf, - 0x1b, 0xf2, 0xf7, 0xb7, 0x15, 0xac, 0xf1, 0xe1, 0x01, 0x01, 0x3d, 0xba, 0x56, 0xab, 0xf1, 0x44, - 0x48, 0xe0, 0x61, 0x2f, 0x49, 0xd9, 0xe2, 0x01, 0x08, 0x50, 0xaf, 0xf7, 0x9b, 0xaa, 0xca, 0xa4, - 0xdc, 0x38, 0x82, 0x7f, 0x22, 0xba, 0x8d, 0x37, 0x12, 0x11, 0x0a, 0x11, 0x57, 0x17, 0x2c, 0xc5, - 0xc5, 0x3c, 0x42, 0xc2, 0x71, 0xc3, 0x3e, 0x2e, 0x57, 0x84, 0x02, 0x87, 0x0c, 0x78, 0x5e, 0xad, - 0x11, 0x26, 0x2e, 0x08, 0x31, 0x95, 0xdb, 0xe7, 0xea, 0x2e, 0x9d, 0x99, 0x90, 0x65, 0xd0, 0xe7, - 0xf7, 0xc1, 0x34, 0xfd, 0xdd, 0xf7, 0x7b, 0xc6, 0x73, 0x6a, 0xaa, 0x7e, 0x53, 0x2a, 0xe5, 0xee, - 0xbd, 0xc4, 0xf0, 0x96, 0xb5, 0x55, 0xa9, 0x61, 0x00, 0x88, 0x52, 0xdd, 0x60, 0x30, 0x63, 0x04, - 0x73, 0xad, 0x2d, 0x4c, 0x8a, 0x5b, 0x97, 0x46, 0xe3, 0xea, 0xca, 0x11, 0xd3, 0x28, 0x38, 0x40, - 0x48, 0x42, 0x28, 0xef, 0xd4, 0x5e, 0x5f, 0x2c, 0x30, 0x60, 0x08, 0x06, 0xc5, 0xdd, 0x61, 0xe7, - 0xe6, 0xe5, 0x24, 0xa1, 0xf1, 0xa9, 0x79, 0xcf, 0x6c, 0xbc, 0x94, 0x56, 0x45, 0xe3, 0x87, 0xaa, - 0x7f, 0xe3, 0x18, 0xe7, 0x89, 0xdf, 0x04, 0xe5, 0x72, 0xab, 0x42, 0x4f, 0xce, 0x59, 0x53, 0xac, - 0x4c, 0x28, 0x62, 0xc1, 0x96, 0x0c, 0xf6, 0xfc, 0x39, 0xa8, 0xf5, 0x91, 0xd6, 0x1f, 0xa8, 0x37, - 0x7c, 0x4d, 0x33, 0x7c, 0x1c, 0x42, 0x03, 0x51, 0x59, 0x60, 0xe5, 0x0d, 0xf0, 0x9c, 0xf3, 0x49, - 0x86, 0xaf, 0x77, 0xe1, 0x81, 0x7c, 0x94, 0x27, 0x5c, 0x25, 0xe2, 0x06, 0x15, 0x62, 0xea, 0xe2, - 0x8d, 0x31, 0x5a, 0x8f, 0x50, 0x5f, 0x6c, 0x8e, 0x58, 0x12, 0x05, 0x86, 0x3f, 0x84, 0x05, 0xcf, - 0x99, 0x6e, 0xb2, 0x67, 0x10, 0x3b, 0x69, 0x77, 0x54, 0xea, 0x8c, 0x86, 0xb8, 0x64, 0x15, 0x55, - 0x62, 0x93, 0xb8, 0xfb, 0xba, 0x87, 0xd1, 0x29, 0xe2, 0xc6, 0x7a, 0xd4, 0x6a, 0x84, 0xc9, 0x18, - 0xdc, 0x48, 0x21, 0x1a, 0x55, 0x1e, 0x66, 0x9c, 0xb0, 0xd6, 0x40, 0xee, 0xd5, 0xfe, 0x3e, 0x96, - 0x62, 0x45, 0x69, 0x94, 0x27, 0x0d, 0x0d, 0x45, 0x5c, 0xb4, 0x6b, 0xf8, 0x66, 0x09, 0x3b, 0x22, - 0xeb, 0xe6, 0x25, 0xee, 0xa1, 0x19, 0x2b, 0x55, 0x3b, 0xdf, 0x86, 0x03, 0x03, 0xce, 0x72, 0x63, - 0x5e, 0xb1, 0xa0, 0xaf, 0x77, 0x87, 0xb0, 0x05, 0xbd, 0xb3, 0x24, 0x1b, 0xff, 0x04, 0x7a, 0x1e, - 0x7a, 0x60, 0x14, 0x82, 0xd5, 0x5e, 0xbf, 0xf0, 0xe6, 0xa8, 0x5f, 0xce, 0x88, 0x6f, 0xa5, 0x75, - 0xe1, 0x16, 0x04, 0x89, 0xfc, 0x36, 0x7c, 0x69, 0xb3, 0x71, 0x18, 0x78, 0x6e, 0x19, 0x1e, 0xd8, - 0x01, 0x0a, 0xb9, 0x09, 0xf9, 0xcf, 0xfb, 0xe2, 0x8d, 0x2e, 0x44, 0x3e, 0x2b, 0x8a, 0xe1, 0x7c, - 0x04, 0x01, 0xdf, 0xbc, 0x4e, 0xe4, 0xfe, 0x51, 0xfb, 0x2c, 0x6f, 0xab, 0xb3, 0x96, 0xee, 0xee, - 0xee, 0x94, 0x56, 0x46, 0x73, 0xc9, 0xfc, 0x20, 0x27, 0x52, 0x57, 0x2f, 0x35, 0x19, 0x09, 0xf0, - 0xa5, 0x66, 0x38, 0x68, 0x00, 0x5b, 0xc9, 0x4e, 0xd5, 0x19, 0xed, 0x96, 0x71, 0xed, 0x22, 0x3d, - 0xd8, 0xdb, 0x58, 0x13, 0xfa, 0x3a, 0xb1, 0xfc, 0x8b, 0xfc, 0xe2, 0x61, 0x49, 0x46, 0xad, 0x87, - 0x7c, 0xd8, 0x79, 0x61, 0x5d, 0x65, 0x9b, 0xa0, 0xa7, 0x70, 0x5e, 0x67, 0x2e, 0x74, 0x5c, 0xbc, - 0x20, 0x73, 0xbf, 0x2f, 0xee, 0xde, 0x2b, 0x15, 0xf8, 0x25, 0x20, 0x04, 0xbf, 0x4c, 0x80, 0xfa, - 0x7e, 0x3d, 0xfe, 0x73, 0xbe, 0xc6, 0x3f, 0x19, 0xee, 0x78, 0x40, 0x7c, 0xe3, 0x96, 0xf1, 0x01, - 0xc5, 0x99, 0x98, 0x65, 0xf0, 0x88, 0xe2, 0xf1, 0x7d, 0xbb, 0x93, 0x15, 0xc9, 0x80, 0xdc, 0x63, - 0x21, 0x4e, 0x12, 0x9b, 0xaf, 0x7b, 0xae, 0x63, 0xea, 0xaf, 0x9b, 0x79, 0x54, 0x04, 0x79, 0x09, - 0x95, 0xb5, 0xfe, 0x08, 0x48, 0x18, 0xbc, 0x03, 0x49, 0x08, 0xf5, 0xde, 0x17, 0x10, 0x24, 0x23, - 0x71, 0x5b, 0x8a, 0xdc, 0xfd, 0xec, 0xb6, 0x21, 0x61, 0xef, 0x12, 0x20, 0x7d, 0xb5, 0xc9, 0x9b, - 0xb0, 0x77, 0xbe, 0x24, 0x48, 0x4e, 0xb5, 0xda, 0x49, 0x7c, 0x64, 0x9d, 0x32, 0x64, 0xb8, 0x3f, - 0xc7, 0xab, 0x93, 0xd5, 0x69, 0x62, 0x04, 0x05, 0x34, 0x19, 0xcc, 0x5e, 0xcb, 0x18, 0xac, 0x51, - 0x8a, 0xd5, 0xab, 0x66, 0xd2, 0xc1, 0xc8, 0x97, 0x35, 0xc4, 0x88, 0x19, 0x15, 0xb9, 0xfd, 0xe7, - 0xfb, 0x67, 0x7f, 0x2c, 0x3c, 0x23, 0x77, 0x77, 0xc1, 0xdb, 0x0d, 0x97, 0x36, 0x4f, 0x08, 0x0f, - 0xd5, 0xeb, 0x5a, 0xaa, 0xaf, 0x82, 0xbb, 0xe3, 0x10, 0x8f, 0x64, 0x0e, 0xfa, 0xf6, 0x4b, 0xbd, - 0x42, 0x7c, 0xb7, 0xbc, 0xfd, 0xc5, 0x7c, 0x29, 0xcd, 0xdd, 0xf1, 0x31, 0x87, 0x95, 0x8b, 0xbe, - 0xde, 0xee, 0xca, 0xd9, 0xab, 0xe3, 0x8c, 0x27, 0x93, 0xaa, 0x23, 0x77, 0x3a, 0x86, 0xee, 0x2a, - 0xff, 0x08, 0x76, 0x6d, 0xa3, 0x63, 0x5d, 0x3a, 0xf8, 0x2e, 0xad, 0x72, 0x42, 0x26, 0xc3, 0xfc, - 0x14, 0x13, 0x13, 0x48, 0xb6, 0x9a, 0x57, 0x38, 0x66, 0x30, 0xe0, 0x3e, 0xf9, 0x45, 0x33, 0x42, - 0x7d, 0xa3, 0x98, 0x6e, 0xaa, 0xd2, 0x19, 0xd4, 0x5c, 0x5c, 0x5c, 0x5f, 0x89, 0x19, 0xb4, 0xfa, - 0xb5, 0x55, 0x4e, 0xa9, 0xc8, 0xcf, 0x10, 0x26, 0xb4, 0x8c, 0xc4, 0xc9, 0x6e, 0x15, 0xe4, 0x26, - 0xee, 0xb1, 0x0e, 0xbb, 0x41, 0x8c, 0x49, 0x0f, 0xb4, 0xd7, 0x82, 0xb3, 0x6a, 0xa9, 0x45, 0x67, - 0xe2, 0x7c, 0x4f, 0x0f, 0xf2, 0xc0, 0xe5, 0xc2, 0x22, 0x42, 0x91, 0x1c, 0x55, 0x55, 0x13, 0xc5, - 0x97, 0x6d, 0x93, 0x01, 0x53, 0x8f, 0x6c, 0xbd, 0x19, 0xe0, 0xd6, 0x95, 0x27, 0x3c, 0x10, 0x8c, - 0x8b, 0x8b, 0x8b, 0xe1, 0x50, 0xad, 0x2e, 0x48, 0xa7, 0xa3, 0x04, 0x48, 0xe2, 0x7d, 0xf0, 0x8c, - 0x29, 0x27, 0x2c, 0x8f, 0xe3, 0xe0, 0x07, 0x8f, 0x05, 0xcf, 0x98, 0xcc, 0xc5, 0x03, 0x48, 0x04, - 0x62, 0x9b, 0x32, 0x45, 0xe7, 0xdc, 0x48, 0x64, 0x28, 0x53, 0xfc, 0x18, 0xf4, 0x9d, 0x45, 0xc5, - 0x5d, 0x46, 0x72, 0xaa, 0x58, 0xdd, 0x21, 0x61, 0x04, 0x33, 0xc1, 0x0c, 0x04, 0x2e, 0x73, 0x5a, - 0xf8, 0xe2, 0x2c, 0x5c, 0x4f, 0x35, 0x56, 0x68, 0x7b, 0xd7, 0xcb, 0x7e, 0x13, 0x88, 0xff, 0x55, - 0x6d, 0x61, 0xae, 0xfb, 0xb8, 0x57, 0x92, 0xda, 0xfc, 0x32, 0x22, 0xa5, 0xfc, 0x8b, 0xa8, 0xc2, - 0xf1, 0x23, 0xe5, 0xe5, 0xfa, 0xb3, 0xbc, 0xfc, 0xbe, 0x9d, 0x3f, 0x0a, 0x4b, 0x1d, 0x65, 0x8d, - 0xb7, 0x3a, 0x49, 0x19, 0x10, 0xb0, 0xcc, 0x7e, 0x57, 0x89, 0xc4, 0xdd, 0xce, 0x10, 0x82, 0xb2, - 0xed, 0xdd, 0xfb, 0xc5, 0x77, 0x92, 0x78, 0x90, 0x81, 0xb4, 0xcf, 0x0a, 0xdb, 0x47, 0x7c, 0x6d, - 0x43, 0x15, 0x12, 0x95, 0x9e, 0x4c, 0xe7, 0xc4, 0x88, 0x93, 0xf7, 0x5d, 0x3f, 0x65, 0xad, 0x43, - 0x18, 0x8e, 0x26, 0x62, 0x3d, 0xe1, 0x9e, 0x43, 0x8d, 0x59, 0x1d, 0xbc, 0xfe, 0x34, 0xe5, 0xfd, - 0xb5, 0x4d, 0xe4, 0xfa, 0xdd, 0xdb, 0x2f, 0x5d, 0x4f, 0x0f, 0xe2, 0x42, 0x86, 0x1d, 0xa1, 0x6f, - 0x77, 0xb3, 0xc2, 0xed, 0xb7, 0xb6, 0xfb, 0xfd, 0xf7, 0x48, 0x27, 0x88, 0x9f, 0x90, 0x95, 0xa8, - 0x04, 0xe2, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x48, 0x24, 0x31, 0xa7, 0xc4, 0x99, 0xdf, 0xbd, - 0xd7, 0x27, 0x74, 0xfc, 0xb2, 0x74, 0xd4, 0xbc, 0x9c, 0xbd, 0xdc, 0x9d, 0x8b, 0x7b, 0xd7, 0x64, - 0xd4, 0xd8, 0x0d, 0x7a, 0x33, 0xc0, 0x73, 0xf4, 0x67, 0x80, 0x2c, 0x6e, 0xbd, 0x5d, 0x5c, 0x80, - 0x26, 0x18, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x49, 0x24, 0xb2, 0xbc, 0xc6, 0xad, 0x49, 0xcd, - 0xe6, 0xfe, 0x6b, 0xc5, 0x71, 0x3c, 0xc5, 0x17, 0x14, 0xc5, 0xc5, 0x30, 0x51, 0xde, 0xb5, 0xf2, - 0x69, 0xdf, 0xdd, 0xef, 0x71, 0x17, 0xcf, 0xe5, 0xe6, 0x2d, 0x37, 0x4b, 0x13, 0x08, 0x9a, 0xea, - 0x86, 0xe4, 0xed, 0xc7, 0x33, 0x43, 0x89, 0x12, 0x11, 0xc4, 0x0f, 0xb4, 0x6f, 0xd4, 0x5e, 0xbe, - 0x3e, 0xd5, 0xda, 0x5a, 0x95, 0x82, 0xb1, 0x10, 0x60, 0x15, 0x23, 0xf2, 0x1c, 0x98, 0x77, 0xd2, - 0xf0, 0x51, 0x74, 0x61, 0x77, 0xb3, 0x51, 0x76, 0xf8, 0xba, 0xdc, 0xa6, 0x3b, 0x32, 0x50, 0x16, - 0xf3, 0x08, 0x55, 0x5f, 0x96, 0xab, 0xa8, 0x98, 0x46, 0xd1, 0xbf, 0x3e, 0x67, 0xe6, 0xd5, 0x72, - 0x4e, 0x20, 0xba, 0xb7, 0xf0, 0x85, 0x37, 0xeb, 0x52, 0x7f, 0xc4, 0xc9, 0xc5, 0x6f, 0xc4, 0xc1, - 0x09, 0x45, 0x7d, 0xf8, 0x99, 0x2d, 0x93, 0x3c, 0x4f, 0x89, 0xb3, 0x03, 0xa5, 0xe6, 0xe9, 0xe2, - 0x70, 0x4b, 0xcd, 0xaa, 0xaf, 0x11, 0x7c, 0x87, 0xdd, 0xc9, 0xc5, 0x09, 0xa7, 0x4d, 0xf4, 0xb8, - 0x80, 0xa0, 0xc7, 0xbd, 0x94, 0xaf, 0x72, 0xd1, 0x57, 0x5e, 0xf1, 0x22, 0x0a, 0x84, 0xc7, 0x5d, - 0x57, 0xc7, 0x55, 0x35, 0x5c, 0xbf, 0x77, 0x7e, 0x20, 0x45, 0x55, 0x38, 0x61, 0x58, 0xb7, 0x5e, - 0xfc, 0x11, 0xdc, 0xff, 0x7e, 0x26, 0x61, 0x6a, 0x97, 0x88, 0xfc, 0x22, 0x32, 0x6a, 0x62, 0xf2, - 0x61, 0x61, 0x9f, 0x2b, 0x89, 0x3a, 0xd8, 0xfc, 0xb9, 0x89, 0x12, 0xaf, 0xc4, 0x89, 0x2d, 0x63, - 0xf0, 0x72, 0x08, 0xb9, 0x84, 0x5e, 0xfe, 0x5b, 0x9f, 0xbd, 0x67, 0xe4, 0x12, 0x66, 0x74, 0xdf, - 0x88, 0x04, 0x86, 0x76, 0xf7, 0x38, 0x98, 0x50, 0xea, 0xb5, 0x28, 0x60, 0xe6, 0x26, 0x63, 0xaa, - 0xa7, 0x5f, 0x7c, 0x29, 0x2f, 0x2d, 0xdd, 0x0c, 0xac, 0x1d, 0x4e, 0x41, 0x1b, 0x1f, 0x1a, 0xfa, - 0x33, 0xb1, 0x7b, 0xfc, 0x75, 0x8d, 0xb3, 0x45, 0x9e, 0xc1, 0x8c, 0x2f, 0x91, 0x82, 0x7f, 0xd9, - 0x9a, 0x6a, 0x43, 0x1c, 0x40, 0x82, 0xf8, 0xc9, 0x23, 0xc8, 0x26, 0xb5, 0xfa, 0x89, 0x12, 0x61, - 0xce, 0x2b, 0xce, 0x22, 0x1d, 0x1e, 0xf6, 0x02, 0x24, 0x0c, 0x28, 0x9c, 0x5d, 0xf4, 0x47, 0xc5, - 0x3a, 0x7c, 0x32, 0x34, 0x20, 0x6b, 0x05, 0x7c, 0xb7, 0x0a, 0x86, 0xca, 0x15, 0x6a, 0x73, 0xcb, - 0x58, 0x2c, 0xa9, 0x6c, 0x8e, 0x08, 0x81, 0xae, 0x9b, 0x40, 0x76, 0xf2, 0x48, 0xa3, 0x66, 0x94, - 0x69, 0xcb, 0xbe, 0x1a, 0xe4, 0x2d, 0x5e, 0x6e, 0x42, 0xee, 0xfe, 0x2c, 0x45, 0xdc, 0x57, 0x6d, - 0xb5, 0xf0, 0x57, 0x14, 0xe2, 0x9a, 0x8b, 0x8b, 0x9b, 0x67, 0x49, 0x7b, 0xe3, 0x04, 0xc5, 0xc9, - 0x0a, 0x19, 0x3a, 0x74, 0x31, 0xe3, 0x14, 0xa5, 0xe3, 0x94, 0x54, 0x30, 0x69, 0x45, 0xe1, 0x4b, - 0x50, 0x31, 0xe9, 0x97, 0xd1, 0xad, 0xa4, 0x50, 0x68, 0x65, 0x86, 0x5d, 0x93, 0x48, 0x18, 0x1b, - 0xcb, 0xe0, 0xa7, 0x08, 0x9c, 0xec, 0xd6, 0x6c, 0x59, 0x4b, 0x2e, 0x11, 0xb9, 0x97, 0xc4, 0x42, - 0x22, 0x29, 0x3b, 0x52, 0x75, 0xf3, 0x76, 0xe7, 0xc2, 0x92, 0xec, 0xbb, 0xc9, 0xb0, 0x5f, 0x0e, - 0x56, 0xab, 0x55, 0xa5, 0x16, 0xef, 0x82, 0xaa, 0xdd, 0xc7, 0x31, 0xc8, 0xb9, 0x33, 0xd9, 0xf0, - 0x86, 0xab, 0x18, 0x65, 0xf6, 0xa1, 0x7d, 0x57, 0xec, 0xae, 0xff, 0x10, 0x2c, 0xb9, 0x73, 0x97, - 0x0b, 0x9c, 0x41, 0x06, 0x5d, 0x83, 0x7e, 0x25, 0x89, 0x7a, 0xca, 0x39, 0x04, 0x42, 0x96, 0x37, - 0xe0, 0x22, 0x40, 0xf2, 0x18, 0x0b, 0x45, 0xc2, 0x82, 0xa3, 0x0b, 0x39, 0x05, 0xc2, 0xc3, 0x93, - 0x24, 0x88, 0x01, 0x1b, 0xfd, 0x34, 0xdb, 0x78, 0x73, 0x00, 0x19, 0x37, 0xf2, 0x6d, 0xdf, 0xf7, - 0xff, 0xd3, 0x6c, 0x43, 0xa2, 0xd9, 0x53, 0xa9, 0x51, 0x03, 0x2e, 0xa5, 0xb4, 0x7d, 0xc0, 0x50, - 0x82, 0x90, 0x81, 0x5d, 0xde, 0xb1, 0x61, 0x0c, 0x45, 0xe9, 0x88, 0x4a, 0xe3, 0x9b, 0x26, 0x71, - 0xe0, 0x61, 0x05, 0x20, 0x80, 0x82, 0x00, 0x58, 0x8c, 0x1a, 0xb5, 0x48, 0x2a, 0x41, 0xdb, 0x0f, - 0xa2, 0xe8, 0x12, 0x8e, 0x83, 0x39, 0x9c, 0x24, 0x3c, 0x78, 0xf4, 0x62, 0xdb, 0xad, 0xe9, 0xc9, - 0xd9, 0x60, 0x71, 0x0c, 0x8d, 0x81, 0x60, 0x44, 0xea, 0x06, 0xac, 0x1f, 0x08, 0xfc, 0xb0, 0x0a, - 0xd9, 0xb9, 0xd8, 0xb0, 0x76, 0x1f, 0xe0, 0x91, 0xc7, 0x00, 0x00, 0x46, 0xa1, 0x50, 0x67, 0xb9, - 0x2f, 0x6e, 0x55, 0x05, 0x60, 0x1f, 0x2b, 0x0c, 0xbc, 0x12, 0x31, 0x84, 0x0a, 0x32, 0x50, 0x2e, - 0x05, 0xd8, 0x05, 0x88, 0x22, 0xd3, 0x30, 0x67, 0xea, 0xfe, 0x1e, 0xe6, 0xd3, 0x6f, 0xc1, 0x19, - 0xe9, 0xe1, 0x2b, 0x90, 0xa7, 0x41, 0x7a, 0x97, 0xb0, 0xf2, 0xad, 0x4b, 0xcb, 0x5d, 0x7d, 0xdd, - 0xff, 0x08, 0x1c, 0xac, 0x4b, 0xd3, 0x37, 0x27, 0xce, 0x6b, 0x17, 0xf1, 0x7a, 0x99, 0x24, 0x6b, - 0x2e, 0x71, 0x1e, 0x22, 0x3f, 0x72, 0x7e, 0xb4, 0x51, 0x71, 0x70, 0xa9, 0xcb, 0x12, 0x04, 0x00, - 0xa1, 0x85, 0x61, 0x41, 0xc8, 0x4b, 0x8f, 0xda, 0x84, 0x9e, 0x4d, 0xc5, 0x67, 0x9c, 0x38, 0xf2, - 0xb1, 0x61, 0x03, 0xec, 0xd8, 0xab, 0x07, 0x58, 0xcb, 0xe3, 0xb2, 0x29, 0x89, 0x38, 0xcc, 0xaa, - 0xc9, 0x82, 0x60, 0xff, 0x2c, 0x0c, 0x92, 0xaf, 0xc4, 0x0b, 0x41, 0x90, 0xfb, 0xcc, 0x71, 0x21, - 0x80, 0xf0, 0x63, 0x18, 0xcf, 0xb6, 0x54, 0x04, 0x59, 0x4e, 0x41, 0xec, 0x62, 0xcb, 0xa3, 0x88, - 0xbd, 0x93, 0x3f, 0x59, 0x29, 0x84, 0x42, 0x21, 0x49, 0xe0, 0x3c, 0xb0, 0x65, 0x53, 0x5b, 0x14, - 0x67, 0x8b, 0x02, 0xb2, 0xd9, 0xd8, 0x63, 0xb7, 0x02, 0x82, 0x80, 0x5d, 0x3b, 0xd4, 0xd5, 0x1d, - 0xe0, 0xa4, 0x40, 0x52, 0x58, 0x34, 0xe7, 0xd2, 0x14, 0x19, 0x60, 0xd8, 0x0c, 0xca, 0x4b, 0x06, - 0x20, 0x1a, 0x0a, 0x0c, 0x48, 0xe3, 0x3e, 0xad, 0xc4, 0x38, 0x44, 0x0b, 0x78, 0x29, 0x04, 0x01, - 0x4b, 0x71, 0x90, 0x24, 0x01, 0xc9, 0x2b, 0x2a, 0x89, 0x0f, 0xc3, 0x28, 0x6a, 0xbc, 0xea, 0x3b, - 0x01, 0xc1, 0xea, 0xa3, 0xce, 0x16, 0x19, 0x61, 0xa4, 0x2b, 0x1d, 0x83, 0x28, 0xbc, 0xe7, 0xe8, - 0xdb, 0xc2, 0x20, 0xc0, 0x29, 0xd5, 0xfc, 0xbf, 0x98, 0xd5, 0x34, 0xec, 0x4c, 0xbc, 0x61, 0xf9, - 0x14, 0x37, 0x08, 0xf3, 0x9e, 0x73, 0x84, 0xc3, 0xd9, 0xf0, 0xe9, 0x20, 0x04, 0x6a, 0x46, 0x03, - 0x4c, 0x02, 0x94, 0x6b, 0xec, 0x0b, 0x16, 0x30, 0xff, 0xfe, 0x73, 0xd5, 0xe8, 0xb3, 0x48, 0x77, - 0x7d, 0xdc, 0xfd, 0xce, 0x78, 0x9e, 0x04, 0xd2, 0xa6, 0xb4, 0x66, 0xa3, 0x9f, 0x80, 0x5f, 0x93, - 0x5a, 0xfb, 0xad, 0x6f, 0x97, 0x77, 0x72, 0xc4, 0x47, 0x9c, 0x86, 0x83, 0x26, 0x8c, 0x8b, 0x2a, - 0xe4, 0x9b, 0x9d, 0xc6, 0x24, 0x9c, 0x64, 0x3a, 0x9f, 0x47, 0xc4, 0x32, 0x4e, 0x55, 0x43, 0x11, - 0x9a, 0x88, 0x70, 0x9e, 0xa1, 0x72, 0xa9, 0xc0, 0x00, 0x97, 0x1c, 0x1c, 0x0e, 0x18, 0x8a, 0x27, - 0x4f, 0xdb, 0x8a, 0xfc, 0x14, 0xcf, 0x00, 0x02, 0xd3, 0x80, 0x0f, 0x0f, 0x81, 0x2b, 0x30, 0xbc, - 0xb3, 0xf2, 0xc2, 0x0d, 0x2a, 0x75, 0xee, 0x23, 0x9e, 0x2e, 0x03, 0x24, 0x49, 0x4b, 0x5a, 0xe0, - 0x41, 0x02, 0x80, 0x73, 0x52, 0x52, 0x48, 0xc5, 0x6f, 0xd3, 0xe2, 0x5f, 0x88, 0x12, 0x34, 0x9d, - 0xd1, 0x0a, 0xb0, 0xa5, 0x5a, 0x52, 0xa1, 0xb7, 0x8f, 0x03, 0x85, 0x51, 0x29, 0xc1, 0xf1, 0x96, - 0xe3, 0x15, 0x41, 0xfc, 0x22, 0x58, 0x3f, 0xa7, 0xf0, 0x80, 0x80, 0xa6, 0xbd, 0xb9, 0xfe, 0xee, - 0xad, 0x1b, 0xab, 0xb0, 0xbc, 0x5c, 0x9c, 0xb2, 0x2c, 0x0d, 0x1b, 0x58, 0x31, 0x08, 0x8c, 0x2a, - 0x1d, 0x55, 0xec, 0x32, 0x9e, 0xaa, 0x89, 0x4c, 0x74, 0xb0, 0x5f, 0x92, 0x8f, 0x81, 0x24, 0x10, - 0x85, 0x08, 0x4b, 0x51, 0xe0, 0xb3, 0x48, 0xb0, 0x32, 0x40, 0x02, 0x88, 0x30, 0x21, 0x14, 0x79, - 0xc5, 0x18, 0xac, 0x7d, 0x55, 0x62, 0x57, 0x65, 0xf8, 0xe0, 0x36, 0x43, 0x21, 0x49, 0x59, 0x78, - 0x78, 0x58, 0x4f, 0x57, 0x40, 0xef, 0x73, 0x2c, 0xa6, 0x5f, 0x3c, 0xdc, 0xdf, 0xcf, 0x86, 0x2c, - 0x89, 0xa4, 0xbc, 0x87, 0xfc, 0x1e, 0xf0, 0xb8, 0x78, 0x03, 0x87, 0x80, 0xe0, 0x08, 0x08, 0x1c, - 0x00, 0x09, 0xc0, 0x4c, 0x78, 0xd0, 0xa5, 0x5b, 0x89, 0x74, 0x1a, 0x0c, 0x5f, 0x0d, 0xf0, 0xb3, - 0x92, 0x9c, 0xd0, 0x1b, 0xfc, 0xaa, 0xbb, 0x0b, 0xf7, 0xbd, 0xd7, 0x2e, 0xf7, 0x2f, 0x26, 0xdf, - 0x7c, 0x5d, 0xd7, 0x6a, 0x92, 0xf9, 0x6e, 0xe6, 0x8f, 0xe2, 0x0a, 0xa4, 0x8d, 0x51, 0xb6, 0x46, - 0x25, 0xf4, 0x43, 0x27, 0xc7, 0xde, 0xf9, 0x58, 0xf6, 0xd3, 0xe2, 0x5d, 0xd8, 0x63, 0xdf, 0xfc, - 0x11, 0x16, 0x6e, 0xfd, 0x7c, 0x39, 0xc4, 0x9c, 0x4e, 0x2f, 0x16, 0xff, 0x88, 0x0c, 0x69, 0x08, - 0x70, 0xe0, 0x72, 0x2e, 0x36, 0xa7, 0x87, 0x85, 0xf8, 0x0e, 0x1c, 0x5f, 0xe2, 0x3b, 0x83, 0x00, - 0x42, 0x14, 0x2d, 0xc5, 0x18, 0xa3, 0x1a, 0x65, 0x01, 0xee, 0x28, 0xc4, 0x83, 0x95, 0x0e, 0xd8, - 0x28, 0xc5, 0x63, 0xb6, 0x0e, 0xd9, 0x96, 0x1a, 0x65, 0x00, 0x7b, 0xa6, 0xd5, 0x4f, 0xf6, 0xf5, - 0xfc, 0xc9, 0x85, 0xb0, 0x82, 0x15, 0x4d, 0xa7, 0xe9, 0xb7, 0xff, 0x0c, 0x82, 0x91, 0xa2, 0x24, - 0xcb, 0xa8, 0x5b, 0x39, 0xe1, 0x4b, 0x34, 0x5e, 0xe7, 0x3d, 0x20, 0x9b, 0x49, 0xa6, 0x33, 0xd6, - 0x0a, 0x80, 0x24, 0x02, 0x50, 0x28, 0x00, 0x44, 0x88, 0x30, 0x85, 0x7d, 0x03, 0xbb, 0xc4, 0x5e, - 0xfd, 0x0e, 0xe0, 0x05, 0x0a, 0x1c, 0x8d, 0x0e, 0x84, 0x70, 0x51, 0x1f, 0xff, 0x7e, 0xdc, 0x6f, - 0x87, 0x06, 0xfe, 0xde, 0x5e, 0x5b, 0x1f, 0xf6, 0xf2, 0xcb, 0x34, 0x0f, 0x23, 0xcf, 0xf2, 0xfc, - 0x1b, 0xbb, 0x28, 0xae, 0xc0, 0x22, 0x00, 0x40, 0x1a, 0x41, 0x20, 0x3c, 0x99, 0x68, 0x27, 0xdc, - 0x15, 0x0e, 0x89, 0x95, 0x0a, 0xe4, 0x43, 0x00, 0x0d, 0xb6, 0x18, 0x02, 0xe4, 0x24, 0x49, 0xc0, - 0x74, 0xc7, 0xe8, 0x62, 0xc6, 0xfc, 0xff, 0xaa, 0x02, 0xb5, 0x32, 0xf1, 0x1f, 0xc7, 0x9b, 0xb6, - 0x41, 0x9d, 0xf8, 0xfb, 0xa6, 0x3b, 0xff, 0x10, 0x19, 0x1b, 0x72, 0x00, 0x74, 0x3c, 0x0e, 0x56, - 0x17, 0x8e, 0x52, 0x5d, 0x39, 0xdf, 0x66, 0x15, 0x29, 0x39, 0x19, 0xfb, 0x3a, 0x42, 0x30, 0xf8, - 0x6a, 0x5c, 0xf1, 0xfc, 0xb0, 0x19, 0xc0, 0x2c, 0x15, 0x08, 0x89, 0x7a, 0x6a, 0xd9, 0xbe, 0x0a, - 0x42, 0x00, 0xaa, 0x5c, 0x26, 0x16, 0xc2, 0x71, 0x57, 0xe1, 0xe9, 0x04, 0x43, 0x8b, 0x79, 0x5e, - 0x44, 0xb9, 0x09, 0xcb, 0x41, 0x32, 0x44, 0x82, 0x63, 0x82, 0x90, 0x88, 0x46, 0x2f, 0x28, 0x12, - 0x86, 0xce, 0x94, 0xa4, 0xc6, 0x11, 0x74, 0xa6, 0x3c, 0xc0, 0xbc, 0xd2, 0xac, 0x88, 0x60, 0xd4, - 0xa0, 0xcb, 0x80, 0x44, 0x41, 0x08, 0xfc, 0xf5, 0xc4, 0xe0, 0x2f, 0x48, 0xb9, 0x78, 0x04, 0x44, - 0x18, 0x8d, 0x2d, 0xed, 0x43, 0x49, 0x20, 0xbe, 0xb3, 0x51, 0xca, 0x92, 0xe2, 0x49, 0x46, 0xd0, - 0x7e, 0x5c, 0x20, 0x41, 0x35, 0xbf, 0xfc, 0xbc, 0xfe, 0x14, 0xe4, 0xde, 0xe2, 0x79, 0x08, 0xab, - 0xbe, 0x42, 0xbb, 0xfe, 0x3e, 0xa2, 0xa5, 0x06, 0x1c, 0x65, 0xf1, 0xe2, 0x3e, 0xba, 0xf8, 0x8a, - 0x57, 0xcf, 0x9f, 0x93, 0x25, 0xfe, 0x61, 0x3c, 0xb9, 0x89, 0x84, 0xcd, 0x55, 0xa5, 0xa7, 0xe3, - 0xcd, 0x2f, 0xbb, 0xd9, 0xf4, 0xe3, 0xb4, 0x7f, 0x89, 0x29, 0x5c, 0xc4, 0x3f, 0xd1, 0xf8, 0x73, - 0x03, 0xe1, 0xa8, 0x2c, 0x4d, 0x43, 0x9b, 0xc0, 0x18, 0x21, 0x28, 0x8c, 0x09, 0x54, 0x73, 0xa5, - 0xfc, 0x57, 0x0f, 0x48, 0x00, 0x0e, 0xeb, 0x36, 0xb2, 0x78, 0x12, 0x82, 0x12, 0xd3, 0x27, 0x27, - 0x67, 0x67, 0xe1, 0x96, 0xb6, 0x41, 0xfc, 0x7f, 0xbb, 0xdd, 0xdb, 0x09, 0x1f, 0x70, 0x30, 0x74, - 0x41, 0x1d, 0xf1, 0xfe, 0x8d, 0x9e, 0x38, 0x50, 0x87, 0x00, 0x3e, 0x4d, 0x90, 0x7d, 0x3a, 0xdf, - 0xe7, 0xee, 0x2d, 0x65, 0xae, 0xda, 0xfe, 0x15, 0x8f, 0x01, 0xdb, 0xd3, 0x6f, 0xfe, 0x06, 0x90, - 0x52, 0x34, 0xc9, 0xd1, 0xd4, 0x2c, 0x20, 0x7c, 0x4a, 0x71, 0x56, 0x5f, 0x1d, 0x0f, 0x11, 0x88, - 0xc0, 0xfd, 0xab, 0x29, 0x74, 0x31, 0x03, 0x85, 0x04, 0x02, 0xc8, 0x38, 0x3b, 0x28, 0x3b, 0x44, - 0x83, 0x47, 0xed, 0x8b, 0x65, 0xe2, 0xd8, 0xb6, 0xde, 0x1c, 0x50, 0x05, 0x86, 0x4b, 0x3f, 0x87, - 0xb7, 0xf1, 0x6c, 0x33, 0x8e, 0xd8, 0x42, 0x85, 0x8a, 0x16, 0x31, 0x82, 0x48, 0x9a, 0x75, 0xb6, - 0x2a, 0xc5, 0x17, 0xe0, 0xa0, 0x10, 0x82, 0x3b, 0xc5, 0x6f, 0x98, 0xf0, 0x88, 0x50, 0xa2, 0x78, - 0xe8, 0x0b, 0xc9, 0x66, 0xf1, 0xc2, 0x63, 0x31, 0x62, 0xeb, 0x78, 0xad, 0xc4, 0x38, 0xa0, 0x0d, - 0xfd, 0x81, 0x7f, 0xc4, 0x22, 0x0f, 0xf7, 0xef, 0x6f, 0x55, 0x2f, 0x8c, 0x97, 0x2c, 0x94, 0xcb, - 0x8e, 0x3a, 0x69, 0xd3, 0xd3, 0x0d, 0x9c, 0x13, 0xb7, 0x5e, 0x9e, 0x9a, 0x70, 0xe2, 0x80, 0x52, - 0x3b, 0x65, 0x26, 0x19, 0x7f, 0xfb, 0x69, 0x24, 0x2a, 0xcb, 0x5b, 0xa5, 0xb6, 0xdb, 0xb8, 0xab, - 0x07, 0x5f, 0x72, 0xdf, 0x4e, 0xd9, 0xfe, 0x19, 0x12, 0x14, 0x8d, 0x50, 0xbb, 0x8c, 0xa4, 0x4a, - 0xdc, 0xc5, 0x6e, 0x77, 0x4b, 0x06, 0xed, 0x1d, 0xf5, 0xee, 0xc5, 0xf7, 0x0c, 0x88, 0x05, 0x73, - 0x06, 0x0a, 0xe9, 0x5d, 0x6e, 0xdb, 0x83, 0xa5, 0xfd, 0xc2, 0x22, 0x01, 0x49, 0x0f, 0xe6, 0xb5, - 0x6b, 0x93, 0x3d, 0x8e, 0x11, 0x08, 0x82, 0xa8, 0x55, 0x62, 0xee, 0x78, 0xf7, 0x76, 0x7c, 0xf0, - 0x24, 0x11, 0x4c, 0x0d, 0x65, 0x56, 0x4a, 0x00, 0x18, 0xec, 0xd2, 0xee, 0x84, 0xdc, 0x22, 0x11, - 0x0a, 0x15, 0xda, 0x91, 0x31, 0x53, 0x9c, 0xc4, 0x39, 0x0f, 0x2b, 0x22, 0xb4, 0xa7, 0x66, 0xa3, - 0xc5, 0x45, 0xf0, 0xf7, 0x03, 0xaa, 0x9d, 0x96, 0x34, 0x59, 0xf0, 0xb4, 0x1d, 0x3f, 0x07, 0x5f, - 0xaf, 0x5c, 0xe7, 0x28, 0x16, 0x16, 0xf0, 0xa9, 0xc6, 0x58, 0x70, 0xdf, 0x75, 0x5a, 0x89, 0xec, - 0xef, 0xaa, 0xe8, 0x47, 0x7c, 0x77, 0xaa, 0x97, 0x34, 0x2a, 0x5b, 0xc3, 0xb8, 0x00, 0x10, 0xdb, - 0x88, 0xa5, 0xf2, 0x2f, 0x41, 0x2e, 0x52, 0x69, 0xe3, 0x74, 0x8c, 0xaa, 0x1b, 0xf8, 0x50, 0x41, - 0xec, 0x73, 0x78, 0xac, 0x9c, 0x1d, 0x19, 0xcf, 0x60, 0xce, 0x0e, 0x2d, 0x0a, 0x81, 0x6f, 0xfc, - 0x2c, 0xe0, 0x59, 0x2d, 0x21, 0x89, 0xd7, 0x6f, 0x33, 0x5c, 0xca, 0xdf, 0xcf, 0x79, 0xf9, 0xef, - 0xfb, 0x96, 0xdd, 0xe1, 0x44, 0x50, 0x02, 0x47, 0x94, 0x44, 0x18, 0x85, 0x97, 0x75, 0xff, 0x6d, - 0xbe, 0x1e, 0xc0, 0x04, 0xa3, 0x99, 0x70, 0xa3, 0xb3, 0x37, 0xe3, 0x54, 0xcb, 0xb1, 0xcd, 0xc9, - 0xf5, 0xab, 0x75, 0x55, 0x18, 0xe7, 0xf7, 0x5c, 0x04, 0x80, 0x14, 0x01, 0x2e, 0xa3, 0x15, 0xa1, - 0x75, 0xe6, 0x1e, 0x31, 0xc2, 0x46, 0x35, 0x87, 0x84, 0x42, 0x9b, 0xb5, 0x41, 0x76, 0xaa, 0x2e, - 0x36, 0xad, 0x0c, 0x1a, 0x9d, 0x88, 0xe5, 0x6b, 0x86, 0x47, 0xe2, 0xea, 0xa8, 0x20, 0x24, 0xe1, - 0x3b, 0x1d, 0xe1, 0x90, 0x88, 0x52, 0xd3, 0x42, 0xe2, 0xe7, 0xc2, 0xdc, 0xc9, 0x87, 0x71, 0xd5, - 0x5d, 0x93, 0xa8, 0xd9, 0x7c, 0x34, 0x8a, 0x00, 0xea, 0xe8, 0x6e, 0x33, 0x5b, 0xfa, 0x7b, 0x7b, - 0x6d, 0xb7, 0x11, 0x1d, 0x43, 0xcc, 0x40, 0x00, 0xf8, 0x8d, 0x6c, 0x2a, 0x50, 0x76, 0x0f, 0x77, - 0x6e, 0xcf, 0xdd, 0xe2, 0xbb, 0x96, 0xcf, 0x3c, 0x51, 0x96, 0x63, 0xd0, 0x61, 0xcf, 0xdf, 0x82, - 0x00, 0x20, 0x85, 0x35, 0x97, 0x8e, 0xfc, 0xfe, 0x17, 0x8a, 0x67, 0x70, 0xba, 0x28, 0xcd, 0xc5, - 0x0f, 0x90, 0xe1, 0xbc, 0x62, 0x67, 0xca, 0x70, 0x3a, 0x78, 0xa0, 0x3c, 0x4e, 0x2a, 0x02, 0x04, - 0xf7, 0x16, 0xac, 0x02, 0x30, 0x0e, 0x42, 0x91, 0x73, 0x60, 0x8e, 0x33, 0x0a, 0x37, 0x8f, 0xe1, - 0x4a, 0xf0, 0xff, 0x0a, 0x0d, 0xf5, 0xba, 0x0d, 0x48, 0x00, 0x2e, 0x2e, 0x2f, 0x85, 0x85, 0x78, - 0xd1, 0x41, 0x9e, 0xf0, 0x80, 0x27, 0x2b, 0xbd, 0xe2, 0xbb, 0xbf, 0x13, 0x0a, 0x12, 0x18, 0xa6, - 0x63, 0x92, 0xf7, 0x49, 0xee, 0x2b, 0x77, 0x15, 0xdb, 0xc4, 0x8c, 0x2a, 0x2f, 0x16, 0x1b, 0x4d, - 0x94, 0x66, 0x9c, 0x0b, 0x04, 0xcd, 0xc3, 0xd3, 0x14, 0xe3, 0x91, 0xf0, 0xbd, 0x7d, 0xe3, 0xde, - 0x25, 0x87, 0x85, 0xa1, 0xdd, 0xaf, 0xf1, 0xf5, 0xf9, 0x21, 0x51, 0x0b, 0xc5, 0x36, 0xc5, 0xe1, - 0xfe, 0x42, 0x56, 0xa5, 0xe1, 0x11, 0x2a, 0xaa, 0x9a, 0xae, 0xb5, 0xac, 0x48, 0xea, 0x47, 0x20, - 0xe5, 0x87, 0x5a, 0xf8, 0x91, 0x42, 0x23, 0xcb, 0xae, 0xf7, 0xf0, 0x55, 0xc4, 0xfa, 0x4a, 0x94, - 0x94, 0x00, 0x0b, 0x29, 0x20, 0x00, 0x14, 0x53, 0x80, 0x38, 0x48, 0x05, 0x52, 0x8a, 0x07, 0xc3, - 0x53, 0x40, 0x53, 0x0f, 0x38, 0x0f, 0x19, 0xc3, 0x54, 0x95, 0x6d, 0xf6, 0xff, 0x6d, 0xde, 0x7e, - 0xbf, 0xbe, 0x1a, 0x94, 0x00, 0x4b, 0x47, 0x8f, 0x24, 0x71, 0x48, 0x79, 0xbe, 0xf7, 0xf8, 0x97, - 0xc1, 0xd1, 0xfe, 0xe0, 0xe2, 0x0a, 0xc8, 0x25, 0xf9, 0xee, 0x89, 0x30, 0x33, 0x12, 0xf4, 0x1f, - 0x24, 0xfa, 0x71, 0x17, 0xda, 0x76, 0x00, 0x2a, 0x5b, 0x96, 0x03, 0x10, 0x38, 0x24, 0xa3, 0x6b, - 0x0c, 0x09, 0x2f, 0x77, 0x87, 0x14, 0x13, 0xd6, 0x8c, 0x9f, 0xff, 0xeb, 0x5b, 0x1b, 0x7f, 0xe0, - 0x50, 0x02, 0xc0, 0xf9, 0x56, 0xf9, 0x50, 0x5f, 0xde, 0x2c, 0xbf, 0x33, 0x31, 0x3c, 0xaa, 0x06, - 0x9c, 0x3d, 0x80, 0x3e, 0x67, 0x54, 0x34, 0xda, 0xee, 0xd1, 0xd7, 0x74, 0x7a, 0x75, 0x1d, 0x5e, - 0xec, 0xd3, 0x06, 0x37, 0x3b, 0xae, 0x9a, 0x7a, 0x65, 0xf0, 0xe6, 0x00, 0x2f, 0xd8, 0x57, 0x3b, - 0x0e, 0x41, 0x65, 0x0f, 0xfa, 0x9a, 0x70, 0x78, 0xfb, 0x38, 0x36, 0xf8, 0xbb, 0xd3, 0x16, 0xf2, - 0xf4, 0xc7, 0xfc, 0x6d, 0x17, 0x37, 0xef, 0x78, 0x6d, 0x90, 0x01, 0x59, 0x5a, 0x20, 0x03, 0xeb, - 0xd8, 0x10, 0xee, 0xb6, 0xdb, 0xac, 0xbc, 0xd0, 0x2f, 0x38, 0x7e, 0x70, 0x3c, 0x1b, 0x94, 0x5c, - 0x5c, 0xae, 0x56, 0x7d, 0x02, 0xc2, 0xb7, 0xc5, 0xe2, 0xfc, 0x02, 0x32, 0x10, 0x0a, 0x50, 0x00, - 0x01, 0x0e, 0x38, 0x3c, 0xb3, 0x24, 0x08, 0x20, 0x4e, 0x58, 0x92, 0x38, 0x27, 0xe0, 0xd8, 0x77, - 0x45, 0xc8, 0x96, 0x1c, 0x02, 0xc0, 0xef, 0xe5, 0xea, 0x7e, 0xf1, 0x20, 0x97, 0x90, 0xb9, 0x86, - 0x6e, 0x73, 0x66, 0x4a, 0xb1, 0x11, 0x82, 0xe3, 0x30, 0x0a, 0x96, 0xb7, 0x94, 0x0d, 0x78, 0xba, - 0xc4, 0x7a, 0xe2, 0x64, 0x21, 0x14, 0x9c, 0x0f, 0xa2, 0xc4, 0x43, 0xfc, 0x2f, 0xcb, 0x0f, 0xc0, - 0x58, 0x0b, 0x0c, 0x12, 0x87, 0x98, 0x95, 0x2d, 0x80, 0x02, 0x59, 0x91, 0x41, 0x40, 0x05, 0x80, - 0x75, 0xa5, 0xc8, 0x48, 0x34, 0x13, 0xf0, 0x63, 0x71, 0x56, 0xef, 0x05, 0x15, 0x85, 0x45, 0x2a, - 0x70, 0xc0, 0x52, 0x4b, 0x54, 0xa0, 0x93, 0x51, 0x5f, 0xf3, 0x41, 0x07, 0x75, 0x5f, 0xc1, 0x26, - 0xb5, 0xef, 0x96, 0xaa, 0xaa, 0xb9, 0x04, 0xd6, 0xbc, 0x41, 0x8c, 0xc2, 0x1c, 0xce, 0xbc, 0x8f, - 0x88, 0x18, 0x66, 0x8a, 0x4d, 0x50, 0x35, 0x44, 0xaf, 0x93, 0xdb, 0x7d, 0x2d, 0x2a, 0xa4, 0xd7, - 0xc4, 0xc1, 0x16, 0x50, 0x86, 0x82, 0x15, 0x61, 0xac, 0x58, 0x6c, 0x90, 0x02, 0xb6, 0x3b, 0xdf, - 0xe0, 0x4c, 0x6e, 0x42, 0x3b, 0x4c, 0xa8, 0x03, 0x94, 0x71, 0x5d, 0xeb, 0x7f, 0x8c, 0x72, 0x2e, - 0x29, 0x86, 0x14, 0xf7, 0x5d, 0xb8, 0xff, 0x37, 0x86, 0xb5, 0xe5, 0xf3, 0xf6, 0xd2, 0x3f, 0x27, - 0x6f, 0x87, 0x89, 0x00, 0x1f, 0x9f, 0x09, 0x0d, 0xc5, 0x79, 0x4b, 0x70, 0x59, 0x96, 0x4c, 0x32, - 0xc9, 0x8f, 0xc2, 0x92, 0xb0, 0xac, 0xe1, 0x7a, 0x14, 0x69, 0xe9, 0x47, 0x7b, 0x2f, 0x99, 0xc9, - 0x41, 0xd1, 0x1f, 0x8c, 0xd2, 0x9c, 0x96, 0x10, 0x18, 0xb8, 0x70, 0x78, 0x0a, 0xb1, 0xa4, 0xd9, - 0xc5, 0xdb, 0x67, 0x18, 0x8f, 0xc3, 0x02, 0x42, 0x97, 0xc0, 0x70, 0xb0, 0x1d, 0x41, 0x65, 0x45, - 0x00, 0x19, 0x60, 0x0c, 0xf0, 0x07, 0x0b, 0x00, 0x06, 0x7a, 0xc9, 0x76, 0x3e, 0x61, 0x9d, 0xf8, - 0x1d, 0x8d, 0x59, 0x8c, 0xe2, 0x14, 0x83, 0x2d, 0x61, 0xbc, 0x00, 0x26, 0x9b, 0x33, 0x09, 0x69, - 0xd8, 0x55, 0xe7, 0xf9, 0x32, 0xfb, 0xef, 0x1d, 0xbb, 0xfd, 0x65, 0x5f, 0x17, 0x1d, 0xb8, 0xe7, - 0x81, 0xf4, 0x2b, 0x18, 0xda, 0x72, 0xd4, 0x51, 0x60, 0xff, 0x8e, 0x7f, 0x0e, 0x4a, 0x00, 0x64, - 0x58, 0xb3, 0xc2, 0x0f, 0x9c, 0xdd, 0xb3, 0x75, 0x6f, 0x6c, 0x52, 0xca, 0xe5, 0x58, 0xb5, 0x32, - 0x3e, 0x3a, 0xa3, 0xa4, 0x60, 0xa4, 0xe2, 0xad, 0xb0, 0x59, 0x87, 0xa2, 0x23, 0x1d, 0xbe, 0x19, - 0x08, 0x0c, 0x8a, 0xc5, 0x1a, 0xa6, 0x3e, 0xae, 0xe7, 0xfa, 0x8a, 0x13, 0x31, 0x9c, 0x3e, 0xb3, - 0x7d, 0xfa, 0x0e, 0xd9, 0x81, 0x44, 0x20, 0x14, 0x93, 0x9f, 0xed, 0xf5, 0x96, 0x65, 0x80, 0xcd, - 0xcb, 0x76, 0x0c, 0xd8, 0x59, 0xc5, 0x69, 0x6b, 0x80, 0x6a, 0x00, 0x40, 0x8d, 0x82, 0x54, 0x41, - 0x01, 0x46, 0xe1, 0x9c, 0x70, 0x05, 0x4d, 0x6f, 0x2f, 0x87, 0xb8, 0x5b, 0x21, 0x40, 0x95, 0x6a, - 0x9f, 0x20, 0xce, 0xb0, 0x28, 0xb0, 0xd8, 0x92, 0x98, 0xd2, 0xc0, 0xad, 0x03, 0xc9, 0x54, 0x00, - 0xa8, 0x7c, 0x39, 0x20, 0x03, 0x3d, 0x24, 0x85, 0xd4, 0x84, 0x13, 0x88, 0x08, 0xb4, 0xdc, 0xb5, - 0x4a, 0x8c, 0x9a, 0xde, 0x5d, 0x5f, 0xd8, 0x0c, 0x00, 0x52, 0x37, 0x64, 0xb5, 0x26, 0x1c, 0x0b, - 0x4f, 0xe0, 0x46, 0x2c, 0x09, 0x56, 0x80, 0x01, 0x20, 0x6a, 0x91, 0x65, 0xe1, 0x20, 0xa8, 0x71, - 0x44, 0xb5, 0x49, 0xab, 0x07, 0xcf, 0x48, 0x9e, 0xcf, 0x72, 0x33, 0xdc, 0x10, 0x49, 0x03, 0x29, - 0x37, 0xac, 0x55, 0xc6, 0xa5, 0xac, 0x51, 0x78, 0x42, 0x14, 0x22, 0xc0, 0x8b, 0x12, 0x1d, 0x1f, - 0x5e, 0x00, 0xac, 0xb1, 0x57, 0xcf, 0x2b, 0xe9, 0x1c, 0xe1, 0x67, 0x1b, 0x6c, 0xb5, 0x05, 0x07, - 0x8f, 0x07, 0x17, 0x79, 0xd4, 0xdc, 0xf1, 0x23, 0xe7, 0x65, 0x5e, 0x4d, 0x6b, 0x25, 0xdd, 0x6a, - 0x24, 0xe6, 0x11, 0x82, 0xbc, 0xeb, 0xcc, 0xa2, 0x1e, 0x29, 0x81, 0x7b, 0x27, 0x51, 0x01, 0xe4, - 0xf5, 0x2a, 0x82, 0xf3, 0x71, 0x10, 0x85, 0x56, 0xb5, 0x1c, 0x4b, 0x07, 0x15, 0x94, 0x39, 0xb7, - 0x00, 0x8c, 0x83, 0x90, 0x87, 0xd5, 0x62, 0x7d, 0xf1, 0x1c, 0xb3, 0xe0, 0x11, 0x90, 0x72, 0x14, - 0x9f, 0x81, 0xdc, 0x76, 0x61, 0xc7, 0x0f, 0x00, 0x3e, 0x45, 0x12, 0x91, 0xf9, 0x31, 0x64, 0xbf, - 0xe7, 0xc1, 0x19, 0xc3, 0xc0, 0x00, 0x40, 0x69, 0x8f, 0x0f, 0x2c, 0x3b, 0x88, 0x17, 0x41, 0x8e, - 0xad, 0x5d, 0xd6, 0xb2, 0x71, 0x84, 0x2f, 0x2e, 0xbe, 0xf7, 0xd3, 0x7c, 0xf8, 0x6e, 0x8a, 0xb6, - 0xb8, 0x42, 0x92, 0x5e, 0xa3, 0x74, 0xd5, 0xab, 0x12, 0x78, 0x40, 0xe4, 0xc6, 0x67, 0x5a, 0xf3, - 0x62, 0xe6, 0x25, 0x12, 0xaf, 0x8e, 0x34, 0xb0, 0x9c, 0xc4, 0xc2, 0x54, 0xd4, 0xf9, 0xa7, 0x5a, - 0xe6, 0xcf, 0x13, 0x1e, 0x4f, 0xe8, 0x5a, 0xa5, 0xf0, 0x5c, 0x53, 0xfe, 0x5c, 0x10, 0xe0, 0x64, - 0x15, 0x62, 0x8f, 0xf0, 0x11, 0x61, 0xc5, 0x00, 0x28, 0xf6, 0x1f, 0xb5, 0xfe, 0x13, 0xc5, 0x58, - 0x2c, 0x2e, 0x90, 0x97, 0xa7, 0x38, 0xec, 0x21, 0x99, 0x8d, 0x43, 0xd8, 0x71, 0x97, 0x71, 0x37, - 0x77, 0x6e, 0xb7, 0x74, 0xc1, 0x00, 0x20, 0x19, 0x8c, 0x62, 0x42, 0x4c, 0xba, 0xcb, 0x5e, 0xde, - 0x1d, 0x50, 0x02, 0xbf, 0x0f, 0xbd, 0xb4, 0x79, 0xdf, 0x66, 0x38, 0x74, 0x94, 0x74, 0xea, 0x2d, - 0x38, 0x61, 0x4f, 0x37, 0xb6, 0xdd, 0x37, 0x7e, 0x64, 0x16, 0x33, 0x7e, 0xad, 0x70, 0x80, 0x90, - 0x56, 0x72, 0x33, 0xc0, 0xd8, 0x16, 0x19, 0x5a, 0x0e, 0xc2, 0x6c, 0x2a, 0xf4, 0x75, 0xd3, 0x1f, - 0xf2, 0xe8, 0xa1, 0xbf, 0x8b, 0xa0, 0x94, 0x3c, 0xfc, 0x14, 0x84, 0x09, 0x71, 0xd1, 0xe7, 0xc0, - 0x92, 0x14, 0x10, 0x1d, 0x83, 0x52, 0xc0, 0x00, 0x9d, 0xd8, 0x38, 0xd8, 0x28, 0x00, 0x11, 0x96, - 0x00, 0x04, 0x61, 0xc6, 0x35, 0x3c, 0x00, 0x1c, 0x14, 0xce, 0xe0, 0x58, 0xd1, 0xb8, 0x5f, 0x1b, - 0xb9, 0x78, 0x1f, 0xa0, 0xf8, 0xb8, 0x0f, 0x00, 0x88, 0xd9, 0x78, 0x1f, 0x92, 0x97, 0xe3, 0xc0, - 0xb0, 0xe0, 0x3d, 0x5d, 0x80, 0x60, 0xa0, 0x21, 0xe5, 0x80, 0x01, 0x48, 0x1d, 0x41, 0x28, 0x93, - 0xcb, 0x03, 0x59, 0x91, 0x2d, 0x43, 0xc3, 0x43, 0xc5, 0xb0, 0x7f, 0xf8, 0xab, 0x7c, 0x38, 0xa0, - 0x04, 0xd2, 0x2d, 0x00, 0xd1, 0x51, 0x48, 0xe3, 0x2f, 0xff, 0xd9, 0x74, 0x6e, 0x20, 0xe9, 0x92, - 0x6f, 0x86, 0x65, 0x43, 0x0c, 0x4e, 0x4c, 0xa8, 0x94, 0xdd, 0xba, 0xdb, 0xb5, 0xf0, 0x75, 0x06, - 0x30, 0x7f, 0xf8, 0xf7, 0xfe, 0x01, 0x89, 0x03, 0x80, 0x50, 0xab, 0x96, 0x28, 0x2e, 0x15, 0x8d, - 0x5b, 0x27, 0x80, 0x58, 0xdf, 0xdb, 0xb8, 0x9e, 0x17, 0xd2, 0x8a, 0xe0, 0xf3, 0xe0, 0x86, 0x37, - 0x86, 0xf0, 0x10, 0x93, 0x46, 0x2e, 0xa3, 0x9f, 0xbe, 0x57, 0x51, 0xd1, 0x48, 0x2b, 0xa4, 0xee, - 0x67, 0x3f, 0x7f, 0x6d, 0x65, 0xd7, 0x45, 0x65, 0xc3, 0xc6, 0x07, 0xbe, 0x4b, 0x60, 0xed, 0xc0, - 0xe6, 0x03, 0x09, 0x84, 0xa0, 0xfb, 0x97, 0x62, 0xf1, 0xce, 0x2c, 0xb2, 0x6e, 0x9e, 0x01, 0x08, - 0x05, 0x01, 0x52, 0x88, 0x1c, 0x26, 0x57, 0xac, 0xa8, 0x9f, 0x8a, 0x89, 0xfb, 0xc8, 0x82, 0xa4, - 0x85, 0xb4, 0xf1, 0x4b, 0x26, 0xf8, 0x04, 0x60, 0x18, 0x02, 0x19, 0x54, 0xfc, 0x55, 0x7e, 0xbd, - 0xf8, 0x04, 0x60, 0x18, 0x12, 0xfc, 0xfc, 0x02, 0x30, 0x0c, 0x15, 0xeb, 0xab, 0x4b, 0xcb, 0xd5, - 0x42, 0xdc, 0x12, 0x08, 0x5d, 0x7a, 0x4e, 0x12, 0x3f, 0x54, 0xed, 0xdf, 0xd9, 0x39, 0x33, 0xc4, - 0x6d, 0x48, 0xf0, 0x1b, 0x5c, 0xa3, 0x3f, 0xf1, 0x15, 0xc6, 0x6e, 0x47, 0xd6, 0x7f, 0x21, 0x6a, - 0x92, 0x5e, 0x33, 0x4a, 0xd2, 0x44, 0x23, 0x69, 0x46, 0x3e, 0xb1, 0x31, 0x89, 0xd7, 0xc6, 0x51, - 0x4b, 0x96, 0x86, 0xc5, 0x87, 0x69, 0xdb, 0xe9, 0xb6, 0xd7, 0x84, 0x64, 0xa2, 0x3e, 0xed, 0x5d, - 0x19, 0xf2, 0xe1, 0xb7, 0x00, 0x1b, 0xe9, 0x39, 0x91, 0x93, 0x39, 0xe1, 0xab, 0x2c, 0xec, 0x62, - 0x5d, 0x12, 0xef, 0x6d, 0x1d, 0x63, 0x62, 0x4a, 0x6c, 0x33, 0xad, 0x90, 0x83, 0x08, 0xfe, 0xf7, - 0x5f, 0x0b, 0x60, 0x03, 0x65, 0x8e, 0x5e, 0x86, 0x57, 0x10, 0x3f, 0xec, 0x89, 0x6f, 0xa9, 0x7b, - 0x3b, 0xab, 0x22, 0xd2, 0xfb, 0xc2, 0xa4, 0x28, 0x00, 0xfa, 0x5e, 0x62, 0x48, 0x5c, 0xbe, 0x2d, - 0x8b, 0x66, 0x8d, 0xb3, 0x45, 0xd1, 0x57, 0xc0, 0xde, 0xdf, 0xeb, 0x75, 0x55, 0x24, 0x42, 0x8a, - 0x00, 0x17, 0x1b, 0x37, 0x4d, 0x18, 0x93, 0xe4, 0x5f, 0x19, 0x6d, 0x4b, 0xb1, 0xff, 0x89, 0x60, - 0x58, 0x9d, 0xcb, 0x77, 0x9a, 0x27, 0xee, 0xf0, 0xc9, 0x20, 0x04, 0x12, 0x96, 0x4a, 0x2c, 0xff, - 0xf7, 0x3a, 0x92, 0x0d, 0xec, 0x83, 0x7d, 0x3d, 0x7c, 0xfc, 0x55, 0xf6, 0x19, 0x50, 0x05, 0xec, - 0x52, 0x8b, 0xd3, 0x71, 0x0c, 0x13, 0xbd, 0x3d, 0xba, 0x63, 0x9c, 0xce, 0xc9, 0x31, 0x79, 0x60, - 0x6d, 0xd2, 0x50, 0x5c, 0x7e, 0x7e, 0x01, 0x09, 0x02, 0x80, 0x50, 0xc0, 0x61, 0xe2, 0x06, 0x86, - 0x3d, 0x1c, 0x00, 0x38, 0xb1, 0xd0, 0x21, 0x4d, 0x46, 0x9c, 0x3e, 0xe4, 0xa9, 0x0d, 0x4b, 0x00, - 0x06, 0x55, 0x78, 0x3d, 0xcf, 0x44, 0x28, 0x37, 0x60, 0xb8, 0xe0, 0x50, 0x12, 0x14, 0xc8, 0xa7, - 0xc4, 0x1c, 0x11, 0xeb, 0x22, 0xb2, 0x52, 0x45, 0x82, 0x6a, 0xc3, 0xbd, 0x24, 0x87, 0xbe, 0x70, - 0x38, 0x35, 0xcc, 0x31, 0x28, 0x02, 0x9d, 0x4c, 0x1a, 0x81, 0x4f, 0x30, 0x3e, 0xe5, 0xdb, 0xb9, - 0x6b, 0x16, 0xce, 0xf1, 0x56, 0x3b, 0x77, 0x19, 0xa1, 0x69, 0x98, 0xcb, 0x8c, 0x97, 0x71, 0x8b, - 0x90, 0x21, 0x50, 0xdb, 0x20, 0x01, 0x59, 0xd5, 0xb1, 0x44, 0xe6, 0xcc, 0x98, 0x88, 0xbe, 0xcf, - 0x3f, 0xba, 0xcf, 0x3c, 0x90, 0x3f, 0x03, 0xb0, 0x9b, 0x3a, 0x62, 0x6b, 0xbe, 0xe2, 0x18, 0x2c, - 0x2a, 0xca, 0x00, 0x2e, 0x14, 0x97, 0xd8, 0xe8, 0x9c, 0xb9, 0x55, 0x64, 0xc8, 0xde, 0xa9, 0x8e, - 0xe0, 0xbe, 0x38, 0xd5, 0x10, 0x9c, 0x31, 0x02, 0x46, 0xda, 0xaa, 0x51, 0xea, 0x19, 0x95, 0xd4, - 0xb8, 0x2e, 0x04, 0x9c, 0x7a, 0xc1, 0x63, 0xac, 0xb6, 0xe0, 0x0a, 0x14, 0x5d, 0xff, 0x07, 0x3f, - 0x2d, 0x3c, 0x39, 0xda, 0x0d, 0x31, 0x0b, 0xc4, 0x3b, 0xfe, 0x08, 0xf9, 0x2a, 0xd1, 0x8b, 0x29, - 0x78, 0xae, 0xaa, 0xa2, 0xea, 0x03, 0x09, 0x86, 0x22, 0x58, 0x20, 0x04, 0x03, 0x04, 0x36, 0x4f, - 0x53, 0xe0, 0xa3, 0x77, 0x1a, 0xe5, 0xe0, 0xf0, 0xd6, 0xa0, 0x59, 0xf3, 0x95, 0x2a, 0xe0, 0x07, - 0xa3, 0xf0, 0x40, 0x0c, 0x06, 0x44, 0xb4, 0xac, 0xa8, 0xdf, 0x3d, 0x90, 0x52, 0xa7, 0x1c, 0xac, - 0xbd, 0x94, 0xd5, 0x4a, 0xab, 0x93, 0x7e, 0x20, 0x15, 0x95, 0x54, 0x0d, 0x51, 0x76, 0x0c, 0x44, - 0xb8, 0x35, 0x3c, 0x9b, 0xc8, 0xc3, 0x57, 0x55, 0x55, 0x2e, 0xbb, 0x14, 0xfd, 0xe4, 0xc8, 0xde, - 0x4a, 0xd6, 0x23, 0x8a, 0xb6, 0xbb, 0xbb, 0xc9, 0xc2, 0x3b, 0x4a, 0x94, 0x2f, 0x50, 0x48, 0xf7, - 0x67, 0x44, 0xc0, 0xa4, 0xbb, 0xff, 0x8a, 0x29, 0xa1, 0x7b, 0x8a, 0xda, 0xe2, 0x21, 0x1e, 0x69, - 0x25, 0x66, 0xcc, 0x77, 0xd6, 0x36, 0x88, 0xb9, 0xac, 0x78, 0x88, 0x46, 0xb4, 0xb5, 0x52, 0xd5, - 0x4c, 0xca, 0xec, 0x9a, 0x6d, 0xf8, 0xec, 0xa8, 0x26, 0x41, 0x69, 0x5b, 0x49, 0xf6, 0xfc, 0x7d, - 0x9d, 0xdf, 0x9b, 0x16, 0x75, 0xc9, 0x0a, 0x7c, 0x3d, 0x67, 0xf6, 0x71, 0xcd, 0x9f, 0xe5, 0xd6, - 0xbe, 0x42, 0x69, 0x37, 0xe1, 0x2c, 0x2d, 0xe5, 0xb1, 0xe8, 0x76, 0xd6, 0x1d, 0x70, 0x33, 0x23, - 0xb3, 0x40, 0x99, 0x59, 0x81, 0x7f, 0xf5, 0xb5, 0x03, 0x21, 0x19, 0x27, 0x1c, 0xa6, 0x01, 0x56, - 0x85, 0xb3, 0x64, 0x25, 0xb3, 0x78, 0x0c, 0x74, 0x12, 0x66, 0xc6, 0x38, 0x09, 0x70, 0xf7, 0x96, - 0x1f, 0x0d, 0xb8, 0x03, 0x04, 0x84, 0xa7, 0xd0, 0x34, 0x09, 0x5e, 0xd4, 0x16, 0x9a, 0xa3, 0xbd, - 0x8c, 0x6c, 0x61, 0x35, 0x58, 0x1a, 0xc9, 0x65, 0x07, 0x72, 0x55, 0x5c, 0x8d, 0x8c, 0x29, 0xd0, - 0x6c, 0x0a, 0x6e, 0xac, 0xab, 0x45, 0x82, 0x11, 0x23, 0x48, 0x24, 0x03, 0xc3, 0x11, 0x44, 0xc0, - 0x9b, 0x50, 0xff, 0x87, 0xce, 0x39, 0x5d, 0x09, 0x24, 0xf5, 0x1f, 0x78, 0xb7, 0xe0, 0x12, 0x5d, - 0xe0, 0xd3, 0xd3, 0x90, 0x9f, 0x8c, 0xd3, 0x7a, 0x1b, 0xe1, 0x80, 0xc8, 0xd9, 0x6c, 0xf1, 0xe1, - 0x5a, 0x79, 0x28, 0x34, 0x2d, 0x88, 0x1c, 0x3f, 0x8e, 0xc2, 0xd6, 0x84, 0xad, 0x91, 0x82, 0xf2, - 0xcc, 0x90, 0x38, 0x01, 0xd9, 0x80, 0x96, 0x92, 0x09, 0x82, 0x48, 0x32, 0x4a, 0x47, 0xe2, 0x1f, - 0xba, 0xa3, 0x18, 0xe0, 0x20, 0x06, 0xc6, 0x19, 0x29, 0x68, 0x40, 0x7c, 0xfc, 0x10, 0x2c, 0x13, - 0x06, 0xaa, 0x8f, 0x3f, 0x7c, 0xdd, 0x55, 0x37, 0xf5, 0x90, 0xb0, 0x06, 0x0f, 0x88, 0x3f, 0x01, - 0xa8, 0x9c, 0x88, 0xed, 0x71, 0x56, 0x7f, 0xc5, 0x5f, 0x05, 0x03, 0x6e, 0x7c, 0x49, 0xf1, 0x61, - 0x96, 0x60, 0xff, 0x2f, 0x91, 0x86, 0xa4, 0x2c, 0x21, 0x71, 0x64, 0xb8, 0xb8, 0xa6, 0x1c, 0x3c, - 0x55, 0x1e, 0xf4, 0xf3, 0xd8, 0xc9, 0x74, 0x2d, 0x0f, 0xe1, 0x82, 0x40, 0xc2, 0x8e, 0xd8, 0xd2, - 0xdb, 0x6a, 0xf5, 0x35, 0x3e, 0x18, 0x0a, 0x14, 0xdd, 0xa9, 0xca, 0x34, 0xd7, 0x2d, 0xd4, 0x0c, - 0x7b, 0x53, 0xdc, 0xec, 0xf7, 0x2a, 0x69, 0x05, 0x84, 0xa8, 0xaf, 0xc2, 0xf4, 0xeb, 0x08, 0x02, - 0x80, 0x54, 0x6e, 0x98, 0x18, 0xda, 0x96, 0x61, 0xc0, 0x98, 0x80, 0xd6, 0xc3, 0xc7, 0x22, 0x3c, - 0xa3, 0x35, 0xc2, 0x5a, 0xb9, 0x3a, 0x67, 0xfa, 0x2f, 0x5c, 0x40, 0x2b, 0xee, 0x4a, 0x0a, 0xe6, - 0xc8, 0x33, 0x44, 0xee, 0x19, 0x9a, 0x82, 0x3c, 0xff, 0x4e, 0xda, 0xcc, 0x2f, 0x10, 0x1c, 0x2d, - 0x42, 0x8f, 0x8e, 0x69, 0x07, 0x8d, 0xf7, 0xf1, 0x01, 0x82, 0x2e, 0x98, 0x87, 0xa4, 0x5c, 0x2c, - 0x6f, 0xa6, 0x5e, 0xb3, 0xef, 0xf1, 0x01, 0x4b, 0x46, 0xc5, 0x95, 0x55, 0x52, 0xeb, 0x4d, 0x9a, - 0xd5, 0x3c, 0x38, 0x40, 0x20, 0x37, 0x75, 0x88, 0x73, 0x75, 0xcf, 0xe1, 0xa1, 0xcb, 0x86, 0xa2, - 0x6e, 0xdf, 0x7a, 0x6c, 0x6d, 0x22, 0xf5, 0xbf, 0x89, 0x04, 0xd9, 0x89, 0xc2, 0x56, 0x58, 0xd9, - 0xff, 0x78, 0x80, 0x4e, 0x58, 0xf5, 0xc5, 0xd5, 0x0c, 0xcc, 0x35, 0x94, 0x56, 0xe1, 0xd2, 0x40, - 0x8b, 0x66, 0xd1, 0x10, 0xed, 0x8c, 0xdb, 0xff, 0x9e, 0x01, 0x81, 0xb8, 0x14, 0x34, 0x17, 0x1d, - 0x34, 0x51, 0xd6, 0x6f, 0x1e, 0x9c, 0xa2, 0xc5, 0x2b, 0xde, 0x9c, 0x2e, 0x6b, 0x47, 0x10, 0x16, - 0xe1, 0x89, 0x7f, 0xf9, 0x4a, 0x7f, 0xc7, 0x70, 0x44, 0x43, 0xfb, 0xdf, 0xe6, 0xde, 0xe4, 0xe6, - 0xbe, 0xdf, 0xbb, 0xed, 0x79, 0x75, 0xaa, 0xe5, 0xad, 0x7e, 0xc8, 0xcc, 0x3b, 0x05, 0x9f, 0x04, - 0x42, 0xc6, 0x7c, 0xd8, 0x7c, 0x2b, 0x82, 0x59, 0xd2, 0xc8, 0x96, 0x6c, 0xcd, 0xd7, 0xdf, 0x18, - 0x22, 0x11, 0x3a, 0x6c, 0x4e, 0x31, 0x4d, 0x52, 0xc0, 0xa1, 0xed, 0x1a, 0x58, 0xe3, 0xae, 0x2f, - 0x8e, 0xbe, 0xdd, 0x92, 0xa0, 0xda, 0x5c, 0x4e, 0x04, 0x01, 0xb0, 0xa2, 0xb1, 0xbf, 0x30, 0x5d, - 0x48, 0x27, 0x24, 0x05, 0xe1, 0x13, 0x97, 0x83, 0x21, 0x75, 0x17, 0x37, 0x48, 0x9b, 0x34, 0xe0, - 0xe5, 0x46, 0xa4, 0x1a, 0x2a, 0x53, 0xfb, 0x7f, 0xc0, 0xc0, 0x37, 0xc6, 0x25, 0xe8, 0xd1, 0xbd, - 0xb6, 0x62, 0x03, 0xba, 0x3c, 0x70, 0x7a, 0xc3, 0x02, 0x28, 0x5e, 0x5e, 0x24, 0x3c, 0xb3, 0xca, - 0x88, 0x01, 0x51, 0x31, 0x61, 0x00, 0xb8, 0x0a, 0x26, 0xe2, 0xf1, 0x4e, 0xca, 0x27, 0x0c, 0x40, - 0x80, 0x4c, 0x5e, 0xb5, 0xfb, 0xa6, 0xf6, 0xfc, 0x18, 0x81, 0x80, 0x69, 0x00, 0x3f, 0x64, 0x03, - 0x48, 0xb0, 0x01, 0x99, 0x08, 0x8f, 0x67, 0x82, 0xc1, 0x50, 0x1e, 0x62, 0xd0, 0x1a, 0x81, 0x89, - 0x01, 0xe5, 0x1c, 0xca, 0x00, 0xf8, 0xc8, 0x1c, 0x02, 0xa0, 0x1d, 0x7c, 0x28, 0xa1, 0x9c, 0x24, - 0x00, 0x02, 0xea, 0xec, 0x00, 0x55, 0x47, 0x01, 0xa9, 0x9e, 0xe0, 0x90, 0x80, 0x01, 0x00, 0x08, - 0xee, 0x14, 0xea, 0x7b, 0x48, 0xdd, 0xb5, 0x77, 0x6c, 0x3b, 0x81, 0x29, 0x04, 0x93, 0x09, 0x65, - 0x5c, 0x0b, 0xb2, 0x7f, 0xaa, 0xe0, 0x01, 0x4e, 0x21, 0x95, 0xce, 0xb7, 0x7f, 0xc6, 0xf8, 0xa8, - 0x37, 0x05, 0x01, 0x53, 0x07, 0x81, 0xed, 0xe7, 0x1a, 0x1c, 0x30, 0xdb, 0x08, 0xc0, 0x90, 0x63, - 0x24, 0xe8, 0xd6, 0x73, 0x22, 0x5e, 0x7a, 0xd3, 0x3b, 0x12, 0xf8, 0x7b, 0x00, 0x86, 0x3e, 0x4c, - 0x39, 0x0d, 0x23, 0x7a, 0xfb, 0x46, 0x54, 0xfc, 0x4e, 0x79, 0x9c, 0xa7, 0xe7, 0x83, 0x41, 0xe3, - 0xf9, 0x31, 0xd1, 0xd4, 0x74, 0x4b, 0x32, 0x47, 0x11, 0xc6, 0x3b, 0x80, 0x24, 0xa0, 0x49, 0x50, - 0xc4, 0x33, 0x2f, 0x2c, 0xe1, 0x8f, 0x71, 0x79, 0x7e, 0x20, 0x22, 0x10, 0xdf, 0x4a, 0xf9, 0x7e, - 0x2b, 0xc2, 0xe4, 0x12, 0x00, 0x68, 0xf5, 0x19, 0xbf, 0x98, 0xaf, 0x72, 0xbe, 0xe3, 0x87, 0x0a, - 0xab, 0x88, 0x6e, 0x46, 0x6e, 0xaa, 0xe1, 0xfa, 0x3a, 0xc4, 0xb8, 0x71, 0x18, 0x00, 0x9f, 0x90, - 0x31, 0x17, 0x73, 0x0b, 0x51, 0xd3, 0xc7, 0xe6, 0x6f, 0xdc, 0x86, 0xf2, 0xd4, 0x5f, 0x0c, 0x5b, - 0x8d, 0x61, 0x87, 0xf1, 0x1f, 0xe9, 0x8a, 0x30, 0x09, 0x18, 0x38, 0x30, 0x6e, 0xff, 0x81, 0x00, - 0x10, 0x07, 0x61, 0xc0, 0xc4, 0x52, 0x4e, 0xdf, 0x00, 0x1e, 0x51, 0x79, 0xb6, 0x8b, 0xb0, 0x3b, - 0x42, 0xc1, 0xc4, 0xf4, 0xf0, 0xc0, 0xf0, 0x0c, 0x14, 0x2f, 0xc9, 0x3b, 0xff, 0xfe, 0x20, 0x40, - 0xf2, 0xe7, 0xc2, 0x90, 0x7b, 0xd6, 0x0d, 0xde, 0xa7, 0x41, 0xa0, 0xf1, 0x11, 0x44, 0x3e, 0x54, - 0x2e, 0x2e, 0x2e, 0xa6, 0xe5, 0xfe, 0x3e, 0x38, 0xac, 0x3f, 0x01, 0xeb, 0x14, 0x33, 0x21, 0xb6, - 0xbd, 0x47, 0x5f, 0x09, 0x93, 0x87, 0x6b, 0x85, 0xe9, 0x5e, 0xc2, 0x30, 0xa6, 0x35, 0x4a, 0x2e, - 0xab, 0x25, 0x7d, 0x7b, 0x6c, 0x48, 0xd8, 0x86, 0x34, 0x9c, 0xb8, 0x40, 0x48, 0x2c, 0x8e, 0x54, - 0x74, 0x30, 0x17, 0xfc, 0x2a, 0xa6, 0x0a, 0x0c, 0xb0, 0x9e, 0x90, 0x92, 0xaf, 0xee, 0xc2, 0xde, - 0x1f, 0x0f, 0x1c, 0x0b, 0x68, 0x98, 0x7b, 0x3e, 0x0b, 0x7f, 0x4b, 0x3b, 0x1d, 0xde, 0x1b, 0xf4, - 0x1d, 0xfd, 0x5f, 0xf8, 0x27, 0xea, 0x5e, 0x87, 0x0a, 0xdc, 0x11, 0xfc, 0x82, 0xaf, 0x7f, 0x29, - 0xcf, 0xef, 0x11, 0xc4, 0x11, 0xa1, 0xdc, 0xd7, 0x29, 0x8c, 0x6c, 0xc9, 0x78, 0x4c, 0x6b, 0x4f, - 0xb5, 0xab, 0xe4, 0x15, 0x37, 0x9b, 0xf8, 0x42, 0xb9, 0x17, 0x55, 0xd5, 0x55, 0x7c, 0xa4, 0xad, - 0x7d, 0x9f, 0x27, 0xb8, 0x60, 0x18, 0x8d, 0x30, 0xf5, 0x28, 0x29, 0x06, 0xfa, 0x1d, 0xfc, 0x8b, - 0x91, 0x98, 0xf4, 0x20, 0x74, 0xba, 0x43, 0xa5, 0xf4, 0x7f, 0xf1, 0x5a, 0xe0, 0xe0, 0x10, 0x07, - 0x8a, 0x17, 0x15, 0x57, 0x4a, 0xf1, 0x89, 0x11, 0xb0, 0xb6, 0xe4, 0xc6, 0x84, 0xe1, 0xc8, 0xf2, - 0xa0, 0xac, 0x0a, 0x84, 0xe6, 0x88, 0x92, 0x01, 0x16, 0x4f, 0x5e, 0x2f, 0x0b, 0xe0, 0x20, 0x2d, - 0x2c, 0x1b, 0x46, 0xec, 0x3a, 0xc2, 0xa1, 0xac, 0x77, 0x4d, 0x5b, 0x03, 0xfd, 0xeb, 0x1b, 0x83, - 0x47, 0xc0, 0xb0, 0x2f, 0xb6, 0xca, 0x86, 0xbc, 0x18, 0x01, 0x87, 0xe1, 0x5c, 0xbd, 0x70, 0xab, - 0x9a, 0x50, 0xba, 0x8a, 0xff, 0xf8, 0x25, 0xe3, 0xab, 0xca, 0x20, 0x75, 0x3e, 0x3d, 0x8f, 0x92, - 0xe3, 0xeb, 0xf1, 0x31, 0xa4, 0x3c, 0x60, 0x58, 0x35, 0x68, 0xa4, 0x07, 0xc4, 0x70, 0x00, 0x7e, - 0x2b, 0xf8, 0x95, 0xd0, 0xcc, 0xb7, 0x0b, 0x0b, 0x2d, 0x8d, 0xa1, 0xf0, 0xf5, 0xdb, 0x00, 0x00, - 0x65, 0x43, 0x46, 0x31, 0xc5, 0x53, 0xca, 0xcc, 0x7f, 0x0b, 0xce, 0x01, 0xfa, 0x44, 0xd0, 0x07, - 0xd1, 0x5d, 0x0f, 0xd4, 0xed, 0x59, 0xee, 0xd4, 0x56, 0x29, 0xe2, 0xbc, 0x56, 0xe1, 0x43, 0xd2, - 0xf9, 0x3f, 0x88, 0x18, 0x4b, 0x95, 0x55, 0x55, 0xc8, 0xba, 0x86, 0xca, 0x06, 0xe1, 0x5a, 0x10, - 0x5f, 0x7d, 0x1b, 0x3d, 0x4b, 0xfb, 0x84, 0x06, 0x77, 0x71, 0xd5, 0x3d, 0x81, 0xcf, 0xb7, 0x63, - 0xf0, 0x8d, 0xfa, 0x22, 0xc6, 0x25, 0xc6, 0xfc, 0x48, 0x81, 0x91, 0x5d, 0xed, 0xad, 0x6d, 0xfd, - 0x59, 0x62, 0x44, 0x04, 0x7b, 0x47, 0x69, 0x90, 0x03, 0xbd, 0x7e, 0x5f, 0x9e, 0x3a, 0x93, 0xdf, - 0xf8, 0x97, 0xa9, 0x2c, 0x22, 0x08, 0x46, 0xdc, 0xc2, 0xfc, 0x3d, 0x97, 0xf7, 0x37, 0x06, 0xd2, - 0xd6, 0xba, 0x94, 0x9d, 0x45, 0x5d, 0x7f, 0xc1, 0x71, 0xd2, 0x51, 0x57, 0xa0, 0xe3, 0x38, 0xd7, - 0x88, 0x8e, 0xee, 0xb5, 0x97, 0x98, 0x8b, 0xa8, 0x43, 0x92, 0xa2, 0xeb, 0xf7, 0xaa, 0xfc, 0xc4, - 0x7b, 0xd4, 0x32, 0x11, 0x21, 0x5c, 0xd8, 0x51, 0xaf, 0x81, 0x20, 0x14, 0x0f, 0xc3, 0x74, 0xfa, - 0x95, 0x37, 0x27, 0xd6, 0xed, 0xc7, 0x2d, 0xc3, 0xac, 0xa0, 0x1b, 0x61, 0xad, 0xc3, 0xf9, 0xe9, - 0x66, 0xa7, 0x0f, 0x7a, 0x8a, 0x76, 0x7e, 0xf6, 0x82, 0x94, 0xdb, 0xd3, 0x4d, 0x94, 0x73, 0x00, - 0x74, 0x84, 0x73, 0x83, 0xb7, 0x37, 0xcd, 0xfe, 0x5e, 0xb0, 0xe6, 0xdf, 0x09, 0x88, 0x47, 0x76, - 0xef, 0x47, 0x0f, 0x31, 0x60, 0x03, 0xe9, 0xd8, 0x96, 0xd4, 0xee, 0xff, 0xb7, 0x2f, 0x6d, 0x20, - 0x3b, 0xff, 0xd1, 0xf0, 0xfd, 0x34, 0xc7, 0x55, 0x9c, 0xe5, 0x42, 0xc5, 0x1f, 0x2f, 0xf5, 0xae, - 0x08, 0x21, 0x41, 0x81, 0x50, 0x01, 0x57, 0xf2, 0xc0, 0x00, 0x9c, 0xa0, 0xb5, 0x06, 0x2f, 0x21, - 0x72, 0x01, 0xe4, 0x2c, 0x30, 0x66, 0x68, 0x60, 0x9e, 0x00, 0x04, 0x78, 0xe9, 0xf2, 0x70, 0x00, - 0x54, 0x77, 0xf8, 0xc5, 0x89, 0x40, 0x75, 0x60, 0x95, 0xa2, 0xb7, 0x0f, 0x8e, 0xf1, 0x30, 0xa1, - 0x4f, 0x3c, 0x5a, 0x93, 0xdb, 0x61, 0x4f, 0x36, 0x66, 0x6f, 0x77, 0xf5, 0xb4, 0x56, 0xad, 0x18, - 0x96, 0x99, 0xc0, 0x4e, 0xfc, 0x7b, 0x98, 0xa9, 0xc5, 0xae, 0xe2, 0x44, 0x85, 0x2f, 0x34, 0x16, - 0x73, 0x6d, 0xc6, 0x2c, 0xc2, 0x72, 0xe0, 0x2f, 0x27, 0x0d, 0x82, 0x73, 0xc9, 0xc8, 0xc3, 0xb5, - 0xd6, 0x73, 0xd4, 0x2c, 0x9c, 0xe6, 0xce, 0x24, 0x48, 0xf3, 0x9b, 0x0e, 0x44, 0xf3, 0x46, 0x78, - 0x93, 0xcd, 0x04, 0xf5, 0x5c, 0x40, 0x80, 0x54, 0x4d, 0xe5, 0x58, 0x78, 0x1e, 0xcf, 0x93, 0x5a, - 0x5d, 0x54, 0xbd, 0xcb, 0xac, 0x71, 0x01, 0x81, 0x98, 0xb5, 0x61, 0x5a, 0xb7, 0x2d, 0x3c, 0x4b, - 0x6d, 0x18, 0xea, 0xf8, 0x2b, 0xe9, 0xa6, 0xe2, 0x4d, 0x3c, 0x8c, 0x35, 0xda, 0xef, 0x13, 0x08, - 0xe2, 0x1d, 0x15, 0x55, 0xf2, 0x9e, 0xb5, 0x5c, 0xc4, 0x55, 0xfc, 0xc5, 0x7d, 0xfc, 0x11, 0x5e, - 0xee, 0xcf, 0x94, 0x41, 0xfa, 0x89, 0x7c, 0x84, 0x39, 0x0e, 0xed, 0x87, 0xe1, 0x02, 0x43, 0xbb, - 0x9f, 0x0f, 0x72, 0xe2, 0xbe, 0xb9, 0x89, 0x58, 0xbf, 0x8c, 0x3c, 0xcc, 0x19, 0x24, 0xe4, 0xea, - 0x5e, 0x2e, 0x23, 0xe4, 0xb3, 0x93, 0xf1, 0x20, 0x80, 0x28, 0x58, 0xac, 0x2a, 0x46, 0x17, 0x98, - 0x84, 0x66, 0x85, 0x75, 0x94, 0xc8, 0x64, 0x8a, 0xc0, 0x9b, 0xcf, 0x1c, 0x7f, 0x7b, 0x3b, 0xfc, - 0x20, 0x42, 0xc4, 0x00, 0xf1, 0x38, 0xf1, 0xee, 0x75, 0xac, 0x84, 0x15, 0x5d, 0xfc, 0x66, 0x66, - 0x5a, 0xd7, 0xb2, 0x3d, 0xcd, 0xa5, 0x55, 0x55, 0xa2, 0xe2, 0x04, 0x0c, 0xe5, 0x20, 0xdc, 0xb1, - 0x8a, 0xda, 0x15, 0xcd, 0xe7, 0xd6, 0x73, 0x95, 0x13, 0x7e, 0x0b, 0x2c, 0x1b, 0x75, 0x77, 0x6e, - 0x5d, 0x83, 0x31, 0x96, 0xe9, 0x3f, 0x13, 0x19, 0xba, 0x6f, 0xbb, 0xa8, 0x3a, 0xb1, 0xb0, 0x56, - 0xc8, 0xdf, 0x26, 0x8b, 0xb6, 0x5c, 0x40, 0xcb, 0x9b, 0x9f, 0x27, 0x3b, 0x8a, 0x7f, 0x22, 0x4b, - 0x59, 0x52, 0x67, 0x12, 0x26, 0x56, 0xd4, 0xb3, 0xab, 0x6a, 0x8d, 0xcc, 0x98, 0xe0, 0x4f, 0x9a, - 0xba, 0x6b, 0x98, 0x8f, 0x77, 0x7c, 0x82, 0xe2, 0xbb, 0xf9, 0x85, 0x3d, 0xeb, 0x10, 0xe7, 0xf6, - 0xa2, 0xf9, 0x66, 0xeb, 0x53, 0xf1, 0x55, 0x14, 0x31, 0x71, 0x4c, 0x5c, 0x5e, 0x2f, 0xe3, 0x8b, - 0xcb, 0x8e, 0xee, 0xc7, 0xde, 0xfc, 0x22, 0x38, 0xb2, 0xf2, 0xb1, 0x77, 0x2e, 0x33, 0x1f, 0x41, - 0xdb, 0xf1, 0x23, 0x0d, 0x4d, 0xa5, 0x9e, 0x1e, 0x7c, 0xbe, 0x6c, 0xf1, 0x85, 0xcf, 0x46, 0x03, - 0xa1, 0x56, 0x6c, 0xb9, 0xbc, 0xac, 0xc1, 0xdc, 0x36, 0x49, 0x2d, 0x67, 0x13, 0x0a, 0x13, 0x93, - 0x4b, 0xfa, 0xe2, 0xf5, 0x2a, 0xaa, 0x8f, 0x31, 0x25, 0xf3, 0xbe, 0x30, 0xcd, 0x88, 0xe0, 0xf4, - 0xa8, 0x71, 0x45, 0xba, 0x19, 0x61, 0x87, 0x88, 0xc9, 0x8b, 0x24, 0xcc, 0x4c, 0x28, 0x2c, 0x92, - 0x20, 0x2e, 0xf0, 0x15, 0x7c, 0x5e, 0x32, 0x9a, 0xec, 0xa2, 0x2f, 0x95, 0x37, 0x3b, 0xeb, 0xe3, - 0x2d, 0xd6, 0xb3, 0xab, 0x2a, 0x95, 0x71, 0x0e, 0x71, 0x03, 0x09, 0x1c, 0xbf, 0x37, 0x5a, 0xca, - 0xc4, 0xe6, 0x13, 0xe6, 0xd6, 0xbe, 0x08, 0xce, 0xb5, 0xbc, 0xdc, 0xa6, 0x73, 0xf7, 0xc2, 0xb8, - 0x91, 0x65, 0xad, 0x6b, 0x17, 0xf0, 0x89, 0x96, 0xb5, 0x57, 0xbb, 0x62, 0x7c, 0xb3, 0x2f, 0x14, - 0x3c, 0x48, 0x90, 0xa7, 0x36, 0x54, 0xbc, 0x5c, 0x5c, 0x5c, 0x4f, 0x24, 0xb0, 0x31, 0x20, 0x68, - 0x17, 0x2a, 0x4c, 0x65, 0x8f, 0x50, 0x15, 0x54, 0x50, 0xa8, 0xcb, 0x82, 0x10, 0xa4, 0x5c, 0x98, - 0x24, 0xe1, 0xe7, 0x19, 0x41, 0xd5, 0xd3, 0x05, 0x71, 0xdc, 0xe0, 0xe1, 0x30, 0x7d, 0xc9, 0xe1, - 0xc8, 0x2c, 0x96, 0x0c, 0xe5, 0x0b, 0xc2, 0x21, 0x48, 0x7e, 0x09, 0x54, 0x30, 0x43, 0x48, 0x1e, - 0xd5, 0x43, 0x30, 0xbf, 0x26, 0x24, 0xbc, 0x33, 0x8b, 0x8b, 0xbb, 0x04, 0x69, 0x01, 0xeb, 0x89, - 0x0c, 0x85, 0x0a, 0x26, 0xa0, 0xfe, 0x37, 0x4b, 0xcb, 0xcf, 0x34, 0x14, 0xcf, 0x03, 0x95, 0x8b, - 0x88, 0x98, 0x92, 0x4c, 0x29, 0x38, 0x1e, 0x48, 0x08, 0xd4, 0xe7, 0x22, 0x70, 0xe2, 0x02, 0x04, - 0x95, 0x3b, 0x92, 0x60, 0x73, 0x06, 0x5f, 0xdd, 0xbc, 0x60, 0xea, 0x46, 0x7f, 0x1f, 0x5a, 0xd6, - 0xb4, 0xdb, 0x44, 0xb8, 0x53, 0x82, 0x21, 0x2b, 0x5e, 0x57, 0xc1, 0x11, 0x35, 0x59, 0x71, 0x3e, - 0x26, 0x5e, 0xab, 0xec, 0x85, 0xee, 0x9b, 0x64, 0xe5, 0x3e, 0xaa, 0x12, 0xc2, 0x23, 0x08, 0x6f, - 0x12, 0x49, 0x49, 0x8b, 0x25, 0x31, 0xee, 0xc9, 0x53, 0xf8, 0x53, 0x13, 0x35, 0x54, 0x6d, 0x64, - 0xad, 0x03, 0x07, 0x60, 0xf9, 0x70, 0x6e, 0x19, 0xc6, 0xfd, 0xc4, 0xc7, 0xc8, 0x4c, 0x3b, 0x59, - 0xa2, 0xf1, 0x82, 0x57, 0x21, 0x6c, 0xc1, 0x3a, 0x0c, 0x65, 0x4a, 0x90, 0x20, 0xc6, 0x18, 0xef, - 0xc6, 0x69, 0x65, 0x83, 0xcf, 0xb6, 0xfe, 0x24, 0x2c, 0x22, 0x0d, 0x92, 0xc2, 0xbb, 0xc4, 0x07, - 0x77, 0x3f, 0x4d, 0xda, 0x5c, 0x20, 0x55, 0x69, 0xaa, 0xb5, 0xb6, 0xed, 0xc2, 0x5c, 0xa5, 0x5a, - 0xcd, 0x11, 0x21, 0x1e, 0xee, 0x6e, 0x10, 0x9b, 0x97, 0xb7, 0x37, 0x4e, 0xfb, 0xb8, 0xee, 0x6d, - 0x6a, 0x5e, 0x4c, 0xf9, 0xac, 0x40, 0x2e, 0x3b, 0xb5, 0xe9, 0x12, 0x81, 0xbd, 0xd2, 0x20, 0xbe, - 0x10, 0x23, 0x8f, 0xb8, 0x6c, 0x66, 0x2b, 0xb9, 0x78, 0xaf, 0x3e, 0xf8, 0x29, 0xb9, 0x51, 0x0c, - 0x9e, 0x5b, 0x03, 0x40, 0x1f, 0x6c, 0x4d, 0x8d, 0x54, 0xa6, 0x9c, 0xf8, 0x8b, 0x91, 0xf9, 0x06, - 0x1c, 0x66, 0x9c, 0x25, 0xc9, 0x5a, 0xcf, 0xc1, 0x71, 0x26, 0xf9, 0xba, 0xfd, 0x2e, 0x22, 0x3f, - 0x8a, 0xdd, 0xde, 0xef, 0xf3, 0x15, 0xdf, 0x2f, 0x21, 0x5a, 0x7f, 0xc9, 0x5d, 0xdf, 0xd8, 0x8b, - 0x6d, 0xfd, 0x95, 0x57, 0x0a, 0x72, 0x5e, 0xf0, 0x08, 0x3c, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, - 0x4a, 0x25, 0x32, 0x8b, 0xc4, 0x1a, 0x2f, 0xad, 0x60, 0xf6, 0x26, 0xee, 0xbe, 0x26, 0x09, 0xe6, - 0xe9, 0xef, 0x7b, 0xfc, 0x12, 0x46, 0x57, 0x6f, 0xbc, 0x18, 0x71, 0x1a, 0xd7, 0x55, 0xf1, 0x7d, - 0x54, 0x5d, 0x56, 0xa2, 0x62, 0x2f, 0x73, 0xf6, 0xf1, 0x27, 0xe2, 0x2b, 0x5d, 0xed, 0x78, 0x8b, - 0x88, 0x7d, 0xdb, 0xdf, 0x7c, 0x4c, 0x23, 0x88, 0x7d, 0xdf, 0x7b, 0xd3, 0x51, 0x3a, 0xe0, 0xae, - 0xdd, 0xbc, 0xa4, 0x17, 0xb1, 0x9a, 0xbb, 0x66, 0xd0, 0x4b, 0xca, 0x4b, 0xa6, 0xe2, 0xb8, 0xa2, - 0xd3, 0xab, 0x2a, 0xfd, 0x95, 0x74, 0xd7, 0x15, 0x9e, 0x08, 0xb9, 0x3d, 0x2c, 0x44, 0xb7, 0xd1, - 0xae, 0x61, 0x7a, 0xa5, 0xe4, 0x1c, 0xef, 0x3e, 0x79, 0x88, 0xe7, 0xa7, 0x89, 0xf8, 0x45, 0x04, - 0xdb, 0xc2, 0x25, 0x36, 0x99, 0x70, 0x10, 0xf6, 0x21, 0xc5, 0x7a, 0xe2, 0x7a, 0x4a, 0xf7, 0x77, - 0xd1, 0xe2, 0x97, 0x82, 0x32, 0x2a, 0x62, 0x4e, 0x49, 0x56, 0x09, 0xc1, 0x15, 0x6a, 0xaf, 0xf1, - 0x76, 0xa9, 0x6a, 0x97, 0x13, 0x04, 0x27, 0xbb, 0xfa, 0xf9, 0x86, 0x28, 0xa7, 0xe2, 0x44, 0x16, - 0xe7, 0x63, 0xc4, 0xe2, 0x79, 0x8a, 0xf5, 0x15, 0x86, 0xfb, 0x2a, 0x75, 0xae, 0x4a, 0x9b, 0x72, - 0xc4, 0x08, 0x05, 0x64, 0x88, 0x90, 0x5a, 0x99, 0x20, 0xa5, 0xeb, 0x5f, 0x57, 0x16, 0x54, 0x3b, - 0xa2, 0x19, 0x41, 0x47, 0x1f, 0xdd, 0xed, 0xf8, 0x91, 0x44, 0xad, 0x29, 0xf6, 0xbe, 0x3a, 0xed, - 0x9e, 0x52, 0xaa, 0xab, 0x2b, 0x4f, 0xc6, 0x66, 0xcd, 0x54, 0xcc, 0x62, 0xad, 0x3e, 0x96, 0xaf, - 0x82, 0x81, 0x3b, 0x8c, 0x88, 0x16, 0xdc, 0x06, 0xde, 0x4f, 0xe2, 0x02, 0x23, 0x38, 0x6d, 0xfb, - 0x6e, 0x17, 0x1e, 0xda, 0x41, 0xf8, 0x99, 0x83, 0x04, 0x09, 0x81, 0xf3, 0x5f, 0xff, 0xd3, 0x4f, - 0xb3, 0xca, 0x08, 0x0e, 0x39, 0x94, 0x5a, 0x09, 0xc4, 0xa4, 0x38, 0xe1, 0xc4, 0x08, 0x00, 0x01, - 0xe6, 0x89, 0x91, 0xa6, 0x8c, 0x5c, 0xb3, 0xff, 0xff, 0x92, 0x82, 0xa9, 0x7a, 0x51, 0xbb, 0xfe, - 0x5c, 0x26, 0xfd, 0x78, 0x75, 0xc0, 0x09, 0x86, 0x47, 0x3f, 0x2b, 0x0b, 0x5b, 0x1e, 0xe3, 0x7f, - 0xf6, 0x0e, 0x9f, 0x46, 0x1f, 0x1e, 0x62, 0x0b, 0xc4, 0x90, 0x28, 0xc8, 0x1d, 0xa1, 0xaa, 0x6a, - 0x78, 0x1f, 0x83, 0x15, 0xc3, 0x83, 0xb9, 0xbb, 0x31, 0xf6, 0xfe, 0x13, 0x05, 0x81, 0xf0, 0x3f, - 0xe8, 0x63, 0xb7, 0x5b, 0xcc, 0xc9, 0x33, 0x7a, 0x7e, 0x18, 0xe2, 0x78, 0x16, 0x72, 0x28, 0xa5, - 0x65, 0x44, 0x01, 0xef, 0x00, 0xe9, 0x2f, 0xe0, 0x7b, 0xf9, 0x77, 0x05, 0x3a, 0x0b, 0xf4, 0xbc, - 0xc1, 0xab, 0xdf, 0xc4, 0xf7, 0x77, 0x77, 0xbe, 0x5d, 0x6b, 0xe1, 0x1e, 0xef, 0x55, 0xde, 0xfe, - 0x12, 0xc5, 0xf7, 0xbf, 0x88, 0x0a, 0x14, 0x98, 0x77, 0x0f, 0x4a, 0x32, 0x5c, 0x44, 0xc0, 0x3b, - 0x52, 0x62, 0x4b, 0x90, 0xdf, 0x71, 0x10, 0x53, 0xd4, 0x5e, 0xeb, 0x5b, 0x0c, 0x7a, 0xe2, 0x23, - 0xb7, 0x43, 0x2b, 0x0f, 0xbd, 0x19, 0x3f, 0xe2, 0x34, 0xd9, 0x3b, 0x55, 0xe2, 0x61, 0x23, 0x23, - 0xad, 0x12, 0xab, 0x02, 0xf1, 0x3c, 0x90, 0x5b, 0x4d, 0x2f, 0x90, 0xaa, 0xbf, 0x84, 0x49, 0x26, - 0x2f, 0x5a, 0xad, 0x7e, 0x42, 0xb9, 0x23, 0xc3, 0x0a, 0x85, 0x96, 0x50, 0x66, 0xba, 0x03, 0xd6, - 0xf3, 0x2b, 0xe2, 0x7f, 0xff, 0xbe, 0xef, 0xca, 0xbc, 0x21, 0x90, 0x28, 0x48, 0x00, 0x23, 0x44, - 0x3e, 0x71, 0x15, 0xdd, 0xef, 0x6b, 0x9c, 0xff, 0xff, 0x82, 0xe5, 0x0c, 0x1c, 0x97, 0x28, 0x42, - 0x58, 0x69, 0x18, 0x00, 0x2e, 0x0e, 0x7e, 0x0b, 0xbd, 0x4a, 0x51, 0x8e, 0x4b, 0xe6, 0xdb, 0x6c, - 0x07, 0x72, 0x43, 0x6d, 0xa1, 0x60, 0x0e, 0xc0, 0x29, 0x2b, 0x01, 0x70, 0x2d, 0xb1, 0xa5, 0x3a, - 0xeb, 0xac, 0xb5, 0x8a, 0xb1, 0x57, 0xdc, 0x1c, 0x00, 0x48, 0x06, 0xc1, 0xcd, 0x82, 0x94, 0xc4, - 0x00, 0x3f, 0x07, 0xe0, 0x35, 0x48, 0x98, 0x70, 0x39, 0x61, 0xc7, 0x00, 0x0d, 0x47, 0x40, 0x78, - 0x78, 0xd1, 0xf4, 0x2c, 0x06, 0x24, 0x73, 0x2e, 0x03, 0x8a, 0x00, 0xd2, 0x00, 0x62, 0xb8, 0xff, - 0x62, 0x9c, 0x63, 0xbc, 0x04, 0x08, 0x08, 0x11, 0xa7, 0x3f, 0x9e, 0x3f, 0x51, 0x70, 0xb8, 0x15, - 0x3c, 0x78, 0x2f, 0x7f, 0x1c, 0x00, 0x04, 0x68, 0x14, 0x70, 0x35, 0x15, 0x0f, 0x5a, 0x60, 0x0f, - 0xf1, 0x03, 0xb5, 0x2a, 0x37, 0x80, 0x90, 0x04, 0xa2, 0x41, 0x34, 0xc5, 0x60, 0xc5, 0xf5, 0x6d, - 0x93, 0x83, 0xcb, 0x97, 0x78, 0x08, 0x10, 0x08, 0x08, 0x50, 0xce, 0xe5, 0x44, 0x59, 0x0e, 0x96, - 0x6a, 0x6c, 0x14, 0x20, 0x99, 0x47, 0x1c, 0xdd, 0x48, 0x51, 0xc5, 0xd4, 0x59, 0x6a, 0x74, 0xea, - 0x1c, 0x50, 0x01, 0x94, 0x52, 0xfa, 0xdc, 0xcf, 0xfb, 0xfd, 0x22, 0x6e, 0x2d, 0x83, 0x4e, 0xbe, - 0xfe, 0xdf, 0x4f, 0x01, 0xc2, 0x05, 0x11, 0xbc, 0x28, 0x2a, 0xa5, 0x49, 0xa9, 0x60, 0x0c, 0x9c, - 0x1d, 0x0e, 0x00, 0x02, 0x38, 0x70, 0x00, 0x13, 0xc2, 0x50, 0xb4, 0x07, 0x69, 0x6c, 0x9b, 0x68, - 0x70, 0x71, 0x55, 0x10, 0x00, 0x1b, 0xaa, 0x44, 0x15, 0x63, 0x50, 0xd8, 0x70, 0xd9, 0xd6, 0xdb, - 0xfe, 0x04, 0x98, 0xd8, 0xe1, 0x04, 0xe7, 0x07, 0x07, 0x20, 0x0b, 0xc6, 0x70, 0x70, 0x48, 0x69, - 0x66, 0x91, 0xa9, 0xc0, 0x07, 0xb1, 0x97, 0x40, 0x1a, 0x85, 0x7a, 0xc2, 0xc1, 0x9c, 0x00, 0xf2, - 0xc0, 0x67, 0x00, 0x0f, 0x07, 0x17, 0x10, 0x8d, 0x3c, 0xfd, 0xef, 0x2f, 0x4e, 0x1e, 0xc0, 0x05, - 0xa1, 0x3a, 0x99, 0xde, 0x86, 0x5d, 0xed, 0xff, 0x08, 0x07, 0x43, 0xff, 0x2d, 0x02, 0xb8, 0x99, - 0x2f, 0x6c, 0xa0, 0x96, 0x83, 0x80, 0xee, 0x5a, 0xeb, 0x07, 0x6b, 0x1d, 0x75, 0x99, 0x00, 0x7f, - 0xd2, 0xbf, 0xd6, 0x2d, 0x63, 0x40, 0x37, 0x83, 0xb7, 0x12, 0xa5, 0xe3, 0x7f, 0xf0, 0xd9, 0x78, - 0x3f, 0xd7, 0x9d, 0x04, 0x58, 0x7e, 0xbb, 0xb0, 0xc7, 0x17, 0xad, 0x55, 0x57, 0xe5, 0xbe, 0xfe, - 0x2b, 0x7b, 0xbc, 0x56, 0xef, 0x93, 0x55, 0xf8, 0xce, 0x4c, 0xc0, 0x7f, 0x2f, 0x34, 0xe5, 0x6a, - 0x23, 0x25, 0xcb, 0xd3, 0xdf, 0x89, 0x82, 0xdb, 0xef, 0x75, 0x60, 0xcf, 0x7c, 0x5d, 0x74, 0xb3, - 0x6f, 0xcb, 0x93, 0x17, 0x5d, 0xc9, 0xfd, 0x73, 0x55, 0x55, 0x5f, 0x2f, 0x3b, 0x2e, 0x50, 0xf6, - 0x00, 0x18, 0x83, 0xc8, 0xde, 0x2d, 0x54, 0x13, 0xf3, 0xa6, 0x9a, 0x79, 0x66, 0x98, 0xdf, 0x6f, - 0x6e, 0xd3, 0x71, 0x03, 0xd0, 0xb6, 0x2a, 0xe4, 0xf4, 0xd3, 0xe1, 0xa2, 0x1c, 0x00, 0x33, 0x8e, - 0xd1, 0xb4, 0x61, 0x8d, 0xd5, 0xff, 0x9b, 0x07, 0x7f, 0x5b, 0x3f, 0xa6, 0x4e, 0xce, 0xcf, 0x1a, - 0x69, 0xa6, 0x9e, 0x47, 0x07, 0xc0, 0xe0, 0x36, 0x05, 0xd6, 0x0d, 0x72, 0xe6, 0x4e, 0x21, 0x01, - 0x1e, 0xe0, 0xa6, 0x96, 0x14, 0x37, 0xda, 0xe5, 0x2c, 0x76, 0x2a, 0x95, 0xb3, 0xc3, 0x82, 0xe7, - 0x1c, 0x1f, 0x1a, 0x00, 0x02, 0x01, 0x2b, 0xec, 0xdb, 0x7c, 0x1c, 0x01, 0x00, 0x28, 0x6f, 0x88, - 0x43, 0x9d, 0x49, 0x0b, 0x96, 0x32, 0xdd, 0xdb, 0x12, 0x7a, 0x9e, 0x1e, 0x38, 0x18, 0xc0, 0x00, - 0x3e, 0xb0, 0x14, 0x20, 0xa4, 0x6c, 0xb7, 0x62, 0x80, 0xc4, 0x0e, 0x04, 0x7e, 0xe0, 0xb7, 0xae, - 0x41, 0x16, 0x00, 0x0c, 0xb0, 0x06, 0x58, 0x00, 0x11, 0x8a, 0x00, 0x32, 0xc1, 0xb6, 0x17, 0x15, - 0x3f, 0xc2, 0xe3, 0xc0, 0x79, 0x0f, 0x2c, 0x1e, 0x4e, 0x27, 0xfc, 0x14, 0x83, 0x11, 0xb1, 0x58, - 0xad, 0x37, 0x15, 0x8a, 0xdc, 0x56, 0x05, 0x7d, 0xa8, 0x2d, 0x4f, 0x0e, 0x16, 0x51, 0xb3, 0x1e, - 0xf0, 0x40, 0xe2, 0xe0, 0xcd, 0xd5, 0xe0, 0xd7, 0xe8, 0xf0, 0xc8, 0x90, 0xa4, 0x51, 0x9c, 0xe1, - 0xf0, 0xe7, 0x9c, 0x38, 0xcc, 0xd0, 0x8f, 0x01, 0x20, 0x96, 0x03, 0x0e, 0x34, 0x1c, 0x03, 0x43, - 0x80, 0x1c, 0x2c, 0x06, 0x70, 0x00, 0xb0, 0x78, 0x03, 0xcb, 0x06, 0x78, 0xe0, 0xf8, 0xc1, 0xe0, - 0x22, 0x40, 0xc2, 0x14, 0x99, 0x08, 0x0f, 0x59, 0x74, 0xad, 0x93, 0xbe, 0xe8, 0x47, 0x8f, 0xb3, - 0xc0, 0x60, 0x4e, 0xa0, 0x3d, 0xf9, 0x63, 0x70, 0x7b, 0xe9, 0x40, 0x1f, 0x6a, 0x70, 0xfc, 0x07, - 0x08, 0x1c, 0x42, 0x9f, 0x2e, 0x39, 0x6c, 0xb1, 0x88, 0x07, 0x0b, 0xd6, 0xe0, 0xf6, 0x01, 0xbe, - 0xa5, 0xc4, 0xc0, 0x0d, 0x0e, 0x00, 0x1c, 0x50, 0x66, 0x31, 0xd0, 0x78, 0x68, 0x21, 0xc3, 0xd8, - 0x01, 0x2f, 0xc9, 0x22, 0x1d, 0x2a, 0x38, 0x31, 0x6d, 0x16, 0xd9, 0x5b, 0x39, 0xf5, 0x2d, 0x0f, - 0x34, 0x8c, 0x7f, 0xdd, 0xf1, 0xe7, 0xce, 0x3c, 0x1e, 0x7e, 0x41, 0x38, 0x18, 0xc9, 0x45, 0x5d, - 0x61, 0x86, 0xcf, 0x9c, 0xb0, 0xc2, 0xbc, 0xdb, 0xdf, 0xcb, 0x77, 0x7f, 0x93, 0x77, 0xf9, 0xaa, - 0xab, 0xf0, 0x9d, 0xdf, 0xbb, 0xfc, 0x24, 0x5b, 0xdd, 0xec, 0x72, 0x72, 0x92, 0xeb, 0xf1, 0x19, - 0x29, 0x93, 0x35, 0xf7, 0x57, 0xbf, 0x8b, 0x8d, 0xf3, 0x9f, 0x55, 0xe5, 0x32, 0x31, 0x8f, 0x13, - 0xdd, 0xf7, 0x67, 0x89, 0x1f, 0x89, 0xe5, 0x41, 0xdb, 0x0b, 0x65, 0xe9, 0x0e, 0x32, 0x97, 0xa8, - 0xbf, 0x96, 0x4f, 0x2c, 0x03, 0x0b, 0x57, 0xc2, 0x25, 0x27, 0x95, 0x5a, 0xb4, 0xab, 0x53, 0x67, - 0x8b, 0x22, 0xe5, 0xac, 0x7b, 0x25, 0xda, 0x78, 0xae, 0x66, 0xb6, 0x56, 0x25, 0xd8, 0xfc, 0x4d, - 0x39, 0x60, 0x9d, 0xc6, 0xcc, 0x6a, 0x26, 0x1c, 0x2e, 0xd0, 0x1c, 0x72, 0x50, 0x0e, 0x0a, 0x57, - 0x15, 0x7f, 0x81, 0xa0, 0x48, 0x2d, 0xac, 0xcc, 0x3b, 0x54, 0xc0, 0x54, 0xf3, 0x1c, 0x44, 0x10, - 0x77, 0x0a, 0x02, 0xb9, 0xb1, 0xc4, 0x3c, 0xe0, 0x00, 0x79, 0xc3, 0xce, 0x00, 0x02, 0x3c, 0x4f, - 0x8d, 0x63, 0x92, 0xbf, 0x01, 0x60, 0x03, 0x20, 0x6c, 0x16, 0x20, 0x01, 0x71, 0x4a, 0x52, 0xc2, - 0x6e, 0x70, 0xf2, 0xc1, 0x8a, 0x00, 0xcf, 0x07, 0x0f, 0x1c, 0x1c, 0x24, 0xf9, 0x50, 0x88, 0xb5, - 0x29, 0x7a, 0x8a, 0x62, 0x64, 0x18, 0xc0, 0x00, 0x20, 0x17, 0xfd, 0xb6, 0xd7, 0x0c, 0xc4, 0x80, - 0x8b, 0x3b, 0x62, 0xce, 0xae, 0xef, 0xd3, 0xa7, 0xfe, 0xf8, 0xc2, 0x40, 0x41, 0x99, 0x00, 0x18, - 0x5e, 0x76, 0x1c, 0x21, 0x00, 0x08, 0x0f, 0x9a, 0x4c, 0xc1, 0x0f, 0xfb, 0x6f, 0x7b, 0xfb, 0x62, - 0x5f, 0x12, 0x3c, 0x76, 0x37, 0xfe, 0xf0, 0xf1, 0x0c, 0x00, 0x52, 0xce, 0x07, 0x08, 0x88, 0x5f, - 0x17, 0xd9, 0x6f, 0x2c, 0xea, 0x77, 0xdf, 0xf8, 0x00, 0x00, 0x04, 0xc2, 0x5e, 0x02, 0x35, 0x61, - 0xe0, 0xc7, 0xee, 0xd7, 0x04, 0x11, 0x9b, 0x15, 0x96, 0x0c, 0x48, 0xe1, 0x63, 0x4c, 0xa6, 0x9f, - 0x79, 0xf0, 0x9f, 0xc4, 0xa3, 0xa6, 0x84, 0x30, 0x11, 0xe7, 0x02, 0xbb, 0x89, 0x98, 0x02, 0xfe, - 0xf0, 0xa1, 0x2d, 0xf7, 0x6b, 0x11, 0x58, 0xba, 0x87, 0x03, 0x4a, 0xa1, 0x82, 0x15, 0xb4, 0x10, - 0x83, 0x52, 0xe4, 0xaa, 0x81, 0xd8, 0x95, 0x32, 0x86, 0xd1, 0xc0, 0x0a, 0x9c, 0x7a, 0x60, 0x2e, - 0xe8, 0xa0, 0x87, 0xd8, 0x3b, 0xc2, 0x0e, 0xb8, 0x32, 0x67, 0xa5, 0x22, 0x7c, 0x77, 0x81, 0x44, - 0xa8, 0xf8, 0xd2, 0x17, 0xa4, 0x2e, 0x1b, 0x50, 0x70, 0x9d, 0x56, 0xda, 0x65, 0xea, 0xa5, 0x70, - 0x09, 0x00, 0x12, 0x06, 0x90, 0xa0, 0x3d, 0x6a, 0x82, 0x2a, 0x71, 0x54, 0xd4, 0x8e, 0x4b, 0x78, - 0x3c, 0x51, 0xf2, 0x53, 0x2a, 0x35, 0xca, 0xb1, 0x21, 0xc0, 0x38, 0xc4, 0xa7, 0x03, 0x85, 0x80, - 0x30, 0xb0, 0x3b, 0xd0, 0x4a, 0x00, 0xf8, 0x3f, 0xa0, 0x80, 0x51, 0x5b, 0xcb, 0xc1, 0x85, 0xf5, - 0x74, 0xf0, 0xcc, 0x6c, 0x8a, 0x00, 0x04, 0x51, 0xb0, 0x05, 0x98, 0x3c, 0x3c, 0x45, 0x84, 0x26, - 0x0f, 0xb8, 0x01, 0x7c, 0xa3, 0x80, 0x1a, 0x85, 0xad, 0x78, 0x09, 0x29, 0x87, 0x10, 0xb1, 0x98, - 0x77, 0x37, 0x1e, 0x2c, 0x1c, 0x85, 0x87, 0x38, 0x70, 0xe2, 0x34, 0xc1, 0xff, 0x67, 0xb6, 0x5a, - 0xe9, 0xa7, 0x0e, 0x28, 0x00, 0x15, 0xb1, 0xd9, 0x74, 0xf2, 0x2d, 0x76, 0xea, 0xa9, 0x93, 0xfd, - 0xb7, 0xf6, 0xeb, 0x1e, 0x44, 0x19, 0x8e, 0xf3, 0x2b, 0xdb, 0x6a, 0x1b, 0x8f, 0xc3, 0x65, 0x35, - 0xc3, 0x93, 0x01, 0xab, 0x25, 0xa1, 0x2c, 0x96, 0x1a, 0x47, 0xe5, 0x44, 0xbb, 0x0b, 0xf2, 0x11, - 0xdd, 0xfe, 0xef, 0x7b, 0xe4, 0xaa, 0xfe, 0xea, 0xba, 0xe4, 0xaa, 0x76, 0x37, 0x13, 0xfb, 0xa8, - 0xf5, 0x9f, 0xb1, 0x7b, 0x4d, 0x2e, 0x28, 0x63, 0x24, 0xdb, 0x63, 0xbd, 0xfd, 0x95, 0x7d, 0x37, - 0xb3, 0x84, 0x88, 0x2c, 0x15, 0x4d, 0x64, 0x9f, 0x58, 0xd2, 0x47, 0xc3, 0x8a, 0x01, 0xf3, 0xd5, - 0xcb, 0xff, 0xd3, 0xd3, 0x4e, 0xbe, 0xd7, 0x6e, 0x1c, 0x50, 0xb6, 0x38, 0x0b, 0xff, 0xfd, 0x3c, - 0x3c, 0xd5, 0xd3, 0x19, 0xd2, 0x1b, 0x42, 0x00, 0x0a, 0x7e, 0x9d, 0x3d, 0x11, 0x89, 0x23, 0x13, - 0xea, 0x46, 0x25, 0x45, 0x19, 0xf4, 0xd3, 0x12, 0xe5, 0x59, 0x6d, 0xbe, 0x34, 0xe1, 0xb2, 0x40, - 0x15, 0xf7, 0xe4, 0x8e, 0x18, 0xd8, 0x53, 0x3c, 0x7e, 0xe2, 0x7c, 0x56, 0x4b, 0xeb, 0xd7, 0x3a, - 0x56, 0xbf, 0x8b, 0x20, 0x90, 0x11, 0x0e, 0x60, 0xcc, 0xfe, 0x3d, 0x87, 0x11, 0x80, 0x1f, 0xf8, - 0x86, 0x9f, 0xf7, 0xf6, 0xfd, 0xb6, 0xd3, 0x10, 0xf4, 0x09, 0x6f, 0xe0, 0xc1, 0xfa, 0x1e, 0x21, - 0x80, 0x00, 0xb1, 0x46, 0x45, 0xa5, 0x05, 0xb5, 0x99, 0x75, 0x36, 0xc1, 0xd7, 0xc6, 0x7e, 0x38, - 0x3f, 0xbf, 0xe2, 0x5e, 0xfc, 0x8e, 0x32, 0xec, 0x9d, 0x32, 0xec, 0x35, 0x48, 0x28, 0x7e, 0xc3, - 0x6e, 0x3a, 0x6c, 0xa2, 0x64, 0xb2, 0xc5, 0xbe, 0xe1, 0xd6, 0x50, 0x02, 0x38, 0x66, 0x46, 0x0c, - 0x27, 0xde, 0xb3, 0x6e, 0xb8, 0xad, 0xdf, 0x8b, 0x62, 0x96, 0x5c, 0x8c, 0xb2, 0xc5, 0x2d, 0x0d, - 0x85, 0x3b, 0x0d, 0x6d, 0xd2, 0x59, 0xf1, 0x01, 0x43, 0x33, 0x22, 0xc5, 0x78, 0x55, 0xf5, 0x3e, - 0x75, 0x3b, 0xbe, 0xd2, 0x55, 0x6e, 0x19, 0x08, 0x85, 0x2a, 0x00, 0x35, 0xc6, 0xac, 0x3b, 0xf8, - 0x5b, 0xea, 0x5e, 0xc7, 0xdc, 0x68, 0xc1, 0x85, 0x36, 0xb9, 0x79, 0x3f, 0x26, 0x11, 0x66, 0x68, - 0xfc, 0x38, 0x48, 0x00, 0xdb, 0x1a, 0x46, 0x99, 0x0e, 0x2e, 0xb1, 0x8b, 0x31, 0x3f, 0x14, 0x4e, - 0x19, 0xee, 0x93, 0xbc, 0x78, 0x3a, 0x1d, 0x1d, 0x57, 0x61, 0x99, 0xb0, 0xe3, 0xd9, 0xde, 0xf1, - 0x72, 0xf1, 0x59, 0xa9, 0xa6, 0xd9, 0xfe, 0xb6, 0xf8, 0x18, 0x00, 0x48, 0x8d, 0x8e, 0xbd, 0x25, - 0x0e, 0x5c, 0x97, 0x44, 0x26, 0x5e, 0x18, 0x2c, 0xbe, 0x2e, 0xa2, 0x67, 0x38, 0x7a, 0x8c, 0x8e, - 0x1e, 0x70, 0x0e, 0x1e, 0xf2, 0xc0, 0x06, 0x70, 0x00, 0xe0, 0xd0, 0xc3, 0x07, 0x2b, 0x46, 0x17, - 0x65, 0xde, 0x0e, 0xd6, 0x50, 0x9f, 0x2f, 0x83, 0x80, 0x12, 0x23, 0x61, 0xd0, 0xd7, 0xc1, 0x70, - 0x18, 0x5c, 0x44, 0x2f, 0x5f, 0x3b, 0x07, 0xfd, 0xd0, 0x00, 0x27, 0xf1, 0xc0, 0x00, 0x4f, 0xbc, - 0xcc, 0x68, 0x28, 0x7a, 0x0f, 0xc9, 0xaa, 0xcc, 0xcd, 0x04, 0xf2, 0xd8, 0xe4, 0x15, 0xb5, 0xa5, - 0x79, 0x2e, 0x0c, 0x00, 0xa0, 0x82, 0x42, 0x83, 0x3f, 0xcc, 0x1a, 0x74, 0x0a, 0x7a, 0xb7, 0xd1, - 0xbf, 0x01, 0x32, 0x0c, 0x42, 0x97, 0x10, 0x38, 0x73, 0xcb, 0x1a, 0xb5, 0xcb, 0x06, 0x2b, 0x22, - 0xa4, 0x58, 0x78, 0x05, 0x89, 0xc0, 0xc2, 0xa1, 0x9e, 0xa5, 0x83, 0x14, 0x06, 0x58, 0x0c, 0x2c, - 0x00, 0xaa, 0x27, 0x50, 0xec, 0xa0, 0x06, 0x56, 0x94, 0x79, 0x60, 0x85, 0xc7, 0xed, 0x34, 0xf8, - 0x87, 0xa9, 0x7d, 0xbd, 0xfb, 0x8d, 0x44, 0x60, 0x43, 0x6f, 0x86, 0x1b, 0x3e, 0x2f, 0x27, 0x0e, - 0x03, 0x9c, 0x92, 0x28, 0x26, 0x6a, 0x22, 0x09, 0x25, 0x6f, 0xe9, 0x79, 0x0f, 0x7b, 0x4f, 0x98, - 0x52, 0x7b, 0xc3, 0x88, 0x48, 0x04, 0xd3, 0xc8, 0x80, 0x0e, 0xb4, 0x9a, 0x7a, 0x69, 0xfa, 0x69, - 0x8e, 0x2b, 0xb5, 0x9b, 0x18, 0xe2, 0x41, 0x00, 0xd2, 0x66, 0xdb, 0xe9, 0xc3, 0x8a, 0x00, 0x71, - 0xaa, 0x0e, 0x1c, 0x67, 0xff, 0x6f, 0x6d, 0xb3, 0xa5, 0xb1, 0x57, 0x4d, 0x34, 0xf8, 0x85, 0x01, - 0xfe, 0x2a, 0xe2, 0x18, 0x50, 0x21, 0x56, 0xd1, 0xd7, 0x1d, 0xb6, 0xed, 0xb6, 0xdf, 0xf9, 0xd3, - 0x0e, 0x28, 0x01, 0xa0, 0x32, 0xee, 0xf9, 0xfa, 0x7d, 0xb6, 0xfd, 0x24, 0xbd, 0x5b, 0x6f, 0xfc, - 0x05, 0x88, 0x12, 0x46, 0x90, 0x0e, 0xed, 0x5f, 0x69, 0x63, 0x3f, 0x43, 0xdb, 0x3c, 0x28, 0xf2, - 0xd5, 0x53, 0xe3, 0xc3, 0x8e, 0xc6, 0x0c, 0x7a, 0xa3, 0x58, 0x18, 0x1a, 0x2f, 0xb6, 0x28, 0xbf, - 0x01, 0x40, 0x04, 0x81, 0xa5, 0xce, 0x07, 0x27, 0xca, 0xee, 0x15, 0x7d, 0x7a, 0xe2, 0x38, 0x29, - 0xe4, 0x37, 0xcf, 0x06, 0xba, 0xd5, 0x5f, 0x01, 0x02, 0x0a, 0x41, 0x4c, 0x0f, 0xcd, 0x4b, 0x59, - 0x54, 0xd7, 0x46, 0x4c, 0xcb, 0x06, 0xe7, 0xcc, 0xec, 0x62, 0xbc, 0x29, 0x2f, 0x1a, 0x53, 0xfb, - 0x3b, 0x87, 0x1c, 0xb3, 0x9c, 0x77, 0xdd, 0xf8, 0xb3, 0x4a, 0xf1, 0x22, 0x02, 0x9b, 0x4b, 0x74, - 0xc9, 0x81, 0x45, 0x4f, 0x78, 0xa3, 0x77, 0x72, 0xdb, 0xfd, 0x59, 0xc3, 0x01, 0x10, 0xa1, 0x0f, - 0xc5, 0xec, 0x47, 0x23, 0x10, 0xe4, 0x64, 0x80, 0xa0, 0x3f, 0x8e, 0xd6, 0x60, 0x72, 0x9a, 0xd4, - 0x3b, 0xe0, 0x7e, 0x6b, 0x14, 0x58, 0x71, 0x40, 0x03, 0x5a, 0xd0, 0xdb, 0xe7, 0xcf, 0xbf, 0xfe, - 0xfc, 0xdc, 0x75, 0x78, 0x3b, 0x7a, 0x7a, 0x65, 0xde, 0x54, 0xd3, 0xed, 0xfc, 0x22, 0x36, 0x80, - 0x94, 0x99, 0xe6, 0x96, 0x86, 0x8c, 0xc6, 0xb2, 0xcd, 0x70, 0x25, 0x10, 0x57, 0x4f, 0x0d, 0x48, - 0x74, 0x8a, 0x1c, 0x15, 0x55, 0xde, 0x68, 0x00, 0x31, 0x36, 0xaf, 0x48, 0x60, 0x76, 0xe0, 0xe6, - 0xa7, 0x3f, 0x66, 0x6f, 0x55, 0x86, 0x70, 0x02, 0x7d, 0xc6, 0x57, 0xc1, 0xc3, 0x28, 0xbb, 0x7d, - 0xbd, 0xbd, 0x38, 0xf9, 0x27, 0xd3, 0x4e, 0x77, 0x10, 0x0e, 0x02, 0x95, 0x68, 0xff, 0x23, 0x04, - 0xa5, 0xac, 0x98, 0xa8, 0xaf, 0x54, 0xf0, 0x3d, 0x4a, 0x0e, 0x83, 0x24, 0xd4, 0x18, 0xea, 0x78, - 0x01, 0xe7, 0xbc, 0x74, 0x5c, 0x6f, 0x29, 0xa5, 0x17, 0x60, 0x1c, 0x06, 0x29, 0x16, 0x13, 0x00, - 0xc7, 0xd8, 0x20, 0x0b, 0x54, 0x37, 0x80, 0x1d, 0x9e, 0x8d, 0xb6, 0x40, 0x00, 0x8f, 0x51, 0x3f, - 0xdc, 0x4f, 0xe6, 0xf6, 0x12, 0xe4, 0x67, 0xce, 0x7e, 0x70, 0xf6, 0xfa, 0x41, 0xfe, 0x39, 0x3c, - 0x5a, 0xbb, 0xa8, 0x4a, 0xe9, 0x75, 0x8a, 0xc1, 0x18, 0xd4, 0x6c, 0xeb, 0x59, 0xa2, 0x78, 0x7f, - 0x11, 0xf3, 0x1f, 0x36, 0x29, 0xc3, 0x6c, 0x80, 0x09, 0xcb, 0x22, 0x00, 0xc6, 0x41, 0xad, 0xe6, - 0xd4, 0x0c, 0x75, 0xce, 0xca, 0xdb, 0xe2, 0xb5, 0xd1, 0x97, 0x69, 0xa6, 0x9a, 0x69, 0x8c, 0x01, - 0x8b, 0xa9, 0xa6, 0xdb, 0x7f, 0x0a, 0x28, 0x22, 0x41, 0x5a, 0xeb, 0xfd, 0x3f, 0x4f, 0x87, 0x14, - 0x14, 0x68, 0x4b, 0xff, 0x75, 0xaa, 0x75, 0xfb, 0x7c, 0x30, 0xa0, 0x91, 0xe5, 0xf2, 0x9f, 0xed, - 0xff, 0xcb, 0x80, 0xb8, 0x02, 0x47, 0x08, 0x78, 0x88, 0x2a, 0xce, 0xd4, 0xb4, 0x8f, 0xd4, 0x0f, - 0x13, 0xe3, 0x63, 0x66, 0x92, 0x08, 0x66, 0x6e, 0xc7, 0xe0, 0x26, 0x01, 0x00, 0xdb, 0x30, 0x40, - 0x70, 0x3a, 0x84, 0xb8, 0xa0, 0x62, 0x86, 0x4c, 0x91, 0xeb, 0x13, 0x76, 0x1c, 0xf3, 0x9e, 0x58, - 0xc7, 0x8f, 0x2f, 0x4a, 0x7f, 0x73, 0x78, 0x6e, 0x70, 0x03, 0x27, 0xf5, 0x6b, 0x57, 0xaf, 0x7f, - 0x16, 0xe0, 0x3f, 0xf1, 0x87, 0x6f, 0xf8, 0xff, 0xff, 0xfd, 0x3e, 0x11, 0x84, 0x48, 0xa9, 0xad, - 0x55, 0x45, 0xd5, 0x44, 0x9c, 0x3b, 0xf0, 0xc8, 0x81, 0xa2, 0x1d, 0xa5, 0x8e, 0xd1, 0xc0, 0xd0, - 0xa9, 0x1e, 0x47, 0xb0, 0x1c, 0x21, 0xf9, 0x39, 0xe5, 0x8c, 0x2f, 0xa1, 0x4e, 0x80, 0xa0, 0x40, - 0x75, 0x25, 0xa6, 0x4a, 0x01, 0x00, 0xea, 0xef, 0xc7, 0xff, 0xf0, 0x08, 0x08, 0x64, 0x29, 0x18, - 0xab, 0xe9, 0x1d, 0x01, 0xf2, 0x91, 0xf8, 0x4f, 0x00, 0xed, 0x2c, 0x45, 0xd0, 0xe2, 0x00, 0xf9, - 0x60, 0x31, 0xc4, 0x01, 0xf3, 0xc0, 0x79, 0xfd, 0x54, 0x73, 0x21, 0x2d, 0x60, 0x3c, 0x44, 0x05, - 0x24, 0x34, 0xaf, 0x83, 0x88, 0x01, 0xf8, 0xb1, 0xbe, 0x3d, 0x29, 0x50, 0xb1, 0xc5, 0x41, 0xc5, - 0xe2, 0x5c, 0x7a, 0x80, 0x35, 0xd2, 0x05, 0x04, 0xbd, 0x7e, 0x07, 0x90, 0x2c, 0x82, 0xb1, 0x20, - 0xef, 0x24, 0xce, 0x2a, 0x64, 0x9e, 0x7b, 0x4a, 0x52, 0x45, 0xd5, 0x45, 0xdd, 0xc0, 0x5c, 0x03, - 0x10, 0xa1, 0x00, 0xa8, 0x98, 0x01, 0xa4, 0x7a, 0xcf, 0x1c, 0x1d, 0x5e, 0x6b, 0x26, 0x2a, 0xd6, - 0x2a, 0x74, 0x05, 0xe4, 0x79, 0x62, 0xac, 0x9b, 0xdb, 0x83, 0x00, 0x02, 0x87, 0x00, 0x03, 0x58, - 0x77, 0x00, 0xa2, 0x98, 0xb2, 0x54, 0x86, 0xb6, 0xc4, 0xf9, 0x7b, 0xbd, 0x8a, 0xdf, 0xdd, 0x5d, - 0x31, 0x6f, 0xab, 0xb6, 0x07, 0xd8, 0x4c, 0x5f, 0x27, 0x9a, 0x8e, 0x77, 0xfb, 0x29, 0x3f, 0x87, - 0xb9, 0x08, 0xab, 0xae, 0xea, 0xb5, 0x5c, 0x21, 0xad, 0x6b, 0x5b, 0x69, 0xd7, 0x57, 0x3e, 0x13, - 0x25, 0xab, 0x48, 0xac, 0x32, 0xf5, 0xc1, 0x2c, 0x4f, 0x01, 0xd2, 0xc1, 0x1c, 0x1b, 0xc5, 0xc2, - 0x40, 0xe0, 0xa0, 0x61, 0xcc, 0x25, 0x65, 0x88, 0xea, 0x3e, 0x09, 0x62, 0x81, 0x88, 0x03, 0xf9, - 0xdc, 0x6b, 0xf3, 0x0d, 0x10, 0xa0, 0x0c, 0xb2, 0xe3, 0x83, 0xe9, 0x56, 0xd7, 0xbd, 0x5c, 0x90, - 0xe6, 0x85, 0xf0, 0xd2, 0x80, 0x4e, 0x57, 0xd8, 0x5d, 0xe9, 0x76, 0xfa, 0x97, 0xc7, 0x9f, 0xa6, - 0x4e, 0x3b, 0x73, 0xfc, 0x74, 0xb0, 0xd4, 0xa0, 0x03, 0xb5, 0xe7, 0x4c, 0x6d, 0xab, 0xf6, 0xf5, - 0xcf, 0xef, 0x6d, 0x92, 0x19, 0xcc, 0x5b, 0xc8, 0xd5, 0x79, 0x6c, 0x70, 0x38, 0xc2, 0x57, 0x64, - 0x3d, 0x30, 0x00, 0x1d, 0x4d, 0x46, 0x42, 0x3d, 0x10, 0xfe, 0xba, 0xbc, 0xcf, 0x1d, 0xb3, 0xfb, - 0xc4, 0xfd, 0x79, 0x72, 0xf4, 0xe3, 0x97, 0xdf, 0x0c, 0x00, 0x42, 0x06, 0xc9, 0x41, 0x53, 0x21, - 0x25, 0x2c, 0x06, 0x78, 0xf7, 0x8f, 0x34, 0xb0, 0x3b, 0x4a, 0x7b, 0xcb, 0x69, 0x40, 0x47, 0x85, - 0x6a, 0x59, 0xd6, 0x24, 0xf0, 0x98, 0x47, 0x07, 0x12, 0x6a, 0x2d, 0x8b, 0xab, 0xbb, 0xe6, 0xfc, - 0x48, 0x53, 0x22, 0xe3, 0x89, 0x63, 0xa0, 0x5f, 0x25, 0xea, 0x70, 0x01, 0xc3, 0x80, 0x3c, 0xb0, - 0x03, 0x2c, 0x03, 0xa9, 0x21, 0x43, 0x13, 0xc0, 0xfb, 0xb8, 0x90, 0xc8, 0xd8, 0x87, 0x8e, 0xbf, - 0x75, 0xa3, 0xf2, 0x80, 0x98, 0x74, 0x0f, 0x00, 0x3c, 0x54, 0x0f, 0x43, 0x02, 0xc0, 0xe6, 0xd8, - 0x61, 0x90, 0x74, 0x2e, 0x2a, 0x6e, 0xc7, 0xd8, 0x58, 0x80, 0xef, 0xb6, 0x7f, 0x06, 0xdf, 0x61, - 0x11, 0x21, 0x42, 0x0a, 0xa0, 0x63, 0x1d, 0xfe, 0xda, 0xb9, 0x4e, 0xf2, 0xb2, 0x77, 0xb5, 0x92, - 0xb2, 0x50, 0x76, 0x5f, 0xc7, 0x72, 0x34, 0x21, 0x8b, 0x6b, 0x24, 0xca, 0x8e, 0xbe, 0x2a, 0x80, - 0xcf, 0x08, 0x8c, 0xef, 0x6d, 0xd8, 0x79, 0xc9, 0x3b, 0x8f, 0x39, 0xc1, 0x46, 0x5c, 0xdf, 0xf8, - 0x60, 0x22, 0x3f, 0x2b, 0x92, 0xee, 0x4c, 0x8e, 0xc7, 0x35, 0x30, 0x1c, 0x20, 0xe4, 0x48, 0xb2, - 0x88, 0x0b, 0xf3, 0xe6, 0x20, 0x9a, 0xf0, 0x1d, 0x20, 0x59, 0x21, 0xa0, 0xe9, 0x73, 0xe1, 0x2d, - 0x78, 0x60, 0x6c, 0x1d, 0xf0, 0xf8, 0xa7, 0xd9, 0xf3, 0x94, 0x16, 0xa7, 0x06, 0x04, 0xa0, 0x00, - 0xa8, 0x72, 0xda, 0x85, 0x8a, 0xc6, 0x1f, 0x89, 0x51, 0x80, 0x07, 0xe1, 0x14, 0x82, 0x41, 0xc1, - 0x36, 0xc5, 0x5b, 0x38, 0x31, 0xb8, 0x71, 0xbf, 0x82, 0x32, 0xaa, 0x8e, 0x20, 0xb1, 0x30, 0x79, - 0x32, 0x0f, 0x71, 0x64, 0x68, 0xb4, 0xdd, 0xd2, 0xf9, 0x2a, 0xba, 0xec, 0xf1, 0x7d, 0x71, 0x42, - 0xa6, 0xdc, 0x76, 0x22, 0x1b, 0xb1, 0xd4, 0xf0, 0x49, 0xa6, 0xd3, 0x4c, 0x3c, 0x59, 0x5e, 0x7e, - 0x38, 0xb7, 0xdb, 0xf1, 0x1e, 0x2b, 0x2e, 0x6b, 0xbe, 0x43, 0xa9, 0x30, 0x72, 0xf8, 0x0d, 0x90, - 0x70, 0x33, 0xa9, 0xf2, 0x64, 0x5c, 0x28, 0x35, 0x2b, 0x53, 0xb5, 0xbc, 0x4d, 0x8b, 0x3c, 0x71, - 0xfd, 0xff, 0x87, 0x30, 0x0a, 0xf9, 0x93, 0x30, 0x49, 0xd9, 0xbf, 0xf3, 0x10, 0xf6, 0x64, 0x42, - 0xd8, 0xb6, 0x4d, 0x8b, 0x49, 0xf5, 0xeb, 0x96, 0x2a, 0xff, 0x87, 0x14, 0x04, 0x10, 0x86, 0xd0, - 0xc5, 0xa1, 0x5b, 0xff, 0xe1, 0x44, 0x8c, 0x33, 0x31, 0x8d, 0xa8, 0xed, 0xcb, 0x75, 0x0c, 0x78, - 0xe7, 0x71, 0x6d, 0xd6, 0xa7, 0xd9, 0x6e, 0x2c, 0x5b, 0xff, 0x0c, 0x00, 0xb0, 0x0a, 0x11, 0xb0, - 0x15, 0x95, 0x5a, 0x08, 0xc4, 0x00, 0xe0, 0x7b, 0xd4, 0x98, 0x15, 0x38, 0x00, 0x08, 0xf2, 0x56, - 0x8c, 0xed, 0x61, 0x9e, 0xa0, 0xec, 0x1a, 0xbb, 0x2a, 0x07, 0x9c, 0x3e, 0x2e, 0x03, 0xc0, 0x08, - 0x23, 0x48, 0x18, 0x27, 0x01, 0x28, 0x2e, 0x83, 0xd6, 0xe3, 0x17, 0xde, 0x69, 0x4c, 0x46, 0x9c, - 0xb8, 0x48, 0x76, 0x55, 0xa2, 0xdb, 0x07, 0x97, 0xb0, 0xf9, 0x2b, 0x71, 0xb9, 0xad, 0xfe, 0x18, - 0xee, 0x27, 0x62, 0x8b, 0x14, 0x5e, 0x2a, 0x9a, 0x4f, 0xc1, 0x40, 0xda, 0xa1, 0xbc, 0x65, 0x1b, - 0x62, 0xe9, 0xcb, 0x3e, 0x0e, 0x1e, 0xfb, 0x3c, 0x1e, 0x7b, 0x96, 0x5b, 0x27, 0x1d, 0xb0, 0xb6, - 0xee, 0x1e, 0x77, 0xc9, 0x81, 0xd3, 0x5f, 0x5d, 0xb7, 0xc1, 0x04, 0x29, 0xea, 0xd6, 0x54, 0x6d, - 0x54, 0x58, 0x18, 0x30, 0x41, 0x64, 0x4a, 0x54, 0x78, 0x2c, 0x18, 0x32, 0x1b, 0x6c, 0x72, 0x05, - 0x83, 0xc2, 0xce, 0x34, 0x2b, 0xc1, 0x5c, 0x77, 0xc8, 0x9d, 0x99, 0xe1, 0xc1, 0x27, 0x07, 0xac, - 0x2e, 0x85, 0xf7, 0x41, 0xeb, 0xe0, 0xb3, 0xcb, 0x45, 0xcb, 0x98, 0xac, 0x43, 0x46, 0x3e, 0x0a, - 0xec, 0x28, 0x6a, 0x6c, 0x6d, 0xd9, 0x6c, 0x56, 0x93, 0x31, 0x00, 0x3c, 0xe0, 0x1a, 0x25, 0x5c, - 0x48, 0xb8, 0x87, 0x1c, 0xb6, 0x5e, 0xe9, 0x3f, 0xce, 0x03, 0xc4, 0x0b, 0x20, 0xa3, 0xab, 0x44, - 0xd1, 0x03, 0x8b, 0x54, 0xf1, 0xc6, 0x38, 0x0e, 0x90, 0x2c, 0x85, 0x0a, 0xac, 0x8e, 0x1c, 0xab, - 0x17, 0x52, 0x2a, 0x8b, 0x84, 0xa2, 0xf5, 0x96, 0x53, 0xb3, 0x72, 0xdf, 0x65, 0xc5, 0xfe, 0x2f, - 0xaa, 0xd5, 0x45, 0xfc, 0xdd, 0x54, 0x35, 0xcd, 0xa7, 0x75, 0xc8, 0x22, 0x3d, 0x37, 0xdf, 0x21, - 0x52, 0x5f, 0xc4, 0x48, 0x41, 0x25, 0x2f, 0xcb, 0x9f, 0x11, 0x53, 0x53, 0x89, 0x2c, 0xf1, 0x22, - 0x02, 0x91, 0x70, 0x9f, 0x54, 0x65, 0x09, 0x19, 0x20, 0x01, 0xcb, 0x0a, 0xcd, 0x52, 0x1b, 0x59, - 0x27, 0x70, 0xcc, 0xd8, 0x5f, 0x4c, 0xb6, 0x1d, 0x65, 0x00, 0x3e, 0x91, 0x99, 0xd2, 0x33, 0x55, - 0xfd, 0xab, 0x6e, 0xd5, 0xdd, 0xd1, 0x75, 0x91, 0x4b, 0x91, 0xa4, 0x0b, 0xe6, 0xbc, 0xb4, 0xe1, - 0x97, 0xd0, 0xdb, 0x20, 0x03, 0x41, 0x59, 0x59, 0x79, 0xbb, 0x1e, 0xfe, 0xe3, 0xe1, 0xad, 0xc5, - 0xf9, 0x20, 0xf5, 0xbb, 0x00, 0x1c, 0x3f, 0xf8, 0x2e, 0x86, 0x3d, 0x6b, 0x9c, 0x34, 0xa0, 0x43, - 0x92, 0x34, 0x1f, 0x57, 0x59, 0xbd, 0x63, 0xb6, 0xdd, 0x77, 0xc9, 0xe4, 0x13, 0xc3, 0xc4, 0x80, - 0x04, 0xaa, 0xd5, 0x98, 0x6f, 0xd8, 0xa1, 0x32, 0x96, 0xd4, 0x50, 0x7c, 0xa6, 0xaa, 0x17, 0x1d, - 0x21, 0x3a, 0x31, 0xac, 0x21, 0x70, 0x68, 0x38, 0xe5, 0x57, 0x5b, 0x29, 0xa1, 0xc0, 0x70, 0x01, - 0x80, 0x2b, 0x7e, 0x0e, 0xf9, 0xdf, 0x8f, 0xce, 0x22, 0x52, 0x26, 0x93, 0x4b, 0xf2, 0x68, 0x8e, - 0xa7, 0xe0, 0x3a, 0x00, 0xe1, 0xc0, 0x74, 0x01, 0xa0, 0x37, 0xc0, 0xe8, 0x97, 0xc4, 0xcf, 0xb0, - 0xe2, 0x1d, 0xf9, 0x78, 0x24, 0xc0, 0x64, 0xc6, 0xc9, 0x06, 0xea, 0x0f, 0x47, 0x81, 0x16, 0x26, - 0xe1, 0x00, 0xc0, 0xe3, 0x62, 0x07, 0x04, 0xbe, 0x5e, 0xc0, 0xb2, 0x1f, 0x5f, 0x9e, 0x18, 0x0c, - 0x08, 0x89, 0x70, 0xff, 0x3c, 0xe1, 0x67, 0x5e, 0x24, 0x2c, 0x7c, 0x5d, 0x41, 0x46, 0xa5, 0x06, - 0x0b, 0x8b, 0x09, 0xa9, 0xc9, 0x0e, 0x06, 0x92, 0xe0, 0xfb, 0xfc, 0x35, 0xcc, 0x5d, 0xdf, 0xdd, - 0x77, 0xf7, 0x9b, 0x2b, 0xe2, 0x4d, 0xa2, 0x7a, 0x75, 0x5c, 0x29, 0xe5, 0xc6, 0xe7, 0x38, 0xe0, - 0x8f, 0x61, 0xce, 0x00, 0x74, 0x19, 0x83, 0x5a, 0x7d, 0xc2, 0x75, 0x7e, 0xc4, 0xfc, 0x87, 0xcf, - 0x7f, 0x15, 0xe7, 0x8d, 0xc0, 0x37, 0x63, 0x60, 0xe8, 0x37, 0x60, 0x62, 0x07, 0x60, 0xc4, 0x22, - 0x34, 0x40, 0xdd, 0x03, 0xda, 0xa6, 0x28, 0x24, 0xb1, 0x30, 0x00, 0x16, 0x58, 0xf6, 0x2a, 0xc8, - 0x2c, 0x15, 0x61, 0xbd, 0x29, 0xe5, 0x62, 0x5e, 0x60, 0x4f, 0x1e, 0x3a, 0xb9, 0x3d, 0x4f, 0x03, - 0x00, 0xd1, 0x2c, 0x1c, 0x48, 0xf9, 0xe3, 0xdb, 0x8f, 0x06, 0x00, 0xe4, 0x6c, 0xf0, 0x1c, 0x7f, - 0xab, 0x93, 0x1d, 0x32, 0xb0, 0xbd, 0x6b, 0x01, 0xdf, 0x05, 0xc0, 0xd1, 0x0b, 0x22, 0xe3, 0xec, - 0x57, 0x8e, 0x1e, 0x38, 0xc1, 0x12, 0x9c, 0xfe, 0x6a, 0xf8, 0x80, 0x28, 0x0d, 0x81, 0xbb, 0xe1, - 0xc2, 0xf8, 0xb2, 0x03, 0x58, 0x78, 0x00, 0x11, 0xc0, 0xaa, 0xb6, 0x55, 0x1a, 0xd3, 0x44, 0x00, - 0xa8, 0x34, 0x1b, 0x54, 0x25, 0x68, 0xf8, 0x00, 0x58, 0xf4, 0xc6, 0x29, 0x48, 0x30, 0xdd, 0x16, - 0xb2, 0xf2, 0x75, 0x9d, 0x1f, 0xf0, 0x88, 0xd1, 0x2d, 0x40, 0x4b, 0x37, 0x44, 0x4c, 0xc3, 0x8c, - 0xba, 0xee, 0xb7, 0xb0, 0xfa, 0x01, 0x61, 0xcb, 0xa2, 0x00, 0x61, 0x15, 0x38, 0x45, 0x8b, 0x7f, - 0xe0, 0x80, 0x8d, 0x33, 0x37, 0x63, 0x2b, 0x1a, 0x30, 0x0b, 0x99, 0xd7, 0x6d, 0x25, 0x64, 0x2d, - 0xb7, 0x34, 0xff, 0x88, 0xf1, 0x01, 0x4d, 0x4b, 0x56, 0xee, 0x48, 0xa1, 0x35, 0x26, 0x17, 0x44, - 0x25, 0x27, 0xd1, 0x7b, 0xb3, 0xe3, 0x6f, 0x30, 0x7c, 0x5c, 0xdf, 0xa0, 0x9e, 0x53, 0x85, 0x4f, - 0x70, 0x95, 0x91, 0x6f, 0x00, 0x00, 0x9a, 0x05, 0x4e, 0x1a, 0x26, 0xa4, 0x7f, 0xc4, 0x0a, 0xea, - 0xad, 0xaa, 0x06, 0x33, 0xdc, 0x40, 0xb3, 0x26, 0x4d, 0x24, 0x05, 0x4b, 0x01, 0xa5, 0x0a, 0x0f, - 0x8e, 0x1c, 0xe2, 0x01, 0x46, 0xd8, 0x51, 0xf3, 0x73, 0x2e, 0x3e, 0x5c, 0x40, 0x40, 0x28, 0x58, - 0xad, 0x4b, 0xc9, 0x01, 0xab, 0xc9, 0x00, 0x6e, 0x35, 0x80, 0x74, 0xb0, 0xf3, 0xa8, 0x63, 0x24, - 0xe0, 0xaa, 0x74, 0xf5, 0x00, 0x57, 0x12, 0x21, 0x95, 0x58, 0x1a, 0x2c, 0xe7, 0x88, 0x10, 0x0a, - 0x88, 0xb5, 0x55, 0x37, 0x61, 0x73, 0xb4, 0xb0, 0x4c, 0x72, 0x69, 0xb0, 0xec, 0x48, 0x2e, 0x55, - 0x44, 0xc9, 0x37, 0x7f, 0xe4, 0xe0, 0x38, 0xf2, 0x4e, 0x36, 0xc1, 0xdb, 0xa6, 0xe8, 0xbb, 0xac, - 0x7b, 0xa2, 0x84, 0xb3, 0x03, 0x06, 0x4e, 0xbf, 0xc3, 0x3d, 0x8a, 0x6d, 0x01, 0xdb, 0xf4, 0x2d, - 0x9f, 0x76, 0x9a, 0xfc, 0x27, 0xa4, 0xc9, 0x34, 0xf7, 0xf1, 0xe2, 0x10, 0x46, 0x96, 0x63, 0x1b, - 0x09, 0x31, 0x9e, 0xaa, 0x4b, 0x98, 0x88, 0x50, 0xa0, 0x7d, 0x6f, 0xac, 0x28, 0xa0, 0x0a, 0x2a, - 0x56, 0x03, 0x8c, 0x01, 0x91, 0xea, 0x80, 0x77, 0xb6, 0x4e, 0x8d, 0xd2, 0x0f, 0x8d, 0x7f, 0x28, - 0xc0, 0xd3, 0x82, 0x40, 0x74, 0x4a, 0xe6, 0xc4, 0xd8, 0x98, 0x72, 0x7f, 0x6e, 0x8e, 0xf1, 0x02, - 0x18, 0x9b, 0xe3, 0xdf, 0xdf, 0x28, 0xac, 0xd8, 0x6c, 0x2c, 0x48, 0x44, 0x16, 0x12, 0x79, 0xf3, - 0x72, 0x31, 0x8a, 0xb4, 0xf0, 0x13, 0xe4, 0x81, 0xba, 0xd9, 0xe8, 0x52, 0x77, 0x88, 0x12, 0x14, - 0x8a, 0x4b, 0x9c, 0x00, 0xe0, 0xee, 0x93, 0x8a, 0x8d, 0x4d, 0x28, 0x52, 0x94, 0xfd, 0x8c, 0xbb, - 0xf7, 0x54, 0x21, 0x8c, 0x67, 0x2c, 0xff, 0x3c, 0x30, 0x0a, 0x8a, 0x35, 0x1b, 0xf7, 0xd7, 0xc0, - 0xaa, 0x04, 0x3f, 0x88, 0xc4, 0x27, 0x4c, 0x95, 0xf4, 0xb7, 0xbb, 0x0d, 0xb2, 0x00, 0x58, 0x1b, - 0xa1, 0xed, 0x69, 0x21, 0x77, 0x7b, 0xd8, 0xa4, 0x98, 0x56, 0x31, 0x8b, 0x83, 0xba, 0x07, 0x3c, - 0x3b, 0xac, 0x2b, 0xd1, 0x45, 0xcb, 0x51, 0x45, 0xb8, 0x32, 0x02, 0xcd, 0xdd, 0xb0, 0x76, 0x83, - 0x9e, 0x3c, 0x30, 0x8e, 0x00, 0xd4, 0x44, 0xb9, 0x9d, 0x09, 0x9f, 0xca, 0x6a, 0x48, 0xa6, 0xd8, - 0x3b, 0xc9, 0xdb, 0x91, 0xf6, 0x1d, 0x50, 0x09, 0xab, 0x48, 0x3e, 0x70, 0x6e, 0xba, 0x6e, 0x58, - 0xc2, 0x0a, 0x87, 0xab, 0xac, 0xf0, 0x53, 0x85, 0xb8, 0x53, 0x8f, 0xc6, 0xce, 0x61, 0xa7, 0xd8, - 0xff, 0x89, 0x16, 0x4b, 0xda, 0xcb, 0x82, 0xbf, 0x28, 0x9b, 0xbb, 0xf8, 0xc3, 0x6e, 0xf9, 0x71, - 0xc7, 0x7c, 0xa7, 0x77, 0xdc, 0x18, 0x46, 0xb8, 0x09, 0x01, 0x21, 0x48, 0x18, 0x1d, 0x38, 0xb6, - 0x78, 0xc1, 0x5a, 0x83, 0xbe, 0x1e, 0xe5, 0xe2, 0x1e, 0x58, 0x0c, 0xe0, 0x1c, 0x24, 0x00, 0x54, - 0x2a, 0xab, 0xb0, 0xa2, 0x0d, 0x4f, 0xff, 0xf1, 0x02, 0x06, 0x5f, 0x4b, 0x77, 0x3d, 0xc2, 0xde, - 0xf6, 0xc5, 0x6f, 0xbb, 0xe2, 0x44, 0x0e, 0xdc, 0x36, 0xaf, 0xc2, 0x72, 0xb9, 0x97, 0xc5, 0x7c, - 0x22, 0x3a, 0x79, 0xce, 0x32, 0x83, 0xa1, 0xb8, 0xe2, 0xf2, 0xbc, 0x32, 0x2e, 0x15, 0x64, 0x98, - 0xcf, 0xcd, 0x45, 0x2f, 0xf1, 0x03, 0x26, 0x63, 0x0a, 0x96, 0x21, 0xa2, 0x92, 0xeb, 0xd3, 0xe9, - 0xcd, 0x3e, 0xda, 0x63, 0xb9, 0xab, 0x6e, 0xb9, 0x2e, 0xf9, 0x7b, 0xe2, 0xea, 0x4e, 0x23, 0x26, - 0x6b, 0x5f, 0x8e, 0xb1, 0xab, 0x1d, 0x61, 0xda, 0xcc, 0xcc, 0x56, 0x4c, 0x43, 0x12, 0xb7, 0xe2, - 0x44, 0xab, 0xc4, 0xc4, 0x08, 0x1a, 0x31, 0x75, 0xe3, 0x61, 0x24, 0xf6, 0x66, 0xe5, 0xe7, 0x09, - 0x92, 0xf1, 0x72, 0x70, 0x2a, 0x71, 0xf8, 0x05, 0x13, 0xc4, 0xbe, 0x1f, 0x28, 0xfe, 0x18, 0x8d, - 0x29, 0xd8, 0x42, 0x2b, 0x71, 0xc1, 0x4e, 0x6a, 0x6a, 0x83, 0xcf, 0x2c, 0x97, 0x1c, 0x4b, 0xb8, - 0xe2, 0x5e, 0x4f, 0x00, 0xf1, 0x48, 0x95, 0x29, 0xac, 0xa9, 0x05, 0xc1, 0xfb, 0xa0, 0xa6, 0x70, - 0xf5, 0x47, 0x7f, 0x36, 0x5f, 0x07, 0xbf, 0x0e, 0x38, 0x01, 0xca, 0x77, 0x90, 0x8e, 0x91, 0x0c, - 0x0e, 0x12, 0xfc, 0xce, 0x71, 0xd2, 0x78, 0xd4, 0xab, 0xe0, 0x73, 0xc7, 0xbe, 0xc8, 0x67, 0x60, - 0x24, 0x1e, 0x36, 0xb6, 0x59, 0x97, 0x88, 0x20, 0xa0, 0xc0, 0x00, 0x47, 0x42, 0xae, 0x1f, 0x15, - 0xbc, 0x91, 0xf1, 0x34, 0x3a, 0xfa, 0x70, 0xff, 0x0e, 0xdd, 0x9c, 0x50, 0xa5, 0x7e, 0x07, 0xe1, - 0xae, 0x58, 0x00, 0xc4, 0xbc, 0x0e, 0xa8, 0x0e, 0x92, 0x6e, 0xef, 0x46, 0x7c, 0xab, 0x8f, 0xff, - 0xc9, 0x07, 0x82, 0xc4, 0xff, 0x3d, 0x69, 0x49, 0xfd, 0x41, 0x08, 0x40, 0x28, 0x70, 0xd0, 0x26, - 0xd2, 0x00, 0x00, 0x23, 0xc4, 0x51, 0xd7, 0xdc, 0xf1, 0x8e, 0xfc, 0x9b, 0x9b, 0xfa, 0xd5, 0x58, - 0x17, 0x49, 0x95, 0x38, 0x48, 0x2d, 0x81, 0x28, 0xae, 0x58, 0xc3, 0x42, 0x69, 0x47, 0xe2, 0x44, - 0x85, 0x05, 0x13, 0x80, 0x2a, 0x58, 0x32, 0xc6, 0x7c, 0x2d, 0xef, 0xd5, 0x12, 0x0f, 0xad, 0x38, - 0xaa, 0x1b, 0x83, 0xa0, 0x69, 0xbc, 0x07, 0x23, 0xc6, 0xc3, 0x07, 0xcf, 0xb2, 0x3b, 0xb7, 0x31, - 0xf8, 0x10, 0x23, 0x0a, 0x06, 0x2b, 0x50, 0xa8, 0xcb, 0x27, 0x81, 0xe7, 0x80, 0x58, 0x39, 0xe7, - 0x81, 0x48, 0x89, 0x51, 0x28, 0x84, 0x30, 0x4f, 0x10, 0x83, 0x5f, 0x99, 0x22, 0xca, 0x9f, 0x81, - 0xf4, 0xbd, 0x9e, 0xc5, 0x1f, 0x85, 0x22, 0xb7, 0x39, 0x83, 0xfb, 0xad, 0xcf, 0x7d, 0x96, 0x31, - 0x5b, 0xb1, 0xba, 0x37, 0xe2, 0x44, 0x0c, 0xea, 0xb7, 0x4d, 0x8c, 0x27, 0x3d, 0xf2, 0x05, 0xbf, - 0x2b, 0x48, 0xd8, 0xc5, 0x77, 0xe2, 0x4e, 0xb2, 0xd1, 0x5f, 0x50, 0x5c, 0x41, 0x57, 0x12, 0x11, - 0x19, 0x1d, 0x36, 0x5b, 0xfc, 0x93, 0x13, 0x69, 0x4e, 0x36, 0xcc, 0x0c, 0x15, 0x12, 0xce, 0xce, - 0x06, 0x44, 0xbe, 0x8b, 0x85, 0x75, 0x78, 0xde, 0x5d, 0x56, 0x5e, 0x62, 0x55, 0x61, 0x28, 0x98, - 0xa2, 0x5d, 0xde, 0xab, 0x51, 0x22, 0x08, 0x56, 0xe8, 0xe4, 0xb3, 0xc1, 0x80, 0x60, 0x7f, 0x13, - 0xf4, 0x8e, 0xa8, 0x73, 0x54, 0x21, 0x92, 0x0a, 0xd9, 0x63, 0x71, 0x5f, 0x84, 0xb0, 0x7f, 0xe9, - 0x83, 0x57, 0x8f, 0xf8, 0x7a, 0x52, 0x00, 0x0e, 0x83, 0xa0, 0x3e, 0x1c, 0x50, 0x1a, 0x8d, 0x16, - 0x3e, 0x26, 0x1a, 0x16, 0x00, 0x04, 0x67, 0xb0, 0x78, 0x1f, 0x88, 0x7e, 0x21, 0x24, 0x0c, 0x49, - 0x3a, 0x25, 0xbc, 0xd1, 0x2d, 0xfe, 0x16, 0x8a, 0x00, 0xcf, 0x79, 0x60, 0x00, 0xcf, 0x1e, 0x1d, - 0xc1, 0xab, 0xf3, 0x85, 0x92, 0x0a, 0x84, 0xdf, 0x3f, 0x08, 0x3e, 0xf7, 0xc5, 0x9e, 0x94, 0xbc, - 0xb8, 0x2b, 0x2d, 0x85, 0x01, 0xf4, 0x2e, 0xa0, 0x0c, 0xc0, 0xd3, 0x06, 0x44, 0x1b, 0xfc, 0x8a, - 0xba, 0x63, 0xd8, 0xe0, 0xc7, 0x79, 0x41, 0x93, 0xba, 0xba, 0x95, 0xd8, 0x29, 0xe8, 0xe8, 0x23, - 0x15, 0x8f, 0x87, 0x08, 0x60, 0x04, 0xcd, 0xb0, 0x49, 0x07, 0xea, 0xc4, 0x3f, 0xcc, 0xf8, 0x01, - 0xf5, 0x6f, 0xdc, 0xe8, 0x5e, 0x14, 0x81, 0xb3, 0x73, 0xdd, 0x1b, 0x00, 0x3a, 0x3b, 0x27, 0x4f, - 0x1f, 0x6e, 0xe5, 0x07, 0x53, 0xde, 0x4d, 0xe7, 0xda, 0xc5, 0x3b, 0xec, 0xd1, 0x63, 0xfb, 0x72, - 0x7c, 0x08, 0x01, 0x00, 0xa4, 0xcc, 0x8b, 0xe6, 0x4e, 0xab, 0xa9, 0x19, 0x38, 0xab, 0xf1, 0xde, - 0x49, 0x9a, 0xad, 0x39, 0x51, 0x86, 0x4b, 0xc5, 0xc6, 0xff, 0xa2, 0xee, 0x26, 0xe5, 0x8e, 0xd2, - 0xf9, 0x77, 0x77, 0xc4, 0x04, 0x06, 0x57, 0x53, 0xaf, 0x6d, 0xab, 0x37, 0xa2, 0x8d, 0x9b, 0x2a, - 0xf2, 0xf1, 0x33, 0xa1, 0x9b, 0x24, 0xd9, 0x35, 0xba, 0xc2, 0x0a, 0x71, 0x5a, 0xd5, 0xee, 0xe1, - 0x2e, 0x49, 0xf2, 0x95, 0x76, 0x47, 0x7d, 0x72, 0x09, 0xdd, 0xfc, 0xc4, 0x77, 0x3e, 0x3f, 0x1c, - 0x14, 0x06, 0x42, 0x90, 0x26, 0x08, 0x99, 0x34, 0xda, 0x30, 0x5a, 0x3f, 0x93, 0xba, 0x6e, 0x7f, - 0x14, 0x6f, 0x2e, 0x29, 0xcf, 0x7c, 0x2a, 0x41, 0x20, 0x04, 0x10, 0xed, 0x45, 0x20, 0xcf, 0xfb, - 0xaa, 0x2c, 0x9f, 0xc1, 0xff, 0xde, 0xce, 0xde, 0x04, 0x18, 0xc1, 0x42, 0xb1, 0x47, 0x3e, 0x16, - 0x00, 0xc9, 0xc0, 0x54, 0x75, 0xe5, 0x51, 0x3f, 0x52, 0xf5, 0xb5, 0x0d, 0x60, 0x11, 0x14, 0x86, - 0x90, 0xb1, 0x42, 0x03, 0x7b, 0x3e, 0xde, 0x25, 0xed, 0x96, 0xe9, 0xa6, 0x2d, 0xdc, 0xbd, 0xbf, - 0x5c, 0x44, 0x7c, 0x9c, 0x15, 0xb7, 0xc3, 0xde, 0xf9, 0x35, 0xfc, 0x61, 0x65, 0x9d, 0x21, 0x78, - 0xb4, 0x49, 0xb4, 0x0e, 0xda, 0xd3, 0x89, 0x3e, 0x8e, 0xba, 0x6e, 0x43, 0xe3, 0x2f, 0xb6, 0xb6, - 0x8d, 0x65, 0x73, 0x21, 0xea, 0xdf, 0x28, 0x4d, 0xcb, 0xda, 0xf1, 0x16, 0xd5, 0xc4, 0x62, 0x5d, - 0x57, 0xc4, 0xc9, 0x2b, 0x31, 0x30, 0xf9, 0xf4, 0x29, 0xc8, 0x57, 0x7d, 0x72, 0x1a, 0xad, 0x9b, - 0xbe, 0xee, 0xff, 0x92, 0xab, 0x50, 0x8f, 0x26, 0xb5, 0x5c, 0x46, 0xab, 0xbc, 0xbe, 0x16, 0x70, - 0x04, 0xcb, 0x54, 0x33, 0xb7, 0x5d, 0x9a, 0x77, 0xba, 0xee, 0xf7, 0x78, 0x5e, 0x70, 0x01, 0xbd, - 0x5f, 0xa2, 0xff, 0x7b, 0x77, 0x6f, 0x4e, 0x5e, 0xbc, 0xdd, 0xf6, 0xe0, 0x40, 0x08, 0x09, 0x30, - 0xa3, 0x12, 0x38, 0xef, 0xcb, 0xda, 0x7f, 0x18, 0x70, 0xab, 0x1d, 0x4f, 0x60, 0xa7, 0xb1, 0xaa, - 0x8e, 0x63, 0x23, 0x13, 0x5f, 0x1e, 0x64, 0x52, 0x66, 0xd5, 0x59, 0x87, 0xf0, 0x85, 0x5c, 0x83, - 0x88, 0x1e, 0x64, 0x94, 0x32, 0x7e, 0x25, 0x3e, 0xea, 0xac, 0x1f, 0xc2, 0x02, 0x7a, 0xae, 0xaa, - 0xb5, 0xf8, 0x2b, 0x2e, 0x62, 0x0a, 0x46, 0x82, 0xe7, 0x01, 0x3f, 0x48, 0x80, 0x80, 0x48, 0x50, - 0xb6, 0xfe, 0x20, 0x59, 0xb3, 0x31, 0x4a, 0xb0, 0xbf, 0x17, 0xd5, 0x6a, 0xa9, 0xbe, 0x08, 0x6f, - 0x7c, 0xa3, 0x39, 0x2b, 0xaf, 0x8b, 0xc9, 0x9a, 0xae, 0x78, 0x40, 0x40, 0xe2, 0x03, 0x66, 0xa7, - 0x80, 0x39, 0x6f, 0xc2, 0xc1, 0x8a, 0xcb, 0x62, 0xb7, 0xb7, 0x7e, 0x24, 0x49, 0xc5, 0x6e, 0x25, - 0xcb, 0x15, 0x9f, 0xbf, 0xc4, 0x84, 0x48, 0x9e, 0xb7, 0x76, 0x94, 0x5c, 0xde, 0x71, 0x22, 0x42, - 0x99, 0x5c, 0x5d, 0x54, 0x4f, 0x05, 0xd4, 0x53, 0x17, 0x0b, 0xd4, 0xad, 0x61, 0x90, 0x67, 0x2a, - 0x78, 0x44, 0x29, 0x59, 0x39, 0xc8, 0xb3, 0x54, 0xb4, 0x43, 0x8a, 0xff, 0x0b, 0xc5, 0xf9, 0x66, - 0x77, 0x8c, 0x32, 0x3b, 0xdc, 0x71, 0x23, 0x2a, 0x18, 0x92, 0x2a, 0xc8, 0xbf, 0x0b, 0x6d, 0xbb, - 0x75, 0x80, 0x88, 0xf5, 0x55, 0x55, 0xe1, 0x11, 0x85, 0x51, 0x26, 0x8a, 0x5e, 0x79, 0xc1, 0x72, - 0xcc, 0x2c, 0x1f, 0x2a, 0xa9, 0x98, 0x17, 0x9f, 0xe0, 0xa4, 0x92, 0x4f, 0x31, 0x4a, 0xad, 0x30, - 0x81, 0xe5, 0x5f, 0xfb, 0xc4, 0xc2, 0x9c, 0x10, 0x89, 0x8b, 0xed, 0x15, 0xc1, 0x1d, 0x55, 0x57, - 0xbe, 0x6b, 0xbb, 0x9f, 0x84, 0xf9, 0x05, 0x6b, 0x5e, 0x10, 0x09, 0x89, 0x0b, 0x69, 0xed, 0xde, - 0xfc, 0x48, 0x91, 0x09, 0xc3, 0xb6, 0x56, 0x3f, 0xe4, 0xaa, 0xa6, 0xc6, 0x13, 0xec, 0x4e, 0x6f, - 0x2f, 0x26, 0x6f, 0x86, 0xf8, 0x22, 0xa9, 0xa1, 0x6d, 0x31, 0xf2, 0x77, 0x7f, 0x11, 0x74, 0x06, - 0xc9, 0xca, 0x45, 0x93, 0x12, 0xd1, 0xf9, 0xaa, 0x63, 0xf6, 0x20, 0x9f, 0x13, 0xad, 0x69, 0x5c, - 0x1c, 0x70, 0x9e, 0x5f, 0xbd, 0xdc, 0x0e, 0xbc, 0x95, 0x5c, 0x04, 0x94, 0x00, 0x00, 0x00, 0x01, - 0x41, 0x9a, 0x4b, 0x25, 0xb2, 0x97, 0x36, 0x5f, 0x7f, 0x29, 0x9e, 0xf7, 0xc4, 0xef, 0x7b, 0xab, - 0xbe, 0x5d, 0x6a, 0x0b, 0xf9, 0x0b, 0x7b, 0x93, 0x92, 0xc6, 0xf9, 0xb8, 0x2c, 0xad, 0x50, 0xd0, - 0xe7, 0xfc, 0x18, 0xd8, 0x5f, 0x47, 0x38, 0x98, 0x46, 0x5d, 0x06, 0x7c, 0x1f, 0xe8, 0x5c, 0x4c, - 0x40, 0xbc, 0xf7, 0xf1, 0x30, 0x59, 0x59, 0x3a, 0x49, 0x97, 0x7c, 0xaa, 0x2f, 0x95, 0x71, 0x85, - 0xda, 0x53, 0x62, 0xc9, 0xb3, 0x69, 0x6a, 0xab, 0xe5, 0xad, 0x60, 0xc3, 0x98, 0xce, 0x21, 0x64, - 0xe9, 0x51, 0x0a, 0xce, 0x20, 0x74, 0xea, 0x06, 0x68, 0x7e, 0x72, 0xc3, 0xc3, 0x01, 0x1f, 0xb1, - 0xd7, 0xe3, 0x7e, 0xa7, 0xc4, 0x8f, 0xd1, 0x5e, 0xdd, 0xfa, 0x6f, 0xe0, 0xaa, 0x56, 0x38, 0xb9, - 0x7c, 0x8a, 0x65, 0xfb, 0xf1, 0x37, 0x3e, 0x6f, 0xe4, 0xd6, 0xbe, 0x48, 0xad, 0xdd, 0xfc, 0x59, - 0x2f, 0x7d, 0xdf, 0x13, 0xe2, 0x70, 0x87, 0x37, 0x35, 0x04, 0x73, 0xc1, 0x40, 0x93, 0x62, 0x97, - 0x45, 0xcc, 0x40, 0xe0, 0x87, 0x0c, 0x9f, 0x16, 0x4c, 0x43, 0x82, 0x1c, 0xc4, 0x0e, 0x0a, 0xfc, - 0x11, 0x97, 0x14, 0x62, 0xbc, 0xa1, 0x5e, 0x6b, 0xde, 0x4e, 0x62, 0xf2, 0xff, 0x18, 0x2a, 0xf7, - 0xd1, 0x5a, 0xdf, 0xbb, 0xe5, 0x8f, 0x13, 0x04, 0x65, 0x42, 0x52, 0x31, 0xf7, 0xc2, 0x35, 0x3e, - 0x7a, 0x1b, 0xb7, 0x6f, 0x88, 0x8a, 0xa6, 0xd9, 0x7e, 0xed, 0xbf, 0x13, 0x7d, 0xdf, 0x12, 0x27, - 0x89, 0xfc, 0x23, 0x55, 0xda, 0x69, 0x6f, 0x7a, 0xe5, 0xda, 0x55, 0xe1, 0x1e, 0x24, 0x4c, 0x67, - 0x16, 0x4c, 0x1d, 0x2c, 0x03, 0xb8, 0x12, 0x89, 0xe0, 0x1a, 0x8c, 0x13, 0xc1, 0xd4, 0x02, 0x5b, - 0xa0, 0x7e, 0xc0, 0x68, 0x02, 0x90, 0xa4, 0x36, 0x3e, 0xa8, 0xc4, 0x04, 0xb8, 0x1b, 0xc5, 0x8e, - 0x01, 0x93, 0xd2, 0x94, 0x00, 0x4d, 0x28, 0x8e, 0x00, 0x95, 0x00, 0x00, 0x16, 0xe7, 0xf1, 0x61, - 0x6a, 0x29, 0x3f, 0x32, 0xb6, 0x63, 0xc2, 0xc3, 0x80, 0x39, 0x27, 0x1c, 0x11, 0x51, 0x1b, 0x81, - 0xc2, 0x0a, 0x63, 0xfd, 0x03, 0xf0, 0x4a, 0x78, 0x0f, 0x66, 0x14, 0x81, 0x64, 0x70, 0x71, 0x99, - 0xa7, 0x78, 0xb7, 0xb8, 0x3a, 0x24, 0x0b, 0x90, 0xf2, 0x38, 0x02, 0x94, 0x74, 0xd0, 0x8c, 0x0f, - 0xa7, 0xa8, 0xbb, 0x2e, 0xed, 0x97, 0x71, 0xb6, 0x7e, 0xdb, 0x6d, 0xb6, 0x0e, 0xfc, 0x77, 0xef, - 0xef, 0xe3, 0x0a, 0x32, 0xdb, 0x6f, 0xe1, 0xbc, 0x02, 0xae, 0xb8, 0xdc, 0x1f, 0x6f, 0x7e, 0x2d, - 0xe5, 0xbd, 0xe9, 0xdf, 0x5d, 0x34, 0xc5, 0x51, 0xa1, 0xa9, 0xbf, 0xf0, 0xee, 0x00, 0xa5, 0x44, - 0x4c, 0xc0, 0xb8, 0x9c, 0x5f, 0x6f, 0xde, 0xf7, 0x37, 0x2f, 0x86, 0x21, 0x6a, 0x2f, 0x56, 0x7f, - 0xc4, 0x82, 0x12, 0xb9, 0xf3, 0x68, 0x67, 0x8a, 0x10, 0x1a, 0x5f, 0x47, 0x7d, 0xa5, 0xf6, 0x5d, - 0x24, 0xbc, 0xd2, 0xa8, 0x1b, 0x38, 0x3b, 0xd7, 0xe2, 0x05, 0xef, 0x1b, 0xf2, 0x61, 0xb8, 0x24, - 0x14, 0x2e, 0x29, 0x93, 0x19, 0x9d, 0xf2, 0xc6, 0x92, 0x7f, 0x88, 0x12, 0x26, 0xee, 0xee, 0xed, - 0xb6, 0xe6, 0x0e, 0x20, 0xc9, 0xc8, 0xdb, 0xff, 0xfd, 0x7d, 0xb3, 0xfc, 0xa1, 0xb4, 0x14, 0x00, - 0x1e, 0xda, 0x87, 0x8a, 0xce, 0xa8, 0x34, 0xbf, 0x46, 0x7e, 0x32, 0xad, 0xe2, 0xb3, 0x71, 0x2f, - 0x77, 0xc4, 0xbd, 0x47, 0xfc, 0x53, 0x04, 0xf6, 0xd5, 0xfe, 0x1c, 0x24, 0x03, 0x30, 0x26, 0x86, - 0xb4, 0x22, 0xb4, 0x51, 0xdb, 0xfd, 0x6c, 0xec, 0xf3, 0x25, 0xd8, 0x39, 0xbd, 0x75, 0x8f, 0xb8, - 0xfb, 0xd7, 0x58, 0x74, 0xa4, 0x75, 0xfe, 0x1a, 0x21, 0x40, 0x48, 0xb9, 0x06, 0xe2, 0x56, 0xef, - 0xed, 0xff, 0x6f, 0x12, 0xd0, 0xc5, 0x47, 0x10, 0xe0, 0x4a, 0xe7, 0x4a, 0xc4, 0x44, 0x50, 0xd3, - 0x84, 0x94, 0x93, 0x7f, 0xff, 0xdb, 0x0c, 0x60, 0x0e, 0xe9, 0xc1, 0xc3, 0xfb, 0xfd, 0xee, 0x2a, - 0xb0, 0xce, 0x00, 0x74, 0x33, 0xef, 0x95, 0x65, 0xe7, 0x27, 0xdb, 0xe3, 0xff, 0xc4, 0xb6, 0x7f, - 0x82, 0x63, 0x3b, 0xbb, 0xe2, 0xb7, 0x68, 0x63, 0xb2, 0x5e, 0xfe, 0x14, 0xcd, 0x8b, 0x32, 0x2e, - 0x4f, 0xa3, 0xa9, 0xb1, 0x53, 0x95, 0x6e, 0x20, 0x41, 0x0e, 0xb5, 0xe2, 0x04, 0x82, 0x2d, 0x37, - 0xb1, 0x5c, 0xc6, 0xac, 0x79, 0x71, 0x10, 0x59, 0x55, 0x55, 0x5b, 0xba, 0xa9, 0xba, 0xf0, 0x71, - 0x10, 0x57, 0x24, 0x15, 0xdc, 0xbd, 0x8c, 0x41, 0xea, 0xb6, 0x1e, 0xb8, 0x88, 0xbb, 0x6d, 0x6a, - 0xaa, 0xb8, 0x89, 0xbb, 0xbf, 0x8b, 0x13, 0x97, 0x12, 0xc6, 0x59, 0x3e, 0x98, 0x88, 0x27, 0x19, - 0xc2, 0x8e, 0x1e, 0xf7, 0xf1, 0x31, 0x3c, 0x12, 0x0b, 0xdc, 0x1e, 0x78, 0xe7, 0xc3, 0x04, 0xc1, - 0xa1, 0xfe, 0x3c, 0xde, 0x27, 0x86, 0xc4, 0x44, 0x97, 0xe2, 0x1d, 0x2e, 0xf8, 0xd8, 0xbc, 0xa4, - 0xab, 0x3b, 0x97, 0x24, 0xaf, 0x58, 0xee, 0x45, 0x83, 0x39, 0xe3, 0xe2, 0x75, 0xf8, 0xe7, 0x70, - 0xd1, 0x20, 0x04, 0xf5, 0xc7, 0x29, 0x97, 0xbf, 0xdf, 0xd4, 0xbb, 0x17, 0xf9, 0x2e, 0x1a, 0x21, - 0x40, 0xba, 0xc1, 0x56, 0x7f, 0xff, 0x6d, 0xcc, 0x35, 0x80, 0x76, 0x36, 0x54, 0x7f, 0xed, 0xb7, - 0xfd, 0x85, 0x27, 0x03, 0x54, 0x72, 0x7f, 0xed, 0xb6, 0xdb, 0x6d, 0xb7, 0x0c, 0x60, 0x46, 0x66, - 0x03, 0x4b, 0xaf, 0xbc, 0xff, 0xef, 0x15, 0xb6, 0x17, 0x66, 0x00, 0x1f, 0x3a, 0xcc, 0x8d, 0x86, - 0x82, 0xdc, 0xff, 0x07, 0x6e, 0xdb, 0xb7, 0x9f, 0xd7, 0x1c, 0xff, 0xe7, 0xc1, 0x09, 0x05, 0x62, - 0x47, 0x8a, 0xed, 0x24, 0x6f, 0x41, 0x9e, 0x97, 0x90, 0x34, 0xbb, 0x9b, 0x84, 0xef, 0x7a, 0xe6, - 0xf8, 0x98, 0xc2, 0x96, 0x12, 0x78, 0x7b, 0x0c, 0xaf, 0x6a, 0x77, 0xad, 0x66, 0x87, 0x10, 0x6a, - 0xaa, 0xfc, 0x46, 0x5f, 0x8f, 0x26, 0x7f, 0xe6, 0xde, 0xfe, 0x53, 0x3b, 0xbf, 0xc2, 0x95, 0xcd, - 0x05, 0xea, 0x1a, 0x2c, 0xaf, 0x51, 0x38, 0x7d, 0xdf, 0x10, 0x59, 0x33, 0xad, 0x7c, 0xa4, 0x5a, - 0xd7, 0x11, 0x77, 0x6a, 0x5b, 0x2d, 0xf8, 0x44, 0x44, 0xa3, 0x08, 0x1d, 0xfb, 0x18, 0x4d, 0xb1, - 0x8a, 0x0f, 0x7d, 0x22, 0x88, 0x88, 0x0d, 0xfb, 0x03, 0xc0, 0x18, 0x41, 0x61, 0xa3, 0xb9, 0xf5, - 0x51, 0x75, 0xd4, 0x5c, 0xa9, 0xc1, 0x00, 0x14, 0x41, 0x78, 0xa0, 0x64, 0xf8, 0xa4, 0xfd, 0xd4, - 0xb5, 0x5d, 0x02, 0x95, 0x74, 0x8f, 0xe2, 0x1e, 0xd7, 0x81, 0xa0, 0x32, 0x34, 0x83, 0x84, 0xf8, - 0x51, 0x6a, 0x0c, 0x61, 0xe0, 0xe0, 0x96, 0x21, 0xf3, 0xb8, 0x54, 0x8b, 0xc4, 0xaf, 0x8f, 0x48, - 0x23, 0x04, 0x44, 0xe1, 0x77, 0xe4, 0x40, 0x00, 0x6b, 0xcc, 0xd2, 0xe2, 0xf2, 0xbf, 0x1d, 0xa1, - 0x78, 0x9a, 0x06, 0xa0, 0x5e, 0x3e, 0xf1, 0xa7, 0xc2, 0x00, 0xe4, 0x6e, 0x72, 0x8b, 0x52, 0xf8, - 0x1e, 0x25, 0x58, 0x76, 0x35, 0x2a, 0x83, 0xa2, 0xbe, 0x1d, 0x1f, 0x7e, 0x26, 0x63, 0xe2, 0x1b, - 0xd1, 0x23, 0xfd, 0xb0, 0x3e, 0xa0, 0x01, 0xf7, 0x76, 0xd5, 0x38, 0x6d, 0x94, 0x01, 0x1e, 0xce, - 0x59, 0x06, 0x17, 0x85, 0x74, 0xff, 0xbf, 0x8a, 0xbb, 0x83, 0xb7, 0xf1, 0x5a, 0x9e, 0x2d, 0xcb, - 0x78, 0x9d, 0x01, 0x75, 0xf8, 0x5f, 0xdc, 0x36, 0xc4, 0x80, 0x96, 0x7a, 0xe7, 0x5f, 0xfe, 0x7a, - 0xc4, 0x7a, 0x7a, 0x69, 0xf0, 0x5d, 0x7e, 0x2a, 0xcf, 0x58, 0x69, 0x40, 0x2f, 0xd9, 0x12, 0x19, - 0xdf, 0xfa, 0x69, 0xe9, 0xa6, 0xec, 0x39, 0x80, 0x22, 0xfa, 0xe6, 0xfc, 0xff, 0xa7, 0x6d, 0x3b, - 0x6d, 0xa2, 0x24, 0xbf, 0x6d, 0xb8, 0x6e, 0x40, 0x02, 0x47, 0x4d, 0xc6, 0x03, 0x36, 0x7e, 0xf3, - 0xf7, 0x77, 0x9e, 0xf5, 0x6c, 0xdc, 0x53, 0x22, 0xfe, 0x9c, 0x36, 0x48, 0x13, 0x3b, 0x45, 0xff, - 0xff, 0x1a, 0x7c, 0x64, 0xfa, 0xe6, 0xda, 0xdb, 0x07, 0x68, 0xee, 0xdc, 0xd1, 0xf0, 0xb7, 0x09, - 0x19, 0xef, 0xbd, 0xd7, 0x2d, 0xeb, 0x5c, 0x54, 0x90, 0x53, 0x6a, 0xb3, 0x09, 0x2d, 0x83, 0xae, - 0x6e, 0xab, 0x89, 0x88, 0xae, 0x30, 0x83, 0xcd, 0x4f, 0x1f, 0x64, 0xf1, 0x23, 0x9b, 0xab, 0x14, - 0x2f, 0x4b, 0xc4, 0xd5, 0x3f, 0xab, 0x4b, 0x8e, 0xd6, 0xab, 0x5a, 0xea, 0xb1, 0x26, 0x2d, 0xe5, - 0x63, 0xc4, 0xd8, 0xe9, 0xb6, 0x30, 0x08, 0xeb, 0xc4, 0x05, 0x49, 0xe2, 0xb2, 0x87, 0x14, 0x06, - 0xbd, 0x2f, 0xfe, 0x9a, 0x7a, 0x49, 0x2b, 0x6d, 0xe9, 0xa7, 0xe0, 0x11, 0x18, 0x2d, 0xee, 0xe8, - 0x7a, 0xbf, 0x01, 0x12, 0x10, 0x2d, 0x8f, 0x58, 0x78, 0x90, 0x0e, 0xd6, 0xae, 0x3f, 0xfb, 0x7b, - 0x6d, 0x86, 0xd4, 0x3f, 0x74, 0xda, 0xf8, 0x71, 0x40, 0xf5, 0x7b, 0xf4, 0xd3, 0xd3, 0xe9, 0xef, - 0x49, 0x2a, 0x7f, 0x0f, 0x28, 0x03, 0xda, 0xba, 0xe5, 0xff, 0xf4, 0xed, 0x8c, 0x66, 0xf6, 0xed, - 0xf8, 0x0d, 0x10, 0x40, 0x34, 0x40, 0xd2, 0xc5, 0xc8, 0xd4, 0x00, 0x92, 0x3f, 0x9c, 0xb8, 0xac, - 0xf2, 0xc3, 0x17, 0x17, 0x50, 0x52, 0x63, 0x1c, 0x22, 0xe1, 0x56, 0xac, 0x74, 0x03, 0xc0, 0xc7, - 0xa1, 0xe7, 0xc5, 0x16, 0x24, 0x6a, 0xdc, 0x1a, 0x6c, 0x1d, 0xac, 0x39, 0x12, 0x00, 0xfa, 0xe3, - 0xe2, 0x17, 0xe5, 0xdc, 0xa1, 0x50, 0xba, 0x13, 0xcd, 0xf8, 0x1d, 0xb9, 0x61, 0xd7, 0xc9, 0x06, - 0x3a, 0x8e, 0xe6, 0xc1, 0xd9, 0x54, 0x0b, 0x10, 0x07, 0xe9, 0xdb, 0xb7, 0x0e, 0xe0, 0x0b, 0xd1, - 0xf0, 0x22, 0x1f, 0xbb, 0x89, 0xff, 0xfd, 0x8e, 0x4f, 0xa9, 0xe7, 0x1e, 0xfc, 0xac, 0x67, 0x89, - 0x62, 0xdf, 0x52, 0xec, 0xbb, 0xcd, 0x11, 0x6c, 0xbb, 0x29, 0x0a, 0xb2, 0x37, 0x7d, 0xe8, 0x81, - 0x55, 0x7a, 0x4b, 0xec, 0x06, 0x48, 0x31, 0x1b, 0x91, 0x7f, 0x10, 0xe3, 0x47, 0xb8, 0x1d, 0x05, - 0x45, 0xca, 0x78, 0x3d, 0xdc, 0xbf, 0x59, 0x99, 0x22, 0xc9, 0x11, 0x0d, 0x7e, 0xdd, 0xac, 0x3a, - 0x88, 0x00, 0x50, 0x56, 0x7d, 0xce, 0xc1, 0x2c, 0xd3, 0xc4, 0x3f, 0x83, 0x1f, 0x8a, 0xc7, 0xff, - 0x72, 0xda, 0xcd, 0x45, 0x76, 0x02, 0x20, 0x61, 0xd7, 0x5e, 0x1d, 0xfa, 0x1e, 0x70, 0x00, 0x87, - 0x21, 0x6e, 0xae, 0x94, 0xe8, 0xec, 0x9a, 0x67, 0x3a, 0x38, 0xfd, 0x31, 0xb5, 0x7d, 0x97, 0x71, - 0x97, 0x60, 0xfb, 0x97, 0x71, 0x8d, 0xf0, 0x32, 0xf0, 0xe8, 0x87, 0xcc, 0x0f, 0x07, 0x4d, 0x38, - 0x31, 0x7d, 0x4f, 0xfb, 0x28, 0x71, 0x61, 0xab, 0xf3, 0x84, 0xf9, 0x79, 0xe0, 0xef, 0x90, 0xcf, - 0x7a, 0xe4, 0x1b, 0x37, 0xfd, 0x9a, 0x56, 0xab, 0x90, 0x8d, 0x3f, 0xe2, 0x2e, 0x96, 0xb5, 0xf8, - 0x8c, 0xbe, 0x9e, 0x9a, 0x27, 0xf0, 0x87, 0x1a, 0x38, 0x6a, 0xaf, 0x25, 0x8e, 0xed, 0x62, 0xf1, - 0x13, 0xae, 0x2a, 0xba, 0x33, 0x79, 0x48, 0x5f, 0xc2, 0x55, 0xd5, 0xa8, 0xb8, 0x9e, 0x78, 0x40, - 0xaa, 0xb5, 0xd5, 0x8e, 0xb5, 0x5c, 0x11, 0x12, 0x58, 0x5b, 0x8b, 0xe0, 0x9a, 0xea, 0xb4, 0xca, - 0x9a, 0x6d, 0x63, 0xea, 0xa2, 0x26, 0x2f, 0x36, 0x28, 0x1e, 0x44, 0x2b, 0xf0, 0x34, 0xc1, 0x61, - 0x74, 0x96, 0x2e, 0x2e, 0xb1, 0x75, 0x14, 0xdf, 0x0d, 0x60, 0x05, 0x2f, 0x54, 0xbb, 0x5a, 0x69, - 0xe9, 0xdb, 0xf3, 0xc3, 0x77, 0x08, 0x82, 0x10, 0xa4, 0x3b, 0x56, 0x76, 0x22, 0xc7, 0x7c, 0x56, - 0x24, 0x1f, 0xd5, 0x5a, 0x0e, 0xfa, 0xa9, 0xfe, 0xe6, 0x1a, 0xc1, 0x28, 0x67, 0x56, 0xfd, 0x3f, - 0xf6, 0xdb, 0x1f, 0x61, 0xa5, 0x01, 0xdb, 0xe5, 0x7f, 0xed, 0xb7, 0xb6, 0xde, 0x58, 0x78, 0x90, - 0x3a, 0xe6, 0x8f, 0xff, 0x4f, 0x84, 0xa5, 0x85, 0x6d, 0x70, 0x35, 0x45, 0xee, 0x06, 0x4c, 0x7e, - 0xe0, 0xe4, 0x28, 0x20, 0x53, 0x8a, 0x6a, 0x6a, 0x1e, 0x69, 0x24, 0x0c, 0x75, 0x1d, 0xf0, 0xb1, - 0x3c, 0x17, 0x14, 0xc5, 0x31, 0x1c, 0x3c, 0xe7, 0x11, 0xf4, 0x49, 0x21, 0xde, 0x05, 0x08, 0x52, - 0x5a, 0x79, 0x51, 0xc7, 0xcc, 0xcd, 0x21, 0x68, 0xb9, 0x55, 0x8a, 0xcf, 0x87, 0x21, 0x3f, 0xd1, - 0x8a, 0xc1, 0x8c, 0x28, 0x75, 0x15, 0x49, 0x28, 0x31, 0xc4, 0x08, 0x38, 0xc1, 0xa9, 0x3d, 0x6a, - 0x3c, 0x1c, 0xb3, 0x45, 0xd2, 0x38, 0xc2, 0x54, 0xfe, 0x74, 0x77, 0x82, 0x91, 0x21, 0x43, 0x1e, - 0x38, 0xe9, 0x55, 0x41, 0xb3, 0x4e, 0x01, 0xc2, 0x67, 0x05, 0x04, 0x3c, 0xb9, 0x7b, 0x34, 0x9d, - 0xc1, 0x60, 0xcb, 0x01, 0xdf, 0x81, 0x00, 0x40, 0xd8, 0xb8, 0x3a, 0x58, 0x51, 0x58, 0x3c, 0x03, - 0xc7, 0x6d, 0x3d, 0x89, 0xe0, 0x01, 0xc3, 0xac, 0x56, 0x4b, 0x56, 0xcb, 0x31, 0x52, 0x08, 0x8a, - 0x51, 0x58, 0x76, 0x25, 0x1c, 0x6c, 0xe1, 0x28, 0xc2, 0xf9, 0x6e, 0x5f, 0xe1, 0xfc, 0xe7, 0x34, - 0xc0, 0x00, 0x48, 0x65, 0x50, 0xbd, 0x9e, 0x72, 0x54, 0x22, 0x4b, 0xeb, 0x14, 0x58, 0xc5, 0x98, - 0x61, 0xbe, 0x4e, 0xaa, 0x4c, 0x41, 0x31, 0x7f, 0xdc, 0x62, 0x3a, 0x7a, 0xe2, 0x24, 0xcf, 0x26, - 0x2e, 0xb8, 0x82, 0xae, 0xaa, 0xbf, 0x94, 0xd2, 0xff, 0xc1, 0x19, 0x47, 0xd3, 0x3d, 0x02, 0x9e, - 0xfa, 0x1a, 0xc5, 0xc0, 0xd3, 0x05, 0x86, 0x55, 0x51, 0x75, 0xd2, 0x51, 0x72, 0xe3, 0x72, 0x2c, - 0x38, 0xa0, 0x94, 0xf2, 0xa5, 0xfe, 0x9f, 0xf4, 0xe3, 0x74, 0xd3, 0xf8, 0x51, 0x40, 0x08, 0x5d, - 0x49, 0x32, 0x04, 0x6a, 0xef, 0xbd, 0x34, 0xed, 0xb7, 0x56, 0xdb, 0x87, 0x88, 0x20, 0x00, 0x46, - 0x60, 0xf1, 0x3e, 0xe5, 0x24, 0xff, 0xbf, 0xfb, 0x76, 0x62, 0xda, 0x30, 0x75, 0x70, 0x7f, 0xc5, - 0xb5, 0x9f, 0x1f, 0xf0, 0x7c, 0xc2, 0x8f, 0xb6, 0xbb, 0x65, 0xef, 0xc8, 0x6d, 0x40, 0x0c, 0x50, - 0x56, 0xe3, 0x99, 0xdd, 0xdf, 0x3b, 0xfc, 0xda, 0x99, 0x76, 0x2d, 0xe2, 0xd8, 0xb6, 0x27, 0x42, - 0x32, 0xc4, 0x74, 0x41, 0xd4, 0xd3, 0x38, 0x6a, 0x58, 0x0b, 0x87, 0x51, 0x46, 0x9f, 0x5f, 0xf8, - 0xb6, 0x9e, 0x9a, 0x61, 0xb9, 0x43, 0x0c, 0x7e, 0x0e, 0xda, 0x0e, 0x36, 0xe2, 0xd0, 0x39, 0xb6, - 0x1c, 0x50, 0x02, 0x6e, 0xc4, 0xb6, 0x19, 0xd5, 0xbd, 0xf4, 0xd5, 0x6d, 0xb5, 0x58, 0xd2, 0x9c, - 0xe8, 0x80, 0x11, 0xe0, 0x50, 0x00, 0x21, 0xa7, 0x81, 0xe3, 0x86, 0x41, 0x94, 0x6b, 0x92, 0xc0, - 0x18, 0xd9, 0x90, 0x3a, 0x64, 0xc7, 0x81, 0x84, 0x20, 0x20, 0x81, 0x4a, 0xdf, 0x14, 0x63, 0xbe, - 0xb4, 0xc5, 0x18, 0x10, 0x43, 0x01, 0x49, 0x47, 0x8a, 0x54, 0x1e, 0xd4, 0x9a, 0xae, 0xd1, 0x80, - 0xbc, 0x33, 0x05, 0xc0, 0x67, 0xa4, 0x0b, 0x86, 0x60, 0xb8, 0x40, 0x24, 0xe0, 0xf8, 0x16, 0x19, - 0x66, 0x23, 0x83, 0xd6, 0x39, 0x84, 0x04, 0xe8, 0x15, 0x2a, 0x6f, 0x24, 0x11, 0x8f, 0x8e, 0x0e, - 0x1b, 0x70, 0x22, 0x77, 0x2d, 0x57, 0xa4, 0xdd, 0xdc, 0xdf, 0x62, 0x35, 0x2b, 0xd7, 0x2e, 0xc5, - 0xd5, 0x8b, 0x56, 0xf7, 0x79, 0x8e, 0x77, 0x58, 0xac, 0xd5, 0x2a, 0x11, 0x36, 0xaf, 0x97, 0xab, - 0x78, 0x73, 0x00, 0x08, 0x87, 0x32, 0x46, 0x3c, 0x6c, 0x70, 0xa5, 0x74, 0xf4, 0xe2, 0xac, 0x40, - 0xef, 0x1c, 0x07, 0xf0, 0x3a, 0x0f, 0xa9, 0x79, 0xc4, 0xc8, 0x0b, 0x04, 0x27, 0x4b, 0x6b, 0x80, - 0xb1, 0x02, 0x48, 0x52, 0x24, 0x7d, 0x73, 0x73, 0xc0, 0xf2, 0xa8, 0x26, 0x44, 0xa5, 0x4e, 0x00, - 0xe1, 0x38, 0x1f, 0x15, 0x45, 0xe6, 0x64, 0x4b, 0x32, 0x2b, 0xbc, 0x37, 0x3a, 0x1e, 0x04, 0x30, - 0x11, 0x48, 0x2a, 0xe0, 0x22, 0x40, 0x82, 0x14, 0xe9, 0xec, 0xb3, 0xbf, 0x05, 0x79, 0xf6, 0x9b, - 0xaa, 0x33, 0xbd, 0x24, 0xbb, 0xe1, 0x62, 0xac, 0xb9, 0x78, 0x3c, 0x0f, 0x02, 0xa0, 0xaa, 0x10, - 0x8c, 0x42, 0x3c, 0x1a, 0x97, 0x6b, 0x34, 0x47, 0xf0, 0x73, 0x8a, 0x37, 0x15, 0xbb, 0xe3, 0x61, - 0x1f, 0x01, 0x82, 0x20, 0x14, 0x0d, 0xb4, 0x7c, 0xaa, 0xd1, 0xb1, 0xd9, 0x96, 0x1c, 0x50, 0x06, - 0xff, 0x50, 0x96, 0x79, 0xa9, 0xa4, 0x96, 0x91, 0x37, 0xd8, 0x5a, 0x78, 0xa9, 0xa7, 0xfe, 0x01, - 0x41, 0x05, 0x21, 0x43, 0x0d, 0xab, 0x30, 0xf7, 0x36, 0xc9, 0x7e, 0x59, 0xc4, 0xf0, 0x4f, 0x1e, - 0x3a, 0xb0, 0x4f, 0x01, 0x60, 0xa1, 0x62, 0xc2, 0x11, 0xa4, 0x2c, 0xa0, 0x79, 0x60, 0xea, 0x9c, - 0x0d, 0x0e, 0x00, 0xe1, 0x60, 0x06, 0xdc, 0x25, 0xae, 0x3a, 0xa2, 0x78, 0x3a, 0xb0, 0xb7, 0x5b, - 0xc8, 0xba, 0x65, 0x00, 0x38, 0x01, 0xe1, 0x3c, 0x1f, 0xf2, 0xee, 0x9c, 0x3d, 0x80, 0x38, 0x39, - 0x18, 0x3a, 0xaf, 0x7f, 0xb6, 0x5e, 0x5f, 0xba, 0x69, 0xe7, 0x82, 0x8d, 0xbd, 0xb6, 0xd3, 0xc1, - 0xff, 0x4e, 0x18, 0x50, 0x25, 0xa4, 0xea, 0x6f, 0xf4, 0xff, 0xe9, 0x94, 0x3c, 0xa0, 0x04, 0x9f, - 0x5a, 0x62, 0xef, 0x71, 0xe9, 0xf4, 0x6b, 0x2d, 0x70, 0x76, 0xed, 0xd2, 0x26, 0xdb, 0xfe, 0x1c, - 0x50, 0x06, 0x21, 0xe6, 0x8e, 0x1d, 0xf3, 0xd6, 0xb2, 0x57, 0xe5, 0x83, 0x3c, 0x71, 0xff, 0x3f, - 0x2a, 0x32, 0xa6, 0x9a, 0x7f, 0x82, 0x10, 0x28, 0x85, 0x23, 0x89, 0xe0, 0x90, 0x73, 0x4c, 0xb0, - 0x65, 0x83, 0x14, 0x62, 0x07, 0x9b, 0x93, 0x55, 0xba, 0xa1, 0x6c, 0xe1, 0xed, 0xc2, 0xde, 0x90, - 0x61, 0xd4, 0x70, 0x0b, 0x96, 0xc0, 0x9d, 0x0d, 0xcf, 0xe9, 0xff, 0xee, 0x53, 0x4f, 0x2e, 0xa5, - 0xe0, 0x84, 0x48, 0x50, 0x91, 0xbb, 0x30, 0x3e, 0xd3, 0x0a, 0xf2, 0x27, 0x14, 0x29, 0x71, 0x91, - 0x03, 0x42, 0x05, 0xbd, 0x53, 0xf7, 0xcc, 0xc5, 0xe2, 0xe1, 0x18, 0x50, 0x85, 0xb0, 0xe8, 0xfc, - 0x94, 0x06, 0x9a, 0x93, 0xec, 0x37, 0x1b, 0xa7, 0xbb, 0x92, 0xf1, 0x75, 0x08, 0xad, 0x26, 0xcc, - 0x18, 0x59, 0xab, 0x06, 0xe2, 0x83, 0xb9, 0xe8, 0xc3, 0x03, 0x48, 0x21, 0x1b, 0xf1, 0xb5, 0xe3, - 0x0a, 0xe7, 0x2c, 0x1e, 0xc1, 0x16, 0xb0, 0x25, 0x15, 0x72, 0x40, 0x69, 0xd8, 0xb7, 0xb2, 0x7b, - 0x7f, 0x85, 0x7b, 0x2a, 0xae, 0x37, 0x94, 0xfa, 0xa8, 0xa0, 0xa2, 0x30, 0x2b, 0x97, 0x29, 0xf1, - 0xc7, 0x4f, 0xfa, 0x50, 0xe2, 0x83, 0x18, 0x45, 0xe1, 0xf7, 0x5e, 0xde, 0x7e, 0x73, 0x2b, 0xe4, - 0x6e, 0xb6, 0xf3, 0x3a, 0xdb, 0xa7, 0xf8, 0x0b, 0x90, 0x80, 0x53, 0x07, 0xf8, 0x2e, 0x5a, 0x84, - 0x70, 0x50, 0xea, 0x53, 0x73, 0xbc, 0x5c, 0xa7, 0x52, 0x5a, 0x97, 0x9e, 0x3d, 0xac, 0xa5, 0x58, - 0x1e, 0x00, 0x48, 0x85, 0x2a, 0x6d, 0x16, 0x8e, 0xe1, 0xf0, 0xf9, 0x14, 0x42, 0x5c, 0xb0, 0xec, - 0x4b, 0x53, 0x8a, 0x31, 0x58, 0xac, 0xd1, 0xc0, 0x78, 0x10, 0x61, 0x49, 0xf1, 0xfa, 0xea, 0x49, - 0xe7, 0x8e, 0xd8, 0x78, 0x79, 0xc0, 0x1f, 0x65, 0xd1, 0x46, 0xfe, 0x58, 0x64, 0x95, 0x3f, 0xdb, - 0xc5, 0x10, 0x74, 0xf0, 0xf3, 0x80, 0x05, 0xd9, 0xd3, 0x17, 0x52, 0x23, 0x85, 0x73, 0xe7, 0xf6, - 0xc9, 0xd5, 0xc7, 0xbc, 0x56, 0x0e, 0xbe, 0x4e, 0x1e, 0x2d, 0x9e, 0x06, 0x04, 0x8e, 0xbf, 0xbf, - 0x01, 0x32, 0x18, 0x0a, 0x19, 0x6a, 0x95, 0x83, 0x52, 0x57, 0xd5, 0x0e, 0x80, 0x0f, 0x07, 0x40, - 0x03, 0xc1, 0xd7, 0x87, 0x8d, 0x0b, 0xd5, 0xb9, 0x6b, 0x14, 0x5a, 0x07, 0xd4, 0x85, 0x88, 0x63, - 0xae, 0x02, 0x40, 0x40, 0x50, 0xe0, 0x6b, 0xb9, 0x0b, 0x51, 0x28, 0x12, 0x09, 0xc1, 0xe1, 0x61, - 0x52, 0xc0, 0x1b, 0xc9, 0x13, 0xbe, 0x2c, 0xf8, 0x73, 0x85, 0x80, 0x0c, 0xf0, 0x1f, 0x7e, 0xa0, - 0x3a, 0x06, 0xa5, 0x81, 0x00, 0x18, 0x02, 0xb8, 0x90, 0x7b, 0xf0, 0xf1, 0xfb, 0x4e, 0xbb, 0xcd, - 0x94, 0x77, 0x82, 0x10, 0xc8, 0xc8, 0xb6, 0x21, 0x61, 0x33, 0x85, 0x85, 0xbf, 0x9a, 0xd8, 0x81, - 0xb3, 0x6a, 0x37, 0xf4, 0x6a, 0xa3, 0xf8, 0x1d, 0xc4, 0xa0, 0xdd, 0x47, 0xb2, 0x54, 0x31, 0x4a, - 0x3a, 0xf8, 0x53, 0x11, 0x62, 0xd6, 0xcb, 0x48, 0x35, 0x8f, 0x96, 0x0a, 0x90, 0x6a, 0xaf, 0x07, - 0x3c, 0x5d, 0xd4, 0x38, 0x1e, 0xf4, 0x07, 0x00, 0xf9, 0x3d, 0xc3, 0xd6, 0x4b, 0x75, 0x05, 0xca, - 0xa2, 0xf0, 0x10, 0xf7, 0xd5, 0x5f, 0x37, 0x8c, 0x8f, 0x1f, 0x18, 0x4a, 0x9a, 0x4c, 0x99, 0x3e, - 0xe9, 0x5f, 0x47, 0x1b, 0x41, 0x0f, 0x11, 0xae, 0x10, 0xa4, 0x97, 0x77, 0x71, 0x5b, 0x85, 0x9a, - 0x3f, 0x94, 0x3c, 0x8e, 0x00, 0x68, 0x1a, 0x92, 0x93, 0xf1, 0x1e, 0xeb, 0x2b, 0x78, 0xbf, 0x4a, - 0x78, 0x3c, 0x55, 0xb7, 0xdb, 0xd7, 0xa0, 0xbe, 0x1a, 0x24, 0x00, 0xbe, 0x95, 0xf3, 0xfb, 0xfb, - 0xed, 0xd3, 0x6d, 0xbd, 0x34, 0xee, 0x99, 0x7a, 0x75, 0x0e, 0x22, 0x00, 0x30, 0x84, 0x0f, 0x72, - 0x39, 0x50, 0x22, 0xf7, 0xf4, 0x8a, 0xb6, 0xdc, 0x16, 0x07, 0x60, 0xea, 0x3b, 0x4d, 0x44, 0xb8, - 0x9a, 0x7a, 0xc6, 0xce, 0xd9, 0xde, 0x3a, 0x8a, 0xa9, 0x83, 0xff, 0x7b, 0xde, 0x1d, 0x70, 0x02, - 0xa6, 0xf8, 0x35, 0x94, 0xeb, 0x10, 0xbb, 0x3f, 0x24, 0x07, 0x37, 0xd5, 0x77, 0x46, 0xcf, 0x8e, - 0x6e, 0xce, 0xcf, 0xc6, 0x98, 0x68, 0x14, 0x9e, 0x0c, 0xe0, 0x38, 0x70, 0x9b, 0xb7, 0x3f, 0x58, - 0xf0, 0xdb, 0x80, 0x38, 0x5c, 0x10, 0xad, 0x79, 0xbb, 0xd5, 0xc2, 0x9a, 0x5e, 0xf8, 0x66, 0x8d, - 0x8f, 0x43, 0xbc, 0x57, 0x5e, 0xec, 0xa1, 0xb7, 0x00, 0xb4, 0x72, 0x15, 0xc8, 0x14, 0x8f, 0x06, - 0x26, 0x6e, 0x64, 0xc3, 0x72, 0x5d, 0x8c, 0x3b, 0x18, 0x2a, 0x2e, 0x83, 0xb7, 0x3c, 0x16, 0x26, - 0xb8, 0x35, 0x1b, 0xa0, 0xf8, 0x16, 0x4f, 0xfa, 0xe0, 0x50, 0x02, 0xc0, 0xd8, 0x7b, 0x94, 0x90, - 0xe0, 0xc0, 0x06, 0xa4, 0x78, 0x06, 0x55, 0x55, 0x3b, 0x06, 0x2c, 0x01, 0x60, 0x3a, 0x00, 0x58, - 0x2e, 0x03, 0xe3, 0x12, 0x80, 0x04, 0x81, 0x54, 0x4c, 0x25, 0x1f, 0x00, 0x02, 0x59, 0x64, 0x00, - 0x0b, 0x2c, 0x3c, 0x00, 0x04, 0x00, 0x30, 0x37, 0xb0, 0x02, 0x3a, 0x7c, 0x00, 0x04, 0x01, 0xb8, - 0x28, 0x31, 0x80, 0x00, 0xaf, 0x27, 0x4f, 0xc3, 0x6e, 0x00, 0x4e, 0x68, 0x73, 0x43, 0xe6, 0x5a, - 0x87, 0x7f, 0xa3, 0x79, 0x10, 0xfb, 0x85, 0x1e, 0xb7, 0x7a, 0xc3, 0x5e, 0x4a, 0x50, 0x0e, 0xc2, - 0x61, 0xa6, 0x8d, 0x80, 0xfe, 0x6d, 0x07, 0xa0, 0x43, 0xf5, 0xbd, 0xf8, 0x64, 0x74, 0xb3, 0x2f, - 0x0a, 0x57, 0x24, 0xac, 0x56, 0x2b, 0xcf, 0x9e, 0x22, 0x14, 0xcf, 0xb1, 0x56, 0x59, 0x97, 0x88, - 0xf3, 0x87, 0x26, 0xfc, 0x96, 0x0f, 0xcf, 0xf2, 0x97, 0x06, 0xdf, 0xb0, 0xef, 0x10, 0x4b, 0xd9, - 0xee, 0xef, 0x82, 0x33, 0xda, 0x56, 0x9a, 0xb9, 0x89, 0x6a, 0xbe, 0x1d, 0x33, 0xe3, 0xd5, 0xa0, - 0x9c, 0x7f, 0x45, 0xcd, 0x8a, 0xa8, 0xc9, 0x2a, 0x7f, 0xe2, 0xf5, 0x31, 0xa8, 0x48, 0x8f, 0x08, - 0x87, 0xf8, 0x92, 0xb7, 0x3f, 0xbf, 0xdf, 0xeb, 0x88, 0xbb, 0xe7, 0xb9, 0x7b, 0xe2, 0x44, 0xb3, - 0x6c, 0xea, 0x29, 0xb7, 0x6a, 0xc3, 0xa4, 0x20, 0x00, 0x23, 0x24, 0x3f, 0xe4, 0x42, 0x3b, 0xd8, - 0x27, 0xff, 0xb6, 0xda, 0xa7, 0x03, 0xa8, 0xba, 0x29, 0x0b, 0xc2, 0xa0, 0x54, 0xb9, 0xff, 0x0a, - 0xbd, 0x0e, 0x10, 0xc0, 0x01, 0x20, 0xac, 0x2b, 0x8b, 0xda, 0x43, 0xa9, 0x0f, 0xdd, 0xa8, 0x50, - 0xe0, 0x17, 0x0a, 0x61, 0xc3, 0x91, 0xa5, 0xae, 0xb3, 0xc5, 0x8a, 0x0b, 0x3f, 0xac, 0x1c, 0x65, - 0x88, 0x97, 0xe1, 0x94, 0x6f, 0xaf, 0x1c, 0x70, 0xda, 0x80, 0x16, 0x8e, 0xcc, 0x37, 0x10, 0xd9, - 0x15, 0x3b, 0x5d, 0x8d, 0xf3, 0x83, 0xbc, 0x63, 0x72, 0xe0, 0x54, 0x50, 0xc7, 0xfc, 0x2f, 0xcb, - 0x42, 0xdb, 0x38, 0x9c, 0x2b, 0x2e, 0x58, 0x3f, 0x8b, 0x60, 0x66, 0xc1, 0xa9, 0xb3, 0x93, 0x69, - 0xc3, 0x0e, 0xc7, 0xe1, 0xbc, 0x00, 0x69, 0x9c, 0x9a, 0xaf, 0xa2, 0x72, 0xad, 0x50, 0x94, 0xb1, - 0xb3, 0x8d, 0xbb, 0xe4, 0x67, 0xcc, 0xc5, 0x38, 0xa4, 0x0f, 0xeb, 0xcc, 0xd1, 0x4d, 0xd5, 0x9f, - 0xed, 0xe5, 0x15, 0x87, 0xb0, 0xaf, 0x85, 0x52, 0x0a, 0x9e, 0xbe, 0xde, 0x5d, 0xf0, 0xde, 0x00, - 0xee, 0x50, 0x7f, 0x5c, 0x32, 0x60, 0xd7, 0x7b, 0xf9, 0x28, 0xe2, 0x1a, 0xca, 0xe3, 0xac, 0x5b, - 0x1c, 0x6e, 0x5a, 0xdc, 0xff, 0x0b, 0xaa, 0xec, 0x33, 0x1d, 0x7a, 0x6a, 0xb6, 0xf0, 0x41, 0x1b, - 0xa0, 0xa3, 0x12, 0xf5, 0xf6, 0x11, 0xf8, 0x04, 0xe2, 0xdd, 0x5b, 0x00, 0xfa, 0xc8, 0x01, 0x18, - 0x5b, 0x01, 0x2b, 0xb0, 0x00, 0xaa, 0x70, 0x99, 0xf6, 0x1d, 0x80, 0x00, 0x80, 0x2a, 0x8b, 0x18, - 0x83, 0x0a, 0xa4, 0xe0, 0x00, 0xf9, 0x84, 0x0f, 0x29, 0xf0, 0x53, 0x75, 0xa1, 0x8c, 0x06, 0x9c, - 0x71, 0xde, 0x3c, 0x16, 0x4f, 0x04, 0x80, 0x24, 0x0e, 0x00, 0x8c, 0xbd, 0xb8, 0xa0, 0xb1, 0x2e, - 0xe0, 0x69, 0x07, 0x23, 0x2a, 0x01, 0x30, 0x6e, 0xb0, 0x2a, 0x50, 0xb4, 0xb5, 0x6f, 0x54, 0x0f, - 0x6f, 0x68, 0x33, 0x5b, 0x9b, 0x02, 0x24, 0x2d, 0xe2, 0x04, 0x05, 0x04, 0xd5, 0x55, 0x49, 0xe9, - 0xf1, 0xb5, 0x6e, 0x63, 0xbd, 0x01, 0xe6, 0xe2, 0x44, 0x8c, 0x27, 0x2e, 0x64, 0x93, 0xdc, 0xfd, - 0xbe, 0xc6, 0xd3, 0x36, 0xf0, 0x41, 0xc0, 0xd2, 0x0a, 0x46, 0xf5, 0xb3, 0x26, 0x0c, 0x7f, 0x8f, - 0x3e, 0x24, 0xc5, 0x02, 0x10, 0xc0, 0x6d, 0xd8, 0xec, 0x63, 0x3e, 0xa7, 0xfe, 0x0e, 0x42, 0x23, - 0x68, 0x5e, 0x42, 0x3c, 0x7b, 0x6a, 0xeb, 0xd3, 0x76, 0x1f, 0xda, 0xce, 0xe3, 0xb3, 0x3c, 0xf2, - 0x40, 0xe0, 0xb8, 0x51, 0x4a, 0x64, 0x22, 0x4b, 0xd1, 0xc5, 0xb2, 0x7f, 0x31, 0x56, 0xbf, 0x17, - 0x55, 0x55, 0x5a, 0xc3, 0x5c, 0xb2, 0x47, 0x43, 0x5c, 0xc2, 0x0b, 0x9d, 0x76, 0x7a, 0xdb, 0xf2, - 0x4a, 0x4d, 0x84, 0x5d, 0xbf, 0xc6, 0x61, 0xed, 0x2b, 0x50, 0xca, 0x3b, 0xa4, 0x93, 0x56, 0x97, - 0xc6, 0x67, 0x6f, 0x10, 0x3e, 0x2b, 0x77, 0x3e, 0x3f, 0x1c, 0x56, 0xfc, 0x39, 0xa7, 0x89, 0x8e, - 0x8f, 0xa6, 0x3a, 0x3f, 0x8e, 0xbf, 0xa3, 0x9e, 0x26, 0x3c, 0xe4, 0x62, 0xb9, 0xbc, 0xac, 0xc8, - 0x90, 0xdc, 0x28, 0x21, 0x99, 0x28, 0x78, 0x82, 0x80, 0x25, 0x08, 0xc7, 0x2f, 0x4c, 0xe1, 0x9f, - 0x55, 0xb7, 0xbb, 0x22, 0x7f, 0x03, 0x5b, 0x52, 0xe7, 0x4c, 0x58, 0xa4, 0x83, 0x9e, 0x80, 0xfc, - 0x7b, 0xc7, 0x5f, 0x7f, 0x04, 0xac, 0x31, 0xe5, 0x76, 0xde, 0x2a, 0xe6, 0xa8, 0x42, 0x9c, 0x6c, - 0xe3, 0xd0, 0xf6, 0x01, 0x1e, 0xa9, 0x8f, 0xb6, 0x52, 0xdd, 0xbf, 0xfe, 0x4e, 0x4f, 0x22, 0x84, - 0x30, 0x1f, 0xc7, 0xf8, 0x31, 0x04, 0x20, 0xae, 0x0c, 0xa5, 0x7c, 0x19, 0xf9, 0x17, 0x54, 0x85, - 0x34, 0xc9, 0xea, 0x4e, 0x10, 0xe2, 0x80, 0x07, 0xe8, 0x3c, 0xb6, 0xb5, 0x48, 0xf9, 0xc6, 0x16, - 0xb0, 0x31, 0x27, 0x88, 0x84, 0x2a, 0xb9, 0x51, 0x8c, 0x2d, 0x93, 0x6f, 0xd3, 0xd3, 0x14, 0x11, - 0x4c, 0xe9, 0x83, 0xff, 0xe0, 0x51, 0x02, 0x48, 0x7a, 0x48, 0x0e, 0x42, 0xa2, 0xfe, 0x25, 0x00, - 0x1e, 0x78, 0x70, 0x84, 0x0e, 0xf8, 0x3a, 0x0e, 0xf8, 0x91, 0xf2, 0x11, 0xfb, 0x91, 0xd6, 0x43, - 0xde, 0x03, 0x11, 0x21, 0x00, 0x02, 0x22, 0xf4, 0xcd, 0xbf, 0x10, 0x15, 0x8d, 0x1f, 0xf9, 0x90, - 0xc9, 0x7b, 0xe2, 0xef, 0xd0, 0x81, 0xab, 0x90, 0x01, 0xed, 0xf2, 0xc4, 0xc8, 0x0c, 0x18, 0xc9, - 0xa6, 0x92, 0x65, 0x85, 0x97, 0x7e, 0x06, 0x00, 0x60, 0x09, 0x63, 0x82, 0x2e, 0x03, 0x88, 0xf3, - 0x8f, 0xfa, 0xfb, 0x12, 0x42, 0x21, 0x11, 0xa5, 0xc4, 0xbc, 0xbd, 0xfb, 0x71, 0xba, 0xc7, 0xfd, - 0x52, 0xda, 0xea, 0x8a, 0x10, 0xea, 0x04, 0x74, 0x2e, 0x95, 0xa0, 0x00, 0x37, 0x94, 0x15, 0xb4, - 0xf0, 0x62, 0x68, 0x3f, 0x08, 0x04, 0x07, 0x18, 0x1b, 0xfc, 0x1e, 0x8f, 0x24, 0x20, 0x00, 0x5f, - 0x99, 0x5a, 0x8e, 0x3e, 0x04, 0xe0, 0xf4, 0xe6, 0x67, 0x90, 0x86, 0x3a, 0xbe, 0x6e, 0xdc, 0xda, - 0xc6, 0x10, 0x08, 0x12, 0x4c, 0xb2, 0x15, 0x78, 0x81, 0x00, 0xa4, 0xea, 0x86, 0x4f, 0x8b, 0xee, - 0x04, 0xe4, 0x58, 0xbb, 0xe3, 0x19, 0xc1, 0x60, 0x27, 0x70, 0xbb, 0x3d, 0x0c, 0xf1, 0xd9, 0x58, - 0xf3, 0xca, 0x89, 0x0e, 0x60, 0xc0, 0x97, 0x85, 0x2a, 0xe8, 0x4e, 0xe2, 0x8e, 0x2b, 0x97, 0xbd, - 0x1b, 0x62, 0x1f, 0x05, 0xa3, 0xe7, 0xc3, 0x8a, 0x00, 0x07, 0x9c, 0x24, 0x7b, 0xa9, 0x8a, 0x66, - 0xb8, 0xbd, 0xbd, 0x5e, 0x1a, 0x79, 0x07, 0xe1, 0x6b, 0x18, 0xef, 0xda, 0x68, 0xfd, 0x5b, 0xd4, - 0xc4, 0xb4, 0xc9, 0x77, 0x1b, 0x4c, 0xc0, 0x80, 0xc3, 0xa0, 0x43, 0xcf, 0xfa, 0x7f, 0x11, 0xd4, - 0xf8, 0xaf, 0xcc, 0x8e, 0xfd, 0xf8, 0x9e, 0x2f, 0x26, 0x13, 0x33, 0xe2, 0x42, 0x84, 0xd0, 0xc8, - 0xc1, 0xb1, 0xd0, 0x4c, 0x89, 0xb8, 0x74, 0x5f, 0x63, 0x0f, 0xa9, 0x52, 0xf2, 0x97, 0x89, 0x7b, - 0x79, 0x4e, 0x0c, 0x02, 0x23, 0x65, 0xc0, 0xf9, 0x38, 0x00, 0x2a, 0x70, 0x00, 0x30, 0x0e, 0xed, - 0x6f, 0x7e, 0x9a, 0x21, 0xd6, 0xd5, 0x36, 0xa6, 0xe3, 0x49, 0x01, 0xb4, 0x19, 0x03, 0x1c, 0xd2, - 0x2e, 0x47, 0xee, 0xc0, 0x77, 0x40, 0x6a, 0x2f, 0x9c, 0x9f, 0x88, 0x08, 0x05, 0x27, 0xd5, 0xb1, - 0x0f, 0x59, 0xe1, 0x7d, 0xf1, 0x30, 0x31, 0x99, 0xd5, 0xd8, 0x7f, 0x41, 0x55, 0x90, 0x01, 0x07, - 0x5c, 0xa4, 0x5b, 0x21, 0xa9, 0x59, 0x5f, 0x10, 0x08, 0x4a, 0x80, 0x7e, 0x2a, 0xbc, 0xbe, 0x38, - 0x91, 0xf8, 0x2a, 0xa0, 0x6a, 0xce, 0x1a, 0x9e, 0xe2, 0xe5, 0x4b, 0x68, 0xbc, 0x1a, 0x4f, 0x8b, - 0x20, 0x86, 0xbb, 0x2e, 0xe2, 0x6e, 0x5f, 0xab, 0xe4, 0x20, 0x96, 0x16, 0x8a, 0x93, 0xcb, 0x15, - 0xcb, 0xcb, 0x9e, 0x2f, 0xcb, 0xf2, 0xe0, 0xaf, 0xc2, 0x24, 0xd5, 0x4b, 0x85, 0xcb, 0x2d, 0x9c, - 0xe3, 0x68, 0x5b, 0xbc, 0x4c, 0x23, 0xa7, 0x57, 0x8a, 0xc5, 0x74, 0x85, 0x18, 0x1f, 0x06, 0xbc, - 0x18, 0x0d, 0x2a, 0xca, 0x59, 0x54, 0x15, 0x47, 0x9c, 0x1c, 0x80, 0x7c, 0x54, 0x40, 0xf8, 0xd2, - 0x03, 0xaa, 0x32, 0x9a, 0x8f, 0x01, 0x60, 0xe1, 0xdc, 0xc1, 0xd0, 0x8f, 0x52, 0x4c, 0x23, 0x08, - 0x05, 0xec, 0x32, 0x3a, 0x95, 0xca, 0x1c, 0x7e, 0x2b, 0x42, 0xdc, 0x60, 0xab, 0xfb, 0xfc, 0x22, - 0x10, 0x0a, 0x1f, 0x69, 0x5b, 0x7b, 0xfa, 0x7d, 0x5f, 0xfb, 0xd6, 0xae, 0x7c, 0x86, 0x36, 0x05, - 0xb4, 0xb3, 0xe2, 0x44, 0x82, 0x11, 0x65, 0x8b, 0xf7, 0x5b, 0x9c, 0x10, 0xd7, 0x26, 0xef, 0xf7, - 0x77, 0xd7, 0x14, 0x29, 0x13, 0xed, 0x3f, 0xe4, 0x28, 0x87, 0x9e, 0x38, 0xf5, 0x13, 0xab, 0x4b, - 0x88, 0x21, 0xa0, 0xaa, 0xb0, 0xb3, 0x30, 0xc8, 0x30, 0x1b, 0x64, 0x3e, 0x0e, 0xfa, 0x77, 0x20, - 0x8e, 0xb0, 0xe6, 0x42, 0xe6, 0xc9, 0x1e, 0xba, 0xc4, 0x03, 0x53, 0x60, 0x37, 0x8e, 0x80, 0x00, - 0x99, 0xb0, 0x56, 0xca, 0x37, 0x9f, 0xfe, 0x19, 0x01, 0x10, 0x36, 0x1a, 0xa4, 0x06, 0x93, 0xc0, - 0x00, 0x56, 0x0f, 0x00, 0x01, 0xb8, 0x0c, 0x58, 0x3e, 0x18, 0x2c, 0x7c, 0x9c, 0x00, 0xf3, 0x28, - 0x94, 0xf0, 0x30, 0xb2, 0xc0, 0x0c, 0xd5, 0x71, 0x24, 0x93, 0xb9, 0x9a, 0x74, 0x1a, 0x1e, 0x7c, - 0x43, 0x80, 0x41, 0x20, 0xca, 0x0a, 0xcc, 0x63, 0x8e, 0xfe, 0x4e, 0x4f, 0xe0, 0xe2, 0x0a, 0xcf, - 0xf2, 0x76, 0x62, 0x10, 0xb3, 0x13, 0xf9, 0x76, 0x7f, 0xb3, 0xf4, 0x01, 0x5f, 0x64, 0xc9, 0xfe, - 0x09, 0x04, 0xde, 0xef, 0xf1, 0xc6, 0xbd, 0xcf, 0xc2, 0x2f, 0x4a, 0xdf, 0x97, 0xbf, 0x8c, 0x2a, - 0x9d, 0x2a, 0xa9, 0xec, 0xf0, 0xdd, 0x0e, 0x83, 0xd0, 0xd7, 0xc4, 0xec, 0xf9, 0xed, 0xa5, 0xc4, - 0x0a, 0x20, 0x58, 0x15, 0x26, 0x00, 0x55, 0xbc, 0xb6, 0x4f, 0x62, 0x6c, 0x78, 0x80, 0x88, 0x25, - 0x90, 0xe0, 0xd5, 0xf7, 0x0f, 0x7f, 0xd5, 0x27, 0x7f, 0x12, 0x14, 0xee, 0x5c, 0xdc, 0x84, 0xc3, - 0x6f, 0xd5, 0x64, 0x84, 0x5c, 0xde, 0x4c, 0x5e, 0x20, 0x6e, 0x6e, 0x8d, 0x77, 0x27, 0x9a, 0x6e, - 0xeb, 0x31, 0xa1, 0x1f, 0xfd, 0x4a, 0x31, 0xff, 0xc7, 0x72, 0x55, 0x7f, 0x75, 0xac, 0x9c, 0x85, - 0x55, 0xc6, 0x76, 0x71, 0xb1, 0x89, 0xf2, 0x71, 0x23, 0x15, 0x55, 0x49, 0x93, 0xf8, 0x4f, 0xb4, - 0xd2, 0xc9, 0x8b, 0xe0, 0x8c, 0xba, 0xac, 0x57, 0xc2, 0x86, 0x6c, 0x7a, 0x31, 0x78, 0x3b, 0x33, - 0x30, 0x4e, 0xf2, 0xf5, 0x97, 0x79, 0xe2, 0xcc, 0x3b, 0x80, 0x0a, 0xe6, 0xf9, 0xe2, 0xc0, 0x82, - 0x4b, 0xfd, 0x39, 0x54, 0x60, 0x3b, 0xc5, 0xeb, 0x07, 0xcf, 0x0c, 0x3c, 0x4b, 0xe7, 0x00, 0x7c, - 0x0c, 0x99, 0x79, 0xcb, 0x61, 0xd3, 0xba, 0xcc, 0x03, 0xaf, 0xf7, 0xf0, 0xf9, 0x58, 0x16, 0xb8, - 0xb0, 0x86, 0xa6, 0x38, 0x22, 0xf6, 0x32, 0x80, 0x21, 0x57, 0x9b, 0xc4, 0xf8, 0x17, 0x40, 0xe4, - 0x85, 0x8a, 0x71, 0x27, 0xcb, 0xf0, 0xd6, 0x00, 0x96, 0xa6, 0x8c, 0x33, 0xbf, 0xe0, 0x43, 0xd9, - 0xc5, 0x65, 0xf1, 0xd2, 0x64, 0xca, 0xd7, 0xe4, 0xe4, 0xf3, 0x9f, 0x0d, 0xc2, 0xc0, 0x57, 0x2c, - 0x00, 0xc4, 0x78, 0x10, 0xe0, 0x40, 0xbf, 0x78, 0xae, 0xb9, 0xaf, 0x9b, 0xe2, 0x63, 0x08, 0xf4, - 0xcf, 0xcc, 0xaf, 0x6f, 0x2d, 0x54, 0x97, 0x94, 0x63, 0xd6, 0x16, 0x79, 0xde, 0x3a, 0x89, 0xc4, - 0x09, 0x16, 0x31, 0xb6, 0x11, 0x9c, 0x78, 0xbb, 0xf4, 0xf1, 0x22, 0x02, 0x22, 0x35, 0x4c, 0x2b, - 0x36, 0x31, 0x24, 0x60, 0x3a, 0xc5, 0x7c, 0x34, 0x42, 0xb1, 0xa3, 0x8d, 0x58, 0x9f, 0x30, 0x71, - 0x64, 0xfe, 0x55, 0xee, 0xc4, 0x4b, 0x1b, 0xd7, 0x8f, 0x79, 0x8e, 0x9f, 0xe5, 0xee, 0xfe, 0x2e, - 0x13, 0x59, 0x3f, 0x24, 0x04, 0xc2, 0x56, 0xe4, 0x15, 0xa9, 0x2a, 0xc8, 0xe7, 0x4c, 0x3c, 0xa6, - 0x54, 0xf9, 0x59, 0xe2, 0x4b, 0x27, 0xf7, 0xc4, 0x09, 0x3e, 0x3e, 0xef, 0x82, 0x6e, 0x43, 0x29, - 0xbd, 0xe1, 0xb5, 0x00, 0x03, 0xae, 0x1c, 0x81, 0xab, 0x57, 0x17, 0x3a, 0x32, 0x90, 0x5e, 0x3a, - 0xa3, 0xaf, 0x9a, 0xd6, 0x78, 0x36, 0xf8, 0x96, 0x0c, 0x15, 0x14, 0x32, 0xc1, 0xce, 0x63, 0x7e, - 0x7f, 0xf8, 0x76, 0x8c, 0x00, 0x09, 0xa8, 0x7b, 0xca, 0x20, 0x19, 0x81, 0xdf, 0xcd, 0xed, 0xb2, - 0x23, 0xc8, 0x9d, 0x5f, 0x02, 0x28, 0x08, 0xc2, 0xff, 0xf0, 0x99, 0x0e, 0x00, 0x3e, 0x49, 0x4c, - 0x53, 0x4d, 0xfb, 0xef, 0x0b, 0xf4, 0x24, 0x1d, 0x0e, 0x34, 0x3c, 0x69, 0x0b, 0x6f, 0x71, 0x8d, - 0x29, 0xd8, 0x3e, 0x83, 0x60, 0x7b, 0xc5, 0x16, 0x90, 0xa7, 0x1e, 0x16, 0x8a, 0x00, 0x19, 0xde, - 0x28, 0x00, 0x14, 0x9c, 0x1e, 0x1f, 0x00, 0x95, 0x99, 0xc2, 0x73, 0x30, 0x96, 0x19, 0xfc, 0x40, - 0xc2, 0x2a, 0xef, 0x8c, 0xa7, 0x03, 0xab, 0x3e, 0x7f, 0x02, 0xf5, 0xaa, 0xa7, 0x11, 0xfe, 0x4c, - 0x2f, 0x85, 0x11, 0x00, 0x19, 0x9c, 0x35, 0x82, 0x48, 0x9d, 0x89, 0x37, 0xf3, 0x6a, 0x6e, 0x6a, - 0x0f, 0xf4, 0xb3, 0x8f, 0xfb, 0xbd, 0x70, 0xf6, 0x00, 0x1c, 0x67, 0x0d, 0x35, 0x7d, 0x20, 0x44, - 0x7f, 0xf6, 0x67, 0x25, 0x81, 0x84, 0x27, 0x0d, 0xe8, 0x25, 0xa2, 0x20, 0x5f, 0xc7, 0xe1, 0x51, - 0xae, 0xf3, 0x5e, 0x5e, 0xe5, 0x69, 0x59, 0xf6, 0xcb, 0xb5, 0x1f, 0x3f, 0xbd, 0xbe, 0xed, 0xd3, - 0xf0, 0x57, 0x06, 0x9a, 0xa3, 0x52, 0x88, 0xbc, 0x4f, 0xc8, 0x2b, 0x81, 0x51, 0x4b, 0x2c, 0xa7, - 0xf6, 0x7c, 0x27, 0x14, 0x62, 0x8c, 0x56, 0x2b, 0xb4, 0xff, 0x15, 0x91, 0x01, 0xa9, 0x00, 0xa9, - 0x3b, 0xf9, 0x64, 0x6a, 0x5f, 0xc2, 0xd2, 0x2f, 0x4e, 0x66, 0xe9, 0xea, 0x3a, 0x91, 0xcf, 0xc7, - 0xf5, 0x69, 0x7a, 0xba, 0xfb, 0xbd, 0xeb, 0x98, 0xa9, 0xe2, 0xb0, 0x87, 0x25, 0xdd, 0xfe, 0xee, - 0xff, 0x82, 0x43, 0x3a, 0x5b, 0xd7, 0x0f, 0x6b, 0x7e, 0x2e, 0x6e, 0x4a, 0x1e, 0x0b, 0x85, 0x92, - 0x30, 0x0a, 0xc2, 0xd8, 0x5a, 0x89, 0xa7, 0xf0, 0xf3, 0x80, 0x0a, 0x4f, 0x8c, 0x6f, 0x4a, 0x5b, - 0xf9, 0x01, 0x62, 0x48, 0xd9, 0x7f, 0x1e, 0x0f, 0x7f, 0xf6, 0xd3, 0xbe, 0xff, 0x4f, 0x12, 0xaa, - 0xee, 0xcb, 0xff, 0xe3, 0xca, 0x2f, 0x5c, 0x1d, 0x0b, 0xc1, 0xc4, 0x2f, 0x07, 0x45, 0xe0, 0xe8, - 0xbe, 0x07, 0x88, 0xc2, 0x13, 0x2a, 0x4e, 0x02, 0xa4, 0xae, 0x0f, 0xe5, 0x85, 0x05, 0x63, 0x0e, - 0xc6, 0xa3, 0x88, 0x7e, 0x4f, 0x07, 0xd9, 0xbb, 0x3c, 0x97, 0xc3, 0x2c, 0xa0, 0x0e, 0x9c, 0x5f, - 0xfe, 0x1e, 0x12, 0x92, 0xfd, 0xea, 0xdd, 0xb1, 0xae, 0xde, 0x99, 0x46, 0x41, 0x97, 0xaf, 0xd6, - 0x15, 0x50, 0x0b, 0x2b, 0x94, 0x11, 0x5a, 0xba, 0xda, 0x65, 0x36, 0xd4, 0x43, 0x45, 0x3d, 0xee, - 0x5d, 0x66, 0x5d, 0x96, 0xb1, 0xdf, 0x97, 0x41, 0xdd, 0x21, 0xf8, 0x28, 0x26, 0x51, 0x5e, 0x3f, - 0x96, 0x61, 0x7f, 0x9d, 0x46, 0x2b, 0x10, 0x62, 0x9b, 0xad, 0x42, 0x3c, 0xd5, 0x5c, 0xfc, 0xa4, - 0x5a, 0xd7, 0x26, 0xf7, 0xf7, 0x3f, 0xf0, 0x9f, 0x19, 0x87, 0xc2, 0xa3, 0x65, 0x81, 0x9e, 0x06, - 0x59, 0x8a, 0x61, 0x6d, 0x51, 0x7c, 0x5f, 0x49, 0x28, 0x4f, 0x00, 0x39, 0x8d, 0x28, 0x18, 0xf1, - 0xd7, 0x8c, 0x43, 0xd7, 0x34, 0x56, 0x7f, 0x7f, 0xe1, 0x23, 0xc2, 0xb5, 0xbb, 0xad, 0x78, 0x88, - 0xf2, 0x1c, 0x15, 0x07, 0x79, 0x7c, 0xc0, 0x93, 0xac, 0x89, 0x56, 0x87, 0x89, 0x10, 0x3c, 0xa7, - 0x48, 0x58, 0xf3, 0xe0, 0xa0, 0xc4, 0x8e, 0x5d, 0xbb, 0x5e, 0x26, 0x30, 0xcf, 0xcf, 0x6a, 0x58, - 0xe5, 0xf5, 0x6c, 0x5e, 0x32, 0xb2, 0xdf, 0x82, 0xb3, 0x37, 0x32, 0xd9, 0x70, 0xe0, 0x1c, 0x1e, - 0xf0, 0xf0, 0x04, 0xc4, 0xb0, 0x69, 0x5e, 0xff, 0x28, 0x94, 0xad, 0x78, 0x92, 0x97, 0x55, 0xf6, - 0x67, 0xa1, 0x99, 0x90, 0xa7, 0x04, 0x67, 0x4e, 0xab, 0xdf, 0x20, 0x87, 0x6f, 0x27, 0x04, 0x45, - 0xe5, 0xef, 0x0a, 0x72, 0xf7, 0x7c, 0x4c, 0x79, 0x01, 0x46, 0xa0, 0xf0, 0x03, 0xf0, 0xe9, 0xe1, - 0x00, 0x78, 0xb9, 0xc6, 0x05, 0xee, 0x2b, 0xbf, 0x89, 0x3a, 0xd6, 0xab, 0xf8, 0x25, 0x11, 0x37, - 0xe5, 0x55, 0x5d, 0xe2, 0x47, 0xf5, 0x5d, 0x54, 0x5d, 0x2f, 0x89, 0x08, 0xdc, 0x40, 0x0f, 0x73, - 0x81, 0xe3, 0xbe, 0x24, 0x1c, 0x9a, 0xc3, 0xf9, 0xef, 0x3c, 0x72, 0xfc, 0x48, 0x80, 0xa1, 0x4b, - 0x18, 0x91, 0xc3, 0xdf, 0x51, 0x2b, 0x4e, 0xa5, 0xd6, 0xb5, 0x5b, 0xf8, 0x91, 0x9a, 0xb6, 0xaa, - 0xa9, 0x2d, 0x6a, 0x92, 0xd2, 0xf1, 0xf5, 0x55, 0x53, 0x71, 0x84, 0x11, 0xe4, 0xe8, 0x6b, 0xf1, - 0x38, 0xe9, 0x75, 0x26, 0x06, 0xb8, 0x9e, 0xef, 0x6e, 0xef, 0x98, 0x6c, 0xde, 0xa1, 0x1e, 0xc8, - 0xee, 0xf2, 0x76, 0x31, 0xef, 0xf0, 0x90, 0x94, 0x32, 0x6a, 0x65, 0xb7, 0x7f, 0xc1, 0x28, 0x8b, - 0xbd, 0xde, 0x9c, 0xa1, 0x4e, 0x51, 0x35, 0xa8, 0x9e, 0xcc, 0xf7, 0xfa, 0x1b, 0xd5, 0xcc, 0x31, - 0xdf, 0x1f, 0x11, 0x25, 0xde, 0xe6, 0xe1, 0x31, 0x32, 0xed, 0xa7, 0xdc, 0x39, 0xc8, 0x21, 0x53, - 0x5f, 0x94, 0x4e, 0xaa, 0x14, 0xe2, 0x62, 0xbb, 0xcf, 0x96, 0xa5, 0xe4, 0xbb, 0x58, 0x77, 0xb3, - 0x2e, 0x4e, 0x0e, 0x78, 0xb3, 0xd6, 0xb5, 0x58, 0x0c, 0x88, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, - 0x4c, 0x26, 0x32, 0x85, 0x70, 0x99, 0xab, 0x55, 0x5c, 0xdc, 0xa5, 0x5a, 0xc3, 0xdc, 0x13, 0xdc, - 0x56, 0xe2, 0xb7, 0x15, 0xb8, 0xae, 0xb0, 0xec, 0xa0, 0x25, 0x03, 0x60, 0x80, 0xb9, 0xd5, 0xf5, - 0xaf, 0xd6, 0xa0, 0xe8, 0x2d, 0xbd, 0xfe, 0x32, 0x50, 0x47, 0x3a, 0xa8, 0x73, 0x1f, 0x8c, 0xc5, - 0xeb, 0x19, 0x81, 0x1b, 0x21, 0x82, 0xf8, 0xcc, 0x0f, 0x10, 0x74, 0x0d, 0x8c, 0xc0, 0x39, 0xb0, - 0x83, 0x9a, 0x6c, 0x31, 0x14, 0x00, 0x63, 0x40, 0x61, 0x2e, 0xa0, 0x5a, 0x05, 0x78, 0x81, 0xf6, - 0x28, 0xdf, 0xc4, 0x30, 0x2d, 0x88, 0x60, 0x5b, 0x34, 0x7e, 0x19, 0x9c, 0x01, 0xc0, 0x5f, 0x42, - 0x80, 0x00, 0x80, 0x14, 0x67, 0xbf, 0xc5, 0x71, 0x5f, 0xc7, 0xeb, 0xec, 0x8e, 0xf8, 0x8e, 0x62, - 0xbd, 0xc5, 0x78, 0x98, 0x93, 0x3e, 0xaf, 0x6f, 0xe2, 0xec, 0x6e, 0xe3, 0xf4, 0x6d, 0x6b, 0xf9, - 0xbc, 0xff, 0xc2, 0x05, 0xaa, 0x1e, 0xed, 0x4b, 0x0c, 0x9a, 0x1f, 0xe0, 0x9e, 0x2b, 0x14, 0x6e, - 0x2b, 0x71, 0x5d, 0xeb, 0x09, 0xb8, 0x23, 0xe2, 0x4b, 0x4b, 0xaf, 0xff, 0xc2, 0x6c, 0x48, 0x01, - 0xee, 0xc9, 0x71, 0x07, 0x4f, 0xbf, 0xd6, 0xbf, 0x88, 0x52, 0x6c, 0x73, 0x81, 0x98, 0x0e, 0x4e, - 0xc7, 0x38, 0x7d, 0x46, 0x47, 0xe3, 0x94, 0x27, 0x48, 0xca, 0x3f, 0x0b, 0xc7, 0x00, 0x0d, 0x67, - 0xd8, 0xa2, 0x94, 0x97, 0xdf, 0xfd, 0xc7, 0xf1, 0xbe, 0x36, 0xc3, 0x4c, 0x48, 0x06, 0x03, 0x13, - 0x0d, 0x49, 0xef, 0xf7, 0xbf, 0xd1, 0xf1, 0x1c, 0xc2, 0x2b, 0x5f, 0x08, 0xf1, 0x75, 0xad, 0x57, - 0x55, 0xc1, 0x21, 0x61, 0x64, 0xc9, 0x01, 0x0a, 0xda, 0xc7, 0xe2, 0x68, 0x9d, 0xc4, 0xc4, 0x58, - 0xde, 0xc4, 0xaa, 0x2f, 0x7c, 0x4c, 0x56, 0x9c, 0x5b, 0x8b, 0x73, 0x33, 0xe2, 0x79, 0xb3, 0x2b, - 0x3c, 0x4c, 0x11, 0x15, 0x25, 0x6f, 0xd5, 0xc5, 0x99, 0xcb, 0x97, 0x7b, 0xc2, 0x5c, 0xde, 0x2b, - 0xf0, 0x50, 0x25, 0xdc, 0x55, 0x2e, 0x29, 0x8b, 0xf7, 0xc5, 0x93, 0x36, 0x2e, 0x2e, 0x2f, 0xe5, - 0x2e, 0x2e, 0x2e, 0x7e, 0x43, 0xbb, 0xde, 0x1b, 0x50, 0x10, 0xad, 0xb1, 0x79, 0x93, 0xdb, 0xb9, - 0xbd, 0xff, 0x70, 0x5f, 0xd3, 0xb7, 0xf8, 0x5a, 0x20, 0x00, 0xcc, 0x15, 0x9f, 0x81, 0x39, 0x6f, - 0xf3, 0xf1, 0x57, 0x60, 0xfb, 0xaa, 0xb3, 0xcc, 0x53, 0x80, 0xc4, 0xa1, 0xd1, 0x0f, 0x22, 0x80, - 0x8f, 0xf9, 0x3d, 0x7f, 0xff, 0x6e, 0x8b, 0xbf, 0xb6, 0xdc, 0x3c, 0x48, 0x02, 0xde, 0x8d, 0x94, - 0x5f, 0xfb, 0x6d, 0xed, 0xb7, 0x5f, 0xdb, 0xc3, 0x24, 0x80, 0x02, 0x4d, 0x92, 0x26, 0xdb, 0x42, - 0x6e, 0xbb, 0xff, 0xe7, 0xed, 0x8e, 0x0b, 0xf4, 0x7e, 0x1a, 0x8a, 0x00, 0x20, 0x2e, 0x66, 0x81, - 0xd2, 0xfb, 0x8a, 0xf3, 0xff, 0x9f, 0xf5, 0xfe, 0x91, 0x42, 0xcc, 0xe0, 0x1e, 0xe2, 0x55, 0x3b, - 0xdf, 0xff, 0xfe, 0x2c, 0x42, 0x7b, 0xbc, 0xfe, 0x2a, 0x24, 0x41, 0x0b, 0x8e, 0xd6, 0x22, 0xca, - 0x3a, 0x79, 0x6a, 0x70, 0x3a, 0xfc, 0x11, 0xdb, 0x3f, 0x1b, 0xa7, 0xd7, 0xc5, 0x0b, 0xad, 0x5e, - 0xd7, 0x13, 0x57, 0xf9, 0x06, 0x16, 0x8f, 0xb8, 0x9f, 0x84, 0x63, 0x38, 0xbe, 0x0f, 0x3c, 0x03, - 0xe0, 0x1a, 0x88, 0x70, 0x0f, 0x10, 0x3f, 0x07, 0xb0, 0x0d, 0x49, 0x81, 0xf4, 0x3d, 0x80, 0x04, - 0xd9, 0x10, 0x76, 0x25, 0x04, 0xc6, 0xae, 0x5a, 0x69, 0xd3, 0x37, 0x7f, 0xa6, 0x33, 0xa1, 0xfc, - 0x6c, 0x0a, 0x83, 0x70, 0x55, 0x5c, 0x4c, 0x38, 0x3f, 0x81, 0x08, 0x90, 0xa0, 0x84, 0x67, 0x50, - 0x50, 0xfd, 0xf0, 0xea, 0x80, 0x05, 0x47, 0x8e, 0x55, 0x20, 0x89, 0xdf, 0xa1, 0x9d, 0xb7, 0xfe, - 0x07, 0x8f, 0xb5, 0x4c, 0x50, 0xb0, 0xdc, 0x67, 0x83, 0xa2, 0x84, 0xc6, 0xe8, 0xc5, 0x91, 0x72, - 0xb1, 0xa8, 0xe4, 0xbb, 0xe8, 0xa3, 0x83, 0x58, 0x50, 0xce, 0x28, 0xd9, 0x9a, 0xf5, 0xc7, 0xd5, - 0xbb, 0x51, 0x6e, 0x1b, 0xc0, 0x09, 0xb1, 0x4d, 0xaa, 0x7c, 0xd1, 0x88, 0x59, 0x30, 0x46, 0xa3, - 0x8e, 0x34, 0xe3, 0xdc, 0xbb, 0x5e, 0xaf, 0x14, 0x60, 0xcd, 0x2a, 0xfa, 0xfc, 0x0f, 0x20, 0x79, - 0x1b, 0x07, 0x4f, 0x8e, 0xac, 0x2a, 0x2b, 0x8a, 0x44, 0xa3, 0xdf, 0x3c, 0x7b, 0x60, 0x5b, 0x4a, - 0x3c, 0x5c, 0xf2, 0x31, 0xd7, 0x87, 0x38, 0xfc, 0x0b, 0x3f, 0x43, 0xe7, 0x04, 0x6b, 0x8e, 0xaf, - 0xfe, 0x14, 0x29, 0xc0, 0x79, 0x79, 0xc1, 0x81, 0x7a, 0xd6, 0x71, 0xc2, 0xcc, 0xf0, 0xf3, 0x80, - 0xf0, 0xa9, 0xc9, 0xd1, 0x38, 0xe1, 0x78, 0xd1, 0x8d, 0x1f, 0x11, 0x38, 0x78, 0x85, 0x00, 0x21, - 0x3d, 0x2c, 0xf0, 0x8c, 0xb6, 0xff, 0x4d, 0x3b, 0xe1, 0x57, 0x88, 0x1f, 0x6d, 0xbe, 0xdc, 0x38, - 0xc6, 0x00, 0x0a, 0x22, 0x0d, 0xa2, 0x9a, 0x81, 0xda, 0x66, 0x7a, 0xb6, 0xf3, 0x70, 0x77, 0xe3, - 0xab, 0x9f, 0x8e, 0xff, 0x07, 0xbe, 0xfe, 0xef, 0x1c, 0x66, 0x40, 0x48, 0xaf, 0xb6, 0xf8, 0x69, - 0x40, 0x03, 0x5f, 0x83, 0x9a, 0x29, 0xb9, 0x80, 0xfe, 0x89, 0xd3, 0xac, 0x7b, 0x93, 0x4e, 0x34, - 0xf9, 0xc1, 0xdb, 0xa5, 0x8d, 0xb3, 0x86, 0xa4, 0x43, 0xf0, 0xe2, 0x80, 0x34, 0x7c, 0xb4, 0x03, - 0xf9, 0x7f, 0xc6, 0x6d, 0xac, 0x74, 0xf4, 0xda, 0x6d, 0x1c, 0x4f, 0x4a, 0x83, 0xe5, 0xb1, 0xf4, - 0xd3, 0xe1, 0x85, 0x00, 0x03, 0x91, 0x31, 0xc6, 0x53, 0x01, 0x5a, 0x29, 0xff, 0xfe, 0x5f, 0xa6, - 0x9c, 0x13, 0x13, 0xf6, 0x0b, 0x1c, 0x6c, 0x90, 0x2f, 0xcc, 0x20, 0x3f, 0xb1, 0x68, 0x00, 0x3f, - 0x13, 0x01, 0x1a, 0x5b, 0x01, 0x1a, 0x59, 0x94, 0x61, 0xac, 0x00, 0x48, 0xc8, 0x02, 0xd2, 0x8f, - 0xf5, 0xa6, 0xfb, 0xc2, 0xda, 0x64, 0xb7, 0xf7, 0xbe, 0x4e, 0x3f, 0xa8, 0xbb, 0x07, 0xdc, 0xda, - 0x2d, 0x97, 0x64, 0xda, 0x55, 0xe2, 0x0e, 0x07, 0x70, 0x00, 0xd4, 0x9c, 0x00, 0x08, 0xa8, 0x77, - 0x0d, 0x49, 0xd5, 0x3c, 0x1c, 0x7e, 0x4e, 0x53, 0x3d, 0xe2, 0x22, 0x44, 0x7c, 0xc2, 0x6e, 0xbc, - 0x45, 0x7b, 0xc4, 0x89, 0xa1, 0x92, 0x25, 0x67, 0x9b, 0xe6, 0x89, 0x12, 0x13, 0x15, 0x35, 0xda, - 0x92, 0xff, 0x2d, 0x6f, 0xc4, 0xc4, 0xea, 0xab, 0x55, 0x8a, 0xe6, 0x13, 0x55, 0xc3, 0xd8, 0x00, - 0x17, 0x0d, 0x75, 0xca, 0x50, 0xdb, 0x0d, 0xf7, 0xca, 0x20, 0x7a, 0xba, 0xa4, 0xa8, 0xb9, 0x43, - 0xa9, 0x43, 0x74, 0x1d, 0xb9, 0xf9, 0x62, 0xeb, 0x2d, 0x66, 0xee, 0xa8, 0x49, 0x38, 0x55, 0x9b, - 0xac, 0x7f, 0x0e, 0xe0, 0x07, 0xb7, 0x90, 0x8e, 0x58, 0xad, 0xd0, 0x7f, 0xdf, 0x32, 0x09, 0x5f, - 0x2b, 0xee, 0x9e, 0xd4, 0x8c, 0xbf, 0x62, 0x3d, 0x9e, 0x28, 0x66, 0xe2, 0x5e, 0x4a, 0x3f, 0x1e, - 0x85, 0x7e, 0x6d, 0xd7, 0x7c, 0x14, 0x1c, 0x70, 0xe2, 0x80, 0x26, 0x31, 0xae, 0xe2, 0x92, 0x93, - 0x3e, 0x33, 0x1b, 0xc7, 0x2a, 0x7e, 0x28, 0x6e, 0xf4, 0xd3, 0x50, 0xa5, 0x32, 0xba, 0x65, 0x03, - 0x54, 0xe3, 0xa2, 0x29, 0x86, 0x60, 0x7b, 0xf7, 0xca, 0x9b, 0x8f, 0x0e, 0xe0, 0xa4, 0x0a, 0x21, - 0x49, 0x54, 0xfe, 0x66, 0x5a, 0x07, 0x15, 0xd8, 0xd4, 0x76, 0x2a, 0xec, 0x5c, 0xa5, 0x9d, 0xe7, - 0xf3, 0x22, 0xf0, 0xbd, 0x46, 0x00, 0x02, 0x87, 0x07, 0x0b, 0xe0, 0x06, 0x6e, 0x2f, 0x54, 0x4c, - 0xfe, 0xb7, 0xc9, 0xd4, 0xbe, 0xcb, 0xa8, 0xbc, 0x5f, 0x4f, 0x87, 0x54, 0x02, 0x42, 0x61, 0x6e, - 0x77, 0xb0, 0x21, 0xcd, 0xc7, 0x0d, 0x0a, 0xb2, 0x9c, 0xe4, 0x65, 0xb7, 0xae, 0x39, 0x38, 0xe4, - 0x77, 0xc7, 0x37, 0x74, 0xc6, 0x82, 0x88, 0xd9, 0x02, 0xf6, 0xe6, 0xbf, 0x04, 0x21, 0x49, 0xe1, - 0x80, 0x7a, 0x94, 0x40, 0x7b, 0xb3, 0x4a, 0xd0, 0x90, 0x00, 0x21, 0x83, 0xc2, 0xe5, 0x80, 0x19, - 0xc7, 0x8b, 0xf8, 0x32, 0x60, 0x88, 0x7f, 0x04, 0x7d, 0x55, 0xe2, 0x39, 0x2e, 0xff, 0xb8, 0x3b, - 0xe1, 0xf3, 0x11, 0xdc, 0x57, 0xb4, 0x22, 0x20, 0x40, 0x40, 0x95, 0x59, 0x74, 0x46, 0x07, 0xd9, - 0x55, 0x5f, 0x82, 0x63, 0xe9, 0x0c, 0x63, 0xb4, 0x93, 0xfc, 0x7e, 0x31, 0x46, 0x39, 0x83, 0x26, - 0xa1, 0x97, 0x66, 0x5d, 0xac, 0x5f, 0x13, 0x04, 0xdb, 0x4d, 0xf9, 0x72, 0xf5, 0xc7, 0x19, 0xed, - 0xaa, 0xaa, 0x0d, 0x6b, 0x5f, 0x27, 0x53, 0x67, 0xbe, 0xab, 0xe2, 0xcb, 0xcb, 0xf2, 0xe1, 0x37, - 0xcc, 0x7d, 0x4d, 0x98, 0x89, 0x86, 0x26, 0x2b, 0xf0, 0x88, 0x41, 0xd2, 0x44, 0x37, 0x89, 0x13, - 0xcc, 0x27, 0x89, 0xe7, 0x82, 0x82, 0x60, 0xc0, 0x77, 0x8e, 0x1b, 0xc5, 0x6e, 0x8c, 0x57, 0x82, - 0xbb, 0xbd, 0xd2, 0x7b, 0xda, 0x8b, 0x8e, 0xfe, 0x08, 0x43, 0x23, 0x48, 0x07, 0x76, 0xa1, 0xc7, - 0x95, 0xdc, 0xaa, 0x02, 0x54, 0xc1, 0xee, 0x4b, 0x82, 0xf8, 0x71, 0x30, 0x12, 0x9e, 0x00, 0x06, - 0x20, 0x17, 0x0d, 0x08, 0xac, 0x90, 0x0a, 0xa2, 0x84, 0x4a, 0x5b, 0x3b, 0xa5, 0x8c, 0x47, 0x40, - 0x58, 0x02, 0x13, 0xde, 0xdf, 0x0e, 0xe0, 0x0e, 0x29, 0x05, 0x2d, 0xe3, 0x21, 0xbb, 0xfd, 0x97, - 0x6c, 0xa2, 0x71, 0xbe, 0xb1, 0xc6, 0xda, 0x65, 0xef, 0x67, 0xbd, 0xdd, 0xbe, 0x31, 0xa4, 0x81, - 0xeb, 0xf4, 0xa7, 0xd3, 0x8b, 0xc3, 0xac, 0xa0, 0x0e, 0x51, 0x80, 0xb0, 0xbb, 0x8f, 0x8e, 0xb4, - 0xe3, 0x7c, 0x0e, 0xfe, 0x99, 0x5d, 0xcc, 0xa9, 0xb9, 0x44, 0x3e, 0x8c, 0x3a, 0x8f, 0x87, 0x10, - 0xbe, 0x1f, 0x5c, 0x55, 0x5c, 0x31, 0x22, 0x32, 0x6d, 0xb7, 0xee, 0xb8, 0x0a, 0x10, 0x16, 0x23, - 0x4e, 0xee, 0xfd, 0x3d, 0xc1, 0x58, 0x35, 0x25, 0x3d, 0xcc, 0x55, 0x9d, 0xf5, 0xcc, 0xc5, 0x30, - 0x71, 0x0b, 0x00, 0x50, 0x00, 0x2a, 0x38, 0x0d, 0xa4, 0xdb, 0x4f, 0xe1, 0xdc, 0x03, 0x13, 0x13, - 0x4e, 0xc6, 0xef, 0xe9, 0x4e, 0xdd, 0xe2, 0x1f, 0xb7, 0xbd, 0xc6, 0x99, 0xf5, 0x75, 0xf8, 0x75, - 0x10, 0x00, 0x51, 0x6e, 0x89, 0x88, 0x7e, 0x50, 0xff, 0xc9, 0xcb, 0xf4, 0xe1, 0xae, 0x0e, 0x2b, - 0xb6, 0x5d, 0x8e, 0x5f, 0x6e, 0xb2, 0x9b, 0xa3, 0xd4, 0x68, 0xd4, 0xd3, 0x68, 0xff, 0xfd, 0xd4, - 0x45, 0x81, 0x79, 0x1b, 0xd0, 0x5f, 0xab, 0x90, 0x30, 0xfb, 0xbe, 0x6d, 0xdf, 0xe2, 0xc8, 0xf7, - 0x77, 0x77, 0x93, 0x93, 0x7b, 0xae, 0x14, 0x3f, 0x33, 0x09, 0x2f, 0x35, 0x5d, 0x09, 0xb0, 0x5f, - 0xac, 0xdf, 0x04, 0xb6, 0x1c, 0xcc, 0x69, 0xa9, 0x3f, 0x97, 0x89, 0x29, 0xaa, 0xac, 0x44, 0xe4, - 0x89, 0x73, 0xf8, 0x81, 0x17, 0x15, 0xdc, 0x51, 0x9c, 0x34, 0x7f, 0x08, 0xe5, 0xe8, 0x3b, 0xff, - 0xab, 0xde, 0x27, 0x81, 0xa4, 0x14, 0x02, 0x01, 0x55, 0x77, 0x5a, 0xab, 0xb3, 0xc4, 0x9a, 0xbf, - 0x74, 0x92, 0x86, 0xe1, 0x00, 0x05, 0x7e, 0x0c, 0x99, 0x5c, 0x49, 0xc8, 0x6c, 0xc5, 0xb8, 0x9f, - 0x46, 0xd1, 0xfa, 0x97, 0x76, 0xee, 0x3a, 0x5e, 0x49, 0x4f, 0x16, 0x0b, 0x02, 0xd8, 0x16, 0x28, - 0x98, 0xfa, 0xe6, 0xf0, 0xee, 0x00, 0x09, 0xe9, 0x12, 0x36, 0x17, 0x43, 0x30, 0x2f, 0x90, 0x2e, - 0x6e, 0x4e, 0xee, 0x58, 0x1a, 0xb2, 0xd6, 0xdc, 0xb4, 0xef, 0x0a, 0x2d, 0xba, 0x5a, 0xcf, 0x1a, - 0x9e, 0xe2, 0xc5, 0x3c, 0xee, 0x9c, 0x55, 0xee, 0xde, 0x02, 0x44, 0x02, 0x00, 0x34, 0x8f, 0x80, - 0x3a, 0x6c, 0x40, 0x49, 0x1b, 0x80, 0x91, 0x58, 0x09, 0x95, 0xee, 0x9c, 0x0d, 0x0e, 0x79, 0x6e, - 0xe8, 0x7b, 0x4d, 0x7b, 0xce, 0x1c, 0x2c, 0x6e, 0x56, 0x0f, 0xc1, 0xf8, 0xd4, 0x75, 0x11, 0x0e, - 0x7f, 0xba, 0x28, 0xaf, 0x0f, 0x4a, 0x04, 0x03, 0x41, 0xae, 0x0d, 0xb1, 0xfa, 0xdb, 0xfc, 0xb5, - 0x8e, 0xf0, 0x9d, 0x81, 0xd3, 0x05, 0x5d, 0xc4, 0x9e, 0xe7, 0xe1, 0x0e, 0x60, 0x00, 0xb5, 0xbc, - 0x86, 0x6a, 0x39, 0x3c, 0xbe, 0x77, 0x4d, 0x22, 0x71, 0xf1, 0xc6, 0x8c, 0xdc, 0xa2, 0x78, 0x5f, - 0x9a, 0x9c, 0x25, 0x1f, 0x13, 0x1e, 0x2c, 0xb6, 0x00, 0x53, 0x8a, 0x03, 0x30, 0x2d, 0x0a, 0xa9, - 0xdb, 0xe7, 0xc5, 0x87, 0xb0, 0x01, 0xb4, 0xd8, 0x1f, 0x32, 0x25, 0x2d, 0x7d, 0xba, 0xea, 0xed, - 0xa3, 0x10, 0xe8, 0xeb, 0xeb, 0xbc, 0xbf, 0x87, 0xdc, 0x72, 0xb8, 0xe5, 0x71, 0xaa, 0x03, 0x00, - 0x25, 0x19, 0x3d, 0xb8, 0x65, 0x18, 0x30, 0x5f, 0x10, 0xff, 0xe1, 0xbc, 0x00, 0x39, 0x3a, 0xc7, - 0x8a, 0xc1, 0x51, 0x15, 0xf6, 0x58, 0x97, 0x4f, 0xab, 0x3f, 0xd4, 0xbb, 0x2e, 0xcb, 0xb1, 0x5b, - 0x3c, 0xea, 0x0a, 0xc3, 0x0c, 0x97, 0x4d, 0xb9, 0xc0, 0xe8, 0x5f, 0xd1, 0x92, 0x7a, 0x1c, 0x89, - 0x00, 0x33, 0x3f, 0x05, 0x95, 0xab, 0xc0, 0xff, 0x8f, 0xff, 0x13, 0xd6, 0x77, 0x9f, 0x75, 0xb6, - 0x09, 0x20, 0x02, 0xb6, 0x5a, 0xe6, 0x8f, 0xe1, 0x1e, 0x41, 0x15, 0x6e, 0xb9, 0x7a, 0x62, 0xb3, - 0xf1, 0x51, 0x76, 0xaa, 0xda, 0xa0, 0x92, 0xf0, 0x9d, 0x6b, 0xc4, 0xc8, 0x3f, 0x2d, 0x77, 0x5d, - 0xde, 0xff, 0x75, 0x26, 0x65, 0x84, 0x22, 0x76, 0xd8, 0xcf, 0xd2, 0xb9, 0xf8, 0xb0, 0xde, 0x00, - 0xcc, 0x89, 0x71, 0xb8, 0xb7, 0xff, 0xab, 0xce, 0x31, 0x2e, 0xc1, 0xdb, 0xd9, 0x7a, 0x6f, 0x6d, - 0x0a, 0xb2, 0x8a, 0xcb, 0x31, 0x5b, 0x13, 0xea, 0x2a, 0xc1, 0xad, 0x8a, 0x62, 0xda, 0x78, 0x44, - 0x20, 0x36, 0x19, 0xf0, 0x75, 0x25, 0xac, 0xac, 0x5e, 0x24, 0x7c, 0x48, 0xe4, 0x4d, 0xe5, 0xdd, - 0xd8, 0xa0, 0xd9, 0x9c, 0x3c, 0x78, 0x78, 0xb5, 0x4f, 0x01, 0xc0, 0x70, 0x54, 0x0a, 0x24, 0x00, - 0x51, 0x00, 0xfc, 0x3a, 0x7f, 0x62, 0x03, 0xf2, 0x95, 0xdc, 0x36, 0xe0, 0x10, 0x59, 0xf1, 0x58, - 0x81, 0x34, 0xd3, 0x77, 0xf0, 0x8a, 0xa9, 0x9e, 0xc0, 0x56, 0x6f, 0x63, 0x3b, 0x12, 0x4d, 0x31, - 0x98, 0xff, 0x33, 0x00, 0x1f, 0xc0, 0xe8, 0xa8, 0xdd, 0xbe, 0x3a, 0xa7, 0x78, 0x34, 0xa5, 0x35, - 0x4d, 0x31, 0x77, 0x25, 0x1f, 0xe1, 0xb7, 0x00, 0x13, 0xe4, 0x58, 0x95, 0x7b, 0x09, 0xbe, 0xdb, - 0xfa, 0x93, 0xe9, 0xd3, 0x55, 0x18, 0x16, 0xdd, 0x96, 0xfe, 0x99, 0x69, 0x0f, 0x28, 0x01, 0x13, - 0xfa, 0x92, 0x17, 0x83, 0x9b, 0xe6, 0x48, 0x23, 0x42, 0x3c, 0x18, 0x62, 0x83, 0x92, 0x8d, 0x82, - 0x71, 0xeb, 0xab, 0xe2, 0xaf, 0xa1, 0x5f, 0xc5, 0x49, 0x60, 0x73, 0x71, 0xeb, 0xc7, 0x23, 0x98, - 0x30, 0x03, 0x42, 0xc0, 0xf2, 0xa0, 0xbe, 0xb6, 0x61, 0x00, 0xbf, 0xa5, 0x7a, 0xbf, 0x8e, 0x07, - 0x90, 0x28, 0x87, 0x63, 0x70, 0x00, 0x08, 0x02, 0x71, 0x01, 0x40, 0xca, 0x1c, 0x90, 0x12, 0xa9, - 0x51, 0x9a, 0xeb, 0x3d, 0xb9, 0xdf, 0xc6, 0xe0, 0xee, 0xc0, 0xc0, 0x70, 0x27, 0xed, 0x58, 0xcb, - 0xb4, 0xe1, 0xb2, 0x40, 0x0a, 0xb1, 0xfa, 0x1a, 0x31, 0x4e, 0xae, 0xbe, 0x25, 0xe7, 0xf8, 0x81, - 0x81, 0xdf, 0xe5, 0x52, 0xae, 0xae, 0xca, 0xcd, 0x0b, 0x0a, 0x70, 0x95, 0xf7, 0xbd, 0xd4, 0x44, - 0x5e, 0xb5, 0x5a, 0xcd, 0xdd, 0xbd, 0x7c, 0x56, 0xa5, 0xf1, 0x5c, 0xd9, 0xf8, 0x9e, 0x48, 0x2d, - 0xa5, 0x6b, 0xc9, 0xab, 0xdf, 0x29, 0x55, 0x7f, 0x31, 0x35, 0x5f, 0x05, 0x95, 0x61, 0xa6, 0x19, - 0x6e, 0x78, 0xc2, 0xd9, 0x61, 0x35, 0x93, 0x93, 0xbe, 0x26, 0x3d, 0x75, 0xec, 0xec, 0x97, 0x83, - 0x4d, 0xfe, 0xa2, 0x71, 0x67, 0x3e, 0x7d, 0xa5, 0x27, 0x05, 0x16, 0x9a, 0x8b, 0xe2, 0x4e, 0x09, - 0xe7, 0x32, 0x5c, 0xf0, 0x0c, 0x81, 0x57, 0xc2, 0xaf, 0x70, 0x6c, 0xbb, 0x01, 0x43, 0x15, 0xbb, - 0x8a, 0xdc, 0xf9, 0xe1, 0x10, 0x1d, 0x03, 0x4c, 0x0f, 0xf9, 0x28, 0xa9, 0xe1, 0xc3, 0x7a, 0x52, - 0x41, 0xc8, 0xab, 0xe8, 0x78, 0x32, 0xc1, 0x9e, 0x01, 0x85, 0x81, 0xe0, 0x69, 0x02, 0x52, 0xdb, - 0x0f, 0x71, 0xf9, 0x2a, 0x54, 0x42, 0x05, 0x09, 0x1b, 0x81, 0xc7, 0x15, 0xdb, 0x06, 0xd2, 0x0f, - 0x05, 0xd6, 0x30, 0x54, 0x4d, 0x23, 0xf0, 0x50, 0x03, 0xc4, 0x29, 0x20, 0xc0, 0x95, 0xeb, 0x35, - 0x9f, 0xc3, 0xc7, 0x0f, 0x1c, 0x76, 0x6f, 0x89, 0x74, 0x30, 0xe0, 0x72, 0x07, 0x3e, 0xb1, 0x16, - 0x8b, 0x19, 0x33, 0x12, 0x87, 0x8c, 0x38, 0x91, 0xc7, 0xc2, 0x2f, 0x8b, 0x89, 0xf3, 0xf8, 0xe2, - 0xb6, 0x67, 0xab, 0xf0, 0x52, 0x04, 0x11, 0xa6, 0x38, 0x01, 0x61, 0x25, 0x42, 0xc1, 0x8f, 0x1e, - 0x37, 0x59, 0x81, 0xf8, 0x06, 0xa7, 0x38, 0x2b, 0x25, 0x07, 0x21, 0x5b, 0xf8, 0x70, 0x6a, 0xa8, - 0x5d, 0xc9, 0x05, 0x86, 0xe4, 0x52, 0x29, 0x6e, 0xdd, 0x59, 0xe3, 0xf0, 0x73, 0x0a, 0x4e, 0x70, - 0xb6, 0x70, 0xe1, 0x6c, 0x56, 0x2b, 0x15, 0x8a, 0xcf, 0x01, 0x8a, 0x33, 0x15, 0x10, 0xc4, 0xad, - 0xe7, 0x36, 0x07, 0x59, 0x29, 0xe1, 0xc7, 0xf8, 0x58, 0xe1, 0xd0, 0x31, 0x57, 0x1c, 0x1f, 0xf3, - 0x3b, 0xe8, 0x31, 0x11, 0xe2, 0x86, 0xd8, 0x50, 0xe3, 0x0e, 0x72, 0x13, 0x15, 0xfc, 0x92, 0xea, - 0xd5, 0x71, 0x34, 0x98, 0x43, 0x26, 0xc5, 0xe6, 0xce, 0x34, 0x04, 0x4c, 0x2f, 0x1e, 0x4d, 0xee, - 0x76, 0x7d, 0xf9, 0x23, 0xc4, 0x89, 0x2b, 0x76, 0xf9, 0xb8, 0xf6, 0x5e, 0x71, 0x6b, 0xa6, 0x3a, - 0x95, 0xee, 0x10, 0xd4, 0x4c, 0xc6, 0x9b, 0xf8, 0x05, 0x04, 0x22, 0x24, 0xa4, 0xc2, 0x66, 0xb5, - 0x58, 0x72, 0x60, 0x00, 0x27, 0x89, 0x61, 0xd2, 0x11, 0xf1, 0x7f, 0xe3, 0x7c, 0x1a, 0x5f, 0x0a, - 0xf1, 0x9f, 0xe5, 0x7f, 0x7b, 0x63, 0x8a, 0xf8, 0x53, 0x21, 0x84, 0x22, 0x72, 0x0d, 0x72, 0xcf, - 0x78, 0xef, 0x03, 0xf9, 0x8f, 0x5b, 0xd8, 0x0d, 0x90, 0x80, 0xd3, 0x16, 0x18, 0x93, 0x91, 0x44, - 0x2e, 0xa4, 0xc9, 0x2d, 0xb6, 0x6c, 0xcf, 0xe3, 0xb1, 0x4b, 0x0c, 0x35, 0x83, 0x41, 0x68, 0x04, - 0x77, 0x45, 0x2c, 0x1d, 0xbb, 0xea, 0x55, 0x94, 0xb5, 0xc6, 0xb8, 0x30, 0x0c, 0x0d, 0x2a, 0xa8, - 0xba, 0xaa, 0xaa, 0xda, 0x59, 0x33, 0xb8, 0xc5, 0x0c, 0xcd, 0xb9, 0x6b, 0x6c, 0xbb, 0x9d, 0xdc, - 0x38, 0xa0, 0x04, 0x67, 0xb7, 0x24, 0x6e, 0xdf, 0xc9, 0xd3, 0x4d, 0x38, 0xb6, 0xcf, 0x6c, 0x7a, - 0x1a, 0xec, 0x3d, 0x1a, 0x68, 0x78, 0xa1, 0x20, 0xbe, 0xd2, 0xbf, 0xa1, 0xbc, 0x02, 0x8a, 0x46, - 0x0c, 0xd4, 0x5f, 0x43, 0x7f, 0xab, 0xce, 0x1a, 0x36, 0x20, 0xf4, 0x20, 0xf8, 0xf3, 0xc9, 0x47, - 0x07, 0x0f, 0x8c, 0xf1, 0xf5, 0x9d, 0xa0, 0xeb, 0xee, 0xe7, 0xbc, 0x21, 0x3c, 0xc2, 0x2a, 0x17, - 0x1b, 0xe5, 0xfd, 0x62, 0x7f, 0x1a, 0xec, 0x10, 0x84, 0x02, 0x84, 0xac, 0x80, 0x0d, 0x5c, 0x80, - 0xab, 0xe0, 0x00, 0x67, 0x06, 0xaf, 0x19, 0x6c, 0x3c, 0xdf, 0x85, 0xfa, 0xc9, 0x40, 0x06, 0x85, - 0x04, 0xf0, 0x00, 0x2f, 0x87, 0x80, 0x0f, 0x2c, 0x00, 0x67, 0x80, 0x3d, 0x4c, 0x61, 0xb2, 0x71, - 0xd0, 0xad, 0x7a, 0x63, 0x30, 0x5a, 0x61, 0x01, 0x01, 0x48, 0xba, 0xa9, 0x92, 0x3e, 0x71, 0xcb, - 0x8c, 0xb6, 0x25, 0xe2, 0xb3, 0xc6, 0x17, 0xdf, 0xd9, 0x91, 0x1c, 0xe1, 0x28, 0x35, 0x1c, 0x0f, - 0x2c, 0x64, 0xa0, 0xe5, 0x47, 0x78, 0x16, 0x01, 0x80, 0x53, 0x63, 0xa7, 0x95, 0xbb, 0x31, 0x03, - 0xd6, 0xa3, 0xfc, 0xbc, 0x3d, 0xff, 0x3c, 0xe2, 0xe3, 0x0a, 0x0a, 0xc4, 0x74, 0xf1, 0x00, 0xa6, - 0x78, 0xcb, 0x63, 0xaa, 0x5b, 0xea, 0xb4, 0xe7, 0x80, 0x30, 0x2e, 0x77, 0x07, 0x22, 0x41, 0x51, - 0x49, 0xcb, 0x49, 0xdc, 0xde, 0x2e, 0xea, 0xf7, 0x21, 0x9e, 0x13, 0xaa, 0xaa, 0xaa, 0xad, 0xf4, - 0x47, 0xae, 0x24, 0xea, 0xbd, 0x12, 0xa1, 0xae, 0x43, 0xee, 0xeb, 0x93, 0x6a, 0xbe, 0x6e, 0xef, - 0xe6, 0x14, 0xee, 0xff, 0x04, 0xf7, 0x9e, 0x11, 0x5b, 0xbb, 0x6e, 0x49, 0xc8, 0x26, 0x6f, 0xb0, - 0xc2, 0x81, 0x26, 0x25, 0xfc, 0xd4, 0xd3, 0xd3, 0xf6, 0xed, 0x17, 0x4b, 0xbb, 0x51, 0x22, 0xc3, - 0x01, 0x90, 0x89, 0x1d, 0xbd, 0xe6, 0xc1, 0x7a, 0x9b, 0x0b, 0xf0, 0x8c, 0x29, 0x38, 0x38, 0x28, - 0x62, 0xe2, 0x9a, 0x49, 0x0e, 0x29, 0x33, 0x85, 0x17, 0xcb, 0xd1, 0x1e, 0xe4, 0x40, 0x2f, 0x02, - 0x0c, 0x61, 0x10, 0x31, 0x72, 0xdb, 0xaa, 0xd2, 0x58, 0xb6, 0xcc, 0x71, 0x1a, 0xbf, 0x02, 0x44, - 0x15, 0xdd, 0xcb, 0x9d, 0x56, 0xc5, 0xea, 0xaa, 0xd8, 0x68, 0x85, 0x00, 0x4c, 0xfa, 0xdc, 0x6b, - 0x5f, 0xf6, 0xfd, 0xb1, 0x56, 0x31, 0x4e, 0x02, 0x80, 0x32, 0x14, 0x20, 0x80, 0xe1, 0xc0, 0x70, - 0x32, 0xa1, 0x92, 0x56, 0x62, 0x2e, 0x56, 0xb8, 0xac, 0x99, 0x4c, 0x1f, 0x0b, 0x63, 0x41, 0x8c, - 0x2b, 0x0c, 0x04, 0x01, 0x51, 0x40, 0xc1, 0x85, 0xc5, 0x05, 0xca, 0x19, 0xe1, 0xe0, 0x50, 0xe0, - 0xd5, 0x50, 0x47, 0xd8, 0x4b, 0x14, 0x4f, 0x78, 0xd5, 0x07, 0xae, 0x18, 0x12, 0x0a, 0x88, 0xcc, - 0x5e, 0x29, 0x26, 0x57, 0xa9, 0x62, 0x4e, 0xfa, 0xcb, 0x6c, 0x6d, 0x45, 0xf1, 0x0c, 0x23, 0x0a, - 0x54, 0xca, 0x84, 0xde, 0x4e, 0xca, 0x39, 0x04, 0x6d, 0x50, 0xb4, 0x6d, 0xae, 0xc9, 0x3c, 0x0e, - 0x1e, 0x60, 0x3e, 0xe8, 0xdc, 0x18, 0xf9, 0x81, 0xcf, 0x12, 0x10, 0xee, 0x0d, 0xcb, 0x62, 0xfc, - 0x44, 0x95, 0x81, 0x0d, 0x93, 0x21, 0x76, 0xcf, 0x0a, 0x82, 0xc4, 0xf8, 0x64, 0xb4, 0xad, 0x1c, - 0x3c, 0x2c, 0x51, 0x2f, 0x83, 0x88, 0xfc, 0xaa, 0xd7, 0xfa, 0x0f, 0x5f, 0x11, 0x84, 0x41, 0x84, - 0x29, 0xc9, 0xbd, 0xc6, 0x72, 0x6b, 0x55, 0x89, 0x04, 0x75, 0xd7, 0xab, 0x90, 0x93, 0xb3, 0x51, - 0x21, 0x45, 0x0c, 0x68, 0xff, 0xeb, 0xf8, 0x10, 0x44, 0x85, 0x35, 0x8b, 0xab, 0xa8, 0xad, 0xe2, - 0xb1, 0x5e, 0xef, 0x97, 0x04, 0x30, 0x57, 0x0a, 0x82, 0xa3, 0xfc, 0x7e, 0x3f, 0x09, 0xff, 0x57, - 0x56, 0x10, 0xf6, 0x05, 0x8d, 0xf7, 0xe9, 0xa7, 0xa7, 0xfd, 0xb6, 0xd2, 0xfd, 0x34, 0xf8, 0x77, - 0x00, 0x0f, 0xb1, 0x16, 0x92, 0x28, 0x44, 0x13, 0xe6, 0x4a, 0xa7, 0xdb, 0x6f, 0x77, 0x12, 0x3c, - 0x4b, 0x11, 0xee, 0x1d, 0xf9, 0x05, 0xc4, 0x1e, 0x12, 0xd0, 0x82, 0x97, 0x2f, 0xed, 0xc3, 0x6e, - 0x00, 0xc4, 0x01, 0x87, 0xa6, 0xe5, 0x11, 0xde, 0xdf, 0xfb, 0x21, 0x58, 0x57, 0x8a, 0x16, 0x62, - 0xd9, 0x2b, 0xc3, 0xb7, 0x45, 0x6f, 0xa7, 0xdb, 0x87, 0x58, 0x90, 0x01, 0xde, 0x6e, 0x30, 0xa1, - 0x45, 0x6f, 0xcf, 0x2f, 0x1f, 0xfb, 0xe2, 0x7f, 0xb6, 0xd9, 0x46, 0x6b, 0xfe, 0x24, 0x48, 0x50, - 0xc4, 0xa1, 0x56, 0x73, 0x9d, 0x29, 0xf9, 0x72, 0x8a, 0xf5, 0x09, 0xce, 0x3c, 0xff, 0x7f, 0x17, - 0x17, 0x84, 0xb2, 0x22, 0x42, 0xb1, 0xf2, 0x06, 0x10, 0x10, 0x30, 0x8d, 0xc3, 0xe8, 0x08, 0x3b, - 0x5a, 0xf2, 0xaa, 0x5a, 0x5b, 0x7d, 0xd8, 0xb6, 0xf3, 0xc7, 0x93, 0xee, 0x64, 0x95, 0x90, 0x52, - 0xd0, 0x1d, 0x7c, 0x98, 0x70, 0x5a, 0xf1, 0x10, 0xfc, 0x2d, 0xa6, 0x56, 0x2a, 0x62, 0x84, 0x94, - 0xfd, 0x0e, 0x06, 0xdc, 0x98, 0x93, 0xe2, 0x30, 0xe1, 0xee, 0x53, 0xea, 0xbe, 0x2b, 0x9b, 0x2a, - 0xab, 0x27, 0x05, 0xd5, 0xde, 0x4a, 0x4b, 0x26, 0x1e, 0x3c, 0xd4, 0x13, 0x37, 0x35, 0xd7, 0xe5, - 0x5c, 0x09, 0xe7, 0x83, 0xe6, 0xb9, 0xd8, 0x7c, 0xf0, 0x38, 0x46, 0x14, 0xbd, 0xec, 0xb1, 0xd7, - 0x10, 0x1a, 0x58, 0x58, 0x21, 0xbb, 0x09, 0xcb, 0x64, 0xf6, 0x2b, 0xdc, 0x6e, 0x98, 0x18, 0x42, - 0x21, 0x42, 0x16, 0x62, 0x38, 0x71, 0xc8, 0xf8, 0x80, 0x1e, 0x07, 0x38, 0xd4, 0x4b, 0xfb, 0x6c, - 0xf8, 0x30, 0x1d, 0xf8, 0xbc, 0x74, 0x0b, 0xe3, 0x10, 0xdb, 0x28, 0x00, 0x39, 0xab, 0x2e, 0x2a, - 0x90, 0xa2, 0x6a, 0x37, 0xb3, 0xfe, 0xff, 0x73, 0x26, 0xe6, 0x6f, 0xc3, 0x4e, 0x02, 0xcc, 0xd0, - 0x4e, 0x25, 0xfd, 0x92, 0x38, 0x14, 0xbf, 0x83, 0x3f, 0x77, 0x19, 0xeb, 0xc0, 0xd2, 0x08, 0x42, - 0x86, 0x15, 0xaf, 0x56, 0x9d, 0x83, 0xa1, 0x7a, 0xc0, 0x13, 0x78, 0x1d, 0x0b, 0xa1, 0x54, 0x91, - 0xe0, 0x07, 0x0e, 0x03, 0xd3, 0x80, 0x01, 0x65, 0x0a, 0x41, 0x20, 0x50, 0xaf, 0xba, 0x73, 0xdb, - 0xa3, 0x10, 0xce, 0x11, 0x12, 0x14, 0x29, 0x0e, 0x1a, 0xa6, 0x00, 0x47, 0xbf, 0xb4, 0xe9, 0xb2, - 0xe4, 0xab, 0x02, 0x4d, 0xa5, 0xf5, 0xdb, 0x82, 0x1c, 0xb7, 0xc1, 0x69, 0xa8, 0x8d, 0x78, 0x10, - 0x43, 0x23, 0x39, 0x55, 0x7a, 0xbd, 0x20, 0xd3, 0xb6, 0x8d, 0x43, 0xf4, 0xac, 0xfa, 0xf6, 0x4b, - 0x32, 0xdc, 0x6d, 0x06, 0x94, 0xcf, 0x0a, 0x65, 0x54, 0xa8, 0xef, 0xf5, 0x13, 0xc2, 0xec, 0xac, - 0x78, 0x28, 0x2f, 0x0a, 0x88, 0xa0, 0xdf, 0x01, 0xd4, 0x60, 0x1d, 0x61, 0x87, 0x4c, 0x50, 0xa5, - 0xeb, 0x92, 0xbc, 0x40, 0x90, 0xf6, 0x3a, 0x75, 0xab, 0x4b, 0x4c, 0x8c, 0x25, 0xb1, 0xe5, 0xef, - 0xf8, 0x76, 0x93, 0xb6, 0xbe, 0x53, 0xf1, 0x03, 0x82, 0xb0, 0xef, 0x66, 0x4f, 0x68, 0x9c, 0xa7, - 0x73, 0x30, 0xfa, 0xe3, 0xc5, 0x25, 0xbd, 0x32, 0xe6, 0x78, 0x07, 0x13, 0x48, 0xd8, 0xe8, 0x78, - 0xa9, 0x58, 0x8f, 0x7b, 0xb8, 0x9c, 0x4f, 0x89, 0x1b, 0x5d, 0x55, 0x55, 0x02, 0xfd, 0x0a, 0xa2, - 0x40, 0x0e, 0x4f, 0x1f, 0xc1, 0xa8, 0xd6, 0xb0, 0xee, 0x94, 0x98, 0xe4, 0x78, 0x05, 0x82, 0x60, - 0xf0, 0xb4, 0x07, 0x40, 0xbe, 0x5a, 0x8a, 0xb4, 0xf8, 0x1e, 0x44, 0x0d, 0xd5, 0x0e, 0x69, 0x47, - 0x0d, 0xc8, 0x31, 0xa8, 0x0a, 0x5f, 0xca, 0xd9, 0x71, 0xe0, 0x0e, 0x16, 0x0c, 0x76, 0xc2, 0xc1, - 0xd9, 0x20, 0x2a, 0x28, 0x0c, 0xb0, 0x01, 0xa1, 0xc8, 0x2f, 0x85, 0xc7, 0xe3, 0xb7, 0x2f, 0xf0, - 0x50, 0x20, 0x15, 0x48, 0xd2, 0x96, 0x7f, 0xb1, 0x04, 0x59, 0x25, 0xc1, 0x9c, 0xf9, 0xe7, 0xcc, - 0x06, 0x07, 0x93, 0x96, 0x11, 0xca, 0x4a, 0x71, 0x1a, 0xb8, 0x6f, 0x00, 0x72, 0x06, 0x8a, 0x2a, - 0x6d, 0xd2, 0xa4, 0x9a, 0xe9, 0x20, 0xf8, 0xfd, 0xe0, 0x68, 0x98, 0x00, 0xfb, 0x95, 0x0a, 0xd3, - 0x3c, 0x06, 0x09, 0x40, 0x0f, 0x93, 0x00, 0xfb, 0x4a, 0x32, 0xf4, 0x48, 0x8c, 0xe0, 0x1a, 0x9b, - 0x00, 0xcc, 0x01, 0x9e, 0x67, 0x7a, 0x69, 0x92, 0x88, 0xb8, 0x6d, 0x94, 0x00, 0x7a, 0xc0, 0x38, - 0xf9, 0x86, 0x13, 0xb4, 0x8d, 0x32, 0xb6, 0x4f, 0x63, 0x12, 0xc5, 0x6e, 0x4a, 0xd6, 0xba, 0xd7, - 0x7c, 0x28, 0xea, 0x62, 0x2f, 0xb5, 0x0c, 0xc2, 0x1f, 0xf9, 0x13, 0xa0, 0x30, 0xb5, 0xa6, 0x9e, - 0xd8, 0xab, 0xc0, 0x82, 0x08, 0x46, 0xde, 0xa4, 0xb3, 0x2d, 0x62, 0xe2, 0x34, 0x62, 0x92, 0xf4, - 0xd8, 0xc5, 0x6c, 0x5d, 0xd1, 0x43, 0x40, 0x26, 0x08, 0x3a, 0xb1, 0x4a, 0x32, 0xe4, 0x55, 0x1c, - 0x2e, 0x0c, 0x11, 0x73, 0xf9, 0xa8, 0xf8, 0x20, 0x08, 0x02, 0x68, 0x74, 0x41, 0xa8, 0x2c, 0xdc, - 0x8d, 0x08, 0x8d, 0x1f, 0xa0, 0xc3, 0x53, 0x4d, 0xf8, 0x81, 0x26, 0x29, 0x69, 0x76, 0x2c, 0x10, - 0x82, 0x10, 0x52, 0x49, 0x24, 0xfa, 0x44, 0xd7, 0x7e, 0x50, 0x31, 0xaf, 0x36, 0xe2, 0x47, 0x82, - 0x10, 0x42, 0x0a, 0x65, 0xc1, 0x59, 0x3b, 0x91, 0x60, 0xe9, 0x8a, 0xc5, 0x07, 0x97, 0xf7, 0x3e, - 0x63, 0xe0, 0xc6, 0xf0, 0x3c, 0x75, 0x07, 0xc4, 0x04, 0x2b, 0x7f, 0x87, 0x4d, 0x4b, 0x7c, 0x21, - 0xae, 0x3e, 0xf2, 0xf6, 0xcd, 0xfe, 0x95, 0xd7, 0x09, 0x08, 0x41, 0x8c, 0xe5, 0xf6, 0x9a, 0xf1, - 0x1a, 0x49, 0x5e, 0x4c, 0xfc, 0x87, 0xb6, 0xbf, 0x19, 0x8c, 0xab, 0xdc, 0x48, 0x9d, 0xd6, 0x78, - 0xa5, 0x3d, 0xd2, 0xf0, 0x43, 0x26, 0x0c, 0x32, 0xbe, 0xbe, 0x13, 0x9e, 0xfc, 0xbe, 0xe6, 0xe0, - 0x93, 0x8e, 0xd0, 0x58, 0x08, 0xfa, 0x47, 0x62, 0xa3, 0x0c, 0x08, 0x1a, 0x46, 0xe6, 0xe2, 0x4e, - 0x05, 0x28, 0x51, 0x9f, 0x62, 0x30, 0x63, 0xa9, 0x28, 0x05, 0xc0, 0xa7, 0x0d, 0x4a, 0x5a, 0xa0, - 0xe3, 0x81, 0xf0, 0xd4, 0x8c, 0x35, 0x1e, 0x00, 0x7c, 0xc8, 0x0c, 0x00, 0xa0, 0x13, 0x53, 0xf0, - 0x6b, 0x62, 0xba, 0x43, 0xcb, 0x0e, 0x60, 0x01, 0xa3, 0x83, 0x3d, 0x92, 0x84, 0x2a, 0x9f, 0xce, - 0x4e, 0xe5, 0xf1, 0x8b, 0x98, 0x63, 0x9b, 0x94, 0xcb, 0xb7, 0x62, 0xac, 0xe1, 0xd3, 0x80, 0x74, - 0x31, 0xc5, 0x02, 0x1e, 0xd9, 0xf6, 0xae, 0xaf, 0x8d, 0xe8, 0x40, 0x01, 0xeb, 0x86, 0x6b, 0x46, - 0xc4, 0xc7, 0xe2, 0x80, 0x82, 0xad, 0x61, 0xc5, 0x80, 0x6b, 0x6e, 0xc7, 0xe3, 0x33, 0x1b, 0x60, - 0xa0, 0x9e, 0x20, 0x75, 0xb0, 0x6e, 0x41, 0x30, 0xe2, 0x83, 0x6d, 0x1d, 0x34, 0x0e, 0xa6, 0x7e, - 0xe3, 0x16, 0xe6, 0x58, 0x58, 0xe1, 0x9f, 0xcf, 0xb4, 0xc4, 0xba, 0x24, 0x76, 0x38, 0xc6, 0x50, - 0xef, 0xe2, 0x26, 0x69, 0xc3, 0xb8, 0x01, 0xc2, 0x74, 0x55, 0x13, 0xef, 0x3f, 0xf9, 0x05, 0x0d, - 0xe3, 0x8d, 0xc5, 0x1e, 0x5a, 0xc5, 0x5a, 0x89, 0x78, 0x3b, 0x38, 0x65, 0xd9, 0x6b, 0x02, 0xc9, - 0x8b, 0xe8, 0x5b, 0x1c, 0xbf, 0x97, 0x8e, 0x0c, 0x02, 0x02, 0xcd, 0x33, 0x65, 0x6b, 0x74, 0x5d, - 0xc3, 0xff, 0x0f, 0x02, 0x04, 0x3b, 0x89, 0xd3, 0x31, 0x1b, 0x1c, 0x1d, 0x06, 0xde, 0x88, 0x69, - 0xc5, 0xc9, 0x43, 0x96, 0x01, 0xa9, 0xef, 0x33, 0x11, 0x9f, 0xe6, 0xed, 0xf8, 0x66, 0x14, 0x9b, - 0x2e, 0x0b, 0x68, 0x80, 0xf6, 0x55, 0x4e, 0x16, 0x16, 0xbe, 0x14, 0x20, 0x52, 0xd6, 0x00, 0x0f, - 0xcf, 0xb0, 0x1f, 0xe7, 0xc7, 0x8d, 0x0b, 0xaa, 0x88, 0xa6, 0x2f, 0x05, 0xc6, 0x10, 0x12, 0x1d, - 0x9b, 0x0a, 0x41, 0x60, 0x8e, 0xf7, 0xdb, 0x2c, 0x86, 0x0f, 0x73, 0x02, 0xe9, 0x87, 0x73, 0x07, - 0xbc, 0x03, 0x3f, 0xd3, 0x71, 0x57, 0xfc, 0x10, 0x08, 0x0a, 0xcd, 0x25, 0x30, 0x56, 0x38, 0xff, - 0x8c, 0x4a, 0x82, 0x64, 0x5f, 0xbf, 0x89, 0x17, 0x88, 0xec, 0x7e, 0x18, 0x12, 0x23, 0xa4, 0x2e, - 0xa4, 0x18, 0x98, 0x8b, 0xb3, 0xc3, 0x01, 0x00, 0x4a, 0x50, 0x70, 0x4f, 0x80, 0x71, 0xc6, 0xbc, - 0xa8, 0x8f, 0xc3, 0x88, 0x79, 0xe3, 0x1c, 0x10, 0x02, 0x07, 0x7e, 0x5f, 0xc4, 0x02, 0xcd, 0x65, - 0xce, 0x5e, 0xe7, 0x30, 0x2d, 0xbe, 0x02, 0xa2, 0x38, 0x91, 0x00, 0xa4, 0xc4, 0xc1, 0xf1, 0xc8, - 0x48, 0x0e, 0x0f, 0x1c, 0x3d, 0xc7, 0xb2, 0xff, 0xee, 0x2b, 0x6e, 0xb8, 0x40, 0x40, 0x2a, 0x88, - 0xe4, 0xd7, 0x54, 0xdb, 0x4c, 0x76, 0xca, 0x6b, 0x8e, 0x62, 0xf1, 0x21, 0xf1, 0x69, 0xbc, 0xac, - 0x81, 0x4d, 0x03, 0x0b, 0x4f, 0x4e, 0x2d, 0xad, 0x77, 0x39, 0x1b, 0x14, 0xb7, 0x10, 0xd3, 0xe1, - 0xae, 0x3f, 0xc6, 0x7d, 0x5d, 0xcb, 0x8d, 0xa7, 0xec, 0x8b, 0x35, 0xd7, 0x08, 0x11, 0xed, 0x79, - 0xb5, 0xfb, 0xfb, 0xdd, 0xe2, 0x38, 0x22, 0xd1, 0x83, 0xda, 0x00, 0x0d, 0x64, 0x60, 0x2c, 0x5e, - 0x48, 0xa1, 0xe2, 0x40, 0xce, 0xdc, 0x4a, 0x32, 0xb1, 0xdd, 0xfe, 0x3e, 0xcb, 0x0b, 0x1d, 0xbb, - 0x74, 0x70, 0xce, 0x3c, 0x74, 0x2c, 0x58, 0x77, 0x1f, 0x12, 0x13, 0xe3, 0xc3, 0xca, 0x18, 0x77, - 0xb4, 0xec, 0xc5, 0xb1, 0xf7, 0xf8, 0x81, 0xb0, 0x71, 0x1e, 0x0e, 0xbc, 0xef, 0xb3, 0xd3, 0x11, - 0xe9, 0x99, 0x85, 0x1d, 0x0b, 0xeb, 0x5d, 0x18, 0xca, 0xc7, 0xcd, 0x67, 0xcf, 0x1f, 0xe1, 0xec, - 0x01, 0x4a, 0x66, 0xa3, 0x07, 0x45, 0x9e, 0x67, 0xce, 0xa5, 0xb2, 0x87, 0xbe, 0x9b, 0x75, 0xab, - 0xfa, 0xfe, 0x12, 0xf9, 0x9a, 0xc0, 0xe4, 0x8c, 0x30, 0xe1, 0x6e, 0x39, 0xc3, 0x9d, 0xc9, 0x39, - 0x3f, 0x81, 0x20, 0x08, 0x03, 0x4a, 0x1b, 0x54, 0x4d, 0xfb, 0x8d, 0x4a, 0x8f, 0x3c, 0x3c, 0x70, - 0xaa, 0x75, 0x6a, 0xf5, 0xaa, 0xde, 0x21, 0x24, 0x96, 0x58, 0xb7, 0xff, 0x08, 0x87, 0x88, 0xec, - 0xd3, 0xce, 0x06, 0xa4, 0x00, 0xf8, 0xf0, 0x00, 0x10, 0x03, 0xe2, 0xa5, 0xf0, 0x70, 0x60, 0x3a, - 0xe4, 0xae, 0x5c, 0x35, 0xc0, 0x3b, 0x1f, 0x97, 0xd3, 0x86, 0xd4, 0x01, 0xb9, 0xdc, 0x2e, 0x72, - 0xf7, 0xe8, 0xdc, 0xf9, 0x90, 0x3c, 0x60, 0x0f, 0xf5, 0xe2, 0xd9, 0xbb, 0x38, 0xc4, 0x98, 0x39, - 0x0e, 0x1f, 0x42, 0xce, 0xdb, 0xfa, 0x62, 0x1e, 0x58, 0x40, 0x57, 0x83, 0x0b, 0x85, 0x5c, 0x27, - 0xab, 0xe1, 0xc1, 0x9c, 0xa9, 0x7c, 0x89, 0x1e, 0x02, 0x24, 0x14, 0x8d, 0x81, 0xc2, 0x9d, 0x49, - 0x41, 0x53, 0x80, 0x00, 0x8f, 0x15, 0x10, 0xc6, 0x58, 0xc1, 0xb0, 0x35, 0x4e, 0x47, 0xb6, 0x81, - 0x8c, 0x35, 0x17, 0xa9, 0x4c, 0xf0, 0xf3, 0xc3, 0x2c, 0x0c, 0xb0, 0x30, 0x54, 0x44, 0xa0, 0x60, - 0x71, 0x21, 0xac, 0x00, 0x04, 0x00, 0x93, 0xe6, 0x2d, 0xa6, 0x2e, 0xd9, 0xf5, 0xdf, 0x87, 0x54, - 0x00, 0x9e, 0xc3, 0x9d, 0xee, 0x41, 0xe5, 0xb4, 0x4f, 0xee, 0xb0, 0x60, 0xca, 0x50, 0x75, 0x05, - 0xb8, 0xd4, 0xf7, 0xbe, 0x92, 0x3e, 0xe5, 0xe7, 0x35, 0x5c, 0xb5, 0x97, 0x45, 0x08, 0x36, 0x76, - 0x81, 0x56, 0x1a, 0x71, 0x97, 0x4b, 0xbf, 0x82, 0x39, 0x3c, 0x3a, 0x84, 0xbb, 0x2b, 0x94, 0x97, - 0x7f, 0x8b, 0xbe, 0xfb, 0xbf, 0x8c, 0xdd, 0x53, 0x2b, 0x1f, 0x36, 0x46, 0x5d, 0x06, 0x1e, 0x74, - 0xef, 0xe1, 0x11, 0xba, 0x1a, 0xb1, 0xb1, 0xce, 0xcd, 0x57, 0x88, 0x8b, 0x11, 0x6d, 0xdc, 0x28, - 0xdd, 0x8c, 0xf5, 0x98, 0x05, 0xec, 0x5d, 0xde, 0x1a, 0xe4, 0xed, 0x3b, 0xe3, 0x85, 0x22, 0x6e, - 0xd3, 0x1c, 0x5e, 0x5d, 0x20, 0x76, 0xdf, 0xc7, 0x15, 0xf2, 0xa0, 0x63, 0xdd, 0x93, 0x19, 0x43, - 0xdf, 0x36, 0xaa, 0xbe, 0x6e, 0x6c, 0x9b, 0x8d, 0x33, 0x76, 0xf0, 0x6b, 0x2c, 0x3a, 0xc0, 0x95, - 0x9a, 0xd4, 0x21, 0x12, 0xe9, 0xf0, 0x00, 0x38, 0xc1, 0x51, 0x01, 0x29, 0x20, 0x00, 0x1a, 0x50, - 0x2a, 0xc8, 0xd4, 0xd4, 0x88, 0xff, 0x87, 0x67, 0x00, 0x57, 0xa2, 0x90, 0x9d, 0xc4, 0xef, 0x5f, - 0xef, 0xdb, 0xd5, 0x32, 0xf6, 0x78, 0xc9, 0xd9, 0xd9, 0xd9, 0xc0, 0xe3, 0x98, 0x6b, 0x19, 0x0f, - 0xb7, 0xef, 0x86, 0xb0, 0x6b, 0x61, 0x74, 0x05, 0x3f, 0x95, 0xfd, 0xf0, 0x16, 0x20, 0xe4, 0x69, - 0x09, 0x45, 0x59, 0x83, 0x54, 0x63, 0x2c, 0x6c, 0xc6, 0x61, 0x6c, 0xa4, 0x3a, 0xa1, 0x02, 0xf1, - 0xf4, 0x59, 0x96, 0x8e, 0x01, 0xc3, 0x80, 0x01, 0xe9, 0x80, 0x01, 0xe0, 0xf4, 0x00, 0x6a, 0x15, - 0x98, 0x04, 0x18, 0x01, 0xe0, 0xd6, 0xdb, 0x0b, 0x3d, 0x96, 0x16, 0x9a, 0x69, 0xc3, 0x98, 0x05, - 0xd0, 0x96, 0x43, 0x05, 0x5c, 0xb7, 0xb7, 0xbb, 0xee, 0x32, 0x1d, 0x1a, 0x79, 0x4c, 0x45, 0xc6, - 0xa4, 0xb6, 0x3e, 0x32, 0xa7, 0xef, 0xa2, 0x1f, 0x09, 0x4b, 0x20, 0xaf, 0x26, 0x4e, 0x6d, 0xb6, - 0xda, 0x69, 0x8b, 0x62, 0x71, 0xf0, 0xb4, 0xc4, 0x80, 0x01, 0x63, 0x02, 0xcb, 0x13, 0x66, 0x53, - 0x02, 0x19, 0x7b, 0x9e, 0x6c, 0xfc, 0x5f, 0x0b, 0x25, 0xe2, 0x3f, 0x1c, 0x9c, 0x61, 0x76, 0x7a, - 0x58, 0x91, 0xce, 0x73, 0x17, 0x38, 0x20, 0x08, 0x97, 0xf6, 0xca, 0x93, 0xe1, 0x10, 0x81, 0x37, - 0x71, 0x5b, 0xdb, 0x6c, 0x99, 0xf1, 0x10, 0x97, 0x65, 0xcf, 0xe3, 0xfa, 0x2b, 0x97, 0xc1, 0x18, - 0xa5, 0x5f, 0xa5, 0x0d, 0x90, 0xa0, 0x02, 0x08, 0x0f, 0xd3, 0x72, 0xf5, 0x03, 0x56, 0x07, 0xcf, - 0x91, 0x80, 0xa6, 0x16, 0x18, 0xd7, 0x6b, 0x9d, 0xb5, 0xe5, 0xb5, 0x57, 0x05, 0x0d, 0x7d, 0xd1, - 0x4c, 0x6b, 0xcb, 0x0b, 0x1a, 0x8a, 0x37, 0xa8, 0xa0, 0x90, 0xa2, 0xd8, 0xfe, 0x97, 0x49, 0xde, - 0xff, 0x0b, 0x47, 0x2b, 0xe5, 0x08, 0x54, 0xc7, 0x08, 0x9e, 0x38, 0x10, 0x9e, 0x0c, 0xf0, 0x61, - 0x31, 0xe2, 0xb8, 0xae, 0xf2, 0x75, 0xef, 0x8c, 0xa0, 0x4d, 0x99, 0x8e, 0xa3, 0x06, 0x32, 0xd1, - 0x82, 0x9c, 0x92, 0x2d, 0x8f, 0x4e, 0x1f, 0x50, 0x35, 0xc2, 0xe3, 0xc0, 0x03, 0x9c, 0x09, 0x03, - 0x27, 0x78, 0x86, 0x8a, 0x17, 0xba, 0x4e, 0xab, 0x0c, 0xf9, 0x3d, 0x88, 0x70, 0x3b, 0x6a, 0x7b, - 0x9e, 0x3c, 0x9c, 0xd0, 0x5e, 0x96, 0x00, 0xe4, 0x35, 0xb4, 0xda, 0x79, 0x0f, 0x3d, 0xd1, 0xe1, - 0x02, 0x9c, 0x60, 0xa5, 0xc3, 0x59, 0xba, 0x91, 0xdb, 0x4f, 0xdd, 0x3d, 0x3c, 0x5f, 0xcd, 0x98, - 0x30, 0x1a, 0xf8, 0x47, 0x64, 0xc1, 0x88, 0xa4, 0x2c, 0xca, 0x83, 0x6a, 0x8d, 0x81, 0x00, 0x43, - 0xef, 0x40, 0x2f, 0x13, 0x76, 0xa9, 0x12, 0x18, 0xfe, 0x7c, 0x12, 0x72, 0x09, 0x55, 0xfc, 0x82, - 0xab, 0x52, 0xc1, 0x88, 0x44, 0x12, 0xc2, 0x01, 0x15, 0x43, 0xa0, 0x00, 0x29, 0x72, 0x42, 0xc7, - 0x12, 0xa4, 0xa6, 0xcb, 0x96, 0x31, 0x78, 0x28, 0xea, 0x06, 0x53, 0x14, 0x98, 0x81, 0x00, 0xa8, - 0xa3, 0x90, 0x17, 0x23, 0x07, 0x00, 0x7c, 0x6e, 0xdb, 0x66, 0xf0, 0x76, 0xf6, 0x42, 0xf0, 0x07, - 0x4a, 0x1b, 0x46, 0x00, 0x12, 0xad, 0x68, 0x61, 0x6d, 0xb2, 0x43, 0xff, 0xdb, 0x09, 0x60, 0x2c, - 0xb5, 0x42, 0x58, 0x0d, 0x7d, 0x73, 0x16, 0x17, 0xe3, 0x58, 0x9e, 0xf1, 0x2c, 0x1c, 0xc8, 0x96, - 0x0c, 0xe7, 0x62, 0xb7, 0x0a, 0x70, 0x73, 0xe7, 0x53, 0x4f, 0xf8, 0x6b, 0x00, 0x8f, 0x6b, 0x21, - 0x8e, 0x87, 0x73, 0x73, 0xab, 0xaf, 0xd7, 0xb4, 0xda, 0x8e, 0xa7, 0x93, 0x83, 0xee, 0x59, 0x67, - 0x7c, 0x7e, 0xf8, 0xca, 0xd6, 0x21, 0xcd, 0x28, 0x83, 0xce, 0xe7, 0x0f, 0xd6, 0xb4, 0x8b, 0x82, - 0xb2, 0xc1, 0xf8, 0x29, 0x13, 0x5d, 0xf6, 0xbf, 0x48, 0x1c, 0x57, 0x26, 0x00, 0xa9, 0x44, 0x95, - 0x00, 0x18, 0x80, 0x79, 0xe1, 0x6c, 0x9c, 0x05, 0x6f, 0x31, 0xf0, 0x4b, 0x2c, 0xe5, 0x9c, 0xfb, - 0xef, 0xf3, 0x12, 0xf7, 0xf1, 0x77, 0xbb, 0xce, 0x18, 0x0b, 0xe0, 0xb3, 0x82, 0x4e, 0xef, 0x95, - 0x71, 0x5e, 0x3c, 0xb2, 0x70, 0xd0, 0xdc, 0xbf, 0xc4, 0xcd, 0x8a, 0x59, 0x8b, 0x97, 0xc9, 0xfe, - 0x2a, 0x4a, 0x15, 0x1e, 0x05, 0x9a, 0x52, 0xff, 0x08, 0x81, 0x64, 0x29, 0x03, 0x70, 0x04, 0xa0, - 0x7c, 0x94, 0x98, 0xdc, 0x4c, 0x54, 0x24, 0x1c, 0x16, 0x00, 0xcf, 0x50, 0xaa, 0x74, 0x92, 0x84, - 0x60, 0xf3, 0xe7, 0x03, 0x87, 0x1c, 0x2c, 0xce, 0x70, 0xff, 0xcc, 0x78, 0x29, 0x05, 0x25, 0x69, - 0x45, 0xc4, 0xf1, 0xcf, 0x9a, 0x88, 0xa4, 0x88, 0x7f, 0x85, 0xb7, 0xf8, 0xe9, 0x3d, 0x4f, 0xe1, - 0x61, 0x96, 0x1d, 0xd3, 0x8b, 0x8a, 0x6a, 0x2f, 0xe4, 0x26, 0xa8, 0x6b, 0x90, 0xa7, 0xc7, 0xb1, - 0x84, 0xf9, 0xb2, 0xfc, 0xfc, 0xc6, 0xbd, 0xc2, 0x3d, 0x1f, 0xaf, 0x90, 0xca, 0xbb, 0x0c, 0x44, - 0x80, 0x11, 0x16, 0xa9, 0xef, 0x37, 0xf1, 0x3b, 0x3d, 0x6d, 0x8e, 0x99, 0x78, 0xab, 0x2d, 0x69, - 0xa6, 0xdf, 0x58, 0x55, 0xc0, 0x61, 0x19, 0x41, 0xd4, 0x14, 0xb4, 0xea, 0x99, 0x55, 0xc9, 0x4b, - 0x69, 0xa6, 0x8a, 0xb6, 0xcf, 0x1c, 0x44, 0x50, 0x84, 0x35, 0x8f, 0x52, 0xef, 0x37, 0xf1, 0xc4, - 0x69, 0xa7, 0x18, 0xed, 0x55, 0xa3, 0xc0, 0x38, 0x2e, 0x58, 0x01, 0x8a, 0x61, 0x6c, 0x44, 0xfc, - 0x49, 0x77, 0x77, 0xbb, 0xf8, 0x23, 0xcb, 0xfa, 0x8c, 0xe4, 0xaa, 0xac, 0x4f, 0x35, 0xb3, 0x7f, - 0xc1, 0x66, 0x93, 0xbc, 0xbd, 0x3b, 0x2c, 0x18, 0xa0, 0xdc, 0xa6, 0x2e, 0x7c, 0x67, 0x71, 0x5c, - 0x48, 0x7c, 0x49, 0xe2, 0x8c, 0xff, 0x8a, 0xe2, 0x0b, 0xb9, 0x1e, 0xe6, 0x20, 0x48, 0x99, 0xc7, - 0x0e, 0xe1, 0x7c, 0xd5, 0x8d, 0xfc, 0x85, 0xb4, 0x6f, 0xae, 0x3a, 0x72, 0x92, 0x90, 0x74, 0x33, - 0x53, 0x43, 0x93, 0x61, 0x7e, 0x6c, 0x47, 0x29, 0x79, 0x7a, 0x8b, 0xae, 0x52, 0x3b, 0xe1, 0x8e, - 0x5b, 0x0e, 0x10, 0xbd, 0x8b, 0xf4, 0x7a, 0xae, 0x63, 0x26, 0x64, 0x96, 0x83, 0x5c, 0x27, 0x17, - 0xad, 0x69, 0xcb, 0xde, 0x9a, 0x93, 0x85, 0x3b, 0x2d, 0xb7, 0xfb, 0x2d, 0xde, 0x1c, 0xe4, 0x10, - 0xba, 0xfa, 0x13, 0xb4, 0x1b, 0x76, 0x6a, 0xac, 0x1c, 0xf0, 0x48, 0x75, 0xd7, 0xa0, 0x32, 0x20, - 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x4d, 0x26, 0xb0, 0xab, 0xc1, 0x19, 0xaa, 0xab, 0xd5, 0xc1, - 0x25, 0xef, 0xaa, 0xe0, 0xaa, 0xa3, 0x4b, 0x99, 0x27, 0x6e, 0x35, 0x45, 0x56, 0xf8, 0x2a, 0xc7, - 0x4d, 0xcf, 0xf7, 0xfe, 0x7f, 0xbd, 0xf0, 0x87, 0x55, 0x5a, 0xef, 0x72, 0xf6, 0x2e, 0xf7, 0xf1, - 0x46, 0xb5, 0x52, 0xb3, 0xaf, 0xcd, 0x5a, 0x50, 0xf7, 0x04, 0xf5, 0x17, 0x27, 0x2f, 0x51, 0x75, - 0x17, 0xec, 0x3b, 0x12, 0x00, 0x23, 0xb1, 0x35, 0x3b, 0x10, 0x3b, 0xf6, 0x6e, 0x9a, 0x64, 0xf5, - 0xdb, 0x55, 0x4d, 0x70, 0x66, 0x45, 0x5e, 0x9a, 0xf8, 0x04, 0x86, 0x34, 0x50, 0x3d, 0xb5, 0xc5, - 0xa5, 0x85, 0x05, 0x2a, 0x00, 0xab, 0x05, 0xd3, 0x00, 0x12, 0x4e, 0x80, 0x00, 0xb6, 0x44, 0x06, - 0x19, 0x43, 0x98, 0x25, 0x16, 0x7e, 0xba, 0x00, 0x04, 0x96, 0x1c, 0x00, 0x38, 0x34, 0x8f, 0x76, - 0x2f, 0x94, 0x15, 0xe6, 0x60, 0xbc, 0x18, 0xa3, 0x00, 0x04, 0xa0, 0x18, 0x00, 0x12, 0xa3, 0xf9, - 0xd4, 0xfe, 0x1d, 0x39, 0x7e, 0x1c, 0xc0, 0x13, 0x93, 0x38, 0x8c, 0x7b, 0xc2, 0x60, 0xc8, 0x38, - 0xfd, 0xd8, 0x73, 0xf3, 0x9a, 0x0a, 0xa6, 0x32, 0xa2, 0xd4, 0xb5, 0x8a, 0xb2, 0xc5, 0x8a, 0x2d, - 0xca, 0xa4, 0xc0, 0xf6, 0xba, 0x5d, 0x1e, 0x74, 0xf3, 0xa5, 0xd1, 0x74, 0x22, 0x05, 0x1f, 0x2f, - 0xd7, 0xf7, 0xf1, 0xb0, 0x98, 0x1a, 0xe2, 0xe2, 0x21, 0xa5, 0x46, 0x61, 0xbf, 0x23, 0xf1, 0x98, - 0x77, 0xd1, 0xb1, 0x9f, 0x3e, 0x33, 0x8c, 0x50, 0xca, 0x5c, 0xc1, 0x08, 0x87, 0xfe, 0x27, 0x6d, - 0xdb, 0x7e, 0x7a, 0xe4, 0x2c, 0x49, 0xfb, 0xe0, 0x8c, 0x46, 0xaa, 0xdf, 0x75, 0x55, 0x55, 0xcc, - 0x26, 0x94, 0xbf, 0xc2, 0x06, 0xaa, 0x1c, 0x8d, 0x4a, 0xd3, 0x54, 0x44, 0x61, 0x81, 0x9c, 0x4c, - 0x29, 0xd3, 0x48, 0x1d, 0x5c, 0x29, 0x8d, 0xaf, 0x4f, 0x87, 0x15, 0x35, 0xf4, 0xdf, 0xe1, 0x0d, - 0xda, 0x8f, 0x5c, 0x57, 0x43, 0xbd, 0xaf, 0x81, 0xbc, 0x61, 0x95, 0x67, 0x84, 0x4a, 0xab, 0xb6, - 0x9c, 0xc7, 0x46, 0x2d, 0x2f, 0xe1, 0x3d, 0x27, 0x1a, 0x5a, 0xa5, 0x0f, 0x70, 0x4f, 0x17, 0x14, - 0xd4, 0x5d, 0x45, 0xeb, 0xd8, 0x6e, 0x50, 0x04, 0x52, 0xd9, 0x0b, 0x01, 0x44, 0xcf, 0x5a, 0xdd, - 0x37, 0x7b, 0x77, 0x3d, 0x77, 0x6f, 0xf8, 0x28, 0x8d, 0x20, 0xfa, 0xfb, 0x78, 0xfa, 0x96, 0x06, - 0x6a, 0x00, 0x08, 0x10, 0xe8, 0xbc, 0x85, 0x64, 0x0b, 0xf3, 0x1f, 0xf1, 0x20, 0xe3, 0xb0, 0x92, - 0xaf, 0x59, 0x03, 0x96, 0x9b, 0xc5, 0xb4, 0xfe, 0x1b, 0x64, 0x02, 0x69, 0x01, 0x08, 0x98, 0xb9, - 0x29, 0x26, 0x09, 0x5c, 0xef, 0x70, 0x01, 0xf7, 0xec, 0x90, 0xf0, 0x54, 0xea, 0x57, 0xf1, 0x81, - 0x1a, 0xf7, 0xc2, 0x15, 0x6c, 0x7f, 0x83, 0xff, 0xf8, 0xd2, 0x05, 0xc1, 0xd5, 0x88, 0xc2, 0xa3, - 0x14, 0x3b, 0xe1, 0xdf, 0x8c, 0x50, 0xdf, 0x9b, 0x18, 0xa1, 0xb9, 0xfe, 0xdb, 0x18, 0x49, 0x49, - 0x0e, 0xe8, 0x8e, 0x3c, 0x31, 0x5a, 0x4b, 0x59, 0xbf, 0xf0, 0x43, 0xac, 0x5f, 0xd5, 0xc2, 0x85, - 0xb5, 0x48, 0xe8, 0x59, 0x54, 0xcf, 0x9b, 0xae, 0x2b, 0xbe, 0x20, 0x58, 0x43, 0x17, 0xb2, 0xc1, - 0x73, 0xe1, 0x22, 0x4c, 0x18, 0x15, 0x64, 0x46, 0x81, 0x12, 0xe1, 0x03, 0xb3, 0xeb, 0xf1, 0x34, - 0x36, 0xb1, 0x47, 0xca, 0x18, 0xd7, 0xc5, 0x52, 0x39, 0x82, 0x4b, 0xd6, 0x5a, 0xe5, 0x67, 0x13, - 0x13, 0x2d, 0xcf, 0x7e, 0xf7, 0xf1, 0x85, 0x44, 0x95, 0xeb, 0x26, 0x3b, 0xeb, 0xcc, 0xc6, 0x27, - 0xf0, 0x50, 0x64, 0x88, 0xca, 0x6f, 0xc7, 0x75, 0xeb, 0x6e, 0xfa, 0x16, 0xc9, 0xfa, 0x1a, 0xe4, - 0x5f, 0x43, 0xa2, 0xae, 0xb1, 0x44, 0x07, 0x59, 0xc0, 0x0a, 0x94, 0xbf, 0xda, 0xff, 0xbd, 0x4d, - 0x36, 0xcf, 0xe5, 0xe6, 0xfa, 0x71, 0xf1, 0xf6, 0x53, 0x46, 0xd9, 0xeb, 0xf0, 0xeb, 0x30, 0x0a, - 0xe2, 0x61, 0x9d, 0x08, 0x8d, 0x57, 0xfe, 0x0c, 0x5f, 0x1e, 0x03, 0x52, 0x67, 0x8a, 0x07, 0x2a, - 0xe3, 0x8f, 0x4c, 0xaa, 0xeb, 0xf0, 0xd9, 0x04, 0x00, 0x52, 0x11, 0x47, 0x26, 0x1b, 0x24, 0x0c, - 0x74, 0x9b, 0x43, 0xc5, 0x85, 0x41, 0xc0, 0x77, 0x58, 0x85, 0x64, 0x27, 0x0c, 0x03, 0xb5, 0x81, - 0x0f, 0x2a, 0x19, 0x86, 0x42, 0xa7, 0xb2, 0x20, 0x58, 0x7a, 0xe7, 0xf7, 0xc6, 0xb0, 0xa8, 0x5c, - 0x4b, 0x91, 0x82, 0x86, 0xd4, 0x61, 0x3c, 0xb1, 0x88, 0xe0, 0xf5, 0x83, 0x14, 0x32, 0xa3, 0x17, - 0xcc, 0xa2, 0xd6, 0x54, 0xf9, 0x43, 0x92, 0xe3, 0xfe, 0xeb, 0xaf, 0x94, 0xab, 0xab, 0xe1, 0x42, - 0xbd, 0xde, 0xf3, 0xfb, 0xbb, 0xbd, 0x7b, 0xd7, 0x62, 0x57, 0x55, 0xc5, 0x5b, 0xdd, 0x0c, 0x91, - 0x47, 0xf8, 0xf1, 0x97, 0x7d, 0xbb, 0xdb, 0xb5, 0x89, 0x85, 0x0a, 0xa3, 0x29, 0xd7, 0x61, 0x9f, - 0x86, 0x29, 0x91, 0xed, 0x5d, 0x09, 0x37, 0xf8, 0xca, 0x7b, 0x4a, 0xc9, 0x0d, 0x32, 0xf6, 0x9b, - 0x76, 0x35, 0xf1, 0x76, 0xbc, 0x29, 0x58, 0xf2, 0x08, 0x9d, 0xfd, 0xee, 0xb4, 0x49, 0x9b, 0x33, - 0xf6, 0x16, 0xfc, 0x4c, 0x13, 0x78, 0xad, 0x0c, 0xf9, 0xc3, 0x2e, 0xf7, 0xca, 0x2d, 0x29, 0xaf, - 0x88, 0xaf, 0x7c, 0x24, 0x31, 0xec, 0x1e, 0xe3, 0xbd, 0x25, 0xd4, 0xca, 0x31, 0x30, 0x99, 0x97, - 0x2b, 0x54, 0x6b, 0x89, 0x82, 0x31, 0x2a, 0xa1, 0xe4, 0xfd, 0x7f, 0xfe, 0x51, 0x6b, 0x36, 0x78, - 0x98, 0xce, 0x61, 0x8e, 0x58, 0x64, 0xe1, 0x3d, 0x64, 0xc3, 0xfb, 0x4c, 0x1f, 0xa2, 0x95, 0x3e, - 0x2f, 0x84, 0xba, 0x8f, 0x2e, 0x4e, 0x1e, 0x9c, 0x00, 0x6b, 0xc9, 0xf1, 0x37, 0x9f, 0x7e, 0xb6, - 0xdb, 0xf3, 0x52, 0x32, 0x7e, 0xa6, 0xa8, 0x7e, 0xf8, 0xc9, 0xed, 0xa6, 0x9f, 0xc1, 0x00, 0x50, - 0x71, 0xc0, 0x1c, 0x38, 0x0e, 0x13, 0x62, 0xb0, 0x62, 0x4a, 0x06, 0xac, 0x21, 0x90, 0x28, 0x4a, - 0x7b, 0xcb, 0x05, 0x27, 0x78, 0xa2, 0x09, 0x45, 0xd0, 0xb8, 0xf0, 0x00, 0x21, 0x7c, 0x00, 0x0a, - 0x50, 0xd8, 0x80, 0x4a, 0x22, 0xd0, 0x33, 0x2c, 0x07, 0x00, 0x10, 0x01, 0x2c, 0x60, 0x10, 0x86, - 0xcb, 0x24, 0x0b, 0x03, 0xd3, 0x88, 0x01, 0xe1, 0xd5, 0x51, 0xcc, 0x72, 0x26, 0xe8, 0xfe, 0x03, - 0x82, 0x2e, 0xc2, 0x50, 0xa9, 0x5a, 0x2c, 0x81, 0x83, 0x7b, 0xde, 0xb5, 0xc6, 0x22, 0xf8, 0xc5, - 0x46, 0x13, 0xf1, 0x8c, 0x27, 0x9b, 0x10, 0x4b, 0xae, 0x28, 0x2c, 0x84, 0x4e, 0xc7, 0x03, 0x97, - 0x9d, 0x36, 0xff, 0x0a, 0x4d, 0xd9, 0x9b, 0x1d, 0x49, 0x07, 0x62, 0x46, 0x6f, 0xac, 0xbd, 0x54, - 0xe4, 0xa3, 0xe5, 0x3e, 0x4f, 0x5c, 0xd7, 0xab, 0x2f, 0x67, 0xbb, 0x77, 0xc1, 0x59, 0x33, 0xf9, - 0xfd, 0xcb, 0xc9, 0xaf, 0x68, 0x09, 0xcf, 0x82, 0x61, 0x13, 0xe5, 0x9c, 0xbc, 0x8a, 0x37, 0x3c, - 0x40, 0xe3, 0xa4, 0x43, 0x42, 0x6c, 0x72, 0x89, 0x8e, 0x61, 0x01, 0x30, 0x80, 0x9b, 0xf8, 0x98, - 0xcf, 0x1b, 0x3c, 0xc2, 0xb1, 0xce, 0xc4, 0x79, 0x59, 0xb4, 0x86, 0xfc, 0x40, 0x26, 0xb7, 0x6f, - 0xf0, 0x2a, 0x42, 0xb6, 0x36, 0x37, 0xf8, 0xf2, 0x2b, 0x29, 0x9a, 0x94, 0xa9, 0x29, 0x33, 0xf1, - 0x7a, 0x35, 0xde, 0x5c, 0xc4, 0xca, 0x74, 0x3a, 0x98, 0x8f, 0xc2, 0x9d, 0x53, 0xe5, 0xc2, 0x66, - 0xda, 0x07, 0xb4, 0xfd, 0xf0, 0x58, 0x69, 0x08, 0x28, 0xcc, 0x98, 0x5f, 0x12, 0x59, 0x72, 0x77, - 0x3f, 0xf1, 0x10, 0x99, 0xbd, 0xbd, 0xa9, 0x33, 0x12, 0x24, 0x5d, 0x2d, 0x89, 0x71, 0xd1, 0xff, - 0x08, 0x56, 0x4e, 0x56, 0x23, 0xb2, 0xb1, 0x9a, 0x1f, 0xcc, 0x15, 0x5d, 0x4f, 0x88, 0xf8, 0x26, - 0x08, 0x10, 0xc5, 0x2c, 0x86, 0xea, 0x92, 0x54, 0xf8, 0x70, 0xac, 0x61, 0x46, 0xa0, 0xc0, 0x02, - 0x36, 0x20, 0x07, 0xe4, 0x0f, 0x47, 0xfc, 0x17, 0x30, 0xfc, 0x14, 0x79, 0x44, 0xd5, 0xb8, 0x4c, - 0xee, 0x8a, 0xfe, 0x1f, 0xa2, 0xb2, 0x3d, 0x96, 0x95, 0x6a, 0x3d, 0x8f, 0x37, 0x64, 0x7f, 0x5e, - 0x3f, 0xfa, 0xc5, 0xf0, 0x47, 0x9a, 0xa8, 0xf6, 0x7c, 0x16, 0x5d, 0x93, 0x53, 0x50, 0xd4, 0xf5, - 0x5c, 0x63, 0xe2, 0x32, 0xbb, 0xf2, 0x9c, 0x46, 0x08, 0x41, 0x3d, 0x59, 0x94, 0xad, 0xa4, 0xc9, - 0x3a, 0xf7, 0x07, 0xd8, 0x4c, 0xe4, 0x82, 0x00, 0x8f, 0x88, 0x9b, 0x90, 0x8b, 0x59, 0x38, 0xb2, - 0x6e, 0xfb, 0xb7, 0xe0, 0x8a, 0x38, 0xbc, 0xfb, 0xec, 0xe6, 0xcf, 0x88, 0x96, 0x74, 0x0c, 0x76, - 0x35, 0xf8, 0x8b, 0x33, 0xcf, 0x8c, 0xf1, 0x11, 0x39, 0xb0, 0xc9, 0xe4, 0x8d, 0x2c, 0x44, 0x95, - 0x6b, 0xf3, 0x17, 0x77, 0x5c, 0x51, 0xb9, 0x7b, 0xbf, 0x3f, 0x7b, 0x96, 0x18, 0xc8, 0x46, 0x37, - 0x36, 0x1b, 0x9e, 0x1c, 0x1d, 0x58, 0x38, 0x3b, 0x0b, 0x32, 0x50, 0x02, 0xa1, 0x70, 0x0a, 0x41, - 0x66, 0x71, 0xc3, 0xce, 0x08, 0xa8, 0x28, 0x8a, 0x8e, 0xe1, 0xd1, 0x84, 0x51, 0xd0, 0x0e, 0x05, - 0xcf, 0x97, 0xc4, 0x61, 0x0f, 0x38, 0x02, 0xf7, 0x33, 0xb1, 0x65, 0x38, 0x9a, 0xdd, 0xf3, 0xe9, - 0x27, 0xfe, 0x7a, 0x97, 0x69, 0xb6, 0xf8, 0x09, 0xfa, 0xcf, 0xf3, 0xde, 0xee, 0xea, 0xc6, 0x21, - 0xd9, 0xdb, 0x39, 0x24, 0x93, 0xef, 0xe1, 0xc2, 0xc0, 0xe3, 0x84, 0xa0, 0x1d, 0xe9, 0x29, 0x60, - 0x19, 0x88, 0x56, 0xc5, 0xfc, 0x18, 0x2c, 0xc7, 0x8d, 0xcd, 0x81, 0x70, 0xa9, 0x38, 0x00, 0x12, - 0xf6, 0x56, 0x25, 0xc9, 0x00, 0xa8, 0x7e, 0x25, 0x1c, 0x9e, 0x3f, 0x9c, 0x07, 0xcb, 0xf9, 0x08, - 0x46, 0x40, 0x4f, 0x06, 0x83, 0x70, 0xea, 0x62, 0x0c, 0x02, 0x03, 0x10, 0x67, 0x11, 0xfe, 0x23, - 0xec, 0x2c, 0xc4, 0xef, 0x2f, 0x5e, 0xf9, 0xb7, 0x77, 0xf0, 0x51, 0x55, 0xa4, 0xb5, 0xb7, 0xc5, - 0xd5, 0x55, 0x4b, 0xde, 0x37, 0xf1, 0x04, 0x3e, 0x5f, 0xcd, 0x9e, 0x11, 0x3a, 0xc6, 0xa3, 0xe1, - 0x4b, 0xab, 0x0b, 0x68, 0xd3, 0x5b, 0xff, 0x05, 0xba, 0xb5, 0x5b, 0x03, 0x01, 0x41, 0xb7, 0xc7, - 0xe9, 0xc9, 0x1b, 0xa2, 0x9d, 0x81, 0xa3, 0x26, 0x7f, 0x12, 0x2f, 0x67, 0x20, 0xdd, 0xef, 0xf1, - 0x06, 0xe7, 0x50, 0xf6, 0xa8, 0x45, 0xe2, 0x76, 0xab, 0x18, 0x85, 0x45, 0x4b, 0xc8, 0x55, 0xaf, - 0xd9, 0x22, 0xeb, 0xf2, 0x5d, 0xdd, 0xfc, 0x45, 0xc4, 0xb8, 0xf8, 0x86, 0x82, 0x8c, 0xf8, 0xfc, - 0xc2, 0x22, 0x1e, 0x7b, 0x6b, 0x8d, 0x86, 0x43, 0xde, 0x0d, 0xa8, 0x38, 0xe9, 0x8b, 0x54, 0xfb, - 0xe8, 0xbf, 0xfa, 0xbc, 0xf0, 0x17, 0x20, 0x3a, 0x06, 0x86, 0x80, 0xc1, 0xc0, 0x18, 0xc3, 0x5b, - 0xcd, 0x16, 0x2c, 0x63, 0x17, 0x38, 0x1c, 0x03, 0xb1, 0xdc, 0xfb, 0x2b, 0x1f, 0xc3, 0x90, 0xa9, - 0x52, 0x3c, 0x07, 0x38, 0x1a, 0x87, 0xa4, 0xa1, 0x55, 0x97, 0xc1, 0x17, 0x6c, 0x3c, 0xbe, 0x25, - 0xa0, 0x38, 0x04, 0xe0, 0x70, 0x28, 0x38, 0x56, 0x5e, 0x3b, 0xe6, 0xe3, 0x74, 0xcd, 0x51, 0xca, - 0xf0, 0xf4, 0x80, 0x07, 0x43, 0x7d, 0x04, 0x2b, 0xb5, 0x76, 0x44, 0x46, 0xfe, 0x29, 0x7c, 0x3d, - 0x75, 0xbe, 0x8f, 0x70, 0xca, 0x30, 0xc7, 0xfe, 0x78, 0x28, 0x9e, 0x23, 0x9a, 0x05, 0xd1, 0x27, - 0xd0, 0xf1, 0x62, 0xc3, 0x1f, 0x85, 0x07, 0xa5, 0x6c, 0x2b, 0x64, 0x06, 0x58, 0x51, 0xeb, 0x06, - 0xbf, 0x26, 0x0a, 0x38, 0xcd, 0x05, 0xc3, 0x8c, 0x86, 0x30, 0x1c, 0x20, 0xa0, 0x6c, 0x12, 0x02, - 0x0e, 0xdc, 0x03, 0xbc, 0x00, 0x5f, 0x3e, 0x13, 0x4a, 0x36, 0xa1, 0x42, 0xe6, 0x6f, 0x76, 0x3a, - 0x1f, 0x91, 0xd7, 0xe6, 0xeb, 0x17, 0xa3, 0x7e, 0x0e, 0xfe, 0x3e, 0x7f, 0x0d, 0x90, 0xa0, 0x05, - 0xb8, 0x8d, 0x8f, 0xcb, 0x9d, 0x5b, 0x6b, 0x2d, 0xb8, 0xad, 0xef, 0x12, 0xf9, 0x12, 0xf9, 0x0a, - 0x8f, 0x1c, 0x3a, 0x56, 0x7c, 0x56, 0xd4, 0x2e, 0xb0, 0xeb, 0x5d, 0xb1, 0xed, 0x5b, 0xd3, 0x14, - 0x82, 0xde, 0x0c, 0x01, 0x48, 0x29, 0xe6, 0xc3, 0x60, 0x87, 0x88, 0x1c, 0x39, 0xe7, 0x8e, 0x32, - 0x91, 0x0b, 0x11, 0x0f, 0x38, 0x85, 0x4d, 0x84, 0x3a, 0x0b, 0xf5, 0x72, 0x05, 0x96, 0x83, 0x63, - 0xf7, 0x59, 0x3a, 0xae, 0x4a, 0xd7, 0xe5, 0xee, 0xfe, 0x6b, 0xbb, 0xb6, 0xb8, 0x4b, 0x7b, 0xdd, - 0x4d, 0x9e, 0xef, 0x7f, 0x82, 0x9b, 0x08, 0xdf, 0x69, 0xb5, 0xc3, 0x26, 0x02, 0xa3, 0xb8, 0xb7, - 0x7c, 0x14, 0x6a, 0x62, 0x0b, 0x89, 0x56, 0xac, 0xf8, 0xbd, 0x49, 0xe3, 0x5a, 0x9b, 0x7c, 0x96, - 0x0e, 0xe4, 0x2c, 0xbb, 0xb2, 0xaa, 0xf9, 0xb5, 0x5b, 0xe6, 0x3d, 0x48, 0xc4, 0xf9, 0x48, 0x9a, - 0x19, 0x52, 0xb6, 0x8f, 0x82, 0x82, 0xe5, 0xbb, 0x4c, 0x0a, 0xbd, 0xf5, 0x7a, 0xeb, 0x5f, 0x05, - 0x14, 0xd0, 0xcd, 0x9e, 0xaa, 0xf2, 0xf0, 0x40, 0x4a, 0x39, 0xb9, 0x35, 0xdd, 0xb9, 0xa7, 0x03, - 0x8e, 0x4a, 0x7c, 0x0b, 0x6d, 0xfa, 0x30, 0xa3, 0xa4, 0x3c, 0x88, 0x01, 0x07, 0xe7, 0x5c, 0xe1, - 0x5c, 0x64, 0xef, 0x91, 0x20, 0xfc, 0xf0, 0x6a, 0xbb, 0xe5, 0x37, 0x73, 0xc8, 0x5d, 0xf2, 0xdd, - 0x1f, 0x67, 0xea, 0x3d, 0x72, 0xa5, 0x29, 0x4d, 0xde, 0x1d, 0xa4, 0x0c, 0x20, 0x94, 0xe5, 0xd6, - 0xd5, 0x5f, 0x19, 0xbf, 0x1f, 0xee, 0x06, 0x81, 0x03, 0x60, 0x1d, 0x39, 0x81, 0x24, 0xa6, 0x96, - 0xc8, 0x35, 0x86, 0x55, 0x91, 0x6c, 0x40, 0x0f, 0x28, 0x36, 0x43, 0x00, 0x65, 0x18, 0x53, 0x80, - 0x6b, 0x45, 0x39, 0x49, 0xc0, 0x07, 0xb7, 0xec, 0x22, 0x52, 0xe0, 0x16, 0x32, 0x87, 0x07, 0x30, - 0x3c, 0x7f, 0xa2, 0x6e, 0xb3, 0x62, 0x87, 0xb0, 0x07, 0xfc, 0x80, 0x4b, 0x08, 0x2f, 0xf6, 0xbe, - 0xfd, 0x1a, 0x62, 0xcc, 0x3b, 0x7b, 0xa6, 0x8a, 0x35, 0xde, 0x1f, 0x71, 0xeb, 0x8e, 0x57, 0x25, - 0x52, 0x1b, 0xcb, 0xbe, 0x13, 0x2e, 0xae, 0xb6, 0x6a, 0x20, 0xfe, 0x07, 0x11, 0xb6, 0x45, 0xc2, - 0xf2, 0xc7, 0x59, 0xc1, 0xc1, 0xb5, 0x2f, 0xc4, 0x38, 0x07, 0xc3, 0xc9, 0x7e, 0xa3, 0x01, 0xb3, - 0x8f, 0x00, 0xc0, 0xf2, 0x86, 0x63, 0x19, 0x23, 0x27, 0xd0, 0x7d, 0x19, 0x73, 0xc3, 0x8a, 0x01, - 0xe2, 0xeb, 0x03, 0x12, 0x85, 0x80, 0xad, 0xb1, 0x56, 0x28, 0xb6, 0xdb, 0x14, 0x58, 0xab, 0x59, - 0xc5, 0x97, 0xb7, 0x2c, 0x58, 0x80, 0x99, 0x38, 0x99, 0x2c, 0x59, 0x62, 0xc0, 0x79, 0x16, 0x2a, - 0xc5, 0x5b, 0x6d, 0xa6, 0x2d, 0xc3, 0x8a, 0x00, 0x17, 0x33, 0xa1, 0x29, 0xfe, 0x0c, 0xd4, 0xc7, - 0xfb, 0x60, 0xfb, 0x89, 0x3a, 0xf1, 0x50, 0xda, 0x0a, 0x22, 0x96, 0xaf, 0xe9, 0x40, 0x69, 0xe3, - 0x1f, 0xf7, 0xc0, 0x04, 0xc9, 0xb0, 0x00, 0x13, 0x9b, 0x03, 0x9f, 0x97, 0x7f, 0xfb, 0x2a, 0x74, - 0xdb, 0x05, 0x46, 0x1f, 0x86, 0xce, 0x35, 0x8b, 0x9d, 0x80, 0x87, 0xe0, 0x00, 0x25, 0x5e, 0x42, - 0xed, 0x03, 0xa4, 0x5f, 0x95, 0x15, 0xd8, 0x43, 0x9b, 0x73, 0xa8, 0xb5, 0xde, 0x16, 0x57, 0x7e, - 0x3f, 0x5a, 0xad, 0x6a, 0xb5, 0xf1, 0x04, 0xdd, 0x56, 0xbf, 0x29, 0xd8, 0xe7, 0x51, 0xf2, 0x1d, - 0x56, 0x97, 0x82, 0x53, 0x1b, 0xb3, 0xb3, 0x35, 0xa1, 0xfd, 0xf0, 0x51, 0xaa, 0x8b, 0xd5, 0x55, - 0xbe, 0x09, 0x49, 0x7b, 0xbd, 0xef, 0xf0, 0xc4, 0xd0, 0x55, 0xaa, 0xd2, 0xe9, 0xb5, 0x73, 0xf7, - 0xfc, 0x15, 0x4f, 0xab, 0x57, 0xad, 0xcd, 0x65, 0xcd, 0x32, 0x20, 0xb6, 0xdd, 0xbe, 0xce, 0x26, - 0x10, 0xd7, 0x4c, 0xac, 0x7f, 0x64, 0x1d, 0xb5, 0x1f, 0x31, 0x6c, 0x48, 0x19, 0xf6, 0x73, 0xc2, - 0x53, 0xf2, 0x11, 0x6f, 0xc8, 0xbe, 0xef, 0x7e, 0x2a, 0xd5, 0x46, 0x24, 0xb3, 0xb7, 0x5f, 0x84, - 0x35, 0x9b, 0x18, 0xd3, 0xea, 0x6c, 0xf0, 0x54, 0x56, 0xeb, 0x33, 0x06, 0xe6, 0x49, 0x5a, 0xa1, - 0x99, 0x87, 0x92, 0x63, 0xe5, 0x26, 0x6c, 0x1e, 0xf7, 0x85, 0x33, 0x90, 0xc7, 0x90, 0x50, 0xaf, - 0x85, 0xb8, 0xae, 0x46, 0xdb, 0x2a, 0x7c, 0xde, 0x16, 0x34, 0xe1, 0xe3, 0xa7, 0x1d, 0x6a, 0x40, - 0x90, 0xe6, 0xb7, 0x43, 0xbb, 0xba, 0x44, 0x24, 0xa9, 0x4c, 0x7e, 0xaf, 0xf4, 0x53, 0x27, 0xc1, - 0x67, 0x27, 0x49, 0xdf, 0xdd, 0xef, 0x5d, 0x96, 0x7c, 0xd7, 0x04, 0x77, 0x6e, 0xc7, 0x5c, 0x32, - 0x24, 0x2e, 0x41, 0x1c, 0x06, 0x22, 0xc8, 0x56, 0x39, 0x7b, 0x10, 0x0f, 0x7b, 0x03, 0x29, 0x81, - 0xc8, 0xd9, 0xb3, 0x56, 0x35, 0xce, 0x0a, 0xb8, 0xe2, 0xd6, 0x38, 0x79, 0x10, 0x01, 0xfb, 0x51, - 0x38, 0x08, 0x2e, 0x6d, 0x9f, 0xf6, 0x16, 0xb6, 0xd5, 0x7c, 0xb5, 0xb6, 0xdb, 0x71, 0xff, 0x1f, - 0xf1, 0xc5, 0x72, 0xa7, 0xe8, 0xda, 0x53, 0xd8, 0x68, 0x04, 0x2a, 0x0e, 0x00, 0x64, 0x45, 0xed, - 0x93, 0x7c, 0x4c, 0x1f, 0xb3, 0x09, 0xa1, 0xed, 0xf8, 0xf0, 0x1d, 0xc4, 0x09, 0x0d, 0x95, 0x62, - 0x1c, 0x16, 0x82, 0x20, 0x94, 0x50, 0x84, 0x0d, 0x06, 0x4e, 0x50, 0x00, 0xf3, 0x03, 0x12, 0xc7, - 0x83, 0x40, 0x07, 0x18, 0x16, 0x06, 0x0f, 0x89, 0x0a, 0x1d, 0xaa, 0xe3, 0xd1, 0xe9, 0xc4, 0xb1, - 0x4c, 0xd8, 0xef, 0xcd, 0x16, 0x7c, 0x10, 0x0c, 0x55, 0x1b, 0x10, 0xe5, 0x64, 0x80, 0x54, 0x29, - 0x20, 0x9f, 0x90, 0x2b, 0x09, 0xf1, 0x28, 0x02, 0xa7, 0x0e, 0x3e, 0x00, 0x04, 0x70, 0xf0, 0x70, - 0x15, 0x80, 0xaf, 0xba, 0xed, 0x46, 0xb7, 0xe2, 0x41, 0x00, 0xd9, 0x61, 0xe2, 0x38, 0x48, 0x1a, - 0x8a, 0x7a, 0x31, 0x0e, 0xf2, 0x8f, 0xf0, 0x51, 0xfe, 0x2c, 0x6c, 0xe5, 0x45, 0x64, 0x38, 0x85, - 0x88, 0x45, 0x18, 0x17, 0x93, 0x7c, 0x4a, 0xbf, 0xed, 0x97, 0x70, 0xc8, 0x80, 0xa4, 0xbe, 0x76, - 0xa6, 0x4b, 0x45, 0x6a, 0x1d, 0x6e, 0xa6, 0x5f, 0x19, 0x70, 0x83, 0x42, 0x81, 0x28, 0x12, 0xd7, - 0x2f, 0x54, 0x5a, 0x43, 0x83, 0x10, 0x80, 0xd2, 0xb3, 0x23, 0xb9, 0x2a, 0xa1, 0x25, 0xe3, 0x03, - 0x4b, 0xab, 0x3a, 0xf0, 0xa7, 0x7d, 0xe2, 0x1c, 0x52, 0xaa, 0x55, 0x26, 0xa2, 0xe2, 0x0d, 0x72, - 0x09, 0x2c, 0xff, 0x88, 0xd2, 0xd6, 0x0c, 0x44, 0x0d, 0x22, 0xa1, 0xc2, 0x72, 0xc2, 0xbe, 0x78, - 0x7a, 0x76, 0x28, 0x71, 0xc6, 0x65, 0x96, 0xcc, 0x82, 0x01, 0xb8, 0x69, 0x0e, 0x35, 0x21, 0x22, - 0x80, 0x67, 0x0b, 0x40, 0xfb, 0xce, 0x16, 0x0d, 0x00, 0x9d, 0x60, 0xbb, 0x99, 0x85, 0xec, 0x79, - 0x15, 0x7a, 0x65, 0xda, 0x76, 0xe1, 0xc5, 0x00, 0x59, 0xc4, 0x26, 0x7e, 0xd0, 0x2f, 0x6c, 0xdb, - 0xed, 0xb7, 0xb6, 0xd9, 0x3c, 0xc8, 0x3a, 0x14, 0xe6, 0xc1, 0x82, 0xf8, 0x54, 0x00, 0xf1, 0xaa, - 0x80, 0xb8, 0xd0, 0x50, 0x9d, 0x78, 0x5c, 0xff, 0xc3, 0xb1, 0x40, 0x00, 0xcc, 0xf0, 0x00, 0x2b, - 0xc2, 0xe0, 0x00, 0x45, 0x43, 0x8b, 0x1a, 0x8e, 0x83, 0xc2, 0x77, 0x36, 0x78, 0x82, 0xe9, 0xb4, - 0xb8, 0xff, 0x21, 0x81, 0xc2, 0x7d, 0x47, 0xdc, 0xa6, 0xef, 0xc3, 0x22, 0x59, 0x02, 0x13, 0x25, - 0x31, 0x77, 0x28, 0x1a, 0x97, 0x8a, 0x61, 0xfc, 0x21, 0xc8, 0x47, 0x77, 0xfb, 0x23, 0xbe, 0xf9, - 0x2e, 0xf7, 0xf0, 0x87, 0xbb, 0xbb, 0xfb, 0xbf, 0xb3, 0xbb, 0xeb, 0x88, 0x25, 0x6a, 0xab, 0x4b, - 0xc1, 0x3f, 0x55, 0x9b, 0x15, 0xd0, 0x4a, 0x7c, 0x14, 0xd5, 0xee, 0xfb, 0xe8, 0x9d, 0xbe, 0xbd, - 0xf2, 0x76, 0xc7, 0xf7, 0xb3, 0x91, 0x90, 0xa7, 0x0d, 0x77, 0x46, 0xbf, 0x8c, 0x16, 0x64, 0x44, - 0xbb, 0x07, 0xd5, 0x51, 0xdd, 0xd9, 0x16, 0x09, 0x47, 0x89, 0x8c, 0x25, 0x94, 0xc9, 0xa3, 0xb5, - 0x9d, 0x84, 0x28, 0xf2, 0xea, 0x3d, 0xa6, 0x6d, 0xc4, 0x89, 0x0a, 0x1b, 0x5d, 0x47, 0x0b, 0xf0, - 0x6a, 0x6a, 0x50, 0x8f, 0x08, 0xc7, 0x60, 0xf4, 0xbb, 0x72, 0x91, 0x90, 0x59, 0x46, 0x80, 0x91, - 0x8c, 0x4a, 0x03, 0x1e, 0x3b, 0xc3, 0x21, 0xd2, 0xbb, 0x11, 0x89, 0xaa, 0x1e, 0x9b, 0x38, 0xd8, - 0xbc, 0x5a, 0x68, 0xe3, 0x3b, 0x5e, 0xca, 0x3b, 0x4a, 0xa4, 0x4b, 0x09, 0xe1, 0x11, 0x85, 0x67, - 0xe0, 0x88, 0xf7, 0xbb, 0x98, 0x71, 0x44, 0xc4, 0x07, 0xff, 0xdb, 0xb7, 0x5f, 0xb5, 0x57, 0x81, - 0xc4, 0x30, 0x34, 0x50, 0xb8, 0xc1, 0x4f, 0xa5, 0xe3, 0xd7, 0x00, 0x0f, 0x89, 0x40, 0x00, 0xaa, - 0x81, 0x7e, 0xd7, 0x04, 0xac, 0x00, 0x69, 0x62, 0x78, 0x2f, 0xe7, 0xac, 0x09, 0xe1, 0xfc, 0x15, - 0x23, 0x86, 0xaf, 0xed, 0xb7, 0x70, 0x67, 0x5f, 0x86, 0x40, 0xb0, 0x36, 0xcf, 0xf0, 0x1a, 0xe6, - 0xc6, 0x9c, 0xce, 0x4c, 0x01, 0x55, 0x8a, 0xab, 0x8b, 0x8b, 0x9d, 0x8f, 0x5d, 0xdf, 0xf0, 0xf2, - 0x28, 0x01, 0x89, 0x9c, 0x46, 0x84, 0x75, 0x4f, 0x16, 0xc1, 0xf7, 0xb6, 0xdb, 0x74, 0xf3, 0x6b, - 0x42, 0x06, 0xb1, 0x06, 0x40, 0xb7, 0x19, 0x27, 0xfc, 0x65, 0xa9, 0xed, 0xb6, 0xee, 0x10, 0x08, - 0x8d, 0xe9, 0xa8, 0x00, 0x01, 0x59, 0x9e, 0xe0, 0xc4, 0xc7, 0x21, 0x15, 0x23, 0x9a, 0x84, 0xe1, - 0x5a, 0xa0, 0x04, 0x55, 0x10, 0x0e, 0x1c, 0x38, 0x58, 0x32, 0xc1, 0x87, 0xe9, 0x58, 0x0f, 0xc1, - 0xc0, 0xe1, 0x94, 0x0e, 0x70, 0x5e, 0x82, 0xa6, 0x59, 0x23, 0x2c, 0x6a, 0x0b, 0x3a, 0xe3, 0xff, - 0xc2, 0x03, 0x4c, 0xe4, 0x01, 0xa0, 0x83, 0xb9, 0x5f, 0xba, 0x00, 0x02, 0x6d, 0x04, 0x59, 0xa9, - 0xd7, 0xdc, 0x84, 0xea, 0xd8, 0x11, 0x3b, 0xda, 0x40, 0x86, 0x6a, 0x78, 0xf3, 0xdb, 0x7c, 0x7b, - 0x68, 0x51, 0x4c, 0x97, 0x65, 0x25, 0x9b, 0x05, 0xe4, 0xd6, 0xf9, 0xa8, 0xfb, 0x88, 0x8d, 0xcb, - 0x30, 0x34, 0xc7, 0x86, 0x32, 0x9c, 0x01, 0xb5, 0xa5, 0xa2, 0x6b, 0x0f, 0x02, 0x90, 0xaf, 0x27, - 0x0a, 0x01, 0xe9, 0x97, 0x20, 0x35, 0x3e, 0x3c, 0xa3, 0x66, 0x88, 0x05, 0x70, 0x9e, 0x81, 0x4d, - 0x55, 0x02, 0x0c, 0x8b, 0x0b, 0xaf, 0x0d, 0x4c, 0x81, 0x62, 0x37, 0x8d, 0x71, 0xee, 0xbc, 0x18, - 0x04, 0x46, 0xc7, 0x27, 0xdf, 0xca, 0x13, 0xa3, 0xf8, 0xd7, 0x63, 0xca, 0xae, 0xe5, 0xe7, 0xb4, - 0x9f, 0x2d, 0x03, 0xac, 0x25, 0x0e, 0xc0, 0x25, 0x1f, 0xd8, 0x74, 0xad, 0x04, 0xcc, 0x47, 0x49, - 0xaa, 0x76, 0xcf, 0xc7, 0xff, 0x56, 0x11, 0x10, 0x14, 0xd1, 0x26, 0x69, 0x7c, 0x01, 0xf4, 0x32, - 0xb3, 0x55, 0xe8, 0x1e, 0xc7, 0x5d, 0x51, 0x0c, 0xe3, 0xba, 0x45, 0x35, 0xe6, 0x8b, 0xc7, 0x70, - 0x55, 0xa5, 0xbb, 0x6c, 0x8e, 0x67, 0x1e, 0x6b, 0x08, 0x1c, 0x30, 0xc8, 0x80, 0xf1, 0x7a, 0x88, - 0xc3, 0x3a, 0x71, 0xeb, 0xbe, 0xb7, 0x31, 0x7b, 0xa4, 0x3e, 0x9c, 0xa7, 0xf0, 0xd9, 0x70, 0x62, - 0x35, 0xd0, 0x1b, 0xfc, 0x36, 0x7d, 0x85, 0xbb, 0xbe, 0xfe, 0x41, 0x15, 0x9b, 0xf8, 0x22, 0xaa, - 0xd7, 0xbe, 0x6d, 0xd6, 0xb8, 0xad, 0xdf, 0xbb, 0xf8, 0xc2, 0xe7, 0xee, 0xa4, 0xca, 0xb8, 0xfa, - 0x27, 0xb5, 0xaf, 0x93, 0x69, 0x7e, 0x20, 0xaa, 0x99, 0x18, 0xf6, 0xc8, 0xdc, 0x4d, 0x96, 0xf7, - 0xc4, 0xc8, 0x4b, 0x97, 0xfe, 0xf7, 0x27, 0xfc, 0x27, 0xcc, 0xc5, 0x6b, 0xe2, 0x04, 0x11, 0xc5, - 0x6d, 0x1d, 0x25, 0x71, 0xbf, 0xcf, 0x82, 0x99, 0x63, 0x25, 0x14, 0x21, 0xf8, 0xab, 0x64, 0xdd, - 0xa6, 0xed, 0xf1, 0xcb, 0x65, 0x50, 0xdf, 0x29, 0x4f, 0x43, 0xd3, 0x27, 0x05, 0x85, 0x4a, 0x99, - 0x69, 0x37, 0xb6, 0xec, 0x87, 0xfb, 0xe6, 0xa9, 0x89, 0x7e, 0x89, 0x5f, 0x0d, 0x66, 0x93, 0x59, - 0x6d, 0x34, 0xcd, 0xbf, 0x0e, 0x28, 0x95, 0x78, 0xa5, 0x47, 0x4d, 0x1d, 0x35, 0x9d, 0x34, 0xc3, - 0x5b, 0x6d, 0xda, 0x6c, 0x55, 0x9b, 0x63, 0x1e, 0x54, 0xa2, 0xd3, 0xfc, 0x09, 0x20, 0x49, 0x0a, - 0x18, 0xb0, 0xca, 0x52, 0x02, 0x61, 0x66, 0x5b, 0x12, 0x03, 0xcb, 0xdf, 0x9d, 0x25, 0x88, 0x07, - 0x15, 0x4e, 0x04, 0xc8, 0xeb, 0x08, 0x81, 0x20, 0x14, 0x5c, 0xb8, 0x9b, 0xd9, 0x31, 0x62, 0xe2, - 0xdb, 0x84, 0x02, 0x01, 0x43, 0xbd, 0xe7, 0xcd, 0x7c, 0xbd, 0xcf, 0x93, 0x76, 0xa4, 0xf3, 0x03, - 0xb8, 0x94, 0xe1, 0x01, 0x23, 0x88, 0x7b, 0xe8, 0xc9, 0x97, 0x91, 0x3d, 0x04, 0x0c, 0xf9, 0x12, - 0x47, 0xb6, 0x35, 0x04, 0x12, 0xe7, 0x89, 0x0c, 0x82, 0x99, 0xe3, 0x7b, 0x2a, 0xf4, 0xcf, 0x14, - 0x34, 0x58, 0x43, 0x26, 0x28, 0xf5, 0x51, 0x75, 0x3b, 0x8e, 0x20, 0x48, 0xda, 0x72, 0x69, 0x1e, - 0x69, 0xf1, 0xc9, 0x61, 0x90, 0x6d, 0xa8, 0xa9, 0xe6, 0xfb, 0xb6, 0xea, 0xcf, 0x14, 0x3b, 0x3f, - 0x19, 0xbf, 0x88, 0x12, 0x37, 0x4e, 0xd0, 0xec, 0x56, 0x9b, 0x15, 0xc9, 0x41, 0xa0, 0xf1, 0xd3, - 0x86, 0x8d, 0x8e, 0xbf, 0xc7, 0xb2, 0xab, 0x5e, 0xa6, 0x99, 0x32, 0xcd, 0x33, 0x18, 0x6c, 0x9d, - 0xdc, 0xd9, 0x38, 0x3a, 0x63, 0x45, 0x09, 0x63, 0x75, 0xe0, 0x0a, 0xaa, 0x6a, 0xf5, 0x25, 0x7e, - 0xe7, 0xd6, 0xe3, 0xc4, 0x88, 0x0a, 0x10, 0xd1, 0xd2, 0x6f, 0x36, 0x8f, 0xff, 0xd6, 0xda, 0xee, - 0xd8, 0x66, 0x07, 0x88, 0x4f, 0xbc, 0xa7, 0xfa, 0x7a, 0x4a, 0x95, 0x67, 0xcf, 0x6b, 0x0a, 0xf0, - 0xf3, 0x25, 0x7a, 0x3f, 0x08, 0xd9, 0x6e, 0xf0, 0xa7, 0x26, 0xf7, 0xf2, 0xc5, 0x77, 0x9f, 0x82, - 0x4c, 0xde, 0xae, 0xf9, 0x2a, 0x66, 0x28, 0x9c, 0x45, 0xd6, 0xbc, 0x44, 0xc7, 0x57, 0xf1, 0x10, - 0x91, 0x9a, 0xd3, 0x4e, 0x9d, 0x70, 0x59, 0xa2, 0x2b, 0x0d, 0x7d, 0x27, 0x7b, 0xb0, 0xa8, 0xa9, - 0xcb, 0x0e, 0xfb, 0xe1, 0x9c, 0xb7, 0xeb, 0x53, 0xf1, 0x55, 0x4e, 0xd6, 0x7c, 0xc3, 0x8a, 0x08, - 0x44, 0x54, 0x65, 0x34, 0xfe, 0x7d, 0x7b, 0x0a, 0xa9, 0xa6, 0xdb, 0x7f, 0x81, 0x04, 0x1c, 0x8d, - 0xa6, 0xa6, 0x94, 0xa0, 0x93, 0xbc, 0x95, 0xb0, 0x4e, 0x3e, 0xf4, 0x39, 0x78, 0x59, 0xc5, 0x9c, - 0x30, 0x23, 0xe0, 0x76, 0x70, 0xbc, 0xc9, 0xe9, 0xde, 0xdc, 0x57, 0x88, 0x08, 0x02, 0x83, 0xa5, - 0xf3, 0x53, 0x4c, 0xcd, 0xd2, 0xf1, 0x21, 0x91, 0xa2, 0x05, 0x06, 0x7c, 0x6a, 0x45, 0xd5, 0x54, - 0x5c, 0x2c, 0x70, 0x49, 0x50, 0xf5, 0xab, 0x34, 0xf7, 0xa1, 0x01, 0xe0, 0x50, 0x8c, 0x5c, 0xec, - 0xe7, 0xea, 0xe8, 0xf0, 0x88, 0x44, 0x15, 0xc5, 0xd4, 0x9d, 0xdc, 0x58, 0x0b, 0xf0, 0xc9, 0xbe, - 0x42, 0xe0, 0xd2, 0xa6, 0xe9, 0x6e, 0x7f, 0x43, 0xe0, 0x35, 0x4a, 0xb0, 0x80, 0x44, 0x41, 0xdd, - 0x7b, 0xcb, 0x2e, 0x19, 0x05, 0x84, 0xcf, 0x2c, 0x8c, 0xdd, 0x8e, 0x4a, 0xa7, 0x75, 0x92, 0x2d, - 0xbb, 0x9e, 0x47, 0x88, 0x10, 0x30, 0x88, 0xb7, 0x7a, 0xae, 0x00, 0xfe, 0xea, 0x56, 0xa0, 0x44, - 0xef, 0xd4, 0xaa, 0xfa, 0x3b, 0xcb, 0x94, 0x4a, 0x00, 0x50, 0x65, 0xa8, 0x88, 0x05, 0x47, 0x7c, - 0x78, 0x23, 0xc1, 0xaf, 0x62, 0x1d, 0xe1, 0x02, 0x8c, 0x62, 0xad, 0x5a, 0xb9, 0x90, 0xa5, 0xcb, - 0xbe, 0x13, 0xad, 0x56, 0xb5, 0xf0, 0x95, 0x75, 0xad, 0x7c, 0x5e, 0x9a, 0xe4, 0xff, 0x9a, 0x9b, - 0xfc, 0x48, 0x21, 0x13, 0x51, 0xea, 0x77, 0xf8, 0x2c, 0x33, 0x18, 0xac, 0x56, 0x7e, 0xe2, 0xb2, - 0xf2, 0xc6, 0x28, 0xc9, 0x40, 0x5b, 0x03, 0xc0, 0x9c, 0x89, 0x6b, 0xe3, 0xda, 0x7f, 0x85, 0x0c, - 0x2b, 0x10, 0xa4, 0x32, 0xb6, 0x53, 0x03, 0x00, 0xf2, 0xb4, 0x0c, 0x04, 0xe8, 0x00, 0x13, 0x2b, - 0xa3, 0x29, 0xc8, 0x00, 0x39, 0x36, 0x75, 0x00, 0x0d, 0xf3, 0xaf, 0x0e, 0x0b, 0x48, 0x03, 0x41, - 0xc0, 0x00, 0x9b, 0x18, 0x71, 0x83, 0x54, 0x10, 0x69, 0x39, 0x00, 0x68, 0x71, 0x7c, 0x9d, 0x23, - 0xe7, 0x8e, 0xe7, 0x9b, 0x35, 0x9a, 0x92, 0x64, 0x55, 0xf0, 0xa4, 0xa4, 0x83, 0x03, 0x23, 0xa7, - 0x19, 0x6c, 0x40, 0x2c, 0x16, 0xcb, 0x6f, 0x66, 0x64, 0xb6, 0x0b, 0x10, 0xd4, 0x17, 0x16, 0x98, - 0x4e, 0x35, 0x5f, 0x1e, 0x7f, 0xb2, 0xb9, 0x73, 0x5c, 0xa5, 0x5b, 0x5f, 0x05, 0x96, 0xcd, 0x8d, - 0xcd, 0x31, 0x3c, 0x4e, 0x62, 0x52, 0x30, 0xaa, 0xa9, 0x4c, 0xbc, 0x15, 0x52, 0xdd, 0x50, 0xd2, - 0x6a, 0xd9, 0x36, 0x27, 0x3e, 0x09, 0x24, 0xc2, 0x37, 0xef, 0x85, 0x09, 0x9b, 0x71, 0xa8, 0x07, - 0xdd, 0xa4, 0xca, 0xce, 0x8e, 0xe7, 0x07, 0x22, 0x42, 0x98, 0xc3, 0x82, 0x22, 0x45, 0x90, 0x76, - 0x6a, 0x3d, 0xe6, 0xa8, 0x8b, 0x00, 0x18, 0xe4, 0xf4, 0x15, 0x49, 0x31, 0xfb, 0x0a, 0x95, 0x09, - 0x49, 0x1e, 0x0e, 0x07, 0x5b, 0x5a, 0x9d, 0x07, 0x3c, 0x10, 0x05, 0x08, 0x53, 0x58, 0x39, 0xe1, - 0x7d, 0x32, 0xe4, 0x48, 0x39, 0x6c, 0x56, 0xa2, 0x25, 0x0f, 0x8d, 0xea, 0xd4, 0xdc, 0x91, 0xb1, - 0xe8, 0xef, 0x04, 0x21, 0x01, 0xb2, 0xc0, 0x32, 0xc0, 0x32, 0x50, 0xa9, 0xc7, 0x10, 0x05, 0x02, - 0xd7, 0x90, 0x40, 0x8f, 0xb0, 0x49, 0x12, 0xd6, 0x3c, 0x28, 0x00, 0xd4, 0x35, 0x42, 0x04, 0x41, - 0xa8, 0x70, 0x02, 0xc8, 0xb0, 0x11, 0x10, 0xe1, 0xc5, 0x7f, 0x27, 0x2f, 0x1e, 0x50, 0xe1, 0x11, - 0xb9, 0x0e, 0xe2, 0xd7, 0x55, 0x89, 0x60, 0xc1, 0x12, 0xbe, 0x34, 0x80, 0xee, 0x58, 0x2e, 0x1e, - 0xad, 0xe8, 0xb1, 0x00, 0xb1, 0x66, 0x0f, 0x00, 0x03, 0x0c, 0x15, 0x24, 0xba, 0x5f, 0x4f, 0x11, - 0x05, 0x3f, 0x6c, 0x6f, 0x0c, 0x51, 0xf0, 0xc8, 0x2b, 0xca, 0xbb, 0x0a, 0x92, 0x79, 0x2c, 0x69, - 0xb0, 0x5d, 0x70, 0x4d, 0x8d, 0x12, 0x5e, 0x45, 0xd1, 0xd6, 0xb5, 0xcf, 0xbe, 0x14, 0x28, 0x71, - 0x19, 0xcf, 0x3d, 0xe9, 0x18, 0xc5, 0xc8, 0x63, 0x1e, 0xcc, 0xd7, 0x05, 0x00, 0xb8, 0xc6, 0xb9, - 0x54, 0x9c, 0x29, 0x22, 0x8e, 0x3d, 0x56, 0x83, 0x14, 0x8d, 0x66, 0xac, 0xc8, 0xbf, 0x84, 0x23, - 0x21, 0xf2, 0xca, 0x93, 0xc3, 0x4b, 0x6c, 0x26, 0x09, 0x87, 0x8a, 0xf7, 0x6e, 0xc6, 0x36, 0x73, - 0xe0, 0x8c, 0xb7, 0x86, 0x89, 0x2a, 0x08, 0x74, 0x67, 0x4b, 0xcb, 0x77, 0xd7, 0x29, 0x5a, 0xad, - 0x77, 0x7b, 0xc9, 0xc2, 0x04, 0x67, 0x96, 0x09, 0xb6, 0xad, 0x4b, 0x03, 0x9a, 0x61, 0x7e, 0x32, - 0x4c, 0xeb, 0x4a, 0x79, 0x35, 0x1c, 0xf7, 0x24, 0xcf, 0x17, 0xd9, 0x84, 0x9b, 0xff, 0x55, 0x54, - 0xc2, 0x7b, 0x5b, 0xe3, 0xcf, 0x5a, 0x4b, 0xae, 0x6c, 0xf8, 0xbf, 0x33, 0x0a, 0x3b, 0x49, 0x39, - 0xf8, 0x91, 0x21, 0x4e, 0x1f, 0x53, 0x26, 0x9c, 0x69, 0xc3, 0xd7, 0x7b, 0x29, 0x57, 0x0c, 0x21, - 0x03, 0x16, 0x2a, 0xef, 0x8c, 0x14, 0xf8, 0x24, 0x17, 0x78, 0x70, 0xc2, 0x96, 0x70, 0x49, 0xe9, - 0x3c, 0x4d, 0x5a, 0x67, 0x92, 0x85, 0xb1, 0x82, 0x72, 0xd3, 0x4c, 0x3f, 0xc2, 0x94, 0x56, 0xb8, - 0xf1, 0xf4, 0x0d, 0xc5, 0xc1, 0x7e, 0x70, 0x27, 0x03, 0xc1, 0xc3, 0xdf, 0x43, 0x68, 0x72, 0x51, - 0xcd, 0x0b, 0x19, 0xef, 0x2c, 0x6f, 0xef, 0xf6, 0x57, 0xb1, 0xfe, 0xed, 0x17, 0x2d, 0x78, 0x25, - 0xb9, 0x7d, 0xa7, 0xfd, 0x7e, 0x2b, 0x84, 0x3c, 0x14, 0x9e, 0x46, 0x4c, 0x08, 0x0d, 0x8d, 0xf7, - 0x9b, 0x65, 0xec, 0x74, 0xce, 0x27, 0xf8, 0x22, 0xa4, 0x92, 0x32, 0x55, 0xfe, 0x17, 0x90, 0x82, - 0x2f, 0x17, 0x37, 0x16, 0xbd, 0x28, 0x38, 0x1d, 0x00, 0x55, 0x0a, 0x42, 0xb1, 0xa7, 0x0a, 0xbd, - 0xc1, 0x03, 0x87, 0xcc, 0x10, 0x46, 0x98, 0x3a, 0x60, 0x4a, 0x95, 0x49, 0x21, 0xc0, 0x41, 0x3b, - 0x20, 0x46, 0x5f, 0x52, 0x5e, 0x13, 0x01, 0xe0, 0xf3, 0x02, 0x50, 0xf4, 0x04, 0xac, 0xde, 0x61, - 0xca, 0x6a, 0x0e, 0xcc, 0x5c, 0x82, 0x16, 0xd4, 0x28, 0x18, 0x0a, 0x37, 0x80, 0x00, 0x40, 0x07, - 0x03, 0xf2, 0x0c, 0x00, 0x14, 0x01, 0xac, 0xb8, 0x3b, 0xf0, 0x3b, 0xd8, 0xaf, 0x7d, 0x37, 0x63, - 0x50, 0xf2, 0x80, 0x08, 0x68, 0x9b, 0x62, 0x28, 0xb9, 0xac, 0xbf, 0x96, 0xef, 0x3f, 0x2d, 0x62, - 0x5f, 0x59, 0x0d, 0x28, 0xed, 0xbb, 0x64, 0xe7, 0xe7, 0x1a, 0xd6, 0xad, 0x41, 0x78, 0xe0, 0x38, - 0xb7, 0x69, 0x34, 0xf4, 0xe1, 0xc5, 0x00, 0x26, 0xa1, 0xfe, 0xe5, 0x20, 0x8b, 0xb9, 0x96, 0xad, - 0xdf, 0x2d, 0x83, 0xd7, 0x8a, 0x44, 0x74, 0x5b, 0x7e, 0x3b, 0x05, 0x68, 0x1e, 0x17, 0x78, 0x59, - 0x97, 0x96, 0x16, 0x8f, 0xc6, 0xd5, 0x54, 0x3b, 0x18, 0x9e, 0x02, 0xea, 0x46, 0x51, 0xbc, 0x37, - 0x80, 0xf8, 0x7a, 0x59, 0x18, 0x9a, 0xf4, 0x0f, 0x9e, 0xa0, 0xe0, 0x58, 0x2f, 0x10, 0x01, 0x2b, - 0x14, 0x40, 0x4a, 0xba, 0x00, 0x95, 0x82, 0x64, 0xc1, 0x61, 0x31, 0x72, 0x68, 0x55, 0x52, 0xd5, - 0xf8, 0x60, 0x6c, 0xb5, 0x61, 0xa6, 0x52, 0x70, 0x0b, 0x45, 0xb0, 0x3c, 0x53, 0x7c, 0xc8, 0xe6, - 0xea, 0x6a, 0x21, 0xd9, 0x14, 0x7a, 0x84, 0xdc, 0xe4, 0x2a, 0x58, 0x00, 0x6f, 0x0a, 0x4c, 0xe9, - 0x3a, 0x02, 0xa5, 0x80, 0x6f, 0x07, 0x0e, 0x0e, 0x70, 0x45, 0x79, 0xd4, 0xc3, 0x5f, 0x47, 0x84, - 0x42, 0x03, 0x64, 0x01, 0xa3, 0x2b, 0x53, 0x02, 0x81, 0x1f, 0xb3, 0xb9, 0xfc, 0xc1, 0x75, 0x3c, - 0x38, 0xd8, 0x7e, 0x59, 0xca, 0x49, 0x81, 0x40, 0xb6, 0x34, 0xc4, 0xb3, 0x90, 0xb1, 0x43, 0x38, - 0x4f, 0x8a, 0xb2, 0x49, 0x38, 0xf0, 0x52, 0x08, 0x02, 0x84, 0x14, 0xd2, 0x81, 0xe1, 0x79, 0x2e, - 0x33, 0x6c, 0x68, 0x68, 0xc2, 0xf0, 0x35, 0x4d, 0x52, 0x64, 0xe0, 0x70, 0x71, 0x17, 0x0e, 0xa0, - 0x25, 0x26, 0x1c, 0x82, 0xa0, 0x1f, 0x36, 0x05, 0x64, 0x30, 0x52, 0x0c, 0x02, 0x99, 0x60, 0x34, - 0x4e, 0x94, 0x4a, 0x40, 0xe8, 0xa2, 0xd7, 0x24, 0x98, 0x5c, 0x3d, 0xff, 0x8b, 0xf4, 0x4a, 0xcb, - 0x4b, 0x62, 0x7e, 0x14, 0x26, 0xac, 0x4a, 0xf8, 0x3f, 0x1f, 0x98, 0x87, 0xe1, 0xc8, 0x1d, 0x0e, - 0xc5, 0x3e, 0x24, 0x15, 0xc5, 0x00, 0x53, 0x61, 0x61, 0x49, 0x82, 0x82, 0x90, 0xd1, 0x4e, 0xab, - 0x70, 0x7d, 0xcf, 0x9d, 0xf0, 0xa4, 0xf7, 0xb7, 0xca, 0x91, 0x1d, 0x9c, 0x38, 0x70, 0xe0, 0x87, - 0x96, 0x03, 0x0a, 0x03, 0x2c, 0x87, 0x00, 0xd9, 0x60, 0xcf, 0x70, 0xa0, 0x33, 0xc3, 0x8d, 0x91, - 0x1a, 0xf0, 0x80, 0x80, 0x58, 0x7d, 0x0a, 0x45, 0x0f, 0xcb, 0x47, 0xa4, 0x5b, 0x0f, 0x22, 0x0a, - 0xcb, 0x88, 0x12, 0x14, 0xb9, 0x72, 0xf2, 0x59, 0x7b, 0x09, 0x6b, 0x23, 0x60, 0x9e, 0x0c, 0x78, - 0x63, 0xab, 0x13, 0x98, 0x8b, 0xba, 0xa3, 0x39, 0xce, 0x48, 0x98, 0x70, 0xc0, 0x91, 0x91, 0xda, - 0xda, 0x41, 0x2a, 0x35, 0x47, 0x0b, 0x0c, 0x3d, 0x83, 0xfe, 0xea, 0x65, 0xb7, 0x46, 0x34, 0xa6, - 0x2d, 0x7e, 0xaf, 0xc5, 0xf9, 0x63, 0x82, 0x40, 0x75, 0x40, 0xe2, 0x2c, 0xf0, 0x51, 0xc0, 0x39, - 0x1f, 0xad, 0x40, 0x32, 0x6e, 0x29, 0x87, 0xf1, 0xdc, 0x8e, 0xee, 0x4f, 0xa9, 0x3a, 0x2b, 0x15, - 0xc2, 0x64, 0x5b, 0xc9, 0xfa, 0xe0, 0x86, 0x4c, 0xa5, 0x69, 0x38, 0xbb, 0xdd, 0xd2, 0x72, 0xff, - 0xc2, 0x92, 0xdb, 0xe0, 0x93, 0x4c, 0xc4, 0xa9, 0x43, 0xbd, 0xe6, 0x91, 0x10, 0xb1, 0x58, 0x6d, - 0xc2, 0xa7, 0x55, 0xb9, 0xb4, 0xc7, 0xc7, 0x13, 0x71, 0xd6, 0xaa, 0xe3, 0x71, 0x96, 0x8b, 0x75, - 0xf8, 0xc9, 0x44, 0x9b, 0xdb, 0x66, 0x5d, 0xc9, 0xf7, 0x3e, 0x5e, 0x68, 0xf8, 0xa3, 0xa9, 0x32, - 0xa9, 0xed, 0x32, 0x27, 0xf1, 0x10, 0xa6, 0x32, 0x69, 0x68, 0x58, 0xf5, 0x15, 0xf1, 0xdb, 0x81, - 0x05, 0xc5, 0x2f, 0x95, 0xc6, 0xac, 0xf1, 0xbe, 0x21, 0xe3, 0x2a, 0x1a, 0x21, 0xb6, 0x8a, 0x1a, - 0xa9, 0xf5, 0xb9, 0xd5, 0x52, 0x22, 0x6b, 0xc8, 0x2e, 0xb8, 0xc4, 0xf8, 0xde, 0xa5, 0xa5, 0x8f, - 0x9a, 0x16, 0xf2, 0xbc, 0x90, 0x8a, 0xb1, 0x9b, 0xd3, 0xb8, 0x4d, 0x5e, 0xf8, 0xbe, 0x23, 0xbf, - 0xc1, 0x35, 0xbb, 0xa8, 0x8d, 0x6b, 0x3e, 0xdd, 0xf7, 0xdc, 0xb8, 0x4e, 0x17, 0xc3, 0x23, 0x40, - 0xfe, 0x3e, 0x35, 0x41, 0x50, 0x10, 0xda, 0x51, 0x0d, 0xb5, 0xf9, 0x33, 0xde, 0x1c, 0x44, 0x04, - 0x92, 0x20, 0x47, 0x98, 0x29, 0x2d, 0x61, 0xca, 0xc5, 0x06, 0xe0, 0x3f, 0x57, 0xf2, 0x50, 0x07, - 0xe7, 0xd9, 0x41, 0xf8, 0xf0, 0x01, 0xda, 0xec, 0x9d, 0xf2, 0xbc, 0x15, 0xd8, 0x7e, 0x54, 0x52, - 0x6a, 0x5d, 0x86, 0x19, 0xa2, 0x64, 0x27, 0xa5, 0x71, 0x8e, 0x5d, 0xac, 0x31, 0xf8, 0x12, 0x46, - 0x94, 0x68, 0x03, 0xce, 0x31, 0xd0, 0xed, 0xdd, 0x9c, 0x58, 0x41, 0xc5, 0xa7, 0x11, 0xda, 0x7a, - 0xa5, 0xd1, 0x93, 0xc3, 0x42, 0xf8, 0x8b, 0x4d, 0x30, 0x3b, 0xca, 0x4e, 0x59, 0x0f, 0x24, 0x4c, - 0xd8, 0xa9, 0xb3, 0x59, 0xbe, 0x20, 0x48, 0xd2, 0x1e, 0xd8, 0x74, 0xcf, 0xc3, 0x54, 0x10, 0xf6, - 0xc0, 0x33, 0x60, 0xf9, 0x42, 0xbd, 0x1a, 0xaf, 0x67, 0x62, 0x3f, 0x0c, 0x42, 0x19, 0x20, 0xa6, - 0xca, 0x10, 0x50, 0x2d, 0x39, 0x3e, 0xc1, 0x96, 0xc8, 0xf7, 0x07, 0xf8, 0x3c, 0xf3, 0x41, 0x9f, - 0xe5, 0x3f, 0x33, 0x93, 0xbd, 0xe1, 0x00, 0xc8, 0xd9, 0xf8, 0xf7, 0xc9, 0x6a, 0x5d, 0x8f, 0xf4, - 0x72, 0x0b, 0x0b, 0x71, 0x93, 0x9f, 0x0a, 0xf5, 0x51, 0x0b, 0x93, 0x50, 0xf7, 0xe4, 0xa0, 0x00, - 0xf1, 0x48, 0x3f, 0x03, 0xf0, 0x2e, 0xeb, 0x69, 0x8b, 0x74, 0xcf, 0xcf, 0x63, 0x81, 0x80, 0x14, - 0x8d, 0x86, 0x48, 0x82, 0x4a, 0xd8, 0x00, 0x62, 0x05, 0x05, 0xa9, 0x42, 0x34, 0xc0, 0x9b, 0x20, - 0x54, 0xe5, 0x4e, 0x00, 0x5c, 0x91, 0x6d, 0x76, 0x80, 0x59, 0x7a, 0x14, 0x13, 0xba, 0x7b, 0x80, - 0x04, 0x0d, 0xc0, 0x0f, 0xab, 0xa1, 0x6d, 0x85, 0xcb, 0xf0, 0x64, 0xda, 0x02, 0x88, 0x0d, 0x48, - 0x1d, 0x7c, 0x1a, 0xae, 0x2a, 0x7e, 0x51, 0xcc, 0xa6, 0x49, 0xba, 0xca, 0xc3, 0x73, 0x81, 0x73, - 0x6d, 0xd8, 0x17, 0xf9, 0x92, 0xfc, 0xff, 0xd6, 0x59, 0xcf, 0xc6, 0xae, 0x58, 0x58, 0x2e, 0xb8, - 0x58, 0x69, 0xaa, 0xe1, 0xdb, 0x9c, 0xc1, 0x31, 0x58, 0x5b, 0x3e, 0xc0, 0x3a, 0xd8, 0x43, 0x9f, - 0x1f, 0xfc, 0x3a, 0xa0, 0x93, 0x72, 0x81, 0x68, 0x17, 0x18, 0x7f, 0xfd, 0xf1, 0x8a, 0xbd, 0x69, - 0x4c, 0x9c, 0xd5, 0x4b, 0x6e, 0x8b, 0xa2, 0xb7, 0x30, 0xa8, 0xd6, 0x0c, 0xae, 0x42, 0xc0, 0xbe, - 0x54, 0x00, 0x09, 0x49, 0x00, 0xc3, 0x90, 0xd3, 0xa6, 0x12, 0x03, 0xf0, 0xac, 0x1c, 0xba, 0x69, - 0x37, 0x88, 0x8d, 0x20, 0x68, 0x1d, 0x4a, 0xa5, 0x80, 0x5a, 0xd3, 0x81, 0xaa, 0x0a, 0xd2, 0xb0, - 0x19, 0x53, 0xed, 0x83, 0xd0, 0xe9, 0x86, 0xb3, 0x4b, 0x29, 0xa9, 0x7b, 0xcd, 0xae, 0xa6, 0x26, - 0x7d, 0x1e, 0xb6, 0xe6, 0x35, 0x22, 0x02, 0x55, 0xf4, 0x86, 0x97, 0xc3, 0xaa, 0x00, 0xb3, 0x85, - 0xed, 0xd5, 0x5c, 0x8e, 0xeb, 0x7e, 0x26, 0x07, 0x85, 0x43, 0x46, 0x5a, 0xf8, 0xed, 0xce, 0x68, - 0x0d, 0x68, 0x80, 0x5e, 0xc6, 0x65, 0x69, 0xde, 0x6a, 0xff, 0x3a, 0xe2, 0x97, 0x8c, 0x73, 0x79, - 0xee, 0x89, 0x77, 0xe2, 0x06, 0x74, 0xb5, 0x0c, 0xae, 0xb7, 0x41, 0x99, 0x57, 0x37, 0xd9, 0x4f, - 0x89, 0x8e, 0x28, 0x8e, 0x32, 0x19, 0x45, 0xb2, 0xfd, 0x72, 0x11, 0x21, 0x0e, 0x24, 0x40, 0x6a, - 0x7c, 0xbd, 0x13, 0x2f, 0x4c, 0x5b, 0xf1, 0x10, 0xf1, 0x2a, 0x9a, 0x8f, 0x2c, 0x9c, 0xbe, 0xee, - 0x7e, 0x80, 0x1f, 0x10, 0x74, 0x1f, 0x7f, 0x84, 0x02, 0x90, 0xe7, 0x72, 0x40, 0x5b, 0x47, 0x90, - 0x0a, 0x4b, 0x3a, 0x4e, 0x7d, 0x48, 0xaa, 0x26, 0x36, 0xaf, 0xd4, 0x9e, 0x94, 0x10, 0xa8, 0x0b, - 0xd5, 0x49, 0x8f, 0xc4, 0x08, 0x05, 0x84, 0x3f, 0xa8, 0x2d, 0xe8, 0xd5, 0xa6, 0x22, 0x55, 0x08, - 0xb7, 0x05, 0x5f, 0x08, 0x0b, 0x63, 0x1b, 0x54, 0x23, 0xdd, 0xbe, 0xfd, 0xa1, 0x05, 0x89, 0xf6, - 0x86, 0xf1, 0x24, 0x55, 0xd5, 0x6b, 0xe4, 0xee, 0xfe, 0x5c, 0x99, 0xf9, 0x09, 0x7b, 0x9b, 0xb2, - 0xa7, 0x4d, 0xdf, 0x04, 0x12, 0x7a, 0x94, 0x83, 0x6d, 0xa3, 0x9c, 0x1c, 0x31, 0xc7, 0x55, 0x5b, - 0x7f, 0xe5, 0x9a, 0x9a, 0x03, 0xf0, 0x57, 0xac, 0xbd, 0xaa, 0x92, 0x8f, 0xb5, 0x85, 0xf2, 0xfa, - 0xe1, 0xf1, 0x84, 0xd3, 0x2e, 0x29, 0x7b, 0x73, 0x8e, 0xa9, 0xa0, 0xca, 0x73, 0xa8, 0xf8, 0xef, - 0x1d, 0x57, 0x3e, 0x5f, 0xc8, 0xf4, 0xd7, 0x11, 0x1c, 0xf4, 0xbf, 0x2d, 0x5a, 0x46, 0xbe, 0x13, - 0xf3, 0x62, 0xaa, 0xef, 0x94, 0x4b, 0x69, 0xaf, 0xc7, 0x90, 0x56, 0xd9, 0x5b, 0x9a, 0x0b, 0xea, - 0x2f, 0x89, 0x10, 0x14, 0x91, 0x96, 0x87, 0x0e, 0x2e, 0x20, 0xb7, 0x41, 0x1d, 0x00, 0xc1, 0xb8, - 0xaa, 0xa3, 0x8d, 0x07, 0x81, 0x83, 0x3b, 0x8b, 0xb3, 0xea, 0x43, 0xa7, 0x50, 0xd4, 0xa1, 0xb0, - 0x00, 0xc9, 0x88, 0xcd, 0x9d, 0x7a, 0xcd, 0xc7, 0x98, 0x38, 0x38, 0x3f, 0x02, 0xc1, 0xa2, 0x7d, - 0x30, 0xf9, 0x64, 0x5e, 0x72, 0xa4, 0xa3, 0x76, 0xa5, 0xac, 0x51, 0x79, 0x78, 0x81, 0xa2, 0x01, - 0xc8, 0xb0, 0xac, 0x90, 0x89, 0xb4, 0x51, 0x33, 0x9b, 0x09, 0xf7, 0x31, 0x3e, 0x27, 0xce, 0x29, - 0x13, 0x81, 0xe2, 0xeb, 0x46, 0xe4, 0xa0, 0xcc, 0x35, 0xc1, 0xde, 0x7e, 0x19, 0x51, 0x16, 0x94, - 0xb1, 0x22, 0x43, 0xb2, 0x1e, 0xc8, 0xb7, 0xb9, 0x30, 0x0e, 0x48, 0xc0, 0x46, 0x30, 0x73, 0xee, - 0x87, 0x36, 0xbb, 0x24, 0x58, 0xca, 0x15, 0x27, 0xff, 0xc3, 0x78, 0x01, 0x7f, 0x3c, 0xc6, 0xc0, - 0x97, 0x58, 0x11, 0x8d, 0xc5, 0x47, 0xa6, 0xd4, 0xc4, 0x07, 0xc7, 0x0a, 0x31, 0x0c, 0x0d, 0xcf, - 0x03, 0x01, 0x72, 0x50, 0xf6, 0x20, 0x60, 0x5a, 0xce, 0x18, 0x01, 0xc0, 0x56, 0x86, 0x99, 0x43, - 0x07, 0xfa, 0xdb, 0x0c, 0xb0, 0x8c, 0x76, 0xe5, 0x3c, 0x0d, 0x20, 0xe0, 0x69, 0xda, 0x46, 0xb1, - 0xf9, 0x9c, 0x8f, 0x22, 0xc3, 0x53, 0xce, 0xa0, 0x67, 0xb7, 0xdc, 0x6a, 0x85, 0xc0, 0x95, 0x9d, - 0x4e, 0xc0, 0xd1, 0x7a, 0x6b, 0x16, 0xf8, 0x9c, 0x6a, 0x38, 0x1e, 0xcd, 0x20, 0xdd, 0x68, 0x2d, - 0x96, 0x8f, 0x8a, 0x99, 0x73, 0x5d, 0xb6, 0x42, 0x7c, 0x39, 0x20, 0x2f, 0x35, 0x10, 0x27, 0x98, - 0x4a, 0x5f, 0x3d, 0xbc, 0x27, 0x4e, 0x39, 0xc3, 0x78, 0x17, 0x81, 0x24, 0x3e, 0x35, 0xba, 0x2a, - 0x70, 0xfa, 0x12, 0x00, 0x74, 0x64, 0x07, 0x45, 0xc0, 0x90, 0x14, 0x06, 0x56, 0x0c, 0x47, 0xd4, - 0xc0, 0x28, 0xbb, 0xe0, 0x26, 0x00, 0x54, 0x0d, 0x8a, 0x44, 0x8e, 0xc1, 0x01, 0xb2, 0xbb, 0x89, - 0xaa, 0x0e, 0x2d, 0x04, 0x12, 0xce, 0x8c, 0xec, 0xa3, 0x24, 0xc0, 0x0e, 0x6f, 0x22, 0xdb, 0x3b, - 0x96, 0x85, 0x84, 0xc1, 0x50, 0x51, 0x0b, 0xca, 0x05, 0xda, 0xca, 0x8f, 0x2c, 0xd1, 0x01, 0x20, - 0x4f, 0xa8, 0x0c, 0xca, 0x18, 0x00, 0x35, 0xfc, 0x6c, 0xed, 0xd9, 0x15, 0x60, 0xc4, 0xf9, 0x1a, - 0xfe, 0x87, 0x14, 0x0d, 0x3d, 0x55, 0xc8, 0xe4, 0x0b, 0xc3, 0x15, 0xf3, 0xfd, 0x35, 0xf7, 0xe3, - 0xbc, 0x0e, 0xc4, 0xc6, 0x0b, 0x78, 0xfc, 0x5b, 0x63, 0x4c, 0xaf, 0xe9, 0x28, 0x9a, 0x69, 0xa6, - 0x96, 0xf9, 0x67, 0x1b, 0x4d, 0x2b, 0x88, 0x06, 0x74, 0x5c, 0x0f, 0x35, 0xdf, 0xfe, 0x24, 0x15, - 0xe8, 0x54, 0xaa, 0x9d, 0xb1, 0x58, 0xa4, 0x20, 0x26, 0x10, 0x6a, 0xaf, 0x9f, 0x2d, 0x03, 0xe3, - 0x78, 0x90, 0xc6, 0xd2, 0x63, 0x8d, 0x63, 0xb9, 0x43, 0xf7, 0xe5, 0xed, 0xff, 0x84, 0xcc, 0xde, - 0xab, 0x2e, 0x36, 0xfe, 0xb8, 0xdc, 0xb9, 0x09, 0xcf, 0xb8, 0x1c, 0x7e, 0xe0, 0x80, 0x77, 0x8a, - 0xda, 0x4e, 0x68, 0xca, 0xfb, 0x19, 0x65, 0x47, 0x15, 0xd5, 0xff, 0x88, 0x84, 0xc6, 0x8f, 0xbf, - 0x47, 0x31, 0x58, 0xe3, 0xde, 0x24, 0x40, 0x5c, 0x40, 0x2e, 0x88, 0xa4, 0x28, 0xf8, 0x0e, 0xf6, - 0x28, 0x9a, 0xab, 0x54, 0x1a, 0xd6, 0x31, 0xdf, 0xe0, 0x8c, 0x59, 0x58, 0x7e, 0xf1, 0xbc, 0x86, - 0x99, 0x8f, 0xd9, 0x35, 0x52, 0x75, 0xef, 0x94, 0x6e, 0xad, 0x2e, 0x2c, 0x62, 0x75, 0xb4, 0xd2, - 0xa4, 0xf8, 0x21, 0xf3, 0x78, 0xbe, 0x14, 0xb1, 0x31, 0x2a, 0x51, 0x4c, 0xe7, 0x30, 0xb6, 0xac, - 0xa8, 0xc4, 0x50, 0x95, 0x9f, 0x10, 0x25, 0xa3, 0x47, 0x71, 0xd5, 0xfe, 0x13, 0xf6, 0xda, 0x4d, - 0xbf, 0xc7, 0x55, 0x66, 0xc2, 0x72, 0xb0, 0x91, 0x76, 0xda, 0xaa, 0x78, 0x53, 0xf1, 0x82, 0x1a, - 0x1b, 0x5a, 0x3a, 0x61, 0x7b, 0x9d, 0xf8, 0xeb, 0xe5, 0x51, 0xc2, 0x36, 0x90, 0xbd, 0x20, 0x4f, - 0xe8, 0x86, 0xea, 0xf8, 0x50, 0xb4, 0x92, 0x66, 0xe7, 0x83, 0x14, 0x07, 0x42, 0x97, 0x93, 0x5e, - 0x3a, 0x35, 0x14, 0xe3, 0xaf, 0x19, 0x3b, 0x2f, 0xae, 0x1f, 0x29, 0x35, 0x52, 0xe2, 0x42, 0x94, - 0xf6, 0xa6, 0xa4, 0xc8, 0x2f, 0x24, 0x33, 0xc3, 0x4c, 0xea, 0x3b, 0xe1, 0xea, 0x90, 0xc3, 0x01, - 0xca, 0x06, 0xe3, 0x28, 0x50, 0x85, 0x39, 0x2b, 0xf4, 0x8f, 0x5c, 0xa1, 0x93, 0x8b, 0xd7, 0xdc, - 0x5e, 0xbc, 0x40, 0x21, 0x2a, 0xfb, 0xb4, 0x79, 0x98, 0xc4, 0x61, 0xb6, 0x40, 0x00, 0xe1, 0x2e, - 0xcb, 0xb8, 0x5e, 0xea, 0x4f, 0x07, 0x60, 0xe6, 0x02, 0xb5, 0x5a, 0x96, 0x6d, 0x98, 0xfb, 0x96, - 0x62, 0x07, 0xa1, 0x1f, 0x08, 0x1e, 0x48, 0x0e, 0x17, 0x71, 0xf8, 0x2a, 0xe3, 0xcd, 0x04, 0xb8, - 0x38, 0x18, 0xee, 0xa5, 0xe7, 0x30, 0x65, 0x08, 0xc8, 0xb1, 0x1a, 0x2e, 0x19, 0x0e, 0xdf, 0xea, - 0x28, 0x08, 0xab, 0x5d, 0xd6, 0x78, 0x00, 0x13, 0x81, 0x41, 0x35, 0x3c, 0x01, 0xc1, 0xd0, 0x3e, - 0x0f, 0x80, 0x84, 0xc4, 0x4f, 0x1e, 0xed, 0x85, 0x77, 0xc4, 0x82, 0x02, 0xd3, 0x72, 0xb2, 0xaa, - 0x01, 0xdc, 0x93, 0x50, 0x79, 0x63, 0xea, 0xd6, 0xa8, 0x6d, 0xff, 0x10, 0xd4, 0xbb, 0xe0, 0xa0, - 0x18, 0x0d, 0x23, 0xe0, 0xe1, 0xe3, 0x4d, 0x1b, 0xf9, 0x6c, 0x3b, 0x06, 0xaf, 0xc0, 0xed, 0xac, - 0x63, 0x19, 0xad, 0x05, 0x5c, 0x55, 0x64, 0xf1, 0xcf, 0xa5, 0x86, 0x2d, 0x8e, 0x01, 0xa9, 0x14, - 0x84, 0x0a, 0xac, 0x60, 0xbb, 0x20, 0x67, 0x74, 0xc4, 0x30, 0x2a, 0x31, 0x8a, 0xcb, 0x5f, 0x0c, - 0xb1, 0x20, 0x0c, 0x4f, 0x95, 0x46, 0x04, 0x3e, 0x7f, 0xd6, 0x6e, 0x6e, 0x5e, 0xff, 0x6d, 0xb9, - 0x2a, 0xc4, 0x46, 0x98, 0x25, 0x1a, 0x30, 0x00, 0x10, 0x05, 0x8c, 0xa2, 0x83, 0x6b, 0x17, 0xa0, - 0x63, 0xe8, 0xd2, 0xb8, 0x23, 0xd3, 0x3f, 0x1c, 0x90, 0xb1, 0xa8, 0xf2, 0x9d, 0xf7, 0xd6, 0xa0, - 0xd8, 0x09, 0xdb, 0xf1, 0x2f, 0xb7, 0xf1, 0x3b, 0xaa, 0x95, 0xf5, 0xe2, 0x01, 0x26, 0xec, 0x1b, - 0xbf, 0xc6, 0x5d, 0xda, 0xcf, 0x88, 0x7a, 0x52, 0xa4, 0x63, 0xb1, 0xa9, 0x02, 0x3e, 0x5b, 0xf6, - 0x3f, 0x1b, 0x6b, 0x07, 0xf9, 0x88, 0x4b, 0x4a, 0x63, 0xdf, 0xab, 0x5a, 0x98, 0xd4, 0xd9, 0x18, - 0xe6, 0xa9, 0x2b, 0xfe, 0x36, 0x36, 0xa8, 0xf5, 0x47, 0xc6, 0x07, 0x35, 0x56, 0x32, 0xc2, 0x0c, - 0xf7, 0x6e, 0x00, 0x2a, 0xbf, 0xdc, 0x7f, 0xe1, 0x43, 0x96, 0x0c, 0x25, 0x63, 0x0b, 0xca, 0xa9, - 0xb6, 0x75, 0x6e, 0xc6, 0x61, 0x7b, 0xfc, 0x4d, 0xf4, 0x43, 0xa9, 0x35, 0xf1, 0x9d, 0x12, 0x77, - 0xc2, 0x5a, 0xd5, 0x69, 0xfc, 0x13, 0xd3, 0xdb, 0x3e, 0x5f, 0x82, 0x9f, 0x66, 0x5d, 0x4b, 0xc8, - 0x34, 0x9f, 0xc4, 0x70, 0x9d, 0x00, 0x93, 0xca, 0xbb, 0x6e, 0xdf, 0xe5, 0x92, 0xd1, 0xb5, 0x7d, - 0x08, 0x9b, 0xe0, 0xaf, 0x55, 0x4d, 0x64, 0xc3, 0x71, 0x75, 0x8b, 0xef, 0x82, 0xc2, 0x62, 0x78, - 0xba, 0x4a, 0xaa, 0xb6, 0xf8, 0x28, 0x39, 0x3a, 0xb5, 0xd5, 0x53, 0x27, 0xc2, 0x26, 0x97, 0xe3, - 0x23, 0x7c, 0x2c, 0xd4, 0xa7, 0x6b, 0xc4, 0xdc, 0xe6, 0x36, 0xd3, 0x6e, 0xdf, 0x82, 0x93, 0xa1, - 0xcd, 0xb6, 0xd2, 0x6a, 0x9d, 0xa9, 0x41, 0xf0, 0x45, 0xa3, 0x24, 0x1c, 0x34, 0xec, 0xc3, 0x0d, - 0xc8, 0x00, 0x46, 0x30, 0xd5, 0x7f, 0x46, 0x2a, 0x01, 0x43, 0xab, 0xd4, 0xa9, 0x15, 0x12, 0xc6, - 0x0f, 0xf8, 0x34, 0xdc, 0xb5, 0x8e, 0xd3, 0x06, 0xa5, 0xc3, 0xb8, 0x4b, 0xf5, 0x62, 0xac, 0xab, - 0x74, 0x60, 0xc8, 0x20, 0x23, 0x8c, 0x31, 0x7b, 0x63, 0xbd, 0x92, 0x3c, 0x28, 0xc9, 0x08, 0x87, - 0xdb, 0xe4, 0x3a, 0xa0, 0x9c, 0x6c, 0x5b, 0xe8, 0xbd, 0xa4, 0xac, 0x60, 0xfb, 0x90, 0x74, 0x1d, - 0xfd, 0x62, 0xa7, 0xa0, 0x5c, 0x33, 0x0f, 0xfc, 0x77, 0xb5, 0x83, 0x50, 0x19, 0x9e, 0x25, 0xde, - 0x18, 0xab, 0x89, 0x70, 0x52, 0x0e, 0x46, 0xc8, 0xe3, 0x52, 0xef, 0x0f, 0x00, 0x02, 0xbc, 0x28, - 0x2c, 0x03, 0x46, 0x4b, 0x71, 0x69, 0xd5, 0xa5, 0x00, 0x02, 0x23, 0x4b, 0xcd, 0x49, 0xc0, 0x00, - 0x8e, 0x19, 0x10, 0xfb, 0xa3, 0xf1, 0x9d, 0x48, 0x0e, 0x05, 0xa2, 0x01, 0x24, 0xab, 0x2d, 0x32, - 0xd6, 0x6a, 0x01, 0xde, 0x5c, 0x76, 0xeb, 0xe1, 0x4a, 0x7d, 0x68, 0xee, 0x66, 0x92, 0xc6, 0x34, - 0x1b, 0x26, 0x14, 0x72, 0xe9, 0x91, 0x6c, 0xe6, 0x04, 0x57, 0x73, 0x8e, 0x14, 0x59, 0x10, 0x99, - 0x40, 0x16, 0x46, 0xee, 0xc0, 0x08, 0x1a, 0x50, 0x0a, 0x83, 0x13, 0x28, 0x58, 0x90, 0x06, 0x02, - 0x9b, 0x87, 0xf2, 0xbb, 0xfe, 0x8e, 0xeb, 0x2f, 0xdc, 0xf6, 0x9c, 0x69, 0xab, 0xe5, 0xde, 0xf6, - 0x78, 0xf6, 0x8f, 0xc6, 0x55, 0x0c, 0x8c, 0x2a, 0x08, 0x05, 0x46, 0x29, 0x2e, 0xa0, 0xb9, 0x66, - 0x24, 0x98, 0xaa, 0x19, 0x08, 0xa1, 0x54, 0x41, 0x01, 0xf5, 0xff, 0x95, 0xf4, 0x00, 0xaf, 0x05, - 0xb2, 0xa9, 0x83, 0xf4, 0xea, 0x3a, 0x5e, 0xf1, 0x06, 0xc7, 0x02, 0x08, 0xc3, 0xf8, 0x90, 0x8c, - 0xe8, 0x90, 0x35, 0x30, 0x41, 0x60, 0xb1, 0x41, 0x01, 0x37, 0x34, 0x77, 0x8d, 0x35, 0x23, 0x9b, - 0xbc, 0xbe, 0x24, 0x27, 0x6d, 0xb9, 0xb3, 0xa6, 0x97, 0x12, 0x0a, 0xcf, 0x2f, 0x41, 0x6c, 0xca, - 0xe4, 0x1f, 0xb6, 0xd7, 0x7d, 0x7b, 0xeb, 0x94, 0x5f, 0x35, 0xdf, 0x5d, 0x5a, 0x5e, 0x11, 0x26, - 0xab, 0x5a, 0xf3, 0x63, 0xe5, 0x17, 0x89, 0x7c, 0x9c, 0xda, 0xa6, 0xbe, 0x5b, 0x1b, 0xdc, 0xfc, - 0x96, 0xf6, 0xd4, 0x4d, 0x8a, 0x6e, 0xdf, 0xc4, 0x5d, 0xfb, 0xbd, 0x62, 0x09, 0x8d, 0x4e, 0x7f, - 0x04, 0x11, 0x85, 0xd8, 0xcd, 0x25, 0xea, 0x6b, 0x61, 0x15, 0x76, 0xff, 0xcf, 0x51, 0x5f, 0xf5, - 0xc3, 0x45, 0x7e, 0x05, 0x41, 0x85, 0x5e, 0x71, 0x38, 0xff, 0x4c, 0xff, 0xe2, 0x02, 0xa4, 0x1a, - 0x0e, 0x1d, 0x40, 0x46, 0x36, 0x01, 0xaf, 0x19, 0x58, 0x00, 0xd4, 0xaa, 0x00, 0xf0, 0x31, 0x41, - 0xa0, 0xe4, 0x00, 0x19, 0x40, 0x70, 0xd4, 0x09, 0x17, 0x61, 0x6c, 0x6b, 0xf9, 0x14, 0xb0, 0x57, - 0x8f, 0xf8, 0xd8, 0x97, 0xe0, 0x1b, 0xe7, 0x10, 0x26, 0x1a, 0xd0, 0x04, 0x00, 0xca, 0xd1, 0x6f, - 0xba, 0x1b, 0xe3, 0x72, 0x47, 0x62, 0xba, 0x9a, 0x18, 0xa0, 0x4f, 0x74, 0xbd, 0x89, 0x09, 0x40, - 0x2c, 0x9d, 0x02, 0x60, 0xca, 0x0f, 0x48, 0x08, 0xc5, 0xed, 0x52, 0x5a, 0x67, 0xe9, 0xf8, 0x88, - 0x50, 0x99, 0x2b, 0x58, 0x5f, 0x58, 0x3a, 0xf4, 0xb0, 0x8c, 0x09, 0x4f, 0x0f, 0x88, 0x62, 0xe1, - 0xe1, 0xc1, 0xf7, 0x2c, 0x38, 0xef, 0x12, 0xf2, 0x6b, 0x61, 0xa4, 0x50, 0x00, 0xbe, 0x2c, 0xc4, - 0x55, 0x1a, 0x0f, 0xbf, 0x2a, 0xe1, 0x9f, 0xbb, 0xd7, 0x96, 0xb3, 0xf0, 0xba, 0xa6, 0x80, 0x3f, - 0xb0, 0xc7, 0x53, 0xa4, 0x98, 0xff, 0x96, 0x43, 0xf1, 0x95, 0x9f, 0x45, 0x87, 0x70, 0x03, 0xd8, - 0xe8, 0xb8, 0xd1, 0x18, 0x6e, 0x33, 0x2c, 0xdf, 0xd8, 0x28, 0xec, 0xfb, 0x25, 0x83, 0x09, 0x44, - 0xc4, 0xb1, 0x7b, 0xf8, 0x6e, 0xec, 0x08, 0x82, 0x67, 0xc1, 0x98, 0xbf, 0xa6, 0x87, 0x65, 0xe3, - 0xec, 0x9c, 0xe4, 0xca, 0x5c, 0x59, 0x64, 0x9e, 0x2f, 0x18, 0x52, 0xfa, 0xc4, 0x78, 0x08, 0x76, - 0xed, 0xb6, 0x9a, 0x7e, 0x30, 0xb9, 0xdd, 0xa6, 0x53, 0x76, 0x33, 0xc1, 0x4a, 0x16, 0x5c, 0x36, - 0xaf, 0x97, 0x71, 0x59, 0x4c, 0xf8, 0xe8, 0xcb, 0x18, 0x45, 0xbd, 0xa2, 0x94, 0xdd, 0x07, 0x9c, - 0x57, 0xc4, 0x91, 0x99, 0xfb, 0xb7, 0xfb, 0xbb, 0x0a, 0x86, 0xb9, 0xce, 0xa2, 0xaf, 0xf8, 0xee, - 0x20, 0x89, 0x2e, 0xaa, 0xc6, 0xbe, 0x53, 0xe6, 0xc9, 0x79, 0x88, 0xb5, 0xae, 0x08, 0x7b, 0xb7, - 0x2f, 0x98, 0xb9, 0x7f, 0xc1, 0x26, 0x91, 0x71, 0x8c, 0xd8, 0xf9, 0x45, 0x65, 0xc9, 0x39, 0x46, - 0xaa, 0xd4, 0x6f, 0x04, 0x62, 0xa5, 0xfe, 0xab, 0x84, 0x7c, 0x35, 0x7a, 0x85, 0x39, 0x0c, 0x7e, - 0x14, 0xde, 0x75, 0xc2, 0x02, 0x41, 0x5c, 0x1a, 0xc4, 0x45, 0xb5, 0xc3, 0xc7, 0x46, 0x42, 0x93, - 0xf8, 0xa5, 0xdb, 0xbd, 0xf5, 0xf1, 0xf1, 0x3e, 0x3e, 0xe6, 0xfb, 0x99, 0xeb, 0x37, 0x4c, 0xe5, - 0x98, 0x65, 0xc0, 0x02, 0x44, 0x44, 0x85, 0xb7, 0x63, 0xca, 0x13, 0xff, 0x03, 0x76, 0x35, 0x3c, - 0x55, 0xb1, 0x6f, 0x2d, 0x65, 0xac, 0xb1, 0xc7, 0x69, 0x8c, 0xe2, 0x37, 0x56, 0x3b, 0xe1, 0x92, - 0x14, 0x01, 0x36, 0x8a, 0x6f, 0x03, 0x60, 0x93, 0xde, 0x8f, 0x6d, 0xb3, 0x72, 0xc5, 0xca, 0x64, - 0x50, 0xe8, 0x8f, 0xb8, 0xb9, 0x5b, 0x0a, 0x39, 0x9f, 0x2e, 0x34, 0xdf, 0x05, 0x64, 0x3c, 0xe3, - 0x39, 0x60, 0x19, 0xc7, 0x96, 0x01, 0x92, 0x1c, 0x08, 0x0e, 0x4c, 0xad, 0x2f, 0x3e, 0x1b, 0x96, - 0xf9, 0x4d, 0x65, 0xf3, 0xe2, 0xfe, 0x49, 0xc8, 0x2f, 0x2b, 0x3e, 0x38, 0xaf, 0xd5, 0x88, 0xad, - 0x62, 0x71, 0x05, 0x1a, 0xb0, 0x6f, 0xe3, 0x08, 0x9a, 0x77, 0x5b, 0x1b, 0x17, 0x3b, 0x11, 0xd4, - 0x26, 0x3c, 0x25, 0x88, 0xf8, 0x9b, 0xc5, 0x6d, 0xbe, 0x2b, 0x5c, 0x13, 0xde, 0x7c, 0xa4, 0xfe, - 0x63, 0xe0, 0xaa, 0xb5, 0x9b, 0xf9, 0xbd, 0x58, 0xfb, 0xac, 0x47, 0xfc, 0x82, 0x69, 0xc7, 0x57, - 0xc7, 0x0a, 0xed, 0xde, 0xde, 0xef, 0xfb, 0xd4, 0x6e, 0xff, 0x84, 0x29, 0x5b, 0x55, 0xda, 0x27, - 0xcc, 0xfd, 0x8d, 0xbd, 0xc9, 0xd0, 0xcf, 0x49, 0xc4, 0x15, 0x55, 0x7a, 0xaf, 0x82, 0x2a, 0xaa, - 0xaa, 0x71, 0xf6, 0x45, 0x51, 0x75, 0xf1, 0x5a, 0x6b, 0x99, 0x8f, 0x11, 0x08, 0x14, 0x47, 0x6e, - 0x20, 0x1c, 0x06, 0x1e, 0x85, 0x80, 0xce, 0x79, 0x38, 0x0a, 0x89, 0x7a, 0xbf, 0xce, 0x26, 0x28, - 0xb3, 0x7d, 0x55, 0x2e, 0x0c, 0x40, 0xb2, 0x14, 0x21, 0xc0, 0x01, 0xc3, 0xce, 0x01, 0xf2, 0x50, - 0xe7, 0x95, 0xda, 0x2a, 0x94, 0x44, 0x65, 0x15, 0xc3, 0xc7, 0xc9, 0x40, 0x01, 0xe0, 0x63, 0x64, - 0x3a, 0xf0, 0x94, 0x1c, 0x0b, 0xd4, 0x24, 0xf8, 0x67, 0x8a, 0x38, 0x60, 0x18, 0x0c, 0x28, 0x73, - 0x00, 0x25, 0x2c, 0x22, 0x61, 0x66, 0x70, 0x78, 0xe4, 0x2c, 0x02, 0x15, 0x22, 0xd0, 0x56, 0xf0, - 0xb7, 0xb4, 0x13, 0x81, 0x6c, 0x48, 0x78, 0xa9, 0x90, 0xe8, 0xf2, 0x1d, 0x42, 0xfd, 0x1c, 0x0e, - 0x99, 0xd5, 0x75, 0xdf, 0x04, 0x82, 0x22, 0x7c, 0x37, 0x94, 0x59, 0xce, 0xf8, 0xc2, 0x2b, 0x28, - 0x4a, 0x28, 0xf2, 0xe2, 0xcc, 0x8c, 0x2a, 0xc2, 0x84, 0x9d, 0x76, 0xfc, 0x24, 0x25, 0x35, 0x35, - 0xc9, 0x03, 0x01, 0xb9, 0x47, 0xc7, 0x95, 0x71, 0xd7, 0x93, 0x64, 0xb7, 0x90, 0xca, 0x54, 0xfe, - 0x0b, 0x4d, 0x78, 0xba, 0x1d, 0x9b, 0x7d, 0x08, 0xf0, 0x4a, 0x75, 0xd5, 0xe5, 0xee, 0xff, 0x31, - 0x16, 0xbf, 0x04, 0x96, 0xd5, 0xb5, 0x77, 0xca, 0x55, 0x5f, 0xc1, 0x10, 0x8b, 0xb5, 0x8a, 0xb8, - 0xbd, 0x69, 0x2e, 0xab, 0x82, 0x72, 0xa7, 0x4f, 0x79, 0x7e, 0xbe, 0x24, 0x85, 0xde, 0x86, 0xf1, - 0xfc, 0x23, 0xc4, 0xbf, 0xbb, 0xbc, 0xff, 0xec, 0x79, 0x33, 0xe2, 0x31, 0x3c, 0x83, 0xaa, 0xab, - 0xeb, 0xd3, 0x71, 0x45, 0x9a, 0x5e, 0xef, 0xe3, 0xcc, 0xc5, 0x25, 0x8d, 0x13, 0xbf, 0x3e, 0x99, - 0x76, 0xd7, 0x82, 0x21, 0x2e, 0xc6, 0x6e, 0xf6, 0x2b, 0xe6, 0x11, 0xcd, 0xfc, 0x67, 0x99, 0x3f, - 0xa8, 0x9d, 0x14, 0xb3, 0xd4, 0x50, 0x32, 0xc0, 0x30, 0xa7, 0xca, 0x04, 0x0b, 0x10, 0x20, 0x29, - 0xb4, 0x27, 0x87, 0x9c, 0x3e, 0xc1, 0xcf, 0x46, 0x06, 0xb4, 0xf1, 0x04, 0x2c, 0x89, 0x3c, 0xd4, - 0x90, 0x95, 0xc8, 0xd3, 0x2c, 0x24, 0xf0, 0x03, 0x38, 0x3c, 0x98, 0x26, 0x44, 0xc6, 0x8e, 0xf8, - 0x42, 0xc4, 0x93, 0x49, 0x26, 0x78, 0x1f, 0xa6, 0xbf, 0x05, 0x67, 0x26, 0x71, 0xa9, 0x5d, 0x23, - 0x48, 0xa7, 0x1b, 0x41, 0x8d, 0xd3, 0x83, 0xe0, 0x94, 0x99, 0x1a, 0x61, 0xac, 0xc8, 0x9f, 0x08, - 0x4f, 0x94, 0x4a, 0xaa, 0xd7, 0x09, 0xd6, 0x4c, 0x93, 0x15, 0x6f, 0x82, 0x72, 0x28, 0x8f, 0x6d, - 0xd8, 0x95, 0x76, 0x2f, 0xbe, 0x6e, 0x6c, 0x36, 0x79, 0xae, 0xff, 0x89, 0x23, 0x9f, 0xbe, 0xd5, - 0xa9, 0x38, 0x23, 0x2a, 0xa6, 0x6f, 0x3a, 0x84, 0x79, 0x09, 0x6d, 0x7e, 0x11, 0xac, 0xaa, 0xa7, - 0x0e, 0xab, 0xe0, 0xc9, 0x48, 0x70, 0xbe, 0x13, 0xab, 0x1a, 0x44, 0x21, 0xb1, 0xbf, 0xc5, 0x76, - 0x66, 0x42, 0x0a, 0x9b, 0x1b, 0x1f, 0x08, 0x9c, 0xd4, 0xd3, 0x9e, 0x49, 0xc0, 0x6f, 0x1f, 0xa7, - 0xe3, 0x04, 0x24, 0xf5, 0x28, 0xfd, 0xb3, 0xe3, 0xd6, 0xa0, 0xce, 0xfb, 0x70, 0xe3, 0x02, 0x02, - 0xa0, 0x24, 0x41, 0xf8, 0x2b, 0xcb, 0xa8, 0x75, 0xf2, 0x49, 0x95, 0x27, 0x27, 0x3a, 0x7c, 0xa5, - 0xaa, 0x43, 0xd7, 0x42, 0x5d, 0x97, 0x93, 0xfa, 0x23, 0xfc, 0xa2, 0x4b, 0x91, 0x5c, 0x9c, 0x40, - 0x84, 0x92, 0xe7, 0x5f, 0x98, 0x95, 0x5f, 0x90, 0xaf, 0x7f, 0xbd, 0xef, 0xe6, 0x16, 0xb2, 0x7f, - 0x8a, 0x2d, 0xb5, 0x43, 0x9b, 0xd7, 0xc4, 0x84, 0x25, 0x75, 0x4a, 0xfe, 0x0b, 0x45, 0xb9, 0xff, - 0xbb, 0x4d, 0x1d, 0xcc, 0x31, 0x75, 0xf2, 0x8f, 0x7d, 0xd7, 0x20, 0xcb, 0xd7, 0xdd, 0xa6, 0x97, - 0xe2, 0x8a, 0x34, 0x34, 0x5c, 0xed, 0x8c, 0xcc, 0x7f, 0x87, 0x4b, 0x19, 0x5f, 0xd8, 0xce, 0x9d, - 0x0d, 0x8d, 0xea, 0x57, 0xbf, 0xfe, 0x34, 0x88, 0x18, 0xe1, 0xf0, 0x8f, 0x5b, 0x27, 0x08, 0x87, - 0x35, 0x23, 0x39, 0xf2, 0xbe, 0x25, 0x59, 0x97, 0xe1, 0x48, 0xc0, 0xf2, 0x68, 0x41, 0xcb, 0x5a, - 0xa0, 0x52, 0x86, 0x83, 0xa7, 0x1c, 0x79, 0xb3, 0x3d, 0xe3, 0xac, 0x5f, 0xe1, 0x4b, 0x69, 0xfb, - 0x68, 0x1e, 0xff, 0xd8, 0xc1, 0xa9, 0xb9, 0x98, 0xc5, 0xca, 0x12, 0xe4, 0xd6, 0xab, 0x82, 0xbb, - 0xee, 0xed, 0x4b, 0x99, 0x73, 0x52, 0xf0, 0x4e, 0x4c, 0xbb, 0xad, 0x5b, 0xe5, 0x12, 0xb5, 0x93, - 0x8a, 0x29, 0xf1, 0x77, 0x7c, 0x77, 0x20, 0x8a, 0xd2, 0x37, 0x21, 0x79, 0x7f, 0x93, 0x72, 0xaa, - 0xfd, 0xd8, 0x3e, 0x5f, 0xe1, 0x21, 0x0a, 0xc6, 0x3b, 0xdd, 0xf4, 0x5a, 0x8a, 0xe4, 0x2b, 0xbe, - 0x2f, 0x9a, 0xda, 0xd5, 0x72, 0x66, 0xff, 0xa3, 0x34, 0x14, 0x74, 0x5a, 0x88, 0xe4, 0x23, 0xbd, - 0xc4, 0xf3, 0x1d, 0x0d, 0xb4, 0x34, 0xc6, 0xf5, 0xe8, 0x43, 0x88, 0xa6, 0x83, 0xb6, 0xdb, 0x0d, - 0x93, 0x60, 0xb3, 0x92, 0x7f, 0xc3, 0x9c, 0x9b, 0xdc, 0x0a, 0x7c, 0xdd, 0xdc, 0x21, 0x00, 0x00, - 0x00, 0x01, 0x41, 0x9a, 0x4e, 0x27, 0x30, 0xeb, 0xcc, 0x65, 0xaf, 0xd9, 0x6b, 0x5f, 0x10, 0x47, - 0x77, 0x6d, 0xee, 0xeb, 0x9a, 0xcc, 0xd9, 0xf8, 0xcd, 0xe9, 0xde, 0xe9, 0xbd, 0xdb, 0xa5, 0x27, - 0x09, 0x56, 0xba, 0xbd, 0xf2, 0x16, 0xf7, 0xf2, 0x9d, 0xef, 0xf2, 0x99, 0x3a, 0x71, 0x7d, 0x04, - 0x72, 0xfa, 0xf4, 0x2b, 0xc1, 0x00, 0x4a, 0x86, 0x8d, 0x67, 0x72, 0x3d, 0x8c, 0xc3, 0xb7, 0x0c, - 0xbc, 0xb2, 0xff, 0x96, 0xf5, 0x7f, 0x41, 0x36, 0xfa, 0xb7, 0xd7, 0x3f, 0xd6, 0x23, 0xfc, 0x10, - 0xa2, 0xd5, 0xf4, 0x12, 0x75, 0x70, 0x45, 0x37, 0x59, 0x75, 0xbe, 0x20, 0x97, 0x59, 0xf2, 0xc7, - 0x5c, 0xb5, 0x5b, 0x4b, 0xbb, 0xbe, 0xb8, 0x2c, 0xde, 0x87, 0x62, 0x97, 0xb6, 0x56, 0xad, 0x4c, - 0x0a, 0x99, 0x64, 0x7f, 0x8c, 0xa5, 0xb7, 0x2b, 0x1c, 0xff, 0x1b, 0xa3, 0xae, 0xbe, 0x30, 0xb4, - 0x83, 0x2a, 0xb3, 0x1b, 0xc3, 0x72, 0x1b, 0x51, 0xe2, 0x6a, 0xcb, 0x03, 0xb4, 0x30, 0x24, 0x0c, - 0x1e, 0x85, 0xe1, 0xde, 0xa2, 0xfe, 0x78, 0xbf, 0x72, 0xb6, 0xad, 0x5f, 0xc1, 0x65, 0x1c, 0x61, - 0x72, 0x11, 0x61, 0x30, 0xe3, 0xcc, 0xab, 0xff, 0x29, 0x67, 0x7c, 0x5e, 0xb3, 0x1a, 0xaa, 0x36, - 0x61, 0xde, 0xbd, 0x5c, 0x12, 0xf4, 0x9d, 0x8f, 0x1a, 0xb8, 0xe5, 0xf4, 0x13, 0x7f, 0x08, 0xab, - 0x63, 0x16, 0xdf, 0x56, 0x88, 0xe2, 0x03, 0x06, 0xfa, 0xaa, 0x7b, 0x5e, 0x2e, 0xad, 0xd2, 0x55, - 0x26, 0x44, 0xb8, 0x2a, 0x3e, 0x6d, 0xd2, 0x84, 0x3f, 0xfe, 0x07, 0xd8, 0xc9, 0x4d, 0xac, 0xaa, - 0x95, 0x3f, 0xe2, 0x5f, 0x0a, 0x12, 0x0b, 0xf5, 0x14, 0xd3, 0x35, 0xd7, 0x29, 0x96, 0x21, 0xa2, - 0x6c, 0x3d, 0x87, 0xdb, 0xec, 0xcb, 0x65, 0xaf, 0x0e, 0x3d, 0x76, 0xeb, 0x16, 0x54, 0x63, 0x5e, - 0x9e, 0xfe, 0x20, 0x15, 0x4f, 0x15, 0x08, 0xc5, 0x69, 0xcf, 0x69, 0x51, 0x19, 0x6b, 0x3b, 0xad, - 0x37, 0xf8, 0xfa, 0x99, 0x74, 0xe0, 0xf0, 0xfd, 0xd0, 0x7e, 0x86, 0x02, 0x7f, 0xcc, 0x75, 0xf8, - 0x3f, 0x63, 0xc1, 0x66, 0xd2, 0xc8, 0xa3, 0x3a, 0xd3, 0x2a, 0x57, 0x24, 0x75, 0x13, 0xfe, 0x24, - 0x85, 0x5e, 0x46, 0xee, 0xe9, 0xf8, 0x28, 0x16, 0x8e, 0x72, 0x4c, 0xda, 0x68, 0x6d, 0xac, 0xbc, - 0xfd, 0x0d, 0x62, 0x4e, 0xad, 0x11, 0xc5, 0x84, 0x35, 0x36, 0x6a, 0x8c, 0x47, 0x28, 0xbb, 0xa7, - 0xf5, 0xcb, 0xe6, 0x35, 0x6e, 0xba, 0x17, 0xf3, 0xeb, 0x1f, 0xc4, 0xa2, 0x8e, 0xde, 0x25, 0x47, - 0x7e, 0x2d, 0x71, 0x47, 0x44, 0xc8, 0x1a, 0xe4, 0xe0, 0x9f, 0x08, 0xa0, 0xab, 0xcb, 0xd8, 0xea, - 0xad, 0xf4, 0x7a, 0x93, 0x90, 0x63, 0xd8, 0xd2, 0xf4, 0x77, 0xae, 0x2e, 0x87, 0x2a, 0x4c, 0xc3, - 0x52, 0x49, 0x72, 0x91, 0xdd, 0x29, 0x38, 0xa3, 0x3d, 0x96, 0x6e, 0xa5, 0xfc, 0x49, 0x6e, 0xc0, - 0xc4, 0x0d, 0x2f, 0x89, 0x82, 0x1e, 0x51, 0x7b, 0x88, 0x58, 0x5c, 0x12, 0xda, 0xa6, 0xf3, 0x79, - 0x32, 0x0f, 0x82, 0x1e, 0x46, 0xdc, 0xf8, 0x29, 0x2b, 0x69, 0xfa, 0x4f, 0xc9, 0xbd, 0xf0, 0x4b, - 0x6c, 0x94, 0xda, 0xd3, 0x62, 0xbb, 0x12, 0xd5, 0x9b, 0x3f, 0x66, 0x5b, 0x5f, 0x0a, 0x08, 0xa4, - 0xf7, 0x69, 0xc7, 0x95, 0xe8, 0x9d, 0xf7, 0xbb, 0xe3, 0x2d, 0x8d, 0x62, 0xa5, 0x82, 0x03, 0x48, - 0xb5, 0x59, 0x56, 0x5a, 0xb2, 0x55, 0x27, 0xb6, 0x46, 0xcf, 0x3e, 0x30, 0xe9, 0x87, 0x3a, 0x81, - 0xf0, 0x00, 0xba, 0x42, 0x43, 0xcb, 0x91, 0xe1, 0x3f, 0x29, 0x1d, 0xf9, 0xb2, 0x86, 0x4a, 0x31, - 0x9f, 0x19, 0x7a, 0x13, 0x28, 0x8d, 0x9c, 0xbc, 0x91, 0x8d, 0x44, 0x2b, 0x1b, 0x98, 0xa3, 0xe8, - 0x9a, 0xa0, 0x25, 0x74, 0x64, 0x45, 0xf1, 0x97, 0x8c, 0x27, 0xf4, 0x74, 0x49, 0xbd, 0xeb, 0xd1, - 0x11, 0xee, 0x0c, 0x0c, 0x72, 0xf1, 0x2f, 0xf0, 0x56, 0x69, 0x73, 0xac, 0x5d, 0x73, 0x7c, 0xff, - 0x0a, 0x47, 0x6e, 0x3d, 0x4b, 0xfc, 0x0a, 0x84, 0x2e, 0x39, 0x90, 0xd2, 0xa8, 0x5d, 0x85, 0x60, - 0x06, 0x75, 0x4c, 0x1e, 0x32, 0xc7, 0x50, 0x22, 0x28, 0x66, 0x63, 0x5b, 0x0d, 0x41, 0xa5, 0xcc, - 0xc1, 0x41, 0x56, 0x83, 0x2c, 0xa2, 0xf0, 0x57, 0x5a, 0x7a, 0x74, 0xf2, 0xc0, 0x2e, 0xbe, 0x3f, - 0x70, 0x84, 0x15, 0x95, 0x36, 0xb5, 0xb2, 0x00, 0x7c, 0xd7, 0x6c, 0x4b, 0x8f, 0xe2, 0x41, 0x58, - 0x94, 0xaf, 0xcd, 0x9e, 0x18, 0x8a, 0x78, 0xe3, 0xc1, 0x40, 0xc5, 0xd5, 0x20, 0x7c, 0xf2, 0x17, - 0x44, 0x55, 0x9e, 0xba, 0x0b, 0xf4, 0xdc, 0x16, 0x12, 0xb5, 0x77, 0x7d, 0x6a, 0x92, 0xb8, 0x48, - 0x63, 0x4f, 0x7b, 0xdf, 0xce, 0x45, 0xfc, 0x4f, 0x45, 0xbf, 0x0f, 0x5e, 0xd5, 0xde, 0x94, 0x62, - 0xf8, 0xda, 0xd7, 0x02, 0x81, 0x3e, 0xec, 0xe9, 0x8c, 0xf7, 0x8d, 0x9f, 0x43, 0x72, 0xa2, 0xd9, - 0x3d, 0x4b, 0x88, 0x23, 0xcd, 0xae, 0xf1, 0x39, 0xcc, 0xd2, 0x36, 0x83, 0xa4, 0xbd, 0x5a, 0xa5, - 0xb3, 0x25, 0x0b, 0x12, 0x05, 0x14, 0x6f, 0x9d, 0xf2, 0x76, 0xc3, 0x35, 0x93, 0x07, 0xe1, 0xde, - 0x59, 0x0e, 0xdc, 0x5b, 0xa6, 0xe7, 0xa3, 0x6c, 0x63, 0xad, 0x8f, 0x59, 0xf5, 0x28, 0x5f, 0xf0, - 0x61, 0x49, 0x3e, 0x06, 0x98, 0x1f, 0x00, 0xe6, 0xdf, 0xc7, 0x80, 0x02, 0x90, 0x94, 0x43, 0xfe, - 0x0d, 0x28, 0xc4, 0x3a, 0xe0, 0x01, 0x2b, 0x88, 0x2a, 0xf2, 0x91, 0x88, 0xb3, 0xff, 0xfa, 0x62, - 0x3d, 0xb7, 0x78, 0xfe, 0x31, 0xb7, 0x97, 0xf6, 0xe0, 0xa0, 0xb1, 0x99, 0x80, 0x0d, 0xe4, 0x81, - 0x87, 0x16, 0xda, 0x7e, 0x03, 0x71, 0xfc, 0xf0, 0xdc, 0xd8, 0xaa, 0xa8, 0x00, 0x86, 0x77, 0xa1, - 0x2d, 0x2f, 0xc3, 0xa6, 0xbb, 0x2f, 0x0e, 0x1f, 0x76, 0xdc, 0xba, 0x69, 0xff, 0xcb, 0xda, 0x49, - 0x70, 0x8d, 0xbb, 0xd3, 0xa7, 0xe7, 0x97, 0x85, 0xf6, 0xed, 0x9f, 0xd4, 0xdd, 0x7d, 0xb1, 0x57, - 0xf8, 0x67, 0xb4, 0x6e, 0xbe, 0x7a, 0x8b, 0x6b, 0xf2, 0x5b, 0x3c, 0x69, 0x2e, 0x08, 0xcd, 0x2c, - 0x3d, 0x57, 0x41, 0x9e, 0x97, 0x90, 0x10, 0x5e, 0xfe, 0xf4, 0x9e, 0x4e, 0xba, 0xf8, 0x43, 0x3e, - 0x6f, 0x7d, 0x69, 0x17, 0x92, 0xf7, 0x72, 0x71, 0x14, 0xc9, 0x1c, 0x6c, 0xb6, 0x5b, 0x69, 0xae, - 0x20, 0x41, 0x0b, 0x62, 0xbb, 0x8a, 0xcb, 0x77, 0xc4, 0x5d, 0x57, 0x2f, 0x41, 0xff, 0xfd, 0x5e, - 0x23, 0x84, 0x43, 0xdc, 0x43, 0x2d, 0xa1, 0x95, 0x8b, 0x47, 0x34, 0xbc, 0x14, 0xc3, 0xba, 0x60, - 0x35, 0xa9, 0x4c, 0x86, 0xe1, 0x80, 0x24, 0x98, 0x58, 0x04, 0x22, 0x4a, 0xb8, 0x04, 0xd8, 0xe5, - 0x21, 0x37, 0xc3, 0x07, 0x0e, 0x8e, 0xee, 0x2d, 0xbe, 0x6e, 0x78, 0xef, 0x83, 0x90, 0x42, 0x1e, - 0x85, 0x45, 0xbc, 0x03, 0x47, 0xc4, 0xb6, 0x46, 0x57, 0x75, 0xc2, 0x16, 0x38, 0x8d, 0x2d, 0x96, - 0x31, 0xbc, 0x8a, 0xb6, 0x44, 0xe7, 0x04, 0xa0, 0x00, 0x41, 0x5d, 0xf6, 0xae, 0xfe, 0x19, 0x3d, - 0xd0, 0x0a, 0x92, 0x4f, 0xb9, 0x28, 0x45, 0x4b, 0xc5, 0x25, 0xec, 0x7f, 0xe1, 0x4e, 0x6e, 0xed, - 0xbe, 0x5d, 0xee, 0xbb, 0xc9, 0x9f, 0x93, 0x5a, 0xf9, 0xb9, 0x71, 0xbf, 0x7a, 0x98, 0x6b, 0x08, - 0xe2, 0x43, 0x93, 0x63, 0x40, 0xff, 0x49, 0x43, 0xa1, 0x50, 0x19, 0xee, 0x2d, 0xe7, 0xe2, 0x8b, - 0xf0, 0x47, 0xc7, 0x4b, 0x17, 0x99, 0x3e, 0x1c, 0x83, 0x52, 0x53, 0x80, 0x3c, 0x3f, 0x4a, 0x39, - 0x5a, 0x84, 0x46, 0xe6, 0xf9, 0x70, 0x32, 0xf8, 0xa8, 0xfa, 0xf0, 0x60, 0x0a, 0x48, 0x0c, 0x05, - 0x72, 0x2a, 0x3e, 0x44, 0x85, 0x66, 0x42, 0xae, 0xd5, 0x99, 0x3b, 0x77, 0x38, 0x20, 0x05, 0x00, - 0x96, 0x13, 0x30, 0x50, 0x30, 0xf2, 0x9a, 0x8a, 0xfc, 0xd4, 0x7c, 0xa9, 0xd1, 0x14, 0x3d, 0x80, - 0x12, 0xcd, 0x79, 0x87, 0x60, 0x94, 0xbd, 0xa4, 0x05, 0x98, 0x79, 0x2f, 0xc3, 0xb7, 0xdb, 0xb3, - 0xb3, 0xa6, 0xcf, 0x20, 0xa2, 0xf6, 0x14, 0xe3, 0x8e, 0x41, 0x4a, 0x2f, 0xc9, 0xc1, 0xad, 0xdc, - 0x61, 0x69, 0x96, 0x22, 0x36, 0x24, 0x00, 0x1c, 0x06, 0xad, 0x41, 0xa8, 0xd7, 0xdd, 0xe5, 0xce, - 0xd4, 0x23, 0x0c, 0x6f, 0x28, 0x4f, 0x24, 0xdf, 0x87, 0x39, 0x62, 0x80, 0x4a, 0xf8, 0x7a, 0x8b, - 0xe9, 0xb5, 0x81, 0x00, 0x48, 0x2c, 0xad, 0x56, 0x89, 0x65, 0xb0, 0x7f, 0x63, 0x03, 0x9d, 0x2a, - 0x0d, 0x80, 0x94, 0x07, 0x5c, 0x48, 0x31, 0x05, 0x85, 0x37, 0x14, 0x38, 0xb4, 0x6c, 0xaa, 0x76, - 0xa0, 0x06, 0xee, 0x24, 0xfd, 0xdc, 0x3f, 0x6a, 0x4c, 0xf8, 0xa4, 0x58, 0x78, 0x6c, 0xa1, 0x55, - 0x70, 0x76, 0x80, 0x03, 0xf8, 0xa2, 0x6a, 0x81, 0x0b, 0xfc, 0x1e, 0xfc, 0x23, 0xc1, 0x1d, 0xcb, - 0x8f, 0x75, 0x11, 0xca, 0x44, 0xdd, 0x6b, 0x93, 0x32, 0x8b, 0x9b, 0x9b, 0xb4, 0xbe, 0x2b, 0x2f, - 0x95, 0x2c, 0x78, 0xe0, 0x35, 0x89, 0xf1, 0x31, 0xf8, 0x7a, 0xd9, 0xbb, 0x58, 0xc1, 0xcf, 0xd8, - 0x9c, 0xff, 0x81, 0x66, 0x1a, 0x85, 0x95, 0x07, 0x4b, 0x0f, 0xb0, 0xe9, 0x01, 0xa8, 0x57, 0x30, - 0x84, 0x86, 0x90, 0x71, 0x5d, 0x3e, 0x0a, 0x85, 0x71, 0x35, 0xe2, 0x01, 0x80, 0x28, 0x14, 0xe1, - 0x64, 0x84, 0xd5, 0xf0, 0xaa, 0xb5, 0x8b, 0x77, 0x12, 0x0a, 0x01, 0x67, 0x17, 0x5b, 0xad, 0x24, - 0xaf, 0xec, 0x38, 0xa0, 0x04, 0xf4, 0xb6, 0xd1, 0x0c, 0xb7, 0xfe, 0x9e, 0x4f, 0x26, 0x0d, 0xa3, - 0xad, 0x34, 0x79, 0xf4, 0x7f, 0xd8, 0x60, 0x10, 0x05, 0x21, 0x61, 0x55, 0xf4, 0x98, 0xfb, 0x88, - 0x52, 0x37, 0x1b, 0x96, 0xfc, 0xd9, 0x3b, 0xeb, 0xe0, 0xb2, 0x5b, 0xa8, 0xba, 0x6e, 0x2b, 0x12, - 0x98, 0xca, 0x84, 0x5a, 0x8b, 0x45, 0xbc, 0x4c, 0x29, 0x2f, 0x15, 0x92, 0xf4, 0x4c, 0xf0, 0xa3, - 0x15, 0x9c, 0xe1, 0x6e, 0x14, 0x97, 0x23, 0x76, 0xdb, 0xd7, 0xd3, 0xf1, 0x00, 0x80, 0x71, 0x6c, - 0xdf, 0x58, 0x15, 0x0c, 0x25, 0x2a, 0x9e, 0x15, 0x99, 0x81, 0x5f, 0xc1, 0x00, 0x50, 0x8c, 0x19, - 0x94, 0x9e, 0xc1, 0xb8, 0xcc, 0x8a, 0x27, 0xda, 0x71, 0x03, 0x43, 0x81, 0xa7, 0x7e, 0x0a, 0x44, - 0x02, 0xcd, 0xdd, 0xc0, 0xb0, 0x0e, 0x22, 0xe1, 0xc0, 0x00, 0x86, 0x22, 0x85, 0x40, 0xca, 0xaf, - 0x42, 0x3c, 0xdb, 0x86, 0x38, 0x31, 0x1b, 0x0b, 0xb8, 0x3a, 0x45, 0xb7, 0xb6, 0xe0, 0xa8, 0x09, - 0x3e, 0x8b, 0x06, 0x9e, 0xc1, 0xa1, 0xbb, 0x87, 0xf0, 0x8d, 0xf3, 0x4b, 0x54, 0x1d, 0xd0, 0x2f, - 0x17, 0xb6, 0xac, 0x3a, 0x14, 0x58, 0xc6, 0xff, 0xcb, 0x08, 0xe7, 0xfc, 0x2a, 0xfc, 0xdb, 0xf1, - 0x01, 0x63, 0xb2, 0x2d, 0x95, 0x49, 0x81, 0x40, 0x9b, 0x12, 0xc8, 0x20, 0xd4, 0x33, 0x02, 0x64, - 0x8a, 0x1b, 0xd6, 0x3f, 0x64, 0x0e, 0x91, 0x7c, 0x3a, 0x77, 0x61, 0xe4, 0xbb, 0x08, 0x71, 0x5b, - 0xde, 0xf7, 0x7c, 0x95, 0x5c, 0xdd, 0x90, 0x9f, 0xae, 0x6b, 0x0c, 0x73, 0x2f, 0xe6, 0x2d, 0xef, - 0xe3, 0x21, 0x9b, 0xa1, 0x4b, 0xb7, 0x43, 0x8e, 0x7a, 0x3a, 0xeb, 0x95, 0xa7, 0xe1, 0x2a, 0x32, - 0x67, 0xcc, 0xdf, 0x2e, 0xf7, 0x7c, 0x51, 0x0f, 0x2c, 0x62, 0x9c, 0x5d, 0x7f, 0x08, 0x1d, 0x6b, - 0x33, 0x15, 0xbb, 0xe6, 0xee, 0x4f, 0xdc, 0x32, 0x0a, 0x41, 0x11, 0x15, 0x66, 0x1c, 0x50, 0x0d, - 0x62, 0xa8, 0xd2, 0xf0, 0xc0, 0x30, 0x0b, 0x74, 0xde, 0x6d, 0x89, 0x00, 0xe0, 0x37, 0x28, 0x1d, - 0xa5, 0xb8, 0x5e, 0x63, 0xfc, 0x20, 0x18, 0x04, 0x45, 0xb6, 0xd6, 0x2f, 0x10, 0x0a, 0xaf, 0x56, - 0x5e, 0xbd, 0x8e, 0x0a, 0xc1, 0x2a, 0x27, 0xf1, 0x01, 0xd2, 0x5b, 0x69, 0x37, 0x2c, 0x62, 0x5e, - 0x5e, 0xfc, 0x59, 0xd4, 0x9a, 0x9f, 0xfc, 0x48, 0x52, 0x73, 0x8d, 0xc2, 0x70, 0x05, 0x8b, 0xd8, - 0xdc, 0xb8, 0xf3, 0x18, 0x45, 0x17, 0xe0, 0xa3, 0xee, 0xa9, 0x17, 0x17, 0x8b, 0xc4, 0x85, 0x09, - 0x96, 0x85, 0xbb, 0x6d, 0x21, 0x26, 0x03, 0xe2, 0x4a, 0xb2, 0x87, 0xf0, 0xbd, 0x4b, 0x31, 0x7e, - 0xf8, 0x50, 0xb3, 0xe2, 0x05, 0xbc, 0x57, 0x32, 0xb4, 0xb5, 0x91, 0x00, 0x96, 0x10, 0xa0, 0x70, - 0xc3, 0x01, 0x80, 0x94, 0xb1, 0x96, 0xb7, 0xae, 0x6f, 0xc4, 0x94, 0xf8, 0xbc, 0x31, 0xcc, 0x65, - 0xd4, 0xbc, 0x79, 0x5b, 0xca, 0xca, 0x96, 0x19, 0x8c, 0x56, 0x93, 0x1a, 0x9a, 0x26, 0x2a, 0x5d, - 0x0b, 0x48, 0x42, 0x8c, 0xb6, 0x2b, 0x10, 0x34, 0x3e, 0xb5, 0xb8, 0x88, 0x50, 0x81, 0xec, 0x6b, - 0x67, 0x80, 0x01, 0x1e, 0x70, 0x0e, 0x67, 0xc9, 0xe0, 0x00, 0xe1, 0x60, 0x03, 0x3c, 0x70, 0xb0, - 0x19, 0x2a, 0xb9, 0x28, 0x3c, 0x4e, 0x6a, 0x60, 0x4e, 0x84, 0xb4, 0xbc, 0x11, 0xdd, 0xf7, 0xe0, - 0x84, 0x18, 0x82, 0x51, 0x12, 0x5a, 0xf7, 0x68, 0x97, 0x27, 0xc9, 0x2f, 0xc2, 0x5b, 0xdf, 0x0b, - 0x7b, 0xf0, 0x5c, 0x56, 0xda, 0xdc, 0x57, 0x7c, 0xbc, 0x20, 0x33, 0x55, 0x52, 0xcc, 0xf0, 0xb8, - 0xd0, 0xee, 0xa6, 0xdc, 0xa4, 0x4a, 0xd6, 0x30, 0xc0, 0x40, 0x45, 0x20, 0xa6, 0x7c, 0x98, 0x3d, - 0x67, 0xc4, 0x8c, 0xe0, 0xb3, 0x6c, 0x98, 0xd1, 0xd2, 0x24, 0x3c, 0x55, 0x17, 0xa1, 0x90, 0x8c, - 0x6c, 0xcd, 0x35, 0x23, 0xb4, 0xe9, 0x79, 0x0e, 0x07, 0x31, 0x02, 0x42, 0x84, 0x9a, 0x6c, 0xa7, - 0x4c, 0x3b, 0xe3, 0xc2, 0x08, 0x03, 0x6a, 0x46, 0x1e, 0x4d, 0x12, 0x3c, 0xb7, 0xa3, 0x15, 0xd6, - 0x48, 0x6e, 0x41, 0x2b, 0xc2, 0x01, 0x81, 0xb2, 0xe6, 0xe3, 0x1c, 0x2c, 0xa0, 0xd8, 0x30, 0x57, - 0x60, 0xa5, 0x73, 0x4e, 0x69, 0x41, 0xd9, 0xa0, 0x2f, 0x42, 0xfa, 0xa0, 0x63, 0x0a, 0x3d, 0x2e, - 0xff, 0x15, 0xe1, 0x88, 0x2a, 0x2f, 0x27, 0xca, 0xcd, 0x0f, 0x97, 0xb1, 0x0a, 0x71, 0x1a, 0xd6, - 0x45, 0x32, 0xa8, 0x19, 0xc1, 0x24, 0xd2, 0x26, 0x7e, 0xae, 0x2f, 0x3b, 0x2b, 0x9b, 0xf5, 0x89, - 0x05, 0x44, 0xbd, 0xed, 0xde, 0xdf, 0x2f, 0x61, 0xe5, 0x29, 0x3e, 0x3f, 0xab, 0x92, 0x71, 0x1a, - 0x56, 0xd2, 0x5d, 0x70, 0x95, 0xf6, 0x8f, 0x9f, 0xde, 0x92, 0xd4, 0x32, 0x0a, 0x47, 0x11, 0xdc, - 0x89, 0x55, 0x75, 0x77, 0x7f, 0xd6, 0x8f, 0xc4, 0x41, 0x61, 0x6d, 0xd6, 0xb4, 0xd5, 0x46, 0x57, - 0xc4, 0xe2, 0x61, 0x43, 0x0b, 0x8a, 0x79, 0xde, 0x73, 0xdc, 0xb7, 0x79, 0xd8, 0x0b, 0x2c, 0x5a, - 0x94, 0x90, 0x11, 0x01, 0x0d, 0x01, 0xfc, 0x43, 0xd6, 0x8a, 0x96, 0x20, 0x22, 0x0a, 0xca, 0xd8, - 0xb8, 0xfa, 0x0e, 0xa1, 0xa1, 0x09, 0x99, 0xc8, 0x14, 0xe5, 0xd3, 0x26, 0xa5, 0x79, 0x70, 0x80, - 0x60, 0x15, 0x1d, 0x56, 0xac, 0x81, 0x0c, 0x6d, 0x9c, 0x40, 0x2b, 0x1d, 0x23, 0x2e, 0x5b, 0x8a, - 0xdf, 0xc2, 0x21, 0x43, 0x3e, 0x2a, 0x0b, 0x62, 0xed, 0x4e, 0xfe, 0x71, 0x85, 0x55, 0x3a, 0xe3, - 0x36, 0x72, 0xc9, 0x15, 0x8f, 0xbc, 0xe8, 0x53, 0xfc, 0x6d, 0x4a, 0xf4, 0x28, 0xc5, 0x5e, 0x5b, - 0x3d, 0x81, 0x50, 0xf5, 0x96, 0xc3, 0x8a, 0x9b, 0x8c, 0xa8, 0x5c, 0x72, 0x23, 0x03, 0x53, 0x81, - 0xe4, 0xe0, 0xfa, 0xff, 0x8a, 0xfc, 0x4c, 0x15, 0xc1, 0xdf, 0xc7, 0x11, 0xf8, 0xe9, 0xf3, 0x7b, - 0xad, 0xa4, 0x38, 0xca, 0x65, 0x3c, 0x11, 0x76, 0x25, 0x74, 0xfc, 0x13, 0x9b, 0x8f, 0x2a, 0x96, - 0x19, 0xba, 0x96, 0xa6, 0x2f, 0x8e, 0x32, 0x8b, 0x97, 0x84, 0x88, 0x99, 0xc2, 0x70, 0x9e, 0x48, - 0x70, 0x50, 0xc9, 0x83, 0x2a, 0x91, 0x66, 0xf8, 0xac, 0x5f, 0x63, 0x9d, 0x8a, 0xe8, 0xe9, 0xd7, - 0x82, 0x7c, 0xfb, 0x5a, 0xa9, 0xb8, 0xa7, 0x78, 0x80, 0xa1, 0x1f, 0x57, 0xac, 0x05, 0xac, 0x6c, - 0x1c, 0x3c, 0x4c, 0x46, 0xe1, 0xad, 0xe8, 0x32, 0x04, 0x52, 0x04, 0x37, 0x6f, 0xba, 0x03, 0x05, - 0x70, 0x47, 0xc4, 0xf0, 0x4f, 0x22, 0x64, 0xb1, 0x20, 0x83, 0x05, 0x91, 0x61, 0xea, 0x0e, 0xac, - 0x3c, 0xe6, 0x3d, 0xb0, 0xb8, 0x07, 0x1d, 0x51, 0x05, 0x26, 0xcd, 0xfc, 0x1b, 0x39, 0x65, 0x67, - 0x2f, 0x84, 0x42, 0x96, 0x79, 0x16, 0x89, 0x2c, 0xb9, 0x3e, 0x06, 0xc0, 0x54, 0xa4, 0xeb, 0xd5, - 0x4f, 0x95, 0x67, 0x08, 0xc2, 0x84, 0x11, 0xf2, 0x59, 0x97, 0x24, 0x11, 0x4d, 0x06, 0x72, 0xb5, - 0xaa, 0xee, 0xdc, 0xd3, 0xcf, 0xc4, 0x7d, 0x00, 0x60, 0x0d, 0x23, 0x78, 0x38, 0xce, 0x10, 0x10, - 0x14, 0xf9, 0x35, 0x64, 0x2c, 0xd9, 0x81, 0xdd, 0x2a, 0x30, 0xd2, 0x76, 0x00, 0x78, 0x78, 0x5e, - 0x56, 0x37, 0x16, 0x64, 0xba, 0x1e, 0x07, 0x0a, 0x25, 0x42, 0xc0, 0x00, 0x94, 0x63, 0x1c, 0xf1, - 0x01, 0x10, 0x56, 0x52, 0x60, 0x2b, 0x25, 0x20, 0x12, 0x03, 0xbc, 0x6a, 0x40, 0x5c, 0x4b, 0x42, - 0x16, 0x81, 0x21, 0xca, 0x91, 0x11, 0x06, 0x69, 0xcb, 0x4c, 0x2f, 0x68, 0x3c, 0x9c, 0x21, 0x1f, - 0x71, 0x9b, 0x8f, 0x5c, 0x93, 0x38, 0x56, 0xf6, 0xf3, 0x53, 0xe0, 0xaa, 0xdc, 0xbb, 0x7a, 0x8a, - 0xda, 0x9a, 0x0c, 0xd4, 0xc9, 0x01, 0x52, 0x75, 0xaa, 0xce, 0x11, 0xc2, 0x3c, 0xa5, 0xc9, 0xef, - 0xbd, 0xd3, 0xae, 0x08, 0xac, 0x6f, 0x6a, 0x5e, 0x25, 0x5e, 0x6e, 0x32, 0x5c, 0x1f, 0x10, 0x42, - 0xb6, 0x9d, 0xc6, 0xee, 0x40, 0x8a, 0xed, 0x18, 0xf5, 0xc6, 0xb2, 0xc7, 0xa1, 0x90, 0xc8, 0x7e, - 0x2b, 0x9a, 0xb4, 0x0d, 0x23, 0x92, 0x5c, 0xd1, 0xe1, 0x6a, 0xaf, 0x3a, 0x2c, 0x6f, 0x97, 0xf3, - 0x69, 0x6f, 0xd9, 0x4c, 0xa3, 0x40, 0xfc, 0x4d, 0xbd, 0x72, 0xb1, 0xf1, 0x64, 0x63, 0xcb, 0xe8, - 0x85, 0x7f, 0x18, 0x6e, 0x32, 0x82, 0xa8, 0xcd, 0xe1, 0x80, 0xb8, 0x41, 0x3e, 0xb6, 0x55, 0x7c, - 0x17, 0x3e, 0xaa, 0x54, 0xd1, 0xe1, 0x0a, 0x83, 0x46, 0xd5, 0x2e, 0xff, 0x02, 0xa6, 0x33, 0x80, - 0xc2, 0xa5, 0x67, 0x83, 0x63, 0x5c, 0x22, 0x53, 0x13, 0x7e, 0x58, 0x7a, 0x49, 0xf9, 0xf9, 0x7f, - 0x6c, 0xfb, 0xe0, 0xbc, 0xef, 0x43, 0xd9, 0x1f, 0xb4, 0x83, 0xd7, 0x9f, 0xfd, 0x70, 0xbd, 0x45, - 0x55, 0xd2, 0x82, 0x96, 0x05, 0x95, 0x93, 0xb0, 0xac, 0x90, 0x0f, 0x01, 0x2a, 0x44, 0x12, 0x2a, - 0x7f, 0x1c, 0xe8, 0x0b, 0xc8, 0xc6, 0x1e, 0x82, 0xc0, 0xc6, 0xde, 0x70, 0x70, 0x34, 0x43, 0x96, - 0xa7, 0xcc, 0x8b, 0xb1, 0xc8, 0x0f, 0x81, 0x6c, 0x2c, 0x49, 0x40, 0x02, 0xa5, 0x41, 0x1a, 0xb2, - 0x18, 0xc9, 0xd0, 0x78, 0x2a, 0xa3, 0x51, 0xa3, 0x01, 0x0c, 0xb6, 0xd3, 0xc1, 0xa1, 0x01, 0xf1, - 0xc3, 0x40, 0x1a, 0xae, 0xde, 0x31, 0x02, 0x5b, 0x6d, 0xbf, 0xff, 0x10, 0x0e, 0x06, 0xc7, 0x80, - 0xb0, 0x1e, 0x02, 0xc2, 0x9b, 0xd1, 0x05, 0x4e, 0x43, 0x47, 0x02, 0x51, 0xba, 0x39, 0x2c, 0xb2, - 0xcb, 0x7c, 0x45, 0xc4, 0xa2, 0xb9, 0xd1, 0xc4, 0x55, 0xff, 0xe0, 0xe0, 0x6d, 0x30, 0x01, 0xe2, - 0x53, 0xe1, 0x99, 0x73, 0x9a, 0xb3, 0x89, 0x3f, 0x03, 0x13, 0x5c, 0x14, 0xe5, 0x41, 0x18, 0x25, - 0x73, 0x07, 0x1c, 0x16, 0xf4, 0x89, 0x19, 0x0e, 0x6c, 0x50, 0xb6, 0x1c, 0xfa, 0x19, 0x5f, 0xcd, - 0x51, 0x8e, 0x35, 0x10, 0x08, 0xf1, 0x02, 0x06, 0xed, 0x15, 0x7c, 0xd9, 0xab, 0xca, 0xce, 0x91, - 0x7e, 0x17, 0xc1, 0x14, 0x30, 0x25, 0x21, 0xab, 0x6c, 0x5e, 0x1a, 0x88, 0x22, 0xbc, 0x76, 0xef, - 0xf0, 0x84, 0x29, 0x36, 0x3f, 0x07, 0x85, 0xce, 0x90, 0x4a, 0x02, 0xb9, 0x27, 0x01, 0xaa, 0x61, - 0x79, 0x61, 0xb3, 0xb7, 0x5b, 0xcb, 0x59, 0x66, 0x29, 0xa8, 0x98, 0x80, 0xe4, 0x50, 0xb1, 0x10, - 0xa4, 0xfd, 0x46, 0x19, 0x49, 0x32, 0x55, 0x44, 0x05, 0xcd, 0x28, 0x71, 0x7a, 0xd4, 0x4b, 0x52, - 0xea, 0xa0, 0xea, 0x94, 0x18, 0x4e, 0xa1, 0xcf, 0x9e, 0x70, 0x42, 0x20, 0x6c, 0xd8, 0xe9, 0x54, - 0x0c, 0x9e, 0x47, 0xf8, 0x9b, 0xec, 0x30, 0x61, 0x8f, 0x1e, 0xf3, 0xdb, 0x15, 0x68, 0x6c, 0xb7, - 0x87, 0x8f, 0x07, 0xfa, 0x5b, 0x62, 0x49, 0x4a, 0x1f, 0x63, 0x37, 0x39, 0xf8, 0xc2, 0x15, 0x6f, - 0x70, 0xc0, 0xdd, 0x50, 0xde, 0x84, 0xcf, 0x87, 0xc7, 0x09, 0xc8, 0x28, 0x35, 0x4e, 0x30, 0x07, - 0xfe, 0x14, 0x80, 0x84, 0x08, 0x8a, 0x68, 0xa4, 0xf1, 0x01, 0x60, 0x24, 0x64, 0x93, 0x12, 0x96, - 0xac, 0xb1, 0x2e, 0x50, 0x41, 0x64, 0x68, 0x07, 0x0f, 0x65, 0x10, 0x52, 0x03, 0xa8, 0x5e, 0xe3, - 0x49, 0x95, 0x7f, 0x3b, 0x31, 0x10, 0xa5, 0x88, 0x4a, 0xc0, 0xc0, 0x49, 0x09, 0x88, 0xb6, 0x52, - 0x18, 0xf4, 0x45, 0x25, 0x49, 0xf7, 0x33, 0xc8, 0xf0, 0x17, 0xbd, 0x1b, 0x2b, 0x39, 0x68, 0x09, - 0x25, 0x99, 0x88, 0x10, 0x12, 0xcd, 0x82, 0x38, 0x00, 0x8f, 0x10, 0x0a, 0xe8, 0xce, 0x48, 0x99, - 0xaf, 0x50, 0x51, 0x59, 0x2c, 0xd4, 0x94, 0x2a, 0x50, 0xdd, 0x11, 0x71, 0xfd, 0xd9, 0x08, 0x78, - 0x47, 0x9a, 0xd4, 0x47, 0xca, 0x74, 0xc2, 0x8b, 0x46, 0x0a, 0x03, 0x01, 0x4d, 0x6a, 0x07, 0xe2, - 0x52, 0x63, 0xe8, 0xe0, 0xf6, 0xdc, 0x71, 0x9d, 0x76, 0x7e, 0x52, 0x2a, 0x7e, 0x14, 0x3c, 0x4d, - 0xcd, 0x1a, 0x6d, 0xb8, 0x25, 0xad, 0x84, 0xc7, 0xd1, 0x0d, 0x29, 0x58, 0xd6, 0x5a, 0x07, 0xe3, - 0x54, 0x0e, 0x59, 0x50, 0x1b, 0x9e, 0x24, 0x40, 0x2c, 0xa0, 0x68, 0x70, 0xa3, 0x08, 0x41, 0x3a, - 0xd1, 0xca, 0xf4, 0x22, 0xb8, 0xdf, 0x0f, 0x77, 0xc3, 0x73, 0xf8, 0x38, 0x24, 0xb0, 0x35, 0x55, - 0x38, 0x0d, 0xb8, 0xab, 0xf8, 0xde, 0x2b, 0x19, 0x4f, 0xc1, 0x24, 0xb9, 0xf8, 0xca, 0xa6, 0x96, - 0xef, 0xb2, 0xac, 0xbe, 0xe6, 0xe1, 0x4a, 0x4d, 0x8d, 0x83, 0xc9, 0xc7, 0xb2, 0x94, 0x26, 0x11, - 0xe6, 0xdd, 0x9b, 0xdb, 0x71, 0xe6, 0x23, 0xda, 0xf8, 0x7a, 0x5d, 0x81, 0xba, 0x38, 0x72, 0xbc, - 0x84, 0x9f, 0x19, 0x43, 0x01, 0x6a, 0x35, 0x0d, 0x7f, 0xab, 0x4c, 0x55, 0xbc, 0x61, 0xa5, 0xe2, - 0x6b, 0x4c, 0x2c, 0x16, 0x15, 0x00, 0xd2, 0xd5, 0xad, 0xa3, 0x07, 0xc4, 0x41, 0x61, 0x62, 0x16, - 0x18, 0x9a, 0xc6, 0xab, 0xa8, 0x9d, 0x1c, 0xf8, 0x52, 0x5c, 0x2c, 0x6d, 0xe7, 0x8e, 0x0d, 0xa8, - 0xfb, 0x0b, 0x19, 0x6f, 0x23, 0x67, 0xcd, 0x0a, 0x6f, 0xf1, 0xf1, 0x8f, 0x28, 0xf4, 0x1d, 0xb0, - 0xdf, 0x0d, 0x1b, 0x2a, 0x9b, 0x3c, 0x64, 0xf2, 0xa7, 0x73, 0xe5, 0xa3, 0x4e, 0xf7, 0xbd, 0xfd, - 0xd8, 0x66, 0x54, 0x7f, 0x93, 0x82, 0x32, 0xde, 0xfd, 0xf1, 0xb1, 0x79, 0xb6, 0x68, 0x03, 0xa1, - 0x38, 0x11, 0x46, 0xa2, 0x4b, 0x5b, 0xa2, 0x6a, 0x44, 0xf4, 0xf9, 0x7c, 0xbf, 0xc1, 0xc0, 0x40, - 0x28, 0x4c, 0x95, 0x64, 0xc0, 0x35, 0x0b, 0x09, 0xac, 0xeb, 0x8f, 0x6a, 0x35, 0x42, 0xc0, 0x01, - 0x8b, 0x8b, 0x58, 0x0c, 0x1e, 0xa7, 0xf1, 0x4a, 0x52, 0x26, 0xbd, 0x98, 0xa0, 0x0e, 0x90, 0x8c, - 0xa9, 0x5c, 0x48, 0x31, 0x0a, 0x14, 0x1e, 0x85, 0xa5, 0x86, 0x15, 0x4b, 0x6d, 0x75, 0x21, 0x8d, - 0xd3, 0x63, 0x11, 0xe0, 0x63, 0x1b, 0xc8, 0xd4, 0x52, 0xd5, 0xa4, 0x14, 0x71, 0x83, 0xc6, 0xa9, - 0xc5, 0xbc, 0x48, 0xd1, 0x03, 0x34, 0x32, 0x95, 0xe7, 0x94, 0xc4, 0xd0, 0xb3, 0x04, 0x58, 0x97, - 0xe3, 0x28, 0x0e, 0x5e, 0x2f, 0x2c, 0x8f, 0xd4, 0xed, 0xbd, 0xe4, 0x62, 0x31, 0x7e, 0x89, 0x7a, - 0x32, 0xa8, 0xf0, 0x80, 0x91, 0xb2, 0xa4, 0x2a, 0x16, 0x32, 0xb0, 0x8c, 0x35, 0xa4, 0x4d, 0xab, - 0xf3, 0xa6, 0x3d, 0x50, 0xde, 0x3d, 0x64, 0x92, 0x03, 0xd1, 0x49, 0x45, 0x19, 0x00, 0xfb, 0x6a, - 0x8b, 0x20, 0x5c, 0x68, 0xc3, 0x64, 0x79, 0xff, 0x64, 0x39, 0xd8, 0x44, 0x40, 0x52, 0x55, 0x4a, - 0x57, 0x60, 0x9c, 0x03, 0x92, 0x02, 0xb8, 0xee, 0x48, 0x6b, 0x1d, 0x14, 0x24, 0xd0, 0x22, 0xa6, - 0x65, 0x2e, 0x20, 0xc2, 0x52, 0x5a, 0x8f, 0xbc, 0x94, 0xea, 0xf6, 0x25, 0xc4, 0x82, 0x1f, 0x05, - 0x20, 0xb0, 0xae, 0xa9, 0x7e, 0xe5, 0xcc, 0xb4, 0x7a, 0x75, 0x83, 0x10, 0xc8, 0x76, 0x29, 0x24, - 0xd2, 0xc1, 0xa6, 0xbc, 0x43, 0x5a, 0x3c, 0x4e, 0x0f, 0xba, 0x38, 0x58, 0x49, 0xdc, 0x6e, 0x20, - 0xb4, 0x12, 0x1f, 0x29, 0xf8, 0xab, 0x35, 0xbb, 0x94, 0x01, 0xbc, 0x38, 0xff, 0xc3, 0x8a, 0x00, - 0x15, 0x64, 0x8a, 0x90, 0x1e, 0x44, 0xff, 0x82, 0xf2, 0x0d, 0x50, 0xc4, 0x94, 0xb6, 0xc8, 0x3d, - 0xc8, 0xa4, 0xf2, 0x2f, 0x8f, 0x4e, 0x35, 0x91, 0x44, 0x5b, 0x4f, 0xb4, 0xd7, 0x82, 0x10, 0xc8, - 0x8c, 0x06, 0xcd, 0xea, 0x7e, 0x52, 0xbd, 0x7e, 0x08, 0x43, 0x20, 0x96, 0x50, 0xaf, 0x0f, 0x59, - 0xca, 0x05, 0xbc, 0x50, 0x97, 0xbf, 0x39, 0xf0, 0x4b, 0x66, 0x2d, 0x8d, 0x59, 0x97, 0x73, 0x88, - 0x82, 0x09, 0x6d, 0xfc, 0x6b, 0x0a, 0x09, 0x01, 0xb5, 0x43, 0xec, 0xae, 0xc1, 0xd8, 0x16, 0xb3, - 0xa9, 0x17, 0x24, 0x25, 0x2e, 0x0d, 0x3a, 0x96, 0xa4, 0xf4, 0xff, 0x11, 0x08, 0x90, 0x48, 0x38, - 0x1d, 0x01, 0x9d, 0x39, 0xee, 0x26, 0xb3, 0xad, 0x71, 0x02, 0x03, 0xd8, 0x04, 0xba, 0xdf, 0x4a, - 0x9e, 0xb8, 0xd9, 0x83, 0x39, 0x8f, 0x46, 0xda, 0x6c, 0x6b, 0x17, 0xff, 0x0a, 0x09, 0xe8, 0xcf, - 0x02, 0xfe, 0x86, 0x3a, 0x8b, 0x45, 0x63, 0x23, 0xc1, 0x49, 0x2f, 0xf4, 0x27, 0xcd, 0x7d, 0xfc, - 0x59, 0x9d, 0xb1, 0x5d, 0x3a, 0xfc, 0x12, 0xef, 0x7d, 0x23, 0x78, 0x44, 0xbc, 0x69, 0x54, 0xd8, - 0x8e, 0xdd, 0x63, 0x35, 0xf4, 0x5a, 0x45, 0xf0, 0x96, 0xd9, 0x5a, 0x63, 0xa9, 0xd4, 0x8a, 0xb1, - 0x64, 0x9f, 0xae, 0x12, 0x90, 0x30, 0x10, 0xac, 0x62, 0x62, 0x30, 0x8d, 0x86, 0xbe, 0x3c, 0xdd, - 0x36, 0xe6, 0x0c, 0x1b, 0xbe, 0xcb, 0xc2, 0x5b, 0xcb, 0xe7, 0xc3, 0xff, 0xc4, 0x15, 0xb3, 0xba, - 0x03, 0xa7, 0x71, 0x11, 0x25, 0x5e, 0x32, 0xcd, 0xb7, 0x0e, 0xb4, 0x9a, 0x64, 0xd3, 0x3f, 0x92, - 0x04, 0xb2, 0x65, 0x4c, 0xaf, 0x8a, 0xe3, 0xd9, 0x32, 0x1b, 0x36, 0x6d, 0x78, 0xea, 0x37, 0xe9, - 0x0c, 0x69, 0xd4, 0x8c, 0x2e, 0xf9, 0xb3, 0x43, 0x78, 0x44, 0x69, 0x1a, 0xdb, 0x5d, 0x97, 0xc3, - 0x08, 0xd4, 0x78, 0xe7, 0xe1, 0x0a, 0x93, 0xb6, 0x21, 0x35, 0x75, 0xd3, 0x77, 0x1a, 0x39, 0xf9, - 0x37, 0xee, 0x8c, 0x9f, 0x84, 0x46, 0xcd, 0x46, 0xb2, 0xbb, 0xd3, 0x6c, 0xe5, 0x10, 0xe8, 0x58, - 0x0f, 0xd8, 0xb8, 0x35, 0x50, 0x17, 0x45, 0x83, 0x0a, 0x80, 0xe4, 0x4c, 0x00, 0x2a, 0x6e, 0x3a, - 0x59, 0x32, 0x72, 0xa6, 0x3c, 0x18, 0xf0, 0x45, 0x0e, 0x98, 0x54, 0xf3, 0x57, 0x82, 0xff, 0xc1, - 0x80, 0x91, 0xb1, 0x72, 0x25, 0x9b, 0x01, 0xcb, 0x63, 0xc6, 0xc1, 0x20, 0xa9, 0x3a, 0xa7, 0x83, - 0x91, 0xf7, 0xe6, 0xe4, 0xfc, 0x96, 0x29, 0x48, 0xa8, 0x59, 0xe0, 0xe3, 0xf3, 0xc1, 0xc2, 0x03, - 0xe2, 0x61, 0x13, 0xdb, 0x08, 0x27, 0x24, 0xf5, 0x30, 0x63, 0x0e, 0x28, 0x7b, 0x67, 0xba, 0x5e, - 0x42, 0x21, 0x90, 0xb2, 0x2f, 0xc2, 0x85, 0x2c, 0x64, 0x2f, 0xe1, 0x05, 0xaa, 0x2b, 0xae, 0x47, - 0xc2, 0xa6, 0x18, 0xab, 0xec, 0xc2, 0x03, 0x2b, 0xc5, 0x4b, 0x8d, 0x67, 0x4a, 0xeb, 0xec, 0xd5, - 0x27, 0xdc, 0x4c, 0x6e, 0x23, 0x50, 0xed, 0xe3, 0x47, 0x3d, 0x17, 0x74, 0x52, 0xd1, 0x4d, 0xd7, - 0x63, 0xac, 0xb2, 0x41, 0xed, 0x86, 0x12, 0x17, 0x4b, 0x32, 0x61, 0xac, 0x74, 0x4e, 0x53, 0x51, - 0xdb, 0x90, 0xdd, 0x7f, 0xf8, 0xc1, 0x2b, 0x19, 0x6c, 0x04, 0x05, 0xd3, 0x90, 0x84, 0xa0, 0x85, - 0xd5, 0xa1, 0x50, 0x78, 0xd6, 0x80, 0x8d, 0x82, 0x9c, 0x48, 0xf1, 0x15, 0x9b, 0x94, 0x40, 0xbf, - 0x15, 0x8c, 0x3d, 0xc2, 0x03, 0x32, 0x4f, 0xb1, 0x77, 0x6e, 0x76, 0x07, 0xf0, 0x48, 0x22, 0xdd, - 0xb8, 0x3e, 0x6a, 0x7a, 0x6b, 0x89, 0xf2, 0x41, 0xb9, 0x93, 0x3c, 0xc2, 0xdd, 0xeb, 0xe5, 0x18, - 0xfb, 0x7e, 0x4b, 0xbf, 0xee, 0xf3, 0xfb, 0xe7, 0xaf, 0x96, 0x97, 0xae, 0x12, 0x16, 0xc2, 0x15, - 0xbc, 0xfb, 0x5e, 0x22, 0x13, 0x21, 0x73, 0x7d, 0x14, 0x7c, 0x3c, 0x03, 0xe1, 0xd3, 0x13, 0xf1, - 0xed, 0x18, 0x00, 0x03, 0x92, 0x2c, 0x31, 0xe9, 0x7b, 0x2d, 0x7f, 0x6c, 0xbb, 0x88, 0x85, 0x0f, - 0x68, 0x79, 0x68, 0x0c, 0xf9, 0x29, 0x29, 0xa9, 0x47, 0x10, 0x4e, 0xac, 0xbe, 0xa3, 0xdd, 0x68, - 0xf9, 0xda, 0xa2, 0x94, 0x3c, 0x49, 0xde, 0x08, 0x3b, 0x44, 0x52, 0x3b, 0x7f, 0x31, 0x9e, 0xef, - 0xe6, 0x26, 0xcc, 0xdf, 0xc1, 0x1f, 0x54, 0xc5, 0x29, 0xf5, 0xef, 0x97, 0x55, 0xae, 0x30, 0xa9, - 0xa1, 0xdf, 0x8f, 0xa4, 0xc9, 0x3d, 0x96, 0xac, 0x7c, 0x22, 0x30, 0xc3, 0x39, 0x44, 0xfc, 0x7c, - 0x8d, 0xd6, 0x82, 0xaa, 0xe0, 0x40, 0x51, 0x70, 0x09, 0x8e, 0xfe, 0x14, 0x9c, 0x71, 0x35, 0x42, - 0x49, 0x9b, 0x19, 0x38, 0x09, 0x09, 0x4f, 0x8e, 0x61, 0x9f, 0x97, 0x15, 0xe2, 0x86, 0x95, 0x2a, - 0x24, 0x5d, 0xbc, 0x71, 0xdf, 0x8b, 0x87, 0x84, 0x03, 0xd0, 0xc8, 0xca, 0x7d, 0x8f, 0xdd, 0x06, - 0x2e, 0x01, 0x3e, 0x88, 0x39, 0x44, 0x00, 0x35, 0x21, 0x41, 0x08, 0x3f, 0x8a, 0x27, 0x86, 0x50, - 0x27, 0x06, 0x4b, 0x05, 0xbc, 0xbd, 0x44, 0x0c, 0x23, 0xbd, 0x81, 0x20, 0x32, 0x14, 0xbb, 0xab, - 0x42, 0x26, 0x50, 0x85, 0x19, 0x22, 0xb1, 0x78, 0x32, 0x6b, 0xef, 0x7c, 0x0f, 0x06, 0x16, 0x63, - 0x5d, 0x61, 0xa0, 0x74, 0xd5, 0x14, 0x18, 0x33, 0x04, 0x38, 0x71, 0x14, 0x02, 0x10, 0x1a, 0x67, - 0x21, 0x5c, 0x5d, 0x86, 0xc2, 0x4e, 0xaf, 0x24, 0x2a, 0xb6, 0x32, 0xb2, 0x57, 0x0b, 0x95, 0xb1, - 0xac, 0x13, 0xb9, 0xaa, 0xc3, 0x7f, 0x4c, 0xdb, 0xc4, 0x82, 0xcb, 0x41, 0x5e, 0x3e, 0xeb, 0x6f, - 0x0c, 0x74, 0x34, 0xba, 0x72, 0x50, 0xf0, 0x81, 0x1d, 0xaf, 0xc2, 0x42, 0x85, 0x26, 0xc8, 0x62, - 0x81, 0xa4, 0xb1, 0xe9, 0x01, 0xf8, 0x2b, 0x12, 0x9a, 0x7e, 0xa2, 0x79, 0x9b, 0x01, 0x8d, 0xe6, - 0x3e, 0x34, 0xc1, 0x27, 0x69, 0xd8, 0x1b, 0xae, 0xb4, 0x95, 0x0e, 0xdc, 0xbf, 0xaa, 0xbe, 0x3c, - 0xbf, 0xfc, 0x21, 0x2b, 0x5b, 0xb3, 0xaa, 0xad, 0x55, 0x7c, 0xb4, 0x09, 0xe7, 0x15, 0xf0, 0x51, - 0x7b, 0x6a, 0xa6, 0xf5, 0x7f, 0x8f, 0xde, 0xc7, 0x95, 0x84, 0x08, 0xd3, 0xc2, 0xef, 0xb1, 0xb7, - 0x89, 0x85, 0x2b, 0x86, 0x4f, 0xba, 0xea, 0x29, 0xb3, 0x63, 0x9c, 0xfa, 0xaf, 0x16, 0x8f, 0x10, - 0x14, 0xb3, 0x64, 0x1f, 0x31, 0xa6, 0x42, 0x6c, 0xe4, 0x84, 0x6e, 0x60, 0x9e, 0x60, 0xdd, 0xdf, - 0xe8, 0x47, 0x88, 0x23, 0x1a, 0xd2, 0xa6, 0x9d, 0xf2, 0xeb, 0x55, 0xc1, 0x10, 0xd4, 0xab, 0xca, - 0x4e, 0x51, 0x58, 0xec, 0xad, 0xf2, 0x0b, 0xbe, 0xff, 0x1d, 0x26, 0xd7, 0x93, 0xd0, 0x9a, 0x8a, - 0xff, 0x18, 0x51, 0xf5, 0xbd, 0x3b, 0x1d, 0x24, 0x1e, 0x96, 0x3c, 0x3d, 0x28, 0x36, 0xa7, 0xc6, - 0x78, 0x53, 0x5d, 0x99, 0x2b, 0x55, 0xc7, 0x88, 0x35, 0x29, 0xaa, 0xad, 0x56, 0xab, 0xf0, 0x85, - 0x4d, 0x95, 0x66, 0xda, 0xa5, 0x56, 0xd7, 0xd1, 0x7a, 0xf8, 0xd3, 0x4c, 0x85, 0xd7, 0x31, 0x08, - 0x58, 0xf5, 0xfc, 0xf4, 0x61, 0x88, 0x2c, 0x9f, 0xc3, 0xab, 0xa4, 0x5c, 0x9b, 0x33, 0x7d, 0x10, - 0xc6, 0x81, 0x7e, 0xbe, 0x24, 0x40, 0x2c, 0xb1, 0x46, 0xa6, 0x61, 0xd5, 0xd5, 0x77, 0x3f, 0x97, - 0x88, 0x39, 0xd2, 0xbf, 0x4e, 0xb7, 0xe0, 0x58, 0x05, 0x23, 0x60, 0xe9, 0x3c, 0x50, 0x43, 0x18, - 0x34, 0x5e, 0x05, 0xf6, 0x4f, 0xa7, 0x02, 0x90, 0x96, 0xae, 0x78, 0xc1, 0xde, 0x4a, 0xc9, 0x01, - 0xc1, 0x16, 0x97, 0xac, 0xe0, 0x05, 0x87, 0x80, 0x68, 0x3a, 0x3e, 0x4c, 0x9b, 0x00, 0xb3, 0x50, - 0x0c, 0x27, 0xc1, 0xa9, 0x00, 0x0e, 0xbf, 0xcf, 0x55, 0x52, 0xc2, 0x1d, 0x50, 0x3c, 0x57, 0x38, - 0x12, 0x92, 0x25, 0x2c, 0xc6, 0x1b, 0xce, 0x9e, 0x65, 0x66, 0x12, 0xb8, 0xc7, 0x53, 0xf0, 0x88, - 0x6b, 0x35, 0xc1, 0xc5, 0x72, 0xc0, 0x17, 0xe5, 0x41, 0x9c, 0x9c, 0x7e, 0x7f, 0x8e, 0xe6, 0xa8, - 0x03, 0x73, 0x27, 0xad, 0x97, 0x2c, 0x32, 0x2e, 0x84, 0x02, 0xd6, 0xc1, 0x7c, 0x32, 0x6e, 0x08, - 0x11, 0xfd, 0x95, 0x54, 0x6e, 0xde, 0x2e, 0x6d, 0x10, 0xdb, 0x80, 0x2a, 0x4a, 0xf1, 0x87, 0xbe, - 0xbd, 0xa6, 0x51, 0xc3, 0x03, 0xcd, 0x0a, 0x2f, 0x05, 0x50, 0xb0, 0x5a, 0x17, 0x9e, 0x3d, 0xdd, - 0x0e, 0x15, 0xc6, 0x56, 0x57, 0x8e, 0x92, 0x1b, 0xfc, 0x1b, 0x83, 0x55, 0x38, 0xfa, 0x36, 0x9e, - 0xe0, 0xec, 0x82, 0x13, 0xa8, 0xd4, 0x3c, 0x68, 0xf9, 0xa9, 0x5b, 0x1c, 0x3a, 0xa0, 0x00, 0x70, - 0xd6, 0x7c, 0x40, 0xb2, 0x95, 0x2b, 0xfb, 0x5c, 0xdf, 0x48, 0x1f, 0x1a, 0x80, 0x31, 0x5b, 0x57, - 0xf4, 0x84, 0x6a, 0x01, 0xf3, 0xd0, 0xe3, 0x0a, 0x47, 0x18, 0x16, 0x91, 0x21, 0xc0, 0x1e, 0x6b, - 0xc0, 0x75, 0x13, 0x1e, 0xff, 0xc2, 0x84, 0x25, 0xa9, 0x5a, 0x65, 0xe3, 0xcb, 0x22, 0x22, 0x44, - 0x7a, 0x24, 0x34, 0xe1, 0x85, 0xf8, 0x9d, 0x78, 0xcf, 0x33, 0xe3, 0x05, 0x46, 0x4e, 0xf1, 0x01, - 0x02, 0x81, 0xf1, 0x29, 0x4d, 0x99, 0xfc, 0x83, 0xe8, 0x27, 0xff, 0x15, 0x39, 0xaa, 0xf8, 0x93, - 0x2a, 0x25, 0x60, 0xcd, 0x99, 0xd8, 0x13, 0xf8, 0x44, 0xaa, 0x5e, 0x67, 0x3a, 0x34, 0x06, 0x36, - 0x20, 0x8a, 0x0b, 0x0e, 0x8e, 0xa2, 0xff, 0x08, 0xf9, 0x75, 0xa7, 0x6e, 0x73, 0xea, 0x37, 0xad, - 0xe1, 0x4b, 0x4a, 0xd2, 0x13, 0x26, 0x15, 0xb3, 0x88, 0x3d, 0x51, 0x68, 0x53, 0xce, 0x31, 0xa1, - 0x45, 0xd2, 0xdc, 0x10, 0x05, 0x5b, 0xe7, 0x52, 0x1c, 0x6d, 0x13, 0x33, 0xe3, 0x68, 0x9c, 0x77, - 0x33, 0x8e, 0xfc, 0x11, 0x83, 0x49, 0xc1, 0xac, 0x19, 0xa2, 0x0e, 0x75, 0xde, 0x3a, 0x34, 0x0b, - 0x4b, 0x57, 0x95, 0x5f, 0xf8, 0x70, 0xb1, 0x94, 0x2f, 0x95, 0x99, 0xf6, 0x97, 0xeb, 0x84, 0x79, - 0xa5, 0x5d, 0x8c, 0xbf, 0xa4, 0x33, 0x98, 0x91, 0x7d, 0x71, 0x1b, 0x6f, 0x5a, 0xfc, 0x56, 0xf7, - 0xdd, 0xdf, 0x74, 0xeb, 0xf1, 0x39, 0x75, 0x3d, 0x77, 0xf3, 0x0b, 0xd3, 0x48, 0xfc, 0x96, 0x8c, - 0x92, 0x86, 0xb9, 0x2d, 0x5e, 0x4e, 0x09, 0x26, 0xdf, 0xdf, 0x10, 0x32, 0x4c, 0xe2, 0xd2, 0xf7, - 0x5a, 0x5f, 0x09, 0xf7, 0x7b, 0xbf, 0xc5, 0x93, 0x15, 0xf9, 0x73, 0x88, 0x47, 0x6e, 0x24, 0x48, - 0x25, 0x8c, 0x5a, 0xcc, 0xc3, 0x8c, 0xb1, 0x6d, 0x7b, 0x61, 0xcd, 0x2e, 0x73, 0xc4, 0x02, 0xeb, - 0x9b, 0x8b, 0xc9, 0x87, 0x5f, 0xc3, 0x53, 0xa7, 0x1a, 0x38, 0x23, 0xc5, 0x18, 0x00, 0x7f, 0x7e, - 0x00, 0x5c, 0x1b, 0xfb, 0xc1, 0xbf, 0xbe, 0x04, 0x00, 0x62, 0x36, 0xe0, 0x00, 0x36, 0x85, 0x03, - 0x52, 0x90, 0x23, 0x3d, 0xd3, 0x97, 0x8d, 0x4c, 0xf0, 0x1c, 0x41, 0x19, 0x45, 0x47, 0x4a, 0xb2, - 0xed, 0xc6, 0x05, 0x9c, 0x24, 0x8b, 0xb1, 0x60, 0x23, 0xac, 0x16, 0xb8, 0x62, 0xa6, 0x17, 0x86, - 0xa3, 0xa0, 0x04, 0xc1, 0x4e, 0xfc, 0xa5, 0x7d, 0x61, 0xae, 0xfa, 0x60, 0x49, 0x02, 0xc0, 0xd9, - 0x13, 0x0d, 0x76, 0x93, 0x2f, 0xf4, 0x8e, 0xb0, 0x16, 0x52, 0x82, 0xa1, 0x12, 0x5b, 0xad, 0x8c, - 0xec, 0xc3, 0xf9, 0x68, 0xca, 0x3d, 0x0b, 0x47, 0x69, 0x8a, 0xa4, 0xaa, 0x4c, 0x64, 0x42, 0xca, - 0x24, 0xf3, 0xbe, 0x4e, 0xc1, 0x5c, 0xda, 0xff, 0x05, 0x44, 0x66, 0x01, 0x64, 0x14, 0x28, 0x55, - 0x03, 0xc0, 0x17, 0xd1, 0x8f, 0x89, 0xb0, 0xa5, 0xe9, 0x0b, 0x8b, 0xd0, 0x3b, 0xfc, 0x66, 0xd8, - 0xb9, 0xbf, 0x2b, 0x11, 0xf2, 0xa1, 0x58, 0xa1, 0x8c, 0xcc, 0x52, 0xd7, 0x1b, 0x59, 0x50, 0xb8, - 0x57, 0x67, 0x9b, 0x9e, 0x07, 0xa9, 0x66, 0x70, 0x07, 0x89, 0x38, 0x58, 0x19, 0x61, 0xb7, 0xdd, - 0x9d, 0x7c, 0x24, 0x74, 0xc9, 0x80, 0x70, 0x5e, 0x78, 0x39, 0x8a, 0x6b, 0xe2, 0x67, 0x8f, 0x96, - 0xef, 0x5f, 0x82, 0x8f, 0x3d, 0xb0, 0x23, 0x04, 0x01, 0xae, 0x72, 0xf8, 0xcd, 0x76, 0x4d, 0x96, - 0x6a, 0x41, 0x62, 0xb4, 0x01, 0x69, 0x51, 0x66, 0x0f, 0x88, 0x0b, 0x8e, 0xae, 0xca, 0x78, 0x03, - 0x34, 0x16, 0xb7, 0xf8, 0xea, 0x99, 0x7f, 0x51, 0xe2, 0x66, 0x08, 0xb5, 0xc1, 0xa0, 0x6e, 0x3a, - 0xa4, 0x17, 0xff, 0x04, 0x25, 0x2b, 0x2b, 0xfa, 0x3b, 0x8a, 0x26, 0xa9, 0x9a, 0x1a, 0x52, 0xf2, - 0x52, 0x96, 0xb5, 0xc5, 0x1e, 0x9d, 0xdb, 0xb6, 0xd3, 0xe4, 0xe9, 0xa4, 0x33, 0x9a, 0x95, 0xd0, - 0x3f, 0x10, 0x2a, 0xf7, 0xbb, 0xa1, 0x97, 0x9a, 0x36, 0xbf, 0x5c, 0xd9, 0x7c, 0xbf, 0xc2, 0x85, - 0x0f, 0xc3, 0x78, 0xd2, 0x25, 0x06, 0x47, 0xf3, 0x40, 0xe3, 0x91, 0xe5, 0x8d, 0xf0, 0x2c, 0x64, - 0xed, 0x35, 0x77, 0x2f, 0x7f, 0x82, 0x5b, 0x33, 0x55, 0xc9, 0x0c, 0x9b, 0xe2, 0x6b, 0xab, 0xdf, - 0xe4, 0x8b, 0x88, 0xe7, 0xe0, 0xa6, 0xcf, 0x2b, 0x27, 0x46, 0xb4, 0xd2, 0x55, 0xd7, 0xc1, 0x54, - 0xe6, 0x46, 0x47, 0xa3, 0x0a, 0x2c, 0xa6, 0x27, 0x25, 0x5b, 0x1b, 0x6c, 0x9d, 0xdf, 0x19, 0xb0, - 0x67, 0x31, 0xbb, 0x10, 0xd4, 0x6d, 0xd0, 0x30, 0x08, 0x3d, 0x51, 0xd3, 0xe4, 0x7d, 0x1f, 0x41, - 0xb0, 0x66, 0xa7, 0xe4, 0xac, 0xfe, 0xea, 0xef, 0xfc, 0x23, 0xca, 0x55, 0x7f, 0xc9, 0x99, 0x47, - 0xe2, 0xcc, 0x84, 0xee, 0xdc, 0x9d, 0x67, 0xc8, 0x74, 0xea, 0xd2, 0xe2, 0x0d, 0x69, 0x24, 0xaa, - 0x93, 0x17, 0x96, 0xba, 0xae, 0x09, 0x2f, 0x7d, 0xfe, 0x22, 0xf3, 0xcb, 0x8d, 0x2d, 0x64, 0xe4, - 0x3d, 0x3a, 0x89, 0xe2, 0xc4, 0x73, 0x66, 0x6c, 0xf9, 0x32, 0x5d, 0xfc, 0x87, 0x55, 0x55, 0x5c, - 0x13, 0x91, 0x57, 0xaa, 0x5e, 0xf8, 0x2f, 0xea, 0x6c, 0x17, 0x55, 0xb7, 0xdb, 0x54, 0xfe, 0x18, - 0x99, 0x10, 0xe0, 0xc3, 0xde, 0x9c, 0xe7, 0x54, 0x33, 0x48, 0xe9, 0xbf, 0xf1, 0x03, 0x22, 0xba, - 0xdc, 0xdc, 0xbe, 0x5f, 0x10, 0x3c, 0x76, 0xe5, 0x8c, 0xb5, 0x96, 0x71, 0x4d, 0x7d, 0x9d, 0x72, - 0x67, 0x82, 0xd2, 0x27, 0x9c, 0x9d, 0xbb, 0x59, 0x7c, 0x49, 0x54, 0xab, 0x43, 0xd5, 0x0f, 0xf1, - 0x02, 0x07, 0x23, 0x3f, 0x64, 0xd8, 0x72, 0x1e, 0xc7, 0xc1, 0x51, 0x14, 0xd8, 0xed, 0x65, 0x19, - 0x4a, 0xa1, 0xa3, 0x92, 0x35, 0x71, 0xec, 0x49, 0xd2, 0xba, 0x94, 0x0b, 0xf0, 0x91, 0x50, 0x8b, - 0x19, 0x50, 0xd0, 0x21, 0xc7, 0x4f, 0xe1, 0x33, 0x49, 0x4d, 0x8d, 0x70, 0xaf, 0x1b, 0xe5, 0xef, - 0xba, 0x76, 0x9d, 0xdf, 0x73, 0xea, 0xeb, 0xf1, 0x02, 0x5e, 0xf7, 0x5f, 0xd8, 0xa9, 0x37, 0x27, - 0x13, 0xd3, 0x15, 0xa7, 0x4d, 0x3f, 0x28, 0xfd, 0x25, 0x5c, 0x12, 0x6f, 0x4f, 0xd3, 0x77, 0x77, - 0xdf, 0x09, 0x8e, 0x59, 0x55, 0x54, 0xb3, 0xf1, 0xd1, 0x59, 0xbb, 0x54, 0x99, 0xe3, 0x75, 0xef, - 0x3e, 0x3f, 0x84, 0x0e, 0x88, 0xed, 0xf2, 0x06, 0x09, 0x75, 0x8d, 0xa6, 0xb3, 0x05, 0xe0, 0xa8, - 0x42, 0xd4, 0xdf, 0x53, 0x51, 0x75, 0x96, 0xf8, 0x22, 0xe5, 0x8c, 0xf9, 0xf1, 0x32, 0xb3, 0xa3, - 0x98, 0xd3, 0xfe, 0x08, 0xb6, 0xd1, 0x34, 0x93, 0xe2, 0x0e, 0xda, 0xe6, 0xcd, 0x07, 0xe1, 0x22, - 0x10, 0xfd, 0x15, 0x8e, 0x72, 0x11, 0xd9, 0xaf, 0x35, 0x26, 0x96, 0x12, 0xe5, 0x13, 0xc9, 0xd7, - 0x1d, 0xdb, 0x5d, 0x33, 0x65, 0x2a, 0x4f, 0xa2, 0x7b, 0xe5, 0xab, 0x5a, 0xe0, 0x84, 0x89, 0xef, - 0x3f, 0xc9, 0x3f, 0xe4, 0xe6, 0x12, 0x9d, 0x34, 0x9f, 0x29, 0xde, 0xf2, 0xf0, 0x8e, 0x7d, 0x7e, - 0x6e, 0xf5, 0xd4, 0x6c, 0xb6, 0x23, 0xb1, 0xce, 0xa9, 0x7f, 0x8a, 0xa5, 0x49, 0x66, 0x45, 0x6f, - 0xc3, 0x58, 0xc4, 0x49, 0x19, 0xa3, 0x5b, 0x66, 0xa7, 0xfe, 0x10, 0xed, 0x91, 0xad, 0x04, 0x27, - 0x04, 0x01, 0x68, 0x20, 0xd1, 0x63, 0x65, 0x3f, 0xc7, 0x9e, 0xaf, 0xd0, 0xdd, 0xf4, 0xbc, 0x18, - 0x08, 0x90, 0x7c, 0xa0, 0xc8, 0x08, 0xe9, 0x25, 0xf5, 0x59, 0x21, 0xff, 0x24, 0x8d, 0x4f, 0xf0, - 0xf1, 0x79, 0xa2, 0x62, 0x0e, 0x89, 0x8e, 0x99, 0x58, 0xa1, 0xac, 0x63, 0x44, 0x50, 0x7e, 0x12, - 0xe0, 0x8c, 0xad, 0xa7, 0x56, 0x9b, 0x98, 0x8b, 0x59, 0xb8, 0x2c, 0xe9, 0x97, 0x12, 0x4e, 0x5e, - 0x5c, 0xcb, 0x6f, 0xa8, 0xde, 0x41, 0x2b, 0x59, 0xb8, 0x50, 0x43, 0x06, 0x64, 0xda, 0xc3, 0xcd, - 0x63, 0xb6, 0x9d, 0x10, 0xf2, 0x5f, 0xd1, 0x5e, 0xca, 0xec, 0xeb, 0x46, 0x7e, 0xb9, 0x89, 0x99, - 0x43, 0x20, 0x9f, 0x35, 0x2d, 0x57, 0x7b, 0xbc, 0xbc, 0x15, 0x69, 0x5b, 0x45, 0x9b, 0x56, 0x32, - 0xec, 0x53, 0xa5, 0xe2, 0x04, 0xbd, 0xd5, 0xb6, 0xbf, 0x2e, 0xaf, 0x1b, 0xd8, 0x87, 0xbf, 0xd9, - 0x2e, 0x97, 0xc7, 0x9d, 0xbb, 0x74, 0x34, 0x36, 0xce, 0xa2, 0x65, 0xcf, 0x8f, 0xcf, 0x29, 0x5f, - 0x77, 0xc1, 0x15, 0xef, 0x7f, 0x87, 0xef, 0xa5, 0x52, 0xa5, 0x93, 0xb2, 0xbb, 0x25, 0xb3, 0x75, - 0xf5, 0xd0, 0xac, 0xbe, 0x24, 0xab, 0xa1, 0xde, 0x86, 0x4e, 0xef, 0xb8, 0xee, 0x43, 0xc5, 0xd4, - 0x99, 0xec, 0xcb, 0xd7, 0xc9, 0x7a, 0x1c, 0xdc, 0x16, 0x55, 0x56, 0xb5, 0x24, 0x15, 0x39, 0xb0, - 0x09, 0xf2, 0x95, 0xf7, 0xf7, 0xdb, 0x6f, 0xc4, 0x6e, 0xfb, 0xa5, 0x3f, 0x17, 0x19, 0xa5, 0xdb, - 0xc8, 0xa9, 0x0f, 0xf0, 0x59, 0x2a, 0x24, 0x18, 0xf1, 0xb7, 0xa2, 0x76, 0xd5, 0x26, 0xde, 0x95, - 0x44, 0x70, 0x9e, 0xf7, 0xbc, 0xc8, 0x02, 0x9d, 0x5a, 0x5e, 0x4a, 0x72, 0xa2, 0xf8, 0x2a, 0x95, - 0x86, 0xad, 0xe5, 0xfc, 0xfd, 0x87, 0x51, 0x9c, 0xbb, 0xbc, 0x5f, 0x08, 0x4f, 0x0d, 0x87, 0x45, - 0x3a, 0x9e, 0x34, 0x98, 0xf0, 0x5b, 0x9d, 0x0a, 0xc4, 0x87, 0xa9, 0x5d, 0x37, 0x15, 0x7b, 0xa2, - 0x94, 0x31, 0xb8, 0x9e, 0x2f, 0xca, 0xc6, 0x3c, 0x65, 0xf8, 0x5a, 0xca, 0x86, 0xe4, 0x43, 0x0b, - 0x54, 0x4a, 0x89, 0x7c, 0xbc, 0x25, 0xe7, 0x60, 0xe8, 0xa8, 0x6c, 0xbc, 0x23, 0xe4, 0xc2, 0x32, - 0x6f, 0x49, 0x8e, 0xf7, 0xc1, 0x1d, 0x15, 0xf2, 0xae, 0x4e, 0xec, 0x62, 0x38, 0xee, 0xe9, 0x52, - 0x34, 0x20, 0xd0, 0xd1, 0x1f, 0x71, 0x1c, 0x10, 0xda, 0x6e, 0x93, 0x9f, 0x08, 0x52, 0xa7, 0xa4, - 0xec, 0x98, 0xe7, 0x63, 0xe0, 0xa3, 0xa1, 0x9e, 0x57, 0x76, 0x9c, 0x93, 0x97, 0x77, 0x89, 0xec, - 0xce, 0xc9, 0xa8, 0x1c, 0x20, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x4f, 0x27, 0xb0, 0x6a, 0x5c, - 0x84, 0x4d, 0xef, 0xe0, 0x98, 0x9b, 0xbd, 0xb7, 0x79, 0xeb, 0x82, 0xaa, 0x5b, 0x68, 0xa2, 0xf9, - 0x59, 0x59, 0xf1, 0xf0, 0x86, 0x9d, 0xda, 0xa6, 0xef, 0x6f, 0xe8, 0x6b, 0x57, 0x09, 0x8a, 0x55, - 0xf4, 0xdf, 0xc2, 0x5d, 0x57, 0x77, 0xf2, 0xdf, 0x75, 0xc9, 0x7b, 0xfd, 0x89, 0x7b, 0xfc, 0x61, - 0xaa, 0xb1, 0xe3, 0x58, 0xea, 0x37, 0x64, 0x8a, 0x5d, 0x65, 0x4d, 0xcf, 0xa5, 0xe0, 0x9f, 0x56, - 0xe9, 0xaa, 0x77, 0x4d, 0xd0, 0xf7, 0x93, 0xaf, 0x7d, 0x7a, 0xfa, 0xb4, 0x21, 0xc1, 0x20, 0xc4, - 0x33, 0x35, 0x17, 0xdf, 0x67, 0x6d, 0xaf, 0xc1, 0x70, 0xab, 0x49, 0x2b, 0x06, 0x62, 0x64, 0x63, - 0xcb, 0xe0, 0x9b, 0x5b, 0x45, 0x66, 0x8d, 0xbb, 0x7d, 0x05, 0x5f, 0xea, 0xff, 0x5e, 0x3b, 0xe2, - 0x54, 0x76, 0xc2, 0x1f, 0x91, 0x26, 0x9a, 0x69, 0xff, 0xb0, 0xa2, 0xaf, 0xe2, 0x2e, 0xf7, 0x97, - 0xbc, 0x7e, 0x09, 0x8a, 0xf2, 0x0d, 0xd6, 0xed, 0xb6, 0xd0, 0xf9, 0x9d, 0x7d, 0xef, 0x7f, 0x04, - 0xfe, 0x46, 0x1b, 0xcd, 0x97, 0x7c, 0x12, 0x91, 0x5f, 0x97, 0xf7, 0xae, 0x6e, 0xac, 0x9f, 0x05, - 0xc7, 0x49, 0x3f, 0x9d, 0xef, 0xf0, 0xa1, 0x29, 0x39, 0x57, 0x9a, 0x68, 0x6f, 0x0c, 0x04, 0x65, - 0x14, 0xbb, 0x7b, 0x0d, 0xe8, 0x68, 0xab, 0x1a, 0x1d, 0x23, 0xd5, 0x79, 0x77, 0xc6, 0x50, 0x92, - 0xc3, 0xcc, 0x7f, 0x18, 0x1f, 0xab, 0xcb, 0x0f, 0x69, 0x51, 0x39, 0xab, 0x08, 0x44, 0x21, 0x2c, - 0xb1, 0x25, 0x42, 0x47, 0x03, 0x84, 0xdf, 0x7f, 0x9f, 0x17, 0xa3, 0x1d, 0x18, 0x9f, 0x2e, 0xa5, - 0x63, 0xc2, 0x85, 0x4d, 0xf5, 0x22, 0x9a, 0xe8, 0x90, 0xe4, 0x7a, 0xb3, 0x44, 0x03, 0xa1, 0xa1, - 0xa0, 0xac, 0xe9, 0x3c, 0xc7, 0xc2, 0x90, 0xf7, 0x45, 0xe7, 0x9b, 0x6c, 0xe0, 0xcc, 0x69, 0x04, - 0xfa, 0x0d, 0xf9, 0xf1, 0x81, 0xbe, 0x0c, 0x67, 0x9c, 0xf8, 0x43, 0xcc, 0xc0, 0xd4, 0x4b, 0xa2, - 0xcc, 0xbb, 0x63, 0x73, 0xb6, 0x23, 0xa1, 0x6f, 0x7d, 0x5b, 0xe8, 0x95, 0xf5, 0x78, 0x43, 0x8d, - 0x21, 0x3c, 0x90, 0x2d, 0x8c, 0x46, 0x2e, 0xf7, 0x36, 0xad, 0x66, 0xa5, 0x4d, 0xe9, 0xff, 0xc4, - 0x75, 0x6e, 0x9e, 0xfe, 0x0a, 0xc9, 0x43, 0x4d, 0x19, 0x7b, 0xe0, 0xd4, 0x19, 0x1a, 0x87, 0x06, - 0x86, 0xdf, 0x04, 0xc4, 0x63, 0xbf, 0x3b, 0x17, 0x78, 0x94, 0x17, 0x7f, 0xaa, 0x3b, 0xf5, 0x6f, - 0xab, 0x61, 0xc2, 0x48, 0x41, 0x4d, 0x3d, 0x34, 0xf4, 0xd3, 0xd3, 0x4f, 0x1c, 0x77, 0xf6, 0xdb, - 0x11, 0xc1, 0x40, 0x72, 0xaa, 0xab, 0x55, 0x6f, 0x82, 0x8d, 0x57, 0x4d, 0x6e, 0x7c, 0xb5, 0xaf, - 0xc5, 0x1d, 0x3c, 0xa9, 0x1b, 0x89, 0x61, 0x36, 0xf8, 0x48, 0xd4, 0x54, 0xf3, 0x46, 0xc6, 0xc6, - 0x48, 0xa4, 0xbf, 0xf1, 0x01, 0x42, 0x93, 0x0d, 0x1c, 0xa2, 0x42, 0xd6, 0xd3, 0x9a, 0xd3, 0x1f, - 0x31, 0x02, 0xcf, 0xad, 0xa9, 0xd4, 0x8c, 0xf3, 0x0f, 0x1f, 0xd3, 0x55, 0x3d, 0x31, 0x40, 0xc3, - 0x36, 0xcf, 0x1c, 0x33, 0xec, 0xe5, 0xac, 0x78, 0xea, 0x7e, 0x8a, 0x2d, 0x14, 0x73, 0xa3, 0xe7, - 0x3f, 0x05, 0x3c, 0xd0, 0xa4, 0xe3, 0x1d, 0x9e, 0x3b, 0xaa, 0x45, 0xe2, 0x08, 0x9b, 0x26, 0x43, - 0xda, 0x5f, 0x84, 0x3b, 0xb3, 0xda, 0x2c, 0x1d, 0xb3, 0x94, 0x8f, 0xeb, 0x94, 0x22, 0xb1, 0x79, - 0xba, 0x2b, 0xc9, 0xd5, 0xe1, 0x4e, 0xb6, 0x3e, 0xb9, 0xab, 0xab, 0xfd, 0x48, 0x95, 0xcc, 0x1c, - 0x55, 0xcf, 0xd8, 0xf2, 0x61, 0x33, 0x51, 0x31, 0x42, 0x97, 0x93, 0xac, 0xaa, 0xe2, 0x63, 0x0a, - 0x8f, 0x00, 0xd8, 0x92, 0x46, 0x73, 0xf9, 0xb2, 0xee, 0xf8, 0x98, 0xae, 0xe9, 0x71, 0xb4, 0x1e, - 0x5d, 0xdb, 0xff, 0x09, 0xc6, 0x97, 0x9e, 0x18, 0xf7, 0xe5, 0x16, 0xf5, 0xe2, 0x66, 0xd6, 0x6a, - 0x78, 0x48, 0x53, 0x92, 0x2d, 0x1d, 0xdf, 0x52, 0x62, 0x45, 0x8f, 0x77, 0xf7, 0x50, 0x47, 0xca, - 0x14, 0x7b, 0xfc, 0xa2, 0x57, 0x53, 0xc4, 0x48, 0x66, 0x4d, 0xcf, 0xf1, 0x14, 0x7e, 0xac, 0x49, - 0x76, 0xa9, 0x7b, 0x27, 0x2e, 0x78, 0xbc, 0xe4, 0x1b, 0xbd, 0xef, 0x9a, 0x4c, 0xbf, 0xcc, 0x6b, - 0x53, 0x7c, 0x4c, 0x11, 0xcd, 0x93, 0xf4, 0x57, 0xf1, 0x30, 0x47, 0xc3, 0x22, 0xe3, 0xab, 0xd7, - 0xc9, 0xd3, 0xfc, 0xb7, 0xd4, 0x67, 0x64, 0xbb, 0x4d, 0x2e, 0x2e, 0x33, 0x4f, 0x97, 0x21, 0x65, - 0x49, 0x9d, 0x3c, 0xa7, 0xdb, 0x85, 0xce, 0x24, 0x11, 0x1e, 0x7a, 0x6f, 0xf3, 0x0c, 0x46, 0x27, - 0x86, 0xa1, 0xd2, 0x0f, 0x94, 0x86, 0x31, 0x4e, 0x7e, 0x83, 0x7d, 0x1b, 0xca, 0x14, 0xd5, 0x7c, - 0x31, 0x6e, 0x35, 0xe1, 0x46, 0xfb, 0x2a, 0x96, 0x43, 0xfe, 0xbf, 0xc7, 0xbb, 0x84, 0x46, 0x1d, - 0xdd, 0xd5, 0x11, 0xf6, 0x0f, 0xb1, 0xa9, 0x50, 0xff, 0x37, 0x15, 0x6a, 0xc5, 0x10, 0xfe, 0x82, - 0x7d, 0x5c, 0x78, 0x58, 0xfd, 0xd7, 0xa5, 0x66, 0x64, 0xf8, 0x7a, 0x69, 0xd3, 0xf8, 0x2e, 0xb5, - 0x69, 0x8f, 0x53, 0x64, 0x0c, 0x3e, 0x52, 0xdb, 0x36, 0x7e, 0x28, 0xcc, 0x72, 0x46, 0x9b, 0xdf, - 0xc1, 0x35, 0xef, 0x71, 0x59, 0xf2, 0xb9, 0xfe, 0x5d, 0xde, 0xb9, 0x6d, 0x19, 0x20, 0xc9, 0x9c, - 0xf8, 0x28, 0x9b, 0x0d, 0xab, 0x29, 0xbd, 0xd9, 0xf0, 0xad, 0xe7, 0x83, 0xcf, 0x16, 0xb5, 0xf7, - 0xcb, 0xfc, 0x61, 0x4b, 0x91, 0xa1, 0xcb, 0x52, 0x8c, 0x82, 0x1d, 0x95, 0x0a, 0x6a, 0x30, 0x30, - 0x55, 0x93, 0xc4, 0x61, 0x78, 0xca, 0xe0, 0x42, 0x57, 0x02, 0x37, 0x53, 0x0f, 0xc2, 0x62, 0x43, - 0x3e, 0x83, 0x59, 0x89, 0x58, 0x5f, 0x8d, 0x8e, 0x27, 0xe9, 0x69, 0xb7, 0xe3, 0x1b, 0x16, 0x76, - 0x16, 0x53, 0xa0, 0xd8, 0x4d, 0xe4, 0x95, 0x64, 0xf5, 0x9f, 0xdf, 0xc1, 0x55, 0x0f, 0x04, 0xed, - 0xb5, 0x24, 0xb7, 0x77, 0x3e, 0x10, 0x34, 0x65, 0x8a, 0x03, 0xd0, 0xe5, 0xc4, 0x16, 0x63, 0x84, - 0x51, 0xe1, 0x4b, 0x44, 0x3e, 0x39, 0x26, 0x68, 0x69, 0xab, 0x35, 0x84, 0xca, 0xd5, 0x92, 0x57, - 0xf8, 0x50, 0xab, 0x4a, 0x95, 0x0c, 0x8d, 0x63, 0x68, 0x86, 0x2f, 0x29, 0x55, 0x54, 0x5e, 0x78, - 0xc2, 0x36, 0xde, 0xb1, 0x5e, 0x87, 0xab, 0x1c, 0x98, 0x87, 0x88, 0x88, 0xe7, 0x54, 0xcf, 0x14, - 0x61, 0xd6, 0x24, 0xf7, 0x82, 0x18, 0x89, 0x06, 0xf6, 0x51, 0x84, 0x3e, 0x92, 0x6a, 0x4c, 0x9c, - 0x48, 0x81, 0x11, 0x96, 0x84, 0x03, 0x8c, 0xf8, 0x68, 0x46, 0x97, 0xf8, 0x84, 0x19, 0x7a, 0x0c, - 0x63, 0x87, 0x1f, 0xfe, 0x53, 0x5a, 0x09, 0x2e, 0xc5, 0xa8, 0x4a, 0x7e, 0x77, 0xd1, 0x4e, 0xbf, - 0xab, 0xd7, 0x42, 0x3b, 0xe7, 0x33, 0x9b, 0xa6, 0x9f, 0xf8, 0xe2, 0xa7, 0x4e, 0x92, 0x59, 0xab, - 0x6b, 0xe4, 0x08, 0x33, 0x34, 0x7f, 0x05, 0xbd, 0xb7, 0xcd, 0x16, 0xdc, 0xf8, 0x20, 0x99, 0xf9, - 0xd4, 0xa4, 0x5d, 0xb6, 0x64, 0x23, 0x1a, 0xa9, 0x20, 0x6b, 0x66, 0xe5, 0x84, 0xfb, 0x48, 0x44, - 0xcc, 0x53, 0x6c, 0xfd, 0x94, 0xb5, 0x07, 0x17, 0xf0, 0x60, 0x18, 0x0a, 0x18, 0x18, 0x80, 0x04, - 0xa3, 0x64, 0x00, 0x21, 0x95, 0x25, 0x95, 0x43, 0x10, 0xf3, 0xaa, 0x16, 0x1b, 0x5a, 0x37, 0x1f, - 0x86, 0x01, 0xde, 0xd4, 0x1c, 0x56, 0x76, 0xe3, 0xb6, 0x74, 0x8f, 0x05, 0x01, 0x00, 0xa1, 0x41, - 0xda, 0xc8, 0x42, 0xf5, 0x4e, 0x03, 0x1c, 0x68, 0x65, 0x21, 0x99, 0x89, 0x53, 0x14, 0x10, 0x51, - 0x1c, 0x6d, 0xeb, 0xdc, 0x1f, 0x7b, 0xbc, 0x1c, 0x10, 0x46, 0xc5, 0x00, 0x2b, 0xf6, 0x0d, 0x9e, - 0xf8, 0x89, 0x3e, 0x38, 0x38, 0xc9, 0x8f, 0xb0, 0xf7, 0x09, 0xf9, 0x0c, 0x07, 0x8d, 0x83, 0x80, - 0x29, 0x21, 0xf7, 0x9a, 0x05, 0x70, 0xaa, 0x01, 0xe0, 0x84, 0x68, 0xa8, 0x1b, 0xe7, 0xd5, 0xf8, - 0x3e, 0xe5, 0x10, 0x1f, 0x1a, 0x52, 0x84, 0x74, 0x2d, 0xa0, 0x56, 0x69, 0x36, 0x59, 0x7c, 0x34, - 0x6e, 0x20, 0xb5, 0x4d, 0xe7, 0xa1, 0x0b, 0x6c, 0x77, 0x95, 0x7e, 0xaa, 0xc2, 0xe3, 0xda, 0xbc, - 0x7e, 0x3c, 0xea, 0x4d, 0xd4, 0xd4, 0x4f, 0x3e, 0x5b, 0xfa, 0x27, 0x57, 0x39, 0x5d, 0xfa, 0x97, - 0xcf, 0x82, 0x5d, 0x15, 0x5b, 0x9b, 0x7a, 0xae, 0x11, 0xa7, 0x7b, 0xbf, 0x54, 0xfe, 0x0a, 0x3c, - 0xd5, 0x4d, 0x16, 0xd7, 0x7c, 0x96, 0xd1, 0x35, 0xf3, 0x95, 0x5d, 0xb7, 0xfa, 0xe2, 0x04, 0x56, - 0x96, 0x49, 0x7c, 0x41, 0x19, 0x27, 0x49, 0x12, 0x48, 0xbe, 0x43, 0xbb, 0xbf, 0xd0, 0xf4, 0xa7, - 0xd6, 0xab, 0x84, 0xc2, 0xc5, 0x52, 0x87, 0xa2, 0x69, 0x09, 0x8f, 0xcd, 0x4a, 0x9b, 0x5e, 0x4f, - 0x2f, 0xf1, 0x9e, 0x27, 0x0b, 0x4a, 0xb5, 0x51, 0x8c, 0x88, 0xc4, 0xff, 0x2d, 0xcb, 0x8f, 0xf8, - 0xcd, 0xef, 0x77, 0x77, 0x7a, 0x6f, 0xbf, 0xbd, 0xdf, 0xe6, 0xdc, 0xac, 0x6b, 0x92, 0x5d, 0xa1, - 0x6b, 0x84, 0xf9, 0xa1, 0xc7, 0xa9, 0x4b, 0xde, 0xec, 0x4e, 0xb9, 0x2e, 0xf7, 0xf1, 0x3b, 0xc5, - 0x71, 0x5f, 0x7c, 0xc7, 0xbc, 0xff, 0x11, 0x12, 0x4c, 0x71, 0x6b, 0x58, 0x6d, 0xa1, 0xb5, 0x94, - 0x29, 0x30, 0xb8, 0x28, 0x12, 0x94, 0xc4, 0x1a, 0x57, 0xb1, 0xf0, 0x48, 0x47, 0xd3, 0xc2, 0xba, - 0xb1, 0x51, 0x10, 0x4f, 0xd4, 0xcc, 0x52, 0xb4, 0x75, 0xb8, 0x28, 0x10, 0x08, 0x3a, 0x89, 0xe1, - 0x32, 0x4a, 0x37, 0x0a, 0x7c, 0x89, 0x46, 0x63, 0xa7, 0x08, 0x49, 0xa1, 0x14, 0xb4, 0xc5, 0xbf, - 0xf0, 0xdd, 0x62, 0xba, 0xe2, 0xda, 0x56, 0x84, 0x3b, 0x5f, 0x84, 0x3a, 0x49, 0x6d, 0x35, 0x56, - 0xbe, 0x1e, 0x23, 0x76, 0xf3, 0x31, 0x49, 0x9d, 0x43, 0x83, 0xc9, 0x97, 0xf0, 0x2c, 0x7c, 0xdb, - 0x05, 0x01, 0x81, 0xb1, 0x93, 0x21, 0xa0, 0x00, 0x23, 0x4e, 0x00, 0x7c, 0x46, 0x02, 0x50, 0x58, - 0xa4, 0xf8, 0x14, 0x58, 0xf0, 0x7b, 0xdd, 0xd9, 0x07, 0xc1, 0x29, 0xd8, 0x62, 0x42, 0x8d, 0x55, - 0x8a, 0x23, 0x9c, 0x40, 0x9a, 0x90, 0x1b, 0x0f, 0xb9, 0x56, 0x34, 0x78, 0x98, 0x52, 0x3a, 0xf1, - 0xd9, 0xae, 0xbd, 0x0b, 0x9a, 0xdb, 0x81, 0xb1, 0xdf, 0x43, 0x23, 0xe6, 0x2d, 0x01, 0xbb, 0x19, - 0xed, 0x09, 0x5d, 0x10, 0x36, 0xb1, 0x02, 0x06, 0x6e, 0x26, 0x26, 0xb1, 0xb4, 0x69, 0xfc, 0xb6, - 0x21, 0xcc, 0x4a, 0xa3, 0x88, 0x10, 0x34, 0x91, 0xbc, 0x66, 0xe0, 0xac, 0x22, 0x07, 0xcb, 0x0c, - 0x05, 0xc4, 0xc2, 0xa8, 0x16, 0xc1, 0xc7, 0x01, 0x27, 0x84, 0x80, 0xca, 0x34, 0x30, 0x13, 0x94, - 0x03, 0xa7, 0x68, 0xf7, 0xe0, 0x2c, 0x26, 0xc1, 0xde, 0x25, 0x81, 0x4d, 0xdf, 0x84, 0x01, 0x00, - 0x53, 0xf5, 0xaf, 0x37, 0x30, 0x30, 0x13, 0xfc, 0xb0, 0x03, 0xc8, 0x47, 0x65, 0x11, 0x4a, 0xdc, - 0xbe, 0xcc, 0xf1, 0x83, 0x00, 0x40, 0x14, 0xb2, 0x93, 0x15, 0x55, 0xb3, 0x7d, 0xdc, 0xca, 0x1e, - 0x4d, 0x60, 0x83, 0x20, 0xf1, 0x63, 0x73, 0xe1, 0x82, 0xa6, 0x9b, 0xa5, 0xb0, 0x5e, 0x38, 0x95, - 0xca, 0x5e, 0x56, 0x95, 0x47, 0xb1, 0x7c, 0x71, 0x3a, 0x05, 0x7f, 0xf0, 0x46, 0x54, 0x8f, 0xdd, - 0x5e, 0x1e, 0x10, 0xe6, 0x35, 0xef, 0xe5, 0xbd, 0xfe, 0x49, 0xfc, 0xff, 0xe2, 0xf5, 0xae, 0xab, - 0xe1, 0x3a, 0x7b, 0xee, 0xfe, 0x42, 0xbd, 0xeb, 0xba, 0xeb, 0xe2, 0xeb, 0x5e, 0xab, 0xec, 0x97, - 0xba, 0xe2, 0x3c, 0xbd, 0x3b, 0x93, 0x7e, 0x7c, 0x5c, 0x6f, 0xcd, 0xdd, 0xd7, 0x24, 0x3c, 0x4d, - 0xdf, 0xc7, 0x17, 0x7c, 0xa5, 0xcd, 0x86, 0xcf, 0x44, 0x87, 0xf1, 0xd7, 0x6f, 0x58, 0x39, 0x63, - 0x55, 0x4f, 0xc2, 0xd4, 0x31, 0x64, 0x73, 0xaa, 0x24, 0x89, 0xf6, 0x82, 0x1b, 0xa6, 0xcf, 0xac, - 0x5e, 0x78, 0x47, 0xc0, 0x80, 0x18, 0x05, 0xda, 0xa6, 0xa9, 0x12, 0x95, 0xd2, 0xf0, 0x60, 0x10, - 0x0a, 0x5d, 0x2d, 0x57, 0x0e, 0x89, 0x8f, 0x52, 0x3d, 0xd2, 0xcc, 0x70, 0x60, 0x10, 0x0a, 0xd6, - 0x97, 0x55, 0x1d, 0xa9, 0xa7, 0x3e, 0xfe, 0x26, 0x1e, 0xad, 0x55, 0x4c, 0x26, 0x90, 0x1f, 0x6a, - 0xaa, 0xf4, 0x2a, 0x3c, 0xf5, 0x26, 0x0f, 0x80, 0x99, 0x84, 0xa6, 0x52, 0x50, 0xfb, 0x5a, 0x44, - 0xee, 0x85, 0xf1, 0xe2, 0x02, 0x01, 0x49, 0xe1, 0x93, 0x49, 0x83, 0x82, 0xda, 0x8c, 0x6f, 0xaa, - 0x86, 0x0b, 0x18, 0x32, 0xd4, 0x44, 0x7a, 0x8f, 0x84, 0xba, 0x28, 0xf3, 0x68, 0x3d, 0xd0, 0xa4, - 0x0a, 0xbf, 0x0a, 0x6d, 0x00, 0x1a, 0x5c, 0x63, 0xcb, 0xc9, 0xcf, 0x2c, 0x61, 0x57, 0x94, 0x58, - 0x57, 0xe0, 0xfd, 0x2f, 0x8a, 0xe5, 0x25, 0x01, 0xe5, 0x4a, 0x9b, 0xf5, 0x14, 0xa4, 0x7a, 0xd3, - 0xf5, 0xe0, 0xab, 0x13, 0x0a, 0x45, 0x65, 0x8c, 0xf5, 0x82, 0xd9, 0x63, 0x71, 0x47, 0xec, 0xfd, - 0xda, 0xcd, 0xed, 0xdf, 0x89, 0x85, 0x0a, 0xd9, 0x7a, 0x18, 0xeb, 0xb2, 0x64, 0x23, 0x40, 0x46, - 0xdd, 0xb0, 0xcb, 0x9d, 0x98, 0x57, 0xe8, 0x18, 0x47, 0xc1, 0x02, 0x2d, 0xb8, 0x31, 0x3c, 0x46, - 0x0b, 0xfb, 0xcc, 0x60, 0x06, 0xba, 0x55, 0x89, 0x87, 0x4d, 0xae, 0x75, 0x18, 0x30, 0x1b, 0xb0, - 0x33, 0x67, 0x2d, 0x1e, 0x77, 0xe5, 0xd7, 0x8f, 0xc1, 0x5d, 0xdf, 0x74, 0xa2, 0x5c, 0x6c, 0x30, - 0xf1, 0x3a, 0xb7, 0x5d, 0xdc, 0x14, 0x04, 0x02, 0x9b, 0x96, 0x92, 0x4e, 0xa4, 0xd9, 0xd0, 0x9e, - 0x55, 0x74, 0x79, 0x72, 0xc6, 0x90, 0xa8, 0x48, 0x00, 0xd0, 0x3b, 0xa5, 0x2a, 0x97, 0x8a, 0x89, - 0x51, 0x42, 0x8e, 0xa1, 0xf8, 0xc1, 0x44, 0x68, 0xbb, 0xbc, 0x43, 0xc2, 0xe6, 0x91, 0x8e, 0xdc, - 0x9a, 0xaa, 0xcf, 0x16, 0x5a, 0x85, 0x51, 0x6b, 0x24, 0xaa, 0x6a, 0xd4, 0x21, 0x86, 0xb1, 0x11, - 0x80, 0x1d, 0x5e, 0x82, 0x7c, 0x5a, 0x1a, 0x46, 0xc8, 0x51, 0x84, 0xbb, 0x11, 0x77, 0xae, 0x4b, - 0xbb, 0xbf, 0x97, 0x7b, 0xbe, 0x08, 0xaa, 0xab, 0xca, 0xb9, 0xa2, 0xbd, 0xfc, 0x95, 0x1c, 0x5c, - 0x2f, 0x26, 0xef, 0x2f, 0x29, 0x5e, 0xee, 0xb1, 0x20, 0xa6, 0xd5, 0x11, 0x00, 0xb1, 0xdd, 0xc1, - 0x44, 0x69, 0x96, 0x95, 0xb1, 0xed, 0x11, 0x07, 0x21, 0x1f, 0x82, 0xc3, 0x5c, 0xd9, 0x1e, 0x2e, - 0x6c, 0x92, 0x02, 0xe5, 0xf4, 0xbe, 0x20, 0x14, 0xd6, 0xaa, 0xab, 0xd2, 0x53, 0x66, 0xc7, 0x0c, - 0x89, 0x18, 0x73, 0x67, 0x5e, 0x5c, 0x7b, 0xbd, 0x37, 0x6b, 0x08, 0xc7, 0xcd, 0x06, 0x67, 0xc7, - 0x90, 0x98, 0x29, 0xab, 0xf1, 0x31, 0x84, 0x63, 0x12, 0xcf, 0xc6, 0xfb, 0x3d, 0x71, 0x3e, 0xd4, - 0x58, 0x98, 0x52, 0x2b, 0x25, 0x68, 0x58, 0x8e, 0xd8, 0xa6, 0x8c, 0x93, 0x7b, 0xf9, 0x3f, 0x41, - 0x9a, 0xe6, 0x66, 0xaf, 0x30, 0xee, 0x4a, 0xee, 0x59, 0x98, 0xe7, 0x08, 0x89, 0x1b, 0x2d, 0x49, - 0x1f, 0x03, 0xa5, 0x00, 0x87, 0x56, 0x58, 0x8e, 0x73, 0x1e, 0xbb, 0xe8, 0x01, 0xc0, 0x34, 0x2d, - 0x86, 0x42, 0xf2, 0xcd, 0xf0, 0x0d, 0x13, 0x91, 0x01, 0x48, 0x1e, 0x79, 0xd7, 0x7d, 0x39, 0xf7, - 0xe0, 0xaf, 0x4c, 0xd7, 0x8e, 0xb3, 0x42, 0x13, 0x1c, 0x19, 0x6a, 0xf4, 0x23, 0xd4, 0x71, 0xc7, - 0x82, 0x5a, 0x6f, 0xb9, 0xbb, 0xfa, 0xe0, 0xa4, 0x22, 0x1b, 0x3e, 0x4f, 0x45, 0x7f, 0xc5, 0x70, - 0xa7, 0x28, 0x8a, 0xaa, 0x93, 0xbd, 0x55, 0x7d, 0xef, 0x3f, 0x27, 0x1c, 0x7a, 0x54, 0x9a, 0x4d, - 0x97, 0x8f, 0xca, 0x3f, 0x05, 0x64, 0xba, 0xaa, 0xae, 0xaa, 0xa6, 0xc6, 0x8a, 0x86, 0x21, 0x48, - 0xa6, 0x1e, 0xa1, 0x3b, 0x96, 0x7c, 0xef, 0x79, 0xfa, 0x18, 0xb8, 0x54, 0xe8, 0x4b, 0x86, 0x02, - 0x03, 0x8b, 0xd5, 0x2a, 0x34, 0x92, 0xd5, 0x0c, 0x4f, 0x11, 0x05, 0x96, 0x1b, 0x62, 0xb6, 0xef, - 0x79, 0xbc, 0x4f, 0xd3, 0xf1, 0x00, 0x80, 0x28, 0x6b, 0xcd, 0x8e, 0xfc, 0x1c, 0x57, 0x17, 0x80, - 0x4a, 0x14, 0x49, 0x58, 0x81, 0x28, 0xab, 0x26, 0x46, 0xb0, 0x00, 0x72, 0x40, 0xae, 0x53, 0x8c, - 0xf0, 0x84, 0x40, 0xbb, 0x66, 0xe7, 0x20, 0xe6, 0xe6, 0x2a, 0x9a, 0x66, 0xf0, 0xa1, 0xbb, 0xb0, - 0x62, 0x92, 0xa0, 0xad, 0x8b, 0x58, 0x3e, 0x4c, 0x7b, 0x4b, 0xf0, 0xa5, 0xfc, 0x52, 0xca, 0x38, - 0x56, 0x0c, 0x64, 0xb6, 0x72, 0x8c, 0x33, 0xf6, 0xf7, 0xa5, 0x3a, 0xc8, 0x03, 0x0b, 0x69, 0xc4, - 0x2e, 0xd8, 0xa3, 0x18, 0x73, 0xa1, 0xf6, 0x1d, 0xed, 0x42, 0x03, 0x1a, 0x87, 0x52, 0x49, 0x0f, - 0x44, 0x3e, 0xdb, 0xc9, 0x71, 0x22, 0x41, 0x61, 0x14, 0x0f, 0xb5, 0x17, 0x4c, 0x47, 0xc6, 0x3d, - 0x4c, 0x2a, 0x9c, 0xa8, 0x5e, 0x5e, 0x77, 0xce, 0x0b, 0xf0, 0xc9, 0xc7, 0xde, 0x49, 0xa7, 0xa7, - 0xfb, 0xb2, 0x12, 0xc3, 0x0a, 0x77, 0x27, 0xd7, 0xe2, 0x6f, 0x77, 0x7d, 0xcd, 0xc4, 0xea, 0xcd, - 0x26, 0x52, 0x7f, 0x82, 0x3e, 0x57, 0xbe, 0x5f, 0x04, 0xde, 0x93, 0x54, 0x86, 0xa3, 0xe5, 0x9f, - 0x29, 0xf5, 0x1a, 0xf3, 0xee, 0x76, 0x73, 0x75, 0xc2, 0x91, 0xf7, 0x05, 0xc0, 0xaf, 0x65, 0xaa, - 0x8b, 0x93, 0xfe, 0x5f, 0x62, 0x13, 0xda, 0xf0, 0x42, 0x5b, 0x46, 0x9e, 0xe7, 0xd5, 0xaf, 0x9a, - 0xb4, 0x68, 0xfd, 0x60, 0xbe, 0x2b, 0xb6, 0x98, 0xda, 0xef, 0x21, 0x39, 0x15, 0x12, 0x11, 0x05, - 0x70, 0x91, 0xbb, 0x6b, 0xdd, 0x05, 0x5f, 0xc7, 0xd9, 0x83, 0x7d, 0x05, 0x07, 0x90, 0xf2, 0x6a, - 0x2f, 0x87, 0x82, 0x72, 0x5b, 0x7a, 0x4e, 0xbe, 0xe2, 0x01, 0x00, 0x50, 0xc7, 0x2c, 0xa4, 0x0e, - 0x53, 0x64, 0xbc, 0x2d, 0x49, 0x62, 0xf2, 0x2a, 0x39, 0x2b, 0x01, 0x5c, 0x7e, 0x56, 0x54, 0xa0, - 0x26, 0xa1, 0x86, 0x3d, 0xe2, 0x54, 0xdc, 0x10, 0x06, 0x03, 0x07, 0x27, 0x14, 0x2c, 0x47, 0x7c, - 0x53, 0x32, 0x89, 0x44, 0x9c, 0x36, 0x1e, 0x00, 0x04, 0x30, 0x56, 0x25, 0x0a, 0x84, 0x65, 0x93, - 0xa7, 0x8a, 0xb6, 0xf1, 0x01, 0x80, 0xa1, 0x75, 0x23, 0x37, 0x2f, 0x5f, 0x7b, 0x40, 0x94, 0x38, - 0x13, 0x03, 0x10, 0x84, 0x15, 0x98, 0x8a, 0x12, 0x1d, 0xde, 0x39, 0xc4, 0xbe, 0x20, 0x65, 0x9c, - 0xe8, 0x80, 0xa1, 0x6a, 0x84, 0x8a, 0x10, 0xa1, 0xbb, 0x74, 0xbb, 0x29, 0x5a, 0x99, 0x72, 0xc2, - 0x15, 0x99, 0x82, 0x7a, 0xd1, 0xb7, 0x6c, 0xdf, 0x16, 0x11, 0x6c, 0x31, 0x01, 0x10, 0xa4, 0xa6, - 0xc9, 0xf0, 0xd0, 0x63, 0x89, 0x40, 0x77, 0x14, 0xf0, 0xa6, 0x51, 0xca, 0x18, 0x4f, 0x0c, 0xd3, - 0x24, 0x16, 0x42, 0x6a, 0x88, 0xf6, 0xca, 0xd4, 0xa3, 0xa0, 0x79, 0xd0, 0x3e, 0x0a, 0xd0, 0x77, - 0x02, 0x88, 0x0d, 0x58, 0xb4, 0x78, 0x52, 0x50, 0x0a, 0x72, 0x91, 0x50, 0xf2, 0xf3, 0x69, 0xbc, - 0xbc, 0x9d, 0x34, 0xbc, 0x49, 0x72, 0x6b, 0xcd, 0xaa, 0x9f, 0xc1, 0x65, 0x16, 0x79, 0x37, 0x2e, - 0xec, 0xeb, 0x1b, 0xe0, 0xae, 0x4c, 0xf5, 0xd3, 0x36, 0x7e, 0xcf, 0x82, 0x7c, 0xde, 0xdd, 0x0e, - 0xec, 0xfb, 0x39, 0x9b, 0x9f, 0x98, 0xc4, 0x1b, 0x34, 0x91, 0xc2, 0xf1, 0xa6, 0x41, 0x1b, 0x17, - 0x51, 0x8b, 0xc1, 0x86, 0xb8, 0xfd, 0x1b, 0xba, 0x0e, 0x5b, 0xce, 0xf5, 0xfe, 0x3b, 0xde, 0x6c, - 0x75, 0x33, 0x95, 0xc4, 0xd2, 0xa7, 0xc6, 0x70, 0xaa, 0x1b, 0xc1, 0x29, 0x52, 0xdd, 0x26, 0xf7, - 0xae, 0x08, 0x4a, 0x7d, 0xb1, 0x9b, 0x13, 0x7c, 0x30, 0x68, 0x2d, 0x12, 0xc1, 0xdc, 0x3a, 0xdc, - 0x8b, 0xb4, 0xe7, 0xf0, 0x77, 0x87, 0xc3, 0x9a, 0xc2, 0xe5, 0x50, 0x5f, 0xfc, 0x6f, 0xb8, 0x80, - 0x41, 0xdd, 0xc6, 0xbd, 0x50, 0x5c, 0xc4, 0xa3, 0x43, 0x97, 0x8d, 0x98, 0xa8, 0x01, 0x2f, 0xc1, - 0x5f, 0xaa, 0x12, 0x64, 0x2f, 0xc7, 0x47, 0xa0, 0xed, 0xf8, 0x90, 0x49, 0xcf, 0xa0, 0x63, 0xae, - 0x45, 0x4b, 0x12, 0x24, 0x29, 0xd5, 0x9b, 0x9a, 0x27, 0xd4, 0x29, 0x35, 0x11, 0x29, 0xeb, 0x81, - 0xc6, 0x7c, 0x87, 0x6a, 0x4d, 0x4d, 0x75, 0x51, 0x9e, 0xc8, 0x38, 0xee, 0x04, 0x03, 0xe9, 0x02, - 0x3c, 0xd1, 0xaf, 0x12, 0x14, 0xe9, 0x12, 0xea, 0xd8, 0x8d, 0x48, 0x4e, 0xe5, 0x49, 0x2e, 0x09, - 0x06, 0xdf, 0xa9, 0x07, 0x40, 0xd8, 0x56, 0x6b, 0x7f, 0x08, 0x82, 0xc3, 0x4e, 0xa4, 0x82, 0x38, - 0x6c, 0x9b, 0xeb, 0x4d, 0x8d, 0x72, 0xde, 0x5c, 0x30, 0x24, 0x29, 0xda, 0x41, 0xfc, 0xa3, 0xfe, - 0xad, 0x47, 0x85, 0x81, 0xf0, 0x96, 0x63, 0x4c, 0x54, 0x78, 0x16, 0x03, 0xb8, 0x2a, 0x91, 0x0a, - 0x8e, 0xf1, 0xbf, 0xfc, 0x8b, 0x0c, 0x04, 0x46, 0x89, 0x1f, 0x6a, 0xa4, 0xd2, 0x18, 0xd8, 0x5b, - 0xa5, 0x7b, 0x20, 0xc3, 0x31, 0xde, 0xc4, 0xc8, 0x80, 0xd7, 0x00, 0x51, 0x79, 0x77, 0x1c, 0x06, - 0xe7, 0x82, 0x16, 0xb0, 0xea, 0x80, 0xd5, 0x23, 0x4e, 0xc0, 0xe4, 0xbe, 0xae, 0x8f, 0x88, 0x08, - 0x05, 0x0a, 0xc2, 0x66, 0x0d, 0x1b, 0xb5, 0xd7, 0x1d, 0xf3, 0xdc, 0x50, 0x1a, 0xdb, 0xa1, 0x9f, - 0xba, 0x89, 0x42, 0x67, 0xf0, 0x23, 0x09, 0x7d, 0xe3, 0xb4, 0x46, 0x3c, 0x48, 0x20, 0x0a, 0x1b, - 0x53, 0x43, 0xaf, 0xcb, 0xc3, 0x35, 0x3b, 0x5f, 0x02, 0x45, 0x57, 0x9c, 0x56, 0x18, 0xf9, 0xde, - 0xf8, 0x7c, 0xb3, 0x64, 0xcf, 0x05, 0x50, 0x5f, 0x13, 0x9c, 0x95, 0x5d, 0x9a, 0x2c, 0x30, 0x76, - 0xfc, 0x1a, 0xdd, 0x85, 0x78, 0x26, 0x25, 0xdd, 0xdd, 0xf6, 0x5f, 0x27, 0x9f, 0x8b, 0xe0, 0x9c, - 0x84, 0x61, 0xe7, 0x12, 0x84, 0xf5, 0x21, 0x8e, 0x5f, 0x2d, 0xa6, 0x9d, 0x28, 0x13, 0xe0, 0x94, - 0xf4, 0xaf, 0x3d, 0x2f, 0x8c, 0xbe, 0x09, 0xcb, 0x35, 0x28, 0x71, 0x0c, 0x98, 0x73, 0x87, 0x88, - 0x1a, 0x21, 0xd1, 0x95, 0x9d, 0x9b, 0x69, 0x23, 0x6a, 0x55, 0x53, 0xb6, 0x5b, 0x7e, 0xaf, 0x87, - 0xdf, 0x35, 0xcc, 0x4b, 0x56, 0x24, 0x40, 0xd8, 0x5c, 0xf9, 0x64, 0xbe, 0x4c, 0x5e, 0xe1, 0x2e, - 0xa8, 0x18, 0x38, 0xb9, 0x20, 0x0a, 0x8d, 0x73, 0x38, 0x86, 0x8c, 0x86, 0xda, 0x6b, 0x44, 0xeb, - 0xf1, 0xf6, 0xc7, 0x55, 0x7e, 0x18, 0x1b, 0xc1, 0x4c, 0x94, 0x74, 0xe4, 0x90, 0x56, 0x71, 0xa4, - 0x7f, 0x0c, 0x64, 0x3c, 0x72, 0x36, 0x36, 0x36, 0x28, 0xe6, 0x7d, 0x55, 0x88, 0xe1, 0x8b, 0xa4, - 0x75, 0x6c, 0x8b, 0x04, 0x32, 0xc9, 0xe7, 0xc4, 0x0e, 0x6e, 0x3d, 0x8f, 0xfc, 0x21, 0x1b, 0x34, - 0x11, 0xaa, 0x17, 0x2a, 0x7e, 0x08, 0x12, 0xfe, 0x3e, 0xcf, 0xd1, 0x5a, 0xf8, 0x33, 0x38, 0x07, - 0x2c, 0xe0, 0x01, 0xe7, 0x83, 0xc1, 0x8e, 0xa8, 0xc0, 0x10, 0x80, 0xbe, 0xc0, 0x90, 0x42, 0xbe, - 0x31, 0xdf, 0xc4, 0xc2, 0x9c, 0x51, 0x97, 0x96, 0x32, 0xdd, 0x95, 0x8f, 0x15, 0x88, 0x61, 0xbf, - 0x54, 0x67, 0x55, 0x98, 0x61, 0xc4, 0x85, 0x37, 0x10, 0x0c, 0x0e, 0xc0, 0xd4, 0x84, 0xe0, 0x79, - 0x98, 0xcd, 0xaa, 0xcb, 0xee, 0xc3, 0xdb, 0x03, 0xfd, 0x59, 0x8c, 0xe2, 0x44, 0x8d, 0x29, 0x5a, - 0x7e, 0xed, 0xed, 0x24, 0xe0, 0x55, 0x38, 0x32, 0x12, 0x20, 0x88, 0x02, 0xfb, 0x6a, 0x3a, 0xe3, - 0x60, 0x48, 0x32, 0x6c, 0x21, 0xc6, 0xd1, 0xaf, 0x0c, 0xba, 0x28, 0xcb, 0x78, 0x23, 0xce, 0x6a, - 0xa1, 0x85, 0x43, 0x9d, 0xa5, 0x43, 0xcb, 0x8d, 0x2e, 0x2f, 0xc2, 0x11, 0xb2, 0xa9, 0xe3, 0x60, - 0x60, 0xb5, 0xe7, 0x43, 0x44, 0x82, 0x81, 0xb1, 0x6c, 0x2b, 0x91, 0xb1, 0xe9, 0x1b, 0xaa, 0x29, - 0x24, 0x06, 0x2f, 0x6b, 0x2d, 0x05, 0xa1, 0x71, 0x72, 0x25, 0x08, 0x66, 0xd4, 0x13, 0x87, 0x22, - 0xf0, 0xa0, 0x3e, 0x60, 0x78, 0x18, 0x91, 0xa1, 0x9a, 0xf8, 0x8e, 0x22, 0x57, 0xf1, 0x11, 0xa4, - 0x59, 0x53, 0xeb, 0xbe, 0xae, 0x53, 0xcd, 0x98, 0x4f, 0x52, 0x82, 0x2f, 0x57, 0x42, 0x2b, 0x1d, - 0x81, 0x42, 0x1d, 0x05, 0xc9, 0x00, 0x0a, 0x9e, 0x18, 0x07, 0xe0, 0x94, 0x3c, 0xa5, 0x2a, 0x95, - 0x07, 0x19, 0x66, 0xd1, 0xa9, 0x75, 0xbc, 0xcf, 0xe1, 0x91, 0x21, 0x4f, 0x76, 0x7b, 0x46, 0x60, - 0xb0, 0x31, 0x1e, 0xc6, 0x8b, 0xc1, 0x29, 0xae, 0xa3, 0xbd, 0xc4, 0x08, 0x05, 0x9b, 0x35, 0x9f, - 0x0d, 0xcf, 0x38, 0xaa, 0xa3, 0xba, 0x07, 0xe3, 0x52, 0xbd, 0x43, 0xb8, 0xd5, 0x8e, 0x08, 0x01, - 0x40, 0x53, 0xb8, 0x30, 0x1a, 0x9a, 0x2a, 0x00, 0x1f, 0x4b, 0xbf, 0x2c, 0x1d, 0x2c, 0x7e, 0x9d, - 0xc3, 0x6f, 0x1a, 0xf8, 0xf1, 0x01, 0xf3, 0x96, 0x64, 0x5c, 0xbf, 0x01, 0xd9, 0x07, 0xf2, 0x10, - 0x78, 0xfe, 0x85, 0x46, 0x0c, 0xd5, 0x62, 0xb2, 0xda, 0x22, 0xb0, 0xa5, 0x9b, 0x4d, 0xbf, 0x0c, - 0x07, 0xf6, 0xff, 0x0f, 0xd6, 0x70, 0x00, 0x15, 0xe3, 0x59, 0x0e, 0x22, 0xcc, 0x0d, 0x19, 0x7c, - 0x2a, 0x84, 0x79, 0x53, 0x2e, 0x2a, 0xff, 0xc1, 0x1f, 0x2a, 0x01, 0xbf, 0x2b, 0x51, 0xd5, 0x09, - 0x72, 0x17, 0x4d, 0xd6, 0x25, 0x9a, 0xae, 0x6e, 0xb9, 0x88, 0xf6, 0xe4, 0xe5, 0x2c, 0xff, 0xf1, - 0xb4, 0x0d, 0x26, 0x49, 0x26, 0xce, 0x7b, 0x97, 0x10, 0xf4, 0xb7, 0x46, 0xbe, 0x7d, 0xd2, 0xf6, - 0x49, 0xe1, 0x75, 0xd9, 0xd0, 0x9e, 0xfe, 0x2a, 0xda, 0x36, 0xba, 0xa5, 0xe3, 0xaa, 0x31, 0xe0, - 0xe3, 0xf7, 0x16, 0xd1, 0x08, 0xb7, 0x15, 0xe5, 0x57, 0xf0, 0x95, 0x9d, 0xf9, 0x5a, 0xe2, 0x30, - 0x88, 0x25, 0x39, 0x2d, 0x29, 0xa8, 0x42, 0x4c, 0x20, 0xf7, 0xf1, 0x23, 0x45, 0x68, 0xcd, 0x0f, - 0x03, 0x5c, 0x09, 0x35, 0x07, 0x6c, 0x02, 0x58, 0xb0, 0x10, 0xbf, 0x16, 0x3a, 0xc8, 0x94, 0x39, - 0x0d, 0x94, 0x7b, 0xef, 0xe3, 0xb0, 0x66, 0xcd, 0x09, 0xa0, 0xd1, 0xd4, 0x22, 0x1f, 0xc3, 0x13, - 0x1b, 0x91, 0xdf, 0x0e, 0x38, 0x59, 0x9e, 0xc9, 0x10, 0x2a, 0x28, 0x53, 0xc6, 0x5e, 0xb1, 0x97, - 0xc6, 0x0d, 0x7c, 0x0a, 0xb7, 0x3b, 0x38, 0x28, 0x8b, 0x27, 0x84, 0xb7, 0x59, 0xff, 0xc4, 0xc6, - 0x51, 0x02, 0x72, 0x49, 0x34, 0x05, 0x5f, 0x2e, 0xc4, 0x7b, 0x04, 0xe6, 0x91, 0x1d, 0xf1, 0xdc, - 0x0a, 0xe1, 0x69, 0x7b, 0x07, 0x9d, 0xe3, 0x1c, 0xa1, 0xcf, 0xa3, 0xc1, 0x48, 0x47, 0x82, 0x90, - 0x42, 0x08, 0xfc, 0xb9, 0x95, 0x43, 0x20, 0x85, 0x94, 0x4b, 0x85, 0x57, 0x97, 0x50, 0x42, 0x0a, - 0x5e, 0xcb, 0xf8, 0x95, 0x7f, 0x87, 0xbc, 0xac, 0x26, 0x37, 0x52, 0xfc, 0xf1, 0x89, 0x85, 0xc0, - 0x4d, 0x66, 0xa6, 0xca, 0xb0, 0x01, 0x2c, 0xa2, 0x00, 0x23, 0x6c, 0x29, 0x11, 0x39, 0x0d, 0x7f, - 0xcb, 0x58, 0xef, 0xec, 0xb1, 0x11, 0xc4, 0x1d, 0x58, 0xc6, 0x47, 0x8b, 0xc0, 0xcb, 0x65, 0xb6, - 0xa7, 0x7e, 0x5e, 0x40, 0xc0, 0xe2, 0x04, 0x0c, 0xec, 0xc4, 0x2a, 0x08, 0xe9, 0xa7, 0x58, 0x61, - 0xe4, 0x5b, 0x89, 0x7d, 0x44, 0xa0, 0xa1, 0xfe, 0xc4, 0xde, 0xdc, 0x2d, 0xca, 0x4c, 0x92, 0x57, - 0xcd, 0x66, 0x7b, 0xd7, 0x11, 0xa7, 0x31, 0xab, 0x36, 0x8c, 0x18, 0x7c, 0x15, 0xed, 0x94, 0x83, - 0x96, 0xdf, 0x5c, 0xfa, 0xc3, 0xc4, 0x91, 0x05, 0x1a, 0x32, 0xe5, 0x07, 0x02, 0x5f, 0x13, 0x3a, - 0x03, 0xf4, 0xeb, 0x4a, 0x89, 0x0d, 0x77, 0xad, 0xcb, 0xc6, 0x9e, 0xc4, 0x9b, 0x6d, 0x9c, 0x56, - 0x8a, 0xac, 0x23, 0x38, 0xf9, 0xf5, 0x8f, 0x2f, 0xff, 0x09, 0x58, 0x19, 0xc7, 0x0a, 0xb5, 0x01, - 0x91, 0x29, 0x67, 0x63, 0x58, 0x44, 0x69, 0x31, 0x8a, 0xc9, 0x72, 0x47, 0x1e, 0x90, 0xc5, 0x55, - 0xc4, 0xe8, 0xc2, 0x5a, 0x30, 0x89, 0xaa, 0x9a, 0x35, 0x24, 0xc7, 0x16, 0xcc, 0xdc, 0xa9, 0xcc, - 0xa5, 0x7f, 0x89, 0x1b, 0xb1, 0xea, 0x4f, 0x98, 0x28, 0xbb, 0x6b, 0xb6, 0xfc, 0x05, 0xd4, 0x02, - 0x0b, 0x99, 0x05, 0x4e, 0xcb, 0x60, 0xb2, 0xdc, 0x0a, 0xce, 0xc5, 0x94, 0x40, 0x40, 0x1d, 0x2a, - 0x41, 0xce, 0x0f, 0x29, 0x80, 0x00, 0x80, 0x6a, 0xc0, 0x67, 0x60, 0x98, 0x9b, 0xa6, 0x84, 0x4a, - 0xa0, 0x6c, 0x7b, 0x82, 0x96, 0x3c, 0x21, 0x1b, 0x40, 0x05, 0x41, 0xc3, 0x7d, 0x8a, 0x84, 0x83, - 0x71, 0x7d, 0xd7, 0x36, 0x12, 0x65, 0x4e, 0x43, 0xfe, 0x90, 0x27, 0x19, 0xc5, 0xb2, 0xc2, 0xd5, - 0x99, 0x10, 0x03, 0xfd, 0x88, 0xd1, 0x9f, 0x89, 0x12, 0x8a, 0xff, 0x31, 0x1d, 0x52, 0x5f, 0x04, - 0x25, 0x6a, 0xfa, 0xf9, 0x0c, 0xaa, 0x92, 0xfa, 0xca, 0xb8, 0x28, 0x23, 0x22, 0xe5, 0x19, 0xc8, - 0x2f, 0x57, 0x2f, 0x8b, 0xa3, 0x2e, 0x69, 0x22, 0x9d, 0x27, 0x8c, 0x2c, 0x66, 0x49, 0x22, 0x41, - 0x65, 0x02, 0xa3, 0x82, 0x20, 0x68, 0xc0, 0xc7, 0x9a, 0x32, 0x46, 0x3c, 0xfa, 0x59, 0xe5, 0xff, - 0x04, 0xc2, 0x54, 0x2f, 0xa1, 0x67, 0xea, 0xfc, 0x48, 0x40, 0x16, 0x08, 0x8e, 0x45, 0x13, 0x92, - 0x55, 0x0e, 0x32, 0x2e, 0xa4, 0x7c, 0xd3, 0x30, 0xdf, 0x42, 0x5e, 0xb8, 0x8d, 0x83, 0x22, 0x57, - 0xa9, 0x3a, 0x3d, 0x85, 0xbe, 0x20, 0x41, 0x66, 0x64, 0xdb, 0x1d, 0xc2, 0x05, 0xf1, 0x58, 0x44, - 0x29, 0x2e, 0x4f, 0x95, 0x17, 0x72, 0xe0, 0x5a, 0x70, 0x83, 0x52, 0xca, 0xb4, 0xd5, 0xca, 0x2c, - 0xf9, 0x7c, 0x3b, 0x51, 0x2b, 0x8f, 0x11, 0xf6, 0x32, 0x5c, 0x36, 0xdf, 0xca, 0xa1, 0x03, 0x56, - 0xcb, 0x0b, 0x3f, 0xc1, 0x04, 0x6c, 0x12, 0x4c, 0x60, 0x54, 0x95, 0x72, 0x5c, 0x44, 0x58, 0xd5, - 0x2f, 0xc4, 0x99, 0x3d, 0x8b, 0x1f, 0x01, 0xd1, 0xf6, 0xf3, 0xf2, 0xf3, 0xde, 0x80, 0x14, 0xc2, - 0xc6, 0x31, 0x57, 0x16, 0xc3, 0x30, 0x91, 0x04, 0x98, 0xa0, 0xaf, 0x34, 0xf8, 0xe5, 0x8c, 0x20, - 0x24, 0x29, 0x01, 0xba, 0x1f, 0xa6, 0xd8, 0x3c, 0xec, 0xd4, 0x2e, 0xf9, 0xfa, 0x68, 0x95, 0xb2, - 0xec, 0xb6, 0x91, 0x6c, 0xac, 0x1f, 0xdb, 0x15, 0xc4, 0x9e, 0xf5, 0xce, 0x65, 0xa5, 0xd6, 0xbe, - 0x13, 0x25, 0x8d, 0x89, 0x53, 0x65, 0x7f, 0x37, 0x55, 0x5c, 0x92, 0x7a, 0x0c, 0xd9, 0x3e, 0x12, - 0xad, 0xbd, 0x81, 0xb2, 0x31, 0x7f, 0x1b, 0xd4, 0x6b, 0x28, 0xba, 0x30, 0xe0, 0x9c, 0x3e, 0x56, - 0x63, 0xeb, 0x3d, 0xc5, 0xa1, 0xf6, 0xc9, 0x49, 0x9f, 0xc4, 0x02, 0xa9, 0x24, 0x60, 0xcf, 0x71, - 0xd0, 0xe6, 0x02, 0xa9, 0x98, 0x26, 0xed, 0xac, 0x1f, 0x47, 0xef, 0x8d, 0xb3, 0x23, 0x3d, 0x11, - 0xae, 0x90, 0xc9, 0x79, 0xd2, 0x64, 0x54, 0x8c, 0x65, 0x82, 0x06, 0x8a, 0x2e, 0x21, 0xa7, 0xc6, - 0x70, 0x99, 0x2b, 0x6d, 0xb5, 0xfc, 0xdd, 0xdf, 0xc3, 0x3b, 0xd3, 0x5f, 0x56, 0xd6, 0x2b, 0x94, - 0x8f, 0x78, 0x8e, 0xae, 0xf8, 0xae, 0xad, 0x2e, 0xbe, 0x2f, 0x56, 0xeb, 0xa9, 0x38, 0xdb, 0x5a, - 0xde, 0x1c, 0x69, 0x3c, 0xcb, 0x48, 0x2d, 0x4b, 0x01, 0x20, 0x7a, 0x8c, 0xc9, 0x0d, 0x38, 0x71, - 0xb9, 0x88, 0xb8, 0x42, 0x88, 0x8d, 0xbc, 0xc2, 0x29, 0x7f, 0x25, 0x02, 0xf4, 0x59, 0xc4, 0x88, - 0x05, 0x94, 0x03, 0x0c, 0xa6, 0x71, 0x8c, 0x66, 0xc2, 0x45, 0x53, 0x67, 0xfc, 0xf6, 0x15, 0x69, - 0xfe, 0x08, 0x44, 0x02, 0x2c, 0x81, 0xd4, 0x35, 0xc7, 0xae, 0x18, 0x08, 0x8d, 0x9c, 0xc1, 0xe8, - 0x0f, 0x1e, 0xfe, 0x2f, 0x71, 0x05, 0x1c, 0xe4, 0xe0, 0xa5, 0x13, 0x4b, 0x3b, 0x02, 0xe9, 0xc0, - 0xb7, 0x61, 0x46, 0x89, 0x87, 0x58, 0x8a, 0xf6, 0x91, 0xec, 0x61, 0x43, 0x40, 0x81, 0x1f, 0x9f, - 0xd3, 0xc1, 0xc0, 0x91, 0xb5, 0x74, 0x2f, 0x5b, 0xd5, 0x95, 0x50, 0x1a, 0x1d, 0x43, 0xd6, 0x07, - 0x22, 0xee, 0xc6, 0x11, 0xe4, 0xbf, 0x0e, 0x45, 0x72, 0x9b, 0x22, 0xcd, 0x4f, 0x81, 0x49, 0x36, - 0x0d, 0x15, 0x2f, 0x19, 0x43, 0xf3, 0xef, 0x86, 0xca, 0x0b, 0x00, 0x20, 0x24, 0x48, 0x68, 0x90, - 0x5c, 0x71, 0x20, 0xa0, 0x35, 0x07, 0x32, 0x45, 0x80, 0x37, 0x61, 0x66, 0x6d, 0x42, 0xac, 0x9e, - 0x1b, 0x6e, 0x35, 0xc7, 0x90, 0xf8, 0x25, 0xcc, 0x48, 0xe3, 0x52, 0xe3, 0x96, 0x31, 0x59, 0xf3, - 0x10, 0x24, 0x75, 0xcb, 0x4b, 0xd1, 0xde, 0x37, 0x21, 0x7e, 0x4c, 0xf1, 0x93, 0x25, 0x37, 0x6a, - 0x5d, 0x9c, 0xec, 0x31, 0x59, 0xf9, 0x88, 0x21, 0xf9, 0xbd, 0x61, 0xc3, 0x1c, 0x4d, 0xbe, 0x2f, - 0xac, 0x48, 0xef, 0x75, 0xc1, 0x6d, 0xad, 0x5a, 0x67, 0x2a, 0x2e, 0xbe, 0x38, 0x4e, 0xea, 0xa5, - 0x67, 0xcb, 0x0f, 0x82, 0x4e, 0x46, 0x58, 0xfa, 0x08, 0xf8, 0x4c, 0xcb, 0x63, 0xd6, 0x97, 0x82, - 0x7b, 0xab, 0x9f, 0xbd, 0x9d, 0x8b, 0x7a, 0xc4, 0x13, 0x8a, 0xeb, 0xe3, 0xae, 0x51, 0xe8, 0xf6, - 0x52, 0xa8, 0xe1, 0x05, 0x99, 0xea, 0xaa, 0x19, 0x85, 0x29, 0x83, 0x4e, 0x3c, 0xe0, 0xf3, 0x80, - 0x0e, 0x8a, 0x0b, 0x84, 0x38, 0x96, 0x9d, 0x61, 0x70, 0x61, 0x60, 0x1b, 0x4d, 0x75, 0x70, 0x4e, - 0x63, 0x0e, 0xe0, 0x4b, 0x4c, 0x3d, 0x75, 0x30, 0x16, 0x8b, 0x5f, 0xfb, 0x8b, 0xfd, 0x31, 0xe2, - 0x83, 0x41, 0x8f, 0x7c, 0xa7, 0x57, 0x0f, 0x2e, 0xcd, 0x4a, 0x02, 0xf1, 0x88, 0xe0, 0xcb, 0x53, - 0xf4, 0xee, 0x4a, 0x2d, 0x04, 0x21, 0x40, 0x1a, 0x8c, 0x3a, 0x20, 0xb5, 0x01, 0x7e, 0x0c, 0xfc, - 0x2d, 0x24, 0x17, 0x1a, 0x78, 0xbc, 0x3c, 0x56, 0x60, 0x08, 0xc6, 0x4c, 0x0a, 0x65, 0x6c, 0x38, - 0x86, 0x3e, 0x79, 0x78, 0x7b, 0xd0, 0x87, 0xb8, 0x07, 0x40, 0x74, 0xf7, 0xb7, 0x96, 0xbe, 0x6c, - 0xfe, 0x09, 0xc4, 0x25, 0xbe, 0xab, 0xaf, 0xbe, 0xec, 0xfc, 0x85, 0x5d, 0x7c, 0x29, 0x10, 0x00, - 0xf3, 0x87, 0x09, 0x81, 0x54, 0x00, 0x00, 0x55, 0x47, 0x88, 0x1c, 0xd6, 0x09, 0x5e, 0x8c, 0xa4, - 0x78, 0x74, 0x00, 0x05, 0xd4, 0xb1, 0x9e, 0x38, 0x30, 0x46, 0x28, 0xca, 0x09, 0x7a, 0xb3, 0x83, - 0x92, 0x7c, 0x34, 0xe0, 0x07, 0xd0, 0x51, 0x1a, 0xae, 0xfc, 0x8e, 0xa9, 0x7f, 0xcf, 0xe1, 0x77, - 0x0c, 0x57, 0x3d, 0x65, 0x07, 0x51, 0xde, 0x85, 0xdb, 0x39, 0x77, 0x2e, 0xc4, 0x3c, 0x5d, 0x00, - 0x3e, 0x13, 0xac, 0x5c, 0x9d, 0x56, 0x81, 0x85, 0x7b, 0xbb, 0x54, 0xdf, 0x29, 0x52, 0xb7, 0x5c, - 0x54, 0xea, 0xaa, 0x9e, 0x92, 0xae, 0x6b, 0xee, 0x12, 0xe0, 0x94, 0x83, 0xf9, 0x7e, 0x56, 0x37, - 0x2b, 0x84, 0xe1, 0xc4, 0x21, 0xdf, 0x4d, 0xc4, 0x00, 0xf6, 0x33, 0x80, 0x7f, 0x8c, 0x84, 0xdf, - 0x61, 0xfc, 0x91, 0x36, 0x3f, 0xc9, 0x3c, 0x97, 0x9e, 0x0f, 0x77, 0x3d, 0xe5, 0xe5, 0x9a, 0x8b, - 0xdf, 0x21, 0x52, 0x2f, 0x5f, 0x84, 0xc8, 0xb5, 0x27, 0x4f, 0x2b, 0x0f, 0xb2, 0xd2, 0x31, 0x18, - 0x66, 0xee, 0x95, 0xa4, 0x20, 0xb7, 0x28, 0x89, 0xbe, 0x3f, 0x94, 0xf7, 0x77, 0xf2, 0x75, 0x5f, - 0x44, 0xef, 0x92, 0x78, 0x13, 0x03, 0x47, 0x39, 0xfc, 0x40, 0x50, 0xb5, 0x89, 0xe1, 0xfe, 0x58, - 0x73, 0x59, 0x18, 0x2c, 0x33, 0x72, 0x42, 0xaa, 0x9a, 0xc3, 0xc6, 0xf2, 0x72, 0x90, 0xb7, 0xfc, - 0x22, 0x46, 0x8d, 0x05, 0x95, 0x30, 0x60, 0x2c, 0x7b, 0x33, 0xfd, 0x89, 0x7a, 0x71, 0xdd, 0x62, - 0x93, 0x93, 0x5a, 0xfb, 0x29, 0x3f, 0x88, 0xe0, 0x88, 0x97, 0x77, 0x8b, 0xe0, 0x98, 0x8f, 0x7b, - 0xa4, 0xe7, 0xf5, 0xf3, 0x4f, 0xdb, 0xc9, 0xcc, 0x2d, 0xdf, 0x5c, 0xbd, 0x99, 0xb0, 0xfc, 0x45, - 0x6b, 0x77, 0xb9, 0xbb, 0x14, 0xa7, 0x1f, 0x55, 0xc9, 0xca, 0x42, 0x42, 0x1f, 0x17, 0xb6, 0xc1, - 0xad, 0x31, 0xf2, 0x66, 0x83, 0xf1, 0xfc, 0xf2, 0xcf, 0x8c, 0x05, 0x54, 0xe0, 0x82, 0x50, 0x01, - 0x8b, 0xc1, 0x2e, 0xce, 0x10, 0x05, 0x3e, 0x60, 0xc1, 0x58, 0x05, 0xd0, 0xdf, 0x31, 0x55, 0xaf, - 0xcb, 0x5a, 0xcb, 0xcb, 0x5a, 0x9a, 0x81, 0x2e, 0x37, 0x57, 0xed, 0x87, 0x9f, 0xda, 0x3a, 0x49, - 0xcb, 0x39, 0x03, 0x3b, 0x84, 0xe8, 0xdc, 0x7d, 0xcd, 0xff, 0x0a, 0x74, 0x14, 0x4e, 0x48, 0xa4, - 0x7a, 0x28, 0x2e, 0xf7, 0x0c, 0x38, 0x7b, 0xc6, 0x1a, 0x82, 0x6a, 0x5d, 0x89, 0x8c, 0x95, 0x18, - 0x49, 0xc1, 0x31, 0x0d, 0x06, 0x69, 0x4a, 0xc2, 0x04, 0xde, 0x08, 0x6b, 0x93, 0x99, 0x44, 0xbc, - 0x17, 0x57, 0x5b, 0xdd, 0xb6, 0x42, 0x5c, 0x93, 0xe7, 0xae, 0xca, 0x74, 0x4d, 0xa1, 0x7c, 0x85, - 0xb4, 0xf3, 0x72, 0x5e, 0xf1, 0xfc, 0x14, 0xd5, 0x56, 0xc7, 0x54, 0xef, 0x69, 0xa2, 0x39, 0x69, - 0xad, 0x33, 0xf3, 0x1d, 0x27, 0xb8, 0x6f, 0x94, 0x43, 0xef, 0xe5, 0xbe, 0xe3, 0x78, 0x47, 0xbb, - 0xad, 0x6e, 0xde, 0x09, 0x38, 0xbd, 0x86, 0xec, 0x9d, 0xed, 0x78, 0xbd, 0x07, 0x3f, 0x7e, 0xfe, - 0x42, 0xee, 0xe1, 0x3e, 0x4a, 0x8b, 0xd4, 0xdc, 0x5c, 0xcc, 0x13, 0x23, 0x39, 0xa7, 0x98, 0x9e, - 0xba, 0x87, 0x39, 0xbb, 0xb8, 0x13, 0x3a, 0x33, 0xc0, 0xaf, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, - 0x50, 0x28, 0x30, 0xeb, 0x02, 0x88, 0x64, 0x68, 0xf1, 0x40, 0x00, 0x40, 0xea, 0x28, 0x00, 0x08, - 0x1d, 0x40, 0xe9, 0x80, 0x00, 0x82, 0xb3, 0x20, 0xe9, 0x80, 0x00, 0x82, 0xb3, 0x21, 0x40, 0x00, - 0x40, 0xda, 0x07, 0x40, 0x00, 0x40, 0x0c, 0x00, 0x04, 0x19, 0xa8, 0x1d, 0x30, 0x00, 0x10, 0x54, - 0x64, 0x07, 0x4d, 0x90, 0x00, 0xc0, 0x00, 0x41, 0xc8, 0x10, 0xe6, 0x00, 0x01, 0x04, 0x8f, 0x07, - 0x30, 0x00, 0x08, 0x24, 0x78, 0x3a, 0x00, 0xc0, 0x00, 0x41, 0x51, 0x90, 0x74, 0x01, 0x80, 0x00, - 0x82, 0xa3, 0x20, 0xe6, 0x00, 0x01, 0x04, 0xaf, 0x18, 0x93, 0x40, 0xb8, 0x00, 0x08, 0x21, 0x56, - 0x83, 0xa0, 0x18, 0x00, 0x08, 0x2a, 0x32, 0x9e, 0x21, 0x00, 0x00, 0x81, 0xf0, 0x40, 0xd0, 0x00, - 0x10, 0x2a, 0x01, 0xd0, 0x00, 0x10, 0x05, 0x1b, 0x0b, 0x9c, 0x08, 0x3a, 0x53, 0x72, 0x61, 0x40, - 0x70, 0x24, 0x74, 0xab, 0xf4, 0x6e, 0x3a, 0xb8, 0xd0, 0x14, 0x65, 0x1b, 0x20, 0x03, 0x67, 0xa1, - 0x83, 0x47, 0x87, 0x31, 0xc0, 0x71, 0xb1, 0x21, 0xb0, 0x03, 0xc8, 0xee, 0x32, 0x28, 0x00, 0xe3, - 0xf4, 0x8f, 0x97, 0xf1, 0xe5, 0x87, 0x30, 0x26, 0x62, 0x9f, 0x9d, 0xfe, 0xdb, 0x6d, 0xb7, 0xe5, - 0x4e, 0x9a, 0x7f, 0x08, 0xa8, 0x22, 0x50, 0x0c, 0x38, 0x76, 0x22, 0x4b, 0xf6, 0xdb, 0x87, 0x62, - 0x80, 0x34, 0x00, 0x92, 0x81, 0x80, 0x13, 0xaa, 0x51, 0x75, 0x17, 0xf5, 0x17, 0x17, 0x5f, 0x07, - 0x04, 0x12, 0x0c, 0x40, 0x3b, 0xde, 0xb5, 0xc6, 0xc2, 0x60, 0xf7, 0x03, 0xa1, 0x80, 0x00, 0xa8, - 0x8f, 0x1b, 0x81, 0xa3, 0xdc, 0x8f, 0xc4, 0x78, 0x8f, 0x11, 0x20, 0x3a, 0xb2, 0x26, 0x70, 0xd3, - 0xd1, 0x3e, 0x27, 0xc4, 0xe1, 0xbf, 0x44, 0xf8, 0x9c, 0x34, 0xf4, 0x4e, 0x1b, 0xf4, 0x6c, 0x80, - 0x68, 0xf7, 0x0e, 0xd8, 0x9c, 0x0d, 0x1e, 0xe8, 0x8f, 0x1b, 0x81, 0xa3, 0xdc, 0x3b, 0x1f, 0x89, - 0x94, 0x3e, 0x1e, 0x89, 0x8d, 0x14, 0x00, 0x09, 0x62, 0x63, 0x81, 0xd7, 0x91, 0x98, 0x6f, 0xc3, - 0xb6, 0x37, 0x05, 0xc4, 0x01, 0x72, 0x3f, 0x1b, 0x83, 0xa0, 0x5c, 0x76, 0xc4, 0xe0, 0xeb, 0xc8, - 0xdc, 0x0e, 0xb1, 0x2a, 0x3f, 0x13, 0x87, 0xbd, 0x13, 0x20, 0xa2, 0xa3, 0x70, 0x35, 0x97, 0x0f, - 0x2c, 0x66, 0x1e, 0x1e, 0x1d, 0x2c, 0x46, 0x0e, 0xbc, 0x8c, 0xc0, 0x4f, 0xfb, 0x7e, 0x23, 0xb8, - 0x8c, 0x0d, 0xcf, 0xa2, 0x30, 0xf0, 0xf4, 0x44, 0xe1, 0xc7, 0xa2, 0x7c, 0x4e, 0x0e, 0xac, 0x8c, - 0xe8, 0xfc, 0x64, 0xc0, 0x75, 0x1a, 0xa3, 0xb8, 0x9c, 0x0d, 0x61, 0xf4, 0x46, 0x0f, 0x0f, 0xc6, - 0x4b, 0x1f, 0x63, 0x38, 0xed, 0x8c, 0x90, 0x37, 0xe1, 0xe5, 0x8d, 0xc0, 0xd7, 0x17, 0x0e, 0x96, - 0x23, 0xc6, 0x4b, 0x47, 0xe3, 0x58, 0x80, 0x75, 0x0c, 0x49, 0x6e, 0x29, 0xc3, 0x48, 0xc0, 0x05, - 0x27, 0xe8, 0x83, 0x56, 0xed, 0x7f, 0xfb, 0x6d, 0xb6, 0xdc, 0x89, 0xd4, 0x34, 0xa0, 0x4a, 0x1e, - 0x0d, 0xc7, 0xfb, 0x6d, 0xfe, 0x25, 0xa3, 0xa8, 0x61, 0x42, 0xb6, 0xbf, 0xfa, 0x69, 0xd3, 0xa7, - 0xf3, 0x1a, 0x8e, 0x01, 0x3b, 0x47, 0x55, 0x78, 0x34, 0x50, 0x6e, 0x16, 0x39, 0x14, 0x05, 0x1a, - 0x39, 0x55, 0x11, 0x69, 0x8d, 0xc0, 0x41, 0x9a, 0x51, 0xe0, 0xd4, 0xe4, 0x50, 0xe4, 0x70, 0x00, - 0x15, 0x40, 0xee, 0x66, 0x70, 0x57, 0x04, 0xdf, 0xc6, 0xee, 0xf1, 0x57, 0x8a, 0xb6, 0xff, 0xc4, - 0x27, 0x07, 0x54, 0xbc, 0x5b, 0xb9, 0xb9, 0xbf, 0x0e, 0xe0, 0x02, 0xfc, 0x39, 0x74, 0x56, 0x0b, - 0xda, 0x2f, 0xf6, 0xed, 0x8a, 0xb6, 0xe2, 0xad, 0xb0, 0xd9, 0x40, 0xc7, 0x69, 0xd3, 0x4f, 0x6d, - 0xb8, 0xd8, 0xd0, 0x13, 0x33, 0xc4, 0xfc, 0x01, 0xa0, 0x6b, 0xe3, 0x08, 0x50, 0xe3, 0xd1, 0x8c, - 0x66, 0x1a, 0x79, 0x2b, 0x8c, 0x45, 0x0e, 0xf8, 0x68, 0xa1, 0xf8, 0x85, 0x07, 0x56, 0x44, 0x2e, - 0x30, 0x86, 0x07, 0x5e, 0x09, 0x69, 0x8c, 0x24, 0x3b, 0xec, 0xb1, 0x0a, 0x0e, 0xac, 0x88, 0x50, - 0xef, 0xa2, 0x14, 0x34, 0xf4, 0x52, 0x86, 0xcc, 0x44, 0x62, 0x28, 0x80, 0xd0, 0x71, 0x8f, 0xc6, - 0x28, 0x42, 0x84, 0xbd, 0x8c, 0x50, 0xe3, 0xff, 0x63, 0x14, 0x2b, 0xc7, 0x63, 0x14, 0x1c, 0x96, - 0x0e, 0x31, 0xf8, 0xc5, 0x0b, 0x87, 0x1d, 0x8c, 0x54, 0xbb, 0x18, 0xa9, 0x76, 0x2d, 0x43, 0xde, - 0xec, 0x41, 0x20, 0xea, 0xf1, 0xe8, 0x7c, 0x70, 0x1b, 0xfa, 0x69, 0xc5, 0xa1, 0xc2, 0x86, 0x3b, - 0x1f, 0x84, 0x10, 0xfa, 0x55, 0xfb, 0x4d, 0x4e, 0x86, 0x06, 0xc0, 0x0f, 0x44, 0x28, 0x63, 0xd1, - 0x4a, 0x1b, 0x61, 0x88, 0x59, 0x0d, 0x07, 0x24, 0x45, 0x34, 0xf4, 0xd3, 0xf4, 0xd3, 0xd3, 0x4e, - 0x21, 0x0c, 0x0d, 0xfa, 0x38, 0x84, 0x29, 0x54, 0x7e, 0x39, 0x46, 0xdd, 0x28, 0xee, 0x29, 0x47, - 0xd0, 0xe2, 0x14, 0x20, 0x55, 0x36, 0x00, 0xb0, 0x00, 0x60, 0x82, 0x9b, 0xbb, 0xbb, 0xbb, 0xbe, - 0x6c, 0x36, 0x0c, 0x00, 0x01, 0x00, 0xc8, 0xc1, 0xc4, 0xa2, 0x87, 0xbd, 0x10, 0xa1, 0xa7, 0xa2, - 0x97, 0x1c, 0x42, 0x51, 0xf8, 0x85, 0x07, 0x7c, 0x8c, 0x5a, 0x3b, 0x8e, 0x50, 0xc8, 0x61, 0x21, - 0xe4, 0x7e, 0x39, 0x42, 0xb6, 0xc1, 0x16, 0x98, 0x82, 0x10, 0x10, 0x0f, 0xc8, 0xa2, 0x94, 0x1f, - 0x11, 0x86, 0xd8, 0x80, 0x05, 0x47, 0x33, 0x1f, 0x00, 0x06, 0x9a, 0x6d, 0xb6, 0xdb, 0x6c, 0x55, - 0xff, 0xe1, 0xe0, 0xe3, 0x83, 0x4d, 0x3f, 0xe1, 0xc4, 0x50, 0x04, 0x24, 0xd9, 0x94, 0x9f, 0xbc, - 0x9a, 0x78, 0xb6, 0x29, 0x7f, 0xf9, 0xd6, 0xb6, 0xdf, 0xf1, 0x8a, 0x0a, 0x23, 0x9b, 0x0e, 0x8c, - 0xa3, 0x94, 0x2c, 0xe4, 0x8d, 0xa8, 0xb6, 0x70, 0x06, 0x8b, 0xa6, 0xa3, 0xc8, 0x97, 0x8a, 0x7c, - 0xe8, 0xc0, 0x58, 0x90, 0x64, 0x88, 0xe5, 0x01, 0x89, 0x35, 0x59, 0xec, 0x3a, 0xa0, 0x02, 0x17, - 0x5d, 0xd8, 0xa3, 0x7e, 0x79, 0xb8, 0xed, 0xd3, 0xff, 0xc3, 0x98, 0x28, 0x6a, 0x77, 0x77, 0xfc, - 0x3d, 0x10, 0x00, 0x65, 0x01, 0x54, 0x48, 0x2a, 0xb1, 0x7d, 0xd1, 0xbe, 0x6f, 0xfe, 0x6f, 0x9b, - 0x9c, 0xc4, 0xbf, 0x2f, 0x6d, 0x55, 0xb8, 0x5d, 0x8b, 0x00, 0x33, 0xfa, 0xe3, 0x11, 0x7f, 0xdf, - 0xed, 0xdd, 0xd7, 0xfb, 0x1a, 0x82, 0xb4, 0x70, 0x71, 0x08, 0x60, 0x3a, 0xb2, 0x75, 0x0d, 0xfa, - 0x75, 0x07, 0x57, 0x8c, 0x8d, 0xa3, 0x87, 0x10, 0x86, 0x07, 0xc3, 0xd1, 0x88, 0x80, 0x63, 0xae, - 0x1d, 0xb1, 0x0a, 0x19, 0x3d, 0x10, 0xb8, 0x85, 0x14, 0xe2, 0x14, 0x32, 0x7a, 0x31, 0x41, 0xd5, - 0xc7, 0x63, 0xf1, 0x0a, 0x02, 0x27, 0xf4, 0xfc, 0x87, 0x10, 0xe0, 0x02, 0x12, 0x46, 0x51, 0xb0, - 0x62, 0x1f, 0x97, 0xe3, 0x78, 0x17, 0x6f, 0x79, 0xcc, 0x0f, 0x0c, 0x10, 0x85, 0x89, 0xa2, 0x09, - 0x48, 0xc0, 0x95, 0x49, 0xe2, 0x9f, 0x15, 0xc3, 0x72, 0x00, 0x0e, 0x03, 0xa1, 0xbe, 0x73, 0x79, - 0x8d, 0x1f, 0xfb, 0x15, 0xaf, 0x14, 0xfd, 0xf1, 0x44, 0xb8, 0x86, 0xfc, 0x5b, 0x72, 0xa9, 0x60, - 0x72, 0xfc, 0xfd, 0x01, 0x84, 0x7c, 0xd2, 0xfb, 0xaa, 0x33, 0xc6, 0xf8, 0x66, 0xf1, 0x6c, 0x26, - 0x0e, 0x20, 0x58, 0x38, 0xd8, 0x92, 0x14, 0x3d, 0xe8, 0xb5, 0x07, 0xae, 0x3b, 0x67, 0x5c, 0xea, - 0x1c, 0x7a, 0x75, 0x07, 0x5f, 0x9d, 0x90, 0x3e, 0xf4, 0x5a, 0x81, 0xd6, 0x4a, 0x3b, 0x63, 0x94, - 0xf2, 0x1e, 0x58, 0xe4, 0x50, 0xad, 0x90, 0x8b, 0x4c, 0x74, 0xc5, 0x22, 0x46, 0xc4, 0x12, 0x3f, - 0x9c, 0x6a, 0x38, 0x7b, 0xd9, 0x22, 0x8d, 0x8d, 0x81, 0xc4, 0xa6, 0x31, 0x0c, 0x07, 0x5e, 0x0e, - 0xd8, 0x84, 0x40, 0x75, 0x64, 0x52, 0x86, 0x58, 0x67, 0x01, 0x00, 0x02, 0x45, 0x46, 0x00, 0x00, - 0x80, 0x02, 0x18, 0xe3, 0x54, 0x1d, 0x5a, 0x44, 0xce, 0xa0, 0xf5, 0xe7, 0x52, 0xca, 0x29, 0x48, - 0x41, 0x88, 0x27, 0x18, 0xa1, 0x50, 0x38, 0xcb, 0x14, 0xa1, 0x0d, 0x57, 0x11, 0x8a, 0x1f, 0x3c, - 0x25, 0xa1, 0xf8, 0xc2, 0x40, 0xeb, 0x25, 0xec, 0x42, 0xe2, 0xe4, 0x00, 0x60, 0x6a, 0xc8, 0x03, - 0xef, 0xb1, 0xe3, 0x42, 0xa3, 0x94, 0x11, 0x15, 0xd5, 0xc8, 0x2f, 0x8e, 0x45, 0x00, 0x89, 0xad, - 0xb1, 0xd2, 0x25, 0x28, 0xc9, 0x40, 0xc0, 0x6e, 0xe1, 0xf2, 0x28, 0xa9, 0x07, 0xb2, 0x8e, 0x50, - 0x46, 0x6e, 0xa8, 0x7d, 0x8e, 0x21, 0x80, 0x45, 0xe3, 0xe7, 0xf5, 0x0f, 0xb1, 0x64, 0x81, 0x61, - 0x44, 0x48, 0x22, 0x62, 0xd1, 0x40, 0x4b, 0xbe, 0x8f, 0x0d, 0xd8, 0x6d, 0xc0, 0x0c, 0x3d, 0x97, - 0x80, 0xc2, 0x17, 0xe7, 0x77, 0x78, 0xae, 0x2b, 0x77, 0x77, 0x8a, 0xe2, 0xb1, 0x83, 0x11, 0xf5, - 0xab, 0xdf, 0x0f, 0x46, 0x00, 0x8f, 0x22, 0x3d, 0x80, 0x9c, 0x27, 0x5f, 0xad, 0x7c, 0x54, 0x8a, - 0x9e, 0xff, 0x8e, 0x61, 0x38, 0xec, 0x7e, 0x21, 0x71, 0x0b, 0x88, 0x44, 0x0d, 0xfa, 0x29, 0x43, - 0x26, 0x22, 0x39, 0x43, 0x39, 0x11, 0xf8, 0xa5, 0x21, 0x18, 0xc4, 0x51, 0x2e, 0x0e, 0xd8, 0xa5, - 0x03, 0xd8, 0x96, 0x39, 0x49, 0x01, 0xd8, 0xfc, 0x52, 0x85, 0x2e, 0x88, 0xa5, 0x0c, 0x06, 0x18, - 0x8a, 0x50, 0xa1, 0xca, 0x1d, 0x63, 0x80, 0x02, 0x10, 0x7b, 0x8d, 0x32, 0xdc, 0xfe, 0x62, 0x91, - 0xb5, 0x29, 0xf7, 0xfc, 0x41, 0x51, 0xec, 0x4b, 0x08, 0x96, 0x14, 0x54, 0x50, 0xf3, 0x14, 0x04, - 0xc9, 0x91, 0x12, 0x18, 0x07, 0xca, 0x64, 0x0d, 0x7e, 0x60, 0x87, 0xdd, 0xa0, 0x7d, 0x62, 0x7c, - 0x91, 0xc1, 0x66, 0xa7, 0x10, 0x80, 0xec, 0x78, 0x52, 0x60, 0x1c, 0x16, 0x70, 0x8b, 0xc9, 0x01, - 0x3c, 0x6f, 0xcd, 0x56, 0xd5, 0xe1, 0xb7, 0x00, 0x31, 0x12, 0x22, 0x20, 0x0c, 0x2a, 0x98, 0x25, - 0x9f, 0xef, 0x12, 0x0f, 0x67, 0x03, 0xfe, 0x48, 0xe0, 0x99, 0xd2, 0xce, 0x07, 0xfc, 0x01, 0x04, - 0x15, 0xbd, 0xeb, 0x5c, 0x20, 0x40, 0xb8, 0x1c, 0x01, 0xcc, 0xa8, 0x87, 0x5f, 0xa6, 0x9c, 0x71, - 0x08, 0x6c, 0x8b, 0x10, 0xa3, 0x45, 0x9c, 0x42, 0xe3, 0x94, 0x30, 0xc4, 0xdb, 0x1c, 0x48, 0x65, - 0x86, 0x72, 0xc7, 0x22, 0x8a, 0x63, 0x8c, 0xaa, 0x31, 0x4a, 0x41, 0xec, 0x5a, 0x82, 0x3b, 0x73, - 0xcf, 0xc7, 0xe3, 0x94, 0x6d, 0xd3, 0xd8, 0xc2, 0x41, 0xff, 0x3a, 0x62, 0x14, 0x6b, 0x38, 0x85, - 0x1c, 0xce, 0x21, 0x71, 0x0a, 0x0f, 0xfc, 0x52, 0xe1, 0x14, 0x3e, 0xbf, 0xa6, 0x9c, 0xf0, 0x80, - 0x7b, 0xd1, 0x78, 0x3a, 0xb1, 0x22, 0x88, 0x50, 0x7b, 0xf1, 0x0b, 0x8c, 0x50, 0x75, 0x71, 0xdb, - 0x1c, 0xa2, 0x00, 0x90, 0x51, 0xf8, 0x85, 0x00, 0x71, 0xe6, 0xd3, 0xf1, 0x1c, 0x88, 0x14, 0x3a, - 0x76, 0x29, 0x46, 0x9a, 0x23, 0x14, 0x77, 0xc9, 0x94, 0x5c, 0xe1, 0x80, 0x00, 0x78, 0xf1, 0xc0, - 0x38, 0x59, 0x0d, 0x01, 0xc7, 0x0c, 0x54, 0x2f, 0xff, 0xbd, 0xf1, 0x91, 0x81, 0xf7, 0x87, 0xc7, - 0xe3, 0x18, 0xd8, 0xe0, 0xd8, 0xc4, 0x30, 0x1e, 0xfa, 0x3f, 0x1c, 0xc8, 0x3e, 0x70, 0x6c, 0x51, - 0x20, 0x76, 0x34, 0x28, 0xd7, 0x04, 0x4d, 0x27, 0xed, 0xf1, 0xa4, 0x82, 0xeb, 0xed, 0x3a, 0x8e, - 0x90, 0x4f, 0x9d, 0x15, 0xc2, 0xe4, 0x14, 0x00, 0x39, 0x3e, 0xc6, 0xc7, 0x28, 0x61, 0xfe, 0xfd, - 0x77, 0xbc, 0xde, 0x6e, 0x55, 0x98, 0x65, 0x8b, 0x00, 0x33, 0xfa, 0x8d, 0x19, 0x7e, 0xff, 0xd5, - 0x7f, 0x8f, 0xc6, 0x4b, 0x4a, 0xe2, 0x14, 0x32, 0xf4, 0x72, 0x85, 0x2d, 0x9d, 0x8c, 0x50, 0xd3, - 0xfb, 0x63, 0x94, 0xa4, 0x7b, 0x14, 0xa5, 0x21, 0x8a, 0x54, 0x0e, 0x31, 0x46, 0x98, 0xf6, 0x29, - 0x41, 0x55, 0x44, 0xa3, 0x09, 0x35, 0x95, 0x58, 0xe9, 0x43, 0x01, 0x84, 0x65, 0x8c, 0xc4, 0xc8, - 0x23, 0x83, 0x22, 0x87, 0x98, 0xc0, 0x37, 0xc9, 0x9f, 0x7b, 0xfc, 0x43, 0x08, 0x81, 0x87, 0x7e, - 0xb5, 0x87, 0x58, 0xc0, 0x00, 0xb8, 0x7f, 0x68, 0x81, 0xc8, 0x45, 0xde, 0x93, 0xfb, 0x85, 0xce, - 0x01, 0xe2, 0xe0, 0xfe, 0x3f, 0x1e, 0x79, 0xe7, 0xc9, 0xe1, 0xe5, 0xea, 0xb4, 0x2c, 0xcb, 0x30, - 0x75, 0x4f, 0xc7, 0x9e, 0x56, 0x06, 0x80, 0xff, 0x1d, 0x92, 0xea, 0xeb, 0xbe, 0x17, 0x24, 0x02, - 0xb9, 0xd0, 0x68, 0x68, 0xee, 0xfb, 0x79, 0x0b, 0x84, 0xbe, 0x8c, 0x3e, 0x93, 0xc0, 0xf6, 0x73, - 0xc2, 0x78, 0xc2, 0x69, 0x71, 0xd0, 0xa8, 0x21, 0xa2, 0x9e, 0x63, 0xa1, 0xf8, 0xa5, 0x04, 0x0f, - 0x48, 0xd1, 0x48, 0x83, 0x0c, 0x62, 0x15, 0x02, 0x8a, 0xc6, 0x5d, 0x11, 0x88, 0xa0, 0x6f, 0xbb, - 0xb1, 0xc8, 0xa0, 0x83, 0x2a, 0xa4, 0x7e, 0x31, 0x10, 0x2e, 0x5a, 0x3b, 0x10, 0x8a, 0x00, 0xf3, - 0xaa, 0xe8, 0x89, 0x50, 0xf7, 0xa2, 0x08, 0x40, 0x35, 0xbe, 0x8c, 0x41, 0x10, 0x70, 0xb6, 0x0e, - 0x0c, 0x8a, 0x21, 0x04, 0x05, 0x15, 0x10, 0x48, 0x2d, 0x7d, 0x1c, 0xa3, 0x4e, 0x87, 0xc6, 0xa0, - 0x8d, 0x22, 0x89, 0x43, 0x03, 0xde, 0x89, 0x50, 0x75, 0x6c, 0x62, 0x31, 0x64, 0xd8, 0x85, 0xc5, - 0x29, 0x29, 0x18, 0xa6, 0xfd, 0x8a, 0x50, 0x3e, 0x99, 0x60, 0x38, 0x00, 0x6c, 0x82, 0x1e, 0xee, - 0x30, 0x00, 0x0c, 0x21, 0xc7, 0x81, 0x44, 0x0e, 0x00, 0x86, 0xef, 0x8c, 0x00, 0x03, 0x48, 0x68, - 0x0a, 0xc0, 0x54, 0x81, 0x80, 0x10, 0xdd, 0xf1, 0xc0, 0x00, 0xd4, 0x70, 0x07, 0xea, 0x38, 0x00, - 0x1c, 0x8d, 0x00, 0x15, 0x17, 0x28, 0x64, 0x07, 0x84, 0x52, 0x63, 0x30, 0x75, 0x64, 0x58, 0xb4, - 0x3e, 0x22, 0x93, 0x3a, 0xe2, 0x17, 0x3a, 0x1c, 0x0d, 0xc8, 0x51, 0xa4, 0x80, 0xf6, 0x9c, 0xae, - 0xc4, 0xb3, 0x02, 0x01, 0x58, 0x74, 0x76, 0x0b, 0xb5, 0x4e, 0x63, 0x1a, 0x48, 0xab, 0xcb, 0x0b, - 0xe0, 0x1c, 0x06, 0x5e, 0x63, 0x9e, 0xf6, 0xef, 0xf1, 0x5c, 0x56, 0x04, 0x9d, 0x87, 0xa2, 0x80, - 0x1d, 0x93, 0xc4, 0x76, 0x72, 0xd7, 0xf5, 0xaf, 0x99, 0x15, 0x6f, 0xf8, 0xc2, 0x0f, 0x24, 0x72, - 0x55, 0x1c, 0xa0, 0x7f, 0x37, 0x76, 0x33, 0x36, 0x24, 0x51, 0xca, 0x30, 0xc4, 0x6a, 0xac, 0x62, - 0x8d, 0x31, 0x8b, 0x1c, 0xa0, 0x48, 0xce, 0x74, 0xf3, 0xa6, 0x31, 0x14, 0x98, 0x74, 0x3f, 0x10, - 0x88, 0x0e, 0xd9, 0x1c, 0xa4, 0x27, 0xd8, 0x85, 0x2e, 0x45, 0x29, 0x49, 0xc5, 0x22, 0x9a, 0x10, - 0xdb, 0x08, 0x00, 0x3d, 0x56, 0xc8, 0x3b, 0xff, 0xfb, 0x2f, 0x7e, 0xca, 0xca, 0x1b, 0x62, 0x80, - 0x00, 0xe1, 0xde, 0x95, 0xb3, 0x90, 0x04, 0x12, 0xf7, 0xdb, 0xcc, 0xe1, 0x1d, 0x3a, 0x74, 0x3c, - 0x00, 0xc0, 0x1d, 0x90, 0x1f, 0xbc, 0x48, 0x01, 0x82, 0x40, 0x00, 0x2a, 0x90, 0x24, 0x00, 0xc0, - 0x34, 0xf0, 0x1a, 0x6e, 0x3f, 0xf5, 0xac, 0x37, 0x80, 0x36, 0x61, 0xca, 0x04, 0x2e, 0x28, 0x33, - 0x3e, 0xd3, 0xbb, 0x21, 0x88, 0x0c, 0x14, 0xe3, 0x64, 0x4f, 0x0c, 0x48, 0x1f, 0x67, 0x80, 0x7a, - 0x8c, 0x13, 0x0e, 0x0e, 0xc0, 0xe0, 0x79, 0x93, 0x7e, 0xbc, 0x5b, 0x0b, 0x82, 0x17, 0x09, 0x3f, - 0x5c, 0x67, 0x10, 0xa1, 0xa7, 0xa2, 0x14, 0x3b, 0xe8, 0xc5, 0x36, 0x76, 0x21, 0x14, 0x1e, 0xb2, - 0x1a, 0x42, 0x01, 0x13, 0x94, 0xcb, 0xff, 0xf8, 0xab, 0xf6, 0x1d, 0x43, 0x00, 0x05, 0xe9, 0x86, - 0x42, 0x62, 0x95, 0x98, 0xa6, 0xed, 0x7f, 0xe3, 0xde, 0x17, 0x30, 0xdb, 0x68, 0x70, 0x33, 0x8e, - 0x06, 0x70, 0x3e, 0x62, 0x29, 0x62, 0xda, 0x7b, 0x6d, 0xc3, 0x84, 0x30, 0x00, 0xaf, 0x53, 0xc8, - 0x18, 0x0c, 0xc1, 0xef, 0xf5, 0xf9, 0xb4, 0x5b, 0x07, 0xdc, 0x1c, 0xdd, 0xdd, 0xdc, 0xa1, 0x94, - 0xa1, 0x94, 0xb5, 0x96, 0xb7, 0x3b, 0x6d, 0xdb, 0xa7, 0x0d, 0x28, 0x02, 0x71, 0xd2, 0x14, 0x44, - 0xda, 0x15, 0x62, 0xac, 0x1f, 0x72, 0xec, 0x55, 0x8a, 0xb1, 0x6c, 0xbf, 0x6f, 0xdb, 0x6f, 0x31, - 0x86, 0xf0, 0x00, 0xd9, 0x20, 0x05, 0x23, 0xf1, 0x09, 0x0a, 0xf9, 0x37, 0xb2, 0xff, 0x83, 0x97, - 0xc1, 0xcb, 0xed, 0xe5, 0x7f, 0x17, 0xc7, 0x0d, 0xe0, 0xe1, 0xbd, 0x7a, 0x7d, 0xb8, 0x5d, 0x8f, - 0x00, 0x0c, 0x3e, 0xbb, 0xd6, 0x65, 0xff, 0xf7, 0xfe, 0x07, 0x91, 0xf7, 0xe3, 0xb3, 0x28, 0xc4, - 0x26, 0xc6, 0x31, 0x14, 0x0d, 0x35, 0xc3, 0xb1, 0xf8, 0xd2, 0x41, 0xd5, 0xa7, 0x4c, 0x4a, 0x86, - 0x9e, 0x8a, 0x50, 0x7a, 0x84, 0x62, 0x35, 0xcc, 0x42, 0x84, 0x4d, 0x02, 0x71, 0x4a, 0x11, 0x34, - 0x0a, 0x47, 0x2b, 0x8e, 0xec, 0x42, 0xbc, 0x42, 0x84, 0x7e, 0x9f, 0xe0, 0x96, 0xee, 0x2b, 0x15, - 0xbb, 0xe3, 0x80, 0x01, 0x48, 0xd1, 0x5c, 0x0f, 0x00, 0x92, 0xab, 0x8d, 0x00, 0x03, 0x48, 0x60, - 0x2b, 0x0c, 0x82, 0x00, 0x49, 0x55, 0x55, 0x1c, 0x00, 0x0c, 0x46, 0x00, 0xae, 0x04, 0x00, 0x49, - 0xd5, 0x46, 0x80, 0x01, 0xc4, 0x30, 0x00, 0x15, 0x18, 0x49, 0xb3, 0x36, 0x7c, 0x04, 0xcc, 0xf6, - 0xfc, 0x84, 0x48, 0x13, 0xeb, 0x7b, 0xfc, 0x5f, 0x1c, 0x1b, 0x3b, 0xe2, 0xf8, 0xe0, 0xd8, 0xe4, - 0x12, 0x0a, 0xc4, 0xea, 0x6c, 0x5a, 0x80, 0x9b, 0xd1, 0xc7, 0xa3, 0x63, 0x1c, 0x32, 0xf6, 0xb1, - 0xae, 0x04, 0x5f, 0x27, 0xe6, 0x1a, 0x63, 0x8e, 0x30, 0x90, 0x35, 0x6b, 0xab, 0x1b, 0x80, 0x91, - 0x69, 0x38, 0xf1, 0x50, 0xbd, 0xc2, 0x71, 0x40, 0x5e, 0x68, 0xf3, 0xfe, 0xf7, 0xf8, 0xe6, 0x2c, - 0x39, 0x3f, 0xdc, 0x6c, 0x73, 0x90, 0x86, 0x2c, 0x72, 0x38, 0xa6, 0x22, 0xd3, 0x14, 0x88, 0x52, - 0x71, 0x98, 0x17, 0x75, 0x49, 0xb1, 0x8a, 0x34, 0xcb, 0xb1, 0x0a, 0x19, 0x0f, 0xa2, 0x14, 0x34, - 0xc4, 0xe3, 0x30, 0x62, 0xbd, 0xec, 0x42, 0x88, 0x24, 0x18, 0x85, 0x40, 0xe2, 0x11, 0x19, 0xc3, - 0x8c, 0x40, 0x00, 0xa7, 0xe9, 0xaf, 0x46, 0x27, 0x9f, 0x3c, 0x2c, 0xbe, 0x68, 0x44, 0x98, 0x02, - 0x19, 0x95, 0x6b, 0xf0, 0xdb, 0x30, 0x04, 0x18, 0x06, 0x9d, 0xd3, 0xbd, 0xde, 0xf8, 0xe9, 0x42, - 0x0c, 0x04, 0x97, 0x1d, 0xed, 0xdc, 0xa0, 0x24, 0xb8, 0xe5, 0x01, 0x25, 0xc9, 0x37, 0xef, 0x78, - 0x5c, 0x84, 0x00, 0xf3, 0x41, 0x07, 0x99, 0x67, 0x23, 0x4c, 0x4c, 0xe9, 0x58, 0xd6, 0x0d, 0x72, - 0xd9, 0x0c, 0xbc, 0x90, 0x64, 0x40, 0xee, 0x58, 0xe8, 0x07, 0x0b, 0x14, 0xe4, 0x53, 0x57, 0xc2, - 0xec, 0x68, 0x10, 0xa9, 0xc9, 0x70, 0xf0, 0xbe, 0x1f, 0x1d, 0x1c, 0x23, 0xa3, 0x87, 0xc7, 0x76, - 0x21, 0x71, 0x0b, 0x8e, 0x43, 0xc6, 0x19, 0x23, 0xf0, 0xe2, 0x08, 0x00, 0x08, 0x9e, 0xfe, 0x21, - 0xb9, 0x3f, 0xbd, 0xff, 0xf0, 0x77, 0xe2, 0x5e, 0x56, 0xb8, 0x04, 0x73, 0xc9, 0xff, 0x02, 0xc8, - 0x29, 0x0a, 0x0a, 0x08, 0x90, 0x09, 0x4f, 0x00, 0x02, 0xdc, 0x55, 0x04, 0x31, 0xa6, 0x00, 0xb8, - 0x2c, 0x00, 0x05, 0xb8, 0x78, 0x05, 0x8c, 0x06, 0x7c, 0xb2, 0x89, 0x80, 0x00, 0x85, 0x4e, 0x0d, - 0x0b, 0x28, 0xb2, 0x87, 0x8f, 0x96, 0x00, 0x0c, 0xe0, 0x78, 0xb4, 0x03, 0xe0, 0x68, 0x00, 0x90, - 0xd3, 0x86, 0x9c, 0x00, 0xc4, 0x87, 0xa1, 0x63, 0x10, 0x1c, 0xd5, 0xd8, 0xbb, 0x8e, 0xfb, 0x9f, - 0xbf, 0xb6, 0x7e, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x3b, 0xf3, 0x28, 0xc3, 0x11, 0x60, 0x12, 0x07, - 0x24, 0x68, 0x2e, 0x12, 0x5b, 0x37, 0xcb, 0x58, 0xab, 0xdb, 0x6f, 0xb6, 0xdf, 0x45, 0xe4, 0x32, - 0x8a, 0x00, 0xab, 0x44, 0xc3, 0x38, 0x4f, 0x4d, 0x3f, 0xfd, 0x98, 0x66, 0x30, 0x01, 0xe2, 0x67, - 0x72, 0x85, 0x41, 0x4a, 0x34, 0x7a, 0xc2, 0x8e, 0x3e, 0x3b, 0x9f, 0xfb, 0x98, 0x80, 0x9f, 0xe8, - 0x20, 0x01, 0x3f, 0xd7, 0xee, 0x21, 0x76, 0x50, 0x0f, 0x01, 0xb6, 0x94, 0xb4, 0xfa, 0xbf, 0x71, - 0x5b, 0xc6, 0x2a, 0x03, 0xf1, 0x7e, 0x79, 0xc5, 0x3f, 0xf6, 0x31, 0x02, 0x10, 0x70, 0xb6, 0x23, - 0x87, 0x1a, 0x87, 0x03, 0xab, 0x51, 0xf8, 0x85, 0xc7, 0x22, 0x03, 0x55, 0x93, 0x9c, 0x01, 0xe8, - 0x00, 0x50, 0x54, 0x68, 0x00, 0x18, 0x43, 0x47, 0x18, 0xa1, 0xf7, 0x8a, 0x98, 0xc5, 0x36, 0x15, - 0x31, 0x8a, 0x1d, 0xf7, 0x70, 0x04, 0xf0, 0x03, 0x04, 0x11, 0x1d, 0x57, 0x1a, 0x00, 0x02, 0x00, - 0x88, 0x70, 0x01, 0xc2, 0x08, 0x84, 0x8a, 0xfa, 0x69, 0xf1, 0x0a, 0x09, 0x9d, 0x4f, 0x46, 0x02, - 0x80, 0x10, 0x28, 0xd0, 0x00, 0x38, 0x86, 0x00, 0x0a, 0xe0, 0x40, 0x04, 0x95, 0x55, 0x51, 0xa0, - 0x00, 0x20, 0x04, 0x87, 0x00, 0x1c, 0x72, 0x85, 0x40, 0x0b, 0x61, 0xd1, 0x54, 0x62, 0x9e, 0xd2, - 0xa8, 0x85, 0x47, 0x17, 0x9a, 0x5d, 0x8a, 0xca, 0x4a, 0x39, 0x41, 0x17, 0xa4, 0x55, 0x8e, 0x53, - 0x90, 0xdf, 0x17, 0x86, 0x5e, 0x8b, 0x16, 0xe3, 0x79, 0x96, 0x6c, 0x5c, 0x9f, 0x62, 0xc8, 0x70, - 0x7b, 0xe0, 0xd7, 0x62, 0xc8, 0x20, 0x06, 0xb3, 0x55, 0xb3, 0x31, 0xca, 0x00, 0xa6, 0xf3, 0x60, - 0xa5, 0x40, 0xd7, 0xf0, 0x8a, 0x81, 0x30, 0x39, 0x29, 0x4e, 0x34, 0xd3, 0x4f, 0xf8, 0x75, 0x10, - 0x00, 0x93, 0xba, 0x63, 0x66, 0x2f, 0xbd, 0xb6, 0xdb, 0xff, 0x8b, 0x81, 0x52, 0xfb, 0x7c, 0x24, - 0x48, 0x16, 0x6b, 0x60, 0x4e, 0xcc, 0xd3, 0xd3, 0xed, 0xc3, 0xb8, 0x06, 0x8e, 0x83, 0xd3, 0x3f, - 0xfd, 0xb6, 0xdb, 0x6f, 0xc4, 0x52, 0x15, 0xf4, 0xd3, 0xdb, 0x6e, 0x32, 0x70, 0xd3, 0x2e, 0x87, - 0xfc, 0x66, 0x6e, 0x55, 0x63, 0x89, 0x2d, 0x7d, 0x8c, 0x56, 0xf2, 0xc7, 0x2a, 0x3f, 0x63, 0x09, - 0x6c, 0xab, 0x31, 0xc4, 0xb0, 0x5d, 0x88, 0x52, 0x11, 0x8a, 0x24, 0x7b, 0xd1, 0x8a, 0xa7, 0x51, - 0xc0, 0xf0, 0x03, 0x84, 0x2e, 0x68, 0x39, 0x7d, 0x47, 0x27, 0xe2, 0x07, 0xc4, 0x3c, 0x1a, 0x00, - 0x10, 0x22, 0x01, 0xe2, 0xf1, 0x7b, 0xc5, 0x70, 0xf3, 0x30, 0x08, 0x63, 0x29, 0x8f, 0xdd, 0x76, - 0xfb, 0xdf, 0xfd, 0x53, 0xfd, 0x6b, 0x84, 0xd9, 0x80, 0x40, 0xa6, 0x07, 0x11, 0x4f, 0xab, 0xd0, - 0xa0, 0xfa, 0x15, 0x44, 0xa8, 0x81, 0xcd, 0x08, 0xe6, 0x85, 0x49, 0x09, 0x21, 0x0b, 0x90, 0xe0, - 0x0d, 0x2a, 0x43, 0x7d, 0x16, 0x9e, 0xaf, 0x5d, 0xfe, 0x73, 0x09, 0xc3, 0x0f, 0xa7, 0xc4, 0x20, - 0x89, 0xb2, 0x31, 0x4d, 0xfb, 0x10, 0x88, 0x51, 0xfc, 0x1c, 0x46, 0x84, 0x9d, 0xb8, 0x9f, 0x2c, - 0xc3, 0xf1, 0x2b, 0x39, 0x23, 0xc6, 0xe5, 0x98, 0x5c, 0x2a, 0x5d, 0x94, 0x9a, 0x95, 0x8f, 0xc5, - 0x20, 0x0d, 0x4a, 0x40, 0x00, 0xfc, 0x0d, 0x09, 0x03, 0xa7, 0xfb, 0xb6, 0xf8, 0x0c, 0x80, 0x08, - 0x00, 0xd2, 0xa6, 0xd4, 0xd0, 0x04, 0xfa, 0xf1, 0x8c, 0x78, 0xc4, 0x54, 0x9f, 0x3b, 0x15, 0xdb, - 0x03, 0xb9, 0x28, 0xc1, 0x41, 0x61, 0xc9, 0x70, 0x02, 0xe4, 0x21, 0x82, 0xec, 0x60, 0x21, 0x52, - 0x7c, 0x00, 0x08, 0x63, 0x3b, 0x41, 0x60, 0xc5, 0x60, 0x08, 0x02, 0x1c, 0xc0, 0x3f, 0x83, 0xfe, - 0x9e, 0x5f, 0x1a, 0xc7, 0x82, 0x94, 0x64, 0x9b, 0x84, 0x5e, 0xc7, 0x32, 0x02, 0x35, 0x8b, 0x67, - 0x61, 0x68, 0xe0, 0x00, 0xe1, 0x52, 0x0b, 0xfa, 0x9c, 0x29, 0x47, 0x9a, 0x2a, 0x7f, 0xf0, 0x63, - 0xf0, 0x65, 0x19, 0x40, 0x55, 0x4b, 0x11, 0xf7, 0xd6, 0x1a, 0x24, 0x00, 0x39, 0x93, 0x04, 0x73, - 0x9b, 0x8f, 0x24, 0x10, 0x7c, 0x27, 0x15, 0x8d, 0xf5, 0x37, 0x54, 0x1e, 0xb8, 0xf5, 0xc7, 0xaf, - 0x4c, 0x1e, 0xb8, 0xf5, 0xd9, 0xc7, 0xaf, 0xfa, 0x50, 0x8e, 0x20, 0x6c, 0x13, 0x22, 0xeb, 0x08, - 0xc4, 0xee, 0x39, 0x63, 0x83, 0xb1, 0x8b, 0x7c, 0x62, 0xdf, 0x18, 0x88, 0x25, 0xc7, 0xc6, 0x28, - 0x87, 0xb6, 0x31, 0x46, 0x8b, 0x36, 0xc6, 0x28, 0x71, 0x3f, 0xdb, 0xe3, 0x11, 0x41, 0xf6, 0x0e, - 0xec, 0x62, 0x20, 0x7c, 0xf3, 0xe3, 0x14, 0xd8, 0xd8, 0xc5, 0x1d, 0xcd, 0xf1, 0xca, 0x15, 0xb6, - 0x36, 0x31, 0x4d, 0xff, 0x8e, 0x52, 0x15, 0x6c, 0x24, 0x82, 0x20, 0xe4, 0xb1, 0x1d, 0xfa, 0x69, - 0xa6, 0x9c, 0x4a, 0x18, 0x0e, 0xac, 0x8b, 0x8c, 0x05, 0x08, 0x73, 0xa1, 0xd8, 0xda, 0x8e, 0x50, - 0xa0, 0xf4, 0x6c, 0x61, 0x20, 0xed, 0xce, 0xe3, 0x18, 0x42, 0x81, 0xde, 0x57, 0xc5, 0x92, 0x1d, - 0x65, 0x4b, 0x18, 0xa0, 0x31, 0x1d, 0x32, 0xf1, 0x26, 0xa3, 0x08, 0x60, 0x07, 0xab, 0x73, 0xa1, - 0x2a, 0x8c, 0x50, 0xab, 0x2d, 0x98, 0xc5, 0x00, 0xc6, 0x05, 0x49, 0x42, 0x35, 0x51, 0xa8, 0xa0, - 0x7f, 0x66, 0x8b, 0x94, 0x76, 0x0b, 0xb9, 0xc3, 0x47, 0xb1, 0x84, 0x82, 0xe7, 0xa1, 0xf1, 0x64, - 0x82, 0xca, 0x4d, 0x53, 0x28, 0x71, 0x40, 0x18, 0x7d, 0xe8, 0xfb, 0xeb, 0xe6, 0xff, 0xf8, 0x0b, - 0x28, 0x7f, 0x6e, 0x12, 0x98, 0x10, 0xab, 0xf5, 0x23, 0xaa, 0x74, 0xdf, 0xe3, 0x08, 0x52, 0x11, - 0xa2, 0x5a, 0x8c, 0x24, 0x99, 0x96, 0x39, 0x59, 0xa5, 0x51, 0x0a, 0x41, 0x98, 0xe2, 0x14, 0x58, - 0x3c, 0xd8, 0x85, 0x58, 0xa2, 0x47, 0xa5, 0x45, 0x29, 0x29, 0x10, 0xb8, 0xc5, 0x10, 0x92, 0xec, - 0x36, 0xc2, 0x40, 0x06, 0xb8, 0x76, 0xf2, 0x0c, 0x93, 0xdd, 0x75, 0x57, 0xea, 0xaa, 0xa2, 0xc8, - 0x33, 0xd6, 0xb7, 0xbe, 0x1b, 0x70, 0x12, 0x83, 0x63, 0xa1, 0x72, 0x27, 0x44, 0xf5, 0xaa, 0x27, - 0x44, 0xf1, 0x78, 0xba, 0xfa, 0xd7, 0x09, 0xb8, 0x14, 0x13, 0x87, 0x52, 0xe5, 0xdf, 0xe5, 0x85, - 0xb0, 0xfc, 0x64, 0x2a, 0x4c, 0x1c, 0x76, 0x31, 0x41, 0x37, 0xa7, 0x93, 0x61, 0xc4, 0x30, 0x00, - 0x6d, 0x6e, 0xbb, 0x31, 0x1f, 0xf7, 0xaf, 0x9f, 0xc7, 0xf1, 0xee, 0xb3, 0x9c, 0xe3, 0xc0, 0xf4, - 0x65, 0x3d, 0x7f, 0x06, 0x02, 0x46, 0x8c, 0x38, 0x03, 0xd9, 0xa7, 0x07, 0x96, 0xe5, 0xbc, 0xec, - 0xe7, 0x07, 0xd9, 0x49, 0x29, 0xc3, 0x97, 0x1e, 0x3c, 0x10, 0x38, 0x12, 0x3e, 0x81, 0x10, 0xa0, - 0x53, 0xfd, 0x72, 0x78, 0x69, 0x27, 0x1b, 0x09, 0x84, 0x3a, 0xc7, 0x47, 0xe2, 0x5b, 0x11, 0x27, - 0x1c, 0xa1, 0x70, 0x0a, 0x0e, 0xc2, 0xd0, 0x80, 0x00, 0x48, 0x5d, 0x8e, 0xaa, 0x76, 0x0d, 0xc2, - 0x59, 0x71, 0xfc, 0xff, 0x9f, 0x8d, 0xf1, 0x51, 0x3e, 0x2a, 0x27, 0xde, 0x00, 0xae, 0x40, 0x34, - 0x21, 0x48, 0x5c, 0x00, 0x04, 0x00, 0x54, 0x38, 0x2a, 0x2a, 0x87, 0x05, 0x45, 0x5a, 0xfa, 0xae, - 0xaa, 0xaa, 0xaa, 0xa3, 0x80, 0x63, 0x83, 0x8d, 0x61, 0x70, 0x35, 0xee, 0x91, 0x27, 0x8c, 0x52, - 0xf6, 0xc4, 0x2e, 0x29, 0x04, 0x41, 0xc9, 0x64, 0x6a, 0x09, 0x01, 0x8e, 0xbb, 0xb0, 0xe2, 0x14, - 0x00, 0x51, 0xaf, 0x81, 0xf1, 0xb7, 0xef, 0xdb, 0x6f, 0xfc, 0x0e, 0x63, 0x69, 0xd3, 0xf8, 0x40, - 0x90, 0x27, 0x72, 0xa4, 0xf2, 0x6e, 0xdb, 0x7f, 0x1b, 0x82, 0x61, 0x1e, 0xbd, 0x3c, 0xf8, 0xd6, - 0x2c, 0x55, 0x0e, 0xd8, 0xcc, 0xdf, 0xb1, 0x8f, 0xec, 0x42, 0xe3, 0x94, 0x44, 0x60, 0xfb, 0x14, - 0xa1, 0xbc, 0x91, 0x0a, 0x4c, 0x88, 0x47, 0x26, 0x44, 0x2e, 0x31, 0x0d, 0x07, 0x25, 0x83, 0x8d, - 0x89, 0x84, 0x00, 0xc6, 0x7d, 0x18, 0xcc, 0x09, 0x1e, 0xa1, 0x2a, 0x8e, 0x24, 0x0b, 0xac, 0x0a, - 0x9c, 0x58, 0xc1, 0x51, 0x8a, 0x04, 0xb7, 0xc9, 0x72, 0x3e, 0x18, 0x45, 0x00, 0x79, 0xa9, 0x8a, - 0xe3, 0xff, 0xd3, 0x4f, 0x3a, 0x11, 0x6a, 0x35, 0x42, 0xf8, 0xaf, 0x8c, 0xe9, 0x94, 0x42, 0x85, - 0x16, 0x88, 0x85, 0xc4, 0x12, 0x1c, 0xf4, 0x71, 0x20, 0xba, 0xe1, 0x36, 0xcf, 0x81, 0xfe, 0xb1, - 0x6a, 0x0a, 0x16, 0x98, 0x8e, 0x07, 0x18, 0x8e, 0x19, 0x78, 0x7d, 0x8c, 0x46, 0x03, 0xd8, 0x59, - 0x51, 0xdc, 0x22, 0xcc, 0x01, 0x3e, 0xdd, 0xcb, 0xc0, 0x42, 0x62, 0xcb, 0xdf, 0xf1, 0x8c, 0xa0, - 0xd6, 0xf2, 0x3b, 0x88, 0xc9, 0x91, 0x12, 0x90, 0x94, 0x62, 0x87, 0x7d, 0xd8, 0x85, 0xc4, 0x29, - 0xb2, 0x21, 0x43, 0xbe, 0x88, 0x50, 0xdf, 0xa3, 0x24, 0x3e, 0x76, 0x1b, 0x84, 0x00, 0x18, 0x5c, - 0x91, 0x8c, 0x9d, 0x79, 0xef, 0xf7, 0x77, 0x7b, 0xde, 0x2a, 0xea, 0xfb, 0xc2, 0xf8, 0x01, 0x9d, - 0x09, 0x65, 0xf0, 0x42, 0x32, 0x73, 0x42, 0xd4, 0xd0, 0x57, 0x40, 0xfc, 0x2c, 0xf3, 0x02, 0xdc, - 0x4e, 0x11, 0x38, 0x64, 0xf8, 0x5c, 0x90, 0x04, 0x92, 0xb3, 0x30, 0xa1, 0x00, 0xa7, 0x93, 0x3b, - 0x9c, 0x79, 0xe3, 0x0f, 0x2c, 0x33, 0xc0, 0x60, 0x58, 0x19, 0x60, 0x0f, 0xd1, 0x8a, 0x8e, 0x20, - 0x54, 0x2a, 0x05, 0x96, 0x6c, 0x72, 0x21, 0xbf, 0x61, 0xb2, 0x04, 0x80, 0x00, 0xf4, 0x62, 0xa6, - 0x70, 0xb2, 0x40, 0x43, 0xab, 0xde, 0xac, 0xe2, 0x3c, 0x7d, 0xf8, 0x8f, 0x10, 0x7c, 0x67, 0x1f, - 0x19, 0x46, 0xf7, 0xfc, 0x08, 0x00, 0xe0, 0x28, 0x51, 0xc8, 0x5f, 0x3b, 0xcb, 0xc5, 0x1d, 0x96, - 0x33, 0xf6, 0x72, 0xc7, 0x8a, 0xa1, 0x41, 0xbf, 0x8a, 0xa7, 0x60, 0x24, 0x00, 0x09, 0x46, 0x80, - 0x01, 0xf5, 0x0d, 0x31, 0x20, 0x4f, 0xfa, 0x79, 0xff, 0xfd, 0xbf, 0x98, 0x59, 0x8c, 0x00, 0x0f, - 0x85, 0xc8, 0x17, 0xe7, 0xc8, 0x60, 0xb5, 0x5e, 0xbf, 0xbf, 0xf6, 0xc0, 0x7c, 0x1a, 0x8c, 0x32, - 0x8c, 0x50, 0x01, 0xf8, 0x87, 0xb8, 0xf8, 0xfe, 0x1a, 0xc0, 0x05, 0xc8, 0x12, 0x9d, 0x14, 0xf8, - 0x4e, 0x12, 0xa2, 0x72, 0x41, 0xd0, 0x63, 0x89, 0xde, 0x67, 0x07, 0xae, 0xce, 0xce, 0xec, 0x7e, - 0xb3, 0x87, 0xae, 0xce, 0xa3, 0xbf, 0x7c, 0x73, 0x09, 0x98, 0x1e, 0xb3, 0xb1, 0xc4, 0x28, 0xb0, - 0x69, 0xf1, 0x88, 0x8c, 0x19, 0x53, 0x08, 0x23, 0x00, 0x3c, 0x19, 0x16, 0xea, 0x00, 0x45, 0xe9, - 0xfc, 0x62, 0x84, 0x5e, 0x92, 0x65, 0x0f, 0x28, 0x15, 0x8f, 0x6b, 0x3f, 0xff, 0x78, 0x3f, 0x95, - 0x56, 0x6f, 0xf1, 0xb1, 0xe1, 0xe0, 0x00, 0x21, 0xc1, 0x0b, 0x1a, 0x95, 0x45, 0x90, 0xdd, 0x63, - 0x54, 0x35, 0xe2, 0x2f, 0x09, 0x4c, 0x0d, 0x66, 0x52, 0xe9, 0xa7, 0xf1, 0x92, 0x81, 0xeb, 0x64, - 0x67, 0x18, 0xc4, 0x50, 0xc3, 0x2c, 0x64, 0x75, 0x10, 0xa0, 0x95, 0xea, 0x23, 0x14, 0x31, 0x96, - 0xec, 0x42, 0x28, 0x3d, 0x64, 0x52, 0x8c, 0x67, 0x10, 0xb8, 0x85, 0xc6, 0x10, 0x98, 0xb1, 0x72, - 0x01, 0x61, 0xc0, 0x2b, 0x8a, 0x3b, 0x8e, 0x65, 0x00, 0x97, 0xea, 0x10, 0xe9, 0x1c, 0x1c, 0x5e, - 0x01, 0x0f, 0xd4, 0xc7, 0x47, 0x47, 0x71, 0xc8, 0xa0, 0xb2, 0x0e, 0x24, 0x89, 0x4a, 0x34, 0x84, - 0x0f, 0xbd, 0xd8, 0xb4, 0x50, 0x5a, 0x0f, 0x91, 0xf8, 0xe4, 0x40, 0xef, 0x9c, 0xc5, 0x67, 0x23, - 0x19, 0x28, 0xee, 0x12, 0x28, 0x61, 0x0d, 0x07, 0x01, 0x2e, 0x6d, 0xb7, 0xb6, 0xdf, 0xfa, 0x39, - 0xc4, 0xf8, 0xb4, 0x14, 0x06, 0x4d, 0x79, 0xb1, 0x64, 0x82, 0xc9, 0xac, 0x1d, 0xd8, 0xe7, 0x07, - 0x6f, 0xbe, 0x39, 0xc4, 0x15, 0x03, 0xfe, 0x12, 0x70, 0x62, 0x8c, 0x86, 0x39, 0x5a, 0xfe, 0x28, - 0x85, 0x0a, 0x5b, 0x23, 0x14, 0xa4, 0x9b, 0x12, 0x8a, 0x0e, 0xac, 0x88, 0x44, 0x0f, 0x9e, 0x88, - 0x5c, 0x42, 0x28, 0xa7, 0x18, 0x88, 0x1b, 0xf0, 0xed, 0x88, 0x5c, 0x42, 0xe1, 0xc8, 0x40, 0x00, - 0x43, 0x32, 0x6c, 0x4e, 0x8a, 0x23, 0x7f, 0xbd, 0xe1, 0x5f, 0x4e, 0x17, 0x3d, 0xf2, 0x73, 0x8b, - 0xba, 0x5d, 0x7b, 0xdf, 0x03, 0xc0, 0x0c, 0x90, 0xa4, 0xe0, 0x58, 0x3f, 0xce, 0x07, 0xd6, 0x98, - 0xe4, 0x01, 0xf2, 0xf1, 0xe0, 0x3e, 0x4c, 0x2a, 0x78, 0xf5, 0x8b, 0x51, 0x6c, 0xe0, 0x1e, 0xd3, - 0xf0, 0x68, 0x00, 0x08, 0x00, 0xc4, 0x80, 0x02, 0xc3, 0x73, 0x00, 0x2f, 0x6c, 0x78, 0xce, 0x21, - 0x45, 0xb3, 0x8d, 0x5f, 0xf6, 0x39, 0x75, 0x51, 0x1f, 0x7b, 0xae, 0xc3, 0xe1, 0xeb, 0xb0, 0x78, - 0x1e, 0x54, 0xbc, 0x15, 0xeb, 0xeb, 0xa6, 0x9f, 0xc3, 0x88, 0xa0, 0x01, 0x07, 0xc7, 0xde, 0x88, - 0x07, 0xc4, 0xff, 0xac, 0x43, 0xa0, 0xb7, 0x19, 0x40, 0xd5, 0x10, 0xe8, 0x87, 0x4b, 0x0b, 0x2c, - 0x2d, 0x7f, 0x6d, 0xb8, 0x63, 0x00, 0x3a, 0xf4, 0x72, 0x83, 0x5d, 0x7f, 0xdf, 0xe5, 0xaa, 0x64, - 0xe5, 0xac, 0x75, 0x72, 0xd8, 0x6a, 0x40, 0x02, 0x19, 0xd6, 0xc2, 0x37, 0x31, 0xff, 0xde, 0x56, - 0x4f, 0x2f, 0xb9, 0x3f, 0xdc, 0xfd, 0xcf, 0x79, 0xdb, 0x0b, 0xa1, 0x20, 0x02, 0x92, 0x3d, 0xa1, - 0x42, 0x8a, 0xe2, 0xbb, 0xdf, 0x7d, 0xd1, 0x3b, 0xb6, 0x7e, 0x19, 0x8d, 0xa9, 0x13, 0x0d, 0x31, - 0x40, 0x00, 0x59, 0x60, 0x61, 0x14, 0xb9, 0x91, 0xec, 0x94, 0x7e, 0x7d, 0xf0, 0x91, 0xf8, 0x0a, - 0x02, 0xb8, 0xab, 0xbf, 0x1c, 0x18, 0x0a, 0x98, 0x15, 0x05, 0x71, 0x7f, 0xc7, 0xbf, 0x00, 0x57, - 0x20, 0x1c, 0x10, 0xa0, 0x91, 0x0a, 0x06, 0x51, 0x6c, 0x3f, 0x3c, 0xc5, 0x0c, 0xb3, 0x14, 0xc5, - 0x0c, 0x50, 0xc5, 0x31, 0x43, 0x12, 0x00, 0x70, 0xf0, 0x0e, 0x0a, 0x18, 0xa6, 0x58, 0x18, 0xa1, - 0x87, 0xc5, 0x1a, 0x0a, 0x8d, 0x63, 0xc7, 0x11, 0x67, 0xf1, 0x0a, 0x4c, 0x8c, 0x5f, 0x63, 0x11, - 0x81, 0x12, 0x32, 0x7c, 0x06, 0x9d, 0x84, 0x08, 0x24, 0x04, 0x8e, 0x51, 0x47, 0x83, 0x46, 0xb4, - 0xfe, 0xdc, 0xff, 0xe3, 0xb0, 0x27, 0xdc, 0x8d, 0x50, 0x28, 0x60, 0xae, 0x38, 0x84, 0x01, 0xfa, - 0xd0, 0xd2, 0xe2, 0xd8, 0x90, 0xdf, 0x91, 0xdc, 0x72, 0xb1, 0x23, 0x9c, 0x69, 0x08, 0x1e, 0xf1, - 0x53, 0x16, 0x88, 0x07, 0xd2, 0x9d, 0x0d, 0x38, 0xd2, 0x14, 0x31, 0xe1, 0x82, 0xac, 0x44, 0x82, - 0xaa, 0x31, 0x94, 0x38, 0xf0, 0xe3, 0x62, 0x17, 0x10, 0xb9, 0xd4, 0xdb, 0x10, 0xb8, 0x85, 0xc5, - 0xc2, 0x34, 0x73, 0x8b, 0x8c, 0x0f, 0x9e, 0x47, 0x1c, 0x42, 0xe1, 0x76, 0x34, 0x0e, 0x50, 0x34, - 0x1f, 0x5a, 0xfd, 0x6a, 0x8e, 0x71, 0x68, 0x60, 0x3d, 0xe8, 0xe3, 0x63, 0x09, 0xf6, 0x33, 0x99, - 0xb1, 0x9f, 0xb3, 0xae, 0x75, 0x07, 0xbd, 0x9d, 0x10, 0x0d, 0xcf, 0xa3, 0x94, 0x26, 0x8e, 0x00, - 0x99, 0x46, 0x90, 0xa1, 0x81, 0xef, 0x31, 0x8a, 0x0e, 0xbc, 0xa3, 0xf1, 0xcc, 0x40, 0x31, 0x24, - 0x2b, 0xe2, 0xd9, 0x42, 0xfc, 0x92, 0xe1, 0x02, 0x40, 0xc7, 0xf8, 0x63, 0x1d, 0x7e, 0xee, 0xf1, - 0x6c, 0xc0, 0x98, 0x14, 0xa8, 0x8b, 0x1c, 0x43, 0x94, 0x84, 0xe9, 0x88, 0x21, 0x07, 0x99, 0x47, - 0x28, 0x0e, 0xcc, 0xa5, 0x86, 0x0a, 0x62, 0x49, 0x07, 0x12, 0xc8, 0xe4, 0x70, 0x3d, 0x6c, 0xf2, - 0xc5, 0x12, 0x42, 0x71, 0xca, 0x30, 0xcb, 0xb0, 0xe2, 0x1c, 0x00, 0x36, 0xcc, 0x49, 0x95, 0xd9, - 0x1c, 0xdd, 0xaf, 0xfe, 0x0d, 0xdd, 0x1c, 0x53, 0xba, 0xce, 0x02, 0x20, 0x1f, 0x4d, 0x3e, 0xdc, - 0x34, 0x43, 0x00, 0x0d, 0x53, 0xc5, 0xd5, 0xc4, 0x65, 0xf3, 0xdb, 0x3b, 0xd5, 0x94, 0x67, 0x16, - 0xf9, 0x39, 0x77, 0x57, 0xc3, 0x2e, 0x00, 0x33, 0xe5, 0x23, 0x3d, 0x20, 0x30, 0xd6, 0x96, 0x52, - 0xbe, 0xdd, 0x78, 0xa5, 0x8a, 0x5a, 0xc5, 0xb8, 0xac, 0x4b, 0xcb, 0x36, 0x16, 0x50, 0x05, 0xf5, - 0x8d, 0x92, 0xd9, 0x41, 0x55, 0xdf, 0xf5, 0x75, 0xf8, 0x31, 0xf8, 0xb1, 0x67, 0xe0, 0xe3, 0xf7, - 0xf8, 0xfa, 0xbc, 0x30, 0xe0, 0x0f, 0xe6, 0x32, 0x46, 0x53, 0x8c, 0x43, 0xcd, 0xd7, 0xbc, 0xda, - 0x9a, 0x69, 0x83, 0xee, 0x3e, 0xed, 0xe4, 0xea, 0xce, 0xce, 0xce, 0xc6, 0x1a, 0x24, 0x00, 0x67, - 0x0f, 0xae, 0x44, 0x8f, 0x54, 0xf4, 0xd9, 0xd3, 0xfe, 0xde, 0x64, 0xe0, 0x68, 0x06, 0x03, 0x60, - 0xf1, 0x72, 0xb0, 0x20, 0x0f, 0x6f, 0x42, 0x1e, 0x3c, 0x03, 0xc9, 0x45, 0x47, 0x41, 0x71, 0x69, - 0x29, 0x63, 0xcf, 0x0e, 0x1c, 0x3d, 0xc2, 0xaa, 0xc3, 0xb8, 0x2f, 0x33, 0x05, 0x54, 0x06, 0x60, - 0x04, 0x01, 0x1a, 0xb6, 0xdf, 0xc3, 0x53, 0x00, 0x12, 0x73, 0xb7, 0x51, 0x95, 0xf2, 0xd9, 0x59, - 0x3f, 0x46, 0x9e, 0x37, 0xca, 0xf9, 0x55, 0x9f, 0x85, 0xd3, 0x1e, 0x9d, 0x5f, 0x15, 0x5f, 0x5f, - 0x47, 0xc7, 0xa7, 0x67, 0x67, 0x67, 0xec, 0x6b, 0x0c, 0xaa, 0xcb, 0xbf, 0x88, 0x50, 0xdf, 0xa3, - 0x94, 0x20, 0xca, 0x55, 0xe1, 0x04, 0x60, 0x3b, 0x92, 0x87, 0x9d, 0x4d, 0x34, 0xd3, 0xf8, 0xe2, - 0x46, 0x9a, 0x4a, 0x98, 0xcc, 0x11, 0x1c, 0xa8, 0x16, 0x8c, 0x76, 0x1c, 0x54, 0xe6, 0xc7, 0x33, - 0x81, 0xbc, 0x34, 0x1b, 0x16, 0xe0, 0x85, 0x8d, 0x3f, 0x55, 0x8a, 0x50, 0xe3, 0xd1, 0xd2, 0x84, - 0xe3, 0xd6, 0x76, 0x2d, 0x08, 0x08, 0x8e, 0x71, 0x36, 0x39, 0x94, 0x08, 0xb6, 0xd1, 0xaa, 0x49, - 0x9d, 0x14, 0x32, 0xf4, 0x5a, 0x31, 0x70, 0x4a, 0x4c, 0x69, 0x32, 0x2c, 0xc6, 0x2f, 0x3e, 0x32, - 0x58, 0xb9, 0xc6, 0x31, 0x40, 0x47, 0xbe, 0x7e, 0x26, 0x50, 0x82, 0x10, 0x1b, 0xcb, 0x09, 0x34, - 0xa6, 0x9a, 0x69, 0xfc, 0x25, 0x86, 0x98, 0x8e, 0xa7, 0x4f, 0xf1, 0xd1, 0x70, 0x71, 0x9b, 0x17, - 0x1b, 0x1c, 0x00, 0x63, 0x9c, 0xe8, 0x60, 0x3d, 0xe4, 0x76, 0x72, 0x08, 0xed, 0x88, 0x51, 0x12, - 0x18, 0xc4, 0x60, 0xe3, 0xcd, 0x8c, 0x51, 0x5f, 0x32, 0x8c, 0x53, 0xeb, 0x18, 0xa7, 0x31, 0x06, - 0x3a, 0x70, 0xb8, 0x0b, 0x24, 0x7e, 0x39, 0x18, 0xbd, 0xb1, 0xc8, 0xe0, 0xd7, 0x64, 0x8f, 0xce, - 0x88, 0x0e, 0x27, 0xe2, 0xd4, 0x0c, 0x58, 0x2e, 0x05, 0x86, 0x38, 0xe3, 0xb0, 0x83, 0x57, 0x04, - 0x8e, 0x38, 0xe4, 0x43, 0x64, 0x46, 0x2a, 0x39, 0x42, 0xe1, 0xe1, 0x8a, 0x1d, 0xc2, 0x0a, 0x18, - 0x1e, 0x4e, 0x93, 0x4f, 0xf8, 0xc4, 0x40, 0xe8, 0xc5, 0x06, 0x53, 0x18, 0xa7, 0x8c, 0xb1, 0xaa, - 0x07, 0xad, 0x44, 0x5a, 0x1b, 0x51, 0x84, 0x28, 0x1e, 0xd6, 0x42, 0x3d, 0x8d, 0x65, 0x03, 0x59, - 0x77, 0x62, 0x17, 0x0e, 0x47, 0x00, 0x04, 0x56, 0x32, 0xa2, 0x31, 0xd6, 0x31, 0xfe, 0xce, 0x4f, - 0xe4, 0xf8, 0x83, 0xd3, 0x2e, 0xd7, 0xf8, 0x6b, 0x00, 0x49, 0x8c, 0x7c, 0x2a, 0x83, 0x3a, 0x09, - 0x5f, 0x73, 0xfa, 0xdf, 0xeb, 0xba, 0x65, 0xfc, 0xbd, 0x33, 0xc4, 0xd8, 0x69, 0x40, 0x27, 0x15, - 0x30, 0x90, 0xd7, 0x4f, 0xfa, 0xff, 0x58, 0x5d, 0x18, 0x00, 0xd9, 0xa5, 0x90, 0x1a, 0x8e, 0x1f, - 0xc7, 0xee, 0xbe, 0xe4, 0xf1, 0x1f, 0x2c, 0x34, 0xa0, 0x06, 0xfc, 0xac, 0x10, 0xc5, 0xdb, 0x77, - 0xac, 0x9d, 0x3a, 0xd7, 0xf5, 0x86, 0x89, 0x00, 0x14, 0x89, 0xc1, 0xc2, 0x67, 0x1d, 0xc5, 0x73, - 0xc6, 0x9f, 0x6d, 0xcf, 0xdd, 0xdc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfc, 0x7f, 0xc3, 0x11, 0x61, 0x90, - 0x36, 0xc6, 0x9a, 0x76, 0xff, 0xfc, 0x47, 0x1c, 0x26, 0x41, 0x40, 0x21, 0xd3, 0x4f, 0x20, 0x1a, - 0xbb, 0xf9, 0xb5, 0x72, 0xdf, 0x58, 0xaf, 0x7b, 0x88, 0x60, 0x4f, 0x93, 0xc2, 0xec, 0x78, 0xc2, - 0x80, 0x93, 0x24, 0x5d, 0x45, 0xee, 0xdd, 0xe4, 0x5d, 0xf0, 0x2f, 0x77, 0x77, 0x1d, 0x8e, 0xe2, - 0x50, 0xb0, 0xf7, 0xa3, 0x11, 0x81, 0xd5, 0x82, 0x9b, 0x1c, 0x48, 0x5c, 0x22, 0x10, 0x60, 0x00, - 0xc7, 0x71, 0x73, 0x82, 0xd7, 0xc0, 0xb1, 0x40, 0xae, 0x21, 0x18, 0xa4, 0xa3, 0x14, 0x07, 0xc8, - 0x63, 0x4d, 0x8e, 0x24, 0x40, 0x34, 0x41, 0x5c, 0x6c, 0xe1, 0xbf, 0x31, 0x8a, 0x21, 0x87, 0x2b, - 0x8b, 0x9c, 0x3a, 0x00, 0x3c, 0x8e, 0x70, 0xb2, 0x1a, 0x0e, 0x27, 0x9b, 0x7f, 0xfb, 0x7c, 0x71, - 0x02, 0x00, 0x1d, 0xad, 0x9a, 0x47, 0xe2, 0x17, 0x10, 0xf9, 0xfc, 0x62, 0x08, 0xc7, 0x1b, 0x10, - 0xb8, 0xb4, 0x10, 0x2e, 0x91, 0x31, 0xca, 0x18, 0xa0, 0x44, 0x38, 0xe3, 0xa4, 0x2e, 0x7c, 0xc7, - 0x22, 0x84, 0xcf, 0x5c, 0x51, 0x85, 0x47, 0x13, 0x04, 0x3c, 0xc5, 0xe0, 0x69, 0x81, 0xf7, 0x32, - 0x8c, 0x50, 0x31, 0x9f, 0x72, 0x28, 0xc4, 0x50, 0xf0, 0xf2, 0x3f, 0x1c, 0xa1, 0xdc, 0x48, 0x7d, - 0x8c, 0x50, 0x1f, 0x6f, 0xe1, 0xdb, 0x0a, 0x23, 0x7f, 0xf6, 0xdb, 0xf8, 0xbc, 0xda, 0xd8, 0xd2, - 0x1c, 0x3e, 0xf3, 0x67, 0x50, 0xcb, 0xd1, 0x18, 0x69, 0xe8, 0x87, 0xc7, 0x45, 0x02, 0x88, 0xbe, - 0x34, 0x10, 0xe3, 0xb0, 0xc9, 0x46, 0x47, 0x71, 0x84, 0x8c, 0xb3, 0x88, 0xee, 0x34, 0x91, 0xe8, - 0xa3, 0x1e, 0x63, 0x11, 0xc0, 0x4a, 0xd6, 0xdf, 0x99, 0x1f, 0x8c, 0x45, 0x00, 0x7b, 0xb3, 0x9d, - 0x0d, 0x8c, 0x5b, 0xe3, 0x14, 0x1e, 0xbb, 0x63, 0xb0, 0x11, 0x6d, 0x87, 0x39, 0x8b, 0x1c, 0xe2, - 0xc8, 0x63, 0xe5, 0x2e, 0x33, 0x17, 0x7c, 0x61, 0x0f, 0x11, 0xd3, 0x09, 0xc3, 0x80, 0x01, 0x10, - 0x16, 0x6b, 0x20, 0x94, 0x5a, 0x60, 0x41, 0x3a, 0xc4, 0xe1, 0x1a, 0x71, 0xa7, 0x34, 0x38, 0xc1, - 0xf7, 0x07, 0x4b, 0x96, 0x70, 0xa2, 0x80, 0x0e, 0x5d, 0x31, 0x55, 0x75, 0xdc, 0xdf, 0xe2, 0x7a, - 0x6d, 0x77, 0x14, 0x11, 0x8d, 0xdb, 0x0e, 0xeb, 0x87, 0x3f, 0xc3, 0x10, 0xa0, 0x91, 0x40, 0xd3, - 0x14, 0x31, 0x1e, 0x5a, 0x8b, 0xbb, 0x97, 0xa5, 0x8c, 0x38, 0x0f, 0x89, 0x45, 0x55, 0x3a, 0xd0, - 0xc7, 0x00, 0x01, 0x00, 0x68, 0xe7, 0x81, 0x24, 0x18, 0x02, 0xc8, 0x8e, 0x2c, 0xca, 0x3d, 0xf2, - 0x69, 0x61, 0x2e, 0xc8, 0x3c, 0x7d, 0xce, 0x01, 0xe3, 0x80, 0x00, 0x80, 0x34, 0x73, 0x86, 0x94, - 0x05, 0x6b, 0x8b, 0x30, 0x01, 0x81, 0xef, 0xee, 0xf6, 0xdb, 0xf8, 0xfb, 0x0c, 0x28, 0x00, 0xd6, - 0x37, 0xd1, 0x6e, 0x27, 0xad, 0xd3, 0xdb, 0x4d, 0x3b, 0x78, 0x87, 0x62, 0xb6, 0xf8, 0x67, 0x00, - 0x1d, 0xa4, 0xb6, 0x08, 0x44, 0xc6, 0xff, 0x96, 0x9a, 0x7e, 0x0f, 0xfc, 0x6e, 0xf7, 0xbd, 0xb0, - 0xaa, 0x80, 0x1b, 0x2e, 0x46, 0x8c, 0x63, 0x8b, 0xbf, 0x7e, 0x20, 0x18, 0x44, 0x30, 0xf9, 0x7d, - 0xe1, 0x36, 0x40, 0x03, 0x14, 0x88, 0xa0, 0x18, 0xec, 0x60, 0xd6, 0xff, 0xbc, 0x4c, 0x28, 0x31, - 0x5f, 0xef, 0xe3, 0x0e, 0x03, 0xe4, 0xc9, 0x80, 0x50, 0x7f, 0x1b, 0x04, 0xb1, 0xc6, 0x38, 0xe2, - 0xc8, 0x12, 0x0b, 0xd4, 0x60, 0xd8, 0xc7, 0x07, 0xad, 0x1d, 0x8f, 0xc7, 0x32, 0x85, 0xc0, 0x17, - 0x42, 0x39, 0xc6, 0x28, 0x4b, 0x39, 0xe8, 0x6c, 0x72, 0x84, 0xcb, 0xae, 0x4d, 0x8d, 0xc3, 0x7e, - 0x4c, 0xe2, 0x54, 0x37, 0xe8, 0xd2, 0x41, 0x76, 0xe4, 0xd9, 0xf0, 0xdf, 0xa2, 0x30, 0xef, 0xa2, - 0x89, 0x0e, 0x52, 0x53, 0xe1, 0xef, 0x4e, 0xb9, 0xd7, 0x17, 0x97, 0xf6, 0x21, 0x43, 0xbe, 0x89, - 0x7c, 0x62, 0x93, 0x3b, 0x14, 0xa1, 0x61, 0x58, 0xb5, 0x3e, 0xb6, 0x3a, 0x3c, 0x1c, 0x96, 0x08, - 0xa6, 0x38, 0xe2, 0xe3, 0x01, 0x44, 0x1f, 0x0e, 0xc7, 0xe2, 0xd1, 0x00, 0xc7, 0xf8, 0xc9, 0x8c, - 0x66, 0x04, 0x4b, 0x14, 0xc9, 0x04, 0x38, 0xc5, 0x02, 0x8a, 0x15, 0xcc, 0xf8, 0xa2, 0x41, 0xbb, - 0xa3, 0x95, 0x1d, 0xb1, 0xc4, 0x81, 0x22, 0xd8, 0x53, 0xf1, 0x18, 0xe3, 0x14, 0x1d, 0x56, 0xf8, - 0x82, 0x41, 0x89, 0xfa, 0x28, 0x91, 0xb8, 0xb1, 0x4b, 0x8e, 0x50, 0x0f, 0xb2, 0xab, 0x9a, 0x01, - 0x03, 0x08, 0xa8, 0x23, 0x0c, 0x74, 0x37, 0xdb, 0x6d, 0xb6, 0xe3, 0x94, 0x4a, 0x41, 0x6c, 0x24, - 0x85, 0x81, 0xd3, 0x36, 0x48, 0xca, 0xf4, 0xd3, 0x4d, 0x38, 0xc2, 0x4f, 0x63, 0x2a, 0x31, 0x98, - 0x28, 0xc3, 0x2b, 0x36, 0x39, 0x10, 0x32, 0x9f, 0xef, 0xb1, 0x48, 0xa6, 0xd8, 0x92, 0x41, 0xef, - 0xc5, 0x90, 0x81, 0xc7, 0x8b, 0x3e, 0x38, 0x93, 0x90, 0x82, 0x07, 0xb1, 0x78, 0x64, 0xf0, 0xe9, - 0xf0, 0xb9, 0x02, 0xc0, 0x01, 0xcc, 0x88, 0xe1, 0x8a, 0xc4, 0x5a, 0x42, 0x49, 0x6b, 0xdb, 0x6c, - 0xfd, 0xff, 0xc5, 0x67, 0xbc, 0x50, 0x65, 0xb0, 0x11, 0x36, 0x1c, 0x50, 0x02, 0x47, 0x0a, 0xa9, - 0x51, 0xc2, 0x3d, 0xbc, 0x62, 0x9f, 0xfe, 0x2d, 0x64, 0x71, 0xaf, 0x6c, 0x8c, 0x06, 0x57, 0x96, - 0x0b, 0xd0, 0x77, 0xe8, 0xd9, 0x1a, 0xeb, 0x06, 0x8b, 0x44, 0x1e, 0x59, 0xb6, 0xb2, 0x46, 0xe3, - 0x6d, 0x81, 0x0c, 0x05, 0x84, 0x46, 0xc5, 0xd0, 0x2c, 0xac, 0x83, 0xc2, 0x6f, 0xef, 0xc4, 0xcb, - 0xfb, 0xc3, 0x44, 0x80, 0xbe, 0x44, 0x33, 0xc4, 0x58, 0x12, 0xb8, 0xf8, 0xf2, 0x51, 0xed, 0x8d, - 0xae, 0x00, 0x12, 0xa9, 0xed, 0x09, 0x19, 0x69, 0x87, 0x36, 0x95, 0xdd, 0x52, 0x9d, 0xc7, 0x29, - 0x53, 0x9a, 0xe4, 0x3e, 0x69, 0xde, 0xca, 0x58, 0xf6, 0x38, 0x52, 0x89, 0xa0, 0x3b, 0xe7, 0xc3, - 0x6e, 0x00, 0x23, 0xa4, 0xd8, 0x43, 0x4c, 0xa0, 0xa5, 0xbc, 0xdc, 0xa9, 0x3a, 0xf3, 0x17, 0x2f, - 0x3b, 0xcb, 0xfb, 0xe9, 0x3b, 0xfe, 0x16, 0x70, 0x00, 0x48, 0xc8, 0xc3, 0x94, 0x4a, 0xb6, 0x66, - 0xdb, 0x6f, 0xaa, 0x6e, 0x04, 0xc6, 0xd8, 0x6a, 0x60, 0x0b, 0xc9, 0x5a, 0x9a, 0x27, 0x87, 0x13, - 0x99, 0x21, 0x19, 0xe5, 0xb0, 0x46, 0x45, 0xbd, 0xb0, 0x60, 0x01, 0x20, 0x1b, 0x1d, 0x6a, 0x56, - 0xda, 0x0b, 0x80, 0x17, 0x2b, 0x05, 0x80, 0xbc, 0x83, 0xe8, 0xb0, 0x00, 0x2f, 0xb2, 0x00, 0xa4, - 0x83, 0xb0, 0x06, 0xa0, 0xd2, 0x85, 0x51, 0x90, 0xb0, 0x97, 0x09, 0x46, 0x81, 0x32, 0xfb, 0x1c, - 0x15, 0x07, 0xf3, 0x5b, 0x50, 0x74, 0x2b, 0xf1, 0x83, 0x80, 0x84, 0x83, 0x8b, 0xc4, 0xbc, 0x4b, - 0xf7, 0x7b, 0xc2, 0xec, 0x48, 0x03, 0x91, 0xde, 0x2b, 0x20, 0xd0, 0x6f, 0xd3, 0xf9, 0xfe, 0xb7, - 0x99, 0x4b, 0x3f, 0xa6, 0xde, 0xef, 0x1e, 0x17, 0xf2, 0xde, 0xe9, 0x30, 0x9e, 0x01, 0x4f, 0x02, - 0xb1, 0xab, 0xad, 0x75, 0xaa, 0xd7, 0x0d, 0x45, 0x00, 0x01, 0x7a, 0x28, 0x69, 0xad, 0x31, 0x5f, - 0xdf, 0xf6, 0x4a, 0x70, 0xbc, 0xa9, 0xe1, 0x3e, 0x20, 0x7c, 0x8e, 0xf4, 0x7d, 0x8b, 0x61, 0x90, - 0xc9, 0xe1, 0x23, 0x4c, 0x5b, 0x87, 0x1e, 0x2d, 0x8b, 0x21, 0x41, 0xd7, 0xf5, 0x9d, 0x90, 0x0c, - 0x75, 0xd1, 0x98, 0x69, 0x3f, 0xda, 0x55, 0x11, 0x20, 0x65, 0x96, 0x88, 0x52, 0xe4, 0x62, 0x28, - 0x77, 0xc9, 0xd4, 0x71, 0x0a, 0x4c, 0x76, 0x2e, 0x36, 0x8e, 0x39, 0xd8, 0xc0, 0x7b, 0xf3, 0xb8, - 0xce, 0x51, 0x3e, 0x23, 0xcf, 0x83, 0xd7, 0x8b, 0x5a, 0x3f, 0x3a, 0x83, 0xab, 0xce, 0xe1, 0xc7, - 0xa7, 0x50, 0xcb, 0xd1, 0x0f, 0x8c, 0x43, 0x63, 0x9b, 0x3f, 0x8b, 0x84, 0x00, 0x47, 0xbc, 0x51, - 0xe7, 0xc7, 0x23, 0x05, 0x4f, 0x88, 0x84, 0xb5, 0x1d, 0x82, 0x5c, 0xe2, 0x48, 0xbd, 0x45, 0xce, - 0x18, 0x1e, 0x4d, 0x8c, 0x45, 0x0d, 0xf9, 0x1f, 0x8b, 0x62, 0x80, 0x3b, 0xb3, 0x23, 0x9c, 0x63, - 0x88, 0x42, 0x42, 0x82, 0xb1, 0x6a, 0x1e, 0x1e, 0x47, 0x38, 0x85, 0x2e, 0x46, 0xe7, 0xf0, 0x63, - 0x30, 0xe3, 0xc5, 0x44, 0x51, 0x8a, 0x02, 0x0d, 0x41, 0xbf, 0x3d, 0x8c, 0x50, 0x31, 0x9f, 0x36, - 0x77, 0x2c, 0xa2, 0xdc, 0x38, 0xf5, 0x67, 0x50, 0xcb, 0xd1, 0x0a, 0x1a, 0x7a, 0x28, 0x93, 0x6c, - 0x43, 0xe2, 0x5c, 0x37, 0xe8, 0x45, 0x8f, 0x89, 0x3f, 0x55, 0x55, 0x7b, 0xe2, 0x10, 0xc0, 0xdf, - 0xa1, 0xb2, 0x0e, 0x00, 0x15, 0xd2, 0xac, 0xd9, 0x11, 0x8b, 0xff, 0xe3, 0x1c, 0x0d, 0xae, 0x6f, - 0x30, 0xbd, 0x7e, 0x19, 0xc0, 0x03, 0x4a, 0x2e, 0x84, 0xa9, 0x79, 0x2f, 0xff, 0xaa, 0xed, 0x9b, - 0xb6, 0xef, 0xfa, 0xd4, 0x07, 0x58, 0x70, 0x82, 0x80, 0x0f, 0x51, 0x23, 0xe8, 0x0b, 0x87, 0x40, - 0xdf, 0xb6, 0x11, 0x22, 0x32, 0xb7, 0x65, 0x9f, 0xa1, 0x7a, 0xe0, 0xa8, 0x0c, 0x19, 0xe0, 0x2f, - 0xf9, 0x69, 0x1f, 0xe6, 0x69, 0xf6, 0xeb, 0x0e, 0x60, 0x5e, 0x18, 0xaa, 0x5a, 0x70, 0xb1, 0x33, - 0x3d, 0xcf, 0x5b, 0x34, 0x4c, 0xc9, 0x0f, 0x7b, 0x21, 0x01, 0xd9, 0x1e, 0x05, 0x90, 0x45, 0x14, - 0x39, 0x16, 0x51, 0xc0, 0x33, 0x8e, 0x01, 0xdd, 0xd5, 0x1f, 0x7d, 0x4e, 0xf1, 0xeb, 0x97, 0x97, - 0xd3, 0xaf, 0xdf, 0x0d, 0xb8, 0x0c, 0x06, 0x62, 0x87, 0x15, 0xbd, 0x76, 0xf7, 0xf7, 0x15, 0xb8, - 0xaf, 0xd7, 0x5f, 0xc3, 0x0a, 0x00, 0x0f, 0x71, 0x57, 0x70, 0x12, 0x94, 0xaf, 0xff, 0xab, 0xa2, - 0x00, 0x77, 0x11, 0xa8, 0x33, 0x5d, 0x0b, 0x0d, 0xb0, 0xb6, 0x2d, 0x9d, 0xf2, 0xd8, 0xa8, 0xc3, - 0x7e, 0x77, 0x05, 0x20, 0x10, 0x91, 0xb1, 0xa2, 0x73, 0xc0, 0x00, 0x40, 0x16, 0x42, 0x23, 0x83, - 0xa7, 0x82, 0x29, 0x43, 0xe1, 0x6c, 0xf8, 0xc3, 0x6b, 0xe9, 0x1b, 0x37, 0x59, 0x56, 0x52, 0x10, - 0x3b, 0x98, 0x33, 0x98, 0xf8, 0x0f, 0x66, 0xf9, 0x91, 0x01, 0x54, 0x81, 0xa6, 0xae, 0x5f, 0x96, - 0x20, 0x58, 0x70, 0x1e, 0x1e, 0x00, 0x14, 0x18, 0x09, 0x75, 0x27, 0xd4, 0x1b, 0x48, 0x04, 0x7a, - 0xbc, 0x42, 0xec, 0xe0, 0x06, 0xab, 0x30, 0x9b, 0x9f, 0x29, 0x46, 0xbf, 0xee, 0xe3, 0x10, 0x34, - 0xea, 0x51, 0x7c, 0x78, 0xf2, 0x77, 0x8f, 0x7d, 0x55, 0x47, 0x76, 0x17, 0x65, 0x00, 0x83, 0x29, - 0x80, 0x18, 0xaf, 0x75, 0x75, 0xbd, 0xdd, 0x5d, 0x5f, 0x80, 0x2b, 0x10, 0x05, 0x12, 0x34, 0x40, - 0x90, 0x1c, 0x12, 0x38, 0x58, 0xee, 0xb0, 0x3c, 0x61, 0x95, 0xb3, 0xc3, 0xc5, 0x18, 0xac, 0x40, - 0xe1, 0xce, 0x39, 0xfe, 0x73, 0x91, 0x08, 0x81, 0x21, 0xc0, 0xdb, 0x15, 0x7f, 0xc2, 0xec, 0x80, - 0x03, 0x34, 0x82, 0xc2, 0x44, 0xae, 0xca, 0xd1, 0xcd, 0x9b, 0x6f, 0x8f, 0x3f, 0xf5, 0xbc, 0x50, - 0x9f, 0x6e, 0xab, 0x7c, 0x72, 0x7c, 0x67, 0xa6, 0xc6, 0x90, 0x2e, 0x06, 0x7b, 0x85, 0x76, 0x11, - 0x61, 0x1c, 0xb7, 0xbf, 0xc4, 0x10, 0x60, 0x7d, 0xe8, 0xc7, 0x0f, 0x9e, 0x46, 0x38, 0xd4, 0x36, - 0x38, 0xd8, 0xc4, 0x30, 0x1d, 0x78, 0x8f, 0xc4, 0x2e, 0x35, 0x41, 0xd7, 0x88, 0xfc, 0xeb, 0x9d, - 0xc3, 0xef, 0x45, 0xe3, 0xd9, 0xa6, 0x71, 0x04, 0x86, 0x9e, 0x9d, 0xc3, 0xde, 0x9f, 0x0d, 0xfa, - 0x25, 0x71, 0x0a, 0x0e, 0xac, 0x88, 0xc3, 0x8f, 0x44, 0x61, 0xa7, 0xa7, 0x5c, 0xf8, 0x7b, 0xd3, - 0xf8, 0x76, 0x30, 0x15, 0x45, 0x2b, 0xff, 0x4d, 0x3d, 0x34, 0xc4, 0x52, 0x18, 0xac, 0x43, 0xa2, - 0x1d, 0xf8, 0x6d, 0xc0, 0x7b, 0x5c, 0xb7, 0xfe, 0x9a, 0x7a, 0x69, 0x88, 0x29, 0x0e, 0xf1, 0x03, - 0xa2, 0x07, 0x7e, 0x1e, 0xc2, 0x25, 0x40, 0xa7, 0xfe, 0x9a, 0x7e, 0xb8, 0xab, 0x2e, 0xfc, 0x5b, - 0x16, 0x1b, 0xf6, 0x49, 0x8e, 0x44, 0x12, 0x7a, 0x5c, 0x23, 0x8b, 0x42, 0xb7, 0xf6, 0xc5, 0x17, - 0xf0, 0xf2, 0x33, 0x3f, 0xfd, 0x3f, 0x8d, 0xa7, 0x2e, 0x97, 0x7e, 0x11, 0x58, 0x07, 0x1b, 0x39, - 0xb5, 0xae, 0x9c, 0x61, 0x31, 0x16, 0xa3, 0x1e, 0xa5, 0x25, 0xea, 0x69, 0xb6, 0xdb, 0x6d, 0xa6, - 0x9c, 0x24, 0x4a, 0x41, 0xbf, 0x1f, 0x4f, 0x4f, 0xe1, 0x15, 0x13, 0xe9, 0x52, 0x49, 0x7f, 0x08, - 0x28, 0xef, 0x37, 0x6d, 0xbf, 0x84, 0x14, 0x9a, 0xfd, 0x34, 0xfe, 0x12, 0x50, 0x5f, 0xfc, 0x8f, - 0xed, 0xb7, 0xf0, 0x82, 0x88, 0x72, 0xfc, 0xda, 0x6d, 0xf8, 0x71, 0x10, 0x36, 0x19, 0x5f, 0xfe, - 0x9a, 0x7f, 0x76, 0xdb, 0xf8, 0xa5, 0x35, 0xc2, 0x0a, 0x11, 0x32, 0x8b, 0x66, 0x54, 0xff, 0x8f, - 0x62, 0x45, 0x30, 0x38, 0xa2, 0x1c, 0x7b, 0x66, 0xff, 0x08, 0x23, 0x86, 0xfc, 0x3e, 0xe9, 0xa7, - 0xf0, 0xc2, 0x14, 0x00, 0x22, 0x3f, 0x55, 0xfd, 0xff, 0xff, 0xff, 0xd9, 0xc4, 0x78, 0xaa, 0xc3, - 0x44, 0x30, 0x01, 0x9b, 0x31, 0x64, 0xfd, 0x57, 0xd1, 0xce, 0x67, 0xee, 0xee, 0x4a, 0x63, 0xdd, - 0x32, 0xf8, 0x8d, 0xa8, 0x60, 0x90, 0x03, 0x73, 0x26, 0xc5, 0x9f, 0xaf, 0x7f, 0x5d, 0xb6, 0xc9, - 0xd9, 0xe6, 0x6b, 0x0d, 0xa3, 0x00, 0x03, 0x99, 0x1a, 0x7e, 0x84, 0xc3, 0x97, 0x0c, 0x56, 0xfe, - 0xa6, 0x98, 0x55, 0xe1, 0x2f, 0xe3, 0x4d, 0xca, 0xd7, 0xea, 0x51, 0x1a, 0x0c, 0x31, 0x89, 0x28, - 0xb1, 0x7e, 0x28, 0x25, 0xc8, 0x0d, 0xa5, 0x61, 0xfa, 0xbc, 0x2f, 0x80, 0x1a, 0x80, 0x01, 0x49, - 0x14, 0x50, 0x88, 0x1f, 0x10, 0x96, 0x9a, 0x79, 0x7a, 0x73, 0x28, 0x06, 0xf1, 0x50, 0xce, 0x8b, - 0x69, 0x03, 0x8e, 0x3f, 0xc3, 0xb2, 0x28, 0x5d, 0x94, 0x00, 0x12, 0x58, 0xba, 0x6e, 0x82, 0xeb, - 0xb5, 0x84, 0xa7, 0x4f, 0xe0, 0xff, 0x97, 0x8f, 0x78, 0x78, 0xff, 0xac, 0x26, 0xe0, 0x0d, 0x7e, - 0xc0, 0x9a, 0x69, 0x6b, 0xff, 0xbd, 0xe1, 0x94, 0x2c, 0x09, 0xff, 0x44, 0x9f, 0xcd, 0x71, 0xb7, - 0x8f, 0x4f, 0xfe, 0x8e, 0xe1, 0x45, 0x01, 0x3b, 0xee, 0x28, 0x0d, 0xff, 0xad, 0x7e, 0x39, 0xc0, - 0x23, 0xd8, 0xfa, 0x49, 0xd8, 0xd5, 0x00, 0x9a, 0xef, 0x18, 0xe5, 0x61, 0x94, 0x30, 0x00, 0x1f, - 0x4c, 0x6d, 0xd9, 0x51, 0xee, 0x30, 0xad, 0xff, 0xe7, 0xdd, 0xc7, 0x78, 0x70, 0x2b, 0xe5, 0x6f, - 0x4b, 0xef, 0xee, 0xbc, 0x8a, 0x1a, 0x90, 0x00, 0x1e, 0xe4, 0x2d, 0xd9, 0xc7, 0x92, 0x2c, 0x25, - 0xef, 0xff, 0x8b, 0x46, 0xc7, 0xbe, 0xde, 0xdb, 0x75, 0xb7, 0x07, 0xbe, 0xdd, 0x92, 0x3d, 0x59, - 0xc3, 0xd4, 0xf7, 0x32, 0x9d, 0x85, 0xc0, 0x43, 0xe7, 0x3f, 0x23, 0x11, 0x43, 0xef, 0x0e, 0xd9, - 0xd7, 0x15, 0xe7, 0x5c, 0xef, 0x9d, 0x43, 0x1e, 0x9d, 0x43, 0x8f, 0x47, 0x46, 0x82, 0xe2, 0x70, - 0x98, 0x0c, 0x08, 0x0d, 0x89, 0x5c, 0x31, 0x09, 0x02, 0x45, 0x39, 0xe5, 0xff, 0xf8, 0xb6, 0x2d, - 0xf6, 0x17, 0x64, 0x0d, 0x32, 0xff, 0xf8, 0x9e, 0x89, 0xef, 0x8a, 0x53, 0x3a, 0xe2, 0x17, 0x3b, - 0xe2, 0x3c, 0x64, 0x2f, 0x1c, 0x6c, 0x42, 0xe2, 0x17, 0x10, 0xb8, 0x6e, 0x1a, 0x00, 0xe4, 0xc2, - 0xa0, 0x5a, 0x3f, 0xd3, 0x4d, 0x34, 0xf4, 0xd3, 0x05, 0x00, 0x01, 0x08, 0xe0, 0x03, 0xed, 0xb7, - 0xf0, 0x82, 0x28, 0x03, 0xd9, 0x1e, 0x54, 0x45, 0xd3, 0x4f, 0xe1, 0xd5, 0x04, 0xbb, 0x9e, 0x7f, - 0x4d, 0x3f, 0xfc, 0x10, 0x96, 0x2a, 0xff, 0x87, 0x11, 0x01, 0x19, 0xba, 0x3f, 0xff, 0x4d, 0x3c, - 0x91, 0x7a, 0x69, 0xf1, 0x8a, 0x00, 0xff, 0xaf, 0xb8, 0x33, 0xf0, 0xe2, 0x81, 0x10, 0xb9, 0x3f, - 0x1e, 0xdb, 0x7f, 0xf8, 0xb8, 0x85, 0x3b, 0x6d, 0xb7, 0xc2, 0x4a, 0x01, 0x2f, 0x62, 0xde, 0x68, - 0xd1, 0xdf, 0x4d, 0x3f, 0x86, 0x11, 0x00, 0x7a, 0x9c, 0xb6, 0x9a, 0x7a, 0x69, 0xff, 0x99, 0x78, - 0xc2, 0x5d, 0xb1, 0x4a, 0x5b, 0x8c, 0x50, 0x99, 0x2a, 0x3b, 0x10, 0xa3, 0x5e, 0x8a, 0xc6, 0xbd, - 0x1c, 0xa4, 0xbc, 0xb1, 0x04, 0x83, 0x5d, 0xac, 0x41, 0x23, 0x6d, 0x63, 0x89, 0x06, 0xe9, 0x66, - 0x4c, 0x52, 0x98, 0x83, 0x10, 0xad, 0xc3, 0xca, 0x05, 0xf7, 0x2e, 0xff, 0xdb, 0x6f, 0xcb, 0xb6, - 0xff, 0x87, 0x89, 0x00, 0x64, 0x52, 0xde, 0x21, 0xf0, 0xf8, 0xff, 0xdb, 0xb7, 0x93, 0x83, 0xd3, - 0xd6, 0xdb, 0x4c, 0x1f, 0x74, 0xed, 0xb7, 0x0e, 0x38, 0x00, 0xfc, 0x3b, 0x11, 0x50, 0xca, 0x62, - 0x8a, 0xde, 0x2f, 0xe4, 0xf7, 0xf1, 0x56, 0xda, 0x8a, 0xb3, 0x70, 0x45, 0x8d, 0xa5, 0xff, 0x86, - 0xb0, 0x90, 0x5d, 0xf1, 0xfd, 0xab, 0xfe, 0xd8, 0x5b, 0x00, 0x0d, 0x62, 0x64, 0xc6, 0x14, 0x85, - 0x24, 0xb3, 0x3f, 0xbd, 0xea, 0x06, 0x73, 0xf4, 0xa2, 0x0d, 0x07, 0x86, 0x5f, 0x3b, 0x07, 0x43, - 0xc1, 0xf7, 0x0b, 0xa3, 0x04, 0x70, 0x0d, 0x7a, 0x0d, 0x27, 0x41, 0x7e, 0x7c, 0xf6, 0x13, 0x83, - 0x02, 0x7c, 0xf0, 0x60, 0x99, 0xe0, 0xc0, 0x90, 0x38, 0x67, 0x24, 0x0e, 0x19, 0xdb, 0xcf, 0x06, - 0x16, 0x78, 0x30, 0x1f, 0x05, 0xaa, 0x19, 0x24, 0x00, 0x79, 0x41, 0x25, 0xf5, 0x9c, 0x07, 0x94, - 0xcc, 0xb0, 0x88, 0x3a, 0xf6, 0x49, 0x1f, 0xfa, 0x3c, 0xc3, 0x5f, 0x34, 0xce, 0xc7, 0xe7, 0xf9, - 0xf9, 0x78, 0xf5, 0x0d, 0xe0, 0x54, 0xd7, 0x25, 0x9e, 0x65, 0x52, 0x0c, 0x33, 0x16, 0x03, 0x38, - 0x96, 0xf1, 0x27, 0x58, 0x76, 0xef, 0xfd, 0x57, 0xff, 0x20, 0x8d, 0x70, 0xba, 0x80, 0x59, 0xf2, - 0x28, 0xe5, 0x75, 0x75, 0x55, 0x5f, 0x55, 0x55, 0x4a, 0xa1, 0x64, 0x50, 0x12, 0xb6, 0x90, 0xdf, - 0xef, 0x7f, 0xc6, 0xa1, 0x20, 0x22, 0x6a, 0xa3, 0xc5, 0x4c, 0x42, 0x21, 0xf6, 0x39, 0x98, 0x52, - 0xfb, 0x0a, 0x22, 0x00, 0x0a, 0x7e, 0x90, 0xd9, 0xc8, 0x51, 0x1f, 0x7b, 0xc4, 0x3d, 0x94, 0x88, - 0x7f, 0xc5, 0x74, 0xf0, 0x16, 0x20, 0xe4, 0x28, 0x42, 0xc1, 0x88, 0x1e, 0x3b, 0x61, 0xfd, 0x1c, - 0x7e, 0x34, 0xb0, 0xb8, 0xf1, 0xd8, 0x8b, 0x0c, 0xef, 0x03, 0x96, 0xd4, 0xa5, 0xad, 0x6e, 0x70, - 0x0e, 0x1c, 0x03, 0x83, 0x80, 0x00, 0x80, 0x14, 0x7e, 0x1a, 0x98, 0x00, 0xb5, 0x50, 0x27, 0x3d, - 0x4a, 0xc0, 0x52, 0x2c, 0x48, 0xf5, 0x64, 0xcf, 0x0f, 0x7d, 0xb6, 0xf6, 0xdf, 0xef, 0x88, 0x7d, - 0xc1, 0xef, 0xb6, 0x17, 0x62, 0xc0, 0x02, 0x0f, 0x49, 0xde, 0x9a, 0x67, 0xfe, 0x9c, 0xa0, 0x7f, - 0x47, 0xe8, 0xb3, 0x10, 0xf8, 0xc8, 0x76, 0x8e, 0x73, 0xae, 0x78, 0xc0, 0xc0, 0xf4, 0xf8, 0x71, - 0xe8, 0xe8, 0xd0, 0x5c, 0x4e, 0x13, 0x47, 0x38, 0x98, 0xc0, 0xe3, 0xd0, 0xdc, 0x28, 0x00, 0x19, - 0x01, 0x65, 0x22, 0x30, 0xf9, 0x88, 0x7f, 0x7f, 0xe9, 0xa6, 0x98, 0x3e, 0xe4, 0xe3, 0xd7, 0x08, - 0x48, 0x87, 0x66, 0xa2, 0x63, 0xcb, 0xfc, 0x3c, 0x42, 0x00, 0x16, 0xcf, 0x89, 0x08, 0x21, 0xf7, - 0xfa, 0xcd, 0xc9, 0xc9, 0xc9, 0xcb, 0xbf, 0x2e, 0xfb, 0x79, 0xbb, 0x87, 0x1f, 0x51, 0x27, 0x96, - 0xb1, 0x57, 0xf0, 0xe2, 0x80, 0x39, 0x9b, 0x74, 0xc9, 0xeb, 0xf3, 0x47, 0xb7, 0x2f, 0x2d, 0x1b, - 0x2b, 0xf9, 0xb6, 0xed, 0xb6, 0x3b, 0x76, 0xe4, 0x58, 0x96, 0xff, 0xc3, 0x78, 0x00, 0x4b, 0x21, - 0x31, 0xa1, 0xdc, 0x34, 0x88, 0x74, 0xaf, 0xfb, 0x28, 0x5f, 0x37, 0xfb, 0xe8, 0x3c, 0xfe, 0x0d, - 0xbe, 0xc7, 0xbe, 0x98, 0x24, 0xa4, 0xbe, 0xff, 0x9d, 0x86, 0x43, 0x7e, 0x88, 0x5c, 0xee, 0x1e, - 0xf4, 0xeb, 0x9d, 0x73, 0xbe, 0x78, 0xd1, 0x40, 0x07, 0x17, 0x09, 0x03, 0x20, 0x01, 0xa8, 0xaa, - 0xc2, 0x88, 0x80, 0x1c, 0xe4, 0xc1, 0x52, 0x4d, 0x3d, 0x34, 0xff, 0xf8, 0xc5, 0x01, 0xeb, 0x0a, - 0x4f, 0xe1, 0x45, 0x00, 0xe3, 0x4f, 0xa7, 0x7b, 0x6d, 0xff, 0xf1, 0xca, 0x1e, 0x4d, 0x46, 0xc7, - 0x22, 0x04, 0x66, 0xa9, 0xdf, 0x1c, 0xa1, 0x94, 0x83, 0x0d, 0xc1, 0x0e, 0x18, 0x42, 0x40, 0xe8, - 0xeb, 0x2f, 0xfd, 0xb6, 0xf6, 0xdb, 0x44, 0x5a, 0x86, 0x14, 0x2f, 0x64, 0xdb, 0x6d, 0xb7, 0xff, - 0xed, 0x8e, 0x24, 0x38, 0xe3, 0xf6, 0x23, 0x06, 0x66, 0x71, 0x88, 0xc1, 0xc1, 0x3e, 0x4f, 0x88, - 0x50, 0x42, 0x60, 0xc3, 0xa2, 0x94, 0x25, 0x6a, 0x51, 0x4a, 0x10, 0xa4, 0xb1, 0xde, 0xb1, 0xd2, - 0x8f, 0x3e, 0x51, 0xdc, 0x62, 0x85, 0x96, 0xe7, 0xc2, 0xf2, 0x01, 0x3d, 0x74, 0xea, 0xff, 0xdb, - 0x6e, 0xdb, 0x62, 0xac, 0x53, 0x61, 0xd2, 0x18, 0x00, 0x4d, 0x8e, 0x11, 0x27, 0x79, 0x33, 0x5f, - 0xdf, 0xf8, 0xab, 0x6a, 0x0f, 0xb8, 0x3e, 0xec, 0xe0, 0x72, 0x83, 0x0d, 0x65, 0xc9, 0xd3, 0xed, - 0xc3, 0xc4, 0x20, 0x00, 0x4a, 0x4e, 0xde, 0xf5, 0x10, 0xac, 0xdf, 0x56, 0x6e, 0x4e, 0x4e, 0x4e, - 0xda, 0x60, 0xe9, 0xf6, 0x7f, 0x6c, 0x2a, 0xf1, 0x3b, 0xc7, 0xbd, 0xfc, 0x19, 0xd8, 0xb1, 0xed, - 0x9f, 0xe9, 0x93, 0xc2, 0xee, 0x00, 0xaf, 0xf6, 0xe0, 0xaa, 0x04, 0xb7, 0x9f, 0xd5, 0xf5, 0x5d, - 0x72, 0xb2, 0xab, 0xbb, 0xb0, 0xd2, 0x38, 0x03, 0x2f, 0xe5, 0x03, 0x05, 0xf4, 0xd3, 0xfe, 0x9a, - 0x77, 0xc2, 0x68, 0x80, 0x04, 0xcd, 0x91, 0x02, 0x1f, 0xd0, 0xf7, 0xd7, 0x75, 0x7f, 0x58, 0x8f, - 0xbd, 0xcd, 0x03, 0xbc, 0xfc, 0x0e, 0xf8, 0x69, 0x88, 0x00, 0x0e, 0x56, 0x12, 0xa4, 0x72, 0x86, - 0xe2, 0xff, 0xbf, 0x54, 0xc9, 0xe4, 0xe2, 0x3c, 0x7d, 0xe3, 0x8e, 0x32, 0xe5, 0x3e, 0x17, 0x21, - 0x40, 0x07, 0xd9, 0x68, 0x85, 0x6d, 0x43, 0x51, 0x89, 0x0d, 0x8e, 0xe8, 0x9e, 0x1e, 0x51, 0xae, - 0x86, 0xb4, 0x69, 0x8a, 0x0f, 0x71, 0x78, 0x4a, 0x99, 0xbb, 0x69, 0xcf, 0x86, 0x90, 0xb0, 0x11, - 0x63, 0xd0, 0x08, 0x5a, 0xff, 0xdb, 0x6f, 0xec, 0x2e, 0xe0, 0x9d, 0x16, 0xcd, 0xfe, 0xeb, 0xaf, - 0x7c, 0x2e, 0xce, 0x08, 0xc8, 0xe2, 0x7c, 0x2d, 0x7f, 0xff, 0xd8, 0xa9, 0x00, 0x76, 0x65, 0x2d, - 0x13, 0x38, 0x35, 0xb2, 0x89, 0x70, 0x11, 0x1d, 0xdb, 0xf8, 0x9e, 0x40, 0x5e, 0x88, 0x18, 0x51, - 0x40, 0x19, 0x8a, 0x3d, 0x94, 0x2a, 0x6c, 0xb8, 0xe5, 0xff, 0xff, 0x85, 0x10, 0x80, 0x02, 0xdc, - 0x9c, 0x68, 0x09, 0xf7, 0x4f, 0x2f, 0x6f, 0xa7, 0xff, 0x80, 0x2c, 0x00, 0x1a, 0x23, 0x44, 0x0e, - 0x40, 0xb0, 0x38, 0x68, 0x45, 0x8e, 0x4f, 0x00, 0x03, 0x5c, 0x50, 0x00, 0x31, 0x0e, 0x71, 0x28, - 0x73, 0x80, 0x4b, 0x54, 0x35, 0x39, 0xed, 0xd2, 0x66, 0x87, 0x8b, 0x00, 0x77, 0x00, 0x43, 0x98, - 0x38, 0xff, 0xfc, 0x2f, 0x80, 0x0b, 0xc9, 0x40, 0x09, 0xe8, 0xcf, 0x0e, 0x44, 0xde, 0xe6, 0x5d, - 0xfc, 0x70, 0xfe, 0x0c, 0x3f, 0x63, 0xff, 0x1c, 0x70, 0xfe, 0x0e, 0x7e, 0x65, 0x61, 0xb8, 0xb0, - 0x01, 0xa1, 0x59, 0x6c, 0x76, 0xa7, 0x17, 0xfe, 0x29, 0x62, 0xde, 0x9a, 0x6b, 0x8a, 0xb1, 0x57, - 0xf0, 0xec, 0x48, 0x56, 0xd7, 0xff, 0x4d, 0x3d, 0x34, 0xe2, 0xed, 0xb7, 0xf0, 0xc3, 0x28, 0x71, - 0x8a, 0xff, 0xed, 0xb7, 0xb6, 0xdb, 0x62, 0x57, 0x11, 0x28, 0x71, 0xe8, 0x7a, 0x14, 0x00, 0x23, - 0x30, 0x9d, 0xe3, 0x04, 0x24, 0x5f, 0x27, 0x58, 0xfc, 0x5e, 0x2f, 0x03, 0xc2, 0x38, 0xde, 0x0f, - 0x2f, 0x11, 0x87, 0xc3, 0xc8, 0x80, 0x19, 0xcb, 0xe5, 0x09, 0x83, 0xde, 0x8d, 0x3a, 0xb3, 0xf1, - 0xa6, 0x9a, 0x6a, 0xf6, 0xd6, 0x22, 0xd1, 0x75, 0x96, 0xbd, 0xbf, 0x87, 0x59, 0xc0, 0x09, 0x20, - 0x88, 0xca, 0xc8, 0xca, 0xe7, 0xb4, 0x1f, 0x71, 0x6f, 0x3b, 0xf0, 0x76, 0xf2, 0xf2, 0xf7, 0xf1, - 0x71, 0x6c, 0x1e, 0xb8, 0xf4, 0x63, 0xa6, 0xa7, 0xff, 0x0f, 0x28, 0x00, 0x57, 0xe8, 0x5e, 0xe2, - 0xac, 0xc8, 0x9f, 0x33, 0x2f, 0x5b, 0x8c, 0x9d, 0x65, 0xf6, 0x4e, 0x2f, 0x8e, 0x53, 0xc5, 0x58, - 0x3b, 0xff, 0xf8, 0x64, 0x10, 0x85, 0x08, 0x76, 0x0b, 0x1b, 0xd8, 0x2c, 0x61, 0xfc, 0xa3, 0x84, - 0x6c, 0x5e, 0xae, 0x65, 0xc5, 0x19, 0xf9, 0x48, 0xd4, 0xb5, 0x9f, 0x65, 0xef, 0x24, 0x07, 0x06, - 0x8d, 0x0e, 0x1b, 0x70, 0x00, 0xc0, 0x14, 0x45, 0x20, 0x18, 0xa5, 0x14, 0x3c, 0x8f, 0xff, 0x82, - 0x8f, 0x63, 0xcf, 0x97, 0xf8, 0xff, 0x92, 0x0f, 0x16, 0xce, 0x1f, 0xde, 0x04, 0x26, 0x97, 0xdf, - 0xf1, 0x70, 0x98, 0x6f, 0xc4, 0x65, 0x51, 0x6a, 0x1b, 0xf2, 0x55, 0x08, 0x10, 0x40, 0x77, 0x2c, - 0x02, 0x2e, 0x6d, 0x16, 0xfe, 0x10, 0x50, 0x75, 0x60, 0xc1, 0x45, 0x59, 0xb4, 0xdb, 0xf0, 0xe2, - 0x30, 0x71, 0x3f, 0xdf, 0xff, 0xe9, 0xa6, 0x12, 0x2c, 0xee, 0x4e, 0x0e, 0x6f, 0xf0, 0x82, 0x81, - 0xd5, 0xf8, 0x48, 0xd6, 0x53, 0x4d, 0xba, 0xdd, 0xf8, 0xb8, 0x90, 0x28, 0x60, 0x03, 0xa0, 0x60, - 0xaf, 0x18, 0xa0, 0x66, 0x39, 0x1f, 0x18, 0xa1, 0x10, 0xd5, 0xe1, 0x13, 0x1c, 0xa0, 0x1f, 0xfd, - 0x4d, 0x96, 0x3b, 0x0e, 0x99, 0x59, 0xf1, 0xc4, 0x82, 0xdf, 0x30, 0xab, 0xc6, 0x28, 0x35, 0xda, - 0x08, 0x8e, 0xa1, 0x82, 0x42, 0x45, 0x50, 0xdb, 0x7b, 0x6d, 0xff, 0xed, 0x8a, 0x53, 0x52, 0x30, - 0x92, 0x63, 0xe2, 0x94, 0x73, 0xa2, 0x94, 0x38, 0xc5, 0xc5, 0xa2, 0x84, 0xeb, 0x38, 0xc6, 0x75, - 0x15, 0xc5, 0x12, 0x18, 0x69, 0xa3, 0x88, 0x52, 0xc0, 0xc9, 0x8b, 0x21, 0x03, 0x60, 0x78, 0xab, - 0xc3, 0x44, 0x20, 0x01, 0x8f, 0x7d, 0x73, 0xfb, 0xaa, 0xff, 0xfe, 0xe9, 0x94, 0x3c, 0x41, 0x40, - 0x01, 0xdc, 0x9a, 0x49, 0x30, 0x35, 0x62, 0x3c, 0xfd, 0xb1, 0xce, 0x7c, 0x9c, 0x9c, 0x7d, 0xd9, - 0xe4, 0x32, 0x40, 0xe1, 0xac, 0x59, 0x39, 0x3f, 0x3f, 0x6f, 0x86, 0xb0, 0x01, 0x4a, 0xe6, 0x89, - 0x18, 0xe1, 0x5d, 0x4f, 0xed, 0xfe, 0xd8, 0xda, 0xbd, 0x81, 0xdd, 0x8a, 0x1c, 0x35, 0x20, 0x03, - 0x55, 0x41, 0xb9, 0x8e, 0x36, 0x2f, 0x3f, 0x97, 0x5a, 0xed, 0xdd, 0x6b, 0xac, 0x26, 0xca, 0x12, - 0x8b, 0x34, 0xb5, 0xff, 0xfc, 0x53, 0xbc, 0x2d, 0x20, 0x00, 0x9c, 0x29, 0x0a, 0x3a, 0x39, 0x57, - 0x1f, 0xf6, 0xea, 0xc8, 0xef, 0x07, 0xdc, 0x58, 0xc9, 0x75, 0xa9, 0x78, 0x67, 0x30, 0x1f, 0xd0, - 0x19, 0x37, 0xec, 0xe8, 0x98, 0x05, 0x60, 0x18, 0x85, 0x20, 0xb9, 0x48, 0x00, 0x04, 0x00, 0x76, - 0xe4, 0x80, 0x0f, 0x17, 0x60, 0x5b, 0xe6, 0x03, 0x52, 0xef, 0x46, 0x80, 0xd8, 0x31, 0xa0, 0x32, - 0x48, 0x78, 0x01, 0xe5, 0x80, 0x01, 0x49, 0xe3, 0x2c, 0x19, 0xc0, 0xf2, 0xc0, 0x00, 0x8c, 0x7b, - 0xd2, 0x88, 0x12, 0x92, 0x80, 0xa9, 0x46, 0x50, 0xd8, 0x28, 0xca, 0xc4, 0x86, 0x42, 0x95, 0x41, - 0xcb, 0xd7, 0x80, 0x00, 0x8f, 0x15, 0x20, 0x25, 0x66, 0x6a, 0x1c, 0x98, 0xd6, 0x32, 0x60, 0x00, - 0x27, 0x81, 0x93, 0x3e, 0x29, 0x01, 0x28, 0xf7, 0xce, 0x0f, 0x8c, 0x98, 0x00, 0x15, 0x21, 0x80, - 0x07, 0x91, 0x30, 0x0a, 0x87, 0x50, 0x03, 0x51, 0xce, 0x61, 0x37, 0x00, 0x04, 0xa6, 0x59, 0x13, - 0x43, 0xe6, 0xe2, 0x34, 0x9f, 0xf8, 0xb5, 0xfb, 0x4c, 0x33, 0x97, 0x37, 0xee, 0xf1, 0xc4, 0x12, - 0x00, 0xc3, 0xe9, 0x9d, 0xda, 0xec, 0x76, 0x17, 0x0d, 0x3b, 0x0b, 0x28, 0x45, 0xea, 0xbf, 0xff, - 0xd3, 0xc2, 0xca, 0x1b, 0x1f, 0xbf, 0xfa, 0x7f, 0x3e, 0x02, 0xce, 0x52, 0x34, 0x4b, 0x38, 0x44, - 0x24, 0x7b, 0x8b, 0x94, 0x03, 0x7b, 0x12, 0xa5, 0x95, 0x85, 0x91, 0x01, 0x02, 0x52, 0x71, 0xff, - 0x57, 0xfc, 0x6a, 0x87, 0x00, 0x52, 0x7d, 0x86, 0x11, 0x00, 0x02, 0x2b, 0x34, 0x77, 0x32, 0xbb, - 0xcb, 0xc7, 0x2f, 0xff, 0xe7, 0x44, 0x58, 0x38, 0x01, 0xd0, 0x14, 0x18, 0x3c, 0x00, 0xb0, 0x90, - 0x00, 0x0b, 0x28, 0x8e, 0x12, 0x15, 0x29, 0x4a, 0x3a, 0xbd, 0x8b, 0xa5, 0xc2, 0x8c, 0xe7, 0x8a, - 0x32, 0xc6, 0x58, 0x32, 0xd6, 0x24, 0x70, 0xb7, 0xbe, 0x1d, 0x45, 0x00, 0x10, 0x87, 0x20, 0x4b, - 0x9d, 0x4c, 0xe1, 0x9b, 0x9f, 0xf8, 0x3d, 0xf8, 0xe5, 0xf0, 0x72, 0xfe, 0x9a, 0x63, 0xff, 0x4f, - 0xf0, 0xf2, 0x38, 0x0d, 0xee, 0x9b, 0xce, 0xdf, 0xff, 0x4e, 0x0b, 0x6d, 0xa7, 0x4d, 0x3e, 0x1e, - 0x50, 0x1c, 0xe5, 0xcb, 0x7f, 0xa6, 0x9f, 0xe3, 0xa6, 0x2d, 0xb7, 0xfc, 0x62, 0x80, 0x24, 0x79, - 0x36, 0x15, 0x68, 0xbb, 0x0d, 0x90, 0xc0, 0x11, 0xf2, 0x99, 0x8e, 0xf7, 0xd6, 0xbe, 0xe2, 0x99, - 0xf8, 0xea, 0xe3, 0x0b, 0x8b, 0xc2, 0x2f, 0x2f, 0xf8, 0x7b, 0x00, 0x20, 0x01, 0x7d, 0x79, 0xe2, - 0x94, 0xf7, 0x7d, 0xdb, 0x4c, 0x51, 0xcf, 0xc4, 0xff, 0x12, 0xd0, 0x1d, 0xfd, 0x71, 0xdb, 0x15, - 0x65, 0x0c, 0xe9, 0xa7, 0xf0, 0xe2, 0x80, 0x27, 0x4c, 0x9b, 0xd9, 0x08, 0x71, 0x1f, 0xf7, 0x2d, - 0xe1, 0xf7, 0xc6, 0x97, 0xe7, 0xe2, 0xb9, 0x76, 0xcf, 0xcb, 0x5b, 0xfd, 0x83, 0x93, 0x59, 0xe9, - 0xed, 0xb7, 0x0e, 0x22, 0x00, 0x24, 0x7a, 0x1c, 0x75, 0xfc, 0x93, 0x87, 0xbf, 0xad, 0xb6, 0xed, - 0xb7, 0x8a, 0x9e, 0x9f, 0xc3, 0x84, 0x80, 0x0b, 0xb2, 0x24, 0xd4, 0x61, 0x94, 0x32, 0x27, 0x1f, - 0x1e, 0x7e, 0x7f, 0x6e, 0x9d, 0xe2, 0xd8, 0xb6, 0x07, 0x35, 0xf4, 0xff, 0x0d, 0xa8, 0x00, 0xab, - 0x3f, 0x12, 0x07, 0xf7, 0x98, 0x41, 0x5b, 0x15, 0x62, 0xad, 0xf9, 0xb9, 0xff, 0x27, 0x7a, 0xd9, - 0xd3, 0x05, 0x2c, 0x8d, 0xa6, 0xa9, 0x7c, 0x38, 0x8a, 0x04, 0xb2, 0x9b, 0xc7, 0xff, 0xa6, 0x9d, - 0x30, 0xd8, 0x7c, 0x93, 0x8b, 0x75, 0x8a, 0xbf, 0x87, 0x14, 0x04, 0xdc, 0xa3, 0x8f, 0x7e, 0x9a, - 0x7d, 0xbd, 0xb6, 0xc7, 0x4a, 0x4d, 0x26, 0xd5, 0x57, 0xc2, 0x0a, 0x02, 0x99, 0x07, 0x50, 0x0c, - 0x0c, 0x7b, 0x97, 0x7d, 0x34, 0xe1, 0x25, 0x01, 0x17, 0x21, 0x70, 0xbc, 0x38, 0x98, 0x96, 0xb2, - 0xd7, 0xfc, 0x3c, 0xa0, 0x43, 0x8e, 0x43, 0x3b, 0xfb, 0x7f, 0xf9, 0xaf, 0xd2, 0xd7, 0xfc, 0x62, - 0x85, 0x00, 0x57, 0x31, 0x8f, 0x94, 0x1d, 0xb4, 0x40, 0x00, 0x87, 0x4e, 0x28, 0x58, 0xa1, 0x7f, - 0x18, 0xa7, 0xc2, 0xa6, 0x21, 0x43, 0x4e, 0x94, 0x22, 0xb0, 0x1a, 0xa7, 0xfe, 0x39, 0x4b, 0x86, - 0x4c, 0x30, 0xa5, 0x25, 0xff, 0xa6, 0x9e, 0x9a, 0x6e, 0x61, 0x45, 0x36, 0x7f, 0xed, 0xb7, 0xf0, - 0xc2, 0x97, 0x3f, 0xff, 0xb7, 0x2c, 0x5a, 0xb8, 0xfb, 0x18, 0xa2, 0xab, 0x2c, 0x42, 0xac, 0x24, - 0xa2, 0x38, 0x22, 0x92, 0x9a, 0x6d, 0x35, 0xf0, 0x82, 0x29, 0x08, 0x8a, 0x8e, 0xde, 0x2a, 0xfe, - 0x10, 0x52, 0x78, 0xc5, 0xb6, 0xc9, 0xac, 0xdf, 0x8b, 0x52, 0x28, 0xf6, 0x10, 0x58, 0x07, 0x7b, - 0x7f, 0x08, 0xa9, 0xf5, 0x76, 0xdb, 0xf8, 0x78, 0x84, 0x00, 0x0f, 0xf6, 0x9d, 0x56, 0x07, 0xf3, - 0x7f, 0xef, 0xbd, 0x99, 0x3b, 0x73, 0xf1, 0xce, 0x27, 0xd9, 0xe0, 0xc5, 0xc3, 0x58, 0x59, 0x3a, - 0xf3, 0xf3, 0xfe, 0x1a, 0xc1, 0x02, 0xce, 0x5e, 0x7d, 0xdb, 0x6f, 0xff, 0x03, 0xbf, 0x18, 0x57, - 0x00, 0x64, 0xe1, 0x34, 0xaa, 0x77, 0xb5, 0x27, 0x9f, 0xc5, 0x6b, 0xef, 0x74, 0xe1, 0x76, 0x60, - 0x20, 0x64, 0x9e, 0x1f, 0x29, 0x4d, 0x5d, 0xbe, 0xae, 0x4e, 0x5b, 0xf6, 0x63, 0x98, 0x90, 0x07, - 0xae, 0x8c, 0x1d, 0x76, 0x93, 0x1c, 0xa0, 0x44, 0x0d, 0x80, 0x45, 0xba, 0xf6, 0x15, 0x44, 0x00, - 0x19, 0x45, 0x1a, 0x80, 0x1d, 0x30, 0x58, 0x7f, 0xfd, 0x26, 0x5a, 0x37, 0x64, 0xe3, 0xd1, 0x96, - 0xc4, 0x7f, 0x8b, 0x63, 0xd7, 0x96, 0xb0, 0xc2, 0x80, 0x20, 0x08, 0x68, 0xd4, 0xbf, 0x82, 0xc4, - 0x92, 0xfb, 0xfa, 0xcf, 0xc7, 0x17, 0xcf, 0x7b, 0xaa, 0xee, 0xd8, 0xfb, 0x97, 0x63, 0x72, 0xe1, - 0x72, 0x10, 0x00, 0xc3, 0x43, 0xb2, 0x73, 0xef, 0x7f, 0x3c, 0x33, 0xc3, 0x76, 0xe2, 0xb3, 0xd8, - 0x39, 0xec, 0x2e, 0xee, 0xf4, 0x6b, 0x85, 0x19, 0x40, 0x13, 0xfb, 0x98, 0x4f, 0x1c, 0x79, 0x42, - 0x82, 0x5c, 0x58, 0xe4, 0xf5, 0x77, 0xb7, 0xf3, 0xfb, 0xf0, 0x2c, 0x80, 0x48, 0x01, 0x49, 0x6b, - 0x5d, 0x54, 0x51, 0xc5, 0x18, 0xac, 0x70, 0x31, 0xdc, 0xec, 0xe0, 0x4c, 0x4e, 0x14, 0xda, 0x33, - 0x0a, 0x55, 0xb0, 0xaa, 0x80, 0xaf, 0x21, 0xef, 0xc4, 0xf4, 0xff, 0xe6, 0xa2, 0x3e, 0x76, 0x43, - 0x64, 0x53, 0x12, 0x20, 0x91, 0x9d, 0x10, 0x2b, 0x4c, 0xc2, 0xce, 0x01, 0xde, 0x51, 0xed, 0xef, - 0xff, 0xf8, 0xa5, 0x04, 0xcf, 0xd6, 0x42, 0xce, 0x04, 0x73, 0x60, 0x24, 0x55, 0xfb, 0x6d, 0xff, - 0xc7, 0x22, 0x02, 0x77, 0xab, 0x3d, 0xc0, 0x92, 0x02, 0x00, 0x28, 0x20, 0x47, 0x03, 0xe1, 0x29, - 0x68, 0x80, 0x46, 0x1f, 0x1a, 0x96, 0x2c, 0xf0, 0x06, 0x0c, 0x1b, 0x02, 0x83, 0x2c, 0x60, 0x2b, - 0x13, 0x8b, 0xb5, 0xe2, 0x41, 0xc4, 0xaf, 0x5d, 0x82, 0xd6, 0x31, 0x08, 0x6d, 0x40, 0x02, 0x52, - 0x84, 0x37, 0x41, 0x74, 0x83, 0x70, 0x5e, 0xf2, 0x69, 0xbf, 0x96, 0xbc, 0x55, 0x8a, 0xb1, 0xc8, - 0xfa, 0x9e, 0x5b, 0xc5, 0x02, 0xb2, 0x71, 0xcf, 0xc5, 0xb0, 0x81, 0x0c, 0x83, 0x46, 0xd0, 0x9e, - 0x89, 0x3a, 0x1d, 0x0e, 0x0a, 0x17, 0xe1, 0xc5, 0x00, 0xd7, 0x05, 0x72, 0x1f, 0xb7, 0x4d, 0x34, - 0xf4, 0xd3, 0x6d, 0xb0, 0x50, 0xf2, 0x98, 0xb7, 0x1d, 0xb6, 0xf8, 0x71, 0x40, 0x5c, 0xe8, 0x12, - 0xda, 0xdb, 0x6d, 0x34, 0xf4, 0xc5, 0xbf, 0xf0, 0xc1, 0x8f, 0xa4, 0xd2, 0x69, 0xf5, 0xfb, 0xf0, - 0xe2, 0x80, 0x1b, 0xfb, 0x05, 0x37, 0xaa, 0xd4, 0xf8, 0xe3, 0xff, 0xc0, 0xc0, 0x0c, 0x29, 0x13, - 0xb8, 0xa3, 0x0f, 0xfe, 0x1d, 0x50, 0x1c, 0xa8, 0xc0, 0x58, 0xcf, 0x55, 0xb6, 0x9a, 0x62, 0xac, - 0x55, 0xa6, 0x9a, 0x74, 0xd3, 0xf1, 0xc4, 0x8c, 0xa2, 0xd6, 0x2a, 0xf4, 0xd3, 0xe1, 0xc4, 0x50, - 0x03, 0xaa, 0xd9, 0x2f, 0x0d, 0x78, 0x9a, 0x79, 0x76, 0x2d, 0xff, 0x4e, 0xb9, 0x4f, 0xaf, 0xdf, - 0xe1, 0xc5, 0x04, 0x02, 0x5d, 0xee, 0xa6, 0x9e, 0x9a, 0x7f, 0xf4, 0xf3, 0xdb, 0x6f, 0xf8, 0x68, - 0x90, 0x43, 0x9f, 0xdb, 0xff, 0xf6, 0xe6, 0x8c, 0x54, 0x3c, 0x48, 0x02, 0xd4, 0x89, 0xa0, 0x71, - 0x7f, 0xed, 0xb6, 0xdb, 0x6d, 0xb7, 0x3b, 0xa6, 0x9f, 0xc3, 0x0a, 0x00, 0x7e, 0xec, 0xa0, 0xe5, - 0x73, 0xc9, 0xa7, 0xf6, 0xf7, 0xf8, 0xf3, 0xe1, 0x85, 0x00, 0x77, 0xc4, 0xb0, 0xef, 0xff, 0xae, - 0x3e, 0xc3, 0x0a, 0x04, 0x8d, 0x86, 0x8f, 0x9b, 0x4d, 0x3d, 0x34, 0xfd, 0xb6, 0xf1, 0xff, 0x0a, - 0x28, 0x11, 0x83, 0x26, 0x0e, 0xdb, 0x7f, 0xe9, 0xa7, 0xc6, 0x28, 0x12, 0x29, 0x21, 0xca, 0x56, - 0x1a, 0x50, 0x4b, 0xdd, 0xe5, 0xff, 0xb7, 0xfb, 0x98, 0x6f, 0x00, 0x58, 0x0c, 0xa4, 0x79, 0x24, - 0xbf, 0xf1, 0x45, 0x8a, 0x2f, 0x14, 0x58, 0xa2, 0xc4, 0x21, 0xa1, 0xb5, 0x89, 0xe8, 0x9e, 0xed, - 0xb7, 0x0c, 0x28, 0x4e, 0x3b, 0xef, 0xef, 0xff, 0xd3, 0x5e, 0x7c, 0x30, 0xa0, 0x59, 0xc4, 0xcb, - 0xfe, 0xde, 0xdb, 0x74, 0xe2, 0xc3, 0x0a, 0x09, 0x17, 0x8e, 0x93, 0xfd, 0xbf, 0xfe, 0x58, 0x71, - 0x40, 0x28, 0xbf, 0x4e, 0x5f, 0x5f, 0xeb, 0x55, 0xcb, 0xa5, 0xdd, 0x34, 0xe1, 0xa2, 0x43, 0xc0, - 0xc9, 0xff, 0xb7, 0xdb, 0x6c, 0xc9, 0x87, 0x14, 0x00, 0xc4, 0xd6, 0x4a, 0x57, 0xb7, 0xff, 0x6f, - 0xe2, 0xe9, 0xa7, 0xf0, 0xe2, 0x28, 0x01, 0xdd, 0x5e, 0x90, 0xef, 0xff, 0xd3, 0x27, 0xaa, 0x69, - 0xf9, 0xfb, 0x6d, 0xfc, 0x2e, 0xa1, 0x20, 0x72, 0x9a, 0x3f, 0xf6, 0xdb, 0xf1, 0x52, 0x2a, 0x87, - 0x11, 0x40, 0x91, 0xa0, 0xe3, 0x55, 0x7f, 0xb6, 0xda, 0x69, 0xb6, 0xd9, 0x13, 0xb6, 0xdf, 0xc3, - 0x2a, 0x01, 0xff, 0x3f, 0xf2, 0x9a, 0x6d, 0xb7, 0xfb, 0x6d, 0xa6, 0x9b, 0x6d, 0x95, 0x30, 0xd2, - 0x81, 0x6e, 0xa9, 0x7f, 0xed, 0x8a, 0xba, 0x6d, 0xb7, 0x58, 0x5d, 0x40, 0x22, 0xdf, 0xaa, 0xfd, - 0xff, 0xe9, 0xb7, 0xe9, 0xa7, 0x96, 0x17, 0x50, 0x03, 0x00, 0xb9, 0xa7, 0xe5, 0xff, 0xff, 0xfe, - 0x9b, 0x7d, 0x86, 0x11, 0x00, 0x16, 0xf3, 0x48, 0xa7, 0xcb, 0xff, 0x6d, 0xbf, 0x8b, 0x08, 0xa8, - 0x19, 0xef, 0xd5, 0x34, 0xff, 0x87, 0x91, 0x00, 0x0c, 0x61, 0x2f, 0x7b, 0x2c, 0xfc, 0x9f, 0xb9, - 0xff, 0x76, 0xcf, 0xeb, 0x27, 0x67, 0xc0, 0x91, 0x08, 0x1d, 0x15, 0x22, 0xe4, 0x4b, 0xfe, 0x3b, - 0x30, 0x41, 0x91, 0x86, 0x93, 0x3b, 0x80, 0x63, 0x4c, 0x38, 0xa4, 0x28, 0xa0, 0x03, 0xa5, 0x6c, - 0x9e, 0xb6, 0x39, 0x3f, 0xfd, 0x3a, 0x78, 0x4d, 0x88, 0x03, 0x07, 0xc9, 0x0f, 0xfd, 0xff, 0x1d, - 0x16, 0x09, 0xc7, 0x2a, 0x1f, 0x0b, 0xe0, 0x24, 0x16, 0x89, 0x4c, 0xff, 0xf9, 0x3e, 0x99, 0x60, - 0x12, 0x00, 0x30, 0x8d, 0x30, 0x81, 0xe0, 0xf7, 0x80, 0xf3, 0xe7, 0x00, 0x30, 0x07, 0x45, 0xc9, - 0xc0, 0x00, 0xa2, 0x8e, 0xae, 0x3a, 0x00, 0x2e, 0x51, 0x59, 0x96, 0xa2, 0x88, 0x05, 0x90, 0x76, - 0x02, 0x52, 0xcc, 0x94, 0x00, 0x2a, 0x4e, 0x07, 0x22, 0xc0, 0xc3, 0xe1, 0x20, 0x10, 0x1b, 0x65, - 0xff, 0xc2, 0x78, 0x0c, 0xe0, 0x05, 0xa5, 0x54, 0x0d, 0x50, 0x7f, 0xe5, 0x9f, 0xcb, 0x38, 0xa7, - 0xad, 0x61, 0x92, 0x14, 0x00, 0x40, 0xf6, 0x2b, 0xaf, 0x0c, 0xbb, 0x56, 0xaa, 0x6f, 0x37, 0xff, - 0x97, 0x01, 0x62, 0x07, 0x10, 0x4b, 0x71, 0x5c, 0x76, 0xc5, 0xde, 0x38, 0x18, 0xef, 0x04, 0x21, - 0x80, 0x58, 0x55, 0x26, 0x5f, 0x55, 0xba, 0xc7, 0x03, 0x1d, 0xc5, 0x12, 0x01, 0x0f, 0xad, 0x81, - 0x45, 0xca, 0x00, 0x3e, 0xae, 0x9a, 0xe8, 0xbf, 0xfe, 0xc2, 0x6e, 0x02, 0x06, 0x90, 0x31, 0x7a, - 0xd6, 0xaa, 0xaa, 0xb5, 0xc5, 0x38, 0x4a, 0xd5, 0x13, 0xb8, 0x28, 0x43, 0x42, 0x32, 0x70, 0x12, - 0x2b, 0xa8, 0xf5, 0x61, 0x4c, 0x04, 0xea, 0xf3, 0x8f, 0x7a, 0xba, 0xbf, 0xfc, 0x74, 0x50, 0x11, - 0xde, 0x27, 0xa7, 0x63, 0xb0, 0x4d, 0xc8, 0x2f, 0x63, 0x30, 0x28, 0x23, 0x84, 0x3f, 0xd8, 0x69, - 0x44, 0xa3, 0x8d, 0x91, 0xb8, 0xff, 0xe9, 0xa7, 0xf7, 0xc3, 0x88, 0x40, 0x01, 0xb6, 0x32, 0x2e, - 0xe8, 0x2f, 0x3b, 0xd1, 0x6d, 0xbf, 0x1c, 0xbe, 0x3f, 0xe9, 0x8f, 0x7f, 0xfc, 0x2b, 0x4c, 0x8b, - 0x28, 0x2b, 0xbf, 0xc3, 0xd8, 0x00, 0x72, 0xa3, 0xe3, 0x62, 0xa7, 0x39, 0x8d, 0xdb, 0xdb, 0x6c, - 0x56, 0xed, 0xbb, 0x6d, 0xdb, 0x03, 0xdb, 0xa5, 0x5b, 0xab, 0x28, 0xdc, 0x55, 0x5d, 0xf0, 0xd2, - 0x28, 0x2c, 0x02, 0xe8, 0xd5, 0xaf, 0x6f, 0xfc, 0x79, 0x63, 0x94, 0x04, 0x2f, 0xdb, 0xff, 0xfa, - 0xf8, 0x71, 0x43, 0x80, 0x0c, 0xb7, 0xff, 0xae, 0xea, 0x9a, 0x7f, 0xc3, 0x0a, 0x01, 0x0f, 0xfb, - 0x97, 0xff, 0xab, 0xad, 0xb6, 0xee, 0xae, 0xbf, 0x30, 0xd1, 0x20, 0x89, 0x20, 0xae, 0x1d, 0x5d, - 0x7d, 0xd5, 0xd7, 0xcf, 0x61, 0x89, 0x40, 0x18, 0xa3, 0x96, 0xee, 0x38, 0xbf, 0x7d, 0x5f, 0xdb, - 0x6d, 0xb6, 0xd5, 0xdb, 0x3f, 0x14, 0x2f, 0x0a, 0xe0, 0x07, 0xd5, 0x38, 0x15, 0xc7, 0x7e, 0xaa, - 0x5f, 0xc5, 0xcb, 0xe7, 0xab, 0xfc, 0x32, 0xa0, 0x06, 0x60, 0xfe, 0x60, 0x5c, 0xbb, 0x8f, 0xfa, - 0x6a, 0x9a, 0x69, 0xf7, 0xc3, 0x58, 0x03, 0xd7, 0x1f, 0x52, 0xff, 0xf5, 0x9b, 0xb6, 0x36, 0x98, - 0x78, 0x90, 0x02, 0x20, 0xb2, 0x1e, 0x45, 0x95, 0xbb, 0xff, 0x6d, 0xb9, 0xbb, 0x6e, 0xf1, 0x74, - 0xd3, 0xf8, 0x65, 0x40, 0x17, 0xd5, 0xb1, 0x54, 0xea, 0xeb, 0xf7, 0x7f, 0x6f, 0xdb, 0x0c, 0xa8, - 0x09, 0x4f, 0x95, 0xaf, 0x7d, 0xef, 0x5e, 0x5f, 0x7f, 0x61, 0x9c, 0x00, 0x8a, 0xc9, 0x46, 0xc9, - 0x38, 0x6f, 0x9f, 0xff, 0xfb, 0x0d, 0xe0, 0x0f, 0x0a, 0x39, 0x29, 0x29, 0x7f, 0xe2, 0xd8, 0xb7, - 0x8b, 0x62, 0xd8, 0xc0, 0x00, 0x10, 0x01, 0x43, 0x42, 0xa3, 0x8d, 0xb6, 0xf6, 0xdb, 0x8c, 0x44, - 0x06, 0x13, 0x65, 0x9c, 0xc2, 0x0a, 0x1c, 0x65, 0x88, 0x94, 0xd3, 0xfe, 0x14, 0x50, 0x6a, 0x99, - 0x7f, 0xa6, 0x9b, 0x6d, 0xa6, 0x9b, 0x6d, 0xc3, 0x0a, 0x1a, 0x4f, 0x37, 0xff, 0xdb, 0x6f, 0x63, - 0x0c, 0x28, 0xd9, 0x1f, 0xb6, 0xdf, 0xff, 0x1f, 0x0a, 0x28, 0x33, 0xb2, 0x4d, 0x3d, 0x3e, 0x9a, - 0x7f, 0xc3, 0x8a, 0x0b, 0x0f, 0x12, 0xf6, 0xdb, 0xff, 0xc8, 0x94, 0xd3, 0x4d, 0x3f, 0x86, 0x14, - 0x00, 0x83, 0xed, 0x1f, 0x31, 0x7a, 0xff, 0xf2, 0x26, 0x1c, 0x50, 0x05, 0x07, 0xaa, 0x6f, 0xf7, - 0x7f, 0xa7, 0x9f, 0xed, 0xb6, 0x32, 0xb2, 0x9a, 0x7b, 0x6d, 0xa6, 0x9c, 0x30, 0xa0, 0x0e, 0xfa, - 0x0a, 0xbf, 0xf4, 0xfa, 0x69, 0xa7, 0xed, 0xb7, 0xb1, 0x87, 0x14, 0x04, 0x0e, 0x44, 0x61, 0xaf, - 0xf4, 0xd3, 0xd3, 0x4f, 0x17, 0x56, 0xdb, 0xfe, 0x1c, 0x50, 0x04, 0x8d, 0x63, 0x4a, 0xbf, 0xac, - 0xdb, 0x7b, 0x6d, 0xe9, 0xa7, 0xa6, 0x9f, 0x72, 0x9a, 0x7f, 0xc3, 0x8a, 0x00, 0x22, 0xb3, 0x5c, - 0x8c, 0x5d, 0xff, 0xed, 0xef, 0xa7, 0xe9, 0xa7, 0x94, 0xb3, 0x7b, 0x7f, 0x0e, 0x28, 0x1f, 0x71, - 0xc9, 0xa7, 0xf6, 0xdb, 0xed, 0xb6, 0x9a, 0x6c, 0x4b, 0xa9, 0x7f, 0x87, 0x14, 0x02, 0x3d, 0xee, - 0x19, 0xff, 0xf2, 0xf9, 0xf9, 0xaf, 0x7f, 0x87, 0x9c, 0x01, 0x9d, 0x2a, 0x40, 0x22, 0x55, 0x70, - 0xab, 0x99, 0x3f, 0xff, 0xc3, 0x58, 0x90, 0xc3, 0x10, 0x0d, 0x25, 0x38, 0xf8, 0xbf, 0xe1, 0x6c, - 0x09, 0xfb, 0x29, 0xcb, 0xff, 0xe7, 0xfc, 0x73, 0x84, 0x13, 0xac, 0x7c, 0x32, 0x8a, 0x00, 0x6d, - 0xb0, 0xae, 0x51, 0xc1, 0xf2, 0xd6, 0xe7, 0xef, 0x6b, 0x5b, 0xa6, 0x9b, 0xd6, 0x13, 0x62, 0x9c, - 0x30, 0xcd, 0x7f, 0xff, 0x14, 0xce, 0x05, 0x24, 0x75, 0x90, 0x9b, 0x80, 0x54, 0x14, 0xab, 0x75, - 0x9f, 0xef, 0xef, 0x78, 0x5f, 0x00, 0x4d, 0xaf, 0x23, 0x1f, 0x40, 0x34, 0x8e, 0x6b, 0x06, 0xa4, - 0x62, 0x6a, 0xa4, 0xe7, 0x58, 0x92, 0x4d, 0x25, 0xf1, 0xc4, 0x80, 0x8d, 0xb3, 0x14, 0xda, 0xcc, - 0x34, 0x48, 0x06, 0xb5, 0x0d, 0x5a, 0xbf, 0x7b, 0xff, 0xbb, 0x0c, 0xc4, 0x80, 0x64, 0x95, 0xa7, - 0x45, 0x5f, 0xfe, 0xf7, 0xec, 0x72, 0x9c, 0xc5, 0xf1, 0x38, 0x2c, 0xc9, 0x91, 0x4a, 0x01, 0x28, - 0xe9, 0x6a, 0x54, 0x54, 0x81, 0x12, 0xb5, 0x28, 0xa7, 0x08, 0xe4, 0x77, 0x8e, 0x65, 0x0a, 0xb4, - 0xbe, 0x77, 0x03, 0xa9, 0xa6, 0x61, 0x8c, 0x01, 0x9d, 0xd6, 0xe8, 0x1f, 0x7f, 0xfe, 0xef, 0xfc, - 0x34, 0xe0, 0x56, 0x28, 0x6d, 0xff, 0x6e, 0xdf, 0xfb, 0x09, 0xe0, 0x97, 0x72, 0xf3, 0xf4, 0xf6, - 0xff, 0xe1, 0x37, 0x08, 0x58, 0x44, 0xf4, 0xf6, 0xfd, 0x3d, 0xb8, 0x51, 0x40, 0x16, 0xdd, 0xa7, - 0x1d, 0xa6, 0x9e, 0x9a, 0x5a, 0x69, 0xe9, 0xa7, 0x09, 0xb8, 0x04, 0x7f, 0xcc, 0x83, 0x2f, 0x5f, - 0xea, 0xbf, 0xc3, 0x88, 0xc0, 0x01, 0xbe, 0x65, 0xa6, 0x83, 0xcc, 0x5d, 0x6f, 0x2f, 0x6f, 0x9a, - 0xbf, 0xe0, 0x12, 0xe5, 0x15, 0xdf, 0xe1, 0xb9, 0x00, 0x07, 0xa8, 0xa7, 0x0c, 0xd0, 0xaa, 0x7e, - 0xed, 0x3d, 0x6a, 0xef, 0x10, 0xf3, 0x7a, 0xf8, 0x62, 0x23, 0xac, 0x93, 0xfb, 0x28, 0x97, 0x3a, - 0x9f, 0x0f, 0x60, 0x04, 0x22, 0xf5, 0xac, 0x32, 0x8c, 0x9a, 0x7d, 0x31, 0x59, 0xbc, 0xde, 0xa5, - 0xbd, 0xe4, 0x66, 0x5a, 0x6b, 0xf0, 0xa1, 0x20, 0x0d, 0x1a, 0xcb, 0x3e, 0x79, 0xf4, 0xd3, 0x6c, - 0xfe, 0xf7, 0xbe, 0xb8, 0x70, 0x85, 0x01, 0xda, 0x7c, 0xa0, 0x9a, 0xa6, 0x9b, 0xa9, 0x7b, 0x3a, - 0x6a, 0x5f, 0x31, 0xc7, 0xe6, 0x3b, 0x6d, 0xfc, 0x30, 0xa0, 0x0c, 0x4f, 0x65, 0x85, 0x7a, 0x5b, - 0x77, 0x6d, 0xb2, 0x76, 0xfe, 0x9e, 0x9a, 0x79, 0xf0, 0xde, 0x00, 0xce, 0x01, 0x92, 0x35, 0xd4, - 0x9b, 0xca, 0x7a, 0x64, 0xea, 0xab, 0x72, 0xf7, 0x17, 0x33, 0x5e, 0xff, 0x85, 0xdc, 0x00, 0xc3, - 0x9a, 0x43, 0xaf, 0xbd, 0x7e, 0xae, 0xe6, 0xef, 0xd6, 0xde, 0x2a, 0xb0, 0xe6, 0x00, 0x32, 0xa9, - 0x98, 0x95, 0x55, 0xdb, 0xa5, 0x76, 0xdb, 0x9f, 0xcf, 0xf4, 0xc9, 0xd3, 0x6f, 0x8d, 0xbc, 0x3c, - 0xec, 0x9e, 0xbf, 0x0c, 0x92, 0x00, 0x32, 0x0f, 0xa3, 0x98, 0x74, 0x82, 0xea, 0x2b, 0x98, 0xbb, - 0x97, 0x8a, 0xcb, 0xdd, 0x75, 0x6c, 0x30, 0xa0, 0x35, 0xf0, 0x02, 0xf3, 0x36, 0xdb, 0x6d, 0xae, - 0xbf, 0x57, 0xc7, 0x63, 0xf0, 0xe2, 0x80, 0x10, 0x2f, 0x1d, 0x5b, 0x41, 0x3f, 0xc3, 0x6d, 0x9f, - 0xd6, 0x2a, 0xdb, 0x6c, 0xdf, 0x7b, 0xae, 0x2e, 0xe3, 0xb4, 0x9c, 0xbc, 0xdd, 0xff, 0xe1, 0x84, - 0x40, 0x0d, 0x53, 0x7a, 0xba, 0x9e, 0xdb, 0x7a, 0xfd, 0x34, 0xfb, 0x18, 0xa0, 0x7e, 0x3f, 0x56, - 0x1b, 0xc0, 0x12, 0x00, 0x07, 0xe4, 0x01, 0x3c, 0x00, 0x4d, 0x68, 0x5b, 0x16, 0xd3, 0x4c, 0x5b, - 0x16, 0xd3, 0x4d, 0x34, 0xf7, 0xbc, 0x41, 0x00, 0x4a, 0x2d, 0xb6, 0xdb, 0x7f, 0x0e, 0x28, 0x01, - 0x0b, 0xf5, 0x7b, 0x37, 0x7c, 0x37, 0x3f, 0x9b, 0x37, 0x3f, 0x9b, 0xd3, 0xff, 0x74, 0xd3, 0xf8, - 0x60, 0x90, 0x07, 0x18, 0xd9, 0x8b, 0x1f, 0xe9, 0xa7, 0xa6, 0x4f, 0xa6, 0x50, 0xd2, 0x80, 0x1c, - 0xbf, 0x93, 0x0c, 0x1f, 0xfc, 0xfd, 0xbd, 0xbf, 0x61, 0xec, 0x01, 0xee, 0xa7, 0xdb, 0xc5, 0xaf, - 0xf6, 0xdb, 0xdb, 0x6f, 0x6b, 0x76, 0xff, 0x0d, 0x12, 0x02, 0x3a, 0xe5, 0xd5, 0xad, 0xff, 0xff, - 0x9b, 0x0a, 0x28, 0x11, 0x1a, 0xd3, 0xa7, 0xff, 0xdb, 0xe1, 0x42, 0x40, 0x1a, 0x2b, 0x9c, 0x1b, - 0x7f, 0xa6, 0x9e, 0x9f, 0x86, 0x14, 0x00, 0xe3, 0xd7, 0x83, 0x20, 0xcf, 0x6d, 0xbc, 0x9c, 0xbd, - 0x6d, 0x34, 0xf9, 0xcc, 0x31, 0x80, 0xbb, 0x43, 0x2b, 0xca, 0xea, 0xf5, 0xae, 0xbd, 0xee, 0xc3, - 0x48, 0xa0, 0x8e, 0x46, 0x9f, 0x44, 0xfa, 0x69, 0xfb, 0x6d, 0xed, 0xb6, 0x3e, 0xc3, 0x28, 0xa0, - 0x05, 0xd2, 0xdd, 0x33, 0x5b, 0xf2, 0x69, 0xfe, 0xf7, 0xbc, 0xbd, 0x31, 0x2d, 0x15, 0x43, 0x0a, - 0x00, 0x29, 0xd3, 0x43, 0x5a, 0x6c, 0xe5, 0xd3, 0x67, 0xed, 0xbf, 0x9b, 0xb6, 0xcf, 0x1f, 0xa8, - 0xba, 0x6a, 0x7f, 0x86, 0x88, 0x60, 0x5c, 0x03, 0x0a, 0x9b, 0x6d, 0xa6, 0x9b, 0x6d, 0xf4, 0xcd, - 0xeb, 0x27, 0x4e, 0xb6, 0xc7, 0x4d, 0x87, 0x54, 0x00, 0xfd, 0x58, 0x4a, 0x49, 0x5d, 0x74, 0xdd, - 0x3f, 0xdb, 0x16, 0xd3, 0xcb, 0xe3, 0xca, 0x9d, 0xbf, 0xc3, 0xc4, 0x80, 0x4a, 0x48, 0x8c, 0x3f, - 0x55, 0xde, 0xef, 0xa0, 0xad, 0xd4, 0x4d, 0x35, 0x71, 0x5c, 0x8a, 0xd4, 0x29, 0x81, 0x92, 0xc3, - 0x20, 0x3e, 0x99, 0xa1, 0x9b, 0x7c, 0x76, 0x02, 0x9a, 0x07, 0x35, 0x02, 0xca, 0x2a, 0x8b, 0x21, - 0xc3, 0x83, 0x92, 0xf8, 0x5d, 0x90, 0x02, 0xeb, 0xf4, 0x81, 0xd6, 0xdb, 0xff, 0xfd, 0x61, 0x7c, - 0x02, 0x5c, 0x9a, 0x06, 0x19, 0xf7, 0x2a, 0xd5, 0xff, 0x5f, 0xbe, 0x1a, 0x62, 0x00, 0x26, 0x45, - 0x6a, 0x44, 0x3b, 0xb5, 0x75, 0x7a, 0xd5, 0x6b, 0xad, 0x5d, 0x8b, 0x42, 0x40, 0x17, 0xbc, 0x8c, - 0x0e, 0x55, 0x4d, 0x86, 0x94, 0x01, 0x18, 0x52, 0x36, 0x00, 0xa1, 0x9a, 0xad, 0xef, 0xfe, 0x74, - 0xc2, 0xc8, 0x80, 0x16, 0x06, 0xee, 0x44, 0x4b, 0xf5, 0xad, 0xef, 0x55, 0xc2, 0xe4, 0x80, 0x34, - 0xb4, 0x11, 0x47, 0xad, 0x5f, 0xee, 0xee, 0xef, 0x7a, 0x55, 0x16, 0xca, 0x07, 0x56, 0x87, 0x2c, - 0x27, 0x16, 0x6c, 0xfa, 0xd7, 0xeb, 0x59, 0xd1, 0x83, 0xf4, 0x22, 0x25, 0x15, 0x58, 0x10, 0x40, - 0x80, 0x14, 0x22, 0x69, 0x13, 0x9c, 0xf2, 0x60, 0xa7, 0xc5, 0xcf, 0x38, 0x2e, 0x59, 0xac, 0x5e, - 0x38, 0x06, 0x38, 0x38, 0xe6, 0x40, 0xc0, 0xfc, 0xfc, 0x0a, 0x20, 0x10, 0x80, 0x58, 0x52, 0xf1, - 0x41, 0xa6, 0x2b, 0xcb, 0x85, 0xc7, 0x96, 0xe3, 0x80, 0x06, 0x38, 0x38, 0x96, 0x24, 0x09, 0xbc, - 0x6f, 0xc4, 0x5b, 0x20, 0xbf, 0x67, 0x42, 0x00, 0x21, 0x14, 0x4c, 0x0d, 0xab, 0x74, 0x34, 0xe0, - 0x95, 0xe6, 0x7b, 0x3d, 0x7f, 0xff, 0xb1, 0x2c, 0xa0, 0x1a, 0xc3, 0x9a, 0x88, 0xd6, 0x70, 0xa2, - 0x45, 0x7c, 0x2a, 0xe0, 0x0c, 0xcd, 0x75, 0xf7, 0xd7, 0xff, 0x9f, 0x5b, 0x6c, 0xbb, 0x0d, 0x33, - 0x00, 0x57, 0x37, 0xaa, 0x6d, 0xbd, 0xb6, 0xff, 0xfe, 0xc2, 0x6e, 0x01, 0x31, 0x8d, 0x20, 0xeb, - 0x7b, 0xd3, 0x4f, 0x6d, 0xbf, 0xf0, 0x28, 0x00, 0x5c, 0x46, 0x88, 0x12, 0x3d, 0x5a, 0x89, 0x1f, - 0x67, 0x70, 0x48, 0x01, 0x63, 0x03, 0xf2, 0x56, 0xde, 0xee, 0xdc, 0x14, 0x64, 0x80, 0x0d, 0x41, - 0x96, 0x00, 0x09, 0x0d, 0x35, 0xf7, 0x0a, 0x09, 0x71, 0xec, 0x3f, 0x86, 0xdc, 0x00, 0x5d, 0x4c, - 0x98, 0x36, 0x2a, 0x52, 0x08, 0xfe, 0xbb, 0xad, 0x63, 0xdf, 0x19, 0xe6, 0xf1, 0xef, 0xce, 0x61, - 0x00, 0x94, 0xcd, 0xab, 0xba, 0xca, 0x09, 0x72, 0xf4, 0x5f, 0x84, 0xc8, 0x70, 0x09, 0xb1, 0x1b, - 0xdf, 0xb9, 0x6b, 0xf1, 0x7a, 0xdd, 0xb1, 0x5e, 0x1a, 0x50, 0x02, 0x16, 0xf2, 0xc6, 0xa2, 0x3c, - 0x75, 0x7d, 0x6b, 0x79, 0x7b, 0x6b, 0x19, 0x39, 0x79, 0x86, 0x94, 0x04, 0x66, 0xc6, 0xc1, 0x79, - 0xfa, 0x7b, 0xf4, 0xf4, 0xd3, 0x23, 0xf0, 0xe2, 0x20, 0x03, 0x65, 0x99, 0xb0, 0xe4, 0x2b, 0xab, - 0xd6, 0xb7, 0xfd, 0x53, 0x4f, 0xf8, 0x68, 0x90, 0x01, 0xdf, 0xe6, 0x15, 0x5c, 0x3f, 0xfa, 0xa5, - 0x2f, 0x13, 0xf6, 0x99, 0x3c, 0x5d, 0x5b, 0x4f, 0x17, 0x4d, 0x6b, 0x0e, 0x28, 0x07, 0x25, 0xea, - 0xd4, 0x95, 0x97, 0xba, 0xcb, 0xee, 0x7f, 0x5d, 0xdb, 0x6e, 0x9c, 0x56, 0xdb, 0xfe, 0x1a, 0x50, - 0x0d, 0xe5, 0x0d, 0xb5, 0xe7, 0x3e, 0x5e, 0xce, 0x5e, 0xce, 0xdb, 0x7f, 0x58, 0xe9, 0x61, 0x85, - 0x00, 0x65, 0x91, 0xe8, 0x83, 0x8f, 0xef, 0xd6, 0xe6, 0xe5, 0xfe, 0x6f, 0x53, 0x26, 0x1c, 0x50, - 0x01, 0xda, 0xbd, 0xb5, 0x00, 0xb5, 0xfa, 0xbb, 0xc5, 0xd3, 0x5b, 0x7a, 0x7d, 0x3b, 0xea, 0xb7, - 0xfc, 0x30, 0xa0, 0x06, 0xd2, 0xa8, 0x02, 0x41, 0xfa, 0x55, 0x32, 0x7d, 0x34, 0xc9, 0xe3, 0x5a, - 0x69, 0xb6, 0x6e, 0x3a, 0x4a, 0xa1, 0x85, 0x00, 0x5b, 0xf0, 0xe9, 0x23, 0x7f, 0xbe, 0xff, 0x58, - 0x5f, 0x00, 0x1d, 0xf5, 0x8a, 0xc6, 0xc0, 0x3b, 0x75, 0x9f, 0xd6, 0xb5, 0xaf, 0x8f, 0x8c, 0x05, - 0x43, 0x0a, 0x00, 0xe2, 0xf8, 0x36, 0xae, 0x4c, 0xbe, 0xff, 0x7f, 0xf2, 0xc3, 0x04, 0x80, 0x95, - 0x34, 0x2a, 0xfa, 0xe9, 0x7c, 0xbd, 0x34, 0xe3, 0x4f, 0xf4, 0xf9, 0xf0, 0xd1, 0x24, 0x31, 0x16, - 0xb7, 0xab, 0x57, 0xb6, 0xdf, 0xff, 0x98, 0xc3, 0x44, 0x84, 0x26, 0x6d, 0xad, 0xed, 0xfe, 0xb5, - 0xae, 0xd8, 0x51, 0x40, 0x9b, 0x06, 0x93, 0xe6, 0xb7, 0xfb, 0xab, 0xae, 0xdb, 0x70, 0xce, 0x00, - 0x29, 0x51, 0x27, 0x90, 0x47, 0x2e, 0xef, 0x26, 0xbf, 0xc5, 0x71, 0x5e, 0x9c, 0x50, 0xa6, 0x18, - 0x21, 0x40, 0x09, 0xfa, 0xd7, 0x18, 0xcb, 0xfb, 0xde, 0xf6, 0xdb, 0x4d, 0x3e, 0x98, 0xa1, 0x1b, - 0x0d, 0x48, 0x02, 0x4b, 0x7a, 0xb7, 0x1f, 0xed, 0xb6, 0x9a, 0x75, 0x4c, 0x9d, 0xcc, 0x38, 0xa0, - 0x0c, 0x0c, 0x98, 0xeb, 0xae, 0xd7, 0x6e, 0xed, 0xfe, 0xfc, 0x5d, 0xb6, 0xfe, 0x1a, 0x24, 0x01, - 0x38, 0x62, 0x4a, 0x47, 0x3b, 0xb6, 0xa6, 0xbf, 0x59, 0x3f, 0xf2, 0xc3, 0x8a, 0x00, 0x98, 0x64, - 0x2c, 0x85, 0xa9, 0xa4, 0xf2, 0x78, 0xd3, 0x8d, 0x3a, 0xaf, 0x6d, 0xb7, 0xdb, 0xfe, 0x18, 0x50, - 0x03, 0xfb, 0x28, 0x54, 0xeb, 0x37, 0xd5, 0xaf, 0xa7, 0x97, 0xb6, 0xdb, 0x7f, 0x58, 0x71, 0x40, - 0x18, 0x4f, 0x0d, 0x87, 0x54, 0xe7, 0x76, 0xcd, 0xde, 0x55, 0xd5, 0xdc, 0x9d, 0xd9, 0xc5, 0x36, - 0x9f, 0xf0, 0xa6, 0x05, 0xda, 0xaf, 0xc3, 0xf6, 0xff, 0xbe, 0xfd, 0x61, 0xb2, 0x10, 0x00, 0xa1, - 0xd6, 0x1d, 0xa4, 0x30, 0x99, 0xcd, 0xbd, 0xc5, 0xe2, 0xf7, 0x71, 0x5c, 0x5e, 0x2f, 0x03, 0xae, - 0x2d, 0x69, 0x06, 0x47, 0xc5, 0xff, 0x09, 0xb2, 0x81, 0x11, 0x69, 0xb9, 0xbe, 0xfe, 0x9e, 0xef, - 0x85, 0xd9, 0x43, 0xf1, 0x7e, 0x0b, 0xec, 0xee, 0xff, 0xfa, 0xc3, 0x4e, 0x02, 0xbb, 0xe6, 0x77, - 0xa6, 0x9f, 0xff, 0x7c, 0x2f, 0x80, 0xc1, 0xac, 0xe9, 0xdd, 0xde, 0x9d, 0x7f, 0xef, 0x86, 0xa2, - 0x80, 0x17, 0x56, 0x2e, 0x3c, 0x77, 0xfa, 0xd6, 0xfd, 0xb0, 0xc4, 0x48, 0x02, 0x45, 0x0f, 0x1c, - 0x87, 0xad, 0xde, 0xaa, 0xaa, 0xf7, 0xfb, 0x62, 0xdc, 0x03, 0x6f, 0x2d, 0x29, 0x7c, 0x30, 0x8a, - 0x00, 0xef, 0xc8, 0x43, 0xa2, 0x7a, 0x5f, 0x4e, 0x34, 0xff, 0xfa, 0x3b, 0x86, 0x88, 0x40, 0x67, - 0x47, 0xf5, 0x7f, 0xed, 0xb7, 0x27, 0xe0, 0xe0, 0x10, 0x85, 0x0a, 0x29, 0x93, 0x88, 0xfe, 0xaf, - 0xd5, 0x6a, 0x2e, 0x2e, 0x38, 0x1f, 0x85, 0x9c, 0x22, 0x47, 0xf7, 0xff, 0xfb, 0xf1, 0x58, 0x24, - 0xa4, 0xaf, 0x1c, 0xf1, 0x20, 0xbd, 0x74, 0x72, 0x10, 0x13, 0x0a, 0xaa, 0x9f, 0x1d, 0x80, 0xf9, - 0xea, 0xef, 0x8a, 0x50, 0x46, 0xb2, 0xbd, 0x91, 0xa4, 0x1a, 0x1d, 0x1e, 0x4f, 0x8d, 0x66, 0x15, - 0x4f, 0x8a, 0x63, 0x01, 0x65, 0xc0, 0x71, 0x6c, 0xe0, 0x85, 0x3d, 0x4c, 0xbd, 0x85, 0x89, 0x04, - 0x4e, 0x51, 0x2f, 0xff, 0x6f, 0x6e, 0x25, 0x94, 0x0b, 0xa6, 0xa6, 0x9c, 0x4a, 0x83, 0xdf, 0x8a, - 0xc1, 0x0b, 0x76, 0x22, 0x91, 0x03, 0x60, 0x7a, 0x31, 0x40, 0x36, 0xc9, 0xbe, 0xd7, 0xc3, 0xc8, - 0x50, 0x00, 0x9b, 0x78, 0xa2, 0x16, 0x04, 0xa2, 0xff, 0x29, 0xe5, 0xe6, 0xe9, 0xb7, 0xaa, 0xaa, - 0xcb, 0xf0, 0x89, 0x91, 0x82, 0x7c, 0x74, 0x5e, 0x8f, 0xe1, 0xb6, 0x50, 0x04, 0x13, 0x93, 0x9c, - 0x19, 0xa4, 0xfb, 0xed, 0x6b, 0xe5, 0xec, 0xe2, 0x07, 0x9d, 0xe9, 0x97, 0xc6, 0xde, 0x12, 0x64, - 0x4e, 0x0d, 0x11, 0x75, 0x7f, 0x0c, 0xb3, 0x80, 0x18, 0x9a, 0xd9, 0xa3, 0xaf, 0xf6, 0xb7, 0x97, - 0x58, 0xf1, 0xf5, 0xed, 0x85, 0x54, 0x00, 0x5d, 0x64, 0x4c, 0xe1, 0xe9, 0x7b, 0x5b, 0x7c, 0xbc, - 0xde, 0xdd, 0xcb, 0xdb, 0xe6, 0x77, 0x8b, 0x70, 0xd1, 0x20, 0x22, 0xe3, 0xc4, 0x8e, 0x5e, 0xbf, - 0x4c, 0x9d, 0xb6, 0xe3, 0x4c, 0x6e, 0xc2, 0x84, 0x20, 0x03, 0x33, 0x36, 0x29, 0x7a, 0x7f, 0xf5, - 0x4d, 0x3e, 0x1a, 0x50, 0x03, 0x35, 0x39, 0xdd, 0xfb, 0x8e, 0xbf, 0x52, 0x78, 0xdd, 0x5e, 0x64, - 0xc3, 0xc4, 0x80, 0x81, 0x8c, 0xba, 0xfb, 0xef, 0xad, 0x7e, 0x6e, 0x9e, 0xfb, 0xff, 0x0c, 0x28, - 0x48, 0x39, 0x90, 0x8d, 0xaf, 0x45, 0xbb, 0xeb, 0x17, 0xb5, 0xab, 0xab, 0xab, 0xe1, 0xc5, 0x00, - 0x3a, 0xa6, 0xd8, 0x22, 0xa0, 0x69, 0xbd, 0xef, 0xba, 0xbd, 0x3c, 0x67, 0xf4, 0xd3, 0xf8, 0x5d, - 0xc0, 0x0e, 0xe7, 0x44, 0xbe, 0x75, 0x6b, 0x78, 0xad, 0xef, 0x8a, 0x38, 0xaf, 0x2c, 0x38, 0xa0, - 0x05, 0x1a, 0x9b, 0x19, 0x02, 0x5f, 0x7b, 0x9d, 0xb7, 0xb6, 0xdf, 0x4d, 0x53, 0x4d, 0x34, 0xd3, - 0x1a, 0xab, 0xb6, 0xdf, 0xc2, 0xf2, 0x80, 0x50, 0x7a, 0x69, 0x72, 0xf7, 0xfb, 0xde, 0xb5, 0x05, - 0xd7, 0x86, 0x54, 0x03, 0x6e, 0x0f, 0x5b, 0x6f, 0xf7, 0x8a, 0xfe, 0xf8, 0x75, 0x40, 0x0c, 0x94, - 0xd2, 0x32, 0x00, 0x06, 0x52, 0xba, 0xba, 0xba, 0xb8, 0xb8, 0xac, 0x5c, 0x56, 0xb5, 0x8f, 0xac, - 0x99, 0x32, 0x65, 0xf0, 0xe9, 0x20, 0x17, 0x85, 0x3d, 0x34, 0xaa, 0x9a, 0xf7, 0x7a, 0xd7, 0xc7, - 0xfd, 0x6b, 0xf0, 0xca, 0x80, 0x2e, 0xd3, 0x13, 0x3c, 0xd7, 0xbe, 0xfa, 0xba, 0x8a, 0xd4, 0x57, - 0x9b, 0x0a, 0x92, 0x01, 0x69, 0xa7, 0x0e, 0x08, 0x7d, 0xfa, 0xdd, 0xff, 0x80, 0x7c, 0x01, 0x88, - 0x50, 0xc2, 0x41, 0xca, 0xe3, 0x8b, 0x8b, 0xd4, 0xfe, 0xd7, 0x88, 0x1e, 0x09, 0x00, 0x03, 0xa8, - 0x70, 0x1e, 0x01, 0x21, 0x06, 0x01, 0x48, 0xba, 0xe4, 0xc8, 0x95, 0xf7, 0x75, 0x15, 0xab, 0x8d, - 0x00, 0x03, 0xe8, 0x62, 0xa1, 0xc5, 0x00, 0x30, 0x86, 0xcd, 0x82, 0xf1, 0xbb, 0xd2, 0x7d, 0xe5, - 0xd5, 0x34, 0xdb, 0x6d, 0x34, 0xfc, 0x91, 0x36, 0xdf, 0xf0, 0xd1, 0x20, 0x25, 0x53, 0x1f, 0x92, - 0x4d, 0x3f, 0xf7, 0xf8, 0xa2, 0xe0, 0xc4, 0x04, 0x48, 0x29, 0x88, 0x0e, 0x29, 0xbb, 0x3a, 0x42, - 0x1f, 0x6f, 0xc3, 0x79, 0x06, 0x36, 0x0f, 0x38, 0x34, 0x00, 0x04, 0x00, 0xd0, 0x20, 0x1c, 0x34, - 0x48, 0x5b, 0xe4, 0xb3, 0xaf, 0xfd, 0xfd, 0x70, 0x80, 0x90, 0x59, 0x17, 0x03, 0x78, 0xba, 0xe9, - 0x67, 0xf9, 0x39, 0xb0, 0xf3, 0x80, 0xc2, 0x00, 0x1a, 0x1c, 0xe1, 0xec, 0x04, 0x46, 0xf2, 0xc7, - 0x7d, 0xd5, 0xbd, 0xea, 0xea, 0xde, 0xbd, 0x5d, 0x45, 0xd5, 0xb6, 0xff, 0x86, 0xf0, 0x01, 0x2a, - 0x51, 0x99, 0x05, 0x10, 0x74, 0xbc, 0xdf, 0xbb, 0xab, 0xad, 0xc2, 0x80, 0xe8, 0xe9, 0xc0, 0x7c, - 0x2a, 0x16, 0xf0, 0x51, 0x3f, 0x7c, 0x36, 0xe0, 0x02, 0x3b, 0xfb, 0x02, 0xcb, 0x42, 0x67, 0xef, - 0x8f, 0xd6, 0xb5, 0xf2, 0xf5, 0x2f, 0x5f, 0x09, 0x60, 0x84, 0x1a, 0xc1, 0xd6, 0xd7, 0xb7, 0xc0, - 0x30, 0xfc, 0x34, 0x42, 0x80, 0x3a, 0xc7, 0xb2, 0x46, 0xaa, 0xdf, 0xff, 0xe6, 0xb0, 0xb1, 0x20, - 0x20, 0x2b, 0x8e, 0x84, 0x9c, 0x9f, 0x5f, 0xff, 0x1a, 0x48, 0x0d, 0xc6, 0x55, 0xbb, 0xe1, 0x32, - 0x40, 0x37, 0x98, 0x8d, 0x54, 0xfb, 0xd6, 0xbf, 0x5a, 0xc2, 0x71, 0x00, 0x04, 0xf5, 0xc4, 0x61, - 0x18, 0x0a, 0x5f, 0xdf, 0xa6, 0x9d, 0x6a, 0x9a, 0x69, 0x97, 0xc2, 0xec, 0x48, 0x02, 0x4f, 0x61, - 0x38, 0xf5, 0xad, 0x5e, 0xb5, 0xff, 0xec, 0x34, 0xe0, 0x0a, 0x2d, 0x63, 0x71, 0x26, 0xbf, 0xf7, - 0xfa, 0x5c, 0x34, 0xe0, 0x91, 0x95, 0x57, 0xfa, 0xff, 0x7c, 0x76, 0x1d, 0x2b, 0x18, 0xc5, 0x38, - 0x42, 0xa3, 0xdc, 0x2c, 0x48, 0x03, 0x5f, 0xab, 0x0b, 0xbd, 0x75, 0xff, 0x8d, 0x65, 0x03, 0x46, - 0x52, 0x76, 0x74, 0x50, 0x91, 0x44, 0xfc, 0x45, 0xb8, 0x48, 0xc6, 0xbb, 0x14, 0x8c, 0x30, 0xb1, - 0x4e, 0x11, 0x18, 0xc9, 0xe5, 0x05, 0x02, 0xe9, 0x90, 0x9c, 0x80, 0x0b, 0x4e, 0x86, 0xe4, 0x8b, - 0xfd, 0xef, 0xf8, 0x5f, 0x00, 0x23, 0xbd, 0x3b, 0x04, 0x85, 0xe7, 0x5f, 0xdb, 0x6f, 0x55, 0xf6, - 0x13, 0x24, 0x0c, 0xfe, 0xc2, 0xff, 0xff, 0x8e, 0x70, 0xd3, 0x3a, 0xec, 0x56, 0x0b, 0x78, 0xf2, - 0x14, 0x67, 0x25, 0xff, 0xfb, 0x6c, 0xeb, 0x3c, 0x40, 0x17, 0xae, 0x64, 0x46, 0xce, 0x01, 0xf4, - 0x99, 0xa7, 0xce, 0xe0, 0x16, 0xb9, 0x85, 0x2d, 0xe2, 0x51, 0x00, 0x60, 0xa0, 0xf7, 0xc8, 0x7a, - 0x28, 0x00, 0x4f, 0xc9, 0x1e, 0xe2, 0x1d, 0x7d, 0xfd, 0x25, 0x63, 0xbd, 0xf5, 0xf8, 0x87, 0x97, - 0xd1, 0x80, 0x25, 0x4b, 0xf1, 0xaa, 0x8d, 0xb2, 0x89, 0x77, 0xc3, 0x92, 0x80, 0x19, 0xc0, 0xca, - 0x8f, 0x4c, 0x57, 0xaf, 0xb4, 0xbe, 0x5f, 0x24, 0xf1, 0xc7, 0x93, 0x97, 0xd4, 0x5b, 0x27, 0x06, - 0x2d, 0x99, 0xd6, 0xdf, 0xf8, 0x61, 0x40, 0x27, 0xb3, 0xa8, 0xbb, 0xe7, 0xff, 0x6f, 0x5a, 0xfc, - 0xdf, 0x1f, 0x61, 0x85, 0x00, 0x21, 0x6d, 0xc3, 0x25, 0x23, 0xb9, 0xf1, 0x5d, 0x6d, 0xb7, 0x1a, - 0x6b, 0x4d, 0x3e, 0x2c, 0x30, 0xa0, 0x0a, 0x63, 0x4a, 0x18, 0x14, 0x2e, 0x45, 0xd3, 0x57, 0xba, - 0xff, 0x7a, 0xc3, 0x0a, 0x00, 0x36, 0xfa, 0x8c, 0x69, 0xc2, 0x9e, 0x99, 0x5d, 0x6d, 0xbd, 0xd6, - 0xbb, 0x93, 0xdb, 0xe1, 0xc5, 0x01, 0x3e, 0x31, 0x07, 0x7f, 0x62, 0xba, 0xba, 0xba, 0xba, 0xd6, - 0x2e, 0x2b, 0x17, 0x15, 0xe5, 0x4f, 0xfc, 0x28, 0xa0, 0x11, 0xaa, 0xc9, 0xa1, 0xfa, 0xb7, 0xf4, - 0xd5, 0xee, 0xba, 0xc3, 0x0a, 0x00, 0xa0, 0xf4, 0x61, 0xac, 0xff, 0xd7, 0xfb, 0xef, 0xe3, 0x29, - 0x85, 0x14, 0x01, 0xad, 0xf3, 0x10, 0x1b, 0xbc, 0xdb, 0xfd, 0x6a, 0xea, 0xeb, 0x82, 0x00, 0x72, - 0x14, 0x2a, 0xbe, 0xef, 0xb7, 0x12, 0xe8, 0x3a, 0x2c, 0xc1, 0xd1, 0x60, 0x3a, 0x2c, 0x1c, 0x00, - 0x18, 0xe0, 0x00, 0x63, 0x0c, 0xe0, 0x22, 0x6e, 0x39, 0x5f, 0xff, 0xef, 0xef, 0x86, 0xb0, 0x03, - 0x31, 0xda, 0x0a, 0x7d, 0xfa, 0xb9, 0xd5, 0xc5, 0xff, 0xdd, 0xb1, 0x5b, 0x22, 0xec, 0x30, 0x48, - 0x03, 0x34, 0x72, 0xf9, 0xca, 0x57, 0xd6, 0xad, 0xab, 0xc5, 0x6b, 0x59, 0x53, 0x0c, 0x92, 0x02, - 0x3b, 0xc6, 0x6e, 0xe7, 0xdb, 0xb7, 0xfd, 0x35, 0xab, 0xd6, 0x18, 0xc0, 0x0d, 0x73, 0x9e, 0x69, - 0x6c, 0xae, 0xaf, 0xea, 0xea, 0x2b, 0x6f, 0xc5, 0x86, 0x70, 0x09, 0x84, 0xc2, 0xab, 0x93, 0x5a, - 0xfd, 0xfe, 0xff, 0xb0, 0xd2, 0x80, 0x4a, 0x17, 0x34, 0x66, 0x5d, 0xf4, 0xd5, 0x56, 0xbf, 0x15, - 0x7c, 0x34, 0xa1, 0x3d, 0xeb, 0xbf, 0x4f, 0xff, 0xac, 0x3c, 0xa0, 0x0c, 0x82, 0x3d, 0xac, 0xf5, - 0xbe, 0x75, 0x75, 0xbd, 0xfe, 0xf1, 0x5a, 0xd6, 0xbf, 0x81, 0x40, 0x0d, 0x03, 0x77, 0x97, 0x22, - 0xf5, 0x1c, 0x57, 0xe1, 0x30, 0x01, 0xa4, 0x6e, 0xa2, 0x5f, 0x58, 0x62, 0xc0, 0x07, 0x0d, 0xfb, - 0x6d, 0xbf, 0xf0, 0x24, 0x81, 0x04, 0x13, 0x57, 0x2c, 0xea, 0xf1, 0x0e, 0x43, 0x16, 0x00, 0x07, - 0x1a, 0x38, 0xcc, 0x01, 0x87, 0x67, 0x37, 0x5d, 0xbe, 0x9d, 0x43, 0x58, 0x02, 0x2e, 0xc6, 0xef, - 0xa7, 0x62, 0xba, 0x8a, 0xf1, 0x78, 0xbd, 0xef, 0x5a, 0x91, 0xf8, 0x69, 0x40, 0x18, 0x55, 0xb4, - 0x97, 0xfd, 0x6a, 0xbf, 0xf6, 0xea, 0xf9, 0x11, 0xb0, 0xf1, 0x05, 0x00, 0x07, 0x67, 0x46, 0x62, - 0x34, 0x29, 0xce, 0x9f, 0xfe, 0x96, 0xa7, 0xe3, 0x7d, 0xca, 0x77, 0xd3, 0x06, 0x09, 0xa0, 0x05, - 0x13, 0xf7, 0x27, 0xea, 0x2e, 0xa0, 0x71, 0x39, 0x93, 0xbc, 0x36, 0x82, 0x7e, 0x19, 0x89, 0x00, - 0x50, 0xe7, 0x02, 0x45, 0x9c, 0xcf, 0x7a, 0xd6, 0xea, 0xeb, 0xe6, 0x5e, 0x2c, 0x90, 0x07, 0xf5, - 0xa1, 0xd6, 0xd2, 0xc2, 0xb3, 0x80, 0x19, 0x5a, 0x8b, 0xb5, 0xf3, 0xd6, 0x6c, 0xff, 0xff, 0x0d, - 0x22, 0x00, 0xde, 0x99, 0x24, 0xcf, 0x47, 0xff, 0xef, 0x8e, 0x24, 0x04, 0x4c, 0xda, 0x9d, 0x5d, - 0x86, 0x5c, 0x00, 0x45, 0x1b, 0x68, 0x8e, 0xc8, 0x7f, 0xb7, 0xc4, 0x3e, 0x5f, 0xeb, 0x7a, 0x5c, - 0x2d, 0x10, 0x00, 0x60, 0xe6, 0x74, 0x06, 0x22, 0xe7, 0xcf, 0xbf, 0xbb, 0xdf, 0x7c, 0x2e, 0x41, - 0x20, 0x0e, 0x2f, 0x5b, 0x8d, 0x7b, 0xfd, 0xef, 0xee, 0x63, 0x67, 0x02, 0x3d, 0xc9, 0x71, 0xf0, - 0xb2, 0x20, 0x74, 0x31, 0xaf, 0xff, 0x7b, 0xe3, 0x88, 0x50, 0x84, 0x9d, 0x4c, 0xf8, 0xd7, 0x05, - 0x84, 0xc8, 0xe7, 0x63, 0x5c, 0x1e, 0xb7, 0xb1, 0x4e, 0x1b, 0x49, 0xfc, 0x53, 0x20, 0x03, 0x22, - 0xfc, 0xa6, 0x0d, 0x1d, 0x87, 0xe3, 0x7c, 0x73, 0x86, 0x00, 0x61, 0x2a, 0xc4, 0xc8, 0x00, 0x49, - 0xc7, 0x14, 0x33, 0xb1, 0x68, 0xec, 0x0a, 0x94, 0x54, 0xbd, 0x86, 0xb0, 0x0c, 0x75, 0xd6, 0xcf, - 0xfe, 0x9f, 0xfb, 0x10, 0x8e, 0x00, 0x7b, 0xda, 0x65, 0xf2, 0xf4, 0x2c, 0xa1, 0x07, 0x07, 0x0f, - 0x5b, 0xff, 0xf7, 0xc2, 0xd8, 0x69, 0x53, 0xaf, 0xa1, 0x68, 0x5f, 0x0a, 0x3f, 0xe8, 0xdb, 0x35, - 0x6d, 0xd3, 0xf8, 0x5a, 0x43, 0x3f, 0xfe, 0x9f, 0xb3, 0xc5, 0xb3, 0x80, 0xb3, 0x40, 0x61, 0xd5, - 0x88, 0xc0, 0x84, 0xe7, 0x20, 0xdd, 0x1b, 0x80, 0x33, 0xf4, 0x39, 0xff, 0x6f, 0xfb, 0x0c, 0xa3, - 0x00, 0x33, 0xce, 0x32, 0x0e, 0xdd, 0xbb, 0xdd, 0xdd, 0xff, 0xfd, 0x86, 0xe6, 0x00, 0xe5, 0x4b, - 0x6b, 0x9f, 0x9f, 0xc3, 0x91, 0x03, 0xcb, 0x3f, 0x15, 0x92, 0x8f, 0xdc, 0x4f, 0xd8, 0x62, 0x86, - 0x90, 0x74, 0x5e, 0x1d, 0xf9, 0x1f, 0xdd, 0xe1, 0xa6, 0x70, 0x02, 0xb9, 0x7e, 0x34, 0xbb, 0xfc, - 0xeb, 0xdf, 0xf2, 0x72, 0x72, 0x76, 0x7e, 0xc3, 0x38, 0x01, 0x83, 0xa2, 0x1a, 0x31, 0xf7, 0x78, - 0xbf, 0x55, 0xf5, 0x55, 0x5c, 0x95, 0x43, 0xa4, 0x80, 0x0f, 0xf5, 0x96, 0x35, 0x33, 0x55, 0xff, - 0x1f, 0x75, 0x77, 0xbc, 0x9e, 0x35, 0x15, 0x8a, 0x8f, 0x5f, 0xe1, 0xa2, 0x10, 0x02, 0xda, 0x60, - 0xe3, 0xcb, 0x5d, 0xef, 0xb7, 0xbb, 0x67, 0xfa, 0xc2, 0xee, 0x04, 0x48, 0xaf, 0x83, 0xdf, 0xef, - 0xbf, 0x5d, 0x61, 0x89, 0x40, 0x16, 0xdd, 0x85, 0x21, 0xf3, 0x7f, 0xc9, 0xcb, 0xd6, 0xdf, 0x0b, - 0xa8, 0x00, 0x85, 0xf8, 0x7b, 0xf8, 0xfb, 0xf6, 0xfd, 0xc4, 0xfd, 0x6a, 0xf3, 0xcb, 0x0d, 0x90, - 0x80, 0x25, 0x1f, 0x15, 0x96, 0xeb, 0xdd, 0x5d, 0x5d, 0x11, 0xe0, 0x8a, 0x94, 0x62, 0x1f, 0x15, - 0xcf, 0xad, 0x7e, 0x1c, 0x50, 0x15, 0x3b, 0x7e, 0x05, 0xe5, 0xfd, 0xfe, 0xb6, 0xf8, 0xeb, 0xad, - 0x34, 0xfa, 0xfc, 0x46, 0x44, 0x5b, 0x6d, 0xfc, 0x2f, 0x80, 0x37, 0x19, 0x9a, 0x8f, 0x4f, 0xb6, - 0xed, 0xcd, 0xf5, 0xad, 0x53, 0x2d, 0x2e, 0x6b, 0x0e, 0xca, 0x00, 0x7a, 0xe4, 0x39, 0x3d, 0xa5, - 0xef, 0xc7, 0xbb, 0x51, 0xdd, 0x35, 0x3f, 0x32, 0x7b, 0x7f, 0x0c, 0xe0, 0x01, 0xde, 0xec, 0xf3, - 0x92, 0xdf, 0x97, 0xc9, 0xd5, 0x3b, 0xeb, 0xf8, 0xa5, 0xb0, 0xce, 0x00, 0x63, 0x28, 0xa9, 0xb3, - 0x53, 0xaa, 0xbd, 0xeb, 0x37, 0x6d, 0xf5, 0x8f, 0x85, 0x70, 0x03, 0x77, 0x43, 0x8b, 0x10, 0x5d, - 0x6b, 0xdd, 0x55, 0x56, 0xf7, 0x5a, 0xe1, 0x75, 0x00, 0x6c, 0xf3, 0xf0, 0x7d, 0xdd, 0xdf, 0x5b, - 0xdf, 0x7c, 0x32, 0xa0, 0x08, 0xe9, 0x28, 0x0c, 0x51, 0xf9, 0x6b, 0x75, 0x75, 0x5a, 0xc5, 0x6a, - 0x2b, 0x52, 0x58, 0x57, 0x00, 0x03, 0xff, 0xd6, 0x6a, 0x04, 0xeb, 0xbd, 0x5d, 0x5e, 0xb5, 0xba, - 0xbc, 0x2e, 0x48, 0x04, 0xdf, 0x78, 0x43, 0xcf, 0x75, 0x75, 0x7b, 0xdc, 0x5d, 0xc5, 0xe3, 0xe1, - 0xa9, 0x00, 0x1c, 0xa9, 0xc6, 0x58, 0x77, 0x17, 0xbb, 0x5f, 0x7b, 0xbc, 0x56, 0xb7, 0x8a, 0xfb, - 0x0b, 0x29, 0x18, 0x30, 0x6b, 0xd6, 0xfa, 0xde, 0xf5, 0xe2, 0xbb, 0x93, 0xc2, 0xca, 0x01, 0x6d, - 0x6e, 0x76, 0xff, 0xd7, 0x96, 0x1f, 0x0c, 0x23, 0x80, 0x06, 0xfe, 0x9b, 0xf7, 0x02, 0x82, 0x69, - 0xef, 0xd3, 0x4f, 0x5f, 0x9d, 0x5c, 0x04, 0x48, 0x04, 0x00, 0x68, 0xe3, 0x75, 0xad, 0x34, 0x86, - 0xf3, 0x15, 0x87, 0x46, 0x22, 0xb6, 0xae, 0x0a, 0xa5, 0xc0, 0x51, 0x39, 0x27, 0xc0, 0x00, 0xc7, - 0xbe, 0x00, 0x04, 0xb8, 0xb0, 0x00, 0x31, 0x06, 0x13, 0x63, 0x81, 0xc6, 0xfa, 0xbf, 0xbe, 0x19, - 0x94, 0x19, 0xdb, 0x61, 0x25, 0x60, 0x11, 0x77, 0xf9, 0x55, 0xbf, 0x4f, 0x88, 0xf5, 0xcb, 0xa9, - 0x7a, 0x8b, 0xea, 0xe1, 0x64, 0x56, 0x1a, 0x21, 0xc0, 0x11, 0xeb, 0x15, 0x81, 0x2b, 0x5f, 0xff, - 0x14, 0x7c, 0x51, 0x20, 0x15, 0xd4, 0xd2, 0x68, 0x4d, 0xc2, 0x54, 0x63, 0x5e, 0x7f, 0xdf, 0xfc, - 0x2d, 0x82, 0xe2, 0xa5, 0xbf, 0x6f, 0xff, 0x1c, 0xe1, 0x4e, 0x8f, 0x8a, 0x70, 0x33, 0x0d, 0x38, - 0xe0, 0x22, 0x42, 0x95, 0x11, 0x48, 0xb2, 0x65, 0x15, 0x4c, 0x14, 0x26, 0x54, 0x1e, 0x7e, 0xac, - 0xa8, 0x39, 0xb9, 0x59, 0x2b, 0x54, 0x63, 0x58, 0xca, 0xba, 0x15, 0x24, 0xa3, 0x80, 0x00, 0x80, - 0x34, 0x70, 0x38, 0x55, 0xc0, 0x1f, 0x21, 0x59, 0x55, 0xa8, 0xd3, 0x02, 0xfa, 0xd6, 0x21, 0xe9, - 0xb7, 0xb7, 0xfc, 0x26, 0xca, 0x1b, 0x07, 0x4f, 0xde, 0xff, 0x7d, 0xe1, 0x6c, 0x11, 0x35, 0x75, - 0xbf, 0xfe, 0xb5, 0x8b, 0x70, 0x5a, 0xf9, 0xf0, 0xbb, 0x86, 0x1d, 0x8f, 0xf5, 0xad, 0x6b, 0x7c, - 0x2c, 0xe0, 0x5b, 0x0c, 0xac, 0xff, 0xba, 0xfe, 0x39, 0xc2, 0xc0, 0x0a, 0x13, 0xe2, 0xb0, 0xfd, - 0x39, 0x8e, 0x70, 0x43, 0x95, 0xbf, 0xaf, 0x84, 0xf0, 0x01, 0x4b, 0x5e, 0x68, 0x2d, 0x4a, 0x5f, - 0x7f, 0xfe, 0x9e, 0x7e, 0xef, 0x6f, 0x0d, 0x48, 0x00, 0x6f, 0xe7, 0x8b, 0x6e, 0xb7, 0xd6, 0xbf, - 0xfe, 0xc5, 0x4a, 0x08, 0x71, 0xd6, 0xa2, 0x1c, 0x13, 0x29, 0xc5, 0xb9, 0xe5, 0x01, 0xae, 0x34, - 0xfe, 0x43, 0x52, 0x01, 0x22, 0xf5, 0x38, 0xff, 0x5f, 0xfd, 0x85, 0x94, 0x22, 0xf7, 0x6f, 0xd3, - 0xff, 0xf0, 0xcb, 0x80, 0x4b, 0xbc, 0xb3, 0x39, 0x66, 0x8f, 0xfe, 0x8d, 0xb4, 0xfd, 0x85, 0x94, - 0x02, 0x6d, 0xc5, 0x87, 0xfc, 0xf9, 0x7f, 0xd3, 0x6f, 0xf1, 0x44, 0x80, 0x21, 0xea, 0x1e, 0x81, - 0xea, 0x14, 0x67, 0x01, 0xfa, 0x73, 0xbf, 0xff, 0x6e, 0xde, 0x25, 0x90, 0x04, 0x0b, 0x8c, 0x15, - 0x5f, 0x11, 0x8e, 0x0d, 0xad, 0x1f, 0x86, 0x41, 0x00, 0xd1, 0x41, 0x7d, 0x0f, 0x0b, 0x15, 0x9f, - 0x62, 0xb0, 0x0f, 0xf5, 0xa5, 0x9a, 0x92, 0x4a, 0xa2, 0xe3, 0x94, 0x9e, 0x1e, 0x3a, 0xf9, 0x66, - 0x04, 0xc0, 0x01, 0x0d, 0x0f, 0x25, 0x28, 0x3f, 0xe0, 0x82, 0x36, 0x58, 0xb1, 0x4c, 0xb5, 0xae, - 0x14, 0x1a, 0x4e, 0x79, 0x99, 0xba, 0x7b, 0x24, 0x81, 0xc0, 0xef, 0x21, 0x7e, 0x54, 0x25, 0xcc, - 0x70, 0x03, 0xe0, 0xd5, 0x77, 0xf0, 0xc9, 0x0e, 0x01, 0xb7, 0x65, 0xa2, 0xd5, 0xf3, 0xea, 0xbe, - 0x9a, 0x6b, 0x57, 0x7c, 0x32, 0xa0, 0x06, 0x23, 0xa2, 0x87, 0x55, 0x72, 0xf5, 0x15, 0xab, 0xab, - 0xad, 0xb7, 0x97, 0xc5, 0x87, 0x14, 0x00, 0x40, 0xce, 0xa2, 0x46, 0x77, 0xbf, 0xca, 0x6f, 0x6d, - 0xfd, 0xfe, 0xf5, 0xcb, 0xf8, 0xd4, 0x0c, 0xa9, 0xff, 0x0c, 0x28, 0x0b, 0xd5, 0x48, 0x75, 0x2f, - 0xf3, 0xff, 0xdb, 0x6d, 0x8c, 0x30, 0xa0, 0x0e, 0x94, 0xc5, 0x22, 0x36, 0x7f, 0xea, 0xfa, 0xc7, - 0x6c, 0x28, 0xa0, 0x12, 0x89, 0x43, 0xb5, 0x19, 0xda, 0xef, 0x7d, 0x34, 0xe2, 0xb4, 0xc4, 0x3e, - 0x19, 0x50, 0x03, 0xdf, 0x15, 0x29, 0x5b, 0x01, 0x8d, 0xdd, 0xdd, 0xdd, 0xdf, 0x79, 0x96, 0x76, - 0x7d, 0x34, 0xdc, 0xc3, 0x0a, 0x28, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0xff, 0xe3, 0xe1, 0x9c, - 0x00, 0x5f, 0xfb, 0x44, 0x6e, 0xc2, 0x7c, 0x6e, 0x6f, 0x6d, 0xb7, 0x59, 0xad, 0x34, 0xf8, 0x78, - 0x61, 0x40, 0x1b, 0x7a, 0x85, 0x64, 0x94, 0xf5, 0xfb, 0x8d, 0x3c, 0x5b, 0x39, 0xf2, 0xf5, 0x75, - 0x76, 0xfc, 0xc4, 0xaa, 0x17, 0x70, 0x10, 0x0c, 0x8f, 0x04, 0x5a, 0xbb, 0xc6, 0x7c, 0x6f, 0x6f, - 0x7b, 0xfc, 0x10, 0x21, 0x54, 0x33, 0x80, 0xc8, 0x29, 0x30, 0xa3, 0x97, 0xd2, 0xeb, 0x5e, 0x2e, - 0xea, 0xe9, 0x97, 0x8b, 0x96, 0xfb, 0x0c, 0x28, 0x00, 0xfa, 0xdb, 0x07, 0xa7, 0x39, 0x8b, 0x28, - 0xa3, 0x51, 0x46, 0xae, 0xaf, 0x59, 0xfd, 0xeb, 0x6d, 0xd4, 0x63, 0x61, 0xe2, 0x40, 0x0e, 0x39, - 0x0a, 0x2f, 0x57, 0x76, 0x2c, 0x5e, 0xf7, 0x51, 0x73, 0xf2, 0x7b, 0xd7, 0x45, 0x6d, 0xf7, 0xf8, - 0x65, 0x40, 0x0c, 0x23, 0xde, 0x3a, 0x87, 0xc5, 0x6d, 0x5b, 0xf5, 0x75, 0x75, 0x7b, 0x87, 0x9c, - 0x4e, 0xa1, 0xec, 0x00, 0x7d, 0x23, 0x49, 0x30, 0x2f, 0xcb, 0x6f, 0xbd, 0xd6, 0x2e, 0xe9, 0xba, - 0x6e, 0x35, 0x2b, 0xff, 0x86, 0x9c, 0x02, 0x00, 0xfa, 0x9a, 0xef, 0xa9, 0xaa, 0x77, 0xbe, 0xff, - 0x8e, 0xd8, 0x61, 0x40, 0x23, 0x04, 0x85, 0xf6, 0x17, 0xce, 0xae, 0xb7, 0xbf, 0xdd, 0xe5, 0x56, - 0x19, 0x50, 0x03, 0x15, 0xb6, 0xe0, 0xc8, 0xfb, 0xbe, 0xbb, 0x7a, 0xf5, 0xfb, 0x76, 0xf5, 0x85, - 0x89, 0x00, 0x39, 0x97, 0xa6, 0x37, 0x0e, 0x64, 0xf4, 0xfe, 0x7f, 0xee, 0xae, 0xb0, 0xe1, 0x05, - 0x00, 0x02, 0x5e, 0x28, 0x8e, 0xaa, 0xec, 0x46, 0x1d, 0xaa, 0x57, 0xff, 0xdc, 0x14, 0x13, 0xf0, - 0x55, 0xeb, 0xe3, 0xe8, 0x1b, 0xc2, 0xaf, 0x7c, 0x3c, 0x48, 0x00, 0x4e, 0xe6, 0x02, 0x28, 0xac, - 0x4a, 0xec, 0x63, 0xc9, 0x89, 0xd1, 0x8a, 0x20, 0xc8, 0x28, 0xb4, 0xe5, 0xd7, 0x1e, 0xb8, 0xf5, - 0xc7, 0xaf, 0xb5, 0x47, 0xae, 0x3d, 0x71, 0xeb, 0x8f, 0x5e, 0x75, 0x11, 0x85, 0x3f, 0x67, 0xd7, - 0xe1, 0xac, 0x2c, 0x70, 0x07, 0x69, 0x6b, 0x5b, 0xdf, 0xef, 0xef, 0x86, 0x88, 0x24, 0x04, 0x4c, - 0x38, 0x69, 0xcb, 0xff, 0x7f, 0xd1, 0xc7, 0x0a, 0x12, 0x00, 0x60, 0x2e, 0x4d, 0x33, 0x3a, 0x7d, - 0xdb, 0x3f, 0x6d, 0xfd, 0x5f, 0xbd, 0xe1, 0x37, 0x00, 0x68, 0xd9, 0xc2, 0x39, 0xff, 0x8f, 0xbf, - 0xbd, 0xdf, 0xe1, 0x99, 0xc0, 0x1d, 0x7a, 0x34, 0x8d, 0xee, 0xdb, 0x7f, 0xff, 0xec, 0x74, 0x82, - 0x79, 0xd8, 0x58, 0x91, 0xb1, 0x25, 0xff, 0x77, 0xfc, 0x51, 0x20, 0x0c, 0xaa, 0xf8, 0x25, 0x07, - 0xe8, 0x51, 0x10, 0x00, 0x6f, 0xb2, 0xf8, 0x61, 0x13, 0x85, 0xef, 0x4b, 0xf4, 0xd3, 0x4d, 0x3f, - 0x72, 0xfe, 0x29, 0xc1, 0x28, 0xe0, 0x2a, 0x23, 0xb0, 0x45, 0x47, 0x6f, 0x4f, 0x84, 0xd9, 0xc0, - 0x1a, 0x36, 0x58, 0xc2, 0xbf, 0xfe, 0xf7, 0x8a, 0x70, 0x33, 0xb9, 0x23, 0x94, 0x12, 0x1d, 0xcb, - 0xd1, 0xf1, 0xd8, 0x21, 0x30, 0x0e, 0x99, 0xf1, 0xc8, 0x81, 0x2e, 0x4a, 0xb0, 0xcb, 0x80, 0x1a, - 0x37, 0x0b, 0x2f, 0xed, 0xff, 0xf6, 0xff, 0xeb, 0x14, 0xe1, 0xed, 0x4e, 0x13, 0x65, 0x00, 0xb3, - 0x0f, 0x10, 0x0e, 0xe0, 0xaa, 0xab, 0xff, 0xaa, 0xc2, 0xf8, 0x21, 0xe1, 0x01, 0x37, 0x56, 0xd3, - 0xae, 0xbf, 0x5f, 0xd8, 0xac, 0x11, 0x3b, 0x9d, 0x58, 0x57, 0x02, 0x2f, 0xc3, 0xfb, 0xdf, 0xf9, - 0xb9, 0x7f, 0xf0, 0xb3, 0x81, 0x0a, 0xa4, 0x93, 0x7a, 0x7a, 0x7f, 0xf0, 0xae, 0x13, 0x05, 0xa3, - 0xec, 0xeb, 0xff, 0x09, 0xb8, 0x08, 0x40, 0xd8, 0x82, 0xbf, 0xb4, 0xba, 0xfd, 0x35, 0x4f, 0xe1, - 0x99, 0x41, 0x05, 0x06, 0xb6, 0x61, 0x34, 0xff, 0xff, 0xac, 0x26, 0xe0, 0x0b, 0xbe, 0x59, 0x5e, - 0x3b, 0x72, 0xff, 0x6f, 0xb7, 0xf0, 0xab, 0x80, 0xa4, 0xd7, 0xf9, 0xff, 0xed, 0xa7, 0xc2, 0x6e, - 0x01, 0x03, 0x5c, 0xab, 0xe6, 0x66, 0x8d, 0x1b, 0x3f, 0x4e, 0xff, 0x8b, 0x70, 0x27, 0x46, 0xe1, - 0xa3, 0x76, 0x18, 0x44, 0x00, 0x67, 0x77, 0x34, 0x62, 0x3b, 0xdc, 0xed, 0xef, 0x7f, 0xf6, 0xe0, - 0xc4, 0x0c, 0x23, 0x46, 0x12, 0xd4, 0x56, 0x2e, 0xac, 0xa2, 0x4a, 0x73, 0xcb, 0x64, 0xa6, 0xb3, - 0x96, 0x0d, 0xe4, 0x4f, 0x96, 0x67, 0x06, 0x08, 0x85, 0x61, 0x28, 0x68, 0xa2, 0x22, 0x60, 0x04, - 0x84, 0x61, 0xcf, 0x58, 0x9f, 0xf8, 0x62, 0x2c, 0x01, 0xc0, 0x35, 0x53, 0x95, 0x14, 0x4d, 0x3e, - 0x9a, 0x79, 0x6b, 0x15, 0x71, 0xa6, 0x0e, 0xfc, 0x55, 0xc6, 0x5e, 0x57, 0x30, 0xa1, 0x20, 0x20, - 0x5c, 0x50, 0x5a, 0xbd, 0xef, 0xa6, 0x9a, 0xc9, 0xd3, 0x86, 0x14, 0x00, 0xcb, 0xeb, 0x78, 0x97, - 0xd7, 0x7f, 0xd7, 0x7b, 0xd8, 0xc3, 0x0a, 0x00, 0x90, 0x55, 0xc6, 0x40, 0xff, 0xfb, 0xfc, 0xe6, - 0x16, 0x50, 0x04, 0xe9, 0x76, 0xc0, 0x1b, 0xde, 0x57, 0x57, 0x5d, 0x56, 0xaf, 0x5a, 0xc3, 0x0a, - 0x04, 0xcc, 0x49, 0x1b, 0x6f, 0xba, 0xbf, 0xf9, 0x2c, 0x34, 0x88, 0x23, 0x36, 0xde, 0xbf, 0xf7, - 0xff, 0xf2, 0xc6, 0x90, 0xe0, 0x14, 0xd0, 0x58, 0x70, 0xcc, 0x54, 0xc3, 0x32, 0x00, 0x2c, 0x4c, - 0xa8, 0x18, 0x12, 0x4f, 0x5b, 0xa7, 0xe6, 0xf5, 0xcd, 0xb6, 0xf0, 0x43, 0x32, 0x86, 0x94, 0x00, - 0xff, 0x79, 0x0d, 0x65, 0xb6, 0x57, 0x57, 0xad, 0xb5, 0x7b, 0xe9, 0xa6, 0x29, 0xec, 0x3c, 0xa0, - 0x02, 0x2a, 0x02, 0xce, 0xda, 0x9c, 0xd8, 0xaf, 0x17, 0xa6, 0xff, 0x83, 0xee, 0x2d, 0x96, 0x85, - 0xad, 0x32, 0x70, 0x7d, 0xcb, 0xb6, 0xf6, 0x72, 0xec, 0x7d, 0xfd, 0xdb, 0x6d, 0xb6, 0xf8, 0x61, - 0x10, 0x01, 0x1f, 0xc4, 0xb2, 0x6b, 0x4f, 0xd3, 0xe4, 0xfe, 0x9d, 0xed, 0x3b, 0x7f, 0x61, 0xc4, - 0x50, 0x02, 0x6f, 0xe3, 0x21, 0x53, 0xaf, 0xa2, 0x69, 0x93, 0x97, 0x69, 0x93, 0x83, 0xfe, 0x5d, - 0xff, 0x6e, 0x36, 0x9d, 0x34, 0xd3, 0x4f, 0x86, 0x70, 0x0d, 0xf3, 0xcd, 0xbb, 0xb7, 0xb7, 0x7f, - 0xea, 0xe9, 0xd6, 0x95, 0x42, 0xf8, 0x01, 0xb5, 0xa5, 0x92, 0x3b, 0x7c, 0x5a, 0xf5, 0xd5, 0xd5, - 0x57, 0x1b, 0xb0, 0xbe, 0x00, 0x6b, 0x99, 0xc6, 0x39, 0xbf, 0x3a, 0xbf, 0xc5, 0x71, 0x5e, 0xf7, - 0x25, 0x85, 0xf0, 0x09, 0xe2, 0x5d, 0x14, 0xf9, 0xd7, 0x57, 0xb7, 0x4d, 0x5d, 0x5c, 0x5d, 0xc5, - 0xdf, 0xb0, 0x9e, 0x01, 0x12, 0x89, 0x98, 0x6e, 0xff, 0xc5, 0xaf, 0xd5, 0xd5, 0xd6, 0xb8, 0x4d, - 0x40, 0x06, 0xbd, 0x48, 0xa1, 0x57, 0xfd, 0xea, 0xab, 0x77, 0xc5, 0xdc, 0x5d, 0xfe, 0x1b, 0x50, - 0x03, 0x26, 0xa1, 0xd4, 0xeb, 0xef, 0xaa, 0xd7, 0xab, 0xde, 0x4e, 0xc8, 0x88, 0xf1, 0x45, 0xf8, - 0xa2, 0x2e, 0xea, 0xff, 0x0f, 0x10, 0x40, 0x00, 0x4d, 0x09, 0xfe, 0xcc, 0x50, 0xb3, 0xe8, 0xde, - 0x54, 0x6a, 0x0c, 0x4d, 0x01, 0x57, 0xee, 0x64, 0x9c, 0x95, 0xed, 0xdb, 0xd2, 0xb2, 0x23, 0xce, - 0xf0, 0x96, 0xd4, 0x96, 0xaf, 0xab, 0xff, 0xf1, 0x48, 0xa4, 0xa0, 0x72, 0x85, 0xc9, 0x00, 0x39, - 0x7a, 0x62, 0x7a, 0x33, 0xff, 0xf7, 0x7a, 0x08, 0x1c, 0x30, 0x43, 0x80, 0x1d, 0x3e, 0xd0, 0xaa, - 0x4a, 0x7d, 0xff, 0xfd, 0x3b, 0xc0, 0x70, 0x80, 0x98, 0x0a, 0x46, 0xa8, 0x77, 0xb5, 0x98, 0xc4, - 0x9e, 0x78, 0x01, 0xee, 0xe7, 0x9e, 0x37, 0x46, 0xf2, 0x56, 0x8d, 0xf5, 0xc4, 0x7b, 0xc9, 0x01, - 0x51, 0xc0, 0x00, 0x40, 0x3a, 0x38, 0x70, 0xbc, 0x50, 0x00, 0x5e, 0x41, 0x2a, 0xa1, 0xb8, 0x63, - 0xc4, 0xff, 0x74, 0xd3, 0xf4, 0xcb, 0xd9, 0xc7, 0xfc, 0x43, 0xe7, 0x0f, 0xf6, 0x19, 0x63, 0xc0, - 0x66, 0x7f, 0xf4, 0xb5, 0xfa, 0xd7, 0xfd, 0x8a, 0x51, 0xc8, 0xc8, 0xe6, 0x40, 0x45, 0x6a, 0x37, - 0x3e, 0x39, 0x42, 0xca, 0x4b, 0xe3, 0x9c, 0x03, 0x3c, 0x27, 0xaa, 0x7c, 0x30, 0xe0, 0x05, 0xb8, - 0xad, 0x54, 0x34, 0x5e, 0xd2, 0x69, 0xe9, 0xa6, 0x9a, 0x7f, 0xf7, 0xc6, 0x60, 0x44, 0xb6, 0x61, - 0x87, 0xc7, 0x70, 0xd2, 0x80, 0x2b, 0xb1, 0x92, 0xd9, 0xf4, 0x7b, 0xd6, 0xbf, 0x27, 0x4d, 0x7d, - 0x8a, 0x53, 0x91, 0x86, 0xb0, 0x04, 0x8e, 0x89, 0xf5, 0x71, 0xff, 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, - 0xe1, 0x5c, 0x01, 0x23, 0x91, 0x07, 0xe5, 0x6b, 0xff, 0xdb, 0x6f, 0x88, 0x64, 0x09, 0x46, 0xb9, - 0xa1, 0x64, 0x70, 0x04, 0x15, 0xf8, 0x04, 0xce, 0x13, 0xfe, 0xb5, 0xe9, 0xc2, 0xea, 0x15, 0xd5, - 0xfe, 0xb5, 0xfb, 0x63, 0x30, 0x10, 0xb9, 0x8c, 0xd5, 0xa7, 0x61, 0x57, 0x01, 0x3a, 0xdc, 0x55, - 0xcb, 0xfe, 0xb5, 0xf8, 0xc9, 0x41, 0x2d, 0x39, 0xe7, 0xfe, 0x15, 0x50, 0x06, 0x46, 0xbd, 0x0b, - 0xbe, 0xff, 0xfe, 0xba, 0xc2, 0x6c, 0x80, 0x20, 0xe4, 0xda, 0x6d, 0xff, 0xfa, 0xe2, 0xb0, 0x94, - 0x2f, 0xf1, 0x0b, 0x38, 0x04, 0x1e, 0x48, 0xc3, 0xfe, 0x0f, 0x15, 0xb4, 0xff, 0xff, 0x12, 0xce, - 0x16, 0x62, 0x21, 0x66, 0x40, 0xc8, 0x93, 0xcf, 0xfb, 0xee, 0xfe, 0x16, 0x70, 0x78, 0x7f, 0xfb, - 0x3f, 0xf8, 0x5a, 0x60, 0x04, 0xaa, 0x54, 0x6e, 0x1f, 0xff, 0xbb, 0xc7, 0x32, 0x81, 0xae, 0x09, - 0x31, 0xb1, 0x59, 0x61, 0x0a, 0x23, 0x00, 0x01, 0xfb, 0x28, 0x6c, 0x58, 0x22, 0xf9, 0x7b, 0xdb, - 0xca, 0xa9, 0x2c, 0xbc, 0xe7, 0xfc, 0xbe, 0x9e, 0x05, 0x88, 0xd2, 0x06, 0x3c, 0x49, 0x4b, 0x00, - 0x49, 0x4d, 0x3a, 0xc4, 0xd8, 0xb1, 0x62, 0x25, 0x95, 0x93, 0x6a, 0x7e, 0x96, 0x62, 0xb9, 0x15, - 0x81, 0x74, 0x39, 0xac, 0x53, 0xfc, 0x2e, 0xc4, 0x80, 0x86, 0xe6, 0x15, 0x75, 0x5f, 0xf7, 0xbf, - 0xc5, 0x85, 0xa5, 0x08, 0x02, 0x55, 0xc9, 0xd5, 0xd5, 0xd5, 0xd7, 0xdd, 0x78, 0x65, 0xc2, 0xe9, - 0xc2, 0xf7, 0xff, 0xf7, 0xc3, 0x68, 0x80, 0x23, 0x0b, 0xb7, 0x4b, 0xdf, 0xde, 0xb5, 0x71, 0x5b, - 0x8a, 0xc0, 0x0a, 0xff, 0xe3, 0x70, 0x10, 0x80, 0xd9, 0x65, 0x56, 0xf5, 0x86, 0x9c, 0x02, 0x1c, - 0x6a, 0x67, 0xeb, 0xdd, 0x6a, 0xf7, 0xd7, 0x7e, 0xf8, 0x65, 0xc0, 0x72, 0xc1, 0x59, 0x6f, 0xfa, - 0x74, 0xd3, 0x4d, 0x34, 0xf2, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x51, 0x28, 0xb1, 0xac, - 0x0a, 0x21, 0x11, 0x61, 0x12, 0x91, 0x29, 0x1e, 0x52, 0x25, 0x23, 0xe0, 0x40, 0xae, 0xbe, 0x8c, - 0xf5, 0xd6, 0x29, 0xf0, 0x43, 0x0d, 0x62, 0x11, 0x5e, 0x2f, 0x08, 0xa2, 0xc5, 0x36, 0x10, 0xe1, - 0x00, 0x84, 0xbd, 0x1b, 0xa4, 0xe8, 0xbf, 0xfa, 0xb9, 0x26, 0x18, 0xf8, 0x22, 0xbb, 0xf1, 0x57, - 0x5e, 0x8d, 0x16, 0x8b, 0x18, 0xa4, 0x40, 0xe4, 0x44, 0x0c, 0x65, 0x3e, 0xb1, 0x7d, 0x62, 0x9b, - 0xac, 0x51, 0xbc, 0x86, 0x55, 0xc3, 0x7d, 0x1e, 0x29, 0x71, 0x0b, 0x94, 0xbd, 0x48, 0x97, 0x13, - 0x26, 0xb5, 0x58, 0x43, 0xeb, 0x17, 0xd6, 0x28, 0x9e, 0xba, 0x8f, 0xe6, 0xaa, 0xe0, 0xe3, 0x08, - 0xa8, 0xed, 0x15, 0xdf, 0x55, 0xc3, 0x18, 0x4f, 0xa2, 0x3d, 0xf4, 0x5c, 0xa6, 0xe4, 0x33, 0xbf, - 0xe6, 0xbb, 0xeb, 0x93, 0x75, 0xfa, 0x10, 0x4a, 0xba, 0x1b, 0x51, 0x38, 0x47, 0xe5, 0x2d, 0xdd, - 0xfc, 0xc1, 0x0e, 0x2e, 0x26, 0x23, 0x08, 0x76, 0x25, 0xdf, 0x26, 0x25, 0x62, 0x90, 0x5b, 0x17, - 0xca, 0xa2, 0x28, 0x43, 0x4b, 0xd4, 0xa9, 0x43, 0x9e, 0x55, 0x45, 0xf1, 0x17, 0x7d, 0xdf, 0x27, - 0x62, 0x2e, 0xf2, 0x73, 0x6c, 0x95, 0x3f, 0x05, 0xa3, 0x19, 0xd0, 0xde, 0x9b, 0xa2, 0x4d, 0xf4, - 0x5d, 0x44, 0xf4, 0x13, 0x7f, 0xa9, 0x52, 0xfa, 0x2b, 0xdc, 0x47, 0xc4, 0x42, 0x5d, 0x08, 0x60, - 0xfa, 0xc5, 0x37, 0x58, 0xa7, 0xc4, 0x57, 0x63, 0x86, 0x2d, 0x81, 0x31, 0xf9, 0xba, 0x0a, 0xc7, - 0xfa, 0xbf, 0x84, 0x7c, 0x4d, 0x62, 0x51, 0x1e, 0xb1, 0x28, 0xaf, 0xf5, 0x6f, 0xab, 0xf8, 0x9f, - 0xab, 0xfd, 0x5b, 0x1c, 0xb7, 0x97, 0xa3, 0x54, 0xdc, 0x45, 0xab, 0x4b, 0x57, 0x75, 0xd5, 0xd1, - 0x5c, 0x10, 0xf5, 0x58, 0xa7, 0xec, 0x21, 0x95, 0x8a, 0xe8, 0x27, 0xd5, 0xd8, 0x5b, 0x26, 0xc9, - 0xd9, 0x79, 0xe4, 0x5e, 0x60, 0x8f, 0x17, 0xe2, 0x10, 0x8e, 0xae, 0xb9, 0x7c, 0xc2, 0xf5, 0x57, - 0x88, 0x93, 0x08, 0xcf, 0xc4, 0x74, 0x92, 0xdd, 0xd7, 0x27, 0x77, 0x58, 0x65, 0x6d, 0xf5, 0x69, - 0x79, 0x38, 0xbc, 0xd8, 0x62, 0x27, 0xad, 0x57, 0x28, 0xe2, 0x6d, 0x39, 0xb8, 0xa1, 0xae, 0xfb, - 0xbf, 0xe8, 0xdd, 0xf5, 0x7f, 0x93, 0x5a, 0xa3, 0x90, 0xe3, 0x28, 0x3c, 0x9b, 0xac, 0x57, 0x47, - 0xca, 0x6e, 0xb1, 0x4f, 0xd1, 0x2c, 0x85, 0x79, 0xc7, 0x2e, 0x2d, 0xa7, 0xe4, 0xe4, 0x12, 0xef, - 0xbe, 0x08, 0x8b, 0x5a, 0xd4, 0xbd, 0x5a, 0x20, 0xeb, 0x5d, 0x0b, 0x95, 0xf4, 0x4b, 0x93, 0xf5, - 0xa9, 0x79, 0x44, 0x5d, 0x6b, 0x82, 0x4e, 0xab, 0xd2, 0xf4, 0x26, 0xbc, 0x4f, 0x89, 0x20, 0x52, - 0xf7, 0xe2, 0x42, 0x75, 0xae, 0xeb, 0xc4, 0x89, 0x17, 0x77, 0xbe, 0x2b, 0x7c, 0x40, 0x44, 0x66, - 0x2b, 0xb4, 0x2b, 0x15, 0xb4, 0xd3, 0xbb, 0xed, 0xb7, 0xf1, 0x3b, 0xb5, 0x11, 0xea, 0xab, 0xe2, - 0xad, 0xd0, 0xd1, 0x23, 0x6d, 0x14, 0xbd, 0x0d, 0xea, 0x89, 0x12, 0xbd, 0x2e, 0x19, 0x9b, 0xa2, - 0xd7, 0xd1, 0x6b, 0xe0, 0x93, 0xbb, 0xd5, 0xf5, 0x8a, 0x4e, 0xb9, 0x47, 0x74, 0x2a, 0x2f, 0x10, - 0x4d, 0x6b, 0xe5, 0xae, 0xfe, 0x08, 0x8b, 0x75, 0xe5, 0x7c, 0x13, 0x8a, 0xe4, 0xf4, 0xe9, 0xbb, - 0x84, 0x04, 0x97, 0x7b, 0xe1, 0x01, 0x3e, 0x24, 0xc6, 0x58, 0xb9, 0x33, 0xc7, 0xdd, 0xfa, 0xb6, - 0xaa, 0xbf, 0x8b, 0xab, 0xee, 0xee, 0xf8, 0x81, 0x01, 0x21, 0x77, 0x7b, 0xdd, 0xc2, 0xdd, 0x1d, - 0xab, 0xab, 0x15, 0x84, 0x25, 0xc4, 0x98, 0xee, 0xff, 0x12, 0xaf, 0x11, 0xc1, 0x15, 0xdf, 0x6f, - 0xab, 0xfd, 0x5b, 0xc2, 0x15, 0xd1, 0x2a, 0xba, 0x2c, 0x5e, 0x24, 0x58, 0x6a, 0x9d, 0x37, 0x8a, - 0xc5, 0x1f, 0x10, 0x2f, 0xcb, 0x1c, 0x1a, 0x24, 0xc9, 0xdb, 0x86, 0x44, 0x04, 0x04, 0xdd, 0x78, - 0xe2, 0xef, 0xbe, 0x22, 0x3b, 0x7b, 0xd6, 0xaa, 0x5e, 0x14, 0x6a, 0xbf, 0x35, 0xc5, 0x50, 0x5c, - 0x2a, 0x4e, 0x00, 0x15, 0x86, 0x70, 0x03, 0x41, 0x4b, 0x02, 0x7a, 0xee, 0xb8, 0x9a, 0x7f, 0xb6, - 0xd8, 0xef, 0xcb, 0x5b, 0x6d, 0xb7, 0x7c, 0x2b, 0x38, 0x00, 0xed, 0x3d, 0x48, 0x2e, 0x78, 0xd3, - 0x4f, 0xff, 0x77, 0xf2, 0x12, 0x92, 0xfc, 0xa6, 0xab, 0xd4, 0x4d, 0x04, 0xe5, 0xf5, 0xa8, 0x57, - 0xad, 0x5e, 0x10, 0x9b, 0x11, 0xf0, 0x43, 0x7d, 0x5b, 0xeb, 0xd5, 0xd1, 0x6a, 0xba, 0xca, 0x4e, - 0xb2, 0xbe, 0x40, 0xc3, 0x8a, 0xfe, 0x20, 0x29, 0x3f, 0x20, 0x02, 0x31, 0x36, 0x81, 0x8f, 0x43, - 0x08, 0x0f, 0xad, 0x89, 0x68, 0x25, 0xf1, 0x61, 0x36, 0x8d, 0x62, 0xad, 0x23, 0x2d, 0x63, 0xc3, - 0x93, 0xa8, 0x00, 0x5b, 0x51, 0xc3, 0x8b, 0x10, 0x3a, 0x81, 0x46, 0x78, 0x30, 0x2d, 0x7c, 0x8f, - 0x29, 0xe3, 0xce, 0x52, 0x65, 0xe2, 0x02, 0x94, 0xc7, 0x02, 0xb9, 0x93, 0x01, 0x19, 0x38, 0x2c, - 0x61, 0xba, 0xa2, 0x0b, 0x11, 0xc4, 0x99, 0xc1, 0x60, 0xd0, 0x03, 0x94, 0x58, 0xd8, 0x25, 0x28, - 0x2b, 0x91, 0xf5, 0xb4, 0xcb, 0x87, 0xc0, 0x07, 0x9e, 0x38, 0x60, 0x27, 0x9a, 0xea, 0xae, 0x22, - 0x13, 0xde, 0xef, 0x7c, 0x28, 0x8a, 0x00, 0x55, 0x28, 0x80, 0x7c, 0x09, 0x4f, 0x66, 0x7e, 0xfe, - 0x5e, 0x57, 0xae, 0x4e, 0x0f, 0x5c, 0x1b, 0xb8, 0x3e, 0xd4, 0xa4, 0xf4, 0x0d, 0x98, 0x2c, 0xcd, - 0x0b, 0xa8, 0x02, 0xb5, 0x34, 0x1b, 0x52, 0xc1, 0x14, 0xff, 0xfd, 0xfa, 0xe7, 0x9d, 0x12, 0x75, - 0x55, 0x9e, 0x40, 0x6f, 0xb2, 0x1d, 0x76, 0x9f, 0x00, 0x52, 0x88, 0x4c, 0x36, 0xa0, 0x45, 0x06, - 0x35, 0x07, 0x42, 0x87, 0x81, 0xd4, 0xe1, 0x97, 0x6f, 0xf8, 0xe2, 0x5f, 0xb0, 0xb2, 0x38, 0x00, - 0x41, 0xe8, 0xf4, 0x69, 0x30, 0xdd, 0x5b, 0x6f, 0x6c, 0xff, 0x19, 0xec, 0xb4, 0xdf, 0xfd, 0xc7, - 0xd7, 0xe3, 0x61, 0x8a, 0x1e, 0xf2, 0x0b, 0x5a, 0x37, 0xf5, 0x64, 0xd1, 0x1a, 0xe6, 0x35, 0xdd, - 0xd7, 0x47, 0x62, 0x58, 0x47, 0x7d, 0xf7, 0x78, 0xe7, 0x2c, 0x19, 0x78, 0x62, 0x5e, 0xba, 0xae, - 0x11, 0x1c, 0xef, 0xae, 0xaa, 0xaa, 0xb8, 0x90, 0x80, 0x2a, 0x10, 0x3e, 0xa3, 0x14, 0xf0, 0xe3, - 0x84, 0x30, 0x06, 0x7e, 0x73, 0x86, 0x8e, 0xd8, 0x17, 0xd7, 0xdf, 0x70, 0xe5, 0xff, 0x0e, 0xbb, - 0x20, 0xe6, 0x25, 0x89, 0x44, 0x02, 0x01, 0x98, 0x59, 0x5e, 0x1b, 0xcf, 0x77, 0x0d, 0xd6, 0x0d, - 0x85, 0xda, 0x9b, 0xe6, 0x59, 0xef, 0x14, 0xcb, 0x0c, 0x53, 0x14, 0x3c, 0x22, 0x24, 0x14, 0xe2, - 0x8c, 0xc7, 0xf9, 0x4c, 0xd9, 0xb8, 0xaa, 0xed, 0xa2, 0x4b, 0x1e, 0x81, 0x5d, 0xd3, 0x7b, 0xbd, - 0xfb, 0x8a, 0xbb, 0xe4, 0x59, 0x97, 0xb3, 0x88, 0x8c, 0x28, 0xea, 0x95, 0x1e, 0x85, 0x4b, 0xf1, - 0xe3, 0xf8, 0xac, 0x56, 0xed, 0x2d, 0xa6, 0x2b, 0x15, 0xb8, 0xae, 0xb8, 0x25, 0xb7, 0x6d, 0xcd, - 0x8c, 0xfc, 0xa1, 0x8e, 0xc4, 0xbd, 0xe4, 0xe8, 0xb5, 0xf4, 0x46, 0x2b, 0xae, 0x62, 0x82, 0x44, - 0xa4, 0x1b, 0xf1, 0x94, 0x9e, 0x9f, 0x89, 0xe5, 0xd5, 0xef, 0x98, 0xca, 0xbe, 0x22, 0x13, 0xd5, - 0x57, 0x77, 0xc4, 0x88, 0x04, 0x86, 0x70, 0x99, 0x16, 0x69, 0xc1, 0x8c, 0xbc, 0x16, 0x1e, 0x69, - 0xa4, 0x2b, 0x0a, 0x3b, 0x2a, 0x37, 0xb8, 0x82, 0x94, 0xb9, 0xa6, 0xcb, 0x11, 0x25, 0x45, 0x3a, - 0xc2, 0xc8, 0x48, 0x11, 0x86, 0x34, 0x8a, 0xef, 0xdb, 0xff, 0xc3, 0x08, 0xa0, 0x0b, 0x1f, 0xb3, - 0xa7, 0xda, 0xdb, 0x6d, 0xb6, 0xdb, 0x7f, 0xdb, 0xde, 0x37, 0xb0, 0xaf, 0x17, 0x50, 0x8f, 0xe5, - 0x0b, 0x6e, 0xe2, 0x79, 0x09, 0xbb, 0xf9, 0x8b, 0x5a, 0x85, 0x3a, 0x11, 0xdc, 0x44, 0x9d, 0xcb, - 0x4c, 0x22, 0x10, 0x15, 0x72, 0xc1, 0xf7, 0x37, 0x8b, 0xe2, 0x04, 0x89, 0x31, 0xe5, 0xea, 0x9f, - 0xc2, 0x39, 0x9c, 0x9f, 0x63, 0x2f, 0xdf, 0xeb, 0xb1, 0xee, 0xfa, 0xc4, 0xfd, 0xdd, 0xee, 0xb9, - 0x85, 0x53, 0xa4, 0x23, 0xb0, 0x43, 0xc5, 0xd7, 0x30, 0x20, 0xa6, 0x9b, 0x8b, 0xe6, 0x1f, 0xbb, - 0xae, 0x8d, 0x95, 0xf5, 0xca, 0x23, 0xbe, 0xee, 0x4c, 0x21, 0xf3, 0x78, 0xbf, 0x86, 0xcc, 0xbb, - 0x26, 0x14, 0xd3, 0x5f, 0x26, 0x24, 0x55, 0xef, 0x7b, 0xf8, 0x93, 0x08, 0x78, 0xac, 0xac, 0x79, - 0x6b, 0x2f, 0x17, 0x5f, 0xec, 0x26, 0xab, 0x9f, 0x98, 0x25, 0x3b, 0x18, 0xbe, 0x30, 0xb7, 0x7b, - 0x6d, 0xe9, 0xb2, 0xba, 0xa5, 0x93, 0x98, 0x5e, 0x6c, 0x36, 0x2e, 0x8d, 0x15, 0x62, 0x3c, 0x41, - 0x8f, 0xbb, 0xf9, 0xaa, 0xb8, 0xbe, 0x43, 0xaa, 0xfe, 0xad, 0x8e, 0x45, 0x2c, 0x32, 0x74, 0x7e, - 0x60, 0x83, 0xbf, 0xe2, 0x89, 0xb9, 0x4e, 0x47, 0x64, 0x37, 0x2f, 0xe2, 0x42, 0x86, 0x71, 0x5d, - 0x9f, 0x02, 0xc2, 0xc8, 0xe7, 0x1f, 0x87, 0xb9, 0x41, 0xd6, 0xb5, 0xcb, 0x3a, 0xb7, 0x84, 0x46, - 0x64, 0x91, 0x7e, 0x52, 0x0a, 0x8a, 0xcc, 0x65, 0xd9, 0x4c, 0x5c, 0x9e, 0x21, 0xf6, 0xbc, 0xa7, - 0x55, 0x02, 0xdf, 0xeb, 0xfb, 0xe6, 0x13, 0x7b, 0x9f, 0x84, 0x06, 0x49, 0xbd, 0xde, 0xe9, 0x6b, - 0xb1, 0x69, 0x25, 0x8e, 0xe3, 0x89, 0xa4, 0x96, 0x92, 0x57, 0xb8, 0x9e, 0x8b, 0x94, 0x9d, 0x6a, - 0x4e, 0x62, 0xd6, 0xbe, 0x63, 0x2a, 0x57, 0x2f, 0x77, 0xbf, 0x89, 0x1e, 0x47, 0x4b, 0x3b, 0x8c, - 0xcf, 0x55, 0xe2, 0x42, 0x57, 0x7e, 0xa2, 0xe9, 0xfb, 0xac, 0xaa, 0xe2, 0x2e, 0xb5, 0x5f, 0xe6, - 0xac, 0x20, 0x11, 0x96, 0x11, 0xcd, 0xc2, 0xdd, 0x23, 0x29, 0xa2, 0xba, 0xfe, 0x5e, 0xef, 0xaf, - 0x57, 0x16, 0x5a, 0x4f, 0x49, 0x24, 0x92, 0x11, 0xc9, 0x7a, 0xaa, 0xea, 0xc4, 0x47, 0x21, 0x6b, - 0x71, 0x5c, 0x10, 0xc9, 0x8e, 0xfa, 0xf8, 0xab, 0x7b, 0x69, 0x36, 0xda, 0x5e, 0x12, 0xd2, 0xa5, - 0x26, 0x93, 0x75, 0xd5, 0xf8, 0x9f, 0x08, 0x88, 0x18, 0x22, 0xb5, 0x27, 0xf6, 0x25, 0x13, 0x80, - 0xbb, 0x08, 0x2c, 0x4f, 0x6f, 0xc4, 0xd7, 0x05, 0x07, 0x17, 0x8b, 0xae, 0xaa, 0xfe, 0x08, 0x01, - 0x09, 0x79, 0x3b, 0xcb, 0xc9, 0x55, 0xc5, 0xe2, 0x2f, 0x93, 0x36, 0x6f, 0x97, 0xb4, 0xd1, 0x38, - 0xed, 0xed, 0x6d, 0x34, 0x4d, 0xd6, 0x27, 0x82, 0x23, 0x3e, 0xa4, 0x49, 0xfa, 0xd4, 0xf1, 0x17, - 0xbd, 0xf0, 0x88, 0x80, 0x8e, 0xee, 0xeb, 0x17, 0x57, 0x7f, 0x89, 0xa0, 0xc9, 0x05, 0x80, 0x80, - 0xae, 0xa9, 0x7f, 0xff, 0xef, 0x76, 0x38, 0x40, 0x47, 0xcb, 0xd5, 0x71, 0x33, 0x13, 0x77, 0x27, - 0x36, 0xb5, 0x19, 0xc2, 0x76, 0xe9, 0x53, 0xd3, 0xf0, 0x86, 0x9d, 0x34, 0xb6, 0xb6, 0x9a, 0xf0, - 0x84, 0x9a, 0x95, 0x37, 0xbe, 0xdd, 0x27, 0xc6, 0x6d, 0xb7, 0xb5, 0x68, 0xdd, 0x5b, 0xe9, 0x17, - 0x46, 0x74, 0x23, 0xa2, 0xfa, 0x3d, 0xef, 0x13, 0xe2, 0x4c, 0x4a, 0xd7, 0x13, 0x57, 0xa0, 0x9a, - 0x1a, 0x1e, 0x14, 0x8f, 0xff, 0xaf, 0x84, 0x3c, 0x20, 0x23, 0xe8, 0xc9, 0x85, 0x62, 0x78, 0x89, - 0x44, 0xaa, 0xe5, 0xe4, 0xee, 0xe6, 0xe6, 0x15, 0xaa, 0xf9, 0x79, 0x72, 0x5e, 0x0b, 0xa9, 0x97, - 0x52, 0xe9, 0xcb, 0x90, 0x8f, 0xab, 0x17, 0xd1, 0x3a, 0x2b, 0xab, 0x12, 0x75, 0xc2, 0x4e, 0x24, - 0xbc, 0x90, 0xad, 0x57, 0x5a, 0x93, 0x93, 0x5a, 0xac, 0x49, 0xba, 0xa8, 0xb8, 0x8b, 0x2d, 0xee, - 0xb9, 0x8a, 0xb5, 0x93, 0xa0, 0x87, 0x46, 0xf2, 0x89, 0xdd, 0x4b, 0xc8, 0x4d, 0x57, 0xc7, 0xc9, - 0xa9, 0x4d, 0x57, 0x4d, 0x3c, 0xbc, 0x33, 0x63, 0x6e, 0xda, 0xb6, 0x2a, 0xff, 0x5d, 0x72, 0xae, - 0x62, 0xa7, 0x4e, 0xb9, 0x2e, 0xe7, 0xcc, 0xbd, 0x5e, 0xe2, 0x44, 0xfd, 0x95, 0xdf, 0xf3, 0x15, - 0x6b, 0x11, 0xc9, 0xa5, 0x7f, 0x31, 0x2f, 0x5f, 0x14, 0x5b, 0xa5, 0xd5, 0xd7, 0x2e, 0xaf, 0x27, - 0x30, 0xcb, 0xbc, 0xbc, 0x25, 0xd2, 0x49, 0x6b, 0x26, 0x20, 0x41, 0x4d, 0x8d, 0x2d, 0xa6, 0xbf, - 0x5b, 0xc9, 0xd6, 0x52, 0xf0, 0x9e, 0xd2, 0x57, 0x6f, 0xf0, 0x45, 0x17, 0x4e, 0x9b, 0xfd, 0x5e, - 0x7e, 0xaf, 0x58, 0x9f, 0x13, 0x5c, 0x87, 0xd5, 0x78, 0x8a, 0xef, 0xaa, 0xf9, 0xaa, 0xbe, 0x24, - 0x23, 0xc4, 0xeb, 0x13, 0x27, 0x25, 0x5b, 0x9f, 0xf9, 0x72, 0xfd, 0x72, 0xd5, 0x75, 0xc2, 0x5d, - 0xdc, 0x9e, 0x4f, 0x27, 0x28, 0xcd, 0xd2, 0xf0, 0x44, 0x77, 0xdf, 0xa4, 0xea, 0x64, 0x5f, 0x92, - 0xb7, 0xbe, 0x42, 0x2a, 0xfe, 0xb0, 0x4b, 0xd1, 0x6a, 0xba, 0xea, 0xfa, 0xcd, 0xf0, 0x9f, 0x2f, - 0xae, 0xab, 0x94, 0x63, 0xdb, 0x8e, 0x89, 0x08, 0xf8, 0x88, 0x9e, 0xc2, 0x3b, 0xaa, 0xef, 0x77, - 0x75, 0xcc, 0x5a, 0xdc, 0x9c, 0x11, 0x8e, 0xca, 0xbf, 0xbe, 0x43, 0xe9, 0xa7, 0xeb, 0x8c, 0xbe, - 0x6e, 0xa9, 0x2e, 0x2a, 0xd6, 0xd3, 0x7b, 0x6b, 0x82, 0x3e, 0xee, 0xf3, 0xf5, 0x65, 0x75, 0xef, - 0x93, 0x4d, 0x36, 0x89, 0xd0, 0x8a, 0x88, 0xe4, 0x2d, 0x62, 0xfc, 0x4f, 0x89, 0xf0, 0x8d, 0x73, - 0x1e, 0xf7, 0x78, 0x91, 0x35, 0xdf, 0x92, 0x85, 0xe4, 0xd5, 0x38, 0x8e, 0x12, 0xbb, 0xef, 0x7a, - 0xe2, 0x86, 0x26, 0x92, 0x7b, 0x54, 0xc4, 0x74, 0x2f, 0xa7, 0xe4, 0xa7, 0x54, 0xc5, 0x70, 0x45, - 0xa5, 0x48, 0x59, 0x7c, 0x82, 0xae, 0xdf, 0xc8, 0x3d, 0xdf, 0x5d, 0x13, 0xaa, 0x23, 0x5d, 0xee, - 0xf5, 0xf8, 0x43, 0xc4, 0x67, 0xe6, 0x2a, 0xd6, 0xb9, 0xb9, 0x3f, 0xdf, 0x52, 0xff, 0x29, 0x57, - 0x5c, 0x47, 0x88, 0xcb, 0xc1, 0x08, 0x40, 0x70, 0xe3, 0xfc, 0x2b, 0x94, 0x6d, 0x39, 0x7f, 0xbb, - 0xde, 0xb8, 0x21, 0xab, 0xd7, 0x55, 0x88, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x52, 0x29, - 0x30, 0xa9, 0xf4, 0x2e, 0xa1, 0x4e, 0x8b, 0x17, 0x84, 0x61, 0x9e, 0x8b, 0xd1, 0x58, 0x84, 0x67, - 0x93, 0x94, 0x52, 0x7a, 0x6f, 0xa1, 0xec, 0x4f, 0xd6, 0xab, 0xaf, 0x48, 0x31, 0x47, 0x19, 0x74, - 0xbd, 0x17, 0xa8, 0x5a, 0xc6, 0x29, 0x11, 0xd1, 0x3b, 0xeb, 0x97, 0xd7, 0x29, 0xba, 0xe5, 0x0f, - 0xc0, 0x82, 0x21, 0x1a, 0x2c, 0x41, 0x21, 0x5f, 0x08, 0xe8, 0xf9, 0x7d, 0xd5, 0x56, 0x4e, 0xb1, - 0x49, 0xde, 0xab, 0x08, 0xf0, 0x45, 0xbb, 0xbc, 0xbe, 0x8d, 0xd1, 0xfc, 0xc7, 0xaa, 0xd8, 0x74, - 0x82, 0x80, 0x0b, 0x72, 0x68, 0xe2, 0x6b, 0x3e, 0x0c, 0x5f, 0x4a, 0xdf, 0x7e, 0x71, 0x27, 0x1b, - 0xc4, 0xe1, 0x17, 0xbd, 0xf1, 0x20, 0xc4, 0x28, 0x30, 0x6f, 0x2e, 0x0e, 0x1a, 0x65, 0xc8, 0xae, - 0xe4, 0x80, 0x15, 0x92, 0xc3, 0x56, 0x61, 0x66, 0xd8, 0xa6, 0x4f, 0x5e, 0x6f, 0x1f, 0x89, 0x07, - 0x25, 0x2b, 0xdd, 0xb0, 0xd6, 0x22, 0x2b, 0xa0, 0x8b, 0x2f, 0x94, 0x95, 0xb8, 0xae, 0x8e, 0xff, - 0x5e, 0xa0, 0xe3, 0x10, 0x72, 0x3f, 0xff, 0x13, 0x84, 0x4e, 0x06, 0x22, 0xed, 0xfe, 0xf8, 0x60, - 0x08, 0x01, 0x41, 0xc2, 0xe2, 0xae, 0x6e, 0x20, 0xe1, 0x79, 0x78, 0x8e, 0x0a, 0xc9, 0xea, 0x58, - 0xdd, 0xcb, 0x36, 0x72, 0x08, 0xa0, 0x53, 0x27, 0xbe, 0x7e, 0x10, 0x89, 0xc7, 0xce, 0xa1, 0x79, - 0x17, 0xf4, 0x17, 0xea, 0xec, 0x9a, 0xaf, 0xbe, 0xee, 0xf8, 0x24, 0xee, 0x20, 0x73, 0xb0, 0xc1, - 0x0c, 0x00, 0xe6, 0xd6, 0xde, 0x3f, 0xf1, 0x6c, 0x5b, 0xc5, 0xb4, 0xdb, 0xc4, 0x05, 0x83, 0x39, - 0x70, 0xb8, 0x2b, 0x2d, 0x88, 0x68, 0x73, 0x43, 0x23, 0x2c, 0xba, 0x5d, 0xcb, 0xa5, 0xd1, 0xfd, - 0x04, 0xa9, 0xd7, 0x92, 0xef, 0xae, 0x8a, 0xf0, 0xcc, 0x21, 0x14, 0x14, 0x97, 0xd3, 0x93, 0xac, - 0xf1, 0x23, 0x04, 0x16, 0xf7, 0xd6, 0x5e, 0x1d, 0xa6, 0x4f, 0x4d, 0xca, 0x2a, 0x8a, 0x28, 0x2c, - 0xc9, 0x8c, 0x12, 0xa6, 0x10, 0x0c, 0x09, 0x88, 0xf9, 0x3b, 0xe4, 0xbf, 0x35, 0x84, 0x6f, 0x82, - 0x40, 0x9e, 0x6c, 0x1c, 0xcc, 0x5a, 0xb3, 0x81, 0xc0, 0x10, 0x04, 0x42, 0x19, 0x70, 0x43, 0x85, - 0xe2, 0xb7, 0xeb, 0xb0, 0xf7, 0x0f, 0x73, 0x5c, 0x0f, 0x00, 0x80, 0x7d, 0xdc, 0xb1, 0x8a, 0x31, - 0x46, 0x58, 0xcf, 0x95, 0x2a, 0xaf, 0x01, 0x00, 0x18, 0x11, 0x12, 0xe1, 0xee, 0x4e, 0xfc, 0xb5, - 0xe0, 0x58, 0x10, 0x6f, 0x17, 0xc0, 0xe0, 0x20, 0xa7, 0xc7, 0x90, 0xbc, 0x08, 0x18, 0x50, 0x5b, - 0x0a, 0xf2, 0x85, 0x62, 0x20, 0x9c, 0x28, 0x2e, 0x24, 0x3d, 0x49, 0x6a, 0x9e, 0x9f, 0xdc, 0x44, - 0x60, 0x83, 0xbf, 0x97, 0xb3, 0xd6, 0x66, 0xf7, 0x5b, 0xf2, 0x7e, 0x10, 0x13, 0x9c, 0xad, 0x57, - 0x83, 0x8d, 0xc0, 0xb0, 0x23, 0x89, 0x0c, 0x0e, 0xf1, 0x58, 0x51, 0x53, 0xc7, 0x96, 0xea, 0x77, - 0xf0, 0x42, 0x23, 0x83, 0x91, 0x00, 0xb4, 0x79, 0xb2, 0xaa, 0xab, 0xb9, 0xc2, 0x37, 0x69, 0xaf, - 0x84, 0x4c, 0x6e, 0x06, 0xc4, 0xbd, 0x88, 0x0c, 0x89, 0x10, 0x4e, 0xad, 0xed, 0x10, 0xc4, 0x91, - 0xc8, 0x1f, 0x47, 0xce, 0xd5, 0x8c, 0x41, 0x5b, 0x44, 0xf4, 0x77, 0xae, 0x63, 0x6a, 0xa6, 0xe8, - 0xb5, 0x0c, 0x44, 0x41, 0x70, 0x4a, 0xb5, 0xbd, 0xfd, 0xc4, 0x49, 0x83, 0xbf, 0x8a, 0xbf, 0x1c, - 0x62, 0xf1, 0x71, 0x75, 0x4d, 0xf5, 0x55, 0xf1, 0x28, 0x2a, 0x9e, 0xf8, 0x27, 0x19, 0x4e, 0xf0, - 0x91, 0xeb, 0x76, 0xa6, 0x5c, 0x10, 0x82, 0x80, 0x80, 0x82, 0xd3, 0xcb, 0xd7, 0x5a, 0xe1, 0x98, - 0x44, 0x00, 0xc0, 0xd2, 0xbd, 0x37, 0x51, 0x3f, 0xff, 0xf4, 0x9c, 0x45, 0xd5, 0x7c, 0x22, 0x11, - 0x14, 0x65, 0xd6, 0xa4, 0xe4, 0x82, 0xb8, 0x66, 0x30, 0x55, 0x56, 0xa5, 0xf7, 0x8e, 0xf8, 0xe7, - 0x9e, 0x3c, 0xb1, 0x9f, 0xdf, 0xc4, 0x82, 0x11, 0x64, 0x0a, 0xdc, 0xe1, 0xef, 0xf7, 0xbe, 0x82, - 0x2d, 0x17, 0xd5, 0xfe, 0xad, 0x2e, 0x10, 0x8b, 0xe8, 0x53, 0x91, 0x70, 0x84, 0x51, 0x1b, 0x3e, - 0x4d, 0xb5, 0x99, 0x46, 0x22, 0x28, 0x54, 0x18, 0xba, 0x4a, 0x27, 0x49, 0x44, 0xe9, 0x28, 0x8e, - 0x9c, 0x14, 0xaf, 0x70, 0x80, 0x84, 0x13, 0xeb, 0xc1, 0x40, 0x48, 0x28, 0x5f, 0x77, 0xad, 0x78, - 0x61, 0x89, 0xa2, 0x39, 0x0d, 0xe0, 0x83, 0xc1, 0x08, 0x81, 0x75, 0xd5, 0x6b, 0xe1, 0x11, 0xc2, - 0x2a, 0xa2, 0xf2, 0xa9, 0x24, 0xd1, 0x6c, 0x04, 0xf1, 0x9c, 0xc9, 0x3f, 0x12, 0x34, 0x68, 0xb1, - 0xf5, 0x5d, 0x55, 0x78, 0x39, 0xc2, 0x23, 0x90, 0xf8, 0xed, 0x0c, 0xc1, 0x08, 0x94, 0x29, 0xc7, - 0x8c, 0x18, 0xee, 0x2b, 0x76, 0xe3, 0x6d, 0x32, 0xfb, 0x4f, 0x27, 0xaf, 0x12, 0x28, 0x8f, 0x7b, - 0xdf, 0xc2, 0x35, 0x06, 0x11, 0x43, 0xed, 0xd7, 0x4d, 0xf8, 0x21, 0x1c, 0x10, 0x88, 0x7e, 0x2b, - 0x77, 0xea, 0xb8, 0x42, 0xc2, 0x24, 0xc6, 0x21, 0xe5, 0xbc, 0x48, 0x44, 0xc2, 0xb1, 0x95, 0x48, - 0x0c, 0x4b, 0x13, 0x10, 0x65, 0x58, 0xba, 0xd5, 0xf1, 0x22, 0x01, 0x08, 0xb1, 0xbe, 0xe2, 0x77, - 0x82, 0xdc, 0x4f, 0xc8, 0x67, 0x77, 0xf1, 0x02, 0xee, 0xaf, 0xd2, 0x5c, 0x22, 0x11, 0x16, 0x27, - 0x26, 0x25, 0x97, 0x04, 0x39, 0xc4, 0xa1, 0x0d, 0xe1, 0x91, 0x37, 0x6b, 0xd5, 0x71, 0x22, 0x46, - 0x75, 0x55, 0x55, 0xd6, 0xaa, 0xc4, 0x13, 0x1f, 0x52, 0xf1, 0x31, 0x15, 0x51, 0xa4, 0xc6, 0xcc, - 0xff, 0x0d, 0x84, 0xe3, 0xac, 0xcf, 0x1e, 0x9d, 0x7a, 0x73, 0xec, 0x2d, 0xd0, 0x99, 0x42, 0xe3, - 0x11, 0x02, 0x3d, 0x4f, 0xe6, 0x5c, 0x22, 0x11, 0x0a, 0x07, 0x68, 0x4d, 0xf5, 0x36, 0x62, 0x78, - 0x24, 0xe6, 0x19, 0x08, 0x82, 0xb2, 0xaa, 0xaa, 0xd4, 0x49, 0xc7, 0x64, 0xac, 0x5d, 0xbc, 0x32, - 0x14, 0x88, 0x0e, 0x08, 0xf1, 0x1c, 0x88, 0x2a, 0xda, 0x8b, 0x80, 0xac, 0xb7, 0xd9, 0xf9, 0xf1, - 0xe4, 0x1c, 0x4b, 0x80, 0xef, 0x8d, 0xc3, 0x11, 0x71, 0x20, 0xf1, 0x41, 0xd6, 0x6c, 0x14, 0x67, - 0xe5, 0x51, 0x54, 0x79, 0xce, 0x24, 0x59, 0x29, 0x1b, 0x2a, 0xa9, 0xf3, 0xf3, 0x12, 0xa2, 0x1c, - 0xf8, 0x91, 0x3a, 0x4e, 0xe7, 0xcf, 0x50, 0x62, 0x27, 0x83, 0x1c, 0x21, 0xd0, 0x5c, 0x76, 0x86, - 0xf8, 0x27, 0x1d, 0x45, 0x13, 0xe9, 0xb7, 0x1f, 0x31, 0x70, 0x60, 0x0e, 0x42, 0x52, 0xe2, 0x23, - 0x79, 0x15, 0x9f, 0x8a, 0x32, 0xde, 0x24, 0x32, 0xc8, 0x25, 0xcb, 0xf8, 0x40, 0x22, 0x3b, 0x8b, - 0xad, 0x53, 0xaa, 0xfc, 0x22, 0x30, 0xb1, 0x6e, 0x5c, 0xb8, 0x51, 0x52, 0xdb, 0xdf, 0x51, 0xf1, - 0x67, 0x82, 0x91, 0x64, 0xd5, 0xee, 0xef, 0xc4, 0x84, 0x0a, 0x2e, 0x2f, 0x79, 0xf3, 0x69, 0xe2, - 0xbc, 0x23, 0x18, 0x2b, 0x55, 0x5a, 0xe2, 0xf3, 0x7c, 0x9e, 0xa0, 0xc4, 0x4c, 0x13, 0xf4, 0x1d, - 0x79, 0xa0, 0x80, 0x1c, 0x84, 0x83, 0x0e, 0xef, 0xbb, 0xf0, 0xc0, 0x97, 0x15, 0xc5, 0x7c, 0x40, - 0x90, 0x46, 0x77, 0xd5, 0xcf, 0x13, 0x86, 0x88, 0x60, 0xa5, 0x07, 0xff, 0xf6, 0xfb, 0x82, 0x91, - 0x23, 0x84, 0xc5, 0x7b, 0xbe, 0x94, 0x56, 0x2b, 0xc4, 0xc5, 0x15, 0xdd, 0xde, 0xf7, 0xe2, 0x06, - 0x0c, 0xdd, 0xc2, 0xc6, 0x96, 0x7f, 0xee, 0xef, 0xac, 0x8c, 0xab, 0x3f, 0x08, 0x41, 0x76, 0x20, - 0x61, 0x2b, 0x51, 0x71, 0x20, 0x72, 0x4b, 0x89, 0xf8, 0x9f, 0x5a, 0x45, 0xe9, 0xe1, 0x18, 0x40, - 0xb7, 0x07, 0x56, 0x32, 0xaa, 0x33, 0xc2, 0xc0, 0xf2, 0x24, 0x2c, 0x22, 0xd2, 0x15, 0x8a, 0xc7, - 0x11, 0x60, 0x58, 0x65, 0x46, 0x11, 0x12, 0x30, 0xae, 0xe2, 0xb1, 0x5d, 0xdd, 0xee, 0xdc, 0x6c, - 0x5f, 0x85, 0x05, 0x70, 0x84, 0xdb, 0x4a, 0xb8, 0x10, 0x01, 0x48, 0xfc, 0xf9, 0x9f, 0x2a, 0xab, - 0x96, 0xad, 0x12, 0x9f, 0x62, 0x01, 0x08, 0x26, 0xaa, 0xae, 0xe3, 0x8a, 0xc6, 0xbb, 0x84, 0x43, - 0x22, 0xca, 0xef, 0xee, 0xfc, 0x48, 0xf9, 0xff, 0x93, 0xf4, 0xe6, 0xae, 0x24, 0x20, 0xc5, 0x28, - 0x8f, 0xa8, 0x2d, 0xc4, 0x98, 0x7d, 0xcd, 0x95, 0x78, 0x27, 0x18, 0xa5, 0xe9, 0x9c, 0x3e, 0x28, - 0xee, 0xd8, 0x6f, 0x03, 0x0e, 0xa0, 0xcf, 0x36, 0x06, 0xbc, 0x6d, 0xb5, 0xf1, 0xd3, 0x14, 0xb9, - 0x1e, 0xb8, 0x39, 0x5c, 0x7a, 0xe2, 0xe0, 0xed, 0xd7, 0x2a, 0x32, 0x95, 0x1d, 0x5d, 0xc6, 0x4c, - 0x7e, 0x6f, 0xb7, 0xfc, 0x14, 0x90, 0xc0, 0x31, 0xc2, 0x26, 0x35, 0x5e, 0x47, 0x91, 0xa5, 0x8c, - 0x6a, 0x37, 0x7e, 0xfd, 0x5c, 0xf7, 0xe2, 0x44, 0x04, 0x4f, 0xbb, 0xaa, 0x6a, 0x9b, 0xba, 0x6f, - 0xc0, 0xf0, 0x32, 0x4c, 0x48, 0x78, 0xf0, 0x39, 0xc3, 0x51, 0x72, 0xc3, 0x1f, 0xe3, 0x30, 0x9c, - 0x54, 0xa8, 0xbf, 0x1e, 0xf3, 0xfc, 0x71, 0x3c, 0x3c, 0x70, 0xbe, 0x61, 0xac, 0x03, 0x51, 0x5c, - 0x8b, 0x1c, 0xed, 0xff, 0xa6, 0xd8, 0xab, 0x4c, 0xbc, 0x55, 0x96, 0xb4, 0xca, 0x15, 0x67, 0x00, - 0x80, 0x2e, 0x24, 0x1a, 0x27, 0xbd, 0x3b, 0xbe, 0x5d, 0xc5, 0x5b, 0xff, 0x08, 0x96, 0xee, 0xfe, - 0x10, 0x04, 0xe6, 0x94, 0x83, 0x0d, 0x0c, 0x9b, 0xbd, 0x70, 0x80, 0x41, 0x13, 0xa0, 0xb2, 0x10, - 0x0c, 0x94, 0x4d, 0xdc, 0xbf, 0x10, 0x24, 0x9b, 0xab, 0xe2, 0x43, 0x23, 0x08, 0x2b, 0x14, 0x65, - 0xc2, 0xc6, 0x70, 0x2c, 0x3a, 0x05, 0x5d, 0x71, 0x46, 0x15, 0x1c, 0x85, 0x1d, 0x29, 0xaa, 0xe2, - 0x62, 0xae, 0xfa, 0xaa, 0x4b, 0x84, 0x44, 0x82, 0x2d, 0xee, 0xfc, 0x40, 0x12, 0x44, 0x6b, 0xdb, - 0xcd, 0xeb, 0xc1, 0x03, 0x3e, 0xc6, 0xbc, 0x48, 0x21, 0x7b, 0xbd, 0x42, 0x21, 0x92, 0x1e, 0x7b, - 0xf1, 0x01, 0x01, 0x82, 0xa2, 0xb8, 0xae, 0xc4, 0x2b, 0xae, 0xa2, 0xb7, 0x2f, 0x6e, 0x61, 0x00, - 0x87, 0xc1, 0x18, 0xdc, 0x6d, 0x7e, 0x82, 0x88, 0x8f, 0x13, 0x16, 0x31, 0xdc, 0x57, 0x7b, 0xfc, - 0x49, 0x5e, 0xef, 0x77, 0x7c, 0x22, 0x20, 0x84, 0xbb, 0xbf, 0x12, 0x3c, 0x80, 0xd7, 0x58, 0x53, - 0x06, 0xab, 0x2a, 0x43, 0xec, 0x35, 0x91, 0xaa, 0xb4, 0x9f, 0xc4, 0x8c, 0xdd, 0xd9, 0xbb, 0xb4, - 0x0d, 0x57, 0x99, 0xbb, 0xe5, 0xfc, 0x20, 0x20, 0xeb, 0xbe, 0x9b, 0xe2, 0x6e, 0xf7, 0x78, 0xb6, - 0x2c, 0x35, 0xa8, 0x7c, 0x6a, 0x28, 0x4e, 0x95, 0xd2, 0xaa, 0x84, 0x3c, 0x48, 0x21, 0x14, 0x32, - 0x2b, 0x8a, 0xe5, 0x55, 0x7c, 0x40, 0x40, 0x49, 0x25, 0x61, 0xf2, 0xdb, 0x9b, 0x6f, 0x08, 0x04, - 0x38, 0x80, 0x81, 0x78, 0x1f, 0xcd, 0x18, 0x25, 0xe6, 0x3e, 0xab, 0x88, 0xf1, 0x31, 0xc2, 0x24, - 0xd7, 0xdd, 0xdd, 0xdd, 0xfc, 0x20, 0x0a, 0x78, 0x9f, 0x12, 0x24, 0xd5, 0xaa, 0xf9, 0x3c, 0xd4, - 0xe1, 0x01, 0x33, 0x29, 0xd8, 0xcc, 0xca, 0x64, 0x66, 0xf0, 0x50, 0x24, 0x6e, 0xaa, 0xaa, 0xab, - 0xc4, 0x04, 0xaa, 0xbe, 0xef, 0x11, 0x28, 0x25, 0x65, 0x5a, 0x34, 0x40, 0x43, 0x86, 0x7f, 0x04, - 0x7d, 0xdf, 0xa0, 0x87, 0x10, 0x84, 0x77, 0x88, 0x46, 0xee, 0x23, 0xc4, 0x84, 0x6a, 0x22, 0x8b, - 0x7e, 0x11, 0x08, 0x82, 0xc2, 0x5b, 0x49, 0xeb, 0x17, 0x73, 0xf3, 0x60, 0x2a, 0x29, 0x7d, 0xab, - 0x84, 0x01, 0x48, 0x50, 0xd1, 0x5c, 0x40, 0xf1, 0x46, 0x0c, 0x64, 0xc0, 0xf0, 0x78, 0x73, 0x11, - 0xc5, 0x26, 0x55, 0x92, 0xbe, 0x3d, 0xe0, 0xe9, 0xe0, 0xe2, 0xf9, 0x23, 0xe1, 0xd3, 0xf5, 0xe2, - 0x41, 0x5d, 0x4d, 0x31, 0xd5, 0x8a, 0x70, 0x60, 0x7f, 0x03, 0x87, 0xba, 0x9d, 0xca, 0x8f, 0x66, - 0xdd, 0x7a, 0xc3, 0x0c, 0x6a, 0xaf, 0xc2, 0x3e, 0x19, 0xe2, 0x42, 0x3c, 0x48, 0x44, 0xa5, 0x4d, - 0xd3, 0x92, 0x10, 0xe1, 0x45, 0x00, 0x08, 0xad, 0xae, 0xed, 0x58, 0x5e, 0x98, 0x39, 0xff, 0xff, - 0x88, 0x08, 0x02, 0x11, 0xd3, 0x51, 0x58, 0x41, 0xc3, 0x88, 0x08, 0x41, 0x04, 0x47, 0x88, 0x90, - 0xf5, 0x5f, 0x13, 0xc4, 0xcd, 0x7b, 0xfc, 0x61, 0x37, 0x7b, 0x9f, 0x37, 0x69, 0xfb, 0xbb, 0xe2, - 0x01, 0x0b, 0x3d, 0x6b, 0xc4, 0x82, 0x4d, 0x4d, 0xc9, 0x4a, 0x0a, 0xe1, 0x91, 0x01, 0x11, 0x0a, - 0xc9, 0x74, 0x17, 0x55, 0x93, 0xbe, 0xea, 0x79, 0xf6, 0xf8, 0x21, 0x0a, 0x4f, 0xd0, 0x9c, 0xb4, - 0x4c, 0xcd, 0x42, 0xe2, 0x43, 0xcb, 0xf1, 0x5a, 0x4e, 0xe2, 0xb7, 0xfc, 0xb8, 0x44, 0x22, 0x38, - 0x83, 0xa0, 0x3c, 0x27, 0x07, 0x05, 0xe3, 0xab, 0x1b, 0xa4, 0xc0, 0xe1, 0xf9, 0x6c, 0xc9, 0xd7, - 0x13, 0x08, 0x17, 0x85, 0x15, 0x6e, 0x12, 0xb9, 0x13, 0xab, 0xf2, 0xaa, 0x9f, 0x12, 0x51, 0x3b, - 0xbe, 0x10, 0x08, 0x70, 0xc8, 0x20, 0xf8, 0x40, 0xb6, 0x6b, 0xaa, 0xd5, 0x35, 0xf9, 0xaa, 0xb9, - 0x61, 0x00, 0x87, 0x08, 0x84, 0x38, 0x88, 0x2a, 0x14, 0xab, 0xd2, 0x88, 0x79, 0xb3, 0x55, 0xc3, - 0x84, 0x65, 0xab, 0xaa, 0x87, 0xfa, 0x2e, 0x5e, 0x22, 0xb1, 0x0f, 0x7b, 0xf8, 0xa3, 0x3b, 0xbb, - 0xde, 0xea, 0x11, 0x89, 0x12, 0xf7, 0xbb, 0x8a, 0xc5, 0x78, 0x98, 0xcc, 0xfe, 0x7d, 0xb6, 0x6c, - 0x94, 0x32, 0xf8, 0xb9, 0x7a, 0x46, 0x64, 0xe0, 0x7e, 0x10, 0x8c, 0x93, 0x96, 0xd9, 0xcb, 0x65, - 0xef, 0xfd, 0x4a, 0xbf, 0x96, 0x0e, 0xb5, 0x2f, 0x5b, 0xc2, 0x22, 0x02, 0x06, 0xab, 0xcb, 0x6e, - 0xef, 0x57, 0xe2, 0x23, 0x0e, 0xa2, 0xea, 0xb5, 0x8b, 0xaa, 0x77, 0x15, 0xf8, 0x4f, 0x1c, 0xf7, - 0xbf, 0xff, 0xc1, 0x80, 0x10, 0x45, 0x54, 0x5d, 0x45, 0xeb, 0x58, 0x84, 0x50, 0x0f, 0xf6, 0x11, - 0xef, 0x08, 0xea, 0x11, 0x13, 0xf1, 0x25, 0x55, 0x55, 0xad, 0x50, 0xa7, 0xe0, 0x83, 0xf2, 0x92, - 0xaa, 0xbc, 0x21, 0xe2, 0x38, 0x9c, 0x3b, 0x11, 0x93, 0x8e, 0xdc, 0x56, 0xee, 0xfd, 0xef, 0x09, - 0xb1, 0x81, 0xb3, 0xb9, 0xff, 0xeb, 0xf8, 0x20, 0x0c, 0x18, 0xf7, 0x71, 0x5c, 0x52, 0x81, 0xf0, - 0x1f, 0x61, 0x90, 0x88, 0xcb, 0x8b, 0xd4, 0xf3, 0x44, 0x0a, 0x91, 0x96, 0x37, 0x64, 0x7f, 0x18, - 0xac, 0x51, 0x8a, 0xc5, 0x1e, 0x20, 0x32, 0x26, 0x5b, 0x71, 0x2f, 0xcb, 0x77, 0x7c, 0x22, 0x19, - 0xc2, 0x8c, 0xa0, 0x62, 0xc2, 0x53, 0x6d, 0xbf, 0xff, 0xc0, 0xd2, 0x01, 0x60, 0x08, 0x71, 0x78, - 0xb8, 0xb9, 0x32, 0x56, 0xab, 0x12, 0x8a, 0x02, 0x76, 0x8e, 0xa2, 0xc4, 0x81, 0xa4, 0x45, 0x57, - 0x55, 0x55, 0x36, 0x10, 0xe1, 0x0f, 0x07, 0x11, 0x82, 0xd4, 0x47, 0x0d, 0x98, 0xb8, 0xba, 0xac, - 0x98, 0xb3, 0x2a, 0xab, 0xe0, 0x98, 0x55, 0x55, 0x6a, 0xab, 0xd5, 0xd9, 0x95, 0x6b, 0xe8, 0x95, - 0x0e, 0x73, 0x4f, 0xf9, 0x70, 0xc8, 0x82, 0x55, 0xf7, 0xbc, 0x51, 0x04, 0x80, 0x2d, 0xe8, 0x76, - 0x47, 0x46, 0xb8, 0x02, 0xf5, 0xc1, 0x70, 0x6b, 0x84, 0x44, 0x0e, 0x9f, 0x9c, 0xfb, 0x96, 0x31, - 0x58, 0xad, 0xed, 0x57, 0x86, 0x3e, 0x4a, 0xaf, 0x1c, 0x8e, 0x01, 0xf5, 0xb4, 0x3f, 0x03, 0xc0, - 0x0e, 0x92, 0x6b, 0x59, 0xd8, 0x90, 0x5b, 0x74, 0x30, 0xc4, 0x00, 0x1f, 0xaf, 0xd1, 0x30, 0x1f, - 0xfd, 0x3e, 0xb5, 0xc3, 0x3a, 0x84, 0x42, 0x13, 0x42, 0x21, 0x17, 0x55, 0xaf, 0x0c, 0x70, 0x80, - 0x60, 0xd9, 0x7d, 0xfc, 0x10, 0x8a, 0x7b, 0x53, 0x03, 0xe0, 0x8e, 0xef, 0x70, 0x57, 0xc3, 0x7c, - 0x11, 0xde, 0xfd, 0xfe, 0x08, 0x4b, 0x55, 0xbd, 0xf3, 0x79, 0x7f, 0x08, 0x94, 0x45, 0xb7, 0xf0, - 0x8b, 0x12, 0xef, 0x7c, 0x22, 0x19, 0x04, 0x33, 0xf9, 0xfd, 0xeb, 0x08, 0xf0, 0x88, 0x64, 0xb7, - 0xb7, 0x9c, 0x87, 0x08, 0x91, 0x4d, 0x2c, 0x33, 0x15, 0xad, 0x55, 0x55, 0x62, 0x19, 0x41, 0x4c, - 0x86, 0x19, 0x82, 0x32, 0x2d, 0x57, 0xb8, 0x99, 0xb5, 0xac, 0x52, 0x81, 0x56, 0x47, 0x3c, 0x49, - 0xd5, 0x75, 0xaf, 0x13, 0x2e, 0xad, 0x2a, 0x84, 0x43, 0x37, 0xc9, 0x5d, 0x49, 0xd0, 0x4b, 0x08, - 0x6a, 0x23, 0xc4, 0x84, 0x38, 0x9a, 0x12, 0xff, 0x57, 0xae, 0x6d, 0xef, 0xec, 0x43, 0xee, 0xf0, - 0x40, 0x41, 0x2a, 0xbe, 0x24, 0x14, 0x08, 0xad, 0x75, 0x5e, 0x06, 0x00, 0x40, 0x22, 0x29, 0x8b, - 0xeb, 0x5e, 0x08, 0x7c, 0x20, 0x0a, 0x08, 0x71, 0x71, 0x7a, 0xcf, 0x86, 0xc3, 0xbc, 0x60, 0x51, - 0x03, 0x46, 0x2a, 0x45, 0xc1, 0x8c, 0xdb, 0xbb, 0xaf, 0xc4, 0x68, 0x28, 0x43, 0x83, 0x5d, 0x7f, - 0xf4, 0xd3, 0x79, 0x7a, 0x78, 0x40, 0x4f, 0x84, 0x4d, 0x9f, 0xe5, 0xc4, 0x45, 0x74, 0x23, 0x28, - 0xfc, 0x21, 0x58, 0x8e, 0x27, 0x78, 0x8f, 0x0c, 0x70, 0x85, 0x5f, 0x84, 0x02, 0x02, 0xca, 0xaa, - 0xaa, 0xaa, 0xab, 0x84, 0x66, 0x26, 0xab, 0x83, 0x9a, 0xb7, 0x03, 0x08, 0x40, 0x50, 0x91, 0x71, - 0x73, 0x72, 0xce, 0x2f, 0x37, 0x88, 0x50, 0x2a, 0xac, 0xe6, 0x20, 0x0c, 0x3f, 0x04, 0x84, 0xdc, - 0x57, 0xde, 0x23, 0x82, 0x8b, 0x22, 0xd5, 0x71, 0x02, 0x2b, 0x08, 0x71, 0x21, 0x0b, 0x12, 0xc5, - 0x80, 0x97, 0x76, 0x6a, 0xae, 0x11, 0xac, 0x31, 0xe1, 0x08, 0x67, 0x08, 0x4f, 0x11, 0xf9, 0x87, - 0x5d, 0xf8, 0x91, 0x1c, 0x20, 0x27, 0x0b, 0x44, 0x85, 0x76, 0x37, 0xb7, 0xff, 0xac, 0x2e, 0xa0, - 0x0f, 0x7e, 0xd0, 0x77, 0xfb, 0xbb, 0xbd, 0xee, 0xff, 0x1f, 0xbd, 0xde, 0xb7, 0xbb, 0xbb, 0xc5, - 0x69, 0xf8, 0xbd, 0xdc, 0x56, 0xf7, 0xe0, 0x68, 0x05, 0x3e, 0x27, 0x84, 0x04, 0x57, 0x2d, 0x57, - 0x78, 0x8c, 0x56, 0x12, 0x36, 0x6f, 0x10, 0x10, 0xe2, 0x03, 0x15, 0x08, 0x78, 0x8d, 0xe2, 0x01, - 0x18, 0xa4, 0xeb, 0x68, 0x57, 0x10, 0x09, 0x09, 0x37, 0xf2, 0xfb, 0xbb, 0x65, 0x49, 0xac, 0x4d, - 0x44, 0xe4, 0x84, 0x3c, 0x48, 0x40, 0x49, 0xf7, 0x49, 0xf7, 0xe2, 0x7c, 0x33, 0xc4, 0x82, 0x16, - 0x75, 0xaa, 0xf0, 0x52, 0x22, 0x46, 0x08, 0xc7, 0x35, 0xf0, 0x53, 0xc4, 0x06, 0x38, 0x80, 0x87, - 0x88, 0x9b, 0x8b, 0x2a, 0xd5, 0x56, 0xb7, 0x08, 0x04, 0x3c, 0x45, 0xc2, 0x01, 0x0e, 0x10, 0x08, - 0x78, 0x91, 0x61, 0x0a, 0xad, 0xad, 0xc2, 0x9c, 0xc2, 0x78, 0x9f, 0xf1, 0x22, 0x2b, 0x5d, 0x53, - 0xe2, 0x51, 0x5f, 0xe6, 0xbd, 0xeb, 0x98, 0xaf, 0x7f, 0x08, 0x18, 0x46, 0x20, 0x70, 0xfd, 0x44, - 0x09, 0xfd, 0x62, 0x7c, 0x20, 0xc4, 0xbb, 0x7e, 0x24, 0x10, 0x0b, 0xbd, 0xdd, 0xdd, 0xdf, 0x10, - 0x08, 0x0b, 0x7b, 0xbc, 0x52, 0x9a, 0x9c, 0x41, 0x6f, 0x77, 0xe2, 0x38, 0x81, 0x12, 0xe1, 0x93, - 0x09, 0x54, 0xfe, 0x11, 0xf9, 0x49, 0xc5, 0x6a, 0x23, 0x3c, 0x20, 0x18, 0xf0, 0x8c, 0x44, 0x00, - 0x00, 0x00, 0x01, 0x41, 0x9a, 0x53, 0x29, 0xb0, 0xa8, 0x2f, 0xd0, 0xfc, 0xbc, 0x42, 0xf6, 0x1d, - 0x84, 0x80, 0x03, 0x94, 0x64, 0x8d, 0xa0, 0x0d, 0x58, 0x27, 0x9f, 0xe2, 0x5e, 0x24, 0xd0, 0x56, - 0x71, 0xe2, 0x31, 0x19, 0xe5, 0x18, 0x1e, 0x7c, 0x42, 0x34, 0x20, 0x89, 0x62, 0x3c, 0xbf, 0x3f, - 0x37, 0xc1, 0x0c, 0xa1, 0x3d, 0xde, 0x23, 0xac, 0x5f, 0x2d, 0xdf, 0x1d, 0xd7, 0xa2, 0xfa, 0xb7, - 0xcb, 0x5a, 0xa9, 0x7a, 0xbc, 0xfd, 0x7a, 0xba, 0xf4, 0x81, 0xe6, 0x14, 0x00, 0x0e, 0xb4, 0x5b, - 0x5b, 0x09, 0x9d, 0x01, 0xc7, 0x9d, 0x90, 0x38, 0x78, 0x9f, 0x2d, 0xdd, 0xee, 0xf5, 0xb8, 0x3b, - 0x70, 0x7b, 0x37, 0xae, 0xef, 0x81, 0x80, 0x02, 0x00, 0x14, 0x9e, 0xe0, 0xac, 0x99, 0xba, 0x95, - 0xf9, 0xde, 0xdc, 0xaa, 0xe9, 0xc9, 0xee, 0x5b, 0xb9, 0x58, 0xba, 0x3b, 0x30, 0xb4, 0x17, 0x0d, - 0xf8, 0x62, 0x9f, 0x0e, 0x1b, 0x55, 0x0f, 0x73, 0x2e, 0x2d, 0xfc, 0x36, 0x41, 0xc0, 0x01, 0x3b, - 0x8c, 0x14, 0x8d, 0xc2, 0xa4, 0xe2, 0x0f, 0xdf, 0xd3, 0xc9, 0xc1, 0xf7, 0x07, 0xdc, 0x7d, 0xc7, - 0xae, 0xce, 0x1e, 0x38, 0x6e, 0x2d, 0x34, 0xf6, 0xdb, 0xc3, 0x78, 0x01, 0x71, 0x34, 0x75, 0x04, - 0x30, 0x25, 0xfe, 0xbd, 0x8b, 0x65, 0xfe, 0x5d, 0x9c, 0x0f, 0xc5, 0x07, 0xe2, 0x32, 0x2a, 0x4e, - 0xfd, 0x65, 0xe8, 0x27, 0xdf, 0x5e, 0xfa, 0xf4, 0xdd, 0x7a, 0x61, 0xca, 0x5c, 0x8a, 0x18, 0xe6, - 0x25, 0x6b, 0x81, 0x20, 0x02, 0x00, 0x14, 0x1d, 0x0a, 0x00, 0xd2, 0x48, 0x0d, 0x16, 0xdd, 0x44, - 0x00, 0x04, 0x54, 0x2d, 0x60, 0xf6, 0x83, 0x59, 0x2c, 0x6d, 0xbb, 0x62, 0xe1, 0xea, 0x46, 0x32, - 0x4f, 0x36, 0x71, 0x00, 0x84, 0x64, 0xf0, 0x70, 0xf6, 0x19, 0x7e, 0xe1, 0x40, 0x15, 0x7f, 0x56, - 0xa7, 0xd9, 0x2d, 0x0f, 0xbd, 0x83, 0x80, 0x01, 0xc2, 0x88, 0xd4, 0xe0, 0x01, 0xe2, 0x82, 0x03, - 0x50, 0xd0, 0x50, 0x18, 0x04, 0x87, 0x51, 0x26, 0x02, 0x43, 0xce, 0x3a, 0x07, 0xa3, 0x02, 0x55, - 0x0f, 0x10, 0x50, 0x00, 0x67, 0x1c, 0xc0, 0x4b, 0xc4, 0x8d, 0x0a, 0x78, 0x4f, 0xff, 0xdb, 0x30, - 0x7a, 0xe4, 0xe3, 0xee, 0x3e, 0xe3, 0xee, 0x77, 0xb3, 0x9d, 0xec, 0xec, 0xec, 0xec, 0xec, 0xe3, - 0x01, 0x01, 0xa1, 0x04, 0xff, 0xc3, 0x0c, 0xa0, 0x0a, 0x51, 0x03, 0x89, 0x1b, 0x83, 0xa8, 0x25, - 0x7d, 0x33, 0x5b, 0x65, 0xac, 0xb5, 0x8a, 0xb1, 0x57, 0xfb, 0x6d, 0xb7, 0xd8, 0x5c, 0x84, 0x00, - 0x60, 0x01, 0xb2, 0x47, 0x17, 0x3d, 0xef, 0x7b, 0xde, 0xf4, 0xb2, 0x74, 0x19, 0xe8, 0x27, 0xe0, - 0x8a, 0xab, 0x96, 0xf8, 0x50, 0x2c, 0xda, 0x72, 0xb1, 0x21, 0x29, 0x87, 0x50, 0xea, 0x51, 0x02, - 0xc3, 0x9c, 0x0b, 0x0d, 0xc9, 0x57, 0x41, 0x35, 0xc4, 0x03, 0x00, 0xa6, 0xa9, 0x03, 0xf4, 0x2d, - 0x03, 0xe4, 0x42, 0x5a, 0x1c, 0x00, 0xa8, 0x38, 0x79, 0x60, 0x0c, 0xe6, 0x07, 0x8e, 0x14, 0x02, - 0xa4, 0x12, 0xc0, 0x06, 0x50, 0x2e, 0xa5, 0x80, 0x03, 0x3c, 0x7d, 0x9e, 0x3e, 0xe6, 0xe1, 0x08, - 0x26, 0x39, 0xfc, 0xf7, 0xd5, 0xd5, 0xb2, 0x9f, 0x48, 0x1a, 0x20, 0x90, 0x23, 0xdc, 0x96, 0xbf, - 0xff, 0xbb, 0x70, 0x15, 0x00, 0x30, 0x02, 0x83, 0x85, 0x6d, 0x8a, 0xcd, 0xe3, 0x29, 0x03, 0x52, - 0x93, 0x53, 0x80, 0x00, 0xaf, 0x06, 0xb2, 0x9d, 0xe1, 0x71, 0xc0, 0x15, 0x22, 0x18, 0x09, 0x4a, - 0xc3, 0x62, 0x98, 0x00, 0x0b, 0xc8, 0xed, 0x26, 0x01, 0x50, 0x08, 0x10, 0x14, 0xe1, 0x80, 0x24, - 0x02, 0x9d, 0x44, 0xa3, 0x51, 0xc1, 0xf5, 0x1c, 0x00, 0xf3, 0xc0, 0x01, 0xc3, 0xc7, 0x0b, 0x06, - 0x70, 0x7b, 0x39, 0x7e, 0xd8, 0x5d, 0x89, 0x00, 0x74, 0x15, 0x8a, 0x72, 0x47, 0x7f, 0xbe, 0xee, - 0xee, 0xe3, 0xec, 0x2e, 0x41, 0x00, 0x05, 0x16, 0xb0, 0xdc, 0xa3, 0x1d, 0xd7, 0xad, 0xbb, 0x7e, - 0xf1, 0x5a, 0xad, 0x6e, 0x82, 0x2e, 0x82, 0xb1, 0x4b, 0x88, 0x58, 0xab, 0xab, 0xfd, 0x7b, 0xc2, - 0x18, 0x5d, 0x85, 0x00, 0x1d, 0x60, 0xa4, 0x52, 0x7a, 0x65, 0xb2, 0xfc, 0xaf, 0x95, 0xff, 0x7c, - 0x3b, 0x80, 0x5b, 0x8d, 0x1b, 0xe0, 0x14, 0xae, 0x1c, 0x7b, 0xfc, 0x24, 0x07, 0x14, 0x9b, 0x02, - 0x67, 0x07, 0x9f, 0x9e, 0x79, 0x21, 0x38, 0x7a, 0xa2, 0x1f, 0x17, 0x97, 0xd2, 0x12, 0x7b, 0xfd, - 0x7e, 0x10, 0x07, 0x01, 0x08, 0x3a, 0xba, 0x1d, 0x71, 0x09, 0x04, 0xa4, 0x13, 0xdf, 0x6e, 0xef, - 0x24, 0x0e, 0x00, 0x32, 0x06, 0x94, 0x51, 0x8a, 0xc5, 0x62, 0xb1, 0x58, 0x35, 0x25, 0x6d, 0x98, - 0x28, 0xc5, 0x62, 0x8c, 0x1d, 0x3e, 0xe6, 0x7c, 0xe9, 0xb5, 0x79, 0xe4, 0x11, 0x1b, 0x59, 0xf6, - 0xf1, 0x5c, 0x34, 0xcc, 0x06, 0xc2, 0xac, 0xb5, 0xc8, 0x12, 0x92, 0xf1, 0x0b, 0xef, 0xfb, 0xfc, - 0xfe, 0x3e, 0x7e, 0x25, 0xe7, 0xbc, 0xf7, 0x9e, 0xfc, 0xce, 0x0e, 0x01, 0x08, 0x2c, 0x1b, 0x69, - 0x45, 0xee, 0xef, 0x17, 0x8b, 0xfb, 0x0b, 0x38, 0x11, 0x92, 0x17, 0x9f, 0x9f, 0xff, 0x2c, 0x25, - 0x86, 0x01, 0x10, 0x00, 0x84, 0x05, 0x05, 0x03, 0x8f, 0x95, 0x05, 0xc2, 0xa5, 0x69, 0x05, 0xed, - 0xc6, 0xfe, 0x4e, 0x31, 0xc4, 0x3f, 0x6e, 0xee, 0xf7, 0xc6, 0xc3, 0x21, 0xef, 0x06, 0xdc, 0x4b, - 0x61, 0x2e, 0x88, 0xfe, 0x21, 0x7a, 0x23, 0xa2, 0x3f, 0xd6, 0xbe, 0xaf, 0x5c, 0x85, 0x55, 0xcb, - 0x11, 0x53, 0xa4, 0xe1, 0xe6, 0x14, 0x01, 0x52, 0x90, 0xa2, 0xd0, 0x96, 0x0a, 0xeb, 0xff, 0x7b, - 0xe8, 0x9e, 0xf7, 0xfc, 0x3c, 0xe0, 0x03, 0xe7, 0x05, 0x4a, 0x24, 0xc3, 0xc8, 0x7f, 0xe9, 0x97, - 0x55, 0x0b, 0x0e, 0x0f, 0x0f, 0x38, 0x07, 0x9e, 0x1e, 0xaa, 0xaa, 0x70, 0x30, 0x3f, 0x03, 0x98, - 0x52, 0x5f, 0xad, 0x70, 0x80, 0x38, 0x19, 0x3c, 0x7e, 0x78, 0xf7, 0x7b, 0xcf, 0x1e, 0x5b, 0x38, - 0x54, 0x16, 0x0c, 0x51, 0xb8, 0x80, 0x16, 0x2f, 0xca, 0x15, 0x5a, 0xd0, 0xe5, 0x43, 0xef, 0x08, - 0x8c, 0x0b, 0x0a, 0xec, 0x57, 0x27, 0x17, 0x41, 0x60, 0xdf, 0x87, 0xb4, 0x3b, 0x11, 0x71, 0x21, - 0xcc, 0x39, 0xe9, 0xc0, 0x60, 0x01, 0x04, 0x15, 0x8f, 0x07, 0xde, 0xdd, 0x98, 0xa7, 0x17, 0xd5, - 0xe9, 0x02, 0x39, 0x90, 0x10, 0xd8, 0x96, 0xd2, 0xf6, 0x1a, 0x46, 0x00, 0x1a, 0xab, 0x30, 0xc9, - 0x3b, 0xc3, 0xdc, 0xf7, 0xc5, 0x70, 0xc8, 0x0f, 0xbd, 0x4d, 0x10, 0x34, 0xca, 0x58, 0x00, 0x3d, - 0x71, 0x20, 0x84, 0x28, 0x74, 0x34, 0x18, 0xcb, 0xeb, 0x05, 0xbb, 0x77, 0x73, 0xd9, 0xd8, 0x12, - 0x3e, 0xed, 0xdd, 0xc7, 0xc7, 0x70, 0xe1, 0x06, 0x88, 0x1f, 0xf6, 0xff, 0xff, 0xbd, 0x3f, 0xc0, - 0xd0, 0x08, 0x3e, 0xfa, 0xaf, 0xab, 0x97, 0x84, 0x6b, 0x10, 0xaf, 0x78, 0x84, 0x47, 0x97, 0x11, - 0x30, 0xb6, 0x2f, 0x94, 0x9d, 0x08, 0x8a, 0x20, 0x52, 0x9a, 0x02, 0x43, 0x4c, 0x20, 0x00, 0x68, - 0xea, 0x41, 0x95, 0x15, 0x3e, 0xee, 0xed, 0xdd, 0xb7, 0x9f, 0xef, 0x85, 0xdc, 0x00, 0xd9, 0x72, - 0x58, 0x61, 0x87, 0x15, 0xfe, 0xfa, 0x8a, 0xc5, 0xc5, 0x1f, 0x89, 0x30, 0x38, 0x1e, 0x24, 0x30, - 0x24, 0x01, 0xc1, 0x63, 0xae, 0x20, 0x06, 0x00, 0xf2, 0x16, 0x0d, 0xdf, 0x6e, 0x7f, 0x88, 0x58, - 0x89, 0x7b, 0xbc, 0x40, 0x27, 0x09, 0xc1, 0x8a, 0xa4, 0xa2, 0xa9, 0xae, 0x6f, 0xd8, 0x5d, 0x85, - 0x02, 0x11, 0x24, 0x86, 0xfb, 0xad, 0x75, 0xd6, 0xb5, 0xad, 0x5d, 0x7b, 0x0b, 0xb0, 0x88, 0x04, - 0x2c, 0xbc, 0x55, 0xec, 0xba, 0xde, 0xf5, 0xef, 0x77, 0xc3, 0x53, 0x02, 0x60, 0x46, 0x25, 0x57, - 0xff, 0xf6, 0xfb, 0x0d, 0xb2, 0x00, 0x11, 0x04, 0xdd, 0x43, 0xc1, 0x17, 0xdf, 0x58, 0xbd, 0x6b, - 0x13, 0xe2, 0x5e, 0x2e, 0x97, 0x9f, 0x7b, 0xd6, 0xb0, 0xdb, 0x1e, 0x0b, 0x5a, 0x2a, 0xc1, 0xde, - 0x18, 0xef, 0x0f, 0x8e, 0xf0, 0x96, 0x97, 0xe4, 0x1d, 0x7f, 0xdf, 0x10, 0x42, 0xac, 0x30, 0xa1, - 0xf6, 0x5b, 0xb7, 0xff, 0xef, 0xe1, 0x07, 0xdd, 0xc9, 0xd5, 0xfe, 0x08, 0xae, 0xee, 0xe6, 0x18, - 0x17, 0xbb, 0xbe, 0xb9, 0xab, 0x5f, 0x82, 0x7a, 0xae, 0xab, 0xb3, 0xea, 0x95, 0x13, 0x97, 0xaa, - 0x88, 0xc4, 0x46, 0x72, 0x75, 0x55, 0xd1, 0x2b, 0x88, 0x06, 0x00, 0xa8, 0x54, 0x2c, 0x2b, 0xdf, - 0xdd, 0x53, 0xa7, 0x71, 0xcc, 0x77, 0x0b, 0xa2, 0x00, 0x15, 0x4c, 0x0a, 0x96, 0x50, 0x35, 0x09, - 0x8a, 0xaa, 0xf0, 0x95, 0x12, 0xaa, 0xaa, 0x92, 0x0a, 0x76, 0x0c, 0xf0, 0x14, 0x03, 0x27, 0xee, - 0xff, 0x6a, 0xe9, 0x04, 0x70, 0xb1, 0x63, 0xaf, 0xd9, 0x44, 0x35, 0x39, 0x81, 0xc3, 0xc9, 0x06, - 0xa7, 0xe1, 0x20, 0x0d, 0x3c, 0x11, 0x84, 0x4b, 0x72, 0xde, 0x55, 0xc3, 0x98, 0xae, 0x20, 0x7c, - 0x9b, 0x59, 0xa1, 0xf8, 0x10, 0x00, 0x44, 0x0c, 0x0a, 0x05, 0xc5, 0x4e, 0x15, 0x0d, 0x52, 0xd5, - 0x4f, 0xf3, 0x5a, 0x93, 0x85, 0x4a, 0xee, 0x46, 0x00, 0x14, 0x45, 0xd7, 0x91, 0x7d, 0x70, 0xc4, - 0x78, 0xb5, 0xa7, 0x51, 0x27, 0xa9, 0x66, 0x2e, 0x28, 0x62, 0x7c, 0xb0, 0x38, 0x69, 0xc0, 0x24, - 0x3f, 0xc2, 0x8f, 0xdf, 0xff, 0x11, 0xe9, 0xc3, 0xf7, 0x03, 0x40, 0x0b, 0x80, 0xa0, 0xa1, 0x00, - 0x07, 0x9c, 0x70, 0x28, 0x15, 0x88, 0x9b, 0x2b, 0xee, 0x71, 0xf6, 0xa2, 0xab, 0x77, 0x77, 0x66, - 0x35, 0x85, 0x40, 0xd7, 0x29, 0x06, 0xbb, 0x19, 0x28, 0xc7, 0x8b, 0x3a, 0x8c, 0xc3, 0x8f, 0x24, - 0x5c, 0x20, 0xaf, 0x8e, 0x27, 0xc8, 0xbd, 0x5e, 0x7e, 0xaf, 0xf5, 0x6a, 0xea, 0xdf, 0x56, 0xfa, - 0xbc, 0x77, 0x30, 0xab, 0xaf, 0xd1, 0xdc, 0xae, 0x71, 0x0b, 0xe6, 0xed, 0xb6, 0x6e, 0xfa, 0x3d, - 0x57, 0x2d, 0xdf, 0x2c, 0x14, 0x89, 0x04, 0xe4, 0x88, 0x7c, 0xbe, 0x9d, 0xe0, 0xe1, 0x10, 0x72, - 0x14, 0x19, 0x22, 0x1f, 0x19, 0xcf, 0x2c, 0x01, 0x93, 0x00, 0x0d, 0x0f, 0x01, 0xc2, 0x60, 0x1a, - 0x3d, 0xde, 0xca, 0x9e, 0x86, 0xe7, 0x96, 0x46, 0x90, 0x18, 0x2b, 0x80, 0xb8, 0x19, 0x1d, 0x03, - 0xe4, 0xea, 0x01, 0xd0, 0x7e, 0xf9, 0xa9, 0x51, 0x1a, 0xc9, 0xe3, 0xa7, 0x9c, 0x4f, 0x18, 0x85, - 0x8c, 0x22, 0x02, 0x00, 0x4e, 0xf7, 0x21, 0x0d, 0x9c, 0xfb, 0x41, 0xb2, 0x09, 0x00, 0x74, 0x9b, - 0x80, 0xbb, 0x3b, 0xf5, 0xf8, 0xb8, 0x9c, 0x11, 0x96, 0x60, 0xde, 0x22, 0xb5, 0xad, 0xef, 0x0b, - 0xc4, 0x00, 0x24, 0xa4, 0xbc, 0xa1, 0x05, 0xf7, 0x99, 0x9e, 0xd4, 0x57, 0xbd, 0x9c, 0xb7, 0x22, - 0xbd, 0xf9, 0x70, 0x2c, 0x81, 0x40, 0x15, 0x1e, 0xaa, 0x2e, 0x59, 0x88, 0x0e, 0x29, 0x66, 0x68, - 0x16, 0x1a, 0x40, 0x48, 0x02, 0x44, 0x28, 0xb9, 0x37, 0x02, 0x80, 0x29, 0x0a, 0x08, 0x14, 0xc5, - 0x0c, 0x50, 0xc5, 0x0c, 0x5c, 0x0c, 0x46, 0x13, 0x82, 0xe1, 0x55, 0x44, 0x41, 0x2a, 0x42, 0x03, - 0x81, 0x50, 0x32, 0xa1, 0x21, 0x20, 0x19, 0xa2, 0x13, 0x0d, 0x58, 0xbc, 0xbe, 0xec, 0xe0, 0x30, - 0x00, 0xc2, 0x08, 0x42, 0x37, 0xc1, 0xeb, 0xee, 0xef, 0x0c, 0xa3, 0xbf, 0x05, 0x00, 0x81, 0x5f, - 0xc4, 0xf8, 0x99, 0x7a, 0x15, 0xd0, 0xbf, 0x42, 0x58, 0x13, 0xa3, 0x32, 0x27, 0xf8, 0x10, 0x02, - 0x83, 0x22, 0x8f, 0xb2, 0xa4, 0xe8, 0xe5, 0x6e, 0x93, 0x7b, 0x6c, 0xe2, 0xdd, 0x61, 0x31, 0xb8, - 0xfb, 0x95, 0xe1, 0x10, 0xa4, 0x74, 0xfe, 0x7b, 0xef, 0x62, 0x5f, 0x67, 0x39, 0x2c, 0x1b, 0x8a, - 0xc5, 0x62, 0x8c, 0x56, 0xfc, 0x4c, 0x29, 0xdd, 0xb2, 0xb1, 0x77, 0x76, 0xd2, 0x0a, 0x63, 0x96, - 0x36, 0xd2, 0xf3, 0x91, 0xaf, 0x8b, 0x1f, 0x70, 0x34, 0xe1, 0x8c, 0x99, 0xf3, 0xb9, 0xce, 0x1c, - 0xe6, 0x0c, 0x02, 0x03, 0x07, 0x5e, 0x2b, 0x15, 0x8a, 0x03, 0xdc, 0x56, 0x48, 0x2a, 0x4a, 0x02, - 0xb2, 0x6b, 0x77, 0xc4, 0x01, 0xa0, 0x28, 0x50, 0xa0, 0x2d, 0x07, 0x24, 0x17, 0xe5, 0x07, 0x44, - 0x2f, 0x52, 0xf5, 0x14, 0xda, 0x55, 0x51, 0x78, 0xb8, 0x91, 0x03, 0x0c, 0xa2, 0xea, 0xa2, 0x99, - 0xe0, 0x6a, 0x17, 0x0e, 0x38, 0x70, 0x15, 0x04, 0x38, 0xdc, 0x2a, 0x8d, 0x6f, 0x02, 0x08, 0x40, - 0x28, 0x70, 0x9f, 0x17, 0xf4, 0x77, 0x7c, 0x1e, 0xdd, 0xf2, 0xd8, 0xad, 0xdd, 0xdd, 0xdc, 0x7f, - 0xf0, 0xca, 0x1e, 0x8e, 0xe1, 0x25, 0x76, 0xf2, 0xef, 0xc4, 0x28, 0x25, 0xf4, 0xf5, 0x57, 0x37, - 0x55, 0x2f, 0x75, 0xad, 0x74, 0x67, 0x7c, 0xa5, 0xd5, 0x44, 0x62, 0x51, 0xfa, 0x4e, 0xae, 0x17, - 0x5c, 0xa7, 0xe8, 0x8e, 0x8d, 0x89, 0x04, 0x02, 0x87, 0x62, 0x1f, 0xca, 0xa1, 0xd6, 0xe5, 0xc3, - 0x23, 0x25, 0x83, 0x77, 0xd6, 0xb5, 0x34, 0x3d, 0xe0, 0xf3, 0xca, 0x88, 0x1c, 0x39, 0xcc, 0x20, - 0x0a, 0x06, 0x44, 0x80, 0xe1, 0x60, 0x32, 0xd9, 0xf5, 0xdb, 0x93, 0xd4, 0x2b, 0xb0, 0xa1, 0x54, - 0x5e, 0x17, 0x05, 0x20, 0x60, 0x0a, 0x54, 0x79, 0x90, 0xef, 0xcb, 0xc4, 0x87, 0x04, 0x9c, 0x0a, - 0x81, 0x54, 0x05, 0x01, 0x71, 0x12, 0x09, 0x74, 0x75, 0x53, 0xf0, 0x8c, 0x49, 0x2f, 0xa8, 0xba, - 0xca, 0xe2, 0x60, 0xaa, 0xb4, 0xea, 0x2e, 0xa2, 0xf0, 0x6a, 0x94, 0x22, 0xbe, 0x99, 0xec, 0xd9, - 0xc4, 0x02, 0x10, 0x4d, 0x9f, 0xa0, 0x71, 0xa1, 0x92, 0x3d, 0xdd, 0xef, 0xc0, 0x20, 0x00, 0x20, - 0x7c, 0x4e, 0x21, 0x7e, 0x82, 0xb5, 0x7c, 0x12, 0x5e, 0xfa, 0xae, 0x89, 0x2b, 0x89, 0xfd, 0x5e, - 0xf0, 0x84, 0x47, 0x42, 0xfa, 0xfa, 0x23, 0x13, 0xf5, 0xe9, 0x31, 0x12, 0xf3, 0x19, 0xdf, 0x5c, - 0xa5, 0xd5, 0x7c, 0xd9, 0x59, 0x9a, 0x38, 0x12, 0x40, 0x44, 0x05, 0x07, 0x3b, 0xee, 0x20, 0x61, - 0x36, 0x21, 0xdf, 0xd4, 0x53, 0x2c, 0xc5, 0xd2, 0x3f, 0x38, 0x31, 0x07, 0x02, 0x88, 0xe5, 0xb7, - 0x15, 0xbb, 0xb5, 0xc4, 0x88, 0x0a, 0x6a, 0xab, 0xba, 0xde, 0xda, 0xa8, 0xa6, 0x34, 0x86, 0x5b, - 0x8f, 0x5e, 0x18, 0x1f, 0x2d, 0xd4, 0xd9, 0x38, 0xb8, 0xbc, 0xa0, 0x71, 0x5f, 0x0b, 0x12, 0x10, - 0xbc, 0x41, 0x57, 0xf6, 0x57, 0xff, 0xf7, 0xbe, 0x24, 0x32, 0x14, 0x3b, 0xc5, 0x6f, 0x0a, 0xc1, - 0x81, 0xfc, 0x5d, 0x54, 0x5d, 0x72, 0xe1, 0x11, 0x01, 0x11, 0x4d, 0x64, 0xef, 0xa6, 0xab, 0x59, - 0x78, 0xb9, 0x5b, 0xc6, 0x01, 0x08, 0x01, 0x12, 0x50, 0x8e, 0x50, 0x46, 0xbe, 0x01, 0x19, 0x11, - 0x3c, 0x46, 0x5e, 0x8e, 0x92, 0xba, 0x9a, 0xae, 0xa9, 0x12, 0xeb, 0xd3, 0xf5, 0x8a, 0xb9, 0x7a, - 0xaf, 0xab, 0x91, 0xbd, 0x1b, 0xa4, 0x83, 0x90, 0x3c, 0x02, 0x41, 0x8e, 0xfc, 0xb8, 0x91, 0x01, - 0x1d, 0x39, 0x7f, 0x2d, 0xa7, 0xd0, 0x66, 0xcf, 0x08, 0x15, 0xed, 0xa3, 0xd0, 0xc4, 0xf2, 0x5e, - 0x2e, 0x29, 0xf8, 0xc8, 0xa0, 0x61, 0x60, 0xd0, 0x50, 0x31, 0x59, 0x11, 0x2d, 0xcb, 0x67, 0xe2, - 0x00, 0xe0, 0xfb, 0x96, 0x07, 0x09, 0xab, 0xc9, 0x61, 0x8a, 0x1c, 0x2c, 0x42, 0x00, 0x24, 0x5a, - 0x24, 0x1b, 0xd6, 0xff, 0xff, 0xf3, 0xf3, 0xfc, 0x0d, 0x00, 0x41, 0x05, 0x02, 0x71, 0x4d, 0x66, - 0xf1, 0x76, 0xe2, 0x03, 0x21, 0x19, 0x14, 0x33, 0x1b, 0x91, 0x7a, 0xbe, 0xef, 0x86, 0x43, 0x03, - 0xc4, 0x6e, 0xea, 0x39, 0x3e, 0xd9, 0xcf, 0x6d, 0xcc, 0xda, 0xc4, 0x80, 0xa8, 0x08, 0x5d, 0x99, - 0x77, 0x28, 0x3d, 0x85, 0x63, 0xff, 0x77, 0x73, 0xf2, 0x8f, 0x7b, 0xc6, 0xf3, 0x77, 0x7e, 0x18, - 0xfa, 0xc5, 0x37, 0x2f, 0x55, 0x5d, 0x1d, 0xa6, 0xe6, 0x36, 0xee, 0xba, 0x2b, 0xd7, 0x45, 0x6a, - 0xe8, 0x8e, 0xae, 0xa9, 0x5a, 0xc4, 0x8f, 0x0a, 0x6e, 0xed, 0xa8, 0xea, 0x64, 0xa2, 0x04, 0x30, - 0x6c, 0x59, 0x48, 0x3b, 0xd4, 0xc3, 0x0a, 0x00, 0x72, 0x42, 0xce, 0x70, 0x15, 0xe2, 0xc1, 0x5a, - 0xc4, 0x71, 0x31, 0x42, 0x35, 0x00, 0xc5, 0xa9, 0x6b, 0x2d, 0xf9, 0x6b, 0x3b, 0x87, 0x38, 0x77, - 0x92, 0x38, 0x6e, 0x33, 0x5b, 0xd9, 0xe2, 0xc3, 0x28, 0xe0, 0x22, 0x83, 0x0c, 0x9e, 0x05, 0x8b, - 0xef, 0x7f, 0xb9, 0xbd, 0xdd, 0x67, 0xf1, 0x47, 0x97, 0x05, 0x20, 0xa0, 0x61, 0x05, 0x03, 0x17, - 0x10, 0x7e, 0x46, 0x19, 0x46, 0xce, 0xd0, 0x5c, 0x26, 0xe6, 0xe0, 0x88, 0x22, 0x26, 0x9b, 0x1e, - 0xdd, 0xcb, 0x03, 0x2a, 0xca, 0x58, 0x1c, 0x32, 0x84, 0x80, 0x0a, 0x52, 0xf4, 0x15, 0xa3, 0xd1, - 0x71, 0x7f, 0xf4, 0xd3, 0x7b, 0xef, 0xc1, 0x08, 0x08, 0x01, 0xc4, 0x11, 0xc2, 0xe8, 0x56, 0x28, - 0xd5, 0x71, 0x20, 0x3e, 0xc1, 0xd7, 0xfe, 0x18, 0x08, 0x1c, 0x4f, 0x24, 0x5e, 0x30, 0xa5, 0xb8, - 0xe7, 0xcc, 0x79, 0x0f, 0x82, 0x90, 0x59, 0x76, 0x62, 0x8c, 0x28, 0xd8, 0x57, 0x88, 0x40, 0xf3, - 0xfe, 0xfd, 0xe0, 0x60, 0x18, 0x3a, 0x9b, 0x59, 0xc2, 0xad, 0x3b, 0xaa, 0xaa, 0xb4, 0xd2, 0x85, - 0x4a, 0x63, 0xc1, 0x18, 0xd7, 0x8c, 0x0b, 0x8b, 0xdb, 0x57, 0x04, 0x22, 0xdd, 0xdd, 0xd3, 0xdf, - 0x57, 0x2f, 0xab, 0xa1, 0xce, 0xbd, 0x5d, 0x75, 0x27, 0x5d, 0x5c, 0x1c, 0x81, 0x80, 0x81, 0x01, - 0xda, 0x51, 0x37, 0xad, 0xaf, 0x88, 0x0a, 0x4f, 0xf2, 0x70, 0x35, 0x25, 0xa2, 0x72, 0x1e, 0x24, - 0xb2, 0x0a, 0xf1, 0x50, 0xec, 0xf5, 0x3e, 0x3a, 0x46, 0xc9, 0x5a, 0x8c, 0x92, 0x51, 0xd1, 0x63, - 0xb7, 0x05, 0x0e, 0xcb, 0xde, 0x24, 0x61, 0x9e, 0x38, 0x77, 0x1e, 0xb1, 0x3e, 0x58, 0x01, 0x93, - 0x80, 0x78, 0x63, 0x80, 0x05, 0x80, 0x77, 0x4a, 0x78, 0x70, 0xa6, 0xf2, 0x8f, 0x91, 0xf8, 0x26, - 0xf0, 0x5b, 0x84, 0x83, 0x6c, 0x11, 0xcd, 0x7f, 0xc7, 0xde, 0x00, 0x3c, 0xbc, 0x79, 0x7b, 0x9a, - 0xd7, 0x5c, 0x23, 0x14, 0x52, 0x50, 0xd8, 0x9b, 0x78, 0x38, 0x96, 0x07, 0x19, 0x28, 0x37, 0x64, - 0x39, 0x2c, 0xc4, 0xc1, 0x5f, 0x9c, 0x60, 0xb6, 0x4a, 0x59, 0x54, 0xdc, 0x89, 0xa6, 0x84, 0x70, - 0xbd, 0xcf, 0x10, 0x24, 0x4a, 0xdb, 0x9b, 0x11, 0x93, 0x07, 0xc7, 0x73, 0xcb, 0xaa, 0xaf, 0x05, - 0x02, 0x88, 0xb2, 0xb9, 0xdb, 0xe2, 0x40, 0x4c, 0x02, 0xb1, 0x07, 0xb8, 0x7f, 0x39, 0x77, 0xad, - 0xdc, 0x7d, 0x94, 0x52, 0xd1, 0x13, 0x81, 0x04, 0x0e, 0x00, 0xa0, 0x5b, 0x6a, 0x1b, 0x65, 0x45, - 0x5a, 0x89, 0x2a, 0x6e, 0x86, 0xb1, 0x10, 0x2d, 0x68, 0xdf, 0xd5, 0xd1, 0x1d, 0x11, 0x8f, 0xa2, - 0xa6, 0xfa, 0xb9, 0x13, 0xc1, 0x15, 0x57, 0x74, 0x9c, 0xa5, 0xbb, 0xb9, 0x3a, 0xcb, 0x83, 0x90, - 0x34, 0x20, 0x97, 0x70, 0x88, 0x80, 0x4b, 0x77, 0xdd, 0xf6, 0x78, 0x90, 0x8e, 0xaa, 0xb4, 0x31, - 0x5e, 0x2b, 0x10, 0xe3, 0x82, 0x34, 0x81, 0xf5, 0x89, 0x84, 0x0d, 0x79, 0x65, 0xb5, 0xee, 0x2b, - 0xbf, 0x13, 0xc4, 0x04, 0x38, 0x44, 0x22, 0x0a, 0x44, 0x8f, 0x7d, 0xf9, 0x03, 0x80, 0x7a, 0x49, - 0xb8, 0x7a, 0xaa, 0x65, 0x7b, 0x88, 0xf8, 0x60, 0x5e, 0xb5, 0x5a, 0xd4, 0x10, 0x82, 0x10, 0x4f, - 0x15, 0x87, 0x63, 0x15, 0xaf, 0xe9, 0xcd, 0x18, 0x4d, 0xa3, 0xfc, 0x40, 0xa2, 0xd3, 0xc3, 0x9c, - 0xc4, 0xb9, 0x89, 0x7f, 0x04, 0x20, 0x20, 0x21, 0x6e, 0x82, 0x2e, 0x44, 0x04, 0x88, 0x44, 0x83, - 0x7e, 0x32, 0x93, 0xd3, 0xf1, 0x70, 0x72, 0x06, 0x80, 0x46, 0x41, 0x71, 0x71, 0x72, 0x68, 0x10, - 0x83, 0x71, 0x02, 0x41, 0x0e, 0x91, 0x33, 0x6e, 0x11, 0x11, 0xc4, 0x88, 0x14, 0x63, 0xa4, 0xdf, - 0x4f, 0xdb, 0x82, 0xb3, 0x9e, 0xed, 0xf8, 0x80, 0x88, 0x42, 0xf4, 0x65, 0x6e, 0x20, 0xf4, 0x16, - 0x0e, 0x68, 0x4b, 0x51, 0x12, 0x70, 0x41, 0x08, 0x07, 0x02, 0x41, 0x74, 0xca, 0x0f, 0xa8, 0x3d, - 0xf0, 0x5e, 0xf1, 0x96, 0xaa, 0xd1, 0x71, 0xea, 0x95, 0x41, 0x64, 0x78, 0x1a, 0x31, 0x59, 0x65, - 0xff, 0x11, 0x12, 0x25, 0xef, 0x55, 0xf0, 0xc0, 0x0a, 0x80, 0xa1, 0x45, 0x31, 0x1c, 0x59, 0x17, - 0x14, 0xd4, 0x53, 0x89, 0xf5, 0x3f, 0xcb, 0xc5, 0xcb, 0x31, 0x4f, 0xd8, 0xc9, 0xc3, 0x43, 0xf3, - 0xf0, 0x88, 0x18, 0x04, 0x54, 0x98, 0xbd, 0xbf, 0x14, 0x43, 0x07, 0xea, 0xf8, 0x20, 0x02, 0x41, - 0x31, 0x91, 0x10, 0xfc, 0x32, 0xa0, 0x0b, 0x5d, 0xa1, 0x9b, 0xfa, 0x9b, 0x6f, 0xdd, 0xcd, 0xdc, - 0x1c, 0x9f, 0xd3, 0x2f, 0x92, 0xf8, 0xd6, 0x4a, 0x58, 0xe0, 0xc4, 0x0e, 0x00, 0xa8, 0x75, 0x95, - 0x73, 0x64, 0x47, 0x36, 0xdb, 0x83, 0x10, 0x38, 0x14, 0xf7, 0x9f, 0x85, 0x7a, 0x1a, 0xc4, 0x5f, - 0x42, 0x2a, 0xf8, 0x23, 0xab, 0xed, 0x41, 0x82, 0x58, 0x36, 0xdb, 0xdb, 0x6f, 0xfe, 0xdd, 0x7c, - 0x31, 0xd4, 0x4f, 0x22, 0x7c, 0x1d, 0x0b, 0x0e, 0xf0, 0x40, 0xcd, 0xd3, 0x07, 0x37, 0xfc, 0x18, - 0x81, 0xc0, 0x12, 0x88, 0x10, 0x07, 0x04, 0x01, 0xc1, 0x4c, 0xbc, 0x41, 0xc1, 0x4e, 0x62, 0x26, - 0x9f, 0x0a, 0x16, 0x21, 0x62, 0x75, 0x5a, 0xa7, 0x4a, 0x9b, 0xde, 0x2f, 0x4e, 0x26, 0xca, 0xeb, - 0xe2, 0x61, 0x2d, 0xed, 0x58, 0xeb, 0xe0, 0xa4, 0xcd, 0xe9, 0x65, 0x62, 0x90, 0xac, 0xbd, 0xff, - 0xb8, 0x44, 0x30, 0x33, 0x67, 0xb4, 0xcb, 0xc3, 0xb5, 0x65, 0xd8, 0x0a, 0x87, 0x19, 0x51, 0x7f, - 0x4b, 0xe5, 0xe1, 0xc1, 0xda, 0x95, 0x8d, 0x07, 0x21, 0x11, 0xff, 0x13, 0xf1, 0x20, 0x9c, 0x48, - 0xae, 0xed, 0xd5, 0x55, 0xf0, 0xbe, 0x00, 0xc0, 0xfd, 0x07, 0x39, 0xf7, 0xd7, 0xff, 0xef, 0x08, - 0xba, 0xc9, 0xf8, 0x39, 0x93, 0x56, 0xd6, 0x29, 0x14, 0x11, 0xce, 0xd2, 0x8a, 0x70, 0x8e, 0xa9, - 0xf8, 0x80, 0x81, 0x6b, 0x5f, 0x8e, 0x23, 0xbe, 0x5c, 0xb7, 0x49, 0x3d, 0x3c, 0x44, 0x78, 0xa9, - 0x0c, 0x5d, 0x99, 0x48, 0x98, 0xe6, 0x23, 0x95, 0x27, 0xe1, 0x90, 0x38, 0x02, 0xbe, 0x2b, 0xc2, - 0x12, 0xe2, 0x9d, 0x80, 0x37, 0xa1, 0x45, 0x53, 0xc6, 0xe1, 0x90, 0x38, 0x02, 0x33, 0xe1, 0xa6, - 0x12, 0xca, 0x9e, 0x0c, 0x21, 0x6e, 0x8e, 0xf5, 0xd0, 0x93, 0x27, 0xcc, 0x4b, 0xdc, 0xbd, 0x5b, - 0xea, 0xd5, 0xd5, 0xb8, 0x39, 0x01, 0x10, 0x0b, 0x05, 0x52, 0x7e, 0xa2, 0xf5, 0x58, 0xfd, 0xc4, - 0x84, 0x19, 0x05, 0xe5, 0x1f, 0x0c, 0x82, 0x80, 0x8c, 0x56, 0xdb, 0x9b, 0xb8, 0x97, 0x05, 0x65, - 0xbc, 0x4f, 0xc4, 0x9f, 0x88, 0x10, 0x10, 0x2b, 0x16, 0xdd, 0xda, 0x5b, 0xb1, 0x46, 0xf7, 0xc3, - 0x4c, 0xa0, 0x47, 0xc7, 0x73, 0x7f, 0xff, 0x65, 0xbf, 0x08, 0xc1, 0x57, 0x55, 0xba, 0x6e, 0x39, - 0x42, 0xde, 0x21, 0xef, 0xc4, 0x88, 0x05, 0x03, 0x1d, 0xed, 0xb9, 0xb2, 0x9b, 0xf1, 0x02, 0x42, - 0x94, 0x7d, 0xc5, 0x40, 0xfd, 0x82, 0xaf, 0x40, 0x77, 0x24, 0xa3, 0x91, 0x51, 0xce, 0x2d, 0xc4, - 0x2b, 0x4a, 0x56, 0x30, 0xaa, 0xc9, 0x6a, 0x88, 0x03, 0xe7, 0xc2, 0x71, 0x20, 0x0c, 0x01, 0xed, - 0xa1, 0x92, 0x94, 0x4f, 0xaf, 0xa3, 0x4c, 0xbb, 0x07, 0x37, 0xc5, 0xbe, 0x11, 0x02, 0x47, 0x88, - 0x09, 0x6b, 0x57, 0xde, 0x3a, 0x70, 0x4a, 0x95, 0x33, 0xbd, 0xc4, 0x41, 0x45, 0x57, 0x59, 0xb8, - 0xa7, 0xee, 0x24, 0x22, 0x52, 0x2a, 0xaa, 0xc2, 0xb1, 0x60, 0x89, 0x28, 0x3b, 0xff, 0x6f, 0xf8, - 0x64, 0x1c, 0x14, 0xca, 0xbe, 0x0a, 0x00, 0x80, 0x13, 0x99, 0x8f, 0xdd, 0xf0, 0x80, 0x38, 0xf0, - 0x3c, 0x02, 0x5a, 0xce, 0x15, 0x2a, 0x1f, 0x81, 0x2c, 0x4c, 0xcf, 0x7c, 0x28, 0x33, 0x8c, 0xea, - 0x0b, 0xcb, 0xcd, 0xc4, 0x87, 0x22, 0x2e, 0x85, 0xc2, 0x85, 0x90, 0xb9, 0xda, 0x1f, 0x04, 0x01, - 0x67, 0x2c, 0xcb, 0xc6, 0x8a, 0x22, 0xc3, 0x20, 0x40, 0x0a, 0x44, 0x9c, 0x13, 0xc1, 0xe5, 0x85, - 0x86, 0x2e, 0x27, 0x82, 0x86, 0x58, 0x74, 0x81, 0xfe, 0x8e, 0x2d, 0x9c, 0x1c, 0x2c, 0x32, 0xbf, - 0x22, 0x43, 0x90, 0xc0, 0x05, 0x0d, 0x2b, 0xc3, 0x61, 0x1d, 0x6f, 0xb5, 0xcb, 0xad, 0xf9, 0xf8, - 0x28, 0x1c, 0x67, 0xfd, 0x4a, 0xa1, 0xd5, 0xd0, 0x4d, 0x2a, 0x09, 0x77, 0x7b, 0xfc, 0x25, 0xd5, - 0x75, 0x54, 0x39, 0x4b, 0x0c, 0x9d, 0x7a, 0xa3, 0xf8, 0x29, 0x01, 0x00, 0x0a, 0x87, 0x55, 0x6a, - 0xa6, 0xf8, 0xba, 0x88, 0x98, 0xe0, 0xa0, 0x08, 0x3b, 0xe1, 0x01, 0x95, 0x17, 0x17, 0x49, 0x69, - 0x55, 0x3a, 0x6e, 0x2b, 0x71, 0x5e, 0x20, 0x40, 0x52, 0xb5, 0xdd, 0xc5, 0x1d, 0xdd, 0xc5, 0x62, - 0x8c, 0x51, 0x8a, 0x37, 0xf1, 0x01, 0x02, 0x0a, 0x30, 0xb8, 0xa8, 0xa0, 0xec, 0x56, 0xef, 0x13, - 0xe3, 0x0a, 0x2e, 0xcf, 0x1c, 0x42, 0x82, 0x02, 0xba, 0xce, 0x2e, 0xc2, 0xec, 0xa3, 0xb4, 0xfa, - 0x2a, 0x2f, 0xa2, 0xa2, 0x1f, 0x61, 0x34, 0x40, 0x06, 0x3f, 0x26, 0x4f, 0x6f, 0xad, 0x7e, 0xdb, - 0x7c, 0x22, 0x19, 0x18, 0x20, 0x51, 0x89, 0x72, 0xa2, 0x41, 0xc3, 0xc1, 0x22, 0x05, 0x07, 0xb2, - 0xa9, 0x78, 0x00, 0x75, 0x3c, 0x3d, 0x5a, 0x8f, 0x1f, 0x53, 0x0e, 0xa0, 0xb0, 0x4b, 0x87, 0x00, - 0xe2, 0xb5, 0xc2, 0x22, 0x46, 0x47, 0x56, 0x48, 0x3d, 0x84, 0x49, 0x60, 0xa2, 0x82, 0xa7, 0x6c, - 0x54, 0x71, 0xe1, 0xda, 0x53, 0xc0, 0x70, 0xf0, 0x6b, 0xd9, 0x3f, 0x02, 0xbf, 0xac, 0xb0, 0x06, - 0x25, 0x7d, 0x40, 0xff, 0x12, 0x0a, 0x02, 0x92, 0x4b, 0x21, 0x5b, 0xc0, 0xf7, 0xe5, 0x80, 0xc4, - 0xbc, 0x0a, 0x2b, 0xe8, 0xf0, 0x61, 0xdf, 0x5a, 0xc9, 0xc0, 0xd5, 0x19, 0x2d, 0x5d, 0xad, 0x62, - 0x5c, 0xe1, 0x00, 0x88, 0x50, 0xe2, 0xb7, 0x06, 0x23, 0x57, 0xfa, 0xc5, 0xca, 0xad, 0x77, 0x72, - 0x75, 0x14, 0xe4, 0x48, 0x7f, 0x70, 0x11, 0x02, 0x04, 0x89, 0x3e, 0xc9, 0x79, 0x38, 0xbc, 0xcf, - 0x02, 0x08, 0x95, 0xf7, 0x03, 0xcc, 0x14, 0xd7, 0x7a, 0x97, 0x3b, 0xac, 0x76, 0x3f, 0x81, 0xa6, - 0x14, 0x25, 0x35, 0x88, 0x78, 0xa0, 0xc5, 0x62, 0x83, 0x5a, 0xac, 0x56, 0xbe, 0xe0, 0xc4, 0x0b, - 0x14, 0x16, 0x9c, 0x0c, 0x7a, 0x1d, 0xff, 0xf5, 0x75, 0x75, 0x10, 0x0a, 0x01, 0x21, 0x15, 0x55, - 0x7d, 0x86, 0x14, 0x09, 0x99, 0xa9, 0xd7, 0xff, 0xfb, 0x7b, 0xf0, 0x88, 0x0d, 0x01, 0x06, 0xc5, - 0xf0, 0xfc, 0x09, 0x43, 0x96, 0x00, 0x02, 0x00, 0x4a, 0x5e, 0x4a, 0x05, 0x70, 0x80, 0x0a, 0x81, - 0xa6, 0x1f, 0x60, 0x39, 0xb2, 0xa2, 0xc1, 0x83, 0xec, 0x16, 0x8b, 0x18, 0xad, 0x5a, 0x55, 0x9b, - 0x16, 0x40, 0xd0, 0x30, 0x37, 0x05, 0x56, 0x33, 0xc0, 0x75, 0x6f, 0x0e, 0x1f, 0xff, 0xc1, 0x19, - 0xee, 0x21, 0xcb, 0xaa, 0xe0, 0xa2, 0xf7, 0xdd, 0xb5, 0x77, 0xc1, 0x15, 0xad, 0xb8, 0xbe, 0x0b, - 0x25, 0xcf, 0xba, 0x2b, 0x75, 0xef, 0x98, 0xcd, 0x6a, 0x5e, 0x8b, 0x04, 0x9d, 0x17, 0xa4, 0xea, - 0x61, 0x5f, 0x5c, 0x27, 0xe8, 0xb5, 0x50, 0x60, 0x20, 0x13, 0xd2, 0xc2, 0xd6, 0x4d, 0x49, 0x20, - 0x66, 0xd5, 0x16, 0x71, 0x02, 0x43, 0x24, 0x36, 0x09, 0xc0, 0xee, 0x44, 0x04, 0x49, 0x14, 0xff, - 0xc5, 0x12, 0x11, 0x35, 0x66, 0x10, 0x04, 0x00, 0xbb, 0x15, 0xe9, 0x97, 0xb9, 0xc3, 0x95, 0xc4, - 0x80, 0x80, 0x05, 0x06, 0xb7, 0x6c, 0x5e, 0x20, 0xff, 0x70, 0x50, 0x01, 0x41, 0x1e, 0x7a, 0xb6, - 0xab, 0x5e, 0xef, 0x1c, 0xca, 0x00, 0xbd, 0xe2, 0xfe, 0x71, 0x3e, 0x18, 0x50, 0x02, 0xe8, 0xd6, - 0xb1, 0xb1, 0xfa, 0x7b, 0x66, 0xf5, 0xff, 0xf7, 0x86, 0x06, 0x10, 0x4d, 0x92, 0xda, 0xa4, 0xc9, - 0xe3, 0x8f, 0x20, 0x92, 0x54, 0xb5, 0x9d, 0xdd, 0x31, 0x22, 0x20, 0x2a, 0xd0, 0x29, 0x49, 0xaa, - 0x96, 0x47, 0x00, 0x3f, 0x84, 0x01, 0x4c, 0x7a, 0xc1, 0xe5, 0x87, 0x0e, 0x1c, 0xe0, 0xf0, 0xb0, - 0x78, 0x59, 0x75, 0x96, 0x03, 0xb2, 0xc0, 0x6e, 0x89, 0x4b, 0x08, 0x83, 0x00, 0x53, 0x24, 0xad, - 0x3c, 0x77, 0x9f, 0x95, 0x7e, 0x2b, 0x7e, 0x45, 0x0b, 0xe0, 0x2d, 0xa5, 0x0d, 0x4c, 0x1e, 0x4d, - 0x8b, 0xbf, 0x8b, 0xb8, 0xb8, 0xae, 0xb5, 0xec, 0x30, 0x84, 0x80, 0x29, 0xb2, 0x1f, 0x1a, 0xb5, - 0x7d, 0xbb, 0x7f, 0xe8, 0xfc, 0x72, 0x20, 0x46, 0x10, 0x8e, 0xbb, 0x12, 0xca, 0x00, 0xb6, 0xd8, - 0x79, 0x23, 0xa2, 0x88, 0x60, 0x28, 0xd7, 0xf5, 0x86, 0x40, 0xa0, 0xe2, 0x9a, 0x8b, 0xae, 0x0c, - 0x23, 0xc4, 0x8b, 0xaa, 0xea, 0xd8, 0x9e, 0x37, 0xae, 0x16, 0x90, 0x01, 0x6f, 0xf4, 0x83, 0x7d, - 0xef, 0xf7, 0xbe, 0x11, 0x06, 0x0e, 0xf7, 0xf8, 0x22, 0xaa, 0xa8, 0xbf, 0xb1, 0x68, 0x48, 0x03, - 0xc6, 0xa1, 0x98, 0x38, 0x76, 0x3f, 0xc0, 0xd0, 0x14, 0x10, 0xb1, 0x7a, 0x32, 0xd2, 0xd0, 0xb8, - 0xb8, 0xb8, 0xba, 0xa8, 0xbf, 0xde, 0x07, 0x00, 0x4f, 0x2e, 0x87, 0x2c, 0x04, 0xb6, 0xed, 0xcf, - 0x9b, 0x70, 0x88, 0x1e, 0x06, 0x8e, 0x3c, 0x7d, 0x45, 0xb0, 0x62, 0x94, 0x1d, 0x58, 0x0e, 0x96, - 0x1e, 0x00, 0x04, 0x39, 0xe0, 0x00, 0x53, 0x3a, 0xa8, 0x31, 0x12, 0x9c, 0x00, 0x04, 0xb2, 0x49, - 0x40, 0x2a, 0x0e, 0x00, 0x05, 0x01, 0x90, 0x8b, 0x40, 0xe0, 0x7f, 0x07, 0x03, 0x3d, 0x7f, 0xd1, - 0x4c, 0x9f, 0x56, 0x9f, 0x82, 0xd3, 0xbe, 0x9b, 0x5b, 0x5a, 0xf8, 0xea, 0x49, 0x69, 0xb6, 0x9b, - 0x69, 0x9f, 0x5a, 0xfc, 0x16, 0x5a, 0xb5, 0x49, 0x2d, 0x37, 0xeb, 0xe0, 0x8a, 0x6c, 0xfa, 0xf8, - 0xbf, 0x3e, 0x6d, 0x35, 0xeb, 0xd7, 0xc2, 0x76, 0xb6, 0xa3, 0x8b, 0xfd, 0x6b, 0xe4, 0xa6, 0xdf, - 0xe1, 0x3e, 0x92, 0x54, 0x9a, 0x52, 0xf3, 0x17, 0x17, 0xae, 0x2b, 0x4d, 0x3b, 0x5a, 0xf8, 0x4e, - 0xf6, 0xad, 0x35, 0xe2, 0x60, 0x92, 0xad, 0x6d, 0xc1, 0x84, 0x61, 0x94, 0x5d, 0xd4, 0xbf, 0xcf, - 0xcb, 0xc5, 0x58, 0xb9, 0x3f, 0x7c, 0x48, 0x08, 0x85, 0xd5, 0x44, 0x01, 0x20, 0x5f, 0x27, 0x8a, - 0xde, 0xf0, 0xbb, 0x30, 0x03, 0x42, 0x1c, 0xbd, 0x8e, 0x4d, 0x45, 0x2c, 0x35, 0xad, 0xe2, 0xba, - 0xa8, 0xbe, 0x93, 0x1c, 0xce, 0x09, 0x05, 0x3a, 0xcd, 0x61, 0xa6, 0x50, 0x2c, 0x28, 0x75, 0x9f, - 0xfe, 0xbe, 0xf8, 0x5a, 0x50, 0x0a, 0xb7, 0x8e, 0x5e, 0xff, 0xff, 0x7e, 0x0c, 0x41, 0x48, 0x82, - 0xe2, 0xe5, 0x1f, 0x62, 0x4a, 0x50, 0x1d, 0xf6, 0x5f, 0x7f, 0xda, 0x21, 0x1b, 0x70, 0x27, 0xc3, - 0x58, 0x09, 0xbb, 0x65, 0x4d, 0xfd, 0x7f, 0xfa, 0x79, 0x61, 0xac, 0x03, 0x2e, 0x9d, 0x2f, 0xfd, - 0x34, 0xfd, 0x2a, 0x85, 0x94, 0x00, 0xfe, 0x5e, 0xc4, 0x4e, 0x05, 0xfd, 0x7a, 0x69, 0xaa, 0x69, - 0xc5, 0xb1, 0x20, 0xbc, 0x24, 0x5d, 0x89, 0x9c, 0x1d, 0x26, 0x27, 0x42, 0x00, 0x15, 0xab, 0x14, - 0x79, 0xb4, 0x34, 0xcc, 0x00, 0x8e, 0xbc, 0x12, 0x0a, 0x17, 0x7d, 0x7f, 0xf7, 0xe1, 0x00, 0x14, - 0x22, 0x4a, 0x20, 0xf8, 0x8f, 0xad, 0x7c, 0x04, 0x07, 0xc6, 0x6e, 0xe2, 0xb1, 0x5b, 0x8a, 0x0d, - 0xdc, 0x51, 0xc5, 0x62, 0x5f, 0x25, 0xb3, 0x7e, 0x10, 0x25, 0xb5, 0xf8, 0x61, 0x7d, 0xc4, 0x82, - 0x14, 0x56, 0xc6, 0xb8, 0x2a, 0x14, 0x8d, 0x7b, 0x83, 0x90, 0x70, 0x89, 0xee, 0x10, 0x10, 0x32, - 0xab, 0xd5, 0x2a, 0x4f, 0xfa, 0xb8, 0xa3, 0xb7, 0x78, 0x78, 0x82, 0x00, 0x30, 0x61, 0xa9, 0xa7, - 0x17, 0x8d, 0x53, 0x7c, 0xb7, 0xdb, 0x6d, 0xdd, 0xb7, 0xb6, 0xf0, 0x74, 0x27, 0x10, 0x75, 0x7a, - 0x30, 0x6a, 0xbb, 0xcd, 0xd8, 0x96, 0xd6, 0x9f, 0xad, 0x44, 0xf1, 0x77, 0xbf, 0x55, 0xf0, 0x49, - 0x5a, 0xe2, 0xf8, 0xcb, 0x4d, 0x7b, 0xba, 0x49, 0x6d, 0xdf, 0xe1, 0xca, 0x49, 0x55, 0x52, 0x49, - 0x34, 0xff, 0xc1, 0x15, 0xdf, 0xc3, 0xe8, 0x9a, 0xfa, 0xc5, 0x34, 0x44, 0x12, 0x6a, 0xd8, 0xbc, - 0x1c, 0x1c, 0x80, 0xa0, 0x04, 0xb1, 0x43, 0x27, 0x0a, 0x15, 0xf7, 0x74, 0xff, 0x16, 0x77, 0xbe, - 0xf7, 0x85, 0x9c, 0x09, 0x47, 0x53, 0x3f, 0xb7, 0xff, 0xa6, 0x9f, 0x16, 0xc8, 0x10, 0x43, 0x85, - 0x57, 0xc2, 0xec, 0x50, 0x01, 0xdb, 0xec, 0x57, 0xa9, 0xb7, 0xff, 0x4f, 0x77, 0x25, 0xc1, 0x00, - 0x1a, 0x05, 0x8b, 0x8b, 0x9b, 0x97, 0xac, 0x5c, 0x53, 0xc1, 0x08, 0x0b, 0x05, 0x1d, 0xb0, 0x99, - 0x20, 0x0a, 0x43, 0x44, 0xa0, 0xba, 0xe7, 0x27, 0xde, 0xff, 0x15, 0xc5, 0x7c, 0x10, 0x81, 0xa0, - 0x64, 0x51, 0x96, 0x31, 0x41, 0x88, 0x1c, 0x10, 0xb1, 0xad, 0x12, 0xbf, 0x8b, 0xfb, 0x76, 0xf0, - 0xcf, 0x1c, 0x48, 0x04, 0x65, 0x5f, 0xc8, 0xec, 0x76, 0x05, 0x70, 0xcd, 0x76, 0x2d, 0x94, 0x0b, - 0x5f, 0x4f, 0xf6, 0x17, 0x45, 0x00, 0x67, 0xa7, 0xdd, 0xdb, 0xff, 0xad, 0x7e, 0xb5, 0x67, 0x07, - 0x31, 0x82, 0x85, 0x31, 0x71, 0x75, 0x11, 0xc2, 0x66, 0xe2, 0xf1, 0x07, 0xdc, 0x56, 0xe2, 0x8f, - 0xc2, 0x05, 0x17, 0x5b, 0xbb, 0xbb, 0xea, 0x2f, 0x09, 0xb2, 0x89, 0x15, 0x3f, 0xfd, 0xbf, 0x85, - 0x27, 0x05, 0x94, 0x4d, 0x9e, 0xf7, 0xfd, 0x6b, 0xe1, 0x40, 0x83, 0x8a, 0xdd, 0xeb, 0x57, 0x8a, - 0xdf, 0x55, 0x97, 0x02, 0x00, 0x38, 0x05, 0x42, 0xdd, 0xbe, 0x2f, 0x5a, 0x9b, 0x9e, 0x70, 0x77, - 0x61, 0xac, 0x21, 0x49, 0x2f, 0xfe, 0x9f, 0xb7, 0x86, 0x15, 0xb0, 0xa2, 0x12, 0x36, 0xd1, 0xfd, - 0xbf, 0xf8, 0xa6, 0x20, 0x2f, 0x5c, 0x22, 0x0e, 0x05, 0x12, 0xab, 0xbd, 0xf8, 0x0a, 0x80, 0x4a, - 0x41, 0xda, 0xfb, 0xb6, 0xd1, 0x59, 0x83, 0xee, 0x22, 0x16, 0x85, 0x8a, 0xad, 0xc1, 0x28, 0x15, - 0x1e, 0xb8, 0x7b, 0x35, 0x42, 0x1e, 0x25, 0x00, 0x02, 0xea, 0x45, 0x8d, 0x42, 0x10, 0x18, 0x41, - 0x00, 0x96, 0x0d, 0x57, 0x63, 0xb7, 0x06, 0xa5, 0xde, 0x27, 0x89, 0xb6, 0xd6, 0x7f, 0xfd, 0xdd, - 0xff, 0x5e, 0xae, 0xb1, 0x7d, 0x58, 0xbe, 0xbf, 0x3e, 0xae, 0x7c, 0xd6, 0xcb, 0xbf, 0x9b, 0x9f, - 0xcf, 0xc1, 0x39, 0x24, 0xf5, 0x27, 0x94, 0xd4, 0x45, 0x67, 0x04, 0x21, 0x8e, 0x27, 0x8e, 0x21, - 0xc3, 0x42, 0x62, 0xf8, 0xa7, 0x04, 0xf3, 0xea, 0xfc, 0x14, 0x86, 0x06, 0x0a, 0x14, 0x18, 0x97, - 0x88, 0x1e, 0x78, 0xf9, 0x59, 0x51, 0x59, 0x6d, 0xc5, 0x6d, 0xad, 0x70, 0x88, 0x64, 0x12, 0x0d, - 0xad, 0x47, 0x77, 0x05, 0x20, 0x40, 0x04, 0x44, 0x15, 0x8a, 0xdd, 0xc7, 0x6e, 0x24, 0x48, 0x2a, - 0x89, 0x70, 0x57, 0xc5, 0x6f, 0x51, 0x71, 0x4c, 0x53, 0x14, 0x31, 0xdd, 0x85, 0x19, 0x40, 0x1c, - 0x7a, 0x30, 0x4f, 0x3d, 0xb6, 0xde, 0xdb, 0x6d, 0xb7, 0xb6, 0xdf, 0x0b, 0x92, 0x00, 0xc1, 0x6b, - 0x21, 0x8a, 0x26, 0xd1, 0xe0, 0xf6, 0xee, 0xee, 0xe5, 0xf6, 0x78, 0x16, 0xdd, 0xc5, 0x6f, 0x2c, - 0x32, 0xa0, 0x03, 0x00, 0x3f, 0x90, 0xa0, 0xb6, 0x85, 0x6b, 0xff, 0x6d, 0xb7, 0x3f, 0x2a, 0xcc, - 0x34, 0x88, 0x04, 0x85, 0x90, 0x37, 0xdc, 0x7f, 0xfe, 0xbf, 0x63, 0x91, 0x40, 0x17, 0x7e, 0x29, - 0x20, 0xc6, 0x1a, 0x24, 0x09, 0x01, 0x45, 0x3d, 0x9f, 0x5a, 0xff, 0x99, 0x31, 0x6c, 0x83, 0x46, - 0x29, 0x3b, 0x82, 0x10, 0x15, 0x20, 0xa8, 0xe2, 0xb1, 0x5d, 0xea, 0xab, 0x17, 0x75, 0xee, 0x19, - 0x00, 0xa8, 0x17, 0xca, 0xc4, 0x2b, 0x80, 0x0f, 0xaf, 0xf9, 0x5c, 0x5f, 0xf7, 0xff, 0xde, 0xf0, - 0xd1, 0x0c, 0x01, 0xbd, 0xca, 0x2d, 0xff, 0xfd, 0x6a, 0xd8, 0x5e, 0x2c, 0x03, 0xfc, 0xa3, 0x8b, - 0x5f, 0xff, 0xa3, 0x9c, 0x6b, 0x28, 0x1a, 0x63, 0xe2, 0xdc, 0x33, 0x46, 0xf6, 0x76, 0x24, 0x3c, - 0x0f, 0x62, 0x3c, 0x30, 0x08, 0x3c, 0x14, 0x02, 0x41, 0x17, 0x77, 0xae, 0x24, 0x04, 0x81, 0x06, - 0x3b, 0xda, 0xf0, 0xd9, 0x41, 0x82, 0xd7, 0x28, 0x20, 0x35, 0xb0, 0x80, 0x5c, 0xc4, 0xe3, 0xdd, - 0x94, 0x10, 0x90, 0x7e, 0x23, 0xae, 0x53, 0xf5, 0xaf, 0xba, 0xbf, 0xe1, 0x3d, 0x2b, 0x6a, 0xff, - 0x84, 0xca, 0x9c, 0x9a, 0x93, 0xd2, 0xfa, 0x24, 0x57, 0xd4, 0xed, 0x5c, 0x9b, 0x55, 0xf0, 0x49, - 0xd4, 0x21, 0x04, 0x92, 0xcb, 0x86, 0x40, 0x48, 0x05, 0xa0, 0xe4, 0xbc, 0x39, 0xcb, 0xdf, 0xf9, - 0xb2, 0xc2, 0x59, 0x9a, 0x07, 0xde, 0x99, 0x3b, 0xa7, 0xf8, 0x44, 0x21, 0xc1, 0x08, 0x30, 0xe1, - 0x80, 0x52, 0x24, 0xab, 0x5a, 0xad, 0x71, 0x21, 0x02, 0x12, 0xf7, 0xf1, 0x84, 0x77, 0x77, 0x8b, - 0xc5, 0xdd, 0xee, 0xe6, 0xee, 0xef, 0x84, 0x40, 0xc2, 0x09, 0x8e, 0x5f, 0x76, 0xe5, 0x75, 0xee, - 0x24, 0x22, 0x08, 0x6b, 0xa7, 0xdc, 0x14, 0x01, 0x60, 0x14, 0x44, 0xf1, 0x45, 0x0c, 0x53, 0xc5, - 0xc5, 0xc7, 0x76, 0x19, 0x94, 0x02, 0x65, 0x98, 0xba, 0x8f, 0x75, 0xef, 0xfb, 0x6d, 0xfa, 0x65, - 0x0b, 0x28, 0x03, 0x51, 0xd1, 0x35, 0x37, 0xbf, 0xdd, 0xcf, 0xdf, 0xd1, 0x5b, 0x16, 0xe2, 0x91, - 0x00, 0x0f, 0x6b, 0xb0, 0xde, 0x01, 0xf4, 0x32, 0xc4, 0x80, 0x6b, 0x34, 0xa9, 0x9e, 0xf5, 0xaf, - 0xfc, 0xec, 0x8e, 0x19, 0x24, 0x01, 0x9a, 0xcf, 0x23, 0x2e, 0xcf, 0xff, 0xad, 0x47, 0xfc, 0x71, - 0x04, 0x00, 0x88, 0x71, 0x6e, 0x17, 0x56, 0x16, 0x70, 0x4c, 0x2d, 0x56, 0x7b, 0x6d, 0xff, 0xf8, - 0x64, 0x06, 0x47, 0x05, 0x02, 0x42, 0x65, 0x1a, 0x41, 0x3e, 0xaa, 0xb8, 0x1c, 0x00, 0x54, 0x84, - 0x8c, 0x2b, 0x15, 0xdc, 0xdd, 0x4b, 0x31, 0x7c, 0x31, 0x09, 0xc5, 0x18, 0xac, 0x57, 0x55, 0x55, - 0x8d, 0x62, 0xc0, 0x4f, 0xce, 0x0a, 0x7b, 0x76, 0x29, 0xc0, 0xdd, 0xa7, 0xb8, 0x98, 0x23, 0x22, - 0xd7, 0xef, 0x08, 0x23, 0xfa, 0xa1, 0x00, 0x20, 0x70, 0x84, 0x59, 0x1d, 0xdd, 0xdd, 0xdd, 0xf0, - 0xcf, 0xc0, 0x44, 0x0a, 0x1c, 0x20, 0x38, 0x28, 0x06, 0xa2, 0x40, 0x0f, 0x44, 0x38, 0x97, 0xaf, - 0x85, 0x85, 0x97, 0xbf, 0xbb, 0x6d, 0x80, 0xd7, 0x03, 0x16, 0x2f, 0x7e, 0xfa, 0xe5, 0x5c, 0x16, - 0x46, 0x16, 0xf7, 0xd2, 0x49, 0x6e, 0xa6, 0x07, 0xc3, 0x34, 0x92, 0x3f, 0xd5, 0x69, 0xa7, 0xef, - 0x94, 0x82, 0xbf, 0xe8, 0xf5, 0xf2, 0xdb, 0x4f, 0xf0, 0xcf, 0x4d, 0xb5, 0x96, 0x12, 0xc3, 0xfc, - 0x12, 0x5b, 0xdb, 0x8a, 0xba, 0xf4, 0xbc, 0x61, 0x09, 0x14, 0xf4, 0x0c, 0xb9, 0xf3, 0x6e, 0x38, - 0xb7, 0xe0, 0x86, 0x9b, 0xe6, 0x6f, 0x82, 0x4d, 0xa6, 0xf9, 0x54, 0x20, 0x04, 0x80, 0xa1, 0x85, - 0x0c, 0x47, 0x8a, 0x67, 0x7b, 0x99, 0xcf, 0x9f, 0x8a, 0x72, 0x43, 0x17, 0x71, 0x3e, 0x99, 0x66, - 0x5e, 0x01, 0x8d, 0xc4, 0x09, 0x12, 0x76, 0x7a, 0xd3, 0xb9, 0x4b, 0x35, 0xc6, 0x16, 0xaa, 0xb5, - 0x55, 0xd5, 0x6a, 0xbf, 0x17, 0xad, 0x73, 0x67, 0x08, 0x78, 0x31, 0x03, 0x88, 0x53, 0x15, 0xac, - 0xb8, 0x7f, 0xa6, 0x1f, 0x6a, 0xaa, 0x95, 0x32, 0xda, 0x6f, 0x17, 0x12, 0x10, 0x1e, 0x28, 0x5c, - 0x5f, 0x55, 0xdd, 0xdf, 0x85, 0xc8, 0x2c, 0x00, 0xc1, 0xad, 0x4d, 0xbe, 0xbb, 0x13, 0xee, 0xe9, - 0xbe, 0x5f, 0xbb, 0xbb, 0xe1, 0x85, 0x00, 0x80, 0x51, 0xb1, 0x82, 0x5e, 0x5d, 0xdb, 0x6f, 0xff, - 0xf6, 0x18, 0x70, 0x04, 0x83, 0x58, 0x68, 0x2d, 0x66, 0xdb, 0x7b, 0x6d, 0xff, 0x5f, 0xe1, 0xac, - 0x06, 0x0c, 0x81, 0x51, 0xff, 0xa6, 0x9e, 0x99, 0x7f, 0x61, 0x97, 0x00, 0x2a, 0xb9, 0xc3, 0xe9, - 0x04, 0xdb, 0xe7, 0xef, 0x7d, 0x6b, 0x4e, 0x9a, 0x55, 0x18, 0x42, 0x00, 0x85, 0xd4, 0xc2, 0x0f, - 0xf8, 0xe5, 0x04, 0x0c, 0xaa, 0xfb, 0xe3, 0x89, 0x04, 0xa3, 0xf5, 0x57, 0xf1, 0x22, 0x62, 0xea, - 0xb5, 0x5f, 0x04, 0x02, 0x4d, 0x77, 0x7f, 0x8a, 0xd6, 0xa8, 0x6b, 0xe0, 0xa0, 0x18, 0x70, 0x24, - 0x80, 0xe8, 0x47, 0xf7, 0x06, 0x00, 0xe0, 0x14, 0xea, 0x95, 0x6b, 0xba, 0x6f, 0xc7, 0xe1, 0x4c, - 0x01, 0x0f, 0x58, 0xca, 0x40, 0x9e, 0xff, 0x6d, 0xbd, 0xb6, 0xe1, 0xa7, 0x0d, 0x19, 0x6a, 0xff, - 0xff, 0xdc, 0x22, 0x0a, 0x15, 0xb0, 0xd3, 0x82, 0x95, 0x95, 0xfe, 0x9a, 0x7f, 0xf7, 0x10, 0x0a, - 0x31, 0x18, 0x08, 0x99, 0x36, 0x12, 0x16, 0x45, 0x00, 0x48, 0xf2, 0x1d, 0xa9, 0xbd, 0x7f, 0xfb, - 0x7f, 0x04, 0x20, 0x22, 0x05, 0x08, 0x6c, 0x5d, 0xef, 0x7f, 0x87, 0xc4, 0x0d, 0xac, 0x67, 0xbc, - 0xbc, 0x4b, 0xdd, 0xc4, 0x80, 0xf6, 0xe1, 0x3c, 0xb0, 0xc9, 0xc3, 0x10, 0x10, 0x12, 0x22, 0xe5, - 0x11, 0x77, 0x83, 0x52, 0xef, 0x5d, 0x1f, 0xbe, 0x4b, 0xd0, 0xd8, 0xfc, 0x13, 0x6e, 0xad, 0xb4, - 0xd5, 0xeb, 0xea, 0x6b, 0xe0, 0x96, 0x6d, 0x74, 0xad, 0xa7, 0xd7, 0xcb, 0xcb, 0x9f, 0x04, 0x94, - 0xa5, 0x61, 0x8e, 0x55, 0xca, 0x54, 0x9c, 0x56, 0xd9, 0x38, 0x2c, 0xa6, 0xd5, 0xab, 0x56, 0xb2, - 0x7d, 0x7d, 0x5e, 0xb8, 0x8b, 0xde, 0x4d, 0x74, 0xdc, 0x9c, 0x11, 0xf3, 0xf9, 0x01, 0x50, 0x88, - 0x1c, 0x01, 0x48, 0xc5, 0xac, 0x4f, 0x8a, 0x6a, 0xa6, 0xe2, 0xe2, 0x7c, 0xef, 0x28, 0x5c, 0x48, - 0x41, 0xc3, 0xe9, 0x22, 0x97, 0x51, 0x02, 0x78, 0x42, 0x24, 0x4d, 0xee, 0x9d, 0xf8, 0x47, 0xc1, - 0x07, 0xc1, 0x48, 0x27, 0xbd, 0xef, 0x69, 0x7b, 0x86, 0x43, 0x03, 0x2e, 0xaf, 0x5a, 0x62, 0xb7, - 0x4b, 0x15, 0x8a, 0x31, 0x58, 0x81, 0xf8, 0x20, 0x06, 0x00, 0x98, 0x82, 0xea, 0x6e, 0x77, 0xec, - 0x62, 0xb3, 0xb1, 0xd8, 0xa9, 0xc1, 0x07, 0x1c, 0x74, 0x86, 0x08, 0x50, 0xe4, 0xae, 0xfe, 0xb5, - 0xf8, 0xbc, 0x5f, 0x5c, 0x04, 0xc8, 0x0c, 0x80, 0xa1, 0x84, 0x07, 0x97, 0x9d, 0xf8, 0xb9, 0x7f, - 0x35, 0xc5, 0x77, 0x6f, 0x8c, 0x8b, 0x88, 0xf5, 0xea, 0xfd, 0x5d, 0xef, 0xe0, 0x80, 0x41, 0x54, - 0x5f, 0x51, 0x74, 0xdb, 0xc2, 0x01, 0x10, 0x85, 0x6b, 0x4d, 0xcb, 0xcb, 0x7b, 0x88, 0x72, 0x16, - 0x21, 0x07, 0x2a, 0xff, 0xfd, 0x78, 0x88, 0xae, 0xee, 0xf7, 0xe1, 0x18, 0x9b, 0xb8, 0xaf, 0x9b, - 0xf0, 0x10, 0x00, 0x2a, 0x78, 0x10, 0x21, 0x02, 0xc5, 0x6e, 0xf5, 0x51, 0x75, 0x52, 0x79, 0x85, - 0x9c, 0x10, 0x32, 0xb7, 0xaf, 0xff, 0xeb, 0x1a, 0x84, 0x80, 0xeb, 0x6b, 0x91, 0xdc, 0x34, 0x43, - 0x00, 0xc1, 0x2b, 0xa8, 0xdf, 0xff, 0xfd, 0x8a, 0xc1, 0x1f, 0xbf, 0x91, 0xcc, 0x81, 0xc7, 0x49, - 0xfc, 0x14, 0x0c, 0x3a, 0x62, 0xb4, 0xc5, 0x75, 0x7c, 0x57, 0xbd, 0xfc, 0x10, 0x70, 0x24, 0x80, - 0xb1, 0x08, 0x5d, 0xf5, 0x57, 0xd2, 0x15, 0x88, 0x73, 0x82, 0x0f, 0x97, 0xab, 0x58, 0x90, 0x11, - 0x00, 0xa8, 0x61, 0x58, 0xa5, 0xc4, 0x61, 0x53, 0xfd, 0x85, 0xaf, 0x85, 0xab, 0x03, 0xa8, 0x25, - 0xce, 0x00, 0x02, 0x50, 0x05, 0xeb, 0x81, 0x88, 0x04, 0xac, 0x90, 0x09, 0x42, 0x11, 0x90, 0x82, - 0xb8, 0x6c, 0xfb, 0x28, 0x89, 0x07, 0xfe, 0x8f, 0xaf, 0x82, 0xdd, 0x27, 0xd2, 0xa6, 0xff, 0x21, - 0x13, 0xdb, 0x5d, 0x94, 0xdb, 0xa6, 0x4e, 0x0a, 0xf9, 0x3b, 0x71, 0xcb, 0x9e, 0x5d, 0xcf, 0x5c, - 0xd7, 0x7d, 0x77, 0xcb, 0xfe, 0x2e, 0xf5, 0x4e, 0xed, 0xcb, 0xc1, 0x0f, 0x97, 0x22, 0xf8, 0xba, - 0xef, 0xb6, 0xdf, 0x82, 0x72, 0x2a, 0xd6, 0x1b, 0x0f, 0x0b, 0x8c, 0x04, 0x51, 0x5c, 0x9b, 0xe2, - 0x4c, 0x5f, 0x1f, 0x77, 0xf4, 0xd4, 0x44, 0x58, 0x94, 0xeb, 0xd5, 0x71, 0x31, 0x75, 0xd7, 0x53, - 0x31, 0xc4, 0x14, 0x86, 0xff, 0x89, 0x04, 0x06, 0x13, 0x7b, 0xe0, 0x82, 0xad, 0xc3, 0x22, 0x42, - 0x97, 0x7e, 0xaa, 0x27, 0xed, 0xbe, 0x6e, 0xf8, 0xc7, 0x70, 0xcc, 0x28, 0x4d, 0x56, 0xf1, 0x5c, - 0xaf, 0x1f, 0xc9, 0xef, 0xb8, 0x18, 0x43, 0x23, 0x22, 0xb8, 0x85, 0x62, 0xb0, 0x7a, 0xc4, 0x6d, - 0xc8, 0x47, 0x0b, 0x0b, 0xea, 0x68, 0x80, 0xe5, 0xb8, 0x74, 0x06, 0xd0, 0x58, 0xf0, 0x88, 0x80, - 0xa1, 0x08, 0xc2, 0x19, 0x7a, 0x1c, 0xde, 0xa2, 0xe9, 0xc5, 0xc5, 0x78, 0xad, 0xf0, 0xb2, 0x80, - 0x3f, 0xa9, 0x82, 0xb7, 0xdf, 0xad, 0x56, 0x4f, 0x4e, 0x9f, 0x01, 0xa0, 0x03, 0x84, 0x61, 0xc5, - 0x03, 0x14, 0x31, 0x71, 0x75, 0xaa, 0x97, 0x64, 0x18, 0x8d, 0x62, 0xdc, 0x57, 0x0d, 0x60, 0x19, - 0xd4, 0xea, 0x6b, 0xf5, 0xaf, 0xdf, 0x84, 0x20, 0xb6, 0xf7, 0xd5, 0x57, 0xb0, 0xd6, 0x1e, 0x11, - 0x32, 0x1b, 0xaf, 0xff, 0xb6, 0xff, 0x15, 0xbd, 0xdd, 0xdf, 0xc4, 0x9a, 0xab, 0xf8, 0x2d, 0xd6, - 0xa4, 0xf5, 0xb7, 0xd7, 0xb8, 0x60, 0x1c, 0x02, 0xa2, 0x9f, 0xcb, 0xe5, 0x6d, 0xb6, 0x97, 0xd8, - 0x69, 0x42, 0x03, 0xbc, 0x4b, 0xff, 0xeb, 0xbe, 0x13, 0x70, 0x48, 0x32, 0xdf, 0xbf, 0xd6, 0xfd, - 0xb5, 0xae, 0x11, 0x01, 0xd0, 0x4d, 0x57, 0xe2, 0xf9, 0x73, 0xbb, 0xc2, 0xce, 0x0b, 0x2d, 0x34, - 0xeb, 0xb7, 0xff, 0xbc, 0x4b, 0x38, 0x20, 0xa6, 0x9f, 0x91, 0x4c, 0xc5, 0x43, 0x86, 0x00, 0x48, - 0x70, 0x80, 0x12, 0x2a, 0x22, 0x49, 0xba, 0x74, 0xf0, 0x62, 0x04, 0x00, 0xa0, 0xce, 0x56, 0x0d, - 0xd2, 0x4e, 0xd8, 0xbd, 0x66, 0x52, 0xaa, 0x8a, 0xb7, 0x04, 0x6f, 0xb1, 0x36, 0xd7, 0xe4, 0xbb, - 0x76, 0xfc, 0x11, 0x6d, 0x5a, 0x8b, 0xe4, 0xdd, 0xd5, 0x77, 0xdd, 0x27, 0xcd, 0x6f, 0x6f, 0xc5, - 0x6d, 0x9f, 0x3d, 0x34, 0xc9, 0xc1, 0x0c, 0x9f, 0xfb, 0xe6, 0xe9, 0x9b, 0xf8, 0xba, 0x49, 0x75, - 0xbf, 0xcb, 0x7d, 0xb5, 0xcb, 0xc9, 0xd3, 0xf7, 0x75, 0xb7, 0x86, 0x40, 0xf0, 0x38, 0x60, 0xa3, - 0x14, 0x6e, 0x3e, 0xa2, 0xbe, 0xe6, 0xc7, 0x60, 0xbb, 0x19, 0xe2, 0x3c, 0x40, 0xb3, 0xee, 0xfb, - 0xbf, 0x82, 0x91, 0x2d, 0xad, 0x56, 0xbd, 0xc5, 0x6f, 0xe1, 0x13, 0x12, 0xaf, 0xc4, 0x84, 0x42, - 0x22, 0x1b, 0xaf, 0x2e, 0x08, 0x1c, 0xc2, 0x82, 0xa3, 0xcf, 0x3c, 0x14, 0x0b, 0x6e, 0x54, 0x5d, - 0x38, 0xae, 0x2b, 0x6c, 0xea, 0x04, 0x5f, 0xd9, 0xd1, 0x44, 0x82, 0x61, 0x65, 0x55, 0xe0, 0x8e, - 0xed, 0x8a, 0xdb, 0xee, 0x0a, 0x20, 0xaa, 0xef, 0x5d, 0xd3, 0xf2, 0x7e, 0xc2, 0x98, 0x01, 0x9c, - 0x49, 0x8d, 0x92, 0x57, 0x77, 0x89, 0x17, 0x32, 0x6c, 0x74, 0xff, 0xf0, 0x0b, 0x40, 0x0a, 0x81, - 0x96, 0xe1, 0x70, 0xb6, 0x7b, 0xcf, 0xf1, 0x00, 0x1c, 0x92, 0xcd, 0xac, 0x40, 0x7e, 0x94, 0x57, - 0x0b, 0x22, 0x00, 0xbd, 0xc1, 0xe6, 0xe1, 0xf6, 0xbb, 0xa7, 0xff, 0xb2, 0xc2, 0xd8, 0x26, 0xe7, - 0x57, 0x2d, 0x7f, 0xfd, 0xbc, 0x02, 0x70, 0x02, 0x44, 0x49, 0x45, 0xd6, 0xfa, 0xae, 0x01, 0x40, - 0x06, 0x23, 0xe2, 0x0e, 0x08, 0x38, 0xbc, 0x57, 0xea, 0xbe, 0x0a, 0xbb, 0xbe, 0xef, 0x8b, 0x8b, - 0xf7, 0x01, 0xc0, 0x02, 0xa4, 0x14, 0x49, 0xf1, 0xe9, 0x5f, 0xdc, 0x30, 0x11, 0x04, 0x3e, 0x7f, - 0xd8, 0xa7, 0x26, 0xc2, 0x91, 0x20, 0x08, 0x3d, 0xc5, 0x41, 0x79, 0xef, 0xf7, 0xd6, 0xb5, 0x89, - 0x50, 0x42, 0xff, 0x6c, 0x02, 0x20, 0x02, 0x64, 0x11, 0x13, 0x6c, 0xcc, 0xbf, 0x01, 0xe0, 0x02, - 0xe4, 0x64, 0x57, 0x2d, 0xb6, 0xa2, 0xeb, 0x10, 0xfa, 0xde, 0xaa, 0xab, 0x14, 0xa0, 0x30, 0x2f, - 0x88, 0xd0, 0x3f, 0x43, 0x58, 0x7c, 0x61, 0x1f, 0x7b, 0xff, 0xd6, 0x33, 0x07, 0x45, 0x8f, 0x8a, - 0xc2, 0x39, 0x1b, 0x47, 0x48, 0x02, 0xbc, 0x4b, 0x69, 0x9f, 0x88, 0x03, 0x80, 0xc3, 0x3b, 0xbb, - 0xbb, 0xe2, 0xbb, 0x9b, 0xaa, 0x97, 0x8b, 0xc5, 0x33, 0x81, 0x2d, 0xca, 0x36, 0x04, 0x10, 0x40, - 0x5e, 0x29, 0x8b, 0xe0, 0xc0, 0x0a, 0x06, 0x23, 0xdc, 0x57, 0x83, 0x18, 0x29, 0x83, 0x92, 0xf0, - 0x58, 0x26, 0x59, 0xad, 0x61, 0x68, 0xe2, 0x4c, 0xe4, 0x53, 0x81, 0x87, 0x52, 0x8b, 0xd3, 0x13, - 0xe8, 0xb9, 0x49, 0x88, 0x04, 0x5a, 0xaf, 0xaf, 0x92, 0x6d, 0xf7, 0xca, 0x6a, 0xd3, 0x5c, 0x59, - 0xf4, 0x92, 0x4e, 0x46, 0xb1, 0xf8, 0x4a, 0xf7, 0x49, 0x2a, 0x5f, 0x75, 0x77, 0xf9, 0xb6, 0xef, - 0xef, 0x59, 0xba, 0xe1, 0x71, 0x0a, 0x27, 0x8a, 0x1d, 0x18, 0x45, 0x03, 0xa6, 0x12, 0xa7, 0x00, - 0x01, 0x00, 0x05, 0x06, 0xa3, 0x04, 0x50, 0x89, 0x00, 0x04, 0xa1, 0x59, 0x95, 0x8d, 0xf4, 0xf7, - 0xfe, 0x07, 0x00, 0x24, 0x8d, 0x39, 0x1c, 0x43, 0x14, 0x3b, 0xaf, 0xab, 0xaa, 0xc5, 0x38, 0x70, - 0x51, 0xa8, 0xbd, 0x46, 0x8d, 0x5f, 0xdf, 0xfc, 0x0b, 0x00, 0x59, 0x0a, 0x5d, 0xf8, 0xb9, 0xf4, - 0xbf, 0x77, 0x6d, 0x21, 0x23, 0xcb, 0x68, 0xc5, 0x43, 0x44, 0x20, 0x13, 0x5b, 0x38, 0xef, 0xef, - 0xff, 0x4e, 0xe3, 0xa5, 0x09, 0x5a, 0xa2, 0xb0, 0xb2, 0x80, 0x58, 0x7c, 0x52, 0xbb, 0xd5, 0x55, - 0x5e, 0xf5, 0xae, 0x17, 0x62, 0x00, 0x0c, 0x2c, 0x83, 0x47, 0x51, 0x90, 0x25, 0x38, 0x6f, 0x4c, - 0x7e, 0x89, 0xb6, 0xe7, 0xee, 0x7b, 0xc7, 0x7e, 0x3a, 0xbd, 0x6e, 0xe4, 0x62, 0xee, 0x02, 0xa0, - 0x1c, 0x85, 0x0e, 0x54, 0x01, 0x7a, 0x16, 0x65, 0x40, 0x12, 0xd0, 0xbc, 0x50, 0xc5, 0xc5, 0xe2, - 0xe2, 0x6b, 0x33, 0xde, 0xf7, 0x71, 0x5f, 0xb1, 0xac, 0x48, 0x0a, 0x12, 0x63, 0x99, 0x33, 0x81, - 0xc0, 0x09, 0x00, 0x9b, 0xb6, 0x5f, 0x7b, 0xf1, 0xfc, 0x0d, 0x00, 0x60, 0x51, 0xd8, 0xfe, 0x24, - 0x0b, 0x00, 0x9f, 0xcd, 0xd4, 0xb3, 0x51, 0x4c, 0x76, 0x3f, 0x0c, 0x28, 0x0a, 0x59, 0x38, 0x15, - 0x65, 0x7f, 0xfd, 0xf1, 0x88, 0xc0, 0x0f, 0x64, 0x34, 0xb5, 0x4f, 0x85, 0x89, 0x00, 0xcf, 0x08, - 0xf5, 0xaf, 0x4d, 0x3f, 0xe8, 0xa8, 0xa1, 0x45, 0x04, 0x48, 0xad, 0x6d, 0xf6, 0xff, 0xf8, 0x62, - 0x50, 0x79, 0x11, 0xff, 0xfb, 0xdd, 0xdc, 0x02, 0xf1, 0x05, 0x3d, 0xb5, 0xbd, 0xd5, 0x45, 0xc9, - 0xfd, 0x8c, 0x45, 0x00, 0xc7, 0x99, 0x7a, 0xec, 0x28, 0xa0, 0x17, 0x63, 0x54, 0xe5, 0x5a, 0xff, - 0xfc, 0x56, 0x24, 0x39, 0x0b, 0x60, 0x0a, 0x7f, 0x44, 0x61, 0x3f, 0xfe, 0xb5, 0x85, 0xb0, 0x1f, - 0x72, 0x6f, 0xdd, 0x5d, 0x7f, 0xe1, 0x3c, 0x01, 0xbd, 0x6a, 0x71, 0xe5, 0x75, 0xff, 0xfe, 0x0c, - 0x02, 0x00, 0x92, 0xb5, 0xbb, 0x1c, 0xe0, 0x4f, 0xfd, 0x84, 0x77, 0x80, 0x60, 0x01, 0xc0, 0x2a, - 0x30, 0xba, 0xac, 0x5c, 0x53, 0xab, 0xb8, 0xac, 0x57, 0xd8, 0xa5, 0x01, 0x8c, 0xd6, 0x88, 0xc9, - 0x40, 0x3b, 0x0f, 0x92, 0x8a, 0xc7, 0x48, 0x05, 0x68, 0x07, 0x49, 0xf0, 0xce, 0x00, 0x53, 0x96, - 0x11, 0xa3, 0x85, 0x13, 0xe7, 0x97, 0x5b, 0xc5, 0x6b, 0x57, 0x77, 0x77, 0x1c, 0xd8, 0xe6, 0x60, - 0xd8, 0x75, 0x93, 0x62, 0x90, 0x90, 0x46, 0x70, 0xa9, 0x43, 0x18, 0x03, 0x08, 0x4d, 0x66, 0x13, - 0xf4, 0xf5, 0x55, 0x5f, 0x5f, 0xdc, 0x18, 0x81, 0x40, 0x16, 0x90, 0x56, 0xee, 0x2b, 0x14, 0xc5, - 0xc5, 0x03, 0x10, 0x1f, 0x58, 0x72, 0x40, 0x53, 0x12, 0x2e, 0x28, 0x49, 0xd7, 0x69, 0xac, 0xd7, - 0xdd, 0x3e, 0xbd, 0x1f, 0xd6, 0x3a, 0x5f, 0xbf, 0x0c, 0x1d, 0x5e, 0x35, 0xc3, 0x21, 0xc6, 0xb9, - 0x77, 0x67, 0x9f, 0xe4, 0xe6, 0x3d, 0x3a, 0x64, 0x80, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x54, - 0x2a, 0x30, 0xa8, 0x2f, 0xd0, 0xf8, 0xaa, 0x02, 0x04, 0x30, 0x4a, 0xaa, 0xaf, 0x08, 0x08, 0x0a, - 0x72, 0x62, 0xa9, 0x66, 0xbc, 0x48, 0xb1, 0x78, 0xcb, 0xa3, 0xdd, 0xf0, 0x10, 0x00, 0xa7, 0xc2, - 0x1f, 0xe1, 0x91, 0x37, 0xc1, 0x20, 0x9c, 0x4f, 0x04, 0xf3, 0xa2, 0xf1, 0x08, 0xa8, 0xef, 0x13, - 0xbe, 0xb5, 0x08, 0xf5, 0x69, 0xfa, 0xd4, 0xdd, 0x52, 0xae, 0x10, 0x05, 0x81, 0x4b, 0xaf, 0x77, - 0x17, 0x18, 0x56, 0xe3, 0x15, 0xef, 0x89, 0xdc, 0x4b, 0x04, 0x4e, 0x61, 0xff, 0xf1, 0x38, 0xc4, - 0x17, 0x4b, 0xaf, 0xaf, 0x78, 0x20, 0x05, 0x01, 0x29, 0xb0, 0x6f, 0x33, 0xc0, 0xc0, 0x1d, 0x2c, - 0x12, 0x07, 0x03, 0x99, 0x29, 0x65, 0x15, 0x1d, 0xe2, 0x01, 0x00, 0xc1, 0x55, 0x37, 0x2c, 0xcb, - 0x33, 0xb8, 0x14, 0xa8, 0xf7, 0x85, 0x98, 0x3e, 0xd0, 0x3e, 0x6a, 0x58, 0x03, 0x24, 0x05, 0x4b, - 0x01, 0x96, 0x00, 0xc5, 0x07, 0x84, 0x01, 0x40, 0x92, 0x93, 0x93, 0x96, 0xd7, 0x26, 0x05, 0x06, - 0x55, 0x49, 0x81, 0x46, 0x4e, 0x53, 0x05, 0xe8, 0x2b, 0x5f, 0x5a, 0xfa, 0xd4, 0xdd, 0x6a, 0x6e, - 0xb9, 0x43, 0x3f, 0x84, 0x01, 0x40, 0xc0, 0x93, 0x76, 0xe6, 0x20, 0xc1, 0x8b, 0xa1, 0xc5, 0xea, - 0x2e, 0x0b, 0x73, 0x81, 0x57, 0x26, 0x78, 0x20, 0x13, 0x22, 0x82, 0x28, 0x62, 0x86, 0x28, 0xd6, - 0xf8, 0x10, 0x28, 0x11, 0x88, 0xba, 0x48, 0x31, 0x02, 0xc0, 0x27, 0x0f, 0x71, 0xae, 0x6e, 0x48, - 0x41, 0x62, 0x93, 0x0b, 0x83, 0x10, 0x2c, 0x0e, 0x10, 0x4e, 0x1c, 0x1c, 0x07, 0x0b, 0x36, 0x28, - 0x38, 0xe3, 0x32, 0xdf, 0xc9, 0xed, 0x9a, 0x7b, 0xf1, 0x20, 0x40, 0x16, 0x2e, 0xdb, 0xe2, 0x7e, - 0x2f, 0x84, 0x22, 0x45, 0x39, 0x39, 0x4c, 0x49, 0xe9, 0x89, 0x7c, 0x4d, 0x82, 0x74, 0x19, 0xe8, - 0x27, 0x14, 0xa1, 0x8c, 0x23, 0xcc, 0x2a, 0xb3, 0x7f, 0x30, 0xc9, 0xbf, 0xc2, 0x23, 0x2f, 0x1f, - 0x5d, 0x75, 0x7e, 0xfa, 0xd7, 0x03, 0x88, 0x60, 0x11, 0x8b, 0x3f, 0xc0, 0x77, 0x93, 0x85, 0x07, - 0x6e, 0xda, 0x92, 0x0a, 0xa6, 0x58, 0x0c, 0xb1, 0x2f, 0x0f, 0x95, 0x19, 0xc4, 0x3c, 0xb0, 0x19, - 0x60, 0xc2, 0xea, 0xbf, 0x08, 0x08, 0x12, 0x35, 0xd5, 0xaa, 0xb5, 0x6e, 0xe2, 0x0e, 0x16, 0x70, - 0x03, 0x1e, 0xb3, 0x16, 0x75, 0xd7, 0xbf, 0xff, 0x55, 0x86, 0xd8, 0x80, 0x28, 0xb8, 0x9f, 0xe2, - 0xb9, 0x15, 0xaf, 0x8a, 0xe2, 0x06, 0x0b, 0xeb, 0xfa, 0xc1, 0x5e, 0x11, 0xe2, 0x20, 0x9c, 0x6c, - 0xcb, 0xf6, 0x39, 0x99, 0xee, 0x22, 0x61, 0x8b, 0x5e, 0x10, 0x05, 0x0f, 0x6e, 0x73, 0x38, 0x46, - 0x26, 0xdd, 0xfa, 0xab, 0x84, 0x62, 0x8b, 0x58, 0x4d, 0xd2, 0x8f, 0x3e, 0xb1, 0xe1, 0x11, 0x0c, - 0xc7, 0x01, 0xc8, 0xdc, 0x57, 0xf1, 0x23, 0x4d, 0x9f, 0x6d, 0xf8, 0x40, 0x15, 0x56, 0xb5, 0xdf, - 0x17, 0x0b, 0x95, 0x47, 0xf8, 0x91, 0x22, 0x84, 0xaa, 0x37, 0xfb, 0x7a, 0xe0, 0xb2, 0x20, 0x20, - 0x28, 0x5b, 0xd1, 0xcf, 0xe5, 0xa7, 0x89, 0x04, 0x00, 0xb8, 0xca, 0xb3, 0x5d, 0x7b, 0x88, 0x12, - 0x11, 0xaa, 0x46, 0x63, 0x55, 0x55, 0x2f, 0x66, 0x2e, 0xfc, 0x20, 0x24, 0xce, 0x7e, 0x9b, 0xf6, - 0x6c, 0x89, 0x3d, 0x42, 0x3e, 0x0c, 0x40, 0x50, 0x0c, 0xf3, 0x7b, 0xc5, 0x73, 0x77, 0x77, 0x52, - 0xf9, 0x76, 0xf8, 0x26, 0x12, 0x45, 0x19, 0xca, 0xcd, 0x25, 0x61, 0x00, 0x49, 0xaa, 0x8e, 0x66, - 0xdc, 0x10, 0x81, 0x40, 0x13, 0x10, 0x48, 0x58, 0x85, 0x83, 0x57, 0x32, 0xde, 0x9d, 0x0c, 0xe6, - 0x1e, 0xef, 0xc6, 0x2c, 0xa9, 0x14, 0x2d, 0x8b, 0xe5, 0x08, 0x76, 0x6d, 0x54, 0xb0, 0x88, 0x9e, - 0x10, 0x08, 0x10, 0x24, 0xab, 0xe2, 0x03, 0x02, 0xaa, 0x2e, 0xb5, 0xa9, 0x19, 0xe1, 0x0a, 0x0c, - 0x20, 0x9f, 0xfd, 0xbf, 0xfd, 0xc2, 0x21, 0x01, 0xe1, 0x69, 0xbd, 0x64, 0xe7, 0xe2, 0x64, 0x18, - 0xe5, 0x3c, 0x4c, 0x15, 0x8b, 0xac, 0xac, 0x1b, 0x61, 0x85, 0xaa, 0xc5, 0xcf, 0xb0, 0xd6, 0x2e, - 0xee, 0x9f, 0x89, 0x11, 0xc2, 0x22, 0x46, 0x08, 0x17, 0x17, 0x17, 0x55, 0x8c, 0x98, 0x52, 0xee, - 0x29, 0x14, 0x2c, 0x95, 0xb3, 0x0b, 0xd2, 0x57, 0xaf, 0xec, 0xa2, 0x83, 0x6d, 0x77, 0xbf, 0x04, - 0x21, 0x1d, 0x56, 0xaf, 0xa2, 0xa3, 0xe4, 0xe8, 0x8e, 0x04, 0x75, 0x74, 0x37, 0x84, 0x38, 0x21, - 0xfc, 0x14, 0x04, 0x37, 0x77, 0xb9, 0x18, 0x97, 0xc6, 0x11, 0xee, 0xe6, 0x62, 0x37, 0x31, 0x1b, - 0xbf, 0x3e, 0xc1, 0xde, 0x2e, 0x77, 0xf8, 0x43, 0x55, 0x97, 0xe7, 0x93, 0x3c, 0x33, 0xc1, 0x48, - 0x43, 0x89, 0x12, 0x14, 0xee, 0x6e, 0xe6, 0x5b, 0x59, 0x66, 0xb8, 0x92, 0xc1, 0xb9, 0x61, 0xc7, - 0x4d, 0x7b, 0x86, 0x43, 0x02, 0x05, 0xda, 0x95, 0x6d, 0xbc, 0x95, 0xc6, 0xff, 0xc4, 0x84, 0x41, - 0x39, 0xaa, 0xa2, 0xfa, 0x65, 0x8f, 0xbe, 0x14, 0x24, 0xb1, 0x19, 0x54, 0x6c, 0x32, 0xce, 0xfb, - 0xbd, 0x4c, 0x71, 0xbb, 0xbd, 0xeb, 0x82, 0x00, 0x28, 0xdf, 0x41, 0x57, 0xfa, 0xf7, 0xd1, 0x5e, - 0x7e, 0x88, 0xff, 0x57, 0xac, 0x4a, 0xbf, 0xd5, 0xfe, 0xaf, 0x1f, 0xcd, 0xbd, 0xcf, 0xc9, 0xd5, - 0x4a, 0x21, 0x90, 0xf4, 0x87, 0x10, 0x80, 0x01, 0xaa, 0xb6, 0x25, 0x45, 0x67, 0x3d, 0x5e, 0xf5, - 0x2f, 0x89, 0xff, 0xae, 0x08, 0x40, 0x17, 0x5e, 0xff, 0x04, 0x00, 0x9c, 0xc1, 0x73, 0x42, 0x4a, - 0xb7, 0x54, 0xa8, 0xac, 0xe1, 0x81, 0xf0, 0x9c, 0x72, 0xef, 0x12, 0x32, 0x5e, 0x9e, 0xad, 0x60, - 0xcb, 0x41, 0x97, 0x85, 0x45, 0x64, 0xf0, 0x79, 0xfe, 0xa1, 0x42, 0xd8, 0x7f, 0x20, 0xf0, 0x50, - 0x19, 0x0c, 0x09, 0xe2, 0xac, 0x9a, 0xb3, 0x9c, 0x03, 0xe0, 0xd4, 0x42, 0x68, 0x46, 0x58, 0xb6, - 0x2d, 0xfc, 0x38, 0x88, 0x00, 0x29, 0x4f, 0xe2, 0xd0, 0xe8, 0xbf, 0xd3, 0x4e, 0x31, 0x6e, 0xe5, - 0xf1, 0xe5, 0xe6, 0xfb, 0x7e, 0x08, 0x04, 0x8a, 0x37, 0x2f, 0x17, 0x11, 0xeb, 0x34, 0xbc, 0x50, - 0xbd, 0x54, 0x5d, 0x61, 0x19, 0xcf, 0x31, 0x11, 0x82, 0x25, 0x58, 0xd4, 0xb4, 0x00, 0x91, 0xca, - 0x54, 0x9f, 0x0f, 0xd2, 0x4a, 0x8d, 0x9f, 0xbb, 0xbe, 0x01, 0x38, 0x02, 0x4b, 0x09, 0x85, 0xd5, - 0xbe, 0x16, 0xe6, 0xd6, 0x2e, 0x17, 0x83, 0x18, 0x24, 0x93, 0x04, 0xf2, 0x28, 0x7d, 0xc0, 0x92, - 0x03, 0x60, 0x28, 0x20, 0x56, 0x2b, 0x15, 0xb9, 0xf4, 0xbe, 0x22, 0x47, 0x16, 0x2b, 0x12, 0x3f, - 0x65, 0x20, 0x7d, 0xab, 0x1a, 0x2a, 0x6e, 0x0e, 0x40, 0x64, 0x0c, 0x20, 0xb8, 0x59, 0x59, 0xc7, - 0x43, 0xc0, 0xee, 0x1a, 0xea, 0x5b, 0x3e, 0x27, 0xc5, 0xcf, 0x3f, 0x80, 0xd8, 0x0a, 0x43, 0xb6, - 0xa1, 0xd8, 0x1a, 0x9e, 0x1c, 0x5d, 0xf2, 0x80, 0x8f, 0x90, 0x5c, 0x58, 0x6b, 0xd6, 0x4c, 0x01, - 0x56, 0x73, 0x80, 0x3e, 0x5c, 0xdd, 0xf8, 0xb8, 0x14, 0x40, 0x21, 0x00, 0xaa, 0x59, 0x9c, 0x78, - 0xbb, 0x7b, 0x37, 0x2c, 0x6e, 0x25, 0xfb, 0x42, 0x87, 0x2e, 0x20, 0x1c, 0x0e, 0x88, 0x38, 0xcf, - 0x16, 0xa9, 0x4a, 0x20, 0x4b, 0x75, 0x8a, 0x31, 0xf5, 0x15, 0xfc, 0x20, 0x30, 0x91, 0x3b, 0xe4, - 0xcd, 0x0c, 0x5d, 0x45, 0xdc, 0x43, 0x84, 0xd3, 0x95, 0x1e, 0x11, 0x24, 0xe5, 0x20, 0xae, 0xef, - 0x1e, 0xa8, 0x2e, 0xad, 0xdb, 0xe0, 0x13, 0x00, 0x38, 0x82, 0x10, 0xa8, 0xba, 0x7d, 0xf7, 0xf0, - 0xc2, 0x2b, 0xc6, 0xe2, 0x27, 0x18, 0xa0, 0xed, 0x91, 0x4d, 0xd7, 0xbe, 0xb1, 0x4d, 0xd7, 0x29, - 0x46, 0x2d, 0x1f, 0x36, 0x21, 0x7b, 0x81, 0x80, 0x1c, 0x02, 0xc0, 0x85, 0x32, 0x72, 0x41, 0x59, - 0xb8, 0x1d, 0xd2, 0xa7, 0x00, 0xad, 0x33, 0xbf, 0x37, 0x11, 0x99, 0x54, 0x35, 0x80, 0xa8, 0xf2, - 0xa0, 0xf7, 0x6f, 0x7f, 0xff, 0x6f, 0x6f, 0x33, 0x0c, 0xb3, 0x80, 0x09, 0x25, 0x44, 0xc2, 0x90, - 0xce, 0xf3, 0x13, 0xaa, 0x7f, 0xfa, 0xd5, 0xb8, 0x80, 0xc8, 0xc3, 0x0b, 0x62, 0x8c, 0x5b, 0x3e, - 0x09, 0x71, 0xee, 0x2f, 0x22, 0x86, 0x20, 0xfd, 0x45, 0xe1, 0x99, 0xc0, 0x09, 0x15, 0x52, 0x80, - 0x80, 0xa5, 0xff, 0x13, 0xa7, 0xff, 0xfa, 0x75, 0x1c, 0x48, 0x05, 0x9f, 0xd4, 0x9a, 0xfc, 0x22, - 0x10, 0x0a, 0x79, 0x38, 0x59, 0x10, 0x85, 0x59, 0x52, 0xa7, 0x01, 0x6a, 0xf7, 0x9e, 0x0e, 0xf2, - 0x7f, 0x97, 0xd7, 0x10, 0x24, 0x48, 0xc3, 0xb0, 0x8d, 0xdf, 0xae, 0x20, 0x1c, 0xf0, 0xca, 0x0a, - 0xd6, 0x21, 0x63, 0x3a, 0xe1, 0xf5, 0xca, 0x27, 0xa1, 0x3d, 0x7d, 0x11, 0xe7, 0xeb, 0xd1, 0x90, - 0xc8, 0x9c, 0x26, 0x40, 0xb0, 0x06, 0x7c, 0x29, 0xe6, 0x0c, 0x69, 0x5b, 0x98, 0xb9, 0x21, 0x1c, - 0xe2, 0xf5, 0x5a, 0xe1, 0x74, 0x70, 0x02, 0x00, 0x0c, 0xc7, 0x0f, 0x45, 0xe8, 0xaf, 0xbe, 0x77, - 0x14, 0x67, 0xfe, 0x24, 0x1e, 0xfe, 0x24, 0x07, 0xd6, 0xdd, 0x71, 0x32, 0xc0, 0x40, 0x00, 0x44, - 0x42, 0x91, 0x40, 0x18, 0xa0, 0xc1, 0xac, 0xcb, 0x6c, 0x9a, 0x98, 0xf1, 0xf1, 0xe0, 0xbc, 0x1e, - 0x17, 0x71, 0xac, 0xdf, 0x87, 0x9c, 0x1e, 0xb8, 0xca, 0x1a, 0xa8, 0x4c, 0x84, 0x01, 0x3f, 0x11, - 0x3b, 0x64, 0x3b, 0x76, 0x43, 0x64, 0x3e, 0x5e, 0x99, 0x27, 0x11, 0xe9, 0x97, 0xc2, 0xe8, 0x58, - 0x00, 0xba, 0xfc, 0xd5, 0x39, 0x8b, 0xfd, 0xd6, 0xee, 0xe7, 0xef, 0xef, 0xc0, 0xd0, 0x07, 0x91, - 0x86, 0xaa, 0xa8, 0xb8, 0x57, 0xa2, 0xe2, 0x9a, 0x67, 0x01, 0xe5, 0xdb, 0xdf, 0x0a, 0xce, 0x04, - 0x05, 0x8a, 0x43, 0xa2, 0x6f, 0xff, 0xee, 0xfb, 0xae, 0x08, 0x40, 0x4c, 0x0e, 0x1c, 0x28, 0x03, - 0x15, 0x62, 0x01, 0xe3, 0xbf, 0xbd, 0xc1, 0xe7, 0xdf, 0xc7, 0x9f, 0x1d, 0x7c, 0x67, 0x41, 0x36, - 0x9f, 0xa2, 0xd4, 0xfd, 0x72, 0xbe, 0xac, 0x42, 0x23, 0x14, 0x4c, 0x83, 0xd8, 0x5c, 0x81, 0x40, - 0x0c, 0x77, 0x89, 0x22, 0xba, 0x1a, 0x24, 0x37, 0xf9, 0x61, 0x44, 0x8b, 0xb0, 0xbe, 0x01, 0xd5, - 0x88, 0x8a, 0x53, 0x09, 0x62, 0x6d, 0x3f, 0xd7, 0x7a, 0xd6, 0x92, 0x64, 0xe5, 0xda, 0x64, 0xe2, - 0xd8, 0xf5, 0xf5, 0x85, 0xf0, 0x02, 0x50, 0xbe, 0x58, 0xd4, 0x8a, 0x3a, 0x08, 0x58, 0x9f, 0xff, - 0x41, 0xb8, 0xc5, 0x0b, 0x7a, 0xaa, 0x94, 0xaa, 0x24, 0x01, 0x54, 0x60, 0x52, 0x63, 0x51, 0xcc, - 0x0c, 0x3d, 0x2a, 0x7e, 0xa5, 0xb8, 0x12, 0x40, 0x6c, 0x39, 0x7a, 0xaa, 0x3c, 0x08, 0x20, 0x30, - 0x06, 0x55, 0x54, 0x5e, 0x4b, 0xc4, 0xc8, 0x25, 0x9a, 0x89, 0xd1, 0xf2, 0xf1, 0x72, 0x64, 0xe0, - 0x49, 0x01, 0x80, 0xcf, 0x35, 0xc2, 0xf8, 0x0a, 0x36, 0x55, 0xff, 0xf5, 0xaf, 0xdf, 0x82, 0x10, - 0x12, 0x03, 0x0c, 0x21, 0xe3, 0xaf, 0xa6, 0x3a, 0xfd, 0xd3, 0x3e, 0x97, 0x9e, 0xf1, 0x0f, 0xbc, - 0xde, 0xb0, 0x9b, 0x38, 0x00, 0x24, 0x98, 0xbe, 0xdd, 0x9d, 0xdb, 0xb1, 0x4b, 0xfe, 0x06, 0xe1, - 0xfb, 0x2a, 0x40, 0x68, 0x3f, 0x0e, 0xf4, 0x11, 0x78, 0x8e, 0xad, 0x5d, 0x5a, 0xba, 0xb2, 0xba, - 0xe5, 0x41, 0xd8, 0x80, 0x00, 0xc8, 0xfd, 0x57, 0xf3, 0xff, 0xfb, 0xff, 0xe6, 0xa1, 0xa9, 0x18, - 0xb4, 0x79, 0x3f, 0xe0, 0x49, 0x01, 0x80, 0x38, 0x62, 0x85, 0x2a, 0x2f, 0xd8, 0xaf, 0x9a, 0xf1, - 0x01, 0x81, 0x93, 0xd8, 0x9d, 0xc9, 0x2c, 0xe3, 0x81, 0xf2, 0x58, 0x6d, 0x35, 0x8b, 0x8b, 0x9b, - 0xa0, 0xc8, 0x79, 0x83, 0x7f, 0x88, 0x21, 0xef, 0xae, 0xea, 0x4c, 0xf1, 0x30, 0x99, 0x5f, 0x77, - 0x57, 0xe2, 0x02, 0x03, 0xae, 0xdb, 0x4a, 0x5e, 0x23, 0x8b, 0x35, 0x8b, 0xf1, 0x04, 0xee, 0xf8, - 0x64, 0x08, 0x01, 0x11, 0x2a, 0xb7, 0xb7, 0x5b, 0xdf, 0x88, 0x1d, 0xb2, 0x1e, 0xbc, 0x5e, 0x66, - 0x16, 0x2f, 0xc2, 0x20, 0x70, 0x05, 0x63, 0x8b, 0x1e, 0xc7, 0xfc, 0xf5, 0xbb, 0xad, 0x56, 0xb8, - 0x44, 0x0d, 0x02, 0xc7, 0xa5, 0x6a, 0xab, 0x93, 0xa1, 0x6c, 0x5f, 0x56, 0x46, 0x75, 0x62, 0x10, - 0xeb, 0x55, 0xd6, 0x52, 0x75, 0x95, 0x70, 0x48, 0x6e, 0x07, 0xa0, 0xd5, 0xb8, 0x39, 0x01, 0x01, - 0xe1, 0x10, 0x88, 0xa8, 0xbd, 0x25, 0xae, 0xe2, 0x1c, 0x57, 0x8c, 0x48, 0x28, 0x0a, 0x44, 0x80, - 0x07, 0x01, 0xd8, 0x14, 0xc0, 0x87, 0x40, 0x41, 0xce, 0x13, 0xc2, 0xfc, 0xb3, 0x02, 0x31, 0x32, - 0x42, 0x28, 0x54, 0xad, 0x4c, 0xbb, 0xfb, 0xe4, 0x6a, 0x2c, 0x3e, 0x3c, 0x06, 0xf8, 0x13, 0xa6, - 0x8e, 0xe2, 0x01, 0x40, 0xc3, 0x72, 0x2e, 0xb4, 0x92, 0x2e, 0x5a, 0xbc, 0xc9, 0xf9, 0x1f, 0x0b, - 0x71, 0x8a, 0xf8, 0x60, 0x58, 0xb3, 0x18, 0xde, 0x49, 0x55, 0x57, 0xc2, 0x3c, 0x48, 0x30, 0x1e, - 0x70, 0xa5, 0x6f, 0xbb, 0xfa, 0xaf, 0x04, 0x01, 0x0a, 0x49, 0x7a, 0xaa, 0xef, 0x82, 0x10, 0xc7, - 0x83, 0x02, 0x08, 0x13, 0xe7, 0x80, 0x7c, 0x48, 0x7f, 0x84, 0x04, 0x5a, 0x4b, 0x16, 0xce, 0x0c, - 0x1d, 0xa0, 0xc5, 0x29, 0x30, 0x55, 0xf4, 0xf8, 0x44, 0x0c, 0x00, 0x8c, 0x7e, 0x25, 0xfa, 0x97, - 0xa1, 0x2e, 0x44, 0x0b, 0x5a, 0x37, 0xf5, 0x64, 0x57, 0x56, 0x22, 0x7a, 0xb2, 0x23, 0xac, 0xb8, - 0x21, 0x03, 0x00, 0xb0, 0x86, 0x46, 0x15, 0xad, 0xf8, 0x41, 0x95, 0x48, 0xc5, 0x2c, 0x40, 0x81, - 0xe4, 0x5a, 0xd4, 0xaa, 0x16, 0x0d, 0xcf, 0xc0, 0x4e, 0x11, 0x93, 0x0b, 0x7c, 0x22, 0x2c, 0xcb, - 0x5d, 0xe2, 0xbe, 0x20, 0x66, 0xb9, 0x6d, 0x5a, 0xac, 0x42, 0xcb, 0x39, 0xcb, 0x33, 0x35, 0xe2, - 0x62, 0x86, 0xae, 0xc6, 0xba, 0xe1, 0x80, 0x81, 0x88, 0xab, 0x5c, 0x30, 0x08, 0x01, 0x49, 0xd5, - 0x54, 0x53, 0x55, 0x55, 0x51, 0x07, 0x05, 0xcb, 0xdb, 0x83, 0x80, 0xc0, 0x21, 0x8b, 0xc5, 0xfe, - 0xc7, 0x38, 0x0c, 0xf3, 0x20, 0xf7, 0x0c, 0x81, 0x40, 0xb5, 0x8a, 0x62, 0xf8, 0x29, 0x8f, 0x35, - 0x67, 0x80, 0x7c, 0x49, 0xe7, 0x05, 0x81, 0x20, 0x1e, 0x70, 0x07, 0x96, 0x18, 0x80, 0xe1, 0x7c, - 0x5f, 0xd8, 0x83, 0xdf, 0xdb, 0xc2, 0x20, 0x60, 0x28, 0xb4, 0xe5, 0xd8, 0x74, 0x24, 0x4a, 0x41, - 0xbf, 0x19, 0x49, 0xe9, 0xf8, 0xa8, 0x90, 0x24, 0x06, 0x08, 0x2e, 0xa2, 0x98, 0x53, 0xc6, 0x61, - 0x1f, 0x03, 0x58, 0xea, 0x69, 0xcf, 0xff, 0x08, 0x88, 0x05, 0x9a, 0xc5, 0x33, 0xe3, 0xd8, 0xcd, - 0xcb, 0x32, 0xf2, 0x73, 0x99, 0xc3, 0x20, 0xe0, 0x7c, 0xbd, 0x3e, 0xb5, 0xad, 0x70, 0xcc, 0xa7, - 0x55, 0x55, 0xe0, 0xa0, 0x20, 0x61, 0x4e, 0x2f, 0x17, 0x8b, 0xac, 0xfd, 0x8f, 0xf1, 0x82, 0x17, - 0x77, 0x77, 0xad, 0x62, 0xb0, 0x68, 0xa5, 0x71, 0xc4, 0x5f, 0x84, 0x46, 0x1c, 0xa2, 0x74, 0x95, - 0xfe, 0xad, 0x62, 0xe9, 0x8e, 0x4b, 0x96, 0xb1, 0xe0, 0xbb, 0x14, 0x8b, 0x93, 0xc4, 0xc8, 0x78, - 0x44, 0x5d, 0x6a, 0x9c, 0xae, 0x5a, 0xdf, 0x5c, 0x40, 0x47, 0xe1, 0x0a, 0xab, 0xb8, 0xac, 0x56, - 0x28, 0xc5, 0x1d, 0x5f, 0x82, 0x10, 0xc0, 0x53, 0x36, 0x0b, 0xca, 0xd6, 0x29, 0x8b, 0x8b, 0xa8, - 0xba, 0xaf, 0xdc, 0x32, 0x05, 0x00, 0x45, 0xba, 0xc7, 0x6c, 0x51, 0x21, 0x70, 0x98, 0xc1, 0xc8, - 0x91, 0x95, 0xae, 0xb5, 0x17, 0x8b, 0xeb, 0x5e, 0x20, 0x20, 0x41, 0x72, 0x71, 0x4f, 0x17, 0x55, - 0x5b, 0xdf, 0x13, 0x08, 0x0a, 0x55, 0xa4, 0xf7, 0xd5, 0xf8, 0x44, 0x0c, 0x05, 0xaa, 0x25, 0xc3, - 0x6c, 0x2e, 0x10, 0x9e, 0x9d, 0xff, 0xa7, 0xf4, 0xcb, 0xf6, 0xe7, 0xe4, 0xd6, 0xa1, 0xc8, 0x12, - 0x20, 0x9c, 0x63, 0xbf, 0x36, 0x49, 0x91, 0x70, 0x52, 0x07, 0x00, 0xa9, 0x85, 0x03, 0x14, 0xc5, - 0x35, 0x10, 0x70, 0x5e, 0x54, 0xe9, 0x6c, 0xfb, 0xfe, 0x19, 0x04, 0x01, 0x4a, 0xb0, 0x83, 0xac, - 0x65, 0x4e, 0x71, 0xc5, 0x62, 0xb1, 0x46, 0x58, 0xcf, 0x78, 0x97, 0x17, 0x21, 0x77, 0x82, 0x81, - 0x17, 0x3c, 0x4f, 0x7c, 0xf5, 0x5c, 0x32, 0x06, 0x80, 0x4e, 0x26, 0xb5, 0x55, 0x17, 0x56, 0xe1, - 0x10, 0x72, 0xeb, 0x5f, 0x10, 0x30, 0xc2, 0x98, 0xb8, 0xa1, 0x8a, 0x6a, 0xcc, 0xd4, 0x39, 0xe2, - 0x98, 0xba, 0xf6, 0xa3, 0x08, 0x31, 0x02, 0x46, 0x08, 0xb8, 0xac, 0x43, 0x8e, 0xfe, 0x73, 0x85, - 0x8e, 0x25, 0xcd, 0xcf, 0x07, 0x0f, 0x01, 0xcf, 0x82, 0x08, 0xc9, 0x31, 0xa9, 0x9c, 0x3f, 0x35, - 0x8b, 0x2e, 0x0a, 0xcb, 0x01, 0x9e, 0x00, 0x38, 0x4a, 0x00, 0xf0, 0x2c, 0xb8, 0x99, 0x63, 0x61, - 0x63, 0x12, 0x0e, 0x1f, 0xc3, 0xf9, 0x89, 0x12, 0x10, 0x2c, 0xc4, 0x38, 0xa7, 0x89, 0x04, 0xe7, - 0x4f, 0x58, 0x1d, 0xfd, 0x45, 0xd7, 0x0c, 0x06, 0x41, 0x10, 0x9b, 0xdf, 0xdc, 0x32, 0x06, 0x10, - 0x54, 0x71, 0x7a, 0x45, 0xcd, 0xdc, 0x56, 0xe6, 0xc7, 0x76, 0xf0, 0x62, 0xa3, 0xbb, 0xe0, 0xb6, - 0xa2, 0x38, 0x94, 0x55, 0x2e, 0x63, 0xbb, 0x0b, 0xc8, 0x04, 0xe3, 0xd2, 0x19, 0x7f, 0xeb, 0xfa, - 0xc5, 0x39, 0x5d, 0x09, 0xe1, 0x22, 0x32, 0xb3, 0xfd, 0x6b, 0x5a, 0xf0, 0x88, 0x10, 0x09, 0x88, - 0xe5, 0x7c, 0x79, 0x99, 0x9e, 0x68, 0x34, 0xaa, 0xa2, 0xea, 0x2f, 0x84, 0x40, 0xc0, 0x10, 0x32, - 0xae, 0x2e, 0x46, 0x05, 0xcb, 0xda, 0x15, 0x89, 0xe5, 0x58, 0x18, 0x41, 0x80, 0xbd, 0x69, 0x64, - 0x84, 0x10, 0xc0, 0xa1, 0x30, 0xb5, 0x52, 0xe5, 0xe0, 0x20, 0x40, 0x44, 0x71, 0x01, 0x80, 0x81, - 0x05, 0xd4, 0x94, 0xf8, 0x87, 0xb8, 0xac, 0xb6, 0x2b, 0xe1, 0x01, 0x98, 0xac, 0x56, 0x28, 0xcb, - 0x78, 0x86, 0x91, 0x58, 0xac, 0x56, 0x7f, 0xaa, 0x18, 0x9f, 0xc4, 0x47, 0xcf, 0x8d, 0xe2, 0xea, - 0xb5, 0xae, 0x17, 0x89, 0x00, 0xe0, 0xac, 0xb4, 0xe3, 0xde, 0xb5, 0xbb, 0xbb, 0xad, 0x7e, 0x70, - 0x73, 0x05, 0x5b, 0xbc, 0x56, 0x2b, 0xc5, 0xc5, 0x31, 0x71, 0x79, 0x70, 0x84, 0x28, 0x20, 0x5d, - 0x0d, 0x63, 0x2e, 0x87, 0x0d, 0x3b, 0x0b, 0xc5, 0xc5, 0x31, 0x71, 0x3e, 0x58, 0x62, 0x99, 0x25, - 0x65, 0xbc, 0x48, 0x27, 0x86, 0x72, 0x12, 0x50, 0xbe, 0xf2, 0xf3, 0xa7, 0x08, 0x89, 0x04, 0xa4, - 0xe5, 0x74, 0x83, 0x0b, 0xcb, 0x18, 0xfb, 0xc3, 0x02, 0x0a, 0x4c, 0xaf, 0x31, 0x71, 0x75, 0x17, - 0xc3, 0x01, 0x03, 0x1e, 0xaa, 0xb8, 0x30, 0x0c, 0x05, 0x2e, 0xfd, 0xde, 0xaa, 0xab, 0xaa, 0xfb, - 0xc4, 0x02, 0x4e, 0xab, 0xc7, 0xf1, 0x20, 0xa0, 0x10, 0xde, 0xff, 0x7c, 0x11, 0x93, 0x77, 0xef, - 0x94, 0xee, 0xee, 0xf0, 0x9a, 0x83, 0x06, 0x3b, 0xff, 0xbf, 0xfc, 0x09, 0x00, 0x90, 0x9a, 0xab, - 0x63, 0x89, 0x12, 0x30, 0xf7, 0x05, 0x00, 0x2c, 0x01, 0x59, 0x5d, 0xfa, 0xd4, 0x5c, 0x4f, 0x05, - 0xcb, 0xdb, 0x0c, 0x44, 0x00, 0x02, 0x69, 0x8e, 0x14, 0x8e, 0xce, 0xc2, 0xa8, 0x86, 0xb2, 0x9e, - 0x2c, 0x1e, 0x31, 0xc0, 0xaf, 0xc1, 0xb7, 0xdf, 0xfd, 0x70, 0x28, 0x83, 0x00, 0x56, 0x6c, 0xe7, - 0x12, 0x36, 0xd8, 0x83, 0xdd, 0x84, 0x27, 0xcd, 0xc6, 0x28, 0x6d, 0x70, 0xc0, 0x23, 0x09, 0x8a, - 0xe5, 0xb9, 0x52, 0x16, 0xeb, 0xd7, 0xd5, 0x89, 0x07, 0x23, 0x96, 0x19, 0x3a, 0xc4, 0x81, 0x80, - 0x13, 0x8c, 0xd5, 0x6e, 0x9b, 0x63, 0x40, 0xa2, 0xaf, 0x04, 0xa6, 0x9b, 0x57, 0x76, 0x48, 0x8e, - 0x48, 0xa2, 0xc7, 0x62, 0x5c, 0xcc, 0xe2, 0x01, 0x07, 0x86, 0x02, 0x15, 0xee, 0xe2, 0xb7, 0x76, - 0xf5, 0xc4, 0x81, 0x60, 0x61, 0x55, 0x75, 0x55, 0x53, 0x75, 0x94, 0xd4, 0x5e, 0x2f, 0x86, 0x43, - 0x2f, 0x5a, 0xf8, 0xea, 0xae, 0xab, 0xdd, 0xdf, 0x10, 0x10, 0x05, 0x31, 0x4c, 0xf2, 0xa0, 0x53, - 0x2c, 0xe6, 0xaa, 0x2e, 0x46, 0x17, 0x37, 0xf1, 0x01, 0x02, 0x5e, 0xfa, 0xad, 0xd5, 0xf0, 0xc8, - 0x90, 0x53, 0x7b, 0xf5, 0x57, 0x8a, 0x37, 0xfe, 0x1a, 0xc0, 0x65, 0xe3, 0xf2, 0xf7, 0xff, 0xec, - 0x70, 0x70, 0x19, 0x05, 0xc7, 0x15, 0xbb, 0xeb, 0x5f, 0x63, 0x88, 0x24, 0x27, 0x80, 0x93, 0x71, - 0xa5, 0x45, 0x32, 0x00, 0x9a, 0xf9, 0x56, 0xbf, 0x12, 0x11, 0x04, 0xc6, 0xd5, 0x55, 0x56, 0xdc, - 0x18, 0x01, 0x44, 0x26, 0x41, 0x4d, 0x45, 0xee, 0xee, 0xfc, 0x30, 0x2c, 0x59, 0xfe, 0xf6, 0xed, - 0xf0, 0x40, 0x11, 0x25, 0xdd, 0xdc, 0x51, 0xb8, 0xad, 0xc5, 0x6e, 0x7a, 0x62, 0x40, 0x90, 0x0a, - 0x08, 0xfb, 0xe2, 0xeb, 0xee, 0x02, 0x80, 0x08, 0x00, 0xac, 0xe2, 0x8c, 0x56, 0x2b, 0x7c, 0x5c, - 0x5d, 0x6b, 0x1d, 0xd8, 0x55, 0x89, 0x04, 0x4e, 0x2f, 0x5f, 0xef, 0x7f, 0xc7, 0x38, 0x04, 0x0f, - 0x13, 0x63, 0xd2, 0x3d, 0xc0, 0xb2, 0x03, 0xe0, 0x16, 0x8a, 0x37, 0x1a, 0x15, 0x1b, 0xbd, 0xd6, - 0x3b, 0x1f, 0xc0, 0xc2, 0x20, 0x68, 0xa6, 0x5a, 0xa6, 0x7e, 0x2e, 0x2f, 0x5a, 0x89, 0x38, 0x3b, - 0x60, 0xa6, 0x58, 0x72, 0x6e, 0x2f, 0x8e, 0xd2, 0xdb, 0x76, 0x3f, 0xf2, 0x9f, 0x12, 0xf8, 0xbe, - 0xa7, 0x51, 0xf1, 0x7d, 0xa6, 0xb6, 0x9a, 0x1d, 0xd1, 0x7a, 0xe2, 0x04, 0x86, 0xc8, 0xb3, 0x41, - 0x41, 0xc0, 0x02, 0x08, 0x1e, 0x0e, 0x37, 0x17, 0x07, 0x2b, 0xb2, 0x9f, 0x84, 0x41, 0x83, 0x93, - 0x3b, 0x88, 0x84, 0x44, 0x3d, 0xd6, 0xf7, 0xad, 0x61, 0x36, 0x2c, 0x03, 0x7e, 0x4b, 0x50, 0x90, - 0xe7, 0xeb, 0x5f, 0xe0, 0x80, 0x0d, 0x01, 0x3a, 0xae, 0xee, 0x2b, 0x15, 0xe2, 0x43, 0x01, 0x1c, - 0xdc, 0x57, 0x8a, 0xc5, 0x62, 0xb1, 0x46, 0x2b, 0x71, 0x5f, 0x08, 0x06, 0x78, 0x44, 0x48, 0xea, - 0xaa, 0xee, 0xef, 0x32, 0x8a, 0xe1, 0x01, 0x04, 0xaa, 0xfc, 0x14, 0x02, 0x1a, 0xaa, 0xf8, 0xfc, - 0x5e, 0x02, 0x5c, 0xdc, 0x14, 0x31, 0x43, 0x4a, 0x8e, 0x62, 0xc2, 0x27, 0xa4, 0x0c, 0xf7, 0x84, - 0x41, 0x58, 0xc1, 0x7a, 0xd6, 0xbd, 0xdf, 0xdc, 0x1c, 0x04, 0x5d, 0x54, 0x69, 0x0a, 0x70, 0x85, - 0x9c, 0x5f, 0xf0, 0x72, 0xca, 0x7f, 0xf0, 0x80, 0x21, 0x0a, 0x0c, 0xbb, 0xbb, 0xdb, 0xdd, 0xdd, - 0xcf, 0xc4, 0xfb, 0xf9, 0xfe, 0xec, 0x34, 0x48, 0x02, 0x0d, 0xec, 0x48, 0x30, 0x4f, 0xfd, 0x34, - 0xd3, 0x4e, 0x98, 0xe3, 0x1f, 0x8e, 0x21, 0x42, 0x21, 0x2b, 0xcb, 0x58, 0xd6, 0x70, 0xf0, 0x0c, - 0x13, 0xd8, 0x4d, 0x94, 0x02, 0x67, 0x9a, 0x84, 0xf4, 0xd3, 0xfe, 0xb5, 0xc3, 0x00, 0x3e, 0x01, - 0x2d, 0x6e, 0xed, 0x34, 0x97, 0xd8, 0x51, 0x0a, 0x00, 0x1d, 0xd9, 0x68, 0x34, 0x09, 0x7a, 0xdd, - 0x13, 0x4d, 0x34, 0xd3, 0x07, 0xfc, 0xbd, 0xbf, 0xd3, 0x8f, 0xc0, 0xd2, 0x10, 0x0a, 0x0a, 0xd6, - 0xb8, 0xbc, 0x9f, 0x55, 0x55, 0xe2, 0xbe, 0x51, 0x29, 0x69, 0x3e, 0xb5, 0x0b, 0x43, 0x10, 0x99, - 0x6d, 0xdb, 0x5d, 0x0f, 0x84, 0x43, 0x64, 0x15, 0xc4, 0xb9, 0x27, 0xe1, 0x8f, 0xbf, 0xf2, 0x9d, - 0xdd, 0xae, 0x20, 0x20, 0x5b, 0xdf, 0xe5, 0x23, 0xdd, 0xf8, 0x40, 0x20, 0x2a, 0xf7, 0xbd, 0xea, - 0xda, 0xc3, 0x31, 0xe0, 0x04, 0x03, 0x4d, 0x71, 0x00, 0x45, 0xe7, 0xfb, 0xcb, 0xd3, 0xf8, 0xfe, - 0x0c, 0x41, 0x58, 0x81, 0x78, 0xbc, 0x5d, 0x45, 0xc5, 0xd3, 0x7f, 0xbc, 0x32, 0x0a, 0x0e, 0xf7, - 0xb8, 0xac, 0x56, 0x28, 0xfb, 0xc2, 0x00, 0x97, 0x56, 0xa2, 0xe2, 0xfb, 0x78, 0x44, 0x65, 0x57, - 0x27, 0x21, 0x0d, 0x3d, 0xc5, 0x6e, 0xee, 0xfc, 0x30, 0x22, 0xab, 0xbd, 0xdf, 0x06, 0x21, 0x00, - 0x4a, 0x47, 0x77, 0x7a, 0xd7, 0xdc, 0x18, 0x06, 0x02, 0x85, 0xab, 0xc5, 0xd4, 0x5d, 0x75, 0x55, - 0x5c, 0x76, 0x39, 0xe1, 0x90, 0x60, 0x0b, 0x0f, 0x57, 0xee, 0x2b, 0x15, 0xb6, 0x25, 0xf5, 0x8e, - 0xc7, 0x3c, 0x14, 0xc1, 0x38, 0xab, 0xdd, 0x5e, 0xed, 0xf2, 0x95, 0x55, 0x6b, 0x07, 0x02, 0x8b, - 0x7b, 0x8a, 0xc5, 0x18, 0xa3, 0x15, 0xe2, 0x04, 0x85, 0x06, 0x3b, 0xbb, 0xeb, 0x57, 0xbd, 0x45, - 0xea, 0xd8, 0x55, 0x8b, 0x01, 0x28, 0x2d, 0x03, 0x34, 0xea, 0x7d, 0xff, 0xfe, 0x25, 0x94, 0x00, - 0xc1, 0xa9, 0xd6, 0x48, 0x58, 0x84, 0x00, 0x77, 0x7e, 0x2a, 0xff, 0xff, 0x4f, 0xf1, 0x2c, 0xa1, - 0x12, 0x23, 0xec, 0x2c, 0x42, 0x04, 0xb5, 0x1b, 0xf6, 0xff, 0xff, 0x02, 0x40, 0x09, 0x05, 0x6e, - 0x19, 0x06, 0x01, 0x23, 0x52, 0x5e, 0xef, 0x81, 0xe6, 0x0a, 0x88, 0x2b, 0x8a, 0xcd, 0xd7, 0x3d, - 0xb1, 0x27, 0x07, 0xd1, 0x3c, 0x10, 0x8b, 0x4d, 0xd6, 0xdf, 0x26, 0xa9, 0xfd, 0x65, 0x17, 0xc8, - 0x47, 0xdf, 0xc9, 0x5d, 0x7c, 0xdc, 0xf9, 0x70, 0xc4, 0x2e, 0x47, 0x77, 0x76, 0xaa, 0xd8, 0x8a, - 0xe6, 0x55, 0x11, 0xfd, 0x7f, 0x0c, 0x81, 0x21, 0xe5, 0x57, 0xc4, 0x04, 0x8f, 0x75, 0xaa, 0xf0, - 0x99, 0x21, 0x8a, 0x7f, 0xff, 0xbf, 0xe1, 0xa2, 0x41, 0x2f, 0xad, 0x37, 0xff, 0xeb, 0x77, 0x82, - 0x90, 0x58, 0x21, 0xbb, 0x7b, 0xdd, 0xef, 0x97, 0x13, 0x0a, 0x1e, 0xe9, 0x09, 0x54, 0x2a, 0xca, - 0xe2, 0x2c, 0x2a, 0xa9, 0x30, 0xbf, 0x58, 0x5f, 0x01, 0xc7, 0x61, 0x2a, 0xee, 0xab, 0xd0, 0xe8, - 0x75, 0xfe, 0xe1, 0x00, 0x50, 0x09, 0xf7, 0x77, 0xbb, 0x4d, 0x71, 0xff, 0x04, 0xdb, 0xd0, 0xdd, - 0xff, 0x70, 0x87, 0x84, 0x04, 0x92, 0xab, 0xe2, 0x04, 0x82, 0x21, 0x31, 0x75, 0x51, 0xdd, 0xc2, - 0x01, 0x90, 0x57, 0x51, 0x7d, 0xef, 0xd5, 0x47, 0x18, 0xfe, 0x11, 0x08, 0xa2, 0x7b, 0x89, 0x82, - 0x23, 0x29, 0x98, 0xdb, 0x84, 0x41, 0x41, 0xbb, 0xbe, 0x23, 0xc4, 0x86, 0x46, 0x6f, 0x71, 0x5d, - 0xe9, 0xbe, 0xfa, 0xf0, 0x50, 0x09, 0xea, 0xba, 0xaa, 0x8b, 0xfb, 0x0b, 0x90, 0x48, 0x03, 0x5e, - 0x72, 0x34, 0x6d, 0xdf, 0xbd, 0xbf, 0xa7, 0x36, 0x62, 0x94, 0x10, 0xb0, 0xe1, 0xa1, 0xa2, 0x41, - 0x30, 0xfd, 0x67, 0xef, 0xff, 0xbb, 0x0d, 0x10, 0xa0, 0x4f, 0xc6, 0xb3, 0x9f, 0xff, 0xef, 0xb7, - 0x13, 0xa9, 0xc8, 0x20, 0x69, 0x33, 0x88, 0x03, 0x40, 0x21, 0xaa, 0xed, 0xc1, 0x80, 0x12, 0x08, - 0x57, 0x7f, 0x0c, 0x80, 0x80, 0x10, 0x21, 0x53, 0x5d, 0x15, 0x7c, 0x2d, 0x55, 0x6e, 0x07, 0xb0, - 0x35, 0xc9, 0x40, 0x00, 0xda, 0x87, 0xb0, 0xd4, 0x20, 0x13, 0x8c, 0xe1, 0x5c, 0x2f, 0xec, 0xa0, - 0x85, 0xdf, 0x86, 0xa2, 0x40, 0x40, 0x09, 0xb6, 0xe1, 0x6e, 0x33, 0xbe, 0x30, 0x85, 0xe2, 0x61, - 0x13, 0xad, 0x6f, 0x75, 0x37, 0xd7, 0xe1, 0x00, 0x47, 0x55, 0x51, 0x7f, 0xf0, 0x41, 0x04, 0x31, - 0x75, 0x55, 0x1d, 0xde, 0x04, 0x00, 0x91, 0x05, 0xea, 0xef, 0xbe, 0x24, 0x48, 0xf8, 0xac, 0x56, - 0xe2, 0xb1, 0x2f, 0x96, 0xc4, 0x38, 0x2b, 0x2c, 0x71, 0x5e, 0x20, 0x10, 0x02, 0x61, 0x0a, 0xb3, - 0xc5, 0x6d, 0xb7, 0x08, 0xc5, 0x8b, 0x76, 0xed, 0x6a, 0xb8, 0x1a, 0x03, 0x00, 0xba, 0xaf, 0x7a, - 0xd7, 0xb8, 0x81, 0x00, 0x8e, 0xaa, 0x2e, 0x2f, 0xef, 0x82, 0x2e, 0xaa, 0xdc, 0x44, 0x14, 0x55, - 0x55, 0x6a, 0xa2, 0xed, 0xe0, 0x84, 0xa5, 0x55, 0x55, 0xe0, 0xa4, 0xbc, 0x43, 0x8f, 0x1c, 0x43, - 0x06, 0xab, 0x6f, 0x8e, 0xc3, 0x03, 0xcf, 0xe2, 0x0b, 0xad, 0x70, 0xc8, 0x60, 0x27, 0xdd, 0xbb, - 0x55, 0xc1, 0xc0, 0x21, 0x05, 0x71, 0x58, 0xad, 0xea, 0x2e, 0xba, 0xaa, 0xfb, 0x82, 0x08, 0x25, - 0xbb, 0xea, 0x2f, 0xfb, 0x82, 0x00, 0x2c, 0x02, 0x11, 0x22, 0x3e, 0xaa, 0x38, 0xc7, 0x3c, 0x09, - 0x20, 0xe4, 0x15, 0x55, 0x7a, 0xba, 0x57, 0x58, 0xee, 0xe2, 0x01, 0x80, 0x2a, 0xaa, 0xea, 0xbb, - 0x9b, 0xbf, 0xc7, 0x3c, 0x18, 0x82, 0x00, 0x55, 0x6e, 0xf3, 0x40, 0xbf, 0x77, 0xaf, 0x1f, 0x9e, - 0x40, 0xfa, 0xdc, 0xe2, 0x41, 0xc0, 0xc2, 0x2d, 0x6e, 0xf7, 0x5a, 0xdd, 0xdd, 0xf0, 0xc0, 0x10, - 0x04, 0x09, 0x77, 0xdd, 0xdd, 0xf0, 0x43, 0x77, 0xbb, 0xe0, 0xc4, 0x0c, 0x00, 0x9c, 0x71, 0x30, - 0x40, 0xf1, 0x78, 0xe3, 0x88, 0x3c, 0xbe, 0x1b, 0x2b, 0x61, 0x06, 0x08, 0x6b, 0x84, 0x2d, 0x2d, - 0xc0, 0xe9, 0x85, 0xdf, 0x8c, 0xe6, 0x93, 0x13, 0xc6, 0x70, 0x41, 0x85, 0xc0, 0xa8, 0x6c, 0xf3, - 0xe0, 0x01, 0xca, 0xa8, 0x1d, 0x30, 0x25, 0x1a, 0xb0, 0x0b, 0x8e, 0x00, 0x0f, 0x2e, 0x00, 0xb8, - 0xb1, 0xb8, 0x22, 0x0c, 0x14, 0x41, 0x1c, 0x20, 0x04, 0x19, 0xb0, 0x19, 0x6f, 0xc9, 0xd6, 0xcd, - 0xbf, 0xcb, 0x63, 0x4e, 0x8f, 0xe0, 0x8c, 0xa6, 0x62, 0xa9, 0xbf, 0x89, 0x5e, 0xe2, 0x02, 0x38, - 0xec, 0x15, 0x76, 0x47, 0xe1, 0x80, 0x40, 0x3e, 0xb6, 0x3c, 0x43, 0xef, 0x2f, 0x7b, 0xc4, 0xc2, - 0x22, 0x15, 0xbe, 0xee, 0xf2, 0xd2, 0xfe, 0x62, 0xdd, 0xdf, 0x05, 0x00, 0xe4, 0x79, 0x74, 0xde, - 0xae, 0xae, 0xb5, 0x85, 0xe7, 0x08, 0x50, 0x0a, 0x5b, 0xd5, 0x95, 0x95, 0x5f, 0x34, 0x26, 0x86, - 0xce, 0x19, 0x05, 0x23, 0x0c, 0x4f, 0x8e, 0xbb, 0xc7, 0x8c, 0xdd, 0x65, 0xfc, 0x22, 0x08, 0x42, - 0x75, 0x5e, 0xcd, 0x53, 0xc1, 0x00, 0x80, 0x8d, 0xdd, 0xaa, 0xaa, 0xd5, 0x7e, 0x10, 0x37, 0x77, - 0x8e, 0x90, 0x3c, 0xc7, 0xcf, 0x8e, 0x50, 0x4c, 0xa7, 0xfa, 0xa3, 0xbc, 0x20, 0x08, 0x42, 0x9c, - 0x56, 0xee, 0xee, 0xe2, 0x8c, 0x56, 0x2b, 0x77, 0xbe, 0xab, 0x02, 0x40, 0x2c, 0x2b, 0x6a, 0xa2, - 0xed, 0xdc, 0xdd, 0x54, 0xbc, 0x5f, 0x8f, 0xe0, 0xa0, 0x18, 0x05, 0x0e, 0xfa, 0xaa, 0xaa, 0xa4, - 0xab, 0x55, 0xc7, 0x18, 0xe1, 0xf0, 0xc0, 0x24, 0xab, 0x8a, 0x7e, 0x3f, 0xc0, 0x82, 0x08, 0xeb, - 0x5f, 0xb8, 0x44, 0x18, 0xaf, 0xb8, 0x44, 0x48, 0x25, 0x24, 0x5f, 0x17, 0x68, 0x5d, 0x5b, 0x84, - 0x42, 0x25, 0xee, 0xf8, 0x81, 0x2e, 0x2e, 0xbe, 0x11, 0x05, 0x21, 0x43, 0x8a, 0xdc, 0x56, 0xee, - 0xe2, 0xb7, 0x77, 0xdd, 0xef, 0x7e, 0x19, 0x04, 0x2e, 0xec, 0x4f, 0xc3, 0x22, 0x45, 0x1a, 0xaf, - 0xbd, 0xf0, 0x62, 0x05, 0x00, 0x4e, 0x31, 0x62, 0xea, 0x27, 0xce, 0xf3, 0x72, 0xc3, 0x94, 0x2f, - 0x89, 0x0f, 0x5e, 0xf7, 0xcd, 0x90, 0x3a, 0x31, 0x14, 0x0a, 0x2c, 0x49, 0x2f, 0x40, 0x00, 0x40, - 0x03, 0x80, 0x32, 0xf0, 0x62, 0xfb, 0xf1, 0x20, 0x22, 0x03, 0x30, 0xc6, 0x4f, 0xb8, 0x0e, 0xa7, - 0xbf, 0xff, 0xe1, 0x08, 0x91, 0x2f, 0x4d, 0x6b, 0x5c, 0x40, 0x93, 0x55, 0x6b, 0xe6, 0x8b, 0xaa, - 0xfc, 0x16, 0x6f, 0x7d, 0xa5, 0x5c, 0xbf, 0xbc, 0x4a, 0xfb, 0xc4, 0xf0, 0xc4, 0x7d, 0xc5, 0x6e, - 0xe2, 0x8c, 0x50, 0x1b, 0x8a, 0x38, 0xae, 0x2b, 0xc4, 0x03, 0x01, 0x86, 0xdd, 0xf9, 0xb0, 0x56, - 0x2b, 0x15, 0x8a, 0xea, 0xe5, 0xce, 0x08, 0x01, 0x61, 0x55, 0x6b, 0x77, 0x7a, 0xdb, 0xec, 0x2c, - 0x48, 0x06, 0xe9, 0x84, 0xab, 0xef, 0xff, 0xd6, 0xb8, 0x21, 0x08, 0x1a, 0x9a, 0x69, 0x97, 0xc3, - 0x44, 0x84, 0x41, 0xad, 0x93, 0xff, 0x65, 0xa5, 0xf7, 0xe2, 0x43, 0x00, 0x88, 0xaf, 0x7d, 0x71, - 0x21, 0x8c, 0x34, 0x88, 0x11, 0xc8, 0xa3, 0x3f, 0xff, 0xb7, 0x5c, 0x44, 0x75, 0xc5, 0x62, 0xb7, - 0x71, 0x46, 0x2b, 0x77, 0x3e, 0x3f, 0x89, 0xf8, 0x80, 0x5a, 0x55, 0xd5, 0xe9, 0xfd, 0x84, 0xc8, - 0x50, 0x02, 0x1b, 0xd2, 0xf2, 0x97, 0xf9, 0xb9, 0xaf, 0xf5, 0x5f, 0x0c, 0xa8, 0x08, 0xcf, 0x61, - 0x0d, 0xff, 0x7b, 0xfb, 0xe2, 0x67, 0x04, 0xa3, 0xd1, 0x76, 0x19, 0x90, 0x02, 0xab, 0xbe, 0x58, - 0xf7, 0xff, 0xfd, 0x2a, 0xf2, 0x93, 0x55, 0xc3, 0x01, 0x13, 0x5d, 0xde, 0x48, 0x30, 0x03, 0x0b, - 0x2b, 0xbf, 0x88, 0x0c, 0x78, 0x80, 0x54, 0x32, 0xee, 0xf8, 0x57, 0x4c, 0xd0, 0xd5, 0x0e, 0xbe, - 0x1f, 0xb3, 0xc9, 0x00, 0x38, 0x8c, 0xa2, 0x04, 0xa1, 0xd1, 0x08, 0xa5, 0x12, 0x53, 0x80, 0x00, - 0xb4, 0x38, 0x2f, 0x5d, 0x84, 0x0b, 0x88, 0xc0, 0x05, 0x0b, 0xfb, 0x16, 0x4b, 0xd3, 0xe1, 0x5c, - 0x49, 0xaa, 0x2e, 0xa0, 0x32, 0xcc, 0x24, 0xb0, 0x88, 0x09, 0x00, 0x4c, 0x65, 0xab, 0x97, 0x3e, - 0xae, 0x15, 0x08, 0x04, 0x41, 0x68, 0xd7, 0x7d, 0x69, 0xd8, 0xf1, 0x2a, 0xfc, 0x44, 0x24, 0x6a, - 0xd7, 0x55, 0xf0, 0xa1, 0xc5, 0xd4, 0x5e, 0x99, 0x6e, 0xeb, 0x5d, 0xee, 0xdc, 0x14, 0x03, 0x0c, - 0x2c, 0x49, 0x33, 0xfb, 0xff, 0xe0, 0x41, 0x03, 0x0b, 0xa8, 0x8f, 0x92, 0x18, 0x09, 0x00, 0x28, - 0x0c, 0xb8, 0xac, 0xf9, 0x88, 0x1a, 0x3f, 0xca, 0xc6, 0x2e, 0xb7, 0x4d, 0xf8, 0x40, 0x61, 0x32, - 0x13, 0x7c, 0x9e, 0x77, 0x71, 0x5b, 0xbd, 0xdf, 0x84, 0x02, 0x15, 0x5d, 0xc5, 0x6e, 0xe2, 0xb7, - 0x7e, 0x24, 0x21, 0xe2, 0x3c, 0x49, 0xae, 0xfe, 0x22, 0x28, 0xaf, 0x7b, 0xbf, 0xe2, 0x08, 0x2b, - 0x15, 0xbb, 0xbb, 0xda, 0xe2, 0x0a, 0x54, 0xe4, 0x8f, 0x89, 0x5e, 0xf8, 0x22, 0xc5, 0xda, 0x56, - 0xe2, 0x01, 0x40, 0x23, 0x3d, 0x5f, 0xc7, 0x38, 0x69, 0x40, 0x4a, 0xdb, 0x8e, 0xdd, 0x3f, 0xfd, - 0xf7, 0x7c, 0x26, 0xa0, 0x1b, 0xeb, 0xf4, 0xfa, 0xff, 0xff, 0x08, 0x82, 0x62, 0x2a, 0x9b, 0xe9, - 0x3e, 0xdc, 0x40, 0x43, 0xc3, 0x1f, 0x30, 0x95, 0x5f, 0x0c, 0x83, 0x16, 0x47, 0x77, 0xa8, 0x90, - 0x41, 0xc4, 0x7c, 0x20, 0x14, 0xaa, 0xe4, 0xc7, 0x19, 0xde, 0xef, 0x66, 0xef, 0x5c, 0x18, 0x81, - 0x00, 0x13, 0x8e, 0x8d, 0xe7, 0xd9, 0x32, 0x63, 0x91, 0xfe, 0x53, 0xe1, 0x1d, 0x25, 0xae, 0x5e, - 0x4e, 0xd1, 0x38, 0x2d, 0xa1, 0xb1, 0xa1, 0xb1, 0xbd, 0x37, 0xcb, 0xea, 0xd1, 0x9d, 0x7b, 0x84, - 0x40, 0x40, 0x02, 0x11, 0x42, 0x8e, 0x2b, 0xdb, 0xc4, 0xa3, 0xc5, 0xf5, 0x7e, 0x20, 0x48, 0x4c, - 0xeb, 0x5d, 0x6b, 0x89, 0x12, 0xaf, 0xc4, 0x84, 0x47, 0x8a, 0x5a, 0xdf, 0x7b, 0xdf, 0x08, 0x03, - 0x81, 0xc2, 0x69, 0xd3, 0x77, 0x77, 0x15, 0x70, 0x90, 0x00, 0x4a, 0x97, 0x16, 0x8e, 0x08, 0xf3, - 0x4b, 0x7d, 0xc0, 0xd0, 0x04, 0x80, 0x47, 0x71, 0x5b, 0x4e, 0xdc, 0x0c, 0x20, 0x41, 0x04, 0x95, - 0xa6, 0x76, 0x3d, 0x8e, 0x90, 0x11, 0xed, 0x3f, 0xeb, 0xf1, 0x01, 0x1f, 0x12, 0x42, 0x3b, 0xbb, - 0xe0, 0x22, 0x04, 0x8c, 0x28, 0xa3, 0x71, 0x5b, 0xad, 0x27, 0xcd, 0x98, 0xae, 0xf0, 0xc2, 0x81, - 0x4f, 0x66, 0xbe, 0xdb, 0xfb, 0x7e, 0xf8, 0x6b, 0x12, 0xa9, 0xdf, 0xff, 0xed, 0x8e, 0x50, 0x18, - 0xf7, 0x4e, 0xf7, 0xd1, 0x7d, 0xf5, 0xf7, 0x89, 0x04, 0xb9, 0x58, 0xd5, 0x3f, 0xde, 0x25, 0x7d, - 0x85, 0x14, 0x07, 0xf7, 0x06, 0x7f, 0xfd, 0xf5, 0x85, 0x65, 0x0a, 0x88, 0xd0, 0x3c, 0x28, 0xbd, - 0x56, 0x2e, 0xf5, 0xfc, 0x17, 0x08, 0x17, 0x17, 0xad, 0xef, 0xdc, 0x14, 0x04, 0x02, 0x65, 0x93, - 0x3a, 0xd7, 0x0c, 0x49, 0x55, 0xf8, 0x9f, 0x9a, 0xb5, 0xe1, 0x10, 0x40, 0x5e, 0xef, 0xc4, 0x78, - 0x8f, 0x0c, 0x10, 0xce, 0xee, 0xfe, 0x08, 0xfa, 0x8b, 0xd7, 0x08, 0xc5, 0x5e, 0xba, 0xbb, 0x8a, - 0xc5, 0x7c, 0x22, 0x16, 0x20, 0xe4, 0x0b, 0xc9, 0x80, 0x03, 0x4c, 0x9c, 0x03, 0x42, 0x4d, 0x0a, - 0x24, 0xa5, 0x61, 0x28, 0x4e, 0x11, 0x0f, 0x10, 0x61, 0x0a, 0x85, 0x07, 0xe1, 0x38, 0x28, 0x05, - 0x03, 0x25, 0xc1, 0x58, 0x90, 0x1e, 0x5b, 0x12, 0xb1, 0x7b, 0x0d, 0x05, 0xc1, 0x52, 0xc7, 0x50, - 0x87, 0x96, 0xb0, 0x5b, 0x50, 0x0c, 0x7d, 0xc1, 0xe6, 0x3a, 0xf8, 0x98, 0xfa, 0x16, 0xbc, 0x49, - 0x7c, 0xe2, 0xe2, 0x26, 0xee, 0xf8, 0x8f, 0x88, 0xf0, 0x8f, 0x89, 0x05, 0x97, 0x12, 0xb0, 0x2b, - 0x2c, 0x71, 0x5b, 0xb8, 0xa3, 0x6e, 0x28, 0x66, 0x06, 0x17, 0x70, 0x4e, 0x72, 0xc7, 0x9d, 0xe4, - 0x3b, 0xdd, 0xf5, 0xe0, 0x56, 0x64, 0xef, 0x7e, 0x4f, 0xec, 0xb0, 0x3f, 0xfb, 0x89, 0x02, 0x40, - 0x50, 0x4d, 0xdc, 0x56, 0xef, 0x8a, 0xdc, 0x57, 0xbd, 0xc7, 0x76, 0x39, 0xc0, 0xed, 0xe4, 0xfc, - 0x0c, 0x00, 0x48, 0x0a, 0x17, 0x8a, 0xcf, 0xfa, 0xd5, 0xdc, 0x56, 0xea, 0xaa, 0xad, 0x86, 0x94, - 0x03, 0x86, 0xd7, 0xc9, 0x7d, 0xef, 0xf7, 0xbf, 0x61, 0xa2, 0x40, 0x20, 0x69, 0x99, 0x5f, 0x9b, - 0xff, 0x57, 0xbd, 0xca, 0x98, 0xc4, 0x40, 0x16, 0x14, 0x85, 0xe3, 0x61, 0x82, 0x40, 0x10, 0xeb, - 0xdc, 0x30, 0xbb, 0xb6, 0xdb, 0x7f, 0xff, 0x71, 0x20, 0x36, 0x01, 0x1d, 0x55, 0x57, 0xd8, 0xe5, - 0x09, 0x05, 0x6e, 0x55, 0xc0, 0x28, 0x00, 0x2e, 0x41, 0x2d, 0x0d, 0x39, 0xd8, 0x51, 0x4f, 0x26, - 0x0e, 0xec, 0xee, 0x12, 0x03, 0xd4, 0xf0, 0xb4, 0xa1, 0xd9, 0x41, 0x57, 0xff, 0xfe, 0x19, 0x04, - 0x9b, 0xdc, 0x71, 0x8e, 0x78, 0x44, 0x30, 0xa3, 0x8c, 0x73, 0x85, 0x1c, 0x01, 0xbd, 0x1d, 0x14, - 0xbc, 0xfa, 0xaf, 0xd7, 0x5c, 0x32, 0x0a, 0x41, 0x45, 0xd8, 0xd8, 0xee, 0xee, 0xfd, 0xc4, 0x57, - 0xfc, 0x44, 0xc4, 0xab, 0xf0, 0xc0, 0x64, 0x14, 0x77, 0x7c, 0x56, 0xef, 0xc3, 0x10, 0x59, 0x55, - 0xf1, 0x0e, 0x08, 0x73, 0x15, 0x8a, 0xef, 0x8a, 0x70, 0xc2, 0x6f, 0x70, 0x87, 0x88, 0x12, 0x4b, - 0xbf, 0x88, 0xf0, 0x87, 0x86, 0x01, 0x01, 0xaa, 0xaa, 0xbc, 0x08, 0x03, 0xcd, 0xaa, 0xbb, 0xf7, - 0x5e, 0x24, 0x04, 0x40, 0x53, 0xcb, 0xc2, 0xb5, 0x26, 0x0d, 0x5c, 0x4f, 0xbc, 0x43, 0xde, 0x11, - 0xd6, 0x3c, 0xbc, 0x1b, 0x25, 0xc2, 0x50, 0x51, 0x0a, 0x11, 0x5b, 0xe2, 0xb3, 0xfb, 0x17, 0xb8, - 0x97, 0x41, 0x56, 0xe3, 0x8f, 0x2c, 0xd4, 0xfa, 0x89, 0x39, 0x70, 0x70, 0x19, 0x05, 0x22, 0x41, - 0xff, 0x15, 0x83, 0xdf, 0x2c, 0x71, 0x71, 0x5d, 0xbf, 0x2f, 0x17, 0xee, 0x04, 0x80, 0x30, 0x8b, - 0x36, 0xef, 0xbb, 0xc7, 0x60, 0x35, 0xc7, 0xab, 0x07, 0xd8, 0xc9, 0xc0, 0x90, 0x4d, 0x05, 0x2c, - 0x7c, 0x39, 0x20, 0x00, 0x24, 0xf1, 0x46, 0xbd, 0xfc, 0x12, 0xbe, 0x6f, 0xd7, 0xfb, 0x60, 0xeb, - 0xed, 0x8e, 0x8f, 0xe1, 0xeb, 0xf8, 0x12, 0x00, 0x92, 0x38, 0xd4, 0x42, 0xb8, 0x50, 0x01, 0xa1, - 0x3a, 0xa5, 0xbc, 0xf7, 0x47, 0x14, 0x9c, 0x0a, 0x8f, 0x17, 0x85, 0x98, 0xb0, 0x08, 0xab, 0xc1, - 0x24, 0x4e, 0x0a, 0x1e, 0xb7, 0x77, 0x5a, 0xdd, 0xdd, 0xe1, 0x96, 0x50, 0x11, 0x8e, 0x29, 0x82, - 0xe7, 0xbf, 0xff, 0xdd, 0xc0, 0xc0, 0x07, 0x90, 0x51, 0xbb, 0xbd, 0x6a, 0xd8, 0x6d, 0x9c, 0x36, - 0x07, 0x63, 0xde, 0xf7, 0x77, 0x7f, 0x2d, 0xad, 0x7e, 0x19, 0x21, 0x01, 0x11, 0x23, 0x9d, 0x77, - 0xdd, 0xfa, 0xbf, 0xb6, 0x13, 0x50, 0x56, 0x4b, 0x75, 0xab, 0xab, 0xab, 0x8b, 0xb8, 0xbb, 0xab, - 0xac, 0x26, 0xa0, 0x42, 0xed, 0x1a, 0xa7, 0xfb, 0xdf, 0xf0, 0xb3, 0x80, 0x7e, 0xe2, 0x38, 0xf7, - 0xd1, 0x49, 0x0f, 0xaa, 0xe1, 0x39, 0x00, 0x3f, 0x34, 0x8d, 0x32, 0xd2, 0xd6, 0xac, 0xac, 0xbf, - 0x3b, 0x80, 0x55, 0xb7, 0x25, 0xcc, 0x10, 0x54, 0x71, 0x8e, 0x78, 0x29, 0x82, 0x2d, 0xee, 0x38, - 0xc7, 0x38, 0xa5, 0x19, 0x63, 0x80, 0xb0, 0x01, 0x72, 0x09, 0x0b, 0xaa, 0x8e, 0x31, 0xce, 0x14, - 0x94, 0x03, 0x6d, 0x91, 0xcc, 0xef, 0xff, 0x4d, 0x3e, 0x14, 0x62, 0x00, 0x71, 0xd0, 0x96, 0xbe, - 0xb5, 0xfa, 0xd7, 0x02, 0x00, 0x08, 0x90, 0x47, 0x56, 0xef, 0xdc, 0x10, 0x00, 0xe1, 0x04, 0xf5, - 0x10, 0xf1, 0x7e, 0x98, 0xac, 0x43, 0xfb, 0x81, 0x80, 0x05, 0x48, 0x40, 0x8a, 0xaa, 0xa4, 0xfc, - 0x6f, 0xb8, 0xaf, 0x00, 0xb0, 0x00, 0x89, 0x05, 0x66, 0x55, 0x17, 0x93, 0xb9, 0x22, 0xa7, 0x00, - 0x38, 0x21, 0xc1, 0x00, 0xe1, 0xc0, 0x00, 0xe1, 0xc0, 0x00, 0x4f, 0x32, 0xc5, 0x12, 0x08, 0x5f, - 0x06, 0x15, 0x45, 0x00, 0x68, 0x18, 0xe8, 0x10, 0x9a, 0xee, 0x69, 0xd3, 0xbd, 0xe9, 0xcb, 0xdd, - 0xef, 0x8e, 0x51, 0xac, 0xc5, 0x77, 0x08, 0x06, 0x44, 0xde, 0x2b, 0x89, 0x7c, 0x4b, 0xfe, 0x2f, - 0x5a, 0xea, 0xb1, 0x6c, 0xa0, 0xb8, 0xa4, 0xc6, 0xc3, 0x11, 0x20, 0x46, 0x3c, 0x56, 0xef, 0x6d, - 0xbf, 0xff, 0xb8, 0x29, 0x02, 0x08, 0xa1, 0x5b, 0xb6, 0xe6, 0xf1, 0x3f, 0x81, 0x24, 0x18, 0x8e, - 0x2b, 0xbb, 0xbc, 0x51, 0xc4, 0xb8, 0xff, 0x96, 0xbe, 0x05, 0x90, 0xc0, 0x2c, 0x14, 0x98, 0xa3, - 0x8a, 0xeb, 0x37, 0x10, 0xb1, 0x63, 0x7c, 0x9a, 0xfa, 0x6e, 0x61, 0x2a, 0xbc, 0x00, 0x00, 0x00, - 0x01, 0x41, 0x9a, 0x55, 0x2a, 0xb0, 0xe8, 0x2f, 0xd0, 0xfc, 0xae, 0x02, 0x04, 0x09, 0x01, 0xc1, - 0x95, 0x05, 0x41, 0x4e, 0x0e, 0x82, 0xd8, 0x01, 0x11, 0x5b, 0xe0, 0xdd, 0xdf, 0x80, 0x80, 0x02, - 0x48, 0x9a, 0xaa, 0xaa, 0xc1, 0x2d, 0x21, 0xa4, 0xa7, 0x33, 0xe1, 0x94, 0x3d, 0xc8, 0xfe, 0xbd, - 0x13, 0xcc, 0x33, 0x8a, 0xd7, 0x42, 0x5e, 0xbb, 0x1c, 0xba, 0x6b, 0xa1, 0xbd, 0x13, 0xd1, 0x7a, - 0xba, 0xd5, 0xe2, 0x68, 0x3a, 0x40, 0x80, 0x01, 0xe5, 0x9e, 0xb1, 0xee, 0x7f, 0x75, 0xf9, 0xc3, - 0xc9, 0x80, 0x3a, 0x33, 0x2b, 0xb4, 0xf1, 0xdd, 0x4d, 0x48, 0xcd, 0xac, 0x92, 0x90, 0x26, 0x88, - 0x25, 0x72, 0xf7, 0x17, 0x8a, 0xe2, 0xbc, 0x18, 0x82, 0x10, 0xa1, 0x0b, 0x97, 0x48, 0x52, 0x44, - 0xc0, 0x15, 0x1e, 0xf5, 0xdc, 0xc6, 0xa1, 0x8d, 0xf0, 0x00, 0x29, 0xca, 0xc0, 0x25, 0x0f, 0x61, - 0x29, 0x60, 0x01, 0xf3, 0x11, 0xe3, 0x1a, 0x7a, 0xfa, 0x0c, 0xf5, 0x75, 0xe6, 0x5c, 0x08, 0x20, - 0x96, 0xaa, 0xaa, 0xaa, 0xaa, 0x22, 0xd0, 0x09, 0x8b, 0x8b, 0xa2, 0x2b, 0x3a, 0x1c, 0x07, 0xb1, - 0x60, 0xbd, 0x7b, 0xeb, 0xdf, 0x5e, 0x9b, 0xaf, 0x45, 0x62, 0x50, 0x86, 0x85, 0x7a, 0x2b, 0xb8, - 0x10, 0x41, 0x00, 0xa1, 0x92, 0x7a, 0x07, 0x5e, 0x80, 0x66, 0x85, 0xb6, 0x33, 0x7c, 0x10, 0x8c, - 0x31, 0xfe, 0x58, 0x1c, 0x18, 0xa1, 0x8f, 0x2e, 0xef, 0x1d, 0x68, 0x62, 0x3e, 0x0f, 0x17, 0xb6, - 0xec, 0xdf, 0x06, 0x20, 0xc4, 0xa7, 0x3e, 0xc9, 0xf9, 0x64, 0x82, 0x90, 0x10, 0x28, 0x22, 0x3b, - 0x1f, 0xc1, 0x08, 0x64, 0x22, 0x12, 0xcb, 0x82, 0x1c, 0x9a, 0xed, 0xd9, 0x3a, 0xc9, 0x7c, 0x10, - 0x88, 0x18, 0x69, 0x70, 0x40, 0x38, 0x58, 0x31, 0x59, 0xf5, 0x03, 0x46, 0x01, 0x90, 0xb0, 0x67, - 0xc1, 0x47, 0x96, 0x67, 0x07, 0x05, 0xcb, 0xf0, 0x52, 0x07, 0x80, 0xa4, 0x0f, 0x80, 0x00, 0x40, - 0x09, 0x43, 0xd0, 0x00, 0x94, 0x8c, 0x04, 0xa1, 0xe9, 0x28, 0xa1, 0x2e, 0xf5, 0xcb, 0x30, 0xaf, - 0xa5, 0x93, 0x34, 0x3c, 0x7c, 0x74, 0x3f, 0xa9, 0x3a, 0x0c, 0x95, 0x24, 0xeb, 0x14, 0x77, 0x56, - 0xbe, 0xbd, 0x5d, 0x13, 0x2b, 0xe8, 0x53, 0x11, 0xb8, 0x67, 0x16, 0x40, 0x98, 0x63, 0xc2, 0xfc, - 0xe1, 0x10, 0x60, 0x08, 0x02, 0xc4, 0x66, 0xc9, 0xef, 0x89, 0xf2, 0x42, 0xa2, 0xcc, 0x47, 0x8c, - 0x63, 0x7b, 0xab, 0xff, 0x12, 0x14, 0x8d, 0xd9, 0x2b, 0x04, 0xae, 0x5c, 0x2c, 0xc0, 0x43, 0x19, - 0x63, 0x8d, 0xd7, 0x32, 0xaf, 0x36, 0x11, 0x78, 0x4c, 0x0f, 0xeb, 0xc1, 0x7c, 0x03, 0x92, 0xe4, - 0x00, 0x23, 0x40, 0xef, 0xec, 0x2e, 0xe0, 0x06, 0x25, 0x68, 0xcc, 0xb4, 0x3b, 0xaa, 0x3b, 0x1f, - 0xcc, 0xcd, 0xcc, 0x9e, 0x1f, 0xeb, 0x14, 0x41, 0xe8, 0xf8, 0x28, 0x0b, 0x8c, 0x85, 0x1c, 0x8b, - 0xc5, 0x5f, 0x03, 0xa8, 0x77, 0x03, 0x77, 0x21, 0x84, 0x3a, 0xd8, 0xd6, 0x79, 0xbf, 0xfc, 0x20, - 0x30, 0xce, 0x81, 0xc1, 0xc6, 0x6c, 0x47, 0x1c, 0x11, 0xc9, 0x92, 0x41, 0xcb, 0x3c, 0x1d, 0x45, - 0xd5, 0x70, 0x88, 0x44, 0x28, 0x34, 0x95, 0xe2, 0x7d, 0x55, 0x97, 0x97, 0xaa, 0x51, 0x71, 0x75, - 0xdd, 0xc5, 0x6f, 0x84, 0xd8, 0xc0, 0x06, 0x32, 0x74, 0xdc, 0xb9, 0x7f, 0xfb, 0xac, 0x4f, 0xfd, - 0x05, 0xde, 0x19, 0x88, 0xd7, 0x57, 0x45, 0x75, 0xef, 0xae, 0x57, 0xd6, 0xa8, 0x28, 0xa1, 0xf6, - 0x59, 0xbf, 0xff, 0xf8, 0x44, 0x14, 0x07, 0xc2, 0x51, 0x21, 0x62, 0x24, 0xb0, 0x6e, 0x71, 0xe6, - 0xe7, 0x7b, 0xf7, 0x1c, 0x18, 0xd0, 0xd5, 0xd5, 0xff, 0x04, 0x00, 0x58, 0x0a, 0x44, 0x7f, 0x88, - 0xf8, 0xc6, 0x00, 0xb4, 0x17, 0x60, 0x83, 0x46, 0x09, 0x21, 0xf7, 0x52, 0xfb, 0x8f, 0x60, 0xd9, - 0x46, 0x73, 0x40, 0x07, 0x78, 0xc0, 0x80, 0x6b, 0x19, 0xe1, 0x10, 0x50, 0x24, 0x93, 0xc6, 0xc6, - 0xcf, 0xa8, 0x41, 0xb8, 0x29, 0x8a, 0x1b, 0x77, 0xcf, 0xa4, 0x10, 0x68, 0xf8, 0x60, 0x20, 0x3a, - 0x60, 0xc1, 0x34, 0x1a, 0x30, 0x5b, 0xee, 0xd0, 0x3a, 0xa8, 0xbc, 0x33, 0x09, 0x80, 0x10, 0x3e, - 0xaa, 0x20, 0xcf, 0x3f, 0x13, 0xff, 0x5f, 0x7b, 0x85, 0x54, 0x03, 0x8c, 0x2d, 0x80, 0x3b, 0xb3, - 0x08, 0xf1, 0xca, 0xab, 0xff, 0xfc, 0x10, 0x89, 0x1c, 0x10, 0x15, 0xc5, 0x19, 0x48, 0x69, 0x27, - 0x14, 0x74, 0x42, 0x47, 0xb5, 0x2a, 0xc2, 0x08, 0x2e, 0x3e, 0xfa, 0xb1, 0x2e, 0x19, 0x45, 0x79, - 0x7a, 0x34, 0x57, 0xdd, 0xdd, 0xfe, 0x13, 0xbb, 0xea, 0xbf, 0xab, 0x93, 0xf3, 0x56, 0xb5, 0x88, - 0x56, 0x3e, 0xb9, 0x7c, 0x11, 0xea, 0xaa, 0xe7, 0xc1, 0x1e, 0xdd, 0xb4, 0xac, 0x74, 0x0c, 0x20, - 0xc3, 0x88, 0x06, 0x20, 0x98, 0x20, 0xb8, 0xba, 0x6b, 0x57, 0x1a, 0x03, 0x1c, 0x0f, 0x84, 0x02, - 0x95, 0xac, 0x72, 0x36, 0x49, 0x02, 0x80, 0x1a, 0x4d, 0x32, 0x52, 0x12, 0x0a, 0xa8, 0xb8, 0xde, - 0x49, 0x8f, 0x00, 0x07, 0x9e, 0x07, 0x92, 0x00, 0x14, 0x1c, 0x67, 0xe1, 0x02, 0x17, 0xb4, 0x5e, - 0x65, 0x07, 0x7e, 0x59, 0xee, 0x9b, 0xbe, 0x09, 0xc4, 0xb6, 0x26, 0xc0, 0x57, 0x42, 0xf3, 0xcf, - 0x24, 0xa0, 0x0b, 0x86, 0x85, 0x32, 0x02, 0xdf, 0x05, 0x26, 0x93, 0x61, 0x39, 0x7c, 0x8b, 0xd6, - 0xd6, 0xfd, 0xe0, 0x85, 0x8b, 0x17, 0xf8, 0x44, 0x0a, 0x23, 0xa2, 0xe9, 0x8b, 0xa8, 0xac, 0x57, - 0x75, 0x52, 0x7f, 0x08, 0x01, 0x44, 0x48, 0xcb, 0x7f, 0x7a, 0x30, 0xea, 0x8e, 0xa3, 0x87, 0x4b, - 0xb1, 0x8f, 0x04, 0x61, 0x75, 0x5e, 0xcf, 0xab, 0xd7, 0x56, 0x23, 0x39, 0x89, 0x5a, 0x9c, 0x7b, - 0x17, 0xca, 0xdb, 0x6d, 0xb7, 0xeb, 0xa1, 0x0e, 0xf8, 0x23, 0xbd, 0xf5, 0x2f, 0x38, 0xa8, 0x2f, - 0x2f, 0xff, 0xa1, 0x71, 0x46, 0x75, 0x1d, 0xb8, 0x20, 0x10, 0x0a, 0x87, 0x0d, 0x29, 0xc7, 0x2d, - 0xf8, 0x2e, 0x29, 0xd9, 0xbd, 0xb5, 0x8e, 0xec, 0x37, 0x20, 0x01, 0x1f, 0x9e, 0x46, 0x40, 0x22, - 0xe7, 0xf3, 0xee, 0x39, 0x77, 0x59, 0x77, 0xad, 0x59, 0xf2, 0xfd, 0xfa, 0xd7, 0x08, 0x89, 0x08, - 0x45, 0x37, 0x17, 0x75, 0xad, 0x1d, 0x6b, 0xa0, 0xad, 0x70, 0x80, 0x14, 0x41, 0x38, 0x48, 0xff, - 0x38, 0x0e, 0x09, 0xf6, 0x71, 0x75, 0x08, 0x62, 0x98, 0xa5, 0xa6, 0x09, 0x73, 0x70, 0x84, 0x4c, - 0xe0, 0x3d, 0x39, 0x7a, 0x0d, 0xf7, 0x8a, 0x67, 0x02, 0xc3, 0xd4, 0xb0, 0x88, 0x44, 0x28, 0x4b, - 0xdc, 0x56, 0x20, 0x70, 0x56, 0x78, 0x39, 0x13, 0xc5, 0x3c, 0xf3, 0xf8, 0x73, 0xca, 0x65, 0x04, - 0xc3, 0x58, 0xae, 0xe2, 0x03, 0x05, 0x26, 0xa9, 0x13, 0x5d, 0x04, 0xc7, 0xd2, 0xf5, 0x6f, 0xab, - 0x02, 0x76, 0x75, 0x5c, 0x9d, 0x19, 0x91, 0x42, 0xd4, 0x3d, 0xe1, 0xd8, 0xfa, 0xe8, 0x9a, 0xf9, - 0xaf, 0x7a, 0xe8, 0x95, 0xf2, 0xd5, 0x7f, 0x56, 0x23, 0x20, 0x84, 0x48, 0x2a, 0xde, 0xe2, 0x6c, - 0x27, 0x59, 0xb5, 0xd9, 0xe1, 0xd7, 0x40, 0xc6, 0x22, 0xb0, 0xbb, 0x14, 0x00, 0x9d, 0x4a, 0x1e, - 0x6f, 0xda, 0xaa, 0xb6, 0x4a, 0x25, 0x84, 0xb7, 0x2d, 0xc4, 0x8c, 0x0d, 0xcb, 0x1d, 0x70, 0x88, - 0x44, 0x64, 0x5d, 0x32, 0xfe, 0x6f, 0x2c, 0xe2, 0x9a, 0x83, 0xb7, 0x4e, 0x7c, 0x4a, 0x09, 0xf5, - 0x70, 0xa0, 0x52, 0xdc, 0xdc, 0x48, 0x58, 0x38, 0xf3, 0x83, 0xe6, 0x0e, 0x97, 0x89, 0x2c, 0x33, - 0xd6, 0x5b, 0x3f, 0xef, 0x89, 0x12, 0x20, 0xfc, 0xbe, 0x4e, 0xf1, 0x96, 0x30, 0xb6, 0x12, 0x11, - 0xe7, 0x3f, 0xfb, 0x7b, 0x7c, 0x48, 0x30, 0x1c, 0x20, 0x51, 0xe2, 0xb1, 0x59, 0x23, 0x45, 0x5d, - 0xf2, 0x31, 0x43, 0xc4, 0xb0, 0xb3, 0xaa, 0xf1, 0x01, 0x0b, 0xe8, 0x2e, 0xdf, 0x5a, 0xfa, 0x2b, - 0xcb, 0xd1, 0x9a, 0xba, 0xb7, 0xd5, 0xaf, 0x13, 0xf4, 0x56, 0xf8, 0x81, 0xfa, 0x49, 0x69, 0x24, - 0xba, 0x0b, 0x74, 0xd1, 0x1f, 0x90, 0x95, 0x3e, 0x54, 0x23, 0xa2, 0xe5, 0x15, 0x12, 0x18, 0x16, - 0x4d, 0xde, 0x8d, 0xb1, 0x1c, 0xe0, 0xa0, 0x28, 0x21, 0x5c, 0x57, 0x7f, 0x3f, 0x8d, 0x1e, 0x05, - 0x81, 0xd5, 0x27, 0xf4, 0x96, 0x67, 0x87, 0x9d, 0xe5, 0xe5, 0xe2, 0xf1, 0xc4, 0x03, 0x01, 0x92, - 0xc0, 0x31, 0x01, 0xe5, 0x80, 0x65, 0x9c, 0xe3, 0xd5, 0x37, 0x4b, 0x39, 0x17, 0x99, 0x88, 0xa9, - 0x8b, 0x87, 0xd7, 0x06, 0x01, 0x1b, 0xda, 0xe9, 0x53, 0xdc, 0x57, 0xc1, 0x40, 0x47, 0xb8, 0xae, - 0x4a, 0x3f, 0x41, 0x83, 0x54, 0xca, 0x2c, 0xae, 0xe0, 0xe0, 0x13, 0x1a, 0x95, 0x71, 0x79, 0xf7, - 0xc1, 0x50, 0xd1, 0x9a, 0xa3, 0x7f, 0xdc, 0x56, 0x5e, 0xfc, 0x97, 0x06, 0x7d, 0x4e, 0x5c, 0x40, - 0x44, 0x70, 0xc7, 0x72, 0xd8, 0xac, 0x56, 0x2b, 0x1f, 0x5e, 0xc6, 0xcc, 0xc0, 0x7b, 0x6b, 0xa7, - 0xd1, 0x33, 0x8f, 0x61, 0x13, 0x07, 0x98, 0x2f, 0xbe, 0x84, 0xb2, 0x6e, 0x08, 0x85, 0x34, 0xd5, - 0x72, 0xfb, 0xbc, 0xd9, 0x5c, 0xa2, 0x5d, 0xd5, 0x57, 0x35, 0x55, 0x54, 0x5f, 0x57, 0xae, 0x6e, - 0xef, 0xea, 0x44, 0xf9, 0x2a, 0xbb, 0xe0, 0x8a, 0xaf, 0x74, 0xcb, 0xd5, 0xd5, 0xc1, 0x15, 0x5e, - 0xb5, 0x15, 0x88, 0x31, 0x22, 0xaf, 0xc2, 0x20, 0x80, 0x48, 0xa7, 0xb5, 0xbb, 0xf0, 0x42, 0x10, - 0x19, 0x15, 0x8a, 0xdc, 0x56, 0x7c, 0xab, 0x5a, 0xd5, 0x6b, 0xc4, 0xc6, 0x45, 0x31, 0xca, 0x0a, - 0x71, 0x96, 0xdb, 0x15, 0x9b, 0xaa, 0x6c, 0x73, 0xf9, 0x7e, 0x11, 0x88, 0xcb, 0xee, 0x58, 0xc4, - 0xb8, 0xdd, 0x2c, 0x48, 0x90, 0xa1, 0x42, 0x8b, 0x7c, 0x81, 0xb9, 0x92, 0x75, 0xc2, 0xd5, 0xc8, - 0x1d, 0xa5, 0x3b, 0x15, 0xa7, 0x14, 0xce, 0x3d, 0x65, 0xfe, 0x10, 0x30, 0xad, 0xf8, 0xbe, 0xa3, - 0x95, 0x3f, 0x3e, 0x10, 0x12, 0x30, 0xce, 0xee, 0xe5, 0xb1, 0x03, 0xdc, 0xf7, 0xf1, 0x21, 0xc0, - 0xad, 0x08, 0x6d, 0x0b, 0xfc, 0x20, 0xc6, 0x89, 0xd6, 0xdb, 0xc7, 0xff, 0xc8, 0x36, 0xa9, 0x24, - 0xba, 0xd4, 0x5f, 0x58, 0xa7, 0xeb, 0x95, 0x62, 0x2b, 0xab, 0xd7, 0x5a, 0xfa, 0xe5, 0x8a, 0xce, - 0x47, 0x88, 0xf1, 0x17, 0xd6, 0x2e, 0x11, 0xad, 0x57, 0x31, 0xb5, 0x5f, 0x47, 0x79, 0xf1, 0x0b, - 0x5c, 0x48, 0x40, 0x58, 0x42, 0x68, 0x79, 0xa9, 0xc4, 0x02, 0x11, 0x97, 0x76, 0xee, 0x5f, 0x4f, - 0x51, 0x7c, 0x5d, 0x71, 0x01, 0x81, 0x85, 0x17, 0x17, 0x55, 0x14, 0xd4, 0xdc, 0xbe, 0x6c, 0x55, - 0x47, 0x06, 0x28, 0xe8, 0x8b, 0xf1, 0x22, 0x01, 0x59, 0x16, 0xaa, 0x8d, 0x5d, 0xd8, 0xc2, 0xe6, - 0xdc, 0x30, 0x11, 0xf0, 0x42, 0x28, 0x4a, 0xd5, 0xc5, 0xd6, 0xfc, 0x10, 0x04, 0x67, 0x31, 0x78, - 0xd7, 0xb3, 0x75, 0x53, 0xfe, 0xbc, 0x30, 0x30, 0x77, 0x44, 0xd6, 0x1c, 0xa1, 0xde, 0xdc, 0x91, - 0xa3, 0xbc, 0x67, 0x0b, 0x37, 0x8f, 0x88, 0xdf, 0x41, 0x71, 0xc6, 0xbe, 0x7f, 0x49, 0xb6, 0xff, - 0xea, 0x74, 0x93, 0x82, 0x3e, 0xab, 0xd5, 0xd6, 0x08, 0xa1, 0xf3, 0xc0, 0x4a, 0xaa, 0xab, 0xfe, - 0x30, 0x5a, 0x74, 0xe9, 0xd3, 0xa7, 0x4e, 0x9d, 0x3a, 0xc4, 0xa1, 0xdf, 0x9b, 0xa2, 0x26, 0x5e, - 0x8b, 0xd7, 0x88, 0x44, 0xd9, 0x27, 0x58, 0xbe, 0x89, 0x14, 0xbc, 0xc3, 0x89, 0xe4, 0xfc, 0x48, - 0x28, 0x1f, 0x5d, 0xdb, 0xd5, 0x55, 0x57, 0xc6, 0x44, 0xfc, 0x97, 0xaa, 0xea, 0xa2, 0x9a, 0x8a, - 0x62, 0x4a, 0x81, 0x79, 0x66, 0xbe, 0x26, 0xb2, 0xda, 0xaa, 0xd2, 0xc4, 0x02, 0x00, 0x81, 0xd5, - 0xfa, 0xa1, 0xac, 0xc3, 0x04, 0x81, 0x99, 0xe1, 0x81, 0x91, 0xae, 0x66, 0x4e, 0x6a, 0x4d, 0x29, - 0xae, 0xef, 0xc2, 0x10, 0x99, 0x65, 0x49, 0x9d, 0x54, 0x53, 0xf1, 0x83, 0x89, 0x52, 0xc6, 0x98, - 0xa3, 0x27, 0xce, 0x2b, 0x88, 0x58, 0x3c, 0x37, 0x5d, 0x06, 0x62, 0x93, 0xb3, 0x3d, 0xeb, 0xb3, - 0xad, 0x64, 0xe8, 0x8e, 0x4f, 0xd1, 0x7b, 0xe0, 0x8c, 0xda, 0xa9, 0x69, 0xba, 0x3c, 0x57, 0xd5, - 0xcb, 0xe5, 0xbb, 0xe3, 0xba, 0x8f, 0xbe, 0x28, 0x28, 0xb2, 0x7e, 0xab, 0x88, 0x08, 0x85, 0x2d, - 0xaa, 0xa4, 0xa2, 0xe5, 0xc8, 0x80, 0x35, 0x84, 0x61, 0xf0, 0xc8, 0x83, 0x54, 0xc2, 0x40, 0x3a, - 0x49, 0x66, 0x07, 0x88, 0x6a, 0x83, 0x64, 0x12, 0x07, 0x80, 0x3e, 0x29, 0xcc, 0xfb, 0xcb, 0x04, - 0x38, 0xd3, 0x9e, 0x24, 0x29, 0x53, 0xea, 0x12, 0x28, 0x93, 0x13, 0xbe, 0x31, 0xe5, 0xf3, 0x4b, - 0x03, 0xa1, 0xd6, 0xeb, 0x90, 0xdf, 0x8d, 0x3a, 0x69, 0xf7, 0x71, 0x5b, 0x9f, 0x17, 0xdd, 0xd6, - 0xdf, 0x0c, 0x84, 0x42, 0x90, 0x71, 0x17, 0x3c, 0x00, 0xe0, 0x31, 0x12, 0x87, 0x30, 0x4a, 0x58, - 0x06, 0x23, 0xc7, 0x0c, 0xd2, 0xa4, 0xc4, 0x08, 0x2c, 0x63, 0x5a, 0x30, 0xd4, 0xe1, 0x90, 0xf6, - 0x6b, 0xf0, 0xe8, 0x63, 0x2a, 0x88, 0xb3, 0x74, 0x4c, 0x13, 0x7e, 0x2e, 0x78, 0x73, 0x23, 0x1a, - 0x00, 0xa1, 0x73, 0x1a, 0xf0, 0x0c, 0x50, 0xf3, 0x71, 0x21, 0x80, 0x87, 0x97, 0x52, 0xc0, 0x19, - 0x80, 0x58, 0x6d, 0x59, 0x85, 0xe7, 0x8e, 0x19, 0x2f, 0x11, 0x27, 0x2b, 0x7f, 0xe6, 0x9c, 0x3e, - 0xdc, 0x22, 0x12, 0x13, 0x58, 0xbf, 0xad, 0x78, 0x81, 0x86, 0x25, 0x4e, 0x58, 0x67, 0x6a, 0x86, - 0xe3, 0x74, 0x65, 0x65, 0x3b, 0xbb, 0x6e, 0xf6, 0x78, 0x99, 0x61, 0x4a, 0x0d, 0x8a, 0xbe, 0x50, - 0x8b, 0xdf, 0xe0, 0x86, 0xfa, 0xc0, 0xd5, 0xc9, 0x55, 0x55, 0xf0, 0x5d, 0xd5, 0x55, 0xd5, 0xdc, - 0xbe, 0x4d, 0xee, 0xe2, 0x73, 0xf5, 0x72, 0xba, 0xea, 0xb8, 0x23, 0xbb, 0xbb, 0xa6, 0x44, 0xe1, - 0x22, 0xed, 0x35, 0xb4, 0xd3, 0xea, 0xf3, 0xf6, 0x67, 0xd7, 0xd1, 0x5e, 0xba, 0x2b, 0xd7, 0x44, - 0x7a, 0xeb, 0xd5, 0x12, 0x18, 0xe2, 0x44, 0x09, 0x1d, 0x24, 0xba, 0x8b, 0xae, 0x22, 0x14, 0x21, - 0xfe, 0x3d, 0x72, 0x18, 0xe6, 0x4f, 0x71, 0x91, 0xbd, 0xc6, 0x69, 0x25, 0x64, 0x9d, 0x85, 0x98, - 0xa6, 0x38, 0x10, 0x0a, 0x0a, 0x7d, 0x53, 0xba, 0xc7, 0x97, 0x10, 0x24, 0x21, 0x75, 0x05, 0x46, - 0xa8, 0x8c, 0xf7, 0x1e, 0xde, 0xa2, 0xf1, 0x1c, 0xc4, 0x42, 0x14, 0x35, 0x43, 0x76, 0xb2, 0xa9, - 0x25, 0xe1, 0x00, 0xc0, 0x8b, 0xd4, 0xe5, 0xa3, 0x22, 0xfc, 0x40, 0xc1, 0xaf, 0xf0, 0x52, 0x3e, - 0x4a, 0x3e, 0x29, 0x36, 0x8f, 0x62, 0x6d, 0x09, 0x1c, 0x68, 0x64, 0x39, 0x51, 0x75, 0x5e, 0x18, - 0x29, 0xd5, 0x55, 0x78, 0x82, 0x5b, 0x5a, 0xe2, 0x61, 0x31, 0x8f, 0xcd, 0xea, 0xdf, 0xca, 0x35, - 0x9c, 0x16, 0x5a, 0x99, 0x3a, 0x1a, 0xe5, 0xf5, 0x75, 0xc4, 0x09, 0x57, 0x89, 0xea, 0xe7, 0xc4, - 0x04, 0x74, 0x92, 0xd2, 0x49, 0x74, 0x10, 0xcb, 0xe5, 0x33, 0xea, 0x4c, 0x4a, 0xff, 0xe0, 0xb6, - 0xb5, 0xea, 0xbf, 0xfa, 0xf7, 0xd7, 0xbe, 0xbd, 0x27, 0x42, 0x7b, 0x1c, 0xa7, 0x20, 0xa3, 0xbe, - 0x25, 0x75, 0x27, 0x5d, 0x7d, 0x62, 0xf0, 0x81, 0x85, 0x71, 0x9c, 0xbc, 0x13, 0x99, 0xb5, 0x55, - 0xbd, 0x0f, 0xbe, 0x10, 0xaa, 0x99, 0x8e, 0x8f, 0x54, 0x78, 0x7c, 0x8f, 0xc2, 0x86, 0x22, 0x48, - 0xf1, 0xa6, 0x00, 0xf8, 0x1a, 0x74, 0xd8, 0x22, 0xa0, 0x37, 0xe1, 0x60, 0xc5, 0x82, 0xaa, 0xd9, - 0xe5, 0x99, 0xde, 0x94, 0x4c, 0x78, 0x81, 0x97, 0xf8, 0x0d, 0x4b, 0xc9, 0x43, 0xd7, 0x21, 0x9f, - 0x22, 0x41, 0x81, 0xc6, 0x66, 0x37, 0x3c, 0x64, 0x44, 0xc0, 0xfc, 0x6c, 0x20, 0xd3, 0x8c, 0xcf, - 0x66, 0xc3, 0xf1, 0x6c, 0x83, 0x9e, 0x25, 0xc0, 0x08, 0x87, 0x05, 0x4f, 0x39, 0x2f, 0x5e, 0x24, - 0x15, 0x9d, 0x8d, 0xe9, 0x82, 0xf4, 0x4f, 0x55, 0xd5, 0x5f, 0xee, 0x9b, 0xae, 0x15, 0x42, 0xc0, - 0x43, 0x4d, 0x40, 0x53, 0x1f, 0x5d, 0xba, 0x64, 0xa6, 0xdf, 0x84, 0x05, 0x91, 0x75, 0x97, 0x2f, - 0xe4, 0xa6, 0xf7, 0xe1, 0x82, 0x19, 0x21, 0x18, 0x47, 0xbb, 0x13, 0x08, 0x08, 0xe4, 0xbc, 0x9f, - 0x05, 0x4a, 0xcf, 0x8b, 0xba, 0x4d, 0x3e, 0x27, 0x27, 0x41, 0x54, 0xab, 0xd5, 0x88, 0x81, 0x68, - 0xb4, 0x6f, 0xea, 0xe8, 0x8e, 0xcc, 0xf7, 0xae, 0x8e, 0xe4, 0x4f, 0x57, 0x44, 0x43, 0x20, 0xc0, - 0x14, 0x0c, 0x7b, 0xb7, 0x71, 0x0e, 0x35, 0x03, 0x7c, 0x59, 0x0b, 0x97, 0xf3, 0x75, 0xcf, 0xc7, - 0x96, 0xcd, 0xdd, 0x2c, 0xc6, 0xd6, 0x7f, 0x14, 0x69, 0xe6, 0x0a, 0x90, 0xf0, 0xba, 0x2c, 0x27, - 0xf8, 0x80, 0x99, 0x27, 0xad, 0x2b, 0x7c, 0x48, 0xea, 0x55, 0x33, 0x4e, 0x72, 0xc4, 0x72, 0xaa, - 0xa9, 0x05, 0x30, 0x7a, 0xe3, 0x93, 0xe4, 0xda, 0x78, 0x91, 0x69, 0xaf, 0x75, 0xf8, 0xb8, 0xbf, - 0xe6, 0xf8, 0x91, 0x22, 0x4a, 0x7d, 0x76, 0xb7, 0x1e, 0x46, 0x38, 0x9f, 0xc5, 0x99, 0x56, 0xad, - 0x35, 0x5e, 0x20, 0xba, 0xd7, 0x10, 0x18, 0x1e, 0x48, 0xf2, 0x05, 0x81, 0xb3, 0xca, 0xcb, 0x92, - 0x7b, 0x16, 0x7f, 0x84, 0x07, 0x99, 0x25, 0x36, 0x79, 0x21, 0xab, 0xf8, 0x40, 0x11, 0x9c, 0x9e, - 0x42, 0x0a, 0xd4, 0x11, 0x62, 0x4e, 0x7b, 0xdb, 0x6d, 0x34, 0xff, 0xd7, 0x2a, 0xe5, 0xa4, 0x97, - 0x84, 0x20, 0x93, 0x93, 0x41, 0xc8, 0x78, 0x62, 0x40, 0xc3, 0x20, 0x40, 0x04, 0x62, 0x95, 0x62, - 0x48, 0xf7, 0x11, 0x1d, 0xbb, 0xbd, 0xe2, 0xbb, 0x8a, 0x37, 0x7f, 0x04, 0x27, 0x27, 0xd1, 0x7a, - 0xb8, 0x29, 0xcc, 0xc5, 0xdb, 0x22, 0x9b, 0xad, 0x57, 0xbe, 0x30, 0x55, 0xee, 0x2b, 0x88, 0x70, - 0x48, 0x3a, 0xa9, 0xb2, 0x3f, 0x7c, 0x0e, 0x59, 0xb4, 0x4e, 0xf1, 0xe1, 0x42, 0x82, 0x11, 0xbf, - 0x17, 0xcf, 0x4d, 0xe9, 0x04, 0xe1, 0xa1, 0x31, 0x5c, 0x50, 0x57, 0x15, 0xa5, 0x24, 0xd2, 0x02, - 0x39, 0xec, 0x40, 0xac, 0x42, 0x2a, 0x44, 0xa0, 0xdc, 0x0d, 0xd8, 0x92, 0x61, 0x8c, 0x90, 0x56, - 0x34, 0x98, 0x70, 0x88, 0x26, 0x17, 0x7d, 0xe3, 0x82, 0xca, 0xed, 0xd1, 0xa2, 0x03, 0xd5, 0x88, - 0x04, 0xc5, 0xcb, 0x8e, 0xde, 0xdb, 0x78, 0x81, 0x7a, 0xbd, 0x32, 0xe2, 0x53, 0x89, 0x10, 0x3a, - 0xf1, 0x72, 0x6a, 0x76, 0xcd, 0x0e, 0xdc, 0x4a, 0x5e, 0xa2, 0x44, 0x84, 0x88, 0xaa, 0xab, 0x5a, - 0xf8, 0xc9, 0x3d, 0xcc, 0x53, 0xbe, 0x4f, 0xdb, 0xf8, 0x8f, 0x10, 0x10, 0xf1, 0x05, 0x2e, 0x37, - 0x08, 0xc2, 0x3c, 0xa4, 0xab, 0xdf, 0x04, 0x7d, 0x24, 0xb2, 0xae, 0xfa, 0xab, 0xe8, 0x8f, 0x5c, - 0x25, 0x69, 0xaf, 0x69, 0xa3, 0xf0, 0x49, 0xd5, 0x5b, 0x81, 0x20, 0x40, 0x8e, 0xaa, 0x8d, 0x1a, - 0x35, 0xe0, 0xa0, 0x61, 0x15, 0x76, 0x61, 0x7e, 0xf7, 0x6d, 0xa6, 0x95, 0x70, 0xc8, 0x38, 0x19, - 0x55, 0xd4, 0x9a, 0x5a, 0x1c, 0x2a, 0x37, 0x15, 0x88, 0x78, 0x77, 0x6a, 0xfd, 0x2c, 0xfc, 0x14, - 0xce, 0x61, 0x5a, 0xf1, 0x82, 0x5f, 0x5a, 0xd2, 0x4a, 0xcb, 0xb8, 0x91, 0x06, 0x12, 0xba, 0xe1, - 0x19, 0x2e, 0xf7, 0xe2, 0x02, 0x86, 0x17, 0x17, 0x55, 0x32, 0x42, 0x79, 0x8d, 0x57, 0x37, 0x2c, - 0xd2, 0x17, 0xf7, 0x10, 0x24, 0x28, 0x29, 0x65, 0x36, 0xc8, 0x05, 0xfa, 0x0e, 0x86, 0xc7, 0xfc, - 0xb0, 0x8b, 0x83, 0x84, 0xb8, 0x5e, 0xe0, 0x39, 0x2b, 0xa0, 0x1d, 0x65, 0xe0, 0xe8, 0xe7, 0xcb, - 0xcb, 0x34, 0xbc, 0x4c, 0x29, 0xb0, 0x00, 0xaa, 0x2e, 0x1d, 0x0a, 0x90, 0x7e, 0x32, 0x4e, 0xb0, - 0xf1, 0xe7, 0x8e, 0xf0, 0xa3, 0x59, 0x50, 0x05, 0xfc, 0x58, 0x02, 0xf8, 0x58, 0x65, 0x98, 0x78, - 0xcb, 0xe1, 0xb3, 0x35, 0x62, 0x42, 0xbc, 0x4e, 0xe2, 0x04, 0x02, 0xb2, 0xa0, 0xa6, 0xd2, 0xa7, - 0x5e, 0x43, 0xc7, 0xc5, 0xb2, 0x3f, 0xa2, 0xa2, 0x33, 0x2a, 0x60, 0x9a, 0x53, 0x6c, 0xeb, 0x47, - 0x6e, 0x20, 0x48, 0xf1, 0xa9, 0xed, 0x69, 0xba, 0x97, 0xdf, 0x84, 0x4d, 0x5a, 0x25, 0xe2, 0x45, - 0x45, 0x77, 0x75, 0xda, 0xc4, 0x5d, 0x6c, 0xbb, 0xf1, 0x3f, 0x75, 0x5d, 0x42, 0x3e, 0x22, 0x0a, - 0x61, 0xd2, 0x57, 0x42, 0xfd, 0x4d, 0x01, 0xac, 0xcb, 0xcb, 0xde, 0xf1, 0xdb, 0x89, 0x85, 0x05, - 0x5d, 0x4e, 0x6b, 0x15, 0x94, 0x04, 0xb2, 0xaa, 0xaf, 0x00, 0x02, 0x45, 0x05, 0xfd, 0xe1, 0x05, - 0xef, 0x08, 0x14, 0x27, 0x88, 0x72, 0x6e, 0x1e, 0x08, 0x3e, 0x9c, 0xf7, 0xbe, 0xd5, 0x6e, 0xd1, - 0xb7, 0xfc, 0x11, 0x93, 0x49, 0xda, 0x23, 0x8b, 0x0a, 0xaa, 0xee, 0xff, 0x90, 0x95, 0x7f, 0x89, - 0xbd, 0xee, 0xf9, 0x39, 0xba, 0xaf, 0xb2, 0xaa, 0xeb, 0x82, 0x2d, 0x5e, 0xe9, 0xc3, 0x0a, 0x00, - 0xc2, 0x3f, 0x53, 0xef, 0xff, 0xff, 0xdb, 0x6c, 0x88, 0x70, 0x78, 0x14, 0x04, 0x82, 0x21, 0x92, - 0xd2, 0x87, 0xae, 0x0e, 0x41, 0x87, 0x08, 0x02, 0x10, 0x55, 0x7d, 0x9d, 0x69, 0xde, 0xfb, 0x3c, - 0x48, 0x2b, 0x8a, 0x0c, 0x56, 0x28, 0xdc, 0x56, 0xed, 0x1b, 0x1f, 0x95, 0x84, 0xf5, 0x08, 0xf8, - 0x21, 0x12, 0x08, 0x8e, 0xef, 0xcb, 0x88, 0x8c, 0x30, 0xbd, 0x6a, 0x65, 0x0b, 0x3a, 0xaa, 0xd3, - 0xf1, 0x20, 0xb4, 0x8e, 0x6b, 0x72, 0xc7, 0x77, 0x4d, 0xf8, 0x98, 0xc9, 0x21, 0x52, 0xe9, 0xb8, - 0x5b, 0xdb, 0x8d, 0xa8, 0x55, 0xa9, 0xf9, 0xde, 0xfc, 0x48, 0x81, 0x05, 0x5b, 0x98, 0xcd, 0x95, - 0xe2, 0x2b, 0xa2, 0xbf, 0x86, 0x44, 0xd5, 0x6e, 0xef, 0xf1, 0x1f, 0x31, 0x77, 0x49, 0x60, 0x80, - 0x71, 0xb3, 0x75, 0x77, 0xe9, 0x3b, 0xe2, 0x02, 0x02, 0xfa, 0xae, 0xab, 0x0d, 0x10, 0xe0, 0x24, - 0x77, 0xcf, 0xf9, 0xdb, 0x6f, 0xff, 0xda, 0xd8, 0xf8, 0x29, 0x30, 0xb8, 0xa6, 0xa2, 0xe2, 0x78, - 0x3c, 0x90, 0x5e, 0x7f, 0x15, 0x7e, 0xf8, 0x28, 0x14, 0x23, 0x84, 0xe4, 0xc2, 0xfa, 0x4b, 0x61, - 0x84, 0x60, 0x8c, 0x6d, 0x30, 0xb2, 0x85, 0xb9, 0x5d, 0x18, 0xc2, 0xf9, 0x08, 0x95, 0x3f, 0x82, - 0xd3, 0xdb, 0x9e, 0x3b, 0x63, 0xd9, 0xb1, 0xf0, 0x43, 0x43, 0x26, 0x73, 0x63, 0xe0, 0x88, 0x86, - 0x96, 0xcb, 0x0f, 0x82, 0x3c, 0xbb, 0xea, 0x16, 0xe0, 0x9c, 0x26, 0xef, 0xaa, 0xaa, 0x8e, 0xdc, - 0x0a, 0x01, 0x12, 0x0e, 0xc9, 0xfc, 0x48, 0x2e, 0xbd, 0xf1, 0x75, 0x5e, 0xa8, 0x98, 0xa8, 0xba, - 0xae, 0x5f, 0x15, 0xf0, 0x88, 0xc2, 0x67, 0xe7, 0xa3, 0xf7, 0xda, 0x74, 0x6f, 0x7f, 0x08, 0x89, - 0x39, 0xf2, 0xc7, 0x3b, 0x0f, 0xe2, 0x25, 0xbb, 0xd8, 0x3c, 0x20, 0x11, 0x04, 0x55, 0x5d, 0xf8, - 0x46, 0x3a, 0xb2, 0x77, 0x74, 0xc7, 0xff, 0x36, 0xd3, 0xf8, 0x82, 0x34, 0xfb, 0xbf, 0xc4, 0x9a, - 0xab, 0x5c, 0x20, 0x24, 0xa5, 0x27, 0x7f, 0x84, 0x22, 0x4e, 0x59, 0x7a, 0xaa, 0xe2, 0x04, 0x02, - 0x42, 0xaa, 0xaa, 0xa3, 0xbe, 0x0a, 0x3c, 0x21, 0xf1, 0x03, 0x33, 0x7b, 0xbf, 0x89, 0x08, 0x02, - 0x11, 0x2e, 0xee, 0xef, 0xc4, 0x09, 0x05, 0x44, 0x7d, 0xf7, 0x77, 0x1b, 0x42, 0x2f, 0x6a, 0xf5, - 0xe2, 0x02, 0x04, 0x7d, 0x6d, 0x7d, 0x49, 0x9e, 0x04, 0x80, 0x60, 0x08, 0x8f, 0x25, 0x24, 0xce, - 0xc3, 0x2a, 0x00, 0xc8, 0x34, 0xcd, 0x05, 0x7d, 0x04, 0xde, 0xde, 0xdf, 0x4d, 0x39, 0x75, 0x38, - 0xed, 0x85, 0x51, 0x40, 0x6b, 0x94, 0x55, 0x54, 0xc9, 0xb6, 0x93, 0xed, 0xb7, 0xd2, 0x4d, 0xac, - 0x33, 0x14, 0x45, 0x57, 0x37, 0xb6, 0x7c, 0xbc, 0x4c, 0x15, 0x8c, 0xd5, 0x62, 0xe2, 0xf5, 0x4e, - 0x2e, 0xbe, 0xe1, 0x18, 0x26, 0x2a, 0x6f, 0xe5, 0xcf, 0x5f, 0x0c, 0xdb, 0x89, 0x15, 0x51, 0xd5, - 0x7f, 0xc1, 0x11, 0xb4, 0x9e, 0x2f, 0xab, 0x95, 0xc5, 0x97, 0x97, 0x34, 0x9f, 0xd6, 0x0f, 0xae, - 0x5f, 0x53, 0xa5, 0xf0, 0x46, 0x5d, 0x55, 0x32, 0xf5, 0x4c, 0xbc, 0x13, 0x5d, 0xfb, 0xdb, 0x4c, - 0xbc, 0x12, 0x6a, 0xf7, 0x3e, 0x09, 0x35, 0xbb, 0x9f, 0x5d, 0x7d, 0x4c, 0x97, 0xd6, 0xc7, 0xd6, - 0x2f, 0xab, 0xc9, 0x06, 0x15, 0x83, 0x82, 0x10, 0xc0, 0x2e, 0xac, 0x9d, 0xba, 0xd7, 0x5e, 0x20, - 0x24, 0x5c, 0x65, 0x66, 0xeb, 0xc4, 0x04, 0x44, 0xd5, 0x7c, 0x99, 0x86, 0x9c, 0x27, 0x51, 0x28, - 0x74, 0xff, 0xff, 0xd7, 0x86, 0x07, 0x8a, 0x6d, 0x3d, 0xdc, 0xbe, 0xdd, 0xfc, 0x44, 0x20, 0x2c, - 0x57, 0x77, 0x12, 0xa8, 0xdd, 0xf9, 0x69, 0x84, 0x44, 0x88, 0x23, 0xde, 0xd2, 0xf8, 0x90, 0x80, - 0xf2, 0x88, 0xe0, 0xc2, 0xf9, 0x5d, 0x45, 0xd4, 0x49, 0xf8, 0x81, 0x2c, 0xce, 0xff, 0x12, 0x20, - 0xab, 0x32, 0x8a, 0xa4, 0x9f, 0xc4, 0x5b, 0xaa, 0x9b, 0xff, 0x08, 0xf8, 0x90, 0x8a, 0xf7, 0x08, - 0xc1, 0x18, 0x9a, 0x95, 0x4c, 0xdf, 0x88, 0x11, 0xf0, 0x98, 0xa3, 0x91, 0x6b, 0x77, 0xf0, 0x84, - 0xc2, 0x73, 0xfe, 0x11, 0x08, 0x84, 0xef, 0x7b, 0xbb, 0x97, 0xf1, 0x24, 0x14, 0xfb, 0x6b, 0x88, - 0x08, 0x88, 0x2b, 0x59, 0x20, 0xa2, 0x7e, 0xaf, 0x04, 0x22, 0x01, 0x19, 0x69, 0x5b, 0xec, 0x33, - 0x28, 0x03, 0x77, 0x8f, 0x09, 0x0a, 0x8f, 0xff, 0xa7, 0x15, 0x61, 0xb5, 0x8e, 0x11, 0x02, 0x80, - 0x52, 0x9e, 0xb2, 0xe2, 0xd4, 0xb5, 0x17, 0x4b, 0x69, 0xbc, 0x30, 0x0a, 0x65, 0xc4, 0xaa, 0x51, - 0xf6, 0x44, 0xed, 0x7e, 0x36, 0x23, 0x8f, 0x17, 0x71, 0x01, 0x06, 0x22, 0x93, 0xbe, 0x26, 0x0a, - 0x85, 0x4b, 0xb7, 0x51, 0x72, 0x90, 0xf4, 0xaf, 0x07, 0xc2, 0xc5, 0x5d, 0xde, 0x15, 0x15, 0xc1, - 0x5a, 0x94, 0x2f, 0xef, 0xd7, 0x05, 0x65, 0x9a, 0x9d, 0x24, 0xa9, 0x6e, 0xc7, 0xcd, 0x55, 0x5b, - 0xea, 0x60, 0x46, 0xf4, 0x5c, 0xab, 0xb2, 0xdb, 0xb7, 0xe5, 0xba, 0x4b, 0xf0, 0x47, 0xcb, 0x68, - 0xe2, 0xf9, 0xa9, 0xc9, 0xfe, 0xb1, 0x56, 0x20, 0x28, 0x65, 0x54, 0x94, 0xd0, 0x44, 0xc4, 0xaa, - 0x7c, 0xf3, 0x5b, 0x32, 0xf5, 0xeb, 0x6e, 0xa5, 0x9c, 0x22, 0x08, 0x02, 0x37, 0x7f, 0x0b, 0x7c, - 0xfe, 0x9d, 0x2f, 0x13, 0x77, 0x15, 0x8a, 0xdf, 0x5f, 0x7b, 0xbf, 0x08, 0x03, 0x00, 0x96, 0xb5, - 0xdd, 0xf1, 0x31, 0x86, 0x73, 0xf7, 0xd5, 0xec, 0x6f, 0x7d, 0x8d, 0xfc, 0x14, 0x0c, 0x3b, 0xbe, - 0xf7, 0x70, 0xad, 0x58, 0xd8, 0xb1, 0x5f, 0xc4, 0x46, 0x5d, 0xb7, 0x8b, 0x8e, 0x7b, 0x8a, 0xde, - 0x3b, 0x41, 0xb4, 0x9f, 0x36, 0x61, 0x11, 0x21, 0x4f, 0x12, 0xe2, 0x8a, 0x65, 0x99, 0x30, 0xee, - 0x3f, 0x58, 0xba, 0xaf, 0x78, 0x9f, 0x12, 0x5b, 0xbb, 0x4d, 0x70, 0x80, 0xbd, 0x45, 0xc5, 0xd5, - 0x7f, 0x5e, 0xe1, 0x10, 0x87, 0x0c, 0x08, 0xe2, 0x44, 0x92, 0x9b, 0xa7, 0xc4, 0x84, 0x78, 0x80, - 0x40, 0x6d, 0xd7, 0x0d, 0x4a, 0x00, 0x62, 0xb7, 0xf4, 0x9f, 0x6e, 0xff, 0xff, 0xbc, 0x4b, 0xeb, - 0xe0, 0x9c, 0x55, 0x56, 0xaa, 0xbe, 0xe2, 0x02, 0x25, 0x16, 0x9d, 0x53, 0x85, 0x14, 0x20, 0x58, - 0xaa, 0xff, 0x6d, 0xbf, 0x4d, 0x3b, 0x3c, 0x10, 0x01, 0x07, 0x0d, 0x28, 0x40, 0xc0, 0x87, 0xfb, - 0x7f, 0xfd, 0x7c, 0x75, 0x5a, 0x2e, 0xcd, 0x59, 0x24, 0xd5, 0x57, 0xc4, 0x72, 0x62, 0xae, 0xf8, - 0x80, 0x80, 0xa2, 0x2b, 0x7b, 0xdb, 0xe1, 0x98, 0x2e, 0x36, 0xb4, 0xa6, 0xc9, 0x30, 0x49, 0x03, - 0x89, 0x82, 0x33, 0xb1, 0xcf, 0x2c, 0x5c, 0xf8, 0x27, 0xad, 0x2b, 0x56, 0xb6, 0xfa, 0xb9, 0x37, - 0x29, 0x6b, 0x4f, 0xc5, 0xd7, 0x4d, 0x2a, 0x77, 0xcc, 0x64, 0x92, 0xfc, 0xd4, 0x92, 0xcf, 0xcb, - 0x97, 0x32, 0x75, 0x97, 0xd5, 0xb8, 0x20, 0x85, 0x22, 0xb7, 0xf9, 0xb9, 0x79, 0xf8, 0xaf, 0x8b, - 0xa1, 0x28, 0xd1, 0xff, 0x14, 0x57, 0x93, 0x9b, 0x8a, 0xfa, 0xc2, 0xce, 0x04, 0x55, 0x4e, 0xf3, - 0xdb, 0xff, 0xf8, 0x62, 0x11, 0xd2, 0x6b, 0x55, 0xf1, 0xdf, 0x45, 0x60, 0x4a, 0xd7, 0x1e, 0xc4, - 0x04, 0x02, 0x86, 0x7b, 0xcf, 0x43, 0xd2, 0xee, 0xe2, 0xb7, 0x9b, 0xd5, 0xfc, 0x22, 0x0a, 0xe5, - 0xb1, 0x5b, 0xbc, 0xc9, 0x04, 0xde, 0xdf, 0xbc, 0x20, 0x13, 0x2f, 0x77, 0x5a, 0x5c, 0x48, 0x63, - 0xc1, 0x00, 0x8a, 0xae, 0xa2, 0xe5, 0xcf, 0x12, 0x24, 0x79, 0x49, 0x93, 0x4d, 0x55, 0xed, 0x34, - 0x6f, 0x38, 0x91, 0x0c, 0x82, 0xe2, 0xff, 0x8c, 0x3d, 0xd8, 0xdd, 0x57, 0x5a, 0xdd, 0xfc, 0x4c, - 0x4f, 0x77, 0x77, 0xbe, 0x11, 0xfd, 0x88, 0x77, 0xba, 0xe5, 0x3b, 0xbb, 0xf1, 0x11, 0x06, 0xbb, - 0xbb, 0xee, 0xc7, 0x88, 0x82, 0xeb, 0xda, 0xad, 0x49, 0x8d, 0xc4, 0x42, 0x82, 0x56, 0xb5, 0x52, - 0xdc, 0xd4, 0x46, 0x1e, 0xb5, 0xe3, 0xf8, 0x42, 0x10, 0xe9, 0xba, 0xec, 0xaa, 0xab, 0xc4, 0x8e, - 0xb4, 0xf7, 0x9f, 0x2a, 0xd1, 0xe0, 0x68, 0x70, 0xca, 0x80, 0x48, 0xf4, 0xf0, 0xff, 0x3d, 0xdb, - 0x48, 0xbb, 0xa3, 0x73, 0xe0, 0xed, 0xd3, 0xd0, 0x74, 0xd1, 0x8d, 0x2f, 0x71, 0x1e, 0x20, 0x32, - 0x6b, 0xbf, 0xc2, 0x04, 0xbb, 0xdf, 0x08, 0xca, 0x6b, 0x1b, 0xf0, 0x8c, 0x16, 0x18, 0xda, 0xda, - 0x66, 0xe9, 0xee, 0x9e, 0x21, 0xc7, 0x32, 0x7c, 0x49, 0xee, 0xa9, 0xae, 0xa4, 0xe5, 0xd2, 0xa7, - 0xe0, 0x8a, 0xd5, 0xab, 0x57, 0x11, 0xe7, 0xd9, 0xb7, 0x5c, 0x44, 0x98, 0x96, 0x92, 0x58, 0xae, - 0x1e, 0xa7, 0x6b, 0x49, 0x5a, 0x54, 0xdd, 0x4a, 0x2e, 0x7e, 0x6f, 0xfe, 0x13, 0xd2, 0x5b, 0xb7, - 0x6f, 0xc8, 0x55, 0xb4, 0xd7, 0x97, 0xa4, 0x97, 0x82, 0xd3, 0x27, 0x4d, 0x2b, 0x6b, 0xb9, 0xf0, - 0x41, 0x83, 0x50, 0x94, 0xfa, 0x70, 0x1c, 0xb6, 0x3c, 0xa1, 0xd3, 0x25, 0x1d, 0x0b, 0x0e, 0xf3, - 0x80, 0x0f, 0x8c, 0x20, 0x9c, 0x0a, 0x21, 0x81, 0x49, 0x83, 0x36, 0x0e, 0x29, 0x44, 0xeb, 0x34, - 0xdf, 0x84, 0x40, 0xa0, 0x4d, 0x5a, 0x5e, 0x0a, 0x0a, 0x77, 0xdf, 0x88, 0x04, 0x7a, 0x57, 0xac, - 0x76, 0x14, 0xf7, 0x61, 0x6c, 0x10, 0x9d, 0x2c, 0xa7, 0xfe, 0x9f, 0xf1, 0x10, 0xa1, 0x1c, 0xfd, - 0xcb, 0x6e, 0x18, 0x01, 0x48, 0x72, 0xd9, 0xf2, 0xf7, 0x7a, 0x6f, 0xc4, 0x08, 0x05, 0x82, 0x37, - 0x77, 0xbc, 0xd9, 0x52, 0xfb, 0xe0, 0xac, 0x6e, 0x37, 0xdd, 0x65, 0x6b, 0xe1, 0x7a, 0xcc, 0xfd, - 0xc2, 0x31, 0xf6, 0xed, 0xdf, 0x57, 0xbf, 0xd5, 0xbc, 0x4d, 0x73, 0x6f, 0x4f, 0x89, 0xac, 0x4d, - 0x62, 0x42, 0x26, 0x8a, 0xde, 0xee, 0x2b, 0x6e, 0xa2, 0xe2, 0xf8, 0x89, 0xba, 0x49, 0x78, 0x82, - 0xb5, 0xa5, 0x5a, 0xf9, 0x8a, 0xaa, 0xa6, 0xfc, 0x20, 0x0b, 0x32, 0x77, 0xf1, 0xc5, 0xcd, 0x8d, - 0x2a, 0xb7, 0x08, 0x06, 0x04, 0x59, 0x02, 0x7e, 0x9a, 0xa7, 0x88, 0x85, 0x2d, 0x8b, 0xdd, 0x66, - 0x94, 0x92, 0x9b, 0x35, 0x5f, 0x71, 0x31, 0xda, 0x56, 0x9a, 0x96, 0xeb, 0x44, 0xd2, 0xe4, 0xbb, - 0xea, 0x20, 0x20, 0x08, 0x85, 0x1e, 0x1e, 0x94, 0xe1, 0x98, 0x52, 0xa9, 0x91, 0x88, 0xdb, 0x4d, - 0xd3, 0x71, 0x76, 0x31, 0x0e, 0xa6, 0xe7, 0x7b, 0x7e, 0x7f, 0x8b, 0x2d, 0x0d, 0x24, 0x35, 0x5f, - 0xc7, 0x54, 0xf9, 0x69, 0xab, 0x5d, 0x36, 0xdf, 0x09, 0xd2, 0xd5, 0xad, 0x3f, 0x17, 0xe4, 0xd6, - 0x32, 0xb1, 0xfc, 0x13, 0xd2, 0x6e, 0xf7, 0x76, 0x8e, 0x11, 0xf0, 0x51, 0xcd, 0x9a, 0x6d, 0xf5, - 0x5c, 0x13, 0xe9, 0x52, 0xa7, 0x27, 0x15, 0x3d, 0xf0, 0x4f, 0x93, 0x16, 0x24, 0x9d, 0x29, 0x65, - 0x7e, 0x10, 0xa4, 0xa9, 0x74, 0x92, 0x97, 0x13, 0x88, 0x9c, 0x13, 0x56, 0x95, 0x29, 0x73, 0x8c, - 0xae, 0x09, 0xf5, 0x68, 0x9d, 0xbc, 0x98, 0x5c, 0x63, 0xe0, 0x96, 0x9e, 0xad, 0x27, 0x3e, 0xe5, - 0x27, 0x0e, 0x12, 0x06, 0x2c, 0x2e, 0x0a, 0xf0, 0xbd, 0x00, 0x0b, 0x82, 0xb6, 0x9e, 0x06, 0x58, - 0xfd, 0xf8, 0x20, 0x02, 0x40, 0xd9, 0x67, 0x8d, 0x2e, 0x4a, 0xd6, 0xc7, 0xe9, 0x3e, 0x92, 0xd5, - 0x75, 0x39, 0x51, 0xff, 0xfc, 0x61, 0xd3, 0x15, 0xac, 0x51, 0xbb, 0xd6, 0x4f, 0xad, 0x78, 0x90, - 0x9e, 0x7f, 0x79, 0xbf, 0xe0, 0xb3, 0x63, 0x7d, 0xee, 0xde, 0xf2, 0xc2, 0xce, 0x64, 0xbf, 0xaf, - 0xfe, 0x29, 0xc2, 0x32, 0xcf, 0x50, 0xb6, 0x33, 0x6f, 0xdd, 0x3f, 0xff, 0x08, 0x84, 0x8c, 0xc6, - 0x3e, 0xcb, 0xde, 0xf8, 0x81, 0x22, 0xe4, 0xcc, 0x90, 0xba, 0x49, 0x78, 0xa3, 0xc5, 0x7d, 0x53, - 0xe2, 0x61, 0x12, 0xbb, 0x6f, 0x27, 0xee, 0xef, 0xc4, 0xcc, 0x4e, 0x4f, 0x0d, 0x28, 0x0a, 0xae, - 0x93, 0xfd, 0xfd, 0x57, 0xb2, 0xaa, 0x74, 0xbc, 0x48, 0x92, 0xea, 0x56, 0x27, 0xdc, 0x7a, 0x92, - 0xef, 0xf1, 0x26, 0xad, 0x5f, 0x11, 0x66, 0x5a, 0xfc, 0x71, 0x5c, 0x56, 0xee, 0x2b, 0x3f, 0x3f, - 0xdd, 0xc5, 0x6f, 0x86, 0x04, 0x82, 0x99, 0xef, 0xdb, 0x17, 0x43, 0xab, 0xd5, 0xfe, 0xe1, 0x01, - 0x00, 0xa0, 0xad, 0x28, 0x5d, 0xc0, 0x7f, 0x2a, 0xd4, 0x2f, 0xdf, 0x08, 0xd5, 0x3d, 0x22, 0x62, - 0xeb, 0x4b, 0xe0, 0x8f, 0x5a, 0xb7, 0x10, 0x19, 0x0a, 0x66, 0xab, 0x56, 0x99, 0x2a, 0xd3, 0x88, - 0xc1, 0x15, 0xb7, 0x0c, 0x89, 0x26, 0xd5, 0x2c, 0x47, 0x88, 0x12, 0x3e, 0x5c, 0xd9, 0x29, 0x21, - 0xeb, 0x7f, 0x08, 0x97, 0xb6, 0xab, 0x08, 0x10, 0xae, 0xf7, 0xc4, 0x89, 0xf1, 0x04, 0x08, 0x0b, - 0xf4, 0xfc, 0x36, 0x27, 0x57, 0x39, 0x70, 0x55, 0x5e, 0xaf, 0xdf, 0x2e, 0x9d, 0xcb, 0xc1, 0x25, - 0x57, 0x6f, 0x8f, 0x2a, 0x7a, 0xbc, 0x4d, 0x26, 0x9d, 0x3a, 0xe4, 0xd2, 0x36, 0xfe, 0x3e, 0x96, - 0x9b, 0x6d, 0xf6, 0xef, 0xe5, 0xa4, 0x92, 0x49, 0x2e, 0x0a, 0x8d, 0x6e, 0xda, 0x4c, 0x73, 0x32, - 0xb1, 0x3f, 0x2f, 0x96, 0xf7, 0xfa, 0xcb, 0xe1, 0x29, 0x77, 0x4c, 0xf8, 0xd3, 0x4d, 0x3e, 0x09, - 0xea, 0xa2, 0xf6, 0xc5, 0xd4, 0x53, 0x45, 0xdc, 0x10, 0x01, 0x20, 0x14, 0x98, 0x50, 0xc5, 0x0c, - 0x2d, 0xf1, 0x79, 0x7c, 0xed, 0x1a, 0xb6, 0xc3, 0x38, 0xce, 0x20, 0x23, 0xf2, 0x89, 0xd5, 0x57, - 0x09, 0x44, 0xbe, 0x5b, 0x5c, 0xb9, 0xc4, 0x04, 0x4b, 0x6a, 0xab, 0xc4, 0x0a, 0xea, 0xb6, 0xda, - 0xe2, 0x04, 0x16, 0x5c, 0x71, 0x5b, 0x78, 0x40, 0x4f, 0xc2, 0x44, 0x20, 0x80, 0x97, 0xfb, 0xbe, - 0x20, 0x48, 0xbd, 0x4a, 0xc7, 0xaa, 0xf1, 0x22, 0x2b, 0xa6, 0xf7, 0x7e, 0x24, 0x61, 0x45, 0x19, - 0xf8, 0xae, 0xb3, 0xf9, 0xf8, 0xf2, 0x97, 0x9b, 0x89, 0xb0, 0x5e, 0x7d, 0x8c, 0x44, 0x25, 0x7b, - 0xf3, 0x7f, 0x13, 0x50, 0x84, 0x29, 0xaa, 0xa6, 0xa9, 0xdf, 0x77, 0xdd, 0xaa, 0xf8, 0x8c, 0x56, - 0x7c, 0xee, 0xdf, 0x0c, 0x41, 0x16, 0xea, 0x9f, 0x7c, 0x14, 0x5a, 0x6e, 0x86, 0xb5, 0xb7, 0xc1, - 0x29, 0xf8, 0x12, 0xa7, 0x2d, 0xfe, 0xe2, 0x04, 0x82, 0xea, 0x8b, 0xaa, 0xaa, 0xfd, 0xc3, 0x32, - 0xf3, 0x41, 0x71, 0x01, 0x91, 0x7a, 0xde, 0xd5, 0x7c, 0x15, 0x5a, 0xb6, 0xb4, 0x9a, 0xd2, 0xbb, - 0x7c, 0x49, 0x33, 0x68, 0xa3, 0x2f, 0x9e, 0x3f, 0x10, 0x7a, 0x54, 0x9a, 0x6a, 0xbe, 0x58, 0xbd, - 0x53, 0xc2, 0x22, 0x0d, 0xad, 0x70, 0x84, 0xb7, 0xbb, 0xe1, 0x01, 0x1c, 0x23, 0x05, 0x86, 0x1b, - 0x5e, 0x26, 0xf5, 0x57, 0xd3, 0x8b, 0x86, 0x44, 0x07, 0x84, 0x2e, 0xaa, 0x2b, 0x37, 0x6f, 0x1d, - 0x4f, 0x73, 0x32, 0x7d, 0x89, 0x3e, 0x6e, 0xbf, 0xe1, 0x33, 0xb7, 0xda, 0xa6, 0xa9, 0xf8, 0x24, - 0xcd, 0x9e, 0x1f, 0x04, 0x94, 0xdd, 0xf0, 0x7c, 0x13, 0x5a, 0xdf, 0x49, 0x28, 0x3e, 0xee, 0x9d, - 0x7c, 0x7c, 0xda, 0x7d, 0x6a, 0xad, 0xa4, 0xf2, 0x7f, 0x93, 0xb4, 0xd0, 0xce, 0x0c, 0x34, 0xdb, - 0xb6, 0x9c, 0x5f, 0xb1, 0x56, 0xdb, 0x7e, 0xa0, 0x80, 0x09, 0x01, 0x41, 0x49, 0xb6, 0x9b, 0x6a, - 0x31, 0x85, 0x91, 0x46, 0xe2, 0x83, 0x6d, 0x75, 0x63, 0x88, 0x08, 0xa3, 0xb9, 0x51, 0x11, 0x27, - 0x6b, 0x55, 0xaf, 0x11, 0x04, 0xbd, 0x56, 0x9a, 0xdb, 0x89, 0x10, 0x53, 0x5e, 0xf8, 0x90, 0x8f, - 0x08, 0x41, 0x10, 0x95, 0xaf, 0xb8, 0x89, 0xb4, 0xe9, 0xf8, 0x9f, 0x3e, 0x8a, 0xf7, 0xe2, 0x22, - 0x73, 0xe2, 0xc9, 0x99, 0xbb, 0xf8, 0xaa, 0x49, 0x24, 0xee, 0x2b, 0x77, 0xc2, 0x02, 0x06, 0x10, - 0x47, 0x3d, 0x34, 0x9c, 0x66, 0xab, 0xbb, 0x9f, 0xff, 0x84, 0x06, 0x13, 0x26, 0x37, 0x32, 0xcc, - 0xbd, 0x48, 0xd7, 0x7e, 0xf7, 0xf1, 0x99, 0xca, 0xd6, 0xaf, 0x7b, 0xdf, 0x88, 0x8e, 0x2a, 0xd7, - 0xbb, 0xbb, 0xf8, 0x62, 0x09, 0x6a, 0xbd, 0xe6, 0xed, 0xc2, 0x10, 0x4b, 0x3e, 0x3f, 0x35, 0xba, - 0xdb, 0xe1, 0x12, 0xaa, 0xb7, 0x24, 0xb9, 0x97, 0xfe, 0x0b, 0xa4, 0xc5, 0x3f, 0xcb, 0xfb, 0x71, - 0x10, 0x45, 0x37, 0x55, 0x5f, 0x71, 0x00, 0xc0, 0x27, 0x57, 0x17, 0xd5, 0x47, 0xa9, 0x0b, 0x4a, - 0x04, 0xdf, 0x43, 0x87, 0xcf, 0xff, 0xeb, 0x62, 0xc4, 0x7e, 0x30, 0xd5, 0xa7, 0x6e, 0x37, 0x72, - 0x9d, 0xa7, 0xed, 0xe2, 0x04, 0x8b, 0x97, 0x7b, 0x7a, 0x6e, 0xb8, 0xf1, 0x2b, 0x8b, 0xaa, 0xa8, - 0xbc, 0x5d, 0x57, 0x0c, 0x89, 0x09, 0x11, 0xd5, 0x59, 0x2d, 0x78, 0x98, 0x4b, 0xbb, 0xd5, 0x7c, - 0x48, 0x28, 0xda, 0x37, 0x2f, 0xaa, 0xad, 0x7c, 0xc4, 0x58, 0xba, 0xf0, 0x87, 0xc1, 0x11, 0xb7, - 0x37, 0xae, 0x24, 0x14, 0x02, 0x6a, 0xba, 0x52, 0xb2, 0x5d, 0x09, 0x17, 0x17, 0xf5, 0xf2, 0x95, - 0x24, 0xb7, 0xc2, 0x74, 0x36, 0x34, 0x33, 0x36, 0xb7, 0xf1, 0x7d, 0x52, 0xd2, 0x48, 0x57, 0x05, - 0xdb, 0x56, 0xad, 0xae, 0x2a, 0x83, 0x00, 0x50, 0x30, 0xc9, 0xb8, 0xb6, 0x28, 0xc5, 0x62, 0x41, - 0x60, 0x43, 0xd3, 0x82, 0x82, 0x62, 0x05, 0x88, 0x85, 0x8d, 0x3d, 0x60, 0x9f, 0x66, 0xf8, 0xf8, - 0xa8, 0xea, 0x33, 0xf1, 0x69, 0x97, 0xbd, 0xde, 0xef, 0x08, 0x90, 0x4a, 0x06, 0xd2, 0xaf, 0x98, - 0x8b, 0xaf, 0x84, 0x04, 0x5b, 0x78, 0xae, 0xfa, 0xd7, 0x84, 0x4a, 0x35, 0x22, 0xed, 0x54, 0x44, - 0x61, 0x73, 0xe5, 0x4a, 0xc1, 0x32, 0xde, 0xf5, 0x36, 0x1b, 0xb3, 0xf8, 0xe9, 0x6f, 0x55, 0x4d, - 0x2c, 0x9f, 0xc4, 0x08, 0x36, 0x4c, 0x5f, 0x0c, 0x4a, 0x45, 0xdf, 0x04, 0x1f, 0x08, 0x8b, 0x27, - 0x2d, 0x6a, 0x8d, 0x2c, 0x14, 0x08, 0xf0, 0xc0, 0xa3, 0xdd, 0xe7, 0xfa, 0xe1, 0x88, 0x52, 0xef, - 0xb6, 0xb5, 0x5a, 0xea, 0x66, 0x2b, 0x6e, 0x08, 0x20, 0x8b, 0x43, 0x5b, 0x71, 0x02, 0x01, 0x25, - 0x55, 0x55, 0xbe, 0x09, 0xa9, 0xef, 0xaa, 0xfb, 0xe0, 0x8e, 0xba, 0xfb, 0x82, 0x10, 0x70, 0x0a, - 0x8a, 0xe2, 0x7e, 0xdd, 0x56, 0x9d, 0x71, 0x7f, 0x61, 0x97, 0x00, 0x62, 0x54, 0xf2, 0x37, 0x5e, - 0xac, 0x53, 0x7f, 0x3c, 0x38, 0x4a, 0x85, 0x9a, 0x89, 0x7e, 0x43, 0x2a, 0xeb, 0x10, 0xef, 0xbf, - 0x9b, 0xaa, 0xe2, 0x43, 0x3c, 0x31, 0xf9, 0xb7, 0xbe, 0x22, 0x10, 0x22, 0xaf, 0xbb, 0x6d, 0xaa, - 0xaf, 0x0c, 0x71, 0x1f, 0x8a, 0x3c, 0x65, 0x09, 0xf3, 0xf7, 0x77, 0xc4, 0x88, 0x05, 0x42, 0x0b, - 0xc6, 0x90, 0x1a, 0x13, 0x1b, 0xa6, 0xfc, 0x2b, 0xc0, 0xf5, 0xf4, 0x78, 0xbe, 0x12, 0x99, 0x8b, - 0x7b, 0x76, 0xbd, 0xd2, 0x4b, 0xf7, 0x5a, 0x49, 0x2e, 0xef, 0x5a, 0xe0, 0x8a, 0xdb, 0x7e, 0x55, - 0xdd, 0x50, 0xd3, 0xfb, 0xb5, 0x97, 0x7c, 0x94, 0xf6, 0x89, 0xdd, 0x52, 0xd6, 0x20, 0xdd, 0x57, - 0x10, 0x20, 0x70, 0xa1, 0x59, 0x6c, 0x48, 0x3d, 0xff, 0xca, 0xc0, 0x97, 0xfd, 0xe2, 0x6b, 0x0c, - 0x94, 0xaf, 0x7f, 0x8e, 0x33, 0xbb, 0xbb, 0xb6, 0x7f, 0x58, 0xad, 0xdd, 0xf8, 0x64, 0x20, 0x2e, - 0xab, 0xd5, 0xdb, 0xb6, 0x87, 0xe0, 0x8c, 0xaa, 0x2e, 0xa2, 0xed, 0xc3, 0x22, 0x5f, 0x9a, 0x18, - 0x90, 0xc0, 0x40, 0xa9, 0xed, 0xd5, 0x75, 0x55, 0xc2, 0x01, 0x02, 0x54, 0x5d, 0x7e, 0x0a, 0x08, - 0x9e, 0xba, 0x8b, 0xb7, 0x84, 0x02, 0x65, 0xd5, 0x55, 0x54, 0x9f, 0x12, 0x10, 0x04, 0x44, 0xb6, - 0xbe, 0xc3, 0x24, 0x28, 0x05, 0x4c, 0xe0, 0xaf, 0x6f, 0x53, 0x43, 0xaa, 0xe5, 0x84, 0xb0, 0x6c, - 0x2c, 0xc8, 0x04, 0x27, 0xb4, 0x74, 0xf7, 0x57, 0xfd, 0xd7, 0xe0, 0x9e, 0x96, 0xaa, 0xbb, 0x71, - 0x22, 0x17, 0xdf, 0x05, 0xc5, 0x5a, 0xd7, 0x76, 0xe1, 0x0a, 0xb7, 0x06, 0x02, 0x41, 0x16, 0xab, - 0xf6, 0x15, 0xc0, 0x13, 0xa9, 0xf8, 0x24, 0x1e, 0xd5, 0xaf, 0xfe, 0xbe, 0x08, 0x44, 0x91, 0x62, - 0xf3, 0x7e, 0xa2, 0x04, 0x7c, 0xdd, 0xdd, 0x72, 0xde, 0x2b, 0xe1, 0x11, 0x0e, 0xee, 0xfc, 0x40, - 0x91, 0x5c, 0xcc, 0xb7, 0x36, 0x56, 0x39, 0x88, 0x09, 0x58, 0x95, 0x3b, 0xc1, 0xc3, 0x3b, 0xc5, - 0x7c, 0x30, 0x04, 0x82, 0x14, 0x57, 0x6b, 0x89, 0x08, 0x94, 0x42, 0xac, 0x99, 0x89, 0x12, 0x2a, - 0xdf, 0x2f, 0xa2, 0xbe, 0x08, 0x61, 0xe8, 0xb9, 0x79, 0xa0, 0xc9, 0x7d, 0xbb, 0x65, 0xef, 0xe5, - 0xef, 0xfb, 0x5e, 0x7a, 0xfc, 0xbc, 0xd6, 0xdb, 0x6f, 0xc4, 0x82, 0x12, 0xa5, 0x7b, 0xfc, 0x27, - 0x69, 0x56, 0xdd, 0x64, 0xe0, 0xa3, 0xcf, 0x8d, 0x9b, 0xf7, 0xfa, 0xb0, 0x5c, 0x14, 0x69, 0xc9, - 0xdf, 0xab, 0xfd, 0x72, 0xf9, 0x2d, 0xa5, 0xe0, 0x40, 0x10, 0x34, 0x50, 0xb9, 0x7a, 0xd9, 0x63, - 0x71, 0xda, 0x56, 0x9b, 0x69, 0xb7, 0x54, 0x2e, 0x6a, 0x63, 0x19, 0x64, 0xa4, 0xff, 0xf8, 0x80, - 0x56, 0x71, 0x74, 0x46, 0x62, 0x8d, 0x8c, 0xec, 0xbd, 0x87, 0xb2, 0x23, 0xd4, 0xef, 0x92, 0x5c, - 0x40, 0x90, 0x49, 0x6e, 0x7e, 0x2b, 0x7e, 0x10, 0x12, 0x5b, 0xc5, 0x62, 0xbc, 0x44, 0xc5, 0x27, - 0xa6, 0xf8, 0x88, 0x46, 0xf7, 0x7d, 0xde, 0xa8, 0x6b, 0x84, 0x61, 0x41, 0x0e, 0x2b, 0x77, 0x7b, - 0x87, 0x05, 0x21, 0xc5, 0x71, 0x0f, 0x14, 0x6b, 0xd0, 0x3d, 0x42, 0x7a, 0x09, 0xde, 0x26, 0x14, - 0xb7, 0xae, 0xb5, 0xcc, 0xbd, 0x6f, 0x15, 0xf7, 0x04, 0x00, 0xe4, 0x48, 0x94, 0xdf, 0xd5, 0xf8, - 0x29, 0x11, 0x27, 0xd7, 0xaa, 0xc2, 0xa8, 0xe0, 0x10, 0x52, 0x93, 0x03, 0xef, 0xb3, 0x47, 0x5a, - 0xfe, 0x13, 0xc0, 0x08, 0x8f, 0xcf, 0x89, 0x1b, 0x9f, 0x23, 0xb3, 0xd5, 0x7f, 0xd6, 0x14, 0xc0, - 0x0e, 0x89, 0x2f, 0x8f, 0x0a, 0x7f, 0x6d, 0x54, 0xb4, 0x75, 0xf9, 0x69, 0xfc, 0x20, 0x0e, 0x44, - 0x55, 0x56, 0xb7, 0xc2, 0xd8, 0x21, 0x70, 0x43, 0xfe, 0xa3, 0xd6, 0x1a, 0x37, 0x64, 0xea, 0x78, - 0x4d, 0x07, 0x9c, 0x45, 0x13, 0xbc, 0x48, 0x24, 0xad, 0x6f, 0xc2, 0x11, 0xd4, 0xf4, 0xd5, 0x58, - 0xeb, 0x5e, 0x08, 0x20, 0x90, 0xab, 0x5b, 0x7c, 0x16, 0x6b, 0x53, 0x30, 0x6e, 0x66, 0x1d, 0xd3, - 0xc7, 0xef, 0x13, 0xc3, 0x30, 0x51, 0x51, 0x75, 0x13, 0x62, 0xb5, 0xf7, 0x83, 0x91, 0x15, 0xad, - 0x3a, 0xf0, 0x80, 0x40, 0x15, 0x12, 0xb5, 0x5d, 0x53, 0x37, 0xfb, 0x88, 0x84, 0xea, 0xaa, 0xbb, - 0x9f, 0xf8, 0x52, 0xaa, 0xba, 0xdb, 0x5e, 0xe9, 0xcb, 0xdd, 0xfe, 0x62, 0x55, 0xcb, 0x9e, 0x53, - 0x6e, 0xef, 0x13, 0xf0, 0x91, 0xda, 0xae, 0xb5, 0xe0, 0x50, 0x29, 0x16, 0x2f, 0xc4, 0x41, 0x41, - 0xdf, 0x7a, 0xd5, 0xb0, 0xcc, 0xe0, 0x4a, 0x2a, 0x56, 0xdf, 0xa7, 0xff, 0xef, 0x82, 0x41, 0x18, - 0xbd, 0xb8, 0x91, 0x3e, 0x24, 0x15, 0x12, 0x18, 0xfd, 0xaf, 0x15, 0x8e, 0xe2, 0xe1, 0x1f, 0x29, - 0xcb, 0xe6, 0x17, 0x4d, 0xdd, 0x72, 0x12, 0xd9, 0xfe, 0xb9, 0x7b, 0xb1, 0xa8, 0x00, 0x00, 0x00, - 0x01, 0x41, 0x9a, 0x56, 0x2b, 0x30, 0xe8, 0x2f, 0xd0, 0xfe, 0xb1, 0xb2, 0x87, 0xc3, 0xc9, 0x17, - 0x04, 0x21, 0x4a, 0xd6, 0x2e, 0xa2, 0xeb, 0xaa, 0xaa, 0xaa, 0xc5, 0x3f, 0x57, 0x23, 0xfa, 0xf4, - 0x5f, 0x46, 0x69, 0xba, 0xbc, 0xfd, 0x7a, 0xba, 0xf4, 0x9d, 0x7b, 0x81, 0x24, 0x20, 0xbd, 0x87, - 0x08, 0x38, 0x00, 0x6c, 0x38, 0x4f, 0x85, 0xb8, 0x64, 0xdf, 0x7f, 0x8d, 0xf3, 0xa8, 0x78, 0x38, - 0x3a, 0x0b, 0x83, 0x7a, 0xeb, 0x7c, 0x38, 0x6f, 0x10, 0x9a, 0x11, 0x4b, 0x06, 0xee, 0x29, 0xfb, - 0x07, 0x7e, 0x0e, 0xdd, 0xf4, 0x15, 0xea, 0xeb, 0xd7, 0xcb, 0x55, 0x55, 0x2f, 0x44, 0xef, 0xaf, - 0x7d, 0x7a, 0x6e, 0xbd, 0x0f, 0xe2, 0x78, 0x12, 0x42, 0x08, 0x9d, 0xc1, 0x48, 0x31, 0x0a, 0x04, - 0x01, 0x88, 0x94, 0xb0, 0xca, 0xa5, 0x42, 0x5d, 0x0a, 0xa0, 0x94, 0x98, 0x0d, 0x0f, 0x00, 0xf3, - 0x80, 0x3c, 0x75, 0x72, 0x53, 0x50, 0x3a, 0xb9, 0x44, 0x2a, 0x14, 0x95, 0x22, 0x28, 0x1d, 0x42, - 0xd8, 0xf4, 0x45, 0xf0, 0x52, 0x0c, 0x4b, 0x27, 0xb9, 0x83, 0xe9, 0x43, 0x64, 0x09, 0x87, 0x54, - 0x87, 0xff, 0xdf, 0xe9, 0xbf, 0xdb, 0x8c, 0xc1, 0xd5, 0xc6, 0x29, 0x8e, 0xe9, 0x13, 0xea, 0xd2, - 0xf5, 0xe8, 0xbe, 0x0a, 0x2e, 0xfb, 0xbe, 0x99, 0x7a, 0xa6, 0x4b, 0xab, 0xdf, 0x5e, 0xbe, 0xbb, - 0x21, 0x0e, 0x8e, 0xce, 0x08, 0x42, 0x1e, 0x08, 0x42, 0x81, 0x85, 0x15, 0x49, 0x42, 0x72, 0x82, - 0x2a, 0x2d, 0x32, 0x87, 0xb0, 0xa2, 0x01, 0x21, 0xcf, 0x11, 0xee, 0xe2, 0x0f, 0xdc, 0x00, 0x07, - 0x07, 0x78, 0xb2, 0x20, 0x00, 0x4a, 0xc2, 0x62, 0xf8, 0x5d, 0xd4, 0x26, 0x2d, 0x90, 0x10, 0xc1, - 0x90, 0xf6, 0xc0, 0xec, 0x19, 0x06, 0x43, 0xfb, 0xc4, 0xa0, 0x99, 0xda, 0xc3, 0xc8, 0xc0, 0x22, - 0xff, 0x01, 0xf6, 0xc6, 0xff, 0xff, 0x81, 0x6b, 0x69, 0xa5, 0xe3, 0x9d, 0xf8, 0x90, 0x2c, 0x85, - 0x07, 0x72, 0xf7, 0x2c, 0x06, 0x2f, 0xe4, 0xe0, 0x57, 0x27, 0xd7, 0xcc, 0x3e, 0xd4, 0xee, 0x6f, - 0xf7, 0xf0, 0x88, 0x53, 0x9c, 0xe0, 0x87, 0x0b, 0x60, 0x71, 0xc2, 0x55, 0x4a, 0x3c, 0x05, 0x82, - 0x80, 0xce, 0x16, 0x05, 0x19, 0x6f, 0x49, 0xdc, 0x88, 0xeb, 0x12, 0x02, 0x44, 0x29, 0xcd, 0x85, - 0xc1, 0xd1, 0x7c, 0x1b, 0x12, 0xe5, 0x80, 0xc9, 0x55, 0x12, 0xe1, 0x6d, 0x9b, 0x2d, 0xe2, 0xfa, - 0x0a, 0xbc, 0x7e, 0x23, 0xeb, 0x15, 0x0a, 0x57, 0x13, 0xd5, 0xfe, 0x09, 0x6b, 0x5d, 0x6a, 0x9c, - 0x04, 0xf5, 0xef, 0xaf, 0x5f, 0x5e, 0xb8, 0x66, 0x09, 0xc6, 0x45, 0x5c, 0x5c, 0x6a, 0xa3, 0x8f, - 0x1d, 0x0b, 0x97, 0x95, 0x3c, 0x0d, 0x21, 0x41, 0x07, 0x1f, 0x3b, 0xe0, 0xe7, 0x36, 0xb1, 0xe0, - 0x0f, 0x0e, 0x7e, 0x87, 0x07, 0xb3, 0x8a, 0xe3, 0x71, 0x65, 0x26, 0x0a, 0x94, 0xb0, 0x6c, 0x68, - 0x99, 0x25, 0x01, 0x08, 0x1d, 0xe7, 0x05, 0x20, 0x69, 0x19, 0x63, 0x05, 0xfd, 0x6b, 0xcb, 0xde, - 0xa1, 0xcc, 0xd7, 0xaf, 0xc2, 0x14, 0x1a, 0x84, 0xc6, 0xca, 0x1f, 0xff, 0xef, 0xdc, 0x22, 0x04, - 0x00, 0x88, 0x48, 0x1e, 0xe1, 0x5c, 0x48, 0xd3, 0x29, 0xaa, 0xaa, 0x67, 0x65, 0x83, 0x9c, 0x32, - 0x0e, 0x06, 0x14, 0xbf, 0xa3, 0xa5, 0xcb, 0x59, 0x66, 0x58, 0x64, 0xe4, 0xf7, 0x2b, 0x7b, 0x77, - 0x7c, 0x22, 0x18, 0x04, 0xc2, 0xc9, 0x9a, 0x77, 0x77, 0x77, 0x73, 0xc1, 0x88, 0xc1, 0xcf, 0x7b, - 0x6a, 0x0e, 0xaf, 0x2e, 0xee, 0xf5, 0xa9, 0xbc, 0xf0, 0x8a, 0x0b, 0xbc, 0xfd, 0x15, 0xe5, 0xe8, - 0xd9, 0x47, 0x75, 0x73, 0xeb, 0x17, 0xd5, 0x88, 0x42, 0x11, 0x82, 0xc1, 0xc2, 0x86, 0xa2, 0x0f, - 0xe2, 0x4f, 0x8a, 0x63, 0xef, 0x83, 0x2f, 0x04, 0x0c, 0x17, 0xc3, 0x6c, 0xc0, 0x0e, 0x47, 0xea, - 0xa1, 0x39, 0x77, 0x79, 0xdd, 0xe2, 0x70, 0x5f, 0x70, 0x56, 0xe5, 0xb7, 0x3f, 0x02, 0x76, 0xe1, - 0xe6, 0x04, 0xed, 0xc7, 0xfd, 0x6b, 0x09, 0xb8, 0x2f, 0xc8, 0x13, 0x28, 0xff, 0x4b, 0x34, 0x1f, - 0x7c, 0xd0, 0xd6, 0xfb, 0x84, 0x43, 0x3c, 0x40, 0x64, 0x15, 0x43, 0x1d, 0x17, 0x28, 0x1d, 0x35, - 0x2f, 0xbd, 0xcf, 0x61, 0x86, 0x15, 0x00, 0xc0, 0x64, 0x8f, 0x33, 0x1b, 0x5d, 0xbd, 0xda, 0xed, - 0x29, 0x96, 0x99, 0x10, 0x99, 0x10, 0x99, 0xe5, 0xac, 0xb5, 0xed, 0xc2, 0x20, 0xc4, 0xc6, 0x15, - 0xc5, 0x6f, 0xc1, 0xc0, 0x91, 0xce, 0xe2, 0xbb, 0xa9, 0xfc, 0xf0, 0x82, 0x0b, 0xff, 0xea, 0xf5, - 0xd5, 0xe3, 0x78, 0x28, 0xaa, 0xea, 0xba, 0x54, 0xe1, 0x0c, 0xbd, 0x59, 0xf5, 0xef, 0xae, 0x5f, - 0x52, 0x52, 0x75, 0xca, 0x33, 0x10, 0xb5, 0xc4, 0x82, 0x00, 0x54, 0x10, 0x37, 0x26, 0x03, 0x56, - 0x26, 0x31, 0x37, 0x26, 0xe7, 0xfd, 0xe0, 0xa4, 0x28, 0x41, 0x75, 0x17, 0x17, 0x2f, 0x38, 0xf1, - 0x3e, 0x5e, 0x2e, 0x2e, 0x59, 0x8a, 0x65, 0xe1, 0x40, 0xd0, 0x53, 0x29, 0x15, 0x1b, 0x89, 0x0c, - 0x8c, 0x8b, 0x8b, 0x8b, 0x8b, 0x91, 0x8e, 0xf2, 0x66, 0x27, 0x2b, 0x1b, 0x75, 0xd0, 0x57, 0xbc, - 0x30, 0x11, 0x1c, 0x86, 0xb2, 0x28, 0xaa, 0xd5, 0x9a, 0x2f, 0x1f, 0xb3, 0x2e, 0x78, 0x90, 0x20, - 0x8c, 0x1a, 0xd8, 0xbb, 0x62, 0x9a, 0x97, 0x93, 0xda, 0xd7, 0x7b, 0xf0, 0x72, 0x0a, 0x0d, 0x58, - 0xa7, 0x71, 0x27, 0x1d, 0xaf, 0xc4, 0x41, 0x31, 0x9e, 0x0e, 0xdd, 0x32, 0xaa, 0xa4, 0xae, 0xa3, - 0x3f, 0x4f, 0xd0, 0x4d, 0xfe, 0xae, 0x04, 0x75, 0x74, 0x2d, 0xc1, 0x0f, 0x77, 0x8a, 0x4c, 0x42, - 0xbd, 0xc4, 0xc1, 0x38, 0x85, 0x62, 0x41, 0x3e, 0x77, 0xc5, 0xe0, 0xc6, 0xa1, 0x6c, 0x36, 0xc5, - 0x00, 0x9d, 0xd1, 0x64, 0x41, 0xbc, 0xce, 0xab, 0xee, 0xab, 0x2d, 0xbb, 0x9f, 0xb6, 0x08, 0xa4, - 0xfa, 0xf8, 0x90, 0x88, 0xca, 0xb6, 0x2f, 0x13, 0xf0, 0x76, 0xe4, 0x64, 0x53, 0xf9, 0x3c, 0xc1, - 0x80, 0xbc, 0x20, 0x09, 0xe2, 0xea, 0xa6, 0xeb, 0xca, 0x47, 0xbc, 0x40, 0x92, 0xa3, 0x7c, 0x57, - 0xbb, 0xc2, 0xd3, 0x82, 0x6c, 0x7a, 0xb7, 0xff, 0xf3, 0xfc, 0x14, 0x81, 0x60, 0x83, 0x20, 0x6c, - 0x47, 0xe4, 0x82, 0x83, 0x03, 0x4b, 0x83, 0x16, 0x72, 0x3b, 0x56, 0x47, 0x7f, 0xbe, 0x82, 0x2f, - 0xf5, 0xef, 0xa2, 0xbc, 0xbd, 0x19, 0xeb, 0xab, 0xfd, 0x5e, 0x4e, 0x8a, 0xdf, 0x10, 0x3f, 0x3d, - 0x0f, 0x4c, 0xf4, 0x3d, 0x03, 0x78, 0x80, 0x48, 0x1a, 0x9b, 0xaf, 0x87, 0x84, 0x07, 0x88, 0x37, - 0x8d, 0xd6, 0xe5, 0x44, 0x48, 0x3a, 0xaf, 0x08, 0x05, 0x22, 0x98, 0x8f, 0x54, 0xc4, 0xbd, 0x6a, - 0xae, 0xab, 0x0c, 0x32, 0x37, 0x0b, 0x77, 0xde, 0x10, 0x08, 0xf9, 0x32, 0x92, 0xee, 0xef, 0xe2, - 0xe7, 0xa3, 0x3b, 0xb2, 0x37, 0x60, 0xfc, 0x40, 0x91, 0xc6, 0x3b, 0x1c, 0x5e, 0x56, 0x6a, 0x5f, - 0xc3, 0x23, 0x86, 0xbb, 0x8a, 0xef, 0x1b, 0x4c, 0x5b, 0xdb, 0xe2, 0x02, 0x23, 0x06, 0x3b, 0xb8, - 0x95, 0x20, 0xae, 0xec, 0xf8, 0xef, 0xd4, 0x47, 0xe0, 0xf9, 0x40, 0x5f, 0x05, 0x20, 0x80, 0x10, - 0x89, 0x2a, 0x77, 0x02, 0xef, 0x7d, 0x04, 0x5e, 0x12, 0xeb, 0xd2, 0x70, 0x49, 0xd2, 0x49, 0xa6, - 0xeb, 0x5f, 0x57, 0x03, 0x7b, 0x36, 0xef, 0xe4, 0x15, 0x9d, 0x47, 0x13, 0x09, 0xdf, 0x7a, 0xaa, - 0xe2, 0x6e, 0xaa, 0xa8, 0xfc, 0xda, 0xd7, 0x13, 0x0a, 0x15, 0x73, 0xf6, 0x12, 0x6c, 0x49, 0x2a, - 0xee, 0xb3, 0x35, 0xbf, 0xc2, 0x26, 0x61, 0x32, 0x37, 0x6d, 0x27, 0x9f, 0x15, 0xdf, 0x86, 0x02, - 0x26, 0x87, 0x15, 0x12, 0x24, 0x6e, 0x4e, 0xc5, 0xa3, 0x98, 0x77, 0xe2, 0x6f, 0x12, 0x82, 0xfd, - 0x5d, 0x6a, 0x5e, 0x4b, 0xde, 0xf9, 0xae, 0xf8, 0x8e, 0xbd, 0xf5, 0x98, 0x97, 0xa2, 0xf4, 0xfd, - 0x13, 0xbe, 0xbd, 0x15, 0xd7, 0xbc, 0x41, 0x87, 0x2d, 0x7e, 0x2f, 0x71, 0x0d, 0x09, 0x00, 0x15, - 0x14, 0x62, 0x8c, 0xf0, 0x07, 0x96, 0xfc, 0x5c, 0x56, 0xa2, 0xb3, 0x75, 0x4e, 0x4d, 0x9e, 0x09, - 0x37, 0x77, 0xef, 0x08, 0x04, 0x4b, 0x54, 0x94, 0x56, 0x28, 0xc4, 0x03, 0xcb, 0x00, 0x62, 0x07, - 0x2c, 0xb0, 0x18, 0xa3, 0xe1, 0x11, 0xda, 0xd6, 0xeb, 0x75, 0xf1, 0x12, 0xd6, 0xab, 0xc4, 0x84, - 0x05, 0x44, 0x79, 0x5e, 0x49, 0xc7, 0x9b, 0xe5, 0xbb, 0xe8, 0x2b, 0x5f, 0x5e, 0xbe, 0xb2, 0x97, - 0xaf, 0x57, 0x5e, 0x8b, 0xe2, 0x42, 0x67, 0x62, 0x76, 0x27, 0x62, 0x76, 0x2b, 0xa1, 0xdf, 0x9f, - 0xaf, 0x5f, 0x44, 0x9d, 0x37, 0x17, 0x77, 0x55, 0xdd, 0xc9, 0x13, 0xc3, 0x64, 0x08, 0x00, 0x03, - 0xb5, 0x04, 0xa4, 0x36, 0x73, 0x85, 0x25, 0x57, 0x22, 0x7b, 0x51, 0x2f, 0xad, 0xba, 0xdb, 0x52, - 0x70, 0x70, 0x19, 0x7c, 0x71, 0x6c, 0x23, 0x47, 0xa0, 0x75, 0x8b, 0x0c, 0xa2, 0x14, 0xb4, 0x84, - 0x23, 0xfd, 0xde, 0x00, 0x02, 0x7b, 0x26, 0x5a, 0xf3, 0xf6, 0xb1, 0x02, 0x02, 0x91, 0x5c, 0xd6, - 0xaa, 0x29, 0x99, 0x0e, 0xac, 0xe2, 0xc1, 0x45, 0xe3, 0xa8, 0xfd, 0xfc, 0x5e, 0x23, 0xcb, 0xe5, - 0x9f, 0x14, 0x48, 0xae, 0xf2, 0xff, 0x05, 0x20, 0xa0, 0x28, 0x5d, 0x36, 0xd3, 0x14, 0x19, 0xf8, - 0x97, 0x2e, 0xb1, 0x4d, 0xb0, 0xa5, 0x68, 0xc5, 0x18, 0x58, 0xa0, 0xd2, 0x16, 0x20, 0x1d, 0x53, - 0xb8, 0x81, 0x21, 0x4a, 0xad, 0x69, 0x5d, 0xb1, 0x70, 0xa0, 0x07, 0x81, 0x70, 0x0a, 0x01, 0xa7, - 0xa4, 0xb6, 0xe3, 0xb7, 0x84, 0x06, 0x1d, 0x56, 0xaa, 0xaa, 0xb5, 0x9b, 0xd5, 0x57, 0x10, 0x10, - 0x18, 0x2a, 0xf7, 0x9a, 0xd3, 0xd3, 0x93, 0xd7, 0x04, 0x12, 0x86, 0x6e, 0xef, 0x0c, 0x29, 0x88, - 0x3f, 0xfa, 0x69, 0xff, 0x42, 0x3d, 0x7a, 0x7e, 0xbd, 0x7d, 0x11, 0xe6, 0xe0, 0x86, 0xef, 0xb1, - 0x5c, 0xda, 0xd5, 0x70, 0x4f, 0x4d, 0xfd, 0xdc, 0xe2, 0x93, 0x87, 0x2e, 0xee, 0xed, 0x77, 0x77, - 0xf2, 0x44, 0x84, 0x05, 0x04, 0x9e, 0xed, 0x8a, 0xd6, 0x5d, 0x87, 0x70, 0x00, 0xe0, 0x00, 0x2c, - 0xf8, 0x0f, 0xe6, 0x0b, 0x9a, 0x53, 0x53, 0x23, 0x17, 0x3e, 0x12, 0x19, 0x18, 0x3d, 0x58, 0xa2, - 0xae, 0x2a, 0xe3, 0x5c, 0x88, 0xbe, 0xd5, 0xcd, 0x7c, 0xc0, 0x0b, 0x05, 0x86, 0xab, 0xe4, 0x00, - 0x59, 0x9f, 0x68, 0x8a, 0x6d, 0x79, 0xce, 0x82, 0x61, 0x58, 0x55, 0xb0, 0xcf, 0x41, 0x19, 0x4c, - 0x05, 0xab, 0x36, 0x02, 0x37, 0x66, 0xce, 0x34, 0xc2, 0xec, 0x35, 0xd3, 0xb2, 0x2a, 0x96, 0x57, - 0xc4, 0x85, 0x28, 0x86, 0xb8, 0x89, 0x91, 0x47, 0x89, 0x48, 0x35, 0x4c, 0x93, 0x0b, 0x84, 0xf4, - 0x83, 0xe0, 0x20, 0x32, 0x69, 0xea, 0xde, 0xce, 0x5b, 0xa1, 0x26, 0x48, 0xac, 0xc8, 0x33, 0x73, - 0xeb, 0x46, 0xfc, 0x40, 0x64, 0x56, 0x6d, 0x37, 0x67, 0x6c, 0xbe, 0xbc, 0x40, 0xc8, 0xe4, 0x03, - 0xe0, 0x35, 0x48, 0x94, 0x00, 0x02, 0x01, 0xae, 0xb8, 0x5c, 0x81, 0xa8, 0x61, 0x0b, 0x19, 0x4a, - 0xf7, 0x4c, 0x4c, 0xe0, 0x0d, 0xc2, 0xcc, 0x76, 0x2d, 0x5a, 0x4c, 0x17, 0xe8, 0x1e, 0x18, 0x86, - 0xa6, 0x60, 0x11, 0x72, 0xce, 0x45, 0xa1, 0x7c, 0x0f, 0x46, 0xa2, 0x7e, 0x0b, 0x8b, 0xb0, 0x33, - 0x32, 0x90, 0xc4, 0xb4, 0xf3, 0x61, 0x4a, 0x1c, 0x1f, 0x4d, 0xc5, 0xb2, 0xa4, 0xc6, 0xcf, 0xc1, - 0x62, 0x40, 0xa2, 0x14, 0xaa, 0x34, 0x35, 0x41, 0xca, 0x33, 0xc0, 0x33, 0x8f, 0x0e, 0xc0, 0x7a, - 0x12, 0xaa, 0xab, 0x32, 0x50, 0x06, 0xe3, 0xc7, 0xce, 0x4b, 0x10, 0xec, 0xe0, 0x7b, 0x9c, 0x3d, - 0x36, 0x17, 0x62, 0x40, 0x42, 0x2b, 0xc3, 0xd1, 0xd3, 0xfb, 0xda, 0xdb, 0xed, 0x5f, 0xe6, 0x99, - 0x3b, 0x3b, 0x78, 0x86, 0x69, 0x7d, 0xf8, 0x8f, 0x12, 0x82, 0x3d, 0xf5, 0xc2, 0xfa, 0xb1, 0x1b, - 0xd5, 0x8a, 0xeb, 0x28, 0x9e, 0x8a, 0xf1, 0x1d, 0x5e, 0xba, 0xbd, 0x44, 0x55, 0xeb, 0xaf, 0x54, - 0x48, 0x40, 0xc2, 0xa8, 0x98, 0x44, 0xa2, 0xe3, 0x05, 0x48, 0x54, 0x01, 0x9d, 0x72, 0x50, 0x00, - 0x4b, 0xe5, 0xc0, 0xae, 0xc9, 0x31, 0x5a, 0xe2, 0x60, 0xc5, 0xc5, 0xd6, 0x14, 0x0e, 0xcb, 0x34, - 0x8b, 0x2f, 0xc1, 0x3d, 0x54, 0x7a, 0x93, 0x2a, 0xaf, 0xef, 0x08, 0x16, 0xb4, 0xf8, 0x21, 0x0c, - 0x0c, 0xbf, 0xa3, 0x32, 0x69, 0x03, 0xaf, 0xf4, 0x64, 0xc0, 0xa3, 0x50, 0xb3, 0x10, 0x41, 0x52, - 0xab, 0x91, 0xd2, 0x68, 0x0c, 0x16, 0x81, 0x23, 0xdd, 0x8e, 0x7f, 0x9e, 0xe3, 0xe3, 0x8e, 0xce, - 0x14, 0x24, 0x21, 0x00, 0x55, 0xa6, 0x41, 0xdb, 0xa7, 0xde, 0xf5, 0x9d, 0x03, 0x8d, 0xfa, 0xeb, - 0x34, 0x06, 0xe2, 0x90, 0x7c, 0x6d, 0xc2, 0xbf, 0xa3, 0x4d, 0xbc, 0x7b, 0x6d, 0xe2, 0x01, 0x40, - 0x2c, 0x39, 0x3b, 0x71, 0x32, 0xd8, 0x9e, 0x0b, 0x96, 0x62, 0x99, 0x3d, 0xeb, 0xef, 0x10, 0xe9, - 0xbf, 0xe0, 0x9c, 0x66, 0x2f, 0x51, 0x78, 0xbb, 0xf1, 0x32, 0x8b, 0xc9, 0xe4, 0xe8, 0x7b, 0xcd, - 0xd5, 0xe2, 0x7a, 0xbf, 0xc4, 0x04, 0x73, 0xd0, 0xf4, 0xcf, 0x43, 0xd1, 0x74, 0x10, 0xe8, 0xae, - 0x09, 0x08, 0x96, 0x97, 0x56, 0x23, 0xe8, 0xfd, 0x5d, 0x75, 0x27, 0x5d, 0x7d, 0x62, 0xf1, 0x1f, - 0x08, 0x84, 0x16, 0x56, 0xd2, 0xeb, 0x5e, 0x20, 0x48, 0xaa, 0xad, 0x66, 0xcf, 0xc1, 0x51, 0x97, - 0x53, 0x5a, 0x48, 0x7a, 0xe3, 0xe3, 0xb8, 0x71, 0xc6, 0xe6, 0xaf, 0xf1, 0x92, 0x9f, 0x28, 0x8a, - 0xb6, 0x68, 0xf4, 0xc8, 0xc5, 0x67, 0x98, 0x1f, 0x85, 0x1d, 0x60, 0x75, 0x74, 0xae, 0x65, 0x78, - 0x98, 0x2e, 0x38, 0x24, 0xf2, 0x4b, 0xc7, 0xde, 0xab, 0xdf, 0x08, 0x57, 0x58, 0xbb, 0x42, 0xfd, - 0x57, 0x89, 0x05, 0x42, 0xda, 0x93, 0x14, 0x79, 0x4f, 0x03, 0xe6, 0x55, 0x7e, 0xe1, 0x10, 0xc0, - 0x82, 0x47, 0x27, 0xad, 0x2a, 0xe1, 0x22, 0x51, 0xac, 0x9f, 0xe2, 0x62, 0x05, 0x68, 0x97, 0x9a, - 0xf8, 0x9c, 0xbd, 0x05, 0xdc, 0x88, 0x16, 0xb4, 0x6f, 0xea, 0xe8, 0xae, 0xae, 0x44, 0xf5, 0x77, - 0x0c, 0xef, 0xa2, 0xa4, 0x5c, 0x4f, 0xd5, 0x2d, 0x42, 0x21, 0x81, 0x61, 0x4b, 0xbb, 0xa2, 0x77, - 0xa8, 0x81, 0x25, 0x38, 0xf5, 0x53, 0xaf, 0x8f, 0x32, 0xaa, 0xe9, 0x5d, 0x91, 0xff, 0xe1, 0x22, - 0x2a, 0xdb, 0x5d, 0x7c, 0x64, 0xa9, 0x74, 0x69, 0x09, 0x50, 0xda, 0x3d, 0x9f, 0x33, 0x04, 0xe6, - 0xb1, 0xdf, 0xac, 0xba, 0x6c, 0x0b, 0x4a, 0xc7, 0x3c, 0x44, 0x24, 0x2e, 0xdd, 0x71, 0x84, 0x1e, - 0x26, 0x6b, 0xdf, 0xc4, 0x94, 0xa4, 0xfd, 0xe2, 0x11, 0x9a, 0xb9, 0x85, 0x38, 0xad, 0xf8, 0x46, - 0x52, 0xea, 0xa0, 0x9a, 0x10, 0x08, 0x22, 0xf7, 0x08, 0x84, 0x11, 0xbb, 0xc4, 0x0e, 0xa5, 0x48, - 0xb9, 0x41, 0xbb, 0xbd, 0xfe, 0xce, 0xef, 0xe2, 0x44, 0x7c, 0xda, 0xa8, 0x57, 0x8f, 0x08, 0x8a, - 0x8c, 0xd2, 0x3d, 0xf5, 0x4c, 0xfe, 0x67, 0x79, 0x59, 0xd2, 0xdf, 0xc4, 0x04, 0x2f, 0xce, 0x0f, - 0xc0, 0xda, 0xa4, 0x1a, 0x0f, 0xca, 0x2e, 0x77, 0x10, 0xe5, 0xb1, 0x22, 0x4a, 0x24, 0x3f, 0x65, - 0xd7, 0x13, 0x73, 0xa5, 0xbc, 0xb8, 0x82, 0xd7, 0x7f, 0x12, 0x2e, 0x91, 0xfe, 0x7e, 0xd3, 0xf1, - 0x10, 0x86, 0xa8, 0x7d, 0xdd, 0x53, 0xae, 0x26, 0x08, 0xe9, 0x5a, 0xf7, 0xc8, 0x4d, 0x57, 0x84, - 0x09, 0x75, 0xae, 0x10, 0x08, 0x71, 0x01, 0x00, 0x44, 0x28, 0x60, 0x43, 0xd2, 0xfd, 0xc4, 0x04, - 0x05, 0xce, 0xde, 0xa9, 0x96, 0xfc, 0x48, 0x82, 0x89, 0xc3, 0xe8, 0x7b, 0x17, 0x12, 0x9d, 0xe1, - 0x7e, 0xad, 0xf2, 0x76, 0x9a, 0x2f, 0x24, 0xf8, 0x7c, 0xaf, 0xaf, 0x7d, 0x7b, 0xe4, 0xcf, 0x9e, - 0x08, 0x3e, 0x10, 0x04, 0x24, 0xd5, 0x4a, 0xb3, 0xe0, 0xba, 0x9d, 0x37, 0xaa, 0xaf, 0x78, 0x81, - 0x94, 0xe5, 0x93, 0x49, 0x5c, 0x1e, 0x79, 0xbb, 0x97, 0x88, 0x78, 0x77, 0x6b, 0x5f, 0xec, 0x8e, - 0xd6, 0xb8, 0x98, 0x21, 0x16, 0xf6, 0x13, 0xb3, 0xe0, 0xb6, 0xfb, 0xaa, 0xfd, 0xf0, 0xa1, 0x95, - 0x54, 0x5d, 0x4b, 0xd5, 0x2a, 0xcd, 0x19, 0x09, 0x3b, 0xe3, 0xdc, 0x44, 0x40, 0xa2, 0x42, 0xbe, - 0x5b, 0xc2, 0xc2, 0xd0, 0x73, 0x9e, 0x10, 0xf0, 0x34, 0xe6, 0x31, 0x5b, 0x96, 0x3d, 0xc1, 0xd7, - 0x8a, 0x5e, 0x0d, 0x7f, 0x3e, 0xe6, 0x71, 0x11, 0x25, 0xdf, 0x16, 0xa1, 0xa0, 0x22, 0x56, 0x95, - 0x5d, 0x3c, 0x46, 0xf8, 0xe1, 0xb5, 0xae, 0x9a, 0xea, 0xb8, 0x8f, 0xcb, 0x2e, 0x25, 0xfb, 0xcd, - 0xff, 0x09, 0x55, 0x75, 0xa5, 0xc4, 0x41, 0x6d, 0x46, 0x0b, 0x0e, 0x5f, 0x74, 0x65, 0x71, 0x01, - 0x41, 0x5b, 0x10, 0x64, 0xbd, 0x56, 0x6a, 0x20, 0x35, 0x5c, 0xbd, 0x76, 0xf0, 0x81, 0x63, 0x8b, - 0x00, 0x32, 0xbc, 0x20, 0x51, 0xb8, 0xda, 0xbb, 0x86, 0xf8, 0x8a, 0x49, 0x7a, 0x49, 0x12, 0x08, - 0x2a, 0xdf, 0x09, 0x08, 0x5b, 0xee, 0xff, 0x25, 0xf4, 0xf8, 0x90, 0x47, 0x5b, 0xdf, 0xc4, 0x82, - 0x92, 0xbe, 0x25, 0xe8, 0xd6, 0xac, 0xc5, 0x6e, 0xfa, 0x7f, 0x10, 0xcc, 0xaa, 0xb8, 0x6a, 0x2c, - 0x24, 0x17, 0x1f, 0xdf, 0xe8, 0x7f, 0xf6, 0xe0, 0x86, 0x08, 0xe6, 0xca, 0x56, 0xf8, 0x44, 0xd1, - 0x76, 0xc8, 0xc2, 0xa6, 0xb4, 0x0e, 0x24, 0x4f, 0xe3, 0xa2, 0xe3, 0x08, 0x26, 0x64, 0x5d, 0x52, - 0xb6, 0x21, 0xa1, 0x6f, 0xc1, 0x5c, 0x4e, 0x04, 0x95, 0xee, 0xee, 0x2b, 0x78, 0xad, 0xb6, 0x2f, - 0x90, 0xb5, 0x5f, 0x10, 0x6e, 0xef, 0xc4, 0x16, 0xb7, 0x7c, 0x48, 0x81, 0x26, 0xdd, 0xe7, 0xca, - 0xfb, 0x16, 0x93, 0xfe, 0x30, 0x8f, 0x7d, 0xee, 0xf7, 0xde, 0x5f, 0xc2, 0x02, 0xc8, 0xfb, 0xda, - 0xae, 0x18, 0x10, 0x2f, 0xaa, 0xcd, 0x8b, 0x3c, 0x09, 0x01, 0x41, 0x78, 0xb3, 0x5c, 0x1d, 0x16, - 0x09, 0xe5, 0x83, 0xd6, 0x0b, 0xd8, 0xe4, 0xb0, 0xe3, 0x96, 0xc2, 0x0f, 0x61, 0x59, 0x00, 0x06, - 0x76, 0x77, 0x0f, 0x75, 0x6b, 0xfb, 0x6e, 0xe3, 0xbc, 0xf1, 0xff, 0xf0, 0xcc, 0x48, 0xc7, 0x33, - 0xe7, 0xc5, 0x76, 0x57, 0x0c, 0xca, 0x5c, 0x4b, 0x02, 0xe1, 0xba, 0xb1, 0x0b, 0xc4, 0x08, 0xf8, - 0x22, 0xcb, 0xdf, 0xcb, 0xe2, 0x8b, 0x9b, 0x1a, 0x49, 0x7f, 0x13, 0x7b, 0x5d, 0xda, 0xc4, 0x88, - 0xf8, 0x44, 0x8f, 0x76, 0xeb, 0x5d, 0x37, 0xf2, 0xee, 0x2b, 0x7e, 0x10, 0xf1, 0x25, 0x2e, 0xab, - 0x89, 0x84, 0x77, 0xba, 0x57, 0x76, 0x25, 0x7e, 0x24, 0x4f, 0x89, 0x05, 0x39, 0xf3, 0xb7, 0x35, - 0x35, 0xd7, 0xb8, 0x91, 0x2e, 0x5f, 0x77, 0x50, 0x88, 0x84, 0x26, 0x8e, 0xfc, 0x82, 0x1d, 0xfc, - 0x4d, 0x91, 0xee, 0xe8, 0x2e, 0xc5, 0x80, 0xed, 0xb4, 0x8f, 0x65, 0xfe, 0xf7, 0xee, 0x24, 0x41, - 0x8c, 0xed, 0xb9, 0x9b, 0xc4, 0x02, 0x9b, 0xb2, 0x6f, 0xaa, 0xba, 0xb7, 0x3f, 0x70, 0x24, 0x03, - 0x81, 0x45, 0x26, 0x2a, 0xca, 0xcc, 0xaa, 0xe1, 0x8c, 0x08, 0xf7, 0xa2, 0xad, 0x7c, 0x9b, 0x1a, - 0x5f, 0x49, 0x3f, 0xd8, 0x5d, 0xc0, 0xb2, 0x68, 0x94, 0xdb, 0xfa, 0x69, 0xb4, 0xd3, 0x4d, 0x1f, - 0x6b, 0xd3, 0xd7, 0x88, 0x08, 0xd2, 0xd7, 0x73, 0x53, 0x13, 0xa0, 0x9d, 0x3c, 0x70, 0xcd, 0x55, - 0x29, 0xf1, 0xf5, 0x5c, 0x33, 0x93, 0x8e, 0xe6, 0xdd, 0x24, 0xef, 0xb7, 0xe5, 0xdb, 0x7f, 0xbd, - 0xea, 0x15, 0xe8, 0x5b, 0xf1, 0x01, 0x84, 0x40, 0x74, 0x48, 0xbc, 0x22, 0x10, 0x74, 0xdb, 0x7f, - 0x11, 0xe2, 0x42, 0x45, 0xdd, 0xa9, 0xa9, 0xe2, 0x62, 0x65, 0xcf, 0x7b, 0xfc, 0x50, 0x87, 0x7b, - 0xde, 0x21, 0x63, 0x88, 0x08, 0x1c, 0x4b, 0xdf, 0xcb, 0x76, 0xee, 0xc9, 0x5b, 0xbb, 0xbe, 0x24, - 0x32, 0x5b, 0xdd, 0x1e, 0x24, 0x10, 0x0f, 0xaa, 0xd5, 0x45, 0xeb, 0x58, 0xba, 0xee, 0x82, 0x74, - 0xfc, 0x40, 0x22, 0xee, 0xfd, 0xf0, 0x9c, 0xdf, 0xde, 0xfc, 0x48, 0x92, 0xee, 0xbe, 0x24, 0x59, - 0xea, 0xf5, 0x5f, 0x11, 0x42, 0x3a, 0xba, 0x3d, 0x7c, 0x79, 0x5d, 0xde, 0xee, 0xee, 0xef, 0x7c, - 0x40, 0x44, 0x16, 0x0e, 0xab, 0xee, 0xe2, 0xba, 0xd7, 0xb8, 0x40, 0x22, 0x0a, 0x84, 0xed, 0x54, - 0x8c, 0x08, 0xb1, 0x27, 0x58, 0x59, 0x51, 0x76, 0xe0, 0xc4, 0x30, 0x10, 0x29, 0x98, 0x3e, 0x1f, - 0x62, 0x59, 0xfe, 0xb5, 0xc3, 0x2c, 0xa0, 0x8e, 0xdc, 0xe8, 0xff, 0xb6, 0xdd, 0xb3, 0x5a, 0x70, - 0xd3, 0x7c, 0x61, 0x94, 0xd9, 0x49, 0x62, 0x39, 0x55, 0xf4, 0xef, 0x89, 0x89, 0x9e, 0xea, 0xb6, - 0xe7, 0xd0, 0xab, 0xef, 0x88, 0x13, 0x77, 0x9d, 0xa6, 0xce, 0xbc, 0x41, 0x06, 0x51, 0xc9, 0xf0, - 0x88, 0x83, 0xc1, 0x53, 0xa6, 0xa0, 0xed, 0xff, 0x13, 0xc1, 0x10, 0x9d, 0xdd, 0xbe, 0x0b, 0xad, - 0xdb, 0xa5, 0xb4, 0xd7, 0xc1, 0x3c, 0x9b, 0x9f, 0x57, 0x96, 0xe3, 0x1f, 0x5c, 0xbe, 0x12, 0xbb, - 0xf6, 0xdb, 0x5f, 0x35, 0x56, 0x97, 0x97, 0x5b, 0x42, 0x7a, 0xb7, 0x10, 0x24, 0x67, 0x96, 0x8e, - 0xed, 0x85, 0xbd, 0x97, 0x2e, 0xee, 0x5f, 0x89, 0x96, 0x95, 0xff, 0x89, 0x12, 0xe2, 0xb7, 0x76, - 0xf1, 0x12, 0xf5, 0x5c, 0x47, 0xe0, 0xab, 0x10, 0xd2, 0xe4, 0x75, 0xb2, 0xaf, 0x22, 0x5f, 0x63, - 0xb2, 0x77, 0xf0, 0x80, 0x40, 0x97, 0xb9, 0x54, 0x7b, 0x8a, 0xdf, 0x10, 0x19, 0x05, 0x27, 0xdd, - 0xe8, 0xde, 0xee, 0xef, 0x5c, 0x48, 0x81, 0x44, 0x55, 0x55, 0x55, 0x55, 0xe1, 0x11, 0x7a, 0x51, - 0x0f, 0x4a, 0x73, 0x9e, 0x27, 0x89, 0x8b, 0x2d, 0x56, 0xb5, 0xf1, 0x05, 0x25, 0xef, 0x84, 0x42, - 0x00, 0x94, 0x4a, 0xb1, 0xda, 0x77, 0xbd, 0x71, 0x15, 0xbf, 0x11, 0x10, 0x23, 0x77, 0xad, 0x57, - 0x25, 0xdf, 0xf0, 0x89, 0xd6, 0x9b, 0xbd, 0xef, 0x2e, 0x7c, 0x15, 0x0a, 0x15, 0xde, 0xab, 0x55, - 0xd7, 0xb8, 0x88, 0xf1, 0x7c, 0xd8, 0xab, 0x2a, 0x6f, 0xaa, 0xf8, 0xf9, 0x0e, 0x73, 0x75, 0xca, - 0xa6, 0x91, 0x75, 0xf2, 0xe2, 0x1d, 0x6d, 0x3e, 0x20, 0x4f, 0x11, 0x15, 0x26, 0x2d, 0x5f, 0x7c, - 0x44, 0x4c, 0xd4, 0xe7, 0x5a, 0xe2, 0x02, 0x00, 0x9f, 0xb6, 0x65, 0x46, 0x5f, 0xbf, 0x70, 0x8c, - 0x82, 0x97, 0x17, 0xf0, 0xc1, 0x45, 0x0e, 0x06, 0x5f, 0xc5, 0xfb, 0xb1, 0x84, 0xb2, 0x4b, 0x70, - 0xb8, 0x7b, 0xf2, 0x73, 0x15, 0x69, 0xfc, 0x13, 0x5e, 0xf4, 0xa4, 0xd6, 0xf2, 0x9b, 0xaf, 0x5f, - 0x3d, 0x8a, 0x49, 0x26, 0x9f, 0xfa, 0xd7, 0xc1, 0x1e, 0x5f, 0x4d, 0xbe, 0x0b, 0x26, 0xa3, 0x3f, - 0x68, 0xf9, 0xb4, 0xd3, 0x7c, 0x25, 0xd2, 0x49, 0x22, 0x63, 0x55, 0x3e, 0x15, 0xa7, 0x26, 0xa4, - 0x93, 0x69, 0xdc, 0xa4, 0x5d, 0xff, 0xc1, 0x75, 0x5a, 0x76, 0x89, 0xa9, 0x26, 0xe9, 0x01, 0xc3, - 0x10, 0xe1, 0xaa, 0x6e, 0x3d, 0x73, 0xb7, 0x8d, 0xf7, 0xf0, 0x80, 0x29, 0x28, 0x35, 0x79, 0x16, - 0xd4, 0x2d, 0xbf, 0x53, 0x9c, 0xae, 0xdb, 0xd7, 0xc7, 0x14, 0x56, 0x76, 0x65, 0xc9, 0xa0, 0xfc, - 0xbd, 0x26, 0xe7, 0xa2, 0x23, 0xbf, 0x25, 0xdf, 0xf0, 0x9d, 0xef, 0x5a, 0xfc, 0x29, 0x7b, 0xba, - 0xaa, 0xbd, 0xa7, 0xbe, 0x5a, 0x75, 0xe1, 0x01, 0xc6, 0xb8, 0xbe, 0xef, 0x66, 0x33, 0xaf, 0x10, - 0x41, 0x35, 0x68, 0xd9, 0x84, 0x44, 0x71, 0x20, 0x83, 0x89, 0x08, 0x39, 0x31, 0x7e, 0x20, 0x10, - 0xd2, 0x26, 0x7d, 0xc4, 0xc1, 0x26, 0xef, 0xef, 0x88, 0x2b, 0xbb, 0xbb, 0xbb, 0xfc, 0xa4, 0xdb, - 0x5c, 0x48, 0x83, 0x11, 0x57, 0xc4, 0x88, 0x26, 0xee, 0xfe, 0x13, 0x3d, 0x69, 0xd3, 0x32, 0x97, - 0xa8, 0xe2, 0x42, 0x62, 0x2f, 0x75, 0xb3, 0xf8, 0x27, 0xad, 0x55, 0x57, 0xf7, 0x89, 0x0a, 0x0b, - 0x17, 0x55, 0x51, 0x75, 0x55, 0x11, 0xc9, 0x11, 0x84, 0xd6, 0x6c, 0xef, 0x12, 0x3f, 0x33, 0x1d, - 0x4d, 0xd5, 0x2f, 0x34, 0x25, 0x45, 0xfc, 0x55, 0x75, 0x55, 0x5e, 0x10, 0x10, 0x11, 0x93, 0xc5, - 0xe4, 0xc1, 0x75, 0x55, 0xaf, 0x10, 0x20, 0x25, 0x77, 0xb9, 0xa7, 0x4b, 0xc4, 0xb2, 0x6d, 0xaf, - 0x93, 0x7b, 0xf0, 0x87, 0x08, 0x84, 0x02, 0xa2, 0x22, 0x5c, 0x43, 0xeb, 0x4d, 0xcd, 0xf7, 0x96, - 0xfd, 0xf0, 0x46, 0x26, 0xf7, 0xa5, 0x7e, 0x08, 0xa4, 0xd2, 0xef, 0x55, 0xcb, 0xe5, 0xc1, 0xfc, - 0xba, 0x6b, 0x26, 0x10, 0x0a, 0x19, 0xa1, 0x36, 0x05, 0xe6, 0x72, 0x77, 0x26, 0x17, 0x9f, 0xc5, - 0xbb, 0x8a, 0xce, 0x5c, 0x22, 0x08, 0x04, 0x17, 0x4d, 0xbd, 0x27, 0xc4, 0x84, 0x02, 0x25, 0xbd, - 0xf7, 0x79, 0xb1, 0xa9, 0xf0, 0x51, 0xdd, 0xdd, 0xdd, 0xea, 0xb8, 0x4a, 0xab, 0x5b, 0xb8, 0xae, - 0x39, 0x10, 0x11, 0x2e, 0x60, 0xe7, 0xac, 0x47, 0xcc, 0x7b, 0x9a, 0xbe, 0x24, 0x48, 0xbd, 0xdd, - 0xdd, 0xdd, 0xf8, 0x44, 0x25, 0x55, 0x33, 0x1b, 0xdf, 0xe1, 0x4d, 0xef, 0x93, 0xde, 0xf9, 0x7e, - 0x64, 0x3b, 0xe2, 0x11, 0x1e, 0xa2, 0x7c, 0x4d, 0x91, 0xef, 0xf0, 0x9e, 0xab, 0x77, 0x7f, 0x10, - 0x5b, 0xda, 0x6b, 0x10, 0x20, 0x15, 0x97, 0x31, 0x05, 0x52, 0xb4, 0x6c, 0x49, 0x9c, 0xfd, 0xf0, - 0x5b, 0xad, 0x76, 0xcd, 0xad, 0xe1, 0x01, 0xc5, 0x99, 0xa0, 0x2f, 0xab, 0x25, 0x89, 0xf5, 0xc2, - 0x01, 0x00, 0x5d, 0x47, 0x5a, 0xd4, 0x99, 0xdf, 0x1d, 0xe7, 0x82, 0xab, 0x30, 0xbf, 0x4d, 0x7c, - 0x23, 0x52, 0x66, 0x6c, 0x50, 0xad, 0x59, 0x05, 0x5a, 0xbc, 0x48, 0xf2, 0x55, 0x59, 0x33, 0x57, - 0xbf, 0xc4, 0xde, 0xec, 0xd6, 0xbf, 0x16, 0x77, 0xbb, 0xee, 0xfe, 0x6a, 0xa7, 0xe2, 0x44, 0x10, - 0x44, 0x6a, 0x4b, 0x77, 0x0c, 0xc2, 0x86, 0x77, 0x4e, 0xd8, 0xc4, 0xbd, 0x3d, 0x37, 0x78, 0xad, - 0x5e, 0x21, 0xe4, 0xf0, 0x8f, 0x62, 0x52, 0x49, 0xe6, 0x86, 0x02, 0x01, 0x41, 0x02, 0x98, 0xcd, - 0x02, 0x95, 0xba, 0xc3, 0xc5, 0x42, 0xb2, 0x80, 0x28, 0x17, 0x62, 0x8c, 0x5b, 0x3e, 0x16, 0xb9, - 0x95, 0x29, 0x71, 0x21, 0x85, 0xef, 0x12, 0x13, 0x12, 0x5e, 0xef, 0x5d, 0x78, 0x44, 0x96, 0x66, - 0x63, 0xc2, 0x21, 0x00, 0x4f, 0xbd, 0xf7, 0x7a, 0xac, 0x33, 0xc4, 0x86, 0x3e, 0x0a, 0x73, 0xfb, - 0x61, 0x6d, 0x50, 0xe4, 0xb8, 0x98, 0xcd, 0x8d, 0xbf, 0xc1, 0x38, 0x87, 0x76, 0xab, 0xaf, 0x71, - 0x10, 0x54, 0x25, 0x3b, 0xbb, 0x97, 0xbd, 0xd6, 0xad, 0xc4, 0x08, 0x09, 0xf2, 0xfd, 0x37, 0x77, - 0xe2, 0x01, 0x75, 0xee, 0xf5, 0xaf, 0x78, 0x91, 0x37, 0xdb, 0x53, 0x75, 0x77, 0xf7, 0x9f, 0x6d, - 0xae, 0x11, 0xd6, 0xeb, 0x55, 0x54, 0x39, 0x7e, 0x10, 0x8f, 0x22, 0x8b, 0xf7, 0xb9, 0x7d, 0xf8, - 0x9b, 0xbd, 0xf8, 0x8b, 0xbd, 0xbf, 0x8c, 0x2d, 0x6d, 0xaa, 0xe9, 0x2e, 0xaa, 0xab, 0xe0, 0xa4, - 0xa2, 0xf2, 0x23, 0x8e, 0xc5, 0x18, 0xc7, 0xe9, 0x2d, 0xb8, 0x88, 0x43, 0xdd, 0x25, 0xc5, 0xd3, - 0xaf, 0x12, 0x24, 0x12, 0xc5, 0xd4, 0x5d, 0x58, 0x72, 0xbe, 0xf8, 0x29, 0xcf, 0x02, 0xe4, 0x66, - 0xeb, 0xaa, 0x9b, 0x24, 0xc6, 0xe2, 0x44, 0xfc, 0x84, 0x24, 0x2a, 0x8b, 0xc2, 0x25, 0xd2, 0x56, - 0xc6, 0xac, 0x7e, 0xa4, 0xfc, 0x20, 0xef, 0x63, 0xa8, 0x90, 0x88, 0x4b, 0xbb, 0xaa, 0xaa, 0xf1, - 0x01, 0x11, 0x8d, 0xc6, 0xd9, 0x63, 0x7b, 0xbd, 0x6f, 0xf0, 0xd9, 0x43, 0x2f, 0x65, 0x04, 0x6b, - 0x21, 0x09, 0x89, 0x85, 0x62, 0xc1, 0x82, 0x09, 0x07, 0xe7, 0xe2, 0x8b, 0x97, 0x2f, 0xa8, 0xce, - 0x13, 0xae, 0xb3, 0x53, 0x50, 0x40, 0x20, 0x28, 0x20, 0x1e, 0xbc, 0x1f, 0x7a, 0x8a, 0x6b, 0x07, - 0xde, 0x0d, 0xdc, 0xff, 0x36, 0x89, 0x6a, 0x77, 0x8c, 0x6f, 0x8e, 0x91, 0x4a, 0xa6, 0x23, 0x07, - 0x85, 0x0d, 0x1a, 0xec, 0x73, 0x7f, 0x10, 0x24, 0x49, 0x76, 0xdb, 0x5a, 0xf8, 0x8f, 0x8a, 0xbb, - 0xc5, 0x72, 0xff, 0x12, 0x26, 0x83, 0x44, 0x28, 0x21, 0xb9, 0x4b, 0x3f, 0xef, 0xfb, 0x1c, 0x40, - 0x92, 0x56, 0x6f, 0xe2, 0x7c, 0x48, 0x25, 0xbd, 0xd0, 0x08, 0xbe, 0xec, 0x7c, 0xc7, 0x78, 0x92, - 0x08, 0xd1, 0xae, 0x26, 0x26, 0xaa, 0x2e, 0x2e, 0xa4, 0xeb, 0xe2, 0x22, 0xb5, 0x55, 0x55, 0xac, - 0x35, 0x38, 0x08, 0x7c, 0xba, 0x85, 0xb5, 0x65, 0xea, 0x68, 0x22, 0x9f, 0x7f, 0x12, 0x6a, 0xaf, - 0xc4, 0x84, 0xab, 0x55, 0x76, 0xca, 0xc7, 0x88, 0x88, 0xaa, 0xae, 0xee, 0xf8, 0x88, 0x2a, 0xbb, - 0xee, 0x7c, 0xaa, 0xad, 0x5b, 0x88, 0x82, 0xbb, 0xb7, 0xaa, 0xf1, 0x78, 0xbb, 0x7c, 0x27, 0xab, - 0xa9, 0x3b, 0xfe, 0x14, 0x38, 0x9c, 0x0d, 0x8a, 0x5e, 0x5f, 0x64, 0x4e, 0xa2, 0xea, 0xa8, 0xa5, - 0x6f, 0xf0, 0x55, 0x8b, 0xad, 0x35, 0x55, 0x55, 0x55, 0x6c, 0x2a, 0xe0, 0x95, 0x2a, 0x25, 0x67, - 0xfd, 0x9d, 0x1e, 0xa9, 0xf0, 0x88, 0x2b, 0x8b, 0xa8, 0xa6, 0xab, 0x4a, 0xb4, 0x92, 0xef, 0xb2, - 0x2c, 0xaa, 0xe2, 0x21, 0x3b, 0xb7, 0x75, 0xd7, 0xc6, 0x09, 0x6d, 0xb6, 0xaa, 0xaa, 0xab, 0x27, - 0x6d, 0x55, 0x57, 0xc2, 0x06, 0x5a, 0xf5, 0x53, 0x62, 0xca, 0xc5, 0x61, 0x1b, 0x6b, 0x30, 0x80, - 0x63, 0x84, 0x02, 0x0e, 0x5f, 0x7e, 0x24, 0x20, 0xef, 0xbe, 0x19, 0x10, 0x0a, 0x85, 0x62, 0x70, - 0xc4, 0x70, 0x66, 0x8a, 0x3f, 0xeb, 0xbb, 0x1c, 0xa1, 0x4e, 0x09, 0x04, 0xa8, 0xb8, 0xb8, 0x18, - 0xb0, 0x5d, 0xee, 0x24, 0x30, 0x24, 0x64, 0x75, 0xa7, 0x24, 0x7f, 0x12, 0x10, 0xe2, 0x04, 0x90, - 0x49, 0x14, 0xd7, 0xe2, 0xca, 0xd6, 0x5a, 0x5d, 0xdf, 0xc5, 0xef, 0x7a, 0x6c, 0x65, 0xf8, 0x91, - 0x00, 0xa0, 0x43, 0xae, 0xba, 0xaf, 0x61, 0x66, 0x24, 0x31, 0x39, 0xff, 0xeb, 0x5f, 0xfb, 0xbb, - 0xbb, 0x6b, 0xb9, 0x72, 0xfc, 0x40, 0x81, 0x55, 0xae, 0xb5, 0x5c, 0x9b, 0xcb, 0x0f, 0x31, 0x1d, - 0xef, 0xc4, 0x08, 0xd0, 0xde, 0xa2, 0xfe, 0x20, 0x41, 0x0b, 0xbb, 0xf9, 0x6a, 0xbe, 0x10, 0x85, - 0x3c, 0xdf, 0x55, 0xad, 0x55, 0x69, 0xfb, 0xe1, 0x2d, 0x6a, 0x87, 0xbf, 0x10, 0xe9, 0xd2, 0xe1, - 0x08, 0x25, 0x9b, 0xa7, 0xd5, 0x4d, 0xdb, 0xc4, 0x05, 0x0a, 0x23, 0xe0, 0xcb, 0x32, 0x73, 0x66, - 0x5a, 0x93, 0xfa, 0xdb, 0xf7, 0xc1, 0x65, 0x56, 0xab, 0xaa, 0xaa, 0xaf, 0x57, 0x09, 0x4d, 0xb9, - 0x62, 0xeb, 0xaf, 0xf8, 0x45, 0xef, 0x7c, 0x40, 0x91, 0xd1, 0x71, 0x7d, 0x45, 0xc5, 0xc5, 0xeb, - 0x5c, 0x10, 0x89, 0x13, 0xad, 0x69, 0xaa, 0xe0, 0x87, 0xe1, 0x90, 0x57, 0xd5, 0x31, 0x71, 0x07, - 0xac, 0xb5, 0x51, 0x7e, 0xf8, 0xb3, 0x56, 0xe4, 0xeb, 0x2b, 0x15, 0x38, 0x4e, 0x6c, 0xd6, 0x11, - 0x0c, 0x71, 0x20, 0xa0, 0x15, 0x8c, 0x63, 0x74, 0x29, 0xba, 0xc5, 0xee, 0xbe, 0x89, 0xe0, 0x84, - 0x4e, 0xea, 0xe3, 0xc4, 0xf9, 0x73, 0x6d, 0xfc, 0xbb, 0xdb, 0xf0, 0x49, 0x6a, 0xd7, 0xaf, 0x82, - 0x4a, 0x6d, 0xfd, 0x24, 0x20, 0x08, 0x07, 0x0c, 0xa7, 0x2f, 0x12, 0xfe, 0xb5, 0x8a, 0xf5, 0xc1, - 0x11, 0xef, 0x66, 0xfe, 0x21, 0xde, 0xef, 0x88, 0x10, 0x63, 0xea, 0xb8, 0x8a, 0x23, 0xfc, 0x60, - 0x8a, 0xb6, 0xab, 0x5b, 0xdf, 0x13, 0x61, 0xbf, 0x89, 0x30, 0xbd, 0x37, 0xf3, 0x1f, 0x9b, 0x57, - 0x77, 0x6e, 0xdf, 0x84, 0xef, 0x7b, 0x6b, 0xf8, 0x27, 0xaa, 0xfa, 0xa7, 0xdf, 0x04, 0x46, 0x77, - 0xbf, 0x7c, 0xdd, 0x36, 0xf1, 0x02, 0x1d, 0xdd, 0xdf, 0x10, 0x20, 0x85, 0xce, 0xc7, 0x08, 0x41, - 0x5e, 0x9b, 0x69, 0xad, 0x39, 0xba, 0x1f, 0xdc, 0x14, 0x02, 0x00, 0xa1, 0xf5, 0x55, 0x07, 0x6f, - 0x1a, 0xa0, 0xbd, 0x5c, 0x9f, 0x8f, 0xef, 0x10, 0x09, 0x08, 0xda, 0xb7, 0xf5, 0x62, 0x15, 0xbc, - 0x40, 0x27, 0xea, 0x4e, 0xb2, 0xaa, 0xdc, 0x48, 0x44, 0x75, 0x56, 0x55, 0x6b, 0x55, 0x5f, 0x90, - 0x8f, 0xbc, 0x34, 0xa1, 0x23, 0xdc, 0xdf, 0xfd, 0xbf, 0x7f, 0x93, 0x5a, 0xf1, 0x1e, 0x24, 0x59, - 0x5e, 0xd3, 0xe5, 0x63, 0x88, 0x10, 0xea, 0xaa, 0xb8, 0x60, 0x49, 0x0c, 0xbb, 0xe2, 0x21, 0x1a, - 0xdb, 0xb9, 0xfd, 0xe9, 0x2a, 0xf1, 0x20, 0x80, 0x21, 0xbd, 0xa4, 0xdb, 0xd6, 0xab, 0xc4, 0x16, - 0xaa, 0xbc, 0x22, 0x11, 0xe2, 0x61, 0x12, 0x13, 0x5c, 0x5b, 0x7d, 0xdd, 0x8f, 0x17, 0x09, 0x42, - 0x01, 0x80, 0xa4, 0x56, 0x7d, 0x77, 0x75, 0x4f, 0xd6, 0xa5, 0xf6, 0xf5, 0x6f, 0x82, 0xee, 0x3f, - 0x4b, 0x7b, 0xbd, 0x71, 0x02, 0x49, 0xbd, 0xd4, 0x40, 0x96, 0x7b, 0x75, 0x58, 0x44, 0x12, 0x1a, - 0x5c, 0x41, 0x16, 0xef, 0xe2, 0x02, 0x06, 0x15, 0xdd, 0xec, 0xf9, 0x69, 0xa5, 0x6b, 0xc4, 0xb1, - 0x6a, 0xbe, 0x26, 0x52, 0xad, 0x6b, 0x10, 0x42, 0x9b, 0xaa, 0x6b, 0xe1, 0x2a, 0xaa, 0xeb, 0x5f, - 0x19, 0x55, 0xaa, 0x4e, 0xeb, 0x5a, 0xd5, 0x7c, 0x40, 0x2e, 0xaa, 0xaa, 0xd3, 0x6f, 0xdf, 0x11, - 0x6d, 0x6a, 0xb5, 0x4f, 0x12, 0x11, 0xf8, 0x28, 0x26, 0xab, 0xab, 0x7e, 0xe1, 0x19, 0xad, 0xab, - 0x78, 0xe7, 0x1f, 0xa1, 0x53, 0xe2, 0x0a, 0x6e, 0xaa, 0xab, 0x5e, 0x18, 0x9a, 0xb5, 0xc7, 0x66, - 0x4a, 0xff, 0x19, 0x55, 0x55, 0xd5, 0x56, 0xb4, 0x35, 0x55, 0xc2, 0x21, 0x92, 0x91, 0xbb, 0x7c, - 0x23, 0x1d, 0xa6, 0xde, 0xeb, 0xad, 0x78, 0x60, 0x27, 0xad, 0x78, 0x85, 0x4f, 0x11, 0xe2, 0x3c, - 0x21, 0xc2, 0x3f, 0x8b, 0x25, 0x6b, 0xc5, 0xf8, 0x43, 0x84, 0x03, 0x0e, 0xef, 0xf1, 0x03, 0xc4, - 0xd5, 0x63, 0xbb, 0x87, 0x22, 0x0c, 0x16, 0x55, 0x71, 0x3e, 0x24, 0x4b, 0x35, 0xd0, 0xf8, 0x64, - 0x40, 0x2a, 0x30, 0x9b, 0x0e, 0x66, 0x39, 0xbd, 0xb7, 0x6c, 0xbd, 0xff, 0x28, 0x47, 0x10, 0x34, - 0x82, 0xe4, 0xe2, 0x9e, 0xfc, 0xe9, 0x8b, 0xc9, 0xc1, 0xa2, 0x4a, 0x23, 0xec, 0xa1, 0x48, 0x2c, - 0x5d, 0xb7, 0x72, 0x43, 0xfc, 0x20, 0x2d, 0xd5, 0xf5, 0x51, 0x7c, 0x9d, 0xf1, 0x01, 0x11, 0x62, - 0x34, 0xdf, 0x15, 0x8a, 0xfc, 0x22, 0x75, 0x4d, 0x6f, 0x77, 0x54, 0xe9, 0xf8, 0x23, 0x2e, 0xef, - 0x5f, 0x05, 0x15, 0x62, 0xba, 0xaf, 0x5c, 0x23, 0x0a, 0x0a, 0xbd, 0xdd, 0xc5, 0x62, 0x5c, 0x71, - 0x59, 0x79, 0xea, 0x87, 0xb7, 0xe9, 0xfc, 0x8b, 0xe0, 0x86, 0xee, 0xfc, 0xdb, 0xe2, 0x44, 0xad, - 0x64, 0xdf, 0xec, 0xa6, 0x62, 0xbe, 0x23, 0x89, 0x96, 0xb5, 0xf8, 0x4b, 0x55, 0x5c, 0x4f, 0xf1, - 0x11, 0x75, 0x53, 0x79, 0xd5, 0x71, 0x02, 0x45, 0xd6, 0x2e, 0xba, 0xae, 0x26, 0x26, 0xaa, 0xda, - 0xaa, 0xaa, 0xf8, 0x28, 0x8b, 0xc5, 0xd5, 0x62, 0xea, 0xd8, 0x4d, 0xc0, 0x0f, 0x7b, 0xae, 0x75, - 0x78, 0x8a, 0xff, 0xfd, 0x17, 0x10, 0x10, 0x05, 0x17, 0x6d, 0xdb, 0x17, 0x51, 0x75, 0xef, 0x82, - 0xce, 0xaa, 0x2e, 0x4e, 0x2e, 0xcf, 0x2b, 0x2b, 0xd8, 0xcc, 0x07, 0x9f, 0xa8, 0x66, 0xe0, 0x84, - 0x40, 0x26, 0xc9, 0x98, 0xba, 0x8b, 0xaf, 0xbc, 0x49, 0xaa, 0x9d, 0xf8, 0x40, 0x84, 0x8b, 0xcc, - 0xc6, 0x10, 0xf8, 0x40, 0xdc, 0x56, 0xfc, 0x48, 0xbe, 0x2b, 0x8f, 0xae, 0x73, 0x85, 0xce, 0x24, - 0x14, 0x08, 0xb4, 0x36, 0xbb, 0xbf, 0x5f, 0x37, 0x51, 0x27, 0x30, 0x88, 0x44, 0xbc, 0x3d, 0xe7, - 0xfe, 0x20, 0xa7, 0xdd, 0xf1, 0x00, 0xa4, 0x25, 0x8b, 0xb6, 0xab, 0x7f, 0x94, 0x97, 0xa7, 0xe5, - 0x3a, 0xbd, 0x38, 0x65, 0x89, 0x00, 0x23, 0x2a, 0xbc, 0xa1, 0x17, 0xbd, 0xff, 0xe9, 0xac, 0x9f, - 0x5f, 0x08, 0x08, 0x55, 0xea, 0xf5, 0xad, 0x70, 0x4e, 0x42, 0xfb, 0x72, 0xa8, 0x9b, 0x5f, 0x83, - 0xe0, 0x8e, 0x1e, 0xf6, 0x1d, 0x10, 0xcb, 0xe1, 0xf1, 0x42, 0xd7, 0x74, 0xf6, 0xcb, 0x00, 0x00, - 0x00, 0x01, 0x41, 0x9a, 0x57, 0x2b, 0xb0, 0x4a, 0x3f, 0x04, 0x82, 0xef, 0x77, 0x21, 0x0e, 0x8b, - 0xd5, 0x08, 0xff, 0xc2, 0x14, 0x78, 0xae, 0x26, 0x8d, 0x14, 0x9d, 0x5c, 0x8f, 0xeb, 0xd1, 0x3d, - 0x0a, 0xaa, 0xe8, 0x4b, 0xd7, 0x20, 0xee, 0x6d, 0x27, 0x41, 0x16, 0x9f, 0xad, 0x57, 0x5a, 0x97, - 0x98, 0x9a, 0x4b, 0x88, 0x08, 0x0b, 0x1c, 0x21, 0x64, 0x61, 0x7c, 0xe0, 0x1c, 0x3f, 0x0a, 0xb9, - 0x27, 0x70, 0xf2, 0x84, 0x70, 0x1c, 0xfa, 0x4f, 0x8f, 0x7f, 0xa3, 0xf7, 0xd7, 0xab, 0xaf, 0x4b, - 0xc2, 0x77, 0xdd, 0xf7, 0x58, 0x47, 0xe8, 0x9d, 0xf5, 0xef, 0xaf, 0x4d, 0xd7, 0xa5, 0x89, 0x13, - 0xf5, 0x8a, 0x61, 0xc4, 0x2d, 0x25, 0xf4, 0x31, 0xfe, 0x8c, 0xff, 0x28, 0xbc, 0x5e, 0x37, 0x12, - 0x6a, 0xd7, 0xea, 0xca, 0x88, 0x08, 0x07, 0xc2, 0x16, 0x33, 0x75, 0xa2, 0x38, 0x9f, 0x67, 0x12, - 0x79, 0x66, 0x91, 0x63, 0x79, 0x56, 0x2f, 0xfc, 0x40, 0x40, 0xbc, 0xb8, 0xd9, 0x3a, 0x0b, 0xfb, - 0x88, 0xfc, 0x12, 0x5d, 0xdd, 0xeb, 0xea, 0x3b, 0x5f, 0x44, 0x78, 0x47, 0xae, 0xab, 0xab, 0x5f, - 0x5a, 0xae, 0xb1, 0x7d, 0x67, 0x7d, 0x5f, 0xec, 0x63, 0x53, 0x64, 0x4f, 0x41, 0x31, 0xda, 0xfb, - 0xae, 0xbe, 0x4a, 0xdf, 0xea, 0x8f, 0x7c, 0x50, 0xee, 0x6f, 0x2b, 0x32, 0xb3, 0xc3, 0x20, 0xac, - 0x50, 0xa1, 0x89, 0xb0, 0x4c, 0x1a, 0x1d, 0x50, 0x70, 0x7b, 0x51, 0x9c, 0x1e, 0x7d, 0x99, 0x18, - 0xaf, 0x7c, 0x4d, 0xcf, 0xd0, 0xd5, 0xd3, 0x7f, 0x8d, 0xd3, 0xd0, 0x4f, 0xaf, 0x10, 0x61, 0x1a, - 0x8d, 0x34, 0x62, 0x43, 0x01, 0x11, 0x92, 0xac, 0x45, 0x25, 0xba, 0x67, 0xf3, 0x2d, 0xd7, 0xc3, - 0x02, 0x2c, 0xc9, 0x8f, 0x5a, 0x32, 0xaa, 0x76, 0xb0, 0x80, 0x20, 0x19, 0x0a, 0x96, 0x85, 0x4d, - 0x10, 0xd4, 0x7e, 0x0e, 0xdc, 0xa2, 0xee, 0x3e, 0xbb, 0xfd, 0x74, 0x19, 0xe9, 0xb0, 0xcc, 0x4f, - 0x46, 0xca, 0x1c, 0xc4, 0x78, 0x96, 0x18, 0x17, 0xc4, 0x7f, 0x88, 0x2d, 0xdd, 0xe4, 0xfe, 0x11, - 0x04, 0x27, 0x12, 0xe3, 0x55, 0x7e, 0x23, 0xc4, 0x09, 0x82, 0xec, 0x47, 0x89, 0x97, 0xd6, 0x10, - 0x12, 0x6a, 0xd5, 0x94, 0x56, 0xd8, 0x67, 0xa0, 0xbb, 0xd7, 0x5e, 0x97, 0xaf, 0x46, 0xe2, 0x0c, - 0x31, 0xef, 0xf1, 0x86, 0x5a, 0xa9, 0xb7, 0x1d, 0x45, 0xd4, 0x5c, 0x5b, 0x6c, 0x5b, 0x3a, 0x9e, - 0x0a, 0x06, 0x45, 0xd0, 0xc5, 0xd5, 0xe8, 0x71, 0x75, 0x95, 0x7b, 0xd7, 0x41, 0x5e, 0xbe, 0x61, - 0x0e, 0xff, 0x08, 0xf8, 0x42, 0x23, 0xa1, 0x2c, 0x1f, 0x5a, 0x97, 0xab, 0x21, 0xde, 0x09, 0xc5, - 0x56, 0xb6, 0xe4, 0xa3, 0xf1, 0x30, 0x88, 0xa0, 0x63, 0x50, 0xbb, 0x28, 0xd4, 0x2e, 0xd7, 0x37, - 0x76, 0x76, 0xe7, 0x84, 0x49, 0x5a, 0xc9, 0xcc, 0x57, 0xbd, 0x44, 0x84, 0x02, 0x46, 0x97, 0x97, - 0xee, 0xe1, 0x44, 0x60, 0x9e, 0xf2, 0x74, 0x17, 0x7f, 0xaf, 0x7d, 0x15, 0xe7, 0xe8, 0x8d, 0xf5, - 0x69, 0x3a, 0xb4, 0x39, 0x89, 0x20, 0xa8, 0x9f, 0xf8, 0x82, 0x08, 0x6d, 0x4f, 0x29, 0xf0, 0x49, - 0x52, 0x66, 0xdf, 0x27, 0x49, 0xf8, 0x80, 0x9f, 0x53, 0x62, 0xaf, 0xe5, 0x35, 0xdf, 0xe2, 0xc6, - 0xee, 0xee, 0xff, 0x10, 0x38, 0x65, 0xef, 0x77, 0xbb, 0x87, 0x1d, 0x27, 0xfe, 0x24, 0xa2, 0xcf, - 0xfb, 0xe8, 0x7b, 0xc2, 0x5d, 0x7a, 0x4e, 0xaf, 0x37, 0x5e, 0x8f, 0xc4, 0x30, 0x83, 0xb4, 0xd7, - 0xd7, 0xbe, 0x6e, 0xee, 0xf1, 0x04, 0xd5, 0x9b, 0xf1, 0x25, 0x11, 0xcd, 0x4f, 0x62, 0xcd, 0xd6, - 0x00, 0x1f, 0xfe, 0x08, 0x47, 0xa6, 0xfc, 0x5e, 0x19, 0x84, 0xc6, 0x2e, 0x29, 0xba, 0xf4, 0x25, - 0xd6, 0xa8, 0x35, 0x0a, 0x00, 0x03, 0x1b, 0x85, 0x27, 0x5a, 0xdf, 0xb2, 0x1f, 0xed, 0xf5, 0x83, - 0xd7, 0x07, 0xdc, 0xb4, 0x53, 0xe1, 0xd3, 0xe6, 0x4e, 0x24, 0x20, 0x26, 0xb7, 0x72, 0xc0, 0x6e, - 0x58, 0x0c, 0x48, 0xfe, 0x20, 0xdb, 0xdf, 0x12, 0x08, 0x02, 0x27, 0x55, 0x55, 0x77, 0x15, 0x88, - 0x58, 0x2e, 0x1c, 0xe1, 0x60, 0xcb, 0x01, 0xe2, 0x44, 0x8b, 0x88, 0x1c, 0x48, 0xb0, 0x62, 0x83, - 0x59, 0x72, 0xb1, 0x1e, 0x26, 0xfa, 0x1f, 0x51, 0x5d, 0x6a, 0x37, 0xab, 0xc5, 0x75, 0xd9, 0x16, - 0x1d, 0x85, 0x80, 0x02, 0xd6, 0x16, 0x10, 0xbb, 0x72, 0x31, 0x47, 0x85, 0xcd, 0xfe, 0x0b, 0x78, - 0x66, 0xbc, 0x78, 0x60, 0x28, 0x8f, 0xc5, 0xa7, 0xed, 0xff, 0x14, 0x33, 0x31, 0x0c, 0xd8, 0x33, - 0xf0, 0xdd, 0xe4, 0xdb, 0x7c, 0xbc, 0xa3, 0xaa, 0x48, 0x00, 0x32, 0xd7, 0xb8, 0xfa, 0xe7, 0x3f, - 0x6e, 0x9e, 0x24, 0x30, 0x32, 0x24, 0x07, 0x96, 0x31, 0x20, 0xe1, 0x60, 0xf6, 0xd7, 0x14, 0x60, - 0x34, 0x43, 0x42, 0x10, 0x91, 0x3c, 0x3d, 0x4d, 0xfb, 0x1e, 0x24, 0x56, 0xf7, 0x4d, 0xe5, 0xf8, - 0x44, 0x20, 0x30, 0xa2, 0xbb, 0x15, 0xc5, 0x62, 0x83, 0x10, 0xf3, 0x80, 0x07, 0x8a, 0x31, 0x03, - 0x85, 0x80, 0x31, 0x44, 0x6b, 0x08, 0x8f, 0xbb, 0x4e, 0x2c, 0x35, 0xbd, 0xe8, 0x26, 0x53, 0x24, - 0xc0, 0xc3, 0xdc, 0x60, 0x40, 0x85, 0x0a, 0xed, 0x14, 0x5a, 0x97, 0xad, 0xc3, 0x75, 0x62, 0x93, - 0x00, 0x38, 0x1e, 0xc6, 0x0c, 0x6f, 0xab, 0x73, 0x83, 0x82, 0x05, 0x2a, 0x0c, 0x9c, 0x5e, 0x3c, - 0xf9, 0x30, 0xe0, 0xe0, 0x71, 0xbe, 0x58, 0x97, 0xce, 0x1f, 0x7d, 0x0f, 0xe8, 0x47, 0xaf, 0x4f, - 0xd7, 0xaf, 0xab, 0x42, 0x58, 0x83, 0x04, 0xa6, 0xef, 0x17, 0x12, 0x30, 0x84, 0xa3, 0x52, 0x77, - 0x05, 0xe8, 0x2a, 0xca, 0x1e, 0x1b, 0xc1, 0xc2, 0x4f, 0x89, 0x38, 0x51, 0xc5, 0xe2, 0xea, 0xa7, - 0xd8, 0x48, 0x67, 0x52, 0x77, 0x31, 0x01, 0x91, 0xd7, 0x35, 0x59, 0x17, 0x20, 0xe7, 0xe6, 0x57, - 0x7e, 0x30, 0x64, 0xef, 0xf1, 0x01, 0x92, 0x65, 0xff, 0x8c, 0x9c, 0x03, 0xc0, 0x70, 0xef, 0x18, - 0xaa, 0x18, 0x2a, 0xe4, 0x55, 0xf8, 0x44, 0xbc, 0x98, 0x00, 0x70, 0x98, 0x7b, 0x8e, 0x56, 0x44, - 0x1f, 0xce, 0xb2, 0xcb, 0xae, 0x28, 0xc3, 0x12, 0xc9, 0xa8, 0x50, 0x56, 0x75, 0xdc, 0xd3, 0x19, - 0xa3, 0xf8, 0x80, 0x95, 0x10, 0x7e, 0x5f, 0x97, 0x32, 0x4e, 0xb3, 0x89, 0x08, 0x09, 0x13, 0x77, - 0xbe, 0xbe, 0x42, 0x3b, 0xfe, 0x5b, 0xcf, 0x08, 0x77, 0xa0, 0xab, 0xc4, 0x75, 0x7a, 0xea, 0xf5, - 0xd5, 0xeb, 0xaf, 0x5c, 0x45, 0x0e, 0x7f, 0x8c, 0x34, 0x12, 0x31, 0xec, 0xc4, 0x3c, 0xac, 0x63, - 0x29, 0x71, 0x1e, 0xde, 0x99, 0x3c, 0x90, 0x58, 0x99, 0x2d, 0x5e, 0x11, 0x19, 0x10, 0xf9, 0xa5, - 0x9c, 0x30, 0x97, 0x1d, 0x00, 0xaa, 0xb0, 0x26, 0xa6, 0x10, 0x54, 0xdc, 0xc9, 0x68, 0x1f, 0x73, - 0x24, 0xd9, 0x39, 0x6e, 0xe4, 0xc0, 0xa9, 0xe0, 0x39, 0x65, 0xbc, 0x20, 0x19, 0x19, 0xed, 0xc3, - 0xb7, 0xe5, 0xbe, 0xdf, 0xe5, 0x83, 0x2c, 0x62, 0x5c, 0x2d, 0x96, 0xef, 0xe1, 0x81, 0x67, 0xa8, - 0xb8, 0xba, 0xba, 0xab, 0xe5, 0xe1, 0x95, 0x4a, 0x64, 0xe8, 0x6b, 0xcd, 0xd5, 0xe2, 0x7a, 0xbd, - 0xf5, 0xe8, 0xde, 0xbd, 0x37, 0x5d, 0x4b, 0xc8, 0x14, 0x27, 0xf9, 0x7a, 0xaa, 0x7a, 0x0d, 0x37, - 0x10, 0x3b, 0x22, 0x74, 0xc3, 0x23, 0x52, 0x16, 0x92, 0x7e, 0x62, 0xde, 0x9f, 0xd9, 0xcf, 0x95, - 0xf0, 0x40, 0x12, 0xbb, 0xbb, 0xcd, 0xad, 0x7c, 0x48, 0xf3, 0x96, 0x31, 0x23, 0x97, 0xb5, 0xd5, - 0x55, 0x70, 0x88, 0x38, 0x19, 0x55, 0x55, 0x5d, 0xd4, 0x5d, 0x22, 0x7b, 0xdf, 0x13, 0xae, 0x61, - 0xd7, 0x9f, 0x3c, 0xa2, 0x4f, 0xef, 0x51, 0x2f, 0x43, 0xde, 0x20, 0x5a, 0xd1, 0xbf, 0xab, 0xc5, - 0x75, 0x78, 0x9e, 0xaf, 0x30, 0x45, 0x84, 0x69, 0x7f, 0x5a, 0xa8, 0x91, 0x00, 0x90, 0x10, 0x25, - 0x46, 0x43, 0xcd, 0xc4, 0x88, 0xbe, 0x63, 0x6e, 0xfc, 0x40, 0x23, 0xd8, 0x86, 0x71, 0x0b, 0xab, - 0x90, 0x5d, 0xd7, 0xe4, 0x39, 0x14, 0x4f, 0xec, 0xcb, 0x2a, 0xab, 0x96, 0xab, 0x5f, 0x25, 0x3e, - 0xf8, 0x98, 0x91, 0x4a, 0xb2, 0x63, 0x7b, 0xfc, 0xa5, 0xdd, 0xc1, 0x34, 0x47, 0x88, 0x96, 0x7f, - 0xfc, 0x27, 0x4b, 0x49, 0x62, 0xf5, 0x88, 0x20, 0x9b, 0xb7, 0xe2, 0x3c, 0x49, 0x07, 0x1e, 0x16, - 0xe8, 0x3f, 0x17, 0xcf, 0x82, 0x1a, 0x44, 0xb0, 0x2c, 0x3e, 0x23, 0xc4, 0xff, 0xc4, 0x84, 0xc2, - 0x2b, 0x5a, 0xea, 0xbb, 0xae, 0xda, 0x89, 0x9a, 0xf7, 0x7c, 0x4f, 0x89, 0xf1, 0x02, 0x0a, 0x6c, - 0xfe, 0x08, 0xe1, 0x0a, 0xe1, 0xf3, 0x6a, 0xbc, 0x4c, 0x12, 0x5e, 0xfb, 0xf1, 0x01, 0x19, 0x30, - 0x80, 0x21, 0x18, 0x0f, 0x78, 0x5c, 0x39, 0x05, 0x5e, 0x4f, 0xe2, 0x05, 0x77, 0x10, 0xe3, 0xdf, - 0xe3, 0x0b, 0x76, 0x9c, 0xbf, 0xe5, 0xfd, 0xdd, 0xf8, 0x44, 0x70, 0xda, 0x9d, 0x46, 0xb5, 0x5b, - 0xbb, 0xa8, 0x81, 0x12, 0xc2, 0x02, 0x2a, 0x20, 0x40, 0x4c, 0x45, 0x6a, 0x6a, 0x2f, 0xc4, 0x14, - 0x86, 0xc6, 0xab, 0xc4, 0x43, 0xf1, 0x1f, 0xdc, 0x4c, 0xc2, 0xd3, 0x77, 0xf0, 0x8b, 0x31, 0x72, - 0xfc, 0x48, 0x9e, 0x11, 0x12, 0x41, 0x7a, 0xaf, 0x84, 0x8c, 0xf7, 0xea, 0xbe, 0xaf, 0x51, 0x3f, - 0x12, 0xee, 0xf9, 0xb8, 0x21, 0x3e, 0xdb, 0xbf, 0xc1, 0x21, 0x95, 0x7e, 0xe2, 0x22, 0xea, 0xba, - 0xaa, 0xaf, 0x10, 0x30, 0x5a, 0x8b, 0xd5, 0x6a, 0x4e, 0xa2, 0x38, 0x2f, 0x33, 0x2a, 0xbe, 0x11, - 0xa9, 0x77, 0xd5, 0x55, 0x57, 0xe0, 0xa8, 0x21, 0x2d, 0x17, 0x7b, 0xe2, 0x58, 0x7d, 0xe2, 0x3e, - 0x50, 0xcb, 0xbb, 0xb8, 0x73, 0x08, 0x21, 0x15, 0xc4, 0x84, 0x10, 0xaa, 0xa8, 0x9d, 0x44, 0xc1, - 0x26, 0xdb, 0xdf, 0xc4, 0x3a, 0xa6, 0xb5, 0x89, 0x16, 0x5b, 0x4a, 0xad, 0x57, 0x88, 0xb2, 0x2a, - 0xfe, 0x5a, 0xaa, 0xfc, 0x95, 0xaf, 0x10, 0x22, 0xb9, 0x06, 0xbb, 0xdc, 0x9c, 0x41, 0x1d, 0xef, - 0x77, 0xf1, 0x06, 0x10, 0xda, 0xd7, 0xc7, 0xde, 0xf2, 0x62, 0xd5, 0x55, 0x57, 0x08, 0x04, 0x01, - 0x19, 0xd5, 0x7e, 0xc3, 0x18, 0x25, 0x15, 0x54, 0x6d, 0xb4, 0xf3, 0x1f, 0xfd, 0xae, 0xdc, 0x33, - 0x35, 0x6e, 0xfe, 0x0b, 0x35, 0x55, 0xd5, 0x75, 0x4b, 0xbe, 0x09, 0x45, 0x2a, 0x75, 0x7d, 0xfb, - 0x84, 0x65, 0xaa, 0xcf, 0x00, 0xe7, 0x0e, 0x1d, 0xf4, 0x41, 0x27, 0x13, 0x56, 0x85, 0xfe, 0x1a, - 0xc1, 0x5d, 0x0f, 0x7f, 0xdb, 0xfb, 0x81, 0xdc, 0xc6, 0x64, 0xe2, 0x89, 0x57, 0x5a, 0xd7, 0xd9, - 0x49, 0xf1, 0xe2, 0xb0, 0xc3, 0x9b, 0x09, 0xa8, 0x04, 0x62, 0x2d, 0x16, 0x98, 0xfd, 0xfb, 0xbf, - 0x9f, 0xbf, 0xbd, 0xe1, 0x00, 0x88, 0x21, 0xd3, 0x6e, 0xde, 0x11, 0x25, 0x2a, 0x13, 0xf9, 0x6b, - 0x30, 0x60, 0x3e, 0x11, 0xa8, 0x8f, 0xcb, 0xdd, 0xf1, 0x1a, 0xe2, 0xc4, 0xbb, 0xdd, 0xdd, 0xfe, - 0x41, 0xd5, 0xaf, 0x82, 0xe1, 0x68, 0x29, 0xb1, 0x55, 0x6b, 0xdc, 0x23, 0x35, 0x6b, 0xc4, 0x42, - 0x85, 0x55, 0xd5, 0x56, 0xab, 0xae, 0xbd, 0xf0, 0x42, 0x45, 0x5d, 0xb0, 0xd3, 0x84, 0x85, 0xd6, - 0x69, 0x9b, 0x7d, 0x3d, 0xb6, 0xfe, 0xb8, 0x91, 0x04, 0xaa, 0xfc, 0x42, 0x19, 0x5c, 0x48, 0x80, - 0x53, 0xb4, 0xb3, 0x63, 0x44, 0xcd, 0xed, 0x49, 0x43, 0x78, 0x80, 0x44, 0x26, 0xef, 0xac, 0x34, - 0xe0, 0x10, 0x3f, 0xff, 0xff, 0xaf, 0xfe, 0x9f, 0x7e, 0xe2, 0x6e, 0xef, 0xbe, 0x5d, 0xee, 0xe2, - 0x44, 0x12, 0xa2, 0x9c, 0x5f, 0xc4, 0x46, 0x10, 0x73, 0x55, 0x17, 0x5e, 0x24, 0x5d, 0xde, 0xef, - 0x15, 0xfc, 0xd7, 0xbf, 0x13, 0xf9, 0x4f, 0xbb, 0xa8, 0x8d, 0x72, 0x1b, 0x77, 0xf2, 0x15, 0xdf, - 0xf3, 0x0a, 0x55, 0xf1, 0x10, 0x80, 0xba, 0x64, 0xf3, 0x2a, 0xaa, 0xb5, 0xf8, 0xfa, 0xad, 0x69, - 0x56, 0xab, 0x5d, 0xd5, 0x56, 0xa2, 0x37, 0x13, 0x05, 0x06, 0xc5, 0x72, 0xff, 0x50, 0xcf, 0x0e, - 0x73, 0xea, 0x60, 0x4a, 0x9e, 0x36, 0x89, 0xfe, 0x27, 0x96, 0x0d, 0x6e, 0xfc, 0x41, 0x8e, 0xf7, - 0xb8, 0x99, 0x6f, 0x7f, 0x82, 0x8b, 0xbd, 0xde, 0xef, 0xbd, 0x71, 0xd7, 0x71, 0x59, 0xe0, 0xfb, - 0xb7, 0xdb, 0xc4, 0x08, 0xe2, 0x7f, 0x77, 0x7f, 0xd1, 0x1f, 0xe5, 0x2e, 0xe7, 0xfe, 0x5d, 0xba, - 0x93, 0x9b, 0x77, 0x7e, 0x20, 0x48, 0x87, 0xbb, 0xbd, 0xf8, 0x8f, 0x13, 0x12, 0x25, 0x6b, 0xaa, - 0xf1, 0x11, 0xd5, 0x55, 0xae, 0xb2, 0x61, 0xb2, 0xaf, 0x25, 0x6b, 0xf0, 0x85, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x6b, 0x88, 0xaa, 0xeb, 0x5a, 0xe4, 0xbb, 0xbf, 0x88, 0x86, 0x62, 0x21, 0x31, 0x0b, - 0xad, 0xef, 0xc4, 0x14, 0xbb, 0x9f, 0xe2, 0x6c, 0xae, 0xf7, 0x7d, 0xdd, 0xde, 0xb8, 0x81, 0x8f, - 0x7b, 0xda, 0xf9, 0x44, 0xb7, 0xb7, 0xc4, 0x04, 0xcb, 0xa6, 0x7d, 0x77, 0xba, 0xe6, 0xee, 0xeb, - 0x8a, 0xdb, 0xa7, 0xb6, 0xa4, 0xec, 0xcb, 0xaf, 0x84, 0xf7, 0xbd, 0x64, 0xfe, 0x08, 0x8a, 0xaa, - 0xab, 0xdc, 0x44, 0xba, 0xd7, 0x13, 0x05, 0x85, 0x5a, 0xd5, 0x6b, 0x5a, 0xb7, 0xcd, 0x5a, 0xfc, - 0x7e, 0xab, 0xe6, 0xc5, 0x95, 0x5f, 0x17, 0x55, 0xaa, 0xd7, 0xe6, 0x25, 0xb5, 0x96, 0x24, 0x41, - 0x05, 0x3b, 0xbb, 0x85, 0xe2, 0x3f, 0x14, 0x57, 0x77, 0xbd, 0xfe, 0x09, 0x0f, 0x33, 0x15, 0x7f, - 0x82, 0x1d, 0xb7, 0x6d, 0xfe, 0x22, 0xee, 0xee, 0xf7, 0xaf, 0xf7, 0xbd, 0xf8, 0x8f, 0x13, 0xe2, - 0x1d, 0x3b, 0x55, 0xd5, 0xfe, 0x13, 0xab, 0xad, 0x0d, 0x0d, 0x0d, 0x0c, 0xdc, 0x16, 0xd7, 0x5d, - 0x6b, 0xdf, 0x04, 0x95, 0x5f, 0xbe, 0x5d, 0x55, 0x7d, 0x17, 0xbe, 0x12, 0xd5, 0x55, 0x75, 0xf1, - 0x75, 0x55, 0xaa, 0x93, 0x35, 0xcc, 0x45, 0xaa, 0xe2, 0x66, 0x2a, 0xea, 0xb0, 0x85, 0x71, 0x02, - 0xaf, 0x77, 0x2a, 0xa7, 0xf1, 0x30, 0x47, 0x3f, 0x57, 0x80, 0xd4, 0x2b, 0x11, 0x1f, 0x97, 0xae, - 0xab, 0xd4, 0x82, 0xdf, 0x8c, 0xaa, 0x3e, 0xaa, 0xa9, 0x6f, 0x5a, 0xe2, 0x44, 0x2f, 0x78, 0x9f, - 0x10, 0x13, 0x29, 0xb3, 0xb5, 0xbe, 0x26, 0xfb, 0x4b, 0xff, 0x5e, 0x93, 0x11, 0xe2, 0x3c, 0x41, - 0x89, 0xaa, 0x9b, 0x94, 0xab, 0x55, 0xe1, 0x05, 0xf7, 0xc2, 0x87, 0xaa, 0xad, 0x55, 0x55, 0x55, - 0x31, 0x75, 0xaf, 0xbe, 0x5a, 0xd3, 0xfa, 0xf7, 0xc1, 0x26, 0xb5, 0x6f, 0x90, 0x8d, 0x2d, 0x2c, - 0x4d, 0xd3, 0x3f, 0x27, 0xf1, 0x11, 0x42, 0x55, 0x55, 0x55, 0x55, 0x54, 0x22, 0x27, 0x84, 0x25, - 0x22, 0xd7, 0x88, 0xf8, 0x8f, 0x10, 0x41, 0x8b, 0xbf, 0x94, 0xf8, 0x2f, 0x5d, 0x84, 0xe2, 0x3f, - 0x62, 0xa7, 0xe9, 0xfe, 0x8f, 0xde, 0x23, 0xf5, 0x88, 0x36, 0xaa, 0xab, 0x94, 0x4d, 0xef, 0xc4, - 0x78, 0x8f, 0x12, 0xbd, 0x5c, 0x23, 0x7b, 0xbd, 0xab, 0x4d, 0x35, 0x7c, 0x4c, 0x41, 0x9e, 0xee, - 0xa2, 0xff, 0x89, 0xee, 0xee, 0xee, 0xf8, 0x91, 0x15, 0x12, 0x23, 0x89, 0x08, 0x02, 0x22, 0xbe, - 0xbd, 0xc4, 0xd7, 0xdf, 0x04, 0x59, 0xbf, 0xdc, 0x4c, 0x26, 0x79, 0x61, 0xad, 0x54, 0x94, 0x9c, - 0x4c, 0x15, 0xd5, 0x56, 0xbb, 0x7a, 0xab, 0x70, 0xcc, 0xdd, 0xb4, 0xf1, 0x32, 0x91, 0x75, 0xf1, - 0x7a, 0xd9, 0x3a, 0xaf, 0x11, 0x27, 0x75, 0xf1, 0x25, 0x46, 0xba, 0xaf, 0xe1, 0x2d, 0x92, 0xaa, - 0xd5, 0x54, 0x48, 0x21, 0x0a, 0x56, 0x6f, 0x7b, 0xd4, 0x2f, 0xb1, 0xfa, 0xaf, 0x71, 0x1f, 0x08, - 0x17, 0x54, 0xbc, 0x47, 0x12, 0x22, 0x13, 0xe2, 0x42, 0x5c, 0xbe, 0x37, 0x97, 0xe2, 0x2a, 0x23, - 0xe2, 0x7f, 0xf0, 0x8e, 0xb5, 0x7b, 0xdd, 0x7f, 0x16, 0x2f, 0x18, 0xa6, 0x9b, 0xfc, 0x20, 0x53, - 0xbe, 0xfe, 0xf7, 0xbf, 0x9b, 0x6a, 0xb8, 0x9f, 0xcb, 0xaa, 0xfc, 0x86, 0xb4, 0xee, 0xb9, 0x2f, - 0xaf, 0xa2, 0xf7, 0xcd, 0xad, 0x78, 0x81, 0x05, 0x55, 0x55, 0x55, 0x5f, 0x08, 0x02, 0xca, 0x1b, - 0xe6, 0xfe, 0xb5, 0xec, 0x53, 0xaf, 0xbe, 0xd2, 0xf9, 0xaa, 0xaa, 0xbe, 0x14, 0xaa, 0xaa, 0xad, - 0x6b, 0x5a, 0xaa, 0xaf, 0x5c, 0x40, 0x8f, 0x90, 0x8a, 0xaa, 0xbe, 0x4a, 0xaa, 0xab, 0x88, 0xf8, - 0x8e, 0x10, 0xf8, 0x98, 0x4f, 0x10, 0x13, 0x11, 0x77, 0xcd, 0xe6, 0x67, 0x89, 0x25, 0xee, 0xfe, - 0x6d, 0x56, 0xb1, 0x3e, 0x23, 0xe6, 0xdd, 0xdf, 0xc2, 0x46, 0xad, 0x5f, 0x53, 0x44, 0xf8, 0x91, - 0x1f, 0x14, 0x13, 0xd5, 0x55, 0x7f, 0x1f, 0x55, 0x55, 0x59, 0x98, 0xad, 0x57, 0x12, 0x20, 0x45, - 0x6a, 0xa9, 0xcd, 0xac, 0x78, 0x9f, 0xd1, 0x1a, 0xb8, 0x26, 0x2e, 0x92, 0xb9, 0xbb, 0xbb, 0xb7, - 0xc1, 0x25, 0x6b, 0xe3, 0xfc, 0x48, 0x2b, 0xd6, 0xb5, 0xa8, 0xba, 0xaa, 0xb7, 0xca, 0x4a, 0xaa, - 0xf9, 0xaf, 0xbe, 0x23, 0x24, 0x40, 0x9f, 0x12, 0x3f, 0x5a, 0xad, 0x75, 0x5f, 0x94, 0x45, 0x56, - 0xa2, 0x20, 0xa4, 0x6a, 0xea, 0xb8, 0xbe, 0xaa, 0xdc, 0x4d, 0x08, 0xea, 0xc2, 0x03, 0x88, 0x2e, - 0xaa, 0xb5, 0xad, 0x6e, 0x11, 0x88, 0x12, 0x12, 0x23, 0x6c, 0xe6, 0x86, 0xad, 0xab, 0x7c, 0x21, - 0xe2, 0x5e, 0xb5, 0x51, 0x22, 0x0c, 0x36, 0x93, 0xba, 0xc4, 0x8a, 0x14, 0xef, 0xb9, 0xfd, 0xa5, - 0xc2, 0x62, 0xd3, 0x7e, 0xee, 0xeb, 0x98, 0xab, 0x5f, 0x12, 0x2f, 0x93, 0xea, 0xbc, 0x48, 0x82, - 0xea, 0xda, 0x70, 0x9e, 0x18, 0x12, 0x1f, 0x45, 0xff, 0x7f, 0xe2, 0xfa, 0x6a, 0x2e, 0xa2, 0xeb, - 0x86, 0x41, 0x80, 0xad, 0xee, 0xb5, 0xf8, 0xb2, 0x56, 0xba, 0xaf, 0x96, 0xb5, 0xe2, 0x22, 0xab, - 0x5a, 0xd7, 0x89, 0x0c, 0x02, 0x42, 0x99, 0x85, 0x33, 0x12, 0x8f, 0xf1, 0x00, 0xa2, 0xaa, 0xaa, - 0xaa, 0xab, 0xee, 0x19, 0x05, 0x01, 0x0d, 0xbb, 0x6b, 0x58, 0x8f, 0x55, 0x58, 0xd7, 0x04, 0xa3, - 0x53, 0x97, 0x7f, 0x88, 0x22, 0xae, 0xb5, 0xf8, 0x9d, 0x6a, 0xad, 0xf8, 0x8d, 0xc4, 0xd8, 0x85, - 0xaf, 0xc5, 0xf0, 0x6a, 0xaa, 0x6f, 0xdd, 0xfc, 0xa5, 0xdd, 0xd7, 0x09, 0x91, 0x5f, 0x7b, 0xbf, - 0x84, 0xc4, 0xaa, 0xef, 0xbf, 0x13, 0xf1, 0x7e, 0x5c, 0x5d, 0xb1, 0xc7, 0x32, 0x0f, 0x2f, 0x71, - 0x32, 0x5b, 0xd7, 0x12, 0x21, 0x4e, 0x53, 0x40, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x58, 0x2c, - 0x30, 0x36, 0xbc, 0x10, 0x0f, 0x10, 0xf2, 0xc6, 0xe2, 0x5c, 0x49, 0x26, 0x9a, 0x4a, 0x26, 0x9a, - 0xc8, 0xed, 0x34, 0xd3, 0x4d, 0xb6, 0xc1, 0xb3, 0x96, 0x56, 0x72, 0xfc, 0x37, 0x0c, 0xa7, 0xdd, - 0x80, 0x81, 0xaf, 0xbc, 0xff, 0x5e, 0x27, 0xa2, 0x46, 0x16, 0x7b, 0x0b, 0xff, 0x8d, 0x23, 0x11, - 0x3b, 0x13, 0x3c, 0x11, 0x3e, 0x4f, 0x36, 0xc9, 0xc7, 0x92, 0x1c, 0xb2, 0xc4, 0x0e, 0xee, 0xad, - 0x53, 0x1f, 0xb9, 0xa7, 0x56, 0x7e, 0x18, 0x3c, 0x4f, 0xc4, 0xff, 0x1a, 0xc0, 0x0b, 0x62, 0xbb, - 0x3f, 0xf0, 0xc0, 0x86, 0x9a, 0x3d, 0xc3, 0xdc, 0x07, 0x7d, 0x1f, 0x55, 0xca, 0xb9, 0x72, 0x3a, - 0x71, 0x4b, 0x14, 0xb4, 0xd3, 0x15, 0x62, 0xaf, 0xc3, 0xf3, 0xe3, 0xf0, 0xd8, 0xec, 0xec, 0xc2, - 0x63, 0x4d, 0x54, 0xd7, 0x1d, 0x71, 0x6c, 0x5b, 0x2f, 0x6f, 0x7f, 0x7f, 0xf0, 0x4f, 0x4d, 0x34, - 0xd3, 0x4d, 0x34, 0xd3, 0xe2, 0x75, 0xe1, 0x61, 0x4a, 0x46, 0x18, 0xe0, 0xa7, 0xf2, 0xa8, 0xf2, - 0x2b, 0x8a, 0xfe, 0xb9, 0x82, 0x78, 0xd7, 0x95, 0x7b, 0x0c, 0x45, 0xc7, 0xfc, 0xfc, 0xe2, 0x5c, - 0x3b, 0x44, 0xf1, 0xd8, 0xf8, 0xb8, 0xff, 0x97, 0xfb, 0xd7, 0xf9, 0x7f, 0xbd, 0xe2, 0x0e, 0x52, - 0xa7, 0x36, 0x9b, 0x7d, 0x70, 0xe7, 0x1a, 0xf2, 0xaf, 0x15, 0x39, 0xb4, 0xdb, 0xfc, 0x40, 0x2f, - 0x20, 0xc5, 0x3f, 0xad, 0xf2, 0xdf, 0x15, 0x39, 0xb4, 0xdb, 0xef, 0x86, 0xe3, 0xfe, 0x5f, 0xef, - 0x1c, 0x6a, 0x69, 0xa6, 0x9f, 0xf9, 0xb8, 0xef, 0x96, 0xfb, 0xc1, 0x21, 0x0d, 0xc4, 0x70, 0xbc, - 0xf4, 0x82, 0x89, 0x6b, 0xc3, 0xe5, 0xd4, 0x6b, 0xc7, 0x7f, 0x8d, 0x7b, 0x55, 0xe5, 0x5e, 0x5f, - 0xd2, 0x2e, 0xf9, 0xe2, 0x16, 0x92, 0x6b, 0x35, 0x36, 0x6f, 0xae, 0x2b, 0x8e, 0xf9, 0x6f, 0xbc, - 0x6b, 0xca, 0xbd, 0xe1, 0x58, 0xc5, 0x37, 0x58, 0xef, 0x86, 0x29, 0xf1, 0xc9, 0x15, 0xd3, 0x4d, - 0x34, 0xcf, 0x0e, 0x6d, 0x27, 0x0e, 0x59, 0x22, 0x18, 0xc2, 0xec, 0x19, 0x08, 0x2d, 0x62, 0x5d, - 0x12, 0xe9, 0x75, 0xba, 0x5d, 0x6e, 0xf8, 0xd8, 0xc5, 0x39, 0x1a, 0xf6, 0xab, 0xca, 0xbd, 0xcb, - 0x18, 0x55, 0xf7, 0xaa, 0xf2, 0xaf, 0x15, 0x19, 0x66, 0xd3, 0x6f, 0x2e, 0x97, 0x7c, 0x3e, 0x41, - 0x2e, 0x1e, 0xe5, 0x55, 0x34, 0xd7, 0x69, 0xad, 0x44, 0x4c, 0x9d, 0x32, 0x74, 0xc9, 0xd3, 0x3e, - 0xbb, 0xe9, 0x25, 0xe3, 0xe6, 0xd7, 0xe1, 0xf1, 0xf9, 0xc6, 0x29, 0x8e, 0xbc, 0x07, 0x5e, 0x78, - 0x40, 0x20, 0x4d, 0x0a, 0x3a, 0xd1, 0x84, 0x42, 0x24, 0x9f, 0x1f, 0x86, 0xc7, 0x63, 0xc4, 0x18, - 0xb8, 0xef, 0x96, 0xfa, 0x21, 0x7e, 0x20, 0x9a, 0x49, 0x69, 0x25, 0x88, 0xd7, 0x39, 0x47, 0x1a, - 0x9a, 0x69, 0xa7, 0xeb, 0x10, 0x72, 0x55, 0x34, 0xd3, 0x4f, 0xd6, 0x26, 0xb8, 0x60, 0x53, 0x4d, - 0x1b, 0x1d, 0x98, 0x3b, 0x60, 0x3b, 0x61, 0xaf, 0xc7, 0x1a, 0x69, 0xf9, 0x4d, 0x3e, 0x34, 0xfd, - 0xf0, 0xf4, 0xb9, 0x12, 0x49, 0x45, 0x12, 0x49, 0x38, 0xae, 0xf1, 0x2d, 0x34, 0xd3, 0x4f, 0xfe, - 0x36, 0xf7, 0xac, 0xaa, 0x9f, 0x1a, 0xa8, 0x4f, 0x17, 0x1d, 0x53, 0x4d, 0x34, 0xff, 0xc1, 0x48, - 0x9d, 0x46, 0x9a, 0x0b, 0xd9, 0x48, 0x7e, 0x31, 0x1e, 0x9b, 0x3b, 0x7c, 0x10, 0xee, 0xf4, 0x77, - 0xe1, 0x9a, 0x69, 0xa6, 0x99, 0x12, 0x4d, 0x26, 0xff, 0xe1, 0xe1, 0x89, 0xc6, 0x99, 0x60, 0x6d, - 0xb7, 0xcd, 0xa6, 0xd6, 0x9d, 0xa6, 0x30, 0x5b, 0xd7, 0xa7, 0x6e, 0x6f, 0xe3, 0x6e, 0xfa, 0xab, - 0xdc, 0xf8, 0xed, 0xdb, 0x94, 0xc4, 0x0f, 0xab, 0x72, 0xf7, 0x6f, 0x2b, 0xe1, 0xb1, 0xed, 0x35, - 0x53, 0x40, 0x0d, 0x4d, 0x34, 0xd3, 0x6d, 0xb6, 0xdb, 0xf5, 0x48, 0xbc, 0x35, 0x3e, 0x1f, 0x0d, - 0x8e, 0xc0, 0x11, 0x1f, 0x4d, 0x34, 0xd3, 0x6d, 0xb6, 0xdb, 0xe1, 0x8b, 0xea, 0x95, 0x78, 0x22, - 0xee, 0xe7, 0x4f, 0xa9, 0x53, 0xea, 0x32, 0x9f, 0x52, 0xac, 0xf8, 0x23, 0xe4, 0xa0, 0xd7, 0x86, - 0x53, 0xe3, 0x4a, 0x92, 0x4c, 0x1b, 0x06, 0x92, 0x4c, 0x1b, 0x06, 0x92, 0x4d, 0x34, 0x92, 0x4d, - 0x35, 0xd6, 0xdb, 0x6d, 0xbf, 0xf1, 0xbc, 0xb8, 0x5c, 0xcb, 0x85, 0xc8, 0xbb, 0x67, 0xa3, 0xe9, - 0xca, 0xbf, 0xb6, 0xda, 0x69, 0xf8, 0xde, 0x92, 0x55, 0x54, 0x6a, 0x3a, 0x8f, 0xc7, 0xe3, 0x55, - 0x76, 0x9a, 0x2a, 0xfe, 0xdb, 0x69, 0xa7, 0xe3, 0x69, 0x17, 0x5f, 0x8f, 0xc7, 0x51, 0xd4, 0xed, - 0x55, 0xb4, 0xd2, 0x06, 0x52, 0x1a, 0xa6, 0x9b, 0x6d, 0xe4, 0xd4, 0xbc, 0x3c, 0x65, 0x9c, 0xee, - 0x41, 0xae, 0x1c, 0x75, 0xa4, 0x20, 0x90, 0x55, 0xf7, 0xc1, 0x44, 0x87, 0x0f, 0x1f, 0x55, 0x04, - 0x06, 0x7f, 0xd8, 0x80, 0x80, 0xd1, 0xd7, 0x04, 0x89, 0xaa, 0x1f, 0x31, 0x15, 0xb8, 0xa8, 0x8e, - 0x33, 0x58, 0xfa, 0x09, 0x0f, 0xea, 0x71, 0xd6, 0xb9, 0x6b, 0x66, 0xe0, 0x57, 0x40, 0x00, 0xa9, - 0xb4, 0x66, 0x99, 0x2c, 0xbe, 0x25, 0x4b, 0x29, 0x24, 0x6b, 0x24, 0x9f, 0xaf, 0xff, 0x05, 0xe3, - 0x75, 0x5e, 0x04, 0xe2, 0xb4, 0x32, 0xc6, 0xf1, 0x5d, 0xc3, 0x4a, 0x53, 0xc6, 0xb4, 0xfc, 0x68, - 0xb4, 0x92, 0x26, 0x33, 0x22, 0x89, 0x98, 0xcc, 0x4a, 0x2e, 0x28, 0xb1, 0xda, 0xdb, 0x6d, 0xb7, - 0xfe, 0x78, 0xed, 0x6d, 0xb6, 0xdb, 0xf5, 0xcf, 0x1c, 0x6a, 0x69, 0xa6, 0x9f, 0xf9, 0xeb, 0x88, - 0x4c, 0x98, 0xd6, 0x26, 0x64, 0x4c, 0xc9, 0x38, 0xc8, 0xd2, 0xf8, 0xd2, 0xc5, 0xff, 0x15, 0xc6, - 0x97, 0xc6, 0x96, 0x75, 0xf8, 0xbe, 0x91, 0x77, 0x49, 0x2f, 0x39, 0x07, 0x6a, 0x69, 0xa6, 0x9f, - 0xf8, 0x66, 0xfb, 0x8e, 0xd4, 0xd3, 0x4d, 0x3f, 0xf3, 0xc7, 0x6a, 0x69, 0xa6, 0x9f, 0xe2, 0x04, - 0xde, 0x18, 0x53, 0x27, 0x11, 0xf9, 0xe3, 0xb5, 0x34, 0xd3, 0x4f, 0xfd, 0x5f, 0xc4, 0x2a, 0x55, - 0xe1, 0x9d, 0xc5, 0x78, 0xb8, 0x89, 0x91, 0x13, 0x3f, 0xe0, 0xb7, 0xcb, 0x99, 0x71, 0xef, 0xf0, - 0x43, 0x48, 0xb9, 0x4e, 0x9a, 0x45, 0xe1, 0x89, 0x28, 0x4a, 0x64, 0xa1, 0x29, 0x8f, 0x35, 0x34, - 0xd3, 0x4f, 0xfc, 0x10, 0x84, 0x2e, 0xf8, 0x38, 0x88, 0x22, 0x2e, 0xa5, 0xc7, 0xf8, 0x4f, 0xa4, - 0x92, 0xaf, 0xe0, 0x8b, 0x7b, 0xe5, 0xf6, 0x74, 0xe3, 0x4d, 0x32, 0x76, 0x21, 0x57, 0xf0, 0xf9, - 0x9a, 0x9b, 0x55, 0x5a, 0xed, 0x35, 0x4a, 0xfd, 0x5e, 0xa3, 0xf8, 0x22, 0x16, 0xf1, 0x6e, 0xc2, - 0x58, 0x69, 0x56, 0x04, 0x38, 0x65, 0x35, 0xb6, 0x0d, 0xde, 0x20, 0x40, 0x50, 0x24, 0x1d, 0xbb, - 0xcc, 0x3a, 0x95, 0x52, 0x9c, 0xb1, 0xc0, 0x1c, 0x68, 0xef, 0x23, 0x1d, 0xb9, 0x32, 0x70, 0x12, - 0x4c, 0x52, 0xad, 0x0f, 0xcc, 0x53, 0xf0, 0x3f, 0xc1, 0x1d, 0x47, 0xa2, 0x15, 0x9d, 0xe4, 0xe8, - 0x33, 0xef, 0x08, 0x07, 0x04, 0x60, 0x18, 0xfd, 0xcf, 0x74, 0x48, 0xfa, 0x02, 0xca, 0x9a, 0x2d, - 0x5c, 0x0b, 0x4f, 0xc3, 0x85, 0x72, 0xf1, 0x01, 0x00, 0x51, 0x49, 0xea, 0x24, 0x36, 0x41, 0x32, - 0x59, 0x3b, 0xb0, 0x23, 0xc3, 0x43, 0x5c, 0x22, 0x10, 0x0c, 0x74, 0x83, 0xa5, 0x5e, 0x50, 0xd1, - 0xb0, 0x7e, 0x3f, 0x8d, 0x4b, 0x8f, 0xc4, 0x0b, 0x26, 0x13, 0x32, 0x61, 0x33, 0xf0, 0xa9, 0xaf, - 0x57, 0xba, 0xaa, 0x69, 0xa6, 0x9f, 0xf1, 0x0b, 0x11, 0xdf, 0xa2, 0xa7, 0x44, 0xe8, 0x95, 0xf3, - 0x95, 0x53, 0x4d, 0x34, 0xff, 0xcf, 0x54, 0xd3, 0x4d, 0x3f, 0x9d, 0x7e, 0x1c, 0x95, 0x89, 0x58, - 0xaa, 0x69, 0xa6, 0x9f, 0xf9, 0xea, 0x9a, 0x69, 0xa7, 0xfe, 0x22, 0xab, 0xaa, 0xfc, 0x48, 0x25, - 0xea, 0xba, 0xa9, 0xd3, 0xe0, 0x97, 0x7a, 0xde, 0xa7, 0x4f, 0x12, 0xa5, 0x4e, 0x23, 0xe2, 0x3e, - 0x86, 0x75, 0x75, 0x7b, 0xeb, 0xdf, 0x57, 0x7d, 0x7b, 0xeb, 0xff, 0xab, 0xc7, 0xf4, 0x25, 0xdc, - 0x44, 0x12, 0x04, 0x28, 0x71, 0x9b, 0xaf, 0xe2, 0x02, 0x02, 0x85, 0xf1, 0x4e, 0x29, 0x92, 0xa5, - 0x99, 0xd5, 0x2d, 0xef, 0xe2, 0x6b, 0x35, 0xab, 0x66, 0x63, 0xd0, 0x57, 0xd7, 0x88, 0x04, 0x82, - 0xa1, 0xbf, 0x0d, 0xe6, 0xa2, 0xa0, 0x82, 0x8e, 0x0f, 0x84, 0x86, 0x67, 0xb7, 0x7c, 0xd8, 0x5e, - 0xc8, 0x61, 0x08, 0x83, 0xb9, 0x92, 0x45, 0xb0, 0xfd, 0x33, 0xc7, 0x1e, 0x69, 0xe2, 0x04, 0x09, - 0x24, 0x65, 0xe9, 0x9c, 0xf9, 0x7c, 0x56, 0xba, 0x0c, 0xf4, 0x7f, 0x46, 0x8a, 0x1c, 0xc4, 0x98, - 0x21, 0x43, 0xbf, 0x08, 0x0c, 0x30, 0xbc, 0x62, 0x9c, 0xfe, 0x7f, 0x17, 0x88, 0xf9, 0x54, 0x44, - 0x2c, 0x71, 0x01, 0x00, 0x47, 0xbb, 0xbf, 0x49, 0xc2, 0x38, 0x9b, 0x07, 0xee, 0x9b, 0xba, 0xfc, - 0x48, 0x83, 0xaf, 0x5d, 0xdd, 0x3b, 0xdd, 0x71, 0xc2, 0x22, 0x1f, 0x2f, 0x1f, 0xa7, 0x7b, 0x53, - 0xe0, 0x2d, 0xc4, 0xf1, 0x31, 0x50, 0xad, 0x01, 0xcf, 0x77, 0x6f, 0x37, 0xb3, 0x7f, 0x83, 0x12, - 0xdd, 0xb7, 0x6d, 0xe1, 0x0f, 0x11, 0x51, 0x3f, 0x08, 0x42, 0xe3, 0xd8, 0x23, 0xe5, 0x6d, 0xb6, - 0xdb, 0xf7, 0xd0, 0x8e, 0xfa, 0xd5, 0xf0, 0x49, 0x7b, 0xd3, 0x2f, 0x30, 0xad, 0x54, 0x6f, 0x42, - 0xfb, 0xe0, 0xb0, 0x62, 0x7b, 0x71, 0x5e, 0xe7, 0x53, 0x57, 0xf8, 0x27, 0x20, 0x9f, 0x2a, 0x81, - 0x3e, 0xde, 0x0e, 0xdd, 0xbc, 0x55, 0xb7, 0xeb, 0xc4, 0x89, 0x21, 0x63, 0x6e, 0xf7, 0xbf, 0x94, - 0x2e, 0xee, 0xef, 0xeb, 0x5f, 0x14, 0x3a, 0x66, 0x29, 0xd2, 0x3b, 0x2d, 0x0e, 0x7b, 0x32, 0xaa, - 0xf1, 0x11, 0x43, 0x74, 0x6f, 0x2f, 0xbf, 0x12, 0x09, 0xcd, 0x59, 0xbb, 0x7a, 0xb0, 0x37, 0xf1, - 0x02, 0x48, 0x13, 0xc8, 0xd5, 0x27, 0x01, 0xc6, 0x4b, 0x5a, 0xd5, 0x34, 0x67, 0xe8, 0x22, 0xdf, - 0x57, 0x04, 0xe7, 0x3a, 0x45, 0xe9, 0x8b, 0x79, 0x3a, 0x32, 0x78, 0x98, 0x46, 0xb2, 0x9b, 0xa1, - 0x1a, 0xf9, 0xb3, 0xe5, 0x4d, 0xd1, 0xf2, 0xf9, 0xba, 0xa9, 0xf8, 0x44, 0x20, 0x6e, 0xa1, 0x32, - 0xda, 0x0a, 0x66, 0x9a, 0x65, 0x65, 0x9f, 0x4f, 0x89, 0x37, 0x4c, 0xe1, 0x80, 0xae, 0x50, 0x9b, - 0xbd, 0xf8, 0x91, 0x41, 0x24, 0x75, 0xaa, 0xab, 0x31, 0x91, 0x0c, 0xb1, 0x78, 0x45, 0x15, 0xfe, - 0x63, 0xbd, 0xbf, 0x84, 0x86, 0x1a, 0x2d, 0x8f, 0x40, 0xc7, 0x62, 0x3f, 0x63, 0x50, 0x13, 0x1f, - 0xbe, 0x85, 0xb7, 0xd6, 0xbe, 0x8a, 0xf2, 0xf4, 0x66, 0xfa, 0x2b, 0x7d, 0x5f, 0xea, 0xff, 0x56, - 0xfa, 0xb5, 0x75, 0x79, 0x3a, 0x35, 0x7c, 0xdd, 0xcb, 0x8f, 0x82, 0x6a, 0xab, 0xbb, 0xab, 0xac, - 0xab, 0xb3, 0x6d, 0x35, 0xec, 0xae, 0x6c, 0xdf, 0x7b, 0xdf, 0xd1, 0x58, 0x93, 0x82, 0x4e, 0xef, - 0x9f, 0xef, 0xbb, 0xae, 0xfa, 0xaa, 0xeb, 0x14, 0x9c, 0x12, 0x08, 0x85, 0x71, 0x9b, 0x61, 0xe1, - 0x11, 0x14, 0xd4, 0x9e, 0x57, 0x6b, 0xb7, 0xe3, 0x2f, 0xbd, 0x62, 0xe6, 0x20, 0xac, 0xa6, 0xaa, - 0x52, 0xdf, 0x84, 0xef, 0xa4, 0x2b, 0x3f, 0xb5, 0xe0, 0x9a, 0xd3, 0x54, 0x0e, 0x6f, 0xeb, 0xe1, - 0x13, 0x57, 0x9d, 0x45, 0xe5, 0xa7, 0x75, 0xf1, 0x23, 0x5d, 0xf7, 0xd0, 0xf8, 0x91, 0xc3, 0x1e, - 0xfa, 0xad, 0x16, 0x30, 0xbe, 0x08, 0x46, 0xa9, 0x34, 0x71, 0x37, 0x74, 0x31, 0x11, 0xfa, 0x16, - 0xd2, 0xf1, 0x17, 0x7f, 0x49, 0x2f, 0x5a, 0xfa, 0xbf, 0xc1, 0x0d, 0x6b, 0x65, 0xf4, 0x68, 0xa2, - 0x79, 0xb4, 0xd5, 0xd7, 0x04, 0x46, 0x4c, 0x99, 0xb7, 0xc6, 0x74, 0x0d, 0xdb, 0xee, 0xe7, 0xde, - 0xd5, 0xd9, 0x7c, 0x77, 0x4d, 0xca, 0xa1, 0x7e, 0x75, 0x39, 0x49, 0xff, 0xae, 0x28, 0x96, 0xe9, - 0x26, 0x62, 0x1a, 0x0b, 0xc2, 0x26, 0xe2, 0xeb, 0x35, 0x22, 0xf5, 0xfb, 0x16, 0x1e, 0x25, 0x85, - 0xfe, 0x12, 0x43, 0xc4, 0xc8, 0x95, 0x3a, 0x69, 0xf9, 0x3a, 0x27, 0x7c, 0xa6, 0xab, 0x4a, 0xb9, - 0x2d, 0xb6, 0xdc, 0xdd, 0x09, 0xe9, 0xf1, 0x28, 0xb9, 0x4d, 0xd1, 0x2a, 0x2f, 0xab, 0xc5, 0x72, - 0x05, 0x16, 0xb5, 0xcc, 0x57, 0xdf, 0xd5, 0xe6, 0xe8, 0x7f, 0x45, 0x75, 0xe8, 0xde, 0xad, 0x15, - 0xd6, 0x74, 0x12, 0x75, 0xa9, 0xfa, 0x2d, 0x5e, 0x10, 0x57, 0x93, 0xb2, 0xbe, 0xab, 0xa1, 0x0e, - 0x78, 0x8a, 0xea, 0xca, 0xc4, 0xa2, 0x74, 0xfc, 0x17, 0x0a, 0x7b, 0xbe, 0x86, 0xb2, 0xf8, 0xc2, - 0x19, 0x66, 0x3a, 0x6b, 0x59, 0xb3, 0x66, 0x36, 0x18, 0xb3, 0x20, 0x1c, 0x55, 0xc5, 0x6f, 0x4f, - 0x27, 0xf8, 0x47, 0x46, 0x33, 0x1f, 0x02, 0xb1, 0x1a, 0x34, 0x09, 0x58, 0x42, 0x15, 0x84, 0x11, - 0x58, 0x4a, 0xfc, 0x46, 0x4c, 0xac, 0xbe, 0x9f, 0x88, 0x12, 0xe7, 0xef, 0xde, 0xd7, 0xb2, 0x2a, - 0x5b, 0xe8, 0x22, 0x28, 0x6b, 0xea, 0xe7, 0xcd, 0xad, 0x46, 0x75, 0x72, 0xba, 0xeb, 0xeb, 0xd1, - 0x1d, 0x5e, 0x2b, 0xab, 0xc6, 0xf2, 0x04, 0x2f, 0x77, 0xd6, 0x50, 0x9f, 0x43, 0xda, 0x10, 0xeb, - 0x53, 0x75, 0x94, 0x9c, 0xc1, 0x29, 0xbc, 0xdf, 0xd9, 0x16, 0xb2, 0x74, 0x35, 0xbe, 0xeb, 0xa8, - 0x44, 0x5a, 0x17, 0x46, 0xfe, 0xad, 0x11, 0xd5, 0xeb, 0xa2, 0xb4, 0x4f, 0x56, 0x88, 0xe8, 0x24, - 0xe7, 0xcb, 0x2b, 0x1f, 0x88, 0x47, 0xef, 0x10, 0x53, 0x2a, 0xef, 0xa3, 0xbd, 0x62, 0x02, 0x85, - 0x3f, 0xbe, 0xb5, 0xa4, 0xb2, 0x64, 0xef, 0xf1, 0x84, 0xaa, 0x4d, 0x2a, 0xaf, 0x17, 0xcb, 0x4f, - 0xc5, 0xc9, 0x05, 0xd6, 0xb0, 0xbf, 0x04, 0x62, 0x6b, 0x5c, 0xcf, 0x82, 0x2d, 0xef, 0x55, 0xce, - 0x25, 0x71, 0x29, 0x91, 0x29, 0x9f, 0x5c, 0x30, 0x45, 0x55, 0x55, 0x57, 0x74, 0xe3, 0x4d, 0xdf, - 0xf8, 0x80, 0xd9, 0x26, 0xca, 0x43, 0x05, 0x5d, 0x22, 0x6f, 0xf9, 0xfb, 0x6e, 0xd9, 0x7f, 0xf9, - 0x2e, 0xff, 0x9a, 0xee, 0xef, 0x09, 0x12, 0x08, 0x9a, 0x91, 0xc1, 0x83, 0xec, 0x61, 0x44, 0xd4, - 0x9a, 0x36, 0xff, 0x86, 0xae, 0xea, 0xa5, 0x51, 0xf6, 0x9a, 0x49, 0x28, 0x41, 0x41, 0x22, 0x9c, - 0xf2, 0x47, 0xcd, 0xa6, 0xd3, 0xeb, 0xf7, 0xfc, 0x6f, 0x55, 0x55, 0xd5, 0x7d, 0xde, 0x31, 0xf6, - 0x9a, 0x49, 0x2f, 0x0c, 0xd5, 0x75, 0xcd, 0xa6, 0xdf, 0xf2, 0x55, 0x52, 0x49, 0x70, 0xaf, 0x55, - 0xd5, 0x73, 0x72, 0x69, 0x37, 0xfc, 0x12, 0x12, 0xaf, 0x4a, 0xbc, 0x13, 0x93, 0x77, 0x83, 0xfc, - 0x29, 0x05, 0xec, 0x18, 0xbe, 0x09, 0x89, 0x36, 0x7b, 0x96, 0x89, 0x17, 0x8c, 0xb1, 0x95, 0x43, - 0xbe, 0x8c, 0x8b, 0xd6, 0xdc, 0xde, 0xe3, 0x48, 0x8d, 0x51, 0xbf, 0x82, 0x13, 0xe5, 0xfe, 0xf8, - 0x2a, 0x2b, 0x51, 0x7d, 0x32, 0xe6, 0xf1, 0x2e, 0x09, 0x52, 0x0e, 0xdf, 0x05, 0x84, 0x99, 0x83, - 0x28, 0x50, 0xe0, 0xb4, 0xf5, 0x43, 0x05, 0xe6, 0x35, 0x93, 0x28, 0x4d, 0xe2, 0x06, 0x0a, 0x63, - 0x62, 0xa1, 0xa8, 0xb9, 0x22, 0x42, 0x0c, 0x68, 0xd4, 0xcd, 0xf4, 0x10, 0x04, 0x23, 0x66, 0xa2, - 0x8b, 0x67, 0xcc, 0x50, 0xcb, 0xc9, 0xe1, 0x4a, 0x42, 0x11, 0x82, 0x21, 0x10, 0x1b, 0x0e, 0xaa, - 0x4a, 0x21, 0xc1, 0x4e, 0x67, 0x8f, 0x39, 0xc5, 0x60, 0xb4, 0xfc, 0x2d, 0x9a, 0x4e, 0xd0, 0xbc, - 0x89, 0xa9, 0x07, 0xbc, 0x40, 0x40, 0xed, 0xdf, 0xda, 0x6d, 0xf9, 0x2f, 0x9b, 0xe5, 0xae, 0x1d, - 0x2c, 0x27, 0x5f, 0x1c, 0x99, 0x32, 0x7f, 0xe2, 0x48, 0x5e, 0x5f, 0xe1, 0x41, 0x29, 0xd0, 0xb2, - 0x56, 0x9b, 0xa7, 0x82, 0x2d, 0x5f, 0xd1, 0xbd, 0xfe, 0x13, 0xa4, 0x4c, 0x66, 0xea, 0x5a, 0x0e, - 0x7e, 0x24, 0xef, 0xc6, 0x67, 0xa1, 0x7f, 0x19, 0xe8, 0x5d, 0x79, 0xa8, 0x43, 0xd9, 0x4c, 0x53, - 0x24, 0xcf, 0xc2, 0x3b, 0x4b, 0xbd, 0xe4, 0xc7, 0xfc, 0x84, 0x43, 0x9f, 0xfc, 0x65, 0xf1, 0x58, - 0xdf, 0xaf, 0x36, 0xa1, 0xbd, 0xd2, 0x8f, 0xf1, 0x82, 0x9d, 0x05, 0xb9, 0x01, 0x0b, 0x01, 0x2e, - 0x1a, 0x96, 0x08, 0x1c, 0xac, 0x6f, 0x65, 0xd8, 0xae, 0xcf, 0x05, 0x71, 0xf1, 0x03, 0xda, 0x49, - 0x9a, 0x91, 0x25, 0x01, 0xb0, 0x40, 0x64, 0x22, 0xf4, 0x2f, 0xea, 0x9b, 0x85, 0x94, 0x3c, 0xa5, - 0xe5, 0xc1, 0x0e, 0x17, 0x84, 0x41, 0x0f, 0x1e, 0x5e, 0x3c, 0xa1, 0x75, 0x7e, 0xba, 0x09, 0x37, - 0xce, 0x4e, 0xe2, 0x7a, 0xd7, 0x89, 0xe4, 0x31, 0x71, 0x2d, 0x74, 0x7e, 0x73, 0xe1, 0xc3, 0x2a, - 0xdd, 0x4f, 0xaf, 0xdf, 0xfc, 0x37, 0x49, 0x26, 0x9a, 0x53, 0xe9, 0xf7, 0xf5, 0xc2, 0x56, 0xb4, - 0x95, 0x77, 0xc1, 0x2f, 0x55, 0x69, 0xa4, 0xaf, 0xf4, 0x47, 0xf8, 0x25, 0xb4, 0xd6, 0xd3, 0x5b, - 0xfc, 0x12, 0x6e, 0xb2, 0x95, 0x77, 0xdd, 0xdf, 0x04, 0x96, 0xa0, 0xea, 0xcf, 0x7c, 0x17, 0xdd, - 0x54, 0x8a, 0x2d, 0x9a, 0x9d, 0x85, 0x33, 0x5f, 0xfe, 0x14, 0xdc, 0x2e, 0xe2, 0x8e, 0xee, 0x86, - 0x72, 0xc3, 0x7d, 0x1a, 0x95, 0x1c, 0x8c, 0x77, 0xc1, 0x66, 0xee, 0x0b, 0x71, 0xa4, 0x5c, 0x8e, - 0xec, 0xe4, 0xc4, 0x4a, 0xa3, 0x7f, 0x12, 0x38, 0xd9, 0xcf, 0xd3, 0xa8, 0x8e, 0xde, 0xdd, 0xf1, - 0x22, 0x02, 0x02, 0xc7, 0xee, 0x70, 0x90, 0xcc, 0xc4, 0xb1, 0xac, 0x8a, 0x3c, 0x4c, 0x75, 0xec, - 0x7b, 0xde, 0x57, 0xf0, 0x58, 0x23, 0x51, 0x78, 0xea, 0xeb, 0x27, 0xcd, 0x01, 0xf5, 0xfe, 0x31, - 0x21, 0x00, 0xa1, 0x04, 0xb8, 0x31, 0xf7, 0xd5, 0x35, 0x0d, 0xe2, 0x76, 0xdb, 0xc4, 0xa2, 0x44, - 0xc6, 0x4c, 0x0c, 0x22, 0x72, 0xa0, 0x5c, 0xdb, 0xc8, 0xe4, 0x9b, 0xb6, 0xb0, 0x6d, 0x3d, 0xce, - 0xe2, 0x03, 0x01, 0x4b, 0xb5, 0xe8, 0x60, 0x4c, 0x72, 0x23, 0xd2, 0x0b, 0xe0, 0xe3, 0x01, 0x38, - 0x81, 0x05, 0xc0, 0x35, 0xf8, 0x54, 0x4f, 0xd5, 0x44, 0xec, 0x69, 0x92, 0xf1, 0x78, 0xf5, 0xf7, - 0x88, 0x19, 0xe4, 0x87, 0x4d, 0xa4, 0x65, 0x4b, 0x31, 0x4f, 0x37, 0x65, 0xb7, 0x6d, 0x2e, 0x3e, - 0xdc, 0x56, 0x78, 0xfe, 0xf8, 0x91, 0x21, 0x01, 0xa2, 0x9a, 0xb1, 0x9a, 0xdd, 0xac, 0x26, 0x5b, - 0x9f, 0x1f, 0xc4, 0xc1, 0x3d, 0xed, 0xcd, 0x41, 0x3a, 0x57, 0xab, 0xb9, 0xe0, 0xf2, 0x96, 0xfc, - 0xd4, 0xe9, 0xf1, 0x3f, 0x0c, 0x1a, 0xed, 0xbd, 0x70, 0x59, 0x9b, 0x39, 0xbb, 0xd8, 0xba, 0xa4, - 0x75, 0x32, 0xf8, 0xc1, 0x0e, 0x13, 0xd4, 0x70, 0x15, 0x4e, 0xa1, 0xd8, 0xc4, 0x3a, 0x0a, 0xc5, - 0xe0, 0x06, 0xab, 0xe2, 0xc9, 0x93, 0x2f, 0x5b, 0xe6, 0x04, 0xe2, 0xbe, 0xb8, 0x78, 0x10, 0x6a, - 0xee, 0xfa, 0x74, 0xb1, 0x3b, 0x8d, 0x21, 0xb5, 0x45, 0xfe, 0x15, 0x24, 0x9b, 0x74, 0xad, 0x35, - 0x2d, 0x0c, 0x67, 0xfb, 0xf5, 0xc2, 0x1d, 0x22, 0x43, 0x91, 0xb9, 0x24, 0xd8, 0x9e, 0x08, 0xc7, - 0xbb, 0xe7, 0x4f, 0x82, 0x7a, 0x49, 0x69, 0x24, 0x92, 0x5e, 0x3e, 0x08, 0xee, 0xf9, 0x94, 0x7c, - 0x10, 0xeb, 0x53, 0xa5, 0x70, 0x49, 0x3e, 0x66, 0xc3, 0x37, 0xc2, 0x25, 0xda, 0x69, 0xa6, 0xbb, - 0x4d, 0x7e, 0x10, 0xa4, 0x96, 0xd3, 0x5b, 0x4d, 0x7e, 0xac, 0xfa, 0x22, 0x47, 0xe0, 0xa6, 0xab, - 0xe9, 0x24, 0xab, 0x91, 0x15, 0x2e, 0x0b, 0xaa, 0xbb, 0xea, 0x44, 0x55, 0xe0, 0x92, 0xef, 0x91, - 0x3e, 0x08, 0xba, 0xa9, 0x5b, 0xe6, 0x24, 0x69, 0xa8, 0x47, 0x8e, 0x77, 0xc4, 0x02, 0x53, 0x47, - 0x58, 0xbd, 0x6b, 0xf2, 0x9d, 0x62, 0xf8, 0xfe, 0xf7, 0x7d, 0x54, 0x9a, 0xba, 0xe0, 0x94, 0xa2, - 0xb7, 0x72, 0xc3, 0xcf, 0xdf, 0xc2, 0x21, 0x03, 0x3b, 0xab, 0xa7, 0x6e, 0x14, 0x79, 0x4d, 0x8a, - 0xd6, 0xb8, 0x99, 0x45, 0xa7, 0x27, 0xe1, 0x91, 0x20, 0xb2, 0x7c, 0x6b, 0xdd, 0xb7, 0x46, 0xb7, - 0xf1, 0x01, 0x42, 0x62, 0xb5, 0x79, 0x1b, 0x44, 0x58, 0x25, 0x51, 0x4d, 0x54, 0x53, 0x12, 0x52, - 0x16, 0x1f, 0x71, 0x30, 0xa5, 0xcc, 0x3f, 0x56, 0x58, 0x2f, 0x3c, 0x24, 0x16, 0x10, 0x4e, 0x0e, - 0x1f, 0xec, 0x0c, 0x04, 0xbc, 0xf2, 0x30, 0x49, 0x25, 0xc2, 0xc1, 0x01, 0xd8, 0xa0, 0x28, 0xab, - 0xfc, 0x29, 0x25, 0x0d, 0x09, 0x8a, 0x9c, 0x68, 0x58, 0x6b, 0x99, 0x9e, 0xf3, 0xa9, 0x2c, 0x5c, - 0x53, 0x2f, 0x11, 0x60, 0xbd, 0x63, 0x6d, 0x9e, 0x24, 0x41, 0x0e, 0x79, 0x63, 0x62, 0x82, 0x60, - 0x55, 0xdb, 0xbf, 0x12, 0x38, 0xa9, 0x8a, 0xc1, 0x9a, 0x85, 0xb7, 0xbb, 0xb9, 0x4d, 0x8a, 0x6d, - 0x62, 0x44, 0x98, 0xaf, 0x77, 0xc4, 0x46, 0x57, 0x5b, 0x48, 0xd6, 0xee, 0xe9, 0x69, 0x78, 0x9c, - 0xd4, 0x36, 0xe5, 0xef, 0xbf, 0x82, 0xc1, 0x17, 0x63, 0x77, 0x40, 0xce, 0xa7, 0x9f, 0x3e, 0xf8, - 0x28, 0x16, 0xee, 0xef, 0xbb, 0xed, 0xf2, 0x10, 0xbe, 0x2b, 0xf8, 0xc2, 0x65, 0x62, 0xba, 0xbd, - 0xcd, 0xf5, 0x17, 0xf1, 0x3d, 0x4d, 0xba, 0x9b, 0x3c, 0x26, 0x2c, 0xc4, 0x13, 0x12, 0x11, 0x18, - 0x2e, 0x20, 0x8c, 0x7a, 0x1b, 0x29, 0xf8, 0x52, 0xa2, 0xe8, 0xd5, 0x35, 0x4e, 0x8d, 0x1a, 0xaa, - 0x34, 0x68, 0xd1, 0xf1, 0xff, 0x04, 0xa1, 0x04, 0xc7, 0x5d, 0x15, 0x43, 0x0e, 0x2b, 0x54, 0x5b, - 0xc4, 0x02, 0x3a, 0xc6, 0x04, 0x09, 0x83, 0x04, 0xa9, 0x5c, 0x11, 0x16, 0xa3, 0x99, 0x46, 0x9d, - 0xf8, 0x27, 0x25, 0xb4, 0x36, 0xda, 0xb4, 0xdc, 0x1f, 0x0a, 0x1d, 0x9c, 0xb5, 0x44, 0x48, 0x35, - 0xf2, 0xca, 0xd1, 0xdf, 0x96, 0xf8, 0xce, 0x35, 0x5f, 0xaa, 0x1c, 0x1b, 0x1a, 0x0c, 0x97, 0x96, - 0x0d, 0xfb, 0x26, 0x99, 0x63, 0xe0, 0x8a, 0xb7, 0xc4, 0x97, 0xce, 0x2d, 0x5a, 0xb6, 0x6d, 0xff, - 0x59, 0x7c, 0x14, 0x19, 0xa6, 0xb3, 0xe6, 0xf2, 0xfa, 0xc5, 0xf1, 0x62, 0x5d, 0xfd, 0xdd, 0xf1, - 0x7d, 0x24, 0xb4, 0x92, 0xf0, 0x45, 0xdd, 0xd2, 0x3e, 0x23, 0xe7, 0xaf, 0xb6, 0xdb, 0x6d, 0xfa, - 0xfc, 0xfa, 0xb9, 0xf5, 0x63, 0xe0, 0xbb, 0xbb, 0xde, 0xec, 0x5e, 0x25, 0x14, 0x76, 0xfa, 0xa7, - 0x5e, 0x6c, 0xdd, 0xa5, 0x22, 0x93, 0xc1, 0x68, 0xc5, 0x88, 0xad, 0xac, 0x0e, 0x24, 0x90, 0xdf, - 0x17, 0x10, 0xa7, 0x4b, 0x82, 0x4b, 0x4f, 0x77, 0xf8, 0xeb, 0xa3, 0x7a, 0xd4, 0x9d, 0xef, 0xf0, - 0xa4, 0xf8, 0xdd, 0xbc, 0x6d, 0x00, 0xad, 0xfd, 0xee, 0xa5, 0xf6, 0xea, 0x96, 0xef, 0xe1, 0x11, - 0x9a, 0x89, 0x5c, 0x9e, 0xa3, 0x7c, 0x8b, 0xfd, 0xd9, 0xb5, 0x23, 0x15, 0x8e, 0x24, 0x8a, 0xac, - 0x67, 0x93, 0xf0, 0xcc, 0x28, 0x57, 0x71, 0x58, 0xae, 0xb1, 0x3c, 0x60, 0xde, 0xd2, 0x9c, 0x48, - 0x24, 0xa1, 0xff, 0xf7, 0x04, 0x10, 0xa1, 0x05, 0xc4, 0x79, 0x79, 0x26, 0xd3, 0xc8, 0x40, 0x12, - 0xce, 0x22, 0x9c, 0x67, 0x2d, 0xb3, 0x4b, 0x19, 0x84, 0x04, 0xeb, 0x0a, 0xde, 0x92, 0xfe, 0x20, - 0x76, 0x83, 0xa6, 0xac, 0xe7, 0xee, 0xfc, 0x5c, 0xdf, 0xc1, 0x34, 0x98, 0x5f, 0xa1, 0xdc, 0xaa, - 0x37, 0xe2, 0x23, 0x8a, 0x23, 0xe2, 0x86, 0xb7, 0xba, 0xd4, 0x5f, 0x88, 0xf0, 0x52, 0x12, 0x13, - 0xbb, 0xbb, 0x89, 0x54, 0x5e, 0x20, 0x48, 0x21, 0x10, 0xee, 0xf7, 0xf8, 0xa3, 0x5a, 0x7e, 0xd3, - 0xbe, 0x08, 0xb3, 0x76, 0x3f, 0xbe, 0x08, 0x79, 0xa4, 0xdd, 0x36, 0xf8, 0x50, 0x4d, 0x6a, 0xaa, - 0xaa, 0xb4, 0x92, 0x5a, 0xab, 0x71, 0x3f, 0x8e, 0xaa, 0xb3, 0x55, 0x59, 0xb1, 0x4d, 0x8b, 0xf8, - 0xba, 0x31, 0x8f, 0x6b, 0xcd, 0x82, 0xd4, 0x5e, 0x14, 0x15, 0xbd, 0x98, 0x5d, 0x48, 0x53, 0x94, - 0x2b, 0x55, 0xc8, 0x63, 0x4e, 0xec, 0x3c, 0x37, 0x3c, 0x3d, 0x56, 0x4f, 0xff, 0x0c, 0xf2, 0xe1, - 0x71, 0x64, 0xf5, 0xff, 0x05, 0x34, 0x48, 0xca, 0xcf, 0x9d, 0xac, 0x8f, 0xcb, 0x46, 0xaa, 0x67, - 0xc1, 0x6e, 0x4d, 0x6b, 0x73, 0x6b, 0x5b, 0xfc, 0x16, 0x10, 0xf9, 0x4b, 0x49, 0xbd, 0x1d, 0x9b, - 0x5c, 0xeb, 0xc2, 0xf6, 0xdb, 0xab, 0x49, 0x6a, 0xdb, 0x4a, 0x97, 0xf8, 0xbb, 0x4a, 0x96, 0x95, - 0x2f, 0x0d, 0x95, 0x22, 0x6a, 0x51, 0xa9, 0x35, 0x26, 0x9a, 0xff, 0x04, 0xdd, 0x24, 0xb6, 0x94, - 0xb7, 0xc2, 0xf4, 0x92, 0xdd, 0xf6, 0x24, 0xc9, 0xff, 0xc1, 0x55, 0xaa, 0xd6, 0x92, 0x49, 0x25, - 0xc1, 0x5d, 0xef, 0x75, 0xc3, 0x05, 0x69, 0xa2, 0xe3, 0x31, 0xa3, 0xe4, 0xea, 0x9a, 0x69, 0x25, - 0xeb, 0x84, 0xef, 0x7e, 0x92, 0x4f, 0x9a, 0xf7, 0x3f, 0x5c, 0x39, 0xd5, 0x55, 0x34, 0xdf, 0xfe, - 0x6c, 0xf9, 0x5f, 0x09, 0x6b, 0x53, 0xe1, 0xf2, 0x67, 0xc9, 0x55, 0xfc, 0xe5, 0x5b, 0x63, 0x32, - 0xd8, 0x6b, 0xdf, 0x05, 0x9a, 0xb2, 0xd8, 0xc6, 0x51, 0x35, 0x45, 0x55, 0xc2, 0x6d, 0x1a, 0x6b, - 0x04, 0xff, 0x44, 0x67, 0x88, 0x10, 0x5a, 0x57, 0x76, 0x90, 0x5f, 0x05, 0x9e, 0x2b, 0xe3, 0xf9, - 0x21, 0xef, 0xde, 0x25, 0xf3, 0xfe, 0x26, 0x30, 0xd4, 0x4f, 0x7e, 0x1e, 0x7c, 0x49, 0xf7, 0x67, - 0x6c, 0xbe, 0xbc, 0x30, 0x10, 0x93, 0xab, 0x7c, 0xb1, 0xef, 0xbb, 0xf0, 0x80, 0xa1, 0x2a, 0x2e, - 0x6e, 0x59, 0x9b, 0x97, 0x9a, 0x85, 0x9c, 0x36, 0xa0, 0x06, 0x11, 0xc0, 0xb4, 0xae, 0xcb, 0xc5, - 0x3b, 0x17, 0x67, 0x27, 0x71, 0x9e, 0xc1, 0x58, 0xd6, 0xe4, 0xee, 0x1c, 0x99, 0xc7, 0xbd, 0x3f, - 0xc1, 0x00, 0x31, 0x18, 0x63, 0xe1, 0x00, 0x79, 0xaa, 0x58, 0xab, 0x43, 0x65, 0x23, 0xfc, 0x10, - 0xa8, 0x7d, 0x5c, 0x40, 0x21, 0x08, 0xd2, 0xdc, 0xdb, 0x17, 0x57, 0x15, 0xa9, 0x51, 0x62, 0x43, - 0x0b, 0x5f, 0x05, 0xc5, 0xab, 0x72, 0x7a, 0x77, 0xe1, 0x08, 0x24, 0xbe, 0x95, 0xfe, 0x2c, 0xf5, - 0xaa, 0xaf, 0xe2, 0x05, 0x5b, 0xb7, 0x2e, 0xeb, 0x82, 0xb3, 0xd3, 0xa7, 0x8c, 0xd8, 0xde, 0xee, - 0xff, 0x05, 0x25, 0xbd, 0xdc, 0xac, 0x5e, 0xef, 0xa3, 0xbf, 0x05, 0x83, 0x8d, 0xcd, 0xbf, 0x3d, - 0x05, 0xd6, 0x56, 0x6f, 0x82, 0x91, 0x2f, 0x2a, 0x9a, 0xa9, 0x21, 0x25, 0xea, 0xaa, 0xdc, 0x48, - 0x91, 0xc5, 0x1c, 0x10, 0x1e, 0x92, 0x0e, 0x8d, 0xb4, 0x75, 0x42, 0x5c, 0x21, 0x19, 0x55, 0xd9, - 0xea, 0xaa, 0xab, 0x5a, 0xf8, 0x52, 0x31, 0x7a, 0xa7, 0x51, 0xd0, 0x1c, 0xe7, 0x64, 0xb8, 0xcc, - 0xc8, 0x78, 0xf4, 0xaf, 0x5e, 0xf8, 0x89, 0x29, 0x3d, 0xa6, 0xbf, 0x08, 0x10, 0x7f, 0x27, 0xff, - 0x36, 0x77, 0xa5, 0xe0, 0x88, 0x55, 0xe3, 0x83, 0x49, 0xc5, 0xf0, 0x57, 0xe2, 0x48, 0x57, 0x77, - 0x5a, 0xa9, 0x81, 0xf0, 0x4a, 0x56, 0x9a, 0xcf, 0x6c, 0xff, 0x1f, 0x04, 0x33, 0xd5, 0xbe, 0x0f, - 0x82, 0x8b, 0xb7, 0xe4, 0xd4, 0xd2, 0x2f, 0x04, 0x9e, 0x6d, 0x32, 0x9f, 0x19, 0xa6, 0xe9, 0xd2, - 0x7b, 0x7a, 0xf2, 0x6d, 0x3f, 0x56, 0xf8, 0xf2, 0xa5, 0x49, 0x24, 0xf4, 0xb7, 0x4f, 0xc1, 0x4e, - 0xdd, 0xb4, 0x92, 0xda, 0xda, 0x6f, 0x93, 0x6a, 0xd7, 0x8c, 0xd6, 0xba, 0x69, 0xb6, 0x9b, 0x69, - 0x97, 0xc7, 0xfc, 0x12, 0x5d, 0xf7, 0xae, 0x10, 0xd5, 0xbb, 0x6a, 0xdd, 0x39, 0x29, 0xf0, 0x8c, - 0x99, 0xb5, 0xc9, 0x8e, 0xb1, 0x7c, 0x27, 0x77, 0xf4, 0x92, 0xf0, 0x95, 0xa6, 0x9a, 0x36, 0xb5, - 0x49, 0x2f, 0x09, 0xdf, 0xad, 0xbb, 0x7e, 0x08, 0xad, 0x55, 0xb9, 0x5c, 0xa5, 0x77, 0x2d, 0xc3, - 0xf2, 0x69, 0x4b, 0x84, 0xe1, 0x29, 0xf3, 0x69, 0x24, 0x92, 0x4b, 0xc5, 0x53, 0x93, 0xdd, 0xff, - 0x05, 0x64, 0x5a, 0x19, 0xa0, 0xdb, 0x79, 0xfc, 0x67, 0xec, 0xab, 0x9c, 0xbe, 0x10, 0xdd, 0xb7, - 0x77, 0x4a, 0xd5, 0x2f, 0x12, 0xaf, 0xe2, 0x1f, 0x6f, 0xfe, 0x26, 0x10, 0x83, 0xfe, 0xe9, 0x9e, - 0xaf, 0x6e, 0xee, 0xdb, 0x87, 0x70, 0x0c, 0x48, 0x64, 0x17, 0x1a, 0x9a, 0xdd, 0xfe, 0xf1, 0x22, - 0x84, 0xa4, 0x2e, 0xe4, 0x61, 0xe7, 0xc2, 0x21, 0x81, 0xc4, 0x63, 0xe5, 0xc1, 0x72, 0xcf, 0x17, - 0x77, 0xe0, 0xaf, 0xe1, 0x81, 0x92, 0xf9, 0x58, 0xa6, 0x28, 0x19, 0x08, 0x25, 0xfa, 0xa2, 0x15, - 0xbb, 0x41, 0x55, 0x96, 0x11, 0x84, 0x22, 0x9a, 0x8b, 0xad, 0xf1, 0x5c, 0x56, 0xe2, 0xb8, 0x5e, - 0x50, 0x01, 0xc4, 0xaf, 0x60, 0x88, 0xae, 0xdd, 0xeb, 0xf4, 0xe5, 0xfb, 0x78, 0xfe, 0x0f, 0xe9, - 0x17, 0xf0, 0x8c, 0x51, 0x2b, 0x5b, 0x9f, 0xf8, 0x46, 0x0a, 0x4e, 0x9a, 0x45, 0xe5, 0xb4, 0xad, - 0x4b, 0x6e, 0x2b, 0x2e, 0x3f, 0x08, 0x06, 0x1f, 0x77, 0xf0, 0x56, 0x67, 0x77, 0x72, 0xfe, 0xf5, - 0xa5, 0xde, 0x24, 0x28, 0x53, 0xb3, 0x63, 0xe9, 0xbb, 0x19, 0xfb, 0x7d, 0x8a, 0xea, 0xff, 0x19, - 0xae, 0xdd, 0xb7, 0x3b, 0x39, 0xf4, 0xd9, 0xad, 0xb1, 0xfe, 0xee, 0xee, 0xfe, 0x20, 0x44, 0xf4, - 0x7a, 0xb5, 0x55, 0xf1, 0xe2, 0xde, 0xca, 0x31, 0x93, 0x18, 0xd6, 0xb5, 0xc4, 0x4b, 0x55, 0x52, - 0x66, 0x11, 0x82, 0x5c, 0xdd, 0x8f, 0x5b, 0x7e, 0xf8, 0x46, 0x92, 0x4b, 0xc7, 0x74, 0xd5, 0x6b, - 0xe4, 0x90, 0xd5, 0x1f, 0x88, 0x08, 0x58, 0x36, 0x95, 0x12, 0x3b, 0x6a, 0x2f, 0xd7, 0x38, 0xa0, - 0x17, 0x29, 0xa3, 0x93, 0x7f, 0xc1, 0x31, 0x46, 0xd0, 0x67, 0xf1, 0x4b, 0x92, 0x55, 0x0f, 0x68, - 0xb9, 0xab, 0x82, 0x4d, 0x6b, 0x1f, 0xe1, 0x12, 0xd3, 0x4a, 0x9b, 0x6d, 0xa7, 0x6a, 0xd7, 0x82, - 0xcd, 0xa6, 0xb4, 0x8d, 0xbb, 0x69, 0x52, 0xcb, 0xe5, 0x93, 0xff, 0x9a, 0x6f, 0x5f, 0x82, 0x7a, - 0x7a, 0x77, 0xb5, 0xaf, 0x88, 0xdb, 0xbb, 0x76, 0xfe, 0xee, 0xbf, 0xaf, 0xeb, 0x82, 0x32, 0x4d, - 0xd3, 0xb8, 0xc7, 0xc1, 0x37, 0x49, 0x2b, 0xae, 0xc4, 0xdc, 0x11, 0xd2, 0x49, 0x78, 0x7c, 0xb5, - 0xa7, 0x7c, 0x11, 0xf5, 0x69, 0xbe, 0x3b, 0xb4, 0xd5, 0xb7, 0xa4, 0x97, 0xe1, 0xec, 0x2d, 0xab, - 0xce, 0xb3, 0x69, 0x20, 0xe4, 0x0d, 0xe1, 0x97, 0x63, 0xf8, 0x80, 0x43, 0x0b, 0xab, 0x6c, 0x89, - 0x2b, 0x47, 0x7c, 0x14, 0x9c, 0xb0, 0x69, 0xd9, 0x8b, 0x65, 0x34, 0x77, 0x46, 0x9b, 0xef, 0xf6, - 0x4b, 0xbf, 0x89, 0x36, 0x5f, 0x7e, 0x27, 0x88, 0x82, 0x92, 0xb9, 0x68, 0x2b, 0xbc, 0xf4, 0x83, - 0x15, 0x8f, 0x99, 0x7d, 0xf8, 0x98, 0xb1, 0x95, 0xad, 0xef, 0x88, 0x08, 0x02, 0xe1, 0x68, 0x04, - 0x86, 0x57, 0x53, 0x93, 0x13, 0x84, 0xfc, 0x4c, 0x75, 0xb4, 0xed, 0x2e, 0x21, 0xf2, 0x5f, 0x88, - 0x12, 0x12, 0x22, 0x5d, 0xf1, 0x75, 0xc4, 0x09, 0x04, 0xb1, 0x5b, 0xe2, 0xb1, 0x5b, 0xdf, 0xc4, - 0x88, 0x89, 0x1c, 0x2c, 0x7e, 0x93, 0xfc, 0x41, 0xc7, 0x6c, 0x47, 0xb1, 0x96, 0xe2, 0xb7, 0xc4, - 0x41, 0x0e, 0xed, 0x34, 0xfe, 0x20, 0xa4, 0x6d, 0x7f, 0x1f, 0x0b, 0x2a, 0x7b, 0x97, 0x6e, 0xef, - 0xd5, 0x7c, 0x21, 0x15, 0xde, 0xaa, 0xa2, 0xed, 0x57, 0xe3, 0x0a, 0x76, 0x63, 0x63, 0xa6, 0xee, - 0x5f, 0x77, 0xd5, 0x4d, 0x9c, 0x48, 0x44, 0x41, 0xfb, 0x33, 0xb3, 0x33, 0x76, 0xfa, 0xb5, 0xe2, - 0x41, 0x5d, 0xed, 0xcf, 0xf6, 0xd9, 0xae, 0xea, 0x2f, 0x78, 0x91, 0x82, 0xf5, 0x5c, 0x94, 0x17, - 0x12, 0xca, 0x28, 0x8d, 0x49, 0x5f, 0xc4, 0x82, 0x7c, 0x86, 0x34, 0x4c, 0x8d, 0x01, 0xa8, 0x43, - 0xbb, 0x7c, 0x13, 0x64, 0xc1, 0xec, 0xa7, 0x6c, 0xf2, 0xfd, 0xc4, 0x42, 0x36, 0x66, 0xa2, 0xcb, - 0xa0, 0x3b, 0x56, 0xed, 0x78, 0xc2, 0x1a, 0x82, 0x74, 0x99, 0xba, 0xe5, 0x32, 0x33, 0x5c, 0x29, - 0xad, 0x70, 0x9d, 0xef, 0x55, 0xfd, 0xef, 0x37, 0xf0, 0xb8, 0x87, 0xbb, 0x63, 0xa8, 0x3c, 0x56, - 0x2a, 0x5e, 0x6a, 0x26, 0xdb, 0xff, 0x0d, 0x9d, 0xb4, 0xa9, 0x65, 0x7a, 0x3f, 0xa3, 0xff, 0x09, - 0x6a, 0xb9, 0x77, 0x5c, 0xba, 0x69, 0x7c, 0x16, 0x5a, 0xb4, 0xb4, 0xdb, 0xd5, 0xb6, 0xdc, 0xf8, - 0x8b, 0xb4, 0xd3, 0x4e, 0x7d, 0xb5, 0xe4, 0xb5, 0x69, 0xfc, 0x5f, 0x49, 0x24, 0x8b, 0xa9, 0x45, - 0xe0, 0xa4, 0x96, 0xed, 0x27, 0xa6, 0xd3, 0x6a, 0xf0, 0x57, 0x0a, 0x6a, 0xfb, 0x76, 0xee, 0x36, - 0xb5, 0xa4, 0x92, 0x49, 0x0b, 0x9f, 0xf0, 0x47, 0x7d, 0x26, 0xf8, 0x24, 0xed, 0xa7, 0x2f, 0x82, - 0xc9, 0xbc, 0xbb, 0xbd, 0x6d, 0x2b, 0x52, 0xf8, 0xe9, 0xb1, 0xa4, 0x92, 0x69, 0xad, 0x3a, 0x7f, - 0x04, 0xd6, 0x8b, 0xc9, 0x9c, 0xbb, 0xe1, 0xf0, 0x47, 0xa7, 0x4e, 0x2f, 0x84, 0x6b, 0x6c, 0xde, - 0xeb, 0xdb, 0x6f, 0xc1, 0x37, 0x4d, 0xb5, 0xdd, 0x95, 0xc4, 0x16, 0x9d, 0x35, 0xda, 0xf6, 0x5d, - 0xdf, 0xc4, 0x52, 0x55, 0x4b, 0x69, 0xfc, 0x61, 0xad, 0xdb, 0xb6, 0x4c, 0xad, 0x35, 0xf3, 0xf6, - 0xaa, 0xe2, 0x03, 0xb3, 0xe6, 0x51, 0xd3, 0x4d, 0x1a, 0xc9, 0x79, 0x47, 0x31, 0x9f, 0xc3, 0x94, - 0xa6, 0xca, 0x1a, 0xa3, 0xff, 0x17, 0xa5, 0x33, 0xd3, 0x42, 0xb1, 0xb4, 0x1c, 0x48, 0x2b, 0x38, - 0xef, 0x55, 0xa1, 0xbb, 0xdf, 0x25, 0x11, 0x33, 0xe3, 0xae, 0x93, 0xa6, 0x1a, 0x9a, 0x76, 0xe8, - 0xef, 0x39, 0xaa, 0xc4, 0x82, 0x4e, 0xea, 0x8e, 0xf1, 0x02, 0x51, 0x2b, 0x89, 0x84, 0x44, 0x5d, - 0xb4, 0xdd, 0xde, 0xb9, 0x08, 0x38, 0x88, 0x26, 0x13, 0x8f, 0xa1, 0x7a, 0x43, 0xc8, 0x3e, 0xf8, - 0x24, 0x2b, 0xdd, 0xfb, 0x86, 0x42, 0x22, 0xb7, 0x4c, 0xbd, 0xcb, 0x62, 0x1e, 0x5b, 0xe2, 0x01, - 0x0e, 0xb6, 0xdf, 0xe4, 0xbb, 0x53, 0x67, 0x08, 0x0a, 0x25, 0xb5, 0x4e, 0x92, 0x4b, 0xe0, 0x8e, - 0xfa, 0xbf, 0x12, 0x24, 0x7d, 0xef, 0x4d, 0xbd, 0x56, 0xb8, 0x98, 0x2e, 0xdd, 0xdd, 0x55, 0x24, - 0xbb, 0x89, 0x82, 0x3a, 0xdd, 0x27, 0xf1, 0x22, 0x88, 0xf0, 0xea, 0xaa, 0xbf, 0x18, 0x7a, 0xd5, - 0x98, 0x8e, 0x35, 0xb3, 0x4a, 0x98, 0x5f, 0xe9, 0xd1, 0xe2, 0x21, 0x4f, 0x2e, 0x23, 0x49, 0x5f, - 0xb6, 0xdd, 0x29, 0x20, 0xcb, 0xff, 0x04, 0xc5, 0x92, 0x0d, 0x46, 0x9b, 0x0d, 0x9a, 0x4f, 0xf2, - 0x92, 0xb5, 0xc4, 0x48, 0x54, 0x96, 0x87, 0xe0, 0xab, 0x55, 0x55, 0x13, 0x82, 0xcd, 0x3a, 0x6f, - 0xf0, 0xa6, 0x13, 0x4d, 0x69, 0x9b, 0xe8, 0xd9, 0x96, 0x27, 0x72, 0x0d, 0x75, 0xef, 0x89, 0x32, - 0x4f, 0xc9, 0xf7, 0x88, 0xf1, 0x01, 0x71, 0x1b, 0x8a, 0xee, 0xda, 0x6f, 0xae, 0x58, 0x1a, 0x9f, - 0xe2, 0x04, 0xcb, 0xf6, 0xf5, 0xf1, 0x3d, 0x5b, 0x6b, 0x7f, 0x0a, 0x10, 0x9a, 0xde, 0xab, 0x74, - 0xeb, 0x7c, 0xcc, 0x45, 0xf2, 0x66, 0xf9, 0xf8, 0x40, 0xaf, 0x4d, 0xb4, 0xde, 0xda, 0x7b, 0x7e, - 0x08, 0x7a, 0x6f, 0x02, 0x2f, 0x05, 0xa4, 0xa6, 0x91, 0x34, 0xfe, 0x6f, 0xef, 0x8b, 0xe6, 0xcb, - 0x76, 0xfe, 0xb5, 0x5c, 0x11, 0x1d, 0xef, 0x37, 0x2b, 0xbd, 0x53, 0xf8, 0x70, 0xd4, 0x92, 0xab, - 0x6d, 0xb6, 0xdf, 0xf8, 0xed, 0x49, 0x9b, 0x74, 0x92, 0x88, 0xb9, 0xf8, 0x25, 0x9f, 0x3d, 0xf4, - 0xf0, 0xf8, 0x2f, 0x23, 0x6a, 0x58, 0xb1, 0xb1, 0x2f, 0x63, 0x7e, 0x9a, 0xdb, 0x1d, 0x44, 0x72, - 0x8f, 0xf1, 0xc5, 0x71, 0x05, 0xa9, 0x27, 0x34, 0x5f, 0x7a, 0x69, 0x37, 0xe0, 0xb8, 0xe7, 0x84, - 0x56, 0xec, 0x1b, 0x63, 0x89, 0x85, 0xf5, 0xff, 0xe1, 0x48, 0xac, 0xf8, 0xf7, 0x29, 0xa9, 0x38, - 0xaf, 0x7a, 0xba, 0x13, 0xf8, 0x93, 0x71, 0xba, 0xaf, 0xc5, 0x73, 0x31, 0xe6, 0xfe, 0x09, 0xbb, - 0xbe, 0xa9, 0xbd, 0x44, 0xc2, 0x35, 0x2f, 0xef, 0x43, 0x99, 0x8a, 0x3e, 0x24, 0x58, 0x89, 0x32, - 0xda, 0x71, 0x85, 0xfc, 0x28, 0x25, 0xde, 0x52, 0x0d, 0xca, 0x41, 0xb4, 0xec, 0xa4, 0x1b, 0xcf, - 0x96, 0xbf, 0xc4, 0xc6, 0x45, 0x6e, 0xef, 0x6e, 0xee, 0xef, 0x2e, 0xc6, 0xaa, 0x4d, 0xbd, 0xbe, - 0x24, 0x7f, 0x55, 0x7b, 0xcf, 0xdb, 0xf8, 0x81, 0xd7, 0x77, 0x15, 0xbb, 0xf4, 0xcd, 0xfe, 0x24, - 0x45, 0xe9, 0xdd, 0x8d, 0xaf, 0x12, 0x0a, 0x35, 0x53, 0x74, 0xf3, 0xef, 0x08, 0x82, 0xad, 0xd3, - 0xbe, 0xd2, 0x44, 0xd8, 0x87, 0xbf, 0xc6, 0x1b, 0x55, 0x49, 0x27, 0xb7, 0x62, 0x8b, 0x7b, 0xf8, - 0xbb, 0x56, 0x37, 0x51, 0x7a, 0xf1, 0x00, 0x94, 0xa3, 0xea, 0xef, 0xab, 0x33, 0x36, 0xe2, 0x21, - 0x4a, 0x88, 0xc2, 0x35, 0x45, 0x59, 0x53, 0xd2, 0x5d, 0x22, 0x7d, 0x98, 0x93, 0x71, 0x30, 0xa1, - 0xc7, 0xa5, 0x1e, 0x68, 0x4f, 0xa9, 0x94, 0x3f, 0x42, 0xf9, 0x34, 0x10, 0x63, 0xac, 0x23, 0xcb, - 0xce, 0xf5, 0x91, 0xdb, 0xe3, 0x2d, 0xe3, 0xa7, 0xa9, 0x7d, 0x93, 0x32, 0xbd, 0x9e, 0x7f, 0x0a, - 0x63, 0x58, 0xd2, 0x7c, 0x90, 0xb4, 0xcb, 0x29, 0x54, 0x46, 0xd6, 0x24, 0xef, 0xc4, 0x89, 0x11, - 0x5a, 0xd8, 0x25, 0x9a, 0x1e, 0x10, 0x24, 0x98, 0xbb, 0xde, 0xb5, 0xf8, 0xed, 0x6d, 0x8b, 0xda, - 0x57, 0x7f, 0x11, 0x04, 0xe5, 0x6f, 0x25, 0x16, 0x77, 0xf9, 0x36, 0x94, 0xd9, 0xe1, 0x02, 0xea, - 0xa4, 0xe5, 0xb4, 0xec, 0xa4, 0x9b, 0x5e, 0xc9, 0x7b, 0xf8, 0x25, 0x14, 0xf7, 0x8d, 0x31, 0x64, - 0x20, 0x3f, 0xbe, 0x1b, 0x8d, 0xae, 0xde, 0x3b, 0x74, 0x59, 0x3c, 0x6f, 0x5d, 0x61, 0xef, 0xff, - 0x04, 0x07, 0xd3, 0x68, 0xda, 0xd6, 0x9d, 0x37, 0x5c, 0xfd, 0xbf, 0xf1, 0xd5, 0x37, 0xb6, 0xdf, - 0x4e, 0x93, 0x7f, 0x44, 0xca, 0xf9, 0x77, 0xb7, 0xe3, 0x0a, 0xa7, 0xed, 0xed, 0xa7, 0xe5, 0xc9, - 0xb7, 0x4b, 0xc5, 0x92, 0xa9, 0x77, 0x75, 0xc8, 0x54, 0x92, 0x69, 0xaf, 0x04, 0xf4, 0x97, 0x3e, - 0x78, 0xab, 0x92, 0x9d, 0x3f, 0x8a, 0xc9, 0xb4, 0x8b, 0xe3, 0xfc, 0x79, 0x13, 0x9c, 0x82, 0xf5, - 0xa5, 0x4d, 0x34, 0xbc, 0x66, 0x9a, 0x5a, 0x46, 0xcb, 0x6f, 0x75, 0xcd, 0xbe, 0x3e, 0xad, 0xdb, - 0x26, 0x66, 0xda, 0x6d, 0xb5, 0xe0, 0x96, 0xef, 0xc9, 0xcf, 0xbb, 0xd7, 0x04, 0xf6, 0xed, 0xe4, - 0xed, 0xc7, 0xdf, 0x0a, 0x19, 0x68, 0xb9, 0x18, 0x58, 0xdd, 0x03, 0xe1, 0x72, 0xa1, 0x7a, 0xa8, - 0x58, 0x5e, 0x23, 0xe0, 0x84, 0xf7, 0x3f, 0xfb, 0xe4, 0x2b, 0xbf, 0x63, 0xe2, 0x02, 0x9c, 0x72, - 0xad, 0x8c, 0x65, 0x53, 0x52, 0xad, 0xec, 0x7e, 0xa5, 0xce, 0xf8, 0x25, 0xe5, 0x50, 0xad, 0x8d, - 0x07, 0xd5, 0xfb, 0xe1, 0x1d, 0x55, 0x5b, 0x36, 0x2b, 0x3a, 0x85, 0x9f, 0xc4, 0x8b, 0xbe, 0xb5, - 0xaf, 0x82, 0x7d, 0x24, 0xe8, 0x92, 0x36, 0x7d, 0xc4, 0x89, 0x15, 0xac, 0xea, 0x25, 0x63, 0xf0, - 0x57, 0xac, 0x6a, 0x47, 0xb7, 0x2e, 0x3d, 0xf8, 0xef, 0xe2, 0x41, 0x28, 0x8d, 0xdb, 0x27, 0xff, - 0x54, 0x4c, 0x5d, 0x8f, 0x5a, 0xd2, 0xc4, 0xc2, 0x67, 0x55, 0xd4, 0x8c, 0x21, 0xf8, 0x46, 0x27, - 0x76, 0x9a, 0x95, 0x5f, 0x08, 0x89, 0xae, 0x9b, 0x69, 0xb6, 0x5c, 0x2d, 0xe1, 0x10, 0x80, 0x88, - 0xba, 0xa9, 0xb9, 0xfc, 0x7f, 0xc1, 0x21, 0x07, 0x16, 0xb2, 0xf5, 0xee, 0x22, 0x0a, 0xca, 0xd1, - 0xb2, 0xad, 0x28, 0xba, 0xea, 0x8b, 0xb8, 0x88, 0x26, 0x8a, 0xe7, 0xda, 0x73, 0x10, 0x7d, 0xc4, - 0xc6, 0x1d, 0xa2, 0x60, 0x67, 0xd3, 0x2a, 0xde, 0xb5, 0x6c, 0x5c, 0x9d, 0xb9, 0xf1, 0x23, 0xea, - 0x30, 0xd8, 0xae, 0xfa, 0xaa, 0xb2, 0x24, 0x3f, 0x25, 0x57, 0xf0, 0x4f, 0x55, 0x5a, 0xdd, 0x06, - 0xff, 0x29, 0x23, 0x0a, 0xbf, 0x12, 0x0a, 0x65, 0xa7, 0xa6, 0x56, 0x33, 0x88, 0x17, 0xdd, 0xf3, - 0x09, 0xe5, 0xcc, 0x44, 0xc4, 0xad, 0x57, 0x25, 0x56, 0xbe, 0x3a, 0x90, 0xca, 0xdc, 0xa6, 0xde, - 0xeb, 0x29, 0xf8, 0x92, 0x91, 0x6a, 0xbe, 0x34, 0x45, 0xb4, 0xba, 0xb2, 0x1a, 0x56, 0x55, 0xdf, - 0x6a, 0x89, 0x76, 0xd7, 0x1a, 0xd3, 0x4b, 0xfc, 0x14, 0x97, 0x57, 0xe5, 0xe7, 0x94, 0xce, 0x5f, - 0x15, 0xdd, 0x4a, 0xda, 0x34, 0x36, 0x37, 0xc2, 0x5b, 0xa5, 0xaa, 0x75, 0xcb, 0x6d, 0x7f, 0x12, - 0x55, 0x21, 0x05, 0x96, 0x62, 0x0c, 0x84, 0x5f, 0xdd, 0x6b, 0xf0, 0x85, 0xbd, 0x2a, 0x74, 0xe7, - 0x6b, 0xcf, 0x82, 0x9d, 0xdd, 0xbd, 0xa6, 0xf3, 0xe1, 0x36, 0x5c, 0xf8, 0x25, 0xcb, 0x86, 0xce, - 0xda, 0x7d, 0x7c, 0x96, 0x9b, 0x69, 0x7c, 0x5c, 0x9d, 0x34, 0x95, 0x0c, 0xec, 0xb7, 0x5f, 0x82, - 0xca, 0x65, 0xed, 0x7a, 0x49, 0x39, 0x5a, 0xb5, 0x57, 0xc2, 0x74, 0x92, 0xdd, 0xff, 0x26, 0xdd, - 0x7c, 0x3b, 0xc9, 0xed, 0xcb, 0x8d, 0xac, 0xed, 0x2f, 0x87, 0x71, 0x5b, 0x67, 0xf3, 0xf6, 0xe9, - 0xf8, 0x52, 0xdb, 0x5e, 0x4c, 0x72, 0xb7, 0x33, 0x5d, 0x76, 0x36, 0x1e, 0x0a, 0xe5, 0xc6, 0x3b, - 0x63, 0x1f, 0xab, 0xe9, 0x8f, 0x55, 0x0a, 0x38, 0xbf, 0x84, 0x79, 0xe2, 0x04, 0x8c, 0x26, 0x8c, - 0xe4, 0x32, 0x84, 0xbd, 0x89, 0x6f, 0x6a, 0x5f, 0x82, 0xe3, 0xaa, 0x7a, 0xd4, 0xe4, 0x7b, 0xe0, - 0x8f, 0x6d, 0xab, 0xfc, 0x14, 0x9d, 0x38, 0xd7, 0xa4, 0x8a, 0x3b, 0x53, 0x5b, 0xf1, 0x10, 0x59, - 0x71, 0x5b, 0xe4, 0xf5, 0xe5, 0xbf, 0xfe, 0x51, 0x1b, 0xba, 0xe4, 0x16, 0x56, 0x65, 0xdb, 0xf0, - 0x5b, 0x55, 0x5b, 0x9f, 0x5a, 0xfb, 0xe1, 0x49, 0x31, 0x2c, 0x99, 0x43, 0xbd, 0xae, 0x5e, 0xe5, - 0xb8, 0x91, 0x21, 0x29, 0xbc, 0xcd, 0xf5, 0x7c, 0x33, 0x09, 0x68, 0xe2, 0x16, 0x15, 0x7c, 0x4c, - 0x14, 0xc6, 0x3d, 0x16, 0xed, 0xb1, 0x29, 0x20, 0xd1, 0x91, 0x7a, 0xe2, 0x21, 0x23, 0x52, 0xbe, - 0xab, 0x88, 0x12, 0x10, 0x8e, 0xf5, 0x3a, 0x6c, 0xd3, 0x75, 0x57, 0x7a, 0xe1, 0x11, 0x02, 0x66, - 0xe9, 0xa5, 0x5a, 0xf0, 0x84, 0x17, 0x49, 0x9e, 0xb6, 0x33, 0x76, 0xe1, 0x01, 0x22, 0xea, 0xac, - 0xf2, 0x2e, 0xa2, 0xe2, 0x6c, 0x62, 0x21, 0x42, 0xe4, 0xda, 0x56, 0x67, 0xd6, 0xf6, 0xeb, 0x9b, - 0x96, 0x62, 0x7e, 0x5b, 0x88, 0x8f, 0x85, 0x28, 0x26, 0xa7, 0x88, 0xe2, 0x7a, 0xbd, 0xf8, 0x90, - 0x55, 0x63, 0x00, 0xf5, 0xd6, 0x64, 0x60, 0xde, 0x06, 0x34, 0xac, 0x63, 0xb7, 0xc1, 0x59, 0x57, - 0x4a, 0x2f, 0x3b, 0x8c, 0xe7, 0x1e, 0x5e, 0xa6, 0xf5, 0x49, 0x5a, 0xb1, 0x22, 0x24, 0x87, 0x52, - 0xe5, 0xfc, 0x41, 0x15, 0x2d, 0x3b, 0x19, 0xff, 0x9a, 0xca, 0x49, 0xfc, 0x97, 0xb6, 0xdf, 0x8a, - 0x3d, 0xed, 0x5e, 0xfe, 0x2a, 0x35, 0x97, 0x4a, 0x89, 0xb7, 0x45, 0x88, 0x8a, 0xdc, 0xd9, 0xad, - 0x27, 0xe2, 0x06, 0x58, 0xed, 0x26, 0x95, 0xf8, 0xdf, 0xe1, 0xe4, 0xa1, 0x33, 0x89, 0x16, 0x21, - 0x1e, 0xef, 0x6e, 0xb8, 0xad, 0x0c, 0xf0, 0x1f, 0x32, 0xe7, 0xbe, 0xfc, 0x40, 0x5c, 0xd7, 0xbd, - 0xee, 0x2d, 0x0d, 0x35, 0x26, 0x9b, 0xff, 0x85, 0xce, 0x9b, 0x74, 0xa7, 0xe9, 0x6a, 0x99, 0xe2, - 0xf4, 0xbf, 0xc7, 0xed, 0xdb, 0xd3, 0x76, 0x32, 0xb2, 0xc6, 0xc6, 0x3c, 0x7e, 0xd2, 0x53, 0xe7, - 0x49, 0x26, 0xeb, 0x9a, 0x96, 0x97, 0x8f, 0xda, 0xb9, 0xf4, 0xfb, 0x5d, 0xad, 0xfe, 0x09, 0xba, - 0xb5, 0x2b, 0x1e, 0x2f, 0x85, 0xf3, 0x62, 0xdd, 0xaa, 0xae, 0x7e, 0xff, 0xe0, 0xc3, 0x4d, 0xb9, - 0xa3, 0xa2, 0xc2, 0xb3, 0x7f, 0xf9, 0x74, 0x98, 0xc8, 0xd5, 0xc9, 0xb7, 0x6f, 0xc9, 0xa7, 0x4f, - 0xcb, 0x4d, 0xb4, 0xfe, 0x4a, 0x49, 0x24, 0x5c, 0x5c, 0x55, 0xa6, 0x9a, 0xda, 0xb5, 0xe1, 0x7d, - 0x38, 0xed, 0x13, 0x8f, 0x59, 0x3a, 0x73, 0xfc, 0x40, 0x48, 0x50, 0xdb, 0x46, 0x7e, 0x7f, 0xe1, - 0xc6, 0xa1, 0x35, 0x75, 0x78, 0x27, 0x12, 0x46, 0x3a, 0xaa, 0xaf, 0xfc, 0x48, 0xed, 0xdc, 0xac, - 0x4b, 0x8b, 0xca, 0x41, 0x2e, 0x57, 0xc4, 0xbc, 0x49, 0x2f, 0x13, 0x65, 0x99, 0x8f, 0xc5, 0x19, - 0x49, 0xd7, 0x51, 0xcb, 0xbf, 0x88, 0x18, 0x6b, 0x23, 0x0e, 0xee, 0x46, 0x04, 0x79, 0xdc, 0x64, - 0x2e, 0x0f, 0xc2, 0x16, 0xd8, 0x70, 0xed, 0x19, 0x78, 0xb1, 0xbd, 0x8a, 0x23, 0xde, 0xd9, 0xfe, - 0x13, 0x2d, 0xde, 0xb4, 0x7c, 0x48, 0x91, 0x5a, 0x54, 0xe9, 0xda, 0xe2, 0x42, 0x92, 0x6b, 0x6f, - 0x63, 0xcd, 0x9d, 0x1d, 0x56, 0x8c, 0x8a, 0xb2, 0xde, 0x24, 0x12, 0xec, 0x57, 0xa9, 0x37, 0xef, - 0x89, 0x23, 0x6c, 0x4c, 0xdf, 0x4c, 0xcc, 0x62, 0x23, 0x24, 0xaa, 0x3a, 0x99, 0xc8, 0xe2, 0x75, - 0x51, 0xab, 0x79, 0xf3, 0x86, 0x88, 0x40, 0xa0, 0xa2, 0x7f, 0xfe, 0xeb, 0x17, 0x89, 0x35, 0x9e, - 0xb8, 0x90, 0x80, 0xf3, 0xba, 0x9e, 0x52, 0x27, 0xcb, 0xd9, 0xfb, 0x6a, 0x3d, 0x8f, 0x0a, 0x45, - 0x63, 0xea, 0xd9, 0xff, 0x99, 0x85, 0x3f, 0xc2, 0xf5, 0x38, 0xd0, 0xf3, 0x09, 0x92, 0xf1, 0x3e, - 0x77, 0xb6, 0x1a, 0x45, 0x20, 0x83, 0x24, 0x99, 0xdd, 0xfe, 0x6d, 0xb1, 0x47, 0xf3, 0x67, 0x29, - 0xa9, 0xcf, 0x9b, 0xbc, 0x76, 0xf0, 0x50, 0x14, 0xea, 0x27, 0x0d, 0xbc, 0xe1, 0x48, 0x74, 0x96, - 0xaa, 0x4c, 0x2f, 0xc5, 0xdd, 0x4a, 0x9f, 0x05, 0x32, 0xb0, 0x07, 0xee, 0xaf, 0xcc, 0xcd, 0x35, - 0x17, 0x51, 0x7f, 0x7c, 0x15, 0xed, 0x4d, 0xd8, 0xdd, 0xf5, 0x5f, 0xdc, 0x48, 0x92, 0x72, 0x7f, - 0x82, 0xba, 0xd5, 0x6a, 0xa9, 0xcd, 0x09, 0x20, 0x8f, 0xae, 0x88, 0xfe, 0x20, 0x16, 0xd5, 0x4d, - 0x4f, 0x55, 0xae, 0x22, 0x6a, 0xaf, 0xc4, 0x71, 0x02, 0x09, 0x5d, 0x17, 0x13, 0xf0, 0x5a, 0x22, - 0xef, 0x71, 0x5b, 0xbd, 0x71, 0x3f, 0x93, 0xa4, 0xab, 0x10, 0x1a, 0xa1, 0xb9, 0x12, 0xda, 0xf1, - 0x38, 0x7f, 0x84, 0x0e, 0x91, 0x7a, 0x4e, 0xe7, 0xcc, 0xd9, 0x76, 0x89, 0xbf, 0x84, 0xf9, 0x3a, - 0x67, 0xd5, 0x6b, 0xe0, 0x8e, 0xd4, 0xd8, 0x6c, 0x3b, 0x7c, 0x15, 0x5b, 0x4f, 0xb5, 0x49, 0xdb, - 0xbe, 0x5f, 0x05, 0x5d, 0x26, 0xf4, 0x9b, 0x55, 0xf2, 0xae, 0x10, 0x93, 0x7a, 0xd5, 0xad, 0xa6, - 0xbc, 0x5c, 0x9a, 0x9c, 0x57, 0x56, 0x9a, 0xf1, 0xda, 0x49, 0x27, 0xcf, 0x13, 0xe3, 0xf6, 0xaa, - 0xfc, 0x7c, 0xed, 0xe8, 0xe6, 0x61, 0x8c, 0x69, 0x5e, 0xce, 0x94, 0x6d, 0x7c, 0x10, 0x67, 0xc4, - 0xfd, 0xb9, 0x27, 0xea, 0xac, 0xa6, 0x87, 0xf8, 0x22, 0xb1, 0x8d, 0xd4, 0xc7, 0x07, 0x17, 0xc7, - 0x74, 0xed, 0x9f, 0x75, 0x77, 0x6f, 0xc7, 0x55, 0xed, 0xb7, 0x9b, 0xe6, 0xcf, 0x85, 0x23, 0xd4, - 0x83, 0x59, 0x46, 0x34, 0x7a, 0xb8, 0x35, 0x95, 0xb1, 0x8d, 0x0d, 0x24, 0xbb, 0x65, 0xd9, 0x7c, - 0x56, 0x4d, 0x6a, 0xdb, 0x6d, 0x8d, 0xfc, 0x55, 0x39, 0xb5, 0xa6, 0x9a, 0xaf, 0x82, 0x71, 0x14, - 0xa1, 0x23, 0x9e, 0xee, 0x51, 0x25, 0x0a, 0x2f, 0xb9, 0x61, 0xbb, 0x57, 0xe2, 0x55, 0xfe, 0xaf, - 0xf1, 0xc2, 0x5b, 0xb1, 0xb3, 0xd9, 0xab, 0xb1, 0xbf, 0xc9, 0x55, 0xa7, 0xe1, 0x43, 0x55, 0xd6, - 0x3b, 0xdd, 0xe2, 0xbc, 0x8a, 0x92, 0x24, 0x48, 0x2c, 0xf8, 0xc3, 0x5d, 0xdc, 0xfd, 0xa9, 0x61, - 0xd5, 0xbb, 0xfd, 0x2a, 0x11, 0xf3, 0x51, 0x34, 0x3d, 0x3f, 0xc1, 0x6c, 0x74, 0x4e, 0xc7, 0xb5, - 0x64, 0xad, 0x77, 0x13, 0x18, 0x56, 0x47, 0x83, 0xf7, 0x63, 0x22, 0x19, 0xb8, 0x77, 0x01, 0x39, - 0x87, 0x31, 0x5b, 0xbb, 0x33, 0x88, 0x13, 0xbb, 0xd3, 0xcf, 0x11, 0x0a, 0x56, 0x32, 0xd0, 0xff, - 0x17, 0x52, 0xfa, 0x78, 0xe5, 0x15, 0xe0, 0xd8, 0xd1, 0x78, 0xbf, 0x7c, 0x65, 0x8f, 0x69, 0x90, - 0xb8, 0xba, 0x62, 0xe4, 0xe2, 0x98, 0x8f, 0x13, 0xe5, 0xf3, 0x31, 0x78, 0x61, 0x41, 0x12, 0x8c, - 0x76, 0x4b, 0xab, 0x32, 0x41, 0x14, 0x98, 0xd4, 0x56, 0xd9, 0x60, 0xa3, 0x15, 0xbb, 0x91, 0x4e, - 0x19, 0x08, 0x82, 0xc2, 0x09, 0xf6, 0x75, 0x9d, 0x6a, 0xa2, 0xea, 0xaf, 0xc4, 0x09, 0x19, 0xa8, - 0x5a, 0x83, 0x57, 0x7c, 0xbc, 0x5c, 0x90, 0x2f, 0xb1, 0x8b, 0xf8, 0x65, 0xd9, 0x91, 0xfc, 0x48, - 0x23, 0xde, 0xef, 0xc4, 0x84, 0x41, 0x51, 0xd5, 0x53, 0x0a, 0xd5, 0x55, 0x98, 0xcc, 0xd2, 0x2f, - 0xf6, 0x1e, 0x70, 0x13, 0xb6, 0xfb, 0xfb, 0xc4, 0xf0, 0xd1, 0x22, 0x2c, 0xe1, 0x3b, 0xef, 0x25, - 0xeb, 0xff, 0xfb, 0xfc, 0x46, 0x7f, 0xd4, 0x9d, 0x9f, 0x88, 0x21, 0x2a, 0xab, 0xe3, 0xf2, 0x7a, - 0xa3, 0xcb, 0x65, 0xb3, 0x79, 0xaf, 0x82, 0xac, 0x90, 0x3b, 0x32, 0xda, 0xad, 0xb2, 0x65, 0xd9, - 0xc4, 0xc1, 0x19, 0x1e, 0x5d, 0xbf, 0x12, 0x24, 0x27, 0xa9, 0xff, 0x9b, 0x18, 0x3c, 0x48, 0x91, - 0x77, 0xb5, 0xcf, 0x87, 0xcc, 0x48, 0x91, 0x7b, 0xab, 0x37, 0xb3, 0xe2, 0x42, 0x02, 0x6b, 0x5a, - 0xb7, 0xf8, 0xce, 0xd9, 0x72, 0xa9, 0x5f, 0x7c, 0xfd, 0xdf, 0xf1, 0x22, 0x01, 0x71, 0x93, 0x7e, - 0xb2, 0x67, 0x71, 0x16, 0x71, 0x5b, 0xfe, 0x0a, 0x8f, 0x63, 0x5b, 0x19, 0xb2, 0x56, 0x6d, 0xd5, - 0xdf, 0x62, 0x9f, 0xa7, 0xc4, 0x0c, 0x2d, 0x53, 0xa6, 0x33, 0x11, 0xb2, 0x74, 0xd7, 0x9f, 0xf8, - 0x80, 0xa1, 0xab, 0x94, 0x41, 0xaa, 0x93, 0xf1, 0xd3, 0x77, 0xba, 0x06, 0xe7, 0x4f, 0x82, 0x72, - 0xd5, 0x19, 0x29, 0x4e, 0x9e, 0x5f, 0x08, 0x75, 0x46, 0x8e, 0xaf, 0xd5, 0xfc, 0xd7, 0xb7, 0xf3, - 0x4d, 0x5a, 0x7f, 0x05, 0x5b, 0x8a, 0xee, 0xb3, 0xf6, 0xaa, 0x68, 0x79, 0x63, 0x1f, 0x2c, 0xff, - 0x5d, 0x70, 0x59, 0x4d, 0x26, 0x9a, 0x9f, 0x13, 0xdf, 0xaf, 0xd6, 0xb8, 0xbe, 0x36, 0x95, 0xae, - 0xb4, 0xd9, 0x47, 0xab, 0x69, 0x52, 0x52, 0x74, 0xdf, 0xfe, 0x38, 0x95, 0x2b, 0x6a, 0xd4, 0x65, - 0x7a, 0x6f, 0xf1, 0xc5, 0x97, 0x76, 0xf4, 0xd3, 0x4f, 0xf0, 0xbd, 0x5b, 0xb7, 0x4a, 0x92, 0xad, - 0xb6, 0xff, 0xc9, 0xa5, 0x7f, 0x25, 0xbd, 0xa6, 0xbc, 0x9d, 0x93, 0xac, 0x40, 0x2f, 0x10, 0x56, - 0x20, 0x43, 0xee, 0x3a, 0x61, 0xa7, 0xb0, 0x7a, 0xe5, 0x82, 0xff, 0x82, 0xa1, 0x6c, 0x65, 0xa3, - 0x1e, 0x56, 0x99, 0x41, 0x18, 0x72, 0xe8, 0x7a, 0x1a, 0x6c, 0xf8, 0x40, 0x42, 0xe5, 0x09, 0x34, - 0x27, 0x2a, 0x8c, 0xb8, 0x5c, 0xf0, 0x4c, 0x77, 0xa5, 0x9d, 0x97, 0xad, 0xfe, 0x13, 0x2c, 0xcc, - 0x50, 0x92, 0x5f, 0x89, 0x09, 0x71, 0xe4, 0xc4, 0xbc, 0x56, 0xc5, 0xe3, 0x05, 0x3b, 0xb8, 0xad, - 0xdf, 0x07, 0x39, 0xc2, 0xf3, 0x9e, 0xf6, 0xfa, 0x59, 0x6d, 0xfc, 0x14, 0xe2, 0x61, 0x57, 0xb3, - 0x7d, 0xdb, 0xfb, 0x89, 0x82, 0xa1, 0x29, 0xa5, 0x39, 0x23, 0x31, 0xf9, 0x21, 0xef, 0x0c, 0x8c, - 0x38, 0x70, 0xd1, 0x05, 0xbb, 0x31, 0x72, 0xa2, 0xd6, 0x86, 0x9a, 0x64, 0xf4, 0xf1, 0x30, 0x9e, - 0x9b, 0xba, 0xaa, 0xaf, 0x8c, 0xeb, 0x23, 0x11, 0x4c, 0xf1, 0x72, 0x30, 0xac, 0x79, 0x12, 0x78, - 0x47, 0x89, 0x73, 0x45, 0x59, 0x52, 0x30, 0x77, 0xf8, 0xfb, 0x99, 0x3f, 0xd4, 0xbc, 0xb3, 0x0b, - 0x06, 0x82, 0xe5, 0xf2, 0x67, 0xe3, 0x25, 0x9a, 0x8b, 0x89, 0xb0, 0xa1, 0xc3, 0x83, 0x18, 0x67, - 0xc5, 0xea, 0xff, 0x7f, 0x13, 0x0a, 0x73, 0x45, 0xb7, 0x29, 0x9e, 0x6a, 0xe5, 0x13, 0x28, 0x59, - 0x48, 0x35, 0x94, 0xf5, 0xc4, 0x42, 0x64, 0x9f, 0x2d, 0xb6, 0xb6, 0xf1, 0x01, 0x91, 0x95, 0x4d, - 0x6a, 0x4f, 0x27, 0x4c, 0x9d, 0x0c, 0xef, 0x7f, 0x63, 0xe2, 0x02, 0x19, 0x98, 0xdc, 0x5d, 0xd6, - 0xb5, 0xf1, 0x76, 0x33, 0x30, 0x9b, 0x98, 0x55, 0xaf, 0x89, 0x82, 0x3a, 0xd6, 0xde, 0x24, 0x23, - 0x4e, 0x46, 0x75, 0xae, 0xaa, 0xbc, 0x48, 0x27, 0x3c, 0xd4, 0xdb, 0xbf, 0xb8, 0x91, 0x21, 0x23, - 0x73, 0xa8, 0x55, 0xf8, 0x92, 0x56, 0xab, 0xc4, 0x85, 0x3a, 0xa7, 0x75, 0xe9, 0x13, 0x0b, 0x89, - 0x77, 0xf9, 0x49, 0x6d, 0x26, 0xf1, 0x36, 0x64, 0xdf, 0xf3, 0x75, 0x17, 0xf0, 0x56, 0x5a, 0x4b, - 0x43, 0x37, 0x0d, 0x54, 0xd6, 0x4c, 0xf7, 0x88, 0x04, 0x65, 0x36, 0xe9, 0x77, 0x13, 0x29, 0x2f, - 0x15, 0xc3, 0x4e, 0x11, 0xa8, 0xb2, 0x5f, 0xd7, 0xaf, 0xb7, 0x13, 0x12, 0x5a, 0xdb, 0x93, 0xd7, - 0xc1, 0x41, 0xf2, 0xe1, 0x72, 0xaf, 0x97, 0xc2, 0x06, 0xad, 0x69, 0xbd, 0x8c, 0x7a, 0x9b, 0xff, - 0x8d, 0xcb, 0xdb, 0x75, 0x72, 0xb5, 0x15, 0x4b, 0x1a, 0x97, 0xc3, 0x93, 0x88, 0xea, 0x54, 0xf7, - 0x88, 0x69, 0xfc, 0x40, 0x6c, 0x8e, 0x53, 0x36, 0x63, 0xc9, 0x97, 0x1e, 0xef, 0xfc, 0x16, 0x8b, - 0xab, 0xd3, 0x6d, 0x36, 0xca, 0xdf, 0x0a, 0x1a, 0x4d, 0x6d, 0xdb, 0x5f, 0x5a, 0x74, 0xde, 0xfa, - 0xf9, 0x65, 0x62, 0x56, 0x3e, 0x2a, 0xdd, 0x7e, 0xda, 0xf8, 0xba, 0x32, 0x65, 0xa4, 0x92, 0x69, - 0xa8, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x59, 0x2c, 0xb0, 0x36, 0xbc, 0x22, 0x11, 0x19, 0x4c, - 0x65, 0xb1, 0xd6, 0x81, 0x8f, 0x28, 0xf2, 0xaf, 0x2a, 0xf2, 0x8f, 0x28, 0xf2, 0xaf, 0x2a, 0xf7, - 0x86, 0x63, 0xc9, 0x8f, 0xa4, 0xfe, 0x13, 0x34, 0x2a, 0xfc, 0x86, 0x2b, 0x1e, 0xb8, 0xbe, 0xd3, - 0x56, 0x9a, 0x6b, 0xd7, 0xbe, 0x7f, 0xbe, 0x9a, 0x62, 0xac, 0x55, 0xf8, 0xd1, 0x43, 0x69, 0xb5, - 0x74, 0xd3, 0x4d, 0x33, 0xb0, 0x86, 0x76, 0x74, 0xd3, 0x4d, 0x33, 0xa2, 0x3f, 0x55, 0xa8, 0xce, - 0x40, 0x9e, 0x31, 0x4c, 0xbd, 0x11, 0x32, 0x5c, 0x14, 0x17, 0x1a, 0xf2, 0xaf, 0x6a, 0xbd, 0xa6, - 0x47, 0xc4, 0x1a, 0x6c, 0x36, 0x2c, 0xac, 0x48, 0x26, 0x26, 0xd3, 0x49, 0x25, 0x8e, 0x37, 0xcb, - 0x49, 0x2f, 0x88, 0x7d, 0x24, 0x84, 0x71, 0x1d, 0x24, 0xb4, 0x92, 0x13, 0xc1, 0x41, 0x10, 0x34, - 0x0d, 0xa6, 0x90, 0x34, 0x0d, 0xa6, 0x8b, 0x01, 0x7e, 0x0c, 0x0d, 0x7b, 0x8c, 0xfe, 0x5f, 0xdf, - 0x56, 0xad, 0x48, 0xc4, 0x69, 0x8b, 0x62, 0xdf, 0x82, 0x09, 0x48, 0x37, 0x40, 0xd1, 0xa3, 0x7d, - 0x29, 0xcf, 0x86, 0xca, 0x98, 0xfe, 0x2d, 0x8b, 0x7e, 0x14, 0xa4, 0x93, 0xba, 0x49, 0x56, 0x1a, - 0x39, 0xeb, 0x68, 0x98, 0xed, 0x2a, 0x7c, 0x2a, 0x74, 0x0c, 0x6e, 0x84, 0xcf, 0x35, 0x12, 0xda, - 0x9a, 0xa7, 0x7b, 0x9f, 0xf1, 0x21, 0xdb, 0x33, 0xd7, 0xcb, 0xad, 0xe8, 0xcb, 0x53, 0xa1, 0xc3, - 0x0f, 0xe8, 0x5f, 0x2f, 0xff, 0xc5, 0xe2, 0xfb, 0x4d, 0x7e, 0x1e, 0x18, 0x45, 0x48, 0x4d, 0x18, - 0x8c, 0xf9, 0xda, 0x4f, 0xd9, 0x6e, 0x6b, 0xff, 0x05, 0x65, 0x69, 0xa6, 0x9a, 0x31, 0x26, 0x54, - 0x6f, 0x45, 0xed, 0x15, 0x67, 0x7c, 0x87, 0x81, 0x6a, 0xf1, 0x02, 0xda, 0x6b, 0x69, 0xaf, 0xc2, - 0xa5, 0x1f, 0xf2, 0xff, 0x7a, 0xff, 0x2f, 0xf7, 0x99, 0x0d, 0x57, 0xa6, 0x98, 0x89, 0x98, 0xcb, - 0xd1, 0x12, 0xaf, 0x0a, 0x76, 0x9a, 0xc4, 0xb8, 0x25, 0xcd, 0xa6, 0xb6, 0x9a, 0x11, 0x69, 0xf0, - 0x57, 0x69, 0xae, 0xd3, 0x5b, 0x4d, 0x65, 0x4f, 0x85, 0x36, 0xda, 0x5d, 0xa6, 0xb6, 0x9a, 0xda, - 0x6b, 0x2f, 0x82, 0xeb, 0x4d, 0x6d, 0x35, 0x95, 0x0e, 0x9f, 0x0a, 0x49, 0x99, 0x68, 0x2e, 0x4c, - 0x7e, 0xf4, 0x9a, 0xc5, 0x17, 0x25, 0x32, 0xf8, 0x50, 0xb8, 0x3d, 0xd0, 0x1e, 0xe9, 0x83, 0xdd, - 0x01, 0xee, 0x80, 0xeb, 0xa0, 0xeb, 0xa7, 0x1d, 0x74, 0x1d, 0x74, 0xca, 0x9f, 0x04, 0x70, 0x75, - 0xd1, 0x9e, 0x25, 0xa7, 0xc6, 0xf0, 0x75, 0xd0, 0x1d, 0x74, 0x07, 0x5d, 0x01, 0xd7, 0x4f, 0x83, - 0xae, 0x80, 0xeb, 0xa6, 0x0e, 0xba, 0x03, 0xae, 0x82, 0x5a, 0x72, 0xe9, 0x77, 0xfc, 0x3f, 0x07, - 0x5d, 0x10, 0xf0, 0x75, 0xd0, 0x1d, 0x74, 0xe0, 0xeb, 0xa1, 0xe8, 0x0f, 0x74, 0x83, 0x22, 0x7f, - 0x8b, 0x5e, 0x34, 0xc9, 0x24, 0xc1, 0xb0, 0x66, 0x20, 0x99, 0x96, 0xe7, 0x01, 0xca, 0x48, 0xa4, - 0x86, 0x38, 0xc9, 0x5a, 0xc2, 0x71, 0x6b, 0x9c, 0xe7, 0x03, 0x68, 0x9d, 0x93, 0x63, 0x87, 0x06, - 0xc8, 0xc3, 0x49, 0xd5, 0x6f, 0x1a, 0x3a, 0xf3, 0xa5, 0x1c, 0x3c, 0x6d, 0xc0, 0x23, 0x47, 0xa0, - 0x9c, 0x11, 0x5a, 0x52, 0x72, 0x05, 0xe2, 0x18, 0xc7, 0xbd, 0xee, 0x83, 0x23, 0x7c, 0xf5, 0x93, - 0x53, 0xa2, 0x66, 0xfc, 0x55, 0x89, 0x6a, 0xea, 0xb2, 0xbe, 0x34, 0x7b, 0x76, 0x61, 0x33, 0x2e, - 0x17, 0x36, 0xb8, 0xbf, 0x14, 0x59, 0x51, 0xce, 0x02, 0x06, 0xed, 0x3f, 0x3a, 0xed, 0x86, 0x9d, - 0xe6, 0x3f, 0x1a, 0x24, 0x63, 0xca, 0x3d, 0xea, 0x3c, 0xa3, 0xde, 0x3b, 0xe5, 0xbe, 0xf5, 0xbe, - 0x5b, 0xef, 0x22, 0x2a, 0xfc, 0xda, 0x6d, 0xf3, 0xc8, 0x8a, 0xbf, 0x36, 0x9b, 0x7c, 0xf4, 0xab, - 0xf3, 0x69, 0xb7, 0xcf, 0x4a, 0xbf, 0x36, 0x9b, 0x7c, 0xf4, 0xcb, 0xf2, 0xe9, 0x74, 0x9c, 0x25, - 0x96, 0x1e, 0x68, 0x57, 0x0c, 0x71, 0xdf, 0x35, 0xd8, 0xef, 0x96, 0xf8, 0xd6, 0x58, 0x4b, 0x0f, - 0xf1, 0x98, 0x8e, 0x16, 0x1e, 0x20, 0x73, 0x11, 0xc6, 0xc3, 0xe2, 0x07, 0x3e, 0x36, 0x15, 0x57, - 0xc2, 0xaa, 0xcb, 0x0f, 0xcd, 0x08, 0xd2, 0xf8, 0xd2, 0xa5, 0x5f, 0x9b, 0x4d, 0xbe, 0x37, 0xc4, - 0x8f, 0x9b, 0xfb, 0xfc, 0x49, 0xfd, 0x2a, 0xfc, 0xda, 0x6d, 0xf6, 0x4d, 0xa6, 0xbc, 0xb4, 0x92, - 0x12, 0x91, 0x3d, 0x22, 0xb9, 0xca, 0x22, 0x93, 0x8a, 0xb1, 0x57, 0xfe, 0x33, 0x33, 0x63, 0xb4, - 0xc9, 0x55, 0xcd, 0x02, 0x63, 0x4b, 0xdf, 0x99, 0x8f, 0xc6, 0xe6, 0x81, 0x61, 0xe2, 0x46, 0x1c, - 0x41, 0x87, 0x9a, 0x05, 0x86, 0x95, 0x7e, 0x6d, 0x36, 0xf9, 0xc8, 0xff, 0x6d, 0xb8, 0xd3, 0xf0, - 0x51, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x4a, 0xbc, 0x66, 0x5a, 0x78, 0xae, 0x5a, 0x72, 0xe7, - 0x2e, 0x78, 0x5a, 0x92, 0x5d, 0xa8, 0x87, 0x2f, 0xf6, 0xdb, 0x4d, 0x3f, 0x0a, 0x4e, 0x41, 0x8a, - 0x98, 0x3b, 0xde, 0x52, 0xe0, 0xf8, 0x8e, 0xd3, 0x5b, 0x4d, 0x24, 0x5e, 0xa8, 0xff, 0xa0, 0xb6, - 0x1f, 0x45, 0x7a, 0xeb, 0x94, 0xbc, 0xf5, 0x4f, 0x2f, 0x37, 0x37, 0xc2, 0x1d, 0x5d, 0x5c, 0x81, - 0x06, 0xfd, 0xa4, 0xcb, 0xd0, 0x67, 0xdf, 0x42, 0x35, 0xf0, 0x47, 0x55, 0x5d, 0x49, 0xd1, 0x63, - 0x7d, 0x15, 0x22, 0x27, 0x44, 0xa8, 0xee, 0x8c, 0xd7, 0xd6, 0xaf, 0xab, 0x7d, 0x5a, 0x3f, 0xa3, - 0xba, 0x4e, 0x8d, 0xd1, 0x1d, 0x17, 0xa3, 0xfa, 0x36, 0x50, 0x29, 0xe2, 0x60, 0x57, 0xeb, 0xd7, - 0xc4, 0xd5, 0xd5, 0xdd, 0xdd, 0xc5, 0x75, 0x8a, 0x13, 0xe8, 0xad, 0xf5, 0xaf, 0xa2, 0xbc, 0xbd, - 0x19, 0xfe, 0x8a, 0xdf, 0x57, 0xfa, 0xbf, 0xd5, 0xbe, 0xad, 0x5d, 0x5e, 0x4e, 0x86, 0x0e, 0xd0, - 0x73, 0xd1, 0xde, 0x6e, 0xbd, 0x5d, 0x5e, 0x11, 0xe2, 0x04, 0x39, 0x48, 0x2c, 0x1e, 0xcd, 0x8d, - 0xb2, 0x48, 0x39, 0xd0, 0xb7, 0xae, 0xbd, 0x11, 0xd6, 0xaf, 0xab, 0xcf, 0xd7, 0xaf, 0x82, 0x40, - 0x96, 0xa9, 0xd5, 0x72, 0x17, 0x49, 0x2f, 0x2e, 0xdd, 0xfc, 0x41, 0x5d, 0xe8, 0x6a, 0xcd, 0x5a, - 0x2f, 0x42, 0xea, 0xfa, 0xea, 0x5e, 0xb5, 0x5d, 0x6a, 0x37, 0xaf, 0xeb, 0x08, 0xcb, 0xd7, 0xaf, - 0xae, 0x97, 0xeb, 0x28, 0xde, 0x3c, 0x24, 0x7f, 0xf7, 0x48, 0xf8, 0xd1, 0x01, 0x33, 0x0c, 0x0c, - 0x3e, 0x09, 0x4a, 0xde, 0xde, 0x99, 0x1a, 0xe7, 0xc4, 0xf6, 0xd5, 0xf2, 0xe7, 0x90, 0x43, 0xde, - 0x12, 0xc4, 0xa0, 0xc8, 0xe3, 0x7d, 0x7a, 0x2b, 0xa1, 0x0f, 0x0e, 0x75, 0xe8, 0x6f, 0xa2, 0xbc, - 0x47, 0x57, 0xae, 0xaf, 0x5d, 0x5e, 0x12, 0xea, 0xd1, 0xfd, 0x5e, 0x5c, 0x45, 0x70, 0x47, 0x7b, - 0xe5, 0x37, 0x36, 0x92, 0x5f, 0x54, 0xed, 0x74, 0x5e, 0xae, 0xba, 0x93, 0xae, 0xbe, 0xb1, 0x5f, - 0x61, 0x27, 0x7f, 0xc1, 0x69, 0x25, 0xb2, 0x94, 0xd3, 0xb1, 0x34, 0xe7, 0xc2, 0x72, 0xce, 0xfa, - 0xaf, 0xc2, 0x67, 0x3c, 0x7a, 0xaf, 0xe3, 0xab, 0x33, 0x69, 0xbf, 0x5e, 0xbe, 0x2c, 0xe6, 0xca, - 0xaa, 0xaa, 0xaf, 0x84, 0xb4, 0xe9, 0x1b, 0xaf, 0x7c, 0x58, 0xeb, 0x4f, 0x74, 0x59, 0xba, 0x0b, - 0xb4, 0x40, 0xb5, 0xa3, 0x7f, 0x57, 0x8a, 0xea, 0xd1, 0x3d, 0x5a, 0x7e, 0x62, 0xbb, 0xbb, 0xf8, - 0xb0, 0xa6, 0xc6, 0x5a, 0x6e, 0xfe, 0x5b, 0xde, 0xb8, 0xad, 0x33, 0x7c, 0xb4, 0xdd, 0x72, 0x91, - 0x05, 0x39, 0x8b, 0x6b, 0xb1, 0x2a, 0xbf, 0x10, 0xcf, 0x5a, 0xf8, 0x21, 0x22, 0xd5, 0x7b, 0xe5, - 0xde, 0xe0, 0xaa, 0x23, 0xf0, 0x90, 0xad, 0xdd, 0xdd, 0xe4, 0xc4, 0x18, 0xf4, 0x9d, 0xf1, 0x21, - 0x00, 0x88, 0xa0, 0xbf, 0x06, 0x88, 0xbd, 0x30, 0xf3, 0x2a, 0x17, 0x25, 0x83, 0x3f, 0xbb, 0x81, - 0xdd, 0x28, 0xea, 0xcf, 0x19, 0xfd, 0xbb, 0xdc, 0x6d, 0x4b, 0x62, 0xb0, 0x44, 0x81, 0xc2, 0x50, - 0x45, 0x9d, 0x73, 0xdd, 0x33, 0x46, 0xf9, 0xf9, 0x4e, 0x4a, 0xad, 0x93, 0x2a, 0x33, 0x9f, 0x2e, - 0x86, 0xbf, 0x88, 0x26, 0xe5, 0xcd, 0x77, 0x7b, 0xa4, 0x18, 0xe7, 0x13, 0xd2, 0x50, 0x94, 0xfc, - 0xdc, 0x40, 0xaa, 0x56, 0x92, 0x4b, 0x27, 0x25, 0xa6, 0xbf, 0x3d, 0x5b, 0x6d, 0xb6, 0xfd, 0xf1, - 0xd7, 0xac, 0xf9, 0xd2, 0xda, 0xc4, 0x41, 0x41, 0x75, 0x34, 0x29, 0xae, 0x0f, 0x87, 0xcd, 0x97, - 0xb1, 0xb6, 0x4e, 0xa2, 0xe4, 0x51, 0xd4, 0xfd, 0x9f, 0xf8, 0x9b, 0xb9, 0x69, 0x7f, 0x04, 0x99, - 0xfa, 0x70, 0xeb, 0xe0, 0x98, 0x8e, 0x50, 0xc0, 0x74, 0xc6, 0x52, 0x1f, 0xef, 0x82, 0xb1, 0x79, - 0x32, 0x7d, 0x5e, 0xaa, 0xbd, 0xf0, 0x51, 0x69, 0xa4, 0xe2, 0xeb, 0x56, 0xf8, 0xa1, 0x0e, 0x1f, - 0x4c, 0x4e, 0x92, 0x4a, 0x20, 0x68, 0xe5, 0xce, 0x20, 0x64, 0x35, 0x31, 0xbd, 0x29, 0x7b, 0x19, - 0xb8, 0x77, 0xfb, 0x36, 0x13, 0xb8, 0x5b, 0x2d, 0xb8, 0xc7, 0x31, 0xd5, 0x3c, 0x73, 0x5c, 0x40, - 0x40, 0x28, 0x46, 0x08, 0xaa, 0x60, 0x85, 0xe3, 0xda, 0x41, 0x24, 0x31, 0x10, 0x2f, 0xa8, 0xba, - 0x8b, 0xd5, 0xf3, 0x1e, 0x20, 0x29, 0x0e, 0x32, 0x52, 0xff, 0x66, 0x1d, 0xa8, 0x97, 0xb9, 0xef, - 0xb4, 0x76, 0xee, 0xfa, 0x5d, 0xbb, 0xf1, 0x22, 0x46, 0x0d, 0x53, 0x04, 0x01, 0x6e, 0x34, 0xe5, - 0xc2, 0xe5, 0xee, 0xdf, 0x76, 0xfe, 0x10, 0xbb, 0xdb, 0x8d, 0xa0, 0x89, 0xaa, 0x34, 0xa9, 0x7c, - 0x9b, 0x51, 0x9a, 0x78, 0xbe, 0xef, 0x4e, 0xeb, 0x82, 0x3b, 0xbf, 0xea, 0xe0, 0x8e, 0xb2, 0x11, - 0xf5, 0x71, 0x02, 0x10, 0x0e, 0x7a, 0xf3, 0xef, 0xc1, 0x39, 0x32, 0x4a, 0x5a, 0x12, 0xe7, 0xc6, - 0xf9, 0x45, 0xe2, 0x5e, 0xeb, 0x84, 0x43, 0xbc, 0x79, 0x78, 0xf2, 0x8f, 0x2f, 0xdf, 0x20, 0x24, - 0x4d, 0x34, 0x5f, 0x05, 0xf6, 0x7a, 0xd5, 0xba, 0xd2, 0x27, 0xff, 0xc1, 0x1c, 0x8d, 0xf0, 0xc8, - 0x8c, 0x42, 0x09, 0xd5, 0x74, 0x6b, 0x9f, 0x57, 0x2b, 0x82, 0x1d, 0xef, 0xd5, 0xc1, 0x21, 0xf5, - 0x53, 0x25, 0x75, 0x64, 0xbd, 0x11, 0xeb, 0x82, 0x42, 0x4c, 0xa2, 0x41, 0x84, 0xa9, 0xc4, 0xc1, - 0x49, 0xb3, 0x10, 0x59, 0x5d, 0xf6, 0x5e, 0x8d, 0x8d, 0x7d, 0xe2, 0x05, 0x69, 0xd6, 0xb5, 0xf3, - 0x6e, 0xd3, 0x3f, 0x08, 0x94, 0x8a, 0x23, 0x1c, 0xc2, 0xc8, 0x13, 0xdf, 0x45, 0x71, 0x5f, 0x8c, - 0x33, 0xb1, 0xdb, 0xaa, 0x9b, 0xc9, 0xfd, 0xb9, 0x55, 0xd6, 0xb5, 0x85, 0xc8, 0x2c, 0x00, 0xc7, - 0xab, 0xed, 0x77, 0xe1, 0x1f, 0x85, 0x5a, 0xfd, 0x62, 0xf6, 0x38, 0x66, 0x23, 0x69, 0x45, 0xda, - 0x4c, 0x8a, 0x23, 0xc4, 0x88, 0x0a, 0x10, 0x7e, 0xed, 0xe8, 0xc8, 0xa3, 0x52, 0x08, 0x2b, 0x88, - 0x22, 0xea, 0x29, 0x8a, 0x6b, 0x01, 0xff, 0x2f, 0x0a, 0x17, 0xa7, 0x1f, 0xc4, 0xc6, 0x5b, 0x31, - 0x42, 0x78, 0x24, 0x1d, 0x10, 0x11, 0x1e, 0xe6, 0x0e, 0xfe, 0x51, 0x1d, 0x05, 0xea, 0x1a, 0x0e, - 0xd3, 0x1b, 0xf8, 0xcc, 0xd4, 0x9c, 0xbc, 0xf6, 0x8c, 0xef, 0x82, 0x97, 0xae, 0x3a, 0x60, 0xcb, - 0x59, 0xf0, 0x52, 0x46, 0xf3, 0x96, 0x19, 0xf2, 0x56, 0x9d, 0x79, 0x9a, 0x8a, 0xfc, 0x4c, 0x49, - 0x46, 0x0c, 0x71, 0xd5, 0xaf, 0x13, 0x14, 0x5a, 0xa6, 0x93, 0x9e, 0x8f, 0x7e, 0x23, 0x3e, 0x25, - 0xa3, 0xcb, 0x5c, 0x45, 0xcf, 0x97, 0xbf, 0xb1, 0x0f, 0x7f, 0xa1, 0x73, 0xfc, 0x26, 0x46, 0xdf, - 0xd3, 0x3a, 0x9f, 0x29, 0x17, 0x3f, 0x26, 0x2e, 0xd3, 0x07, 0xe0, 0x94, 0x5a, 0x54, 0xa4, 0xa2, - 0x8b, 0xd1, 0xff, 0x5e, 0xe2, 0x62, 0xc2, 0x0a, 0xa9, 0x4e, 0x54, 0x85, 0xe8, 0xbd, 0x62, 0xbe, - 0xbc, 0xa8, 0xbc, 0xe1, 0x55, 0x4d, 0x34, 0xd3, 0x4d, 0x34, 0xd3, 0xf3, 0xd5, 0x34, 0xd3, 0x4d, - 0x34, 0xd3, 0x4d, 0xf3, 0x8e, 0x5d, 0x32, 0x67, 0xf9, 0xeb, 0xf8, 0xab, 0x15, 0x62, 0x3a, 0x3b, - 0x1f, 0x56, 0x24, 0xe8, 0xee, 0x7d, 0x5c, 0xfb, 0xa4, 0x97, 0xe6, 0xd4, 0x71, 0x92, 0x80, 0x00, - 0x3e, 0x20, 0x2a, 0x32, 0x67, 0x5b, 0xa3, 0x59, 0x1b, 0x51, 0xe4, 0x9f, 0xfc, 0xd5, 0x17, 0x5f, - 0x12, 0x08, 0xad, 0xee, 0xdf, 0x34, 0xcc, 0x7f, 0x05, 0x96, 0x31, 0x5c, 0xaa, 0x2d, 0xda, 0x48, - 0x91, 0x32, 0x53, 0x87, 0x9b, 0x8e, 0x24, 0x66, 0x88, 0x7d, 0x94, 0x2e, 0x52, 0x4b, 0x07, 0xbc, - 0xdf, 0xc4, 0xdf, 0x55, 0xc2, 0x22, 0x01, 0x49, 0xf7, 0x3f, 0x3e, 0x89, 0xfe, 0xeb, 0x5f, 0x2c, - 0x70, 0x5f, 0x70, 0x80, 0x90, 0x54, 0x20, 0xbe, 0xae, 0x86, 0x5f, 0x17, 0x6d, 0x6b, 0xdf, 0x08, - 0x49, 0xe2, 0x2f, 0x55, 0x55, 0x21, 0x06, 0xf3, 0xe6, 0x22, 0x28, 0xbd, 0x8d, 0xd5, 0x0c, 0x4f, - 0x3f, 0x1e, 0x55, 0x11, 0xe6, 0x25, 0x29, 0xba, 0x62, 0xb6, 0xdd, 0xfe, 0x2f, 0x9b, 0x35, 0xac, - 0x3c, 0xce, 0x01, 0x03, 0xeb, 0x41, 0xba, 0xf3, 0xff, 0xfb, 0xeb, 0xdf, 0xfc, 0x78, 0x87, 0xbe, - 0xf6, 0xa2, 0x74, 0xa5, 0x88, 0xfc, 0x41, 0x06, 0xdd, 0x5f, 0x7d, 0xfc, 0x17, 0x09, 0x4a, 0xf7, - 0x76, 0x37, 0xb7, 0xc1, 0x20, 0x8b, 0x49, 0x10, 0x30, 0x5b, 0xe2, 0xaa, 0x92, 0xda, 0xa5, 0xc4, - 0x46, 0x1e, 0x4b, 0xc7, 0x2a, 0x71, 0x07, 0x37, 0x8b, 0xf3, 0x7f, 0x11, 0x0a, 0x67, 0x25, 0x35, - 0x03, 0xb9, 0x66, 0xb1, 0x0e, 0x1a, 0xcd, 0x49, 0x49, 0x95, 0xef, 0xb8, 0xba, 0xaa, 0xf8, 0xe9, - 0x5b, 0x55, 0x66, 0x6b, 0xc9, 0x4a, 0x87, 0x36, 0xcb, 0xf0, 0x54, 0x2a, 0x7c, 0xcb, 0x44, 0x8d, - 0xaf, 0x84, 0x75, 0x7b, 0x7c, 0x14, 0x5a, 0xc1, 0x24, 0x7c, 0x6a, 0x8a, 0xa4, 0xbe, 0xf8, 0xbd, - 0xed, 0x6e, 0x9f, 0x83, 0x0a, 0x1b, 0x72, 0xcc, 0x91, 0x4d, 0x18, 0x65, 0xfd, 0x6c, 0xcb, 0x38, - 0xff, 0xc2, 0x1d, 0xa7, 0x67, 0x6d, 0x69, 0xed, 0x3e, 0x36, 0x1c, 0xf9, 0x8e, 0x76, 0xc6, 0xc7, - 0x69, 0xa6, 0x6c, 0xd5, 0x32, 0xef, 0x15, 0x51, 0x32, 0x2e, 0xc7, 0x27, 0x4f, 0xf0, 0x47, 0x57, - 0xe0, 0xf8, 0x24, 0xde, 0xed, 0xf1, 0x17, 0xb5, 0xdd, 0xd7, 0x25, 0x2b, 0x5f, 0x04, 0x9d, 0xde, - 0xa3, 0x3a, 0x3d, 0x49, 0xd5, 0xbe, 0x0a, 0x69, 0xe4, 0xeb, 0xdd, 0xf4, 0x76, 0xf1, 0x21, 0x2b, - 0xbd, 0xd1, 0xaf, 0xc4, 0x96, 0xdc, 0xab, 0xfc, 0x5d, 0xdf, 0x55, 0xfc, 0x13, 0xd0, 0x8f, 0x11, - 0x82, 0x66, 0x0b, 0x19, 0x14, 0x96, 0xd0, 0x85, 0x69, 0x7c, 0x40, 0x92, 0x16, 0x38, 0xae, 0x7c, - 0x57, 0xc2, 0xf8, 0x80, 0x88, 0x95, 0x55, 0x57, 0x77, 0x76, 0x77, 0x58, 0x6f, 0x00, 0x2f, 0xb1, - 0x8d, 0x13, 0x6f, 0x2a, 0x82, 0x31, 0x6c, 0x62, 0xcd, 0x01, 0x5e, 0x24, 0x79, 0x18, 0xb3, 0xac, - 0x5b, 0x67, 0x8d, 0x22, 0x1e, 0x3b, 0x32, 0xfe, 0xde, 0x10, 0x85, 0x08, 0x25, 0x18, 0x23, 0xad, - 0x09, 0x60, 0x47, 0xbd, 0xc9, 0x98, 0xd1, 0x63, 0x49, 0x83, 0x4f, 0xcc, 0x10, 0x04, 0x7b, 0x42, - 0xf7, 0x38, 0x98, 0xcc, 0x4b, 0x2a, 0x61, 0x6c, 0x10, 0xc3, 0x39, 0x8d, 0xf5, 0x33, 0x0c, 0x1e, - 0x32, 0x88, 0x0f, 0x82, 0x68, 0xac, 0xfc, 0xf9, 0x8d, 0xa1, 0xcc, 0xe8, 0xef, 0xc2, 0x85, 0x3b, - 0x35, 0xd6, 0xda, 0xc9, 0x86, 0x25, 0x49, 0xce, 0x41, 0xa5, 0x5e, 0x2e, 0x26, 0xa0, 0x5e, 0x88, - 0xc6, 0x3a, 0x4f, 0x88, 0x11, 0xf0, 0x99, 0x95, 0x6a, 0xaa, 0xa1, 0xca, 0x9e, 0x0a, 0x8a, 0x3c, - 0x98, 0xde, 0xbf, 0x9b, 0xbb, 0x74, 0xac, 0x6f, 0x5d, 0x1f, 0xbe, 0x28, 0x71, 0x65, 0x8f, 0x76, - 0xbf, 0xbf, 0xe2, 0x84, 0xa2, 0xa9, 0xb1, 0xad, 0x1a, 0x3f, 0x08, 0x96, 0xaa, 0x4a, 0x55, 0x29, - 0x2b, 0xf8, 0x99, 0xaa, 0xaa, 0x6f, 0xe3, 0x23, 0x31, 0xbe, 0x93, 0x55, 0x2d, 0x09, 0xdd, 0x08, - 0x1c, 0xcf, 0x5f, 0x05, 0xb7, 0x1d, 0x5e, 0x82, 0x49, 0x13, 0x27, 0xf8, 0x82, 0x68, 0x92, 0x44, - 0x7c, 0x79, 0xf8, 0xa1, 0x49, 0x94, 0x60, 0xdd, 0x9b, 0xfe, 0x1d, 0xdc, 0xff, 0xa7, 0x4a, 0x94, - 0xb0, 0x2d, 0x15, 0x32, 0x51, 0x1c, 0xff, 0xb2, 0xb3, 0x7d, 0xf0, 0x43, 0xaa, 0x56, 0xf8, 0x4f, - 0xa4, 0x96, 0xaf, 0xe5, 0x9b, 0xff, 0x84, 0x4b, 0xa6, 0xf7, 0xba, 0xbf, 0xe6, 0xe4, 0xff, 0x09, - 0xd3, 0x6d, 0x36, 0xf4, 0xdd, 0x77, 0x77, 0x7f, 0x82, 0x49, 0x68, 0x8f, 0x7f, 0x82, 0x39, 0x68, - 0x8f, 0x6f, 0x86, 0xee, 0x8d, 0x1a, 0x35, 0x4d, 0x36, 0xdb, 0xf5, 0xc2, 0x1b, 0xd6, 0xd5, 0xdb, - 0x92, 0xfe, 0x2e, 0xde, 0x9a, 0x74, 0xd7, 0xcd, 0x4a, 0x99, 0xb7, 0xc5, 0xed, 0xdf, 0x15, 0xb7, - 0xe0, 0x94, 0xaf, 0xba, 0xb9, 0x76, 0x5f, 0xe0, 0x8f, 0x49, 0x6f, 0xf0, 0x59, 0x77, 0xcb, 0xad, - 0xfb, 0x4d, 0x37, 0xc1, 0x75, 0xb4, 0xe9, 0xed, 0x26, 0x99, 0x78, 0x28, 0xdd, 0xdb, 0xb7, 0x76, - 0xfa, 0xb7, 0xd5, 0x32, 0xf0, 0xb9, 0x07, 0x9d, 0x9a, 0xfe, 0xce, 0xe5, 0x62, 0x52, 0x49, 0x4f, - 0x59, 0xff, 0x11, 0xbb, 0xe5, 0xd7, 0xfc, 0x15, 0x4f, 0x87, 0x85, 0x0f, 0x77, 0xa6, 0xfb, 0xf8, - 0x90, 0xa5, 0xe9, 0xb6, 0xec, 0x7b, 0xbf, 0xaa, 0xa3, 0xbf, 0x08, 0x74, 0x8b, 0x8d, 0x55, 0x9f, - 0x17, 0xf0, 0xa5, 0xa6, 0x8f, 0x8f, 0xc8, 0x84, 0x30, 0x13, 0xc5, 0xac, 0x47, 0xd6, 0x19, 0x55, - 0x93, 0xf4, 0xbf, 0x1c, 0x6b, 0x7b, 0x77, 0x7b, 0xf9, 0x54, 0x71, 0x21, 0x11, 0x71, 0xac, 0x31, - 0x56, 0x87, 0x79, 0x1a, 0xb3, 0xc5, 0x62, 0xf1, 0x21, 0x01, 0x84, 0x51, 0x89, 0xe2, 0x2c, 0x1c, - 0x1c, 0x6e, 0x72, 0xe3, 0xed, 0xd6, 0x64, 0xb9, 0xe3, 0x89, 0x31, 0x1f, 0xc4, 0xfd, 0x67, 0x3f, - 0x0a, 0x4f, 0xb1, 0x32, 0xab, 0xaa, 0xbb, 0xee, 0x2b, 0xbb, 0xf1, 0x02, 0x42, 0x87, 0x17, 0xee, - 0x21, 0xe2, 0xb2, 0xc6, 0xe2, 0x8c, 0x42, 0xc5, 0x8a, 0x0c, 0x56, 0x28, 0xde, 0xbc, 0x22, 0x0a, - 0x09, 0x32, 0xa6, 0xa3, 0xbd, 0xeb, 0xe0, 0xac, 0xef, 0x6e, 0x21, 0xc1, 0x59, 0x6c, 0x56, 0xea, - 0xd2, 0x1d, 0xfc, 0x30, 0x13, 0xcb, 0xee, 0xe5, 0x5d, 0x03, 0x80, 0xf8, 0x40, 0x41, 0x9d, 0xec, - 0x3c, 0x74, 0xfc, 0x49, 0x74, 0xdd, 0x52, 0xa7, 0xef, 0xcb, 0xd7, 0x05, 0x82, 0x29, 0xda, 0x66, - 0xad, 0xea, 0xab, 0x26, 0xf1, 0x21, 0x31, 0x65, 0xdd, 0xb1, 0x93, 0x3e, 0x24, 0x48, 0x99, 0x44, - 0x2a, 0xc1, 0xa2, 0xe0, 0xff, 0xf1, 0x20, 0x9b, 0xbb, 0xbd, 0xf5, 0xf5, 0xef, 0x8e, 0xaa, 0xe8, - 0xd2, 0x53, 0x5d, 0xa4, 0x6f, 0xe2, 0x26, 0xb6, 0x7f, 0x2d, 0xfc, 0x75, 0xdd, 0xdc, 0xa4, 0x16, - 0x0f, 0x2e, 0x3b, 0xbf, 0x13, 0x04, 0xa2, 0xa5, 0xcc, 0x51, 0x48, 0xbc, 0x98, 0x2f, 0xdf, 0x05, - 0xa5, 0xaa, 0x74, 0x47, 0xa9, 0x0a, 0x53, 0xaa, 0xe1, 0x2a, 0xba, 0x5b, 0x6c, 0x6d, 0xae, 0x52, - 0x9a, 0x5f, 0xc4, 0x5b, 0x6d, 0xb6, 0xdb, 0x4d, 0xb4, 0xfd, 0xcd, 0xff, 0xe5, 0xa5, 0xb6, 0xb8, - 0x4a, 0x9e, 0xdc, 0xdd, 0xbd, 0xf3, 0x91, 0x49, 0xa4, 0xdf, 0xc9, 0xcd, 0x49, 0x26, 0xeb, 0x9b, - 0x9b, 0x3e, 0x6a, 0x49, 0x7e, 0x5e, 0x7c, 0xf9, 0x6f, 0x7a, 0xe4, 0xb4, 0xd5, 0x7c, 0xf5, 0x6e, - 0x7f, 0xfc, 0x44, 0x11, 0xda, 0x2e, 0x5a, 0x2d, 0xf0, 0x5f, 0x3b, 0x18, 0xfa, 0xdb, 0xbc, 0xf0, - 0x51, 0x7f, 0xfe, 0x11, 0x3b, 0x0d, 0xca, 0x92, 0x11, 0xe8, 0x78, 0x3d, 0xd6, 0xdc, 0xf0, 0x86, - 0x88, 0x40, 0x8b, 0x8a, 0x4b, 0x47, 0xfa, 0x6b, 0x75, 0xdb, 0xc4, 0xf8, 0x64, 0x5d, 0xdf, 0xd4, - 0x5f, 0x89, 0x0a, 0x15, 0xdd, 0xc5, 0x63, 0x30, 0x86, 0xf6, 0x28, 0x39, 0xee, 0x8d, 0xf5, 0x46, - 0xa3, 0xe2, 0x04, 0xcf, 0x10, 0x20, 0x62, 0x6d, 0x51, 0x39, 0x58, 0x3e, 0x5f, 0xc6, 0x0d, 0x6a, - 0x40, 0xf3, 0x3a, 0x56, 0x31, 0x37, 0x84, 0x76, 0x59, 0x0a, 0x5b, 0x7b, 0x4d, 0xcd, 0x52, 0x60, - 0xb1, 0x22, 0x49, 0x5d, 0x7c, 0x4a, 0x33, 0xfc, 0x16, 0xdc, 0x56, 0x9b, 0xaa, 0xae, 0xb8, 0x98, - 0x4e, 0xd6, 0x2e, 0xbb, 0xdf, 0xe0, 0xa4, 0xee, 0xf6, 0x33, 0xfb, 0xee, 0xfa, 0x3b, 0xe1, 0x00, - 0x8d, 0xdf, 0x4d, 0xd6, 0xf2, 0xf1, 0x0f, 0x58, 0x44, 0xc4, 0x55, 0x55, 0xf1, 0x36, 0x39, 0xb3, - 0x2d, 0x28, 0xbf, 0x8f, 0x2d, 0x59, 0x55, 0x55, 0x56, 0xc6, 0x9f, 0x8b, 0x11, 0x77, 0xb1, 0xa4, - 0x5b, 0xfc, 0x45, 0x24, 0x99, 0xbc, 0x99, 0xf8, 0xc1, 0x6d, 0x15, 0x15, 0x1e, 0xc6, 0xa1, 0xac, - 0x4a, 0x07, 0xdb, 0x5f, 0xc1, 0x55, 0xdf, 0xd8, 0xf3, 0x98, 0x9a, 0x46, 0x86, 0x91, 0x5e, 0xb4, - 0x38, 0xbe, 0x14, 0xd4, 0xdb, 0x2a, 0xac, 0xde, 0x93, 0x23, 0x53, 0x5e, 0x6f, 0x7f, 0x84, 0x64, - 0xa5, 0x1a, 0x34, 0x67, 0xb8, 0x13, 0xcd, 0x65, 0x36, 0x43, 0x6d, 0x9a, 0xe1, 0x32, 0x20, 0xa9, - 0x24, 0xf7, 0xae, 0x2a, 0x64, 0x5b, 0x45, 0x63, 0xb7, 0xe1, 0x01, 0x0e, 0xf1, 0x0f, 0xbd, 0xde, - 0x72, 0x8c, 0xbc, 0x26, 0x75, 0x6f, 0xd2, 0x4b, 0xc4, 0xda, 0xd3, 0x6d, 0xff, 0x11, 0x75, 0xe9, - 0xbd, 0x70, 0xdd, 0xab, 0xd5, 0x3a, 0x6f, 0xfe, 0x09, 0x35, 0x5b, 0x97, 0xd9, 0x36, 0x9b, 0x27, - 0x2d, 0xb6, 0xdb, 0x37, 0x7c, 0xd7, 0xd5, 0x75, 0x73, 0xee, 0xd3, 0x4d, 0x35, 0xea, 0x90, 0x57, - 0x04, 0xa2, 0x5d, 0xf4, 0x9d, 0xe2, 0xc7, 0x3e, 0x2b, 0x7b, 0xde, 0xcf, 0xcc, 0x69, 0x32, 0xd7, - 0x82, 0xcc, 0xb4, 0x7a, 0x0c, 0xde, 0x77, 0xba, 0x68, 0x67, 0x20, 0xe6, 0x0f, 0xc4, 0x08, 0xd9, - 0x8e, 0x40, 0x6b, 0xaa, 0x6e, 0xa2, 0x64, 0x2d, 0xed, 0x2c, 0x4f, 0xc1, 0x15, 0x68, 0x56, 0xd9, - 0xe2, 0x41, 0x10, 0xa7, 0x7b, 0xd7, 0xc2, 0x82, 0x57, 0x34, 0x59, 0xbd, 0x36, 0xd2, 0x25, 0x02, - 0x76, 0xad, 0x70, 0xad, 0x7e, 0x7f, 0x8b, 0x2a, 0xc6, 0x73, 0x53, 0x42, 0xf7, 0xb7, 0xc4, 0xc5, - 0xdd, 0xdd, 0x9b, 0xbb, 0xbf, 0x89, 0xb1, 0xab, 0x1a, 0xb1, 0xef, 0xc4, 0x0f, 0xde, 0x6a, 0x3e, - 0x6f, 0x77, 0xf1, 0xe4, 0x2e, 0xf3, 0x10, 0x4d, 0xd6, 0x53, 0xbf, 0x10, 0x24, 0x5f, 0x55, 0x5a, - 0xae, 0x26, 0x11, 0xb1, 0xd5, 0xba, 0xaa, 0xcd, 0xd2, 0x77, 0xc4, 0xfe, 0x33, 0x33, 0x0b, 0xd6, - 0xad, 0x96, 0xa9, 0x51, 0xd2, 0x4b, 0xe6, 0x25, 0x2a, 0xe2, 0x04, 0x84, 0x0a, 0xf1, 0x2d, 0x16, - 0x54, 0xe3, 0x07, 0x68, 0x5e, 0x4c, 0xf3, 0x49, 0xff, 0x85, 0x0f, 0x8e, 0x46, 0x4c, 0x7a, 0xe3, - 0x26, 0x43, 0x37, 0x4e, 0x66, 0x83, 0x56, 0x36, 0xf8, 0xa2, 0x6a, 0xa4, 0xa7, 0x5f, 0x16, 0x50, - 0xbd, 0x5d, 0xae, 0x95, 0x19, 0x84, 0x29, 0x3e, 0x4a, 0x63, 0xfc, 0x29, 0x53, 0xb9, 0x6a, 0x75, - 0x57, 0x1b, 0x93, 0x85, 0xad, 0x26, 0x93, 0x93, 0x1b, 0xed, 0x7e, 0x09, 0x49, 0xbb, 0xfa, 0x69, - 0x25, 0xf8, 0x44, 0x52, 0x44, 0xda, 0x4e, 0xf3, 0xb0, 0xd3, 0xff, 0x04, 0xa2, 0x73, 0xfd, 0xed, - 0x77, 0xc1, 0x57, 0x69, 0x5b, 0x69, 0x9b, 0x54, 0xdd, 0xeb, 0xe5, 0x26, 0x9a, 0x6b, 0x87, 0x4b, - 0xba, 0x4c, 0x69, 0xdc, 0xcc, 0xc1, 0xb1, 0xd4, 0xbd, 0xdf, 0xfe, 0x2a, 0x3b, 0x48, 0xa8, 0xed, - 0x3a, 0x49, 0xf8, 0xcf, 0x17, 0xc9, 0x95, 0x4f, 0xd3, 0xaf, 0x82, 0xc8, 0xad, 0x7a, 0xa7, 0xa4, - 0xfc, 0xbe, 0x2f, 0x9f, 0xa5, 0xa4, 0x97, 0x84, 0xf4, 0x9b, 0x4a, 0xef, 0xf1, 0x3b, 0xaf, 0x57, - 0xf0, 0x47, 0x2f, 0x3f, 0x4e, 0xbe, 0xf8, 0x21, 0x21, 0xbe, 0x93, 0x9f, 0x73, 0x6b, 0x7f, 0x84, - 0xb8, 0xba, 0x5b, 0x4d, 0x7a, 0xa7, 0x1f, 0x21, 0xd2, 0x4a, 0x97, 0x8e, 0x22, 0x6d, 0x67, 0xdf, - 0x26, 0x6b, 0x82, 0x98, 0xca, 0xfd, 0xb6, 0xd6, 0x4d, 0xdb, 0x4a, 0xbc, 0x12, 0x69, 0x55, 0x8f, - 0x82, 0xcc, 0x9a, 0xbe, 0x4d, 0xde, 0x92, 0x55, 0xc4, 0x0e, 0x30, 0xbc, 0x99, 0x69, 0x90, 0xd2, - 0xf4, 0xe9, 0xa5, 0xff, 0x08, 0x8b, 0x76, 0xf2, 0x10, 0x48, 0x41, 0xcd, 0x4d, 0x7c, 0x29, 0x77, - 0x7b, 0x4a, 0xdc, 0xb4, 0xde, 0xb4, 0xe5, 0xe2, 0x42, 0x76, 0x49, 0x0d, 0x57, 0xa7, 0x4f, 0xc4, - 0x82, 0x3e, 0xab, 0x5f, 0x1f, 0x49, 0xfa, 0xc9, 0x8f, 0xda, 0xf1, 0x3d, 0x0d, 0x74, 0x35, 0xc4, - 0x84, 0x41, 0x56, 0x3a, 0x9b, 0x70, 0x64, 0xb3, 0x0a, 0x45, 0x83, 0x31, 0xaa, 0xc8, 0x41, 0xae, - 0x20, 0x48, 0x50, 0x46, 0xaa, 0x2e, 0xe9, 0xb9, 0x69, 0x74, 0x11, 0xbe, 0xd5, 0xf3, 0x38, 0x42, - 0x18, 0x0f, 0x7c, 0x16, 0x09, 0x72, 0xfb, 0xa5, 0x3f, 0x46, 0x79, 0x83, 0x01, 0x11, 0xa1, 0xee, - 0x20, 0x48, 0x8d, 0xbb, 0xbb, 0xbb, 0xbe, 0x20, 0x48, 0x4b, 0x4d, 0xb4, 0x54, 0x20, 0xca, 0xa3, - 0x15, 0x70, 0x88, 0xab, 0xbf, 0x93, 0xf8, 0x91, 0x33, 0xe3, 0xbd, 0x3b, 0x1b, 0x7c, 0x22, 0x33, - 0x70, 0xda, 0xaa, 0xdd, 0xe9, 0xbf, 0x75, 0x13, 0xf6, 0x62, 0x3e, 0x78, 0x93, 0x77, 0x7f, 0x1c, - 0x65, 0x5a, 0xe9, 0xba, 0xd7, 0xe0, 0x8b, 0x67, 0x17, 0x6f, 0x84, 0x4a, 0xa1, 0x52, 0xd1, 0x55, - 0x51, 0xb9, 0x31, 0xaa, 0xd5, 0xd4, 0x36, 0x55, 0xc4, 0x8c, 0xca, 0xa5, 0xfd, 0x89, 0xd2, 0x4d, - 0x45, 0x9d, 0xa4, 0x90, 0x9d, 0x37, 0xd5, 0x3f, 0x89, 0x1c, 0x55, 0x59, 0x93, 0xa7, 0xb2, 0xc9, - 0x05, 0xf8, 0x97, 0x92, 0xbf, 0x84, 0xfc, 0xad, 0x54, 0x7f, 0x97, 0x9f, 0xb5, 0xe0, 0x8a, 0x9e, - 0x93, 0x7c, 0x75, 0xa6, 0xd2, 0xb9, 0xb4, 0x95, 0xdd, 0xf2, 0xf0, 0x58, 0x21, 0x76, 0x56, 0x37, - 0xa1, 0x91, 0xf6, 0x0e, 0xbe, 0x08, 0xe5, 0x61, 0x8e, 0xdb, 0x62, 0x4e, 0x11, 0x2c, 0x9a, 0x9d, - 0x4d, 0xed, 0xb4, 0xe9, 0xfc, 0x23, 0x59, 0xbb, 0x74, 0x9b, 0x4a, 0x24, 0xcb, 0xbf, 0x82, 0x5b, - 0xb7, 0x5d, 0x52, 0x32, 0x57, 0x35, 0x24, 0xbf, 0x08, 0x97, 0x4d, 0xed, 0xdb, 0x97, 0xcb, 0xfc, - 0x15, 0x52, 0x48, 0xfa, 0xed, 0x6d, 0xba, 0xdb, 0x69, 0xae, 0x2f, 0x82, 0x6a, 0x49, 0x24, 0x93, - 0xbf, 0x87, 0xc2, 0x7a, 0x6d, 0xdb, 0xb7, 0xf0, 0x49, 0xa5, 0x2e, 0x19, 0x3e, 0x1a, 0xd5, 0xea, - 0xae, 0xaf, 0xfe, 0x73, 0x2c, 0xba, 0xdd, 0x7e, 0xb9, 0xeb, 0xe9, 0xa6, 0x9a, 0x7e, 0x1c, 0xb7, - 0xba, 0xac, 0x9d, 0x3f, 0xf2, 0x52, 0x0c, 0x4f, 0xf6, 0x6d, 0x6f, 0x58, 0x80, 0xa1, 0x94, 0xd8, - 0xb2, 0xaa, 0xa9, 0x2d, 0x5d, 0x8c, 0xb4, 0x08, 0x3c, 0xcc, 0x7f, 0x7c, 0x10, 0xd3, 0x6d, 0xfd, - 0xf0, 0x91, 0xc9, 0xf9, 0x7b, 0x7f, 0x84, 0x4b, 0x37, 0x5d, 0x6b, 0x45, 0x52, 0x33, 0xe0, 0xb3, - 0x56, 0x89, 0x02, 0xb0, 0xbd, 0x03, 0xa4, 0xb7, 0x38, 0x89, 0x65, 0xa3, 0x07, 0x49, 0xf0, 0x97, - 0x92, 0x6b, 0x54, 0xfc, 0x13, 0xf9, 0xba, 0x7a, 0xfb, 0xe3, 0xe2, 0xeb, 0xce, 0xc2, 0x42, 0xe4, - 0x90, 0xc1, 0x82, 0xcf, 0x4f, 0xf1, 0x62, 0x27, 0x24, 0xbd, 0x1a, 0xfc, 0x23, 0xd2, 0x2e, 0x24, - 0x93, 0x7d, 0x57, 0xc4, 0xef, 0x2d, 0xee, 0x9a, 0x5c, 0x49, 0x8e, 0xaa, 0xab, 0xe3, 0x3a, 0xaa, - 0x44, 0xc6, 0xa5, 0x53, 0xa6, 0x2e, 0xae, 0xf8, 0x64, 0x40, 0x52, 0xef, 0x07, 0x2f, 0xad, 0x53, - 0x3f, 0x76, 0xb0, 0xb6, 0x7b, 0xf1, 0x31, 0x95, 0x55, 0x4a, 0x56, 0x31, 0x36, 0x24, 0x5d, 0x55, - 0xaf, 0xc2, 0x96, 0x65, 0x33, 0x29, 0x36, 0x9f, 0x39, 0xd8, 0x7f, 0x6b, 0x76, 0x93, 0x6a, 0xbe, - 0x32, 0xf5, 0x91, 0x97, 0x43, 0x4f, 0x3d, 0xd5, 0x54, 0x4d, 0x46, 0x22, 0x10, 0x9f, 0x2e, 0xea, - 0xd3, 0x1b, 0x9a, 0x22, 0xb5, 0x10, 0xff, 0x0a, 0x1c, 0x4c, 0x82, 0xcc, 0x17, 0x73, 0x13, 0x61, - 0x06, 0x2f, 0x38, 0x9f, 0xac, 0xcc, 0x4c, 0xb7, 0xc2, 0x55, 0xad, 0x01, 0xc4, 0xcc, 0xfc, 0x13, - 0x6a, 0xb9, 0xa3, 0xb7, 0xc1, 0x1e, 0xab, 0x6f, 0x8f, 0x8d, 0xd0, 0xed, 0x55, 0x5d, 0x88, 0xe6, - 0x86, 0xfa, 0x1d, 0x73, 0x93, 0x92, 0x1e, 0x13, 0x26, 0xad, 0x1f, 0xb9, 0x75, 0xbf, 0x11, 0x1c, - 0x2d, 0xcb, 0x8e, 0xf2, 0x08, 0x84, 0x82, 0x2b, 0x2d, 0x83, 0x5d, 0x74, 0xcd, 0x5f, 0x10, 0x20, - 0x13, 0x99, 0xde, 0xd5, 0xca, 0x41, 0xde, 0xb1, 0x00, 0x8e, 0x7a, 0x0a, 0xd3, 0x95, 0x2f, 0x87, - 0x86, 0x4e, 0x10, 0x05, 0x3b, 0x24, 0x38, 0xc1, 0x8c, 0xbd, 0x5c, 0x70, 0xf1, 0x5a, 0x89, 0xfe, - 0x16, 0x2a, 0x49, 0xfc, 0xda, 0xde, 0x1c, 0xbf, 0x7f, 0xf0, 0xb5, 0xbd, 0x24, 0xe9, 0x37, 0x96, - 0x9a, 0xaf, 0xf8, 0x7a, 0xd3, 0x5b, 0x74, 0xed, 0x25, 0xca, 0x68, 0xad, 0xff, 0xc6, 0x5e, 0x9d, - 0xb7, 0xdb, 0xb7, 0x49, 0x2f, 0xc5, 0xd2, 0x4b, 0xd3, 0x49, 0x71, 0x1d, 0xda, 0xa7, 0x4f, 0xca, - 0x5a, 0xa2, 0xf9, 0x79, 0x72, 0xf8, 0xb9, 0xb2, 0x95, 0x36, 0xff, 0x37, 0x93, 0x7c, 0x99, 0x7a, - 0x1e, 0xf9, 0x2d, 0x5a, 0xf8, 0x4f, 0x3d, 0x3a, 0x4f, 0xf0, 0x49, 0xb1, 0xb4, 0xd4, 0x1f, 0x04, - 0x84, 0xa2, 0x50, 0xf8, 0x12, 0x06, 0xdf, 0x05, 0x26, 0x8c, 0xe1, 0x35, 0x26, 0xcc, 0x46, 0x8f, - 0xa0, 0x75, 0xeb, 0x87, 0xc2, 0x45, 0x2f, 0xfa, 0xaf, 0x8a, 0xd5, 0x53, 0x5a, 0xf1, 0x02, 0x78, - 0x98, 0xf2, 0xbd, 0xeb, 0x56, 0x25, 0x25, 0x3c, 0x40, 0x81, 0x26, 0x7d, 0xbb, 0x73, 0x31, 0xe0, - 0x88, 0xf7, 0x7f, 0x78, 0x91, 0x65, 0xcc, 0xc6, 0xb6, 0xfc, 0x11, 0xca, 0xc3, 0xd4, 0xd3, 0x71, - 0x30, 0x43, 0x52, 0x62, 0x4f, 0xa7, 0x71, 0x22, 0x44, 0xdc, 0xb8, 0xd3, 0xf2, 0xf7, 0xf0, 0x8d, - 0x49, 0x73, 0x71, 0x9d, 0x28, 0xe9, 0x11, 0x23, 0x4a, 0xd1, 0x97, 0xc7, 0x84, 0x63, 0x27, 0x71, - 0x39, 0x4d, 0xb1, 0x4c, 0x4f, 0x0f, 0x2c, 0x65, 0x66, 0xee, 0x60, 0x98, 0xd1, 0xb9, 0x1f, 0x84, - 0x0c, 0xaa, 0x7f, 0x16, 0x2c, 0xca, 0xaa, 0xa9, 0xa9, 0x3c, 0x40, 0x46, 0xb5, 0x66, 0xaa, 0x2e, - 0xaa, 0xaa, 0xb8, 0x98, 0xad, 0x6a, 0xaa, 0xbc, 0x21, 0x05, 0x75, 0x2f, 0x31, 0x06, 0x79, 0xbe, - 0x66, 0x18, 0xec, 0x76, 0xf8, 0x2a, 0xa3, 0x2d, 0x31, 0x0d, 0x1c, 0xdb, 0xd6, 0x9f, 0x71, 0x11, - 0xe5, 0x6a, 0x68, 0x28, 0xb8, 0x8e, 0x20, 0xb7, 0x37, 0x2b, 0x2c, 0xce, 0x24, 0x7c, 0xbc, 0x5c, - 0x47, 0xc9, 0xb7, 0xd7, 0x57, 0xf1, 0x95, 0xa9, 0x3c, 0x70, 0x42, 0x2c, 0xac, 0xd0, 0xc6, 0x98, - 0xcc, 0xaf, 0x12, 0x09, 0xab, 0x90, 0x72, 0x44, 0x93, 0x66, 0x3b, 0x78, 0x91, 0xe7, 0xb7, 0x6d, - 0x6b, 0x5c, 0x89, 0x38, 0x80, 0x43, 0x4e, 0x43, 0x1b, 0x7c, 0x49, 0xab, 0x46, 0xef, 0x7e, 0x20, - 0x4c, 0xf1, 0x4d, 0x6a, 0x6d, 0x45, 0x38, 0x88, 0xaf, 0x2b, 0x0e, 0x5b, 0xa7, 0x89, 0x88, 0x3b, - 0xa2, 0xee, 0xee, 0xc1, 0xe2, 0x04, 0x0b, 0xa2, 0x73, 0xec, 0x2b, 0x64, 0x8f, 0xfe, 0x27, 0xe4, - 0x11, 0xc5, 0xfc, 0xa7, 0xbb, 0xfc, 0xa6, 0x7d, 0xaf, 0x08, 0x1a, 0xd5, 0xa4, 0x06, 0x9d, 0xbb, - 0xa7, 0xf1, 0x67, 0x72, 0xf4, 0x9b, 0x85, 0xcf, 0xf0, 0xad, 0xa6, 0xf9, 0xfe, 0xae, 0xc9, 0xd9, - 0x7a, 0xe3, 0xee, 0x6c, 0xe6, 0x56, 0x58, 0xf4, 0xd7, 0xc2, 0x56, 0x31, 0xab, 0xa4, 0x96, 0xf7, - 0xfa, 0xeb, 0xe0, 0x82, 0x92, 0x5e, 0x86, 0xfb, 0xba, 0xfa, 0x69, 0xa6, 0x9f, 0x96, 0x92, 0x5f, - 0x82, 0x2b, 0x69, 0x1b, 0xc5, 0xaf, 0x85, 0xa8, 0x69, 0x5b, 0xda, 0x4d, 0x4d, 0xcf, 0xff, 0xf2, - 0x6d, 0x5a, 0xf3, 0x55, 0xd3, 0x75, 0xc4, 0x5f, 0x6e, 0xdd, 0x7c, 0x4f, 0x6d, 0x37, 0xab, 0xae, - 0x15, 0xe6, 0xe9, 0xee, 0xd2, 0xba, 0x74, 0xff, 0xc2, 0x14, 0xd2, 0xc9, 0xe9, 0xbe, 0x92, 0xf8, - 0x2c, 0x15, 0x2f, 0x52, 0xb1, 0x55, 0x0b, 0x72, 0x18, 0x5b, 0xf4, 0x9e, 0x24, 0xc2, 0x6f, 0x7f, - 0xa8, 0x81, 0x06, 0x2b, 0x9b, 0xf8, 0x99, 0x0d, 0xc9, 0x98, 0x81, 0x23, 0x0c, 0x2b, 0xed, 0xd3, - 0xbc, 0xaa, 0x2e, 0xdb, 0x84, 0x89, 0xb4, 0x03, 0x3a, 0xd1, 0x1c, 0xba, 0xcf, 0x09, 0x8d, 0x6d, - 0x55, 0x3b, 0x26, 0x97, 0xc1, 0x11, 0x5d, 0xbd, 0x9f, 0x11, 0xa4, 0xef, 0x1a, 0x93, 0xf8, 0xca, - 0xc9, 0x2b, 0x88, 0xb5, 0x3e, 0x3d, 0x2b, 0x1f, 0x79, 0x0b, 0xb5, 0x7c, 0x48, 0xca, 0x1b, 0xbb, - 0xcd, 0x92, 0x66, 0xed, 0x4b, 0xc7, 0x7e, 0xd3, 0xb3, 0x10, 0x24, 0xa4, 0x2f, 0xda, 0x2e, 0x11, - 0x1d, 0x5d, 0x45, 0xd4, 0x47, 0x3a, 0xa8, 0xbf, 0x12, 0x32, 0x2e, 0x2f, 0xc8, 0xbd, 0x77, 0x77, - 0x89, 0x60, 0xfe, 0x14, 0xaa, 0xbb, 0xcc, 0xc3, 0xd6, 0xe2, 0xb6, 0x39, 0xf9, 0x3f, 0x9a, 0xc7, - 0x6e, 0x26, 0x32, 0x86, 0x6e, 0xb3, 0x29, 0xab, 0x50, 0x6a, 0xc4, 0xa2, 0x3c, 0xfb, 0x18, 0x5c, - 0xd3, 0xc2, 0x9b, 0x2c, 0x23, 0xf5, 0xed, 0x66, 0x62, 0x7d, 0x89, 0x38, 0xe0, 0xb9, 0xfe, 0x5e, - 0x5f, 0xdc, 0x40, 0x90, 0xa1, 0x56, 0x5e, 0xa9, 0xd0, 0xc3, 0xc7, 0x8b, 0xc5, 0xd4, 0x53, 0x52, - 0xf1, 0x3f, 0x28, 0xff, 0x8c, 0x8a, 0xb9, 0x3d, 0x65, 0x14, 0x1c, 0x90, 0x2f, 0x5a, 0xac, 0xaa, - 0xe2, 0x62, 0x66, 0xe6, 0xe5, 0xfa, 0xd3, 0xf1, 0x20, 0x92, 0xee, 0xef, 0xdf, 0x13, 0x54, 0x73, - 0x7b, 0xdf, 0x88, 0x1f, 0xab, 0x1f, 0x54, 0x4a, 0xc7, 0xf8, 0x40, 0x8b, 0x5e, 0x89, 0xd2, 0xbd, - 0x71, 0x7c, 0xd4, 0xd5, 0xae, 0x23, 0xe2, 0x09, 0x77, 0xfc, 0x9b, 0x27, 0xf9, 0xb8, 0xe7, 0x4e, - 0x24, 0x40, 0xb2, 0x64, 0xd9, 0x3d, 0x7e, 0xe8, 0x72, 0xbf, 0x89, 0xf1, 0x3f, 0x86, 0x6e, 0x5c, - 0xd5, 0x99, 0xbf, 0xef, 0x90, 0xb3, 0xee, 0xf9, 0x36, 0x9a, 0xae, 0x23, 0x4d, 0x92, 0x7a, 0x8d, - 0x2f, 0x9a, 0xf9, 0x31, 0xf5, 0xa9, 0x79, 0x64, 0xc4, 0x92, 0x4b, 0x88, 0x06, 0x02, 0x0b, 0xed, - 0xdb, 0x43, 0x68, 0xd5, 0xa1, 0x2d, 0xe7, 0x87, 0xf1, 0x00, 0xa8, 0xa1, 0x95, 0x57, 0x45, 0x44, - 0xc4, 0x54, 0x18, 0x8b, 0x93, 0xe1, 0xc8, 0x37, 0x2f, 0x8c, 0x8c, 0x54, 0xcc, 0x89, 0x99, 0x4d, - 0x03, 0x27, 0xf1, 0xb4, 0x59, 0x7f, 0xf5, 0xef, 0x12, 0x24, 0xaf, 0x67, 0x7b, 0xfd, 0x6b, 0xe6, - 0x32, 0xd0, 0x86, 0x50, 0xbc, 0x51, 0xb1, 0xd1, 0x78, 0x8e, 0x27, 0xaa, 0xf1, 0x21, 0x01, 0x63, - 0x09, 0x9d, 0x05, 0x33, 0x67, 0x5f, 0x66, 0x6f, 0xf8, 0xf2, 0xb0, 0xd6, 0x86, 0x98, 0xae, 0xf5, - 0x4d, 0x71, 0x30, 0xa1, 0x4f, 0xf5, 0xc7, 0x12, 0x32, 0xad, 0x71, 0x41, 0xda, 0xe5, 0xf9, 0xf8, - 0x32, 0x67, 0x1d, 0x9f, 0xe0, 0xaa, 0xa6, 0xff, 0x1e, 0x96, 0xba, 0x8d, 0x61, 0x67, 0xbc, 0x40, - 0xcd, 0x55, 0x2e, 0x0b, 0x96, 0x19, 0x66, 0x29, 0xdb, 0xe1, 0x6d, 0xde, 0x5e, 0x85, 0xd0, 0xe1, - 0x10, 0xa5, 0x55, 0x45, 0xc6, 0x32, 0x92, 0xf0, 0xb1, 0xca, 0x26, 0xc4, 0x4d, 0x89, 0x9e, 0x38, - 0xdf, 0x0a, 0x44, 0x70, 0xfb, 0x1a, 0xa4, 0x2e, 0xa9, 0x1d, 0x2b, 0x98, 0x12, 0x70, 0xeb, 0x25, - 0x9a, 0xfc, 0xbc, 0x48, 0x2a, 0x23, 0x19, 0xd8, 0xb1, 0xe5, 0x63, 0x27, 0x55, 0x35, 0x3b, 0x89, - 0x08, 0x85, 0x2c, 0x0c, 0x04, 0x47, 0x23, 0xd4, 0x95, 0x63, 0x07, 0x54, 0x47, 0x6e, 0xc8, 0xfc, - 0x24, 0xea, 0x87, 0x72, 0xcc, 0x76, 0xe2, 0x02, 0x23, 0xa9, 0xdc, 0xa5, 0x35, 0x2f, 0x2d, 0x66, - 0x52, 0x27, 0xf8, 0x44, 0x29, 0x11, 0x61, 0x45, 0x0b, 0xe0, 0xf3, 0x30, 0xae, 0x60, 0xac, 0x5e, - 0x94, 0xd4, 0x76, 0xf0, 0xc8, 0x25, 0x9e, 0xfd, 0xde, 0xdd, 0x56, 0x5c, 0x48, 0x64, 0x14, 0x96, - 0x4f, 0x33, 0x0d, 0xc5, 0x0b, 0xca, 0x97, 0xa8, 0xbf, 0x7d, 0xe5, 0x7f, 0x09, 0xd8, 0xde, 0xd9, - 0xb2, 0x9f, 0xdf, 0x8d, 0xd3, 0xcd, 0x68, 0xdb, 0xf1, 0x24, 0x23, 0xa7, 0x40, 0xf8, 0x91, 0xdb, - 0xde, 0xb4, 0xee, 0xe7, 0x96, 0x24, 0x22, 0x6e, 0x5a, 0x17, 0x31, 0x22, 0x5d, 0xdf, 0xc4, 0x89, - 0x1d, 0xdb, 0x49, 0xef, 0x59, 0xa8, 0xbe, 0x3f, 0x19, 0xa7, 0xbd, 0x0d, 0x37, 0xfc, 0x5e, 0xee, - 0x7f, 0x15, 0xbb, 0xe2, 0x65, 0x11, 0xcb, 0x4f, 0x31, 0x55, 0x6b, 0x88, 0x82, 0x31, 0x3b, 0xbb, - 0xf1, 0x31, 0x62, 0x10, 0xf7, 0xdb, 0x2b, 0x1e, 0x12, 0xdb, 0xbe, 0xad, 0x7a, 0x23, 0x7c, 0x15, - 0x97, 0x46, 0x4a, 0xe6, 0xe9, 0xd5, 0xa6, 0x9b, 0xe0, 0x9e, 0x87, 0x23, 0x8c, 0xea, 0xd3, 0x6f, - 0x96, 0x9b, 0x7f, 0x82, 0x7a, 0x9b, 0xea, 0xcf, 0x6f, 0x82, 0x3b, 0x76, 0xd5, 0xab, 0x84, 0xef, - 0x6a, 0xae, 0xdf, 0xc4, 0x66, 0xef, 0x17, 0x2f, 0xf0, 0x47, 0x63, 0x2f, 0xa7, 0x97, 0xc1, 0x21, - 0x13, 0x75, 0xd7, 0xc1, 0x19, 0x67, 0xcd, 0xcf, 0x82, 0x6b, 0xda, 0x68, 0x9e, 0x78, 0x3e, 0x0a, - 0xeb, 0xae, 0xec, 0x77, 0x4d, 0x3d, 0x57, 0x7a, 0x4d, 0x57, 0x08, 0x08, 0x55, 0xa1, 0xdd, 0x31, - 0xea, 0xbc, 0xff, 0xc5, 0x8b, 0x3b, 0x1a, 0x39, 0xa0, 0x8a, 0xfe, 0x11, 0x10, 0xb4, 0xbb, 0x97, - 0x13, 0x7f, 0xe1, 0x23, 0xea, 0x4f, 0xb6, 0x76, 0x38, 0x8f, 0x10, 0x8b, 0x5e, 0x24, 0x60, 0xa7, - 0x71, 0x0f, 0x2d, 0xbd, 0x4f, 0x3e, 0x3f, 0x1e, 0xec, 0xf2, 0xfc, 0xd5, 0x59, 0xbe, 0x20, 0x22, - 0x08, 0x84, 0xa8, 0xbe, 0xfc, 0x40, 0x64, 0x15, 0x1d, 0x47, 0xeb, 0x11, 0x08, 0x03, 0x01, 0xb6, - 0x8e, 0xea, 0xd8, 0xaa, 0x63, 0x32, 0x63, 0x17, 0x28, 0x2f, 0xf1, 0x22, 0xad, 0x76, 0xd4, 0x4f, - 0xa9, 0x7c, 0x2a, 0xa0, 0x07, 0xb5, 0xbe, 0x8a, 0x33, 0xee, 0x7f, 0xec, 0x9b, 0x1c, 0x40, 0x6a, - 0x56, 0xd5, 0x0a, 0x3a, 0x89, 0xca, 0x31, 0x22, 0x47, 0xec, 0x8d, 0x29, 0xd6, 0xad, 0x91, 0x43, - 0x17, 0xc3, 0x23, 0x24, 0x51, 0x32, 0x2e, 0xa2, 0xea, 0x2f, 0x2a, 0xaa, 0xaa, 0xa6, 0x20, 0xf0, - 0xc8, 0x99, 0xf6, 0x23, 0x9a, 0x8b, 0xca, 0xf8, 0x53, 0x74, 0x33, 0x29, 0xb2, 0x97, 0xf2, 0x75, - 0xe5, 0x7b, 0x89, 0x88, 0x24, 0x84, 0x14, 0xdf, 0xb8, 0xbd, 0x78, 0x44, 0x66, 0x0e, 0x56, 0x56, - 0xa6, 0x51, 0x2a, 0xb3, 0x31, 0x2b, 0x2b, 0xc4, 0x0e, 0x91, 0x8f, 0x8b, 0xa6, 0x4e, 0xa2, 0xe4, - 0x62, 0x78, 0x81, 0x36, 0x9a, 0xe9, 0xd7, 0xc4, 0xad, 0x78, 0x45, 0x7b, 0x89, 0x08, 0xf8, 0x91, - 0x55, 0xdb, 0xcb, 0xfe, 0x12, 0xa1, 0xae, 0x4f, 0x63, 0xf8, 0xad, 0x35, 0x53, 0x76, 0x6b, 0x7e, - 0x26, 0x09, 0x09, 0x26, 0xfd, 0xe2, 0x01, 0x41, 0xb1, 0x8a, 0x67, 0xe7, 0x21, 0xf5, 0xf0, 0x9d, - 0x3a, 0xcb, 0xdd, 0x45, 0xfc, 0x20, 0x55, 0xdb, 0xa4, 0x17, 0xca, 0xa4, 0xd6, 0x97, 0x98, 0xb5, - 0x7e, 0x24, 0x20, 0x12, 0xb7, 0x7e, 0x9b, 0x70, 0x9b, 0x30, 0x46, 0xb2, 0x54, 0xff, 0xdf, 0xad, - 0xf2, 0x1c, 0x5f, 0xb1, 0x2e, 0x6d, 0x27, 0xf8, 0x92, 0x67, 0x52, 0x9c, 0xcd, 0xd9, 0x2e, 0x72, - 0xa9, 0xa2, 0x89, 0xfe, 0x48, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x5a, 0x2d, 0x30, 0x2a, 0x8b, - 0x13, 0x28, 0xbe, 0x7a, 0x62, 0x2b, 0xdf, 0x5e, 0x85, 0x3a, 0x12, 0x99, 0x09, 0xe8, 0x83, 0xb4, - 0x27, 0xd1, 0x0b, 0x49, 0x10, 0x24, 0x11, 0x50, 0x37, 0x79, 0xd2, 0xb9, 0xa7, 0xa1, 0xe9, 0xfa, - 0x19, 0xaf, 0xa2, 0xe1, 0x3f, 0x42, 0xd2, 0xa5, 0xd4, 0xa9, 0xf5, 0xcb, 0xea, 0x55, 0x9f, 0x5c, - 0xab, 0xa9, 0x92, 0xf8, 0x7a, 0x7a, 0x1e, 0x85, 0xa3, 0x68, 0x7e, 0x48, 0xbe, 0x04, 0xa7, 0x0d, - 0x0d, 0xb2, 0xe0, 0xaa, 0xba, 0xf6, 0xfb, 0x6d, 0xc4, 0x4c, 0xf8, 0x50, 0x21, 0x82, 0xa3, 0xc1, - 0x67, 0xc8, 0x80, 0x68, 0x5c, 0xd9, 0x6e, 0xc1, 0x78, 0x4e, 0x0b, 0x92, 0x88, 0x41, 0x7f, 0x10, - 0x8e, 0xf6, 0x02, 0xa0, 0x41, 0xd5, 0x4b, 0x6e, 0x08, 0xb8, 0xa3, 0xe0, 0xa0, 0x78, 0xac, 0x4b, - 0x42, 0xd9, 0x6c, 0xf4, 0x3d, 0x3b, 0xc2, 0xdd, 0x15, 0x2a, 0x5d, 0x6b, 0xea, 0x91, 0x7a, 0xb7, - 0xc3, 0x42, 0x01, 0xdf, 0x46, 0x97, 0x10, 0xad, 0xaa, 0x2f, 0x37, 0xff, 0x05, 0x3c, 0xcc, 0xcd, - 0xea, 0x9a, 0x1a, 0xd6, 0xad, 0xa3, 0xbf, 0x0f, 0x77, 0x7d, 0x24, 0xa9, 0x52, 0x5f, 0x39, 0x91, - 0x29, 0x9f, 0x88, 0x04, 0xb7, 0x7e, 0x5f, 0x9d, 0x0d, 0x53, 0x88, 0x8c, 0x2f, 0x1a, 0xa3, 0xee, - 0x46, 0x14, 0x78, 0x8c, 0x7b, 0xca, 0xc7, 0x92, 0x2e, 0xeb, 0xf0, 0xb1, 0x34, 0x92, 0x49, 0x2d, - 0x20, 0x7e, 0x6c, 0x5f, 0x04, 0x26, 0x9e, 0x5e, 0x61, 0xe0, 0x8c, 0x58, 0xca, 0xcb, 0x56, 0x7e, - 0x39, 0xe2, 0x0c, 0x37, 0x8d, 0x78, 0x44, 0x40, 0x8b, 0x88, 0x11, 0xf4, 0x30, 0x88, 0xeb, 0xc1, - 0x3d, 0x22, 0xd2, 0xeb, 0x59, 0x50, 0x8f, 0xe2, 0x43, 0xd9, 0x68, 0xbd, 0xcd, 0x60, 0xed, 0xdc, - 0xa0, 0xd4, 0x18, 0x28, 0x19, 0x45, 0xa4, 0x86, 0xae, 0x5e, 0x0f, 0xe1, 0xc4, 0x8d, 0x1c, 0x0b, - 0x63, 0x78, 0x40, 0xc3, 0xc1, 0x00, 0x6c, 0xa6, 0xe4, 0x20, 0x2e, 0xdc, 0x32, 0x8f, 0x8f, 0xb0, - 0xad, 0x80, 0xc0, 0x04, 0x31, 0x10, 0x8b, 0x0a, 0xa7, 0x34, 0xd2, 0xe0, 0x00, 0x21, 0x4d, 0x8d, - 0x21, 0xa6, 0x72, 0x7a, 0x98, 0x00, 0x14, 0xa0, 0xe2, 0x17, 0x80, 0x09, 0x50, 0x76, 0x00, 0x13, - 0xc3, 0xb0, 0x51, 0x4a, 0xc0, 0x54, 0x46, 0x95, 0x5b, 0x5f, 0xe2, 0x01, 0x5d, 0x21, 0xa5, 0xac, - 0xa0, 0xb1, 0x42, 0xa1, 0x68, 0x9b, 0xc7, 0x84, 0x30, 0x1e, 0x03, 0x26, 0x00, 0x53, 0x09, 0x5f, - 0xf9, 0x49, 0xce, 0x15, 0x1d, 0x99, 0x7d, 0xb7, 0x4f, 0xc1, 0x00, 0x8d, 0xdc, 0xd8, 0x4e, 0xbf, - 0x09, 0x14, 0x0a, 0xf8, 0x88, 0xcc, 0xfd, 0xf4, 0x01, 0x41, 0x39, 0x6d, 0xe1, 0x69, 0x9b, 0x6d, - 0x8f, 0x74, 0x0f, 0x12, 0x20, 0x14, 0x19, 0xde, 0xea, 0x90, 0x68, 0x39, 0x43, 0xe6, 0x0f, 0x2f, - 0x30, 0x66, 0xde, 0x2f, 0x10, 0x0a, 0x0b, 0x80, 0x6c, 0xce, 0x48, 0x0c, 0x45, 0xde, 0xc1, 0x95, - 0xea, 0x72, 0x77, 0x7c, 0x78, 0xf1, 0xcf, 0xf1, 0x63, 0x74, 0x92, 0xd2, 0x4b, 0xc1, 0x29, 0xa7, - 0xc3, 0x67, 0x53, 0x66, 0x80, 0xbf, 0x58, 0xdf, 0x39, 0x53, 0xac, 0xda, 0x6d, 0xf7, 0xc6, 0x5a, - 0x6b, 0x69, 0xad, 0xa6, 0xb6, 0x9a, 0xfc, 0x6c, 0x9e, 0x4a, 0xd2, 0xb9, 0x28, 0xcd, 0xa6, 0x4a, - 0x52, 0x93, 0x2a, 0x9a, 0x62, 0xd8, 0xb7, 0xe5, 0xe3, 0xbc, 0x98, 0x5c, 0xf2, 0xe7, 0xf8, 0x89, - 0xf0, 0xf9, 0x9f, 0x0f, 0x9f, 0x88, 0xe5, 0xc2, 0xe6, 0x5c, 0x2e, 0x78, 0xcc, 0xd9, 0x3e, 0x4d, - 0x93, 0xe1, 0x73, 0xb9, 0x73, 0xfe, 0x09, 0x7b, 0x4d, 0x24, 0x93, 0x4d, 0x19, 0x3e, 0x89, 0x17, - 0xc2, 0xb3, 0x90, 0x4e, 0x41, 0xce, 0x41, 0x39, 0x07, 0x7e, 0x6d, 0x36, 0xff, 0x12, 0x09, 0xa9, - 0x8f, 0x7c, 0x9d, 0x9f, 0x53, 0x92, 0x79, 0x26, 0xf8, 0x2c, 0x23, 0xe2, 0xee, 0xef, 0xba, 0xba, - 0x2e, 0x38, 0x90, 0x54, 0x59, 0x7a, 0xee, 0xef, 0xad, 0x69, 0x57, 0x8c, 0x12, 0x7c, 0x3e, 0x1f, - 0x1f, 0x87, 0xc3, 0xe3, 0xf1, 0xf9, 0x55, 0x4d, 0x35, 0x55, 0x4d, 0x35, 0xe1, 0x32, 0x65, 0xc4, - 0xa4, 0xcf, 0xc1, 0x85, 0x75, 0x79, 0x39, 0x70, 0x76, 0xbb, 0xbb, 0xff, 0x85, 0x0c, 0xaa, 0xaa, - 0xf6, 0xd1, 0xb0, 0x53, 0xee, 0xfb, 0xc8, 0x87, 0xbe, 0x14, 0xbb, 0xdb, 0xad, 0x67, 0xbe, 0xb7, - 0x57, 0xaf, 0x86, 0xad, 0xb6, 0xdb, 0x79, 0x1d, 0xbb, 0xbb, 0xff, 0x82, 0x0b, 0x1b, 0x4e, 0x6c, - 0x5a, 0xd5, 0x75, 0x15, 0x75, 0x11, 0x8d, 0xd5, 0xd7, 0xfc, 0x68, 0xab, 0x5a, 0xb1, 0xbb, 0x7b, - 0xbe, 0x5e, 0xff, 0xde, 0xa7, 0xf4, 0xe9, 0xba, 0xaa, 0xaf, 0x11, 0x87, 0x10, 0x4c, 0x34, 0xcb, - 0x7f, 0xe6, 0xd3, 0x6e, 0x6d, 0x36, 0xa5, 0x5f, 0x9b, 0x4d, 0xb1, 0x0b, 0xf1, 0x94, 0x92, 0xd2, - 0x4b, 0x49, 0x2d, 0x24, 0xbf, 0x19, 0xd2, 0x4b, 0x49, 0x22, 0x63, 0x31, 0x28, 0x99, 0x8c, 0xc8, - 0xa2, 0xf2, 0x44, 0x70, 0x98, 0x93, 0x73, 0xc6, 0x4b, 0x82, 0xbc, 0x43, 0x91, 0x0e, 0x52, 0xa4, - 0x95, 0x29, 0x33, 0xe3, 0x29, 0x24, 0x4c, 0x66, 0x24, 0x93, 0x31, 0x98, 0x94, 0x5c, 0x51, 0x70, - 0xde, 0x56, 0x66, 0x84, 0xd0, 0x3e, 0x86, 0xde, 0xdb, 0x09, 0xa1, 0x34, 0x25, 0x84, 0xb0, 0x18, - 0x02, 0x92, 0x69, 0x37, 0xff, 0x09, 0xd9, 0x9f, 0x93, 0x3e, 0xe3, 0x2b, 0xff, 0x71, 0x95, 0xff, - 0x8a, 0x8e, 0xf9, 0xdd, 0x94, 0xe5, 0xe5, 0xa7, 0xe7, 0x94, 0x41, 0x9b, 0xea, 0xaa, 0xb8, 0x88, - 0x27, 0x08, 0x31, 0x98, 0x38, 0x12, 0x4e, 0x51, 0xf8, 0xf0, 0x71, 0xd8, 0xca, 0x61, 0x2f, 0x88, - 0x1a, 0x20, 0xd7, 0x8f, 0xfe, 0x42, 0x30, 0x0a, 0x81, 0x1c, 0xaa, 0xac, 0xf0, 0xc7, 0x5e, 0x01, - 0x50, 0xf7, 0x26, 0x06, 0x62, 0x2e, 0x42, 0xe7, 0x42, 0x2a, 0x3c, 0xad, 0x16, 0x48, 0x4b, 0x11, - 0x69, 0x58, 0xc8, 0xe8, 0x15, 0x61, 0x04, 0x23, 0x08, 0x78, 0x5c, 0x20, 0x55, 0x01, 0x0d, 0x95, - 0xba, 0x00, 0x96, 0x02, 0xc9, 0x0c, 0x90, 0xb2, 0x9e, 0x02, 0xb8, 0x5d, 0xc2, 0x26, 0x29, 0x81, - 0xbf, 0x7e, 0xd6, 0xc8, 0x49, 0x0f, 0xd9, 0xd8, 0x29, 0xc1, 0xd8, 0x6f, 0x18, 0xa3, 0x2f, 0x0c, - 0x05, 0x4b, 0x85, 0xc3, 0xe3, 0xf1, 0xc4, 0x39, 0xc6, 0x03, 0x1d, 0xfd, 0xb3, 0x6f, 0xe0, 0xa3, - 0x9b, 0x0d, 0x9b, 0x4d, 0x65, 0xf0, 0x4f, 0x9b, 0xe2, 0xb7, 0x2b, 0x30, 0x74, 0xdc, 0x44, 0x68, - 0xab, 0xdd, 0x91, 0x24, 0xd7, 0xb4, 0x1b, 0xc4, 0x89, 0x20, 0x12, 0x3f, 0x6b, 0xcf, 0x06, 0xe1, - 0x62, 0x32, 0x32, 0x02, 0x4a, 0x33, 0x8f, 0xf2, 0x32, 0x8b, 0x34, 0xe6, 0xa7, 0xf8, 0x50, 0x64, - 0x8f, 0x16, 0x61, 0xdc, 0xaa, 0xa9, 0x17, 0x92, 0xd2, 0xea, 0xb8, 0xa0, 0xbe, 0xe9, 0x16, 0x60, - 0x3b, 0x9a, 0x5f, 0xfa, 0xe5, 0xa5, 0x62, 0xef, 0x1f, 0x73, 0x16, 0xfa, 0xc4, 0x97, 0x61, 0x01, - 0xc5, 0xf9, 0x61, 0x08, 0x7f, 0x46, 0x0e, 0x24, 0x69, 0x56, 0x83, 0x25, 0xa9, 0x80, 0xcd, 0x9c, - 0x7e, 0xe8, 0x23, 0xee, 0xc0, 0x18, 0xe5, 0xa0, 0x36, 0x9a, 0x25, 0x04, 0x2a, 0xc6, 0x56, 0x7d, - 0x2e, 0x2e, 0x2b, 0xc1, 0x3e, 0xb7, 0xfe, 0x26, 0x30, 0x8f, 0x8a, 0xac, 0x75, 0x28, 0xa8, 0x84, - 0xe4, 0xda, 0x46, 0xa9, 0x1a, 0xd0, 0xa2, 0xce, 0x5f, 0x3e, 0x13, 0x02, 0x23, 0x85, 0x0d, 0x4b, - 0x39, 0xa2, 0x50, 0xdd, 0xf8, 0x28, 0x0b, 0x9f, 0x0f, 0x8e, 0xc7, 0x63, 0x4d, 0x7e, 0xf8, 0x23, - 0xbd, 0x63, 0x14, 0x93, 0x8c, 0x2e, 0x92, 0x5a, 0x49, 0x69, 0x25, 0xa4, 0x97, 0x8c, 0xe9, 0x25, - 0xa4, 0x96, 0x92, 0x5a, 0x49, 0x78, 0x4e, 0x5a, 0x7c, 0xb4, 0x10, 0xd3, 0xe2, 0x0e, 0x54, 0x77, - 0xe6, 0xd3, 0x69, 0xf5, 0xfb, 0xe8, 0xc0, 0x34, 0x05, 0xbc, 0x47, 0x88, 0xf8, 0xfb, 0x8a, 0xf6, - 0x9d, 0x7a, 0xb7, 0xe8, 0x8e, 0x7c, 0x33, 0x3d, 0x1c, 0xb8, 0xdc, 0x1e, 0x54, 0xd3, 0x4d, 0x3f, - 0xf0, 0x8f, 0x55, 0x3e, 0x3b, 0xbe, 0x5c, 0x7f, 0x05, 0x1d, 0xdf, 0x77, 0x8e, 0x71, 0x22, 0x3e, - 0x38, 0x6f, 0x1f, 0xa6, 0xaa, 0x9f, 0x1a, 0xa6, 0x4e, 0x11, 0x08, 0x27, 0xa6, 0x9b, 0xde, 0xf7, - 0xf8, 0x2e, 0xe7, 0x61, 0xcc, 0xc5, 0x54, 0xb8, 0xf8, 0xaa, 0x69, 0xa6, 0x9a, 0xba, 0xbf, 0xac, - 0xd5, 0xc6, 0x8e, 0xdb, 0x6c, 0xdb, 0xd5, 0x77, 0x75, 0x36, 0xf4, 0xb0, 0x50, 0xa6, 0xa9, 0xff, - 0x94, 0x5b, 0x53, 0x63, 0x6f, 0x82, 0x42, 0xee, 0xf9, 0x78, 0x92, 0xd5, 0x7f, 0x2d, 0xdf, 0xf2, - 0x6f, 0x7f, 0x19, 0xdd, 0xf7, 0x7d, 0xdf, 0x77, 0xf0, 0x57, 0xdd, 0xf7, 0x72, 0x50, 0x94, 0xf5, - 0x58, 0x8f, 0xad, 0x35, 0x62, 0x41, 0x17, 0x49, 0x2e, 0xf0, 0x80, 0x20, 0x1c, 0xda, 0xd4, 0xc1, - 0x98, 0x2b, 0x31, 0x83, 0x33, 0x33, 0x32, 0x40, 0x69, 0xa7, 0x56, 0x1c, 0x45, 0x76, 0x2a, 0xc1, - 0x01, 0x12, 0xf0, 0x8b, 0xff, 0xe3, 0x4c, 0x55, 0x90, 0x3a, 0x03, 0x91, 0x57, 0xcc, 0xac, 0x49, - 0x82, 0xc2, 0xec, 0x1a, 0x8a, 0x6f, 0x06, 0x01, 0x62, 0x9b, 0x1f, 0x46, 0x17, 0x8e, 0x15, 0x95, - 0x0b, 0x0d, 0x01, 0x50, 0x6e, 0xae, 0x04, 0xa7, 0x9b, 0x61, 0x4a, 0xc0, 0x07, 0x9c, 0x76, 0xa0, - 0x3c, 0x9f, 0xba, 0xbf, 0x84, 0x06, 0x7a, 0x32, 0x47, 0x95, 0xc2, 0x66, 0xb4, 0xd0, 0xb6, 0xce, - 0xb2, 0xc0, 0x6d, 0x06, 0x8d, 0x20, 0x7f, 0x20, 0x4e, 0xcd, 0xfe, 0x33, 0xd5, 0x35, 0xdd, 0x6b, - 0x5d, 0xfc, 0x38, 0x68, 0xba, 0x81, 0x45, 0x89, 0x21, 0x63, 0xcf, 0x1c, 0xef, 0xf0, 0xa0, 0xeb, - 0xb1, 0x4d, 0xe9, 0xc5, 0xeb, 0xe9, 0x8b, 0x24, 0xee, 0x5a, 0xcf, 0xcd, 0x0f, 0xfa, 0x52, 0xd8, - 0x88, 0xc5, 0x45, 0x5a, 0x91, 0x8a, 0x7c, 0x15, 0x9e, 0xd0, 0x13, 0x4b, 0xc8, 0x9a, 0x0b, 0x7b, - 0x84, 0x89, 0x7e, 0xee, 0xf7, 0x7c, 0x10, 0x9c, 0xcc, 0x17, 0xc9, 0x68, 0xc7, 0xe0, 0xa4, 0x63, - 0x9f, 0x66, 0x3d, 0x5b, 0x2b, 0x41, 0x62, 0xe2, 0xd4, 0xd8, 0xe3, 0x1a, 0x38, 0xa3, 0x15, 0x5a, - 0xf1, 0x08, 0x2e, 0x45, 0xc9, 0xc5, 0xdd, 0xd5, 0x5d, 0xd5, 0x7d, 0x52, 0x2e, 0x11, 0x0d, 0xd6, - 0xaa, 0x91, 0x79, 0xf4, 0xfb, 0xfa, 0x2b, 0xcb, 0x89, 0x46, 0x8a, 0xb8, 0xbd, 0xd7, 0xaa, 0xc2, - 0x4a, 0x03, 0xe9, 0x58, 0x08, 0x74, 0x20, 0xa4, 0x9a, 0x69, 0xa7, 0xb6, 0xdf, 0x82, 0x8e, 0x6c, - 0x5d, 0x54, 0xab, 0xfa, 0xc4, 0x8b, 0x84, 0x14, 0x8b, 0x2c, 0x7a, 0xea, 0xdb, 0x6d, 0xb7, 0xe4, - 0xc4, 0x7d, 0x08, 0xd8, 0xfa, 0xe5, 0xf5, 0x72, 0xbb, 0x10, 0x2b, 0xdc, 0x46, 0x26, 0x6e, 0x3c, - 0x93, 0x33, 0x4f, 0x54, 0xa5, 0x61, 0x8c, 0x0f, 0xab, 0xbe, 0x2f, 0xe3, 0xc9, 0x3c, 0xc1, 0x41, - 0x96, 0xdd, 0x1d, 0xb4, 0x1c, 0x53, 0x24, 0xed, 0x01, 0x8a, 0x4c, 0x93, 0xb4, 0x28, 0xc9, 0x92, - 0x76, 0x9e, 0x0a, 0xbb, 0x47, 0x2c, 0x6b, 0xd0, 0x64, 0xea, 0x0d, 0xac, 0x47, 0x53, 0x1f, 0x5e, - 0x21, 0x1d, 0xfe, 0x51, 0x08, 0x52, 0xaa, 0x5e, 0x21, 0x84, 0xd7, 0x7f, 0x16, 0x6d, 0xde, 0xad, - 0x99, 0x9f, 0x28, 0xc0, 0x7f, 0xde, 0xfe, 0x82, 0xff, 0xfa, 0xbd, 0x75, 0x79, 0xba, 0x23, 0x57, - 0x04, 0x9d, 0xdf, 0xab, 0x10, 0xbd, 0xf3, 0x55, 0x77, 0xc5, 0x5d, 0xdd, 0xf5, 0x51, 0x1d, 0x7b, - 0xeb, 0xd0, 0x9f, 0x14, 0x12, 0x6a, 0xef, 0xe5, 0x5e, 0xb5, 0x6c, 0xcc, 0x57, 0xe4, 0x25, 0xde, - 0x6e, 0x61, 0x35, 0x7f, 0x89, 0x23, 0xc5, 0x77, 0xb5, 0x05, 0xdc, 0x55, 0x6a, 0xda, 0xbf, 0xe6, - 0x27, 0x3f, 0x36, 0x24, 0x25, 0x6c, 0x5d, 0x5e, 0x68, 0x1a, 0x16, 0x5e, 0x83, 0x35, 0xf5, 0x79, - 0xfa, 0xbf, 0xd5, 0xe4, 0xea, 0xf2, 0x75, 0xaf, 0x82, 0x3f, 0x2e, 0x3f, 0xcd, 0x7d, 0x7d, 0x75, - 0xf5, 0xd4, 0x9c, 0x55, 0x5d, 0x5d, 0xdd, 0x55, 0xf5, 0x79, 0x3a, 0xbc, 0xbd, 0x7a, 0x48, 0x91, - 0x20, 0x90, 0xdc, 0x30, 0x0f, 0x0a, 0x6f, 0x12, 0x14, 0x14, 0x65, 0x15, 0x2e, 0x2b, 0x94, 0xbc, - 0x97, 0xa8, 0xac, 0xb7, 0xcb, 0x19, 0xfe, 0xff, 0xbc, 0x48, 0x2c, 0xa6, 0x5b, 0x13, 0xca, 0x85, - 0x3a, 0x45, 0x50, 0x0e, 0x6c, 0x18, 0x6f, 0x8e, 0x00, 0x78, 0xe8, 0x3e, 0x9f, 0xc4, 0x85, 0x3b, - 0xbe, 0x21, 0xa0, 0xae, 0xdd, 0xa4, 0x1d, 0x7b, 0x2a, 0x0c, 0xbc, 0x53, 0x77, 0x12, 0x24, 0x21, - 0x7b, 0xb8, 0xf2, 0xe5, 0x98, 0x8e, 0x2a, 0x72, 0x1b, 0xfd, 0xc4, 0x82, 0xb2, 0x2b, 0xa4, 0x21, - 0x48, 0x20, 0x70, 0xf7, 0x0b, 0x14, 0xb9, 0x47, 0xeb, 0xe6, 0xde, 0x11, 0x28, 0xd4, 0x14, 0xfd, - 0xfc, 0x22, 0x31, 0xe5, 0x42, 0x18, 0x05, 0x6b, 0x68, 0x06, 0xe8, 0x3e, 0x82, 0xc2, 0x6c, 0xde, - 0x07, 0xbf, 0x89, 0x67, 0x02, 0x76, 0x44, 0x9e, 0xbf, 0x81, 0x26, 0x18, 0xe8, 0x5a, 0x75, 0xe8, - 0xed, 0xe2, 0x65, 0xeb, 0x5f, 0x57, 0xe2, 0x04, 0xab, 0x46, 0x70, 0x54, 0x47, 0x7f, 0x8d, 0x61, - 0xdb, 0x91, 0x0f, 0x23, 0x7c, 0x28, 0x2a, 0x2b, 0xb7, 0xd5, 0x57, 0xa8, 0xe1, 0x6b, 0x5e, 0xf0, - 0x88, 0xab, 0xda, 0xaa, 0xf8, 0x98, 0x50, 0xa2, 0x47, 0x0f, 0x60, 0x0e, 0xda, 0x72, 0xa9, 0x10, - 0x0a, 0x01, 0xdc, 0x35, 0xde, 0x62, 0xf6, 0x59, 0x46, 0xce, 0xd0, 0xb9, 0x67, 0x3e, 0xae, 0xe1, - 0x00, 0x88, 0x29, 0x22, 0xbe, 0xa2, 0xae, 0xa4, 0x20, 0xdc, 0x4f, 0xac, 0xab, 0xf1, 0x22, 0x46, - 0x1d, 0x61, 0x09, 0xac, 0x3f, 0x18, 0xa2, 0x03, 0x30, 0x64, 0x59, 0xc3, 0x89, 0xe9, 0xab, 0x56, - 0xbe, 0x24, 0x60, 0x82, 0x52, 0x84, 0x58, 0xa2, 0xb1, 0x54, 0x49, 0x42, 0x36, 0x34, 0xa2, 0xa3, - 0xce, 0x39, 0x11, 0xf3, 0x1d, 0xa0, 0x80, 0x23, 0x39, 0x49, 0x39, 0x10, 0x1f, 0x05, 0x84, 0x8f, - 0x31, 0x52, 0xba, 0xa2, 0xcc, 0x34, 0x11, 0x8f, 0x7a, 0x43, 0x32, 0xe8, 0x9b, 0x51, 0x20, 0xa4, - 0x1c, 0xf4, 0x30, 0x4f, 0x6c, 0x7d, 0x9c, 0x07, 0x57, 0xf0, 0x91, 0xd7, 0xea, 0x88, 0xec, 0x28, - 0x21, 0x80, 0xa3, 0xf8, 0x42, 0x4e, 0x86, 0xd7, 0xc3, 0x86, 0xad, 0x62, 0xe2, 0xdf, 0xd7, 0x34, - 0xdf, 0x97, 0xa3, 0xe1, 0xf5, 0xe9, 0xfa, 0x3e, 0x5f, 0x46, 0xdc, 0xbe, 0x8a, 0xff, 0x04, 0x37, - 0xbb, 0xb7, 0xd7, 0x91, 0x7a, 0xf8, 0x97, 0x82, 0x22, 0x2d, 0x5d, 0xeb, 0xaf, 0x57, 0x26, 0xaf, - 0xf4, 0x57, 0xf8, 0xbe, 0xef, 0xbb, 0xf1, 0x0b, 0x95, 0xe2, 0x6b, 0x10, 0xbd, 0xf1, 0xe1, 0x0b, - 0xbd, 0xec, 0xe9, 0x29, 0xb8, 0xe7, 0x06, 0xea, 0x73, 0xc4, 0x05, 0x26, 0xc6, 0xb5, 0x69, 0x29, - 0x77, 0x2e, 0x0c, 0xab, 0xf4, 0x0e, 0xf2, 0x9e, 0x01, 0x82, 0x70, 0x00, 0x21, 0xf1, 0x4a, 0x57, - 0xf8, 0x52, 0x3b, 0x59, 0x7b, 0xca, 0x3b, 0xaa, 0xc9, 0x39, 0x67, 0x06, 0xc9, 0x58, 0x9d, 0x22, - 0x93, 0x04, 0x02, 0xff, 0x19, 0x43, 0x79, 0x25, 0x52, 0x2a, 0x70, 0xc8, 0xa7, 0x93, 0x36, 0xc0, - 0xac, 0x5b, 0xee, 0x21, 0xf8, 0x81, 0x03, 0xe2, 0xeb, 0x37, 0xbb, 0x9b, 0xd4, 0xa9, 0x62, 0x02, - 0x00, 0xb0, 0xaa, 0xaa, 0x2e, 0x66, 0x05, 0x78, 0xd2, 0x67, 0x39, 0xc2, 0xeb, 0xfc, 0x15, 0xf5, - 0x5b, 0x68, 0x4b, 0x33, 0x24, 0xfb, 0xf8, 0x81, 0x02, 0x85, 0x1a, 0xe4, 0x07, 0x01, 0x0e, 0xd1, - 0xf0, 0x7b, 0xb1, 0x5f, 0xf1, 0x17, 0xd0, 0x5c, 0xf5, 0xf5, 0xef, 0x84, 0xbc, 0xde, 0xaf, 0xf4, - 0x42, 0xb5, 0xf5, 0xef, 0xaa, 0x65, 0xeb, 0xdf, 0x58, 0xa3, 0x3a, 0x3f, 0xeb, 0xab, 0x4b, 0xd4, - 0xe8, 0xdf, 0x56, 0x2a, 0x22, 0x89, 0xdf, 0x5e, 0xbe, 0xb9, 0x7c, 0xa4, 0xdd, 0xd7, 0x28, 0x97, - 0x7d, 0x61, 0x15, 0xef, 0x84, 0x42, 0xd4, 0x76, 0x34, 0xdc, 0xec, 0xbe, 0x5b, 0xfc, 0x48, 0x52, - 0x3f, 0xe2, 0x55, 0x98, 0x29, 0x8d, 0x61, 0x3d, 0x00, 0x92, 0x62, 0x12, 0x9c, 0xe4, 0x8c, 0x1d, - 0x0f, 0x03, 0x40, 0x3a, 0xd2, 0xdc, 0x00, 0xe5, 0x93, 0x9c, 0x0f, 0x94, 0x77, 0x68, 0xf8, 0x35, - 0xd4, 0x0e, 0x00, 0x23, 0x51, 0x20, 0x1c, 0xb4, 0x16, 0x10, 0xf8, 0x95, 0xc3, 0x6e, 0x00, 0xbc, - 0x3b, 0xc9, 0xc6, 0xab, 0xaf, 0xfe, 0x56, 0xaa, 0x4e, 0x3f, 0x88, 0x31, 0xd7, 0x06, 0x30, 0x3a, - 0xb9, 0xd8, 0x1f, 0xe4, 0xa7, 0x03, 0x89, 0xc1, 0x45, 0xc1, 0xc5, 0xc0, 0x93, 0x71, 0x2f, 0xf4, - 0xd1, 0x78, 0xf9, 0x6d, 0xee, 0xfd, 0x35, 0x4c, 0xc9, 0x20, 0x5c, 0x40, 0x50, 0xab, 0x40, 0xc3, - 0xaa, 0x70, 0x1a, 0x55, 0x89, 0x01, 0x53, 0xc1, 0x92, 0x8a, 0x15, 0x6b, 0xc8, 0x53, 0x01, 0x98, - 0xdb, 0xd8, 0x05, 0xef, 0x81, 0xd0, 0xe9, 0xa4, 0x1f, 0x1e, 0x10, 0x63, 0x66, 0x80, 0x02, 0xd3, - 0xb6, 0x19, 0x34, 0x85, 0x5d, 0x98, 0xfc, 0x4c, 0x64, 0xf5, 0x45, 0x6b, 0xd0, 0xb3, 0x8c, 0x19, - 0xc6, 0x94, 0xe0, 0x30, 0x1f, 0x70, 0x86, 0xca, 0x16, 0x7c, 0x1c, 0x96, 0x12, 0x2a, 0xdc, 0x2f, - 0x1e, 0x7f, 0xc6, 0x16, 0x56, 0x56, 0x57, 0xd5, 0x13, 0xb3, 0xbf, 0x84, 0x06, 0x0a, 0x75, 0xc8, - 0x43, 0x57, 0x54, 0x3c, 0xc6, 0x3a, 0xb2, 0xe2, 0x30, 0xc2, 0x0b, 0xff, 0xf4, 0xd3, 0xd8, 0x4c, - 0x2e, 0xfa, 0xc5, 0xf2, 0x99, 0xdf, 0xc4, 0x84, 0x54, 0x76, 0x8a, 0xe7, 0x2a, 0xa6, 0x9a, 0x69, - 0xfb, 0xe8, 0xa5, 0x4f, 0xaf, 0x7c, 0x78, 0x87, 0x7d, 0xdf, 0x55, 0xf8, 0x95, 0xe9, 0x38, 0x48, - 0x4a, 0xaf, 0xbb, 0xfa, 0xd4, 0x9d, 0xf7, 0x72, 0xf4, 0x66, 0x3e, 0x8a, 0x8e, 0xd7, 0x46, 0x75, - 0x72, 0x75, 0x55, 0xc9, 0x55, 0x59, 0x38, 0x24, 0x3a, 0xaf, 0x17, 0xc7, 0x84, 0xa7, 0x63, 0x3f, - 0x3a, 0x13, 0xec, 0x9a, 0x13, 0x0c, 0x32, 0xd8, 0x98, 0x52, 0x4e, 0xdc, 0x25, 0x07, 0xd9, 0x12, - 0x7c, 0x5e, 0xd6, 0x32, 0x1e, 0x82, 0x80, 0x01, 0x01, 0x58, 0x8a, 0x12, 0x44, 0x01, 0x8a, 0x24, - 0x11, 0x68, 0xa3, 0x8a, 0x7a, 0x31, 0x80, 0x16, 0xfd, 0x41, 0x8c, 0x47, 0x0f, 0x3d, 0x50, 0x5b, - 0x06, 0xb3, 0x62, 0x0e, 0x11, 0xe6, 0x90, 0xc3, 0xd1, 0xa0, 0x01, 0x6d, 0xb4, 0xaf, 0xe6, 0xa4, - 0x09, 0x1e, 0xd3, 0x91, 0x8f, 0x8e, 0x4c, 0xb1, 0x01, 0x11, 0x92, 0x9b, 0xa0, 0x6a, 0x2d, 0xb3, - 0x64, 0x1c, 0x8e, 0xa3, 0x07, 0x4f, 0xc4, 0x38, 0xab, 0x1c, 0x15, 0xe7, 0x52, 0x0e, 0x0b, 0xfd, - 0x04, 0x7c, 0x41, 0x1f, 0xc9, 0xd4, 0x0b, 0x75, 0xa5, 0x00, 0x2d, 0xda, 0x2c, 0x80, 0x02, 0xb1, - 0x85, 0xf7, 0xd6, 0x24, 0xb1, 0x89, 0x85, 0x2c, 0x08, 0xae, 0x3c, 0x1b, 0xb0, 0x2a, 0xc4, 0xd8, - 0x65, 0x4a, 0x5e, 0xe6, 0x25, 0x9e, 0x93, 0xba, 0xca, 0x7f, 0x0d, 0x92, 0x00, 0x2a, 0x56, 0xb0, - 0xfd, 0xb0, 0x8e, 0x6f, 0xb3, 0x5d, 0x2f, 0xd1, 0x49, 0x4d, 0xc3, 0x88, 0x92, 0x9f, 0x4c, 0xad, - 0xad, 0xb5, 0x82, 0xc0, 0x0f, 0x91, 0xd5, 0x00, 0xc8, 0xe9, 0x88, 0xc0, 0x2a, 0x2b, 0xa3, 0x66, - 0xb2, 0x40, 0xf6, 0xaa, 0x81, 0xb1, 0x7a, 0xa7, 0x35, 0xc5, 0x4a, 0x4b, 0x29, 0x73, 0xc9, 0x75, - 0xba, 0xd7, 0x10, 0x24, 0x29, 0x74, 0xb2, 0x58, 0xc9, 0xf7, 0xd4, 0x71, 0x82, 0x2e, 0x14, 0x8b, - 0x3b, 0xbf, 0x35, 0x9b, 0xbb, 0xe3, 0x8b, 0x75, 0xed, 0x3a, 0xa1, 0x97, 0xa5, 0xe3, 0x08, 0x8e, - 0xb8, 0x63, 0x08, 0xc1, 0x8b, 0xc9, 0xe6, 0xfd, 0x78, 0x82, 0xc9, 0xe6, 0x74, 0x0d, 0x05, 0xe5, - 0xcb, 0xd0, 0xf7, 0xae, 0x84, 0xa0, 0x1c, 0x4e, 0x26, 0xba, 0x33, 0xd7, 0x04, 0x3c, 0x9f, 0xd8, - 0xe2, 0x61, 0x87, 0x2d, 0x27, 0x21, 0xd5, 0x7f, 0x19, 0xd5, 0x75, 0x5d, 0x57, 0x77, 0x5c, 0xd4, - 0x68, 0xd5, 0x7d, 0x53, 0x49, 0xc8, 0x2a, 0xeb, 0xe2, 0x56, 0x2a, 0xe6, 0xee, 0xfe, 0x8e, 0xdf, - 0x58, 0xdf, 0x45, 0x8d, 0x5d, 0x11, 0xab, 0xaf, 0x54, 0x20, 0x20, 0x16, 0x0a, 0x7d, 0xad, 0xda, - 0x07, 0x7e, 0xa1, 0x8a, 0xec, 0xb2, 0xdc, 0x20, 0x10, 0x0a, 0x41, 0xeb, 0xa7, 0x1b, 0x8f, 0xd4, - 0xcf, 0xc1, 0xcd, 0x06, 0x35, 0x1b, 0xb7, 0x9d, 0xa5, 0xac, 0xf5, 0x22, 0xa5, 0x24, 0xdc, 0xec, - 0x39, 0x20, 0x01, 0xe4, 0x22, 0x85, 0xae, 0xba, 0x5a, 0x3d, 0x82, 0xde, 0xd9, 0x07, 0x6a, 0xc5, - 0xde, 0x27, 0x8b, 0x2a, 0x75, 0x5a, 0xb9, 0x56, 0x90, 0xd0, 0x7c, 0x57, 0x86, 0xa6, 0x95, 0xaa, - 0xbc, 0xf9, 0xb3, 0x2c, 0x5d, 0xd0, 0x00, 0x08, 0xc8, 0x7a, 0x74, 0xfc, 0x20, 0x30, 0xc1, 0xd6, - 0x00, 0x6b, 0x9d, 0x49, 0xc5, 0x74, 0xe5, 0x30, 0xb3, 0x88, 0x46, 0xdb, 0xa9, 0x1c, 0x03, 0x43, - 0xc4, 0x82, 0x20, 0x07, 0x0e, 0x00, 0x1a, 0x06, 0xc3, 0xb2, 0x85, 0x60, 0x6d, 0x2d, 0xe3, 0x8a, - 0x90, 0xc9, 0x30, 0x72, 0xf9, 0x9b, 0x9e, 0x03, 0xe5, 0x45, 0x64, 0x4d, 0x5c, 0x48, 0x40, 0x64, - 0xb1, 0x82, 0xea, 0x1b, 0x23, 0x1c, 0x3e, 0xb2, 0xd2, 0x0f, 0xf8, 0x5c, 0xa8, 0x4e, 0x27, 0x89, - 0x03, 0x56, 0x79, 0xfc, 0x9a, 0x8a, 0x96, 0x04, 0x80, 0xa3, 0x2d, 0x8a, 0x31, 0x22, 0x41, 0xc6, - 0xaf, 0xc8, 0x96, 0x0c, 0xb0, 0x1c, 0x31, 0x28, 0x22, 0x84, 0xd7, 0x73, 0x0d, 0x3e, 0xa3, 0x76, - 0xfa, 0xf6, 0x82, 0x7c, 0xa6, 0x25, 0x2c, 0x64, 0xaa, 0x17, 0xcb, 0x17, 0x7a, 0x18, 0xa9, 0x76, - 0x1a, 0x20, 0x50, 0x26, 0x13, 0x09, 0xa6, 0x27, 0x26, 0x2f, 0x31, 0x3d, 0x31, 0x7e, 0x24, 0x48, - 0x42, 0xa2, 0xcc, 0xff, 0x68, 0xa4, 0x6f, 0x2f, 0xc4, 0x44, 0x49, 0xe8, 0xb0, 0xbc, 0xe1, 0x77, - 0xc4, 0x04, 0x06, 0x0a, 0xd9, 0x8a, 0x0e, 0x0d, 0x70, 0x9d, 0x8e, 0xc9, 0x1f, 0x29, 0xbc, 0x5c, - 0xfe, 0x44, 0x79, 0x93, 0x25, 0xc2, 0x05, 0x38, 0xee, 0x51, 0x49, 0x14, 0x54, 0x3e, 0xc3, 0xd0, - 0x44, 0xf5, 0xf5, 0x79, 0xba, 0xa6, 0x89, 0xea, 0xd7, 0xd6, 0xab, 0xb2, 0x3b, 0xbd, 0x75, 0xd7, - 0xd1, 0x18, 0xf9, 0xeb, 0xe9, 0xa6, 0xdb, 0x7e, 0x7a, 0xfa, 0x69, 0xb6, 0xdb, 0xe7, 0x29, 0x13, - 0xea, 0x4c, 0xb6, 0xb9, 0x2e, 0xff, 0xa3, 0xf7, 0x84, 0x3e, 0xba, 0xf9, 0x69, 0x24, 0x92, 0x58, - 0x43, 0xf5, 0x67, 0xd7, 0x4b, 0xf0, 0x5d, 0x55, 0xf1, 0x58, 0xae, 0x25, 0xf0, 0x80, 0x27, 0x1d, - 0x7b, 0x88, 0x7e, 0xeb, 0x2e, 0x11, 0x85, 0x27, 0xe8, 0xc9, 0x09, 0x5c, 0xfc, 0xeb, 0xf5, 0x5c, - 0x5c, 0x5d, 0xbc, 0x22, 0x14, 0xbd, 0x9d, 0x42, 0xd4, 0x04, 0xa3, 0x93, 0xf6, 0xcc, 0x44, 0x45, - 0xc2, 0xd6, 0xaa, 0x0d, 0x52, 0xdb, 0x00, 0x02, 0x15, 0x42, 0xa8, 0x5d, 0x05, 0x84, 0x49, 0x33, - 0x61, 0xb4, 0x60, 0x27, 0xce, 0xc9, 0x80, 0x23, 0xad, 0x18, 0xc4, 0xdf, 0xb7, 0xfb, 0xec, 0x34, - 0x96, 0x61, 0x90, 0xfb, 0x8e, 0xf0, 0x4f, 0xa4, 0x4e, 0x39, 0x83, 0x8f, 0x74, 0x4e, 0x0b, 0x07, - 0x62, 0x27, 0x76, 0xf5, 0x7f, 0x10, 0x0a, 0x02, 0x90, 0x2d, 0x79, 0x00, 0x00, 0x80, 0x22, 0x7d, - 0x4d, 0x46, 0x16, 0x96, 0x0d, 0x81, 0x86, 0x0d, 0x14, 0x70, 0x27, 0x0e, 0x21, 0xfe, 0x16, 0xce, - 0x1e, 0x40, 0x80, 0x8d, 0x42, 0x8f, 0x80, 0xc6, 0x00, 0x22, 0x04, 0x43, 0xd6, 0xed, 0x39, 0xe7, - 0x7b, 0x78, 0xe3, 0x1c, 0xe1, 0xd6, 0x2c, 0x09, 0x60, 0x72, 0xa2, 0x01, 0xf7, 0xea, 0xaa, 0xb7, - 0xfc, 0x4f, 0x28, 0xfe, 0xfc, 0x40, 0x29, 0x04, 0xc6, 0x21, 0x8b, 0x4a, 0x4e, 0xb5, 0xbf, 0x12, - 0x24, 0x79, 0x44, 0xb8, 0xfc, 0xef, 0x9b, 0x14, 0xee, 0x78, 0x80, 0x80, 0x2d, 0xb5, 0x7a, 0x6c, - 0x1a, 0xfb, 0x89, 0x08, 0xba, 0xd7, 0xc2, 0x23, 0xf5, 0x55, 0x38, 0x30, 0x74, 0xe0, 0xff, 0xa9, - 0x42, 0xc6, 0xc4, 0xee, 0x70, 0x80, 0xc1, 0x97, 0x78, 0x12, 0x78, 0xcf, 0xa4, 0xe4, 0xe0, 0xe7, - 0x29, 0xb2, 0x3f, 0xe4, 0x55, 0x77, 0x4b, 0xcc, 0x7a, 0x1c, 0x06, 0x30, 0x76, 0xc2, 0x2e, 0x52, - 0xcf, 0x84, 0x01, 0x31, 0x56, 0xc1, 0x83, 0x3d, 0xf0, 0xa0, 0xd5, 0x24, 0xa0, 0xfc, 0xef, 0x94, - 0x2a, 0xe2, 0xb7, 0x7f, 0x44, 0x7b, 0xea, 0xff, 0x47, 0x45, 0xb7, 0xc1, 0x3c, 0xac, 0x4a, 0xc4, - 0xac, 0x4a, 0xc5, 0xa4, 0x1e, 0xb4, 0x69, 0xfb, 0xbb, 0xbf, 0xab, 0xcf, 0xca, 0x2a, 0xef, 0xf5, - 0x6a, 0xe8, 0x4b, 0xfc, 0x13, 0x08, 0x77, 0x77, 0x77, 0x55, 0x62, 0x7c, 0x4b, 0x3d, 0xef, 0xea, - 0xf3, 0xc1, 0x40, 0x40, 0x58, 0xcc, 0xb8, 0xf7, 0x15, 0x42, 0x06, 0x58, 0x62, 0x14, 0x36, 0xef, - 0x71, 0x58, 0xfd, 0x42, 0xb0, 0xe8, 0xad, 0x3f, 0x66, 0xa4, 0xdc, 0x70, 0xf1, 0x5b, 0x78, 0x01, - 0xcf, 0x7c, 0x20, 0x51, 0x58, 0x51, 0xd1, 0xf9, 0x51, 0xb5, 0x10, 0x4b, 0x6e, 0x04, 0x61, 0x5b, - 0xa8, 0xdd, 0xa5, 0xfc, 0x10, 0x84, 0x0a, 0x7c, 0xaa, 0xb7, 0xbb, 0xbc, 0xb4, 0xc4, 0x89, 0x05, - 0x44, 0x77, 0xc7, 0x4b, 0xcd, 0xa0, 0xb4, 0x84, 0xd4, 0x5d, 0x36, 0xc8, 0xb8, 0xf7, 0xc4, 0xd8, - 0x28, 0x5a, 0xf7, 0x12, 0x10, 0x0a, 0x08, 0xec, 0xff, 0x7f, 0x3f, 0xcb, 0x36, 0xfd, 0xeb, 0xf1, - 0x2e, 0x0a, 0xc1, 0x8f, 0xf1, 0xd7, 0xa1, 0x40, 0x5c, 0x4a, 0x5d, 0xe1, 0x11, 0x97, 0xec, 0x13, - 0x8a, 0x9f, 0x60, 0xa8, 0xe8, 0x27, 0x2c, 0xd5, 0x18, 0x05, 0x34, 0xf8, 0xf3, 0x76, 0x80, 0x5d, - 0xa7, 0x2b, 0x67, 0x05, 0x98, 0xb9, 0x1c, 0xd6, 0x78, 0x44, 0x12, 0x8d, 0x15, 0xbf, 0xb6, 0x4c, - 0xee, 0x20, 0x20, 0x27, 0x79, 0x3d, 0x2b, 0xfb, 0x2b, 0x47, 0x50, 0xc0, 0x3e, 0x11, 0x12, 0x14, - 0x22, 0xea, 0xd5, 0x55, 0x45, 0xd5, 0x2b, 0xb8, 0xaf, 0xb0, 0xb6, 0x41, 0x82, 0xbf, 0xf5, 0xf5, - 0xc4, 0x44, 0xd5, 0x52, 0x48, 0x56, 0x21, 0x63, 0xc1, 0x00, 0x40, 0x64, 0x64, 0x7c, 0xa5, 0x50, - 0x1a, 0x45, 0x9a, 0xeb, 0x24, 0x79, 0x4f, 0x0b, 0x03, 0xa1, 0xf3, 0x83, 0x82, 0xe5, 0xea, 0x23, - 0x83, 0xfe, 0x2c, 0x97, 0x15, 0xd4, 0xeb, 0xf0, 0xa0, 0xa3, 0xcd, 0x45, 0xd2, 0xf3, 0x8b, 0x07, - 0x3c, 0x43, 0x88, 0xbc, 0xb5, 0x5d, 0xcb, 0x3a, 0xc5, 0xce, 0x39, 0x48, 0xf0, 0xf3, 0xce, 0x37, - 0x10, 0x18, 0x05, 0x7b, 0x96, 0xdc, 0x75, 0x4b, 0x19, 0x78, 0x6f, 0xf3, 0xbb, 0xe4, 0x5b, 0x6f, - 0x0c, 0x02, 0x80, 0x8b, 0xce, 0xc3, 0xbb, 0x9e, 0x99, 0x52, 0x78, 0x80, 0xc7, 0x86, 0x23, 0x39, - 0xea, 0x94, 0x98, 0xbe, 0x10, 0xe0, 0x90, 0x45, 0x21, 0x58, 0x81, 0xc1, 0x6a, 0x87, 0x04, 0x00, - 0xb0, 0xd7, 0x15, 0x9f, 0x1c, 0xf9, 0xac, 0xca, 0x8b, 0x8e, 0xc7, 0xe1, 0xec, 0x02, 0xd5, 0xf0, - 0x88, 0xba, 0x32, 0xd5, 0xe3, 0x52, 0x79, 0xff, 0x6e, 0x7e, 0x36, 0x87, 0x9e, 0xdf, 0xc2, 0xf8, - 0x02, 0x94, 0x51, 0x01, 0x87, 0xe8, 0xb1, 0x3d, 0x79, 0x1f, 0x66, 0x0c, 0xec, 0x16, 0xf7, 0xcf, - 0x58, 0x39, 0x81, 0x3b, 0x70, 0xb1, 0xb7, 0xe2, 0xc2, 0xc4, 0x38, 0x0d, 0xcb, 0xe0, 0x90, 0xe3, - 0x3e, 0xef, 0x67, 0xfe, 0x4f, 0xf8, 0x91, 0x0e, 0xab, 0xf0, 0x80, 0x2c, 0x93, 0x20, 0xdb, 0x41, - 0xc5, 0x69, 0x3b, 0x61, 0xb3, 0xc5, 0x64, 0x6a, 0x30, 0x88, 0x76, 0x17, 0x88, 0x00, 0x09, 0x29, - 0x1c, 0x5e, 0x10, 0x41, 0xed, 0xab, 0x81, 0xeb, 0x96, 0x5c, 0x9f, 0x95, 0xf4, 0x56, 0xb5, 0x85, - 0x5e, 0x8a, 0xf9, 0x65, 0x67, 0xbe, 0xb3, 0xde, 0x55, 0x74, 0x2d, 0x5c, 0xaa, 0xe8, 0x3a, 0x5c, - 0x96, 0x19, 0x65, 0x00, 0x7d, 0x87, 0x4e, 0x96, 0xb2, 0x80, 0x56, 0x41, 0x1b, 0xc8, 0xf7, 0x80, - 0xfc, 0x5a, 0xcf, 0x1a, 0x1f, 0x62, 0xd9, 0x76, 0x29, 0x6f, 0xe8, 0xfe, 0x27, 0x70, 0xf9, 0xe5, - 0xe2, 0xe5, 0xea, 0x68, 0x2f, 0xc3, 0x02, 0x42, 0x12, 0x64, 0x95, 0x5b, 0x27, 0x00, 0x06, 0x83, - 0xa7, 0xc0, 0xb0, 0x31, 0xd0, 0xa1, 0x30, 0x83, 0x59, 0x34, 0x3e, 0xd4, 0xe7, 0x31, 0x01, 0x92, - 0x95, 0x6f, 0xcf, 0x84, 0xce, 0x84, 0xb5, 0xd4, 0xc4, 0x18, 0x5d, 0xc0, 0x35, 0xb1, 0xcf, 0x51, - 0x9b, 0x95, 0x37, 0x3f, 0x33, 0x0a, 0x6e, 0x39, 0x85, 0x37, 0x3f, 0xd7, 0x12, 0x08, 0x47, 0x4b, - 0xa1, 0xa3, 0xf3, 0xde, 0xca, 0x31, 0x8a, 0x62, 0xe6, 0xcf, 0x15, 0xdd, 0xf7, 0x6f, 0x11, 0x1f, - 0xab, 0x1b, 0x27, 0x28, 0x62, 0x94, 0xf4, 0xce, 0x25, 0xf8, 0x21, 0x05, 0x24, 0xac, 0x7b, 0xe0, - 0xef, 0xcb, 0xd9, 0xcf, 0x72, 0x66, 0xdb, 0xa1, 0xbf, 0x08, 0x46, 0x08, 0x3e, 0xc4, 0x65, 0xe2, - 0xe1, 0xd8, 0xd4, 0x94, 0x00, 0x08, 0xfa, 0x5f, 0x6a, 0xaa, 0xab, 0x3e, 0x22, 0x14, 0x21, 0xc3, - 0x4b, 0x2f, 0x3e, 0x71, 0x46, 0x2b, 0x13, 0xa1, 0x7a, 0xa8, 0x8f, 0x28, 0xfe, 0x93, 0xb8, 0xde, - 0x18, 0x05, 0x05, 0x0b, 0x33, 0x52, 0xdb, 0x80, 0x39, 0x15, 0x45, 0xe2, 0xe1, 0x70, 0x35, 0x75, - 0x48, 0xf7, 0xcc, 0xb1, 0x20, 0x80, 0x58, 0xd7, 0x72, 0x2b, 0x73, 0x38, 0xdf, 0x67, 0xeb, 0x94, - 0x4f, 0x04, 0x14, 0x65, 0xa6, 0x7b, 0x3d, 0xfa, 0xd5, 0x22, 0xf2, 0x69, 0x37, 0xbe, 0x08, 0xee, - 0xff, 0x7c, 0x97, 0x7f, 0xcf, 0x8a, 0xcc, 0xd5, 0x6e, 0x3f, 0xf5, 0xaf, 0xa2, 0x57, 0xcd, 0xab, - 0xd7, 0x13, 0x3e, 0x35, 0xea, 0xab, 0xbe, 0x92, 0x5e, 0xe7, 0xc6, 0xbf, 0x25, 0xdf, 0xf3, 0xd5, - 0x34, 0xdb, 0x6f, 0xfd, 0xda, 0xb5, 0xc2, 0x22, 0x43, 0x17, 0x69, 0x45, 0xcd, 0x95, 0x0a, 0x36, - 0x87, 0xc1, 0x08, 0x90, 0xa0, 0x61, 0x65, 0x4c, 0x9c, 0x73, 0x7b, 0x6e, 0x7f, 0xc1, 0x00, 0x52, - 0x6a, 0x0a, 0x30, 0x7f, 0x88, 0xc5, 0x00, 0x3b, 0x9a, 0xce, 0x6c, 0x1f, 0xe0, 0x6b, 0xf2, 0x6f, - 0x1e, 0x4b, 0xdc, 0x41, 0x92, 0xcc, 0x5f, 0x0f, 0x08, 0x85, 0x21, 0xd0, 0x14, 0x67, 0xe6, 0x42, - 0x0d, 0x64, 0xa5, 0x12, 0xe1, 0xe3, 0x1d, 0xd1, 0xba, 0xcb, 0x59, 0x78, 0x93, 0x87, 0xf1, 0xb0, - 0xd9, 0x0a, 0x00, 0x1c, 0x58, 0x89, 0xa0, 0xf2, 0xca, 0x28, 0x79, 0x78, 0x9a, 0x71, 0xa6, 0xf6, - 0x2b, 0x74, 0xc5, 0x6d, 0xe5, 0xb1, 0x5b, 0x8a, 0x37, 0x1b, 0x11, 0x7e, 0xb5, 0xbd, 0xf0, 0x88, - 0x10, 0x01, 0x48, 0xa0, 0xf9, 0xaa, 0xf4, 0x33, 0xc7, 0xe7, 0x0f, 0x12, 0x3c, 0x28, 0xc2, 0x37, - 0xe1, 0x98, 0x27, 0xaa, 0x60, 0x2a, 0x77, 0xd8, 0x92, 0xd3, 0x64, 0x73, 0x9e, 0x4c, 0x6f, 0x2f, - 0x0c, 0xb8, 0x03, 0xf8, 0x69, 0x38, 0x06, 0x89, 0x2e, 0xfc, 0x52, 0x2e, 0xa2, 0xe4, 0xae, 0x33, - 0xe0, 0x95, 0xc2, 0xfc, 0x09, 0xf3, 0xfc, 0x4f, 0x9f, 0xe5, 0x8e, 0xcb, 0x6e, 0x89, 0x5c, 0x18, - 0x00, 0x90, 0x1a, 0x41, 0x79, 0x28, 0x88, 0x01, 0x51, 0xe0, 0xe3, 0x19, 0x2c, 0x40, 0x3c, 0x0e, - 0x30, 0x03, 0x52, 0x7a, 0x87, 0x52, 0x55, 0x6a, 0xdd, 0x25, 0x15, 0x88, 0xf0, 0x03, 0xce, 0x00, - 0x3c, 0x9c, 0x0d, 0x0e, 0x0f, 0x18, 0x30, 0x64, 0x17, 0xde, 0xef, 0x0f, 0x10, 0x80, 0x13, 0x17, - 0xcb, 0xa0, 0xc2, 0xa0, 0x9c, 0x4c, 0x38, 0x2f, 0x2d, 0x88, 0xf1, 0x74, 0xce, 0xf8, 0xed, 0x9c, - 0x7f, 0xe6, 0x62, 0xf3, 0x4b, 0xf5, 0xf0, 0xdb, 0x81, 0x76, 0xc7, 0x94, 0xc3, 0x6e, 0x35, 0x0c, - 0x73, 0x83, 0x70, 0x7f, 0x33, 0xb0, 0x3b, 0x0c, 0xec, 0x22, 0xb0, 0xa9, 0xa1, 0x66, 0x3a, 0x2e, - 0x84, 0x0a, 0xc4, 0x47, 0x61, 0xb1, 0x27, 0x68, 0xaf, 0xff, 0x12, 0x11, 0x09, 0x89, 0x78, 0x15, - 0xdb, 0xb7, 0x5a, 0xc3, 0x4a, 0x00, 0xc4, 0x3d, 0x0e, 0xa7, 0xfb, 0x7f, 0x6f, 0xdb, 0x7c, 0xab, - 0x38, 0x80, 0x40, 0x0a, 0x8a, 0xb3, 0x51, 0x4c, 0x53, 0x51, 0x71, 0x0b, 0x16, 0xe2, 0xba, 0xe2, - 0x42, 0x23, 0xed, 0x25, 0xf0, 0x83, 0xc9, 0x9c, 0x1d, 0xa2, 0x2c, 0xe3, 0x06, 0xf7, 0xf0, 0x99, - 0x35, 0x55, 0xaa, 0xf8, 0x23, 0xab, 0x4d, 0x5f, 0xe6, 0xdd, 0x37, 0xc2, 0x01, 0x90, 0x59, 0x1d, - 0x52, 0xdc, 0xbd, 0x44, 0xbf, 0x36, 0x4a, 0x56, 0x71, 0x01, 0x91, 0x3e, 0x7b, 0xc6, 0x19, 0x4e, - 0x10, 0x8c, 0xa7, 0x81, 0x68, 0xe4, 0x20, 0xa8, 0x8c, 0x83, 0x80, 0xb3, 0x3d, 0x13, 0x09, 0x41, - 0x08, 0x68, 0x0c, 0x39, 0x89, 0x0e, 0xa1, 0x0e, 0x40, 0xc4, 0x45, 0x10, 0xae, 0xcc, 0x60, 0xc7, - 0xf0, 0xa0, 0x84, 0xc3, 0xc7, 0x8c, 0x0f, 0x0c, 0x2c, 0xc8, 0x44, 0x1f, 0xe7, 0x7c, 0x0f, 0x02, - 0x71, 0x1c, 0x41, 0x7b, 0x8b, 0x25, 0x86, 0xbb, 0xea, 0x5e, 0x3b, 0x19, 0x0e, 0x18, 0x08, 0x17, - 0x2d, 0xb9, 0x63, 0x0a, 0xb8, 0x03, 0x18, 0x94, 0x2d, 0xf3, 0x87, 0x86, 0x02, 0xbf, 0x04, 0x61, - 0x5c, 0x56, 0x2b, 0x47, 0x0f, 0xd8, 0xd9, 0x20, 0x48, 0x6f, 0x82, 0xb0, 0x48, 0xac, 0x8d, 0x1d, - 0xa7, 0x52, 0x46, 0x86, 0xc8, 0x8c, 0xb8, 0xf1, 0x19, 0x75, 0xaa, 0xb7, 0x47, 0xe1, 0x8b, 0x7b, - 0x6d, 0xc7, 0xec, 0xf9, 0x51, 0xd9, 0x8c, 0xf7, 0x88, 0xe8, 0x27, 0x5f, 0x09, 0x91, 0xed, 0x34, - 0x92, 0x49, 0x25, 0xe0, 0xb6, 0x81, 0xa0, 0x6d, 0x34, 0x92, 0x49, 0x25, 0xe3, 0xea, 0xc5, 0x74, - 0x4a, 0xbe, 0x30, 0x5b, 0xba, 0xaa, 0xab, 0xbe, 0xef, 0xbb, 0xfa, 0x23, 0x3c, 0x41, 0x24, 0xa1, - 0x29, 0xae, 0x8c, 0x44, 0x54, 0xba, 0x2b, 0xd0, 0x6d, 0x10, 0x00, 0x44, 0x7a, 0x54, 0xb3, 0x0b, - 0xbf, 0xef, 0xf7, 0xbd, 0xf2, 0x70, 0x81, 0x11, 0x86, 0x85, 0x1b, 0xb4, 0x1b, 0x5c, 0x0d, 0xae, - 0x1c, 0x29, 0xe7, 0xe7, 0xe3, 0xaf, 0xf0, 0xc0, 0x50, 0x86, 0xb3, 0x81, 0xe2, 0x80, 0xd3, 0x8c, - 0x87, 0x8e, 0x6f, 0xd8, 0x91, 0xc7, 0x73, 0x37, 0x65, 0xe5, 0xe2, 0xea, 0xbe, 0xc7, 0x38, 0x2e, - 0xa8, 0x91, 0xf1, 0xc1, 0x08, 0x40, 0x29, 0x3e, 0x56, 0xc3, 0x97, 0x97, 0xa4, 0x92, 0x72, 0xf7, - 0x4a, 0x2b, 0x12, 0xc1, 0xf0, 0xd4, 0xa0, 0x50, 0x41, 0x4a, 0x74, 0x16, 0x33, 0xf3, 0x9f, 0xcb, - 0x46, 0xd7, 0xc5, 0x71, 0x47, 0x3b, 0x88, 0x8c, 0x10, 0x4e, 0x2a, 0x7b, 0x37, 0x63, 0x09, 0x05, - 0x01, 0xfe, 0xec, 0xd2, 0xdb, 0x79, 0xef, 0x75, 0xd7, 0x11, 0x62, 0x56, 0xbc, 0x31, 0xc3, 0x4e, - 0x00, 0x29, 0x3c, 0x98, 0x02, 0x4e, 0x53, 0x8e, 0x25, 0x95, 0x51, 0x58, 0xad, 0xc5, 0x7a, 0x71, - 0x5b, 0xbf, 0xb0, 0xd1, 0x20, 0x0e, 0xe5, 0xa1, 0x3a, 0xb1, 0x8c, 0xe2, 0xb5, 0x75, 0x8e, 0x34, - 0xd3, 0x7e, 0xaa, 0xab, 0x46, 0x3c, 0x22, 0x19, 0x0a, 0x18, 0x98, 0x32, 0x1d, 0x31, 0x2c, 0x32, - 0xc3, 0x26, 0x55, 0xfb, 0x97, 0x44, 0x86, 0x85, 0x81, 0xb3, 0x0b, 0x33, 0x66, 0xa1, 0x77, 0xe2, - 0x02, 0x03, 0x2c, 0x60, 0x9e, 0xb9, 0x2d, 0x4f, 0xe4, 0x97, 0xb3, 0x96, 0xd3, 0x73, 0xd0, 0xb6, - 0x58, 0xc5, 0x1e, 0x20, 0x48, 0x26, 0x2b, 0x05, 0x27, 0xb9, 0x22, 0xfe, 0xc7, 0x12, 0x01, 0x13, - 0xed, 0x2f, 0x9f, 0x4b, 0x82, 0x01, 0x21, 0x42, 0x8f, 0x35, 0xf1, 0xd6, 0x5e, 0x2e, 0x7e, 0x5b, - 0xb8, 0x55, 0xa4, 0x9e, 0xe4, 0xd7, 0x86, 0x01, 0x46, 0xee, 0x21, 0xc7, 0xe9, 0x45, 0xe1, 0x10, - 0x56, 0x6b, 0xcb, 0xcb, 0xdb, 0xdb, 0x9e, 0xab, 0x5e, 0x19, 0x04, 0x42, 0x5a, 0xac, 0xe8, 0x77, - 0xe1, 0x12, 0x2c, 0x8a, 0x29, 0x9d, 0x45, 0xfb, 0x87, 0x05, 0x4c, 0x23, 0x10, 0x47, 0x6f, 0x79, - 0x77, 0x89, 0x85, 0x3e, 0x66, 0x2e, 0x27, 0x8e, 0xc7, 0x5f, 0xce, 0xfa, 0x32, 0x9b, 0xef, 0xdc, - 0x10, 0xc2, 0x82, 0x40, 0xd6, 0xa4, 0xba, 0x06, 0xd0, 0x87, 0x04, 0x38, 0x3b, 0xe1, 0x6a, 0x43, - 0x11, 0xa2, 0x51, 0x33, 0xbb, 0x19, 0x72, 0x75, 0x61, 0xd5, 0x01, 0xd5, 0x61, 0xb7, 0xd5, 0xab, - 0xf4, 0xe9, 0xff, 0x8d, 0x05, 0x11, 0x6d, 0xb7, 0xf8, 0x66, 0x14, 0x19, 0x2d, 0x54, 0x2e, 0x5e, - 0x35, 0x8f, 0x8f, 0x07, 0x9a, 0xc8, 0x3c, 0xe5, 0x33, 0x8a, 0x0a, 0xaa, 0x2f, 0x28, 0x09, 0x70, - 0x56, 0x5b, 0x84, 0x42, 0x00, 0xae, 0x7b, 0xfc, 0xb4, 0x2d, 0xda, 0x03, 0xc1, 0x55, 0x3e, 0x89, - 0x8e, 0x4f, 0x01, 0x81, 0xc3, 0x8d, 0xa7, 0xcb, 0x8d, 0xef, 0xb8, 0xd2, 0xb0, 0xcc, 0xa1, 0x17, - 0xa5, 0x3b, 0x9b, 0xf3, 0x0e, 0x4d, 0x24, 0x8b, 0x9e, 0x24, 0x8d, 0x4f, 0xee, 0x8a, 0x2f, 0xe1, - 0xd3, 0xbb, 0xe6, 0x8a, 0xe2, 0xd0, 0xce, 0xc3, 0x47, 0xcd, 0x5c, 0xe9, 0x51, 0x42, 0xff, 0x0b, - 0xc7, 0x28, 0xd6, 0x1c, 0xcc, 0x53, 0xea, 0x6f, 0xc5, 0x18, 0xed, 0x94, 0xff, 0x82, 0x02, 0x6c, - 0x71, 0x9b, 0x71, 0xb3, 0x84, 0x56, 0xa8, 0x2a, 0x08, 0x51, 0xc3, 0x97, 0x7f, 0xf8, 0x9a, 0x5a, - 0xd1, 0x31, 0xaf, 0x7b, 0xfb, 0xbf, 0x98, 0x26, 0xee, 0xaa, 0xba, 0x11, 0x07, 0xcf, 0x16, 0xb7, - 0x1a, 0x96, 0xc3, 0x3f, 0xe8, 0xdf, 0x3e, 0x7f, 0x5a, 0x15, 0x48, 0x24, 0x17, 0xbe, 0x63, 0xe9, - 0x25, 0xef, 0x5a, 0xae, 0xa9, 0xd2, 0xea, 0xe7, 0xc1, 0x1d, 0xf5, 0x73, 0xea, 0xe5, 0xf4, 0x77, - 0x3e, 0x08, 0xee, 0xfb, 0x9f, 0x05, 0xb4, 0xaf, 0x5d, 0xac, 0xb8, 0x88, 0x27, 0x35, 0x55, 0x54, - 0x4d, 0x91, 0xae, 0x8c, 0x1e, 0x60, 0x8d, 0xc4, 0x06, 0x02, 0x86, 0x10, 0xf1, 0x20, 0x38, 0x48, - 0x0e, 0x17, 0xa9, 0xfb, 0xa1, 0xa9, 0xe0, 0xfc, 0xb7, 0x53, 0x62, 0x97, 0xbb, 0xc3, 0x23, 0x3b, - 0xa4, 0xdd, 0x4d, 0x85, 0xc8, 0x7e, 0x6e, 0xfd, 0x78, 0x90, 0x4d, 0x8a, 0xf6, 0xab, 0xee, 0x11, - 0x08, 0x04, 0xb6, 0xd5, 0x74, 0xdf, 0x86, 0x42, 0x91, 0x23, 0x82, 0xbc, 0x79, 0x59, 0x9b, 0xb3, - 0xb5, 0x0b, 0x1a, 0xcf, 0x49, 0x84, 0x62, 0x0f, 0xf2, 0xc9, 0xc1, 0x80, 0x7d, 0xe1, 0x96, 0x48, - 0xdf, 0xfe, 0x24, 0x20, 0x61, 0x2a, 0x2e, 0xa2, 0x39, 0x86, 0x44, 0x8f, 0x8a, 0xdf, 0x67, 0x55, - 0xa8, 0xdd, 0x0b, 0xf0, 0xc0, 0x80, 0x56, 0x43, 0xe3, 0x19, 0x66, 0x20, 0x84, 0x01, 0x10, 0x01, - 0x0c, 0x05, 0x01, 0x6c, 0x13, 0x04, 0x60, 0xf1, 0xd1, 0x9e, 0x17, 0xd7, 0x08, 0x42, 0x96, 0x71, - 0x2f, 0x3f, 0xa9, 0x3e, 0x5b, 0xa0, 0xcf, 0x9e, 0x6c, 0x35, 0x27, 0xb0, 0xbb, 0x84, 0xf0, 0xad, - 0x43, 0xd7, 0x9b, 0x6d, 0xe7, 0x7f, 0xe5, 0xf2, 0xcd, 0xc3, 0x21, 0x90, 0xa1, 0xc2, 0xcb, 0x39, - 0x25, 0x15, 0x7b, 0x01, 0xd8, 0xd1, 0x13, 0x35, 0xd9, 0x60, 0xcf, 0x1e, 0x7e, 0x5b, 0x2d, 0x8a, - 0xdd, 0xd2, 0xac, 0x33, 0x05, 0x54, 0xa8, 0x84, 0xa2, 0xb9, 0x61, 0xe6, 0xc8, 0xbb, 0xb8, 0x44, - 0x33, 0xe2, 0x01, 0x5d, 0xc6, 0xd0, 0x37, 0x06, 0x7f, 0x5d, 0xb4, 0xc0, 0xed, 0xd1, 0xd6, 0xd3, - 0xb0, 0xd1, 0x0c, 0x00, 0x9f, 0xac, 0x4d, 0x2b, 0xe4, 0xdf, 0xd3, 0x4f, 0xae, 0xa9, 0xa7, 0x8e, - 0xde, 0x24, 0x74, 0xb6, 0xd0, 0x84, 0xc6, 0x55, 0x4d, 0x93, 0x5a, 0x8f, 0xe9, 0x38, 0x91, 0x20, - 0x84, 0x5e, 0x6c, 0x5f, 0xf8, 0x80, 0xa0, 0xa8, 0x8e, 0x5f, 0x25, 0xfa, 0x33, 0xc3, 0x77, 0x69, - 0x35, 0x58, 0xd2, 0xcd, 0x52, 0xcb, 0xe3, 0x38, 0xd6, 0x19, 0xea, 0xcc, 0xc2, 0xf9, 0xb2, 0x63, - 0x74, 0xad, 0xfc, 0x40, 0x60, 0x28, 0x7b, 0xdc, 0x6f, 0x34, 0xde, 0xad, 0x63, 0x27, 0xb2, 0xf1, - 0x75, 0x17, 0xec, 0x36, 0xc4, 0x80, 0xba, 0x25, 0xe9, 0xfb, 0xf1, 0xdb, 0x84, 0xcd, 0xc5, 0xb7, - 0x09, 0x9b, 0x94, 0x54, 0x4b, 0x6e, 0x13, 0x37, 0x16, 0xdc, 0x26, 0x6e, 0x1e, 0xbd, 0xff, 0x0b, - 0xcc, 0x27, 0x0e, 0x62, 0x42, 0xbd, 0x7e, 0xeb, 0xe9, 0x7e, 0x4e, 0xd1, 0x92, 0x6a, 0x34, 0xc7, - 0x71, 0xca, 0x00, 0xce, 0xa7, 0x4c, 0x1f, 0x44, 0x62, 0xb1, 0x30, 0xa0, 0xa2, 0xf3, 0xf4, 0x53, - 0xb4, 0x1a, 0xab, 0x05, 0x06, 0x06, 0x81, 0x35, 0xf1, 0xf1, 0x1c, 0x3b, 0xce, 0x41, 0xd9, 0x87, - 0x28, 0x8f, 0xcb, 0x88, 0x08, 0x05, 0x09, 0xd4, 0xa4, 0xef, 0x80, 0xb9, 0xb2, 0x26, 0x61, 0x7c, - 0x8b, 0xa8, 0xae, 0x21, 0x6c, 0x1e, 0x3c, 0x1a, 0xac, 0x78, 0xbe, 0x25, 0xef, 0x7b, 0xbe, 0x1f, - 0x8e, 0x61, 0x6e, 0x3a, 0xa8, 0xcb, 0x37, 0x51, 0xc7, 0x5a, 0x68, 0x3a, 0x78, 0x69, 0x9a, 0xb1, - 0x7f, 0x87, 0xf6, 0x99, 0x6b, 0xaf, 0x5e, 0x9e, 0x6a, 0x33, 0xdc, 0x35, 0x49, 0x7c, 0xdc, 0x15, - 0x96, 0xae, 0xd5, 0xa6, 0x9a, 0x6e, 0xde, 0x0f, 0x9e, 0xa2, 0xa8, 0x55, 0x7e, 0x27, 0x82, 0x32, - 0xad, 0xfa, 0x9b, 0x9e, 0xa9, 0xa6, 0x53, 0x50, 0x2f, 0xe0, 0x80, 0x6e, 0xb5, 0x29, 0xd4, 0xf0, - 0x79, 0xc3, 0xcf, 0x58, 0xb9, 0xb8, 0xff, 0xa5, 0x01, 0x34, 0x59, 0xef, 0xc2, 0x01, 0x39, 0x86, - 0xe0, 0xdd, 0x2a, 0x23, 0xf8, 0x71, 0xff, 0x0f, 0x38, 0x12, 0x3c, 0x66, 0x80, 0xe8, 0x6f, 0xef, - 0xed, 0xb7, 0xe2, 0x3c, 0x43, 0xfd, 0x97, 0x86, 0x89, 0x05, 0x07, 0xfb, 0x6f, 0xff, 0x7e, 0x77, - 0x88, 0x04, 0x55, 0x51, 0x4c, 0x47, 0xd7, 0xcd, 0xaa, 0xaf, 0x06, 0x01, 0x4e, 0xb2, 0x6d, 0x72, - 0x0e, 0x4f, 0x88, 0xe2, 0x41, 0x84, 0x33, 0x6b, 0xcd, 0xdd, 0x8d, 0xec, 0x51, 0x02, 0x9f, 0xe3, - 0x88, 0x17, 0x06, 0x85, 0xb3, 0xc1, 0x89, 0x7a, 0x9b, 0xf6, 0xb7, 0x3c, 0xe0, 0xbe, 0x20, 0x22, - 0x3c, 0x49, 0x3a, 0xac, 0x5f, 0xde, 0x32, 0x99, 0x6d, 0x7c, 0x16, 0x75, 0x27, 0xea, 0xda, 0xee, - 0x5c, 0xba, 0xe1, 0x11, 0x01, 0x02, 0x17, 0xd8, 0xdd, 0xdc, 0x79, 0xd0, 0xec, 0x3f, 0xda, 0x5e, - 0x0b, 0x2e, 0xed, 0x49, 0x8a, 0x91, 0xe5, 0x39, 0x6c, 0x54, 0x6b, 0x9f, 0xe0, 0xab, 0x56, 0xd4, - 0xb3, 0x17, 0x52, 0x77, 0xb7, 0x7e, 0xe0, 0xa0, 0x20, 0x09, 0x2b, 0xb7, 0xdc, 0x30, 0x20, 0x16, - 0x55, 0x6a, 0x96, 0x96, 0x5c, 0xbf, 0x12, 0x20, 0x17, 0x09, 0xd5, 0x63, 0xc9, 0x1d, 0x18, 0xaf, - 0x05, 0x82, 0xb9, 0x14, 0x19, 0x46, 0xb4, 0xa5, 0xcc, 0x57, 0xb8, 0x44, 0x48, 0x25, 0xbb, 0x57, - 0x31, 0x05, 0x6b, 0xd8, 0x5e, 0x70, 0xcf, 0x32, 0x92, 0x2d, 0xc3, 0x3d, 0xfe, 0x78, 0x44, 0xb0, - 0x57, 0xf5, 0xf0, 0x58, 0x5a, 0x74, 0xdc, 0xb8, 0xef, 0xce, 0x5f, 0xdf, 0x04, 0x23, 0xa5, 0xf7, - 0xee, 0x26, 0x14, 0x16, 0x31, 0x52, 0x8a, 0xa3, 0x5f, 0xeb, 0x38, 0x80, 0x9c, 0xb0, 0x5b, 0xa9, - 0x79, 0x19, 0x83, 0xb0, 0x83, 0x41, 0xbe, 0xb1, 0xe5, 0xf0, 0x54, 0x5b, 0x0e, 0xb2, 0x08, 0x48, - 0x25, 0xbd, 0xb7, 0x2b, 0x28, 0x52, 0xa6, 0xfd, 0x84, 0xe5, 0x00, 0x9b, 0xb3, 0xce, 0xbf, 0xe9, - 0xfc, 0x2a, 0x2f, 0x4c, 0x91, 0xa2, 0x86, 0xd8, 0x80, 0x21, 0x64, 0xdf, 0x49, 0x37, 0xa4, 0x57, - 0xd1, 0x5b, 0x67, 0xfe, 0x4f, 0x6d, 0xc7, 0xcb, 0xed, 0xe9, 0xf0, 0x50, 0x18, 0x05, 0x11, 0x85, - 0xcb, 0x6e, 0x96, 0xdb, 0x61, 0xa5, 0x00, 0x2d, 0xca, 0x28, 0x33, 0x10, 0x2f, 0x5e, 0xfa, 0x74, - 0xeb, 0x5a, 0xd5, 0xf8, 0x66, 0x34, 0x42, 0x99, 0x81, 0x4c, 0xb3, 0xc1, 0x58, 0xd0, 0x0c, 0xcf, - 0x57, 0x62, 0x98, 0xbc, 0x5c, 0xbc, 0x27, 0xaa, 0xc1, 0x3c, 0x3f, 0x18, 0xa6, 0x10, 0xbf, 0x5f, - 0xf0, 0x88, 0x40, 0x69, 0x0f, 0x00, 0x71, 0xb0, 0x25, 0xb3, 0x26, 0x1c, 0x81, 0xaa, 0xa8, 0xb5, - 0x0f, 0xb0, 0xee, 0x72, 0xa6, 0x82, 0x9c, 0x9c, 0xb1, 0xc6, 0x2b, 0x06, 0x02, 0x89, 0x1e, 0xf8, - 0x3d, 0x76, 0x6c, 0x4b, 0xfe, 0x0b, 0xca, 0x9e, 0x5f, 0xa4, 0xb9, 0xed, 0x35, 0x12, 0x7e, 0xb8, - 0x4f, 0xa4, 0x93, 0x5b, 0xf8, 0x47, 0xcb, 0x9b, 0x4d, 0x3c, 0x6f, 0xf2, 0xf6, 0x9a, 0x5c, 0x20, - 0x56, 0xd3, 0x6d, 0x34, 0xf4, 0xed, 0x5a, 0x27, 0x2c, 0xf9, 0xcb, 0xdf, 0x6d, 0xbf, 0x27, 0x4d, - 0xb5, 0xcb, 0x6a, 0xbf, 0x0a, 0x16, 0x95, 0x24, 0x9d, 0xdb, 0xb5, 0x6a, 0xd5, 0x5b, 0xe0, 0x8f, - 0x93, 0x6d, 0xf5, 0x7a, 0xe0, 0x8f, 0xb6, 0xaf, 0xf0, 0x49, 0x5d, 0x27, 0xf8, 0x7b, 0x4a, 0xd3, - 0xb7, 0x54, 0xd5, 0x38, 0x77, 0x1b, 0xa6, 0x5f, 0xf0, 0xdb, 0x80, 0x8c, 0xcc, 0xbc, 0x2a, 0xff, - 0xd3, 0x7c, 0xd0, 0x07, 0x5c, 0x0d, 0x01, 0xd7, 0x0a, 0xc5, 0xdd, 0x01, 0xd7, 0x07, 0x40, 0x75, - 0xc0, 0x24, 0xc6, 0x50, 0x96, 0x80, 0x41, 0x71, 0xc1, 0x6c, 0x3b, 0x9e, 0x0e, 0x60, 0xdc, 0xdd, - 0x61, 0x79, 0x00, 0x85, 0xd6, 0x3f, 0x56, 0xbb, 0x7f, 0xbd, 0xa7, 0xb6, 0x7e, 0x28, 0x0b, 0x85, - 0xdc, 0x05, 0xd9, 0xd6, 0x75, 0xdb, 0xfd, 0x6b, 0xb7, 0x1b, 0xfe, 0x10, 0x7d, 0xb5, 0xc4, 0x89, - 0x04, 0x37, 0x7f, 0xfe, 0x19, 0x1f, 0xac, 0xb8, 0xc5, 0x27, 0x20, 0x00, 0x1e, 0xd4, 0xa6, 0xdf, - 0xc2, 0x66, 0x3b, 0xff, 0x17, 0x4f, 0xc2, 0x82, 0xdd, 0x27, 0x77, 0x90, 0xcc, 0x89, 0xc1, 0xde, - 0x56, 0x2d, 0x97, 0x1b, 0x9d, 0xc4, 0x84, 0x42, 0x04, 0xaa, 0xd3, 0x10, 0xc1, 0xac, 0x59, 0xd4, - 0x21, 0x62, 0x4e, 0x60, 0x84, 0x22, 0x14, 0xd5, 0x05, 0x50, 0xf4, 0x65, 0x8e, 0x27, 0x1b, 0x40, - 0x88, 0xea, 0x32, 0xf3, 0xf8, 0x79, 0x61, 0x18, 0x07, 0x48, 0xe0, 0x30, 0xff, 0xc2, 0x96, 0xf2, - 0xde, 0xd3, 0x52, 0x5d, 0x97, 0x88, 0xe1, 0xc6, 0x84, 0x87, 0x07, 0x98, 0x17, 0xe5, 0xe2, 0x9d, - 0xfc, 0x40, 0x52, 0xfa, 0x9a, 0x7a, 0xa4, 0x2e, 0x2e, 0x2e, 0xa2, 0x99, 0x54, 0x2d, 0x06, 0xfc, - 0x48, 0x44, 0x15, 0x4d, 0xc4, 0x1a, 0x1f, 0xc2, 0x6a, 0x10, 0x99, 0x07, 0x97, 0x71, 0x0f, 0x14, - 0x7a, 0x3b, 0xc4, 0x89, 0x05, 0x25, 0x32, 0x4e, 0xef, 0x43, 0x96, 0xf8, 0xff, 0xc4, 0x06, 0x06, - 0x5c, 0x4b, 0x8f, 0x6e, 0x9d, 0x5a, 0xd6, 0x54, 0x49, 0x43, 0xc4, 0x04, 0x01, 0x61, 0x96, 0xb6, - 0xd7, 0x56, 0xfe, 0xe2, 0x04, 0x02, 0x72, 0xb5, 0x9e, 0x0d, 0xad, 0x5f, 0xdc, 0x40, 0x91, 0x33, - 0xfd, 0xac, 0x2e, 0x8d, 0xb5, 0xf1, 0x85, 0xe5, 0xe6, 0xad, 0x58, 0x9e, 0x4b, 0xe5, 0xe2, 0x99, - 0x79, 0xd1, 0x01, 0x65, 0xf8, 0x81, 0x9a, 0xba, 0xaf, 0x84, 0x22, 0x45, 0xd2, 0x63, 0x23, 0x2a, - 0xd8, 0xf2, 0xe3, 0xc5, 0x32, 0x84, 0xa1, 0x2a, 0xcc, 0x40, 0x90, 0xa5, 0xb5, 0x66, 0x35, 0x90, - 0xb8, 0xbb, 0x75, 0x65, 0x42, 0x05, 0x45, 0x66, 0xde, 0xbd, 0xa3, 0x67, 0xfc, 0x40, 0x29, 0xa1, - 0xda, 0xc7, 0x6d, 0x35, 0x9e, 0x70, 0x5e, 0x95, 0x43, 0x44, 0x20, 0x03, 0x33, 0x6f, 0x26, 0xce, - 0xea, 0x3c, 0x78, 0xc7, 0xd3, 0xb7, 0x37, 0x41, 0x93, 0x67, 0x23, 0xbc, 0x10, 0x06, 0x02, 0x19, - 0xf3, 0x25, 0x1a, 0x8e, 0x6d, 0xaa, 0xe2, 0x01, 0x88, 0x52, 0x1e, 0x62, 0x90, 0xf5, 0x28, 0xb6, - 0x41, 0xd8, 0x35, 0x3f, 0x8f, 0x10, 0x11, 0x5c, 0x51, 0xb4, 0x45, 0x0b, 0x07, 0x83, 0x28, 0x90, - 0x99, 0x16, 0x8e, 0x26, 0x14, 0x10, 0xe4, 0x99, 0x78, 0xb8, 0x81, 0xe4, 0xa0, 0x03, 0x55, 0x44, - 0xc0, 0xa9, 0x61, 0x8a, 0x67, 0x1c, 0x2c, 0xc5, 0xe3, 0x13, 0xa3, 0x39, 0x8b, 0x84, 0x04, 0x0d, - 0xe4, 0xc4, 0x23, 0xd5, 0xc5, 0xd4, 0x98, 0x28, 0x80, 0x6a, 0x3f, 0x91, 0x94, 0x00, 0xe8, 0x64, - 0x43, 0x40, 0xcc, 0xf8, 0x62, 0x02, 0x04, 0xe8, 0x3a, 0x2f, 0x83, 0x9e, 0x81, 0x73, 0xde, 0xb8, - 0xb2, 0xb1, 0xae, 0xd3, 0x4d, 0x34, 0x6e, 0x11, 0x2d, 0xaa, 0xb6, 0x9f, 0xaa, 0xf8, 0x30, 0xb6, - 0xdd, 0x49, 0xcd, 0x9e, 0xa4, 0xe9, 0x9b, 0xbb, 0xff, 0x82, 0x6e, 0x76, 0xe6, 0x4d, 0x7a, 0x93, - 0x9c, 0x8b, 0xed, 0xb6, 0x9a, 0x7e, 0x19, 0xb4, 0xd2, 0x49, 0x29, 0x0d, 0x10, 0xd2, 0x71, 0xff, - 0x85, 0x6c, 0xd9, 0xaa, 0x9e, 0x87, 0xa7, 0x52, 0x69, 0x36, 0x38, 0xff, 0xc4, 0x5a, 0xbe, 0x5f, - 0xf8, 0x4e, 0xfb, 0x3d, 0xe9, 0xba, 0x6d, 0x78, 0x5f, 0x7a, 0x77, 0x5a, 0x8c, 0xaa, 0x89, 0x75, - 0xed, 0xb6, 0x9a, 0x7e, 0x4d, 0xb8, 0xaf, 0xc1, 0x05, 0xed, 0x5a, 0x6b, 0xd4, 0x9a, 0xa8, 0x2a, - 0x97, 0xff, 0x82, 0x19, 0xed, 0xd1, 0xf2, 0xf8, 0x7b, 0xa6, 0xda, 0x34, 0x6c, 0xcf, 0x6f, 0x14, - 0x6f, 0xca, 0x92, 0x4d, 0x35, 0xea, 0x10, 0x8d, 0x21, 0xe8, 0x23, 0x8f, 0xc4, 0x14, 0x05, 0x45, - 0x19, 0xe0, 0xe3, 0xc7, 0x95, 0x62, 0x88, 0x7d, 0xb5, 0x8c, 0x25, 0xb0, 0x59, 0x10, 0xd4, 0xab, - 0xea, 0x28, 0xca, 0x56, 0x3f, 0x84, 0x02, 0x87, 0x46, 0x93, 0x5b, 0x59, 0x8b, 0xb4, 0xf2, 0x50, - 0x66, 0x0b, 0x3a, 0x0c, 0x7c, 0x54, 0x2f, 0x6e, 0x7f, 0x2c, 0x86, 0xb1, 0xcf, 0x08, 0x84, 0x46, - 0x68, 0xd6, 0x30, 0x20, 0x24, 0xcd, 0xc9, 0x0e, 0x41, 0x57, 0x51, 0x03, 0xa7, 0x75, 0xbe, 0x1e, - 0xc0, 0x8a, 0x7c, 0x8a, 0x7f, 0x55, 0x3f, 0xfc, 0x5d, 0xff, 0xdb, 0xc4, 0x89, 0x04, 0xfb, 0x49, - 0x72, 0xfb, 0xf8, 0x44, 0x10, 0xdd, 0xdf, 0xfe, 0x26, 0x30, 0xaf, 0x7c, 0xa6, 0x4b, 0x8b, 0xd8, - 0xb6, 0x78, 0x6e, 0xd7, 0xa1, 0x75, 0xf9, 0x71, 0x00, 0xa4, 0x71, 0xe0, 0x40, 0x80, 0xab, 0xab, - 0x66, 0xc0, 0x67, 0x18, 0x2d, 0xe5, 0x99, 0x39, 0x79, 0x7f, 0x78, 0x80, 0x4e, 0x34, 0xaa, 0x0b, - 0x7d, 0x62, 0xfd, 0xc4, 0x04, 0x06, 0x5e, 0xc4, 0xac, 0x19, 0x26, 0x44, 0xda, 0xa2, 0x6e, 0x4a, - 0xa3, 0x2d, 0x96, 0xc4, 0x38, 0x58, 0xe1, 0xa5, 0x03, 0xb4, 0xd1, 0xec, 0x67, 0xfd, 0x32, 0xef, - 0x9b, 0x97, 0xfb, 0x76, 0x61, 0xa5, 0x01, 0xaa, 0xa2, 0xc0, 0x68, 0x1e, 0x61, 0x92, 0xef, 0x4f, - 0xb7, 0xcb, 0x13, 0xf6, 0xec, 0x88, 0xcb, 0x13, 0x0a, 0x44, 0x16, 0x0f, 0xa8, 0x56, 0x73, 0xbe, - 0xf1, 0x96, 0x2d, 0x62, 0x26, 0xe1, 0x6c, 0xb4, 0x39, 0xef, 0xe7, 0x3c, 0x65, 0x3c, 0x48, 0x52, - 0xa3, 0x8f, 0x8d, 0x1d, 0x1d, 0x6d, 0x65, 0xb1, 0x2b, 0x0f, 0xf6, 0x7f, 0x2c, 0x62, 0x8c, 0x7c, - 0x71, 0xe0, 0xa0, 0x14, 0x02, 0xc8, 0xad, 0xb1, 0x5b, 0x62, 0xb1, 0x58, 0xae, 0x7c, 0x77, 0x6e, - 0x62, 0xe2, 0x42, 0x21, 0x4b, 0xb7, 0xe6, 0xd6, 0x8e, 0xca, 0xe4, 0xc8, 0xd6, 0x44, 0x73, 0xb8, - 0x98, 0x2a, 0x23, 0xdf, 0xb4, 0xd2, 0xaa, 0xaf, 0xf8, 0x90, 0x88, 0xb9, 0x14, 0x2c, 0xf1, 0x75, - 0xf0, 0x81, 0x5f, 0x67, 0x23, 0x0a, 0xe5, 0x1a, 0x85, 0x4b, 0x2c, 0x40, 0x91, 0x86, 0x68, 0xff, - 0x14, 0xc9, 0xea, 0xcf, 0xa8, 0xa3, 0x78, 0x9f, 0x3a, 0xc3, 0x3b, 0x79, 0x6e, 0xef, 0x84, 0x42, - 0x03, 0x25, 0xc1, 0xa5, 0xb9, 0x91, 0x07, 0x08, 0xde, 0xa3, 0x6b, 0x2f, 0x46, 0x3f, 0xef, 0x87, - 0x58, 0xd0, 0x0c, 0xe3, 0xb4, 0xc6, 0xd4, 0xa7, 0xff, 0xe5, 0x6f, 0xa6, 0x9f, 0x35, 0xa6, 0x9e, - 0x30, 0x1b, 0x5a, 0xfc, 0x3d, 0x80, 0x46, 0x49, 0x63, 0x1e, 0x57, 0xe9, 0x7c, 0x57, 0x3f, 0x80, - 0xc0, 0x04, 0x60, 0xaf, 0x4d, 0x34, 0xd3, 0x86, 0xdc, 0x1e, 0x13, 0x0e, 0x86, 0xe8, 0x6f, 0x49, - 0xd9, 0x3a, 0x1b, 0xa1, 0xbb, 0x27, 0x64, 0x48, 0xef, 0xde, 0xf8, 0x57, 0x01, 0x90, 0xbf, 0xd0, - 0xc1, 0xbe, 0xb5, 0xfd, 0x55, 0x61, 0x72, 0x08, 0x02, 0x83, 0x71, 0xea, 0x6f, 0xfc, 0xd4, 0xc7, - 0xd2, 0x46, 0xee, 0x24, 0x10, 0x02, 0x99, 0x54, 0xb4, 0x36, 0x81, 0xd9, 0x75, 0x92, 0xa2, 0x02, - 0xdd, 0x27, 0x14, 0x15, 0xf6, 0x17, 0x20, 0x90, 0x14, 0x12, 0x03, 0xe9, 0xf0, 0x56, 0x24, 0xac, - 0x4a, 0x2d, 0x14, 0x57, 0x15, 0xd1, 0x51, 0x41, 0x61, 0x9d, 0x61, 0x81, 0x01, 0x43, 0x0f, 0x21, - 0x65, 0xec, 0x71, 0xf2, 0x34, 0xe4, 0x47, 0x0b, 0xcd, 0xcb, 0xd3, 0x4a, 0xfd, 0xc1, 0x48, 0x90, - 0xa0, 0x8e, 0x75, 0x27, 0x0f, 0x00, 0xf0, 0xf7, 0xa2, 0xa7, 0x40, 0x3b, 0x87, 0x81, 0x72, 0xf1, - 0x75, 0x61, 0x89, 0x1d, 0x5d, 0x23, 0xce, 0x6d, 0x80, 0x2a, 0xf8, 0x7c, 0xb9, 0xe3, 0xdc, 0xb4, - 0x00, 0xf9, 0x2a, 0xa8, 0x40, 0x00, 0x40, 0x0f, 0x8b, 0x40, 0x7e, 0xb4, 0xdf, 0xdb, 0xc2, 0x01, - 0x38, 0xc5, 0x02, 0x58, 0x5f, 0xd9, 0x51, 0x0b, 0x91, 0x9f, 0x7f, 0x9e, 0xbf, 0x4d, 0x34, 0xd3, - 0xf3, 0x6d, 0xd5, 0x73, 0x6d, 0xd2, 0xf5, 0x95, 0xf0, 0x91, 0x33, 0x63, 0x5a, 0x69, 0x2e, 0xfa, - 0x49, 0x3e, 0x26, 0x93, 0xa5, 0x6f, 0x4f, 0xcb, 0xb7, 0x6f, 0xc2, 0x5a, 0x69, 0xd2, 0x97, 0xfc, - 0x27, 0xa7, 0x27, 0x69, 0x27, 0xf9, 0x36, 0xad, 0x78, 0x6b, 0x9f, 0x5a, 0x54, 0xd3, 0xaf, 0xf8, - 0x72, 0xdd, 0x36, 0x97, 0xdb, 0x6d, 0xb6, 0xfc, 0x49, 0x5b, 0x76, 0xf7, 0xa7, 0xe0, 0x88, 0xbb, - 0x6d, 0xbb, 0xe1, 0x3b, 0xd7, 0x74, 0x4d, 0x78, 0x20, 0x32, 0xd9, 0xb3, 0x4b, 0x6c, 0x2f, 0x51, - 0xd0, 0xb0, 0xb0, 0x33, 0xc0, 0x00, 0x87, 0x08, 0x0b, 0xbb, 0x32, 0xec, 0x15, 0x10, 0xc7, 0xf8, - 0x42, 0x36, 0x79, 0x81, 0x63, 0x24, 0x15, 0x7e, 0xad, 0x4f, 0xa6, 0xd6, 0xe4, 0xa0, 0x0c, 0x95, - 0x95, 0x7f, 0x93, 0x86, 0x52, 0xcd, 0x1b, 0xc7, 0xde, 0xc7, 0x1d, 0x48, 0x14, 0x5b, 0xf7, 0xd8, - 0x7f, 0x84, 0x21, 0x42, 0xbd, 0x9a, 0xab, 0x42, 0x39, 0x13, 0x46, 0x3c, 0x46, 0x68, 0xfa, 0xdd, - 0xbf, 0x71, 0x01, 0x00, 0xa1, 0x4c, 0xc7, 0x94, 0x82, 0x21, 0xc9, 0xe3, 0xd8, 0x39, 0xa1, 0xb7, - 0x73, 0xe0, 0x9f, 0x1d, 0xff, 0x05, 0x44, 0x63, 0xdd, 0xdc, 0xa0, 0x80, 0x3a, 0xd7, 0x3f, 0x08, - 0x41, 0x1e, 0xb5, 0x7e, 0x22, 0x08, 0xf7, 0x49, 0xdf, 0xe1, 0x4a, 0x21, 0xa3, 0x0f, 0x93, 0x95, - 0x2f, 0x2f, 0x11, 0x62, 0xf7, 0xab, 0xbf, 0xf8, 0x88, 0x50, 0x41, 0x39, 0x6a, 0xc2, 0x99, 0x47, - 0x9b, 0x5a, 0x5a, 0x37, 0x71, 0x1a, 0x47, 0xcb, 0xf8, 0x88, 0xa3, 0xe9, 0x24, 0xfb, 0xf1, 0x03, - 0xca, 0xd3, 0x8c, 0x21, 0xbd, 0x8b, 0x75, 0x55, 0x3b, 0x18, 0xa2, 0x54, 0x8c, 0x42, 0xea, 0x02, - 0x0f, 0x0d, 0x2a, 0x8a, 0x41, 0x7d, 0xbd, 0xdb, 0x6d, 0xb6, 0xef, 0x7f, 0x4a, 0xb0, 0x50, 0x11, - 0x0a, 0x58, 0x33, 0x10, 0x5e, 0x2a, 0x0f, 0x10, 0xe0, 0xec, 0x99, 0x6e, 0x21, 0xa3, 0x73, 0x1f, - 0x61, 0x79, 0x40, 0x16, 0x3a, 0x78, 0x91, 0x04, 0xca, 0x87, 0xa1, 0xe8, 0x98, 0xd1, 0x0b, 0xa1, - 0x8b, 0xa1, 0x9a, 0x10, 0xb4, 0x48, 0x93, 0xf8, 0x50, 0x87, 0x2c, 0x1e, 0x90, 0x4b, 0x19, 0x3b, - 0xc5, 0x8c, 0x4b, 0xdf, 0x6b, 0xac, 0x3b, 0x54, 0xd0, 0x8b, 0x32, 0xf0, 0xa6, 0xa2, 0xf6, 0xc3, - 0x52, 0x0a, 0xec, 0xbf, 0xfe, 0x68, 0x74, 0xea, 0x8c, 0x7c, 0x48, 0xba, 0xa9, 0x32, 0x73, 0x67, - 0xc1, 0x5d, 0xe4, 0xfe, 0x5e, 0xf7, 0xe5, 0xf8, 0x81, 0x23, 0x29, 0x25, 0x75, 0xbc, 0x56, 0x2b, - 0x69, 0xa9, 0xb0, 0x2e, 0x54, 0xb0, 0x0f, 0x10, 0x24, 0x29, 0x9b, 0x04, 0x9c, 0x2c, 0xc9, 0xca, - 0xa2, 0x0c, 0xb1, 0x31, 0xa8, 0xbf, 0xcc, 0x51, 0x66, 0x24, 0x23, 0x24, 0x0a, 0xb1, 0xd5, 0x5c, - 0xc6, 0x70, 0xc0, 0xf0, 0x18, 0xe2, 0xf9, 0x6e, 0x24, 0x48, 0x52, 0x90, 0x23, 0xed, 0xca, 0x4c, - 0x2c, 0xfb, 0x1d, 0xb5, 0xf9, 0x0c, 0xf3, 0x40, 0xec, 0x25, 0x56, 0x61, 0xfc, 0x76, 0x76, 0x17, - 0x94, 0x02, 0x38, 0xdc, 0x27, 0x90, 0x9d, 0xdd, 0x27, 0xef, 0xe5, 0xa1, 0xa9, 0x66, 0xf7, 0xea, - 0x22, 0x41, 0xbc, 0xf3, 0xe9, 0x1a, 0xc3, 0xa8, 0x48, 0x0c, 0x0f, 0x65, 0x97, 0x7f, 0xfd, 0x6b, - 0x4d, 0x3f, 0xca, 0xaf, 0xa6, 0x9a, 0x69, 0xe2, 0x44, 0x0c, 0x10, 0x6a, 0x2d, 0x22, 0xf5, 0x26, - 0x72, 0x10, 0xd6, 0xdd, 0xc5, 0x70, 0xb9, 0x0e, 0x00, 0xf6, 0x41, 0xc3, 0x54, 0xff, 0xfd, 0xb6, - 0xcc, 0x8f, 0xc4, 0x82, 0x80, 0xa1, 0x12, 0x64, 0x2b, 0x0b, 0x26, 0x41, 0x4a, 0xc6, 0xf4, 0x9d, - 0x6a, 0xb5, 0xbf, 0x2c, 0x4f, 0xff, 0x08, 0x0c, 0x23, 0xbb, 0x57, 0x15, 0xdd, 0x49, 0xc9, 0xd7, - 0x51, 0x1d, 0x93, 0xc2, 0xe4, 0x91, 0x39, 0x6e, 0xb8, 0xf5, 0x23, 0xdd, 0x8f, 0xe4, 0x83, 0xc2, - 0x63, 0xdd, 0x8f, 0xb2, 0x26, 0x19, 0x63, 0x41, 0x34, 0x4e, 0x9f, 0xaf, 0xf5, 0xaf, 0xc4, 0xab, - 0x0b, 0x12, 0x03, 0x4b, 0x5d, 0x65, 0x57, 0xff, 0x55, 0xe2, 0x21, 0x41, 0x4a, 0x2e, 0x66, 0x19, - 0xe3, 0x11, 0x2d, 0x03, 0x7e, 0x16, 0x2b, 0xcf, 0xcd, 0xea, 0x59, 0x93, 0xd4, 0x53, 0x67, 0xe5, - 0xe1, 0x98, 0xd1, 0x5e, 0x06, 0x30, 0x72, 0x2a, 0xc3, 0x69, 0xb0, 0x83, 0xfe, 0x33, 0xe8, 0xe4, - 0x01, 0xb8, 0x3c, 0x3c, 0x2f, 0x92, 0xf5, 0x22, 0x2b, 0x81, 0xe0, 0x00, 0x26, 0xc7, 0x23, 0x12, - 0x07, 0x20, 0x29, 0x7f, 0x87, 0x2f, 0xfe, 0x24, 0x30, 0x71, 0xb5, 0xd8, 0x41, 0xa9, 0xcd, 0x33, - 0xf3, 0xf0, 0x87, 0x44, 0xcd, 0x80, 0xd4, 0xba, 0x7f, 0xcd, 0x4d, 0x24, 0xfe, 0x24, 0x8e, 0x96, - 0xd2, 0x5f, 0x86, 0x29, 0x69, 0x5b, 0x4d, 0xa5, 0xaa, 0xa7, 0xfe, 0x52, 0xe9, 0x11, 0x87, 0xcf, - 0x5f, 0x4d, 0x34, 0xd3, 0xf1, 0x15, 0xda, 0xda, 0x69, 0x70, 0xd5, 0xbd, 0x35, 0xf4, 0xd3, 0x4d, - 0x35, 0xcc, 0x44, 0x8b, 0x9f, 0x82, 0x8d, 0x3b, 0x49, 0x25, 0xbd, 0x70, 0x41, 0x6d, 0x2a, 0x54, - 0xa9, 0x27, 0xb6, 0xad, 0xa9, 0xbf, 0xfe, 0x53, 0xc9, 0x8b, 0x7e, 0x62, 0x55, 0xbf, 0x97, 0x72, - 0xe7, 0xe0, 0xb3, 0x26, 0x52, 0x91, 0xb2, 0x35, 0xf3, 0x97, 0xc9, 0xcf, 0xfe, 0x09, 0x2a, 0x6c, - 0x85, 0xc0, 0x2a, 0xdc, 0x31, 0x1b, 0x0d, 0x96, 0x96, 0x76, 0x83, 0x43, 0x44, 0x38, 0xe0, 0x9c, - 0x05, 0x63, 0x90, 0x65, 0x6f, 0x82, 0xf0, 0x4b, 0x0a, 0x35, 0x21, 0xce, 0xc9, 0xb0, 0x46, 0xf2, - 0xd8, 0x0e, 0x47, 0x84, 0xc4, 0x75, 0x7b, 0x2a, 0x89, 0x00, 0x3d, 0x05, 0x00, 0x47, 0xd8, 0x4e, - 0x3c, 0x2f, 0x47, 0x07, 0x0b, 0xe1, 0xac, 0x30, 0x83, 0x45, 0x87, 0x40, 0xf7, 0xdb, 0x9e, 0x4f, - 0xcf, 0xef, 0xbb, 0xd6, 0xef, 0x5f, 0x90, 0xcf, 0x08, 0x05, 0x0a, 0x36, 0xc7, 0x42, 0xc9, 0xcb, - 0xef, 0x77, 0xa0, 0xd3, 0xaf, 0xb0, 0xf1, 0x20, 0x0a, 0x96, 0xb2, 0x8c, 0xb9, 0xa7, 0x9f, 0xfe, - 0x4e, 0x9b, 0xf2, 0x23, 0xff, 0xbc, 0x2b, 0x38, 0x02, 0x29, 0x78, 0x5b, 0xd7, 0x73, 0x4d, 0x34, - 0xd3, 0x55, 0xff, 0xe3, 0xa2, 0x01, 0x3a, 0xe0, 0x15, 0x36, 0x3e, 0x13, 0x2b, 0x43, 0xca, 0x4c, - 0x77, 0x74, 0x9c, 0xf7, 0x84, 0x01, 0x00, 0x2c, 0xb5, 0x18, 0xf7, 0xb6, 0x4c, 0x9e, 0x8b, 0xfc, - 0x22, 0x19, 0x0a, 0x5d, 0xa6, 0x70, 0xb1, 0x32, 0x29, 0xb0, 0xc0, 0xca, 0xc3, 0x42, 0xc5, 0xd8, - 0xa7, 0x70, 0xd4, 0x38, 0xb0, 0x59, 0x43, 0x11, 0x18, 0x21, 0xbc, 0x56, 0x88, 0xfb, 0x43, 0xbc, - 0xf0, 0xf0, 0xb5, 0x4f, 0x3c, 0xf0, 0xf5, 0x68, 0x59, 0x30, 0x56, 0x9f, 0x12, 0x30, 0xfa, 0x25, - 0xaa, 0xa7, 0x26, 0x3f, 0xbc, 0x57, 0x89, 0x0c, 0x05, 0x2e, 0xef, 0x2f, 0x15, 0x8a, 0x39, 0xf1, - 0xad, 0xa0, 0xba, 0xb4, 0x65, 0xb1, 0xa6, 0x5d, 0xe1, 0x00, 0x4d, 0x77, 0x73, 0xf7, 0xaa, 0x42, - 0xf2, 0xe1, 0x6f, 0x84, 0x3a, 0x93, 0xad, 0xd3, 0x1f, 0xad, 0xcc, 0xae, 0xa4, 0x7c, 0x48, 0xcc, - 0x60, 0xa4, 0xf9, 0xcb, 0x1f, 0x76, 0x8d, 0xb1, 0x75, 0x13, 0xfc, 0x22, 0x6b, 0x6b, 0xf8, 0xae, - 0xa5, 0xe5, 0xc2, 0xdb, 0xb5, 0xc2, 0x23, 0x08, 0x21, 0xc2, 0xc6, 0x78, 0xe1, 0x63, 0x2d, 0xb4, - 0x6e, 0x58, 0x19, 0x6d, 0xa5, 0x0b, 0x81, 0x53, 0xc3, 0x87, 0x80, 0x79, 0xe0, 0x60, 0x58, 0x07, - 0x0c, 0xca, 0x00, 0x1a, 0x44, 0x1c, 0x87, 0x44, 0x40, 0xe5, 0x8a, 0xb7, 0xd9, 0xfb, 0xbf, 0x9f, - 0x9f, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xc8, 0x6f, 0x7c, 0x29, 0x24, 0x2a, 0xdc, 0x6f, 0x25, - 0x72, 0x2d, 0x93, 0x88, 0x80, 0xef, 0x35, 0x69, 0x95, 0x77, 0x75, 0xd9, 0x13, 0xfc, 0xd2, 0x13, - 0x8e, 0x2a, 0xab, 0xb8, 0x98, 0x53, 0x32, 0xdb, 0xf1, 0x1c, 0x1f, 0xf1, 0xea, 0x4c, 0x47, 0x06, - 0x32, 0x19, 0x8c, 0xf3, 0x52, 0xbb, 0xc7, 0xbe, 0x2e, 0xc6, 0x90, 0xe1, 0x30, 0xb0, 0xc9, 0x9e, - 0xe2, 0xa6, 0x1a, 0x50, 0x42, 0x37, 0x6e, 0x5f, 0xfe, 0xae, 0xae, 0x64, 0x3b, 0x85, 0x70, 0x08, - 0xc5, 0xe1, 0x76, 0x00, 0xee, 0xef, 0xff, 0xf8, 0x80, 0x88, 0x53, 0x12, 0x90, 0x9a, 0xdd, 0x26, - 0xc2, 0xaa, 0xde, 0x3f, 0x50, 0x8e, 0x51, 0x37, 0x23, 0xa9, 0xae, 0xf0, 0xc9, 0x4c, 0xdb, 0x55, - 0xf1, 0x92, 0xf5, 0xf4, 0xec, 0x9a, 0x09, 0xdd, 0x75, 0x8e, 0xa0, 0xf8, 0x20, 0x12, 0x14, 0x29, - 0xef, 0xe4, 0xf3, 0x65, 0x21, 0x57, 0xc2, 0x99, 0x7d, 0xb9, 0xf2, 0xfb, 0x88, 0x05, 0x03, 0xa2, - 0xf1, 0xc6, 0x79, 0xf1, 0xed, 0x58, 0xaf, 0xc1, 0x48, 0x20, 0xe0, 0x80, 0x48, 0xfc, 0x99, 0xca, - 0xac, 0x92, 0x3c, 0xf9, 0x76, 0x7f, 0x0e, 0xa2, 0x00, 0x0f, 0xad, 0xcd, 0x34, 0x03, 0x67, 0xcc, - 0x05, 0xaf, 0x88, 0x78, 0xf1, 0xf7, 0x38, 0x7f, 0xbd, 0xe0, 0x4c, 0xca, 0xeb, 0x6f, 0xf0, 0x88, - 0x60, 0x68, 0x82, 0x2a, 0x8e, 0x98, 0xf0, 0x1d, 0xcc, 0xda, 0x58, 0x32, 0x50, 0x54, 0xa2, 0x94, - 0xb0, 0x06, 0x7b, 0xcf, 0xc0, 0xaf, 0x51, 0x4d, 0x91, 0x2c, 0x19, 0x56, 0x54, 0xe0, 0xc5, 0x16, - 0x89, 0x78, 0x52, 0xf8, 0x76, 0x68, 0x25, 0x8a, 0x0a, 0xed, 0x7f, 0xc3, 0x22, 0x79, 0x3d, 0x4f, - 0xdb, 0xff, 0xe0, 0x9e, 0x86, 0x9b, 0x53, 0x74, 0xdb, 0x2f, 0x97, 0xc1, 0x61, 0x09, 0xf6, 0xd5, - 0xb7, 0xb9, 0x77, 0xea, 0x4e, 0x1a, 0x2c, 0xb3, 0xd4, 0xfe, 0xeb, 0xef, 0xae, 0x5f, 0x58, 0x44, - 0x9c, 0x49, 0x2f, 0x68, 0x43, 0x95, 0xcd, 0x9e, 0xb9, 0x7c, 0xb2, 0xb0, 0xc7, 0x63, 0xf2, 0x5c, - 0xcd, 0xfc, 0x2b, 0x61, 0x30, 0x82, 0xde, 0xe7, 0x5e, 0xbe, 0x39, 0x88, 0xdd, 0x0f, 0xd7, 0xb8, - 0x20, 0x12, 0x34, 0xc0, 0xfb, 0x8a, 0x30, 0x7d, 0xcb, 0x58, 0x55, 0xac, 0x1a, 0xf2, 0x04, 0x08, - 0x77, 0x02, 0x56, 0xe3, 0xa2, 0x34, 0x81, 0x8c, 0x15, 0x10, 0x95, 0x18, 0x1e, 0x35, 0x52, 0x17, - 0x62, 0x38, 0x45, 0xbb, 0x3e, 0x3e, 0xc8, 0x0a, 0xc2, 0xd8, 0x2e, 0xb1, 0x37, 0x79, 0xfc, 0x32, - 0x08, 0x02, 0x85, 0x49, 0x22, 0x26, 0xb7, 0xc6, 0x07, 0x8c, 0x91, 0x40, 0x70, 0x90, 0x5f, 0xcb, - 0x6b, 0x95, 0xf9, 0x79, 0xec, 0xf1, 0x2c, 0x32, 0xcc, 0x50, 0xdd, 0xc4, 0x82, 0x10, 0xa4, 0x75, - 0xf2, 0xc3, 0xac, 0x53, 0x07, 0xae, 0x21, 0xe3, 0xd7, 0x2d, 0xb6, 0x29, 0xc5, 0xc7, 0xae, 0xde, - 0x77, 0xc6, 0xfe, 0x10, 0x08, 0x9e, 0xad, 0xa5, 0x36, 0xbf, 0x97, 0x6b, 0x84, 0x04, 0x85, 0x21, - 0xb5, 0x45, 0xd8, 0x9c, 0xbc, 0x8a, 0x45, 0xdc, 0xa4, 0x7a, 0xe2, 0xb9, 0x66, 0x6e, 0x53, 0xe3, - 0x52, 0xbf, 0xe1, 0x11, 0x23, 0x2b, 0x99, 0x36, 0x52, 0x09, 0x73, 0x2b, 0x18, 0xad, 0x79, 0xb2, - 0x83, 0xf0, 0xd2, 0x82, 0x8e, 0xe4, 0xfb, 0x7d, 0xec, 0xeb, 0xff, 0xf1, 0x1b, 0xde, 0xae, 0xbe, - 0x11, 0xd1, 0xc9, 0x82, 0xb3, 0xeb, 0xec, 0x3c, 0x43, 0x01, 0x57, 0xe1, 0x3b, 0xb7, 0xe8, 0xdd, - 0xbc, 0x48, 0x64, 0x29, 0x40, 0x32, 0x7d, 0x08, 0xf2, 0xf2, 0x72, 0x70, 0x18, 0x96, 0x40, 0x9c, - 0x70, 0xac, 0xa8, 0x7d, 0x85, 0x92, 0x17, 0x9d, 0x84, 0x9e, 0x54, 0x1d, 0x20, 0x9c, 0x71, 0xcc, - 0x2c, 0x43, 0x00, 0xd6, 0xdc, 0x40, 0x35, 0xb7, 0xa3, 0xef, 0xa7, 0x57, 0xaf, 0x59, 0x3c, 0x38, - 0xa0, 0x09, 0xc3, 0x75, 0xa2, 0x69, 0xdf, 0x67, 0x27, 0x5d, 0x9d, 0x34, 0xd9, 0xee, 0x59, 0xe3, - 0xe6, 0x4f, 0x6f, 0xfc, 0x16, 0x5e, 0xf2, 0x18, 0x9b, 0x45, 0x33, 0xf9, 0xa5, 0x10, 0xb0, 0xfc, - 0x40, 0x81, 0xc5, 0x74, 0xe8, 0x72, 0x2e, 0x2e, 0x2e, 0x56, 0x60, 0xff, 0x08, 0x02, 0xb9, 0x3e, - 0xcc, 0xee, 0x5a, 0x0a, 0xc5, 0x7d, 0xf8, 0x60, 0x22, 0x0a, 0xfb, 0x9f, 0xbb, 0xfc, 0xed, 0x8b, - 0x8a, 0x18, 0x90, 0x38, 0xdc, 0x1c, 0x83, 0x01, 0x91, 0x2c, 0x1c, 0xf9, 0xb8, 0xba, 0x8a, 0x19, - 0xfc, 0x36, 0x1c, 0x7a, 0xcd, 0xc8, 0xb9, 0x4b, 0x64, 0x48, 0xb2, 0xc0, 0x82, 0x08, 0x06, 0x4c, - 0xa0, 0xf3, 0x85, 0x86, 0x58, 0x65, 0x86, 0xa2, 0x3f, 0x17, 0x22, 0x46, 0xe5, 0xf2, 0xf6, 0xf8, - 0x44, 0x12, 0xcb, 0xe2, 0x8a, 0xe2, 0xed, 0xb7, 0x12, 0x23, 0x88, 0x10, 0x14, 0x16, 0x15, 0x39, - 0x4a, 0xb6, 0x01, 0x4e, 0x09, 0x05, 0x30, 0xc2, 0x95, 0x81, 0x80, 0xba, 0xa3, 0x54, 0x5c, 0x76, - 0x08, 0x2b, 0x1e, 0x07, 0xa5, 0xa5, 0xa2, 0x11, 0x92, 0x72, 0x25, 0x6e, 0x6b, 0x52, 0x4e, 0x38, - 0xee, 0x1d, 0x24, 0x00, 0xba, 0xa6, 0x2b, 0x27, 0xec, 0x4d, 0x3f, 0xff, 0xab, 0xab, 0x91, 0x67, - 0xf6, 0xdb, 0xf0, 0x57, 0x26, 0x62, 0xe9, 0x66, 0x63, 0x6d, 0x27, 0xf8, 0x2a, 0xd3, 0x4e, 0x5a, - 0x0f, 0x12, 0xf8, 0x87, 0x03, 0xd9, 0x61, 0x2c, 0x8b, 0x06, 0x78, 0xef, 0x84, 0x41, 0x49, 0x99, - 0xb4, 0x48, 0x8b, 0x44, 0x17, 0x2e, 0x3a, 0x9c, 0x1d, 0xfc, 0x30, 0x3e, 0x21, 0xe5, 0x6f, 0x35, - 0x8a, 0x7b, 0xd9, 0x8b, 0x34, 0x75, 0xe0, 0xe0, 0x40, 0xc1, 0x63, 0x14, 0x24, 0x50, 0x0f, 0x5e, - 0xcb, 0x60, 0xea, 0xe1, 0xf5, 0x38, 0x36, 0x65, 0xc1, 0x8b, 0xc6, 0x73, 0x0e, 0xdf, 0x86, 0x43, - 0x20, 0xb4, 0xca, 0xa4, 0xc6, 0x42, 0xc6, 0xff, 0xfc, 0x74, 0xbe, 0x5b, 0x76, 0xd5, 0xdb, 0x2f, - 0xbe, 0x13, 0xc0, 0x18, 0x9e, 0x75, 0x8e, 0x93, 0xc7, 0xfb, 0xdf, 0x7a, 0x97, 0xcb, 0x69, 0xe2, - 0x6c, 0x8b, 0x27, 0xe0, 0x49, 0x0c, 0x04, 0x62, 0xe1, 0x70, 0xe1, 0xb2, 0xfb, 0xb1, 0xd2, 0xbb, - 0xc3, 0xa8, 0xc0, 0x0e, 0xdb, 0x11, 0x4a, 0xb9, 0x80, 0x2f, 0x6e, 0xd6, 0x73, 0xee, 0xde, 0x3e, - 0xe7, 0x0f, 0x2c, 0xfc, 0x43, 0xe1, 0xb8, 0x87, 0x84, 0x05, 0xcc, 0x28, 0x0a, 0x18, 0xa0, 0x26, - 0x45, 0x4a, 0x51, 0x5f, 0xc4, 0x46, 0xd0, 0xcc, 0xc8, 0x8b, 0x0c, 0xeb, 0x95, 0x38, 0x03, 0xce, - 0xf4, 0xa0, 0x01, 0x50, 0xe3, 0xe7, 0xa8, 0x42, 0x31, 0x14, 0x79, 0x29, 0xc6, 0x5a, 0x17, 0x5f, - 0xf1, 0x59, 0xb6, 0xdd, 0xb4, 0x92, 0x5c, 0x39, 0x5d, 0xe2, 0xb2, 0x4e, 0x78, 0xff, 0x82, 0x2b, - 0x55, 0x95, 0xbe, 0x1e, 0xee, 0xf4, 0xd3, 0x6b, 0x3b, 0x6a, 0x99, 0x7d, 0xff, 0xcf, 0x58, 0xd3, - 0x44, 0xbf, 0xe1, 0xe2, 0xcd, 0x55, 0xca, 0x48, 0xa4, 0xb5, 0x52, 0x90, 0x5a, 0x41, 0x68, 0xab, - 0x6d, 0x24, 0xbf, 0xcb, 0xb7, 0x7f, 0x05, 0xb4, 0x92, 0xb5, 0x43, 0x6d, 0x0f, 0x1b, 0xe4, 0xa6, - 0xff, 0x8a, 0xd6, 0xb7, 0x5f, 0x9f, 0x87, 0x64, 0x5f, 0xfe, 0xa6, 0x17, 0xc5, 0x52, 0xdd, 0x8e, - 0xbf, 0x04, 0xd6, 0xcd, 0xdb, 0x7e, 0xde, 0xf5, 0xf0, 0x5d, 0x43, 0xad, 0x33, 0xfc, 0xe9, 0xf5, - 0x67, 0xc3, 0x33, 0xb1, 0x26, 0x55, 0xbb, 0x6f, 0x10, 0x99, 0x6f, 0xc2, 0x01, 0x00, 0xa0, 0x81, - 0x1e, 0xfa, 0x83, 0x50, 0x4a, 0x15, 0xd1, 0x38, 0x00, 0x14, 0x58, 0x25, 0xea, 0xd8, 0x5c, 0x2a, - 0x78, 0x07, 0x85, 0xe0, 0x53, 0xe0, 0x63, 0xa0, 0x2f, 0x44, 0x2a, 0x0d, 0x22, 0x97, 0x08, 0x84, - 0x02, 0x94, 0x07, 0x80, 0x05, 0x4e, 0x4f, 0xa0, 0xe2, 0xe2, 0x91, 0x13, 0x1f, 0x69, 0xd8, 0xdc, - 0xdf, 0xed, 0x0c, 0x0a, 0x9e, 0xd7, 0xa9, 0xc3, 0x4a, 0xdd, 0x87, 0x9c, 0x2f, 0x2c, 0x39, 0x78, - 0x64, 0x14, 0xdf, 0xaa, 0x8b, 0xad, 0x6b, 0x63, 0x89, 0x12, 0x14, 0x2a, 0x19, 0xbe, 0x59, 0xa6, - 0x2e, 0xae, 0xd3, 0x46, 0xa1, 0xb9, 0x7c, 0x8b, 0xbf, 0x88, 0x08, 0x15, 0xee, 0xf7, 0x52, 0xf5, - 0xef, 0xe1, 0x18, 0xbc, 0x99, 0x46, 0xd8, 0xbd, 0x52, 0x48, 0x1a, 0x2c, 0x36, 0x87, 0xc0, 0xf8, - 0x50, 0x45, 0xdc, 0xb4, 0xcf, 0xef, 0xbf, 0xb2, 0xba, 0x30, 0xb2, 0x84, 0xfe, 0x11, 0x10, 0x7d, - 0x25, 0x26, 0x7e, 0x22, 0x0a, 0x8b, 0xc7, 0xba, 0xca, 0xd4, 0xf8, 0xd6, 0xd7, 0xb0, 0xd6, 0x01, - 0x1b, 0xcd, 0xb0, 0xff, 0x24, 0xdf, 0x27, 0x7f, 0x6e, 0xff, 0xbe, 0xc7, 0x89, 0x0a, 0x73, 0x97, - 0x31, 0x05, 0xd5, 0x64, 0xe4, 0xe7, 0x54, 0xfd, 0x35, 0xa7, 0x58, 0x42, 0x14, 0x8b, 0x97, 0xf3, - 0x16, 0xef, 0x7a, 0xaa, 0x19, 0x53, 0x0c, 0xe0, 0x0c, 0xe3, 0xe0, 0xd3, 0xb8, 0x8e, 0x9f, 0xbf, - 0x4e, 0x9b, 0x6d, 0xb6, 0xdf, 0x8b, 0x94, 0x61, 0xac, 0x04, 0x68, 0x52, 0x07, 0x0b, 0x9d, 0x32, - 0xf8, 0xd3, 0xfb, 0x6d, 0xb7, 0xc5, 0xb1, 0x8f, 0x84, 0x42, 0x84, 0x12, 0x1c, 0x3b, 0xc4, 0x00, - 0x58, 0x2c, 0x30, 0xb0, 0xa9, 0xe0, 0x38, 0xf6, 0x9e, 0xb4, 0x53, 0x14, 0xc5, 0xd4, 0xb3, 0x3c, - 0x0d, 0x05, 0x32, 0xcd, 0xb0, 0xe3, 0x80, 0x10, 0x00, 0x6d, 0x9b, 0x8b, 0x5e, 0x3f, 0x8d, 0x8d, - 0x57, 0x68, 0xd8, 0x6f, 0x5f, 0x1c, 0x92, 0x3d, 0x84, 0xc2, 0x35, 0xbf, 0xf0, 0xc4, 0xe0, 0x14, - 0x1c, 0x4d, 0x12, 0x87, 0x71, 0xa0, 0xef, 0x5b, 0xbb, 0xb8, 0xab, 0x15, 0x67, 0xa6, 0x4b, 0x58, - 0x94, 0xc9, 0xe9, 0x98, 0xe3, 0x2a, 0xd2, 0x15, 0x69, 0x19, 0xd9, 0xce, 0x85, 0xd8, 0x65, 0x40, - 0x0b, 0x29, 0x8f, 0x1b, 0x28, 0x73, 0xba, 0x7f, 0xfc, 0xb1, 0x0b, 0xb8, 0xbf, 0x8c, 0x55, 0x86, - 0x08, 0x60, 0x03, 0x40, 0x65, 0xbb, 0x9e, 0x1d, 0xff, 0x5b, 0x67, 0xed, 0xda, 0xd5, 0x62, 0xbd, - 0xef, 0x23, 0xcb, 0x91, 0x54, 0xcb, 0x12, 0x11, 0x05, 0x1d, 0x53, 0x55, 0x5f, 0xfc, 0x40, 0x60, - 0x28, 0x53, 0x35, 0xd8, 0xa5, 0x0c, 0x13, 0xe2, 0xe4, 0xa9, 0xff, 0xa5, 0x7e, 0xe2, 0x44, 0x85, - 0x2d, 0x22, 0xb2, 0x4c, 0x38, 0x21, 0x12, 0xbb, 0x54, 0x5d, 0x48, 0xc2, 0xb1, 0x27, 0xe7, 0x58, - 0x91, 0x21, 0x4f, 0x00, 0x99, 0x8f, 0x51, 0x97, 0xc6, 0x6e, 0xcf, 0x63, 0x75, 0x7d, 0x37, 0x63, - 0x3d, 0xc4, 0xfe, 0x09, 0x28, 0x9f, 0x6e, 0x26, 0x14, 0xaa, 0x2b, 0x12, 0xdc, 0xc5, 0x19, 0x69, - 0x7b, 0x2c, 0x44, 0x15, 0x33, 0x05, 0x0c, 0x05, 0x23, 0xb2, 0x80, 0xee, 0x93, 0xbf, 0x08, 0x41, - 0x45, 0x34, 0x98, 0x62, 0xb0, 0xe6, 0xe3, 0x7a, 0x4b, 0xf1, 0x21, 0x10, 0x95, 0x5d, 0x36, 0x27, - 0x4a, 0xf8, 0x64, 0x41, 0x8a, 0xfa, 0x5e, 0x14, 0xdd, 0xe2, 0xb2, 0xed, 0xcf, 0x41, 0x0a, 0x47, - 0xa8, 0xb4, 0x1b, 0xa2, 0x35, 0x1f, 0x88, 0x08, 0x84, 0x39, 0x3f, 0x96, 0xda, 0xda, 0x2b, 0x18, - 0x81, 0x03, 0x24, 0xc9, 0x14, 0xc5, 0xd3, 0xad, 0x03, 0xaf, 0x5c, 0xd4, 0x6e, 0xfc, 0x23, 0xf2, - 0xf3, 0xc3, 0x0c, 0xe0, 0x03, 0xae, 0xed, 0x0f, 0xc1, 0x5b, 0xff, 0xfa, 0xbb, 0xbb, 0xc4, 0x3e, - 0xee, 0xff, 0x8e, 0xdc, 0x48, 0x60, 0x68, 0xc1, 0x2d, 0x84, 0x58, 0xe3, 0x8e, 0x86, 0x5d, 0xc3, - 0xf6, 0x54, 0x70, 0x1a, 0xd3, 0x3d, 0x65, 0xe2, 0xac, 0x41, 0xe6, 0x20, 0x5e, 0xc0, 0x40, 0x7a, - 0xfe, 0x32, 0x82, 0xd7, 0x2c, 0x4f, 0xa8, 0xa8, 0x5d, 0x6c, 0xbd, 0xf3, 0x95, 0x4f, 0x07, 0xc2, - 0xfe, 0xb9, 0xea, 0xb3, 0x76, 0xff, 0xcd, 0x43, 0x63, 0x43, 0x63, 0x5c, 0xdd, 0xd9, 0x3e, 0x2a, - 0xed, 0xf4, 0xcd, 0xff, 0x2e, 0x9b, 0x19, 0x18, 0xf0, 0xdc, 0xdb, 0x6a, 0xae, 0xa5, 0xec, 0xfe, - 0xb8, 0xbd, 0xda, 0xe7, 0x63, 0xe1, 0xbd, 0x3a, 0x6b, 0x17, 0xaf, 0xf9, 0x36, 0xed, 0xf8, 0x5f, - 0x33, 0x1c, 0x1a, 0x84, 0xa6, 0xe1, 0xd1, 0x86, 0x5c, 0x9b, 0x9e, 0x05, 0x87, 0xf0, 0xc0, 0xd3, - 0x1c, 0x31, 0x33, 0x40, 0x8d, 0x02, 0xa2, 0x8d, 0x06, 0xa9, 0x05, 0x1d, 0x89, 0x7c, 0x9c, 0xcb, - 0xe2, 0x90, 0xe4, 0x19, 0x39, 0x51, 0x29, 0x22, 0x91, 0x06, 0xf1, 0x84, 0x30, 0xba, 0x4c, 0xa7, - 0x82, 0xdf, 0x4b, 0xcb, 0x31, 0x20, 0x70, 0x51, 0x5c, 0x9f, 0xff, 0x08, 0x82, 0x93, 0xa7, 0x01, - 0x1a, 0xfc, 0x5c, 0xca, 0xea, 0x30, 0xbc, 0x5e, 0x31, 0xc4, 0x20, 0x2b, 0xe1, 0x36, 0x71, 0x22, - 0x41, 0x31, 0x4a, 0xc7, 0x37, 0x99, 0x87, 0xdf, 0x88, 0x10, 0x6b, 0xe5, 0xfc, 0x40, 0xcb, 0xb6, - 0xfb, 0xb8, 0xac, 0xbd, 0xd8, 0xcb, 0x61, 0x66, 0xa8, 0x54, 0xab, 0x68, 0xba, 0x9e, 0x14, 0x14, - 0xf6, 0x0b, 0x76, 0xec, 0x67, 0x8f, 0x0c, 0x9a, 0x82, 0x41, 0xa7, 0x95, 0x17, 0x10, 0x25, 0x18, - 0x00, 0xfa, 0x0b, 0x88, 0x12, 0xc5, 0xa0, 0x1f, 0x45, 0x71, 0x20, 0xa0, 0x60, 0xb7, 0xbc, 0xde, - 0xf6, 0x83, 0xd1, 0xd5, 0x91, 0x80, 0x3a, 0x9e, 0xa1, 0xb1, 0x7d, 0x71, 0x02, 0x41, 0x11, 0xeb, - 0x54, 0x77, 0x88, 0x82, 0x8a, 0x64, 0xec, 0x29, 0x99, 0x45, 0x3e, 0xe1, 0x01, 0x00, 0xb3, 0x77, - 0x57, 0xbe, 0xaa, 0x2f, 0xde, 0x20, 0x15, 0x6b, 0x5a, 0x1b, 0xcd, 0x04, 0x43, 0x0c, 0x4b, 0x6f, - 0x87, 0x89, 0x02, 0x51, 0x4d, 0x19, 0xb9, 0x1e, 0x16, 0xce, 0xad, 0xdf, 0xfb, 0x8e, 0xf7, 0x4f, - 0xf8, 0x91, 0x00, 0x98, 0xca, 0xaa, 0xbc, 0xb9, 0xde, 0x20, 0x76, 0xaa, 0xaa, 0xaa, 0xaf, 0x77, - 0x85, 0x09, 0x02, 0x50, 0xf1, 0x30, 0xa4, 0x8f, 0x9b, 0x6a, 0x7a, 0xd7, 0xdf, 0x10, 0x24, 0x14, - 0x94, 0x63, 0x2f, 0x2e, 0x0a, 0xe5, 0xfd, 0xcc, 0x1f, 0xed, 0x20, 0xfb, 0x84, 0x63, 0x2a, 0xb1, - 0x03, 0xb3, 0x49, 0x2b, 0xa3, 0x2f, 0x72, 0xc1, 0x8f, 0xa0, 0x79, 0x04, 0x7c, 0x44, 0x3f, 0x99, - 0x39, 0x52, 0x3b, 0xf1, 0x9d, 0xde, 0xd3, 0x97, 0x2d, 0xcf, 0x0b, 0xc7, 0x69, 0xe2, 0x04, 0xac, - 0x5c, 0x48, 0x95, 0xff, 0x10, 0x20, 0x14, 0x96, 0xa8, 0xf5, 0x93, 0xa6, 0xee, 0x7f, 0xdc, 0x44, - 0x27, 0x55, 0x91, 0x1c, 0x93, 0x7f, 0x2e, 0x7c, 0x30, 0xd7, 0xe1, 0x23, 0x06, 0x91, 0xaf, 0xc4, - 0xbf, 0x0c, 0xc1, 0xf8, 0xf6, 0x27, 0x08, 0x84, 0x1e, 0xef, 0xf1, 0x23, 0xaa, 0xa6, 0xa4, 0xee, - 0xed, 0x36, 0xce, 0xb8, 0x88, 0x2d, 0xed, 0x37, 0xab, 0x5f, 0xe1, 0x18, 0x28, 0x2d, 0x54, 0x5e, - 0xd5, 0x7b, 0x89, 0x90, 0x95, 0x47, 0x86, 0x89, 0x0f, 0x26, 0xbf, 0xef, 0xfe, 0x64, 0xf1, 0x03, - 0x09, 0xa9, 0xb0, 0xfe, 0x2a, 0xd3, 0x51, 0x3e, 0x58, 0x62, 0x38, 0x5e, 0x86, 0x6a, 0x7c, 0x48, - 0x26, 0xac, 0x5d, 0x3e, 0x45, 0x1e, 0xc2, 0xc4, 0x80, 0xc7, 0x89, 0xa5, 0xdb, 0xdb, 0xbe, 0xf6, - 0xfe, 0x11, 0x18, 0x5d, 0x54, 0x41, 0xc1, 0x4e, 0x45, 0xc3, 0x42, 0xd9, 0x32, 0xcb, 0x06, 0x78, - 0xc3, 0x97, 0x0b, 0x90, 0xee, 0x00, 0xe6, 0xb5, 0x03, 0x4b, 0xb1, 0x4f, 0x77, 0xb6, 0xde, 0xb1, - 0xb3, 0x96, 0x71, 0x8b, 0xf8, 0x87, 0xaa, 0xed, 0x83, 0x00, 0x02, 0x24, 0x5b, 0x83, 0x88, 0x17, - 0x81, 0xf9, 0x75, 0xef, 0xe1, 0xd9, 0xb2, 0x4c, 0x57, 0xcf, 0xa7, 0xc2, 0xc0, 0xc2, 0xd5, 0x14, - 0x0c, 0xe2, 0xc0, 0x49, 0x89, 0x8a, 0x23, 0xdc, 0xce, 0x78, 0x7f, 0xfe, 0x08, 0xe9, 0xb5, 0xdd, - 0xf3, 0x6d, 0xbf, 0xc1, 0x5e, 0xaa, 0xe4, 0xd8, 0x92, 0x63, 0x93, 0x39, 0x7c, 0x13, 0xcb, 0x9e, - 0xaf, 0x97, 0xc5, 0x5d, 0x75, 0xb7, 0xf0, 0x8d, 0x24, 0xb4, 0xdd, 0x3b, 0xbe, 0xb9, 0xea, 0xea, - 0xaf, 0xfe, 0x10, 0xdb, 0x74, 0x98, 0xca, 0xc1, 0xd8, 0x83, 0xb6, 0x9f, 0xd7, 0x38, 0xf0, 0x53, - 0xbb, 0xcd, 0x97, 0x91, 0x93, 0xb2, 0x87, 0x47, 0xaf, 0x85, 0xee, 0x96, 0x76, 0x4a, 0xc5, 0x39, - 0x7d, 0x56, 0xda, 0xe1, 0x6e, 0x93, 0xdb, 0x91, 0x97, 0xdc, 0xfe, 0x7f, 0xc1, 0x0c, 0xde, 0x6e, - 0x29, 0xbe, 0x09, 0xef, 0xab, 0x75, 0xe2, 0xc3, 0xd1, 0x00, 0x01, 0x49, 0x64, 0x39, 0x05, 0x53, - 0x25, 0xe2, 0x7c, 0x53, 0x75, 0xdf, 0xd0, 0x83, 0xe3, 0xf3, 0xc7, 0xab, 0xa3, 0x3f, 0x7f, 0x5f, - 0xa1, 0xe0, 0xf7, 0x50, 0x22, 0x0c, 0x72, 0x01, 0xd2, 0xc2, 0x44, 0x69, 0x86, 0x74, 0x2d, 0x0f, - 0xef, 0xc3, 0x00, 0x58, 0x0a, 0x09, 0xbe, 0x0a, 0xdb, 0x06, 0x66, 0xb2, 0x83, 0xc7, 0xca, 0x06, - 0xb2, 0x0f, 0xc4, 0xa7, 0x80, 0x3d, 0xfe, 0x33, 0x9f, 0x35, 0x16, 0xea, 0x50, 0x3b, 0x89, 0x46, - 0x88, 0x6f, 0x82, 0xb3, 0x6f, 0x71, 0x0f, 0x7f, 0x2d, 0x92, 0x8a, 0xb6, 0xb7, 0xef, 0x12, 0x13, - 0x85, 0x9a, 0x9b, 0x97, 0xad, 0x78, 0x91, 0x06, 0x3d, 0xef, 0xe3, 0x2b, 0x59, 0x3d, 0xaa, 0x6e, - 0x5a, 0xbd, 0x7a, 0x62, 0xfc, 0x22, 0x18, 0x08, 0xeb, 0x4d, 0x68, 0xca, 0x21, 0x7d, 0xb1, 0xe5, - 0x5e, 0x81, 0x71, 0x38, 0x05, 0x6d, 0x80, 0x01, 0xa2, 0x45, 0x82, 0x11, 0x01, 0x41, 0x45, 0xb0, - 0xbd, 0x49, 0xea, 0x4e, 0x04, 0x61, 0x30, 0x80, 0x95, 0x90, 0x20, 0x6c, 0x8a, 0xd7, 0x8b, 0xa7, - 0x60, 0x05, 0x47, 0x82, 0xef, 0x80, 0x01, 0x4c, 0x28, 0x44, 0x80, 0xe1, 0xe5, 0x83, 0x2d, 0x85, - 0x45, 0x0b, 0x23, 0xbc, 0x33, 0x0a, 0x09, 0x11, 0x21, 0x08, 0xc6, 0x1e, 0x71, 0x4e, 0x0d, 0x71, - 0xf8, 0x2b, 0xd8, 0xd2, 0x8e, 0x87, 0xd5, 0xaa, 0xf5, 0xbc, 0xbc, 0xd8, 0x5f, 0xdf, 0x0a, 0x09, - 0x1c, 0x48, 0xcf, 0xf5, 0x51, 0x7b, 0x65, 0x9a, 0x41, 0x4e, 0x0f, 0x58, 0xb6, 0x7f, 0x5f, 0xf8, - 0x98, 0x72, 0x2a, 0xd1, 0xb2, 0x8f, 0xad, 0xb6, 0xff, 0x85, 0x54, 0x00, 0xbd, 0xea, 0x8c, 0x57, - 0xb4, 0xaa, 0xab, 0xff, 0xf8, 0x90, 0x88, 0x2c, 0xb7, 0x2d, 0xc5, 0x72, 0x75, 0x72, 0x47, 0xef, - 0xfb, 0x88, 0x12, 0x14, 0xbb, 0x6e, 0xe4, 0xfb, 0x68, 0x3a, 0x6d, 0x55, 0x5d, 0x65, 0xe8, 0x1f, - 0xb8, 0x40, 0x22, 0x0a, 0x2e, 0xe5, 0x21, 0xd5, 0xaa, 0xe5, 0xe1, 0x90, 0x58, 0x45, 0x17, 0x4a, - 0xd3, 0x74, 0x0d, 0xc5, 0x6c, 0x6e, 0xfc, 0x40, 0x64, 0x17, 0x5a, 0x68, 0x6c, 0x98, 0xcf, 0x85, - 0x62, 0x47, 0xf7, 0x12, 0x20, 0x16, 0x55, 0xee, 0x9e, 0x6c, 0x90, 0x89, 0xb9, 0xee, 0x10, 0x08, - 0x05, 0x2d, 0xa5, 0x52, 0xb2, 0xb5, 0x17, 0xe9, 0xa8, 0xed, 0x2f, 0xfc, 0x40, 0x81, 0xa5, 0xc5, - 0xd0, 0xc9, 0x8a, 0x96, 0x75, 0xbd, 0xe5, 0xff, 0xce, 0xd9, 0xbf, 0xf0, 0x80, 0x2d, 0xa6, 0xc7, - 0x56, 0xdf, 0xef, 0x82, 0x2d, 0xd3, 0xff, 0x89, 0x82, 0x49, 0x3f, 0xef, 0x13, 0xc4, 0xc1, 0x5e, - 0xb5, 0x6a, 0xa8, 0x4f, 0x7b, 0xf1, 0x01, 0x80, 0x54, 0x4b, 0x43, 0xee, 0x2b, 0x79, 0x7e, 0xef, - 0x08, 0xfc, 0x14, 0x47, 0x69, 0xda, 0x6f, 0x37, 0x36, 0x77, 0x08, 0xc5, 0xe2, 0xb1, 0xb4, 0x5a, - 0x9c, 0xae, 0x65, 0x3c, 0x48, 0x28, 0xb6, 0x65, 0x0c, 0x5a, 0x6e, 0xa4, 0x20, 0xeb, 0x89, 0x08, - 0x04, 0xe5, 0x60, 0xbe, 0xc7, 0x69, 0xfc, 0x40, 0x47, 0x18, 0x5f, 0x35, 0x2a, 0x30, 0x80, 0x91, - 0xe2, 0xff, 0xc2, 0x62, 0x26, 0x2f, 0xdd, 0xd4, 0x10, 0x86, 0x01, 0x60, 0xd2, 0xf1, 0x20, 0x39, - 0x15, 0x89, 0xb1, 0x26, 0x53, 0x7d, 0xf8, 0x60, 0x48, 0xc1, 0x1a, 0x4e, 0xe7, 0xe8, 0x75, 0x46, - 0x2f, 0x56, 0x59, 0x03, 0x01, 0xae, 0x20, 0x18, 0x05, 0x0a, 0x6e, 0x24, 0xf1, 0x9f, 0x50, 0x98, - 0xca, 0x14, 0xcd, 0x85, 0x86, 0x5e, 0x5b, 0x7c, 0x76, 0x61, 0xff, 0x13, 0xff, 0xe1, 0x90, 0x88, - 0xd3, 0x1e, 0x30, 0xac, 0xe7, 0x86, 0x28, 0xda, 0x49, 0x83, 0xbf, 0x44, 0x4d, 0x95, 0xc6, 0x4e, - 0x20, 0x81, 0x4e, 0xe9, 0xac, 0xf3, 0x81, 0xdc, 0xf4, 0x2a, 0x21, 0x50, 0x2c, 0xc1, 0x70, 0x53, - 0xd1, 0x2b, 0x7a, 0x97, 0xf9, 0x79, 0xe7, 0x1a, 0x2f, 0x04, 0xc5, 0xcf, 0x57, 0x6a, 0x76, 0x35, - 0xf0, 0x5b, 0xbb, 0xb4, 0xc7, 0xba, 0x54, 0xf8, 0x5c, 0xd7, 0xa5, 0x4d, 0x2e, 0x54, 0xc9, 0xe9, - 0xff, 0x98, 0xb4, 0xa7, 0xc5, 0xdd, 0x53, 0xfc, 0x75, 0x2d, 0x2d, 0xb3, 0x7d, 0xa6, 0x9a, 0x6b, - 0xcd, 0x49, 0xff, 0x17, 0x2f, 0xf0, 0x62, 0xa8, 0xa5, 0x1a, 0x98, 0x42, 0x34, 0xc0, 0xb8, 0x88, - 0x63, 0x58, 0x00, 0x96, 0x15, 0x10, 0x09, 0x48, 0x82, 0x65, 0x48, 0x0d, 0x41, 0x6b, 0x76, 0xd0, - 0xbc, 0x28, 0xe0, 0x05, 0xaf, 0x05, 0xd4, 0x46, 0x92, 0x82, 0x40, 0x09, 0x31, 0xe0, 0x05, 0x8c, - 0xe8, 0x0b, 0xeb, 0x51, 0x25, 0x5f, 0x0c, 0xdd, 0x97, 0xf8, 0x93, 0x8b, 0x8b, 0x8b, 0x89, 0xb0, - 0x2f, 0x8b, 0xe1, 0xa2, 0x10, 0x02, 0x5c, 0xc4, 0x98, 0x6e, 0x6f, 0xf5, 0xa6, 0x4f, 0x27, 0xe9, - 0xbb, 0x30, 0xf1, 0x0a, 0x04, 0x5b, 0x34, 0xde, 0x5f, 0xfe, 0xf7, 0xbb, 0xfb, 0xf1, 0x22, 0x46, - 0x17, 0x3e, 0xd9, 0xbd, 0xe4, 0xa5, 0x62, 0xbb, 0xf1, 0x20, 0xaa, 0xed, 0xdb, 0x54, 0xf8, 0x55, - 0xaa, 0xd6, 0x3b, 0x82, 0x00, 0x52, 0x14, 0x10, 0x15, 0x56, 0x6c, 0x5c, 0xf0, 0x30, 0x29, 0x09, - 0x4f, 0x00, 0x02, 0x18, 0x17, 0x85, 0x8d, 0x13, 0xd4, 0x74, 0x0b, 0x9e, 0x79, 0xc0, 0x13, 0x10, - 0xd5, 0x10, 0x16, 0x24, 0x90, 0x40, 0xaa, 0xb4, 0x84, 0x93, 0xa0, 0x04, 0x03, 0xa5, 0x67, 0x05, - 0x00, 0x49, 0x0a, 0x46, 0x12, 0x00, 0x0a, 0x45, 0x31, 0x71, 0x12, 0x12, 0xbb, 0x18, 0xc2, 0xc1, - 0x96, 0x33, 0xc4, 0x30, 0x13, 0xde, 0xa5, 0x3e, 0x7c, 0x04, 0x82, 0xe8, 0x00, 0x08, 0x99, 0x13, - 0x8d, 0x0b, 0x77, 0x6c, 0x6f, 0xe2, 0x46, 0x09, 0x3d, 0xf3, 0x89, 0xf2, 0xf1, 0x1c, 0x92, 0xf6, - 0xcb, 0xc5, 0xc9, 0xef, 0x7c, 0x48, 0x28, 0x0a, 0x1c, 0xe1, 0x50, 0xbd, 0x6d, 0xb6, 0xc6, 0x38, - 0xf1, 0x1a, 0x45, 0xdc, 0xc4, 0x9b, 0x43, 0xaa, 0x13, 0xa8, 0x59, 0x90, 0x00, 0x45, 0xd7, 0x11, - 0x56, 0x6b, 0x54, 0xf9, 0xfa, 0xac, 0xab, 0xd6, 0xf8, 0x4e, 0x70, 0x40, 0x09, 0x24, 0xfc, 0xf5, - 0xae, 0xf7, 0x5a, 0xf1, 0x02, 0x06, 0x10, 0x5f, 0x5e, 0x1f, 0x95, 0x86, 0xd5, 0x64, 0xdd, 0xdd, - 0xf1, 0x21, 0x01, 0x93, 0x74, 0xeb, 0x77, 0x71, 0x58, 0xaf, 0x32, 0x46, 0xa9, 0xa6, 0xbc, 0x14, - 0x04, 0xa4, 0x51, 0x5a, 0x15, 0x05, 0x27, 0x62, 0xe1, 0x80, 0x4d, 0xd3, 0x33, 0x16, 0x19, 0x7e, - 0x3b, 0x71, 0x21, 0x11, 0xe4, 0xd8, 0xcd, 0xcd, 0x99, 0xd6, 0x15, 0x55, 0xb5, 0xe2, 0x41, 0x2c, - 0x41, 0xf5, 0x94, 0x6b, 0x27, 0x61, 0xe3, 0xf7, 0x08, 0x89, 0x05, 0x5a, 0xdf, 0x57, 0xd5, 0x8d, - 0xbe, 0xf1, 0x20, 0x86, 0xef, 0xbb, 0xee, 0xa9, 0x7e, 0x0b, 0x39, 0x32, 0xe5, 0x62, 0x56, 0x39, - 0x21, 0xaf, 0xa2, 0xf7, 0xcc, 0x46, 0xdc, 0xac, 0xbb, 0x7c, 0x23, 0xd5, 0x3b, 0x66, 0x49, 0x06, - 0xb4, 0xfe, 0x2f, 0x4d, 0xe7, 0x61, 0xd4, 0xd9, 0xe1, 0x22, 0x4b, 0x89, 0xb7, 0xd6, 0x3c, 0x83, - 0xc6, 0x1a, 0x7a, 0x3d, 0xc5, 0x1b, 0xcd, 0x96, 0x0c, 0xf8, 0xb3, 0x88, 0x12, 0x33, 0xc5, 0x6e, - 0xf3, 0xc1, 0xea, 0x3e, 0x8b, 0x97, 0xbb, 0x0f, 0xe4, 0xb3, 0x31, 0x11, 0x87, 0x0c, 0x53, 0x34, - 0x05, 0x32, 0x4f, 0x58, 0xeb, 0x4c, 0x36, 0xe0, 0x09, 0x20, 0x46, 0x1e, 0x45, 0x6e, 0x62, 0x38, - 0x14, 0xa9, 0x00, 0x02, 0xfe, 0x3c, 0x9c, 0x7e, 0xfe, 0x10, 0xde, 0xf8, 0x81, 0xc4, 0x9e, 0xf8, - 0x5d, 0xc0, 0x0c, 0x1c, 0x72, 0xeb, 0x26, 0xf3, 0x7a, 0xa2, 0xef, 0x44, 0xa8, 0xa5, 0x86, 0x99, - 0x03, 0xc1, 0x5a, 0xff, 0xfd, 0x55, 0xb8, 0x98, 0x93, 0xae, 0x6e, 0xf9, 0xd4, 0x71, 0x01, 0x03, - 0x17, 0x15, 0xbe, 0x10, 0x10, 0x3c, 0x95, 0xa4, 0xa2, 0xe9, 0x44, 0x2a, 0x22, 0x05, 0x41, 0x58, - 0x85, 0x94, 0x25, 0x5e, 0x5b, 0x6f, 0xff, 0xf0, 0xe2, 0x28, 0x00, 0x4b, 0x4e, 0x93, 0xb3, 0x0a, - 0x7f, 0xfd, 0xf9, 0xe1, 0xf2, 0xd7, 0xe5, 0xea, 0xde, 0x17, 0x4c, 0x77, 0x18, 0x54, 0xf6, 0x7f, - 0x86, 0x06, 0x88, 0x27, 0x00, 0xd4, 0xb1, 0x48, 0x44, 0x7a, 0x99, 0x98, 0x4b, 0xbc, 0xa6, 0x58, - 0x87, 0xc9, 0xc0, 0xa6, 0x0a, 0x21, 0xd0, 0x6b, 0x80, 0x93, 0x45, 0x9a, 0x67, 0x7e, 0x05, 0x84, - 0x89, 0xff, 0xa5, 0xf5, 0xd9, 0x43, 0x4a, 0x6b, 0x5f, 0x57, 0xea, 0x2e, 0x4f, 0x84, 0x69, 0x67, - 0xe5, 0x66, 0x87, 0xb1, 0xc9, 0xd4, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x5b, 0x2d, 0xb0, 0x7a, - 0x3f, 0x42, 0xfa, 0x1d, 0xe8, 0xbd, 0x0b, 0xf2, 0x52, 0xac, 0x5f, 0x54, 0xa9, 0x75, 0x2a, 0x7d, - 0x72, 0xfa, 0x95, 0x67, 0xd7, 0x2a, 0xea, 0x54, 0xb8, 0x46, 0x17, 0xde, 0xc6, 0x1a, 0xc6, 0x26, - 0x77, 0x34, 0x77, 0xcb, 0xfa, 0xa6, 0x5a, 0x43, 0x38, 0x26, 0x99, 0x4f, 0x37, 0xff, 0x6d, 0xbf, - 0x07, 0x19, 0x81, 0x80, 0xd9, 0x81, 0x00, 0x42, 0xa7, 0x85, 0xba, 0xa5, 0x4f, 0xa8, 0xe3, 0x7d, - 0x5a, 0x17, 0xeb, 0x15, 0xc1, 0x4d, 0x6b, 0x80, 0xa1, 0x82, 0xea, 0xae, 0x2b, 0x15, 0xbb, 0xd7, - 0x02, 0x40, 0x20, 0x05, 0xd5, 0x8d, 0x99, 0xe6, 0xcd, 0x47, 0xdf, 0x04, 0x77, 0x71, 0x1e, 0x70, - 0x3e, 0x2b, 0xeb, 0xde, 0x11, 0x0a, 0x42, 0xad, 0x3f, 0xaa, 0xd8, 0xc5, 0x67, 0xc3, 0x18, 0xc8, - 0x3f, 0x7f, 0x93, 0xff, 0x63, 0x81, 0x00, 0x1c, 0x82, 0xcb, 0xbe, 0x6c, 0xbb, 0x1a, 0x5a, 0xc1, - 0x0e, 0xc3, 0xca, 0x1b, 0x0c, 0x31, 0xff, 0xa7, 0xb7, 0xdb, 0x27, 0xb6, 0xd3, 0x4d, 0xdf, 0x58, - 0xdf, 0x54, 0xe9, 0xf1, 0x93, 0xd0, 0xf4, 0xcf, 0x43, 0xd3, 0x3d, 0x0f, 0x4c, 0xf4, 0x3d, 0x31, - 0x5c, 0x12, 0xf3, 0xd0, 0xf4, 0xcf, 0x43, 0xd0, 0xc9, 0x5d, 0x5f, 0xea, 0xd5, 0xc1, 0x3d, 0xef, - 0xbd, 0xd2, 0xa2, 0x74, 0x47, 0x57, 0x56, 0x84, 0x07, 0x90, 0x48, 0x0e, 0xa4, 0xd3, 0x01, 0xde, - 0x08, 0x3d, 0xdf, 0xf0, 0x34, 0xd4, 0x79, 0x61, 0xc6, 0x5f, 0xfb, 0xdf, 0xe8, 0xfd, 0x0e, 0x86, - 0xae, 0xaf, 0x80, 0x48, 0x42, 0x03, 0x45, 0x5d, 0xb8, 0xac, 0x56, 0x7c, 0xe2, 0xea, 0x29, 0x97, - 0xc5, 0xc7, 0x30, 0x3b, 0x78, 0x65, 0xf7, 0xe0, 0x12, 0x10, 0x70, 0x34, 0x20, 0x39, 0x07, 0xca, - 0x00, 0xaa, 0x83, 0x08, 0x0e, 0x85, 0x44, 0x1a, 0x01, 0x70, 0x03, 0x14, 0x16, 0x01, 0x74, 0x07, - 0x83, 0xa3, 0x2c, 0x47, 0x98, 0x07, 0xe8, 0x1f, 0x87, 0x51, 0x48, 0x1d, 0x0a, 0x2f, 0x06, 0xe4, - 0x75, 0x8b, 0x17, 0xc4, 0x70, 0x0e, 0xe1, 0x68, 0x7c, 0x81, 0xc0, 0xf7, 0xf8, 0x19, 0x18, 0x0d, - 0x07, 0x20, 0x00, 0x20, 0x03, 0x14, 0x77, 0xc1, 0xc4, 0x16, 0x22, 0x9f, 0xc1, 0x18, 0x44, 0xb6, - 0x2b, 0xed, 0xf2, 0xf8, 0x24, 0xde, 0x86, 0xdc, 0x18, 0xc1, 0x25, 0xd1, 0x28, 0x40, 0xe0, 0xfb, - 0x82, 0x46, 0x4c, 0x3a, 0x8c, 0x00, 0x16, 0x6c, 0xca, 0xff, 0x32, 0x3d, 0x5a, 0x4f, 0xdf, 0x7f, - 0xff, 0x3f, 0xb3, 0x03, 0xa0, 0x8d, 0xc0, 0x5f, 0x14, 0xbd, 0x22, 0x66, 0x6d, 0x36, 0xc2, 0xee, - 0x00, 0x08, 0x88, 0xc2, 0x54, 0xca, 0x42, 0xb9, 0x3a, 0x1e, 0xff, 0x8a, 0x59, 0x68, 0x32, 0x43, - 0xf1, 0xec, 0x3e, 0x20, 0x31, 0xc0, 0xe1, 0x04, 0xc2, 0x73, 0xfa, 0x57, 0xcb, 0xeb, 0xdf, 0x5c, - 0xa3, 0x79, 0x27, 0xa3, 0xfe, 0xae, 0x57, 0x29, 0x2f, 0x7f, 0x05, 0x1d, 0xdf, 0x77, 0x8e, 0x4f, - 0xd5, 0x8f, 0x98, 0xae, 0xae, 0xbe, 0xb3, 0x49, 0xd4, 0xc2, 0xae, 0xb9, 0x49, 0xc5, 0xf5, 0x5d, - 0x57, 0xd6, 0xaf, 0xad, 0x2d, 0x75, 0xee, 0x03, 0x46, 0x09, 0x2a, 0xaa, 0xa3, 0x8d, 0xc4, 0x06, - 0x01, 0x47, 0x2d, 0x36, 0x22, 0xb0, 0x91, 0x45, 0x06, 0x1c, 0x98, 0x00, 0xb6, 0xd2, 0x23, 0xef, - 0xfe, 0xeb, 0xf2, 0x99, 0x3f, 0x53, 0x4b, 0x26, 0xc7, 0x60, 0x62, 0x08, 0xa0, 0x45, 0x8f, 0x4e, - 0x3d, 0x4e, 0x3e, 0x25, 0xf1, 0x23, 0xf0, 0x09, 0x48, 0x30, 0x1a, 0x38, 0x71, 0x3e, 0xc9, 0x35, - 0x37, 0x00, 0x1e, 0x71, 0x93, 0x2a, 0x70, 0x00, 0x64, 0x92, 0xd1, 0x74, 0xde, 0x01, 0x61, 0xc2, - 0xa5, 0x82, 0xc7, 0x21, 0x72, 0xc0, 0x59, 0x40, 0x91, 0x01, 0xc0, 0x3c, 0x3a, 0x87, 0x41, 0xe0, - 0x7c, 0xaa, 0x0c, 0xe0, 0x20, 0x80, 0xa0, 0xc4, 0x00, 0xcb, 0x7b, 0x72, 0xce, 0x5f, 0xc1, 0x48, - 0x64, 0xa3, 0x41, 0x1a, 0x19, 0x52, 0xb3, 0xad, 0x00, 0x61, 0xc3, 0xbb, 0xf4, 0x57, 0xe1, 0x98, - 0x2a, 0x15, 0x55, 0x8b, 0x90, 0x8a, 0x61, 0x93, 0x49, 0x40, 0x65, 0x1e, 0x02, 0x65, 0x1b, 0x4d, - 0x01, 0xcf, 0xd3, 0x11, 0x18, 0x19, 0x5c, 0xa8, 0x0e, 0x56, 0x30, 0x87, 0x88, 0x60, 0x02, 0xde, - 0x12, 0xc7, 0x39, 0x05, 0xae, 0x0e, 0x63, 0xdf, 0x8b, 0x5b, 0x75, 0xa6, 0x16, 0x3c, 0x28, 0x49, - 0x51, 0x48, 0xa9, 0xc3, 0xd2, 0xb4, 0x9c, 0x8f, 0x16, 0x64, 0x81, 0xe7, 0xf9, 0x7f, 0x0f, 0xec, - 0x45, 0x12, 0x77, 0xf2, 0xd5, 0xfd, 0xe3, 0x4d, 0x38, 0x6d, 0x94, 0x1c, 0xa4, 0x1b, 0xeb, 0x05, - 0xb5, 0xc3, 0xe3, 0x0c, 0x9c, 0x6e, 0x51, 0xfa, 0x60, 0x05, 0x73, 0x4e, 0x00, 0xae, 0x7e, 0x34, - 0x75, 0xf7, 0x5a, 0xf0, 0x38, 0x41, 0x20, 0x44, 0x5d, 0x45, 0xc5, 0xdf, 0xea, 0x75, 0xdf, 0x16, - 0x27, 0x69, 0xad, 0xa6, 0xbc, 0x58, 0x85, 0x57, 0x75, 0x57, 0x75, 0xcb, 0x7d, 0xfd, 0x15, 0xe5, - 0xc4, 0x82, 0x83, 0x34, 0xd6, 0xd3, 0x5c, 0x52, 0x75, 0x7f, 0xac, 0x5f, 0x57, 0x3e, 0xb5, 0xf4, - 0x50, 0x06, 0xc7, 0xa2, 0xc7, 0x6b, 0x6d, 0xb6, 0xdf, 0xbe, 0x30, 0x8f, 0x7b, 0xde, 0xb5, 0xde, - 0xfe, 0x0a, 0x24, 0xa1, 0x29, 0xc9, 0x42, 0x53, 0x25, 0xf4, 0x69, 0xcf, 0x82, 0x4e, 0xee, 0x43, - 0x7d, 0x79, 0x1f, 0x10, 0x09, 0x67, 0xed, 0xb6, 0xdc, 0xec, 0x79, 0xc7, 0x85, 0x84, 0x34, 0xe6, - 0xdc, 0x9d, 0xea, 0x52, 0x97, 0xd3, 0xff, 0x85, 0x06, 0xee, 0xe9, 0x24, 0xab, 0xa4, 0x91, 0xe8, - 0xfa, 0x45, 0x11, 0x2c, 0x20, 0xa1, 0x7e, 0x3a, 0xdb, 0x6d, 0xb7, 0xfe, 0xa2, 0x91, 0xf2, 0x57, - 0x7f, 0x0f, 0xf7, 0x75, 0x57, 0x75, 0x55, 0x55, 0x4d, 0x34, 0xd3, 0xff, 0x2e, 0xe2, 0xb7, 0x5c, - 0xb7, 0x77, 0x7e, 0x20, 0x5d, 0x6b, 0xbd, 0x1f, 0x8b, 0xea, 0xba, 0xaf, 0x9a, 0xb5, 0x5f, 0x09, - 0x1f, 0x2e, 0x0a, 0xcb, 0x9f, 0xe6, 0x35, 0xef, 0xc0, 0x80, 0x6d, 0x55, 0x70, 0x72, 0x0e, 0x02, - 0x9c, 0xd8, 0x6c, 0xf1, 0x55, 0x8e, 0x53, 0xdb, 0x2e, 0x45, 0xdc, 0x32, 0x0c, 0x06, 0x8c, 0x6c, - 0x5b, 0x50, 0xed, 0xb3, 0x46, 0x02, 0xa0, 0xea, 0xf6, 0xc5, 0x90, 0x94, 0xa8, 0xb9, 0x7a, 0x8a, - 0x69, 0x9f, 0x24, 0xe7, 0x50, 0x50, 0x3f, 0xa4, 0xd8, 0x63, 0x90, 0x19, 0x8e, 0x20, 0xa5, 0x93, - 0x83, 0xff, 0xb8, 0x3a, 0xbc, 0x2e, 0xc4, 0x00, 0x57, 0x92, 0x05, 0xd8, 0x85, 0x07, 0x6f, 0xf7, - 0x4e, 0x59, 0x8a, 0xf3, 0x17, 0x2c, 0x31, 0x03, 0xcf, 0x00, 0xce, 0x1f, 0x14, 0xdc, 0x50, 0xd9, - 0x86, 0xd9, 0xc1, 0xfa, 0x06, 0x2d, 0x44, 0xb6, 0x78, 0x74, 0xe3, 0x2c, 0x7f, 0x14, 0x07, 0x14, - 0x07, 0xf1, 0xc7, 0x4f, 0x09, 0xe1, 0x5a, 0xe1, 0xe2, 0x0d, 0x04, 0x0c, 0x79, 0xed, 0xbf, 0xab, - 0xfe, 0x2d, 0x1e, 0xbb, 0x7e, 0x0a, 0x02, 0x81, 0x21, 0x58, 0x80, 0x05, 0x87, 0x38, 0x01, 0x60, - 0xf5, 0x89, 0x33, 0x01, 0x4d, 0x12, 0x8f, 0x30, 0x20, 0x54, 0x33, 0x25, 0x80, 0x03, 0x13, 0x64, - 0xb0, 0x00, 0x23, 0x2a, 0x8f, 0x8c, 0xc0, 0x11, 0xb8, 0x3a, 0x1f, 0x21, 0x60, 0x2a, 0x0e, 0xc7, - 0xe1, 0xa2, 0x14, 0x0e, 0xc2, 0xa4, 0xd0, 0x71, 0x0b, 0x53, 0x4e, 0xb7, 0xbf, 0x90, 0xef, 0x41, - 0xeb, 0x95, 0x97, 0x32, 0xa5, 0xb3, 0x80, 0x61, 0x65, 0x83, 0x2e, 0xbd, 0xee, 0x2b, 0x0e, 0x80, - 0xac, 0x15, 0xa5, 0x00, 0x56, 0x71, 0x1d, 0x42, 0xee, 0x04, 0x31, 0xbc, 0x57, 0x35, 0xd7, 0x6f, - 0x72, 0xc7, 0xf2, 0xc1, 0xcb, 0x07, 0xff, 0x70, 0x34, 0x08, 0x04, 0x21, 0x13, 0xa8, 0xca, 0x4b, - 0x8d, 0x57, 0x82, 0xe9, 0xb2, 0x4f, 0xdd, 0xa1, 0x4c, 0xeb, 0xc1, 0x0d, 0x9a, 0xef, 0xf0, 0x43, - 0x55, 0xd2, 0x87, 0xab, 0xd7, 0x58, 0xbe, 0xa5, 0x4f, 0x10, 0xbd, 0x84, 0x17, 0xc4, 0x5a, 0xdb, - 0x6d, 0xb6, 0xff, 0x44, 0x2a, 0xfe, 0xb1, 0x7d, 0x6b, 0xea, 0xdf, 0x5a, 0xfa, 0xb1, 0xf0, 0x53, - 0x7b, 0xbd, 0x6d, 0x55, 0xdd, 0xeb, 0x97, 0xa8, 0xbb, 0xe7, 0x09, 0x9e, 0x9e, 0x13, 0xc3, 0xe5, - 0xc2, 0x08, 0x24, 0x3e, 0xfa, 0xd7, 0x11, 0xfa, 0xc5, 0x5c, 0x36, 0x29, 0xf3, 0x64, 0xb7, 0x97, - 0xad, 0x4d, 0xfc, 0x12, 0x8b, 0xdd, 0xf7, 0x7a, 0xac, 0x4f, 0xc9, 0xdd, 0xf8, 0x9f, 0x9b, 0xaa, - 0xae, 0x6e, 0xaa, 0x4e, 0x6a, 0xaf, 0xc4, 0x02, 0x3a, 0xa7, 0xb1, 0xe1, 0x1c, 0x24, 0x42, 0x06, - 0x5f, 0xc4, 0x9c, 0x5d, 0xad, 0x6d, 0xf0, 0xd9, 0x05, 0x00, 0x07, 0xeb, 0x15, 0x2a, 0x82, 0x5c, - 0xb8, 0xc3, 0xf1, 0x51, 0x6a, 0x30, 0x7b, 0x67, 0x3c, 0x61, 0x11, 0xe6, 0x81, 0xc7, 0xc9, 0xe0, - 0x30, 0xc4, 0x80, 0x0b, 0x00, 0x42, 0xc0, 0x60, 0x0c, 0x65, 0xb8, 0xad, 0xcf, 0xc1, 0xcf, 0x0c, - 0x21, 0x32, 0x10, 0x00, 0xb1, 0x40, 0xe8, 0x32, 0x22, 0x1e, 0xd5, 0x14, 0xe4, 0x89, 0xe1, 0x65, - 0xb7, 0xa2, 0x23, 0x10, 0x84, 0x8c, 0x09, 0xc6, 0x87, 0x83, 0x02, 0x70, 0x69, 0x0d, 0xb3, 0x80, - 0x0e, 0xfb, 0x64, 0x4c, 0x64, 0x36, 0xaf, 0x66, 0x87, 0xcb, 0x0e, 0x58, 0x1f, 0xca, 0xa9, 0x21, - 0x24, 0x2f, 0x7e, 0x24, 0x32, 0x17, 0x13, 0x1e, 0x5a, 0x9a, 0xee, 0xe5, 0x61, 0x8c, 0x03, 0x96, - 0x00, 0x7a, 0xc4, 0x98, 0x5e, 0x2b, 0xc4, 0x01, 0x80, 0x28, 0x10, 0x38, 0x1e, 0x78, 0xc4, 0xe0, - 0x16, 0x05, 0x1d, 0xa0, 0xe0, 0x0c, 0x0a, 0xc0, 0x2a, 0x15, 0x42, 0x40, 0x50, 0x84, 0xa7, 0x80, - 0x2a, 0x0b, 0x59, 0x38, 0x2a, 0xee, 0x78, 0x7a, 0x8a, 0x1e, 0x16, 0x2f, 0x23, 0x38, 0x5d, 0x09, - 0x00, 0x60, 0xd0, 0x3f, 0x24, 0x14, 0x93, 0x5d, 0xbd, 0xef, 0x84, 0x4b, 0x02, 0xdc, 0x56, 0xee, - 0xf8, 0x3b, 0xe0, 0xf8, 0xb6, 0x42, 0x0e, 0x51, 0xf2, 0xe3, 0x7c, 0x0a, 0x01, 0x00, 0x46, 0x13, - 0x2e, 0x6e, 0x30, 0x54, 0x3d, 0x4a, 0x9f, 0x05, 0xb7, 0x9f, 0x25, 0x62, 0xf4, 0x5c, 0x78, 0x21, - 0xbb, 0xee, 0x3c, 0x12, 0x95, 0xdf, 0x77, 0xc8, 0x95, 0x89, 0xfa, 0x33, 0xfd, 0x6a, 0x4e, 0x8f, - 0x97, 0xc1, 0x09, 0x37, 0x74, 0x8b, 0x89, 0x53, 0xa7, 0xc1, 0x75, 0xdd, 0xf5, 0xac, 0x77, 0xc2, - 0x14, 0xa2, 0xbd, 0x6b, 0xaa, 0x97, 0x8b, 0xee, 0xfa, 0xab, 0xe7, 0xaa, 0xaa, 0xaf, 0xfa, 0xb5, - 0x73, 0xf5, 0x54, 0xc9, 0xff, 0xf4, 0x69, 0x7c, 0x96, 0x76, 0xd7, 0xc1, 0x2d, 0xa3, 0xe1, 0xb2, - 0xa9, 0xf3, 0x8b, 0xe7, 0x22, 0xbd, 0xb7, 0x37, 0xd3, 0xf8, 0x22, 0xde, 0xee, 0x7c, 0x14, 0x52, - 0x2e, 0x2e, 0xd5, 0xa7, 0x30, 0xa5, 0xe8, 0xf9, 0x4f, 0x01, 0x92, 0x10, 0x56, 0x30, 0xe9, 0x0c, - 0x00, 0x22, 0x0f, 0x22, 0x33, 0xd1, 0x3f, 0x5f, 0xff, 0x11, 0xea, 0x59, 0x81, 0x41, 0x70, 0x24, - 0x14, 0x8b, 0xc5, 0xef, 0x15, 0xc3, 0x6c, 0xc0, 0x03, 0x94, 0x27, 0xda, 0x04, 0x48, 0x3d, 0xba, - 0x08, 0xfb, 0x27, 0xb7, 0x6c, 0x0b, 0x06, 0xc1, 0x90, 0xb9, 0x73, 0x98, 0x0f, 0xe0, 0x70, 0xc0, - 0x7f, 0x01, 0x05, 0xc4, 0x2a, 0xf7, 0xae, 0xb8, 0x5c, 0x84, 0x00, 0x6a, 0x8b, 0x30, 0x60, 0x8c, - 0xb0, 0xfa, 0x1e, 0xaf, 0x17, 0xcf, 0x30, 0x9d, 0x85, 0xf8, 0x12, 0xb0, 0xbf, 0x05, 0x86, 0x58, - 0x16, 0x1b, 0x60, 0x7a, 0xc0, 0xef, 0x12, 0x66, 0xe0, 0xef, 0x11, 0xf7, 0x02, 0x80, 0x21, 0x12, - 0x34, 0x70, 0x4f, 0xe5, 0x41, 0x7a, 0x64, 0xea, 0xdb, 0xfc, 0xc3, 0xa4, 0x30, 0x00, 0x7f, 0x0d, - 0x74, 0x43, 0x1c, 0x5e, 0x30, 0xd7, 0x9f, 0xdf, 0x17, 0x51, 0x07, 0xfa, 0x9c, 0x07, 0xa9, 0x20, - 0x01, 0xa0, 0x35, 0x47, 0x57, 0x2f, 0x7d, 0xef, 0xc4, 0x82, 0x93, 0x1e, 0x3c, 0x9f, 0x42, 0x88, - 0xe8, 0x7f, 0x92, 0x58, 0xdb, 0x3e, 0xfd, 0x3c, 0xb0, 0x5e, 0x71, 0x50, 0xd8, 0x5c, 0x87, 0x1e, - 0xaf, 0xeb, 0x5f, 0xab, 0xa9, 0xd6, 0xc2, 0xec, 0xc0, 0x10, 0x82, 0x6a, 0x1f, 0xa9, 0xdd, 0xfd, - 0x13, 0xa2, 0x7f, 0x1d, 0x93, 0x80, 0x80, 0x82, 0x10, 0xab, 0xbe, 0x3a, 0xab, 0xa2, 0x80, 0xd7, - 0xd1, 0x1b, 0xeb, 0xdf, 0x45, 0x47, 0x6b, 0xa2, 0x37, 0x89, 0x57, 0xfa, 0xb7, 0xd5, 0xfe, 0xad, - 0xf5, 0x7f, 0xab, 0xfd, 0x5b, 0xea, 0xde, 0x27, 0xea, 0xf2, 0x74, 0x4e, 0xfa, 0xbd, 0x75, 0xea, - 0xe0, 0x94, 0xcd, 0x34, 0xd3, 0x5b, 0x4d, 0x38, 0xf0, 0x95, 0xa6, 0xb6, 0x9a, 0xdf, 0x04, 0x85, - 0xd5, 0x4d, 0x7c, 0xb7, 0x75, 0x5f, 0x0c, 0x1e, 0x2b, 0x8a, 0xde, 0xf9, 0xfe, 0xdb, 0x6d, 0xb7, - 0xe0, 0xbc, 0xc3, 0x8b, 0xea, 0xee, 0xee, 0xcb, 0x97, 0xd3, 0x53, 0x7f, 0xce, 0x45, 0x74, 0xd9, - 0xa7, 0xfe, 0x72, 0xaf, 0xa6, 0x9a, 0x69, 0xfa, 0xbd, 0xf4, 0x58, 0xc7, 0xd5, 0x8f, 0x10, 0x0a, - 0x6e, 0xfe, 0xee, 0xd3, 0x5f, 0x2a, 0xe2, 0x55, 0x8a, 0xea, 0xe7, 0x01, 0x92, 0x25, 0x47, 0x6c, - 0x36, 0x41, 0x80, 0x26, 0x23, 0x50, 0xda, 0xef, 0x3d, 0x5d, 0x5e, 0xf8, 0xbb, 0x8b, 0xc4, 0xf1, - 0xc5, 0xd9, 0x6f, 0xc3, 0x6e, 0x00, 0x6f, 0x42, 0x62, 0x30, 0x38, 0x9f, 0xf7, 0x11, 0xec, 0x86, - 0x48, 0x96, 0xdd, 0x02, 0xd9, 0xf8, 0x58, 0xc9, 0x1c, 0x48, 0xc0, 0xf0, 0xc0, 0x48, 0xc0, 0x94, - 0x37, 0x05, 0xd0, 0x6f, 0xf5, 0x45, 0x45, 0x0b, 0x90, 0x40, 0x04, 0x89, 0x20, 0x1f, 0x25, 0x07, - 0xc7, 0xd3, 0xd1, 0xde, 0x2b, 0xbd, 0xf1, 0x5d, 0x89, 0x60, 0xe6, 0x81, 0x6c, 0xfc, 0x25, 0x86, - 0xa1, 0x50, 0x06, 0xbe, 0x82, 0x40, 0xdb, 0xfa, 0xfe, 0xb1, 0x27, 0x61, 0xb2, 0x04, 0x80, 0x05, - 0xe7, 0x32, 0x80, 0x47, 0x29, 0x00, 0x82, 0xcb, 0xde, 0xac, 0xd0, 0xb3, 0xb2, 0x3b, 0xe2, 0xf1, - 0x4c, 0x4e, 0x07, 0x79, 0x37, 0x07, 0x7c, 0x0e, 0xef, 0x7f, 0xc1, 0x40, 0x09, 0x90, 0xa1, 0x49, - 0xd4, 0x28, 0xe8, 0x34, 0xcf, 0xef, 0xf7, 0xeb, 0x3a, 0x52, 0x68, 0x1f, 0x7e, 0x2b, 0x10, 0xe4, - 0xd8, 0x5d, 0xc1, 0x2b, 0x0a, 0xb3, 0xff, 0xd6, 0x6e, 0xdf, 0xf0, 0xd9, 0x08, 0x00, 0x29, 0x71, - 0x0d, 0xe4, 0xa2, 0xfb, 0x15, 0xc4, 0xe8, 0x4c, 0xd8, 0xf8, 0xa6, 0x4e, 0x37, 0x02, 0xa7, 0x04, - 0xed, 0xcf, 0xd7, 0xd5, 0xfe, 0x11, 0xae, 0x82, 0xad, 0x24, 0x40, 0x9f, 0x10, 0x71, 0x8b, 0x93, - 0x9b, 0xff, 0x88, 0xcf, 0x9e, 0x92, 0x5e, 0x7a, 0xa7, 0x2f, 0xf9, 0x78, 0xb1, 0x7a, 0xaa, 0xaa, - 0xa8, 0x8e, 0x53, 0x3d, 0xfe, 0x4b, 0x1b, 0x4c, 0x7f, 0x04, 0xa7, 0x55, 0xdd, 0xf6, 0xae, 0x6b, - 0xbe, 0xba, 0x95, 0x7f, 0x52, 0x27, 0xd6, 0xbe, 0xaf, 0xf0, 0x5d, 0xe4, 0x61, 0x6b, 0x6a, 0xe7, - 0xaa, 0x69, 0xb6, 0xdf, 0xf8, 0xa3, 0x3b, 0xea, 0xb9, 0xf1, 0x3e, 0x27, 0x82, 0x1f, 0x01, 0x52, - 0x24, 0x10, 0x95, 0xdd, 0xdf, 0xb0, 0xdb, 0x18, 0x00, 0xb6, 0x04, 0x5a, 0x48, 0x97, 0x3d, 0x49, - 0xab, 0xb7, 0xc5, 0xd5, 0x54, 0xbd, 0xa2, 0xef, 0x78, 0x6e, 0x50, 0x0b, 0xf4, 0x08, 0x80, 0x7e, - 0x97, 0xb3, 0xe3, 0x18, 0x0b, 0x37, 0x08, 0xc1, 0x30, 0xdc, 0xcf, 0xc2, 0x4f, 0x30, 0x3a, 0xc1, - 0x30, 0x0d, 0xc6, 0x30, 0x4c, 0x03, 0x71, 0xd0, 0x0e, 0xc0, 0xb0, 0x5e, 0x1c, 0x60, 0x16, 0x01, - 0xda, 0x0c, 0x4f, 0x7b, 0xc5, 0xe2, 0xf0, 0xbb, 0x14, 0x01, 0x11, 0x60, 0x94, 0x0a, 0xa8, 0xd1, - 0xbc, 0x9a, 0x8e, 0xde, 0xc5, 0x9f, 0xe5, 0xb2, 0x40, 0x98, 0x6e, 0x16, 0xd2, 0x02, 0xb0, 0xb6, - 0x17, 0x70, 0x76, 0x04, 0xee, 0x0e, 0xc0, 0x96, 0x39, 0x85, 0x41, 0x12, 0x58, 0x63, 0xc7, 0xe1, - 0xb6, 0x14, 0x00, 0x99, 0x2e, 0x47, 0x5d, 0x5f, 0x3a, 0xfd, 0x64, 0x83, 0xd9, 0xfa, 0xd6, 0x1b, - 0x62, 0xc5, 0x12, 0x39, 0x9c, 0x8c, 0x48, 0xc6, 0xb5, 0x88, 0xb0, 0xec, 0x62, 0xae, 0x2f, 0xa3, - 0xbb, 0xdf, 0xac, 0x2e, 0xc8, 0x00, 0x18, 0xca, 0x3d, 0x8f, 0x12, 0x14, 0x56, 0x7b, 0xd8, 0xcf, - 0xef, 0x79, 0xf9, 0xd8, 0x7f, 0x27, 0x68, 0x19, 0x98, 0xd5, 0x33, 0xc0, 0x58, 0x81, 0x00, 0x15, - 0xcd, 0x40, 0x22, 0x00, 0x54, 0x90, 0x31, 0x19, 0x08, 0x09, 0x18, 0x03, 0x40, 0xd9, 0x2f, 0x2f, - 0x00, 0x04, 0x1d, 0x67, 0x6b, 0xc0, 0x11, 0x54, 0xde, 0xef, 0x9f, 0xe8, 0x7f, 0x57, 0x09, 0x75, - 0x57, 0x7f, 0xc1, 0x37, 0x55, 0x77, 0xfb, 0xe8, 0x44, 0x1f, 0x5d, 0x89, 0xba, 0x3f, 0x7d, 0x7a, - 0x7e, 0x8f, 0x97, 0xd1, 0xbf, 0x7d, 0x15, 0xfe, 0xad, 0xf5, 0xef, 0xaf, 0x8f, 0x9e, 0xbe, 0xdb, - 0x6d, 0xb6, 0xb9, 0xc2, 0x26, 0x4e, 0x5d, 0x2e, 0xfa, 0xe8, 0x28, 0xf5, 0xd7, 0xab, 0x9e, 0xbe, - 0xaa, 0xab, 0xe8, 0xb9, 0xeb, 0xae, 0x52, 0xe2, 0x17, 0xb0, 0x87, 0x17, 0x8e, 0x9a, 0x7f, 0x0e, - 0x29, 0x0a, 0xfe, 0x92, 0x5e, 0xe8, 0xb0, 0x11, 0x7a, 0xfc, 0x36, 0xc2, 0x40, 0x0f, 0xfb, 0xc0, - 0x83, 0x7b, 0x29, 0xa1, 0xf6, 0x56, 0x5d, 0x2f, 0xf5, 0xc2, 0xe4, 0x28, 0x00, 0xeb, 0xe4, 0x04, - 0x7f, 0x0c, 0x76, 0xeb, 0xdd, 0x73, 0xb0, 0x88, 0x0c, 0x16, 0xb8, 0x3c, 0x50, 0x72, 0x84, 0x57, - 0x3c, 0xc2, 0xf1, 0x00, 0x1e, 0x5a, 0x04, 0x03, 0xca, 0xe4, 0x52, 0xb6, 0xb3, 0xb1, 0x67, 0x8b, - 0x0e, 0xf0, 0x89, 0xf8, 0x84, 0x5b, 0x27, 0x01, 0xa1, 0x63, 0x27, 0x01, 0xa1, 0x66, 0x31, 0x70, - 0xb0, 0xd4, 0x5c, 0x96, 0x18, 0x43, 0x40, 0x09, 0xca, 0xc9, 0xee, 0x63, 0x96, 0xff, 0x8d, 0x38, - 0xd3, 0x16, 0xc5, 0xb1, 0x6c, 0x5b, 0xcd, 0x85, 0xd8, 0xc0, 0x04, 0x87, 0x58, 0x2e, 0x3d, 0x79, - 0x45, 0x45, 0xf4, 0xc6, 0x70, 0x9a, 0x9c, 0x47, 0xe7, 0x99, 0xc3, 0x6c, 0x58, 0x11, 0xd9, 0x09, - 0xe6, 0x9a, 0x15, 0x9e, 0x78, 0x49, 0xe1, 0x3e, 0x9f, 0xf7, 0xbc, 0x26, 0xc5, 0x00, 0x01, 0x44, - 0xc4, 0x2c, 0x92, 0xc2, 0x06, 0x97, 0x16, 0x6f, 0x7b, 0xbe, 0x5a, 0xcf, 0xcc, 0xc1, 0xcf, 0x2e, - 0xee, 0x51, 0x3e, 0x1e, 0xee, 0xf0, 0xe8, 0x7c, 0x3b, 0x8b, 0x1e, 0x24, 0x22, 0x54, 0x13, 0xd1, - 0xfd, 0xda, 0xb7, 0xdb, 0xdb, 0x93, 0x87, 0xef, 0x75, 0x7b, 0xeb, 0x5a, 0xc9, 0xd3, 0x67, 0xff, - 0x45, 0xea, 0x89, 0x82, 0x3a, 0x74, 0xe3, 0x10, 0x5f, 0x04, 0x75, 0x5f, 0xab, 0xaf, 0x46, 0xf4, - 0x53, 0xae, 0xba, 0xb4, 0xdc, 0xfc, 0xc7, 0xc9, 0xa4, 0xdd, 0x74, 0x4e, 0xfa, 0xf7, 0xca, 0x46, - 0x9a, 0x69, 0xaf, 0x04, 0x27, 0xd5, 0x52, 0x7d, 0x13, 0x2b, 0xe8, 0xe4, 0x4a, 0xc4, 0x02, 0x8a, - 0x46, 0xa6, 0x6a, 0x7e, 0xe0, 0x20, 0x44, 0x82, 0x3a, 0xaf, 0xd8, 0x5c, 0x82, 0x00, 0x07, 0xfc, - 0x93, 0x1d, 0x86, 0xa5, 0x7d, 0x15, 0x17, 0xaa, 0xa9, 0x20, 0x8d, 0xe1, 0xb8, 0xa0, 0x02, 0x92, - 0xcc, 0x90, 0x12, 0x87, 0x12, 0xbd, 0xe9, 0xfd, 0x3d, 0xde, 0x35, 0x00, 0x0b, 0x5e, 0xf7, 0x85, - 0xc9, 0x00, 0x6d, 0x66, 0x81, 0x0a, 0xf7, 0x79, 0xa1, 0x62, 0x70, 0xbf, 0x0a, 0x9b, 0x85, 0xb2, - 0x50, 0xdc, 0x2c, 0x7e, 0xc3, 0x6c, 0x80, 0x01, 0xb7, 0x0d, 0xa2, 0x38, 0x5b, 0x60, 0x47, 0x6f, - 0xd7, 0xf7, 0x7c, 0x0b, 0xf3, 0xbd, 0x37, 0xa4, 0xe2, 0x70, 0x38, 0xf1, 0xf7, 0x38, 0x3d, 0x9c, - 0x65, 0x9b, 0xed, 0xf8, 0x79, 0x40, 0x22, 0xa6, 0x04, 0x60, 0x74, 0x3a, 0xbe, 0xe9, 0xa7, 0x4f, - 0x27, 0x8d, 0x6d, 0x4f, 0xb7, 0xe1, 0xb5, 0x00, 0x04, 0x56, 0x0a, 0xb0, 0x93, 0x45, 0xdb, 0x24, - 0x52, 0xe2, 0x69, 0xc6, 0x4e, 0xde, 0x9d, 0xd1, 0x72, 0xec, 0x99, 0xc0, 0x8c, 0x49, 0x87, 0x11, - 0x8a, 0xec, 0x57, 0x98, 0xab, 0xff, 0x0d, 0xb1, 0x20, 0x04, 0xd6, 0xd8, 0x26, 0x51, 0xf3, 0x57, - 0xbb, 0xdd, 0xc5, 0x6c, 0x9d, 0x90, 0xad, 0xc5, 0x62, 0x5e, 0x7b, 0xcc, 0x22, 0xb3, 0x5e, 0xf8, - 0x69, 0x8c, 0x00, 0x0f, 0x29, 0x3b, 0xa0, 0x46, 0x25, 0x24, 0xa6, 0x2f, 0xf8, 0x5d, 0x45, 0x30, - 0x51, 0xfc, 0x3a, 0x7c, 0xbd, 0x7f, 0x16, 0x62, 0xe3, 0xa7, 0xeb, 0x3d, 0xee, 0xe5, 0x99, 0x78, - 0xa7, 0xe7, 0xd0, 0x64, 0x76, 0xf8, 0x22, 0xae, 0xe5, 0x4f, 0xa3, 0x45, 0xf5, 0xeb, 0xe6, 0x3d, - 0x6b, 0xeb, 0xfb, 0xe8, 0x89, 0x51, 0xfa, 0x2f, 0x49, 0x81, 0xe0, 0x14, 0x05, 0x00, 0xd0, 0x00, - 0x21, 0xc1, 0xc6, 0x15, 0x03, 0x4e, 0xa4, 0x06, 0x80, 0x00, 0x80, 0x4a, 0x90, 0x06, 0x80, 0x00, - 0x80, 0x1a, 0x95, 0x27, 0xe2, 0xbf, 0xc1, 0xc0, 0x34, 0x00, 0x75, 0x0e, 0x06, 0x80, 0x2a, 0x88, - 0x5a, 0x2a, 0x87, 0x11, 0x40, 0x08, 0x44, 0x0d, 0x6b, 0x08, 0x4e, 0x94, 0x6e, 0xd7, 0xfd, 0x62, - 0xad, 0xa6, 0x2a, 0xe4, 0x15, 0x62, 0xae, 0xb1, 0x56, 0x23, 0x23, 0x2c, 0x5b, 0x16, 0xfe, 0x1c, - 0x94, 0x01, 0x40, 0x06, 0xe3, 0x1f, 0xb3, 0xf3, 0xfe, 0xdb, 0x62, 0xad, 0xb6, 0xc5, 0x58, 0xab, - 0x73, 0xfb, 0x6d, 0xf0, 0x40, 0x0b, 0x0e, 0xab, 0xe0, 0xf1, 0xe0, 0x3c, 0x79, 0xba, 0x55, 0xf2, - 0x97, 0x2e, 0x17, 0x3d, 0x5b, 0xea, 0xd5, 0xc2, 0x45, 0x55, 0x77, 0x77, 0xf8, 0x8b, 0xe8, 0xcf, - 0xf5, 0x65, 0x70, 0xd6, 0xb5, 0x65, 0x34, 0xd3, 0x4f, 0xfc, 0xf5, 0x72, 0xff, 0xdf, 0x56, 0xfa, - 0xde, 0xb0, 0x80, 0xb3, 0xee, 0xfb, 0xbf, 0x12, 0x08, 0xaa, 0xb8, 0xa2, 0xe0, 0x10, 0x10, 0x80, - 0xbe, 0xef, 0xbb, 0xc2, 0xe4, 0x08, 0x00, 0x0a, 0xb6, 0x14, 0x12, 0x7e, 0xca, 0x28, 0x34, 0xae, - 0xff, 0x55, 0x55, 0x4c, 0x1e, 0xb9, 0x3b, 0x38, 0xec, 0x16, 0x70, 0xd6, 0x00, 0x1a, 0xa2, 0x3b, - 0x66, 0x0a, 0x14, 0x0e, 0x19, 0xa7, 0x4d, 0x37, 0x64, 0x6e, 0x78, 0x3b, 0xe2, 0xb8, 0xae, 0xeb, - 0x15, 0xb6, 0x2f, 0x00, 0x0c, 0x26, 0x48, 0x01, 0x05, 0x63, 0x6f, 0x39, 0x90, 0xac, 0xe6, 0x85, - 0xec, 0x8b, 0xd8, 0x44, 0xf6, 0x05, 0x62, 0xe2, 0xb1, 0x74, 0x47, 0xac, 0x16, 0x07, 0xac, 0x43, - 0x44, 0x80, 0x1f, 0x6c, 0x66, 0xaa, 0x30, 0xde, 0xc1, 0x62, 0x5f, 0xd3, 0x20, 0x78, 0x30, 0x92, - 0x67, 0x07, 0x1e, 0x71, 0xe7, 0x1e, 0x71, 0xf3, 0x19, 0x7a, 0x67, 0x1e, 0x71, 0xe7, 0x1e, 0x71, - 0xed, 0x86, 0x94, 0x01, 0x41, 0x1f, 0xc2, 0xb5, 0xcf, 0x73, 0xf7, 0x57, 0xb6, 0x7f, 0x7b, 0x9f, - 0xd7, 0xc7, 0x3f, 0x0d, 0xa8, 0x0b, 0x48, 0x63, 0x4a, 0xb0, 0x59, 0x73, 0x49, 0xbf, 0x4c, 0xc9, - 0x75, 0xd7, 0x47, 0x74, 0x5d, 0x94, 0x6c, 0x95, 0x6e, 0x0b, 0x6f, 0x81, 0x6d, 0x67, 0xfd, 0x7c, - 0x22, 0x04, 0x80, 0xa1, 0x1b, 0x10, 0x0f, 0x1e, 0xa1, 0xcf, 0x27, 0x1a, 0x87, 0x43, 0xca, 0x83, - 0xba, 0x5a, 0xce, 0x1e, 0x7e, 0x58, 0xc9, 0xea, 0x16, 0x10, 0xc1, 0x0e, 0x0e, 0x21, 0x75, 0x50, - 0x30, 0x01, 0x10, 0x2c, 0x44, 0x2e, 0x01, 0x80, 0x01, 0x72, 0x0a, 0x63, 0x10, 0x30, 0x00, 0x10, - 0x0b, 0xe0, 0xe8, 0x30, 0x55, 0x54, 0x40, 0xc0, 0x02, 0xa0, 0xc8, 0x25, 0x57, 0xef, 0xaa, 0xa8, - 0x60, 0x3a, 0x05, 0xaf, 0xd7, 0x01, 0x0e, 0x75, 0xe3, 0x54, 0x33, 0xf0, 0x48, 0x11, 0xb7, 0x37, - 0xc3, 0xe4, 0xaa, 0xef, 0xab, 0xc6, 0xf0, 0x43, 0xba, 0xde, 0xba, 0xfe, 0x83, 0x71, 0xc0, 0x02, - 0x56, 0x60, 0x02, 0xf1, 0x96, 0x88, 0x1c, 0xe0, 0x00, 0xa8, 0xe6, 0xe3, 0x9b, 0xb3, 0xb3, 0x96, - 0x16, 0x50, 0x03, 0x64, 0x8e, 0x39, 0x95, 0x52, 0x78, 0xe6, 0x23, 0x20, 0xf8, 0x00, 0x08, 0x00, - 0xdb, 0x6f, 0x4d, 0x3e, 0x1e, 0xc0, 0x30, 0x04, 0x80, 0xdf, 0x03, 0x16, 0x26, 0x66, 0xe4, 0x59, - 0x71, 0x8d, 0xab, 0x71, 0x34, 0xf8, 0xeb, 0xef, 0xe0, 0xeb, 0xe3, 0xbf, 0x15, 0x62, 0xac, 0xb5, - 0x8a, 0xbd, 0x0d, 0x97, 0xc1, 0xff, 0x4d, 0xf0, 0xd3, 0x80, 0x1c, 0xb0, 0xf1, 0x8a, 0x3f, 0x56, - 0x93, 0xa6, 0x9f, 0x9f, 0xbf, 0xbf, 0xbf, 0xb6, 0xdb, 0xfb, 0xf8, 0xc1, 0x88, 0xac, 0x34, 0x8a, - 0x00, 0x48, 0xe3, 0xd0, 0x94, 0xf0, 0xbb, 0xfd, 0xb6, 0xeb, 0x6d, 0xb6, 0xdb, 0x6c, 0x55, 0x16, - 0xf0, 0x18, 0x00, 0x41, 0x05, 0x67, 0x15, 0xe2, 0x83, 0x15, 0x8a, 0x00, 0xc5, 0x18, 0x90, 0x07, - 0x0f, 0x1c, 0x7e, 0xa9, 0x85, 0x73, 0x09, 0x66, 0xcd, 0xdc, 0xbc, 0xc2, 0x1f, 0x5f, 0x04, 0x7d, - 0x57, 0x5e, 0x25, 0x58, 0xae, 0x08, 0x8e, 0x92, 0x49, 0x24, 0xdf, 0x58, 0xdf, 0x45, 0x88, 0xfa, - 0xe8, 0x8d, 0xc4, 0x54, 0x76, 0xfa, 0xf7, 0x10, 0x25, 0x72, 0xe0, 0x36, 0x6b, 0x97, 0x10, 0x19, - 0x05, 0x54, 0x92, 0xef, 0x78, 0xae, 0x21, 0xa1, 0xd3, 0x0f, 0x10, 0x24, 0x00, 0x47, 0x00, 0x35, - 0xd0, 0x9c, 0x08, 0xe0, 0x17, 0x9f, 0xd4, 0xe4, 0xec, 0xf1, 0xb3, 0xeb, 0x25, 0xe4, 0xf1, 0x97, - 0xc7, 0x7a, 0x47, 0xf5, 0xe1, 0x84, 0x70, 0x01, 0x88, 0x06, 0x55, 0x92, 0xa8, 0x3b, 0x9e, 0x1b, - 0x3f, 0x97, 0xd6, 0xdd, 0xdb, 0xaf, 0x9f, 0x97, 0x96, 0xd2, 0xa8, 0x5d, 0x90, 0x03, 0xa4, 0x38, - 0x1a, 0xa1, 0xd5, 0xd7, 0xf6, 0xae, 0xbe, 0xec, 0x32, 0x8e, 0x00, 0x1b, 0x9d, 0xa4, 0xe8, 0x52, - 0xf0, 0xd8, 0x6e, 0xf5, 0xe9, 0xb3, 0xcc, 0x93, 0xe4, 0xf4, 0xd9, 0xc9, 0xce, 0xf4, 0x51, 0x86, - 0x14, 0x00, 0xc0, 0xac, 0x88, 0x38, 0x1d, 0xba, 0x7d, 0x6b, 0xed, 0xb7, 0xa6, 0x78, 0x38, 0x85, - 0x22, 0x38, 0x3a, 0x02, 0xf6, 0x4a, 0x15, 0x24, 0x00, 0x02, 0x0a, 0x53, 0x29, 0x67, 0x18, 0x80, - 0x71, 0xfc, 0x32, 0x00, 0x0a, 0x85, 0x8d, 0x4a, 0x96, 0xcb, 0x18, 0x80, 0x73, 0x2c, 0x36, 0xc6, - 0x00, 0x28, 0x88, 0x7a, 0x8f, 0x4c, 0xb2, 0xc3, 0xcf, 0x2b, 0x6f, 0x7f, 0x2d, 0x61, 0xd0, 0x15, - 0x43, 0xb7, 0xbd, 0xcf, 0x01, 0x60, 0xff, 0x3c, 0x05, 0x83, 0xf0, 0xef, 0xbf, 0xc0, 0x35, 0x00, - 0x2e, 0x01, 0x48, 0xf2, 0xa0, 0x21, 0xd6, 0xc5, 0xc4, 0x6a, 0x6a, 0xaa, 0xb0, 0xf7, 0x1c, 0x00, - 0x0d, 0x7c, 0x24, 0xca, 0x0c, 0x4c, 0x10, 0x11, 0x02, 0xb1, 0x8e, 0x4e, 0xb3, 0xef, 0x90, 0xa9, - 0x24, 0x92, 0x5e, 0x08, 0x75, 0xbb, 0xdf, 0x57, 0x8c, 0xea, 0xd4, 0x13, 0x8a, 0x01, 0xbb, 0x1d, - 0x4d, 0xef, 0x7f, 0xbd, 0xf1, 0x64, 0x30, 0x24, 0x05, 0x2a, 0x8d, 0x8e, 0x24, 0x09, 0xa6, 0x60, - 0xa2, 0x2d, 0x8e, 0x21, 0x40, 0x8c, 0x56, 0x02, 0xad, 0xc7, 0x78, 0x10, 0x00, 0x92, 0x14, 0x38, - 0x90, 0x70, 0xf7, 0x04, 0xb9, 0x52, 0x34, 0x75, 0x48, 0x98, 0x28, 0xec, 0xd4, 0x9e, 0x3b, 0x2f, - 0xd7, 0xbe, 0x09, 0x24, 0xce, 0xe7, 0xcd, 0x49, 0x24, 0x92, 0x7c, 0xb5, 0x5c, 0x9c, 0x16, 0x09, - 0x77, 0xd5, 0x75, 0x5c, 0xa9, 0x5c, 0x10, 0xda, 0x69, 0x1a, 0x3d, 0x57, 0x27, 0x55, 0xf5, 0x67, - 0xc1, 0x0d, 0xd5, 0xd7, 0x5f, 0x58, 0xb1, 0xb8, 0x64, 0x03, 0xc6, 0x4c, 0x64, 0x7c, 0x41, 0x26, - 0xc3, 0x88, 0x20, 0x00, 0xff, 0xb2, 0x30, 0xcd, 0xb7, 0x9b, 0xca, 0xab, 0x74, 0xfc, 0x3d, 0xf1, - 0x55, 0xd3, 0x4d, 0x34, 0xf8, 0x5d, 0x84, 0x80, 0x1a, 0x9a, 0xc6, 0x70, 0x45, 0xf1, 0x75, 0xbd, - 0xc5, 0xe5, 0xf7, 0x64, 0xe6, 0x85, 0x61, 0x76, 0x50, 0x02, 0x97, 0x38, 0x15, 0x30, 0xe0, 0xff, - 0x65, 0x81, 0x21, 0x15, 0x8b, 0x8a, 0x34, 0x95, 0x81, 0xf2, 0xc1, 0xde, 0xb2, 0xe9, 0x78, 0xa0, - 0xcb, 0xc5, 0x07, 0x58, 0x5e, 0x40, 0x03, 0x3b, 0x13, 0x3c, 0x04, 0x46, 0xeb, 0xc7, 0xf3, 0xae, - 0xba, 0xd5, 0x6b, 0x63, 0x80, 0x24, 0x00, 0x09, 0x00, 0x50, 0xa2, 0x03, 0x82, 0x0e, 0x08, 0xf6, - 0xe1, 0x21, 0x53, 0x8e, 0x0f, 0x78, 0x3c, 0xf0, 0x29, 0x52, 0x40, 0x56, 0x31, 0xe0, 0xf8, 0xf0, - 0x3c, 0x3c, 0x01, 0xe5, 0x80, 0x01, 0x78, 0xe8, 0x0f, 0xb6, 0x17, 0x50, 0x02, 0x92, 0x04, 0xa7, - 0x5c, 0xea, 0x38, 0x3f, 0x27, 0xdf, 0xa8, 0x51, 0xd0, 0xab, 0x60, 0x90, 0x70, 0xe8, 0x56, 0xb8, - 0xbb, 0x61, 0x89, 0xc0, 0x13, 0x4e, 0x71, 0x23, 0xc1, 0x1e, 0xb5, 0xaf, 0xea, 0xbb, 0xba, 0x3b, - 0x85, 0xc8, 0x38, 0x00, 0xd5, 0x54, 0x1d, 0x46, 0xaf, 0xdf, 0xf7, 0x9f, 0xc4, 0x60, 0x98, 0xa6, - 0x21, 0xe5, 0xb0, 0xd9, 0x02, 0x60, 0x10, 0x69, 0x4a, 0x9e, 0x43, 0xa1, 0xef, 0xa1, 0xd4, 0xf7, - 0xe1, 0xf1, 0xc4, 0x7e, 0x5e, 0x9f, 0xc2, 0x12, 0x87, 0xde, 0x08, 0x7b, 0x01, 0xac, 0x95, 0x92, - 0xfc, 0xec, 0xa0, 0xe2, 0x7f, 0xca, 0x45, 0x55, 0x5f, 0x54, 0x76, 0xb9, 0xeb, 0xe9, 0xa6, 0x9a, - 0x7e, 0xaf, 0xf4, 0x57, 0x0f, 0xab, 0x4b, 0xd5, 0x1d, 0x98, 0x37, 0x0a, 0x00, 0x06, 0xb1, 0x01, - 0xda, 0x56, 0x32, 0x01, 0xc9, 0x1d, 0xaf, 0xbc, 0xfd, 0xb6, 0xdb, 0x6d, 0xb1, 0xd7, 0xc1, 0xd7, - 0xc7, 0x7e, 0x8d, 0xaf, 0xe7, 0xf0, 0xd1, 0x20, 0x08, 0x29, 0xe4, 0x22, 0x38, 0x44, 0xd3, 0xd3, - 0x4d, 0x34, 0xff, 0xf1, 0xcc, 0x3c, 0x48, 0x01, 0xb8, 0x77, 0x58, 0x66, 0x02, 0xf4, 0xa7, 0xa6, - 0x4e, 0x9c, 0x7e, 0x4f, 0x24, 0xf3, 0xc3, 0xdf, 0xe9, 0xf1, 0xcc, 0xe0, 0x07, 0x77, 0xc8, 0x80, - 0x39, 0x28, 0xa7, 0x1c, 0xce, 0x00, 0xf3, 0xe4, 0xd5, 0x30, 0xf4, 0x53, 0xf5, 0x72, 0x23, 0x82, - 0x33, 0xea, 0xaf, 0x7c, 0x11, 0xf5, 0x52, 0xa5, 0xf3, 0x8f, 0x4b, 0xf9, 0x1f, 0x23, 0xe1, 0x12, - 0x68, 0x38, 0x0c, 0xfb, 0x9e, 0x16, 0xf6, 0x21, 0x04, 0x38, 0x00, 0x82, 0xfd, 0x5f, 0x08, 0x75, - 0x6f, 0x7f, 0x8f, 0x66, 0x01, 0x75, 0xb4, 0x1c, 0x7c, 0xbd, 0xff, 0x18, 0x82, 0xb4, 0x70, 0x01, - 0xc3, 0x10, 0x80, 0x0f, 0x64, 0x69, 0x9e, 0xba, 0xfd, 0x6b, 0x01, 0x60, 0x36, 0x1e, 0x61, 0x20, - 0x02, 0xa3, 0xd8, 0x09, 0x4e, 0x80, 0x50, 0x7e, 0x12, 0x7b, 0x62, 0x7e, 0xb7, 0xb2, 0xcc, 0xb6, - 0xb5, 0x52, 0x40, 0xf7, 0xc9, 0x6c, 0x76, 0x6d, 0xfd, 0xd6, 0x17, 0xc0, 0x35, 0x5a, 0x29, 0x0c, - 0x4b, 0x5f, 0xa5, 0xab, 0x28, 0xe3, 0xc1, 0xf0, 0x84, 0x7b, 0x09, 0x83, 0x28, 0xbb, 0x84, 0x81, - 0x2b, 0x70, 0xf1, 0x83, 0x20, 0x78, 0x30, 0x38, 0xc1, 0xb0, 0xdb, 0x80, 0x4c, 0x77, 0x05, 0x6b, - 0x71, 0xdf, 0xd2, 0x43, 0xfa, 0x4b, 0x4a, 0xb5, 0x9e, 0xfd, 0x78, 0x5d, 0xc0, 0x1b, 0x58, 0x89, - 0x00, 0x53, 0x8d, 0x1a, 0xae, 0x58, 0x2a, 0x1a, 0xaa, 0xb6, 0x1c, 0x2d, 0xd8, 0x5f, 0x02, 0x08, - 0xcf, 0x0a, 0xee, 0xec, 0x6f, 0x3d, 0x85, 0x9e, 0xc3, 0x5c, 0x48, 0xc2, 0x24, 0x58, 0xeb, 0x4f, - 0xc0, 0x35, 0x00, 0x12, 0x00, 0xa0, 0xb1, 0x58, 0xa0, 0xcb, 0xcb, 0x18, 0x90, 0x54, 0x1e, 0x79, - 0xe2, 0xa0, 0xb3, 0x2f, 0x2c, 0x19, 0x79, 0x60, 0xce, 0x58, 0x2f, 0x57, 0x43, 0xfe, 0x46, 0x1c, - 0x27, 0x18, 0x00, 0x2f, 0x86, 0xac, 0xc3, 0x35, 0x6e, 0x1c, 0x44, 0xf5, 0x7b, 0xc4, 0x79, 0x76, - 0x23, 0xd9, 0x1e, 0xa2, 0x3c, 0x3d, 0x16, 0x0b, 0xc3, 0xe1, 0x63, 0x00, 0xa8, 0x01, 0x44, 0x15, - 0x9c, 0xa2, 0x35, 0xca, 0x08, 0x1a, 0xbf, 0x8e, 0x08, 0xfe, 0xc6, 0x8b, 0x3e, 0x76, 0x65, 0x26, - 0xe9, 0x30, 0xc9, 0x02, 0x20, 0x82, 0x47, 0x3c, 0xc9, 0xa7, 0xff, 0xf8, 0x8d, 0x8c, 0x6b, 0x1f, - 0x1c, 0x00, 0x6c, 0x61, 0x06, 0x00, 0xeb, 0x6f, 0x84, 0x52, 0x78, 0x64, 0x29, 0x55, 0xc2, 0xdf, - 0x13, 0x7d, 0xf8, 0xbf, 0x17, 0x54, 0xe8, 0xfd, 0x53, 0xaf, 0x54, 0xc8, 0x54, 0x08, 0x20, 0x2a, - 0x46, 0x86, 0x84, 0x80, 0x00, 0x81, 0xbe, 0x07, 0x70, 0x00, 0x10, 0x33, 0x50, 0xe0, 0xd0, 0x00, - 0x10, 0x09, 0x50, 0xe0, 0xd0, 0x00, 0x75, 0x0e, 0xe0, 0x00, 0x20, 0x46, 0xa1, 0xdc, 0x00, 0x04, - 0x05, 0xd4, 0x38, 0xe0, 0x00, 0x20, 0x1e, 0xa1, 0xdc, 0x00, 0x04, 0x01, 0xd4, 0x3a, 0x06, 0x2f, - 0x83, 0xa0, 0x67, 0xf3, 0x72, 0x22, 0xa0, 0x0b, 0xf8, 0xa8, 0x0b, 0xfa, 0x64, 0x70, 0x48, 0x0e, - 0x03, 0x8a, 0xb1, 0x57, 0xf0, 0xe2, 0x28, 0x07, 0x45, 0x80, 0xab, 0x8a, 0x31, 0x12, 0xc2, 0x6e, - 0xab, 0x7b, 0x72, 0xf2, 0xf8, 0xdb, 0xe3, 0x4d, 0x31, 0x6c, 0x52, 0xcb, 0x2c, 0x5b, 0x4f, 0x22, - 0x49, 0x6d, 0xb7, 0xa6, 0x9c, 0x3c, 0x8a, 0x00, 0x5a, 0x02, 0xad, 0x5d, 0x46, 0x62, 0x76, 0xf4, - 0xd3, 0x27, 0x8c, 0xdd, 0x47, 0x0c, 0xe5, 0x96, 0xce, 0xce, 0x3e, 0xe3, 0xee, 0x07, 0xd8, 0xca, - 0xd3, 0x16, 0xe9, 0xf0, 0xe4, 0xe0, 0x09, 0xc3, 0x6b, 0x99, 0xc6, 0xaf, 0x95, 0x3d, 0x3a, 0x69, - 0xa6, 0x9f, 0x4d, 0x3b, 0x60, 0x62, 0xe0, 0x50, 0xed, 0xb7, 0x4e, 0x9c, 0x9d, 0x6a, 0xfa, 0xb4, - 0x47, 0x0e, 0x13, 0x51, 0x4d, 0x55, 0xa8, 0xd2, 0xfe, 0x03, 0x44, 0x02, 0x42, 0x1b, 0x3e, 0x15, - 0x56, 0x20, 0x38, 0x28, 0x62, 0xa5, 0x8e, 0x0c, 0xed, 0xfc, 0x23, 0x12, 0x1b, 0xf0, 0x02, 0x27, - 0x4d, 0xb6, 0xdb, 0x7f, 0x09, 0x10, 0x81, 0x9a, 0xe1, 0xc4, 0x1e, 0x7a, 0x69, 0xd6, 0xb8, 0xf6, - 0x13, 0x01, 0xc9, 0x00, 0x20, 0xc9, 0x82, 0x00, 0x6c, 0x70, 0x01, 0x88, 0x30, 0x88, 0x30, 0xfc, - 0xe8, 0x60, 0x0f, 0x49, 0x74, 0x34, 0x8c, 0x02, 0xad, 0xab, 0x7d, 0xff, 0xf7, 0xbc, 0x10, 0xc6, - 0xd4, 0x34, 0x40, 0x80, 0x01, 0xc5, 0x32, 0xb0, 0xd9, 0x4f, 0xcd, 0x9b, 0xd6, 0xb1, 0x5c, 0x57, - 0xf7, 0x6d, 0xf8, 0x26, 0x43, 0x48, 0xa0, 0x14, 0xc3, 0x98, 0x46, 0x69, 0x76, 0x6c, 0xfe, 0x25, - 0x0d, 0x09, 0x5c, 0x16, 0x1b, 0x60, 0x4e, 0x38, 0x84, 0x58, 0xc9, 0x01, 0x3e, 0xd8, 0xbb, 0x9d, - 0x84, 0x29, 0x84, 0xac, 0x61, 0xb6, 0x60, 0x42, 0x50, 0xeb, 0x0e, 0xc2, 0xda, 0xc9, 0xea, 0xea, - 0xeb, 0x5a, 0xe9, 0x3f, 0x5e, 0x13, 0x65, 0x06, 0x0c, 0xa0, 0x03, 0xa9, 0xfb, 0xdf, 0x7b, 0x1b, - 0xce, 0xc4, 0x2e, 0x48, 0x04, 0xa1, 0xa4, 0xc0, 0x72, 0x8c, 0xc3, 0x58, 0x96, 0xb1, 0x1f, 0x4d, - 0x4b, 0x1b, 0xa0, 0x58, 0xf5, 0xb6, 0x1b, 0x89, 0x00, 0x88, 0xf2, 0x0a, 0xa0, 0xbe, 0xd9, 0x1a, - 0x2f, 0x3c, 0x14, 0xe3, 0xe9, 0x16, 0xfd, 0x70, 0xbb, 0x30, 0x01, 0x3e, 0xa2, 0x66, 0x21, 0x8f, - 0x6e, 0xbd, 0xe4, 0x69, 0x37, 0x04, 0x61, 0x11, 0x59, 0xd6, 0x46, 0x09, 0xb8, 0x11, 0x60, 0xf3, - 0x0d, 0x9c, 0x32, 0x05, 0x90, 0xa1, 0x8b, 0x01, 0x00, 0xfc, 0xf0, 0x1e, 0x15, 0x4c, 0x00, 0x04, - 0x00, 0x52, 0x7c, 0x07, 0xdc, 0xb7, 0x21, 0xc6, 0xa4, 0xc2, 0xd5, 0xdc, 0x2c, 0xe0, 0x09, 0x2a, - 0x9c, 0x38, 0xc0, 0x12, 0x87, 0x62, 0x52, 0x30, 0x41, 0x21, 0xb6, 0x17, 0x04, 0x29, 0x92, 0x7e, - 0x7f, 0xdf, 0x7f, 0x1c, 0x06, 0x38, 0xef, 0x7f, 0xc0, 0x2a, 0x00, 0x79, 0x1a, 0x3e, 0x27, 0xc6, - 0xbc, 0x7f, 0x8a, 0x62, 0x99, 0x66, 0x29, 0x9e, 0x60, 0x59, 0x89, 0x08, 0x00, 0x04, 0xbc, 0x53, - 0x14, 0xc2, 0xdf, 0x16, 0x60, 0x3a, 0x00, 0xbf, 0x82, 0xa7, 0x1f, 0x08, 0x2d, 0x2a, 0xfc, 0xda, - 0x6d, 0x88, 0x5c, 0x54, 0x60, 0x24, 0x5a, 0xbf, 0x9c, 0xeb, 0x37, 0x46, 0x6f, 0xa2, 0x45, 0x13, - 0x07, 0x00, 0x2a, 0x11, 0x2b, 0xe0, 0x84, 0xb7, 0xbf, 0x71, 0x02, 0x04, 0xdd, 0xfc, 0x6b, 0xca, - 0xbc, 0x3b, 0x98, 0xd7, 0xb5, 0x0e, 0x28, 0x4b, 0x76, 0x14, 0xf4, 0xd3, 0xfd, 0xbe, 0x95, 0x73, - 0x6f, 0xc3, 0x8a, 0x02, 0x3d, 0xb5, 0x37, 0x7f, 0xfd, 0x2e, 0x37, 0xa4, 0x97, 0xc3, 0x8a, 0x03, - 0x37, 0xe4, 0x62, 0x3b, 0x7d, 0x34, 0xd3, 0xb4, 0xd6, 0xd3, 0x58, 0x19, 0x43, 0x38, 0x9b, 0x8e, - 0xdf, 0x6e, 0x9f, 0x0f, 0x28, 0x03, 0x9a, 0xf9, 0x19, 0x7f, 0x4f, 0xfc, 0x60, 0xe9, 0xee, 0x96, - 0xbc, 0xc9, 0x13, 0x4e, 0xdc, 0x3c, 0x48, 0x04, 0x57, 0xb8, 0x01, 0x2b, 0x66, 0xfb, 0x6d, 0xf6, - 0xe3, 0xdf, 0x6e, 0xce, 0x98, 0xb6, 0x31, 0x6d, 0x88, 0x76, 0x38, 0xd3, 0xb6, 0xdc, 0x38, 0xa0, - 0x0f, 0x64, 0xf0, 0xae, 0x3f, 0xdb, 0x6e, 0xdb, 0x76, 0xdb, 0x1d, 0xba, 0x69, 0xa6, 0xd3, 0x54, - 0xe1, 0xcc, 0x03, 0x5a, 0xc9, 0x5e, 0xaf, 0xdb, 0xb7, 0x6b, 0x27, 0xc6, 0x08, 0x9a, 0x5d, 0x2e, - 0xbf, 0x57, 0x2f, 0xc3, 0xce, 0x00, 0x3b, 0xfb, 0x22, 0x6b, 0x68, 0x6d, 0xb3, 0x7d, 0xb3, 0xff, - 0xae, 0xed, 0xb8, 0x69, 0x93, 0x1a, 0x06, 0xdd, 0xdd, 0x5d, 0xb7, 0xc3, 0x6c, 0x80, 0x02, 0x54, - 0xbf, 0x01, 0xa1, 0x28, 0x76, 0x3c, 0xfe, 0x15, 0xc5, 0x7e, 0x58, 0x0a, 0xe2, 0xb7, 0x7b, 0x71, - 0x2f, 0x6a, 0x7d, 0xbf, 0x0e, 0xa3, 0x80, 0x0a, 0xbe, 0xe0, 0x08, 0xab, 0xe8, 0xc2, 0x1f, 0xc1, - 0xfe, 0xbf, 0x07, 0xfb, 0xd8, 0x97, 0xb1, 0x38, 0xba, 0x8b, 0x9e, 0xc1, 0xd1, 0x74, 0x43, 0xb7, - 0x8e, 0xfb, 0xab, 0xac, 0x2e, 0x41, 0x40, 0x0a, 0xdd, 0x04, 0x83, 0x97, 0x66, 0x8b, 0xfa, 0xca, - 0xef, 0x66, 0x1b, 0x67, 0x00, 0xc1, 0x1c, 0xe7, 0xf9, 0xeb, 0x49, 0x59, 0x5e, 0xe6, 0x83, 0xe0, - 0xe8, 0x3e, 0x03, 0xfd, 0xef, 0xf8, 0x6d, 0xc0, 0x94, 0x0b, 0x49, 0xec, 0x7d, 0x24, 0x78, 0xbb, - 0x1f, 0x6f, 0xcb, 0xd8, 0xf2, 0xf6, 0x3e, 0xf7, 0x7f, 0xeb, 0x86, 0xd9, 0xc0, 0x7b, 0x5a, 0xcf, - 0x64, 0x89, 0x92, 0x2f, 0x64, 0x89, 0x92, 0x25, 0x5a, 0xfe, 0x17, 0x21, 0x00, 0x06, 0x7f, 0x08, - 0xb6, 0x33, 0x07, 0x53, 0xdd, 0x91, 0x3c, 0x73, 0xb2, 0x76, 0x44, 0x60, 0xac, 0x4c, 0x1a, 0x3b, - 0xc1, 0x40, 0x64, 0x28, 0x28, 0x38, 0xc0, 0x6a, 0x43, 0x81, 0xab, 0xf1, 0xe4, 0x52, 0x80, 0xfc, - 0x78, 0xc3, 0xb8, 0x94, 0x68, 0xc1, 0x48, 0xed, 0x92, 0xf1, 0x71, 0xc4, 0x0b, 0xa3, 0x00, 0x03, - 0xdc, 0x78, 0x79, 0x41, 0x00, 0x02, 0x59, 0x1b, 0xe0, 0xa0, 0x0d, 0x20, 0xac, 0x58, 0x80, 0x73, - 0x25, 0x00, 0x54, 0xb6, 0x78, 0x00, 0x30, 0x74, 0x7c, 0xdc, 0x06, 0x01, 0x37, 0x3b, 0xec, 0x3d, - 0x6f, 0xba, 0x25, 0x61, 0xa6, 0x11, 0x01, 0xd9, 0xa9, 0xb2, 0xdf, 0xff, 0xdb, 0x8e, 0x7e, 0x77, - 0xe0, 0x18, 0x00, 0x13, 0x20, 0x86, 0x2e, 0x2e, 0x2e, 0x2e, 0x8e, 0x38, 0xc8, 0xda, 0x38, 0x01, - 0xce, 0xbc, 0x04, 0x00, 0x08, 0x1f, 0xa1, 0x88, 0xe3, 0x1d, 0x11, 0x46, 0xab, 0xe8, 0x8c, 0x5f, - 0x36, 0xd3, 0x57, 0xd5, 0x92, 0xf5, 0x7a, 0x80, 0x81, 0x0c, 0x02, 0x7b, 0xbb, 0xbb, 0xbd, 0xc7, - 0xc6, 0x0f, 0x01, 0x52, 0x10, 0x04, 0x9b, 0x55, 0x1c, 0x31, 0xc1, 0xe0, 0xc6, 0x08, 0x31, 0x75, - 0xcf, 0x82, 0x78, 0x7f, 0x38, 0xe6, 0x09, 0x1a, 0x03, 0x22, 0x40, 0xa1, 0x56, 0xe2, 0xbf, 0xc0, - 0x54, 0x81, 0x24, 0x15, 0xd5, 0xf6, 0xa5, 0xe2, 0x4e, 0x62, 0x4e, 0x09, 0x39, 0x1f, 0x0e, 0x28, - 0x11, 0x38, 0x5d, 0x37, 0x9b, 0x6f, 0x6d, 0xb4, 0xd3, 0xd3, 0xec, 0x26, 0x10, 0xa6, 0x54, 0x4f, - 0xc7, 0x39, 0x34, 0xe7, 0xf0, 0xf2, 0x80, 0xd3, 0x98, 0xcc, 0x4e, 0x3e, 0x34, 0xd3, 0x2f, 0x6d, - 0xbf, 0xb8, 0x63, 0x51, 0x2d, 0x27, 0x2c, 0x59, 0xbe, 0x9b, 0xc3, 0x8a, 0x00, 0x30, 0x1b, 0x34, - 0x51, 0x06, 0x8a, 0x4b, 0xb7, 0x4c, 0x55, 0x8a, 0xbf, 0xb8, 0x3b, 0xf5, 0xfc, 0x13, 0xa6, 0x09, - 0x89, 0xa7, 0x58, 0x93, 0x0d, 0x30, 0xab, 0xd0, 0xe1, 0x20, 0x19, 0x88, 0x10, 0xf5, 0x1b, 0x6f, - 0x6d, 0xbf, 0xad, 0xbf, 0x02, 0x88, 0x42, 0x0f, 0xae, 0x64, 0x47, 0xfe, 0x1c, 0x24, 0x00, 0xb7, - 0xb4, 0x66, 0x44, 0x1f, 0x63, 0x6d, 0xf1, 0x5a, 0x62, 0x1f, 0xeb, 0x78, 0x45, 0x9c, 0x30, 0x02, - 0xa4, 0x1d, 0x7e, 0xcf, 0x7d, 0x6b, 0x0e, 0xe0, 0x03, 0x48, 0xa8, 0x50, 0x44, 0x23, 0x0f, 0x5e, - 0x93, 0x17, 0x8d, 0x7d, 0xef, 0x55, 0x55, 0x33, 0x0a, 0xa7, 0xee, 0xfc, 0x36, 0xcc, 0x00, 0xfb, - 0x71, 0x04, 0x1a, 0xf7, 0x55, 0x86, 0xc1, 0x90, 0x6c, 0x15, 0xee, 0x5e, 0xd8, 0x0b, 0xb6, 0x17, - 0x7e, 0xf7, 0x85, 0xd8, 0x80, 0x52, 0xa0, 0x3a, 0xc8, 0x58, 0x5b, 0xdf, 0xd0, 0xef, 0x76, 0xc2, - 0x6c, 0xe0, 0x22, 0x06, 0xc6, 0x8f, 0x9b, 0xe8, 0x74, 0x3b, 0xde, 0x87, 0x43, 0x87, 0x59, 0x40, - 0x06, 0xf9, 0x36, 0x06, 0x5c, 0x81, 0x5d, 0x72, 0x95, 0x87, 0xca, 0x58, 0xd9, 0xe6, 0x35, 0xbd, - 0xfd, 0x7d, 0xef, 0x86, 0x48, 0x70, 0x0e, 0x49, 0x8b, 0xf8, 0xad, 0x5d, 0xdd, 0xdd, 0x5d, 0x7c, - 0x77, 0xf0, 0x24, 0x80, 0x48, 0x02, 0x95, 0x8a, 0x6a, 0x6e, 0x78, 0x07, 0xd6, 0x78, 0x78, 0xb9, - 0x38, 0xa6, 0x59, 0x97, 0x92, 0xd0, 0x21, 0x8e, 0xae, 0x74, 0xe0, 0xe0, 0x10, 0x85, 0x05, 0x1e, - 0xe2, 0x70, 0x1d, 0x93, 0xb2, 0x08, 0x85, 0x63, 0x9e, 0x94, 0xf0, 0x1a, 0xb4, 0xad, 0x21, 0x8c, - 0x2f, 0x50, 0x0c, 0x2f, 0x52, 0xcc, 0x53, 0xcb, 0x35, 0x17, 0x1b, 0x8e, 0xf0, 0x04, 0x80, 0x01, - 0x30, 0x05, 0x66, 0x3c, 0x06, 0x78, 0xcf, 0x7d, 0x47, 0x83, 0xcf, 0x0f, 0x3c, 0x07, 0x8e, 0x25, - 0xc1, 0x64, 0x95, 0x87, 0x6d, 0x3c, 0x00, 0x0a, 0x60, 0x75, 0x00, 0x94, 0x44, 0x48, 0x49, 0xaf, - 0x0a, 0x1d, 0x56, 0xaa, 0xaa, 0xa5, 0xe5, 0xb3, 0xea, 0x0b, 0xb1, 0x00, 0xe1, 0xce, 0x16, 0x0c, - 0xb0, 0x63, 0x4a, 0x18, 0xe1, 0xc5, 0x06, 0xa4, 0x89, 0xfe, 0x9a, 0x65, 0x31, 0xd3, 0x4c, 0xbf, - 0x3a, 0xfd, 0xad, 0x24, 0xa1, 0xc5, 0x00, 0xce, 0x6c, 0x48, 0x7f, 0xed, 0xed, 0xb6, 0x9a, 0x62, - 0x4d, 0x5c, 0xba, 0x5d, 0xfc, 0x02, 0x60, 0x02, 0x44, 0x30, 0x55, 0x85, 0xba, 0x92, 0x0b, 0x2c, - 0xe1, 0xc1, 0x00, 0xe0, 0x82, 0x91, 0x43, 0x14, 0x58, 0xa2, 0xf1, 0x6f, 0x80, 0x88, 0x87, 0xce, - 0xab, 0xe0, 0xf7, 0x80, 0xf7, 0x99, 0x70, 0xb8, 0x36, 0x87, 0x4e, 0x2a, 0xc5, 0x5f, 0xf8, 0x23, - 0x28, 0xac, 0x56, 0x5b, 0x15, 0xb9, 0x9d, 0x7c, 0x10, 0xc4, 0xf4, 0x23, 0xa2, 0xfa, 0xbf, 0xd5, - 0xe4, 0xe8, 0xee, 0x7d, 0x5c, 0xa1, 0xc8, 0xa1, 0xa7, 0x8c, 0x98, 0x49, 0x43, 0x43, 0xc5, 0x43, - 0x8f, 0x49, 0x2f, 0x85, 0x51, 0x80, 0x15, 0xb8, 0x1c, 0x89, 0x3f, 0x5f, 0xfa, 0x69, 0xfc, 0x38, - 0xa0, 0x0e, 0x3f, 0x92, 0x99, 0xff, 0x8b, 0x69, 0xff, 0x93, 0x03, 0x6d, 0xff, 0x0f, 0x28, 0x04, - 0x63, 0x74, 0x7f, 0xd9, 0xbf, 0x55, 0xfe, 0xdd, 0x32, 0xe9, 0xf6, 0xe1, 0xe4, 0x40, 0x10, 0x09, - 0xc2, 0xa1, 0xaf, 0x6d, 0xbf, 0xd3, 0x4f, 0x8a, 0x9c, 0x7e, 0x9a, 0x70, 0xf2, 0x80, 0x10, 0xad, - 0xf5, 0xb2, 0x37, 0x76, 0xff, 0xfd, 0xb3, 0xfc, 0x94, 0x5b, 0xaf, 0xed, 0xc3, 0x6e, 0x00, 0xd3, - 0x1f, 0x16, 0xf3, 0x2f, 0x7d, 0xad, 0xdd, 0xfe, 0xbc, 0xd4, 0x46, 0x07, 0x0c, 0x1c, 0x74, 0xaa, - 0xad, 0x49, 0xc9, 0x31, 0xb9, 0x6c, 0xdf, 0x01, 0x02, 0x07, 0x10, 0xe9, 0x0d, 0xcf, 0x3d, 0xb3, - 0xfc, 0x53, 0x17, 0x2f, 0x9f, 0xca, 0xfc, 0xe2, 0x03, 0x01, 0x11, 0xc1, 0x89, 0x9c, 0xef, 0x1e, - 0xb8, 0xf5, 0xe5, 0xcf, 0xdf, 0xf8, 0x79, 0x94, 0x03, 0x56, 0xd5, 0x4d, 0xfe, 0xf7, 0xfd, 0xf7, - 0xbe, 0xf7, 0xc0, 0xa2, 0x02, 0x40, 0x29, 0x09, 0xb8, 0x38, 0x53, 0x59, 0x24, 0x01, 0xb0, 0xae, - 0x5a, 0x90, 0x02, 0x2b, 0x5e, 0x21, 0x1d, 0xcf, 0x01, 0x10, 0x13, 0xd5, 0x23, 0xe0, 0xc1, 0x35, - 0x51, 0x6e, 0x25, 0xb2, 0xd6, 0xb5, 0xd4, 0x7f, 0x8e, 0x31, 0x15, 0xc4, 0xc2, 0x86, 0xba, 0xb9, - 0x28, 0x38, 0x20, 0x9f, 0x07, 0x04, 0x37, 0x27, 0xb2, 0xf7, 0x2e, 0x15, 0x00, 0x44, 0x40, 0x73, - 0xc7, 0x01, 0x4e, 0x30, 0x63, 0x40, 0xe1, 0x32, 0x18, 0x08, 0x69, 0x83, 0x7a, 0x89, 0x0e, 0x7f, - 0x2c, 0x6c, 0x83, 0xd8, 0xbf, 0x0b, 0x90, 0x48, 0x05, 0xa3, 0x7a, 0x24, 0xb1, 0xef, 0x72, 0x42, - 0x48, 0x3b, 0xbb, 0xb9, 0xd8, 0x39, 0xd8, 0x39, 0x8e, 0x62, 0x40, 0x1a, 0x2a, 0x24, 0x08, 0x22, - 0x31, 0xc2, 0xe4, 0x80, 0x54, 0x78, 0xc1, 0x22, 0x7b, 0xfe, 0xff, 0xbe, 0x21, 0xc1, 0x2f, 0x34, - 0xff, 0x61, 0x74, 0x60, 0x12, 0x1f, 0x26, 0x5f, 0x6b, 0xd1, 0xcd, 0x16, 0x5e, 0xc9, 0x97, 0xee, - 0x0e, 0x40, 0xb2, 0x14, 0x10, 0x28, 0x00, 0x31, 0xd3, 0xe2, 0x80, 0x0c, 0xf0, 0x7a, 0x13, 0xf1, - 0x0a, 0x6a, 0x3a, 0xb9, 0x30, 0x54, 0x48, 0x00, 0xf2, 0xc1, 0x85, 0x40, 0x06, 0x85, 0x8c, 0x76, - 0xe5, 0x80, 0x19, 0xfe, 0x78, 0x00, 0x10, 0xe0, 0xc8, 0x05, 0x18, 0x00, 0x38, 0x79, 0x9c, 0x02, - 0xe8, 0x3b, 0xd9, 0x01, 0xee, 0x3a, 0x46, 0x9d, 0x6d, 0xed, 0xb6, 0xdb, 0x75, 0xb6, 0xd8, 0xab, - 0x6c, 0x55, 0x83, 0x20, 0x10, 0x54, 0x7d, 0x1f, 0x57, 0xbf, 0x87, 0x14, 0x02, 0x46, 0x42, 0xed, - 0x1e, 0xff, 0xf4, 0xd3, 0xc4, 0x74, 0x31, 0x4d, 0xd6, 0xef, 0xf8, 0x78, 0x90, 0x03, 0x53, 0xfc, - 0x83, 0xe0, 0xf3, 0xef, 0xfb, 0x6d, 0xed, 0xb6, 0x36, 0xdd, 0x34, 0xdb, 0xf8, 0x78, 0x90, 0x26, - 0xa6, 0x39, 0x40, 0xbf, 0xff, 0xb7, 0x87, 0xdc, 0x6a, 0x93, 0x4d, 0xbf, 0xc3, 0x88, 0xa0, 0x4f, - 0x74, 0xf1, 0xb6, 0xda, 0x71, 0xb6, 0xdf, 0xe9, 0xa6, 0x55, 0x74, 0xd3, 0xf8, 0x79, 0x10, 0x01, - 0x85, 0x65, 0x66, 0x6f, 0xff, 0x58, 0x2d, 0xa6, 0xdb, 0x69, 0xa7, 0xe9, 0xa7, 0x4c, 0x9c, 0x7d, - 0xf2, 0x54, 0xd8, 0xab, 0x49, 0x24, 0xd3, 0xe1, 0xe5, 0x01, 0x81, 0xad, 0x67, 0x64, 0xd3, 0xfd, - 0x53, 0x9a, 0x69, 0xe3, 0x80, 0x91, 0xe5, 0xb6, 0xcf, 0xaf, 0xdf, 0xc0, 0xa0, 0x24, 0x6f, 0x3e, - 0x0a, 0xe0, 0xe8, 0xb8, 0xa3, 0x39, 0xd2, 0x6d, 0x0e, 0x78, 0xd1, 0x40, 0x4a, 0x15, 0xe8, 0x0b, - 0x76, 0x58, 0x31, 0x03, 0x80, 0xc8, 0x40, 0xc6, 0xd8, 0x54, 0x71, 0x12, 0xbd, 0x13, 0x5a, 0xf9, - 0x4d, 0x9b, 0x21, 0xb1, 0xe8, 0x48, 0x7b, 0xc2, 0xb7, 0x76, 0x81, 0xae, 0xbf, 0x08, 0x2c, 0x0c, - 0xf4, 0x5b, 0xd6, 0x2a, 0xf6, 0xdb, 0x84, 0x11, 0x40, 0xc1, 0xfe, 0x1c, 0x31, 0xde, 0x0d, 0xb9, - 0x65, 0x6e, 0x5f, 0xe0, 0x08, 0x04, 0x10, 0x82, 0x8a, 0xaf, 0xbb, 0x8e, 0x03, 0xb0, 0xda, 0x80, - 0x4a, 0x94, 0x84, 0x28, 0xf8, 0xb5, 0xfa, 0xd7, 0xe3, 0x8f, 0x8b, 0x62, 0xd9, 0x8d, 0x38, 0xd7, - 0xc3, 0x4a, 0x03, 0x1c, 0x67, 0xd4, 0x26, 0x9b, 0x6d, 0xff, 0xfb, 0x61, 0xe2, 0x10, 0x00, 0x80, - 0xf8, 0xa7, 0xce, 0x62, 0xb2, 0xff, 0xfb, 0xb8, 0xac, 0x65, 0x8a, 0xd6, 0xa3, 0x98, 0xed, 0xc3, - 0xc4, 0x80, 0x11, 0x1c, 0x88, 0x72, 0xd0, 0x87, 0xfc, 0xfd, 0xff, 0xf1, 0x75, 0x17, 0x11, 0x04, - 0x84, 0x4e, 0xf5, 0xbf, 0xd7, 0xdf, 0x04, 0x00, 0x41, 0x0f, 0x4b, 0x0e, 0x2f, 0x7d, 0x18, 0xbd, - 0x62, 0x95, 0x85, 0x18, 0xf9, 0xff, 0x4f, 0x02, 0xc8, 0x09, 0x10, 0xa5, 0xd4, 0xfc, 0xbd, 0x2a, - 0xb9, 0x76, 0x44, 0x39, 0xd3, 0x2e, 0x1c, 0x38, 0x09, 0x51, 0xb8, 0x40, 0x32, 0x14, 0x25, 0xa9, - 0x6b, 0x65, 0x2e, 0xce, 0x65, 0x50, 0xb9, 0x29, 0xf1, 0x79, 0x61, 0x93, 0x15, 0xb6, 0x72, 0xdf, - 0xbc, 0x30, 0x14, 0xaa, 0x4a, 0x2b, 0xa3, 0x28, 0x0c, 0xa0, 0xe5, 0x09, 0x01, 0xad, 0x31, 0x46, - 0x28, 0xc5, 0x01, 0xb9, 0x80, 0xf8, 0x3a, 0x8e, 0x70, 0x3e, 0x00, 0xea, 0x11, 0xd0, 0xca, 0x85, - 0xd9, 0x00, 0x10, 0x0a, 0x44, 0x0c, 0xe4, 0xa4, 0x0a, 0x5f, 0xb7, 0x6f, 0xde, 0xed, 0xe2, 0x1e, - 0xde, 0x73, 0xf5, 0xce, 0xc2, 0xe4, 0x12, 0x01, 0x0d, 0xa1, 0x8a, 0x8a, 0xe6, 0xff, 0xfa, 0xd5, - 0xf1, 0xcc, 0xa0, 0x4b, 0x3c, 0x00, 0x04, 0x00, 0xa6, 0xcf, 0x8c, 0xc2, 0x08, 0x52, 0xc9, 0xf1, - 0xcf, 0x1d, 0xb0, 0x9a, 0x80, 0x7c, 0x34, 0xa7, 0x9f, 0x5a, 0xfd, 0x6b, 0x09, 0xa1, 0x00, 0x0f, - 0xf2, 0xe0, 0x25, 0xf0, 0x83, 0x09, 0x13, 0xe1, 0xbe, 0x14, 0x4b, 0xae, 0xdc, 0xcd, 0x27, 0x64, - 0xf0, 0xbe, 0xe5, 0x75, 0xc8, 0x7b, 0x00, 0x92, 0xb6, 0xb2, 0x33, 0x2d, 0xff, 0x6f, 0x4f, 0x2f, - 0xf1, 0xa5, 0x8e, 0xcb, 0xe3, 0x4f, 0xf0, 0xda, 0x80, 0x08, 0x21, 0xc5, 0xf9, 0x46, 0x64, 0x1e, - 0xdf, 0xf4, 0x9a, 0x69, 0xa7, 0xe9, 0xbb, 0x83, 0xaf, 0xb9, 0xf8, 0xe3, 0xf1, 0xdf, 0x84, 0x20, - 0x90, 0xe0, 0x67, 0x2c, 0x17, 0x0c, 0x18, 0x55, 0x00, 0xa6, 0x1b, 0x62, 0xae, 0x1e, 0x44, 0x00, - 0x30, 0x80, 0xcb, 0x70, 0x84, 0xde, 0xe7, 0xff, 0x4d, 0x3d, 0xb1, 0x56, 0xff, 0x62, 0xac, 0x51, - 0x74, 0xc2, 0x41, 0x63, 0xb9, 0x4c, 0xa5, 0x0c, 0xbf, 0x0e, 0x28, 0x24, 0x5d, 0x3c, 0x7f, 0xff, - 0x4c, 0x0a, 0xbb, 0xe3, 0x0b, 0xf0, 0xe2, 0x80, 0x54, 0x0a, 0x50, 0xfc, 0x37, 0xd4, 0xdb, 0x6f, - 0x15, 0x62, 0xac, 0xda, 0x7f, 0x79, 0xe7, 0x4f, 0x3a, 0x9c, 0x60, 0x70, 0x28, 0x1c, 0x69, 0x43, - 0x8a, 0x51, 0x29, 0x65, 0x06, 0x53, 0x80, 0x77, 0xe1, 0xc5, 0x01, 0x53, 0x99, 0x4f, 0x5e, 0xdb, - 0x7b, 0x62, 0xae, 0x34, 0xf1, 0x6c, 0x5b, 0xc1, 0x00, 0x0e, 0xb3, 0x96, 0x5d, 0x62, 0x8b, 0x6d, - 0xb4, 0xd3, 0x87, 0x14, 0x00, 0xf1, 0xbc, 0xcc, 0x00, 0x2f, 0x6b, 0xc6, 0xdb, 0x4d, 0x36, 0xc5, - 0x16, 0x2d, 0x8a, 0x5f, 0x93, 0x62, 0xc0, 0xca, 0x0f, 0x25, 0x77, 0x0e, 0x6e, 0x3b, 0x72, 0x51, - 0xff, 0xc3, 0x8a, 0x03, 0x38, 0x81, 0x7e, 0xc0, 0x48, 0x11, 0xde, 0x75, 0x78, 0xb6, 0x2d, 0xcb, - 0xc5, 0xb2, 0xcb, 0x4d, 0x3d, 0x34, 0xf0, 0x30, 0x00, 0xe1, 0xc6, 0x14, 0x53, 0x2a, 0x85, 0xae, - 0xbf, 0x87, 0x14, 0x03, 0x29, 0xe2, 0xc0, 0x51, 0x0e, 0xef, 0x9d, 0xa6, 0xdd, 0x31, 0x6c, 0x1f, - 0x74, 0xe3, 0xb7, 0xb6, 0x6f, 0x50, 0x88, 0x07, 0x85, 0x19, 0x41, 0xfc, 0xa0, 0xf4, 0x1e, 0x1d, - 0x4f, 0xce, 0x98, 0x53, 0xa1, 0x6f, 0xf5, 0x7f, 0xab, 0xd7, 0x57, 0xfa, 0xbf, 0xd4, 0xc3, 0xf0, - 0x08, 0x48, 0x29, 0x1b, 0xc5, 0x62, 0xb9, 0x70, 0xb8, 0x5b, 0x10, 0xb1, 0x63, 0x5f, 0x7e, 0xdb, - 0x3a, 0x34, 0x60, 0x70, 0x00, 0x2b, 0x40, 0x58, 0x88, 0x00, 0x1d, 0x2c, 0x01, 0x6d, 0x7f, 0x82, - 0x01, 0xa4, 0x17, 0x97, 0x05, 0x6e, 0xe2, 0xb1, 0x59, 0x6c, 0x50, 0x76, 0x61, 0x75, 0x5d, 0xcf, - 0xe1, 0x78, 0x6d, 0xa5, 0xc5, 0xba, 0x7f, 0x80, 0x81, 0x08, 0x0d, 0xd4, 0x57, 0xa7, 0x2f, 0x25, - 0x7d, 0xa2, 0x65, 0x9b, 0x9b, 0x62, 0x78, 0x12, 0x28, 0x21, 0x50, 0xf0, 0xb4, 0x90, 0x03, 0x2d, - 0x6c, 0xb9, 0xf8, 0x71, 0x40, 0x06, 0x6a, 0x7e, 0x10, 0x95, 0xbf, 0xfe, 0x69, 0xa6, 0x9e, 0x9a, - 0xba, 0x18, 0xca, 0x3a, 0x9d, 0x97, 0x72, 0x83, 0xa9, 0x30, 0xcb, 0x06, 0x26, 0x86, 0xbd, 0xb1, - 0xc5, 0x2b, 0xd7, 0xe1, 0xd5, 0x00, 0x15, 0xb8, 0xc1, 0x93, 0xa8, 0x89, 0x93, 0x7f, 0xef, 0x69, - 0xbf, 0xd7, 0x1c, 0x01, 0x9c, 0x18, 0x03, 0x17, 0x38, 0x74, 0x18, 0x32, 0x87, 0x16, 0x5c, 0xf9, - 0x95, 0x92, 0x47, 0xfc, 0x3c, 0x48, 0x01, 0xe0, 0xd9, 0xec, 0x55, 0x60, 0x3f, 0x9b, 0x6c, 0xfe, - 0xb6, 0xdb, 0x6e, 0x5f, 0x18, 0xef, 0xcb, 0x5a, 0x69, 0x8a, 0x2c, 0x51, 0x61, 0xad, 0xc6, 0xe3, - 0xfe, 0x0f, 0xf8, 0xa2, 0xca, 0xba, 0xfc, 0x36, 0x48, 0x01, 0x3b, 0xed, 0x60, 0xd4, 0x20, 0xfc, - 0xdb, 0x7a, 0x25, 0xb6, 0x4e, 0xe3, 0xb7, 0x1d, 0xfc, 0xd4, 0x8b, 0x81, 0x81, 0x38, 0xc0, 0xa3, - 0x6f, 0xa4, 0x54, 0x75, 0x14, 0x07, 0x8e, 0xbe, 0x10, 0x01, 0x22, 0x14, 0x8b, 0x63, 0x7f, 0x06, - 0xd2, 0x96, 0x67, 0x81, 0x60, 0xe3, 0xce, 0x0f, 0x92, 0x40, 0xa0, 0x2c, 0xca, 0x44, 0xa5, 0xe5, - 0x9c, 0x41, 0xc8, 0x21, 0x5e, 0x1e, 0x70, 0x13, 0x75, 0x0f, 0xf3, 0x75, 0x4f, 0xaf, 0xf4, 0xdd, - 0xef, 0xe1, 0xa5, 0x00, 0xb4, 0x6c, 0x91, 0x16, 0x79, 0x3c, 0xd7, 0xeb, 0x5d, 0xf0, 0xd2, 0x80, - 0x0e, 0x7c, 0x20, 0xb1, 0x89, 0xef, 0x0b, 0xdc, 0xbe, 0x2f, 0x6c, 0xf0, 0x6c, 0xb6, 0xee, 0x58, - 0xbb, 0xbb, 0xed, 0x87, 0x9c, 0x00, 0xfb, 0x64, 0x07, 0x62, 0xbc, 0xbf, 0xfb, 0x25, 0x18, 0x64, - 0x4b, 0xc3, 0x9b, 0xbf, 0xc9, 0x6c, 0xb3, 0x15, 0x8a, 0x74, 0x6a, 0xaf, 0x7f, 0xc0, 0x35, 0x00, - 0x10, 0x80, 0xa5, 0x7d, 0x1f, 0xde, 0xcb, 0x58, 0x1e, 0xf8, 0x80, 0x00, 0x27, 0xdb, 0xcb, 0x00, - 0x60, 0xec, 0x72, 0xc7, 0x68, 0x74, 0x36, 0xa1, 0x58, 0x4b, 0x53, 0x47, 0x87, 0x0f, 0x38, 0x54, - 0x0f, 0x01, 0x61, 0x82, 0x14, 0x02, 0x00, 0x18, 0xa8, 0x42, 0x86, 0xdd, 0xd8, 0xfa, 0xae, 0x57, - 0xf5, 0x4b, 0x58, 0x35, 0xd6, 0x25, 0x6a, 0xd3, 0x14, 0x3a, 0x09, 0xd9, 0x5d, 0x0a, 0xbb, 0x61, - 0x0f, 0xc8, 0x29, 0xb1, 0xce, 0x06, 0xef, 0x24, 0x8b, 0xb7, 0xc7, 0x61, 0x9d, 0x30, 0xed, 0x8a, - 0x50, 0x30, 0x79, 0x3d, 0x85, 0x59, 0x40, 0x0f, 0x7e, 0x26, 0x19, 0x05, 0xad, 0xdf, 0xea, 0xaa, - 0xbf, 0x0f, 0x44, 0x00, 0x3f, 0x30, 0x58, 0x3d, 0x52, 0xa7, 0xe3, 0xaf, 0xc9, 0xd3, 0x92, 0xda, - 0xff, 0x80, 0x38, 0x80, 0x20, 0x8d, 0x30, 0xa6, 0x51, 0x04, 0xa1, 0x42, 0xa3, 0xec, 0x3c, 0x00, - 0x0a, 0x60, 0x90, 0x00, 0x2d, 0x81, 0xce, 0x09, 0x4a, 0x10, 0x26, 0x44, 0x85, 0x6d, 0x9c, 0xb6, - 0x5b, 0x2d, 0x8a, 0x31, 0x46, 0x09, 0x52, 0x98, 0x3d, 0x6f, 0xfe, 0x36, 0x15, 0x18, 0x00, 0xa8, - 0x21, 0x80, 0x94, 0x83, 0x00, 0x94, 0x90, 0x0a, 0xa8, 0x56, 0x63, 0x7a, 0x51, 0xc0, 0xe7, 0x0e, - 0x70, 0xb0, 0x19, 0x60, 0x33, 0x87, 0x9c, 0x03, 0x85, 0x80, 0x33, 0x80, 0x01, 0xe1, 0x80, 0xf1, - 0x44, 0x72, 0x5a, 0xc0, 0x57, 0x81, 0xdb, 0xa2, 0x7e, 0xf8, 0x4b, 0x21, 0x04, 0xce, 0xa0, 0x19, - 0x61, 0x8a, 0xaa, 0x95, 0x52, 0x96, 0x37, 0x1c, 0x6f, 0xa6, 0x9c, 0x38, 0xa0, 0x04, 0x2a, 0x37, - 0xb2, 0x23, 0x3d, 0xff, 0xdd, 0xbf, 0xf8, 0xab, 0x15, 0x76, 0xc5, 0x58, 0xa2, 0xc0, 0x40, 0x12, - 0x2a, 0xdf, 0xb3, 0x1f, 0xe0, 0x0d, 0xc0, 0x0c, 0x21, 0x48, 0xa6, 0x2e, 0x23, 0x8c, 0xc4, 0xc5, - 0x64, 0x8a, 0x96, 0x35, 0x2a, 0x5b, 0x6f, 0x2c, 0x19, 0xc3, 0xc9, 0xd5, 0xeb, 0xc4, 0x61, 0xc4, - 0x50, 0x20, 0x43, 0xa2, 0x21, 0x5e, 0x5e, 0xeb, 0x37, 0x6f, 0x3f, 0x6e, 0xe6, 0x6e, 0xdd, 0xcf, - 0xed, 0xb7, 0x0c, 0x28, 0x01, 0x63, 0x54, 0x1f, 0xe4, 0x14, 0x1b, 0xdc, 0x5d, 0xc5, 0xdd, 0x5d, - 0x53, 0x4d, 0x53, 0x15, 0x0e, 0x01, 0x40, 0x0c, 0x8d, 0x8e, 0xb5, 0x67, 0x3f, 0x8e, 0xd1, 0x59, - 0x70, 0xb1, 0x96, 0x32, 0xc3, 0x2c, 0xc5, 0x0c, 0x47, 0xaf, 0x0a, 0x2a, 0x08, 0x5f, 0xc2, 0x8f, - 0x7f, 0x0d, 0x28, 0x01, 0x5c, 0xdb, 0xd3, 0xfb, 0xf4, 0xe9, 0xbb, 0x93, 0xc7, 0xf8, 0xd3, 0x6d, - 0xbc, 0x46, 0x5f, 0x02, 0x04, 0x6c, 0x9e, 0xad, 0x24, 0xb5, 0x11, 0xf8, 0x58, 0x2a, 0xcd, 0x2f, - 0x39, 0xc3, 0x87, 0x09, 0xd5, 0x0f, 0x36, 0x2b, 0xe1, 0x41, 0xef, 0xc5, 0x74, 0x5e, 0x8f, 0x0e, - 0x23, 0x00, 0x19, 0x25, 0xeb, 0x3f, 0xf5, 0x79, 0x31, 0x6f, 0x27, 0xb6, 0xdb, 0x7c, 0xfe, 0xb2, - 0xf1, 0xf7, 0x34, 0x65, 0x17, 0x52, 0xd3, 0x4d, 0xb6, 0xe1, 0xc5, 0x13, 0xf6, 0x96, 0x27, 0xba, - 0x17, 0xe8, 0x23, 0x42, 0x28, 0xa4, 0xf9, 0x17, 0x41, 0x20, 0xb6, 0xfc, 0x38, 0xa0, 0x11, 0xcf, - 0x05, 0x25, 0xfe, 0xb7, 0xa6, 0x9a, 0x69, 0xdb, 0xb6, 0xdb, 0x6d, 0xb6, 0x31, 0x0d, 0xb6, 0xd3, - 0xb7, 0xe1, 0xc5, 0x01, 0x3f, 0xf0, 0xab, 0x56, 0xeb, 0xa9, 0xed, 0x55, 0x6e, 0xcb, 0x4d, 0x39, - 0x70, 0x77, 0xe3, 0xcb, 0x46, 0xfc, 0x38, 0xa0, 0x4a, 0x74, 0xdc, 0x7e, 0xd3, 0xa7, 0x51, 0xff, - 0x3b, 0xb7, 0xab, 0x75, 0x34, 0xdb, 0x78, 0xc4, 0x2f, 0x5a, 0x76, 0xfc, 0x38, 0xa0, 0x48, 0x6a, - 0x80, 0x7f, 0xf3, 0xbe, 0x99, 0xf4, 0xf1, 0xdf, 0xb4, 0x7f, 0x5b, 0x41, 0xa6, 0xb1, 0x61, 0x09, - 0x4c, 0x4b, 0xcb, 0x7f, 0x0e, 0x12, 0x01, 0x3f, 0x11, 0x8a, 0x1d, 0x8e, 0xcb, 0xa6, 0x98, 0xb6, - 0x0f, 0xba, 0xcd, 0xf6, 0xcd, 0xe4, 0xe1, 0x10, 0x18, 0xba, 0x32, 0x99, 0xa8, 0x47, 0x87, 0x7e, - 0x54, 0x4f, 0xba, 0x70, 0xf6, 0x00, 0xe2, 0xc8, 0x3b, 0x46, 0x75, 0x35, 0x65, 0xef, 0xe7, 0xfd, - 0x6c, 0xec, 0xf3, 0xf7, 0x7f, 0x2f, 0xe5, 0xb3, 0xf7, 0xf1, 0xd7, 0xdf, 0xc3, 0xc2, 0x00, 0x02, - 0x5a, 0xfb, 0x4c, 0x6b, 0xfa, 0xe2, 0x42, 0x21, 0x43, 0x94, 0x21, 0x2e, 0x80, 0x29, 0x99, 0x57, - 0xaa, 0x9d, 0x52, 0x5d, 0xfa, 0xaa, 0x8e, 0x0e, 0x70, 0x28, 0x00, 0xf8, 0x0a, 0x10, 0x41, 0xea, - 0xcf, 0x8b, 0x93, 0x2b, 0x1b, 0xa9, 0x78, 0xad, 0xce, 0x1e, 0x70, 0x39, 0xfc, 0x34, 0x42, 0x80, - 0x46, 0xd0, 0xdc, 0xc3, 0x3f, 0xfb, 0xed, 0xeb, 0x0d, 0x38, 0x01, 0x9a, 0xc4, 0x78, 0xca, 0x66, - 0xdf, 0x12, 0x17, 0x7d, 0x55, 0x55, 0xd7, 0x17, 0x8b, 0xce, 0xc2, 0xee, 0x00, 0xe5, 0x16, 0x64, - 0x58, 0x12, 0xb9, 0x5b, 0xdf, 0x4e, 0x98, 0x87, 0xcb, 0xf7, 0xbb, 0x30, 0xb9, 0x20, 0x28, 0x60, - 0x0e, 0x66, 0x1c, 0x90, 0xd6, 0xe1, 0xfc, 0x23, 0x03, 0xef, 0x11, 0x29, 0xc6, 0x48, 0xe5, 0x96, - 0x4a, 0x28, 0x4a, 0x4c, 0x37, 0x33, 0x86, 0x1f, 0xe1, 0xac, 0x03, 0x47, 0x35, 0x07, 0xc1, 0x19, - 0x6b, 0x6d, 0xff, 0xde, 0xdd, 0xf2, 0xc5, 0x12, 0x09, 0x56, 0x02, 0x00, 0x7d, 0x43, 0x44, 0x87, - 0xc0, 0xc6, 0xbf, 0xb7, 0xda, 0xad, 0x4f, 0x98, 0xa6, 0x50, 0x0a, 0x3a, 0x94, 0x74, 0x26, 0x88, - 0x00, 0x75, 0x2d, 0xe3, 0x60, 0x41, 0x8d, 0xb7, 0xfd, 0xbd, 0x7c, 0x30, 0xe0, 0x03, 0x3a, 0x59, - 0xa6, 0x80, 0x83, 0xf3, 0xcd, 0x2f, 0x5b, 0xb2, 0xf2, 0xff, 0x5b, 0xde, 0x6d, 0x85, 0xd4, 0x06, - 0x0e, 0xd2, 0x06, 0xfd, 0x7b, 0x5a, 0x8a, 0x8e, 0x2a, 0x3b, 0xde, 0x2a, 0x38, 0xa8, 0xff, 0xe0, - 0x84, 0x06, 0x00, 0x2a, 0x38, 0xac, 0x56, 0x2b, 0x15, 0x97, 0x07, 0xac, 0x3c, 0x72, 0xea, 0x2e, - 0x2e, 0x52, 0xf0, 0x14, 0x23, 0x45, 0x38, 0xac, 0x40, 0xb0, 0xd9, 0x09, 0x1e, 0x7d, 0x58, 0xb1, - 0x3f, 0x3c, 0xdf, 0x34, 0x63, 0xaa, 0x18, 0xe3, 0x5d, 0xb1, 0xe7, 0xe5, 0x8f, 0xc3, 0xd8, 0x05, - 0x3c, 0x39, 0x0a, 0xe1, 0x08, 0xed, 0x3e, 0x1d, 0xf9, 0x6b, 0xbb, 0x72, 0x71, 0x6d, 0xbd, 0x3e, - 0x5e, 0x98, 0x9f, 0x2d, 0x61, 0x42, 0x73, 0xd3, 0xfc, 0x76, 0xe3, 0x89, 0x7a, 0xff, 0x0c, 0xc6, - 0xc1, 0xae, 0x81, 0x8a, 0x4e, 0x70, 0xa4, 0xd4, 0xfa, 0x59, 0xbf, 0xa9, 0x51, 0xd0, 0x1f, 0x1e, - 0x0f, 0x95, 0x10, 0x0d, 0x4e, 0x1e, 0x51, 0x35, 0x6f, 0x1d, 0xfc, 0x81, 0x64, 0x23, 0xdb, 0x8f, - 0x74, 0xfc, 0x3b, 0x80, 0x54, 0x60, 0x02, 0x44, 0x4e, 0x79, 0x7b, 0xaa, 0x73, 0xe3, 0x1f, 0x76, - 0xf6, 0x71, 0xef, 0x96, 0xd4, 0x1d, 0x7c, 0x76, 0xee, 0xe7, 0xbc, 0x76, 0xe3, 0xaf, 0x8a, 0xe2, - 0xdb, 0x6d, 0xa6, 0x9f, 0xc3, 0x64, 0x80, 0x70, 0xc7, 0x90, 0x43, 0xa6, 0x04, 0xd9, 0x36, 0x74, - 0xfe, 0x4f, 0xdd, 0xec, 0xdd, 0xb7, 0x77, 0xf1, 0x3a, 0x2f, 0x4d, 0x3f, 0x87, 0x30, 0x01, 0x92, - 0xbc, 0x11, 0x66, 0x30, 0x14, 0xff, 0xc9, 0xf9, 0x39, 0xde, 0x6e, 0x5e, 0xaf, 0x2e, 0x5e, 0x6e, - 0xb8, 0xb1, 0x0e, 0x9e, 0x9a, 0x7f, 0x0f, 0x28, 0x03, 0xee, 0x09, 0xfb, 0x2b, 0x28, 0x28, 0xd1, - 0x8b, 0xb1, 0x6f, 0x2f, 0x35, 0x44, 0x03, 0x43, 0xfd, 0xb1, 0x3e, 0xee, 0xe5, 0x83, 0x93, 0xda, - 0x46, 0x04, 0x57, 0x8c, 0x61, 0x39, 0xf8, 0x60, 0x90, 0x10, 0x12, 0x59, 0x93, 0x17, 0x7c, 0xae, - 0xb8, 0xe3, 0xb7, 0x1d, 0x7d, 0x4b, 0x77, 0x51, 0x5a, 0x97, 0x89, 0xff, 0xcf, 0x85, 0xba, 0xb4, - 0x70, 0x01, 0xeb, 0x14, 0x2c, 0x00, 0x05, 0x94, 0xe0, 0x0f, 0x08, 0x24, 0x38, 0xe9, 0x7c, 0x18, - 0x12, 0xf5, 0xf8, 0x4b, 0x9b, 0x6a, 0xdb, 0xe8, 0xef, 0x5c, 0x38, 0x61, 0x0e, 0x08, 0x01, 0xc1, - 0x41, 0x9c, 0x00, 0x0f, 0x08, 0x14, 0x65, 0x78, 0x3c, 0x5f, 0xf0, 0x1b, 0x00, 0x51, 0x1b, 0x06, - 0xaa, 0xac, 0xff, 0x57, 0x85, 0x14, 0xc7, 0x9e, 0x37, 0x0f, 0x00, 0x1c, 0x3c, 0x71, 0x21, 0x1c, - 0xbc, 0x68, 0x00, 0x08, 0x32, 0x80, 0x89, 0x23, 0xd0, 0x9f, 0x6f, 0xe1, 0xd4, 0x50, 0x03, 0x6d, - 0x32, 0x00, 0x33, 0x3b, 0xf6, 0xd9, 0xbb, 0x66, 0xee, 0x2a, 0xcf, 0x7d, 0x63, 0xee, 0x5d, 0x8b, - 0x97, 0x8f, 0xf9, 0x77, 0xbd, 0x1c, 0xfe, 0xdb, 0x78, 0x71, 0x10, 0x00, 0x4f, 0xe5, 0x21, 0x3a, - 0x8a, 0xa3, 0x9a, 0xff, 0x9f, 0x9f, 0xcb, 0x8a, 0x69, 0xe9, 0x8f, 0x66, 0xa3, 0x03, 0xee, 0x76, - 0x20, 0x90, 0x53, 0x2c, 0x27, 0xe9, 0xa6, 0xdb, 0x78, 0x0c, 0x90, 0x3c, 0x8d, 0x81, 0xdc, 0x0d, - 0x47, 0x13, 0xc2, 0x77, 0xe5, 0x81, 0x89, 0x07, 0x09, 0xd5, 0xa8, 0x9e, 0xa4, 0xcf, 0xcb, 0x03, - 0x28, 0x3a, 0x97, 0x8a, 0x67, 0x81, 0xe9, 0x07, 0xf2, 0x8e, 0x00, 0x02, 0x0d, 0x31, 0x74, 0x9e, - 0xeb, 0xfc, 0x38, 0xa0, 0x44, 0xa0, 0xff, 0x67, 0x15, 0x54, 0x49, 0x37, 0x5b, 0x89, 0x25, 0xb3, - 0xde, 0xcf, 0xd5, 0x5d, 0xeb, 0x18, 0x28, 0xc0, 0x9a, 0x63, 0x4a, 0xff, 0xf0, 0xe3, 0x80, 0x4e, - 0x16, 0xc3, 0x62, 0xd6, 0x96, 0x30, 0x76, 0xe5, 0x8b, 0xdb, 0x6f, 0xb6, 0xde, 0xdb, 0x62, 0x2d, - 0xd6, 0xfd, 0xfd, 0xbf, 0xc0, 0x24, 0x20, 0x36, 0x06, 0xc4, 0x01, 0xe2, 0x40, 0xf3, 0x80, 0xf3, - 0xc0, 0xf1, 0x00, 0x07, 0x0e, 0x0e, 0x12, 0x15, 0x88, 0x40, 0x07, 0x9c, 0x1e, 0x58, 0x67, 0x75, - 0x4a, 0x9c, 0x03, 0x84, 0x80, 0x02, 0xa7, 0x00, 0x01, 0x1c, 0x03, 0x80, 0x85, 0x1e, 0x38, 0x18, - 0x91, 0xef, 0xe3, 0xa3, 0xff, 0xc2, 0xf2, 0x01, 0x01, 0x1a, 0xc2, 0xb8, 0x7e, 0x5c, 0xee, 0xff, - 0x6e, 0x5b, 0x7f, 0x15, 0x58, 0x5d, 0x8b, 0x00, 0xfd, 0x20, 0xcd, 0x29, 0x9e, 0xae, 0x7c, 0x1e, - 0x0e, 0xae, 0x7a, 0xb9, 0xec, 0x62, 0xc6, 0x2e, 0xe0, 0x80, 0x04, 0x88, 0x50, 0xcb, 0x2b, 0x6f, - 0x38, 0x7b, 0x9c, 0xfb, 0xdd, 0xec, 0x56, 0x2b, 0xd1, 0xdc, 0x33, 0x1a, 0x02, 0x0a, 0x6d, 0xd5, - 0x25, 0xce, 0xb5, 0xf7, 0x57, 0x52, 0x0b, 0x0b, 0x31, 0x00, 0x1a, 0x05, 0x5f, 0x82, 0x56, 0x2c, - 0xde, 0x78, 0x17, 0xb8, 0xa7, 0xf7, 0x14, 0xdc, 0x53, 0x86, 0xd9, 0x40, 0x1c, 0x00, 0x49, 0x29, - 0xce, 0xae, 0x5d, 0x6a, 0x2b, 0x8a, 0x3f, 0x33, 0x05, 0x83, 0x33, 0x05, 0x83, 0x6d, 0x6b, 0xf0, - 0x9b, 0x30, 0x01, 0x57, 0xf7, 0x30, 0x2c, 0x26, 0xf0, 0x5e, 0x20, 0xc2, 0xa2, 0x1e, 0xb6, 0x58, - 0x6c, 0x85, 0x0e, 0x2e, 0x2b, 0x14, 0xde, 0x17, 0xc0, 0x5b, 0xf2, 0x30, 0xc6, 0x0b, 0xd2, 0xea, - 0x7f, 0xf7, 0xbf, 0xb9, 0xc0, 0x32, 0x00, 0x3a, 0x02, 0x85, 0x55, 0x27, 0x66, 0x42, 0xc0, 0x98, - 0x1c, 0xa1, 0xc3, 0xd0, 0x92, 0xbc, 0x8c, 0xe7, 0xec, 0xc2, 0xde, 0x5b, 0x59, 0x76, 0x38, 0x63, - 0x01, 0xc3, 0x0e, 0x0a, 0x24, 0x41, 0x0c, 0x4c, 0xaa, 0x5b, 0xb6, 0x28, 0xc6, 0xa5, 0xbb, 0x74, - 0xa3, 0xdb, 0xdb, 0x6d, 0xd8, 0x95, 0x00, 0x74, 0x49, 0x81, 0x91, 0x5e, 0xac, 0x01, 0xe8, 0x01, - 0x20, 0x29, 0x0f, 0x83, 0x94, 0x7b, 0x8e, 0xdc, 0x56, 0xf7, 0x11, 0x80, 0x56, 0x80, 0x2c, 0x05, - 0x4f, 0x38, 0xce, 0xdf, 0x45, 0x75, 0x85, 0xd1, 0x40, 0x98, 0x50, 0x08, 0x54, 0x32, 0x7b, 0xff, - 0x5a, 0xde, 0xe9, 0x94, 0x26, 0x88, 0x00, 0xb7, 0x49, 0x18, 0x30, 0xf7, 0xfd, 0x0e, 0x87, 0xf0, - 0xd3, 0x80, 0x63, 0x61, 0x8c, 0xd2, 0xfe, 0xf6, 0xbe, 0xd9, 0x6c, 0x31, 0x28, 0x06, 0x2d, 0x30, - 0xa9, 0xdf, 0xfd, 0x34, 0xf4, 0xd3, 0x1d, 0x47, 0xb0, 0xf4, 0x50, 0x00, 0xd4, 0x9b, 0xbc, 0x5e, - 0x08, 0x5e, 0x31, 0x37, 0x4c, 0xbe, 0xb3, 0xf2, 0xed, 0xbe, 0x9e, 0x0f, 0xf8, 0xff, 0xa6, 0xde, - 0x20, 0xac, 0x83, 0x12, 0xe2, 0xaa, 0xec, 0xa0, 0xae, 0xa7, 0xf1, 0x23, 0x63, 0x89, 0xf3, 0xbc, - 0xaa, 0xf8, 0xef, 0x77, 0x3c, 0x0f, 0x3f, 0xc9, 0x40, 0xa8, 0x7e, 0x0d, 0x43, 0xe1, 0xaa, 0x10, - 0x00, 0x3e, 0xa1, 0xe0, 0x00, 0x4e, 0x4a, 0xab, 0x1a, 0x38, 0x83, 0xe7, 0x0f, 0x03, 0x80, 0x08, - 0x82, 0x8f, 0x3f, 0xcf, 0xf1, 0xd5, 0xcf, 0xff, 0x87, 0x19, 0x40, 0x0c, 0xc4, 0x01, 0xba, 0x3f, - 0x0c, 0xc0, 0xbe, 0xb8, 0xe6, 0xeb, 0x33, 0x6d, 0xba, 0x73, 0x8d, 0xd2, 0x55, 0x52, 0x1b, 0x56, - 0xf2, 0xd9, 0xce, 0x9c, 0xef, 0x0d, 0x20, 0x18, 0x0e, 0x85, 0xe2, 0x7c, 0x9f, 0xe1, 0xc5, 0x00, - 0x60, 0x3a, 0x98, 0x4e, 0x0f, 0x26, 0x5e, 0x2f, 0x10, 0xf9, 0x3c, 0x79, 0xff, 0x93, 0xd5, 0xfb, - 0x25, 0xb4, 0xc4, 0x3d, 0xdf, 0xd5, 0xec, 0xb4, 0xbf, 0x0e, 0x28, 0x00, 0x76, 0xb6, 0xbd, 0x8c, - 0x2e, 0x7d, 0xb4, 0xfc, 0xfc, 0xb5, 0x8e, 0xbe, 0x0e, 0x97, 0x2d, 0x9f, 0xee, 0x4f, 0x11, 0xed, - 0xec, 0xed, 0xec, 0xf0, 0x32, 0x16, 0xc5, 0xb6, 0xdb, 0xfc, 0x03, 0xa0, 0x18, 0x0a, 0x49, 0xd5, - 0xbc, 0xbc, 0xee, 0x17, 0x42, 0x91, 0xcb, 0x1c, 0x00, 0x39, 0x10, 0x03, 0x01, 0x27, 0x0b, 0x19, - 0x60, 0x0c, 0xb0, 0x01, 0x8a, 0x0c, 0x48, 0x03, 0x83, 0x4d, 0x86, 0xd4, 0x00, 0x43, 0xcf, 0xc8, - 0x22, 0x0b, 0x64, 0x7b, 0xf9, 0x56, 0x56, 0xee, 0xd8, 0xb9, 0x61, 0xa2, 0x7f, 0xac, 0xb0, 0x71, - 0x6a, 0xf6, 0xa9, 0xfc, 0x38, 0x48, 0x01, 0xae, 0x57, 0x0c, 0xc5, 0x5a, 0x02, 0x5f, 0xc5, 0xb2, - 0xf7, 0x6c, 0xfc, 0x4f, 0xd6, 0x7f, 0xc4, 0x3d, 0x4e, 0x7d, 0x6e, 0xf1, 0x9d, 0xe2, 0xd1, 0xeb, - 0xff, 0x0e, 0xcd, 0x4b, 0xb3, 0x58, 0xe5, 0x0f, 0x39, 0x26, 0x00, 0x2b, 0x21, 0x66, 0x77, 0x10, - 0xf6, 0xfc, 0x2b, 0xc1, 0x21, 0xaf, 0x14, 0x1b, 0xf0, 0x08, 0x00, 0x16, 0x46, 0xc9, 0x80, 0xea, - 0xe2, 0x00, 0x70, 0x3f, 0x35, 0x27, 0x02, 0xa5, 0x61, 0x28, 0x7e, 0x4a, 0x48, 0x15, 0x38, 0x00, - 0x1e, 0x4e, 0x00, 0xb1, 0x2b, 0x1f, 0x0e, 0x9f, 0x7e, 0x97, 0x67, 0xf9, 0x76, 0x1a, 0x80, 0x00, - 0x41, 0x5e, 0x38, 0x01, 0xb7, 0x59, 0xa0, 0xd8, 0x7c, 0x38, 0x8a, 0x11, 0x20, 0xe2, 0x3a, 0x0b, - 0xf7, 0x50, 0xff, 0xc6, 0x6d, 0x36, 0xc7, 0xab, 0x58, 0x9a, 0x62, 0xd3, 0x12, 0xe9, 0x32, 0x04, - 0xa2, 0x41, 0x0b, 0x44, 0xb2, 0xcf, 0xf0, 0x38, 0x01, 0xe4, 0x29, 0x5d, 0x58, 0x75, 0xb5, 0x51, - 0x90, 0xed, 0xc7, 0x6c, 0x0e, 0xe4, 0xa5, 0x86, 0x58, 0x19, 0x2a, 0xa7, 0xf9, 0x60, 0xd5, 0xa9, - 0xc1, 0xec, 0xc5, 0x2a, 0x3c, 0xf0, 0x1e, 0x00, 0x02, 0x10, 0x31, 0xc0, 0x00, 0x87, 0x82, 0x11, - 0xb3, 0xc1, 0xc3, 0xc1, 0xc8, 0xea, 0x3c, 0x00, 0x70, 0x3b, 0x8d, 0x47, 0x1b, 0x07, 0x45, 0x98, - 0xb8, 0x54, 0x01, 0x5a, 0x33, 0xc0, 0xf2, 0xc0, 0x03, 0x28, 0xa5, 0x3c, 0x00, 0x3c, 0x14, 0x00, - 0x02, 0x10, 0x60, 0xd0, 0x00, 0x21, 0x4e, 0x33, 0x7f, 0xe1, 0xd5, 0x01, 0x51, 0xd1, 0x20, 0x78, - 0x60, 0xdb, 0x6e, 0x4e, 0xe2, 0x5f, 0x09, 0xdb, 0x7d, 0x53, 0x27, 0x54, 0xce, 0xf1, 0xff, 0x3b, - 0x1c, 0xde, 0xff, 0x87, 0x54, 0x00, 0x99, 0x03, 0x87, 0x73, 0x78, 0x20, 0xff, 0xef, 0x48, 0xfd, - 0xd0, 0x29, 0xb0, 0x3f, 0xe7, 0x60, 0x5b, 0x6f, 0x8e, 0x32, 0xf7, 0x7e, 0x54, 0x0c, 0x21, 0x93, - 0xd6, 0x3a, 0xfb, 0x67, 0xbf, 0xe1, 0xe2, 0x40, 0x48, 0x32, 0x84, 0xce, 0x8d, 0xff, 0x31, 0xa6, - 0xbd, 0xde, 0x6e, 0xf5, 0x9e, 0xf9, 0xb5, 0x0a, 0x61, 0x82, 0x07, 0x9d, 0xfc, 0x75, 0xfb, 0x3d, - 0xf5, 0xac, 0x35, 0x20, 0x06, 0xd4, 0x8c, 0x3e, 0xfd, 0xef, 0xfe, 0x16, 0x42, 0x18, 0x2a, 0x17, - 0x24, 0x00, 0xc0, 0xd8, 0xf4, 0xf0, 0xbf, 0xae, 0xee, 0xbd, 0xde, 0x78, 0x75, 0x6c, 0x36, 0xce, - 0x04, 0xff, 0x11, 0xce, 0xbb, 0x32, 0xc3, 0xfb, 0xfd, 0xdb, 0x32, 0x49, 0xbd, 0x95, 0x96, 0x13, - 0x21, 0x02, 0xed, 0xaa, 0x86, 0x6e, 0xae, 0x8e, 0xaf, 0x84, 0xab, 0x59, 0xa1, 0xbe, 0x1b, 0xe0, - 0x8a, 0x17, 0x62, 0xc0, 0x75, 0x19, 0x26, 0x7d, 0xef, 0xf1, 0x5c, 0x56, 0x31, 0x8d, 0xe1, 0xd9, - 0x80, 0x14, 0x40, 0xbd, 0xe2, 0x5c, 0xdd, 0x55, 0x58, 0xa7, 0x14, 0xe6, 0xed, 0xcc, 0x5e, 0x2f, - 0xc5, 0x4f, 0xdb, 0xf0, 0xbb, 0x80, 0x2c, 0x7d, 0x01, 0xa0, 0x1a, 0x6c, 0xad, 0xaf, 0x76, 0xcf, - 0xf5, 0x7e, 0x7f, 0xf6, 0x17, 0x21, 0x00, 0x1d, 0x45, 0x5c, 0x81, 0x11, 0x55, 0xd9, 0x0a, 0xfd, - 0x90, 0xaf, 0x15, 0xad, 0x71, 0x61, 0x62, 0x40, 0x3a, 0x5b, 0x08, 0xe7, 0xbd, 0xff, 0xf8, 0x80, - 0xc8, 0x50, 0xad, 0x35, 0x83, 0x78, 0xe2, 0x4c, 0x6f, 0xb6, 0xd4, 0xc4, 0x12, 0xcf, 0x71, 0x3c, - 0xa8, 0x73, 0x1c, 0x1c, 0x34, 0xa0, 0x2c, 0xf0, 0x14, 0x53, 0xfa, 0xfd, 0x55, 0x6b, 0x0b, 0xe0, - 0x09, 0xcc, 0xfc, 0x46, 0x91, 0xba, 0xaa, 0xaa, 0xa9, 0xbc, 0xce, 0xb5, 0xd8, 0xc3, 0x59, 0x1d, - 0x69, 0x5d, 0x3f, 0xff, 0xf6, 0xbc, 0x61, 0x76, 0x50, 0x09, 0x40, 0xdb, 0x88, 0x51, 0xdc, 0xbd, - 0x54, 0x5f, 0xea, 0xaa, 0xbb, 0x30, 0xbb, 0x20, 0x03, 0x03, 0x1a, 0xc3, 0xc2, 0x6e, 0xaf, 0x9f, - 0x59, 0x3f, 0xbd, 0xec, 0xab, 0x12, 0xc2, 0xe4, 0xd8, 0xa5, 0x0d, 0x85, 0x37, 0x1a, 0xc4, 0x81, - 0x30, 0xb4, 0x24, 0x74, 0x2c, 0xdc, 0x03, 0xf2, 0x03, 0xa0, 0x29, 0x71, 0x5b, 0x89, 0x1e, 0xd8, - 0xe8, 0x2f, 0x89, 0xc2, 0x20, 0x72, 0x5e, 0x8b, 0x25, 0x54, 0xfe, 0x76, 0x1e, 0x8e, 0x00, 0xcf, - 0x4e, 0x70, 0x12, 0x97, 0xfc, 0xeb, 0xc6, 0x9c, 0x9e, 0x2f, 0xad, 0x35, 0x75, 0x09, 0x2d, 0x99, - 0x83, 0x11, 0x71, 0xfe, 0xee, 0x79, 0xe9, 0x97, 0xde, 0x1a, 0x24, 0x09, 0x7f, 0xa6, 0x8d, 0xfd, - 0x77, 0xd7, 0xdb, 0xfc, 0x63, 0xb0, 0xe2, 0x80, 0x06, 0x31, 0xcb, 0x80, 0x94, 0xac, 0x1a, 0x86, - 0x95, 0xbd, 0x74, 0xc9, 0xc1, 0xff, 0x1e, 0xba, 0xb7, 0x6f, 0x14, 0xcd, 0xcf, 0x3c, 0xac, 0xc8, - 0xbd, 0xe5, 0xff, 0x81, 0x80, 0x30, 0x36, 0x28, 0x06, 0x48, 0x15, 0x38, 0xf4, 0x9a, 0x9b, 0xb9, - 0x60, 0x07, 0x85, 0x42, 0xad, 0x0c, 0x36, 0x5a, 0xad, 0x48, 0x5c, 0x0a, 0x9e, 0x07, 0x02, 0x20, - 0x20, 0x70, 0xd0, 0x3a, 0x41, 0x02, 0xc4, 0x3f, 0x66, 0x64, 0x79, 0x44, 0x39, 0x1e, 0x72, 0xd5, - 0x78, 0x40, 0x6c, 0xe3, 0xe5, 0x01, 0x52, 0x4d, 0x83, 0xb6, 0x33, 0x0f, 0x0f, 0xe9, 0x81, 0xae, - 0x94, 0x73, 0xcf, 0xa8, 0x9c, 0xa8, 0x41, 0x21, 0x47, 0x03, 0xb2, 0x0a, 0x3d, 0xb2, 0x43, 0xa4, - 0x79, 0xbb, 0x70, 0xe4, 0xa0, 0x02, 0xe7, 0x38, 0x6c, 0xb8, 0xea, 0x20, 0x96, 0xee, 0xd9, 0x7a, - 0x71, 0x17, 0x36, 0xdc, 0x67, 0x8a, 0xcc, 0x64, 0x99, 0x92, 0x95, 0xed, 0x9b, 0xfc, 0x3a, 0x42, - 0x80, 0x06, 0x8f, 0x21, 0xa4, 0xae, 0x76, 0xa7, 0xc3, 0x77, 0xf7, 0x7a, 0xcb, 0x65, 0x98, 0xac, - 0x5e, 0x38, 0xff, 0x97, 0xc9, 0xc5, 0xd9, 0xc6, 0x22, 0xa6, 0xfb, 0xfc, 0x38, 0xa0, 0x07, 0x55, - 0x93, 0x09, 0xc5, 0xa9, 0xba, 0x73, 0x58, 0xd7, 0x3d, 0x29, 0x2f, 0x17, 0xb3, 0xdc, 0x5f, 0x84, - 0x4d, 0x26, 0x2e, 0x43, 0xff, 0x1e, 0x5c, 0x41, 0x32, 0x3b, 0x75, 0x04, 0x3d, 0x03, 0xae, 0xf8, - 0xae, 0xb1, 0x7d, 0x71, 0x91, 0x50, 0x15, 0x21, 0x01, 0xa6, 0x10, 0x79, 0x58, 0x11, 0xd2, 0x40, - 0x6a, 0x07, 0x8b, 0x03, 0xe4, 0xad, 0xc1, 0x69, 0xa8, 0x0f, 0xf9, 0x60, 0xc5, 0x60, 0xc1, 0xf3, - 0x37, 0x73, 0x8c, 0x96, 0xab, 0xd1, 0x24, 0x99, 0x92, 0xb9, 0xd4, 0xbf, 0xe1, 0xe2, 0x40, 0x32, - 0x29, 0xcc, 0x54, 0xa2, 0xfa, 0xf3, 0x3d, 0xc6, 0xf6, 0x29, 0xb8, 0xa7, 0x5e, 0xb3, 0x77, 0x5b, - 0x96, 0x39, 0xad, 0xc7, 0xfc, 0x1c, 0x02, 0x80, 0xa7, 0x85, 0x55, 0xc5, 0x5c, 0x62, 0x78, 0x4d, - 0x52, 0xc0, 0x62, 0x5e, 0x28, 0x31, 0xdf, 0x97, 0x9c, 0x71, 0x11, 0x4c, 0xa4, 0x1a, 0x80, 0x00, - 0x41, 0x66, 0x38, 0x00, 0x10, 0xe0, 0x36, 0x40, 0x90, 0x14, 0x9f, 0xf5, 0x9a, 0x27, 0x38, 0xad, - 0x4b, 0x01, 0x9e, 0x0f, 0x1d, 0x2e, 0x77, 0x87, 0xb6, 0xa5, 0xef, 0xc7, 0xe9, 0x7b, 0xa0, 0x38, - 0x00, 0x08, 0x26, 0xc7, 0x00, 0xf0, 0x38, 0x86, 0x46, 0xcb, 0x18, 0xa6, 0x4a, 0x00, 0xd3, 0x66, - 0x1c, 0x00, 0x70, 0x56, 0x79, 0xe5, 0x80, 0x33, 0xf2, 0xc0, 0x6e, 0xed, 0xea, 0x95, 0x65, 0x16, - 0xa6, 0x03, 0x60, 0x00, 0x10, 0x55, 0x8e, 0x00, 0x19, 0xbb, 0x6b, 0xfc, 0x40, 0x44, 0x6c, 0xe3, - 0x91, 0x62, 0x8d, 0x42, 0xab, 0x56, 0xf1, 0xd1, 0xf2, 0xf0, 0xab, 0x52, 0x42, 0xa3, 0xc0, 0xe6, - 0x37, 0x4e, 0x18, 0xb0, 0x00, 0x10, 0x57, 0x8e, 0x00, 0x1b, 0x6d, 0xb6, 0xdf, 0xc3, 0xc4, 0x80, - 0x7a, 0x41, 0xd2, 0x7e, 0x6a, 0xa7, 0xef, 0x5a, 0x8a, 0xd7, 0x27, 0x53, 0xbc, 0xe7, 0xc7, 0x6e, - 0x1b, 0x8a, 0x54, 0xdd, 0x6d, 0xb7, 0xf0, 0xd9, 0x20, 0x05, 0xbb, 0x40, 0xd7, 0xd1, 0x94, 0x0d, - 0x6e, 0xda, 0x93, 0x8b, 0xef, 0x78, 0xba, 0x88, 0xf9, 0x08, 0x50, 0x4e, 0x74, 0x89, 0x31, 0xf1, - 0xa8, 0x70, 0x7f, 0xc3, 0x44, 0x81, 0x89, 0x96, 0xc7, 0xde, 0xff, 0xfa, 0xc2, 0x6c, 0xc0, 0x0d, - 0x18, 0x48, 0x15, 0xef, 0x72, 0x2b, 0xbd, 0xee, 0xa2, 0xb5, 0x15, 0xde, 0xf0, 0xdc, 0x48, 0x1b, - 0x58, 0x44, 0x56, 0xbb, 0x2d, 0x6a, 0xca, 0xcb, 0x3a, 0x9a, 0x26, 0x53, 0xfb, 0xe1, 0xe2, 0x40, - 0x97, 0x90, 0xd2, 0x5f, 0xaf, 0xed, 0xe2, 0xda, 0xbf, 0xe1, 0x96, 0x24, 0x02, 0x50, 0x0d, 0x88, - 0xa3, 0xc9, 0xee, 0xee, 0xea, 0xaa, 0xae, 0xee, 0xfe, 0xc3, 0x2e, 0x00, 0x7e, 0xd0, 0xf7, 0x66, - 0xad, 0xce, 0xae, 0xb1, 0x78, 0xbb, 0xbb, 0xbd, 0x6a, 0x97, 0x0e, 0x90, 0x80, 0x06, 0xe0, 0x33, - 0x4e, 0x1e, 0x9f, 0xdb, 0x85, 0x38, 0xbd, 0xba, 0xdb, 0x6c, 0x5d, 0xb1, 0x3f, 0x5f, 0xa3, 0xdf, - 0x5f, 0x0d, 0x4c, 0x00, 0x91, 0x63, 0x65, 0xe4, 0xad, 0xcf, 0x78, 0xb8, 0xac, 0xde, 0xdd, 0xdd, - 0xff, 0x92, 0xb8, 0x58, 0x90, 0x14, 0x72, 0x3b, 0x72, 0xfb, 0xdd, 0xfa, 0xba, 0xbc, 0x34, 0x43, - 0x88, 0xda, 0x0a, 0x69, 0xff, 0xfa, 0x5f, 0xf1, 0xd9, 0x54, 0x38, 0x48, 0x16, 0x61, 0x57, 0x9f, - 0x37, 0x5e, 0xef, 0xad, 0x55, 0x7f, 0xc2, 0xec, 0x80, 0x37, 0x36, 0xc2, 0x24, 0xdd, 0xa9, 0xe3, - 0x3f, 0x8b, 0xd5, 0x6b, 0x2d, 0x8b, 0x70, 0x1a, 0xec, 0xab, 0x35, 0x84, 0xc8, 0x50, 0x07, 0x3b, - 0x45, 0xc7, 0x7d, 0x74, 0xfa, 0xf8, 0x4d, 0x90, 0x01, 0xa8, 0xf3, 0x0c, 0x93, 0x77, 0x75, 0xf7, - 0x8f, 0xd2, 0xdf, 0x8e, 0x94, 0x03, 0xb5, 0x09, 0x21, 0xdb, 0x15, 0x81, 0x20, 0xb1, 0x74, 0x5c, - 0x85, 0xd1, 0x40, 0x6f, 0x46, 0x4b, 0x17, 0x5b, 0x9f, 0x99, 0xf5, 0xac, 0xcf, 0x99, 0xf4, 0x77, - 0x81, 0x60, 0x04, 0xc0, 0x5c, 0x40, 0x54, 0xa9, 0x28, 0x00, 0x12, 0x5a, 0xc7, 0x41, 0x78, 0xbd, - 0x42, 0xb4, 0x6c, 0x18, 0x97, 0x7f, 0x87, 0x88, 0x40, 0x26, 0x1e, 0x88, 0x1a, 0x34, 0x7e, 0xb5, - 0xab, 0x6a, 0xeb, 0x81, 0x73, 0x1a, 0x73, 0x52, 0x7f, 0x87, 0x30, 0x02, 0x18, 0x18, 0xfb, 0xff, - 0x07, 0x3f, 0x9f, 0x5e, 0xee, 0x81, 0xff, 0x19, 0x7b, 0x9b, 0x9f, 0x9f, 0xfb, 0x67, 0xef, 0xe0, - 0xd6, 0x8c, 0x8d, 0xeb, 0x95, 0xf8, 0x76, 0x24, 0x02, 0x76, 0x98, 0xcf, 0xd9, 0x59, 0xba, 0x16, - 0xc9, 0x01, 0x5b, 0x21, 0x77, 0x68, 0x9e, 0x79, 0xa2, 0xc8, 0xa7, 0x18, 0xa5, 0x33, 0xea, 0xff, - 0x0e, 0x28, 0x00, 0xc6, 0xe1, 0x7a, 0x7f, 0xcc, 0x7b, 0x85, 0x32, 0xc6, 0x2e, 0x2b, 0x45, 0x48, - 0x91, 0x59, 0x8d, 0xd3, 0x10, 0xf7, 0x50, 0xef, 0x2c, 0x39, 0x0e, 0xd6, 0xea, 0x6f, 0x5f, 0xc3, - 0xc8, 0x80, 0x06, 0x59, 0x7b, 0x4c, 0x57, 0xd2, 0xff, 0xd5, 0x7a, 0xd5, 0xf1, 0x46, 0x2e, 0x5b, - 0x12, 0x78, 0xac, 0xf3, 0xcb, 0x18, 0xb9, 0x6c, 0xb4, 0x04, 0x18, 0xc5, 0x37, 0x29, 0xaf, 0xe0, - 0x14, 0x80, 0x42, 0x36, 0x2b, 0x1d, 0x5d, 0xdd, 0xc7, 0x97, 0x7f, 0x26, 0xd0, 0xb5, 0xc3, 0x60, - 0x78, 0x9c, 0x74, 0x17, 0xbc, 0x00, 0x15, 0x0f, 0x0e, 0x1e, 0x00, 0x16, 0x07, 0xae, 0x0f, 0xd3, - 0x71, 0x72, 0xff, 0x87, 0x14, 0x00, 0x98, 0xd8, 0x52, 0xf1, 0xf2, 0xaa, 0x17, 0x95, 0xe8, 0xe3, - 0x37, 0xd9, 0xce, 0xf7, 0x3c, 0xf5, 0x98, 0x67, 0x3f, 0x19, 0x6f, 0x55, 0xca, 0x70, 0xf8, 0x6b, - 0xc6, 0xd8, 0x2b, 0xc3, 0xa8, 0x82, 0x41, 0x7e, 0x16, 0x89, 0x7c, 0xf0, 0x7c, 0xb0, 0x01, 0x89, - 0x1e, 0x4a, 0x00, 0x0e, 0x0b, 0x01, 0x84, 0x48, 0x19, 0xe2, 0x21, 0xf2, 0x40, 0x1c, 0x7e, 0x13, - 0x0e, 0x28, 0x01, 0x2a, 0x9b, 0x0f, 0xe7, 0x61, 0xc4, 0xef, 0x72, 0xf4, 0xf4, 0xcf, 0xf2, 0xf4, - 0xf4, 0xc5, 0xb0, 0xf5, 0x57, 0xed, 0x97, 0x61, 0xec, 0x00, 0x52, 0xa3, 0x26, 0x0e, 0x1c, 0x7c, - 0xdd, 0xe1, 0x72, 0xda, 0x89, 0x1f, 0x59, 0x7e, 0x29, 0xa2, 0x3d, 0x82, 0x27, 0xc0, 0xfc, 0xb3, - 0x7f, 0x90, 0x22, 0xce, 0x96, 0x55, 0x7e, 0x1d, 0x50, 0x02, 0xe9, 0xa2, 0x19, 0xd0, 0xcb, 0xff, - 0x5c, 0x5f, 0x2d, 0xf9, 0x79, 0x7a, 0x67, 0x3e, 0xcf, 0xc4, 0xbf, 0x2f, 0xb5, 0x64, 0x08, 0x28, - 0x55, 0xad, 0x53, 0x4f, 0xc0, 0x6c, 0x09, 0x0a, 0x5b, 0xcf, 0xf6, 0xf1, 0xdb, 0x9c, 0x07, 0x9c, - 0xf2, 0xb0, 0xa8, 0x5b, 0x3d, 0xe3, 0xa5, 0xcf, 0x79, 0x66, 0x2d, 0x09, 0x4c, 0xa6, 0x5c, 0x44, - 0x00, 0x04, 0x16, 0x50, 0xc0, 0x02, 0xb0, 0x2c, 0x02, 0x80, 0xa5, 0x99, 0x27, 0x3e, 0xb1, 0x40, - 0xd9, 0xa2, 0x00, 0xf3, 0x9e, 0x28, 0xc5, 0x58, 0xa3, 0x6c, 0xa4, 0x4a, 0x73, 0x46, 0x69, 0xe3, - 0xc6, 0x80, 0x00, 0x82, 0xba, 0x12, 0x04, 0xb0, 0x70, 0x0c, 0x06, 0xc7, 0x5f, 0x27, 0x00, 0xd0, - 0xf7, 0x9e, 0x07, 0x9c, 0x1f, 0x64, 0x81, 0x5f, 0x13, 0xe1, 0x41, 0x62, 0x4a, 0xac, 0x67, 0xdb, - 0x1d, 0x5c, 0x31, 0xc0, 0x00, 0x41, 0x66, 0x30, 0x02, 0xa7, 0xed, 0xdf, 0xc3, 0xc4, 0x80, 0x16, - 0x85, 0x61, 0x69, 0x82, 0x77, 0x1e, 0x4a, 0xb7, 0xe7, 0x41, 0x90, 0x64, 0xd8, 0xb9, 0xe0, 0x5b, - 0x7f, 0xa5, 0x5a, 0xfc, 0x3f, 0x89, 0x7d, 0x63, 0xbf, 0xac, 0x40, 0x4d, 0x05, 0x3b, 0x9f, 0xfe, - 0x1b, 0x24, 0x00, 0xea, 0x1d, 0xfc, 0x81, 0x24, 0xbd, 0xaf, 0x6b, 0xff, 0xf8, 0xcb, 0x78, 0xa3, - 0x71, 0x2f, 0x1b, 0xc3, 0xe6, 0xd8, 0x91, 0xe7, 0xe3, 0x88, 0xfb, 0xea, 0xce, 0x79, 0xa3, 0x38, - 0xd0, 0x0c, 0x17, 0xcf, 0xe6, 0xa7, 0xc3, 0x38, 0x07, 0x24, 0x50, 0x83, 0xa9, 0x4a, 0x13, 0x77, - 0x7d, 0x38, 0xb8, 0xba, 0xab, 0x79, 0x7b, 0x7b, 0x7c, 0xac, 0x8b, 0x89, 0x21, 0x8c, 0xec, 0x80, - 0x0e, 0xfe, 0x2c, 0x3d, 0x0b, 0x90, 0xc0, 0x25, 0x0c, 0x40, 0xcf, 0x39, 0xaf, 0x77, 0xea, 0x58, - 0x2c, 0x27, 0x51, 0x5a, 0xb6, 0x1b, 0x43, 0x41, 0x06, 0x6a, 0xcb, 0xed, 0xa2, 0x8c, 0x63, 0x27, - 0x74, 0x61, 0xf0, 0xbd, 0x3b, 0x65, 0x3f, 0x9b, 0xf8, 0x4d, 0x90, 0x04, 0x79, 0xb0, 0x9f, 0x37, - 0xeb, 0xff, 0x8b, 0x62, 0x40, 0x1e, 0xf0, 0x1a, 0x35, 0x07, 0xd8, 0x4d, 0xc0, 0x14, 0x6f, 0x0d, - 0x43, 0x3f, 0xe3, 0xf9, 0xff, 0x6f, 0xb7, 0x0d, 0x4c, 0x00, 0xc7, 0x5e, 0x60, 0xae, 0xfc, 0xdb, - 0x75, 0xaf, 0xfe, 0xb7, 0x10, 0xce, 0x00, 0x90, 0x70, 0xa1, 0xc4, 0x8a, 0xea, 0x5a, 0xcd, 0xcd, - 0xe6, 0xfa, 0xac, 0xde, 0xdb, 0x8c, 0x03, 0x60, 0x04, 0x80, 0xa4, 0x50, 0x19, 0xf9, 0xe0, 0xe3, - 0xfe, 0xb6, 0xdb, 0xeb, 0xeb, 0xa8, 0xb0, 0xf0, 0xbc, 0xa1, 0x05, 0x7a, 0x7f, 0xbd, 0xfe, 0x9b, - 0x0b, 0xb3, 0x87, 0xab, 0x4b, 0x5a, 0xd6, 0xb5, 0xde, 0xe3, 0xb6, 0x1a, 0x63, 0x01, 0x93, 0x5f, - 0xe9, 0xfd, 0x7e, 0xc3, 0x52, 0x80, 0x95, 0xd3, 0x9e, 0x5f, 0xff, 0x4d, 0x3e, 0xc6, 0x17, 0xc0, - 0x53, 0x63, 0xa6, 0xff, 0xfe, 0xf9, 0x61, 0xa2, 0x40, 0x1e, 0xc4, 0x66, 0x03, 0xb4, 0x2c, 0xdb, - 0x3f, 0xff, 0x6f, 0x71, 0x5e, 0xc3, 0xc4, 0x81, 0x1e, 0xe9, 0x2a, 0x7f, 0xff, 0x97, 0x5b, 0xff, - 0x14, 0xe0, 0x34, 0x7c, 0x08, 0xe4, 0x26, 0xa0, 0x85, 0x08, 0x81, 0xda, 0xd7, 0xaf, 0x45, 0x45, - 0x86, 0x10, 0xb0, 0x06, 0x51, 0x5c, 0xb1, 0x83, 0x7b, 0xdd, 0xfe, 0xf7, 0x47, 0x1c, 0x3d, 0x18, - 0x04, 0xc7, 0x10, 0x28, 0xff, 0x92, 0xf6, 0x65, 0xeb, 0x4f, 0xfc, 0x38, 0x66, 0x8c, 0x6a, 0x3a, - 0x2f, 0x0a, 0x9e, 0xbd, 0xe1, 0xc2, 0x40, 0x64, 0x5f, 0x04, 0x12, 0x3f, 0x9c, 0x5b, 0x3f, 0x07, - 0x74, 0x2b, 0xfb, 0xc7, 0xea, 0xd8, 0xc0, 0x01, 0x53, 0xa7, 0x24, 0xff, 0x80, 0x4c, 0x40, 0x64, - 0x8d, 0x88, 0x00, 0x3c, 0x1e, 0x0b, 0x02, 0x95, 0x38, 0x70, 0x78, 0x2c, 0x1e, 0x02, 0xc3, 0x9c, - 0x89, 0x6a, 0x9e, 0x0e, 0x1e, 0x71, 0x62, 0x96, 0x37, 0x76, 0x37, 0x83, 0x82, 0x00, 0x02, 0x07, - 0x68, 0x12, 0x00, 0x05, 0xa2, 0xad, 0xbf, 0xf8, 0x02, 0x78, 0x01, 0x10, 0x14, 0x9c, 0x70, 0xe0, - 0x03, 0x84, 0xaa, 0x9d, 0xc3, 0x8e, 0x93, 0x03, 0x51, 0xcf, 0x3c, 0x05, 0x82, 0xc1, 0xb7, 0x4b, - 0x01, 0x8e, 0xfc, 0xb6, 0x78, 0xe6, 0x6c, 0x1a, 0x00, 0x02, 0x0b, 0x20, 0x38, 0x00, 0x18, 0xc3, - 0x0a, 0x01, 0x6c, 0x4b, 0x01, 0x91, 0x07, 0xce, 0xf8, 0xd8, 0x17, 0xe7, 0x80, 0x3b, 0xf1, 0xd7, - 0xec, 0xb7, 0xf1, 0x46, 0xe5, 0xe0, 0xcc, 0xfc, 0x3c, 0xca, 0x00, 0xcc, 0x44, 0x74, 0xd1, 0x50, - 0xbe, 0x32, 0x0d, 0xfa, 0x7a, 0xb8, 0x3b, 0x71, 0x74, 0xd9, 0xcb, 0xc2, 0xcd, 0x37, 0xb0, 0x5e, - 0x03, 0x53, 0x4d, 0xf4, 0x3c, 0x3f, 0xc3, 0x01, 0x80, 0xa5, 0xfe, 0x39, 0x53, 0xc1, 0xc3, 0x24, - 0x65, 0x1a, 0x3f, 0x8e, 0xcf, 0xa2, 0x98, 0x3d, 0xe2, 0xa5, 0x38, 0x38, 0x49, 0x58, 0x94, 0xa8, - 0xc0, 0x00, 0x10, 0x75, 0x01, 0xc0, 0x00, 0xf7, 0x01, 0xc0, 0x04, 0x10, 0xa4, 0x7e, 0x29, 0x41, - 0xc4, 0x5d, 0x80, 0xda, 0x0e, 0x25, 0xc2, 0x80, 0x05, 0x55, 0xa8, 0xf0, 0xba, 0x30, 0x54, 0x1e, - 0xf9, 0x62, 0xd6, 0x29, 0x50, 0x59, 0x4a, 0x91, 0x2d, 0xb0, 0x54, 0x26, 0x00, 0x02, 0x0a, 0x5b, - 0x60, 0x62, 0x9c, 0x58, 0x89, 0xc1, 0x14, 0x8d, 0xc9, 0x87, 0x69, 0x78, 0xb9, 0xf6, 0xdb, 0x59, - 0x33, 0xe4, 0xdb, 0x4f, 0xea, 0x40, 0x7c, 0x4c, 0xdb, 0x6b, 0x2b, 0x6d, 0x7a, 0xc5, 0x7c, 0x10, - 0xef, 0x7e, 0xac, 0x48, 0x24, 0x34, 0x28, 0xab, 0x94, 0x81, 0xaf, 0xf0, 0xf6, 0x00, 0xc8, 0x71, - 0x64, 0x71, 0xfb, 0xf2, 0x4e, 0xac, 0xfa, 0xbc, 0xbe, 0x14, 0x96, 0x07, 0x86, 0x37, 0xff, 0x7f, - 0xc3, 0x33, 0x80, 0x03, 0xfc, 0x3e, 0xa5, 0x7b, 0x4f, 0x6a, 0x02, 0x78, 0x1d, 0x3f, 0x58, 0x97, - 0xfb, 0x93, 0xc6, 0x7a, 0x93, 0x9f, 0x87, 0xf0, 0xdd, 0xb0, 0x7f, 0x87, 0x94, 0x01, 0xca, 0x81, - 0x29, 0x49, 0x31, 0x1a, 0xeb, 0x17, 0x06, 0x5f, 0x3a, 0x08, 0x8d, 0x08, 0x47, 0x98, 0x5d, 0x23, - 0xfa, 0x51, 0x7a, 0x9c, 0x63, 0x7f, 0xe1, 0xc5, 0x00, 0x1f, 0xe0, 0x77, 0x1f, 0x45, 0x86, 0xa2, - 0xc2, 0x89, 0x1c, 0x15, 0xd8, 0xb2, 0xf2, 0x9b, 0x05, 0xb6, 0xc4, 0xf0, 0x79, 0xfe, 0x3b, 0xf3, - 0x73, 0xc4, 0x94, 0x70, 0xbf, 0x0a, 0xf0, 0x23, 0xa1, 0x16, 0x95, 0x53, 0x4f, 0xe1, 0xe2, 0x40, - 0x05, 0x7e, 0xd9, 0x5e, 0xff, 0xf3, 0x4b, 0xdb, 0xe6, 0x9b, 0x8b, 0xce, 0x6e, 0x2e, 0x2b, 0x17, - 0x1f, 0xcb, 0xa2, 0x74, 0x5f, 0x0d, 0x90, 0xc0, 0x0d, 0x21, 0xc7, 0x84, 0xc3, 0x8f, 0xe0, 0xf7, - 0xf7, 0x3f, 0xad, 0xe7, 0xed, 0x89, 0x7d, 0x67, 0x8f, 0x77, 0x1b, 0x9f, 0x7b, 0xfc, 0x3c, 0x42, - 0x00, 0x38, 0x91, 0xb0, 0xfb, 0x61, 0xc9, 0x18, 0x56, 0xde, 0xfe, 0xdb, 0xef, 0x12, 0xf3, 0xfa, - 0x60, 0x4a, 0x43, 0xf2, 0xf7, 0xfc, 0x14, 0x42, 0x90, 0x68, 0x9a, 0xac, 0xc1, 0x39, 0x53, 0x8f, - 0x2d, 0x9e, 0xf3, 0x87, 0x96, 0x0c, 0xe0, 0x00, 0xf3, 0x8f, 0x38, 0x00, 0x08, 0x73, 0x83, 0xce, - 0x1e, 0x58, 0x00, 0xc7, 0xbe, 0x58, 0x00, 0x30, 0x5b, 0x61, 0x76, 0x70, 0x0b, 0xc5, 0x83, 0x8c, - 0x60, 0xe3, 0x7a, 0xf6, 0xee, 0x5e, 0xfb, 0xb9, 0x6c, 0xbe, 0xc5, 0x6e, 0x2b, 0x99, 0x30, 0xd1, - 0x20, 0x21, 0x6c, 0xc8, 0x0a, 0x55, 0x7f, 0x7f, 0xfd, 0x61, 0x36, 0x20, 0x00, 0x77, 0x53, 0x10, - 0x9f, 0xca, 0x34, 0xbf, 0xba, 0xfc, 0x5e, 0x2e, 0xe5, 0xe9, 0xb7, 0xc3, 0x71, 0xa0, 0x04, 0x23, - 0xc3, 0xe8, 0xc2, 0xa4, 0x7f, 0xca, 0x78, 0x2d, 0xe8, 0xac, 0x8d, 0xc6, 0xe8, 0xbb, 0xc6, 0x3f, - 0xbe, 0x16, 0xdb, 0xe1, 0x79, 0x00, 0x31, 0xbc, 0x51, 0x2d, 0xbf, 0xdb, 0x7e, 0xd9, 0xfb, 0x63, - 0x58, 0x90, 0x0b, 0xa5, 0x8d, 0x90, 0xd3, 0x25, 0xc2, 0x6e, 0x00, 0x71, 0x62, 0xdf, 0xc1, 0x25, - 0xbd, 0x6b, 0xff, 0x86, 0x48, 0x40, 0x06, 0xc9, 0x36, 0x01, 0x38, 0x7c, 0xf5, 0x55, 0x5f, 0x55, - 0x55, 0xc8, 0xaf, 0x0d, 0x60, 0x5c, 0xeb, 0xfd, 0xfe, 0xfd, 0x6f, 0x79, 0x17, 0x90, 0xd6, 0x03, - 0x4b, 0x09, 0x49, 0x67, 0xff, 0xaa, 0xaa, 0xdf, 0x0d, 0x38, 0x07, 0xb0, 0x58, 0x7a, 0x8d, 0x2f, - 0xbd, 0xf5, 0xcb, 0x2e, 0x18, 0x65, 0x00, 0x78, 0x77, 0xf1, 0xeb, 0x64, 0xd3, 0x4d, 0x34, 0xd3, - 0x4e, 0x9a, 0x69, 0xa6, 0x9a, 0x69, 0xa6, 0x8e, 0xe3, 0x88, 0x28, 0x22, 0xfe, 0x8f, 0x8a, 0x21, - 0x43, 0xe9, 0x31, 0x0b, 0xce, 0x00, 0xbc, 0x69, 0x81, 0x91, 0x2a, 0xff, 0xa1, 0xd0, 0xfc, 0xcd, - 0x86, 0x98, 0x80, 0x26, 0xf8, 0x6f, 0x2f, 0xff, 0xdb, 0x6e, 0x73, 0x0d, 0x4a, 0x12, 0x93, 0x2a, - 0xd5, 0xe9, 0xa7, 0xff, 0xe3, 0xe1, 0x52, 0x40, 0x69, 0x61, 0x50, 0x9c, 0xf5, 0xaa, 0xfd, 0x6b, - 0x09, 0xe0, 0x72, 0x40, 0x90, 0x2d, 0x6b, 0x55, 0x5e, 0xbe, 0x13, 0x62, 0x40, 0x24, 0x12, 0xf2, - 0x01, 0x8f, 0xdb, 0xeb, 0x55, 0xae, 0xb5, 0x86, 0x90, 0xa0, 0x41, 0x41, 0xfc, 0xff, 0x5f, 0xe3, - 0x1b, 0x0d, 0xe0, 0x06, 0x44, 0x88, 0x3f, 0xae, 0x7f, 0x1e, 0xdd, 0x6e, 0xf7, 0xb8, 0xad, 0xc9, - 0xc7, 0xba, 0x41, 0xdc, 0x41, 0xd2, 0xe7, 0xf8, 0x77, 0xe2, 0x8a, 0xc7, 0xc3, 0x78, 0x02, 0x49, - 0x21, 0x14, 0x59, 0x7b, 0x30, 0xa7, 0xf5, 0x09, 0xfc, 0x1f, 0xc1, 0xfd, 0xde, 0xbe, 0xa7, 0x0b, - 0x70, 0x48, 0xe0, 0xe7, 0x9d, 0xe0, 0xff, 0x9c, 0x7c, 0x61, 0x41, 0x29, 0x45, 0x95, 0x37, 0x1d, - 0x5c, 0xb5, 0xfc, 0x3d, 0x20, 0x01, 0x51, 0x25, 0xc0, 0xce, 0x32, 0x3b, 0xbf, 0xdb, 0xf8, 0xbb, - 0x8a, 0x62, 0xd8, 0xb6, 0x98, 0xb6, 0x0d, 0x36, 0x47, 0xb6, 0xdf, 0xc3, 0x98, 0x01, 0x88, 0x47, - 0x9f, 0x4a, 0x2e, 0xbf, 0xdb, 0x1e, 0xc1, 0x62, 0xbb, 0x0f, 0xff, 0xb9, 0x2f, 0xdb, 0x6d, 0xb6, - 0xc4, 0x78, 0xfe, 0x0e, 0xdc, 0x55, 0xe9, 0xa7, 0x0f, 0x10, 0xa0, 0x02, 0xdf, 0x33, 0x11, 0x27, - 0x0a, 0x94, 0x0f, 0x36, 0xad, 0xf3, 0xf9, 0xf8, 0xf6, 0x1b, 0x12, 0xbb, 0x0c, 0x8b, 0x64, 0xa3, - 0x8a, 0x47, 0x0c, 0x22, 0x3b, 0x4c, 0x77, 0x0f, 0x4b, 0xf0, 0x1a, 0x00, 0x51, 0x1b, 0x69, 0x4d, - 0x75, 0x20, 0xc1, 0xe1, 0xf3, 0x50, 0x73, 0x47, 0xb8, 0x42, 0xc4, 0xac, 0xc6, 0x30, 0x4a, 0xaf, - 0x23, 0x88, 0x05, 0xe0, 0xc4, 0x12, 0x87, 0xb6, 0xda, 0x82, 0xd1, 0xfb, 0xf8, 0x67, 0x01, 0x77, - 0x38, 0x5d, 0xcd, 0x65, 0x61, 0x21, 0xdb, 0x7d, 0x26, 0x44, 0xef, 0x93, 0xbe, 0x5d, 0x06, 0xc0, - 0xbb, 0x29, 0xf0, 0x5e, 0xec, 0xf6, 0x29, 0x62, 0xf5, 0xe1, 0x6b, 0xdd, 0xc5, 0x01, 0x8a, 0xc5, - 0x01, 0x8a, 0xc0, 0xd3, 0x1a, 0xf1, 0x47, 0xf0, 0x8c, 0x04, 0xcc, 0x29, 0x13, 0xc3, 0x68, 0xa6, - 0x71, 0xed, 0x64, 0x5b, 0x28, 0xae, 0x8f, 0xd9, 0x07, 0x8b, 0x97, 0x88, 0x0f, 0x2f, 0xaa, 0x36, - 0xc4, 0xf7, 0x58, 0x70, 0x90, 0x02, 0xd5, 0xc2, 0xab, 0x56, 0x02, 0x7f, 0x36, 0xd8, 0x33, 0xa9, - 0xcf, 0x6c, 0xfe, 0x36, 0x76, 0xc7, 0x7f, 0x52, 0xf9, 0x2d, 0x88, 0xfc, 0xe9, 0xbe, 0x33, 0xa7, - 0x78, 0x79, 0x40, 0x18, 0x21, 0xaa, 0xdc, 0x81, 0xc9, 0xe6, 0xb8, 0xbc, 0x2a, 0x38, 0x93, 0xda, - 0x52, 0xdd, 0xba, 0xed, 0xb0, 0x77, 0xed, 0x9e, 0xf7, 0x70, 0xcc, 0x3f, 0x64, 0xf1, 0xa7, 0xf0, - 0xc9, 0x20, 0x04, 0x50, 0x1c, 0xba, 0xe1, 0x6f, 0xb3, 0xea, 0x2a, 0x2f, 0x37, 0xae, 0xb3, 0x77, - 0xdc, 0x6d, 0x30, 0xde, 0x00, 0xa7, 0x41, 0x52, 0x86, 0xac, 0xe3, 0x41, 0x90, 0x13, 0x84, 0x22, - 0xd9, 0x61, 0xb8, 0xa1, 0x89, 0xc0, 0xb6, 0x29, 0x88, 0x18, 0x38, 0xbe, 0x2e, 0x2c, 0x91, 0x3a, - 0x23, 0xc2, 0xfe, 0x1a, 0xc0, 0x0d, 0x66, 0x03, 0x04, 0x9d, 0x24, 0x40, 0xe0, 0xe7, 0xbd, 0xee, - 0x17, 0x70, 0xea, 0xea, 0x58, 0x1e, 0x30, 0x53, 0x83, 0xc1, 0x80, 0x90, 0xd3, 0x0f, 0x33, 0x00, - 0x5e, 0x4d, 0x80, 0x6d, 0xe2, 0xcb, 0xef, 0xe5, 0xf2, 0xfe, 0xee, 0x0c, 0xc0, 0xd2, 0xb7, 0xfc, - 0x3c, 0x48, 0x00, 0x5b, 0x64, 0x1b, 0x48, 0x18, 0xb1, 0x73, 0xf1, 0x2c, 0xce, 0x7f, 0x10, 0x78, - 0x8f, 0x1e, 0x5c, 0xb5, 0xa6, 0xfe, 0x71, 0xe7, 0x1e, 0x71, 0xe7, 0x1e, 0x71, 0xe1, 0xb8, 0x90, - 0x23, 0x6e, 0xda, 0xfc, 0x35, 0x81, 0x0d, 0xa7, 0x81, 0xd7, 0x57, 0xef, 0x7f, 0xbd, 0xcd, 0x1d, - 0xc3, 0x58, 0x0c, 0x83, 0x8d, 0x18, 0x72, 0x95, 0x7b, 0xf1, 0x78, 0xba, 0xd5, 0xdd, 0x6a, 0x8e, - 0xe1, 0x7c, 0x0b, 0x26, 0x05, 0x4b, 0xef, 0xdf, 0xdf, 0xd8, 0x5f, 0x00, 0x3a, 0x0e, 0xc8, 0x3a, - 0x87, 0x33, 0x5b, 0xa2, 0xf1, 0x74, 0xf4, 0xd3, 0x8a, 0x6a, 0x24, 0xc0, 0x9d, 0xd1, 0x98, 0xcc, - 0x8a, 0x10, 0xdb, 0x28, 0x00, 0x92, 0x22, 0x87, 0xc9, 0x46, 0x2c, 0x2d, 0xe6, 0x4e, 0x9b, 0xfb, - 0x7b, 0xe0, 0xa7, 0x07, 0xb0, 0xbd, 0xc9, 0x24, 0x90, 0x92, 0x1f, 0x87, 0x94, 0x53, 0xa6, 0xfb, - 0x74, 0x7f, 0x67, 0xe9, 0x7f, 0xae, 0x17, 0x20, 0xb0, 0x54, 0x82, 0x4c, 0x55, 0x55, 0xf5, 0x55, - 0x5f, 0x1f, 0x1d, 0xc6, 0xa8, 0x23, 0xa6, 0x9f, 0xb4, 0xca, 0x16, 0x90, 0x20, 0x77, 0xd1, 0xa6, - 0xfa, 0xd3, 0x4d, 0xaf, 0xc2, 0xee, 0x0d, 0x14, 0xc9, 0xbf, 0xd7, 0xbf, 0x9b, 0xe3, 0x99, 0xc0, - 0x14, 0xd6, 0x88, 0x14, 0xee, 0x23, 0x8e, 0x15, 0x44, 0x00, 0x66, 0x7c, 0xe0, 0xef, 0x5e, 0x77, - 0x77, 0xff, 0xf8, 0x6b, 0x01, 0x60, 0xa1, 0x87, 0x55, 0x95, 0x1d, 0x97, 0x5a, 0xda, 0x36, 0x4d, - 0x75, 0x93, 0xa3, 0x8e, 0x16, 0x62, 0x00, 0x35, 0xb6, 0x08, 0x86, 0xfe, 0xbf, 0x5e, 0x39, 0xc0, - 0x6f, 0x1b, 0x1c, 0xac, 0x30, 0xce, 0x00, 0x68, 0x39, 0x92, 0x01, 0x9c, 0x4e, 0xbd, 0xfb, 0x6d, - 0xfb, 0xbb, 0x9f, 0x8e, 0xd8, 0x68, 0x86, 0x01, 0x5e, 0x83, 0x31, 0xc7, 0xed, 0xfe, 0x9f, 0x58, - 0x5e, 0x70, 0x0b, 0x78, 0x27, 0x0f, 0x2d, 0x7e, 0xaa, 0xab, 0xef, 0x84, 0xdc, 0x09, 0x3a, 0x21, - 0xbb, 0xd5, 0xf5, 0x7f, 0xa6, 0xa8, 0x69, 0xa1, 0xc2, 0xe8, 0x81, 0x4b, 0xab, 0xd5, 0x57, 0xae, - 0xba, 0x3b, 0xc0, 0x92, 0x0a, 0x42, 0x85, 0x71, 0x29, 0x07, 0x10, 0x34, 0xde, 0xdd, 0x6e, 0x6c, - 0x6c, 0xbf, 0x47, 0xe1, 0x79, 0x00, 0x1c, 0x5a, 0x87, 0x43, 0xdf, 0xd5, 0x13, 0xa2, 0x7f, 0x15, - 0xd8, 0x75, 0x40, 0x01, 0x26, 0x42, 0x59, 0x50, 0xaa, 0xb9, 0x68, 0x71, 0x9e, 0xb9, 0x2d, 0x18, - 0x7c, 0x5b, 0x14, 0x49, 0x17, 0xbd, 0xbb, 0x81, 0x33, 0x73, 0xfe, 0xbf, 0x80, 0x5c, 0x40, 0x60, - 0x85, 0x09, 0xdc, 0x55, 0x0a, 0xcb, 0x62, 0x80, 0x31, 0x58, 0x80, 0x1e, 0x0d, 0x20, 0x95, 0xbc, - 0x5c, 0x80, 0x09, 0x42, 0x6a, 0xd6, 0x73, 0xcf, 0x3d, 0x62, 0x81, 0xd1, 0x00, 0x1e, 0xe0, 0x36, - 0x00, 0x50, 0x05, 0x24, 0xc3, 0x83, 0x87, 0xf0, 0xf3, 0x98, 0x9f, 0xb6, 0x78, 0x1c, 0x3c, 0x03, - 0x87, 0x80, 0x01, 0x2c, 0x3c, 0x00, 0x09, 0x60, 0x80, 0xf9, 0x38, 0x0f, 0x2f, 0x1c, 0x00, 0x04, - 0x09, 0xe3, 0x9c, 0x3a, 0x42, 0x80, 0x46, 0xd9, 0x61, 0x05, 0x62, 0xbc, 0x93, 0xc6, 0xf0, 0x7f, - 0xee, 0x47, 0xfc, 0xbb, 0x1e, 0xf9, 0x76, 0x2b, 0x12, 0x78, 0xac, 0xff, 0xb2, 0xfa, 0xf0, 0x6c, - 0x87, 0x74, 0x42, 0xd9, 0x23, 0xf0, 0xe2, 0x80, 0x30, 0x39, 0x43, 0x9c, 0xea, 0xd6, 0x97, 0xf6, - 0xc7, 0x5f, 0xaf, 0x77, 0x6f, 0x74, 0xc4, 0x3f, 0x37, 0x27, 0x91, 0xa0, 0xa2, 0xac, 0xdd, 0xbf, - 0x87, 0x14, 0x07, 0x28, 0x28, 0xd9, 0xfd, 0xeb, 0x9a, 0x24, 0x8b, 0x7f, 0xd1, 0x2a, 0x24, 0xd5, - 0xd6, 0xb7, 0x3e, 0x35, 0xf8, 0x05, 0x80, 0x10, 0x05, 0x22, 0xb3, 0xc6, 0x83, 0x6b, 0x13, 0xa9, - 0x47, 0x10, 0x8e, 0x94, 0x43, 0x58, 0xc5, 0x10, 0x06, 0xa5, 0x89, 0x1e, 0x58, 0xce, 0x01, 0xe5, - 0x56, 0xb7, 0xc3, 0x84, 0x80, 0x10, 0x04, 0x5b, 0x55, 0x86, 0x4f, 0x6d, 0x57, 0x37, 0x96, 0x0a, - 0x73, 0x0d, 0xd7, 0x17, 0xb1, 0x1e, 0xde, 0x0c, 0xd2, 0x5d, 0xcd, 0x46, 0xff, 0xf0, 0x47, 0xc5, - 0x72, 0x02, 0xb8, 0x4e, 0x87, 0x74, 0x3d, 0x5a, 0xf2, 0xd9, 0xb3, 0x66, 0xcc, 0x67, 0x36, 0x2b, - 0x88, 0x7e, 0x02, 0x24, 0x10, 0x8c, 0x8a, 0x01, 0x88, 0x24, 0x10, 0xa1, 0x32, 0x38, 0xe3, 0xfb, - 0x30, 0xbb, 0x2c, 0x71, 0x96, 0xb2, 0x46, 0x85, 0xac, 0x5b, 0x14, 0x62, 0x1e, 0x70, 0x03, 0xe1, - 0xbc, 0x01, 0xb6, 0x44, 0x10, 0xc6, 0xa6, 0xcc, 0x2c, 0xe7, 0xfd, 0xad, 0x4f, 0x13, 0xb0, 0xa4, - 0x49, 0xc3, 0xee, 0x16, 0xe0, 0xa6, 0xc1, 0x61, 0xb3, 0x80, 0x77, 0x6a, 0x2b, 0xf8, 0x79, 0x40, - 0x29, 0xa3, 0x41, 0x16, 0x99, 0x41, 0x3e, 0xbf, 0x72, 0xf7, 0x72, 0xce, 0x29, 0xd6, 0x7e, 0xff, - 0x5c, 0x49, 0xed, 0x8e, 0xae, 0xf6, 0xdb, 0x6d, 0xbf, 0x86, 0x89, 0x00, 0x0c, 0x05, 0xb2, 0x46, - 0xf2, 0x03, 0xc1, 0x4e, 0x5e, 0x21, 0xf2, 0xe9, 0xba, 0x9e, 0x3d, 0xdc, 0x74, 0xf9, 0xff, 0xa9, - 0x3e, 0x44, 0xc3, 0x6e, 0x00, 0x30, 0x62, 0x00, 0xd5, 0xf6, 0x95, 0xe1, 0x3a, 0x42, 0x07, 0xba, - 0x11, 0xfc, 0x49, 0x9c, 0x16, 0x0c, 0x9f, 0x81, 0x41, 0x9f, 0x84, 0x9e, 0xc2, 0x13, 0xe0, 0x36, - 0xf5, 0x54, 0x46, 0x13, 0xf0, 0xde, 0x00, 0x6b, 0x8c, 0x90, 0x05, 0xe7, 0x7e, 0x6d, 0x8b, 0xd4, - 0xbd, 0x6b, 0xcf, 0xc4, 0x60, 0xf8, 0x49, 0x3b, 0x82, 0x53, 0x83, 0xc6, 0x04, 0xa0, 0x74, 0x3c, - 0x18, 0x1c, 0x01, 0x80, 0x6b, 0x4c, 0x15, 0x45, 0xe9, 0x8b, 0x80, 0xcf, 0x23, 0xfa, 0x7e, 0x6f, - 0xc3, 0xcc, 0x40, 0x00, 0x72, 0xb2, 0x03, 0x30, 0xbe, 0xaf, 0x16, 0xe8, 0xa7, 0x75, 0xb7, 0x6c, - 0xfc, 0x75, 0xf1, 0xdf, 0x95, 0x7c, 0x16, 0xc5, 0x76, 0x24, 0x7b, 0xfc, 0xd6, 0xa0, 0x64, 0x31, - 0x07, 0xdc, 0xff, 0x3f, 0xf8, 0x66, 0x70, 0x1f, 0x02, 0x58, 0x40, 0x10, 0x6c, 0x76, 0xba, 0xcc, - 0xaa, 0xfa, 0xaa, 0xa8, 0x55, 0x47, 0x50, 0xd3, 0x20, 0x0e, 0xf3, 0x5a, 0xef, 0xff, 0xe3, 0xe5, - 0xc3, 0xd8, 0x0e, 0x88, 0x77, 0xe8, 0x5a, 0xbb, 0xab, 0xd6, 0x2f, 0x15, 0xdf, 0x3b, 0xd7, 0xf0, - 0x52, 0x0c, 0x01, 0x51, 0x53, 0x15, 0xad, 0xc4, 0x00, 0x3c, 0x56, 0x70, 0x0f, 0x73, 0x81, 0xf1, - 0x0f, 0x1f, 0x1c, 0x70, 0xbb, 0x80, 0x26, 0x79, 0xa4, 0x0a, 0x9d, 0x00, 0x31, 0x2f, 0x77, 0xb4, - 0x54, 0x42, 0x3d, 0xd1, 0x2c, 0xe3, 0xa2, 0x2f, 0x64, 0x05, 0x0d, 0x32, 0xc3, 0x27, 0x34, 0xb8, - 0x5d, 0x90, 0x06, 0x85, 0x90, 0x11, 0xc0, 0x2d, 0x6a, 0x8d, 0xbd, 0xf7, 0xbd, 0x32, 0xff, 0x77, - 0xd6, 0x17, 0x21, 0xc1, 0x1d, 0x83, 0x23, 0x34, 0xf4, 0xa4, 0xfa, 0x6e, 0x97, 0xbe, 0x2d, 0x89, - 0x04, 0x7c, 0x93, 0xf1, 0x36, 0x33, 0x04, 0xed, 0xcf, 0xb8, 0x76, 0xc5, 0x48, 0x1e, 0x70, 0x86, - 0x89, 0x04, 0x94, 0x0e, 0xd4, 0x54, 0x5c, 0x6f, 0xb4, 0xab, 0x5d, 0x68, 0xee, 0x13, 0x67, 0x0e, - 0xbd, 0x30, 0xd8, 0x2b, 0x61, 0x3f, 0x63, 0xb1, 0xfe, 0x10, 0x03, 0x80, 0x52, 0x20, 0xf0, 0x35, - 0x92, 0x60, 0x83, 0xc6, 0xb2, 0x4c, 0x2a, 0x95, 0x0b, 0x36, 0x5a, 0x85, 0xe2, 0x3c, 0x6b, 0x49, - 0x82, 0x3c, 0x6b, 0x49, 0x8f, 0xac, 0xe5, 0x5e, 0x96, 0x38, 0x00, 0x63, 0x00, 0x07, 0x0d, 0x33, - 0x09, 0x2c, 0x7f, 0xbd, 0xfe, 0x8e, 0xe1, 0xa2, 0x18, 0x19, 0x36, 0x7f, 0x6f, 0xff, 0xac, 0x2c, - 0xca, 0x01, 0x8a, 0x8d, 0x45, 0x9d, 0x3b, 0xdf, 0xa7, 0x77, 0x78, 0x59, 0xc0, 0x21, 0x42, 0x96, - 0xcf, 0x79, 0x53, 0x5d, 0xde, 0xb5, 0xbe, 0x78, 0x43, 0x58, 0x03, 0x78, 0xe9, 0xf3, 0x3d, 0xde, - 0xaa, 0xab, 0xea, 0xaa, 0xa7, 0x99, 0xc2, 0xe8, 0xe0, 0x1b, 0x98, 0x17, 0x4b, 0x3f, 0xfd, 0x59, - 0x2b, 0x21, 0xdb, 0x0b, 0xb2, 0x00, 0x2b, 0xa0, 0x75, 0x3f, 0x5d, 0x7a, 0xc9, 0xcb, 0xf4, 0xf0, - 0xf2, 0xab, 0x47, 0xec, 0x2e, 0xc8, 0x03, 0xe4, 0xe2, 0x5e, 0xab, 0x34, 0x3e, 0xb2, 0x4f, 0x35, - 0x85, 0xd9, 0x40, 0xb0, 0x4f, 0xce, 0x32, 0xd2, 0x9d, 0x8c, 0xec, 0x7d, 0x8c, 0xf0, 0x63, 0x7c, - 0x04, 0xd6, 0x13, 0x66, 0x0d, 0x8c, 0x31, 0x56, 0x5f, 0xff, 0xc3, 0xac, 0xe0, 0x16, 0x06, 0xc1, - 0x71, 0x2a, 0xfb, 0xbf, 0xfc, 0xd1, 0xfb, 0xdf, 0xe1, 0xc8, 0x80, 0x01, 0x92, 0x52, 0x1d, 0x66, - 0x53, 0x70, 0x52, 0x93, 0x0c, 0xf3, 0xdc, 0x94, 0xf5, 0x73, 0x5a, 0xee, 0xe6, 0xee, 0xee, 0xe5, - 0xe0, 0x7a, 0x74, 0x5d, 0x54, 0x53, 0xf8, 0x79, 0xc0, 0x66, 0x8f, 0x3d, 0x19, 0xbd, 0x7d, 0xad, - 0x5b, 0x06, 0xfd, 0xeb, 0x54, 0x4e, 0x48, 0x46, 0x08, 0x00, 0x6a, 0xaf, 0xf8, 0x06, 0xa4, 0x06, - 0x48, 0x52, 0x3a, 0x1f, 0x26, 0x05, 0x47, 0x5f, 0x76, 0x1e, 0x03, 0x82, 0x41, 0xc7, 0xed, 0x4b, - 0x94, 0xf0, 0x0e, 0x0e, 0x8b, 0x96, 0x00, 0x04, 0xa5, 0xe2, 0x98, 0x3c, 0xb8, 0xe9, 0x70, 0xf8, - 0x00, 0x08, 0x1b, 0xc7, 0xe1, 0xe2, 0x40, 0x65, 0x44, 0xb3, 0x2a, 0xf5, 0xfe, 0x6c, 0x5c, 0x57, - 0x2b, 0x17, 0x17, 0x15, 0x97, 0xbc, 0x53, 0x71, 0x43, 0x22, 0xfd, 0xfe, 0x1e, 0x50, 0x02, 0x45, - 0xf4, 0x3a, 0x16, 0x1d, 0xf7, 0xe7, 0x8a, 0xc5, 0xc5, 0x6a, 0x8a, 0x58, 0x5e, 0xf1, 0xb6, 0xea, - 0xbf, 0x0c, 0xb3, 0x80, 0x4f, 0xb3, 0x9e, 0x60, 0x62, 0xbb, 0xbf, 0xfe, 0x85, 0x2c, 0x72, 0xde, - 0x6e, 0xdb, 0x6e, 0xb1, 0x71, 0x58, 0xc5, 0x58, 0x6f, 0x00, 0x48, 0xae, 0x19, 0x52, 0x39, 0x53, - 0xd5, 0x9e, 0x0e, 0x7b, 0x0d, 0x6a, 0x2b, 0x3d, 0x83, 0x9e, 0xc1, 0x12, 0xeb, 0x12, 0x75, 0xfc, - 0x2e, 0xe0, 0x0a, 0xde, 0xb0, 0xf0, 0x6f, 0x3d, 0xfe, 0xb5, 0xea, 0xe3, 0x1a, 0xfa, 0xca, 0xe0, - 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x5c, 0x2e, 0x30, 0x4a, 0x0c, 0x74, 0x11, 0x1f, 0x46, 0x75, - 0xe8, 0x26, 0xea, 0xe4, 0x13, 0x76, 0x21, 0x57, 0x09, 0xf4, 0x58, 0xa6, 0xe0, 0x8c, 0xab, 0x75, - 0x8a, 0xfa, 0xf5, 0x74, 0x4c, 0x5f, 0x59, 0x43, 0x5d, 0x5d, 0x5d, 0x5a, 0x11, 0xe8, 0xbd, 0x84, - 0x19, 0xed, 0xf5, 0xaf, 0x04, 0x30, 0x46, 0x21, 0x55, 0x63, 0xee, 0x03, 0x60, 0x40, 0x25, 0xaa, - 0xaf, 0x77, 0x32, 0x78, 0x43, 0xea, 0xd5, 0x82, 0x95, 0x1a, 0xfe, 0x06, 0x08, 0x23, 0xbd, 0xef, - 0x0d, 0xf5, 0x62, 0xba, 0xb4, 0x5f, 0x5a, 0xbe, 0xb5, 0x5d, 0x7a, 0xc3, 0x98, 0x10, 0x3a, 0xe4, - 0xf7, 0xf4, 0xf6, 0x9a, 0x45, 0x2c, 0x9a, 0x07, 0x53, 0x00, 0xc6, 0xca, 0x68, 0x3e, 0x7f, 0x80, - 0x4e, 0x41, 0x00, 0x22, 0xbb, 0xec, 0x61, 0xa9, 0x0a, 0x47, 0xfd, 0xb6, 0xff, 0x3a, 0x54, 0x09, - 0x31, 0x75, 0x5f, 0x8e, 0xd5, 0x80, 0x60, 0x00, 0xf2, 0x09, 0xfc, 0xd8, 0x94, 0x58, 0x20, 0x63, - 0xf0, 0xf2, 0x28, 0x4f, 0x93, 0x7d, 0xbf, 0x7f, 0xd5, 0xaf, 0xfe, 0xaf, 0xf5, 0x79, 0xfa, 0x2b, - 0xc2, 0x7d, 0x08, 0x9c, 0x84, 0xfa, 0xbe, 0x18, 0x47, 0x18, 0x2c, 0xb4, 0xd3, 0xff, 0xf4, 0x8a, - 0x14, 0xc0, 0x4b, 0xb9, 0xbf, 0x3f, 0x4d, 0x3f, 0xf8, 0x69, 0x13, 0xff, 0x6f, 0xbf, 0xd8, 0x61, - 0x43, 0xcc, 0x27, 0xff, 0x7f, 0xc1, 0x0d, 0x86, 0x14, 0x3c, 0x99, 0xff, 0x77, 0xff, 0xc1, 0x97, - 0x82, 0x48, 0xb8, 0xb9, 0x30, 0xbc, 0x76, 0x65, 0x0d, 0x12, 0x1f, 0x52, 0x7f, 0xfe, 0xfe, 0x27, - 0xfa, 0xf5, 0x75, 0x7a, 0xea, 0xf3, 0x75, 0x7a, 0xeb, 0x55, 0xc1, 0x15, 0xdd, 0xf5, 0xf5, 0x62, - 0x33, 0xad, 0x42, 0x3d, 0x58, 0xa0, 0xc1, 0x22, 0x7f, 0xfd, 0x34, 0xf4, 0xf4, 0xcc, 0x39, 0x8c, - 0x51, 0xb5, 0xcf, 0x8c, 0x50, 0x6f, 0xcb, 0xfc, 0x09, 0x1c, 0x6c, 0xe0, 0xe2, 0x58, 0x82, 0x4f, - 0x03, 0xc0, 0x1a, 0x41, 0x39, 0x35, 0x5a, 0xd4, 0x71, 0x8f, 0xe0, 0x20, 0x03, 0x00, 0x84, 0xee, - 0xe2, 0xb7, 0x1a, 0xa3, 0x1c, 0x01, 0x0c, 0x51, 0xa8, 0xed, 0xf5, 0x72, 0xb8, 0x25, 0x3a, 0xae, - 0xab, 0x9d, 0x2f, 0xa1, 0x0f, 0x0a, 0xf5, 0xef, 0x98, 0x97, 0xbf, 0xaf, 0x47, 0x84, 0x51, 0xc0, - 0x71, 0xdf, 0x2c, 0x31, 0x4a, 0x7d, 0xb6, 0xd3, 0x4e, 0x31, 0x7f, 0xc3, 0x0a, 0x08, 0x5a, 0xb5, - 0x7f, 0xfb, 0x5f, 0xfe, 0x1c, 0x24, 0x03, 0xe7, 0xd4, 0x6d, 0xb7, 0xff, 0xb6, 0xda, 0x01, 0xbd, - 0x6d, 0xf8, 0x66, 0xa3, 0xab, 0x0e, 0x12, 0x01, 0xdb, 0x6e, 0xdb, 0xdb, 0xfe, 0xdd, 0xbc, 0x37, - 0x4a, 0x0b, 0x41, 0x8b, 0xec, 0xb9, 0x61, 0xe0, 0xb8, 0x8e, 0xff, 0x34, 0x7b, 0xeb, 0xdc, 0x14, - 0x04, 0x51, 0x5e, 0x4e, 0xad, 0xf5, 0xef, 0xa2, 0xb5, 0xf4, 0x67, 0xae, 0xaf, 0xf4, 0x56, 0xfa, - 0xbe, 0x31, 0x43, 0xde, 0x7f, 0xab, 0x7d, 0x5a, 0xba, 0xbc, 0x9d, 0x1b, 0xaf, 0xaf, 0x42, 0xc2, - 0x97, 0x80, 0x81, 0x04, 0x20, 0x9c, 0x54, 0xdf, 0x4c, 0x40, 0xe0, 0x3d, 0xf2, 0x50, 0x00, 0x54, - 0x40, 0x49, 0x10, 0x87, 0xc0, 0xc1, 0x13, 0x05, 0x00, 0x91, 0x33, 0x28, 0x06, 0x51, 0xfc, 0x1f, - 0x10, 0x35, 0x07, 0x4f, 0x8f, 0x34, 0x00, 0x6a, 0x0e, 0x23, 0xf0, 0xe2, 0x1a, 0x3e, 0x3c, 0x7f, - 0xff, 0xa7, 0x2f, 0x34, 0x3b, 0xf0, 0x24, 0x02, 0x4e, 0xab, 0x58, 0x71, 0x10, 0x00, 0x22, 0x3b, - 0xa9, 0x37, 0xa2, 0x3f, 0xe6, 0x87, 0xb3, 0x26, 0xe1, 0x49, 0x8e, 0x01, 0x0c, 0x75, 0xeb, 0x7b, - 0xf8, 0x26, 0x26, 0x2b, 0x6c, 0xe0, 0x01, 0xc7, 0xf3, 0xc0, 0x00, 0x9f, 0x5f, 0x46, 0x70, 0x0c, - 0x08, 0x60, 0xc2, 0x55, 0x70, 0xcf, 0x56, 0x9b, 0xad, 0x7d, 0x5f, 0xea, 0xd5, 0xcd, 0x77, 0x77, - 0x43, 0x16, 0x22, 0x90, 0xf3, 0xe5, 0xbb, 0xbb, 0xfa, 0xf4, 0xf8, 0x85, 0x1d, 0xb0, 0xf2, 0x8d, - 0x33, 0xed, 0x7f, 0xfe, 0x5d, 0x6d, 0xfc, 0x0c, 0x20, 0x84, 0x28, 0x14, 0x89, 0x3e, 0x0e, 0xae, - 0x71, 0xd2, 0x50, 0x15, 0x1c, 0x3f, 0x9c, 0x00, 0x04, 0x72, 0x27, 0xe6, 0xe3, 0x81, 0x7e, 0x58, - 0x00, 0x15, 0x8e, 0x17, 0xe5, 0x80, 0x01, 0x58, 0xe6, 0x30, 0x1e, 0x0e, 0x03, 0x20, 0x9a, 0xe0, - 0x00, 0x09, 0x29, 0x4a, 0xa1, 0xc7, 0x23, 0x59, 0xf2, 0x56, 0x83, 0xc7, 0xca, 0x21, 0xab, 0x38, - 0x39, 0x05, 0x06, 0x0a, 0xcb, 0xf8, 0x71, 0x40, 0x19, 0xb7, 0xbe, 0x12, 0xbf, 0xb6, 0xde, 0xdf, - 0xf9, 0xab, 0x52, 0xa6, 0x57, 0xa5, 0x15, 0xe6, 0xac, 0x34, 0x40, 0x80, 0x00, 0x1b, 0x98, 0x28, - 0x11, 0xad, 0xb1, 0x0c, 0x2e, 0xbd, 0xf3, 0xbd, 0x4e, 0x3f, 0x93, 0x93, 0x9c, 0x7b, 0x3a, 0x0f, - 0x81, 0x03, 0x05, 0x87, 0x0d, 0xb8, 0x03, 0x4a, 0x90, 0x0c, 0x5a, 0x82, 0x7c, 0xf4, 0xf9, 0xbf, - 0x3c, 0x58, 0xf9, 0xe0, 0x2c, 0x39, 0xe0, 0x0b, 0x17, 0xe7, 0xdf, 0x5a, 0xf0, 0x10, 0x01, 0x04, - 0x13, 0xa3, 0xb2, 0x75, 0xe8, 0x9e, 0xbd, 0x11, 0xd1, 0x3f, 0x7d, 0x15, 0xeb, 0xaf, 0x7d, 0x7a, - 0x4e, 0x0a, 0x05, 0x62, 0xb1, 0x46, 0x5c, 0x2e, 0x1c, 0x00, 0xe1, 0xc0, 0x00, 0xe4, 0x4c, 0xa1, - 0xe2, 0x10, 0x01, 0x9c, 0x0e, 0x51, 0x58, 0x89, 0x6b, 0x5f, 0xe9, 0x9b, 0x63, 0x8c, 0x5b, 0x16, - 0xd3, 0x4c, 0xa8, 0x37, 0x5f, 0xdb, 0x6e, 0x1a, 0x90, 0x01, 0x6a, 0x86, 0x29, 0x18, 0x8a, 0xf6, - 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb1, 0x6d, 0x34, 0xd3, 0x4d, 0x34, 0xd3, 0xf6, 0x1e, 0x90, 0x00, - 0x0c, 0xf5, 0xdc, 0x94, 0x2a, 0x41, 0x0b, 0x2e, 0x7e, 0x6d, 0xbb, 0x4d, 0xb6, 0x0d, 0xca, 0x35, - 0x0a, 0x0c, 0x9d, 0x9d, 0x9c, 0xef, 0x1e, 0xbb, 0x3c, 0xc8, 0x1f, 0x37, 0xfa, 0x70, 0xe2, 0x80, - 0x07, 0xfb, 0xc0, 0x96, 0x6c, 0x0d, 0x3c, 0x37, 0x7f, 0x62, 0xd5, 0x80, 0x70, 0xe8, 0xb9, 0x40, - 0x29, 0x2c, 0x61, 0x15, 0xc3, 0xaf, 0xae, 0xb6, 0xdb, 0x3a, 0x44, 0xf4, 0x4f, 0x76, 0xdb, 0xe1, - 0xe2, 0x40, 0x00, 0xf2, 0x22, 0x61, 0x39, 0x16, 0x8a, 0x43, 0xff, 0xc8, 0x51, 0x62, 0x8b, 0x1c, - 0xfd, 0x95, 0x14, 0x58, 0xa2, 0xf6, 0xcf, 0x1a, 0x2d, 0x52, 0xc1, 0x67, 0x0e, 0xbf, 0x2b, 0x28, - 0xea, 0xb7, 0xcd, 0xfb, 0x69, 0xa7, 0x0a, 0x28, 0x00, 0xd6, 0x40, 0x77, 0xb2, 0x02, 0xa4, 0x61, - 0xbb, 0x5e, 0x9d, 0xb6, 0xf7, 0xe0, 0x35, 0xd6, 0xd9, 0xee, 0x9e, 0x3b, 0x0e, 0x22, 0x80, 0x24, - 0x01, 0xba, 0x1d, 0x42, 0x56, 0x93, 0x4f, 0x4d, 0x36, 0xdb, 0xff, 0x11, 0x49, 0xf4, 0xd3, 0xe1, - 0x8c, 0x01, 0x20, 0x2b, 0x2b, 0x9c, 0x09, 0x5a, 0xf6, 0xdb, 0xff, 0x6d, 0xb3, 0x32, 0x28, 0x5c, - 0x82, 0x40, 0x05, 0xc8, 0xb9, 0xe2, 0x52, 0x15, 0xc5, 0xfe, 0x9a, 0x65, 0xed, 0xfe, 0xd2, 0x74, - 0x27, 0xae, 0x03, 0x07, 0x86, 0xc8, 0x14, 0x00, 0xd3, 0xc8, 0xfb, 0x7d, 0xef, 0xf7, 0xbe, 0x93, - 0x7b, 0xfc, 0x26, 0x48, 0x48, 0xa8, 0x19, 0x6b, 0x93, 0x18, 0xb3, 0xac, 0x5f, 0x9d, 0x62, 0xce, - 0xb0, 0xa7, 0x0f, 0xf8, 0x02, 0x40, 0x06, 0x20, 0x88, 0x2a, 0xef, 0xd6, 0x1b, 0x63, 0x80, 0x03, - 0x66, 0x65, 0x20, 0x47, 0x1e, 0x58, 0x21, 0x1d, 0x7e, 0x4e, 0x4f, 0xe2, 0x3c, 0xef, 0x10, 0x78, - 0xf5, 0xc5, 0x30, 0x75, 0x7a, 0xde, 0xf0, 0xf6, 0x00, 0x50, 0x99, 0x9a, 0x81, 0xbb, 0x09, 0x4b, - 0xde, 0x55, 0xe1, 0x5f, 0xee, 0xee, 0xa7, 0xbd, 0x4f, 0x78, 0x38, 0xf0, 0x6d, 0xbd, 0xfe, 0x1b, - 0x64, 0x0d, 0x5e, 0x3a, 0xf7, 0xc5, 0x7f, 0x2d, 0xcb, 0x7f, 0xef, 0xef, 0xc0, 0xf1, 0x41, 0x3e, - 0x97, 0xaf, 0x57, 0x5e, 0xbe, 0xbd, 0x5d, 0x7a, 0x37, 0xa2, 0xbc, 0xb0, 0x38, 0x04, 0x01, 0x60, - 0x87, 0x15, 0xdd, 0x6b, 0x8a, 0x37, 0x14, 0x68, 0x8d, 0xc0, 0xf0, 0x00, 0xa0, 0x46, 0x9a, 0xdb, - 0xb6, 0x58, 0x65, 0xe2, 0xfc, 0x56, 0x2b, 0xb8, 0xa3, 0x14, 0x06, 0x1a, 0x20, 0x03, 0xc3, 0x8c, - 0x06, 0xac, 0xdd, 0x5e, 0xef, 0x0d, 0x48, 0x00, 0x11, 0x07, 0x30, 0x92, 0x37, 0x52, 0xb0, 0xc1, - 0xbf, 0xfa, 0x62, 0xde, 0x0f, 0xb8, 0x4c, 0x12, 0x51, 0xd9, 0x1c, 0x34, 0x48, 0x01, 0xa8, 0x58, - 0xa8, 0x0b, 0x9a, 0xc1, 0x0f, 0xcd, 0xb6, 0xdb, 0x6d, 0xb6, 0xc1, 0x08, 0xab, 0x63, 0x9f, 0xf4, - 0xa1, 0x5b, 0xe8, 0xd3, 0x6f, 0xf8, 0x20, 0x70, 0xf1, 0x20, 0x17, 0x83, 0x3e, 0x6a, 0x70, 0x51, - 0x9d, 0x2b, 0xaf, 0x3f, 0x7f, 0x7b, 0xdd, 0xcf, 0xdf, 0xdf, 0xdf, 0xc3, 0x5d, 0x1d, 0xdd, 0xff, - 0x09, 0x22, 0x81, 0x35, 0xa0, 0x29, 0xa1, 0xfc, 0xed, 0xb7, 0xf0, 0xd2, 0x28, 0x03, 0x41, 0x90, - 0x79, 0xab, 0x1f, 0xfe, 0xdb, 0x7b, 0x6d, 0x8f, 0x8c, 0x70, 0xc1, 0x05, 0x00, 0x04, 0xed, 0x98, - 0x2f, 0x0a, 0x82, 0xf1, 0x86, 0x99, 0xa3, 0xff, 0x8e, 0x5f, 0x6f, 0x1d, 0xe1, 0xef, 0xfe, 0x5f, - 0xbe, 0x1a, 0x70, 0x01, 0x49, 0x0e, 0x16, 0xa4, 0x1c, 0x91, 0x45, 0x6f, 0xf7, 0x77, 0x76, 0xdb, - 0x3f, 0x7f, 0x34, 0xaa, 0x39, 0x40, 0x16, 0xf4, 0x63, 0x12, 0x28, 0x8b, 0xb0, 0xd2, 0x28, 0x02, - 0x07, 0xe4, 0x1f, 0x0c, 0x13, 0xff, 0x6d, 0xb6, 0xdb, 0x6d, 0xb8, 0x8d, 0xa8, 0xb9, 0xc0, 0x0c, - 0x13, 0x75, 0x01, 0xd2, 0xe0, 0xda, 0x89, 0x69, 0xf4, 0x27, 0xbe, 0xbd, 0xc0, 0x5c, 0xd7, 0x8f, - 0xc7, 0x2c, 0x76, 0xc3, 0x6c, 0x2c, 0x04, 0x41, 0x50, 0x0e, 0x59, 0x44, 0xa5, 0x86, 0x8a, 0xa7, - 0x2c, 0x0b, 0x9c, 0xb1, 0x7b, 0xec, 0xfd, 0x6b, 0x09, 0xe0, 0x06, 0x6e, 0x82, 0x4c, 0x3b, 0x5b, - 0xaf, 0x7a, 0x21, 0x2c, 0x37, 0x51, 0x37, 0xac, 0x27, 0xc2, 0xf8, 0x70, 0x20, 0x84, 0x10, 0x64, - 0x7c, 0x77, 0x80, 0x20, 0x90, 0x16, 0x21, 0x40, 0xb2, 0x89, 0x3d, 0x64, 0x53, 0xa8, 0x50, 0x14, - 0x54, 0x00, 0x0a, 0x8c, 0x83, 0x90, 0x28, 0x3f, 0xe2, 0xe5, 0x02, 0x55, 0x38, 0x00, 0x0a, 0xb0, - 0x2e, 0x03, 0x13, 0x0a, 0x20, 0x03, 0xa3, 0x20, 0xc4, 0x1d, 0x86, 0x88, 0x50, 0x08, 0xe5, 0x8c, - 0xa1, 0x39, 0x1e, 0xb9, 0xfd, 0x69, 0xf5, 0x2c, 0x71, 0x41, 0xd2, 0xba, 0x17, 0x14, 0x1b, 0x8a, - 0x03, 0xfe, 0x17, 0x90, 0x15, 0x92, 0x15, 0xff, 0xff, 0xeb, 0xe8, 0x7f, 0x47, 0xf4, 0x7e, 0x90, - 0x5c, 0x23, 0x1c, 0x00, 0x0b, 0xc7, 0x00, 0xf0, 0x70, 0x06, 0x10, 0x46, 0x39, 0xdf, 0x1c, 0x6c, - 0x24, 0x48, 0xcc, 0xa2, 0x83, 0xa7, 0xfc, 0x09, 0x01, 0x15, 0xe9, 0x60, 0x20, 0x04, 0x82, 0xc1, - 0x4a, 0xbd, 0xdc, 0x56, 0x2b, 0x10, 0x38, 0x28, 0xcb, 0x07, 0xc5, 0xd8, 0x68, 0x84, 0x00, 0x84, - 0x64, 0x12, 0x1e, 0xbe, 0x6f, 0xfd, 0xb6, 0xed, 0xb6, 0x2a, 0xc7, 0x18, 0xda, 0x86, 0xb0, 0x05, - 0x1c, 0x80, 0x42, 0xc8, 0xf9, 0x9e, 0x9a, 0x7b, 0x6d, 0xb6, 0xd8, 0xab, 0x15, 0x78, 0xbc, 0x00, - 0x30, 0xbb, 0x20, 0x01, 0x00, 0xb2, 0x0d, 0x30, 0x14, 0xfe, 0x37, 0x6e, 0x4d, 0x3f, 0x25, 0x70, - 0x2a, 0xca, 0x23, 0xc3, 0x6d, 0xf3, 0x81, 0x84, 0x40, 0x30, 0x47, 0xb0, 0xd3, 0x80, 0x11, 0xb6, - 0x8f, 0x64, 0x01, 0x38, 0x2d, 0x84, 0x11, 0xff, 0xc2, 0xea, 0xc5, 0xa6, 0x16, 0xdc, 0xa8, 0xca, - 0x5d, 0x8b, 0x61, 0xd1, 0xc5, 0x4f, 0x1b, 0x3b, 0x3b, 0x3b, 0x3b, 0x39, 0xde, 0xce, 0x3d, 0x7a, - 0x38, 0xe1, 0x79, 0x40, 0x13, 0xfc, 0xc3, 0x69, 0x5f, 0xbd, 0xb6, 0xff, 0xd3, 0x4e, 0x53, 0x4d, - 0x34, 0xd3, 0x34, 0x77, 0x0c, 0x32, 0x80, 0xdc, 0x86, 0xbf, 0xa6, 0x9b, 0x6d, 0xb6, 0xdb, 0x6d, - 0xb6, 0xdb, 0xe3, 0x9c, 0x0b, 0x95, 0x21, 0x3e, 0x31, 0xc0, 0x58, 0xf0, 0x1e, 0x86, 0x61, 0xa4, - 0x28, 0x01, 0x30, 0xd5, 0x01, 0x8a, 0xd9, 0x4b, 0xd6, 0xfe, 0xb5, 0xbd, 0xe2, 0xc4, 0x6c, 0x2e, - 0x48, 0x18, 0x23, 0x4d, 0x8f, 0x7e, 0xee, 0xef, 0xe5, 0x86, 0xe2, 0xc7, 0xa2, 0x81, 0x53, 0x77, - 0x03, 0x54, 0x30, 0x2b, 0x6d, 0xbf, 0x85, 0xc8, 0x50, 0x20, 0x52, 0x1a, 0x15, 0x3c, 0xbd, 0xfd, - 0xdd, 0xdf, 0xc6, 0xb2, 0xfc, 0x48, 0xb7, 0x7d, 0xdf, 0x20, 0x60, 0x93, 0x10, 0x7f, 0xf4, 0xd3, - 0xd3, 0x4c, 0xa8, 0x9c, 0x07, 0x4c, 0x12, 0x12, 0x9a, 0x99, 0x91, 0xdd, 0x86, 0xd8, 0x48, 0x00, - 0xa5, 0x40, 0x7e, 0x22, 0x87, 0x12, 0xbc, 0xa3, 0xbc, 0x05, 0xcb, 0x4b, 0xea, 0x0d, 0x6b, 0x90, - 0x8a, 0x8a, 0xb9, 0x0a, 0xd8, 0x4f, 0x25, 0xef, 0x5a, 0xe1, 0x3c, 0x10, 0x27, 0x9c, 0xf1, 0x1c, - 0xb9, 0x73, 0xef, 0xe6, 0x7c, 0x76, 0xe3, 0xfe, 0x00, 0x80, 0x20, 0x9c, 0x2e, 0xee, 0xef, 0x49, - 0xcb, 0xc1, 0x78, 0xee, 0x17, 0x61, 0x60, 0x01, 0x9c, 0x62, 0xc0, 0x46, 0x42, 0x38, 0x0a, 0xff, - 0x5e, 0xb2, 0x2a, 0xa7, 0x1f, 0xc2, 0xa6, 0xe1, 0xc3, 0x02, 0x88, 0xae, 0x1c, 0x0c, 0x3d, 0x9c, - 0x10, 0x84, 0x02, 0x87, 0x0b, 0x1a, 0x16, 0xcb, 0xb1, 0x00, 0xb0, 0x4c, 0x1c, 0x42, 0xf5, 0x8e, - 0x8b, 0x83, 0x27, 0x42, 0xc0, 0x06, 0x1e, 0x43, 0xa1, 0x60, 0x00, 0xc4, 0xbc, 0x58, 0x6e, 0x3c, - 0x7b, 0xfb, 0x61, 0x76, 0x40, 0x86, 0xc9, 0xf2, 0xb9, 0xfc, 0xe7, 0xfd, 0x2f, 0x41, 0x17, 0x8d, - 0xea, 0xf5, 0xd7, 0xa8, 0x5e, 0x08, 0x40, 0xc1, 0xee, 0x43, 0xb1, 0xb5, 0x1c, 0x8a, 0x09, 0xbf, - 0x57, 0x0e, 0xfc, 0x72, 0x28, 0x03, 0xdf, 0x3f, 0xaa, 0x48, 0xa1, 0x1c, 0x31, 0xe0, 0x12, 0x02, - 0xd3, 0x4d, 0x34, 0xfe, 0x2e, 0x40, 0x46, 0x67, 0x3d, 0x63, 0xb4, 0x90, 0x34, 0x49, 0x3e, 0x3f, - 0x38, 0xe2, 0x08, 0x03, 0x0f, 0x90, 0x5e, 0x3a, 0x8c, 0x71, 0x6c, 0x82, 0x2a, 0xae, 0xc7, 0x12, - 0x10, 0x16, 0x60, 0xde, 0x61, 0xa2, 0x18, 0x02, 0xc2, 0xba, 0x8d, 0xf5, 0xaf, 0xd6, 0x6e, 0xf8, - 0x5c, 0x85, 0x00, 0xe1, 0xe1, 0xb4, 0x09, 0xac, 0x4d, 0x34, 0xd3, 0xbd, 0xd3, 0x4c, 0x9f, 0xdd, - 0xee, 0x8e, 0xe3, 0x91, 0x44, 0x0d, 0x1f, 0x0c, 0x38, 0x03, 0xde, 0xea, 0xe5, 0xff, 0xb6, 0xde, - 0xdb, 0x6f, 0x86, 0x88, 0x50, 0x01, 0x74, 0x3b, 0x7c, 0xc8, 0xeb, 0x85, 0xff, 0xb6, 0xdc, 0xfd, - 0xb1, 0xdf, 0xbb, 0x0f, 0x10, 0x70, 0x00, 0xd4, 0x1c, 0x6b, 0x21, 0x80, 0xe9, 0xc1, 0x2d, 0x65, - 0xf0, 0x77, 0xed, 0xd6, 0x0e, 0xfc, 0x71, 0xf9, 0x6b, 0xad, 0xb1, 0x56, 0x2a, 0xd0, 0xdd, 0x7f, - 0xb7, 0x0d, 0x12, 0x01, 0x23, 0x95, 0x00, 0x31, 0x89, 0xa7, 0xa6, 0x9f, 0xb7, 0xfe, 0xc2, 0xec, - 0xe0, 0x0f, 0x06, 0x60, 0xb4, 0xaa, 0x5f, 0xed, 0xb6, 0xdb, 0x6d, 0xb7, 0xf9, 0x8e, 0x24, 0x01, - 0xbe, 0x6c, 0xba, 0xdd, 0x51, 0xdf, 0xa1, 0xfd, 0xf5, 0xca, 0xa0, 0x71, 0x12, 0xa7, 0x4e, 0x07, - 0x91, 0x2a, 0x7b, 0x84, 0x04, 0x02, 0x70, 0x84, 0x5b, 0x8b, 0x71, 0x0f, 0x73, 0x9f, 0xcd, 0x84, - 0xd9, 0x80, 0x25, 0x54, 0x43, 0x0a, 0xa7, 0x9d, 0x90, 0x15, 0x9d, 0x87, 0x79, 0x63, 0x1e, 0x50, - 0x2c, 0x18, 0xf1, 0x41, 0xf0, 0x9e, 0xc1, 0xe1, 0x7c, 0x00, 0x80, 0xe8, 0xc7, 0x7c, 0x21, 0xea, - 0xf6, 0xe2, 0xbf, 0x8a, 0x38, 0x91, 0x86, 0xb7, 0xe0, 0x51, 0x06, 0x00, 0x9c, 0x33, 0x7b, 0xdd, - 0xc5, 0x77, 0xc2, 0xec, 0x30, 0x02, 0x59, 0x07, 0x19, 0xc1, 0x53, 0x4c, 0x77, 0xd9, 0xc7, 0x96, - 0xfc, 0xb0, 0x31, 0x2c, 0x02, 0x80, 0x1c, 0x16, 0x39, 0x5f, 0x06, 0x35, 0xc1, 0xd5, 0x85, 0xe7, - 0x01, 0x03, 0x30, 0xf2, 0x38, 0x15, 0xba, 0xf2, 0x9a, 0x67, 0x2c, 0x79, 0xa0, 0x78, 0xc2, 0x78, - 0xc3, 0x57, 0x52, 0x48, 0x70, 0x72, 0x04, 0x81, 0x24, 0x48, 0x9c, 0xb7, 0x21, 0x51, 0xab, 0x7e, - 0x93, 0x97, 0xa0, 0xab, 0xc7, 0xf5, 0x6a, 0x17, 0x28, 0x64, 0x00, 0x1e, 0x1c, 0x6c, 0x5c, 0x80, - 0x58, 0x74, 0x90, 0xda, 0x70, 0x1e, 0x00, 0x78, 0x04, 0xa6, 0x4d, 0xd3, 0x8a, 0xc5, 0x6e, 0xe4, - 0xc7, 0x08, 0x03, 0x90, 0x51, 0x5a, 0xdd, 0xc5, 0x62, 0xb7, 0xe0, 0x48, 0x0c, 0x02, 0xba, 0xd6, - 0x2e, 0x2f, 0xde, 0x2b, 0x91, 0xac, 0xa1, 0x29, 0x01, 0x30, 0x0d, 0x25, 0x34, 0x8b, 0x7f, 0xa6, - 0x9c, 0x35, 0x20, 0x02, 0x47, 0x90, 0xee, 0xaf, 0x3f, 0xfe, 0xdd, 0xb8, 0x8b, 0x30, 0xf2, 0x80, - 0x0c, 0x04, 0x75, 0x6e, 0x20, 0xeb, 0x72, 0xfb, 0x77, 0xf7, 0x73, 0xf7, 0xfc, 0x1c, 0x7e, 0x0e, - 0x03, 0x7f, 0x33, 0xfd, 0x3c, 0x35, 0x10, 0x00, 0x1f, 0x64, 0x40, 0x1f, 0xae, 0x60, 0xc7, 0xbd, - 0x8d, 0x7d, 0xff, 0x70, 0x71, 0xf8, 0xe0, 0xde, 0x7e, 0x0e, 0xfc, 0xa8, 0xea, 0x55, 0xd5, 0x2b, - 0x86, 0x11, 0x00, 0x14, 0x29, 0xd7, 0xe4, 0xc3, 0x02, 0x74, 0xed, 0xff, 0x12, 0xf9, 0xd4, 0x77, - 0x28, 0xae, 0xc5, 0x98, 0x7b, 0x74, 0xe1, 0xd8, 0xcb, 0xb2, 0x60, 0x18, 0x91, 0x64, 0x07, 0x4e, - 0x77, 0x4e, 0xee, 0x4e, 0xa1, 0xc2, 0x40, 0x04, 0x4b, 0x21, 0x5b, 0x8a, 0xa5, 0x35, 0xfb, 0xf0, - 0xb0, 0xcb, 0x26, 0x65, 0xd6, 0x16, 0x7b, 0xc9, 0x03, 0x2c, 0xb0, 0xbf, 0xdf, 0xd3, 0xc3, 0x18, - 0x03, 0x0e, 0xf9, 0xcf, 0x5f, 0xe6, 0xaa, 0x5a, 0xa9, 0x7a, 0xa9, 0x6a, 0xa5, 0x95, 0x79, 0x65, - 0x45, 0xcb, 0xf2, 0xa2, 0xe5, 0x85, 0xd5, 0xe1, 0xf9, 0xd8, 0x71, 0x40, 0x02, 0x00, 0x03, 0x88, - 0x2a, 0x21, 0x30, 0x58, 0xd7, 0x15, 0x35, 0x82, 0xf4, 0x6f, 0x61, 0x10, 0x80, 0xfe, 0xc1, 0xbe, - 0x1c, 0x1f, 0xd7, 0x80, 0x0f, 0xa4, 0x38, 0x0d, 0xe4, 0x48, 0xa5, 0x91, 0x13, 0x4b, 0xf2, 0x22, - 0x69, 0x61, 0xe2, 0x69, 0x7f, 0xef, 0xb6, 0xdf, 0x0c, 0x4a, 0x00, 0x6d, 0xb0, 0x17, 0xab, 0x4e, - 0x60, 0x04, 0x58, 0x65, 0x9b, 0xc7, 0xfc, 0x7f, 0xcf, 0x3a, 0x39, 0xf9, 0x65, 0x9e, 0x07, 0x4f, - 0x00, 0xec, 0x71, 0xa6, 0x9f, 0xd0, 0x36, 0xa1, 0xc4, 0x70, 0x01, 0xbe, 0xc1, 0x7a, 0xa6, 0x0d, - 0xa6, 0x1b, 0xb4, 0x5c, 0x26, 0xb3, 0x4e, 0xea, 0x62, 0xd9, 0xdd, 0x38, 0xea, 0x71, 0xa6, 0x9c, - 0x71, 0xa6, 0x9e, 0x56, 0xdb, 0xd3, 0x4f, 0xf0, 0x4a, 0x70, 0x71, 0x01, 0xe0, 0xe8, 0x1e, 0x55, - 0x62, 0x47, 0x1f, 0xa2, 0x65, 0xe8, 0x5e, 0xbe, 0xb1, 0x5e, 0x08, 0x0a, 0x55, 0x5f, 0x82, 0x0e, - 0x08, 0x00, 0xb2, 0x0a, 0x83, 0x15, 0x91, 0x81, 0x4d, 0xbc, 0xbd, 0xbd, 0x63, 0x88, 0x7f, 0x11, - 0x58, 0x5d, 0xc0, 0x66, 0x18, 0x29, 0x8a, 0x15, 0x97, 0xae, 0x11, 0x6c, 0x0f, 0xac, 0x7e, 0x28, - 0xce, 0xbc, 0xf0, 0x60, 0x53, 0x5c, 0x7d, 0xec, 0xf0, 0x42, 0x10, 0x20, 0x36, 0x74, 0x28, 0x09, - 0x68, 0xb6, 0x83, 0x8f, 0xec, 0x5d, 0x25, 0x20, 0xef, 0x80, 0x4a, 0x17, 0xce, 0xfc, 0x36, 0xc2, - 0xa1, 0x21, 0x22, 0x78, 0xff, 0xf9, 0xa1, 0x12, 0x61, 0xa3, 0xaf, 0xbd, 0xf0, 0x9c, 0x20, 0x01, - 0xca, 0x41, 0x14, 0x15, 0x52, 0x34, 0x70, 0xec, 0x1c, 0xd1, 0xa4, 0x28, 0x48, 0xf0, 0x34, 0x0b, - 0xdd, 0x02, 0x63, 0x70, 0x38, 0x18, 0xb8, 0xa4, 0x38, 0x12, 0xc2, 0x91, 0x79, 0x59, 0x5c, 0x17, - 0x2a, 0x55, 0xc8, 0x6d, 0x94, 0x87, 0xcd, 0x2c, 0x7c, 0x2f, 0x83, 0xfb, 0xe1, 0x6f, 0x87, 0xf5, - 0xad, 0x7e, 0x17, 0x64, 0x00, 0x6f, 0x5e, 0x85, 0x1e, 0x65, 0xb2, 0xfb, 0x29, 0xa1, 0xf2, 0xa9, - 0x3f, 0x41, 0x57, 0xfa, 0x2b, 0x87, 0xd5, 0xa5, 0xea, 0xd3, 0x0b, 0x90, 0x07, 0xb6, 0x05, 0xc8, - 0xc7, 0x86, 0x02, 0x01, 0xe3, 0x0a, 0x18, 0x5b, 0x45, 0xf7, 0xbe, 0x2e, 0xa1, 0x9a, 0x9c, 0x29, - 0x8b, 0x69, 0xff, 0x82, 0x6b, 0xdf, 0xaa, 0xc7, 0xc5, 0xb3, 0x80, 0x34, 0xaa, 0x11, 0x63, 0xc8, - 0x80, 0xb6, 0x31, 0x40, 0x47, 0xbe, 0x7e, 0x31, 0x2f, 0x25, 0xdd, 0xdf, 0x81, 0x84, 0x11, 0x18, - 0x1d, 0xf0, 0x77, 0xce, 0x77, 0x02, 0x40, 0x18, 0x01, 0x29, 0x47, 0x4f, 0x0a, 0xaf, 0xdf, 0xaa, - 0xb1, 0xc0, 0x93, 0x04, 0xb7, 0xbe, 0xed, 0xdd, 0xbe, 0x08, 0x6e, 0xee, 0xe9, 0x57, 0x10, 0x42, - 0xbb, 0xbb, 0xfb, 0xbb, 0xbb, 0xf1, 0x3c, 0x18, 0x41, 0x0f, 0x77, 0x37, 0x4b, 0xc1, 0x19, 0xb5, - 0x56, 0x51, 0xfe, 0x0c, 0x41, 0x47, 0x08, 0x00, 0x91, 0x0a, 0x04, 0xa2, 0xfa, 0x9c, 0xf8, 0x81, - 0xfc, 0x56, 0xe7, 0x00, 0xf1, 0x46, 0x70, 0x00, 0xfe, 0x22, 0xb0, 0x9b, 0x82, 0xe4, 0x99, 0x93, - 0xe5, 0x2b, 0xa4, 0xff, 0x49, 0xcb, 0x49, 0xfe, 0x17, 0x24, 0x02, 0xeb, 0x62, 0x08, 0xf3, 0x3b, - 0xb8, 0xac, 0xbf, 0xe2, 0x06, 0x05, 0x98, 0x80, 0x60, 0x58, 0x6b, 0x5e, 0xf8, 0x4d, 0x9c, 0x00, - 0x5e, 0x87, 0xf3, 0x08, 0xdf, 0xe6, 0x3c, 0xf5, 0x7b, 0xe0, 0x63, 0xa5, 0xc8, 0x3c, 0xf0, 0x97, - 0x3e, 0x0f, 0x1c, 0x19, 0x64, 0x60, 0xc0, 0x04, 0xb2, 0x17, 0x64, 0x01, 0x86, 0x33, 0xf4, 0x40, - 0xa2, 0x6d, 0xc7, 0x8c, 0x31, 0xd0, 0xe1, 0xda, 0xb9, 0x51, 0x03, 0xb9, 0xb2, 0x20, 0x77, 0x25, - 0x45, 0x1a, 0x8a, 0x33, 0x49, 0x85, 0xdc, 0x77, 0xff, 0xbd, 0xfe, 0xf7, 0x96, 0x1b, 0x73, 0x09, - 0x82, 0xb2, 0xff, 0xa2, 0x96, 0x1f, 0x1d, 0xdd, 0x6b, 0xc9, 0xd0, 0x65, 0x88, 0x48, 0x37, 0x18, - 0x01, 0x0b, 0x7e, 0x08, 0x07, 0xfe, 0x2d, 0xa7, 0x8b, 0x62, 0xd8, 0x38, 0x2c, 0x86, 0x0a, 0xc4, - 0x03, 0xa2, 0x07, 0x7e, 0x1b, 0x70, 0x05, 0x97, 0x19, 0x54, 0x6f, 0xfc, 0x5b, 0x16, 0xf1, 0x6c, - 0x5b, 0x0c, 0x06, 0x68, 0xe3, 0xc4, 0x03, 0xa2, 0x01, 0xdf, 0x87, 0x30, 0x0c, 0x79, 0x73, 0xd4, - 0xff, 0xfc, 0x55, 0x8a, 0xb4, 0x07, 0xe2, 0x8b, 0x10, 0xef, 0xc7, 0xb1, 0x60, 0x20, 0xdf, 0x47, - 0xb2, 0x3d, 0xdb, 0x6f, 0xc2, 0x5d, 0x11, 0xcb, 0x3a, 0xe3, 0x25, 0x0c, 0x76, 0x62, 0x74, 0x6c, - 0x34, 0xc3, 0x00, 0x07, 0x6e, 0x0a, 0xb1, 0x8a, 0xa7, 0x85, 0x6a, 0x2b, 0x5b, 0xdc, 0xf0, 0x93, - 0xc0, 0xbe, 0x2b, 0x8a, 0xd2, 0x61, 0x72, 0x43, 0x4a, 0x45, 0xff, 0x64, 0xe2, 0xa5, 0xef, 0xd8, - 0x5c, 0x90, 0x8c, 0x22, 0x4b, 0x75, 0xf7, 0x24, 0x1d, 0x90, 0xf2, 0xa6, 0x1b, 0x24, 0x00, 0x6d, - 0xe9, 0x02, 0x3a, 0xb0, 0x8d, 0x3d, 0x5e, 0xfa, 0x8c, 0x43, 0xeb, 0x1f, 0x2c, 0x92, 0x83, 0x86, - 0xc1, 0x7f, 0xbc, 0x26, 0xe0, 0xbf, 0x17, 0xfc, 0xfd, 0x6a, 0xe7, 0x82, 0xd2, 0x55, 0x64, 0xa7, - 0x84, 0x2e, 0xca, 0x04, 0x5d, 0xa6, 0x77, 0x7e, 0xb7, 0xbb, 0xac, 0xb5, 0xec, 0x36, 0xe0, 0x02, - 0xfc, 0xdb, 0x30, 0x44, 0x72, 0x98, 0x63, 0xd5, 0xe3, 0xf8, 0xef, 0x1f, 0x95, 0x1e, 0x36, 0x10, - 0xc1, 0xe5, 0x93, 0xee, 0xbd, 0xff, 0xe5, 0x0a, 0xaa, 0xaa, 0x8c, 0xe8, 0x47, 0x45, 0xf5, 0x1d, - 0xa1, 0x0e, 0x8c, 0xf2, 0xf0, 0x4f, 0x5d, 0x6b, 0x53, 0x27, 0x03, 0x88, 0x90, 0x51, 0xc5, 0x18, - 0x81, 0xca, 0x8a, 0xe2, 0x29, 0x15, 0x43, 0x8a, 0x19, 0x0c, 0x53, 0xfd, 0xa6, 0xb6, 0x9a, 0xa6, - 0x0b, 0xbd, 0xc5, 0x58, 0x3b, 0x7d, 0x32, 0xf8, 0x5d, 0x8a, 0x00, 0x39, 0xe2, 0x85, 0xc3, 0x8d, - 0xef, 0xf5, 0x44, 0x9a, 0x27, 0xbf, 0x24, 0xc2, 0xee, 0x01, 0x72, 0xb5, 0x25, 0xc6, 0x4e, 0x77, - 0xfe, 0x3d, 0x73, 0x27, 0xdc, 0xec, 0x76, 0x3a, 0xc2, 0x6e, 0x00, 0xe6, 0xf4, 0x71, 0xef, 0xf7, - 0xba, 0x7d, 0x38, 0x5d, 0xc0, 0x32, 0x70, 0x45, 0xac, 0xf1, 0xab, 0x85, 0x8d, 0x55, 0xc2, 0xc7, - 0xea, 0xae, 0x16, 0x03, 0x28, 0xab, 0x85, 0x80, 0xd3, 0x61, 0x37, 0x01, 0xfc, 0x94, 0xff, 0xfa, - 0xf0, 0xbb, 0x80, 0x0d, 0x6b, 0x63, 0x44, 0x52, 0x90, 0xf5, 0x7b, 0xe8, 0x9c, 0x76, 0xe7, 0xce, - 0x18, 0x3a, 0x50, 0x15, 0x92, 0xe0, 0x2c, 0x20, 0x98, 0x58, 0x68, 0xb0, 0x18, 0x73, 0x96, 0x88, - 0xe1, 0x94, 0xf3, 0xae, 0x2d, 0x2f, 0x35, 0x3a, 0x43, 0x08, 0xb0, 0xec, 0x91, 0xc0, 0x19, 0x61, - 0x2c, 0x3e, 0x15, 0xe8, 0x25, 0x51, 0x3d, 0x5e, 0x27, 0xa2, 0x3f, 0xd7, 0xf7, 0x0c, 0xf8, 0x20, - 0x86, 0xef, 0x77, 0x03, 0x02, 0x70, 0x10, 0x39, 0x00, 0x73, 0xf3, 0xf7, 0x3d, 0xff, 0x81, 0x04, - 0x30, 0x37, 0xbb, 0x97, 0x0b, 0x85, 0x8e, 0xee, 0xa2, 0xef, 0x36, 0x28, 0x1c, 0x11, 0xc0, 0x28, - 0x38, 0x80, 0x3c, 0x4b, 0xc1, 0xd7, 0xc7, 0x5f, 0xfe, 0x1c, 0x50, 0x15, 0x9c, 0xc3, 0x7a, 0x69, - 0xb6, 0xdf, 0xf8, 0xb2, 0x38, 0xea, 0xa9, 0xa6, 0xbe, 0x1b, 0x61, 0x00, 0x0d, 0x68, 0xc0, 0x7f, - 0x1e, 0xfa, 0x29, 0x61, 0xbe, 0x16, 0x6e, 0x4a, 0xce, 0xe0, 0xcd, 0x24, 0x2c, 0x85, 0xef, 0x85, - 0xdc, 0x0a, 0x94, 0x88, 0x39, 0x63, 0x20, 0xe7, 0x18, 0x5d, 0x0e, 0x86, 0x52, 0x2b, 0x96, 0x52, - 0x15, 0xcb, 0xf7, 0xe0, 0x0a, 0xa0, 0x08, 0x01, 0x48, 0x4a, 0x00, 0x87, 0x39, 0x23, 0x82, 0x2f, - 0x2f, 0xbd, 0xc1, 0xa0, 0x2a, 0xa4, 0xc5, 0x4b, 0x01, 0x64, 0xc0, 0x15, 0xe7, 0x1e, 0xa3, 0x0f, - 0xc3, 0x8a, 0x00, 0x39, 0x5b, 0x00, 0x01, 0x00, 0x00, 0x1e, 0xbc, 0x14, 0x65, 0xba, 0xf6, 0xdc, - 0xa2, 0x57, 0x0e, 0xc1, 0x19, 0x58, 0xab, 0x1e, 0x7e, 0x0a, 0xb0, 0x27, 0x06, 0x40, 0x53, 0x35, - 0x32, 0x7a, 0xde, 0xf0, 0xbb, 0x84, 0x20, 0x91, 0xa7, 0xff, 0xff, 0x5b, 0xe1, 0xbc, 0x00, 0xc0, - 0xe3, 0x6d, 0xce, 0x66, 0xeb, 0xdf, 0xbb, 0x2f, 0x70, 0x3b, 0xd8, 0x3f, 0x1d, 0x50, 0xaf, 0xf5, - 0xc1, 0xc0, 0x80, 0x56, 0x27, 0x8a, 0xc4, 0x34, 0xcf, 0x64, 0x62, 0x71, 0x1a, 0x0f, 0x32, 0x18, - 0x7e, 0x1c, 0x24, 0x07, 0x4a, 0x39, 0x6f, 0xf6, 0xdb, 0xed, 0xb7, 0x9d, 0x11, 0x36, 0xda, 0x69, - 0xff, 0xad, 0x5f, 0x45, 0xaa, 0xe8, 0x5b, 0x90, 0x49, 0x13, 0x28, 0x8b, 0xbb, 0xe0, 0x12, 0x90, - 0x88, 0x2c, 0x29, 0x30, 0x4f, 0xd6, 0x91, 0xb1, 0xd9, 0x9b, 0x02, 0xf5, 0xcb, 0x0e, 0x22, 0x0b, - 0x49, 0x6a, 0x04, 0x82, 0xd0, 0x44, 0x33, 0xff, 0xc7, 0x71, 0xcb, 0xa5, 0xdf, 0x87, 0x15, 0x02, - 0x65, 0x5d, 0x34, 0xce, 0x66, 0xb8, 0xff, 0xeb, 0xa7, 0xfc, 0x05, 0x48, 0x90, 0x5d, 0x5d, 0x5d, - 0xde, 0x34, 0x00, 0x04, 0x0a, 0x80, 0x60, 0x00, 0x08, 0x08, 0xa8, 0x6d, 0x8e, 0x00, 0x35, 0xd8, - 0x32, 0x62, 0xc1, 0xc4, 0xf1, 0x93, 0x2e, 0x5b, 0x8a, 0x3e, 0xf1, 0x41, 0xc5, 0x01, 0xcb, 0xec, - 0xac, 0xb0, 0xbb, 0x88, 0x12, 0x03, 0xa8, 0x3e, 0x0e, 0xc3, 0x1e, 0xa1, 0xf1, 0xea, 0x0e, 0x3c, - 0xa0, 0x5b, 0xfa, 0xc3, 0x6c, 0xa0, 0x0d, 0xd4, 0x61, 0x10, 0x80, 0x7d, 0x6f, 0x58, 0xf6, 0x3f, - 0x89, 0xb0, 0x98, 0x9b, 0x19, 0x7d, 0x0e, 0x46, 0x7b, 0xab, 0x8b, 0xfc, 0x37, 0x80, 0x1b, 0x16, - 0xc2, 0x84, 0xa5, 0x65, 0xef, 0xff, 0xec, 0x84, 0xfb, 0x17, 0xad, 0xef, 0x0b, 0xb8, 0x05, 0x15, - 0x8c, 0xcd, 0x67, 0xfb, 0xdd, 0xef, 0xbc, 0xb6, 0x1b, 0x66, 0x00, 0x26, 0xee, 0x48, 0xcc, 0x13, - 0xeb, 0xab, 0xc7, 0x6e, 0x17, 0x93, 0x37, 0x0b, 0x3d, 0x64, 0xc3, 0x70, 0xb0, 0x32, 0x71, 0xa1, - 0x60, 0x18, 0x8d, 0x13, 0xef, 0x7f, 0x86, 0x10, 0xf1, 0x3b, 0x1b, 0x7e, 0x77, 0xd3, 0x8d, 0x34, - 0xfd, 0x34, 0xf1, 0xc0, 0xca, 0xb0, 0x18, 0x10, 0x5b, 0x2e, 0x17, 0x1e, 0xee, 0x6c, 0xcc, 0x58, - 0x41, 0x4b, 0x1c, 0xad, 0x69, 0xff, 0x96, 0xaa, 0xaa, 0x09, 0x3a, 0x2f, 0x7d, 0x7a, 0xc3, 0x48, - 0x80, 0x44, 0x22, 0xcb, 0x25, 0xff, 0x4f, 0x4f, 0x74, 0xea, 0x10, 0x94, 0x03, 0x2b, 0x65, 0x33, - 0x01, 0x7c, 0xaa, 0x9a, 0x69, 0xfc, 0x24, 0xa0, 0xc6, 0xdf, 0x1f, 0xfe, 0xdb, 0x71, 0x4a, 0x12, - 0xb7, 0x88, 0x75, 0x40, 0x16, 0xd4, 0x77, 0x29, 0xff, 0xfd, 0xbe, 0xed, 0x35, 0xa6, 0x9c, 0x2e, - 0xc7, 0x00, 0x0e, 0xd7, 0x86, 0xd9, 0x4e, 0x13, 0x57, 0xac, 0x99, 0x63, 0xf8, 0xbe, 0x3f, 0x14, - 0x49, 0xc5, 0x12, 0x3f, 0xe0, 0x80, 0x08, 0x23, 0x27, 0x07, 0xd8, 0xf2, 0xf7, 0x15, 0x70, 0x76, - 0xe3, 0xd7, 0xc7, 0xaf, 0x51, 0xd2, 0xe2, 0xe3, 0xa1, 0x7c, 0x01, 0x4c, 0x02, 0x90, 0xa1, 0xd3, - 0x8a, 0x87, 0x8e, 0x27, 0x2a, 0x59, 0xe0, 0xf1, 0x47, 0x6e, 0x4c, 0x06, 0x8d, 0xe4, 0x81, 0x40, - 0xde, 0xff, 0xea, 0x0c, 0x1b, 0x17, 0xe1, 0xa2, 0x10, 0x00, 0xc3, 0xe0, 0x77, 0x60, 0x8d, 0xd7, - 0x9d, 0xef, 0xf7, 0xe8, 0x96, 0x7c, 0xc2, 0x6e, 0x01, 0x23, 0x94, 0x1e, 0x5e, 0xe4, 0x5e, 0x8a, - 0x8a, 0xfb, 0xa2, 0xe1, 0x76, 0x60, 0x03, 0x10, 0xa2, 0x0f, 0x15, 0x41, 0x35, 0x7b, 0xbd, 0xa2, - 0x3f, 0x63, 0xe2, 0xb8, 0xad, 0xfe, 0x15, 0x22, 0x3d, 0xf0, 0x92, 0x08, 0x82, 0xed, 0x60, 0x21, - 0xd1, 0xd2, 0x69, 0xa6, 0x9f, 0xc3, 0x88, 0x80, 0x3a, 0x8c, 0xa5, 0xbf, 0xf6, 0xdb, 0xc5, 0x58, - 0xab, 0x18, 0xa7, 0x4d, 0x3f, 0x87, 0x14, 0x65, 0x9f, 0xfe, 0x9a, 0x7a, 0x71, 0x46, 0xf1, 0xa9, - 0x7f, 0x81, 0xe0, 0x22, 0x08, 0x88, 0xee, 0xee, 0x61, 0xf8, 0x63, 0x04, 0x1d, 0x1f, 0xa6, 0xe0, - 0x9c, 0x8e, 0xfd, 0x4d, 0x85, 0x98, 0x1f, 0x3f, 0x0e, 0x28, 0x02, 0xd6, 0x88, 0x3a, 0x93, 0x36, - 0xdb, 0x4d, 0x36, 0xdb, 0x56, 0xcd, 0xdf, 0xdb, 0x6e, 0xb6, 0xc1, 0xcb, 0x67, 0x45, 0xed, 0x26, - 0x2d, 0xfc, 0x38, 0xa0, 0xd2, 0x28, 0x8f, 0xfd, 0xb6, 0xdb, 0x6d, 0xb6, 0xc4, 0xe9, 0xc4, 0x4c, - 0xa7, 0xb6, 0xdc, 0x38, 0xa0, 0x23, 0x2d, 0x0d, 0x1c, 0xb4, 0xd3, 0xb6, 0x9a, 0x69, 0xa7, 0xe6, - 0xd3, 0x68, 0x78, 0xb9, 0x6d, 0xb1, 0x1d, 0x38, 0xef, 0xc3, 0x8a, 0x09, 0x44, 0xa5, 0x4e, 0xff, - 0xd3, 0x4f, 0xa6, 0x0c, 0xa2, 0xb6, 0xde, 0x5f, 0xf0, 0xe2, 0x81, 0x0e, 0xd3, 0xf0, 0x9a, 0x7d, - 0x3e, 0x9a, 0x4d, 0xa6, 0x9b, 0x6d, 0x88, 0x92, 0x1d, 0xb6, 0x5d, 0x76, 0xbb, 0x7e, 0x1b, 0x66, - 0x00, 0x19, 0x51, 0xeb, 0x6e, 0x16, 0x44, 0x35, 0xd5, 0xd8, 0xc4, 0xe0, 0xc6, 0x79, 0x85, 0x45, - 0x59, 0xb9, 0xd9, 0x3c, 0x0c, 0x1e, 0xc9, 0xe0, 0x18, 0x04, 0x48, 0xc7, 0xd9, 0x46, 0xc4, 0xfe, - 0xff, 0x00, 0xc8, 0x00, 0xd8, 0x0a, 0x1c, 0x70, 0x08, 0x27, 0x4c, 0x70, 0x21, 0x3d, 0x8a, 0x32, - 0x8b, 0xa1, 0x78, 0xef, 0xc7, 0x08, 0x9f, 0x1c, 0x26, 0xf8, 0xab, 0x9b, 0xa3, 0x0f, 0x01, 0xd0, - 0x02, 0xa4, 0x28, 0x43, 0x8f, 0x6f, 0x3b, 0xa7, 0x00, 0xe5, 0x5b, 0x51, 0xcf, 0xce, 0x00, 0x02, - 0x3c, 0xb2, 0xce, 0x00, 0x07, 0x8e, 0x2f, 0xe3, 0x89, 0xf5, 0x12, 0xe3, 0xf0, 0xd3, 0x80, 0x0e, - 0x5c, 0x32, 0x36, 0xaf, 0x8b, 0xbe, 0xf7, 0xf3, 0xfb, 0x73, 0xf1, 0xac, 0x98, 0x4d, 0x14, 0x00, - 0xc9, 0xc3, 0x6d, 0x87, 0xdd, 0x5e, 0x9d, 0x8b, 0xba, 0x21, 0x5a, 0x29, 0xe1, 0x72, 0xdc, 0x51, - 0xbc, 0x3c, 0x85, 0x00, 0x0e, 0x64, 0x40, 0x25, 0x8e, 0x70, 0x3c, 0x40, 0xa6, 0xe2, 0x98, 0xac, - 0x4b, 0x02, 0xf2, 0x77, 0x03, 0xab, 0x8a, 0x62, 0x06, 0x02, 0x99, 0xc3, 0x07, 0xc0, 0xb3, 0x4d, - 0xf1, 0xde, 0x10, 0x00, 0x8c, 0xe2, 0xc5, 0x4a, 0x27, 0xa2, 0x70, 0x30, 0x29, 0x2f, 0xc0, 0x14, - 0x80, 0x14, 0x46, 0x9f, 0x3e, 0x54, 0x5e, 0x94, 0xe7, 0x5a, 0xca, 0x5a, 0xcb, 0x18, 0xff, 0x87, - 0x14, 0x02, 0x70, 0xfa, 0x14, 0x73, 0xe7, 0xed, 0xda, 0x6b, 0xff, 0x03, 0x03, 0x1f, 0xcd, 0xb6, - 0xff, 0x00, 0xc8, 0x01, 0x04, 0x17, 0x45, 0x0c, 0x5f, 0x9b, 0x2a, 0x2f, 0xb8, 0x09, 0x00, 0x88, - 0x20, 0xdc, 0x56, 0x2b, 0x27, 0x73, 0x83, 0xe7, 0x55, 0x0f, 0x69, 0x25, 0x2f, 0xf8, 0x71, 0x40, - 0x17, 0xb1, 0xa2, 0x2c, 0x5f, 0xd7, 0x4d, 0x3d, 0x34, 0xc5, 0x6b, 0xb6, 0x25, 0xdf, 0xf0, 0x84, - 0x11, 0xd5, 0x56, 0x7a, 0x09, 0x38, 0x72, 0xee, 0xee, 0x29, 0xb5, 0x93, 0xfe, 0x01, 0x49, 0x82, - 0xa9, 0xf0, 0xf9, 0xe4, 0xcd, 0x45, 0xc5, 0xc5, 0xce, 0x98, 0x71, 0x41, 0x75, 0x4a, 0xe3, 0xff, - 0xa6, 0x9e, 0x4e, 0xfe, 0x2d, 0xb7, 0xfe, 0x01, 0x99, 0x82, 0xdc, 0x99, 0x7e, 0x4c, 0x2d, 0xc4, - 0x84, 0x01, 0x05, 0x29, 0x77, 0x17, 0x17, 0x17, 0x17, 0x13, 0xc7, 0x61, 0x61, 0x9e, 0x70, 0x0e, - 0x12, 0x00, 0xaa, 0xc9, 0x38, 0xf5, 0xfe, 0x1c, 0x50, 0x09, 0x3c, 0xac, 0x75, 0x93, 0xa7, 0xa6, - 0x9f, 0xfe, 0x2a, 0x71, 0xff, 0x87, 0x14, 0x01, 0x9a, 0xf6, 0x02, 0xd3, 0xa7, 0x4f, 0x4d, 0x34, - 0xd3, 0x4d, 0x34, 0xd3, 0x4d, 0x3c, 0xf8, 0xe3, 0xb7, 0xf8, 0x03, 0x09, 0x01, 0x12, 0x36, 0x20, - 0x00, 0x0c, 0x61, 0xc0, 0x54, 0x8f, 0x16, 0x0f, 0xf9, 0x28, 0x00, 0x34, 0x0e, 0xe2, 0xa1, 0x28, - 0x00, 0xd0, 0xf0, 0x2c, 0x56, 0xde, 0x7f, 0x19, 0x28, 0x34, 0x3c, 0x0b, 0x04, 0xa3, 0x43, 0xc0, - 0xb0, 0x20, 0x00, 0x1b, 0x03, 0xd3, 0x80, 0x06, 0x13, 0x80, 0x61, 0xfc, 0x22, 0x02, 0xc0, 0x28, - 0x71, 0xc9, 0x77, 0x1c, 0xaf, 0x69, 0xeb, 0x1f, 0x7a, 0xe3, 0x37, 0x17, 0x4c, 0xb0, 0xd3, 0x46, - 0x70, 0xb9, 0x20, 0x1a, 0xa3, 0x01, 0x1d, 0x67, 0x1f, 0x64, 0xa6, 0x82, 0x1a, 0x1a, 0x1a, 0x18, - 0xbe, 0x2f, 0xa7, 0xe0, 0x09, 0x60, 0x08, 0x21, 0x48, 0x3d, 0x77, 0x1e, 0xbd, 0x67, 0xcb, 0x96, - 0x30, 0x6d, 0x2b, 0xd9, 0x38, 0x3f, 0x9a, 0xdb, 0x0c, 0x92, 0x00, 0x73, 0xa0, 0x3c, 0x84, 0x83, - 0x7a, 0xee, 0xe2, 0xf1, 0x75, 0x7b, 0xd6, 0xba, 0xc3, 0x6c, 0x50, 0x02, 0x06, 0xc6, 0x2f, 0x05, - 0x7d, 0xee, 0xba, 0x23, 0xc2, 0x3d, 0x91, 0x4d, 0x15, 0x24, 0x40, 0xed, 0x06, 0x46, 0x38, 0x50, - 0x66, 0x0d, 0xbd, 0x85, 0x27, 0x6e, 0x7c, 0x3c, 0x85, 0x80, 0x1c, 0x87, 0x48, 0x81, 0x5b, 0x75, - 0x8a, 0xe6, 0xf7, 0xb6, 0xde, 0xe2, 0xac, 0x1d, 0xfb, 0x6d, 0xbf, 0x8e, 0xdf, 0xb5, 0xff, 0xc3, - 0x04, 0x80, 0x18, 0x42, 0x9f, 0x06, 0x62, 0xd9, 0xdb, 0x4d, 0xcd, 0xf3, 0xfd, 0xbd, 0x35, 0x52, - 0x76, 0x71, 0x29, 0x38, 0x06, 0x60, 0x1c, 0x85, 0x24, 0xf5, 0x17, 0xc9, 0xe4, 0xc6, 0x65, 0x4e, - 0xc8, 0xb8, 0xa6, 0x38, 0xdc, 0x07, 0xc0, 0x30, 0x1b, 0x07, 0x97, 0xb0, 0x78, 0x5d, 0x9e, 0x21, - 0xe0, 0xe8, 0xb0, 0xfe, 0x83, 0x22, 0x53, 0xb8, 0x1e, 0x9a, 0x8f, 0x1e, 0x12, 0x81, 0x53, 0x8e, - 0x87, 0xfa, 0x94, 0x8d, 0x45, 0xf8, 0xbc, 0xfc, 0xbb, 0xf0, 0xee, 0x00, 0xdb, 0xda, 0x20, 0x37, - 0xbe, 0x1e, 0xec, 0x92, 0xf2, 0xd6, 0x7b, 0xdf, 0xcb, 0x5f, 0xfd, 0x31, 0x6c, 0xde, 0x45, 0x08, - 0xea, 0x9f, 0xf0, 0xe2, 0x80, 0x0a, 0xb9, 0xc0, 0xf3, 0xb9, 0xb0, 0x23, 0xfb, 0xee, 0xae, 0xa9, - 0xa6, 0x0f, 0xb9, 0x65, 0x9f, 0xcd, 0xcf, 0x3f, 0x13, 0xe2, 0xac, 0x0c, 0xf4, 0x62, 0xae, 0xff, - 0xe0, 0x8f, 0x8b, 0x89, 0xe0, 0x21, 0x48, 0x7b, 0xa9, 0xca, 0xfa, 0xba, 0xb8, 0x77, 0x7b, 0xb8, - 0xae, 0xd3, 0xee, 0x19, 0x08, 0x16, 0xab, 0x3a, 0xcf, 0xc3, 0x8a, 0x00, 0xa9, 0xb0, 0xe4, 0xaf, - 0xa9, 0x5d, 0x5d, 0x34, 0xd4, 0x57, 0xbc, 0x47, 0x9c, 0xf5, 0x2d, 0x8c, 0x10, 0xcc, 0x6b, 0xb4, - 0xbf, 0x03, 0x00, 0x91, 0xb1, 0x0f, 0x7f, 0xed, 0xe7, 0x8e, 0x5a, 0x10, 0x38, 0x16, 0x6a, 0x3c, - 0x70, 0xb6, 0x5a, 0xc4, 0x81, 0xc1, 0x56, 0x78, 0x01, 0xe1, 0x0a, 0x08, 0xae, 0xaa, 0x23, 0xfe, - 0x1c, 0x50, 0x06, 0xc1, 0xfd, 0x17, 0xa1, 0x04, 0xe3, 0x6c, 0xff, 0xfa, 0x69, 0xd5, 0x34, 0xde, - 0x9a, 0x7f, 0xe1, 0x9c, 0x00, 0xb7, 0xf4, 0xa0, 0xc5, 0xef, 0xef, 0x7b, 0x6d, 0x97, 0xc7, 0x76, - 0xdb, 0x4d, 0x36, 0xd4, 0x9e, 0x44, 0x74, 0x6c, 0x3d, 0x80, 0x09, 0x2b, 0x91, 0xa6, 0xd0, 0x7d, - 0xea, 0xdb, 0xab, 0x6d, 0xde, 0xea, 0x5e, 0xb6, 0x0b, 0xd7, 0x7f, 0xe1, 0xc4, 0x40, 0x00, 0xd5, - 0x38, 0x3b, 0xb3, 0x30, 0x1e, 0x99, 0x7e, 0xdb, 0x37, 0x5d, 0x60, 0xef, 0xeb, 0x1d, 0xbb, 0xd6, - 0x5a, 0xcb, 0x59, 0xfd, 0x60, 0xe5, 0xa5, 0x34, 0xe9, 0xfe, 0x01, 0x79, 0x8d, 0x83, 0x88, 0xf9, - 0xee, 0x07, 0x4d, 0xad, 0x4a, 0xe8, 0x58, 0x6d, 0x64, 0xb0, 0xc9, 0xea, 0x58, 0x67, 0x9e, 0x58, - 0x1d, 0x62, 0x9a, 0xa8, 0x80, 0x00, 0x74, 0x05, 0xd2, 0xc0, 0x67, 0x80, 0x90, 0x01, 0xf7, 0xf8, - 0x06, 0x60, 0x05, 0x80, 0x50, 0xe9, 0x9f, 0xf1, 0x3e, 0x70, 0x7c, 0x67, 0x1f, 0x1c, 0x5c, 0x51, - 0xba, 0x85, 0xbb, 0x76, 0xc2, 0xee, 0x00, 0x50, 0x5d, 0x05, 0xca, 0x09, 0x2d, 0x5e, 0x56, 0xaa, - 0x68, 0x2b, 0xa1, 0x17, 0x8b, 0x8b, 0x9f, 0x80, 0xb9, 0xf8, 0x23, 0x1e, 0x22, 0x14, 0x9c, 0x78, - 0xbb, 0x37, 0x97, 0xc5, 0x6d, 0xf3, 0x9e, 0x2b, 0xbc, 0x57, 0x6e, 0x0a, 0x61, 0x42, 0xc8, 0xbc, - 0xdc, 0x9d, 0xe4, 0x4b, 0xd3, 0x7b, 0x2e, 0xff, 0x1d, 0xc6, 0x28, 0xd1, 0xf8, 0x6d, 0x8e, 0x01, - 0x71, 0x81, 0x80, 0x97, 0x69, 0xf2, 0xda, 0xd6, 0xa2, 0x8c, 0x5c, 0x51, 0x8b, 0xb6, 0xb5, 0x1a, - 0xd2, 0x31, 0xaf, 0xe1, 0xc8, 0x90, 0x03, 0x3a, 0x50, 0xcd, 0xb0, 0xa5, 0xde, 0x5f, 0x19, 0x7c, - 0x6d, 0xb6, 0xdb, 0x75, 0x9b, 0x9b, 0xd6, 0x3c, 0x8d, 0xad, 0x34, 0xfe, 0x1e, 0xc0, 0x3d, 0x99, - 0x98, 0xa4, 0x60, 0x3a, 0xef, 0x9f, 0xa6, 0xde, 0x7b, 0xc5, 0xcb, 0x62, 0x7e, 0xed, 0x9f, 0xe5, - 0xd3, 0x4f, 0xe1, 0x42, 0x40, 0x26, 0xec, 0x5a, 0xaa, 0xab, 0xef, 0x54, 0xf2, 0xdb, 0x97, 0xb7, - 0xa8, 0xae, 0x5f, 0xe1, 0xb7, 0x00, 0xd4, 0x78, 0xc2, 0xa6, 0x6e, 0xae, 0x5f, 0xf4, 0xd3, 0x12, - 0xf3, 0x71, 0x2f, 0x77, 0xad, 0xba, 0xdb, 0x15, 0x4b, 0xd3, 0x4f, 0xe1, 0xe7, 0x00, 0x25, 0xf4, - 0xec, 0x16, 0x55, 0xf7, 0xbd, 0xc9, 0xdb, 0xfa, 0x6b, 0x5d, 0x6d, 0xb6, 0x2b, 0x53, 0xf2, 0xfa, - 0xb6, 0xdf, 0xf8, 0x03, 0x50, 0x03, 0x08, 0xda, 0xb8, 0x28, 0xbe, 0xad, 0xd8, 0x7f, 0x0b, 0x0c, - 0x9c, 0x00, 0x08, 0x28, 0xe8, 0x3e, 0x5e, 0x38, 0x80, 0xfb, 0x70, 0x2a, 0x54, 0x3f, 0x09, 0x4e, - 0x70, 0x78, 0xf0, 0x46, 0x71, 0xa6, 0x6e, 0x73, 0x5f, 0xc0, 0xa0, 0x24, 0x29, 0x71, 0x04, 0xbc, - 0xf0, 0xe1, 0xde, 0x6c, 0x12, 0x1c, 0x54, 0xa7, 0x87, 0x9c, 0x07, 0xb3, 0x62, 0x76, 0x96, 0xc7, - 0xbc, 0x7e, 0x0f, 0x0f, 0x83, 0x08, 0x63, 0xe0, 0x8e, 0x2f, 0x2f, 0x5d, 0x41, 0x0f, 0x04, 0xfb, - 0xb8, 0xac, 0x56, 0x2b, 0x15, 0x8a, 0x0c, 0x49, 0xdc, 0x0b, 0x11, 0xb1, 0x1c, 0x53, 0x56, 0x48, - 0x00, 0xd4, 0x3a, 0x0b, 0x83, 0xa0, 0x02, 0xe3, 0xde, 0x87, 0xb0, 0x12, 0xc9, 0x80, 0x54, 0x2a, - 0x2a, 0x5b, 0x1d, 0xf9, 0xfe, 0x3b, 0xf8, 0x30, 0x8c, 0x40, 0x00, 0x20, 0x8e, 0x34, 0x0c, 0x46, - 0x8e, 0xeb, 0x5f, 0xe0, 0x2c, 0x41, 0x48, 0xd2, 0x13, 0x8a, 0xf6, 0xa7, 0xc2, 0xc6, 0x5e, 0x99, - 0xc0, 0xe0, 0xf3, 0xc1, 0xe0, 0x07, 0x87, 0x00, 0x01, 0x3c, 0x56, 0xb1, 0x87, 0xe0, 0x6a, 0x70, - 0xe0, 0x38, 0x04, 0x72, 0x2b, 0x13, 0xe2, 0xff, 0x83, 0x90, 0x52, 0x37, 0x5c, 0x4b, 0xd4, 0x4f, - 0x9c, 0x1c, 0x99, 0x3c, 0x7d, 0x65, 0x80, 0xc4, 0x0e, 0x65, 0xc8, 0x64, 0x04, 0x00, 0x2d, 0x53, - 0x8f, 0x27, 0x2f, 0xf8, 0x60, 0x90, 0x12, 0x59, 0xe4, 0x40, 0x07, 0x2e, 0xd7, 0xf4, 0x54, 0x4c, - 0xbd, 0x1c, 0xe1, 0xa2, 0x40, 0x08, 0x6f, 0x68, 0xd3, 0x2d, 0xdf, 0xf7, 0xf7, 0x73, 0x73, 0xfa, - 0xd4, 0xbc, 0xdd, 0xfc, 0x85, 0x87, 0x30, 0x00, 0xc7, 0xe3, 0x33, 0xab, 0x17, 0xff, 0x9b, 0xba, - 0xab, 0x69, 0xdf, 0xcf, 0xfd, 0x6b, 0x6d, 0xcf, 0xe1, 0xed, 0xb7, 0xf8, 0x78, 0x90, 0x02, 0x6a, - 0x72, 0x04, 0x24, 0xfe, 0x73, 0xd3, 0x2f, 0x4d, 0x63, 0x4e, 0xe6, 0xf6, 0xa7, 0xf1, 0x5e, 0x47, - 0xdb, 0xdf, 0xe1, 0xe7, 0x03, 0x1b, 0x78, 0x10, 0xfe, 0xae, 0xd4, 0x56, 0xbe, 0x7b, 0xe6, 0xd5, - 0x6b, 0x09, 0x62, 0x21, 0x18, 0xab, 0x8f, 0x62, 0x7e, 0x14, 0x65, 0x00, 0x1c, 0xe4, 0x3e, 0x27, - 0x5a, 0x54, 0xfa, 0x7b, 0xf7, 0xd6, 0xae, 0x7e, 0x2b, 0x3d, 0xf8, 0x16, 0x41, 0x40, 0x40, 0x80, - 0xf1, 0x7b, 0x07, 0x85, 0xec, 0x78, 0x2f, 0x18, 0xf0, 0x2f, 0xde, 0xf0, 0xbb, 0x16, 0x01, 0x08, - 0xb2, 0x80, 0xca, 0x37, 0x93, 0x78, 0xad, 0x75, 0x8a, 0xe2, 0xb7, 0x51, 0x2c, 0x0e, 0xb1, 0xd8, - 0x59, 0xc0, 0x13, 0x30, 0x56, 0x28, 0xa2, 0xf9, 0x75, 0xef, 0x5c, 0xab, 0xdf, 0x0d, 0x90, 0x70, - 0x00, 0x9f, 0x5e, 0x41, 0x5c, 0x81, 0x8f, 0x14, 0x52, 0x41, 0x34, 0xd9, 0xed, 0x93, 0x20, 0xc9, - 0x90, 0x97, 0x83, 0x4c, 0x12, 0x05, 0x0a, 0xa7, 0xe7, 0xee, 0xff, 0xf0, 0xeb, 0x38, 0x00, 0xd2, - 0x44, 0x8c, 0x4e, 0x31, 0xe4, 0x1b, 0xb4, 0x5f, 0xdb, 0xb6, 0xdb, 0xba, 0x65, 0xe4, 0xe7, 0x3d, - 0xbd, 0xbd, 0xbd, 0xbc, 0x17, 0x77, 0xb6, 0xbf, 0x0e, 0x28, 0x01, 0xdc, 0x4f, 0x84, 0x2c, 0xdb, - 0x37, 0x3f, 0x5d, 0xdd, 0xb9, 0xff, 0x9d, 0xf4, 0xd3, 0x6d, 0xbf, 0x87, 0x14, 0x11, 0x42, 0x1d, - 0x6c, 0x8f, 0xff, 0xd6, 0x0b, 0x37, 0xbf, 0xc3, 0x8a, 0x00, 0x51, 0xd4, 0xd0, 0x82, 0x7b, 0x2e, - 0x79, 0x75, 0xd6, 0xea, 0xea, 0xa9, 0xaa, 0x8a, 0xef, 0x7f, 0x87, 0x51, 0x40, 0x07, 0xc5, 0xcf, - 0x68, 0x1e, 0x11, 0xbf, 0xe7, 0x8d, 0xdf, 0xd6, 0xdd, 0xc7, 0x57, 0xcd, 0xd3, 0x4d, 0xdd, 0x3f, - 0x1c, 0x9f, 0x74, 0xd3, 0xf8, 0x71, 0x40, 0x45, 0x9f, 0x8f, 0x67, 0xd3, 0xff, 0x10, 0xfb, 0xe2, - 0xee, 0xaa, 0xed, 0xb6, 0x9e, 0xe1, 0xe5, 0x17, 0x7a, 0x7f, 0x87, 0x30, 0x00, 0xdd, 0xec, 0x2b, - 0xf2, 0xb8, 0x8c, 0x33, 0xdf, 0xf3, 0xb7, 0xa6, 0x5d, 0xb7, 0x8f, 0x5e, 0x31, 0xeb, 0xbb, 0x6e, - 0x6f, 0x13, 0xf1, 0x3e, 0x35, 0xd5, 0xdf, 0xf0, 0x80, 0x91, 0xb9, 0x15, 0xcb, 0xa7, 0x79, 0x66, - 0xa5, 0x81, 0x89, 0x0e, 0x3b, 0x79, 0xb8, 0x61, 0x73, 0xeb, 0xb9, 0x7c, 0x7f, 0xe5, 0x22, 0x78, - 0xe1, 0xce, 0xad, 0x7c, 0x12, 0x6e, 0x2b, 0x15, 0xf6, 0x1e, 0x50, 0x00, 0xbe, 0xf0, 0xb3, 0xd4, - 0x77, 0x1a, 0x1a, 0xd4, 0xdd, 0x62, 0x7d, 0xe6, 0x4f, 0x11, 0xed, 0xf1, 0xb7, 0xc6, 0x35, 0x45, - 0x5b, 0xfe, 0x1c, 0x50, 0x06, 0x9d, 0x90, 0xdb, 0xb8, 0xd2, 0x2d, 0x5b, 0x37, 0x92, 0x41, 0xde, - 0xb7, 0xde, 0xb2, 0x72, 0xf0, 0x3f, 0xea, 0x62, 0xdb, 0x7f, 0x87, 0x14, 0x02, 0xda, 0xf5, 0x78, - 0x05, 0x7b, 0x67, 0xfe, 0xbe, 0x5e, 0x6e, 0xff, 0xea, 0x7b, 0xe2, 0x5e, 0x46, 0x75, 0xdb, 0xfc, - 0x38, 0xa0, 0x19, 0x84, 0x94, 0xd3, 0x58, 0xa7, 0x77, 0x52, 0xf2, 0x7f, 0x2d, 0xc6, 0x99, 0xbb, - 0x6c, 0xed, 0xe3, 0xc9, 0x95, 0xbf, 0xe1, 0xc5, 0x00, 0x6c, 0x7d, 0x50, 0xe5, 0x83, 0xad, 0x26, - 0xfa, 0x99, 0x0b, 0x0a, 0xf1, 0x67, 0xe0, 0xef, 0xee, 0xc7, 0x6f, 0x5d, 0x6d, 0xd3, 0x15, 0x6d, - 0x90, 0x5a, 0xa7, 0xf8, 0x71, 0x40, 0x2d, 0xad, 0x09, 0x22, 0x14, 0xdf, 0xd6, 0xa9, 0x83, 0xef, - 0x5d, 0x6d, 0xf6, 0xb3, 0x6e, 0xee, 0xe2, 0xfd, 0xa7, 0xfc, 0x38, 0xa0, 0x03, 0xbf, 0xc4, 0x49, - 0x01, 0x99, 0xcb, 0xf9, 0xbf, 0x2f, 0xdc, 0x5c, 0x56, 0x2e, 0x78, 0x1b, 0x9e, 0xc2, 0x44, 0xb4, - 0x97, 0xdf, 0xf0, 0xc6, 0x02, 0x71, 0x8c, 0x44, 0x0f, 0xc3, 0xf7, 0x9e, 0x0f, 0xb8, 0xe4, 0x7c, - 0x46, 0x05, 0x83, 0x3e, 0x9f, 0x6e, 0x5d, 0xc9, 0x47, 0x19, 0xcc, 0x07, 0x5b, 0x0d, 0xb2, 0x11, - 0x8e, 0x24, 0xff, 0x69, 0x59, 0x7c, 0xbe, 0x5f, 0xee, 0x0e, 0x44, 0x73, 0xf0, 0xc5, 0x3f, 0xc2, - 0x6e, 0x05, 0x4e, 0x64, 0xbc, 0xad, 0x5d, 0xf0, 0x9e, 0x15, 0xac, 0x4b, 0x08, 0x91, 0x84, 0x26, - 0x48, 0x98, 0x58, 0x11, 0x9e, 0xad, 0x6b, 0xf5, 0x8b, 0xfc, 0x26, 0xce, 0x00, 0xa2, 0x24, 0x90, - 0x2a, 0xd9, 0x5a, 0x96, 0xf1, 0x47, 0x55, 0x55, 0x14, 0x71, 0x41, 0xe1, 0x7c, 0x06, 0x9e, 0x67, - 0x9f, 0x7b, 0xfd, 0xef, 0xb3, 0x0d, 0xcc, 0x00, 0x4f, 0x5c, 0x0a, 0xd2, 0x0f, 0x9f, 0xed, 0x7d, - 0xd5, 0x55, 0x7a, 0x60, 0x50, 0xc9, 0xb9, 0xe1, 0xf1, 0x21, 0xf7, 0xbe, 0x00, 0xf6, 0x03, 0x21, - 0x42, 0x83, 0xcf, 0x95, 0x4e, 0x91, 0x8e, 0xbe, 0x58, 0x19, 0xc0, 0x70, 0x98, 0x0d, 0x4c, 0xc4, - 0xee, 0xeb, 0xa9, 0x55, 0x62, 0x4e, 0x0e, 0x03, 0xb0, 0xf1, 0x20, 0x04, 0x26, 0x66, 0x33, 0x64, - 0x73, 0xdf, 0xdd, 0xb7, 0xd3, 0xb7, 0x7a, 0xb6, 0x6e, 0x5f, 0x63, 0xbf, 0x5f, 0x83, 0x0d, 0xe4, - 0xff, 0x0d, 0x12, 0x00, 0x55, 0xe3, 0x82, 0x45, 0x1d, 0xd7, 0x9a, 0xdb, 0xba, 0x8b, 0xa7, 0x2d, - 0x88, 0x7c, 0x96, 0xdb, 0xc8, 0xa7, 0x0e, 0x60, 0x05, 0x64, 0x78, 0x1f, 0x66, 0x33, 0xc7, 0x1f, - 0xd6, 0x48, 0xe3, 0x37, 0x77, 0x27, 0x8c, 0xf7, 0xa7, 0x93, 0xb3, 0xfb, 0x62, 0xb1, 0x6d, 0xbf, - 0xe1, 0xc5, 0x00, 0x98, 0xad, 0x5f, 0xb8, 0xd4, 0x6f, 0xf5, 0xdf, 0x75, 0x74, 0xcd, 0x14, 0xcb, - 0xb9, 0x15, 0x8b, 0x60, 0xf7, 0xcc, 0xbe, 0xdf, 0xe1, 0xa5, 0x00, 0x37, 0x5d, 0x22, 0x11, 0xc4, - 0x67, 0x3e, 0x9d, 0xd3, 0x4d, 0x56, 0x55, 0xd5, 0xd5, 0xb0, 0xe2, 0x80, 0x2d, 0x44, 0xc5, 0xbf, - 0x76, 0xd3, 0x2e, 0xe9, 0xa6, 0xe8, 0x3d, 0x2e, 0xdb, 0x9a, 0x37, 0x32, 0xed, 0xed, 0xfc, 0x34, - 0x48, 0x03, 0xb2, 0xcc, 0xe2, 0x68, 0xc5, 0x6c, 0xd0, 0x7a, 0x4d, 0xcb, 0xaf, 0x5b, 0xa8, 0xad, - 0xbe, 0xf8, 0x26, 0xad, 0x6b, 0x17, 0x36, 0x07, 0x31, 0xd0, 0xfc, 0x06, 0x08, 0x40, 0x29, 0x1c, - 0xab, 0xa3, 0x72, 0x64, 0x9c, 0xe5, 0xd3, 0x6e, 0xbd, 0x6a, 0x2a, 0xa5, 0x1e, 0xb9, 0xb6, 0x1e, - 0x50, 0x01, 0xf7, 0x34, 0xa4, 0x1b, 0x8b, 0xda, 0xd5, 0xde, 0xde, 0xdb, 0xb6, 0xdb, 0x67, 0xf5, - 0xf4, 0xfe, 0x9f, 0xe1, 0xa5, 0x00, 0x24, 0xf4, 0x37, 0x87, 0x4b, 0xcf, 0xc2, 0x1e, 0xa2, 0xb3, - 0x76, 0x76, 0xf7, 0x77, 0xf1, 0x5d, 0x27, 0xbb, 0xed, 0xca, 0xc6, 0xd4, 0x3c, 0x48, 0x06, 0x20, - 0x14, 0x51, 0x57, 0x55, 0x27, 0x6c, 0xbd, 0x3b, 0x73, 0xf8, 0xbb, 0x8b, 0xbd, 0xbb, 0x91, 0xb5, - 0xaf, 0xe0, 0x41, 0x05, 0x21, 0x48, 0x1f, 0x92, 0x8f, 0x0b, 0x2f, 0x24, 0x00, 0x0a, 0x8a, 0x05, - 0x54, 0x3c, 0xf2, 0x80, 0x5e, 0x8f, 0x10, 0x0e, 0x5b, 0x1c, 0x09, 0x7b, 0x63, 0x81, 0x2f, 0x05, - 0x80, 0x00, 0x81, 0x6c, 0x10, 0x70, 0xc1, 0x20, 0x38, 0x59, 0xa8, 0x23, 0xbe, 0x7e, 0x37, 0x8c, - 0xbe, 0xa9, 0x93, 0xcd, 0x97, 0x8a, 0xd3, 0x67, 0xa8, 0xcd, 0x86, 0x89, 0x09, 0xc4, 0x66, 0xb3, - 0xfd, 0xdf, 0x7d, 0xd6, 0x23, 0xfc, 0x61, 0xe2, 0x40, 0x05, 0x16, 0xe6, 0x81, 0x2d, 0x70, 0x30, - 0x85, 0x62, 0x4f, 0x15, 0x96, 0x77, 0x3f, 0x6c, 0x56, 0xad, 0xfd, 0xde, 0x2e, 0x63, 0xfb, 0x7f, - 0x87, 0x08, 0x40, 0x01, 0x0c, 0x34, 0xc3, 0x06, 0x55, 0x41, 0xfb, 0x99, 0x3a, 0x71, 0x00, 0xc1, - 0xce, 0x06, 0x02, 0xf1, 0x73, 0xf7, 0x2c, 0x19, 0x6c, 0x48, 0x0f, 0x07, 0x4b, 0x62, 0x18, 0x39, - 0xcc, 0x3e, 0x1b, 0x71, 0x47, 0xde, 0xff, 0xf7, 0xf8, 0xcf, 0x4e, 0xc2, 0x76, 0x1f, 0x85, 0xd4, - 0x05, 0x41, 0x44, 0x89, 0xf8, 0xea, 0xeb, 0xee, 0xae, 0xa5, 0x82, 0x2b, 0x45, 0x3b, 0x0b, 0xb8, - 0x03, 0xbf, 0x62, 0x23, 0x3b, 0xd6, 0xbf, 0x5a, 0xd9, 0x84, 0xd9, 0x40, 0xed, 0xa6, 0x7d, 0x15, - 0x15, 0x6b, 0x44, 0xa8, 0xb0, 0xbb, 0x28, 0x32, 0x49, 0x9f, 0xf5, 0x55, 0x5f, 0x6c, 0x36, 0x8c, - 0x00, 0xfc, 0xb2, 0x07, 0x5d, 0x50, 0xe8, 0x6b, 0xba, 0xa1, 0xad, 0x8d, 0xee, 0x0f, 0x1f, 0x62, - 0x70, 0xff, 0x00, 0x21, 0x0c, 0x2e, 0x51, 0x21, 0xe7, 0x80, 0x01, 0x2e, 0x15, 0x2a, 0x4a, 0x00, - 0x04, 0x17, 0x3c, 0xfa, 0x81, 0xc0, 0x11, 0x80, 0x3c, 0x19, 0x05, 0x07, 0x57, 0x13, 0xe2, 0x4f, - 0x77, 0xf8, 0x73, 0x00, 0xe0, 0xde, 0x28, 0xa7, 0xad, 0xde, 0xf9, 0x77, 0xdb, 0xbb, 0x6e, 0x9a, - 0x69, 0xa6, 0x99, 0x3a, 0x67, 0x78, 0x1a, 0xcc, 0xcf, 0x6d, 0xbf, 0xc0, 0x1d, 0x00, 0x10, 0x42, - 0x98, 0x59, 0x54, 0xf3, 0xc0, 0x07, 0x0f, 0x1e, 0x20, 0x1e, 0x78, 0xfa, 0xd4, 0x75, 0x72, 0xc3, - 0x8f, 0x12, 0x1c, 0x10, 0x78, 0xc2, 0xbc, 0x39, 0x80, 0x4c, 0x12, 0x87, 0xcc, 0x57, 0xb1, 0xe2, - 0xef, 0xab, 0xab, 0x6a, 0xe4, 0x85, 0xce, 0x23, 0xd3, 0x2f, 0xd0, 0x1b, 0x8a, 0xb6, 0xfe, 0x17, - 0x24, 0x00, 0x60, 0x2b, 0x81, 0xe5, 0x12, 0x3d, 0xfd, 0xf2, 0x9b, 0xd6, 0xe5, 0xe9, 0xa7, 0x8c, - 0x61, 0xbd, 0x90, 0xbb, 0xe1, 0xbc, 0x00, 0x75, 0xf6, 0x64, 0x0b, 0x93, 0x37, 0xde, 0xcf, 0x3f, - 0xf7, 0x74, 0x09, 0x17, 0x42, 0x14, 0x56, 0x6f, 0x71, 0x3a, 0xdf, 0xf0, 0xb9, 0x20, 0x06, 0x8a, - 0x13, 0xae, 0x48, 0x6f, 0x37, 0xb6, 0xb5, 0x5a, 0x64, 0xf1, 0x93, 0xce, 0x27, 0xe7, 0xc3, 0xb8, - 0x00, 0x6c, 0x6b, 0x95, 0xb9, 0x82, 0xc6, 0x5c, 0xe9, 0x6b, 0x15, 0x88, 0x7a, 0x67, 0x0f, 0x79, - 0x6d, 0x45, 0xce, 0x78, 0xbd, 0x8a, 0xcf, 0x5f, 0xf8, 0x90, 0xf4, 0xb3, 0x2c, 0xcb, 0xc5, 0xf7, - 0x71, 0x0f, 0x2c, 0x6e, 0xe1, 0xc1, 0x81, 0xe3, 0xef, 0x2f, 0x2f, 0xff, 0x04, 0x77, 0xbb, 0xf4, - 0x3a, 0x1c, 0x47, 0x00, 0x4d, 0xe3, 0xc6, 0x16, 0xc0, 0xbb, 0xdc, 0xdd, 0xff, 0xb8, 0xbb, 0x8b, - 0x8f, 0x95, 0x5e, 0xff, 0x0e, 0xc8, 0x01, 0x40, 0x00, 0x27, 0x74, 0xf6, 0xeb, 0xdf, 0x17, 0x8b, - 0xbb, 0xbb, 0xaa, 0x8b, 0xc5, 0x0d, 0x57, 0x57, 0xf8, 0x68, 0x90, 0x00, 0xdf, 0xb8, 0xc4, 0x55, - 0xd9, 0x95, 0xf8, 0xbf, 0xbd, 0x54, 0x9d, 0xbe, 0x2f, 0x8b, 0xdf, 0x0c, 0xa8, 0x00, 0xcc, 0x19, - 0xc6, 0x44, 0x2f, 0xe2, 0x65, 0xff, 0x17, 0xaf, 0xba, 0xba, 0x8d, 0xe3, 0x0e, 0x92, 0x00, 0x2e, - 0xeb, 0x17, 0x16, 0x21, 0x75, 0xaf, 0x84, 0x3e, 0x4b, 0x7a, 0x7b, 0xbc, 0x56, 0x27, 0x02, 0xc0, - 0xf3, 0x03, 0x98, 0x08, 0x95, 0xbc, 0x57, 0xf0, 0xe2, 0x84, 0xe0, 0xb5, 0x23, 0xdf, 0xf3, 0xba, - 0xd4, 0xb6, 0xa2, 0xbf, 0xa8, 0x97, 0xc4, 0x8f, 0x12, 0xd5, 0xd3, 0x4f, 0xe1, 0xc5, 0x00, 0x1b, - 0xd8, 0xa8, 0x49, 0xb5, 0x98, 0xf2, 0xf7, 0xe5, 0x15, 0xab, 0xf4, 0xcb, 0xd3, 0x2f, 0x4c, 0xbc, - 0xef, 0x6f, 0x3b, 0xc6, 0xa9, 0x8a, 0xe7, 0xff, 0x0d, 0x12, 0x00, 0x46, 0x1b, 0x25, 0x07, 0x04, - 0x5f, 0xaf, 0xd6, 0xa2, 0x58, 0x16, 0x25, 0xb6, 0xc6, 0x6f, 0x37, 0x30, 0x0e, 0xe1, 0xd4, 0x40, - 0x0b, 0x03, 0xe9, 0xef, 0x40, 0x8f, 0x68, 0x5b, 0xd3, 0x8c, 0xbc, 0x1f, 0xf4, 0xe3, 0x4f, 0x2f, - 0xbc, 0x8a, 0xe2, 0xbc, 0xea, 0x8d, 0xf4, 0xb7, 0x7b, 0xc3, 0x64, 0x30, 0x00, 0x61, 0x63, 0x90, - 0x65, 0x4c, 0x29, 0x26, 0x1f, 0x15, 0xf9, 0xb8, 0xad, 0xb1, 0x5b, 0x67, 0xe5, 0x9b, 0xf9, 0x67, - 0xa2, 0xec, 0xdd, 0xfe, 0x1a, 0x70, 0xe8, 0x18, 0x97, 0xde, 0xff, 0xf2, 0x6c, 0x26, 0x8a, 0x00, - 0xf6, 0xd8, 0x61, 0x2d, 0xeb, 0xd1, 0x51, 0x7b, 0xa2, 0x92, 0x18, 0x4c, 0x84, 0x00, 0xde, 0xd0, - 0x2a, 0xaf, 0xaf, 0xff, 0x0b, 0xb2, 0x83, 0x4e, 0x71, 0xba, 0xbd, 0x6a, 0xae, 0xaf, 0x5a, 0xb6, - 0x2d, 0x9c, 0x07, 0xf9, 0x26, 0xb9, 0x30, 0xd4, 0x80, 0x07, 0x79, 0x07, 0x53, 0x3c, 0xbd, 0x15, - 0xab, 0xa9, 0x19, 0x59, 0xba, 0xba, 0xaa, 0xa9, 0x5f, 0xc1, 0x40, 0x64, 0x31, 0x7b, 0xf5, 0x17, - 0x0a, 0x33, 0x0e, 0x2a, 0x89, 0xf1, 0xd5, 0xe2, 0x7f, 0xf0, 0x24, 0x83, 0x81, 0xb9, 0xb9, 0x7b, - 0xf9, 0x28, 0x05, 0x4e, 0x00, 0xf3, 0xc3, 0xce, 0x0f, 0x7b, 0x79, 0x79, 0x7d, 0x20, 0x38, 0x88, - 0x00, 0x04, 0x00, 0xc4, 0x84, 0x9d, 0xf7, 0x7f, 0xc3, 0x44, 0x81, 0x24, 0x74, 0xdd, 0x07, 0x57, - 0xee, 0xee, 0xec, 0xf5, 0xa9, 0x79, 0xdf, 0x65, 0xe4, 0x13, 0x61, 0xc2, 0x40, 0x70, 0x1f, 0x23, - 0xd4, 0x00, 0x2d, 0xec, 0xf7, 0x5f, 0xb7, 0x77, 0xdb, 0xcf, 0x75, 0xfc, 0x38, 0xa0, 0x0c, 0xe0, - 0x00, 0x93, 0x5a, 0x8a, 0x3d, 0x3a, 0x97, 0x9d, 0xf8, 0x81, 0xe8, 0x8b, 0x71, 0xc7, 0xa2, 0x1d, - 0xc5, 0xf0, 0x5e, 0xbf, 0x0f, 0x28, 0x06, 0x03, 0xc4, 0x2f, 0x28, 0x53, 0xfb, 0xde, 0x5e, 0x58, - 0x2b, 0x61, 0x6d, 0xbe, 0x1e, 0xdf, 0x6a, 0xeb, 0x95, 0xf7, 0xf8, 0x68, 0x90, 0x22, 0xb8, 0xc3, - 0x24, 0xf5, 0x2e, 0xaf, 0xf7, 0x6c, 0xfd, 0xd6, 0xd4, 0x53, 0x61, 0x42, 0x40, 0x12, 0x64, 0xb7, - 0xd5, 0x73, 0xad, 0x5b, 0x6c, 0xff, 0xfd, 0xf0, 0xc2, 0x80, 0x1a, 0x66, 0x90, 0x14, 0x4e, 0xec, - 0xfd, 0x5f, 0xd3, 0xba, 0xbc, 0xea, 0xe2, 0x02, 0x00, 0xa6, 0x2b, 0x15, 0xbb, 0xbb, 0xe2, 0xb6, - 0xc4, 0x00, 0x38, 0x3b, 0xf0, 0x61, 0x03, 0xd0, 0xe6, 0x27, 0x81, 0xc4, 0x08, 0x23, 0x4a, 0x2b, - 0x10, 0x0f, 0x36, 0x9e, 0xe1, 0x54, 0xd4, 0xff, 0xc3, 0x3a, 0x01, 0xe2, 0xf2, 0x20, 0x3e, 0x6a, - 0xd4, 0xbc, 0x94, 0x05, 0x47, 0x69, 0x3c, 0xff, 0x0e, 0x60, 0x42, 0x8e, 0x47, 0xd5, 0xcf, 0x6f, - 0x11, 0x70, 0x5e, 0xcc, 0x2e, 0xcb, 0xfe, 0xf5, 0x4d, 0x46, 0x2a, 0x1d, 0xfe, 0x1c, 0x50, 0x01, - 0x80, 0xbc, 0x86, 0xac, 0x7c, 0xcf, 0x3f, 0xad, 0xdc, 0x4f, 0x8a, 0xcb, 0x31, 0x46, 0x58, 0x3f, - 0xa9, 0xc9, 0xf0, 0x27, 0xe0, 0xf1, 0xf2, 0x5b, 0x13, 0xa5, 0x6b, 0xf8, 0x79, 0x40, 0x13, 0x73, - 0x54, 0x00, 0xc6, 0x0b, 0xb8, 0xbb, 0xa7, 0x59, 0x79, 0xe0, 0x2e, 0x5b, 0x98, 0xbb, 0xa5, 0x5a, - 0x7f, 0x87, 0x14, 0x00, 0x45, 0x45, 0xee, 0x5f, 0xcc, 0xc5, 0x54, 0xd3, 0xac, 0xc2, 0x9c, 0x0f, - 0xb9, 0xcf, 0x4d, 0x32, 0x76, 0xf2, 0xfb, 0x2f, 0x76, 0xf6, 0x5f, 0x0f, 0x60, 0x09, 0x9a, 0xb1, - 0x45, 0xa8, 0x40, 0x57, 0xaf, 0xad, 0x6f, 0x75, 0xbf, 0x5d, 0x45, 0xe9, 0x9a, 0x1f, 0xc3, 0xae, - 0x00, 0x1e, 0xab, 0x68, 0x24, 0xcc, 0xfc, 0x7f, 0x78, 0x47, 0x97, 0xaa, 0x96, 0xcb, 0xdd, 0x54, - 0xfd, 0xb1, 0xd7, 0xd7, 0xe1, 0x90, 0x5d, 0x86, 0x40, 0x4c, 0x8b, 0x79, 0x4d, 0x3f, 0x87, 0x94, - 0x01, 0x63, 0x90, 0x17, 0x6b, 0xcf, 0x24, 0xeb, 0x22, 0x1f, 0x27, 0x3e, 0x71, 0xac, 0x5d, 0xed, - 0xcb, 0x5b, 0xce, 0xd1, 0x7f, 0x0f, 0x10, 0x40, 0x00, 0xd5, 0x46, 0x63, 0x12, 0xb1, 0xaf, 0x3d, - 0x5f, 0xd5, 0xd7, 0x7b, 0xa9, 0xf9, 0xbb, 0xfc, 0x48, 0xf3, 0xf1, 0xd3, 0xe0, 0x1c, 0xee, 0x7f, - 0x7f, 0xc0, 0x31, 0x30, 0xa4, 0x48, 0x00, 0x1f, 0xc0, 0xeb, 0x00, 0x35, 0x1d, 0x00, 0xf0, 0x9c, - 0x15, 0x3c, 0x79, 0xfe, 0x5b, 0x3f, 0xcb, 0x56, 0x78, 0x07, 0x04, 0x7c, 0x53, 0x43, 0x14, 0xc0, - 0xe9, 0x83, 0xb0, 0x99, 0x20, 0x09, 0x13, 0x68, 0x35, 0x06, 0xad, 0xcf, 0xbf, 0xbd, 0xfb, 0x78, - 0x6d, 0x40, 0x34, 0x60, 0x68, 0x06, 0x55, 0x9f, 0xfa, 0xfa, 0xfb, 0xf5, 0xac, 0x26, 0xe0, 0x48, - 0xe8, 0x4c, 0xef, 0xae, 0xb5, 0xfc, 0x2e, 0xe0, 0xb1, 0xb7, 0x96, 0x56, 0x5f, 0x65, 0x65, 0xbd, - 0xf9, 0xb0, 0xbb, 0x16, 0x08, 0x84, 0x63, 0x17, 0x4b, 0x7f, 0xbd, 0xde, 0xb5, 0xf6, 0x13, 0x64, - 0x00, 0x33, 0x9d, 0x4c, 0x88, 0x0d, 0xba, 0xf7, 0xd3, 0xeb, 0x5f, 0x8d, 0x42, 0x40, 0x20, 0x94, - 0x50, 0xeb, 0x70, 0x29, 0x8e, 0xe1, 0xe2, 0x0a, 0x00, 0x18, 0x23, 0xfa, 0xee, 0x2f, 0x11, 0x7e, - 0x6d, 0xbb, 0x76, 0xdb, 0xfb, 0x6b, 0x17, 0x02, 0xcb, 0xeb, 0xaf, 0xe0, 0x49, 0x85, 0x2d, 0xcd, - 0xee, 0x20, 0x78, 0x5a, 0xa7, 0x03, 0xc7, 0x6e, 0x2d, 0x96, 0xb0, 0x7d, 0xcf, 0x0b, 0x03, 0xdf, - 0x27, 0x03, 0x41, 0xcb, 0xe0, 0x7c, 0x00, 0x02, 0x05, 0xa3, 0xf0, 0xe6, 0x00, 0xdf, 0xde, 0xd8, - 0x4f, 0xc2, 0x7f, 0xef, 0x65, 0xb5, 0x7f, 0x2f, 0x77, 0xb9, 0x6c, 0x50, 0xcb, 0x18, 0xa1, 0xbb, - 0xb8, 0xac, 0x6a, 0x46, 0x35, 0xff, 0x0e, 0x10, 0xa0, 0x06, 0x51, 0xe0, 0x5f, 0xe6, 0x7f, 0xaa, - 0xeb, 0x7d, 0x92, 0x9a, 0x32, 0xe2, 0xee, 0x2f, 0xd7, 0xbf, 0xe1, 0x55, 0x00, 0x43, 0xc2, 0xce, - 0xa9, 0xdc, 0x97, 0x57, 0x13, 0xe2, 0xb3, 0xfd, 0xc5, 0xdc, 0x5c, 0x51, 0x96, 0x62, 0x8c, 0x53, - 0xc1, 0x88, 0x16, 0x02, 0x92, 0x70, 0x01, 0x52, 0x70, 0x54, 0x9c, 0x56, 0xa2, 0xdc, 0xbd, 0xc7, - 0x7e, 0x59, 0x8e, 0xfc, 0xb3, 0x8c, 0x56, 0x4f, 0x8c, 0x00, 0x01, 0x03, 0x55, 0x61, 0x85, 0x01, - 0x38, 0x0e, 0x76, 0x0e, 0xfb, 0x3f, 0xd6, 0xd9, 0xbd, 0xee, 0x37, 0x61, 0xa5, 0x02, 0x62, 0x38, - 0x54, 0x68, 0xfa, 0x6d, 0xff, 0xf5, 0xc0, 0x5c, 0x42, 0x91, 0x71, 0x93, 0x0e, 0x00, 0x38, 0x9c, - 0x28, 0x16, 0x18, 0x3c, 0xbb, 0x97, 0xcb, 0x31, 0x70, 0xb8, 0x1a, 0xb1, 0x7a, 0xc6, 0x83, 0x9f, - 0x04, 0xd3, 0xf8, 0x97, 0xb8, 0x91, 0xef, 0xe2, 0x47, 0xd8, 0xee, 0x85, 0x79, 0xb4, 0xe9, 0x9b, - 0x10, 0x6d, 0xe5, 0xf0, 0xee, 0x00, 0x20, 0x06, 0x23, 0x12, 0x98, 0x75, 0xa6, 0xbf, 0xb0, 0x8c, - 0x25, 0x10, 0x3b, 0x71, 0xdf, 0x96, 0xb1, 0xdf, 0x96, 0xb2, 0xf8, 0xe3, 0x2f, 0xbd, 0xc7, 0x6d, - 0x36, 0xff, 0x0f, 0x28, 0x00, 0x55, 0xb9, 0x96, 0xc4, 0x55, 0x76, 0x12, 0x67, 0x76, 0xde, 0x23, - 0xc5, 0xce, 0x3e, 0x9a, 0x64, 0xe4, 0xe5, 0xe3, 0xd7, 0x8c, 0x6e, 0x5d, 0xef, 0xf0, 0xd9, 0x20, - 0x0f, 0xe3, 0xe2, 0x1a, 0x5f, 0x8f, 0xfb, 0xbe, 0x5b, 0x64, 0x2d, 0x90, 0xb1, 0x72, 0xd8, 0x9f, - 0x8c, 0x60, 0xd0, 0x3b, 0x03, 0x87, 0x97, 0x9c, 0x3c, 0xef, 0x05, 0x35, 0x6d, 0x97, 0x7e, 0x1d, - 0x50, 0x05, 0x1e, 0x90, 0xf1, 0xde, 0xb0, 0x5d, 0xe6, 0xad, 0xdb, 0x5b, 0x3b, 0xf5, 0x8b, 0xb4, - 0xd7, 0xc3, 0x8a, 0x00, 0xc0, 0x03, 0x69, 0x7b, 0x63, 0xf2, 0x9a, 0x6c, 0x90, 0x7c, 0x05, 0xde, - 0x68, 0xa9, 0x77, 0xbf, 0x75, 0x4f, 0xe1, 0xc5, 0x00, 0x3c, 0xed, 0x30, 0xfc, 0x95, 0xbd, 0x4e, - 0xdb, 0x8b, 0xb8, 0xbd, 0xba, 0x75, 0x58, 0x25, 0xa9, 0xff, 0x87, 0x24, 0x00, 0x0e, 0xf7, 0xf8, - 0x41, 0xe7, 0x31, 0xdd, 0x1e, 0xdd, 0xcb, 0xe1, 0x0b, 0x8c, 0x61, 0xb3, 0xd1, 0xf2, 0xcf, 0x52, - 0x40, 0x6a, 0x9b, 0xdf, 0xe1, 0xe5, 0x01, 0x42, 0x40, 0xc3, 0x01, 0xf3, 0x83, 0x27, 0xfd, 0xdd, - 0xec, 0xbd, 0xdc, 0x57, 0x6e, 0x2e, 0xe2, 0xf1, 0xda, 0xae, 0xbf, 0x87, 0x99, 0x80, 0x18, 0x98, - 0x4a, 0xc9, 0x54, 0x2e, 0xd4, 0xeb, 0x3f, 0x5f, 0x81, 0x5b, 0xe2, 0xbb, 0x8a, 0xe6, 0xa0, 0x48, - 0x38, 0x7e, 0xe8, 0x8f, 0x0f, 0x86, 0xd8, 0x91, 0xf3, 0x07, 0x58, 0xce, 0xb1, 0xf3, 0xac, 0x4e, - 0xb1, 0xbd, 0xe4, 0x66, 0xfb, 0xfc, 0x38, 0x48, 0x02, 0x41, 0x09, 0x72, 0x80, 0xcf, 0xad, 0xd5, - 0xaa, 0x9b, 0xab, 0xbb, 0xab, 0xaa, 0xca, 0xac, 0x9f, 0xf7, 0xbc, 0x36, 0x88, 0x03, 0x88, 0x5a, - 0x94, 0xa0, 0x11, 0xeb, 0xb2, 0xbc, 0x57, 0x5a, 0xc4, 0xb0, 0x51, 0x5a, 0xa5, 0xfd, 0x6b, 0x09, - 0x90, 0xc0, 0x66, 0x93, 0x3f, 0xeb, 0x5f, 0x84, 0xd8, 0x90, 0x04, 0xf0, 0x9e, 0xd6, 0xd2, 0xf7, - 0xac, 0x5e, 0xee, 0xee, 0x24, 0xc1, 0xcf, 0x0c, 0x2f, 0x00, 0xb0, 0x01, 0xe4, 0x28, 0x26, 0x21, - 0xeb, 0x1b, 0xbe, 0xb1, 0x78, 0x9f, 0x4c, 0x2e, 0x79, 0x9c, 0x68, 0x31, 0x20, 0xb0, 0xbb, 0x20, - 0x1b, 0x12, 0xf7, 0xfa, 0xac, 0xaf, 0xd6, 0x39, 0x94, 0x06, 0x34, 0x1c, 0x7e, 0x9a, 0xc3, 0xb3, - 0x00, 0x0d, 0x6b, 0x6d, 0x26, 0x60, 0x47, 0xab, 0xde, 0x7e, 0x3a, 0x5d, 0xcb, 0x3f, 0x71, 0xae, - 0x15, 0xe2, 0xd7, 0x54, 0x48, 0x07, 0xc2, 0xe0, 0x1c, 0x7c, 0x3a, 0xe0, 0x0e, 0xcf, 0x73, 0xb0, - 0xff, 0xff, 0xde, 0xeb, 0xdb, 0x96, 0xcb, 0x37, 0x51, 0xdb, 0x9f, 0x88, 0xfb, 0xe2, 0xef, 0xcb, - 0x57, 0xdf, 0xe1, 0x75, 0x00, 0x26, 0xe9, 0x56, 0x60, 0x37, 0xbe, 0xde, 0xa5, 0xe2, 0x86, 0x5b, - 0xf5, 0x14, 0x31, 0x46, 0x20, 0x3c, 0xb0, 0x6a, 0xa2, 0xeb, 0x58, 0x71, 0x40, 0x08, 0x64, 0xda, - 0x11, 0x66, 0x4f, 0xf7, 0xe7, 0x8a, 0xc5, 0xe2, 0x9f, 0xc5, 0x38, 0xbf, 0x1f, 0xa2, 0xa2, 0xf8, - 0x5d, 0xc0, 0x0b, 0x37, 0x8f, 0xa6, 0x59, 0xd7, 0xf7, 0xbb, 0xab, 0xab, 0xc5, 0x71, 0x5a, 0x9f, - 0x89, 0xfb, 0xac, 0x35, 0x80, 0x4b, 0x43, 0xba, 0x35, 0x45, 0x22, 0xda, 0x88, 0x7b, 0x3c, 0x6f, - 0x18, 0xae, 0xfb, 0xde, 0xe5, 0xb0, 0xe2, 0x80, 0x13, 0xbd, 0x65, 0x80, 0x30, 0x20, 0xc2, 0xfe, - 0x72, 0xf1, 0x2f, 0x3c, 0xfb, 0xdc, 0xb1, 0x96, 0x18, 0xa0, 0xc5, 0x0f, 0xa8, 0xc5, 0xa8, 0xa8, - 0xbf, 0x0e, 0x12, 0x00, 0x35, 0xf4, 0xc6, 0xb9, 0xc2, 0x65, 0xbd, 0x5d, 0x5d, 0xe2, 0xb6, 0x42, - 0xee, 0x29, 0xb8, 0x89, 0xde, 0xff, 0x0e, 0x12, 0x01, 0xc9, 0x07, 0xb4, 0x0b, 0x7c, 0x38, 0x76, - 0x17, 0xac, 0xdd, 0xd6, 0xd7, 0x7f, 0x82, 0x5b, 0xab, 0xff, 0x08, 0x82, 0x99, 0xe3, 0xf3, 0xc7, - 0xd5, 0x6a, 0x2b, 0x8a, 0xe3, 0x46, 0x97, 0xaf, 0x4f, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x5d, - 0x2e, 0xb0, 0xa8, 0x12, 0x74, 0x3f, 0xa0, 0x5f, 0xeb, 0xd3, 0x75, 0x8a, 0x5e, 0xaf, 0x0e, 0xf5, - 0x78, 0x47, 0xaf, 0x4f, 0xc1, 0x1d, 0x57, 0x78, 0x73, 0xab, 0x15, 0xd5, 0xa4, 0xe6, 0xbb, 0xe7, - 0xeb, 0x52, 0xf5, 0xe9, 0x07, 0x38, 0xeb, 0x70, 0xc5, 0x26, 0xea, 0xf0, 0x63, 0xd7, 0xa8, 0x62, - 0x87, 0x93, 0x3e, 0x15, 0xd7, 0xa5, 0xea, 0xf3, 0x75, 0x79, 0x7a, 0x23, 0xc6, 0x74, 0x5e, 0x84, - 0x7a, 0xbd, 0xf5, 0x7f, 0xab, 0xcb, 0xd6, 0xa2, 0x3a, 0xbc, 0x13, 0xf5, 0x7f, 0xab, 0xfc, 0xb5, - 0x55, 0x52, 0xf5, 0x79, 0x7a, 0x2f, 0x7d, 0x5a, 0xfa, 0x23, 0xd7, 0x57, 0xae, 0xaf, 0xf5, 0x79, - 0x3a, 0xbc, 0x3d, 0x02, 0x88, 0x28, 0xe0, 0x58, 0xd8, 0x43, 0x67, 0xce, 0x34, 0x5d, 0x97, 0x08, - 0x28, 0xf7, 0x1d, 0x5a, 0xf7, 0xc3, 0x5d, 0x5e, 0x6e, 0xbd, 0x3f, 0x2d, 0x55, 0x57, 0xd7, 0xa7, - 0x0c, 0xa8, 0x2e, 0xd2, 0xdf, 0xff, 0xa6, 0x9e, 0x63, 0x0c, 0x10, 0xc0, 0x3d, 0x93, 0x96, 0xff, - 0xd3, 0x4f, 0x4d, 0x36, 0xc3, 0x28, 0xe0, 0xea, 0xff, 0xf9, 0xb4, 0xdb, 0xf9, 0x63, 0x11, 0x41, - 0xd5, 0x91, 0x57, 0x31, 0xab, 0x13, 0xf8, 0x04, 0xc0, 0x32, 0xae, 0x70, 0x12, 0x01, 0x15, 0x78, - 0x67, 0xa2, 0xbd, 0x75, 0xe9, 0x46, 0x76, 0x38, 0x38, 0x03, 0x0a, 0x33, 0xf0, 0x40, 0x07, 0x95, - 0x1c, 0x6c, 0x5e, 0x12, 0xa8, 0xe1, 0x91, 0x71, 0xce, 0x17, 0x03, 0x4d, 0xf0, 0xf1, 0x20, 0x4b, - 0x79, 0x4a, 0x9f, 0xff, 0xf8, 0x21, 0xb4, 0xd7, 0xf0, 0x92, 0x28, 0x0f, 0xae, 0x27, 0x93, 0x26, - 0xdb, 0xfe, 0x21, 0x5e, 0x25, 0x14, 0x1d, 0x59, 0x80, 0x90, 0x10, 0x6d, 0xee, 0x4e, 0x89, 0xdc, - 0x22, 0x05, 0x10, 0x58, 0x4d, 0xc5, 0x6a, 0xaa, 0xb7, 0xb8, 0xec, 0xdc, 0x04, 0x08, 0x0d, 0x90, - 0x58, 0x64, 0x8b, 0x82, 0xb2, 0xc0, 0x6b, 0x58, 0xac, 0x50, 0x18, 0xac, 0x50, 0x18, 0x20, 0x00, - 0x08, 0xc6, 0x80, 0x70, 0xc2, 0x20, 0x0c, 0xcc, 0x17, 0x20, 0x20, 0x1f, 0xde, 0xbe, 0x98, 0xb6, - 0x9a, 0x6a, 0xaa, 0xaa, 0xaa, 0xa3, 0xbb, 0x0e, 0x23, 0x00, 0x2a, 0x3e, 0x67, 0x6d, 0x1c, 0x64, - 0x1c, 0x0b, 0x56, 0x27, 0x5a, 0x85, 0xc0, 0xfc, 0xa9, 0xd6, 0x4a, 0xcf, 0x1e, 0x29, 0xad, 0xe5, - 0x77, 0x18, 0x35, 0x34, 0xeb, 0x6f, 0x87, 0x14, 0x01, 0x95, 0x30, 0x96, 0xce, 0x6d, 0x5f, 0xef, - 0x55, 0xb7, 0xc5, 0x58, 0xa2, 0xd3, 0x06, 0x69, 0x73, 0x8d, 0x36, 0xf4, 0xc5, 0xb2, 0x26, 0x9f, - 0xd3, 0x87, 0x11, 0x00, 0x02, 0x8b, 0x62, 0x51, 0x27, 0xf1, 0x29, 0x53, 0x55, 0x36, 0xde, 0x0d, - 0x3f, 0x17, 0x4b, 0xa1, 0x41, 0x17, 0xe3, 0x03, 0xfb, 0x5f, 0x59, 0xc3, 0xee, 0x6e, 0x6d, 0xff, - 0x81, 0x80, 0x04, 0xc8, 0x2c, 0x2a, 0xca, 0x8b, 0x81, 0xcb, 0x00, 0x1a, 0x87, 0x38, 0x6a, 0x51, - 0x00, 0x01, 0x00, 0xb5, 0x25, 0x00, 0x03, 0x6a, 0x3f, 0xd3, 0xcf, 0x25, 0x00, 0x05, 0x4a, 0x3a, - 0x8a, 0xf3, 0x0b, 0xb1, 0x60, 0x02, 0x10, 0x48, 0xef, 0x21, 0xa2, 0xad, 0xbf, 0xf1, 0xcf, 0xc1, - 0xcf, 0xf4, 0xe5, 0x4e, 0x07, 0x8a, 0x17, 0xdf, 0x5e, 0x97, 0xaf, 0x57, 0x44, 0xeb, 0xe8, 0xbd, - 0x5d, 0x7a, 0x37, 0xab, 0xca, 0x1b, 0xc0, 0x48, 0x3a, 0x4e, 0x6b, 0xff, 0xe9, 0xf2, 0x51, 0xfe, - 0xdc, 0x24, 0xa0, 0xf1, 0xf3, 0xa7, 0xf4, 0xd3, 0x8d, 0x52, 0x45, 0x19, 0x51, 0x88, 0xb4, 0x7e, - 0x39, 0x88, 0x09, 0x44, 0x55, 0xc8, 0x6e, 0x31, 0x51, 0xcc, 0xa0, 0x1f, 0x64, 0xeb, 0x92, 0x31, - 0xc6, 0x60, 0x18, 0xd1, 0xf3, 0x3c, 0x52, 0x1f, 0x16, 0xc8, 0x09, 0x80, 0x51, 0x28, 0x15, 0xfc, - 0x73, 0x28, 0x65, 0x88, 0x18, 0xa6, 0x28, 0x84, 0x1e, 0x58, 0xe5, 0x09, 0x6a, 0xb0, 0x62, 0x98, - 0xa2, 0x41, 0xb7, 0x93, 0xe8, 0xbd, 0x8b, 0x20, 0xa0, 0x0d, 0xe8, 0x23, 0xa4, 0x86, 0x31, 0xbc, - 0x71, 0x08, 0x01, 0x31, 0xf0, 0x88, 0x05, 0xad, 0xc7, 0x43, 0xf1, 0xcc, 0x80, 0x94, 0x24, 0x03, - 0x49, 0x76, 0x1a, 0x24, 0x01, 0xbd, 0x94, 0x04, 0x0a, 0x71, 0xaa, 0xff, 0x4d, 0x35, 0xfe, 0x8c, - 0x54, 0x30, 0x42, 0x80, 0x30, 0xe2, 0xc0, 0x68, 0x7e, 0x9e, 0xdb, 0x7f, 0xf8, 0xda, 0x2a, 0x86, - 0x89, 0x00, 0x8f, 0x36, 0x47, 0xd5, 0xf1, 0xde, 0xff, 0xf2, 0xc3, 0x51, 0x00, 0x08, 0x51, 0x6f, - 0xfe, 0xc1, 0x17, 0xa1, 0x4f, 0xda, 0xde, 0x6f, 0xfe, 0x4e, 0x7a, 0xdf, 0xf6, 0x39, 0x1c, 0x05, - 0x6f, 0x95, 0x21, 0xb8, 0xd2, 0xb0, 0xc0, 0x18, 0x41, 0x5c, 0x61, 0x71, 0xef, 0x8a, 0x31, 0x00, - 0xf2, 0xc1, 0x88, 0x00, 0x79, 0x60, 0x31, 0x5c, 0x57, 0x1d, 0x8f, 0x84, 0xba, 0x08, 0xf4, 0x64, - 0x04, 0x08, 0x12, 0x0b, 0x55, 0x55, 0x8e, 0x50, 0x92, 0xcd, 0xcd, 0x8d, 0x94, 0x1e, 0xfa, 0x45, - 0x11, 0x20, 0x38, 0x97, 0x8b, 0x44, 0x02, 0xeb, 0x05, 0x70, 0x0b, 0x0c, 0x10, 0x38, 0xe2, 0x14, - 0x20, 0xaa, 0xe0, 0x8c, 0xea, 0x12, 0x44, 0x09, 0x5a, 0x90, 0x21, 0x97, 0xd3, 0xf8, 0xe2, 0x42, - 0x55, 0x15, 0x50, 0x60, 0xfc, 0x38, 0xa0, 0x45, 0xa6, 0xfc, 0xb4, 0xd3, 0xb6, 0x9f, 0xfc, 0x5a, - 0xf2, 0x9a, 0x7f, 0xc7, 0x10, 0x80, 0x60, 0xd2, 0x2e, 0xc4, 0x28, 0x13, 0x36, 0x90, 0x6d, 0x80, - 0x40, 0x00, 0x22, 0x00, 0xac, 0xba, 0xaa, 0xee, 0xee, 0xe2, 0xbf, 0x61, 0x12, 0x40, 0x44, 0x7a, - 0x4f, 0xc1, 0xab, 0x76, 0xdb, 0xf2, 0x06, 0xa6, 0x00, 0x34, 0x7f, 0x20, 0x75, 0xbb, 0x77, 0xff, - 0xb6, 0xde, 0x56, 0xc3, 0x44, 0x30, 0x02, 0x47, 0xd0, 0x8b, 0x6b, 0xe7, 0xff, 0xb6, 0xde, 0xdb, - 0x7a, 0x47, 0x0d, 0x12, 0x00, 0xa3, 0xe0, 0x4b, 0x07, 0x7e, 0x93, 0x4f, 0x4d, 0x3d, 0xb6, 0xf6, - 0xdb, 0xb6, 0x9d, 0x42, 0xe4, 0x20, 0x00, 0x55, 0x66, 0xc0, 0x39, 0xb5, 0x38, 0x63, 0x55, 0xd9, - 0x53, 0x5d, 0xee, 0x2a, 0xc1, 0x8a, 0x53, 0xf2, 0xac, 0xbc, 0x5c, 0x06, 0x50, 0x54, 0x6e, 0x47, - 0x70, 0xc1, 0x06, 0x81, 0xa0, 0x61, 0xcf, 0xf6, 0x9a, 0x7f, 0xd3, 0x2e, 0xc5, 0xba, 0x62, 0x96, - 0x29, 0x63, 0x28, 0x19, 0x78, 0x61, 0x41, 0x8c, 0x47, 0xff, 0xed, 0xb6, 0x9a, 0x7c, 0xca, 0x17, - 0x8c, 0x01, 0x86, 0x80, 0x0c, 0xed, 0x5a, 0xba, 0x6f, 0xae, 0xfd, 0x3a, 0x8b, 0x21, 0x40, 0x5f, - 0xb3, 0x0d, 0x26, 0xc5, 0x63, 0x3f, 0x8f, 0x63, 0x43, 0x42, 0x4a, 0x81, 0x0d, 0xeb, 0xe1, 0x6e, - 0x8a, 0xf3, 0xc1, 0x0c, 0x71, 0x6b, 0x59, 0x33, 0x7b, 0xe1, 0x45, 0x0a, 0x72, 0xf6, 0xdb, 0xff, - 0xe1, 0x47, 0xa6, 0x9e, 0x9a, 0x7f, 0xfc, 0x74, 0x50, 0x44, 0x08, 0xa6, 0x91, 0xa0, 0x87, 0x1d, - 0x84, 0xca, 0x4e, 0x46, 0x0a, 0x87, 0x14, 0x10, 0xfa, 0xe3, 0xff, 0xf4, 0xd3, 0xbf, 0xf4, 0xf1, - 0xa4, 0x28, 0x37, 0x4b, 0x1a, 0x31, 0x5a, 0x8c, 0x53, 0xc7, 0x23, 0x2a, 0x31, 0x1c, 0x13, 0x80, - 0xcf, 0x44, 0x4a, 0xa3, 0x09, 0xa4, 0xc5, 0x22, 0x31, 0xe0, 0x10, 0x10, 0x34, 0x86, 0x2e, 0xee, - 0xfb, 0xbe, 0xdf, 0x3f, 0x6d, 0xf1, 0x78, 0x97, 0x4c, 0xc6, 0x28, 0xb8, 0x21, 0x04, 0x42, 0x04, - 0x8e, 0x09, 0x00, 0x1c, 0x9f, 0x3d, 0x85, 0x22, 0x80, 0x0b, 0xce, 0x42, 0xe1, 0xd0, 0x5f, 0x6b, - 0x6d, 0xbb, 0x62, 0xac, 0x55, 0xff, 0xc3, 0x08, 0x80, 0x09, 0x52, 0x1d, 0x6a, 0x6a, 0x07, 0x60, - 0xd7, 0x9a, 0x65, 0xb6, 0xe4, 0xff, 0x37, 0x77, 0xf3, 0xe9, 0xee, 0xf9, 0x61, 0xe9, 0x00, 0x08, - 0x63, 0xb5, 0x82, 0xe7, 0x46, 0xb8, 0x92, 0x0b, 0xfd, 0x18, 0xb6, 0x7f, 0xba, 0x82, 0xda, 0x65, - 0xda, 0x6f, 0xd1, 0x50, 0x60, 0xc5, 0xb2, 0xec, 0x58, 0x00, 0x76, 0x01, 0x7b, 0xb0, 0x2e, 0xdd, - 0xbf, 0x7b, 0x7f, 0x0e, 0x28, 0x04, 0x9f, 0x0b, 0x05, 0x1d, 0x53, 0x4d, 0x34, 0xd3, 0x4d, 0x35, - 0x52, 0xca, 0x2a, 0x58, 0xbb, 0x50, 0xca, 0x72, 0xd5, 0x4b, 0x76, 0x93, 0x83, 0x2c, 0xb0, 0x5a, - 0xff, 0x6f, 0x01, 0x41, 0x0a, 0x14, 0x50, 0x06, 0x0d, 0x75, 0x0b, 0xaa, 0x4e, 0x15, 0x8c, 0x1a, - 0x11, 0x54, 0xe3, 0xc7, 0x09, 0x78, 0x71, 0x30, 0x94, 0xf0, 0x00, 0x25, 0x83, 0x80, 0x20, 0x03, - 0x60, 0x70, 0x60, 0x03, 0x29, 0x30, 0x01, 0x51, 0xc3, 0xf8, 0x71, 0x40, 0x01, 0x28, 0xa8, 0x06, - 0x20, 0x38, 0x30, 0x58, 0xe1, 0xa2, 0x1c, 0x04, 0xf4, 0xe1, 0x20, 0x2d, 0x6b, 0xf4, 0xe9, 0xff, - 0xeb, 0x16, 0xe0, 0x08, 0x6f, 0x86, 0x82, 0x04, 0x97, 0x86, 0x58, 0xd7, 0xbc, 0x9d, 0x15, 0xe3, - 0xfa, 0xb5, 0xf5, 0xa8, 0x81, 0xd1, 0x00, 0xbb, 0x7c, 0x95, 0x44, 0x2b, 0x58, 0x30, 0x01, 0xf0, - 0x34, 0xa2, 0xbb, 0xd4, 0x5e, 0xb5, 0x55, 0x55, 0xc4, 0x00, 0x02, 0x40, 0x3a, 0x0c, 0x06, 0x35, - 0x34, 0xd3, 0x16, 0xfe, 0x18, 0xc0, 0xdc, 0xfb, 0x4d, 0x34, 0xd3, 0x4d, 0x3f, 0xf0, 0x53, 0x11, - 0xdc, 0x72, 0x83, 0xb7, 0xac, 0x6a, 0x28, 0x87, 0x0e, 0xc4, 0xa5, 0x18, 0x42, 0xc6, 0x51, 0x54, - 0x64, 0x80, 0xea, 0xf1, 0x62, 0x09, 0x29, 0x28, 0x99, 0x41, 0xef, 0xc5, 0xe1, 0xef, 0x16, 0x67, - 0xe8, 0x9a, 0x98, 0x62, 0xeb, 0x1a, 0x82, 0x31, 0x16, 0x98, 0xc4, 0x30, 0x37, 0xe1, 0xdb, 0x80, - 0xb1, 0x82, 0x32, 0x27, 0x27, 0x93, 0xe1, 0x44, 0x28, 0x00, 0x40, 0x2d, 0x76, 0x86, 0xba, 0xdb, - 0x5e, 0x54, 0x18, 0xac, 0x80, 0x31, 0x7f, 0xfe, 0x18, 0x46, 0x03, 0x5d, 0x9c, 0x37, 0xe3, 0x26, - 0xe2, 0x3a, 0x20, 0xeb, 0x75, 0xff, 0x8e, 0xe3, 0x81, 0x20, 0x04, 0xc8, 0x21, 0x38, 0x90, 0x07, - 0x05, 0x06, 0xfc, 0xb1, 0xa3, 0x4f, 0xd0, 0xb7, 0x89, 0xea, 0xd3, 0x70, 0x49, 0x7d, 0x5e, 0x4e, - 0xac, 0x4b, 0xc9, 0x55, 0x55, 0x9c, 0x90, 0xe3, 0xd8, 0x31, 0x01, 0xf2, 0x09, 0x60, 0xf1, 0x61, - 0xc7, 0x2b, 0x55, 0x54, 0x6a, 0xbc, 0x95, 0x55, 0x5f, 0x75, 0x55, 0x59, 0xc8, 0x53, 0xc1, 0xc0, - 0x80, 0x21, 0x76, 0xe0, 0x41, 0x13, 0x10, 0x2c, 0x9c, 0x9d, 0x43, 0xc8, 0x60, 0x00, 0x8a, 0xd4, - 0x9b, 0xd2, 0x7a, 0xff, 0xfa, 0xc4, 0x7a, 0x6f, 0xf7, 0x86, 0xf0, 0x01, 0x49, 0x73, 0xc2, 0xa6, - 0x38, 0xa2, 0x7f, 0xe9, 0xbc, 0x62, 0x1f, 0xe5, 0x4e, 0x9f, 0xe3, 0x22, 0xc3, 0x8f, 0x20, 0x85, - 0x43, 0x71, 0x40, 0x05, 0x2f, 0x2f, 0x0b, 0x1f, 0x5f, 0xff, 0xdc, 0x10, 0x03, 0x11, 0x96, 0xbd, - 0xf1, 0xc4, 0x38, 0xe4, 0x68, 0x89, 0xa2, 0xbc, 0x0c, 0x00, 0x58, 0x05, 0x07, 0x15, 0xbd, 0xdc, - 0x56, 0xe2, 0xb1, 0x1d, 0xd0, 0x57, 0xd1, 0x9e, 0xce, 0xb8, 0xc9, 0xe3, 0x14, 0xc7, 0xa8, 0x71, - 0xe2, 0xa5, 0x34, 0xd3, 0x4f, 0xf0, 0x16, 0x20, 0xa4, 0x16, 0x06, 0x20, 0xe8, 0x5c, 0xfc, 0xf0, - 0xf8, 0x32, 0xd6, 0x50, 0x80, 0xd4, 0x94, 0x01, 0x53, 0x87, 0x49, 0x40, 0x00, 0xaa, 0x8e, 0x0f, - 0xfd, 0x85, 0xf0, 0x0c, 0x1a, 0x1b, 0xe4, 0x28, 0xe7, 0xab, 0xd7, 0xdf, 0xcb, 0x6e, 0x5b, 0x7f, - 0x4a, 0xa1, 0xe6, 0x3c, 0x23, 0x31, 0xd7, 0xff, 0xf0, 0xae, 0xe0, 0x79, 0xcd, 0xfe, 0xf0, 0xf1, - 0x05, 0x00, 0x0e, 0x9d, 0x68, 0x62, 0xd0, 0xc5, 0x03, 0xdb, 0xa7, 0xa8, 0xad, 0x44, 0x0f, 0x52, - 0x79, 0x3b, 0xd9, 0xc9, 0x1c, 0x4d, 0x8b, 0xe3, 0x0e, 0xfd, 0x7c, 0x09, 0x00, 0x79, 0x04, 0x67, - 0x16, 0x75, 0x32, 0x80, 0x27, 0x5f, 0xb1, 0x84, 0x16, 0x17, 0x7e, 0xef, 0x9a, 0xaa, 0xaa, 0x0b, - 0xc3, 0x08, 0x70, 0x00, 0xff, 0xa4, 0x9b, 0xe2, 0x2f, 0xff, 0xfd, 0xb6, 0xfa, 0xc4, 0x79, 0x84, - 0xfc, 0x03, 0x90, 0x01, 0x40, 0x1a, 0x60, 0x6c, 0x05, 0x48, 0xca, 0x10, 0x96, 0xcf, 0x3e, 0x5d, - 0xf1, 0xf7, 0x2d, 0xc6, 0x21, 0xee, 0xe9, 0xd6, 0x98, 0x16, 0x20, 0x63, 0x00, 0xdb, 0x7b, 0xfc, - 0x36, 0xe0, 0x0a, 0x4e, 0xc8, 0x61, 0xde, 0xb7, 0xbd, 0xef, 0x2f, 0x4d, 0xe5, 0xe9, 0xfb, 0xb7, - 0xeb, 0x82, 0x18, 0x27, 0x12, 0xeb, 0x53, 0x37, 0xf2, 0xf2, 0x50, 0x68, 0x20, 0x78, 0x3e, 0xc1, - 0xa8, 0x58, 0x8a, 0xc3, 0x52, 0x00, 0x39, 0x6b, 0x0c, 0x13, 0x26, 0x1e, 0x79, 0x72, 0x79, 0xdd, - 0x10, 0xac, 0xbe, 0x77, 0xbc, 0x50, 0x6e, 0x28, 0x33, 0x45, 0x86, 0x0e, 0x40, 0xf0, 0x0a, 0xe6, - 0x80, 0x50, 0xe6, 0x0f, 0x85, 0x54, 0xac, 0x39, 0x21, 0xd0, 0xf7, 0x83, 0xf9, 0xa8, 0xff, 0x9b, - 0x0d, 0x82, 0x5a, 0x05, 0x71, 0xb0, 0x43, 0x02, 0x84, 0x82, 0x21, 0x51, 0xc4, 0x1f, 0x8e, 0xe8, - 0x25, 0xd0, 0xc4, 0x21, 0x57, 0xa0, 0xf4, 0x60, 0x06, 0x0e, 0x49, 0xd3, 0x93, 0x4f, 0x4e, 0x3d, - 0xff, 0x8d, 0x91, 0x76, 0xb1, 0x7b, 0xdf, 0x11, 0x0a, 0x62, 0x1f, 0x15, 0x9f, 0xe3, 0xdf, 0x3f, - 0xcb, 0xb2, 0xf7, 0xf1, 0xc5, 0x2a, 0xaf, 0x0e, 0x8b, 0x96, 0x59, 0xe1, 0xe3, 0x9b, 0x8e, 0x31, - 0x81, 0xc3, 0xc4, 0x30, 0x1e, 0x38, 0x4a, 0x7a, 0x56, 0x9b, 0xe3, 0x5a, 0xe4, 0x86, 0xb5, 0x07, - 0x10, 0x0a, 0x3b, 0x7b, 0xfe, 0x1e, 0xc0, 0x1d, 0x87, 0x61, 0x33, 0x3a, 0x9e, 0xce, 0xce, 0xb3, - 0xea, 0xaa, 0xa2, 0x52, 0xcd, 0x62, 0xf7, 0xbe, 0x02, 0x84, 0x20, 0x34, 0xa7, 0x03, 0xa5, 0x99, - 0x40, 0x7a, 0xcb, 0x83, 0x00, 0x42, 0x28, 0x80, 0x1c, 0x28, 0x02, 0xca, 0x38, 0x2f, 0xf1, 0xc4, - 0x3e, 0xe2, 0x80, 0x0c, 0xb0, 0x58, 0x80, 0x00, 0x78, 0xa0, 0x2a, 0xa0, 0x38, 0x87, 0x04, 0x06, - 0x2b, 0x8a, 0xff, 0x81, 0x80, 0x32, 0x14, 0xac, 0x00, 0x88, 0x85, 0xa4, 0x8a, 0x1c, 0x2d, 0xea, - 0x21, 0xc8, 0x8c, 0x09, 0x9c, 0x7f, 0xa1, 0x00, 0xce, 0x3e, 0x3e, 0xa6, 0xa5, 0x47, 0x06, 0x3f, - 0x84, 0x33, 0xf4, 0x11, 0x72, 0x0a, 0x60, 0x59, 0x06, 0x00, 0x9c, 0x71, 0x78, 0x31, 0x3a, 0x43, - 0xf7, 0x45, 0x0f, 0xce, 0x8a, 0x3c, 0x36, 0x04, 0xb8, 0x2f, 0x86, 0xdc, 0x20, 0x43, 0x47, 0x72, - 0xec, 0xef, 0x7d, 0x6b, 0x6f, 0x6e, 0xea, 0xe4, 0x80, 0xfd, 0xfe, 0xb0, 0xb9, 0x0c, 0x05, 0xb2, - 0x30, 0x68, 0xb3, 0x7b, 0xfd, 0xd9, 0x3e, 0xfa, 0xe0, 0xc0, 0x1c, 0x82, 0xc9, 0x58, 0x2c, 0xca, - 0xc1, 0x7d, 0x62, 0xf0, 0x6a, 0x9a, 0x88, 0x1b, 0x10, 0x6c, 0x2e, 0x43, 0x80, 0x36, 0xfa, 0x04, - 0xf5, 0x08, 0x0a, 0x7a, 0xbd, 0xa1, 0xd1, 0x32, 0x12, 0xc8, 0x4d, 0x0e, 0x86, 0x5e, 0xa2, 0xe2, - 0xec, 0xe0, 0xc0, 0x10, 0x04, 0x0c, 0x3c, 0x02, 0xea, 0x68, 0x39, 0x0b, 0x92, 0x8d, 0x0a, 0x65, - 0x1d, 0x1f, 0x1c, 0x9f, 0x1d, 0x07, 0xf3, 0xf8, 0x31, 0x81, 0x06, 0x08, 0x31, 0x43, 0x19, 0xa1, - 0xe7, 0xd6, 0xa3, 0xcf, 0xbd, 0x92, 0x90, 0x74, 0x2a, 0xf4, 0x1c, 0x63, 0x9f, 0xba, 0xba, 0xc2, - 0xc4, 0x38, 0x05, 0x82, 0x5e, 0xed, 0x2c, 0x5c, 0xc5, 0x65, 0xe7, 0x83, 0x21, 0x2f, 0xbd, 0x29, - 0x65, 0x85, 0xd8, 0x80, 0x24, 0x16, 0x34, 0x96, 0x5e, 0xeb, 0x5c, 0x57, 0x15, 0x8b, 0xc5, 0xfd, - 0x86, 0xd9, 0x41, 0x3a, 0x24, 0x89, 0x7a, 0xba, 0xbf, 0x8b, 0xb8, 0xbb, 0xc7, 0x6b, 0x59, 0xe1, - 0x3c, 0x21, 0x77, 0x0e, 0xab, 0x2b, 0x5a, 0xd6, 0xb5, 0x75, 0x75, 0xec, 0x2e, 0x42, 0x01, 0x41, - 0x64, 0x1a, 0xa0, 0xb3, 0xfe, 0xae, 0xa2, 0xbf, 0x78, 0x28, 0xe8, 0x5f, 0x44, 0xc3, 0x20, 0xe4, - 0x28, 0x28, 0x5c, 0x4f, 0xac, 0x96, 0x19, 0x61, 0x8b, 0x8b, 0x8b, 0x97, 0x88, 0x0f, 0x40, 0x02, - 0xa6, 0x66, 0x4b, 0x6b, 0x68, 0x0c, 0xb0, 0x98, 0x4d, 0x89, 0x00, 0xa8, 0x3e, 0xe8, 0x82, 0xce, - 0xe2, 0xf1, 0x7d, 0xf8, 0x8c, 0x22, 0x30, 0xc3, 0x68, 0x40, 0x00, 0xd1, 0x0d, 0x05, 0x7d, 0x51, - 0xb2, 0x14, 0x79, 0x5e, 0xfe, 0x88, 0x1a, 0xf8, 0x2c, 0x1f, 0x02, 0xd6, 0x2a, 0xf8, 0x42, 0x0b, - 0x1c, 0x5b, 0xc1, 0xb5, 0xc5, 0x81, 0x7f, 0x0d, 0xe0, 0x03, 0x6f, 0x68, 0x4a, 0x51, 0xd8, 0x71, - 0xea, 0xf7, 0xeb, 0x15, 0x62, 0xaf, 0x13, 0xf1, 0x4f, 0xad, 0x45, 0x02, 0xc1, 0x97, 0xd7, 0xe1, - 0x66, 0x24, 0x2e, 0x53, 0x17, 0xbf, 0xff, 0xe2, 0x21, 0x01, 0x42, 0x43, 0xcb, 0x00, 0xc4, 0xf9, - 0x66, 0xb6, 0x31, 0x00, 0xfc, 0xfe, 0x0c, 0x21, 0x18, 0x5c, 0xfc, 0xde, 0x0e, 0x8b, 0xc2, 0xe0, - 0x1a, 0x01, 0x2a, 0x62, 0x18, 0x44, 0x03, 0x0f, 0xc0, 0x70, 0x01, 0x80, 0x29, 0x06, 0x40, 0x01, - 0x2b, 0x80, 0xd0, 0xa4, 0x02, 0x58, 0x8b, 0xe6, 0xa5, 0x21, 0x2d, 0x94, 0x92, 0x96, 0x0f, 0x12, - 0xf5, 0x01, 0xc0, 0x46, 0x81, 0xc2, 0x6c, 0xa0, 0x17, 0x2a, 0x98, 0x15, 0x47, 0xba, 0xdf, 0x7e, - 0xb5, 0xc3, 0xcc, 0x40, 0x00, 0x7b, 0xa3, 0x32, 0x00, 0x3e, 0x23, 0x06, 0x2e, 0x84, 0xb7, 0x08, - 0x9d, 0x11, 0xeb, 0x83, 0xd7, 0x3b, 0xce, 0xf2, 0x43, 0x44, 0x78, 0x8b, 0x97, 0xbb, 0x9f, 0xe2, - 0xf9, 0xa5, 0xed, 0xaf, 0xe1, 0xe7, 0x00, 0x18, 0xa9, 0x81, 0x96, 0x25, 0x52, 0x3c, 0x84, 0x3c, - 0x43, 0xcb, 0x65, 0xb2, 0xcd, 0xc5, 0xc5, 0x62, 0xb7, 0x3d, 0xf6, 0xa2, 0xb5, 0x15, 0x86, 0xb2, - 0x8c, 0xdb, 0x7c, 0x5e, 0x97, 0xc2, 0xf1, 0x20, 0x80, 0x05, 0x07, 0x56, 0xc9, 0xef, 0xee, 0xee, - 0xe7, 0x85, 0xee, 0x40, 0xf8, 0x46, 0x34, 0x41, 0xf9, 0x66, 0xff, 0xc7, 0x15, 0xcf, 0x79, 0x79, - 0x63, 0x1e, 0xf9, 0xe3, 0xe3, 0xa3, 0xf0, 0x67, 0x6c, 0xfe, 0x66, 0x3c, 0x18, 0x44, 0x08, 0x0b, - 0x9c, 0x4f, 0x83, 0xb4, 0x01, 0x28, 0xd8, 0xdc, 0x4a, 0x47, 0xfd, 0xc7, 0x9f, 0x02, 0x40, 0x00, - 0x88, 0x46, 0x24, 0x01, 0xf1, 0x40, 0x1f, 0xc2, 0xee, 0x1f, 0xbe, 0x11, 0x43, 0x85, 0xee, 0x51, - 0x68, 0xbe, 0xb9, 0x77, 0xbe, 0xb0, 0x9b, 0x80, 0x0d, 0x2f, 0x41, 0x8f, 0x77, 0x08, 0x3d, 0x5e, - 0x96, 0x11, 0x5f, 0x5b, 0x88, 0x06, 0x0e, 0x58, 0x39, 0xae, 0x1b, 0x64, 0x00, 0x70, 0x56, 0xe0, - 0x81, 0xf5, 0xd7, 0xa7, 0x5e, 0x3b, 0x35, 0x6b, 0xf8, 0x6d, 0xc0, 0x15, 0x18, 0xe6, 0x15, 0x67, - 0x64, 0x89, 0xd1, 0x55, 0x95, 0x90, 0x3f, 0x86, 0x14, 0x18, 0x62, 0x62, 0xf1, 0x7f, 0x85, 0xc8, - 0x70, 0x81, 0x31, 0x3e, 0x28, 0xa8, 0xbe, 0x58, 0x3b, 0x61, 0x55, 0xdf, 0x0d, 0xb1, 0x00, 0x18, - 0x35, 0xe9, 0x6d, 0xf7, 0xbf, 0x7b, 0xf7, 0x71, 0xba, 0x58, 0x3a, 0x08, 0x87, 0x68, 0x7f, 0xa1, - 0x6f, 0x05, 0xfc, 0x2e, 0x48, 0x39, 0x1f, 0x83, 0xcf, 0xc1, 0xa4, 0xe9, 0x1c, 0x9f, 0x10, 0x00, - 0x09, 0x86, 0xb1, 0x40, 0x1c, 0x50, 0x07, 0xf0, 0xbb, 0x90, 0x02, 0xc0, 0xe6, 0x5a, 0x2a, 0x2a, - 0xd7, 0x45, 0x45, 0x5a, 0x8f, 0xb0, 0x9b, 0x20, 0x03, 0x0c, 0x65, 0xf4, 0x4e, 0x69, 0xe7, 0x64, - 0xe0, 0xed, 0x04, 0x5e, 0x2b, 0x1d, 0x28, 0x05, 0x86, 0xe0, 0xe8, 0x50, 0xf8, 0x6d, 0xc0, 0x0a, - 0xbc, 0xb1, 0x39, 0x85, 0x8f, 0x2e, 0xa4, 0xe9, 0xea, 0xe6, 0xe7, 0xee, 0xe6, 0xf5, 0xbb, 0xd6, - 0x31, 0x77, 0x24, 0x53, 0xf8, 0x6d, 0xc0, 0x19, 0xc3, 0xc1, 0x28, 0xa9, 0xfb, 0x49, 0x92, 0x34, - 0xfb, 0xbb, 0x65, 0x8b, 0x6d, 0x8d, 0x77, 0x77, 0x23, 0x6c, 0x64, 0x8d, 0x1f, 0xc2, 0xe4, 0x28, - 0x02, 0xdc, 0x2e, 0xb8, 0x88, 0xb2, 0xb5, 0x24, 0x15, 0x90, 0xeb, 0x17, 0x2f, 0x89, 0xc2, 0xf8, - 0x6d, 0x98, 0x01, 0x24, 0x76, 0x5d, 0x19, 0x65, 0x65, 0xae, 0xca, 0xc9, 0x6a, 0xa5, 0x4f, 0x2c, - 0x3f, 0xd0, 0x9e, 0x93, 0xa2, 0xc5, 0x04, 0x7c, 0xdd, 0x24, 0x84, 0x70, 0xb9, 0xa1, 0x73, 0x5a, - 0x9e, 0x59, 0x81, 0xd1, 0x2d, 0x25, 0x42, 0xf4, 0x10, 0x00, 0x46, 0xb1, 0x40, 0x1c, 0x50, 0x07, - 0xf0, 0xbb, 0x88, 0x52, 0xc0, 0x1c, 0x9b, 0xff, 0xfd, 0x77, 0xc2, 0x6c, 0xc0, 0x1d, 0x4e, 0xc3, - 0x41, 0x2d, 0x43, 0x8f, 0x7f, 0xa5, 0xb3, 0xb0, 0x14, 0x19, 0xd8, 0x78, 0x5c, 0x07, 0x07, 0x60, - 0x38, 0x8e, 0x07, 0x60, 0xfb, 0x78, 0x6d, 0xc0, 0x04, 0xef, 0x8c, 0x46, 0x7e, 0x27, 0x43, 0xcc, - 0x24, 0x7b, 0x20, 0x28, 0xd9, 0x0e, 0x9a, 0x60, 0xeb, 0x82, 0x8c, 0x16, 0x93, 0x21, 0x1a, 0x7c, - 0x09, 0x5d, 0x23, 0xf0, 0xa3, 0x73, 0xf8, 0x6d, 0xc0, 0x14, 0xcc, 0x11, 0x02, 0xcd, 0x66, 0x5d, - 0x34, 0xd7, 0xa6, 0x5f, 0x7d, 0xe0, 0xbb, 0xb7, 0x34, 0x2f, 0xe1, 0x36, 0x50, 0x13, 0x00, 0x55, - 0x70, 0xd3, 0xb3, 0xd9, 0x41, 0xd7, 0x0d, 0x6a, 0x78, 0x30, 0x44, 0x70, 0x0b, 0x0c, 0x84, 0x36, - 0x48, 0x02, 0x6e, 0x0d, 0x6b, 0x10, 0x5f, 0x8b, 0x0b, 0x2c, 0x2c, 0x8c, 0x6c, 0x62, 0x73, 0x0b, - 0x39, 0x85, 0x9d, 0x62, 0x71, 0x61, 0x31, 0x00, 0xcd, 0x3c, 0x19, 0x03, 0xc3, 0xff, 0x45, 0x02, - 0x13, 0xa0, 0x9f, 0xaf, 0x44, 0x42, 0x22, 0x06, 0xf7, 0x73, 0x73, 0xc2, 0xcb, 0xb9, 0xe1, 0x64, - 0x43, 0xcf, 0x79, 0x7b, 0xfc, 0x8e, 0x93, 0x31, 0x0e, 0xa6, 0x40, 0xa0, 0x16, 0x5c, 0x50, 0x1b, - 0x21, 0x41, 0xfc, 0x26, 0xc8, 0x00, 0x17, 0x31, 0x4b, 0x5c, 0xe4, 0xd1, 0x7e, 0xd7, 0xde, 0x1c, - 0x05, 0x71, 0xf7, 0x86, 0xec, 0x1a, 0x6a, 0x50, 0x00, 0x26, 0xb3, 0x01, 0x40, 0x03, 0xe0, 0x69, - 0x03, 0x47, 0x0d, 0x0f, 0x18, 0x29, 0x47, 0xbe, 0x4b, 0x0b, 0xfc, 0xb0, 0x62, 0x05, 0x92, 0xc0, - 0x67, 0x00, 0xb2, 0xf7, 0x9c, 0x0f, 0x2e, 0xce, 0x00, 0x79, 0x60, 0x0c, 0xa0, 0x0e, 0xa1, 0x60, - 0x0c, 0x70, 0x16, 0xfe, 0xd6, 0x27, 0x0f, 0x87, 0x59, 0xc0, 0x4e, 0x01, 0xb3, 0x83, 0x27, 0x83, - 0x5c, 0x13, 0x8d, 0xc9, 0x7c, 0x23, 0x7b, 0xe3, 0x4c, 0xef, 0x6f, 0x2f, 0x4d, 0xbe, 0x30, 0xd3, - 0x14, 0x8c, 0xaa, 0x77, 0x31, 0xa3, 0x86, 0xb2, 0xbf, 0xc0, 0x2b, 0x00, 0x3a, 0x06, 0xc4, 0x00, - 0x79, 0x60, 0x62, 0x03, 0xcf, 0x3c, 0x52, 0xc1, 0xd7, 0xc7, 0xfc, 0xf7, 0x94, 0xa5, 0x6e, 0x8f, - 0xf9, 0xef, 0x39, 0xe3, 0xaf, 0x9c, 0x3d, 0xfc, 0x0b, 0x00, 0x03, 0x20, 0x0e, 0x08, 0x00, 0xdc, - 0x1a, 0x8e, 0xe4, 0xaa, 0x3b, 0x9f, 0x09, 0xb8, 0x02, 0x9d, 0x86, 0xdc, 0x60, 0x29, 0xbd, 0x79, - 0x60, 0x49, 0xb8, 0x0d, 0xf7, 0x0e, 0x0c, 0x3c, 0xfb, 0xce, 0x03, 0x01, 0x25, 0xe5, 0x81, 0xe2, - 0x23, 0x63, 0xa0, 0x7e, 0xb1, 0xd0, 0xf9, 0xfe, 0x3f, 0xe7, 0xbc, 0xbb, 0x2d, 0x8e, 0x23, 0xe5, - 0x86, 0x38, 0x37, 0x93, 0x06, 0x8b, 0x8a, 0x0c, 0x00, 0x05, 0x00, 0x3c, 0x68, 0x18, 0x93, 0x02, - 0xc0, 0x49, 0x84, 0x2f, 0xc4, 0x43, 0x27, 0x3f, 0x5a, 0xe0, 0x62, 0x0c, 0x0a, 0x30, 0xc4, 0x3d, - 0xcb, 0x6f, 0xe0, 0xbb, 0x98, 0x91, 0x5c, 0x40, 0xfc, 0x0d, 0x22, 0x06, 0xc1, 0xf7, 0x2d, 0x83, - 0xee, 0xfe, 0x25, 0xe4, 0xe0, 0x01, 0xa6, 0x4e, 0x00, 0x69, 0x19, 0x6e, 0xa7, 0x94, 0x44, 0xa2, - 0xb5, 0x4a, 0x0b, 0x24, 0xb6, 0x14, 0x1c, 0x4e, 0x61, 0xf0, 0xbb, 0x30, 0x0c, 0x42, 0x60, 0x90, - 0xa1, 0x45, 0x57, 0xbb, 0x5d, 0x63, 0xbc, 0x5c, 0x38, 0xe5, 0xa6, 0xba, 0x87, 0x41, 0x58, 0x58, - 0x82, 0x81, 0x30, 0x0d, 0xc1, 0xc4, 0x02, 0x81, 0x6e, 0x05, 0x80, 0x72, 0x36, 0x39, 0x00, 0xb8, - 0xf2, 0xe3, 0x90, 0x2e, 0xcf, 0x9b, 0xd4, 0xa1, 0x2a, 0x67, 0x16, 0x5c, 0xdd, 0x9c, 0x75, 0x72, - 0xec, 0x42, 0x79, 0x89, 0x30, 0x89, 0x0c, 0x3f, 0x03, 0xc0, 0x20, 0x0a, 0x09, 0x1e, 0xbe, 0x77, - 0xd5, 0x54, 0x50, 0xe7, 0x4e, 0x20, 0xe0, 0xae, 0x21, 0xc0, 0x00, 0x40, 0x7e, 0x39, 0xe0, 0x22, - 0x63, 0x63, 0xcb, 0x9e, 0x1e, 0x3d, 0x77, 0x71, 0xeb, 0xbb, 0x8f, 0xbb, 0xb8, 0xfb, 0x9e, 0xfc, - 0x57, 0x63, 0xb7, 0x14, 0x63, 0xab, 0x83, 0x80, 0x01, 0x30, 0x05, 0x8e, 0x72, 0xa8, 0x77, 0x25, - 0x51, 0xdc, 0xf8, 0x5d, 0x10, 0x01, 0x89, 0x19, 0x25, 0xec, 0x38, 0x3d, 0xeb, 0x34, 0x19, 0x78, - 0x9c, 0x07, 0x5c, 0x04, 0xe0, 0x3a, 0x70, 0x6e, 0x05, 0x80, 0x14, 0x03, 0x60, 0xe0, 0x2f, 0xca, - 0xc5, 0x41, 0xc0, 0x7f, 0x1e, 0xbc, 0x43, 0x4a, 0x58, 0xdb, 0x83, 0x80, 0xce, 0x59, 0x65, 0x41, - 0x4a, 0x14, 0xf4, 0x14, 0x65, 0x83, 0x2d, 0x8a, 0x03, 0x06, 0x00, 0x08, 0x07, 0x01, 0x26, 0x28, - 0x71, 0x43, 0xfc, 0x34, 0x48, 0x07, 0x19, 0xae, 0x3e, 0x8b, 0xd6, 0xf7, 0x79, 0xfa, 0xdd, 0xb9, - 0xae, 0x20, 0x40, 0x2d, 0x2a, 0xa6, 0xa9, 0x8a, 0x0c, 0x56, 0x28, 0x03, 0x14, 0x62, 0x27, 0x41, - 0x68, 0x61, 0x40, 0x4c, 0x99, 0x3d, 0xfe, 0xe9, 0x7a, 0xda, 0xfa, 0x9f, 0x9b, 0xbf, 0xdd, 0x44, - 0xbd, 0xf8, 0x29, 0x8d, 0xa8, 0xa6, 0xa4, 0xc8, 0xb2, 0x09, 0x49, 0xe1, 0xe2, 0x3f, 0x1e, 0x5f, - 0x4c, 0xb8, 0x1e, 0x43, 0x50, 0x7e, 0x85, 0x39, 0x7d, 0x17, 0xc3, 0x6c, 0xc0, 0x15, 0xb7, 0x88, - 0x31, 0xbb, 0xa7, 0x3f, 0xdd, 0x9f, 0x7f, 0x24, 0xdc, 0x1f, 0xc1, 0x26, 0xe7, 0x65, 0x81, 0x69, - 0x12, 0x6e, 0x0e, 0xa8, 0x28, 0xb8, 0x7b, 0xbf, 0xe1, 0xb7, 0x00, 0xc2, 0x2a, 0x3e, 0x19, 0x49, - 0xde, 0xfb, 0xc9, 0x09, 0x21, 0x6f, 0x79, 0x20, 0xb0, 0x97, 0xbf, 0xc3, 0xca, 0x00, 0x29, 0x23, - 0xc1, 0xe4, 0x82, 0xa5, 0x85, 0x77, 0xde, 0x7f, 0xdc, 0x6f, 0x0f, 0xef, 0xef, 0xe7, 0xbd, 0xfe, - 0x1d, 0x24, 0x00, 0x55, 0x87, 0x25, 0x31, 0x60, 0x57, 0x50, 0xab, 0x57, 0x2d, 0xc5, 0x6d, 0x9b, - 0x96, 0xb1, 0xdb, 0xc5, 0x64, 0x85, 0x8d, 0x10, 0x56, 0x92, 0x9a, 0x1f, 0x09, 0x90, 0xa0, 0x0a, - 0x30, 0x53, 0x75, 0x0b, 0xdf, 0x15, 0x9e, 0x05, 0x8d, 0x6b, 0x3c, 0x0e, 0x01, 0x83, 0x23, 0x80, - 0x61, 0x0d, 0xb8, 0x52, 0xd1, 0x3c, 0x3a, 0x99, 0xe1, 0x83, 0xd5, 0xd4, 0xb0, 0x0c, 0xf0, 0x2c, - 0x03, 0x3d, 0x86, 0xb5, 0x03, 0x4c, 0x72, 0x8a, 0x8b, 0xf0, 0xc2, 0x38, 0x03, 0x8a, 0xed, 0x65, - 0xc0, 0x8a, 0xfe, 0xb5, 0x15, 0xd9, 0x6d, 0xba, 0x9f, 0xca, 0xee, 0x8e, 0xe1, 0x85, 0x00, 0x75, - 0x3f, 0xd2, 0x77, 0x3f, 0xfd, 0xb3, 0x73, 0xf3, 0xfe, 0xa0, 0xb4, 0x38, 0x48, 0x01, 0x8f, 0x0d, - 0x33, 0x6c, 0xbf, 0x9d, 0xa6, 0x4e, 0x48, 0x16, 0xe1, 0x6b, 0x8a, 0xd3, 0xa6, 0x0a, 0x77, 0x6c, - 0xb1, 0xf8, 0x79, 0x40, 0x31, 0x1c, 0x52, 0xae, 0x21, 0xff, 0xe6, 0x6e, 0xf2, 0xff, 0x09, 0xd0, - 0x84, 0xc9, 0x13, 0x24, 0x47, 0x7d, 0x9d, 0xf6, 0x5d, 0xbf, 0xf0, 0xdb, 0x14, 0x00, 0x4a, 0xbc, - 0x39, 0x3c, 0x11, 0xf2, 0xf3, 0xdb, 0xbc, 0xea, 0xef, 0x15, 0xb2, 0x51, 0x5a, 0x8a, 0x30, 0x20, - 0x4d, 0x3c, 0x22, 0x58, 0x5e, 0xfc, 0x05, 0x00, 0x18, 0x06, 0xc4, 0x80, 0x01, 0x1c, 0x0b, 0x80, - 0x2a, 0x4e, 0x02, 0xa7, 0xb8, 0x3a, 0xb9, 0x29, 0xa1, 0xfe, 0x4a, 0x1a, 0x3f, 0x5d, 0x85, 0x51, - 0x29, 0xe0, 0x1c, 0x2c, 0xcf, 0x3c, 0xb0, 0xcb, 0xc6, 0x45, 0x89, 0xff, 0xe1, 0xb2, 0x40, 0x08, - 0xdd, 0x70, 0x28, 0x7d, 0xe8, 0x14, 0x77, 0x6f, 0xb9, 0x45, 0xf3, 0xea, 0x7b, 0xcb, 0xd3, 0x14, - 0x71, 0x41, 0xe2, 0xf1, 0x73, 0x80, 0xe6, 0xdb, 0xd3, 0xf8, 0x5f, 0x01, 0xf8, 0x29, 0x9a, 0xce, - 0xd6, 0x4e, 0xb3, 0x35, 0xaa, 0xaa, 0xec, 0xa2, 0x81, 0x86, 0xd9, 0x40, 0x14, 0xac, 0xc8, 0x06, - 0xa6, 0x3c, 0xba, 0xbd, 0xe2, 0xb5, 0x15, 0xc5, 0x6c, 0x84, 0x30, 0x34, 0x0e, 0x60, 0xfa, 0xd7, - 0xe1, 0xc7, 0x00, 0x8c, 0x29, 0x0c, 0x46, 0x8e, 0xe1, 0x7c, 0x5f, 0x56, 0xdb, 0x97, 0x74, 0x2c, - 0xde, 0xb7, 0x7a, 0xc1, 0x60, 0x02, 0x23, 0x38, 0x8d, 0x5d, 0x3f, 0xc0, 0x54, 0x01, 0x84, 0x6c, - 0x75, 0xfc, 0x75, 0xfc, 0xac, 0xc2, 0xad, 0x37, 0x52, 0xfb, 0xfb, 0x19, 0x6b, 0x03, 0x40, 0x61, - 0x68, 0x87, 0xb8, 0x81, 0xef, 0x87, 0xc3, 0x44, 0x28, 0x01, 0x51, 0xf6, 0x9e, 0x41, 0x35, 0x6c, - 0xba, 0xee, 0x5f, 0x5e, 0xab, 0x5a, 0x82, 0x9b, 0xe2, 0x62, 0x5f, 0xb8, 0x81, 0xc2, 0xe1, 0xe3, - 0x96, 0x14, 0x80, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x5e, 0x2f, 0x30, 0xe8, 0x12, 0x74, 0x36, - 0xa0, 0x5f, 0xeb, 0x53, 0x74, 0x5c, 0xaf, 0xaf, 0x5f, 0x5e, 0x87, 0x3a, 0x23, 0x41, 0xb7, 0x57, - 0x8b, 0xeb, 0xd2, 0xf5, 0xa8, 0xae, 0xad, 0x11, 0xd1, 0xde, 0x0a, 0xf8, 0x24, 0x23, 0xbf, 0x05, - 0xf5, 0xea, 0xea, 0xf5, 0xd5, 0xa1, 0x7e, 0xb5, 0x0a, 0x75, 0xef, 0x82, 0x2b, 0xbe, 0xd1, 0x1d, - 0x5c, 0x97, 0xab, 0x41, 0x3f, 0x5e, 0xfa, 0xf4, 0xbc, 0x12, 0x57, 0x63, 0x62, 0x5e, 0xad, 0xf5, - 0xef, 0xa2, 0xb4, 0xbd, 0x19, 0xab, 0xab, 0x7d, 0x5a, 0x4e, 0x8a, 0xd0, 0x47, 0xd1, 0x12, 0xa0, - 0xd7, 0x56, 0x88, 0xea, 0xf2, 0x62, 0x05, 0xd5, 0x75, 0x5c, 0x48, 0x61, 0x4d, 0x7f, 0xfe, 0xc2, - 0x61, 0x52, 0xcc, 0x61, 0xc5, 0x3c, 0x7f, 0xf6, 0x9a, 0xda, 0x69, 0xce, 0xdb, 0x7f, 0x1d, 0x8c, - 0x31, 0x3a, 0x7c, 0x5d, 0x55, 0x57, 0x55, 0x2f, 0x5a, 0x93, 0xaf, 0x42, 0x3d, 0x6d, 0x2f, 0x45, - 0xef, 0xaf, 0x49, 0xd5, 0xfe, 0x8c, 0x90, 0x46, 0x8c, 0xf9, 0x63, 0x17, 0x16, 0x23, 0xc4, 0x2e, - 0x21, 0x71, 0x84, 0x2a, 0xeb, 0x80, 0x60, 0x20, 0x8e, 0xf7, 0x8f, 0xb1, 0x8a, 0x19, 0x7a, 0xb1, - 0x8b, 0xef, 0xad, 0x45, 0x75, 0xaa, 0xeb, 0x51, 0xbd, 0x5a, 0x6c, 0x4f, 0xc9, 0x5a, 0xcd, 0xd6, - 0xbe, 0xc9, 0xbb, 0xfa, 0xc5, 0x27, 0x45, 0xae, 0x02, 0x06, 0xb5, 0xc0, 0xe2, 0x11, 0x54, 0x7e, - 0x38, 0x90, 0xbd, 0x90, 0xb7, 0x18, 0xc5, 0x25, 0x3f, 0x8c, 0x5f, 0xf1, 0x8b, 0x1c, 0x7f, 0x84, - 0x14, 0x73, 0x1d, 0xc6, 0x29, 0x08, 0x8e, 0xdc, 0x04, 0x06, 0x12, 0xeb, 0x50, 0x8f, 0x51, 0xf5, - 0xf2, 0x11, 0x5f, 0x7d, 0x53, 0xb2, 0xf0, 0x44, 0x57, 0x77, 0x71, 0xdb, 0x80, 0xa9, 0x12, 0xa3, - 0xb6, 0x30, 0x91, 0xf6, 0x25, 0xb1, 0xca, 0xb1, 0x63, 0x15, 0x2e, 0xc7, 0x2f, 0xb1, 0xc4, 0xa6, - 0x54, 0xce, 0xca, 0x0e, 0xac, 0x88, 0x7e, 0x18, 0xa1, 0x06, 0xa1, 0x6e, 0x8a, 0xd1, 0xbc, 0x13, - 0x5f, 0x55, 0x55, 0x5e, 0xae, 0x8b, 0x14, 0xbd, 0x13, 0xbe, 0xb9, 0x57, 0xa8, 0x0c, 0x10, 0x82, - 0xf6, 0x30, 0x9a, 0x65, 0x10, 0xb8, 0xc5, 0xeb, 0x18, 0x49, 0x88, 0x27, 0xb1, 0x44, 0x28, 0x51, - 0x65, 0x08, 0xa1, 0xb3, 0xa5, 0xb6, 0xff, 0xc3, 0x14, 0x14, 0xab, 0xe8, 0xa9, 0x97, 0x82, 0x3b, - 0xee, 0xd1, 0xfd, 0x5e, 0xfa, 0xf7, 0xc8, 0x6b, 0xdc, 0x47, 0x2d, 0x57, 0x37, 0x47, 0xca, 0x4e, - 0xb2, 0xbc, 0x33, 0xc0, 0xf0, 0x11, 0xbe, 0x8a, 0x3b, 0x63, 0x16, 0x95, 0x46, 0x2c, 0x76, 0xe0, - 0x15, 0x9a, 0x12, 0x34, 0x6c, 0x20, 0x87, 0x0f, 0xb2, 0x10, 0x9a, 0x74, 0xd3, 0xf8, 0xd2, 0x69, - 0x93, 0x3b, 0x8e, 0x2c, 0x36, 0xc8, 0x00, 0x8d, 0x78, 0x98, 0x50, 0xb7, 0xff, 0xe9, 0xa6, 0x29, - 0x8b, 0xbf, 0xb6, 0xdc, 0x39, 0x30, 0x00, 0x88, 0x8a, 0x7b, 0xa2, 0xa7, 0xeb, 0xfe, 0x9e, 0x9c, - 0x1f, 0xf2, 0xf2, 0xa3, 0x2d, 0x34, 0xf6, 0xdb, 0x86, 0x58, 0xb0, 0x10, 0xfd, 0xa7, 0xe7, 0xfe, - 0x2d, 0x8b, 0x7e, 0x8e, 0xfc, 0x11, 0xdd, 0xdd, 0xda, 0x27, 0xa2, 0xbc, 0xfd, 0x08, 0x82, 0xfa, - 0x12, 0xe4, 0x6e, 0x25, 0x76, 0x89, 0x1e, 0xcb, 0x4b, 0xe9, 0xfa, 0x1f, 0xca, 0x9d, 0x34, 0xfe, - 0x3f, 0x80, 0xa8, 0xe6, 0x9a, 0x69, 0xa7, 0xf1, 0xe4, 0x34, 0x18, 0x87, 0x55, 0x6b, 0xeb, 0xa2, - 0xb5, 0x86, 0xd8, 0xc0, 0x05, 0x6f, 0xb2, 0x18, 0x4f, 0x5f, 0xeb, 0x53, 0x72, 0xc4, 0x6f, 0xde, - 0xf0, 0xd1, 0x0c, 0x00, 0x9e, 0x46, 0x82, 0x30, 0x07, 0xad, 0x7d, 0x3a, 0x7f, 0xe3, 0x8c, 0x70, - 0x38, 0x71, 0x40, 0x04, 0xdb, 0x0b, 0x36, 0x5e, 0x10, 0xa0, 0x35, 0xae, 0xff, 0x55, 0x52, 0x74, - 0xc5, 0xb6, 0x71, 0xf7, 0x5f, 0xe9, 0xc3, 0x88, 0xc0, 0x06, 0xe3, 0xb0, 0x28, 0x29, 0xd0, 0x38, - 0xff, 0x48, 0xbd, 0xbe, 0x9e, 0x2d, 0x8b, 0x7c, 0x5b, 0xa6, 0x0f, 0xb9, 0x43, 0x2b, 0xfd, 0xb6, - 0xf8, 0x73, 0x00, 0x07, 0x8c, 0x82, 0x1b, 0x91, 0x65, 0xe9, 0xde, 0x58, 0x24, 0xc7, 0xeb, 0x60, - 0x86, 0x4b, 0x0c, 0xcf, 0x46, 0xdb, 0x2c, 0x58, 0xa2, 0xc8, 0xd6, 0x09, 0xc1, 0xc8, 0xf1, 0xd5, - 0x71, 0x0f, 0xe5, 0xac, 0x83, 0x04, 0xbb, 0x0d, 0x26, 0x25, 0xd9, 0xd4, 0xf4, 0xdb, 0xfe, 0x08, - 0xc2, 0x2f, 0x22, 0xc3, 0x53, 0x9c, 0xa8, 0x26, 0x3a, 0xfd, 0x09, 0xec, 0x7a, 0xca, 0x94, 0xd3, - 0x4d, 0x3f, 0x8b, 0x21, 0x88, 0x44, 0x10, 0xd8, 0x7b, 0x2c, 0x7f, 0xff, 0x4f, 0x47, 0xf4, 0xff, - 0x0d, 0x92, 0x0a, 0xf9, 0x6f, 0xfd, 0x3e, 0x9c, 0x4b, 0x4f, 0x4f, 0xe1, 0x22, 0x14, 0x11, 0xa9, - 0xa7, 0x01, 0xa6, 0xac, 0xfc, 0xfd, 0xff, 0xf0, 0x20, 0x41, 0x1e, 0xaa, 0xb9, 0x1b, 0xf8, 0x22, - 0xee, 0xec, 0xac, 0x10, 0xf8, 0x29, 0x04, 0xe4, 0x72, 0xc7, 0x77, 0x77, 0x7e, 0xc3, 0x44, 0x18, - 0x00, 0x71, 0xbb, 0x38, 0x43, 0x9e, 0xde, 0xdf, 0xf9, 0x66, 0xc3, 0x44, 0x20, 0x01, 0xd1, 0x8b, - 0x12, 0x98, 0x14, 0x9e, 0xa7, 0xe9, 0xd3, 0xf3, 0x77, 0x79, 0xb9, 0xa5, 0xc3, 0x6a, 0x00, 0x37, - 0x88, 0x8b, 0x40, 0x42, 0x24, 0x00, 0xf3, 0xf5, 0x60, 0x69, 0x5c, 0x53, 0x71, 0xc7, 0xe3, 0xfe, - 0x3f, 0xe5, 0xf6, 0x76, 0x09, 0x94, 0x10, 0x90, 0x57, 0x6e, 0xee, 0x2e, 0x87, 0x83, 0xfa, 0x69, - 0xf0, 0xe2, 0x28, 0x03, 0x6f, 0x2b, 0x36, 0x0b, 0xe3, 0xd5, 0xab, 0xad, 0x34, 0xfa, 0xf7, 0xa2, - 0x71, 0xa7, 0xd3, 0x4f, 0xc8, 0xdd, 0xb6, 0xfd, 0x34, 0xe1, 0xe6, 0x28, 0x01, 0xd6, 0x24, 0x13, - 0x44, 0xff, 0xde, 0x13, 0xc2, 0xfe, 0x0d, 0x60, 0x4e, 0x62, 0x3d, 0x6b, 0x94, 0x86, 0xb5, 0xb6, - 0x52, 0xfa, 0x1c, 0x9c, 0x1c, 0x0d, 0xe0, 0xf7, 0xd9, 0x7b, 0xfe, 0x35, 0x00, 0x48, 0x57, 0xdb, - 0x7e, 0x03, 0xc4, 0x02, 0x40, 0x18, 0x12, 0x07, 0x38, 0x6a, 0xdc, 0x3c, 0x00, 0x0b, 0xf2, 0x50, - 0x05, 0x76, 0xe4, 0x42, 0x68, 0x0e, 0xcb, 0x16, 0xc5, 0xbf, 0x04, 0xf0, 0x43, 0x05, 0x15, 0xae, - 0xd5, 0x5f, 0x80, 0xa1, 0x12, 0x8a, 0x0a, 0x46, 0x1d, 0x45, 0x01, 0xc9, 0x97, 0x2d, 0xff, 0x8b, - 0x69, 0xe2, 0xda, 0x62, 0x13, 0x57, 0x4c, 0x9b, 0xb6, 0xdc, 0x3b, 0x38, 0x0f, 0x69, 0xcb, 0xff, - 0xe9, 0xa7, 0xa6, 0x98, 0xae, 0x57, 0xb6, 0xdf, 0xc4, 0xb3, 0x86, 0x53, 0xfd, 0xc6, 0x28, 0x3a, - 0xf1, 0x1d, 0x97, 0x82, 0x21, 0xc1, 0x60, 0x54, 0x3b, 0x00, 0x6b, 0xda, 0x09, 0xe1, 0xe8, 0xa0, - 0x00, 0xb3, 0x23, 0x1c, 0xbd, 0x81, 0x74, 0x3b, 0xff, 0xdd, 0xb6, 0xfc, 0xbe, 0xdd, 0xc5, 0x58, - 0x3b, 0x77, 0xce, 0xaf, 0x6d, 0x3d, 0x38, 0x6d, 0xc0, 0x1d, 0xc3, 0x0a, 0x8b, 0xc7, 0xf0, 0xd5, - 0x02, 0x05, 0x7c, 0xd8, 0xbb, 0xb7, 0x35, 0xb7, 0x94, 0x7c, 0x23, 0x3e, 0x14, 0x07, 0xfa, 0x6c, - 0x33, 0x68, 0xfc, 0x60, 0xa3, 0x3e, 0x9a, 0xd7, 0x0d, 0x33, 0x80, 0x10, 0xf3, 0xeb, 0x11, 0x4f, - 0xfb, 0xcf, 0xff, 0x5c, 0x0f, 0x33, 0xe1, 0x5c, 0x60, 0xe1, 0xb2, 0x18, 0x00, 0x9f, 0x86, 0xaf, - 0x39, 0x10, 0x5e, 0x79, 0x8c, 0xf7, 0x3f, 0x5f, 0x06, 0xaf, 0x07, 0xf9, 0xec, 0x4f, 0xf5, 0xbb, - 0xd3, 0x7d, 0xed, 0xe1, 0xa4, 0x50, 0x02, 0x7b, 0x5e, 0x48, 0x41, 0x4b, 0xbe, 0x9a, 0x7f, 0xfa, - 0x30, 0x84, 0x3d, 0x28, 0x00, 0xc0, 0x72, 0xc7, 0xf6, 0x1d, 0x87, 0xff, 0x27, 0x7f, 0xed, 0xb7, - 0xe6, 0x41, 0xf7, 0xf3, 0x7d, 0x41, 0x34, 0x33, 0x0a, 0x71, 0x58, 0xad, 0x44, 0x9f, 0x57, 0x77, - 0xbb, 0x76, 0xf3, 0xe1, 0xc5, 0x00, 0xd7, 0x51, 0x2a, 0x34, 0xd3, 0xd3, 0x4f, 0xfe, 0xf1, 0x56, - 0xdf, 0xf8, 0x14, 0x21, 0x49, 0x3c, 0x45, 0x32, 0x96, 0xd1, 0x1b, 0x26, 0xec, 0xe5, 0xb0, 0x79, - 0x7e, 0x27, 0xe0, 0xe9, 0x71, 0xa5, 0x0e, 0xe1, 0xc5, 0x07, 0xe4, 0x0a, 0x75, 0xf4, 0xd3, 0xb7, - 0xfb, 0x6d, 0x8c, 0x28, 0x6a, 0x8d, 0xcf, 0x75, 0xba, 0xd3, 0xf0, 0xe2, 0x20, 0x06, 0xd4, 0xc5, - 0x31, 0xd3, 0xd3, 0x4f, 0xfc, 0x6a, 0x9f, 0x4d, 0x3e, 0x1a, 0x24, 0x11, 0xdb, 0xad, 0xff, 0xfe, - 0xde, 0x46, 0x9f, 0x88, 0x35, 0xda, 0x1e, 0xe0, 0x8c, 0x01, 0x90, 0x05, 0xd8, 0x09, 0x06, 0x68, - 0x00, 0x04, 0x07, 0x43, 0x32, 0x62, 0xc3, 0x47, 0x99, 0x0f, 0x28, 0x1d, 0x9a, 0x44, 0x1b, 0x61, - 0x4b, 0x5d, 0xff, 0xbc, 0x7d, 0x8b, 0x73, 0xa0, 0x1a, 0x46, 0x9f, 0x06, 0xa1, 0x94, 0x6f, 0xb4, - 0xd3, 0x2c, 0xb6, 0x71, 0x4b, 0x2c, 0xb3, 0x77, 0x50, 0xb2, 0xcb, 0xb1, 0xaa, 0xdf, 0x6d, 0xbe, - 0x1c, 0x21, 0x40, 0x0d, 0xb3, 0x00, 0x14, 0xb6, 0x17, 0x80, 0x6b, 0x8d, 0x5d, 0xd3, 0x8d, 0x34, - 0xd3, 0xcd, 0xdb, 0x4d, 0x3c, 0x12, 0xc1, 0xb7, 0xea, 0x9e, 0x1a, 0x65, 0x00, 0x6e, 0x45, 0xc6, - 0x60, 0xba, 0xd5, 0xe9, 0xa6, 0x9a, 0x7a, 0xaa, 0x69, 0x93, 0xb3, 0x8f, 0x8c, 0x70, 0xee, 0x00, - 0x26, 0xde, 0x88, 0x0c, 0x78, 0xe5, 0x6b, 0xcb, 0xe4, 0xe4, 0xec, 0xfe, 0x29, 0xe2, 0x9c, 0x25, - 0x00, 0x43, 0x8a, 0xf0, 0x5c, 0x89, 0x14, 0xe3, 0x0f, 0x04, 0xbd, 0x1e, 0xb0, 0xe6, 0x0a, 0x74, - 0x5f, 0xd3, 0xb7, 0xfc, 0x47, 0x7f, 0x7e, 0x1a, 0x24, 0x06, 0x54, 0xcc, 0xff, 0xfd, 0xb6, 0xff, - 0x85, 0x14, 0xe4, 0xbf, 0xff, 0x4d, 0x38, 0x84, 0x50, 0x54, 0x19, 0xa5, 0x0a, 0x22, 0x03, 0x37, - 0xbf, 0xf6, 0xdb, 0xdb, 0x6e, 0x1a, 0x50, 0xa2, 0xbf, 0xfb, 0xff, 0xd2, 0x70, 0x51, 0xdd, 0xf7, - 0x71, 0x8a, 0x4b, 0x08, 0x88, 0x04, 0x46, 0x07, 0x4f, 0x04, 0x80, 0x39, 0x3e, 0x64, 0x8a, 0x1b, - 0x24, 0x0f, 0xeb, 0xaf, 0x71, 0xdb, 0xfa, 0x7f, 0xc9, 0x1d, 0xb6, 0xda, 0x69, 0xa6, 0x9b, 0x6d, - 0xfb, 0x23, 0xde, 0x08, 0x79, 0x84, 0xf2, 0xfe, 0x20, 0xbd, 0xdc, 0x81, 0x24, 0x53, 0xe2, 0xe9, - 0x13, 0x39, 0xfc, 0x72, 0x8e, 0xe0, 0xc8, 0xaa, 0x31, 0x41, 0x2b, 0x78, 0x63, 0x10, 0x48, 0x16, - 0x75, 0x4a, 0x1e, 0x24, 0x3e, 0x06, 0xc5, 0xff, 0xfd, 0xbe, 0xf3, 0x6f, 0x6f, 0x03, 0x00, 0x90, - 0x47, 0x2d, 0x1f, 0x8e, 0xef, 0x97, 0x55, 0xa8, 0x64, 0x0a, 0x20, 0xa0, 0x8b, 0x17, 0x2f, 0x10, - 0x3c, 0x50, 0x19, 0x60, 0x0c, 0x50, 0x00, 0x61, 0x98, 0x07, 0x10, 0x52, 0x87, 0x89, 0x00, 0x30, - 0xcf, 0x44, 0x41, 0xbe, 0xff, 0xdd, 0xff, 0xb9, 0xfb, 0x6d, 0xd4, 0xd0, 0x1c, 0xa0, 0x61, 0xb9, - 0x70, 0x7d, 0xc5, 0xbd, 0xb6, 0xe1, 0xb4, 0x60, 0x00, 0xb8, 0xd1, 0x22, 0x1b, 0xe1, 0x2e, 0x09, - 0xbd, 0xef, 0xfb, 0x8b, 0x62, 0xd9, 0x68, 0x2a, 0xc7, 0x2f, 0x92, 0x3c, 0x1a, 0x53, 0x33, 0xe0, - 0xb5, 0x0f, 0xc9, 0xd7, 0x28, 0x22, 0x84, 0x44, 0x82, 0x0e, 0x2e, 0x4f, 0x13, 0xf5, 0x38, 0x3c, - 0x7b, 0xe3, 0xd6, 0x87, 0xa0, 0x35, 0x08, 0x86, 0xe8, 0x0b, 0xf7, 0x07, 0x7f, 0xf0, 0xf2, 0x80, - 0x32, 0x94, 0x98, 0x04, 0xc0, 0xa0, 0x9b, 0xff, 0x27, 0x16, 0xe5, 0xb4, 0xed, 0xc1, 0x54, 0x65, - 0x6f, 0xf8, 0x75, 0x40, 0x08, 0x45, 0x38, 0xf2, 0x20, 0xcd, 0xdf, 0xbf, 0xf2, 0xfa, 0x65, 0xfe, - 0x07, 0x03, 0x14, 0x77, 0x4e, 0x9f, 0xf0, 0x88, 0x28, 0x88, 0x1c, 0x15, 0x8a, 0x31, 0x5e, 0xd8, - 0xb8, 0x28, 0x10, 0xc9, 0x87, 0x14, 0x08, 0xe0, 0x3a, 0x88, 0xab, 0xfd, 0xb6, 0xd3, 0x16, 0xc5, - 0x58, 0xab, 0x16, 0xc5, 0xb1, 0x26, 0x8c, 0xb4, 0xcb, 0xfe, 0x1c, 0x50, 0xdb, 0xef, 0xb7, 0xff, - 0xe6, 0x39, 0x4d, 0x20, 0xbe, 0x18, 0x50, 0x24, 0x1f, 0x9c, 0x7f, 0xe9, 0xf4, 0xd3, 0x03, 0xe6, - 0xc3, 0x8a, 0x01, 0x37, 0xde, 0x41, 0x7f, 0x36, 0xdb, 0x7b, 0x6d, 0xff, 0x81, 0xf3, 0x74, 0x89, - 0x9f, 0x80, 0x48, 0x41, 0x00, 0x52, 0x2e, 0x2e, 0x91, 0x32, 0xad, 0x8b, 0xe0, 0xd4, 0x4c, 0x8a, - 0x88, 0x99, 0x6e, 0xc3, 0x60, 0x74, 0xf9, 0xc0, 0xc0, 0x24, 0x2b, 0xc5, 0xd6, 0xf7, 0x11, 0x7e, - 0x33, 0xd5, 0xd6, 0xfe, 0xb8, 0x20, 0xb8, 0xae, 0x2b, 0xc5, 0xe2, 0xb1, 0x40, 0x71, 0x20, 0xe0, - 0x50, 0x6e, 0x13, 0x5b, 0x15, 0x6e, 0x0e, 0xbf, 0xf0, 0xf1, 0x08, 0x00, 0x65, 0x07, 0x16, 0xe6, - 0x08, 0xb5, 0x5e, 0x15, 0x65, 0xad, 0x49, 0xdb, 0xb3, 0xa7, 0x55, 0xfc, 0x30, 0x05, 0xec, 0x3c, - 0xa0, 0xa7, 0x1c, 0x45, 0x47, 0xea, 0xfa, 0x70, 0xc4, 0xa0, 0x15, 0xd0, 0xc7, 0x1c, 0x56, 0x4c, - 0xbb, 0xb6, 0x2d, 0xdb, 0x6d, 0xb6, 0xdb, 0x6f, 0x6f, 0xa3, 0xce, 0x05, 0x00, 0x08, 0xc0, 0xdd, - 0x31, 0x5b, 0x95, 0x9e, 0x41, 0xc9, 0x89, 0x4e, 0x00, 0x79, 0x57, 0xc0, 0x3c, 0x1e, 0x16, 0x30, - 0xa8, 0x00, 0x17, 0x52, 0x88, 0xd4, 0xf1, 0xcb, 0x7d, 0x0e, 0x1c, 0x02, 0x80, 0x20, 0x00, 0xc5, - 0x53, 0xcc, 0x0d, 0x45, 0x1d, 0xfe, 0x08, 0xc8, 0x2b, 0xdc, 0x4d, 0x41, 0x28, 0x6f, 0x00, 0x03, - 0x54, 0x59, 0x08, 0x69, 0x21, 0x4d, 0x3f, 0x1b, 0xbb, 0x83, 0xee, 0xcf, 0x31, 0xcd, 0x38, 0xd7, - 0xbc, 0x35, 0x52, 0x21, 0x0f, 0x39, 0xee, 0x73, 0xfe, 0x1b, 0x62, 0xc0, 0x08, 0xa7, 0x2b, 0xc1, - 0x51, 0xcd, 0xff, 0x8f, 0x10, 0xff, 0x4d, 0xd3, 0x54, 0xf4, 0xd3, 0x04, 0xae, 0x38, 0x86, 0x8d, - 0xfc, 0x38, 0x88, 0x00, 0x19, 0x59, 0xae, 0x99, 0x0a, 0xff, 0xfb, 0xc5, 0xb0, 0x70, 0xdf, 0xff, - 0x99, 0x76, 0xc1, 0xdb, 0xa7, 0xfe, 0x02, 0x44, 0x02, 0x40, 0x34, 0xc1, 0xfc, 0xa7, 0x07, 0x07, - 0x47, 0xdb, 0x84, 0xa0, 0x05, 0x4e, 0x00, 0x02, 0x18, 0xdd, 0x25, 0x0a, 0x83, 0xa1, 0xf3, 0x81, - 0xe0, 0xeb, 0xf1, 0x8e, 0xbe, 0xee, 0xff, 0x61, 0x41, 0xb0, 0x03, 0x0e, 0xc1, 0xc6, 0xe0, 0xed, - 0xe5, 0xaf, 0xe0, 0xe0, 0x40, 0x77, 0x5b, 0x49, 0x6b, 0x2c, 0x18, 0xa3, 0x12, 0x03, 0xcb, 0x18, - 0x48, 0xd0, 0x9d, 0xb8, 0xea, 0xe6, 0xff, 0x86, 0x61, 0x3a, 0xaa, 0xac, 0xbd, 0xcb, 0x70, 0xe2, - 0x80, 0x3f, 0xb5, 0x0e, 0x8f, 0xed, 0xfa, 0x69, 0xb6, 0xd8, 0xc5, 0x36, 0xff, 0x86, 0x14, 0x09, - 0x4b, 0x21, 0xc6, 0x4f, 0x4d, 0x34, 0xd3, 0xb6, 0xde, 0xd9, 0xbe, 0x56, 0xe0, 0xc2, 0x14, 0x8b, - 0xa9, 0x32, 0x53, 0x8c, 0xa9, 0x2a, 0xb0, 0x49, 0xc4, 0x3c, 0xe1, 0xe4, 0xe2, 0xa7, 0xbe, 0xac, - 0xdc, 0x08, 0x22, 0x42, 0x85, 0xc9, 0xec, 0x8b, 0xc5, 0x62, 0xbb, 0x44, 0xe0, 0x1f, 0x16, 0x06, - 0x52, 0x12, 0x97, 0x55, 0x8d, 0x70, 0xd4, 0x07, 0xe1, 0x85, 0x05, 0x16, 0x08, 0xff, 0x5f, 0x9b, - 0xeb, 0xb7, 0xcd, 0xeb, 0x3f, 0xe0, 0x48, 0x12, 0x1d, 0x83, 0xee, 0xa9, 0xd5, 0x55, 0x53, 0x15, - 0x8b, 0x67, 0xc0, 0x64, 0xc4, 0x4b, 0x0c, 0x48, 0xc3, 0xf0, 0xe9, 0x0a, 0x00, 0x52, 0x96, 0x12, - 0x20, 0xa9, 0xea, 0x27, 0x4e, 0x69, 0xa7, 0x93, 0xbb, 0x67, 0xef, 0xb8, 0x19, 0x0c, 0x61, 0xf8, - 0x97, 0xb9, 0xe3, 0xfe, 0x1e, 0x21, 0x80, 0x04, 0xe9, 0x8a, 0xb2, 0x9e, 0x88, 0x40, 0x95, 0xe4, - 0xd3, 0xe4, 0xea, 0xce, 0xf9, 0x39, 0x3b, 0x3b, 0x3c, 0x61, 0x34, 0x4e, 0xcd, 0x99, 0x3f, 0xc3, - 0x52, 0x80, 0x48, 0xc9, 0x07, 0xb0, 0xe2, 0x6d, 0xcf, 0xde, 0x7e, 0x7e, 0x7e, 0xfe, 0xfe, 0xdb, - 0xf9, 0xfb, 0xfb, 0xfd, 0xdb, 0x90, 0x8c, 0x15, 0x0f, 0x28, 0x03, 0x92, 0xdb, 0xc8, 0x29, 0xc8, - 0x57, 0xfb, 0xfe, 0xbe, 0x7e, 0x25, 0xef, 0xe1, 0xa9, 0x31, 0xdf, 0x06, 0xd7, 0x7c, 0x3c, 0x48, - 0x07, 0x1e, 0x53, 0x1b, 0x7b, 0xef, 0xab, 0x8f, 0xff, 0xa6, 0x2d, 0x9b, 0xc9, 0x48, 0xed, 0x7d, - 0xff, 0xc1, 0x34, 0x56, 0x2b, 0x15, 0x8a, 0x31, 0x5b, 0xbc, 0x10, 0x1a, 0x09, 0x78, 0x7a, 0xe2, - 0xbc, 0x50, 0x18, 0xa0, 0x03, 0x14, 0x62, 0x80, 0xdc, 0x56, 0xee, 0x12, 0x46, 0x4c, 0x43, 0xe9, - 0xfc, 0x3d, 0x20, 0x01, 0x1c, 0x07, 0x26, 0x98, 0xe6, 0x1d, 0x8a, 0x99, 0xbb, 0xba, 0x69, 0xf9, - 0xf3, 0x73, 0x79, 0xb8, 0x1c, 0x18, 0xc8, 0xf3, 0xf8, 0xf7, 0xc1, 0xc9, 0xff, 0x86, 0x58, 0xb0, - 0x01, 0xdb, 0x62, 0xf1, 0x73, 0x0a, 0xee, 0xaf, 0x27, 0x4f, 0xfc, 0x1d, 0xbb, 0x65, 0xfd, 0x31, - 0xe8, 0xda, 0x86, 0x14, 0x00, 0xcc, 0x37, 0x19, 0x23, 0x2f, 0xfb, 0xd3, 0x4d, 0x34, 0xfe, 0x9d, - 0xba, 0xc3, 0xc8, 0x40, 0x90, 0x50, 0xd3, 0xb8, 0xd3, 0xf7, 0xfd, 0x3c, 0x22, 0x19, 0x0e, 0x54, - 0x35, 0xc3, 0x89, 0x7d, 0xbf, 0xc1, 0xc8, 0x04, 0x00, 0x6c, 0x41, 0xc2, 0x65, 0xd4, 0xa9, 0xce, - 0x5b, 0xf8, 0x81, 0xc2, 0xc1, 0x8a, 0x00, 0x31, 0x20, 0x3d, 0xf7, 0x60, 0x3a, 0xb0, 0x20, 0x12, - 0x98, 0x41, 0xc1, 0x8a, 0xb8, 0x38, 0x97, 0x5f, 0x87, 0x88, 0x50, 0x03, 0x70, 0x0c, 0x62, 0x94, - 0x26, 0x37, 0xaf, 0x08, 0x7a, 0x65, 0xb5, 0x64, 0x88, 0xd1, 0x64, 0x5d, 0x63, 0x4e, 0x35, 0x18, - 0x27, 0x64, 0x41, 0x2b, 0xb6, 0xe7, 0xff, 0x0c, 0x28, 0x01, 0x2f, 0x38, 0x51, 0x71, 0x17, 0xcf, - 0x9e, 0xf8, 0x49, 0xf7, 0x6f, 0x27, 0xd6, 0x2b, 0xc7, 0x7e, 0x18, 0x50, 0x01, 0x1d, 0xdf, 0xa8, - 0x2f, 0x92, 0xdb, 0x6a, 0x9a, 0x6d, 0xea, 0x99, 0x3e, 0x9a, 0x7d, 0x87, 0xb1, 0x11, 0x1f, 0x44, - 0xce, 0xbf, 0x56, 0x4f, 0x76, 0xcf, 0x1a, 0x71, 0x86, 0x9a, 0x7f, 0x0e, 0x22, 0x00, 0x12, 0x31, - 0x7a, 0x87, 0x1d, 0x65, 0x27, 0x7d, 0xb1, 0x56, 0x2a, 0xef, 0x7d, 0x34, 0xc0, 0xe6, 0x32, 0xaa, - 0x6b, 0xfc, 0x0e, 0x00, 0x40, 0x1b, 0x9b, 0xe4, 0xed, 0x97, 0xbf, 0x88, 0x3e, 0x77, 0x88, 0x7e, - 0x2b, 0x84, 0x59, 0xa7, 0x6e, 0x0e, 0xbf, 0xf0, 0xe9, 0x20, 0x01, 0xf8, 0xd1, 0x49, 0x08, 0xe0, - 0x5d, 0x20, 0x85, 0xaf, 0x9f, 0xde, 0x6a, 0xb3, 0x1e, 0xbb, 0x6c, 0xe0, 0xf5, 0xc1, 0xeb, 0x9d, - 0xe7, 0x7b, 0x38, 0x4b, 0x60, 0x24, 0xfd, 0x7f, 0x2f, 0xe9, 0xf8, 0x6b, 0x00, 0x18, 0x26, 0xa1, - 0xec, 0x71, 0xe1, 0x7f, 0xde, 0x7e, 0xfe, 0x7e, 0xff, 0xb7, 0xbb, 0xb8, 0x26, 0x81, 0x03, 0x86, - 0x09, 0x00, 0x0b, 0x28, 0xfd, 0x40, 0x90, 0x74, 0x1f, 0xed, 0x6a, 0xab, 0xb6, 0xdb, 0x6d, 0xb6, - 0x2a, 0xdb, 0x07, 0x1f, 0xdf, 0x0f, 0x12, 0x00, 0xc0, 0x00, 0x2e, 0xa8, 0x1d, 0xac, 0xbe, 0x4b, - 0xbb, 0xef, 0x3f, 0xad, 0xfe, 0xb3, 0xf6, 0xdf, 0xeb, 0x03, 0x01, 0x43, 0x8d, 0xa3, 0x56, 0x30, - 0x7a, 0xf1, 0xfc, 0x38, 0x42, 0x80, 0x11, 0xd1, 0x6b, 0xd4, 0xc5, 0x08, 0x5f, 0xb5, 0xe5, 0xfd, - 0xd7, 0xcb, 0xd9, 0xdc, 0xef, 0x03, 0x26, 0x87, 0xe7, 0xf1, 0x5f, 0x82, 0x78, 0x81, 0x01, 0xe9, - 0xf0, 0x75, 0x78, 0x76, 0x0d, 0x4f, 0x00, 0x73, 0x12, 0xe7, 0x13, 0xc0, 0x84, 0x4a, 0xda, 0x5e, - 0x39, 0x7e, 0x5f, 0xf0, 0xf4, 0x80, 0x09, 0x68, 0x3e, 0x9f, 0x50, 0xf4, 0x57, 0x79, 0xde, 0xbd, - 0xb6, 0xed, 0xed, 0xa2, 0xb7, 0xb6, 0x11, 0x07, 0x06, 0xd0, 0x64, 0xfb, 0x15, 0x9f, 0x9b, 0x4f, - 0x85, 0xe7, 0x00, 0x1f, 0xbd, 0xa1, 0x3b, 0x71, 0x0d, 0x2f, 0xa9, 0x9b, 0xca, 0x69, 0xa6, 0x9a, - 0xaa, 0xab, 0x73, 0x75, 0xb6, 0x1c, 0xc0, 0x05, 0xda, 0xb3, 0x90, 0xd0, 0xa1, 0x83, 0xee, 0xdb, - 0x69, 0xa7, 0xa6, 0x5e, 0x5f, 0x6b, 0x5f, 0xf0, 0x28, 0x82, 0x01, 0xa2, 0x05, 0x19, 0x60, 0xc4, - 0x83, 0xce, 0x1e, 0x50, 0x1c, 0xa3, 0xc0, 0x2c, 0x3c, 0x7b, 0x30, 0x9d, 0x57, 0x69, 0x66, 0x4c, - 0x15, 0xb2, 0xc7, 0x8a, 0xc2, 0x0d, 0x60, 0x00, 0x83, 0x55, 0x83, 0x04, 0x5c, 0x9f, 0xf0, 0xee, - 0x00, 0xa0, 0x90, 0x8b, 0x1c, 0xa6, 0x83, 0x5f, 0x29, 0xbe, 0x33, 0x9f, 0x3d, 0x34, 0xc7, 0x9f, - 0x86, 0x73, 0xc7, 0xbf, 0x6f, 0x09, 0x05, 0x07, 0x34, 0xab, 0x76, 0x38, 0x8b, 0x9a, 0x9f, 0x0e, - 0x45, 0x80, 0x0a, 0x4a, 0x8e, 0x6b, 0x21, 0x1b, 0xff, 0xd8, 0xbe, 0x76, 0xd3, 0x56, 0xc1, 0xdb, - 0xd3, 0x75, 0x4e, 0x36, 0xd4, 0xac, 0xcb, 0x4d, 0x3f, 0xc1, 0x44, 0x69, 0x04, 0x16, 0x23, 0x25, - 0x34, 0x53, 0x47, 0xd1, 0xa1, 0xb1, 0xab, 0x10, 0x8e, 0x05, 0x87, 0xa9, 0x26, 0xd6, 0xae, 0x8b, - 0x68, 0xae, 0x87, 0x8d, 0xa7, 0x64, 0xdb, 0xfc, 0x38, 0xa0, 0x03, 0x6d, 0xe6, 0x85, 0x76, 0xe6, - 0xf7, 0xdb, 0x6a, 0x9a, 0x7e, 0xb9, 0xb9, 0xfb, 0xbf, 0xca, 0x44, 0xdb, 0x7f, 0xe0, 0x19, 0x10, - 0x24, 0x8d, 0x86, 0x00, 0x2a, 0x41, 0xc1, 0x85, 0x06, 0xa1, 0x1c, 0x38, 0x39, 0x59, 0x7c, 0x88, - 0xe6, 0x1c, 0xdf, 0x07, 0x7f, 0xc4, 0xa0, 0x68, 0xcd, 0x14, 0x49, 0x41, 0xd8, 0xf8, 0xfe, 0x2b, - 0x6e, 0x45, 0xf0, 0xe9, 0x08, 0x00, 0xba, 0xd3, 0x82, 0x20, 0xab, 0xed, 0x9f, 0xf7, 0x17, 0x71, - 0x97, 0xdb, 0xdc, 0x9c, 0x77, 0xe7, 0xbd, 0xfe, 0xe4, 0xbd, 0x45, 0xc3, 0x00, 0x4a, 0x02, 0x64, - 0x55, 0x95, 0x17, 0xc1, 0x51, 0xe9, 0xf8, 0x6a, 0x40, 0x08, 0x55, 0x0a, 0x00, 0xa3, 0xd7, 0xfa, - 0xd7, 0xdc, 0x64, 0x06, 0x0e, 0x18, 0x20, 0x90, 0x00, 0xd2, 0x43, 0xd2, 0x23, 0x70, 0x16, 0x8f, - 0xb0, 0x8f, 0x55, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb1, 0x44, 0x6b, 0x87, 0x99, - 0x80, 0x05, 0x38, 0xd4, 0x0c, 0xc4, 0x0e, 0x25, 0x25, 0xfe, 0xf9, 0xf8, 0x97, 0xbf, 0xf7, 0x12, - 0xfb, 0xb7, 0x08, 0x48, 0x10, 0xa2, 0x36, 0x16, 0xf4, 0x90, 0xf7, 0xe0, 0x60, 0x08, 0x8d, 0x29, - 0x54, 0x03, 0x53, 0xc1, 0xc1, 0xd0, 0x7e, 0xb2, 0xde, 0xa7, 0x83, 0xe4, 0xab, 0xa9, 0xfc, 0x88, - 0x71, 0x32, 0xc1, 0x81, 0xa4, 0x09, 0x3b, 0xe5, 0x9f, 0xf0, 0x53, 0xc2, 0xf5, 0x10, 0x3e, 0x20, - 0x1f, 0x14, 0x1d, 0xc2, 0x44, 0x14, 0xe2, 0xdb, 0xc7, 0x87, 0xe0, 0xc8, 0xf1, 0xf1, 0xce, 0x63, - 0x55, 0xbe, 0x8e, 0x38, 0x66, 0x50, 0x02, 0x7e, 0x49, 0xc0, 0xcc, 0x29, 0x6f, 0xbf, 0xfe, 0xdc, - 0x10, 0x01, 0x24, 0x69, 0x04, 0x8e, 0x16, 0xa7, 0x37, 0x0b, 0x00, 0xa9, 0x30, 0x00, 0x13, 0x51, - 0xd5, 0x81, 0xc6, 0x6b, 0x37, 0x5c, 0xf0, 0x03, 0xc7, 0x40, 0xb0, 0x1d, 0x02, 0xe4, 0xe0, 0x00, - 0x61, 0xa0, 0x1e, 0x00, 0x02, 0x04, 0x08, 0x31, 0x95, 0x34, 0xea, 0xdb, 0x75, 0xc2, 0x01, 0x11, - 0xa6, 0x1d, 0x3e, 0x4a, 0x54, 0x9d, 0xc9, 0xba, 0x71, 0xe0, 0xe0, 0x84, 0xe5, 0xe3, 0x82, 0x13, - 0x93, 0x15, 0xb3, 0x80, 0x03, 0xd6, 0x2b, 0x10, 0xe2, 0x02, 0xf6, 0x51, 0x09, 0x42, 0x0f, 0x01, - 0x1c, 0x73, 0x85, 0x40, 0x00, 0x86, 0x26, 0x48, 0x09, 0x37, 0xe0, 0x2c, 0x04, 0x85, 0x0b, 0x97, - 0xb9, 0xcf, 0x2c, 0x62, 0xb5, 0xea, 0x70, 0xb1, 0xdb, 0x8e, 0xee, 0x5b, 0x88, 0x40, 0xe5, 0x1f, - 0xc2, 0x31, 0xb5, 0x14, 0xab, 0x7a, 0x9f, 0xae, 0x4f, 0xa2, 0xf7, 0x93, 0xe8, 0xf4, 0x68, 0xcc, - 0xf0, 0xcf, 0xdb, 0xfc, 0x0c, 0x30, 0xa4, 0x41, 0xfb, 0x34, 0x56, 0x6c, 0x2d, 0xe2, 0xdc, 0x6e, - 0x9b, 0xa8, 0x83, 0xc9, 0x8a, 0x15, 0x1f, 0x86, 0xe5, 0x00, 0x18, 0xc3, 0x2f, 0x98, 0x46, 0xaf, - 0xfc, 0x9e, 0xf6, 0x59, 0xa0, 0xed, 0x82, 0x92, 0x38, 0x3b, 0xd6, 0x62, 0xe3, 0x14, 0x61, 0xc3, - 0x80, 0xfc, 0x56, 0x88, 0x14, 0x47, 0xef, 0x86, 0xd8, 0x80, 0x01, 0xbb, 0x32, 0xc0, 0x47, 0xa6, - 0x01, 0x8d, 0x3d, 0x5a, 0x2e, 0xe2, 0xea, 0x4e, 0xac, 0xf1, 0x75, 0x14, 0xc4, 0x7b, 0x39, 0xde, - 0xce, 0x07, 0x44, 0x20, 0xed, 0x3f, 0xdb, 0xe6, 0x1f, 0xc0, 0xa0, 0x01, 0x20, 0x1a, 0x71, 0xc8, - 0x5c, 0x40, 0x3c, 0x78, 0xb9, 0xc3, 0xc5, 0x00, 0x06, 0x16, 0x00, 0x02, 0xaa, 0x70, 0x0f, 0x38, - 0x00, 0x7b, 0x39, 0xcf, 0x2d, 0x96, 0x33, 0x81, 0xe5, 0x83, 0x2c, 0x18, 0x97, 0x8c, 0x00, 0x01, - 0x01, 0x84, 0x36, 0xa5, 0xed, 0xff, 0x0d, 0x60, 0x4c, 0xb8, 0xd8, 0x08, 0xa7, 0x7f, 0xee, 0xfe, - 0xd9, 0x6c, 0x3c, 0x42, 0x00, 0x0d, 0xba, 0x65, 0x86, 0x4c, 0x1c, 0x7f, 0xd7, 0x5d, 0x62, 0x3e, - 0xa6, 0xf2, 0x5e, 0x59, 0xea, 0x06, 0xc3, 0x1f, 0x1c, 0xc3, 0x7c, 0x77, 0xe0, 0xac, 0x3b, 0x28, - 0x00, 0x12, 0x8a, 0xf8, 0x15, 0xde, 0x2f, 0x7f, 0xd3, 0x4e, 0xf2, 0xf8, 0x41, 0xb1, 0xb8, 0x32, - 0x3e, 0xc6, 0x37, 0xe1, 0xb4, 0x7e, 0xf8, 0x6b, 0x00, 0x33, 0x54, 0x74, 0x10, 0xa5, 0x7f, 0xf5, - 0xd6, 0x65, 0xf0, 0x40, 0x19, 0x0a, 0x5c, 0xf9, 0x8e, 0xae, 0x3a, 0x00, 0x17, 0x07, 0x1b, 0x94, - 0x40, 0x12, 0xe2, 0x3d, 0x31, 0xfc, 0x14, 0x10, 0x94, 0xe0, 0x1e, 0x58, 0xb0, 0x40, 0x00, 0x08, - 0x0c, 0x03, 0x81, 0xc3, 0xaa, 0x00, 0xf5, 0xbb, 0x02, 0x50, 0x64, 0xd0, 0x88, 0x5f, 0xe9, 0x3c, - 0xfc, 0x49, 0xe4, 0x8e, 0x09, 0x87, 0x10, 0x8e, 0x07, 0x9c, 0xf3, 0xcf, 0x2c, 0x67, 0x68, 0xc8, - 0x1c, 0x03, 0xcb, 0x33, 0x80, 0x78, 0xa4, 0x18, 0xe4, 0xfc, 0x7e, 0xb8, 0x1c, 0x04, 0x8d, 0xa0, - 0x05, 0x41, 0x76, 0x1a, 0x21, 0x50, 0xb6, 0xeb, 0x14, 0x74, 0xf0, 0xf3, 0x47, 0x50, 0x54, 0xa5, - 0x1b, 0xa2, 0xe4, 0x09, 0x42, 0xc7, 0xc4, 0xbe, 0x07, 0x69, 0x75, 0x1c, 0x1e, 0x28, 0x7f, 0x84, - 0x60, 0x9b, 0x55, 0x27, 0x4f, 0xb9, 0xd3, 0x0f, 0x12, 0x00, 0x39, 0x69, 0xb2, 0xa2, 0x06, 0xdf, - 0x6f, 0x29, 0x78, 0xbd, 0xc7, 0x1a, 0xb8, 0xa6, 0xe2, 0x3e, 0xd4, 0x56, 0x6e, 0x5b, 0x17, 0x05, - 0x4f, 0x7f, 0xc3, 0xc4, 0x20, 0x03, 0x08, 0x8b, 0xe0, 0xe4, 0x31, 0xe7, 0xf7, 0xef, 0x1c, 0xf2, - 0xfb, 0x17, 0x89, 0x07, 0x85, 0x5c, 0x13, 0x8e, 0x3c, 0xf1, 0xef, 0x80, 0x90, 0x7e, 0x04, 0x80, - 0xbe, 0x54, 0xf1, 0xea, 0x4e, 0x37, 0x3e, 0x1e, 0x64, 0x01, 0x50, 0x35, 0x74, 0x0c, 0xa4, 0xab, - 0x6b, 0x4f, 0x4d, 0x9f, 0x67, 0x4d, 0x32, 0x79, 0x3c, 0x6f, 0xb9, 0x3d, 0x90, 0xb2, 0x1f, 0x86, - 0x58, 0xd0, 0x04, 0x63, 0x13, 0x40, 0xf7, 0x47, 0x96, 0xb7, 0xb7, 0x7e, 0xee, 0xee, 0xf6, 0xe0, - 0x70, 0x03, 0x00, 0xd3, 0x09, 0x00, 0x70, 0x48, 0x03, 0x85, 0x8c, 0xf7, 0x85, 0xc1, 0x57, 0xed, - 0x52, 0x2b, 0xae, 0x2e, 0x29, 0xa8, 0xa0, 0x18, 0x8f, 0x09, 0x02, 0x10, 0x28, 0x5f, 0x4c, 0x1e, - 0xb8, 0x5b, 0x86, 0x7f, 0xf0, 0xc9, 0x4f, 0x00, 0x70, 0xf1, 0xcb, 0xb0, 0x35, 0x4b, 0x3f, 0x3f, - 0x05, 0x78, 0x90, 0xae, 0xf7, 0xc1, 0xa0, 0x21, 0x3a, 0x50, 0x49, 0x45, 0xad, 0xca, 0xdf, 0x7f, - 0xc2, 0x00, 0x59, 0x1a, 0x61, 0xdb, 0x1d, 0xa5, 0x04, 0x58, 0x0e, 0xa0, 0x4a, 0x56, 0x03, 0x53, - 0xc0, 0x00, 0xbe, 0x15, 0xb5, 0x2c, 0x00, 0x18, 0xac, 0x6b, 0x6a, 0xe0, 0x04, 0xb0, 0xb0, 0x61, - 0xe3, 0x22, 0xb3, 0x25, 0x0e, 0xcd, 0x49, 0x80, 0x00, 0x82, 0x9e, 0x07, 0x02, 0x82, 0x28, 0x00, - 0x61, 0xaa, 0x29, 0xfb, 0x1e, 0x3e, 0x9f, 0xc2, 0xec, 0xa0, 0x06, 0xbb, 0x70, 0x04, 0x5f, 0x94, - 0x26, 0xef, 0x7e, 0x4e, 0xa5, 0xfd, 0xba, 0x8a, 0x6a, 0x29, 0xeb, 0x80, 0xc1, 0x02, 0x40, 0x74, - 0x83, 0xa2, 0xe7, 0x07, 0x94, 0x52, 0x96, 0x1e, 0x0c, 0x04, 0xca, 0xa3, 0x88, 0xb8, 0xeb, 0xe5, - 0x99, 0xe0, 0xf9, 0x07, 0x00, 0x21, 0x22, 0x78, 0xa7, 0x17, 0xfe, 0x05, 0x88, 0xdb, 0x24, 0x0a, - 0x8f, 0xe4, 0xa0, 0x05, 0x31, 0x65, 0xfb, 0x95, 0x01, 0x12, 0x85, 0x35, 0x07, 0x00, 0x13, 0x72, - 0x85, 0x53, 0x15, 0xe5, 0xe0, 0xe5, 0x55, 0x89, 0xc3, 0xf8, 0x98, 0x28, 0x3d, 0x6e, 0x95, 0x27, - 0xcc, 0x7c, 0x10, 0x44, 0xfc, 0x89, 0xf9, 0x26, 0xa4, 0x73, 0xcb, 0x1c, 0x41, 0x45, 0x44, 0x38, - 0x48, 0x00, 0xa8, 0x38, 0x00, 0x14, 0x02, 0xc5, 0x58, 0x50, 0x0d, 0xc9, 0x20, 0x1b, 0x9f, 0x0d, - 0x90, 0x40, 0x00, 0xb5, 0xdc, 0x0a, 0x07, 0x88, 0x5f, 0xff, 0x7a, 0x2b, 0x51, 0x47, 0x2a, 0x2e, - 0x2f, 0x22, 0x80, 0x3c, 0x48, 0x00, 0xf1, 0x4c, 0x5c, 0xb0, 0xc5, 0x30, 0x1c, 0x11, 0xb4, 0xef, - 0xc2, 0x5f, 0x86, 0x89, 0x00, 0x29, 0x4c, 0x62, 0x67, 0xbc, 0x91, 0x36, 0xe5, 0xf7, 0x15, 0xb8, - 0xaf, 0xdc, 0x56, 0xe2, 0x47, 0xbe, 0x1e, 0x67, 0x00, 0x11, 0x07, 0xdc, 0x25, 0x53, 0xd4, 0xff, - 0xb7, 0x6f, 0xf7, 0xb6, 0x4e, 0xa5, 0xe1, 0x28, 0x8d, 0xac, 0x41, 0xff, 0xe1, 0xba, 0x54, 0xa1, - 0x12, 0x49, 0x1f, 0x7e, 0x3f, 0x82, 0x5e, 0x8b, 0x15, 0x75, 0xe9, 0xa2, 0x21, 0xe1, 0x15, 0x4a, - 0xb9, 0xa0, 0x80, 0x01, 0x24, 0xf0, 0x00, 0x1a, 0xe1, 0xc9, 0x82, 0x53, 0xc0, 0x00, 0xe3, 0x12, - 0x1e, 0xc0, 0x97, 0x10, 0x42, 0x43, 0x20, 0xde, 0x1c, 0x1f, 0x49, 0x9e, 0xf8, 0x65, 0xc0, 0x43, - 0x01, 0xb8, 0x6b, 0x2c, 0x2a, 0x3e, 0xbc, 0x77, 0x37, 0x77, 0x99, 0x55, 0x5c, 0xdd, 0xdd, 0xe5, - 0x4f, 0xf2, 0xf2, 0xab, 0x0b, 0xe0, 0x1f, 0x68, 0xca, 0x18, 0x2d, 0x0c, 0xdd, 0x5e, 0x15, 0xdc, - 0x72, 0x5d, 0xc2, 0x42, 0xd9, 0x0c, 0xfd, 0x18, 0x56, 0x0a, 0xc9, 0x4d, 0xc4, 0xbc, 0x08, 0x01, - 0x01, 0xb3, 0x83, 0x8c, 0xec, 0xc2, 0x70, 0xd4, 0x27, 0xcb, 0xb2, 0xcc, 0x28, 0xa9, 0x23, 0x41, - 0x70, 0x42, 0x28, 0x70, 0x3c, 0xa8, 0x02, 0x1a, 0x87, 0x05, 0x81, 0xe7, 0xca, 0x10, 0xa8, 0x39, - 0x1f, 0x0d, 0xe6, 0xba, 0x62, 0xb2, 0x43, 0xe1, 0xc6, 0x70, 0x01, 0x11, 0xb8, 0xde, 0x46, 0x16, - 0xa4, 0xfb, 0x69, 0x83, 0xfe, 0xb6, 0x5e, 0x7e, 0x3d, 0x9d, 0xbc, 0x4c, 0xc5, 0xe6, 0x31, 0xfd, - 0x3f, 0x86, 0xf0, 0x04, 0xb2, 0x0e, 0xbe, 0x26, 0x05, 0x24, 0xc6, 0xbb, 0xd7, 0x2e, 0xb6, 0xed, - 0x9f, 0x92, 0x3a, 0xd6, 0x84, 0x07, 0xc5, 0xeb, 0xb3, 0xc6, 0x74, 0xf8, 0x6c, 0x82, 0x00, 0x01, - 0xff, 0x06, 0x2c, 0xce, 0x95, 0x23, 0x63, 0x31, 0xcb, 0x3c, 0x19, 0x7c, 0x9c, 0x3e, 0x28, 0x86, - 0x80, 0xf0, 0x3c, 0x9d, 0x59, 0xd3, 0x83, 0xe2, 0xc0, 0x37, 0xde, 0x58, 0x00, 0x62, 0x3d, 0x9c, - 0xe3, 0xe3, 0x02, 0xca, 0xb6, 0xb2, 0xbf, 0x0b, 0xb2, 0x80, 0x07, 0xdc, 0x51, 0x30, 0x0e, 0x9b, - 0x01, 0xf5, 0xff, 0xdf, 0x26, 0xed, 0xf7, 0xbb, 0x96, 0xdc, 0x56, 0xe2, 0xb3, 0xf1, 0x22, 0xc3, - 0xfc, 0x8e, 0xfc, 0x3b, 0x1f, 0x52, 0xa8, 0x94, 0x9c, 0xa9, 0x30, 0x1c, 0x1c, 0x7c, 0x6c, 0xf9, - 0x60, 0x19, 0x21, 0x52, 0x40, 0x2b, 0x85, 0x20, 0x20, 0x88, 0x5b, 0xcc, 0xe3, 0xcb, 0xfe, 0x0a, - 0x7a, 0x13, 0xd3, 0x70, 0xf0, 0x80, 0x75, 0x72, 0xc0, 0x03, 0x89, 0x03, 0xc7, 0x25, 0xc7, 0x20, - 0x7c, 0xe0, 0xf1, 0xc8, 0xf8, 0xa0, 0x63, 0x87, 0xf0, 0x74, 0xb9, 0x65, 0x85, 0x10, 0x70, 0xc0, - 0x49, 0x83, 0x61, 0xa0, 0xd5, 0xe8, 0x90, 0x7d, 0xf0, 0xbb, 0x20, 0x03, 0xfe, 0xa1, 0x99, 0xba, - 0x0f, 0x1b, 0xa9, 0x72, 0xf1, 0x5b, 0xcb, 0xcb, 0x31, 0x0f, 0x0a, 0x9b, 0x8d, 0xf6, 0xc8, 0xe7, - 0xd2, 0x97, 0x0c, 0x81, 0x04, 0x6c, 0x90, 0xa9, 0x44, 0x95, 0x9a, 0x72, 0xc8, 0xf0, 0xbc, 0x9c, - 0x1f, 0x24, 0x82, 0xa7, 0x8f, 0x38, 0x07, 0x8e, 0x83, 0xe5, 0xe2, 0x9a, 0xb5, 0x2e, 0x84, 0x27, - 0xf4, 0xe2, 0x07, 0x7e, 0x1d, 0x47, 0x00, 0x1a, 0xf2, 0xd0, 0x2c, 0x2c, 0x61, 0xad, 0xfc, 0xdd, - 0xcf, 0xc3, 0x97, 0xf5, 0x7f, 0x94, 0x42, 0x85, 0x8b, 0x72, 0xf1, 0x6d, 0xbd, 0x2a, 0xcb, 0xa5, - 0xd4, 0xd3, 0xe1, 0xc4, 0x40, 0x03, 0x51, 0x01, 0x86, 0x8e, 0x49, 0xea, 0x5c, 0x2b, 0x97, 0xbc, - 0xb0, 0x07, 0x14, 0x06, 0xef, 0x5d, 0x6d, 0x9f, 0x9e, 0x3c, 0xf7, 0x96, 0xc3, 0x46, 0x4e, 0xc5, - 0x10, 0xfc, 0xd0, 0x3a, 0xc8, 0xc7, 0xf0, 0xd4, 0x80, 0x11, 0xc0, 0x5c, 0xb7, 0x70, 0x18, 0xc2, - 0xa7, 0x8b, 0x1c, 0x56, 0x4e, 0x23, 0xf6, 0x7b, 0x78, 0xfb, 0xc6, 0x3e, 0xec, 0xef, 0x1a, 0x64, - 0x33, 0x80, 0xc0, 0x02, 0xc8, 0xd2, 0xa6, 0x20, 0x07, 0x04, 0x0f, 0x2c, 0x01, 0x96, 0xb2, 0xc0, - 0xc5, 0x58, 0xa6, 0x70, 0x03, 0xc9, 0xc1, 0x52, 0x50, 0x00, 0x70, 0x55, 0x4a, 0x4e, 0x54, 0xb0, - 0xce, 0x00, 0xf2, 0xc3, 0x08, 0x44, 0x30, 0x45, 0x85, 0x8f, 0x2a, 0x03, 0xef, 0xf0, 0x56, 0x56, - 0x6f, 0xd3, 0xbb, 0x7b, 0xc5, 0x0b, 0x40, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x5f, 0x2f, 0xb0, - 0x4a, 0x04, 0x9d, 0x0d, 0xe8, 0x17, 0xfa, 0xf4, 0xdd, 0x17, 0x2b, 0xeb, 0xd5, 0xd1, 0x3d, 0xf5, - 0xe8, 0x73, 0xab, 0xc3, 0x1d, 0x7b, 0xea, 0xf0, 0xdf, 0x57, 0x2b, 0xab, 0x45, 0xf5, 0xab, 0xeb, - 0x55, 0xd7, 0xaf, 0xae, 0x4a, 0x9f, 0x57, 0xae, 0xad, 0x5d, 0x5f, 0xea, 0xf3, 0xf4, 0x77, 0x84, - 0xfa, 0x11, 0xb1, 0x0c, 0x75, 0xe9, 0xfa, 0xbc, 0xdd, 0x5a, 0xba, 0xf5, 0x75, 0xe8, 0xde, 0xbd, - 0x0a, 0xf5, 0x78, 0xde, 0xaf, 0x0f, 0xf5, 0xca, 0x37, 0xad, 0x7d, 0x5e, 0x5e, 0x8a, 0xff, 0x5e, - 0xfa, 0xb5, 0xf5, 0x6a, 0xea, 0xf5, 0xd5, 0xfe, 0xaf, 0x27, 0x56, 0x93, 0xa2, 0x57, 0xc9, 0x7b, - 0xc1, 0xc7, 0x57, 0x85, 0x7a, 0xb9, 0xf5, 0x62, 0x7e, 0xbd, 0x27, 0x5a, 0x84, 0x3a, 0x3e, 0x5f, - 0x46, 0xfd, 0xf4, 0x57, 0xae, 0xbd, 0xf5, 0xe9, 0x3a, 0x2b, 0xd7, 0x04, 0xa6, 0x6d, 0x7b, 0xbd, - 0xe2, 0xfa, 0xd7, 0xd6, 0x29, 0x71, 0x0b, 0xd5, 0x89, 0x5e, 0xfa, 0xf7, 0xd7, 0xa2, 0xba, 0xf5, - 0x75, 0xe8, 0xde, 0xaf, 0x3c, 0x4d, 0x97, 0x77, 0x30, 0xe6, 0x42, 0x91, 0x18, 0xa4, 0xdd, 0x7b, - 0xeb, 0xd5, 0xd7, 0xfe, 0x25, 0x47, 0x7f, 0xd7, 0xff, 0x5f, 0xc2, 0xbd, 0x7a, 0x16, 0xe8, 0xcc, - 0x5f, 0x21, 0xdd, 0xf3, 0x75, 0xef, 0xaf, 0x7d, 0x7a, 0x4e, 0xaf, 0x27, 0x56, 0x8d, 0xea, 0xd5, - 0xd6, 0xab, 0xab, 0xfd, 0x5e, 0x6e, 0x8a, 0xc4, 0xb1, 0x1a, 0xe8, 0x9d, 0x5d, 0x1e, 0x29, 0x7a, - 0x37, 0x7d, 0x7a, 0x4e, 0xbd, 0x78, 0x85, 0xea, 0xec, 0xbb, 0xb9, 0xba, 0x23, 0xc7, 0xf4, 0x57, - 0xbe, 0x09, 0x35, 0xaf, 0x7c, 0xe2, 0x15, 0x68, 0x97, 0xc7, 0x74, 0x7e, 0x93, 0xaf, 0x7d, 0x62, - 0x89, 0xe8, 0x59, 0x6b, 0xe8, 0x67, 0x57, 0x35, 0x62, 0xeb, 0x0c, 0x28, 0x2a, 0x97, 0xdf, 0xfe, - 0xdf, 0x63, 0x1c, 0xa1, 0x00, 0x34, 0x06, 0x48, 0xa1, 0x22, 0x40, 0xfa, 0x66, 0xe3, 0xf6, 0xfe, - 0x08, 0xea, 0xaa, 0xaf, 0x13, 0xd1, 0x5e, 0x23, 0x82, 0x43, 0x5d, 0xdd, 0x82, 0xe8, 0xee, 0x44, - 0x77, 0x55, 0xd1, 0xc9, 0x3c, 0x1f, 0x5d, 0xa3, 0xfa, 0xb5, 0x8c, 0x24, 0x3e, 0xf1, 0xd3, 0x18, - 0xe1, 0xf0, 0xf2, 0x38, 0x0e, 0x35, 0x0f, 0x8e, 0x00, 0xd8, 0x85, 0xc6, 0xa0, 0x80, 0x1d, 0xa5, - 0x34, 0x6f, 0x82, 0x08, 0x2d, 0xde, 0xf8, 0x9e, 0x7a, 0x3a, 0x22, 0x51, 0x0b, 0x78, 0x60, 0xeb, - 0xf4, 0x34, 0x76, 0xa1, 0xe4, 0x31, 0x08, 0x87, 0x8e, 0xfe, 0xdf, 0xc1, 0x1d, 0x57, 0xeb, 0xeb, - 0x9b, 0xea, 0xcb, 0x10, 0xb9, 0xd7, 0x15, 0x28, 0x7d, 0x8a, 0xcf, 0xe3, 0x23, 0xe2, 0x13, 0x88, - 0x4b, 0x12, 0x86, 0x06, 0x3d, 0x0d, 0xff, 0xfd, 0x34, 0xfd, 0x39, 0xf5, 0x8d, 0x2e, 0x0a, 0x3a, - 0x08, 0x3a, 0xba, 0x17, 0x04, 0xf8, 0x20, 0x04, 0xa7, 0xd5, 0x62, 0x9e, 0x89, 0x0f, 0x19, 0x2c, - 0x4a, 0x80, 0xe1, 0x8b, 0x58, 0x8a, 0xb3, 0xb2, 0x06, 0x00, 0x7a, 0x7f, 0x80, 0x80, 0x01, 0x03, - 0x89, 0xc3, 0x8f, 0x0c, 0xe8, 0xd5, 0x08, 0xf3, 0x6a, 0xaa, 0x7e, 0x49, 0x71, 0x29, 0xf5, 0x72, - 0x88, 0x7d, 0xcd, 0x13, 0xae, 0x52, 0x69, 0xb9, 0x03, 0x91, 0x20, 0x3a, 0xba, 0x5b, 0xff, 0xf6, - 0xdb, 0x14, 0xab, 0xb6, 0xdf, 0xc6, 0x32, 0x80, 0x3d, 0x97, 0xd4, 0x23, 0x6a, 0x12, 0x20, 0x4c, - 0x1c, 0x01, 0x39, 0x14, 0x4e, 0xbc, 0x9a, 0x4d, 0x4e, 0x38, 0x88, 0xc0, 0xe3, 0xd8, 0x09, 0x00, - 0x12, 0x21, 0x70, 0xa4, 0x28, 0x2a, 0x5e, 0x70, 0x00, 0xf0, 0x72, 0x1f, 0x0e, 0x98, 0x35, 0x36, - 0x07, 0x74, 0xa1, 0x59, 0x19, 0xb0, 0xb1, 0x30, 0xd8, 0xef, 0xfc, 0x11, 0xf4, 0x27, 0x28, 0x98, - 0x47, 0xf7, 0x52, 0x66, 0xb9, 0xba, 0xaa, 0x89, 0xaf, 0x58, 0x79, 0x08, 0x01, 0xf9, 0x72, 0xde, - 0xd7, 0x4d, 0x3d, 0x34, 0xf1, 0xc4, 0xc5, 0xb6, 0xed, 0xfc, 0x38, 0x48, 0x08, 0xe8, 0x6a, 0x47, - 0xaf, 0xf6, 0xdb, 0xdb, 0x6d, 0xb6, 0xcb, 0x8b, 0x6d, 0xd3, 0x4f, 0x6f, 0xdd, 0x55, 0x60, 0x8b, - 0x82, 0x31, 0x28, 0xc9, 0x45, 0x97, 0xac, 0x42, 0x2b, 0xfc, 0x10, 0xd5, 0x7a, 0xae, 0xac, 0x7c, - 0xb7, 0xd4, 0xc1, 0x84, 0x60, 0xd3, 0x2d, 0xff, 0xa6, 0x9e, 0x9a, 0x6d, 0x87, 0x91, 0x80, 0x06, - 0x05, 0x07, 0x6a, 0x18, 0xea, 0x8f, 0x7a, 0xff, 0xc1, 0xdf, 0x83, 0x8f, 0xdb, 0x6c, 0xb5, 0x8a, - 0xb0, 0x90, 0xb1, 0x4c, 0xb0, 0x5f, 0x0c, 0x54, 0x0c, 0xa3, 0xb7, 0x81, 0xa0, 0x48, 0x2c, 0xb9, - 0xf3, 0xc3, 0xc7, 0xb5, 0xaf, 0x1f, 0xd7, 0xb8, 0x8c, 0x4c, 0x44, 0x14, 0x65, 0xee, 0x73, 0xc5, - 0x62, 0xb2, 0xd8, 0xac, 0x5d, 0x70, 0x42, 0x20, 0x15, 0xd5, 0x70, 0x75, 0xf9, 0x44, 0x35, 0x38, - 0x71, 0xe3, 0xcf, 0x0b, 0x82, 0xca, 0x1a, 0x81, 0x44, 0x48, 0xde, 0xaa, 0xee, 0xb2, 0x63, 0x31, - 0xe7, 0x83, 0xa5, 0x80, 0xe2, 0x2c, 0x16, 0xa5, 0xd3, 0xaf, 0xc3, 0x8a, 0x00, 0xdd, 0x92, 0xdf, - 0x7b, 0x7f, 0xd2, 0xba, 0x49, 0x60, 0xfd, 0xf6, 0xdb, 0x36, 0x97, 0x7f, 0x0e, 0x28, 0x25, 0x03, - 0x49, 0x69, 0xbf, 0x4d, 0x3b, 0x7b, 0x6d, 0xe3, 0xca, 0xd3, 0x49, 0xa7, 0xb6, 0xde, 0x04, 0x08, - 0x46, 0xee, 0xef, 0x8e, 0x2d, 0xbe, 0xa7, 0xe1, 0xae, 0x93, 0x6b, 0x4c, 0x5b, 0xff, 0x82, 0x4e, - 0xab, 0x17, 0xc1, 0x16, 0x6d, 0x26, 0x70, 0x70, 0x43, 0x1b, 0x0b, 0x55, 0xd4, 0xdd, 0x9a, 0xfb, - 0x8a, 0xdd, 0x5e, 0x10, 0xa4, 0x03, 0x69, 0x8b, 0x8e, 0x77, 0xc3, 0x8a, 0x01, 0x29, 0x9a, 0x23, - 0xb9, 0xdf, 0xb7, 0xea, 0x99, 0x0c, 0x6d, 0x8c, 0x41, 0x16, 0xc1, 0x99, 0x7f, 0xe1, 0xc5, 0x00, - 0x27, 0x05, 0x6e, 0x86, 0x42, 0x02, 0xcf, 0xc2, 0xd9, 0x65, 0x93, 0xc6, 0x28, 0x58, 0xa1, 0x69, - 0xe6, 0xbf, 0x0a, 0x00, 0xe0, 0xa1, 0xfb, 0x50, 0x06, 0x60, 0xf8, 0x00, 0x99, 0xab, 0xa7, 0xc3, - 0xca, 0x03, 0xcd, 0xe1, 0x27, 0x8b, 0xff, 0xa6, 0x9a, 0x64, 0xf8, 0xc4, 0xc5, 0xb1, 0x23, 0xa3, - 0xeb, 0xff, 0x82, 0x38, 0xbc, 0x5d, 0x31, 0x05, 0xd1, 0x3d, 0x1f, 0x58, 0x68, 0x90, 0x01, 0x45, - 0x5e, 0xc2, 0xad, 0xfb, 0x8e, 0xee, 0x21, 0xf3, 0xad, 0x5e, 0xa2, 0xb7, 0xcb, 0xc6, 0x94, 0x35, - 0x50, 0xe2, 0x80, 0x3f, 0x87, 0xc8, 0x90, 0xe8, 0x00, 0x84, 0x00, 0xb3, 0xd4, 0xea, 0x2d, 0xa6, - 0x59, 0x69, 0xa6, 0x2e, 0xa5, 0xe6, 0xe9, 0x8b, 0x63, 0xb7, 0x77, 0x03, 0x2c, 0x04, 0x27, 0x56, - 0xe7, 0xe9, 0xe9, 0xc3, 0x91, 0x00, 0x01, 0xda, 0x6c, 0x22, 0x5b, 0x54, 0x13, 0x59, 0xf7, 0xe2, - 0xf6, 0xf0, 0x7f, 0xdb, 0x6e, 0x3e, 0x9a, 0x69, 0x83, 0xfe, 0x4e, 0x5d, 0x85, 0xd9, 0x64, 0x55, - 0xb7, 0x88, 0x6b, 0xfe, 0x18, 0x89, 0x1e, 0x2b, 0x1a, 0x01, 0xa0, 0x17, 0x82, 0xa0, 0x78, 0x55, - 0x79, 0xc0, 0x0e, 0x01, 0x40, 0x3c, 0x74, 0x80, 0xe3, 0x13, 0x83, 0x8d, 0xc4, 0x3b, 0xfe, 0x13, - 0x16, 0x4c, 0x97, 0x67, 0xfc, 0x67, 0x66, 0x7b, 0xc5, 0x86, 0x11, 0x00, 0x27, 0x56, 0xcc, 0x10, - 0xaf, 0x4e, 0x3f, 0xf4, 0xd3, 0x04, 0x0d, 0x85, 0x14, 0x72, 0x27, 0xd3, 0x4f, 0xfd, 0x70, 0xe2, - 0x80, 0x2f, 0x52, 0x8e, 0x37, 0xff, 0xed, 0xf2, 0xdb, 0xff, 0x01, 0x80, 0x24, 0x6e, 0x54, 0x47, - 0xe9, 0x17, 0x05, 0x65, 0x83, 0x4a, 0xa2, 0x79, 0x68, 0x2f, 0x64, 0x79, 0xc0, 0x48, 0x96, 0xd9, - 0x7f, 0xf8, 0x12, 0x20, 0xa6, 0x4e, 0xf1, 0xbc, 0x57, 0x15, 0xac, 0x9c, 0x2a, 0x4c, 0x54, 0x01, - 0x17, 0x11, 0x17, 0x49, 0x4b, 0x9f, 0x0e, 0x29, 0x9e, 0xb1, 0x7d, 0x6b, 0xe1, 0xba, 0xdb, 0xae, - 0x78, 0x2f, 0x92, 0x04, 0x90, 0x80, 0x2c, 0x3d, 0xdc, 0x43, 0xc9, 0xf7, 0x37, 0x1e, 0xfe, 0x14, - 0x15, 0x16, 0x8c, 0x31, 0x80, 0x0c, 0x26, 0x25, 0xe6, 0x33, 0x07, 0x9e, 0x99, 0x79, 0xbe, 0x7e, - 0xdd, 0xab, 0xba, 0xca, 0x87, 0x15, 0x62, 0xbc, 0x34, 0xa0, 0x02, 0x59, 0x2d, 0xb3, 0x44, 0x3a, - 0xf7, 0xfa, 0x4e, 0x7e, 0xde, 0xdb, 0x6d, 0xec, 0xff, 0x3f, 0x3f, 0x7f, 0x0d, 0xe8, 0xef, 0x01, - 0x20, 0x02, 0xa0, 0x6c, 0x28, 0x00, 0x06, 0x14, 0x72, 0x0b, 0x8f, 0x02, 0xc2, 0x91, 0x29, 0x30, - 0x29, 0x5e, 0xa6, 0x60, 0xfb, 0x49, 0x05, 0x4e, 0x01, 0xc6, 0xc5, 0x0c, 0x94, 0x56, 0x20, 0x96, - 0xcc, 0xa8, 0x4b, 0xcb, 0x03, 0xfa, 0xfe, 0x1d, 0x50, 0x0d, 0x1d, 0xa2, 0x06, 0xfd, 0xfe, 0xf6, - 0xb3, 0xb7, 0x8e, 0xdd, 0xfe, 0xd9, 0xff, 0xee, 0x98, 0xb6, 0xaa, 0x50, 0xf1, 0x93, 0xfd, 0x3f, - 0x05, 0xd1, 0x71, 0x71, 0x71, 0x4d, 0xf7, 0x05, 0x80, 0xd1, 0x3c, 0x9b, 0xdf, 0xc1, 0x56, 0x2b, - 0x71, 0x58, 0xa3, 0x2c, 0x06, 0x28, 0xc5, 0x01, 0x89, 0x70, 0xb0, 0x1c, 0x4b, 0x81, 0xf2, 0x97, - 0x0e, 0x92, 0x00, 0x12, 0xcf, 0x32, 0x38, 0x86, 0xa0, 0xbd, 0xde, 0x5d, 0xb9, 0xb8, 0xed, 0xdb, - 0xad, 0xb3, 0x7c, 0x5f, 0xd3, 0x20, 0xe5, 0x65, 0x3f, 0xc3, 0xcc, 0xc0, 0x0b, 0xee, 0x06, 0x84, - 0x9a, 0x1c, 0x19, 0xa4, 0xef, 0xc8, 0x9f, 0x14, 0xb4, 0xdd, 0xd6, 0x7d, 0x74, 0xd3, 0x37, 0x1d, - 0xbc, 0x78, 0xd0, 0x30, 0x50, 0x0a, 0x7c, 0x56, 0xb4, 0xf8, 0x71, 0x40, 0x07, 0xec, 0x6c, 0x1d, - 0x97, 0x52, 0x86, 0xf8, 0x64, 0x57, 0x77, 0xda, 0xb5, 0x1e, 0xe8, 0xb0, 0x1e, 0x83, 0x08, 0x7e, - 0x3d, 0xa8, 0xd6, 0x78, 0x96, 0x71, 0x61, 0x6e, 0xe3, 0xab, 0x96, 0x59, 0x77, 0x4c, 0x5b, 0x06, - 0x19, 0x81, 0x09, 0x46, 0xbb, 0xdb, 0x2f, 0x8f, 0x10, 0x03, 0x60, 0x69, 0x2e, 0x42, 0x00, 0x25, - 0x1f, 0x68, 0x9c, 0xa9, 0xb2, 0x4c, 0x15, 0x76, 0x3b, 0x00, 0x01, 0x00, 0xbc, 0x0d, 0x09, 0xca, - 0xa1, 0x60, 0x00, 0x20, 0x13, 0x1c, 0x40, 0x00, 0xfa, 0xd9, 0x7c, 0x79, 0xe1, 0xf8, 0x35, 0x0f, - 0x72, 0x84, 0x98, 0x4c, 0x9f, 0xa2, 0x61, 0x53, 0xce, 0xff, 0xe5, 0x12, 0xf2, 0xdb, 0x85, 0x38, - 0x5f, 0xc5, 0xe0, 0xe2, 0x5e, 0xab, 0xc6, 0x71, 0xf8, 0x16, 0x63, 0x65, 0xe2, 0x8c, 0x74, 0xb0, - 0xfe, 0x0a, 0x37, 0xc9, 0x87, 0x00, 0x79, 0x66, 0x5d, 0x03, 0x9f, 0x1a, 0x7e, 0x0f, 0x78, 0xad, - 0x40, 0xe0, 0x00, 0x20, 0x03, 0xc0, 0x00, 0x40, 0x21, 0x05, 0x00, 0x15, 0x18, 0xf0, 0x1e, 0xdf, - 0x07, 0xbf, 0x86, 0xd4, 0x00, 0x6f, 0xc1, 0xc6, 0x8e, 0x5c, 0x21, 0xef, 0xdf, 0xe3, 0xcb, 0x56, - 0x9a, 0x6a, 0x96, 0xb2, 0xb9, 0x47, 0xdd, 0x54, 0xb2, 0xc5, 0xb0, 0xd6, 0xbd, 0xb1, 0x2e, 0xfd, - 0x38, 0x71, 0x40, 0x07, 0xdd, 0x84, 0xf6, 0x11, 0x7b, 0xef, 0xf3, 0x8d, 0xcf, 0xcb, 0xb2, 0xed, - 0x99, 0x2c, 0xb6, 0xad, 0xe2, 0xad, 0xb3, 0xf2, 0xc5, 0x90, 0x7b, 0x64, 0xdf, 0xb7, 0x0e, 0xe0, - 0x01, 0x6e, 0xa0, 0x33, 0x5b, 0x30, 0x5c, 0x5d, 0x5e, 0x4e, 0x15, 0x7e, 0x38, 0x37, 0xe2, 0xad, - 0xb5, 0x9f, 0x16, 0x03, 0xc6, 0x55, 0x94, 0xb6, 0xe6, 0x20, 0x1f, 0xc6, 0xde, 0x5f, 0x8b, 0x71, - 0x86, 0x58, 0xda, 0x03, 0x54, 0x6b, 0x0d, 0xdc, 0x06, 0xcc, 0x0f, 0x61, 0xf0, 0xeb, 0x80, 0x05, - 0x2c, 0xe4, 0xc5, 0x2a, 0xd3, 0xc1, 0x3b, 0x6c, 0xde, 0x3f, 0xd6, 0x3b, 0x71, 0xc0, 0xde, 0x2b, - 0xc6, 0xda, 0xca, 0x84, 0x23, 0xd0, 0x67, 0x86, 0xa8, 0x03, 0x4e, 0x22, 0x71, 0xfe, 0x1b, 0x45, - 0x00, 0x49, 0x54, 0x87, 0x72, 0xc9, 0xdf, 0xfb, 0x22, 0x51, 0x2b, 0x88, 0x86, 0x3c, 0xb3, 0xbb, - 0xb6, 0x48, 0x94, 0x6b, 0xb0, 0x8e, 0x5e, 0x77, 0x92, 0x38, 0x2f, 0x39, 0x80, 0x32, 0xa6, 0x6e, - 0xff, 0xf0, 0x84, 0x69, 0x84, 0xfc, 0xbd, 0x35, 0x1e, 0xfc, 0x2c, 0xa9, 0x60, 0x18, 0x3d, 0x73, - 0xc0, 0x00, 0x96, 0x13, 0x00, 0x55, 0xfd, 0x42, 0x21, 0x14, 0xe9, 0x7c, 0x26, 0x08, 0xce, 0xaf, - 0xc9, 0xca, 0x54, 0x37, 0xd7, 0x0f, 0x5e, 0xb9, 0x58, 0x8a, 0x37, 0x14, 0x62, 0x1c, 0x24, 0x05, - 0x42, 0x12, 0x4c, 0x77, 0x4e, 0x0f, 0x5f, 0xe1, 0xc5, 0x00, 0x67, 0x0c, 0x34, 0x48, 0x17, 0xd6, - 0x99, 0x39, 0x7c, 0x94, 0xea, 0x5d, 0xff, 0x4d, 0x5b, 0x14, 0xac, 0xb7, 0x8f, 0xf0, 0xda, 0x80, - 0x16, 0xcf, 0x12, 0xb5, 0xec, 0x1b, 0xf7, 0x4c, 0x43, 0xcf, 0xd6, 0xb3, 0x78, 0xad, 0xb1, 0x2f, - 0x1b, 0x4e, 0x9a, 0x7f, 0x0c, 0x12, 0x00, 0x36, 0xef, 0x16, 0xbd, 0x79, 0xef, 0xa8, 0xdd, 0xb9, - 0x6d, 0xfe, 0xeb, 0xa8, 0xae, 0x4b, 0xf4, 0xe4, 0xb0, 0xba, 0x80, 0x4a, 0xfc, 0x8c, 0x2e, 0x64, - 0x2d, 0x5f, 0x27, 0xe5, 0xe9, 0x9f, 0x9f, 0xe7, 0xe7, 0xfa, 0xbc, 0x57, 0x08, 0xfc, 0x46, 0xf8, - 0x79, 0x40, 0x08, 0xaa, 0x76, 0x09, 0x97, 0x9b, 0xde, 0xba, 0x60, 0xff, 0xe9, 0x93, 0xb7, 0x5d, - 0x6d, 0x8a, 0xe4, 0xfc, 0xbf, 0x25, 0x4d, 0x9f, 0xdf, 0xc6, 0x70, 0xd1, 0x85, 0x18, 0x58, 0x01, - 0x56, 0x8e, 0x07, 0x81, 0x4a, 0xe9, 0x83, 0xff, 0xfc, 0x36, 0xe0, 0x04, 0xac, 0xc6, 0x73, 0x92, - 0xb2, 0x03, 0xb0, 0xd1, 0x18, 0x7f, 0xc1, 0x60, 0x77, 0x81, 0xdb, 0x43, 0xa4, 0x1b, 0xc7, 0x97, - 0x86, 0xa4, 0x1a, 0x61, 0x84, 0x12, 0x39, 0x40, 0xea, 0x5c, 0x21, 0x03, 0x7b, 0x24, 0x71, 0x66, - 0xf8, 0x77, 0x00, 0x1c, 0x11, 0x8b, 0x5f, 0x02, 0x35, 0x18, 0xdd, 0xea, 0x6f, 0x8e, 0xdd, 0xdd, - 0x55, 0x77, 0x0a, 0x3f, 0x8e, 0xbe, 0x38, 0xfe, 0xb0, 0x11, 0x04, 0x27, 0x93, 0xf6, 0xe1, 0xdc, - 0x00, 0x7f, 0x63, 0xea, 0x73, 0xf3, 0xa8, 0x2a, 0x06, 0xaa, 0xc3, 0x79, 0x60, 0xc7, 0x01, 0xbd, - 0x7f, 0x46, 0x3d, 0xf6, 0xf8, 0xdf, 0xcb, 0x5d, 0x72, 0xd6, 0xdb, 0x62, 0xac, 0x1c, 0x86, 0xcc, - 0xce, 0xfa, 0xd9, 0xe3, 0x2f, 0xfc, 0x20, 0x03, 0xc0, 0x6c, 0x39, 0x72, 0x87, 0xc2, 0x52, 0xc1, - 0x9c, 0x38, 0x4a, 0x54, 0xb3, 0x6e, 0x9d, 0xe2, 0x83, 0x3c, 0x70, 0x3c, 0xf5, 0x65, 0x8e, 0xd3, - 0x68, 0x36, 0xa9, 0xbb, 0x7f, 0xf1, 0x30, 0x50, 0x57, 0x85, 0x41, 0x52, 0xc7, 0x8a, 0x31, 0x47, - 0x94, 0x27, 0xcf, 0x55, 0x9a, 0xfe, 0x01, 0x58, 0x04, 0x23, 0x48, 0x16, 0x32, 0x0d, 0x97, 0xf4, - 0xd9, 0x60, 0x14, 0x1c, 0x03, 0x51, 0x40, 0xe3, 0x0d, 0x45, 0x90, 0x3f, 0x9c, 0xf8, 0x25, 0xe5, - 0xf5, 0xee, 0x90, 0x40, 0x0b, 0x20, 0x0b, 0x41, 0xd9, 0x43, 0x18, 0xa6, 0x33, 0xfc, 0xa3, 0x69, - 0xfc, 0x10, 0x0d, 0x8e, 0x01, 0x6c, 0x1c, 0x03, 0xb0, 0x94, 0x00, 0x08, 0xf8, 0xf0, 0x01, 0xc2, - 0xc0, 0xa1, 0x40, 0xa3, 0xc0, 0x70, 0x74, 0xf0, 0x75, 0xe0, 0xef, 0x95, 0x9f, 0xc7, 0xe6, 0xec, - 0x17, 0x08, 0x24, 0x75, 0x1c, 0x1f, 0x1c, 0x0f, 0xe9, 0xfc, 0x39, 0x80, 0x06, 0x70, 0x1a, 0xa2, - 0x5d, 0x49, 0x66, 0x1d, 0xac, 0xff, 0xc5, 0x31, 0x0d, 0xb4, 0x6c, 0xd1, 0x57, 0xa0, 0x71, 0xf9, - 0x40, 0xd5, 0x16, 0x00, 0x34, 0x73, 0x7b, 0x73, 0xb7, 0x4c, 0xed, 0xff, 0x0f, 0x28, 0x03, 0xe1, - 0x55, 0x09, 0xa9, 0x9e, 0x18, 0xbd, 0xfb, 0xeb, 0xac, 0x70, 0xfe, 0x39, 0xf9, 0x6b, 0x2d, 0x77, - 0x15, 0x6b, 0x7c, 0x28, 0xb2, 0xd6, 0x50, 0xea, 0x54, 0x3d, 0x4b, 0x59, 0x6b, 0xcd, 0x8f, 0xfe, - 0x1c, 0x50, 0x05, 0xb4, 0x50, 0x0e, 0x78, 0x46, 0x02, 0xac, 0x41, 0xce, 0xee, 0xab, 0x75, 0x8e, - 0x06, 0xf2, 0x5f, 0xc7, 0x6e, 0xeb, 0x1d, 0xf9, 0x60, 0xb6, 0x69, 0x40, 0xd5, 0x2c, 0x05, 0x9c, - 0x00, 0xe8, 0xe1, 0xfc, 0x73, 0xf0, 0x33, 0x1c, 0x72, 0x22, 0xd6, 0xcf, 0xf0, 0xf1, 0x20, 0x16, - 0x4b, 0x36, 0x09, 0xe9, 0x8c, 0xf7, 0xfe, 0x45, 0x8b, 0xac, 0xa8, 0x6f, 0x0a, 0xf1, 0xdb, 0xf5, - 0xd7, 0x58, 0x3b, 0x70, 0x73, 0xf0, 0xd2, 0x31, 0xdb, 0xd3, 0x0a, 0x19, 0x34, 0x4a, 0x80, 0xe3, - 0x08, 0xb8, 0xc5, 0xda, 0x13, 0x8d, 0xf8, 0x1e, 0x04, 0x8d, 0xaf, 0xa6, 0xe8, 0x85, 0x45, 0x45, - 0xc2, 0xc0, 0x1a, 0xb3, 0xcb, 0x01, 0x45, 0x11, 0xab, 0x60, 0x2b, 0x45, 0x94, 0xc8, 0x59, 0xfe, - 0x99, 0xea, 0xc7, 0x6e, 0x1e, 0xac, 0xf5, 0xfe, 0x1e, 0x9c, 0x01, 0x45, 0x56, 0x61, 0xd2, 0x3f, - 0xcb, 0xfc, 0xdf, 0x39, 0xfd, 0x32, 0x44, 0xf7, 0x9b, 0xb7, 0xb3, 0xd6, 0x3b, 0xfb, 0xb8, 0x1a, - 0xdb, 0x6b, 0xf5, 0xc1, 0x3d, 0xab, 0x6b, 0x77, 0x3e, 0x6a, 0xb8, 0x4b, 0xb1, 0xad, 0xa9, 0xd4, - 0xe0, 0x26, 0x63, 0x62, 0x03, 0xe5, 0xe2, 0x98, 0xd2, 0x19, 0xe3, 0x84, 0x81, 0x56, 0x30, 0x86, - 0x0e, 0x8b, 0x9b, 0xb3, 0x49, 0x82, 0xb1, 0xb1, 0x51, 0x20, 0xaf, 0xb2, 0xf9, 0xff, 0xe1, 0x00, - 0x62, 0x36, 0x0b, 0xa0, 0xd3, 0x0f, 0x79, 0xe0, 0x03, 0xc7, 0x4f, 0xb0, 0x83, 0xca, 0x9e, 0xe3, - 0xfc, 0x63, 0xc7, 0x8c, 0xc5, 0x58, 0x29, 0x1e, 0x45, 0x8b, 0x08, 0x40, 0x10, 0x18, 0x25, 0xa8, - 0x18, 0x45, 0x20, 0xf2, 0xe2, 0x84, 0x2a, 0xcf, 0x87, 0x09, 0x00, 0x37, 0x93, 0xfc, 0x45, 0xdb, - 0x37, 0x3f, 0x37, 0xdd, 0xdb, 0xed, 0xb6, 0x9a, 0x6d, 0xb6, 0x35, 0x8f, 0xc6, 0x9d, 0x6d, 0xfc, - 0x39, 0x80, 0x66, 0xc2, 0x0e, 0x3e, 0xca, 0x5f, 0xe9, 0x90, 0xce, 0x82, 0x4c, 0x36, 0xe6, 0xd3, - 0x6d, 0xbf, 0x87, 0x14, 0x00, 0xa3, 0x92, 0x32, 0x04, 0x19, 0x6c, 0x79, 0xe5, 0xd7, 0x5b, 0xa9, - 0xfb, 0xba, 0xc7, 0x6e, 0x0e, 0xdc, 0x5d, 0x2a, 0xef, 0xe3, 0xb8, 0x22, 0xb6, 0x40, 0x31, 0x0e, - 0x1d, 0x79, 0x5b, 0x0e, 0x10, 0x80, 0x08, 0xc7, 0xc7, 0x3c, 0xe5, 0x61, 0xdf, 0xd1, 0x33, 0x5c, - 0x76, 0xe7, 0x74, 0x79, 0x6d, 0x72, 0xec, 0xf5, 0xb1, 0x3e, 0x2b, 0x91, 0x01, 0x7c, 0x97, 0xd9, - 0xfb, 0xe9, 0xf0, 0xec, 0xe0, 0x0f, 0xcd, 0xba, 0x61, 0xa3, 0x9f, 0x15, 0xf7, 0xde, 0xe9, 0x8f, - 0x75, 0x9f, 0xef, 0xed, 0xf8, 0x62, 0x94, 0x01, 0x7a, 0x69, 0xfc, 0x3a, 0xa0, 0x1a, 0xa4, 0x82, - 0x8b, 0x4c, 0x9f, 0x8f, 0xf1, 0xdb, 0xeb, 0x7b, 0xfb, 0x62, 0x5f, 0x71, 0x8c, 0x4e, 0xea, 0xda, - 0xfc, 0x36, 0xe0, 0x02, 0xf1, 0xa6, 0x16, 0x56, 0x65, 0x38, 0x4c, 0x97, 0x42, 0xba, 0x4e, 0xdb, - 0x79, 0xe6, 0x03, 0xfe, 0x3a, 0x28, 0x46, 0x2d, 0x8b, 0x69, 0xa6, 0x3a, 0x6a, 0xcb, 0x56, 0xfc, - 0x25, 0xc7, 0xd3, 0xa7, 0xa1, 0xa6, 0xef, 0xbb, 0xe1, 0xa2, 0x0e, 0xa8, 0x76, 0x1a, 0xf6, 0x12, - 0x9c, 0xc0, 0x75, 0x0b, 0x8f, 0xfe, 0x02, 0x00, 0x0e, 0x21, 0xf2, 0x16, 0x03, 0x15, 0x8a, 0x28, - 0xf8, 0x28, 0x01, 0x9e, 0x1c, 0x12, 0x00, 0x58, 0x26, 0x39, 0x05, 0x8a, 0x96, 0x61, 0xf0, 0x94, - 0xee, 0x03, 0x80, 0x01, 0x01, 0xd2, 0x4a, 0x7f, 0xbb, 0x82, 0x38, 0xbf, 0x9f, 0x1c, 0xe0, 0x0d, - 0x3d, 0xa3, 0x17, 0x8c, 0x30, 0x8e, 0x00, 0x23, 0xd8, 0xac, 0xcb, 0x04, 0x41, 0x37, 0xfb, 0xe9, - 0x95, 0x3f, 0x27, 0x1f, 0x4c, 0x9f, 0x9d, 0xb8, 0x21, 0x12, 0x30, 0x83, 0x39, 0x71, 0x60, 0x65, - 0x83, 0x07, 0xbd, 0x48, 0x65, 0x1c, 0xf2, 0xc3, 0x76, 0x8a, 0x0c, 0xb0, 0x62, 0xb1, 0x58, 0x55, - 0x52, 0x4a, 0x41, 0xc3, 0xca, 0x2d, 0x78, 0x44, 0x6c, 0xb0, 0x63, 0xde, 0x9e, 0xe1, 0x60, 0xc3, - 0xe1, 0x61, 0xf0, 0x0f, 0xf5, 0x42, 0x1f, 0xa6, 0x77, 0x05, 0x33, 0x87, 0x9a, 0x0c, 0xab, 0x90, - 0x8f, 0x62, 0x61, 0x1d, 0xc9, 0x97, 0xf8, 0x6d, 0xc0, 0x35, 0x51, 0x0c, 0x7b, 0x98, 0x7d, 0xa6, - 0x72, 0xd9, 0x6b, 0x07, 0x7e, 0xae, 0xef, 0xa2, 0x52, 0x98, 0x3a, 0x88, 0x0f, 0xca, 0x30, 0x99, - 0x3b, 0x79, 0xde, 0x12, 0x64, 0x44, 0x3c, 0x07, 0x98, 0xc9, 0xea, 0xf7, 0xfb, 0xbd, 0xd1, 0xae, - 0x7a, 0xbd, 0xb6, 0xff, 0xc2, 0xfb, 0xc4, 0x0f, 0x85, 0x00, 0x15, 0x2f, 0x28, 0x10, 0x55, 0x2f, - 0xd6, 0x2f, 0xf0, 0xe4, 0xa0, 0x0c, 0x10, 0x72, 0x59, 0x05, 0xc6, 0xbc, 0xd1, 0xcf, 0xfe, 0xe5, - 0xbe, 0xae, 0x14, 0xb3, 0x8d, 0x5b, 0x6f, 0xe1, 0xe5, 0x00, 0x04, 0x46, 0x36, 0x99, 0x4a, 0xe8, - 0x4a, 0x49, 0xc5, 0x17, 0xb1, 0x4f, 0xaa, 0x69, 0x8b, 0xad, 0x53, 0x48, 0x1d, 0xf8, 0xb0, 0x02, - 0xb4, 0x86, 0x10, 0xed, 0xa5, 0x74, 0xc6, 0xfb, 0xe1, 0xd2, 0x10, 0x00, 0x4f, 0x66, 0x33, 0x68, - 0x31, 0xb0, 0x87, 0xef, 0x54, 0xd3, 0x4d, 0x3e, 0x0c, 0x7e, 0x2c, 0x16, 0xec, 0x7e, 0xee, 0x0e, - 0xfd, 0xbc, 0x9c, 0x28, 0x06, 0xa2, 0x11, 0x52, 0x1c, 0x1f, 0xca, 0x8e, 0xba, 0x78, 0x79, 0x40, - 0x0e, 0x95, 0x79, 0xc0, 0xca, 0x29, 0xaf, 0xab, 0x67, 0xd2, 0xec, 0xbb, 0x3e, 0xae, 0x52, 0xec, - 0xbb, 0x1b, 0xad, 0xe3, 0x4f, 0xe1, 0xb5, 0x02, 0x4b, 0x69, 0x7e, 0x37, 0x72, 0xf6, 0xfe, 0x9c, - 0xb5, 0xbf, 0xa6, 0xdf, 0x5b, 0x71, 0xc6, 0x28, 0x76, 0x6f, 0xff, 0x87, 0x14, 0x00, 0xf6, 0xff, - 0x00, 0x93, 0x4b, 0xcf, 0x2f, 0x4d, 0x5c, 0x9d, 0xbf, 0x4d, 0x34, 0xd9, 0xe3, 0xe2, 0x5a, 0xfb, - 0x6d, 0xff, 0x86, 0x35, 0x37, 0x3c, 0xe2, 0xcf, 0x38, 0x27, 0x80, 0x70, 0x07, 0x08, 0xb7, 0x14, - 0x16, 0x28, 0x2f, 0xfd, 0x4c, 0x35, 0x70, 0x46, 0x5a, 0x6d, 0x5a, 0x2f, 0x8a, 0x85, 0x85, 0x4f, - 0x07, 0x37, 0x7d, 0xf8, 0x40, 0x29, 0xbb, 0x9f, 0xbf, 0x4a, 0xf7, 0x57, 0x3f, 0xb4, 0xeb, 0x84, - 0x44, 0x45, 0x18, 0xad, 0xdc, 0x56, 0x2b, 0x77, 0x09, 0x72, 0xd7, 0x4c, 0x9c, 0x35, 0xde, 0xea, - 0xdf, 0xbb, 0x7f, 0xc4, 0x07, 0x89, 0x10, 0x3d, 0x71, 0x20, 0x0e, 0x09, 0x01, 0xc3, 0xe3, 0xb2, - 0x24, 0xfa, 0x84, 0x80, 0x41, 0xc2, 0x01, 0x43, 0x03, 0x51, 0x3a, 0x26, 0xfc, 0x1a, 0x12, 0xa0, - 0xfc, 0x08, 0x00, 0x49, 0x0a, 0x45, 0x62, 0xbd, 0xa7, 0x7d, 0x60, 0xf7, 0x95, 0x55, 0x14, 0xdf, - 0x81, 0x04, 0x0a, 0x21, 0x43, 0x9f, 0xe7, 0x60, 0xb4, 0x2f, 0x3c, 0x73, 0x2f, 0x87, 0x99, 0x8b, - 0xdc, 0x40, 0xf7, 0xe0, 0xa2, 0x14, 0x10, 0x51, 0x4a, 0x71, 0xeb, 0xf0, 0x7f, 0xdb, 0x37, 0x6e, - 0xd5, 0x07, 0x3b, 0x0c, 0xe6, 0x8c, 0xea, 0xf6, 0x4f, 0xfe, 0xe0, 0x40, 0x04, 0x23, 0x64, 0x52, - 0x61, 0x76, 0x64, 0x39, 0x70, 0x75, 0x41, 0x2c, 0x7e, 0x97, 0x65, 0xe0, 0xc3, 0xaa, 0x65, 0x06, - 0x52, 0xb2, 0xa1, 0x33, 0x90, 0xf0, 0xb8, 0xe4, 0xf8, 0x60, 0xd8, 0x17, 0xa9, 0x99, 0xa8, 0x3b, - 0x64, 0xfc, 0x2e, 0x59, 0xfe, 0x22, 0x0a, 0x6f, 0xba, 0xd6, 0x5b, 0x71, 0xc4, 0x7f, 0xeb, 0x0e, - 0x4e, 0x00, 0x6a, 0x4f, 0x60, 0x94, 0x23, 0xab, 0xf9, 0x09, 0x1e, 0x24, 0xf1, 0x23, 0xcf, 0xf7, - 0x72, 0xd6, 0xee, 0xbf, 0x0e, 0xee, 0x5f, 0x8e, 0xae, 0x7b, 0xee, 0x06, 0xec, 0x06, 0x12, 0xc7, - 0x6d, 0x97, 0xc3, 0xca, 0x00, 0x08, 0x86, 0xa8, 0xcd, 0x54, 0x54, 0xf3, 0xa1, 0x29, 0x87, 0xee, - 0x2e, 0xe2, 0x7d, 0xfd, 0x5c, 0x47, 0xc7, 0x83, 0x1f, 0x8b, 0xc6, 0xc1, 0x85, 0x55, 0x91, 0x77, - 0x84, 0x03, 0xaf, 0xe0, 0x30, 0x41, 0x48, 0xd1, 0x02, 0x40, 0x70, 0x98, 0x00, 0x15, 0x1d, 0xf4, - 0x38, 0x36, 0x28, 0x70, 0x5c, 0xea, 0xca, 0x02, 0x52, 0x70, 0x02, 0xa7, 0x80, 0x01, 0x4e, 0x1c, - 0x15, 0x04, 0x52, 0xb0, 0x05, 0x86, 0x60, 0x00, 0x20, 0x11, 0x81, 0x92, 0x04, 0xa1, 0xe0, 0x1a, - 0x1c, 0x00, 0x70, 0x7f, 0x83, 0xfc, 0x10, 0x53, 0x04, 0x88, 0x4a, 0x1e, 0xd7, 0x37, 0x7f, 0x0f, - 0x60, 0x16, 0x90, 0x7c, 0xc9, 0x01, 0x8e, 0x7c, 0x7c, 0xef, 0xc9, 0x3a, 0xec, 0xe9, 0x9d, 0xec, - 0xec, 0xf3, 0xdb, 0x6c, 0x2d, 0xa9, 0xeb, 0xb7, 0xd3, 0x86, 0x09, 0x00, 0x1c, 0x3b, 0x26, 0xc8, - 0x17, 0x07, 0x81, 0x3c, 0x73, 0x4d, 0x3e, 0xdb, 0x6d, 0xb6, 0xd8, 0xab, 0x15, 0x73, 0xe1, 0x62, - 0x40, 0x0e, 0x09, 0x63, 0x25, 0x1d, 0x25, 0x71, 0x3d, 0x32, 0xfd, 0xf8, 0xab, 0x15, 0x77, 0x07, - 0x7e, 0xff, 0x81, 0x04, 0x04, 0x00, 0x29, 0x28, 0x80, 0x03, 0x87, 0x00, 0x70, 0x53, 0x3b, 0x81, - 0x40, 0x0a, 0x9c, 0x1c, 0x97, 0x71, 0xb5, 0x88, 0xb0, 0x62, 0x07, 0x07, 0x00, 0x01, 0x01, 0xcd, - 0x86, 0x14, 0x15, 0x70, 0x61, 0x95, 0x6b, 0xf5, 0xfe, 0xf7, 0xf9, 0xc1, 0xc8, 0x44, 0x69, 0x42, - 0xc5, 0x4f, 0xe1, 0xde, 0x71, 0xc1, 0x6c, 0xfc, 0xef, 0x6f, 0x67, 0x9b, 0x97, 0xd8, 0x5f, 0x54, - 0x18, 0x44, 0x03, 0x30, 0x00, 0x08, 0x03, 0x0e, 0x30, 0x71, 0x5c, 0x1c, 0x57, 0x8d, 0x77, 0xf8, - 0x62, 0x9d, 0x39, 0xb8, 0xb8, 0x9f, 0x2f, 0x08, 0x41, 0xb0, 0xcb, 0x6d, 0x8e, 0x2b, 0x9f, 0xfe, - 0x09, 0xa1, 0x80, 0x20, 0x0d, 0x31, 0xf1, 0x70, 0x7b, 0xe7, 0x83, 0xc7, 0x12, 0x1f, 0x97, 0xbe, - 0x5d, 0x52, 0x61, 0xc0, 0x85, 0x2e, 0x20, 0xa5, 0x23, 0x11, 0xe2, 0x2f, 0xf0, 0x80, 0x42, 0x5b, - 0x96, 0xeb, 0x16, 0x90, 0xa0, 0xdc, 0xce, 0x85, 0x62, 0x8e, 0x11, 0x08, 0x02, 0x78, 0x4c, 0x22, - 0x31, 0x7c, 0xa8, 0xa2, 0x38, 0x30, 0x72, 0x8c, 0xa5, 0xe8, 0x41, 0x50, 0xd7, 0xc6, 0xfd, 0xdc, - 0x8a, 0x24, 0xb1, 0x02, 0x61, 0xab, 0x25, 0x0a, 0x02, 0xb4, 0x81, 0xc1, 0x50, 0x59, 0x92, 0x81, - 0x40, 0x70, 0x7a, 0xed, 0x07, 0xb4, 0x25, 0x85, 0xd8, 0x63, 0x0d, 0x0f, 0x05, 0x6f, 0xdb, 0x8e, - 0xe9, 0xf8, 0x20, 0x10, 0x34, 0x5b, 0x99, 0x14, 0x07, 0x46, 0x16, 0x54, 0x48, 0xf0, 0x59, 0x04, - 0xa1, 0xe3, 0xc7, 0x4b, 0x95, 0x5a, 0x65, 0xbd, 0x56, 0x69, 0xe9, 0x76, 0x8d, 0x1e, 0x55, 0x54, - 0x8f, 0x8f, 0xba, 0xdf, 0xfc, 0x11, 0x13, 0x37, 0xcb, 0xe0, 0xba, 0x86, 0xda, 0xd2, 0xbb, 0xf7, - 0x01, 0x02, 0x0e, 0x42, 0x90, 0x6b, 0xa9, 0x66, 0xee, 0x5e, 0x24, 0x0f, 0x2e, 0xd5, 0x2b, 0x79, - 0x76, 0xc9, 0x45, 0x73, 0xc7, 0x8f, 0x3e, 0x25, 0xe7, 0x0f, 0x46, 0x21, 0x88, 0x8d, 0x14, 0xde, - 0x58, 0x0e, 0xc2, 0xa3, 0x91, 0x00, 0x70, 0x60, 0xaa, 0x98, 0x2e, 0x54, 0x58, 0x5c, 0x78, 0x00, - 0x6d, 0x89, 0x0c, 0x05, 0x46, 0xec, 0x0f, 0x18, 0xa4, 0x71, 0x09, 0x00, 0x00, 0x80, 0x06, 0x18, - 0x80, 0x94, 0x90, 0xa9, 0x42, 0x25, 0x0f, 0x8d, 0x41, 0xf4, 0x77, 0xac, 0xfe, 0x7e, 0x1e, 0x24, - 0x0a, 0x61, 0x64, 0xd8, 0x82, 0x75, 0x4e, 0x7e, 0xde, 0xce, 0x4e, 0xce, 0xcf, 0xee, 0xcf, 0xcb, - 0x9f, 0xbf, 0xbf, 0x8e, 0xbe, 0x32, 0xd9, 0xd7, 0xf0, 0x15, 0x20, 0x41, 0x0a, 0x0b, 0x07, 0xbc, - 0x6e, 0x1c, 0x00, 0xe1, 0x63, 0x2d, 0x88, 0x07, 0xb9, 0xc3, 0xd3, 0x80, 0x0a, 0x96, 0x4e, 0x02, - 0xaf, 0xc7, 0x2d, 0xe2, 0xba, 0x7c, 0x34, 0xa0, 0x34, 0x78, 0x74, 0xc6, 0x7e, 0x3f, 0xff, 0xb6, - 0xb1, 0x61, 0xa5, 0x09, 0x46, 0xd7, 0x1f, 0xf4, 0xff, 0x3a, 0x22, 0x86, 0x14, 0x00, 0x74, 0xad, - 0xf2, 0xc3, 0x14, 0x40, 0xa7, 0xa6, 0x9f, 0xe9, 0xa6, 0x9a, 0x7c, 0x59, 0x85, 0x51, 0x40, 0x07, - 0x5f, 0xb8, 0x64, 0x87, 0x3b, 0x7e, 0x26, 0xf4, 0xfd, 0xb6, 0xdb, 0x6f, 0x6d, 0xb8, 0x69, 0x40, - 0x24, 0x01, 0xd2, 0x1d, 0x91, 0x97, 0xff, 0x6f, 0xdd, 0xf0, 0xea, 0x20, 0x00, 0xc8, 0x09, 0x33, - 0x01, 0x55, 0x43, 0xa7, 0x8b, 0x5b, 0x62, 0xac, 0x43, 0xd5, 0xf2, 0xad, 0x6c, 0xe1, 0xf1, 0x03, - 0xc2, 0x23, 0x61, 0xc8, 0x8d, 0xc7, 0x12, 0xf5, 0xfe, 0x24, 0x3e, 0x4c, 0x3b, 0x04, 0xb1, 0x8f, - 0x00, 0x2e, 0x3e, 0xe3, 0xc0, 0x0b, 0x8f, 0xbd, 0xde, 0x05, 0xd2, 0xb1, 0x7f, 0x86, 0x38, 0xa2, - 0xb2, 0x26, 0x68, 0x6f, 0x8b, 0xe8, 0xbd, 0xf2, 0xef, 0x5c, 0x18, 0x88, 0x5e, 0xe1, 0x18, 0x50, - 0x51, 0x47, 0xba, 0x4d, 0xb9, 0x19, 0x51, 0xf1, 0x1d, 0x9e, 0x4f, 0xa8, 0x5c, 0xa9, 0xd9, 0x4d, - 0x6e, 0x14, 0xe6, 0xdc, 0x23, 0x1f, 0x7b, 0xf4, 0xee, 0xa9, 0xd3, 0xc4, 0xc6, 0x49, 0x83, 0x4c, - 0xfb, 0x15, 0x2c, 0x38, 0x8b, 0x15, 0xa8, 0xab, 0xae, 0xbe, 0x20, 0x29, 0x3d, 0x89, 0x76, 0xb3, - 0x03, 0xfe, 0x5a, 0xc5, 0xb1, 0xdb, 0x8f, 0xb9, 0xd8, 0x0e, 0x7e, 0x65, 0x05, 0x85, 0x96, 0x2c, - 0xbb, 0x12, 0xb2, 0x73, 0xc5, 0xeb, 0xac, 0x48, 0x24, 0x2c, 0x65, 0x63, 0x91, 0xf2, 0xaf, 0x83, - 0x80, 0xc0, 0xd1, 0x07, 0x1f, 0x10, 0x7e, 0x05, 0x89, 0x00, 0x1f, 0xa0, 0x32, 0x35, 0x50, 0x43, - 0x5c, 0x0e, 0x0f, 0x17, 0x2c, 0x0c, 0x0e, 0xe0, 0x4a, 0x4c, 0x2e, 0x2e, 0xc0, 0x37, 0x0f, 0x00, - 0x02, 0x10, 0x24, 0x02, 0xa0, 0x81, 0x19, 0x32, 0xff, 0xc1, 0x48, 0x52, 0x9d, 0x1b, 0x24, 0x78, - 0x00, 0x10, 0x9e, 0x00, 0x62, 0x00, 0xe1, 0x20, 0x00, 0x10, 0x52, 0x40, 0xa9, 0x20, 0x56, 0x23, - 0x83, 0xd9, 0x87, 0x74, 0xb1, 0xb3, 0x4e, 0x07, 0x0e, 0x1e, 0x58, 0x03, 0x4f, 0x86, 0x62, 0xc0, - 0x0f, 0x50, 0x92, 0xec, 0xc2, 0x76, 0xe8, 0x9f, 0x78, 0x79, 0x76, 0x73, 0xbf, 0xff, 0xb9, 0xf9, - 0xfb, 0xfb, 0xf8, 0xd2, 0xd8, 0x78, 0x90, 0x0c, 0x7a, 0x46, 0xa0, 0x43, 0xdf, 0xb4, 0xff, 0x9b, - 0xdb, 0xd4, 0x9d, 0xfc, 0x73, 0xbf, 0x13, 0x1b, 0xb6, 0xe7, 0x52, 0x29, 0x8a, 0x6a, 0x2a, 0x2c, - 0x34, 0xcf, 0x7e, 0x25, 0xc2, 0x46, 0x8a, 0xd5, 0xda, 0x70, 0xb0, 0x12, 0x04, 0x80, 0x00, 0x47, - 0x17, 0x03, 0x86, 0x58, 0x00, 0x5f, 0xe2, 0x02, 0x21, 0xd8, 0x3c, 0x5c, 0x56, 0x3c, 0x5e, 0xc4, - 0x9c, 0x1c, 0x52, 0xf9, 0x97, 0xe1, 0x80, 0x01, 0x84, 0x00, 0x35, 0x83, 0x72, 0x8a, 0x01, 0x65, - 0x0d, 0xdf, 0xc4, 0x06, 0xaa, 0xf7, 0x10, 0x00, 0x0c, 0x00, 0xca, 0x9e, 0x74, 0x49, 0xd8, 0xcb, - 0xbf, 0xe2, 0x02, 0xb5, 0x5a, 0xc4, 0x9f, 0x17, 0x10, 0x00, 0x0b, 0x00, 0xc9, 0x14, 0xb1, 0x42, - 0xd3, 0x4f, 0xe1, 0xd2, 0x40, 0x03, 0x5b, 0x26, 0xb1, 0xc2, 0x11, 0xff, 0xef, 0xcb, 0xe9, 0xba, - 0xba, 0xad, 0x60, 0x92, 0x2d, 0x34, 0xdb, 0x7f, 0x0e, 0x28, 0x03, 0x08, 0x2a, 0x70, 0x4b, 0x49, - 0xd5, 0x35, 0x97, 0xcb, 0xe9, 0xf4, 0xee, 0x1b, 0xdf, 0x4b, 0xff, 0x0b, 0x43, 0xd0, 0x00, 0x94, - 0xa6, 0x53, 0x80, 0x03, 0xce, 0xf2, 0xcf, 0xc1, 0xb0, 0x8b, 0xc9, 0xfe, 0x08, 0x39, 0xb5, 0x55, - 0x7d, 0x60, 0xb8, 0x21, 0x10, 0x1a, 0xc6, 0x94, 0x3c, 0xf9, 0x81, 0x81, 0x8a, 0x7e, 0xff, 0x84, - 0x42, 0x20, 0xa4, 0xdc, 0xfd, 0x37, 0xbc, 0xb4, 0xef, 0x6f, 0x0c, 0x0c, 0xbc, 0x7d, 0x78, 0x9e, - 0x29, 0xd5, 0x0d, 0x65, 0x45, 0x8c, 0x3c, 0x53, 0x4a, 0x58, 0x65, 0xe2, 0x0a, 0x8c, 0x22, 0x0e, - 0x46, 0xd8, 0xc0, 0xe6, 0xf9, 0x99, 0xad, 0xdd, 0x72, 0xca, 0xd1, 0x46, 0x36, 0xe9, 0x3f, 0xd9, - 0xda, 0xcb, 0x38, 0xdb, 0x59, 0x26, 0x37, 0xd5, 0xff, 0x12, 0x34, 0xe2, 0xf5, 0x4a, 0xaa, 0x2f, - 0x2d, 0x13, 0x54, 0xfe, 0x52, 0x69, 0xa1, 0x82, 0xa3, 0x83, 0x12, 0x96, 0x51, 0x52, 0xff, 0x08, - 0x88, 0x1a, 0x42, 0xf6, 0xdb, 0xdd, 0xd4, 0xbd, 0x9d, 0xcc, 0x37, 0xee, 0xc3, 0x64, 0x24, 0x9f, - 0x01, 0xd5, 0x89, 0x01, 0x76, 0x48, 0x30, 0x30, 0x5d, 0x81, 0xde, 0xd0, 0xb0, 0xb1, 0xb5, 0x22, - 0xfc, 0x14, 0x03, 0x11, 0xa4, 0x0e, 0x07, 0x02, 0x13, 0x02, 0x53, 0x14, 0x49, 0x3c, 0x00, 0x05, - 0x39, 0x60, 0x00, 0x42, 0x58, 0x00, 0x14, 0x96, 0x00, 0x18, 0xa0, 0x00, 0x42, 0xca, 0x00, 0x2c, - 0x8e, 0x00, 0x02, 0x1c, 0xb2, 0x00, 0x05, 0xc9, 0x00, 0x0a, 0x9c, 0x00, 0x70, 0xe0, 0x03, 0x87, - 0x01, 0xc3, 0x8e, 0x0b, 0xd2, 0xad, 0x07, 0xff, 0xc1, 0x48, 0x30, 0x0a, 0x4b, 0xd3, 0x4c, 0x51, - 0x9c, 0x00, 0xf3, 0xc1, 0xc3, 0xc0, 0x79, 0x63, 0xc2, 0xc3, 0xca, 0x70, 0x30, 0x3c, 0x79, 0x63, - 0xa8, 0x28, 0x00, 0xaa, 0x6c, 0x3c, 0x8e, 0x00, 0xc8, 0xd7, 0x08, 0x51, 0xf1, 0x4e, 0xff, 0xf6, - 0xe2, 0x1e, 0x0b, 0xb7, 0x89, 0x1c, 0x04, 0x0a, 0x32, 0x8a, 0x75, 0x1c, 0xe1, 0x70, 0x0b, 0x6c, - 0x69, 0xa7, 0x88, 0x12, 0x15, 0xb7, 0x6e, 0xf7, 0x84, 0x04, 0x64, 0x31, 0x01, 0xdc, 0x88, 0x63, - 0xf1, 0x21, 0xf0, 0xff, 0xe2, 0x22, 0x39, 0x75, 0x78, 0xc8, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, - 0x60, 0x30, 0x30, 0x5a, 0x0b, 0x74, 0x3e, 0x28, 0xee, 0xbd, 0x04, 0x9d, 0x5c, 0xae, 0xae, 0x41, - 0x17, 0x56, 0x85, 0xfa, 0xf4, 0xdd, 0x72, 0xbe, 0xbd, 0x5d, 0x7f, 0xf5, 0xe8, 0x6b, 0xa3, 0x3d, - 0x74, 0x57, 0x84, 0x7a, 0x2d, 0x4b, 0xd1, 0x1a, 0xba, 0xf7, 0xd5, 0xe1, 0xbe, 0xaf, 0x5d, 0x5e, - 0x2f, 0xaf, 0x5f, 0x5e, 0xae, 0xbd, 0x7d, 0x7a, 0xfa, 0xbd, 0x70, 0x45, 0xcd, 0x97, 0xae, 0xaf, - 0xf5, 0x79, 0xfa, 0x3b, 0xc6, 0x74, 0x4a, 0x9f, 0xa2, 0x4e, 0x57, 0x5e, 0xfa, 0xe5, 0x0c, 0x75, - 0xea, 0xe8, 0xaf, 0x5d, 0x5a, 0x4e, 0xbd, 0x5d, 0x11, 0xeb, 0xad, 0x57, 0x5a, 0x8d, 0xeb, 0x5f, - 0x56, 0x42, 0x7d, 0x7b, 0xea, 0xd1, 0x5c, 0x12, 0x89, 0x77, 0xdd, 0xf2, 0x25, 0xf4, 0x21, 0xa1, - 0x5e, 0xbd, 0x15, 0xd6, 0x28, 0x8e, 0xbd, 0x87, 0x09, 0x5f, 0xfd, 0xaf, 0x95, 0x3f, 0xdb, 0x7d, - 0x7b, 0xe0, 0x86, 0xf7, 0xf5, 0x73, 0x95, 0xa9, 0xd3, 0x7f, 0x27, 0x57, 0xfa, 0xf7, 0xd1, 0x5a, - 0xfa, 0x33, 0x57, 0x57, 0xfa, 0x2b, 0x7d, 0x5f, 0xea, 0xff, 0x56, 0xfa, 0xb5, 0x75, 0x69, 0x3a, - 0x37, 0x7d, 0x5e, 0x2a, 0x10, 0x10, 0x8b, 0xd2, 0x74, 0x47, 0x8c, 0xeb, 0x95, 0xf5, 0xa8, 0x6f, - 0xab, 0x4d, 0xd6, 0xbe, 0xaf, 0xf5, 0x68, 0xde, 0xac, 0x7d, 0x5c, 0xae, 0x8b, 0x15, 0x70, 0x49, - 0x51, 0xac, 0xbd, 0x7d, 0x6c, 0x7c, 0x11, 0x75, 0x6d, 0x32, 0xf5, 0xaf, 0xaf, 0x5f, 0x44, 0xe8, - 0x8e, 0xbd, 0xf5, 0xe9, 0xfa, 0x3e, 0x5f, 0x46, 0xb5, 0xf4, 0x57, 0xfa, 0xb7, 0xd7, 0xbe, 0xbe, - 0x24, 0xe8, 0xa6, 0x5f, 0xc2, 0x02, 0x1d, 0xfd, 0xa6, 0xae, 0xa9, 0xfa, 0xbd, 0xf0, 0x43, 0xdd, - 0xd2, 0x92, 0x62, 0x64, 0xeb, 0xdf, 0x5e, 0x97, 0xaf, 0x57, 0x5e, 0xfa, 0xf7, 0xd7, 0xa2, 0xba, - 0xf5, 0x75, 0xe8, 0xde, 0x8e, 0xf5, 0xd5, 0xa2, 0x3a, 0xcd, 0x5c, 0xa2, 0x2e, 0xbe, 0x19, 0x45, - 0xeb, 0xeb, 0xab, 0xeb, 0xdf, 0x5e, 0xae, 0xbf, 0xfa, 0xbf, 0xd7, 0xff, 0x5f, 0xc2, 0xbd, 0x7a, - 0x1d, 0xe8, 0x8d, 0x7d, 0x7b, 0xeb, 0xd0, 0xaf, 0x57, 0xae, 0xbd, 0x0c, 0x74, 0x4e, 0x9f, 0xaf, - 0x40, 0xc1, 0xd7, 0x68, 0xfe, 0xad, 0x7d, 0x6a, 0x5e, 0xbd, 0x05, 0xbd, 0x7a, 0x03, 0x2f, 0xa2, - 0xbf, 0xd5, 0xfe, 0xaf, 0x5d, 0xf5, 0x5f, 0x35, 0xdf, 0x5d, 0x7a, 0x6e, 0x08, 0x67, 0xce, 0xcf, - 0xaf, 0x7c, 0xa4, 0x78, 0xae, 0x3a, 0x11, 0x8b, 0x35, 0xd6, 0x2f, 0x11, 0xeb, 0x82, 0x01, 0x20, - 0xa6, 0xed, 0x71, 0x41, 0xc2, 0xca, 0xa5, 0x36, 0x09, 0xf8, 0xf1, 0xfd, 0x0b, 0x6f, 0xab, 0x57, - 0x56, 0xfa, 0xb4, 0xdc, 0x82, 0x2b, 0x5f, 0x08, 0x6f, 0x5d, 0xb6, 0x96, 0xda, 0x6f, 0x82, 0xeb, - 0xbb, 0xbd, 0xda, 0xc5, 0x17, 0xd1, 0x3b, 0xe5, 0xde, 0xe3, 0x20, 0x49, 0x0c, 0x85, 0x04, 0x9f, - 0xb4, 0x36, 0xb9, 0xde, 0xce, 0x4c, 0x9b, 0x8e, 0x29, 0x7b, 0x46, 0xc5, 0x2f, 0x07, 0xbf, 0xc0, - 0x70, 0x02, 0x91, 0xb1, 0xdf, 0x92, 0x81, 0x53, 0xde, 0xee, 0x70, 0x01, 0xc1, 0x00, 0x18, 0x16, - 0x19, 0x61, 0xcb, 0x30, 0x0b, 0x24, 0x4b, 0x9f, 0x22, 0xfb, 0xb2, 0x38, 0xc7, 0x3c, 0x75, 0x67, - 0xe1, 0xac, 0x00, 0xc6, 0x0d, 0x1a, 0x1f, 0x27, 0xd7, 0x3e, 0xff, 0xb6, 0x7e, 0xb7, 0x76, 0xc5, - 0x43, 0x0f, 0x28, 0x00, 0x29, 0xaa, 0x1a, 0xc2, 0x0b, 0x88, 0x4c, 0x47, 0xa8, 0x67, 0x53, 0x55, - 0x18, 0x74, 0x60, 0xef, 0xc7, 0x7e, 0xc8, 0xa3, 0x60, 0xb5, 0x94, 0x1b, 0x03, 0x29, 0xb7, 0x4f, - 0xc2, 0xfc, 0x2e, 0x21, 0xa8, 0x9f, 0x17, 0x07, 0x40, 0xb9, 0x30, 0x01, 0x50, 0xe8, 0x11, 0x91, - 0x81, 0x28, 0x41, 0x28, 0xee, 0x60, 0xa3, 0x8e, 0x4e, 0x03, 0x97, 0xf1, 0x03, 0x67, 0xc3, 0xdc, - 0x6e, 0x0f, 0xf1, 0xf9, 0xc4, 0x90, 0x76, 0x4a, 0x7b, 0x87, 0x1c, 0x92, 0xc0, 0x62, 0x83, 0x15, - 0x40, 0xef, 0x80, 0x60, 0x00, 0x3f, 0x00, 0x01, 0x10, 0xf0, 0xe2, 0x87, 0x9c, 0xbf, 0xf0, 0xe2, - 0x80, 0x13, 0x34, 0xa6, 0x1b, 0x45, 0x73, 0xab, 0x6d, 0xf6, 0xdb, 0x4d, 0x3a, 0x93, 0x16, 0xc5, - 0xb2, 0x78, 0xc1, 0x40, 0x34, 0xf9, 0x90, 0xb9, 0x96, 0x17, 0x19, 0x64, 0xe0, 0xcb, 0xfc, 0x44, - 0x31, 0x07, 0xf9, 0x2c, 0x00, 0x18, 0x3c, 0x1e, 0x35, 0x29, 0x79, 0x61, 0x02, 0x0b, 0xc5, 0x35, - 0xc6, 0x20, 0x70, 0x62, 0xc0, 0x0e, 0x1f, 0xfb, 0xe6, 0x61, 0x35, 0xdd, 0x6a, 0x97, 0x97, 0x2f, - 0x9f, 0x3c, 0x35, 0xe4, 0xd5, 0xd3, 0x2f, 0xff, 0x09, 0xd3, 0x42, 0xd2, 0x4f, 0x6f, 0xc1, 0x35, - 0xda, 0xb5, 0x66, 0x92, 0x5e, 0x5f, 0x0a, 0x9f, 0x36, 0x5f, 0x77, 0xed, 0x93, 0xfb, 0xe2, 0xfc, - 0xbd, 0x2e, 0x5d, 0x5d, 0x4a, 0x28, 0xac, 0x30, 0x0a, 0xba, 0xaa, 0x8a, 0x62, 0x86, 0x29, 0x8a, - 0x18, 0x8e, 0x16, 0x1c, 0x47, 0x01, 0x40, 0xec, 0x38, 0x48, 0x01, 0x7b, 0xcc, 0x8c, 0x31, 0x3d, - 0x7e, 0xd7, 0x38, 0xff, 0x1d, 0xf8, 0xed, 0xeb, 0x2d, 0x60, 0xe3, 0xf3, 0xf5, 0xf8, 0x7e, 0xb3, - 0xe2, 0x9b, 0x79, 0x59, 0xe2, 0x32, 0x61, 0xc0, 0x00, 0x03, 0x74, 0xdc, 0xdf, 0xe1, 0xd5, 0x00, - 0x2f, 0xc8, 0xdb, 0x20, 0xf2, 0x8f, 0x6e, 0x8e, 0xe7, 0xbc, 0xf3, 0xcf, 0x1e, 0x7f, 0xbf, 0x9e, - 0x7b, 0xf9, 0x66, 0x58, 0xce, 0x3c, 0xe7, 0x97, 0xf8, 0xbd, 0x32, 0x64, 0xc9, 0xd1, 0x8f, 0xf0, - 0x0b, 0x80, 0x81, 0xb2, 0x9d, 0x90, 0xcf, 0x48, 0x51, 0x0f, 0x8f, 0x63, 0x0c, 0xa4, 0x63, 0xb2, - 0x38, 0x79, 0xe0, 0x3c, 0x74, 0xfd, 0xaf, 0x5a, 0x8b, 0x67, 0x8f, 0x1c, 0x57, 0xed, 0xcb, 0x6d, - 0xa6, 0x9f, 0xe0, 0x24, 0x04, 0x05, 0x2e, 0xe9, 0xbf, 0xb6, 0x43, 0x0c, 0x98, 0x45, 0x57, 0xf7, - 0xf3, 0xcf, 0x57, 0xe2, 0xa2, 0x12, 0x9d, 0xe2, 0x7c, 0x6a, 0x40, 0xa4, 0x2a, 0x92, 0x95, 0x67, - 0xd1, 0x3a, 0x14, 0x89, 0x8b, 0x2d, 0x6b, 0x0b, 0x34, 0xde, 0x0e, 0x04, 0x8d, 0x9b, 0x33, 0xe4, - 0x8b, 0x10, 0x3e, 0x66, 0x0a, 0x97, 0xc7, 0xac, 0xe3, 0xb6, 0x08, 0x1e, 0x17, 0x3c, 0xf8, 0x68, - 0x7b, 0x98, 0x40, 0x80, 0x06, 0xb0, 0x04, 0xa0, 0xc4, 0x05, 0x2c, 0x30, 0x58, 0x00, 0x22, 0xe1, - 0x1c, 0x7f, 0x81, 0x84, 0x0e, 0x03, 0x44, 0x0e, 0x23, 0xc5, 0xea, 0xb7, 0x45, 0x4a, 0x51, 0x99, - 0x0e, 0x96, 0x16, 0x06, 0x4a, 0x00, 0x54, 0x9c, 0x00, 0x3e, 0x0e, 0xa2, 0x52, 0x50, 0x2a, 0x48, - 0x00, 0x04, 0x30, 0x48, 0xfa, 0x20, 0xec, 0x94, 0xb6, 0x10, 0x6f, 0x47, 0x86, 0x9f, 0x0d, 0xfd, - 0x3f, 0xe0, 0xe4, 0x0b, 0x03, 0x3d, 0xe4, 0x4d, 0x8d, 0x09, 0x72, 0x64, 0xb3, 0x2c, 0xc5, 0xc5, - 0xc4, 0x86, 0x87, 0x81, 0xa1, 0x7c, 0xe0, 0x79, 0x06, 0x01, 0x49, 0x63, 0x2c, 0x18, 0xa3, 0x12, - 0x38, 0x58, 0x0c, 0x50, 0x19, 0x60, 0xc4, 0x00, 0x3c, 0x94, 0x05, 0x6c, 0xf1, 0xb3, 0xd6, 0xb4, - 0x4c, 0x2a, 0x7f, 0x0f, 0x38, 0x8b, 0xd6, 0x04, 0x90, 0x70, 0x36, 0x1c, 0x00, 0x1f, 0x8e, 0x1c, - 0x2c, 0x01, 0x9e, 0x3c, 0x40, 0xe0, 0x3f, 0xc1, 0x45, 0xad, 0x26, 0x01, 0xe2, 0xc0, 0x19, 0x60, - 0x00, 0xdf, 0x87, 0x8e, 0x07, 0xe0, 0xd5, 0x6f, 0xfc, 0x74, 0x1e, 0x1e, 0x00, 0x30, 0x0b, 0x57, - 0x25, 0x0d, 0x4f, 0xfc, 0x36, 0x54, 0x7f, 0x9d, 0xa3, 0x40, 0xf0, 0xbc, 0x1b, 0xc5, 0x53, 0xc2, - 0x00, 0x11, 0xd8, 0xe1, 0x5f, 0x01, 0xd8, 0x03, 0x6d, 0x81, 0x56, 0xc5, 0xfe, 0x5b, 0x46, 0xc5, - 0x8d, 0x71, 0x67, 0x63, 0xb1, 0x95, 0x83, 0xfd, 0xb6, 0xb8, 0x22, 0xa5, 0x9b, 0xe1, 0x7d, 0xe9, - 0x93, 0xca, 0xe6, 0x8e, 0x2f, 0xd7, 0x7c, 0x9b, 0x7d, 0x4a, 0x91, 0x3c, 0x34, 0x61, 0x4c, 0x94, - 0x00, 0xac, 0xf0, 0x3c, 0x35, 0x3b, 0x15, 0x7f, 0xc3, 0x72, 0x80, 0x49, 0x99, 0x90, 0x18, 0x85, - 0xb2, 0xbd, 0xe1, 0x6d, 0x9c, 0xf1, 0x81, 0x78, 0xee, 0x33, 0x9f, 0x06, 0xaf, 0x05, 0x05, 0x60, - 0xf6, 0x0a, 0xb0, 0x5a, 0xcf, 0xdd, 0xf1, 0x70, 0xdb, 0xa6, 0x9f, 0xc3, 0x8a, 0x00, 0xa7, 0xfa, - 0x04, 0x3d, 0xb2, 0x59, 0xfc, 0x8d, 0x34, 0xd3, 0x59, 0x82, 0xed, 0xd0, 0x8d, 0xfd, 0xdc, 0x57, - 0x34, 0x82, 0xbc, 0x4f, 0xf1, 0x19, 0x76, 0xcf, 0xef, 0xf0, 0xea, 0x80, 0x08, 0xc0, 0xc8, 0x8a, - 0xae, 0x56, 0x06, 0x44, 0x17, 0x19, 0xcf, 0x10, 0xf8, 0xc7, 0x97, 0x1c, 0xfc, 0x7a, 0xf1, 0xde, - 0xed, 0x8a, 0xb3, 0xf2, 0xd6, 0x3a, 0x55, 0x3f, 0x5f, 0xf0, 0x08, 0xc4, 0x29, 0x14, 0x0c, 0x41, - 0xe2, 0x9b, 0x3e, 0xee, 0x20, 0x3e, 0xc7, 0x85, 0xee, 0x20, 0x79, 0xb9, 0x5e, 0xa7, 0xb8, 0x42, - 0x0a, 0x2f, 0x91, 0x75, 0x51, 0x71, 0x7e, 0x84, 0xfa, 0xf6, 0x1e, 0x50, 0x01, 0x0c, 0x1c, 0x59, - 0x88, 0x2a, 0x08, 0xc6, 0xbf, 0x1a, 0x31, 0x9a, 0x0c, 0xf1, 0xc7, 0xfc, 0x1f, 0xf6, 0x47, 0x9e, - 0x5e, 0x5f, 0x71, 0xb9, 0x20, 0x09, 0x85, 0xbc, 0xbd, 0x3f, 0xc0, 0x40, 0x86, 0x06, 0x90, 0xf3, - 0x83, 0x5c, 0x04, 0xa1, 0xdc, 0x4a, 0x00, 0x04, 0x14, 0x20, 0x1c, 0x22, 0x87, 0x06, 0x55, 0x23, - 0x00, 0x94, 0xe0, 0xe6, 0x94, 0xa8, 0x6d, 0x69, 0x0f, 0xe2, 0x78, 0x0b, 0x46, 0x41, 0xd8, 0x8c, - 0x79, 0xfc, 0x4c, 0x6d, 0x7e, 0x45, 0xb3, 0x32, 0x04, 0xa9, 0xbd, 0x7c, 0x42, 0x41, 0x1e, 0xb0, - 0xb0, 0x33, 0x87, 0xa9, 0xfa, 0x63, 0xcf, 0xc2, 0x2a, 0x4d, 0x43, 0x00, 0x02, 0x07, 0x00, 0x80, - 0xa6, 0x0e, 0x1b, 0xb8, 0xc6, 0xc1, 0xc1, 0x9a, 0x3f, 0xe8, 0x6a, 0x71, 0x17, 0xcf, 0xc1, 0x84, - 0x29, 0x2c, 0xcb, 0xcb, 0x35, 0x81, 0x0d, 0x75, 0x2d, 0xe5, 0x29, 0x8a, 0xcb, 0x8e, 0x5b, 0x6e, - 0x04, 0x88, 0x52, 0x1f, 0x81, 0xaa, 0x17, 0x8a, 0x8b, 0xf2, 0xaf, 0xf6, 0xd4, 0x89, 0xe4, 0xb3, - 0xf8, 0x7f, 0x29, 0x65, 0xf8, 0x44, 0x18, 0x0c, 0x9e, 0xe1, 0xee, 0x5a, 0x0d, 0x86, 0x51, 0xe0, - 0x07, 0x2b, 0x0f, 0xc4, 0xa8, 0xb0, 0x82, 0xf9, 0x21, 0x04, 0x5e, 0x83, 0xc9, 0x0c, 0x22, 0x0a, - 0x03, 0xc4, 0x2c, 0x00, 0xc5, 0x00, 0x33, 0x83, 0x83, 0xd6, 0x0a, 0x00, 0x62, 0x00, 0x0f, 0x24, - 0x35, 0x14, 0x89, 0x73, 0xc3, 0x8e, 0x51, 0x09, 0x43, 0x1c, 0xe8, 0xe7, 0xae, 0xb6, 0x5f, 0xe0, - 0x98, 0x4d, 0x2a, 0x93, 0xd3, 0x26, 0xe3, 0x8a, 0xb8, 0x9a, 0x5a, 0x6d, 0xa1, 0x97, 0x75, 0xc1, - 0x15, 0xb4, 0xad, 0x65, 0xf0, 0x59, 0x9f, 0x08, 0xa6, 0xa5, 0xa5, 0xa6, 0x4d, 0xf3, 0x3e, 0x16, - 0xa5, 0x3c, 0x37, 0x97, 0xac, 0x6c, 0xd6, 0xb0, 0xd3, 0xe1, 0x1e, 0x08, 0xac, 0x81, 0x60, 0x26, - 0xfb, 0x1f, 0x61, 0xd2, 0x40, 0x1f, 0xc8, 0x4f, 0x4f, 0x51, 0xa9, 0x75, 0x1c, 0xf8, 0xcb, 0x74, - 0xd9, 0xd3, 0x3b, 0xc4, 0xbd, 0x64, 0xe2, 0xb3, 0xcf, 0x38, 0x79, 0x79, 0x3d, 0x5e, 0xcf, 0xe1, - 0xc5, 0x00, 0x99, 0x92, 0x33, 0x18, 0x84, 0xf3, 0xe5, 0xbd, 0xcf, 0xfb, 0xdd, 0x45, 0x69, 0xa6, - 0x9a, 0x60, 0x66, 0x9d, 0xb6, 0xfe, 0x1b, 0x70, 0x03, 0x08, 0x74, 0x3c, 0x4f, 0xd7, 0xdc, 0xcb, - 0xc9, 0xf6, 0x4e, 0x70, 0xf2, 0xde, 0x21, 0xe9, 0x9b, 0x96, 0x03, 0x91, 0x23, 0x41, 0x6d, 0xb7, - 0xfc, 0x38, 0xa0, 0x00, 0xbc, 0xd6, 0x89, 0xf9, 0x81, 0x86, 0x91, 0x82, 0x5e, 0x5a, 0xcb, 0x6d, - 0x8a, 0xb1, 0x56, 0xdb, 0x71, 0x6d, 0x53, 0x16, 0xc5, 0xb4, 0xd3, 0x11, 0x1a, 0x1f, 0x4d, 0x36, - 0xdb, 0xf0, 0xac, 0x04, 0x00, 0x16, 0x42, 0xbb, 0x56, 0x86, 0x94, 0x3f, 0x12, 0xd5, 0x85, 0x6b, - 0x60, 0x3d, 0x87, 0x87, 0xfe, 0x1c, 0x50, 0x0c, 0xe0, 0x91, 0x4d, 0x35, 0x8e, 0x67, 0x67, 0x13, - 0xee, 0xe3, 0xdf, 0x3b, 0xf5, 0x36, 0x3f, 0x53, 0x8c, 0x1a, 0xa5, 0x5e, 0xac, 0xed, 0xe2, 0xbe, - 0x73, 0xae, 0x3d, 0x35, 0xb9, 0x7e, 0x06, 0x10, 0x62, 0x34, 0xc4, 0xa5, 0x4f, 0x38, 0x2b, 0x1c, - 0x49, 0x28, 0x04, 0x6a, 0xbc, 0xec, 0xb0, 0x01, 0x90, 0xee, 0x3e, 0x0e, 0x56, 0x7f, 0x03, 0xb8, - 0x94, 0xbe, 0x49, 0x8a, 0xe2, 0x26, 0xf0, 0x5b, 0xb1, 0x60, 0x9f, 0xfb, 0x7f, 0x13, 0x45, 0xef, - 0x82, 0x79, 0x48, 0x32, 0x72, 0x0d, 0xd6, 0xa8, 0xc8, 0x78, 0x52, 0x23, 0x98, 0x17, 0x11, 0x98, - 0x38, 0x79, 0x69, 0xb6, 0xd2, 0x40, 0xc2, 0x05, 0xd6, 0xb1, 0x22, 0xf8, 0x29, 0x10, 0x14, 0x32, - 0x40, 0xad, 0x6a, 0x7f, 0xc4, 0xfe, 0x7b, 0x15, 0xe3, 0xec, 0x84, 0xbc, 0x9d, 0x7e, 0x07, 0xdc, - 0x97, 0xcc, 0x52, 0x28, 0xa1, 0x37, 0xe1, 0x0a, 0x29, 0x33, 0x62, 0x4d, 0xf4, 0x9b, 0xf2, 0x66, - 0xdb, 0x5e, 0xa4, 0x6f, 0xa2, 0xf7, 0x13, 0x04, 0x12, 0x78, 0x52, 0xbb, 0xb8, 0xac, 0x57, 0x88, - 0x1c, 0x10, 0x38, 0x15, 0x22, 0x02, 0x9a, 0x83, 0xcb, 0xd9, 0xfc, 0x38, 0x88, 0x00, 0x21, 0x31, - 0x1e, 0x04, 0x97, 0x41, 0x77, 0xa9, 0xd7, 0xda, 0x36, 0x1d, 0x32, 0x74, 0xc9, 0xf0, 0xf8, 0x53, - 0xc8, 0x3d, 0xf0, 0x7e, 0xdd, 0xd3, 0xfc, 0x06, 0x80, 0x30, 0x1b, 0x14, 0x31, 0x43, 0x48, 0x5a, - 0x03, 0xb1, 0x29, 0xe7, 0x03, 0xf4, 0xa3, 0xec, 0x29, 0x7c, 0x58, 0x0c, 0x3b, 0x09, 0x43, 0x8d, - 0xa9, 0x45, 0xac, 0x61, 0xdf, 0x51, 0xd2, 0xc0, 0xc0, 0x0d, 0x00, 0x01, 0x00, 0x78, 0xf8, 0x80, - 0x09, 0x91, 0x00, 0x4c, 0xff, 0x87, 0x14, 0x00, 0xac, 0x8f, 0x03, 0xe4, 0x62, 0x3c, 0x73, 0xb6, - 0x5b, 0x9f, 0x4d, 0x95, 0x12, 0xfd, 0x64, 0xea, 0xde, 0xda, 0xa6, 0x9f, 0xf8, 0x1e, 0x23, 0x62, - 0x5e, 0xd1, 0xef, 0x2f, 0xac, 0xdc, 0x94, 0x06, 0x8d, 0xc3, 0xc0, 0x07, 0x0f, 0x00, 0x1e, 0x4d, - 0x38, 0x59, 0x2c, 0x18, 0xe9, 0xf0, 0xc0, 0x0f, 0x1f, 0xd3, 0x8b, 0x62, 0x97, 0xfe, 0x18, 0xe5, - 0xe2, 0x8f, 0x14, 0x62, 0xb0, 0x30, 0x01, 0xe3, 0xc5, 0x38, 0xa1, 0x62, 0x97, 0xef, 0x86, 0x4a, - 0x9d, 0x6a, 0xee, 0x2b, 0xff, 0xa2, 0xc5, 0x15, 0xc8, 0x41, 0x71, 0x4e, 0xbc, 0x22, 0x14, 0xb3, - 0x0e, 0x39, 0xa8, 0xf5, 0x87, 0x73, 0x4a, 0xa5, 0xde, 0xa7, 0x87, 0xe3, 0xc2, 0x02, 0x25, 0x9a, - 0xac, 0x5c, 0x5f, 0x09, 0x71, 0x73, 0xb2, 0x8f, 0x69, 0x3f, 0xcb, 0x76, 0xf7, 0xc2, 0x34, 0xb4, - 0xb4, 0xdb, 0xd3, 0xbe, 0x18, 0x12, 0x1e, 0x8b, 0x9e, 0x07, 0xd4, 0x90, 0x00, 0x08, 0x29, 0xe0, - 0x01, 0xec, 0xc1, 0xf6, 0x44, 0x0f, 0x58, 0x61, 0x20, 0x61, 0x03, 0xc6, 0xe0, 0x61, 0x06, 0x64, - 0x53, 0x85, 0x01, 0xc4, 0xd9, 0x40, 0x4c, 0x83, 0xf8, 0x44, 0x6c, 0x41, 0xea, 0x5e, 0xaa, 0xa4, - 0xa1, 0x7b, 0x3c, 0x9c, 0x79, 0xfc, 0x92, 0x7a, 0x94, 0xb2, 0x00, 0x57, 0x92, 0x08, 0x2a, 0x4f, - 0xf1, 0x20, 0xb3, 0xaa, 0xb7, 0x26, 0x74, 0xd2, 0xbd, 0xfe, 0x30, 0xc6, 0x64, 0xb7, 0x33, 0x72, - 0xf0, 0x59, 0xd0, 0x2f, 0x24, 0x15, 0x44, 0x7b, 0x72, 0x65, 0x78, 0x28, 0x1b, 0x5b, 0x1c, 0x67, - 0xa1, 0x09, 0x88, 0xf2, 0xe6, 0x60, 0xa8, 0xf0, 0xf0, 0xd4, 0xae, 0x72, 0xc5, 0x19, 0x90, 0x97, - 0x21, 0x79, 0x53, 0x60, 0xb6, 0x48, 0x4c, 0x93, 0xfc, 0x37, 0xaf, 0x44, 0xeb, 0x89, 0x61, 0xf2, - 0x42, 0x30, 0xa0, 0x93, 0x7d, 0x41, 0x96, 0xae, 0x68, 0xf3, 0xeb, 0xe8, 0x2d, 0x8d, 0x28, 0x39, - 0xf9, 0xce, 0x0f, 0x7c, 0xe1, 0xe7, 0x0e, 0x05, 0xc9, 0x06, 0x97, 0x61, 0xc8, 0x80, 0x01, 0xc9, - 0xd5, 0x98, 0x64, 0xb5, 0x2d, 0x73, 0x19, 0x26, 0xf7, 0xd3, 0xe9, 0x97, 0xd3, 0x67, 0x8c, 0xbc, - 0x6d, 0x3c, 0x60, 0xcc, 0x1b, 0xa9, 0xb8, 0xe1, 0xbe, 0x02, 0x2f, 0x2f, 0x58, 0x0f, 0x87, 0xc7, - 0xf8, 0x0f, 0x90, 0x11, 0x23, 0x62, 0x40, 0x07, 0x07, 0x40, 0x3c, 0x2c, 0x62, 0x89, 0xad, 0x07, - 0x58, 0x0d, 0x43, 0xbb, 0x55, 0x41, 0x5d, 0xd5, 0xa0, 0x4a, 0x4a, 0x36, 0xbe, 0x1e, 0x41, 0x89, - 0x4e, 0xe1, 0x20, 0x54, 0xf3, 0x3b, 0x8c, 0xc1, 0xcc, 0x76, 0x9a, 0x54, 0xd3, 0xfc, 0x10, 0x81, - 0xa4, 0x29, 0x28, 0x0a, 0xf8, 0x70, 0x7e, 0x11, 0x84, 0xa1, 0xf1, 0x28, 0xe2, 0x78, 0x78, 0x0e, - 0x07, 0xd2, 0x96, 0xe6, 0xa1, 0xe7, 0x91, 0x4b, 0xe1, 0x98, 0x2f, 0x87, 0x70, 0x01, 0x5e, 0xb9, - 0x90, 0xa7, 0x57, 0x37, 0xd4, 0x55, 0x89, 0xf7, 0xeb, 0x8a, 0x5a, 0x63, 0x7f, 0x16, 0x50, 0xe4, - 0x9b, 0xf0, 0x30, 0x9f, 0x10, 0x36, 0xe1, 0xf5, 0x82, 0x64, 0x1e, 0xb1, 0xf0, 0xdb, 0x38, 0x00, - 0x4e, 0x88, 0x35, 0x4a, 0x54, 0x2c, 0xc6, 0xfd, 0x12, 0x79, 0xd8, 0x2f, 0x7c, 0x3a, 0x4e, 0xb6, - 0x83, 0xee, 0x30, 0x9b, 0x33, 0x86, 0x28, 0x68, 0xa7, 0x7a, 0x40, 0x15, 0x9c, 0x93, 0x03, 0x70, - 0x24, 0x77, 0xf3, 0xc2, 0xc7, 0x8c, 0x0f, 0x0d, 0xf1, 0xf8, 0x6d, 0x40, 0x00, 0xce, 0xc9, 0x5d, - 0x82, 0x4a, 0x2b, 0xd7, 0xfb, 0x6d, 0x3d, 0x5d, 0xd0, 0x64, 0x5d, 0x08, 0x4c, 0xf7, 0x5b, 0x8e, - 0x97, 0x2f, 0x5f, 0xc0, 0xa0, 0x18, 0x1b, 0x9b, 0x95, 0x49, 0x7a, 0x7b, 0x6d, 0x60, 0xf2, 0xc1, - 0xec, 0x22, 0x70, 0xa2, 0xa7, 0xc1, 0xe7, 0xc3, 0x00, 0x02, 0x43, 0x81, 0x71, 0xf0, 0x58, 0x2a, - 0xb0, 0x7f, 0xd1, 0x0f, 0x87, 0x27, 0xff, 0xc3, 0x97, 0x15, 0xb8, 0xac, 0x22, 0x13, 0x8a, 0xa7, - 0x1f, 0xf1, 0x5f, 0x9b, 0xb2, 0xde, 0xa1, 0xae, 0xba, 0x9b, 0x12, 0x14, 0x10, 0x20, 0xf9, 0x10, - 0x07, 0xeb, 0x50, 0x68, 0xf2, 0xfd, 0x44, 0x96, 0x0a, 0xc1, 0xbe, 0x5f, 0x22, 0xf3, 0xa7, 0x84, - 0x46, 0x63, 0x4d, 0xa3, 0xd1, 0xbd, 0x9a, 0x9b, 0x0e, 0x72, 0x3a, 0xc4, 0xf2, 0xa5, 0xff, 0x12, - 0x11, 0xd2, 0x85, 0x56, 0x38, 0xcf, 0x9b, 0x89, 0xbf, 0x1b, 0x97, 0xe3, 0x2c, 0x60, 0x47, 0x97, - 0x93, 0x1a, 0x12, 0xf3, 0x4f, 0xd0, 0xc3, 0x12, 0xd6, 0xba, 0x85, 0xe6, 0xec, 0x63, 0x32, 0x33, - 0x73, 0x4f, 0xea, 0xe7, 0x08, 0x88, 0x19, 0x8d, 0xb0, 0x56, 0x94, 0xb1, 0x36, 0x16, 0x45, 0xc9, - 0x0a, 0xe8, 0xb7, 0x22, 0xed, 0x66, 0xe5, 0xfe, 0x09, 0x0a, 0x86, 0xdb, 0xdb, 0xeb, 0x2f, 0x87, - 0xbb, 0x49, 0x69, 0x3b, 0x88, 0x70, 0x56, 0x48, 0xd1, 0x56, 0xa8, 0xbf, 0x07, 0x22, 0x02, 0x82, - 0x94, 0xe7, 0x8b, 0xc6, 0x78, 0x2a, 0x36, 0x91, 0x6c, 0xa4, 0x0d, 0x8c, 0xf0, 0xdf, 0x13, 0x43, - 0x5f, 0x40, 0xce, 0x15, 0x36, 0x23, 0x22, 0x83, 0x82, 0x80, 0x2c, 0x85, 0x24, 0x8a, 0x8a, 0x21, - 0xe5, 0x2b, 0x39, 0xd3, 0xb2, 0xbc, 0xcf, 0x0e, 0x25, 0xe2, 0xb2, 0xd8, 0xa0, 0xdd, 0xc4, 0x00, - 0xe1, 0x60, 0xc9, 0xf8, 0x20, 0x12, 0x14, 0x9c, 0x1c, 0x2c, 0xe2, 0x16, 0x89, 0x0a, 0xa8, 0x50, - 0xfb, 0x52, 0xc6, 0x20, 0x1e, 0x58, 0x32, 0xc1, 0x8a, 0x0c, 0xb0, 0x62, 0x5c, 0x7b, 0xa3, 0xbf, - 0x18, 0x51, 0xf6, 0x17, 0x45, 0x83, 0x14, 0x60, 0xfb, 0x01, 0xf6, 0x16, 0x0c, 0xe0, 0x68, 0xfc, - 0xfb, 0x96, 0xef, 0x86, 0x42, 0x23, 0x27, 0x38, 0x94, 0xac, 0x38, 0x00, 0x68, 0x1f, 0x86, 0xa3, - 0xa2, 0xc0, 0xea, 0x4a, 0x30, 0xb2, 0xeb, 0x60, 0x00, 0x53, 0x8f, 0x70, 0xb1, 0xee, 0x78, 0xe0, - 0xd2, 0x6b, 0x8b, 0x67, 0x0b, 0x18, 0x18, 0x01, 0xc8, 0xd9, 0xe0, 0xc6, 0x06, 0xfa, 0x17, 0x7c, - 0x86, 0x35, 0x0a, 0x8c, 0xd5, 0x57, 0xf9, 0xf0, 0x60, 0x15, 0x3c, 0xa3, 0xfa, 0x7f, 0x96, 0x85, - 0x80, 0xea, 0x60, 0x03, 0xe1, 0x81, 0x79, 0xc3, 0xb6, 0xba, 0x15, 0x3c, 0x03, 0x81, 0xd8, 0x94, - 0x00, 0x08, 0xd5, 0x46, 0x94, 0xe2, 0xff, 0x0f, 0x60, 0x0a, 0xa8, 0xb0, 0xcc, 0xd7, 0x94, 0xaf, - 0x7f, 0xc4, 0xdc, 0x42, 0x5c, 0xaf, 0x2b, 0xd5, 0xf7, 0x66, 0xf8, 0x3f, 0xff, 0x5a, 0xde, 0x3d, - 0xaa, 0x94, 0xfc, 0x2c, 0x0a, 0x62, 0x1d, 0xf1, 0x8c, 0x78, 0xf5, 0xa3, 0x8c, 0xd4, 0x01, 0xdf, - 0x5f, 0x81, 0x00, 0x0d, 0x03, 0x4e, 0x23, 0xcb, 0x69, 0x89, 0x72, 0xd5, 0x2b, 0xf2, 0xb1, 0x41, - 0xd6, 0x58, 0x33, 0xf2, 0x7a, 0xf2, 0x4e, 0x20, 0x00, 0x19, 0x00, 0x02, 0xa1, 0x85, 0x16, 0xb2, - 0xd6, 0x58, 0x2c, 0x51, 0x7f, 0x0c, 0x12, 0x01, 0x4a, 0x49, 0x24, 0xdb, 0x6e, 0xee, 0xb1, 0x7e, - 0xef, 0x4d, 0x3a, 0xdb, 0x2f, 0xdf, 0xce, 0x08, 0x04, 0x05, 0x2d, 0x89, 0xf6, 0xf0, 0x7d, 0xcf, - 0x05, 0x26, 0x54, 0xba, 0x99, 0x77, 0x1b, 0x51, 0xff, 0x3d, 0xf1, 0xf7, 0xc3, 0x12, 0xe6, 0xb4, - 0x4a, 0xdd, 0xca, 0x97, 0xa6, 0x9f, 0xf9, 0x69, 0x25, 0xfa, 0xf4, 0x35, 0xcb, 0xad, 0x57, 0x57, - 0x9f, 0x12, 0x34, 0xcf, 0x5b, 0xb7, 0xcc, 0xc5, 0x33, 0xf1, 0x6e, 0xb6, 0xe8, 0xb9, 0x6c, 0x2e, - 0x50, 0x1a, 0xf1, 0xbb, 0x9f, 0xc3, 0x22, 0xf5, 0xd5, 0x1b, 0xfc, 0x48, 0xfd, 0xcb, 0xad, 0xa7, - 0x88, 0x58, 0x6c, 0x56, 0x7f, 0x84, 0x01, 0x00, 0xda, 0x2d, 0x7c, 0x73, 0x83, 0x89, 0xb0, 0x4e, - 0xd2, 0xef, 0x72, 0x61, 0x3c, 0x1b, 0x8e, 0x95, 0xc1, 0x52, 0x2e, 0x0f, 0xa9, 0x76, 0x71, 0x43, - 0x1e, 0xff, 0xf9, 0x8f, 0xba, 0x5e, 0x3e, 0x7c, 0xf7, 0x97, 0xa5, 0xdf, 0x08, 0x84, 0x42, 0x82, - 0x1d, 0x75, 0xb8, 0x84, 0xac, 0x13, 0x38, 0x37, 0x2f, 0x3f, 0xce, 0xfa, 0xc3, 0x1e, 0x39, 0xc7, - 0x95, 0xe1, 0x27, 0x58, 0x46, 0x14, 0x9c, 0x82, 0x9e, 0x7e, 0x80, 0xbb, 0x8a, 0xb2, 0xc1, 0xee, - 0x4b, 0x3c, 0x5e, 0xb0, 0x41, 0x4e, 0x61, 0x62, 0xcd, 0x2c, 0x7d, 0xc5, 0x79, 0xf8, 0x21, 0x02, - 0x00, 0x26, 0x8a, 0x62, 0x38, 0x96, 0x21, 0xee, 0x58, 0xdf, 0xbe, 0x30, 0x48, 0x5c, 0x15, 0x3c, - 0x73, 0x63, 0xb6, 0xa2, 0xb1, 0x3c, 0xb1, 0x43, 0x03, 0xb1, 0x28, 0x81, 0xc2, 0xdd, 0x4f, 0x81, - 0x00, 0x10, 0x85, 0x2a, 0xd6, 0xab, 0x7c, 0x40, 0xe0, 0x97, 0xcf, 0x89, 0x68, 0xc1, 0xc3, 0x58, - 0x04, 0x47, 0x76, 0x03, 0x4d, 0x4f, 0x7e, 0x7f, 0xa6, 0x5f, 0x4d, 0x76, 0xc3, 0x12, 0x00, 0x15, - 0x63, 0x15, 0x8d, 0xef, 0xa2, 0xca, 0x73, 0xce, 0xf6, 0x3f, 0xf4, 0xca, 0x00, 0x17, 0x90, 0x94, - 0xfe, 0x33, 0x20, 0x0a, 0xe1, 0x6f, 0x6f, 0xe3, 0x9c, 0x18, 0x00, 0xf9, 0x0a, 0x4a, 0xc4, 0xa4, - 0xca, 0xd9, 0x0f, 0x10, 0xa4, 0xa5, 0x8d, 0xba, 0x7b, 0x85, 0xb4, 0xa0, 0x03, 0xca, 0x58, 0xb8, - 0xf0, 0x1c, 0x0e, 0xc0, 0xf2, 0x0e, 0x30, 0x4a, 0x1d, 0xa5, 0x19, 0x60, 0xb8, 0xb8, 0x17, 0x4c, - 0xf0, 0x20, 0x80, 0x80, 0x1b, 0x18, 0x21, 0x13, 0x89, 0xc7, 0x07, 0x00, 0x07, 0x06, 0x0c, 0x17, - 0x5b, 0x36, 0xa1, 0xef, 0x9e, 0x06, 0x01, 0xec, 0x04, 0xa7, 0x00, 0x1e, 0x59, 0x95, 0x0a, 0x29, - 0x60, 0xca, 0xc0, 0x57, 0x0a, 0x5d, 0x02, 0x41, 0x84, 0x08, 0xa0, 0xe2, 0x2f, 0xa3, 0x06, 0xa2, - 0xef, 0x86, 0xd0, 0x90, 0x27, 0x48, 0x4a, 0x40, 0x28, 0xdd, 0xf4, 0xd3, 0xba, 0xeb, 0x37, 0x57, - 0x97, 0x0d, 0xc2, 0x8c, 0x57, 0x1a, 0x7f, 0x0f, 0x28, 0x11, 0xbc, 0x87, 0xdf, 0x3f, 0x26, 0x74, - 0xeb, 0x6e, 0x34, 0xdb, 0xef, 0x5e, 0x35, 0xc7, 0x4f, 0xfe, 0x1b, 0x9f, 0x72, 0x78, 0xb7, 0x2f, - 0xbf, 0xf0, 0x45, 0xa4, 0x4f, 0xe1, 0x0b, 0x72, 0x5e, 0x6c, 0x97, 0x90, 0x9c, 0xbc, 0xfc, 0xba, - 0x26, 0x90, 0xd4, 0x21, 0x04, 0x5e, 0x35, 0x8e, 0x0e, 0x10, 0x08, 0x05, 0x0c, 0x66, 0x36, 0x0d, - 0x51, 0xaa, 0x91, 0x43, 0x61, 0x3b, 0x6f, 0x46, 0xe0, 0xcb, 0xcb, 0xc5, 0x31, 0x15, 0x10, 0xde, - 0x10, 0x19, 0x0a, 0x03, 0x4b, 0x63, 0x2f, 0xca, 0x77, 0x97, 0x61, 0x5f, 0x82, 0x8c, 0xb6, 0x39, - 0x1e, 0x4c, 0x62, 0x41, 0x08, 0x2b, 0x8a, 0xe7, 0xd4, 0x2a, 0x35, 0x7a, 0xee, 0xed, 0x93, 0x96, - 0xb8, 0x8b, 0x7c, 0x12, 0x1c, 0xba, 0xde, 0x7b, 0x89, 0x08, 0x85, 0x30, 0xbd, 0x49, 0xc9, 0x4a, - 0x9d, 0xf2, 0xcf, 0x36, 0xee, 0xd7, 0x85, 0x15, 0x96, 0x3c, 0xbc, 0x40, 0x50, 0x43, 0x18, 0x2e, - 0xe5, 0x3b, 0xd7, 0x22, 0x92, 0x78, 0x27, 0x37, 0x85, 0xf4, 0x09, 0xfe, 0x70, 0x80, 0x91, 0x9a, - 0xd1, 0xac, 0xb8, 0x5c, 0x74, 0xae, 0xdc, 0xad, 0xd7, 0xc1, 0x81, 0xce, 0xaa, 0xaf, 0x56, 0x30, - 0x75, 0x71, 0x68, 0xe8, 0x87, 0x3b, 0xf1, 0x20, 0x40, 0x04, 0x17, 0x10, 0xf0, 0x76, 0xc9, 0x12, - 0x72, 0x71, 0xf5, 0xaa, 0x87, 0x86, 0x98, 0x3a, 0x92, 0x98, 0x3e, 0xcb, 0xff, 0x86, 0x03, 0xd2, - 0x57, 0xc3, 0xaf, 0x27, 0x15, 0x11, 0xfc, 0x17, 0xb0, 0x78, 0xee, 0xd3, 0x6e, 0xe1, 0x9d, 0x50, - 0x64, 0xbe, 0x15, 0x22, 0xb8, 0x7f, 0xc3, 0xca, 0x00, 0xbf, 0x98, 0xe1, 0x7e, 0x67, 0x53, 0x37, - 0xfb, 0xc4, 0xb3, 0xe7, 0xd2, 0xf2, 0xed, 0x36, 0xc4, 0x3b, 0x1a, 0x93, 0xc7, 0x2f, 0x97, 0x84, - 0x20, 0x12, 0x86, 0x42, 0xc8, 0xae, 0xc1, 0x40, 0x1b, 0xef, 0xd7, 0x0f, 0x60, 0x01, 0x75, 0xb9, - 0x27, 0xec, 0x88, 0x6f, 0xff, 0xd3, 0x2f, 0x6f, 0x6f, 0xf7, 0x76, 0xec, 0x71, 0x97, 0x97, 0xbb, - 0xd3, 0x0c, 0x60, 0x53, 0x3e, 0x03, 0x14, 0x12, 0xe0, 0x0f, 0xc1, 0x28, 0xfe, 0x1c, 0x70, 0x00, - 0x4d, 0x61, 0xc7, 0x8e, 0x42, 0x90, 0x54, 0x31, 0x2e, 0xf8, 0xc5, 0x0f, 0xc2, 0xdf, 0xd9, 0x52, - 0x3e, 0xb6, 0xed, 0xf6, 0xe4, 0x02, 0xbe, 0x3f, 0xc3, 0xb8, 0x01, 0xd4, 0x4d, 0xe5, 0x22, 0x6c, - 0x10, 0x12, 0xe7, 0x73, 0xff, 0x17, 0x38, 0x78, 0xe2, 0x2f, 0x08, 0xfc, 0x02, 0x8f, 0x49, 0x63, - 0x13, 0xf6, 0x54, 0x41, 0xc3, 0x6b, 0x4a, 0x01, 0xf5, 0x2f, 0xdf, 0xe1, 0xb9, 0x3c, 0x78, 0xbd, - 0xba, 0x67, 0x61, 0xfb, 0xeb, 0xa8, 0xc8, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x61, 0x30, 0xb0, - 0x7a, 0x3f, 0x42, 0xfa, 0x3f, 0xa2, 0xc5, 0x1d, 0xd7, 0xa0, 0x65, 0xe8, 0x56, 0x52, 0xf4, 0x47, - 0x80, 0x17, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x62, 0x31, 0x30, 0x22, 0x9f, 0x20, 0xb5, - 0x55, 0x52, 0x75, 0xe8, 0xfe, 0x8a, 0x3c, 0xa3, 0xba, 0x8e, 0xd1, 0x9d, 0xdd, 0xd5, 0x45, 0xf2, - 0x6a, 0xf1, 0x7d, 0x53, 0x25, 0xd4, 0xcb, 0x3e, 0xb9, 0x7d, 0x4c, 0xb3, 0xeb, 0x95, 0x75, 0x32, - 0x5f, 0x5e, 0xfa, 0x2a, 0x01, 0xfd, 0x52, 0x42, 0xdd, 0x11, 0x32, 0x5d, 0x6b, 0xea, 0x91, 0x7a, - 0xb5, 0x74, 0x46, 0xae, 0xfa, 0xa9, 0xfa, 0xb9, 0x19, 0xd7, 0xbe, 0xea, 0xaa, 0xab, 0xad, 0x7c, - 0x11, 0x14, 0x98, 0xbd, 0x7c, 0x11, 0xeb, 0x50, 0x1d, 0xdf, 0x0d, 0x97, 0x3f, 0x51, 0xe5, 0x4d, - 0x34, 0xd3, 0xf7, 0xd7, 0xbe, 0x17, 0x36, 0xef, 0x48, 0xe1, 0x03, 0x46, 0xc5, 0xa4, 0xc7, 0xe2, - 0x6b, 0xff, 0x04, 0x72, 0xd5, 0x6b, 0x48, 0xaa, 0xfa, 0xf5, 0xf5, 0x8d, 0xf4, 0x54, 0x88, 0x6f, - 0x52, 0xa5, 0x74, 0x47, 0xfa, 0xb7, 0xcd, 0xab, 0xd7, 0x16, 0x25, 0xa6, 0x9a, 0x69, 0xa6, 0x9a, - 0x69, 0xf4, 0x29, 0xab, 0xab, 0xc2, 0x3d, 0x1e, 0xbe, 0x8e, 0x6b, 0xe0, 0x9c, 0x43, 0xbb, 0xf1, - 0x58, 0xed, 0x23, 0x9f, 0x05, 0x11, 0x75, 0xef, 0x77, 0xdf, 0xe0, 0x92, 0xee, 0xee, 0x95, 0x7a, - 0xd3, 0x7c, 0xc4, 0x77, 0x15, 0xfc, 0x11, 0x67, 0xbf, 0xd8, 0x79, 0x94, 0x83, 0x7b, 0x2d, 0xff, - 0xf6, 0x5f, 0x06, 0x68, 0xf9, 0xcd, 0x32, 0x4c, 0xf0, 0xba, 0xbf, 0xac, 0xbe, 0xbd, 0xf0, 0x47, - 0x7a, 0xf2, 0x8e, 0xea, 0xe5, 0xf4, 0x48, 0xe4, 0xfd, 0x11, 0xeb, 0xab, 0xc5, 0xf5, 0xeb, 0xeb, - 0xd5, 0xd7, 0xaf, 0xaf, 0x5f, 0x57, 0xf8, 0x21, 0xd6, 0xae, 0xfa, 0xbd, 0x75, 0x7f, 0xab, 0xcf, - 0xd1, 0xde, 0x16, 0xe8, 0x77, 0x40, 0x1b, 0x56, 0x24, 0x30, 0x4c, 0x1c, 0x42, 0xc1, 0x21, 0x84, - 0xb8, 0x07, 0x57, 0xe0, 0xed, 0xf8, 0x70, 0x13, 0x71, 0x56, 0x2a, 0xf6, 0xcd, 0xfc, 0x14, 0x12, - 0xe7, 0x39, 0x77, 0x7d, 0x88, 0x73, 0xa3, 0xe5, 0x0b, 0x75, 0x63, 0xeb, 0xf7, 0x02, 0x4c, 0x29, - 0x27, 0x93, 0x45, 0x60, 0xd7, 0xf1, 0x55, 0xfa, 0x29, 0x71, 0x0f, 0x72, 0xdd, 0xbb, 0x85, 0x05, - 0x4e, 0x2e, 0x0c, 0x41, 0xc0, 0xd2, 0x1e, 0x1c, 0x45, 0x40, 0x5a, 0x10, 0xf4, 0xc7, 0x40, 0x0a, - 0x96, 0x00, 0x3c, 0x1d, 0xf1, 0x90, 0x37, 0x23, 0xa4, 0x39, 0x78, 0x73, 0xda, 0xc0, 0x7e, 0x6b, - 0x0c, 0x86, 0x6a, 0x4e, 0xa0, 0x06, 0x0f, 0x7c, 0x0f, 0x27, 0xd1, 0x8c, 0x6d, 0x5d, 0xb9, 0xf8, - 0x29, 0x06, 0x03, 0x64, 0xa0, 0x02, 0xa3, 0xfd, 0x1c, 0x4f, 0x0f, 0x1c, 0x0e, 0xa0, 0x5e, 0x1d, - 0x02, 0xa1, 0x63, 0x6d, 0x36, 0x8f, 0x79, 0x7b, 0x58, 0x93, 0x82, 0xe0, 0x6c, 0x90, 0xc6, 0xe6, - 0xe4, 0x5f, 0xf0, 0x62, 0x08, 0x06, 0xc2, 0xe7, 0xc3, 0xa1, 0x62, 0x10, 0x11, 0x8e, 0x7c, 0x07, - 0x41, 0x60, 0x3a, 0x0b, 0x03, 0x9c, 0x4a, 0x70, 0x01, 0xcb, 0x2c, 0x6e, 0xe5, 0x83, 0x2b, 0xd0, - 0x84, 0xa4, 0x13, 0xc7, 0x02, 0xd1, 0x0e, 0xe0, 0xfb, 0x3f, 0xf0, 0xfe, 0x92, 0x12, 0x44, 0x13, - 0xf4, 0x6d, 0x89, 0x38, 0x00, 0x08, 0x00, 0xd0, 0x40, 0x15, 0x15, 0x74, 0x4f, 0xef, 0x22, 0x10, - 0x02, 0x15, 0x84, 0x38, 0x0d, 0xe0, 0x34, 0xe0, 0x60, 0xa3, 0x2e, 0x7f, 0x86, 0xca, 0xc1, 0xa7, - 0x41, 0x86, 0xe9, 0xee, 0xce, 0x48, 0xe2, 0x2f, 0xf0, 0x43, 0x6d, 0xa6, 0xef, 0xf1, 0x76, 0xd2, - 0x1b, 0x66, 0xc2, 0x1a, 0x06, 0x42, 0x16, 0x90, 0x7c, 0x15, 0xe9, 0x24, 0xe6, 0xa7, 0xee, 0xa9, - 0xd7, 0xc6, 0xc9, 0x25, 0x2a, 0x96, 0x79, 0x74, 0xd1, 0xae, 0x0e, 0x5e, 0xb1, 0x2d, 0x7a, 0x04, - 0x2a, 0xd6, 0xca, 0x05, 0xe1, 0x23, 0xfd, 0xd1, 0x9a, 0x3f, 0xe0, 0x82, 0x9b, 0x87, 0xf2, 0xf4, - 0x1e, 0xd2, 0x10, 0xc2, 0x26, 0x37, 0x01, 0x67, 0xf2, 0xb6, 0x7d, 0xc5, 0xff, 0xc6, 0x79, 0xae, - 0xd1, 0xaf, 0x5d, 0xee, 0xbb, 0x06, 0x72, 0x57, 0xf0, 0x57, 0x66, 0x78, 0xa7, 0xb9, 0x93, 0xa9, - 0xaa, 0xd2, 0x49, 0xfa, 0xf8, 0x2b, 0x2f, 0x36, 0x25, 0x28, 0xcd, 0x2a, 0x14, 0xbe, 0x33, 0xee, - 0x4d, 0x4f, 0xf1, 0xdb, 0xda, 0x2e, 0x3f, 0xdb, 0x4f, 0xc1, 0x74, 0x92, 0x49, 0x03, 0xe5, 0xc5, - 0xcf, 0xf0, 0x45, 0x6d, 0xae, 0x5f, 0x17, 0x11, 0x20, 0xaa, 0x48, 0xae, 0xbf, 0x05, 0x76, 0xaf, - 0x24, 0x93, 0x2b, 0x7d, 0x57, 0xbe, 0xad, 0x5d, 0x58, 0xbe, 0x08, 0xe6, 0xce, 0x29, 0x6a, 0xe4, - 0xbd, 0xfe, 0x0b, 0x7b, 0x65, 0x6b, 0x54, 0x34, 0x47, 0x2f, 0x82, 0x4a, 0x26, 0x67, 0xfc, 0x5f, - 0x27, 0x75, 0xf2, 0xf6, 0xd7, 0xc3, 0x95, 0x6c, 0xf2, 0xd4, 0x90, 0x73, 0x42, 0xff, 0xc5, 0x90, - 0xde, 0xb9, 0x3e, 0x37, 0xa1, 0x2d, 0x7c, 0x79, 0x24, 0xe6, 0x63, 0xbb, 0x4c, 0xdb, 0x5d, 0xf0, - 0xa5, 0xed, 0x73, 0x52, 0xd9, 0x06, 0x59, 0x39, 0x86, 0x33, 0x83, 0xc5, 0xf1, 0x5d, 0x31, 0x2a, - 0x4d, 0xb5, 0xc1, 0x04, 0x6d, 0xdd, 0x58, 0x80, 0xdc, 0x95, 0x43, 0x47, 0x38, 0xea, 0x18, 0x7a, - 0x81, 0xef, 0xa6, 0x5a, 0x07, 0x46, 0x65, 0xa0, 0x94, 0x49, 0x7f, 0xe0, 0xe4, 0x10, 0x8d, 0x21, - 0x33, 0xeb, 0x40, 0x3f, 0x0e, 0x87, 0x85, 0x50, 0xd4, 0xd1, 0xe6, 0x12, 0xa0, 0x03, 0x0a, 0x37, - 0xd8, 0x0d, 0xfa, 0x8d, 0x97, 0xd6, 0xd1, 0x4f, 0x83, 0xc5, 0x9e, 0x90, 0x47, 0x4f, 0x8f, 0x39, - 0xf0, 0xf0, 0xa7, 0x39, 0xfc, 0x48, 0x40, 0x69, 0x1f, 0x95, 0x33, 0xcc, 0x85, 0x42, 0xa6, 0x51, - 0xa8, 0xc4, 0x44, 0xea, 0x01, 0xdf, 0x22, 0x4a, 0xe1, 0xb2, 0xae, 0xf5, 0xa8, 0x0f, 0x6b, 0xfe, - 0x14, 0xbf, 0xd8, 0x3b, 0xe1, 0xcf, 0xcf, 0x95, 0x9d, 0x55, 0xa1, 0xcf, 0x77, 0x38, 0x21, 0x04, - 0x01, 0x4b, 0xe3, 0x02, 0xc1, 0xad, 0x52, 0x65, 0x49, 0xc0, 0x79, 0x6d, 0x65, 0x83, 0x32, 0x4e, - 0x93, 0x64, 0xed, 0x0e, 0xf8, 0xa3, 0x60, 0x3b, 0x35, 0x2e, 0x1f, 0x3f, 0x8b, 0xfc, 0xfc, 0x22, - 0x08, 0x06, 0xdd, 0x03, 0x9e, 0x96, 0xf2, 0x0e, 0x90, 0x10, 0x38, 0x28, 0xc9, 0x95, 0x0e, 0xfa, - 0xbc, 0x0d, 0x15, 0xa9, 0x6c, 0xf0, 0x48, 0x2d, 0x90, 0xea, 0xea, 0xdd, 0x29, 0x4a, 0x48, 0x67, - 0xdd, 0xf8, 0x46, 0xa1, 0x2a, 0xff, 0x0c, 0x15, 0xee, 0xd1, 0xe4, 0x2d, 0xd8, 0x76, 0xa9, 0x95, - 0x8e, 0xaf, 0x0a, 0x3f, 0xf0, 0x4a, 0x55, 0xb5, 0xb1, 0x9f, 0x5c, 0x57, 0xef, 0x88, 0xd2, 0xa7, - 0x3f, 0xfd, 0x67, 0x7d, 0xd6, 0x25, 0xf8, 0x44, 0x87, 0xcf, 0x69, 0xa9, 0x70, 0xdf, 0xfc, 0x11, - 0xf2, 0x2a, 0x4a, 0x5f, 0x29, 0x53, 0xda, 0xf2, 0xed, 0x1f, 0x72, 0x71, 0xb3, 0xb3, 0xcd, 0x87, - 0xd6, 0x9d, 0x98, 0x71, 0x49, 0xd7, 0x4b, 0xa1, 0x26, 0x78, 0x55, 0xb3, 0x51, 0x1d, 0x7f, 0xe3, - 0x75, 0x53, 0xd6, 0x91, 0x35, 0x36, 0x43, 0x2e, 0x5b, 0xb4, 0xa5, 0xf2, 0xdf, 0xfd, 0xf2, 0x74, - 0xc4, 0xf4, 0x48, 0x25, 0xe6, 0xea, 0xa3, 0x79, 0xb4, 0xd3, 0x4f, 0xdf, 0x49, 0xd7, 0x04, 0xc5, - 0x4e, 0x9f, 0x3f, 0xf3, 0x7d, 0xda, 0x6b, 0x5c, 0x12, 0x6f, 0x4a, 0x2a, 0x83, 0x80, 0x88, 0x78, - 0x8d, 0xb7, 0x2e, 0xa1, 0x38, 0x07, 0x0f, 0x0c, 0xae, 0x62, 0x56, 0x42, 0x90, 0x64, 0xd3, 0x03, - 0xcd, 0x73, 0x7f, 0xe0, 0x41, 0x04, 0x23, 0x6c, 0xee, 0x90, 0xff, 0x96, 0xd2, 0x61, 0x21, 0x44, - 0xb9, 0x5a, 0x0f, 0x36, 0x8e, 0xdc, 0x1b, 0x09, 0x49, 0xca, 0x96, 0x62, 0x99, 0x60, 0x62, 0x0f, - 0x08, 0x44, 0xf9, 0x7f, 0x08, 0x01, 0xd4, 0x7b, 0xb7, 0x64, 0xbf, 0x88, 0x87, 0xe5, 0x9a, 0x88, - 0xe3, 0x32, 0x29, 0x24, 0x1a, 0x8f, 0x02, 0xc3, 0x6f, 0x1b, 0xcb, 0x9b, 0xb8, 0x7f, 0xc4, 0x42, - 0x9d, 0xe4, 0x69, 0x1f, 0xe5, 0x81, 0xb3, 0x09, 0x4a, 0xae, 0xab, 0xd2, 0x48, 0x18, 0x88, 0xc9, - 0xb3, 0x3b, 0x82, 0x30, 0x4a, 0xc0, 0x5a, 0xed, 0x57, 0x1c, 0xc9, 0x64, 0x93, 0x94, 0xe3, 0x06, - 0x58, 0x64, 0x20, 0x1e, 0x30, 0x7e, 0x94, 0x90, 0x0b, 0x66, 0x28, 0xa5, 0x0b, 0x31, 0xe5, 0xc9, - 0x02, 0xc4, 0x96, 0x98, 0x66, 0x1f, 0x61, 0xd0, 0x9e, 0x06, 0xb1, 0x1c, 0xd1, 0xca, 0x72, 0xd7, - 0xfc, 0x36, 0x24, 0x1d, 0xb2, 0x0e, 0x50, 0x3f, 0xcb, 0x14, 0x20, 0x12, 0xb3, 0x42, 0xe0, 0x60, - 0x83, 0x13, 0xd4, 0xbf, 0xc1, 0x61, 0xde, 0xd5, 0x76, 0x92, 0xdf, 0x26, 0x3e, 0x62, 0x5b, 0xb7, - 0xe0, 0x9b, 0x2e, 0x67, 0x69, 0x19, 0xfa, 0xf8, 0x7e, 0x42, 0xac, 0x2d, 0x62, 0x43, 0x96, 0x47, - 0x91, 0xda, 0xd6, 0x91, 0xf4, 0xec, 0xb2, 0x64, 0xff, 0xe3, 0x2d, 0x6d, 0x0d, 0x38, 0x3f, 0x53, - 0x2f, 0xa6, 0x95, 0x3f, 0x0c, 0x6c, 0xd3, 0x64, 0x4d, 0x4a, 0x86, 0x52, 0xad, 0x1c, 0xe6, 0x3e, - 0x97, 0xfe, 0x59, 0x08, 0x90, 0x8c, 0x07, 0xfb, 0xa6, 0xd1, 0xb2, 0xa2, 0xf0, 0x5b, 0xbc, 0xfa, - 0x7d, 0x4d, 0xa5, 0x28, 0x4f, 0x86, 0x7c, 0xb8, 0xb9, 0xaa, 0xff, 0xe4, 0x21, 0x59, 0x56, 0x2a, - 0xe8, 0xb9, 0x49, 0xde, 0xd3, 0x5f, 0x3d, 0x73, 0xf3, 0x7f, 0xf0, 0x4f, 0xb7, 0x25, 0x36, 0xcb, - 0x8f, 0x0a, 0x77, 0xe5, 0xa2, 0xe0, 0xb7, 0x7a, 0x18, 0xf5, 0x7e, 0x56, 0x18, 0xbe, 0x08, 0x67, - 0x62, 0xc7, 0xee, 0x0a, 0x28, 0x8d, 0xc0, 0xa2, 0x0a, 0x46, 0xd0, 0x00, 0x01, 0x35, 0x87, 0xbc, - 0x90, 0x00, 0x1a, 0x13, 0xb4, 0x6c, 0x0d, 0xc9, 0xa4, 0x4a, 0xd9, 0x9a, 0xc8, 0x13, 0x81, 0xe4, - 0xaa, 0x8a, 0xd7, 0xad, 0xb3, 0xf2, 0x7b, 0x49, 0x95, 0x03, 0x84, 0x14, 0x71, 0x60, 0x1e, 0xe5, - 0xa8, 0x88, 0x10, 0xbe, 0x6d, 0xb6, 0xd5, 0x62, 0x0e, 0xdf, 0x7f, 0x12, 0x10, 0xc1, 0xaf, 0xa5, - 0xa4, 0xcf, 0x65, 0xc7, 0xdf, 0x08, 0x08, 0x1e, 0x51, 0x1f, 0x14, 0xbe, 0x5b, 0x7d, 0x22, 0x7f, - 0x84, 0x07, 0x88, 0x22, 0xa4, 0xc2, 0xee, 0x5b, 0xd2, 0x2b, 0x16, 0x87, 0xae, 0x11, 0x08, 0x0d, - 0xaf, 0x8d, 0x49, 0x56, 0xb7, 0xb0, 0x73, 0x89, 0x21, 0x06, 0x34, 0x9d, 0x5a, 0x4c, 0xe5, 0x40, - 0x71, 0x23, 0x1d, 0x69, 0xb0, 0x80, 0x6d, 0xb8, 0x4b, 0xae, 0x28, 0x4a, 0xd4, 0x4a, 0x74, 0xd7, - 0xc9, 0xcc, 0x5a, 0x67, 0x63, 0x7c, 0x31, 0xaa, 0x82, 0x89, 0x7d, 0x50, 0xb0, 0x00, 0xd0, 0x4a, - 0x07, 0x00, 0x41, 0xb2, 0x03, 0xef, 0x4d, 0xbf, 0xf0, 0x41, 0xa0, 0x72, 0x73, 0x61, 0x15, 0x8d, - 0x01, 0x80, 0x24, 0x81, 0xc0, 0x60, 0x19, 0x56, 0xa1, 0x60, 0x11, 0x3e, 0x28, 0x22, 0xf0, 0x6b, - 0x48, 0xc8, 0xb9, 0x38, 0x74, 0x43, 0xbf, 0xe5, 0xee, 0xcf, 0x87, 0xed, 0x46, 0xd7, 0x6e, 0x5d, - 0x2d, 0x24, 0x97, 0x2f, 0x4f, 0xfc, 0x25, 0xcf, 0x96, 0xdf, 0xf2, 0xe9, 0xcb, 0xc1, 0x34, 0x31, - 0x0d, 0x52, 0x2e, 0x92, 0x70, 0xa3, 0x23, 0x8a, 0xb6, 0x10, 0x90, 0x5d, 0xff, 0x89, 0x1b, 0x3f, - 0xce, 0xfd, 0x54, 0x5d, 0x62, 0xe4, 0xe2, 0xe5, 0xee, 0x20, 0xaf, 0x03, 0x4c, 0x69, 0x23, 0xda, - 0x57, 0x6a, 0xa9, 0x2f, 0xf1, 0x21, 0x10, 0x4d, 0x5a, 0x5b, 0xb8, 0xae, 0xbc, 0x48, 0xf2, 0x2b, - 0xe7, 0xee, 0xee, 0xbb, 0x16, 0x65, 0x7c, 0x29, 0x92, 0x19, 0x98, 0xc9, 0x5a, 0x12, 0x16, 0xd6, - 0xb0, 0x90, 0x42, 0xc6, 0x46, 0x7c, 0x42, 0x0f, 0x93, 0xee, 0xd5, 0x0c, 0x5e, 0xf8, 0x2c, 0xb7, - 0x6f, 0xca, 0x55, 0x22, 0x49, 0xb6, 0xd6, 0x11, 0xf2, 0xef, 0x77, 0x11, 0x1e, 0x25, 0x2d, 0x53, - 0xdb, 0x55, 0x4c, 0x3d, 0xde, 0xe2, 0x01, 0x40, 0x50, 0x65, 0x6a, 0xa2, 0xe2, 0xe2, 0x40, 0xf8, - 0x2f, 0x5f, 0x8d, 0xa6, 0x35, 0xa8, 0xfa, 0xb9, 0x76, 0x3b, 0x00, 0x14, 0xc3, 0xc1, 0x80, 0x52, - 0x06, 0x3a, 0xe7, 0xf0, 0x29, 0x48, 0x48, 0x06, 0x55, 0x81, 0xe2, 0xd9, 0xec, 0x57, 0xd4, 0x2e, - 0x4e, 0x52, 0x0d, 0x59, 0x08, 0x32, 0xf0, 0x61, 0xc2, 0x20, 0xc0, 0x66, 0x7b, 0xc2, 0xff, 0x0e, - 0xac, 0xad, 0x66, 0x8a, 0xb4, 0x94, 0xbe, 0x94, 0x3a, 0x8e, 0x01, 0x1a, 0x80, 0xdf, 0x60, 0x5b, - 0xe6, 0x3f, 0x78, 0xee, 0xee, 0x51, 0xbe, 0x31, 0x38, 0x76, 0x7e, 0x4c, 0x0f, 0xdf, 0xe9, 0xba, - 0xa9, 0xc8, 0xe7, 0xe3, 0x9f, 0xd6, 0xea, 0x85, 0xc4, 0x58, 0x86, 0xf7, 0x41, 0x88, 0x06, 0x6c, - 0xb4, 0xad, 0x3f, 0xc3, 0x78, 0x00, 0x5c, 0x46, 0x32, 0x53, 0xc8, 0xd3, 0xe4, 0xef, 0xf6, 0xda, - 0x7a, 0xba, 0xdd, 0x8a, 0x0d, 0xc5, 0x4b, 0xe2, 0xcb, 0xea, 0x96, 0xdb, 0x65, 0x8b, 0x06, 0x20, - 0x69, 0xe4, 0x61, 0x07, 0x36, 0x19, 0x00, 0x0a, 0x2f, 0xf8, 0x2d, 0x3a, 0xaa, 0xcf, 0xd4, 0xbb, - 0x2e, 0xb3, 0xe0, 0xbb, 0xa6, 0xe9, 0xd3, 0x71, 0x5d, 0x7c, 0x10, 0xd5, 0x8f, 0xcb, 0xe0, 0xa6, - 0xda, 0xa4, 0x89, 0xb5, 0xdf, 0x7c, 0xa1, 0xae, 0x8a, 0xc7, 0xc1, 0x77, 0x2f, 0xf2, 0xf7, 0xbe, - 0x3a, 0xde, 0x95, 0xd2, 0x77, 0x77, 0x72, 0x70, 0xa0, 0x80, 0xa5, 0x03, 0xb9, 0x20, 0x50, 0x3b, - 0x93, 0xab, 0x3c, 0x0c, 0xb3, 0x6b, 0x23, 0x4b, 0x9d, 0xf0, 0x0c, 0x5d, 0x3e, 0xe2, 0x04, 0x82, - 0xb2, 0x0b, 0xc4, 0x3a, 0x99, 0x3a, 0x10, 0x47, 0x28, 0x6c, 0x9f, 0xbc, 0xb8, 0xe7, 0x89, 0x1e, - 0x59, 0x33, 0x94, 0xdc, 0xaa, 0xa5, 0x3b, 0x7c, 0x40, 0x60, 0x15, 0x91, 0x64, 0x25, 0xbb, 0x28, - 0xe9, 0x05, 0xe5, 0xe3, 0x6a, 0x5f, 0x37, 0x63, 0xf2, 0xe2, 0x42, 0x03, 0x2c, 0xf9, 0x99, 0x71, - 0x72, 0x65, 0x4b, 0xdc, 0x60, 0x10, 0x13, 0x92, 0x0b, 0x6f, 0xa5, 0xe2, 0x4f, 0x6d, 0x36, 0x92, - 0xbf, 0xc2, 0xbd, 0x32, 0x31, 0x18, 0xa2, 0x4c, 0x6a, 0x9b, 0x92, 0x14, 0x5f, 0xe0, 0x93, 0x43, - 0x2d, 0xf5, 0xc4, 0x82, 0x00, 0xa0, 0xa1, 0x43, 0x17, 0x10, 0x70, 0xb3, 0x11, 0xc0, 0xae, 0x23, - 0x8c, 0xdc, 0x30, 0xa5, 0xe4, 0x20, 0xc4, 0x0c, 0x2d, 0xca, 0x26, 0x47, 0x71, 0xc2, 0x22, 0x06, - 0xdc, 0xcc, 0x7d, 0x27, 0x7d, 0xf6, 0xe5, 0x83, 0xe8, 0x7d, 0x5f, 0x14, 0x7d, 0x3f, 0xff, 0x89, - 0x8e, 0x28, 0x89, 0x07, 0x23, 0x0a, 0xd6, 0x93, 0xa8, 0x5e, 0xdf, 0x88, 0x05, 0x47, 0x03, 0x35, - 0x22, 0x96, 0x5e, 0xa5, 0x94, 0x07, 0x6e, 0xab, 0xf9, 0xc3, 0x00, 0x80, 0x74, 0x48, 0x90, 0x4f, - 0x48, 0x27, 0xb9, 0x51, 0x75, 0x25, 0x0b, 0x2d, 0xeb, 0x5e, 0x18, 0x18, 0x60, 0x4e, 0xa0, 0x04, - 0xa4, 0x61, 0x45, 0x43, 0x71, 0x4f, 0x77, 0x88, 0xe4, 0x67, 0x38, 0x2b, 0xbe, 0x20, 0x1e, 0xd3, - 0xb7, 0x08, 0x81, 0xa0, 0x29, 0xbe, 0xea, 0xbc, 0x6f, 0x88, 0x60, 0x11, 0x0c, 0xa5, 0x9d, 0x62, - 0x19, 0xb8, 0x73, 0xeb, 0x61, 0xd9, 0x40, 0x03, 0xea, 0x05, 0x6e, 0x4a, 0x4a, 0x23, 0x1e, 0xf7, - 0x80, 0xfe, 0xe2, 0xad, 0xc3, 0xfe, 0xca, 0xea, 0x0e, 0xae, 0xea, 0x69, 0xb6, 0x6e, 0x3f, 0xe3, - 0xa2, 0xed, 0xf8, 0x60, 0x69, 0x04, 0x15, 0x00, 0x50, 0x61, 0x8c, 0xe5, 0xc3, 0xc6, 0x9d, 0xfe, - 0x08, 0xed, 0x26, 0x06, 0xa4, 0x05, 0xd9, 0xca, 0x6e, 0xca, 0xda, 0x4c, 0x38, 0x4f, 0x92, 0x75, - 0x28, 0xff, 0x76, 0xcf, 0xb9, 0x38, 0x9d, 0x4d, 0x9a, 0xd7, 0xe1, 0x4b, 0xbe, 0x96, 0xd5, 0xa6, - 0x93, 0x4d, 0x48, 0x79, 0x28, 0x39, 0xfe, 0x6d, 0xd0, 0xd3, 0xf5, 0xd5, 0x72, 0xd7, 0x72, 0x70, - 0xa0, 0x88, 0x87, 0xdb, 0x6f, 0x1d, 0xc9, 0x9d, 0x33, 0xb2, 0x4f, 0xf1, 0x0e, 0x2b, 0x1f, 0x1d, - 0xd5, 0x75, 0x55, 0xaf, 0x89, 0x05, 0x72, 0xdc, 0xec, 0x64, 0x51, 0x4d, 0xd2, 0x2f, 0xeb, 0xc2, - 0x21, 0x49, 0xcb, 0x29, 0x18, 0xc1, 0xba, 0x65, 0xc6, 0xee, 0x62, 0xee, 0xdd, 0x82, 0x59, 0x53, - 0x79, 0x7b, 0x58, 0x25, 0xf0, 0x5a, 0x74, 0xad, 0x58, 0x3c, 0x46, 0x69, 0x53, 0xea, 0xcf, 0x10, - 0x09, 0xc5, 0x56, 0x27, 0xdb, 0x3c, 0xf5, 0xe0, 0xf1, 0x23, 0xe5, 0x66, 0x2a, 0xd3, 0x8a, 0xdc, - 0x57, 0x73, 0x10, 0xf8, 0x80, 0x88, 0xc3, 0xb3, 0x62, 0xee, 0xef, 0x2c, 0x7b, 0xbb, 0xbe, 0x18, - 0x0c, 0x8b, 0xee, 0xee, 0xf5, 0x87, 0x94, 0x00, 0xcb, 0x9a, 0x3d, 0x82, 0x75, 0x4d, 0xff, 0xa6, - 0x5d, 0xc1, 0x80, 0xd5, 0x4a, 0x46, 0x02, 0x0d, 0xc1, 0x8c, 0x68, 0x2b, 0xd7, 0xe1, 0xc4, 0x50, - 0x00, 0xdf, 0x79, 0x07, 0x11, 0x58, 0x24, 0xfb, 0xaf, 0xf8, 0xb8, 0x9d, 0x49, 0x07, 0xe3, 0x83, - 0xb8, 0x9e, 0x89, 0xeb, 0xfb, 0xf8, 0xb4, 0x16, 0xbe, 0xbf, 0xc3, 0x8a, 0x00, 0x64, 0x0b, 0xa5, - 0x30, 0xbe, 0x6f, 0xaf, 0x71, 0x56, 0x6e, 0x5c, 0x2e, 0xb7, 0x9f, 0xd0, 0x32, 0xd0, 0x26, 0xb0, - 0x63, 0xf0, 0xc8, 0x74, 0x7a, 0x7c, 0x33, 0x05, 0x32, 0xd0, 0xb7, 0x72, 0xd6, 0x05, 0xb6, 0x9e, - 0xb3, 0xeb, 0xc7, 0x7c, 0xfc, 0x09, 0x20, 0x58, 0x0a, 0x68, 0x94, 0x73, 0x29, 0xa0, 0x45, 0xa0, - 0xba, 0xe1, 0xe5, 0x8b, 0x26, 0x1c, 0xe3, 0xf9, 0xf9, 0x3d, 0x98, 0xbc, 0x96, 0x0c, 0x74, 0xf8, - 0x43, 0xce, 0x67, 0x5b, 0xf0, 0x28, 0x81, 0x00, 0x69, 0x0f, 0x71, 0x32, 0x47, 0x02, 0xaf, 0xc1, - 0x55, 0x59, 0xa7, 0x83, 0x2c, 0x71, 0x99, 0x23, 0x4a, 0xce, 0x01, 0xe1, 0xb7, 0x12, 0x45, 0x51, - 0xe4, 0x58, 0x2d, 0xc3, 0xa4, 0x25, 0x08, 0x99, 0x81, 0x26, 0x72, 0x88, 0x60, 0x4a, 0xa4, 0xff, - 0x82, 0x91, 0x33, 0xe1, 0xfe, 0xe7, 0xcf, 0x51, 0xe5, 0xf7, 0x3e, 0x09, 0x24, 0x5d, 0x50, 0x9f, - 0xbe, 0x09, 0xfb, 0x4a, 0x6d, 0xda, 0xb1, 0x08, 0xf7, 0x49, 0x2f, 0xc3, 0x72, 0x32, 0x92, 0x1a, - 0x46, 0x05, 0xdb, 0x6d, 0xfd, 0xf5, 0x23, 0x7c, 0x17, 0x62, 0x6c, 0xf9, 0x58, 0xf4, 0xbc, 0x51, - 0x25, 0xfc, 0xcc, 0xd8, 0xdf, 0x7a, 0xaa, 0x5e, 0x09, 0xcb, 0xb4, 0xaa, 0x97, 0x29, 0x38, 0x23, - 0x26, 0xd9, 0xd8, 0x6e, 0x22, 0x7b, 0xaa, 0x15, 0xf2, 0xff, 0xc4, 0x87, 0x8d, 0x17, 0xaa, 0xaa, - 0x59, 0x71, 0x4b, 0x6d, 0xb8, 0xd6, 0xbf, 0xf0, 0x88, 0x46, 0x9d, 0x75, 0xab, 0x1e, 0x55, 0x1e, - 0x36, 0xdb, 0x05, 0x2a, 0xe7, 0x3a, 0x73, 0x17, 0xb2, 0x3a, 0xbc, 0xcc, 0x4d, 0x85, 0x47, 0xa1, - 0x78, 0xef, 0xd1, 0x95, 0x45, 0xae, 0xe8, 0x8f, 0x0f, 0xf3, 0x9d, 0x52, 0x49, 0xbe, 0x3f, 0xf0, - 0xd5, 0x69, 0x53, 0xb8, 0xf6, 0x2e, 0x82, 0x45, 0xdf, 0xc2, 0x82, 0x0a, 0xa5, 0xa2, 0xc6, 0x37, - 0x12, 0xa8, 0x10, 0xb0, 0x7a, 0xa1, 0x8d, 0xc2, 0xcd, 0x0e, 0x1c, 0x6e, 0x1e, 0xa8, 0x2d, 0xdd, - 0x7c, 0x15, 0xcc, 0xc2, 0xcc, 0xbd, 0x4b, 0x87, 0x38, 0x8a, 0xf5, 0x1d, 0x78, 0x90, 0xc1, 0xd5, - 0x4d, 0x93, 0x50, 0x60, 0xa4, 0x27, 0x72, 0xde, 0x11, 0x2b, 0x53, 0xff, 0x04, 0x58, 0x75, 0x93, - 0x64, 0x07, 0xc1, 0x51, 0x49, 0xd5, 0x8d, 0xff, 0x26, 0xb6, 0x5c, 0x27, 0xca, 0xbb, 0x96, 0xe9, - 0x65, 0xe0, 0x80, 0x6d, 0x87, 0x51, 0xeb, 0x70, 0x78, 0xf9, 0x2a, 0xa3, 0x0e, 0x86, 0x58, 0x37, - 0x71, 0x78, 0xd2, 0x8a, 0x32, 0xf1, 0x5e, 0x13, 0x03, 0xae, 0x5f, 0xfc, 0x18, 0x0d, 0xee, 0x2e, - 0xa7, 0x03, 0xa3, 0x9f, 0x8e, 0x3f, 0x38, 0x7a, 0x89, 0xf9, 0xbe, 0x20, 0x1e, 0x6e, 0xde, 0x20, - 0x00, 0x10, 0x0f, 0xf9, 0xc0, 0x18, 0x44, 0x00, 0x61, 0xf0, 0xf2, 0x80, 0x0a, 0xd6, 0xd8, 0xe3, - 0x5b, 0x1e, 0x84, 0xbd, 0xd4, 0x39, 0xec, 0xa1, 0x7a, 0x78, 0x3e, 0xf7, 0xdd, 0xcf, 0x3c, 0xfe, - 0x42, 0x01, 0x09, 0xa8, 0xe0, 0x31, 0x42, 0xaa, 0x1b, 0x60, 0x2f, 0xb1, 0xf1, 0xfc, 0x38, 0x42, - 0x00, 0x01, 0x4f, 0x62, 0xac, 0xf9, 0xca, 0x0d, 0xff, 0xf6, 0xdb, 0xb5, 0x2d, 0xe5, 0xe2, 0xbf, - 0xa9, 0x7a, 0xe1, 0x97, 0x50, 0xed, 0xa9, 0x47, 0xf1, 0x62, 0xca, 0x0e, 0xbf, 0x0e, 0xa8, 0x00, - 0xc4, 0x03, 0x52, 0x30, 0x7c, 0xee, 0xbe, 0x85, 0xf5, 0x51, 0x46, 0x4d, 0xc1, 0x78, 0xf5, 0xc9, - 0x5e, 0x27, 0x3c, 0x58, 0x0c, 0xb0, 0x3e, 0xea, 0x17, 0x48, 0xb4, 0x28, 0xd5, 0xe2, 0x1b, 0xe0, - 0x6a, 0x1e, 0x97, 0x7f, 0x82, 0x19, 0xc1, 0xe9, 0xcb, 0x50, 0xab, 0x96, 0x5d, 0xe2, 0x7a, 0x3e, - 0xae, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x63, 0x31, 0xb0, 0x26, 0x8f, 0xd0, 0xbe, 0x8f, 0xe7, - 0x28, 0xe9, 0x53, 0x4d, 0x34, 0xfc, 0x77, 0x51, 0xf4, 0x67, 0x73, 0x63, 0xb0, 0xf8, 0xfc, 0x3f, - 0x44, 0x35, 0x27, 0x26, 0xeb, 0x17, 0xd5, 0x2a, 0x5d, 0x14, 0xab, 0x3e, 0xb9, 0x7d, 0x4a, 0xb3, - 0xeb, 0x95, 0x75, 0x2a, 0x5f, 0x0d, 0x6b, 0x2b, 0x7a, 0x86, 0xf1, 0xc3, 0x87, 0x86, 0x3a, 0xa5, - 0x4b, 0xad, 0x7d, 0x53, 0xaf, 0x56, 0xae, 0x8c, 0xd1, 0x1d, 0x08, 0x7f, 0xa1, 0x6e, 0x46, 0x75, - 0xef, 0xa9, 0xd3, 0xeb, 0x97, 0xd6, 0xbe, 0xb5, 0xf0, 0x4c, 0x7e, 0x4f, 0x7b, 0xba, 0x4e, 0xbd, - 0xf0, 0x44, 0x6d, 0x55, 0x8f, 0xab, 0x7d, 0x14, 0xa9, 0xf1, 0x65, 0xd2, 0x4b, 0x49, 0x25, 0xd1, - 0xa3, 0x7d, 0x15, 0x3a, 0x1b, 0xd4, 0xa9, 0xf4, 0x48, 0xbe, 0xaf, 0xf5, 0x6a, 0xe0, 0x9e, 0xae, - 0xba, 0xd6, 0xbe, 0x2c, 0xe7, 0xa1, 0xe8, 0xfa, 0x3e, 0x87, 0xa1, 0xe8, 0xfa, 0x3e, 0x8f, 0xa1, - 0x4d, 0x5d, 0x15, 0x1d, 0xf8, 0x23, 0xbd, 0xee, 0x89, 0xe3, 0x0e, 0x92, 0x5a, 0x49, 0x69, 0x25, - 0xa4, 0x96, 0x6e, 0xac, 0x3d, 0x6b, 0xe8, 0xa6, 0xbe, 0x85, 0x47, 0x3e, 0xbb, 0xfd, 0x53, 0x2f, - 0x5b, 0x3e, 0x0a, 0xeb, 0xa3, 0x4f, 0x25, 0x27, 0x66, 0xf9, 0x7c, 0x18, 0x74, 0x8b, 0x9c, 0x77, - 0x4f, 0x53, 0xcf, 0xff, 0xc1, 0x26, 0xaa, 0xa9, 0xcf, 0xac, 0xbe, 0xbd, 0xf4, 0x5c, 0xa3, 0xba, - 0x33, 0x97, 0xd6, 0x39, 0x37, 0x16, 0x5c, 0xdf, 0x9b, 0xfc, 0x39, 0xdd, 0xcd, 0x1d, 0xfa, 0x69, - 0xa6, 0x9f, 0x9a, 0x4e, 0x5e, 0x4e, 0xdf, 0xe7, 0xc8, 0xef, 0xd5, 0x55, 0x7c, 0x17, 0x91, 0xb6, - 0xdb, 0x6d, 0x6b, 0x00, 0x2b, 0xbb, 0xba, 0xaa, 0xaf, 0xa1, 0x51, 0x7c, 0x58, 0xbd, 0x91, 0x58, - 0xc6, 0xbd, 0x57, 0x82, 0x42, 0xee, 0xe5, 0x15, 0x73, 0xf2, 0xa6, 0x9a, 0x69, 0xfb, 0xe2, 0xa5, - 0xce, 0x7a, 0x3f, 0xe2, 0xf9, 0x70, 0xb9, 0x97, 0x0b, 0x9e, 0x78, 0xed, 0x4d, 0x34, 0xd3, 0xff, - 0x2e, 0x7a, 0x6b, 0x82, 0x7f, 0x3e, 0x1f, 0x3c, 0x76, 0x6f, 0x88, 0x92, 0xc9, 0x7e, 0x7c, 0xfc, - 0x12, 0x4f, 0x9c, 0x76, 0x75, 0xeb, 0x2f, 0x82, 0xae, 0x5b, 0x2d, 0xf3, 0x42, 0x46, 0x24, 0x64, - 0x56, 0x9f, 0x05, 0x7e, 0x5c, 0xd4, 0xd9, 0xb4, 0x7c, 0x1c, 0x70, 0xf0, 0xde, 0xe6, 0xc9, 0x34, - 0x92, 0xf4, 0xcb, 0xe3, 0xff, 0x04, 0x64, 0xd5, 0x52, 0xbf, 0x52, 0xaf, 0xe1, 0xea, 0xeb, 0x67, - 0xaa, 0x8c, 0x59, 0x75, 0x49, 0x22, 0xb8, 0xad, 0xe4, 0xec, 0xbf, 0xc1, 0x35, 0xdf, 0xed, 0xb1, - 0xaf, 0x27, 0x5e, 0x08, 0xef, 0x49, 0xee, 0x7d, 0x5f, 0xe8, 0xa4, 0x5c, 0x9c, 0x5c, 0xf8, 0x7c, - 0x36, 0x3b, 0x0f, 0x87, 0xc7, 0x63, 0xb1, 0x72, 0xcd, 0x99, 0xb3, 0xce, 0x57, 0xfb, 0x6d, 0xb6, - 0xd9, 0x38, 0x21, 0x10, 0xee, 0xaa, 0x9d, 0x78, 0x25, 0xaa, 0xea, 0xbc, 0x7f, 0x12, 0x0a, 0x2d, - 0x35, 0xb4, 0xd6, 0xff, 0x57, 0x3e, 0x08, 0xab, 0x7b, 0x9f, 0x04, 0x3d, 0xdd, 0xfe, 0x08, 0x6d, - 0x35, 0x58, 0xbe, 0x8a, 0x99, 0xfa, 0xd7, 0xcf, 0x01, 0x95, 0xb6, 0xdb, 0x6f, 0xc9, 0xc6, 0x4d, - 0xe6, 0xf3, 0x79, 0xbc, 0xfe, 0x7f, 0x93, 0xc9, 0xd7, 0x04, 0xc4, 0x4d, 0x34, 0xd3, 0x4d, 0x34, - 0xd3, 0xff, 0xc1, 0x57, 0x69, 0xa7, 0x7d, 0xa6, 0xad, 0x37, 0xc1, 0x24, 0xfd, 0x5d, 0x4f, 0xfe, - 0x14, 0xdd, 0xdc, 0xd5, 0x67, 0x36, 0xdd, 0xbb, 0x66, 0x63, 0xa6, 0x0f, 0x0d, 0x88, 0x63, 0x6a, - 0xd2, 0xf9, 0xbd, 0x7e, 0x09, 0x46, 0xe4, 0xc2, 0x66, 0x5c, 0x2e, 0x1e, 0xbe, 0x0b, 0xb3, 0xd3, - 0x35, 0x3d, 0x7c, 0x5c, 0xb8, 0x5c, 0x26, 0x33, 0x0b, 0x85, 0xc6, 0xe3, 0x73, 0xc5, 0xdf, 0xae, - 0xaa, 0x4e, 0x2f, 0x97, 0x0b, 0x99, 0x70, 0xb9, 0xe6, 0x9f, 0x27, 0xc3, 0xe2, 0xe3, 0xf3, 0xe6, - 0x7c, 0xf2, 0x52, 0x97, 0x9a, 0xb2, 0xe1, 0x73, 0xc2, 0xf6, 0xf6, 0xd8, 0x73, 0xf6, 0xf2, 0xdf, - 0xe2, 0xbf, 0x08, 0xf2, 0x90, 0x4a, 0x41, 0x2d, 0x96, 0xf6, 0xdb, 0x6f, 0x85, 0x14, 0x01, 0x5e, - 0xad, 0x37, 0xe7, 0xe9, 0xa7, 0xff, 0xe0, 0xb6, 0x5c, 0x2e, 0x1e, 0xea, 0x3e, 0x72, 0x2d, 0xe2, - 0x41, 0x55, 0x2b, 0x4d, 0x2e, 0xaf, 0x97, 0x79, 0x97, 0x85, 0x26, 0x20, 0x98, 0x83, 0x7b, 0x71, - 0xba, 0x2b, 0xac, 0x94, 0x47, 0xf2, 0x50, 0x94, 0xa2, 0xef, 0x82, 0x9d, 0xd9, 0xb1, 0xd8, 0xee, - 0xec, 0x76, 0x65, 0xc2, 0xe3, 0x30, 0xf3, 0x20, 0x6d, 0x11, 0xaf, 0xdf, 0x5d, 0xf9, 0x50, 0x6b, - 0x55, 0xef, 0x7f, 0x82, 0xe9, 0x7f, 0x17, 0x17, 0x17, 0x5f, 0x1f, 0x45, 0xf1, 0xf0, 0x59, 0x3d, - 0xf2, 0xe7, 0xe7, 0xc2, 0xae, 0xb1, 0x15, 0xd6, 0x2f, 0xa9, 0x93, 0xeb, 0xca, 0xbd, 0x7b, 0xe0, - 0x8c, 0x8e, 0xfb, 0xfc, 0x10, 0xd5, 0x78, 0xbe, 0x0a, 0x2e, 0xfb, 0xbe, 0x54, 0xf8, 0x62, 0xab, - 0xaa, 0xf1, 0xbf, 0x97, 0x4b, 0xbe, 0x09, 0x39, 0x71, 0xca, 0x9c, 0x44, 0x74, 0xd4, 0x67, 0xdd, - 0xae, 0xef, 0xe1, 0x7a, 0xc6, 0xfc, 0xda, 0x4e, 0xb4, 0xab, 0xe9, 0x1a, 0xd9, 0xbe, 0x2f, 0xa9, - 0x33, 0x1c, 0xf2, 0xcf, 0x79, 0xbb, 0x4d, 0x7a, 0x9d, 0x48, 0x8e, 0x89, 0xd5, 0xd6, 0x2b, 0xeb, - 0x51, 0xfd, 0x7b, 0xe0, 0x8e, 0xf7, 0xff, 0xe5, 0xd4, 0x5e, 0xbb, 0xee, 0xfe, 0x09, 0x0f, 0x8b, - 0xd2, 0x82, 0xe8, 0x91, 0x82, 0xea, 0xff, 0x57, 0x1e, 0x09, 0x4a, 0xab, 0xaa, 0xe7, 0x4b, 0xe8, - 0xcf, 0xf5, 0xa9, 0x3a, 0x3e, 0x57, 0xd1, 0x9d, 0x0f, 0xf4, 0x4e, 0x8b, 0xea, 0xff, 0x5e, 0xfa, - 0x2b, 0x4b, 0xd1, 0x9e, 0xba, 0xbf, 0xd5, 0xe4, 0xe8, 0xad, 0x00, 0x5a, 0xb0, 0xcc, 0x14, 0x07, - 0xa2, 0xf0, 0xad, 0x55, 0x23, 0xbc, 0x98, 0x54, 0x03, 0x36, 0x1b, 0x50, 0x06, 0xd4, 0x68, 0xf5, - 0x8f, 0x57, 0xfd, 0x3e, 0x2d, 0xe2, 0xdc, 0x46, 0x3f, 0x6d, 0x7c, 0x1a, 0xc1, 0x48, 0x20, 0x1b, - 0x15, 0x45, 0xa8, 0x50, 0x31, 0x20, 0x1a, 0x78, 0x5a, 0xb8, 0xb9, 0x7e, 0x59, 0xa6, 0xb5, 0x16, - 0xff, 0xe0, 0x84, 0x10, 0x0f, 0xbb, 0xe2, 0xb7, 0x7a, 0xac, 0x99, 0x89, 0x04, 0x04, 0x89, 0xd0, - 0x5f, 0xc1, 0x08, 0x40, 0x75, 0x55, 0x2a, 0xaa, 0xab, 0xdd, 0xc1, 0x98, 0x72, 0x34, 0x01, 0x4e, - 0x69, 0x54, 0xd6, 0xaf, 0x93, 0xbf, 0x6c, 0x9d, 0xbd, 0xdd, 0xfc, 0xeb, 0x29, 0xa7, 0xfe, 0x11, - 0x89, 0x11, 0x91, 0x85, 0x3b, 0xf9, 0x7c, 0x44, 0x85, 0x53, 0x62, 0x6c, 0xcc, 0x40, 0x80, 0x59, - 0x8a, 0x3b, 0x8e, 0xe1, 0xbb, 0x35, 0x6d, 0x90, 0x83, 0x5c, 0x48, 0x60, 0x79, 0x0f, 0x09, 0x6d, - 0xdd, 0xda, 0x7a, 0xd7, 0xc3, 0x65, 0xc1, 0x9f, 0x3c, 0x06, 0xb8, 0x1d, 0x6b, 0xbf, 0x06, 0x58, - 0x21, 0x0e, 0xcc, 0xa3, 0xc6, 0x94, 0x78, 0x2c, 0xd6, 0xb5, 0x03, 0x33, 0x60, 0xc5, 0x77, 0xff, - 0x04, 0xd5, 0xd5, 0xb1, 0x07, 0x9b, 0x93, 0x01, 0x52, 0x8b, 0x89, 0xf8, 0x9e, 0x24, 0x20, 0x08, - 0x88, 0x2e, 0xaa, 0x98, 0xa4, 0x71, 0x22, 0x0a, 0x5c, 0x56, 0xa1, 0xbe, 0x6b, 0xbe, 0x17, 0x88, - 0x0c, 0x85, 0x4a, 0x7e, 0xce, 0x7f, 0x22, 0x47, 0x8b, 0xe2, 0x7c, 0x1e, 0x3a, 0xd8, 0x75, 0x4a, - 0x58, 0xa3, 0xf1, 0x35, 0xc3, 0xe0, 0x84, 0xeb, 0xab, 0x7c, 0x82, 0x18, 0xde, 0x2b, 0xe2, 0x07, - 0xeb, 0x52, 0xfb, 0x58, 0x6a, 0xa5, 0xa3, 0x39, 0xb9, 0x8b, 0x55, 0x5c, 0x20, 0x18, 0x0a, 0x45, - 0x31, 0x43, 0x14, 0x0c, 0x50, 0x0c, 0x47, 0xa9, 0xde, 0x59, 0x89, 0x0f, 0x38, 0xe4, 0x4a, 0x5a, - 0x22, 0x1a, 0x52, 0x57, 0xb1, 0xae, 0xe2, 0x42, 0x03, 0x75, 0x8b, 0xac, 0x53, 0x97, 0xea, 0x28, - 0x61, 0xa8, 0xc0, 0xfc, 0x4a, 0x5c, 0x2c, 0x10, 0x52, 0xb8, 0xdc, 0xb5, 0x72, 0xff, 0xc3, 0x17, - 0x64, 0x74, 0x02, 0xa0, 0x35, 0x01, 0x7b, 0x2a, 0x08, 0x9e, 0x0e, 0x0c, 0x32, 0x83, 0x82, 0xc9, - 0xc7, 0x83, 0xd0, 0x79, 0xef, 0xf9, 0x78, 0xc0, 0x63, 0x0c, 0x59, 0x5f, 0x02, 0x88, 0x8a, 0x80, - 0x4b, 0xc4, 0x82, 0x0d, 0x55, 0x4d, 0xd5, 0x4d, 0xf1, 0x75, 0x1a, 0xe9, 0xe9, 0x57, 0xfe, 0x27, - 0xc4, 0xfc, 0x41, 0x15, 0x7b, 0xbb, 0xe2, 0x6f, 0x9f, 0xa9, 0x39, 0x84, 0xc4, 0xfa, 0x96, 0x7c, - 0x10, 0x06, 0x06, 0x09, 0x60, 0x10, 0x2f, 0x68, 0x48, 0x3a, 0x73, 0xaa, 0xca, 0x0d, 0xc6, 0xfb, - 0xfc, 0x44, 0x45, 0x22, 0xdb, 0xbd, 0xdf, 0x89, 0x08, 0x71, 0x20, 0x80, 0x45, 0x75, 0x59, 0x95, - 0x5e, 0x0c, 0x06, 0x14, 0xbd, 0xd4, 0x59, 0x35, 0x02, 0xf6, 0x89, 0xc6, 0xbd, 0x8f, 0xb2, 0xa4, - 0xc1, 0x03, 0x97, 0x89, 0x07, 0x03, 0xf5, 0x0f, 0x2c, 0x96, 0xae, 0xc5, 0x2c, 0x31, 0x4e, 0xaa, - 0xb8, 0x90, 0x28, 0x05, 0x39, 0xd0, 0x8b, 0x9f, 0x1b, 0x67, 0xcb, 0x31, 0x4c, 0x98, 0x77, 0x37, - 0x11, 0xf5, 0x0d, 0x07, 0x41, 0x3c, 0x44, 0x12, 0x96, 0xa4, 0xfc, 0x23, 0x9f, 0x58, 0x5e, 0xf1, - 0x2c, 0xd3, 0x49, 0x78, 0x92, 0x9d, 0x0e, 0xee, 0xb8, 0xb2, 0x26, 0xf7, 0x5d, 0xc9, 0x84, 0x02, - 0x84, 0x55, 0x17, 0x55, 0x14, 0xc4, 0xfe, 0xab, 0xef, 0x76, 0x7c, 0xd5, 0xaf, 0xd8, 0x97, 0x6a, - 0xb8, 0x8f, 0x12, 0x23, 0x89, 0x10, 0x13, 0xbb, 0xbb, 0xea, 0xbc, 0x20, 0x32, 0x16, 0x0d, 0x44, - 0x96, 0x37, 0x14, 0xee, 0xef, 0x77, 0x7f, 0x13, 0x19, 0xba, 0x6f, 0x8b, 0xbc, 0xaa, 0x0b, 0x77, - 0x15, 0xc5, 0x6f, 0x0f, 0x60, 0x01, 0x92, 0x46, 0x62, 0x99, 0xb3, 0xf8, 0x3d, 0x55, 0x18, 0x9f, - 0x9f, 0xbe, 0xce, 0x1a, 0xb8, 0x96, 0xb3, 0x9a, 0x03, 0x45, 0x18, 0x01, 0x46, 0x41, 0xa2, 0x5d, - 0xaa, 0xe2, 0xa0, 0xee, 0xff, 0x2f, 0x1d, 0x59, 0x04, 0xdc, 0x21, 0x75, 0x76, 0xed, 0xa7, 0x43, - 0x17, 0x71, 0x3e, 0xb0, 0x88, 0x46, 0xe7, 0x53, 0xa8, 0x8f, 0x37, 0x1e, 0xbb, 0xcb, 0x62, 0xbe, - 0x24, 0x66, 0x2b, 0xba, 0xba, 0x97, 0xcf, 0x0a, 0x65, 0xf6, 0x66, 0x2d, 0xe2, 0x01, 0x61, 0x38, - 0x9f, 0x77, 0xbc, 0x3b, 0x54, 0x5c, 0xf2, 0xf8, 0x4a, 0xe2, 0xb7, 0x15, 0x97, 0xaa, 0xf8, 0x90, - 0x42, 0x2c, 0x4b, 0xef, 0xcb, 0xf0, 0x80, 0x44, 0x3f, 0xd5, 0x6a, 0xfc, 0xd8, 0x38, 0x20, 0x42, - 0xb7, 0x78, 0x3b, 0xff, 0xe1, 0x11, 0xb5, 0x55, 0x17, 0x14, 0xc5, 0x31, 0x4c, 0x53, 0x55, 0x80, - 0xdc, 0x73, 0x21, 0xf6, 0x3d, 0xea, 0x5c, 0x23, 0x62, 0xad, 0x1f, 0x12, 0xc9, 0x3f, 0x10, 0x24, - 0x6e, 0xaa, 0x2e, 0xaa, 0xaa, 0x38, 0x76, 0x0e, 0x6c, 0x4f, 0x19, 0x35, 0x71, 0x7b, 0x2e, 0x04, - 0xf4, 0xe5, 0x55, 0x2c, 0x9a, 0x68, 0xfe, 0x24, 0x6f, 0x55, 0x51, 0x72, 0xe4, 0x43, 0x8a, 0x7b, - 0x08, 0x9b, 0xde, 0xce, 0x5b, 0x12, 0xf9, 0x7c, 0x55, 0xfe, 0x10, 0x10, 0x36, 0x4e, 0xfc, 0x66, - 0x45, 0x6a, 0x94, 0x40, 0xf5, 0x6f, 0x12, 0xea, 0xec, 0xc5, 0x9b, 0x98, 0xd8, 0x02, 0xba, 0x2a, - 0xe4, 0xd2, 0x67, 0xe1, 0x10, 0x80, 0xc9, 0x7d, 0xf2, 0xa8, 0xdd, 0xf9, 0x6b, 0x16, 0xe2, 0x01, - 0xe1, 0x45, 0x08, 0x98, 0x05, 0x61, 0xc4, 0x40, 0x02, 0x8b, 0x05, 0xc4, 0xdb, 0xfd, 0x53, 0xf9, - 0x56, 0x27, 0xc7, 0xbe, 0x4c, 0xe2, 0xb2, 0xd8, 0xea, 0xbb, 0x35, 0xcb, 0xd3, 0xca, 0x1f, 0x77, - 0x9a, 0x1f, 0xe1, 0x69, 0x50, 0x20, 0x22, 0x93, 0x54, 0xa0, 0x10, 0x22, 0xb3, 0x94, 0x89, 0x77, - 0xf8, 0x00, 0x51, 0x7c, 0xfc, 0x13, 0x44, 0x41, 0x10, 0x99, 0xf2, 0xdf, 0x78, 0x90, 0x80, 0xa5, - 0x55, 0x55, 0x6d, 0x5b, 0x4d, 0xd5, 0xf1, 0x00, 0x80, 0x13, 0x47, 0x55, 0x5a, 0x0f, 0xaa, 0xab, - 0x78, 0x81, 0x17, 0x2e, 0x3d, 0xb3, 0xec, 0xf7, 0xc6, 0xe5, 0x61, 0xed, 0xaa, 0x36, 0xe3, 0xf0, - 0x02, 0xd9, 0x6d, 0xdd, 0xcf, 0xce, 0x71, 0x4b, 0x48, 0xfa, 0x5f, 0xfe, 0x5d, 0x4b, 0x8d, 0xce, - 0x24, 0x14, 0x17, 0x9b, 0x29, 0x1b, 0x28, 0xb1, 0xfc, 0xf5, 0x35, 0x21, 0x91, 0x1f, 0xfc, 0x22, - 0x0b, 0x4b, 0x74, 0xf3, 0xf7, 0xb7, 0x15, 0x60, 0xc4, 0x11, 0x6b, 0x19, 0x50, 0x6e, 0x3c, 0x09, - 0x21, 0x5a, 0xf9, 0x37, 0x1e, 0x1f, 0x83, 0x67, 0xc1, 0x10, 0x68, 0x74, 0x48, 0xe9, 0xa8, 0x00, - 0x33, 0x0d, 0x7f, 0x0d, 0x92, 0x01, 0x16, 0xe1, 0xed, 0x8a, 0xf9, 0x4a, 0xd6, 0xf9, 0x6d, 0xc4, - 0xac, 0x59, 0x29, 0xe0, 0x76, 0x4f, 0x58, 0xad, 0x6d, 0xcf, 0xeb, 0x0e, 0x23, 0xff, 0x0e, 0x10, - 0x80, 0x03, 0x38, 0x0d, 0xd5, 0x3d, 0x1c, 0x42, 0x00, 0xfc, 0xff, 0x3d, 0xe7, 0x9f, 0xdb, 0x3f, - 0x3c, 0x1e, 0x78, 0x79, 0x60, 0x32, 0xc3, 0xbd, 0xd4, 0x55, 0x98, 0xf4, 0x5f, 0xf7, 0x12, 0x3f, - 0x71, 0xd0 -}; -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/sample_jpeg.h b/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/sample_jpeg.h deleted file mode 100644 index e7ea6c9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/sample_jpeg.h +++ /dev/null @@ -1,1429 +0,0 @@ -#ifndef _SAMPLE_JPEG_H_ -#define _SAMPLE_JPEG_H_ - -#include "section_config.h" -SDRAM_DATA_SECTION static const unsigned char PIC_320x240_1[] = { -0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, -0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0a, 0x06, 0x06, 0x04, 0x04, 0x06, 0x0c, 0x08, 0x08, 0x06, -0x0a, 0x0e, 0x0c, 0x0e, 0x0e, 0x0e, 0x0c, 0x0e, 0x0c, 0x10, 0x12, 0x16, 0x12, 0x10, 0x10, 0x14, -0x10, 0x0c, 0x0e, 0x14, 0x1a, 0x14, 0x14, 0x16, 0x18, 0x18, 0x1a, 0x18, 0x0e, 0x12, 0x1c, 0x1e, -0x1c, 0x18, 0x1e, 0x16, 0x18, 0x18, 0x18, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x04, 0x04, 0x04, 0x06, -0x04, 0x06, 0x0a, 0x06, 0x06, 0x0a, 0x18, 0x10, 0x0e, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xc0, 0x00, 0x11, -0x08, 0x00, 0xf0, 0x01, 0x40, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, -0xc4, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, -0xff, 0xc4, 0x00, 0xb5, 0x10, 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, -0x04, 0x00, 0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, -0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, -0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, -0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, -0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, -0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, -0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, -0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, -0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, -0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, -0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xc4, 0x00, 0x1f, 0x01, 0x00, 0x03, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, -0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x11, 0x00, 0x02, 0x01, -0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 0x01, 0x02, -0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, -0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, -0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, -0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, -0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, -0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, -0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, -0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, -0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, -0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, -0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xcd, 0x0b, 0xdf, -0xbf, 0x4a, 0x76, 0x3f, 0x3a, 0xe6, 0xb9, 0xe9, 0x3d, 0x47, 0x6c, 0x39, 0xc6, 0x4f, 0x3e, 0xb4, -0xe0, 0x9d, 0x7b, 0x7f, 0x5a, 0xab, 0x5d, 0x6a, 0x43, 0x64, 0xa2, 0x3e, 0xff, 0x00, 0xa9, 0xa9, -0x44, 0x5c, 0x53, 0xb5, 0xc9, 0x6c, 0x53, 0x6f, 0x93, 0xb9, 0x78, 0x3d, 0x33, 0xeb, 0x4f, 0x48, -0xc1, 0xc8, 0xc6, 0x18, 0x75, 0x15, 0x6d, 0x19, 0x39, 0x0a, 0x61, 0xeb, 0xc7, 0x4a, 0x8d, 0xa2, -0x1c, 0x9f, 0xcc, 0xd0, 0xd1, 0x3c, 0xdd, 0x4a, 0x2d, 0x17, 0x98, 0x4f, 0xfc, 0xf3, 0x53, 0xf9, -0xd3, 0x99, 0x3d, 0x8d, 0x44, 0x90, 0xe3, 0x22, 0x26, 0x41, 0xe9, 0x50, 0xb2, 0xd2, 0x7e, 0x43, -0xbe, 0xa4, 0x2d, 0x1e, 0x7a, 0xf0, 0xc3, 0xa1, 0xf4, 0xa6, 0x03, 0x92, 0x55, 0x86, 0xd6, 0x1f, -0xad, 0x1a, 0xb4, 0x26, 0xf5, 0x1c, 0x7f, 0x0f, 0xf0, 0xa4, 0xce, 0x79, 0xfc, 0xc9, 0xa5, 0xe4, -0x3e, 0x62, 0x29, 0x18, 0x01, 0xea, 0xc7, 0x80, 0x3d, 0xe9, 0x80, 0x6d, 0x07, 0x9c, 0xb1, 0xe4, -0x9a, 0x18, 0xaf, 0x71, 0x8c, 0x7f, 0x1c, 0xd5, 0x39, 0x06, 0xd2, 0x58, 0x67, 0x69, 0xea, 0x29, -0x58, 0x2e, 0x46, 0x79, 0xe7, 0xf5, 0xa8, 0x1b, 0xb9, 0xf5, 0xa7, 0xb6, 0xa0, 0xf5, 0x2b, 0xb0, -0xeb, 0x54, 0xa5, 0x1e, 0x63, 0x84, 0x03, 0xe5, 0x1c, 0xb7, 0xf8, 0x52, 0x7a, 0x82, 0xdc, 0x8e, -0x45, 0x23, 0xe6, 0x19, 0xdc, 0x3f, 0x5a, 0x8b, 0x01, 0x86, 0x7d, 0x7d, 0x7b, 0x51, 0xab, 0x1a, -0xd3, 0x72, 0xbc, 0xca, 0x76, 0x3e, 0xdc, 0x16, 0x2a, 0x70, 0x7d, 0x38, 0xaf, 0x29, 0xbe, 0xc9, -0x76, 0x2c, 0x7e, 0x62, 0x72, 0xd9, 0xef, 0x5a, 0xd2, 0x25, 0xf6, 0x46, 0x5e, 0x39, 0xf5, 0xaf, -0x5a, 0xf0, 0x15, 0xd4, 0x4c, 0x92, 0xda, 0x38, 0x3b, 0xce, 0x08, 0x3e, 0x95, 0x55, 0x55, 0xe3, -0x60, 0x83, 0xb4, 0x93, 0x3d, 0x56, 0x65, 0x8a, 0xde, 0x1e, 0x00, 0xdc, 0x47, 0x27, 0xd6, 0xb8, -0x99, 0x75, 0x43, 0x1d, 0xcf, 0x98, 0x18, 0x87, 0x53, 0xc1, 0x15, 0xc4, 0xd7, 0x2e, 0xc7, 0x7c, -0x65, 0xcc, 0xee, 0x73, 0xfe, 0x34, 0x61, 0x77, 0xf6, 0x0d, 0x72, 0x06, 0x0d, 0x71, 0x01, 0x02, -0x42, 0x39, 0xe9, 0x82, 0x0f, 0xe9, 0x5d, 0x7d, 0x94, 0x76, 0xf7, 0xfa, 0x6d, 0xbd, 0xfd, 0xb8, -0xc3, 0x5c, 0x42, 0x19, 0x80, 0xec, 0x7a, 0x11, 0xf9, 0xd5, 0xd4, 0xfe, 0x1a, 0x6b, 0xb9, 0x14, -0x65, 0xcb, 0x55, 0xa7, 0xd8, 0x8d, 0x21, 0x44, 0xb5, 0x72, 0x06, 0x6b, 0x91, 0xbf, 0x38, 0x66, -0xc7, 0xe6, 0x7b, 0xd7, 0x1e, 0xcc, 0xf4, 0xa0, 0xee, 0x62, 0xf5, 0x27, 0x24, 0xd0, 0x54, 0x70, -0x7a, 0xd6, 0x92, 0x65, 0x36, 0xb6, 0x3e, 0x8c, 0xdb, 0xff, 0x00, 0xd7, 0x34, 0xe0, 0xbf, 0xad, -0x77, 0x2b, 0x9e, 0x43, 0x68, 0x78, 0x4f, 0xff, 0x00, 0x5f, 0xad, 0x4a, 0xa9, 0xec, 0x79, 0xa6, -0x43, 0xd4, 0x9c, 0x25, 0x4e, 0xb1, 0xe6, 0xa9, 0x2b, 0x99, 0xb6, 0x91, 0x60, 0x45, 0x9e, 0xdf, -0x8d, 0x38, 0xdb, 0x6e, 0xc1, 0xc7, 0xcc, 0x3a, 0x1a, 0xd1, 0x45, 0xee, 0x64, 0xe4, 0x02, 0x16, -0x3f, 0x2b, 0x0c, 0x37, 0xf3, 0xaa, 0xf2, 0xc0, 0x5c, 0x95, 0xc6, 0x17, 0xb9, 0xf5, 0xa6, 0xd5, -0x88, 0x72, 0xb9, 0x5d, 0xe1, 0xdb, 0xc0, 0x18, 0xc5, 0x55, 0x74, 0x39, 0xac, 0xe4, 0x8a, 0x52, -0x2b, 0xba, 0xfe, 0x35, 0x0b, 0x2f, 0x53, 0x50, 0xd1, 0xa2, 0x91, 0x0b, 0x29, 0xe6, 0xa1, 0x74, -0x0c, 0x39, 0xea, 0x39, 0x0c, 0x3b, 0x52, 0xb8, 0x3d, 0x48, 0x77, 0x10, 0x76, 0xb7, 0x0d, 0xfc, -0xe9, 0x58, 0xe0, 0x12, 0x78, 0xf5, 0xa0, 0x2e, 0xc8, 0x17, 0x2c, 0x4c, 0x8d, 0xdf, 0xa7, 0xb0, -0xa5, 0x63, 0x53, 0xa8, 0x5c, 0x89, 0xaa, 0x16, 0xa7, 0xd4, 0x45, 0x37, 0x05, 0x09, 0x23, 0x95, -0x3d, 0x47, 0xa7, 0xbd, 0x35, 0xb9, 0x19, 0xeb, 0x9e, 0x73, 0x45, 0x87, 0x72, 0xb4, 0xad, 0xb5, -0x49, 0x23, 0x9e, 0xc3, 0xd6, 0xab, 0x84, 0x2a, 0x39, 0xc1, 0x66, 0x39, 0x27, 0xd4, 0xd1, 0x7d, -0x44, 0xb6, 0xd4, 0x63, 0x2e, 0x72, 0x7b, 0xd5, 0x59, 0x14, 0x82, 0x59, 0x7a, 0xf7, 0x1e, 0xb4, -0x93, 0x6f, 0x71, 0xb6, 0x44, 0xc4, 0x6d, 0xc8, 0xe7, 0x3c, 0x9a, 0xf3, 0x2d, 0x66, 0x17, 0xfb, -0x54, 0xa7, 0x69, 0x03, 0x39, 0xe6, 0xb5, 0x86, 0x8d, 0x8a, 0x4f, 0x63, 0x00, 0xe4, 0x31, 0xae, -0x93, 0xc3, 0xb7, 0xcd, 0x65, 0x74, 0x24, 0x56, 0xc1, 0x23, 0xb7, 0x7a, 0xd2, 0x5a, 0x89, 0x3b, -0x9e, 0x9d, 0x2f, 0x88, 0xa3, 0x96, 0xd8, 0x87, 0x65, 0xdf, 0x8e, 0x31, 0xda, 0xbc, 0xea, 0xfb, -0x53, 0x63, 0x2b, 0x38, 0x3f, 0x31, 0x35, 0xce, 0xa0, 0xa4, 0xcd, 0x54, 0xdc, 0x76, 0x19, 0x06, -0xaf, 0xe6, 0xc3, 0x2d, 0xb4, 0xe4, 0x14, 0x99, 0x70, 0x41, 0xf5, 0xf5, 0xae, 0x8f, 0xc2, 0x3a, -0xe0, 0xb5, 0x86, 0xeb, 0x4d, 0x99, 0xd7, 0x6c, 0x64, 0xbc, 0x65, 0x8f, 0x63, 0xd4, 0x7e, 0x67, -0xf5, 0xa4, 0xe0, 0xf9, 0x65, 0x12, 0xd5, 0x5f, 0x7e, 0x33, 0x66, 0x8d, 0x9e, 0xbf, 0x6d, 0x1b, -0x5c, 0xc1, 0x3c, 0xa0, 0x64, 0xfc, 0xa4, 0xf3, 0x58, 0x3a, 0x8e, 0xa9, 0x6c, 0xd2, 0x36, 0xc7, -0xde, 0x33, 0xc5, 0x72, 0xaa, 0x72, 0x5d, 0x0f, 0x42, 0x38, 0x88, 0xa6, 0xdb, 0x2b, 0xc2, 0x5a, -0x71, 0xb9, 0x54, 0xfb, 0x55, 0xf5, 0x89, 0xb8, 0xcf, 0x07, 0x1c, 0x52, 0x9f, 0xbb, 0xa1, 0xac, -0x3d, 0xf5, 0x73, 0xe8, 0x4c, 0x73, 0xcd, 0x3c, 0x0e, 0xfe, 0x95, 0xdc, 0x79, 0x97, 0x25, 0x0a, -0x4e, 0x33, 0x53, 0xa2, 0x66, 0xab, 0x73, 0x37, 0xa1, 0x61, 0x63, 0xcd, 0x5b, 0x48, 0xba, 0x75, -0xad, 0x22, 0xae, 0x63, 0x26, 0x5d, 0x8e, 0x1c, 0x9e, 0x9f, 0xa5, 0x68, 0x43, 0x66, 0x5c, 0x8e, -0x3f, 0x4a, 0xdd, 0x44, 0xe6, 0x9c, 0xec, 0x75, 0xba, 0x37, 0x82, 0xae, 0xf5, 0xb6, 0xdb, 0x18, -0x58, 0xd1, 0x46, 0x5a, 0x69, 0x41, 0xda, 0xb5, 0x57, 0x5a, 0xf0, 0x6d, 0xf6, 0x92, 0x59, 0x26, -0x84, 0x94, 0x1d, 0x27, 0x45, 0x25, 0x5f, 0xf1, 0xa7, 0x65, 0x7e, 0x53, 0x9d, 0xd4, 0x76, 0xe6, -0xe8, 0x70, 0xb7, 0x36, 0x8c, 0x84, 0x82, 0x31, 0x8f, 0x51, 0x59, 0x12, 0xc5, 0x83, 0xd3, 0xf4, -0xac, 0x64, 0x8e, 0x98, 0xca, 0xe5, 0x17, 0x5a, 0xac, 0xeb, 0xff, 0x00, 0xd7, 0x35, 0x93, 0xd7, -0x43, 0x64, 0xc8, 0x58, 0x54, 0x2c, 0x06, 0x7f, 0x0a, 0xcd, 0xa2, 0xba, 0x15, 0xe4, 0x40, 0xc3, -0x0d, 0xf5, 0x07, 0xd2, 0xaa, 0x65, 0x9d, 0xb6, 0x33, 0x02, 0x07, 0x56, 0xfe, 0xf5, 0x00, 0x89, -0x9a, 0xa2, 0x6e, 0x68, 0x68, 0x08, 0xdb, 0xf5, 0xa8, 0x58, 0xf3, 0x49, 0xea, 0x17, 0x21, 0x6e, -0x73, 0xd7, 0xf3, 0xaa, 0xad, 0xfb, 0xb2, 0x4f, 0x55, 0x27, 0x90, 0x4f, 0xdd, 0xa3, 0x71, 0x3d, -0x08, 0x0f, 0xef, 0x1b, 0x3f, 0xc2, 0xa3, 0x8f, 0x7a, 0x6b, 0x73, 0x9a, 0x6f, 0x61, 0xde, 0xe5, -0x77, 0xee, 0x49, 0xe9, 0xde, 0xa1, 0x6e, 0x79, 0xea, 0x68, 0xf5, 0x1d, 0xfa, 0x15, 0x9d, 0x4a, -0x92, 0xc0, 0x70, 0x7e, 0xf0, 0xf5, 0xf7, 0xac, 0x5d, 0x52, 0xc1, 0x6f, 0x23, 0x0f, 0x11, 0x02, -0x4e, 0x83, 0xfd, 0xaf, 0x6a, 0x77, 0x7b, 0x89, 0xeb, 0xa1, 0xe7, 0xf7, 0xfa, 0x7d, 0xc5, 0xab, -0x9f, 0x36, 0x36, 0x18, 0xef, 0x8a, 0x75, 0xa4, 0x64, 0x90, 0xca, 0x48, 0xc7, 0x3c, 0xd6, 0xcd, -0xdd, 0x5c, 0x9e, 0xa5, 0xd9, 0xa7, 0x71, 0x90, 0xaf, 0x9e, 0x3b, 0x1a, 0xc6, 0x9a, 0x42, 0x49, -0xce, 0x73, 0x49, 0x2d, 0x6e, 0x53, 0x95, 0xca, 0xa4, 0x90, 0x72, 0x09, 0xc9, 0xab, 0x31, 0xc8, -0xe9, 0xba, 0x60, 0xc4, 0x32, 0x8d, 0xac, 0x01, 0xc1, 0x20, 0xf7, 0xfc, 0xea, 0x85, 0x7d, 0x0a, -0xbf, 0x68, 0x7c, 0xe4, 0x93, 0x93, 0xd7, 0x26, 0xb7, 0xb4, 0x98, 0x56, 0xea, 0x6d, 0xf3, 0x90, -0xa8, 0x3a, 0x06, 0xfe, 0x2a, 0xc6, 0x76, 0x51, 0xb9, 0xbd, 0x3f, 0x7a, 0x69, 0x1e, 0x86, 0x96, -0xa1, 0x2d, 0xd6, 0x48, 0xa2, 0x2c, 0xbd, 0xb0, 0x29, 0xf6, 0x3a, 0x46, 0xa1, 0xa9, 0x4f, 0x84, -0x85, 0xe1, 0x80, 0x7c, 0xd2, 0x5d, 0x4a, 0x36, 0xc7, 0x1a, 0xfa, 0x93, 0x5c, 0x30, 0x8b, 0x93, -0x3d, 0x49, 0x55, 0x8d, 0x38, 0xf3, 0x1e, 0xd2, 0x8d, 0x93, 0x86, 0xc8, 0x61, 0xd4, 0x55, 0x95, -0x1d, 0x7e, 0xbd, 0x6b, 0xbb, 0x73, 0xcd, 0x26, 0x55, 0xcf, 0x35, 0x69, 0x13, 0x15, 0x69, 0x19, -0xb7, 0xd4, 0xb9, 0x1c, 0x64, 0xf5, 0xad, 0x08, 0xa1, 0xce, 0x38, 0xeb, 0x5b, 0x41, 0x1c, 0xf3, -0x91, 0xaf, 0x6f, 0x6a, 0x49, 0x18, 0x1d, 0x6b, 0xbf, 0xf0, 0xef, 0x87, 0x25, 0xd4, 0x26, 0x41, -0xb7, 0x11, 0xa9, 0x05, 0xdc, 0xf4, 0x02, 0xb7, 0x49, 0x25, 0x76, 0x71, 0x55, 0x9b, 0x7a, 0x23, -0xdb, 0x2c, 0xac, 0xa0, 0xb0, 0x81, 0x2d, 0xed, 0xd0, 0x22, 0x2f, 0x53, 0xdd, 0x8f, 0xad, 0x3a, -0xee, 0xd6, 0x0b, 0xd8, 0x24, 0xb6, 0xb8, 0x41, 0x24, 0x72, 0x8c, 0x10, 0x7b, 0x7b, 0xd7, 0x2b, -0x93, 0x72, 0xe6, 0x3a, 0x63, 0x4d, 0x28, 0x72, 0x33, 0xc1, 0x7c, 0x53, 0xe1, 0x19, 0xec, 0x26, -0x92, 0x44, 0x8f, 0x7d, 0xb3, 0x92, 0x52, 0x55, 0xe7, 0x8f, 0x7f, 0x7a, 0xf2, 0xbb, 0xeb, 0x43, -0x1b, 0x30, 0x60, 0x41, 0x1c, 0x73, 0x5b, 0xce, 0xd2, 0x5c, 0xc8, 0xe4, 0xa5, 0x27, 0x16, 0xe1, -0x2d, 0xcc, 0x19, 0x50, 0x8e, 0x4d, 0x51, 0x61, 0x5c, 0xcc, 0xee, 0x4e, 0xe5, 0x77, 0x07, 0xdb, -0xeb, 0x50, 0x37, 0x7c, 0xf5, 0x35, 0x9b, 0x65, 0xa2, 0xac, 0xac, 0x7e, 0xea, 0xf2, 0xcd, 0xfa, -0x54, 0x46, 0x30, 0x17, 0x6f, 0xe3, 0x9e, 0xf4, 0x9f, 0x72, 0x88, 0xf7, 0x90, 0x76, 0xb9, 0xeb, -0xd0, 0xfa, 0xd2, 0x1a, 0x1a, 0xd4, 0x2f, 0x72, 0x26, 0xa8, 0xdb, 0xf5, 0xa3, 0x71, 0x6e, 0x44, -0xd9, 0xaa, 0x93, 0x31, 0xc6, 0xd1, 0x92, 0x5b, 0x8f, 0xa5, 0x21, 0x90, 0x11, 0xe5, 0xf4, 0xc9, -0x4f, 0x4f, 0x4a, 0x69, 0xf5, 0xea, 0x0d, 0x0f, 0x52, 0x51, 0x56, 0xe6, 0x23, 0x34, 0x52, 0x47, -0xb8, 0xa9, 0x75, 0xc6, 0x47, 0x6a, 0xa9, 0x6b, 0x6d, 0xf6, 0x58, 0x56, 0x22, 0xc5, 0xd8, 0x1c, -0x97, 0x27, 0x24, 0xd3, 0xe6, 0xba, 0xb0, 0xf7, 0x77, 0x24, 0x6e, 0x73, 0x9c, 0x56, 0x3b, 0xdc, -0xc6, 0xb7, 0x66, 0x3c, 0x9e, 0x06, 0x7d, 0xb3, 0xfe, 0x34, 0xe2, 0xae, 0x37, 0x2e, 0xe5, 0x2d, -0x6e, 0xdc, 0x5c, 0x5a, 0xb4, 0xea, 0x55, 0x99, 0x07, 0x20, 0x0e, 0xa2, 0xb8, 0x38, 0x1d, 0xd2, -0x62, 0xb9, 0xc6, 0x4e, 0x32, 0x47, 0x15, 0x70, 0x7c, 0xca, 0xc4, 0x3f, 0x23, 0x4a, 0xe6, 0xcd, -0xb0, 0x1c, 0xf9, 0x64, 0x30, 0xce, 0x51, 0xb3, 0x58, 0x72, 0xa8, 0x04, 0xf7, 0x1e, 0xb5, 0x43, -0x8b, 0xb9, 0x5f, 0x1d, 0xf1, 0x8a, 0x42, 0x71, 0x9e, 0x48, 0xcf, 0x5e, 0x69, 0x36, 0xef, 0x64, -0x5d, 0x95, 0x86, 0x2a, 0x19, 0x1d, 0x42, 0x82, 0x49, 0x38, 0xae, 0xba, 0x04, 0x8a, 0xca, 0x34, -0x59, 0x0e, 0x65, 0x61, 0xf7, 0x54, 0x73, 0x58, 0xd6, 0x6d, 0x2b, 0x1d, 0x98, 0x45, 0xcd, 0x2b, -0xb3, 0xab, 0xf0, 0xc7, 0x8a, 0xed, 0xf4, 0x8b, 0xff, 0x00, 0xf8, 0x9a, 0x5a, 0xcb, 0x75, 0x60, -0x41, 0x53, 0x17, 0x04, 0xa1, 0xf5, 0x19, 0xfa, 0x7e, 0xb5, 0xd3, 0x6a, 0x9e, 0x2b, 0xb6, 0xd7, -0xc5, 0xdd, 0xbe, 0x9f, 0x13, 0xd9, 0x58, 0xa1, 0x5f, 0x2e, 0x0c, 0x01, 0xb8, 0x13, 0xdf, 0x07, -0xe9, 0x59, 0xbd, 0x21, 0xa6, 0xe6, 0xae, 0x84, 0xa5, 0x5f, 0x99, 0xed, 0xd8, 0xf5, 0x76, 0x8c, -0x3f, 0x5e, 0xbd, 0x8f, 0xa5, 0x2a, 0x31, 0x43, 0xb6, 0x4f, 0xc1, 0xbb, 0x1a, 0xd9, 0x76, 0x39, -0x19, 0x75, 0x47, 0x35, 0x6d, 0x17, 0x9a, 0xb5, 0xab, 0x32, 0x93, 0x34, 0xa1, 0x8c, 0x9c, 0x7a, -0x7a, 0xd6, 0xcd, 0xbc, 0x05, 0x88, 0xfe, 0x82, 0xba, 0x62, 0x8e, 0x3a, 0x92, 0x47, 0x77, 0xa0, -0x68, 0x72, 0xdf, 0x4d, 0x1a, 0x2a, 0x9c, 0x67, 0x25, 0xb1, 0xc0, 0x15, 0xed, 0xd6, 0x16, 0x30, -0xd8, 0x5b, 0xa4, 0x11, 0x0e, 0x83, 0xe6, 0x6c, 0x72, 0xc6, 0x9d, 0x69, 0x59, 0x72, 0x98, 0x51, -0x5e, 0xd2, 0x7c, 0xdd, 0x8b, 0xb4, 0x57, 0x31, 0xda, 0x32, 0x48, 0xd2, 0x54, 0x68, 0xe4, 0x50, -0xe8, 0xe3, 0x05, 0x58, 0x64, 0x1a, 0xf9, 0xff, 0x00, 0xe2, 0x0f, 0x86, 0x46, 0x95, 0x22, 0xde, -0xc0, 0xac, 0xd6, 0x57, 0x0c, 0x40, 0x20, 0x71, 0x1b, 0x7f, 0x74, 0x9a, 0xd6, 0x94, 0xbe, 0xcb, -0xea, 0x73, 0x62, 0x21, 0xaa, 0x9a, 0xe8, 0x78, 0xc5, 0xc0, 0xe4, 0xf7, 0xf7, 0xcd, 0x65, 0x48, -0x39, 0xe7, 0xd6, 0xa6, 0x46, 0xb0, 0x7a, 0x5c, 0xa8, 0xfd, 0xff, 0x00, 0x9d, 0x57, 0x91, 0x82, -0x82, 0xc4, 0xf4, 0x1f, 0x9d, 0x63, 0x2d, 0x5e, 0x86, 0xaa, 0x45, 0x55, 0x07, 0x97, 0x61, 0xf3, -0x3f, 0x6f, 0x4a, 0x46, 0xef, 0xfc, 0xea, 0x47, 0xb9, 0x0b, 0x0d, 0xc0, 0x83, 0xd0, 0xd4, 0x1b, -0xb6, 0x1d, 0xae, 0x78, 0xe8, 0x24, 0x3d, 0xfd, 0xa9, 0xdf, 0x41, 0x3b, 0xa1, 0x18, 0xfb, 0xd4, -0x4d, 0x49, 0xea, 0x3b, 0xf6, 0x23, 0x63, 0xc1, 0x27, 0xf1, 0xcd, 0x55, 0x50, 0x58, 0xb3, 0x9e, -0xfd, 0x01, 0xf4, 0xa5, 0xd0, 0x1b, 0x1a, 0xdc, 0x93, 0xde, 0xab, 0x30, 0x28, 0x4f, 0xf7, 0x73, -0x93, 0xfe, 0xcd, 0x3b, 0x09, 0xb1, 0x1b, 0xb9, 0xcf, 0xe3, 0xeb, 0x50, 0x30, 0xfc, 0xa8, 0x1a, -0x65, 0x5b, 0x87, 0x11, 0xc6, 0xec, 0x4e, 0x38, 0xae, 0x3b, 0xe6, 0xb8, 0xb8, 0xc1, 0x52, 0xac, -0x5b, 0x27, 0x27, 0x18, 0xf4, 0x3f, 0x95, 0x54, 0x5d, 0x93, 0x62, 0x7a, 0xe8, 0x6b, 0x5b, 0xdc, -0xc7, 0x3b, 0xcb, 0x6e, 0xc0, 0xc6, 0xa4, 0xe3, 0x0d, 0xce, 0x7d, 0xeb, 0x94, 0xd4, 0x6c, 0xc5, -0x9d, 0xd9, 0x68, 0xcf, 0x7d, 0xca, 0x08, 0xea, 0x2a, 0x95, 0xd4, 0x95, 0xfa, 0x83, 0x77, 0x4d, -0x22, 0xf2, 0xb2, 0x4b, 0x08, 0x91, 0xe7, 0x88, 0xc8, 0xc3, 0x8b, 0x78, 0x63, 0x24, 0x9f, 0xa9, -0xed, 0x59, 0x17, 0x36, 0xa3, 0x99, 0x30, 0xde, 0xbb, 0x4a, 0xf3, 0x5a, 0x35, 0x67, 0xa9, 0x10, -0x6c, 0xc5, 0x90, 0x10, 0xc7, 0x8c, 0x7b, 0x54, 0x4d, 0x83, 0xeb, 0x9e, 0xf5, 0x26, 0xa9, 0xdc, -0xe9, 0xbc, 0x23, 0x61, 0x0d, 0xfe, 0xa7, 0x32, 0xb9, 0x1b, 0xed, 0xed, 0xa4, 0xb8, 0x8e, 0x36, -0x3f, 0xeb, 0x19, 0x47, 0x00, 0x7b, 0xf3, 0x9f, 0xc2, 0xaf, 0xcc, 0xa8, 0xd3, 0x91, 0x3a, 0xed, -0xc1, 0xc1, 0x2c, 0x2b, 0x8e, 0xbb, 0xb4, 0xd2, 0x67, 0xb3, 0x80, 0x87, 0x35, 0x39, 0x49, 0x16, -0xe6, 0xb3, 0xb4, 0x94, 0xab, 0x79, 0xd1, 0x1c, 0x8c, 0x6e, 0x5e, 0x4d, 0x32, 0x79, 0xec, 0x74, -0xab, 0x57, 0x02, 0x42, 0x59, 0xf0, 0x48, 0x7c, 0x6e, 0x6c, 0x76, 0x03, 0xd2, 0xb2, 0xd6, 0x5e, -0xea, 0x3a, 0x65, 0x52, 0x30, 0x5c, 0xc7, 0xd3, 0x20, 0x7e, 0x34, 0xf2, 0x81, 0xf8, 0x6e, 0x45, -0x77, 0x23, 0xc4, 0x96, 0xa3, 0xd0, 0x34, 0x47, 0x07, 0x2c, 0x9d, 0x8f, 0x75, 0xad, 0x48, 0x54, -0x1c, 0x77, 0xcf, 0x20, 0xe6, 0xb4, 0x89, 0x84, 0x8d, 0x9b, 0x68, 0xf2, 0x45, 0x76, 0x5a, 0x36, -0x99, 0x25, 0xdc, 0xc9, 0x1a, 0x21, 0x66, 0x73, 0x81, 0x5d, 0x30, 0x5d, 0x0e, 0x1a, 0xee, 0xc7, -0xbc, 0xe9, 0x3a, 0x5c, 0x5a, 0x65, 0xb0, 0x89, 0x00, 0x32, 0x1e, 0x5d, 0xfd, 0x6b, 0x56, 0xb9, -0xea, 0x4b, 0x9e, 0x4d, 0x9b, 0x51, 0x87, 0x24, 0x12, 0x0a, 0x2a, 0x0d, 0x46, 0x49, 0x22, 0x44, -0x8f, 0x2c, 0x8c, 0x15, 0x23, 0x52, 0xcc, 0xc7, 0xb0, 0x1d, 0xeb, 0xe7, 0x1f, 0x1c, 0x78, 0xaa, -0xf3, 0x51, 0xbc, 0x9f, 0xec, 0xb2, 0x81, 0x61, 0x0a, 0x18, 0xfe, 0xcf, 0x26, 0x36, 0xba, 0xf1, -0x9c, 0x8e, 0xe4, 0x91, 0x9f, 0x51, 0x81, 0x8e, 0x95, 0xbd, 0x18, 0x73, 0x5e, 0x4c, 0xe4, 0xc5, -0x55, 0x71, 0xe5, 0x82, 0xea, 0x78, 0xcb, 0x5e, 0x2b, 0xc8, 0xfb, 0x46, 0x17, 0x3f, 0x70, 0x9c, -0x91, 0x50, 0xb9, 0x0c, 0x37, 0x75, 0xcd, 0x4c, 0xe3, 0x63, 0x4a, 0x72, 0xb9, 0x4d, 0xfa, 0x9c, -0xfe, 0x35, 0x48, 0xfe, 0xf1, 0xb3, 0xfc, 0x08, 0x78, 0xf7, 0x35, 0x83, 0xee, 0x6d, 0x7e, 0xc2, -0x30, 0xe3, 0xfa, 0x54, 0x4d, 0x50, 0x59, 0x0b, 0x77, 0xeb, 0x50, 0x38, 0x07, 0x20, 0x8c, 0xe7, -0xd6, 0x80, 0xdc, 0x87, 0x26, 0x3e, 0x09, 0xca, 0xf6, 0x6f, 0x4a, 0x0f, 0xf3, 0xa7, 0x62, 0x53, -0x2a, 0xc9, 0xf3, 0x1f, 0x2f, 0xb1, 0xe5, 0x8d, 0x23, 0x0e, 0x3d, 0xbf, 0x95, 0x21, 0xbd, 0x51, -0x1b, 0x7f, 0x3a, 0x8c, 0xf7, 0xcf, 0x34, 0xf5, 0x61, 0x74, 0x55, 0x60, 0x54, 0x9e, 0xeb, 0xed, -0xda, 0x90, 0x8c, 0xf5, 0x39, 0x34, 0x68, 0x23, 0x1b, 0x52, 0x90, 0xec, 0xd8, 0x30, 0xcc, 0xc7, -0x68, 0x04, 0x70, 0x7d, 0xb3, 0x54, 0x60, 0x85, 0x22, 0x88, 0xc9, 0x8c, 0x82, 0x36, 0xa9, 0x65, -0xc9, 0xe4, 0xf4, 0x3f, 0x8d, 0x5f, 0x4b, 0x13, 0x7f, 0x79, 0xb3, 0xd1, 0x7e, 0x1a, 0x7c, 0x3f, -0x9b, 0xc6, 0x3e, 0x20, 0xb6, 0xd3, 0x79, 0x82, 0x06, 0x0d, 0x24, 0xf7, 0x5b, 0x37, 0x79, 0x08, -0x07, 0x27, 0x1c, 0x67, 0xb0, 0xfa, 0x91, 0x5b, 0xbf, 0x15, 0x7e, 0x14, 0xae, 0x81, 0x7d, 0x35, -0xa5, 0xa8, 0x95, 0xed, 0xd5, 0x3c, 0xcb, 0x69, 0xa6, 0x1c, 0xa8, 0x3c, 0x60, 0xb0, 0xec, 0x48, -0xeb, 0xeb, 0xc7, 0xd6, 0x5b, 0xd3, 0x98, 0xa6, 0xdd, 0xec, 0x78, 0x25, 0xbe, 0x9f, 0x3c, 0x33, -0xb5, 0xab, 0xb8, 0x86, 0x41, 0xc9, 0x57, 0x38, 0xcf, 0xd2, 0x8b, 0xab, 0x49, 0xd1, 0xe4, 0x57, -0x55, 0x25, 0x7b, 0x8e, 0x47, 0xe9, 0x5a, 0xde, 0xea, 0xe4, 0x3d, 0x24, 0x73, 0x17, 0x30, 0xe1, -0x98, 0x9f, 0xbc, 0x4f, 0x61, 0xd2, 0xb3, 0xd9, 0x08, 0x39, 0xeb, 0x52, 0xee, 0x8d, 0xe2, 0xee, -0x3a, 0xda, 0xee, 0x7b, 0x1b, 0x88, 0xee, 0xad, 0x9d, 0xa1, 0x9e, 0x16, 0xdc, 0x92, 0x2f, 0x63, -0x5b, 0xcf, 0xe2, 0x68, 0xee, 0x4e, 0xeb, 0xdb, 0x14, 0x79, 0x4f, 0xde, 0x96, 0xdd, 0xb6, 0x6e, -0xf7, 0xc7, 0x23, 0xf2, 0xc5, 0x65, 0x52, 0x92, 0xa9, 0xab, 0xdc, 0xec, 0xc3, 0x62, 0xe5, 0x86, -0x77, 0x5b, 0x33, 0x3a, 0xe3, 0x59, 0x04, 0x9f, 0xb1, 0xc0, 0x60, 0x27, 0xf8, 0xdd, 0xb7, 0x11, -0x58, 0x32, 0xcb, 0x2c, 0xee, 0x64, 0x95, 0xda, 0x47, 0x3d, 0x59, 0x8d, 0x54, 0x29, 0xf2, 0x6a, -0xc5, 0x88, 0xc5, 0xbc, 0x43, 0xb6, 0xc8, 0xfb, 0x94, 0x2f, 0xe7, 0x4f, 0x00, 0xf5, 0xa6, 0xb5, -0x30, 0x6c, 0xb2, 0xa3, 0xf5, 0xf5, 0xab, 0x30, 0xa9, 0x46, 0xca, 0xf2, 0x0f, 0x55, 0xad, 0x22, -0x63, 0x33, 0xa7, 0xd3, 0x10, 0xcf, 0x22, 0x2a, 0x0d, 0xcc, 0xe7, 0x01, 0x40, 0xea, 0x6b, 0xe8, -0x8f, 0x0c, 0xe8, 0x4b, 0xa6, 0x5a, 0xac, 0xd3, 0x2f, 0xfa, 0x5c, 0xab, 0xce, 0x7f, 0x80, 0x7a, -0x56, 0xee, 0x5c, 0xb0, 0x38, 0x9a, 0xf6, 0x93, 0x48, 0xea, 0xa8, 0xae, 0x63, 0xac, 0x28, 0xa0, -0x0f, 0x2d, 0xf1, 0xdf, 0x89, 0x04, 0x51, 0x3e, 0x9d, 0x6b, 0x20, 0xe3, 0x3e, 0x73, 0x0f, 0x5f, -0x4a, 0xf9, 0xbb, 0x57, 0xb9, 0xf3, 0x9d, 0xf6, 0xb6, 0x18, 0xf5, 0x15, 0xe8, 0x42, 0x3c, 0x90, -0x48, 0xf2, 0x27, 0x3f, 0x6b, 0x55, 0xc9, 0x7a, 0x1c, 0x65, 0xcc, 0x8c, 0xae, 0x16, 0x3c, 0xe7, -0xf8, 0x8f, 0xa7, 0xb5, 0x2c, 0x57, 0x60, 0xb1, 0x52, 0x46, 0xfc, 0x72, 0x0f, 0x43, 0x58, 0x54, -0xf7, 0xb4, 0x3a, 0xe0, 0xed, 0xa9, 0x34, 0x92, 0x79, 0xbf, 0x22, 0xe7, 0x9e, 0xa4, 0xf6, 0xa6, -0x9e, 0x06, 0x07, 0x41, 0x5c, 0xb2, 0xec, 0x75, 0x27, 0x72, 0x23, 0xed, 0x51, 0x30, 0xcf, 0xd6, -0xa4, 0xb2, 0x16, 0x1d, 0x7d, 0xea, 0x13, 0x4b, 0x70, 0x18, 0xd8, 0x39, 0x07, 0x9f, 0x5c, 0xd5, -0x56, 0x26, 0x20, 0x49, 0xe5, 0x3b, 0x7a, 0x8a, 0x62, 0x18, 0xaa, 0x71, 0xb8, 0xf2, 0xcd, 0xc9, -0xa4, 0x39, 0x20, 0xd2, 0x7a, 0x85, 0xc8, 0xcd, 0x46, 0x79, 0xe6, 0x81, 0x5d, 0x5c, 0x89, 0xbb, -0xf7, 0xcf, 0x5a, 0xae, 0xf9, 0x8c, 0x31, 0x1c, 0xa9, 0xe0, 0x67, 0xb1, 0xaa, 0x4c, 0x6c, 0xc5, -0x65, 0x13, 0x92, 0x46, 0xfe, 0x5b, 0x66, 0x4f, 0x0a, 0x79, 0xfe, 0x7c, 0xd6, 0xcd, 0xae, 0x9e, -0xf3, 0xbc, 0x51, 0x84, 0xe3, 0x76, 0x08, 0x2c, 0x0e, 0xe3, 0xf4, 0xa7, 0x2b, 0x19, 0xa4, 0xd1, -0xf7, 0x87, 0xc1, 0xdf, 0x09, 0xc7, 0xe1, 0xff, 0x00, 0x0e, 0x8b, 0xf9, 0x62, 0xdb, 0x7d, 0xaa, -0xfc, 0xc1, 0xdb, 0xef, 0x24, 0x23, 0xee, 0xaf, 0xb6, 0x4e, 0x4f, 0xe5, 0xe9, 0x5d, 0xfd, 0xf6, -0x81, 0xa6, 0x6a, 0xc6, 0xe6, 0x5d, 0x4a, 0xd1, 0x2e, 0x1a, 0x54, 0x30, 0x81, 0x36, 0x58, 0x2a, -0xf2, 0x38, 0x5e, 0x98, 0x3d, 0x7a, 0x50, 0xb6, 0x45, 0x35, 0xcd, 0xa1, 0xf0, 0x47, 0xc4, 0x9f, -0x09, 0x47, 0xa5, 0xea, 0x17, 0x2b, 0x12, 0xa1, 0xb6, 0xfb, 0x43, 0xc7, 0x6b, 0x70, 0xad, 0x9d, -0xe1, 0x7d, 0x3d, 0x57, 0x9e, 0xb5, 0xe5, 0x50, 0xc3, 0x3a, 0x9f, 0x26, 0x45, 0x7f, 0x98, 0xe0, -0xca, 0x39, 0xc0, 0xa7, 0x4e, 0x56, 0xba, 0x64, 0xce, 0x2e, 0x4a, 0xe8, 0xc3, 0xbf, 0xd3, 0x65, -0x72, 0xf2, 0x88, 0x9b, 0x60, 0x6d, 0xaa, 0x47, 0x3c, 0xf7, 0xcd, 0x73, 0x57, 0x16, 0x4d, 0x19, -0xc6, 0x09, 0x3e, 0xfd, 0x6a, 0x9d, 0xd1, 0xac, 0x25, 0xcc, 0x65, 0xbc, 0x0e, 0x58, 0xe5, 0x08, -0x1e, 0xf5, 0x1b, 0x5a, 0x38, 0xe7, 0x38, 0xe7, 0x39, 0x34, 0x91, 0x72, 0x7a, 0x88, 0x96, 0x8f, -0x21, 0xda, 0xa0, 0xb1, 0xf6, 0x19, 0xab, 0xf0, 0xe8, 0xce, 0xc7, 0x74, 0xc7, 0x62, 0x83, 0xd3, -0x3c, 0x9a, 0x4d, 0xea, 0x2b, 0xea, 0x7d, 0x9d, 0xb7, 0xf5, 0xa7, 0x01, 0xf8, 0xd2, 0x46, 0x8d, -0x93, 0x2d, 0x5a, 0x47, 0x0b, 0xc9, 0xad, 0x11, 0x94, 0xf5, 0x3a, 0x4d, 0x0f, 0x50, 0x5b, 0x3b, -0xdb, 0x7b, 0x82, 0x62, 0x12, 0x2c, 0x81, 0x96, 0x39, 0x31, 0xce, 0x0e, 0x6b, 0xe9, 0xad, 0x1f, -0x59, 0xb6, 0xd5, 0xed, 0xd2, 0x58, 0xd9, 0x16, 0x6c, 0x65, 0xe0, 0xdd, 0x92, 0xbf, 0xfd, 0x6a, -0xd6, 0x6b, 0x9a, 0x37, 0xec, 0x71, 0xa9, 0xf2, 0x54, 0xd7, 0xa9, 0xb1, 0x45, 0x73, 0x9d, 0x41, -0x5c, 0xb7, 0x89, 0xf5, 0xe8, 0xf4, 0xab, 0x47, 0x8e, 0x37, 0x53, 0x75, 0x20, 0xe0, 0x67, 0xee, -0x8f, 0x5a, 0xd2, 0x94, 0x3d, 0xa4, 0xd2, 0x30, 0xc4, 0xd5, 0xf6, 0x54, 0xdb, 0x5b, 0xf4, 0x3e, -0x6c, 0xd7, 0x75, 0x36, 0x99, 0xe4, 0x7d, 0xe4, 0xc8, 0xd9, 0x27, 0x2d, 0xd7, 0xde, 0xbc, 0xf2, -0xea, 0x66, 0x39, 0x6e, 0xb2, 0x3f, 0x41, 0xfd, 0x6b, 0xbe, 0xa3, 0xb9, 0xe7, 0x50, 0x8a, 0x49, -0x58, 0xc5, 0x99, 0x82, 0x83, 0x8c, 0x89, 0x3d, 0x7d, 0x4d, 0x53, 0xb7, 0xb7, 0x2c, 0xc5, 0xce, -0x7a, 0xd7, 0x24, 0x8e, 0xf4, 0xae, 0x6b, 0xf9, 0x3b, 0x06, 0x41, 0x21, 0xff, 0x00, 0x9d, 0x47, -0xbb, 0x39, 0x1d, 0x18, 0x75, 0x06, 0xb9, 0x9b, 0xb9, 0xba, 0xd0, 0x89, 0xb3, 0xff, 0x00, 0xeb, -0xa8, 0x8d, 0x4b, 0xb8, 0xd3, 0x23, 0x22, 0xa2, 0x6e, 0xbd, 0xe8, 0x28, 0x8c, 0xfe, 0xb5, 0x59, -0xfe, 0x77, 0xc7, 0x55, 0x5e, 0x49, 0x3d, 0xcd, 0x3f, 0x52, 0x48, 0x88, 0x31, 0x9e, 0x39, 0x4e, -0xe3, 0xfb, 0xb4, 0x1e, 0x79, 0x1c, 0xe7, 0xb8, 0xa4, 0x1d, 0x48, 0xc8, 0xa8, 0xc8, 0xa2, 0xc2, -0x18, 0x47, 0xa9, 0xa8, 0x71, 0xbd, 0xf1, 0xd4, 0x28, 0xe7, 0xdc, 0xd3, 0xf5, 0x01, 0xcb, 0x66, -0x0c, 0xa8, 0xea, 0x06, 0x09, 0xf9, 0x97, 0x1e, 0xbd, 0xeb, 0xd6, 0xfe, 0x1c, 0xf8, 0x40, 0xeb, -0xda, 0xed, 0xbd, 0xb2, 0xa9, 0x36, 0xe1, 0xb7, 0xc9, 0x38, 0x4e, 0x04, 0x60, 0xf2, 0x7d, 0x8f, -0xf5, 0x34, 0x9b, 0x06, 0x7d, 0xd0, 0x91, 0xa4, 0x51, 0xa4, 0x51, 0x22, 0xa4, 0x71, 0xa8, 0x45, -0x45, 0x18, 0x0a, 0x07, 0x18, 0x1f, 0x85, 0x29, 0xe1, 0x70, 0x30, 0x38, 0xc0, 0xcd, 0x58, 0xcf, -0x87, 0x3e, 0x30, 0x5e, 0xa4, 0xfe, 0x28, 0xba, 0xd3, 0xed, 0xa5, 0x66, 0xd3, 0xf4, 0x7f, 0xf4, -0x78, 0x21, 0xdd, 0xb9, 0x63, 0x63, 0xf3, 0x49, 0x81, 0xfe, 0xfb, 0x37, 0xe4, 0x2b, 0xc3, 0xe7, -0xca, 0xb1, 0x20, 0x9c, 0x7f, 0x2a, 0x82, 0xa3, 0xb1, 0x1a, 0xdc, 0xa8, 0x56, 0x59, 0x50, 0x4a, -0xad, 0xdb, 0xa1, 0xfa, 0xe6, 0xa8, 0xdc, 0x0b, 0x06, 0x05, 0xbe, 0xcc, 0xa5, 0xcf, 0xf1, 0x37, -0x3f, 0x8d, 0x36, 0xdb, 0xd0, 0x49, 0x72, 0xbd, 0x0e, 0x7e, 0xe6, 0xca, 0xda, 0x4e, 0x23, 0x26, -0x27, 0x3d, 0x49, 0x19, 0xcd, 0x65, 0x9d, 0x2d, 0x55, 0xb2, 0xd2, 0x97, 0x19, 0xe9, 0x8c, 0x66, -0x9a, 0x93, 0x2f, 0xd4, 0xb6, 0x90, 0xc6, 0x80, 0x04, 0x45, 0x19, 0xee, 0x05, 0x2b, 0x8e, 0x09, -0xce, 0x69, 0x6a, 0xca, 0x76, 0x3e, 0xaf, 0x2a, 0x7a, 0xfa, 0xd1, 0xb7, 0xf1, 0xfa, 0xd3, 0x5a, -0x95, 0x2b, 0x0b, 0x8d, 0xbc, 0x9a, 0x86, 0x6b, 0x94, 0x81, 0x0c, 0xd2, 0x93, 0xb4, 0x70, 0x17, -0xb9, 0xad, 0x23, 0xb9, 0x8c, 0x9e, 0x87, 0x3f, 0xfd, 0xa1, 0x2c, 0xd3, 0x89, 0x9d, 0xc8, 0x60, -0x7e, 0x50, 0xbf, 0xc3, 0x5e, 0x9b, 0xe1, 0x9f, 0x17, 0x4f, 0x6b, 0x24, 0x62, 0x49, 0x9d, 0x1c, -0x70, 0xb3, 0xfa, 0xfb, 0x1a, 0xed, 0x4b, 0x44, 0x79, 0x95, 0x3d, 0xeb, 0xdc, 0xfa, 0x3b, 0xc3, -0xfe, 0x24, 0x83, 0x55, 0x8d, 0x63, 0x95, 0xb6, 0xdd, 0x63, 0xa9, 0xc0, 0x0f, 0x5d, 0x55, 0x72, -0x55, 0x87, 0x23, 0xf5, 0x3a, 0xb0, 0xf5, 0x7d, 0xa4, 0x6c, 0xf7, 0x46, 0x2e, 0xb9, 0xac, 0xc1, -0xa3, 0x59, 0xbc, 0xf2, 0x30, 0x32, 0x9e, 0x12, 0x2c, 0xf2, 0xc7, 0xe9, 0x5f, 0x39, 0x6b, 0xfe, -0x20, 0x96, 0xfa, 0x59, 0x6e, 0x24, 0x94, 0x97, 0x63, 0xc8, 0x3f, 0xca, 0xba, 0x70, 0xd1, 0xe5, -0x8b, 0x9f, 0x73, 0x93, 0x17, 0x3f, 0x69, 0x51, 0x41, 0x6c, 0xbf, 0x33, 0xce, 0x6e, 0xee, 0x7c, -0xd6, 0x69, 0x1b, 0x39, 0x1d, 0xbd, 0x6b, 0x0e, 0x56, 0x62, 0x59, 0x9f, 0x01, 0xcf, 0xad, 0x29, -0xbd, 0x34, 0x2a, 0x9a, 0xd4, 0xcb, 0xc3, 0x5c, 0x49, 0x93, 0xc0, 0x53, 0xc9, 0xad, 0x58, 0x61, -0xda, 0x01, 0xc0, 0xf6, 0x15, 0x84, 0xd9, 0xd4, 0xb7, 0x1e, 0xff, 0x00, 0x5f, 0xce, 0xaa, 0x48, -0xbb, 0xb9, 0xe8, 0xdd, 0x9a, 0xb1, 0x35, 0xd8, 0xad, 0xbb, 0x27, 0x6b, 0x70, 0xff, 0x00, 0xce, -0x91, 0xb9, 0x1e, 0xf5, 0x23, 0x22, 0x23, 0xff, 0x00, 0xaf, 0x51, 0x9a, 0x5e, 0x61, 0xd0, 0x82, -0x43, 0xb4, 0x1e, 0x79, 0x3c, 0x01, 0x4c, 0x0b, 0xb4, 0x60, 0xf2, 0x7b, 0x9f, 0x5a, 0x61, 0x7b, -0x8c, 0x23, 0xaf, 0xbf, 0x5a, 0xae, 0xca, 0x50, 0xee, 0x5e, 0x57, 0xb8, 0xf4, 0xa6, 0x26, 0x27, -0x0d, 0x82, 0x0e, 0x41, 0xef, 0x4c, 0x23, 0x19, 0xcd, 0x26, 0x82, 0xfd, 0x48, 0xe4, 0xe0, 0x16, -0xa6, 0xa2, 0x90, 0x06, 0x79, 0x24, 0xe4, 0xd3, 0xdc, 0x37, 0xd4, 0xd1, 0xb6, 0xdb, 0xbc, 0x16, -0x3d, 0xf9, 0xcd, 0x7d, 0x2b, 0xf0, 0x73, 0x59, 0xd1, 0x74, 0xeb, 0xbb, 0xb8, 0x6f, 0x26, 0x4b, -0x5b, 0x9b, 0xb8, 0x84, 0x71, 0x4f, 0x31, 0x01, 0x3a, 0xe4, 0xa9, 0x3d, 0xb3, 0x81, 0xd7, 0xd2, -0xa7, 0x4b, 0x89, 0xbb, 0xea, 0x7d, 0x39, 0x9c, 0xf3, 0xd7, 0x3d, 0xfd, 0x6b, 0x13, 0xc4, 0x9a, -0xb2, 0xe8, 0x7a, 0x16, 0xab, 0xaa, 0xb4, 0x91, 0xa3, 0x59, 0xdb, 0xbb, 0xc4, 0x65, 0x19, 0x56, -0x93, 0x18, 0x45, 0xc7, 0xbb, 0x10, 0x2a, 0xd9, 0x5b, 0x9f, 0x9d, 0x9a, 0xbd, 0xd3, 0x4d, 0x3c, -0xb2, 0x33, 0x97, 0x67, 0x6d, 0xc5, 0x89, 0xe4, 0x93, 0x5c, 0xac, 0xcc, 0x4e, 0x73, 0xfa, 0xd6, -0x68, 0xab, 0x99, 0xb2, 0x1d, 0xb9, 0x39, 0x3b, 0x4d, 0x55, 0x76, 0xc8, 0x3d, 0xe9, 0xde, 0xe5, -0xdd, 0x6e, 0xca, 0x0d, 0x96, 0x66, 0x6c, 0xe4, 0x74, 0xc6, 0x71, 0x4d, 0x23, 0xae, 0x72, 0x49, -0xa7, 0x7b, 0x06, 0xe4, 0x04, 0x6d, 0x39, 0xed, 0xfc, 0xa9, 0x8f, 0xc9, 0x51, 0xd7, 0x27, 0xa7, -0xad, 0x1b, 0x8d, 0x68, 0xec, 0x7d, 0x6e, 0x53, 0x3c, 0x9a, 0x42, 0xbc, 0x67, 0xd3, 0xa9, 0xab, -0x29, 0x95, 0x27, 0x95, 0x15, 0x1a, 0x59, 0x0e, 0xd8, 0xe3, 0x19, 0xc9, 0xef, 0x5c, 0x75, 0xe5, -0xec, 0x97, 0x72, 0x97, 0x3f, 0x2c, 0x6b, 0xc2, 0x27, 0xa5, 0x6b, 0x04, 0xee, 0x72, 0xd5, 0x7d, -0x08, 0x90, 0xe4, 0xfa, 0x1f, 0xe7, 0x5a, 0x10, 0xcc, 0x57, 0xa9, 0x23, 0xd6, 0xba, 0x62, 0xce, -0x39, 0xa3, 0xb5, 0xd1, 0x3c, 0x53, 0x71, 0x60, 0xe8, 0xae, 0xe4, 0xc4, 0xa7, 0x20, 0xf3, 0x95, -0xfa, 0x57, 0xba, 0x69, 0x1f, 0x12, 0xa3, 0xf2, 0x51, 0x2f, 0x11, 0x26, 0x42, 0xb8, 0x4b, 0x84, -0x27, 0x23, 0x8e, 0x33, 0xeb, 0xfc, 0xe9, 0x54, 0x8a, 0x92, 0xb3, 0x31, 0x84, 0x9c, 0x24, 0xa4, -0x8f, 0x2f, 0xf1, 0x37, 0x89, 0x6f, 0x75, 0x1b, 0xf9, 0xa7, 0x9a, 0x44, 0xf3, 0x0b, 0x64, 0x47, -0x19, 0xca, 0x6d, 0xc7, 0x18, 0xae, 0x06, 0xe6, 0xf1, 0xae, 0x1b, 0x20, 0x95, 0x23, 0xa8, 0x26, -0xab, 0x99, 0x72, 0xab, 0x02, 0x83, 0x4d, 0xb9, 0x75, 0x32, 0x8c, 0xbe, 0x73, 0x1c, 0x82, 0xa2, -0x33, 0xc6, 0x7b, 0xfb, 0xd5, 0x09, 0xe4, 0x69, 0x9f, 0xca, 0x03, 0x90, 0x78, 0x3e, 0xb5, 0x8c, -0x9b, 0x3a, 0x60, 0x8b, 0x76, 0xf0, 0x00, 0x30, 0x72, 0x40, 0xe4, 0x93, 0xde, 0xad, 0x35, 0x61, -0x27, 0x76, 0x6f, 0x05, 0x7d, 0x4a, 0xef, 0x50, 0x1a, 0xcd, 0x9a, 0x22, 0x09, 0x10, 0x30, 0xe7, -0x3e, 0xc7, 0xd2, 0xab, 0x65, 0x81, 0xda, 0xe7, 0x93, 0xd1, 0xbd, 0x68, 0xd5, 0x8a, 0xe0, 0x7d, -0x69, 0x84, 0x63, 0x34, 0x98, 0x5c, 0xab, 0xcc, 0x8e, 0x5b, 0xf8, 0x57, 0x85, 0xcf, 0x7a, 0x71, -0x5a, 0x76, 0xb8, 0xae, 0x46, 0x47, 0x73, 0xf9, 0xd4, 0x4c, 0x3f, 0x5f, 0x7a, 0x1a, 0xd0, 0x2e, -0x57, 0x65, 0x2a, 0x4b, 0x28, 0xce, 0x7a, 0xad, 0x27, 0x07, 0x90, 0x72, 0x28, 0xdc, 0x57, 0xd4, -0x81, 0xbe, 0x67, 0xc7, 0x64, 0xe4, 0xff, 0x00, 0x4a, 0x7f, 0x7a, 0x60, 0x98, 0xf5, 0x62, 0x0e, -0x7b, 0x8f, 0x7a, 0xdc, 0xd3, 0xef, 0xda, 0x07, 0x07, 0x79, 0x00, 0x54, 0xbb, 0xb1, 0xde, 0xc7, -0xd3, 0xdf, 0x0f, 0xfe, 0x2b, 0x69, 0xab, 0x6b, 0x06, 0x8f, 0xaf, 0xdc, 0x18, 0x0c, 0x58, 0x8e, -0xde, 0xf9, 0x81, 0x61, 0x8e, 0xca, 0xd8, 0xe7, 0xe8, 0x7f, 0x3f, 0x5a, 0xa7, 0xf1, 0xe7, 0xc4, -0x6b, 0x6f, 0x6f, 0xa5, 0x68, 0x50, 0xdc, 0x7e, 0xf2, 0x65, 0x6b, 0xcb, 0x98, 0x57, 0xa1, 0x1c, -0x2c, 0x67, 0x3f, 0x84, 0x9c, 0x7d, 0x0f, 0xa5, 0x0d, 0xe8, 0x17, 0xb6, 0x87, 0xc8, 0x57, 0x53, -0x97, 0x62, 0x73, 0xd4, 0xf7, 0xac, 0x99, 0x5f, 0x3d, 0xfe, 0xb4, 0x96, 0xc5, 0xdf, 0xa1, 0x4d, -0xce, 0x7f, 0xad, 0x51, 0x95, 0x8a, 0x02, 0x7b, 0x75, 0xe2, 0x9e, 0xee, 0xc5, 0x73, 0x22, 0x0c, -0x7c, 0xbc, 0x91, 0xc5, 0x30, 0x8c, 0x92, 0x69, 0xdb, 0x4d, 0x0a, 0xd2, 0xf7, 0x18, 0x47, 0x6a, -0xae, 0x4e, 0x1f, 0x9e, 0xde, 0xbd, 0xa8, 0xd3, 0x41, 0x9f, 0x61, 0x98, 0xfb, 0xe2, 0xaa, 0x4a, -0x41, 0x0c, 0xc4, 0x85, 0x8d, 0x79, 0x2c, 0x4e, 0x01, 0xab, 0x41, 0x23, 0x8c, 0xd4, 0xaf, 0x1a, -0xed, 0xca, 0x26, 0x56, 0x14, 0x3f, 0x28, 0xcf, 0xde, 0xf7, 0xac, 0xbd, 0xbf, 0x9d, 0x74, 0x45, -0x59, 0x1c, 0x95, 0x1f, 0x33, 0x01, 0x9f, 0x6f, 0xc6, 0xa5, 0x12, 0x71, 0x86, 0xe7, 0xdf, 0xbd, -0x5a, 0x66, 0x32, 0x24, 0x59, 0x4a, 0xf2, 0x39, 0x07, 0xb8, 0x35, 0xa3, 0x6b, 0xaa, 0xcd, 0x6c, -0x7e, 0x56, 0x25, 0x0f, 0xde, 0x46, 0x3c, 0x35, 0x53, 0x77, 0x46, 0x4d, 0x6b, 0x73, 0x6f, 0xed, -0x70, 0xdf, 0x21, 0x91, 0x18, 0x6e, 0x1d, 0x54, 0x9c, 0xb2, 0xff, 0x00, 0xf5, 0xab, 0x12, 0xe8, -0x3a, 0xee, 0x50, 0x76, 0x13, 0xc9, 0x94, 0xf4, 0xac, 0xdc, 0xba, 0x33, 0x47, 0x1e, 0xa8, 0xce, -0x7b, 0xb3, 0x2c, 0x66, 0xdd, 0xd7, 0xc9, 0x9c, 0x71, 0xe6, 0x03, 0xc3, 0xfb, 0x8a, 0x9a, 0xd6, -0x07, 0xe0, 0xbf, 0xcc, 0xfe, 0xa6, 0xa2, 0x4e, 0xc8, 0xb8, 0xea, 0x6b, 0xed, 0x08, 0xb8, 0x1d, -0x7d, 0x6a, 0x07, 0xcf, 0x5e, 0x6b, 0x16, 0x6c, 0x88, 0x1b, 0xbf, 0xad, 0x42, 0xdd, 0x73, 0xde, -0xa5, 0xea, 0x3b, 0x91, 0xb7, 0x27, 0x15, 0x0b, 0xa0, 0x60, 0x41, 0xe6, 0x90, 0x15, 0x89, 0x68, -0xce, 0x18, 0xe5, 0x4f, 0x47, 0x3d, 0xbe, 0xb4, 0xd9, 0x09, 0x20, 0x2a, 0xe0, 0x97, 0xe3, 0x23, -0xb5, 0x1b, 0xe8, 0x1b, 0x09, 0xb4, 0x00, 0x00, 0xa6, 0x11, 0xfe, 0x4d, 0x31, 0x5e, 0xe4, 0x67, -0xde, 0xa2, 0x61, 0x4f, 0x70, 0x64, 0x67, 0xdf, 0xf3, 0xaa, 0xf2, 0x0d, 0xb9, 0x70, 0x78, 0xea, -0x57, 0xd6, 0x81, 0x3d, 0xc8, 0xd0, 0x64, 0x16, 0xea, 0x58, 0xe4, 0xe6, 0x83, 0xc5, 0x0c, 0x06, -0xee, 0xc1, 0xa0, 0x48, 0x47, 0x3c, 0xe7, 0xd4, 0x50, 0x31, 0xe2, 0xed, 0xd7, 0xa3, 0x10, 0x47, -0x42, 0x0d, 0x54, 0xba, 0xd4, 0x2e, 0x6e, 0x18, 0xc9, 0x34, 0xb2, 0xcd, 0x80, 0x13, 0x32, 0x31, -0x62, 0xa0, 0x0c, 0x0e, 0x4f, 0x6c, 0x52, 0xb2, 0x0b, 0xeb, 0xa9, 0x9a, 0xef, 0xbf, 0x24, 0x1f, -0xc4, 0x55, 0x47, 0x6e, 0xb9, 0x3c, 0xf7, 0xa4, 0xd6, 0x85, 0xa7, 0xd8, 0xa9, 0x21, 0xe4, 0x9f, -0xce, 0xa9, 0x4d, 0xf3, 0x60, 0x67, 0x39, 0x3c, 0x83, 0x49, 0x16, 0xbc, 0xc8, 0x4f, 0xca, 0x7a, -0xe5, 0x4f, 0xb7, 0x4a, 0x09, 0xe4, 0x1c, 0xd1, 0xba, 0x29, 0x6c, 0x30, 0xf3, 0x9a, 0x87, 0x19, -0x2c, 0x48, 0xcf, 0x38, 0xe6, 0x8b, 0xdc, 0x7d, 0x4f, 0xb2, 0x24, 0x52, 0xd9, 0x55, 0x20, 0x28, -0xfb, 0xcc, 0x6b, 0x95, 0xd5, 0x2e, 0x8c, 0xc7, 0xc8, 0x87, 0x88, 0x57, 0xef, 0x1f, 0xef, 0x9a, -0xde, 0x2b, 0xb9, 0x13, 0x68, 0xc0, 0x78, 0xba, 0x9a, 0x81, 0xa3, 0x23, 0x93, 0xd2, 0xb6, 0xb9, -0xce, 0xfb, 0x91, 0x15, 0xea, 0x7f, 0x5a, 0x88, 0x8c, 0xd3, 0x33, 0x63, 0x37, 0x15, 0xef, 0xc7, -0xb5, 0x31, 0x9f, 0x3c, 0x82, 0x78, 0xec, 0x69, 0xdc, 0x87, 0x71, 0xb1, 0xdd, 0x4b, 0x0c, 0x82, -0x48, 0xdc, 0xab, 0x0f, 0x4a, 0xe8, 0x20, 0xbe, 0xb7, 0xd4, 0x10, 0xc5, 0x22, 0x85, 0x98, 0xf5, -0x56, 0xe8, 0xde, 0xe2, 0xb3, 0x9f, 0x74, 0x54, 0x5f, 0x46, 0x42, 0xd6, 0x6a, 0xb2, 0x02, 0x7e, -0x65, 0x07, 0x8c, 0x8f, 0xbb, 0x5a, 0x91, 0x47, 0xb5, 0x72, 0x7e, 0xf1, 0xf5, 0xac, 0xe5, 0x23, -0x48, 0xc7, 0x5d, 0x41, 0x8f, 0xae, 0x4d, 0x40, 0xdc, 0xe6, 0xb3, 0x7a, 0x9a, 0x59, 0x22, 0x13, -0xee, 0x7a, 0xd4, 0x2d, 0xf9, 0xd4, 0xbd, 0x43, 0xa9, 0x1f, 0x43, 0xce, 0x72, 0x69, 0xa6, 0x8b, -0x83, 0x77, 0x20, 0x70, 0x30, 0xd9, 0xc1, 0x18, 0xe6, 0xa9, 0x2e, 0x53, 0x32, 0x10, 0x4a, 0x37, -0x4f, 0x50, 0x29, 0x88, 0x9c, 0xf3, 0xc8, 0x39, 0x07, 0xbd, 0x31, 0x86, 0x7a, 0xd3, 0xb7, 0x60, -0xb9, 0x11, 0x1d, 0xe9, 0x8c, 0x33, 0xeb, 0xf8, 0xd3, 0xd7, 0xa0, 0x99, 0x11, 0x15, 0x5e, 0x5f, -0x99, 0x82, 0x75, 0x1d, 0x4d, 0x02, 0xb9, 0x13, 0x29, 0x07, 0x72, 0xe3, 0x3d, 0xc7, 0xad, 0x46, -0x5b, 0x70, 0xcf, 0x7f, 0xe5, 0x40, 0x5d, 0x8c, 0x3f, 0xad, 0x44, 0x4f, 0xff, 0x00, 0xae, 0x97, -0x52, 0x96, 0xa4, 0x12, 0xb6, 0x01, 0x03, 0x39, 0x3c, 0x03, 0x55, 0xce, 0x02, 0xe2, 0x87, 0xb6, -0xa1, 0xaa, 0xd8, 0xa7, 0x26, 0x54, 0x96, 0x1c, 0xa9, 0xe4, 0xad, 0x42, 0x48, 0x23, 0x23, 0xbf, -0x7a, 0x4c, 0xb8, 0xea, 0xac, 0x56, 0x7e, 0xa7, 0x3e, 0xb9, 0xaa, 0x6d, 0x96, 0x72, 0xd9, 0xfb, -0xbc, 0x0c, 0x54, 0x94, 0x44, 0xc3, 0x39, 0x15, 0x16, 0x76, 0x9c, 0x1e, 0x94, 0x5c, 0xab, 0x3d, -0x85, 0x63, 0xd7, 0x9a, 0x8c, 0x74, 0xf7, 0xea, 0x69, 0x8e, 0xf7, 0x3e, 0xc2, 0xd4, 0xdc, 0x80, -0xd6, 0xd0, 0x9e, 0x3a, 0x3b, 0x8e, 0xfe, 0xd5, 0xcd, 0x3d, 0xb9, 0xf7, 0xcd, 0x74, 0x47, 0x63, -0x09, 0xbb, 0xb2, 0xa3, 0x40, 0x73, 0xd3, 0x39, 0xfd, 0x2a, 0xab, 0xc3, 0xd7, 0xaf, 0xd6, 0xaa, -0xe2, 0xe8, 0x53, 0x92, 0x33, 0x55, 0x1d, 0x7b, 0x9f, 0xe5, 0x55, 0x76, 0xf5, 0x32, 0x7e, 0x65, -0x77, 0x5f, 0x5a, 0xae, 0xdf, 0xe4, 0xd0, 0xdb, 0x42, 0xb5, 0xc8, 0x58, 0xe7, 0x39, 0xce, 0x69, -0xd6, 0x90, 0x49, 0x71, 0x3a, 0xc7, 0x19, 0x20, 0xe7, 0x25, 0xc7, 0xf0, 0x8f, 0x5a, 0x4d, 0xa5, -0xa8, 0x92, 0xd4, 0xec, 0x84, 0x65, 0xc0, 0x05, 0x89, 0x08, 0x36, 0x87, 0x3c, 0x96, 0xf7, 0xa5, -0xf3, 0x4a, 0x90, 0xb2, 0x70, 0x7b, 0x3e, 0x78, 0x35, 0xce, 0x6e, 0x81, 0xb2, 0x7f, 0xc6, 0xa2, -0x63, 0x53, 0xbb, 0x1f, 0x42, 0x16, 0xef, 0x50, 0x9e, 0x7d, 0x69, 0x30, 0xbd, 0x86, 0x9a, 0x61, -0xc9, 0xcd, 0x03, 0x65, 0x59, 0x7e, 0x66, 0x08, 0x3a, 0x75, 0x6c, 0x52, 0x91, 0xf9, 0x7d, 0x2a, -0x96, 0xa4, 0x36, 0x40, 0x55, 0x90, 0x92, 0xa3, 0x2a, 0x7a, 0xaf, 0xf8, 0x52, 0xe4, 0x11, 0x91, -0xcd, 0x3b, 0x5c, 0x9b, 0x8d, 0x20, 0xf5, 0xef, 0xef, 0x4c, 0x22, 0x80, 0x6e, 0xe4, 0x4e, 0x3a, -0xe4, 0xfe, 0x95, 0x58, 0x29, 0x21, 0x98, 0xf5, 0x6e, 0x7f, 0x0a, 0x7b, 0x3b, 0x0a, 0xf7, 0x18, -0xc3, 0x3d, 0xea, 0xb3, 0xa9, 0xc9, 0x65, 0xe5, 0xbd, 0x0f, 0x7a, 0x43, 0xdf, 0x52, 0x2c, 0x83, -0x9f, 0x5f, 0x4a, 0x89, 0x8f, 0x5a, 0x19, 0x48, 0xa8, 0xf9, 0x32, 0xfa, 0x85, 0x1f, 0xad, 0x31, -0xb9, 0xef, 0xcd, 0x16, 0xb8, 0xef, 0x76, 0x57, 0x72, 0x79, 0xe7, 0x35, 0x49, 0xf2, 0xb9, 0x20, -0xe4, 0x77, 0x14, 0x99, 0x5a, 0x90, 0x39, 0x1b, 0x4b, 0x75, 0xef, 0x9a, 0xa8, 0x01, 0xc6, 0x58, -0xf5, 0xe6, 0xa4, 0xbf, 0x42, 0x36, 0xfd, 0x4f, 0xaf, 0x7a, 0x85, 0xb2, 0x7f, 0x1a, 0x57, 0xd4, -0xbe, 0xba, 0x11, 0x92, 0x71, 0x8e, 0x39, 0xe9, 0x4e, 0x39, 0x23, 0xb5, 0x1d, 0x46, 0xbb, 0xb3, -0xef, 0x6d, 0x53, 0xc2, 0xd3, 0x5b, 0x97, 0x78, 0xd0, 0xb2, 0x83, 0xca, 0x60, 0xee, 0x5f, 0xf1, -0xae, 0x3e, 0x7d, 0x38, 0xa9, 0x3f, 0x2f, 0x35, 0xbc, 0x65, 0x73, 0x9e, 0x6a, 0xcc, 0xc9, 0x9a, -0xd0, 0xae, 0x78, 0xcf, 0xbd, 0x66, 0x4b, 0x07, 0x5c, 0x71, 0xef, 0x57, 0xe6, 0x4c, 0x9f, 0x43, -0x3e, 0x58, 0xb3, 0x9c, 0x8f, 0xc6, 0xb3, 0xe4, 0x8b, 0xd7, 0xf3, 0xa1, 0x79, 0x12, 0xf5, 0x28, -0xc8, 0xbd, 0x40, 0xe6, 0xa9, 0x38, 0x3c, 0xe7, 0x8f, 0xeb, 0x56, 0xdd, 0xc8, 0xb5, 0x99, 0x5f, -0x69, 0x62, 0x00, 0x04, 0x93, 0xd0, 0x0e, 0x6b, 0xac, 0xb1, 0xb2, 0xfb, 0x34, 0x41, 0x0e, 0x0c, -0xd2, 0x72, 0xee, 0x3b, 0x0f, 0x4a, 0xca, 0xa3, 0xd0, 0xb8, 0xad, 0x6e, 0x69, 0x90, 0x00, 0xc0, -0xe3, 0x15, 0x03, 0xa8, 0x60, 0x43, 0x72, 0x0f, 0xad, 0x63, 0x73, 0x42, 0xa3, 0x6f, 0x88, 0x9d, -0xc4, 0xb4, 0x7d, 0x9b, 0xba, 0xd2, 0x96, 0x04, 0x64, 0x72, 0x0f, 0x7a, 0x1b, 0xd6, 0xe8, 0x4b, -0x54, 0x44, 0xc7, 0x3e, 0xbc, 0xd3, 0x0d, 0x27, 0xa8, 0x37, 0xa9, 0x19, 0xe7, 0x9e, 0xf5, 0x1b, -0xb0, 0x55, 0x24, 0xd1, 0xe8, 0x0d, 0x95, 0xd1, 0x4f, 0x2c, 0x7e, 0xf3, 0x9c, 0x9a, 0x93, 0x1f, -0xfe, 0xba, 0xa2, 0x6e, 0x30, 0x8e, 0x79, 0xa8, 0x9a, 0x32, 0x09, 0x64, 0x3c, 0x9e, 0xa0, 0xf7, -0xaa, 0x48, 0x96, 0xc5, 0x18, 0x71, 0xf4, 0x38, 0xc1, 0xed, 0x48, 0x57, 0x9a, 0xbb, 0x10, 0xd9, -0x04, 0x8b, 0xbb, 0xe4, 0x19, 0xf9, 0xba, 0xfd, 0x29, 0x8c, 0x87, 0xff, 0x00, 0xd7, 0x40, 0x9c, -0xae, 0x57, 0x65, 0xf5, 0x35, 0x5d, 0x94, 0xf3, 0x52, 0xee, 0x5a, 0x65, 0x59, 0x10, 0xfd, 0xe5, -0x38, 0x6f, 0x5f, 0x5a, 0xae, 0x58, 0x60, 0x92, 0x39, 0x1d, 0x7d, 0xa8, 0xb3, 0x1a, 0x76, 0x2b, -0x80, 0x71, 0x93, 0xd5, 0x8e, 0x4d, 0x44, 0xd8, 0xcf, 0xbf, 0xad, 0x49, 0x45, 0x69, 0x33, 0xcf, -0x26, 0xab, 0x38, 0xce, 0x79, 0xa4, 0xed, 0xb3, 0x2d, 0x36, 0x50, 0x9f, 0x20, 0x0d, 0xbd, 0xfa, -0x8a, 0x88, 0x90, 0x47, 0xbe, 0x2a, 0x4d, 0x17, 0x99, 0x0b, 0x7d, 0x79, 0x15, 0x19, 0x07, 0xa9, -0xe9, 0x45, 0xae, 0xc7, 0x75, 0xd0, 0x84, 0x9c, 0x9c, 0x13, 0x9c, 0x51, 0x9c, 0x1e, 0x7a, 0x1e, -0x94, 0x7a, 0x17, 0xe4, 0x7e, 0xbf, 0x5d, 0xd8, 0x41, 0x76, 0xa7, 0x7a, 0x80, 0xe4, 0x7d, 0xf0, -0x2b, 0xce, 0xb5, 0xaf, 0x09, 0xe4, 0xbc, 0x91, 0xa6, 0xd6, 0x3d, 0x08, 0xe8, 0xd4, 0xd3, 0xb3, -0xb9, 0x8b, 0x3c, 0xc7, 0x51, 0xd2, 0x25, 0x81, 0xd9, 0x64, 0x46, 0x04, 0x67, 0xa8, 0xae, 0x5a, -0xe6, 0xcc, 0x8c, 0xe4, 0x1a, 0xdd, 0x3b, 0x99, 0x3d, 0x59, 0x89, 0x3c, 0x07, 0xbe, 0x7d, 0x70, -0x2b, 0x2a, 0x68, 0xba, 0xfb, 0xd3, 0x7a, 0xee, 0x45, 0xda, 0x33, 0x26, 0x43, 0xcf, 0x19, 0xac, -0xe9, 0x13, 0x9a, 0x77, 0xee, 0x3e, 0xa6, 0xa6, 0x99, 0x63, 0x8c, 0x5d, 0xc8, 0x32, 0x4f, 0x11, -0xa9, 0x1f, 0xad, 0x6f, 0x2a, 0x15, 0x07, 0x27, 0xe6, 0x3d, 0x6b, 0x09, 0xbb, 0xb2, 0xd6, 0x84, -0x4d, 0xd4, 0xd4, 0x4d, 0xdf, 0xde, 0xa0, 0xa2, 0x16, 0xe7, 0x39, 0xe8, 0x6a, 0xa3, 0xa1, 0x8f, -0x26, 0x3e, 0x54, 0xf5, 0x4f, 0xf0, 0xa3, 0xa8, 0x86, 0xab, 0xab, 0x82, 0x54, 0xe7, 0xb1, 0xf6, -0xa0, 0xfd, 0x3f, 0x1a, 0x7e, 0x62, 0xdc, 0x61, 0xcd, 0x56, 0x6c, 0xc9, 0x26, 0x3a, 0xaa, 0xf5, -0x3e, 0xa6, 0x8b, 0xea, 0x0c, 0x7e, 0x3f, 0xce, 0x68, 0xc5, 0x5a, 0x44, 0x31, 0x76, 0xe7, 0xd7, -0x8a, 0x5d, 0x99, 0xab, 0x44, 0x36, 0x34, 0xc2, 0x49, 0xdc, 0xb9, 0xdd, 0xfc, 0xe9, 0xe2, 0x32, -0xc3, 0x9c, 0x82, 0x3a, 0x8a, 0xd6, 0x31, 0xb9, 0x8b, 0x97, 0x72, 0x3f, 0x20, 0x92, 0xcc, 0x47, -0x5f, 0xe5, 0x50, 0xc9, 0x11, 0xe6, 0x93, 0x5a, 0x04, 0x65, 0x77, 0xa9, 0x51, 0xe3, 0xeb, 0x9a, -0xa8, 0xe8, 0x46, 0x6a, 0x1a, 0x34, 0x4f, 0xb1, 0x51, 0xd4, 0xf5, 0xaa, 0x33, 0xa6, 0xec, 0x01, -0xc1, 0x63, 0xd6, 0xa5, 0x6e, 0x5d, 0xd5, 0x88, 0x89, 0xcf, 0x07, 0x86, 0x1d, 0x8d, 0x57, 0x6e, -0xbd, 0x3f, 0x13, 0x4a, 0xd7, 0x2c, 0xae, 0xfe, 0x95, 0x55, 0xb9, 0xc9, 0x26, 0xa5, 0xee, 0x5a, -0x57, 0x2a, 0x1f, 0x99, 0x98, 0xfa, 0x77, 0xaa, 0xd3, 0x26, 0x0e, 0xe5, 0xeb, 0xdc, 0x7a, 0xd2, -0xb2, 0x7b, 0x96, 0xb6, 0x20, 0xc8, 0x39, 0x39, 0x3c, 0xfa, 0xd3, 0x1b, 0x8a, 0x5e, 0x65, 0xa6, -0x43, 0xd4, 0xb1, 0xc7, 0x7c, 0x66, 0x91, 0x87, 0xaf, 0x6e, 0x73, 0x41, 0x47, 0xec, 0x65, 0x23, -0x28, 0x60, 0x43, 0x00, 0xc0, 0xf6, 0x34, 0x19, 0x9c, 0xc6, 0xaf, 0xe1, 0xf8, 0x2f, 0x11, 0x8a, -0xa0, 0x24, 0xf6, 0x03, 0x91, 0xf4, 0xaf, 0x23, 0xd6, 0x3c, 0x3d, 0x35, 0xab, 0x31, 0xd8, 0x5d, -0x33, 0xf7, 0xf6, 0xf4, 0xfa, 0xd5, 0x45, 0xdb, 0x43, 0x29, 0xf7, 0x38, 0x3b, 0xdb, 0x22, 0xa4, -0x9d, 0xbf, 0xa5, 0x73, 0x77, 0x10, 0x10, 0x4e, 0x41, 0xad, 0xd6, 0xc6, 0x46, 0x1c, 0xf1, 0x7d, -0x78, 0xfd, 0x6a, 0x3b, 0x5b, 0x13, 0x73, 0x2e, 0x58, 0x11, 0x1a, 0x72, 0xc7, 0x1f, 0xa5, 0x26, -0xec, 0x8a, 0x8f, 0x63, 0xa1, 0x58, 0xc7, 0x5c, 0x00, 0x8a, 0x30, 0xa3, 0xd2, 0xa3, 0x6a, 0xe7, -0x6c, 0xd0, 0xae, 0xdd, 0x6a, 0xbb, 0x7a, 0x9a, 0x40, 0xc8, 0x49, 0xeb, 0x9a, 0x8d, 0x8f, 0x3f, -0x5f, 0x5a, 0x00, 0xac, 0xf1, 0xf3, 0xbd, 0x4e, 0x1b, 0xaf, 0xb1, 0xa8, 0xd5, 0xf7, 0x12, 0x1b, -0x2a, 0xdd, 0xd4, 0xd5, 0x6e, 0x4b, 0x1b, 0x23, 0x15, 0x1e, 0xa4, 0xf0, 0x28, 0x44, 0xda, 0x30, -0x7a, 0xf7, 0xf7, 0xa0, 0x4c, 0x78, 0x1f, 0x89, 0xa3, 0x1c, 0xe6, 0xad, 0x2b, 0x92, 0xd9, 0x20, -0x5f, 0xf2, 0x6a, 0x65, 0x88, 0x9f, 0xc7, 0xd6, 0xb6, 0x48, 0xc6, 0x6f, 0x42, 0xdc, 0x76, 0xc5, -0x8f, 0x4c, 0x92, 0x7d, 0x2b, 0xb3, 0xd0, 0x3c, 0x15, 0x7d, 0xe2, 0x09, 0xc4, 0x16, 0xc8, 0xa1, -0xb1, 0xb9, 0xa5, 0x93, 0x85, 0x41, 0xea, 0x4d, 0x6a, 0x95, 0x95, 0xce, 0x49, 0xc9, 0xb6, 0xa2, -0xb7, 0x64, 0x5a, 0xef, 0x83, 0xef, 0xf4, 0x49, 0xda, 0x0b, 0xb8, 0x4a, 0xb0, 0xe8, 0xc0, 0x65, -0x58, 0x7a, 0x83, 0xde, 0xb8, 0xc9, 0xec, 0xd9, 0x49, 0xc8, 0x3f, 0x95, 0x3b, 0x29, 0x2b, 0xa1, -0x46, 0x4d, 0x36, 0xa5, 0xb9, 0x93, 0x34, 0x07, 0x9e, 0x2b, 0x3a, 0x58, 0xc8, 0xcf, 0x04, 0xfe, -0x15, 0x94, 0xa2, 0x74, 0x42, 0x45, 0x19, 0x16, 0xa8, 0xb2, 0x92, 0xcc, 0x7b, 0x74, 0x04, 0xd6, -0x6f, 0x53, 0xa1, 0x3b, 0x95, 0x65, 0x5d, 0xde, 0xbb, 0xbb, 0x37, 0xa5, 0x53, 0x62, 0x79, 0x0c, -0x30, 0xc3, 0xbf, 0xad, 0x4b, 0x2b, 0xcc, 0x85, 0xf2, 0x73, 0xce, 0x73, 0x55, 0x5f, 0x82, 0x49, -0xfd, 0x6a, 0x59, 0xaa, 0x65, 0x51, 0xf7, 0x73, 0xce, 0x5f, 0x93, 0xcd, 0x42, 0xfd, 0xff, 0x00, -0xad, 0x4b, 0x65, 0xad, 0x4a, 0x72, 0xab, 0x64, 0xba, 0x8e, 0x47, 0x6f, 0x5a, 0x8b, 0x39, 0x52, -0x7f, 0x3a, 0x3a, 0x58, 0xa4, 0x31, 0x7a, 0x7b, 0x9a, 0x8d, 0xa5, 0x50, 0x4a, 0xb3, 0x0d, 0xc7, -0xa0, 0x34, 0x9e, 0xac, 0xd1, 0x3e, 0xe7, 0xec, 0x75, 0x14, 0x19, 0x05, 0x50, 0xbd, 0xd3, 0xe0, -0xbc, 0x46, 0x0c, 0xa3, 0x71, 0xef, 0x8e, 0xb4, 0x09, 0xab, 0xa3, 0xc9, 0xb5, 0xff, 0x00, 0x0b, -0xb4, 0x65, 0xde, 0x14, 0x00, 0xf3, 0x94, 0x3d, 0xfe, 0x95, 0xe5, 0x7a, 0x85, 0x83, 0x46, 0xcc, -0x19, 0x70, 0xc3, 0x8c, 0x1a, 0xde, 0x2e, 0xe8, 0xe7, 0x92, 0xb3, 0x39, 0x59, 0x6d, 0x1e, 0x49, -0x04, 0x68, 0xb9, 0x67, 0x38, 0x15, 0xa3, 0x1d, 0xa2, 0xc2, 0x82, 0x25, 0xfa, 0xbb, 0x7a, 0x9a, -0x53, 0x77, 0xd0, 0xa8, 0xae, 0xa3, 0x5d, 0x71, 0x91, 0x54, 0xe4, 0x1d, 0x6b, 0x26, 0x8b, 0xd0, -0xa8, 0xe3, 0xbf, 0x39, 0x3d, 0xea, 0xbb, 0x77, 0xa4, 0xd7, 0x51, 0xb2, 0x06, 0x1f, 0xfe, 0xba, -0x85, 0xbf, 0x3a, 0x09, 0xb8, 0xd2, 0x7f, 0x5a, 0x81, 0xd4, 0x36, 0x49, 0xe0, 0x8e, 0x8d, 0xe9, -0x4e, 0xe0, 0xf5, 0x2a, 0xa3, 0x96, 0x7c, 0xb9, 0xce, 0x38, 0x53, 0x8e, 0xb5, 0x67, 0x9f, 0xff, -0x00, 0x5d, 0x56, 0xc4, 0x0e, 0x15, 0x20, 0x5c, 0x9c, 0xd5, 0xa2, 0x24, 0xc9, 0xd1, 0x32, 0x7d, -0xea, 0xf4, 0x51, 0x6e, 0x3e, 0xb5, 0xb4, 0x55, 0xce, 0x7a, 0x8c, 0xe9, 0xf4, 0x9d, 0x38, 0xcf, -0x2a, 0x2e, 0x33, 0xce, 0x2b, 0xe9, 0xff, 0x00, 0x08, 0xe8, 0xd1, 0xe9, 0x5a, 0x72, 0xbe, 0xd0, -0x27, 0xba, 0x01, 0x99, 0xbd, 0xbb, 0x0f, 0xd6, 0xb4, 0xac, 0xf9, 0x29, 0xfa, 0x9c, 0xd8, 0x75, -0xed, 0x71, 0x09, 0x76, 0xd4, 0xd5, 0xd6, 0x34, 0x4b, 0x0d, 0x72, 0xdc, 0xc1, 0x7b, 0x16, 0xe2, -0x07, 0xc9, 0x2a, 0x9c, 0x32, 0x1f, 0x5a, 0xf9, 0xdf, 0xc5, 0xde, 0x0d, 0x9b, 0x47, 0x9b, 0x07, -0x12, 0x45, 0x20, 0xdc, 0x92, 0xae, 0x70, 0xc3, 0xfc, 0x6a, 0x30, 0xb5, 0x2f, 0xee, 0x33, 0x7c, -0x7d, 0x2f, 0x66, 0xfd, 0xb4, 0x7e, 0x7f, 0xe6, 0x79, 0x75, 0xe5, 0x8b, 0x21, 0x60, 0x46, 0x3d, -0x6b, 0x9f, 0xb8, 0x80, 0x8c, 0xf1, 0x5a, 0xce, 0x36, 0x31, 0xa7, 0x3e, 0x63, 0x1a, 0x74, 0xda, -0x09, 0xac, 0xe6, 0x4d, 0xa3, 0x9e, 0x4f, 0x73, 0x5c, 0xf2, 0x47, 0x6c, 0x59, 0x55, 0xd7, 0x39, -0xaa, 0x72, 0xa6, 0xef, 0xa8, 0xef, 0xe9, 0x59, 0xb4, 0x68, 0x99, 0x49, 0xb2, 0x1b, 0x6b, 0x75, -0xec, 0x7d, 0x6a, 0xac, 0xdc, 0x8d, 0xbc, 0xfc, 0xe7, 0x15, 0x06, 0xa8, 0x85, 0x86, 0x72, 0x01, -0xaa, 0xed, 0xc6, 0x7d, 0x73, 0x4b, 0x73, 0x55, 0x62, 0x17, 0xe4, 0x1e, 0x73, 0xef, 0x54, 0x65, -0x53, 0xd4, 0x1e, 0x4f, 0x50, 0x3b, 0xd2, 0x93, 0xb9, 0x49, 0x09, 0x9c, 0xf4, 0xec, 0x3a, 0x54, -0x4e, 0x8a, 0x5b, 0x7e, 0x06, 0x7a, 0x64, 0xd2, 0x96, 0xd6, 0x45, 0xa7, 0xd4, 0xfd, 0x8f, 0xa2, -0x83, 0x20, 0xa2, 0x80, 0x21, 0x9e, 0xde, 0x3b, 0x94, 0x29, 0x2a, 0xe4, 0x76, 0x3d, 0xc5, 0x79, -0x9f, 0x89, 0xbc, 0x32, 0xa5, 0x5a, 0x50, 0x38, 0x3f, 0x76, 0x50, 0x3f, 0x43, 0x4d, 0x3d, 0x48, -0x9a, 0xb9, 0xe4, 0xf2, 0x69, 0x9f, 0x64, 0x67, 0x66, 0x01, 0xa6, 0x62, 0x40, 0xe7, 0xa0, 0xac, -0xd9, 0x63, 0xda, 0x08, 0xee, 0x7a, 0x93, 0x56, 0xdd, 0xc9, 0x8e, 0x88, 0xca, 0x98, 0x72, 0x7a, -0xe7, 0xd6, 0xb3, 0xe4, 0xa8, 0x96, 0xa3, 0x2a, 0x3f, 0x7a, 0xaa, 0xdc, 0xfb, 0xd2, 0x60, 0x42, -0xf5, 0x0b, 0x7a, 0xf7, 0xa2, 0xe2, 0xf3, 0x22, 0x26, 0xab, 0xca, 0xc4, 0xe1, 0x17, 0xef, 0x37, -0x5f, 0x61, 0x47, 0x5d, 0x49, 0x7a, 0x86, 0xc5, 0xdb, 0xb7, 0xa8, 0xed, 0x4c, 0xcb, 0x47, 0xc1, -0x25, 0x93, 0xfb, 0xdd, 0xc5, 0x68, 0xb5, 0x13, 0x65, 0x85, 0x39, 0xc1, 0xcf, 0x5e, 0xf5, 0x61, -0x06, 0x4f, 0x26, 0xad, 0x19, 0x49, 0xdc, 0xb9, 0x12, 0xe6, 0xb6, 0x6d, 0x20, 0x2c, 0x46, 0x46, -0x73, 0xd2, 0xba, 0x60, 0x8e, 0x4a, 0x92, 0xd0, 0xf6, 0x4f, 0x04, 0x68, 0x7f, 0x69, 0xb9, 0x89, -0x9d, 0x4f, 0x96, 0xa7, 0x2c, 0xdf, 0x85, 0x7b, 0xc0, 0x01, 0x40, 0x51, 0xc0, 0x03, 0x00, 0x54, -0x63, 0x1d, 0x9a, 0x88, 0xf2, 0xb5, 0xcc, 0xe7, 0x3f, 0x90, 0xb5, 0x52, 0xf6, 0xc6, 0xd7, 0x50, -0x85, 0xe0, 0xbb, 0x85, 0x66, 0x8d, 0xc6, 0x30, 0xc3, 0x91, 0xee, 0x0d, 0x71, 0xa9, 0x38, 0xbb, -0xa3, 0xd5, 0x9c, 0x23, 0x52, 0x2e, 0x32, 0x57, 0x47, 0x81, 0x78, 0xd3, 0xc1, 0xad, 0xa7, 0x4a, -0xd2, 0xdb, 0x24, 0x92, 0xda, 0x48, 0x7e, 0x59, 0x31, 0x9d, 0xbe, 0xc7, 0xde, 0xbc, 0x66, 0xfe, -0xc9, 0xa3, 0x66, 0x04, 0x11, 0x83, 0x5e, 0xa2, 0x97, 0xb5, 0x87, 0x31, 0xe0, 0xa4, 0xe8, 0xd4, -0x74, 0xdf, 0x43, 0x94, 0xba, 0x84, 0xee, 0xc7, 0x3e, 0xa6, 0xb2, 0x66, 0x4e, 0x7f, 0xc6, 0xb9, -0xe5, 0xa1, 0xdd, 0x4d, 0xdd, 0x19, 0xf2, 0x03, 0xcd, 0x52, 0x93, 0xbd, 0x60, 0xd5, 0xce, 0x85, -0x2d, 0x35, 0x29, 0xca, 0xa0, 0x8f, 0x9b, 0xa5, 0x66, 0xb9, 0xfd, 0xe8, 0x46, 0xcf, 0x4e, 0x0f, -0xad, 0x4b, 0x57, 0xdc, 0xd1, 0x3b, 0xec, 0x31, 0x8f, 0xe8, 0x2a, 0x06, 0xf5, 0xa9, 0xb5, 0xf7, -0x34, 0x4f, 0xb9, 0x5c, 0xf5, 0x3c, 0xf3, 0x50, 0x3e, 0x4b, 0x76, 0xa4, 0x68, 0xb6, 0xb9, 0x5d, -0x87, 0x3b, 0x86, 0x72, 0x7b, 0x7a, 0xd4, 0x6c, 0xd9, 0xe6, 0xa6, 0xe5, 0xec, 0xcf, 0xd8, 0xfa, -0x29, 0x99, 0x05, 0x14, 0x00, 0x55, 0x6b, 0xc1, 0x19, 0xb6, 0x9f, 0xcd, 0x0a, 0xc9, 0xb0, 0xe7, -0x70, 0xcd, 0x02, 0x7b, 0x1f, 0x3f, 0xeb, 0x09, 0xb6, 0x56, 0x60, 0x32, 0x3d, 0x3d, 0x2b, 0x93, -0x9d, 0x95, 0xb7, 0x11, 0xcf, 0xa8, 0xf4, 0xad, 0x08, 0x46, 0x34, 0xdd, 0xeb, 0x36, 0x4e, 0xa6, -0xa1, 0xb1, 0x94, 0xdf, 0x3c, 0xf7, 0xaa, 0xcd, 0x40, 0x75, 0x20, 0x63, 0x50, 0xb7, 0x5e, 0x7f, -0x5a, 0x4d, 0x88, 0x85, 0xdb, 0x00, 0xb1, 0x3c, 0x63, 0xa9, 0xaa, 0xe9, 0x92, 0x5a, 0x46, 0xea, -0xdd, 0x3d, 0x85, 0x52, 0xee, 0x49, 0x26, 0x47, 0xe3, 0x49, 0xd7, 0xdc, 0x1a, 0xa4, 0x43, 0xd7, -0x51, 0x14, 0x14, 0x24, 0xae, 0x48, 0xcf, 0x2b, 0x57, 0x22, 0x60, 0xdc, 0x8f, 0xcb, 0xd2, 0xb6, -0x89, 0x8c, 0x9e, 0x86, 0xa4, 0x03, 0x27, 0xeb, 0xeb, 0x5d, 0x7e, 0x91, 0x68, 0x66, 0x91, 0x06, -0x09, 0xcf, 0xb5, 0x75, 0x52, 0x8f, 0x63, 0x83, 0x11, 0x3d, 0x0f, 0xa5, 0xfc, 0x2d, 0xa7, 0x2d, -0x8d, 0x82, 0xb9, 0x5c, 0x49, 0x2f, 0x39, 0xc7, 0x38, 0xae, 0xa2, 0xb8, 0xb1, 0x32, 0xe6, 0xa8, -0xcf, 0x47, 0x2f, 0xa7, 0xec, 0xe8, 0x47, 0xcf, 0x5f, 0xbc, 0x28, 0xac, 0x0e, 0xd2, 0x39, 0x62, -0x8a, 0x74, 0x68, 0xa6, 0x8d, 0x25, 0x8d, 0xc6, 0x19, 0x24, 0x19, 0x07, 0xf0, 0xaf, 0x04, 0xf8, -0x83, 0xe0, 0xcf, 0xb1, 0xef, 0xd4, 0x2c, 0x20, 0x66, 0xb2, 0x7e, 0x5c, 0x22, 0x93, 0xe4, 0x1f, -0x7f, 0x6c, 0xd7, 0x56, 0x1a, 0xa7, 0x2c, 0xb9, 0x5e, 0xcc, 0xe0, 0xc7, 0xd1, 0xe7, 0x8f, 0xb4, -0x4b, 0x55, 0xf9, 0x1f, 0x3e, 0x5e, 0x41, 0x86, 0x72, 0x47, 0x5f, 0x6a, 0xe7, 0x67, 0x8f, 0x04, -0xff, 0x00, 0x2a, 0xda, 0xa2, 0xd4, 0xc6, 0x93, 0xba, 0x32, 0xa5, 0x53, 0xcf, 0x7f, 0x7a, 0xcf, -0x90, 0x75, 0xfe, 0xb5, 0xce, 0xce, 0x94, 0x52, 0x93, 0xf1, 0xaa, 0x05, 0x77, 0x06, 0x2c, 0x33, -0xb8, 0xe7, 0x9a, 0x89, 0x36, 0xd9, 0xb4, 0x7c, 0x8a, 0xaf, 0xb9, 0x09, 0x0c, 0x72, 0xa4, 0xf0, -0xd5, 0x1b, 0x63, 0xaf, 0xaf, 0x7a, 0x86, 0xcd, 0x11, 0x03, 0x1f, 0xff, 0x00, 0x5d, 0x57, 0xea, -0xcc, 0x73, 0xed, 0x93, 0x49, 0xbe, 0xa6, 0xa8, 0x89, 0xbb, 0xf2, 0x33, 0x55, 0x25, 0xc8, 0xcb, -0x0c, 0x73, 0xd4, 0x52, 0x77, 0xb9, 0x49, 0xf3, 0x68, 0xcf, 0xd9, 0x2a, 0x28, 0x32, 0x0a, 0x28, -0x00, 0xae, 0x73, 0xc4, 0x37, 0xc2, 0x0b, 0x73, 0x10, 0x3f, 0x33, 0x72, 0x71, 0x4d, 0x6a, 0xc5, -0x27, 0xa1, 0xe3, 0x1a, 0x94, 0x9b, 0x8b, 0x9c, 0xfe, 0x75, 0xc6, 0xdd, 0xaf, 0xcc, 0x59, 0x4e, -0xd6, 0xfe, 0x75, 0x77, 0x26, 0xdd, 0x4c, 0x69, 0x25, 0xc9, 0xda, 0xfc, 0x37, 0xe8, 0x6a, 0x94, -0x8d, 0xd7, 0x9a, 0x96, 0x0c, 0xa8, 0xe7, 0x39, 0xcd, 0x56, 0x63, 0xc9, 0xfe, 0xb4, 0xae, 0x27, -0x72, 0xbb, 0x1c, 0x9a, 0x88, 0xf5, 0xa5, 0xd2, 0xec, 0x1e, 0xac, 0xab, 0x29, 0xde, 0xe2, 0x3c, -0xe4, 0x75, 0x63, 0x4a, 0x71, 0x54, 0x4e, 0xe3, 0x0d, 0x00, 0xd5, 0x22, 0x1e, 0x84, 0xaa, 0x7b, -0xd4, 0xea, 0xbc, 0xee, 0x5e, 0x18, 0xf5, 0xf7, 0xad, 0xa2, 0x63, 0x37, 0x74, 0x6c, 0x59, 0xb0, -0x66, 0x00, 0xf0, 0xde, 0x86, 0xbd, 0x6f, 0xc1, 0x9a, 0x7f, 0xda, 0xee, 0xe0, 0x4c, 0x67, 0x71, -0xfc, 0xb9, 0xae, 0xca, 0x56, 0x5a, 0x9e, 0x5e, 0x25, 0xb6, 0xac, 0x8f, 0xa3, 0x91, 0x16, 0x34, -0x54, 0x51, 0x85, 0x51, 0x80, 0x29, 0xd5, 0xe5, 0x49, 0xf3, 0x3b, 0xb3, 0xe8, 0x21, 0x05, 0x08, -0xa8, 0xae, 0x81, 0x45, 0x22, 0xc2, 0xb8, 0xef, 0x1d, 0x5e, 0x0b, 0x6d, 0x02, 0xe2, 0x1c, 0xfc, -0xf7, 0xa4, 0x44, 0x07, 0xb7, 0x53, 0xfc, 0xb1, 0xf8, 0xd6, 0x94, 0xa3, 0xcd, 0x34, 0x8c, 0x71, -0x33, 0xf6, 0x74, 0xa5, 0x2f, 0x23, 0xe4, 0x3d, 0x51, 0x30, 0xee, 0x47, 0x4c, 0x9e, 0x2b, 0x92, -0xb9, 0x5e, 0xbe, 0xfe, 0xb5, 0xe8, 0x54, 0x5a, 0x9e, 0x65, 0x0b, 0xa4, 0x8c, 0x79, 0x81, 0xe6, -0xb3, 0x65, 0x15, 0xc9, 0x25, 0xa9, 0xda, 0xb5, 0x46, 0x6c, 0xfc, 0x29, 0x23, 0xf3, 0x35, 0x55, -0x87, 0x6e, 0xb5, 0x9b, 0x46, 0xdd, 0x34, 0x2a, 0xb8, 0x07, 0x20, 0xf3, 0x54, 0xdb, 0x29, 0xdf, -0x29, 0xd8, 0xfa, 0x54, 0x34, 0xde, 0xc6, 0x8b, 0x5d, 0x08, 0xdf, 0xb9, 0xeb, 0xef, 0x50, 0x0e, -0x99, 0xcf, 0xde, 0xe6, 0x94, 0x9e, 0xa6, 0x91, 0xb3, 0x22, 0x60, 0x7b, 0x1a, 0xa7, 0x31, 0x38, -0x27, 0xd0, 0x75, 0xa4, 0x5f, 0x99, 0xfb, 0x25, 0x45, 0x06, 0x41, 0x45, 0x00, 0x43, 0x3c, 0xcb, -0x04, 0x6f, 0x23, 0x9e, 0x14, 0x67, 0xeb, 0x5e, 0x57, 0xae, 0x6a, 0x06, 0x79, 0x64, 0x62, 0xdd, -0x4f, 0x1c, 0xd3, 0x44, 0xc8, 0xf3, 0xdb, 0xd9, 0x72, 0x5b, 0x9c, 0xd7, 0x39, 0x70, 0xfd, 0x6a, -0xb7, 0x11, 0x89, 0x70, 0x03, 0x67, 0x3d, 0x3d, 0x7d, 0x2b, 0x31, 0xdd, 0xe3, 0x38, 0x7c, 0xb2, -0xff, 0x00, 0x7b, 0xd2, 0x90, 0x3d, 0x88, 0x99, 0xc3, 0x72, 0x0e, 0x47, 0xad, 0x42, 0xcd, 0xf5, -0xa9, 0xbe, 0xa1, 0x62, 0x06, 0x39, 0xea, 0x6a, 0xbc, 0x8e, 0x14, 0x16, 0x3f, 0xfe, 0xba, 0x62, -0x20, 0x40, 0x40, 0xc9, 0xfb, 0xcc, 0x72, 0x69, 0x58, 0x9f, 0xeb, 0x4f, 0x72, 0x06, 0x13, 0xeb, -0xff, 0x00, 0xeb, 0xa0, 0x75, 0xeb, 0x54, 0x26, 0x99, 0x2a, 0x9a, 0xb3, 0x19, 0xe7, 0xff, 0x00, -0xaf, 0x5a, 0xc5, 0x98, 0xcf, 0x63, 0x5a, 0xdf, 0x1b, 0x81, 0x27, 0x07, 0x3c, 0x1f, 0x4a, 0xf7, -0x9f, 0x86, 0x37, 0x36, 0xdf, 0x6d, 0x91, 0x27, 0x74, 0x59, 0x4c, 0x24, 0x44, 0x58, 0xe3, 0x73, -0x6e, 0x1c, 0x0f, 0x7c, 0x66, 0xba, 0x53, 0x6e, 0x0e, 0xc7, 0x0c, 0xd4, 0x79, 0xe2, 0xe7, 0xb5, -0xcf, 0x73, 0xa2, 0xbc, 0xd3, 0xdc, 0x0a, 0x28, 0x00, 0xaf, 0x1b, 0xf8, 0x8f, 0xa9, 0x17, 0x98, -0x5a, 0x06, 0x05, 0x2d, 0x87, 0x40, 0x7b, 0x91, 0x93, 0xfe, 0x7d, 0xab, 0xab, 0x09, 0x1e, 0x6a, -0x89, 0x9c, 0x39, 0x8c, 0xad, 0x46, 0xdd, 0xda, 0xff, 0x00, 0x33, 0xe7, 0xad, 0x41, 0xb7, 0x13, -0x5c, 0x95, 0xd0, 0x39, 0x62, 0x3f, 0x11, 0x5d, 0x75, 0x1e, 0xa7, 0x25, 0x1d, 0x91, 0x8b, 0x29, -0xeb, 0x8e, 0xbe, 0x9d, 0xeb, 0x36, 0x5e, 0xe6, 0xb9, 0x27, 0x73, 0xb6, 0x2f, 0x43, 0x36, 0x5e, -0x58, 0x7e, 0x75, 0x52, 0x4c, 0xfa, 0xf5, 0xac, 0x9b, 0xb9, 0xb2, 0x2b, 0x37, 0x5f, 0x5f, 0x7a, -0xac, 0xe3, 0xf5, 0xf5, 0xa8, 0x66, 0x89, 0x5f, 0x62, 0x93, 0x86, 0x8c, 0x1e, 0xa5, 0x5b, 0x81, -0xed, 0x48, 0x47, 0x03, 0xbf, 0x6a, 0x4c, 0xd6, 0x3d, 0x99, 0x13, 0xf4, 0x24, 0x9e, 0x47, 0xeb, -0x54, 0x2e, 0x0f, 0xca, 0x79, 0xeb, 0x52, 0xf4, 0x2d, 0x6a, 0x7e, 0xc9, 0xd1, 0x4c, 0xc4, 0x28, -0x27, 0x19, 0x24, 0xfe, 0x34, 0x01, 0xc4, 0xeb, 0xda, 0xa0, 0x20, 0xc7, 0x1b, 0x1d, 0xab, 0x9f, -0xc6, 0xbc, 0xc2, 0xfe, 0xeb, 0x71, 0x6e, 0x4f, 0x3d, 0xea, 0x91, 0x3e, 0x67, 0x29, 0x75, 0x36, -0x73, 0xcd, 0x61, 0xcf, 0x21, 0x39, 0xe6, 0x95, 0xc3, 0x63, 0x32, 0x46, 0xc9, 0xe7, 0x35, 0x49, -0xd8, 0x1e, 0xbd, 0xe8, 0x60, 0x67, 0xb8, 0x64, 0x25, 0xa3, 0xe4, 0x13, 0x92, 0xbe, 0xb5, 0x18, -0x99, 0x5f, 0x38, 0xc8, 0x6e, 0xea, 0x7a, 0x8a, 0x1e, 0xa4, 0x8c, 0x63, 0x55, 0x19, 0xbc, 0xc7, -0xe7, 0xee, 0xa7, 0x3f, 0x53, 0x4e, 0xf7, 0x01, 0xc4, 0x9a, 0x8d, 0x9a, 0x86, 0x4b, 0x76, 0x1a, -0x4f, 0x7f, 0x6a, 0xc9, 0x37, 0xf2, 0x0b, 0xcf, 0x23, 0x63, 0x15, 0xce, 0x3a, 0x7e, 0xb5, 0x69, -0x73, 0x11, 0x27, 0x63, 0x69, 0x4f, 0xad, 0x58, 0x46, 0xad, 0x11, 0x9c, 0x8b, 0xf1, 0xcb, 0xb4, -0x67, 0xf2, 0xae, 0xb3, 0x46, 0xd4, 0xe4, 0xb5, 0x64, 0x21, 0xc8, 0x60, 0x73, 0x9c, 0xf3, 0x5d, -0x34, 0x99, 0xc3, 0x5e, 0x1c, 0xca, 0xc7, 0xd0, 0x7e, 0x18, 0xf1, 0x9a, 0x5d, 0xaa, 0xdb, 0x6a, -0x32, 0xe5, 0xd8, 0xe1, 0x6e, 0x1b, 0xe9, 0xd0, 0xff, 0x00, 0x8d, 0x7a, 0x38, 0x21, 0x80, 0x20, -0xe4, 0x1e, 0x41, 0x1d, 0xeb, 0x9b, 0x13, 0x4b, 0x92, 0x5c, 0xcb, 0x66, 0x75, 0xe0, 0x31, 0x0e, -0xac, 0x39, 0x25, 0xba, 0x16, 0x8a, 0xe6, 0x3d, 0x02, 0x29, 0xe5, 0x10, 0x43, 0x34, 0xcd, 0xc8, -0x89, 0x0b, 0x9e, 0x7a, 0xe0, 0x66, 0xbe, 0x63, 0xf1, 0x4d, 0xfb, 0x5c, 0xdd, 0x4d, 0x23, 0x36, -0x4b, 0x31, 0x26, 0xbd, 0x0c, 0x0a, 0xf8, 0xa4, 0x79, 0x39, 0x94, 0xb9, 0xa5, 0x08, 0x7a, 0xb3, -0xcc, 0x6f, 0x1f, 0x25, 0x8e, 0x7f, 0x3a, 0xe6, 0xae, 0x4f, 0xde, 0xe7, 0xa9, 0xad, 0x2a, 0x6e, -0x2a, 0x68, 0xc3, 0xb9, 0xe7, 0x24, 0x1f, 0x9b, 0xd4, 0xf7, 0xac, 0x99, 0x1b, 0x39, 0x07, 0xae, -0x79, 0x15, 0xcb, 0x2d, 0x8e, 0xb8, 0xab, 0x94, 0x1b, 0x96, 0x66, 0xcf, 0xb7, 0x35, 0x59, 0xcf, -0xe7, 0x8a, 0xce, 0x5e, 0x46, 0xe9, 0x15, 0x98, 0xf5, 0xfe, 0x75, 0x55, 0xb3, 0x8a, 0x86, 0x5a, -0xd1, 0x95, 0xa4, 0xf9, 0x99, 0x47, 0xe3, 0xcf, 0x6a, 0x88, 0xe5, 0x09, 0xc6, 0x4a, 0xe7, 0x3f, -0x4a, 0x89, 0x3b, 0xbd, 0x0d, 0x63, 0xaa, 0xbb, 0x22, 0x73, 0x9e, 0x6b, 0x2e, 0xe5, 0xb2, 0x54, -0x73, 0xc9, 0xcf, 0x34, 0x5e, 0xdb, 0x94, 0xde, 0xb7, 0x3f, 0x66, 0x28, 0xa0, 0xc8, 0x2b, 0x9d, -0xd6, 0xb5, 0x44, 0xb7, 0x8c, 0xc4, 0xae, 0x37, 0x1e, 0xa6, 0x80, 0x3c, 0xa7, 0x51, 0xd4, 0x37, -0x96, 0x25, 0xba, 0xd7, 0x23, 0x75, 0x73, 0x9d, 0xd9, 0x35, 0x57, 0x13, 0xf2, 0x30, 0x2e, 0x26, -0xce, 0x7b, 0xd6, 0x5c, 0xb2, 0x67, 0x27, 0xf9, 0xd3, 0xd3, 0x70, 0xd4, 0xa2, 0xef, 0xd7, 0x9a, -0xa8, 0xed, 0xd7, 0x9a, 0x86, 0x22, 0xb3, 0x37, 0x7c, 0xd5, 0x39, 0x10, 0x39, 0xdd, 0xd1, 0xbb, -0x30, 0xa7, 0xd4, 0x4c, 0xaa, 0xd3, 0x48, 0x99, 0x57, 0x1f, 0x31, 0xe1, 0x5c, 0x74, 0x34, 0xe5, -0xc2, 0xa8, 0x1d, 0x7b, 0xe7, 0xd6, 0x9f, 0x91, 0x3b, 0xea, 0x21, 0x6e, 0xbf, 0xd6, 0x98, 0x48, -0xfa, 0xd1, 0x7b, 0x89, 0xab, 0x6a, 0x26, 0x73, 0x93, 0x51, 0xf9, 0x48, 0x5f, 0xcd, 0x2a, 0x3c, -0xc0, 0x31, 0xbb, 0x1c, 0xd5, 0x27, 0xd4, 0x52, 0x57, 0xd0, 0xb2, 0xbe, 0xb5, 0x2a, 0xb7, 0x3e, -0xf5, 0xa2, 0x66, 0x52, 0xd0, 0x95, 0x1b, 0x73, 0x81, 0x9e, 0x07, 0x26, 0xb4, 0xe2, 0x9c, 0x82, -0x39, 0xad, 0xe2, 0xce, 0x69, 0xc6, 0xe7, 0x4d, 0x61, 0xa9, 0xb4, 0x25, 0x48, 0x6c, 0x57, 0xb2, -0xf8, 0x53, 0xc6, 0x7e, 0x41, 0x4b, 0x7b, 0xb7, 0xdf, 0x6c, 0xf8, 0x19, 0x39, 0x26, 0x3f, 0x71, -0x5d, 0x2e, 0x2a, 0xac, 0x5c, 0x19, 0xe7, 0xb9, 0x3a, 0x15, 0x15, 0x58, 0xf4, 0xfc, 0x8f, 0x60, -0xb7, 0xb9, 0x82, 0xee, 0x25, 0x9e, 0xde, 0x55, 0x9a, 0x27, 0xe8, 0xe8, 0x6a, 0x7a, 0xf2, 0x65, -0x17, 0x17, 0x66, 0x7d, 0x14, 0x2a, 0x46, 0xac, 0x54, 0xa2, 0xf4, 0x67, 0x1b, 0xe3, 0x5d, 0x49, -0x6c, 0xb4, 0xc3, 0x08, 0x60, 0x24, 0xb9, 0xce, 0x46, 0x7f, 0x84, 0x7f, 0xf5, 0xff, 0x00, 0x95, -0x7c, 0xcd, 0xaa, 0xdd, 0x79, 0x8e, 0xec, 0x4e, 0x49, 0x3d, 0x6b, 0xd3, 0xc2, 0x2b, 0x52, 0xf5, -0x67, 0x91, 0x8b, 0x6a, 0x78, 0x8f, 0x45, 0x6f, 0xd4, 0xe3, 0xae, 0xa4, 0xc9, 0x26, 0xb0, 0xae, -0x1f, 0x93, 0xeb, 0x53, 0x37, 0x7d, 0x4d, 0x69, 0xa3, 0x1a, 0x76, 0xc9, 0x35, 0x91, 0x71, 0x8e, -0x4f, 0x71, 0xde, 0xb9, 0x64, 0xce, 0xb8, 0xa4, 0x50, 0xde, 0x00, 0xc1, 0xe1, 0xba, 0xf3, 0xde, -0xa0, 0x7a, 0xce, 0x4f, 0x5d, 0x4d, 0xa2, 0xb4, 0xb1, 0x5d, 0x8f, 0x3d, 0xaa, 0xb3, 0x72, 0x7a, -0xfd, 0x2a, 0x1a, 0x5b, 0x9a, 0x26, 0x56, 0xe1, 0x9c, 0x9e, 0x0e, 0x38, 0xcd, 0x04, 0x70, 0x79, -0xeb, 0xda, 0xa5, 0xab, 0x1a, 0x2e, 0xc5, 0x29, 0x06, 0xde, 0x47, 0x2b, 0xdc, 0x77, 0x15, 0x95, -0x3b, 0x03, 0x27, 0x07, 0xa7, 0x71, 0x43, 0xec, 0x57, 0xa9, 0xfb, 0x37, 0x45, 0x06, 0x26, 0x3e, -0xad, 0xa9, 0xc7, 0x63, 0x0b, 0x00, 0xc3, 0xcd, 0x61, 0xd3, 0x3d, 0x2b, 0xc9, 0x35, 0x4d, 0x51, -0xa5, 0x76, 0x62, 0xe4, 0x93, 0xea, 0x68, 0xdc, 0x67, 0x1d, 0x75, 0x76, 0x58, 0x9f, 0x9b, 0xf1, -0xcd, 0x61, 0x4f, 0x3f, 0x5e, 0x7f, 0x5a, 0x68, 0x19, 0x93, 0x2c, 0xd9, 0xce, 0x4f, 0x5a, 0xa0, -0xef, 0xd7, 0x9a, 0x6c, 0x94, 0x54, 0x77, 0xe4, 0xd5, 0x67, 0x7f, 0x7c, 0xe6, 0x90, 0x8a, 0xcc, -0xdf, 0xcb, 0xbd, 0x42, 0xcd, 0xfe, 0x4d, 0x0c, 0x2e, 0x54, 0xcf, 0x9a, 0x4b, 0x30, 0xca, 0xf4, -0x50, 0x7f, 0x9d, 0x34, 0xef, 0x8f, 0x91, 0x97, 0x4f, 0x4e, 0xe2, 0x82, 0x58, 0x07, 0x0d, 0xc8, -0x39, 0xfe, 0x94, 0x12, 0x7e, 0xb4, 0xfd, 0x49, 0x6c, 0x4e, 0x73, 0xd7, 0x9a, 0x90, 0x77, 0xaa, -0x4f, 0x52, 0x5e, 0xa8, 0x50, 0x79, 0xfe, 0xb4, 0xf2, 0xd8, 0x19, 0x26, 0xaa, 0x3a, 0x91, 0x21, -0xf1, 0x92, 0x06, 0x7f, 0x88, 0xf2, 0x4d, 0x59, 0x59, 0x31, 0xd4, 0xfd, 0x2b, 0x54, 0xcc, 0x24, -0x8b, 0xb1, 0x5c, 0x60, 0xfd, 0xee, 0x7d, 0xeb, 0x6e, 0xd3, 0x51, 0x68, 0x88, 0x21, 0xbf, 0x5a, -0xe9, 0x84, 0x8e, 0x69, 0xc3, 0x98, 0xf4, 0xbf, 0x0d, 0xf8, 0xd6, 0x7d, 0x36, 0x45, 0x3e, 0x61, -0x92, 0x26, 0x1f, 0x3c, 0x2e, 0xdf, 0x2b, 0x7f, 0xf5, 0xfd, 0xeb, 0xdd, 0xb4, 0x8d, 0x7f, 0x4d, -0xd6, 0xe3, 0xdf, 0x67, 0x70, 0x86, 0x55, 0x19, 0x7b, 0x77, 0x61, 0xbd, 0x3d, 0xf1, 0xdc, 0x73, -0xd6, 0xb2, 0xc5, 0x53, 0xe6, 0x5c, 0xe8, 0xd3, 0x03, 0x55, 0xd2, 0x97, 0xb2, 0x96, 0xcf, 0x63, -0xc2, 0xbc, 0x77, 0xe2, 0x4f, 0xb7, 0xea, 0x37, 0x08, 0x92, 0x2b, 0x41, 0x6e, 0xcd, 0x0c, 0x66, -0x36, 0xca, 0xb2, 0x83, 0xd7, 0x3e, 0xfd, 0x7f, 0x1a, 0xf2, 0x2b, 0xbb, 0x92, 0xec, 0xc7, 0x35, -0xd1, 0x1f, 0x72, 0x9a, 0x4b, 0xb1, 0x8f, 0xc7, 0x52, 0x52, 0xee, 0xcc, 0x09, 0xe5, 0xce, 0x4e, -0x6b, 0x1e, 0x77, 0xeb, 0x58, 0x4d, 0x9d, 0x90, 0x5d, 0x4c, 0x89, 0x9b, 0x39, 0xe7, 0xa5, 0x65, -0xce, 0xd9, 0xc0, 0xfe, 0xf1, 0xae, 0x69, 0x35, 0x73, 0xa6, 0x25, 0x59, 0x4e, 0x73, 0xfc, 0xfd, -0x2a, 0xa1, 0x7c, 0x1c, 0x37, 0xe7, 0x52, 0xf5, 0x35, 0x8b, 0x22, 0x63, 0xdf, 0x3d, 0x2a, 0xbb, -0xfa, 0xff, 0x00, 0x33, 0x50, 0xee, 0xcb, 0xd1, 0x15, 0xd7, 0x95, 0xdd, 0xce, 0x5b, 0x9f, 0x5a, -0x46, 0xe3, 0xff, 0x00, 0xaf, 0xda, 0x93, 0xf2, 0x2f, 0x47, 0xb1, 0x5e, 0x41, 0xc1, 0xf7, 0x1d, -0xab, 0x0e, 0x55, 0x3e, 0x63, 0xe4, 0x63, 0x9e, 0xf5, 0x09, 0xdf, 0x43, 0x47, 0x63, 0xf6, 0x76, -0xb3, 0x35, 0x4d, 0x4e, 0x1d, 0x3a, 0x06, 0x77, 0x60, 0x65, 0x61, 0xf2, 0x27, 0xaf, 0xbd, 0x36, -0xcc, 0x0f, 0x1d, 0xd5, 0xf5, 0xb7, 0xb9, 0x91, 0xd9, 0x9c, 0x92, 0x49, 0xe7, 0x35, 0xc5, 0xdd, -0x5e, 0x13, 0xb8, 0xee, 0xcd, 0x38, 0xa1, 0xdb, 0x53, 0x0e, 0x6b, 0x82, 0x73, 0xc9, 0xac, 0xb9, -0x66, 0xce, 0x49, 0x26, 0xa8, 0x1f, 0x99, 0x46, 0x49, 0x0f, 0x27, 0xf5, 0xaa, 0x8e, 0xf9, 0xcf, -0x5a, 0x2e, 0x22, 0xab, 0xbf, 0x3d, 0x6a, 0xbb, 0x3e, 0x73, 0xdb, 0xde, 0x90, 0x99, 0x0b, 0x3f, -0x3d, 0x79, 0xf5, 0xaa, 0xb3, 0x31, 0x62, 0x10, 0x1f, 0x99, 0x8f, 0x27, 0xd0, 0x50, 0x21, 0x72, -0x00, 0x00, 0x7d, 0x38, 0xa4, 0x27, 0xde, 0x87, 0xb8, 0x5c, 0x89, 0x93, 0x9d, 0xc8, 0x70, 0xdd, -0xfd, 0x0d, 0x22, 0xc9, 0x9e, 0x18, 0x10, 0xdd, 0xc5, 0x51, 0x0f, 0x42, 0x41, 0x9a, 0x93, 0xaf, -0x34, 0xc9, 0x17, 0x1d, 0xe9, 0x87, 0xe6, 0x70, 0xb9, 0xe0, 0x72, 0x6a, 0x93, 0xe8, 0x43, 0xbf, -0x52, 0x6d, 0xd8, 0x34, 0x6e, 0xe6, 0xad, 0x10, 0xd5, 0xc7, 0x89, 0x31, 0xd6, 0xac, 0x2d, 0xc6, -0x0e, 0x73, 0xff, 0x00, 0xd6, 0xad, 0x53, 0xd0, 0xca, 0x51, 0xea, 0x5b, 0x8e, 0xf5, 0x97, 0xa3, -0x1a, 0xd1, 0x4d, 0x6a, 0x78, 0x72, 0xd1, 0xcc, 0xe8, 0xd8, 0xc6, 0xe5, 0x38, 0xad, 0xa3, 0x36, -0x73, 0xce, 0x17, 0x28, 0x4b, 0xa8, 0xb4, 0x84, 0xef, 0x63, 0x93, 0xdc, 0xf7, 0xac, 0xd9, 0x67, -0xea, 0x73, 0x4e, 0x52, 0x2e, 0x11, 0x32, 0xe5, 0x97, 0x3d, 0xeb, 0x2e, 0x69, 0x3a, 0xf3, 0x93, -0x5c, 0xf2, 0x67, 0x54, 0x51, 0x99, 0x2b, 0x7a, 0x9f, 0x7a, 0xcf, 0x73, 0xb9, 0xcf, 0x39, 0xda, -0x3f, 0x2a, 0xc4, 0xdd, 0x2d, 0x6c, 0x57, 0x63, 0x93, 0x90, 0x4f, 0xe3, 0x55, 0x9f, 0x04, 0x60, -0x8c, 0xe7, 0xd6, 0xa1, 0xdf, 0xa9, 0xa2, 0x65, 0x66, 0x3b, 0x49, 0xce, 0x71, 0xd0, 0x54, 0x12, -0x9c, 0x21, 0xc6, 0x70, 0x7d, 0x69, 0x3d, 0x75, 0x45, 0x68, 0x84, 0xc1, 0x0b, 0x81, 0xd7, 0x18, -0xcf, 0xad, 0x44, 0xdd, 0x79, 0xe9, 0xd0, 0x83, 0x53, 0x6e, 0x86, 0x8b, 0x62, 0x07, 0xef, 0x59, -0xb3, 0xa1, 0x73, 0x8e, 0x84, 0x56, 0x6e, 0xe6, 0xbb, 0x9f, 0xa9, 0x47, 0xc7, 0xb1, 0x8b, 0x79, -0x16, 0x54, 0x58, 0xee, 0x40, 0xca, 0xc8, 0x80, 0x90, 0xde, 0xd8, 0xec, 0x7f, 0x4a, 0xf3, 0xdd, -0x53, 0x5f, 0xb8, 0xbe, 0x91, 0xe5, 0x9a, 0x4c, 0xb3, 0xf4, 0x03, 0x38, 0x03, 0xd2, 0xa8, 0xcb, -0x95, 0x26, 0x72, 0x97, 0x17, 0x84, 0xe4, 0xe7, 0x39, 0xf7, 0xac, 0x89, 0xae, 0x72, 0x4f, 0x35, -0x5e, 0x62, 0x7a, 0x19, 0xf2, 0x4c, 0x4f, 0x7a, 0xa4, 0xf2, 0x7b, 0xf2, 0x69, 0xef, 0xb8, 0x8a, -0xcf, 0x27, 0xe7, 0x55, 0x5d, 0xfa, 0xf5, 0xf7, 0xa1, 0xf6, 0x0b, 0x6a, 0x56, 0x76, 0xff, 0x00, -0xf5, 0xd4, 0x2c, 0xde, 0xe4, 0xd1, 0xd7, 0x52, 0x59, 0x0b, 0xbe, 0x01, 0x3e, 0x95, 0x02, 0x64, -0xe6, 0x46, 0xfb, 0xcf, 0xc7, 0xd0, 0x50, 0xc9, 0x7a, 0x21, 0xe4, 0x9c, 0xe7, 0xbd, 0x26, 0xe2, -0x73, 0xeb, 0x43, 0x62, 0xd8, 0x32, 0x4d, 0x21, 0x45, 0x6e, 0xb9, 0x3e, 0xf4, 0x6a, 0xc4, 0xf5, -0xdc, 0x06, 0xe4, 0x38, 0x6c, 0x95, 0xec, 0xd5, 0x65, 0x46, 0x79, 0xce, 0x78, 0xeb, 0x54, 0x4d, -0xee, 0x38, 0x8c, 0x02, 0x4f, 0x6a, 0x8d, 0x54, 0xe0, 0xb3, 0x0e, 0x5b, 0x9a, 0x77, 0x23, 0xcc, -0x3b, 0xf7, 0xf6, 0x34, 0xd2, 0x70, 0x7a, 0xd5, 0x21, 0x31, 0x85, 0xfd, 0xff, 0x00, 0x3a, 0x68, -0x93, 0x1d, 0xfa, 0xfe, 0x95, 0x68, 0x96, 0x83, 0xcf, 0x3e, 0xb9, 0xa6, 0xb5, 0xcf, 0x21, 0x7f, -0x13, 0x57, 0x7e, 0xc4, 0x5a, 0xe0, 0xf3, 0x67, 0x20, 0x9f, 0xfe, 0xb5, 0x54, 0x7b, 0x82, 0xbc, -0x13, 0x91, 0xd9, 0xa9, 0xde, 0xe0, 0xa2, 0x57, 0x92, 0x5c, 0xf7, 0xce, 0x6b, 0x3e, 0x57, 0xce, -0x6b, 0x27, 0x23, 0x58, 0xc7, 0x52, 0x8c, 0x8f, 0xd4, 0xf3, 0x54, 0x19, 0xba, 0x9e, 0x7e, 0x63, -0xde, 0xa1, 0xbe, 0x86, 0xa9, 0x58, 0x89, 0xc9, 0xcf, 0xe9, 0x50, 0x39, 0xeb, 0xcf, 0xe3, 0x52, -0xcd, 0x56, 0xc4, 0x0d, 0x83, 0x9e, 0x7b, 0x75, 0x35, 0x52, 0x4e, 0x0a, 0x8e, 0xab, 0x9c, 0xf4, -0xe6, 0xa7, 0x71, 0xab, 0x6e, 0x38, 0x9c, 0xe4, 0x83, 0x9e, 0x3a, 0xd4, 0x6d, 0x9e, 0x87, 0x38, -0xa8, 0xbd, 0xf5, 0x34, 0x57, 0xe8, 0x57, 0x72, 0x48, 0x23, 0x93, 0xc7, 0x5a, 0xa2, 0xc7, 0x2c, -0xe4, 0xf6, 0xe3, 0x9a, 0x93, 0x4b, 0x9f, 0x68, 0xcb, 0x7a, 0x65, 0x27, 0xe7, 0x20, 0x0e, 0xf5, -0x9f, 0x25, 0xdc, 0xa9, 0x9e, 0x77, 0x2f, 0x7c, 0x9a, 0xd1, 0x12, 0xd1, 0x51, 0xae, 0x83, 0xe7, -0x9e, 0x7b, 0x8c, 0xd5, 0x69, 0x26, 0x3c, 0xd3, 0xb1, 0x2f, 0xcc, 0xaa, 0xd2, 0xfb, 0xd5, 0x56, -0x7c, 0xf7, 0x39, 0xa7, 0xea, 0x4b, 0xd4, 0x81, 0x9f, 0xd7, 0xad, 0x57, 0x67, 0x3e, 0xb4, 0xb7, -0x13, 0xdc, 0x80, 0xb7, 0x7f, 0x5a, 0x85, 0x8f, 0x7a, 0x42, 0x68, 0xae, 0xe4, 0xbb, 0x04, 0x19, -0x23, 0xab, 0x53, 0xb3, 0xd7, 0xaf, 0xd6, 0x99, 0x2c, 0x4d, 0xd9, 0xa5, 0xfa, 0xd2, 0x13, 0x62, -0x83, 0xef, 0x9a, 0x95, 0x47, 0xb6, 0x78, 0xaa, 0x25, 0xea, 0x4c, 0xa9, 0xbb, 0x8c, 0x54, 0xab, -0x03, 0x29, 0xca, 0x02, 0x72, 0x79, 0x5a, 0x68, 0x96, 0x59, 0x36, 0xec, 0xe1, 0x70, 0xa7, 0x9f, -0xbd, 0x91, 0x4c, 0x92, 0x26, 0x5f, 0xc3, 0xda, 0x9e, 0xa4, 0x15, 0x59, 0x4f, 0xbd, 0x56, 0x7f, -0xf2, 0x69, 0x81, 0x03, 0x1a, 0x85, 0x9b, 0xad, 0x34, 0xc5, 0xa1, 0x0b, 0x3d, 0x40, 0x25, 0xc9, -0x63, 0xf8, 0x03, 0x42, 0x76, 0x13, 0xd5, 0x01, 0x96, 0xa2, 0x79, 0x3a, 0xe4, 0xe6, 0xa9, 0xc8, -0x76, 0x45, 0x39, 0x24, 0x65, 0xe4, 0x65, 0x87, 0x70, 0x6a, 0xbb, 0x48, 0x1b, 0x27, 0x3d, 0x7d, -0xea, 0x5b, 0x2d, 0x27, 0x6b, 0x14, 0xe5, 0x73, 0xb4, 0xe3, 0xa9, 0xe0, 0x55, 0x66, 0xfd, 0x47, -0x7a, 0x4f, 0xba, 0x34, 0x48, 0x85, 0xc9, 0xcf, 0x5f, 0xce, 0xa2, 0x6e, 0x87, 0xfa, 0x54, 0x3b, -0x17, 0xa9, 0x13, 0x1f, 0x5c, 0xd5, 0x62, 0x73, 0x21, 0xee, 0x14, 0x60, 0x9a, 0x96, 0xca, 0x49, -0x11, 0xb6, 0x50, 0x92, 0x32, 0x41, 0xea, 0x29, 0xa5, 0xb7, 0x72, 0x0e, 0x45, 0x43, 0x35, 0xbf, -0x62, 0xb3, 0x9e, 0xa3, 0x26, 0xa9, 0x93, 0xd7, 0x9e, 0xa4, 0xfd, 0x6a, 0x5e, 0xae, 0xe5, 0xdf, -0xb1, 0xf5, 0xab, 0x4d, 0x81, 0x80, 0x4d, 0x57, 0x79, 0xbd, 0xeb, 0x45, 0xd8, 0x4c, 0xa3, 0x29, -0xce, 0x4a, 0x92, 0x1b, 0xd6, 0xab, 0x1b, 0x96, 0x52, 0x56, 0x4c, 0xe7, 0x3f, 0x7a, 0xaf, 0x73, -0x31, 0x0c, 0xa1, 0xb9, 0x1c, 0xfe, 0x35, 0x0b, 0x48, 0x72, 0x79, 0xa4, 0xad, 0xd0, 0x19, 0x0b, -0x3f, 0x7e, 0xf5, 0x0b, 0x3f, 0xa9, 0xfa, 0xe6, 0x8d, 0x5e, 0x84, 0xb6, 0x42, 0x4f, 0x27, 0x9a, -0x89, 0xdf, 0x6a, 0x93, 0xd7, 0x1d, 0x05, 0x02, 0x64, 0x48, 0x30, 0x0b, 0x31, 0xe5, 0xb9, 0x39, -0xa7, 0x67, 0xf3, 0xa1, 0xe8, 0x4b, 0xde, 0xc1, 0x4a, 0x0e, 0x7f, 0xc6, 0x97, 0x52, 0x1f, 0x72, -0x45, 0xeb, 0xd2, 0xad, 0x22, 0xf7, 0xaa, 0x13, 0xec, 0x5d, 0x8d, 0x33, 0xcf, 0x3f, 0x5a, 0xde, -0xd3, 0xf4, 0xf7, 0xb9, 0x91, 0x54, 0x2e, 0x49, 0x38, 0xa6, 0xd9, 0x2c, 0xf7, 0x1d, 0x23, 0xe1, -0x7c, 0x57, 0x5a, 0x3b, 0x5c, 0x5c, 0x4a, 0x60, 0xbf, 0x9d, 0x77, 0x5b, 0x8e, 0xa9, 0x8c, 0x7f, -0x10, 0xeb, 0xcf, 0xb7, 0x4f, 0x7a, 0xf2, 0x8d, 0x73, 0xc3, 0x57, 0x7a, 0x65, 0xdc, 0xd6, 0xb3, -0xc2, 0xc9, 0x2c, 0x5d, 0x53, 0xae, 0x47, 0xa8, 0x3d, 0xc5, 0x42, 0x6c, 0x4f, 0x45, 0x73, 0x8e, -0xb8, 0xb7, 0x29, 0x90, 0x45, 0x65, 0x49, 0x19, 0xe6, 0xb4, 0x5b, 0x12, 0xd9, 0x46, 0x40, 0x72, -0x4d, 0x54, 0x73, 0x8c, 0xd0, 0xd8, 0xca, 0x92, 0x39, 0x00, 0xf5, 0xc9, 0xe9, 0x50, 0x67, 0x03, -0x19, 0xe9, 0x45, 0xc7, 0xe6, 0xc6, 0x33, 0x9f, 0x5a, 0x8c, 0xbf, 0xbd, 0x3b, 0x8c, 0x81, 0xdb, -0xa9, 0xcd, 0x53, 0x7d, 0xc0, 0xee, 0x43, 0x86, 0x1d, 0xbd, 0x6a, 0x4b, 0x4b, 0xb1, 0x51, 0xe4, -0x2e, 0xea, 0x3d, 0x39, 0x20, 0xd3, 0x58, 0x9e, 0x7f, 0x9d, 0x12, 0xb9, 0x48, 0x84, 0x92, 0x79, -0x27, 0xb5, 0x46, 0x4e, 0x41, 0xef, 0x53, 0xb6, 0x86, 0x8b, 0x5d, 0x48, 0x89, 0xea, 0x79, 0xeb, -0x50, 0x83, 0x9d, 0xcc, 0x7b, 0x9c, 0x8a, 0x9d, 0xd1, 0x49, 0x6a, 0x46, 0xe4, 0xfd, 0x01, 0xf6, -0xaa, 0xaf, 0x90, 0x4b, 0x0f, 0xc4, 0x7a, 0xd4, 0x5d, 0x96, 0xfb, 0x10, 0x34, 0x81, 0x95, 0x8e, -0x39, 0xc7, 0x39, 0xaa, 0xa4, 0x90, 0x06, 0x7b, 0xf3, 0xd6, 0x95, 0xca, 0xb2, 0x7a, 0x9f, 0x53, -0x99, 0x7d, 0xea, 0xbb, 0xc9, 0xeb, 0xcd, 0x68, 0x98, 0x32, 0x13, 0x21, 0xe7, 0x93, 0xcd, 0x41, -0x23, 0x06, 0x04, 0x11, 0x9c, 0xf5, 0xaa, 0xb9, 0x2f, 0x56, 0x52, 0x70, 0xd1, 0x92, 0xc8, 0xdb, -0x94, 0xf5, 0x14, 0xd1, 0x38, 0x7e, 0x0f, 0xca, 0xc3, 0xb1, 0xa7, 0xae, 0xe4, 0x3e, 0xc2, 0x16, -0xc8, 0xe4, 0xd3, 0x0b, 0x7e, 0x94, 0x74, 0x13, 0xee, 0xc8, 0x99, 0xaa, 0x0c, 0x97, 0x7f, 0x55, -0x4f, 0xd4, 0xd2, 0x13, 0x63, 0xc9, 0xfa, 0xfe, 0x74, 0x64, 0xf3, 0x47, 0x52, 0x5e, 0xa2, 0xe7, -0x3c, 0x77, 0xa5, 0x1f, 0xce, 0x86, 0x4b, 0xd4, 0x99, 0x79, 0xf5, 0xe6, 0xaf, 0x44, 0xb9, 0x23, -0x9a, 0x64, 0x49, 0x1b, 0x36, 0xb0, 0x96, 0x23, 0x03, 0xad, 0x7b, 0x4f, 0x80, 0xbc, 0x3f, 0xf6, -0xcb, 0xb8, 0x9a, 0x45, 0xfd, 0xd4, 0x67, 0x7b, 0x92, 0xbd, 0xb1, 0x53, 0x21, 0x3d, 0x5d, 0x8f, -0xa1, 0x40, 0x00, 0x00, 0x06, 0x00, 0x18, 0x00, 0x76, 0xac, 0xfd, 0x4b, 0x4a, 0xb0, 0xd5, 0xa0, -0xf2, 0x2f, 0xa0, 0x59, 0x94, 0x72, 0xaf, 0xd1, 0x90, 0xfa, 0x83, 0xda, 0x91, 0xa3, 0x49, 0xab, -0x33, 0xe7, 0xef, 0x19, 0xf8, 0x12, 0xe7, 0x4d, 0x73, 0x71, 0x0a, 0xb5, 0xc5, 0xa3, 0xe4, 0x8b, -0x98, 0xe3, 0xe1, 0x7d, 0x9f, 0xd0, 0xfb, 0xf4, 0x35, 0xe3, 0xf7, 0xb6, 0x32, 0x40, 0x58, 0x3a, -0x32, 0xb7, 0xfb, 0x42, 0xa9, 0x3d, 0x35, 0x30, 0x6a, 0xcf, 0x53, 0x9d, 0x9a, 0x32, 0x0b, 0x56, -0x6c, 0xa0, 0xf3, 0xef, 0x55, 0x71, 0xa3, 0x3e, 0x5e, 0x58, 0x0f, 0x4e, 0x4d, 0x42, 0xcd, 0xd6, -0x9d, 0xfa, 0x0c, 0x88, 0xb7, 0xaf, 0xe7, 0xeb, 0x50, 0xb1, 0x23, 0x9e, 0xff, 0x00, 0xca, 0x91, -0x7b, 0xea, 0x40, 0xcc, 0x4f, 0xff, 0x00, 0xae, 0xa0, 0x66, 0x39, 0xef, 0x43, 0x76, 0x1d, 0xd1, -0x4d, 0x80, 0x90, 0xb3, 0x64, 0x86, 0xcf, 0x0d, 0x51, 0x6f, 0xea, 0xad, 0xc3, 0x7f, 0x3a, 0x1e, -0x85, 0xda, 0xfa, 0x88, 0x4f, 0xaf, 0x7a, 0x8d, 0x8f, 0x1f, 0x87, 0x7a, 0x84, 0xd5, 0x8a, 0x57, -0xbe, 0xa4, 0x12, 0x1c, 0x29, 0xc1, 0xc1, 0xe8, 0x33, 0xde, 0x98, 0x78, 0x00, 0x1c, 0x9e, 0x39, -0xf7, 0xa1, 0xf9, 0x94, 0x9b, 0x4c, 0x81, 0xb9, 0xc9, 0xef, 0xe9, 0x55, 0x9d, 0xba, 0x8c, 0x9e, -0x7d, 0xfa, 0xd6, 0x4e, 0xed, 0x97, 0xb3, 0xbb, 0x29, 0x4d, 0x9c, 0x1e, 0x48, 0xc8, 0xc7, 0xd6, -0xa1, 0x2d, 0x9e, 0x0e, 0x73, 0xef, 0x4d, 0xda, 0xe3, 0xd4, 0xfa, 0x81, 0x9b, 0x3f, 0xfd, 0x7a, -0x81, 0x9f, 0xf1, 0xab, 0x1b, 0x7a, 0xe8, 0x42, 0xcf, 0xe8, 0x71, 0x50, 0xb3, 0x9f, 0x5e, 0x4d, -0x50, 0xba, 0x5d, 0x91, 0x17, 0xf5, 0x35, 0x5a, 0x45, 0x56, 0xc9, 0xee, 0x7b, 0xd2, 0x57, 0x44, -0xee, 0x57, 0xf3, 0x1e, 0x3e, 0x1f, 0x2c, 0xbd, 0x9b, 0xd2, 0x9f, 0xe6, 0x2b, 0x0c, 0x83, 0x9c, -0xd3, 0xea, 0x46, 0xe8, 0x8e, 0x49, 0x0a, 0x8f, 0x52, 0x78, 0x03, 0xbd, 0x08, 0x36, 0x8c, 0x67, -0x9e, 0xa4, 0xd1, 0xea, 0x26, 0xfa, 0x0a, 0x4f, 0xeb, 0xdf, 0xd6, 0x8c, 0xe7, 0x26, 0x9b, 0x27, -0x71, 0x47, 0xad, 0x48, 0xbc, 0xfd, 0x68, 0x25, 0x96, 0x50, 0x64, 0x8a, 0xd3, 0x81, 0x72, 0x47, -0xf3, 0xa6, 0x43, 0x3a, 0xed, 0x1e, 0xcc, 0xcd, 0x2a, 0x00, 0x33, 0xcd, 0x7d, 0x51, 0xe1, 0x1d, -0x2c, 0x69, 0xda, 0x62, 0x31, 0x5c, 0x4b, 0x71, 0xf3, 0x13, 0xed, 0xda, 0xa2, 0x5d, 0x84, 0xb5, -0x67, 0x55, 0x45, 0x23, 0x51, 0xae, 0xab, 0x22, 0xb2, 0x3a, 0xab, 0xa3, 0x8d, 0xac, 0x8e, 0x32, -0x18, 0x7a, 0x11, 0x5e, 0x45, 0xe3, 0x4f, 0x87, 0xd1, 0xdd, 0x44, 0xf7, 0x9a, 0x3d, 0xbe, 0xe2, -0xa3, 0x32, 0x59, 0x21, 0xe4, 0x7b, 0xa7, 0xaf, 0xfb, 0xbf, 0x95, 0x04, 0x4d, 0x5d, 0x5c, 0xf9, -0xc3, 0x55, 0xd2, 0x26, 0xb4, 0x2d, 0xbd, 0x18, 0x60, 0xe3, 0x90, 0x46, 0x0f, 0xa7, 0xd6, 0xb8, -0xfb, 0x94, 0x20, 0xb6, 0x78, 0xad, 0x13, 0x21, 0x6b, 0xa9, 0x8e, 0xc3, 0x25, 0x9b, 0xd4, 0xd5, -0x77, 0xf5, 0xcd, 0x36, 0x0b, 0xcc, 0x81, 0x89, 0xf7, 0x35, 0x13, 0x13, 0x9f, 0x5a, 0x46, 0x8b, -0xb1, 0x03, 0x7d, 0x3f, 0x11, 0x55, 0xdd, 0xf0, 0x09, 0x3f, 0x95, 0x17, 0x1f, 0x52, 0x0c, 0x61, -0x70, 0x79, 0xee, 0x6a, 0x37, 0x50, 0xf9, 0xcf, 0x41, 0xdf, 0xd2, 0xa6, 0x45, 0x2b, 0xee, 0x57, -0x25, 0x97, 0x86, 0xc9, 0x5e, 0xcd, 0x41, 0xce, 0x32, 0x4f, 0xe7, 0x4b, 0x76, 0x52, 0x65, 0x79, -0x4e, 0x59, 0x07, 0x5c, 0x9c, 0xd3, 0x49, 0xeb, 0xd7, 0x3e, 0xa6, 0xa5, 0xe8, 0x52, 0xb1, 0x59, -0xc9, 0xf5, 0xeb, 0x55, 0x5d, 0xb1, 0xc9, 0x3c, 0x9f, 0x5a, 0x86, 0x55, 0xfa, 0x94, 0xe5, 0x6c, -0xe3, 0x24, 0xf2, 0x7a, 0x1a, 0x86, 0x4c, 0x9c, 0x9e, 0x4e, 0x0f, 0x0d, 0xe9, 0x4e, 0xe5, 0x2b, -0xdc, 0xff, 0xff, 0xd9 -}; - -static unsigned int PIC_LEN_1 = 11508; - - SDRAM_DATA_SECTION static const unsigned char PIC_320x240_2[] = { -0xff, 0xd8, 0xff, 0xdb, 0x00, 0x43, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, -0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0a, 0x06, 0x06, 0x04, 0x04, 0x06, 0x0c, 0x08, 0x08, 0x06, -0x0a, 0x0e, 0x0c, 0x0e, 0x0e, 0x0e, 0x0c, 0x0e, 0x0c, 0x10, 0x12, 0x16, 0x12, 0x10, 0x10, 0x14, -0x10, 0x0c, 0x0e, 0x14, 0x1a, 0x14, 0x14, 0x16, 0x18, 0x18, 0x1a, 0x18, 0x0e, 0x12, 0x1c, 0x1e, -0x1c, 0x18, 0x1e, 0x16, 0x18, 0x18, 0x18, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x04, 0x04, 0x04, 0x06, -0x04, 0x06, 0x0a, 0x06, 0x06, 0x0a, 0x18, 0x10, 0x0e, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, -0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xc0, 0x00, 0x11, -0x08, 0x00, 0xf0, 0x01, 0x40, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, -0xc4, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, -0xff, 0xc4, 0x00, 0xb5, 0x10, 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, -0x04, 0x00, 0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, -0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, -0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, -0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, -0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, -0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, -0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, -0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, -0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, -0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, -0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xc4, 0x00, 0x1f, 0x01, 0x00, 0x03, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, -0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x11, 0x00, 0x02, 0x01, -0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 0x01, 0x02, -0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, -0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, -0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, -0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, -0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, -0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, -0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, -0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, -0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, -0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, -0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xf3, 0xc8, 0x9b, -0x7a, 0x29, 0x07, 0x24, 0xd5, 0x80, 0x3d, 0x6b, 0x04, 0x77, 0x31, 0xe0, 0x1f, 0xad, 0x58, 0x5f, -0x4a, 0xb5, 0xae, 0xe4, 0x48, 0x9d, 0x7f, 0xce, 0x6a, 0xca, 0x7e, 0xa6, 0xb4, 0x4c, 0xc5, 0x97, -0x22, 0x6c, 0x1e, 0xf5, 0xab, 0x6f, 0x2e, 0xd2, 0x3e, 0xb5, 0xb4, 0x1b, 0x39, 0xe7, 0xaa, 0x3d, -0x57, 0xc0, 0x1e, 0x2e, 0x8b, 0x40, 0xd4, 0xc7, 0xda, 0xf7, 0x1b, 0x1b, 0xb4, 0x31, 0xc9, 0xb7, -0x19, 0x4e, 0x41, 0x0d, 0xf8, 0x1f, 0xd0, 0x9a, 0xf5, 0x2d, 0x7f, 0xe2, 0x86, 0x9b, 0x6a, 0xb2, -0xc1, 0xa3, 0xee, 0xba, 0x9b, 0xa0, 0xbc, 0x71, 0x88, 0xd7, 0xdc, 0x03, 0xc9, 0xfc, 0x70, 0x3e, -0xb5, 0x6e, 0x1e, 0xd2, 0x57, 0x39, 0xfd, 0xa3, 0xa7, 0x16, 0x96, 0xe7, 0xce, 0xde, 0x21, 0xf1, -0x8c, 0xb7, 0x57, 0x13, 0xcd, 0x34, 0xcd, 0x73, 0x75, 0x2b, 0x16, 0x66, 0x24, 0x60, 0x1f, 0x7f, -0xf0, 0xaf, 0x33, 0xd4, 0x35, 0x09, 0xae, 0xdc, 0xbc, 0xaf, 0xb9, 0xbb, 0x03, 0xdb, 0xf0, 0xae, -0x95, 0x15, 0x6b, 0x9c, 0xba, 0xb7, 0x66, 0x61, 0x48, 0xdb, 0x8e, 0x07, 0x5e, 0xe6, 0xa9, 0xb2, -0xa8, 0x18, 0x00, 0x12, 0x78, 0xcf, 0xa5, 0x44, 0xb7, 0x36, 0x87, 0x91, 0x5c, 0xc7, 0xce, 0x48, -0xe7, 0xd6, 0x8f, 0x2b, 0x24, 0x9c, 0x7e, 0x39, 0xac, 0xdf, 0x73, 0xa2, 0xf7, 0xd0, 0x92, 0x34, -0x78, 0xdd, 0x64, 0x4c, 0x86, 0x53, 0x90, 0x6b, 0xb8, 0xb5, 0x90, 0x4f, 0x1a, 0x4e, 0xbf, 0x75, -0xf8, 0x71, 0xfd, 0xd3, 0x58, 0xcd, 0x76, 0x2e, 0x32, 0xbe, 0xe5, 0xff, 0x00, 0x2b, 0xf5, 0xe9, -0x4d, 0x31, 0x1e, 0x4f, 0x27, 0xde, 0xb1, 0x77, 0x66, 0xb7, 0x20, 0x68, 0xb9, 0xf5, 0xa8, 0x5a, -0x3e, 0xa7, 0x14, 0xd7, 0x61, 0x5f, 0x4d, 0x4a, 0xec, 0x9d, 0xea, 0xac, 0x85, 0x53, 0xaf, 0x5e, -0xc0, 0x75, 0xa7, 0xe8, 0x27, 0xdc, 0xaa, 0xd1, 0xbc, 0xb9, 0x2f, 0xf2, 0xaf, 0xf7, 0x7b, 0xd2, -0x6c, 0x54, 0xe0, 0x00, 0x05, 0x17, 0x0b, 0xf5, 0x18, 0xcb, 0x54, 0xe5, 0x5d, 0x8d, 0xe6, 0x63, -0x23, 0xa1, 0xa7, 0x7d, 0x4a, 0x42, 0x91, 0x90, 0x4f, 0x5c, 0xf3, 0x4d, 0x20, 0x67, 0xbd, 0x24, -0xc7, 0x7b, 0xe8, 0x37, 0x03, 0x9f, 0xad, 0x03, 0x83, 0xdf, 0xeb, 0x4d, 0x6c, 0x3b, 0xdf, 0x71, -0x7f, 0x5c, 0xd4, 0x8a, 0x45, 0x1d, 0x0a, 0xdf, 0x42, 0x75, 0x6c, 0x9e, 0xdf, 0x8d, 0x59, 0x49, -0x39, 0xf5, 0xe2, 0xa5, 0xbb, 0x8e, 0xd6, 0x2f, 0xc5, 0x36, 0xd3, 0xe9, 0x5b, 0x76, 0x97, 0xbe, -0x5b, 0x0e, 0x4f, 0x3d, 0xea, 0x65, 0xb0, 0x26, 0xcf, 0x5f, 0xf0, 0x3f, 0x8e, 0x4e, 0x89, 0x7b, -0x11, 0x99, 0x9e, 0x4b, 0x49, 0x4e, 0xc9, 0xa2, 0x5c, 0x64, 0x8f, 0x5f, 0xa8, 0xaf, 0xa8, 0x22, -0xd5, 0xb4, 0xe9, 0xb4, 0xe1, 0xab, 0x25, 0xe4, 0x3f, 0xd9, 0xfe, 0x5f, 0x9a, 0x6e, 0x99, 0x80, -0x55, 0x5c, 0x73, 0x9f, 0x42, 0x3d, 0x28, 0x86, 0xa8, 0xce, 0xa6, 0x8f, 0x53, 0xf2, 0xeb, 0x4b, -0x9c, 0x02, 0x60, 0x2c, 0xcc, 0xa0, 0x7c, 0x8c, 0xdc, 0xe5, 0x7b, 0x7e, 0x5d, 0x2b, 0x7c, 0x03, -0xd6, 0xa4, 0xeb, 0x6e, 0xee, 0xe4, 0xca, 0x3f, 0x3a, 0x95, 0x7e, 0xb4, 0xef, 0x72, 0x24, 0xc9, -0xd7, 0xfc, 0xf3, 0x53, 0x2e, 0x7b, 0x9e, 0xb5, 0x69, 0x19, 0x3d, 0x4b, 0x68, 0x79, 0xe6, 0xac, -0x09, 0x82, 0x63, 0x27, 0x93, 0xd0, 0x7a, 0xd6, 0xa8, 0xc5, 0xea, 0x5a, 0x8e, 0x59, 0x1b, 0x92, -0x76, 0xe3, 0xa0, 0xaa, 0x7a, 0xa5, 0xdd, 0xcf, 0xd9, 0x37, 0xc2, 0xe5, 0x51, 0x4e, 0x24, 0x1d, -0x09, 0x15, 0xb4, 0x64, 0xae, 0x73, 0x54, 0x8b, 0x69, 0x9c, 0x83, 0x4e, 0x58, 0x93, 0x92, 0x7f, -0x1a, 0x89, 0x9b, 0x20, 0x92, 0x78, 0xf7, 0xef, 0x5b, 0xb6, 0xac, 0x73, 0xa4, 0x57, 0x61, 0x93, -0xfe, 0xcd, 0x33, 0x61, 0xf7, 0x35, 0x93, 0xee, 0x6c, 0x90, 0xe1, 0x16, 0x4f, 0x4e, 0x6a, 0x51, -0x01, 0xe3, 0x8e, 0xb5, 0x2c, 0xb5, 0xa9, 0x32, 0xdb, 0x93, 0x8e, 0x0e, 0x6b, 0x63, 0x4c, 0x3e, -0x4c, 0xbe, 0x53, 0xff, 0x00, 0xaa, 0x98, 0xe0, 0xfb, 0x1e, 0xc6, 0xb2, 0x68, 0xd7, 0xd4, 0xea, -0x63, 0x83, 0xaa, 0x91, 0xd3, 0xa5, 0x39, 0xad, 0xcf, 0x3e, 0xf5, 0x9b, 0x2e, 0xe4, 0x0f, 0x01, -0xeb, 0x8a, 0xa7, 0x2c, 0x58, 0x04, 0x9c, 0x7d, 0x4d, 0x16, 0x15, 0xcc, 0xe7, 0x0e, 0xc4, 0xec, -0x1c, 0x7f, 0x7c, 0xd5, 0x7f, 0x20, 0x29, 0x24, 0xe5, 0x89, 0xea, 0x4d, 0x3b, 0x05, 0xef, 0xa8, -0xc6, 0x4f, 0xd7, 0xbd, 0x40, 0xeb, 0xcf, 0x4a, 0x5e, 0x61, 0xb9, 0x5d, 0x94, 0xd4, 0x2e, 0xb9, -0xce, 0x79, 0xfe, 0xb4, 0x21, 0x95, 0x17, 0x2a, 0xc5, 0x09, 0xcf, 0x70, 0x7b, 0xd3, 0x8f, 0x71, -0xd7, 0xeb, 0x4d, 0x0d, 0x31, 0x84, 0x7a, 0xf7, 0xa6, 0x9e, 0xbf, 0xd6, 0x93, 0x2e, 0xe2, 0x67, -0x3d, 0x4d, 0x38, 0x9c, 0x1c, 0xfe, 0xb4, 0xb7, 0x29, 0x32, 0x40, 0xdf, 0x5c, 0xd4, 0xca, 0xe4, -0x77, 0xed, 0x46, 0xc3, 0x5a, 0x92, 0x89, 0x39, 0xce, 0x6a, 0xd2, 0x5c, 0x11, 0xd0, 0x9f, 0xc6, -0xa4, 0xa2, 0x71, 0xa8, 0x34, 0x7d, 0x18, 0xe7, 0xd2, 0x9d, 0x2e, 0xbd, 0x7c, 0xf0, 0x1b, 0x36, -0xb9, 0x94, 0x5b, 0x93, 0xbf, 0xc8, 0x0c, 0x76, 0x93, 0xd3, 0x38, 0xf5, 0xa9, 0x4e, 0xd7, 0x13, -0x8a, 0x7b, 0x9c, 0x6c, 0x44, 0x95, 0x46, 0x85, 0x09, 0x28, 0x4b, 0x61, 0xb8, 0x3e, 0xe2, 0xba, -0x4b, 0x79, 0x04, 0xa8, 0x18, 0x1c, 0xfb, 0xfa, 0xd0, 0xf4, 0x34, 0x6d, 0xb7, 0x72, 0xda, 0x8f, -0xf2, 0x6a, 0x51, 0xf9, 0xd0, 0x85, 0x2b, 0x93, 0x2f, 0xf3, 0xa9, 0x94, 0x8c, 0x64, 0xfe, 0xb5, -0xa2, 0xd4, 0xcd, 0x8e, 0x59, 0x19, 0xce, 0x23, 0x19, 0xff, 0x00, 0x6c, 0xf4, 0x15, 0x6a, 0x28, -0xf6, 0x92, 0x49, 0x2c, 0xdf, 0xde, 0x6a, 0xab, 0x99, 0x35, 0xd4, 0xb8, 0xa6, 0x99, 0x2a, 0x86, -0xca, 0xb0, 0xca, 0x4a, 0x36, 0xb0, 0x3d, 0x2a, 0x93, 0xb2, 0x32, 0x96, 0xba, 0x9c, 0x55, 0xdc, -0x0d, 0x6b, 0x3b, 0xc4, 0xc1, 0x8f, 0x39, 0x56, 0xf5, 0x1e, 0xb5, 0x57, 0x39, 0xeb, 0xce, 0x7b, -0x9a, 0xe9, 0xbf, 0x32, 0xb9, 0xce, 0xd5, 0x99, 0x20, 0x5c, 0xd4, 0xcb, 0x11, 0x3c, 0xe3, 0xf1, -0xa9, 0x6f, 0x41, 0xa4, 0xcb, 0x29, 0x01, 0x3e, 0xbf, 0x5a, 0xb8, 0x96, 0xa4, 0xf2, 0x47, 0xe9, -0x50, 0xdb, 0x35, 0x8a, 0xee, 0x5a, 0x4b, 0x42, 0x7b, 0x1f, 0xca, 0xac, 0xa5, 0x91, 0xe0, 0x80, -0x73, 0xf4, 0xa5, 0xb8, 0xef, 0x73, 0xaa, 0xb2, 0x89, 0xa6, 0x88, 0x12, 0x3f, 0x7b, 0x17, 0x0d, -0xee, 0x3d, 0x6b, 0x40, 0xda, 0x1c, 0x67, 0x1e, 0xfd, 0x2a, 0x1a, 0x29, 0x14, 0x66, 0x87, 0x19, -0x0a, 0x0b, 0x37, 0xa0, 0x15, 0x9b, 0x2d, 0xa1, 0x6c, 0x99, 0x32, 0x7d, 0x07, 0x61, 0x49, 0xea, -0x2b, 0x94, 0x65, 0x87, 0x1c, 0x62, 0xa8, 0xc9, 0x1f, 0x27, 0x22, 0x96, 0xe3, 0x45, 0x57, 0x4e, -0xb5, 0x55, 0xd6, 0x81, 0xee, 0x57, 0x70, 0x6a, 0xbb, 0x0e, 0xbf, 0xd6, 0x92, 0xd4, 0x6d, 0x95, -0x66, 0x42, 0x46, 0xe1, 0xf7, 0x97, 0x91, 0x51, 0xa9, 0x0c, 0x01, 0xee, 0x7d, 0x69, 0x85, 0xc4, -0x3e, 0xff, 0x00, 0x95, 0x46, 0x7a, 0xd2, 0xd8, 0xa4, 0xdb, 0x57, 0x1b, 0xd7, 0x34, 0x99, 0x3d, -0xff, 0x00, 0x0c, 0xd2, 0x66, 0x88, 0x5d, 0xdc, 0x9c, 0xf7, 0xa7, 0x6f, 0xc6, 0x39, 0xcf, 0x3e, -0xb4, 0x3b, 0x6e, 0x55, 0x85, 0x33, 0x05, 0xe4, 0x9f, 0xd6, 0x9a, 0x26, 0x91, 0xcf, 0x04, 0xaa, -0x9f, 0xe2, 0xa4, 0xc6, 0x96, 0xa4, 0x81, 0x80, 0xe7, 0x24, 0xf7, 0x24, 0xd4, 0x53, 0x3e, 0x41, -0xc1, 0xf9, 0x87, 0x3d, 0x6a, 0x6d, 0xd4, 0xad, 0xde, 0xa4, 0x36, 0x88, 0x44, 0x82, 0x05, 0x91, -0x5d, 0x66, 0xdc, 0xc9, 0xcf, 0x2a, 0x7b, 0xf3, 0xdf, 0xbd, 0x68, 0xdb, 0x37, 0x93, 0x2b, 0x47, -0xbb, 0x23, 0xaf, 0x1d, 0xbd, 0x47, 0xf9, 0xf5, 0xa6, 0xf4, 0x08, 0xbb, 0xde, 0xe6, 0xc8, 0xe7, -0x07, 0xd6, 0xa4, 0x19, 0xff, 0x00, 0xeb, 0x54, 0xf4, 0x13, 0x43, 0x8b, 0xaa, 0xf0, 0x72, 0x49, -0xe8, 0x07, 0x53, 0x52, 0x24, 0x6d, 0x21, 0x06, 0x4f, 0xbb, 0xfd, 0xc1, 0x57, 0xb1, 0x0f, 0x52, -0xea, 0x00, 0x38, 0x03, 0x18, 0xa9, 0xd7, 0x3e, 0xf5, 0x57, 0x21, 0xdc, 0x95, 0x6a, 0x6d, 0xbb, -0xc1, 0x07, 0xbd, 0x34, 0x64, 0xfc, 0x8c, 0x8d, 0x52, 0xcc, 0xdc, 0x40, 0x5c, 0x7f, 0xae, 0xb6, -0xe7, 0xea, 0x3b, 0xd7, 0x2e, 0x88, 0x49, 0xfa, 0xd6, 0xd0, 0x66, 0x33, 0x5d, 0x0b, 0x91, 0xc5, -0x93, 0xeb, 0x9f, 0x5a, 0xd0, 0x8e, 0xdc, 0x9e, 0xd5, 0x57, 0x05, 0xa9, 0xa7, 0x15, 0xb7, 0xa0, -0xc9, 0xf5, 0xad, 0x38, 0xac, 0x89, 0xc6, 0x46, 0x6a, 0x5f, 0x72, 0xbc, 0x91, 0xa5, 0x16, 0x9e, -0x58, 0xf4, 0xeb, 0x5a, 0x70, 0xe9, 0x4c, 0x7a, 0x26, 0x73, 0x49, 0xea, 0x17, 0xb1, 0xd4, 0xe9, -0x9e, 0x1b, 0xba, 0x67, 0x59, 0x02, 0x6d, 0x56, 0xec, 0x41, 0xf9, 0xbf, 0x0a, 0xd8, 0xba, 0xf0, -0xdd, 0xd4, 0x00, 0x79, 0x90, 0xbc, 0x6a, 0xdc, 0x8d, 0xc0, 0x8c, 0xd4, 0xb7, 0x71, 0xa6, 0x73, -0xd7, 0x1a, 0x6f, 0x97, 0x9c, 0x26, 0x3d, 0xeb, 0x0e, 0xe2, 0xd7, 0x6e, 0x78, 0xa5, 0xe8, 0x3b, -0xf7, 0x31, 0x67, 0x83, 0x19, 0xac, 0x99, 0xa2, 0xc6, 0x7f, 0x40, 0x6a, 0x74, 0x02, 0x84, 0x89, -0xf8, 0xd5, 0x37, 0x5e, 0xff, 0x00, 0xce, 0x9b, 0x02, 0xa3, 0xaf, 0x5a, 0xaa, 0xcb, 0xcd, 0x03, -0x20, 0x61, 0xf8, 0x9a, 0xa8, 0xc3, 0xcb, 0x72, 0x7f, 0x85, 0xf8, 0xfa, 0x54, 0xf5, 0x2b, 0x51, -0x48, 0xe4, 0xe7, 0xbf, 0x7a, 0x88, 0x8f, 0x5a, 0x65, 0x75, 0x18, 0x4e, 0x29, 0xa4, 0xd2, 0xb9, -0x7a, 0x8c, 0x2f, 0x8e, 0x4f, 0x00, 0x77, 0x3d, 0xaa, 0x23, 0x31, 0x62, 0x42, 0x73, 0xfe, 0xd1, -0x1d, 0x29, 0x6f, 0xa1, 0x69, 0x8e, 0x55, 0x19, 0x0c, 0xc7, 0x71, 0x1e, 0xbd, 0xaa, 0x4d, 0xdc, -0xf7, 0xa4, 0xdb, 0x29, 0x0a, 0x5c, 0xf7, 0xfc, 0x7d, 0xea, 0x36, 0x6e, 0xbc, 0xd4, 0xb6, 0x8b, -0x4a, 0xda, 0x33, 0xa4, 0xd5, 0x3c, 0x25, 0xab, 0xc0, 0xa6, 0x24, 0x84, 0x98, 0xa2, 0x1b, 0x96, -0xe6, 0x20, 0x4d, 0x60, 0xcd, 0x7d, 0x08, 0x7b, 0x78, 0x6d, 0xe2, 0x96, 0x5b, 0xe7, 0x03, 0xcc, -0xf9, 0x7f, 0xd5, 0xe3, 0xae, 0xe3, 0x5a, 0x4e, 0x2d, 0x1c, 0xd4, 0xea, 0x29, 0xea, 0x8d, 0xfb, -0x79, 0x43, 0x47, 0xf3, 0x10, 0xb8, 0x19, 0xe4, 0xf4, 0xa9, 0x83, 0x34, 0xa4, 0x84, 0x18, 0x5f, -0xf9, 0xe8, 0x45, 0x66, 0x6c, 0xdd, 0xf6, 0x2d, 0x45, 0x12, 0xa7, 0x23, 0x25, 0x8f, 0x56, 0x3d, -0x6a, 0xc0, 0xf5, 0xf5, 0xa6, 0x43, 0xd7, 0x52, 0x65, 0xe6, 0xa7, 0x5f, 0xc6, 0xaa, 0xe4, 0x35, -0x72, 0x60, 0x33, 0xf4, 0xab, 0x2a, 0x09, 0xe7, 0xad, 0x17, 0x33, 0x64, 0x8d, 0x19, 0xe1, 0xb9, -0x3d, 0x88, 0xae, 0x56, 0xfa, 0xc4, 0xdb, 0x5c, 0x1d, 0x83, 0xf7, 0x72, 0x9d, 0xcb, 0xfe, 0x15, -0xa4, 0x5e, 0xa4, 0x4b, 0x62, 0x48, 0x20, 0xe7, 0x91, 0xcd, 0x6c, 0xdb, 0xdb, 0x16, 0xed, 0xef, -0xd2, 0xb4, 0xb8, 0x91, 0xb7, 0x6f, 0x64, 0x49, 0x1c, 0x13, 0xf5, 0xae, 0x86, 0xd7, 0x4c, 0x66, -0xc7, 0xca, 0x7f, 0x2a, 0x4d, 0x91, 0x73, 0xad, 0xd3, 0xbc, 0x3d, 0x3d, 0xc9, 0x02, 0x38, 0x98, -0x82, 0x7e, 0xf1, 0x1c, 0x0a, 0xf4, 0xbd, 0x23, 0xc1, 0x3b, 0x76, 0xbc, 0xab, 0xb7, 0xbe, 0xf7, -0x5f, 0xe4, 0x2a, 0x66, 0xfb, 0x0f, 0x73, 0xd0, 0xac, 0xb4, 0xbb, 0x3b, 0x25, 0x51, 0x1c, 0x48, -0xd2, 0x0f, 0xf9, 0x6a, 0xc3, 0x9a, 0xb1, 0x79, 0x67, 0x0d, 0xec, 0x2d, 0x0c, 0xe8, 0x18, 0x1e, -0x87, 0x1c, 0xa9, 0xf5, 0xac, 0x9b, 0xb9, 0xaa, 0x5a, 0x1e, 0x3d, 0xaf, 0xe8, 0x2d, 0x6b, 0x23, -0x8d, 0xbc, 0x67, 0x21, 0xb1, 0xd6, 0xbc, 0xea, 0xfa, 0xcc, 0x82, 0xdc, 0x7e, 0x95, 0xa2, 0xd5, -0x19, 0xdc, 0xe6, 0x2e, 0xad, 0xf1, 0x9a, 0xc2, 0x9e, 0x23, 0xcf, 0x7a, 0x18, 0x26, 0x64, 0xcb, -0x1f, 0x35, 0x9f, 0x22, 0xe7, 0x3d, 0x73, 0x9a, 0x4f, 0x52, 0x8a, 0x52, 0x2f, 0x27, 0xaf, 0x35, -0x51, 0xc7, 0x5e, 0x69, 0x5c, 0x69, 0x95, 0x98, 0x7f, 0xfa, 0xea, 0xb4, 0x8b, 0xb8, 0x10, 0x7b, -0xf7, 0xa0, 0x68, 0xae, 0x8c, 0x4e, 0x51, 0xcf, 0xcc, 0xbf, 0xa8, 0xa4, 0x6a, 0x65, 0x6c, 0x46, -0xc7, 0x19, 0x39, 0xfc, 0xea, 0xab, 0xcb, 0xce, 0x10, 0x6f, 0x3e, 0xd5, 0x2e, 0xed, 0x9a, 0x2d, -0x08, 0xf6, 0x97, 0x39, 0x90, 0xe7, 0x1d, 0x85, 0x49, 0xd3, 0x20, 0x77, 0xf6, 0xa4, 0xca, 0x42, -0xe7, 0xd4, 0xf3, 0xf5, 0xa5, 0x04, 0xf5, 0xef, 0x4b, 0xa1, 0xa2, 0x0c, 0x9f, 0xff, 0x00, 0x55, -0x34, 0x9c, 0xf2, 0x79, 0xa9, 0xd8, 0xbd, 0xcf, 0xa4, 0xb7, 0x49, 0x19, 0xe4, 0x82, 0x3a, 0x10, -0x46, 0x73, 0x59, 0x97, 0x7a, 0x16, 0x87, 0xa8, 0x82, 0x65, 0xb6, 0xfb, 0x1d, 0xcb, 0x1c, 0xfd, -0xa6, 0xd4, 0x63, 0x3f, 0x51, 0x5d, 0xb7, 0x4f, 0x49, 0x1e, 0x3b, 0xbc, 0x5f, 0x34, 0x77, 0x39, -0x0d, 0x4b, 0xc1, 0x97, 0x7a, 0x78, 0x6b, 0x8b, 0x67, 0x4b, 0xfb, 0x50, 0x77, 0x96, 0x88, 0xe5, -0x80, 0xf5, 0x22, 0xb1, 0xd4, 0x01, 0x81, 0x8c, 0x7b, 0x57, 0x2d, 0x58, 0x3a, 0x6c, 0xed, 0xa1, -0x51, 0x54, 0x44, 0xc3, 0xf5, 0xa7, 0x8f, 0xd6, 0xb3, 0x46, 0xae, 0xfd, 0x49, 0xd7, 0xaf, 0xa9, -0xab, 0x0a, 0x39, 0xaa, 0x4c, 0x89, 0x16, 0x14, 0x7f, 0x93, 0x56, 0x90, 0x74, 0xa7, 0x76, 0x67, -0x72, 0xda, 0x26, 0x7a, 0xf3, 0xf5, 0xa6, 0x5c, 0x59, 0x7d, 0xa6, 0x16, 0x8b, 0xfe, 0x5a, 0x27, -0xcc, 0x8c, 0x4d, 0x51, 0x26, 0x55, 0xbd, 0xb1, 0xc8, 0xc8, 0xe7, 0xde, 0xba, 0x5b, 0x3b, 0x2d, -0xd8, 0xe3, 0xf1, 0xad, 0xae, 0x65, 0x73, 0xb1, 0xd3, 0xb4, 0x87, 0x95, 0x94, 0x2a, 0x16, 0x24, -0xf0, 0x00, 0xcd, 0x7a, 0x8e, 0x89, 0xe0, 0xd9, 0x24, 0xdb, 0x24, 0xea, 0x02, 0xf0, 0x70, 0x6a, -0x5c, 0x84, 0xf5, 0x67, 0xa6, 0x58, 0xe9, 0x56, 0x96, 0x28, 0xa2, 0x38, 0xd4, 0xb0, 0x1d, 0x71, -0xd2, 0xb4, 0xeb, 0x26, 0xee, 0x6d, 0x18, 0xd8, 0x28, 0xa4, 0x51, 0x97, 0xaa, 0xd8, 0x25, 0xf5, -0xb3, 0x82, 0x33, 0x22, 0x82, 0x54, 0xd7, 0x8b, 0xea, 0xfa, 0x71, 0x8d, 0xdc, 0x15, 0xe4, 0x1a, -0xb8, 0xbe, 0x86, 0x35, 0x34, 0x67, 0x05, 0x7d, 0x6c, 0x41, 0x6e, 0x38, 0xf7, 0xae, 0x62, 0xea, -0x1c, 0x13, 0x4c, 0x57, 0xd4, 0xc3, 0x9e, 0x3e, 0x49, 0xac, 0xb9, 0x14, 0xf2, 0x68, 0x28, 0xcf, -0x90, 0x55, 0x39, 0x07, 0x5a, 0x5a, 0x14, 0x9b, 0xb1, 0x51, 0x87, 0x5a, 0xae, 0xc3, 0xa9, 0xef, -0x48, 0xa5, 0xdc, 0xa7, 0x32, 0xe0, 0xf9, 0x83, 0xaa, 0xf5, 0xc7, 0x7a, 0x85, 0xe6, 0x55, 0x5c, -0x8f, 0x98, 0xb0, 0xe1, 0x45, 0x17, 0xd0, 0x64, 0x0c, 0xb2, 0x49, 0xcb, 0x1d, 0xa0, 0xf6, 0x1d, -0x69, 0x00, 0x0b, 0xc0, 0x00, 0x0a, 0x6d, 0x75, 0x46, 0x89, 0xdf, 0x71, 0x18, 0xf5, 0xa6, 0x93, -0x8a, 0x9f, 0x32, 0xc4, 0xe7, 0xd4, 0xd2, 0x67, 0x9e, 0xf9, 0x35, 0x3a, 0x6c, 0x5a, 0xbe, 0xe3, -0xb2, 0x3a, 0xe6, 0x90, 0x9c, 0x93, 0xf4, 0xa4, 0xec, 0xdd, 0x8d, 0x16, 0xba, 0x1f, 0x45, 0x45, -0xab, 0x5a, 0x5c, 0x80, 0x55, 0xd4, 0x13, 0xd8, 0xd5, 0xe0, 0xaa, 0xff, 0x00, 0x30, 0x39, 0x07, -0xa6, 0x0d, 0x6d, 0x1a, 0xca, 0x5a, 0x33, 0xcc, 0x95, 0x37, 0x1d, 0x50, 0xe4, 0xf3, 0x22, 0x6f, -0x94, 0x95, 0xcf, 0x15, 0xcd, 0xeb, 0xba, 0x48, 0xb8, 0x2d, 0x77, 0x6f, 0x18, 0x13, 0x1e, 0x64, -0x45, 0xe0, 0x1f, 0x7c, 0x55, 0xcd, 0xb9, 0x47, 0x94, 0x88, 0x49, 0x46, 0x7c, 0xcc, 0xe2, 0x88, -0x2a, 0x76, 0xb0, 0x20, 0x8e, 0xa2, 0xa4, 0x1f, 0x9e, 0x6b, 0x97, 0xa1, 0xde, 0xda, 0x64, 0xa3, -0xf5, 0x35, 0x65, 0x39, 0xa7, 0xa3, 0x21, 0x96, 0x52, 0xad, 0xc7, 0x55, 0xa9, 0x9b, 0x2f, 0x44, -0xbd, 0xeb, 0x4e, 0x28, 0xb7, 0x6d, 0x60, 0x39, 0x5e, 0x69, 0x92, 0x49, 0x26, 0x9b, 0xfb, 0xd5, -0x9a, 0x35, 0x25, 0x66, 0x3f, 0x36, 0x3b, 0x1a, 0xee, 0xb4, 0x0f, 0x0d, 0xdc, 0x5e, 0x14, 0xc4, -0x6c, 0x15, 0xbf, 0x8b, 0x1d, 0x6a, 0xf9, 0xb4, 0x32, 0x96, 0xe7, 0xb6, 0x68, 0xde, 0x1a, 0xb7, -0xb0, 0x40, 0xd2, 0x2e, 0x5f, 0xd0, 0xf2, 0x6b, 0xaa, 0x00, 0x00, 0x00, 0x18, 0x03, 0xa5, 0x43, -0x77, 0x34, 0x84, 0x6d, 0xab, 0x16, 0x8a, 0x45, 0x85, 0x14, 0x00, 0x57, 0x15, 0xe2, 0x5d, 0x30, -0x3a, 0x9b, 0x84, 0x5f, 0xbd, 0xd7, 0xd8, 0xd3, 0x4f, 0x53, 0x3a, 0x8a, 0xe8, 0xf1, 0xdd, 0x4e, -0xd7, 0x05, 0xb8, 0xae, 0x2e, 0xf6, 0x1c, 0x16, 0x35, 0x66, 0x48, 0xe7, 0x2e, 0x13, 0x93, 0xf5, -0xac, 0x59, 0x93, 0xad, 0x2d, 0xcb, 0x33, 0x65, 0x18, 0xcd, 0x52, 0x90, 0x77, 0xa5, 0x72, 0x91, -0x51, 0xc7, 0xe3, 0x54, 0xe5, 0x65, 0x5c, 0xe4, 0xf3, 0xe9, 0x49, 0x94, 0x51, 0x6f, 0x32, 0x4f, -0xf6, 0x13, 0xf5, 0x35, 0x0e, 0xdf, 0x29, 0xc7, 0x70, 0xdd, 0x18, 0xf6, 0xa7, 0x7e, 0xc5, 0x2d, -0x58, 0xe7, 0xe6, 0xa0, 0x6c, 0xe3, 0xd6, 0x93, 0xd4, 0xd1, 0x0c, 0xe4, 0xd4, 0x64, 0xfa, 0xf3, -0x4b, 0x42, 0xfc, 0xd8, 0x99, 0xe9, 0x9f, 0xff, 0x00, 0x5d, 0x2e, 0x7b, 0xd2, 0xbd, 0xcd, 0x16, -0xa1, 0x93, 0xcf, 0xaf, 0x5a, 0x50, 0x4f, 0xb7, 0xd6, 0x93, 0xd7, 0x42, 0xcf, 0x46, 0x36, 0x77, -0x51, 0x1c, 0xa9, 0x7e, 0x3b, 0x8c, 0xd5, 0xdb, 0x7d, 0x5a, 0xfe, 0xd0, 0xf2, 0x5c, 0x80, 0x79, -0x0d, 0x9a, 0x8d, 0xce, 0x79, 0x1d, 0x25, 0xa7, 0x8a, 0x21, 0x6c, 0x2d, 0xdc, 0x65, 0x49, 0xfe, -0x30, 0x7a, 0x56, 0xec, 0x17, 0xf6, 0x17, 0x67, 0x6c, 0x53, 0xc6, 0x4b, 0x7f, 0x0b, 0x11, 0x9a, -0xd2, 0x35, 0x1a, 0xd1, 0x9c, 0xd5, 0x29, 0xdf, 0x54, 0x73, 0xfa, 0xe6, 0x8f, 0x90, 0x6e, 0xad, -0x94, 0x6e, 0xea, 0xea, 0xa3, 0xad, 0x72, 0x03, 0x39, 0xe7, 0xaf, 0x4e, 0x68, 0x9e, 0x8f, 0x43, -0x4a, 0x52, 0xe6, 0x5a, 0x93, 0x2f, 0xe3, 0x9a, 0xb0, 0xb9, 0xcf, 0xd6, 0xa6, 0xf7, 0x2d, 0xf7, -0x2c, 0x21, 0xab, 0xb1, 0xf2, 0x47, 0xf3, 0xaa, 0xf2, 0x21, 0xf7, 0x34, 0x61, 0xeb, 0xde, 0xb7, -0xad, 0x07, 0x4f, 0x7a, 0x08, 0x67, 0x6f, 0xa0, 0xd8, 0x2d, 0xed, 0xd4, 0x30, 0x60, 0x30, 0x96, -0x45, 0x03, 0x70, 0xc8, 0xce, 0x6b, 0xdf, 0xf4, 0xfd, 0x3a, 0xdf, 0x4f, 0x85, 0x63, 0x89, 0x41, -0x60, 0x30, 0xd2, 0x63, 0x93, 0x55, 0x7b, 0xa2, 0x22, 0xae, 0xcd, 0x0a, 0x29, 0x1a, 0x85, 0x14, -0x00, 0x51, 0x40, 0x05, 0x43, 0x3c, 0x2b, 0x71, 0x13, 0xc6, 0xe3, 0x21, 0x87, 0x7a, 0x04, 0xd5, -0xd5, 0x8f, 0x1b, 0xd7, 0xf4, 0xf3, 0x04, 0xb2, 0x29, 0x5e, 0x87, 0xad, 0x79, 0x96, 0xa1, 0x16, -0xd2, 0xdc, 0x55, 0x5c, 0xe7, 0xf2, 0x39, 0x4b, 0xa5, 0xeb, 0x58, 0x33, 0xaf, 0x26, 0x82, 0xae, -0x65, 0x4a, 0x3f, 0xfd, 0x75, 0x9d, 0x29, 0x0b, 0xc9, 0x38, 0x1e, 0xf4, 0xac, 0x5d, 0xcc, 0xf7, -0x77, 0x7e, 0x10, 0x1c, 0x7f, 0x78, 0x8a, 0x80, 0xc6, 0x07, 0x2d, 0xf3, 0x31, 0xee, 0x69, 0x96, -0xa5, 0xa9, 0x13, 0x0a, 0xab, 0x2a, 0x87, 0x04, 0x1c, 0x67, 0xd7, 0xd2, 0x93, 0x02, 0xba, 0x9d, -0xc0, 0xab, 0x1f, 0x99, 0x7a, 0xfb, 0xd3, 0x5f, 0xad, 0x06, 0x8b, 0x62, 0x2f, 0xd6, 0x98, 0x69, -0x32, 0xd6, 0xa8, 0x69, 0xe3, 0xfc, 0x73, 0x4b, 0xcf, 0x3e, 0xfe, 0xa2, 0x93, 0x77, 0x2d, 0x0e, -0x1d, 0x79, 0xe6, 0x9c, 0x07, 0xa6, 0x79, 0xa9, 0x6d, 0x5f, 0x53, 0x4e, 0x87, 0xa1, 0x43, 0xaf, -0x38, 0xe2, 0x65, 0x0e, 0x0f, 0x5e, 0x2b, 0x52, 0x3d, 0x46, 0xc2, 0x71, 0x89, 0x17, 0x69, 0x3d, -0xcf, 0x35, 0x16, 0xd4, 0xc1, 0xdc, 0x92, 0x4b, 0x1b, 0x4b, 0x88, 0xcb, 0x41, 0x22, 0xee, 0x23, -0xd6, 0xb9, 0x4b, 0xa3, 0x75, 0xa7, 0xcf, 0x86, 0x2c, 0x9c, 0xf0, 0xcb, 0xde, 0x9a, 0x7d, 0xc9, -0x5a, 0x9d, 0xa6, 0x81, 0xe2, 0x3f, 0x3b, 0x6d, 0x9d, 0xf3, 0x16, 0x0c, 0x76, 0xac, 0xa7, 0xfa, -0xd2, 0x6b, 0x7a, 0x6f, 0xd9, 0x66, 0xfb, 0x44, 0x43, 0xf7, 0x13, 0x1c, 0x82, 0x3b, 0x1a, 0xbb, -0xf3, 0x2d, 0x48, 0x71, 0xf6, 0x73, 0xf5, 0x31, 0x54, 0xfd, 0x6a, 0x75, 0x26, 0xa4, 0xb7, 0xa9, -0x69, 0x7f, 0x5f, 0x5a, 0xb7, 0x1f, 0xd6, 0xa8, 0xcd, 0xea, 0x5f, 0x49, 0x00, 0x20, 0x72, 0x4f, -0xa0, 0xad, 0xdb, 0x2d, 0xce, 0xc0, 0xb9, 0xc0, 0xfe, 0xe8, 0xaa, 0x44, 0x49, 0xdc, 0xf4, 0xef, -0x0d, 0x48, 0x23, 0xb8, 0x85, 0xc7, 0x05, 0x1c, 0x10, 0x7d, 0x39, 0xaf, 0x7a, 0x8a, 0x41, 0x2c, -0x69, 0x22, 0x9c, 0x87, 0x19, 0xa1, 0x93, 0x0d, 0xc7, 0xd1, 0x41, 0xa8, 0x51, 0x40, 0x05, 0x14, -0x00, 0x51, 0x40, 0x1c, 0x8f, 0x8a, 0x2c, 0x04, 0xd6, 0xe6, 0xe1, 0x57, 0x90, 0x30, 0xd5, 0xe1, -0x5a, 0xb4, 0x5b, 0x59, 0xf8, 0xee, 0x69, 0xa3, 0x9a, 0x7a, 0x48, 0xe1, 0xee, 0xd7, 0x96, 0xae, -0x7a, 0xe3, 0xa9, 0xcf, 0xe7, 0x45, 0x8a, 0x46, 0x1c, 0xf2, 0xe4, 0x90, 0x9f, 0x31, 0xfe, 0x55, -0x9e, 0xf1, 0x93, 0xf3, 0x39, 0xc9, 0xf4, 0xa6, 0x55, 0xee, 0x8a, 0xef, 0xc5, 0x56, 0x72, 0x28, -0x29, 0x15, 0xdf, 0xeb, 0x55, 0x9b, 0xdc, 0xf5, 0xa4, 0xca, 0x45, 0x29, 0x72, 0xad, 0xe6, 0x2e, -0x4f, 0x63, 0xef, 0x4a, 0x4e, 0xe0, 0x18, 0x74, 0x3c, 0x8a, 0x1b, 0x2d, 0x6a, 0x46, 0x7f, 0x3a, -0x69, 0xc1, 0xfc, 0xbb, 0xd4, 0xec, 0x68, 0x98, 0xde, 0x3d, 0xfe, 0xb4, 0x7f, 0x5a, 0x2f, 0x72, -0xf4, 0x1e, 0x38, 0xa7, 0x0e, 0x4e, 0x7f, 0x3a, 0x5b, 0x95, 0x75, 0xb1, 0xbe, 0xcb, 0xb3, 0xef, -0x1c, 0x54, 0x06, 0xe9, 0x14, 0xf5, 0x26, 0x84, 0x46, 0xe3, 0xd7, 0x51, 0x91, 0x71, 0xe5, 0xb1, -0x1e, 0xf9, 0xab, 0x6f, 0x7e, 0xd7, 0x90, 0x98, 0x67, 0xc3, 0xe3, 0xee, 0xb1, 0xea, 0x2a, 0x5b, -0x05, 0x0e, 0xa5, 0x18, 0x19, 0xa2, 0x7e, 0x49, 0xe3, 0xa1, 0xaf, 0x57, 0xd0, 0x6e, 0xd3, 0x58, -0xb0, 0x7d, 0x3e, 0xe5, 0xb7, 0x4a, 0x8b, 0xc1, 0xef, 0x8e, 0xc6, 0xa6, 0x9b, 0xf7, 0xb5, 0x1e, -0x22, 0x37, 0x85, 0xd7, 0x43, 0x9d, 0xb9, 0xb6, 0x96, 0xd2, 0x77, 0x82, 0x55, 0x21, 0xd0, 0xfa, -0x75, 0xf7, 0xa4, 0x43, 0xff, 0x00, 0xeb, 0xad, 0x3a, 0xd8, 0xc2, 0xf7, 0x57, 0x2c, 0x06, 0x00, -0x65, 0x88, 0xfa, 0x9a, 0x9a, 0x37, 0x79, 0x0f, 0xc9, 0xf2, 0xaf, 0xf7, 0x8f, 0x53, 0x41, 0x2c, -0xd5, 0xb7, 0x50, 0xbd, 0x32, 0x58, 0xf5, 0x26, 0xb7, 0xed, 0x1b, 0x91, 0x9a, 0xa5, 0xb9, 0x94, -0x8e, 0xdf, 0x49, 0x9f, 0x63, 0xa1, 0xcf, 0x39, 0x1c, 0xd7, 0xba, 0xe8, 0x17, 0xa2, 0xe6, 0xd1, -0x10, 0x9f, 0x99, 0x07, 0x15, 0x4d, 0x19, 0xa9, 0x5a, 0x46, 0xfd, 0x15, 0x27, 0x48, 0x51, 0x40, -0x05, 0x14, 0x00, 0x51, 0x40, 0x10, 0x5c, 0xc2, 0xb7, 0x10, 0x4b, 0x0b, 0x74, 0x91, 0x71, 0xf4, -0xaf, 0x9d, 0xbc, 0x45, 0x17, 0x93, 0x71, 0x3c, 0x64, 0x60, 0xa3, 0x30, 0x23, 0xd3, 0x9a, 0x6b, -0x73, 0x1a, 0xbb, 0xdc, 0xf3, 0x3b, 0xe9, 0x15, 0x4b, 0x0c, 0xe4, 0xe7, 0xa0, 0xae, 0x6a, 0xe1, -0x5a, 0x42, 0x77, 0x9c, 0x29, 0xfe, 0x11, 0x55, 0xe6, 0x4a, 0x33, 0x24, 0x00, 0x64, 0x01, 0x54, -0x24, 0xf7, 0xa0, 0xa5, 0xa9, 0x4d, 0xcf, 0x7a, 0xa8, 0xff, 0x00, 0xe7, 0x34, 0x99, 0x77, 0xbe, -0xe4, 0x0d, 0xcd, 0x57, 0x61, 0xeb, 0xde, 0x9b, 0x1a, 0x2b, 0xb0, 0xe3, 0x18, 0xcd, 0x55, 0x19, -0x8d, 0x8a, 0x37, 0x43, 0xc8, 0xcd, 0x4f, 0x91, 0xa2, 0xee, 0x38, 0xf5, 0x39, 0xeb, 0x4c, 0x3e, -0xf4, 0x17, 0x11, 0x9c, 0xe7, 0xfc, 0x29, 0x79, 0xcf, 0xd7, 0xf5, 0xa9, 0xd8, 0xb1, 0xfd, 0xc5, -0x48, 0x06, 0x4d, 0x26, 0x5a, 0x76, 0x26, 0x9a, 0xe1, 0xe4, 0x39, 0x24, 0xe0, 0xd4, 0x0b, 0xf3, -0x1e, 0x73, 0x53, 0xcc, 0x5c, 0x21, 0xa1, 0x61, 0x57, 0x3d, 0x3b, 0x55, 0xb4, 0xe3, 0xbf, 0x3e, -0xb5, 0x37, 0xb9, 0x4d, 0x58, 0x95, 0xc6, 0x40, 0x71, 0xd5, 0x7f, 0x5a, 0xdb, 0xd1, 0xef, 0xde, -0xce, 0xe6, 0x29, 0xd0, 0x9f, 0x94, 0xf2, 0x33, 0xd4, 0x77, 0x15, 0x17, 0x69, 0xdc, 0x25, 0x69, -0x2b, 0x33, 0xd3, 0xf5, 0xcd, 0x3c, 0x6a, 0x36, 0x29, 0xaa, 0xdb, 0x00, 0xcd, 0x0a, 0x03, 0x20, -0x41, 0x92, 0xc9, 0xeb, 0xf8, 0x66, 0xb8, 0x2f, 0x33, 0x9d, 0xa8, 0x37, 0x1e, 0x9f, 0x4a, 0xe8, -0xdf, 0x53, 0xcf, 0x83, 0xd1, 0xa7, 0xd0, 0xb3, 0x1c, 0x79, 0x3b, 0xa4, 0x3b, 0x8f, 0xa7, 0x61, -0x5a, 0x11, 0xf0, 0x73, 0x45, 0xc6, 0xcd, 0x18, 0x8d, 0x6c, 0xdb, 0x1e, 0x9d, 0x6a, 0xa2, 0x65, -0x23, 0xa9, 0xb0, 0x97, 0x6b, 0x0e, 0x79, 0xcd, 0x7a, 0x97, 0x86, 0xf5, 0x13, 0x14, 0x89, 0xc9, -0xc1, 0xe0, 0xf3, 0x5a, 0xdb, 0x43, 0x09, 0x6e, 0x7a, 0x9a, 0xb0, 0x75, 0x0c, 0x0e, 0x41, 0x19, -0xa7, 0x56, 0x4c, 0xea, 0x4e, 0xea, 0xe1, 0x45, 0x21, 0x85, 0x14, 0x00, 0x51, 0x40, 0x19, 0xfa, -0x86, 0xa9, 0x65, 0xa6, 0x44, 0xd2, 0xdd, 0x4c, 0xaa, 0x40, 0xc8, 0x88, 0x10, 0x5d, 0xbe, 0x82, -0xbe, 0x70, 0xf1, 0x56, 0xa8, 0x97, 0xd7, 0xd7, 0x37, 0x11, 0x46, 0x60, 0x8e, 0x67, 0x27, 0x66, -0xec, 0x91, 0xef, 0x9a, 0xa4, 0x61, 0x56, 0x49, 0xb4, 0x91, 0xe7, 0x97, 0x45, 0x46, 0xe2, 0x3a, -0xfa, 0xf7, 0xac, 0x19, 0xd8, 0x92, 0x79, 0x3c, 0xd5, 0x12, 0x8c, 0xa9, 0x7b, 0xf3, 0x54, 0x24, -0xfe, 0xb4, 0x8b, 0x2a, 0x3d, 0x55, 0x71, 0xfe, 0x49, 0xa4, 0xca, 0x45, 0x76, 0xe7, 0x35, 0x03, -0x77, 0xa4, 0xca, 0xb9, 0x03, 0x8f, 0xce, 0xab, 0xc8, 0xbb, 0x94, 0x81, 0xd7, 0xa8, 0xf5, 0xa3, -0xcc, 0xd0, 0x89, 0x1b, 0x70, 0xe7, 0xef, 0x0e, 0x08, 0x34, 0x11, 0xf8, 0xd0, 0xca, 0x5a, 0x8c, -0xe8, 0x49, 0xfe, 0x74, 0xa3, 0xf3, 0x34, 0xac, 0x5a, 0x44, 0x83, 0x1f, 0x8d, 0x4c, 0xbc, 0x9a, -0x4c, 0xb5, 0xa9, 0x54, 0xb7, 0xbd, 0x3d, 0x0e, 0x4f, 0xe3, 0x58, 0x36, 0x75, 0x5a, 0xdb, 0x9a, -0x11, 0x1f, 0x6e, 0x7d, 0x6a, 0x6c, 0xf3, 0x40, 0x49, 0x5c, 0x9d, 0x1b, 0xb7, 0x5c, 0xd3, 0xe3, -0x3b, 0x1f, 0x1d, 0x8f, 0x22, 0x91, 0x1a, 0xdc, 0xf6, 0x3f, 0x00, 0xeb, 0x31, 0x97, 0x16, 0x17, -0x60, 0x4a, 0x9c, 0x90, 0x8d, 0xd1, 0xd0, 0x8c, 0x15, 0xaa, 0x1e, 0x2a, 0xf0, 0xf9, 0xf0, 0xf6, -0xad, 0x2c, 0x11, 0xaf, 0xfa, 0x0d, 0xd8, 0x17, 0x36, 0x72, 0x0e, 0x8d, 0x13, 0x72, 0x07, 0xd4, -0x74, 0xff, 0x00, 0xf5, 0xd6, 0xf1, 0x7e, 0xe9, 0xe7, 0xcd, 0x72, 0xd5, 0x6b, 0xb9, 0x82, 0xb5, -0x6d, 0x3a, 0xff, 0x00, 0x5a, 0x60, 0xfc, 0xcb, 0xd1, 0x1a, 0xd5, 0xb7, 0x6c, 0x1f, 0x5a, 0xd2, -0x3a, 0x99, 0x48, 0xdf, 0xb5, 0x93, 0x04, 0x73, 0x5d, 0xae, 0x97, 0x75, 0xb5, 0x94, 0xe7, 0x9a, -0xd5, 0x18, 0x4b, 0x73, 0xd9, 0x34, 0x3b, 0xf1, 0x73, 0x00, 0x42, 0xd9, 0x75, 0xe9, 0x9a, 0xdf, -0xac, 0x66, 0xb5, 0x36, 0xa4, 0xef, 0x1b, 0x05, 0x15, 0x26, 0xa1, 0x45, 0x00, 0x23, 0x32, 0xa0, -0x2c, 0xec, 0x15, 0x47, 0x25, 0x98, 0xf4, 0xae, 0x4b, 0x57, 0xf1, 0x3c, 0x76, 0xaa, 0xc9, 0x68, -0x43, 0x38, 0xff, 0x00, 0x96, 0xac, 0x32, 0x07, 0xd0, 0x53, 0x4a, 0xe6, 0x55, 0x6a, 0x72, 0x2d, -0x0f, 0x22, 0xd5, 0xf5, 0x79, 0x6e, 0x5d, 0xde, 0x49, 0x59, 0xdd, 0xb9, 0x2c, 0xc7, 0xad, 0x70, -0x57, 0xf3, 0x99, 0x37, 0x02, 0x7a, 0xfa, 0xd6, 0x9b, 0xad, 0x0e, 0x74, 0xf5, 0xd4, 0xe5, 0xe5, -0x94, 0x92, 0x50, 0x9e, 0x47, 0xaf, 0x7a, 0xcb, 0x98, 0xf2, 0x79, 0xe6, 0x91, 0xa9, 0x99, 0x29, -0xce, 0x7d, 0x6a, 0x93, 0xfa, 0xfa, 0xd2, 0x28, 0xa8, 0xff, 0x00, 0x9f, 0xd6, 0xaa, 0xbf, 0x7f, -0x4f, 0x7a, 0x95, 0x66, 0x59, 0x03, 0xd4, 0x0d, 0x54, 0xc0, 0x81, 0x81, 0xe7, 0xf3, 0xe6, 0xa3, -0x27, 0xaf, 0xad, 0x06, 0x89, 0xd9, 0x94, 0xe4, 0x05, 0x1b, 0xcc, 0xed, 0xfc, 0x54, 0xec, 0xe7, -0xbf, 0x5e, 0x86, 0x97, 0x91, 0x7d, 0x46, 0x9c, 0xe7, 0x9a, 0x51, 0x9e, 0xbd, 0x2a, 0x6e, 0xed, -0x73, 0x4d, 0x6f, 0xa8, 0xfc, 0x81, 0xc9, 0xe9, 0xde, 0x95, 0x5c, 0xb1, 0xc2, 0x0f, 0xf8, 0x11, -0xa5, 0xd4, 0x7b, 0xd8, 0x81, 0x94, 0x82, 0x47, 0x5a, 0x72, 0x67, 0x3c, 0xf3, 0x93, 0x5c, 0xf7, -0x3b, 0x2e, 0x5f, 0x88, 0x9a, 0xb9, 0x8c, 0x8c, 0xff, 0x00, 0x5a, 0x13, 0xd4, 0x24, 0xf4, 0x1c, -0xbc, 0x1f, 0x7a, 0x9c, 0x8d, 0xcb, 0x91, 0xd5, 0x68, 0xb9, 0x95, 0xcd, 0x6d, 0x26, 0xf9, 0xed, -0x2e, 0x61, 0xb8, 0x8c, 0xe1, 0xa3, 0x6c, 0xf5, 0xeb, 0x5f, 0x48, 0xdf, 0xda, 0xa7, 0x8d, 0x7c, -0x12, 0x25, 0xb6, 0x2a, 0xfa, 0x8e, 0x81, 0x1b, 0x5d, 0xdb, 0x80, 0x37, 0x34, 0x91, 0x11, 0xfb, -0xc8, 0xfe, 0xbc, 0x64, 0x7b, 0x81, 0x5a, 0xd3, 0x7d, 0x0e, 0x4c, 0x4a, 0xb3, 0x52, 0x3c, 0x31, -0x4d, 0x5a, 0x43, 0xcf, 0x5a, 0xd3, 0x73, 0x36, 0x5c, 0x8d, 0xba, 0x56, 0x8c, 0x2f, 0xd3, 0x9e, -0x6a, 0xd1, 0x94, 0xb5, 0x36, 0x6d, 0xe4, 0x1c, 0x57, 0x49, 0x65, 0x71, 0x86, 0x1c, 0xd6, 0xa8, -0xc5, 0xd8, 0xf4, 0x4d, 0x07, 0x53, 0x30, 0xca, 0x87, 0x77, 0x19, 0xf5, 0xaf, 0x58, 0x82, 0x65, -0x9e, 0x24, 0x91, 0x48, 0x3b, 0x86, 0x4f, 0xb5, 0x4d, 0x45, 0xa5, 0xc7, 0x49, 0xda, 0x56, 0x26, -0xa2, 0xb1, 0x3a, 0x42, 0xb2, 0xaf, 0x75, 0x7b, 0x5b, 0x40, 0x7e, 0x75, 0x91, 0xc7, 0x65, 0x3c, -0x0f, 0xc6, 0x9a, 0x57, 0x22, 0x73, 0x50, 0x57, 0x67, 0x9f, 0x6a, 0xfe, 0x23, 0x92, 0xe3, 0x23, -0x7e, 0x14, 0x74, 0x50, 0x78, 0x15, 0xc0, 0x5f, 0x6a, 0x0c, 0xe4, 0x92, 0xd9, 0xf7, 0xcd, 0x6a, -0x95, 0x8e, 0x46, 0xdc, 0x9d, 0xd9, 0xcb, 0x5d, 0xdd, 0x67, 0x3c, 0xe6, 0xb9, 0xf9, 0xe6, 0xc9, -0x3e, 0xf4, 0x99, 0x51, 0x46, 0x1d, 0xd1, 0xc1, 0xde, 0x39, 0x23, 0xad, 0x67, 0xc8, 0xdb, 0xbe, -0x61, 0x4b, 0xcc, 0xd3, 0xa9, 0x4a, 0x43, 0xf5, 0xaa, 0x4f, 0xce, 0x4e, 0x73, 0x4a, 0xe5, 0x15, -0x1e, 0xab, 0x3d, 0x22, 0x91, 0x03, 0x67, 0xf1, 0xa8, 0x1b, 0x9f, 0xad, 0x0d, 0xe8, 0x5e, 0xfa, -0x10, 0xbf, 0xbd, 0x42, 0xd4, 0x5c, 0xab, 0x5f, 0x52, 0x17, 0x00, 0xe4, 0x1e, 0xe3, 0x15, 0x55, -0x49, 0x46, 0x31, 0x9f, 0xf8, 0x09, 0x34, 0x3d, 0xcb, 0xb1, 0x29, 0xc7, 0x24, 0x9c, 0x7b, 0x9a, -0x88, 0xca, 0x49, 0x21, 0x06, 0xe3, 0xeb, 0xda, 0xa5, 0xea, 0x5a, 0x1e, 0x23, 0x24, 0xe6, 0x46, -0xc9, 0x3f, 0xa5, 0x5b, 0x5c, 0x0f, 0x4c, 0xd2, 0xd8, 0xaf, 0x53, 0x24, 0xdc, 0x9f, 0xc7, 0xb9, -0xa9, 0x52, 0x66, 0x63, 0xc7, 0xe6, 0x6b, 0x36, 0x91, 0xd1, 0xab, 0x2f, 0xc4, 0xcd, 0xd7, 0x75, -0x5d, 0x49, 0x0f, 0x19, 0xa9, 0x63, 0x7d, 0xd9, 0x3a, 0x9c, 0xd5, 0x88, 0xdb, 0x07, 0x9e, 0x94, -0x9a, 0xd2, 0xc4, 0xf5, 0x24, 0x43, 0xe5, 0xc9, 0x8e, 0xcd, 0xc8, 0xaf, 0x6f, 0xf8, 0x57, 0xe2, -0x57, 0xd3, 0xf5, 0x18, 0xed, 0x24, 0x62, 0x51, 0xd8, 0x15, 0x53, 0xdc, 0x7f, 0x10, 0xfc, 0x45, -0x54, 0x74, 0x66, 0x38, 0x85, 0xcd, 0x16, 0x33, 0xe2, 0x17, 0x87, 0x57, 0x40, 0xd7, 0xe5, 0x6b, -0x54, 0xc6, 0x97, 0xaa, 0x2f, 0xda, 0xec, 0xd9, 0x7a, 0x00, 0x7e, 0xf2, 0x7f, 0xc0, 0x5b, 0x3c, -0x7a, 0x11, 0x5c, 0x52, 0x9f, 0x7a, 0xd9, 0xea, 0xce, 0x48, 0xca, 0xf1, 0x2d, 0x21, 0xfc, 0x6a, -0xf4, 0x4f, 0xce, 0x7f, 0x5a, 0xa5, 0xe4, 0x4c, 0x8d, 0x48, 0x64, 0xad, 0x9b, 0x79, 0xb1, 0x8c, -0x1f, 0xce, 0xb5, 0x4c, 0xc6, 0x47, 0x4b, 0x63, 0x78, 0x51, 0x81, 0xdc, 0x6b, 0xd4, 0x3c, 0x3f, -0xaf, 0xaa, 0x62, 0x29, 0x5b, 0xe4, 0x38, 0x07, 0xda, 0x9c, 0xb5, 0x46, 0x77, 0x71, 0x77, 0x3d, -0x09, 0x24, 0x49, 0x50, 0x48, 0x8c, 0x1d, 0x18, 0x64, 0x30, 0x3d, 0x6a, 0x9d, 0xe6, 0xa7, 0x69, -0x62, 0x3f, 0x7d, 0x27, 0xcf, 0xd4, 0x46, 0xbc, 0x93, 0x58, 0x5a, 0xfa, 0x1d, 0x6e, 0x69, 0x2e, -0x63, 0x88, 0xd4, 0xfc, 0x52, 0xef, 0xb9, 0x22, 0x3e, 0x5c, 0x67, 0x23, 0x68, 0xef, 0xf8, 0xd7, -0x0f, 0x7b, 0xab, 0x3c, 0x85, 0xb2, 0xe6, 0xb4, 0x4a, 0xc8, 0xe5, 0x93, 0x73, 0x77, 0x39, 0xab, -0x9b, 0xe2, 0xc0, 0xfc, 0xc7, 0x26, 0xb0, 0xae, 0x2e, 0x49, 0xc9, 0xcd, 0x0d, 0x85, 0x8c, 0x69, -0xa6, 0x27, 0x3c, 0xd6, 0x5c, 0xd2, 0x67, 0x3c, 0xd2, 0xdc, 0xad, 0x8c, 0xc9, 0x5b, 0x3e, 0xf5, -0x98, 0x58, 0xab, 0x94, 0x27, 0x83, 0xc8, 0xa3, 0x72, 0x93, 0xb9, 0x03, 0x9a, 0xa8, 0xf4, 0x8b, -0x2b, 0x3f, 0x35, 0x59, 0xe8, 0xb9, 0x45, 0x76, 0xcf, 0x35, 0x0b, 0x54, 0xfa, 0x8f, 0x76, 0x40, -0xdc, 0xf5, 0xa8, 0x4f, 0xff, 0x00, 0xab, 0x8a, 0x11, 0xa2, 0xf2, 0x21, 0x62, 0x3a, 0x9a, 0xa1, -0x3c, 0x81, 0x8e, 0x13, 0x71, 0x61, 0xfc, 0x5e, 0x94, 0x6f, 0xb1, 0x4b, 0xbb, 0x15, 0x15, 0xa6, -0xe5, 0xdb, 0x23, 0xfb, 0xb5, 0x38, 0x50, 0xbf, 0x77, 0x03, 0xfa, 0xd0, 0xca, 0x4f, 0xb9, 0x20, -0x3f, 0x9d, 0x4a, 0x0f, 0x7e, 0xf5, 0x17, 0x34, 0xdf, 0x53, 0x94, 0x31, 0x49, 0xce, 0x1c, 0xe7, -0xd6, 0xae, 0xd9, 0xcc, 0xc4, 0x98, 0xa5, 0x03, 0x78, 0xe4, 0x1f, 0x51, 0x49, 0xb3, 0xa7, 0x5e, -0xa6, 0xca, 0x1c, 0xf3, 0x57, 0x10, 0xf6, 0xc9, 0xac, 0x9e, 0xc0, 0xf4, 0x2d, 0x29, 0x3d, 0x2a, -0x71, 0x9a, 0x49, 0xb2, 0x19, 0x60, 0xe5, 0xd7, 0xbe, 0xe1, 0xd3, 0x35, 0xa7, 0xa5, 0xdf, 0x49, -0x6b, 0x71, 0x05, 0xcc, 0x64, 0x89, 0x20, 0x70, 0xe0, 0xfb, 0x83, 0x4e, 0xe2, 0x69, 0x49, 0x1f, -0x53, 0xcc, 0xb1, 0xfc, 0x41, 0xf0, 0x3f, 0x91, 0x06, 0x1f, 0x55, 0xd3, 0x87, 0xda, 0xed, 0x02, -0xf0, 0x58, 0x80, 0x43, 0xc7, 0xcf, 0xa8, 0x27, 0xf1, 0xc7, 0xa5, 0x7c, 0xf2, 0x38, 0x27, 0x39, -0x07, 0xde, 0xba, 0x13, 0xbd, 0x99, 0xe6, 0xc7, 0x4b, 0xc5, 0x93, 0x2b, 0x7b, 0xd5, 0xb8, 0xdf, -0xde, 0xa9, 0x30, 0x7b, 0x97, 0xe2, 0x7f, 0x73, 0x5a, 0x50, 0xcd, 0x83, 0x9c, 0xfe, 0x75, 0x71, -0x7d, 0xcc, 0xe7, 0xa9, 0xab, 0x05, 0xd6, 0xde, 0xf5, 0xb3, 0x6f, 0xa9, 0xf9, 0x44, 0x12, 0xf8, -0xc7, 0xbf, 0x5a, 0xb6, 0xcc, 0xac, 0x74, 0x36, 0xde, 0x2b, 0xbe, 0xb7, 0x88, 0xc3, 0x15, 0xc3, -0xc5, 0x13, 0x9c, 0x9c, 0x1c, 0x55, 0x39, 0xf5, 0x89, 0x24, 0xc9, 0x67, 0x24, 0x9e, 0xe4, 0xf5, -0xa8, 0xd0, 0x66, 0x4c, 0xda, 0x81, 0x6c, 0xfc, 0xd5, 0x95, 0x2d, 0xe1, 0x39, 0xcb, 0x73, 0x43, -0x03, 0x3a, 0x5b, 0x92, 0x7f, 0x8b, 0xf1, 0xac, 0xe9, 0x67, 0xce, 0x79, 0xa5, 0x71, 0xaf, 0x33, -0x3e, 0x49, 0x09, 0xc9, 0xcd, 0x51, 0x91, 0xb3, 0xef, 0x9a, 0x2e, 0x36, 0x52, 0x91, 0xaa, 0x84, -0xe0, 0xb0, 0xc8, 0xfb, 0xc3, 0x91, 0x4a, 0xe5, 0x22, 0xb6, 0xed, 0xcb, 0x9e, 0x73, 0xdf, 0x35, -0x0b, 0x77, 0xa5, 0x72, 0xd1, 0x55, 0x87, 0xd7, 0x9a, 0xae, 0xe3, 0xad, 0x2d, 0xf7, 0x19, 0x5d, -0xaa, 0x06, 0xef, 0x4e, 0xf7, 0x29, 0x95, 0xdf, 0xeb, 0x8c, 0x77, 0xaa, 0x52, 0x4c, 0x37, 0x61, -0x01, 0x66, 0xf6, 0xa9, 0x2e, 0xe8, 0x81, 0xa3, 0x67, 0x39, 0x90, 0x9f, 0x65, 0x14, 0xe0, 0xa1, -0x7a, 0x0c, 0x55, 0x3b, 0x6c, 0x87, 0xbe, 0xa5, 0x62, 0x7c, 0xb9, 0x33, 0xfc, 0x0f, 0xda, 0xac, -0x67, 0xf5, 0x15, 0x2c, 0xd2, 0xe3, 0xb3, 0xf5, 0xe2, 0xa4, 0x0d, 0x9f, 0xfe, 0xb5, 0x0b, 0x52, -0xaf, 0x63, 0x1c, 0xa1, 0xeb, 0xd7, 0xf5, 0xa8, 0x24, 0x52, 0x8c, 0xb2, 0x8c, 0xee, 0x43, 0x9f, -0xad, 0x67, 0xdc, 0xec, 0x6e, 0xe8, 0xd9, 0x81, 0xf7, 0x2a, 0xb0, 0x39, 0x0c, 0x33, 0x9a, 0xba, -0xa7, 0xa7, 0xaf, 0xad, 0x67, 0xb3, 0xd4, 0x4f, 0x52, 0xd2, 0xb7, 0xf8, 0x54, 0xea, 0xde, 0xbf, -0x9d, 0x08, 0xcd, 0x96, 0x11, 0xb9, 0x15, 0x22, 0x9f, 0x2e, 0x4e, 0x0f, 0x0c, 0x69, 0xa1, 0x74, -0x3d, 0x8f, 0xe1, 0x97, 0x8a, 0x1f, 0x4a, 0xd4, 0x52, 0xd9, 0xe4, 0xc2, 0x48, 0xdb, 0x90, 0x96, -0xc0, 0x07, 0xb8, 0xfc, 0x45, 0x69, 0xfc, 0x4a, 0xf0, 0xfc, 0x3a, 0x3e, 0xb4, 0xb7, 0xf6, 0x11, -0x91, 0xa5, 0x6b, 0x49, 0xf6, 0x88, 0x4a, 0x2e, 0x12, 0x37, 0xcf, 0xcf, 0x1e, 0x7d, 0x8f, 0x38, -0xf7, 0xad, 0x62, 0xee, 0x8e, 0x0a, 0xbe, 0xed, 0x4f, 0x53, 0xcf, 0x15, 0xaa, 0xc2, 0x3f, 0x35, -0x77, 0x27, 0x62, 0xe2, 0x3f, 0xbf, 0xeb, 0x56, 0x96, 0x5c, 0x72, 0x5b, 0x03, 0xd4, 0x9a, 0xa2, -0x19, 0x3a, 0xdd, 0x31, 0xe1, 0x7f, 0xef, 0xaa, 0xb5, 0x14, 0xe4, 0x72, 0xcc, 0x58, 0xfb, 0x9a, -0xae, 0x6e, 0xa4, 0x34, 0x5b, 0x37, 0x64, 0xaf, 0x53, 0x91, 0xc8, 0xe6, 0x8f, 0xb6, 0x96, 0x5c, -0xe4, 0xe7, 0xbf, 0x35, 0x2d, 0xdc, 0x4d, 0x10, 0x35, 0xd1, 0x39, 0xe7, 0xf5, 0xaa, 0xb2, 0x5c, -0x1c, 0x9e, 0x68, 0xbe, 0xa1, 0x62, 0xb3, 0x4c, 0x7d, 0x6a, 0xab, 0xc9, 0x9c, 0xf3, 0x40, 0x3d, -0x4a, 0xec, 0xf9, 0xcf, 0xf5, 0xaa, 0x8e, 0x72, 0x68, 0x02, 0xb3, 0xd5, 0x59, 0x29, 0x14, 0x8a, -0x4e, 0x36, 0x3e, 0x7b, 0x3f, 0x07, 0xda, 0x9a, 0xe0, 0xff, 0x00, 0xf5, 0xe8, 0x63, 0x2b, 0xb0, -0xef, 0x55, 0x9c, 0x54, 0xf4, 0x2d, 0x15, 0x9f, 0xa9, 0x35, 0x46, 0x49, 0x46, 0x48, 0x5c, 0xb1, -0xf6, 0x14, 0xdb, 0x28, 0xac, 0xd1, 0xbb, 0x92, 0x64, 0x38, 0x1f, 0xdd, 0x14, 0xc2, 0xa1, 0x7a, -0x00, 0x28, 0x29, 0x11, 0x92, 0x6a, 0x23, 0xcd, 0x2b, 0x96, 0xb7, 0x22, 0x75, 0x0c, 0x08, 0x3f, -0x99, 0xa8, 0xe1, 0x72, 0x09, 0x8d, 0x8f, 0x2b, 0xd3, 0x3d, 0xe8, 0xdc, 0xb4, 0x58, 0x07, 0x9e, -0x79, 0x34, 0xf0, 0xc3, 0xaf, 0x5f, 0xad, 0x2f, 0x52, 0xd3, 0xea, 0x50, 0xef, 0x9a, 0x6b, 0x00, -0xc0, 0xd6, 0x76, 0xe8, 0x75, 0xad, 0x85, 0xb3, 0x72, 0x8e, 0xf0, 0xb1, 0xe3, 0xaa, 0x56, 0xb2, -0xb0, 0xfa, 0xd4, 0x4b, 0x71, 0x37, 0x72, 0xc2, 0x9f, 0xd7, 0xa5, 0x4e, 0xa7, 0x93, 0x4b, 0xa9, -0x9c, 0x8b, 0x0a, 0x7f, 0xfd, 0x75, 0x3e, 0x77, 0x29, 0x19, 0xe5, 0x79, 0x14, 0xdb, 0xd0, 0x5e, -0x65, 0xdb, 0x1b, 0xa7, 0x86, 0x44, 0x95, 0x18, 0xab, 0xc6, 0x72, 0x08, 0xec, 0x6b, 0xe9, 0xbb, -0x2b, 0xa8, 0xbc, 0x73, 0xe0, 0xdb, 0x8d, 0x35, 0x80, 0x37, 0xf0, 0x8f, 0x3e, 0xd1, 0xdb, 0xf8, -0x25, 0x50, 0x37, 0x2f, 0xd1, 0x94, 0x1a, 0xd2, 0x0f, 0x53, 0x93, 0x14, 0xac, 0xb9, 0x8f, 0x0a, -0x70, 0xd1, 0xbb, 0xa3, 0x82, 0xae, 0x8d, 0xb5, 0x94, 0x8e, 0x41, 0x1d, 0xa9, 0xca, 0xfc, 0x55, -0xa3, 0x26, 0x3c, 0x5c, 0x8c, 0xe1, 0x01, 0x63, 0xed, 0x53, 0xa1, 0x62, 0x73, 0x23, 0x64, 0xfa, -0x7a, 0x55, 0xb6, 0x43, 0x45, 0xa5, 0x97, 0x8a, 0x98, 0x4d, 0xf5, 0xcd, 0x17, 0x15, 0x87, 0x89, -0xcf, 0xad, 0x30, 0xcd, 0xb5, 0xb3, 0x9e, 0x1a, 0x95, 0xc4, 0xc5, 0x33, 0x67, 0xbd, 0x46, 0xd2, -0x75, 0xa0, 0x44, 0x06, 0x43, 0xc8, 0x26, 0xa3, 0x67, 0xce, 0x79, 0xeb, 0xeb, 0x4e, 0xe2, 0x22, -0x27, 0x35, 0x1b, 0x67, 0xeb, 0x47, 0x41, 0x7a, 0x10, 0xb0, 0xcd, 0x42, 0xc8, 0x48, 0xe6, 0x93, -0x63, 0x2b, 0x49, 0x1e, 0xe0, 0x41, 0xef, 0x55, 0xd4, 0x1e, 0x55, 0xbe, 0xf2, 0xfa, 0xd0, 0x55, -0xc8, 0x9d, 0x31, 0xff, 0x00, 0xd7, 0xaa, 0x12, 0xb8, 0x04, 0x81, 0x92, 0x7d, 0xbb, 0x54, 0xef, -0xa1, 0x49, 0x94, 0x9e, 0x37, 0x7c, 0x97, 0x6c, 0x0f, 0xee, 0x8a, 0x85, 0x95, 0x57, 0x3b, 0x40, -0xa7, 0xb2, 0xd4, 0xb2, 0x06, 0xf5, 0xe4, 0xe6, 0xab, 0x39, 0x1e, 0xff, 0x00, 0x41, 0x47, 0x4d, -0x0a, 0x5d, 0x88, 0x18, 0xfa, 0x1a, 0x84, 0x9c, 0x9e, 0x4f, 0xe3, 0x4b, 0x72, 0xd7, 0x71, 0x84, -0xf3, 0xda, 0xa1, 0x94, 0x1c, 0x87, 0x5f, 0xbc, 0xbd, 0x69, 0x97, 0xa9, 0x32, 0x48, 0x18, 0x02, -0x3b, 0xd4, 0x99, 0xf7, 0x04, 0xd2, 0x5a, 0xea, 0x53, 0x65, 0x5c, 0xf4, 0xef, 0x4d, 0x3c, 0xf2, -0x47, 0x3e, 0xb5, 0x12, 0xd0, 0xeb, 0x4d, 0x15, 0xe4, 0xca, 0x95, 0x94, 0x64, 0xb4, 0x67, 0x3f, -0x85, 0x6b, 0xc3, 0x20, 0x91, 0x15, 0xc1, 0xce, 0xe1, 0x90, 0x45, 0x43, 0xd8, 0x1b, 0xd4, 0xb4, -0xad, 0xfa, 0xd4, 0xea, 0xdd, 0xcd, 0x49, 0x0c, 0x9d, 0x5b, 0x9e, 0xbc, 0xd5, 0x84, 0x6c, 0x7b, -0xd3, 0xdc, 0x8d, 0x87, 0xe7, 0x63, 0xee, 0xe8, 0xad, 0x5e, 0x97, 0xe0, 0x1f, 0x11, 0x3e, 0x97, -0xa8, 0xc7, 0x09, 0x7d, 0xb0, 0xdc, 0x1e, 0xbf, 0xdd, 0x6e, 0xc6, 0x88, 0xe8, 0xcc, 0xaa, 0xc7, -0x9e, 0x2c, 0xd8, 0xf1, 0xfd, 0x9c, 0x56, 0xba, 0x92, 0xea, 0x96, 0xc9, 0xfb, 0x8d, 0x5f, 0x32, -0x14, 0x41, 0xc2, 0xc9, 0xfc, 0x43, 0xf5, 0xcd, 0x70, 0x43, 0xcc, 0x90, 0xfe, 0xf0, 0xed, 0x5e, -0xbb, 0x41, 0xad, 0xce, 0x28, 0x3b, 0xc4, 0xb4, 0xac, 0x17, 0x85, 0xe2, 0xa6, 0x59, 0x28, 0xb8, -0xd9, 0x27, 0x9b, 0xf5, 0xa9, 0x44, 0xbf, 0x8d, 0x36, 0x4b, 0x1d, 0xe6, 0xe7, 0xbd, 0x0c, 0xfb, -0x81, 0x19, 0xe7, 0xb5, 0x31, 0x0d, 0x59, 0x49, 0xc8, 0x3d, 0x47, 0x5a, 0x53, 0x21, 0xf7, 0xfc, -0x68, 0x42, 0x63, 0x4b, 0x77, 0xcf, 0x4e, 0xd4, 0x99, 0xcf, 0x35, 0x56, 0x21, 0xb1, 0x40, 0xfa, -0xfe, 0x34, 0xbb, 0x73, 0x93, 0x43, 0x0b, 0x87, 0x96, 0xde, 0x94, 0x79, 0x04, 0xf6, 0xe6, 0xa1, -0x8f, 0x71, 0x0d, 0xa3, 0x1e, 0xdd, 0x7b, 0xd5, 0x39, 0xac, 0xdd, 0x5b, 0x7a, 0xa9, 0xc8, 0xeb, -0x52, 0xd9, 0x48, 0xce, 0x96, 0xdd, 0xdb, 0x96, 0xe0, 0x7a, 0x0a, 0xa4, 0xf0, 0x84, 0xc8, 0x03, -0x9f, 0x7a, 0x11, 0x69, 0xdc, 0xa5, 0x22, 0xf5, 0xaa, 0x6e, 0x3a, 0xfa, 0xd1, 0x72, 0xfd, 0x0a, -0x8f, 0xf8, 0xd5, 0x46, 0xf5, 0xf7, 0xef, 0x4e, 0xeb, 0x62, 0x96, 0xa4, 0x2d, 0xd7, 0xde, 0xa2, -0x3d, 0x7a, 0x75, 0xef, 0x41, 0x44, 0x64, 0x9f, 0x73, 0x4c, 0xfa, 0xfa, 0xd0, 0xcd, 0x11, 0x00, -0x26, 0x39, 0x36, 0x9f, 0xb8, 0xdc, 0xe4, 0x55, 0x9c, 0xf4, 0xcf, 0xa7, 0x43, 0x49, 0xb7, 0x72, -0xa2, 0xec, 0x43, 0xf8, 0xd0, 0x7b, 0xe6, 0x93, 0x3a, 0x48, 0xd8, 0x7e, 0x39, 0xa5, 0xb4, 0x93, -0x63, 0xb4, 0x2c, 0x78, 0xea, 0xa6, 0xa5, 0xec, 0x56, 0xdb, 0x9a, 0xc1, 0xbf, 0xc8, 0xa9, 0x43, -0x7b, 0xe6, 0xa2, 0xf7, 0x21, 0xf7, 0x2c, 0x2b, 0x73, 0xd7, 0xf3, 0xa9, 0xd5, 0xb9, 0xeb, 0x4f, -0x72, 0x1e, 0x84, 0xe3, 0xe7, 0x52, 0x09, 0xe9, 0xd0, 0xd4, 0xd6, 0xb3, 0xb2, 0x38, 0x6d, 0xc4, -0x32, 0x1e, 0xa3, 0xb5, 0x2f, 0x21, 0x37, 0x74, 0x7b, 0x25, 0xb5, 0xda, 0x78, 0x8b, 0x40, 0x30, -0x48, 0xc0, 0xdc, 0xc2, 0x99, 0x52, 0x79, 0x2a, 0xc0, 0x7f, 0x5c, 0x57, 0x9e, 0xb6, 0xe4, 0x76, -0x46, 0xc8, 0x64, 0x38, 0x20, 0xd6, 0xd7, 0xbe, 0xa7, 0x02, 0x56, 0x6e, 0x22, 0x87, 0xa9, 0x03, -0xd3, 0x19, 0x2e, 0xfe, 0xf9, 0xa7, 0x09, 0x0f, 0xd7, 0x3d, 0xf3, 0x4c, 0x87, 0xdc, 0x7f, 0x99, -0xef, 0x4b, 0xbf, 0xdf, 0xf3, 0xa0, 0x4c, 0x61, 0x72, 0xad, 0xb8, 0x74, 0x3c, 0x1a, 0x9c, 0x36, -0x7d, 0x7e, 0xb5, 0x6b, 0x52, 0x24, 0x28, 0xc9, 0xff, 0x00, 0x13, 0x4f, 0x1f, 0xcf, 0xd6, 0xa8, -0x8b, 0x93, 0x2a, 0x13, 0xef, 0x56, 0x12, 0x22, 0x7d, 0xe9, 0x34, 0xc5, 0x74, 0x5c, 0x8e, 0xd5, -0x9f, 0xa0, 0x27, 0xdf, 0x15, 0xa9, 0x0e, 0x93, 0x24, 0xa4, 0x00, 0x8c, 0x49, 0xed, 0x8c, 0xd6, -0x53, 0x76, 0x29, 0x3b, 0x9e, 0x8d, 0xe1, 0xff, 0x00, 0x87, 0x37, 0x3a, 0xa2, 0xf9, 0xd7, 0x04, -0xd9, 0xdb, 0xf0, 0x7c, 0xc9, 0x23, 0x39, 0x7f, 0xa0, 0xef, 0x5e, 0x89, 0x6d, 0xf0, 0xcb, 0xc3, -0x70, 0xda, 0xcb, 0x14, 0xf1, 0x3d, 0xd5, 0xcc, 0x8a, 0x54, 0x5d, 0xb1, 0x2b, 0xe5, 0x9f, 0x50, -0xa0, 0xe3, 0xf3, 0xcd, 0x64, 0xa2, 0xe5, 0xab, 0x37, 0x8a, 0xd0, 0xf9, 0xb3, 0xc4, 0x9e, 0x1c, -0x9f, 0x46, 0xbf, 0xb8, 0xb3, 0x99, 0x30, 0xd1, 0x39, 0x19, 0x03, 0x83, 0xee, 0x3d, 0x8d, 0x70, -0xb7, 0x36, 0xe4, 0x13, 0x90, 0x68, 0x8b, 0x7b, 0x30, 0x32, 0x65, 0x8f, 0x04, 0xe6, 0xb3, 0xe5, -0x5c, 0x7f, 0x8d, 0x69, 0x72, 0xad, 0x72, 0x8c, 0x8a, 0x79, 0xaa, 0x92, 0x0a, 0x37, 0x29, 0x6f, -0xa9, 0x5d, 0xbb, 0xfa, 0xd4, 0x27, 0x39, 0xf5, 0xcf, 0xad, 0x17, 0x6d, 0x6a, 0x5a, 0x22, 0x3e, -0xfd, 0xfd, 0xa9, 0x84, 0x9a, 0x35, 0x34, 0xbd, 0xc8, 0xdc, 0x6e, 0x07, 0xb9, 0xec, 0x7d, 0x28, -0x8d, 0xcb, 0x03, 0x9e, 0xa3, 0x82, 0x0d, 0x22, 0x98, 0x9f, 0x9d, 0x19, 0xce, 0x72, 0x73, 0x9a, -0x1e, 0xbb, 0x1d, 0x23, 0x7d, 0x73, 0xd7, 0xb1, 0xaa, 0xf2, 0x02, 0x08, 0x91, 0x73, 0x95, 0x39, -0xcf, 0xad, 0x27, 0xa2, 0x1b, 0xd4, 0xd4, 0x8a, 0x42, 0xfb, 0x1d, 0x79, 0x56, 0x19, 0xfa, 0x55, -0xb0, 0x7d, 0xce, 0x6b, 0x2b, 0x6a, 0x4b, 0x6c, 0x99, 0x5b, 0xde, 0xa6, 0x56, 0xe7, 0xaf, 0x3e, -0xb5, 0x48, 0xcd, 0xec, 0x4e, 0xaf, 0x8e, 0xf4, 0xe7, 0x6d, 0xae, 0x1c, 0x1e, 0x0f, 0x5a, 0x4d, -0xea, 0x2d, 0xce, 0xbb, 0xc3, 0x5a, 0xab, 0x59, 0xdd, 0xaa, 0x16, 0x22, 0x29, 0xc8, 0x56, 0x1e, -0x95, 0xb9, 0xe2, 0x1b, 0x41, 0x1d, 0xc0, 0xbc, 0x8b, 0xfd, 0x55, 0xc7, 0x5c, 0x0e, 0x86, 0xb4, -0x8b, 0xe8, 0x71, 0xd5, 0x56, 0x9a, 0x67, 0x38, 0x09, 0xa7, 0x86, 0xf5, 0xaa, 0x25, 0x8f, 0xdf, -0x4f, 0xdf, 0xef, 0x4d, 0x31, 0x3d, 0x45, 0xdd, 0xef, 0x4e, 0x0c, 0x4d, 0x51, 0x9b, 0xd8, 0x97, -0x39, 0x04, 0x1e, 0xe2, 0x96, 0x22, 0x7e, 0xe9, 0x39, 0x23, 0xbd, 0x52, 0x21, 0xb2, 0xda, 0x8c, -0xd5, 0xa5, 0x8f, 0x77, 0xf3, 0xad, 0x12, 0x31, 0x6c, 0xbf, 0x0d, 0xb9, 0x7e, 0xdf, 0x9d, 0x6d, -0x5b, 0xe9, 0xcc, 0xd8, 0xc2, 0x92, 0x4d, 0x5b, 0x85, 0xcc, 0xe5, 0x3b, 0x1e, 0x8d, 0xe1, 0xaf, -0x04, 0xdd, 0xea, 0x4c, 0xb2, 0x48, 0x9e, 0x4d, 0xa8, 0xfb, 0xd3, 0x3e, 0x79, 0xfa, 0x7a, 0x9a, -0xf6, 0x3d, 0x3f, 0xc2, 0xda, 0x36, 0x9c, 0x06, 0xcb, 0x55, 0x9d, 0xfb, 0xbd, 0xc8, 0x0f, 0xfa, -0x74, 0xae, 0x49, 0xab, 0xbb, 0x33, 0xae, 0x8a, 0xba, 0xe6, 0x3a, 0x10, 0x00, 0x00, 0x00, 0x00, -0x03, 0x00, 0x0e, 0xd4, 0xb4, 0xce, 0x83, 0xce, 0x3e, 0x21, 0xf8, 0x69, 0x35, 0x6d, 0x3c, 0xea, -0x10, 0xc6, 0x0d, 0xdd, 0x9a, 0x9d, 0xe4, 0x0e, 0x5d, 0x3f, 0xfa, 0xdf, 0xc8, 0x9f, 0x4a, 0xf9, -0x67, 0x50, 0xb2, 0x64, 0x66, 0x04, 0x10, 0x41, 0xe7, 0x35, 0x8b, 0xd2, 0x44, 0xb3, 0x97, 0xb8, -0x87, 0x04, 0xd6, 0x3c, 0xd1, 0xe3, 0x3e, 0xb5, 0x41, 0x73, 0x36, 0x45, 0xf5, 0xfc, 0xea, 0x93, -0x8e, 0xbf, 0xce, 0x9d, 0xee, 0x59, 0x51, 0xc7, 0x7c, 0xe6, 0xa1, 0x3e, 0xe6, 0x9d, 0xf4, 0x2d, -0x10, 0xb7, 0x6e, 0x45, 0x30, 0xf7, 0xe9, 0xf8, 0xd3, 0xf5, 0x2e, 0xfa, 0xe8, 0x34, 0x9f, 0xa8, -0xaa, 0xd2, 0x1d, 0x8e, 0x1c, 0x13, 0x83, 0xc1, 0xf6, 0xa9, 0xba, 0xea, 0x5e, 0xe4, 0xf2, 0x29, -0x46, 0x6f, 0xad, 0x33, 0x3d, 0x7d, 0xea, 0xad, 0xa1, 0xba, 0x7a, 0xd8, 0x3d, 0xf3, 0x93, 0x4c, -0x63, 0xd7, 0x8a, 0x9b, 0x5f, 0x52, 0x97, 0x98, 0xdb, 0x47, 0xf2, 0xe4, 0x68, 0xdb, 0xa3, 0x1c, -0xae, 0x6b, 0x59, 0x4e, 0x6b, 0x29, 0x6f, 0xa8, 0x32, 0x6d, 0xc7, 0xf5, 0xa9, 0x03, 0x1e, 0x29, -0x99, 0xbf, 0x32, 0x75, 0x7f, 0x7c, 0xd4, 0xe3, 0xe7, 0x5d, 0x86, 0x9f, 0x99, 0x1d, 0x6c, 0x3a, -0xde, 0x52, 0x8d, 0x83, 0x90, 0x50, 0xf0, 0x6b, 0xd3, 0xb4, 0xeb, 0x94, 0xd5, 0xf4, 0xb6, 0xb7, -0x94, 0xe6, 0x58, 0xc7, 0x53, 0xd7, 0xd8, 0xd1, 0x17, 0xa9, 0x8e, 0x21, 0x69, 0x74, 0x72, 0xee, -0x1a, 0x39, 0x19, 0x1c, 0x61, 0x94, 0xe0, 0xe6, 0x9b, 0xba, 0xb4, 0xdc, 0xc5, 0xeb, 0xa8, 0xed, -0xdd, 0x79, 0xa5, 0xdd, 0xdf, 0x39, 0xc8, 0xa6, 0xc4, 0xc7, 0x86, 0xa7, 0x83, 0x9e, 0x46, 0x0d, -0x51, 0x12, 0x26, 0x53, 0xcf, 0x5a, 0x9b, 0x1d, 0x18, 0x1e, 0x9d, 0x6a, 0xd6, 0xa6, 0x52, 0xd0, -0xd2, 0x85, 0x77, 0x73, 0xeb, 0x5b, 0xf6, 0x76, 0x12, 0xca, 0x46, 0x15, 0x9b, 0x3e, 0x82, 0xba, -0x21, 0x1b, 0x9c, 0x95, 0x27, 0xca, 0x8f, 0x40, 0xd0, 0x7c, 0x1b, 0xa8, 0xea, 0x52, 0x2f, 0x97, -0x03, 0xa4, 0x59, 0xe6, 0x79, 0x14, 0x85, 0x1f, 0x8d, 0x7b, 0x76, 0x91, 0xe1, 0x2d, 0x2f, 0x4c, -0x8a, 0x3d, 0xf0, 0xa5, 0xcd, 0xca, 0x80, 0x5a, 0x59, 0x07, 0x19, 0xf6, 0x14, 0xea, 0xd4, 0x54, -0xd7, 0x2a, 0xdc, 0x9c, 0x3d, 0x07, 0x88, 0x97, 0x3c, 0xbe, 0x1f, 0xcc, 0xea, 0x40, 0x00, 0x60, -0x00, 0x00, 0xe8, 0x07, 0x6a, 0x5a, 0xe2, 0x3d, 0x6d, 0x82, 0x8a, 0x00, 0x42, 0x03, 0x02, 0xac, -0x03, 0x06, 0x18, 0x20, 0xf3, 0x9a, 0xf9, 0xb3, 0xe2, 0x07, 0x86, 0x8e, 0x9b, 0xa8, 0x4b, 0x2c, -0x51, 0x9f, 0xb2, 0x5c, 0x1d, 0xd1, 0x36, 0x38, 0x03, 0x1d, 0x3f, 0x03, 0x59, 0x55, 0xd9, 0x30, -0x67, 0x8c, 0x5e, 0xdb, 0x90, 0x4f, 0x15, 0xce, 0x5c, 0x47, 0x8c, 0xff, 0x00, 0x3a, 0x49, 0x89, -0x23, 0x1e, 0x64, 0xe4, 0xd6, 0x7c, 0xaa, 0x73, 0x9c, 0x9a, 0xa5, 0x72, 0xf6, 0x29, 0x38, 0xef, -0xdf, 0xde, 0xab, 0x30, 0xe7, 0x8e, 0x69, 0x96, 0x44, 0xd9, 0xe7, 0x83, 0x9a, 0x67, 0x7e, 0x94, -0xfa, 0x97, 0x74, 0x31, 0xba, 0xf5, 0xeb, 0x51, 0x38, 0xdc, 0x08, 0x3d, 0xc7, 0x6e, 0xd4, 0xf7, -0x29, 0x2d, 0x2c, 0x69, 0x6a, 0x11, 0x6d, 0x6c, 0x8e, 0x06, 0x6b, 0x28, 0x30, 0xfe, 0x95, 0x6d, -0x36, 0xcd, 0x21, 0x25, 0x60, 0x07, 0x39, 0x39, 0x1f, 0x85, 0x27, 0xe1, 0x93, 0x59, 0xb3, 0x44, -0xd3, 0x20, 0x90, 0x11, 0x87, 0x5c, 0xee, 0x43, 0x90, 0x6b, 0x4a, 0x19, 0x44, 0x88, 0xae, 0x3b, -0xd6, 0x72, 0x57, 0x2b, 0x72, 0xd0, 0x63, 0xeb, 0xd6, 0xa4, 0x04, 0xf0, 0x79, 0x3f, 0x5a, 0x49, -0xdc, 0xce, 0x44, 0xa1, 0x8d, 0x4e, 0xae, 0x41, 0x1c, 0xf3, 0x55, 0x7b, 0xb2, 0x07, 0xc9, 0xf2, -0x91, 0x20, 0x3d, 0x7a, 0xd7, 0x43, 0xa1, 0x6a, 0x2d, 0x69, 0x72, 0xac, 0x09, 0xd9, 0x27, 0xca, -0xc2, 0xa7, 0x66, 0x4c, 0xd7, 0x34, 0x6c, 0x74, 0xba, 0xe5, 0xb0, 0xca, 0x5e, 0x46, 0x06, 0xc9, -0x3e, 0xf6, 0x3f, 0x9d, 0x73, 0xc1, 0xab, 0x54, 0x71, 0xc7, 0x55, 0xa8, 0xb9, 0xcf, 0x39, 0xa7, -0x86, 0xeb, 0x4c, 0x18, 0xa0, 0xf2, 0x73, 0xf8, 0x54, 0xaa, 0xde, 0xe6, 0xaa, 0xe4, 0xb4, 0x89, -0x95, 0xb2, 0x7a, 0xd5, 0xc8, 0xd8, 0x77, 0x3c, 0x7d, 0x6b, 0x44, 0x63, 0x3b, 0x9d, 0x06, 0x8b, -0x6a, 0xd7, 0x97, 0x71, 0x5b, 0x29, 0x51, 0xe6, 0x30, 0x50, 0x5c, 0xe3, 0xf5, 0xaf, 0xab, 0x3c, -0x3b, 0xe0, 0x6b, 0x0d, 0x22, 0x35, 0x92, 0xf0, 0x47, 0x7b, 0x75, 0x8e, 0x41, 0x1f, 0xbb, 0x53, -0xec, 0x0f, 0x5f, 0xc6, 0xb7, 0x95, 0x4f, 0x67, 0x1d, 0x37, 0x39, 0x63, 0x47, 0xeb, 0x13, 0xb4, -0xb6, 0x47, 0x74, 0xaa, 0xa8, 0x02, 0xa2, 0x85, 0x51, 0xc0, 0x55, 0x18, 0x02, 0x96, 0xb9, 0x1b, -0xbe, 0xac, 0xf4, 0x92, 0x49, 0x59, 0x05, 0x14, 0x86, 0x14, 0x50, 0x01, 0x58, 0x3e, 0x23, 0xd1, -0x93, 0x5b, 0xd3, 0x65, 0xb5, 0x21, 0x7c, 0xe5, 0xf9, 0xe1, 0x66, 0xec, 0xde, 0x99, 0xf7, 0xff, -0x00, 0x0a, 0x99, 0xae, 0x68, 0xb4, 0x0c, 0xf9, 0x27, 0x5a, 0xd3, 0xde, 0xda, 0x69, 0x62, 0x91, -0x4a, 0xb2, 0x1c, 0x60, 0xf5, 0xae, 0x1e, 0xee, 0x1e, 0x4e, 0x6b, 0x08, 0x36, 0xd0, 0x6e, 0x60, -0x4f, 0x1f, 0x26, 0xb2, 0xe5, 0x53, 0xcf, 0x7f, 0x7a, 0xd4, 0xb4, 0x51, 0x91, 0x7e, 0xb9, 0x3d, -0xea, 0xab, 0xd3, 0x5a, 0x6e, 0x56, 0xe4, 0x0c, 0x3f, 0xfd, 0x66, 0x99, 0x8e, 0xbc, 0xe7, 0x8a, -0x6d, 0xdd, 0xdd, 0x16, 0x91, 0x0b, 0x75, 0xaa, 0xf2, 0x4a, 0x17, 0x23, 0x24, 0x93, 0xc6, 0x3b, -0xd1, 0xb1, 0x49, 0xdd, 0xdd, 0x9d, 0x46, 0xa9, 0x6f, 0xbd, 0x1b, 0x00, 0xe4, 0x74, 0x39, 0xae, -0x0e, 0x42, 0xf1, 0xb9, 0x52, 0x48, 0xc1, 0xae, 0xaa, 0x69, 0x5d, 0xdc, 0xc2, 0x52, 0x6b, 0x54, -0x3a, 0x19, 0xc8, 0x7c, 0x33, 0x75, 0xe9, 0x9a, 0xbe, 0x1b, 0x23, 0xfc, 0x6a, 0x6b, 0xc7, 0x95, -0xdc, 0xe8, 0xa1, 0x27, 0x25, 0x66, 0x21, 0xe7, 0x83, 0xe9, 0x4d, 0xb7, 0x7f, 0x2e, 0x46, 0x8c, -0xfd, 0xd6, 0xe4, 0x1a, 0xe4, 0x6a, 0xe7, 0x4e, 0x9b, 0xb3, 0x4c, 0x37, 0x35, 0x28, 0x6f, 0x7c, -0xd4, 0x26, 0x4c, 0x91, 0x28, 0x7f, 0x7a, 0x90, 0x37, 0x3d, 0x72, 0x71, 0xde, 0xae, 0xe6, 0x7d, -0x4b, 0x4a, 0xdb, 0x95, 0x94, 0xf7, 0x14, 0x40, 0xe5, 0x58, 0xa9, 0x27, 0xe5, 0xe9, 0x4a, 0xe9, -0x3d, 0x45, 0x6d, 0x0f, 0x4b, 0xd1, 0xee, 0x97, 0x52, 0xb0, 0x92, 0xd2, 0x52, 0x0b, 0xa2, 0xe3, -0x9e, 0xbf, 0x5a, 0xe7, 0x2e, 0x22, 0x7b, 0x79, 0xa4, 0x85, 0xc6, 0x19, 0x0e, 0x39, 0xef, 0x54, -0x9e, 0x87, 0x13, 0x5c, 0xb2, 0x68, 0x60, 0x3e, 0xa6, 0x94, 0x1f, 0xf2, 0x6a, 0xae, 0x03, 0x83, -0x71, 0xeb, 0xf5, 0xa7, 0xee, 0x03, 0x9c, 0xf1, 0xeb, 0x54, 0x45, 0x81, 0x65, 0xc9, 0xc2, 0x0c, -0x9f, 0x53, 0xda, 0xaf, 0xc2, 0xa4, 0x9c, 0xb9, 0xc9, 0xf4, 0xad, 0xa2, 0xf5, 0x32, 0x9e, 0xc7, -0x51, 0xa7, 0x4b, 0xb1, 0xd1, 0xd7, 0x82, 0xa7, 0x22, 0xbe, 0xb7, 0xf0, 0x56, 0xbc, 0x9a, 0xde, -0x91, 0x08, 0x79, 0x37, 0x5e, 0x5a, 0x28, 0x8e, 0x50, 0x7a, 0xb0, 0xfe, 0x16, 0xfc, 0x87, 0x3e, -0xe3, 0xde, 0xb5, 0xa9, 0x1b, 0xd3, 0xb9, 0xcd, 0x4a, 0x4e, 0x35, 0xad, 0xdc, 0xec, 0x68, 0xae, -0x43, 0xd1, 0x0a, 0x28, 0x00, 0xa2, 0x80, 0x0a, 0x28, 0x03, 0xc5, 0xfe, 0x26, 0x78, 0x6f, 0x70, -0x3a, 0xc5, 0xba, 0x7c, 0x92, 0x7c, 0xb3, 0x01, 0xfc, 0x2d, 0xeb, 0xf8, 0xff, 0x00, 0x3f, 0xad, -0x7c, 0xe1, 0x7f, 0x06, 0xd2, 0xdc, 0x57, 0x3f, 0xc3, 0x26, 0x86, 0x8e, 0x5a, 0xe1, 0x39, 0x35, -0x8d, 0x32, 0xf2, 0x6a, 0xd3, 0x2b, 0xcc, 0xa1, 0x20, 0xff, 0x00, 0xf5, 0xd5, 0x27, 0xeb, 0xeb, -0x57, 0x72, 0x88, 0x1b, 0xbe, 0x3b, 0xd5, 0x79, 0x1d, 0x54, 0x1c, 0x9e, 0x7d, 0x28, 0xd5, 0x95, -0xa2, 0x2b, 0x11, 0x24, 0x87, 0x3c, 0x2a, 0xfb, 0xf5, 0xa0, 0x20, 0x5c, 0xf1, 0x92, 0x7b, 0x9a, -0x2c, 0x69, 0xd3, 0x53, 0xd0, 0x2f, 0xad, 0xfe, 0xf1, 0xfe, 0x95, 0xe7, 0x5a, 0xb5, 0xb9, 0x8e, -0x52, 0xe0, 0x60, 0x1e, 0xb5, 0xd5, 0x49, 0xfb, 0xda, 0x9c, 0xf2, 0xf8, 0x4e, 0x36, 0xf2, 0xee, -0x48, 0xe4, 0xda, 0x84, 0x82, 0x3b, 0xd5, 0xfd, 0x3f, 0x53, 0x77, 0x61, 0x1c, 0xdd, 0x4f, 0x47, -0x27, 0xad, 0x74, 0x55, 0x83, 0x94, 0x48, 0xa5, 0x3e, 0x49, 0x6a, 0x74, 0x04, 0xe4, 0x64, 0x54, -0x32, 0x03, 0xc1, 0x07, 0x95, 0x39, 0x15, 0xe6, 0x33, 0xd4, 0x45, 0xf8, 0x66, 0x0e, 0xbb, 0x81, -0x3f, 0x9d, 0x58, 0x0d, 0xf5, 0xac, 0x85, 0x25, 0x72, 0x55, 0x72, 0x7a, 0xd4, 0xc0, 0xff, 0x00, -0xfa, 0xe9, 0xae, 0xe6, 0x6f, 0xcc, 0x95, 0x1c, 0x83, 0x9e, 0xb8, 0xa9, 0x24, 0x3f, 0x76, 0x45, -0xcf, 0xbe, 0x29, 0xbd, 0x50, 0x5f, 0x53, 0x77, 0x45, 0xd4, 0x4d, 0xad, 0xd4, 0x52, 0x64, 0xec, -0x27, 0x0c, 0x33, 0xd4, 0x57, 0x6b, 0xae, 0x5a, 0x09, 0xa1, 0x8f, 0x51, 0x84, 0x6e, 0xc8, 0x1b, -0xb0, 0x3b, 0x7a, 0xd3, 0x4c, 0xe4, 0xae, 0xb9, 0x64, 0x99, 0xc9, 0xee, 0xf5, 0xa5, 0xdd, 0xd7, -0x27, 0xf1, 0x35, 0x77, 0x22, 0xe4, 0x66, 0x7e, 0x70, 0x83, 0x73, 0x7a, 0xf6, 0x14, 0xf5, 0x04, -0x9c, 0xbb, 0x13, 0xed, 0x56, 0x99, 0x0f, 0xb1, 0x71, 0x48, 0x00, 0x63, 0xb5, 0x5c, 0x89, 0xfa, -0x56, 0x89, 0xdc, 0xca, 0x68, 0xd8, 0xb5, 0x97, 0x0c, 0x39, 0x35, 0xea, 0xde, 0x07, 0xf1, 0x0b, -0xe8, 0xfa, 0x94, 0x52, 0xb3, 0x6e, 0x86, 0x41, 0xb2, 0x44, 0xcf, 0x55, 0x24, 0x7f, 0xfa, 0xeb, -0xaa, 0x1e, 0xf2, 0xb3, 0x38, 0x2b, 0x37, 0x06, 0xa4, 0x8f, 0xa8, 0x91, 0xd6, 0x45, 0x59, 0x11, -0x83, 0xa3, 0x8d, 0xca, 0xea, 0x72, 0x18, 0x1e, 0xf4, 0xea, 0xe1, 0x6a, 0xce, 0xcc, 0xf5, 0x53, -0xba, 0xba, 0x0a, 0x29, 0x0c, 0x28, 0xa0, 0x02, 0x8a, 0x00, 0xab, 0x7d, 0x67, 0x0e, 0xa1, 0x69, -0x71, 0x67, 0x70, 0x37, 0x45, 0x70, 0x85, 0x1b, 0x23, 0x38, 0xf4, 0x3f, 0x81, 0xe6, 0xbe, 0x3e, -0xf1, 0x76, 0x8d, 0x2e, 0x91, 0xa9, 0x5d, 0xda, 0x4a, 0xa7, 0x28, 0xec, 0x15, 0x88, 0xc0, 0x61, -0x9e, 0x08, 0xf6, 0x23, 0x9a, 0xc6, 0xa2, 0xd5, 0x31, 0xad, 0xcf, 0x37, 0xbb, 0x4c, 0x13, 0xeb, -0x58, 0x33, 0xaf, 0x53, 0x8e, 0xd4, 0xd1, 0x56, 0xd6, 0xc6, 0x64, 0xa3, 0x26, 0xa8, 0x4a, 0xc1, -0x32, 0x58, 0xf3, 0xe9, 0x56, 0xb5, 0x2a, 0xfa, 0x14, 0xc9, 0x77, 0x3c, 0x0d, 0x83, 0xd4, 0xf7, -0xa6, 0x08, 0xd5, 0x72, 0x7e, 0xf3, 0x7a, 0xb7, 0x5a, 0x2f, 0x6d, 0x8b, 0xdf, 0x46, 0x23, 0x60, -0x54, 0x2d, 0xdc, 0xff, 0x00, 0x2a, 0x6f, 0x4d, 0x46, 0x8f, 0x51, 0xbc, 0x8f, 0x20, 0xd7, 0x0d, -0xab, 0x5a, 0xef, 0x46, 0x20, 0x64, 0x8a, 0xdd, 0x3b, 0x3b, 0x98, 0xea, 0xd5, 0x8f, 0x2b, 0xd4, -0x21, 0x29, 0x72, 0xbb, 0x87, 0x0c, 0x70, 0x6a, 0x23, 0x88, 0xcb, 0x29, 0xe0, 0xaf, 0xcc, 0xad, -0xe9, 0x5d, 0xad, 0xb9, 0x2b, 0x18, 0xab, 0x2d, 0xce, 0xa2, 0xca, 0xe3, 0xcf, 0x81, 0x5c, 0x9c, -0xf1, 0x83, 0x56, 0x8f, 0x71, 0x5e, 0x64, 0xd7, 0x2c, 0x9a, 0x3d, 0x3a, 0x6d, 0xca, 0x37, 0x23, -0x81, 0xcc, 0x72, 0x94, 0x3f, 0x75, 0xf9, 0x1e, 0xd5, 0xa4, 0x1b, 0xdf, 0xa5, 0x64, 0xde, 0xa6, -0x9d, 0x09, 0x37, 0x7b, 0xf5, 0xa9, 0xd5, 0xfd, 0x6a, 0x76, 0x33, 0x6b, 0x52, 0x40, 0xde, 0xf9, -0xf5, 0xab, 0x08, 0xe0, 0xe5, 0x49, 0xe0, 0xd0, 0xf5, 0x25, 0x04, 0x52, 0x14, 0x7d, 0xa4, 0xf4, -0x3c, 0x66, 0xbd, 0x6b, 0xc2, 0x97, 0xd1, 0xea, 0x16, 0xad, 0xa7, 0xdc, 0x61, 0xcc, 0x6b, 0xc0, -0x3d, 0xc5, 0x3b, 0xf5, 0x32, 0xc4, 0x46, 0xf1, 0x39, 0x5d, 0x5a, 0xdd, 0xf4, 0xdb, 0xd9, 0x6d, -0x8a, 0x92, 0x7e, 0xf2, 0x7b, 0x8a, 0xcd, 0x01, 0xe4, 0xe6, 0x53, 0xc7, 0xf7, 0x45, 0x68, 0x8e, -0x7b, 0xdd, 0x5c, 0x9d, 0x70, 0xbd, 0x2a, 0x40, 0x7e, 0xb5, 0x4a, 0xe4, 0xbf, 0x32, 0x75, 0x6a, -0xb1, 0x1b, 0xf3, 0x8c, 0xd6, 0xb1, 0x66, 0x32, 0x34, 0x61, 0x93, 0x06, 0xba, 0x4b, 0x0b, 0x9d, -0xac, 0x39, 0xe4, 0x57, 0x45, 0x36, 0x72, 0x56, 0x8d, 0xd5, 0x8f, 0xa7, 0xbe, 0x1e, 0x78, 0x81, -0x75, 0x1d, 0x3f, 0xfb, 0x3a, 0x79, 0x09, 0xb9, 0xb5, 0xc9, 0x8f, 0x77, 0xf1, 0x27, 0x1c, 0x7e, -0x07, 0xf9, 0xfb, 0x57, 0xa4, 0x57, 0x3d, 0x65, 0x69, 0xb3, 0xab, 0x0b, 0x3e, 0x7a, 0x6b, 0xcb, -0x40, 0xa2, 0xb2, 0x3a, 0x02, 0x8a, 0x00, 0x28, 0xa0, 0x02, 0xbc, 0x7f, 0xe2, 0xc7, 0x87, 0x6e, -0x75, 0x1b, 0x18, 0x75, 0x6b, 0x28, 0x04, 0x8d, 0x63, 0x1b, 0x0b, 0xad, 0xbf, 0x78, 0x27, 0x50, -0xd8, 0xee, 0x07, 0xcd, 0x9f, 0x63, 0x51, 0x51, 0x36, 0xb4, 0x1a, 0xdc, 0xf9, 0x4e, 0xec, 0x1c, -0xb0, 0x3d, 0x41, 0xe6, 0xb0, 0x2e, 0x48, 0x19, 0xce, 0x6a, 0x22, 0x68, 0x63, 0x4a, 0x1d, 0xb3, -0xb7, 0xe5, 0x07, 0xb9, 0xaa, 0x4d, 0x12, 0x83, 0x96, 0xf9, 0x8f, 0xa9, 0xab, 0x4c, 0xab, 0x5c, -0x89, 0xb8, 0xe4, 0xf7, 0xa8, 0x09, 0xef, 0xcf, 0xd6, 0xa9, 0x76, 0x2b, 0x5b, 0x10, 0x37, 0x53, -0x83, 0xce, 0x2a, 0x17, 0x38, 0xfa, 0x9a, 0x57, 0x1e, 0xb6, 0x3d, 0x82, 0xe1, 0x03, 0xae, 0x49, -0xae, 0x57, 0x50, 0x87, 0x86, 0xe3, 0xaf, 0x4a, 0xdb, 0x53, 0x04, 0xcf, 0x2e, 0xd7, 0x6c, 0xce, -0xe7, 0x20, 0x72, 0x0e, 0x41, 0xae, 0x59, 0xb3, 0x32, 0x6d, 0xc1, 0x32, 0xa7, 0x04, 0x57, 0x74, -0x1d, 0xe2, 0x63, 0x3d, 0xce, 0x8b, 0x4e, 0x53, 0x14, 0x00, 0x37, 0x52, 0x73, 0xf4, 0xab, 0xfe, -0x62, 0xb6, 0x40, 0x20, 0x91, 0xd4, 0x57, 0x0d, 0x65, 0x79, 0x33, 0xd0, 0xa2, 0xed, 0x15, 0x72, -0x29, 0x46, 0x46, 0x47, 0x51, 0xc8, 0x35, 0x76, 0x19, 0x77, 0xa2, 0x9c, 0xe4, 0xf4, 0x39, 0xed, -0x5c, 0xb2, 0x77, 0x37, 0xe9, 0x62, 0xd0, 0x6f, 0xae, 0x6a, 0x40, 0xdc, 0x75, 0xa5, 0xea, 0x4b, -0xd4, 0x98, 0x37, 0xe7, 0x9a, 0x91, 0x5b, 0xde, 0x9d, 0xcc, 0xd9, 0x23, 0x9e, 0x03, 0x83, 0x92, -0x3a, 0x9a, 0xdb, 0xd1, 0x75, 0x27, 0xb2, 0xbb, 0x86, 0xe1, 0x4e, 0x00, 0x6f, 0x9b, 0xdc, 0x54, -0xfa, 0x84, 0x95, 0xe2, 0x7a, 0xf6, 0xbf, 0xa7, 0x26, 0xb3, 0xa4, 0x2e, 0xa5, 0x6d, 0xf3, 0xdc, -0x5b, 0xa8, 0x6f, 0x97, 0xab, 0x2f, 0x71, 0x5e, 0x57, 0x9c, 0x7d, 0x6b, 0x54, 0xf4, 0x38, 0x23, -0xd8, 0x76, 0xee, 0x6a, 0x40, 0xc3, 0xf2, 0xa6, 0x8a, 0x7a, 0x92, 0x06, 0xa9, 0x95, 0xbd, 0xeb, -0x48, 0x99, 0x48, 0xb9, 0x1c, 0xbd, 0x3e, 0xb5, 0xaf, 0x6d, 0x36, 0x0e, 0x73, 0x5d, 0x11, 0x7a, -0x9c, 0xf3, 0x47, 0xa1, 0xf8, 0x5b, 0x5d, 0x97, 0x4b, 0xd4, 0x2d, 0xae, 0xe3, 0x61, 0x98, 0x9f, -0x24, 0x1e, 0x84, 0x77, 0x1f, 0x88, 0xaf, 0xad, 0x2c, 0xaf, 0x21, 0xbf, 0xb4, 0xb7, 0xbc, 0xb7, -0x6d, 0xd1, 0x5c, 0xa0, 0x75, 0x3e, 0x9e, 0xdf, 0x51, 0x46, 0x21, 0x5d, 0x29, 0x19, 0xe1, 0x1f, -0x2c, 0xe5, 0x1e, 0xe5, 0xaa, 0x2b, 0x94, 0xf4, 0x02, 0x8a, 0x00, 0x29, 0xad, 0xbb, 0x1f, 0x2e, -0x09, 0xcf, 0x3b, 0xbb, 0x8a, 0x1f, 0x90, 0x11, 0x5c, 0xdd, 0x5b, 0x59, 0xc2, 0xf7, 0x17, 0x73, -0xc5, 0x6f, 0x04, 0x7c, 0xb4, 0xb3, 0x30, 0x55, 0x1f, 0x89, 0xaf, 0x24, 0xf1, 0x3f, 0xc5, 0x6d, -0x2a, 0xda, 0x0b, 0x8b, 0x4d, 0x26, 0x0f, 0xed, 0x19, 0x24, 0x46, 0x8c, 0xcf, 0x70, 0x0a, 0xc4, -0x32, 0x31, 0xf7, 0x7a, 0xb7, 0xe9, 0x51, 0x39, 0xa8, 0x8d, 0x2b, 0x9f, 0x29, 0xea, 0x52, 0xb4, -0x92, 0xbb, 0x8f, 0x94, 0x39, 0xea, 0x3b, 0x56, 0x14, 0x88, 0xa3, 0x27, 0xa9, 0x3d, 0xcd, 0x66, -0xb6, 0x36, 0xb1, 0x9f, 0x2f, 0x7a, 0xcf, 0x90, 0x0e, 0x4f, 0xad, 0x5a, 0x57, 0x0b, 0x95, 0x1b, -0xf5, 0xa8, 0x18, 0xe3, 0x39, 0x38, 0x35, 0x57, 0xb1, 0x65, 0x76, 0xcf, 0x3c, 0xe0, 0x1e, 0xf4, -0xd4, 0x8d, 0x9d, 0xc2, 0x80, 0x49, 0x26, 0x9b, 0xd8, 0x1d, 0x96, 0xa7, 0xb1, 0x9f, 0x98, 0x11, -0xfc, 0xeb, 0x0e, 0xfa, 0x22, 0x43, 0x0c, 0x75, 0xf6, 0xad, 0x13, 0x30, 0xf3, 0x38, 0x2d, 0x5e, -0xd4, 0xb2, 0xb9, 0xc0, 0xe3, 0x9a, 0xe1, 0x5e, 0x24, 0x8d, 0xd9, 0xb0, 0x01, 0x3d, 0x6b, 0xaa, -0x94, 0xae, 0x8c, 0xe6, 0xb5, 0x2a, 0x4d, 0xa8, 0x79, 0x2a, 0x51, 0x0e, 0x58, 0xf7, 0x07, 0xa5, -0x37, 0x4d, 0x9a, 0x76, 0x9c, 0xb3, 0x6e, 0x65, 0x71, 0xc9, 0xf4, 0xa2, 0x71, 0x5c, 0xad, 0xb2, -0xe3, 0x39, 0x36, 0x92, 0x3a, 0x42, 0x49, 0xef, 0x8a, 0x8e, 0x27, 0xf2, 0xe5, 0x2a, 0x7e, 0xeb, -0xf4, 0xaf, 0x39, 0xbe, 0xe7, 0xa2, 0xae, 0x69, 0x06, 0xe3, 0xad, 0x48, 0x1b, 0x3d, 0xeb, 0x3b, -0xdc, 0x4c, 0x95, 0x5b, 0x3d, 0x7b, 0x54, 0xaa, 0xd8, 0xe7, 0xd6, 0x9d, 0xc8, 0x64, 0xe8, 0xc3, -0x18, 0x3d, 0x08, 0xef, 0x48, 0x8e, 0x62, 0x72, 0xa7, 0xa1, 0x3c, 0x1a, 0x4d, 0xeb, 0x74, 0x1b, -0x9e, 0xd7, 0xf0, 0xff, 0x00, 0x5b, 0x8e, 0x45, 0x6d, 0x36, 0xe4, 0xee, 0xdd, 0xf7, 0x43, 0x1e, -0xa3, 0x1d, 0x2b, 0x07, 0xc5, 0x7a, 0x43, 0xe9, 0x1a, 0xa4, 0xb8, 0x52, 0x2d, 0xae, 0x98, 0xc9, -0x0b, 0x63, 0x03, 0x04, 0xf4, 0xfc, 0x33, 0xfa, 0xd5, 0xc5, 0xea, 0x70, 0xcd, 0x72, 0xd4, 0x67, -0x31, 0xbb, 0x93, 0x9a, 0x70, 0x7e, 0xf9, 0xab, 0xb8, 0x31, 0xe1, 0xaa, 0x60, 0xfe, 0xf9, 0x35, -0xa2, 0xd8, 0x89, 0x13, 0x2c, 0xb8, 0x3c, 0x9e, 0xb5, 0x7e, 0x29, 0xc8, 0xc7, 0x3f, 0xad, 0x69, -0x16, 0x63, 0x35, 0x74, 0x6f, 0xd9, 0xdd, 0x10, 0x41, 0xc9, 0xeb, 0xeb, 0x5f, 0x45, 0xfc, 0x2e, -0xf1, 0x42, 0x3e, 0xfd, 0x16, 0xea, 0x5f, 0xf5, 0x9f, 0x35, 0xb9, 0x76, 0xfe, 0x2e, 0xeb, 0xf8, -0xff, 0x00, 0x4f, 0x7a, 0xde, 0x5e, 0xf4, 0x1a, 0x38, 0xef, 0xc9, 0x52, 0x32, 0x3d, 0xba, 0x8a, -0xe2, 0x3d, 0x40, 0xa0, 0xf2, 0x0f, 0x24, 0x67, 0xbf, 0xa5, 0x00, 0x52, 0xbb, 0xd4, 0x2c, 0xb4, -0xf8, 0x8c, 0xb7, 0xf7, 0x96, 0xf6, 0xca, 0xa3, 0x25, 0xa6, 0x70, 0xb9, 0xfa, 0x0e, 0xa6, 0xbc, -0xab, 0x5e, 0xf8, 0xb3, 0x67, 0x6a, 0x64, 0x87, 0x47, 0xb7, 0x17, 0x2c, 0x0e, 0x05, 0xdd, 0xc1, -0xc2, 0x9f, 0xa2, 0x7f, 0x89, 0xfc, 0x2a, 0x64, 0xfb, 0x0a, 0xfd, 0xcf, 0x0c, 0xd6, 0xbc, 0x51, -0xaa, 0x6a, 0xf2, 0xb4, 0x97, 0xb7, 0xb7, 0x13, 0x72, 0x48, 0x59, 0x24, 0x25, 0x53, 0x27, 0xb0, -0xe8, 0x07, 0xb0, 0xae, 0x4a, 0x6b, 0x92, 0x49, 0x24, 0xe4, 0xfa, 0x9e, 0xf5, 0x95, 0x9f, 0x53, -0x55, 0xdc, 0xc8, 0xb8, 0x70, 0xfb, 0xbd, 0xfd, 0xeb, 0x21, 0x9f, 0xaa, 0x9e, 0xa2, 0xa9, 0x16, -0xd9, 0x51, 0xce, 0x79, 0xaa, 0x32, 0x9c, 0x7b, 0xd3, 0xd4, 0x69, 0x26, 0x51, 0x72, 0x49, 0x3c, -0x11, 0xee, 0x6a, 0x16, 0xfc, 0x7a, 0x75, 0xc5, 0x3f, 0x52, 0x93, 0xea, 0x45, 0x8c, 0x9e, 0xbc, -0xd7, 0xb5, 0xfc, 0x29, 0xf8, 0x6d, 0x3f, 0x89, 0xef, 0xc6, 0xa5, 0x7c, 0x8d, 0x16, 0x91, 0x60, -0x44, 0xb3, 0x4b, 0x22, 0xf0, 0xf8, 0xe7, 0x68, 0x27, 0xb9, 0xc5, 0x5c, 0x12, 0x6f, 0x53, 0x3c, -0x45, 0x4b, 0x47, 0x4f, 0x42, 0x81, 0xce, 0x73, 0x55, 0x2e, 0x17, 0x72, 0x93, 0x56, 0x4e, 0xfb, -0x9c, 0x96, 0xa1, 0x6e, 0xd2, 0x6e, 0x55, 0x19, 0x2d, 0x5e, 0x77, 0xae, 0x69, 0xf3, 0x5b, 0xee, -0xcf, 0x05, 0xf9, 0xc8, 0xad, 0xe8, 0xc9, 0x5e, 0xc4, 0x54, 0x56, 0x57, 0x38, 0xc8, 0xed, 0xe4, -0x91, 0xfe, 0x61, 0xc0, 0x3c, 0xe6, 0xba, 0x48, 0x12, 0x38, 0x23, 0x5d, 0xb8, 0x19, 0xea, 0x6b, -0x4c, 0x45, 0xed, 0x64, 0x3a, 0x1f, 0x15, 0xcb, 0x11, 0x4e, 0x93, 0x64, 0x23, 0x67, 0x69, 0xc5, -0x12, 0x82, 0x46, 0x7b, 0x8e, 0x45, 0x79, 0xf2, 0x8d, 0x99, 0xdd, 0x09, 0x73, 0x2b, 0xa2, 0xdc, -0x32, 0xee, 0x40, 0x73, 0xcf, 0xbd, 0x5a, 0x53, 0x9f, 0xc7, 0xd6, 0xb2, 0xea, 0x5b, 0xda, 0xec, -0x90, 0x31, 0xe7, 0x9a, 0x78, 0x7e, 0xf9, 0xe6, 0x96, 0xc4, 0xbd, 0x74, 0x26, 0x57, 0xc1, 0xeb, -0x9a, 0x96, 0x43, 0xb9, 0x77, 0x03, 0xc8, 0xe6, 0x9e, 0xe4, 0xdf, 0x53, 0x63, 0x46, 0xd4, 0xa4, -0xb1, 0xbb, 0x86, 0xe5, 0x18, 0x82, 0x8d, 0xce, 0x3b, 0xd7, 0xbf, 0x6a, 0xd6, 0xf1, 0x78, 0xaf, -0xc3, 0x71, 0xdc, 0xc3, 0xf3, 0xde, 0x5b, 0x47, 0xe6, 0x21, 0xee, 0x78, 0xe9, 0x42, 0xd1, 0x9c, -0x98, 0x85, 0x6b, 0x49, 0x1e, 0x1c, 0xdb, 0x91, 0x8a, 0xb0, 0x20, 0x83, 0x82, 0x0f, 0x51, 0x49, -0xbb, 0xdf, 0xf3, 0xad, 0x93, 0x44, 0xbd, 0x87, 0x86, 0xa7, 0x86, 0x39, 0xeb, 0x9a, 0xad, 0x48, -0x96, 0xe4, 0xc1, 0xb3, 0xf5, 0xcd, 0x58, 0x49, 0x73, 0x5a, 0x27, 0xd0, 0xc9, 0x9a, 0x30, 0xcf, -0x8c, 0x73, 0x5d, 0x4e, 0x91, 0xac, 0x4d, 0x63, 0x73, 0x6f, 0x75, 0x04, 0xad, 0x1c, 0xb0, 0xba, -0xba, 0xb8, 0xea, 0x08, 0x39, 0x06, 0xb7, 0x84, 0x8e, 0x4a, 0xb1, 0x6c, 0xfb, 0x2b, 0xc2, 0x9e, -0x24, 0xb6, 0xf1, 0x36, 0x93, 0x0d, 0xec, 0x2e, 0xbf, 0x68, 0x40, 0x12, 0xe6, 0x11, 0xd5, 0x1f, -0xd7, 0x1e, 0x87, 0xa8, 0xff, 0x00, 0xeb, 0x57, 0x4d, 0x5c, 0xd3, 0x8f, 0x2c, 0x9a, 0x3b, 0x69, -0x4f, 0xda, 0x41, 0x36, 0x65, 0x6a, 0x5a, 0xbe, 0x99, 0xa2, 0x44, 0x66, 0xd4, 0x6f, 0x12, 0xdd, -0x1f, 0x73, 0x22, 0xc8, 0x72, 0xcd, 0x8e, 0xa1, 0x47, 0x53, 0xd7, 0xf5, 0xaf, 0x20, 0xf1, 0x0f, -0xc5, 0xc5, 0x08, 0xf0, 0x68, 0x70, 0x3c, 0x2e, 0x4f, 0xfc, 0x7e, 0x5c, 0x85, 0x66, 0xfc, 0x13, -0x90, 0x3f, 0x1c, 0xd5, 0x53, 0x87, 0x3e, 0xaf, 0x63, 0x2a, 0xb5, 0x7d, 0x9a, 0xe5, 0x8e, 0xe7, -0x8a, 0x6a, 0x9e, 0x21, 0xd4, 0x75, 0x49, 0x9e, 0xe2, 0xfa, 0xee, 0x6b, 0x89, 0x5b, 0xf8, 0xe5, -0x6c, 0x9c, 0x56, 0x0b, 0xdd, 0x13, 0x9e, 0x72, 0x7d, 0x4d, 0x4c, 0xd2, 0xb9, 0x54, 0xdb, 0xb1, -0x42, 0x59, 0xc9, 0xcf, 0x24, 0x56, 0x7c, 0x93, 0x7b, 0xd6, 0x2f, 0xcc, 0xea, 0x4e, 0xe5, 0x47, -0x97, 0x39, 0xe6, 0xb3, 0xa7, 0x6e, 0x77, 0xe7, 0xa7, 0xeb, 0x48, 0xbd, 0xde, 0xa5, 0x66, 0x6d, -0xc3, 0x22, 0xaa, 0x49, 0xea, 0x7f, 0x5a, 0x65, 0x24, 0x55, 0x7e, 0x33, 0xff, 0x00, 0xeb, 0xcd, -0x57, 0x63, 0xcf, 0xa9, 0xee, 0x28, 0xdc, 0xa3, 0xa7, 0xf0, 0x97, 0x87, 0x2f, 0x3c, 0x4b, 0xac, -0xd9, 0xe9, 0xd6, 0x91, 0x99, 0x1e, 0x79, 0x30, 0x73, 0xd0, 0x0e, 0xe4, 0x9e, 0xd5, 0xf7, 0x44, -0x90, 0x41, 0xe1, 0x4f, 0x0c, 0x59, 0xe8, 0xf6, 0x41, 0x61, 0x8d, 0x21, 0xdb, 0x2b, 0xa0, 0xc7, -0x98, 0x70, 0x32, 0x73, 0xef, 0xff, 0x00, 0xd6, 0xad, 0x22, 0xad, 0x1f, 0x53, 0x8b, 0x13, 0x3f, -0x7d, 0x25, 0xd0, 0xf9, 0x1f, 0xaf, 0x7e, 0x4d, 0x74, 0xbe, 0x1d, 0xf0, 0x96, 0xa5, 0xe2, 0x4b, -0x81, 0x1d, 0xbc, 0x4e, 0x20, 0xcf, 0xcf, 0x29, 0x53, 0x81, 0x54, 0xda, 0xdc, 0xdb, 0x53, 0x3f, -0xc5, 0x5a, 0x15, 0x86, 0x8f, 0x7a, 0xd6, 0xb6, 0xb7, 0x09, 0x75, 0x24, 0x5f, 0x2c, 0x8c, 0x9c, -0x85, 0x3e, 0x99, 0xaf, 0x2a, 0xf1, 0x0d, 0x88, 0xb8, 0xb6, 0x66, 0x00, 0x97, 0x8c, 0xe7, 0x81, -0xd6, 0x94, 0x1e, 0xa9, 0xb2, 0xad, 0xcd, 0x16, 0x8f, 0x2c, 0x91, 0x44, 0x65, 0x89, 0x00, 0x63, -0xa9, 0xac, 0xbb, 0x9b, 0xd6, 0x20, 0xc6, 0x98, 0x1e, 0xf5, 0xda, 0xe3, 0x7d, 0x0c, 0x13, 0x68, -0xb3, 0xa5, 0x47, 0x2a, 0xb3, 0x3b, 0x13, 0xb5, 0xbb, 0x1e, 0xf5, 0xba, 0xc7, 0x35, 0xc9, 0x88, -0x69, 0xca, 0xc8, 0xed, 0xc3, 0xdd, 0x42, 0xec, 0x8a, 0x27, 0xf2, 0xa5, 0x20, 0x9f, 0x95, 0xfa, -0x66, 0xb4, 0x95, 0xb8, 0xeb, 0xf8, 0xd7, 0x2c, 0xb5, 0x3a, 0x11, 0x28, 0x6f, 0xcc, 0xd4, 0x81, -0xb3, 0xdc, 0x9a, 0x48, 0x97, 0x72, 0x55, 0x39, 0xe7, 0xd6, 0xa6, 0x47, 0x1d, 0x0f, 0x23, 0xeb, -0x4d, 0xd9, 0xa2, 0x1e, 0x9a, 0x82, 0x37, 0x97, 0x21, 0xea, 0x43, 0x74, 0xaf, 0x69, 0xf8, 0x71, -0xe2, 0x21, 0x6f, 0x21, 0xb0, 0x9d, 0x81, 0x47, 0xc6, 0xd5, 0x63, 0xd4, 0x77, 0x14, 0x8c, 0xeb, -0xae, 0x68, 0x94, 0xbc, 0x6f, 0xa4, 0xfd, 0x8b, 0x55, 0x9e, 0xea, 0x21, 0xb6, 0xda, 0xec, 0xf9, -0x8b, 0x91, 0x81, 0x9c, 0x73, 0x5c, 0x3e, 0xef, 0xcf, 0xd6, 0xb5, 0x5a, 0xa4, 0xd9, 0xcd, 0x09, -0x5d, 0x06, 0xee, 0x69, 0xc1, 0xb9, 0x27, 0x35, 0x60, 0x4d, 0xbe, 0x9e, 0x24, 0xc1, 0xc9, 0x3d, -0x78, 0xaa, 0x4f, 0x53, 0x39, 0x2e, 0xac, 0xb4, 0x92, 0xf3, 0xd6, 0xaf, 0xc3, 0x73, 0xb7, 0xbf, -0x5a, 0xd2, 0x2c, 0xc6, 0x4a, 0xfa, 0x1e, 0xad, 0xf0, 0xdf, 0xc6, 0xf6, 0xfe, 0x18, 0xd5, 0xdd, -0xef, 0x96, 0x59, 0x6c, 0xae, 0xe1, 0x30, 0xc9, 0xe5, 0x30, 0xdc, 0x9c, 0x82, 0x1f, 0x1d, 0xf1, -0x8c, 0x7d, 0x09, 0xaf, 0x47, 0xd7, 0x7e, 0x33, 0x96, 0xf3, 0x21, 0xd0, 0xed, 0x52, 0x24, 0x61, -0x85, 0xbb, 0xb9, 0x3b, 0xa4, 0x3e, 0xe1, 0x7a, 0x0f, 0xc7, 0x35, 0x6e, 0x0a, 0xa3, 0x4d, 0x99, -0x46, 0x6e, 0x94, 0x5a, 0x47, 0x8a, 0xea, 0x3a, 0xed, 0xe6, 0xa5, 0x3c, 0x97, 0x17, 0x57, 0x12, -0xcb, 0x24, 0x84, 0x92, 0xf2, 0x39, 0x62, 0x6b, 0x1d, 0xae, 0x7d, 0xce, 0x7d, 0x73, 0x56, 0xec, -0xb6, 0x21, 0x45, 0xcb, 0x56, 0x53, 0x92, 0xe0, 0xf3, 0x93, 0x55, 0x5a, 0x6f, 0x7c, 0xd6, 0x13, -0xd4, 0xea, 0x82, 0x2b, 0xbc, 0xb9, 0xcd, 0x54, 0x79, 0x32, 0x0e, 0x4d, 0x73, 0xb4, 0x75, 0x26, -0x57, 0x69, 0x3a, 0xf3, 0x55, 0xe4, 0x6f, 0x53, 0x9f, 0xad, 0x22, 0xcc, 0xf2, 0xfb, 0x18, 0xa9, -0x3c, 0x1e, 0x46, 0x6a, 0x39, 0x18, 0x1e, 0xfe, 0xf4, 0xed, 0x72, 0xb5, 0xdc, 0xae, 0xe7, 0x3d, -0x69, 0x11, 0x0b, 0xb8, 0x03, 0x92, 0x4d, 0x26, 0xee, 0x55, 0xee, 0xac, 0x7d, 0xb7, 0xf0, 0x5f, -0xc1, 0xcb, 0xa1, 0xe8, 0x12, 0x6b, 0x37, 0xd1, 0x01, 0x79, 0xa9, 0x0c, 0xc6, 0xce, 0x30, 0xd1, -0xc5, 0xc7, 0x4f, 0xa9, 0xc8, 0xfc, 0x3d, 0xea, 0x7f, 0x18, 0x6a, 0x0f, 0x73, 0x72, 0xf1, 0x23, -0x1d, 0x80, 0x91, 0xc1, 0xe8, 0x2b, 0x77, 0xad, 0x91, 0xe6, 0x49, 0xb7, 0x27, 0x27, 0xd4, 0xf9, -0xea, 0xce, 0xd8, 0xcf, 0x20, 0x0f, 0xf2, 0xc7, 0xd4, 0xb3, 0x57, 0xa3, 0xcb, 0xe3, 0x43, 0x63, -0xa3, 0x0d, 0x1b, 0x47, 0x87, 0xec, 0x85, 0x86, 0x26, 0xbb, 0x1f, 0x7d, 0xfd, 0x81, 0xec, 0x2a, -0x25, 0x1b, 0xb3, 0xb6, 0xfd, 0x0f, 0x35, 0xba, 0x2d, 0x36, 0xe7, 0x72, 0x59, 0x9b, 0x92, 0x4f, -0x7a, 0xe7, 0x6e, 0xe2, 0xce, 0xe0, 0xc3, 0x21, 0xb8, 0x35, 0x4c, 0xa8, 0xb3, 0xc7, 0x7c, 0x47, -0x60, 0xd6, 0xd2, 0xc8, 0x17, 0x85, 0x6c, 0x91, 0x5c, 0x7c, 0x16, 0xe5, 0xe4, 0xcb, 0x8f, 0x94, -0x1c, 0xd7, 0x6c, 0x1d, 0xe2, 0x9b, 0x39, 0x5e, 0xf6, 0x3a, 0x45, 0x2b, 0x14, 0x7c, 0x63, 0x00, -0x71, 0x4b, 0x0c, 0xeb, 0x38, 0x24, 0x67, 0x23, 0xae, 0x6b, 0x82, 0xad, 0xf9, 0xb5, 0x3d, 0x5a, -0x5a, 0xc7, 0x41, 0x25, 0x04, 0xae, 0xef, 0x43, 0x9a, 0xb5, 0x04, 0xbe, 0x62, 0xee, 0xcf, 0xb6, -0x6b, 0x27, 0xb1, 0x57, 0xb9, 0x6c, 0x1c, 0xf7, 0xe6, 0x9f, 0x9c, 0x1e, 0xf9, 0xa9, 0x6b, 0xa8, -0x9d, 0xd9, 0x20, 0x6e, 0x33, 0x52, 0xab, 0x9e, 0xc7, 0xff, 0x00, 0xaf, 0x47, 0x99, 0x16, 0xb1, -0x23, 0x9d, 0xeb, 0x9e, 0xe3, 0xd6, 0xb4, 0xb4, 0xbb, 0xf9, 0x2d, 0x6e, 0x61, 0x9d, 0x18, 0x86, -0x8d, 0xc1, 0xa2, 0xe9, 0xea, 0x0d, 0x5d, 0x58, 0xfa, 0x0a, 0x61, 0x07, 0x8a, 0xfc, 0x34, 0x42, -0x85, 0x6b, 0xa8, 0x97, 0xcc, 0x47, 0x3d, 0x46, 0x33, 0xc5, 0x78, 0x84, 0x8a, 0xd1, 0xbb, 0x23, -0x64, 0x32, 0x1c, 0x11, 0xdc, 0x55, 0xc7, 0x55, 0x63, 0x82, 0x1a, 0x49, 0xa1, 0x99, 0xee, 0x4e, -0x69, 0xe1, 0xaa, 0xca, 0x63, 0x83, 0xf3, 0xd7, 0x34, 0xfd, 0xd9, 0x07, 0xbf, 0xd6, 0xad, 0x33, -0x39, 0x58, 0x7a, 0x49, 0xeb, 0xd6, 0xa6, 0x17, 0x01, 0x7d, 0xcf, 0xb5, 0x52, 0x21, 0xa2, 0x54, -0xb9, 0xf9, 0xf1, 0xbc, 0x09, 0x31, 0x90, 0x33, 0xce, 0x2b, 0x52, 0x3b, 0xaf, 0x94, 0x10, 0x7a, -0xf5, 0x26, 0xb4, 0x52, 0x32, 0x94, 0x6e, 0x48, 0x6e, 0x4f, 0x72, 0x7e, 0xb4, 0xc3, 0x39, 0x27, -0xa9, 0xfa, 0xd5, 0x36, 0x34, 0x88, 0x5e, 0x52, 0x79, 0xcd, 0x56, 0x32, 0xf3, 0xd6, 0xb3, 0x96, -0xa6, 0x91, 0x22, 0x69, 0x7a, 0xf3, 0xcd, 0x57, 0x67, 0x27, 0x26, 0xb1, 0x69, 0x1b, 0x26, 0xc8, -0x59, 0xff, 0x00, 0xc9, 0xa8, 0x19, 0xfa, 0xf3, 0x52, 0xcd, 0x0a, 0x53, 0x65, 0x81, 0x3d, 0xc7, -0x23, 0x35, 0x18, 0x93, 0x72, 0xe7, 0x9c, 0xf7, 0xf6, 0xa5, 0xea, 0x69, 0xe6, 0x86, 0x12, 0x4f, -0x39, 0x39, 0x3c, 0x1a, 0xf5, 0x2f, 0x85, 0xde, 0x08, 0x93, 0xc5, 0xfa, 0xe2, 0x24, 0xbf, 0xbb, -0xb2, 0xb4, 0x1e, 0x75, 0xc4, 0xc7, 0x3c, 0x28, 0x23, 0x8f, 0xa9, 0xcd, 0x54, 0x15, 0xe5, 0x63, -0x2a, 0xf3, 0x70, 0x83, 0x67, 0xdb, 0x97, 0xd2, 0xc7, 0x65, 0xa6, 0x25, 0xbd, 0xb8, 0xf2, 0xe2, -0x8a, 0x30, 0x8a, 0xaa, 0x38, 0x55, 0x1c, 0x01, 0xfa, 0x57, 0x85, 0x6b, 0x17, 0x8f, 0x24, 0xf2, -0x60, 0xf0, 0xc4, 0xe4, 0xfa, 0xd6, 0xcf, 0x57, 0x73, 0xcb, 0x84, 0xba, 0x1f, 0xff, 0xff, 0xd9 -}; - -static unsigned int PIC_LEN_2 = 11584; - - #endif //_SAMPLE_JPEG_H_ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/sample_pcmu.h b/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/sample_pcmu.h deleted file mode 100644 index 3bf6ca7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/framework/mmf_source_modules/sample_pcmu.h +++ /dev/null @@ -1,14596 +0,0 @@ -#ifndef SAMPLE_PCMU_H -#define SAMPLE_PCMU_H - -const int pcmu_sample_size=466652; - -#include "section_config.h" -SDRAM_DATA_SECTION const unsigned char pcmu_sample[]={ -0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff -,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff -,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff -,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff -,0xff,0xff,0xff,0xff,0xff,0xff,0xff -,0xff,0xfe,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0x7e,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xfe,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff -,0xff,0xff,0xff,0xff,0xfe,0xff,0x7e,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0x7e,0xff,0x7e,0xfe,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xff -,0xfe,0x7e,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xfe,0xff,0xfe,0xfe,0xfe,0xff -,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0x7e,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff -,0xfe,0x7e,0x7e,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xfe,0xff -,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0x7e,0x7e,0xff,0xff -,0xff,0xff,0x7e,0xff,0xff,0x7e,0xfe,0xff,0xff,0x7e,0x7e,0xfe,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xfe,0xff,0xff,0xff,0x7e,0xff -,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xfe,0xfe,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xfe,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0x7e,0xfe,0xff -,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xfe,0x7e,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0x7e,0xff,0xff -,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xfe,0xff,0x7e,0xfe,0x7e,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xfe,0xff -,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfe,0x7e,0xff,0xff,0xff,0xfe,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0x7e,0x7e,0xff,0xfe,0xff,0x7e,0xff,0xff -,0xff,0xff,0xff,0xfe,0xff,0x7e,0xff,0xfe,0xff,0xfe,0xff,0xff,0xfe,0xff,0x7e,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0xfe,0xff -,0x7e,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xfe,0xff,0x7e,0xff,0x7e -,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0xfe,0xfe,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff -,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xfe,0xfe,0x7e,0xff,0xff,0xfe,0xff,0xfe,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xfe,0xff,0xff,0xff -,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xfe,0xff,0xfe,0xff,0xff,0xff,0xff,0xfe,0xff -,0xff,0xff,0xff,0xff,0xff,0x7e,0x7e,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xfe,0xff,0xff,0xff,0xff -,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0x7e,0xff,0xff,0xff,0xff,0xfe,0xff,0x7e,0xfe,0xff,0xfe,0xff,0xff,0xff,0xff,0xfe,0xfe,0xff,0xff,0xff,0xff,0x7e -,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x7e -,0xfe,0x7e,0xff,0x7e,0xfe,0x7e,0xfe,0xff,0xff,0x7e,0x7e,0x7e,0x7e,0xff,0x7d,0xfe,0xfe,0xfe,0x7d,0xfc,0x7c,0xfd,0x7d,0xfc,0x7b,0xfc,0x7d,0xfc,0x7c,0xfc,0x7c,0xfb -,0x7c,0xfe,0x7e,0xff,0xfe,0x7e,0xfb,0xfb,0xf9,0x79,0xfb,0x6c,0xfa,0x75,0xef,0x6e,0xeb,0x69,0xe6,0x60,0xdd,0x36,0x44,0xb7,0x23,0x2e,0xbd,0x4b,0xaf,0xb8,0x20,0x48 -,0xde,0x2b,0xc2,0x41,0x1f,0x77,0x63,0x60,0xa0,0xe6,0x47,0xa6,0xde,0xf0,0xae,0x2c,0x44,0xaf,0x4a,0xac,0xb0,0x26,0x74,0xd1,0x32,0xae,0xd4,0x2c,0xaf,0xc1,0xf0,0xa5 -,0x44,0x3a,0xad,0x3f,0x5c,0xb3,0x27,0x3c,0xbc,0x3b,0xab,0xaf,0x2b,0xc3,0xc5,0x33,0xb6,0x3d,0x24,0xc2,0xdd,0xe6,0xa7,0x35,0x2c,0xc4,0x33,0x55,0xba,0x26,0x2f,0xcb -,0x2f,0xc5,0x77,0x24,0xc3,0xc5,0x38,0xb1,0x44,0x27,0xb9,0xc5,0xb6,0xa5,0x3d,0xf1,0xac,0x3e,0xc8,0xaf,0x45,0xbd,0xb0,0xd8,0xae,0x54,0x2d,0xb4,0xc4,0x4e,0xb1,0x56 -,0x3d,0xae,0xc3,0xc6,0xbc,0x2f,0xe1,0xb3,0x38,0xe4,0xdb,0x29,0x3b,0x45,0x40,0xb2,0x62,0x44,0xb4,0x3a,0x2e,0xcd,0x3f,0x3e,0xd6,0x38,0x49,0x52,0x2c,0x5e,0xe6,0x34 -,0xc9,0xbf,0x3b,0x3e,0x30,0x32,0xc8,0x6d,0xdd,0xb8,0x3d,0x5c,0xad,0xc1,0xbf,0xbb,0xed,0xb1,0xb0,0xcc,0xb0,0xd6,0x3e,0xb1,0xb4,0x5b,0xf0,0x4d,0xce,0xb2,0x69,0xd9 -,0xc2,0x4a,0xb5,0xa6,0xd5,0x3f,0x33,0x30,0xd4,0xcb,0xdb,0xc0,0x40,0x44,0xbf,0x46,0x2c,0x32,0x36,0x50,0xda,0x38,0x3e,0x3e,0x39,0xb7,0xb0,0x61,0x38,0x33,0x3a,0x51 -,0x3a,0x34,0x5a,0x3c,0x4f,0xbc,0x62,0x3e,0x44,0x5a,0xbe,0xbf,0x6f,0xc3,0xc0,0xbd,0xab,0xb7,0x5f,0x4d,0x68,0xb8,0xae,0xc7,0x7b,0x63,0x51,0xb5,0xa8,0xb7,0xd3,0x4c -,0x6b,0xc2,0xdf,0xe9,0xcf,0xdf,0xbd,0xac,0xc4,0x3d,0x2d,0x2f,0xd9,0xcf,0x58,0x45,0x2d,0x2f,0xcb,0xbb,0x5d,0x3d,0x31,0x42,0xdb,0x6e,0x60,0x32,0x2e,0xf1,0xc0,0xd4 -,0x4e,0x3b,0x3d,0xcf,0xfc,0x3d,0x35,0x29,0x4d,0xae,0xad,0xbf,0x37,0x30,0xd9,0xb8,0xb6,0xb1,0x49,0x33,0xbf,0xb0,0xaf,0xc1,0x3f,0xec,0xc5,0xe7,0xd5,0x41,0x2f,0xbc -,0xa3,0xa8,0xb3,0x40,0x38,0xe7,0xc8,0xb5,0xc2,0x2f,0x32,0xbd,0xb7,0xb6,0xec,0x2f,0x42,0x4d,0x47,0xd2,0x3a,0x29,0x6c,0xba,0xc3,0xc9,0x3a,0x40,0xc1,0xd0,0xc5,0x43 -,0x21,0x36,0xb9,0xaf,0xaf,0x48,0x26,0x2d,0x3c,0xd4,0xbe,0x3a,0x35,0xc5,0xbd,0xbb,0xbe,0x3b,0x49,0xc6,0xbe,0xb1,0x58,0x27,0x45,0xb4,0xb5,0xb2,0x4d,0x2e,0x4b,0x54 -,0xc4,0xbc,0x35,0x35,0xc5,0xb9,0xad,0xb0,0x42,0x5d,0xd9,0xd7,0xb5,0x4c,0x36,0xcd,0xc7,0xd6,0xd7,0x34,0x30,0xd9,0xbb,0xad,0xc5,0x27,0x2d,0xcc,0xb4,0xa4,0xad,0x3e -,0x3e,0x4b,0xe7,0xc7,0x38,0x2f,0x65,0xd6,0xc7,0xbd,0x36,0x2d,0x59,0xcb,0xb3,0xd8,0x2a,0x39,0xc5,0xb7,0xa8,0xbe,0x31,0x37,0x4a,0xc5,0xb8,0x35,0x29,0x44,0x4f,0xba -,0xaf,0x3e,0x37,0x58,0x59,0xc4,0x63,0x2c,0xea,0xb2,0xaf,0xa7,0x6d,0x29,0x3c,0xc6,0xae,0xaf,0x33,0x29,0x49,0x5c,0xad,0xab,0x39,0x35,0x59,0xd5,0xaf,0x50,0x27,0xdf -,0xb7,0xae,0xa0,0x65,0x27,0x3f,0xd7,0xb2,0xb5,0x2d,0x32,0xdd,0xfa,0xaa,0xbc,0x25,0x32,0xf0,0xbd,0xa9,0x52,0x28,0x6e,0xd7,0xb6,0xa5,0x3a,0x2d,0xd6,0xee,0xba,0x69 -,0x20,0x37,0xbf,0xbe,0xa3,0x5f,0x1a,0x33,0xc7,0xaf,0xa7,0x31,0x2a,0xdb,0x65,0xa8,0xa4,0x29,0x2d,0xca,0xcd,0xa9,0x5f,0x1e,0x39,0x5a,0xc0,0xa2,0x3a,0x20,0xef,0xe3 -,0xb4,0xaa,0x29,0x34,0xb6,0xc1,0x9e,0xae,0x22,0x3e,0xcd,0xe9,0xaa,0x3a,0x26,0xbc,0x46,0xcf,0xab,0x21,0x28,0xac,0xba,0xa6,0xb9,0x1e,0x43,0xcb,0xbf,0x99,0xce,0x1e -,0x74,0x62,0xd7,0xaa,0x26,0x27,0xca,0x3a,0xa8,0xab,0x1c,0x37,0xac,0xbf,0x9e,0xc7,0x1f,0xd5,0x57,0xc3,0x9d,0x29,0x1e,0xbf,0x42,0xb7,0xad,0x1b,0x2b,0xcc,0x3e,0x9d -,0xbf,0x19,0xba,0xad,0xbf,0x9d,0x2e,0x1d,0xba,0x6a,0xa6,0x9e,0x18,0x20,0xb5,0x5f,0x9e,0xb9,0x16,0x3a,0x64,0xf6,0x98,0x3e,0x1a,0xb2,0xc0,0xa9,0x9a,0x1f,0x21,0xcf -,0x3e,0x99,0xa3,0x16,0x38,0xb7,0x4c,0x9d,0x51,0x18,0x5c,0x41,0xb0,0x9b,0x1f,0x20,0xa9,0xd3,0x9f,0xa3,0x18,0x2e,0xc3,0x60,0x98,0x4e,0x14,0xcf,0xd2,0xbd,0x9b,0x22 -,0x19,0xda,0x43,0x9c,0x9c,0x18,0x2f,0xaa,0xc2,0x97,0xbe,0x13,0x32,0x46,0xbb,0x97,0x25,0x18,0xbf,0x42,0xa8,0x9d,0x1c,0x24,0xc1,0xd8,0x98,0xbc,0x15,0x5f,0xaf,0xb2 -,0x98,0x37,0x18,0x63,0x4c,0xa7,0xa2,0x17,0x1f,0xb0,0xc6,0x9e,0xbe,0x14,0x2e,0xb8,0xa8,0x96,0x30,0x16,0xc3,0xb7,0xa4,0x9a,0x23,0x1d,0xd3,0xc1,0x9d,0xbd,0x12,0x25 -,0xbf,0xb7,0x9a,0xdf,0x1b,0x3c,0xda,0xa1,0x9c,0x21,0x1e,0xba,0xb6,0x9e,0xac,0x19,0x20,0x59,0xb7,0x9e,0x36,0x17,0x3e,0xc3,0xa9,0x9e,0x33,0x20,0x6f,0xac,0x99,0xaf -,0x18,0x1f,0xec,0xad,0x9b,0xda,0x19,0x23,0x4b,0xa6,0xa2,0x26,0x1c,0x4a,0xb3,0x9a,0xa4,0x22,0x20,0x4a,0xa5,0x97,0xce,0x1a,0x2c,0xe5,0xa9,0x9f,0x3e,0x1e,0x2e,0xd5 -,0xa3,0xbd,0x1c,0x1f,0x4f,0xa7,0x99,0xb2,0x27,0x2d,0xca,0xa2,0xa6,0x29,0x1d,0x3b,0xb4,0x9d,0xa9,0x26,0x1e,0x31,0xac,0x9d,0x43,0x1c,0x26,0x51,0xa2,0x9b,0xd7,0x2c -,0x3c,0xbf,0xa0,0xbf,0x1d,0x1d,0x34,0xb0,0x9c,0xb7,0x28,0x2b,0x59,0xa7,0xab,0x27,0x1e,0x3a,0xb6,0x9b,0xa0,0x39,0x2f,0x47,0xb5,0xa5,0x37,0x1c,0x29,0x41,0xb2,0xa5 -,0x52,0x2f,0x69,0xb6,0xa7,0x76,0x1b,0x1f,0x56,0xac,0x9d,0xa9,0x3e,0x47,0xc9,0xb1,0xb5,0x2c,0x20,0x2d,0x4b,0xb3,0xb3,0x4a,0x38,0xe2,0xaf,0xac,0xfb,0x29,0x2d,0x55 -,0xb7,0xac,0xba,0x5b,0x53,0xc5,0xb0,0x5a,0x24,0x22,0x29,0xec,0xad,0xb9,0xba,0xcb,0xdf,0xab,0xbb,0x33,0x32,0x35,0x70,0xae,0xc4,0x5e,0xe8,0x46,0xbd,0xad,0x3d,0x2a -,0x28,0x29,0xda,0xbd,0xdc,0xbb,0xd9,0xc2,0xa5,0xdb,0x38,0x3c,0x30,0xc9,0xb9,0xeb,0xb9,0xe6,0x41,0xb7,0xdb,0x40,0x3f,0x27,0x47,0xc8,0x63,0xaf,0xbb,0xdd,0xb4,0xce -,0x2f,0x39,0x2c,0x2c,0xc7,0x3b,0xbf,0x97,0xa0,0xb3,0xa9,0x29,0x34,0xb7,0x19,0x26,0xab,0xa9,0x97,0xa9,0x18,0x27,0x22,0x17,0x2b,0x3f,0x43,0xbe,0x9f,0xa9,0xa8,0xaa -,0x9c,0xbe,0x27,0x3b,0x1a,0x11,0xa5,0x8b,0x9b,0x9f,0x4b,0x1f,0x0e,0x0b,0x41,0xaf,0xca,0xb9,0x3c,0x1e,0x3f,0x9a,0x95,0x8d,0x86,0xa8,0x24,0xd3,0x28,0x0b,0x0c,0x2e -,0x99,0x8e,0x3d,0x17,0x2b,0xdc,0x2d,0x0b,0x07,0x12,0x98,0x82,0x84,0x8e,0x39,0x2b,0x97,0xaf,0x15,0x18,0x24,0xa3,0x8a,0x9a,0x0b,0x06,0xbc,0xd3,0x1b,0x38,0x21,0x09 -,0x14,0x8c,0x86,0x91,0xb3,0xaa,0x91,0x8e,0xe3,0x05,0x05,0x2d,0x8d,0x92,0x2f,0x28,0xaf,0xae,0xb4,0x35,0x0d,0x13,0x33,0xad,0xa8,0xb7,0xbf,0xb9,0x8f,0x85,0x9a,0x0f -,0x0a,0x08,0x09,0x41,0x8f,0x91,0x9f,0x98,0x9c,0x23,0x0b,0x07,0x15,0x9d,0x91,0x91,0x8d,0x8b,0x94,0xb4,0x36,0x0e,0x08,0x16,0x2b,0x1c,0x49,0x98,0x9d,0x2e,0x17,0x27 -,0x1a,0x3f,0x8d,0x8e,0x1d,0x0e,0x9a,0x84,0x8b,0x9b,0x9c,0xb8,0x6a,0x12,0x04,0x03,0x0f,0xa8,0xa7,0xa9,0xa5,0x21,0x17,0x9e,0x8e,0x9e,0xbe,0x31,0x24,0xa3,0x91,0xce -,0x26,0x9c,0x8e,0xc7,0x17,0x0c,0x0c,0x32,0x8e,0x88,0xa8,0x11,0x12,0xa0,0x93,0x1e,0x0d,0x14,0x6d,0x93,0x94,0xd0,0x23,0x1e,0x18,0x2f,0x3c,0x18,0x2d,0x97,0x8c,0x94 -,0x61,0x0f,0x14,0x98,0x83,0x8e,0x5c,0x55,0xca,0x2b,0x1d,0x1e,0x14,0x15,0x37,0xb4,0x48,0x1c,0x1d,0xcd,0x8d,0x8c,0xc7,0x16,0x52,0x9f,0xca,0xaf,0x9e,0xae,0xe2,0xaa -,0xa4,0xa5,0x49,0x1a,0x0c,0x0a,0x24,0xb5,0x2f,0x12,0xc6,0x97,0xa1,0xa7,0x96,0x9e,0xbe,0xc9,0x23,0x35,0x28,0x2b,0xdf,0xa6,0x9a,0xa6,0xf0,0x1f,0x0d,0x16,0xa1,0x8d -,0xa0,0x22,0x3d,0xa5,0x98,0xc1,0x13,0x0c,0x2a,0x8e,0x8d,0x9e,0x54,0x1f,0x13,0x15,0x2e,0x2e,0x5d,0xcd,0xbc,0x9e,0x36,0x0a,0x0c,0xa6,0x85,0x85,0x92,0xd8,0x23,0x25 -,0x39,0xa3,0xd8,0x12,0x1a,0xe0,0x9a,0xae,0x5c,0x25,0x1d,0x4c,0x27,0x10,0x11,0x9f,0x88,0x8e,0x99,0xac,0xc8,0xb3,0x59,0xbf,0xbf,0x24,0x16,0x1a,0xc3,0xad,0xb6,0x39 -,0x21,0x14,0x0f,0x25,0xd8,0x9e,0x8f,0x8c,0x94,0x4f,0x1a,0x18,0x4e,0x9f,0xa5,0xb7,0x2b,0x27,0x31,0x24,0xb7,0x90,0x8c,0xa7,0x11,0x0d,0x1e,0xbb,0x45,0x22,0xfb,0x97 -,0x91,0xab,0xb1,0x32,0x13,0x16,0x20,0x22,0x2a,0xb0,0x97,0x93,0x98,0x3d,0x10,0x18,0xd2,0x95,0x94,0x9b,0xae,0xeb,0xbd,0xb6,0xb6,0x2b,0x15,0x11,0x21,0x49,0x27,0x1e -,0x51,0x9c,0x9b,0x37,0x14,0x18,0x40,0x9f,0x97,0x99,0xa3,0xa4,0x9e,0x9c,0xa2,0x41,0x1f,0x1f,0x31,0xd7,0x44,0x2e,0x1e,0x16,0x18,0x2e,0xb4,0xa7,0xa8,0xb8,0xac,0xab -,0x39,0x18,0x24,0x9a,0x8d,0x9b,0xe2,0x2c,0x28,0x29,0x2a,0xb8,0x9a,0x99,0xc0,0x1e,0x1b,0x36,0xe7,0x29,0x25,0x54,0xa6,0x9c,0xa6,0xbf,0x7c,0x53,0x35,0x1c,0x11,0x1a -,0xb3,0x98,0x99,0xce,0x16,0x15,0x56,0x99,0x8f,0x93,0xa3,0x38,0x27,0xbd,0x9e,0xaf,0x28,0x15,0x17,0x33,0x5c,0x2f,0x5c,0xa2,0x9f,0xc7,0x1c,0x0e,0x17,0xb7,0x92,0x8e -,0x95,0xad,0x52,0x4b,0xfe,0x4e,0x2e,0x2c,0x31,0x2f,0x35,0x79,0xc8,0x43,0x25,0x21,0x39,0xc2,0xaf,0xa7,0x9e,0x98,0x9f,0x2a,0x11,0x21,0xa8,0x9c,0xb0,0x2a,0x1f,0x25 -,0x2a,0x4e,0xa7,0x98,0x95,0xaf,0x23,0x24,0x36,0x3c,0x40,0x33,0xde,0x9c,0x9a,0xb5,0x2d,0x22,0x32,0xe3,0x2a,0x17,0x1d,0xc7,0x9c,0x9e,0xc1,0x4c,0x46,0x43,0x7a,0xaf -,0x9c,0x9d,0xef,0x2d,0xcd,0xa8,0xb9,0x22,0x11,0x18,0x34,0x46,0x5c,0xb1,0xa2,0x9f,0xb3,0x29,0x18,0x22,0xbb,0x9d,0xa0,0xae,0xad,0xb1,0xb3,0xc6,0x2d,0x25,0x34,0x34 -,0x3c,0xb5,0xaf,0x68,0x20,0x13,0x1e,0xae,0x9a,0x9f,0xaf,0xaf,0xa6,0xb6,0x2e,0x20,0x2f,0xb5,0xac,0xdb,0x32,0x2c,0x35,0x51,0x6f,0xc3,0x9f,0xa0,0x4e,0x24,0x21,0x3b -,0xab,0xaf,0x3e,0x4b,0xb2,0xa5,0xb2,0x37,0x2f,0x48,0x3c,0x24,0x1c,0x2b,0xaa,0x9f,0xdb,0x2b,0x33,0x4e,0xb8,0xac,0xa7,0x9e,0xa6,0xc1,0xbe,0xac,0xaf,0x4e,0x1c,0x12 -,0x1b,0x2a,0x33,0x47,0xb1,0x9c,0x9b,0xbb,0x1f,0x14,0x1f,0xb0,0x9d,0x9c,0x9c,0xa2,0xac,0xbb,0x2b,0x24,0x55,0x4f,0x2c,0x2a,0x33,0x62,0x7a,0x2e,0x24,0x32,0x52,0xbf -,0xae,0xaa,0x9e,0xa6,0xc0,0x53,0x3d,0xc3,0xac,0xd5,0x28,0x1c,0x1e,0x46,0xcf,0x43,0xee,0xa5,0x9c,0xab,0x39,0x21,0x2a,0xe9,0xb0,0xad,0xa5,0xa0,0xb0,0x38,0x2f,0x46 -,0x41,0x3b,0x27,0x19,0x24,0x59,0xcb,0xb4,0xb8,0xc7,0xbb,0xc0,0x46,0xb9,0x9e,0x9f,0xa5,0xb7,0xd6,0xbf,0x47,0x1d,0x13,0x13,0x1c,0x2b,0xce,0x9f,0x99,0xa3,0xd3,0x24 -,0x1f,0x45,0xb6,0xb4,0xaf,0xa3,0x9d,0x9f,0x5e,0x29,0x32,0x6a,0xc9,0x41,0x27,0x2b,0x42,0x5b,0xe7,0x43,0xf8,0xb6,0xcb,0x73,0xc6,0xca,0xc4,0xb5,0xcd,0xf8,0xad,0xac -,0xc0,0x3c,0x1f,0x1b,0x26,0x38,0x43,0xb9,0xa2,0xa5,0xe7,0x2f,0x3e,0xbc,0xac,0xdd,0x29,0x2b,0x50,0xb6,0xa2,0xa5,0xc4,0xce,0xde,0x27,0x1d,0x1e,0x25,0xec,0xb8,0xd0 -,0xb6,0xaf,0xba,0xaf,0xad,0xaa,0xac,0xc9,0x4d,0xbe,0xaa,0xaf,0x3d,0x1c,0x1b,0x20,0x2c,0x57,0xb6,0xb8,0xed,0x2f,0x20,0x29,0xc2,0x9c,0x96,0x9e,0xbc,0x37,0x2e,0x46 -,0xc3,0xac,0xaa,0x51,0x1e,0x22,0x43,0xad,0xb1,0x26,0x17,0x1e,0x35,0xbe,0xa2,0xa9,0xac,0xa1,0xa7,0xc5,0x51,0x40,0x51,0xf6,0x3a,0x27,0x29,0x44,0xb9,0xae,0xb8,0xd7 -,0x34,0x25,0x23,0x38,0xad,0x9b,0x9e,0xa8,0xaf,0x69,0x68,0x5b,0x3f,0x60,0xef,0x2b,0x1c,0x18,0x25,0xad,0x9d,0xa6,0x52,0x26,0x2d,0xcc,0xb5,0xa9,0x9f,0xa7,0xae,0xaa -,0xa9,0xac,0x3c,0x1a,0x14,0x17,0x1c,0x2c,0xc7,0xa8,0x9d,0xa3,0xcc,0x26,0x20,0x34,0xc7,0xae,0xaa,0xb3,0xb9,0xab,0xb2,0xb9,0xab,0xb3,0x31,0x1b,0x15,0x1f,0x74,0xb8 -,0xb2,0xaf,0xcc,0x3c,0x2d,0x2d,0xcd,0xa3,0xa0,0xba,0x34,0x2b,0xc3,0x9e,0x9f,0xc3,0x1d,0x15,0x1d,0x47,0xb5,0xa8,0xaf,0xf3,0x48,0x5f,0xb1,0xab,0xb8,0x72,0x3b,0x36 -,0x3a,0x56,0xb2,0x9f,0x9e,0xac,0x3c,0x16,0x0f,0x1b,0x4b,0xac,0xad,0x6d,0x3f,0xcf,0xae,0xa3,0xa4,0xb0,0xd0,0x66,0x6d,0xd8,0xe0,0x67,0xcc,0xda,0x4c,0x26,0x1a,0x21 -,0x63,0xa9,0xb7,0x29,0x19,0x29,0xaa,0x97,0x96,0xad,0x30,0x2b,0x53,0xb5,0xb3,0xbb,0xbe,0xd4,0x4b,0xf0,0xdc,0x32,0x23,0x28,0x33,0x40,0x32,0x28,0x40,0xab,0x97,0x94 -,0xa4,0x3e,0x2e,0x47,0xd2,0x5f,0x2d,0x26,0x3a,0xc0,0xb1,0x74,0x31,0x38,0x47,0xcd,0xea,0x3b,0x3c,0xb0,0x9d,0x9c,0xa3,0x5a,0x2b,0x3a,0xc2,0xbe,0x47,0x1f,0x14,0x1b -,0x58,0x9e,0x9b,0xca,0x20,0x23,0x68,0xae,0xbb,0x7a,0xbb,0xa2,0x97,0x99,0xaf,0x3c,0x27,0x25,0x2e,0x2f,0x1e,0x1c,0x3d,0xab,0x9e,0xb0,0x2c,0x1d,0x2a,0xaf,0xa8,0xf7 -,0x28,0x3c,0xa0,0x92,0x96,0xb5,0x36,0x2d,0x2e,0x2f,0x29,0x23,0x2d,0xd1,0xad,0xa9,0xc4,0x29,0x20,0x46,0xa4,0xa3,0x54,0x1f,0x27,0xac,0x94,0x99,0x6c,0x1e,0x1f,0x4f -,0xab,0xc5,0x1e,0x18,0x2c,0xad,0x99,0x9c,0xc6,0x2d,0x2d,0x66,0xb9,0xba,0x47,0x5b,0xac,0xa6,0xaf,0x57,0x2f,0x28,0x34,0x4c,0x2d,0x1c,0x1c,0x5c,0x9d,0x98,0xb1,0x2c -,0x2d,0xb9,0x9b,0x99,0xbd,0x20,0x21,0xc2,0x9f,0xa0,0xc1,0x23,0x1a,0x29,0xcc,0xdf,0x24,0x18,0x23,0xaf,0x9a,0xa8,0x39,0x2c,0xb7,0x95,0x95,0xeb,0x18,0x20,0xb3,0x9c -,0xa3,0x44,0x23,0x27,0x41,0xc5,0x62,0x20,0x14,0x23,0xaa,0x98,0x9d,0xbd,0x3f,0x6b,0xa4,0xa6,0x34,0x1a,0x22,0xba,0xa4,0xb4,0x2a,0x22,0xd5,0xa3,0xa9,0x35,0x17,0x19 -,0xcf,0x96,0x94,0xa8,0x2f,0x27,0xbf,0x9b,0x9d,0x37,0x12,0x13,0x37,0xa5,0xa7,0x40,0x2b,0x37,0xd1,0xaf,0xb8,0x2c,0x1d,0x63,0x9f,0x9c,0xab,0xda,0xc1,0xa6,0xa3,0xce -,0x20,0x14,0x1b,0x52,0xac,0xae,0x5a,0x35,0x3a,0x58,0xc0,0x70,0x2a,0x23,0x4a,0xa3,0x9c,0xa9,0x4d,0xf7,0xa5,0xa1,0xc6,0x24,0x18,0x27,0xae,0xa1,0xc1,0x29,0x27,0x38 -,0xc2,0xae,0xbe,0x2c,0x1f,0x30,0xb1,0x9c,0xa2,0x54,0x36,0xcd,0xad,0xae,0x3c,0x19,0x1b,0xef,0xa6,0xae,0x43,0x32,0x5d,0xb4,0xa9,0xb2,0x4e,0x2d,0x3d,0xaf,0xa7,0xbd -,0x52,0xcb,0xd7,0x42,0x30,0x1e,0x19,0x2e,0xad,0xa2,0xb6,0x30,0x2a,0xc6,0x9c,0x9a,0xac,0x2f,0x20,0x34,0xb0,0xa5,0xbc,0x38,0x30,0x47,0xdf,0x52,0x2d,0x28,0x41,0xc8 -,0xcf,0x4c,0x3e,0xcc,0xa9,0xa5,0xac,0xca,0x2d,0x1b,0x2b,0xa6,0x9e,0xbe,0x2f,0x37,0xce,0xae,0xae,0x5d,0x28,0x22,0x2a,0x4f,0xbc,0xac,0xa2,0xad,0x45,0x2e,0x37,0x3c -,0x53,0xc2,0xb5,0xc0,0x43,0x2d,0x36,0xaf,0xa1,0xad,0x36,0x1c,0x1e,0x62,0xa4,0xa1,0xae,0xcf,0x4b,0x3c,0xcc,0xbc,0x5c,0x35,0x2d,0x30,0x33,0x3f,0xc7,0xab,0xa8,0xc4 -,0x34,0x29,0x2b,0x3f,0xb1,0x9d,0xa2,0xcd,0x3b,0x3f,0xe4,0xb3,0xae,0x3b,0x1f,0x25,0x68,0xb6,0xc7,0xcf,0xbc,0xdc,0x2c,0x2a,0x3f,0xd4,0xbb,0xb7,0xc1,0xca,0xba,0xbb -,0x47,0x3e,0xc2,0xc4,0x38,0x29,0x42,0xb5,0xae,0xc6,0x4e,0x3d,0x30,0x47,0xbc,0xc1,0xc9,0xc0,0x4e,0x31,0x42,0xb6,0xab,0xbb,0x5d,0x46,0x3f,0x37,0x2c,0x2d,0xbb,0xab -,0x6e,0x33,0x3b,0xd3,0xb6,0xa7,0xa5,0xbf,0x3d,0x39,0x53,0xcd,0xbb,0xc2,0x38,0x25,0x2b,0x3e,0x51,0xfb,0xc9,0xcd,0x3d,0x39,0xc9,0xb5,0xb8,0xac,0xa6,0xbe,0x2a,0x26 -,0x3e,0xbe,0xb0,0xb7,0x55,0x27,0x26,0xd1,0xa6,0xac,0xcc,0x3f,0x2a,0x1f,0x35,0xaa,0xa4,0xb6,0x66,0x37,0x33,0x41,0x57,0xdb,0xbd,0xb6,0xbd,0xda,0x53,0xcf,0xb0,0xbc -,0x35,0x29,0x3b,0xda,0xbe,0xb5,0xbd,0x48,0x43,0xc9,0xb7,0xbe,0x43,0x2b,0x2c,0x3c,0xcd,0xae,0xb6,0x35,0x22,0x38,0xc8,0xce,0xc3,0xab,0xa3,0xad,0xb3,0xac,0xe7,0x31 -,0x3a,0xd3,0xc8,0x42,0x3a,0x2e,0x22,0x25,0x3f,0xff,0x3c,0x35,0x3d,0x30,0x35,0xbe,0xae,0xb5,0xba,0xad,0xa4,0xa9,0xa8,0xa8,0xca,0x36,0x2d,0x44,0xad,0xa3,0xa9,0xbd -,0x28,0x1b,0x23,0x46,0xc7,0x67,0x39,0x2e,0x30,0x36,0xdc,0xaf,0xdf,0x3d,0xec,0xb2,0xbd,0x41,0x4d,0xbe,0xb7,0xaa,0x9f,0xb0,0x3a,0x2c,0x2f,0x3b,0xe6,0xb6,0xb9,0x71 -,0x35,0x2e,0x2c,0x27,0x30,0x3f,0x40,0x3d,0x3c,0xc7,0xb3,0xbd,0xae,0xab,0xbd,0xc0,0xaa,0xa1,0xb2,0x49,0x50,0xce,0xc5,0xbf,0xb0,0xbe,0x27,0x1b,0x23,0x2e,0x2e,0x32 -,0x59,0xea,0xf6,0xb8,0xbb,0x3b,0x29,0x2f,0xbf,0xa3,0x9e,0xa0,0xb3,0x5a,0x4d,0xb1,0xa8,0xba,0x60,0x32,0x2d,0x31,0x68,0xb6,0xc6,0x44,0x37,0x32,0x26,0x25,0x31,0x46 -,0x4a,0x58,0xbe,0xb2,0xd2,0x63,0xb9,0xda,0x37,0x57,0xb8,0xb6,0xcf,0xc5,0xb3,0xb9,0xb8,0xac,0xb8,0x3c,0x36,0x4e,0xcc,0xdd,0x37,0x2f,0x34,0x33,0x4c,0xb3,0xd6,0x2b -,0x24,0x2d,0xc7,0xac,0xa2,0xa0,0xb6,0xee,0xe8,0xc3,0xcf,0xe9,0xbf,0xca,0x47,0x38,0xdf,0xdc,0x2e,0x32,0x43,0x36,0x2c,0x2f,0x59,0x49,0x37,0xcf,0xab,0xb0,0xcf,0xb9 -,0xb9,0x5b,0x47,0xc5,0xb5,0x5c,0x3d,0x6d,0xc3,0xc4,0xdc,0x71,0x32,0x26,0x39,0xaf,0xa4,0xc1,0x3b,0x35,0x3c,0xc6,0xa7,0xa3,0x6a,0x1f,0x1f,0x3d,0xbe,0xb6,0xaf,0xca -,0x2f,0x39,0xbe,0xbd,0x44,0x37,0x57,0xcc,0xc2,0xa6,0x9d,0xab,0x48,0x30,0x3f,0x4b,0x4a,0xcd,0x7d,0x25,0x1f,0x38,0xc4,0xc4,0x70,0x4e,0x2e,0x26,0x3d,0xaa,0xa6,0xc7 -,0x58,0xcc,0xb1,0xaa,0xa2,0xac,0x31,0x1f,0x32,0xbd,0xbd,0xde,0x51,0x34,0x29,0x34,0xc2,0xbc,0x40,0x2a,0x35,0xe0,0xbb,0xa4,0x9b,0xa7,0x57,0x58,0xbf,0xdf,0x3e,0x43 -,0x3b,0x2a,0x34,0xb9,0xad,0xd8,0x36,0x2f,0x30,0x37,0xcc,0xa9,0xb6,0x42,0x70,0xae,0xb2,0xde,0x6c,0x4c,0x2f,0x28,0x4a,0xbe,0x50,0x3a,0x42,0x7c,0xc3,0xbb,0xb7,0xfb -,0x2c,0x2f,0xba,0xac,0xc0,0xbe,0xc3,0x46,0x3c,0xbf,0xaf,0x68,0x2d,0x27,0x2c,0x3a,0xc7,0xab,0xaf,0x57,0x32,0x5b,0xba,0xc2,0xce,0xc6,0x4a,0x30,0xd0,0xa4,0xa1,0xad -,0xdd,0x35,0x2f,0x33,0x5b,0xbe,0x45,0x30,0x3c,0xe4,0x71,0x56,0x75,0x47,0x2f,0x36,0xb3,0xb5,0xc4,0xbe,0xc1,0xbf,0xba,0xb3,0xc6,0x32,0x23,0x2e,0x48,0x56,0x53,0x54 -,0x3e,0x34,0x54,0xac,0xa8,0xd0,0x47,0x3f,0x3e,0xc8,0xa3,0x9c,0xa7,0x4e,0x26,0x2e,0x38,0x33,0x46,0x46,0x2f,0x3e,0xb5,0xa9,0xae,0xbd,0xd8,0x43,0x44,0x5a,0x5c,0x47 -,0x3e,0xf0,0xb2,0xb1,0x5e,0x45,0x62,0x3f,0x3b,0x6b,0xc9,0xe8,0x79,0xd9,0xbb,0xb9,0xc8,0xce,0x3e,0x28,0x2b,0x42,0xcd,0xb6,0xb0,0xbe,0x4a,0x33,0x4a,0xb9,0xb7,0xea -,0x2f,0x1e,0x21,0xca,0xa5,0xa4,0xbb,0x3f,0x3f,0xe6,0xbc,0xc2,0x4f,0x43,0x68,0xb8,0xa0,0xa3,0xbf,0x3a,0x28,0x25,0x35,0x4a,0x45,0x4f,0x55,0xcc,0xab,0xad,0xd5,0x56 -,0x30,0x2d,0x4e,0xc6,0xc5,0xc5,0xc0,0xcc,0x5a,0xe6,0xb2,0xbb,0x46,0x2c,0x27,0x34,0xc3,0xa9,0xaa,0xc9,0x30,0x2e,0x44,0xda,0xc5,0x3e,0x23,0x2a,0x6a,0xa5,0x9b,0xa8 -,0xd6,0x72,0x4d,0x48,0x55,0x34,0x35,0x3a,0x37,0x47,0xb5,0xa9,0xac,0xb9,0x3d,0x35,0x4c,0xcf,0xc1,0xc4,0xdb,0xcf,0xcd,0xe9,0x64,0x40,0x30,0x23,0x23,0x5d,0xa9,0xa2 -,0xa8,0x73,0x3e,0xb3,0xa7,0xbf,0x48,0x27,0x20,0x3a,0xbe,0xb3,0xc1,0x3f,0x3a,0xca,0xbe,0xd1,0x34,0x21,0x2b,0xc4,0xa6,0xa8,0xbd,0x6e,0x6f,0x5d,0x4a,0x3d,0x2e,0x37 -,0x5a,0xe3,0xb9,0xae,0xab,0xa6,0xad,0x61,0x2d,0x1f,0x28,0xcd,0xb8,0xce,0x41,0x31,0xca,0xa2,0xa9,0xf9,0x25,0x1c,0x2d,0xae,0xa0,0x9f,0xae,0x42,0x3e,0xcf,0xd1,0x38 -,0x26,0x2b,0x4c,0xbb,0xab,0xbf,0xf9,0xc8,0xba,0xbf,0x57,0x29,0x23,0x2d,0x33,0xc9,0xa8,0xab,0xb9,0xc7,0x60,0x3b,0x43,0x3c,0x3b,0x60,0xcf,0xc6,0xc5,0xb2,0xa7,0xac -,0x4e,0x1f,0x17,0x1f,0xc1,0xa2,0xa4,0xb4,0xf4,0x68,0xb6,0xa4,0xb3,0x2d,0x1b,0x22,0x57,0xb5,0xb2,0xc8,0x66,0xc9,0xb1,0xbc,0x3a,0x24,0x2e,0xc6,0xb0,0xaa,0xad,0x5c -,0x3c,0x7e,0xc2,0xc9,0x34,0x20,0x29,0x61,0xc2,0xc0,0xbf,0xaf,0xab,0xaf,0x7e,0x2d,0x26,0x33,0xd3,0x68,0x39,0x2d,0x48,0xac,0xa1,0xa2,0xc6,0x1f,0x19,0x3b,0xa2,0x9c -,0xad,0x39,0x2b,0x49,0xb1,0xbc,0x2b,0x1d,0x27,0x71,0xb5,0xb1,0xaf,0xaf,0xaa,0xa8,0xad,0xe8,0x26,0x1f,0x32,0xc3,0xbd,0x76,0x41,0x3f,0xd3,0xb4,0xc5,0x3d,0x2c,0x33 -,0xd7,0xc5,0xc9,0xc3,0xb7,0xb5,0xb6,0xc0,0x3c,0x25,0x2a,0xbf,0xaf,0x5d,0x29,0x26,0xcf,0x9f,0xa0,0xbf,0x29,0x1b,0x24,0xc5,0xa8,0xad,0xc8,0x76,0xcd,0xb4,0xae,0xdf -,0x24,0x20,0x4c,0xa9,0xab,0x70,0x40,0xcb,0xb0,0xb2,0x62,0x22,0x1d,0x2f,0xd8,0xbd,0xb3,0xb3,0xae,0xaf,0xad,0xaa,0xd5,0x26,0x1f,0x2f,0x4b,0x48,0x32,0x3d,0xae,0x9e -,0xa1,0xde,0x21,0x1d,0x41,0xa8,0xa7,0xdf,0x2f,0x36,0xc7,0xaa,0xa6,0xcf,0x1e,0x1a,0x2c,0xc0,0xad,0xbb,0xcc,0xb8,0xae,0xa8,0xb2,0x2c,0x1a,0x24,0xef,0xb3,0xbc,0x61 -,0xc8,0xb1,0xa8,0xa7,0x59,0x1f,0x20,0x4f,0xbc,0xbe,0xe6,0xdf,0xbe,0xc2,0xbc,0xcf,0x30,0x26,0x33,0xea,0xbd,0xde,0x48,0xc9,0xa7,0x9c,0x9f,0x50,0x1b,0x1d,0x3e,0xb9 -,0x7e,0x28,0x2f,0xd6,0xae,0xa5,0xb2,0x36,0x29,0x37,0xdc,0xb2,0xba,0xf6,0xe6,0xd1,0xaf,0xa9,0x3f,0x1a,0x18,0x30,0xb9,0xb3,0xda,0xc6,0xac,0xa7,0x9f,0xaa,0x3e,0x26 -,0x2d,0x49,0x4b,0x3b,0x4f,0xb3,0xb3,0xb0,0xb3,0x36,0x1e,0x26,0xc6,0xae,0x77,0x2b,0x36,0xc2,0xa1,0x9a,0xaa,0x2e,0x1e,0x2b,0xd8,0xb6,0x68,0x3f,0x5c,0xcc,0xba,0xc3 -,0x5a,0x39,0x3d,0x5d,0x56,0x45,0x4e,0xc6,0xca,0x35,0x32,0x6b,0xbc,0xab,0xad,0x61,0x3f,0xc3,0xab,0xa6,0x4e,0x1a,0x1b,0x30,0xaf,0x9e,0xae,0x3d,0x57,0xb0,0xa8,0xb9 -,0x1f,0x15,0x28,0xce,0xad,0xad,0x3e,0x3d,0xa4,0x9a,0xa3,0x33,0x12,0x1e,0xad,0x9e,0xa6,0x2c,0x19,0x4f,0x9c,0x9c,0xe7,0x12,0x11,0x4e,0xa1,0x9d,0xbb,0x24,0x3e,0x9d -,0x98,0xa9,0x20,0x11,0x27,0xa9,0x9e,0xb7,0x1f,0x1c,0xb2,0x96,0x9c,0x3e,0x12,0x1b,0xac,0x9c,0xa5,0x35,0x1a,0x3c,0x9f,0x9e,0xbc,0x1d,0x19,0xc5,0x9f,0xac,0x3b,0x1a -,0x31,0x99,0x94,0xaa,0x1f,0x10,0x25,0xa8,0xa4,0xd0,0x22,0x1e,0xb0,0x97,0x9d,0x68,0x1a,0x1e,0xa9,0x9e,0xc4,0x2a,0x1d,0x6b,0x98,0x9d,0x4b,0x1a,0x17,0xd4,0x9c,0xb0 -,0x36,0x1f,0x2e,0x9e,0x96,0xac,0x35,0x1b,0x28,0xad,0xc0,0x2e,0x25,0x2a,0xa9,0x96,0xab,0x38,0x20,0x26,0xa7,0x9e,0x59,0x2a,0x1f,0x36,0x9e,0x9d,0xc8,0x30,0x1f,0x45 -,0xa1,0xc4,0x2f,0x28,0x2d,0xa4,0x98,0xb1,0x36,0x1e,0x20,0xaf,0xac,0x2f,0x22,0x20,0xbf,0x92,0x97,0xb9,0x28,0x19,0x47,0x9d,0xb2,0x3a,0x24,0x24,0xaa,0x9d,0xd1,0x28 -,0x1b,0x2e,0x9e,0xa6,0x2d,0x1e,0x23,0xa8,0x8d,0x96,0xfb,0x1c,0x16,0xcc,0x9c,0xee,0x1d,0x18,0x2e,0x97,0x93,0xc2,0x22,0x1b,0x47,0x98,0xa6,0x26,0x1c,0x29,0x9e,0x8e -,0xab,0x1d,0x12,0x1c,0xa0,0x98,0x4e,0x1e,0x24,0xad,0x94,0x9f,0x2e,0x1d,0x33,0xb6,0xbf,0x30,0x29,0xc9,0x98,0xa0,0x2d,0x19,0x1b,0xdb,0x9b,0xab,0x35,0x2b,0x4b,0x9b -,0x97,0xba,0x25,0x18,0x21,0xb2,0xaf,0x32,0x29,0x3d,0x9e,0x91,0xa9,0x27,0x1a,0x21,0xb0,0xa2,0x33,0x1a,0x22,0xb1,0x8e,0x93,0x34,0x15,0x17,0xe0,0x97,0xa8,0x27,0x21 -,0x3f,0x9e,0x99,0x5c,0x1e,0x24,0x4d,0xa7,0xb9,0x1d,0x1a,0x49,0x9c,0x90,0xa4,0x23,0x1e,0x33,0xaf,0xa4,0x3b,0x18,0x26,0xa9,0x93,0x98,0x2d,0x17,0x26,0xc0,0xa7,0xe1 -,0x18,0x1c,0xb3,0x94,0x91,0xbf,0x15,0x1b,0xbe,0x9c,0xa1,0x22,0x0f,0x26,0x9f,0x8f,0x9a,0x22,0x15,0x2f,0xad,0xa7,0x41,0x18,0x28,0x9e,0x91,0x9a,0x2c,0x10,0x1f,0xae -,0x9f,0xb6,0x1c,0x14,0xdf,0x95,0x93,0xae,0x1a,0x19,0xc1,0x9f,0xaf,0x2b,0x16,0x2a,0x9d,0x96,0xa1,0x2c,0x16,0x2e,0xa7,0xa8,0x3e,0x18,0x1a,0xab,0x8e,0x90,0xb5,0x18 -,0x16,0x4a,0xa7,0xb3,0x2d,0x18,0x2b,0x9f,0x97,0xa3,0x2e,0x1a,0x3a,0xa3,0xa6,0x5f,0x1e,0x1f,0xab,0x94,0x9a,0x69,0x15,0x15,0x47,0xa7,0xad,0x2d,0x18,0x2f,0x9b,0x90 -,0x9b,0x36,0x16,0x20,0xbb,0xa6,0xc5,0x1f,0x1e,0xb3,0x94,0x99,0x48,0x11,0x17,0xb3,0x97,0xa3,0x21,0x10,0x25,0x9a,0x8d,0x98,0x24,0x0e,0x1c,0xae,0x9b,0xb0,0x1f,0x1d -,0xb5,0x92,0x96,0x46,0x13,0x17,0xcf,0x9d,0xa9,0x22,0x15,0x37,0x96,0x8c,0x9f,0x19,0x0c,0x1e,0x9f,0x94,0xaf,0x19,0x18,0xba,0x92,0x93,0x6f,0x13,0x16,0xf7,0xa0,0xaf -,0x1f,0x18,0xc6,0x91,0x8e,0xb2,0x12,0x0e,0x2f,0x99,0x94,0xc9,0x15,0x16,0xb6,0x8f,0x91,0x67,0x11,0x16,0x51,0xa1,0xac,0x27,0x1c,0xe4,0x97,0x91,0xab,0x18,0x11,0x2d -,0x9f,0x9b,0x51,0x15,0x1e,0xa2,0x8d,0x91,0x2e,0x0c,0x10,0x49,0x97,0x99,0x35,0x19,0x2c,0xa3,0x93,0xa5,0x1e,0x16,0x2c,0xa5,0x9b,0x5f,0x18,0x1e,0xa6,0x8d,0x91,0x2e -,0x0b,0x0e,0x44,0x94,0x96,0x37,0x17,0x24,0x9f,0x8e,0x9d,0x1f,0x0f,0x1d,0xa9,0x95,0xb2,0x1e,0x1e,0xb6,0x93,0x9a,0x24,0x0d,0x14,0xb8,0x8f,0x9b,0x21,0x12,0x28,0x94 -,0x89,0x9d,0x16,0x0a,0x16,0xa4,0x90,0xaa,0x23,0x1d,0xbd,0x93,0x9d,0x1f,0x0d,0x15,0xab,0x8d,0x9a,0x21,0x11,0x29,0x92,0x8a,0xac,0x12,0x0a,0x1b,0x9a,0x8e,0xac,0x1a -,0x15,0xbf,0x8e,0x97,0x2a,0x0e,0x12,0xc3,0x93,0x9f,0x2b,0x1a,0x45,0x92,0x8e,0xeb,0x0e,0x0a,0x29,0x8f,0x8d,0xb9,0x14,0x11,0xbf,0x8e,0x94,0x2f,0x0d,0x0e,0xd1,0x91 -,0x98,0x39,0x19,0x32,0x94,0x8e,0xcc,0x0f,0x0a,0x25,0x93,0x8d,0xac,0x16,0x12,0xba,0x8d,0x94,0x29,0x0a,0x0d,0xae,0x8b,0x91,0x3c,0x11,0x21,0x9a,0x90,0xb2,0x14,0x0c -,0x2c,0x93,0x8f,0xe0,0x10,0x16,0x9f,0x89,0x96,0x1a,0x05,0x0e,0x9e,0x88,0x91,0x25,0x0c,0x24,0x92,0x8d,0xc4,0x0c,0x09,0x48,0x8b,0x8d,0x6c,0x0e,0x14,0x9d,0x8a,0x9a -,0x13,0x04,0x12,0x97,0x87,0x98,0x19,0x0c,0x46,0x8d,0x8c,0x4f,0x09,0x07,0x43,0x8b,0x8b,0xda,0x0f,0x18,0x9e,0x8e,0xab,0x10,0x08,0x26,0x8c,0x88,0xa5,0x10,0x0c,0xd6 -,0x8b,0x8e,0x2a,0x07,0x0a,0xb5,0x89,0x8f,0x2d,0x0d,0x1f,0x95,0x8c,0xad,0x0d,0x06,0x2a,0x8b,0x87,0xa5,0x0f,0x0d,0xc0,0x8c,0x92,0x1e,0x05,0x0d,0x9f,0x87,0x8e,0x29 -,0x0a,0x1a,0x99,0x8b,0xa4,0x0f,0x09,0x2c,0x8f,0x8b,0xae,0x11,0x13,0xab,0x8e,0x9a,0x19,0x05,0x11,0x99,0x86,0x8f,0x1e,0x0a,0x1f,0x99,0x8e,0xb6,0x0c,0x0b,0xcc,0x8b -,0x89,0xbd,0x0b,0x0f,0xaf,0x8c,0x95,0x19,0x05,0x14,0x9a,0x87,0x93,0x1b,0x0c,0x2d,0x93,0x8b,0xc5,0x08,0x08,0x58,0x8a,0x86,0xb2,0x0b,0x0e,0xcc,0x90,0x9a,0x16,0x08 -,0x1f,0x94,0x87,0x96,0x15,0x0b,0x2a,0x94,0x8c,0xff,0x08,0x0c,0xba,0x8b,0x8a,0x4e,0x0c,0x19,0xaa,0x8f,0xa1,0x0e,0x07,0x24,0x8f,0x85,0x97,0x14,0x0d,0x2e,0x99,0x91 -,0x2e,0x08,0x12,0xa3,0x88,0x8b,0x2f,0x0b,0x1a,0xa6,0x8e,0xa3,0x0d,0x09,0x28,0x93,0x88,0x9c,0x15,0x11,0x48,0x95,0x93,0x22,0x08,0x14,0x9f,0x88,0x8b,0x2f,0x0c,0x18 -,0xb9,0x94,0xb5,0x0d,0x0c,0x51,0x8d,0x87,0xa0,0x10,0x11,0x7d,0x92,0x94,0x1d,0x07,0x14,0xa1,0x88,0x8c,0x27,0x0c,0x1d,0xa3,0x8f,0xbc,0x0b,0x0a,0x50,0x8c,0x85,0x9f -,0x0f,0x10,0x44,0x96,0x99,0x1a,0x08,0x1b,0x99,0x86,0x8e,0x1b,0x0a,0x1d,0x9f,0x8e,0xbb,0x0a,0x0c,0x60,0x8d,0x87,0xaa,0x0f,0x15,0xd5,0x94,0x9b,0x13,0x08,0x1f,0x96 -,0x85,0x8e,0x1b,0x0c,0x1e,0xa5,0x90,0x47,0x09,0x0e,0xca,0x8b,0x87,0xb6,0x0f,0x18,0xc5,0x93,0x9a,0x16,0x0a,0x1d,0xa0,0x89,0x95,0x1a,0x0f,0x26,0x9f,0x92,0x35,0x0b -,0x13,0xb5,0x8a,0x87,0xba,0x12,0x15,0x37,0x9a,0xa1,0x17,0x0e,0x22,0x9d,0x88,0x98,0x1c,0x14,0x27,0xa2,0x98,0x2b,0x0d,0x16,0xc2,0x8b,0x89,0xbc,0x18,0x19,0x46,0x98 -,0xaa,0x15,0x0e,0x1d,0x9c,0x88,0x98,0x22,0x17,0x20,0xa9,0x9b,0x2e,0x13,0x1a,0xb7,0x8b,0x8d,0x46,0x16,0x19,0xcb,0x95,0xb3,0x15,0x0e,0x1e,0x99,0x89,0x9b,0x25,0x18 -,0x25,0xa2,0xa0,0x22,0x13,0x1c,0xa9,0x8a,0x90,0x3a,0x1b,0x1d,0xbf,0x9c,0x37,0x10,0x11,0x2d,0x91,0x8b,0xa6,0x28,0x1e,0x3e,0x9b,0xa9,0x1b,0x13,0x1c,0xab,0x8e,0x9f -,0x34,0x2d,0x37,0xa9,0xa7,0x1f,0x12,0x1a,0xd6,0x8e,0x8f,0xdf,0x25,0x1f,0x41,0x9f,0xcf,0x1b,0x1b,0x27,0xa4,0x8f,0xa5,0x45,0x3d,0x39,0xab,0xb7,0x1b,0x18,0x20,0xe2 -,0x93,0x98,0x74,0x39,0x2d,0xcd,0x9f,0x38,0x16,0x1a,0x2a,0x9e,0x8f,0xa5,0x7e,0x4d,0x39,0xb3,0xcd,0x1b,0x1b,0x22,0xfe,0x96,0x9f,0x40,0x39,0x3b,0xa9,0x9a,0x3a,0x16 -,0x18,0x2a,0x9b,0x90,0xb1,0x3a,0x38,0x4b,0xad,0x5c,0x1a,0x1a,0x21,0xb8,0x93,0x9d,0x5e,0x43,0xec,0xa4,0xa8,0x1f,0x12,0x1a,0x69,0x95,0x97,0xff,0x2e,0x3e,0xb0,0x9f -,0x52,0x16,0x14,0x21,0xae,0x96,0xa7,0x5f,0xc3,0xaa,0x9f,0xc1,0x17,0x11,0x20,0xb9,0x96,0x9e,0x3d,0x2f,0x4a,0xab,0xa0,0x3a,0x17,0x1a,0x2d,0xa8,0x99,0xb4,0x54,0xbf -,0xae,0xa5,0x5f,0x19,0x17,0x23,0xd1,0x9c,0xa7,0x41,0xe6,0xad,0x9f,0xaf,0x1f,0x14,0x1b,0x32,0xa0,0x97,0xad,0xcf,0x77,0xc6,0xab,0x4d,0x1c,0x1b,0x27,0xc3,0x9f,0xb9 -,0x53,0xbc,0xad,0x9f,0xad,0x25,0x18,0x1a,0x2b,0xa3,0x9b,0xb5,0xfd,0xfe,0xb0,0xa9,0x36,0x1a,0x1e,0x2a,0xc5,0x9e,0xab,0xc8,0xbb,0xba,0xab,0xc5,0x1d,0x19,0x26,0x67 -,0x9f,0xa5,0x3d,0x5d,0xb0,0xa4,0xa6,0x30,0x18,0x1c,0x26,0xcd,0x9e,0xaf,0xd8,0xab,0xa5,0xa6,0x5f,0x15,0x16,0x2e,0xd1,0xa3,0xaa,0x44,0xc0,0xa5,0xa7,0xad,0x28,0x15 -,0x1f,0x3d,0xb4,0xa5,0x6b,0x3f,0xa9,0xa4,0xaa,0x4e,0x1c,0x22,0x39,0x44,0xb0,0xac,0x55,0xb7,0xa0,0xa6,0xc4,0x1c,0x13,0x28,0x5a,0xbf,0xa7,0xbd,0xdf,0xa7,0xa6,0xa9 -,0x79,0x1d,0x1f,0x30,0x3b,0xbf,0xc8,0x3d,0xac,0x9c,0xa6,0xc5,0x20,0x1b,0x31,0x41,0xd3,0xab,0xcf,0xe1,0xa7,0xa8,0xac,0x43,0x19,0x1d,0x31,0x47,0xb3,0xb4,0xee,0xa8 -,0xa3,0xb5,0xcf,0x25,0x1f,0x44,0x47,0xf9,0xb0,0x46,0x5b,0xa5,0xa9,0xae,0x3d,0x19,0x26,0x45,0x43,0xaf,0xb2,0x6a,0xac,0xa7,0xbf,0xf4,0x21,0x20,0xf2,0x57,0xec,0xb6 -,0x42,0xda,0xa4,0xb0,0xbc,0x3c,0x1c,0x37,0xc8,0x48,0xb9,0xd6,0x36,0xa9,0xa7,0xd4,0xd4,0x27,0x2a,0xbb,0x43,0x49,0xbd,0x3a,0xc1,0xa1,0xce,0x4c,0x2e,0x1d,0x7c,0xb4 -,0x4e,0xaf,0xbd,0xe4,0x9e,0xa6,0xd5,0xd1,0x27,0x2a,0xbf,0x2e,0x2e,0x6b,0x2d,0xc6,0xa5,0x4d,0x43,0x2f,0x1e,0xf6,0xcd,0x33,0xbc,0xcc,0xd0,0x9d,0xa8,0xc4,0xba,0x2b -,0x39,0xab,0x59,0xcc,0xac,0x45,0xb1,0xa1,0x66,0xf4,0x36,0x1e,0x68,0x41,0x24,0xdb,0x3e,0x3a,0xa4,0xbf,0x3b,0x3f,0x1a,0x25,0xc0,0x35,0xdd,0xb3,0x3f,0xa7,0x9e,0x4d -,0xdd,0x39,0x27,0xb1,0xc4,0x43,0xa6,0xbd,0xbd,0x9a,0xba,0x3c,0x4f,0x1f,0x38,0xaf,0x2d,0x45,0xc3,0x32,0xa8,0xa4,0x36,0xd7,0x32,0x20,0xb4,0xff,0x2f,0xad,0xda,0xbe -,0x9d,0x3c,0x27,0x3a,0x1e,0x44,0xaf,0x2d,0xca,0xae,0x49,0xa1,0xa6,0x36,0xdb,0x2f,0x29,0xb0,0x35,0x24,0xbb,0x47,0xd4,0xa2,0x36,0x2f,0x4e,0x22,0xd6,0xa9,0x38,0xb5 -,0xac,0x67,0x9d,0xa8,0x2f,0xcb,0x37,0x38,0xa2,0xf7,0x3b,0xad,0x3c,0xd1,0xa5,0x2f,0x35,0x4e,0x20,0xcf,0xb7,0x27,0xd7,0xd0,0x39,0xa1,0xb8,0x2a,0xc9,0x2b,0x2b,0xa9 -,0x3b,0x33,0xb0,0x37,0xbc,0xa0,0x30,0x42,0x6c,0x27,0xad,0xab,0x2d,0xbe,0xfa,0x34,0xa0,0xbd,0x2b,0xc8,0x2e,0x3b,0xa7,0x2c,0x29,0xbb,0x37,0xae,0x9d,0x33,0x44,0x63 -,0x2a,0xa7,0xa8,0x37,0xab,0xb7,0x4d,0x9f,0x66,0x25,0xc0,0x34,0x4e,0xa3,0x32,0x37,0xb3,0x35,0xb4,0xa4,0x2b,0x42,0x7e,0x28,0xbf,0x53,0x1e,0x67,0x48,0x2f,0xab,0x3e -,0x25,0xca,0x35,0x5c,0xac,0x28,0x31,0xb1,0x45,0xb2,0xad,0x28,0x5e,0xbd,0x53,0xa5,0xbe,0x2c,0xbd,0xdc,0x78,0xa5,0x69,0x35,0xb8,0x50,0xca,0xae,0x31,0x46,0xb2,0xea -,0xa9,0xa7,0x3a,0x7c,0xcf,0x60,0xa7,0xc4,0x31,0xc2,0x6a,0x64,0xaf,0x3b,0x2e,0x6b,0x3c,0xc7,0xbb,0x29,0x2f,0x4e,0x3b,0xb8,0xbf,0x2b,0x3b,0x4b,0x4c,0xbe,0x33,0x23 -,0x3f,0x3d,0x64,0xb5,0x31,0x26,0x43,0x66,0xab,0xaa,0x36,0x45,0xc7,0xff,0xaf,0xbb,0x37,0xf0,0xbf,0xb2,0xa5,0xe5,0x35,0xc6,0xbd,0xb0,0xad,0x47,0x3c,0xce,0xc4,0xaf -,0xbc,0x3b,0xd5,0xb5,0xba,0xae,0xca,0x37,0x55,0xbe,0xb1,0xb6,0x34,0x2f,0xe4,0x55,0x45,0x36,0x29,0x32,0xdb,0xb4,0xb9,0x3b,0x25,0x34,0x5e,0xdf,0xf9,0x2f,0x29,0x39 -,0xd8,0xcd,0x44,0x31,0x39,0x60,0x7d,0x54,0x35,0x2e,0x45,0xbe,0xaa,0xb2,0x74,0x5d,0xbd,0xb0,0xb4,0xc5,0x4b,0x62,0xc7,0xad,0xa9,0xdb,0x42,0xcf,0xbe,0xb5,0xbc,0x4e -,0x6d,0xc7,0xb0,0xa5,0xc1,0x38,0x49,0xd7,0xbc,0xb8,0x47,0x2c,0x2f,0x42,0xaf,0xab,0x44,0x39,0x3e,0x3f,0xce,0x4a,0x33,0x33,0x2e,0x5f,0xae,0x51,0x2e,0x49,0x44,0xc9 -,0xbe,0x38,0x2e,0x2c,0x34,0xbb,0xc3,0x32,0x3f,0x44,0x4a,0xb4,0xdc,0x38,0x3b,0x3a,0xb6,0xa6,0xc1,0xe9,0xcb,0xd5,0xae,0xad,0x46,0x42,0x3e,0x6e,0xa3,0xaf,0x3a,0x40 -,0x57,0xbb,0xa4,0xb8,0x47,0x36,0x2d,0xb1,0xa1,0xc9,0xcd,0xc7,0x5d,0xb7,0xb8,0x36,0x2d,0x28,0x3d,0xaa,0xdf,0x37,0x61,0x4d,0xc3,0xb1,0x44,0x2c,0x2c,0x34,0xac,0xac -,0x3d,0x49,0x48,0x3d,0xbc,0xd8,0x2c,0x26,0x25,0x58,0xaa,0x62,0x39,0xdd,0x4f,0xbe,0xaf,0x3f,0x2d,0x2b,0x4e,0xa0,0xa4,0x7b,0x4a,0x3e,0x52,0xa9,0xb3,0x3a,0x2d,0x27 -,0x59,0xaa,0xc8,0xfe,0xc0,0xfd,0xb7,0xa9,0xc9,0x3c,0x34,0x66,0xa3,0xac,0x4b,0xd9,0x49,0x4f,0xac,0xc7,0x2e,0x28,0x2c,0xbf,0xa8,0xd6,0xd4,0xdb,0x2e,0xbc,0xa8,0x56 -,0x38,0x31,0x64,0xae,0x62,0x35,0x58,0x35,0x4b,0xa6,0xc6,0x28,0x21,0x27,0xb9,0xaa,0xcd,0xcd,0x3e,0x2c,0xae,0xa3,0x53,0x3a,0x2f,0x3d,0xb4,0xd1,0x53,0x79,0x2d,0x53 -,0xa4,0xd9,0x2e,0x2f,0x32,0xb7,0xb7,0x4f,0xbf,0x49,0x43,0x9e,0xa5,0x3d,0x2e,0x2b,0x55,0xaa,0xbb,0xbb,0xe1,0x26,0x73,0xa8,0x46,0x30,0x2f,0x39,0xaf,0xb9,0xd4,0xbc -,0x2f,0x40,0x9c,0xa7,0x4b,0x35,0x26,0x77,0xad,0xbd,0xb0,0x3e,0x1f,0xc3,0xa9,0x54,0x3d,0x27,0x2e,0xb3,0xb7,0xac,0xb9,0x26,0x52,0xa3,0xc9,0x48,0x3c,0x2c,0xc6,0xba -,0xde,0xca,0x1f,0x1f,0xa6,0xa6,0xe2,0x38,0x1e,0x30,0xb4,0xb8,0xa3,0xbf,0x20,0xbc,0xa3,0x70,0x58,0x28,0x28,0xb7,0xb8,0xb5,0xc7,0x1a,0x2a,0xa2,0xb9,0xbe,0x46,0x1f -,0x63,0xb4,0xb1,0xa1,0x3c,0x22,0xa6,0xa5,0xbf,0xbe,0x24,0x2d,0xbb,0x58,0xb2,0x76,0x1b,0xc4,0x9f,0x51,0xec,0x2c,0x20,0xaf,0xab,0xa8,0xa5,0x1f,0x26,0x9d,0xb3,0xc5 -,0xd4,0x1c,0x3e,0xba,0x4f,0xab,0x2d,0x19,0xa6,0xa1,0xf3,0xba,0x1f,0x22,0xa9,0xb9,0xa3,0xad,0x19,0x4d,0x9f,0x48,0xc4,0x36,0x18,0xd6,0xbb,0xc7,0xa7,0x1c,0x1b,0xa1 -,0xb8,0xbf,0xac,0x21,0x3d,0xa8,0xed,0xa6,0x4d,0x15,0xac,0x9e,0xdc,0xaf,0x1f,0x19,0xb3,0xd6,0xb1,0xa7,0x16,0x27,0x9e,0xda,0xad,0xbb,0x1b,0xdd,0xa9,0xb4,0x9b,0x2a -,0x17,0xa2,0xad,0xba,0xa1,0x1c,0x1e,0xae,0x47,0xaa,0xbf,0x10,0x59,0x9f,0xe8,0x9d,0x4f,0x1a,0xb0,0xc2,0xb4,0x9d,0x1b,0x25,0x9e,0x52,0xae,0xb1,0x14,0x37,0xae,0x54 -,0x9f,0x27,0x0f,0xae,0xac,0xac,0x97,0x22,0x1e,0xa9,0x74,0xa4,0xaf,0x12,0x3c,0xac,0x3e,0x9f,0x4f,0x13,0xd3,0xdd,0xca,0x9a,0x1d,0x1d,0xa1,0xdb,0xa4,0x9c,0x1c,0x37 -,0xaf,0x44,0x9a,0x59,0x11,0xb9,0xc3,0x48,0x9b,0x25,0x1a,0xaa,0x7b,0xb0,0xaa,0x13,0x30,0x9f,0xea,0x97,0xae,0x14,0xc6,0xb1,0xc4,0x97,0x28,0x16,0xac,0x43,0xbf,0x9f -,0x18,0x24,0xaf,0x4d,0x9c,0xc0,0x13,0xcd,0xb1,0xe6,0x96,0x3f,0x1a,0xab,0x66,0xba,0x9f,0x19,0x26,0xa9,0x31,0xab,0xb4,0x16,0x4b,0xbd,0x48,0x9e,0x34,0x1e,0xa4,0xc4 -,0xb6,0x9b,0x1e,0x1d,0xb1,0x41,0xa2,0xab,0x14,0x35,0xe0,0x31,0x9d,0xce,0x1a,0xbf,0xc9,0xb9,0x9c,0x25,0x26,0xa6,0x4b,0xa2,0x9b,0x1d,0x2f,0xe1,0x30,0xa1,0xd4,0x19 -,0xc7,0x4d,0x44,0x9b,0x2d,0x20,0xb3,0x4a,0xaa,0x9f,0x1f,0x3e,0xac,0x3f,0x9e,0xb1,0x1c,0xc3,0xb8,0xe8,0xa6,0x21,0x18,0xc9,0x46,0xb1,0x9f,0x26,0x30,0xbe,0x3a,0xa3 -,0xae,0x21,0xbf,0xb9,0x49,0xa1,0x5e,0x1e,0xcc,0x49,0xd8,0xa9,0x1f,0x22,0xcc,0x2f,0xb1,0xa6,0x2e,0xb7,0xa7,0xdc,0xa7,0x48,0x1b,0xef,0xda,0x54,0xa7,0x3a,0x2e,0xac -,0x4a,0x40,0xdc,0x21,0x43,0xad,0x42,0xb4,0xcc,0x23,0xac,0xa0,0xbf,0xa5,0x40,0x1f,0xbb,0x40,0x33,0xac,0x3a,0x44,0xa5,0x3f,0x3d,0x76,0x1d,0x41,0xae,0x35,0xbc,0xad -,0x4c,0xa1,0xab,0x2e,0xb7,0x3d,0x29,0xab,0x3d,0x2c,0xb7,0x2c,0x42,0xa6,0x3a,0xcc,0xaf,0x27,0x54,0xe3,0x27,0xb5,0xba,0x4d,0x9d,0xab,0x40,0xb6,0x2d,0x26,0xb7,0x2b -,0x35,0xb0,0x2b,0xec,0xaa,0x31,0xbc,0xb3,0x2f,0xb4,0x60,0x26,0xb9,0x6d,0x3f,0x9e,0xb1,0x49,0xae,0x2e,0x2b,0xd4,0x25,0x43,0xad,0x38,0xb9,0xac,0x28,0x4d,0xe2,0x29 -,0xb4,0x71,0x26,0xa4,0x96,0x9e,0xaa,0x39,0x1c,0xe4,0xd6,0x24,0x45,0xb6,0xaa,0x9d,0x4f,0x1b,0x1e,0x19,0x2f,0xbd,0xcf,0x37,0x3f,0xac,0xa7,0xa2,0xa3,0x94,0x99,0x2c -,0x19,0x11,0x26,0xa5,0xa2,0x36,0x12,0x0e,0x39,0x99,0x8b,0x8c,0x2b,0x0e,0x1a,0x3d,0xd1,0x9b,0x99,0x8f,0x8d,0xe2,0x0d,0x07,0x07,0x1c,0xa8,0xd5,0x20,0xaf,0x90,0x98 -,0x8b,0xb7,0x13,0x0a,0x0d,0x32,0xa2,0x87,0x84,0x8e,0xa0,0xae,0xaa,0xb3,0x16,0x09,0x03,0x03,0x19,0x69,0x2e,0x77,0x88,0x85,0xa6,0x13,0x0a,0x19,0x65,0xa4,0x8b,0x86 -,0x8e,0x9e,0x9c,0x9e,0x1f,0x0a,0x01,0x0b,0x2c,0xa3,0x90,0x99,0xae,0x28,0x1a,0x26,0x39,0x1e,0x1d,0xdd,0x89,0x89,0xaf,0x2c,0xb6,0x94,0x99,0x54,0x06,0x02,0x05,0x4e -,0x85,0x80,0x93,0x15,0x23,0x9d,0xa8,0x1e,0x0c,0x1d,0xa2,0x38,0xd5,0xc2,0x3e,0xb3,0x93,0x92,0x2b,0x0e,0x0f,0x21,0xae,0x92,0xba,0x10,0x0f,0xaa,0x98,0x97,0x91,0x9f -,0xd9,0x13,0x2e,0x8f,0x89,0x9c,0x42,0x1c,0x0d,0x0d,0x05,0x07,0x27,0x9b,0x92,0xb5,0x17,0x28,0xac,0x8b,0x83,0x8a,0xa7,0x26,0x20,0x29,0x75,0x1a,0x16,0xa9,0x90,0x9e -,0xd3,0xdc,0x30,0x14,0x11,0x1b,0xe0,0x53,0x21,0xb0,0x8a,0x84,0x9a,0x1e,0x10,0x0f,0x18,0x45,0x2a,0x18,0x19,0x47,0x8f,0x88,0x98,0x1a,0x10,0x28,0xa1,0xbe,0x24,0x9f -,0x85,0x85,0xa4,0x1c,0x0b,0x0a,0x0b,0x16,0xc3,0x4c,0x2a,0xb0,0x90,0x8c,0x9c,0x19,0x0c,0x16,0x1f,0x3d,0x92,0x87,0x89,0x8d,0x8d,0x8f,0x63,0x10,0x0a,0x0b,0x0c,0x05 -,0x06,0x12,0x8f,0x81,0x84,0xa1,0x0b,0x0c,0x1c,0xae,0x96,0x8a,0x8d,0x95,0xa4,0x58,0x38,0x0f,0x0e,0x0f,0x0a,0x0b,0x3d,0x95,0x8c,0x92,0x9e,0xa2,0x4f,0x18,0x0d,0x1a -,0x2c,0x9d,0x8e,0x94,0xa1,0xa6,0x99,0xbd,0x41,0x1b,0x0a,0x0a,0x19,0xb1,0x93,0x97,0xaf,0x9f,0x8f,0xaa,0x1c,0x30,0x5d,0x37,0x33,0x42,0x27,0x16,0x1a,0x24,0x9c,0x90 -,0xa4,0x30,0x1d,0x21,0x3a,0xa8,0xc3,0x6d,0xa4,0x91,0x8e,0xa3,0xbe,0x2d,0x1b,0xf9,0xab,0xbd,0x2a,0x16,0x1e,0x1a,0x13,0x15,0x2d,0xb5,0x42,0x34,0x2b,0x27,0x3b,0x94 -,0x84,0x87,0x8c,0x95,0xa6,0x40,0x18,0x0f,0x1a,0x34,0x2a,0x2a,0xaf,0x9e,0x9a,0x9e,0x2c,0x13,0x10,0x1b,0x17,0x1d,0xb0,0x99,0x8f,0x95,0xa5,0xbc,0x3d,0x1b,0x1a,0x2e -,0x1c,0x16,0xf2,0x93,0x8a,0x8b,0x96,0x4d,0x13,0x10,0x19,0x49,0x96,0x8e,0x91,0xa4,0x22,0x0e,0x0c,0x0f,0x18,0x40,0xb1,0xd9,0x35,0xcc,0xa7,0xa6,0x9e,0xa3,0x33,0x1b -,0x1f,0x40,0xa6,0x93,0x8e,0x8c,0x8d,0xa3,0x2f,0x21,0x19,0x0e,0x0b,0x0e,0x19,0x37,0xa2,0x98,0x9d,0x3f,0x14,0x1b,0xca,0xa4,0xa0,0xa0,0x9c,0x99,0xa4,0x2e,0x16,0x26 -,0xbb,0xd0,0x3b,0x52,0xaf,0xa3,0xa9,0xb7,0xac,0xc1,0x21,0x11,0x12,0x1b,0x30,0xb7,0x9e,0x97,0x97,0x9d,0x5a,0x14,0x0d,0x18,0x3a,0xa6,0x9d,0xa1,0x9e,0xa0,0x57,0x27 -,0x2e,0x46,0xb0,0xa0,0x9d,0xa9,0x56,0x20,0x1a,0x28,0xba,0xd5,0x26,0x24,0x2f,0xbc,0xa9,0xe5,0x3f,0xb8,0xda,0x36,0x46,0x48,0x47,0xbf,0xa3,0x9a,0x97,0x9c,0xad,0xbe -,0x39,0x19,0x0f,0x0d,0x15,0x2b,0xcc,0xa2,0xa4,0x4e,0x23,0x26,0xb5,0x91,0x8e,0x9c,0xad,0xae,0xba,0x2d,0x18,0x1a,0x37,0xcc,0x3a,0x23,0x29,0xbf,0x9d,0x97,0x9b,0xb9 -,0x30,0x1e,0x12,0x16,0x46,0xa2,0x96,0x9a,0xae,0xaa,0xad,0x28,0x0f,0x0e,0x1d,0xd5,0xa2,0xa6,0xa9,0x9e,0xa2,0xd2,0x2b,0x30,0xfd,0xbc,0xb4,0xaa,0x9c,0xa0,0x2e,0x13 -,0x12,0x1c,0x2a,0x28,0x28,0x50,0xa7,0xa2,0xa3,0xa6,0xa8,0xa8,0xb2,0x3c,0x1f,0x1d,0x3e,0x9d,0x91,0x92,0x9a,0xbe,0x22,0x15,0x0f,0x0f,0x17,0x25,0x2b,0x61,0xa2,0x9f -,0xab,0xc3,0xcc,0x9e,0x93,0xa7,0x3c,0x3f,0xba,0xa7,0xb4,0x2b,0x18,0x1b,0x21,0x27,0x32,0x3f,0xb1,0x98,0x9a,0xaa,0xaf,0xba,0x37,0x1d,0x17,0x1d,0x5e,0xa9,0xa8,0xa4 -,0x9c,0xa6,0x38,0x17,0x14,0x28,0xb7,0xb3,0xcc,0xb3,0xa5,0xa9,0xf1,0x28,0x3b,0xa3,0x9c,0xa6,0xb2,0xe8,0x30,0x29,0x20,0x21,0x2c,0x22,0x1e,0x2b,0x72,0xa4,0x9c,0xb1 -,0xd3,0xb1,0xb4,0x6e,0x30,0x27,0x41,0xa0,0x93,0x99,0xa5,0xb4,0xfe,0x3b,0x1d,0x10,0x15,0x1e,0x1f,0x28,0x67,0xb5,0xaf,0xb8,0x47,0xd9,0xa0,0x9f,0x9d,0x9a,0x9d,0xa3 -,0xbc,0x2a,0x1b,0x1d,0x24,0x29,0x23,0x1c,0x2c,0x9f,0x8f,0x95,0xaa,0x3d,0x29,0x26,0x1a,0x17,0x25,0xb8,0x98,0x93,0x96,0x9c,0xbb,0x1e,0x13,0x19,0x23,0x2b,0x36,0x61 -,0xad,0x9b,0x9f,0x64,0x27,0x32,0xbb,0xa4,0xa7,0xc0,0xa9,0xa1,0xc5,0x36,0x21,0x1a,0x1b,0x1c,0x16,0x1d,0x53,0xb3,0x9f,0x94,0x91,0x9c,0xbe,0x27,0x1f,0x4c,0xa7,0xa2 -,0xa9,0xa9,0x9f,0x9a,0xae,0x1b,0x0f,0x10,0x16,0x1f,0x20,0x1f,0x3a,0xac,0xa2,0x9e,0x9c,0x99,0x9d,0xac,0xb9,0xe3,0x3f,0x34,0x39,0x31,0x2c,0x33,0x2f,0x21,0x1f,0x37 -,0xae,0x9e,0xa6,0xc4,0xbf,0xb2,0xda,0x2b,0x23,0x2d,0xc2,0xb0,0x66,0xc4,0xad,0xb1,0xc8,0x71,0x2f,0x29,0xd8,0xb0,0xba,0xee,0x2e,0x1d,0x25,0xc8,0x9e,0x92,0x98,0xad -,0xed,0x68,0xea,0x3b,0x23,0x18,0x1c,0x25,0x20,0x23,0xde,0x9d,0x9c,0xa5,0xd2,0x33,0x2c,0x34,0x4a,0xbc,0xa6,0xa4,0x9c,0x9f,0xab,0xb1,0xda,0x2b,0x1b,0x16,0x1e,0x32 -,0x31,0x31,0x5b,0xb7,0xb3,0x40,0x1f,0x29,0xb2,0x9a,0x94,0x97,0xaa,0xb0,0xaa,0xb4,0x43,0x23,0x1a,0x12,0x14,0x1f,0xbe,0x97,0x8e,0x94,0xae,0x3b,0x22,0x1d,0x18,0x18 -,0x2a,0xaf,0xa2,0xa4,0x9c,0x9e,0xb0,0xe2,0x2a,0x1d,0x1f,0x2d,0x42,0xf6,0xe5,0xb5,0xac,0xd5,0x41,0x38,0xdd,0xaf,0xaf,0xbb,0xad,0xa4,0xb1,0xb8,0xdd,0x37,0x1c,0x0d -,0x0b,0x18,0x4d,0xa8,0x9d,0xa4,0xa3,0x9f,0xa3,0xac,0xce,0xcf,0xc5,0x61,0x4f,0xba,0xa7,0x9e,0xa1,0x3f,0x1c,0x1a,0x18,0x18,0x1d,0x26,0x40,0xc6,0xe6,0xac,0x98,0x95 -,0x9a,0xb6,0x2f,0x2f,0xd0,0xae,0xb3,0x5a,0x36,0x46,0x3f,0x30,0x23,0x1f,0x38,0xad,0xa9,0xc0,0xe4,0x44,0xe1,0xbf,0xad,0xa4,0xee,0x23,0x1c,0x25,0x63,0xad,0xaf,0xb7 -,0xbe,0xff,0xcc,0xca,0x36,0x2d,0x2f,0x2b,0x31,0x4b,0xc1,0xa0,0x96,0x98,0x9e,0xb6,0x35,0x27,0x25,0x27,0x26,0x1f,0x1f,0x2d,0xe6,0xac,0xb7,0x48,0x39,0xe5,0xba,0xd1 -,0x53,0xd7,0x9d,0x93,0x94,0x9d,0x6f,0x28,0x2c,0x34,0x2e,0x2a,0x23,0x24,0x2a,0x41,0xb0,0xb2,0x2f,0x1e,0x28,0x6a,0xad,0xa8,0xaf,0xab,0x9e,0x98,0x9a,0xb1,0x28,0x1c -,0x1f,0x20,0x1f,0x25,0x51,0xa2,0x97,0x9e,0xf8,0x2a,0x24,0x2d,0x3f,0x2d,0x25,0x2f,0xb4,0x9c,0x95,0x9a,0xc5,0x26,0x22,0x2c,0x37,0x35,0x25,0x25,0x44,0xac,0x9d,0xa5 -,0x55,0x2b,0x5d,0xaa,0xa6,0xaf,0xc2,0xba,0xac,0xa5,0xb2,0x2e,0x15,0x0f,0x15,0x22,0x31,0x2f,0x37,0xb1,0x99,0x95,0x9e,0xbc,0x4c,0xbe,0xa6,0xb2,0x40,0x32,0xc8,0xa7 -,0xa2,0xb3,0x3d,0x2a,0x23,0x1d,0x19,0x19,0x1b,0x2d,0xb4,0x9d,0x98,0x9e,0xca,0x39,0xb7,0x9d,0x9f,0xd9,0x20,0x1f,0xe0,0xa6,0xae,0x3d,0x22,0x29,0xc3,0xad,0x5e,0x23 -,0x21,0x4d,0xa5,0x9b,0xa4,0xfd,0x23,0x22,0x39,0xe8,0xe6,0x43,0x5d,0xbb,0xae,0xb7,0xc9,0x58,0x42,0x67,0x42,0x20,0x15,0x21,0xa8,0x92,0x92,0xa0,0xbc,0xc6,0xb0,0xaf -,0x67,0x1c,0x0f,0x16,0x2e,0xc1,0xaf,0xbc,0x30,0x29,0x7c,0xab,0xc3,0x2c,0x26,0xbc,0x94,0x90,0x9e,0xe0,0x3e,0xb9,0xa3,0xbc,0x23,0x19,0x28,0x5f,0xea,0x3f,0x2e,0x34 -,0x3b,0x3e,0x4a,0x39,0x21,0x24,0xb7,0x97,0x90,0x96,0xa9,0x70,0xef,0xd6,0x31,0x1b,0x1a,0x3d,0xa9,0xb0,0x41,0x33,0xeb,0xa6,0x9e,0xbd,0x20,0x14,0x19,0xea,0x9a,0x99 -,0xae,0x4e,0x3c,0xc3,0xa6,0xbe,0x1f,0x14,0x1d,0x4a,0xae,0xb8,0x51,0x7c,0xbd,0xab,0xa5,0xb2,0x3c,0x3f,0xae,0xa7,0xae,0xc2,0x56,0x40,0x3d,0x29,0x1e,0x1a,0x17,0x24 -,0xde,0xba,0xba,0xab,0xa3,0xa3,0x9e,0xa4,0x6a,0x27,0x2d,0xb3,0x9e,0xa7,0x5a,0x38,0xec,0xb0,0xbf,0x28,0x15,0x15,0x2a,0xda,0xcd,0x48,0x54,0xb4,0xa8,0xa2,0xa1,0xaf -,0x34,0x29,0x3c,0xc6,0xb5,0xca,0x41,0x5e,0xaf,0xad,0xc6,0x2c,0x1d,0x2d,0xb7,0xb9,0xe6,0xcf,0xcc,0xcc,0xc6,0xd5,0x67,0x3d,0x2c,0x3d,0xba,0xce,0x46,0xbd,0xac,0xb3 -,0xc7,0x30,0x18,0x19,0x43,0xaa,0xa3,0xad,0xbc,0xb7,0xa6,0x9e,0xa2,0xc6,0x23,0x1c,0x24,0x2d,0x2d,0x31,0x39,0x66,0xc1,0xcb,0x5a,0x35,0x30,0x4c,0xb9,0xae,0xab,0xa7 -,0xa5,0xa3,0xa6,0xb3,0xfd,0x27,0x1b,0x2c,0xbc,0xdc,0x2f,0x2f,0x3e,0x6f,0xcd,0xfb,0x36,0x2f,0x3f,0xd9,0xb1,0xa9,0x9f,0x9c,0xb3,0x34,0x39,0x3e,0x27,0x25,0x3d,0xec -,0xe2,0xc8,0xca,0xbb,0xa9,0xac,0xf7,0x2b,0x21,0x2d,0xd0,0xbd,0xbf,0xbd,0xc2,0x4a,0x41,0xcf,0xfd,0x3d,0x3a,0x3b,0x39,0x3b,0x5c,0xbb,0xad,0xac,0xb7,0xc8,0x78,0x6b -,0xc3,0xad,0xaa,0xc2,0x4e,0x3f,0x35,0x2e,0x34,0x2f,0x21,0x23,0x42,0xb0,0xae,0xba,0xbf,0xbd,0x67,0x3f,0xbd,0xab,0xb1,0xcd,0x48,0x3f,0xbf,0xa4,0xac,0x38,0x2d,0x4a -,0x45,0x2c,0x2a,0x3d,0x46,0x36,0x3a,0xce,0xb8,0xc2,0xb8,0xae,0xc0,0xc9,0xb7,0x74,0x3a,0x70,0xbf,0x49,0x29,0x33,0xbf,0xb5,0xc9,0x3f,0x2e,0x49,0xcb,0xfa,0x54,0xf7 -,0xbd,0xb6,0xb5,0xc7,0x45,0x4b,0x42,0x3c,0x6b,0xb9,0xbd,0x3d,0x32,0x4f,0xf1,0x45,0x3c,0x42,0x75,0xd4,0xb4,0xa1,0xa5,0xae,0xab,0xad,0x44,0x26,0x28,0x26,0x24,0x39 -,0xf1,0x51,0x37,0x46,0xb7,0xb1,0xc2,0xbf,0xc9,0x49,0x3e,0xbe,0xa3,0xae,0xed,0x6f,0x42,0x33,0x33,0x2f,0x36,0x65,0xb6,0xb5,0x68,0x39,0x41,0xdd,0x4b,0x33,0x53,0xb4 -,0xbb,0xb7,0xaa,0xbc,0x38,0x36,0xc3,0xbc,0xe0,0x3f,0x25,0x1f,0x38,0xa7,0x9a,0xa7,0x32,0x1d,0x24,0x3c,0xbd,0xa1,0x9f,0xac,0xe2,0xc0,0xaf,0xbe,0xd3,0x57,0x37,0x2a -,0x30,0x58,0x4e,0x38,0x2f,0x30,0x2a,0x25,0x42,0xb8,0xc5,0xe5,0xb5,0xbd,0xed,0xb4,0xa6,0xa8,0xbf,0xcf,0xc8,0x37,0x2e,0x55,0xc3,0xae,0xa8,0xa6,0xb3,0x2d,0x1f,0x27 -,0x3c,0xed,0xb9,0xaf,0x5e,0x26,0x21,0x2f,0x64,0x53,0x67,0xc8,0xdc,0x3b,0x3d,0xd4,0xcb,0xbb,0xa9,0x9e,0xab,0xca,0xb9,0xea,0x38,0x5c,0xb8,0xb8,0xd9,0x4c,0x2f,0x1f -,0x1c,0x28,0x3f,0x54,0x55,0x40,0x3e,0x3e,0xd3,0xa4,0xa6,0xd4,0x5c,0xaf,0x9f,0xa1,0xa9,0xc1,0x37,0x2e,0x52,0xa8,0xa7,0x48,0x25,0x21,0x22,0x27,0x3f,0xd7,0x4c,0x3f -,0xc7,0xc4,0x36,0x2e,0x40,0xcc,0xaf,0xa7,0xad,0x6d,0x36,0x46,0xb7,0xad,0xb1,0xb3,0xd2,0x4a,0x42,0x7a,0xcd,0xc7,0xb3,0xb3,0xe1,0x29,0x21,0x29,0x2e,0x3f,0x48,0x3d -,0x34,0x2b,0x67,0xa8,0xb4,0x4d,0x44,0x5b,0xe2,0xb6,0xa6,0xa9,0xbf,0xc3,0xa6,0xa9,0xcb,0xe9,0x4d,0x3c,0x33,0x32,0x35,0x35,0x2f,0x48,0xb0,0xbd,0x36,0x25,0x21,0x34 -,0xcb,0xa6,0x9e,0xab,0xc0,0xd1,0xc9,0xd1,0xd9,0xc9,0xd5,0x42,0x2d,0x3e,0xef,0x52,0xc5,0xbe,0x42,0x2c,0x2b,0x3b,0x41,0x4e,0xc4,0xb7,0xbd,0xbe,0xab,0xbc,0x35,0x28 -,0x28,0x44,0x7e,0x50,0x7a,0xc4,0xb7,0xb5,0xb5,0xed,0x33,0x3c,0xb9,0xa2,0xab,0xcb,0x5a,0x40,0x68,0xb9,0xae,0xf0,0x22,0x1a,0x24,0x42,0xcc,0xae,0xb5,0xe5,0x74,0xf9 -,0x4a,0x44,0x63,0xc5,0xb6,0xbe,0xb1,0xa6,0xa5,0xae,0x49,0x29,0x2a,0x34,0xe9,0xbf,0x46,0x2b,0x27,0x2e,0x56,0xb3,0xae,0x67,0x25,0x1e,0x45,0xa9,0xa5,0xb3,0x5b,0x50 -,0xcb,0xad,0xab,0x78,0x2b,0x29,0x3f,0xd8,0xb1,0xaa,0xc5,0x34,0x2b,0x3e,0xbf,0xaf,0xcd,0x3d,0x3f,0x51,0xc4,0xac,0xab,0xc7,0x63,0x4f,0x37,0x30,0x43,0xd3,0x4f,0x3c -,0x52,0xbd,0xae,0xaf,0xd5,0x38,0x39,0x56,0xb2,0xad,0xda,0x53,0xf7,0x4a,0x3c,0x7d,0xca,0x51,0x2a,0x29,0x39,0x44,0x4e,0x4a,0x5f,0xc0,0xb8,0xb2,0xb6,0xde,0x3a,0x69 -,0xc1,0x51,0x5f,0xbb,0xb2,0xbe,0x59,0x3f,0x4c,0x4a,0x37,0x28,0x2b,0x61,0xb8,0xab,0xa9,0xc5,0x50,0xee,0xfd,0xec,0xbe,0x72,0x29,0x28,0x56,0xa5,0x9b,0xa8,0x3d,0x2b -,0x2c,0x43,0xb3,0xbb,0x52,0x3e,0xdd,0xb9,0xbd,0xc8,0x69,0x32,0x1f,0x29,0x3d,0xce,0xb3,0xbd,0xbe,0xba,0xb9,0xdb,0x48,0x2f,0x2f,0x3e,0x41,0x40,0x4e,0xbd,0xb6,0xbb -,0xc1,0xbd,0xcf,0x43,0x36,0x2a,0x4b,0xa9,0x9d,0x9d,0xb3,0x29,0x22,0x2d,0x2b,0x36,0x5e,0x52,0x4d,0xd2,0xaf,0xa4,0xa5,0xb5,0x39,0x29,0x2e,0x45,0xc0,0xbe,0xcf,0xc5 -,0xbf,0x5d,0x41,0xc6,0xbc,0x50,0x2e,0x2b,0x38,0xc1,0xab,0xa9,0xaf,0xd5,0x4f,0x3c,0x30,0x2a,0x2a,0x3d,0xcd,0xb8,0xb6,0xb4,0x52,0x33,0x4e,0xb9,0xb3,0x77,0x25,0x1c -,0x47,0xa5,0x9b,0xa5,0x3c,0x22,0x2f,0xca,0xc0,0xe7,0x47,0x41,0xfd,0xa6,0x9d,0xa8,0xc9,0x32,0x20,0x24,0x37,0x5c,0xd2,0xd6,0xcd,0xa9,0xae,0x3e,0x3f,0x5b,0x4b,0x45 -,0x38,0x2f,0x46,0xb3,0xa8,0xb5,0x4f,0xed,0xb5,0xb9,0xfc,0x30,0x26,0x33,0xbf,0xad,0xaf,0xce,0x36,0x2e,0x38,0x51,0x59,0x30,0x25,0x2b,0xb7,0x9a,0x98,0xaa,0xeb,0x39 -,0x31,0x35,0x2c,0x31,0x48,0x41,0x39,0xb9,0xa6,0xa2,0xa2,0xd7,0x28,0x28,0x3b,0xc1,0xae,0xb8,0xbe,0xb9,0x7c,0x59,0xdd,0x3d,0x23,0x1c,0x26,0x56,0xa6,0x9e,0xb0,0x4f -,0xc4,0xa8,0xae,0xde,0x2b,0x1f,0x2b,0xce,0xaf,0xb0,0xcc,0xd8,0xba,0xd6,0x39,0x29,0x1f,0x25,0x50,0xb1,0xa4,0xa4,0xae,0xbb,0xd7,0x2f,0x27,0x23,0x25,0x3e,0xbf,0xb3 -,0xae,0xa6,0xa4,0xa2,0xb6,0x2d,0x19,0x1d,0x4f,0xac,0xab,0xd0,0x37,0x63,0xa8,0xa2,0xb5,0x28,0x15,0x1a,0x63,0x9f,0x97,0x9e,0x58,0x2d,0x57,0xde,0x3f,0x32,0x2b,0x2d -,0x50,0xb0,0xad,0xb0,0xae,0xa8,0xb9,0x2d,0x1d,0x1d,0x2a,0x41,0xba,0xaa,0xae,0xaf,0xae,0xb3,0x46,0x2a,0x23,0x23,0x34,0xdd,0xb6,0xb3,0xaa,0x9f,0x9f,0xc9,0x20,0x13 -,0x17,0x53,0xa0,0x9e,0xaa,0x70,0x51,0xaa,0x9c,0xaa,0x2e,0x15,0x15,0x2b,0xbe,0xa9,0xa9,0xb7,0xcc,0xc5,0xdb,0x35,0x2c,0x39,0xd6,0xd1,0xc0,0xad,0xaf,0xae,0xa9,0xb5 -,0x31,0x1b,0x19,0x27,0x51,0xcb,0xbb,0xbb,0xab,0x9e,0x9b,0xb8,0x25,0x1a,0x1e,0x2f,0x40,0x4f,0x41,0xee,0xa6,0x99,0x9d,0x70,0x19,0x11,0x23,0xaa,0x9b,0x9e,0xbb,0x46 -,0xea,0xac,0xb4,0x2a,0x1b,0x1e,0x2f,0x69,0xb9,0xaa,0xa4,0xa1,0xa2,0xb1,0x38,0x1c,0x1d,0x42,0xc7,0xeb,0x6f,0x6b,0xc6,0xa6,0x9f,0xc1,0x25,0x1c,0x25,0x4b,0xe9,0xc1 -,0xb7,0xab,0xa1,0x9f,0xae,0x2b,0x19,0x1e,0x7d,0xc3,0x3b,0x29,0x2b,0xb4,0x94,0x94,0xb9,0x1b,0x0f,0x1b,0x6e,0xa5,0xa1,0xb0,0xe5,0xcd,0xad,0xab,0x5c,0x21,0x20,0x37 -,0xd1,0xbd,0xba,0xae,0xa0,0xa1,0xbc,0x29,0x17,0x19,0x37,0xb8,0xd1,0xed,0xc3,0xaa,0x9f,0x9b,0x9e,0x4d,0x1a,0x18,0x27,0x37,0x45,0x41,0x6f,0xa5,0x98,0x9b,0xd1,0x1b -,0x19,0x3a,0xb9,0xbe,0x61,0x3a,0x69,0xab,0x9e,0xa7,0x32,0x15,0x17,0x2b,0xd3,0xad,0xb0,0xae,0xa1,0x9f,0xa7,0x6b,0x1e,0x19,0x29,0x59,0xd7,0xe1,0x76,0xad,0x9d,0x9c -,0xa8,0x2b,0x17,0x1e,0x44,0xc2,0xc6,0x63,0xc0,0xa7,0xa3,0xa7,0xef,0x21,0x1c,0x28,0x38,0x39,0x37,0x51,0xa3,0x93,0x8f,0x9c,0x2a,0x12,0x19,0x3d,0xc4,0x48,0x21,0x2d -,0xb4,0x9e,0x9b,0xba,0x23,0x1c,0x28,0x44,0xb9,0xb2,0xb4,0xaa,0xa7,0xa5,0xb5,0x25,0x13,0x19,0x38,0xc7,0x55,0x3a,0xaf,0x97,0x95,0x9a,0xbe,0x22,0x1f,0x28,0x35,0x3a -,0x34,0x4f,0xa7,0x9d,0x9e,0xae,0x29,0x19,0x1f,0x54,0xc9,0x34,0x22,0x5c,0x9d,0x92,0x93,0xbb,0x1d,0x19,0x26,0x49,0xd7,0x45,0x4a,0xb5,0xac,0xac,0xbb,0x3d,0x2a,0x2c -,0x33,0x44,0x63,0xe4,0xb1,0xae,0xe3,0x38,0x2f,0x3e,0xb7,0xbc,0x42,0xe7,0xad,0xa0,0xa1,0x3b,0x1a,0x1e,0x3d,0xaa,0xa4,0x51,0x2e,0xbf,0xa3,0x9e,0xb9,0x19,0x13,0x20 -,0x72,0xa5,0xb2,0x2e,0x63,0x9e,0x99,0x9e,0x34,0x16,0x29,0xb4,0xa9,0xc7,0x1b,0x1d,0xa9,0x98,0xa1,0x2d,0x0d,0x17,0xb2,0x9e,0xa5,0x38,0x22,0xad,0x90,0x97,0xce,0x13 -,0x10,0xd3,0x9b,0xa7,0x2d,0x14,0x27,0x95,0x8f,0xaa,0x19,0x0b,0x23,0x98,0x96,0xb6,0x1c,0x19,0xab,0x8f,0x9c,0x30,0x0f,0x17,0xa7,0x9a,0xbe,0x1d,0x17,0xbc,0x8c,0x90 -,0x4d,0x0f,0x0e,0x5f,0x96,0xa5,0x27,0x16,0x27,0x96,0x8c,0xa8,0x1c,0x0f,0x27,0x96,0x99,0x34,0x17,0x1b,0xa4,0x8c,0x9e,0x1f,0x0e,0x17,0x9f,0x92,0xc5,0x1c,0x19,0xcf -,0x8e,0x8e,0xc9,0x19,0x12,0x35,0x9d,0xc0,0x1e,0x18,0x2b,0x99,0x8e,0xac,0x21,0x1a,0x31,0x9a,0x9d,0x2b,0x19,0x1f,0xb0,0x8f,0x9b,0x3a,0x1e,0x1d,0xba,0x9d,0x43,0x1b -,0x1d,0x5b,0x93,0x92,0xca,0x22,0x19,0x2e,0xa2,0xb8,0x1f,0x1c,0x2d,0x9d,0x8d,0x9d,0x3f,0x1e,0x1c,0xbd,0x9c,0x65,0x20,0x1c,0x33,0x99,0x98,0xde,0x22,0x18,0x31,0x9c -,0xb4,0x1f,0x1a,0x2c,0x96,0x89,0x97,0x3e,0x15,0x14,0xba,0xa0,0x2f,0x16,0x16,0xc9,0x8c,0x90,0x6d,0x1b,0x17,0xca,0x94,0xb0,0x1c,0x16,0x31,0x90,0x8b,0xad,0x19,0x0d -,0x1a,0x9e,0x9b,0x33,0x1b,0x22,0x9d,0x8d,0xa1,0x2c,0x1e,0x23,0xc2,0xb9,0x2d,0x3c,0xad,0x9c,0x9e,0x28,0x14,0x21,0x47,0xb6,0xb5,0x34,0x37,0xaa,0x99,0x92,0xac,0x16 -,0x18,0x38,0xc3,0xc0,0x22,0x1a,0xb4,0x94,0x91,0xa7,0x16,0x13,0x7e,0xa5,0xaa,0x30,0x14,0x33,0x96,0x8d,0x97,0x1f,0x09,0x1a,0xb8,0xa5,0xb7,0x1f,0x29,0x9c,0x93,0x99 -,0xc5,0x15,0x1d,0xbb,0xb9,0xf8,0x1d,0x13,0x79,0x98,0x96,0x9c,0x28,0x16,0x4c,0xa9,0xab,0x59,0x19,0x2d,0x99,0x97,0xa3,0x2e,0x0f,0x1f,0xb2,0xb5,0x5e,0x1b,0x1c,0x9c -,0x8d,0x93,0xad,0x16,0x11,0xda,0xa3,0xad,0x2d,0x11,0x2b,0x99,0x99,0xa3,0x2b,0x13,0x33,0xa7,0xb3,0x4b,0x1e,0x2c,0x96,0x8f,0x9d,0x54,0x12,0x16,0xdd,0xc0,0x6b,0x26 -,0x1b,0xb1,0x92,0x9c,0xac,0x27,0x18,0xed,0xae,0xcf,0x41,0x1f,0x36,0x99,0x9c,0xbb,0x2f,0x16,0x29,0xa7,0xaa,0xc2,0x26,0x1a,0xad,0x8f,0x97,0xac,0x1c,0x0f,0x2d,0xdf -,0xd5,0x5d,0x1f,0x3e,0x99,0x99,0xa0,0x7b,0x17,0x27,0xae,0xae,0xb8,0x26,0x1a,0xb2,0x98,0x9f,0xbb,0x18,0x11,0x3c,0xb4,0xab,0xc4,0x1d,0x37,0x9a,0x95,0x9a,0x58,0x13 -,0x1e,0xcc,0xbb,0xbc,0x23,0x1d,0xa3,0x93,0x9d,0x5a,0x0f,0x10,0xca,0x9c,0x99,0xcd,0x15,0x28,0x9d,0x94,0x9b,0x2b,0x0e,0x1d,0xbb,0xa5,0xab,0x25,0x1e,0xa9,0x97,0x99 -,0xcd,0x11,0x13,0x4c,0xa8,0xa4,0x44,0x19,0x46,0x99,0x93,0x9c,0x21,0x0d,0x1d,0xb3,0x9c,0xa1,0x2a,0x1e,0xbb,0x9f,0x9f,0x60,0x16,0x1d,0xd1,0xab,0xab,0x32,0x1c,0xda -,0x96,0x90,0x9f,0x1d,0x0d,0x1c,0xbc,0x9b,0x9f,0x2d,0x1f,0xcb,0xa0,0x9d,0xcf,0x16,0x17,0x3d,0xa6,0x9e,0xcf,0x23,0x3c,0xa1,0x9a,0xa9,0x21,0x12,0x27,0xab,0x9d,0xb3 -,0x22,0x1f,0xb4,0x97,0x97,0xcd,0x13,0x11,0x2e,0xa8,0x9f,0xc9,0x2d,0x6b,0xa0,0x9d,0xc4,0x1b,0x12,0x33,0x9e,0x97,0xae,0x1e,0x1b,0xc6,0x97,0x97,0x48,0x10,0x12,0x37 -,0x9f,0x9c,0xbe,0x2c,0x3e,0xa3,0x9a,0xaf,0x1d,0x10,0x25,0xab,0x9d,0xaf,0x2c,0x33,0xae,0x9c,0xae,0x1d,0x0e,0x19,0xad,0x93,0x97,0x7e,0x1f,0x31,0xa5,0x9a,0xb9,0x1b -,0x15,0x30,0xa8,0xa2,0xff,0x23,0x36,0xa5,0x97,0xa6,0x1d,0x0d,0x19,0xac,0x91,0x99,0x49,0x22,0x39,0xa6,0x9e,0xf2,0x18,0x15,0x35,0x9e,0x99,0xb6,0x28,0x26,0xce,0xa0 -,0xab,0x29,0x18,0x2a,0xab,0x9f,0xb8,0x2b,0x26,0xd1,0x9a,0x97,0xea,0x13,0x10,0x32,0x9c,0x97,0xb0,0x29,0x25,0xcc,0xa2,0xae,0x24,0x16,0x27,0xa4,0x94,0xa3,0x2d,0x1c -,0x39,0x9d,0x98,0x7a,0x13,0x12,0x42,0x9a,0x98,0xd4,0x1d,0x22,0xb0,0x96,0x9f,0x21,0x0f,0x1c,0xa8,0x94,0x9d,0x3f,0x27,0xf0,0xa6,0xac,0x23,0x11,0x1c,0xad,0x8f,0x98 -,0x33,0x15,0x21,0xa5,0x94,0xaa,0x1a,0x0f,0x29,0x9d,0x95,0xac,0x24,0x24,0xb2,0x96,0xa4,0x1a,0x0c,0x19,0xa1,0x8d,0x97,0x2e,0x17,0x2d,0xa0,0x9a,0x3e,0x0f,0x10,0x7a -,0x90,0x8e,0xad,0x1b,0x1a,0xdd,0x9c,0xa7,0x24,0x14,0x23,0xab,0x9a,0xa7,0x2b,0x22,0xce,0x9a,0x9d,0x27,0x0d,0x15,0xaf,0x8e,0x8e,0xbb,0x1b,0x1d,0xde,0xa3,0xcd,0x18 -,0x13,0x42,0x96,0x8e,0xac,0x19,0x15,0x48,0x96,0x98,0x33,0x11,0x1b,0xad,0x8f,0x95,0x38,0x13,0x1b,0xaa,0x93,0xb0,0x13,0x0d,0x24,0x99,0x8c,0x9b,0x29,0x17,0x29,0xa8 -,0xa3,0x35,0x18,0x22,0xa5,0x8d,0x98,0x25,0x0f,0x1a,0xa8,0x93,0xb2,0x1b,0x15,0x31,0x98,0x92,0xc2,0x19,0x19,0xbb,0x93,0xa0,0x1b,0x0e,0x1d,0x9a,0x89,0x99,0x22,0x0f -,0x1d,0xa0,0x98,0x3f,0x12,0x12,0xc7,0x8b,0x8d,0x47,0x0f,0x0f,0xce,0x8e,0x97,0x2f,0x12,0x18,0xa5,0x8d,0x9f,0x23,0x11,0x25,0x99,0x98,0x2c,0x11,0x11,0xce,0x8b,0x8d -,0xc2,0x17,0x13,0xc9,0x95,0xaf,0x1e,0x14,0x2a,0x92,0x8c,0xb9,0x17,0x0e,0x2b,0x93,0x99,0x35,0x16,0x13,0xba,0x8c,0x97,0x38,0x16,0x19,0xa1,0x91,0xcb,0x19,0x0e,0x1f -,0x8f,0x89,0x9e,0x23,0x0f,0x24,0x99,0xa5,0x28,0x15,0x15,0xa4,0x8a,0x98,0x32,0x0f,0x14,0x9d,0x8f,0xac,0x1f,0x0d,0x23,0x8f,0x8e,0xaf,0x1c,0x0f,0x3d,0x94,0xaa,0x1f -,0x0e,0x12,0x9a,0x86,0x91,0x4e,0x0f,0x15,0x9f,0x96,0x5a,0x17,0x0c,0x39,0x8a,0x8c,0xb2,0x15,0x09,0x32,0x90,0x9b,0x3a,0x0f,0x12,0x9a,0x88,0x99,0x2f,0x0e,0x1a,0x98 -,0x96,0x49,0x12,0x09,0x3f,0x87,0x89,0xa8,0x14,0x0a,0x48,0x92,0xa8,0x25,0x0d,0x18,0x91,0x87,0x9d,0x23,0x0a,0x19,0x92,0x92,0xde,0x15,0x0c,0xbd,0x87,0x8f,0x75,0x0f -,0x0b,0xb5,0x8e,0xac,0x1d,0x0a,0x16,0x8d,0x86,0x98,0x26,0x0b,0x1f,0x90,0x98,0x3d,0x12,0x0c,0xac,0x88,0x94,0x39,0x0c,0x0b,0xa1,0x8b,0xa1,0x24,0x0a,0x1b,0x8c,0x8a -,0x9e,0x22,0x0b,0x27,0x92,0x9e,0x39,0x10,0x0c,0xa4,0x89,0x94,0xce,0x0e,0x0f,0x9f,0x95,0xbd,0x1e,0x0c,0x2c,0x8b,0x8c,0x9f,0x1c,0x09,0x2d,0x93,0x9a,0xda,0x10,0x0e -,0xa4,0x8d,0x98,0xd5,0x0e,0x14,0x9f,0x9a,0xb3,0x1d,0x0a,0x38,0x8b,0x8b,0x9d,0x19,0x0a,0x49,0x95,0x9e,0x58,0x0d,0x0e,0xa0,0x8d,0x94,0xff,0x0b,0x16,0x9c,0x97,0xab -,0x1a,0x0b,0xf3,0x8d,0x8f,0xa6,0x14,0x0d,0xb1,0x94,0xa1,0x28,0x08,0x12,0x96,0x8a,0x8f,0x4a,0x0c,0x1e,0x9d,0x9d,0xbe,0x14,0x0c,0xb5,0x8e,0x95,0xbe,0x12,0x16,0x9d -,0x93,0xa7,0x1e,0x09,0x1d,0x92,0x8d,0x9c,0x20,0x0c,0x32,0x97,0x9d,0x59,0x10,0x0e,0xa8,0x8d,0x94,0xbc,0x15,0x20,0x9b,0x9d,0x46,0x16,0x0d,0x44,0x8f,0x93,0xb2,0x18 -,0x0f,0xc8,0x93,0x9d,0x3a,0x0f,0x16,0x9d,0x8f,0x9c,0x56,0x19,0x33,0x9d,0xaa,0x2e,0x12,0x0f,0xbf,0x8f,0x98,0xc5,0x1c,0x1c,0xa5,0x96,0xaa,0x24,0x0c,0x1c,0x98,0x8e -,0x9e,0x2a,0x12,0x37,0x9d,0xa6,0x48,0x18,0x16,0xb5,0x96,0x9e,0xf2,0x1b,0x2a,0x99,0x96,0xce,0x13,0x0a,0x26,0x90,0x8d,0x9f,0x21,0x14,0xda,0x98,0xa4,0x2d,0x0e,0x12 -,0xa6,0x91,0x9e,0x41,0x19,0x3b,0x95,0x9a,0x40,0x12,0x0c,0x53,0x8d,0x92,0xcd,0x17,0x17,0xa5,0x8f,0xa7,0x1e,0x0b,0x14,0x9b,0x8e,0x9f,0x40,0x1c,0x4b,0x98,0xa7,0x29 -,0x14,0x11,0xad,0x8c,0x9e,0x32,0x17,0x1f,0x97,0x90,0xd8,0x19,0x0c,0x1b,0x95,0x92,0xad,0x36,0x1a,0xdc,0x95,0xaf,0x25,0x13,0x14,0xa3,0x8f,0xa9,0x3a,0x21,0x35,0x96 -,0x9b,0x2d,0x17,0x0e,0x2a,0x8f,0x94,0xce,0x23,0x19,0xb1,0x94,0xb7,0x29,0x18,0x18,0xa3,0x93,0xbb,0x3a,0x26,0x4e,0x96,0xa5,0x22,0x17,0x11,0xee,0x8d,0x9d,0x38,0x21 -,0x1f,0x9f,0x92,0xea,0x1e,0x14,0x1b,0x9b,0x94,0xd9,0x35,0x27,0xe9,0x95,0xac,0x1f,0x1a,0x19,0xb2,0x8f,0xb4,0x27,0x28,0x3b,0x95,0x93,0x2d,0x16,0x11,0x1f,0x95,0x94 -,0x44,0x2a,0x29,0xb4,0x94,0xce,0x1d,0x21,0x20,0xa8,0x94,0x53,0x21,0x2b,0xcf,0x91,0x9c,0x1c,0x15,0x17,0x3b,0x90,0x9d,0x2b,0x2e,0x31,0xa0,0x8f,0xd4,0x1d,0x19,0x1a -,0xaa,0x9a,0x2e,0x28,0x4a,0xad,0x90,0xab,0x19,0x1a,0x1c,0xbb,0x8f,0xac,0x21,0x2a,0x32,0x9c,0x93,0x33,0x1b,0x19,0x1b,0x9f,0x99,0x38,0x38,0x4c,0xab,0x90,0xc0,0x19 -,0x1f,0x22,0xb5,0x96,0x4b,0x1f,0x2f,0x45,0x96,0x98,0x21,0x1b,0x1d,0x2e,0x93,0x99,0x2c,0x2c,0x2e,0xb2,0x94,0x4b,0x18,0x26,0x28,0xa9,0x97,0x31,0x24,0x54,0xbd,0x95 -,0xa4,0x19,0x1b,0x23,0x68,0x90,0xa6,0x1c,0x29,0x3d,0xa6,0x95,0x33,0x1b,0x33,0x32,0x9f,0x99,0x29,0x25,0x46,0xe6,0x9b,0xc2,0x13,0x21,0x42,0xad,0x94,0x6d,0x1c,0x4e -,0xb8,0x97,0x94,0x28,0x1a,0x2c,0x30,0xa3,0xac,0x1b,0x28,0x6c,0xc2,0x9b,0x47,0x14,0x2d,0x40,0xb6,0x9d,0x2c,0x1d,0xc3,0xa9,0x94,0x9a,0x1f,0x20,0x4e,0xd9,0x98,0xa2 -,0x25,0x3f,0xbc,0xa6,0x98,0x39,0x16,0x2c,0x2e,0xd8,0xac,0x1f,0x1e,0xc4,0xb6,0x9e,0xb2,0x15,0x1b,0x39,0xd7,0x9c,0xbe,0x1b,0x36,0xba,0xa6,0x9c,0x2f,0x1a,0x44,0xd4 -,0xa6,0x9e,0x32,0x3b,0xa3,0x9f,0x9a,0xb5,0x19,0x23,0xc7,0xb6,0xa5,0x3d,0x1a,0x50,0xa8,0xa1,0xa2,0x25,0x17,0x3a,0xcb,0xab,0xac,0x24,0x29,0xb6,0xbc,0xb7,0x33,0x14 -,0x27,0xc3,0xd3,0xb4,0x37,0x22,0xb3,0x9e,0xa0,0xad,0x1e,0x1b,0xcb,0xb2,0xab,0xb9,0x24,0x3a,0xa9,0xab,0xa8,0x70,0x1f,0x51,0xab,0xad,0xa7,0x48,0x2a,0xb3,0xa9,0xb4 -,0xdb,0x1e,0x22,0xb1,0xab,0xaf,0xd6,0x1e,0x2c,0xaf,0xb4,0xb7,0x38,0x1a,0x2c,0xd0,0x63,0xc7,0x38,0x2a,0xb3,0xaa,0xbb,0xd0,0x21,0x25,0xae,0xab,0xb5,0xd5,0x23,0x3d -,0xa6,0xb3,0xbe,0x3e,0x1f,0x5b,0xa8,0xb5,0xb4,0x40,0x28,0xb1,0xa2,0xb2,0xc8,0x27,0x2d,0xab,0xaf,0xed,0x44,0x23,0x3e,0xa0,0xac,0xd0,0x39,0x1f,0xde,0xa0,0xb1,0xc4 -,0x33,0x23,0xbb,0xab,0x48,0x42,0x2a,0x2e,0xae,0xbf,0x43,0x4c,0x2b,0x5b,0xa1,0xba,0x3d,0x2e,0x23,0x5e,0xaf,0x42,0x36,0x2d,0x2a,0xb1,0xa7,0xef,0x50,0x2e,0x3a,0xa6 -,0xac,0x56,0x44,0x30,0xcc,0xa2,0xc7,0x44,0x50,0x3e,0xae,0xa1,0xbd,0x6f,0x3b,0x3e,0xa5,0xa3,0xed,0x45,0x2f,0x34,0xb4,0xbb,0x55,0x5f,0x2e,0x3f,0xb0,0x5e,0x3e,0x48 -,0x33,0xbb,0xa9,0x50,0x3a,0x2e,0x2e,0xb4,0xbb,0x34,0x37,0x29,0x2f,0xb8,0xd8,0x3a,0x38,0x2e,0xc0,0xa3,0xc9,0x45,0x3e,0x31,0xbc,0xae,0x5b,0x5d,0x43,0x5c,0xa8,0xb3 -,0x3e,0x3e,0x37,0xc3,0x9d,0xac,0x74,0x3d,0x31,0xc0,0xaf,0xeb,0xdb,0x50,0x44,0xad,0xad,0xf2,0x4e,0x48,0xbb,0xaa,0x5c,0x2c,0x2f,0x31,0xd5,0xad,0x5e,0x33,0x2f,0x3a -,0xb8,0xbf,0x40,0x3a,0x2f,0x4e,0xab,0xc7,0x30,0x34,0x32,0x73,0xc6,0x35,0x30,0x33,0x3a,0xb5,0xad,0x4d,0x38,0x33,0xe3,0xa7,0xc6,0x43,0x43,0x36,0xcb,0xa9,0xb1,0xba -,0xd5,0x40,0xc9,0xdc,0x3a,0xfe,0xcd,0xb7,0xa3,0xb1,0xeb,0xca,0x72,0xb4,0xa9,0x58,0x59,0x4a,0x34,0xb7,0xab,0xce,0x50,0x38,0x45,0xb1,0xe2,0x38,0x4d,0x2c,0x3c,0xbc -,0x48,0x3d,0x31,0x2a,0xdc,0xc7,0x32,0x3a,0x2e,0x2e,0xac,0xb4,0x51,0x44,0x27,0x31,0xbd,0x6c,0xf4,0x69,0x21,0x3a,0xba,0x4d,0xbd,0xc8,0xda,0xa4,0xb8,0x40,0xdf,0x33 -,0x47,0xa5,0xb0,0xbc,0xe0,0x2d,0xb8,0xa3,0xea,0xcc,0x4c,0x2a,0xae,0xa1,0xb7,0xb0,0x45,0x4b,0xa7,0xc6,0xdb,0xe5,0x26,0x4f,0xa9,0xda,0x55,0x33,0x25,0xae,0xab,0x49 -,0xf9,0x21,0x1d,0xb8,0xaf,0xb8,0xba,0x27,0x34,0xc5,0x2f,0x55,0x44,0x1e,0x50,0xbd,0x36,0x5c,0x34,0x33,0xa5,0xbb,0x3e,0x70,0x1f,0x2a,0xa6,0xb8,0xb6,0xba,0x26,0xc1 -,0xa8,0x58,0xb2,0x3f,0x1f,0xb2,0xad,0xce,0xad,0x3b,0x3f,0xa6,0x63,0xc8,0xae,0x20,0x7e,0x9c,0xba,0xaf,0x4e,0x24,0xb1,0xac,0xbd,0xa3,0x2b,0x17,0x5c,0x46,0xd6,0xa8 -,0x32,0x4e,0xb7,0x2d,0xc0,0xcc,0x1d,0xc6,0xac,0x40,0xb0,0x43,0x28,0xae,0xdd,0xdb,0xaa,0x1c,0x1d,0xb4,0x3f,0xbd,0xaf,0x25,0x62,0xbc,0x3f,0xa1,0xe4,0x1b,0xbe,0xef -,0x48,0x9e,0x46,0x36,0xab,0x3a,0xbf,0xaf,0x17,0x2c,0xa8,0xea,0xa1,0xb5,0x1c,0x40,0x47,0xc9,0x95,0x6b,0x1e,0xc7,0x2f,0xdb,0x9c,0x3b,0xd3,0xad,0x2d,0xa9,0xbc,0x17 -,0x40,0xc5,0x43,0x9d,0xd6,0x20,0xbf,0x44,0xb2,0x9b,0x20,0x22,0xaf,0x4c,0x9f,0x9e,0x22,0x37,0x3b,0x34,0x9b,0xe0,0x19,0x5e,0x35,0x44,0x9d,0x3c,0x2d,0xb5,0x3d,0xa0 -,0x9e,0x1a,0x29,0x6e,0x40,0x96,0xa2,0x23,0x33,0x1f,0x30,0x9a,0x46,0x27,0xbf,0x26,0xcc,0xa1,0x29,0x4c,0xcc,0x38,0x9a,0xac,0x1d,0x4e,0x31,0x38,0x9a,0xdd,0x29,0xcf -,0x2b,0xa9,0x9a,0x1e,0x25,0x43,0x27,0x9d,0x9c,0x2c,0x64,0x2d,0x3a,0x96,0xdd,0x23,0xb4,0x32,0xbb,0x98,0x2a,0x29,0x45,0x28,0x99,0x9c,0x1a,0x2f,0x28,0x23,0x95,0xa5 -,0x2e,0xbb,0x27,0xc0,0x95,0x29,0x2e,0xbd,0x23,0xa2,0x9b,0x1e,0x35,0x2e,0x24,0x96,0xb8,0x1a,0xce,0x28,0x41,0x93,0x4b,0x22,0x5e,0x24,0x9d,0x8f,0x24,0x2d,0x32,0x1b -,0x9a,0x9e,0x1f,0xd6,0x29,0x2e,0x92,0x44,0x19,0xd4,0x22,0xaf,0x8e,0x2f,0x26,0x2f,0x1b,0x98,0x95,0x26,0xe2,0x26,0x1d,0x93,0xad,0x1f,0xcc,0x21,0xc4,0x8e,0x31,0x23 -,0x4e,0x1a,0xa0,0x92,0x20,0x39,0x32,0x27,0x8f,0x9f,0x1e,0x49,0x1b,0x32,0x8d,0xd0,0x20,0x38,0x16,0xa7,0x8e,0x32,0x35,0x29,0x19,0x95,0x95,0x20,0x36,0x23,0x38,0x8c -,0xa7,0x22,0x2f,0x12,0xe9,0x8e,0x40,0x27,0x2a,0x16,0x9f,0x95,0x2d,0x53,0x23,0x26,0x90,0xa6,0x24,0x3a,0x1b,0xc2,0x8c,0xd4,0x23,0x28,0x15,0x9f,0x8f,0x29,0x21,0x1e -,0x21,0x8f,0x97,0x2f,0x3a,0x17,0x3e,0x8d,0xb7,0x22,0x28,0x15,0xa9,0x8d,0xfd,0x2f,0x1e,0x17,0x95,0x94,0x2f,0x2f,0x17,0x28,0x90,0x9f,0x4b,0x37,0x17,0xb0,0x8f,0x45 -,0x2a,0x20,0x19,0x97,0x95,0x32,0x30,0x1b,0x29,0x8f,0xa1,0x21,0x28,0x16,0xc3,0x8e,0xb0,0x3a,0x21,0x17,0x99,0x8e,0x4f,0x2c,0x16,0x1b,0x96,0x9a,0x42,0x2b,0x11,0x44 -,0x8f,0xab,0x2b,0x1a,0x12,0xaa,0x8f,0xac,0xca,0x1d,0x1b,0x98,0x9a,0x4a,0x35,0x15,0x29,0x97,0xaf,0x39,0x26,0x14,0xa7,0x8f,0xb5,0x55,0x1a,0x19,0x9a,0x99,0xdc,0x3b -,0x13,0x2f,0x8d,0xa2,0x37,0x21,0x0f,0xc9,0x91,0xaa,0x48,0x1b,0x17,0x9a,0x95,0xc0,0x67,0x17,0x26,0x97,0xa4,0xee,0x29,0x10,0xc7,0x8f,0xa2,0xbb,0x1e,0x0f,0xbe,0xa5 -,0x6a,0x6f,0x1a,0x2b,0x93,0x9f,0xcd,0x5a,0x19,0x63,0x97,0xba,0x51,0x22,0x17,0xa4,0x99,0xc7,0xcd,0x1d,0x1c,0xa3,0xaf,0x45,0x37,0x13,0x47,0x93,0xa3,0xa3,0xd6,0x17 -,0xd9,0xa9,0x3b,0xcc,0x22,0x1e,0x9b,0xa6,0x53,0xcb,0x1b,0x29,0x9e,0xbe,0xc0,0x52,0x17,0xc6,0x9c,0xbb,0xa0,0xd7,0x1e,0xb7,0xe7,0x27,0x73,0x1d,0x2b,0x99,0xac,0xb1 -,0xad,0x1c,0x3f,0xa2,0x3b,0xcf,0x33,0x18,0xa7,0x9f,0xcc,0xa2,0x32,0x22,0xa5,0xd1,0x44,0xdc,0x18,0x2d,0xa5,0x54,0xad,0xae,0x23,0xbe,0xb0,0x2e,0xdb,0x22,0x1d,0x9b -,0xa0,0xae,0x9f,0x24,0x2a,0xb2,0x2d,0xde,0x6d,0x19,0xc5,0xac,0x3f,0xa1,0xd1,0x29,0xa5,0xd0,0x38,0xc6,0x19,0x26,0x9f,0xd2,0xaa,0xa0,0x27,0xc6,0xb0,0x29,0xc5,0x3b -,0x1b,0xb9,0xb8,0x7d,0x9f,0x56,0x2f,0xb1,0x3e,0xde,0xb1,0x23,0x69,0xad,0x37,0xbb,0xba,0x28,0xad,0xac,0x3f,0xac,0x27,0x1c,0x6a,0x2d,0x4b,0xaf,0x3e,0xc1,0x44,0x3f -,0x9b,0x9d,0xac,0xb9,0x23,0x2f,0xbb,0x20,0x21,0x38,0xa3,0x8d,0x9c,0x24,0x1c,0x10,0x15,0x2f,0x24,0x3e,0xd1,0xb9,0x8e,0x8b,0xa9,0xaf,0xa4,0x9f,0xbc,0x0a,0x02,0x0b -,0x25,0x8b,0x80,0x87,0x29,0x0b,0x15,0x28,0xb0,0x28,0x1d,0x1b,0xa7,0xa7,0x0b,0x0a,0x3d,0x9a,0x90,0x8e,0x21,0x0d,0x1d,0x97,0x87,0x87,0x9b,0x1a,0x1f,0xad,0xaf,0x21 -,0x09,0x0d,0x0d,0x49,0x81,0x81,0x87,0x9d,0xb3,0x2d,0x0d,0x03,0x02,0x08,0xa7,0x85,0x2d,0x02,0x09,0x2a,0xe5,0x89,0x87,0xa6,0xb6,0x26,0xa5,0x84,0x80,0x8a,0xa2,0xb5 -,0xbe,0x11,0x01,0x03,0x0f,0x16,0xbb,0xa3,0x15,0x18,0x36,0xcd,0x6a,0x9c,0xb3,0x1e,0x2c,0x8b,0x85,0xbe,0x1e,0x3f,0xa1,0x96,0x8f,0xb4,0x1d,0x08,0x0f,0x9f,0x8a,0x94 -,0xcf,0x54,0x4c,0x26,0x05,0x00,0x08,0x15,0x9c,0x80,0x85,0x9f,0xa1,0x94,0xa9,0xbc,0x34,0x09,0x08,0x58,0x8c,0x9e,0x25,0x23,0x3d,0x2f,0xaa,0x8f,0x8d,0xc0,0x10,0x33 -,0x98,0x98,0x35,0x22,0x57,0xaf,0x11,0x00,0x02,0x04,0x47,0x84,0x81,0x8a,0x9c,0xa6,0xa3,0x97,0x8a,0x8e,0xbd,0x1c,0x26,0x3f,0x0f,0x17,0x99,0x98,0x33,0x0f,0x09,0x07 -,0x10,0xcb,0x93,0x87,0x96,0x2b,0x32,0x98,0x98,0x2c,0x17,0x10,0x0f,0xd2,0x8d,0x90,0x94,0xa1,0x2a,0x11,0x16,0x2f,0xc8,0xa3,0x9b,0x95,0x21,0x06,0x0e,0x4d,0xa1,0x9c -,0x99,0xc9,0x2b,0x18,0x1e,0xa4,0x98,0xae,0xcf,0xab,0xac,0x2a,0x0e,0x1f,0x4b,0x3e,0xa7,0x8a,0x85,0x8b,0x8b,0x97,0x31,0x0e,0x0a,0x09,0x0e,0x17,0x0c,0x04,0x05,0x48 -,0x8b,0x87,0x91,0xa0,0x9f,0xa9,0xba,0xae,0x8f,0x8c,0x88,0x8f,0xa4,0x18,0x03,0x0a,0x11,0x15,0x1a,0x35,0x29,0x1c,0x36,0xa1,0x95,0x99,0xc5,0x2c,0x1d,0x17,0xbb,0x97 -,0x9c,0xa3,0x9e,0x96,0x8f,0x92,0xb5,0xdf,0x24,0x0c,0x0c,0x1e,0xca,0x9b,0x88,0x8a,0x23,0x04,0x03,0x03,0x0c,0xaa,0x89,0x8d,0x96,0xb2,0xd9,0xa4,0x99,0x97,0xdf,0x17 -,0x0f,0x12,0x17,0x2a,0xa3,0x8c,0x85,0x8d,0xc0,0x41,0x40,0x20,0x41,0xaf,0xc8,0x20,0x13,0x1c,0x1e,0x10,0x09,0x0f,0x18,0x2a,0xad,0x98,0x94,0x8d,0x85,0x8a,0x93,0x96 -,0x97,0xa3,0xce,0x1a,0x0a,0x17,0x4d,0x40,0xaa,0x9d,0x2b,0x1c,0x15,0x0b,0x0a,0x20,0xaf,0xa9,0x9d,0x9c,0x9e,0xae,0x3a,0x23,0x28,0x37,0xae,0x95,0x94,0x9d,0xa3,0xb1 -,0x48,0x26,0x2e,0xc5,0xb2,0xbe,0x22,0x12,0x0f,0x17,0x59,0x9b,0x99,0xac,0x3b,0x20,0x19,0x22,0xa9,0x8e,0x94,0xc6,0x2b,0x18,0x11,0x2a,0xb4,0xae,0xa0,0x9e,0xb2,0xa0 -,0x8f,0x8f,0x8f,0x99,0x2f,0x14,0x10,0x0f,0x0e,0x11,0x11,0x11,0x1f,0xca,0xa4,0x9e,0xa8,0xb0,0x9d,0x9e,0xbc,0xb9,0xa4,0x92,0x8b,0x96,0x1b,0x08,0x0f,0x2f,0xa1,0x92 -,0x9b,0xd3,0x22,0x0d,0x0b,0x1d,0xc1,0xa9,0xb6,0x52,0x2d,0x2a,0x2c,0x55,0xa6,0x9a,0x91,0x98,0xbe,0xe3,0xb0,0xb5,0xb0,0xd2,0x1f,0x22,0x50,0xe0,0x52,0x30,0x1d,0x1a -,0x27,0x56,0xc5,0xb8,0xad,0xa4,0x9c,0xa0,0x3c,0x28,0x46,0xbf,0xad,0x32,0x0e,0x0f,0x27,0xbd,0x96,0x8e,0x9a,0xaa,0xa9,0xb2,0xaf,0xa1,0xad,0x4a,0x31,0x1b,0x11,0x0d -,0x0a,0x0c,0x15,0x3e,0x9f,0x98,0xa2,0xa9,0x9d,0x94,0x8f,0x93,0xa0,0xa3,0x9a,0xa7,0x21,0x0d,0x0c,0x21,0xad,0xa3,0xb9,0x48,0x3e,0x27,0x19,0x15,0x1d,0xc9,0xa7,0xbc -,0xce,0xc8,0xd2,0xb7,0xc6,0xd4,0x9f,0x99,0xac,0x68,0xda,0xb6,0xa6,0xb1,0x23,0x17,0x1f,0x47,0xb5,0xb3,0x5d,0x21,0x1c,0x27,0xbb,0x98,0x9c,0x51,0x26,0x2a,0x4e,0xb7 -,0xc3,0xbe,0xaa,0xc5,0x1d,0x11,0x16,0x4e,0x91,0x8a,0x8f,0x9f,0xd8,0x45,0xbf,0xa5,0x9d,0xa4,0x3e,0x16,0x0c,0x0b,0x0e,0x12,0x15,0x1e,0xbc,0x9b,0x9e,0xa1,0x9f,0x94 -,0x8b,0x93,0xdf,0x2a,0xec,0xa2,0xa0,0x40,0x10,0x0d,0x26,0xad,0x9f,0xa5,0xea,0x31,0x27,0x18,0x17,0x2b,0xd4,0xb6,0xb5,0x50,0x3f,0x56,0x3b,0x5d,0xa1,0x96,0x96,0x9d -,0xb8,0xbb,0xa7,0xad,0x33,0x1c,0x20,0x2e,0x30,0x28,0x20,0x34,0xaf,0xaa,0xba,0xc3,0x5b,0x2d,0x2b,0x38,0xba,0xa8,0xc0,0x65,0xbd,0xb0,0xcc,0x1d,0x0c,0x16,0xaa,0x92 -,0x93,0x9d,0xac,0xa1,0x97,0x9d,0xbe,0x58,0x3d,0x2c,0x1d,0x11,0x0f,0x14,0x11,0x12,0x20,0xd1,0xa2,0x9f,0xa7,0xa8,0x99,0x93,0x9a,0x9d,0x9b,0x9b,0xa3,0x43,0x17,0x11 -,0x20,0xcf,0xaf,0xc4,0x46,0xf9,0xbc,0x3c,0x1b,0x14,0x16,0x26,0x4a,0x3d,0x44,0x78,0xb4,0x9d,0x94,0x90,0x94,0xa1,0xd4,0x4d,0xd7,0xed,0x37,0x23,0x1c,0x27,0x45,0x36 -,0x22,0x1d,0x2e,0xb4,0xab,0xbb,0xb3,0xa4,0xb1,0x47,0x3c,0x51,0xd8,0x73,0x2f,0x1f,0x26,0x2b,0x20,0x24,0xb2,0x94,0x90,0x95,0xa6,0xab,0x9c,0x9f,0xbc,0x47,0xe8,0xaa -,0xb2,0x1f,0x0d,0x0c,0x0d,0x11,0x18,0x1d,0x38,0xab,0x9d,0x99,0x93,0x8f,0x8f,0x9c,0xb1,0xbd,0xdc,0x37,0x29,0x21,0x28,0xdd,0xae,0xb4,0xf0,0x59,0x3f,0x2d,0x1d,0x14 -,0x17,0x2b,0x5d,0x4f,0x43,0xe6,0xe4,0xc0,0xb5,0xb1,0x9c,0x93,0x93,0x9a,0xa4,0xca,0xcd,0xaf,0x62,0x22,0x15,0x0f,0x10,0x1e,0xdf,0x9a,0x94,0xa5,0xc9,0xfe,0x56,0x37 -,0x24,0x25,0x33,0xcf,0xbb,0x4b,0x3a,0xb4,0xa9,0x43,0x1f,0x1d,0x35,0xa7,0x97,0x9a,0x9d,0x9f,0xa0,0x9f,0xae,0xcb,0x3f,0x1f,0x14,0x0f,0x10,0x1b,0x25,0x20,0x2e,0xbb -,0xaa,0xaf,0x4a,0x40,0xaa,0x97,0x94,0x96,0x9d,0xae,0xa6,0xad,0x51,0x2b,0x2d,0x37,0x2f,0x2f,0x3e,0xc6,0xba,0xc8,0x2a,0x1a,0x15,0x14,0x19,0x1d,0x24,0x77,0x9d,0x99 -,0x97,0x8e,0x8d,0x91,0x9e,0xef,0x36,0x3a,0x3a,0x28,0x1d,0x1a,0x26,0x28,0x1d,0x25,0x46,0xab,0xa6,0xb2,0xbb,0xa7,0xad,0xbe,0xb6,0xb9,0xca,0x27,0x12,0x0f,0x1e,0x3a -,0xdc,0xd4,0xba,0x9d,0x91,0x8e,0x97,0xae,0xb2,0xba,0x39,0x2e,0x49,0xc6,0xae,0xe3,0x19,0x10,0x11,0x13,0x1a,0x27,0x38,0xca,0xc3,0xc1,0x9c,0x8f,0x8e,0x99,0xbd,0x3e -,0x4a,0xbc,0xaf,0xbe,0x6b,0xbe,0xab,0xaf,0xd2,0x2b,0x1d,0x1f,0x21,0x1c,0x18,0x1c,0x25,0x3b,0xe9,0xa9,0xa0,0xb7,0x4b,0x4b,0xab,0x97,0x93,0x9b,0xa4,0xad,0xb8,0xba -,0x37,0x19,0x17,0x18,0x14,0x19,0x24,0xcd,0x97,0x8f,0x9a,0xad,0x52,0x2a,0x29,0x4a,0xf3,0x39,0x26,0x1f,0x26,0x59,0xac,0xbf,0x3d,0x39,0xbd,0xa2,0x9e,0xa6,0xa2,0x96 -,0x95,0x9b,0xbd,0x26,0x1f,0x24,0x20,0x1a,0x15,0x17,0x1f,0x2d,0xcf,0xa5,0xa6,0x46,0x2a,0x33,0xc9,0xa5,0xa1,0xa4,0xa4,0xa4,0x9f,0x9c,0xa7,0xe2,0xf4,0xc4,0x3a,0x22 -,0x1f,0x2f,0xc3,0xba,0x2a,0x14,0x11,0x14,0x1c,0x27,0x2d,0x35,0xb2,0x97,0x8f,0x8b,0x8c,0x98,0xb0,0xef,0x48,0x54,0x39,0x1c,0x15,0x1a,0x2e,0xc8,0xd3,0x2c,0x2c,0xbd -,0xa6,0xab,0xc4,0xbf,0xb4,0xae,0xad,0xb8,0xed,0x29,0x18,0x14,0x18,0x1d,0x2a,0xbe,0x9e,0x96,0x92,0x97,0xa2,0xb9,0xab,0xa3,0xbd,0x2d,0x25,0x3f,0xba,0xae,0x3e,0x21 -,0x20,0x1f,0x1b,0x1b,0x1b,0x1c,0x31,0xba,0xa4,0x9c,0x9a,0xa4,0xb3,0xaf,0xaa,0xa8,0xb0,0xde,0xdf,0xa7,0x9c,0x9f,0xcb,0x24,0x1d,0x29,0x2b,0x18,0x0e,0x10,0x1c,0x37 -,0xb8,0xac,0xaa,0xb1,0xb8,0xb5,0xaa,0xa3,0x9e,0x9b,0x9f,0xa8,0xad,0xac,0x58,0x20,0x18,0x18,0x14,0x13,0x23,0xb0,0x98,0x99,0xab,0xe2,0xb9,0xa6,0xa6,0xe9,0x1a,0x10 -,0x19,0x38,0xca,0xb7,0xc3,0x3f,0x36,0xcf,0xa5,0x9f,0xac,0x62,0xd0,0xa1,0x98,0x9a,0xac,0x4d,0x3d,0x40,0x2d,0x1d,0x1d,0x2c,0x2f,0x27,0x22,0x34,0xc8,0xbe,0x3f,0x27 -,0x21,0x22,0x5c,0xa3,0x9b,0x97,0x90,0x90,0x98,0xa1,0xae,0xc1,0x3a,0x25,0x28,0x31,0x2c,0x1f,0x17,0x1b,0x2d,0x2f,0x1e,0x18,0x19,0x2a,0xa9,0x96,0x94,0x97,0x98,0x9a -,0x99,0x9d,0xa9,0x53,0x1f,0x16,0x15,0x21,0x5c,0xb3,0xc4,0x31,0x2f,0xdc,0xb8,0xdb,0xd8,0xc5,0xf4,0xef,0xc5,0xb7,0xb3,0xf5,0x27,0x1c,0x19,0x1d,0x33,0x4d,0x64,0xae -,0x9a,0x93,0x98,0xa3,0xb1,0xc3,0x4a,0x3c,0x62,0xba,0xb8,0x55,0x34,0x41,0xd8,0x48,0x27,0x18,0x13,0x1a,0x27,0x3a,0x4e,0xd1,0xb1,0xaa,0xa8,0x9e,0x99,0x9b,0xa5,0xd8 -,0x4f,0xaa,0x98,0x9c,0xb0,0x38,0x28,0x29,0x1b,0x12,0x14,0x18,0x1a,0x22,0x38,0xc3,0xaa,0xa5,0xa6,0xa2,0xa5,0xa8,0xa6,0xad,0xbf,0xb5,0x9f,0x9f,0xda,0x24,0x1a,0x19 -,0x22,0x31,0x3e,0xe6,0xbf,0xbe,0xbd,0xb1,0xa8,0xa5,0xc2,0x2a,0x1e,0x1d,0x2a,0x75,0xce,0x45,0x3e,0x46,0xd8,0xaf,0xa7,0xa5,0xba,0x33,0x2f,0xc9,0x9e,0x96,0x9d,0xbf -,0x46,0x42,0x2e,0x27,0x2c,0x2f,0x28,0x27,0x2c,0x2e,0x31,0x55,0xe0,0x34,0x2e,0x3e,0x65,0xb7,0xa2,0x93,0x8f,0x99,0xaa,0xb5,0xbb,0xc3,0x6c,0x29,0x1e,0x25,0x2d,0x28 -,0x28,0x2d,0x2a,0x24,0x1f,0x23,0x39,0xbd,0xa5,0x9d,0x9d,0xa3,0xb3,0xb0,0xa6,0xa9,0xb1,0xd5,0x2c,0x1c,0x1c,0x2f,0xb8,0xa8,0xb2,0x5f,0x42,0x5c,0xc8,0xd1,0x65,0x4a -,0x3b,0x49,0x4e,0x3c,0x3e,0xd0,0x4f,0x29,0x29,0x3f,0xbc,0xa9,0xa7,0xac,0xb4,0xcb,0xc2,0xb3,0xb7,0xc1,0xdd,0x37,0x2f,0x78,0xab,0xae,0x5a,0x3e,0x3f,0x31,0x26,0x24 -,0x23,0x1f,0x26,0x3e,0xc9,0xbe,0xb8,0xa7,0xa8,0xae,0x9e,0x9c,0xac,0xca,0xbd,0xb3,0xd0,0x3f,0x3f,0x40,0x2f,0x28,0x20,0x1d,0x22,0x25,0x28,0x43,0xbf,0xab,0xa3,0xa1 -,0xab,0xc0,0xc2,0xda,0xca,0xab,0x9f,0xab,0x45,0x33,0x30,0x2a,0x30,0x3c,0x38,0x35,0x47,0xb5,0xa6,0xaa,0xaf,0xaf,0xf7,0x28,0x29,0x2f,0x2a,0x2b,0x51,0xbf,0xe6,0x3f -,0xcf,0xaa,0xaa,0xaf,0xb4,0xea,0x38,0x3c,0xba,0xac,0xbc,0xd0,0xf5,0x2f,0x2a,0x4f,0xe3,0x4f,0x53,0x63,0x43,0x28,0x26,0x3b,0x4a,0x37,0x34,0x65,0xbb,0xbe,0xab,0x9f -,0xa8,0xbc,0xac,0x9e,0xa4,0xb4,0x5a,0x24,0x1b,0x29,0xcc,0xbc,0x35,0x1c,0x1b,0x26,0x2f,0xbf,0x9d,0xa3,0xcb,0x74,0xa7,0xa3,0xac,0xa8,0xb3,0x49,0x37,0xe4,0xc2,0x41 -,0x2b,0x25,0x23,0x23,0x2a,0xc5,0xb4,0x52,0x4a,0x61,0x40,0x37,0xcc,0xab,0xb0,0xba,0xab,0xb7,0x31,0x36,0xc5,0xb3,0xac,0xa6,0xa0,0xb7,0x2a,0x25,0x3e,0xf1,0x4b,0x6e -,0xeb,0x2e,0x25,0x30,0xe9,0xf3,0x4f,0xcd,0xee,0x34,0x29,0x2d,0x3a,0x47,0xc4,0xa0,0x9d,0xae,0xb6,0xac,0xc9,0x4c,0xac,0x9e,0xa6,0xba,0xdc,0x39,0x1e,0x1c,0x29,0x34 -,0x2c,0x20,0x1d,0x22,0x28,0x50,0xab,0xb5,0x43,0xdf,0xa3,0x9f,0xa0,0x9d,0xa6,0xbe,0xc1,0xa7,0x9c,0xa7,0x4a,0x2b,0x24,0x1d,0x1c,0x2f,0x68,0x45,0x55,0xbd,0x39,0x1d -,0x1f,0x3d,0xc3,0xb2,0xac,0xbb,0x47,0x34,0xe1,0xa7,0xa5,0xaf,0xb1,0xc0,0x4d,0x5c,0xae,0xa9,0xb1,0xb4,0xb9,0x37,0x1c,0x1f,0x2e,0x3b,0x43,0x3e,0x39,0x2c,0x25,0x42 -,0xb8,0x55,0x2f,0x35,0x42,0x4c,0xba,0x9f,0x9f,0xad,0xa9,0x9f,0xac,0xb9,0xac,0xaa,0xb8,0x46,0x2f,0x35,0x32,0x2d,0x5f,0xc4,0x28,0x17,0x17,0x1f,0x31,0xe0,0xa4,0xa6 -,0xbb,0xba,0xaf,0xae,0xbc,0xb5,0xab,0xb0,0x5d,0x3e,0xc5,0xd7,0x4b,0xb7,0xbb,0x38,0x26,0x2e,0x4a,0x3b,0x3b,0xe0,0xcf,0x3c,0x44,0xc3,0x5d,0x2b,0x24,0x3e,0xdc,0x37 -,0x3f,0xbc,0xad,0xb0,0xac,0xab,0x7e,0x3b,0xbc,0x9e,0xa5,0xd8,0x51,0x68,0x6f,0xbf,0xa8,0xab,0x2c,0x16,0x1b,0x2c,0x33,0x45,0xc9,0x73,0x3c,0x4d,0xba,0xce,0x3d,0x54 -,0xae,0xac,0xbd,0xa6,0x9c,0x9e,0xae,0xd1,0xef,0x2e,0x28,0x45,0x41,0x27,0x21,0x2b,0x35,0x3a,0xd7,0xb3,0x47,0x1f,0x29,0xc7,0xaf,0xb8,0xbc,0xaf,0xb1,0xbf,0xb0,0xb3 -,0x39,0x27,0x3e,0x74,0x4c,0xcb,0xb3,0xb0,0xcb,0xde,0xbb,0xd0,0x32,0x27,0x39,0x46,0x3f,0xcc,0xad,0xb2,0xcd,0xba,0xca,0x2b,0x21,0x32,0x5b,0x47,0x59,0xae,0xa0,0xaf -,0xc1,0xb7,0x6d,0x3c,0xed,0xad,0xb7,0x4f,0xbe,0xb3,0x6c,0x31,0x31,0x33,0x24,0x1e,0x29,0x38,0x2f,0x35,0xed,0xac,0xa6,0xad,0xaf,0xcc,0x3d,0x6d,0xa6,0xab,0x55,0xda -,0xae,0xb5,0x58,0x48,0x3d,0x28,0x1d,0x1d,0x27,0x37,0xe0,0xad,0xa1,0xac,0xc2,0xb3,0xc1,0x47,0x60,0xbb,0xdb,0x2d,0x34,0xb6,0xa1,0xab,0xda,0x36,0x2a,0x28,0x6a,0xab -,0xbe,0xfe,0xb9,0xaf,0xea,0x50,0x6f,0x3b,0x23,0x23,0x4b,0xd7,0x79,0xe9,0xb7,0xae,0xb5,0xbb,0x4a,0x27,0x22,0x33,0xdf,0xd7,0x48,0x77,0xb3,0xb3,0xad,0xa6,0xae,0x4c -,0x2c,0x28,0x2e,0x5f,0xaf,0xa6,0xb3,0x38,0x28,0x38,0x31,0x26,0x35,0xdd,0xfc,0xc9,0xa8,0x9f,0xa6,0xab,0xb5,0x5a,0x3a,0x2f,0x39,0x43,0x38,0xcc,0xa2,0xb0,0x34,0x34 -,0x3c,0x3d,0x3b,0x33,0x3e,0x5e,0xc5,0xac,0xa2,0xab,0xba,0xc5,0x3e,0x28,0x27,0x31,0x37,0x46,0xb8,0xac,0xb7,0x41,0x36,0x7b,0xba,0x4b,0x29,0x1f,0x22,0xbe,0x9a,0x99 -,0xac,0x4b,0x35,0x57,0xfa,0x39,0x33,0x33,0x3a,0xaf,0x9a,0x9e,0xbe,0x48,0x29,0x22,0x2f,0x52,0x51,0x45,0xfa,0xa7,0x99,0xac,0x3b,0x35,0x2c,0x25,0x2c,0x30,0x2d,0x59 -,0xa9,0xa5,0xac,0xaf,0xac,0xbd,0x3d,0x2c,0x30,0x43,0xeb,0xb3,0xaa,0xb9,0x54,0x47,0x33,0x2b,0x2e,0x26,0x22,0x28,0x5e,0xa2,0x9a,0xa6,0xc0,0xc7,0x47,0x33,0x25,0x21 -,0x33,0xe3,0xc6,0xb3,0xa1,0xa3,0xa4,0xab,0x3d,0x23,0x2b,0x50,0xe9,0xbd,0xaf,0xad,0xb8,0xe9,0x5b,0x36,0x21,0x18,0x1c,0x35,0xb7,0x9c,0x9d,0xc8,0x59,0xa3,0xa0,0xcf -,0x2d,0x1c,0x1e,0x3c,0xaa,0xa0,0xac,0x57,0xd8,0xad,0xd0,0x2d,0x1d,0x19,0x21,0xc9,0x9e,0x9d,0xae,0x5d,0x5b,0xf1,0x4d,0x31,0x1f,0x21,0x2e,0xca,0xaa,0xa3,0xa1,0x9f -,0xa9,0x53,0x24,0x18,0x23,0x78,0xb1,0xa9,0xac,0xbc,0xb0,0xa7,0xb8,0x36,0x1b,0x16,0x20,0xdc,0xa0,0x99,0xa6,0x4e,0xc9,0xad,0x52,0x26,0x1f,0x24,0x2f,0xb8,0xa0,0xa6 -,0xb2,0xab,0xaa,0xdd,0x28,0x1c,0x1b,0x1f,0x2e,0xad,0x9d,0x9f,0xa6,0xaa,0xcf,0x28,0x23,0x20,0x26,0x32,0xed,0xb0,0xac,0xa2,0x9c,0xa2,0x3c,0x1b,0x14,0x1d,0xdd,0xa5 -,0xa1,0xab,0xb5,0xa7,0x9a,0xa0,0x33,0x14,0x0f,0x1a,0x3b,0xb1,0xa6,0xac,0xb8,0xac,0xa2,0xb7,0x29,0x1a,0x1f,0x3e,0xb8,0x9d,0x9b,0xad,0xbc,0xb2,0xd0,0x2b,0x1c,0x1a -,0x22,0x2f,0xd5,0xab,0xa4,0xa2,0x9d,0x9f,0x46,0x1e,0x19,0x1d,0x27,0x3d,0xbc,0xb4,0xaf,0xa4,0x9d,0xae,0x28,0x14,0x17,0x36,0xad,0x9e,0xa1,0xb3,0xba,0xa7,0x9e,0xca -,0x1d,0x16,0x1d,0x2f,0xea,0xac,0xa4,0xa8,0xa5,0xa3,0xb6,0x2d,0x18,0x1a,0x2e,0x3f,0xce,0xa8,0xa1,0xa6,0xa6,0xa9,0x46,0x1f,0x1e,0x29,0x33,0x3d,0xc4,0xa9,0xa0,0x9e -,0xa0,0xcf,0x20,0x19,0x26,0xf4,0x49,0x37,0x37,0xdf,0xa2,0x97,0x9f,0x36,0x15,0x13,0x25,0xce,0xac,0xad,0xba,0xb8,0xa4,0x9b,0xa7,0x2a,0x14,0x19,0x3c,0xbb,0xaf,0xa9 -,0xa8,0xa7,0xa7,0xaf,0x3b,0x1e,0x1b,0x23,0x2c,0x38,0xb9,0xa1,0x9b,0x9c,0x9c,0xac,0x26,0x14,0x1a,0x29,0x2e,0x3e,0xf5,0xae,0x9d,0x96,0x9c,0x6d,0x1c,0x1b,0x38,0xe6 -,0xf4,0x7d,0xd0,0xb9,0xab,0xa8,0xcd,0x1f,0x14,0x1d,0x3a,0xda,0xb9,0xaf,0xa3,0x9d,0x9c,0xa2,0x4f,0x19,0x13,0x1f,0x37,0xe7,0xb4,0xa5,0x9c,0x9d,0x9f,0xb4,0x29,0x1b -,0x20,0x2c,0x2b,0x37,0xc1,0x9f,0x9a,0x9d,0xa8,0x47,0x1d,0x19,0x24,0x2d,0x33,0x56,0xae,0x9c,0x95,0x95,0xaf,0x23,0x18,0x24,0x3e,0x38,0x2a,0x2f,0xb7,0xa2,0x9d,0xa6 -,0x3a,0x1b,0x1b,0x2c,0x53,0xbd,0xbf,0xb8,0xab,0xa3,0xa0,0xb2,0x26,0x14,0x19,0x2a,0x3c,0x52,0xb0,0x9a,0x94,0x99,0xa4,0xce,0x2a,0x22,0x26,0x22,0x1f,0x32,0xb4,0x9d -,0x99,0x9d,0xb5,0x2b,0x1a,0x20,0x3b,0x30,0x25,0x32,0xab,0x9a,0x95,0x9a,0xbe,0x28,0x22,0x2f,0x32,0x30,0x35,0xca,0xaa,0xac,0xb6,0xd1,0x37,0x25,0x2a,0x2c,0x34,0xcc -,0xb1,0xac,0xbd,0x3a,0x47,0xb2,0xac,0xba,0x2f,0x1b,0x2c,0xab,0x99,0x9e,0x2f,0x19,0x2a,0xaf,0x9f,0xae,0x2a,0x27,0xb6,0x9c,0x9d,0x41,0x15,0x1a,0x3d,0xb0,0xac,0x3e -,0x1e,0x42,0x9d,0x95,0x9d,0x2f,0x1c,0x35,0xb7,0xac,0xce,0x21,0x28,0xac,0x9f,0xb3,0x25,0x13,0x21,0xbc,0xaa,0xbc,0x32,0x3b,0xa0,0x93,0x9f,0x36,0x17,0x1f,0xb4,0xa6 -,0xd8,0x23,0x1e,0xbc,0x94,0x9a,0x3c,0x16,0x18,0xc6,0x9c,0xae,0x2e,0x1e,0x44,0x98,0x94,0xb6,0x1f,0x16,0x2e,0xa4,0xb0,0x27,0x19,0x28,0x9e,0x8d,0x9a,0x2e,0x17,0x21 -,0xaf,0xa5,0x3d,0x1f,0x26,0xb4,0x92,0x98,0x37,0x17,0x1b,0xbc,0x9a,0xc3,0x1c,0x18,0x36,0x97,0x8f,0xb8,0x1d,0x19,0x3a,0x9f,0xac,0x28,0x1e,0x32,0x9e,0x8e,0x9d,0x2f -,0x1b,0x22,0xb3,0xb2,0x1f,0x14,0x1d,0xb7,0x91,0x98,0x4a,0x24,0x2b,0xb4,0x9d,0xe5,0x20,0x24,0x4c,0x9f,0x9a,0xc9,0x2d,0x2f,0x4f,0xa8,0xcc,0x1c,0x1b,0x2e,0xa6,0x93 -,0x9e,0x4d,0x27,0x25,0xe0,0xad,0x32,0x1e,0x26,0x68,0x9b,0x97,0xb3,0x37,0x25,0x2c,0xab,0xb2,0x2d,0x29,0x2b,0xbb,0x98,0xa5,0x3f,0x25,0x21,0xbe,0xa3,0x32,0x1c,0x1e -,0x43,0x94,0x8e,0xa2,0x3b,0x1a,0x23,0xaf,0xd4,0x1c,0x1a,0x25,0xa1,0x8d,0xa0,0x2e,0x1e,0x2c,0x9d,0x98,0x39,0x1b,0x1e,0xe0,0x90,0x95,0x41,0x19,0x11,0x34,0x9c,0xcb -,0x1c,0x1b,0x55,0x99,0x9a,0xcb,0x3c,0xc7,0xa5,0xab,0x2e,0x1e,0x25,0xb2,0xa1,0x39,0x20,0x2e,0xaf,0x98,0x9f,0x2a,0x17,0x1e,0xce,0x98,0xa8,0x21,0x1d,0xf0,0x95,0x91 -,0xeb,0x15,0x17,0x59,0x98,0x9e,0x1f,0x11,0x29,0x9b,0x8e,0xaf,0x19,0x18,0x47,0x9a,0x98,0x2f,0x0e,0x19,0xac,0x8c,0x90,0x31,0x13,0x19,0xff,0x9a,0xab,0x1d,0x1e,0x6e -,0x9b,0x91,0xd4,0x17,0x1a,0x25,0xad,0x97,0xc0,0x27,0x39,0xc2,0x9b,0xa0,0x21,0x1c,0x2d,0xd8,0xa0,0xd2,0x1a,0x2d,0xab,0x96,0x92,0x46,0x15,0x1d,0x2e,0xb1,0xa8,0x22 -,0x1c,0xdd,0x9b,0x8e,0xa1,0x18,0x17,0x30,0xbb,0x9e,0xeb,0x1e,0x3f,0xac,0x9d,0xa4,0x1e,0x14,0x2e,0xbd,0x9f,0xaa,0x1f,0x23,0xae,0x98,0x8f,0xab,0x19,0x1a,0x29,0x44 -,0xb7,0x2e,0x1c,0x6a,0xa2,0x98,0x9f,0x21,0x17,0x2d,0x5c,0xa9,0xab,0x2e,0x3d,0xa9,0x9c,0x94,0xba,0x15,0x17,0x21,0xea,0xa5,0x3f,0x1e,0x35,0xb4,0x97,0x94,0x46,0x1f -,0x25,0x2b,0xaf,0xa9,0x31,0x35,0xcc,0xa1,0x93,0xc0,0x14,0x15,0x1f,0xb5,0x97,0xbc,0x27,0x32,0xbf,0x96,0x95,0x2e,0x15,0x17,0x2a,0x9d,0x9f,0x2d,0x23,0x3a,0x9f,0x8e -,0xaa,0x1a,0x17,0x1f,0xaf,0x99,0x43,0x1d,0x2c,0xac,0x8e,0x96,0x1d,0x0d,0x13,0x48,0x91,0x98,0x2e,0x1f,0x2f,0x9f,0x8e,0xae,0x17,0x15,0x23,0xa6,0x9a,0x39,0x1b,0x2b -,0xaa,0x8d,0x98,0x1c,0x0e,0x19,0xc2,0x90,0x9e,0x24,0x1f,0x42,0x97,0x8e,0xfc,0x0f,0x0e,0x1f,0x9f,0x94,0xf0,0x23,0x33,0xac,0x93,0xa1,0x1c,0x12,0x1f,0xab,0x8f,0xa8 -,0x1b,0x19,0x3e,0x93,0x8b,0xbc,0x10,0x0b,0x19,0x9f,0x91,0xb6,0x24,0x26,0xbc,0x93,0x9f,0x1c,0x11,0x1b,0xac,0x8e,0x9c,0x2b,0x1b,0x31,0x96,0x8e,0xf3,0x0e,0x0c,0x1e -,0x98,0x90,0xed,0x18,0x1a,0xb8,0x8d,0x94,0x2d,0x0f,0x10,0xbe,0x8d,0x99,0x2b,0x19,0x2a,0x99,0x90,0x3b,0x0d,0x0b,0x2a,0x8e,0x8a,0xb7,0x14,0x10,0xd6,0x8b,0x8f,0x30 -,0x0d,0x0e,0xd0,0x8e,0x9a,0x2b,0x17,0x28,0x98,0x8f,0xe1,0x11,0x0c,0x28,0x8f,0x8d,0xbf,0x19,0x1a,0xab,0x8e,0x9f,0x18,0x0a,0x11,0x9e,0x88,0x96,0x29,0x0f,0x1c,0x9d -,0x90,0xb4,0x17,0x0e,0x2e,0x94,0x95,0x4c,0x18,0x1d,0xa4,0x8d,0x9d,0x1b,0x0a,0x13,0x9c,0x89,0x94,0x2b,0x10,0x1f,0x9f,0x96,0xd1,0x15,0x0e,0x30,0x94,0x91,0xb8,0x1b -,0x1c,0xaa,0x91,0xa2,0x20,0x0e,0x1b,0x9e,0x8f,0xa3,0x1d,0x11,0x3e,0x92,0x8f,0x66,0x0d,0x09,0x32,0x8e,0x8c,0xad,0x18,0x1a,0xaf,0x97,0xac,0x19,0x0c,0x25,0x93,0x8b -,0xa3,0x17,0x0e,0x38,0x90,0x8f,0x48,0x0c,0x0c,0xcb,0x8d,0x8e,0x7d,0x10,0x19,0xa5,0x8f,0xa2,0x18,0x0a,0x20,0x93,0x8c,0xa3,0x18,0x10,0x54,0x94,0x9b,0x23,0x0a,0x14 -,0x9b,0x88,0x90,0x21,0x0b,0x1c,0x97,0x8c,0xa5,0x11,0x09,0x2c,0x92,0x8e,0xbf,0x13,0x16,0xaf,0x8f,0xa3,0x15,0x08,0x1c,0x90,0x85,0x94,0x1e,0x0d,0x22,0x9a,0x93,0x50 -,0x0c,0x0c,0xb9,0x8a,0x8c,0x5c,0x0e,0x10,0xb5,0x91,0xa2,0x1c,0x0d,0x28,0x92,0x8b,0xa7,0x17,0x10,0x4c,0x92,0x98,0x21,0x08,0x0f,0x9f,0x86,0x8d,0x3c,0x0d,0x14,0xa9 -,0x93,0xaf,0x15,0x0e,0x46,0x8d,0x8b,0xbd,0x0f,0x0f,0xbf,0x8e,0x97,0x1f,0x08,0x10,0x9e,0x87,0x8f,0x27,0x0b,0x1c,0x9b,0x8f,0xbd,0x0e,0x0a,0x3f,0x8b,0x88,0xa1,0x14 -,0x0e,0x42,0x98,0x9f,0x1b,0x0b,0x1f,0x91,0x88,0x9b,0x15,0x09,0x25,0x94,0x8e,0xc5,0x0d,0x0d,0xb7,0x8a,0x8c,0x57,0x0c,0x16,0xa4,0x8e,0xa4,0x0f,0x07,0x28,0x8d,0x86 -,0x9a,0x12,0x09,0x2c,0x94,0x92,0x30,0x09,0x0f,0x9d,0x88,0x8d,0x2d,0x09,0x16,0xa0,0x8e,0x9d,0x15,0x09,0x2b,0x91,0x8b,0xa3,0x12,0x0f,0xc8,0x95,0x9c,0x20,0x09,0x19 -,0x97,0x88,0x8e,0x27,0x0a,0x1a,0xa1,0x94,0xb8,0x0e,0x0e,0xac,0x8c,0x8e,0xe5,0x0c,0x10,0xb2,0x91,0x97,0x25,0x0a,0x20,0x94,0x8a,0x99,0x19,0x0c,0x2e,0x9b,0x98,0x4c -,0x0c,0x0e,0xaa,0x8b,0x8c,0xcc,0x0c,0x12,0xb0,0x96,0x9f,0x1c,0x0d,0x44,0x8f,0x8c,0xa3,0x10,0x0a,0x38,0x96,0x94,0x5c,0x0c,0x15,0x9d,0x8b,0x91,0x2d,0x0a,0x19,0xa4 -,0x98,0xaf,0x11,0x0c,0xba,0x8a,0x89,0xa3,0x0e,0x0b,0x3d,0x9a,0x9a,0x2c,0x0b,0x1d,0x94,0x89,0x91,0x1e,0x07,0x18,0x9f,0x93,0xa8,0x13,0x0e,0xaf,0x8c,0x8c,0xb9,0x0b -,0x0d,0xbb,0x95,0x9c,0x1d,0x09,0x25,0x8e,0x87,0x93,0x18,0x07,0x1f,0x9e,0x96,0xbf,0x0e,0x14,0x9b,0x8a,0x8d,0x3d,0x08,0x0f,0xac,0x94,0xa0,0x17,0x09,0x3f,0x8c,0x87 -,0x98,0x11,0x07,0x29,0x9a,0x96,0x40,0x0a,0x14,0x97,0x88,0x8b,0x3f,0x09,0x15,0xaa,0x98,0xab,0x12,0x0a,0xc7,0x8b,0x8a,0xa9,0x0b,0x09,0x4f,0x95,0x95,0x3e,0x0c,0x1f -,0x96,0x8a,0x8d,0x2c,0x09,0x19,0xb2,0x9d,0xce,0x0e,0x0f,0xa3,0x8b,0x8b,0xb1,0x0c,0x0f,0xcd,0x9a,0x9b,0x24,0x0b,0x27,0x94,0x88,0x8f,0x1c,0x09,0x1d,0xb2,0x9b,0xbb -,0x10,0x16,0xac,0x8f,0x8b,0xb5,0x0e,0x17,0xbe,0x9a,0x9f,0x16,0x0b,0x37,0x91,0x88,0x94,0x13,0x09,0x1f,0xaa,0x94,0xba,0x10,0x1a,0xa9,0x8e,0x8b,0x49,0x0c,0x18,0xca -,0x9b,0xa6,0x12,0x0f,0xba,0x8e,0x88,0x9d,0x0e,0x0d,0x2e,0x9f,0x95,0x28,0x09,0x1a,0x9f,0x89,0x8a,0x2c,0x0e,0x22,0xbe,0x9b,0xbe,0x0e,0x16,0xab,0x8e,0x89,0xd6,0x0a -,0x17,0xb8,0x97,0x9a,0x15,0x09,0x28,0x99,0x88,0x8e,0x1a,0x0e,0x29,0xb2,0x99,0x3e,0x0c,0x1f,0x9d,0x8e,0x8d,0x34,0x0e,0x29,0xae,0x9d,0xb6,0x0c,0x0c,0xc9,0x90,0x87 -,0x99,0x0f,0x12,0x45,0xa4,0x98,0x27,0x0b,0x25,0xa1,0x8f,0x8f,0x28,0x15,0xdf,0xac,0xa4,0x39,0x09,0x12,0xa8,0x8f,0x8a,0xad,0x0e,0x1b,0xb3,0x9a,0x99,0x1a,0x0b,0x32 -,0xa0,0x8f,0x94,0x1c,0x14,0x5a,0xb5,0xa7,0x2f,0x0b,0x1f,0x9d,0x8f,0x8c,0xff,0x0f,0x2d,0xa2,0x99,0xae,0x0c,0x08,0x36,0x96,0x8a,0x93,0x1a,0x16,0x5e,0xad,0xa2,0x28 -,0x0b,0x25,0x9b,0x8f,0x91,0x2a,0x0f,0x54,0x9b,0x9a,0x5c,0x09,0x0a,0xc4,0x8e,0x8a,0x9f,0x11,0x17,0xaf,0x9d,0xa2,0x1c,0x0a,0x24,0x9b,0x8f,0x94,0x2c,0x15,0xc8,0x9d -,0xa7,0x23,0x08,0x11,0x9a,0x8a,0x8f,0xcc,0x0e,0x21,0x9c,0x98,0xb3,0x10,0x08,0x26,0x97,0x8e,0x95,0x29,0x1c,0xab,0x9d,0xb9,0x18,0x08,0x1c,0x97,0x8e,0x95,0x3e,0x12 -,0x37,0x9a,0x9b,0x5a,0x0d,0x0a,0x5f,0x8f,0x8e,0x9f,0x1d,0x1c,0xae,0xa1,0xbb,0x1e,0x0d,0x24,0x9c,0x96,0x9e,0x35,0x1b,0xb0,0x94,0xa4,0x24,0x09,0x0d,0xad,0x8e,0x91 -,0xa8,0x1d,0x20,0xa8,0x9e,0xbd,0x18,0x0a,0x25,0x98,0x95,0x9e,0x3e,0x22,0xa8,0x97,0xb5,0x1f,0x0a,0x0f,0xa0,0x8f,0x99,0xda,0x16,0x2b,0x94,0x98,0x71,0x13,0x09,0x2b -,0x95,0x96,0x9f,0x38,0x1f,0xab,0x9b,0xe6,0x1f,0x0d,0x1a,0x96,0x92,0xad,0x30,0x18,0xd5,0x8e,0x9c,0x2d,0x0f,0x09,0x42,0x90,0x9c,0xae,0x2e,0x24,0x9b,0x94,0x76,0x1c -,0x0c,0x1a,0x97,0x9a,0xd3,0x38,0x23,0xac,0x8e,0xab,0x20,0x0f,0x0d,0xaa,0x8d,0x9d,0xc3,0x21,0x1e,0x9c,0x98,0x3f,0x1d,0x0d,0x1e,0x98,0x9b,0xb8,0x61,0x2b,0xa7,0x91 -,0xda,0x1b,0x11,0x14,0xa0,0x90,0xae,0x42,0x1e,0x29,0x96,0x9a,0x35,0x1a,0x0d,0x2c,0x91,0x9a,0xc1,0x3d,0x2a,0xa6,0x97,0x38,0x1b,0x15,0x19,0x9d,0x97,0xf8,0x36,0x27 -,0xca,0x8f,0x9d,0x26,0x16,0x0f,0x6f,0x8e,0xa3,0x3f,0x2b,0x22,0xa6,0x9a,0x36,0x21,0x1a,0x26,0x97,0x9b,0x3c,0x37,0x28,0xb9,0x91,0xb6,0x1d,0x19,0x19,0xa8,0x8f,0xb4 -,0x35,0x2b,0x35,0x97,0x99,0x2f,0x1e,0x14,0x20,0x9e,0xb5,0x27,0x2c,0x26,0xb2,0x97,0x4f,0x1f,0x21,0x29,0x99,0x90,0xbe,0x41,0x38,0xc4,0x92,0x9c,0x2f,0x1e,0x15,0x30 -,0x99,0xa9,0x3f,0x3d,0x34,0xa8,0x9e,0x2f,0x1d,0x19,0x1d,0xa9,0xa2,0x33,0x2f,0x2b,0xeb,0x99,0xb1,0x23,0x1b,0x18,0xc7,0x93,0xa7,0xf0,0x43,0x3b,0x9e,0x9b,0x43,0x2a -,0x21,0x2f,0x9c,0xa1,0x52,0x6b,0x47,0xab,0x96,0xb9,0x25,0x1e,0x1b,0xbb,0x9b,0x68,0x2d,0x2a,0x2e,0xa1,0xa7,0x2c,0x29,0x1e,0x2f,0x9e,0xae,0x41,0x56,0x30,0xb9,0xa3 -,0x2d,0x1f,0x1f,0x1f,0xab,0x9d,0x6e,0x53,0x3f,0xda,0x9a,0xab,0x33,0x36,0x25,0xdb,0x9a,0xb4,0x4d,0x51,0x2d,0xb0,0xa3,0x3d,0x47,0x3a,0x33,0x9e,0xa0,0x4a,0x71,0x2f -,0x44,0xa1,0x6f,0x27,0x2c,0x1d,0x68,0x9f,0xdd,0x46,0x3a,0x27,0xb5,0xac,0x36,0x41,0x2b,0x29,0xa9,0xb9,0x33,0x51,0x2d,0xd7,0x9d,0xe3,0x34,0x41,0x29,0xb3,0x9d,0xe1 -,0xe8,0x47,0x2d,0xa9,0xab,0x39,0x4d,0x2a,0x33,0x9f,0xb3,0x47,0xcf,0x38,0xb7,0x9f,0x5e,0x40,0x49,0x2b,0xae,0xa2,0x3b,0x3b,0x2f,0x2f,0xa3,0xac,0x3b,0x64,0x2c,0x3c -,0xa2,0xcf,0x42,0xcc,0x2b,0x55,0xb3,0x2c,0x35,0x40,0x29,0xaf,0xae,0x2c,0x52,0x3a,0x32,0xa3,0xbb,0x34,0xea,0x28,0x36,0xac,0x33,0x31,0xc7,0x37,0xb1,0xa2,0x3a,0x75 -,0xd3,0x38,0xa2,0xa9,0x37,0xb6,0x7b,0x47,0xa3,0x7a,0x30,0xcc,0x35,0xbb,0x9c,0x53,0x4a,0xca,0x2b,0xb7,0xa8,0x3f,0xbf,0x4a,0x27,0xb4,0x72,0x25,0x66,0x32,0x3f,0xa6 -,0x43,0x2d,0x7a,0x2f,0xc9,0xa6,0x39,0x47,0x59,0x26,0xc6,0xc8,0x25,0x3c,0x37,0x3a,0xa7,0xd8,0x2e,0xbd,0x4b,0xc6,0x9f,0xd8,0x4e,0xbe,0x41,0xb5,0xac,0x2d,0x44,0xdb -,0x3e,0xa7,0xb3,0x2d,0xde,0x62,0xdc,0x9f,0xb3,0xf4,0xb0,0x38,0x3d,0xb8,0x2f,0x3c,0xb4,0xda,0xb2,0xbb,0x27,0x67,0xe2,0x32,0xb1,0xf5,0x2b,0xe5,0x4a,0x41,0xbb,0x30 -,0x2d,0xd4,0x33,0x7b,0xbd,0x27,0x3a,0xc2,0x50,0xb1,0xbf,0x2d,0xe4,0x42,0x2f,0xb9,0x3c,0x2b,0xd6,0xcf,0xb7,0xac,0x3f,0x3d,0xec,0x31,0xb9,0xa7,0x61,0xb9,0xb7,0x4f -,0xb7,0xcd,0x49,0xb0,0xd0,0x53,0xb1,0x3f,0x38,0xb5,0xb7,0xac,0xa8,0xd6,0xd5,0xce,0x32,0xbf,0xc9,0x29,0xec,0xc0,0xe8,0xbd,0x3f,0x2d,0x3d,0x2f,0x51,0xb4,0x31,0x2c -,0x69,0x49,0xcd,0xe7,0x2d,0x36,0x3e,0x4a,0xad,0xec,0x24,0x3c,0x3f,0x48,0xb3,0xc5,0x65,0x50,0x31,0x68,0xce,0x2f,0x45,0xb7,0xc6,0xbe,0xc6,0x55,0xba,0xbe,0xb8,0xa3 -,0xdb,0x33,0xc7,0xbe,0xbf,0xb3,0xcd,0xf3,0xe1,0xe3,0xb4,0xd3,0x2b,0x40,0xb9,0xbd,0xad,0xaf,0xeb,0xee,0x4e,0xcc,0xc2,0x2b,0x26,0x4e,0xdc,0xbf,0xb6,0x45,0x32,0x36 -,0x4d,0xb7,0xce,0x34,0x44,0x4d,0x35,0xd9,0xc9,0x4c,0x4e,0x41,0x4f,0x36,0x1f,0x2c,0xc1,0xcb,0xba,0xb3,0x49,0x3e,0x50,0xf3,0xbc,0x65,0x39,0xbf,0xbd,0xc4,0xab,0xc4 -,0x40,0xe6,0xcf,0xb4,0xc2,0x2f,0x61,0xc1,0x4f,0xbb,0xac,0x5d,0x48,0xd0,0xbd,0xad,0x45,0x2f,0xd8,0x4a,0xbc,0x9f,0xb8,0x3e,0x3b,0x36,0x5b,0xd8,0x3d,0xda,0x45,0x29 -,0xd3,0xf6,0x2d,0x4d,0xc7,0xb7,0xb9,0x32,0x3c,0xcf,0x34,0xcd,0xa3,0x59,0x36,0x5f,0x55,0xbe,0x40,0x2a,0x4b,0x34,0x41,0xa3,0xba,0x38,0xd2,0xe8,0xc5,0xb5,0x42,0x7e -,0xfa,0x30,0xac,0xa9,0x2c,0x33,0x5f,0xd6,0xad,0x7e,0x34,0x3c,0x1f,0x42,0x9d,0xaf,0xd8,0xc5,0x3b,0xdf,0xc1,0x3f,0xb7,0xcb,0x40,0xa4,0xbc,0x28,0x4d,0x44,0x53,0xb3 -,0x40,0x3b,0x43,0x28,0xb4,0xa1,0x37,0x43,0xcd,0x58,0xac,0xbd,0x3d,0xcd,0x2d,0x3e,0x9d,0xbb,0x3c,0xf1,0x2a,0x45,0xbe,0x30,0x49,0x3b,0x2e,0xa3,0xa7,0x35,0x5a,0x35 -,0x30,0xa7,0xae,0xb6,0xc1,0x1e,0x3d,0xa8,0x48,0xe9,0xcd,0x2f,0xe5,0x5a,0x2e,0xce,0x30,0x38,0x9e,0xbe,0x3f,0xc6,0x2b,0x67,0xa7,0x66,0xce,0x45,0x24,0xa7,0xa8,0x2b -,0x56,0x2c,0x2b,0xa8,0xbc,0xd6,0xca,0x1b,0x47,0x9b,0x73,0xbe,0xbd,0x2a,0xa7,0xa8,0x34,0xbe,0x24,0x1f,0x9c,0xaf,0x44,0xbb,0x1c,0x2b,0xa6,0x4e,0xb1,0xcf,0x1b,0xab -,0xa4,0x29,0xaf,0x5e,0x28,0x9d,0xbb,0x43,0xae,0x1c,0x33,0x9b,0x38,0x51,0xc5,0x18,0xc9,0xa4,0x2a,0xb9,0x2b,0x1a,0x9a,0xa9,0x46,0xa2,0x1f,0x22,0x9a,0xd7,0xba,0xaa -,0x16,0xc7,0x9d,0x22,0xcc,0x35,0x14,0xa1,0xa3,0x40,0xa3,0x1a,0x19,0x96,0xc6,0xbc,0x9d,0x18,0x3b,0x9b,0x2f,0xae,0xce,0x12,0xa2,0xa8,0x1f,0xa3,0x22,0x18,0x94,0xaf -,0x60,0xa2,0x15,0x2f,0x92,0x36,0xb0,0xb9,0x0e,0xad,0x9a,0x39,0x9e,0x24,0x0d,0x9d,0xb7,0x3b,0x9b,0x15,0x1f,0x92,0x6d,0xad,0xb1,0x0c,0xce,0x97,0x32,0x9b,0x43,0x0d -,0x9e,0xa0,0x66,0x98,0x19,0x15,0x9b,0x2e,0xd6,0xa3,0x0d,0x43,0x94,0x2b,0xa4,0x5e,0x0d,0x9d,0x9c,0x47,0x99,0x1d,0x12,0x92,0xb1,0xbe,0xa2,0x0b,0x22,0x96,0x37,0xa3 -,0xc3,0x09,0xb6,0x99,0x5f,0x95,0x24,0x0e,0x98,0xac,0xb7,0x9a,0x0d,0x18,0x97,0xef,0xa2,0xac,0x0a,0x44,0x9d,0x4b,0x95,0x37,0x0e,0x9d,0xa5,0xc5,0x9a,0x14,0x17,0x96 -,0xc9,0xa8,0xaa,0x0a,0x34,0x9a,0x4b,0x9c,0x33,0x0b,0xa2,0x9c,0xbd,0x97,0x16,0x0f,0x9b,0xae,0xa4,0xa2,0x0c,0x23,0x99,0xbc,0x96,0xeb,0x0a,0xc0,0xa0,0xbb,0x98,0x16 -,0x0c,0xa6,0xb3,0xa2,0x9a,0x0e,0x1d,0x9c,0xc5,0x98,0xb6,0x0d,0xd3,0x9f,0xba,0x98,0x1e,0x0d,0xaa,0xab,0xa6,0x9d,0x0e,0x18,0x9e,0xb7,0x9a,0xb4,0x0d,0x40,0x99,0xa2 -,0x96,0x1f,0x0a,0xcb,0xaa,0x9e,0x9d,0x0f,0x15,0xa7,0xac,0x99,0xa9,0x0e,0x2e,0x9e,0xaa,0x97,0x27,0x0c,0xec,0xa5,0x9d,0x95,0x18,0x0f,0xc6,0xc6,0xa0,0xab,0x0e,0x25 -,0x9e,0xa9,0x97,0x54,0x10,0xea,0xac,0xb2,0x9e,0x1b,0x13,0xa7,0xa3,0x9a,0xa1,0x12,0x20,0xa8,0xbf,0x9d,0x38,0x0a,0x2d,0xa9,0xa2,0x92,0x2e,0x13,0xca,0xbd,0xac,0xa5 -,0x18,0x25,0x9d,0xa8,0x9c,0xbd,0x0f,0x2a,0xab,0xbc,0xa1,0x29,0x0f,0xd4,0xab,0xa5,0x99,0x28,0x22,0xab,0xe4,0xb1,0xbb,0x14,0x2d,0xa4,0xbe,0x9e,0x74,0x16,0xd9,0xb6 -,0xd3,0xa4,0x22,0x18,0xab,0xac,0xa0,0x9f,0x1b,0x2a,0xad,0xe2,0xa3,0xe2,0x15,0x3c,0xb9,0xca,0x9f,0x40,0x21,0xb0,0xe6,0xfe,0xaf,0x1a,0x1d,0xad,0xb0,0x9c,0xa4,0x1c -,0x3a,0xb2,0x51,0xa3,0x4c,0x1a,0xcc,0xcb,0xc7,0x9f,0x2a,0x25,0xaf,0x49,0xbd,0xb9,0x1a,0x2a,0xb0,0xd1,0x9f,0xaf,0x22,0xc1,0xb5,0x70,0xaa,0x2e,0x1e,0xcc,0xed,0xaf -,0xa3,0x2a,0x3a,0xbb,0x30,0xae,0xb8,0x22,0xca,0xba,0x66,0xa5,0x33,0x1f,0xad,0xb8,0xb6,0xa4,0x27,0x28,0x5d,0x2c,0xd0,0x54,0x20,0x72,0x5a,0x32,0xa2,0x9c,0x9e,0xa5 -,0xf2,0x2c,0x3d,0x33,0x1f,0x25,0xba,0x93,0x91,0xb2,0x1f,0x16,0x16,0x24,0x23,0x24,0x2c,0x34,0x8f,0x85,0x8c,0x93,0x39,0x04,0x04,0x19,0x2c,0xac,0x94,0x8b,0x87,0x8a -,0x33,0x01,0x03,0x98,0x80,0xcf,0x15,0x1d,0x4a,0x97,0x87,0x3b,0x03,0x01,0x18,0x8f,0x8d,0x91,0xb5,0x30,0xb9,0x9c,0xc8,0x2d,0x9d,0x87,0x8e,0xa5,0x2f,0x09,0x06,0x06 -,0xb8,0x94,0x14,0x01,0x08,0x98,0x83,0x85,0xcf,0x17,0x45,0x94,0x8b,0x97,0xb1,0x97,0x91,0x1d,0x0e,0x29,0x58,0x1c,0x19,0x23,0x23,0x16,0x35,0xc0,0xc1,0x8e,0x93,0x18 -,0x0f,0x1e,0x2f,0x8e,0x83,0x98,0x14,0x18,0xb9,0x8c,0x98,0xcb,0x2c,0x06,0x02,0x0e,0xb5,0x9c,0x88,0x87,0x99,0x48,0x1a,0x08,0x01,0xb6,0x80,0x83,0xd2,0x18,0x39,0xe8 -,0xa9,0x38,0x06,0x01,0x00,0x41,0x80,0x82,0x8f,0xa3,0x92,0xcb,0x0e,0x0c,0x3a,0x8e,0x83,0x85,0xae,0x11,0x0f,0x17,0x13,0xdd,0x19,0x03,0x00,0x0e,0x86,0x80,0x83,0x9d -,0x53,0x31,0x3e,0x2f,0x20,0xab,0x92,0x8f,0xd8,0x1e,0x1b,0x25,0x9c,0x8f,0x1d,0x02,0x0a,0x2e,0xdf,0x9b,0x8c,0xb7,0x27,0x41,0xc5,0x65,0xac,0x8f,0xa7,0x33,0xa5,0x8c -,0x8b,0xac,0x57,0x27,0x0a,0x01,0x03,0x1d,0xa2,0x97,0x8f,0x9d,0x2f,0x16,0x15,0x24,0xa5,0x91,0x95,0x94,0x98,0x9c,0xa4,0xc5,0x2c,0x0d,0x05,0x05,0x1c,0x91,0x8f,0x9e -,0xab,0xae,0x30,0x18,0x20,0x99,0x85,0x84,0x9c,0x1e,0x28,0x20,0x0f,0x20,0xb0,0x1b,0x08,0x20,0x91,0x93,0xbb,0xab,0xcc,0x1e,0x10,0x11,0x14,0xa8,0x83,0x81,0x90,0x0e -,0x08,0x1b,0x9d,0x91,0xa9,0x13,0x0a,0x4b,0x9f,0x9d,0x5c,0x36,0x4c,0x1c,0x0f,0x0e,0x1b,0xae,0x8c,0x88,0x8d,0xa7,0x2d,0xd4,0x91,0x9a,0x16,0x05,0x03,0x11,0x9a,0x83 -,0x83,0x8f,0x36,0x13,0x1e,0x17,0x0c,0x19,0x9b,0x89,0x91,0x9d,0xbb,0x1a,0x22,0x2b,0x0b,0x01,0x07,0xc3,0x88,0x82,0x87,0x8e,0xb2,0x1d,0x1a,0x21,0x41,0xae,0x97,0xab -,0x37,0x47,0xb3,0xd6,0x1f,0x0f,0x0a,0x07,0x10,0xbb,0x8f,0x85,0x8c,0xaf,0x2b,0x2c,0x24,0x29,0x9c,0x8f,0x9e,0x26,0x13,0x1d,0xac,0x8c,0x92,0x42,0x0e,0x0b,0x21,0xb6 -,0xbd,0xc5,0xaa,0xab,0xed,0xcd,0x3e,0x27,0xaf,0x9f,0xae,0x32,0x47,0xb1,0x97,0x93,0xaf,0x1b,0x06,0x01,0x0a,0xaf,0x8b,0x8d,0x99,0xbf,0x38,0xc5,0x79,0x3e,0xe3,0xa3 -,0x96,0xa0,0xc9,0x27,0x2b,0xbf,0x49,0x11,0x06,0x08,0x23,0x95,0x89,0x8f,0xa3,0xc3,0xb2,0xe4,0x2b,0xb6,0x99,0x96,0x9f,0x49,0x2a,0x23,0x17,0x12,0x1b,0x1e,0x19,0x34 -,0xb0,0x9b,0x8f,0x94,0xb2,0x2b,0x25,0x23,0x4c,0x9b,0x8e,0x92,0xe1,0x10,0x10,0x36,0xa4,0xa7,0x30,0x13,0x16,0x33,0xc3,0xdb,0x55,0xac,0x9c,0xa3,0xed,0x26,0x38,0x9f -,0x9d,0xa8,0xb0,0xb0,0xaf,0xbe,0xcf,0x32,0x16,0x08,0x08,0x15,0xb0,0x8e,0x92,0xaa,0xb9,0xac,0xaf,0x4b,0x26,0x38,0x9d,0x8f,0x98,0xac,0x29,0x1d,0x2e,0x2e,0x13,0x07 -,0x07,0x27,0x8d,0x84,0x89,0xa5,0x3c,0x27,0x22,0x2f,0xf5,0xad,0x9b,0x96,0x9f,0xbe,0x29,0x15,0x0f,0x11,0x12,0x17,0x2f,0xad,0x96,0x8f,0x9d,0xb9,0x31,0x1f,0x29,0xe8 -,0x9e,0x94,0x9f,0xdc,0x46,0xec,0xac,0xa0,0xb8,0x23,0x18,0x1b,0x26,0x25,0x1c,0x31,0xa2,0x9c,0xbf,0x1e,0x1b,0xc1,0x95,0x96,0xa7,0xb3,0xa4,0x9e,0xa9,0xb3,0x50,0x1b -,0x0c,0x08,0x10,0xd3,0x9c,0x9f,0xb6,0xc4,0xac,0xa9,0x52,0x23,0x29,0xbc,0x96,0x93,0xa3,0xdc,0x3b,0x32,0x1e,0x0f,0x0c,0x15,0x3f,0x9c,0x8e,0x8f,0x9a,0xac,0x42,0x2d -,0x2c,0x2d,0xcf,0x9d,0x92,0x95,0xba,0x1b,0x0f,0x10,0x18,0x1e,0x20,0x33,0xbb,0xa5,0x9a,0x9a,0xaa,0x4d,0x26,0x1d,0x2f,0xa6,0x9a,0x9b,0xa5,0xc8,0xb4,0xa7,0xbd,0x2b -,0x15,0x15,0x2c,0x50,0x2a,0x1f,0x2d,0xad,0x9a,0xac,0x23,0x1b,0x3b,0xa7,0x9f,0xa0,0x9a,0x98,0x9f,0xb4,0x3a,0x24,0x1e,0x14,0x0f,0x18,0x2e,0xb1,0x9c,0x98,0x95,0x9a -,0xbe,0x1d,0x13,0x22,0xa6,0x98,0xa2,0xd7,0x3e,0xcb,0xb9,0x22,0x0f,0x0d,0x11,0x35,0x9a,0x8e,0x8d,0x94,0xaa,0xd9,0x51,0x2b,0x1e,0x27,0xbd,0x9a,0x9d,0x69,0x20,0x1c -,0x1f,0x25,0x1b,0x1c,0x2e,0xc4,0x9e,0x9a,0xa3,0xa5,0xac,0x32,0x23,0x26,0x54,0xa0,0x9c,0xab,0xc2,0xbf,0xba,0xb2,0xdf,0x36,0x34,0x22,0x1c,0x1d,0x21,0xc7,0xa2,0xbb -,0x2f,0x25,0x3f,0x9e,0x98,0xa9,0xbd,0xc1,0xad,0xa3,0xaf,0x5a,0x34,0x26,0x1b,0x17,0x1d,0x46,0xaf,0xa8,0xa1,0xa6,0xb7,0xce,0x2c,0x24,0xd1,0xac,0xae,0xc2,0x35,0x4d -,0xbc,0x31,0x18,0x17,0x1c,0x2c,0xc3,0xa9,0x96,0x8d,0x93,0xab,0x2a,0x1d,0x22,0x2e,0xbe,0x9a,0x9a,0xad,0x58,0x24,0x29,0x3b,0x1c,0x0e,0x11,0x29,0x9d,0x8f,0x9a,0xac -,0xb3,0xe3,0x3b,0x26,0x25,0xe1,0xa3,0x9d,0x9f,0xad,0xa2,0x9f,0xfe,0x2b,0x1b,0x10,0x11,0x1c,0x23,0x52,0xae,0xb3,0xaf,0xc6,0x5b,0xbe,0xb6,0xcf,0xde,0xae,0x9d,0x99 -,0xa3,0xbc,0x4f,0x2e,0x22,0x10,0x0c,0x19,0x42,0xa2,0x93,0x98,0xa6,0x9d,0x9e,0xb8,0x3c,0x20,0x1c,0x25,0x40,0xad,0x9a,0xa4,0x39,0x19,0x10,0x19,0x22,0x2e,0xc7,0x9f -,0x94,0x90,0x9f,0xb5,0xa3,0xad,0x40,0x25,0x1b,0x23,0xce,0xb9,0xe0,0x46,0x25,0x21,0x23,0x2a,0x6b,0xb9,0xc4,0x76,0x65,0xaf,0x9e,0xb2,0x4b,0xc6,0xa8,0x9d,0xa9,0x27 -,0x24,0xcb,0xa8,0xa3,0xba,0x24,0x1d,0x31,0x47,0x3f,0x2a,0x20,0x1f,0x22,0x36,0xae,0x99,0x92,0x97,0xaa,0xc4,0xcf,0xea,0xcc,0x67,0x32,0x2c,0x1e,0x15,0x1e,0xc8,0xa6 -,0xa3,0xbe,0x32,0xe8,0xa6,0x9e,0xaa,0x4d,0x30,0x49,0x4d,0x55,0x4c,0x3e,0x51,0x2e,0x19,0x19,0x2c,0x3f,0xb6,0x9f,0x95,0x91,0xa6,0x29,0x21,0x3f,0xb3,0xac,0x7e,0x3f -,0xbb,0xa4,0xa3,0xd2,0x29,0x21,0x16,0x0f,0x16,0x37,0xa0,0x93,0x9c,0xbb,0xce,0x3f,0x2a,0x3a,0xbf,0xab,0xa8,0xcc,0xd0,0x9e,0x93,0x97,0xba,0x1b,0x10,0x14,0x1e,0x2a -,0x28,0x2c,0xef,0xaf,0xae,0xb7,0x55,0x4f,0xb2,0xac,0xb0,0xb5,0xb7,0xb0,0xa4,0x9e,0x9e,0xee,0x13,0x0a,0x0a,0x1a,0xbd,0xa5,0xa4,0xa0,0x9f,0x9b,0x98,0xad,0x37,0x31 -,0x29,0x21,0x1e,0x22,0xdb,0x9c,0xa0,0x3e,0x1c,0x13,0x17,0x32,0xa6,0x98,0x9b,0xae,0xd6,0xb1,0x98,0x98,0xc9,0x1f,0x1c,0x38,0xb5,0xd7,0x26,0x2d,0xd3,0xc7,0x54,0x22 -,0x19,0x28,0xc4,0xab,0xae,0xeb,0x45,0x5e,0xae,0x99,0x8f,0x9f,0x36,0x23,0x2b,0xbe,0xaa,0xc4,0x34,0x36,0x3e,0x3c,0x2c,0x1d,0x1f,0x3d,0xde,0x3e,0x27,0x2d,0xae,0x92 -,0x8e,0x9b,0xc7,0x30,0x2f,0xdb,0xb9,0x3e,0x1d,0x1b,0x22,0x48,0xa6,0xa9,0x4c,0x37,0x4f,0xad,0x9e,0xb9,0x24,0x29,0xba,0x9a,0x9a,0x53,0x1a,0x1e,0x4b,0xd5,0x2c,0x19 -,0x18,0x2a,0xb0,0x97,0x90,0x97,0xb8,0x28,0x28,0x4f,0xf1,0x49,0xf1,0xa8,0x98,0x99,0xc4,0x21,0x1c,0x33,0x4c,0x1d,0x0d,0x11,0x47,0x98,0x91,0xa3,0xf8,0x3d,0x47,0xd2 -,0xb0,0xcd,0x3a,0x68,0xa8,0x94,0x8f,0xa0,0x2b,0x19,0x1e,0x32,0x33,0x17,0x0e,0x1e,0xaf,0x9a,0xa0,0x66,0x29,0x4d,0x9d,0x9a,0xb5,0x31,0x2f,0xbd,0x99,0x96,0xaf,0x26 -,0x14,0x13,0x1d,0x2d,0x2f,0x36,0xc7,0x9d,0x92,0x96,0xaa,0x3c,0x3a,0xd1,0xcb,0x1f,0x12,0x1f,0xae,0x99,0xa9,0x26,0x15,0x1d,0xca,0xa0,0xaf,0x2d,0x26,0xdd,0x9d,0x8f -,0x92,0xb4,0x21,0x21,0xb7,0x9d,0xaf,0x1d,0x10,0x22,0xa9,0x9f,0x42,0x17,0x17,0x3e,0xa6,0xae,0x37,0x2d,0x42,0xb0,0x9f,0x9f,0x9f,0xa7,0xb6,0xb5,0xad,0x40,0x1c,0x1d -,0x3a,0xac,0xa4,0xed,0x1c,0x1b,0x49,0xb4,0x45,0x1b,0x19,0x50,0x9c,0x95,0xa0,0xc9,0x7b,0xa9,0x99,0xa6,0x2f,0x13,0x10,0x22,0xb1,0xa2,0xba,0x33,0x2e,0xb8,0x9c,0x9f -,0x46,0x1c,0x1e,0xcc,0x9c,0x9f,0xc4,0x2e,0x33,0xc0,0xbc,0x26,0x14,0x19,0x2e,0xc1,0xaa,0xab,0xb4,0xab,0xa1,0xa6,0xc4,0x2c,0x26,0x3b,0xcb,0xa8,0x9e,0xa4,0xcd,0x5c -,0xc5,0x3a,0x19,0x0e,0x14,0x42,0xa3,0xab,0x3b,0x31,0xcb,0x9e,0x9a,0xaf,0x2b,0x25,0x3f,0xae,0x9b,0x99,0xa5,0x44,0x2c,0x47,0xb9,0x45,0x1b,0x13,0x18,0x35,0xac,0xa8 -,0xcc,0xe2,0xae,0xa4,0xb5,0x31,0x2d,0xce,0xa8,0xa6,0xb2,0x4c,0x2b,0x31,0xe2,0xce,0x3d,0x23,0x22,0x3f,0xb9,0xaa,0xa0,0xa2,0xad,0xad,0xb3,0x2c,0x17,0x1b,0x38,0xab -,0xa6,0xe9,0x24,0x1d,0x38,0xa2,0x9d,0x5c,0x1e,0x26,0xfe,0xaa,0xa2,0xa9,0xbf,0xd5,0xc5,0xbf,0xc0,0xd3,0x4a,0x31,0x2d,0x38,0xfa,0xcb,0x50,0x51,0xe5,0x4a,0x27,0x1c -,0x27,0xbc,0xa6,0xab,0xb6,0xb6,0xaf,0xa9,0xa1,0xaa,0xd8,0x47,0x3d,0x2e,0x2b,0x46,0xbb,0x51,0x2e,0x3b,0x48,0x2b,0x20,0x2b,0x50,0xb0,0xa1,0xa1,0xaf,0xb2,0xa9,0xab -,0xc5,0x2a,0x1e,0x21,0x2c,0x54,0xb7,0xbc,0x43,0x36,0xe3,0xb6,0xb8,0xbb,0xc0,0xe0,0x3a,0x3e,0xc3,0xb2,0xb6,0xc4,0xdc,0x3e,0x29,0x23,0x27,0x3a,0xc6,0xaf,0xb0,0xd6 -,0x71,0xba,0xaf,0xde,0x39,0x61,0xb6,0xb1,0xb4,0xb3,0xba,0x64,0x36,0x37,0x3b,0x2e,0x2a,0x27,0x27,0x43,0xb1,0xae,0x4f,0x39,0xb5,0xa5,0xb9,0x4b,0xde,0xc7,0xdf,0xba -,0xa6,0xa8,0xcc,0x39,0x37,0x2b,0x29,0x41,0x46,0x33,0x3a,0x71,0x51,0x38,0x52,0xb0,0xaa,0xb9,0xd1,0x5c,0x54,0xf5,0xdb,0xc9,0xed,0x4c,0x51,0xf5,0xd3,0x47,0x47,0x46 -,0x3b,0xce,0xa7,0xa3,0xbb,0x4b,0xfa,0xf4,0x36,0x38,0x49,0x46,0x3c,0x49,0xba,0xbe,0x44,0x4e,0xba,0xc6,0x3c,0x37,0x34,0x32,0xe7,0xab,0xa9,0xbf,0xe6,0xae,0xa7,0xb9 -,0xbd,0xc7,0x30,0x22,0x2b,0x68,0x5e,0x32,0x37,0x39,0x2a,0x27,0x30,0x48,0xe0,0xab,0x9e,0xa4,0xb9,0xbf,0xad,0xb3,0x60,0xd6,0xb8,0x6b,0x3a,0x43,0x3b,0x29,0x26,0xeb -,0xad,0x76,0x2e,0x26,0x22,0x3d,0xa2,0x96,0x9c,0xc1,0x27,0x24,0x2f,0x4e,0xaa,0xa1,0xb2,0x3e,0x3b,0xbb,0xc0,0xc8,0xbb,0xca,0x45,0x41,0xd9,0x62,0x36,0x32,0x3b,0x3d -,0x32,0x36,0x41,0x2b,0x24,0x48,0xc3,0x4f,0x4e,0xbf,0xab,0xac,0xaa,0x9f,0xb3,0x3f,0x67,0xad,0xa1,0x9e,0x9e,0xa7,0x3d,0x1d,0x1e,0x2e,0x34,0x29,0x2d,0x2b,0x1f,0x24 -,0x30,0x3d,0x3f,0x47,0xc4,0xaf,0xb3,0xb9,0xc8,0xb9,0xa4,0x99,0x93,0x9d,0xcd,0x39,0x30,0x2a,0x37,0xc4,0xd7,0x30,0x2a,0x2b,0x26,0x21,0x2c,0x5e,0xfb,0x4a,0x3c,0x44 -,0x7d,0xe8,0xac,0x9f,0xaf,0x5e,0xe0,0xb4,0xbf,0xc1,0xaf,0xb3,0xb9,0xb5,0xae,0xad,0xcd,0x38,0x35,0x31,0x28,0x25,0x29,0x38,0x4c,0xc3,0xc3,0x28,0x1a,0x1e,0x30,0xcd -,0xa8,0xa3,0xb4,0xcb,0xba,0xa4,0x9c,0x9f,0xad,0xc3,0x53,0x43,0xc7,0xae,0xb8,0xe6,0x4d,0x3a,0x20,0x19,0x1c,0x1d,0x20,0x32,0x64,0xd8,0x56,0x43,0xbb,0xab,0xb2,0xaf -,0xac,0xb4,0xc9,0xb3,0xa4,0xa6,0xa8,0xa9,0xce,0x2d,0x28,0x2f,0x3c,0x49,0x3e,0x32,0x41,0xeb,0xdd,0xb7,0xbf,0x2e,0x22,0x22,0x34,0xc5,0xac,0xa7,0xb2,0xba,0xbe,0xc8 -,0x6a,0x3f,0x64,0xc1,0xbd,0xc0,0xb6,0xaf,0xda,0x4d,0xcc,0x50,0x2c,0x2a,0x36,0x34,0x28,0x3a,0xc3,0xc2,0xd3,0xd7,0x55,0x2d,0x26,0x39,0xb9,0xb0,0xbd,0xc2,0xb0,0xa7 -,0xa8,0xaf,0x77,0x2f,0x3b,0xbd,0xab,0xb4,0x47,0x2d,0x37,0xd6,0xc1,0xc5,0x3a,0x1c,0x1a,0x2d,0xc5,0xae,0xa8,0xac,0xc5,0xd0,0xb1,0xb9,0x49,0x3b,0x3f,0xdd,0xe8,0xbc -,0xa6,0xab,0xc0,0x42,0x34,0x2e,0x33,0xe1,0xc7,0x44,0x37,0x4c,0x68,0xe1,0xd9,0xd6,0x41,0x24,0x23,0x38,0xc3,0xbb,0xc2,0xc1,0xb8,0xb3,0xba,0xb9,0x69,0x3b,0x61,0xbe -,0xce,0x5d,0xdd,0xc3,0xbe,0xcc,0xe0,0x3a,0x29,0x24,0x2c,0xf1,0xc0,0xbe,0xb8,0xb0,0xba,0xbb,0xaf,0xd8,0x33,0x33,0x3e,0x46,0x6f,0xb5,0xa5,0xac,0x4f,0x3b,0x34,0x36 -,0x60,0xbc,0xca,0x2e,0x3b,0xad,0xa6,0xbb,0x4a,0x32,0x29,0x2b,0x4d,0xb7,0x6f,0x2f,0x3c,0xc6,0xac,0xad,0xbe,0x42,0x28,0x28,0x61,0xaf,0xc2,0xd5,0xb4,0xad,0xb9,0xd8 -,0xfb,0x45,0x2d,0x26,0x26,0x2e,0xf4,0xac,0xa6,0xaf,0x62,0x62,0xd4,0x43,0x49,0xc6,0xbf,0x41,0x3c,0xbf,0xa7,0xa6,0xb7,0x55,0x32,0x2c,0x31,0xd4,0xd3,0x57,0xc1,0xb1 -,0xc8,0x37,0x3f,0x42,0x2f,0x27,0x3a,0xc8,0xca,0xc1,0xb3,0xa6,0xac,0xb2,0xc7,0x2e,0x1f,0x2a,0x75,0x64,0x3f,0x3e,0x6e,0xe6,0x65,0xb7,0xab,0xcf,0x32,0x2d,0x35,0xd4 -,0xa6,0x9a,0x9d,0xc6,0x2b,0x2f,0x3c,0x2d,0x2d,0x3d,0x36,0x32,0xbf,0xa3,0xa8,0xc9,0xcf,0x67,0x40,0x57,0xcd,0xdc,0x3a,0x46,0xa6,0x9d,0xdc,0x2f,0x3d,0x3e,0x36,0x34 -,0x34,0x38,0x52,0xbf,0xa8,0xa8,0xb8,0xb8,0xc4,0x34,0x2a,0x3a,0x41,0x38,0x59,0xae,0xac,0x52,0x2b,0x3a,0x68,0x5f,0x36,0x26,0x1e,0x30,0xa2,0x95,0x9f,0x55,0x3c,0x68 -,0xc9,0xcb,0x78,0x4a,0x3c,0xf1,0x9f,0x9a,0xad,0x4c,0x2c,0x1e,0x1e,0x2f,0x4c,0x39,0x36,0xbf,0x9d,0xa0,0xf7,0x4c,0x5c,0x36,0x35,0x49,0x3f,0x3d,0xb6,0xa0,0xa8,0xe5 -,0xe1,0xba,0x48,0x2c,0x29,0x36,0x45,0xd4,0xa9,0xa6,0xc0,0x3d,0x42,0x3f,0x37,0x32,0x27,0x20,0x2b,0xaf,0x97,0x9e,0x56,0x3c,0xd8,0x44,0x2b,0x22,0x2a,0x5b,0xbc,0xaf -,0xa7,0xa4,0xa7,0xa5,0xbb,0x2d,0x27,0x3d,0xfd,0xee,0xc1,0xb0,0xb7,0x3d,0x32,0x49,0x32,0x1e,0x1a,0x2a,0xc5,0xa2,0x99,0xa3,0x56,0xcf,0x9e,0xa6,0x46,0x25,0x21,0x2d -,0x59,0xaf,0xab,0xd7,0x36,0x6f,0xc2,0x3d,0x25,0x1c,0x1e,0x3a,0xa8,0x96,0x9c,0xb9,0xdf,0xbd,0x71,0x33,0x26,0x1f,0x27,0x38,0xbe,0xb2,0xb1,0xae,0xa4,0xae,0x3a,0x1e -,0x1f,0xe6,0xab,0xa7,0xaa,0xcd,0x61,0xac,0xa7,0xc6,0x28,0x18,0x18,0x2b,0xbe,0x9e,0x9d,0xc8,0x36,0xbd,0xac,0x49,0x26,0x2b,0x48,0xeb,0xad,0xa8,0xb6,0xb3,0xaa,0xb4 -,0x32,0x1c,0x1a,0x20,0x27,0x36,0xaf,0xa7,0xac,0xaa,0xa1,0xb8,0x2b,0x24,0x2a,0x33,0x3d,0xc2,0xaf,0xb0,0xa8,0x9f,0xad,0x29,0x14,0x16,0x2d,0xb7,0xa7,0xa6,0xb3,0xcf -,0xb0,0x9c,0xa5,0x30,0x1a,0x1a,0x28,0x78,0xaf,0xad,0xbc,0xc1,0xb1,0xae,0x55,0x20,0x1f,0x3a,0x6b,0xc6,0xa1,0xa2,0xbd,0xb3,0xa4,0xb9,0x27,0x19,0x1e,0x33,0x3d,0x60 -,0xbc,0xb0,0xa8,0x9d,0xa3,0x37,0x1a,0x1a,0x29,0x30,0x4b,0xc7,0xca,0xb7,0xa0,0x98,0xa3,0x2a,0x14,0x1a,0x3e,0xac,0xa1,0xa9,0xce,0x5d,0xb6,0xa9,0x52,0x1f,0x1e,0x2b -,0x47,0xc1,0xaa,0xa2,0xa5,0xaa,0xae,0xcd,0x27,0x1b,0x28,0x56,0x4b,0x41,0xbd,0xae,0xb2,0xa4,0xa6,0x46,0x24,0x21,0x2f,0x38,0x3e,0xc8,0xab,0xa4,0xa3,0xa0,0xb3,0x29 -,0x1d,0x36,0x60,0x2b,0x24,0x2b,0x5c,0xa6,0x9c,0xaa,0x44,0x1c,0x1b,0x33,0xbd,0xac,0xac,0xb0,0xbe,0xb7,0xa7,0xaa,0x2e,0x19,0x1f,0x35,0x5e,0xbf,0xad,0xa5,0xa9,0xb2 -,0xb8,0x3f,0x25,0x27,0x31,0x33,0x3d,0xc6,0xa4,0x9e,0xa4,0xa1,0xae,0x29,0x19,0x1e,0x26,0x2a,0x2b,0x37,0xb7,0x9e,0x96,0x9a,0xbd,0x20,0x20,0x3f,0xbe,0xbe,0x6c,0x5e -,0x44,0xcc,0xa9,0xb8,0x27,0x19,0x1c,0x26,0x5f,0xaf,0xa4,0x9d,0xa5,0xaf,0xaf,0xeb,0x23,0x1d,0x25,0x37,0xf0,0xc7,0xa8,0x9d,0xa1,0xa6,0xc7,0x26,0x1e,0x27,0x2a,0x2c -,0x33,0xbf,0x9e,0x9f,0xa1,0xa5,0xbd,0x2f,0x24,0x27,0x29,0x2b,0x2e,0xd3,0xac,0x9e,0x9a,0xa5,0x44,0x21,0x23,0x32,0x46,0x2e,0x49,0xb3,0xae,0xa9,0xac,0x68,0x2d,0x27 -,0x22,0x2d,0x56,0xb9,0xa9,0xac,0xb3,0xad,0xbc,0x2d,0x1c,0x1a,0x21,0x34,0xfe,0xaa,0x9a,0x9b,0x9f,0xa1,0xac,0x5a,0x2d,0x25,0x1e,0x1d,0x26,0xb8,0x9e,0x9f,0xa5,0xba -,0x3d,0x2a,0x2f,0x34,0x2a,0x1f,0x2a,0xd1,0xa4,0x93,0x93,0xa5,0x3a,0x22,0x24,0x3b,0x37,0x2d,0x42,0xc4,0xcd,0xbd,0xae,0x5c,0x47,0xd5,0x3f,0x28,0x4b,0xda,0xae,0xc4 -,0x27,0x2a,0xbb,0xb4,0xe7,0xba,0x31,0x4c,0xa8,0xab,0x27,0x1d,0x3f,0x9c,0x92,0xd1,0x42,0xb2,0xd5,0x29,0x1f,0x2b,0x36,0xb9,0xa2,0xad,0x3c,0x23,0xac,0xa5,0x32,0x21 -,0x4b,0xc4,0x26,0x38,0xba,0xaa,0x96,0x9d,0x2a,0x1e,0xe5,0xa4,0xa3,0x2b,0x14,0x2d,0xc8,0xbe,0xd3,0xb2,0x38,0x40,0xb7,0x68,0x56,0x35,0x5c,0xae,0xba,0x1b,0x27,0xbb -,0x9c,0xa0,0xfd,0x5f,0x2f,0xab,0xb0,0x23,0x1f,0x2f,0xa8,0x9e,0xbe,0x44,0x3b,0xfb,0x57,0xd6,0x4b,0x2d,0x49,0x9f,0xa6,0x2e,0x36,0xb3,0x98,0x2c,0x12,0x24,0xbc,0xbd -,0x3f,0xe8,0x40,0xac,0x9d,0xa2,0x3a,0x24,0x25,0xf4,0xe0,0x2c,0xb5,0xaa,0xaa,0xb4,0x3f,0x1d,0x26,0x99,0xaa,0x14,0x19,0x6c,0x97,0x9d,0x39,0x25,0xba,0xa6,0x3b,0x37 -,0x24,0x2b,0xa3,0x9a,0xc1,0x6c,0x30,0x36,0xb0,0x2d,0x20,0x36,0xbe,0xbe,0x48,0xce,0xb7,0x9c,0x91,0xa9,0x17,0x11,0x41,0x9a,0xaa,0x2d,0x46,0x20,0x24,0xf1,0xa4,0xa5 -,0x37,0xbb,0x3d,0x1b,0x1e,0xba,0x8c,0x94,0x34,0x21,0x2d,0x4a,0xc7,0x5f,0x1e,0x1b,0xa7,0x98,0xc9,0x5d,0xac,0xac,0xb6,0x20,0x19,0x46,0x32,0x39,0xb0,0xc7,0x2b,0xad -,0x93,0xa8,0x17,0x12,0x3c,0x9c,0xad,0x1f,0x2a,0xb2,0x95,0xa1,0xcb,0x2b,0x1d,0xb9,0xb9,0x28,0x2c,0xb7,0x9b,0xae,0x35,0x3e,0xb7,0xac,0x3d,0x30,0x17,0x1d,0xa5,0x9a -,0xb5,0x30,0x42,0xa8,0x9f,0x32,0x26,0x63,0x3f,0x2e,0xbe,0x32,0x30,0xad,0xaa,0xaf,0xb4,0xcb,0x24,0x2a,0x25,0x59,0xa1,0xa6,0x3f,0x1e,0x28,0xad,0x92,0xaa,0x2a,0x10 -,0x19,0xa3,0x92,0x99,0x34,0x2d,0xac,0xb1,0x24,0x1e,0x38,0xa6,0xad,0x2c,0x2e,0x38,0xce,0xb7,0xaa,0x2d,0x33,0x9c,0xad,0x57,0x44,0xdb,0x44,0x48,0x34,0x36,0x4f,0x29 -,0x36,0xaa,0x56,0x33,0x94,0x96,0x2e,0x13,0x2b,0xa6,0xa3,0x3a,0x23,0x39,0xb0,0x9e,0xb6,0x38,0x17,0x2c,0xa7,0x5e,0x1c,0xe0,0x8f,0xa3,0x3b,0xb6,0x67,0xd2,0x56,0x2f -,0x46,0x14,0x2a,0x98,0x99,0xdf,0x32,0xa5,0xa0,0x1e,0x1c,0xdd,0x36,0x15,0x21,0x96,0x9e,0xa5,0x96,0xad,0x15,0x12,0x2d,0xab,0xa5,0x2d,0x42,0x42,0x3c,0xa3,0x92,0xd9 -,0x11,0x61,0x9d,0x2f,0x14,0x2e,0x94,0x9d,0x2e,0xfb,0x47,0x3f,0x34,0x26,0xe7,0x27,0x22,0x9b,0x96,0x49,0x49,0x9a,0xa6,0x37,0x20,0x1e,0x29,0x2e,0xaf,0x9a,0xd2,0x31 -,0xa3,0xa0,0x3e,0x1d,0xc0,0x9f,0x23,0x0e,0x62,0xa6,0xb6,0x99,0x96,0x54,0x0b,0x28,0xae,0x45,0x1f,0x33,0x94,0xa0,0x2b,0xcf,0x9d,0x4d,0x1c,0x2d,0xaf,0x2f,0x3a,0x9a -,0xb2,0x1e,0x66,0x96,0xc6,0x1d,0x2d,0x37,0x25,0x1d,0xc8,0x8f,0xc5,0x1b,0x9c,0x8e,0x2f,0x14,0x2c,0xac,0x3e,0x1d,0xae,0xbf,0x79,0x9c,0x9b,0x52,0x13,0x2d,0xa2,0xbe -,0x1a,0x25,0x96,0x9e,0xea,0xb5,0xb5,0x1e,0x1b,0xb2,0xac,0x21,0x1d,0xa6,0xa9,0x50,0xab,0x8f,0xaa,0x0c,0x0e,0xd4,0xab,0x3a,0xb1,0x95,0x78,0x1d,0x9e,0x97,0x1b,0x16 -,0xc7,0xba,0x2c,0x1d,0xb3,0xa6,0xc4,0xc1,0xa5,0xcf,0x14,0xdc,0xa0,0x3f,0x16,0xbd,0x8f,0xb6,0x2e,0xb0,0xb6,0x12,0x1b,0xaf,0x9e,0x1f,0x14,0xa4,0x95,0xaa,0xad,0x9f -,0x3a,0x0f,0x1e,0x9f,0xcb,0x26,0xbd,0x9c,0x3c,0x27,0x97,0x93,0x22,0x0f,0x23,0xac,0xae,0x58,0x9e,0xb6,0x20,0x37,0x96,0xb9,0x0c,0x28,0x9d,0x51,0x18,0xac,0x93,0xc2 -,0x24,0xb7,0x9f,0x1d,0x1b,0xbb,0xa2,0x2f,0x25,0x97,0xa2,0x21,0x65,0x9b,0x64,0x14,0x27,0xb5,0x61,0x35,0xd5,0xab,0x3b,0x31,0x96,0x9a,0x19,0x0c,0x4a,0x97,0xb7,0x36 -,0xac,0x6a,0x20,0xc4,0x91,0xa2,0x0e,0x1b,0xab,0xaa,0x51,0xa3,0x9d,0x39,0x2b,0xae,0x9a,0x19,0x0d,0x2f,0x9c,0x50,0x35,0x98,0xe4,0x1e,0x51,0x9b,0xd5,0x1d,0x35,0xaa -,0xca,0x38,0xb4,0x9a,0x46,0x1a,0xa2,0x9d,0x18,0x10,0xb6,0x9d,0xce,0xd8,0xa3,0x38,0x25,0xc8,0xa1,0x43,0x11,0x2d,0xa0,0x9f,0x35,0xcd,0xdc,0x2e,0x3a,0x9f,0xa0,0x15 -,0x13,0x35,0x9e,0xbf,0xa8,0x98,0xd2,0x1c,0x26,0x9e,0xad,0x20,0x1f,0xb5,0xb9,0x3e,0xa5,0x95,0x2e,0x0e,0xc3,0xa0,0x29,0x25,0xa2,0xa4,0x37,0xbf,0xa5,0xba,0x2d,0x2c -,0xaa,0x48,0x11,0x2f,0x9c,0xa2,0xe2,0xab,0x60,0x17,0x29,0x9e,0x9e,0x2f,0x1d,0x2e,0xa4,0xb9,0xaf,0xa5,0x2b,0x18,0x2d,0x99,0xaa,0x22,0x1e,0xcf,0xaf,0xae,0x9f,0xa6 -,0x1d,0x0e,0xb7,0x9c,0xc1,0x24,0x2e,0xd4,0xc1,0x9e,0x9f,0xd7,0x16,0x16,0xa2,0xaa,0x1c,0x38,0x9d,0x9f,0xc2,0xad,0x3f,0x1d,0x29,0xa4,0x9c,0x2d,0x1d,0xfa,0x98,0xc9 -,0xca,0xa8,0x22,0x0e,0x2b,0x96,0xcf,0x3c,0xf0,0xc0,0xb2,0xa7,0xab,0x31,0x15,0x1a,0x9c,0x97,0xf4,0x1c,0x37,0xbe,0xb3,0x96,0xb5,0x20,0x16,0x21,0x9c,0x9d,0x3a,0x1e -,0x3a,0xc4,0x67,0xa8,0xad,0x27,0x16,0x24,0xb8,0xc7,0x3a,0xa6,0x95,0x5b,0x36,0xd7,0x4d,0x28,0x4a,0x9d,0x39,0x25,0x4f,0xa8,0xa4,0xbf,0xb7,0xbd,0x20,0x18,0xaa,0xad -,0x48,0xbe,0xa1,0xe3,0x2a,0x9f,0xca,0x2b,0x19,0x25,0x9f,0xa1,0x56,0x1f,0x2f,0x46,0xad,0x95,0xa9,0x1e,0x1f,0x3b,0xbe,0xa1,0xa8,0xbb,0xfd,0x26,0x2c,0xcd,0xa7,0x54 -,0x1c,0x28,0x24,0x49,0xb4,0xa3,0xab,0xdd,0xba,0xbf,0x34,0x20,0x57,0xac,0xb6,0x4a,0xbb,0x59,0x28,0xbf,0x4f,0x42,0x26,0x2f,0x9c,0xbd,0x35,0x51,0xb1,0xc6,0xb5,0x9b -,0x60,0x12,0x18,0xad,0x9e,0x9b,0xbc,0x38,0x2c,0x26,0xa6,0xa5,0x50,0x1f,0x33,0xb8,0x2e,0xbe,0xa7,0xbc,0xaf,0x54,0x27,0x3e,0xaf,0xd5,0x2b,0x20,0xd5,0xa9,0xa3,0xb1 -,0x31,0xc0,0x29,0x2e,0x33,0x2c,0xa9,0xa0,0xd7,0x2d,0xcc,0xbb,0xad,0xbd,0x20,0x10,0x26,0x98,0x99,0xcf,0x25,0x39,0xbf,0x4f,0xad,0xd5,0x26,0x1c,0x2c,0x9c,0xb3,0xb2 -,0xaf,0xc5,0x3d,0x41,0xc5,0x4b,0x5b,0x4d,0xc0,0x39,0xb3,0xa5,0xaa,0x69,0x2d,0xcf,0x30,0xed,0xb8,0x3d,0x21,0x29,0xd6,0xb2,0xb7,0xda,0xb3,0xbd,0x29,0x1c,0x70,0x9f -,0x9e,0x9c,0x2f,0x1e,0xc7,0xaf,0xa5,0x1f,0x16,0x26,0xbd,0x98,0xc5,0x3b,0xeb,0xbc,0xe9,0x46,0x2c,0xcf,0xae,0x2c,0x32,0x30,0xb3,0xa0,0xa1,0x2e,0x13,0xcd,0xa9,0xad -,0x34,0x1b,0x2a,0xb8,0xa0,0x9f,0xbf,0x2d,0xb5,0xca,0x6f,0x57,0xb5,0xaf,0x23,0x37,0x46,0x46,0xc9,0xa5,0xa4,0x1e,0x12,0x43,0x9f,0xa0,0xb3,0x5e,0x42,0xc6,0xab,0xab -,0x2f,0x1b,0x1f,0x2d,0xbd,0xb8,0xa3,0xc7,0xcf,0xc9,0x37,0xaf,0xaa,0xa9,0x29,0x14,0x1a,0xab,0x9c,0xb1,0x2d,0x1b,0xc6,0xa1,0xa4,0x34,0x49,0x67,0x32,0xbd,0x4f,0x37 -,0xc5,0x9f,0xa8,0x20,0x13,0x45,0x9a,0x9f,0x27,0x1b,0xd9,0xa0,0x9f,0xb8,0x1c,0x1e,0xdb,0xa8,0xa7,0x32,0x4a,0xe2,0xb4,0xae,0xa5,0xa2,0x31,0x1f,0x1d,0x2b,0x5f,0xa0 -,0xaf,0x4a,0x1b,0x1f,0x9d,0x9e,0xa6,0x54,0x3d,0x34,0xdd,0xac,0x4d,0x31,0x4c,0xb8,0xd7,0x3d,0x39,0x6a,0x4b,0xdc,0x35,0x21,0xb6,0x99,0x9e,0xe9,0x1d,0x1e,0xb9,0x99 -,0xab,0x1a,0x13,0x36,0x99,0x9e,0x5b,0x43,0x2b,0x22,0x34,0xb6,0xcc,0x49,0x66,0xae,0xc6,0x76,0xa3,0xa6,0xb7,0x27,0x2c,0xe7,0xae,0xac,0x26,0x1e,0xcd,0xa2,0xc8,0x3d -,0x38,0xde,0xad,0xbc,0x29,0x3b,0x9e,0xad,0x29,0x17,0x1b,0xbc,0x99,0x99,0xb9,0x17,0x15,0xc4,0x8e,0x9b,0x4d,0x39,0x30,0x3b,0x48,0xc3,0x37,0x2a,0x21,0xba,0xaa,0x3e -,0x3e,0x34,0xc4,0xb9,0xa5,0xaa,0xcd,0x27,0x24,0xcd,0xc4,0xb0,0xb8,0x28,0x18,0x36,0x9d,0x9e,0x3e,0x24,0xd1,0xc5,0x3b,0x3c,0xc7,0xa1,0x9d,0xa6,0x3e,0x1f,0x2d,0xb3 -,0xa0,0x30,0x19,0x27,0xcb,0x9f,0xa7,0xd1,0x25,0x36,0x7c,0xb5,0xba,0x20,0x27,0xad,0x95,0xae,0xa7,0xb7,0x28,0x1b,0x1c,0xb8,0xbd,0x61,0x4a,0x55,0x34,0xc4,0x9e,0xa3 -,0x33,0x1f,0xaa,0xae,0x25,0x15,0x23,0xa3,0x92,0x9b,0x5e,0x20,0x1e,0xd1,0xb1,0x30,0x33,0x2e,0x4f,0xaf,0xca,0xf3,0xcf,0xd5,0x6d,0xa0,0xbb,0x1b,0x1f,0xac,0x97,0xa9 -,0xc0,0x36,0x33,0x29,0x29,0xbf,0xb8,0x57,0x46,0xb1,0xc3,0x68,0xaf,0xc2,0x43,0x3b,0xcf,0xe5,0x1f,0x14,0x3e,0x95,0x8f,0xa8,0x18,0x1b,0x2b,0xb7,0x91,0xae,0x23,0x31 -,0xb5,0xaf,0x42,0x29,0x33,0xd2,0x54,0xaa,0x3a,0x0f,0x1e,0xa3,0x8d,0x99,0xb9,0x2d,0x3a,0x27,0x25,0x49,0x2f,0x68,0x2f,0xcf,0xaf,0xab,0xae,0x3e,0x24,0x63,0xa9,0x4c -,0x38,0x24,0xc6,0x8e,0x92,0x45,0x28,0x3b,0x3f,0xbc,0xc5,0x1c,0x17,0x2b,0x9f,0x9a,0x42,0x1c,0x28,0x9a,0x9d,0xa3,0x49,0x14,0x18,0xa3,0x8e,0x9f,0x2c,0x11,0x31,0x48 -,0xb4,0xad,0xdd,0xbf,0x46,0x4c,0x55,0xfd,0x3d,0xb3,0xb4,0xe7,0xfb,0x33,0x21,0x1f,0xbe,0x9a,0xab,0x1f,0x21,0xd6,0x58,0xb1,0xc3,0x3b,0xad,0xc0,0xa8,0xab,0x17,0x0e -,0x40,0x98,0x9b,0xbe,0x24,0x33,0xc6,0x97,0x99,0x36,0x1a,0x18,0xb6,0xa4,0x4a,0x29,0xae,0xa1,0x50,0xce,0x70,0x27,0x2e,0xba,0xce,0x4a,0xdf,0xb6,0x42,0x2f,0xb5,0xa2 -,0xb1,0x2c,0x2a,0xc2,0x4f,0x2e,0xb6,0xa7,0xa9,0x47,0x29,0x21,0x1b,0x48,0x9d,0xa5,0xd6,0x42,0x1f,0x4b,0xac,0xac,0xbc,0xdf,0x2d,0x2b,0xa1,0xc0,0x2c,0x2e,0xa2,0x9e -,0x2c,0x21,0x1d,0x1d,0x39,0xbd,0xaa,0x9a,0xbd,0xa7,0x99,0x2e,0x22,0xb6,0xb1,0x36,0x2d,0x3b,0x33,0x3b,0x9c,0x9a,0xc0,0x1e,0x1c,0x21,0x45,0xbb,0xbd,0xa8,0xaa,0xb7 -,0xad,0x9d,0x4a,0x65,0x2c,0x19,0x1c,0x32,0xa6,0x47,0x2e,0xba,0x97,0x94,0x50,0x17,0x2b,0x48,0x2e,0x32,0xbd,0xac,0xe3,0xc0,0xc2,0x20,0x2e,0xa1,0xb7,0x42,0x21,0x21 -,0xbc,0xa2,0xab,0x9e,0x9a,0x28,0x19,0x2d,0x37,0x23,0x39,0xa9,0x9e,0xb1,0xba,0xc1,0x1f,0xca,0xac,0xb5,0xb0,0x32,0x5e,0xbf,0x2c,0x3d,0x9b,0xb2,0x1c,0x20,0x2d,0x2c -,0x51,0xa7,0x9f,0xab,0x49,0x6b,0x35,0x3b,0xb0,0x61,0x47,0x4e,0x1f,0x3b,0x9b,0xb4,0xdf,0xd7,0x4c,0x26,0x2a,0xd8,0xd3,0x3d,0x35,0xab,0x9c,0x6d,0x1f,0xb8,0xae,0xc0 -,0x33,0x44,0xd6,0x36,0xab,0xba,0x1f,0x35,0x9e,0xbb,0x27,0x26,0x2a,0x4f,0xaa,0xaf,0xab,0xa9,0xfd,0x46,0x59,0x5e,0xbc,0xad,0x54,0x33,0x27,0xd5,0xb9,0x23,0x29,0x4e -,0xc5,0xa6,0xc5,0x41,0xb0,0x66,0xe6,0xa1,0xa5,0x22,0x1c,0x46,0xbc,0xaf,0xba,0xa9,0xdc,0x1d,0x29,0x2a,0x4c,0xb1,0xef,0xbe,0xb7,0xdf,0x6f,0x9e,0xb5,0x3e,0x40,0x28 -,0x1f,0x24,0xca,0xb7,0xb2,0xb8,0xb8,0xcb,0x48,0xdb,0xba,0x3b,0x3c,0xd0,0xb1,0xad,0xef,0xb9,0x3e,0x16,0x26,0xa2,0xa9,0x26,0x21,0x41,0xbc,0x8f,0x96,0xa8,0xc9,0x1c -,0x18,0x1e,0xc9,0xb2,0xbc,0x4f,0x42,0x2b,0x49,0x9b,0xc3,0x23,0x2c,0xcb,0xa6,0xcc,0x4a,0xa8,0xac,0xc8,0xbe,0x43,0x15,0x18,0xce,0xa7,0xa7,0xad,0xae,0x6a,0x2e,0xd4 -,0x4f,0x2c,0x52,0x3d,0x33,0x5b,0xad,0xac,0xad,0xa6,0xc6,0x46,0x20,0x1c,0x3c,0xac,0x9d,0xe3,0x36,0x31,0x40,0xa8,0xac,0xbd,0x21,0x21,0x36,0xae,0xa2,0xd7,0x45,0x58 -,0xc9,0x6e,0xac,0xcc,0x1c,0x1d,0x54,0xad,0x9d,0xb3,0x38,0xcd,0xad,0xad,0x31,0x29,0x25,0x30,0xcb,0xbc,0xcf,0xd5,0xa9,0xb4,0x3f,0xcc,0x39,0x28,0x44,0x6e,0xd4,0x4c -,0xb2,0xb9,0xbf,0xc0,0xd3,0x44,0x1b,0x28,0xac,0x96,0xae,0x1d,0x1b,0x2d,0xab,0x98,0x9e,0x3d,0x1d,0x26,0xbe,0xa2,0x9c,0x6b,0x1a,0x2e,0xb7,0xb7,0xd7,0x53,0x1f,0x25 -,0xaf,0xa5,0xb9,0x22,0x37,0xa7,0x9d,0x9d,0x3b,0x1d,0x1b,0x29,0xaf,0x9c,0xa6,0x3d,0x3f,0x2d,0x30,0x45,0x2f,0xbd,0xa8,0xc1,0x31,0x39,0x41,0x59,0xa6,0x97,0xaf,0x1a -,0x1b,0x3e,0xa2,0x98,0xa4,0x18,0x14,0x33,0xa9,0x97,0xb2,0x36,0x1c,0x35,0xb6,0xb9,0x67,0x27,0x4f,0xab,0x9b,0xaa,0x31,0x1f,0x19,0x3a,0xa5,0xa0,0xb8,0x28,0x30,0xbb -,0x9c,0xb1,0x26,0x47,0x5d,0x23,0x27,0xb0,0xb4,0xcd,0xb0,0xac,0x67,0x33,0x42,0x3e,0xd9,0xd9,0x43,0x2b,0xb6,0x9e,0xa7,0xbe,0x1c,0x1b,0x47,0x9a,0x9d,0xc7,0x17,0x0d -,0x4c,0x96,0x8e,0xa0,0x1e,0x11,0x20,0xa0,0x9a,0xb4,0x33,0x1a,0x1b,0xa6,0x8f,0xa9,0x32,0x38,0x26,0x1d,0x29,0x45,0xb9,0x9c,0x97,0x9a,0xba,0x1f,0x12,0x26,0xab,0xd3 -,0x78,0xa7,0xa3,0x46,0x3f,0x39,0x1c,0x2e,0xa7,0x97,0x50,0x11,0x12,0x64,0x8f,0x92,0x96,0xc1,0x0d,0x0d,0xae,0x8e,0xa5,0x23,0x15,0x1b,0xa9,0x8c,0x97,0x2e,0x1a,0x1b -,0x29,0xb7,0xab,0x35,0xde,0xa0,0xae,0xa8,0xc3,0x1e,0x23,0xc2,0xb7,0x2d,0x23,0x3d,0xaa,0xa4,0x9f,0xac,0x3f,0x27,0x1f,0xc6,0x34,0x12,0x2c,0x8f,0x87,0x9d,0x30,0x12 -,0x09,0x1b,0x9d,0x8f,0xa1,0x1c,0x15,0xbd,0x8f,0x98,0x38,0x1f,0x1c,0x3f,0x94,0x9b,0x1d,0x0c,0x1b,0xa7,0x8f,0x8d,0xb1,0x0f,0x12,0x3e,0xa9,0xab,0x2f,0x2d,0xa6,0xaf -,0xc3,0xb0,0x5b,0x31,0x3a,0xb6,0x24,0x16,0x2e,0xad,0x94,0x9b,0xaf,0x29,0x1d,0x41,0xd6,0xa3,0xd4,0x11,0x21,0x92,0x8e,0xae,0x2e,0x20,0x20,0x52,0x9e,0x55,0x0e,0x0f -,0xae,0x87,0x8c,0xd1,0x1a,0x13,0x1b,0xa5,0x8b,0x9c,0x0d,0x09,0x2c,0xaa,0x8d,0x8d,0xb4,0x1f,0x1c,0x25,0x1a,0x25,0x39,0xdb,0x93,0x99,0xaa,0xc8,0x28,0x35,0xce,0xb8 -,0x1e,0x11,0x5a,0x92,0x9b,0xc1,0x51,0x3f,0xb5,0x3c,0x27,0x31,0x19,0x15,0xa0,0x84,0x92,0x1f,0x1a,0x1f,0x4c,0xa8,0xa9,0x2a,0x09,0x15,0x97,0x88,0x8c,0x55,0x12,0x19 -,0x26,0xa8,0x9d,0x3c,0x0f,0x19,0xa3,0x99,0x8e,0x95,0x28,0x16,0x36,0x4f,0x16,0x14,0x3a,0x97,0x8f,0x9b,0xb9,0x50,0xb0,0x5f,0x27,0x18,0x0a,0x19,0x96,0x88,0x98,0xcf -,0x25,0x19,0x6b,0xc2,0x38,0x41,0x1c,0x23,0x94,0x8a,0x98,0x29,0x1e,0x28,0x27,0xf6,0xdd,0x10,0x07,0xba,0x84,0x85,0x97,0x1d,0x12,0x1d,0x2e,0xa8,0xd3,0x17,0x14,0xaf -,0x93,0x95,0x98,0xba,0x37,0x1d,0x38,0x1e,0x09,0x1c,0x98,0x8e,0x92,0x9d,0x3e,0x23,0x34,0x33,0x29,0x20,0x13,0xf0,0x8d,0x91,0xaf,0xc2,0x35,0x1e,0x1e,0x21,0x35,0x3c -,0x1e,0xba,0x86,0x83,0xa2,0x0b,0x0d,0x1e,0x3e,0xa5,0x4c,0x0f,0x14,0x94,0x87,0x8b,0xb1,0x19,0x21,0x1f,0x26,0x26,0x14,0x1f,0x9d,0x8d,0x93,0x9d,0xa4,0xfc,0x16,0x12 -,0x48,0x24,0x0e,0x36,0x98,0x97,0x94,0x9e,0x5d,0x29,0x1e,0x28,0x26,0x1b,0x1d,0x9c,0x86,0x88,0xa6,0x1b,0x11,0x0f,0x2c,0xd1,0x1e,0x18,0x28,0x9a,0x87,0x86,0x9e,0x22 -,0x21,0x15,0x1c,0x23,0x16,0x16,0xad,0x8b,0x8d,0x9f,0x49,0x35,0x2c,0x26,0x1d,0x20,0x1d,0x39,0xa5,0x95,0x93,0x9d,0xab,0x1f,0x15,0x30,0x69,0x11,0x0f,0xa3,0x8a,0x8d -,0x9e,0x79,0x20,0x1b,0xb5,0xa9,0x11,0x0b,0x1f,0x8f,0x85,0x95,0x23,0x1c,0x1f,0x19,0x3a,0x22,0x18,0x4c,0x9a,0x8c,0x85,0x92,0x24,0x16,0x1c,0x25,0x19,0x18,0x1a,0x22 -,0xa9,0x8d,0x8f,0xa2,0xc5,0x1a,0x24,0xac,0x44,0x15,0x19,0xa0,0x89,0x8d,0xde,0x24,0x30,0x21,0x29,0x2b,0x15,0x0d,0x2d,0x8a,0x88,0x9c,0x45,0x25,0x2c,0xb4,0xab,0x12 -,0x07,0x17,0x98,0x85,0x88,0xa8,0x27,0x1f,0x1f,0x24,0x18,0x11,0x17,0xb5,0x92,0x8d,0x90,0xa1,0x4e,0x1f,0x2e,0x25,0x15,0x1b,0x26,0xa9,0x88,0x86,0xb7,0x19,0x1f,0x3c -,0xac,0x1f,0x08,0x0e,0x54,0x8f,0x8e,0x9d,0x5e,0xac,0x9f,0xbf,0x24,0x0d,0x0e,0x1c,0x99,0x85,0x98,0x1d,0x30,0xae,0xe2,0x3b,0x1b,0x14,0x16,0x50,0x94,0x89,0x94,0x36 -,0x25,0x2c,0x46,0x23,0x12,0x10,0x50,0x8e,0x8b,0x93,0xaa,0x66,0x2a,0x3d,0x69,0x11,0x09,0x17,0xb3,0x90,0x91,0xa9,0x20,0x31,0xa2,0xa9,0x3f,0x18,0x16,0x3a,0x8f,0x8a -,0xae,0x1d,0x2a,0x9e,0x9e,0x19,0x05,0x0d,0x45,0x9d,0x97,0x97,0xc2,0x57,0xa1,0xaa,0xaa,0xe6,0x19,0x0e,0x29,0x92,0x8d,0xa0,0x1f,0x1e,0x35,0x5b,0x1e,0x09,0x12,0x56 -,0x91,0x8a,0x96,0xbe,0xc6,0x99,0x9d,0xcd,0x12,0x05,0x0d,0xbd,0x8c,0x8c,0x3f,0x1f,0x7a,0x9b,0x94,0x15,0x00,0x29,0x84,0x98,0x17,0x00,0x1d,0x82,0x84,0x87,0x2c,0x00 -,0x0e,0x88,0x88,0x50,0x8e,0x85,0xac,0x0c,0x0f,0xaf,0x0c,0x00,0x16,0xab,0xa0,0x8a,0x3c,0x02,0xa4,0x80,0x86,0x1a,0x00,0x27,0x84,0x99,0xa6,0x21,0x05,0x3e,0x85,0x9f -,0x0f,0x14,0x04,0x1d,0x94,0xae,0xa5,0xa8,0x9d,0x8e,0x5b,0x7b,0x39,0x05,0x01,0x9f,0x80,0x83,0x94,0x03,0x0e,0x87,0x87,0x28,0x04,0x03,0xa3,0x87,0x13,0x00,0x1c,0x8d -,0x88,0x95,0x92,0x95,0x0e,0x05,0xb3,0x8f,0x8e,0x89,0xcd,0x0d,0xa5,0x8e,0x16,0x02,0x00,0x3c,0x80,0x9b,0x26,0x0d,0x17,0x8a,0x80,0xa3,0x04,0x2b,0x91,0xa7,0x17,0x1f -,0x95,0x3a,0x10,0xcd,0xda,0xba,0x21,0x00,0x0a,0x87,0x85,0xb4,0x30,0xcb,0x8a,0x81,0xa7,0x07,0x00,0x07,0x95,0x84,0xa2,0x15,0x2c,0xb5,0x8e,0x91,0x24,0x1e,0x1e,0xa1 -,0xbe,0x08,0x0b,0xbb,0xfc,0xbe,0x87,0x81,0xb3,0x04,0x02,0xa8,0x81,0x94,0xc4,0x23,0x32,0x8a,0x93,0x09,0x00,0x0f,0x92,0x8e,0x30,0x2d,0xb2,0x34,0x9e,0x84,0x9f,0x2f -,0x3c,0x1f,0x18,0xc0,0x99,0xbe,0x15,0x0f,0x93,0x81,0xbc,0x05,0x00,0x3d,0x81,0x8f,0x09,0x0e,0x8c,0x81,0x96,0x1d,0x10,0x15,0x30,0xb6,0xab,0xbe,0x99,0xb8,0x10,0x2e -,0x93,0xa8,0x0f,0x17,0xb5,0x8d,0xc4,0x0c,0x0c,0x1f,0x97,0x80,0x86,0x0f,0x00,0x14,0x89,0x88,0xa6,0x57,0x97,0x9f,0x30,0x18,0x06,0x08,0x1a,0xac,0xa9,0x9c,0x9b,0xca -,0x1f,0xa8,0x85,0x86,0x1d,0x03,0x0f,0xcf,0x95,0xd8,0x10,0x18,0x97,0x8d,0x9a,0x3a,0x09,0x11,0xa3,0x8d,0x46,0x15,0x98,0x84,0x98,0x2f,0xc2,0x1d,0x09,0x0f,0xcd,0x8e -,0x8e,0x33,0x0e,0x13,0xb0,0x8d,0x30,0x04,0x1d,0x87,0x8f,0x14,0x06,0x18,0x97,0x8c,0x96,0xa9,0x1c,0x0d,0x1e,0xbf,0x9b,0x95,0x8a,0x8b,0xbf,0x1a,0x2b,0x25,0x0b,0x0e -,0x2f,0x97,0x96,0x25,0x05,0x17,0x8c,0x82,0x8f,0x1d,0x19,0xaf,0x9a,0x58,0x15,0x17,0xa7,0xa0,0x29,0x31,0x5a,0x2a,0x18,0x3e,0xaf,0xb1,0x4a,0x3d,0x9e,0x9b,0x9a,0x9b -,0x1a,0x02,0x15,0x8f,0x86,0x9f,0x19,0x11,0x2c,0xa6,0xad,0x23,0x25,0x9d,0x97,0x29,0x0e,0x15,0xb6,0x98,0xa9,0x97,0x8b,0xb5,0x0c,0x0c,0x3a,0x8f,0x8f,0xdf,0x27,0x5b -,0xb6,0x30,0x0f,0x0b,0x2a,0x8e,0x8b,0x47,0x0c,0x11,0xb8,0x92,0xa0,0xd7,0xbb,0xa5,0xa4,0x74,0x3f,0xeb,0xc7,0x5f,0x34,0x32,0xeb,0xb7,0x19,0x0c,0xb1,0x89,0x93,0x2d -,0x1b,0x3c,0xab,0xa8,0x2f,0x0e,0x0e,0x44,0x9b,0x9c,0x9f,0xa7,0xb1,0x46,0x1f,0x25,0xb3,0xa3,0xa9,0xab,0x3b,0x1e,0x21,0x1d,0x26,0x9f,0x8e,0x94,0x30,0x0d,0x18,0xa8 -,0x91,0x9e,0xc1,0xca,0xcc,0x22,0x0d,0x11,0x43,0x98,0x93,0xad,0x4e,0x3a,0x29,0x29,0x48,0xaa,0x97,0x9c,0x2a,0x1a,0xe9,0x9c,0xa3,0x2f,0x1a,0x21,0x4b,0xb4,0x5a,0x17 -,0x1f,0x9d,0x9d,0x3e,0x2d,0xc3,0x97,0x9d,0x35,0x2c,0x3c,0x40,0xc2,0xb1,0xaa,0x9d,0xb1,0x17,0x10,0x29,0xbb,0xa7,0xa9,0xa6,0xad,0x4a,0x28,0x16,0x18,0x6a,0x9b,0x9d -,0xbd,0x2a,0x22,0xb8,0x9d,0xa4,0xb4,0xd7,0xf1,0x3f,0x25,0x17,0x17,0x25,0xf9,0x9e,0x96,0x9a,0xec,0x17,0x1b,0xc9,0x9d,0x9b,0xaf,0x3c,0x57,0xbd,0x3c,0x28,0x35,0xc6 -,0xa8,0xe8,0x22,0x30,0xbd,0xa7,0xa6,0x3e,0x24,0x38,0xc8,0x71,0x3b,0x57,0xdc,0x3f,0x36,0xbb,0x9f,0x99,0x9d,0x3e,0x1b,0x21,0x39,0x2e,0x23,0x3d,0x9a,0x8e,0xa6,0x1c -,0x0e,0x14,0x59,0x9f,0x9e,0xb3,0x35,0x2c,0x44,0xb2,0x9d,0x97,0x9c,0xce,0x29,0x1d,0x19,0x21,0x35,0xcd,0xaa,0xad,0xd7,0x3e,0x2e,0x31,0xc5,0xb9,0x57,0xc1,0xa8,0xa1 -,0xa7,0x5d,0x28,0x26,0x2c,0x2f,0x45,0xbf,0xb8,0xe8,0xd6,0xab,0xb4,0xd9,0x56,0x39,0x48,0xcc,0x46,0x1e,0x19,0x33,0x9d,0x8f,0x96,0xb7,0x30,0x29,0x3e,0x36,0x22,0x24 -,0x5c,0xa8,0xac,0x65,0x38,0x3a,0x30,0x23,0x31,0xae,0x9c,0xa0,0x4c,0x28,0x5d,0xa9,0xab,0xb9,0xc7,0x52,0x46,0x2a,0x1b,0x26,0xb7,0x9c,0xa2,0xc8,0x2d,0x21,0x2c,0x32 -,0x3b,0xd8,0xac,0x9e,0x99,0xa1,0x6e,0x2f,0x2c,0x32,0x49,0x42,0x3e,0x39,0x31,0xd8,0xa7,0xaa,0xc8,0x47,0x32,0x34,0x3a,0x33,0x2c,0x28,0x2b,0xd7,0xa1,0x93,0x91,0xa4 -,0x37,0x1f,0x29,0x45,0xc5,0xb4,0xcd,0x4e,0x4f,0x32,0x1e,0x1f,0x2d,0x44,0xad,0xa7,0xc6,0xbd,0xa3,0xa0,0xaf,0xd4,0xdd,0xaf,0xba,0x1f,0x11,0x1b,0x3a,0xb1,0xa6,0xa9 -,0xa9,0xb0,0x3c,0x1f,0x1d,0x2f,0xbe,0xb2,0xb6,0xad,0xa0,0x9c,0xaf,0x24,0x1e,0x2c,0x67,0xcd,0x3a,0x23,0x2a,0x62,0xd1,0xaf,0xae,0xb9,0xc8,0x37,0x30,0x3c,0x3d,0xf0 -,0xb8,0xad,0x9b,0x9e,0x4f,0x33,0x30,0x27,0x34,0xe5,0xbc,0xa9,0xac,0xcf,0x4d,0x2f,0x20,0x23,0x29,0x2f,0xd5,0xaa,0xac,0xab,0x9f,0x9a,0x9e,0xae,0xcf,0x2f,0x29,0x1e -,0x14,0x16,0x2a,0xb6,0x9a,0x98,0xbe,0x27,0x20,0x28,0x36,0x52,0x40,0xc3,0xa3,0xa3,0xa9,0xc3,0x47,0xfe,0xc7,0xc9,0xca,0x42,0x37,0x3a,0x35,0xf9,0xaa,0xad,0x58,0x25 -,0x1b,0x24,0x6a,0xb4,0xb3,0xb5,0xab,0x9c,0x9e,0xae,0xc0,0x4f,0x38,0x21,0x1a,0x29,0xbf,0xa8,0xa3,0x7a,0x1f,0x1f,0x2a,0x44,0xae,0xbb,0x33,0x37,0xbb,0x9e,0x97,0x9c -,0xa9,0xb3,0x54,0x2c,0x1e,0x19,0x1c,0x29,0x47,0xb6,0xad,0xb1,0x66,0x24,0x28,0xcb,0xa4,0xa3,0xb6,0x68,0xc7,0xa6,0xa7,0xbd,0x3a,0x23,0x29,0x2e,0x31,0xd4,0xb1,0xb7 -,0xcb,0x3f,0x38,0xf8,0xde,0xef,0x2f,0x19,0x19,0x3a,0xa8,0x93,0x8e,0x99,0xb8,0x4d,0x3c,0x43,0x3a,0x27,0x27,0x2a,0x2f,0x55,0xba,0xae,0xc0,0x2c,0x2b,0x3e,0x4d,0xf8 -,0x34,0x3a,0xac,0x9a,0x9a,0xa1,0xce,0x38,0xca,0xd1,0x33,0x27,0x21,0x2a,0xcd,0xb5,0xb9,0xcb,0x33,0x27,0x29,0x2e,0xbf,0xa0,0x9c,0xa0,0xb7,0x4a,0x43,0xcf,0xbe,0xb7 -,0x49,0x29,0x1f,0x20,0x3a,0xac,0x9d,0xa4,0x5e,0x1f,0x22,0x2c,0x47,0x56,0x2a,0x2f,0xaa,0x99,0x9b,0xa4,0xbb,0xc3,0xb0,0xe4,0x2e,0x25,0x1d,0x28,0xde,0xbf,0x6d,0x2e -,0x1b,0x22,0xba,0x9c,0x9c,0xbd,0x47,0xcc,0xa9,0x9d,0x9c,0xae,0x45,0x20,0x16,0x1d,0x2e,0x3e,0xb5,0xa9,0xb8,0xc6,0x3b,0x27,0x42,0xc8,0xca,0xe7,0x24,0x23,0xb9,0x98 -,0x94,0x9c,0x5b,0x35,0xde,0xfb,0x4f,0x27,0x17,0x1e,0xbe,0xac,0xad,0xca,0x31,0x49,0xbc,0xce,0x33,0x22,0x27,0xc2,0x9e,0x96,0x9a,0xb7,0x31,0x2c,0xd6,0xa4,0xb4,0x25 -,0x1a,0x1f,0x3d,0xb6,0x6a,0x21,0x2a,0x4c,0xf2,0x5b,0x34,0x50,0x9a,0x8f,0x99,0xae,0xfe,0x71,0xd1,0x40,0x28,0x1c,0x18,0x1b,0x3a,0xaa,0x9f,0xb7,0x2b,0x30,0xb0,0x9f -,0xbc,0x23,0x1f,0xc9,0x98,0x98,0xaf,0x34,0x33,0xc9,0xaa,0xb9,0x2a,0x18,0x1a,0x3a,0xa6,0x9e,0xc1,0x25,0x1d,0x2c,0xaf,0xa3,0x5c,0x28,0x6b,0x9e,0x98,0x9d,0xc0,0x3f -,0xe0,0xc6,0x31,0x1a,0x1b,0x2e,0xaa,0xa8,0x3a,0x1f,0x25,0x7b,0xaa,0xa7,0xe9,0x2b,0x24,0x46,0x9c,0x8e,0x96,0xcf,0x2d,0x45,0xb0,0xb9,0x1f,0x0b,0x0e,0x3e,0x9b,0xa0 -,0x3a,0x20,0x3d,0x9d,0x98,0xb3,0x24,0x24,0xee,0xa8,0xa3,0xab,0x6f,0x2c,0x2f,0xb9,0x9f,0xbd,0x1d,0x16,0x40,0xa2,0xa5,0x2e,0x18,0x2a,0xab,0xa0,0x45,0x1b,0x20,0xae -,0x93,0x99,0xc7,0x4e,0xae,0xa5,0xac,0x5a,0x1e,0x14,0x1b,0x38,0xad,0xac,0x29,0x14,0x29,0x98,0x8b,0x99,0x1a,0x0e,0x35,0x93,0x8f,0xab,0x25,0x2b,0xb2,0xa2,0xc0,0x1d -,0x13,0x1e,0xcd,0xaf,0xd7,0x2c,0x2b,0x6e,0xab,0x9b,0xa0,0x5c,0x25,0x3d,0xa7,0xa2,0xd0,0x22,0x22,0xcb,0x9e,0xa9,0x21,0x11,0x22,0xa8,0x9c,0xc5,0x26,0x38,0xa5,0x9e -,0xbc,0x26,0x19,0x25,0xc5,0xa0,0xa2,0xce,0x30,0x3e,0xac,0x9b,0x9d,0xc4,0x23,0x1c,0x29,0x43,0x37,0x20,0x1e,0x31,0xd4,0x4e,0x2c,0x54,0x99,0x8c,0x8e,0xa3,0x33,0x1d -,0x27,0x65,0xbc,0xb6,0xce,0x36,0x25,0x25,0x45,0xb6,0xbe,0x37,0x2b,0x38,0x4e,0x47,0x41,0xd7,0xab,0xa6,0xb6,0xd0,0xbb,0xb0,0xad,0xb3,0x4b,0x28,0x24,0x38,0xbc,0xb7 -,0xcd,0x37,0x23,0x1e,0x21,0x4e,0xa1,0x98,0x9e,0xd8,0x28,0x1f,0x2a,0x67,0xae,0xa4,0xa6,0xb8,0x4f,0x45,0x5f,0xcf,0xe2,0x32,0x29,0x2c,0x41,0xcb,0x63,0x46,0x46,0xe3 -,0xc1,0xba,0xa6,0x9d,0x9d,0xb2,0x2f,0x1e,0x1b,0x25,0xe9,0xab,0xa8,0xc5,0x2f,0x20,0x24,0x6b,0xa5,0xa4,0xc6,0x3e,0x3e,0x4a,0x43,0x39,0x51,0xb6,0xa2,0x9d,0xa3,0xb9 -,0x3d,0x2c,0x27,0x24,0x29,0x32,0x44,0xd3,0xbd,0xda,0x2f,0x22,0x28,0xd7,0x9c,0x8f,0x90,0xa0,0x39,0x1d,0x1e,0x2a,0x3b,0xcd,0xae,0xa8,0xb1,0x3e,0x24,0x20,0x2b,0x48 -,0xcc,0xca,0x4a,0x3e,0x4e,0x4f,0xc9,0xa7,0x9f,0xa5,0xb4,0xbc,0xb6,0x62,0x26,0x1b,0x1f,0x3c,0xbd,0xb5,0xb0,0xae,0xc0,0x3b,0x28,0x28,0x5d,0xaf,0xb4,0xf4,0x39,0x33 -,0x3d,0xc7,0xa9,0x9e,0x9f,0xbb,0x39,0x31,0x45,0xe1,0x5c,0x39,0x2d,0x29,0x22,0x20,0x3c,0xaa,0x9f,0xa8,0xbb,0xdb,0xc6,0xb5,0xc7,0x55,0x4d,0x4a,0x4b,0x5d,0xb7,0xaf -,0xc4,0x48,0x2d,0x29,0x30,0x39,0x42,0xd8,0xcb,0x5c,0x4b,0x56,0xba,0x9f,0x9b,0xa2,0xcd,0x2f,0x25,0x25,0x36,0x60,0xc2,0xc7,0x38,0x23,0x1f,0x2a,0x3e,0xe6,0xb4,0xaa -,0xa3,0xaa,0xd2,0x3c,0x2d,0x2a,0x3b,0xb0,0xa3,0xa1,0x9b,0x9d,0xb5,0x32,0x1d,0x1d,0x39,0xaa,0xa0,0xaf,0xda,0x32,0x27,0x28,0x43,0xaf,0xa8,0xad,0x65,0x33,0x28,0x25 -,0x2f,0x44,0x4d,0x42,0x3e,0x2e,0x29,0x3c,0xc8,0xba,0xc9,0x77,0xdf,0xbf,0xbf,0xcf,0xd5,0xbe,0xaf,0xab,0xaa,0xa7,0xa4,0xac,0xbf,0x3a,0x28,0x2a,0x30,0x4c,0x56,0x6c -,0xce,0xbd,0xcc,0x42,0x4d,0x3f,0x2e,0x25,0x26,0x3f,0xbd,0xab,0xb7,0x5d,0x3e,0x36,0x37,0x50,0xb4,0xab,0xac,0xbd,0x3b,0x2c,0x2f,0x4d,0xb8,0xae,0xb3,0xaf,0xa6,0xaa -,0xbe,0xad,0xab,0xd9,0x2b,0x1c,0x1f,0x38,0xbd,0xbf,0x4a,0x39,0x2e,0x2e,0x2b,0x2e,0x58,0xb5,0xae,0xda,0x43,0x51,0xce,0xbb,0xcd,0xbe,0xae,0xb2,0xcb,0xee,0xbc,0xba -,0xe3,0x37,0x2b,0x34,0xe6,0xbb,0xd4,0x3d,0x43,0xc6,0xb4,0xbe,0xc3,0xb4,0xbe,0x43,0x26,0x1e,0x2d,0xb8,0xa9,0xba,0xc9,0xc5,0xd2,0x3f,0x2d,0x35,0x4e,0x68,0x3a,0x2a -,0x30,0xb6,0xa2,0xaf,0xed,0x51,0xea,0xbf,0xbb,0xb9,0xa9,0xa8,0xc1,0x26,0x1a,0x27,0xb3,0xa2,0xad,0xac,0xbc,0x58,0x3a,0x2f,0x31,0x52,0xb7,0xd6,0x2d,0x25,0x33,0xf8 -,0x4b,0x3e,0xd2,0xb6,0xb5,0xe7,0x37,0x35,0x4a,0x5c,0x37,0x3b,0xba,0x9e,0x9b,0xa6,0xbf,0x4e,0x53,0xe7,0xcf,0xc5,0xc5,0xd6,0x31,0x1c,0x1c,0x31,0x50,0x3b,0x3f,0xd2 -,0xb6,0xae,0x79,0x2f,0x39,0xec,0x5e,0x33,0x3f,0xad,0x99,0x9a,0xab,0xea,0x38,0x3b,0xee,0xca,0xc4,0xb5,0xbf,0x2c,0x1d,0x21,0x46,0xaf,0xad,0xb5,0xcf,0x5a,0x41,0x37 -,0x33,0x45,0xb8,0xb5,0x6c,0x3e,0x58,0xc2,0xca,0xd5,0xc3,0xae,0xa4,0xad,0x3c,0x21,0x23,0x2c,0x2c,0x36,0xc4,0xae,0xb6,0x44,0x2c,0x2d,0x4f,0xb1,0xa9,0xa9,0xae,0xd4 -,0x2a,0x1e,0x27,0xba,0x9c,0x9c,0xb0,0x3a,0x3b,0xce,0xe2,0x4c,0x5e,0xc6,0xed,0x2a,0x1e,0x28,0x74,0xbe,0xcf,0xd8,0xc1,0xb9,0xe1,0x37,0x3b,0xe7,0xb7,0xb8,0x59,0x4d -,0xb7,0xa3,0xa5,0xb2,0xc1,0xbd,0xbc,0x5b,0x2c,0x26,0x2f,0x37,0x30,0x32,0x3f,0x56,0x4f,0x3c,0x35,0x7e,0xad,0xa7,0xaf,0xd3,0x4b,0x4c,0x39,0x2d,0x4d,0xb4,0xa7,0xab -,0xdc,0x56,0xc6,0xbf,0xc7,0xe9,0x47,0x42,0x38,0x27,0x22,0x29,0x42,0xb6,0xad,0xbb,0xba,0xae,0xb6,0x54,0x30,0x37,0x58,0x3e,0x32,0x67,0xb1,0xad,0xb9,0xf5,0xc3,0xad -,0xb2,0xdb,0x3f,0x3d,0x38,0x33,0x30,0x2b,0x2c,0x36,0x54,0xcf,0xbb,0xab,0xa9,0xc0,0x3d,0x31,0x38,0x4c,0xcf,0xb4,0xa4,0xa0,0xad,0x78,0x3e,0xf5,0xac,0xa4,0xb1,0x57 -,0x2d,0x22,0x1e,0x1c,0x21,0x3e,0xc9,0xbc,0xd9,0x4f,0xb8,0xac,0xca,0xe4,0xd7,0xf7,0x4f,0x33,0x34,0xcd,0xab,0xaa,0xb5,0x65,0x69,0xb2,0xaa,0xb1,0x4c,0x26,0x1f,0x1e -,0x1b,0x20,0x48,0xae,0xa8,0xb0,0xb5,0xa9,0xaa,0xe7,0x3d,0x4f,0xc9,0xb7,0xbc,0x6f,0x3d,0x47,0x59,0x44,0x4e,0xaf,0x9e,0xa3,0xc8,0x2d,0x1c,0x18,0x19,0x22,0x7a,0xa8 -,0xa2,0xba,0x37,0x43,0xb5,0xa2,0x9c,0x9e,0xae,0x47,0x29,0x25,0x2a,0x4a,0xb0,0xb1,0xcc,0xd7,0xc3,0xb8,0xc2,0x43,0x2f,0x2b,0x2a,0x27,0x21,0x29,0x4e,0xc5,0xcc,0xbc -,0xa8,0x9f,0xa3,0xaf,0xbd,0x6d,0x46,0x4d,0x3e,0x2d,0x2e,0x4c,0x5b,0x54,0xba,0xa1,0x9c,0xac,0x37,0x22,0x1f,0x26,0x2d,0x38,0x5d,0xc6,0xc8,0xfd,0xbd,0xa4,0x9e,0xa4 -,0xc7,0x35,0x28,0x28,0x2b,0x2c,0x3f,0xb7,0xb2,0x5c,0x49,0xb6,0x9e,0x9b,0xa4,0xc6,0x2c,0x1e,0x20,0x25,0x28,0x37,0x46,0x43,0x56,0xb8,0xa2,0x9c,0xa2,0xad,0xbf,0x60 -,0x7b,0x4e,0x2f,0x27,0x2e,0x42,0x5e,0xc2,0xa6,0x9c,0xa8,0x3c,0x1f,0x1b,0x21,0x2f,0x2f,0x34,0x3c,0x30,0x2d,0x60,0xa1,0x91,0x8f,0x98,0xc8,0x21,0x1f,0x2e,0x32,0x38 -,0xd5,0xcb,0x36,0x24,0x41,0xa2,0x96,0x9a,0xb2,0x2d,0x1a,0x1a,0x1f,0x23,0x35,0xb7,0xa9,0xb7,0xc8,0xaa,0x9c,0x9d,0xa9,0xbd,0x6d,0x42,0x2e,0x1c,0x17,0x1d,0x2b,0x40 -,0xbf,0xa8,0x9b,0x9a,0xaa,0x54,0x2e,0x2f,0x5b,0x4b,0x2c,0x2d,0x32,0x36,0x44,0xbb,0x9a,0x90,0x96,0xad,0x2c,0x1e,0x25,0x29,0x1e,0x1d,0x2e,0x41,0x42,0xcc,0xa1,0x97 -,0x96,0x9f,0x66,0x26,0x24,0x31,0x2f,0x21,0x27,0x3f,0x58,0x49,0xbd,0x9a,0x8f,0x96,0xbd,0x25,0x1e,0x24,0x27,0x1e,0x1e,0x2f,0x43,0xdd,0xb7,0xa6,0x9c,0x9b,0xa9,0x55 -,0x42,0xcc,0xc6,0x2c,0x1c,0x29,0x3e,0x4b,0xde,0xae,0x9c,0x99,0xa5,0x3c,0x20,0x23,0x3a,0xe4,0x3a,0x26,0x26,0x28,0x3c,0xae,0x96,0x8e,0x93,0xaa,0x2b,0x1f,0x2a,0x3b -,0x2e,0x23,0x25,0x25,0x24,0x30,0xb7,0x98,0x8e,0x96,0xf8,0x1c,0x1a,0x25,0x38,0x39,0x3e,0xef,0x71,0x67,0xcd,0xa8,0x97,0x93,0x9f,0x4a,0x2a,0x25,0x1d,0x17,0x19,0x2a -,0x49,0xc8,0xb2,0xaa,0x9e,0x9a,0xa5,0x52,0x3c,0xbb,0xac,0xcd,0x28,0x1c,0x1a,0x1e,0x36,0xb6,0x9c,0x94,0x9b,0xcc,0x23,0x22,0x34,0xf9,0xc6,0xd6,0x57,0x32,0x27,0x30 -,0xb9,0x97,0x8e,0x98,0x4b,0x21,0x25,0x2b,0x25,0x1d,0x1f,0x2b,0x3f,0xb7,0xa2,0x9c,0x97,0x99,0xaf,0x3a,0x2d,0x2b,0x26,0x1e,0x1d,0x21,0x26,0x2f,0xe2,0xa0,0x90,0x8c -,0x96,0xd9,0x25,0x28,0x33,0x2c,0x21,0x1e,0x25,0x30,0x6e,0xbb,0xa9,0x9c,0x9d,0xaa,0xb7,0xb6,0xc9,0x33,0x1f,0x1d,0x1f,0x24,0x2f,0x6d,0xab,0x99,0x97,0xab,0x31,0x2b -,0x4e,0xbe,0xbd,0x4b,0x2a,0x1e,0x1e,0x34,0xb2,0x9a,0x90,0x95,0xb9,0x26,0x23,0x2d,0x3c,0x3f,0x33,0x28,0x25,0x2d,0x44,0xab,0x92,0x8c,0x98,0xd9,0x29,0x1e,0x1b,0x1c -,0x1e,0x20,0x27,0x3e,0xdf,0xbe,0xa1,0x94,0x93,0x9f,0xb6,0xf2,0x41,0x31,0x1e,0x15,0x14,0x1e,0x30,0xe5,0xa4,0x96,0x94,0xa6,0x44,0x47,0xbe,0xac,0xb9,0x32,0x1e,0x1a -,0x1e,0x26,0x55,0xa1,0x96,0x97,0xac,0x3e,0x29,0x2b,0x3e,0x48,0x3d,0x36,0x2b,0x28,0x44,0xa5,0x94,0x90,0x9a,0xbd,0x2c,0x24,0x3d,0x3f,0x20,0x18,0x1a,0x24,0x34,0xc7 -,0x9e,0x91,0x91,0x9d,0xbd,0x2f,0x2a,0x2d,0x29,0x25,0x26,0x2a,0x2a,0x33,0xae,0x96,0x8f,0x96,0xac,0x3f,0x31,0x2e,0x20,0x15,0x11,0x17,0x21,0x37,0xb8,0x9d,0x96,0x98 -,0x9f,0xa8,0xab,0xa8,0xae,0x3e,0x21,0x1d,0x1b,0x1a,0x28,0xb8,0x9d,0x99,0xa2,0x4a,0x29,0x28,0x76,0x49,0x2c,0xcd,0xaf,0x36,0x2e,0x4e,0xce,0xa9,0xc3,0x4d,0x68,0xdf -,0x2a,0x5e,0xa9,0xab,0x9a,0x96,0xea,0x12,0x1b,0x43,0xa5,0xcf,0x1f,0x4d,0xb4,0x5e,0x31,0x48,0x31,0x26,0xaf,0xb6,0x2b,0x21,0xb9,0x92,0x9c,0xae,0xc5,0xcb,0x1c,0x1c -,0xa9,0xc0,0x25,0x42,0xc6,0x4a,0xac,0x9d,0xa9,0x31,0x16,0x2c,0x64,0x2c,0x2d,0x9e,0x9b,0x33,0xd6,0xc5,0xce,0x29,0x2d,0xdb,0xbf,0xcb,0x44,0xc7,0x4e,0x9f,0x9c,0xa3 -,0x18,0x19,0x9f,0xf6,0x23,0x24,0xe6,0xaa,0xab,0xa7,0xbe,0x2a,0x17,0x2e,0x9a,0xaa,0x30,0x4d,0xa4,0xdb,0xc5,0xa6,0xaf,0x2c,0x1c,0x2e,0x30,0xcf,0x3e,0xb3,0xb9,0x4d -,0xaa,0x9f,0x3e,0x16,0x2f,0x61,0x4d,0x35,0xad,0x9d,0xbf,0xb7,0xa9,0xe2,0x11,0x20,0x9a,0x53,0x1e,0x2b,0xa4,0x9e,0x6f,0xc4,0xb0,0xbc,0x1a,0x27,0xd2,0x2a,0x35,0x9f -,0xa7,0xa9,0xa0,0x3c,0x24,0x1a,0x29,0xb0,0xb6,0x2f,0x3a,0xa3,0xa7,0x4e,0x9d,0x90,0x40,0x0e,0x18,0xca,0x9f,0xbc,0xc5,0xb7,0x1f,0x2c,0xaf,0x9d,0x23,0x1e,0xb3,0x3c -,0x29,0x3c,0x93,0x97,0xd0,0xbd,0xcd,0x1c,0x16,0x27,0xdd,0x3d,0x47,0x94,0x9b,0x76,0xfb,0xad,0xcc,0x1e,0x1b,0xc6,0xe9,0x1c,0x37,0x9d,0xb5,0x37,0x9c,0x99,0x25,0x0a -,0x19,0xaf,0x9b,0xb8,0x68,0xae,0xa9,0x9e,0xa1,0xcb,0x11,0x1a,0xaf,0x2f,0x2e,0xad,0x9c,0xaa,0x3f,0xaf,0xa9,0x33,0x15,0x2e,0xaf,0x3c,0x32,0xa8,0xab,0x5f,0x4b,0x4a -,0xa9,0x3c,0x25,0xe2,0xb6,0x63,0xa4,0xa2,0x33,0x32,0x30,0x3d,0x27,0x2b,0x2c,0xfe,0xa5,0xab,0x9b,0x9f,0x1e,0x0d,0x26,0xa2,0x8f,0xa6,0x1d,0x24,0x3c,0x9c,0x90,0x9f -,0x14,0x09,0x41,0xa3,0xc9,0x2d,0x63,0x9f,0x9c,0xbe,0x45,0x31,0x1c,0x2e,0xbd,0x34,0x1a,0xa5,0x8d,0xa8,0x3f,0x3c,0x3e,0x38,0x30,0x53,0xb1,0x23,0x24,0x97,0x95,0x39 -,0x35,0x9f,0x53,0x0e,0x1b,0xb2,0x9d,0xc1,0x1c,0x3d,0xa2,0x97,0xa0,0xc5,0x21,0x17,0xd3,0xc6,0x2c,0xe2,0x9f,0x95,0xad,0x2e,0xdc,0x28,0x14,0x1b,0xda,0x5a,0x2a,0xa3 -,0x92,0xa6,0x36,0x52,0x9d,0xac,0x0f,0x16,0x4d,0x23,0x23,0x96,0x8c,0xae,0xbc,0xab,0x29,0x11,0x21,0x3d,0xa5,0x4c,0x27,0xa7,0xb6,0xa5,0x99,0xaa,0x10,0x0c,0xaf,0xa2 -,0x24,0x4f,0xa6,0xa2,0xa8,0xd2,0xaf,0x33,0x15,0x24,0xa9,0xbc,0x26,0xc0,0x95,0x9b,0xb4,0xb4,0xb6,0x2d,0x0e,0x13,0x27,0x3d,0x99,0x95,0xb9,0x2f,0x55,0x9c,0xbb,0x0f -,0x1c,0xb4,0xa0,0x3a,0x21,0x9e,0xa0,0xb2,0xaa,0xcd,0x0d,0x12,0x9b,0xa8,0x27,0x21,0xa6,0x8e,0x99,0x25,0x25,0x2e,0x14,0x24,0xa5,0xe0,0x1d,0xa5,0x99,0x4e,0xc5,0xa2 -,0xef,0x1f,0x1c,0x4b,0xe7,0x46,0xa0,0x93,0x9f,0x28,0x37,0x9c,0xeb,0x0f,0x1f,0xcb,0xbd,0x38,0xc0,0xa8,0xc9,0x9e,0xbe,0xc7,0x20,0x13,0x55,0xbb,0x5d,0x68,0xa0,0x95 -,0xa2,0x18,0x1b,0x2d,0x29,0x9c,0x9f,0x1f,0x13,0xae,0x8f,0xa4,0xc4,0x55,0x3f,0x23,0x15,0x34,0xa8,0x60,0xd0,0x9b,0xb4,0x1a,0x4e,0x92,0x3b,0x0d,0x26,0xc1,0xa4,0xaa -,0xc5,0x65,0x6a,0xa9,0xb8,0xb8,0x16,0x17,0xb6,0xd4,0x2f,0xb5,0x92,0xb2,0x45,0x5b,0x5c,0x21,0x26,0xc6,0xb2,0x7d,0x20,0x9e,0x92,0xa1,0xd1,0x2a,0x2f,0x21,0x20,0xb7 -,0xb8,0x30,0x76,0xa7,0xa2,0xc9,0xba,0xaa,0x1c,0x0e,0x20,0xb2,0x92,0xa5,0x34,0x21,0x2c,0xab,0x9b,0xa9,0x0a,0x0b,0x99,0x93,0xc5,0xaf,0x9d,0xe1,0x2f,0x6b,0xea,0x1d -,0x19,0xfe,0xa7,0xbd,0x1d,0xac,0x95,0x3c,0x2c,0x3d,0x36,0x23,0xb9,0xb5,0x2f,0xbe,0xa0,0x9d,0xaa,0xe2,0x3b,0x3e,0x1c,0x1d,0xb7,0x9a,0x9f,0x3a,0x59,0x3a,0x4e,0xa9 -,0xb3,0xec,0x0d,0x15,0x9b,0x95,0xb4,0x2b,0xd4,0x56,0xca,0xaf,0xba,0x1c,0x0e,0x35,0x9a,0x9a,0xd5,0x9c,0xb4,0x1c,0x27,0xbc,0xb2,0x35,0xb8,0xd6,0x26,0x34,0xae,0x98 -,0xad,0x17,0x1c,0xb9,0x30,0x20,0xbf,0xa5,0xc9,0xf9,0x9c,0xce,0x2a,0x4d,0x38,0x3c,0x1a,0x3d,0x9b,0x9b,0xdc,0x2c,0xd2,0x3c,0xa7,0x99,0xca,0x0f,0x12,0xc7,0x94,0x95 -,0xc1,0xc4,0x21,0x1a,0x2c,0xa4,0xa6,0x1f,0x27,0x54,0xa1,0xa9,0xac,0x9e,0x41,0x0e,0x25,0x95,0xbf,0x25,0x44,0xae,0x45,0xc8,0x9f,0x43,0x24,0x1e,0xed,0xd0,0x1a,0x3d -,0x93,0x99,0x4c,0x43,0x3e,0x1b,0xc8,0x91,0xb8,0x13,0x17,0x7b,0x97,0x9c,0x3d,0x59,0x27,0x26,0xfc,0xa5,0x5f,0x14,0x35,0x9e,0x96,0xaf,0x3e,0x3b,0x2d,0x1c,0xbf,0x96 -,0x40,0x1c,0x2d,0xa5,0xaa,0xa3,0x9b,0x3a,0x15,0x19,0xaa,0x9e,0x25,0x37,0x9c,0x9e,0x46,0x64,0xef,0x1d,0x2e,0xb2,0xae,0x24,0x23,0xab,0x91,0xb9,0x16,0xf8,0xc7,0x34 -,0x4c,0xa2,0x30,0x19,0xaf,0x99,0xa8,0x41,0xcc,0x3a,0x20,0x1c,0xae,0x98,0x33,0x1a,0x46,0x9d,0xcf,0xa9,0x9e,0x1c,0x0f,0x1e,0x9e,0x96,0x38,0x1c,0x31,0xae,0xae,0x9e -,0x9d,0x23,0x10,0x2b,0x9a,0x9e,0xac,0xad,0x9a,0xea,0x1a,0xbc,0x47,0x20,0x26,0xaa,0xe4,0x1a,0x4b,0x9b,0x9c,0x53,0x52,0x47,0x22,0x17,0x9f,0x8f,0x56,0x2b,0x49,0xaf -,0x27,0xc0,0x9e,0x2a,0x13,0x1f,0x9c,0x95,0x42,0x19,0x4c,0xa6,0x9f,0x9c,0xd8,0x0f,0x0f,0xbf,0x95,0xbf,0x2f,0x39,0xbe,0x60,0x29,0xac,0xea,0x2f,0x21,0xc7,0xb7,0x2b -,0xd5,0x9c,0x9d,0x4d,0x44,0x34,0x2e,0x21,0xa9,0x9c,0x44,0x29,0xeb,0x9e,0x3e,0x33,0x57,0x3f,0x33,0xd4,0x9b,0xa5,0x28,0x25,0xb4,0xad,0x53,0xb0,0xb7,0x19,0x16,0xa3 -,0x91,0xb8,0x2c,0x1f,0xb0,0xbd,0xde,0x9b,0x30,0x16,0x1d,0xae,0xa9,0x2c,0xcd,0xa7,0xae,0x36,0x24,0x39,0xb2,0xbb,0x64,0x33,0x29,0xab,0x9a,0xa4,0x1e,0x1e,0xe1,0x3f -,0x39,0x31,0xb4,0xa7,0x3e,0x27,0xc4,0xac,0xb9,0x5e,0x2a,0x1c,0x26,0x9b,0x8f,0xad,0x37,0x37,0xbe,0xe1,0x31,0xae,0x54,0x2d,0x27,0xaf,0xa3,0x35,0x3a,0x49,0xbc,0xdc -,0xa8,0xb3,0x2e,0x1f,0x5b,0xc2,0x3a,0xb4,0xa2,0xa4,0x24,0x2a,0x3c,0x2e,0x64,0xdc,0x3f,0x39,0x4f,0xb5,0xa2,0xb6,0xd5,0xb9,0x49,0x20,0x34,0xab,0x9e,0xad,0x5d,0x1a -,0x1e,0xcb,0xa0,0xce,0x11,0x1a,0x33,0x93,0x96,0x31,0x3c,0xb8,0xb0,0xc6,0x3a,0x2b,0x5c,0x42,0x65,0xc8,0xf8,0xb7,0xa9,0xb5,0x2c,0xf5,0x9c,0xab,0x35,0x1d,0x2d,0x38 -,0xcf,0xb5,0xc5,0xbd,0xcd,0xc0,0x2c,0x24,0x55,0x9c,0xc8,0x28,0xd0,0xb0,0xad,0x4d,0xc5,0x3d,0x15,0x23,0xa3,0x9c,0xb1,0x39,0x38,0x6b,0xb7,0xad,0xbe,0x1c,0x18,0x3f -,0xb1,0xab,0xb1,0xd9,0xc3,0xb1,0x29,0xb5,0xb7,0x68,0xb8,0x1f,0x13,0x22,0xb6,0xa3,0xa1,0x2d,0x27,0xc4,0x99,0x9d,0xca,0xee,0x2d,0x2f,0xbb,0xb9,0x2e,0xe1,0xad,0x4a -,0x1e,0x21,0xdd,0x9d,0xdc,0x1f,0xb4,0x9c,0x9f,0xc8,0x2e,0x23,0x28,0xc6,0x9e,0x45,0x44,0xa9,0xc3,0x3a,0x20,0xb8,0xa4,0x5e,0x1d,0x1f,0x2f,0xc4,0xa0,0xe5,0x30,0x27 -,0xb0,0x96,0x9a,0xc6,0x38,0x31,0x2c,0xcb,0xd8,0x3d,0x25,0x2d,0x7d,0xd4,0xb4,0xbb,0x2d,0x45,0xcb,0x20,0xb6,0x99,0xae,0xb3,0x45,0x23,0x1f,0x33,0xac,0xae,0x2e,0x2e -,0xab,0x9d,0xa9,0xb3,0xbe,0x3c,0x1d,0x31,0xa5,0xd4,0x3d,0xd6,0xe4,0x39,0x3c,0xcc,0xa3,0x47,0x1e,0xbd,0xaa,0x9c,0xcc,0x15,0x1c,0xd4,0xbf,0xa8,0xaf,0x49,0xf4,0x5e -,0x31,0x20,0xb3,0x9a,0xaa,0x27,0x19,0x29,0x9c,0x92,0xb0,0x2c,0x1c,0x1e,0xac,0x96,0x3d,0x2f,0x3a,0x46,0x22,0x1f,0xe2,0xca,0x2e,0x2b,0xa8,0xaa,0xa2,0xb9,0xaf,0xb8 -,0x2d,0xb2,0x9c,0xcf,0x1e,0x31,0x35,0x58,0x3f,0x3b,0x52,0x40,0xbc,0x9f,0xab,0x3c,0x69,0xe4,0x4c,0x33,0x2d,0xbd,0x9e,0xa9,0xc2,0x30,0x27,0x2a,0x38,0xc9,0x34,0x4e -,0xbf,0xa5,0xa6,0xd3,0x28,0x2e,0xdf,0x3b,0xa9,0xb8,0x39,0x39,0xa9,0xb9,0x2e,0xb6,0xa1,0xbc,0x13,0x17,0x2c,0xc1,0xaf,0xb4,0xc6,0x34,0x51,0xa6,0xa5,0x25,0x3c,0xab -,0xb2,0x2b,0x16,0x2e,0x9d,0xa0,0xbe,0x49,0x44,0xac,0xae,0x3d,0x24,0x2d,0x2c,0xa3,0xa3,0x4f,0x3a,0xbd,0xbd,0x33,0xd7,0x36,0x4b,0x5a,0xae,0xbf,0xc0,0xa0,0xa6,0x47 -,0x11,0x1e,0xcd,0xad,0xbb,0xd9,0xda,0x2d,0x2b,0x7a,0xb4,0xdd,0x6c,0xb3,0xcc,0x2e,0x21,0xe8,0x94,0x99,0x51,0x33,0xbf,0x4e,0x4d,0x45,0x1e,0x1e,0x27,0xab,0xad,0x26 -,0x1f,0x2f,0xc6,0xaa,0xa1,0x46,0x49,0xc6,0xa3,0xa4,0xd0,0xad,0xb4,0xbb,0x1f,0x15,0x1a,0x49,0xac,0xce,0xb2,0xaf,0x9e,0x9b,0xbc,0x2c,0x31,0x40,0xd7,0xea,0x1d,0x2e -,0x9b,0xa9,0x2b,0x2f,0x43,0x59,0xc1,0x37,0x1f,0x48,0xa6,0x93,0xe1,0x10,0x1c,0x9b,0x8f,0x9c,0xb8,0x18,0x1d,0x2d,0xb9,0xab,0xbf,0x46,0xc6,0x4e,0x1f,0x39,0x2d,0xb7 -,0xab,0x28,0x23,0x73,0xa8,0xa7,0x47,0x36,0xeb,0xc6,0xb4,0xca,0x25,0x2b,0xcd,0xc6,0xb6,0xa0,0x9d,0xdc,0x51,0x22,0x2b,0xb4,0xaa,0xa1,0x29,0x0f,0x18,0xa7,0x96,0x9f -,0x37,0x2a,0xdf,0xa9,0x9a,0xcc,0x20,0x1c,0x38,0x9f,0xbc,0x23,0x27,0xa9,0x98,0x31,0x1d,0x2a,0xd8,0xa1,0xba,0x25,0x34,0xa9,0x9e,0xc0,0x1a,0x21,0xa9,0x9d,0xa6,0xb8 -,0x25,0x1c,0x2d,0x31,0x65,0xad,0xca,0xca,0x20,0x15,0xca,0x9a,0x9e,0xae,0x40,0x2e,0x9e,0x9e,0xbb,0x21,0x1b,0x33,0xb2,0x9a,0x3b,0x15,0x1b,0xa3,0x9b,0xc3,0xdc,0x37 -,0x3f,0xcb,0xbc,0xb1,0xb4,0xb0,0x95,0xbf,0x15,0x19,0xde,0xb1,0x33,0x29,0x2c,0x39,0xa7,0x97,0xb1,0x3a,0x27,0x2f,0x2f,0x56,0xbd,0xba,0xbe,0xb2,0xcf,0x3e,0xac,0xb8 -,0xc6,0x1e,0x12,0x29,0x99,0x94,0x2c,0x14,0x28,0x94,0x8e,0xc4,0x1f,0x17,0x1b,0x30,0x33,0xb6,0xa5,0xa8,0x97,0xad,0x16,0x2c,0x9d,0xa8,0xfc,0x1e,0x1e,0xa6,0x9c,0xfb -,0x69,0x2e,0x60,0xaa,0xcf,0x2e,0x15,0x28,0x9f,0x9e,0xa9,0x9d,0x6d,0x27,0xbc,0x2c,0x24,0x4b,0xbd,0xa5,0x2c,0x15,0x32,0x97,0x9c,0x38,0x1f,0x21,0xce,0xa1,0xa7,0xe5 -,0x28,0xd8,0x9b,0x3d,0x45,0xe1,0x7a,0xc4,0x2d,0x1f,0x2c,0xa8,0xfd,0x34,0x5e,0x3e,0x42,0x9e,0xaa,0x21,0x18,0x31,0x95,0x92,0xb6,0x3e,0x49,0x36,0xd5,0x31,0x6a,0xdf -,0x37,0xab,0x3e,0x11,0x31,0x97,0xa9,0xbb,0x4c,0x2c,0xb7,0xa6,0x62,0xdd,0x4e,0xb0,0xa0,0x24,0x20,0x29,0x69,0xad,0x3e,0x25,0xbd,0xeb,0x2c,0xb0,0xb9,0xb7,0x9e,0xa5 -,0xba,0x26,0x11,0x2c,0x9d,0xa8,0x1f,0x19,0x3d,0x9e,0x9e,0xa6,0xb1,0x21,0x28,0xb7,0x4a,0x3c,0x34,0x55,0xb3,0xd4,0xd3,0xdd,0xad,0x5c,0x1f,0x4a,0xce,0x47,0xa8,0xb5 -,0x2f,0x38,0xa8,0x9c,0xc5,0x35,0x42,0x47,0x1f,0x26,0x36,0xaf,0x9e,0xad,0xb1,0x2f,0x11,0x2b,0x94,0xa4,0x2b,0x28,0x2e,0xa6,0x95,0xad,0xb0,0x34,0x2b,0x32,0x19,0x21 -,0x28,0xf2,0x99,0x9b,0x37,0xbc,0xbe,0x29,0x3d,0xb1,0xac,0xb7,0x3e,0x2a,0x40,0x2d,0xc3,0xa1,0xbf,0x19,0x17,0xc9,0x9f,0xae,0xb3,0x9e,0xf7,0x29,0x53,0x2b,0x2c,0xbf -,0xad,0xc2,0x3f,0x58,0x78,0xa4,0x9f,0x43,0x34,0x29,0x26,0xdc,0xbd,0x2f,0x1d,0x59,0x9f,0x9d,0xb0,0xcc,0x4e,0x2c,0x4c,0xfe,0xbf,0xd0,0x27,0x23,0xad,0xa8,0xe1,0xaf -,0x34,0x19,0x27,0xac,0x9d,0xa3,0x44,0xe5,0xa9,0xab,0x5a,0x15,0x19,0x29,0xd8,0xa3,0xb5,0x2f,0xc5,0x97,0xa0,0x42,0xdf,0x35,0x28,0x46,0xce,0x37,0x22,0x5f,0xb3,0x9d -,0xac,0x46,0x30,0x33,0x40,0xb7,0x9f,0x34,0x1d,0x30,0xad,0xa1,0xa9,0xca,0x2b,0x27,0xd3,0xbf,0x3f,0x45,0x26,0x35,0x99,0x99,0x68,0x1f,0x1d,0x21,0x64,0x9c,0xa4,0x3f -,0x2e,0xa8,0x9b,0xac,0x4d,0x1e,0x25,0x25,0x2d,0xb6,0xbd,0x3c,0x6f,0x9e,0xac,0x44,0x36,0x41,0xde,0x46,0xec,0x47,0xbe,0xbc,0x4b,0xc5,0xb9,0x35,0x29,0xba,0xaa,0xd6 -,0x4b,0x2e,0x1c,0x7c,0x99,0x9a,0xce,0x20,0x26,0x4b,0xb4,0xe6,0x34,0x47,0x5c,0xa9,0x9a,0xbb,0x1e,0x1d,0xd1,0xb3,0xcd,0x40,0x29,0x2a,0xbc,0x90,0x92,0xb1,0x11,0x0d -,0x36,0xb0,0xad,0xca,0xbb,0x47,0x4d,0xc3,0x49,0x45,0xb5,0x9e,0xad,0x3d,0x1c,0x17,0x28,0x9b,0x91,0x9b,0x3d,0x0e,0x17,0xba,0x96,0xa1,0x38,0x1d,0x1b,0xd9,0x97,0x9c -,0xc6,0x3b,0x4c,0xcd,0x48,0x1c,0x19,0x3c,0xa7,0x8e,0x8f,0x42,0x0b,0x11,0xbb,0xa1,0x9f,0xb1,0x2d,0x15,0x35,0x95,0x91,0x9f,0x3c,0x1f,0x20,0x1b,0x1e,0xc9,0xa7,0x9a -,0xa2,0xbc,0x23,0x12,0x54,0x9f,0xa1,0x79,0x2f,0x33,0xd1,0xaa,0xba,0xbf,0x35,0x2f,0xae,0x9c,0x43,0x0f,0x12,0x2e,0xa1,0x8d,0x91,0x2e,0x0d,0x2c,0x9c,0xad,0x2e,0x18 -,0x2a,0xcb,0xa3,0x91,0x9a,0x2d,0x13,0x31,0xa6,0x2e,0x14,0x2e,0xa3,0x98,0x95,0x98,0x2c,0x0d,0x19,0xb6,0x9d,0x2c,0x1a,0xbe,0xa1,0xac,0xbe,0xc3,0x3b,0x3c,0xa4,0xa5 -,0x13,0x0a,0x29,0x99,0x88,0x8a,0xb9,0x0f,0x08,0x1d,0x9b,0x96,0xc9,0x19,0x26,0xf0,0xb6,0x9b,0xa2,0x40,0x28,0xab,0x9c,0x1e,0x08,0x12,0x9e,0x88,0x8f,0x9f,0x2b,0x08 -,0x0f,0xb2,0x9a,0x33,0x23,0xa2,0x9f,0x7a,0xb0,0x9d,0x3f,0x1f,0x34,0xe0,0x1f,0x11,0xed,0x8e,0x8a,0xab,0x1d,0x13,0x11,0xbd,0x90,0x9e,0x1b,0x0e,0x3e,0x9c,0x90,0x95 -,0x48,0x22,0x2b,0xc5,0xa6,0x21,0x0b,0x16,0x9b,0x88,0x94,0xbd,0x16,0x09,0x30,0x8f,0x96,0x1d,0x0e,0x2c,0xa1,0x96,0x9b,0x9f,0x4a,0x17,0x21,0xb6,0x26,0x0a,0x2a,0x8c -,0x89,0xab,0xf2,0x52,0x16,0x1c,0x37,0xbe,0x38,0x1f,0xa0,0x8f,0x9d,0x3e,0x20,0x2c,0x33,0xa9,0x98,0x18,0x02,0x1d,0x8f,0x86,0x89,0xa3,0x11,0x0a,0x38,0x9e,0xb6,0x1d -,0x15,0x52,0x99,0x97,0xa2,0xce,0x1f,0x1e,0xd8,0x9e,0x1f,0x0c,0x2b,0x99,0x88,0x94,0xbe,0x3c,0x16,0x0d,0x1b,0xa3,0xc1,0x1f,0xa0,0x8b,0xaa,0x23,0xbc,0xad,0x25,0x1f -,0xdf,0x17,0x0c,0xab,0x86,0x85,0x9e,0x1b,0x0e,0x0c,0x1d,0xa4,0x9c,0x1c,0x0f,0xa4,0x8a,0x8e,0x97,0x2f,0x0e,0x22,0xa2,0xb6,0x0c,0x0a,0x7b,0x93,0x85,0x8f,0xc3,0x21 -,0x0c,0x0c,0x3b,0x9a,0x2d,0x2f,0x9f,0x8f,0x98,0xba,0x5a,0x28,0x16,0x13,0xcf,0x6f,0x15,0x34,0x8d,0x83,0x9c,0x1f,0x2b,0x0f,0x0c,0x26,0xca,0x30,0x4f,0x8c,0x84,0x93 -,0x2f,0x14,0x0e,0x18,0x36,0xbd,0x17,0x0d,0x59,0x8a,0x82,0x92,0xad,0x21,0x07,0x0e,0xa6,0xb9,0x17,0x4c,0x97,0x8f,0x9c,0xbc,0x50,0x27,0x14,0x0e,0x3d,0x4a,0x25,0xac -,0x90,0x89,0x94,0xb6,0x1c,0x06,0x08,0x30,0x9f,0xaa,0xc1,0x95,0x83,0x92,0x11,0x0c,0x1f,0x1c,0x1c,0x3f,0x1c,0x11,0x9a,0x82,0x81,0x9d,0x27,0x18,0x06,0x07,0x29,0xbf -,0x3e,0xb7,0x9c,0x8a,0x97,0xad,0xd9,0x1a,0x0d,0x28,0x9c,0x1b,0x0e,0xae,0x8a,0x8a,0x93,0xb3,0x15,0x03,0x09,0x2e,0xaa,0xa9,0xb9,0x92,0x84,0x96,0x23,0x1f,0x1e,0x11 -,0x15,0x2a,0x21,0x20,0x9f,0x87,0x80,0x93,0x1a,0x0e,0x0c,0x0b,0x18,0x2b,0x40,0xa9,0x8d,0x82,0x94,0xbc,0xbb,0x24,0x0a,0x0b,0x28,0x1c,0x15,0x72,0x8b,0x86,0x8d,0xaa -,0x25,0x0a,0x09,0xbe,0x99,0x32,0x1a,0x94,0x85,0xa4,0x1f,0x1c,0x19,0x1e,0x29,0x20,0x15,0x2c,0x91,0x84,0x84,0x9c,0x33,0x1b,0x0b,0x09,0x15,0x26,0x2b,0xd7,0x8f,0x84 -,0x90,0xc9,0x1f,0x1c,0x19,0x1a,0x2a,0x46,0x20,0x43,0x89,0x82,0x8f,0x2f,0x13,0x08,0x09,0x29,0xc9,0x2e,0x20,0x97,0x87,0x96,0xad,0xea,0x1f,0x1b,0x29,0x3d,0x1f,0x1a -,0x9e,0x84,0x88,0x42,0x19,0x1f,0x11,0x0b,0x17,0x20,0x2b,0x9d,0x8a,0x85,0x8f,0x5c,0x20,0x49,0x20,0x0f,0x12,0x18,0x1c,0xbf,0x88,0x84,0x89,0x53,0x0b,0x09,0x12,0x20 -,0x1d,0x1c,0x3c,0x8a,0x82,0x8d,0x3e,0x1f,0xe0,0x4f,0x1b,0x0f,0x0f,0x1a,0xab,0x89,0x88,0xa8,0x3c,0x32,0x22,0x13,0x10,0x1d,0x2e,0xaf,0x8f,0x86,0x94,0x31,0x3e,0xb1 -,0x2a,0x12,0x0f,0x0c,0x1f,0x96,0x88,0x8b,0x9a,0x32,0x1c,0x1b,0x1d,0x1a,0x16,0x27,0x6b,0x8e,0x82,0x90,0x30,0x17,0x2e,0xb4,0x2d,0x0a,0x0b,0x4d,0x9d,0x8a,0x87,0x9e -,0x2f,0x25,0x23,0x16,0x0d,0x0e,0x2d,0x9b,0x8c,0x8e,0x4a,0x3b,0x94,0x90,0x11,0x00,0x1d,0xac,0x99,0x8e,0xab,0x2a,0x93,0x88,0x41,0x23,0x38,0x02,0x02,0x00,0x42,0x80 -,0x81,0x87,0x41,0x0d,0x45,0x8f,0x19,0x00,0x3a,0x84,0x8c,0x68,0x02,0x57,0x80,0x85,0x2a,0x02,0x07,0x13,0x16,0x12,0x8d,0x84,0xbd,0x44,0x23,0x9e,0x84,0x35,0x02,0x0e -,0x94,0x8d,0x9b,0x27,0xa0,0x8a,0x3c,0x0e,0x06,0x00,0x2d,0x82,0x8c,0x87,0x9e,0x0c,0x2e,0x88,0x97,0xb3,0x22,0x04,0x06,0x05,0xb1,0x81,0x8f,0x92,0x84,0x9b,0x2d,0x1b -,0x03,0x01,0xab,0x8e,0xa4,0x1f,0x0f,0x93,0x85,0x8b,0x38,0x06,0x03,0xd6,0x86,0x99,0xa2,0x3d,0xb9,0x8e,0x18,0x0e,0xc2,0x30,0x33,0x13,0x0d,0x93,0x8a,0x16,0x68,0x84 -,0x88,0xdf,0x06,0x00,0x4a,0x80,0x86,0xa1,0x24,0xa2,0x8b,0xb7,0x0a,0x0d,0x0a,0x14,0x28,0x0c,0x9c,0x83,0x9b,0x93,0x88,0x94,0x3b,0x12,0x05,0x0a,0xae,0x97,0x5a,0x06 -,0x31,0x81,0x82,0xa5,0x0c,0x02,0x0d,0xa7,0x9e,0x9f,0x97,0x9c,0xa1,0x36,0x0b,0x29,0x2c,0x0e,0xaf,0x95,0xac,0x9e,0xb8,0x3c,0x8a,0x86,0x27,0x06,0x03,0x03,0x4e,0x8f -,0x8f,0xb5,0x2c,0x90,0x83,0x8c,0x1a,0x05,0x04,0x26,0xc6,0x13,0x31,0x8b,0x81,0x88,0xbf,0x10,0x16,0x19,0x20,0x26,0xb3,0x9a,0x3a,0x04,0x15,0x87,0x80,0x9c,0x06,0x04 -,0x17,0xb2,0x9c,0xc1,0xa6,0x88,0x82,0xb7,0x03,0x08,0x16,0x32,0x9f,0x44,0x1d,0xa9,0x93,0xca,0xa2,0x88,0xda,0x07,0x01,0x11,0x91,0x86,0x9f,0x27,0xa5,0x8e,0x8c,0xcf -,0x0c,0x12,0x44,0x1f,0x06,0x08,0x31,0x8d,0x85,0x83,0x8f,0x23,0x06,0x09,0x2b,0x96,0x8c,0xab,0x32,0x23,0x1c,0xa0,0x97,0x1b,0x0c,0x2e,0xa3,0xac,0xba,0x28,0x31,0x94 -,0x83,0x99,0x05,0x02,0x1b,0xa1,0x9a,0xb6,0x34,0x99,0x88,0x99,0x9a,0xa5,0x0f,0x03,0x06,0x0e,0x9a,0x88,0x94,0xc9,0x5d,0xa8,0x9d,0x58,0x06,0x0e,0xa8,0x9c,0x21,0x10 -,0xb6,0x89,0x82,0x89,0x1f,0x06,0x18,0x3b,0x1f,0x17,0x2c,0xd1,0xad,0x66,0xaf,0x8b,0x9f,0x10,0x0b,0x35,0x98,0x8e,0x95,0x9a,0x9b,0xa4,0xac,0x14,0x04,0x13,0x9d,0x94 -,0xad,0x12,0x0f,0x62,0x96,0x8e,0x9e,0x1d,0x0a,0x0d,0x0e,0x13,0xa2,0x8b,0x89,0x8d,0xa7,0xa8,0xc4,0x23,0x0d,0x13,0xc7,0x37,0x0e,0x0f,0xa2,0x88,0x83,0x89,0x1f,0x0b -,0x28,0xaf,0xa8,0xbb,0x52,0x35,0x3b,0x1e,0x21,0xa0,0xa0,0xbd,0x1a,0x0a,0x0f,0x3d,0x9f,0x9a,0x8c,0x85,0x8d,0x19,0x01,0x0b,0x9d,0x86,0x94,0x1c,0x1a,0xac,0xb0,0xaf -,0xc4,0x3c,0x25,0x20,0x0f,0x0a,0x37,0x9d,0x93,0x96,0x99,0xa0,0x36,0x1a,0x17,0x24,0xb4,0xb8,0x1d,0x1a,0xa4,0x8a,0x85,0x8f,0x1d,0x10,0x32,0xb7,0x37,0x18,0x26,0xb7 -,0xab,0x2a,0x16,0x2a,0x46,0xae,0x99,0x9f,0xac,0xdc,0x44,0x3d,0xad,0x9b,0xb2,0x19,0x0b,0x12,0x3e,0xa0,0xb5,0x2a,0xc4,0x91,0x8e,0x98,0x32,0x15,0x26,0xc1,0x32,0x20 -,0xb6,0x94,0x91,0xdc,0x1b,0x29,0x61,0xd3,0x2b,0x1d,0x2d,0x2a,0x13,0x11,0x5c,0x8d,0x88,0x9d,0x1c,0x1f,0xb5,0x9f,0xaa,0x42,0xda,0x9e,0x9f,0x3d,0x1e,0x48,0xac,0xbe -,0x23,0x17,0x1f,0x4f,0xa6,0xcc,0x3e,0xb6,0x6c,0x17,0x15,0x6d,0x8f,0x89,0x9c,0x28,0x25,0xd6,0xad,0xaa,0xbd,0xd0,0x2f,0x10,0x09,0x0d,0x64,0x8d,0x88,0x93,0xbe,0x2a -,0x1e,0x2a,0x5b,0xb5,0xac,0x5b,0x20,0x16,0x1d,0xad,0x94,0x9b,0xb1,0x4d,0x42,0x5c,0x33,0x2c,0xbb,0x9f,0xad,0x1f,0x0e,0x30,0x97,0x9c,0xcf,0x2a,0x27,0xad,0x9d,0xae -,0xa6,0x9e,0xdd,0x15,0x0a,0x0f,0xcb,0x99,0xa1,0x47,0x2e,0xd0,0xc9,0x2f,0x38,0xad,0x9b,0xa6,0x22,0x14,0x61,0x95,0x99,0xb1,0x70,0xad,0x9f,0x43,0x0f,0x0a,0x16,0x3e -,0xb5,0xb0,0xa6,0x9b,0xaa,0x59,0xc7,0xa7,0x9d,0xb5,0x22,0x2b,0xbc,0xc3,0x33,0x16,0x15,0xb3,0x91,0x9e,0x3a,0x1f,0x28,0xb8,0xae,0xde,0x65,0xc1,0xc1,0x36,0x1d,0x24 -,0xd3,0xa7,0x9e,0xa8,0xac,0xa0,0xac,0x3a,0x2a,0x2a,0x2f,0x1d,0x0d,0x16,0xa7,0x91,0x9f,0x24,0x1a,0xad,0x8d,0x8e,0xa8,0x23,0x1e,0x3e,0x3b,0x27,0x3f,0xad,0x9e,0xaa -,0x29,0x1c,0x25,0x24,0x29,0xd9,0xa4,0x9a,0xae,0x19,0x14,0xb5,0x8e,0x91,0xbf,0x23,0x3d,0xa9,0xbd,0x2a,0x22,0xf4,0xad,0x3e,0x28,0x2d,0x3a,0xca,0xbe,0x46,0xc5,0xa7 -,0xc2,0xfa,0xd1,0x46,0x43,0x25,0x15,0x2e,0x9b,0x90,0x99,0xcc,0x3d,0xaf,0xab,0x3e,0x1b,0x15,0x29,0x58,0x25,0x19,0x1f,0xdc,0x99,0x8f,0x93,0x96,0xa4,0x32,0x24,0x39 -,0xbf,0xae,0x52,0x1d,0x18,0x26,0xcb,0x5c,0x29,0x2e,0xbd,0xa1,0x9f,0xcd,0x31,0xb4,0xa4,0xc5,0x37,0x34,0xca,0xa0,0xb4,0x26,0x29,0x4b,0xbe,0xb1,0x3e,0x2b,0x37,0x29 -,0x1b,0x1f,0xce,0xa0,0xa2,0xbc,0xb1,0x9e,0xa0,0xd2,0x21,0x23,0xba,0xa7,0xea,0x30,0x29,0xe0,0xa1,0xb2,0x4d,0x48,0x3e,0x2d,0x20,0x1f,0x2d,0xee,0xf0,0x4f,0xbb,0x9a -,0x90,0xa2,0x44,0x4c,0xbe,0xb0,0xb9,0x30,0x33,0xbe,0x2d,0x15,0x15,0x1f,0xcc,0xa9,0xd3,0x53,0xac,0xa0,0xa4,0xa8,0xc3,0x3e,0xd5,0xe4,0x26,0x1b,0x20,0xe0,0xb6,0xb5 -,0xa8,0xa5,0xa4,0xb8,0x2c,0x20,0x2c,0x37,0x29,0x22,0x2c,0xae,0x99,0x9c,0xab,0xc9,0xbd,0xad,0xb4,0xce,0x50,0x49,0x3c,0x2a,0x24,0x61,0xb4,0xdc,0x3a,0x1f,0x1d,0x3d -,0xc1,0xdb,0xae,0xa4,0xa9,0xba,0xcc,0xbd,0xae,0xae,0xdf,0x3a,0x36,0x3f,0x37,0x2e,0x30,0x29,0x2a,0x25,0x18,0x20,0xb4,0x9d,0x9d,0x9e,0xa6,0x9a,0x96,0xab,0xca,0xd5 -,0x46,0x22,0x16,0x0f,0x21,0xaf,0x9e,0x9f,0xbd,0x33,0x2f,0x3d,0xd1,0xb6,0xdb,0x4a,0x33,0x26,0x46,0x9e,0x97,0xa0,0x48,0x1f,0x31,0xad,0xaa,0xd3,0x3b,0x3d,0xe6,0x36 -,0x24,0x25,0x28,0x34,0x47,0x30,0x3f,0xac,0xa0,0x98,0x9a,0xae,0xb6,0x65,0x24,0x26,0x34,0x47,0xb7,0xbc,0x32,0x3f,0x5b,0x45,0x59,0x58,0x4a,0x33,0x22,0x1d,0x43,0xa0 -,0x91,0x91,0x9f,0xcc,0x37,0x3a,0x3c,0x3a,0x35,0x34,0x1e,0x1b,0x41,0xa0,0x99,0xab,0x2b,0x1d,0x2c,0xef,0xba,0xb3,0xb0,0xae,0x7d,0x2a,0x40,0xb3,0xa5,0xa6,0xc7,0x30 -,0x33,0x7b,0xb7,0xae,0x4f,0x2d,0x2b,0x1d,0x14,0x16,0x23,0xac,0x97,0x9c,0xa0,0x9f,0x9d,0xa0,0xa9,0xa5,0xad,0x2c,0x15,0x11,0x1a,0xfc,0xa4,0xb4,0x48,0x20,0x1e,0x4d -,0xad,0xad,0xbd,0xda,0x3d,0xd0,0xb1,0xa2,0x97,0x9b,0xc9,0x1f,0x17,0x1c,0x38,0xb6,0xa4,0xad,0x35,0x1d,0x1d,0x2b,0xc3,0xb0,0xd7,0x3e,0x43,0xc7,0xa7,0xa3,0xa3,0xa3 -,0xb0,0x43,0x1f,0x1d,0x26,0xe8,0xa9,0x9e,0xab,0x43,0x2b,0x26,0xde,0xa6,0xcf,0x18,0x0e,0x13,0x4b,0x91,0x8d,0x96,0xa5,0xc0,0xba,0xb0,0xc6,0x40,0x32,0x2c,0x1f,0x19 -,0x1b,0x3e,0xae,0xa4,0xbf,0x29,0x23,0x30,0xbc,0x9b,0x90,0x99,0xb5,0x34,0x2f,0x4a,0xe0,0x49,0x2b,0x25,0x2e,0xb9,0xb5,0xe0,0x45,0x46,0xb6,0xbd,0x28,0x16,0x1e,0xc5 -,0x9a,0x98,0xb1,0x6e,0xd6,0xad,0x9c,0x9c,0xde,0x17,0x0f,0x18,0x47,0xab,0xac,0xe6,0x38,0x51,0xd9,0x38,0x29,0x2d,0xca,0x9f,0xa6,0xea,0xdd,0xad,0x9f,0x9e,0xb1,0x2f -,0x1f,0x1f,0x2a,0xc6,0xb5,0x7b,0x2a,0x28,0x59,0xbc,0xda,0x25,0x21,0xe5,0x9a,0x98,0xaa,0xd6,0xe7,0xa3,0x97,0xb5,0x16,0x0d,0x1b,0xcc,0xa6,0xb9,0x34,0x2b,0x5b,0xa0 -,0x98,0xa7,0x29,0x15,0x1a,0x35,0xb3,0xa6,0xaa,0xc4,0xb3,0xa0,0xa5,0x7d,0x2a,0x27,0x4a,0xb5,0x44,0x21,0x23,0xcc,0x9e,0xac,0x28,0x14,0x1e,0xbe,0x9f,0xa1,0xb3,0x53 -,0x47,0xa1,0x95,0xa0,0x2f,0x14,0x16,0x3f,0xa2,0xab,0x2e,0x1c,0x28,0xa9,0x9c,0xd8,0x1c,0x1d,0x6e,0xa8,0xae,0xdf,0xe3,0xa9,0x98,0x97,0xa7,0x30,0x18,0x18,0x32,0xbc -,0xd3,0x2c,0x1a,0x22,0xaf,0x9d,0xa7,0x5b,0x4c,0xae,0xa4,0xcf,0x25,0x24,0x4e,0xa8,0xaa,0x52,0x2d,0x32,0x4a,0xbc,0xa3,0x9f,0xaa,0x77,0x2e,0x21,0x19,0x1a,0x29,0xca -,0x9f,0x9d,0xb3,0x31,0x36,0xa7,0x96,0x9a,0xba,0x31,0x29,0x2b,0x33,0x2e,0x23,0x1f,0x2a,0x5d,0xb5,0xa6,0xa7,0xb0,0xce,0x44,0x37,0x43,0xba,0xa6,0xa9,0xc7,0x32,0x27 -,0x2a,0x4e,0xa5,0x99,0x9b,0xce,0x1c,0x13,0x18,0x2a,0x4f,0x6e,0x4b,0x5d,0xbb,0xa8,0x9e,0x9e,0xa7,0xdc,0x27,0x23,0x4a,0xa4,0xa1,0xd2,0x29,0x23,0x2e,0x3d,0xdd,0xad -,0xa5,0xae,0x38,0x1c,0x18,0x1f,0x53,0xa7,0x9c,0x9e,0xb2,0x38,0x2a,0xce,0x9d,0x9b,0xb3,0x2c,0x20,0x28,0x33,0x2e,0x26,0x25,0x35,0xb1,0x9e,0x9a,0x9e,0xaf,0x4f,0x28 -,0x21,0x2a,0x4a,0xbc,0xaf,0xbd,0x41,0x2b,0x26,0x30,0xaf,0x99,0x96,0xa3,0x3e,0x1c,0x18,0x1f,0x31,0xdc,0xb5,0xae,0xa9,0xac,0xbe,0xe9,0x59,0xea,0xd4,0xeb,0x43,0x34 -,0x47,0x63,0x37,0x2e,0x3b,0xe3,0xc8,0xbb,0xac,0xab,0xd3,0x2a,0x1f,0x2f,0xbb,0xab,0xa5,0xa1,0xa3,0xbb,0x2d,0x20,0x2a,0xd8,0xb2,0xd9,0x2e,0x24,0x22,0x28,0x4f,0xa7 -,0x9c,0xa6,0xd2,0x5b,0xbd,0xb3,0xcc,0x46,0x44,0x6f,0x76,0x33,0x29,0x44,0xbb,0xb8,0x64,0x3a,0x4e,0xc0,0xe0,0x36,0x33,0x49,0x7e,0x42,0x4e,0xb8,0xaa,0xbf,0x2c,0x26 -,0x48,0xaa,0x9d,0x9c,0xa0,0xbc,0x28,0x19,0x15,0x24,0xae,0x9e,0xaa,0x64,0x3a,0x47,0xcb,0xc4,0xb7,0xa9,0xab,0xc1,0x3b,0x2d,0x2d,0x33,0x51,0x6b,0x54,0x48,0x4d,0xda -,0xc7,0xc5,0x50,0x3a,0x37,0x2f,0x3d,0xb2,0x9f,0xa4,0xc3,0x3a,0x41,0xd2,0xd3,0x43,0x4e,0xe1,0x57,0x31,0x23,0x2d,0x6a,0xb8,0xb9,0xba,0xb4,0xb3,0xbc,0x3c,0x2c,0x31 -,0xee,0xb3,0xb6,0xb3,0xaa,0xaf,0x5a,0x2b,0x37,0xb0,0x9f,0x9f,0xb1,0x4e,0x23,0x17,0x13,0x19,0x35,0xb3,0xa6,0xb5,0x5b,0x57,0xcb,0xaf,0xaf,0xc5,0x4f,0x3a,0x2c,0x1e -,0x28,0xc1,0xa4,0xa2,0xb4,0x6e,0x46,0x67,0xc1,0xb7,0xa6,0x9f,0xa4,0xb9,0x44,0x3c,0x41,0xde,0x72,0x3e,0x3f,0x46,0x47,0x37,0x2c,0x26,0x29,0x29,0x1f,0x2b,0xcb,0xb7 -,0xc8,0xd8,0xbd,0xad,0xa8,0xad,0xc7,0xe0,0x4f,0x4e,0x6f,0x69,0xb5,0xa0,0xa2,0xba,0x38,0x26,0x28,0x3c,0x4e,0x44,0xce,0xc9,0x3c,0x30,0x3f,0xc2,0xbe,0xc9,0xe1,0xd8 -,0xba,0xb2,0xad,0xba,0x51,0x30,0x28,0x1e,0x1e,0x3d,0xaa,0x9e,0xa4,0xba,0x45,0x3f,0x45,0x42,0x5e,0xbb,0xb3,0xdb,0x3c,0x3c,0xf2,0xbb,0xb0,0xba,0xe6,0x5f,0xf1,0x55 -,0x32,0x2e,0x42,0x77,0x44,0x3d,0x5a,0xcb,0xc4,0xd4,0x6d,0x6f,0xbd,0xb8,0x6c,0x44,0xe8,0xfc,0x3d,0x3a,0x5f,0xca,0xc6,0xc8,0xf2,0x58,0x4a,0xe6,0xc0,0x5b,0x4b,0x58 -,0x3f,0x4b,0xb5,0xa1,0xa0,0xa4,0xbc,0x2b,0x21,0x29,0x44,0xd1,0xd9,0x41,0x2d,0x27,0x25,0x27,0x32,0xb6,0x9e,0xa1,0xc0,0x5a,0x4b,0x35,0x3c,0xd6,0xb6,0xb6,0xc6,0xe6 -,0xd9,0xba,0xac,0xaf,0xba,0xb2,0xae,0xcf,0x2b,0x22,0x28,0x33,0x69,0xb3,0xa8,0xab,0xc1,0x39,0x21,0x20,0x37,0xcf,0xbb,0xb8,0xc5,0x4a,0x2e,0x26,0x2b,0x4c,0xae,0xa0 -,0xa6,0xce,0x3e,0x5e,0xee,0x71,0xe0,0x5e,0xf1,0xd1,0xee,0x5e,0xcb,0xb1,0xc7,0x2f,0x29,0x3c,0x71,0x3c,0x2f,0x35,0x3c,0x55,0x66,0xc5,0xa9,0xa1,0xa1,0xae,0x63,0x4b -,0xd8,0xc0,0xc3,0xce,0xed,0x57,0x31,0x24,0x26,0x37,0xc2,0xae,0xba,0xea,0x5c,0x37,0x29,0x2d,0x40,0xbe,0xab,0xac,0xb1,0xba,0xb4,0xb0,0xc0,0x7e,0xce,0xba,0x72,0x2e -,0x25,0x24,0x2c,0x3b,0x3d,0x44,0xd2,0xbc,0xe5,0x3b,0x3f,0xd3,0xb4,0xb0,0xbb,0xc6,0xc6,0xc4,0xcf,0xce,0xb9,0xab,0xa6,0xba,0x3b,0x2f,0x37,0x3d,0x34,0x30,0x39,0x40 -,0x38,0x2e,0x2e,0x41,0xbe,0xad,0xa9,0xaf,0xc4,0x47,0x2c,0x29,0x30,0xda,0xac,0xb1,0xe3,0xef,0xda,0x6a,0x60,0xc2,0xad,0xa8,0xb9,0x3c,0x2d,0x2d,0x3b,0xcc,0xb7,0xaa -,0xab,0xd2,0x3a,0x2e,0x32,0xea,0xc6,0x45,0x3b,0x3b,0x34,0x46,0xce,0xb6,0xa7,0xa5,0xab,0xbc,0x60,0x51,0x53,0x3e,0x34,0x35,0x31,0x30,0x37,0x35,0x3a,0x54,0xd8,0xe1 -,0x3d,0x38,0x57,0xc1,0xbd,0xd1,0xda,0xbf,0xbb,0xba,0xb4,0xae,0xaa,0xae,0xb9,0xb4,0xad,0xb1,0x43,0x1f,0x1b,0x1e,0x2c,0x4b,0x4b,0x45,0x75,0xec,0x4c,0x3f,0xdf,0xb4 -,0xb4,0xbf,0xc2,0xca,0x57,0x3d,0x54,0xaf,0xa7,0xaa,0xba,0x49,0x2e,0x30,0x57,0x4e,0x33,0x2f,0x35,0x3d,0x48,0x6e,0xcb,0xbe,0xb0,0xae,0xb2,0xb6,0xb9,0xbf,0x69,0x4a -,0x4f,0x42,0x3b,0x47,0xde,0xbc,0xb3,0xbc,0xcd,0x52,0x3d,0x33,0x29,0x32,0x48,0x4e,0x58,0x3a,0x2e,0x2d,0x35,0xd6,0xad,0xa3,0xa1,0xb0,0x3e,0x2c,0x35,0xdf,0xb3,0xac -,0xad,0xbb,0x6b,0x45,0x41,0xde,0xb5,0xaa,0xba,0x2b,0x1d,0x1f,0x27,0x2e,0x3c,0xbf,0xa7,0xa2,0xa8,0xb6,0xce,0x56,0x4c,0x55,0x4f,0x55,0x4d,0x4e,0x57,0x5c,0xde,0xc9 -,0xd1,0xcf,0xb4,0xae,0xb8,0x40,0x26,0x25,0x2c,0x43,0xc4,0xbc,0xd4,0x38,0x37,0xcf,0xad,0xa7,0xaa,0xbd,0x53,0x3b,0x37,0x36,0x37,0x4e,0xcb,0xd1,0x7a,0xdd,0xc1,0xb7 -,0xb2,0xb5,0x4c,0x27,0x22,0x2c,0x44,0xce,0xbc,0xcf,0x45,0x39,0x3e,0xcc,0xa5,0x9d,0xa7,0xce,0x3c,0x2e,0x29,0x34,0xe5,0xba,0xad,0xaf,0xd5,0x47,0x67,0xc5,0xe3,0x3b -,0x34,0x33,0x29,0x24,0x27,0x37,0xce,0xb0,0xa1,0x9c,0xa0,0xae,0x74,0x2e,0x2e,0xea,0xb5,0xb6,0xc7,0x42,0x37,0x32,0x2f,0x44,0xc1,0xad,0xae,0xe3,0x33,0x2b,0x2a,0x30 -,0x44,0xf2,0xca,0xc1,0xbe,0xb8,0xb3,0xad,0xa8,0xae,0xcd,0x3e,0x36,0x2f,0x26,0x26,0x2b,0x3b,0xe7,0xcb,0xbe,0xb1,0xab,0xb1,0x5c,0x39,0x4a,0x6b,0xe6,0xc4,0xcd,0x53 -,0x43,0x3d,0xce,0xac,0xaa,0xb3,0x45,0x27,0x28,0x3f,0xcc,0xdb,0x39,0x2d,0x42,0xc0,0xaf,0xa9,0xa7,0xae,0x42,0x22,0x1f,0x2d,0xcc,0xac,0xaa,0xb5,0xcb,0xda,0xd8,0xc9 -,0xae,0x9f,0xa1,0x42,0x1b,0x18,0x24,0x40,0x6a,0xdc,0x6e,0x3a,0x2e,0x3a,0xc1,0xa6,0x9d,0xa3,0xbf,0x44,0x33,0x34,0x46,0x50,0x41,0x3a,0x3e,0x45,0x66,0xb9,0xaa,0xb4 -,0x3d,0x2e,0x38,0x3d,0x56,0xe5,0x4e,0x45,0xff,0xbe,0xac,0xa7,0xaa,0xaf,0xcb,0x45,0x3c,0x4d,0xbd,0xb3,0x5d,0x29,0x24,0x2c,0x3d,0xd6,0xb5,0xb0,0x60,0x22,0x1d,0x27 -,0xf2,0xa3,0x9e,0xac,0xbf,0xcf,0xd0,0xcb,0xb8,0xa7,0xa3,0xaf,0x37,0x1c,0x1a,0x27,0x3e,0x46,0x40,0x56,0xda,0xc9,0xb5,0xab,0xab,0xb2,0xd7,0x63,0xc5,0xb3,0xb3,0x3e -,0x1b,0x18,0x25,0x6d,0xaf,0xa5,0xa4,0xaa,0xd9,0x2e,0x2c,0x3a,0xd4,0xba,0xea,0x2f,0x25,0x29,0x48,0xae,0xa1,0xa5,0xb5,0x46,0x38,0x67,0xb5,0xae,0xcb,0x2f,0x26,0x30 -,0xe9,0xaf,0xa9,0xaf,0xcf,0x3b,0x28,0x26,0x3a,0xb2,0xa7,0xb6,0x3c,0x29,0x2c,0x4f,0xa7,0x9d,0xa2,0xb8,0x2f,0x1e,0x1f,0x37,0xaf,0xaf,0x4c,0x35,0x3f,0xe4,0xb4,0xa7 -,0xa2,0xa3,0xb0,0x43,0x29,0x28,0x3a,0x41,0x2a,0x1f,0x23,0x35,0xc8,0xa7,0xa5,0xae,0xb5,0xcb,0x6e,0xcb,0xac,0xaa,0x52,0x1f,0x1b,0x1e,0x2f,0xad,0x9e,0xa2,0xac,0xcb -,0x33,0x26,0x3c,0xab,0xa6,0xcb,0x2c,0x1d,0x21,0xd8,0xa6,0xa7,0xae,0xc6,0x31,0x1e,0x25,0xc0,0xa4,0xa8,0xcd,0x3c,0x38,0x58,0xb8,0xab,0xa6,0xa7,0xbe,0x2e,0x22,0x2b -,0x3e,0x4b,0x36,0x21,0x20,0x37,0xaa,0x9b,0x9e,0xa0,0xad,0x4f,0x42,0xc7,0xab,0xa7,0xcc,0x25,0x19,0x1a,0x2c,0xbf,0xb5,0xb4,0xaf,0xc9,0x38,0x2b,0x39,0xbd,0xb9,0x3b -,0x20,0x1c,0x2a,0xaf,0x9d,0x9b,0x9e,0xb6,0x45,0x3f,0xc5,0xa3,0xa1,0xb9,0x29,0x17,0x1a,0x3a,0xb8,0xb2,0xb5,0xd2,0x2f,0x1f,0x21,0x3d,0xae,0xa2,0xab,0x54,0x35,0xd5 -,0xa2,0x9d,0x9f,0xa6,0xcb,0x28,0x1e,0x28,0x4c,0x4f,0x31,0x20,0x1f,0x27,0x6c,0xa2,0xb1,0xb6,0xa6,0xb6,0x32,0x4f,0xbc,0xa9,0xab,0x34,0x27,0x42,0x67,0x5f,0x9e,0xa3 -,0xb4,0xbb,0x4e,0x15,0x0d,0x28,0xa7,0x9a,0x4f,0x38,0xa7,0xa2,0xc3,0x32,0x37,0x28,0x23,0x3f,0x40,0x26,0x2e,0x9c,0x8e,0x9c,0xae,0xb2,0x62,0x18,0x1c,0xc2,0x38,0x36 -,0x2f,0x37,0xb9,0xa3,0x9c,0xa7,0x30,0x1e,0xcc,0xbe,0x2e,0x2d,0xa9,0xad,0x72,0x3c,0x32,0x44,0x26,0x5d,0xa6,0xa4,0x2c,0x33,0x51,0xa9,0x9a,0xbf,0xbd,0x16,0x20,0xa2 -,0xb2,0x23,0x1e,0xbd,0xa3,0xb1,0xe3,0x2b,0x32,0x37,0xc3,0x98,0xb7,0x2c,0x4d,0x9e,0xbe,0x46,0xab,0xbd,0x19,0x19,0xb2,0xa6,0x6a,0x20,0x6a,0xb8,0xd0,0xd7,0xab,0x38 -,0x18,0x31,0xaa,0xb2,0x22,0xb0,0x97,0xa5,0x69,0x3e,0x27,0x16,0xb7,0x98,0x48,0x1d,0x26,0xa2,0x9f,0x55,0x6c,0xdd,0x2e,0x17,0x37,0xa4,0xe3,0x64,0xa3,0xa6,0xaf,0x71 -,0x36,0x28,0x1e,0xca,0xa0,0xbf,0x27,0x1e,0xbf,0x9a,0xa8,0xb5,0xae,0x20,0x0f,0x32,0x99,0x9b,0xd7,0xbf,0x23,0x20,0x47,0xbb,0x9f,0x2c,0x38,0xbb,0x3f,0x1b,0x34,0x8d -,0x90,0x41,0x2d,0x26,0x14,0x1c,0xae,0x97,0x47,0x24,0xbc,0xad,0xbd,0xa9,0x9e,0xf4,0x19,0x1c,0xd4,0xe9,0x2d,0xc9,0x9e,0x40,0x22,0xb5,0xb4,0x17,0x18,0xa7,0x8f,0xae -,0x1e,0x42,0xad,0x93,0x9b,0xde,0x23,0x0c,0x1f,0xa2,0xae,0x3d,0xe4,0xa1,0x5c,0x2e,0xb3,0xa6,0x66,0x1f,0x3d,0xbf,0x3b,0x2f,0xb0,0xa1,0xad,0x25,0x28,0x74,0x26,0xad -,0x8e,0xac,0x19,0x20,0xe4,0x9a,0xb4,0x1a,0x18,0x15,0x45,0x91,0x8b,0xa3,0x1a,0x1d,0x4e,0xdb,0x21,0x41,0xa9,0xaf,0x36,0x6b,0x9f,0xab,0x9e,0xab,0x31,0x0b,0x0e,0xcc -,0x9f,0x9e,0xab,0x9c,0x9e,0x25,0x17,0xcb,0xc7,0x34,0x2f,0x2a,0x1b,0x25,0x8f,0x90,0xd9,0x30,0xd4,0xbf,0x2c,0x1f,0x3b,0xb5,0xd2,0xbd,0x9f,0x41,0x17,0xdf,0x90,0xa4 -,0x1a,0x1a,0x27,0xcd,0xac,0x9b,0x9c,0xac,0x2e,0x13,0x33,0xe3,0xc8,0xbf,0x27,0x19,0x36,0x9a,0x94,0xab,0xde,0xba,0x45,0x26,0x21,0x3a,0xbe,0xa5,0xa1,0xbf,0x25,0x1a -,0xad,0x90,0x37,0x0e,0x1d,0xec,0xb1,0xa1,0x8f,0xaa,0x17,0x1e,0xa6,0xa6,0x26,0x1c,0x2a,0xa9,0x4f,0xce,0xb6,0x75,0xb6,0xa9,0xab,0x1a,0x1c,0x42,0x46,0xc8,0x99,0x95 -,0xcd,0x27,0x2a,0xfe,0xcc,0x4b,0x2b,0x26,0x1c,0x2c,0x99,0x8d,0x9c,0x2f,0x41,0xdd,0x28,0x1e,0x2c,0xad,0x9d,0xba,0x2a,0x28,0x3f,0xaa,0x90,0xa8,0x0e,0x11,0x44,0x98 -,0xa0,0xa5,0xac,0x29,0x1d,0x2e,0xc5,0x19,0xcb,0xa2,0x4a,0x29,0x29,0x99,0x93,0xbd,0x1f,0xfc,0xb6,0x23,0x1f,0xdc,0x53,0xbf,0x97,0xab,0x28,0x28,0xfe,0xb7,0xcf,0x2b -,0x1f,0x23,0xe8,0x9b,0x96,0xb2,0x2f,0x32,0xc8,0x26,0x1a,0xc4,0x9d,0x9f,0x37,0x3f,0x48,0xb3,0xa9,0xd6,0xbb,0x16,0x14,0x35,0x9f,0x9c,0xc6,0xab,0xb1,0x34,0x18,0xca -,0x9c,0xc7,0x2f,0x1a,0x23,0xad,0x8f,0x95,0x46,0x17,0x25,0xcc,0xd7,0x4c,0x2e,0x3d,0x5a,0xa6,0x9b,0x37,0x19,0xb4,0x96,0x49,0x17,0x1e,0x3e,0xae,0xb8,0xba,0xcc,0xaa -,0xc6,0x2b,0x63,0x1b,0x3a,0xaf,0xa9,0xc6,0x67,0xab,0xcb,0xab,0x69,0x4d,0x34,0x1e,0x1f,0x6a,0xad,0x9a,0x94,0x4e,0x1b,0x1a,0x54,0x97,0xa8,0x1c,0x17,0x1f,0xb1,0x94 -,0x91,0xae,0x1b,0x18,0x40,0xbe,0xfb,0x38,0xbd,0xa2,0x4f,0xbb,0xc7,0xac,0xb6,0x50,0x2c,0x0f,0x2a,0xa2,0xa2,0x39,0x51,0xaa,0x3c,0x46,0xcc,0xdc,0x2c,0x25,0xcb,0xad -,0xbd,0x32,0xa1,0x9a,0x5b,0x22,0x2c,0xbb,0xeb,0x2c,0x19,0x3a,0x9a,0x94,0xa9,0x24,0x18,0x27,0xa9,0xa0,0xd8,0x1e,0x28,0x6a,0xa2,0x97,0xab,0x41,0x1d,0x28,0x53,0x24 -,0xa7,0x9e,0x64,0x20,0x37,0x93,0x9c,0x6e,0x1c,0x29,0x2b,0x39,0xa4,0x9c,0x40,0x1f,0xab,0xbe,0x3e,0x2c,0x3d,0xbf,0x78,0xc7,0x3c,0x2e,0xb5,0x9a,0x9d,0x29,0x15,0x2f -,0xae,0xc8,0x2d,0x23,0x47,0xac,0x9f,0x92,0x3c,0x17,0x1c,0xc0,0x9f,0xce,0xd1,0x23,0x47,0xfb,0xa7,0x98,0xb1,0x22,0x11,0x24,0x52,0x99,0x98,0xbd,0x1d,0x21,0x9f,0x99 -,0xa7,0x20,0x1c,0x24,0x32,0xa9,0x9f,0xa8,0x2d,0x49,0xba,0x2a,0x19,0xb7,0x98,0x3f,0x1c,0x29,0xad,0xb0,0x9c,0x9b,0x30,0x1a,0x1c,0xa3,0xa2,0x4c,0x5e,0x3b,0x3d,0x3a -,0xaa,0xa5,0x41,0x2f,0x27,0x23,0x33,0xa1,0x9d,0xc3,0x1f,0x35,0xa0,0xa3,0xc6,0x16,0x1a,0x35,0xae,0x97,0x9b,0x42,0x13,0x35,0x9b,0xa4,0x26,0x29,0x2d,0x2d,0xc6,0xa8 -,0x97,0xc8,0x34,0x65,0x39,0x23,0x28,0x9e,0xb8,0x28,0xeb,0xbc,0xbc,0x4f,0xaa,0xaf,0x2a,0x21,0x43,0xb0,0x72,0xa5,0x9b,0xbe,0x11,0x1f,0x99,0x97,0x5b,0x11,0x1c,0x20 -,0xa7,0x91,0xa6,0x1d,0x1b,0xa0,0x99,0xae,0x18,0x16,0x23,0xb4,0x9c,0x97,0xa8,0x13,0x2d,0xb3,0xb7,0xce,0x3f,0x3f,0x1d,0x2f,0xa7,0x97,0x99,0x41,0x24,0x28,0x29,0x2a -,0xd8,0x9f,0xbd,0x31,0xdc,0xb5,0x28,0xbe,0x9d,0xb3,0x2d,0x18,0x38,0xbf,0x9f,0xa0,0xb4,0x1f,0x13,0xc4,0x9a,0xad,0x21,0x3c,0x26,0x39,0xa1,0x94,0xac,0x15,0x77,0xa5 -,0xa4,0x38,0x1d,0x28,0x29,0x3f,0xa8,0x94,0xa8,0x27,0x1b,0x24,0x3b,0xa0,0x9a,0xdc,0x19,0x1f,0xa8,0x96,0x9e,0x46,0x1d,0x1f,0x41,0x2a,0xbc,0xa7,0xd8,0x4c,0xdd,0x2d -,0x22,0xab,0xa3,0xbe,0x2d,0x3b,0x61,0xad,0xa4,0xa2,0xbf,0x16,0x24,0xc9,0x9f,0xbf,0x26,0x33,0x27,0x64,0x9d,0x95,0x71,0x19,0x2b,0xd2,0xb6,0xb4,0xe3,0x23,0x1d,0x38 -,0x96,0x8d,0xb5,0x26,0x1d,0x18,0x3c,0x9e,0x98,0xd7,0x1e,0x39,0xb5,0xae,0x4d,0x2c,0x39,0xcc,0x38,0x2b,0x5e,0xa0,0x9c,0xad,0x27,0x14,0xd8,0xa4,0xa2,0x34,0x14,0x29 -,0xa8,0x98,0xa9,0xce,0x2a,0x23,0x34,0xb9,0xa8,0xc8,0xd1,0x34,0x19,0xee,0x95,0x99,0x35,0x17,0x32,0xbe,0xa6,0x65,0x45,0x27,0x22,0xb0,0x9a,0x9e,0x41,0x36,0x20,0x1f -,0x38,0xab,0xb4,0xad,0xae,0xc3,0x43,0x34,0xa4,0xcc,0x6a,0x35,0x25,0x36,0xac,0x9f,0xb2,0x26,0x0f,0x26,0x9f,0x9d,0xb4,0x44,0x1e,0x2a,0xaa,0x9a,0xa3,0xd6,0x32,0x28 -,0x25,0x37,0xac,0xb5,0xb4,0x25,0x1b,0xb5,0x9d,0xa2,0x3b,0x18,0x29,0xa9,0xa8,0xc7,0x38,0x2e,0xc8,0xa2,0xa7,0xd6,0xbd,0xbf,0x21,0x15,0x20,0xab,0x9f,0xae,0x39,0x38 -,0x6b,0xaf,0xa7,0x34,0x2a,0x50,0xb8,0x49,0xb8,0x9f,0xb5,0x27,0x19,0x43,0xba,0xbe,0xac,0x46,0x26,0x36,0xbe,0x9b,0x9f,0xc5,0x2d,0x1d,0x22,0xb5,0xa2,0xe8,0x26,0x18 -,0x34,0x95,0x91,0xaf,0x30,0x1c,0x3f,0xad,0xf7,0x37,0x31,0x28,0x3f,0xba,0xc1,0xae,0xb1,0xbc,0x27,0x25,0x45,0xbd,0xa2,0x9e,0x36,0x22,0x4a,0xb0,0xa6,0x3a,0x29,0x2a -,0xba,0xd8,0xc4,0x9f,0xb0,0x24,0x17,0x2b,0xac,0x98,0xa9,0x27,0x14,0x38,0x9f,0x98,0xb6,0x2b,0xde,0xb2,0xd7,0x79,0x5a,0x29,0x33,0x23,0x3c,0xab,0xa8,0xac,0x3d,0x24 -,0x41,0xae,0xad,0xbf,0x3b,0x32,0x29,0xd1,0xa2,0xa4,0xb8,0x33,0x14,0x14,0xa4,0x9b,0xce,0x67,0x35,0x38,0xaf,0xad,0xd0,0x3e,0x34,0xc5,0xc6,0x3c,0xb9,0xa1,0xae,0x2f -,0x28,0x56,0x42,0x2f,0xc0,0xc6,0x28,0x26,0xbc,0xa6,0xbe,0x5b,0x5f,0xaf,0xad,0xa6,0xc2,0x31,0x25,0x17,0x26,0x99,0x90,0xbb,0x20,0x14,0x25,0x9f,0x8d,0xa8,0x1b,0x1e -,0x34,0xbb,0xa5,0xb7,0x34,0x36,0x1e,0x35,0xa9,0xac,0xc8,0xbe,0x3b,0x3c,0xa3,0xad,0x46,0x23,0x4c,0xc7,0xe2,0x2e,0x49,0xbe,0xde,0x3f,0x1e,0xbf,0xac,0xc3,0xac,0xbf -,0x39,0x57,0xc7,0xd2,0xd8,0x52,0x52,0x57,0x46,0xa8,0xa6,0x29,0x18,0x1e,0xca,0xb5,0xa8,0xb1,0xed,0xed,0xb5,0xa4,0xdd,0x39,0x2a,0x40,0x60,0xbc,0xaf,0x3b,0x36,0x4d -,0x5c,0x38,0xb0,0xb8,0xe1,0x7d,0x1f,0x22,0x5d,0x96,0x9b,0xb5,0x56,0x33,0x29,0x27,0xca,0x59,0x5d,0x3f,0x53,0x6e,0x58,0xa7,0xa1,0x2e,0x25,0xb2,0xb8,0x32,0x1f,0x1f -,0xbd,0x99,0x9d,0xa2,0x3a,0x30,0x42,0x36,0x3a,0xc8,0x5c,0x2f,0xea,0x67,0xb0,0xdc,0xe3,0x32,0x5f,0xb6,0x2f,0x28,0xcb,0x95,0xa1,0xc7,0x22,0x1d,0x39,0xbf,0x9e,0xb8 -,0x2a,0x25,0x49,0xb6,0xaf,0x9f,0xc5,0x2d,0x30,0xbf,0xb0,0x2e,0x29,0x24,0xbd,0x9a,0xa1,0x3e,0x22,0x1e,0x26,0xa5,0xab,0xc2,0x47,0x51,0xa7,0xbd,0xda,0x37,0x2c,0x35 -,0xbf,0xbe,0x1e,0x18,0x3c,0x8e,0x98,0xa8,0xbd,0x23,0x2a,0x31,0xcd,0x33,0xd4,0x3b,0xd7,0xaa,0xb6,0xaa,0x28,0x19,0x2d,0xa9,0xb6,0x3a,0x1e,0x2d,0x97,0x8e,0x9b,0xdc -,0x2d,0x24,0x3f,0xa2,0xad,0x28,0x15,0x1d,0xbe,0xbd,0xaf,0xb9,0xbb,0x36,0xc7,0xb3,0x2c,0x33,0xd6,0x99,0xa9,0x3f,0x1f,0x2d,0x2f,0x4e,0xb5,0x38,0xba,0xd9,0xdf,0x5f -,0x2c,0x36,0xd9,0xac,0xa1,0xa8,0x4d,0x21,0x19,0x3c,0x9a,0x9e,0x6e,0x21,0x27,0x2a,0xcf,0x9a,0x9b,0xc3,0x1c,0x4b,0xbc,0x42,0x32,0x2c,0x42,0xc4,0xab,0xac,0xbd,0x46 -,0xaf,0xa8,0x3b,0x29,0x2f,0xc9,0xb3,0x2f,0x30,0xc2,0xa2,0xbb,0x74,0x75,0x25,0x3a,0xba,0xae,0x68,0x53,0x4c,0x4c,0x2e,0xe1,0x9c,0xa8,0x28,0x1f,0x42,0x2d,0xda,0xa9 -,0xaa,0xd3,0x24,0x43,0xbb,0x2f,0x34,0x44,0x62,0xaf,0x9e,0xb7,0x27,0x21,0x2c,0xaa,0xab,0xb9,0x3d,0xb7,0xc9,0x2b,0xbd,0x9c,0x9b,0x32,0x1e,0x1a,0x1b,0x28,0xb7,0x9e -,0xac,0x3a,0xb2,0x9c,0x75,0x43,0x4e,0x45,0x38,0xc6,0x9f,0xc6,0x30,0xda,0xbe,0xd0,0x34,0x36,0x2c,0x1b,0x1b,0x38,0x9d,0x90,0x96,0xbf,0x46,0x2b,0xcf,0x9d,0x3b,0x13 -,0x16,0x3e,0xee,0x35,0xb4,0x98,0x97,0x2a,0x18,0x2b,0x30,0xf9,0xbd,0xa5,0xa2,0xeb,0xc8,0x9f,0x29,0x1e,0x3c,0x3b,0xda,0x6f,0x51,0x36,0xc4,0xb5,0x9d,0x99,0x4e,0x27 -,0x2a,0x27,0x1b,0x43,0x9a,0x9a,0xe1,0x37,0xdf,0x25,0x4f,0xa9,0xd0,0x36,0x3c,0x9c,0x9d,0x36,0x27,0xb8,0xab,0x2d,0x24,0x49,0x2e,0x1d,0xeb,0xa6,0x9c,0xaf,0xb5,0xd7 -,0x1b,0x28,0x30,0xc0,0xa9,0xc2,0x2b,0xdf,0xbe,0xd7,0xa2,0xb5,0x22,0x1c,0x3d,0x48,0x4a,0xde,0xa0,0x97,0x7d,0x1e,0x3f,0x3a,0x60,0xcb,0xf9,0xa7,0x66,0xbd,0xa3,0x2a -,0x1d,0xa7,0xa8,0x2e,0x26,0x2c,0x39,0xcb,0xad,0xb5,0xac,0x38,0x6a,0xc1,0x33,0x38,0xbd,0x9c,0x9f,0x39,0x1e,0x45,0x35,0xd9,0xb4,0x2e,0x22,0x39,0xab,0xa2,0xcc,0x27 -,0x46,0xa1,0xba,0x2c,0xd1,0xbf,0x5f,0x53,0xab,0x9e,0x5b,0x21,0x19,0x16,0x29,0xb1,0xa4,0xa6,0xcf,0x44,0xa8,0x9b,0xb6,0x3e,0x47,0x21,0x26,0xe4,0x35,0x38,0xb0,0x9a -,0xa4,0x26,0x18,0x2f,0x36,0xb8,0x9f,0xab,0xa7,0xca,0xb3,0xae,0x23,0x12,0x30,0xb3,0x35,0x29,0x3d,0xcd,0x99,0x98,0xac,0xad,0x38,0x24,0x1b,0x2e,0xb3,0xac,0xb3,0xa4 -,0x3e,0x19,0x39,0x30,0x2b,0x33,0xb7,0xb7,0xb6,0xae,0xad,0xaa,0xbe,0xb7,0xc4,0x21,0x0f,0x41,0xa6,0xb6,0xd8,0xaa,0x9f,0xcd,0xc9,0x2d,0x14,0x18,0xb4,0x99,0xad,0x4a -,0x35,0x3a,0x9e,0x9c,0xcb,0x26,0x13,0x1e,0xb3,0xa3,0xb8,0xa9,0xbc,0x50,0x4f,0x44,0x4e,0x22,0x20,0x26,0xc9,0x9a,0x94,0xae,0x3f,0xbc,0x2d,0x2b,0xea,0x2b,0x19,0x2d -,0xad,0x96,0xa2,0x49,0xbd,0xbf,0x44,0x1c,0x1c,0x43,0xb6,0x9e,0xa3,0x39,0x2c,0xaf,0xa3,0x3d,0x39,0x32,0x1f,0x3e,0xa5,0xad,0x2e,0x46,0xc3,0xae,0xb0,0x5e,0x32,0x20 -,0x25,0x53,0x99,0x9c,0xd1,0x30,0x21,0x3c,0xb5,0xa5,0xcc,0x26,0x25,0x2e,0xcd,0x95,0x93,0x3d,0x32,0xf0,0x27,0x1d,0x32,0xd0,0xc4,0xab,0xc2,0x3b,0x26,0xde,0x9f,0xcc -,0x40,0x2e,0xd9,0xa5,0xbc,0x48,0x2d,0x2d,0xe5,0x9e,0xab,0x2c,0x1b,0x19,0x4f,0x9d,0x95,0xc9,0x23,0x23,0x29,0xaf,0x96,0x9b,0x26,0x1e,0x2d,0xd9,0x9f,0xac,0x2c,0x20 -,0xb7,0xa0,0xa9,0x2b,0x1b,0x1d,0x42,0x9c,0x9f,0xb5,0x26,0x28,0xae,0xa2,0xb8,0x3d,0x38,0x2a,0x2f,0x3f,0x4b,0xb7,0xb2,0xaa,0xab,0x5b,0x1a,0x12,0xb6,0x8d,0x9e,0x25 -,0x1f,0x20,0x3d,0xa2,0x99,0xa0,0x36,0x27,0x28,0x3b,0xd7,0x3d,0x2f,0x5a,0x9e,0x99,0xa7,0x1e,0x14,0x2b,0xc3,0x9f,0xaa,0x37,0x18,0x37,0x9e,0x98,0x9a,0x37,0x1b,0x16 -,0x28,0x4a,0xc8,0x96,0x96,0xb8,0x3a,0x22,0x1a,0x39,0x9d,0x99,0x4a,0x11,0x13,0x3c,0x9a,0x8e,0x97,0x34,0x11,0x1b,0xb0,0xa0,0x30,0x22,0xba,0x9c,0x98,0x9f,0x40,0x0e -,0x0f,0xd5,0x8e,0x99,0x19,0x0d,0x18,0xa8,0x90,0x8a,0x96,0x17,0x0b,0x1b,0xba,0xbe,0x4a,0xbd,0xa8,0x98,0x96,0x3a,0x0f,0x13,0x38,0xa8,0xbc,0x33,0x43,0xae,0x9d,0x9c -,0xa5,0x35,0x15,0x1e,0xb8,0xae,0x22,0x17,0xae,0x8d,0x94,0xb8,0x1f,0x0c,0x0e,0xc9,0x88,0x98,0x0e,0x0f,0x66,0x91,0x8f,0x95,0xbc,0x0c,0x0d,0x48,0xa4,0xdb,0x2c,0xd5 -,0x9f,0x9c,0xa5,0x3e,0x16,0x13,0x4d,0x93,0x9d,0x1e,0x19,0x50,0xa3,0x99,0x9a,0xa9,0x1b,0x14,0x2b,0x4f,0x32,0x25,0x9b,0x86,0x98,0x1e,0x0e,0x0c,0x23,0x98,0x88,0xb4 -,0x0a,0x15,0xbf,0x98,0x98,0x9a,0x3f,0x0e,0x15,0xaa,0x91,0x40,0x10,0x2d,0x8f,0x90,0xb5,0x35,0x1f,0x1c,0x49,0x92,0xa3,0x0c,0x0a,0x3d,0x8f,0x8e,0xa1,0x9f,0x29,0x0f -,0x26,0xb7,0x75,0x17,0x4e,0x8e,0x9c,0x4b,0xbd,0x38,0x20,0xdf,0xa0,0x24,0x08,0x1b,0x99,0x8a,0x96,0xba,0x3a,0x1a,0x20,0xa0,0x9a,0x18,0x08,0x31,0x89,0x8e,0xbf,0x33 -,0x16,0x1d,0x58,0x98,0x9e,0x0e,0x09,0x3d,0x8c,0x8c,0x9d,0x9c,0x2c,0x0e,0x2a,0xb5,0x1f,0x0a,0x33,0x8a,0x8c,0xb6,0x64,0x48,0x23,0x1c,0x49,0xb8,0x17,0x10,0xc6,0x8b -,0x8f,0x9b,0x9e,0x2b,0x0f,0x39,0xb3,0x0e,0x07,0x33,0x86,0x88,0xa7,0x2a,0x14,0x27,0xc5,0x98,0x9c,0x0c,0x07,0xbc,0x89,0x95,0xa2,0x9f,0x1a,0x0d,0x25,0xa4,0xf3,0x0d -,0x19,0x8f,0x87,0x9b,0xd9,0x7c,0x25,0x0f,0x42,0x99,0x15,0x05,0x3c,0x89,0x88,0x8f,0x9d,0x30,0x0d,0x0d,0x2a,0x29,0x15,0x2d,0x8b,0x8a,0xa6,0xb0,0xba,0x37,0x10,0xb9 -,0xa0,0x09,0x04,0xb0,0x83,0x8f,0xaa,0xb5,0x31,0x1a,0x1f,0xe1,0x74,0x11,0x28,0x8b,0x8b,0x48,0x4e,0xac,0x19,0x0b,0x2d,0x99,0x33,0x0f,0x2c,0x8f,0x85,0x8d,0xc5,0x2a -,0x13,0x09,0x25,0xf3,0x0f,0x1d,0x88,0x86,0x9a,0xce,0x5f,0xda,0x16,0x18,0x2a,0x10,0x0b,0x59,0x87,0x86,0x9a,0xaa,0xa7,0x17,0x08,0x4c,0xbb,0x0c,0x17,0x91,0x8b,0xa0 -,0xb3,0xcd,0x1e,0x0f,0xf8,0xa3,0x26,0x13,0x4c,0x8a,0x88,0xa0,0xad,0xba,0x0b,0x04,0x22,0xda,0x1b,0x2a,0x9b,0x8d,0x8c,0x96,0xdf,0xd6,0x23,0x19,0x1e,0x16,0x07,0x1f -,0x85,0x84,0x9c,0xb9,0xa5,0x21,0x10,0x14,0x19,0x12,0x1d,0x9d,0x8d,0x8e,0x9f,0x9f,0xcd,0x0f,0x1a,0x9e,0x40,0x05,0x16,0x8c,0x88,0x9b,0xaf,0x45,0x0f,0x11,0xb7,0x3f -,0x17,0x24,0x98,0x86,0x8d,0x45,0x2b,0xb8,0x14,0x10,0x23,0x19,0x0f,0x3f,0x8c,0x8b,0x92,0x97,0xad,0x28,0x1f,0x14,0x1a,0x1b,0x0f,0x40,0x89,0x8d,0xbe,0xa5,0xb8,0x28 -,0xe1,0x39,0x0d,0x08,0x29,0x8c,0x85,0x93,0xc2,0xcc,0x25,0x0e,0x1b,0x56,0x1f,0x0f,0xa8,0x88,0x92,0xb6,0xc4,0x3b,0x17,0x2d,0xd2,0x18,0x11,0xbc,0x8c,0x8b,0xa1,0xbb -,0xa5,0xdb,0x12,0x07,0x12,0x18,0x2a,0x9e,0x90,0x97,0x9f,0x94,0xaf,0xe8,0xcd,0x16,0x11,0x18,0x16,0xa5,0x84,0x8e,0x49,0x3f,0x3f,0x28,0x1e,0x0f,0x0b,0x16,0x9f,0x8e -,0x94,0x9b,0x9b,0x99,0xac,0x20,0x0e,0x19,0x14,0x25,0x92,0x93,0xce,0xaf,0xa2,0x2e,0x13,0x13,0x3a,0x2c,0x2e,0xac,0x93,0x8f,0xa9,0xd1,0xb0,0x9e,0x2c,0x10,0x0f,0x16 -,0x2c,0xa0,0x8f,0xa2,0xaf,0xa5,0xb5,0x3d,0x1d,0x0d,0x12,0x3c,0xbc,0x9f,0x8e,0x9d,0xb4,0x9b,0xad,0x40,0x1e,0x12,0x0c,0x28,0x9b,0x99,0xb4,0xb2,0x9e,0xa6,0x3d,0x0d -,0x17,0x45,0x3c,0x2e,0xa9,0x9d,0x9d,0x95,0xac,0x4c,0x26,0x2b,0x2a,0x1e,0x28,0xae,0x92,0x98,0xba,0x27,0x2c,0x2d,0x10,0x0e,0x1d,0xb1,0x99,0x98,0x9e,0xa8,0x94,0x8c -,0x9a,0x2a,0x0b,0x0b,0x17,0x25,0x36,0x9c,0x8e,0x9d,0x39,0x13,0x31,0xd3,0x42,0x22,0x1c,0x2f,0x0e,0x0b,0x8d,0x81,0x8e,0x8f,0x8a,0x20,0x08,0x9c,0x9d,0x95,0x8f,0xa0 -,0x43,0x0f,0x06,0x00,0x00,0x18,0x9d,0x1f,0x0d,0x8d,0x80,0x81,0x89,0x99,0x8a,0x8d,0x2b,0x05,0x10,0x9e,0x19,0x00,0x03,0x2d,0x95,0x97,0x8c,0x2b,0x1a,0xd5,0xad,0x1c -,0x1c,0x8b,0x80,0x90,0x10,0x01,0x0c,0xb4,0x91,0x1d,0x0c,0x8b,0x82,0xb9,0x0f,0x32,0x8c,0x9e,0x15,0x01,0x09,0x9d,0xaa,0x09,0x0e,0x8a,0x80,0xa2,0xed,0xac,0x9b,0xb7 -,0x24,0x1e,0x14,0x97,0x85,0x91,0x1f,0x0e,0x0f,0x02,0x0a,0x14,0x19,0x99,0x8e,0x95,0xa9,0x9f,0x86,0x87,0x8e,0xa0,0x72,0x19,0x0c,0x06,0x05,0x5c,0x8d,0x32,0x0f,0x1b -,0xba,0xbf,0xcb,0xc3,0xda,0x98,0x8a,0x8a,0x98,0x9b,0xae,0x0d,0x06,0x06,0x08,0xc8,0x8d,0x8c,0xaa,0xaa,0x92,0x98,0x2c,0x0c,0x38,0xad,0x12,0x04,0x00,0x3c,0x80,0x85 -,0xae,0x97,0x82,0x97,0x0f,0x04,0x1f,0x8e,0x95,0x34,0x0f,0x14,0xb9,0x21,0x07,0x14,0xab,0xb5,0xa9,0xad,0xab,0x89,0x84,0x92,0x31,0x17,0x3d,0xb2,0x1d,0x0b,0x08,0x20 -,0x9f,0x99,0xda,0x95,0x8a,0xc8,0x1c,0x09,0x13,0xba,0xae,0xab,0x8f,0x8e,0xa0,0x2b,0x09,0x1a,0x9b,0x3b,0x1a,0xd5,0xab,0xa6,0x9e,0xbb,0x78,0x98,0x9e,0x44,0x18,0x0d -,0x14,0x17,0x17,0x68,0xce,0x9c,0x83,0x87,0xb2,0x15,0x19,0xb0,0x9a,0xb5,0xa9,0x96,0xa6,0x0d,0x01,0x01,0x48,0x91,0x22,0x1e,0xb4,0x8d,0x86,0x93,0xdc,0xa0,0x8e,0x91 -,0x22,0x02,0x08,0x21,0x2f,0xe4,0xa4,0x74,0x9c,0x94,0x2f,0x12,0x3e,0xa0,0xbc,0x3c,0x7a,0x91,0x87,0x94,0x1c,0x0e,0x24,0x42,0x15,0x1f,0x9a,0x94,0xac,0x1c,0x0f,0x1e -,0xaa,0x9d,0xa1,0x31,0x11,0x0d,0x06,0x0f,0x8f,0x85,0x8a,0x91,0xc4,0x27,0x26,0x5c,0xdf,0x9b,0x8d,0x91,0xa6,0x1c,0x14,0x13,0x19,0x23,0x0e,0x08,0x2f,0x96,0x9a,0xa7 -,0x96,0x8d,0x8d,0x9e,0x1e,0x1e,0x2e,0x2d,0x0c,0x07,0x21,0x9d,0x89,0x8c,0x9e,0xb2,0xb3,0x22,0x0d,0x15,0x58,0x8f,0x8a,0xbf,0x0f,0x13,0x25,0xf6,0x73,0x38,0xba,0x91 -,0x99,0x1c,0x1f,0xaf,0x9c,0xba,0x1d,0x18,0x17,0x1d,0x0e,0x0d,0xee,0x8e,0x86,0x8b,0x8f,0x95,0x9c,0xaf,0x1f,0x17,0x5d,0x9c,0xa0,0xd8,0x23,0x10,0x08,0x0a,0x13,0x39 -,0xad,0xa7,0x5d,0x20,0x48,0x9b,0x89,0x8b,0x93,0x97,0xb1,0x22,0x0f,0x12,0x1e,0xe4,0xf3,0x1e,0x2a,0x9b,0x91,0xa8,0x35,0x29,0x58,0xa0,0xa3,0x2e,0x44,0xbb,0x22,0x0d -,0x0c,0x1d,0xa0,0x8d,0x94,0xb9,0x34,0x3e,0xd8,0xcf,0xb2,0xa3,0x9b,0xcd,0x0b,0x03,0x0f,0xac,0x90,0x91,0x92,0x8e,0x92,0x6d,0x18,0x22,0xa6,0x94,0xb7,0x15,0x0e,0x13 -,0x27,0x1f,0x1a,0x3f,0xaf,0xbf,0xd0,0xb3,0xa1,0x9b,0x9c,0xb4,0xc5,0xa4,0xa0,0xae,0xc7,0x48,0x20,0x1a,0x18,0x17,0x4a,0x91,0x95,0x3e,0x15,0x11,0x20,0xb7,0xa2,0x9d -,0x98,0xa8,0x39,0x18,0x15,0x36,0x9f,0x99,0xa8,0xb2,0xad,0xbb,0x42,0x31,0xbc,0x9c,0xa4,0x2b,0x0e,0x0e,0x1b,0x1f,0x1e,0x26,0xc9,0x91,0x87,0x92,0xb5,0xb4,0x9f,0xa0 -,0xee,0x29,0x2c,0x31,0x19,0x09,0x08,0x18,0xbb,0xb3,0xbc,0xa5,0x98,0x8e,0x98,0x39,0x66,0x96,0x94,0xa8,0x2b,0x17,0x1e,0x1f,0x19,0x20,0x43,0xb6,0xac,0xb4,0xb2,0xaa -,0xaf,0x3f,0x1c,0x1e,0xb2,0x9a,0xa4,0xeb,0x26,0x25,0x43,0x49,0xc4,0x9b,0x90,0x9c,0x2e,0x10,0x11,0x37,0x9e,0x96,0x9e,0x37,0x17,0x0d,0x0c,0x1f,0xa9,0x9a,0x9c,0xac -,0xba,0x9f,0x99,0x9f,0xa3,0xa6,0xae,0xf2,0x1a,0x0c,0x11,0x29,0x3f,0x28,0x18,0x1c,0xac,0x91,0x93,0x9e,0xae,0xad,0xb1,0xbc,0xab,0x9f,0x9d,0x4e,0x0c,0x07,0x11,0x31 -,0xaa,0x9d,0x9e,0x9b,0x9e,0x2d,0x18,0x2b,0xa9,0x9b,0xbe,0x1b,0x17,0x24,0x47,0xc4,0xa8,0x94,0x8e,0x97,0xc5,0x23,0x22,0x3a,0x49,0x2c,0x23,0x2e,0x30,0x1f,0x1a,0x1f -,0x39,0xd2,0xbe,0xa7,0x95,0x8c,0x8e,0xa0,0x7b,0x39,0x72,0xb9,0x42,0x26,0x22,0x18,0x0f,0x10,0x1f,0x4e,0xa6,0x9d,0xb0,0xb5,0xac,0xae,0xa7,0x9f,0x9e,0x97,0x9b,0xc6 -,0x22,0x17,0x14,0x16,0x15,0x1b,0x66,0x9b,0x98,0xa9,0xbf,0xd3,0xb5,0xb0,0xfd,0x32,0x3d,0x59,0x2a,0x17,0x16,0x45,0x97,0x8e,0x96,0xa0,0xb9,0x40,0x2a,0x23,0x48,0xac -,0xb3,0x27,0x0f,0x0d,0x1a,0x2f,0x36,0xdb,0x9b,0x8f,0x92,0x9a,0x9e,0x9b,0x99,0xab,0x21,0x17,0x1c,0x1d,0x1b,0x18,0x17,0x25,0xce,0xb8,0xaa,0x9d,0x9e,0xac,0x4a,0x37 -,0xb4,0x9a,0x9b,0xa0,0xa0,0xbb,0x20,0x14,0x0f,0x12,0x2f,0xad,0xac,0x53,0x30,0x31,0xc8,0xaf,0xb6,0xad,0xae,0xda,0x2e,0x1f,0x28,0xb5,0x9d,0x9b,0x9e,0xa6,0xb2,0x60 -,0x2c,0x27,0x42,0xb7,0xf9,0x33,0x2a,0x24,0x26,0x1e,0x17,0x1d,0x51,0xa6,0x98,0x95,0x94,0x8c,0x8b,0x99,0x42,0x21,0x1e,0x22,0x18,0x0c,0x0b,0x12,0x1e,0x4f,0x9d,0x94 -,0x96,0xa3,0xcc,0x3f,0xc3,0xa6,0xa8,0xaa,0xad,0xb1,0x43,0x1c,0x13,0x19,0x31,0x66,0xe8,0x4e,0xd1,0xa3,0x9e,0xad,0xcc,0xe2,0x4f,0x3b,0x33,0x26,0x23,0x2d,0xcd,0xa1 -,0x95,0x94,0x9c,0xaf,0x37,0x32,0x35,0x26,0x1f,0x1f,0x2f,0xb7,0xaa,0x36,0x16,0x15,0x29,0xbd,0xa6,0xa2,0x9e,0x96,0x95,0x98,0x9a,0x9f,0xaf,0x3d,0x1a,0x0d,0x0e,0x12 -,0x13,0x1a,0x2d,0xb7,0x9b,0x9b,0xb2,0xbd,0xa4,0x9d,0xa5,0xb8,0xa9,0x9a,0x9b,0xd5,0x1d,0x17,0x16,0x1b,0x21,0x27,0x46,0xaf,0xa9,0xb0,0xb1,0xae,0xaa,0xc7,0x3c,0x2f -,0x28,0x20,0x1f,0x2c,0xae,0x8e,0x89,0x95,0xd2,0x2f,0x31,0x2d,0x25,0x28,0x2d,0x2a,0x27,0x27,0x30,0x5f,0x49,0x38,0x37,0x3e,0xb0,0x9e,0x98,0x94,0x91,0x99,0xa2,0xdb -,0x1d,0x1c,0x1f,0x19,0x0f,0x0d,0x17,0x54,0xa0,0x9e,0x9e,0x9f,0xa3,0xa8,0xde,0x4a,0xb5,0x9b,0x99,0xa7,0x51,0x22,0x18,0x16,0x1d,0x2a,0x49,0x46,0x2d,0x2d,0xb6,0x95 -,0x8f,0x9b,0x38,0x22,0x28,0x27,0x23,0x1f,0x27,0xbb,0x9b,0x96,0x95,0x9d,0xb8,0xc6,0x37,0x21,0x22,0x22,0x1f,0x25,0x2e,0x2f,0x38,0x23,0x1f,0x46,0xa4,0x9a,0x9e,0x9c -,0x96,0x8f,0x91,0x9d,0xce,0x29,0x1f,0x18,0x12,0x0c,0x0b,0x12,0x37,0xa4,0x99,0x9c,0xb1,0xb8,0xa8,0xa5,0xa1,0xab,0xcf,0xd2,0xa4,0x9a,0xa0,0x2d,0x12,0x17,0x23,0x34 -,0x27,0x1b,0x1c,0xfd,0x9f,0x9b,0x99,0xa3,0xb3,0x60,0x2e,0x20,0x1e,0x2c,0xdf,0xa5,0x9b,0x99,0xa0,0xc6,0x32,0x34,0xcf,0x48,0x20,0x1d,0x25,0x3c,0x6a,0x30,0x1b,0x24 -,0xc2,0xab,0xb7,0x60,0xcb,0x9a,0x8c,0x8c,0x96,0xb0,0x3f,0x2a,0x1e,0x15,0x0c,0x09,0x0c,0x1e,0xac,0x93,0x94,0xac,0xbc,0xa7,0x98,0x9b,0xc8,0x2e,0x4b,0xab,0xa7,0xae -,0x41,0x20,0x1e,0x2a,0x36,0x2a,0x25,0x2d,0x46,0xc7,0xac,0xa6,0xa7,0xae,0xc1,0x62,0x2d,0x18,0x18,0xbe,0x8f,0x8b,0x96,0xf4,0x24,0x3d,0xad,0xb3,0x22,0x11,0x12,0x25 -,0x47,0x44,0x3c,0x39,0xdc,0xb2,0xa8,0xba,0x47,0x4f,0xaa,0x95,0x8d,0x8d,0x9e,0x31,0x20,0x2c,0x29,0x14,0x08,0x08,0x17,0xda,0xa6,0xa7,0xa7,0xa0,0x98,0x95,0x9f,0x63 -,0x38,0xb6,0xa5,0xb0,0x5c,0x2c,0x21,0x25,0x36,0x49,0x28,0x18,0x1d,0xbb,0x9c,0x9f,0xbb,0x4a,0xb5,0x9b,0x9e,0x2a,0x0e,0x0f,0x39,0x9a,0x93,0x9f,0xbe,0xc0,0xac,0xa1 -,0xa2,0x52,0x15,0x0f,0x18,0x2f,0xcb,0x6d,0x2d,0x2f,0xb4,0x9c,0x9f,0x3d,0x27,0xb7,0x97,0x96,0x9f,0xae,0xb3,0xb1,0xda,0x26,0x10,0x0d,0x16,0x2f,0x35,0x23,0x2b,0xc0 -,0x99,0x8f,0x91,0xa3,0x39,0x2d,0xc0,0x9c,0xa6,0x3b,0x24,0x29,0x44,0xc1,0x46,0x19,0x12,0x28,0xb3,0xaa,0xca,0x37,0xdc,0x9d,0x94,0x9d,0x3b,0x15,0x12,0x26,0xb1,0xa1 -,0xaa,0xbd,0xb4,0xa6,0x9d,0xa7,0xc9,0x33,0x27,0x1f,0x1a,0x15,0x18,0x25,0x41,0xda,0x37,0x35,0xb5,0x92,0x8c,0x8d,0x9f,0x6e,0x2a,0xd7,0xb8,0xae,0xe7,0x36,0x22,0x1e -,0x28,0xa2,0xa9,0x35,0xd0,0x37,0x94,0x2d,0x13,0x0c,0x00,0x0b,0x30,0xce,0x94,0x82,0x80,0xd2,0x41,0x13,0x1e,0x89,0x84,0x80,0xa7,0x8b,0x80,0x3a,0x05,0xa8,0x97,0x18 -,0x03,0x01,0x00,0x04,0x0c,0x14,0x0c,0xb8,0x80,0x8b,0xb6,0x0f,0x0d,0x16,0x1c,0x04,0x0a,0x1e,0x99,0x85,0x83,0x94,0xa0,0x8f,0x87,0x80,0x8b,0x89,0x80,0x82,0x88,0x87 -,0x98,0x16,0x07,0x0a,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x0c,0xae,0x87,0x87,0x81,0x88,0x9f,0x94,0x9d,0xc0,0x91,0x9a,0x95,0x85,0x88,0x8a,0x8c,0xb6,0x8e,0x81,0x96 -,0xa5,0x3e,0x2e,0x5a,0xbc,0x41,0x8f,0x94,0xa4,0x9e,0x2c,0x09,0x00,0x01,0x00,0x00,0x02,0x08,0x0e,0x1b,0x43,0xa4,0xaf,0x99,0x95,0x8e,0x85,0x88,0x87,0x85,0x85,0x83 -,0x81,0x80,0x81,0x84,0x8a,0xa0,0x1f,0x09,0x01,0x06,0x07,0x0b,0x2c,0x70,0x55,0xbe,0xac,0x10,0x05,0x0a,0x04,0x04,0x05,0x01,0x01,0x02,0x0b,0x1a,0x1f,0xa3,0x96,0x8d -,0x84,0x81,0x85,0x86,0x82,0x81,0x80,0x80,0x81,0x82,0x86,0x89,0x9c,0x1e,0x1a,0x0c,0x0c,0x10,0x08,0x03,0x04,0x03,0x01,0x07,0x0f,0x1d,0x0d,0x07,0x09,0x0a,0x04,0x03 -,0x0e,0x3d,0x9e,0x8f,0x8c,0x8e,0x8d,0x8a,0x82,0x84,0x84,0x82,0x80,0x82,0x82,0x85,0x8a,0x8c,0x8a,0x91,0xa7,0x67,0x2e,0x35,0x0e,0x05,0x00,0x00,0x02,0x03,0x02,0x05 -,0x0b,0x06,0x01,0x01,0x05,0x15,0xa9,0xa6,0xeb,0x93,0x8a,0xb6,0x2b,0xaa,0x8a,0x81,0x82,0x85,0x87,0x86,0x86,0x8b,0x89,0x84,0x86,0x93,0x8d,0x88,0x7d,0x1f,0x24,0x2f -,0x3c,0x33,0x19,0x06,0x05,0x06,0x02,0x00,0x00,0x01,0x06,0x0a,0x0a,0x0d,0x1f,0x2b,0x47,0xa1,0xae,0x39,0xa1,0x8a,0x87,0x8a,0x89,0x86,0x86,0x88,0x86,0x82,0x80,0x82 -,0x89,0x8c,0x93,0xa9,0x40,0x2d,0x49,0xa9,0xa1,0x2d,0x0d,0x0d,0x0c,0x06,0x02,0x00,0x00,0x00,0x01,0x01,0x03,0x06,0x08,0x1b,0xb9,0x9d,0x92,0x93,0x90,0x8b,0x89,0x8b -,0x8c,0x89,0x89,0x88,0x8a,0x87,0x84,0x85,0x85,0x84,0x83,0x84,0x8b,0x9c,0xb9,0x4d,0x25,0x13,0x0e,0x08,0x04,0x01,0x02,0x03,0x02,0x02,0x04,0x05,0x04,0x02,0x05,0x0b -,0x15,0x53,0x9e,0x94,0x8d,0x88,0x8b,0x8c,0x8c,0x8d,0x8a,0x8a,0x8c,0x8a,0x87,0x87,0x85,0x84,0x87,0x87,0x89,0x88,0x8f,0xaa,0x2f,0x17,0x14,0x10,0x0b,0x07,0x07,0x0a -,0x09,0x04,0x01,0x01,0x03,0x03,0x03,0x04,0x09,0x1b,0x2c,0x38,0xa8,0x94,0x8d,0x8a,0x87,0x87,0x8a,0x8c,0x8e,0x95,0x92,0x90,0x98,0x95,0x8d,0x88,0x86,0x8c,0x8e,0x8b -,0x8e,0x9a,0xbe,0x32,0x1e,0x22,0x1e,0x16,0x11,0x09,0x0c,0x0b,0x0a,0x0a,0x06,0x06,0x07,0x08,0x09,0x0f,0x1d,0x1f,0x1d,0x26,0x3b,0x56,0xe9,0xae,0x96,0x8b,0x88,0x88 -,0x8b,0x8f,0x8c,0x89,0x90,0x93,0x89,0x86,0x86,0x88,0x8f,0xaf,0x2f,0x1e,0x16,0x25,0xbd,0xa1,0x2f,0x11,0x0f,0x16,0x18,0x13,0x12,0x12,0x18,0x0e,0x09,0x04,0x03,0x0a -,0x16,0x1a,0x21,0x22,0x2b,0x26,0x27,0x28,0xcc,0x98,0x94,0x95,0x90,0x8a,0x8b,0x89,0x85,0x85,0x83,0x83,0x86,0x8d,0x9a,0x9d,0xad,0xbc,0xcb,0x44,0x32,0x73,0x28,0x0f -,0x0e,0x16,0x2e,0x37,0x2f,0x26,0x24,0x1a,0x0e,0x07,0x04,0x05,0x05,0x03,0x07,0x09,0x0d,0x19,0x1a,0x1d,0x49,0xb6,0xab,0xa1,0x91,0x87,0x87,0x87,0x85,0x81,0x81,0x81 -,0x82,0x86,0x86,0x87,0x8b,0x98,0x5d,0x1f,0x16,0x15,0x14,0x0d,0x12,0x24,0x2f,0x26,0x1f,0x1a,0x13,0x0c,0x06,0x07,0x0b,0x0c,0x08,0x05,0x09,0x10,0x15,0x1b,0x2a,0x39 -,0x42,0x2a,0x2a,0xcd,0x9e,0x91,0x8c,0x8d,0x8c,0x87,0x86,0x88,0x8f,0x8f,0x85,0x83,0x85,0x88,0x87,0x85,0x88,0x95,0xc3,0x5b,0x2c,0x2d,0x22,0x11,0x0c,0x06,0x05,0x05 -,0x04,0x06,0x08,0x05,0x04,0x06,0x03,0x02,0x05,0x0b,0x15,0x23,0xc6,0xad,0xaa,0x9d,0x8e,0x8b,0x91,0x90,0x8f,0x8c,0x89,0x8c,0x8c,0x8b,0x88,0x85,0x87,0x8a,0x86,0x84 -,0x87,0x8c,0x93,0x96,0x91,0x99,0xaf,0x32,0x1e,0x0f,0x05,0x01,0x01,0x01,0x01,0x01,0x02,0x04,0x05,0x08,0x0a,0x09,0x0b,0x16,0x1a,0x1a,0x29,0x53,0xa5,0x9a,0x99,0x91 -,0x87,0x83,0x83,0x83,0x83,0x86,0x8c,0x97,0x9e,0x9b,0x8b,0x85,0x86,0x86,0x84,0x86,0x8c,0x8f,0x9a,0xa8,0xb9,0x39,0x12,0x0b,0x08,0x03,0x01,0x01,0x02,0x05,0x06,0x05 -,0x03,0x02,0x07,0x0b,0x09,0x0e,0x18,0x1e,0x29,0x22,0x24,0x52,0xa0,0x94,0x91,0x8c,0x89,0x88,0x88,0x8b,0x88,0x83,0x81,0x82,0x83,0x83,0x81,0x82,0x85,0x8c,0x93,0x98 -,0x9d,0xaa,0x2e,0x11,0x10,0x16,0x0a,0x07,0x09,0x0d,0x0a,0x03,0x02,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x08,0x0b,0x15,0xd2,0x92,0x92,0x93,0x8c,0x8b,0x91,0x8b,0x86 -,0x83,0x82,0x83,0x84,0x81,0x80,0x80,0x81,0x84,0x85,0x89,0x8d,0x8f,0x97,0x9f,0xae,0x23,0x0d,0x07,0x07,0x09,0x0b,0x08,0x06,0x05,0x03,0x02,0x01,0x01,0x02,0x02,0x00 -,0x01,0x02,0x06,0x0f,0x1e,0x2c,0xc2,0xa7,0x97,0x94,0x91,0x88,0x85,0x85,0x83,0x82,0x81,0x80,0x80,0x81,0x81,0x81,0x81,0x82,0x87,0x89,0x8c,0xa3,0x79,0x39,0x1f,0x1a -,0x16,0x0a,0x07,0x05,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x01,0x06,0x0f,0x1c,0x17,0x0f,0x0e,0x11,0x1f,0x2f,0x2b,0xdf,0xac,0x9c,0x97,0x8c,0x86,0x84,0x83,0x83,0x82 -,0x82,0x82,0x83,0x86,0x87,0x87,0x8d,0x92,0x8b,0x85,0x86,0x89,0x91,0xac,0x3b,0x22,0x12,0x06,0x03,0x02,0x02,0x02,0x02,0x04,0x09,0x0d,0x0a,0x06,0x05,0x05,0x04,0x05 -,0x05,0x06,0x07,0x0a,0x15,0x3d,0x94,0x85,0x83,0x86,0x8b,0x8b,0x8a,0x89,0x8a,0x8a,0x8a,0x8f,0x8a,0x83,0x81,0x80,0x80,0x80,0x81,0x85,0x8c,0x9c,0xa4,0xae,0xde,0x1c -,0x07,0x03,0x01,0x07,0x0b,0x07,0x03,0x01,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x0a,0x13,0x14,0x25,0x2f,0x3d,0xdc,0xac,0x9b,0x98,0x8d,0x87,0x87,0x8b,0x87,0x82,0x81 -,0x80,0x80,0x80,0x81,0x83,0x82,0x82,0x84,0x88,0x93,0xad,0x3d,0x27,0x1c,0x1c,0x1c,0x1d,0x10,0x07,0x04,0x03,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x03,0x0b,0x18 -,0x14,0x11,0x19,0x34,0xbb,0xa5,0x99,0x94,0x8f,0x8c,0x87,0x83,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x81,0x83,0x88,0x8e,0x8d,0x8a,0x8c,0x8a,0x8e,0x57,0x0c,0x04,0x02 -,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x0f,0x17,0x0e,0x09,0x0a,0x11,0x22,0x56,0x3a,0x2e,0x40,0xaa,0x8e,0x84,0x82,0x82,0x82,0x85,0x88,0x87,0x86,0x87,0x87 -,0x8a,0x8c,0x91,0x9c,0x97,0x8b,0x86,0x8a,0x93,0xa0,0xb0,0x59,0xc1,0xb7,0x1f,0x0f,0x09,0x05,0x04,0x05,0x0a,0x0a,0x07,0x06,0x05,0x0b,0x11,0x17,0x0e,0x0a,0x08,0x05 -,0x06,0x0b,0x1c,0x3b,0xbb,0xb0,0xaa,0x9b,0x8f,0x8b,0x92,0xa2,0xbd,0xbc,0xa1,0x8f,0x85,0x84,0x83,0x83,0x85,0x87,0x86,0x82,0x85,0x8b,0x94,0x9f,0xa8,0xb2,0xa9,0x97 -,0x92,0x97,0xc7,0x10,0x06,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x02,0x07,0x0c,0x0a,0x07,0x09,0x0f,0x25,0xd0,0x62,0xc9,0xa1,0x9c,0x8f,0x87,0x84,0x81,0x80,0x81 -,0x83,0x84,0x83,0x81,0x82,0x86,0x8c,0x97,0x99,0x90,0x8b,0x8a,0x92,0x9e,0x62,0x39,0x2f,0x2b,0x2f,0x0f,0x08,0x04,0x01,0x01,0x02,0x06,0x07,0x03,0x01,0x00,0x01,0x06 -,0x0c,0x0a,0x08,0x09,0x06,0x0a,0x1f,0xa1,0x8c,0x86,0x86,0x89,0x88,0x83,0x81,0x80,0x81,0x81,0x88,0x8f,0x8e,0x8b,0x86,0x81,0x81,0x83,0x89,0x8a,0x8b,0x8f,0xb5,0x1e -,0x0e,0x03,0x03,0x03,0x06,0x0c,0x09,0x05,0x05,0x04,0x03,0x05,0x04,0x01,0x00,0x02,0x01,0x05,0x0f,0x23,0xce,0xb7,0xb4,0xa5,0x8d,0x87,0x84,0x82,0x86,0x85,0x85,0x8a -,0x8a,0x83,0x81,0x83,0x87,0x91,0x95,0x8c,0x95,0xaf,0x63,0x77,0x20,0x26,0x5d,0x36,0xa0,0xa9,0x3c,0x12,0x03,0x0c,0x05,0x00,0x00,0x00,0x00,0x03,0x1c,0x91,0x86,0x80 -,0x9a,0xa3,0x2e,0x16,0x85,0x83,0x80,0x9a,0x8c,0x80,0x8b,0x1c,0xc5,0x90,0x0f,0x01,0x01,0x01,0x06,0x0f,0x1d,0x13,0x9d,0x80,0x8b,0xa5,0x04,0x05,0x0c,0x09,0x00,0x0a -,0x2d,0xa3,0x8a,0x87,0x98,0xb2,0x8a,0x87,0x80,0xa7,0x4e,0x82,0x80,0x86,0x86,0x86,0x3d,0x08,0x15,0x0f,0x03,0x00,0x00,0x00,0x00,0x05,0x06,0x1a,0x96,0x87,0x82,0x80 -,0x8c,0x8d,0x85,0x8c,0x8c,0x6b,0x0f,0x19,0xaf,0x89,0x8b,0x1f,0x37,0x89,0x8e,0x3e,0x1f,0x1b,0x16,0x48,0x31,0x96,0x9c,0x33,0x9d,0x9f,0x13,0x00,0x00,0x00,0x00,0x01 -,0x0b,0x2d,0xa3,0x8f,0x84,0x81,0x80,0x80,0x85,0x87,0x9d,0x9e,0x87,0x81,0x83,0x82,0x82,0x88,0x84,0x8a,0xa6,0x1b,0x03,0x02,0x00,0x01,0x00,0x0d,0xaa,0x3b,0x12,0x23 -,0x23,0x08,0x02,0x04,0x01,0x02,0x00,0x05,0x0d,0x31,0x91,0xac,0x9a,0x9f,0x98,0x80,0x81,0x81,0x82,0x80,0x82,0x81,0x80,0x80,0x82,0x83,0x84,0x8a,0x1c,0x03,0x01,0x08 -,0x1a,0x04,0x00,0x00,0x00,0x05,0x1b,0x18,0x0c,0x0e,0x0e,0x07,0x01,0x04,0x08,0x0f,0x09,0x17,0xa9,0x97,0x8c,0x88,0x89,0x83,0x83,0x83,0x81,0x81,0x80,0x80,0x80,0x80 -,0x81,0x83,0x85,0xb2,0x13,0x0d,0x07,0x01,0x00,0x03,0x03,0x01,0x02,0x03,0x00,0x01,0x01,0x14,0x20,0x03,0x06,0x0a,0x15,0xdf,0xa3,0x9e,0x12,0x12,0x98,0x88,0x8b,0x89 -,0x85,0x81,0x85,0x86,0x83,0x81,0x80,0x80,0x81,0x86,0x88,0x88,0x8b,0xa1,0x29,0x0c,0x09,0x0b,0x00,0x05,0x06,0x01,0x00,0x01,0x01,0x01,0x01,0x06,0x08,0x0c,0x21,0x3c -,0xba,0x3c,0xe1,0x8f,0x83,0x8a,0x99,0x9b,0x9e,0x8a,0x84,0x84,0x86,0x84,0x81,0x83,0x86,0x89,0x89,0x92,0x35,0x0e,0xfd,0x95,0xa9,0x2e,0x5b,0x1f,0x08,0x0a,0x08,0x00 -,0x00,0x06,0x04,0x00,0x04,0x26,0xde,0x1a,0x22,0x75,0x1a,0x1b,0xad,0x97,0xa6,0xb5,0x9c,0x8e,0x83,0x87,0x87,0x86,0x85,0x82,0x80,0x83,0x85,0x8f,0xa0,0x97,0x4f,0x0a -,0x05,0x07,0x09,0x0a,0x10,0x0d,0x05,0x0c,0x1a,0x0f,0x0a,0x0e,0x07,0x02,0x00,0x0b,0x37,0xaa,0x9f,0x8d,0x89,0xa1,0x9e,0x8c,0x98,0xa4,0x8b,0x84,0x84,0x8c,0x84,0x80 -,0x80,0x89,0x97,0x9c,0xcc,0xa0,0xa9,0x23,0x08,0x04,0x13,0x14,0x04,0x02,0x0a,0x07,0x00,0x02,0x0d,0x09,0x04,0x0e,0x10,0x0c,0x18,0xdc,0xc3,0x4f,0xa6,0x8a,0x86,0x89 -,0x8b,0x87,0x8c,0x94,0x8c,0x86,0x8a,0x95,0x8c,0x82,0x83,0x8b,0x8a,0x87,0x8d,0x22,0x18,0x1b,0x04,0x07,0x18,0x0f,0x04,0x07,0x24,0x1f,0x05,0x03,0x05,0x06,0x09,0x15 -,0x28,0x0f,0x0d,0x2e,0x9d,0xaf,0x1a,0x34,0xbc,0x2e,0xad,0x8c,0x82,0x83,0x89,0x85,0x90,0x9a,0x86,0x82,0xa8,0x38,0xa6,0x8d,0x8a,0xaf,0x9a,0xa1,0x3a,0x20,0x2f,0x2a -,0x0d,0x22,0x3d,0x34,0x17,0x11,0x24,0x13,0x09,0x07,0x0a,0x0f,0x0a,0x0b,0x23,0x0b,0x07,0x2e,0xa6,0x40,0x1e,0x29,0x2e,0x1d,0xbb,0x87,0x89,0x96,0x8d,0x84,0x85,0x81 -,0x80,0x81,0x90,0x9a,0x8b,0x85,0x88,0x91,0xa1,0x1a,0x0f,0x19,0xb7,0x16,0x00,0x07,0x0e,0x14,0x0d,0x18,0x1b,0x06,0x01,0x09,0x0f,0x06,0x0b,0x1c,0x19,0x08,0x09,0xc7 -,0x97,0xad,0x43,0x41,0x42,0x9e,0x87,0x85,0x85,0x86,0x86,0x81,0x83,0x85,0x84,0x89,0x9d,0x8e,0x82,0x80,0x8b,0xb2,0x6c,0x1b,0x0b,0x12,0x1d,0x06,0x00,0x02,0x0f,0x14 -,0x05,0x0d,0x0f,0x04,0x03,0x15,0x1e,0x07,0x06,0x16,0x21,0x0f,0x37,0x91,0xaa,0x41,0xbb,0x93,0x8f,0x8b,0x81,0x88,0x9d,0x9f,0x88,0x80,0x8e,0x90,0x83,0x82,0x86,0x86 -,0x81,0x84,0x9b,0xc7,0xcd,0x0f,0x07,0x0c,0x0e,0x04,0x00,0x03,0x0e,0x0e,0x03,0x05,0x01,0x01,0x07,0x1e,0x11,0x02,0x06,0x1b,0xa7,0xcc,0xa8,0x9d,0x55,0xad,0x89,0x81 -,0x89,0x8a,0x84,0x85,0x86,0x85,0x81,0x81,0x9a,0xb9,0x8d,0x8c,0x9a,0x96,0x8b,0x9f,0x3b,0xae,0xac,0x2c,0x11,0x14,0x0d,0x02,0x02,0x0e,0x19,0x06,0x01,0x05,0x03,0x05 -,0x17,0x25,0x09,0x00,0x07,0x56,0x98,0xad,0x9b,0x9d,0xac,0x8f,0x86,0x82,0x90,0x9a,0x88,0x85,0x8c,0x89,0x81,0x87,0xa8,0xc3,0x93,0x94,0x9b,0xa6,0xc3,0x1c,0x1e,0x98 -,0x92,0xe5,0x13,0x1d,0x3f,0x17,0x1b,0xac,0x3e,0x0a,0x03,0x09,0x06,0x04,0x0a,0x0c,0x05,0x02,0x14,0xd0,0x43,0x16,0x18,0x17,0x12,0x39,0x92,0x8d,0xc1,0xa6,0x8c,0x84 -,0x86,0x84,0x84,0x8c,0x90,0x89,0x82,0x8d,0x99,0xa0,0xa4,0x3a,0xc5,0x8d,0x91,0x36,0x15,0x5e,0x96,0x9e,0xe7,0x2f,0x1d,0x1d,0x17,0x17,0x0c,0x03,0x02,0x03,0x05,0x02 -,0x04,0x0f,0x11,0x05,0x07,0x08,0x11,0xc4,0x9e,0xdd,0x29,0xa6,0x94,0x8b,0x8c,0x8c,0x88,0x88,0x89,0x83,0x80,0x81,0x83,0x89,0x84,0x88,0x89,0x85,0x95,0x30,0x29,0xa3 -,0x96,0xb3,0x0f,0x09,0x0b,0x0b,0x0e,0x09,0x01,0x00,0x01,0x02,0x05,0x07,0x08,0x05,0x02,0x05,0x0c,0x09,0x0e,0x5e,0xe0,0x2a,0x3a,0x94,0x82,0x80,0x83,0x8f,0x92,0x84 -,0x80,0x81,0x82,0x83,0x82,0x81,0x80,0x80,0x81,0x84,0x95,0xc3,0x1e,0x16,0x1f,0x0b,0x00,0x00,0x00,0x03,0x08,0x09,0x02,0x00,0x02,0x08,0x09,0x07,0x04,0x05,0x0a,0x0f -,0xf3,0xb9,0x33,0x55,0xa6,0x9d,0x9c,0x8e,0x88,0x8f,0xbb,0xba,0x91,0x85,0x81,0x81,0x83,0x8d,0x88,0x80,0x80,0x85,0x8e,0x92,0x9a,0x8d,0x96,0xb2,0xbe,0x25,0x12,0x0a -,0x0c,0x0b,0x0c,0x04,0x00,0x00,0x05,0x1d,0x27,0x13,0x07,0x04,0x07,0x0d,0x11,0x08,0x0a,0x0f,0x0e,0x24,0x4c,0xf6,0xb2,0x9f,0x91,0x94,0x8c,0x86,0x84,0x87,0x8f,0x8e -,0x84,0x80,0x80,0x86,0x8a,0x83,0x87,0x84,0x83,0x8b,0x92,0x9b,0x9e,0xa2,0x33,0x1a,0x0f,0x08,0x04,0x04,0x05,0x03,0x02,0x00,0x00,0x00,0x00,0x08,0x0a,0x02,0x03,0x0d -,0x36,0xbf,0x21,0x17,0x27,0xcd,0x95,0x91,0x9d,0x8a,0x85,0x86,0x84,0x82,0x81,0x80,0x80,0x82,0x84,0x80,0x80,0x80,0x83,0x8a,0x89,0x8e,0x97,0xb6,0x16,0x06,0x04,0x03 -,0x01,0x02,0x07,0x09,0x03,0x03,0x00,0x04,0x0c,0x0a,0x03,0x00,0x00,0x01,0x06,0x0a,0x07,0x08,0x19,0x9f,0x8b,0x8b,0x92,0x8e,0x86,0x83,0x81,0x81,0x80,0x80,0x80,0x82 -,0x82,0x80,0x81,0x80,0x88,0x98,0x8d,0x8c,0x9a,0xab,0x21,0x11,0x0e,0x0f,0x10,0x09,0x04,0x01,0x00,0x01,0x02,0x02,0x02,0x03,0x03,0x02,0x04,0x06,0x0f,0x13,0x08,0x13 -,0xcd,0x99,0x96,0x9e,0xb0,0x94,0x85,0x82,0x81,0x83,0x82,0x85,0x85,0x8a,0x8a,0x84,0x86,0x8b,0x99,0x93,0x86,0x84,0x88,0x95,0xb6,0xb7,0x9a,0x9f,0xc9,0x18,0x09,0x0b -,0x0d,0x0f,0x08,0x06,0x04,0x02,0x03,0x03,0x03,0x01,0x04,0x0a,0x05,0x06,0x18,0x38,0xe2,0x22,0x10,0x15,0x43,0x9f,0x92,0x9b,0x98,0x87,0x83,0x82,0x84,0x84,0x85,0x8b -,0x8d,0x86,0x84,0x86,0x88,0x89,0x8a,0x87,0x83,0x86,0x88,0x9f,0xbc,0x43,0x3d,0x2c,0x08,0x04,0x08,0x09,0x09,0x07,0x03,0x01,0x01,0x03,0x02,0x01,0x04,0x06,0x02,0x01 -,0x02,0x17,0xa0,0x9a,0x9e,0xc7,0xd5,0x92,0x83,0x88,0x88,0x87,0x87,0x84,0x82,0x83,0x87,0x8c,0x95,0x89,0x84,0x87,0x8e,0x9a,0x93,0x94,0x95,0x93,0xb0,0x36,0xbc,0xa6 -,0x3a,0x13,0x0c,0x04,0x05,0x09,0x0e,0x11,0x08,0x08,0x07,0x05,0x02,0x01,0x01,0x05,0x0e,0x0e,0x0a,0x07,0x10,0xdb,0x9b,0x9c,0x9e,0x9b,0x8c,0x83,0x85,0x8a,0x91,0x8f -,0x8a,0x84,0x83,0x85,0x88,0x88,0x84,0x87,0x86,0x87,0x93,0xb6,0xd3,0xa9,0xa8,0xb0,0x54,0x2a,0x1e,0x13,0x17,0x0d,0x01,0x03,0x07,0x0a,0x07,0x03,0x05,0x0c,0x18,0x10 -,0x0e,0x0b,0x0c,0x16,0x1e,0x3c,0x3b,0x40,0x96,0x89,0x8b,0x94,0xa2,0xa5,0xac,0x8e,0x8d,0x9d,0xaa,0xa3,0x89,0x86,0x81,0x84,0x80,0x8e,0xa1,0x95,0x65,0x13,0x02,0x0a -,0x1a,0x0c,0x00,0x01,0x04,0x18,0xa1,0x80,0xad,0x18,0x8b,0x80,0x85,0x16,0x00,0x0e,0x22,0x8f,0x96,0x05,0x0b,0x0e,0x0d,0x99,0x92,0x28,0x0e,0x00,0x35,0x81,0x85,0x24 -,0x08,0x13,0x49,0xa5,0x2e,0x13,0x0f,0x8e,0x90,0x95,0x82,0x80,0x87,0x82,0xa7,0x08,0x0a,0x0c,0x0b,0x16,0x1d,0xfc,0xbb,0x0c,0x96,0x87,0x80,0x8f,0x17,0x27,0x2b,0xb8 -,0x85,0x8b,0x0c,0x0f,0x8f,0x82,0x2d,0x24,0x34,0xb6,0x9e,0xe9,0x0e,0x03,0x03,0x0a,0x29,0x03,0x01,0x01,0x04,0x06,0x2a,0xbc,0x2f,0xac,0x86,0x80,0x82,0x80,0x83,0x8c -,0x8d,0x87,0x90,0xa1,0x0f,0x19,0x2f,0x15,0x16,0x19,0x13,0xc4,0xaa,0x96,0x9f,0x3d,0x8d,0xc3,0xbe,0xae,0x1c,0x0d,0x18,0xba,0xb5,0x3e,0xaf,0xc3,0x99,0x8c,0x8f,0x99 -,0x1e,0x12,0x0e,0x18,0x0a,0x00,0x06,0x11,0x0b,0x27,0x29,0x29,0xc9,0xad,0x9a,0x91,0x9a,0x59,0xb0,0x1c,0x1f,0x39,0xc9,0xc3,0xbc,0x8d,0x88,0x9d,0x93,0x87,0x83,0x99 -,0x8f,0x8d,0xae,0x9f,0xaf,0xac,0x2b,0x27,0x15,0x14,0x31,0x31,0x36,0xb9,0xd9,0xcd,0x96,0x9d,0xa6,0x1c,0x0f,0x0f,0x03,0x03,0x00,0x01,0x02,0x08,0x0e,0x0e,0x08,0x16 -,0x35,0x0f,0x0f,0x30,0x98,0x9e,0x8f,0x81,0x82,0x83,0x81,0x80,0x81,0x80,0x84,0x86,0x83,0x81,0x85,0x85,0x89,0x98,0x9d,0xdd,0x0a,0x07,0x06,0x00,0x02,0x12,0x2f,0x06 -,0x01,0x01,0x06,0x09,0x06,0x05,0x04,0x07,0x17,0x20,0x1c,0x33,0x1e,0x2b,0x26,0x0f,0x1b,0xa6,0x90,0x8b,0x92,0x9f,0x8b,0x89,0x93,0x8e,0x8f,0x88,0x86,0x85,0x83,0x86 -,0x83,0x81,0x80,0x86,0x84,0x8e,0x1c,0x39,0xc0,0x69,0xea,0x26,0x1d,0x0c,0x08,0x06,0x0d,0x08,0x00,0x01,0x02,0x05,0x02,0x04,0x07,0x07,0x06,0x11,0x0f,0x0c,0x16,0x1c -,0xc9,0x9f,0x95,0x8f,0x8d,0x90,0x91,0x8c,0x8f,0x9b,0xa7,0x96,0x8e,0x8c,0x8e,0x88,0x84,0x94,0x98,0x8b,0x88,0x84,0x8b,0x88,0x87,0x8e,0x8a,0x8c,0x3c,0x2f,0x91,0x2f -,0x0d,0x0a,0x18,0x1f,0x1c,0x0e,0x08,0x09,0x07,0x0b,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x0c,0x0c,0x12,0xb9,0x9f,0x8f,0x8b,0x91,0x92,0x8a,0x85,0x82,0x80,0x84 -,0x85,0x82,0x80,0x80,0x80,0x80,0x81,0x87,0x87,0x88,0x88,0x88,0x9e,0x39,0x5a,0x6a,0x2e,0x1c,0x07,0x02,0x02,0x02,0x01,0x03,0x06,0x05,0x04,0x04,0x06,0x03,0x05,0x04 -,0x05,0x02,0x02,0x00,0x06,0x18,0x30,0xec,0xa8,0xbc,0xad,0x88,0x83,0x84,0x85,0x80,0x80,0x80,0x81,0x80,0x81,0x81,0x89,0x9b,0x99,0x90,0x96,0x93,0x87,0xb5,0x15,0x1b -,0x25,0x1f,0x18,0x15,0x1a,0x29,0x16,0x0c,0x0b,0x0d,0x0b,0x08,0x03,0x00,0x07,0x17,0x1e,0x18,0x1e,0x13,0x0f,0x17,0x1b,0x27,0x2e,0xc1,0xf5,0x3a,0xb7,0x9c,0x8f,0x8b -,0x9c,0x2c,0xe9,0xa2,0x90,0x87,0x84,0x8a,0x8a,0x8b,0x88,0x8b,0x9e,0x24,0x1f,0xc7,0xc6,0x9d,0xa0,0xa5,0xa0,0x8d,0x8c,0xa4,0x36,0xce,0x42,0x2a,0x3e,0x29,0x2c,0x11 -,0x0c,0x0e,0x18,0x0e,0x05,0x05,0x09,0x0c,0x13,0x21,0xcc,0xa4,0xb2,0x24,0x0e,0x1b,0x29,0x48,0xa9,0x9b,0x47,0x1a,0x9a,0x89,0x87,0x98,0x37,0x32,0x57,0xa5,0x95,0x94 -,0xa7,0xa8,0xcc,0xc8,0xc0,0xbe,0x56,0x25,0x4b,0xaf,0xbd,0x2e,0xaf,0x9d,0xa0,0x8f,0x88,0x9b,0x4b,0xb4,0xa0,0xa7,0xa4,0xc8,0x29,0x17,0x22,0xdb,0x56,0xdb,0x12,0x1d -,0x6e,0x4e,0x3e,0xcd,0xa7,0xac,0xbf,0x1c,0x10,0x0f,0x15,0x22,0x11,0x06,0x04,0x11,0x36,0x1f,0x15,0x0b,0x07,0x0c,0x37,0xb7,0x66,0x1f,0xcf,0xa2,0xa5,0x88,0x86,0x8a -,0xa2,0x9e,0x88,0x87,0x88,0x90,0x94,0x88,0x83,0x81,0x86,0x90,0xa7,0x9c,0x9b,0xbf,0x3c,0x2c,0x6a,0xe2,0xa3,0x91,0x93,0x3d,0x15,0x1f,0x33,0x12,0x05,0x06,0x05,0x04 -,0x02,0x02,0x05,0x0b,0x0e,0x09,0x05,0x04,0x03,0x05,0x13,0x32,0x17,0x10,0x0e,0x33,0x92,0x8b,0x8d,0xaa,0x74,0xbd,0x8d,0x81,0x81,0x80,0x83,0x83,0x82,0x82,0x82,0x82 -,0x81,0x83,0x83,0x86,0x91,0xb4,0xf9,0x9b,0x9f,0x30,0x1c,0x11,0x0f,0x18,0x27,0x1e,0x07,0x03,0x02,0x03,0x03,0x07,0x0e,0x0e,0x0b,0x05,0x01,0x02,0x01,0x08,0x0e,0x02 -,0x00,0x00,0x05,0x11,0x57,0xbc,0xb9,0xaa,0x95,0x81,0x80,0x80,0x85,0x8f,0x8d,0x82,0x80,0x80,0x82,0x8b,0x87,0x80,0x82,0x85,0x86,0x86,0x84,0x85,0x83,0x87,0xab,0x19 -,0x27,0xba,0x18,0x04,0x02,0x03,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x02,0x02,0x01,0x0a,0x1c,0x15,0x09,0x0d,0x1e,0x39,0xa1,0x9a,0xb8,0x3a,0xa6,0x88,0x83,0x81,0x88 -,0x9c,0x26,0x9d,0x81,0x80,0x86,0x9e,0x95,0x87,0x83,0x80,0x89,0xa5,0x9c,0x8b,0x8b,0xae,0x1b,0x16,0xbf,0x94,0xaa,0x6a,0xf5,0x2a,0x1e,0x2c,0xc3,0x27,0x15,0x37,0xb9 -,0x3f,0x0f,0x0d,0x06,0x01,0x05,0x0a,0x07,0x02,0x0a,0x25,0x3f,0x0e,0x07,0x14,0x1f,0xa1,0x87,0x93,0x16,0x04,0x20,0x8f,0x8f,0x9e,0x1d,0x09,0x0c,0x30,0x98,0x97,0xbc -,0x36,0x90,0x84,0x86,0x8a,0x8d,0x9b,0x92,0x85,0x8d,0x31,0x3e,0x8a,0x83,0x8a,0x97,0x8b,0x8b,0x94,0x9b,0x8f,0x8f,0x2d,0x3b,0x88,0x88,0xdb,0x11,0x0c,0x0a,0x0f,0x13 -,0x08,0x03,0x01,0x0c,0x24,0x0c,0x01,0x00,0x02,0x06,0x0b,0x24,0x0b,0x00,0x01,0x05,0x17,0x2a,0x4c,0x1c,0x13,0xaf,0x88,0x83,0x88,0x89,0x82,0x80,0x80,0x82,0x85,0x88 -,0x86,0x85,0x84,0x8b,0x9e,0x85,0x80,0x81,0x83,0x98,0xa1,0xab,0x3d,0x13,0x14,0x0f,0x04,0x0a,0x1d,0x0f,0x01,0x02,0x04,0x02,0x02,0x0b,0x0b,0x06,0x12,0x97,0x87,0x98 -,0x0d,0x00,0x05,0x0a,0x11,0x15,0x08,0x00,0x14,0x90,0x84,0x87,0x90,0x28,0x1f,0x97,0x8a,0x97,0x35,0xb9,0x8b,0x82,0x81,0x8c,0x8c,0x8c,0xa3,0xb1,0xaf,0xb7,0x42,0x42 -,0x5b,0xa1,0x92,0xad,0xdf,0x22,0x1d,0xaa,0x93,0xc6,0xaf,0x86,0x80,0x97,0x0e,0x21,0x9e,0xb2,0xc1,0x5f,0x0f,0x07,0x15,0x96,0x9a,0x0e,0x04,0x02,0x04,0x0b,0x34,0x1d -,0x06,0x06,0x0f,0xa8,0xc6,0x17,0x0b,0x01,0x03,0x2e,0x96,0x3f,0x1e,0xb5,0x8e,0x85,0x87,0x91,0x98,0x9f,0xca,0xb4,0x8d,0x8f,0x9a,0x8c,0x85,0x8c,0xbf,0x24,0x19,0x17 -,0xa4,0x8c,0x8b,0x97,0x95,0x83,0x80,0x8b,0x1b,0x26,0x3f,0x21,0x37,0x1d,0x0c,0x15,0xac,0x87,0x94,0x0f,0x0c,0x04,0x06,0x0e,0x14,0x13,0x09,0x05,0x29,0x8a,0x9a,0x25 -,0x0d,0x02,0x06,0x14,0x18,0x09,0x0d,0x41,0xaa,0xae,0x1b,0x07,0x05,0x08,0x0f,0x18,0x31,0x37,0xa5,0x83,0x81,0x84,0x87,0x88,0x8f,0x97,0x8e,0x94,0x9a,0x91,0x85,0x80 -,0x80,0x88,0x9e,0xae,0x97,0x8d,0x88,0x86,0x97,0x9c,0x86,0x80,0x92,0x20,0x08,0x00,0x01,0x01,0x02,0x02,0x02,0x02,0x05,0x0d,0x09,0x02,0x02,0x00,0x08,0x1a,0x11,0x03 -,0x08,0xa3,0x9c,0x23,0x1e,0x1a,0x36,0xa3,0xc1,0x6b,0x94,0x8a,0x83,0x80,0x80,0x83,0x88,0x8f,0x96,0x8a,0x85,0x89,0x96,0x8e,0x83,0x81,0x84,0xa7,0x0f,0x0e,0x14,0x17 -,0x1c,0x1b,0x22,0xbf,0x94,0x98,0x4f,0x1e,0x0d,0x0c,0x18,0x1d,0x1e,0x11,0x12,0x3e,0xd3,0x3e,0x11,0x02,0x03,0x07,0x07,0x0b,0x0e,0x14,0xb7,0x8c,0x94,0x4b,0x28,0x1a -,0x2c,0x9c,0xa8,0x1f,0x34,0x9d,0x8d,0x86,0x91,0x4c,0x25,0x26,0x14,0x14,0x47,0x3a,0x3a,0x96,0x86,0x81,0x84,0x7e,0x0d,0x2b,0xa5,0xc9,0x2a,0x17,0x46,0x89,0x83,0x86 -,0x92,0x93,0x94,0xb4,0x4e,0x21,0xd1,0x96,0x8d,0x8b,0x8d,0x9b,0x28,0x1c,0x17,0x1f,0x1c,0x0f,0x08,0x0f,0xb4,0xae,0x23,0x0e,0x0d,0x0a,0x07,0x05,0x01,0x05,0x11,0x37 -,0x40,0x29,0x1d,0x0f,0x10,0x22,0x2f,0x1c,0x1e,0x23,0xb9,0x8e,0x87,0x88,0x8a,0xa0,0x9d,0x8b,0x99,0x98,0x8f,0x8c,0x89,0x81,0x87,0x9e,0x1b,0x21,0x21,0x1a,0x16,0x17 -,0x2e,0x96,0x8d,0x9a,0x8c,0x96,0xb5,0x1c,0x1d,0x2c,0x1b,0xbd,0xd2,0x2d,0x2c,0x1e,0x9a,0x99,0x92,0xab,0xd9,0x9d,0x8a,0x88,0x8e,0x80,0x94,0x0b,0x08,0x00,0x0d,0x25 -,0x02,0x07,0x07,0x0d,0x07,0x0c,0x01,0x2d,0x97,0xa8,0x88,0x52,0x5e,0xac,0x8e,0x80,0x8a,0x0b,0x0c,0x8c,0x9c,0x9f,0x1c,0xb5,0x9b,0xab,0x90,0x90,0x80,0x90,0x8b,0x8e -,0x8c,0x96,0x0c,0x00,0x1c,0x85,0x8b,0x37,0x0f,0x0d,0x0a,0x00,0x05,0x19,0x0e,0x02,0x04,0x07,0x14,0x93,0x0e,0x17,0x85,0x80,0x98,0xad,0x94,0x23,0x00,0x0b,0x26,0xad -,0x1e,0x1a,0x9c,0x0a,0x09,0x18,0xb6,0x86,0x80,0x80,0x81,0x80,0x84,0x8b,0x89,0x9a,0xa8,0x1d,0x6c,0xaf,0x0c,0x0e,0x00,0xd0,0x81,0x85,0x9e,0x45,0x2f,0x0c,0x21,0x1e -,0x3e,0x0f,0x05,0x0e,0x13,0x1e,0x03,0x01,0x00,0x06,0x1e,0x11,0x0d,0x2c,0x88,0x9c,0x9b,0x85,0x83,0x80,0x83,0x82,0x87,0x80,0x89,0xaf,0x60,0x8e,0x84,0xe7,0x0f,0x0c -,0x0e,0x22,0xc6,0x2b,0x0b,0x17,0xac,0xb5,0x4b,0x1f,0x4e,0xb9,0x3e,0x25,0x90,0x82,0x8c,0x94,0x23,0x15,0x42,0xc5,0x07,0x00,0x14,0xab,0x1a,0x0b,0x36,0x8a,0x82,0xa9 -,0x5b,0x93,0xab,0x06,0x0c,0x09,0x08,0x12,0x02,0x00,0x01,0x05,0x03,0x02,0xd6,0x97,0x8f,0x89,0x8f,0x87,0x8d,0x83,0x80,0x83,0x89,0x8c,0x88,0x88,0x86,0x97,0x9b,0x85 -,0x84,0x94,0x39,0x28,0xad,0xe4,0xdd,0x9a,0x86,0x89,0xa8,0x99,0x90,0x18,0x04,0x06,0x01,0x02,0x01,0x02,0x02,0x0a,0x07,0x04,0x0e,0x12,0x1a,0x0e,0x1d,0xae,0x96,0x18 -,0x02,0x9e,0x80,0x8c,0xba,0x1f,0x29,0x25,0x07,0x13,0x9c,0x87,0x90,0x27,0x2f,0x90,0x93,0x1b,0xba,0x83,0x81,0x8f,0x96,0x8c,0x8b,0x8a,0x95,0x9a,0x40,0x23,0x1d,0x14 -,0x1d,0x20,0xa7,0x8c,0x8a,0x8c,0x99,0xcf,0x9d,0x8f,0x1e,0x10,0x8f,0x99,0x16,0x0b,0x08,0x08,0x04,0x00,0x04,0x02,0x08,0x16,0xa6,0x89,0x8e,0x9c,0xb2,0xaa,0x40,0x2f -,0x36,0xbe,0x69,0x67,0x18,0x07,0xb6,0xad,0x16,0x0b,0x0c,0x1a,0x21,0x0a,0x12,0xa9,0x86,0x8d,0x2c,0xa0,0x8f,0xfd,0x10,0x25,0xad,0x9d,0x95,0xa2,0xa2,0x8a,0x8a,0x8d -,0x8c,0x8e,0x8b,0x8b,0x94,0x8b,0x81,0x83,0x84,0x84,0x8c,0xa5,0x9b,0x6e,0x1c,0x17,0x10,0x0d,0x09,0x04,0x02,0x0e,0x0f,0x07,0x04,0x07,0x09,0x09,0x03,0x07,0x1b,0x17 -,0x06,0x03,0x01,0x08,0x15,0x16,0x0c,0x0c,0x1a,0x27,0xa4,0x97,0x8d,0x83,0x81,0x88,0x88,0x8e,0x94,0x84,0x81,0x80,0x82,0x82,0x83,0x8a,0x8b,0xa2,0xa0,0x82,0x8c,0xa9 -,0x9d,0xbf,0x3a,0x43,0xaf,0xb0,0xc2,0x47,0x0d,0x13,0x0e,0x0a,0x0c,0x07,0x03,0x09,0x11,0x19,0x12,0x08,0x03,0x08,0x0e,0x10,0x0e,0x0f,0x1d,0x0a,0x06,0x0a,0x0e,0x20 -,0x2a,0x2a,0xb0,0xac,0x69,0x2f,0x22,0xcd,0x90,0x87,0x8c,0x8c,0x86,0x88,0x8c,0x87,0x82,0x80,0x81,0x84,0x84,0x84,0x84,0x8b,0xb8,0x2f,0xcb,0x3b,0x0e,0x0b,0x0f,0x07 -,0x07,0x0e,0x06,0x0a,0x17,0x11,0x0c,0x08,0x05,0x0d,0x9e,0x8e,0xad,0x2e,0x1f,0x32,0xf5,0xd0,0x3a,0xa5,0x96,0xa6,0x9b,0x9b,0xaf,0xa6,0x9e,0x90,0x88,0x92,0xa5,0x41 -,0xc0,0xaf,0x9d,0x9a,0x4c,0x1e,0x13,0x0d,0x0a,0x08,0x07,0x09,0x0f,0x1d,0x1f,0x0f,0x0f,0x1d,0x1e,0x0e,0x0d,0xad,0x92,0x8c,0x86,0x84,0x8b,0x93,0x97,0x8b,0x87,0x96 -,0x5b,0x1a,0x2d,0xcb,0xaf,0x9c,0xa0,0x99,0x94,0xa3,0x95,0x92,0x92,0x93,0x9f,0xbb,0x90,0x8d,0xce,0x1c,0x17,0x14,0x15,0x1a,0x12,0x0f,0x19,0xca,0x54,0x1b,0x07,0x08 -,0x15,0x14,0x0f,0x0b,0x11,0x18,0x10,0x12,0x20,0x3d,0xb2,0x3c,0x16,0x11,0x23,0x2a,0x3f,0xaf,0xa0,0x95,0x99,0x9f,0x9b,0x94,0x98,0x90,0x94,0x8e,0x86,0x88,0x87,0x84 -,0x88,0x97,0xa5,0xb0,0x3f,0x2d,0x19,0x0f,0x14,0x0f,0x1c,0x2d,0x1b,0x1c,0x24,0xd8,0x9b,0xab,0x3d,0xab,0x93,0x94,0x93,0x9c,0x38,0x35,0x26,0x16,0x26,0xb0,0xa8,0xbf -,0xb3,0xbd,0x3d,0xb4,0xde,0x17,0x0f,0x11,0x0f,0x0e,0x0a,0x0f,0x27,0xb3,0xd8,0x15,0x0e,0x16,0xad,0xb8,0x10,0x0d,0x19,0x42,0x2f,0x17,0x16,0x27,0xd1,0x69,0xc1,0xa0 -,0xa2,0x96,0x8d,0x8b,0x87,0x88,0x91,0x98,0x9e,0xab,0x9b,0xad,0xab,0xad,0xb4,0x9f,0x9f,0x9b,0x9f,0x9c,0x9f,0xaa,0xa4,0x95,0x8c,0x90,0x8d,0x89,0x8d,0x96,0xa2,0xcf -,0x1c,0x14,0x16,0x14,0x19,0x1d,0x1b,0x0f,0x07,0x0a,0x19,0x18,0x0f,0x08,0x01,0x02,0x06,0x13,0x1f,0x27,0x2f,0x39,0x2f,0x23,0x23,0x1f,0x27,0xb4,0xa9,0x30,0x1b,0x21 -,0x2e,0x23,0x3a,0xc2,0xa9,0x96,0x9a,0x8e,0x85,0x82,0x82,0x84,0x8c,0x95,0x9b,0x9f,0x98,0x9b,0x96,0x94,0x97,0x9d,0xad,0xa4,0x99,0x9f,0xa5,0xb8,0xcd,0xad,0x9f,0x9d -,0xa0,0x9d,0x55,0x27,0x26,0x3d,0x6f,0x26,0x0c,0x06,0x0c,0x19,0x16,0x0f,0x0b,0x06,0x06,0x08,0x0c,0x12,0x13,0x0e,0x17,0x3f,0x5c,0x3c,0x25,0x1c,0x31,0xc8,0xb2,0x3f -,0xbe,0xba,0x9a,0x93,0x9e,0xc5,0x34,0x2c,0x21,0x3c,0xb2,0x97,0x8d,0x88,0x89,0x89,0x88,0x8c,0xa0,0xee,0x2b,0xcc,0x3c,0x2e,0x2d,0x1f,0x62,0xad,0x94,0x89,0x89,0x8a -,0x96,0xa2,0x9b,0x98,0x90,0x9b,0xb2,0xad,0xb5,0x24,0x1f,0x17,0x15,0x20,0x30,0x32,0x2e,0x16,0x0a,0x04,0x06,0x0b,0x06,0x00,0x03,0x08,0x0a,0x10,0x28,0xa3,0x2b,0x3c -,0xbf,0x38,0xb5,0xb2,0x9e,0x8e,0x8e,0x95,0x9b,0x8f,0x8e,0x97,0xac,0x2d,0x2d,0xbb,0xae,0xb6,0x9a,0x9c,0xa8,0x9b,0x9a,0x9c,0x9a,0xae,0xbb,0xcc,0x1d,0x0c,0x13,0x2e -,0xac,0x9d,0xb7,0x33,0x3a,0xa9,0x97,0x95,0x94,0x9a,0x97,0x8e,0x8e,0x9d,0x2a,0x19,0x1e,0x3e,0x59,0x92,0x8f,0xba,0xc9,0x3a,0xab,0xdb,0x12,0x0c,0x07,0x0a,0x06,0x02 -,0x07,0x11,0x1b,0x24,0x1f,0x39,0xc1,0x1a,0x14,0x25,0xa2,0xe0,0x5a,0xa4,0x9e,0xa6,0xa9,0xb0,0x3b,0x36,0xdc,0xc4,0xb3,0x99,0x8b,0x87,0x92,0x95,0x9e,0x2e,0x13,0x15 -,0x20,0x2d,0xc1,0xb9,0xaa,0x99,0x92,0x89,0x8a,0x92,0x93,0x9d,0x7d,0xab,0x95,0x91,0x92,0x96,0xb6,0x11,0x0c,0x08,0x05,0x04,0x08,0x18,0x2c,0x21,0x3a,0x4a,0xab,0x92 -,0x9c,0x4a,0x14,0x20,0x37,0x61,0xca,0xa5,0xb3,0x49,0x33,0x2e,0x4c,0x32,0x1f,0x11,0x0d,0x10,0x3c,0x93,0x8e,0x99,0x9b,0xba,0xab,0x9f,0xb8,0xa5,0x9c,0x96,0x9a,0xa9 -,0xd2,0x24,0x1b,0x1b,0x0e,0x0a,0x0a,0x0d,0x0f,0x2d,0xa9,0x95,0x98,0xb1,0x9d,0x99,0x95,0xa6,0xbe,0xdd,0xf0,0xac,0xca,0x3f,0x9f,0x97,0xbb,0x31,0x17,0x1e,0xe2,0xa1 -,0xa4,0x98,0x94,0x9e,0xb3,0x71,0xc6,0xcb,0x1f,0x10,0x15,0x2e,0x9b,0x90,0x96,0x9b,0x9a,0xa2,0x9c,0x97,0x91,0x9e,0xab,0xc7,0x3c,0x23,0x1a,0x1c,0x0f,0x12,0x0b,0x05 -,0x06,0x0b,0x17,0x30,0xb4,0x56,0x2b,0x1d,0x1a,0x23,0x1a,0x10,0x0d,0x11,0x23,0x43,0x4a,0x34,0xb8,0x99,0x8f,0x99,0xb4,0xa0,0x93,0x89,0x87,0x8b,0x92,0x92,0x93,0x91 -,0x8d,0x9b,0xb2,0x31,0x1e,0x21,0x38,0xca,0xe6,0x2d,0x1f,0x31,0x46,0x2b,0x25,0x2d,0xa2,0x97,0x9a,0x93,0x97,0x9f,0xae,0xd9,0x32,0x2f,0x42,0x3c,0x6f,0xb7,0xb4,0x64 -,0x23,0x22,0x37,0x49,0x3b,0x16,0x0f,0x1c,0x2f,0x2f,0x1f,0x16,0x13,0x1c,0x17,0x0a,0x05,0x03,0x05,0x08,0x0c,0x14,0x26,0xac,0x9c,0x92,0x8b,0x8a,0x8d,0x8c,0x8a,0x87 -,0x88,0x89,0x8d,0x96,0x95,0x93,0x97,0xa3,0xc1,0x2f,0xac,0x97,0x99,0x9b,0xa1,0xa1,0xb5,0x21,0x13,0x11,0x1b,0x4f,0x3e,0x24,0x2e,0x39,0xc3,0xa7,0xb4,0x4b,0x20,0x1f -,0x30,0x46,0x2e,0x1f,0x1e,0x1b,0x27,0xc0,0x1f,0x0d,0x0f,0x10,0x1a,0x26,0x2b,0x21,0x30,0xb0,0x9a,0x99,0xa7,0xb2,0xca,0xba,0xab,0xac,0xa8,0xa1,0xa5,0xad,0xac,0xa6 -,0xe6,0x1f,0x22,0x21,0x1a,0x1d,0x1f,0x3d,0x41,0x35,0x66,0xca,0xa9,0xa1,0xa1,0x9c,0x90,0x8b,0x8b,0x9b,0x40,0x21,0x36,0xaf,0xac,0xc1,0x19,0x10,0x1e,0x29,0xb9,0x93 -,0x91,0xa3,0xb3,0xb9,0xa3,0xbb,0x1a,0x13,0x16,0x29,0x3e,0xd0,0x3c,0x40,0xc6,0xb8,0xbb,0xc0,0xac,0xb7,0xa8,0x6e,0x40,0x2c,0x1d,0x24,0x2f,0xa7,0x9e,0x99,0x9f,0x7d -,0x1e,0x1a,0x22,0x2e,0xd5,0x54,0xc4,0xa8,0xab,0xa3,0x9e,0xa3,0xac,0x55,0x37,0x28,0x1e,0x1c,0x10,0x0f,0x13,0x18,0x1e,0x1c,0x2d,0xd7,0x65,0x57,0xd1,0x2f,0x24,0x3b -,0xba,0x98,0x8c,0x94,0x9e,0xa2,0xac,0x9b,0x8f,0x93,0x9c,0xa4,0xed,0x26,0x1f,0x1c,0x12,0x1a,0x46,0xae,0xa1,0xa7,0xaf,0x78,0xc6,0x9e,0x93,0x8f,0x92,0x9a,0xc3,0x51 -,0x30,0x30,0x45,0xae,0x9a,0x94,0x96,0xa9,0x2d,0x11,0x0c,0x0c,0x16,0x1e,0x1b,0x1c,0x2e,0x2c,0x1a,0x19,0x27,0x46,0xaf,0xaf,0x2f,0x28,0x1b,0x13,0x19,0x2d,0xb9,0xa8 -,0xa6,0x3f,0x2b,0x25,0x1d,0x1d,0x20,0x2d,0x26,0x45,0xab,0xa1,0x9b,0x9d,0xa3,0x98,0x8d,0x8a,0x8f,0x9b,0xa1,0xe3,0x27,0x23,0x3c,0xbb,0x4d,0x3d,0x74,0xaf,0x9d,0x97 -,0xa3,0x9c,0x90,0x8e,0x93,0xa5,0x9c,0x99,0xbc,0x37,0x54,0x4c,0xf5,0xc8,0xcb,0x49,0x2d,0x20,0x14,0x0b,0x06,0x08,0x0e,0x0d,0x0e,0x10,0x1a,0x17,0x18,0x22,0x2a,0x2a -,0x18,0x13,0x19,0x20,0x35,0x3a,0x49,0xcf,0x9e,0x8c,0x8a,0x87,0x8b,0x8b,0x8a,0x8c,0x96,0x9d,0x9b,0x9b,0xab,0x5d,0x33,0x3d,0xaf,0x9c,0x9a,0x9d,0x9c,0xa9,0x30,0x11 -,0x1a,0x2b,0xef,0xbe,0x2c,0x21,0x12,0x0d,0x0d,0x11,0x16,0x17,0x17,0x11,0x0f,0x0f,0x0c,0x15,0x24,0x51,0xaf,0x9f,0x95,0x8f,0x8e,0x8e,0x8f,0x8e,0x92,0x91,0x8f,0x8e -,0x8e,0x9f,0xa5,0xa8,0xab,0xab,0x9e,0xa9,0x3e,0x20,0x17,0x20,0x2c,0x4a,0xc5,0xbe,0x54,0xcd,0xc0,0x2d,0x2f,0x48,0xc5,0x4b,0x1f,0x0c,0x0d,0x12,0x13,0x11,0x0c,0x15 -,0x1d,0x21,0x2f,0xab,0x9f,0xea,0x2c,0x32,0x3b,0x34,0x25,0x37,0xd5,0xbd,0xba,0xac,0xa8,0xab,0xac,0xcb,0xeb,0x35,0x3a,0x3e,0x50,0xa4,0xa4,0xa8,0x9e,0x9d,0x93,0x8e -,0x8e,0x8f,0x91,0x95,0xa0,0xac,0xa5,0xa3,0xb7,0x45,0x45,0xb9,0xaf,0xbd,0x72,0xe5,0x5f,0x38,0x1a,0x12,0x1d,0x22,0xe1,0xac,0xcc,0x63,0xbe,0xc9,0x3e,0x4e,0x4a,0xb6 -,0xc0,0x1d,0x17,0x1a,0x14,0x15,0x15,0x15,0x18,0x28,0x27,0x1b,0x16,0x14,0x17,0x14,0x17,0x1a,0x2d,0x3d,0x35,0x3f,0xda,0xb4,0xb5,0xb9,0x99,0x95,0x96,0x9a,0xb2,0xa3 -,0x99,0x8f,0x93,0x92,0x8e,0x8f,0x8c,0x93,0xa6,0xbd,0xeb,0xea,0x49,0x3c,0x3b,0x35,0x37,0x2c,0x2a,0x55,0xba,0xa8,0x9c,0x8f,0x8f,0x9b,0x9e,0xb6,0xc9,0x53,0xc6,0x59 -,0x26,0x23,0x1d,0x1c,0x1e,0x15,0x0e,0x0c,0x0c,0x10,0x0f,0x16,0x1b,0x1f,0x26,0x25,0x2e,0x56,0xe3,0x44,0xe8,0xc6,0x50,0x2e,0x20,0x63,0xb2,0x9f,0xa1,0x9d,0x92,0x98 -,0x97,0xa4,0xa1,0x97,0x94,0x9c,0xac,0x38,0x1e,0x1d,0x15,0x13,0x26,0x68,0xd4,0xef,0x62,0xca,0xdb,0xd3,0xb3,0xb0,0xb0,0xad,0xb4,0xc2,0xb5,0xa1,0xa6,0xb2,0xa3,0x9b -,0x9f,0xb1,0x49,0x4b,0xbc,0xa2,0x99,0x9e,0xa7,0xb3,0xb0,0xa8,0xbc,0xee,0x52,0x56,0x4a,0x1a,0x0e,0x0d,0x11,0x15,0x28,0x37,0x32,0x29,0x2a,0x2a,0x27,0x3d,0x3e,0xb0 -,0xd0,0xbd,0x99,0x9d,0xbe,0x3b,0xda,0xaa,0xb6,0x5c,0x2d,0x29,0x2d,0x2f,0x20,0x1f,0x20,0x3b,0x69,0xd7,0xb6,0xc2,0xbc,0xc9,0xef,0x68,0xa6,0xb3,0x35,0x27,0x28,0x29 -,0x58,0x7d,0xbc,0xa9,0xad,0xa5,0xaa,0xa5,0xbd,0xf2,0xc2,0xc5,0xcf,0x40,0x38,0x2f,0x5d,0xda,0xb6,0xa2,0xa0,0x9f,0xaf,0xa9,0xab,0xa7,0xa9,0x9e,0x8e,0x8e,0x90,0x8f -,0x91,0x93,0x9c,0xab,0x72,0x32,0x30,0x1f,0x10,0x0c,0x10,0x16,0x14,0x0f,0x15,0x22,0x29,0x1f,0x22,0x28,0x2e,0x3e,0x3f,0x23,0x1a,0x17,0x16,0x15,0x15,0x1d,0x34,0x3d -,0x1f,0x17,0x1e,0x3b,0xd7,0xcf,0xa9,0x8f,0x8d,0x8d,0x92,0x91,0x92,0x91,0x93,0x94,0x95,0xa8,0x65,0x1e,0x1d,0x26,0x3d,0xbb,0xad,0xb9,0xa4,0x9e,0xa2,0xad,0xe3,0xd7 -,0xce,0x2d,0x1b,0x1a,0x2f,0xbe,0xd2,0x5f,0xb8,0xa3,0xa5,0xad,0xaa,0x9f,0xa5,0xb1,0xce,0x55,0x36,0x33,0x3a,0x4e,0x46,0x34,0x54,0x57,0x2e,0x1d,0x18,0x19,0x18,0x12 -,0x1b,0x2b,0x4b,0x4d,0x3f,0xc0,0x9d,0x95,0x96,0x9f,0x5d,0x4f,0x3a,0x1e,0x17,0x1b,0x21,0x21,0x24,0x39,0xbc,0xb0,0xcf,0x6a,0xc7,0xae,0xb3,0xd7,0x35,0x28,0xcc,0xb2 -,0xaf,0xa2,0x9a,0x94,0x90,0xa1,0xb5,0xbb,0xbf,0xc7,0xfc,0xef,0x37,0x3e,0x4e,0xb6,0x9e,0x97,0xa4,0xa6,0xa7,0xb7,0xcd,0x60,0x28,0x12,0x16,0x17,0x18,0x1a,0x24,0x3a -,0xe3,0xb7,0xbc,0xc8,0x55,0xe4,0x77,0x29,0x2b,0x3c,0x2b,0x2e,0x41,0xb9,0x99,0x9b,0xa6,0xb5,0xc0,0xb8,0xbd,0xec,0x2b,0x2e,0x4c,0x3b,0x3b,0xb7,0x9d,0x9f,0xaf,0xcc -,0xe3,0x53,0x27,0x1d,0x16,0x11,0x0e,0x11,0x1b,0x2d,0xcb,0xaf,0xae,0xbb,0x6c,0x44,0xe0,0x4c,0x3f,0xbe,0xab,0xb4,0xac,0xaf,0xa3,0x9f,0x9e,0x9c,0xad,0xcb,0x51,0x4c -,0xbb,0xac,0xc8,0xdb,0x56,0xc3,0xa3,0x92,0x89,0x88,0x8e,0x92,0xa9,0xb6,0xb9,0x26,0x18,0x19,0x1c,0x11,0x0d,0x0e,0x2c,0x46,0x3d,0x2b,0x2b,0x29,0x15,0x0f,0x0e,0x1a -,0x30,0x4f,0xba,0x99,0x8e,0x92,0x9b,0xaf,0xa6,0x98,0x9c,0x9f,0x34,0x1e,0x1f,0x1d,0x2a,0xc7,0xa7,0xae,0xac,0xab,0xc0,0x3d,0x3d,0x2c,0x16,0x11,0x12,0x0f,0x14,0x1e -,0x36,0xb5,0xbd,0xb8,0xb4,0xb8,0xb8,0x42,0x1f,0x16,0x16,0x21,0x5e,0xb9,0xa6,0x9b,0x96,0x98,0x98,0xa4,0xb7,0xb1,0xb9,0xc0,0x6a,0x4b,0xb9,0x9b,0x8f,0x8a,0x88,0x89 -,0x8b,0x90,0x9b,0x98,0x9f,0x3d,0x15,0x10,0x15,0x28,0x3a,0x30,0x34,0x2d,0x26,0x1c,0x19,0x19,0x1e,0x1d,0x11,0x0d,0x0c,0x0c,0x10,0x1d,0xc4,0x9c,0x9f,0xcf,0x2b,0x21 -,0x2d,0x40,0x3f,0x29,0x1f,0x25,0x33,0xc4,0x9d,0x92,0x91,0x8d,0x92,0x99,0x9b,0xaf,0x53,0x2d,0x21,0x1e,0x1c,0x1f,0x2d,0xb4,0x9e,0x9c,0x9e,0xb4,0x4c,0x36,0x2e,0x28 -,0x20,0x23,0x2a,0x32,0x41,0xb6,0xa8,0x98,0x92,0x98,0x9a,0x97,0x93,0xa0,0xcc,0x59,0xae,0x99,0x8f,0x8d,0x8f,0x96,0x9d,0xd3,0x3b,0x3d,0x2e,0x20,0x0e,0x08,0x06,0x0b -,0x10,0x17,0x2a,0xc2,0x9f,0xa2,0x3c,0x22,0x2b,0x3a,0x4c,0x2a,0x1d,0x1c,0x1f,0x32,0x4c,0xba,0xbe,0xd6,0x68,0x38,0x5c,0x4d,0x1d,0x0f,0x0d,0x13,0x29,0xd7,0xaf,0xa5 -,0x9a,0x94,0x8f,0x98,0x9f,0xa9,0xa9,0xbf,0x38,0x2f,0x2d,0x49,0xcb,0xac,0x9e,0x97,0x9e,0xaa,0xac,0xa7,0xaf,0x49,0x25,0x19,0x1f,0x3b,0xbb,0xb1,0xa4,0x98,0x99,0x9f -,0xa8,0x9b,0x93,0x99,0xb3,0xd4,0xcc,0x5b,0x36,0x38,0xb5,0x9e,0x9b,0xa7,0x2f,0x1e,0x25,0x2f,0x29,0x18,0x17,0x14,0x0d,0x11,0x25,0xb9,0x9d,0x9c,0xa3,0xbd,0x3d,0x25 -,0x13,0x0f,0x0e,0x12,0x14,0x15,0x1b,0x1e,0x35,0xac,0x98,0x94,0x93,0xa6,0x37,0x26,0x1d,0x1c,0x1c,0x29,0x43,0xe9,0xaf,0x9e,0x9f,0xb7,0xcf,0xaf,0xa6,0xad,0xd3,0x27 -,0x13,0x1a,0xd2,0x9f,0x97,0x98,0x92,0x96,0x94,0x8b,0x8b,0x90,0x98,0xa4,0xc6,0x40,0x35,0xe1,0xc4,0xb1,0x9d,0x9e,0xbe,0x41,0x23,0x1f,0x1f,0x1b,0x11,0x0b,0x0f,0x19 -,0x1f,0x2e,0xac,0x9c,0x9e,0xa3,0xa7,0xba,0x2d,0x24,0x1e,0x14,0x12,0x16,0x1f,0x2c,0x6a,0xb2,0xa9,0xaa,0xa0,0x9e,0xae,0xd5,0x2e,0x15,0x12,0x1b,0x2b,0x48,0x48,0xcc -,0xc7,0xd6,0xd4,0xb4,0xae,0xcc,0x25,0x14,0x0e,0x0e,0x17,0x1f,0xc6,0x9e,0x97,0x9b,0x9e,0x98,0x97,0x95,0x98,0xa7,0xda,0x30,0x31,0x58,0xb7,0xa5,0x97,0x91,0x92,0x92 -,0x9a,0xa0,0xa6,0xaf,0xbc,0x2f,0x1c,0x19,0x19,0x24,0x2a,0x38,0x2d,0x2e,0x4b,0xc0,0xb7,0x2e,0x1c,0x1d,0x57,0xad,0xa7,0x3b,0x28,0xba,0x94,0x8e,0x8e,0x9e,0x35,0xcb -,0x9f,0x95,0x97,0x9d,0xa7,0x98,0xce,0xbe,0x5a,0x0e,0xa1,0x80,0x9f,0x00,0x8e,0x80,0x21,0x8e,0x2a,0x17,0x07,0x06,0x07,0x0c,0x14,0x00,0x04,0x00,0x00,0x00,0x00,0x02 -,0x00,0x00,0x02,0x02,0x08,0x07,0x05,0x06,0x14,0x1b,0x3c,0x98,0x9d,0x99,0x97,0x92,0x8d,0x80,0x80,0x8a,0x82,0x80,0x80,0x80,0x82,0x80,0x80,0x81,0x80,0x80,0x80,0x80 -,0x80,0x80,0x81,0x85,0x84,0x84,0x87,0x8a,0x9f,0xb7,0x9f,0x9d,0x46,0x1b,0x16,0x24,0x13,0x0a,0x0f,0x05,0x04,0x04,0x04,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00 -,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x04,0x03,0x07,0x03,0x07,0x0d,0x16,0x18,0x25,0x39,0x9d,0x90,0x8c,0x87,0x8a,0x84,0x84,0x84,0x82,0x80,0x83 -,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x80,0x82,0x84,0x80,0x82,0x81,0x84,0x83,0x83,0x87 -,0x82,0x8d,0x93,0xa1,0x5a,0xaf,0x26,0x16,0x0b,0x03,0x07,0x0c,0x04,0x03,0x01,0x03,0x06,0x02,0x04,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x01 -,0x00,0x02,0x00,0x04,0x00,0x05,0x03,0x01,0x01,0x03,0x07,0x04,0x06,0x02,0x0a,0x02,0x0e,0x08,0x10,0x1b,0x05,0x0d,0x0f,0x0f,0x25,0x26,0x2c,0xd2,0xbc,0x99,0x9e,0x91 -,0x93,0x8e,0x8b,0x91,0x8c,0x85,0x8b,0x88,0x81,0x82,0x81,0x88,0x86,0x83,0x80,0x83,0x85,0x8c,0x86,0x80,0x82,0x81,0x83,0x82,0x83,0x80,0x82,0x80,0x83,0x81,0x83,0x82 -,0x81,0x86,0x83,0x84,0x81,0x84,0x88,0x8c,0x8c,0x86,0x83,0x85,0x8a,0x89,0x8a,0x8a,0x85,0x8e,0x8e,0x8e,0x8f,0x90,0x8e,0x9c,0x99,0x9d,0x95,0x95,0x9b,0x94,0x99,0x8e -,0x93,0x87,0x90,0x9a,0xa3,0x9c,0x99,0xa9,0xbb,0xb6,0xc6,0x5d,0x55,0x20,0x23,0x13,0x0b,0x0d,0x0b,0x08,0x09,0x08,0x07,0x07,0x06,0x03,0x05,0x01,0x06,0x05,0x01,0x02 -,0x00,0x01,0x00,0x03,0x00,0x02,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x03,0x01,0x02,0x00,0x01,0x02,0x02,0x06,0x00,0x06,0x02,0x01,0x00,0x02,0x00 -,0x03,0x05,0x04,0x09,0x03,0x0f,0x09,0x0c,0x09,0x11,0x1d,0x1c,0x4f,0x28,0xa2,0xa0,0x96,0x89,0x89,0x83,0x88,0x89,0x83,0x80,0x81,0x80,0x81,0x80,0x80,0x81,0x80,0x80 -,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x80,0x84,0x83,0x80,0x80,0x83,0x83,0x81,0x83,0x80,0x82,0x80,0x88,0x87,0x84,0x85 -,0x93,0x8b,0x92,0x9c,0x8d,0x9d,0xa3,0x37,0x1e,0x21,0x1c,0x1f,0x0b,0x0a,0x0a,0x05,0x07,0x06,0x0c,0x00,0x03,0x02,0x04,0x01,0x01,0x02,0x00,0x01,0x00,0x03,0x02,0x05 -,0x01,0x05,0x03,0x02,0x02,0x00,0x02,0x03,0x02,0x00,0x06,0x06,0x01,0x0a,0x01,0x09,0x08,0x05,0x05,0x0a,0x0f,0x0b,0x15,0x0f,0x18,0x11,0x1e,0x16,0x0f,0x19,0x1a,0x20 -,0x21,0x29,0x2b,0xb0,0xa9,0xa8,0x51,0xac,0xa9,0xab,0x8f,0xa8,0x90,0x96,0x8b,0x88,0x8e,0x8b,0x8c,0x8b,0x8d,0x8f,0x8a,0x86,0x91,0x88,0x84,0x8b,0x84,0x8f,0x92,0x89 -,0x95,0x88,0x8f,0x8e,0x8e,0x91,0x8f,0x90,0x9f,0xa9,0xc6,0xca,0x9e,0xbe,0xa7,0xad,0xba,0xa2,0xa8,0xac,0xc1,0x37,0x55,0xae,0xb5,0xbb,0x37,0x19,0x50,0x24,0x43,0x1b -,0x19,0x1c,0x13,0x17,0x17,0x2a,0x0f,0x1d,0x25,0x34,0x2d,0x16,0x2f,0x19,0x3e,0xbd,0x3f,0x47,0x24,0xc7,0xbd,0xb1,0xcd,0xc7,0x5e,0x98,0xa1,0x98,0x99,0xa1,0x8f,0x96 -,0x8e,0x96,0x94,0x9e,0x98,0x93,0x8e,0x8e,0x8f,0x8c,0x97,0x88,0x92,0x8e,0x90,0x9d,0x8f,0xa7,0x8c,0x9b,0xa3,0x9c,0xa4,0x9b,0xba,0xfc,0x1f,0x36,0x27,0xa5,0xdd,0x2d -,0x2e,0x19,0x43,0x1a,0x2d,0x19,0x22,0x25,0xba,0xd7,0x1e,0x31,0x13,0xd7,0x2e,0x59,0x2c,0x18,0x28,0x35,0xf9,0xcd,0xb7,0x20,0x3f,0x2f,0x6e,0xc9,0x24,0xc8,0x25,0xb7 -,0xab,0x4d,0x3b,0x3a,0x46,0x49,0x50,0x17,0x33,0x19,0xb3,0x4c,0x23,0x2c,0x19,0xa9,0xca,0xa2,0x3b,0x40,0x24,0xd9,0xa3,0xbf,0xa4,0x2e,0xc5,0xb4,0xa8,0xc9,0x3b,0x1f -,0x48,0xa8,0xd9,0xac,0x1f,0xc3,0x5d,0xc9,0xc9,0x1b,0x29,0x1d,0xa3,0xae,0xa6,0x20,0x26,0xbf,0x3f,0xb4,0x1e,0xcc,0x28,0xde,0xa9,0xbf,0x48,0x32,0xac,0xaf,0x93,0x5b -,0xc9,0x32,0xc5,0x98,0xae,0x97,0x4b,0x43,0x4c,0xa8,0xc1,0x5f,0x1f,0xe5,0xad,0xcd,0x9b,0x23,0x2e,0x2a,0xb8,0xad,0x2b,0x20,0x13,0x2f,0x2b,0xb0,0x3d,0x20,0x3d,0x29 -,0xc2,0x2e,0x33,0x1c,0x56,0xb6,0x97,0x92,0xb0,0xb9,0xce,0x9b,0x9c,0xa1,0xeb,0x75,0xcb,0x92,0x9d,0xb3,0xd4,0x23,0x9f,0xa7,0xa2,0x44,0x1d,0x2f,0xb5,0xa2,0x41,0x3c -,0x1b,0x3a,0xcc,0xbc,0x2f,0x17,0x2b,0x25,0xab,0xba,0x35,0x1d,0x1a,0x3a,0xbe,0x6b,0x1d,0x1d,0x20,0xb2,0xa3,0xb3,0x24,0x2e,0x5a,0xbf,0x9c,0x2d,0x3d,0x37,0xbd,0x93 -,0x9d,0xad,0xdc,0x4a,0xa9,0x9b,0xb2,0x48,0x2a,0xed,0x9e,0xa0,0x9e,0x4b,0x1f,0xc9,0x4e,0xb7,0x41,0x1a,0x2f,0x3e,0xaf,0xb4,0x16,0x1a,0x1f,0x34,0xa7,0x28,0x33,0x26 -,0x30,0x9a,0xa6,0xb5,0xaf,0xc7,0xac,0x96,0x9e,0xb9,0xe2,0x4a,0x9b,0x9e,0xa5,0xb0,0x37,0x47,0xad,0xa0,0x39,0x27,0x1f,0x29,0xb2,0xaf,0x48,0x19,0x13,0x2a,0xda,0x26 -,0x1e,0x17,0x22,0xd8,0xae,0xbb,0x19,0x4f,0x38,0xa8,0xa7,0x2f,0x33,0x28,0xc7,0x99,0x9a,0x4b,0xec,0x2b,0xb7,0x9a,0xb2,0xc7,0x2c,0x42,0x9c,0xa3,0xdc,0x31,0x1d,0x35 -,0xaa,0xaf,0x43,0x1d,0x2e,0xa5,0x96,0x99,0xdb,0x46,0x35,0xac,0xa6,0x32,0x1e,0x17,0x41,0xbb,0x9c,0xcc,0x2b,0x28,0x3f,0x9d,0xaf,0x2b,0x1f,0x3b,0xb2,0x97,0xaa,0x26 -,0x2b,0x2f,0xa5,0xa3,0x25,0x1f,0x1c,0x3a,0x97,0x9a,0x39,0x38,0x1c,0xa9,0x9f,0xdc,0x3a,0x16,0x3d,0xaa,0x9c,0xad,0x38,0x1f,0xdf,0xd4,0xb2,0x38,0x10,0x2b,0x34,0x9d -,0x9f,0x22,0x1f,0x25,0x52,0xa0,0xbb,0x1d,0x30,0x20,0x9a,0x9e,0xce,0x4f,0x1e,0xb2,0xa5,0xa6,0x2a,0x1c,0x28,0x9f,0x90,0x9f,0xbd,0x26,0x4d,0xa8,0x99,0xb9,0x20,0x2b -,0x2b,0x95,0x9f,0xaf,0x34,0x1e,0xb7,0x9f,0xa9,0x2a,0x2b,0x49,0xa1,0x93,0x98,0x31,0x2c,0x3b,0xc6,0x9b,0x2c,0x16,0x1e,0x20,0x97,0x99,0x37,0x27,0x1a,0x21,0xb4,0x25 -,0x19,0x11,0x0f,0xb6,0xd8,0xaf,0x1b,0x17,0x2f,0xbe,0xa9,0x33,0x1a,0x1d,0xb5,0x97,0x95,0xc7,0x39,0x34,0xad,0x97,0xa7,0x2a,0x21,0x25,0x9b,0x96,0xac,0x3d,0x25,0x7c -,0x9a,0x9c,0xe7,0x2f,0x45,0xa1,0x8e,0x93,0x5f,0xb1,0x30,0x9e,0x8e,0x3e,0x2e,0x19,0x2a,0x97,0x95,0xab,0x3e,0x1c,0x29,0xa9,0x21,0x25,0x0f,0x20,0xbd,0x9e,0x9f,0x17 -,0x1a,0x20,0x65,0xab,0x2b,0x0d,0x19,0x1b,0xae,0x9a,0x1e,0x2f,0x1d,0x2f,0x9a,0x3f,0x35,0x1b,0x32,0xa2,0x8e,0xcf,0x49,0x2c,0x56,0x93,0xad,0xd3,0x15,0x27,0xb4,0x8e -,0x96,0xa7,0x35,0x25,0xaa,0x9a,0xae,0x1e,0x25,0x68,0x99,0x8f,0xa4,0xcd,0x3c,0xbc,0xaa,0xe2,0x19,0x15,0x23,0x48,0x91,0xbc,0x26,0x21,0x30,0xa0,0x9e,0x27,0x16,0x16 -,0x23,0x95,0x9d,0xab,0x55,0x29,0xba,0xad,0x41,0x14,0x15,0x1b,0x9d,0x9b,0x72,0x3d,0x24,0xac,0x9d,0x9b,0x1b,0x17,0x10,0x3b,0x96,0xa9,0xbc,0x1a,0x2e,0xbb,0xa0,0x2c -,0x17,0x1e,0x29,0x97,0x98,0xac,0x2c,0xb3,0xad,0x93,0x9b,0x16,0x2a,0x14,0x97,0x8f,0xad,0x33,0x37,0x4f,0x95,0x93,0x1d,0x21,0x0d,0x49,0x9d,0xa7,0xb5,0x30,0x3c,0xa5 -,0x9f,0x27,0x0e,0x0d,0x22,0xa3,0x91,0xb8,0x14,0x29,0x27,0x92,0xa1,0x1e,0x1e,0x1a,0xab,0x8e,0x93,0x37,0xa4,0x6c,0x99,0x96,0x23,0x1f,0x14,0x5f,0x94,0x93,0x30,0x2b -,0x2f,0xd8,0x8d,0xb6,0x1a,0x0d,0x1e,0xb8,0x8d,0xb7,0x26,0x20,0x1f,0x98,0x68,0x1f,0x0d,0x19,0x26,0xa1,0x9f,0x1d,0x25,0x43,0x9f,0x95,0xcb,0x13,0x13,0xeb,0x9d,0x86 -,0xc5,0x26,0xbf,0x3e,0x90,0x9b,0x21,0x0f,0x1d,0x2e,0x90,0xd0,0x25,0x24,0x2e,0x9a,0xa4,0x28,0x0d,0x15,0x46,0x99,0x96,0xbd,0x1e,0x43,0x95,0x8f,0x97,0x1c,0x0f,0x2c -,0x34,0x8f,0xaf,0x1f,0x35,0xc2,0xa7,0x9e,0x2a,0x10,0x1e,0x6a,0x8e,0xa1,0x26,0x20,0xbe,0x93,0x93,0xae,0x0e,0x0d,0x1e,0xbe,0x99,0xbb,0x25,0x27,0xa0,0x9c,0x8e,0x1e -,0x18,0x24,0x3f,0x98,0xb8,0x22,0x18,0xa4,0x9a,0x8f,0x38,0x13,0x0e,0x4b,0x9a,0x9e,0xbc,0x13,0xbe,0x9e,0x96,0x9b,0x22,0x14,0x1a,0xc8,0xae,0xa2,0x1b,0x30,0xa5,0x99 -,0x8f,0x24,0x16,0x14,0x9e,0xa0,0x9c,0x28,0x16,0xe4,0x9a,0x96,0xad,0x1a,0x0d,0x36,0x66,0x9e,0xc7,0x14,0x22,0xd4,0xad,0xb0,0x1a,0x11,0x1b,0xb8,0x9c,0xab,0x1f,0x1f -,0xbb,0x90,0x96,0xaa,0x1b,0x10,0xc4,0xa5,0xa4,0x9f,0x1b,0x56,0x97,0x9c,0x93,0x4d,0x1e,0xc7,0xa4,0xaa,0x9e,0x1a,0x36,0xaf,0x9c,0xaa,0x26,0x10,0x13,0x3b,0xae,0xbd -,0x34,0x18,0x28,0x95,0x9f,0x9b,0x2c,0x14,0x46,0x9f,0xac,0x9c,0x1c,0x2b,0xa3,0xa7,0xaa,0x1e,0x15,0x16,0x48,0xcd,0x48,0x29,0x1e,0x35,0x97,0x97,0xac,0x5f,0x11,0xb9 -,0x99,0xa6,0x99,0x1d,0xef,0x9e,0x9f,0xc1,0x26,0x0e,0x3b,0xb2,0xae,0xa1,0x1d,0x3f,0x5d,0x93,0xa2,0x5d,0x23,0x17,0xb0,0x9c,0x9b,0xa5,0x3d,0x29,0x98,0x9f,0x3f,0x2b -,0x08,0x2c,0xe7,0xb7,0x4b,0x1d,0x26,0xb8,0x9c,0x54,0xc3,0x10,0x25,0xd5,0xa6,0xc1,0x37,0x25,0x22,0x9b,0xb8,0xe5,0x1e,0x16,0xbe,0xa5,0x9f,0xa9,0xb1,0x35,0x97,0x99 -,0xc8,0xbc,0x16,0xce,0xb1,0x9a,0xbc,0x54,0x1e,0xbd,0x95,0xba,0xae,0x1b,0x20,0x32,0xa3,0x48,0x36,0x23,0x17,0xad,0x3c,0xdf,0x2c,0x19,0x27,0xa9,0xb0,0x3e,0xbe,0x17 -,0xae,0xa8,0xa6,0x43,0x1e,0x25,0xac,0x9b,0xc7,0x9d,0x1e,0x60,0xa0,0xb5,0xca,0x36,0x2a,0x43,0xa7,0x50,0xb3,0x2e,0x28,0xa1,0xa6,0xa6,0x31,0x2f,0x15,0xa1,0x9e,0xba -,0xbe,0x20,0xc6,0xaa,0x9f,0x55,0xaf,0x1c,0xb2,0xa7,0x47,0xaa,0x2f,0x4b,0xb9,0xa1,0xd1,0x3d,0x29,0x22,0xa2,0x38,0xca,0x2f,0x1e,0x34,0xb8,0x73,0x28,0x2e,0x13,0xc5 -,0x2e,0xba,0x46,0x25,0x46,0xca,0xac,0x34,0xb5,0x25,0xca,0xaa,0xb8,0xda,0x44,0x2f,0x2b,0x9b,0x2b,0xb0,0x2d,0x2a,0xa1,0xcb,0xb1,0xb0,0xde,0x3d,0x9f,0xd0,0xab,0xae -,0x5e,0xc5,0xa0,0xa4,0xec,0xcc,0x26,0x3e,0xba,0x29,0xce,0x2e,0x2d,0xbc,0xb3,0x3a,0xcc,0x48,0x38,0x9b,0xdc,0x9f,0x66,0x32,0xb6,0xbb,0xc7,0x4e,0xdd,0x26,0xb5,0x5a -,0x36,0x37,0x1f,0x2e,0x2f,0xb4,0x28,0xbb,0x21,0x49,0xa7,0x31,0x36,0x30,0x26,0x3b,0x9f,0x24,0xa5,0x27,0x2f,0xa7,0x4a,0xbe,0xdf,0x6f,0xb8,0xa5,0xcb,0x2e,0x79,0x36 -,0xb0,0xb9,0xbd,0x4c,0xc5,0x54,0xc3,0x9e,0x26,0x9d,0x2f,0xde,0xaf,0x47,0x2f,0xd7,0x2a,0xcf,0xa5,0x22,0xb4,0x38,0x3a,0xaf,0x61,0x3a,0x3d,0x79,0x2c,0xaf,0x53,0x36 -,0xaf,0x2b,0xbc,0x4b,0x3a,0x24,0x9e,0x2d,0xb9,0xa3,0x4a,0x9b,0xb7,0xb9,0xbc,0xaf,0x32,0xa4,0x40,0xc8,0xa2,0x43,0xab,0xc9,0x4f,0xe3,0xb3,0x55,0xdb,0xaf,0x2a,0xb4 -,0x30,0x4a,0xc3,0x3f,0x2f,0xda,0x2f,0x1a,0xce,0x19,0x31,0x44,0x2e,0xc4,0x31,0x22,0x38,0x4c,0x25,0xc1,0x2d,0x21,0xb6,0xf8,0x7b,0xdb,0xc9,0x35,0x9f,0x72,0xad,0xa7 -,0x26,0xa8,0xbd,0xde,0xc8,0xaf,0x2a,0x9e,0xca,0x36,0xb6,0x28,0xd4,0xbe,0xa5,0xac,0xa2,0x40,0xb6,0xa4,0x2f,0xc8,0xbb,0x37,0xb8,0x9b,0x6a,0xbc,0x42,0x50,0x9b,0x3f -,0xd4,0xbb,0x25,0x3d,0xa4,0xe3,0xdd,0xdc,0x27,0xce,0x36,0x2e,0x30,0x20,0x21,0x33,0x55,0x2f,0xbc,0x30,0x2f,0xbc,0x2b,0x37,0x3e,0x29,0x39,0xa2,0x40,0xb8,0x29,0x2b -,0xaf,0x4c,0x69,0xbd,0x51,0x2b,0xa8,0xbc,0xaf,0xf5,0xd1,0xb9,0xd4,0x3d,0x67,0x57,0x29,0xba,0x9a,0x76,0xac,0xcc,0x76,0xba,0xcd,0xb4,0xaf,0x26,0x2b,0xa5,0x43,0xbc -,0x38,0x3f,0x46,0xea,0xdd,0xaf,0x42,0x36,0xbe,0xae,0xd7,0xb6,0xd1,0x5c,0xcb,0xb9,0x3b,0xbc,0x2b,0x3f,0x9f,0x62,0xae,0x48,0x4f,0x47,0xb1,0xc8,0xa1,0x2d,0x2b,0xcf -,0x3c,0x3b,0x3e,0x2e,0x3a,0x5a,0x5f,0x38,0x2d,0x1d,0x43,0xbc,0xd0,0xf9,0x46,0x48,0x3c,0xaa,0xce,0xa7,0x1c,0x3d,0xbb,0xc3,0xdc,0xb7,0x6d,0x2e,0x5b,0x6a,0xa5,0x3e -,0x2f,0xb2,0xca,0x4d,0xe8,0xd4,0x41,0xd8,0xb9,0xb9,0x6f,0x1e,0xdd,0x4b,0xb5,0xab,0xa6,0x3a,0x3c,0x7e,0x4e,0xb7,0x2c,0xd1,0xc9,0xaf,0xce,0xbb,0xe0,0x35,0xac,0xb2 -,0xa1,0x32,0x29,0x44,0xc0,0xc5,0xaf,0xb5,0x25,0xc6,0xfb,0xa8,0x77,0x2e,0x34,0x4e,0x5f,0xc2,0xa8,0x3f,0x3c,0x30,0xd0,0xc4,0x2d,0x3d,0x68,0xb5,0x3c,0xb9,0x4c,0x28 -,0x47,0xc8,0xa3,0x46,0x42,0x22,0xc6,0x2d,0xb9,0xb2,0x2b,0x63,0xf8,0xb1,0x3b,0x3d,0x24,0xa8,0x68,0xc2,0xa6,0x26,0x25,0x3d,0xb7,0xbe,0x4e,0x2a,0x44,0xda,0x2e,0xa0 -,0xe7,0x40,0xcf,0xab,0xa8,0xa8,0xb0,0x30,0xa8,0x2a,0xa6,0xab,0x4c,0x3e,0xb4,0x51,0xed,0xc9,0x1a,0xb0,0x3d,0xf6,0x9e,0x35,0x22,0x43,0x4e,0xcc,0xa1,0x24,0xbd,0xc2 -,0x22,0xaa,0x34,0x1f,0x34,0xa8,0x42,0xa7,0x38,0x27,0xbc,0x32,0xa7,0xa2,0x2c,0x28,0xaa,0x3a,0xad,0xa5,0x1c,0xb6,0x3a,0x3f,0x9e,0xe0,0x21,0x44,0x59,0x6b,0x96,0x2c -,0xc5,0xf5,0x2d,0xb4,0xa5,0x29,0x37,0xa2,0x2e,0x9a,0xdd,0x1f,0xd5,0x2d,0x67,0x9c,0x2c,0x1b,0xaf,0x28,0xae,0xa6,0x1a,0xd5,0x36,0x47,0xa6,0xbc,0x16,0x49,0xb2,0x68 -,0x99,0x34,0x22,0x2e,0x34,0xc1,0x98,0x1d,0x1c,0xa0,0x29,0x96,0x9f,0x25,0x48,0x2a,0x44,0x91,0xb4,0x1e,0x9e,0x28,0xab,0xa2,0x24,0x2f,0x59,0x56,0xa1,0x9f,0x16,0x3d -,0xcb,0x51,0x92,0xb6,0x1a,0xfb,0xde,0x74,0x8f,0x26,0x1c,0x9e,0x24,0x97,0xa8,0x12,0x21,0x53,0x1c,0x92,0xb7,0x0d,0xcc,0x24,0xb1,0x97,0x32,0x1c,0xc9,0x1b,0xa4,0x8e -,0x14,0x27,0xbe,0x1f,0x9a,0xa5,0x1d,0xd7,0x6b,0x28,0x89,0x28,0x11,0xb7,0x1e,0xa5,0x92,0x23,0x1b,0xaa,0x1f,0x8d,0x98,0x16,0xbf,0xd8,0xd4,0x8d,0xb7,0x14,0xbc,0x29 -,0xa8,0x8c,0x12,0x1d,0x3c,0x23,0x9a,0x94,0x18,0x2b,0x48,0x2f,0x88,0xd5,0x17,0x38,0x25,0x3d,0x8f,0x2c,0x15,0xea,0x1e,0x9d,0x9a,0x18,0x4e,0x37,0x2f,0x91,0xa2,0x10 -,0x51,0x20,0xcf,0x8e,0x1f,0x1c,0x1e,0x1d,0xbc,0x94,0x16,0x29,0x41,0x56,0x8c,0xae,0x1e,0x44,0x34,0xb0,0x89,0xec,0x1e,0xb4,0x1b,0x98,0x8d,0x1f,0x38,0x4f,0x29,0x92 -,0x9b,0x15,0x6f,0x13,0xcd,0x8c,0x2d,0x35,0x43,0x15,0x42,0x90,0x1c,0x35,0x48,0x28,0x8c,0x9f,0x13,0x20,0x25,0x1c,0x8c,0x60,0x15,0x69,0x12,0x9f,0x8b,0x29,0x2a,0xbd -,0x1e,0x96,0x97,0x13,0x51,0x1d,0xca,0x8b,0xb8,0x1f,0x36,0x1d,0x4c,0x8e,0x21,0x2c,0x28,0x2c,0x97,0x97,0x31,0xd2,0xd5,0x1d,0x8d,0xa8,0x1d,0xbf,0x1e,0xbe,0x93,0x45 -,0x2e,0xcd,0x1b,0xa6,0xa5,0x11,0x3e,0x20,0x3b,0x95,0xa1,0x1d,0xe2,0x1b,0x28,0x94,0x1a,0x2c,0x3e,0x19,0x6d,0x9a,0x22,0x36,0xd3,0x19,0x9a,0xba,0x1f,0xa8,0x30,0x39 -,0x8e,0xaf,0x30,0x93,0x23,0xab,0x90,0x30,0x5a,0x4b,0x2a,0xac,0x96,0x25,0x9c,0x20,0x12,0x9a,0x37,0x1f,0xbf,0x23,0x39,0x90,0x3f,0xb2,0xbd,0x1e,0x99,0xa2,0x1b,0x2d -,0x35,0x18,0x9f,0xa6,0x24,0x9a,0x1c,0x53,0x9e,0x23,0x28,0xaa,0x1f,0xb9,0x96,0x21,0xa9,0x2a,0x26,0xaa,0xba,0x1f,0x4f,0x1a,0x1f,0x9c,0x38,0x55,0xe4,0x27,0xaf,0xa1 -,0xa2,0x6f,0xc4,0x26,0xae,0xb8,0x23,0xcc,0x39,0xe3,0xbe,0xa6,0xbc,0x99,0x2f,0xb1,0x75,0x2e,0xae,0x13,0x1a,0xd9,0x93,0x90,0xbe,0x1f,0x1c,0x23,0x18,0x21,0x1d,0x49 -,0x4e,0xac,0x8b,0x92,0x9a,0x9d,0xa0,0x11,0x1b,0x0f,0x04,0x21,0x86,0x84,0x93,0x9e,0x0f,0x10,0x43,0x97,0x9f,0x27,0xb5,0x1c,0x0d,0xa9,0x88,0x8e,0x9f,0xcb,0x15,0x08 -,0x1a,0x91,0x9b,0x93,0xb7,0x18,0x0e,0x0c,0x1c,0x1c,0xae,0xa8,0x1e,0x01,0x09,0xbf,0x88,0x80,0x8e,0xc7,0x12,0x36,0x35,0xa1,0x8e,0xe9,0x2c,0x9d,0x8c,0x50,0x11,0x23 -,0xd3,0x08,0x0a,0x30,0x0e,0x0f,0x9b,0x85,0x95,0x3e,0x0d,0x0e,0x9b,0x80,0x83,0x20,0x3f,0xbe,0x2f,0xbf,0xac,0xa9,0x17,0x2f,0x2f,0x2c,0x24,0x22,0x16,0x26,0x9a,0xc9 -,0x0b,0x1b,0x8e,0x89,0x98,0x6f,0x22,0x06,0x1c,0x89,0x84,0x90,0xf8,0x23,0x18,0x1e,0x33,0x1f,0xa0,0x2c,0x1f,0x75,0x9e,0x8c,0x96,0x90,0x35,0x0c,0x05,0x0c,0x09,0x2b -,0x89,0x8b,0xe8,0x0a,0x0b,0x10,0x21,0x93,0x82,0x38,0x08,0xbc,0x9c,0x8c,0x8b,0x8b,0xbe,0x2d,0xca,0x1e,0x22,0x29,0xa2,0x2b,0x12,0x1c,0x28,0x12,0xaf,0x93,0x9c,0xbf -,0x0f,0x04,0x1f,0x87,0x80,0x8d,0xa5,0xa6,0x3c,0x12,0x1e,0x9f,0xa6,0xac,0xc7,0xdb,0x20,0x25,0x1e,0xcc,0xcf,0x1d,0x0c,0x05,0x13,0xac,0x8c,0x9a,0xc1,0x3e,0x14,0x20 -,0xca,0x9b,0x8e,0x9e,0xa7,0xc8,0xfa,0x18,0x40,0x91,0x9f,0x14,0x18,0x3f,0x97,0x98,0x96,0xa7,0x1d,0x0e,0x09,0x11,0x3e,0x93,0x9c,0x93,0x8d,0x9e,0x1a,0x18,0x9e,0x90 -,0x4a,0x3b,0x18,0x0f,0xc8,0x91,0x92,0x9d,0xb4,0x22,0x0b,0x14,0x26,0x1f,0x11,0x36,0x8f,0x8f,0x35,0x27,0xb6,0xbf,0xad,0x0f,0x0d,0x1b,0xa5,0x86,0x84,0x8e,0xa0,0x13 -,0x14,0x20,0xd0,0x4a,0xe2,0x28,0x28,0x9e,0xc5,0x49,0xbd,0xa9,0x1c,0x0c,0x0f,0x44,0xaf,0x90,0x99,0x95,0x54,0x0b,0x0f,0x28,0x90,0x96,0xc0,0xa8,0x23,0x1a,0xb1,0x8a -,0x8c,0x4d,0x2c,0x27,0x2e,0x9d,0x90,0xaa,0xac,0x19,0x0e,0x0a,0x18,0xa2,0x9a,0x3a,0x1e,0x1d,0x0d,0x07,0x39,0x85,0x82,0x8d,0x2f,0x16,0x28,0xe6,0x97,0x8c,0x9e,0x36 -,0x0e,0x33,0xad,0xd6,0x31,0x27,0x1e,0x14,0x10,0x0e,0x20,0x9b,0x8b,0x9a,0x1b,0x14,0x25,0x94,0x84,0x83,0x8e,0x1d,0x0e,0x2a,0xc3,0xa0,0x9c,0xca,0xaa,0x11,0x11,0x0b -,0x2e,0x99,0x3f,0x2c,0x15,0x10,0x17,0xbb,0x8d,0x8e,0xac,0x2f,0x0b,0x13,0xb1,0x8b,0x8a,0x96,0xb0,0x1a,0x14,0x38,0xbf,0xa7,0xad,0x9f,0xc3,0xcc,0xac,0xa1,0x94,0x9b -,0x1c,0x05,0x0b,0x1a,0xa3,0x9e,0xa1,0xd0,0x1b,0x0c,0x12,0xbf,0x98,0x8f,0x99,0x4e,0x2e,0x36,0xa2,0x9a,0x90,0x9b,0x24,0x23,0x2e,0x22,0x34,0xcc,0x26,0x1a,0x1a,0x32 -,0x13,0x24,0xbe,0x52,0xba,0x38,0x2a,0x3c,0x9b,0x84,0x8a,0x96,0xeb,0x2c,0x43,0x36,0x39,0xae,0xbe,0x47,0x26,0x1a,0x5d,0x3e,0xa6,0x28,0x16,0x0f,0x14,0x34,0xa9,0x8d -,0x8d,0x9b,0x36,0x0c,0x0e,0xcf,0x93,0x8d,0x91,0xb5,0x2d,0x3d,0xb8,0xcc,0x26,0x4c,0x44,0xc0,0x5c,0xaf,0xc9,0x9d,0xae,0x1b,0x13,0x10,0x23,0xb9,0x98,0x9f,0x52,0x17 -,0x0e,0x12,0xba,0x93,0x95,0x9c,0x35,0x34,0x2f,0xb2,0x97,0x9e,0x9c,0x37,0x3b,0x26,0x25,0xb4,0xab,0x44,0x28,0x12,0x12,0x1b,0x35,0xb3,0xae,0xa5,0x4c,0x1f,0x26,0x9e -,0x8e,0x97,0xae,0xbb,0xcb,0xa9,0x71,0xc2,0x6c,0xbb,0xc0,0x33,0x4a,0xb2,0xb6,0xad,0x2a,0x14,0x16,0x15,0x40,0xae,0x99,0x9e,0xab,0x30,0x12,0x13,0x2f,0x9f,0x8a,0x96 -,0xa8,0x58,0x2f,0x2b,0x1d,0x2e,0x41,0x2c,0xbf,0xbb,0xa5,0x9f,0xda,0x5d,0x1b,0x1d,0x1a,0x32,0xb5,0x9f,0xb1,0xef,0x2b,0x2f,0x33,0xbc,0x9d,0xa6,0xa2,0x39,0x43,0xcc -,0xa2,0x9c,0xaf,0xb8,0x34,0x2e,0xcf,0xca,0xc8,0x2d,0x1c,0x20,0x2a,0x2e,0x1f,0x1f,0x42,0xaf,0x99,0xc5,0x27,0xdf,0xb5,0x97,0x99,0xa8,0xae,0xb5,0xa7,0x33,0x2f,0x27 -,0x27,0xce,0x3f,0xd1,0xd0,0xba,0xaf,0x27,0x1b,0x21,0x23,0xba,0xbe,0xb7,0xa2,0x54,0x5f,0x1b,0x1e,0xae,0xa9,0x9e,0xba,0xaf,0x64,0x47,0x2c,0x1f,0x29,0x5a,0xbc,0xb2 -,0x9c,0xc2,0xec,0x30,0xc4,0x5e,0x49,0x20,0x1c,0xbf,0xc2,0x9f,0xb5,0x30,0x2a,0x2c,0xc9,0xa7,0x9e,0xa0,0xad,0xaf,0xb0,0xb7,0xa6,0xac,0x6a,0x2c,0x1a,0x34,0x2e,0xb8 -,0x41,0x1a,0x2b,0x1c,0x22,0x1c,0x35,0xab,0xac,0xac,0xc7,0x3d,0xad,0xa0,0x9c,0xa5,0xdf,0xb3,0xb0,0xbb,0x28,0x1e,0x4b,0x48,0xa0,0xb9,0x2b,0x2f,0x3b,0xa8,0x4e,0x39 -,0x2f,0x29,0x43,0xd8,0xbb,0xa2,0xcd,0x3a,0x1a,0x21,0xb4,0xa8,0x9b,0xa9,0xca,0xbe,0x2c,0x24,0x2a,0xbf,0xa9,0xe4,0xb9,0x48,0xae,0xa5,0xb3,0x47,0x2c,0x24,0x21,0x1f -,0xc9,0xba,0xcf,0xba,0x28,0x52,0x2f,0x36,0xcb,0x3e,0xa5,0xa3,0x9a,0xb5,0x40,0xa4,0x9e,0xb3,0x38,0x1c,0x23,0xbe,0xc3,0xaa,0x20,0x40,0x27,0x19,0x1e,0x1f,0xcd,0xb8 -,0xc4,0x3d,0x73,0xa3,0x9d,0x9c,0x9a,0xbe,0xfb,0x32,0x2c,0x2a,0x36,0xbf,0xc4,0xbe,0x4e,0xec,0xa3,0xb3,0xc7,0x18,0x15,0x23,0x2a,0xa0,0xaa,0xae,0xa2,0xaf,0x74,0x28 -,0x26,0x4a,0xba,0xa5,0xa5,0xac,0xab,0x4b,0xdf,0x6e,0x34,0xc7,0x1d,0x30,0x30,0xae,0x94,0xa7,0xb9,0x2c,0x23,0x1e,0x1d,0x1f,0x33,0x38,0x45,0x19,0x2c,0xb3,0x9f,0x8f -,0xae,0xc9,0x60,0x47,0xa7,0xa9,0x98,0x97,0xce,0x2b,0x21,0xcf,0xab,0xcf,0x21,0x0e,0x18,0x1a,0x1f,0xd0,0x41,0xab,0xa7,0xc6,0xc2,0x2e,0x44,0xaa,0xa9,0x9d,0xbc,0xa2 -,0xb6,0xca,0xc3,0x2d,0x5a,0x31,0x33,0x2c,0x27,0xaf,0x99,0xab,0xab,0x3e,0x34,0x23,0x28,0x3a,0x3d,0xb5,0x53,0x30,0x2c,0x54,0x96,0x93,0x9e,0xb6,0x21,0x2e,0xcc,0x4e -,0xd3,0xf4,0x64,0xc6,0x2d,0xbc,0xa6,0xa1,0x7b,0x1e,0x24,0x1e,0xdd,0x2c,0x26,0xae,0xb2,0xae,0x1e,0x16,0x1f,0x40,0xcc,0xb6,0xb8,0xa5,0x9e,0xa5,0x9e,0xa9,0x9c,0x32 -,0x28,0x18,0x1e,0x73,0xce,0xad,0x56,0x59,0x2c,0x22,0x1a,0x2b,0xb9,0xac,0xfb,0x2f,0x26,0xbc,0x8e,0x90,0x93,0x73,0x2c,0x26,0x25,0xb5,0xac,0xa9,0xd1,0x40,0x3a,0xfc -,0xb4,0x4e,0x2e,0x28,0x1c,0x2d,0x2e,0x2d,0xad,0xa0,0x9b,0x9e,0x2a,0x1f,0x24,0xbf,0x9f,0xb2,0xb2,0x35,0xad,0xb6,0x72,0xb3,0x3a,0x4e,0x27,0x1e,0x39,0xbb,0xa4,0x95 -,0xa5,0x9e,0xce,0x25,0x18,0x17,0xab,0x57,0x3e,0x10,0x0f,0x35,0xa8,0x97,0xa3,0x45,0x39,0x40,0xb7,0xa3,0xb2,0xa4,0xca,0xc5,0xbc,0xb2,0xc0,0x20,0x1f,0x1d,0x25,0x2b -,0x1c,0x1d,0x40,0xab,0x97,0xa3,0x3c,0x34,0x38,0xa1,0xb0,0xa9,0xbe,0x62,0xa1,0xa2,0x9e,0xb0,0x43,0x59,0x2d,0x37,0x37,0x1b,0x4b,0xb5,0xa9,0xab,0x41,0x1e,0x18,0x28 -,0xb2,0xae,0xdf,0x1b,0x1c,0xaa,0x92,0x8c,0xa1,0x27,0x26,0x4c,0xa8,0xc9,0x2b,0x20,0x30,0xc3,0x9f,0xa3,0xaa,0x69,0x2e,0x2f,0x4f,0x78,0x1e,0x24,0x2c,0xaf,0xad,0xc9 -,0x1b,0x17,0x33,0xb5,0xbf,0x27,0x33,0xac,0x90,0x8d,0x97,0xae,0x5a,0x49,0x4a,0x39,0x21,0x1c,0x2d,0x65,0xae,0xa7,0x3d,0x15,0x17,0x28,0xb8,0xd2,0x1e,0x14,0x1f,0x9c -,0x8c,0x90,0xa3,0x3a,0xc8,0xa1,0x9e,0xbc,0x23,0x1e,0xda,0xa5,0x99,0xac,0x24,0x2e,0x19,0x42,0x3d,0x28,0x22,0x1d,0xad,0xa7,0x9a,0xa9,0x2d,0x3e,0xbf,0xaa,0xd0,0x1c -,0x28,0xb8,0x9b,0x9a,0x3e,0x27,0x2a,0x4c,0xb4,0x3b,0x1c,0x24,0xbe,0x9c,0x97,0x9c,0xdb,0x1b,0x24,0x49,0xb1,0x42,0x10,0x0f,0x1e,0xa1,0x97,0xad,0x37,0x2a,0x9e,0x8f -,0x93,0x5e,0x2b,0x2b,0xe3,0x9d,0x9f,0xab,0x36,0x2f,0x21,0x40,0x21,0x19,0x1c,0x22,0xc5,0xad,0xad,0x28,0x30,0xbc,0x9e,0xae,0x2b,0x25,0x39,0xa4,0x96,0x9d,0xd2,0xcf -,0xb6,0x9e,0xaa,0x23,0x1c,0x19,0x43,0xa7,0xa2,0xda,0x21,0x24,0x57,0xaa,0xc8,0x2d,0x0f,0x1c,0xe4,0x95,0x94,0xb8,0xe1,0x34,0xa1,0x9a,0xc4,0x1f,0x14,0x1f,0x76,0xa9 -,0xaa,0xc4,0xad,0xa7,0xb1,0xc4,0x2a,0x1b,0x2c,0x36,0xb0,0xb7,0xcf,0x2e,0x22,0xee,0x5c,0x3c,0x1d,0x24,0xd1,0x94,0x95,0xa6,0xbc,0xba,0x9a,0x99,0xb5,0x1c,0x13,0x31 -,0x45,0xac,0xac,0x2a,0x1f,0x1f,0x30,0xc9,0x30,0x1c,0x16,0x19,0xab,0x9e,0x9a,0x4a,0xbd,0xb0,0x99,0x9f,0xe9,0x3e,0x2d,0xac,0xa6,0xa5,0x37,0xc0,0x5c,0xb1,0xb1,0x46 -,0x26,0x17,0x24,0x38,0xc5,0xb2,0xba,0xc5,0x5d,0xc8,0x3c,0x24,0x2b,0xe3,0xa5,0x99,0xb4,0x29,0x24,0x4e,0x9c,0x9c,0xd0,0x1d,0x17,0x2f,0xad,0x9c,0xab,0x3b,0x4b,0x34 -,0xbb,0xc1,0xdf,0x21,0x17,0x27,0xbf,0xb7,0xa7,0xbb,0x43,0xa9,0xab,0xa3,0x2b,0x2b,0xc5,0xb4,0xad,0xbc,0xfa,0x47,0xb6,0xb5,0xaf,0x29,0x22,0x24,0x1b,0x30,0x38,0xb6 -,0x5a,0x3e,0xbd,0x5f,0x49,0x28,0x2f,0xcf,0xad,0x96,0xb4,0xcd,0xc4,0xab,0xa2,0xb7,0x35,0x1b,0x29,0x43,0xb6,0x7c,0x57,0x24,0x32,0x41,0xb3,0xb4,0x4a,0x36,0x2f,0xb5 -,0xb1,0x9e,0xa6,0xb9,0xbf,0xa6,0xa6,0x2c,0x25,0x21,0x2b,0xb9,0xb0,0xae,0xda,0x3d,0x49,0xbc,0xec,0x42,0x47,0x42,0x59,0x34,0x33,0x39,0x3c,0x43,0xca,0xd4,0x3d,0x31 -,0x2e,0xaf,0xb0,0x9c,0xa6,0x4f,0x39,0xd0,0xa3,0xb4,0xde,0x2d,0xc7,0x40,0xba,0xb6,0x77,0x2a,0x23,0x3c,0x26,0x36,0x31,0x7e,0x36,0x43,0xd2,0x5b,0xd3,0x41,0xa6,0x9f -,0xa5,0xf1,0x3f,0x3f,0xe5,0xc9,0xcc,0xcb,0x2c,0xca,0xca,0xaf,0xbf,0x31,0x33,0x2a,0x36,0xbf,0xb4,0x5c,0x46,0xdb,0xaf,0xcc,0xe8,0xab,0x5a,0x4c,0x57,0xc9,0xcb,0x3c -,0xcc,0xbc,0xbc,0x35,0x3e,0x2f,0x3a,0xca,0xb1,0xa8,0x3b,0x59,0x37,0xc9,0x6f,0x45,0x70,0x28,0x2f,0x23,0xbf,0xb5,0xc9,0xae,0xc7,0xd1,0x4f,0x4b,0xbc,0xbd,0x5e,0xa7 -,0xb2,0xe8,0x67,0xf2,0xbf,0x3a,0xde,0xbc,0xc7,0x2b,0x3a,0x31,0x2d,0x3a,0x5d,0xa6,0x3c,0x2f,0x23,0x25,0x48,0xad,0x98,0x9e,0xb3,0x2f,0x37,0x34,0x73,0xac,0xaf,0xad -,0x35,0xde,0xb6,0xc7,0x48,0x34,0x31,0x3b,0x37,0x47,0xb4,0x2a,0x3a,0x43,0xfb,0x5d,0x36,0xf0,0x38,0x2e,0x36,0xb4,0xe2,0xc1,0xae,0xa5,0xa2,0xad,0x9c,0xb8,0x4e,0x3e -,0xb5,0xb3,0xb7,0xb6,0xe5,0x50,0x1a,0x23,0x29,0x2e,0x33,0x32,0x44,0x34,0x35,0x3c,0xf8,0x3d,0xc8,0xaf,0xa9,0xaf,0x3a,0x5c,0x66,0xb4,0x9c,0x97,0x98,0xba,0x2c,0x2a -,0x24,0x24,0xc6,0xc6,0x75,0x3b,0x2c,0x2d,0x1d,0x2b,0x34,0xde,0x49,0x45,0xd8,0xd4,0xb1,0xad,0x99,0xb4,0x63,0x53,0xb6,0xac,0xd9,0xb2,0xdb,0xbd,0x43,0xb7,0xb3,0xcf -,0x3e,0x26,0x33,0x21,0x2b,0x4d,0xdc,0xdc,0xb3,0xbf,0x2a,0x18,0x1e,0xf9,0xcf,0xaa,0xa5,0xb5,0xdb,0xca,0xa3,0x9c,0xa4,0xc1,0xc9,0x36,0x2e,0x50,0x57,0xf9,0x47,0xdd -,0x58,0x32,0x1d,0x1d,0x26,0x23,0xca,0xc6,0xaf,0xc9,0x33,0xd1,0xb6,0xb0,0x67,0xbc,0xb7,0xb4,0xb8,0x9e,0xaa,0xbc,0xb5,0x69,0x71,0x2b,0x43,0x39,0x2d,0x29,0x4e,0xcd -,0x5f,0x6c,0xce,0xb5,0x34,0x48,0x59,0x3b,0xda,0xce,0xb4,0xb2,0xb2,0xbf,0xcc,0x31,0x2b,0x59,0xdb,0xad,0xd9,0xdf,0xb8,0x37,0x37,0xcf,0xc4,0x33,0x2c,0x2c,0x3d,0x2a -,0x3a,0xab,0xb7,0xab,0x5d,0xce,0x38,0x2c,0x58,0xc5,0xd3,0x7d,0xb0,0xbc,0xa8,0xb6,0xb2,0x44,0x26,0x47,0xdc,0xb1,0xca,0xd5,0x33,0x62,0xbf,0xae,0xae,0x30,0x24,0x20 -,0x55,0xca,0xc7,0xe8,0xba,0x5b,0xe4,0xab,0xc7,0x79,0x23,0x29,0xf7,0xd8,0xb6,0xa5,0xa7,0x5f,0x46,0x3c,0x40,0x3c,0x3e,0xcf,0x36,0x4a,0x4b,0xb1,0xae,0xb6,0xbd,0x4f -,0x27,0x25,0x49,0x3a,0xbf,0x45,0xb8,0xbc,0x45,0xb5,0xbe,0xcf,0x3d,0x6b,0x6e,0xbe,0x3e,0xb9,0xad,0xd1,0xb4,0x32,0x3e,0x2b,0x2e,0x4a,0xc8,0xbd,0xe5,0xc0,0xbb,0xaf -,0xbc,0xaf,0xde,0x2d,0x28,0x28,0x3c,0x6e,0xac,0xb8,0xbb,0x39,0x32,0xda,0x51,0xbc,0xdf,0xbe,0x46,0x59,0xaa,0xa2,0xcb,0x3a,0x2e,0x23,0x2d,0x29,0xc3,0xca,0x2a,0xc0 -,0xc3,0xb7,0xad,0xc7,0xfd,0x28,0x2a,0xeb,0xb5,0x6d,0xdb,0xda,0xb7,0xaf,0xb6,0xb6,0x65,0x3f,0x39,0x2e,0x51,0xbb,0xbc,0xae,0xbd,0xf3,0x45,0xc5,0x40,0x38,0x4d,0x72 -,0xdc,0x48,0xaf,0xae,0xab,0xc7,0x58,0x50,0x2c,0x2e,0x42,0xfe,0x3b,0xbe,0xb5,0xcd,0x4a,0x3b,0x58,0x2e,0x2b,0x3d,0xbf,0x3e,0x5f,0xb4,0xaf,0xb3,0xd0,0xf9,0x35,0x25 -,0x36,0xdb,0x58,0xe6,0x3d,0x57,0xd7,0xd7,0xae,0xb2,0xdd,0x75,0x2f,0xd9,0xbf,0xa8,0x9e,0xae,0xcb,0x37,0x33,0x5e,0x3c,0x27,0x3c,0x29,0x43,0xb4,0xb1,0xb3,0x44,0x4a -,0xcc,0x38,0xd9,0xce,0x58,0x46,0x4d,0xa7,0x99,0xb3,0x36,0x40,0x34,0x3c,0x50,0x3b,0x31,0x34,0xda,0xa2,0xab,0xbc,0x5e,0x66,0x30,0x3c,0x3f,0x41,0x36,0x4e,0xad,0xc4 -,0xad,0x50,0x37,0x4c,0x46,0x3e,0x2f,0x27,0x3c,0xa3,0x9a,0xa5,0xd6,0x40,0xde,0x67,0xdf,0x39,0x2b,0x34,0x48,0xa2,0x9d,0xb5,0x40,0x2c,0x1c,0x28,0x38,0x3f,0x3d,0x2f -,0xbc,0x9f,0x9c,0xbd,0x3b,0x37,0x43,0x3f,0x3b,0x3b,0x2c,0xad,0xa9,0xa8,0xb7,0xd5,0xc5,0x2e,0x29,0x28,0x3e,0x48,0xbc,0xb7,0xad,0xc7,0xcc,0xb7,0x54,0x56,0x40,0x2b -,0x23,0x3e,0xae,0x9b,0x9f,0x3f,0x47,0x6e,0x72,0x3d,0x1e,0x28,0x32,0xbc,0xa4,0x9e,0xb2,0xa9,0xb4,0xbc,0x6e,0x28,0x43,0x2b,0x44,0xbc,0xa8,0xac,0x75,0x2f,0x31,0x34 -,0x24,0x25,0x1e,0x5a,0xae,0x9e,0xa6,0x2e,0xc2,0xad,0xaa,0x48,0x23,0x26,0x30,0xbd,0xb2,0xab,0x4b,0x36,0xe3,0xae,0xd0,0x29,0x24,0x1a,0x3e,0xa9,0x93,0x9b,0xbd,0x39 -,0x4c,0xaf,0x4c,0x2e,0x1d,0x26,0x2b,0xb8,0xaa,0xb3,0xaf,0xb7,0xab,0x39,0x28,0x20,0x3b,0xba,0xb9,0x9f,0xba,0xc5,0xb5,0xac,0x6d,0x2e,0x1b,0x1d,0x32,0x66,0x9f,0xac -,0xbb,0x34,0xbb,0xae,0x3f,0x26,0x21,0x54,0xd6,0x9d,0xa6,0xc3,0x70,0xc0,0xa0,0xf4,0x27,0x14,0x21,0x33,0x64,0xa6,0xa3,0xae,0xcd,0xad,0xb4,0xc8,0x26,0x24,0x22,0x35 -,0xc3,0xba,0xa6,0xaf,0xa8,0xaf,0x31,0x15,0x1a,0x29,0xd9,0xa7,0xb1,0xab,0xdd,0xaa,0x9a,0xaf,0x28,0x17,0x1f,0x39,0xcc,0xb5,0xac,0x5d,0xd3,0xa8,0xa2,0xbc,0x19,0x18 -,0x22,0xc6,0xae,0x9d,0x9f,0xde,0xb0,0xab,0xa8,0x31,0x1c,0x17,0x2c,0x52,0xd1,0xa8,0xac,0x9e,0x9d,0xa5,0x35,0x19,0x1c,0x23,0x30,0x2e,0xce,0xc0,0xb8,0xa0,0x9a,0xa4 -,0x23,0x18,0x19,0x57,0xb8,0xa9,0xa8,0xd8,0xb3,0xac,0x9d,0x36,0x18,0x18,0x2d,0x4c,0xd6,0xa4,0xb5,0xa5,0xb1,0xa0,0xb1,0x23,0x18,0x18,0x50,0x57,0xbe,0xbd,0xb3,0xc4 -,0xad,0xa1,0x52,0x32,0x1c,0x2a,0x3f,0x55,0xb3,0xa8,0x9c,0x9d,0x9c,0xb6,0x2e,0x19,0x3a,0xe9,0x29,0x2e,0x29,0x4f,0xbb,0x9a,0xaa,0x32,0x18,0x16,0x44,0xc4,0xb3,0xab -,0xaa,0xbd,0xa7,0x9e,0xa3,0x32,0x11,0x1e,0x5b,0xb2,0xb6,0xca,0xb9,0xae,0xad,0xb0,0x42,0x1c,0x1d,0x27,0x4d,0xd9,0xbb,0xa2,0xac,0xa3,0xa7,0xab,0x2e,0x1b,0x23,0x21 -,0x2e,0x29,0x3d,0xb7,0x9b,0x97,0x9a,0xc1,0x1a,0x1e,0x50,0xac,0xd8,0x4d,0x3f,0x75,0xbf,0xa5,0xab,0x1f,0x17,0x18,0x34,0xd2,0xb2,0xac,0xac,0xa7,0xab,0xa3,0xcc,0x22 -,0x19,0x28,0xd1,0xcd,0xb3,0xb3,0xa3,0xa4,0x9e,0xad,0x2d,0x17,0x1b,0x2d,0x2c,0x3e,0xf8,0xa2,0xad,0xa1,0xa5,0xaf,0x40,0x29,0x3e,0x20,0x37,0x2f,0xed,0xa9,0xa2,0x9b -,0xb0,0x33,0x1e,0x2f,0x46,0x60,0x26,0x38,0xb1,0xb9,0x9e,0xab,0xdd,0x1e,0x1e,0x2b,0x43,0xc9,0xf2,0xb1,0xad,0xa2,0xa9,0xbc,0x22,0x17,0x1c,0x21,0xc5,0x59,0xb1,0xa6 -,0xa1,0x9d,0xa3,0xa6,0x46,0x26,0x1d,0x2a,0x24,0x30,0xaf,0x9e,0xaa,0xb8,0xaf,0x2c,0x27,0x2e,0xf7,0x4c,0x20,0x3c,0xca,0xa1,0x96,0x92,0xa5,0x45,0x27,0x28,0xd0,0x36 -,0x41,0x40,0x7a,0xf6,0xc6,0xb0,0xc8,0x3f,0x23,0x32,0x2c,0xc3,0xa6,0xae,0x5d,0x25,0xe7,0xaa,0x9d,0xce,0x28,0x19,0x2c,0xd3,0xa2,0xb8,0x2e,0x1e,0x4f,0x9b,0x8e,0x9f -,0x26,0x22,0x23,0x99,0x9e,0x98,0x0e,0x3c,0x1f,0x00,0x0a,0x05,0xb8,0x2a,0x33,0x4d,0x1b,0x96,0x98,0x90,0x8c,0x8d,0xac,0x9c,0x8a,0xa0,0xa8,0x8b,0x22,0x24,0x8d,0x0a -,0x8c,0x83,0x9e,0x94,0x8a,0xdd,0x23,0x0f,0x03,0x0a,0x01,0x07,0x04,0x0c,0x03,0x08,0x07,0x14,0x04,0x09,0x10,0x08,0x19,0x27,0xbb,0x5e,0x99,0x99,0x92,0x99,0x8e,0x8c -,0x8f,0x89,0x8c,0x89,0x86,0x87,0x81,0x82,0x80,0x84,0x80,0x90,0x87,0x89,0x0e,0xd7,0x86,0x84,0x0c,0x6e,0x1d,0x08,0x19,0x06,0x03,0x04,0x00,0x08,0xb0,0x0f,0x0b,0x00 -,0x06,0x0f,0x00,0x03,0x00,0x19,0x0b,0x20,0xa9,0x2a,0x0c,0x29,0x91,0x8b,0x80,0x86,0x8d,0xf5,0x89,0x81,0x81,0x83,0x80,0x93,0x8a,0x86,0x85,0x87,0xac,0x94,0xaf,0x94 -,0xb5,0x8e,0x92,0xa9,0x0e,0x0a,0x0d,0x0f,0x0a,0x00,0x05,0x07,0x04,0x09,0x0b,0x00,0x06,0x03,0x06,0x0b,0x0a,0x0e,0x21,0x3c,0xaa,0xa2,0x69,0x2a,0x9b,0x97,0x9e,0x9e -,0xac,0x8e,0x8b,0xa1,0x94,0x8a,0x8b,0x82,0x8f,0x99,0x80,0x8d,0x8b,0x85,0x80,0x8a,0x89,0x89,0xb2,0x87,0x1f,0x0c,0x17,0x2e,0x0f,0x00,0x17,0x1a,0x06,0x03,0x02,0x00 -,0x06,0x09,0x0e,0x2b,0x13,0x05,0x00,0x00,0x08,0xb2,0x55,0x22,0x1f,0x0e,0x8a,0xed,0xc9,0x89,0x8c,0x80,0x8b,0x95,0x8f,0x87,0x82,0x87,0x84,0x86,0x8e,0x8b,0x87,0x88 -,0x89,0x23,0x1e,0x2c,0xad,0xa3,0x24,0x0f,0x0e,0x98,0x24,0x1b,0x1a,0x0b,0x24,0x07,0x01,0x1a,0x18,0x0e,0x05,0x03,0x01,0xcf,0x1f,0x1d,0x31,0x07,0x09,0x07,0x5e,0x25 -,0x80,0x89,0xb9,0xa8,0xa0,0xe7,0x1a,0x89,0x88,0x8a,0x17,0x37,0x80,0x88,0x8e,0xc1,0x1b,0x90,0x80,0x82,0x8c,0x8f,0x9c,0x99,0x16,0x92,0x96,0x15,0x28,0x1a,0x09,0x00 -,0x02,0x17,0x19,0x0d,0x1c,0x00,0x0a,0x06,0x35,0x92,0x08,0x07,0x0c,0x0b,0x2e,0xad,0x93,0x24,0x17,0x1d,0xae,0x88,0x89,0x92,0x84,0x89,0x26,0x3c,0x8f,0x80,0x89,0x83 -,0x9f,0x86,0xf4,0xad,0x81,0x81,0xa2,0x0a,0x19,0xa5,0x80,0x13,0x0b,0x5d,0x91,0x10,0x9a,0x91,0x0c,0x07,0x06,0xc3,0x07,0x19,0x21,0x00,0x0f,0x02,0x0c,0x0a,0x57,0xbc -,0x00,0x09,0x05,0xaf,0x2a,0xa9,0x4b,0x0f,0xac,0x08,0x8b,0x81,0x92,0x9f,0x60,0x8d,0x9a,0x8b,0x85,0x80,0x80,0xcd,0x17,0x8c,0x89,0x8d,0xa3,0x91,0x8a,0x9e,0x9f,0x0c -,0x10,0x90,0x82,0x0e,0x0b,0x08,0x21,0x1b,0x09,0x29,0x00,0x30,0x16,0x14,0x1a,0x11,0x01,0x09,0x3d,0x05,0x08,0x18,0xa8,0x37,0x0b,0x0c,0x93,0xa9,0xcd,0x15,0x05,0x3c -,0x8c,0x80,0x82,0x88,0x0f,0xb3,0xc4,0x85,0x82,0x56,0x8a,0x27,0x89,0x87,0x87,0xa0,0x1c,0x86,0x27,0x90,0x96,0x0d,0x98,0xaa,0x86,0x88,0x56,0x0b,0x0c,0x99,0x10,0x07 -,0x00,0xaf,0xbf,0x05,0x06,0x0d,0x0a,0x05,0x08,0x09,0x27,0x0d,0x06,0x05,0xd7,0x9f,0x9a,0x19,0x1a,0x1c,0x9d,0x88,0xa7,0x84,0xa7,0x91,0x8b,0x92,0x88,0x91,0x89,0x88 -,0x98,0xa7,0xd6,0x88,0x88,0x8c,0x9c,0x8f,0xa8,0x19,0x10,0x0e,0xa5,0xa2,0x25,0x17,0xc7,0x0c,0xaf,0xad,0x53,0x09,0x1f,0x1e,0x0e,0x1a,0x08,0xa1,0x0b,0x3e,0x9b,0x14 -,0x04,0x0a,0x18,0x1c,0xdf,0x19,0x05,0xb7,0x9e,0xb1,0x18,0x0e,0x88,0x3a,0x3f,0x94,0xa1,0xac,0xa1,0x87,0x83,0x8c,0x9d,0x9c,0x6a,0x97,0x8c,0x88,0x9f,0x82,0x85,0x9f -,0x8a,0x98,0x17,0x0f,0x9a,0xb0,0x8b,0x26,0x0e,0x0a,0x0e,0x68,0xcf,0x09,0x03,0x0b,0x1b,0x1f,0x0b,0x0d,0x00,0x1c,0x19,0x2e,0x27,0x0c,0x06,0x33,0x2d,0x34,0x96,0x13 -,0x9c,0x8a,0x96,0x98,0xa8,0xab,0xa3,0x8e,0x89,0x8c,0x84,0x8f,0xae,0x83,0x8e,0xa5,0xba,0x98,0x9c,0x21,0xa5,0x9e,0xaa,0x3e,0xc5,0xba,0xa7,0x2d,0x05,0x0b,0x26,0x52 -,0xca,0x93,0xc3,0x15,0x11,0x64,0x27,0x0e,0x1d,0x14,0x9e,0x13,0x15,0x09,0x17,0x29,0x14,0x1e,0x0d,0x15,0x0a,0x27,0xa5,0x9f,0x0f,0x3b,0xba,0x98,0x98,0x97,0x22,0xb9 -,0x8c,0x97,0x80,0x8a,0x8f,0xa2,0x89,0x8d,0x8f,0x87,0xcf,0xa4,0x8b,0x90,0x9c,0x41,0xb5,0xb7,0x96,0xba,0x0b,0x20,0x00,0x0f,0x9b,0x48,0x0d,0x04,0x28,0x13,0x24,0x10 -,0x00,0x07,0x28,0xd5,0x2f,0x25,0x0e,0x0f,0x20,0x1a,0xb6,0xba,0x11,0x9c,0xf8,0xa5,0xa2,0x33,0x9d,0xa8,0x85,0x8e,0xd2,0x9b,0x9d,0x8a,0x83,0x86,0x86,0xa0,0xa8,0x8d -,0x91,0x9a,0xa6,0x1e,0x10,0x91,0x8f,0x93,0x0c,0x19,0xe2,0x1a,0xc2,0x0a,0x16,0x0d,0x21,0x97,0x76,0x08,0x13,0x0c,0x21,0x94,0x13,0x07,0x0a,0x0d,0x2b,0x8f,0xf5,0x15 -,0x0f,0xc8,0x98,0x2e,0xa7,0x0f,0xe5,0x92,0x91,0x87,0x93,0xaa,0x2e,0x98,0x8b,0x89,0x40,0x15,0x2b,0x85,0x83,0x91,0x19,0x0f,0xd0,0xa3,0x8a,0x12,0x26,0x0d,0x36,0x83 -,0x9a,0x1d,0x05,0x12,0x9e,0x8f,0x10,0x07,0x02,0x17,0x96,0x92,0x1e,0x0d,0x19,0xac,0xab,0xaf,0x2c,0x04,0x30,0xa5,0x8d,0x9e,0x16,0x0b,0x1a,0xaa,0x9d,0x26,0x17,0x08 -,0x3c,0x88,0x87,0x8f,0x10,0x4a,0x8d,0x8d,0x85,0xc7,0x2f,0xa9,0x8c,0x80,0x8d,0xae,0x16,0x9a,0x8e,0x86,0x29,0x13,0x17,0x2c,0x85,0xa1,0x0b,0x03,0x0c,0x19,0xbd,0x0e -,0x08,0x03,0x0f,0x0d,0x4f,0xa1,0x00,0x0c,0xa4,0x2d,0x9c,0x3d,0x0a,0x45,0x97,0x86,0x8f,0x8d,0x1d,0x7c,0x8d,0x92,0x89,0x25,0x1e,0x9a,0x8e,0x85,0x8b,0x28,0x15,0x94 -,0xb0,0x99,0x6e,0x1d,0x1f,0x27,0x8b,0x48,0x1e,0x04,0x0f,0x2f,0xbc,0x41,0x1d,0x09,0x28,0x8c,0xae,0x96,0x33,0x0a,0x18,0x97,0x8e,0x29,0x16,0xd9,0xa3,0x8d,0x8c,0x1f -,0x07,0x11,0x2c,0x9e,0xba,0x16,0x0a,0xc7,0x88,0xad,0x4f,0x0b,0x09,0x2f,0xd0,0x8b,0x1a,0x17,0x1a,0x9a,0x82,0x96,0x2c,0x1e,0x9c,0x94,0x8b,0x8f,0xc5,0x1f,0x8a,0x85 -,0x85,0x9f,0x3f,0x0b,0x5b,0x8d,0xaf,0x27,0x0a,0x0e,0x3a,0x95,0x53,0x09,0x02,0x0c,0x33,0x39,0x15,0x0e,0x0d,0xdf,0xa6,0x8e,0x3c,0x08,0x0e,0xa4,0x9a,0x8e,0x22,0x19 -,0x9e,0x86,0x84,0x9e,0xe4,0x08,0xd4,0x9b,0x97,0x2e,0x26,0x1c,0x9b,0x80,0x8d,0xaa,0x1f,0x1e,0xa4,0x8c,0xa0,0x10,0x11,0xb9,0x8a,0x98,0xae,0x0f,0x05,0x3c,0x2f,0xa7 -,0x25,0x0b,0x18,0x93,0x96,0x90,0x26,0x0c,0x12,0x22,0xb5,0xda,0x1b,0x0d,0x9d,0x97,0x8f,0xa1,0x0f,0x0b,0xbc,0xab,0x99,0x3a,0x0f,0xce,0x8a,0x8d,0x89,0xc1,0x04,0x28 -,0x38,0x9d,0x39,0x16,0x1b,0xcb,0x8d,0x91,0xa9,0x17,0x0e,0xbc,0x94,0x9f,0x20,0x16,0xbe,0x8d,0x8b,0x94,0x30,0x0b,0x43,0xb0,0xa6,0xbd,0x0f,0x17,0xa7,0x8f,0x8f,0x31 -,0x0b,0x1b,0x3a,0xe2,0x40,0x0c,0x18,0xac,0x94,0x8f,0xad,0x0d,0x13,0x35,0xcf,0xac,0x17,0x0d,0x1a,0x9c,0x8f,0x8c,0xb1,0x12,0x24,0xa8,0x9e,0xda,0x24,0x31,0x92,0x88 -,0x88,0x95,0x1c,0x43,0xa1,0xa2,0xa4,0x1d,0x15,0xea,0x94,0x8e,0x9b,0x1d,0x0f,0x38,0xc3,0xca,0x2e,0x10,0x20,0xaf,0x9b,0x9a,0xe0,0x1b,0x28,0xc4,0x74,0x32,0x13,0x0e -,0xcf,0x95,0x94,0x9e,0x18,0x13,0x43,0xbe,0xd1,0x1f,0x0c,0x1e,0x99,0x97,0x93,0xb5,0x18,0xd5,0xc8,0x45,0x26,0x0f,0x10,0xaf,0x97,0x99,0xa2,0x18,0x25,0xab,0xb4,0xbc -,0x28,0x0f,0x3e,0x98,0x8e,0x8f,0x2f,0x18,0x4e,0xc0,0xff,0x24,0x12,0x1b,0x9d,0x99,0x9d,0xb8,0x1b,0x37,0xa8,0xb7,0x34,0x19,0x0c,0xc0,0x8f,0x8f,0x9c,0x23,0x1a,0xc4 -,0xb1,0x2f,0x1b,0x0e,0x28,0x98,0x8f,0x99,0xbe,0x21,0x41,0x9b,0xb9,0x1c,0x0f,0x0f,0xaa,0x8f,0x9c,0xba,0x24,0x26,0xaa,0xa0,0x32,0x15,0x10,0x26,0x9c,0x92,0x9a,0x62 -,0x29,0xb8,0x9c,0x7e,0x1a,0x11,0x1e,0x9d,0x8f,0x98,0xaf,0x23,0x2a,0x9e,0xa9,0x2b,0x18,0x13,0xc1,0x8f,0x91,0xa7,0x31,0x31,0xac,0xa0,0x25,0x15,0x12,0x1e,0xa7,0x96 -,0xa5,0xc4,0x38,0xf7,0x9b,0xd1,0x1a,0x10,0x16,0x48,0x98,0x9d,0xb5,0x5e,0x46,0xaa,0xab,0x42,0x17,0x11,0x1e,0xa1,0x93,0xa7,0xe5,0x32,0xb2,0x9c,0xe8,0x14,0x0e,0x18 -,0xab,0x92,0xa0,0xdb,0x39,0xd4,0x9d,0x9f,0x1e,0x0a,0x13,0x3b,0x9c,0x9a,0x48,0x58,0x68,0x9f,0x9f,0x3d,0x12,0x16,0x2c,0xa5,0x98,0x62,0x3f,0x3a,0xa0,0x96,0x9f,0x18 -,0x10,0x1e,0xb8,0x99,0xa6,0xc7,0x3b,0xaa,0x9d,0x95,0x31,0x13,0x1c,0x39,0x99,0x9e,0xf5,0x31,0xbf,0x9c,0x9c,0xcf,0x11,0x0f,0x1f,0xf5,0x9d,0xa5,0x38,0xe1,0xa7,0xa5 -,0xa1,0x29,0x10,0x1c,0x4c,0xac,0xa9,0x31,0x30,0xaf,0xaa,0x9d,0x5d,0x14,0x11,0x28,0xae,0x9f,0xa9,0x2d,0xec,0xa1,0x9c,0xa1,0x26,0x10,0x1d,0xdb,0xab,0xac,0x3b,0x2f -,0xac,0x9e,0x9d,0x62,0x16,0x1b,0x35,0xae,0x9d,0x67,0x27,0xb3,0xa4,0x9b,0xac,0x1b,0x10,0x24,0xce,0x9f,0xa9,0x1f,0x4a,0xb6,0xaa,0x9f,0x36,0x11,0x1c,0x37,0xb9,0xa3 -,0x30,0x30,0xb8,0xa2,0x9a,0xa9,0x20,0x1d,0x6d,0xb6,0xa6,0xc6,0x28,0x34,0x9f,0x9e,0xa6,0x3f,0x17,0x28,0x4e,0xab,0xac,0x2d,0x2b,0xb1,0xaa,0xa4,0xd3,0x18,0x1d,0x42 -,0xae,0xa5,0xcb,0x2b,0xb6,0x9f,0x9e,0x9f,0x2d,0x1b,0x2d,0xd3,0xb0,0xb3,0x2a,0x2d,0xb0,0xae,0xab,0x35,0x14,0x1a,0x2d,0x77,0xc2,0x31,0x27,0xb6,0x9f,0x9e,0xa8,0x27 -,0x1a,0x3d,0xbe,0xa6,0xb1,0x2c,0xeb,0xa6,0xa1,0x9f,0x3a,0x1b,0x30,0xcc,0xaa,0xa4,0x2f,0x31,0xaa,0xb0,0x9f,0xc6,0x1a,0x1c,0x32,0x65,0xae,0x4b,0x23,0xd3,0xad,0xa1 -,0xa9,0x29,0x1a,0x2f,0x51,0xb2,0xaf,0x2c,0x57,0xa7,0xa3,0xa3,0xf3,0x1e,0x27,0x68,0xb2,0xa2,0x2d,0x23,0x4b,0xdb,0xb8,0xc5,0x1f,0x1e,0x61,0xbb,0xa3,0xb9,0x2c,0xdd -,0xab,0xaa,0x9e,0x42,0x1c,0x3f,0x4f,0xbe,0xaa,0x2e,0x2f,0xb0,0xa8,0xa4,0xaf,0x25,0x29,0xca,0xc9,0xab,0xd7,0x22,0x34,0xb7,0xda,0xb9,0x41,0x1c,0x44,0x6d,0xe8,0xb7 -,0x26,0x2b,0xbb,0xb7,0xac,0xb3,0x27,0x38,0xbf,0xd2,0xab,0x63,0x26,0xc8,0xb3,0xde,0xa7,0x2f,0x25,0xd6,0xe5,0xb4,0xae,0x2c,0x39,0xaa,0xf8,0xa9,0xc1,0x23,0xbf,0xc4 -,0xd7,0xad,0x4b,0x22,0xc0,0xc0,0xce,0xa3,0x38,0x2d,0xca,0x3c,0xdb,0xae,0x27,0xce,0xa9,0x54,0xb5,0xc9,0x26,0xd7,0xc1,0x3e,0xaf,0x2a,0x1d,0xd6,0x30,0x68,0xaf,0x2c -,0x31,0xce,0x41,0xfd,0xb7,0x26,0xca,0xb3,0xe1,0xad,0xc4,0x2b,0x5c,0xbf,0x57,0xac,0x42,0x45,0xac,0x7a,0xbc,0xaa,0x2f,0x44,0xb3,0xd3,0xab,0xb9,0x2d,0xe4,0xc2,0x57 -,0xaf,0xbf,0x2b,0xb7,0x7b,0x3e,0xad,0x2c,0x2f,0xbb,0x4e,0xc3,0xac,0x24,0x36,0xf7,0x2d,0xb8,0x3c,0x29,0xc6,0x57,0x35,0xb4,0x3e,0x27,0xaf,0xee,0xd7,0xb0,0x2b,0x2b -,0xc6,0x2e,0xdc,0xba,0x26,0xc7,0xaf,0xf0,0xac,0xc5,0x40,0xa6,0xb4,0xba,0xa1,0x3e,0x2f,0xb2,0x4a,0xd1,0xaf,0x44,0xdf,0xb3,0x2d,0xc4,0xcd,0x30,0xaa,0xb3,0x79,0xc2 -,0x48,0x29,0xba,0x3f,0x4f,0xb2,0x2e,0xd1,0xae,0x2f,0x4e,0xd2,0x26,0x5a,0xd3,0x2b,0xe0,0x48,0x28,0xbf,0xd6,0x30,0xcf,0x40,0x34,0xba,0x36,0x3c,0xd0,0x29,0x4c,0xab -,0x45,0xbf,0xba,0x28,0xce,0x49,0x3c,0xa7,0xd3,0xc6,0xa5,0xbd,0x41,0xb3,0x64,0xca,0xa7,0xe3,0xb0,0xc1,0x2e,0xb9,0xa1,0x49,0xa6,0xb4,0x2d,0xbb,0x47,0x5a,0xb3,0x3a -,0x49,0xa6,0x49,0x63,0xb7,0x24,0x29,0x53,0x2f,0x60,0x4e,0x22,0x52,0x5b,0x2f,0xbb,0x36,0x26,0xcf,0x61,0xce,0xb6,0x24,0x2e,0xb9,0x33,0xae,0xac,0x30,0x4f,0xf7,0x3e -,0xbc,0x3d,0x27,0xa8,0xb8,0x5f,0xac,0x3b,0x37,0xbe,0xbe,0xac,0xb9,0x28,0xee,0xae,0xd5,0xa5,0xb0,0x3b,0xd4,0xba,0xca,0xac,0x2d,0x38,0xb0,0x4f,0xb5,0xa4,0x3c,0x3b -,0xc4,0xf9,0xb7,0x33,0x2c,0xc3,0x6d,0x6d,0xa7,0x54,0x20,0x37,0x3b,0x4d,0xc3,0x23,0x31,0x45,0x29,0xcd,0xb6,0x39,0xce,0xc7,0x5a,0xbb,0x2a,0x32,0xb1,0xdd,0xb5,0xa7 -,0x33,0x35,0x3d,0x44,0xbf,0xc9,0x34,0xc3,0xc6,0x3e,0xa0,0xb3,0x38,0xcd,0x4f,0xd6,0xaf,0x39,0xda,0xb8,0x35,0xbe,0xa9,0x36,0x42,0xc5,0xdd,0xab,0x43,0x2e,0xe9,0x2e -,0xeb,0x9b,0xc0,0x3a,0x4e,0x2d,0xc9,0xb4,0x5a,0xc8,0x3e,0x26,0xad,0xbd,0x2d,0xd6,0xca,0x5b,0xb0,0x3e,0x2b,0x5c,0x27,0xb6,0x9e,0x49,0x37,0xd5,0x36,0xb5,0xb5,0x2f -,0x46,0x2b,0x37,0xa1,0xaf,0x38,0x47,0x29,0x37,0xb1,0x46,0x3f,0x47,0x29,0xad,0xa8,0x2d,0x65,0x69,0xf8,0xa0,0xb0,0x40,0x34,0x1e,0x44,0x9b,0xb4,0x4a,0xd2,0x29,0x46 -,0xad,0x5b,0xbb,0x58,0x2e,0xa2,0xa9,0x32,0xb7,0x73,0x3f,0xa0,0xc6,0x3b,0x3d,0x23,0xc0,0xa8,0x3a,0x3c,0x4c,0x2b,0xc0,0xae,0x39,0x41,0x25,0x2b,0xa3,0xae,0x6f,0xb7 -,0x31,0x37,0xad,0xd9,0x7c,0x61,0x2f,0xa9,0xa7,0x2e,0xf5,0x2b,0x25,0xa4,0xad,0xdd,0xf3,0x1e,0x38,0xa1,0xe5,0xbc,0xae,0x2e,0xe4,0xbc,0x37,0xde,0x2e,0x27,0xa9,0xb5 -,0x37,0xc4,0x33,0x2a,0xa3,0xc9,0x3f,0x71,0x25,0xb9,0x9e,0x36,0xde,0x53,0x1e,0xa9,0xa9,0x4b,0x4f,0x1e,0x28,0xa5,0xd9,0xcf,0xac,0x2b,0x5a,0xa7,0x3f,0x4c,0x66,0x25 -,0xa2,0x9a,0xce,0xb2,0x36,0x25,0xa1,0xa8,0x4d,0xb9,0x23,0x3e,0x9f,0x37,0x46,0xbe,0x1e,0xc7,0xa3,0x2b,0x4a,0x2b,0x1f,0xa3,0xb6,0x2b,0xb3,0x2b,0x34,0x9d,0x5a,0x2f -,0x3a,0x1c,0xbc,0x99,0x4b,0x5f,0x3d,0x1a,0xad,0x9c,0x3e,0xbf,0x37,0x2d,0x99,0xb5,0x38,0xad,0x25,0x54,0x95,0x5e,0x36,0x2f,0x15,0xbb,0xa0,0x3d,0xb8,0x2d,0x1a,0x9f -,0xa5,0x37,0xb4,0x28,0x32,0x99,0xc7,0x3e,0xd5,0x1c,0xce,0x99,0x31,0x39,0x33,0x1b,0xa4,0x9f,0x26,0xd9,0x29,0x20,0x93,0xa3,0x38,0xf4,0x17,0x35,0x94,0xda,0xc0,0x67 -,0x17,0xa7,0x97,0x34,0x43,0x23,0x1c,0x99,0xa2,0x3a,0xdd,0x1b,0x28,0x8f,0xa9,0x40,0xc6,0x17,0xe5,0x96,0x47,0xc7,0x4a,0x17,0x9e,0xa0,0x29,0xcb,0x1d,0x1d,0x97,0xb8 -,0x2a,0xeb,0x16,0xc5,0x8e,0xe0,0x39,0x2e,0x15,0xa0,0x96,0x36,0xdf,0x1c,0x19,0x98,0xa2,0x2f,0xe4,0x16,0x2c,0x91,0xba,0x49,0x59,0x16,0xac,0x8e,0xe1,0xbc,0x25,0x15 -,0x9a,0x9d,0x47,0xb9,0x14,0x22,0x93,0xba,0x45,0x3d,0x15,0xba,0x94,0xe1,0xc4,0x2e,0x19,0x9d,0x9a,0x33,0x55,0x1c,0x23,0x94,0xa6,0x38,0x2f,0x0f,0x5c,0x90,0xc0,0x4f -,0x25,0x12,0x9f,0x94,0x4e,0x4d,0x19,0x1e,0x95,0x9d,0x43,0x2e,0x13,0x51,0x91,0xaa,0xd7,0x2c,0x16,0xad,0x97,0x62,0x4e,0x22,0x1f,0x9d,0x9e,0x4c,0x4e,0x1c,0x35,0x8e -,0xa7,0x35,0x27,0x16,0xb4,0x97,0x4b,0x31,0x1b,0x1a,0x97,0x99,0x5f,0x34,0x16,0x32,0x90,0xa0,0x61,0x2c,0x17,0xbf,0x96,0xc4,0x37,0x1e,0x17,0xa4,0x9d,0x3f,0x39,0x17 -,0x28,0x8f,0x9c,0xc5,0x40,0x12,0xd8,0x96,0xe1,0x5b,0x2a,0x1a,0x99,0x96,0xef,0x6e,0x1a,0x2b,0x99,0xb7,0x3d,0x3b,0x14,0xb3,0x93,0xb5,0xc2,0x20,0x1a,0xa0,0x9d,0x41 -,0x43,0x16,0x1a,0x97,0x9e,0xb6,0x48,0x0f,0x30,0x9e,0x4d,0x3e,0x26,0x19,0x99,0x9a,0x4d,0xb5,0x1d,0x27,0x95,0xb1,0xe5,0x35,0x11,0xcd,0x96,0xb1,0xaf,0x32,0x1b,0xa2 -,0xaa,0x34,0xc3,0x1f,0x2b,0x94,0xaa,0xae,0xb1,0x1c,0x61,0x9c,0x3e,0x3f,0x2e,0x11,0xa7,0x9a,0x45,0xb5,0x21,0x1f,0x9c,0xbc,0x35,0xca,0x14,0x2b,0x97,0x52,0xb4,0xb8 -,0x1c,0xaf,0xa6,0x24,0x4e,0x1c,0x1a,0x98,0xa4,0xc8,0xb1,0x1b,0x2e,0x9c,0x35,0x60,0xbd,0x1a,0xc1,0x9c,0x4a,0x9f,0xbd,0x23,0x9d,0xc9,0x2a,0xaa,0x1b,0x22,0x97,0x44 -,0xcd,0xa4,0x1d,0xb1,0x9a,0x26,0xbb,0x30,0x13,0x9e,0xac,0x62,0x9d,0x28,0x24,0xa3,0x2f,0x3c,0xad,0x14,0x43,0xa5,0x2a,0xab,0xcc,0x1c,0xa2,0xa1,0x47,0x9f,0x24,0x18 -,0xa6,0x3c,0x57,0xab,0x1a,0xc3,0xad,0x2a,0x9b,0x9d,0xd9,0x9d,0x3e,0x2a,0xa7,0x2b,0x1d,0x4f,0xb2,0x96,0x97,0x2a,0x18,0x1c,0x18,0x31,0x1e,0x31,0x9f,0xcc,0xc7,0xa9 -,0x99,0x36,0x4e,0x4b,0x37,0x2b,0x88,0xae,0x04,0x80,0x9a,0x03,0x18,0x17,0x2c,0xc3,0x93,0x27,0x04,0x02,0x00,0x05,0x00,0x02,0x0e,0x20,0x0d,0x00,0x00,0x06,0x0d,0x05 -,0x05,0x01,0x0e,0x02,0x12,0x8f,0x81,0x94,0x36,0x95,0x8f,0x82,0x80,0x83,0x87,0x80,0x80,0x80,0x81,0x81,0x80,0x81,0x82,0x81,0x83,0x84,0x80,0x81,0x80,0x87,0x38,0x13 -,0x8e,0x80,0x82,0x81,0x84,0x8c,0xd1,0x15,0x2c,0xcc,0x0c,0x0c,0x09,0x01,0x00,0x00,0x00,0x0b,0x22,0x04,0x00,0x00,0x00,0x01,0x00,0x02,0x02,0x00,0x00,0x02,0x05,0x03 -,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x13,0x07,0x00,0x00,0x04,0x06,0x09,0xa9,0x88,0x85,0x96,0xdd,0x8d,0x80,0x81,0x80,0x84,0x86,0x85,0x82,0x80,0x80,0x80,0x81,0x81 -,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x83,0x85,0x81,0x80,0x80,0x80,0x8b,0xa1,0x86,0x80,0x80,0x80,0x82,0x84,0x91,0xa3,0xaf,0xc4 -,0x1a,0x1a,0x1e,0x0b,0x01,0x00,0x00,0x04,0x12,0x0d,0x02,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00 -,0x00,0x00,0x00,0x00,0x01,0x09,0x0a,0x03,0x01,0x00,0x08,0x1b,0x16,0x09,0x04,0x03,0x05,0x15,0xac,0x9f,0x2e,0x2d,0xde,0x5d,0x67,0xf8,0x9b,0x84,0x81,0x81,0x87,0x8c -,0x8c,0x88,0x82,0x80,0x85,0x95,0x8b,0x80,0x80,0x80,0x82,0x8f,0x89,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x84,0x82,0x80,0x80,0x89,0xaa,0xb0,0x8a,0x80,0x80 -,0x80,0x86,0x93,0x9c,0x8a,0x82,0x83,0x8b,0x8f,0x86,0x85,0x84,0x8f,0x9c,0x99,0x8f,0x8f,0x9c,0x9f,0x94,0x87,0x88,0x8b,0xa1,0x29,0x16,0x39,0x8d,0x86,0x89,0x9b,0xbf -,0x98,0x8a,0x8c,0x93,0xbc,0x16,0x0c,0x14,0x2f,0x3d,0x27,0x1f,0x1e,0x0e,0x02,0x01,0x00,0x09,0x1b,0x16,0x08,0x01,0x01,0x00,0x01,0x02,0x01,0x00,0x00,0x00,0x01,0x02 -,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x03,0x05,0x03,0x00,0x00,0x00,0x02,0x05,0x03,0x01,0x07 -,0x0d,0x10,0x09,0x05,0x0b,0x1a,0x38,0x2a,0x22,0xce,0x9d,0x8d,0x84,0x88,0x92,0xa2,0x8b,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 -,0x80,0x80,0x80,0x80,0x80,0x83,0x83,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x80,0x80,0x81,0x83,0x82,0x81,0x81,0x82,0x84,0x88,0x8b,0x8e,0x8e,0x8a,0x88,0x8a,0x8c -,0x8a,0x9b,0x3a,0x16,0x1d,0x63,0x38,0x0f,0x02,0x02,0x02,0x0d,0x12,0x0e,0x07,0x01,0x01,0x00,0x02,0x02,0x01,0x02,0x05,0x05,0x02,0x00,0x00,0x01,0x03,0x04,0x01,0x00 -,0x00,0x02,0x06,0x06,0x03,0x00,0x00,0x01,0x03,0x04,0x04,0x06,0x09,0x13,0x14,0x11,0x0d,0x0b,0x08,0x06,0x08,0x0d,0x19,0x3c,0xa6,0xa4,0xdc,0x11,0x0c,0x18,0xb1,0x8e -,0x8a,0x8a,0x92,0x9d,0xae,0xac,0xa1,0x9c,0x96,0x96,0x8f,0x8d,0x8c,0x8c,0x8c,0x89,0x8a,0x8b,0x8c,0x89,0x87,0x84,0x83,0x84,0x87,0x8f,0x8e,0x8c,0x89,0x8d,0x9e,0xd8 -,0xae,0x92,0x8b,0x88,0x8c,0x90,0xa1,0xc3,0xce,0xb7,0xa2,0x9a,0x93,0x9b,0xad,0x39,0x30,0x49,0xac,0xa9,0x3f,0x28,0x1d,0x20,0x36,0x4d,0x44,0x24,0x19,0x16,0x17,0x15 -,0x15,0x21,0xe0,0xa8,0xae,0xaf,0x56,0x34,0x28,0x19,0x13,0x16,0x1f,0xce,0x98,0x90,0x98,0xc4,0x1f,0x1b,0xde,0x9a,0x8d,0x88,0x8a,0x8f,0x9c,0xa3,0xac,0xa9,0xa4,0x9c -,0x93,0x97,0x96,0x92,0x8e,0x8e,0x8e,0x96,0x9b,0x99,0x99,0x8f,0x8c,0x8b,0x8d,0x92,0x97,0x9f,0xa9,0xc9,0x2f,0x1e,0x21,0x2e,0x67,0xbf,0xdd,0x5b,0x3e,0x2b,0x1d,0x19 -,0x19,0x2e,0xc5,0xb8,0xef,0x27,0x1e,0x25,0x45,0xca,0xc4,0x3b,0x1f,0x1c,0x22,0x3c,0x4f,0x58,0x2d,0x21,0x1d,0x1a,0x1c,0x1c,0x31,0xb1,0xa1,0xa0,0xaa,0xd6,0x34,0x23 -,0x17,0x14,0x14,0x20,0x42,0xab,0xa1,0xbc,0x2a,0x17,0x1d,0x2d,0xc2,0xa8,0xa3,0xa8,0xba,0x5f,0x27,0x1c,0x17,0x1d,0x27,0x2b,0x28,0x24,0x32,0xc6,0xa9,0xc1,0x32,0x26 -,0x26,0x45,0xbb,0xa9,0xa3,0xa6,0xae,0xc1,0x52,0x39,0x25,0x1b,0x1a,0x1b,0x2d,0x66,0xcd,0x7c,0x50,0x46,0x2e,0x29,0x23,0x37,0xcb,0xa7,0xa8,0xbe,0x58,0xe5,0xbb,0xbe -,0xb7,0x59,0x3d,0x2f,0x39,0x4e,0x5b,0xc8,0x7b,0x48,0x2f,0x21,0x1b,0x1b,0x24,0xca,0x9c,0x9a,0x9b,0xa2,0xae,0x69,0x2a,0x1b,0x13,0x18,0x24,0xd1,0x9f,0x9e,0xad,0x3d -,0x2a,0x34,0xe9,0xbd,0xb2,0xad,0xa8,0xab,0xbc,0x48,0x28,0x20,0x1f,0x24,0x23,0x23,0x26,0x55,0xab,0xa4,0xab,0xee,0x3f,0x42,0x55,0x45,0xd8,0xb2,0xa4,0x9d,0xa6,0xb5 -,0x48,0x29,0x25,0x24,0x2a,0x2e,0x34,0x46,0xcb,0xd4,0xde,0x4d,0x3a,0x34,0x3d,0xcd,0xb2,0xb8,0xe8,0xce,0xb5,0xa6,0xa9,0xb8,0xda,0x5b,0x5d,0x45,0x3a,0x3b,0x48,0x5e -,0xe2,0x57,0x39,0x26,0x22,0x38,0xc2,0xa5,0xa0,0x9f,0xa0,0xaa,0xc3,0x2f,0x1f,0x21,0x30,0x3b,0x69,0xc6,0xba,0xbb,0xcd,0xca,0xc0,0xb4,0xae,0xa9,0xa0,0xa6,0xb0,0xd3 -,0x40,0x37,0x2e,0x29,0x2a,0x28,0x2a,0x60,0xb1,0xa4,0xad,0xdb,0x2c,0x3e,0xd8,0xbc,0xad,0xb4,0xa7,0xa3,0xa2,0xa7,0xab,0x4b,0x2a,0x22,0x21,0x32,0x47,0x78,0xc2,0xd3 -,0x3a,0x2d,0x2e,0x46,0x7d,0x41,0xe0,0xc0,0xce,0xb9,0xab,0xa3,0xa5,0xb9,0xe6,0x67,0x3d,0x4c,0x36,0x3b,0xc6,0xc0,0xc5,0x3d,0x2e,0x24,0x21,0x2e,0x42,0xbb,0xaa,0xaa -,0xa6,0x9c,0xa6,0xc1,0x2b,0x1b,0x1d,0x25,0x3c,0x6a,0xcb,0xc9,0xbd,0xcd,0xc2,0xcc,0xd3,0xba,0xb8,0xc1,0xc2,0xc3,0xb8,0xb7,0x62,0x2b,0x21,0x1c,0x1f,0x29,0x5d,0xb6 -,0xb3,0xb8,0x6a,0xcc,0xc7,0xed,0x56,0x3f,0x45,0xaf,0xb1,0xaf,0xaa,0xc6,0xb8,0xc8,0x4f,0x3c,0x28,0x27,0x35,0xe7,0x7a,0x3a,0x2b,0x2d,0x33,0xf3,0xae,0xb3,0xd0,0x30 -,0x2d,0xe0,0xa4,0x9d,0xa0,0xb2,0x3e,0x3c,0x54,0xe7,0xea,0x4a,0x33,0x2d,0x28,0x22,0x2c,0x4c,0xbb,0xc2,0xc8,0x52,0xc4,0xab,0xac,0xa6,0xce,0x39,0x2b,0x29,0x3a,0xd2 -,0xfb,0x3e,0x49,0x58,0xcd,0x5b,0x67,0xbb,0xa8,0xa3,0xaa,0xb2,0xde,0x5a,0x65,0x7b,0x3d,0x25,0x1d,0x1b,0x2a,0xd7,0xa2,0xaa,0x52,0x31,0x2e,0x47,0xcf,0xbe,0xcf,0xae -,0xaf,0xa8,0xb0,0xc4,0xb0,0xb8,0xbe,0x3d,0x27,0x2a,0x45,0xc5,0xb7,0x4e,0x2a,0x27,0x22,0x2d,0x3e,0x3a,0x38,0xc9,0xa7,0xa2,0x9b,0xa9,0xb2,0xb2,0xc4,0xc8,0x51,0x2e -,0x27,0x42,0xca,0xac,0xb7,0x30,0x1c,0x20,0x38,0xe4,0xba,0x71,0x60,0xbf,0xab,0x9f,0xa6,0xbe,0x38,0x1e,0x1f,0x2c,0x32,0x4b,0xc1,0xab,0xa7,0xbd,0x6a,0x3c,0xd6,0xa9 -,0xa9,0xe7,0x2c,0x49,0xb6,0xa7,0xb3,0x3a,0x2c,0x2b,0x29,0x35,0x48,0x39,0x3c,0x51,0xce,0xb3,0xb7,0x43,0x2b,0x41,0xb0,0x9e,0xa1,0x68,0x37,0xbe,0xa1,0x9e,0xbd,0x29 -,0x22,0x31,0xb7,0xcf,0x2d,0x1e,0x1e,0x2a,0xdb,0xc8,0x5c,0x51,0x3e,0x7a,0xb0,0xaf,0xba,0xb1,0xac,0xa7,0xad,0x76,0x3d,0x41,0xd0,0xb3,0x67,0x24,0x19,0x24,0xbe,0xac -,0xfb,0x2a,0x2e,0xbc,0x9f,0x9c,0xb2,0x2b,0x2c,0x6e,0xae,0xab,0xda,0x27,0x22,0x38,0xae,0xb0,0x3d,0x20,0x1f,0xb5,0x99,0x9e,0xc5,0x2e,0x4f,0xa6,0x9f,0xc6,0x22,0x1e -,0x27,0x5c,0xf9,0x44,0x5b,0xe1,0xed,0x42,0x41,0x2e,0x20,0x32,0xbd,0x9e,0x9c,0xb4,0xcd,0xaf,0x9d,0x9c,0xfb,0x1c,0x23,0x5a,0xa9,0xb5,0x25,0x1c,0x2c,0xbd,0xae,0x49 -,0x1c,0x13,0x1f,0xae,0x97,0x9b,0xb9,0x3a,0xc9,0x9e,0x9a,0xb1,0x25,0x1a,0x2e,0xa5,0xa1,0xbf,0x28,0x29,0x4e,0xb9,0xcc,0x23,0x1d,0x35,0xb1,0xa3,0xaf,0x4e,0x68,0xb9 -,0xb1,0xc0,0x2e,0x1f,0x1f,0x3f,0xaf,0xaa,0xca,0x74,0x4f,0xcb,0xa8,0xbd,0x2f,0x24,0xdb,0x9c,0x98,0xae,0x23,0x1f,0xbe,0xa4,0xad,0x28,0x18,0x1b,0xcc,0xb1,0xba,0x3f -,0x1e,0x32,0x4b,0xb8,0x9f,0xb3,0x3f,0x3d,0xb2,0x9a,0x9f,0xd6,0x36,0xc4,0x60,0xa6,0x3c,0x19,0x1f,0x40,0xbd,0xde,0x24,0x20,0x3c,0xc7,0xa2,0xc5,0xaa,0x61,0xba,0xaa -,0xaf,0xca,0x7e,0xa4,0xcf,0xbd,0xe3,0x26,0x1b,0x28,0xbe,0xa4,0xc8,0x1c,0x1a,0x35,0xa3,0x9a,0x9e,0x33,0x1d,0x2e,0xae,0x9d,0xc8,0x37,0x27,0x39,0xd0,0xbe,0xc5,0x3c -,0x37,0x3f,0xbe,0x6f,0xe2,0xd7,0xae,0xa6,0xb5,0xc4,0x28,0x18,0x29,0xaa,0x9f,0xcc,0x29,0x25,0x36,0xb2,0xa7,0xb6,0x25,0x2d,0x41,0x4f,0xbf,0xaf,0xaa,0xa9,0xb5,0xc3 -,0xbf,0x37,0x30,0xdc,0xb1,0xbc,0x67,0x29,0x2b,0xfb,0xa8,0xaf,0x2f,0x16,0x15,0x61,0xaf,0xa5,0xad,0x54,0x46,0x2c,0xbd,0xa9,0xb3,0xb7,0xba,0xc1,0x5c,0x39,0x46,0xbd -,0xba,0xb9,0x49,0x2e,0x1d,0x27,0xbc,0x9f,0xa3,0x48,0x35,0x2a,0x36,0xaf,0xac,0x3a,0x27,0x33,0xc3,0xaf,0xb6,0xad,0xbd,0x59,0x2f,0x2e,0x55,0xb9,0xaf,0xae,0xce,0x57 -,0x54,0x4b,0x33,0x45,0xaf,0xaa,0x3b,0x1d,0x23,0x40,0xb2,0xb9,0xbe,0x2e,0x2f,0x47,0xc5,0xb7,0xae,0xa6,0xbd,0x44,0x4a,0xb3,0xb6,0xdb,0x43,0xcd,0x4c,0x2c,0x2b,0x2d -,0xbd,0xb7,0x4a,0x29,0x23,0x3d,0xaf,0x9b,0xa4,0x63,0x2c,0x30,0xdc,0xac,0xa4,0xad,0x66,0x2c,0x35,0x4e,0xd5,0x75,0x70,0xec,0x3c,0x42,0x5d,0xcf,0xd7,0xb7,0xa7,0xca -,0x29,0x1d,0x2f,0xc9,0xa8,0xa9,0x61,0x1e,0x23,0xb7,0xa5,0x9f,0xbf,0x50,0x2c,0x22,0xe7,0xaa,0xaa,0xbe,0x4d,0x31,0x1f,0x29,0xee,0xc0,0xae,0xb0,0xbc,0x35,0x28,0xe3 -,0xa8,0xa7,0x4d,0x27,0x2d,0x37,0xc6,0xab,0xaa,0xe2,0x30,0x47,0xbd,0xae,0xb1,0xdd,0x32,0x34,0xc9,0xb1,0xb4,0x3e,0x24,0x2a,0x28,0x30,0xed,0xad,0xa1,0xaf,0xb4,0xb5 -,0x46,0x4b,0xc9,0xb3,0xca,0x3e,0x33,0x36,0x41,0x3d,0x43,0x34,0x28,0x34,0x44,0x43,0x40,0xd6,0xb9,0xd8,0xc0,0xac,0xac,0xbd,0xba,0xaa,0xb6,0x56,0x49,0x39,0xba,0xa3 -,0xa0,0xa8,0x2f,0x1a,0x23,0x31,0x6b,0xd4,0x45,0x3e,0x2e,0x2c,0x45,0xda,0xe7,0x50,0x4c,0xbf,0xbc,0xcc,0xdc,0xb3,0xae,0xb1,0xab,0xdc,0x38,0x45,0x74,0x5e,0x3d,0xe2 -,0xdf,0xf8,0xca,0xdc,0x3b,0x23,0x29,0x3c,0x56,0x69,0x3b,0x4e,0xd3,0xbd,0xa8,0xaf,0x53,0x3c,0xc7,0xa9,0xa5,0xae,0xca,0x4e,0x63,0xd7,0xb6,0xc8,0x33,0x28,0x2a,0x3d -,0x3f,0x34,0x4c,0xcf,0x5e,0xd0,0x5b,0x2c,0x28,0x39,0xb9,0xaa,0xa6,0xa9,0xc7,0xd3,0xcd,0xb2,0xbb,0x47,0x4f,0x5c,0x52,0x58,0xcc,0xbb,0xc0,0xe7,0x49,0x2f,0x24,0x26 -,0x39,0x4e,0xfd,0x41,0x3b,0xf4,0x62,0xbe,0xaf,0xbc,0x3d,0x36,0xbf,0xab,0xaf,0xb6,0xb3,0xcb,0xdf,0xc7,0xdc,0x46,0x67,0xcf,0xbb,0x61,0x2e,0x32,0x42,0xef,0xdf,0xce -,0x4d,0x22,0x22,0x33,0xca,0xa9,0xad,0xb1,0xc3,0xcc,0xc3,0xb9,0xd4,0xeb,0xd0,0xc6,0xde,0x3d,0x5d,0xc5,0xdc,0x43,0x43,0x2c,0x27,0x3f,0xb6,0xcd,0x39,0x3b,0x4b,0xd1 -,0xc9,0xad,0xaf,0x40,0x2d,0x34,0xbe,0xbd,0x7c,0xd2,0xc6,0xb1,0xc6,0x72,0x38,0x30,0x5a,0xb7,0xa3,0xb3,0x39,0x33,0x73,0xb5,0xb5,0xc5,0x3b,0x20,0x1e,0x33,0xd3,0xaf -,0xab,0xb7,0x3f,0x3d,0xe5,0xde,0x58,0x4b,0xe5,0x5f,0x53,0xd1,0x9f,0x9e,0xaa,0xe8,0x2c,0x28,0x2e,0xbf,0xaa,0x57,0x28,0x23,0x2d,0x6d,0xd3,0xbd,0x55,0x2a,0x2b,0x3a -,0xbd,0xa9,0xae,0xb9,0xbf,0xbf,0xc6,0xb4,0xd5,0x45,0x4c,0x4a,0x3f,0x3f,0xc9,0xae,0xb2,0x4d,0x2f,0x2b,0x34,0x37,0x43,0xcf,0xc2,0xbc,0xb6,0xab,0xb4,0xdd,0xeb,0x44 -,0x42,0x3e,0x46,0x5f,0xeb,0xb9,0xb0,0xd1,0x3a,0x3b,0x33,0x4a,0xc2,0xb5,0xb7,0x3c,0x3d,0xbd,0xad,0xcb,0x3b,0x33,0x2e,0x3b,0x43,0xd2,0xd5,0x4f,0x3e,0x6f,0xc4,0xc0 -,0xcf,0xda,0xcd,0x3e,0x59,0xd0,0xbc,0xb8,0xb8,0xbf,0xbc,0xda,0x43,0x3d,0x39,0x31,0x27,0x32,0xf9,0xb7,0xac,0xb6,0x49,0x39,0x4f,0xc9,0xdf,0xca,0x5f,0x3d,0x60,0xb7 -,0xa9,0xa9,0xbe,0x5f,0x3d,0x3a,0xd9,0xbe,0xc8,0x48,0x38,0x42,0x46,0x3c,0x64,0x55,0x44,0x2e,0x33,0x5b,0xd1,0xb6,0xae,0xb4,0xb6,0xc9,0xd7,0x4e,0x46,0x3f,0x40,0x48 -,0x41,0x46,0x3e,0x68,0xc9,0xb0,0xbf,0x6d,0x38,0x2f,0x35,0xd2,0xa9,0x9f,0xa2,0xcd,0x2f,0x37,0x48,0x40,0x31,0x38,0x36,0x3b,0xbd,0xaa,0xa3,0xac,0xcc,0x4b,0x2e,0x2f -,0xfd,0xce,0xd9,0x73,0xe2,0xc5,0x59,0x49,0xc9,0x5e,0x3a,0x35,0x38,0x3a,0xd1,0xaf,0xa9,0xb5,0xc4,0xcc,0x4b,0x38,0x2e,0x34,0x39,0xeb,0xbe,0xc4,0xb3,0xcd,0x52,0xce -,0xcc,0xda,0x2e,0x1f,0x21,0x61,0xa8,0x9e,0xae,0x3d,0x37,0x40,0x66,0xcd,0xd6,0xea,0x4f,0xd5,0xa8,0xa0,0xaa,0xc2,0x3f,0x26,0x21,0x2a,0x44,0xd1,0xc3,0xc5,0xad,0xc1 -,0x58,0xd9,0x69,0x3f,0x37,0x32,0x3b,0x60,0xb7,0xa8,0xbe,0x56,0xbf,0xb6,0xd8,0x3c,0x2a,0x2e,0x3e,0xaf,0xac,0xb7,0x5f,0x30,0x4f,0x57,0x49,0x3a,0x27,0x22,0x38,0xb4 -,0x9a,0x9e,0xbc,0xdd,0x49,0x4f,0x37,0x27,0x2d,0x44,0x69,0xda,0xb0,0xaf,0xaa,0xab,0xd2,0x2d,0x2c,0x42,0xd4,0xb3,0xb4,0xb0,0xd6,0x41,0x63,0x5f,0x36,0x24,0x1e,0x2d -,0xcf,0xa6,0x9f,0xb0,0x3b,0xee,0xa7,0xac,0xcd,0x2e,0x22,0x2e,0xda,0xb4,0xb0,0x6c,0x4f,0xc2,0xbb,0x60,0x29,0x22,0x26,0x3b,0xbd,0xa3,0xa5,0xb8,0xbe,0x69,0x2f,0x2a -,0x2d,0x27,0x4c,0xf8,0xbf,0xad,0xa8,0xa2,0xa4,0xb2,0x36,0x1c,0x20,0x6f,0xbe,0xb8,0xed,0x39,0x5a,0xaa,0xa3,0xba,0x2a,0x1a,0x1f,0x6b,0xa9,0x9c,0xa2,0x49,0x2f,0xcb -,0xbd,0xee,0x2c,0x25,0x31,0x71,0xac,0xaf,0xce,0xb7,0xa7,0xad,0x3b,0x20,0x1d,0x28,0x4b,0x66,0xb9,0xb4,0xaf,0xb0,0xab,0xce,0x2e,0x22,0x25,0x2f,0x4f,0xb9,0xc9,0xb1 -,0xa1,0x9c,0xb1,0x25,0x16,0x1a,0x41,0xaa,0xa2,0xa8,0xcc,0x48,0xa9,0x9d,0xab,0x36,0x17,0x16,0x28,0xce,0xb5,0xac,0xb8,0xc5,0xb7,0xb7,0x75,0x32,0x2e,0x40,0x43,0xcb -,0xa5,0xad,0xbf,0xb3,0xae,0xe5,0x23,0x19,0x21,0x38,0x52,0xc5,0xb9,0xae,0xa4,0x9c,0xa6,0x2f,0x1b,0x1b,0x2d,0x3a,0x37,0x60,0xd5,0xa8,0x9f,0x9b,0xa5,0x26,0x13,0x19 -,0xce,0x9f,0x9e,0xb8,0x40,0x52,0xab,0xa6,0x3d,0x1f,0x1b,0x28,0x46,0xc1,0xac,0xab,0xa9,0xa5,0xa8,0xce,0x27,0x1c,0x2c,0x5e,0x5c,0xf2,0xca,0xbf,0xb1,0xa1,0xad,0x46 -,0x21,0x1e,0x38,0x4f,0x68,0xc7,0xb5,0xaa,0xa4,0xa5,0xd5,0x25,0x1a,0x2e,0xd9,0x4b,0x33,0x2b,0xe4,0x9c,0x97,0xab,0x38,0x18,0x17,0x2e,0xb4,0xa3,0xa9,0xc5,0x5d,0xc1 -,0xa9,0xaa,0x30,0x1c,0x25,0x58,0xb2,0xbe,0xbf,0xb6,0xa5,0xac,0xd5,0x2b,0x1b,0x20,0x2e,0xe9,0xc7,0xbb,0xac,0xa1,0xa3,0xa0,0xbd,0x22,0x1d,0x24,0x39,0x41,0x33,0x33 -,0xbc,0x99,0x96,0xa3,0x2d,0x16,0x20,0xbc,0xa7,0xe4,0x2e,0x27,0xf8,0xa1,0x9a,0xaf,0x1e,0x16,0x1c,0x59,0xa8,0xaf,0xbb,0xbc,0xaf,0xa0,0xaa,0x39,0x1d,0x1c,0x2b,0x4d -,0xcf,0xc9,0xb2,0xa6,0xa1,0xa1,0xf8,0x21,0x1b,0x34,0x6f,0x4f,0x4d,0x49,0xa8,0xa1,0xa0,0xb1,0x34,0x1c,0x1d,0x2e,0x49,0xfc,0x39,0xe5,0xaa,0x96,0x93,0xaa,0x23,0x16 -,0x22,0x3f,0xcf,0x3c,0x2e,0x4b,0xb6,0x9f,0x9e,0xcd,0x28,0x1f,0x23,0xde,0xbb,0xbb,0xba,0xc0,0xa8,0x9f,0xba,0x22,0x15,0x1c,0x31,0xe6,0xd2,0xb9,0xa1,0x9c,0x9c,0xa0 -,0x6d,0x29,0x26,0x1f,0x2c,0x26,0x47,0xb0,0xa7,0x9d,0x9e,0xc5,0x23,0x1e,0x28,0xcd,0x43,0x26,0x28,0xd5,0x9b,0x91,0x98,0xd8,0x26,0x1c,0x2a,0x4c,0x4d,0x46,0x3a,0xf9 -,0xb8,0xa3,0xad,0xfa,0x2b,0x24,0x2f,0xea,0xb0,0xca,0x62,0x30,0xef,0xa7,0xab,0xad,0x2d,0x20,0x35,0xb4,0xa4,0xb3,0x4a,0x1a,0x26,0xee,0xa8,0xbb,0x37,0x32,0x54,0xcc -,0xa5,0xba,0x15,0xae,0x83,0x8e,0x00,0xab,0x80,0xcf,0x90,0x5b,0x21,0x0f,0x0b,0x0f,0x10,0x21,0x00,0x07,0x02,0x00,0x03,0x00,0x04,0x00,0x00,0x03,0x05,0x05,0x04,0x03 -,0x0d,0x0f,0x14,0x27,0xbd,0xa4,0x8f,0x87,0x8c,0x8b,0x81,0x80,0x87,0x83,0x80,0x80,0x80,0x81,0x80,0x81,0x80,0x81,0x80,0x80,0x80,0x80,0x82,0x82,0x87,0x89,0x85,0x8d -,0x8e,0x97,0x9a,0xa2,0xad,0xb7,0x2e,0x29,0x1b,0x1e,0x0b,0x09,0x03,0x02,0x04,0x02,0x03,0x00,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00 -,0x01,0x01,0x02,0x00,0x01,0x02,0x04,0x06,0x06,0x13,0x1b,0x2f,0x2d,0x62,0x9f,0x98,0x8c,0x89,0x86,0x85,0x84,0x84,0x82,0x81,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80 -,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x80,0x81,0x81,0x84,0x86,0x8a,0x8b,0x8d,0x98,0x9e,0xbe,0xce,0x2a -,0x1b,0x10,0x07,0x05,0x07,0x04,0x02,0x01,0x01,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x07,0x07,0x05,0x06,0x07,0x0d,0x0e,0x0e,0x14,0x19,0x1f,0x24,0x30,0x5a,0xbe,0x9f,0xa6,0x99,0x8f,0x8e,0x8a,0x8a,0x88,0x87,0x86 -,0x85,0x83,0x83,0x82,0x84,0x82,0x81,0x81,0x82,0x83,0x82,0x81,0x81,0x81,0x82,0x83,0x81,0x82,0x80,0x82,0x82,0x82,0x83,0x82,0x83,0x83,0x84,0x85,0x86,0x83,0x84,0x87 -,0x8b,0x8d,0x8a,0x8a,0x8c,0x8f,0x91,0x8e,0x8c,0x8c,0x8e,0x97,0x94,0x98,0x92,0x8e,0x92,0x95,0x9a,0x93,0x93,0x91,0x98,0x98,0x99,0x9d,0x9a,0xa1,0xa2,0x9d,0x99,0x9e -,0x9a,0xab,0xb5,0xc0,0xe3,0xb9,0x34,0x2c,0x1b,0x18,0x12,0x13,0x0e,0x08,0x06,0x04,0x03,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x05,0x07,0x0a -,0x0b,0x0d,0x11,0x18,0x20,0x2f,0x40,0xb6,0xa4,0x9c,0x8f,0x8a,0x87,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 -,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x82,0x84,0x85,0x86,0x86,0x87,0x8b,0x8f,0x94,0x9a,0x9c,0xaa -,0xe0,0x46,0x2a,0x1e,0x18,0x10,0x0d,0x0c,0x0b,0x0a,0x06,0x03,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01 -,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x03,0x02,0x04,0x05,0x06,0x09,0x06,0x07,0x07,0x08,0x0c,0x0f,0x11,0x16,0x19,0x1b,0x1e,0x1f,0x20,0x24,0x38,0x64,0xbd,0xbd,0xbb -,0xab,0x9f,0x9c,0x97,0x99,0x9c,0x99,0x98,0x90,0x8d,0x8e,0x8d,0x8d,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8a,0x8b,0x8c,0x8c,0x8d,0x8c,0x8d,0x91,0x95,0x98,0x94,0x90 -,0x91,0x96,0x9a,0x9e,0x9f,0x9c,0x9d,0xaa,0xbc,0xcc,0xc7,0xb1,0xb6,0xdc,0x64,0x4b,0x4d,0x46,0x28,0x1e,0x1f,0x26,0x32,0x2f,0x24,0x1f,0x20,0x22,0x27,0x24,0x19,0x18 -,0x1a,0x21,0x2f,0x2b,0x25,0x24,0x26,0x2d,0x2c,0x29,0x2e,0x2d,0x42,0xc0,0xbe,0xde,0xe1,0xb8,0xa4,0xa0,0xa4,0xad,0xaa,0x9f,0x97,0x91,0x93,0x93,0x95,0x96,0x92,0x91 -,0x96,0x96,0x93,0x8e,0x8e,0x91,0x96,0x94,0x90,0x8f,0x90,0x96,0x9b,0x9e,0x9b,0x9a,0x9b,0xa6,0xb6,0xb3,0xaf,0xae,0xd0,0x35,0x2e,0x33,0x48,0x4f,0x4e,0x30,0x28,0x2f -,0x33,0x2b,0x24,0x1c,0x20,0x38,0xce,0xf0,0x33,0x27,0x29,0x3b,0x56,0x77,0x32,0x28,0x2f,0x6b,0xc0,0xd5,0x3c,0x31,0x3b,0x7c,0x5f,0x32,0x26,0x27,0x3c,0xc1,0xbc,0x40 -,0x2e,0x2b,0x48,0xc7,0x45,0x2d,0x22,0x2e,0xc5,0xae,0xc8,0x2e,0x25,0x31,0xe9,0xdf,0x39,0x25,0x28,0x4d,0xb5,0xc0,0x39,0x28,0x30,0xda,0xbd,0x4d,0x21,0x1e,0x39,0xac -,0xa3,0xbf,0x2d,0x27,0x36,0xd6,0xc0,0x32,0x20,0x2a,0xcb,0xa5,0xb5,0x30,0x24,0x2e,0xc2,0xb0,0x46,0x20,0x20,0x46,0xa7,0xa6,0x5f,0x24,0x21,0x53,0xaf,0xba,0x29,0x1e -,0x2d,0xb2,0xa0,0xb1,0x36,0x27,0x39,0xc3,0xbb,0x30,0x1e,0x28,0xc1,0x9e,0xa4,0x3b,0x20,0x28,0x5b,0xaf,0xe9,0x27,0x20,0x30,0xab,0xa2,0xb8,0x2c,0x25,0x34,0xb9,0xb6 -,0x38,0x22,0x27,0xbe,0xa0,0xa4,0x56,0x27,0x2c,0x53,0xb5,0xd6,0x29,0x20,0x3a,0xa7,0x9f,0xb0,0x2e,0x21,0x32,0xbd,0xaf,0x4c,0x23,0x2f,0xba,0xa2,0xa6,0x40,0x24,0x2b -,0xc9,0xaa,0xc3,0x26,0x1d,0x3e,0xa2,0x9a,0xaf,0x2a,0x1f,0x39,0xaf,0xae,0x4c,0x1f,0x2c,0xb3,0x9b,0xa0,0x3b,0x1d,0x27,0xc1,0xa4,0xb9,0x25,0x1f,0x4c,0x9e,0x9a,0xbe -,0x21,0x1f,0x52,0xa4,0xa3,0x3a,0x1d,0x2c,0xaf,0x99,0xa7,0x2d,0x1e,0x2a,0xb9,0xa4,0xe6,0x20,0x22,0xbc,0x99,0x9d,0x4e,0x1c,0x22,0xc5,0xa2,0xab,0x2d,0x1d,0x34,0xa7 -,0x9a,0xac,0x24,0x1c,0x3d,0xaa,0xa1,0x45,0x1d,0x25,0xb6,0x98,0x9f,0x4e,0x1e,0x25,0xc4,0xa5,0xb7,0x24,0x1b,0x38,0x9e,0x97,0xae,0x25,0x1d,0x37,0xaa,0xa7,0x58,0x22 -,0x28,0xaf,0x9c,0xa2,0x3e,0x1f,0x28,0xc3,0xa3,0xbb,0x24,0x1b,0x4c,0x9d,0x98,0xb0,0x20,0x1d,0x34,0xab,0xa6,0x43,0x1e,0x25,0xad,0x97,0x9a,0x4a,0x1a,0x1f,0xcf,0xa2 -,0xb3,0x24,0x1c,0x69,0x9d,0x96,0xb8,0x1e,0x1a,0x32,0xa4,0x9e,0x4f,0x18,0x22,0xac,0x91,0x98,0x3c,0x18,0x1c,0xcf,0xa2,0xb6,0x1f,0x1c,0x78,0x98,0x94,0xbb,0x1a,0x17 -,0x39,0xa4,0x9e,0x36,0x1a,0x2d,0xa3,0x91,0x9c,0x2a,0x15,0x1f,0xbf,0x9d,0xc0,0x1b,0x20,0xcb,0x97,0x95,0xc9,0x1b,0x19,0x3b,0xa5,0xa5,0x2a,0x1a,0x38,0x9c,0x8f,0x9c -,0x27,0x16,0x24,0xc5,0xa0,0xda,0x1c,0x1e,0xcc,0x9b,0x97,0xbe,0x1a,0x1f,0x43,0xa2,0xa5,0x2e,0x1f,0x49,0xa0,0x95,0xa2,0x21,0x19,0x1f,0xcb,0xa1,0x5c,0x1e,0x25,0xbe -,0x97,0x93,0xce,0x1c,0x1a,0x39,0xa3,0xa7,0x2e,0x22,0x4d,0xab,0x96,0xa6,0x26,0x1c,0x20,0xbe,0xa1,0x40,0x1c,0x24,0xc9,0x94,0x93,0xe3,0x1f,0x1e,0x3f,0xa3,0xae,0x2a -,0x20,0x30,0xab,0x94,0xa8,0x28,0x1a,0x24,0xb1,0xa0,0x39,0x1f,0x2d,0xb8,0x93,0x9b,0x3c,0x1f,0x1f,0xe8,0x9e,0xba,0x20,0x1f,0x2f,0x9e,0x92,0xaf,0x2a,0x1c,0x28,0xad -,0xb0,0x24,0x23,0x33,0xa4,0x90,0x9e,0x31,0x1f,0x26,0xc7,0x9f,0x3f,0x1c,0x20,0x3d,0x99,0x93,0xc3,0x25,0x26,0x39,0xa3,0xb4,0x1d,0x23,0x2f,0xaa,0x92,0xa8,0x2c,0x2b -,0x2c,0xb2,0xa6,0x24,0x1b,0x29,0xc3,0x93,0x95,0x3c,0x26,0x25,0x3b,0xa1,0x57,0x1d,0x25,0x44,0xa2,0x94,0xad,0x2d,0x39,0x38,0xad,0xb4,0x1c,0x1c,0x2f,0xb6,0x94,0x9b -,0x33,0x2c,0x2f,0xd8,0xa3,0x2e,0x17,0x26,0x47,0xa0,0x94,0xb7,0x41,0x3e,0x49,0xab,0xcf,0x1d,0x1f,0x3c,0xaf,0x99,0xad,0x2b,0x2a,0x3b,0xad,0xac,0x28,0x18,0x26,0xc3 -,0x99,0x93,0xb5,0x37,0x2d,0x4e,0xaf,0x3f,0x18,0x1c,0x4e,0xa4,0x96,0xad,0x2f,0x2e,0xec,0xa9,0xbb,0x20,0x17,0x2b,0xb0,0x94,0x98,0xcd,0x2f,0x31,0xbd,0xae,0x31,0x18 -,0x1d,0x39,0xaa,0x9c,0xac,0x72,0xe5,0xb6,0xae,0x7b,0x1b,0x1c,0x3f,0xac,0x9b,0xac,0x38,0x31,0x51,0xb6,0xad,0x2a,0x1a,0x2a,0x42,0xa7,0x9c,0xb9,0xd5,0xe0,0xd4,0xac -,0x3c,0x16,0x21,0x3a,0xac,0x9c,0xba,0xd7,0xe1,0x66,0xae,0xb3,0x1e,0x1d,0x22,0x5e,0x9c,0xa1,0xba,0xdf,0xe3,0xd2,0xae,0x39,0x22,0x2a,0x2e,0xbd,0xa6,0xb8,0x6a,0xc1 -,0xbf,0xa8,0xb9,0x1a,0x1b,0x2a,0xce,0xa2,0xa8,0xce,0xba,0xbb,0xbd,0xab,0x2c,0x19,0x22,0x3d,0xb8,0xa4,0xc5,0xf7,0xad,0xae,0xb0,0x47,0x1c,0x1c,0x33,0xc7,0xaa,0xa8 -,0x65,0xb3,0xab,0xae,0xb4,0x25,0x19,0x1d,0x3b,0xdf,0xab,0xd6,0xc0,0xa2,0xa6,0xb2,0x77,0x1d,0x23,0x2e,0x4a,0xb5,0xbe,0xd4,0xbe,0xa1,0xac,0xb6,0x20,0x15,0x25,0xc3 -,0xb4,0xa5,0x34,0x66,0xaf,0xae,0xb0,0x3f,0x1c,0x1d,0xd9,0xec,0xb3,0xbc,0xad,0xa9,0xa1,0xc6,0x6b,0x22,0x18,0x2a,0x2e,0xb3,0xb0,0x66,0xcb,0xa6,0xac,0xbd,0xaf,0x29 -,0x36,0x4d,0x35,0xc4,0xb8,0xd1,0xcc,0xaf,0xd0,0x7c,0x24,0x28,0x42,0xde,0xec,0x4e,0xbe,0xb5,0xa1,0xa8,0xb6,0x45,0x1e,0x2b,0xd2,0x43,0xd3,0xc2,0xd7,0xa9,0xdc,0xb7 -,0xcf,0x2f,0x25,0x3f,0xc0,0x2c,0xaf,0x4f,0xb0,0x99,0xbd,0xb6,0x38,0x26,0x3a,0x4b,0x3c,0x3f,0xcf,0xe8,0xac,0xb3,0x4d,0xd3,0x2b,0x26,0xc3,0x39,0x34,0xb2,0x48,0xa8 -,0x9e,0xab,0xbe,0x4e,0x3f,0x3e,0xb5,0x29,0x3a,0x50,0x3f,0xa7,0xb2,0x3a,0x6b,0x27,0x21,0xb6,0x2a,0x30,0x65,0x5f,0xaf,0xa7,0xde,0x36,0x46,0x27,0x47,0xbc,0x43,0xc3 -,0xb4,0xb1,0x9b,0xa0,0xc3,0xb7,0x34,0x3b,0xbf,0x3d,0x3e,0x57,0x56,0xbe,0xb1,0x2c,0x3a,0x2f,0x1f,0x42,0x3a,0x22,0x4c,0x5f,0xbc,0xa6,0xbe,0x4a,0x5e,0x47,0x49,0xa6 -,0x35,0xe8,0xaa,0xbb,0xa2,0xa1,0x48,0xc3,0x62,0x39,0xae,0x3e,0x30,0x5e,0xaf,0xce,0xa7,0x59,0x33,0xc1,0x22,0x3b,0xd7,0x20,0x35,0xc7,0x39,0xa5,0xb6,0x3b,0xc9,0x4a -,0x37,0x6e,0x42,0x26,0xae,0xaa,0xbd,0xa2,0x3e,0x46,0xaa,0x2f,0xd5,0xba,0x21,0x44,0x6d,0x49,0xb5,0x3e,0x28,0x54,0x66,0x45,0xbc,0x36,0x2b,0xaf,0xda,0xbe,0xa0,0x4b -,0xb2,0xbf,0x33,0xb7,0x5c,0x28,0xdc,0xaf,0xcd,0xa4,0xbb,0x37,0xad,0x46,0x2f,0xa5,0x2a,0x2c,0xb6,0x31,0xb7,0xc9,0x32,0xf0,0xbf,0x32,0x4e,0x3d,0x1b,0x3f,0xc8,0x3b -,0xa9,0xc2,0x2e,0xa5,0x37,0xee,0xad,0x31,0x67,0xb1,0xb3,0xb2,0xa9,0x36,0x3b,0xd0,0x2e,0xc2,0xb8,0x1e,0xb5,0xc5,0x55,0xa3,0x3b,0x59,0xb3,0xce,0xba,0xba,0x2a,0x2f -,0xc5,0xc8,0xd8,0xa4,0x34,0x4d,0xad,0x22,0xb0,0x3f,0x22,0xad,0xc7,0xcc,0xad,0x37,0x43,0xb6,0xd9,0x67,0xc7,0x27,0x22,0xb5,0x25,0x5f,0xb7,0x1f,0xb6,0xe0,0x35,0xb3 -,0x36,0x28,0xbc,0xbf,0xbf,0xaa,0x61,0x37,0xaf,0x4d,0x38,0xa7,0x24,0xba,0xa1,0x4a,0xa0,0xca,0x2f,0xab,0x60,0x51,0xa8,0x4f,0x3f,0xbb,0x62,0x33,0xa6,0x3b,0x66,0xa5 -,0x2f,0xbf,0xd8,0x1c,0xe1,0xc9,0x34,0xa7,0x6e,0x39,0xc0,0x38,0x36,0xb2,0x30,0x2d,0xab,0x3a,0x4b,0xaf,0x21,0x3d,0xca,0x29,0xaa,0x7d,0x27,0xb7,0x49,0x3a,0xbc,0x3f -,0x2f,0xc7,0x59,0x72,0xaa,0x33,0x48,0xa5,0x3f,0xa8,0xa0,0x32,0xb1,0xc4,0x45,0xa9,0xd5,0x44,0xa8,0xce,0x3a,0xb4,0x3e,0x32,0xac,0xb9,0xbb,0xaa,0x1e,0x60,0xbb,0x2b -,0xb7,0x4a,0x34,0xca,0xbe,0x3c,0xbf,0x37,0x28,0xbb,0x47,0x2e,0xb4,0x2b,0x28,0xab,0x30,0xbf,0xd6,0x28,0xaa,0xb8,0x38,0xbe,0x47,0x27,0xea,0xd8,0x4f,0xb9,0x3c,0x32 -,0xa7,0x33,0x33,0xa8,0x2c,0xb8,0xa4,0x46,0xb2,0x46,0x39,0xa8,0xb3,0x52,0xaf,0xc9,0x2c,0xab,0xb6,0xd4,0xa8,0x39,0xcd,0xa8,0x26,0xca,0xb9,0x27,0xb2,0xbc,0xd0,0xb4 -,0x55,0x46,0xc3,0x46,0x2b,0xb5,0x31,0x21,0xb6,0x2e,0x4f,0x6b,0x20,0xd3,0x5f,0x30,0xac,0xcd,0x26,0x3d,0x41,0x32,0xbe,0xed,0x4b,0xa6,0x33,0x4b,0xaf,0x20,0x3b,0xb7 -,0x4d,0xaa,0xd9,0x30,0xbf,0x52,0xe6,0xaa,0xdb,0x29,0xb8,0xbc,0xbf,0x9e,0xd0,0xbe,0xae,0x2e,0xa5,0xb9,0x1f,0xda,0x72,0xbc,0xad,0xc8,0xd5,0xb7,0xdc,0xe5,0xa8,0x2f -,0x25,0xbb,0x54,0xae,0xa7,0x2e,0xef,0x33,0x29,0xab,0x33,0x2b,0x4e,0x33,0x3a,0x3f,0x5b,0x38,0xd1,0x39,0xe0,0xb2,0x1e,0x31,0xc1,0x3f,0xa7,0xbd,0x47,0xcc,0x24,0x48 -,0xc8,0x39,0x33,0xdf,0x5b,0x4b,0xae,0xc7,0xc7,0xc1,0x3e,0xa7,0xae,0x2c,0xaf,0xd9,0xe6,0xac,0xec,0xbf,0xe6,0x3d,0xb4,0xac,0x7d,0x37,0x6b,0x31,0x54,0xa1,0xe8,0xaf -,0x3d,0x34,0xa9,0x3c,0x7a,0xb8,0x3e,0x39,0xdd,0xd5,0xda,0x43,0x39,0xbe,0xae,0x2f,0x34,0x48,0x1d,0xc2,0xb6,0xc2,0xab,0x2b,0xe9,0xb6,0x3c,0xe6,0x42,0x2c,0x37,0xbb -,0xb1,0xe1,0x6f,0x28,0xcf,0xbc,0x2a,0xb0,0x29,0x28,0xad,0xbf,0xac,0x73,0x2a,0xb9,0xb2,0xbd,0xbe,0x3e,0x28,0x32,0xa4,0xae,0xae,0x3d,0x25,0xb7,0x3b,0x45,0xaf,0x22 -,0x53,0xb9,0xc5,0xa2,0x32,0x4b,0xc5,0xae,0xb0,0xc8,0x3f,0x1e,0xee,0xae,0xb9,0xb7,0x28,0x3e,0xaf,0x36,0xac,0x3e,0x1f,0xd8,0xee,0xa1,0xaa,0x34,0x4b,0xde,0xc5,0xe3 -,0xcb,0x2f,0x28,0xab,0xb8,0xaf,0x58,0x18,0xdc,0x4d,0xc0,0xa0,0x2a,0x2b,0x33,0xd1,0xa5,0xaf,0x47,0x48,0xb3,0xe0,0xc9,0xd3,0x1d,0x39,0xc3,0xd9,0xaa,0x2d,0x24,0xdb -,0x3b,0xb2,0xac,0x29,0x39,0x4f,0xab,0xa3,0xc2,0x34,0x43,0xae,0x66,0xa9,0x4f,0x1c,0x3d,0x3d,0xae,0xa8,0x28,0x3e,0xe8,0xf4,0xa9,0x61,0x2a,0x2b,0xb9,0xa4,0x9f,0xb2 -,0x24,0x47,0x55,0xc6,0x9e,0x32,0x2a,0x3d,0x4f,0xa6,0xdf,0x2e,0x3f,0x42,0xbd,0xa9,0xca,0x29,0x2d,0xc2,0xb4,0x9f,0x4c,0x23,0xcf,0x3f,0xab,0xb0,0x24,0x28,0x2b,0xbc -,0xa5,0x6f,0x2a,0x28,0x49,0xae,0xa5,0xc0,0x27,0x48,0xc9,0xad,0xa3,0x24,0x33,0x5f,0xef,0x9c,0xbe,0x24,0x1c,0x26,0xae,0xa5,0xbd,0x28,0x2d,0x4e,0xb1,0x9d,0x64,0x29 -,0x56,0xc6,0x9e,0xae,0x21,0x43,0x34,0xad,0x9c,0x5c,0x29,0x1f,0x48,0xb7,0xa5,0x4f,0x1f,0x45,0x59,0x9f,0x9b,0x2e,0x2a,0x32,0x5f,0x9b,0xca,0x31,0x28,0x39,0xa1,0xa5 -,0xee,0x17,0x26,0x4d,0xa1,0x9c,0x27,0x25,0x36,0x49,0x9a,0xa3,0x2c,0x29,0x2c,0xc1,0xa2,0xbf,0x2a,0x2c,0x55,0xac,0xa4,0x7b,0x18,0x29,0x3b,0xa1,0x9f,0x23,0x2b,0x2c -,0xae,0x95,0xad,0x21,0x25,0x4c,0xa7,0x9e,0xd7,0x1c,0x23,0xeb,0xaf,0x9c,0x23,0x19,0x34,0xe9,0x98,0xae,0x2c,0x1f,0x3b,0xa1,0x92,0xaa,0x1e,0x1d,0x3e,0xa2,0x9a,0x5f -,0x16,0x2e,0x50,0x9d,0xa0,0x1c,0x1d,0x34,0xae,0x97,0xae,0x26,0x1f,0xee,0xa4,0x9a,0xc2,0x17,0x31,0xcf,0xa2,0x9d,0x27,0x18,0x26,0xd0,0x95,0xa3,0x19,0x1b,0x3d,0xa3 -,0x96,0xb1,0x1b,0x27,0xbd,0x9e,0x95,0x23,0x13,0x28,0xbd,0x9b,0x9e,0x1d,0x15,0x2f,0xd2,0x95,0xc5,0x1c,0x27,0xef,0xa9,0x95,0xc7,0x19,0x3d,0xbf,0x98,0x97,0x1e,0x17 -,0x3c,0x52,0x9d,0xb7,0x16,0x22,0xe3,0xa6,0x97,0x3d,0x13,0x39,0xb6,0x9e,0x94,0x28,0x1d,0xc4,0xd7,0x97,0xa4,0x16,0x1f,0x5f,0xd3,0x9c,0x4e,0x0f,0x31,0xbe,0x9c,0x8f -,0x2c,0x17,0x65,0x3d,0xa6,0x9b,0x17,0x27,0xbb,0xc4,0x95,0xbd,0x11,0x3d,0xb6,0x48,0x9b,0x27,0x13,0xb9,0xc3,0x9f,0x96,0x1b,0x25,0xa9,0x40,0x9f,0xbf,0x0f,0x39,0xaf -,0xb3,0x95,0x45,0x14,0xd3,0x43,0xda,0xa4,0x17,0x1c,0xaa,0xb4,0x99,0x9f,0x19,0x40,0xaf,0xf1,0x98,0x49,0x15,0x41,0x66,0xad,0x9a,0x2e,0x1d,0xb8,0x2c,0xd1,0xb1,0x14 -,0x39,0xaf,0xc4,0x93,0xa8,0x1e,0xb7,0xc7,0x36,0xa2,0x29,0x1b,0xc4,0x53,0xb1,0x9c,0x20,0x38,0xa8,0x2b,0xa4,0xea,0x16,0x50,0xba,0xcc,0x96,0xc9,0x24,0xa5,0x3a,0x54 -,0xa6,0x17,0x1a,0xbb,0x6d,0x9b,0xa1,0x1c,0xc8,0xc9,0x31,0xa0,0x59,0x1b,0xcf,0xfb,0xbd,0x97,0x48,0x42,0xaa,0x31,0xbe,0xb0,0x13,0x26,0x47,0x3b,0x9c,0xb4,0x2f,0xae -,0xdb,0x42,0xa2,0x26,0x28,0xb9,0x3d,0xa4,0x9b,0x29,0xc3,0xad,0x2b,0xae,0x41,0x1b,0xda,0x47,0x42,0x9f,0x33,0x36,0xa5,0x6b,0xba,0xa5,0x26,0x33,0xcb,0x29,0xbe,0xe3 -,0x2a,0xbe,0xb7,0x30,0xcf,0xaa,0xaa,0xad,0xc9,0x36,0x37,0xd4,0x2d,0x29,0x5f,0xa1,0x94,0xa0,0x1f,0x19,0x1c,0x21,0x2d,0x39,0x6e,0x35,0xcf,0x9a,0x8d,0x98,0xa4,0xa0 -,0xa5,0x20,0x03,0x05,0x0e,0x43,0x8f,0x88,0x86,0x9c,0x18,0x11,0x2c,0xad,0xf1,0x11,0x2a,0xb4,0x33,0x0f,0x2e,0x8c,0x83,0x89,0xa5,0x3c,0x17,0x1d,0x15,0x4e,0xa0,0x94 -,0x20,0x0b,0x12,0x0f,0x0a,0x0b,0x36,0x3d,0x9f,0x8e,0x88,0x92,0x8e,0x92,0x93,0x99,0x38,0x23,0x18,0xb7,0xa6,0x27,0x15,0xa8,0x88,0xa7,0x17,0x0e,0x06,0x02,0x00,0x0d -,0x8d,0x80,0x82,0x84,0x8b,0xa7,0x0d,0x00,0x04,0x2c,0x8e,0x86,0x86,0x8f,0xcd,0x19,0x0f,0x10,0xd6,0xba,0x3f,0x20,0xaf,0x91,0x2c,0x1d,0x4c,0x5d,0xdc,0x4b,0x1c,0x12 -,0x0d,0x60,0x87,0x80,0x98,0x26,0x32,0x2f,0x17,0x03,0x04,0x3c,0x8b,0x86,0x83,0x86,0x92,0x98,0xb2,0x23,0x1b,0x0d,0x06,0x03,0x13,0xb2,0x3a,0x1e,0xb4,0x94,0xca,0x23 -,0x3e,0x54,0xb7,0x54,0x8f,0x81,0x82,0x8d,0x5b,0x4d,0x25,0x0b,0x00,0x10,0xbb,0x9e,0x9e,0xa5,0x1d,0x0c,0x0b,0x08,0x33,0x99,0x8c,0x8c,0x8e,0x96,0xc0,0x0e,0x0d,0x99 -,0x87,0x92,0x4c,0x33,0x18,0x1a,0x37,0xa3,0x8d,0x99,0x48,0x28,0xbc,0x2e,0x0f,0x10,0x24,0x15,0x1a,0x3a,0xca,0xd6,0x7a,0xac,0xa1,0x9b,0xd6,0x24,0x27,0xb2,0x9c,0xd3 -,0x16,0xab,0x8b,0x8a,0x8d,0x9e,0x37,0x1c,0x18,0x18,0x50,0x3c,0x20,0x28,0xcc,0x21,0x0e,0x09,0x1c,0x9c,0xb0,0xdf,0x9d,0x96,0xa3,0x94,0x89,0x89,0x9c,0xbe,0x35,0x21 -,0x16,0x06,0x02,0x1d,0x8a,0x80,0x8c,0x1e,0x08,0x0a,0x0c,0x0a,0x18,0xb2,0x90,0x83,0x86,0x8f,0x33,0x0a,0x0f,0x21,0x2d,0x1e,0x51,0x93,0x95,0x99,0x9b,0x98,0xaa,0x21 -,0x1b,0x28,0x19,0x0f,0x21,0xa8,0x8e,0x8c,0xa9,0x25,0x25,0x20,0x1c,0x28,0x37,0x41,0x9f,0xa6,0xbe,0x9e,0xa2,0x1e,0x0e,0x1f,0x4b,0x2a,0xbc,0x8f,0x8a,0x90,0x7a,0xb5 -,0x9b,0xb0,0x3e,0x1f,0x0d,0x06,0x05,0x0b,0x26,0x97,0x89,0x8c,0x95,0x35,0x18,0x16,0x24,0x9d,0x8b,0x87,0x90,0xbb,0x30,0x18,0x0e,0x16,0xdc,0x9f,0xb2,0x33,0x1f,0x16 -,0x11,0x32,0xb7,0xb7,0xb8,0xa2,0x90,0x91,0xeb,0x1c,0x4a,0xa4,0xcc,0xbe,0xa4,0xa9,0xa7,0xbc,0x25,0x17,0x2c,0x40,0x3d,0x5c,0x75,0x5b,0x31,0x1f,0x3a,0xae,0x47,0x1f -,0x24,0x3f,0x3f,0x77,0xa9,0x92,0x8d,0x8f,0xa0,0x25,0x0e,0x07,0x0f,0x49,0x9c,0x9a,0x8f,0x8f,0xa4,0x59,0x1e,0x1e,0x57,0x9b,0x98,0x68,0x15,0x0e,0x0c,0x0d,0x1d,0xbb -,0xa7,0xa6,0xc4,0x49,0xd7,0xd5,0xa4,0x8e,0x8b,0x8c,0x91,0x9f,0x2f,0x10,0x10,0x17,0x2d,0xb1,0x9b,0x96,0xaa,0x12,0x06,0x0a,0x10,0x1a,0x2e,0xc6,0x9c,0x8b,0x8d,0xbf -,0x2f,0xb6,0xa4,0xaf,0xcf,0xbc,0xab,0xa8,0xbe,0xe3,0xab,0xaf,0x2f,0x20,0x1c,0x18,0x18,0x1e,0x6c,0x9d,0x96,0x9c,0x2d,0x0e,0x0f,0x25,0xad,0x93,0x93,0x97,0x9d,0x6b -,0x1a,0x10,0x14,0x20,0xb7,0x9c,0x94,0x95,0x9e,0xce,0x3f,0xac,0x99,0x9f,0xd6,0x23,0x1c,0x19,0x0e,0x0a,0x13,0x2c,0xcd,0x9e,0x99,0xa9,0xdc,0x3d,0x2e,0xb9,0x9a,0x93 -,0x8f,0x92,0xb3,0x1f,0x15,0x14,0x1f,0xdc,0x9f,0x98,0x9c,0x34,0x11,0x0f,0x1f,0x69,0xd1,0x46,0x4c,0xb7,0xa2,0xbb,0x2d,0xd3,0x9e,0xa9,0x56,0x29,0x26,0xcd,0xa3,0x9c -,0x9d,0x9d,0xa5,0x38,0x14,0x15,0x24,0x41,0xb5,0xbe,0xc1,0x9f,0xa9,0x20,0x0e,0x0c,0x1e,0xa5,0x99,0x9b,0x99,0x9f,0x4c,0x1f,0x16,0x1e,0x45,0xb6,0xa3,0x9b,0x91,0x96 -,0xe4,0x21,0x54,0xa5,0x9b,0xa7,0x2b,0x17,0x10,0x0d,0x10,0x1e,0x44,0xa5,0x9a,0xa6,0x48,0x2b,0x2f,0xae,0x98,0x93,0x97,0xa2,0xc5,0x2f,0x23,0x2c,0x3c,0x2c,0x2d,0xb8 -,0x9c,0x9d,0xdd,0x1b,0x1a,0x32,0x44,0x28,0x1a,0x1a,0x3e,0xa8,0xa2,0xa2,0xa5,0xa2,0xab,0x6d,0x2a,0x24,0x4c,0xa8,0xa2,0xaa,0x9e,0x9e,0x49,0x1b,0x13,0x15,0x3b,0xac -,0xbc,0xa1,0x9b,0xb2,0x24,0x0e,0x13,0x43,0xa3,0xa2,0xa7,0xa7,0xb3,0x36,0x1d,0x18,0x28,0xb5,0x9f,0xa2,0xa5,0x9f,0xab,0xbf,0xb4,0xaa,0x9e,0xa1,0x71,0x1c,0x16,0x15 -,0x16,0x19,0x19,0x27,0x3f,0xc9,0xb8,0xbc,0xb9,0xa4,0x9d,0xa2,0x9c,0x9a,0x9d,0xac,0x2d,0x23,0x36,0x31,0x2d,0x3e,0xc9,0xaa,0xb9,0x2e,0x1f,0x29,0x39,0x33,0x2d,0x23 -,0x33,0x4f,0xc2,0xad,0xaa,0x9c,0x97,0x9f,0x49,0x1f,0x1e,0x5d,0x9f,0x9f,0xa4,0xb0,0x6e,0x26,0x17,0x16,0x29,0xb7,0xa4,0x9f,0x9c,0x9d,0xb1,0x24,0x0f,0x13,0x21,0x4c -,0xc1,0xc9,0xae,0xa5,0xc3,0x27,0x1a,0x25,0xca,0xae,0xb3,0xa9,0x9a,0x94,0x99,0xa4,0xad,0xae,0xb6,0x38,0x17,0x0d,0x0e,0x11,0x1a,0x3d,0xaf,0xae,0xb8,0x4a,0x2d,0xb2 -,0x9f,0x9f,0x9f,0xa0,0x9c,0x98,0xa5,0x38,0x2f,0x2d,0x30,0x2e,0x28,0x38,0xc7,0xb8,0xc9,0x4c,0x43,0xcc,0x36,0x1d,0x15,0x14,0x1f,0xed,0xab,0x9f,0x96,0x95,0x9e,0xcc -,0x37,0x34,0x45,0xcb,0xd7,0xcb,0xb2,0xac,0x5a,0x1f,0x1d,0x24,0x62,0xac,0xb7,0xbe,0xaf,0xb0,0x5b,0x2c,0x22,0x3c,0xaa,0xab,0x77,0x31,0x2c,0x23,0x26,0x2e,0xbb,0x9e -,0x9f,0xae,0xd8,0xb2,0xa2,0xa3,0xab,0xad,0xb5,0xb5,0x5f,0x1d,0x1d,0x24,0x25,0x1a,0x14,0x16,0x26,0x5b,0x6d,0xc3,0xaf,0xa0,0x98,0x97,0x9b,0x9c,0xaf,0x40,0x2f,0x33 -,0xc4,0xaf,0xdb,0x53,0xd5,0xbf,0xc8,0x2b,0x1a,0x1c,0x2b,0x36,0x4c,0x2a,0x20,0x2f,0xb2,0x9a,0x97,0x9c,0xad,0x3e,0x20,0x2d,0xbf,0x9b,0x96,0xa3,0x4e,0x26,0x22,0x1f -,0x1f,0x21,0x31,0xc7,0xaa,0xa7,0x9c,0x9b,0xa7,0x5e,0x1a,0x15,0x1f,0x40,0xc7,0xd1,0x37,0x35,0x37,0x3a,0x65,0x66,0xc6,0xb3,0xc4,0x7a,0xa4,0x98,0x96,0x95,0x9b,0xa4 -,0xca,0x1a,0x0d,0x0e,0x19,0x2b,0x2d,0x26,0x2d,0x4f,0xc5,0xb7,0xc5,0xb5,0xab,0xbc,0xdd,0xac,0x9d,0x93,0x99,0xc0,0x45,0x38,0x2c,0x2a,0x3f,0x46,0xea,0x4f,0x2e,0x6b -,0xb5,0xaf,0x43,0x19,0x0d,0x13,0x2d,0xad,0x9a,0xa2,0x9e,0x9b,0xa3,0xbc,0x43,0x3b,0xd6,0xba,0xdb,0x3a,0x35,0x34,0x34,0x4e,0xb9,0xad,0xd7,0x2c,0x26,0x4b,0xb0,0xa7 -,0xbb,0x4a,0x34,0x30,0xcc,0xbd,0x37,0x29,0x26,0x1f,0x23,0x2b,0x6f,0x9a,0x92,0x9e,0xb5,0xee,0xc9,0xa4,0x9e,0x9e,0xae,0x2e,0x1e,0x23,0x3d,0xc6,0x34,0x18,0x10,0x16 -,0x26,0x37,0x54,0xc9,0x9f,0x99,0x9b,0xa0,0xb6,0xbb,0xa8,0xa4,0xad,0xcd,0x3a,0x3c,0xe8,0xb6,0xa0,0xab,0x2c,0x17,0x13,0x1d,0x40,0x48,0x25,0x23,0x32,0xce,0xa5,0xa6 -,0xaf,0xa3,0xa4,0xbf,0x36,0x2b,0xc4,0x97,0x94,0xa8,0x2d,0x1a,0x1a,0x27,0x50,0x40,0x2b,0x29,0xbf,0x9e,0x94,0x98,0xb9,0x30,0x1f,0x23,0x2c,0x34,0x25,0x1e,0x2d,0xb9 -,0xa1,0xb5,0x28,0x23,0xcd,0xa3,0xa3,0xba,0xc3,0xa5,0x98,0x93,0x95,0xad,0x2d,0x1b,0x17,0x1c,0x1e,0x19,0x1e,0x44,0xca,0xc4,0x5f,0x30,0x28,0xc5,0xa6,0xb1,0x3f,0x34 -,0xa8,0x90,0x8d,0x9a,0xcd,0x39,0x4e,0xf8,0x59,0x2f,0x1f,0x29,0x60,0xb8,0xaa,0x43,0x17,0x14,0x1d,0x33,0xce,0x49,0x29,0xde,0x9b,0x8e,0x92,0xb5,0x29,0x2f,0xa7,0x9d -,0xcb,0x1d,0x1b,0x2d,0xb6,0xa8,0xb9,0x40,0x2b,0x2e,0x4d,0xc6,0xf7,0x4e,0xba,0xa8,0xad,0xeb,0x2d,0x22,0x28,0x69,0x59,0x1e,0x13,0x1c,0xac,0x8e,0x90,0xbc,0x2e,0xcc -,0x9c,0x91,0x9b,0x37,0x1c,0x34,0xb6,0xa6,0xad,0x27,0x11,0x13,0x24,0x48,0x2f,0x18,0x17,0x3b,0x9b,0x94,0xaa,0x39,0x41,0x9f,0x8e,0x97,0x42,0x28,0xc8,0x9f,0x9c,0xb6 -,0x3c,0x3c,0x4a,0x3f,0x2c,0x1b,0x0e,0x11,0x27,0xe5,0xb6,0xbe,0x5f,0xd7,0xa0,0x98,0xa9,0x2a,0x23,0xbb,0x94,0x91,0xb5,0x1e,0x1f,0xba,0x9c,0xaa,0x1d,0x0e,0x16,0xde -,0x98,0x96,0xad,0x2b,0x2b,0xad,0x9c,0xb8,0x1d,0x0f,0x18,0x56,0xa1,0xad,0x3e,0x2c,0x3c,0xb0,0xa9,0x42,0x20,0x4a,0x9e,0x98,0x9f,0xb9,0xc6,0xa5,0x9b,0xa7,0x2d,0x11 -,0x0f,0x1d,0x6e,0xc6,0x3f,0x32,0x2c,0x54,0xb7,0xbf,0x1f,0x1a,0x3f,0xa1,0x8f,0x94,0xbb,0x49,0xa4,0x94,0x94,0xd2,0x19,0x14,0x3e,0xb5,0x9d,0x5f,0x10,0x17,0x20,0xd1 -,0xb3,0x36,0x1d,0x1e,0x47,0xa9,0x95,0x9f,0xaf,0xa9,0xb3,0x99,0xc0,0x27,0x1b,0x54,0xaa,0xb1,0x29,0x1e,0x3f,0xd0,0xa3,0xb5,0x4c,0x2a,0x3f,0xd7,0x9f,0xb9,0x30,0x50 -,0xde,0xbb,0xbb,0x22,0x10,0x1e,0xd3,0x9d,0xa7,0xbe,0x2e,0x3d,0x9d,0x93,0x98,0x52,0x1e,0x2a,0xad,0x9c,0xa6,0x34,0x27,0x1d,0x2a,0x45,0x26,0x1f,0x1e,0x35,0x3f,0x6f -,0x3c,0xcc,0x9f,0x99,0x9a,0xa6,0x36,0x1c,0x35,0x9f,0x91,0x9e,0x3e,0x22,0x72,0xbf,0xa8,0xc8,0x1f,0x1d,0x19,0x1f,0x2b,0x41,0xb2,0xa1,0xad,0xbd,0x3e,0x32,0x32,0xb5 -,0x9e,0x9f,0xb0,0x2c,0x2c,0x59,0x9d,0x98,0x75,0x13,0x11,0x26,0xbf,0x9b,0xa7,0xbf,0x3b,0x25,0x58,0x6a,0xd7,0xee,0xc8,0x3a,0x26,0x22,0x38,0xaf,0xa4,0x9f,0xc3,0x28 -,0x19,0x2e,0xad,0x97,0x9c,0xb3,0xcf,0x35,0xb9,0xa6,0x9f,0xb4,0x24,0x1a,0x1a,0x35,0xc5,0xaf,0xb7,0x3b,0x21,0x1b,0x21,0x4e,0xaf,0xa2,0xa6,0xae,0xc1,0xcd,0xa9,0xa6 -,0x9c,0x9d,0x5c,0x19,0x1b,0xe4,0xab,0xae,0x42,0x1f,0x1d,0x1f,0x2f,0xc4,0xd0,0xe3,0x5f,0x36,0x4f,0xac,0xab,0xa8,0xac,0xb6,0xc9,0x2a,0x27,0x3d,0xae,0xa0,0xb3,0x24 -,0x1a,0x34,0xaa,0x9c,0x9f,0xc7,0x27,0x1f,0x2f,0xd5,0xa5,0xac,0x4a,0x23,0x23,0x30,0x5a,0xc5,0xda,0xc4,0xc5,0xd6,0x37,0x76,0xac,0x9d,0x9d,0xb1,0x38,0x21,0x32,0xc0 -,0xa8,0xa4,0xcc,0x25,0x18,0x2b,0xad,0xa8,0xc8,0x2e,0x1f,0x1c,0x1f,0x49,0xa2,0xa3,0xae,0xc5,0x3d,0x2a,0x50,0xac,0x9f,0x9e,0xac,0x47,0x2b,0x41,0xaf,0xa5,0xe6,0x1e -,0x1d,0x25,0x39,0xbd,0xb6,0xdb,0x2d,0x23,0xe0,0xa5,0xa7,0xae,0x32,0x2d,0xd0,0xad,0xa7,0xb5,0x4c,0x2b,0x33,0x37,0x37,0xce,0xa3,0x9c,0xa7,0xad,0xd2,0x32,0x28,0x4b -,0xb0,0x72,0x2e,0x1f,0x1e,0x24,0x2e,0x52,0x48,0x35,0x57,0xb3,0xce,0xf1,0xc0,0xb9,0xb4,0xb1,0xac,0xac,0xae,0xa8,0xa7,0xbc,0x3c,0x2c,0x3f,0xad,0xa8,0xb2,0x34,0x19 -,0x16,0x23,0xde,0xd5,0x3a,0x32,0x34,0x2f,0x5b,0xac,0xa6,0xb9,0xf1,0xb4,0xa6,0xbe,0x41,0xc2,0xa8,0xab,0xaf,0xb5,0x48,0x2f,0x2c,0x2c,0x2b,0x2d,0x44,0x7c,0xf3,0x63 -,0x48,0x32,0x2a,0x37,0xc9,0xba,0x71,0x39,0xd9,0xba,0xb4,0xa6,0xab,0xc5,0xe1,0xad,0xa2,0xac,0xd1,0x44,0x4a,0x70,0xfe,0xc4,0x4a,0x1f,0x1b,0x2a,0x38,0x2b,0x30,0x4a -,0xc1,0xbc,0xb3,0xba,0x37,0x29,0x3a,0xab,0x9e,0xa6,0xb4,0xb1,0xb9,0xb7,0xac,0xae,0xdf,0x2e,0x2e,0x34,0x2f,0x41,0x4f,0x5c,0x4a,0x38,0x2f,0x20,0x27,0x49,0xbf,0xbc -,0x76,0xbf,0xb3,0xcf,0xb7,0xa4,0xc3,0x37,0x47,0xbc,0xb3,0xc1,0xb8,0xbb,0x5e,0x46,0x5e,0x3e,0x31,0x2d,0x5b,0xba,0xd2,0x3d,0x49,0xe6,0x47,0xcc,0xb9,0xef,0x2e,0x28 -,0x3c,0xb6,0xaf,0xa9,0xa7,0xb7,0xc8,0xcf,0xba,0xce,0x3a,0x54,0xd4,0x34,0x2a,0x67,0x57,0x2f,0x44,0x3d,0x2a,0x26,0x3a,0xb3,0xbc,0x71,0xbc,0xad,0xc1,0xc1,0xab,0xb8 -,0x3f,0x2f,0xc6,0xad,0xd6,0x47,0xe2,0xcc,0xd6,0x4b,0x43,0x30,0x21,0x2a,0xb5,0xa2,0xf4,0x36,0x56,0xc1,0xbc,0xb1,0xa8,0x5a,0x21,0x2b,0xca,0xb9,0xae,0xaf,0xce,0x39 -,0x39,0xf4,0xe7,0x3f,0x38,0xe5,0x56,0x36,0xbe,0xa5,0xaa,0xba,0x3d,0x38,0x37,0x3c,0xb8,0xba,0x3b,0x2a,0x35,0xf0,0xc3,0x6c,0x61,0x3a,0x24,0x2a,0xb4,0xa3,0xad,0xb3 -,0xc0,0xc0,0xd7,0xcc,0xb9,0x42,0x26,0x32,0x4e,0x4c,0xee,0xbe,0xb7,0x43,0x2d,0x4b,0xcf,0x72,0x38,0x60,0xce,0xc9,0xad,0xa2,0xa1,0xbf,0xdb,0xcb,0x41,0x33,0x3c,0x3d -,0x32,0x32,0x6f,0xba,0x4a,0x2f,0x3a,0x37,0x3b,0xc6,0xa6,0xaf,0x62,0xbc,0xab,0xae,0xcb,0x53,0x50,0x37,0x28,0x3a,0xc4,0x52,0x36,0x3c,0xc2,0xd8,0x4a,0xea,0x4d,0x36 -,0x33,0xb8,0xb7,0xe9,0xbe,0xae,0xb5,0x54,0x47,0xd2,0xfd,0x38,0x38,0x46,0x3d,0x5e,0xb2,0xab,0xc5,0x37,0xfb,0xe2,0xff,0xdd,0xbc,0x51,0x2b,0x3e,0xb5,0xa3,0xb0,0xf7 -,0x3f,0x2e,0x2b,0xfe,0xae,0xc7,0x3f,0x5d,0xbc,0xed,0x50,0xd6,0x47,0x29,0x2b,0xdb,0xb6,0xb5,0xad,0xaf,0xc8,0x4a,0xd8,0xc6,0x32,0x26,0x2c,0x39,0x3d,0x4e,0x4f,0x61 -,0x49,0x5b,0xad,0xa9,0xbb,0xe5,0xe0,0xf6,0xc0,0xa7,0x9d,0xa9,0x3d,0x26,0x2c,0x28,0x2c,0x43,0x4c,0x39,0x3c,0xbe,0xae,0xb5,0xba,0xbf,0x40,0x35,0x41,0xc7,0xca,0x53 -,0xe9,0xae,0xbb,0x42,0xce,0xd1,0x43,0x34,0x3f,0xe2,0xca,0xbb,0xaf,0xb3,0x65,0x51,0x57,0x33,0x26,0x29,0x34,0x3f,0xc6,0xaa,0xad,0x63,0x34,0x4c,0xc0,0xbd,0xc2,0x5f -,0x2c,0x23,0x3e,0xa6,0xa4,0xbd,0x48,0x3c,0x62,0xc9,0xbd,0xcd,0x3f,0x3c,0xc6,0xa8,0xa9,0xbd,0x59,0x2a,0x1e,0x28,0x4f,0xc4,0xc9,0xe5,0xbb,0xab,0xaf,0xbb,0xcd,0x36 -,0x29,0x32,0x49,0x5b,0xc8,0xb0,0xbb,0x68,0x50,0xb5,0xb5,0x48,0x2e,0x27,0x2d,0x5a,0xaa,0xa6,0xc2,0x33,0x2f,0x3a,0x3f,0x52,0x49,0x3f,0x35,0xdf,0xa7,0x9e,0xac,0xbd -,0xbd,0x38,0x2d,0x35,0x4a,0x4a,0x44,0x32,0x30,0xe3,0xae,0xa1,0xaa,0x41,0x28,0x2e,0xf1,0xb8,0xb0,0xb8,0xcc,0xdd,0xdd,0xb9,0x7a,0x2b,0x1d,0x22,0x44,0xab,0x9d,0xa4 -,0xc4,0x3f,0xce,0xb5,0xbe,0x3f,0x26,0x1e,0x2a,0xcf,0xac,0xae,0x4b,0x4e,0xcd,0xe9,0x43,0x38,0x36,0x3f,0xbe,0xab,0xa7,0xb3,0xcf,0xee,0x32,0x20,0x2b,0x3e,0x3f,0xf1 -,0xbb,0xb7,0xaf,0xa8,0xa4,0xad,0x4e,0x27,0x1f,0x2e,0x65,0xbe,0xc5,0x4c,0x36,0xbf,0xa4,0xad,0x56,0x27,0x1e,0x28,0xbb,0x9f,0x9b,0xa8,0x4b,0x43,0x5b,0x49,0x2f,0x2a -,0x2c,0x32,0xdd,0xae,0xa9,0xb4,0xc0,0xd6,0x40,0x2f,0x34,0x37,0x36,0x3b,0xca,0xae,0xac,0xac,0xaf,0xda,0x29,0x23,0x30,0x65,0xcc,0xc6,0xc2,0xdb,0xc0,0xaa,0xaa,0x3f -,0x1c,0x18,0x21,0xbd,0x9f,0x9d,0xa8,0x52,0x4b,0xab,0xa1,0xbc,0x2c,0x1c,0x1c,0x2e,0xc5,0xaf,0xb4,0xc2,0xcb,0xba,0xca,0x3d,0x2f,0x39,0x69,0x65,0xb1,0xa7,0xb0,0xc5 -,0xe4,0x3f,0x31,0x28,0x29,0x43,0x64,0xe6,0xc3,0xb1,0xac,0xa6,0xad,0x3d,0x25,0x23,0x37,0xd9,0xe9,0x42,0x32,0x36,0xb0,0x9d,0xa1,0xe7,0x1e,0x1b,0x3b,0xa7,0x9f,0xad -,0x52,0x30,0x57,0xaf,0xbc,0x37,0x24,0x26,0x37,0xe7,0xaf,0xa8,0xa9,0xa6,0xb0,0xbf,0x63,0x28,0x26,0x35,0x45,0x3d,0x4f,0x61,0xc8,0xad,0xae,0xeb,0x2d,0x31,0x4d,0xc1 -,0xdf,0x6c,0xbf,0xb1,0xab,0xb0,0xc8,0x2a,0x1c,0x29,0xc0,0xb1,0xdd,0x2b,0x24,0xd0,0x9e,0x9e,0xb6,0x2a,0x1a,0x22,0xcc,0xa8,0xa9,0xc3,0x4a,0x67,0xb9,0xa7,0xc4,0x2d -,0x23,0x44,0xc3,0xc6,0xcd,0xcd,0xb5,0xbb,0xcc,0x43,0x2d,0x25,0x2f,0x4a,0x64,0xbf,0xaf,0xa8,0xa7,0xac,0xb8,0x3b,0x27,0x29,0x35,0x41,0x3e,0x31,0x3d,0xa3,0x99,0xa0 -,0x4b,0x1c,0x1a,0x62,0xa8,0xae,0x6b,0x2a,0x37,0xcc,0xa5,0xa4,0xe4,0x1d,0x18,0x25,0xc2,0xa5,0xae,0xb2,0xae,0xac,0xac,0xc0,0x2b,0x1f,0x29,0x3b,0xdd,0xf7,0x55,0xaf -,0xa8,0xa9,0xae,0x39,0x25,0x2f,0x51,0xc3,0xd4,0x3a,0xd6,0xaf,0xae,0xb2,0x49,0x26,0x25,0x37,0xcd,0xbb,0x4d,0x3c,0xb8,0x9c,0x96,0xa2,0x2f,0x18,0x1b,0x35,0xb3,0xe2 -,0x2b,0x30,0xdd,0xaa,0x9e,0xb2,0x37,0x2e,0x29,0x4b,0xb6,0xc9,0xeb,0xc0,0xc1,0xb1,0xb0,0x37,0x1e,0x1f,0x35,0xba,0xb9,0x50,0xbf,0xa9,0xa4,0xa1,0xbb,0x3a,0x2e,0x2f -,0x39,0x3c,0x33,0x52,0xae,0xac,0xa6,0xc1,0x2f,0x24,0x2b,0xbe,0xad,0x5e,0x22,0x2e,0xb8,0x9a,0x98,0xba,0x25,0x1c,0x25,0xca,0xa6,0x6c,0x38,0x3b,0x49,0xaf,0xaf,0xbd -,0x44,0x32,0x2c,0xda,0xb2,0xd5,0x74,0x2b,0x2b,0x45,0xc5,0xa6,0xb2,0xc9,0x43,0xaf,0xaf,0xa5,0x70,0x1f,0x16,0x22,0xb7,0x97,0x8f,0xec,0xaf,0x49,0x9f,0xc8,0xaa,0x10 -,0x1a,0x21,0x00,0x11,0x06,0xbb,0x38,0x56,0xa8,0x18,0x9f,0x9c,0x94,0x8c,0x88,0xaf,0xc0,0x89,0x9b,0xad,0x8a,0x2c,0x15,0xac,0x08,0x8e,0x82,0xa5,0x9a,0x94,0xad,0xc9 -,0x18,0x00,0x04,0x04,0x08,0x07,0x08,0x00,0x04,0x0b,0x22,0x0c,0x03,0x08,0x0b,0x4b,0xaa,0xa5,0x1b,0x71,0x92,0x8b,0x8e,0x8e,0x8f,0x9a,0x8a,0x87,0x84,0x84,0x85,0x84 -,0x80,0x81,0x81,0x84,0x8a,0x83,0x81,0xa1,0x9b,0x8d,0x8f,0x20,0x3f,0x42,0x04,0x0a,0x02,0x0a,0x0b,0x00,0x02,0x06,0x0a,0x0f,0x05,0x00,0x03,0x00,0x04,0x0d,0x0d,0x08 -,0x0c,0x18,0x95,0x9f,0x2c,0xb9,0xa8,0x87,0x84,0x82,0x8c,0x86,0x86,0x81,0x82,0x80,0x8b,0x90,0x83,0x85,0x81,0x8d,0x99,0x3a,0x96,0xa2,0x97,0x9a,0x49,0x0b,0x1e,0x21 -,0x0b,0x13,0x03,0x07,0x09,0x10,0x04,0x07,0x03,0x02,0x03,0x07,0x0a,0x05,0x0f,0x10,0xaf,0x9d,0x40,0x44,0xbd,0x8f,0x87,0x8e,0x98,0x9d,0xb6,0x8c,0x8b,0x9f,0x93,0x8c -,0x83,0x84,0x8e,0x85,0x90,0x8b,0x84,0x80,0x83,0x83,0xaa,0x26,0x8a,0x9f,0x23,0x09,0x07,0x0d,0x13,0x0d,0x0a,0x02,0x01,0x0a,0x0b,0x03,0x07,0x05,0x0c,0x28,0x1d,0x02 -,0x03,0x00,0x15,0xa1,0xc6,0xf5,0x0e,0xa2,0x9b,0x8e,0x8c,0x8e,0x86,0x89,0x87,0x88,0x82,0x89,0x89,0x85,0x82,0x8d,0xa4,0x8e,0x91,0x89,0x94,0xcc,0x1f,0x1e,0x23,0xa1 -,0xb9,0x0c,0x1e,0x0f,0x3e,0x1a,0x0b,0x0e,0x04,0x02,0x0f,0x18,0x09,0x0a,0x09,0x00,0x1f,0x15,0x0d,0x1e,0x2b,0x19,0x0d,0x2e,0x15,0x8b,0x87,0x8e,0x9a,0x99,0x9e,0xc0 -,0x81,0x8e,0xb2,0x1e,0xa4,0x80,0x88,0x8a,0x4e,0x32,0x86,0x82,0x80,0x8f,0xae,0x98,0x89,0x9a,0xd5,0xb7,0x17,0x13,0x3a,0x0b,0x03,0x03,0x04,0x13,0x1e,0x17,0x00,0x03 -,0x01,0x45,0x8e,0x13,0x00,0x08,0x2a,0xcb,0x90,0xad,0x04,0x09,0x23,0x8c,0x8e,0xa2,0xb5,0x93,0x82,0x87,0x94,0xb7,0x83,0x90,0x84,0x85,0x89,0xc5,0x2e,0x83,0x83,0x8e -,0x17,0x0d,0x11,0x8b,0x8f,0x31,0x34,0xbf,0x2d,0x95,0x83,0x2b,0x09,0x00,0x23,0x25,0x10,0x23,0x00,0x0b,0x08,0x14,0x14,0x08,0x15,0x00,0x33,0x1b,0x0f,0x29,0x2d,0x38 -,0x6c,0x90,0x10,0x46,0x95,0x8e,0x89,0xa3,0x93,0x9b,0x8d,0x82,0x80,0x81,0xfd,0x0c,0x8e,0x85,0x85,0x92,0xa6,0x8c,0xa2,0x85,0x4e,0x10,0x2a,0xa5,0x0f,0x2e,0x3f,0x1d -,0x36,0x01,0xcd,0x1a,0x27,0x0f,0x00,0x03,0x1c,0x1b,0x06,0x0e,0x06,0x09,0x4b,0xa6,0x1d,0x06,0x06,0xd7,0xa8,0x8e,0x26,0x0a,0x2c,0x99,0x80,0x84,0x8e,0x11,0x23,0x88 -,0x88,0x80,0xd0,0x97,0x8d,0x89,0x80,0x96,0x2e,0x15,0x87,0x9d,0x8c,0x8e,0x18,0x64,0xbd,0x87,0x90,0x4c,0x09,0x05,0x9e,0xbe,0x1c,0x03,0x0f,0x1c,0x0c,0x0e,0x08,0x05 -,0x00,0x17,0x13,0x13,0x09,0x08,0x05,0x6f,0x8e,0x6b,0x11,0x07,0x16,0x8d,0x80,0xcf,0x8a,0x9e,0x93,0x80,0x8e,0x84,0xb8,0x9a,0x83,0x8f,0x8a,0xae,0x9d,0x92,0x8f,0x89 -,0x97,0xa6,0x14,0x17,0x37,0x8d,0xa0,0x1c,0x12,0x9f,0x18,0x38,0x5f,0x10,0x09,0x15,0xa9,0x11,0x18,0x0a,0xb2,0x1a,0x28,0x1f,0x01,0x0d,0x0b,0x3a,0x5c,0x15,0x0b,0x09 -,0x28,0x9e,0xbb,0x13,0x07,0xad,0x98,0x99,0x8d,0x93,0x9d,0xa8,0x8c,0x87,0x8b,0xda,0x93,0x8e,0x8e,0x87,0x8e,0xab,0x88,0x81,0x97,0x8b,0xa6,0x1c,0x1c,0x9c,0x97,0x92 -,0x13,0x11,0x0c,0x10,0x9c,0x14,0x01,0x02,0x09,0x5a,0x2a,0x0d,0x09,0x04,0x1a,0x1e,0x33,0x0c,0x05,0x08,0xca,0xa3,0x1e,0xc2,0x17,0xc5,0x89,0x8c,0xb2,0xa9,0x5f,0xae -,0x85,0x86,0x90,0x89,0x83,0xa1,0x85,0x9c,0xce,0xa1,0x96,0x98,0xad,0x9c,0x1f,0xbf,0x51,0xae,0xb8,0x12,0x26,0x0e,0x12,0xa2,0xa0,0x1f,0x23,0xa5,0x13,0x19,0x4f,0x1c -,0x0c,0x20,0x0f,0xa8,0x14,0x10,0x0f,0x11,0xb4,0x14,0x26,0x0d,0x07,0x1a,0x8d,0xaf,0x9d,0x0e,0x17,0xa1,0x89,0xa0,0xa5,0x3b,0x38,0x81,0x99,0x8a,0x93,0x8f,0x92,0x8e -,0x8c,0xab,0x97,0xb2,0x8f,0x80,0x8e,0xa3,0x15,0x7d,0x9e,0x95,0xb3,0x01,0x0b,0x15,0x17,0x98,0x26,0x0d,0x02,0x38,0x19,0x0f,0x17,0x00,0x05,0x4e,0x95,0x1f,0x0f,0x02 -,0x1f,0xa1,0xca,0x21,0x23,0x0a,0xac,0x89,0x8e,0x94,0x15,0x4d,0x9a,0x87,0x88,0x40,0x31,0x9e,0x83,0x80,0x8a,0x95,0x39,0xaf,0x88,0x89,0x9b,0x2c,0x13,0x20,0x8d,0x8c -,0xa1,0x0a,0x0f,0xc8,0xab,0xb5,0x03,0x0b,0x11,0x2a,0x94,0xa5,0x0b,0x11,0x0e,0x0e,0x8e,0x1c,0x00,0x0d,0x20,0xb2,0x9c,0xc2,0x06,0x0e,0xa5,0x8f,0x38,0x5a,0x0a,0x43 -,0x86,0x8e,0x8d,0x3a,0xbd,0x9d,0x8d,0x94,0xa4,0x12,0xc3,0xab,0x84,0x80,0xe5,0x19,0x1a,0xa4,0x8f,0x90,0x0c,0x2d,0x26,0xad,0x83,0xbb,0x1e,0x15,0x16,0x98,0x8e,0x09 -,0x07,0x0a,0x1b,0x8f,0x9a,0x11,0x07,0x0b,0xb4,0x8e,0x66,0x20,0x03,0x7b,0x8b,0x98,0x36,0x1e,0x06,0x0c,0x9b,0xd8,0x0d,0x1d,0x13,0x49,0x8b,0x9a,0x9f,0x0e,0xc7,0x89 -,0x8d,0x8d,0xb1,0xc8,0x8b,0x85,0x80,0x8f,0x1f,0x1e,0x95,0x8b,0x8b,0x18,0x0f,0x28,0xc0,0x81,0xa5,0x08,0x02,0x0c,0x1c,0x9d,0x19,0x07,0x05,0x0e,0x46,0x42,0x47,0x05 -,0x02,0x36,0xa8,0x6d,0x24,0x0a,0x3f,0x8f,0x84,0x8f,0xc6,0x20,0x1f,0x88,0x87,0x91,0x1e,0x1d,0x9b,0x8d,0x86,0x8d,0x11,0x1d,0x90,0x98,0x97,0x1b,0x19,0x20,0xbc,0x86 -,0xa6,0x17,0x0d,0x15,0x9f,0x9c,0x36,0x14,0x04,0xbb,0x8a,0x47,0x9c,0x30,0x0e,0x2b,0xa0,0xa5,0x29,0x0c,0x21,0x89,0x99,0x94,0x1d,0x06,0x19,0xbb,0xa5,0x1c,0x1c,0x0c -,0x30,0x8b,0x59,0x3a,0x0b,0x05,0xaf,0xb9,0x96,0x1a,0x12,0xc1,0x92,0x86,0x93,0x4a,0x17,0xa0,0x92,0x87,0x8c,0xb8,0xee,0x8c,0x84,0x8f,0xad,0x9b,0x1b,0xae,0x8b,0x22 -,0x27,0x1a,0x1b,0x35,0x9a,0xce,0x0d,0x02,0x0e,0xc4,0x36,0x0f,0x15,0x08,0x26,0xce,0x9b,0xbb,0x08,0x10,0x2c,0x9c,0x99,0x3d,0x15,0xa5,0x87,0x84,0x99,0xcf,0x0e,0x17 -,0x94,0x8a,0x2d,0x21,0x26,0xc8,0x83,0x92,0x9f,0x21,0x16,0x9a,0x8d,0xab,0x2a,0x1c,0x1d,0x87,0x95,0xe7,0x4b,0x03,0x1a,0xb5,0xb2,0x21,0x05,0x0f,0x99,0x98,0x92,0x3a -,0x08,0x0a,0xc3,0xa4,0xe1,0x21,0x05,0x2f,0x91,0x8c,0x9e,0x22,0x0b,0x34,0x91,0x98,0x50,0x10,0x17,0x99,0x87,0x93,0xbd,0x0a,0x14,0x9e,0xa2,0x31,0x23,0x10,0x1d,0x86 -,0x8f,0x9f,0x7b,0x08,0xab,0x8d,0xb0,0xcd,0x19,0x1d,0x8e,0x89,0x9a,0x5a,0x06,0x2a,0x93,0xaf,0xaa,0x21,0x06,0x5a,0x86,0x91,0xba,0x0f,0x0e,0x2a,0xc9,0x5d,0x1d,0x0d -,0x1b,0x92,0x91,0xb1,0x1f,0x09,0x1e,0x9f,0xc9,0x16,0x0e,0x1b,0xa9,0x95,0x8d,0x98,0x15,0x10,0xb5,0x8e,0x98,0x2f,0x19,0xad,0x88,0x87,0x8d,0xe4,0x1b,0xb5,0x99,0x96 -,0xad,0x19,0x1d,0xa3,0x8b,0x92,0x24,0x0f,0x1d,0xa0,0xa7,0x3e,0x13,0x05,0x1e,0x8b,0x98,0x2e,0x3f,0x1b,0xc3,0xb4,0x2a,0x14,0x0e,0x26,0x9b,0x8e,0x9a,0x26,0x09,0x11 -,0xa7,0xa1,0x27,0x1d,0x11,0x3c,0x95,0x97,0x9c,0x35,0x1f,0xb0,0xaf,0xbc,0x26,0x15,0x17,0xa1,0x8e,0xa9,0x4d,0x17,0xcd,0x98,0xde,0x1e,0x0d,0x15,0xa5,0x8b,0x8d,0xde -,0x19,0x21,0xa5,0x9c,0x4e,0x16,0x10,0x29,0x91,0x95,0xab,0x41,0x17,0xee,0x98,0xa7,0x1c,0x08,0x14,0x94,0x91,0x9a,0x9f,0x20,0x20,0xad,0xbb,0x29,0x10,0x12,0xb8,0x8b -,0x9b,0xbb,0x1f,0x18,0x90,0x99,0x35,0x1c,0x0f,0x22,0x93,0x90,0xab,0x2c,0x18,0xcf,0x90,0xb1,0x1f,0x0f,0x0e,0xba,0x91,0x92,0xaa,0x25,0x24,0xa9,0xa3,0xfd,0x1a,0x0e -,0x23,0x9f,0x8f,0x98,0xd3,0x20,0x2d,0xa8,0xac,0xbc,0x15,0x0d,0xbc,0x92,0x91,0x9f,0x2f,0x1f,0xa8,0xa3,0x31,0x2d,0x14,0x22,0xa3,0x9f,0x93,0xb1,0x25,0x47,0xa2,0x3b -,0x18,0x12,0x28,0x9a,0xa1,0xae,0xb8,0x20,0xc8,0x92,0x3e,0x1f,0x1d,0x1a,0x3a,0x95,0xac,0xe6,0xb0,0x34,0xa6,0xab,0x42,0x1a,0x0f,0x27,0xa1,0x9e,0xb3,0xa0,0x49,0x9e -,0x9a,0x26,0x10,0x0e,0x2c,0x28,0x99,0x9e,0x6b,0x33,0x2f,0x99,0x98,0x3a,0x15,0x1d,0x2e,0x9b,0xbf,0x2b,0xbf,0xd7,0x9c,0x97,0xb5,0x1c,0x18,0x16,0x31,0x9b,0xa1,0xad -,0x4d,0xa8,0xab,0x57,0x29,0x28,0x24,0x2e,0x9e,0xa1,0x5a,0x2d,0xb3,0x9c,0x98,0x50,0x1e,0x12,0x0e,0xb5,0x96,0x42,0xd3,0x49,0xc9,0x92,0x9e,0x3b,0x14,0x19,0xfb,0xa3 -,0xc3,0xb8,0xa8,0xa7,0xa8,0xe9,0x1d,0x1d,0x1d,0x20,0x9b,0xa9,0x52,0xb7,0x36,0x47,0x96,0xa2,0x1f,0x23,0x1f,0xc5,0x9b,0x49,0x2c,0x26,0x4d,0x95,0x9e,0x2c,0x1a,0x13 -,0x2c,0x9f,0xa4,0xba,0x7b,0xc5,0xb8,0xcd,0x5b,0x24,0x36,0xbf,0xb3,0xb5,0x1d,0x32,0x9f,0xab,0xaa,0x9e,0x26,0x0d,0x22,0xbe,0xa3,0xaf,0x2a,0x2f,0xac,0x9b,0x93,0xb2 -,0x2b,0x1d,0x1b,0xab,0x8f,0xa2,0x27,0x35,0x35,0xad,0xa9,0x27,0x18,0x1b,0x4e,0xb4,0xc0,0xd2,0x26,0x20,0xab,0x96,0xd5,0x20,0x17,0x2d,0x99,0x9e,0x42,0x1e,0x48,0x9c -,0x94,0xa7,0x42,0x1f,0x22,0xb8,0xa2,0xb2,0xd8,0x3e,0xba,0x9f,0xd6,0x1f,0x1a,0x1c,0x28,0xa8,0x4f,0x48,0xdd,0xb2,0xad,0xaf,0xc7,0x1d,0x1f,0x3b,0x9f,0x9e,0x3f,0x46 -,0xc3,0x38,0x9f,0xa4,0x28,0x27,0x23,0x1f,0xc8,0xa1,0xa3,0xab,0x40,0x4a,0x57,0x35,0x4f,0x2a,0x36,0xbe,0xba,0x76,0xbd,0xc2,0xc6,0xa5,0xc6,0x3e,0x1f,0x6e,0x3c,0x52 -,0xca,0x3e,0xae,0xbc,0x99,0x9b,0x34,0x1e,0x1f,0xc2,0xaf,0xab,0x45,0x2c,0xbb,0x3a,0xbb,0x2a,0x1e,0x2d,0x33,0xba,0x38,0xe0,0xab,0xb1,0xab,0xab,0xc3,0x3d,0x25,0x5b -,0xae,0xb3,0xae,0x2b,0x37,0x54,0xba,0x9d,0xb6,0x26,0x1f,0x27,0x55,0x9d,0x9a,0xd3,0x2e,0x1a,0x30,0x9f,0xae,0x33,0x32,0x38,0x28,0xba,0x57,0xad,0xb6,0xce,0xae,0x3f -,0x19,0x27,0xb2,0xac,0xb0,0x2d,0x60,0xaf,0xfd,0x28,0xae,0x43,0x2a,0xcf,0x5b,0xae,0x5f,0x3d,0xb3,0x64,0xb3,0xaa,0x38,0x39,0x46,0x37,0x2c,0xb9,0xb4,0xb7,0x9d,0x58 -,0x2d,0xaf,0x74,0x2b,0xa9,0xba,0x53,0xde,0x1e,0xab,0x9d,0x3f,0xe0,0xe6,0x25,0x57,0xb9,0xbe,0x51,0x26,0x2e,0xe1,0xc8,0x2c,0xda,0x3d,0x69,0xbd,0x15,0x23,0xa9,0xb1 -,0xad,0xb5,0x28,0x46,0xdf,0x2f,0xae,0x6d,0x2f,0xb5,0xe1,0xb1,0xb2,0x3d,0xa0,0xb5,0x26,0xdc,0x9d,0xd0,0xcb,0x45,0x2f,0xca,0x4f,0xa8,0xaf,0x9b,0x2f,0x1b,0x5f,0x54 -,0x9e,0xd6,0x24,0xaa,0xb5,0x35,0x3d,0x46,0x2e,0x4c,0x39,0x47,0xaf,0x27,0x4e,0x52,0x27,0x7a,0xd8,0x2b,0xb3,0xaf,0x2a,0x5d,0x2c,0x27,0xae,0xdf,0xf4,0x45,0x1d,0xbd -,0xa1,0x35,0x6c,0xa9,0x3e,0xbe,0xb0,0xc7,0x9d,0xaf,0x38,0xac,0x63,0x37,0x9d,0xc8,0x1c,0x9f,0x9d,0x3c,0x40,0x2e,0xb1,0xa5,0x43,0xcc,0xbe,0x1f,0xc4,0xbc,0x2b,0xad -,0x37,0x1b,0x5d,0x3b,0x6e,0xa4,0x2b,0x27,0xb1,0x25,0x28,0xbf,0x1a,0xbf,0xb0,0x2d,0x9e,0xb2,0x1c,0x34,0x5e,0x24,0xbb,0xcb,0xfe,0xa8,0xba,0xcf,0xca,0x28,0x35,0xa8 -,0x71,0xa3,0xab,0xdf,0xac,0x5e,0x47,0xd4,0x3e,0xbd,0x97,0xce,0x2c,0xb2,0x3d,0xb2,0x9f,0x2d,0x67,0xbc,0x66,0xf8,0x56,0x1e,0x3e,0xbf,0x2d,0x9e,0xb6,0x2e,0xef,0x2c -,0x3f,0xae,0x37,0x48,0x4f,0x25,0x51,0x7c,0x57,0xbd,0x33,0x18,0xaa,0xbd,0x2d,0xb7,0x2a,0x2e,0x5d,0xbf,0xa7,0xaf,0x26,0x36,0xa6,0xb6,0x31,0x29,0x39,0xa3,0xb3,0x29 -,0x3a,0xba,0xe5,0xa4,0xb2,0x25,0x6b,0x2e,0x41,0xb4,0x9d,0xa0,0xd1,0xc3,0xbf,0xde,0x2a,0xc3,0xb0,0xeb,0xcf,0xc9,0xaf,0xb8,0xb7,0x60,0x5d,0x3f,0x3c,0x2d,0x3c,0xa1 -,0xab,0xb1,0xd8,0x1c,0x26,0xa7,0xae,0x5b,0x27,0x1a,0x2b,0xd2,0x37,0xbc,0x38,0x31,0xa2,0x72,0x26,0x25,0x2f,0x2d,0xb2,0xa8,0xa5,0xbd,0x23,0x2a,0xc9,0x3f,0x23,0x39 -,0x5e,0xa6,0xa5,0x2f,0x3d,0xa8,0x4c,0xab,0xad,0xd1,0xc7,0x2e,0x63,0x9f,0xa7,0xe0,0x37,0x2d,0xa2,0xb2,0xba,0x4c,0x28,0xdd,0x40,0x5f,0xad,0xa1,0x32,0x4a,0xa3,0x33 -,0x3c,0x34,0x35,0xc1,0xb7,0xaf,0xaf,0x4b,0x23,0xf3,0x3c,0xf5,0xb9,0x32,0x29,0x23,0x39,0xa5,0xa9,0x32,0x4c,0xd5,0x2d,0x4f,0x4b,0x38,0xbe,0xb6,0xa4,0xa5,0x2b,0x1d -,0x2c,0x45,0xa3,0xa2,0x29,0x25,0xad,0xd1,0xd2,0xef,0x28,0xc8,0xad,0x5e,0xba,0xdd,0x1f,0x27,0x6b,0x9d,0x9c,0x4d,0x2d,0x2f,0x23,0xb7,0xa4,0xc8,0x4b,0x2e,0x46,0xa4 -,0x4c,0xea,0x9f,0xc5,0xb2,0x60,0x2d,0x26,0x46,0xa6,0x9e,0x57,0x2f,0xcb,0x38,0xed,0xbc,0x2b,0x22,0x36,0xb6,0xa7,0xaf,0x2c,0x24,0xca,0xb6,0xac,0x3b,0x2a,0xb4,0x38 -,0xc8,0xa5,0x58,0xd2,0x32,0x2c,0xb7,0xbe,0x40,0x2d,0x29,0xc4,0xb9,0xb6,0x6b,0xad,0xb3,0x32,0xbd,0x2d,0x68,0x40,0x32,0xa5,0x9d,0xd0,0x28,0x24,0x1a,0xae,0xb7,0x4d -,0x76,0x1e,0xa9,0x95,0x2f,0x29,0x44,0xb8,0x9e,0xae,0x5a,0x2c,0x2b,0x2c,0xa1,0x64,0x4c,0x69,0x29,0xbe,0xd6,0xbb,0x25,0x2b,0x64,0x9f,0x96,0x32,0x25,0x2e,0x3f,0xa3 -,0x9d,0xba,0x3d,0x23,0x26,0x9f,0xa1,0x2b,0x45,0x2f,0xeb,0xa6,0x4d,0xc8,0x26,0x17,0x9a,0x96,0xd0,0x65,0x21,0x28,0xaa,0x9b,0x31,0x32,0x22,0x4f,0x9e,0xc4,0x31,0x20 -,0x27,0xbf,0x9e,0x2d,0x2f,0xe5,0x49,0xa7,0xad,0x20,0xc9,0x48,0x3d,0x9c,0x9e,0x24,0x1e,0x1b,0x2b,0x90,0xaa,0xcf,0x35,0x16,0xcf,0x97,0x52,0x32,0x32,0x41,0x95,0x9a -,0x23,0x24,0x25,0xb4,0x99,0xb1,0xc6,0x24,0x1a,0x5f,0xa5,0x3c,0xd1,0x42,0x29,0xa3,0xad,0x3d,0x2e,0x28,0xcf,0x9b,0x9c,0x40,0x26,0x1e,0xc6,0x96,0xa5,0x33,0x13,0x1d -,0xad,0x97,0xba,0x1e,0x3e,0x22,0xae,0x9b,0x4c,0x2c,0x1d,0xac,0x98,0xb7,0x2b,0x1e,0x1f,0xa3,0x91,0x55,0x1f,0x2b,0x26,0xa3,0xa9,0x31,0x3c,0x1f,0xb1,0x93,0xb5,0x22 -,0x28,0x27,0xa8,0x8e,0xc1,0x1f,0x24,0x21,0x9d,0x9c,0x2a,0x1b,0x1b,0xc3,0xa3,0xad,0x2c,0x2b,0x1b,0xfd,0x8f,0xa2,0x46,0x2e,0x2a,0xa8,0x96,0x36,0x1a,0x26,0x3a,0x96 -,0x99,0x1d,0x1e,0x17,0x32,0x8e,0x9d,0x26,0x4f,0x1f,0xcb,0x8c,0xbb,0x1e,0x1a,0xd8,0x90,0x97,0x24,0x28,0x1f,0x1b,0x95,0x9c,0x27,0x15,0x21,0x9d,0x8e,0xcf,0x1c,0x1d -,0x22,0x9c,0x8c,0xc9,0x17,0x1a,0x1f,0x96,0x95,0x35,0x28,0x0f,0x26,0x8d,0xb2,0x23,0x1b,0x1c,0x9e,0x96,0x36,0x4c,0x28,0x1a,0x8f,0x8e,0xfa,0x20,0x18,0x2e,0x90,0xad -,0x2d,0x24,0x14,0xa7,0x8d,0x36,0x1f,0x20,0x16,0x92,0x8a,0xbf,0x3b,0x19,0x21,0x8e,0x9d,0x29,0x26,0x25,0xdf,0x94,0x3b,0x1d,0x1e,0x13,0x91,0x8e,0x30,0x23,0x1b,0x3e -,0x96,0xb4,0x20,0x24,0x1c,0x99,0x8a,0xbe,0x1f,0x0f,0x1b,0x95,0x96,0x26,0x1d,0x14,0x2d,0x8c,0xa7,0x23,0x31,0x1e,0x9f,0x8f,0x4e,0x2f,0x1f,0x18,0x9d,0x94,0xb3,0xba -,0x25,0x23,0xaa,0x49,0x3e,0xc1,0x16,0x4c,0x8c,0xa2,0x2a,0x37,0x21,0x9c,0x91,0x2a,0x2d,0x16,0x11,0x9b,0x8d,0xb9,0x2b,0x15,0x18,0x9d,0xce,0x17,0xc9,0x23,0xde,0x8e -,0xbc,0x4c,0x3e,0x19,0x9d,0x90,0x2e,0x2f,0x19,0x1d,0x92,0x9e,0x2f,0xad,0x22,0x2d,0x9f,0x57,0x3d,0x3b,0x1d,0xa8,0x96,0x32,0xaa,0xc9,0x47,0x9a,0x5a,0x22,0xf3,0x19 -,0x2b,0x99,0xc6,0xad,0xb3,0x0f,0x2c,0xa6,0x20,0xb6,0xf6,0x27,0xa5,0x37,0x21,0x9c,0xb7,0xb5,0x9a,0x22,0x34,0x33,0x15,0xb7,0xad,0x1b,0x9a,0xad,0x19,0x9e,0xc4,0x2e -,0xa7,0x1f,0x1f,0x98,0xd7,0xab,0x99,0x29,0xbe,0xc6,0x1a,0xa8,0xb6,0x18,0xa9,0xb0,0x1d,0xac,0xae,0x39,0x9c,0x52,0xb1,0xa4,0x1a,0x2c,0x2b,0x2c,0x9e,0xb2,0x2b,0xce -,0x36,0x3e,0x9b,0xb0,0xc8,0xbc,0x10,0xbc,0xb9,0x0e,0x2b,0xb1,0x92,0x8d,0xaa,0x14,0x1a,0x0c,0x3e,0xb1,0x21,0xaa,0x51,0xaa,0x97,0xae,0x3c,0x8a,0xa4,0x0d,0x09,0x00 -,0x06,0x3d,0x86,0x81,0x81,0x8c,0x8f,0x1c,0x0d,0xb9,0x3a,0x4d,0x9a,0x21,0x0c,0xde,0xa6,0x3a,0x29,0x5e,0x12,0x0c,0x0d,0xab,0x9b,0xa3,0x37,0x2a,0x8c,0x89,0x93,0x17 -,0x22,0xef,0xb2,0x08,0x0f,0xa1,0x86,0x82,0x8f,0x29,0x09,0x1b,0x0c,0x2c,0x2f,0xb5,0x37,0xa9,0x90,0x39,0x14,0xaf,0x9f,0x15,0x22,0x2e,0x11,0x13,0x95,0x86,0x87,0x97 -,0xaf,0x2d,0x20,0x34,0x23,0x11,0x1a,0x99,0x91,0x92,0x9f,0x26,0x2b,0xbb,0x3b,0x0b,0x12,0xa8,0x99,0x3e,0x0f,0x0b,0x08,0x28,0x8c,0x83,0x9a,0xa4,0xae,0x3f,0x33,0x93 -,0x93,0x44,0x90,0x8f,0x23,0x03,0x09,0x10,0x14,0x2b,0xbe,0xad,0xbc,0xad,0x8e,0x86,0xa9,0x0a,0x16,0xa7,0xb3,0x3f,0x28,0xac,0x98,0xab,0x40,0x1e,0x4c,0xa0,0x96,0x1c -,0x0a,0x22,0x23,0x94,0x88,0x8d,0x2f,0x0f,0x1c,0x0e,0x0b,0x19,0x9c,0xb0,0x3e,0x4d,0x2e,0x9e,0x8c,0x93,0xc4,0xca,0xb7,0x1f,0x0e,0x18,0xaf,0x9a,0x8e,0x88,0x9a,0x61 -,0x3c,0x13,0x0f,0xb5,0xa0,0xb4,0x27,0x2e,0x91,0x9b,0x1f,0x07,0x00,0x04,0x23,0x8e,0x89,0x91,0x9c,0x93,0x8f,0x99,0x19,0x0b,0xd0,0x8f,0x96,0x27,0x0a,0x14,0xa0,0x8a -,0x93,0x19,0x0a,0x0e,0x16,0xf2,0xaa,0x30,0x16,0x32,0x87,0x86,0xa8,0x2e,0x1b,0xf7,0x3e,0x49,0x4e,0xaf,0x8e,0x91,0x8c,0xa1,0x18,0x02,0x15,0x92,0xa9,0x0e,0x06,0x0e -,0x34,0x8b,0x84,0x8e,0x2a,0x11,0x16,0x1c,0x36,0xaf,0xa1,0x97,0x8f,0x5e,0x1b,0x0f,0x0f,0x36,0x21,0x28,0x66,0xa1,0x8d,0x92,0xa8,0xa8,0x8c,0x98,0x16,0x08,0x10,0x39 -,0xa8,0x2d,0x08,0x0a,0xe0,0x8e,0x87,0x86,0xa1,0x47,0xb2,0xcc,0x21,0x18,0xdb,0x8c,0x86,0x8b,0x1a,0x01,0x08,0x1e,0xb2,0xe8,0x1d,0x0c,0x13,0x2d,0x97,0x8b,0x9a,0xb8 -,0x39,0x2f,0x29,0x28,0x2f,0xad,0x8b,0x89,0x91,0xc9,0x1c,0x47,0x20,0x1f,0x1e,0x0c,0x0e,0x62,0x91,0x96,0x9f,0x44,0x22,0x22,0x3e,0x30,0x23,0x2b,0x26,0xad,0x91,0x99 -,0x92,0x8e,0x94,0x9d,0x19,0x05,0x07,0x1b,0xa4,0x93,0x8c,0x94,0x99,0x9e,0x25,0x0b,0x0f,0x2e,0x2b,0x4a,0x21,0x24,0x9a,0x99,0x1a,0x04,0x0a,0x1d,0xb0,0x8d,0x90,0xa5 -,0xa0,0x8e,0x89,0x9a,0xac,0xab,0x30,0x2e,0x2a,0x0c,0x0b,0x68,0x8b,0x97,0xbc,0x1e,0x07,0x0c,0x24,0xa7,0x9a,0xa5,0x27,0x21,0xc1,0xbd,0xbf,0xb4,0x9d,0xa1,0x99,0x5f -,0x14,0xc0,0x9d,0x92,0x9e,0x32,0x14,0x23,0xb0,0x9a,0xa8,0x13,0x0b,0x12,0xbe,0x95,0x8e,0xa1,0x19,0x15,0x15,0x1b,0x55,0xae,0x9a,0x96,0x99,0x3e,0x0d,0x0d,0x2b,0x8d -,0x89,0x8e,0x9c,0xbc,0x3f,0x19,0x46,0xac,0xa5,0xbe,0x23,0x0b,0x0c,0x23,0x3a,0x25,0x1f,0x1f,0x26,0xb0,0x98,0x8f,0x9d,0x95,0x8f,0xa7,0x1f,0x33,0x45,0xb9,0x95,0x3a -,0x14,0x1b,0x30,0xcd,0xa5,0xbe,0x15,0x17,0x67,0xae,0xaf,0xa5,0xaf,0xcf,0xa7,0x26,0x1f,0x25,0x3f,0xa4,0x94,0x92,0xc7,0x23,0x2a,0xcc,0xfe,0x33,0x2a,0x28,0x2b,0xbc -,0xaa,0x58,0x30,0x26,0xbf,0x9f,0xa4,0x53,0x1b,0x29,0x2d,0xac,0xaa,0xf0,0xa3,0xa0,0xaf,0xc8,0x13,0x0a,0x1c,0xbd,0x98,0x91,0x9f,0xa4,0x97,0xd6,0x3c,0x39,0x33,0xae -,0xb0,0x17,0x1a,0x3b,0x4c,0xf5,0x1a,0x17,0x1c,0x1e,0x63,0xa2,0x9c,0x8f,0x89,0x9e,0x43,0x51,0xcd,0xab,0xb1,0x33,0x18,0x0e,0x21,0xa4,0x9a,0x97,0x37,0x0d,0x0e,0x16 -,0x28,0xc1,0x97,0x9c,0xaa,0xbf,0x1b,0x28,0xb2,0x8d,0x8c,0x95,0xac,0x1f,0x1e,0x43,0xa9,0xc5,0x3c,0x1b,0x0c,0x1f,0xb9,0xe5,0xc7,0x65,0x2c,0xbf,0xa1,0xc0,0x9f,0xc3 -,0x35,0xbe,0xac,0xb8,0x4a,0x27,0x2b,0xd4,0x56,0x36,0x15,0x18,0xc8,0xa1,0xa2,0x9c,0x9b,0x9c,0xbe,0x5f,0x31,0xb7,0xa9,0xc0,0x2d,0x1c,0x1b,0x17,0x1f,0x19,0x5c,0x29 -,0x2e,0x37,0x5f,0x93,0x89,0x8a,0x9b,0xb0,0xd4,0xe9,0x2a,0x2b,0x26,0x46,0xdc,0x53,0xd9,0xe9,0xc2,0x19,0x14,0x17,0x1c,0xc3,0xb0,0x9e,0xa0,0xa9,0xb8,0x20,0x2b,0xaf -,0x96,0xa3,0xb0,0xb9,0xd1,0xbc,0xbe,0xa8,0x2b,0x24,0x1d,0x1b,0x27,0x29,0x3e,0xdf,0xba,0xbc,0xd8,0xd8,0xac,0x9b,0xaa,0x36,0x1d,0x1d,0xc7,0xa5,0x9a,0xab,0x52,0x32 -,0x16,0x11,0x36,0xab,0xae,0xa0,0xa2,0x9d,0x98,0xa7,0x74,0x4b,0x4e,0xfa,0x25,0x14,0x1a,0x27,0x29,0x34,0x5d,0xc7,0xcd,0x3b,0x35,0xd0,0xa8,0x95,0x8f,0xb5,0xb0,0xb4 -,0xb5,0xb2,0x25,0x21,0x2a,0x49,0x29,0x2f,0xb6,0xa3,0xd0,0x20,0x1d,0x23,0x3b,0x33,0x2b,0x40,0x38,0x3e,0x45,0xb3,0x94,0x90,0x9a,0xa2,0xa3,0xbf,0xc6,0xcb,0x22,0x2f -,0x28,0x25,0xba,0x2a,0x23,0x3a,0x40,0x34,0x56,0xd4,0xc5,0xa6,0xae,0x9f,0xaa,0xe1,0xbc,0x6a,0x2d,0x35,0x3f,0x1e,0x1a,0x1e,0x25,0xad,0x99,0xa0,0xa6,0xaa,0xaf,0xb2 -,0xbd,0x2c,0x48,0xb2,0xaa,0x3d,0x1e,0x25,0x1e,0x2f,0x23,0x1f,0x28,0x3d,0xed,0xbf,0xb9,0x99,0x8c,0x95,0x93,0xb7,0x1b,0x1f,0x36,0x45,0xba,0xaf,0xc5,0xbd,0xd0,0xc3 -,0x3d,0x1c,0x18,0x17,0x1e,0x48,0xc8,0x3c,0x48,0xa0,0x9d,0xaf,0x66,0x2d,0xc0,0xa0,0xab,0xaa,0xa1,0xab,0x39,0xab,0xdf,0x24,0x1f,0x10,0x19,0x1e,0x2f,0xae,0x9c,0xb3 -,0xa3,0x95,0xaa,0xb3,0x20,0x18,0x26,0xfc,0xae,0xa7,0xa7,0x3b,0x3b,0x2d,0x3b,0x60,0xc0,0x32,0x2e,0xbb,0xac,0x9c,0x96,0x93,0x9c,0xb1,0x1b,0x19,0x0f,0x0f,0x2d,0xd1 -,0xcc,0x2a,0x23,0x63,0xa4,0xa5,0xa9,0x23,0x29,0xab,0x9a,0x9d,0xa4,0xb7,0x3c,0xc7,0x46,0x2f,0x37,0x67,0x40,0xd1,0xc2,0x40,0x48,0x2e,0x35,0xad,0xd2,0x18,0x17,0x15 -,0x2b,0xa8,0xae,0xaa,0x9f,0x94,0x91,0x98,0xad,0x6a,0x79,0x33,0x2a,0x27,0x2c,0x30,0x39,0x32,0x29,0xc6,0xc3,0x3d,0x2b,0x2e,0xd2,0x9f,0x9f,0xc7,0xb9,0xa4,0xa9,0x52 -,0x1e,0x16,0x27,0xd1,0x69,0x2a,0x44,0xa6,0x9e,0x9f,0xac,0xc7,0x32,0xbe,0xb4,0xce,0x6d,0x33,0x3b,0x48,0xb0,0xc3,0x4f,0x1c,0x0c,0x0f,0x1b,0xb4,0x9e,0xa8,0xae,0x9e -,0x9f,0xa1,0x9b,0xae,0xb0,0xc3,0x30,0x18,0x1e,0xbc,0x9c,0x98,0xa4,0x36,0x19,0x1a,0x1a,0x1d,0x29,0xd8,0x52,0x20,0x2c,0xaf,0x9d,0x9d,0xaa,0xd1,0xc9,0xa9,0xa9,0xd3 -,0xad,0x98,0xa0,0xc2,0x2b,0x1c,0x19,0x18,0x25,0x2b,0x3e,0x43,0xbd,0xa5,0x99,0x94,0xa0,0x2e,0x19,0x28,0x3c,0xbb,0x41,0x27,0x31,0xce,0xa7,0xa6,0x41,0x2b,0x39,0xc5 -,0xb0,0xce,0xd4,0xab,0x97,0x93,0xad,0x2b,0x1c,0x19,0x34,0x34,0x1c,0x16,0x2f,0xbb,0xac,0xa5,0xb3,0x2a,0x1a,0x45,0xaa,0x99,0xaa,0x2a,0x3d,0xb9,0x92,0x95,0xac,0x22 -,0x1b,0xca,0xc4,0xe9,0x22,0x2d,0x3c,0xc8,0xb2,0xb4,0x3f,0x15,0x14,0x18,0x3e,0xb9,0xbd,0xa8,0x9a,0x8f,0x8f,0x9f,0x3d,0x3f,0xac,0xcb,0x26,0x13,0x14,0x36,0xda,0xb4 -,0xad,0xae,0xbd,0x1d,0x1e,0x58,0xc9,0xb3,0xb5,0xae,0xab,0xb0,0xd6,0x29,0x37,0x32,0x32,0x4c,0x21,0x1e,0x34,0x9b,0x92,0x97,0xba,0x25,0xc9,0xa0,0x9f,0x3f,0x21,0x28 -,0x4d,0x9d,0xa1,0xc9,0x1e,0x0f,0x12,0x27,0x6e,0x3d,0x36,0x3f,0xae,0x96,0x95,0x9c,0x66,0x3d,0xec,0x44,0x2e,0x18,0xcb,0x98,0x93,0xa7,0x2d,0x2a,0x35,0x68,0x2c,0x1c -,0x10,0x17,0x43,0xbd,0xa8,0x9f,0x5e,0x33,0xbf,0x98,0x9d,0xdc,0x30,0x2c,0xac,0x93,0x92,0x62,0x18,0x15,0x2e,0xb7,0x3c,0x17,0x23,0xba,0xa2,0x9d,0xa7,0xa2,0xc5,0x39 -,0x33,0x30,0x1c,0x11,0x2a,0xb3,0x9e,0xa2,0xb6,0x38,0x3b,0xc4,0xab,0xaf,0x2b,0x2f,0xb7,0x97,0x99,0xb7,0x2b,0x40,0xa4,0xb1,0x29,0x13,0x0d,0x1a,0xbe,0xa1,0xb6,0x3b -,0x23,0x49,0x9e,0x9d,0xbd,0x1c,0x1f,0xb1,0x9b,0xa2,0xa8,0xc1,0xbd,0xb6,0xa4,0xa1,0x2d,0x17,0x1e,0x4d,0xb9,0xaf,0x48,0x3d,0x2a,0x2d,0x36,0x26,0x1e,0x29,0xe8,0xc9 -,0x9b,0x93,0x96,0xa0,0x5a,0xa8,0xad,0x23,0x1e,0x29,0xc4,0x4e,0x2a,0x22,0x3b,0x95,0x93,0xb5,0x13,0x16,0x2c,0xb6,0x94,0xae,0x39,0x28,0x34,0x38,0xa8,0xab,0x27,0x17 -,0x1a,0x4f,0xa9,0x9c,0xaa,0xae,0xbf,0x9c,0xaa,0xb6,0x2e,0x2e,0xc5,0x36,0x4a,0xce,0xae,0xce,0x4c,0x25,0x1f,0x1c,0x2b,0x2b,0xc2,0xbe,0xd4,0xaf,0xb1,0x98,0x9f,0xaf -,0x25,0x1c,0x33,0xa7,0x98,0xb1,0xbf,0xf2,0x2f,0xbf,0xa5,0x35,0x18,0x16,0x1c,0x39,0xca,0x29,0x3b,0xb7,0xaf,0x9f,0x9f,0xb1,0x1f,0x4a,0xac,0xa4,0xaa,0x4f,0x52,0x39 -,0xaa,0xb4,0x36,0x14,0x1a,0xe0,0xb8,0xa6,0xbb,0x39,0xce,0xba,0xbe,0xac,0x49,0x2d,0x20,0x2b,0x28,0xd6,0x9d,0xa5,0xb1,0x4a,0x27,0x43,0x3e,0x3f,0xa7,0x9e,0xb7,0x2a -,0x2f,0xbd,0x97,0x9d,0xc6,0x1e,0x14,0x28,0xbe,0x3a,0x36,0x53,0x38,0x2a,0x4e,0xb2,0xb7,0x5d,0x2f,0xc2,0xbc,0xaa,0xa4,0xa6,0xbc,0xae,0xa1,0xab,0x65,0x32,0x2f,0x35 -,0x2f,0x2e,0x2e,0x29,0x38,0x3f,0x5b,0x28,0x34,0x2e,0x30,0xaf,0x9e,0xa3,0xab,0xa8,0xc1,0xca,0x75,0xbe,0x4b,0x29,0x30,0x75,0x50,0x2c,0xd5,0xc1,0xce,0xa9,0xa7,0x3e -,0x2e,0x47,0xbc,0x55,0x2c,0xd4,0xcf,0xd0,0xdc,0x3f,0x31,0x2e,0xcb,0x5a,0x3e,0xaa,0xb0,0xbf,0x30,0x4f,0x9e,0xaa,0x54,0x3d,0x3e,0xc1,0xaf,0x46,0x2c,0x2a,0x6b,0xef -,0xb2,0xb7,0x1e,0x19,0x2c,0x2f,0xac,0x9c,0xb0,0x5e,0x36,0xc8,0xb9,0xae,0xb1,0xad,0x5b,0xdf,0x5e,0xda,0xc5,0xaf,0xad,0x2e,0x26,0x1d,0x20,0x29,0x42,0x3e,0xb7,0xcd -,0xd3,0x43,0xbd,0x9b,0xa6,0xa3,0xb8,0x4e,0x40,0x4e,0x4a,0xcc,0x58,0x4b,0x37,0x29,0x1f,0x21,0xbf,0xae,0xc6,0xae,0xda,0x3d,0xb1,0xa4,0xc3,0x23,0x29,0x49,0xbc,0xb6 -,0xbb,0x3a,0x2a,0x2a,0x45,0x9f,0xa6,0xb5,0x2f,0x1a,0x30,0xa7,0x95,0x99,0xd2,0x1c,0x1c,0x2c,0xd7,0xa9,0xa6,0xb6,0x61,0x2e,0x47,0xaf,0x4d,0xf3,0x7e,0x33,0x23,0x27 -,0xb7,0xb6,0xba,0xb7,0x4f,0x3d,0x48,0x5b,0x5d,0xc4,0xbc,0xc8,0x2a,0x2a,0xca,0xad,0x3d,0x3c,0xb0,0x50,0x2c,0x33,0xaa,0x9f,0x9d,0xa2,0xa7,0xcc,0x2b,0x27,0x41,0xea -,0x2d,0x2f,0xdc,0x42,0x27,0x2c,0x2e,0x3c,0x30,0xf1,0xba,0xb2,0xd2,0xea,0xbc,0xbc,0xa1,0x9a,0xa0,0x3c,0x6c,0x2d,0x29,0x58,0xc0,0xce,0x37,0x55,0xe5,0x3b,0x25,0x36 -,0xde,0x72,0x2c,0x2a,0x44,0xb9,0x63,0xad,0xac,0xbe,0xc7,0xc0,0xbd,0xb9,0xaf,0xc9,0xbf,0x4a,0x3c,0x75,0xa0,0xbf,0x25,0x29,0x47,0x2d,0x33,0xb0,0xa8,0xcc,0x37,0xc0 -,0x59,0x20,0x18,0x2d,0xf6,0x51,0xa4,0xae,0xd5,0xe1,0xca,0xb7,0xcd,0xad,0xb3,0xb6,0xb6,0xa9,0xbf,0x3b,0xda,0xb6,0xba,0x2c,0x1c,0x21,0x1f,0x23,0x32,0xe5,0xc3,0x39 -,0x2a,0xc9,0x9e,0xb3,0x39,0x6e,0xbb,0xc2,0xa9,0xa3,0xa6,0x78,0xc8,0xd3,0x43,0xdb,0x3a,0x37,0xd2,0xe8,0x47,0xc0,0x4f,0x38,0xc4,0xc2,0x28,0x29,0x32,0x48,0xbb,0xe9 -,0xad,0xa1,0xbc,0xd9,0xdc,0x2c,0x27,0xb3,0xbe,0x50,0x3f,0x47,0xba,0xea,0x37,0xac,0xa7,0x50,0xbf,0xdd,0x32,0x2e,0x39,0x55,0xb9,0x50,0x46,0x3d,0x2d,0x28,0x2a,0x56 -,0xe0,0x3e,0x5e,0xac,0xac,0xa5,0xa7,0xb8,0x31,0x45,0xb3,0x9f,0xa4,0x39,0x4d,0x37,0x36,0x3f,0xb9,0xe3,0x1f,0x23,0x3a,0xbf,0x39,0xc8,0xbc,0xdd,0xbd,0x68,0xb7,0xd0 -,0x36,0x5c,0xab,0x67,0x3c,0xb2,0xad,0xa7,0xc8,0x3a,0x3b,0x58,0x5a,0xae,0xc4,0x24,0x2b,0x29,0x36,0xe4,0xa8,0xaf,0x2b,0x19,0x2b,0x5e,0xb1,0xa9,0xda,0x5d,0x41,0xd3 -,0xae,0xa5,0x6d,0x2d,0x3c,0x38,0xba,0x9e,0x9d,0xcb,0x24,0x3b,0xcc,0xc5,0x32,0x2e,0x2d,0x25,0x3c,0xac,0xa9,0xbc,0x50,0x50,0xd9,0x2d,0x5a,0xbe,0xb8,0xbc,0x75,0xcf -,0xb3,0xab,0xea,0xc1,0x74,0x25,0x3b,0xc0,0xc2,0x42,0xad,0xbb,0x30,0x42,0x36,0xe2,0x39,0x39,0xd6,0x33,0x2b,0x73,0x5d,0xda,0xaa,0xae,0xcc,0x22,0x2e,0xad,0xc4,0x3b -,0xe3,0xa9,0xa2,0xb8,0x3d,0xbf,0xe5,0x25,0x2f,0x39,0x39,0x2f,0xbd,0x9f,0xae,0xdb,0x30,0x51,0x45,0x3f,0x38,0xfd,0x79,0x3a,0x56,0x7c,0x9d,0x9e,0xb4,0x37,0x31,0x51 -,0xaa,0xb1,0x6b,0xbe,0x48,0x3d,0x24,0x52,0xb8,0x37,0x1c,0x20,0xbd,0x4e,0xcb,0xa8,0xa7,0xba,0xcd,0xa8,0xbf,0x2a,0x27,0x40,0xcc,0x47,0x2f,0x37,0xb9,0xad,0x4e,0xf4 -,0xbf,0xce,0x3c,0x38,0x44,0xc3,0xa4,0xac,0xbd,0x56,0x5c,0x29,0x24,0x34,0xe4,0xd3,0x54,0xe8,0x68,0xb4,0xea,0xa3,0xaf,0x3f,0x5e,0x3c,0x59,0x39,0xbe,0xbc,0xa9,0xcf -,0x35,0xf8,0x42,0x76,0xb9,0x34,0x1f,0x2f,0xcf,0xb9,0xb6,0xbb,0xc5,0xb9,0x26,0x2c,0x32,0x6b,0xc9,0xc8,0xac,0x9e,0xa6,0x26,0x2f,0x6d,0xad,0x6d,0x2f,0x1e,0x16,0xd9 -,0x9e,0xa2,0xc6,0x4a,0x37,0x54,0xb6,0xd8,0x2f,0x2e,0xb6,0xa4,0xa9,0xa6,0xa9,0x6d,0x2f,0x1e,0x2a,0x3e,0x6a,0x2d,0x4e,0x9d,0xa6,0xc9,0x5c,0xd5,0x2d,0x3e,0x26,0x2b -,0x3d,0xaf,0x9d,0xbe,0x41,0xc5,0xc1,0xe2,0xbe,0x3f,0x29,0x26,0x4c,0xc4,0xa3,0xaa,0xc6,0x40,0x33,0x34,0x3d,0x30,0x3f,0x32,0x39,0xa2,0x9f,0xa3,0xba,0xd7,0x2b,0x24 -,0x25,0x3e,0x3b,0x35,0x2b,0x4d,0x9c,0x96,0x9c,0xca,0x36,0x28,0x6c,0xca,0xcd,0xb2,0xbf,0xc7,0xb8,0x5a,0x2a,0x2b,0x28,0x21,0x1f,0x34,0xb0,0xa2,0xae,0xad,0xb1,0xbe -,0xa9,0xb3,0x2c,0x25,0x27,0x62,0xa6,0xbd,0xd7,0x3e,0x5e,0xab,0xe3,0x2b,0x22,0x1a,0x3b,0xb5,0xab,0x9f,0xad,0xbb,0xba,0x3d,0x28,0x21,0x1f,0x3f,0xd9,0xb1,0xbc,0xbf -,0xae,0xa3,0xa4,0x5f,0x26,0x24,0x3e,0x63,0xc6,0xc5,0x42,0xc5,0x9d,0xa4,0xae,0x46,0x1c,0x15,0x1f,0xb5,0x98,0x99,0xc1,0x2b,0x31,0xcd,0xdc,0x3e,0x2d,0x2f,0x43,0xd4 -,0xb2,0xa7,0xa8,0xa7,0xbc,0x34,0x37,0x29,0x24,0x30,0x2f,0x3c,0xb9,0xaa,0xa3,0xb1,0x42,0x33,0x30,0x24,0x2f,0x3f,0x73,0xaa,0xb5,0xa0,0xa4,0xae,0x30,0x1e,0x1d,0x1f -,0xc1,0xa9,0x99,0xb0,0x36,0x40,0xa0,0x9f,0x6f,0x37,0x18,0x1d,0x29,0xdd,0xaa,0xa7,0xa9,0xbc,0xb5,0x45,0x27,0x25,0x34,0xc3,0xc8,0xab,0xb5,0xb8,0xaa,0xad,0xc1,0x2d -,0x1d,0x1e,0x32,0x3e,0xb0,0xba,0xbf,0xa2,0xa1,0xa9,0x58,0x1d,0x1d,0x26,0x2c,0x36,0x38,0x3f,0xb4,0x9c,0x97,0xa4,0x27,0x1b,0x19,0xce,0x9f,0x9b,0xaf,0x2c,0x3f,0xbe -,0x9f,0xde,0x2e,0x19,0x1b,0x2b,0xd6,0x9d,0xa0,0xa6,0xb4,0xaf,0xff,0x3e,0x2b,0x29,0x47,0x29,0x3a,0xc5,0xad,0xa0,0xac,0xc4,0x3b,0x2a,0x20,0x3b,0xce,0x41,0xbc,0xb2 -,0xc0,0xb2,0x9f,0xae,0x27,0x21,0x2c,0xf2,0x47,0x2f,0x25,0x34,0x9d,0x99,0xa2,0x4f,0x17,0x13,0x2a,0xa8,0xa5,0xb0,0xae,0xb7,0xb8,0xaf,0xab,0x37,0x21,0x28,0x32,0xde -,0xb4,0xca,0xba,0xa5,0xab,0x5e,0x2d,0x1e,0x1a,0x4a,0xc9,0xc7,0xaf,0xaf,0xa8,0x9d,0x97,0xa6,0x21,0x17,0x19,0x27,0x48,0x50,0x2f,0x46,0x9c,0x95,0x9f,0x3e,0x1c,0x1d -,0xbd,0xb3,0x41,0x3f,0x2d,0x40,0x9f,0x9a,0xb1,0x1e,0x15,0x20,0x30,0xb8,0xa4,0xa1,0xad,0xaf,0xac,0xb0,0x3c,0x20,0x1f,0x2c,0xd6,0x47,0x49,0xb7,0x9c,0x9d,0xa2,0xb9 -,0x25,0x1b,0x28,0x3f,0x2d,0x52,0xbc,0xb1,0x9f,0x9c,0xb0,0x30,0x23,0x2c,0x2f,0x2f,0x68,0x42,0xdf,0xa2,0x91,0x92,0xbf,0x1d,0x14,0x1f,0x44,0xbf,0x2f,0x1e,0x3d,0xb6 -,0x9a,0x9b,0xed,0x26,0x26,0x2d,0x37,0xbc,0xad,0xb3,0xad,0xb6,0xba,0xc7,0x22,0x18,0x1d,0x2e,0xeb,0xbd,0xad,0x9d,0x9a,0x9a,0xa6,0x2f,0x1f,0x23,0x46,0xcf,0x26,0x23 -,0xcf,0xa1,0x9c,0x9e,0xbb,0x1c,0x19,0x2f,0xdc,0xbf,0x32,0x21,0x54,0x9b,0x8e,0x95,0xd5,0x18,0x19,0x2c,0xcb,0xb6,0x30,0x2c,0xbe,0xa8,0xac,0xb9,0x22,0x2c,0xb9,0xbe -,0x3b,0x5d,0x4c,0xc6,0xb4,0x36,0x3d,0x38,0x34,0xbd,0x97,0xa8,0xcd,0xae,0xb3,0x23,0x1f,0x39,0xf9,0xf5,0x24,0x2d,0xc6,0xb0,0xdb,0x3a,0xac,0x20,0x2c,0x85,0x83,0x0d -,0x0d,0x80,0x9f,0x9e,0xa4,0x0e,0x17,0x07,0x16,0x09,0x17,0x04,0x00,0x05,0x00,0x03,0x00,0x02,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x08,0x09,0x0d,0x1c,0xc6,0xb6,0x92 -,0x87,0x8b,0x8d,0x85,0x80,0x84,0x83,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x86,0x83,0x8a,0x8e,0x88,0x8f,0x9d,0xae,0xab,0xce -,0x1e,0x13,0x11,0x0a,0x05,0x04,0x01,0x05,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x01 -,0x05,0x03,0x0c,0x14,0x1d,0x29,0x24,0xac,0x93,0x8a,0x88,0x87,0x85,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 -,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x84,0x84,0x87,0x8c,0x8f,0x9d,0x9b,0xb4,0x3c,0x1e,0x18,0x0e,0x06,0x04,0x03,0x03,0x01 -,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02 -,0x02,0x04,0x05,0x07,0x06,0x0b,0x0b,0x0a,0x15,0x1b,0x17,0x1f,0x46,0xbf,0xb9,0xa6,0x9a,0x95,0x8e,0x8b,0x8a,0x88,0x86,0x84,0x84,0x84,0x81,0x81,0x80,0x82,0x84,0x80 -,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x81,0x82,0x80,0x81,0x80,0x81,0x81,0x81,0x82,0x85,0x83,0x81,0x85,0x86,0x86,0x85,0x85,0x88,0x86,0x8a -,0x8b,0x8b,0x8c,0x8b,0x90,0x8d,0x8b,0x8d,0x8d,0x8e,0x8c,0x92,0x8f,0x8e,0x8e,0x91,0x97,0x91,0x93,0x8d,0x90,0x96,0x9c,0x9d,0x9f,0x9d,0x9d,0xb0,0xae,0xed,0xbd,0x3f -,0x33,0x2a,0x19,0x0f,0x0c,0x0b,0x07,0x07,0x05,0x06,0x05,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x03,0x05,0x07,0x08,0x0c,0x0e,0x0f,0x11,0x1c,0x3f -,0xb8,0x9a,0x91,0x8b,0x89,0x87,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 -,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x82,0x83,0x85,0x87,0x87,0x87,0x8d,0x9a,0x9d,0x9f,0xa4,0xc1,0x3f,0x2a,0x1c,0x0f,0x0d -,0x0b,0x07,0x05,0x05,0x04,0x02,0x01,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01 -,0x01,0x02,0x03,0x02,0x02,0x04,0x07,0x07,0x06,0x08,0x0c,0x0d,0x0c,0x0e,0x11,0x12,0x17,0x20,0x2c,0x27,0x36,0xbe,0xb3,0xb5,0xbc,0xa5,0x9f,0x9d,0x98,0x93,0x91,0x96 -,0x90,0x8b,0x8b,0x8c,0x8b,0x8b,0x8c,0x8b,0x87,0x86,0x88,0x89,0x87,0x87,0x89,0x88,0x87,0x8b,0x8f,0x8d,0x8a,0x89,0x8c,0x8e,0x8e,0x93,0x94,0x92,0x93,0x9d,0x9c,0x98 -,0x9b,0xa8,0xa4,0xa0,0xa9,0xbf,0x4f,0xf8,0x40,0x2e,0x3d,0x55,0x2e,0x26,0x39,0x45,0x22,0x1d,0x21,0x23,0x1e,0x1d,0x26,0x2a,0x21,0x1b,0x1b,0x21,0x20,0x23,0x34,0x23 -,0x1c,0x2b,0x51,0xce,0x3f,0x4a,0x74,0xd9,0xc0,0xa9,0xa0,0xb8,0xac,0x9b,0x98,0x9a,0x97,0x8f,0x94,0x9c,0x94,0x8c,0x93,0x94,0x8d,0x8c,0x8d,0x8e,0x8a,0x8b,0x91,0x94 -,0x8e,0x8e,0x8e,0x8e,0x8d,0x8f,0x98,0x98,0x97,0x9b,0xa8,0xaa,0xa6,0xcd,0xd3,0xb0,0xb6,0xec,0x34,0x41,0x2d,0x29,0x2f,0x35,0x2b,0x1c,0x20,0x3f,0xea,0x2d,0x2d,0x2d -,0x29,0x2b,0x41,0xf9,0x2c,0x2a,0x31,0x57,0x49,0x3c,0xe9,0x45,0x26,0x24,0x4b,0xef,0x33,0x38,0x60,0x39,0x2a,0x5e,0xb9,0x34,0x1d,0x2e,0x5a,0x2c,0x38,0xe3,0x5f,0x2c -,0x2b,0x69,0x3c,0x31,0x36,0x4a,0x32,0x21,0x3a,0xbf,0x5b,0x35,0x38,0x25,0x23,0x3c,0xc7,0xe1,0x27,0x29,0x2f,0x78,0xed,0x44,0x4f,0x27,0x24,0x31,0xc7,0xdb,0x2f,0x2d -,0x39,0x39,0x3a,0xbf,0xc8,0x33,0x1f,0x30,0xc8,0x6e,0x6e,0x4e,0x44,0x31,0x40,0xba,0x4d,0x2e,0x30,0x60,0x3e,0x2c,0x54,0xba,0xc7,0x38,0x50,0x3a,0x31,0x4e,0xb2,0xbb -,0x29,0x35,0xcb,0xad,0xeb,0x5b,0xe7,0x2c,0x2e,0x5b,0xb9,0x5b,0x3e,0xdf,0xde,0x42,0xe4,0xbc,0x76,0x37,0x2d,0xc5,0xb3,0xcc,0xcb,0xe4,0x48,0x3d,0xaf,0xad,0x38,0x2d -,0x37,0xee,0xd2,0xfa,0xe2,0xcf,0x4c,0x3b,0xc7,0xc3,0x66,0x3c,0x50,0xfc,0x3e,0xbd,0xaf,0xad,0x40,0x2d,0x54,0x34,0x4b,0xc3,0xc7,0x33,0x35,0xcf,0xae,0xc5,0xf1,0xbc -,0x68,0x3a,0x38,0xb7,0xc5,0x5d,0xd8,0xd8,0x43,0x3a,0xb5,0xbf,0x38,0x23,0x38,0xaf,0xac,0xba,0x3f,0x2f,0x2e,0xf9,0xab,0xb8,0x36,0x2d,0x62,0xf5,0x65,0xab,0xaf,0xe0 -,0x2f,0x36,0xef,0xd4,0xb6,0xbc,0x46,0x24,0x2e,0xc5,0xaa,0xc8,0x3d,0x35,0x39,0x56,0xd3,0xad,0xbf,0xc3,0x4a,0x4b,0x4d,0x42,0xbd,0xd4,0x3a,0x2a,0x49,0xbf,0xb3,0x6a -,0x2e,0x39,0x3a,0xb9,0xa7,0xdd,0x25,0x29,0xbc,0xab,0xb6,0xb7,0xdd,0x34,0x2e,0x5d,0xb6,0xe6,0x58,0xcb,0x4d,0x2f,0x3e,0xb9,0xa9,0xca,0x2c,0x26,0x4c,0xad,0xaa,0xbd -,0x2c,0x2e,0xd9,0xac,0xc2,0x65,0xdf,0x3e,0x39,0x2f,0xd8,0xb5,0xb9,0x6f,0x33,0x3b,0xfb,0xaa,0xac,0x39,0x20,0x2f,0xae,0x9f,0xbc,0x32,0x2b,0x3e,0xca,0xb3,0xbf,0x3a -,0x37,0x36,0x5b,0xcd,0xca,0xbc,0xb5,0x57,0x30,0x34,0xcb,0xa7,0xb3,0x6a,0x29,0x3a,0xad,0xa4,0x66,0x2b,0x3a,0x48,0xc6,0x6d,0xce,0x48,0x3c,0x3a,0x40,0xc3,0xdb,0xad -,0xb1,0x36,0x24,0x3c,0xb5,0xaa,0xb3,0x38,0x21,0x43,0xa7,0xad,0x6f,0x27,0x2c,0xdc,0xb7,0xb3,0xc1,0x43,0x45,0x3f,0x37,0x3b,0xdc,0xb4,0xea,0x2b,0x28,0x51,0xa0,0x9c -,0x55,0x27,0x3c,0xc0,0xb1,0xd5,0x32,0x2d,0x45,0xc7,0xd5,0x73,0x34,0x79,0xd9,0x31,0x75,0xbc,0xad,0xb3,0x5c,0x35,0x35,0xcf,0xa2,0xa7,0x32,0x1a,0x22,0xbb,0xa6,0xba -,0x3f,0x2f,0x55,0xaf,0xb1,0xc3,0x41,0x3b,0x36,0x42,0x6e,0xb7,0xa9,0xbd,0x2c,0x26,0x5e,0xab,0xa0,0x64,0x1f,0x1d,0xc4,0xa1,0xb5,0x56,0x27,0x3d,0xb7,0xc1,0xc6,0xb8 -,0xd6,0x44,0x40,0x50,0x49,0xb4,0xa8,0xcd,0x27,0x1e,0x3d,0xa0,0x9b,0x3b,0x18,0x22,0xae,0xa7,0xa9,0x48,0x27,0x51,0xc1,0xb0,0xe0,0x3f,0x70,0xd2,0x3c,0xb9,0xa9,0xae -,0x5c,0x23,0x24,0x41,0xa8,0xa4,0xda,0x24,0x1d,0x51,0xa8,0xad,0xaf,0x3f,0x38,0x4b,0xd6,0xc9,0xd8,0xb3,0xce,0x33,0x39,0x4a,0x54,0xa5,0xad,0x2b,0x19,0x2d,0x9c,0x9c -,0xc2,0x23,0x1c,0x49,0xa7,0xab,0x3d,0x1f,0x3c,0xa7,0xa8,0xc0,0xb6,0xdf,0x2b,0x29,0x7e,0xb4,0xcb,0x37,0x28,0x30,0x34,0xa8,0x9f,0xb4,0x47,0x1e,0x3d,0x9e,0x9f,0xba -,0x60,0xfa,0x62,0x2f,0x33,0x4e,0x54,0xcc,0xea,0x22,0x2e,0xb2,0x9f,0xb6,0x28,0x18,0x4e,0x94,0x98,0xa8,0x23,0x16,0x2f,0x9f,0xa8,0xd5,0x2f,0x2f,0x37,0x43,0xaf,0xb4 -,0xba,0x2a,0x26,0xc8,0xa9,0xcd,0x3f,0x7a,0x44,0x42,0xaf,0xac,0x41,0x2f,0x48,0xd8,0xb6,0xb7,0x3a,0x3e,0x4a,0xb4,0xb8,0x51,0x2e,0x3e,0xb9,0x3c,0x2d,0x25,0xaf,0x9a -,0xab,0x36,0x1d,0x25,0xa9,0x97,0xa9,0x43,0x1a,0x1d,0xa5,0x9c,0xaf,0xcc,0x2f,0x1c,0x24,0x66,0x63,0xdd,0x4f,0xa4,0xa8,0xb3,0xac,0x4f,0x2c,0x2b,0x4c,0xb2,0xad,0x29 -,0x2e,0x3d,0x5c,0xa3,0xa9,0x28,0x1f,0xe5,0xaa,0xc3,0x25,0x23,0xb3,0x95,0xa7,0x2d,0x27,0x5c,0xae,0xac,0xc8,0x2e,0x20,0x36,0xa7,0xaa,0x47,0x36,0x43,0x2c,0xc7,0xae -,0x4f,0x38,0x2c,0xc1,0xa4,0xa7,0xc6,0xe1,0x35,0x6a,0xa9,0xb2,0x61,0x28,0x2b,0x5a,0x60,0xb4,0xb1,0x29,0x2a,0x37,0xcf,0xbf,0x38,0x3b,0x9b,0x95,0xcb,0x1e,0x1e,0x25 -,0xbc,0x9c,0xa0,0x34,0x1a,0x46,0xb6,0xad,0xea,0x2e,0x28,0x46,0xbc,0xb3,0x5c,0x25,0x59,0x9b,0x9f,0xb6,0x32,0x1d,0x27,0x3a,0xbd,0xbd,0x38,0x31,0x49,0xaf,0x9a,0xa7 -,0x3d,0x21,0x2a,0xe0,0xc6,0x53,0x23,0x2f,0x9e,0x92,0x3b,0x1b,0x38,0xaf,0x9b,0x9f,0x32,0x14,0x23,0xab,0x96,0xbe,0x20,0x23,0x2b,0x44,0xaa,0xcf,0x2b,0x22,0x52,0x92 -,0x9d,0xb1,0x27,0x1e,0x45,0x9b,0x95,0xb9,0x2c,0x14,0x18,0x45,0xaf,0x3d,0x2a,0x46,0xaf,0x9f,0xa2,0x55,0x21,0x49,0xa3,0xa5,0x2d,0x1e,0x2a,0xc5,0xab,0xa1,0xb5,0x20 -,0x37,0xaa,0xaa,0x38,0x12,0x1b,0xa4,0x9e,0xa0,0x53,0x1e,0x2e,0x9d,0x8f,0xb7,0x17,0x0e,0x3f,0x99,0x9f,0xc5,0xc8,0xbd,0x24,0x2b,0xaf,0xb2,0x6e,0x2d,0x1e,0x33,0xb3 -,0xa8,0xb3,0x46,0x48,0xab,0xb3,0x23,0x2b,0x78,0xa9,0xaa,0x4b,0x3c,0x38,0x40,0x73,0x3a,0x1f,0x35,0xa1,0x9f,0xad,0xbf,0x1f,0x46,0x7c,0xbe,0x9e,0xc0,0x26,0x17,0xce -,0x9f,0xae,0x2d,0xda,0xd0,0x29,0x49,0xbe,0xdc,0x24,0xe9,0xa8,0xa3,0xae,0xce,0x74,0x2e,0x1c,0x33,0xc3,0x65,0xdb,0x37,0xd9,0xa8,0x96,0x95,0xd2,0x1d,0x1a,0x1c,0x6e -,0xbf,0x5b,0xcd,0x48,0x4e,0x42,0xa6,0xb0,0xb6,0xbc,0x1e,0x1f,0xbe,0x98,0xa6,0x41,0x3b,0xa1,0xaa,0x1a,0x17,0x1e,0x4e,0x41,0x24,0x5d,0xab,0xb2,0xac,0x9e,0x40,0x33 -,0x9f,0x9f,0x4d,0x22,0x1a,0x6d,0xaf,0xcd,0xaf,0x4d,0x28,0x21,0x4b,0xa5,0xbf,0x55,0xaf,0xa9,0xb9,0xb9,0xc4,0x1f,0x29,0xc9,0xb5,0xb8,0x48,0x70,0xc9,0x3d,0x3d,0x9d -,0xb9,0x1e,0x1f,0x39,0xb8,0x64,0xa1,0x9c,0x44,0x1d,0x22,0x34,0x7b,0xb8,0xc0,0xb8,0xc4,0x3e,0x3b,0x9b,0x9f,0x46,0xee,0x24,0x18,0x1e,0xd7,0x9e,0xdd,0x2b,0xc1,0xa8 -,0xee,0x2e,0xb8,0xa9,0xaf,0x31,0x46,0xbb,0x46,0xb2,0xaf,0x21,0x20,0xa0,0xc9,0x20,0x2e,0x55,0xa2,0xa6,0xd9,0xcb,0x5c,0x30,0x4c,0xcd,0xce,0x37,0x38,0xb8,0xd4,0xdd -,0xaf,0xa9,0x2c,0x1f,0x50,0xb6,0x9b,0xaf,0x3d,0x42,0x2a,0x25,0xd4,0xaa,0x1e,0x13,0x39,0x9e,0x9c,0x9f,0x98,0xab,0x2b,0x27,0x34,0x45,0x3f,0x39,0x37,0xdc,0x33,0x2b -,0xaa,0xb6,0x4c,0xdb,0x32,0x1c,0x4c,0x9f,0x97,0xa0,0xbb,0xbf,0x3a,0x2f,0x30,0x45,0x28,0x27,0x39,0xce,0xb2,0x45,0xb5,0xa0,0x33,0x2c,0xa1,0xa5,0x32,0x20,0x42,0xa2 -,0x9a,0xc2,0x2e,0x36,0x2a,0x1b,0x20,0xb3,0xaa,0xb1,0xae,0xa8,0xc2,0x3f,0xd5,0x53,0x22,0x22,0x36,0x50,0xbb,0xce,0xac,0xa9,0xaf,0xb2,0xde,0x1d,0x18,0xaa,0x9a,0xa7 -,0xbb,0xcc,0x33,0x1d,0x3d,0x6d,0x23,0x24,0x68,0xb9,0xba,0xac,0xa4,0x9d,0xa7,0x2b,0x24,0x23,0x24,0xc5,0xa5,0xa0,0xe3,0x2c,0x2a,0xcf,0xa4,0xae,0x31,0x1a,0x25,0x2d -,0xb2,0x99,0xab,0x35,0xd8,0xb0,0x76,0x3d,0x57,0x3d,0x27,0xd4,0xaf,0xa8,0x5d,0x30,0xae,0x9f,0x78,0x1a,0x1d,0x26,0xbf,0x9a,0x9f,0x42,0x29,0xcf,0xb0,0x4f,0xcc,0x6e -,0x2a,0x4d,0xbb,0x48,0x3c,0xaa,0xac,0xb1,0x2c,0x18,0x21,0x2f,0xb3,0x9a,0x96,0xbd,0x1d,0x1b,0x5e,0x9e,0x98,0xae,0x1d,0x1f,0x48,0xd0,0xaa,0x9b,0x2f,0x13,0x38,0xa5 -,0xaf,0x29,0xfa,0xae,0xc2,0xbe,0x39,0x2c,0x2e,0xba,0x9d,0x9e,0x5c,0x1a,0x20,0x2e,0xbb,0x9e,0xa9,0xca,0x33,0x61,0x31,0x2b,0xdc,0x42,0xcd,0xac,0xbd,0x25,0x34,0xb2 -,0xb4,0xaf,0xc6,0x26,0x20,0xcc,0x9f,0x9c,0xad,0x44,0x14,0x1c,0xa8,0x9b,0x9f,0x34,0x24,0x2d,0xbc,0xc8,0x37,0x2c,0x1c,0xbd,0x99,0x9d,0x4c,0x23,0xc9,0xca,0x5d,0x47 -,0x32,0x5f,0xc9,0xaf,0xa4,0xa1,0x26,0x11,0x47,0xad,0xe8,0x29,0xc1,0xa8,0xde,0xc8,0xc7,0xcf,0x68,0x50,0x4e,0xcc,0x32,0x26,0x41,0x9e,0x97,0xb0,0x20,0x0f,0x2d,0xa2 -,0x96,0xa9,0x25,0x15,0x10,0xac,0x8b,0x8f,0xc8,0x17,0x19,0x49,0xa2,0xc2,0x40,0x40,0x2a,0x37,0xb2,0x9b,0xbc,0x32,0xbb,0x4d,0x1e,0x14,0x28,0x9d,0x8f,0x95,0xb4,0x39 -,0x1c,0x19,0x46,0xb4,0x7e,0x53,0xaf,0xa2,0xcf,0x37,0x2f,0x20,0x6d,0xa7,0xa6,0x2c,0x0f,0x26,0x9d,0x8d,0xa3,0x2f,0x1c,0x17,0x60,0x97,0x94,0x2c,0x10,0x19,0xb1,0x8c -,0x8f,0xbf,0x14,0x1a,0x32,0x71,0xb7,0x2f,0x2e,0xee,0xa4,0x9c,0xc9,0x38,0x2e,0x36,0xad,0x4d,0x1c,0x28,0xad,0x91,0x9b,0xc9,0x4e,0x24,0x1d,0x25,0xc5,0x43,0x19,0x47 -,0x90,0x8f,0xde,0x22,0x1f,0x21,0x4d,0xa6,0xa4,0x2f,0x2b,0xd5,0x97,0x92,0x42,0x15,0x0e,0x32,0x98,0x9a,0xbe,0x14,0x15,0x60,0x9b,0x8f,0x9b,0x4c,0x1a,0x1d,0xdd,0xc2 -,0x34,0x28,0xd7,0x98,0xaa,0x36,0x45,0x36,0x4c,0xcd,0xc4,0x1f,0x13,0x4b,0x98,0x97,0xab,0xc3,0x3b,0x35,0x36,0x4f,0xca,0x25,0x27,0xb9,0x91,0x9b,0x25,0x23,0x1f,0x47 -,0xa6,0xa9,0x3b,0x0e,0x1a,0x99,0x8a,0x99,0x27,0x1c,0x24,0x33,0x9c,0x95,0x3a,0x0d,0x10,0xb0,0x98,0x95,0x97,0x38,0x1e,0x32,0x39,0x1d,0x1c,0x3e,0xaa,0x9f,0xa2,0xa2 -,0xd3,0x3b,0x2c,0x4d,0x5d,0x14,0x1b,0xaf,0x8e,0x98,0x4f,0xfe,0x4d,0xde,0x39,0x27,0x39,0x1c,0x1d,0x9a,0x8a,0xa4,0x1b,0x26,0x6b,0x43,0xb3,0xb5,0x19,0x0c,0x30,0x8a -,0x88,0x9f,0x24,0x11,0x1c,0x75,0xa0,0xab,0x1d,0x0d,0x25,0xa0,0x98,0x8b,0x99,0x2c,0x1a,0x38,0xdf,0x14,0x13,0x4b,0x8f,0x91,0xae,0xe3,0x32,0xdd,0x41,0x27,0x1e,0x0f -,0x21,0x8f,0x8d,0xa0,0xb9,0x66,0x34,0x26,0x39,0x65,0x27,0x16,0x32,0x91,0x8d,0xac,0x23,0x2c,0x34,0x2c,0xba,0xc2,0x0f,0x09,0xa7,0x84,0x88,0x9a,0x1b,0x16,0x1d,0x28 -,0xab,0x37,0x10,0x17,0x9b,0x8f,0x99,0x98,0xaa,0x2e,0x1c,0x4a,0x2d,0x0c,0x11,0x9d,0x90,0x95,0x9b,0x4b,0x30,0x24,0x24,0x31,0x1e,0x0f,0xad,0x89,0x93,0xaf,0x68,0x6f -,0x24,0x19,0x28,0xd7,0x2a,0x17,0xbb,0x8a,0x85,0x9d,0x0e,0x14,0x1b,0x25,0x9d,0x38,0x09,0x17,0x8f,0x84,0x8e,0xb1,0x2e,0x29,0x18,0x1e,0x2e,0x1c,0x17,0x78,0x92,0x8e -,0x99,0xa1,0xb1,0x10,0x0e,0xc3,0x3a,0x0d,0x2b,0x97,0x93,0x8f,0x9c,0xda,0x24,0x19,0x1f,0x2d,0x15,0x0e,0xaa,0x86,0x87,0xa0,0x29,0x2e,0x19,0x1d,0xb1,0x28,0x15,0x20 -,0xa7,0x8a,0x85,0x9e,0x1b,0x1b,0x0d,0x19,0xbf,0x22,0x0b,0x35,0x88,0x84,0x92,0xbc,0xdc,0x22,0x1b,0x1c,0x1d,0x17,0x1f,0x3e,0x9a,0x90,0x9e,0x9c,0x34,0x12,0x2e,0x9c -,0x2e,0x0c,0x2f,0x8b,0x88,0x99,0x53,0x1b,0x15,0x35,0xcc,0x12,0x0a,0x15,0x97,0x84,0x8b,0xba,0x32,0x34,0x14,0x33,0xbe,0x1c,0x19,0xcc,0x94,0x89,0x8c,0xe9,0x13,0x16 -,0x1c,0x25,0x34,0x1e,0x12,0x62,0x88,0x88,0x9b,0xd6,0x1f,0x1d,0x59,0x28,0x0f,0x14,0xeb,0x90,0x89,0x9d,0x46,0xa9,0x31,0x1b,0x2c,0x29,0x13,0x11,0x9f,0x87,0x93,0xc9 -,0x30,0x21,0x2d,0xa7,0x2b,0x09,0x0a,0x47,0x86,0x82,0x96,0x2f,0x2b,0x2c,0x1c,0x1d,0x18,0x11,0x24,0xa3,0x8f,0x8c,0x8f,0xcb,0x18,0x2c,0x33,0x1d,0x1e,0x17,0x1d,0x92 -,0x82,0x97,0x27,0x46,0x51,0xcf,0x2c,0x0c,0x0c,0x25,0xa7,0x96,0x90,0xb6,0xd0,0x99,0xb1,0x22,0x18,0x13,0x10,0x4e,0x89,0x88,0xab,0x31,0x3e,0x28,0x4d,0x4e,0x13,0x0c -,0x14,0xcb,0x8a,0x8c,0xb2,0x3c,0xc5,0xa7,0x3f,0x1c,0x17,0x21,0xb1,0x8e,0x8f,0xa9,0xc5,0x2d,0x1f,0x2b,0x16,0x0c,0x1d,0x33,0xb9,0x8e,0x8b,0xaa,0xcd,0xa4,0xaa,0xd9 -,0x1d,0x0b,0x0e,0xae,0x8f,0x9f,0x45,0x29,0xb3,0x93,0xd1,0x10,0x11,0x27,0x4d,0xa8,0x8f,0x98,0xac,0xd6,0x4c,0xdc,0xd2,0x20,0x0c,0x12,0x40,0x90,0x89,0xa9,0x2b,0x5e -,0xc0,0xcc,0x18,0x0c,0x1a,0xcc,0x9c,0x96,0xa7,0xb7,0x9c,0xa9,0xd0,0x2b,0x0f,0x0e,0x2f,0x9e,0x9d,0x93,0x8b,0xa8,0x0f,0x07,0x33,0x14,0x06,0x98,0x83,0x9a,0x10,0x09 -,0xd8,0x8d,0x88,0x82,0x9e,0x02,0x15,0xae,0x0a,0xa7,0x81,0xe4,0x6b,0x91,0x16,0x00,0x05,0x30,0x8b,0xc0,0x20,0x8b,0x96,0x27,0x88,0xb4,0x52,0x9b,0x19,0x0b,0x23,0x8b -,0xbb,0x09,0x00,0x97,0x84,0x4d,0xba,0x8f,0xab,0xa2,0x9e,0x19,0x15,0x20,0x95,0x89,0x2e,0x01,0x14,0x0a,0x29,0x85,0x8b,0x91,0x9d,0xac,0x24,0x1f,0x40,0xa2,0x0f,0x00 -,0xc9,0x84,0x2d,0x0f,0xc0,0x98,0x87,0x91,0xa9,0x2c,0xce,0xbd,0x0c,0x06,0x13,0x97,0x2e,0xd8,0x83,0x8f,0x19,0x05,0x26,0x9d,0x92,0x8b,0x92,0x11,0x0a,0xa5,0x9c,0x2a -,0xcd,0x4e,0x16,0xc9,0x57,0x12,0x0a,0xe9,0x86,0x8b,0x1b,0x0f,0x97,0xd6,0x2a,0x9d,0xa2,0xb9,0x1d,0x16,0xa6,0x9a,0xad,0x12,0x04,0x05,0xb9,0x89,0xc2,0x94,0x88,0x8b -,0xab,0x20,0x1b,0x0e,0x29,0x91,0xac,0x03,0x00,0x19,0x97,0x87,0x82,0x87,0x94,0xd6,0x1b,0x0b,0x14,0x96,0xa0,0x0e,0x18,0x97,0x3e,0x08,0x0d,0xa1,0x87,0x90,0x9f,0xf7 -,0x69,0xa7,0x93,0xad,0x15,0x16,0x19,0x16,0x32,0xd3,0x2c,0x19,0x39,0x8d,0x8f,0x9b,0x9d,0xac,0x20,0x0e,0xe9,0xae,0x1e,0x1b,0x9b,0x86,0x9d,0x26,0x0b,0x0e,0xca,0x9e -,0x4a,0x1a,0x57,0x96,0xac,0x29,0xad,0xa7,0xb1,0xaa,0x97,0xa8,0x12,0x10,0x12,0x19,0x9f,0x88,0x8f,0x20,0x22,0x45,0x2b,0xe2,0x28,0x38,0x33,0x94,0x8b,0x1a,0x00,0x0a -,0x98,0x8e,0x93,0x8c,0x95,0x49,0x3d,0xf5,0x43,0x46,0xcb,0x21,0x09,0x10,0x2d,0x26,0x1d,0x9b,0x83,0x8b,0xac,0xc1,0xad,0xbf,0xc9,0xb4,0x26,0x0d,0x18,0xac,0x98,0xa4 -,0x6d,0x19,0x10,0x38,0xa0,0xb4,0x9d,0x8e,0xa2,0x16,0x0c,0x26,0x1d,0x2b,0x9e,0x9f,0xbb,0x18,0x09,0x0c,0xa7,0x84,0x88,0x9d,0x27,0x25,0xd7,0x1d,0x41,0x91,0x91,0x99 -,0xab,0x25,0x0a,0x09,0x41,0xa0,0x3a,0x2b,0x70,0x9c,0x4b,0x9d,0x8d,0x99,0xa7,0x11,0x17,0x32,0xde,0x23,0x0a,0x0e,0x2e,0x93,0x8c,0xa3,0x9b,0x90,0x94,0xad,0x1d,0x1a -,0x1c,0x3c,0xa3,0xdf,0x1d,0x11,0x08,0x1f,0xa2,0x8f,0x98,0xb4,0xc2,0x3d,0x9d,0xac,0x34,0x1f,0x1e,0xa7,0xa7,0x2a,0x1c,0x21,0x32,0xb3,0x91,0x8e,0xb2,0x58,0xc2,0x58 -,0x25,0x12,0x32,0x35,0xb6,0x93,0xa1,0x2c,0x0d,0x1f,0xad,0x98,0x98,0xbd,0x1f,0x14,0x20,0xca,0x4f,0xcb,0xa0,0xa4,0x97,0xbb,0x25,0x19,0x16,0xa3,0x9c,0xcd,0x3f,0x65 -,0xa8,0xa8,0x95,0xac,0x47,0x44,0x16,0x1c,0x31,0x3c,0x2b,0x0e,0x0f,0xc8,0x9e,0x99,0x9a,0x93,0x9b,0xdb,0x4e,0x23,0x27,0xcc,0x98,0x9b,0x1f,0x0e,0x0f,0x16,0xc1,0x96 -,0x8e,0x91,0xa8,0xb7,0x2a,0x25,0x5b,0x3c,0x1e,0x18,0x2c,0x1e,0x17,0x38,0xa9,0x91,0x8e,0x9c,0xa6,0xc5,0x3a,0xda,0x3c,0x2b,0x27,0x30,0x25,0xd5,0x97,0xb3,0x2b,0x1d -,0x26,0x46,0xbb,0x9f,0x9e,0xc2,0xc4,0xed,0x40,0x22,0x22,0xb7,0xa3,0xa9,0x34,0x25,0x18,0x22,0x9f,0xa0,0xbe,0xc1,0x38,0x3a,0x3c,0xc2,0x9b,0xa2,0x9d,0xa8,0x42,0x1e -,0x1d,0x1f,0x16,0x25,0xdc,0xbb,0x9f,0xa4,0x9f,0x98,0xb1,0x37,0x14,0x14,0x4f,0xab,0xba,0x16,0x14,0x31,0xaa,0x8e,0x8e,0x98,0xb2,0x55,0x3d,0x1a,0x1f,0x5d,0x39,0xb8 -,0xbb,0x3c,0x25,0x17,0x25,0xb5,0x97,0xa1,0xae,0x9c,0xb1,0xa7,0xad,0x24,0x1d,0x15,0x21,0x3e,0x6b,0xb7,0x69,0x38,0x74,0xa9,0x9d,0x9f,0xa4,0xdb,0x2c,0x2a,0x13,0x1f -,0x2b,0xa7,0x8a,0x93,0xbd,0x17,0x0d,0x19,0x3d,0xb0,0xa6,0xb0,0xab,0xba,0xb2,0xc1,0xeb,0xee,0x2c,0xa8,0x3c,0x17,0x20,0x23,0xc1,0xac,0xaa,0xa4,0xa2,0xaa,0x6e,0x5b -,0xb6,0x31,0x3b,0x2e,0x2b,0xa6,0xbf,0x65,0x17,0x11,0x1c,0x28,0xa1,0x92,0x8d,0x8c,0x98,0xc5,0x27,0x1d,0x30,0x2a,0x32,0x13,0x13,0x27,0x20,0xa7,0x94,0x8f,0x91,0xab -,0x4e,0x33,0x29,0x26,0x24,0x61,0xc4,0xae,0x6e,0x2a,0x50,0x2c,0x2d,0x3e,0x34,0xaf,0xa0,0xa5,0xa6,0xbf,0xc3,0x34,0x25,0x1d,0x2a,0xb2,0xb5,0xbb,0x42,0x4c,0xac,0xa6 -,0x9d,0xab,0x3f,0x37,0x18,0x13,0x21,0x3d,0x9f,0x94,0x95,0xaf,0x2d,0x26,0x1a,0x2a,0x2c,0x34,0xa4,0xa1,0xa2,0xa6,0xad,0xa7,0xdb,0x38,0x1f,0x19,0x2c,0x1e,0x27,0x1f -,0x32,0x9d,0x9d,0x98,0xa4,0xbc,0xac,0x7d,0x45,0x2e,0x2b,0xaa,0xb5,0xc8,0x29,0x1f,0x1e,0x17,0x2d,0xda,0x9a,0x93,0x9f,0x9e,0xab,0xaf,0xad,0x1c,0x19,0x19,0x17,0x23 -,0x2b,0xb7,0xa5,0x96,0x93,0x9d,0x9d,0xb0,0x3a,0x1e,0x11,0x1d,0x2a,0x38,0xc9,0xb9,0x99,0xaf,0x2e,0x25,0x19,0x4a,0xae,0xa4,0xa1,0xad,0x9f,0xac,0xfa,0x35,0x24,0x42 -,0x2a,0x25,0x24,0x17,0x42,0xae,0x9b,0x9b,0xb3,0xa8,0x3c,0x2e,0x3e,0x56,0x9f,0xab,0xb2,0xbf,0x3e,0xb5,0x3c,0x1d,0x12,0x10,0x26,0x37,0xa4,0x99,0x97,0x8b,0x94,0xb4 -,0x26,0x1c,0x35,0x24,0x1e,0x17,0x16,0x43,0xbb,0x9b,0x93,0x9e,0x9e,0x5f,0x1f,0x1c,0x1f,0x43,0x48,0xb8,0xac,0xbd,0xd8,0x1c,0x1f,0x45,0xb2,0x9d,0xbe,0xbb,0xab,0xa9 -,0x99,0xb7,0x57,0x2f,0x14,0x14,0x15,0x31,0xb9,0xbe,0xa7,0xa5,0x97,0x99,0xa5,0xb5,0x25,0x2e,0x22,0x18,0x28,0x3b,0x9e,0x97,0xa5,0xca,0x21,0x29,0x2d,0x2a,0x40,0x33 -,0xaa,0xa3,0xa7,0xa1,0xbd,0xb9,0x68,0x2f,0x1e,0x17,0x26,0x30,0x37,0xb1,0xa7,0x9a,0x9e,0xb7,0x58,0x2d,0xcf,0x4b,0x2c,0x30,0x47,0xa6,0xa8,0x51,0x35,0x1a,0x1e,0x2e -,0x44,0xad,0xa1,0x92,0x9a,0xab,0xac,0xcf,0xc3,0x2f,0x16,0x11,0x0e,0x1a,0x2b,0xc1,0x94,0x8f,0x90,0xaa,0xc2,0xae,0x3f,0x33,0x1f,0x1e,0x31,0x40,0xbb,0x56,0xea,0xb7 -,0x3a,0x33,0x2a,0x37,0xc8,0xcc,0x9e,0x9a,0x9a,0xa7,0x28,0x1b,0x19,0x3a,0xb1,0x38,0x21,0x21,0xe7,0x9b,0x97,0x97,0xae,0x37,0x27,0x1c,0x2c,0x35,0xb7,0xa5,0xbd,0xbe -,0xfd,0x4c,0x5b,0x27,0x2d,0x33,0x35,0x48,0x38,0xa2,0x96,0x8e,0x97,0x38,0x1e,0x1a,0x1e,0x22,0x19,0x1d,0x25,0xbc,0x98,0x9e,0x9b,0xaa,0xaa,0xae,0x59,0x39,0x1c,0x1f -,0x35,0xcc,0xa2,0xbf,0x33,0x20,0x17,0xcb,0x9f,0xa4,0xdb,0x47,0xa5,0x9c,0x9b,0xaf,0x2b,0x1c,0x17,0x1c,0x23,0x27,0xc5,0xaa,0x9c,0x96,0x99,0x9c,0x5f,0x2d,0x2b,0x20 -,0x1f,0x17,0x19,0x3e,0x9b,0x91,0x9e,0xe5,0x32,0x4f,0xb5,0x75,0x2b,0x27,0x31,0xa8,0xa5,0xa8,0xb1,0x46,0x3d,0x2d,0x28,0x21,0x20,0x3b,0xd2,0xa5,0x9b,0xa4,0xb1,0x29 -,0x3c,0xb8,0xa9,0xc9,0x1b,0x21,0x45,0xac,0xa0,0xcb,0x23,0x1d,0x21,0x38,0x47,0xc0,0xb0,0xa0,0x91,0x9c,0xaa,0xea,0x2e,0x2a,0x1d,0x1c,0x14,0x14,0x2d,0xb4,0x94,0x90 -,0x97,0xa8,0xb2,0xa9,0xbe,0x2c,0x14,0x13,0x2d,0xa9,0xb6,0x75,0x2c,0x2d,0xda,0xab,0xa1,0x40,0x2b,0x45,0xa2,0x95,0x97,0xb1,0x20,0x18,0x1c,0x3b,0xb6,0x28,0x19,0x3b -,0x9f,0x94,0x9a,0xaf,0x46,0x45,0xfb,0x38,0x1d,0x1a,0x2f,0x9f,0x9d,0xac,0x36,0x30,0xe9,0xcd,0xaf,0x57,0x1e,0x1b,0x4c,0xa7,0x97,0x9c,0xbe,0x2a,0x2f,0xbd,0xc4,0x2b -,0x0e,0x1a,0xbc,0x9e,0xa2,0xc1,0xba,0xbc,0xaa,0xa6,0xde,0x21,0x1c,0x3d,0xc2,0xb0,0xd8,0x35,0x27,0x23,0x4b,0xa0,0xa4,0x2e,0x29,0xaf,0x97,0x95,0xa8,0x2e,0x1e,0x2b -,0x3c,0x2b,0x1c,0x1c,0x53,0xa9,0x9e,0xaa,0xad,0xa1,0xa8,0xb9,0x47,0x1f,0x14,0x1a,0x49,0xac,0xab,0xc1,0x2b,0x4e,0x9c,0x8f,0x9d,0x24,0x10,0x1e,0xae,0x9d,0xbe,0x2a -,0x29,0x35,0xac,0xae,0x31,0x19,0x29,0xa7,0x9b,0x9f,0xaf,0xf6,0xea,0xc7,0xb5,0xbd,0x2c,0x1e,0x1f,0x65,0x3c,0x3b,0x44,0x3f,0xc8,0xac,0xa4,0xd1,0x28,0x2e,0xae,0x9d -,0xa5,0x7b,0xd3,0xb7,0xc1,0x5a,0x2f,0x1c,0x1b,0x2b,0x64,0xea,0x62,0xc9,0xb0,0xa8,0x9f,0x9e,0xa8,0x5e,0x24,0x24,0x2c,0x2e,0x28,0x2f,0x33,0x32,0x34,0x47,0xb6,0x9d -,0x94,0x96,0xa9,0x2e,0x1a,0x21,0x3d,0xbf,0xb1,0xc3,0x4c,0x39,0x35,0xc9,0xa8,0xaf,0xb4,0x5d,0x5d,0x3c,0x2f,0x31,0x29,0x25,0x2e,0x4b,0xd4,0xcb,0xa0,0xa9,0xad,0xa8 -,0xd3,0x6d,0x47,0xae,0xfe,0xd0,0x21,0x1b,0x25,0x2a,0x35,0xaa,0x98,0x99,0xa5,0x20,0x2e,0x1e,0x32,0x50,0xd2,0xa8,0xb3,0xaf,0x59,0xae,0xc3,0xc2,0xc4,0x5a,0x36,0x4c -,0xca,0x3c,0x36,0x24,0x4d,0xbc,0xa3,0xa6,0xa2,0xad,0x4a,0xcf,0x24,0x1c,0x1c,0x39,0xdd,0xad,0xaf,0x48,0x2b,0x2c,0xae,0x9f,0x98,0xa7,0xd9,0x33,0x2b,0x2e,0x1f,0x1f -,0x2e,0xdc,0xa8,0xa1,0x9e,0xb0,0xb7,0xc9,0x60,0xf7,0x37,0x65,0x38,0x2c,0x1c,0x1d,0x26,0x33,0xc8,0xa1,0x90,0x8f,0x9b,0xdf,0x1a,0x1a,0x26,0x35,0x63,0xc6,0xb5,0xc5 -,0x5d,0x39,0x41,0x42,0xbf,0xa8,0xad,0xbc,0xfe,0x32,0x2a,0x27,0x4b,0xad,0xb2,0xb8,0xcc,0xc9,0xde,0x37,0x2c,0x2f,0x4a,0xbe,0xbb,0xb2,0xbd,0xc7,0x43,0x2f,0xe5,0xb3 -,0xa7,0xb3,0x37,0x1f,0x1e,0x2b,0x50,0xb8,0xaa,0xad,0xbe,0x74,0x6a,0xba,0xb5,0xab,0xb4,0xdb,0x31,0x1e,0x1b,0x25,0x61,0xbe,0xb4,0xb6,0xad,0xb4,0xaf,0xbc,0x3e,0x34 -,0x4b,0xcb,0xbf,0xcb,0x50,0x3d,0x2a,0x2e,0x41,0xba,0xb0,0xae,0xb6,0xda,0x4a,0x32,0x2f,0x39,0xc3,0xaf,0xad,0xba,0x42,0x2e,0x2e,0x3e,0xea,0xbb,0xb2,0xb8,0x45,0x22 -,0x27,0x2c,0x4e,0xc2,0xaa,0xa0,0xaf,0xdb,0x2f,0x24,0x1f,0x3a,0xb5,0xa0,0x9e,0x9f,0xa6,0xb9,0x3c,0x24,0x34,0xbf,0xa6,0xae,0xcf,0x52,0x2c,0x1f,0x22,0x38,0xaf,0xa6 -,0xab,0xb5,0x39,0x23,0x25,0x2e,0x30,0x2f,0x3a,0x4c,0x4c,0x36,0x36,0xd7,0xaa,0xa5,0xa4,0xa8,0xaf,0xbd,0x3d,0x2f,0x3e,0xbe,0xb0,0xb8,0xc0,0xd2,0x4f,0x44,0x41,0x3d -,0xcd,0xb8,0xc1,0x6e,0x43,0x41,0x3c,0x36,0x3b,0xf9,0x5f,0x33,0x28,0x29,0x32,0x56,0xb8,0xb4,0xaf,0xb6,0xb9,0xbb,0xc1,0xb2,0xb3,0xa8,0xaa,0xe9,0x39,0x2f,0x37,0x3c -,0x3b,0x51,0xbc,0xa9,0xb6,0xce,0xca,0xf3,0x37,0x2a,0x25,0x28,0x3d,0x73,0xdc,0x41,0x32,0x33,0x47,0xf9,0xc3,0xac,0xa7,0xa8,0xb8,0x4b,0x45,0x51,0x48,0x38,0xeb,0xb5 -,0xb3,0xb1,0xa9,0xa6,0xba,0x5f,0x36,0x2a,0x28,0x2b,0x37,0x6a,0x4e,0x47,0x4d,0x45,0x3b,0x46,0xdd,0xc2,0xd1,0x2d,0x26,0x48,0xb7,0xaf,0xb1,0xad,0xa2,0xa4,0xbe,0x48 -,0x4c,0xeb,0xb7,0xc2,0x31,0x27,0x2e,0x42,0x4b,0x66,0xc0,0xb9,0xbb,0xbf,0x7a,0x57,0x69,0x4a,0x2a,0x27,0x2f,0x41,0xbd,0xb6,0xb1,0xb4,0xba,0xaf,0xbd,0x4f,0x5e,0xb3 -,0xc0,0x39,0x2f,0x2e,0x37,0x3d,0x3b,0xcd,0xad,0xae,0xb7,0xe6,0x4f,0x61,0x7a,0x38,0x2d,0x40,0x61,0xca,0xc1,0xd2,0xcb,0xc1,0xba,0xb9,0xc5,0xde,0x6f,0x36,0x21,0x25 -,0x30,0x3b,0x47,0xcc,0xb2,0xb2,0xb5,0xc7,0x3c,0x31,0x3b,0x5f,0xdf,0xc2,0xb4,0xb3,0xad,0xb7,0xba,0xc4,0xcd,0xb5,0xb7,0xd6,0xef,0x5a,0x28,0x20,0x28,0x39,0xde,0xbf -,0xbf,0xea,0x5e,0x6f,0xcf,0x61,0x3e,0xeb,0x63,0x39,0x35,0x33,0x3d,0xca,0xab,0x9d,0x9a,0x9c,0xa9,0x5a,0x2e,0x2e,0x3c,0x2d,0x2b,0x3f,0x42,0x35,0x2b,0x2c,0x2e,0x49 -,0xaf,0xa5,0xa4,0xb1,0x4d,0x27,0x1d,0x24,0x3d,0xb9,0xa5,0xa4,0xad,0xb5,0xc4,0x6c,0x4a,0xfc,0xbf,0xb7,0x62,0x30,0x2c,0x2d,0x42,0x5f,0xd0,0xb5,0xae,0xbf,0x40,0x33 -,0x3a,0xce,0xc9,0x4d,0x56,0xcd,0xbf,0xc9,0xd0,0xbd,0xb3,0xae,0xb1,0xda,0x4b,0x3d,0x2e,0x28,0x2d,0x3b,0x3d,0x5a,0xd1,0xbe,0xb6,0xb7,0xc0,0xdf,0x59,0x49,0xe6,0x5a -,0x30,0x2f,0x39,0x6e,0xbe,0xaf,0xa7,0xa6,0xaf,0xc6,0xdc,0x62,0x4f,0x3e,0x2b,0x24,0x29,0x2c,0x3d,0x5a,0xcd,0xad,0xa7,0xae,0xde,0x38,0x30,0x34,0x30,0x38,0xcd,0xbc -,0xc3,0xc0,0xb7,0xaa,0xa5,0xa6,0xae,0xbe,0xd2,0x3b,0x28,0x22,0x21,0x26,0x2c,0x38,0x4b,0xcd,0xb7,0xbb,0xc6,0xcc,0xc7,0xdd,0x5c,0x60,0xcd,0xae,0xae,0xbd,0xde,0xf0 -,0xc4,0xae,0xa9,0xad,0xba,0x4b,0x2b,0x24,0x22,0x25,0x2b,0x35,0x69,0xd5,0xcf,0xb2,0xac,0xb4,0xb7,0xbd,0x6d,0x37,0x24,0x23,0x35,0xca,0xae,0xb7,0xd1,0xc6,0xaf,0xa5 -,0xa5,0xb0,0x5e,0x2e,0x1e,0x19,0x23,0x40,0xc9,0xcf,0xce,0xb0,0xab,0xc1,0x56,0xca,0xbb,0xc6,0x69,0x36,0x29,0x26,0x35,0xc4,0xb8,0xaf,0xa6,0xa1,0xa4,0xab,0xb1,0x77 -,0x28,0x1b,0x1b,0x27,0x3d,0x4e,0x3a,0x32,0x68,0xac,0xa3,0xa3,0xa6,0xab,0xbb,0x4c,0x2f,0x2c,0x2f,0x46,0xe5,0xb9,0xac,0xae,0xbb,0xca,0xcf,0xd8,0x5c,0x3a,0x26,0x1c -,0x1c,0x26,0x35,0x42,0xcc,0xaa,0x9f,0x9f,0xa4,0xae,0xc4,0xd0,0xea,0x3f,0x2e,0x30,0x3c,0x35,0x3b,0xbb,0xa1,0xa2,0xbd,0x4f,0x50,0x4c,0x34,0x27,0x24,0x25,0x29,0x33 -,0xec,0xae,0xa1,0x9f,0xa6,0xbe,0x54,0x49,0x41,0x32,0x32,0x49,0xfc,0x48,0x2f,0x3d,0xb5,0x9e,0x98,0x9b,0xa9,0x5a,0x28,0x21,0x23,0x27,0x2e,0x2d,0x26,0x2e,0x55,0xb4 -,0xa3,0x9e,0x9e,0xa4,0xad,0xc8,0x46,0x2d,0x24,0x2b,0x3e,0x47,0x57,0xbd,0xa9,0xa5,0xb4,0xd6,0x41,0x29,0x20,0x1f,0x25,0x2e,0x3a,0x39,0x4f,0xb3,0x9b,0x93,0x98,0xad -,0x4d,0x3b,0x2f,0x29,0x27,0x2e,0x37,0x2e,0x2d,0xf2,0xa8,0x9e,0xa0,0xab,0xbd,0x4b,0x2c,0x25,0x21,0x28,0x50,0xca,0x52,0x40,0xcb,0xab,0x9f,0x9e,0xa2,0xac,0xea,0x2d -,0x22,0x1d,0x1f,0x26,0x2c,0x5e,0xaf,0xa0,0x9d,0xa0,0xaa,0xb1,0xbf,0x4d,0x28,0x1a,0x1a,0x1f,0x2b,0x3e,0xbd,0xa1,0x9a,0x9a,0xa2,0xbb,0xdb,0x6d,0x3a,0x23,0x1c,0x1f -,0x27,0x2b,0x5f,0xa4,0x9b,0x9c,0xa1,0xbd,0x4e,0x42,0x3a,0x32,0x24,0x20,0x26,0x26,0x26,0x59,0x9c,0x8f,0x90,0x9f,0xec,0x30,0x2c,0x2b,0x25,0x20,0x21,0x24,0x26,0x38 -,0xb1,0x9f,0x9c,0x9c,0xa5,0xb0,0xbf,0x4e,0x2a,0x1f,0x2b,0x3d,0x34,0x2f,0x72,0xa5,0x9c,0x9c,0xa8,0xfe,0x3a,0x3a,0x3d,0x2d,0x22,0x1f,0x1f,0x24,0xd9,0x9c,0x94,0x95 -,0x9c,0xb6,0x44,0x3f,0x3d,0x2b,0x1e,0x1e,0x1e,0x1e,0x28,0xd3,0x9e,0x93,0x93,0xa8,0x3b,0x2e,0x30,0x35,0x30,0x33,0x36,0x2b,0x29,0x3c,0xb1,0x9a,0x93,0x99,0xb3,0x3b -,0x27,0x1d,0x1b,0x1f,0x30,0x3f,0x3a,0x49,0xbe,0xa7,0x9d,0x9c,0xa5,0xb8,0xb8,0xc0,0x3c,0x22,0x1c,0x1b,0x21,0x37,0xdc,0xaf,0xa3,0x9f,0xa7,0xbd,0xc7,0xc4,0xed,0x3f -,0x33,0x2e,0x27,0x24,0x33,0xbe,0x9e,0x95,0x9c,0xd6,0x2f,0x3b,0x42,0x2e,0x1e,0x1c,0x1d,0x24,0xdc,0xa5,0x9b,0x94,0x95,0xa6,0x64,0x3a,0x30,0x25,0x1f,0x21,0x22,0x1f -,0x22,0x34,0xb6,0x98,0x8e,0x91,0xaa,0x3d,0x3c,0x41,0x2f,0x27,0x26,0x25,0x27,0x2f,0x3c,0xcb,0xa5,0x9d,0xa2,0xaa,0xab,0xb9,0x40,0x26,0x1e,0x1d,0x1f,0x2e,0x6f,0xb3 -,0x9e,0x98,0xa1,0xc8,0xd9,0xb8,0xbc,0x4c,0x2a,0x1d,0x19,0x1d,0x31,0xbb,0x9f,0x94,0x96,0xad,0x3f,0x3d,0x42,0x4c,0x45,0x32,0x1f,0x18,0x20,0x3d,0xad,0x95,0x8f,0x99 -,0xbd,0x3f,0x36,0x2a,0x21,0x1f,0x1f,0x21,0x2c,0x33,0x37,0xaf,0x96,0x90,0x97,0xa1,0xb6,0x40,0x2a,0x22,0x1c,0x18,0x1b,0x25,0x32,0xba,0x9b,0x99,0xa8,0xb6,0xa8,0xab -,0xb8,0xdd,0x2b,0x1b,0x18,0x24,0x32,0x4d,0xac,0x9d,0x9f,0xad,0xbd,0xd7,0x4f,0x4d,0x36,0x23,0x1e,0x23,0x2d,0x5d,0xa1,0x93,0x94,0xa0,0xbb,0xee,0x4f,0x65,0x44,0x24 -,0x15,0x15,0x1b,0x1f,0x46,0x9e,0x91,0x94,0x9d,0xa8,0xdf,0x40,0x4d,0x2f,0x1f,0x1e,0x29,0x2a,0x2b,0xbe,0x9d,0x9b,0x9d,0x9e,0xab,0xdd,0x39,0x27,0x19,0x13,0x1a,0x25 -,0x2f,0xce,0xa2,0x9c,0x9e,0xa3,0xa5,0xa6,0xa4,0xae,0x37,0x1b,0x16,0x1a,0x1f,0x3a,0xab,0x9c,0xa5,0xb5,0xb9,0xbe,0xce,0xb5,0xeb,0x20,0x2d,0x4e,0x2d,0x22,0x69,0xc9 -,0xa8,0xc4,0x44,0x59,0xb8,0x4f,0xcc,0xac,0x6c,0xa9,0x9f,0xc0,0x15,0x21,0x4f,0xa8,0x5d,0xa8,0xb2,0xa5,0x2e,0x3c,0xda,0x6b,0x5d,0x29,0xa1,0x00,0x03,0x00,0x1e,0x8f -,0x2c,0x99,0x2a,0x20,0x95,0x95,0x9c,0xb0,0x98,0x9a,0x8c,0x8f,0xcb,0x8d,0x93,0x11,0x98,0x16,0x11,0x88,0x8b,0x8b,0xa3,0xa4,0x2d,0x2e,0x04,0x03,0x03,0x04,0x03,0x08 -,0x07,0x06,0x0c,0x14,0x18,0x00,0x12,0x0f,0x1f,0x17,0x1f,0xb5,0xa3,0x89,0x8d,0x91,0x97,0xaf,0x9d,0x88,0x89,0x8a,0x83,0x81,0x81,0x86,0x83,0x80,0x81,0x84,0x99,0x80 -,0x9f,0x26,0x8c,0x80,0x25,0x0e,0x98,0x08,0x06,0x0a,0x04,0x09,0x04,0x00,0xcd,0x31,0x05,0x06,0x00,0x0a,0x02,0x02,0x02,0x02,0x11,0x12,0x9b,0x74,0x0c,0x0e,0xb7,0x88 -,0x86,0x80,0x89,0xac,0x87,0x80,0x83,0x84,0x83,0x8b,0x99,0x84,0x89,0x80,0x8d,0x9e,0x9f,0x8d,0xad,0x9a,0x86,0x19,0x0a,0x08,0x17,0x19,0x0a,0x07,0x05,0x00,0x02,0x03 -,0x0b,0x06,0x00,0x0b,0x06,0x03,0x05,0x12,0x15,0x15,0xb3,0xb8,0x57,0x16,0xad,0x95,0xa1,0x8f,0x89,0x8e,0xc5,0xa2,0x90,0x8c,0x9b,0x8a,0x86,0xaf,0x80,0x8d,0x96,0x87 -,0x89,0x80,0x8b,0x85,0x1d,0x99,0x8e,0x1d,0x1e,0x1f,0xc2,0x00,0x0e,0xa4,0x0b,0x06,0x00,0x05,0x03,0x0a,0x18,0x26,0xd3,0x0c,0x04,0x02,0x07,0x05,0x5a,0x1e,0xb9,0x22 -,0x91,0x8e,0x0e,0x8b,0x8e,0x80,0x84,0x97,0x8f,0x85,0x85,0x84,0x80,0x82,0x8f,0xae,0x87,0x8f,0x9a,0x33,0x31,0xb4,0xa0,0x95,0x52,0x25,0x00,0x0b,0x1b,0x35,0xcd,0x17 -,0x10,0x07,0x00,0xd0,0x9c,0x0d,0x04,0x00,0x01,0x13,0xa1,0x18,0x9a,0x12,0x0d,0x05,0x44,0xa4,0x40,0x80,0x1f,0x38,0x86,0x82,0xbd,0x94,0x86,0x91,0x9a,0x04,0x94,0x80 -,0x93,0x96,0x1d,0x8a,0x81,0x80,0x86,0x88,0xa5,0x3d,0xa3,0x5d,0xa6,0xc3,0xfe,0x27,0x3e,0x01,0x03,0x06,0x0b,0x0c,0x17,0x07,0x01,0x0c,0x13,0x89,0x39,0x00,0x04,0x06 -,0x05,0x2f,0x98,0x1e,0x17,0x5b,0x33,0x8d,0x8b,0x89,0x8b,0x8a,0x42,0x0c,0xb2,0x80,0x82,0x80,0x88,0x97,0x8e,0xba,0x8c,0x8e,0x88,0x0f,0x12,0x37,0x88,0x8c,0x0e,0x2e -,0x96,0x39,0x00,0x86,0xb9,0x06,0x07,0xbd,0xb9,0x0c,0xa1,0x07,0x07,0x0c,0x00,0x0a,0x16,0xa3,0x03,0x03,0x17,0x1a,0x9d,0xdc,0x8f,0x06,0x21,0x0e,0x14,0x80,0x87,0x80 -,0xbf,0x9f,0xa3,0x89,0x90,0x8c,0x80,0x8d,0x13,0x43,0x84,0x85,0x8d,0x33,0x86,0x8e,0xba,0x13,0x15,0x44,0x82,0x90,0x18,0x79,0x05,0x9a,0x0e,0x0a,0x04,0x08,0x37,0x05 -,0x1d,0x19,0x0c,0x01,0xa4,0x1e,0x03,0x04,0x2c,0x4b,0x06,0x09,0x8f,0x81,0xc5,0x25,0x01,0x2c,0x6f,0x87,0x84,0x8d,0x50,0x17,0x8a,0x8e,0x80,0x96,0x94,0x99,0x29,0x87 -,0x8a,0x8e,0xaf,0x89,0x92,0xaf,0x8b,0xca,0x54,0x3b,0xb3,0x85,0x8e,0x15,0x09,0xa6,0x99,0x1e,0x07,0x0f,0x56,0x00,0x05,0x2c,0x1c,0x00,0x08,0x07,0x0e,0x2c,0x23,0x05 -,0x06,0xb4,0xa4,0xe1,0x0d,0x30,0xb1,0x80,0xaa,0x9a,0x8b,0x1a,0x93,0x8e,0x8a,0x94,0x8f,0x80,0x8f,0x8f,0xac,0xa7,0x85,0x9c,0xc3,0xa3,0x81,0x1b,0x18,0x29,0xba,0x9c -,0xab,0x2c,0x1d,0x06,0x10,0x8c,0xa8,0x1f,0x06,0x94,0x1a,0x0f,0x11,0x14,0x0a,0x07,0x9c,0x31,0x12,0x07,0x15,0x19,0x0d,0x2b,0x1e,0x0c,0x29,0xc0,0x22,0x0c,0x9b,0x82 -,0xa8,0xb9,0x27,0x9a,0x9a,0xbd,0x8b,0x82,0x8f,0x94,0x9e,0x87,0x8e,0x9d,0x85,0x90,0x82,0x9d,0x90,0x8d,0xbd,0x22,0x8b,0xb8,0xc8,0xbe,0x20,0x5d,0x01,0x0f,0xcb,0x26 -,0x01,0x13,0x11,0x0d,0x09,0x0f,0x16,0x13,0x06,0x0a,0x26,0x51,0x15,0x26,0x97,0x01,0x4e,0x92,0x2e,0xd4,0xa6,0x8f,0x93,0x98,0x91,0x8e,0x94,0x90,0x87,0x80,0x5f,0x7c -,0x8b,0xa0,0x96,0x8d,0x8d,0x2c,0x1f,0xd7,0x8f,0x99,0x0f,0x16,0xaf,0xa3,0x26,0x2c,0x1a,0x0f,0x3b,0xb7,0x90,0x18,0x03,0x14,0xa7,0x23,0x3d,0x39,0x0f,0x0e,0x0b,0xb1 -,0x10,0x1f,0x0d,0x25,0x22,0x29,0x3b,0x38,0x07,0x1b,0xad,0x3a,0xa1,0x26,0xbe,0x9a,0x8e,0x41,0x80,0xbb,0xd3,0x8a,0x88,0x89,0x29,0x91,0x92,0x88,0x86,0x98,0x93,0xaf -,0xb6,0x91,0x8e,0x27,0x1b,0x94,0x34,0x27,0xd5,0x0d,0x0c,0x18,0xc8,0x31,0x15,0x07,0x05,0x27,0x0e,0x21,0xaf,0x13,0x02,0x11,0x45,0xac,0x28,0x0b,0x15,0x9d,0xbd,0x99 -,0x8f,0x15,0x1d,0x1d,0x8f,0x97,0x94,0x87,0x9f,0xa2,0xa4,0x88,0x81,0x8e,0xa3,0x8e,0x9a,0x9d,0x8f,0x8e,0x92,0x98,0x22,0xcf,0x2b,0x3b,0xa8,0x1a,0xa9,0x0f,0x26,0x69 -,0xba,0x34,0x28,0x1f,0x0b,0x10,0x22,0x9c,0x0f,0x1f,0x1d,0x07,0x31,0x2c,0x1e,0x0f,0x0c,0x0f,0xc6,0xe6,0x3f,0x1c,0xa9,0xb9,0xbc,0x88,0x1b,0xac,0xb4,0x91,0x9d,0x98 -,0xa0,0x9e,0x8f,0xac,0x98,0x9d,0x91,0x9a,0xa4,0xbc,0x95,0xb5,0x96,0x9e,0x9f,0xa3,0x21,0xc7,0x61,0x36,0x3c,0x27,0x16,0xa7,0x20,0x14,0x3e,0x1b,0x1b,0x17,0x0d,0x1b -,0xaa,0xa2,0xd2,0x0e,0x2f,0x0f,0xee,0x8f,0x0f,0x0c,0x19,0x28,0x3f,0xa2,0x1e,0x0b,0xbc,0xba,0x4d,0x99,0x2c,0xac,0xc6,0xac,0x8b,0x90,0x90,0x8d,0x8f,0x8f,0xa0,0x89 -,0x86,0x97,0xa6,0xa8,0x94,0xa8,0x99,0xa6,0xa2,0x16,0x22,0xe7,0x0a,0x14,0x23,0x0e,0x13,0x11,0x07,0x15,0x47,0x0d,0x02,0x12,0x1d,0x07,0xcf,0xb1,0x16,0x29,0x1a,0xa6 -,0xe7,0x93,0xb7,0xb2,0x92,0xa6,0x8f,0x91,0x8f,0xae,0xd9,0x94,0x98,0x9e,0x91,0x50,0x35,0x93,0xa3,0xbf,0x95,0xa6,0xa5,0x1b,0x2c,0xdb,0x48,0xc0,0x39,0x4d,0x35,0x1e -,0xd9,0x25,0x1a,0xa0,0x0e,0x1c,0xf4,0x3f,0xb7,0x6c,0x26,0x23,0x21,0xaf,0x90,0x17,0x14,0x31,0x2f,0x9c,0xb1,0x2a,0x1d,0x2e,0x22,0x21,0x3e,0x20,0x18,0x1b,0x1b,0xdd -,0x2c,0x5e,0x9f,0x2e,0xb1,0x30,0x9f,0x98,0xa5,0xbd,0x97,0x9f,0x98,0x89,0x8b,0xab,0x98,0x96,0xb7,0xb4,0x97,0x96,0x25,0x99,0x27,0x60,0x43,0x33,0x2e,0x0f,0x10,0x0f -,0x15,0xee,0xb4,0x11,0x03,0x1f,0x1a,0x43,0x1b,0x09,0x30,0x1d,0xab,0x9e,0x9f,0xb1,0x9e,0xbc,0x9c,0xad,0xd3,0x9e,0x9b,0xef,0x2a,0xd5,0x90,0xa5,0x5a,0xb8,0x35,0x8f -,0x99,0xa7,0xd0,0x45,0xac,0xb2,0x9d,0xb7,0x64,0x3e,0xaf,0x32,0x0c,0xb6,0xd9,0x9d,0x32,0x14,0x29,0x5a,0x56,0xa5,0x1f,0x0d,0x2d,0x3f,0xab,0x29,0x33,0x1c,0x33,0x15 -,0xe8,0xb1,0x26,0x2c,0x24,0x35,0xa8,0x9d,0x9f,0x9f,0xb7,0x2f,0x3a,0xa7,0xbd,0x96,0x0f,0x19,0x34,0xb9,0x9f,0x55,0xae,0x28,0xa9,0xa4,0xa3,0x98,0xad,0x2d,0xbc,0xb7 -,0x4c,0xb5,0xa3,0xbe,0x4d,0x1f,0x2d,0xcb,0x9d,0xa2,0x15,0x34,0xb4,0x9c,0xd6,0x30,0x21,0x21,0x34,0xcb,0xb5,0x27,0x3a,0x26,0xde,0x18,0x2d,0xaa,0xe0,0x2e,0x0f,0x1d -,0xb8,0xab,0x41,0x28,0x1b,0x5a,0x9f,0xaa,0xa5,0x6e,0x27,0x4d,0xac,0xa1,0xca,0x9b,0xaa,0xbd,0xaf,0x9b,0x9f,0xb8,0xa7,0x49,0xef,0xe0,0x9d,0x9f,0xaf,0x55,0x2e,0x26 -,0x45,0xac,0xaf,0x2f,0x28,0x5d,0xa3,0xaa,0xb7,0xb3,0x27,0x24,0x27,0xae,0xb5,0x58,0x2e,0x27,0x1f,0x22,0xb3,0xb6,0x2f,0x1e,0x2b,0xbf,0x9b,0xb3,0x19,0x1e,0x48,0xb0 -,0xae,0x57,0x5b,0x33,0x31,0x2c,0x24,0xd9,0xab,0xbd,0x43,0x1d,0x1b,0xa0,0x92,0x9d,0x48,0x16,0x1c,0xac,0x96,0xd7,0x2e,0x28,0x2f,0x2c,0x2e,0xaf,0xaf,0x41,0x29,0xb6 -,0xa3,0xaa,0xbc,0x4d,0xde,0x4d,0xb2,0xa0,0xd4,0x2d,0x2a,0xce,0xbb,0xc7,0x38,0x23,0x34,0xa9,0x9f,0xbc,0x7d,0x2d,0x2b,0x31,0x33,0x2c,0xe7,0xa7,0xa3,0xbc,0x1e,0x18 -,0x2a,0xa3,0xa3,0x34,0x2a,0x28,0xbf,0x98,0xac,0x2b,0x1e,0x1f,0x2c,0xa0,0xa9,0x47,0x2a,0x32,0xa3,0xbf,0xa0,0x9f,0xe0,0x20,0x29,0xb4,0xac,0xbf,0x35,0xdf,0xbc,0xba -,0xa3,0xb1,0x1b,0x2d,0xa1,0xa2,0x43,0x1b,0x23,0xb7,0x98,0x9b,0x40,0x1d,0x4a,0xa9,0xbe,0x2f,0x21,0x24,0xaf,0xa5,0xae,0xd8,0x2a,0x39,0x4e,0xa9,0x37,0x25,0x30,0xee -,0x9f,0xa8,0xb6,0x40,0x2b,0x1b,0x3d,0x9d,0xa2,0x52,0x43,0xc5,0x62,0x4a,0xbf,0x5f,0x27,0x3f,0xac,0xb5,0x36,0x26,0x4c,0x98,0x8f,0xab,0x21,0x1d,0x2d,0xa0,0xa5,0x2c -,0x13,0x1d,0xbd,0xb9,0xfa,0x21,0x16,0x1b,0xc4,0xa6,0xcf,0x22,0x31,0x9e,0x90,0xa6,0x54,0x60,0x29,0x2b,0xd3,0xb3,0x35,0x27,0xde,0x9f,0x9b,0x96,0xa4,0x28,0x1c,0xd0 -,0xa5,0xb4,0x30,0x20,0xb5,0x98,0x9d,0x2d,0x21,0x2e,0xaf,0x97,0xb5,0x1d,0x1a,0x50,0x93,0x9d,0x22,0x0f,0x19,0xa2,0x9a,0xa5,0x1e,0x0d,0x11,0xb0,0x8f,0xac,0x2a,0x28 -,0x4b,0x5b,0xa7,0xbe,0x2e,0x49,0x60,0xdb,0x46,0x4a,0x3e,0x2d,0x48,0x9f,0x9e,0xb4,0x25,0x2c,0x9c,0x95,0xaa,0x2a,0x2c,0x3f,0xa9,0x9a,0xd2,0x27,0x28,0xe4,0xa2,0xb9 -,0x1b,0x10,0x28,0x9c,0x9c,0xdc,0x2b,0x1f,0x57,0x93,0x9a,0x1e,0x0f,0x18,0xb7,0x9a,0xaf,0x21,0x2b,0xcd,0xe6,0xb1,0xbb,0x32,0x27,0x3b,0x68,0xb3,0xa7,0xac,0x25,0x1f -,0xad,0x9b,0xa0,0x3e,0x39,0xc6,0xab,0xa7,0x3d,0x3b,0x48,0x48,0xab,0x35,0x15,0x25,0xae,0xa3,0xa8,0xc1,0x27,0x74,0xa2,0xa3,0x33,0x18,0x22,0x5e,0x9d,0xac,0x2d,0x18 -,0x35,0xae,0x7a,0xc9,0x28,0x1c,0x33,0xb3,0xa2,0x9a,0xb3,0xb3,0xd0,0x27,0x36,0x4c,0xc8,0x24,0x2d,0xab,0xa2,0xa5,0xa3,0xa5,0x3e,0x31,0x3f,0x30,0x4a,0x31,0x3b,0xbd -,0xae,0xe2,0x51,0xb4,0x5a,0x4d,0x1f,0x1e,0x36,0xa9,0x98,0x3e,0x1a,0x33,0x9d,0x9c,0x39,0x18,0x15,0x23,0x3a,0x36,0xc6,0xad,0xba,0x9e,0x9b,0x43,0x30,0xb9,0xa7,0xbb -,0xc3,0xc7,0xa7,0xa8,0x39,0x45,0x69,0x34,0x2f,0x67,0xc6,0x2c,0x2b,0x9f,0x93,0x9f,0xb3,0x5a,0x15,0x33,0x62,0x3e,0xdf,0x64,0xb3,0x2b,0x2a,0x2f,0xa1,0xbb,0x19,0x17 -,0x2e,0xa6,0xa7,0xa9,0xcc,0x40,0x2d,0xaf,0xb3,0x44,0x29,0x1e,0x46,0xa9,0xae,0xb9,0x9e,0xb8,0x3d,0x3a,0xfe,0x32,0x34,0xca,0xff,0x2f,0x43,0xaa,0x9d,0xac,0x41,0x4c -,0x37,0xaf,0x31,0x49,0xaf,0xd0,0xac,0xba,0x2f,0x1c,0xc2,0x4d,0x27,0x2e,0x54,0xa5,0xb5,0x2e,0x2e,0xa9,0xa9,0xd2,0x29,0x1d,0x23,0xf6,0x9d,0xa3,0x3b,0x2d,0xdb,0x29 -,0x36,0xb9,0xab,0x9e,0xbd,0x45,0x33,0x39,0xce,0xab,0xb2,0x20,0x15,0x2f,0x9e,0x97,0xa2,0xa3,0xb5,0x37,0x43,0xbd,0xaf,0x2f,0x1f,0x2c,0xc8,0x52,0x4a,0xae,0x49,0x1c -,0x2c,0xb7,0x39,0x2e,0x51,0xb3,0xad,0x9f,0xa3,0x6a,0x28,0x28,0x56,0x24,0x20,0x1f,0x31,0xa3,0x9d,0x9e,0xd0,0x21,0x2f,0xa4,0xa0,0x46,0x36,0xb9,0x9c,0x98,0x76,0x36 -,0xd1,0x65,0x26,0x1b,0x2e,0x28,0x32,0x9b,0x8e,0xae,0x32,0x37,0x1f,0x20,0x3c,0xa6,0xa6,0x2c,0x1a,0x6a,0xa9,0xa5,0xb9,0x3d,0x1d,0x18,0xeb,0xaa,0xa5,0xb1,0xa9,0xb8 -,0x3e,0x2f,0x1d,0x27,0x4e,0xee,0x55,0xf1,0xb5,0xa2,0x96,0x98,0x4c,0x30,0x32,0x32,0x3b,0x56,0xb7,0x62,0xdc,0xd1,0xa3,0xb7,0x29,0x1e,0x26,0x4d,0x4a,0xba,0xb6,0xdb -,0x53,0x9f,0xa0,0x34,0x1e,0x1d,0x1d,0x2e,0xae,0x9e,0xa1,0x2f,0x37,0xa2,0xa3,0x4e,0x15,0x18,0x24,0x4e,0x9e,0x9d,0xc2,0x6c,0xa8,0xae,0x43,0x33,0x30,0xd9,0xa8,0xb1 -,0x4b,0x54,0xc4,0xb8,0xab,0x3f,0x22,0x1d,0x27,0xed,0xa9,0x9a,0xce,0x34,0x3b,0xd1,0xa8,0xae,0x29,0x1f,0x4f,0xd8,0xcb,0xbc,0xc6,0x1b,0x24,0x9d,0xa2,0x2a,0x1c,0x31 -,0xd6,0xaf,0xa1,0x9f,0xc6,0x27,0x34,0xae,0xbe,0x48,0x35,0x4c,0x44,0xca,0xa3,0xaf,0x54,0xe7,0xcf,0x2d,0xd6,0x3e,0x2f,0xbd,0xb5,0x48,0x31,0xb4,0xaa,0xd9,0x37,0x3c -,0x28,0x30,0xa8,0x9e,0xb1,0x4c,0x2b,0x1e,0x38,0xb1,0xa1,0xc3,0x1a,0x24,0xf6,0xc6,0xb7,0xbb,0x4a,0x2d,0xbf,0x9a,0xb5,0x29,0x39,0xbc,0xb6,0xb1,0xc2,0x2d,0x36,0x4d -,0xb5,0xa1,0xa8,0x1f,0x15,0x46,0xbf,0xdf,0x60,0xad,0xbf,0x3d,0x2f,0x3c,0xb4,0xbe,0xa7,0xa4,0x3a,0x19,0x19,0x3e,0x9a,0x99,0xae,0x2e,0x16,0x2b,0xb4,0xac,0xa9,0x4c -,0x1e,0x1f,0xaf,0x98,0x9d,0xbe,0x29,0x4d,0xc2,0x78,0x39,0x28,0x47,0xc8,0xa3,0x97,0xc0,0x15,0x1b,0xeb,0xb8,0xb7,0x41,0x5c,0x2d,0x20,0xc4,0xa2,0x9d,0xb6,0x3e,0x23 -,0x15,0x1f,0xae,0x99,0x9b,0xb0,0x2d,0x25,0x2a,0xba,0xa8,0xb8,0x31,0x20,0xcb,0xa2,0x9d,0xbb,0x3d,0x2d,0x26,0xad,0x9b,0xc0,0x1d,0x1c,0x2a,0xb8,0x96,0x93,0xb6,0x0f -,0x15,0xdb,0xcc,0x4a,0x35,0xdf,0x4c,0x48,0x9d,0x98,0x4d,0x1a,0x2f,0xcf,0x34,0x2f,0xae,0x9c,0xa8,0x6c,0xd2,0x4a,0x28,0x35,0x50,0x75,0x21,0x25,0x9e,0x99,0xb4,0x3e -,0x4a,0x4e,0xc1,0xa2,0xb5,0x1d,0x0f,0x39,0x9b,0x90,0x93,0xb8,0x1c,0x09,0x16,0xa8,0x9b,0xbd,0x2a,0x58,0x38,0x3b,0xa7,0xa6,0xcb,0x21,0x47,0xa9,0x3e,0x1f,0x2f,0xa7 -,0x9b,0xaa,0xb9,0xc6,0x1c,0x1b,0x43,0xc2,0x30,0xbb,0x92,0xa1,0x2b,0x26,0xaf,0x5e,0x3d,0xc5,0xd6,0x1f,0x19,0xa2,0x8e,0x98,0x36,0x1b,0x1d,0x18,0xf0,0x93,0x9f,0x21 -,0x13,0x41,0xaa,0x9c,0x9c,0x56,0x1e,0x18,0x7a,0x9e,0xda,0x22,0x26,0xa6,0x9a,0xad,0xbc,0x2c,0x15,0x21,0xa5,0x9f,0x3a,0x3c,0xb6,0x70,0x32,0xdb,0x99,0xa4,0x3d,0x2e -,0x46,0x2a,0x17,0xb7,0x8f,0x96,0x28,0x28,0xb0,0x39,0x3a,0x34,0x29,0x1e,0x2e,0x98,0x99,0xba,0x30,0x24,0x2a,0x2b,0xaa,0x95,0x37,0x0b,0x1b,0x99,0x90,0x98,0x9d,0x27 -,0x0c,0x17,0xac,0x9d,0x2b,0x20,0x46,0xa4,0xa0,0xb8,0xaa,0x49,0x2d,0x2a,0xb6,0xc5,0x27,0xa9,0x99,0xa0,0x33,0x3e,0xb6,0x4e,0x26,0x1a,0x25,0x44,0xb7,0x99,0x9a,0x4c -,0x1e,0x45,0xa6,0x3d,0x47,0xdd,0x19,0x0e,0xc9,0x88,0x8c,0xaf,0x17,0x0b,0x0f,0x23,0x9f,0x8e,0x5d,0x12,0x2c,0x93,0x8f,0x9d,0xeb,0x16,0x15,0x36,0xa2,0x3d,0x1a,0xb8 -,0x9a,0x96,0xa5,0xb4,0xb3,0x25,0x11,0x1b,0xc5,0xc0,0xac,0x9c,0xa9,0x3c,0x2d,0xc6,0xb6,0x29,0x1f,0x2d,0x25,0x3a,0xad,0x96,0x91,0xaf,0x1a,0x1d,0x3a,0x25,0x47,0xca -,0x1f,0x1b,0xab,0x89,0x8e,0xbb,0x19,0x0e,0x20,0xc3,0xa1,0x49,0x19,0x51,0x8f,0x8b,0xaf,0x2e,0x4c,0x1b,0x10,0x59,0x9e,0xc6,0x6b,0xb0,0xb5,0xb6,0xc5,0xc9,0xc0,0x1f -,0x12,0x27,0xcb,0xc8,0xb2,0xa5,0x99,0xa2,0x32,0x25,0x19,0x18,0x6c,0xb3,0xdc,0xb5,0xa8,0x93,0x9b,0x1d,0x10,0x21,0xc6,0xbc,0xc2,0x24,0x17,0xbf,0x8a,0x85,0xa7,0x1c -,0x1b,0x0f,0x17,0x4d,0xad,0x9f,0xb8,0x2f,0xa6,0x95,0xb8,0x47,0x39,0x1c,0x1d,0x67,0xc9,0x5e,0xbc,0xa4,0xa0,0xa7,0x58,0x21,0x14,0x14,0x2e,0xb9,0xa9,0x3e,0xcd,0x8e -,0x94,0x3f,0x2d,0x32,0x32,0x37,0x24,0x15,0x21,0xab,0x92,0x88,0x9a,0x1f,0x16,0x1e,0x4c,0xcd,0x45,0xcc,0x40,0x37,0x98,0x93,0xa0,0xb8,0x28,0x10,0x17,0x29,0x5f,0xba -,0x6d,0xaf,0x96,0x9f,0x68,0x30,0x18,0x18,0x74,0x9b,0x57,0x13,0x3b,0x90,0xa3,0x49,0x2c,0x1c,0xd7,0xaf,0x2d,0x1d,0x4d,0xa8,0x92,0x8e,0xa6,0x38,0x1e,0x1c,0x3c,0xc1 -,0x35,0x23,0x24,0xdb,0x9b,0x91,0x9f,0x27,0x16,0x2c,0x49,0xbc,0xa2,0x4b,0x20,0xad,0x8d,0x9c,0x31,0x15,0x0f,0x17,0x41,0xad,0xd8,0x27,0xde,0x96,0x95,0x9e,0x30,0x1a -,0x44,0xe1,0x28,0x27,0x28,0xba,0x90,0x93,0x62,0x2d,0x1e,0x1c,0xc3,0xc0,0x2a,0x2c,0x3b,0xba,0x94,0x93,0xbb,0x1e,0x2d,0xbf,0x3d,0x2c,0x35,0x22,0x33,0x99,0x8e,0x8d -,0xab,0x0c,0x0c,0x47,0x6b,0x3a,0x2d,0x19,0x4d,0x8e,0x8e,0xa7,0x23,0x20,0xb2,0xbf,0x25,0x17,0x25,0xaa,0x95,0x9b,0xb7,0x35,0x24,0x3e,0x3a,0x29,0x2b,0x2b,0x20,0xe7 -,0x92,0x92,0xb3,0x2b,0x2f,0xae,0xa4,0x35,0x13,0x1d,0xab,0x98,0x96,0xa1,0x24,0x10,0x2c,0xa2,0xb6,0x35,0x1f,0x18,0xcb,0x97,0x9b,0xa1,0x2b,0x18,0xaf,0xa4,0x1f,0x1b -,0x5a,0xb9,0x97,0x8f,0xa8,0x1b,0x15,0x27,0x5b,0x2c,0x18,0x18,0xc8,0x8f,0x99,0xc2,0x2a,0x19,0x10,0x99,0x9c,0xc6,0x16,0x1c,0x88,0x80,0x11,0x10,0x80,0x5b,0xbb,0xbc -,0x00,0x0e,0x13,0x06,0x1c,0x42,0x01,0x00,0x02,0x00,0x07,0x01,0x03,0x0a,0x00,0x02,0x0c,0x06,0x02,0x09,0x00,0x1f,0xa9,0x22,0x0f,0x1a,0x8c,0x89,0x89,0xb4,0x84,0x80 -,0x84,0x82,0x84,0x80,0x80,0x80,0x82,0x80,0x82,0x83,0x89,0x87,0x81,0x80,0x81,0x80,0x89,0x97,0x83,0x80,0x88,0x8c,0xa9,0x3e,0x45,0x1b,0x02,0x46,0x8e,0x2b,0x16,0x01 -,0x05,0x0b,0x09,0x09,0x04,0x03,0x00,0x00,0x00,0x01,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x04,0x00,0x00,0x00,0x00,0x01,0x06,0x0a,0x0a,0x01,0x00,0x10,0xca -,0x93,0x9a,0x96,0x93,0x9b,0x39,0x99,0x80,0x82,0x80,0x85,0x85,0x80,0x80,0x82,0x82,0x80,0x80,0x80,0x81,0x82,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 -,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x82,0x84,0x82,0x81,0x88,0x94,0x99,0x88,0x91,0x15,0x03,0x35,0x96,0x2a,0x0a,0x02,0x13,0x1c,0x0a,0x02,0x01,0x01,0x00,0x00,0x00 -,0x02,0x01,0x00,0x00,0x00,0x01,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x01,0x00,0x00,0x00,0x06,0x0a,0x04,0x01,0x01,0x00,0x00,0x00,0x0a,0x28,0x0e -,0x03,0x03,0x08,0x0f,0x12,0x33,0x9e,0x9f,0x37,0x16,0x1c,0xab,0x85,0x82,0x84,0x8c,0xa3,0x95,0x86,0x80,0x80,0x83,0x86,0x84,0x83,0x87,0x83,0x80,0x80,0x80,0x83,0x85 -,0x81,0x80,0x81,0x80,0x80,0x80,0x85,0x93,0x89,0x80,0x80,0x80,0x82,0x85,0x83,0x81,0x82,0x86,0x83,0x82,0x88,0x90,0xa9,0x96,0x88,0x86,0x83,0x87,0x8c,0x89,0x89,0x8b -,0x8c,0x89,0x8b,0x99,0xcf,0x35,0x91,0x8c,0x9c,0xaf,0xa3,0x8d,0x85,0x8c,0x99,0x9b,0xa3,0x99,0xb4,0x2a,0xcb,0x9b,0xad,0x3e,0x2f,0x2a,0x25,0x1d,0x24,0x1c,0x0f,0x06 -,0x07,0x06,0x07,0x0d,0x09,0x04,0x01,0x00,0x01,0x05,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00 -,0x04,0x03,0x01,0x00,0x00,0x00,0x01,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x01,0x0d,0x1b,0x10,0x04,0x03,0x0a,0x18,0x39,0x36,0x28,0x1d,0x15,0x0c,0x24,0x8d,0x84,0x86 -,0x8c,0x8a,0x83,0x81,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 -,0x80,0x81,0x81,0x80,0x80,0x80,0x82,0x84,0x83,0x81,0x81,0x82,0x86,0x8a,0x8a,0x8c,0x93,0x9c,0xc1,0xc0,0xb5,0xd2,0xd3,0x40,0xf0,0x2d,0x15,0x0d,0x0d,0x0f,0x0b,0x05 -,0x02,0x01,0x01,0x00,0x00,0x01,0x04,0x05,0x01,0x00,0x01,0x03,0x05,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x01,0x01,0x04,0x06,0x09,0x08,0x06,0x02,0x01 -,0x01,0x02,0x0c,0x1a,0x1c,0x0c,0x04,0x05,0x10,0x3a,0xb3,0xb8,0x4f,0x20,0x0e,0x0f,0x2a,0xa0,0x90,0x96,0xd4,0x27,0x32,0xc9,0x97,0x8a,0x85,0x89,0x97,0xb3,0xa5,0x8d -,0x85,0x83,0x85,0x8c,0x96,0x97,0x8d,0x88,0x88,0x8c,0x8f,0x99,0xa3,0x99,0x8b,0x84,0x83,0x88,0x92,0x9b,0x9c,0x97,0x96,0x94,0x96,0xac,0x2c,0x1c,0xd2,0x94,0x8d,0x93 -,0xa6,0xeb,0x36,0x2d,0x25,0x31,0x4b,0x2c,0x17,0x0f,0x0e,0x11,0x1f,0x38,0x66,0x5f,0x4e,0x3e,0x2a,0x25,0x25,0x20,0x19,0x11,0x11,0x1a,0x23,0x23,0x1e,0x1f,0x3b,0xac -,0xa2,0xa9,0xaa,0xb2,0xdc,0x48,0x49,0xab,0x99,0x97,0x9b,0xa1,0xa0,0xa0,0x9e,0x93,0x8d,0x8d,0x91,0x9a,0x9f,0x95,0x8b,0x88,0x8a,0x8f,0x9b,0x9c,0x93,0x8e,0x8f,0x94 -,0x99,0x9e,0xb2,0xbc,0xa7,0x96,0x8e,0x98,0xcc,0x23,0x2a,0x5a,0xb6,0xac,0xe5,0x1e,0x0f,0x0b,0x11,0x30,0xa4,0x9c,0xa9,0x40,0x23,0x24,0x36,0xd1,0xc4,0x41,0x1d,0x0f -,0x0a,0x0f,0x34,0x9e,0x98,0xa4,0x66,0x38,0x4a,0xbf,0xad,0xab,0xbc,0x28,0x13,0x14,0x22,0x4a,0xce,0x51,0x3d,0x3a,0x33,0x39,0xb5,0x9f,0xa0,0xc9,0x1e,0x17,0x1d,0x35 -,0xd9,0xda,0x4a,0x2e,0x2b,0x33,0x5f,0xb2,0xab,0xb1,0x55,0x25,0x1d,0x28,0x4e,0xbe,0xb8,0xe2,0x56,0x47,0x2e,0x27,0x35,0xdd,0x63,0x3b,0x39,0x5b,0xaf,0xa4,0xac,0xcc -,0x49,0x3d,0x3c,0x3a,0x34,0x26,0x21,0x21,0x25,0x3d,0xb9,0xa5,0x9e,0xa4,0xba,0xd3,0xc3,0xae,0xa9,0xc7,0x37,0x23,0x18,0x18,0x20,0x41,0xb5,0xb0,0xbe,0xbf,0xae,0xa4 -,0xa2,0xab,0xc9,0x2f,0x1d,0x19,0x1f,0x2f,0x4a,0xef,0xea,0xc7,0xbd,0xbb,0xae,0xa8,0xad,0xcc,0x27,0x17,0x19,0x2c,0xcd,0xaf,0xc1,0x2f,0x27,0x2c,0x4c,0xb4,0xa8,0xa6 -,0xad,0x3f,0x23,0x25,0x3f,0xbf,0xbf,0x54,0x31,0x2d,0x27,0x2c,0x5e,0xb9,0xb2,0xd8,0x2f,0x2b,0x3a,0xca,0xae,0xab,0xbe,0x6c,0x5f,0x68,0x56,0x38,0x2b,0x25,0x25,0x20 -,0x22,0x3a,0xb1,0x9e,0x9d,0xa7,0xb5,0xcb,0x6e,0x59,0x63,0x5d,0x2b,0x1c,0x1c,0x28,0xda,0xa9,0x9f,0xa3,0xab,0xb6,0xcb,0xd3,0xce,0xe2,0x49,0x2e,0x23,0x23,0x2a,0x2c -,0x3e,0xc9,0xae,0xa4,0x9f,0x9d,0xa0,0xa3,0xaf,0x4c,0x26,0x1e,0x24,0x2f,0x2f,0x2a,0x30,0xe7,0xa9,0xa1,0xa4,0xa7,0xaa,0xb3,0x4c,0x2c,0x2f,0x55,0xc6,0xc4,0xbc,0xcf -,0x41,0x36,0x2e,0x42,0xca,0xc8,0x49,0x3a,0x44,0xc6,0xaa,0xa7,0xae,0xef,0x43,0x44,0x53,0x40,0x32,0x36,0x3e,0x48,0x3e,0x47,0xd5,0xbd,0xb6,0xb3,0xc1,0xdd,0xe4,0xc7 -,0xae,0xb1,0x54,0x24,0x1b,0x1f,0x2c,0x41,0xbc,0xa3,0x9d,0x9e,0xa3,0xb0,0xbd,0xca,0x4f,0x38,0x21,0x17,0x16,0x1d,0x2f,0xad,0x9e,0x9e,0xa4,0xbc,0xd7,0xbe,0xaf,0xb4 -,0x51,0x29,0x26,0x31,0x3e,0x3a,0x35,0x39,0x4c,0xed,0x5d,0xe2,0xb0,0xa1,0xa0,0xb9,0x3c,0x36,0x36,0x37,0x3b,0x3b,0x41,0x57,0x59,0xdd,0xb5,0xa9,0xa8,0xb2,0xe2,0x3d -,0x30,0x2b,0x2c,0x46,0xb9,0xa5,0xaa,0xd7,0x2c,0x26,0x3e,0x4c,0x3f,0x3c,0x59,0xd2,0xbc,0xa9,0x9e,0x9d,0xae,0x41,0x2a,0x29,0x28,0x21,0x1e,0x28,0x4e,0xce,0xc2,0xb4 -,0xac,0xa6,0xaa,0xc5,0xcf,0xc9,0xc5,0xbf,0x46,0x2b,0x23,0x21,0x23,0x26,0x2c,0x42,0xb3,0xa5,0xa3,0xa4,0xa8,0xaa,0xb5,0x4a,0x37,0x2e,0x27,0x21,0x1f,0x28,0xcd,0xa2 -,0xa2,0xab,0xc6,0xc1,0xb0,0xd1,0x2f,0x28,0x2f,0x3a,0x54,0xeb,0xcc,0xbf,0xe5,0x3b,0x2f,0x38,0xdc,0xbc,0xbd,0xb7,0xb5,0xbb,0xcc,0x5d,0x49,0xf2,0x5a,0x2c,0x1e,0x20 -,0x3d,0xb6,0xb8,0xcd,0xc1,0xb6,0xba,0x56,0x3d,0x5d,0xb9,0xb3,0xb1,0xb4,0xcd,0x49,0x2b,0x2d,0x52,0x4a,0x25,0x1d,0x25,0xcd,0x9b,0x98,0xa4,0xb5,0xda,0xce,0xbe,0x42 -,0x24,0x1c,0x21,0x2d,0x44,0xc2,0xa8,0xa0,0xa4,0xa9,0xda,0x3a,0x36,0x39,0xed,0xba,0xd3,0x31,0x26,0x28,0x3d,0xbe,0xbf,0x50,0x4d,0xbf,0xa2,0xa2,0xb6,0x4d,0x3c,0xbe -,0xb1,0x3a,0x19,0x16,0x24,0xc4,0xa3,0xac,0xbe,0xc4,0xbe,0xab,0xa7,0xb8,0x2e,0x21,0x26,0x4e,0xa8,0xa7,0xdc,0x2f,0x42,0xb9,0xc5,0x31,0x1f,0x29,0xb1,0xa6,0xb8,0xec -,0xbe,0xae,0xab,0xb7,0x36,0x22,0x1e,0x21,0x35,0xba,0xaf,0xbd,0xcb,0xb7,0xa9,0xac,0x40,0x23,0x2e,0xb4,0xa3,0xbd,0x2c,0x1f,0x2d,0xb3,0xa7,0x5e,0x1f,0x22,0xdd,0xa1 -,0x9a,0xa6,0xbe,0xc2,0xaf,0xa8,0xb7,0x2c,0x12,0x10,0x1f,0xcd,0xa9,0xab,0xfc,0xed,0xa1,0x9c,0xaa,0x3d,0x22,0x26,0xda,0xbb,0x4a,0x30,0x47,0xbb,0xad,0xc8,0x2d,0x2b -,0x41,0xd7,0xc6,0xd0,0x49,0x4c,0xaf,0x9c,0xa0,0xfa,0x1b,0x12,0x21,0xa8,0x9b,0xc3,0x22,0x1f,0xb2,0x92,0x9a,0x40,0x1e,0x28,0xe6,0xba,0xdc,0x3d,0x32,0x3f,0xb6,0xa5 -,0xad,0x47,0x1f,0x20,0x5f,0xa9,0xa8,0xc1,0x3f,0xf5,0xa6,0xa7,0xda,0x33,0x2b,0x3a,0x45,0x2a,0x1e,0x2f,0xbc,0xa4,0xa4,0xb1,0x5d,0x30,0x3c,0xb6,0xa5,0xa7,0xc4,0x27 -,0x1f,0x25,0x47,0xb9,0xbd,0xca,0xb3,0xb8,0x60,0x2d,0xe0,0xbe,0xac,0xb6,0xbe,0xdb,0x21,0x27,0x1e,0x2f,0xd9,0xae,0xa1,0xaa,0xac,0xc2,0xb3,0xb8,0x3a,0x60,0x34,0xc4 -,0x31,0x56,0x3d,0x25,0x3f,0x2c,0x4f,0xb8,0x9c,0xa7,0xa1,0x5d,0x2e,0x1e,0x29,0x49,0xdb,0xa9,0x4e,0xc1,0x26,0x35,0x4e,0xea,0xa9,0xb5,0xd5,0x59,0xd8,0x40,0x4f,0x4e -,0xb6,0xb3,0xd1,0x48,0x3d,0xbe,0xbc,0xc2,0x30,0x27,0x3f,0x3e,0xc2,0xac,0xaf,0xb4,0x4c,0x2c,0x2c,0x65,0xab,0xad,0xc2,0x53,0x37,0x2c,0x26,0x2b,0xdc,0xaa,0x9f,0xa1 -,0xb1,0xff,0x2c,0x29,0x2f,0x44,0x38,0x50,0x58,0x4e,0x4e,0x37,0x3d,0x41,0x46,0xaf,0x98,0x92,0x9a,0xd2,0x1f,0x15,0x1c,0x26,0xcc,0xbb,0xad,0xb2,0xcf,0x42,0x2a,0x3b -,0xf5,0x9e,0x9f,0xae,0xf3,0x1f,0x1b,0x25,0x63,0x9e,0xa3,0xb7,0x56,0x44,0xd1,0x75,0x3d,0x2d,0x35,0xbf,0xae,0xb1,0xb5,0xdf,0x48,0x28,0x28,0x37,0xba,0xaa,0xb9,0x5f -,0x3a,0x3c,0x33,0x36,0xb7,0x99,0x9a,0xdc,0x23,0x1f,0x1d,0x2a,0xd5,0xa5,0x9f,0xb3,0x3b,0x26,0x35,0xdf,0xc1,0xaf,0xa7,0xa7,0xb6,0x38,0x1d,0x1f,0x32,0x4d,0xb8,0xc4 -,0x54,0xce,0x3e,0x2a,0x34,0xd7,0xb0,0xa5,0x9d,0x9d,0xaf,0x2e,0x1b,0x17,0x23,0xc2,0x9e,0x9c,0xa8,0xd4,0x2d,0x2b,0x2e,0xfc,0xab,0x9f,0xab,0x3b,0x1f,0x15,0x1d,0x3e -,0xb5,0xa4,0xa4,0xb4,0xfb,0x3e,0x3a,0xce,0xbc,0xae,0xc8,0x3d,0x3b,0x5a,0x7a,0x37,0x44,0xe3,0xb7,0xef,0x39,0x48,0xca,0xbe,0x65,0x37,0x4a,0xce,0xc2,0xb5,0xb7,0xbb -,0x61,0x33,0x27,0x24,0x3c,0xb5,0xac,0xaf,0xbb,0xbe,0xd9,0x45,0x54,0xc4,0xac,0xa8,0xb3,0xc4,0x59,0x2f,0x25,0x1e,0x24,0x38,0xc6,0xb6,0xc0,0x5b,0x3d,0x54,0xef,0xcf -,0x5d,0x48,0x4b,0x3b,0x2b,0x2c,0x52,0xb6,0xa0,0x9d,0xa1,0xae,0xf9,0x49,0x70,0xb1,0xad,0xb7,0xbc,0xda,0x3a,0x27,0x2b,0x3d,0xed,0xcd,0xc3,0xe8,0x3d,0x3c,0x2d,0x33 -,0x2f,0x2c,0x2d,0x37,0x4c,0xdc,0xbb,0xb9,0xb4,0xb7,0xb9,0xb9,0xbb,0xba,0xba,0xda,0x47,0x53,0xb6,0xad,0xb7,0x53,0x3e,0x30,0x30,0x36,0x3e,0xb8,0xb2,0x59,0x2f,0x32 -,0x2f,0x36,0x42,0xd8,0xb8,0xb5,0x77,0xed,0xc9,0xca,0xc6,0xea,0x4a,0x3a,0xc6,0xb3,0xa6,0xa2,0xa2,0xb2,0x3b,0x2c,0x28,0x2d,0x3c,0xd8,0x3d,0x2f,0x31,0x36,0x46,0xbb -,0xa8,0xaf,0xbb,0xdc,0x48,0x34,0x38,0x5c,0x6f,0x49,0x48,0x4e,0x5a,0x52,0x70,0xb1,0xad,0xb7,0xc8,0xef,0x6e,0xbe,0xbd,0x4a,0x3c,0x45,0x37,0x3c,0xda,0xb8,0xb7,0xd1 -,0x4a,0x44,0x37,0x33,0x5d,0x4a,0x4d,0xc7,0xbc,0xcf,0xbb,0xc0,0x3e,0x37,0x56,0xbf,0xb8,0xc1,0xef,0x62,0x34,0x2e,0x33,0x37,0xf3,0xa9,0xa1,0xb6,0x44,0x2f,0x25,0x2c -,0x4d,0xbc,0xaf,0xb9,0xcc,0xd1,0xe3,0xcf,0xad,0xa6,0xa4,0xad,0xdb,0x28,0x21,0x27,0x2a,0x45,0xb2,0xa8,0xaf,0xde,0x3c,0x39,0x37,0x48,0xc9,0xcb,0xec,0xd3,0x56,0x31 -,0x2d,0x31,0x3c,0xc8,0xa9,0xa5,0xac,0xbd,0xd9,0x4a,0x3b,0x40,0x3d,0x3d,0x48,0x45,0x49,0x4d,0xd2,0xc3,0x42,0x37,0x5c,0xbb,0xf3,0x3b,0x3b,0x38,0x4e,0x4b,0x5f,0xbc -,0xaa,0xa3,0xa3,0xb9,0x4e,0x57,0x6b,0xe8,0xbd,0xae,0xbc,0x48,0x28,0x25,0x2f,0xdf,0xad,0xac,0xc1,0x4c,0x2d,0x20,0x22,0x30,0xe7,0xb9,0xb3,0xb6,0xc0,0xd6,0xbf,0xae -,0xae,0xae,0xb3,0x5d,0x32,0x2b,0x2a,0x37,0x71,0xee,0x4a,0x53,0xdb,0xc5,0xd5,0xe7,0xd2,0x5d,0x47,0x3f,0x3d,0x42,0x55,0xe0,0xce,0xbf,0xb0,0xa8,0xac,0xbc,0xc4,0xc2 -,0xca,0x4f,0x33,0x2f,0x2d,0x29,0x2a,0x2e,0x3c,0xce,0xad,0xa9,0xb3,0xc9,0x59,0x3b,0x32,0x34,0x61,0xbe,0xc2,0x68,0x42,0x4c,0xd7,0xb9,0xb0,0xab,0xa6,0xb3,0x43,0x31 -,0x2d,0x31,0x4a,0xd5,0xbd,0xb8,0xeb,0x3b,0x38,0x3e,0xd5,0xbf,0xef,0x3c,0x33,0x34,0x4a,0xc5,0xb6,0xae,0xa8,0xa9,0xb5,0xd3,0xcc,0xbe,0xdc,0x41,0x32,0x27,0x1f,0x20 -,0x2a,0x53,0xb6,0xad,0xb4,0x47,0x2c,0x3e,0xcd,0xb9,0xba,0xee,0x4b,0x3c,0x37,0x3f,0xc9,0xa6,0x9f,0xa0,0xa4,0xa9,0xb3,0x4d,0x2b,0x27,0x26,0x2e,0x36,0x2d,0x2d,0x54 -,0xc2,0xc2,0xd3,0xdf,0xc0,0xbf,0x69,0x5a,0xe7,0x47,0x30,0x34,0x7d,0xb1,0xa7,0xa8,0xae,0xc5,0xc3,0xb4,0xcd,0x3e,0x2e,0x27,0x2e,0x45,0x57,0x4e,0x42,0x50,0xcf,0xc6 -,0xb7,0xac,0xb6,0x66,0x5b,0xdd,0x46,0x2d,0x2a,0x3b,0xb8,0xa3,0x9d,0xa4,0xc4,0x4b,0x35,0x2c,0x3f,0x55,0x37,0x2f,0x2c,0x27,0x24,0x2d,0xd2,0xaa,0xa1,0x9c,0xa3,0x4d -,0x24,0x27,0x3e,0xc8,0xb2,0xbb,0x53,0x3d,0x5c,0xbb,0xae,0xa6,0xa0,0xb4,0x2d,0x1f,0x1e,0x24,0x2b,0x2f,0x4f,0xb9,0xae,0xaf,0xbb,0xaf,0xa1,0xa4,0xbf,0x40,0x2f,0x2a -,0x2b,0x35,0x44,0x5a,0xc7,0xc7,0xca,0xb1,0xa3,0xa1,0xb4,0x3e,0x30,0x31,0x32,0x32,0x2b,0x25,0x2c,0x5b,0xb8,0xae,0xac,0xad,0xbe,0x7e,0x56,0x4b,0x40,0x35,0x31,0x3a -,0x68,0xb4,0xaa,0xa9,0xa7,0xa3,0xa7,0xef,0x25,0x1c,0x1f,0x2c,0x35,0x3b,0x3a,0x39,0x3c,0x56,0xad,0x9a,0x97,0x9f,0xc1,0x35,0x29,0x27,0x2a,0x2d,0x36,0xcb,0xa7,0xa8 -,0xb8,0xbe,0xb0,0xae,0xbf,0x4a,0x31,0x24,0x1b,0x19,0x1e,0x33,0xae,0x9d,0x9d,0x9f,0xa1,0xa8,0xcc,0x3b,0x47,0xe0,0x54,0x2f,0x1d,0x1a,0x29,0xc3,0xa7,0x9f,0x9d,0xa1 -,0xbd,0x42,0x36,0x34,0x3b,0x34,0x26,0x1c,0x1f,0x40,0xb5,0xa4,0x99,0x96,0x9d,0xba,0x32,0x25,0x2a,0x2e,0x29,0x1f,0x20,0x41,0xba,0xb0,0xa4,0x9a,0x99,0xa7,0x4a,0x28 -,0x23,0x26,0x2a,0x28,0x24,0x33,0xfd,0xb5,0xa6,0xa1,0x9f,0xa6,0xbb,0x43,0x3a,0x4f,0x35,0x1e,0x1a,0x28,0xbd,0xa4,0xa4,0xa6,0xa6,0xab,0xbd,0x42,0x2a,0x2d,0x3a,0x3b -,0x30,0x2a,0x37,0xcd,0xaf,0x9f,0x95,0x93,0x9f,0x3b,0x1d,0x1f,0x2f,0x31,0x20,0x19,0x1d,0x2d,0xef,0xac,0x9e,0x97,0x98,0xa2,0xbb,0x3b,0x2a,0x28,0x27,0x27,0x29,0x2f -,0x4d,0xcf,0xb8,0xa5,0x9d,0xa1,0xba,0x36,0x26,0x27,0x26,0x1f,0x25,0x4d,0xac,0xa3,0xa6,0xa9,0xa7,0xa7,0xad,0xc4,0x46,0x41,0x3a,0x1f,0x14,0x17,0x33,0xb2,0xa4,0x9e -,0x9d,0xa8,0x5e,0x2f,0x31,0x4f,0xc8,0x65,0x2a,0x1e,0x27,0x7d,0xb2,0xa9,0x9d,0x98,0x9c,0xaf,0x2f,0x1f,0x25,0x2f,0x2c,0x1f,0x1e,0x33,0xbf,0xa5,0x9c,0x9b,0x9d,0xab -,0xd9,0x43,0x42,0x45,0x28,0x15,0x11,0x1d,0x4a,0xb0,0xa4,0x9c,0x95,0x96,0x9f,0xcd,0x2a,0x25,0x2c,0x26,0x1c,0x1d,0x2a,0x4e,0xb6,0xa4,0x9f,0xa3,0xae,0xcd,0x6d,0xd4 -,0x68,0x2e,0x1a,0x15,0x27,0xb9,0xa2,0x9d,0x9d,0x9d,0xa1,0xbe,0x2f,0x28,0x35,0x41,0x2c,0x1d,0x1c,0x26,0x3f,0xaf,0x9c,0x98,0x98,0x9e,0xb7,0x37,0x2f,0x3c,0x2d,0x1c -,0x19,0x26,0x3f,0xc6,0xa6,0x9a,0x96,0x98,0xa3,0xdd,0x2e,0x28,0x21,0x19,0x14,0x1a,0x2e,0xe1,0xac,0xa3,0x9f,0x9c,0x9b,0xa0,0xb5,0x64,0x32,0x1e,0x13,0x12,0x1d,0x43 -,0xaa,0x9d,0x9c,0x9c,0x9e,0xad,0x58,0x43,0xc8,0xf4,0x23,0x14,0x12,0x1c,0x67,0xa4,0x9f,0xa1,0xa2,0xab,0xcb,0x4e,0xd4,0xbd,0x3c,0x1c,0x19,0x24,0x31,0xc2,0x9e,0x98 -,0x95,0x97,0xa1,0xd6,0x2f,0x2e,0x2a,0x1b,0x11,0x11,0x19,0x39,0xa8,0x9e,0x9a,0x96,0x98,0x9e,0xaa,0xae,0xbf,0x2e,0x18,0x13,0x14,0x1e,0x4d,0xb5,0xae,0xa0,0x9b,0xa2 -,0xb6,0x73,0x6f,0x34,0x1d,0x18,0x19,0x20,0xc6,0x9f,0x9f,0x9f,0x9f,0xa0,0xaa,0xb5,0xac,0xb5,0x2e,0x16,0x0e,0x12,0x23,0xd5,0xab,0x9f,0x9b,0x9d,0xaa,0xd4,0x70,0xcb -,0x41,0x20,0x17,0x18,0x25,0x5f,0xb1,0xa8,0x9e,0x9a,0x9c,0xa4,0xaa,0xb2,0x49,0x22,0x1a,0x17,0x18,0x21,0xc7,0xbd,0xbd,0x9e,0x99,0xa4,0xa1,0xaa,0xac,0xbc,0x1b,0x17 -,0x1d,0x29,0x28,0xad,0xae,0xd0,0x9a,0x94,0xc0,0x15,0x48,0xa7,0xdf,0x28,0x26,0x55,0xc8,0xb1,0x53,0xc2,0x2f,0x1c,0x91,0x80,0x57,0x00,0x83,0x86,0xc4,0x8d,0x19,0x20 -,0x0c,0x10,0x0c,0x14,0x0d,0x00,0x09,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0x04,0x02,0x04,0x03,0x07,0x0c,0x0d,0x1f,0x23,0xd6,0x95,0x88,0x89,0x8f,0x8a,0x80,0x82,0x87 -,0x82,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x83,0x89,0x84,0x88,0x8a,0x8c,0x91,0x9c,0x9c,0xad,0xa9,0x34,0x0e,0x14,0x0a,0x0f,0x08,0x03 -,0x03,0x02,0x02,0x01,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x00,0x04,0x04,0x09,0x0f,0x16,0x20,0x1d -,0xd0,0x9e,0x97,0x8a,0x8a,0x89,0x82,0x82,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 -,0x80,0x80,0x81,0x80,0x80,0x81,0x82,0x81,0x84,0x87,0x84,0x8d,0x8c,0x98,0x9a,0xa4,0xcc,0x33,0x15,0x13,0x0c,0x06,0x04,0x05,0x02,0x04,0x00,0x01,0x01,0x00,0x00,0x00 -,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x02,0x02,0x02,0x04,0x05,0x06,0x06,0x09,0x0a -,0x0b,0x0f,0x14,0x17,0x1d,0x27,0x3a,0xc4,0xb6,0x9c,0x91,0x8d,0x8f,0x8d,0x8a,0x87,0x84,0x84,0x83,0x83,0x83,0x82,0x81,0x81,0x81,0x81,0x80,0x81,0x81,0x80,0x80,0x80 -,0x81,0x81,0x81,0x81,0x80,0x80,0x81,0x81,0x82,0x81,0x81,0x82,0x82,0x82,0x82,0x84,0x83,0x84,0x85,0x84,0x84,0x86,0x88,0x8a,0x88,0x87,0x8a,0x8c,0x8c,0x8d,0x8c,0x8a -,0x8f,0x8d,0x8d,0x88,0x8c,0x90,0x93,0x94,0x8b,0x90,0x8f,0x92,0x91,0x91,0x95,0x98,0x96,0x98,0x9b,0x9e,0xd8,0xbc,0xbc,0xac,0xb6,0x31,0x1c,0x18,0x16,0x0e,0x0e,0x08 -,0x06,0x05,0x04,0x03,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x01,0x01,0x03,0x06,0x08,0x09,0x0a,0x0e,0x13,0x15,0x1d,0x32,0xc8,0xa5,0x9c,0x95,0x8c,0x86,0x82 -,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 -,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x83,0x83,0x84,0x86,0x88,0x89,0x8b,0x93,0x9b,0x9f,0xa9,0xaf,0x65,0x32,0x21,0x18,0x12,0x0f,0x0c,0x06,0x04,0x05,0x04,0x03,0x02 -,0x01,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x01,0x03,0x04,0x03,0x03,0x04,0x06 -,0x07,0x07,0x09,0x0b,0x0d,0x10,0x15,0x17,0x13,0x15,0x21,0x2a,0x2d,0x4a,0xc5,0xbc,0xb0,0xa5,0xa1,0xa0,0xa0,0x9d,0x95,0x95,0x92,0x8c,0x8c,0x8c,0x8e,0x8c,0x89,0x8a -,0x8b,0x8a,0x8c,0x8d,0x8a,0x87,0x88,0x8c,0x8b,0x89,0x8b,0x8d,0x8d,0x8c,0x8d,0x8e,0x8f,0x8e,0x92,0x93,0x91,0x98,0xad,0xa0,0x96,0x9e,0xaf,0xb5,0xac,0xb6,0xc9,0xba -,0xbf,0x3e,0x2d,0x39,0x57,0x29,0x27,0x43,0x3f,0x23,0x1d,0x23,0x25,0x1f,0x1e,0x1f,0x1a,0x19,0x23,0x2f,0x23,0x1e,0x26,0x30,0x29,0x23,0x2a,0x2e,0x23,0x2b,0xc5,0xe6 -,0x4f,0xef,0xae,0xb0,0x58,0xa9,0x99,0x9d,0xa1,0x9e,0x93,0x92,0x99,0x95,0x91,0x95,0x98,0x8e,0x8e,0x95,0x90,0x8c,0x8d,0x92,0x92,0x8e,0x8f,0x95,0x91,0x90,0x99,0x9c -,0x96,0x93,0xa2,0xeb,0xaf,0xa4,0xcd,0x4b,0xcb,0xcb,0x2d,0x29,0x53,0x31,0x22,0x29,0x32,0x2b,0x1d,0x22,0x2d,0x28,0x21,0x2f,0x5a,0x2a,0x24,0x2d,0x34,0x22,0x27,0xdb -,0x48,0x21,0x26,0x4a,0x44,0x2d,0x30,0x4e,0x2f,0x23,0x34,0xc8,0x55,0x2c,0x3e,0xdf,0x2f,0x1f,0x3f,0xc9,0x2e,0x26,0x3b,0x4a,0x31,0x46,0xcb,0x45,0x2e,0x32,0x7a,0x42 -,0x2a,0x3c,0x78,0x30,0x23,0x45,0xbb,0x36,0x31,0x45,0x32,0x27,0x3e,0xb8,0xcf,0x2e,0x2c,0xe6,0x76,0x3d,0x36,0x47,0x35,0x2b,0xe0,0xb7,0x4c,0x2c,0x52,0xbf,0x66,0x3f -,0xee,0x49,0x2f,0x43,0xc9,0xd6,0x3b,0x4f,0xbd,0x59,0x2c,0x2e,0xdd,0xed,0x36,0xc7,0xbf,0x3a,0x29,0x5e,0xb5,0x63,0x47,0x59,0x61,0x2f,0x49,0xb8,0xbb,0x31,0x28,0xca -,0xc6,0x3b,0x35,0x5d,0x36,0x32,0xc5,0xd0,0x32,0x32,0xdf,0xbe,0x45,0x2d,0x3b,0x3f,0x33,0x45,0xaf,0xbc,0x2b,0x34,0xc4,0x52,0x3a,0x43,0x5b,0x39,0x31,0xeb,0xb8,0xc0 -,0x3c,0x45,0xf4,0x42,0x36,0x49,0xe2,0x3f,0x44,0xdd,0xbe,0x3e,0x39,0xc3,0x67,0x43,0x3d,0xdd,0x5f,0x43,0xbe,0xb8,0x6f,0x38,0x48,0xc8,0x7c,0x36,0xce,0xce,0x3a,0x47 -,0xb8,0xb7,0x33,0x51,0xb6,0xc9,0x50,0x43,0x46,0x43,0x38,0x69,0xad,0xb1,0x59,0x38,0x38,0x38,0xd3,0xaf,0xc3,0x3a,0x3f,0xfe,0xb7,0xbf,0xcf,0xcb,0x3d,0x3e,0x34,0x4e -,0x63,0x4c,0xdd,0xbc,0xeb,0x37,0x44,0xd6,0xbd,0xdf,0xbe,0xef,0x4b,0x46,0xcf,0xbe,0x38,0x3e,0x49,0x7d,0x63,0x39,0x3e,0x58,0x63,0xbd,0xb2,0xd1,0x30,0x38,0xcc,0x59 -,0x52,0xc1,0x4a,0x2f,0x4f,0xcc,0xae,0xcd,0x50,0xe5,0x39,0x3b,0x45,0xbf,0xd5,0x43,0xcb,0xc5,0xd7,0x58,0x39,0x4c,0xc3,0xeb,0x60,0x43,0xf9,0xbb,0xd0,0x4d,0x33,0xf1 -,0xc7,0x7e,0x41,0x2c,0x55,0xae,0xb2,0xbf,0xc6,0x48,0x3c,0x44,0xc6,0xc6,0xe4,0xc3,0x4e,0x37,0x56,0xba,0xb8,0x4f,0x35,0x7e,0xcd,0xfa,0x3d,0x42,0x47,0x53,0xb3,0xb3 -,0xc9,0x48,0x3d,0x4d,0x59,0x4d,0xda,0xe2,0xc4,0xd0,0xc7,0xbd,0x44,0xc2,0xd0,0x52,0x5e,0x44,0x3d,0xe3,0xbd,0xd3,0x5e,0x35,0x39,0x6c,0xbd,0xe6,0x53,0x64,0x3f,0xbb -,0xad,0xdc,0x55,0x49,0x4c,0x46,0x48,0xdf,0xeb,0xbb,0x4b,0x31,0xc9,0xad,0xb7,0x42,0x27,0x43,0xae,0xc5,0xdb,0x3b,0x3a,0xce,0xac,0xae,0x48,0xdf,0xe7,0x2f,0x28,0x36 -,0xdd,0xc0,0xc3,0x4a,0xd8,0xc7,0xb8,0xb3,0x45,0x2d,0xcb,0xa6,0x6b,0x5e,0xce,0x47,0x3d,0x36,0x5f,0x63,0x49,0x69,0xfa,0x5c,0x73,0xb9,0xa7,0xab,0x68,0x34,0x2f,0x35 -,0xbf,0xc0,0x4d,0x35,0x2e,0x4b,0xa7,0xa0,0x51,0x3d,0x2d,0x5e,0xb5,0x52,0x3c,0x2e,0x38,0xe8,0xad,0xbc,0xd7,0xfe,0xbf,0x75,0x39,0xc9,0x47,0xc7,0xbb,0x36,0x3b,0xc2 -,0xb1,0xf8,0x33,0x2b,0xeb,0xa9,0xd7,0xf7,0xb4,0xc0,0x34,0x2a,0x32,0xc3,0xad,0xbd,0x50,0x22,0x42,0xa5,0xa2,0xbd,0x26,0x4c,0xae,0xb0,0xc1,0x2f,0x23,0x2e,0xee,0xdd -,0xb1,0xc4,0xd1,0x73,0x39,0xc6,0xb3,0xaf,0x40,0x3c,0x2d,0x35,0xc2,0xaf,0xb2,0x3a,0x39,0x27,0x2c,0xbd,0xaf,0xd9,0xd4,0x60,0x4c,0xac,0xac,0x4d,0x2f,0x3e,0xb2,0xaf -,0x67,0x79,0xc6,0xe2,0x2e,0xd6,0xbf,0x3d,0x29,0x35,0x46,0x35,0xb3,0xac,0xbc,0x30,0x40,0xb7,0xa7,0xb2,0xd7,0xc7,0x3c,0x4d,0x27,0x21,0xba,0x9b,0xac,0x2a,0x1d,0x32 -,0xa5,0x9d,0xc3,0x29,0x2e,0xc5,0xab,0xae,0x38,0x22,0x3a,0x3e,0xb5,0xb8,0x31,0x2e,0xb9,0xbc,0x3e,0xac,0xac,0x42,0x21,0x35,0xba,0xb3,0xda,0xd5,0xd5,0x29,0x42,0xc6 -,0xb8,0xc6,0x3c,0xb4,0xb7,0x3b,0x3e,0xcd,0x4b,0x3e,0x6d,0x59,0xc2,0xba,0xae,0x51,0x29,0x27,0x4c,0xab,0xb6,0x64,0x2a,0x38,0xae,0x9c,0x9c,0x3e,0x1a,0x22,0xbd,0xa6 -,0xbc,0xd9,0x2d,0x3f,0xd6,0xca,0xce,0x51,0x4c,0x72,0xbe,0x22,0x2d,0xb3,0x9c,0xb2,0x5d,0xaf,0xdc,0x38,0x1e,0x38,0x3c,0x47,0xd0,0xdb,0xdc,0x3e,0xbf,0xa3,0xcd,0x20 -,0xc2,0xa9,0x3d,0x1f,0x22,0xb7,0x99,0x9c,0xa9,0x2a,0x1d,0x4c,0xb6,0x4a,0x28,0x36,0x5c,0xb1,0xbb,0x7a,0x3e,0x37,0x48,0xaf,0xad,0x2e,0x31,0x5a,0xa6,0xa9,0xba,0xcb -,0x35,0x29,0x2b,0xbb,0xdc,0x3f,0x38,0xbf,0xa8,0xc4,0xc2,0xb7,0x42,0x2f,0xb2,0xa5,0x43,0x1a,0x1a,0xd6,0x9a,0x9c,0xbd,0x24,0x19,0x22,0xa3,0xa6,0x34,0x28,0xaa,0x9d -,0xbf,0x33,0x26,0x28,0x4b,0xae,0xd7,0x23,0x1e,0xaf,0x96,0x9b,0xb2,0x57,0x38,0x2e,0x1c,0x65,0x2c,0x3d,0xbf,0xa4,0x9e,0x35,0x4c,0x29,0x22,0x31,0x99,0xb3,0x30,0x1f -,0x27,0x9e,0x8e,0x9d,0x48,0x36,0x1d,0xb0,0x9a,0xb9,0x1c,0x12,0x59,0x9a,0xa8,0x28,0x36,0xb8,0xc9,0xad,0x57,0x36,0x2b,0x72,0x99,0xa5,0x47,0x20,0x39,0x3d,0xcf,0x40 -,0x1b,0x2d,0xbc,0x99,0xba,0x32,0x1f,0x3a,0xbd,0xaa,0x9e,0xcd,0x2d,0x1e,0x3d,0x9c,0x9a,0x41,0x29,0x1f,0x3c,0xca,0x9c,0xb9,0x1d,0x34,0xae,0x97,0x5b,0x12,0x14,0xbc -,0x94,0x9c,0xbe,0x2c,0x21,0xbe,0xa0,0xc8,0x2f,0x29,0xc1,0xc0,0x34,0x2f,0xe1,0x9e,0xa1,0xae,0x3c,0x1d,0x28,0xac,0x9f,0x5d,0x29,0xca,0xbb,0x34,0x7e,0xab,0xb3,0x23 -,0x1c,0xcd,0xd1,0xc3,0x55,0x28,0xf3,0xce,0xaa,0xa9,0x2a,0x16,0x22,0xa6,0x9a,0x9a,0xc7,0x1b,0x27,0xdb,0xa1,0xad,0x33,0x1f,0xb9,0xa3,0x68,0x36,0xb8,0x9c,0xca,0x24 -,0x21,0x1c,0x1f,0xaa,0xa6,0xbe,0x3b,0xb1,0x9a,0xb8,0x37,0x2d,0x3f,0xb9,0x3f,0xa3,0xac,0x2b,0x3d,0x43,0xbe,0xc7,0xb7,0x39,0x1a,0x13,0x32,0x9e,0x8e,0x97,0x7a,0x2b -,0x2e,0xa7,0xab,0x2d,0x11,0x14,0xaf,0xa7,0x44,0x37,0xb0,0x9a,0xe2,0x2d,0x28,0x2b,0x67,0xf1,0xb9,0xac,0x9f,0xb2,0xa9,0x47,0x1a,0x26,0x70,0xde,0x4a,0x4e,0x31,0xb2 -,0xbf,0xad,0x9e,0xb7,0x2e,0x22,0x34,0x31,0x2e,0xa5,0x9a,0xb4,0x3c,0x5f,0xd9,0x36,0x3e,0x27,0x31,0x48,0x9a,0x96,0x33,0x1a,0x3e,0x9c,0xac,0x29,0x22,0x2e,0x28,0x5d -,0xbb,0x9c,0x9c,0xad,0xb8,0x17,0x17,0x29,0xad,0x9c,0x70,0x36,0x45,0xb2,0xa8,0x43,0xbc,0x33,0x19,0x38,0x42,0x40,0xdb,0xa8,0x96,0xaf,0x24,0x2f,0x47,0xba,0x3e,0x3b -,0xbd,0xcb,0xb3,0xb1,0x76,0x20,0xdb,0xa0,0x34,0x2e,0x1d,0x2d,0xa6,0xb7,0xbb,0xba,0xba,0x78,0xca,0x5a,0x4e,0xe3,0xa4,0xbe,0x40,0x28,0x45,0xb0,0x3a,0xb1,0x2a,0x28 -,0x30,0xd8,0x9b,0xca,0x26,0x51,0xb3,0xa2,0x48,0x3a,0xd2,0x2b,0x4f,0xc1,0x9f,0xca,0x2d,0x1f,0x1f,0x2b,0x69,0xba,0xa2,0xbe,0x43,0x9e,0xb7,0xaf,0x26,0xbe,0x6a,0x21 -,0xba,0x29,0x3f,0xd6,0xa0,0x9d,0x36,0x19,0x22,0x33,0xa7,0xa5,0xb8,0xbb,0x45,0x9f,0xad,0x31,0x19,0x28,0xa7,0x3e,0x2c,0x3d,0x38,0x9c,0x9f,0xac,0xa9,0x36,0x2f,0x1b -,0xd9,0xbe,0x3f,0xb5,0xac,0x67,0x23,0x3c,0x2e,0x24,0x29,0xac,0xac,0xb5,0x3a,0xb9,0x9f,0xc0,0xac,0xfc,0x2f,0x17,0x31,0xa8,0xbc,0xd8,0xaf,0xb6,0xc4,0xb7,0xcf,0x21 -,0x15,0x60,0xb2,0xa8,0xb4,0x4b,0x3d,0xb0,0xa4,0xbc,0x3e,0x1d,0x1d,0x6b,0xa6,0xb4,0xa8,0x6d,0xe3,0x5e,0x31,0x48,0x2a,0x34,0x29,0xf9,0x9c,0xa2,0xc2,0xbb,0xac,0x3b -,0x21,0x61,0x2b,0x1e,0x4f,0xbc,0x9b,0xbb,0x46,0xa7,0xab,0xc1,0x1c,0x1b,0x39,0x42,0xa0,0x9f,0x44,0x34,0x4d,0xb1,0x4c,0xf1,0xba,0x24,0x3d,0x4b,0xee,0xb3,0xc9,0xd4 -,0x44,0xbc,0xbb,0x6f,0x3f,0x1f,0x30,0xa1,0xac,0xc1,0x44,0x42,0xed,0xe4,0xbb,0x31,0x3e,0x65,0x33,0x63,0xa0,0xa7,0x41,0xbf,0xa6,0x25,0x1f,0x59,0x40,0xb3,0xba,0xbc -,0x37,0x1d,0x56,0xa6,0xa5,0xca,0x2c,0xd8,0xc7,0x44,0xb9,0xd9,0x35,0x2a,0xb8,0xb5,0x4a,0xd0,0x1d,0x2c,0xa4,0xa4,0xc9,0x30,0xd9,0x26,0x33,0x9b,0xa2,0xd1,0x2f,0x2f -,0x39,0xd4,0xa9,0x57,0x37,0xaf,0xb8,0xcf,0x26,0x27,0xdb,0x60,0xb5,0x5f,0xd6,0x31,0x2d,0x94,0xa4,0x38,0x2a,0x2c,0x34,0x3a,0xa4,0xba,0x33,0x33,0xdf,0xb0,0xa7,0x3c -,0x18,0x3c,0x97,0x9d,0x37,0x38,0x1d,0x1e,0xbf,0x99,0x92,0xcd,0x21,0x20,0x20,0xd6,0xbe,0xb4,0xcc,0x2d,0xad,0xa2,0x50,0x2e,0x2e,0x3d,0x41,0xcf,0xaf,0x28,0xcd,0xaa -,0xac,0xa7,0x3c,0x43,0x1d,0x2b,0xce,0x41,0x9f,0xa4,0xbc,0xb6,0x2b,0x24,0x29,0xa6,0x9d,0x2e,0x1d,0x16,0x2e,0xb0,0x95,0x8e,0xaa,0x1c,0x10,0x32,0xa9,0xca,0xb3,0xaf -,0xe8,0x5d,0xb6,0xa7,0x28,0x1c,0x41,0xaf,0xad,0x26,0x1f,0x40,0xca,0xac,0xa2,0x9a,0x61,0x1b,0x23,0x2f,0x3f,0xe0,0xad,0x9f,0x9f,0xaa,0x4a,0x14,0x1d,0xbb,0xae,0xb4 -,0x23,0x27,0xb7,0xa3,0x8f,0x9a,0x3b,0x0c,0x0c,0xb2,0x9e,0x9d,0x5d,0x2b,0x58,0x39,0xa1,0xa8,0x2f,0x1f,0x19,0x9d,0xa2,0x22,0x2f,0x39,0xa0,0xaa,0x95,0x9a,0x16,0x12 -,0x19,0xc0,0xac,0x6f,0xa3,0xb4,0xb4,0xbc,0x35,0x38,0x1f,0xc2,0xa0,0xd1,0x2a,0x1b,0xe6,0xab,0xa1,0x96,0xb7,0x1e,0x17,0x2b,0xbb,0xd0,0x36,0x45,0x9e,0x98,0xb1,0x3b -,0x18,0x10,0xe5,0x90,0x9b,0x23,0x15,0x2c,0x64,0xa0,0x8e,0xb3,0x19,0x12,0x2c,0x95,0x9f,0x4f,0x1d,0x37,0xb6,0xbc,0x95,0xad,0x34,0x36,0x3c,0xe5,0x15,0x16,0xfc,0xa1 -,0x8f,0x9f,0xac,0x39,0x16,0x2b,0x55,0xaf,0x2d,0x21,0xa7,0xbd,0xaa,0xa2,0x3b,0x3c,0x55,0xa8,0x23,0x0e,0x1a,0x2c,0x90,0x8b,0x8f,0xbf,0x0d,0x16,0x60,0x93,0xa1,0x13 -,0x17,0xcd,0xa3,0x9c,0xa4,0x3e,0x1e,0x25,0xb8,0xa9,0x69,0x15,0x18,0xaa,0x97,0x8f,0x9f,0x37,0x22,0x1d,0x6d,0x3f,0x1b,0x29,0xb1,0x97,0x98,0xb5,0x35,0x2f,0x6b,0x36 -,0x25,0x2b,0x1a,0x3f,0x96,0x90,0x92,0x50,0x1e,0x16,0x3c,0x95,0x31,0x0e,0x0e,0xb2,0x89,0x8d,0x9d,0x17,0x15,0x6b,0xae,0x9c,0x2c,0x0c,0x1b,0xb4,0x8e,0x8d,0x9d,0x1e -,0x09,0x1c,0x7c,0x9f,0xa8,0x1e,0x34,0xb0,0x93,0x96,0x42,0xc4,0x21,0x1c,0x4d,0x21,0x0e,0x17,0x92,0x86,0x8e,0xae,0x1d,0x1b,0x20,0x1d,0x31,0x2e,0x27,0xac,0x97,0x8d -,0xa3,0x39,0x37,0x20,0x55,0xba,0x1c,0x0c,0x1c,0x9f,0x8d,0x89,0x9e,0x0f,0x13,0x35,0xb9,0xa5,0x29,0x17,0x40,0x9d,0x9b,0xa3,0xa7,0x3e,0x0f,0x14,0xc8,0xa1,0x37,0x1f -,0xb9,0x91,0x87,0xaf,0x18,0x1e,0x19,0x1f,0x5c,0x46,0x24,0xaf,0x91,0x97,0xa4,0xcf,0xdf,0x61,0x1a,0x12,0x0f,0x1a,0xb2,0x9c,0x8b,0x8b,0xa7,0x4a,0x1c,0x0f,0x24,0xab -,0x2a,0x0d,0x4c,0x99,0x90,0x8f,0x49,0x1e,0x19,0x30,0xb5,0x3b,0x20,0x27,0x9f,0x8a,0x90,0xbb,0x34,0x18,0x0f,0x19,0x4a,0x35,0x32,0xb4,0xba,0x92,0x8e,0xad,0xc3,0x31 -,0x1a,0x19,0x17,0x16,0x28,0x91,0x83,0x90,0x2f,0x1c,0x34,0x32,0x24,0x1f,0x0f,0x1b,0xc0,0x9f,0x89,0x8e,0xae,0x37,0x19,0x1c,0x54,0xb5,0x19,0x14,0xa9,0x8c,0x8e,0xaa -,0x1f,0x10,0x20,0xa0,0xb6,0x1d,0x2f,0xdb,0x95,0x8f,0xd9,0x29,0x4c,0x20,0x0f,0x28,0x2d,0x28,0xbc,0x98,0x8e,0x8e,0xab,0x2a,0x4b,0x44,0x1d,0x13,0x1e,0x1b,0x34,0x98 -,0x8c,0x98,0x40,0x31,0x2a,0xc3,0x73,0x13,0x0c,0x2c,0x91,0x85,0x8a,0xbc,0x23,0x17,0x18,0x2a,0xed,0x1e,0x10,0x3c,0x90,0x8c,0xa7,0xe2,0x3f,0x1a,0x36,0xbb,0x1d,0x1f -,0x58,0x9d,0x8d,0x94,0x43,0x2b,0xf0,0x28,0x16,0x11,0x15,0xe9,0x9a,0x9d,0x9d,0x9d,0x9f,0x3d,0x39,0xff,0x19,0x19,0x1d,0x1e,0xa3,0x83,0x8b,0x2c,0x1a,0x2e,0xc0,0xdd -,0x14,0x0a,0x13,0xb5,0x8e,0x8e,0xaa,0x4f,0xa2,0xaf,0x2c,0x1b,0x15,0x16,0x6d,0x8d,0x8c,0xb7,0x2c,0x4d,0x24,0x18,0x37,0x5f,0x21,0x28,0xb9,0x97,0x91,0xa7,0x3a,0x3f -,0xb2,0xc4,0x1a,0x0d,0x19,0xbd,0x93,0x8b,0xa4,0x44,0x34,0x3c,0x9c,0x3b,0x09,0x0c,0x26,0xab,0x8e,0x8f,0xd9,0x2e,0xb2,0xce,0xd3,0x29,0x0f,0x17,0xca,0x88,0x8e,0xf1 -,0x26,0xd1,0x9e,0x38,0x0d,0x0f,0x24,0x36,0xa4,0x99,0x9e,0xbd,0xb0,0xc8,0x52,0x4c,0x2c,0x34,0x32,0xae,0x9a,0x9a,0xad,0x2d,0x27,0x2d,0x3b,0x17,0x0a,0x17,0xaa,0x8c -,0x91,0xad,0x2b,0xa4,0x94,0x9f,0x7c,0x0e,0x07,0x26,0xa2,0xad,0x5a,0xe2,0xa0,0xa1,0x9e,0xcc,0x23,0x07,0x18,0x45,0xcc,0x86,0x8a,0xb8,0xae,0x8d,0x8f,0x1b,0x0d,0x20 -,0x9c,0x1e,0x08,0x0f,0x00,0xbb,0x81,0x94,0x0b,0x09,0x3c,0x9d,0x8d,0x85,0x9c,0xa5,0x24,0x47,0x8f,0x99,0x8f,0x15,0x15,0x31,0xbf,0x1e,0x0b,0x0a,0x1f,0x94,0x38,0x07 -,0x04,0x0e,0x8d,0x80,0x85,0xa6,0x1f,0x8e,0x81,0x88,0xb5,0x0f,0x0a,0x01,0x06,0x03,0x0c,0x99,0x94,0x9c,0xb7,0x9f,0xb1,0x10,0x26,0x8b,0x85,0xaf,0x0a,0x0a,0x1e,0x8b -,0x80,0x99,0x0a,0x04,0x26,0x9c,0xaa,0xd6,0x17,0x0d,0x38,0x24,0x0e,0x0a,0xa4,0xa9,0x6b,0x95,0x99,0x9b,0xba,0x8f,0x84,0x85,0x9d,0x0a,0x05,0x0a,0x9e,0x8d,0x21,0x07 -,0x09,0x27,0x2c,0x41,0x22,0x1d,0xc8,0x5b,0xa8,0x9f,0x94,0x86,0x84,0x81,0x8c,0x62,0x0d,0x04,0x0d,0x20,0x36,0x07,0x02,0x14,0x2a,0x8b,0x82,0x9d,0x0a,0x18,0x88,0x88 -,0xae,0x42,0xb0,0x9f,0x9c,0xa9,0x1a,0x10,0xa6,0xd3,0x2b,0x19,0x20,0x22,0x13,0x9a,0x8c,0xaf,0x08,0x04,0x15,0xb2,0x87,0x82,0x9c,0x1d,0xaa,0x85,0x85,0xa0,0x18,0x09 -,0x16,0x1b,0x0c,0x03,0x0d,0x9d,0x8e,0x94,0x49,0x10,0x0f,0xda,0x8c,0x86,0x8d,0x2a,0x0a,0x38,0x8a,0x80,0x8f,0x17,0x07,0x09,0x27,0x37,0x20,0x1e,0x22,0x65,0x3d,0x1c -,0x0b,0x25,0x87,0x82,0x89,0x56,0x23,0x43,0xaf,0x8f,0x88,0x9c,0x09,0x01,0x04,0x1b,0x8f,0x8b,0x4e,0x16,0x36,0x97,0x25,0x0b,0x1d,0x9f,0x93,0x44,0x18,0x0e,0x95,0x80 -,0x80,0x8b,0x1a,0x07,0x12,0x3a,0xd6,0x27,0x14,0x0b,0x07,0x10,0x49,0x92,0x99,0xfd,0x28,0xa9,0x87,0x89,0x96,0x97,0x8d,0x8d,0xaf,0x0b,0x03,0x14,0xa6,0xa4,0x1f,0x06 -,0x0a,0x2e,0xa9,0x9e,0xb7,0x20,0x0b,0x21,0x9e,0x9b,0x90,0x8b,0x93,0xc3,0xc3,0x94,0xa7,0x23,0x1d,0x1d,0x23,0x12,0x0e,0x17,0x9e,0x87,0x91,0x24,0x08,0x12,0xa0,0x8c -,0x8e,0xa6,0x65,0x26,0x24,0xb6,0x91,0x8a,0xac,0x18,0x0f,0x1c,0x26,0x1d,0x2e,0xc7,0x3e,0x37,0x1a,0x0b,0x0f,0x99,0x81,0x88,0xa6,0x19,0xf9,0x90,0x8b,0x93,0xb2,0x17 -,0x08,0x08,0x0d,0x12,0xcb,0x97,0xc2,0x18,0x1e,0xaa,0xac,0xa1,0x96,0x95,0xcf,0x17,0x1b,0xca,0x8e,0x86,0x8b,0x5b,0x0c,0x14,0xb2,0x9f,0x54,0x16,0x11,0x11,0x18,0x1a -,0x1a,0xc3,0x9b,0x93,0x9d,0xab,0xa6,0xa2,0x9b,0x9b,0x9f,0xb0,0x2a,0x0e,0x14,0xb4,0x97,0xcf,0x18,0x12,0x1d,0xe2,0x75,0x2e,0x3c,0x71,0x4f,0xa8,0xa1,0x9e,0x90,0x8e -,0x9c,0x3a,0x2b,0x5d,0x30,0x24,0x23,0x28,0x18,0x0c,0x0d,0x1e,0xab,0x97,0x9c,0xd3,0x3c,0x9c,0x8b,0x93,0xa6,0xae,0xc2,0x2f,0x1f,0x1c,0x38,0xa4,0xa3,0x57,0x1c,0x1b -,0x2d,0x3f,0x4c,0x30,0x1b,0x15,0x1e,0x2a,0xc2,0x8d,0x87,0x8d,0xa4,0x36,0xd4,0x9b,0x93,0x9c,0x49,0x16,0x0e,0x0d,0x0b,0x14,0xcf,0xa9,0x46,0x18,0x19,0xca,0x98,0x8d -,0x8f,0x9b,0xb1,0x29,0x22,0xc5,0x99,0x92,0x93,0xef,0x15,0x1b,0x2b,0x2c,0x25,0x23,0x1c,0x17,0x13,0x17,0xc1,0x8e,0x89,0x8e,0xad,0xd1,0xb0,0xb2,0xad,0xaa,0xac,0x57 -,0x19,0x0f,0x1b,0xb9,0x9f,0xce,0x18,0x10,0x1c,0x27,0x2e,0xc9,0x9d,0x9b,0xaf,0x35,0x2a,0xb5,0x90,0x8a,0x97,0xba,0xcf,0xe9,0xd2,0x4b,0x1e,0x15,0x11,0x0c,0x0e,0x1b -,0x2f,0xb0,0x9b,0x9a,0x98,0x95,0x95,0x9b,0xad,0xc3,0xcc,0x4e,0x28,0x1c,0x2f,0xaf,0xab,0x51,0x1e,0x18,0x24,0x6f,0x36,0x23,0x24,0x35,0xc5,0xab,0xaf,0xb1,0x9d,0x97 -,0x9c,0xb1,0xcc,0xb8,0xbc,0xfe,0xc7,0xe4,0x26,0x14,0x0e,0x18,0xc8,0xac,0x30,0x1d,0x34,0xa3,0x92,0x9a,0xbc,0xb9,0xaf,0xcf,0x38,0x4b,0xa6,0x9b,0x9e,0xb0,0x31,0x29 -,0x28,0x18,0x14,0x1a,0x1b,0x1f,0x1c,0x17,0xb9,0x8a,0x87,0x8c,0x9d,0xbc,0xac,0xa9,0xf9,0x46,0x4f,0x32,0x1f,0x16,0x16,0x21,0x62,0xb2,0x40,0x1f,0x29,0x59,0xb7,0x9e -,0x9d,0xa6,0xbf,0x2d,0x27,0xce,0xa5,0x9c,0x9c,0xb8,0xda,0xb1,0xaf,0x4e,0x23,0x1a,0x17,0x14,0x0f,0x17,0x2a,0xaf,0x98,0x91,0x97,0x9d,0xa1,0xaf,0xab,0xaf,0xbf,0xce -,0x29,0x20,0x55,0xad,0xaf,0x49,0x1f,0x18,0x1a,0x1b,0x1e,0x33,0xb7,0xaa,0xb7,0xc4,0xaa,0x99,0x92,0x94,0xb5,0x39,0xda,0xd3,0x70,0x44,0x2c,0x27,0x1c,0x0f,0x13,0x21 -,0x47,0xae,0xb7,0xb3,0x9d,0x95,0x98,0xa6,0xc4,0xc7,0xf8,0x27,0x1f,0x2a,0x50,0xa2,0x9b,0xa7,0xc8,0x37,0x25,0x20,0x1e,0x1c,0x1d,0x1c,0x20,0x2d,0xb8,0x95,0x8e,0x91 -,0x9b,0xaa,0xc5,0xb8,0xad,0xb4,0xbe,0x35,0x1c,0x1a,0x1b,0x1d,0x29,0x2e,0x1e,0x1f,0x2f,0xc6,0xa3,0x98,0x99,0x9e,0xab,0x4d,0xf2,0xbb,0xaa,0xa9,0xba,0x5c,0xcf,0xb4 -,0xc8,0x30,0x1c,0x18,0x13,0x12,0x17,0x22,0xb2,0x95,0x91,0x95,0x9a,0x9b,0x9f,0xab,0x79,0x30,0x2c,0x29,0x25,0x29,0xbe,0xa0,0xa4,0x42,0x1f,0x1c,0x24,0x29,0x23,0x2d -,0x37,0x4c,0xbf,0xab,0xa1,0x9d,0x9e,0xa6,0xbe,0xd8,0xb6,0xab,0xa9,0xb9,0x30,0x1a,0x12,0x11,0x15,0x1c,0x29,0x43,0xb8,0xa2,0x99,0x94,0x91,0x95,0x9e,0xb8,0x2d,0x1f -,0x1d,0x22,0x49,0xb6,0xa9,0xae,0x71,0x29,0x27,0x2d,0x3a,0x3d,0x23,0x1d,0x1e,0x33,0xa5,0x8f,0x8f,0x9c,0xc8,0x3a,0xfd,0xaf,0xa9,0xb8,0x66,0x2b,0x1f,0x1d,0x28,0xdd -,0xc9,0x2d,0x18,0x19,0x2f,0xac,0x9e,0xa2,0xa9,0xad,0xbb,0x49,0x45,0xb5,0xa2,0xa5,0xad,0xaf,0xb0,0xba,0xfa,0x27,0x1c,0x15,0x12,0x12,0x12,0x1b,0x5e,0x9c,0x90,0x8e -,0x96,0x9c,0xa4,0xa9,0xa6,0xb5,0x2c,0x1b,0x19,0x1d,0x4a,0xb1,0xb8,0x4d,0x28,0x1e,0x1f,0x33,0xc0,0xa7,0xb5,0x3c,0x3d,0xb3,0x9d,0x9f,0xab,0xbb,0x58,0x3f,0x5a,0xb9 -,0xa7,0xa7,0xcf,0x23,0x19,0x14,0x1b,0x26,0x2d,0x35,0x4c,0xbc,0xa4,0x99,0x9a,0x9a,0x9e,0xab,0xc8,0x2e,0x1f,0x2e,0xbc,0xab,0xab,0x6d,0x2a,0x21,0x1f,0x23,0x2f,0x2f -,0x24,0x21,0x23,0x59,0x9b,0x8e,0x8e,0x9c,0xc5,0x53,0xc7,0xad,0xb5,0x41,0x29,0x23,0x1f,0x20,0x25,0x2a,0x49,0x45,0x2d,0x2d,0x3a,0xb8,0x9b,0x96,0x9f,0xb1,0x43,0x2c -,0x3e,0xd1,0xc3,0xb1,0xa9,0xa2,0xa9,0x6b,0x38,0x35,0x2f,0x23,0x19,0x12,0x10,0x17,0x2c,0xa3,0x91,0x8e,0x95,0xa8,0xb3,0xa3,0x9c,0x9f,0x68,0x1d,0x18,0x24,0x55,0xb8 -,0x4f,0x20,0x1c,0x1c,0x24,0x3d,0x5e,0xc8,0xa5,0xa5,0xaf,0xa4,0xa0,0xa2,0x9f,0xa9,0x75,0x37,0x2e,0x3c,0x79,0x5d,0x3d,0x2b,0x22,0x1a,0x1a,0x28,0x3e,0x40,0xc7,0xa0 -,0x99,0x99,0x9f,0xbe,0xc9,0xad,0xae,0x48,0x1d,0x18,0x32,0xa3,0x9e,0xab,0x3e,0x24,0x27,0x32,0x42,0x2c,0x19,0x18,0x25,0xd7,0x9f,0x96,0x9c,0xa1,0x9d,0x9d,0x9f,0xae -,0x60,0x4a,0x67,0x32,0x20,0x1b,0x18,0x18,0x1c,0x2a,0x32,0x40,0xce,0xac,0x9e,0x97,0x99,0x9f,0xa4,0xad,0xc9,0x46,0x1f,0x1d,0xd3,0x9d,0x9f,0xdf,0x1c,0x14,0x29,0xbd -,0xc3,0x21,0x11,0x14,0x40,0x9b,0x93,0x99,0xa8,0xaf,0xad,0xa1,0x9f,0xb5,0x2f,0x22,0x28,0x55,0xae,0xcb,0x2b,0x21,0x23,0x2d,0x2f,0x1d,0x1c,0x34,0xaa,0xa1,0xaa,0xb2 -,0xa7,0x9a,0x97,0x9e,0x65,0x30,0xdc,0xad,0xbb,0x3b,0x1d,0x17,0x1e,0x2a,0x2d,0x20,0x15,0x1b,0xaf,0x91,0x8f,0x9d,0xc6,0xb7,0x98,0x93,0xa6,0x21,0x13,0x1b,0xf9,0xa9 -,0xcc,0x28,0x21,0x2e,0x6e,0xa6,0xb8,0x1f,0x15,0x1e,0x55,0xa3,0xa0,0xbc,0xbd,0xa4,0x98,0x97,0xb3,0x2d,0x3e,0xad,0xa9,0x49,0x1d,0x1b,0x2a,0x42,0x38,0x1d,0x17,0x24 -,0xd6,0xa8,0xaa,0xc7,0xcf,0x9e,0x91,0x91,0x9e,0x39,0x1f,0x37,0xa7,0x9f,0x72,0x18,0x12,0x1f,0x75,0xeb,0x1d,0x0d,0x12,0x40,0x98,0x92,0xa8,0xf3,0xa5,0x93,0x8f,0x98 -,0xf4,0x23,0x25,0x32,0x43,0x2f,0x1d,0x1e,0x33,0xde,0xc3,0xd3,0x40,0x33,0x3f,0xbd,0xbe,0x3d,0x34,0x4f,0xc3,0xbb,0x54,0xeb,0x9d,0x8f,0x8f,0x9e,0x2f,0x14,0x14,0x26 -,0xea,0x61,0x2d,0x1d,0x1c,0x20,0xcd,0xa7,0x9f,0xae,0xaa,0x9c,0xa1,0xa2,0x2e,0x2d,0xb1,0xaa,0xab,0x5f,0x29,0x22,0x1f,0x25,0x3a,0x40,0x29,0xdc,0x57,0xb7,0xb5,0xc6 -,0xda,0xd0,0xb7,0xbf,0x9b,0x9b,0x97,0xb9,0x29,0x17,0x14,0x23,0x3d,0x58,0x5c,0x6a,0x22,0x30,0x3c,0xbc,0xa3,0xa4,0xc6,0xc2,0xdc,0xc5,0xb4,0x68,0xb2,0xc7,0xaa,0xc1 -,0xc8,0xc7,0xbe,0xbe,0x2d,0x22,0x1b,0x1d,0x2c,0x6a,0xcd,0xad,0x77,0x48,0x2a,0xca,0x98,0x93,0x95,0xba,0x4f,0x2d,0x2b,0x2d,0x3f,0x46,0xbe,0xd2,0x3f,0x36,0x2d,0x2b -,0x29,0x3e,0xd8,0xb1,0xb7,0xaa,0xb7,0xbe,0xe3,0x45,0x47,0xec,0xa9,0x9c,0x98,0xa8,0x31,0x16,0x11,0x1c,0x2f,0x55,0xb8,0xa9,0xb0,0xce,0x3a,0x39,0xdd,0xa8,0xa3,0xaa -,0xef,0x2c,0x4a,0x30,0xed,0xc1,0xab,0xa9,0x36,0x2e,0x2c,0x30,0x29,0x1d,0x20,0x50,0xbb,0xa7,0xae,0xad,0xa6,0xb8,0xcb,0x47,0xaf,0xb3,0xac,0xba,0x39,0x2d,0x1f,0x25 -,0x29,0xd5,0xb4,0xca,0x44,0x3e,0x4e,0xce,0xd9,0x4d,0x7d,0xc5,0xb2,0xd6,0xb1,0xa6,0xa5,0xae,0x41,0x2d,0x33,0x3c,0x2e,0x2c,0x35,0x38,0x2c,0x1f,0x2e,0xbf,0xaa,0xa7 -,0xad,0xbc,0xcb,0xca,0xc8,0xb7,0xb2,0xaf,0xb8,0x50,0x34,0xdd,0xb4,0xc1,0x39,0x28,0x26,0x27,0x3e,0x5a,0xe5,0xf5,0x4a,0x33,0x3e,0xb5,0x9e,0x9c,0xa2,0xcd,0x27,0x1f -,0x24,0xdb,0xae,0x9f,0xa4,0xc1,0x22,0x15,0x1a,0x2c,0xc3,0xaf,0xa8,0xaa,0xa7,0xbd,0x3f,0x2d,0x48,0xaf,0xbe,0xde,0xc5,0xbc,0xd2,0x4d,0x27,0x20,0x25,0x2c,0x47,0x3b -,0x46,0xc2,0xbc,0x77,0x50,0xb7,0xa5,0xa0,0xb7,0xf7,0xc7,0xb3,0xac,0xad,0xaf,0xb1,0xc6,0x2d,0x20,0x24,0x31,0x5f,0xc8,0x3c,0x31,0x2f,0x41,0xec,0x4b,0x6b,0xdc,0xc7 -,0x4f,0x36,0x47,0xaf,0xaa,0xc3,0x34,0x2f,0x2e,0x2e,0x3b,0x4c,0xae,0xa9,0xad,0xc5,0xbb,0xac,0xaf,0xbd,0x54,0x4c,0xd4,0xbe,0xb4,0xaf,0xbf,0xfb,0x3d,0x29,0x1c,0x2a -,0x4a,0x4c,0x4a,0x39,0x3b,0x39,0x4f,0x40,0x41,0x73,0xe2,0xe4,0xcc,0xb4,0xa0,0x9e,0xab,0x5e,0x2c,0x32,0x6a,0xb8,0xbb,0xb6,0xb2,0x46,0x26,0x1f,0x35,0xba,0xb9,0xbc -,0xdb,0xc1,0xc8,0xd1,0xbc,0xb9,0xb2,0xbe,0x55,0x2f,0x3a,0xe1,0x6f,0x37,0x2e,0x26,0x26,0x35,0x42,0x61,0xbb,0xa8,0xb5,0xe7,0xd8,0xb8,0xa8,0xa9,0xb4,0x3d,0x2e,0x38 -,0x4e,0xec,0xcd,0xb3,0xbd,0xe2,0x2c,0x24,0x2c,0x30,0x32,0x3c,0x4d,0xbe,0xa6,0xb0,0xcc,0xb9,0xac,0xcb,0x3e,0xf6,0xb7,0xaf,0xbd,0x41,0x29,0x24,0x2b,0x3d,0x4f,0xef -,0xb9,0xc6,0x4b,0x4f,0xd6,0xb5,0xaa,0xa9,0xc4,0x5e,0xe3,0xc6,0xb7,0xbb,0xbe,0xce,0x44,0x37,0x3a,0x33,0x2c,0x31,0x2d,0x20,0x24,0x73,0xae,0xaf,0xb3,0xb7,0xd0,0x3a -,0x30,0x3c,0xb9,0xa4,0xa4,0xc7,0x3e,0x47,0x6e,0x58,0x59,0xb4,0xac,0xaf,0xc6,0xd3,0x57,0x31,0x2d,0x2b,0x2e,0xfe,0xa6,0xa3,0xb5,0x6f,0x34,0x2b,0x2e,0x42,0x5f,0x78 -,0x67,0x36,0x21,0x1d,0x2e,0xb5,0xa1,0x9e,0xa6,0xc8,0x4a,0x46,0xde,0xbb,0xa6,0x9f,0xbf,0x2c,0x25,0x2e,0x3d,0x35,0x3f,0x7d,0xc8,0xcc,0x3a,0x2f,0x31,0x69,0xc0,0xcf -,0xc9,0xa9,0x9f,0xa5,0xb2,0xcc,0xd2,0xbd,0xbb,0xcf,0x49,0x3d,0x3e,0x24,0x1d,0x22,0x3f,0xd0,0xcd,0xd2,0x53,0xdb,0xdb,0x65,0xef,0xc0,0xba,0xc2,0x5d,0x61,0xb5,0xac -,0xae,0xc1,0x51,0x3f,0xf8,0xcc,0x3e,0x2d,0x2c,0x2d,0x29,0x24,0x2a,0x49,0xbc,0xad,0xad,0xb3,0xac,0xac,0xb9,0xd3,0xef,0xbb,0xb8,0x4d,0x38,0x49,0x6b,0xfa,0x4d,0x3b -,0x75,0xb5,0xae,0xbc,0x67,0x48,0x3a,0x3d,0x3a,0x41,0x6f,0xd9,0xdc,0x3d,0x35,0x6a,0xbe,0xf1,0x37,0x39,0x4a,0x5d,0x48,0x46,0xc8,0xb0,0xb1,0xba,0xb7,0xac,0xa4,0xa3 -,0xaf,0xfd,0x2d,0x1f,0x23,0x29,0x42,0xce,0xdd,0xe6,0x3d,0x2a,0x30,0xd7,0xb5,0xaf,0xb6,0xb5,0xc0,0x44,0x43,0xd3,0xb9,0xb1,0xae,0xb3,0xb9,0xbb,0x5f,0x2f,0x29,0x24 -,0x22,0x24,0x23,0x2c,0x3e,0xcf,0xbc,0x69,0x6c,0xbb,0xa9,0xa3,0xa8,0xac,0xae,0xd1,0x3e,0x44,0xd5,0xb9,0xc2,0xcf,0xca,0xbf,0xae,0xb9,0x35,0x25,0x24,0x27,0x2d,0x34 -,0x4e,0xcc,0xdc,0x59,0x56,0xdd,0xae,0xa1,0x9f,0xa4,0xb9,0x39,0x1f,0x19,0x1e,0x52,0xab,0xa9,0xb5,0x5a,0x37,0x5c,0xdb,0x5f,0x6c,0xcc,0xbe,0xcf,0x61,0x49,0x38,0x2e -,0x3d,0xd0,0xb7,0xac,0xa8,0xb9,0x46,0x3b,0x3b,0x45,0xf5,0xd6,0xc8,0xcb,0xd6,0xc8,0x52,0xec,0xae,0xb4,0x4e,0x2d,0x28,0x28,0x28,0x2e,0x3c,0x3a,0x39,0x6b,0xb3,0xa3 -,0x9c,0x9d,0xad,0x72,0x38,0x2b,0x2f,0x65,0xbf,0xbc,0xdd,0x4a,0x52,0xbc,0xa7,0xa7,0xbf,0x47,0x3d,0x32,0x27,0x23,0x26,0x2b,0x32,0x45,0xc4,0xae,0xa6,0xa4,0xa9,0xb9 -,0xcb,0xcf,0x4d,0x3b,0x41,0x47,0x3e,0x32,0x34,0xd7,0xaa,0x9f,0xac,0x45,0x24,0x1f,0x2a,0x52,0xc1,0xde,0x2f,0x23,0x2e,0xcb,0xa4,0x9a,0x9b,0xa2,0xb8,0x40,0x2d,0x2c -,0x3c,0x6a,0x59,0x36,0x29,0x2c,0x40,0xb4,0x9e,0x9e,0xb4,0x41,0x27,0x22,0x25,0x34,0x52,0x3b,0x36,0xef,0xaf,0xa1,0x9a,0x9b,0xa9,0xc5,0xde,0x3f,0x2b,0x29,0x2b,0x2b -,0x29,0x2d,0xea,0xa7,0x9e,0xa1,0xbc,0x3e,0x38,0x3d,0x4c,0x5c,0x3f,0x27,0x1d,0x1e,0x35,0xa9,0x97,0x92,0x9b,0xbd,0x40,0x37,0x2e,0x2d,0x3b,0x41,0x2e,0x20,0x21,0x37 -,0xb4,0x9f,0x9f,0xa9,0xbf,0xe7,0x4b,0x38,0x35,0x30,0x2a,0x28,0x2f,0x6e,0xa8,0x9d,0x9e,0xa9,0xbc,0xc3,0xd9,0x38,0x2b,0x28,0x28,0x24,0x25,0x34,0xba,0x9f,0x9a,0x9d -,0xae,0xf1,0x3b,0x35,0x3e,0x35,0x26,0x20,0x27,0x3c,0xaf,0x98,0x93,0x9d,0xcf,0x2e,0x35,0x41,0x36,0x2e,0x26,0x1e,0x1b,0x1c,0x2f,0xab,0x96,0x91,0x96,0xa7,0xd0,0x5e -,0x40,0x40,0x51,0x4f,0x32,0x1e,0x1a,0x28,0xaf,0x9d,0xa0,0xb8,0x5b,0x4b,0x3a,0x32,0x38,0x3e,0x3e,0x35,0x36,0x52,0xaf,0x9c,0x9a,0xa2,0xc5,0x47,0x39,0x2e,0x27,0x23 -,0x20,0x1e,0x22,0x31,0xbe,0x9d,0x97,0x9d,0xb0,0xc6,0xbc,0xbf,0xcc,0x4a,0x28,0x1f,0x20,0x2b,0xef,0xa2,0x94,0x95,0xab,0x2e,0x21,0x27,0x2e,0x48,0x67,0x3b,0x23,0x1b -,0x20,0xe3,0x9a,0x8f,0x93,0xa5,0xd6,0x41,0x2d,0x26,0x29,0x2d,0x36,0x32,0x25,0x22,0x3b,0xad,0x9f,0xa0,0xab,0xac,0xb3,0xda,0x67,0x3b,0x29,0x20,0x22,0x37,0xb1,0x99 -,0x98,0xad,0x35,0x2d,0x4c,0x64,0x46,0x2c,0x20,0x1f,0x21,0x29,0x41,0xa8,0x95,0x94,0x9d,0xad,0xc3,0x5b,0x40,0x36,0x25,0x1d,0x1a,0x1e,0x31,0xae,0x96,0x94,0x9f,0xd9 -,0x3b,0x5b,0xc7,0xbe,0x4c,0x28,0x22,0x1d,0x1d,0x2c,0xae,0x96,0x93,0x9b,0xaf,0x4a,0x30,0x34,0x45,0x34,0x2a,0x24,0x1d,0x1e,0x35,0xa5,0x9a,0x9f,0xad,0xb4,0xb5,0xc4 -,0xf3,0x39,0x2a,0x27,0x24,0x25,0x31,0xc0,0xa0,0x9e,0xa7,0xb6,0xc8,0xd4,0xde,0x48,0x21,0x1b,0x1d,0x23,0x46,0xa8,0x96,0x96,0xa6,0xd7,0x44,0x53,0xc1,0xbf,0x39,0x23 -,0x1d,0x19,0x19,0x27,0xa9,0x91,0x8f,0x98,0xaf,0x3f,0x39,0xcc,0xc9,0x32,0x25,0x1c,0x17,0x19,0x37,0xa2,0x98,0x99,0xa2,0xac,0xb9,0xca,0x71,0x35,0x2e,0x31,0x26,0x1b -,0x1f,0x40,0xb2,0xa2,0xa7,0xbb,0xb9,0xad,0xa8,0xbf,0x30,0x29,0x23,0x1f,0x2c,0xb5,0x9d,0x9d,0xa7,0xbe,0x57,0x45,0x6d,0x6c,0x29,0x1f,0x1f,0x1b,0x1a,0x2a,0xad,0x98 -,0x96,0x9d,0xaf,0xcc,0xba,0xa9,0xc1,0x2d,0x1f,0x16,0x14,0x1f,0xb5,0x96,0x92,0x99,0xb1,0x4e,0x68,0xc7,0xfc,0x2f,0x2a,0x22,0x18,0x13,0x1c,0xcf,0x9a,0x91,0x95,0xa0 -,0xaa,0xa5,0xa8,0xe1,0x35,0x2b,0x1d,0x16,0x1a,0x2f,0xc7,0xb7,0xb9,0xc8,0xc7,0xc2,0xab,0xb5,0x2f,0x3b,0xc1,0x44,0x2d,0xf0,0xb9,0xa7,0xd4,0x26,0x28,0x4c,0x3b,0x51 -,0x9f,0xa8,0xa4,0x9e,0xbf,0x16,0x1c,0xb6,0x9f,0xaf,0x22,0x25,0xca,0xbf,0x31,0x37,0xc2,0x47,0x76,0xae,0x42,0x27,0x72,0x9a,0xa1,0xba,0xb1,0xcf,0x27,0x14,0x37,0xae -,0x47,0x42,0x66,0x7d,0xb5,0x9e,0xa3,0xcc,0x1c,0x1e,0xbc,0x4f,0x20,0xd4,0x9d,0xe3,0x44,0xb8,0x79,0x30,0x3e,0x3e,0xce,0xac,0x39,0x25,0xe8,0x9b,0x9e,0xa0,0x43,0x12 -,0x45,0xa9,0x2a,0x26,0x31,0x4f,0xa1,0x9d,0xc5,0x23,0x2a,0x3d,0xad,0xa1,0x67,0x30,0x55,0xcf,0xbb,0xa5,0xad,0xf0,0x1d,0x1b,0x36,0xac,0xb7,0x3f,0x70,0xeb,0xb3,0xa4 -,0xb1,0x25,0x25,0x20,0x5a,0xdb,0x3f,0xa6,0xa2,0xa8,0xbd,0xb9,0x1d,0x1b,0xa8,0xb0,0x25,0x2f,0x67,0xc9,0xa8,0xac,0xc3,0xc7,0x32,0x1b,0x46,0xbc,0x37,0x57,0xad,0xad -,0x9a,0xa7,0x1e,0x1a,0x27,0xb6,0xbd,0xdd,0x2e,0x2d,0xae,0xa8,0x9f,0x96,0xb5,0x15,0x18,0x27,0xa2,0x9c,0xb0,0x44,0x1c,0x35,0xc4,0x9e,0xc4,0x1f,0x3e,0x2e,0x26,0x3a -,0xad,0x98,0x95,0xaa,0x3e,0x1e,0x1a,0x21,0x60,0xb5,0x32,0xc2,0x9f,0xdd,0xac,0x9d,0x4f,0x3d,0x21,0x2d,0x79,0x2a,0x22,0x6b,0xa2,0xbe,0xa9,0x9b,0x34,0x0d,0x1a,0xda -,0x98,0xa2,0x36,0x2d,0xec,0x94,0x9b,0xa1,0x26,0x10,0x21,0x26,0x46,0x9f,0x9d,0xcb,0xe2,0xc6,0xba,0xaf,0x2d,0x25,0x71,0xd6,0x31,0x2c,0xbd,0xae,0xa3,0xd7,0x2a,0x49 -,0x30,0xd5,0xb0,0xbe,0xbe,0xc6,0xca,0x52,0x2e,0x38,0x3d,0x31,0x41,0x2b,0xc9,0x99,0x9e,0xc7,0x2e,0x1b,0x1b,0xb5,0x97,0x9c,0x1f,0x22,0xb8,0xa5,0x9b,0xc7,0x32,0x13 -,0x28,0xaa,0xed,0x34,0x25,0xaa,0x94,0xa8,0xdb,0x34,0x1f,0x28,0x3e,0xcd,0x2b,0x38,0x9a,0x9e,0xcf,0xd1,0x34,0x35,0x39,0x4b,0xb3,0x41,0x23,0x43,0x96,0xa3,0x5b,0xc4 -,0xfc,0x1b,0x18,0xcc,0xa6,0xad,0x22,0x2a,0xee,0x9d,0x96,0x9f,0x5f,0x0e,0x25,0xcf,0x3c,0xb0,0xa2,0xa6,0xd2,0xea,0xbf,0x5d,0x1e,0x13,0x32,0xbc,0x35,0x3a,0x9d,0x9c -,0xaf,0xbf,0xb5,0xe3,0x1c,0x30,0x3c,0x21,0x1e,0xbe,0x8e,0x99,0xbc,0xab,0x5f,0x13,0x1a,0x3c,0xad,0xcf,0x28,0xc7,0x68,0xb0,0x90,0x9c,0x1e,0x09,0x2d,0xa1,0xca,0xc9 -,0xde,0xb0,0xc4,0xb3,0xa4,0xac,0x20,0x13,0x37,0xaf,0x38,0x34,0x9e,0x9c,0xab,0xa9,0xad,0x38,0x17,0x1b,0x2f,0x26,0x47,0x9d,0x94,0xb9,0x29,0xb2,0xac,0x1a,0x1d,0xa8 -,0xb2,0x2f,0x1e,0xac,0xa6,0xad,0x9f,0xab,0x26,0x0b,0x3e,0xa5,0xb9,0x30,0x3b,0x9a,0xa8,0xe9,0xae,0xb7,0x14,0x0f,0xe4,0xa1,0x39,0x47,0x9e,0xd8,0xdf,0xa9,0xad,0x37 -,0x19,0x3b,0xb5,0x38,0x3c,0x92,0x93,0x2b,0x1c,0xab,0x9e,0x1f,0x1d,0x39,0xcd,0x26,0x2a,0x9c,0x9e,0xb7,0xcf,0xbc,0x38,0x11,0x38,0x9f,0x52,0x3c,0xb2,0x99,0xc5,0x22 -,0x6b,0xe5,0x1d,0x2d,0x9e,0xaf,0x1f,0x2f,0x99,0xa2,0x45,0xbb,0xa2,0x27,0x0e,0x24,0xaa,0xcc,0x34,0x9a,0x9d,0x24,0x1e,0x9b,0x9d,0x17,0x18,0x47,0xb1,0xcd,0xb9,0x9d -,0xe1,0x27,0x63,0x9e,0x3e,0x0f,0xce,0xa5,0x26,0x2f,0x9a,0x9c,0x45,0x33,0xbd,0xd2,0x18,0x1f,0x9d,0xa0,0x1b,0x49,0x97,0x9c,0xb9,0xd2,0xbf,0x1c,0x12,0x38,0x9a,0xd6 -,0x3e,0xad,0xab,0x46,0x3b,0x9a,0xd2,0x11,0x14,0xbf,0x9d,0x5d,0x48,0xa2,0x3c,0x1d,0xad,0x97,0x23,0x0b,0xc1,0x99,0xe1,0xf3,0x98,0x9c,0x2c,0x22,0xcb,0x5d,0x15,0x28 -,0x9a,0xad,0x18,0x29,0x97,0xa3,0x2d,0x47,0x44,0x24,0x26,0xa6,0xa3,0x2c,0xce,0x9c,0xa5,0x46,0x3a,0xad,0x4e,0x10,0x25,0x9e,0x9d,0xfb,0xc8,0xab,0x35,0x28,0xc9,0x9a -,0x25,0x10,0xe3,0xa3,0xce,0x40,0xa8,0xaa,0x3e,0x26,0xc3,0xbd,0x16,0x1e,0x9d,0x9d,0x2b,0xa9,0x94,0x2f,0x17,0x41,0xa4,0x48,0x2f,0xb9,0xd2,0x25,0x4f,0x99,0x9d,0x1c -,0x14,0xaa,0xcf,0x18,0x31,0x9e,0xb7,0x37,0x9f,0xa1,0x25,0x24,0x48,0xb5,0x2a,0x1f,0xa9,0xa3,0xbe,0xeb,0xab,0x6a,0x3f,0xc4,0xa5,0x2c,0x0e,0x41,0x99,0x9a,0x4d,0xaf -,0xc6,0x1f,0x20,0x5d,0xa6,0x38,0x27,0x60,0xa3,0xb9,0xcc,0x9b,0xa8,0x11,0x16,0x9e,0xab,0x27,0x43,0xaf,0xdd,0x5d,0xa6,0xc1,0x2e,0x24,0x2d,0xb9,0x1f,0x25,0x98,0x95 -,0x6d,0x2e,0xbb,0x21,0x28,0x99,0x9d,0x19,0x13,0xd3,0x9f,0xa2,0x3f,0xb5,0x57,0x23,0x2d,0x4e,0xaf,0x24,0x42,0xa2,0xa4,0xbf,0x66,0xbf,0x4b,0x23,0x2c,0xb6,0x71,0xd8 -,0x4a,0xf7,0xb6,0xab,0x9e,0xd3,0x29,0x1e,0x30,0xa4,0x3e,0x35,0xa2,0xa6,0xc6,0x6d,0xc2,0x1e,0x25,0xc7,0xbb,0x38,0x2d,0xb6,0xa0,0xa4,0x1d,0x44,0xa9,0x71,0x31,0x4d -,0x5d,0x1e,0xa6,0x9b,0xc9,0x4a,0xcf,0xc9,0x25,0x25,0x42,0xae,0xe0,0x33,0x4a,0xbb,0xd2,0xb6,0x98,0x23,0x13,0x25,0xcb,0x9e,0xbe,0x3e,0x24,0x55,0xa3,0xa4,0xa7,0x2e -,0x1e,0x25,0x61,0x9f,0x9b,0xac,0xb7,0xc0,0x26,0xe9,0x54,0x4d,0x37,0x29,0x52,0x26,0xae,0xac,0xae,0xbc,0x47,0xfe,0x2f,0x1f,0x4c,0x99,0xd5,0x4b,0xe2,0xb0,0x2f,0x3f -,0x9d,0x2d,0x1d,0x23,0xb4,0x9d,0xb0,0x2b,0x1f,0xb8,0x9b,0x9e,0xc6,0x18,0x13,0x4e,0xaf,0xb4,0xae,0xee,0x40,0x47,0x3c,0x4c,0x38,0xbb,0x6b,0x3d,0x51,0x2d,0xbc,0xa2 -,0xa6,0xcb,0x45,0x33,0x3b,0x39,0x59,0xc8,0xdb,0xca,0xed,0xa7,0x4d,0x2e,0x52,0x2d,0xb8,0xae,0xaf,0xae,0x34,0x2b,0x4e,0xa4,0xa9,0x76,0x3c,0x1b,0x1a,0xa6,0x99,0xb7 -,0xde,0x2a,0x6a,0xb5,0xdd,0xb1,0x38,0x23,0x25,0xc3,0xb3,0x2d,0xb9,0xaa,0xba,0xde,0x2c,0x22,0xdb,0xab,0x4d,0x2d,0x33,0x9f,0x9b,0xae,0x21,0x1e,0x52,0x39,0xbd,0x4e -,0x36,0xbe,0xc7,0x41,0x58,0xad,0xab,0xda,0x2e,0x1a,0x1d,0x9f,0x8e,0xaa,0x2b,0x2f,0xc6,0xb0,0x5a,0x70,0x3e,0x2b,0x39,0xaf,0xa4,0x34,0x3e,0xd9,0x56,0xbd,0xad,0xca -,0x2e,0x2b,0x3d,0x5d,0xd3,0xa1,0xac,0xaf,0x25,0x1d,0xcc,0x58,0xcc,0x57,0x35,0x34,0xbc,0xb8,0xb1,0xc7,0xfe,0xb1,0xc0,0x36,0x1f,0xb5,0x9e,0xb3,0xcf,0x23,0x1e,0xf3 -,0xb3,0xd6,0x1a,0x18,0x65,0x98,0x98,0x33,0x2e,0xdf,0xaf,0xad,0xce,0x27,0x34,0x39,0x3b,0xb0,0xd5,0xaa,0xb0,0xdc,0x27,0x35,0x9b,0x9d,0x3d,0x1b,0x27,0x4f,0xa9,0xbd -,0xcc,0xe8,0x46,0xbc,0x32,0x25,0x3c,0xa4,0xb8,0x29,0xd5,0xa8,0xae,0xee,0x44,0x4b,0x20,0x27,0xaa,0xa2,0xb1,0x2e,0x28,0xe3,0xa9,0xa5,0xc5,0x19,0x15,0x2c,0xa5,0x99 -,0xc7,0x35,0x3b,0xa7,0xbd,0x4a,0xc3,0xd2,0xe1,0x2a,0x1f,0x20,0xb8,0xa9,0xa8,0x2f,0x22,0xbc,0x9e,0x9f,0x35,0x4e,0x5b,0x32,0xb0,0xb9,0x31,0xe5,0xc8,0xce,0x28,0x25 -,0xcf,0xa7,0xd7,0x22,0xbd,0x9a,0x9f,0x76,0x2e,0x19,0x2f,0xa6,0xa6,0xda,0x21,0xe1,0xa6,0xbd,0x25,0x75,0xa5,0x6f,0x25,0x25,0x38,0xbd,0xa7,0x3c,0x3a,0x2e,0x58,0x97 -,0xa3,0xbd,0x33,0x27,0x37,0xc7,0xa8,0xbe,0x26,0x1a,0x3d,0xab,0xa3,0xc1,0x27,0x29,0x57,0x77,0xb8,0xa8,0xb8,0xc2,0xb9,0x32,0x1b,0x2d,0xb1,0xa6,0x2e,0x28,0xb5,0x9b -,0xa8,0x47,0xbf,0x7e,0x33,0x36,0xb4,0x58,0x35,0x4e,0xb7,0x64,0x34,0xb0,0xb7,0x3c,0x1a,0xce,0x9d,0x9f,0xb4,0x1a,0x15,0x39,0xa1,0x9c,0xbd,0x28,0x38,0xb9,0xd0,0x20 -,0x60,0x9d,0xa6,0x33,0x20,0x22,0xb0,0x9a,0xaf,0xbe,0x2a,0x20,0x53,0x9a,0xbb,0x2c,0x4d,0x46,0x29,0x25,0xc8,0x5a,0x1a,0x25,0x9a,0x99,0xaf,0x38,0x2f,0xb6,0xbb,0xa6 -,0x97,0x36,0x15,0x2e,0xa9,0xd6,0x3a,0x4e,0x3b,0x2d,0x3a,0x94,0x97,0x3e,0x1d,0x36,0xbc,0xd4,0x3a,0x3d,0xae,0xb8,0xac,0xb7,0x23,0x19,0x5d,0xa2,0x65,0x28,0x3e,0xae -,0x9d,0xa8,0x5c,0x28,0x20,0x26,0x9f,0x96,0x2a,0x20,0x47,0xaa,0x7e,0xba,0xa6,0x56,0x17,0x1c,0xbc,0xe8,0xe4,0x3d,0xbf,0xab,0xc9,0xb4,0xa0,0x1e,0x19,0xab,0x9d,0x40 -,0x16,0x1f,0xb4,0xaa,0xa9,0xa1,0x4a,0x49,0xb1,0xda,0x2e,0x31,0x24,0xaf,0x9f,0xbe,0xb8,0xcb,0x24,0x36,0xae,0xa8,0x25,0x21,0xe0,0x8f,0x9a,0xa2,0x45,0x18,0x3b,0x21 -,0x8c,0x37,0xa2,0x0c,0x00,0x08,0x03,0x9c,0x1e,0x31,0x21,0x3c,0x88,0x9e,0x99,0x95,0x99,0x98,0x93,0x87,0xb2,0xae,0x8f,0x37,0x94,0x26,0x00,0x8b,0x85,0x8e,0x96,0xaf -,0x0f,0x22,0x1d,0x06,0x05,0x00,0x05,0x09,0x0b,0x02,0x03,0x00,0x0a,0x00,0x14,0x22,0x06,0x0d,0xc3,0x8d,0x8c,0x8d,0xa0,0x3a,0x9e,0x89,0x89,0x8b,0x98,0x8e,0x82,0x81 -,0x85,0x84,0x86,0x80,0x83,0x80,0x96,0x83,0x93,0x19,0x8d,0x80,0x9c,0x01,0x98,0x2b,0x14,0x23,0x04,0x00,0x02,0x00,0x10,0xa8,0x07,0x08,0x00,0x0a,0x1a,0x00,0x02,0x00 -,0x11,0x0e,0xad,0xea,0x0e,0x04,0xa9,0x82,0x84,0x80,0x85,0x98,0x9d,0x80,0x84,0x80,0x83,0x80,0x95,0x82,0x87,0x82,0x87,0x95,0x9b,0x22,0xae,0xc9,0x87,0x9f,0x20,0x08 -,0x15,0x0d,0x0f,0x43,0x06,0x01,0x00,0x04,0x0d,0x09,0x01,0x07,0x08,0x03,0x02,0x10,0x11,0x09,0xcd,0x1d,0x32,0xbf,0x8e,0x8d,0xb4,0xef,0x9e,0x88,0x97,0x90,0xaf,0xad -,0x92,0x86,0x82,0x8f,0x8c,0x80,0x9b,0x90,0x87,0x80,0x86,0x82,0x96,0xc8,0x85,0x26,0xe7,0x13,0x18,0x08,0x00,0xab,0x13,0x00,0x02,0x02,0x03,0x0e,0x18,0x18,0x1a,0x0b -,0x05,0x00,0x12,0x0c,0xb0,0x3b,0x3e,0x1c,0x0d,0x8a,0x13,0xca,0x89,0x86,0x80,0x8f,0x8a,0x8a,0x8a,0x85,0x86,0x82,0x82,0x8a,0x8e,0x95,0x89,0x99,0xb8,0xb6,0x1e,0xc4 -,0x0e,0x2a,0xc3,0xe8,0x2b,0x03,0x0d,0x25,0x8d,0xae,0x00,0x03,0x0b,0x18,0x12,0x02,0x02,0x04,0xa4,0x2f,0xbf,0x11,0x01,0x0a,0x0c,0xa4,0x22,0x80,0x8e,0x26,0x94,0x87 -,0x39,0x38,0x81,0x8f,0x9e,0x0a,0x9c,0x80,0x8b,0x8b,0xd3,0xfc,0x89,0x80,0x87,0x85,0x8e,0x96,0x59,0x08,0x9f,0xa5,0xac,0x1b,0x0a,0x05,0x00,0x07,0x2b,0x11,0x03,0x0a -,0x00,0x16,0x07,0xba,0xa7,0x03,0x07,0x0d,0x08,0x2c,0x8e,0xb4,0x0e,0x0e,0x36,0x8e,0x86,0x8b,0xa4,0x92,0x8d,0xaa,0x96,0x87,0x80,0x8d,0x9a,0x8f,0x84,0x9d,0x8b,0x89 -,0x81,0x21,0x07,0xa4,0x84,0x84,0x0a,0x0b,0x9e,0x8c,0x0e,0x9c,0xbc,0x08,0x15,0x2b,0x15,0x04,0x9f,0x22,0x01,0x0e,0x00,0x0d,0x1a,0xa5,0x23,0x00,0x14,0x0c,0x98,0x1a -,0x2e,0x14,0x18,0x91,0x0a,0x96,0x86,0x88,0x8c,0xad,0xaf,0x96,0x84,0x88,0x80,0x88,0x0d,0x30,0x86,0x87,0x8f,0x30,0x8d,0x86,0x8f,0xb4,0x04,0x13,0x89,0x80,0x13,0x0b -,0x02,0x46,0x55,0x0f,0x18,0x00,0x16,0x00,0x13,0x21,0x1a,0x05,0x10,0x1c,0x00,0x0d,0xc7,0xa7,0x0e,0x02,0x12,0x86,0x8e,0xad,0x08,0x0a,0x3d,0x92,0x80,0x8b,0xad,0x07 -,0xa2,0x87,0x80,0x87,0x96,0x8f,0x36,0x85,0x83,0x89,0xa0,0x99,0x92,0x0e,0x89,0x8f,0x27,0xb4,0x12,0x8d,0x8b,0x9b,0x14,0x12,0xb6,0x13,0x0f,0x02,0xad,0x12,0x00,0x11 -,0x17,0x08,0x0d,0x0c,0x0e,0x11,0x08,0x08,0x04,0xe5,0x58,0x54,0x11,0x3b,0x21,0x88,0x87,0xa3,0x80,0x2a,0x95,0x8a,0x8d,0x88,0x8c,0x86,0x8c,0x98,0x8f,0x98,0x85,0x8f -,0x2e,0x35,0x87,0x8b,0x2e,0x0f,0x14,0x9d,0x9a,0x24,0x16,0x1e,0x05,0xa2,0x97,0xac,0x08,0xb2,0xb7,0x12,0x1d,0x08,0x14,0x06,0xaf,0x22,0x0c,0x0c,0x0d,0x1d,0x14,0x1b -,0x19,0x0d,0xa8,0x9e,0x1f,0x09,0x15,0x87,0xaa,0x9e,0xa5,0x9b,0x9b,0x9b,0x8e,0x8b,0x8b,0x93,0x91,0x74,0x8a,0x8a,0x89,0x9a,0x81,0x8b,0xa2,0x8d,0x99,0x34,0xbd,0x94 -,0xdd,0xa8,0x16,0x1b,0x0a,0x0b,0x1b,0x14,0x03,0x07,0x17,0x28,0x0c,0x0d,0x0c,0x0f,0x0d,0x04,0x19,0x2b,0x2d,0x10,0xac,0x09,0x26,0x99,0x18,0x8e,0x8a,0x9b,0xad,0x99 -,0xa7,0x95,0x8c,0x86,0x88,0x80,0x8c,0x3c,0x95,0xca,0x8d,0x88,0x8d,0x2a,0x4f,0xae,0x2e,0x9c,0x51,0x27,0x10,0x1f,0x3e,0x0d,0x24,0x51,0xbb,0x39,0x2e,0x1c,0x07,0x15 -,0xca,0x19,0x1f,0x5b,0x1a,0x28,0x01,0x1d,0x13,0xa3,0x1c,0x0b,0x1b,0x0e,0x0f,0x22,0xa8,0xc7,0x99,0x0b,0x1d,0x9d,0x93,0x9d,0x8a,0x3c,0xa0,0x9d,0x9a,0x80,0x87,0x8a -,0xa1,0x9a,0xa2,0x94,0x86,0x98,0x8b,0x89,0x96,0x96,0xac,0xac,0x51,0x39,0x19,0x50,0xa2,0x09,0x0d,0xe6,0x1a,0x1e,0x1f,0x1f,0x03,0x07,0x05,0x0b,0xb3,0xd2,0x1a,0x0d -,0x15,0x0a,0x32,0x5f,0x11,0xae,0xa8,0xba,0x8d,0x21,0x2a,0xad,0xa5,0x92,0x96,0x81,0x9a,0x24,0x4c,0x96,0x83,0x85,0x83,0x88,0xd7,0x9a,0x88,0x9d,0x4f,0x9c,0x51,0x2c -,0xdb,0xc7,0x8e,0x12,0x3f,0x43,0x2a,0x15,0x07,0x37,0x38,0xde,0x49,0x1f,0x0b,0x15,0x0b,0x38,0x9c,0x04,0x0b,0x1c,0x1a,0x17,0x27,0x41,0x17,0x31,0x96,0xa5,0x13,0x1a -,0x4c,0x88,0x9f,0x92,0x8f,0x91,0x41,0x24,0x8e,0x8e,0x89,0xbe,0xaf,0x26,0x94,0x8a,0x8e,0xbb,0xf4,0xb5,0x97,0xaf,0x0d,0xb9,0x18,0x9b,0x8a,0x9f,0x30,0x0c,0x0a,0xa7 -,0x9d,0x05,0x11,0x1c,0x1a,0x17,0x30,0xeb,0x24,0x27,0x2e,0x2f,0x2d,0x09,0x17,0x8c,0x98,0x2b,0x16,0x20,0x0f,0x1d,0xa1,0x2f,0x2b,0x2f,0x10,0x96,0xa2,0x90,0x8b,0xab -,0x8c,0x9d,0x9c,0x89,0x4a,0x90,0x8d,0x87,0x80,0xa0,0xba,0xc7,0x9d,0x9b,0x8d,0x12,0x24,0x1d,0x2a,0x9f,0x23,0x16,0x2d,0x0e,0x07,0x19,0x09,0x0a,0x0a,0xf1,0x57,0x25 -,0x43,0x0f,0x0a,0x14,0x0d,0xaa,0xdd,0x29,0xa7,0x93,0x8a,0x9f,0x8e,0xca,0xba,0x94,0x88,0x98,0x0a,0x5d,0x8c,0x8b,0x89,0x90,0xcc,0x3f,0xa6,0x2b,0xeb,0x2a,0xbe,0x37 -,0x31,0xa8,0x1a,0xcd,0x45,0x29,0x17,0x28,0x1e,0x14,0x0d,0x9d,0x8c,0xb5,0xa1,0x5f,0x1d,0x15,0x2c,0xaa,0xb1,0x2d,0xa7,0x96,0xa7,0x4c,0x2f,0xb6,0x3b,0x0e,0x26,0x1e -,0x0d,0x0f,0x94,0x89,0x41,0x1a,0x04,0x0d,0x10,0x19,0x99,0x59,0x3c,0x29,0x9e,0x89,0x99,0xb3,0x98,0x9c,0xa9,0x90,0x9c,0x1a,0xe9,0x87,0x82,0x87,0x9e,0x92,0x14,0xc9 -,0x2f,0x30,0xa9,0x1a,0x1a,0x2f,0x9d,0x2c,0x0f,0x0d,0x14,0x11,0x0b,0x1b,0x19,0x0c,0x42,0x9d,0x8a,0x1c,0x0f,0x19,0x11,0x1f,0x9c,0xa8,0xe5,0xa1,0x88,0x8d,0x97,0x9c -,0x1b,0x21,0x1a,0xab,0x1d,0x59,0x23,0x99,0x80,0x8f,0x9c,0xaf,0x2e,0x0f,0xa9,0x98,0xdf,0x1e,0x40,0x90,0xd2,0x9a,0x27,0x22,0xbf,0x08,0x27,0x25,0x19,0x47,0x9e,0x9c -,0x8d,0xb1,0x17,0x08,0x05,0x0f,0xac,0xa1,0x5e,0x58,0x9c,0x85,0xbb,0x0d,0x10,0x3b,0x1f,0x37,0x32,0x18,0x3e,0x8a,0x84,0x83,0xd5,0x11,0x16,0x02,0x17,0xf2,0x9b,0x36 -,0x20,0x90,0x8e,0x96,0xa5,0x27,0x33,0x24,0xac,0xc9,0x1b,0x3b,0x94,0x87,0x88,0x99,0x19,0x11,0x0a,0x12,0xbb,0x8f,0x45,0x3d,0x8d,0x95,0xda,0x2c,0x2c,0x10,0x08,0x0d -,0x1d,0x37,0x2f,0x9a,0x85,0x86,0x49,0x09,0x08,0x05,0x10,0x2b,0xbc,0x28,0x4b,0x92,0x84,0x8e,0xaf,0xd4,0x1d,0x0f,0x1b,0xab,0xaf,0xb9,0x93,0x83,0x85,0x8d,0xb0,0x1b -,0x11,0x36,0x92,0x9d,0x18,0x22,0x8d,0x8f,0xaf,0x28,0x10,0x12,0x1f,0x18,0x15,0x34,0xce,0x95,0x83,0x8b,0xd5,0x1a,0x0e,0x08,0x0c,0x1d,0x2d,0x30,0x55,0x96,0x87,0x91 -,0x27,0x10,0x19,0x16,0x1f,0x43,0x1c,0x1b,0x9c,0x82,0x88,0xae,0x19,0x0d,0x0a,0x18,0x37,0x3f,0x26,0xe9,0x8d,0x8d,0x98,0xb5,0x31,0x18,0x1b,0xd5,0xc5,0x24,0x2f,0x90 -,0x84,0x98,0x38,0x1c,0x0d,0x0c,0x27,0x2b,0x1c,0xbc,0xa3,0x8a,0x8a,0x9f,0x2d,0x20,0x23,0x0d,0x10,0x1a,0x1c,0x29,0x9b,0x86,0x84,0x96,0x0f,0x05,0x12,0x1d,0x1d,0x32 -,0x24,0xaf,0x84,0x84,0x98,0x38,0x45,0x3d,0x28,0x1c,0x15,0x15,0x33,0x8d,0x87,0x9b,0xd1,0x3d,0x23,0x13,0x0f,0x28,0xd3,0x34,0xbb,0x88,0x8c,0xb7,0x37,0x2e,0x25,0x1b -,0x20,0x0f,0x0e,0x6b,0x8d,0x85,0x90,0xe0,0x18,0x1a,0x2c,0x1e,0x14,0x23,0x2a,0x9f,0x86,0x8b,0x9a,0x4b,0x1e,0x1c,0x38,0x15,0x0d,0x1f,0xc9,0x92,0x84,0x8c,0x49,0x14 -,0x2d,0x1e,0x1c,0x16,0x2a,0x3d,0x94,0x8a,0x88,0x80,0xca,0x40,0x1a,0x10,0x0b,0x56,0x0b,0x4a,0x1d,0x00,0x0c,0x00,0xc3,0x0f,0x15,0x0f,0x06,0x9d,0x90,0x87,0x85,0x85 -,0xa2,0x9a,0x89,0x98,0xcf,0xaf,0x0c,0x21,0x9b,0x21,0x80,0x85,0x8a,0x93,0x99,0x1c,0x0b,0x0a,0x06,0x0e,0x08,0x12,0x0f,0x21,0x08,0x0a,0x04,0x06,0x00,0x05,0x06,0x02 -,0xb5,0x98,0x8f,0xa4,0x96,0x99,0x2e,0x2d,0xa0,0x99,0x97,0x83,0x82,0x82,0x84,0x8b,0x88,0x85,0x87,0x90,0x8d,0x98,0x89,0x83,0xa7,0xa4,0x84,0x8d,0x05,0x28,0x0c,0x00 -,0x11,0x08,0x0b,0x0c,0x01,0x13,0x9d,0x0e,0x05,0x00,0x02,0x08,0x00,0x06,0x09,0x2b,0xb8,0xac,0x67,0x19,0x08,0x19,0x9f,0x89,0x80,0x82,0x81,0xa2,0x8c,0x86,0x80,0x84 -,0x85,0xb8,0x9d,0x8c,0x89,0x80,0x8b,0x8c,0xdb,0x8e,0xa4,0xb7,0x17,0x09,0x0c,0x18,0x21,0x30,0x11,0x04,0x0a,0x06,0x04,0x05,0x08,0x00,0x05,0x0c,0x15,0x14,0x1d,0x3e -,0x13,0xc7,0x38,0x2a,0x4e,0x4d,0x97,0x85,0x82,0x8c,0x8b,0xa2,0x8d,0x8c,0x32,0x1f,0x4f,0x8d,0x93,0x8c,0x80,0x8e,0x8a,0x88,0x80,0x8e,0x8c,0xc1,0x36,0x81,0x66,0xac -,0x1f,0xc4,0x1e,0x00,0x17,0x06,0x02,0x00,0x03,0x00,0x0d,0xab,0xdf,0xad,0x12,0x0b,0x00,0x00,0x07,0x72,0x1e,0xe8,0x9e,0x1f,0x85,0xa8,0x9c,0x89,0x8a,0x81,0xac,0xae -,0x8a,0x84,0x83,0x82,0x82,0x81,0x8b,0x2f,0x52,0xad,0x9f,0xa4,0xb1,0xbf,0x4e,0x65,0x67,0xa4,0xc0,0x0a,0x04,0x09,0x0e,0x0e,0x27,0x04,0x09,0x9e,0x1f,0x1d,0x01,0x03 -,0x00,0x36,0x23,0xe7,0x36,0x06,0x09,0x0e,0x85,0xce,0x8a,0xb5,0x0d,0x9c,0x84,0x90,0xa8,0x82,0x86,0x8b,0x20,0x2f,0x80,0x8f,0x8b,0x92,0x36,0x89,0x81,0x80,0x87,0x83 -,0xad,0x10,0x0b,0x4b,0xcf,0x24,0xb1,0x9d,0x1a,0x00,0x05,0x1e,0x10,0x00,0x0a,0x00,0x0c,0x08,0x68,0x98,0x0c,0x05,0x1b,0x16,0x05,0x0e,0x23,0x15,0x0c,0xcf,0x8a,0x84 -,0x8b,0x86,0x84,0xb7,0x0e,0x20,0x89,0x80,0x86,0x91,0x98,0x80,0x99,0x93,0x8a,0x8e,0x36,0x06,0x2f,0x98,0x80,0xd0,0xac,0x8e,0x8a,0x14,0x0e,0xad,0x09,0x07,0x14,0xc2 -,0x02,0x35,0xed,0x00,0x11,0x00,0x05,0x04,0x1a,0xd6,0x00,0x18,0x22,0x9a,0xdd,0x98,0xe1,0x0e,0xc8,0x00,0x8d,0x85,0x86,0x9f,0xa1,0x89,0x8e,0x80,0x86,0x80,0x8d,0x1a -,0x22,0x8a,0x86,0x87,0x96,0x96,0x8c,0x90,0x3c,0x07,0x09,0x9f,0x80,0x20,0x1e,0x0e,0x2f,0x9b,0x15,0x2b,0x00,0x13,0x04,0x10,0x2c,0x0d,0x07,0x0b,0x99,0x17,0x07,0x0f -,0x1a,0x0a,0x08,0x1c,0x8f,0xb1,0xae,0x0c,0x12,0xa3,0x8f,0x83,0x8b,0x94,0x0e,0xbb,0xa1,0x85,0x80,0x98,0x8d,0xbd,0x8c,0x87,0x91,0x90,0xa8,0x8e,0x13,0x95,0x88,0xc0 -,0x95,0x0f,0xbc,0xa6,0xc8,0x0a,0x0c,0xb3,0x25,0x28,0x04,0x5e,0x1d,0x00,0x09,0x13,0x0b,0x0b,0x07,0x08,0x1b,0x1c,0x13,0x02,0x4d,0x2e,0x22,0x13,0x5c,0x2d,0x96,0x83 -,0x98,0x82,0x2d,0xa2,0x87,0x8d,0x85,0x99,0x8b,0x85,0xa5,0xa3,0x4e,0x89,0x89,0x91,0x4e,0x97,0x9c,0x28,0x30,0x1a,0x9e,0xb0,0x24,0x1c,0xb8,0x0b,0xbf,0x2d,0x59,0x08 -,0x14,0xbf,0x14,0x22,0x05,0x5a,0x02,0x20,0xa2,0x0c,0x08,0x07,0x25,0x1a,0x20,0x29,0x08,0xbf,0x97,0x4c,0x17,0x20,0x8b,0xa6,0xa7,0x9d,0x96,0x8f,0xa6,0x8d,0x8b,0x8f -,0x9f,0x8e,0x9a,0x96,0x8f,0x93,0x9c,0x83,0x81,0x8f,0x8f,0xc5,0x2b,0x43,0x93,0x2a,0x9a,0x29,0x22,0x0d,0x03,0x1f,0x1b,0x07,0x03,0x0e,0x0d,0x0b,0x17,0x0d,0x02,0x13 -,0x0e,0x4c,0x1c,0x12,0x04,0xa9,0x19,0x0d,0x8e,0x51,0x94,0x94,0x8f,0x9f,0x94,0x93,0x96,0x91,0x87,0x88,0x80,0x8b,0x53,0x8d,0x8e,0x8d,0x8e,0x9c,0x21,0x23,0xae,0xae -,0xa9,0xce,0x1a,0x13,0x1a,0x69,0x21,0x19,0x11,0x1b,0x29,0x9c,0x90,0x0d,0x0f,0xb1,0x3f,0x1a,0x22,0x07,0x2f,0x0f,0x1e,0x0d,0x26,0x27,0x0a,0xb8,0x22,0x17,0x17,0xce -,0x20,0x9e,0x1c,0xca,0x96,0x9e,0x9e,0x8e,0xad,0xa9,0x99,0x3b,0x84,0x87,0x8a,0x99,0x78,0xa8,0x8d,0x80,0x92,0xa5,0xa1,0xb3,0xa9,0x9e,0x95,0x2f,0xbc,0x2e,0x19,0x42 -,0x0d,0x0d,0x2d,0x16,0x0f,0x14,0xff,0x03,0x0f,0x2b,0x0c,0x30,0x1f,0x0d,0x08,0x2e,0x38,0x39,0x1d,0x0c,0x9a,0x8e,0xcc,0x8c,0x34,0x1e,0xac,0x3c,0x92,0x97,0x8b,0x8d -,0xc3,0x9f,0x8d,0x85,0x93,0x99,0x86,0xa0,0x98,0x8d,0xba,0x9d,0x8d,0xad,0x0e,0x3e,0x2f,0xb1,0x11,0x18,0x3e,0x15,0x1e,0x1e,0xa9,0x1a,0x1e,0x1b,0x1d,0x0e,0x29,0x1f -,0x1f,0xbb,0x07,0x19,0xc6,0x1b,0x12,0x29,0x35,0x2e,0x31,0xc6,0x49,0x50,0x8e,0xba,0x8e,0x45,0x37,0x91,0x90,0x94,0xc1,0x9a,0xa8,0x83,0xad,0xea,0x54,0x95,0x8e,0xa1 -,0x2e,0x22,0x47,0xcf,0x96,0x2f,0x8d,0x22,0x30,0xa1,0xbe,0x56,0x26,0x20,0x2a,0x9e,0x11,0x1e,0x12,0x14,0x2b,0x34,0x1a,0x10,0xc8,0xa8,0x2b,0xee,0x39,0x13,0x9e,0x2b -,0x0e,0x18,0x28,0x28,0x2b,0x24,0x13,0x2a,0x93,0x2c,0x2c,0xaa,0xb0,0x93,0x38,0xa4,0x9d,0xac,0x87,0x8e,0x8b,0x98,0x95,0x87,0x98,0xa9,0xed,0x93,0x99,0x9e,0x3b,0x9d -,0xdd,0x36,0x9d,0x1c,0x0a,0x14,0x1b,0x0e,0x14,0x0d,0x11,0x20,0x1e,0x07,0x0e,0x51,0x11,0x0f,0xc4,0x0f,0x79,0xcb,0x2f,0x9f,0x9a,0x92,0xb5,0x93,0x2a,0x9f,0x8f,0x9d -,0x92,0xa5,0x8e,0x97,0x3b,0x9a,0x96,0x6f,0xa4,0x97,0x24,0x29,0x3b,0xbe,0xaa,0x28,0xb5,0x1f,0x18,0x14,0x30,0x38,0x29,0x20,0xc5,0x5b,0xb2,0xa7,0x14,0x9d,0xb8,0x27 -,0x3b,0x3b,0x4f,0x29,0xc5,0x9a,0xb4,0x24,0x54,0x2c,0x1b,0xe2,0x23,0x2e,0x51,0x24,0x1f,0x43,0x9e,0x2c,0x19,0x0a,0x19,0x28,0x23,0x99,0x1e,0xd4,0xa6,0xa4,0x9d,0xa9 -,0xbe,0xae,0x9b,0xb9,0xa0,0x8f,0x99,0xab,0x89,0x8f,0x96,0x96,0x8d,0x26,0x4e,0xaa,0x2f,0xaa,0x35,0x23,0x1a,0x2a,0x3a,0x11,0x0c,0x1e,0x20,0x09,0x0f,0x23,0x1b,0x4e -,0x0e,0x35,0x1f,0x21,0x25,0x31,0xad,0x97,0xa8,0x61,0x9f,0x92,0x95,0x93,0x9c,0x10,0x2a,0x34,0xa1,0x39,0xa6,0xa0,0xab,0x99,0xd0,0xa1,0x99,0x9f,0xd3,0xc7,0x58,0x39 -,0xa8,0xce,0x9d,0x26,0xc8,0xa7,0x1e,0x2d,0x14,0x42,0xbf,0x26,0x34,0xaa,0x1c,0x4f,0x2e,0x45,0x46,0x2c,0x1c,0x1b,0x18,0x1d,0x9d,0xc3,0xaf,0x3d,0x28,0x1a,0xf7,0xc0 -,0xbc,0xaa,0xbc,0xcd,0xb1,0x36,0x9a,0x94,0x24,0xeb,0x14,0x1f,0x2c,0xc4,0xa4,0xaf,0x92,0xb2,0x37,0xab,0xba,0x9d,0xae,0x31,0x2d,0x5c,0x9a,0xa4,0x56,0xab,0x99,0xc4 -,0xb8,0x2b,0x1c,0x48,0xaf,0xcb,0xbd,0x6e,0x32,0x3d,0x1d,0xbe,0xce,0x26,0x14,0x0d,0x21,0x3c,0x9c,0xb7,0x47,0x27,0x1d,0x30,0x2d,0x39,0x21,0x67,0xc8,0x3e,0x2c,0xb0 -,0x98,0x9b,0xae,0xc7,0x4c,0x3a,0xac,0x99,0x92,0x93,0x90,0x9a,0xa8,0xa8,0xa4,0xa3,0xc5,0x29,0x39,0xd6,0xae,0xc2,0x45,0x4a,0xd1,0xa5,0xd9,0x19,0x12,0x20,0xcc,0xa8 -,0xc6,0x2a,0x29,0x3b,0x68,0xac,0xb7,0x1f,0x15,0x15,0x1d,0xee,0xa6,0xad,0x37,0x2c,0x52,0x67,0x37,0x23,0x2a,0xc3,0xac,0xc8,0x4e,0xfd,0xbe,0xa6,0xb2,0x32,0x1d,0x1f -,0x26,0x4b,0xa8,0xa9,0xac,0xc1,0xf6,0xb4,0xab,0x3a,0x20,0x1e,0x38,0xa7,0xaf,0x40,0x31,0xde,0x9e,0x99,0xf7,0x19,0x17,0x2f,0xac,0xa6,0x6b,0x2a,0x2f,0xbd,0x9d,0x9d -,0xbb,0x1f,0x18,0x1f,0xd9,0xa9,0xac,0xd2,0x2e,0x43,0xb3,0xbc,0x32,0x24,0x25,0xbe,0xa9,0xf5,0x52,0xbe,0xa1,0x9e,0xc7,0x1e,0x1a,0x2b,0xdf,0xb2,0xc4,0x41,0x36,0xb6 -,0x98,0x9a,0xbf,0x1e,0x16,0x22,0xad,0x9e,0xb5,0x2d,0x26,0xcd,0x9a,0x99,0xe3,0x1f,0x21,0x47,0xb9,0xcf,0x3a,0x33,0xbf,0xa3,0xa4,0xb8,0x2f,0x1e,0x24,0x50,0xc3,0xe1 -,0x4e,0x2e,0x2a,0xcb,0xa4,0xa7,0xdb,0xb7,0xbd,0xaf,0x34,0x2c,0x30,0xbd,0xae,0xa9,0x4c,0x20,0x2d,0xbc,0xa7,0x9a,0x9f,0x93,0x80,0x4f,0x15,0x17,0x9e,0x1f,0xb5,0x22 -,0x1a,0x2f,0x00,0x06,0x00,0x9d,0xb0,0x20,0x23,0x0f,0x8d,0x97,0x9e,0x9b,0xaf,0x95,0x9a,0x86,0x8d,0x9c,0x85,0x46,0x16,0xac,0x1a,0x8f,0x80,0xa5,0xa0,0x9f,0x1f,0x18 -,0x30,0x1b,0x14,0x09,0x02,0x03,0x07,0x04,0x04,0x0a,0x0f,0x0c,0x0e,0x15,0x09,0x1b,0xa3,0x97,0xbc,0x5f,0xa4,0x9e,0x89,0x88,0x8b,0x9b,0x8d,0x8a,0x8e,0x80,0x83,0x80 -,0x85,0x83,0x87,0x82,0x8f,0x8a,0x86,0x18,0xd6,0x8a,0x88,0x02,0x2d,0xc6,0x0b,0xa5,0x0c,0x06,0x06,0x00,0x04,0xa5,0x11,0x07,0x03,0x00,0xce,0x05,0x04,0x00,0x0c,0x17 -,0x1a,0xb0,0x46,0x15,0x15,0x8d,0x8d,0x81,0x84,0x84,0x8a,0x81,0x82,0x85,0x85,0x85,0x8d,0x8b,0x85,0x87,0x80,0x95,0x9e,0xba,0x8f,0xda,0x9a,0xae,0x25,0x0e,0x0f,0x28 -,0x07,0x10,0x0b,0x04,0x01,0x06,0x07,0x13,0x09,0x03,0x01,0x04,0x07,0x09,0x0f,0x0a,0xae,0xb9,0x20,0xd8,0x48,0x9d,0x87,0x87,0x92,0x94,0x97,0x9d,0x94,0x92,0x8b,0x82 -,0x86,0x94,0x90,0x80,0x8c,0x8d,0x94,0x85,0x88,0x8c,0x88,0xb1,0x87,0x33,0x0f,0x1c,0x1e,0x0e,0x00,0x16,0x32,0x0f,0x06,0x00,0x00,0x03,0x12,0x0c,0x1f,0x0e,0x0a,0x01 -,0x06,0x08,0x33,0xa4,0x2c,0x8e,0x22,0x8a,0x9f,0xc5,0x89,0x8c,0x80,0x8f,0x93,0x8b,0x81,0x84,0x87,0x83,0x8b,0x91,0x9b,0x8b,0x94,0x8e,0xb1,0x29,0x2a,0x2f,0xbc,0xaa -,0x92,0xd1,0x5d,0x0a,0x02,0x0b,0x1e,0x35,0x04,0x04,0xdb,0x28,0x24,0x07,0x02,0x00,0x4d,0x5b,0x18,0xbd,0x0a,0x0b,0x07,0xa1,0x2a,0x8e,0x87,0x2b,0x98,0x84,0xa0,0x1b -,0x89,0x8d,0x90,0xe5,0x1c,0x80,0x8b,0xa8,0x93,0x9a,0x8b,0x81,0x80,0x8f,0xaa,0xbf,0x96,0x2e,0x64,0xbe,0x36,0x1a,0x15,0x0e,0x00,0x03,0x16,0x17,0x00,0x0b,0x00,0x08 -,0x0a,0x1c,0x8a,0x19,0x00,0x15,0x1a,0x19,0xa2,0x8d,0x2e,0x2d,0x57,0x97,0x8a,0x8d,0x8f,0x8c,0x8e,0x1b,0xae,0x8e,0x80,0x88,0x8a,0xb0,0x8a,0x9e,0xa4,0x80,0x82,0x94 -,0x04,0x26,0x9c,0x80,0x1c,0x08,0x19,0x92,0x0e,0x1f,0x85,0x0b,0x0d,0x0a,0xc6,0x06,0x14,0xa3,0x00,0x0f,0x05,0x03,0x16,0x11,0xcd,0x00,0x0c,0x05,0x1e,0xad,0xd4,0xa2 -,0x11,0x91,0x04,0xa5,0x81,0x82,0x9a,0x21,0xa3,0x9c,0x81,0x86,0x82,0x80,0xb4,0x15,0x81,0x85,0x90,0x61,0xad,0x88,0x8e,0x9a,0x0e,0x08,0xa6,0x80,0x1f,0x08,0x0d,0x19 -,0x4c,0x03,0x19,0x03,0x13,0x10,0x0a,0x1c,0x17,0x0c,0x05,0xba,0x16,0x0a,0x0c,0x1f,0x1e,0x06,0x0e,0x8d,0x91,0xb3,0x0f,0x04,0x1e,0x8f,0x80,0x87,0x8c,0x0e,0x11,0xa8 -,0x88,0x80,0x92,0x8d,0xb3,0x94,0x86,0x92,0x8c,0x9a,0x8b,0x1f,0x9e,0x82,0x26,0xb3,0x18,0xa2,0x83,0x9c,0x16,0x0a,0xb1,0x1e,0x17,0x0a,0x2c,0x1d,0x00,0x04,0x0f,0x11 -,0x0c,0x0f,0x05,0x14,0x12,0x0e,0x03,0x22,0x2c,0x4b,0x13,0xcd,0xaf,0x5b,0x87,0x29,0x8a,0x9e,0x9b,0x89,0x9e,0x8e,0x88,0x8b,0x87,0xa7,0x97,0xa6,0x8b,0x85,0x9a,0x39 -,0xb9,0x82,0x4e,0x33,0x1b,0x7a,0xb1,0x4b,0x19,0xcc,0x0d,0x39,0x97,0xac,0x0a,0x0a,0xbd,0x0b,0x18,0x07,0x1f,0x04,0x26,0xa8,0x07,0x0d,0x0a,0x19,0x13,0x29,0x23,0x11 -,0xd3,0xbd,0x2f,0x0e,0x0c,0x8a,0x99,0x2d,0x9b,0x4d,0x9d,0x9a,0x8c,0x8b,0x8c,0x8f,0x89,0x98,0x90,0x9c,0x98,0x8d,0x83,0x82,0x9d,0x91,0xa9,0xa2,0x46,0x8d,0x1f,0xa7 -,0x3d,0x10,0x0f,0x04,0x29,0x27,0x0b,0x00,0x0a,0x13,0x11,0x0c,0x19,0x09,0x0a,0x07,0x11,0x2e,0x29,0x0b,0xd9,0x41,0x12,0x92,0x3e,0xae,0x8d,0x97,0x9f,0x8f,0x99,0xaf -,0x98,0x89,0x88,0x83,0x83,0xbf,0x8f,0x94,0xa6,0x92,0x8e,0x9f,0x16,0x25,0x4d,0xa2,0xa8,0xd9,0x6b,0x25,0xaa,0x24,0x2a,0x2d,0x1e,0x28,0xa7,0x93,0x11,0x11,0x2a,0x45 -,0x16,0x37,0x0f,0xd9,0x18,0x18,0x0f,0x0e,0x1e,0x07,0x38,0x1f,0x25,0x1e,0x9d,0x19,0x4c,0x1b,0xdf,0x91,0xa1,0xb3,0x8f,0xb2,0xc3,0x8d,0x23,0x8d,0x88,0x85,0xa4,0xac -,0x91,0x9b,0x82,0x8b,0x9e,0x96,0x9c,0xb2,0x9e,0x8e,0xb4,0xa3,0x4d,0x13,0xa8,0x16,0x0a,0x2d,0x12,0x10,0x06,0x35,0x08,0x0d,0x1a,0x03,0x14,0x29,0x3b,0x08,0x34,0x1a -,0x1c,0x27,0x08,0x1d,0x9d,0x4d,0x91,0xa4,0x1f,0x2f,0x26,0x94,0x8f,0x85,0x88,0xa6,0xb3,0x9e,0x8c,0x89,0x8e,0x86,0x94,0x9a,0x8f,0x9c,0xaa,0x9b,0x99,0x1a,0xaf,0xdb -,0xa9,0x12,0x18,0xb0,0x19,0xe2,0x15,0xa4,0x30,0x17,0x1c,0x17,0x0e,0x17,0x20,0x0e,0xba,0x0d,0x0d,0x2a,0x0c,0x10,0x3d,0xb4,0x30,0x47,0x47,0xde,0x23,0x98,0xd3,0x9a -,0xa2,0x21,0x91,0x8c,0x87,0xa2,0x9a,0xae,0x8c,0x9b,0xa7,0x3c,0xb1,0x8b,0x96,0xb3,0xd7,0xcf,0x3f,0x95,0xc9,0x8f,0x2f,0x0e,0xa7,0xac,0x2f,0x22,0x2a,0xeb,0x97,0x1a -,0x1b,0x28,0x16,0x1e,0x2b,0x18,0x0f,0xdc,0xb8,0x1f,0x1d,0x22,0x0a,0xbf,0xcc,0x2c,0x2f,0x55,0x3c,0x12,0x1f,0x14,0x1a,0xa0,0x20,0x20,0xb0,0xd5,0x97,0xe6,0x91,0x8d -,0x9e,0x8a,0x9c,0xa2,0xa0,0x9d,0x89,0x92,0x9f,0xc2,0x91,0x9f,0x8f,0xaa,0xa4,0x98,0x26,0xa4,0x4b,0x0d,0x1c,0x1a,0x0f,0x36,0x11,0x12,0x19,0x1b,0x08,0x07,0x28,0x18 -,0x05,0x34,0x0b,0x19,0x50,0x26,0x92,0xad,0x96,0xae,0x8d,0x93,0xc9,0x9a,0x94,0x93,0xa4,0xb1,0x9d,0x3a,0xbe,0x96,0xfa,0x9f,0x8c,0xeb,0x3b,0x3a,0xcf,0xa2,0x18,0xcf -,0x30,0x26,0x2f,0x4e,0xac,0x4b,0x33,0xa5,0x34,0x4d,0xae,0x0c,0x38,0xe6,0x1a,0x2c,0xd0,0xaf,0x3a,0x3e,0x9c,0xab,0x3f,0x60,0x2f,0x22,0xbb,0x1f,0x21,0x1b,0x1e,0x26 -,0x1e,0xbf,0x0f,0x36,0x29,0x1c,0x25,0x15,0xa5,0x30,0x56,0x42,0x2f,0xa4,0x9a,0xa0,0x92,0x8a,0xa4,0x96,0x8f,0x9e,0xaa,0x8d,0x8b,0x8e,0x9f,0x8d,0xb5,0xaa,0x90,0xab -,0x9d,0x2b,0x1c,0x0a,0x0d,0x1d,0x10,0x0f,0x15,0x16,0x0c,0x0e,0x31,0x16,0x1f,0x0f,0x3e,0x45,0x20,0x2e,0x2a,0xfc,0xa2,0xbc,0x2b,0xa6,0xa3,0xac,0xb3,0x97,0x45,0xab -,0xbb,0xa1,0x3b,0xb2,0xac,0x42,0x92,0xa5,0xa3,0x98,0x96,0x9d,0x99,0xa0,0x47,0xb2,0x43,0x9d,0x3e,0x1c,0x2c,0x18,0xab,0x24,0xb8,0xcf,0x27,0x24,0x2a,0x15,0x2f,0xde -,0xc8,0xce,0x19,0x1f,0x25,0x2a,0x17,0xae,0xda,0x41,0x7c,0x23,0x14,0x64,0x3d,0xda,0xa7,0x57,0xb9,0xa1,0x52,0xba,0x99,0x29,0x9c,0x53,0x4b,0x5e,0xc3,0xbc,0x1d,0x3f -,0x21,0x3a,0xa0,0x9e,0x98,0x95,0xb5,0xab,0xab,0xa8,0xab,0xae,0xa8,0xbc,0x33,0x62,0x29,0x33,0xae,0xb7,0xbf,0x2a,0x3b,0x2e,0x2f,0x28,0x58,0x23,0x1c,0x21,0x1a,0xdc -,0x30,0xb3,0x33,0x2d,0x2d,0x16,0x36,0x37,0xb9,0x58,0xd0,0x3a,0x26,0x1d,0x7d,0x9a,0x9f,0x9f,0xba,0xbe,0x23,0xb1,0x97,0x9c,0x99,0x97,0x9e,0xad,0x9f,0x9f,0x99,0x96 -,0x9a,0xae,0xee,0x40,0x2f,0x30,0x35,0x24,0x23,0x25,0x30,0x50,0x65,0x40,0x3a,0x41,0x31,0x4e,0xd9,0xbf,0x34,0x25,0x1c,0x1a,0x1e,0x32,0xbb,0xbc,0xb6,0xcf,0x34,0x29 -,0x3e,0xbd,0xa7,0xaf,0x3f,0x28,0x20,0x2e,0xe0,0xae,0xaa,0xbf,0x2c,0x25,0x28,0x49,0xaf,0xab,0xac,0x4d,0x43,0x3b,0x50,0x5f,0xb6,0xa9,0xb7,0x6e,0x34,0x30,0x34,0x64 -,0x4f,0x36,0x2f,0x3f,0xce,0xb7,0xaa,0xaa,0xbc,0xec,0x7e,0xda,0xc3,0xb2,0xcd,0x2d,0x20,0x1c,0x1f,0x2f,0x6b,0xbb,0xbe,0xc7,0x4b,0x39,0xcf,0xb0,0xb1,0xd2,0x37,0x2c -,0x2e,0x5c,0xbd,0xab,0xa5,0xb6,0x42,0x3d,0xf5,0xb6,0xa3,0xb2,0x3c,0x26,0x1e,0x23,0x3c,0xbb,0xb0,0xad,0xc0,0x2d,0x2b,0x52,0xad,0xa0,0xa3,0xca,0x3b,0x44,0xc7,0xb9 -,0xb2,0xb5,0xbd,0x3f,0x27,0x29,0x2d,0x5c,0x54,0x2e,0x36,0xd4,0xb7,0xb2,0xaf,0xb2,0xb4,0xca,0x3e,0x3a,0x59,0xb9,0xb5,0xae,0xbf,0xcb,0xd0,0xb0,0xb8,0xac,0xc1,0x41 -,0x20,0x15,0x1a,0x1c,0xbd,0xee,0xc3,0xbe,0x66,0x46,0x5b,0x30,0x34,0x64,0x13,0xae,0x80,0xa1,0x00,0x8a,0x80,0xc8,0x8a,0xe8,0xc3,0x18,0x0e,0x12,0x09,0x11,0x00,0x03 -,0x00,0x01,0x02,0x00,0x03,0x00,0x01,0x02,0x05,0x0b,0x0a,0x0c,0x0e,0x44,0x62,0xbe,0x9a,0x98,0xab,0xcd,0xa4,0x94,0x80,0x81,0x90,0x87,0x80,0x81,0x80,0x81,0x80,0x81 -,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x86,0x84,0x83,0x87,0x8b,0x8e,0xb6,0x38,0xab,0xb8,0x3c,0x41,0x49,0x1b,0x0c,0x0a,0x08,0x03,0x01,0x01,0x01,0x00,0x00,0x00 -,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x04,0x05,0x01,0x04,0x03,0x03,0x00,0x05,0x0b,0x09,0x1b,0x24,0x2a,0x97,0x9f,0x8a,0x86,0x83,0x84 -,0x87,0x85,0x88,0x81,0x82,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x80,0x81,0x81,0x86,0x82,0x89 -,0x84,0x87,0x87,0x83,0x8d,0x89,0x8f,0x90,0x8f,0x9e,0x9e,0x2c,0x17,0x17,0x07,0x07,0x08,0x04,0x03,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x03 -,0x01,0x00,0x01,0x00,0x01,0x01,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x02,0x04,0x02,0x0a,0x0c,0x17,0x0b,0x12,0x28,0x16,0x30,0x1d,0x18,0x17,0x17,0x16 -,0x10,0x29,0x3c,0x2f,0x4e,0xa8,0x9a,0x96,0x98,0x8a,0x81,0x87,0x82,0x81,0x80,0x81,0x81,0x80,0x81,0x80,0x83,0x87,0x85,0x83,0x80,0x82,0x81,0x80,0x81,0x80,0x80,0x80 -,0x80,0x80,0x81,0x80,0x82,0x80,0x82,0x80,0x84,0x83,0x89,0x8e,0x8d,0x9e,0x91,0xb0,0xbd,0x32,0xcc,0xaa,0x4c,0x1d,0x10,0x12,0x12,0x0c,0x09,0x12,0x0c,0x0d,0x0d,0x1f -,0x24,0xc8,0xa9,0xa7,0x92,0x94,0x8a,0x85,0x88,0x8a,0x88,0x8a,0x89,0x87,0x89,0x8e,0x91,0x9c,0x9b,0x93,0x94,0x9c,0x97,0xa9,0x95,0xa4,0xa9,0x99,0x9b,0xa0,0x23,0x2c -,0x09,0x0e,0x08,0x06,0x03,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x03 -,0x01,0x01,0x00,0x03,0x01,0x03,0x06,0x07,0x06,0x04,0x0a,0x09,0x0e,0x0c,0x13,0x13,0x0c,0x1e,0x1e,0xa6,0x9d,0x98,0x88,0x89,0x81,0x84,0x82,0x80,0x80,0x80,0x80,0x80 -,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x84,0x80,0x87,0x85,0x83,0x83,0x85,0x87,0x84,0x88,0x82,0x84 -,0x81,0x84,0x84,0x82,0x84,0x83,0x81,0x81,0x83,0x82,0x84,0x83,0x87,0x88,0x89,0x96,0x94,0x3d,0x2d,0x1c,0x0b,0x0a,0x05,0x09,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00 -,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x05,0x05,0x03,0x05,0x00,0x09,0x07,0x09,0x06,0x0a,0x0f,0x0b,0x0e,0x08,0x0e,0x10,0x21 -,0x3a,0x3b,0xaa,0xa3,0x91,0x8f,0x84,0x82,0x86,0x86,0x82,0x84,0x84,0x86,0x88,0x83,0x8c,0x88,0x9a,0x8e,0x8c,0x92,0x8d,0x8e,0x8d,0x8f,0x93,0x8e,0x88,0x8b,0x8a,0x8a -,0x95,0x89,0x8f,0x90,0x8e,0xd2,0x99,0x2d,0xca,0xad,0xcd,0xb2,0xad,0x34,0x43,0x73,0x33,0x9e,0x36,0x78,0x22,0x20,0x1d,0x15,0x1c,0x10,0x15,0x0e,0x0f,0x0a,0x0e,0x15 -,0x12,0x1f,0x10,0x1c,0x12,0x24,0xc7,0xcd,0x44,0x2c,0xe6,0x27,0x59,0x25,0x36,0xd0,0x3a,0xb2,0x28,0xac,0x9e,0xa3,0xab,0xb0,0xa6,0xaa,0x9f,0xa1,0x8f,0xc5,0xa1,0x3c -,0xd9,0x4d,0x2b,0xe1,0x2c,0xc0,0x21,0x39,0x45,0xa3,0xa5,0x97,0x91,0x8c,0x89,0x89,0x81,0x82,0x80,0x82,0x84,0x80,0x83,0x80,0x81,0x81,0x81,0x84,0x85,0x89,0x8c,0x93 -,0x90,0xa3,0x95,0xd9,0x30,0x43,0x15,0x12,0x08,0x06,0x05,0x05,0x02,0x02,0x01,0x00,0x02,0x00,0x03,0x02,0x03,0x03,0x04,0x07,0x07,0x0d,0x11,0x16,0x0d,0x14,0x13,0x1f -,0x27,0x1f,0xbe,0x1b,0x2b,0x5d,0xd5,0xac,0xac,0xa1,0xa8,0x9d,0x9e,0x8b,0x8a,0x86,0x8c,0x8b,0x84,0x88,0x83,0x88,0x85,0x89,0x89,0x97,0x93,0x91,0x90,0x8c,0x96,0x9d -,0xb9,0x9e,0x96,0x91,0xa5,0x4a,0x39,0x2f,0xb9,0x26,0x2e,0x25,0x14,0x0f,0x07,0x0f,0x0b,0x19,0x0f,0x19,0x0c,0x10,0x1d,0x16,0x56,0x18,0x27,0x11,0x16,0x19,0x16,0x15 -,0x13,0x16,0x09,0x0e,0x07,0x10,0x0f,0x0f,0x1e,0x0e,0x1d,0x1c,0x24,0x3a,0xbb,0x37,0xce,0x2d,0xd7,0xaf,0x2f,0xa6,0x2d,0xb6,0x45,0x33,0xa7,0xb3,0xa1,0x9d,0x97,0x9d -,0x8f,0x8c,0x88,0x87,0x8b,0x8a,0x97,0x8f,0x9e,0xa0,0xcd,0x2d,0x2b,0x16,0x10,0x0b,0x0f,0x0d,0x12,0x14,0x16,0x17,0x25,0x40,0xa6,0x99,0xa9,0x94,0x96,0x8b,0x87,0x8b -,0x89,0x89,0x89,0x89,0x88,0x87,0x84,0x84,0x84,0x87,0x88,0x87,0x89,0x8a,0x8b,0x99,0xaa,0x33,0x20,0x12,0x0d,0x0a,0x06,0x04,0x01,0x01,0x01,0x01,0x01,0x03,0x00,0x02 -,0x01,0x04,0x03,0x08,0x0a,0x09,0x09,0x0a,0x0b,0x0f,0x13,0x12,0x1a,0x17,0x19,0x18,0x20,0xb7,0xa7,0x9e,0x97,0x99,0x94,0x8e,0x8a,0x87,0x88,0x8a,0x89,0x8d,0x88,0x86 -,0x8d,0x88,0x8d,0x8d,0x8e,0x8d,0x87,0x8b,0x89,0x87,0x8b,0x8a,0x8a,0x8a,0x88,0x8d,0x90,0x98,0xa8,0xa1,0xa6,0x5f,0x3f,0x23,0x18,0x16,0x16,0x16,0x11,0x0e,0x15,0x19 -,0x11,0x16,0x1e,0x23,0x16,0x16,0x12,0x18,0x11,0x0f,0x11,0x0c,0x0d,0x07,0x0b,0x0c,0x0c,0x0e,0x0f,0x0c,0x14,0x14,0x1d,0x3f,0x20,0x29,0x27,0x24,0x60,0x28,0x2c,0x27 -,0x18,0x1e,0x1e,0x3b,0xcf,0xbb,0xc1,0xa7,0xa9,0x9c,0x92,0x8c,0x8a,0x8e,0x8b,0x8e,0x8c,0x8e,0x91,0x91,0xa3,0xa7,0x4d,0xc5,0xd3,0xc4,0x2a,0x26,0x28,0x22,0x25,0x22 -,0xb3,0x23,0x37,0x3d,0x2d,0xb5,0xbe,0xa1,0x9c,0xa2,0x99,0x9a,0x8f,0x8a,0x89,0x89,0x84,0x85,0x82,0x83,0x83,0x82,0x85,0x84,0x88,0x8c,0x8f,0x95,0xbd,0xc1,0x12,0x0f -,0x09,0x05,0x08,0x01,0x06,0x03,0x01,0x03,0x02,0x04,0x05,0x04,0x03,0x04,0x03,0x05,0x03,0x04,0x07,0x03,0x08,0x04,0x08,0x0c,0x0f,0x16,0x1e,0x2d,0x41,0xa6,0x9b,0x8f -,0x8f,0x8c,0x8e,0x8e,0x8d,0x91,0x89,0x91,0x8d,0x8d,0x97,0x90,0x92,0x8a,0x8b,0x89,0x85,0x87,0x86,0x85,0x84,0x82,0x82,0x86,0x85,0x8d,0x8a,0x8c,0x97,0x92,0x9d,0xbb -,0x48,0x27,0x2f,0x47,0x24,0x38,0x2c,0x25,0x35,0x1d,0xc5,0x2b,0x1d,0x2a,0x19,0x20,0x1d,0x1b,0x1a,0x0f,0x0d,0x0c,0x07,0x0b,0x0d,0x0c,0x10,0x0f,0x10,0x0e,0x0f,0x1d -,0x1f,0x1f,0x17,0x18,0x1c,0x20,0x17,0x1f,0x16,0x1a,0x18,0x0f,0x1d,0x16,0x5e,0x23,0x48,0xae,0x3b,0xa5,0x9a,0x94,0x8d,0x94,0x94,0x8e,0x94,0x8f,0x8d,0x9a,0x90,0xaa -,0xac,0xb2,0x59,0x99,0xe5,0xb8,0xaf,0x3b,0xf7,0xd8,0x39,0xbc,0x2d,0x27,0x44,0x18,0xd9,0x65,0x47,0xab,0x47,0xa8,0xab,0x98,0x8b,0x89,0x8a,0x85,0x85,0x84,0x81,0x82 -,0x80,0x81,0x81,0x86,0x85,0x8a,0x89,0x8f,0x9a,0xae,0x25,0x1c,0x0e,0x0d,0x0c,0x06,0x04,0x03,0x04,0x02,0x04,0x04,0x04,0x03,0x01,0x04,0x02,0x04,0x03,0x04,0x04,0x02 -,0x03,0x07,0x06,0x0a,0x0c,0x0c,0x1d,0x1f,0x49,0xad,0xa8,0x9b,0xa5,0x9c,0x9c,0x96,0x9c,0x92,0x9c,0xa6,0x9b,0xa2,0x8d,0x93,0x8c,0x8f,0x8d,0x8b,0x87,0x86,0x84,0x85 -,0x89,0x83,0x89,0x86,0x87,0x88,0x8b,0x96,0x99,0xa6,0xa0,0xaa,0x9c,0xb0,0xaf,0xa9,0x5a,0x9c,0xc2,0x9a,0x3c,0x35,0x3a,0x2a,0x24,0x1f,0x1e,0x0f,0x0f,0x06,0x0c,0x0a -,0x0c,0x10,0x0f,0x12,0x11,0x12,0x18,0x25,0x17,0x1b,0x10,0x13,0x1c,0x0c,0x1c,0x0a,0x10,0x0c,0x0b,0x0b,0x0c,0x17,0x18,0x28,0x1b,0x42,0x27,0xb4,0x9e,0xa3,0x9a,0xbc -,0x9e,0x9c,0x9b,0x93,0x9c,0x99,0xa1,0x9f,0xb8,0x9c,0x9d,0x92,0x9b,0x9c,0x94,0x98,0x96,0x9c,0x8c,0xa8,0x9f,0xc5,0xc5,0xbb,0x53,0xb7,0x3c,0x2d,0x1c,0x20,0x1d,0x5a -,0xc0,0xae,0x95,0x9e,0x8a,0x8f,0x89,0x85,0x87,0x84,0x8a,0x88,0x8c,0x89,0x95,0x8f,0xb0,0xaa,0xd7,0x1f,0x3b,0x16,0x1f,0x1a,0x13,0x16,0x0e,0x13,0x16,0x13,0x0f,0x17 -,0x0b,0x0f,0x12,0x0c,0x18,0x0d,0x1a,0x0c,0x0f,0x0d,0x15,0x10,0x17,0x1c,0x22,0x2d,0x21,0xbb,0x34,0xaa,0x5f,0xbb,0xc6,0xb4,0xc2,0xee,0xbd,0x45,0x62,0x2b,0x5e,0xd8 -,0x28,0xaf,0xdc,0xa6,0x3d,0xa9,0xae,0xab,0x9c,0xb4,0x9c,0xb7,0x9d,0xbc,0xa0,0xac,0x9a,0xb1,0xa9,0xab,0xbc,0x9f,0xb3,0x9e,0xa6,0xa4,0xa0,0xa2,0x99,0xa5,0x9a,0xa5 -,0x9b,0xa1,0xa2,0xa2,0xaf,0x9e,0x47,0xa9,0x2a,0xce,0x39,0x3f,0x3a,0x2e,0x2c,0x3d,0x2d,0x27,0x4c,0x2e,0x63,0x2a,0x26,0x29,0x1a,0x2f,0x18,0x1a,0x1f,0x12,0x27,0x17 -,0x1e,0x20,0x24,0x1f,0x3b,0x1c,0x2e,0x28,0x27,0x2a,0x1d,0x26,0x2c,0x1e,0x2f,0x2e,0x1f,0x41,0x24,0x38,0x27,0x38,0x4e,0x34,0x3a,0xc2,0x3b,0xaf,0xbe,0xa9,0xb3,0xad -,0x9f,0xb1,0xa0,0x9a,0xa0,0x9b,0x9d,0x99,0x98,0x9c,0x91,0x98,0x92,0x97,0x91,0x95,0x8e,0x99,0x8e,0x98,0x95,0x8f,0xa1,0x93,0xa7,0xa4,0xa0,0xb8,0xad,0xb5,0x3d,0xb9 -,0x3a,0x2d,0xcd,0x23,0x2f,0x2a,0x1d,0x3c,0x1a,0x27,0x1b,0x18,0x20,0x1f,0x16,0x1e,0x1a,0x19,0x1f,0x13,0x37,0x18,0x20,0x1c,0x16,0x22,0x1d,0x20,0x2f,0x32,0x23,0x5c -,0x23,0x3e,0x22,0x1e,0x30,0x1d,0x66,0x24,0x4b,0x41,0x30,0x3a,0x2c,0x37,0x31,0xc9,0x2f,0xbb,0x3f,0xf5,0xe0,0x45,0xb1,0xee,0xaa,0xb1,0xa0,0xa4,0xa4,0x9e,0x9f,0x9d -,0x9c,0x96,0xa2,0x91,0x9b,0x97,0x93,0x9d,0x91,0x9e,0x91,0x9b,0x92,0x9c,0x99,0x9a,0xac,0x9c,0xb7,0x9e,0x44,0xa2,0xcc,0x39,0xd2,0x28,0x4c,0x1e,0x3e,0x1f,0x29,0x1b -,0x23,0x1c,0x12,0x21,0x12,0x1f,0x11,0x1f,0x14,0x19,0x1a,0x19,0x1b,0x16,0x29,0x19,0x1f,0x1a,0x25,0x1c,0x1c,0x26,0x1e,0x2a,0x22,0x2e,0x1f,0x37,0x38,0x25,0x57,0x2c -,0xcc,0x22,0xbd,0x44,0xd5,0xdc,0xd7,0xa6,0xd4,0x9f,0xb4,0x99,0xb0,0x99,0x9e,0xa8,0x96,0x9e,0x96,0xa1,0x93,0x96,0x99,0x94,0x96,0x8f,0x9a,0x8f,0x96,0x93,0x9d,0x98 -,0x97,0xa2,0x96,0xab,0x9d,0xa8,0xa1,0xaf,0xbb,0xb8,0xbb,0xb8,0x4a,0xc1,0x3e,0x54,0x3d,0x32,0x3b,0x28,0x33,0x20,0x2d,0x1e,0x2c,0x1d,0x24,0x25,0x1d,0x2a,0x19,0x2f -,0x1b,0x28,0x1e,0x21,0x1f,0x23,0x22,0x20,0x3b,0x1c,0x28,0x28,0x1f,0x29,0x22,0x2c,0x28,0x2b,0x2b,0x36,0x27,0x30,0x2d,0x25,0x47,0x23,0xd4,0x2c,0x3b,0x75,0x35,0x3e -,0x48,0xf7,0x4e,0xc4,0x68,0xa8,0x7d,0xb5,0xaa,0x63,0x9d,0xbf,0x9d,0xa7,0xa8,0x9f,0x9f,0xa4,0x9d,0x9c,0xa0,0x93,0xb7,0x91,0xaf,0xa0,0x9b,0xb8,0x9c,0xb3,0xa2,0xa4 -,0xb6,0xaa,0xaf,0xdd,0xb8,0xc5,0x35,0xae,0x2c,0xd0,0x43,0x28,0xc8,0x20,0x48,0x26,0x2c,0x2a,0x2b,0x23,0x29,0x21,0x2a,0x28,0x20,0x39,0x1f,0x28,0x2a,0x20,0x2f,0x1c -,0x2e,0x1f,0x2a,0x29,0x23,0x33,0x25,0x55,0x1f,0x6a,0x1f,0xcf,0x29,0x3c,0x50,0x3d,0xd2,0x38,0xb4,0x37,0xb7,0xe7,0xaf,0xdf,0xb2,0xb7,0xba,0xa3,0xc6,0x9e,0xae,0xa4 -,0xa0,0xb4,0x9f,0xae,0x9c,0xaf,0x9f,0xa9,0xa1,0xaa,0xa3,0xa2,0xb1,0x9c,0xc9,0x9c,0xbb,0xaa,0xaa,0xb0,0xab,0xb3,0xa9,0xc1,0xb5,0xdd,0xb4,0xd5,0xc8,0xbc,0x3d,0xaf -,0x49,0xc9,0x3e,0x65,0x5d,0x38,0xcb,0x2b,0xf5,0x33,0x53,0x2d,0x3e,0x28,0x2e,0x2f,0x29,0x42,0x24,0x4e,0x29,0x31,0x2b,0x26,0x2b,0x25,0x29,0x24,0x28,0x2a,0x31,0x29 -,0x2f,0x2d,0x2d,0x38,0x20,0x3a,0x31,0x2d,0x3f,0x37,0x46,0x49,0x3e,0x6c,0x42,0x3e,0xc1,0x57,0xbb,0xba,0x6e,0xac,0xf2,0xaa,0xbd,0xbd,0xa2,0xaf,0xa5,0xae,0xa3,0xb3 -,0xa4,0xc0,0xa2,0xbd,0xad,0xa8,0xb1,0xac,0xb4,0xab,0xad,0xac,0xb9,0xae,0x54,0xb3,0x57,0xca,0x4b,0xef,0x62,0x44,0x43,0xdc,0x34,0xd9,0x36,0x4b,0x33,0x32,0x3c,0x31 -,0x2d,0x29,0x46,0x25,0xec,0x21,0x4d,0x24,0x2e,0x2c,0x29,0x2e,0x34,0x2f,0x2a,0x37,0x25,0x39,0x2f,0x29,0x49,0x24,0x4b,0x36,0x2f,0x3f,0x36,0xdf,0x37,0x57,0x32,0xb2 -,0x33,0xbd,0x41,0xc4,0xe6,0xd4,0xb7,0xdf,0xae,0xc5,0xaf,0xb4,0xb4,0xb1,0xb2,0xac,0xbc,0xaa,0xc4,0xa8,0xad,0xab,0xa1,0xc1,0x9b,0xbc,0xa6,0xc0,0xa2,0xbf,0xaa,0xac -,0xc0,0xab,0xbe,0xae,0xc8,0xae,0xb5,0xbe,0xb4,0xc9,0xb6,0x5f,0xbe,0x5d,0xe1,0xd1,0x36,0xb0,0x2e,0xbf,0x32,0xc9,0x39,0x46,0x3e,0x34,0x4b,0x2c,0x5f,0x26,0x47,0x2e -,0x3a,0x3b,0x27,0x41,0x2a,0x40,0x2c,0x34,0x29,0x32,0x39,0x2b,0x51,0x25,0xd4,0x28,0xe9,0x2e,0x37,0x3f,0x2d,0x74,0x34,0x75,0x3b,0xcc,0x72,0x71,0xd5,0x41,0xc8,0x5f -,0xbd,0x6c,0xba,0xc3,0xb8,0xac,0xe0,0xa1,0xe4,0xa5,0x5d,0xab,0xbe,0xb6,0xaf,0xbf,0xae,0xea,0xa1,0x49,0xac,0xd4,0xa8,0xbb,0xc1,0xae,0x4e,0xbd,0x58,0xc3,0x3d,0x70 -,0xc8,0x4a,0xcd,0x3d,0xc2,0x34,0xbf,0x41,0x39,0x5e,0x2f,0xd5,0x28,0x5c,0x31,0x43,0x33,0x5a,0x35,0x41,0x38,0x37,0xd3,0x24,0x5d,0x2f,0x38,0x3e,0x33,0x53,0x2b,0x75 -,0x3b,0x78,0x35,0x4a,0x3e,0x2e,0xc4,0x2d,0xce,0x2d,0xba,0x3f,0x4c,0xda,0x48,0xc0,0x3b,0xb2,0x3c,0xc7,0xe2,0xbb,0xbe,0xd0,0xab,0x65,0xaa,0x44,0xab,0x6d,0xbb,0xae -,0xbf,0xa9,0xf8,0xa2,0x4a,0xa7,0x4c,0xaa,0xd0,0xc4,0xa9,0x5a,0xa6,0xe1,0xa9,0xcc,0xbf,0xc6,0xbf,0xcc,0xee,0xbe,0x5e,0xb3,0x4b,0xd9,0x54,0x3e,0xb5,0x2e,0xbb,0x3f -,0x5b,0xf7,0x45,0xd1,0x36,0x48,0x2f,0x5d,0x2b,0xf9,0x2e,0x3c,0x5b,0x2c,0xdc,0x2c,0x54,0x33,0x3f,0x37,0x3f,0x3a,0x2f,0xcf,0x2a,0xc3,0x2a,0x5a,0x42,0x2f,0xc7,0x30 -,0xc9,0x42,0xc3,0x3c,0x7c,0x52,0xd5,0xea,0x3b,0xb7,0x34,0xbb,0xec,0xc7,0xbb,0x6b,0xaa,0x64,0xb6,0x5c,0xbc,0xef,0xc2,0xb8,0xcb,0xaf,0x5e,0xaa,0xcc,0xae,0x4b,0xb8 -,0xbd,0xc8,0xbf,0x47,0xab,0x64,0xb7,0x5c,0xcd,0xbc,0x4c,0xb6,0x3e,0xc2,0x48,0xbf,0x4a,0xf9,0x4a,0x45,0xdf,0x38,0xc8,0x2a,0xbf,0x3b,0x4f,0x6c,0x40,0x62,0x43,0x42 -,0x4a,0x3c,0x2f,0x65,0x43,0x3a,0x64,0x2f,0xbb,0x34,0x4a,0x4c,0x3d,0x50,0x39,0x6c,0x3c,0xbd,0x30,0xb8,0x39,0xea,0xd0,0x3f,0xc8,0x44,0xe2,0x4a,0xd3,0x61,0xd9,0xbf -,0x5b,0xb7,0x40,0xb3,0x44,0xcf,0xd0,0x69,0xbb,0x4c,0xbc,0x4e,0xab,0x53,0xad,0x5a,0xbb,0xd3,0xcb,0xb7,0x3f,0xb3,0x4c,0xb3,0x70,0xc2,0x59,0xca,0xb3,0x53,0xaa,0x30 -,0xbe,0x50,0xd1,0xb8,0x2f,0xb1,0xf0,0xc4,0x57,0xdf,0x3b,0xcd,0xd8,0x55,0x64,0x2d,0xb5,0x41,0x4a,0x76,0x3c,0x4d,0x47,0x59,0x32,0x55,0x2f,0xbb,0x4a,0x4a,0xd3,0x2f -,0xc3,0x37,0x7e,0x35,0x51,0x4c,0xf3,0x3b,0x4a,0xcc,0x31,0xb6,0x3d,0xec,0x3d,0xbc,0xca,0x3a,0xc5,0xe2,0xbf,0x3d,0xb6,0x48,0xce,0xed,0xd0,0xb8,0x43,0xb2,0x4e,0xbe -,0x79,0xca,0xde,0x4b,0xbd,0xe2,0xcd,0x3c,0xb7,0xd9,0x78,0xb9,0xd2,0xcc,0x46,0xbc,0xdd,0x4a,0xf7,0xb8,0x68,0x3e,0xbf,0x46,0xcd,0x3f,0xba,0x41,0x44,0xc4,0xe4,0xdf -,0x43,0xce,0x78,0xbd,0x49,0xc8,0x39,0x46,0xc0,0xe5,0x5f,0x3b,0xd2,0x5b,0x5b,0xbd,0x40,0xcf,0x47,0xb9,0x49,0x41,0xdb,0x36,0xb4,0x42,0xd9,0x3f,0xdc,0xc0,0xd9,0x48 -,0xd0,0x74,0x3c,0xca,0x34,0xf7,0xde,0x70,0xc2,0x33,0xc5,0x67,0xde,0x75,0xe6,0x47,0xbd,0xe3,0x67,0xba,0x2d,0xb0,0x2f,0xc7,0xcd,0x47,0xc0,0x7b,0xd0,0xbe,0x59,0xdb -,0xda,0x41,0xb3,0xdc,0x4c,0xb2,0x50,0xb1,0x3d,0x76,0xbf,0x42,0xb9,0x4c,0xba,0x42,0xb2,0x49,0xbe,0x35,0xe5,0xd9,0x30,0xbb,0x3e,0xb6,0x3a,0xd8,0x51,0x45,0xb8,0x38 -,0xe0,0x3a,0xcb,0x42,0xdc,0xd8,0xaf,0xba,0xb6,0xb1,0x1f,0x26,0x0e,0x9f,0x96,0xa7,0xb7,0xbf,0x3c,0x1f,0x1b,0x0e,0x2e,0x34,0xba,0x3b,0xd6,0xa6,0x1f,0x38,0xd8,0xb9 -,0xbf,0x2f,0xa3,0x97,0x8f,0x99,0x5d,0x55,0xb2,0x3e,0x1f,0x2b,0x9a,0x89,0x9c,0x9f,0x3b,0x15,0x3f,0xbf,0x16,0x05,0x0b,0x14,0x37,0xdf,0xab,0x17,0x3d,0x93,0x94,0x9b -,0x43,0x9d,0x96,0x8a,0x97,0x5c,0x1f,0xea,0x91,0x96,0xbd,0x21,0x12,0x06,0x1b,0xa1,0x34,0x0f,0x17,0x2d,0x3f,0x63,0x11,0x0d,0x39,0x92,0x8a,0x95,0x9c,0xaa,0x93,0x98 -,0x9f,0x2d,0x18,0x25,0x75,0x91,0x99,0x32,0x19,0x23,0x18,0x12,0x23,0x2e,0x47,0x15,0x3a,0x9c,0xaf,0x37,0x27,0xbd,0x26,0x9c,0xaf,0xd1,0x97,0x8f,0xa0,0xba,0xb6,0x53 -,0x74,0x1f,0xd1,0x9e,0x96,0x9e,0xaf,0x12,0x16,0xc7,0x40,0x11,0x0b,0x0c,0x30,0xba,0xad,0x27,0x12,0xb2,0x8c,0x95,0x6a,0xaa,0xa9,0x92,0x85,0x98,0x1a,0x1e,0x5e,0x8e -,0x9b,0xfc,0x1d,0x0a,0x0c,0x3f,0xae,0x23,0x15,0x18,0x1d,0xac,0x29,0x0e,0x1a,0x5f,0x89,0x8f,0x97,0xa4,0xa5,0xab,0x8d,0x9b,0x1e,0x0f,0x23,0x98,0x8d,0x99,0x28,0x25 -,0x16,0x1e,0x1c,0x16,0x49,0x25,0x1b,0x6c,0xbc,0xca,0xc8,0x70,0x22,0x59,0xc8,0x2e,0xba,0x98,0x95,0x93,0xa9,0xd6,0x26,0x1b,0x57,0xa1,0x91,0x8f,0xa0,0x21,0x1c,0x33 -,0x4a,0x2c,0x0d,0x09,0x17,0x26,0xc7,0xa3,0x2f,0x1f,0xa6,0x9e,0x96,0xa1,0xbf,0x9f,0x8c,0x8d,0x31,0x22,0x2a,0xab,0x91,0x9d,0x5f,0x12,0x0c,0x12,0x4c,0xb3,0x44,0x1d -,0x10,0x3f,0x5f,0x29,0x17,0x2f,0xa3,0x8e,0x95,0xaa,0xb3,0x9f,0x94,0x99,0xc9,0x16,0x1d,0x28,0x9b,0x94,0xb9,0x25,0x2a,0x22,0x27,0x1c,0x1a,0x29,0x36,0xaf,0x3f,0x2a -,0xa4,0xf1,0x51,0xbf,0x5a,0x32,0x2b,0xb4,0x94,0x94,0xa8,0xd8,0x1f,0x3e,0x29,0xb7,0xaf,0x97,0x8e,0xc9,0x4f,0x2b,0x1d,0x38,0x1d,0x1c,0x15,0x10,0x1c,0x3a,0xa6,0x61 -,0x49,0xb9,0x9d,0xa1,0xb2,0xb7,0x97,0x94,0x99,0xbc,0x2e,0x33,0xac,0x9c,0xa3,0x61,0x12,0x19,0x1a,0x31,0xa5,0x34,0x1a,0x16,0x24,0x2a,0x1e,0x1c,0xac,0xa6,0x91,0x97 -,0xbc,0x98,0xb1,0x8c,0xa0,0x4c,0x22,0x0f,0x33,0xa7,0x9a,0x9e,0x26,0x26,0x45,0x1d,0x17,0x19,0x5e,0xcb,0xca,0x62,0x51,0x4f,0x3c,0xef,0xb7,0x2b,0x1d,0x43,0x9c,0x92 -,0x8c,0x9e,0x36,0x1e,0x26,0x45,0x44,0xae,0x94,0x94,0xb0,0x3d,0x1d,0x1c,0x1a,0x2c,0x33,0x1a,0x0c,0x1c,0x39,0xbf,0xaf,0xc1,0xb1,0xb2,0xa5,0xa4,0xa5,0x9a,0x98,0x9e -,0xad,0x78,0x3e,0xb5,0xa9,0xc1,0x60,0x23,0x16,0x17,0x2c,0xcd,0x4d,0x1e,0x23,0x1b,0x29,0x1e,0x3e,0xa4,0x9d,0x9e,0x9b,0xa5,0x9e,0x9c,0x93,0x98,0x2a,0x25,0x12,0x57 -,0x6f,0xad,0xa9,0xc4,0x31,0x38,0x16,0x16,0x19,0x4b,0xab,0x45,0xb7,0x4f,0xd6,0xc5,0xb0,0xea,0x27,0x1d,0xd4,0x9d,0x8f,0x97,0x9f,0x3e,0x28,0x2d,0x3c,0x3b,0xa4,0x9a -,0x9a,0x9e,0x40,0x17,0x15,0x2a,0x28,0x20,0x17,0x12,0x1b,0x39,0x9e,0xaa,0xaa,0xa9,0x41,0xa4,0xac,0x97,0xa7,0xa0,0x9d,0xbf,0x3b,0xcc,0x43,0xc5,0xbc,0x64,0x6e,0x15 -,0x1f,0x27,0xef,0x2e,0x23,0x1f,0x12,0x18,0x2a,0xc8,0x99,0xac,0x9c,0x9d,0xb1,0x97,0x9d,0x96,0xa4,0x28,0x3e,0x21,0x1e,0xbc,0xd3,0xa5,0xae,0xb8,0x21,0x1a,0x20,0x1a -,0xb6,0x59,0x47,0x55,0x33,0xc4,0x40,0xbf,0x55,0x19,0x2e,0xb6,0x9b,0x99,0x9b,0x9a,0xee,0x2c,0x3d,0x45,0x38,0x9e,0x97,0x99,0xa2,0x29,0x1e,0x26,0x26,0x19,0x23,0x15 -,0x0e,0x29,0x2f,0xab,0xa3,0xb7,0xae,0xcf,0xa7,0xab,0xa6,0x9a,0x9f,0x97,0xc0,0x46,0xae,0x29,0xa4,0xbd,0x3f,0xe1,0x15,0x2a,0x3b,0x34,0x2f,0x27,0x1e,0x12,0x19,0x4a -,0xd6,0xad,0x99,0xb0,0x9d,0x9f,0x9c,0xa1,0x9e,0xa1,0x2b,0xd0,0x17,0x2b,0xc9,0x3f,0x9b,0xab,0x37,0x2e,0x1b,0x1e,0x32,0x3f,0xb9,0x2c,0x3c,0x35,0x6d,0x59,0x3d,0x3c -,0x20,0x69,0xa9,0xa8,0xa1,0x9c,0xa7,0x9d,0x55,0x3e,0x2d,0xfa,0xa6,0xa8,0x96,0xdf,0x3b,0x28,0x2a,0x23,0x23,0x1d,0x0d,0x17,0x20,0x4b,0xc7,0xaf,0xb3,0xa9,0xaf,0xa1 -,0xab,0xd9,0x9a,0x9e,0x95,0xa9,0x46,0xbc,0x2e,0xb3,0xb7,0x2c,0x4f,0x19,0x42,0x2a,0x1e,0xbe,0x17,0x17,0x27,0x16,0xf4,0x44,0x3b,0x99,0xac,0x93,0x99,0x9b,0x9f,0xa0 -,0xa6,0xbc,0x32,0x26,0x2e,0x46,0xb3,0xe4,0xa9,0x31,0x36,0x1f,0x2a,0x33,0x2e,0x37,0x39,0x4f,0x4c,0x2b,0xbc,0x2f,0x1e,0xb7,0xdd,0xa4,0xb0,0x94,0xbc,0x9b,0xa2,0xc6 -,0x60,0x2d,0xb3,0xae,0xb1,0xb6,0xb7,0x34,0x3d,0x25,0x40,0x1c,0x16,0x15,0x18,0x24,0x45,0xe7,0xc7,0xb9,0x9f,0xa8,0xaa,0xaf,0xb3,0x97,0xa0,0x99,0xaa,0xe8,0xcf,0xed -,0x4a,0xb0,0x2e,0x1c,0x4a,0x2b,0x36,0x21,0x37,0x1d,0x12,0x2d,0x28,0x26,0x36,0xad,0xa7,0x9f,0x98,0xa1,0xa0,0x98,0xad,0x9b,0x3f,0x3c,0x2d,0x1e,0xbc,0x32,0xb6,0x57 -,0x2b,0x36,0x39,0x30,0x4b,0x2b,0x68,0x59,0x35,0x3e,0x37,0xde,0x2a,0x37,0xbe,0xc6,0xbe,0xae,0x9f,0x9d,0xa5,0xa5,0xb1,0x4c,0x68,0xb9,0xab,0xd6,0xc4,0xbf,0x2b,0x3f -,0x32,0x3a,0x19,0x13,0x21,0x15,0x26,0x30,0x26,0xa1,0xc8,0xb2,0xa3,0xae,0x9d,0xc5,0x95,0x91,0xaa,0xa4,0xb5,0xb7,0xd9,0x5c,0xc1,0x24,0x28,0x2b,0x2e,0x2a,0x1e,0x2f -,0x1a,0x1e,0x3e,0x20,0x34,0x3d,0xb2,0xa5,0xab,0x9e,0x9a,0x9d,0x9a,0xa4,0xad,0xb7,0x26,0x41,0x25,0xcb,0x6b,0x3c,0x46,0x2d,0x5e,0x2f,0x34,0xc9,0x30,0x42,0xc5,0x2b -,0x3c,0x33,0x38,0x6d,0x22,0xbf,0x3a,0xcd,0x9f,0xcb,0x9a,0xac,0x9d,0xbe,0xce,0xb1,0xc6,0xa4,0x50,0xc4,0xca,0x31,0xb7,0x26,0x38,0x1d,0x1f,0x1d,0x15,0x27,0x2c,0x3c -,0x3f,0xbb,0xb5,0xb2,0xdf,0x9b,0xad,0x97,0x9e,0x9f,0x9c,0xf5,0xae,0xbe,0xb8,0x61,0x25,0x3b,0x2c,0x1f,0x2e,0x1f,0x1e,0x28,0x29,0x28,0x20,0x2c,0xbc,0xe4,0xc4,0x9e -,0xa8,0x9e,0x9d,0xa4,0x9c,0xad,0xc0,0xee,0x3d,0x3e,0xbc,0x4e,0x3e,0x6d,0x40,0x35,0x42,0x2e,0x3d,0x31,0x6c,0x31,0x20,0xaf,0x1f,0x40,0x4d,0x3f,0xcf,0x26,0xac,0xa8 -,0xb4,0xaa,0x9e,0xa3,0xad,0xc1,0xaf,0xb8,0xae,0xc3,0x52,0xa6,0x41,0x55,0x44,0x2d,0x1e,0x1e,0x1a,0x1b,0x1f,0x23,0x38,0x2f,0xc3,0x6d,0xaf,0xb8,0xb1,0x9c,0xa8,0x98 -,0xa9,0x9d,0xa1,0xc3,0xa9,0xe5,0xcd,0x3c,0x29,0x4c,0x29,0x1e,0x2b,0x1e,0x37,0x1a,0x2e,0x31,0x1e,0xbc,0x58,0xa8,0xa8,0xaf,0x9a,0x9e,0xac,0xa7,0xae,0xed,0xc7,0xfd -,0x3c,0xcb,0x6c,0x6b,0xc2,0x3b,0x45,0x46,0x3b,0x34,0xdf,0x2d,0x25,0x42,0x25,0x3c,0x2b,0x44,0x3d,0x48,0x36,0xbf,0xa3,0xb5,0xa6,0xa1,0x9d,0xae,0xcc,0xb2,0xa7,0xd3 -,0xad,0xc8,0x75,0xc7,0x31,0xfa,0x25,0x1e,0x29,0x1b,0x1d,0x2d,0x1e,0x27,0xdd,0x36,0xbe,0xd9,0xae,0xa3,0xa5,0xa1,0xa0,0x9d,0xa4,0xa0,0xa1,0xaf,0xc0,0xd1,0x3c,0x31 -,0x35,0x27,0x28,0x1e,0x1f,0x1d,0x1c,0x25,0x1d,0x3d,0x36,0x47,0xa9,0xa7,0xc8,0x9b,0x9b,0xa5,0xac,0xae,0xa8,0xc2,0xb6,0x5b,0xbc,0xcc,0x3a,0xdd,0x52,0x46,0x4e,0x37 -,0x62,0x4e,0x1e,0x35,0x2d,0x23,0x2f,0x2a,0x46,0x24,0xd3,0x5c,0xda,0xab,0xaf,0xa6,0xa2,0xb2,0xa7,0xa4,0xaf,0xac,0xb7,0x9f,0x3a,0xe3,0xc3,0x35,0x3a,0x2a,0x29,0x1f -,0x1d,0x20,0x21,0x29,0x32,0x3b,0x40,0x79,0xc3,0xb5,0xae,0xa8,0x9d,0xa2,0x9c,0xa4,0xa9,0xa6,0xad,0xbf,0xb7,0x31,0x46,0xed,0x1c,0x37,0x21,0x1e,0x24,0x1e,0x22,0x1f -,0x29,0x46,0x3d,0xee,0xa5,0xa7,0xa4,0xa7,0x9e,0x9e,0xca,0xaa,0xaf,0xc1,0xb5,0x32,0xb5,0x5b,0x41,0x4c,0x3d,0xdc,0x2c,0x37,0x2f,0x2d,0x40,0x2e,0x2d,0x3c,0x3f,0x38 -,0x2c,0x37,0x4b,0xb1,0xc7,0xb6,0xa7,0xa8,0xad,0xad,0xa3,0xb0,0xad,0xa4,0xb7,0xb2,0xca,0x3f,0xc1,0x2c,0x32,0x2c,0x1f,0x1d,0x1c,0x2a,0x21,0x1f,0x33,0x3d,0x47,0xc3 -,0xcb,0xa7,0xa5,0xa9,0x97,0xab,0x9e,0x9a,0xac,0xa6,0xaf,0xba,0xba,0x3f,0x37,0x2d,0x2f,0x29,0x1a,0x22,0x1a,0x2f,0x1c,0x29,0x42,0x52,0xb4,0xd7,0xb4,0xac,0xa6,0xaf -,0xa1,0xb8,0xa6,0xab,0xba,0xb3,0xc0,0xcf,0xed,0x54,0x44,0x47,0x31,0x35,0x38,0x2c,0x2a,0x35,0x22,0x2c,0x2c,0x3f,0x3c,0x37,0x59,0x76,0xaa,0x68,0xa8,0xaa,0xae,0xad -,0xa7,0xb4,0xa8,0xa8,0xc8,0xa8,0x47,0xb4,0xdb,0x39,0x3f,0x30,0x1f,0x29,0x25,0x1e,0x24,0x1e,0x3b,0x29,0x31,0xbd,0x45,0xac,0xae,0xad,0x9d,0x9f,0xa3,0x9f,0xae,0xa9 -,0xa3,0x57,0xc3,0x3c,0x4d,0x38,0x29,0x30,0x24,0x24,0x25,0x22,0x26,0x21,0x3e,0x45,0xcb,0xbc,0xae,0xb0,0xb4,0xad,0xab,0xa1,0xb8,0xa9,0xb3,0xbf,0x4f,0xc6,0x76,0x5c -,0x56,0x42,0x4d,0x5d,0x42,0x39,0x33,0x28,0x4a,0x2c,0x2d,0x41,0x2f,0x54,0x3f,0xdb,0xb2,0x6d,0xc2,0xb0,0xae,0xc3,0xb6,0xad,0xb0,0xb2,0xb9,0xb5,0xcf,0xce,0xee,0xd1 -,0x4f,0x3d,0x2c,0x2d,0x2b,0x20,0x2d,0x25,0x47,0x24,0x37,0x4f,0xdf,0xdd,0xba,0xa6,0xb7,0x9c,0xad,0xa2,0xaa,0xae,0xa6,0xb5,0xcf,0x54,0xd5,0x3f,0x34,0x2d,0x2e,0x2c -,0x20,0x34,0x1f,0x33,0x39,0x37,0xdc,0x56,0xc3,0xd0,0xbd,0xb5,0xa6,0xc2,0xa3,0xb7,0xbe,0xb0,0xcc,0xc3,0x56,0xc4,0xe9,0x42,0x44,0x5b,0x4e,0x43,0x2c,0x34,0x3e,0x2c -,0x48,0x34,0x3d,0x46,0x3d,0xc5,0x55,0xb5,0xbf,0xc1,0xbf,0xad,0xb2,0xbe,0xb9,0xb2,0xa5,0x43,0xb6,0xc9,0xd4,0xd6,0x3f,0xce,0x2c,0x37,0x2a,0x2b,0x3b,0x2a,0x2e,0x3e -,0x3b,0x48,0xcc,0x4b,0xad,0xbb,0xb8,0xac,0xb0,0xa7,0xb3,0xac,0xc0,0xae,0xd8,0x70,0x43,0x3a,0x41,0x2c,0x4b,0x2b,0x32,0x2c,0x2c,0x3e,0x3c,0x48,0x69,0xce,0xdd,0xc1 -,0x5d,0xb0,0xad,0xcd,0xa9,0xc0,0xb8,0xbe,0xbb,0xbe,0x5e,0x62,0x5d,0xe2,0x39,0x59,0x3a,0xde,0x48,0x33,0x3c,0x35,0x3c,0x36,0x3b,0x38,0xfe,0x39,0xca,0xc8,0xd1,0xb7 -,0xdc,0xab,0xcd,0xbc,0xbc,0xaf,0xb3,0xb5,0xbb,0x5d,0xbb,0x44,0xcd,0x4e,0x37,0x42,0x2e,0x2e,0x39,0x2e,0x2e,0x3e,0x3b,0x4b,0x4a,0x3e,0xca,0xbd,0xb4,0xae,0xab,0xaa -,0xb8,0xaf,0xb4,0xb8,0xc7,0xc8,0x46,0x4f,0x4e,0x44,0x45,0x31,0x41,0x29,0x31,0x3a,0x4b,0x39,0x41,0xe9,0x42,0xd0,0x4d,0xba,0xd8,0xae,0xb4,0xca,0xb4,0xc7,0xbb,0xdb -,0xb3,0xc8,0xce,0x4f,0x56,0xfa,0x33,0xf9,0x4b,0x39,0x3d,0x3f,0x43,0x42,0x3f,0x36,0x3d,0x39,0x5a,0x4d,0xd7,0xbd,0xc8,0xba,0xbc,0xb4,0xba,0xbd,0xba,0xb0,0xc0,0x7c -,0xc8,0x49,0x57,0x71,0x59,0x3d,0x3a,0x2c,0x2d,0x3b,0x2b,0x5a,0x32,0x58,0x69,0x44,0xc5,0xc7,0xb2,0xb8,0xaf,0xb1,0xac,0xbc,0xad,0xc5,0xcf,0xc0,0x43,0xdc,0x37,0x48 -,0x3e,0x3c,0x39,0x36,0x36,0x31,0x4e,0x3f,0xe8,0x42,0x6a,0xda,0xfc,0xca,0xbf,0xb7,0xbf,0xb4,0xd6,0xb0,0xdd,0xcf,0xbc,0x4b,0xba,0x61,0x5e,0x6c,0x52,0x50,0x4c,0x4e -,0x3c,0x50,0x2e,0x4f,0x3f,0x40,0xef,0x38,0xcf,0x3f,0xe4,0xde,0xd6,0xbe,0xb6,0xd1,0xb8,0xaf,0xda,0xb6,0xce,0xb2,0xd9,0xd6,0x71,0x51,0x53,0x35,0x7b,0x30,0x42,0x2e -,0x3f,0x3e,0x38,0x4f,0x3e,0xd3,0x54,0xbd,0xd6,0xb5,0xbb,0xb0,0xaf,0xc9,0xb0,0x6a,0xdc,0xcd,0xe2,0xe3,0x53,0x4c,0x47,0x56,0x36,0x3d,0x38,0x3d,0x41,0x3b,0x68,0x3e -,0x74,0x5c,0xc9,0xed,0xc8,0xc9,0xbe,0xb2,0xde,0xb8,0xea,0xc0,0xd2,0xee,0xc7,0xf6,0xeb,0x45,0xdc,0x3f,0xe2,0x3d,0x4f,0x53,0x3a,0x67,0x2e,0x5e,0x3d,0x53,0x59,0xf4 -,0x59,0xde,0xcd,0xce,0xb4,0xd2,0xbf,0xb8,0xbb,0xd3,0xbe,0xd2,0xc8,0xbd,0x47,0x6d,0x41,0x3c,0x46,0x33,0x48,0x3b,0x37,0x4c,0x41,0x43,0xea,0x48,0xcf,0xcd,0x7d,0xbf -,0xc1,0xaf,0xb0,0xc6,0xb3,0xbc,0xdf,0xc4,0xc9,0xe5,0x5e,0x49,0x52,0x3a,0x3a,0x3e,0x2d,0x76,0x3c,0x44,0x4b,0x49,0xf5,0x7c,0xcf,0xcf,0xd6,0xe9,0xc0,0xcd,0xbd,0xf0 -,0xc7,0xdb,0xc1,0xc7,0xdb,0xc3,0x72,0xbf,0x51,0xcb,0x4d,0x3b,0x4e,0x38,0x5c,0x3b,0x49,0x3f,0x60,0x70,0x4d,0xda,0x3d,0xea,0x61,0xe7,0xba,0xc2,0xcf,0xbe,0xba,0xe3 -,0xbf,0xc6,0xc1,0xc1,0x5f,0xbc,0x49,0x4a,0x51,0x3b,0x3d,0x37,0x38,0x42,0x3a,0x3b,0xcd,0x43,0xcf,0x5e,0xdc,0xc3,0xd3,0xb9,0xb9,0xc4,0xc2,0xba,0xcf,0xc0,0xe5,0xe1 -,0x61,0x56,0xdb,0x48,0x3f,0x46,0x3c,0x3e,0x57,0x43,0x45,0x4c,0x4b,0xd0,0x5f,0xdc,0xea,0xe8,0xcf,0xc5,0xbb,0xd0,0xc8,0xcf,0xc4,0xdc,0xe2,0xc7,0xdf,0xcf,0xc1,0x6c -,0x5a,0x46,0x4a,0x51,0x31,0xed,0x58,0x31,0x59,0x44,0x63,0x54,0x51,0xda,0x4e,0xdf,0xc5,0xc2,0xd0,0xc6,0xc4,0xbb,0xc3,0xc1,0xcc,0xd7,0xbd,0xc8,0xe1,0x47,0x77,0x3a -,0x3c,0x3b,0x3c,0x48,0x2f,0x65,0x3d,0x49,0x5a,0x6d,0xd3,0x7a,0xbf,0xc4,0xb8,0xcf,0xb6,0xd8,0xbf,0xbc,0x68,0xc6,0x53,0xd0,0x5e,0x5f,0x3e,0x4f,0x47,0x3b,0x4b,0x3e -,0x4a,0x43,0x5f,0x75,0xe6,0xdc,0x5e,0xcf,0xe8,0xc5,0xcc,0xc6,0xc7,0xdd,0xcd,0x60,0xc0,0xde,0xce,0xd2,0xcb,0x5d,0xd0,0x53,0x4e,0x6c,0x35,0xf2,0x39,0x61,0x45,0x3e -,0xf8,0xf2,0xfe,0x4a,0xda,0x54,0xbc,0x4e,0xbf,0xc5,0x5a,0xb8,0x57,0xb9,0xeb,0xc8,0xd0,0xc8,0xc8,0xde,0xcc,0x41,0x54,0x30,0x43,0x39,0x3a,0x51,0x3a,0xd2,0x50,0x6c -,0x48,0x5e,0xe4,0xc2,0xbe,0xc1,0xbc,0xcf,0xbb,0xe1,0xc9,0x5b,0xc6,0xf0,0x5d,0xcd,0x4c,0xdf,0x3f,0x4c,0x44,0x47,0x54,0x46,0xed,0x45,0xfa,0x64,0xd8,0x46,0x5f,0xd5 -,0xdc,0xbb,0xe4,0xc0,0xcb,0xcc,0x52,0xcb,0xd9,0xe0,0xf5,0x5b,0xbb,0x4f,0xdf,0x48,0x59,0xf2,0x5b,0xf3,0x36,0xf2,0x3f,0x4c,0x54,0x66,0x3f,0x4f,0xd5,0xcf,0xc7,0x51 -,0xb7,0xd4,0xbb,0x5d,0x4e,0xca,0xd5,0xb9,0xcb,0xd4,0xd2,0x79,0x3d,0x51,0x47,0x5a,0x54,0x31,0xf6,0x37,0x4e,0x5c,0x5e,0xc5,0x48,0xcc,0x6b,0xca,0x6d,0xb6,0xbc,0xc6 -,0xbd,0x49,0xca,0x49,0xfa,0x4e,0xcf,0x64,0x66,0x66,0x51,0xd9,0x33,0x63,0x46,0xd6,0x43,0xc9,0xb7,0x4b,0xd9,0x43,0xd0,0x47,0xcf,0xc7,0xd2,0xb8,0xe2,0xce,0x3e,0xdb -,0xd1,0x49,0x4d,0xcb,0xd2,0x40,0x4f,0x3d,0xd2,0x48,0x64,0x5e,0x5b,0xd2,0x43,0xd2,0x4b,0xfd,0x6d,0xd8,0x7c,0x73,0xca,0xd7,0xbe,0xdb,0xb8,0x6e,0xc9,0x6f,0x6f,0x6c -,0x42,0xbc,0x57,0x6b,0x45,0x6d,0x59,0x56,0xeb,0x43,0x3f,0x4a,0xf4,0x44,0xef,0xdd,0xbc,0xc0,0xe8,0xbe,0x46,0xbd,0x61,0x38,0xd6,0x79,0xba,0x5f,0xb2,0xce,0x38,0x44 -,0x46,0x69,0x43,0x4a,0xcf,0xb2,0x3e,0xcb,0x35,0x46,0xdd,0x3d,0xc1,0xdd,0xae,0xc1,0x4e,0x44,0x3c,0x4d,0xc7,0xc0,0xc7,0xcc,0xe9,0xea,0x3e,0x3d,0xeb,0xce,0xc1,0xe6 -,0xbf,0x3a,0x3c,0x3f,0x4c,0xbd,0x65,0x54,0x4a,0xbe,0xe7,0x62,0x50,0xcd,0xbb,0x3d,0xc9,0xcf,0xf4,0x64,0x5e,0xc1,0x5c,0xc1,0xe4,0x7d,0x63,0x57,0x44,0x53,0x45,0xc3 -,0x44,0x4b,0xc9,0x2b,0xba,0x4c,0xb4,0xee,0x46,0xa8,0x6a,0xbb,0x3a,0xe8,0x41,0x49,0xc9,0x45,0xbf,0xba,0xce,0x67,0xd6,0x2f,0x5c,0x49,0xba,0x5a,0x3d,0xaf,0x41,0xf1 -,0x6d,0x44,0xc7,0x45,0xe2,0xc7,0x3f,0xde,0xbb,0x47,0xc0,0xb7,0xda,0x4b,0x2a,0xce,0x5e,0xb9,0xf8,0x4f,0xbd,0x58,0x54,0x33,0xd3,0xc3,0xb6,0x5d,0x4c,0xd7,0x54,0x51 -,0x3b,0xc5,0x47,0xb8,0x4a,0xef,0x71,0x33,0xb9,0x3d,0xb9,0xbd,0xe6,0xcf,0x6c,0xce,0x58,0x37,0xce,0xc3,0x40,0xce,0x4c,0x62,0xe0,0x32,0xd1,0x6f,0xec,0x45,0xde,0xd3 -,0xe1,0x37,0xe9,0xd4,0x38,0xac,0x38,0xc3,0xad,0x3d,0x47,0xd1,0xad,0xd7,0x3f,0xb4,0xbe,0x53,0x3f,0x5e,0x67,0x4a,0x38,0x4f,0x3c,0xc4,0x26,0xbc,0xc1,0x22,0xed,0x39 -,0xb7,0xeb,0x2a,0x99,0x99,0x57,0xdf,0x22,0xaa,0xcd,0x9d,0x2a,0x42,0x1e,0x03,0x0a,0x05,0xaf,0x2c,0x45,0x34,0x34,0x87,0x93,0x9c,0xa3,0x9d,0xa9,0xa7,0x86,0xa0,0xf4 -,0x8c,0x3b,0xd6,0x9e,0x1d,0x8a,0x86,0x8a,0x8d,0x8f,0x40,0x18,0x0f,0x02,0x06,0x00,0x02,0x00,0x07,0x02,0x06,0x01,0x06,0x05,0x0b,0x12,0x16,0xd3,0xa2,0x8e,0x95,0x8a -,0x8f,0x8e,0x9a,0x8d,0x95,0xa8,0x9b,0x9b,0x8e,0x8b,0x86,0x83,0x83,0x80,0x85,0x80,0x8c,0x87,0x8c,0x18,0x97,0x80,0x8b,0x05,0x2a,0x0d,0x04,0x08,0x00,0x05,0x02,0x00 -,0x05,0xbf,0x0e,0x0c,0x00,0x0e,0x2d,0x00,0x04,0x00,0x2e,0x2f,0xa1,0x98,0x1f,0x08,0x14,0x9f,0x8d,0x8a,0x8e,0x8a,0x25,0x93,0x84,0x80,0x81,0x80,0x87,0x82,0x94,0x99 -,0x87,0x97,0x98,0xa7,0x8a,0xae,0xa6,0xb2,0x21,0x0d,0x0e,0x0a,0x15,0x18,0x07,0x05,0x28,0x0e,0x1b,0x2a,0x06,0x0a,0x00,0x04,0x0f,0x28,0x0b,0x07,0x1e,0x29,0x27,0x19 -,0x18,0x3e,0x0c,0x51,0x9d,0x3e,0xa0,0x83,0x85,0x92,0x8b,0x85,0x86,0x3b,0x9a,0x80,0x93,0x8e,0x86,0x80,0x8a,0x8d,0x8e,0x4e,0x87,0x0d,0x0b,0xa4,0x12,0x24,0x1e,0xb1 -,0xb7,0x04,0x09,0x05,0x00,0x06,0x26,0xbb,0x6c,0x22,0x13,0x00,0x04,0x0b,0x13,0x0c,0x0b,0xad,0x14,0x39,0x84,0x86,0x80,0x81,0x80,0x97,0x13,0x94,0x89,0x8a,0x87,0x85 -,0x86,0x8c,0x9c,0x75,0xb5,0xa2,0x1a,0x04,0x23,0x22,0x21,0x83,0x88,0x8f,0x8d,0x3c,0x1e,0x02,0x16,0x95,0x01,0x15,0xbb,0xac,0x9a,0x05,0x08,0x01,0xa0,0x1d,0x12,0xa0 -,0x00,0x0c,0x8a,0x80,0x98,0x87,0xa2,0x06,0x16,0x8e,0x1d,0x09,0x80,0x54,0x54,0x16,0x03,0x84,0x38,0x0a,0x07,0x00,0x1d,0xb3,0x93,0x86,0xc7,0x27,0x17,0x10,0x14,0x15 -,0xac,0x2b,0x8c,0x9f,0x18,0xa3,0xa5,0x50,0x25,0x15,0x06,0x07,0x00,0x18,0x3e,0x94,0x8b,0xa3,0x84,0x9d,0x8a,0x8c,0x56,0x80,0x88,0x80,0x80,0x80,0x82,0x80,0x85,0x9f -,0x37,0x8d,0x80,0xd1,0xcf,0x18,0x81,0x9d,0x9b,0x8f,0x9f,0x1c,0x03,0x10,0x8d,0x85,0x09,0x34,0x16,0x93,0x07,0x0f,0x9a,0x00,0x04,0x00,0x08,0x03,0x06,0xaf,0x02,0x07 -,0x0a,0x08,0x0a,0x0f,0x0d,0x00,0x0d,0x18,0x8f,0x2f,0x95,0xe4,0x01,0x0e,0x00,0xa5,0x92,0x2d,0xa6,0x08,0x8a,0x80,0x86,0x80,0x83,0x80,0x17,0x3f,0x80,0x85,0x81,0x8b -,0x90,0x80,0x88,0xa0,0x13,0x1a,0x8e,0x92,0x03,0x0c,0x02,0xaf,0xa3,0x09,0x92,0x04,0x0d,0x05,0x02,0x36,0x08,0x03,0x11,0x0f,0x08,0x03,0x07,0x2d,0x0e,0x0a,0x0d,0xa6 -,0x8b,0x90,0x84,0x83,0x87,0x80,0x80,0x80,0x84,0x4c,0x87,0x80,0x82,0x80,0x98,0x83,0xa0,0xa1,0x8a,0x4e,0x22,0x0d,0x0e,0x04,0x07,0x9e,0x2e,0x03,0x0b,0x10,0x09,0x05 -,0x00,0x05,0x17,0x03,0x03,0x00,0x13,0x05,0x00,0x01,0x06,0x01,0x06,0x00,0x0c,0x0c,0x1b,0x8a,0x02,0x8d,0x9b,0xbb,0x14,0x0f,0x8d,0x8c,0x8b,0x8e,0x80,0x88,0x88,0x8e -,0x86,0x83,0x82,0x83,0x88,0x8c,0x8e,0x89,0x80,0x84,0x80,0x87,0x8b,0x8c,0x0b,0x1f,0x91,0x9f,0x82,0x99,0x3e,0xb9,0x04,0x4f,0x5a,0x2c,0x0e,0x03,0x0d,0x03,0x07,0x95 -,0x1a,0x01,0x98,0x0d,0x00,0x02,0x00,0x26,0x0a,0x2f,0x2d,0x08,0xbd,0x18,0x12,0x05,0x0c,0x90,0x07,0x08,0x14,0x0a,0x83,0x8f,0xaa,0x80,0xa0,0xd0,0xd2,0x24,0x80,0xa7 -,0x88,0x80,0x82,0x80,0xb2,0x9d,0xa8,0x38,0x2c,0x1e,0x0b,0x95,0x0d,0x8a,0xa6,0x15,0x85,0xa8,0x0b,0x00,0x0c,0x99,0x1d,0x2c,0x92,0x0f,0xbf,0x05,0x0f,0x0f,0x04,0x06 -,0x08,0x00,0x08,0x06,0x33,0x81,0x9c,0x82,0x9a,0x8f,0xad,0x4d,0x81,0x81,0x80,0x80,0x81,0x81,0x82,0x86,0x80,0x83,0x81,0x94,0x09,0xa2,0x4d,0x8e,0x80,0x3c,0x9d,0x5a -,0x09,0x05,0x00,0x0c,0x1b,0x00,0x48,0x0e,0x00,0x00,0x01,0x03,0x00,0x02,0x00,0x00,0x00,0x00,0x04,0x8c,0x0a,0x0f,0x1f,0x00,0x0c,0x00,0x1e,0xbe,0xad,0x9a,0x9f,0x97 -,0x8f,0x1c,0x8d,0x9e,0x96,0x8c,0x15,0x8f,0x8f,0x88,0x80,0x83,0x81,0x80,0x81,0x87,0x87,0x8c,0x80,0x88,0x81,0x81,0x9a,0x88,0xb9,0xb3,0x8c,0x13,0x0e,0x0a,0x07,0x16 -,0x07,0x83,0x28,0x2f,0x9a,0x01,0x09,0x00,0x05,0x10,0x14,0x1e,0x26,0x0c,0x0b,0x1b,0x25,0x0d,0x2c,0x14,0x00,0x05,0x0c,0x20,0x85,0x86,0xa7,0x8f,0xf6,0x31,0x1c,0x0f -,0x9c,0x9e,0x93,0x92,0xa3,0xb8,0x1e,0x9c,0x50,0x0b,0xd0,0x14,0x0c,0x09,0x0b,0x82,0x8b,0xb9,0x92,0xa8,0x05,0x02,0x09,0xa3,0x31,0x77,0x92,0x1e,0x84,0x50,0xaf,0x86 -,0xb4,0x2f,0x2a,0x0a,0x1c,0x1c,0x9c,0x80,0x1b,0x91,0x1d,0x11,0x19,0x06,0x2e,0x96,0x9b,0x97,0x9c,0xa6,0x84,0x9a,0x89,0xa3,0x96,0x87,0xa8,0x98,0x9d,0x87,0x80,0x86 -,0x85,0x80,0x92,0x93,0x9d,0x87,0x84,0x9f,0x84,0x8a,0x82,0x24,0x0c,0x0f,0x03,0x02,0x02,0x00,0x01,0x00,0x05,0xac,0x08,0x02,0x03,0x08,0x03,0x00,0x05,0x10,0x06,0x18 -,0x12,0x08,0x10,0x0e,0x0c,0x0f,0x1d,0x09,0x09,0x15,0x2c,0x4c,0x82,0x85,0x8b,0x80,0x91,0x9b,0x8e,0x91,0x82,0x83,0x80,0x83,0x85,0x8c,0x86,0x8b,0x96,0x8e,0xba,0x09 -,0x0d,0x17,0x11,0x84,0x8e,0x2c,0x8d,0xaa,0x0a,0x16,0xa8,0x8a,0x48,0x83,0x9d,0x95,0x8c,0xca,0x5b,0x47,0xcc,0x05,0x13,0x04,0x13,0x0d,0x8e,0x8a,0x16,0xc6,0xb5,0x18 -,0x1e,0x0f,0x27,0x4b,0xa4,0x9e,0x2b,0x1e,0x19,0x11,0x06,0x12,0x01,0x03,0x00,0x06,0x00,0xa9,0x99,0x20,0x9e,0x54,0x18,0x0b,0x07,0xfd,0xc5,0xcd,0x96,0xa2,0xa7,0x3e -,0x98,0x2e,0x27,0xed,0x1f,0x0e,0x3e,0xcf,0x8c,0x80,0x89,0x88,0x8a,0x93,0x34,0x16,0xa2,0x9d,0x27,0xa2,0xa4,0xba,0xbc,0x3a,0x16,0x1d,0x1a,0x0a,0x0c,0x35,0x0d,0xa0 -,0x80,0xa2,0x8b,0x87,0x96,0x9a,0x1c,0x99,0x85,0x87,0x80,0x83,0x82,0x88,0x8b,0x88,0x8a,0x8f,0x95,0x1d,0xb0,0x1e,0xb7,0x80,0xbd,0x27,0x6a,0x02,0x03,0x00,0x05,0x0e -,0x05,0x0e,0x0c,0x0a,0x05,0x09,0x09,0x05,0x05,0x03,0x00,0x03,0x00,0x18,0x8a,0x1b,0x14,0x23,0x0c,0x0c,0x00,0x19,0x8f,0xaf,0x8f,0x8e,0x92,0x89,0x9f,0x88,0xa1,0xa5 -,0x98,0x16,0xad,0x2b,0xa5,0x80,0x94,0x97,0x86,0xc7,0x91,0x3a,0xa0,0x80,0x8e,0x81,0x82,0x80,0x84,0x89,0x8b,0x8d,0x97,0x97,0x18,0x2a,0x1f,0xc2,0x80,0x37,0x24,0xa4 -,0x1a,0x12,0x08,0x0b,0xa3,0x12,0xa2,0xb2,0xa8,0x62,0x08,0x25,0x0d,0x09,0x0f,0x02,0x05,0x02,0x0d,0x8a,0x1c,0x20,0xa1,0x11,0x09,0x05,0x0f,0x9b,0x2a,0xac,0x92,0xad -,0x2c,0x0a,0x1f,0x36,0x0c,0x09,0x03,0x05,0x03,0x1d,0x83,0x56,0xc1,0xa2,0x25,0x1e,0x0d,0xb8,0x86,0x94,0x8e,0x86,0x88,0x8f,0xa5,0x9b,0x94,0xea,0x2a,0x09,0x0d,0x12 -,0xab,0x80,0x9f,0xac,0x96,0x61,0x23,0x15,0xb4,0x8e,0x3a,0xa4,0x98,0x97,0x5b,0x37,0xa1,0xa3,0x2f,0x1c,0x3b,0xb2,0x99,0x88,0x80,0x85,0x80,0x81,0x80,0x8a,0x92,0x83 -,0x82,0x89,0x87,0x88,0x8e,0xaf,0x0b,0x09,0x0e,0x00,0x03,0x00,0x03,0x00,0x0f,0xcd,0x05,0x09,0x07,0x04,0x02,0x00,0x09,0x0c,0x07,0x0e,0x13,0x11,0x05,0x05,0x0d,0x1c -,0x0c,0x06,0x09,0x0d,0x0f,0x8e,0x80,0x95,0x87,0x8c,0x95,0x6b,0x37,0x87,0x88,0x90,0x8d,0x8c,0x8a,0x96,0x9e,0x8d,0x8d,0x93,0xba,0x9e,0x8f,0x97,0x80,0x82,0x85,0x85 -,0x8a,0x8b,0xcd,0x21,0x8e,0x93,0x98,0x93,0x97,0x96,0x63,0x17,0xd5,0x4e,0x1d,0x0b,0x10,0x19,0x04,0x88,0x8c,0xda,0x68,0x13,0x10,0x02,0x02,0x4b,0x22,0x1d,0x1e,0x27 -,0x20,0x09,0x0c,0x1c,0x21,0x0d,0x03,0x05,0x0b,0x05,0x86,0xa2,0x18,0x63,0x0a,0x0a,0x00,0x06,0x5a,0x2f,0x6e,0xb6,0xd5,0x9f,0x2e,0xe5,0x98,0xb7,0x35,0x10,0x3d,0xeb -,0x2b,0x80,0x89,0x91,0x97,0xe1,0xaf,0x13,0x2a,0x85,0x92,0x8b,0x8d,0x8b,0x8b,0xb3,0xca,0x9f,0x56,0x1a,0x07,0x0a,0x0e,0x10,0x82,0xa8,0xac,0x9a,0x29,0xb5,0x0d,0x22 -,0x87,0x90,0x87,0x84,0x82,0x83,0x90,0x8d,0x83,0x8d,0xa9,0x3b,0xa2,0xa9,0x9c,0x80,0x93,0x99,0xa8,0x1a,0x0c,0x00,0x0a,0x29,0x0d,0x1f,0x26,0x11,0x07,0x02,0x04,0x08 -,0x03,0x04,0x00,0x07,0x08,0x23,0x87,0x1b,0xeb,0xe0,0x1e,0x28,0x09,0xc2,0x86,0x8f,0x8a,0x95,0xa8,0x4b,0x10,0x15,0xec,0x19,0x0f,0x08,0x10,0x0c,0x58,0x85,0x2b,0x9d -,0xa5,0xbd,0x37,0x0d,0x96,0x83,0x8f,0x8c,0x8f,0x9b,0x4d,0x1c,0xad,0x95,0xbb,0x73,0x23,0x28,0x0f,0x94,0x87,0x26,0x9c,0xb9,0xf6,0x1c,0x0d,0x8e,0x8f,0x9d,0x8b,0x91 -,0x9c,0xc2,0xbf,0x91,0x8d,0x92,0xa3,0x15,0x1a,0x0d,0x8d,0x93,0x28,0x91,0x4c,0x35,0x0f,0x06,0xb7,0x3a,0x2d,0x41,0x1c,0x27,0x0a,0x09,0x2c,0x3b,0x16,0x07,0x04,0x07 -,0x06,0x88,0x96,0xbc,0x8b,0xa4,0xb8,0x08,0x09,0x9b,0x38,0x37,0xac,0x38,0x2e,0x09,0x0f,0x26,0x10,0x0d,0x04,0x08,0x08,0x16,0x81,0x9a,0x95,0x87,0xa3,0xac,0x09,0x1c -,0x88,0x92,0x87,0x87,0x88,0x8c,0x36,0xae,0x9e,0xd8,0xc8,0x15,0x2d,0x1b,0xaf,0x80,0x9f,0x8a,0x87,0x98,0xa5,0x17,0x9d,0x80,0x87,0x80,0x85,0x85,0x8e,0x3f,0xb3,0xc1 -,0xf5,0xe1,0x0e,0x2f,0x0d,0x6a,0x8d,0x0e,0xda,0x11,0x0a,0x0e,0x00,0x23,0xa4,0x2d,0xbe,0x38,0x57,0x13,0x02,0x1b,0x1f,0x40,0xc3,0xb9,0x9f,0x23,0x88,0x88,0x29,0x99 -,0xe0,0x2a,0x0c,0x01,0x28,0x11,0x03,0x06,0x03,0x03,0x01,0x00,0x03,0x04,0x09,0x04,0x01,0x09,0x08,0x8b,0xad,0x25,0x87,0x9d,0x90,0xaa,0x56,0x88,0x8a,0x88,0x84,0x89 -,0x82,0x91,0x96,0x8a,0x92,0x9a,0x2d,0xae,0x9c,0x9b,0x80,0x89,0x87,0x80,0x86,0x82,0x9c,0x9f,0x80,0x87,0x85,0x87,0x89,0x8b,0xf0,0x47,0xbf,0x0d,0x0b,0x01,0x07,0x00 -,0x0c,0x9b,0x08,0x0d,0x13,0x06,0x04,0x00,0x07,0x1d,0x0b,0x1c,0xc3,0x8f,0x88,0x94,0x8b,0x85,0x8c,0x8d,0xb9,0xb7,0xbb,0x8b,0x81,0xb0,0x96,0x2e,0x0b,0x01,0x00,0x02 -,0x03,0x04,0x0a,0x10,0x2b,0x1a,0x02,0x08,0x0a,0x0b,0x03,0x02,0x0f,0x10,0x8d,0x84,0xa9,0x8c,0xaa,0xa8,0x4d,0x0d,0x97,0x8a,0x8a,0x86,0x86,0x83,0x99,0x33,0xa1,0xc3 -,0xd7,0x2f,0x4a,0xa9,0xa5,0x80,0x84,0x8c,0x84,0x89,0x8b,0xac,0x18,0x88,0x8b,0x8a,0x8c,0x99,0x8c,0x3d,0x0b,0x0c,0x08,0x09,0x03,0x01,0x09,0x05,0x9c,0x22,0x11,0x27 -,0x0e,0x29,0x1e,0x1b,0x8b,0x84,0x83,0x81,0x82,0x80,0x8c,0x93,0x8b,0x8f,0x9f,0x17,0x0a,0x09,0x05,0xba,0x0a,0x03,0x0b,0x05,0x09,0x01,0x02,0x0c,0x0b,0x0d,0x0d,0x14 -,0x68,0x13,0x0d,0x2a,0x1c,0x14,0x04,0x08,0x08,0x11,0x88,0x97,0x99,0x8c,0x8f,0x91,0x19,0x0e,0xa9,0xa3,0x9e,0x9c,0x8c,0x83,0x8e,0x9c,0x99,0x95,0x95,0x79,0x64,0xbb -,0x90,0x80,0x85,0x85,0x84,0x89,0x8e,0x1a,0x0f,0xb3,0xb3,0x9d,0x2e,0x48,0x97,0x1f,0x08,0x08,0x08,0x0c,0x00,0x05,0x05,0x19,0x85,0x88,0x8c,0x89,0x86,0x80,0x8d,0xa4 -,0x84,0x82,0x80,0x81,0x86,0x89,0xa9,0x17,0x0d,0x02,0x02,0x00,0x01,0x00,0x04,0x21,0x0d,0x06,0x0a,0x14,0x0f,0x05,0x06,0x1d,0x73,0x99,0xac,0x5e,0xb3,0x41,0x1e,0x15 -,0x0e,0x16,0x18,0x1a,0x10,0x20,0x8f,0xa3,0xbb,0xff,0xb1,0x97,0xbb,0x2c,0x9f,0x8b,0x84,0x8c,0x93,0x8a,0x93,0x9d,0x8f,0x92,0x8f,0x92,0x93,0xbe,0x28,0x8d,0x8e,0xa3 -,0xba,0xb7,0xa5,0x7b,0x1a,0x19,0x0e,0x21,0xdd,0x0f,0x0a,0x0c,0x18,0x53,0x32,0x9e,0x91,0xa5,0x9f,0x99,0x86,0x82,0x82,0x80,0x80,0x83,0x81,0x8d,0xae,0x51,0x30,0x35 -,0x0b,0x04,0x05,0x02,0x04,0x05,0x03,0x02,0x02,0x01,0x01,0x00,0x0b,0x19,0x20,0x43,0x1c,0x1e,0x33,0x19,0x1d,0x1c,0xdf,0x95,0xb7,0xc7,0x9c,0x9b,0x99,0x9f,0xce,0x47 -,0x1d,0x22,0x34,0x49,0x97,0x86,0x8a,0x9f,0xac,0x9d,0x98,0x9b,0x8f,0x8a,0x87,0x88,0x86,0x93,0xa3,0x9b,0x93,0xa0,0x23,0x2a,0x2f,0x1c,0x21,0x26,0x15,0x24,0x13,0x0c -,0x08,0x02,0x11,0x7b,0xa3,0x93,0x9a,0x92,0x88,0x88,0x84,0x83,0x81,0x81,0x81,0x84,0x85,0x89,0x95,0xa4,0x47,0x0b,0x06,0x08,0x03,0x03,0x02,0x06,0x05,0x01,0x01,0x02 -,0x03,0x0a,0x10,0x12,0x12,0x1b,0x20,0x15,0x16,0x29,0x27,0x38,0x2b,0x2f,0xd9,0x35,0xa4,0xac,0xc4,0x5a,0x1a,0x1e,0x51,0xb8,0x96,0x8b,0x8d,0x95,0x9e,0x9d,0xab,0xa2 -,0x91,0x89,0x86,0x8a,0x88,0x89,0x97,0x99,0xa8,0xaf,0xad,0xdb,0x3c,0xbe,0xa5,0x55,0x34,0x21,0x18,0x0e,0x0d,0x11,0x18,0x1b,0x41,0x9b,0x59,0x43,0xb3,0x9c,0x92,0x8d -,0x86,0x82,0x82,0x81,0x82,0x84,0x83,0x86,0x8d,0x65,0x28,0x27,0x17,0x14,0x0e,0x09,0x06,0x01,0x02,0x01,0x02,0x05,0x08,0x0d,0x0f,0x10,0x0d,0x0a,0x0d,0x14,0x10,0x15 -,0x11,0x1a,0x33,0x45,0x5a,0x2a,0x31,0xbb,0x2c,0x30,0xaa,0x9a,0x99,0x91,0x8d,0x93,0xaf,0xaf,0xa3,0xb5,0x9b,0x8d,0x8b,0x8d,0x8b,0x8e,0x94,0x94,0xa2,0xc3,0xa6,0xa3 -,0x9f,0x9e,0x9d,0xa1,0xa4,0xb5,0x1e,0x0b,0x0d,0x1c,0x1f,0x19,0x2a,0x44,0x1a,0x14,0x13,0x23,0x4f,0xad,0x93,0x8e,0x89,0x83,0x84,0x83,0x85,0x87,0x86,0x8b,0x90,0x97 -,0xa5,0x9c,0xeb,0x1e,0x0f,0x07,0x03,0x02,0x03,0x06,0x07,0x08,0x0d,0x09,0x08,0x08,0x0b,0x09,0x0e,0x16,0x18,0x18,0x19,0x1f,0x25,0x1c,0x26,0x2a,0x1c,0x37,0xda,0xa6 -,0x94,0x8d,0x90,0x9b,0xa5,0xa4,0xa2,0x9a,0x9c,0x8f,0x8d,0x8b,0x8c,0xa6,0xa2,0x95,0x9b,0xa7,0x9f,0x9a,0x95,0x95,0x90,0x99,0xba,0xb1,0x4c,0x1c,0x15,0x23,0x34,0x34 -,0xd1,0x33,0x1b,0x11,0x0e,0x0b,0x16,0x46,0xa6,0x9c,0x8c,0x8b,0x8e,0x89,0x86,0x84,0x84,0x85,0x84,0x86,0x86,0x88,0x98,0xc8,0x26,0x16,0x07,0x02,0x03,0x04,0x03,0x07 -,0x04,0x03,0x03,0x04,0x04,0x05,0x0c,0x14,0x1a,0x21,0x2d,0x26,0x20,0x24,0x37,0x20,0x2d,0x32,0x2e,0xb1,0x9d,0x9c,0xb7,0xde,0xbb,0x36,0x21,0x3d,0xa6,0x9e,0x9a,0x8f -,0x90,0x9c,0xa0,0x98,0x92,0x8f,0x8e,0x8a,0x8d,0x8d,0x88,0x89,0x92,0x98,0x9e,0x9f,0xbe,0x2c,0x2b,0x33,0x66,0x30,0x18,0x0c,0x0b,0x0a,0x06,0x0b,0x0f,0x22,0x4a,0xbc -,0xae,0xa5,0x96,0x8e,0x89,0x87,0x83,0x82,0x83,0x83,0x81,0x83,0x8a,0x93,0xad,0x22,0x0f,0x0e,0x0e,0x08,0x08,0x09,0x03,0x01,0x02,0x02,0x02,0x04,0x09,0x0b,0x0a,0x10 -,0x11,0x14,0x12,0x10,0x1b,0x15,0x1d,0x2c,0xe0,0x9a,0x9a,0x9c,0x99,0xa7,0xcb,0xed,0xa3,0x90,0x8f,0x8e,0x8c,0x8f,0x9a,0xa6,0xa1,0xa2,0x9f,0x94,0x98,0x9d,0x95,0x96 -,0x98,0x9d,0x9d,0xa4,0xde,0xd4,0xa7,0xa1,0x9c,0x99,0xaa,0xce,0x38,0x27,0x22,0x2a,0x5a,0xb8,0xb8,0x5c,0x36,0x2f,0x2a,0x2f,0x28,0x2b,0x35,0x29,0x28,0x2e,0x36,0x33 -,0x28,0x1f,0x1c,0x18,0x1a,0x19,0x1f,0x28,0x39,0x49,0x27,0x1f,0x20,0x21,0x2c,0x3e,0x3a,0x46,0x3c,0x48,0x39,0x23,0x2b,0x33,0x2d,0x24,0x24,0x3f,0x3e,0xec,0xb9,0xb7 -,0xba,0xbc,0x3e,0x51,0xcc,0xc4,0xa3,0xa8,0xad,0x55,0x3c,0x43,0x40,0x40,0xbd,0xae,0xae,0xa6,0xa2,0x9f,0x9e,0x9c,0x99,0x9d,0x9e,0x9e,0x9a,0x9a,0x98,0x8e,0x8f,0x94 -,0x9b,0x9e,0xa5,0xab,0xb4,0xae,0xb9,0xd3,0x5e,0x2f,0x28,0x1f,0x1e,0x24,0x1c,0x19,0x19,0x15,0x17,0x1b,0x1d,0x1a,0x19,0x14,0x19,0x1a,0x19,0x1c,0x27,0x34,0x31,0x3a -,0x32,0x32,0x30,0x3d,0x45,0x3d,0x49,0x36,0x2f,0x45,0x31,0x35,0x34,0x29,0x2b,0x27,0x29,0x2f,0x33,0x4f,0x6b,0x59,0xcf,0x3c,0x5e,0xfa,0xc0,0xaa,0xb5,0xbb,0x48,0xbf -,0xb1,0xd1,0xab,0x9f,0x9c,0x9a,0x9a,0x94,0x95,0x8f,0x8a,0x8c,0x8c,0x88,0x89,0x8b,0x8c,0x8e,0x8c,0x8f,0x95,0x9f,0x9a,0xa8,0xb7,0xb0,0xe9,0x4c,0x38,0x30,0x2b,0x22 -,0x1b,0x14,0x10,0x0e,0x11,0x0d,0x13,0x12,0x06,0x07,0x1c,0x8c,0xe1,0x00,0xaf,0x87,0x1e,0xad,0x0c,0x19,0x1c,0x13,0x0e,0x23,0x38,0x00,0x08,0x00,0x02,0x00,0x00,0x02 -,0x02,0x05,0x04,0x00,0x00,0x02,0x04,0x10,0xae,0x9e,0xbf,0xc1,0x99,0x8f,0x95,0x92,0x83,0x80,0x80,0x85,0x8a,0x81,0x80,0x80,0x82,0x82,0x81,0x81,0x82,0x80,0x80,0x80 -,0x82,0x81,0x80,0x80,0x80,0x80,0x82,0x81,0x89,0xa2,0x9e,0x8e,0x8f,0xbe,0x39,0x19,0x05,0x02,0x02,0x0f,0x12,0x04,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00 -,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x0a,0x0e,0x08,0x0f,0x1a,0x31,0x1e,0x08,0x17,0x98,0x89,0x88,0x8d,0xa9,0xc3,0xac,0x89,0x80,0x80 -,0x80,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x83,0x82,0x80,0x80,0x81,0x83,0x82,0x80,0x80,0x80,0x80,0x84,0x8c,0x96 -,0x91,0x8b,0x98,0xb1,0x35,0x30,0x19,0x07,0x04,0x0a,0x12,0x0e,0x06,0x02,0x00,0x00,0x00,0x02,0x0c,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -,0x00,0x00,0x00,0x02,0x03,0x01,0x00,0x00,0x01,0x03,0x02,0x00,0x01,0x03,0x09,0x0c,0x03,0x01,0x00,0x07,0xca,0x89,0x94,0x25,0x1a,0x22,0xb4,0x73,0xbb,0x8e,0x83,0x83 -,0x88,0x92,0xa1,0x98,0x90,0x89,0x80,0x83,0x8c,0x90,0x87,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x82,0x81,0x80,0x80,0x80,0x81,0x82,0x81,0x81,0x84,0x83 -,0x80,0x80,0x80,0x84,0x98,0xae,0x40,0xab,0x8a,0x89,0x9e,0x15,0x04,0x05,0x0d,0x10,0x17,0x10,0x0a,0x02,0x03,0x06,0x0d,0x0d,0x13,0xb0,0x90,0x8c,0xb6,0xc3,0x9b,0x8d -,0x86,0x89,0x89,0x8a,0x86,0x85,0x83,0x8b,0xdd,0x2d,0xa2,0x86,0x80,0x87,0x99,0xa5,0x9d,0x98,0x93,0x8d,0x8a,0x8d,0x8f,0xb5,0x1e,0x09,0x04,0x0a,0x0f,0x0c,0x00,0x00 -,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x07 -,0x06,0x02,0x00,0x00,0x00,0x00,0x08,0x2e,0x1d,0x09,0x07,0x0d,0x1f,0x38,0xc0,0x8d,0x81,0x81,0x85,0x87,0x82,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81 -,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x83,0x87,0x83,0x81,0x82,0x82,0x87,0x89,0x86,0x83,0x81,0x80,0x80,0x81,0x85,0x82,0x80 -,0x81,0x82,0x81,0x80,0x80,0x82,0x8a,0x8e,0x96,0x97,0x9f,0x64,0x2b,0x2a,0x0f,0x14,0x1c,0x07,0x03,0x00,0x01,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00 -,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x00,0x01,0x00,0x09,0x26,0x14,0x08,0x06,0x0e,0x50,0x30,0x3d,0x9c,0x91,0x88,0x8d,0x89 -,0x81,0x81,0x82,0x82,0x84,0x87,0x88,0x87,0x84,0x82,0x86,0x9b,0xb6,0x39,0x3e,0xa4,0x97,0x8d,0x95,0x45,0x9a,0x83,0x84,0x87,0x8a,0x86,0x81,0x8e,0xba,0xba,0x9d,0x8d -,0x9a,0xa4,0x93,0x8c,0x97,0xb4,0x30,0x19,0x19,0x13,0x19,0x3a,0x2c,0x1f,0x16,0x0a,0x07,0x03,0x03,0x0b,0x0f,0x0c,0x19,0x4a,0x2c,0x0f,0x0e,0x1f,0xb8,0x3e,0x29,0xde -,0xaf,0x9e,0xb6,0x66,0x97,0x93,0x6c,0x23,0x14,0x1b,0x2c,0x18,0x1c,0x22,0x3a,0xb3,0xdd,0xb8,0x3d,0x2c,0x26,0x27,0x23,0x2c,0x97,0x8b,0x91,0xc8,0x36,0xc8,0xae,0x32 -,0xd8,0xb6,0xa8,0xa2,0xc6,0x90,0x86,0x83,0x82,0x83,0x84,0x83,0x83,0x83,0x81,0x80,0x80,0x80,0x81,0x82,0x87,0x8b,0x93,0x98,0xa5,0x97,0x85,0x83,0x8c,0xc4,0x18,0x1c -,0x0f,0x05,0x09,0x09,0x0d,0x05,0x01,0x02,0x03,0x04,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x02,0x04,0x06,0x0a,0x0d,0x0c,0x07,0x07,0x0d,0x0f,0xae,0x8d,0x90,0x9c,0x4d -,0x37,0xbe,0x3e,0x39,0xa6,0x8e,0x86,0x8c,0x8c,0x86,0x84,0x86,0x87,0x88,0x83,0x86,0x91,0x8c,0x8f,0x8f,0x8d,0x8f,0x88,0x98,0x35,0x1c,0x14,0x1b,0x1b,0x98,0x85,0x8c -,0x99,0xa9,0xbb,0x3f,0x18,0x20,0xa3,0x97,0xa5,0x1d,0x1c,0x27,0x16,0x0b,0x0d,0x17,0x37,0x22,0x0f,0x0b,0x0a,0x0c,0x0c,0x16,0x1d,0x0f,0x08,0x04,0x05,0x02,0x05,0x21 -,0xd0,0x3f,0x1d,0x11,0x19,0x0f,0x07,0x18,0xc0,0x93,0x97,0xa9,0x8f,0x8a,0x94,0xaa,0xa9,0x92,0x8f,0x9a,0xb0,0x29,0x26,0x14,0x0f,0x25,0x62,0xc1,0x6f,0x3e,0xab,0xc4 -,0xa2,0x84,0x85,0x84,0x90,0xae,0xa7,0x27,0x18,0x1e,0x27,0xcf,0x25,0x0d,0x12,0x19,0x1a,0x18,0x1d,0xce,0x9e,0x91,0x8f,0x90,0x8b,0x8d,0x8f,0x8a,0x84,0x83,0x84,0x8c -,0x8d,0x95,0x9a,0x87,0x84,0x84,0x89,0x8c,0x8a,0x9e,0x32,0x36,0xd1,0xa0,0x20,0x08,0x09,0x08,0x06,0x02,0x01,0x01,0x01,0x00,0x01,0x00,0x02,0x00,0x01,0x02,0x06,0x08 -,0x0a,0x0b,0x08,0x0d,0x0a,0x39,0x9b,0x9a,0x9e,0xa9,0xa0,0x3b,0x19,0x29,0xa7,0x93,0x8e,0x97,0x8e,0x8b,0x88,0x86,0x87,0x84,0x82,0x84,0x84,0x8b,0x8b,0x8c,0x95,0x95 -,0x97,0x90,0x91,0x91,0xb2,0xc7,0x32,0xb8,0x89,0x88,0x8b,0x90,0x8e,0x8d,0xba,0x24,0xeb,0xc5,0x9d,0xd5,0x26,0x54,0x29,0x1e,0x0e,0x0f,0x1c,0x14,0x19,0x1a,0x22,0x3c -,0x1a,0x14,0x16,0x17,0x13,0x09,0x06,0x03,0x02,0x03,0x07,0x19,0x18,0x11,0x11,0x1f,0x27,0x16,0x1b,0x2e,0x9e,0x92,0xab,0xbb,0x9d,0x9b,0xa8,0xbd,0xb9,0xa4,0xb9,0x2c -,0x31,0x3c,0x34,0x1f,0x2b,0xb4,0xa9,0xaf,0xb4,0xad,0xac,0xa3,0xc9,0x8f,0x84,0x87,0x8a,0x98,0x97,0xa8,0x23,0x12,0x11,0x21,0x3c,0x15,0x16,0x25,0x2b,0x22,0x21,0xad -,0xa3,0x9d,0xa8,0x99,0x8f,0x8d,0x90,0x91,0x85,0x85,0x86,0x8e,0x91,0x94,0x8d,0x9b,0x8e,0x82,0x84,0x85,0x89,0x88,0x8c,0xbc,0x2f,0x3d,0x50,0x44,0x0b,0x05,0x06,0x04 -,0x01,0x01,0x01,0x02,0x02,0x02,0x01,0x03,0x03,0x04,0x09,0x0d,0x0e,0x0c,0x08,0x09,0x0f,0x0c,0x0c,0x0b,0xb7,0x99,0xb1,0x70,0x2e,0xa5,0xd0,0x43,0xad,0x9e,0x88,0x8c -,0x92,0x89,0x8a,0x88,0x8c,0x90,0x87,0x88,0x8a,0x92,0x9b,0x9a,0xa0,0x98,0x93,0x8d,0x91,0x97,0xa6,0xa9,0x9d,0x98,0xac,0x9d,0x86,0x87,0x8f,0xae,0xac,0x9a,0xdb,0x22 -,0x24,0x2a,0xae,0x20,0x22,0x25,0x2b,0x23,0x14,0x26,0x2d,0x39,0x1f,0x16,0x15,0x1a,0x11,0x17,0x11,0x0d,0x0a,0x05,0x02,0x02,0x04,0x03,0x05,0x07,0x2e,0x47,0x1b,0x14 -,0x2d,0xa8,0xde,0x36,0x38,0xa2,0x8e,0x9a,0xa5,0x9d,0x9c,0xaa,0x3c,0xe4,0xbe,0xca,0x3c,0x3f,0xbf,0xb1,0xcc,0xa8,0x97,0x98,0x9f,0xa2,0x9d,0xa5,0x9d,0xac,0xc4,0xea -,0xe3,0xa4,0xc9,0x4b,0x3e,0x49,0x2d,0x1c,0x35,0xbf,0x93,0x97,0xac,0x9d,0x99,0x97,0x97,0x8f,0x89,0x88,0x8c,0x8f,0x8b,0x88,0x89,0x8d,0x86,0x85,0x84,0x88,0x89,0x86 -,0x8d,0x93,0xa4,0xc0,0x2f,0xa3,0xb3,0x47,0x0e,0x04,0x08,0x01,0x04,0x02,0x05,0x06,0x03,0x01,0x03,0x04,0x06,0x04,0x05,0x07,0x07,0x07,0x06,0x08,0x09,0x09,0x0b,0x10 -,0x1e,0x28,0x23,0x48,0x2a,0x2c,0x3b,0xbd,0x9e,0xad,0x92,0x8d,0x8f,0x8e,0x96,0x8d,0x8c,0x8d,0x8e,0x8e,0x85,0x85,0x8b,0x88,0x86,0x87,0x8a,0x8b,0x85,0x85,0x88,0x8d -,0x8f,0x8c,0x8f,0x98,0x9f,0x9e,0xa2,0x40,0x2b,0x3b,0x1f,0x20,0x18,0x16,0x18,0x2e,0xa5,0xa6,0xa6,0x4c,0x37,0x34,0x24,0x24,0x2c,0x49,0x27,0x18,0x0e,0x0a,0x0d,0x0a -,0x0c,0x0c,0x0d,0x0e,0x0d,0x0f,0x15,0x15,0x15,0x10,0x13,0x15,0x0f,0x11,0x11,0x0e,0x0d,0x0d,0x0f,0x10,0x1a,0xba,0xa4,0xa1,0xaa,0x9d,0x95,0x92,0x8b,0x8b,0x8c,0x8c -,0x97,0x9e,0x9d,0x9c,0x97,0x9f,0xa2,0xa8,0xae,0xaf,0xcd,0xc5,0xb8,0xae,0xba,0xf9,0xbe,0xab,0xad,0xb4,0xac,0xb4,0xa1,0xad,0x9f,0xb8,0x9d,0x99,0xc2,0xba,0xcd,0x99 -,0x9c,0x9e,0xaf,0x9e,0x8d,0x8c,0x91,0x8e,0x8e,0x8b,0x88,0x88,0x8a,0x94,0x9a,0xaa,0x3d,0x2e,0x1f,0x0e,0x0d,0x06,0x09,0x09,0x07,0x08,0x05,0x07,0x06,0x0b,0x12,0x11 -,0x1b,0x2a,0x1e,0x28,0x1c,0x36,0x2b,0x1e,0x1f,0x1e,0xaf,0xf6,0x3c,0xe1,0xa8,0x9c,0xa8,0x9d,0x9c,0xa6,0xac,0x32,0x2b,0xea,0x4b,0x4b,0x27,0x1a,0x2b,0x28,0x2a,0x2b -,0x3f,0xbb,0x67,0xa5,0x9d,0x8d,0x90,0xa2,0x91,0x89,0x86,0x88,0x92,0x9c,0xb7,0xab,0xb6,0xde,0xb1,0xc0,0xee,0x2c,0x22,0x51,0xd9,0x5a,0xbf,0x32,0xbf,0xab,0xac,0xb4 -,0xb1,0xbf,0x39,0x39,0x2c,0x27,0x3e,0x32,0x35,0x1d,0xbc,0x97,0xb5,0xc9,0x2c,0xbe,0x40,0x36,0x2a,0x25,0x38,0x19,0x12,0x17,0x16,0x24,0x17,0x14,0x22,0x38,0xa8,0x4a -,0x30,0x3a,0x2a,0x3d,0x42,0x33,0x3c,0x17,0x13,0x0d,0x12,0x16,0x11,0x0f,0x0f,0x59,0xc4,0xb6,0x4f,0xb8,0x9c,0xa8,0xb8,0xa8,0x9a,0x8e,0x99,0xa1,0x93,0x8e,0x8c,0x8d -,0x87,0x87,0x87,0x85,0x84,0x84,0x87,0x89,0x8c,0x91,0x8e,0x9d,0xc3,0x38,0x1c,0x17,0x16,0x18,0x13,0x27,0x26,0x22,0x2a,0xba,0xae,0x46,0x4a,0x3a,0x41,0xb4,0xd3,0x31 -,0x2a,0x1b,0x1c,0x20,0x21,0x1c,0x1c,0x1d,0x1b,0x1a,0x2d,0x3d,0x26,0x1a,0x1d,0x17,0x12,0x16,0x14,0x14,0x11,0x0f,0x19,0x34,0x50,0xbf,0xaa,0x97,0x8f,0x8a,0x8b,0x90 -,0x8b,0x8b,0x8e,0x89,0x88,0x8a,0x9d,0x2a,0x1c,0x18,0x18,0x0f,0x08,0x05,0x07,0x07,0x05,0x03,0x03,0x02,0x03,0x04,0x05,0x07,0x06,0x06,0x16,0x1e,0x2d,0xf6,0xaf,0x9c -,0x9c,0x8c,0x87,0x88,0x87,0x86,0x87,0x85,0x86,0x87,0x89,0x8d,0x8e,0x8c,0x89,0x8b,0x92,0x90,0x94,0x8f,0x8d,0x98,0x9b,0x9f,0xa0,0xa6,0xad,0xbf,0x42,0x29,0x32,0x35 -,0x3c,0x6c,0x37,0x35,0x37,0x37,0xba,0xad,0xb0,0xcb,0x6a,0x54,0x3a,0x35,0x25,0x18,0x09,0x07,0x08,0x08,0x0b,0x0b,0x09,0x0c,0x0d,0x12,0x13,0x10,0x15,0x19,0x1d,0x21 -,0x35,0xd9,0x3d,0x24,0x26,0x4f,0xb9,0xb4,0xc2,0xbb,0x9b,0x95,0x92,0x8f,0x91,0x8f,0x91,0x99,0x9b,0x9c,0x9c,0xa2,0xd7,0x38,0x29,0x2b,0x45,0xf7,0x3c,0x1f,0x26,0xc4 -,0xa6,0xea,0x41,0xc0,0xa6,0x9f,0x9a,0x9a,0x9b,0x98,0x9c,0x97,0x90,0x8d,0x8a,0x86,0x84,0x84,0x83,0x81,0x83,0x84,0x86,0x87,0x88,0x89,0x8b,0x91,0x9c,0xb8,0xd5,0x3e -,0x1e,0x15,0x0f,0x08,0x07,0x09,0x0b,0x08,0x04,0x02,0x02,0x03,0x02,0x02,0x02,0x03,0x01,0x01,0x03,0x05,0x06,0x06,0x09,0x0c,0x0e,0x19,0x1c,0x19,0x1c,0x23,0x2a,0x2f -,0x32,0x29,0x24,0x26,0x20,0x27,0xdc,0x9e,0x92,0x93,0x93,0x8e,0x88,0x84,0x86,0x87,0x86,0x84,0x84,0x84,0x86,0x87,0x8a,0x90,0x92,0x91,0x92,0x95,0x98,0x9a,0x9f,0xa0 -,0x95,0x9c,0xb9,0x41,0x30,0x66,0x3a,0x22,0x1c,0x1e,0x19,0x0e,0x12,0x19,0x1a,0x1c,0x21,0x26,0x34,0xa8,0xa5,0xb6,0xb0,0xaa,0xac,0xa7,0xb8,0x47,0x28,0x14,0x0f,0x0e -,0x0f,0x0b,0x09,0x08,0x08,0x08,0x0a,0x0d,0x0c,0x0b,0x0d,0x14,0x1b,0x20,0x24,0x2c,0x23,0x1e,0x33,0xc5,0xa9,0x9e,0x9d,0xa1,0xa2,0x97,0x8f,0x92,0x9a,0x9b,0x98,0x9a -,0x9e,0xad,0xa7,0xb6,0x52,0xb9,0x9e,0x97,0x94,0x8d,0x8c,0x8a,0x86,0x82,0x82,0x82,0x83,0x81,0x81,0x81,0x82,0x85,0x87,0x8a,0x89,0x8a,0x8e,0x94,0xa5,0x73,0x1f,0x16 -,0x16,0x0e,0x06,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x05,0x08,0x09,0x17,0x22,0x22,0x28,0x43,0xaf,0xa6,0x9d,0xa5,0xa0,0xab,0xb0,0xa3 -,0x9b,0x98,0x9a,0x97,0x96,0x97,0x8d,0x8d,0x93,0x94,0x95,0x91,0x92,0x8f,0x8f,0x94,0x9d,0xa9,0x9c,0x94,0x97,0x8f,0x8f,0x8f,0x8e,0x8c,0x88,0x8b,0x8c,0x91,0x92,0x8d -,0x95,0x9f,0xa5,0x5f,0x2e,0x1f,0x1c,0x1a,0x14,0x12,0x0f,0x11,0x19,0x22,0x1b,0x19,0x19,0x18,0x19,0x18,0x1c,0x1b,0x14,0x0f,0x11,0x13,0x12,0x12,0x14,0x14,0x1a,0x1d -,0x27,0x25,0x19,0x1a,0x1b,0x1f,0x1f,0x1b,0x1c,0x16,0x0d,0x0d,0x0e,0x14,0x11,0x0e,0x12,0x19,0x29,0x3e,0x47,0x43,0x58,0xc9,0xc4,0xad,0x9c,0x99,0x97,0x9d,0x96,0x8c -,0x89,0x86,0x86,0x84,0x82,0x82,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x83,0x85,0x8a,0x91,0x95,0x94,0x99,0xa2,0x5a,0x27,0x1a,0x12,0x16,0x0f,0x0a,0x07,0x06,0x05,0x03 -,0x03,0x03,0x02,0x01,0x01,0x01,0x02,0x03,0x05,0x06,0x09,0x0b,0x13,0x1c,0x19,0x18,0x16,0x18,0x1e,0x22,0x21,0x1d,0x16,0x1b,0x28,0x4e,0x67,0xcf,0xae,0xa5,0x94,0x8b -,0x8a,0x8c,0x8c,0x8a,0x89,0x89,0x8a,0x8d,0x92,0x92,0x8e,0x8d,0x8d,0x8f,0x8f,0x8f,0x8f,0x8e,0x8d,0x94,0x99,0x9d,0x9d,0x9f,0xab,0xcd,0x3b,0x3a,0x47,0x3d,0x2c,0x2b -,0x27,0x2a,0x47,0xb6,0xc3,0xed,0x7d,0xe5,0xc3,0xc8,0x4e,0x33,0x26,0x26,0x31,0x2b,0x28,0x25,0x1f,0x1b,0x18,0x1f,0x1d,0x15,0x15,0x13,0x11,0x0e,0x0d,0x0d,0x0a,0x08 -,0x0a,0x0b,0x0e,0x10,0x10,0x17,0x1c,0x36,0xb9,0xde,0xd7,0xc2,0xb2,0xc2,0xc9,0xb4,0xb6,0xcc,0x3d,0xc0,0xad,0xa5,0xa2,0xa5,0x9f,0x9b,0x8e,0x89,0x88,0x87,0x86,0x84 -,0x83,0x82,0x83,0x84,0x86,0x87,0x85,0x85,0x84,0x85,0x87,0x88,0x8a,0x88,0x88,0x90,0x9f,0xbc,0x4b,0x29,0x16,0x0e,0x08,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01 -,0x02,0x04,0x03,0x04,0x05,0x07,0x07,0x09,0x0a,0x0f,0x11,0x0e,0x19,0x29,0x4f,0xc3,0xbc,0xa7,0x9d,0x94,0x8c,0x8c,0x8c,0x8e,0x8f,0x8d,0x8d,0x8e,0x91,0x9a,0xa6,0xa6 -,0x9a,0x9b,0x9a,0x99,0x98,0x99,0x8f,0x8d,0x91,0x96,0x9c,0x99,0x96,0x8f,0x92,0x97,0x9d,0xa5,0x9f,0x9f,0xa5,0xa7,0xa5,0xa5,0xa9,0x9a,0x9b,0xad,0x4b,0x31,0x2c,0x28 -,0x1f,0x17,0x11,0x0e,0x12,0x12,0x14,0x13,0x12,0x10,0x13,0x1b,0x26,0x1f,0x1c,0x1c,0x1c,0x1e,0x1b,0x1a,0x12,0x0f,0x12,0x15,0x16,0x11,0x15,0x15,0x16,0x1c,0x20,0x1e -,0x1c,0x1c,0x1e,0x21,0x21,0x24,0x1e,0x1d,0x2e,0x54,0xc2,0xba,0xa8,0x9d,0x9e,0x92,0x8c,0x8c,0x8d,0x8b,0x87,0x86,0x86,0x85,0x85,0x87,0x87,0x86,0x85,0x85,0x83,0x85 -,0x85,0x84,0x84,0x85,0x8a,0x8b,0x8e,0x91,0x91,0x99,0xa3,0x6e,0x19,0x13,0x11,0x0e,0x0b,0x06,0x05,0x04,0x05,0x06,0x04,0x03,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x01 -,0x02,0x04,0x06,0x08,0x0b,0x0c,0x0f,0x1b,0x33,0x56,0x4f,0xb2,0x9e,0x97,0x92,0x92,0x8e,0x91,0x99,0x97,0x91,0x8d,0x8b,0x8d,0x8c,0x8a,0x89,0x86,0x8a,0x8c,0x8e,0x8f -,0x8e,0x8f,0x91,0x94,0x9d,0xaa,0xaa,0xa6,0xa6,0xad,0xbc,0xad,0xac,0x9a,0x95,0x96,0x9a,0x9f,0xa0,0xa9,0xad,0xc8,0x58,0x2a,0x21,0x23,0x2c,0x29,0x27,0x1f,0x1b,0x1d -,0x1f,0x2e,0x20,0x1c,0x1f,0x1c,0x1d,0x19,0x12,0x0e,0x0a,0x07,0x08,0x09,0x0c,0x0f,0x0d,0x0f,0x16,0x27,0x28,0x1b,0x1f,0x1e,0x26,0x2d,0x2b,0x2d,0x1f,0x22,0x36,0x33 -,0x32,0x36,0x29,0x3f,0xd8,0xa7,0xa2,0xac,0xaa,0xa5,0x9c,0x9c,0x94,0x94,0x9a,0x96,0x8d,0x88,0x85,0x84,0x83,0x82,0x81,0x80,0x81,0x81,0x81,0x81,0x82,0x83,0x84,0x86 -,0x8c,0x93,0x98,0x9e,0xb8,0x2c,0x18,0x11,0x0e,0x0e,0x0b,0x06,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x05,0x07,0x0c,0x18,0x19,0x1b,0x21 -,0x3b,0x51,0xb1,0xae,0xac,0xad,0xc6,0xcb,0xb7,0xa0,0xa5,0x9e,0x9f,0x9e,0x97,0x8f,0x8f,0x93,0x96,0x9a,0x96,0x93,0x92,0x95,0x97,0x98,0x9c,0x96,0x90,0x8f,0x92,0x94 -,0x93,0x8e,0x88,0x89,0x8d,0x8f,0x8d,0x8e,0x91,0x93,0x99,0xab,0x49,0x3f,0x32,0x38,0x2f,0x23,0x21,0x1d,0x20,0x1d,0x21,0x1c,0x17,0x17,0x14,0x14,0x18,0x1e,0x12,0x0f -,0x0c,0x0f,0x11,0x1a,0x1e,0x1b,0x33,0x11,0x2a,0x89,0x8c,0x02,0x19,0x80,0x35,0xb0,0x22,0x0d,0x0c,0x04,0x0b,0x06,0x17,0x00,0x02,0x03,0x00,0x04,0x00,0x08,0x04,0x01 -,0x07,0x08,0x0a,0x0a,0x0d,0x2d,0x2b,0x4f,0x9c,0x8d,0x85,0x83,0x82,0x84,0x83,0x80,0x80,0x83,0x82,0x80,0x80,0x80,0x81,0x81,0x82,0x83,0x83,0x82,0x82,0x84,0x82,0x84 -,0x85,0x88,0x89,0x89,0x8d,0x8b,0x8f,0x93,0xa4,0x9c,0xa8,0x62,0x21,0x1b,0x1b,0x0b,0x10,0x09,0x06,0x07,0x06,0x05,0x03,0x03,0x01,0x02,0x00,0x01,0x01,0x00,0x00,0x00 -,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x02,0x03,0x09,0x08,0x0b,0x14,0x29,0x2c,0x3f,0xa0,0x9d,0x93,0x8d,0x8b,0x87,0x82,0x83,0x82,0x82,0x82,0x81,0x81 -,0x81,0x81,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x83,0x83,0x83,0x86,0x87 -,0x8f,0x95,0xa9,0xb8,0x24,0x13,0x0e,0x07,0x05,0x04,0x02,0x02,0x02,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -,0x00,0x01,0x00,0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x02,0x02,0x04,0x03,0x04,0x04,0x06,0x0b,0x0c,0x14,0x2c,0x3f,0xaf,0x9c,0x8f,0x86,0x86,0x83,0x83,0x82,0x81,0x81 -,0x81,0x81,0x80,0x80,0x80,0x81,0x80,0x81,0x80,0x82,0x82,0x81,0x82,0x83,0x86,0x85,0x86,0x87,0x86,0x87,0x88,0x88,0x87,0x88,0x8b,0x89,0x88,0x89,0x87,0x89,0x8a,0x8b -,0x8a,0x8e,0x8d,0x8d,0x8e,0x8f,0x94,0x94,0x98,0x9d,0x9a,0x9b,0xa3,0xa3,0xad,0xa7,0xaf,0x9f,0xa4,0xa8,0xa0,0xa7,0xa3,0xa2,0x9a,0x9d,0x95,0x96,0x94,0x8e,0x91,0x8f -,0x8e,0x8b,0x8b,0x8b,0x8c,0x8b,0x8b,0x8c,0x8d,0x8e,0x8e,0x94,0x9a,0xa2,0xa4,0xbd,0x48,0x2e,0x1f,0x15,0x0e,0x0c,0x0a,0x07,0x05,0x03,0x02,0x02,0x01,0x01,0x00,0x01 -,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01 -,0x01,0x02,0x02,0x03,0x05,0x07,0x0a,0x10,0x1d,0x29,0x71,0xa2,0x90,0x8a,0x85,0x83,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 -,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x82,0x83,0x85,0x87,0x88,0x8a,0x8c,0x8e,0x93,0x99,0x9f,0xaa -,0xcc,0x44,0x2d,0x22,0x1d,0x14,0x10,0x0d,0x0a,0x0a,0x08,0x07,0x06,0x05,0x05,0x05,0x05,0x05,0x05,0x06,0x05,0x05,0x04,0x04,0x04,0x04,0x03,0x04,0x04,0x04,0x04,0x03 -,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x05,0x05,0x06,0x07,0x09,0x09,0x0b,0x0b,0x0e,0x11,0x14,0x18,0x1a,0x1c,0x23,0x23,0x26,0x2b,0x2e,0x3d,0x4c -,0x4d,0x52,0x6d,0x70,0x6b,0x5c,0xd7,0xea,0xe1,0xc6,0xcd,0xcf,0xcd,0xe9,0xd3,0xbc,0xb0,0xac,0xa4,0xa2,0x9e,0x9a,0x99,0x97,0x94,0x92,0x91,0x8f,0x8e,0x8e,0x8e,0x8e -,0x8e,0x8c,0x8c,0x8d,0x8d,0x8e,0x8e,0x8f,0x90,0x90,0x8f,0x92,0x94,0x98,0x97,0x99,0x9d,0x9e,0x9f,0xa0,0xa3,0xa8,0xa2,0xa6,0xa7,0xaa,0xae,0xad,0xb7,0xc3,0xcf,0xcc -,0xf7,0x56,0x41,0x2f,0x30,0x29,0x20,0x20,0x1f,0x1d,0x1d,0x1c,0x1c,0x19,0x17,0x1b,0x19,0x1b,0x1c,0x1e,0x22,0x27,0x2c,0x37,0x44,0xd8,0xb8,0xa9,0xa2,0xa0,0x9b,0x98 -,0x93,0x93,0x92,0x8f,0x8f,0x8f,0x8e,0x8e,0x8e,0x90,0x92,0x93,0x92,0x93,0x95,0x97,0x98,0x9c,0xa0,0x9f,0xa7,0xae,0xba,0xbf,0xb5,0xbc,0xc0,0xcc,0xd1,0xbd,0xce,0xd9 -,0xc4,0xb8,0xba,0xc6,0xd5,0xc7,0xcb,0xc2,0xc7,0xc2,0xd8,0x43,0x3d,0x3b,0x3a,0x31,0x2c,0x27,0x26,0x20,0x1e,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x20,0x20,0x25,0x29,0x2d -,0x35,0x31,0x3a,0x4f,0x4d,0x7c,0x5c,0x64,0xd6,0x5e,0xe1,0xdb,0xde,0x55,0x3d,0x39,0x36,0x35,0x35,0x36,0x2d,0x2c,0x2b,0x2c,0x2c,0x2a,0x2b,0x2f,0x35,0x3d,0x47,0x4e -,0xd9,0xbe,0xb6,0xaf,0xaa,0xa7,0xa7,0xa6,0xa3,0xa4,0xaa,0xa5,0xa6,0xa5,0xa8,0xaf,0xb1,0xc1,0xd4,0xf1,0x4e,0x41,0x35,0x2d,0x2a,0x2a,0x25,0x22,0x1f,0x20,0x23,0x23 -,0x29,0x2a,0x2e,0x37,0x4c,0x4e,0xcc,0xbb,0xb8,0xaf,0xad,0xaa,0xad,0xad,0xab,0xab,0xaa,0xac,0xae,0xaf,0xb6,0xbf,0xc4,0x54,0x51,0x44,0x3f,0x46,0x34,0x37,0x31,0x2e -,0x2e,0x38,0x35,0x37,0x38,0x43,0x59,0x5d,0xc3,0xb7,0xb3,0xb9,0xb6,0xaf,0xae,0xae,0xb0,0xaa,0xa9,0xb3,0xbb,0xb9,0xb8,0xbe,0xc9,0x5f,0x4c,0x3c,0x35,0x2e,0x2f,0x34 -,0x30,0x2b,0x29,0x2d,0x30,0x30,0x2e,0x31,0x3a,0x43,0x53,0xec,0xcc,0xd4,0xc9,0xca,0xcc,0xc1,0xda,0xbe,0xbf,0xc8,0xcf,0xc7,0xd2,0x76,0xdc,0x6b,0xf7,0x43,0x3c,0x48 -,0x4b,0x3d,0x3c,0x3e,0x3a,0x3c,0x3e,0x41,0x3c,0x45,0x43,0x4b,0xcf,0xc8,0xbf,0xc1,0xc3,0xbd,0xc0,0xbc,0xb6,0xb8,0xb5,0xb8,0xbf,0xbe,0xd6,0xcd,0xcb,0xd7,0xd7,0x46 -,0x3d,0x41,0x4c,0x41,0x3f,0x45,0x4e,0x48,0x3e,0x3f,0x4d,0x6c,0x4a,0xf3,0xce,0xc7,0xbe,0xcd,0xbe,0xbf,0xbd,0xbf,0xdb,0xc9,0xca,0xcc,0xd9,0xd1,0xd5,0xde,0x5c,0x52 -,0x4f,0x5c,0x4e,0x40,0x49,0x3e,0x42,0x3c,0x45,0x47,0xfe,0x60,0x46,0x52,0x4e,0xec,0xcc,0xbf,0xc1,0xbc,0xc3,0xcd,0xc9,0xc5,0xbd,0xc8,0xdb,0xe7,0x4b,0x4d,0x3e,0x5e -,0x76,0x47,0x40,0x3a,0x3a,0x31,0x35,0x37,0x3e,0x48,0x62,0x57,0x6d,0xe6,0xde,0xc3,0xc2,0xb7,0xb6,0xb7,0xaf,0xb0,0xb9,0xbd,0xba,0xbd,0xb7,0xcc,0xea,0x56,0x43,0x40 -,0x3c,0x3e,0x3b,0x40,0x30,0x36,0x3a,0x32,0x34,0x34,0x34,0x3b,0x41,0x5c,0xcf,0xd5,0xbf,0xbd,0xbd,0xb9,0xbc,0xad,0xaa,0xaa,0xab,0xae,0xaf,0xbc,0xbd,0xbf,0xed,0x60 -,0x4b,0x37,0x36,0x35,0x34,0x34,0x30,0x39,0x32,0x2c,0x2d,0x2f,0x30,0x3a,0x3e,0x4d,0xce,0x62,0xd2,0xc5,0xb8,0xad,0xb0,0xae,0xab,0xab,0xaf,0xae,0xac,0xaa,0xaf,0xbc -,0xca,0x4e,0x45,0x39,0x39,0x3a,0x36,0x33,0x2e,0x2b,0x31,0x32,0x31,0x30,0x2b,0x36,0x30,0x49,0x5d,0xde,0xbd,0xc7,0xb7,0xb4,0xb3,0xae,0xac,0xab,0xa8,0xa9,0xaf,0xb0 -,0xb4,0xb4,0xc6,0xec,0x58,0x3a,0x34,0x2c,0x2c,0x2b,0x2b,0x2d,0x2d,0x2a,0x2a,0x28,0x27,0x2e,0x35,0x45,0x5d,0xdc,0xcc,0xd0,0xb8,0xb3,0xac,0xa9,0xa9,0xab,0xa8,0xa9 -,0xac,0xa9,0xad,0xac,0xbc,0xd7,0x4c,0x3e,0x35,0x35,0x31,0x2d,0x2e,0x2a,0x2a,0x2b,0x2c,0x2c,0x2b,0x2f,0x36,0x43,0x54,0xcf,0xc3,0xb4,0xaf,0xb1,0xab,0xad,0xa7,0xaa -,0xa7,0xa3,0xa7,0xaa,0xaf,0xb8,0xbc,0xca,0xe2,0x4e,0x36,0x2e,0x28,0x28,0x2a,0x2b,0x2c,0x29,0x27,0x25,0x28,0x28,0x2d,0x3d,0x50,0xcc,0xd4,0xbc,0xb6,0xb1,0xaa,0xa5 -,0xa6,0xa8,0xac,0xad,0xa6,0xa8,0xaa,0xb1,0xbc,0xc7,0x4c,0x41,0x3a,0x2d,0x2c,0x29,0x28,0x2b,0x26,0x29,0x2b,0x26,0x2e,0x2b,0x35,0x37,0x45,0xd6,0xcc,0xb5,0xb8,0xaf -,0xad,0xa7,0xa8,0xa8,0xa9,0xa5,0xa4,0xab,0xac,0xaf,0xae,0xbb,0xda,0x73,0x40,0x39,0x2a,0x27,0x2a,0x2c,0x2b,0x2a,0x28,0x2a,0x2a,0x26,0x2f,0x2f,0x40,0x52,0xeb,0xbd -,0xba,0xb1,0xaf,0xab,0xa8,0xa5,0xa7,0xa8,0xa8,0xaa,0xa9,0xb1,0xb6,0xbf,0xe3,0x69,0x54,0x3a,0x2c,0x2b,0x2b,0x2f,0x29,0x2b,0x2a,0x29,0x2a,0x2a,0x2d,0x2f,0x37,0x42 -,0x51,0xcb,0xb5,0xbb,0xb6,0xae,0xb1,0xac,0xa8,0xa8,0xa5,0xa8,0xa5,0xa9,0xb2,0xb0,0xba,0xc4,0xc4,0x58,0x41,0x2f,0x2a,0x2d,0x2b,0x2c,0x2d,0x2d,0x29,0x2c,0x27,0x2b -,0x2e,0x33,0x60,0x63,0xc9,0xbe,0xb8,0xaf,0xb4,0xac,0xac,0xad,0xac,0xa9,0xa8,0xa8,0xac,0xb1,0xc1,0x64,0x76,0x44,0x3b,0x31,0x34,0x32,0x2f,0x2b,0x2c,0x32,0x2e,0x2e -,0x2d,0x2e,0x30,0x35,0x46,0x69,0xbc,0xbc,0xbb,0xb5,0xb5,0xb3,0xb7,0xad,0xb3,0xaf,0xb4,0xae,0xb2,0xaf,0xbf,0xbc,0xc4,0xc9,0x4f,0x3b,0x3e,0x3a,0x4e,0x2d,0x34,0x30 -,0x2f,0x2c,0x26,0x29,0x35,0x25,0x34,0x3d,0xc0,0x5f,0x52,0xd1,0xca,0xb8,0xbb,0xae,0xb7,0xaa,0xae,0xa7,0xb0,0xae,0xb6,0xba,0xbf,0x6e,0xbf,0x44,0x3c,0x2c,0x2c,0x3d -,0x39,0x48,0x29,0x4e,0x2e,0x35,0x38,0x26,0x30,0x2e,0x3f,0x4f,0xe0,0xbf,0xcf,0x5a,0xb8,0xbf,0xb7,0xb5,0xb4,0xa9,0xa9,0xb5,0xb5,0xbe,0xbc,0xbf,0xcc,0xdd,0x68,0x74 -,0x6f,0x45,0x60,0x38,0x56,0x48,0x2e,0x35,0x27,0x33,0x28,0x39,0x39,0x35,0xe1,0x54,0x51,0x58,0x4e,0xbd,0xd9,0xbe,0xb3,0xc0,0xaa,0xba,0xbc,0xb6,0xb5,0xb6,0xc1,0xbe -,0xc2,0xc7,0xd1,0xdc,0xd1,0x4d,0x5e,0xfd,0x3b,0x4c,0x32,0x30,0x2c,0x2a,0x39,0x38,0x45,0x43,0x48,0x4a,0x48,0x5f,0xc6,0x4b,0xbc,0xb7,0xc1,0xbb,0xc1,0xaf,0xbe,0xbe -,0xba,0xca,0xb2,0xc3,0x6e,0xc1,0x65,0xc5,0x59,0x4f,0x4c,0x33,0x4e,0x40,0x33,0x3b,0x2f,0x43,0x3c,0x46,0x65,0x37,0x52,0x40,0xee,0xf0,0xed,0xcb,0xde,0xbe,0xbc,0xbd -,0xb7,0xfb,0xbd,0xc8,0xb9,0xc3,0xf2,0xc3,0xca,0xc5,0xca,0xe8,0xdc,0x5b,0x3d,0xce,0x2f,0x4b,0x2f,0x43,0x3f,0x36,0xd9,0x3f,0x46,0x3c,0x4c,0x67,0x60,0xce,0xbd,0x69 -,0xbe,0xdd,0xbd,0xd3,0xc4,0xbe,0xd4,0xbe,0xcc,0xcb,0xba,0xea,0x5e,0xdd,0x7c,0xbd,0x55,0xfe,0x4d,0x3c,0x4a,0x46,0x4b,0x3f,0x3c,0x5d,0x41,0x53,0x5d,0x42,0x5e,0x4a -,0xe0,0xc7,0x5b,0xbe,0xcb,0xc0,0xfc,0x60,0xbf,0x6f,0xba,0xce,0xc6,0xd3,0x5f,0xdb,0xdd,0xde,0xd6,0x44,0xd1,0x46,0x4b,0x67,0x35,0x6e,0x55,0xed,0x4f,0x4c,0x78,0x57 -,0x53,0xdf,0x48,0xe5,0x4f,0xdd,0xba,0x51,0xbb,0x66,0xc8,0xbe,0x4d,0xc1,0x4f,0xd7,0xce,0x5b,0xcc,0x76,0xfb,0xd6,0x4f,0xd9,0x49,0x48,0x4a,0x41,0xcd,0x3f,0x64,0x51 -,0x43,0xe5,0x49,0xcf,0xc6,0x55,0xbd,0x5b,0xc1,0xbe,0x52,0xba,0x58,0xd2,0xd2,0x5c,0xc4,0x4a,0xf7,0xe3,0x42,0xc5,0x4f,0x7b,0xf0,0x35,0xeb,0x3a,0xe6,0x50,0x49,0xbf -,0x49,0xc3,0x46,0x7a,0xd9,0x5f,0xd6,0xd7,0xdb,0xc3,0x54,0xca,0x65,0x49,0xba,0x40,0xba,0x5b,0x6c,0x76,0x44,0xc3,0x5f,0x6a,0xcb,0x4b,0xd7,0x4f,0x48,0xbe,0x49,0xd4 -,0x44,0x5e,0xc6,0x3f,0xe3,0x55,0x55,0xdc,0x42,0xc0,0xdd,0x5b,0xbc,0xeb,0xbd,0x6b,0xd4,0xc7,0x5d,0xc7,0x5d,0x6a,0x6a,0x4d,0x74,0x5c,0x4d,0xec,0x3c,0x5f,0x7a,0x4f -,0xf7,0x3e,0xcb,0x7e,0x6c,0xd4,0x49,0xc5,0x6e,0x5f,0xd8,0x5a,0xc2,0xde,0xcd,0xbe,0x65,0xce,0x52,0x69,0xdd,0x4b,0xcb,0x4d,0x57,0x69,0x6b,0xcf,0x50,0x4c,0xd8,0x5d -,0xd3,0x43,0x61,0xcc,0x49,0xd5,0x4f,0xcb,0x65,0x4b,0x6a,0x68,0xf8,0x7c,0x71,0xbe,0xda,0xcc,0xc3,0x47,0xc3,0x62,0xcb,0x51,0x43,0xc6,0x49,0xfc,0x67,0x57,0xdd,0x4e -,0x65,0xf8,0x46,0xe3,0x4b,0x70,0x76,0x4a,0xbb,0x58,0xcb,0xd7,0x56,0xb7,0x3d,0xd1,0xce,0x67,0xbf,0x48,0xcb,0x78,0x4f,0xe1,0x3c,0x5d,0x6f,0x48,0xe5,0x39,0xde,0xf1 -,0xcf,0xbe,0x43,0xc9,0x5d,0x4f,0xd8,0x4b,0xce,0x5e,0xd9,0xb7,0x7e,0xbe,0xee,0xfc,0x7b,0x5f,0xcb,0xd7,0xf1,0xd2,0x4f,0xc9,0x49,0x3e,0xef,0x3d,0xd2,0x34,0x5e,0x58 -,0x41,0xe2,0x45,0xde,0xd2,0xdd,0xdb,0x4d,0x67,0xeb,0x5c,0xd1,0xf8,0xc4,0xb8,0xcc,0xc2,0xd0,0xdc,0xcb,0x5c,0xc1,0x79,0xd8,0xcb,0x44,0xce,0x53,0x4e,0x51,0x37,0x6c -,0x3d,0x4a,0x56,0x3f,0xc6,0x43,0x51,0xe4,0x5e,0xe5,0x4d,0x65,0xf6,0x5e,0xbf,0x53,0xbe,0xba,0xf8,0xb4,0x50,0xb8,0xcc,0xef,0xb9,0x4f,0xcc,0xeb,0x4f,0xce,0x3c,0x59 -,0x52,0x3c,0xe5,0x33,0x48,0x53,0x43,0x48,0x4d,0xec,0x76,0x4e,0xc9,0x53,0x5c,0xdd,0x5a,0xbc,0x61,0xb4,0xdc,0xc8,0xb5,0xfc,0xbb,0xcc,0xd1,0xce,0x5f,0xc4,0x44,0x4a -,0xd4,0x41,0xdf,0x37,0x41,0x44,0x3c,0x4d,0x35,0x46,0xce,0x5a,0xd1,0x4f,0xef,0xbe,0x51,0xc6,0x52,0xcc,0xc1,0x79,0xb5,0xe9,0xbf,0xbc,0x57,0xb8,0x54,0xca,0xc8,0x48 -,0xbe,0x4a,0xec,0x4a,0x3d,0xcf,0x38,0xf2,0x40,0x34,0xcf,0x34,0xf1,0x54,0x49,0xc4,0x3f,0xcb,0x6d,0x52,0xd4,0x55,0xbb,0xcb,0xf3,0xb7,0xd9,0xb7,0xc5,0xfa,0xba,0x67 -,0xc5,0x76,0x66,0xd1,0x39,0x70,0x7c,0x41,0xe9,0x35,0x53,0x3e,0x3e,0xfb,0x39,0xcc,0x42,0x4f,0xcf,0x3e,0xcc,0xee,0x4f,0xbf,0x4e,0xbd,0xd9,0xd9,0xae,0x6b,0xba,0xbd -,0xeb,0xb5,0xde,0xbe,0xc6,0x45,0xc7,0x3f,0xde,0x3f,0x3c,0x5c,0x34,0x54,0x39,0x38,0x4d,0x2f,0xe4,0x5f,0x46,0xca,0x37,0xcc,0xfa,0xc9,0xbc,0x6a,0xb2,0xcc,0xca,0xb2 -,0xcd,0xba,0xcd,0xc5,0xbd,0x5d,0xc3,0x54,0x53,0xde,0x38,0x5d,0x4d,0x39,0x66,0x35,0x6c,0x3a,0x3f,0xd3,0x37,0xc5,0x58,0x52,0xca,0x40,0xc5,0xdf,0xe6,0xc6,0x52,0xb9 -,0xd2,0xd8,0xb5,0x5a,0xb9,0xd6,0xe4,0xba,0x5c,0xbd,0x47,0xcd,0x79,0x47,0xd3,0x37,0x51,0x51,0x3c,0x4f,0x37,0x4a,0x4f,0x3a,0xbc,0x4d,0x6d,0xe4,0x3e,0xbf,0x49,0xc6 -,0xcb,0x57,0xb5,0xdf,0xc2,0xcf,0xe2,0xc4,0x53,0xc5,0xd5,0x48,0xbf,0x4c,0xd4,0xdf,0x49,0xc8,0x40,0x4c,0x49,0x46,0xe7,0x3f,0x68,0xfa,0x3d,0xcc,0x44,0xcd,0x5d,0x4f -,0xca,0x45,0xcc,0xde,0x6e,0xc2,0xcc,0xc9,0xc3,0x48,0xc8,0x5f,0xb8,0x5e,0x3f,0xb2,0x43,0xbe,0xef,0x4f,0xbd,0x3d,0x6f,0x4a,0x37,0xf5,0x38,0x5c,0x5f,0x3e,0xcc,0x3b -,0x5b,0x55,0x5d,0xbf,0x3c,0xbd,0xc9,0xd2,0xbc,0xde,0xc2,0xd8,0xe3,0xbd,0xec,0xca,0xed,0xf4,0xcf,0x4b,0xd5,0xd9,0xdc,0xbc,0x4e,0x3a,0xce,0x39,0xa1,0x2f,0x38,0xb8 -,0x3e,0xc6,0x2e,0x5c,0x34,0xbb,0x44,0x41,0xde,0xca,0x61,0x3e,0xcf,0x40,0xbc,0x5e,0xce,0x79,0xbb,0xdf,0x3c,0xb7,0x3b,0xbb,0x3f,0x55,0xbe,0x38,0x6b,0x43,0x40,0xd3 -,0xe8,0x3c,0xd0,0xb3,0x2f,0x33,0xeb,0x41,0xda,0xaa,0x45,0x33,0xb8,0x2d,0xab,0x38,0x58,0xc8,0xde,0xca,0x42,0xb9,0x30,0x69,0xa4,0x33,0xad,0xea,0xb3,0xaf,0x2b,0x9d -,0x27,0xa9,0x24,0x4f,0xb5,0x3b,0xc4,0x38,0xbc,0xca,0x2e,0x54,0x6f,0x40,0xd6,0x38,0xba,0x40,0xd4,0x47,0xb7,0xc9,0xb6,0xfd,0xd8,0xf2,0x4c,0x34,0x6e,0xae,0x2d,0xb8 -,0xa5,0xdd,0xd4,0xc4,0xcb,0x3b,0x2f,0xd6,0xd1,0x5b,0x39,0x44,0xc8,0x6c,0x39,0xbe,0xe4,0x41,0x3b,0x42,0xcc,0xe7,0x66,0x5a,0xbd,0xb9,0x36,0xd3,0x4e,0xbc,0x3f,0xc2 -,0x52,0x41,0xb8,0x30,0xc6,0xe0,0x7b,0xba,0x42,0xfb,0xac,0x62,0x51,0x48,0xee,0x3c,0xb6,0x33,0xb8,0xbd,0x2c,0x45,0xde,0x3c,0xb9,0x2f,0x46,0xb1,0x2d,0xc2,0x3d,0xd2 -,0x41,0x44,0x75,0xb0,0x4b,0xc2,0xcf,0xed,0xeb,0xe7,0x46,0xa0,0x37,0xac,0x1a,0xd3,0x8d,0x29,0x98,0x24,0xad,0x2b,0x1f,0xb6,0x46,0x37,0x37,0x2c,0xf1,0x48,0x3f,0xdf -,0xc1,0xdd,0x36,0x69,0x3e,0xa7,0xe8,0x59,0xb1,0xb7,0xcf,0x6d,0x4d,0xa3,0x51,0x4e,0x48,0xd3,0xc9,0x3a,0xd5,0x77,0xcb,0x2c,0x57,0xa9,0xc4,0xe1,0x42,0xf9,0x51,0x34 -,0x3e,0x42,0xc1,0x2d,0x35,0x4f,0x4e,0xce,0x5c,0x6f,0xb8,0x6d,0xc4,0xad,0xbe,0xb7,0xc4,0xb8,0xbd,0xfb,0xd3,0x4e,0xc6,0xcf,0x3d,0x4d,0x3e,0x45,0x5a,0x38,0x4e,0x45 -,0x59,0x5a,0x3b,0x44,0x3b,0xd5,0x39,0xc7,0xe1,0x72,0xc8,0x40,0xb0,0xcf,0xcc,0xb7,0xb6,0xb6,0xc4,0xc7,0xbf,0xc9,0x50,0xba,0xfa,0xe6,0xbf,0x3c,0x64,0x3f,0x42,0x4c -,0x2f,0x3e,0x3d,0x3a,0xe9,0x35,0x35,0x4f,0x2e,0xf0,0xe4,0x44,0xbe,0x5e,0xc0,0xb5,0x5f,0xbd,0xca,0xad,0xb7,0xc3,0xa5,0xc7,0xb8,0xba,0xdd,0xb2,0x56,0xde,0xbd,0x33 -,0x26,0x1c,0x4e,0xba,0x3a,0x1f,0x57,0xc9,0x15,0x11,0x29,0xbc,0x96,0xa6,0x19,0x24,0x33,0x95,0x88,0x95,0x14,0x2a,0x85,0x87,0x98,0xa3,0x33,0x4f,0xa0,0x1e,0x05,0x1f -,0x9d,0x0c,0x0c,0x0a,0x0f,0x9e,0x9a,0x0e,0x14,0x9c,0x8f,0x8c,0x90,0xad,0x13,0xa4,0x8d,0x8c,0x8e,0xa5,0xda,0xb4,0xbf,0x13,0x16,0xd0,0x7e,0x0f,0x0c,0x0f,0x34,0xa3 -,0xbd,0x1d,0x1b,0x3f,0x98,0x8f,0xaa,0x2e,0x2d,0xb4,0x98,0xa1,0xaf,0xc2,0x34,0xb9,0x9b,0xb1,0x1f,0x9f,0xa2,0x1e,0x0e,0x14,0xb0,0x9c,0xd3,0x0c,0x0c,0x5e,0xb8,0x96 -,0x9e,0x09,0x18,0x8b,0x89,0xb6,0xb0,0xa7,0x9f,0x9d,0x48,0x13,0x25,0x93,0xc7,0x16,0x0a,0x0d,0x9d,0x8d,0x21,0x08,0x52,0x8f,0x8b,0xa2,0x1e,0x18,0x3a,0x99,0x98,0xa7 -,0x39,0xb7,0xab,0x42,0x17,0x20,0x9d,0x92,0x30,0x0d,0x17,0xae,0x94,0x99,0xd3,0x12,0x5d,0x8f,0x92,0x44,0x1f,0x11,0x1d,0x4e,0x28,0x29,0x2a,0x52,0x2d,0xae,0x55,0x26 -,0x96,0x8d,0xc8,0x1c,0x51,0x96,0x8b,0x98,0x18,0x14,0xc2,0xa0,0x95,0x7b,0x0d,0x12,0xbd,0xa2,0x3d,0x27,0x55,0xbf,0x21,0x1a,0x0e,0x34,0x99,0xaf,0x7a,0x0d,0x1e,0x8d -,0x88,0xa7,0x16,0xc2,0x89,0x88,0x9d,0x1b,0x1d,0x3c,0x40,0xb6,0x29,0x1e,0x3d,0x4f,0x1a,0x07,0x0f,0x55,0x9d,0x51,0x0c,0x1b,0x9a,0x8b,0x8a,0x9a,0x2d,0xaa,0x8a,0x8a -,0x9f,0x2d,0x3f,0x61,0x48,0x1a,0x14,0x38,0x2f,0x18,0x1a,0x18,0x1a,0xc9,0x9b,0x20,0x12,0x24,0xae,0x89,0x96,0x38,0x3c,0x9c,0x8e,0x90,0x9a,0xbd,0x3b,0xa0,0xa1,0x36 -,0x47,0xb3,0x4e,0x11,0x09,0x08,0x19,0x4a,0x3f,0x1b,0x07,0x12,0xa1,0x8e,0x9d,0x3c,0xaa,0x89,0x85,0x8f,0xa5,0xb1,0xa1,0x9f,0xa8,0x71,0x38,0xbd,0x65,0x10,0x06,0x08 -,0x18,0x5b,0x1b,0x05,0x0b,0x1d,0xa1,0x8d,0xab,0xc2,0xa8,0x8a,0x86,0x8c,0x95,0x9b,0x9e,0xb0,0x49,0x46,0xa6,0xb7,0x2a,0x16,0x0d,0x11,0x30,0x1e,0x19,0x0b,0x08,0x20 -,0xbf,0xb8,0x3f,0x3c,0xa8,0x91,0x88,0x8c,0x94,0x8e,0x9b,0x9d,0x9e,0x9b,0x99,0xa3,0x28,0x08,0x0a,0x0d,0x1a,0x3a,0x0e,0x06,0x09,0x2c,0xae,0xfc,0xb6,0xc4,0x9d,0x8c -,0x8d,0x8c,0x95,0x9b,0x90,0x9f,0xf1,0xae,0x8f,0xaa,0x1c,0x0c,0x0a,0x0d,0x19,0x2c,0x07,0x09,0x1c,0xaf,0x9d,0xbb,0xaa,0xa7,0xa9,0x8c,0x8e,0x93,0x99,0x9b,0xa5,0x19 -,0x37,0x9c,0xa4,0xdf,0x11,0x0d,0x13,0x0f,0xa0,0x1f,0x0d,0x27,0x28,0xbf,0xef,0xad,0xa1,0x3f,0x99,0x8f,0xa5,0x97,0x99,0x9d,0xdc,0xdb,0x9d,0xaa,0xaf,0x24,0x08,0x0b -,0x07,0xac,0x5a,0x12,0xe3,0x1b,0x26,0xbe,0x99,0x97,0x48,0x94,0x8f,0xb5,0x93,0x99,0x9f,0xb2,0x4c,0xbe,0x29,0xae,0xb0,0x0d,0x0f,0x05,0x38,0x25,0x0e,0xa9,0x1c,0x21 -,0xa6,0x9b,0x98,0xaf,0x90,0x92,0x3a,0x8f,0x9a,0xbd,0xa0,0x4b,0x1c,0x18,0xba,0xa4,0x15,0x1b,0x0b,0x22,0xe5,0x16,0x92,0x35,0x20,0xb1,0x34,0xae,0xe0,0x9a,0x97,0x2a -,0x9b,0xa2,0xc2,0x97,0xb1,0x50,0x2f,0xbf,0xb0,0x1c,0x3c,0x08,0x18,0xbd,0x0e,0x99,0xb9,0x27,0xa6,0x21,0xd1,0xa6,0xa5,0x91,0x3f,0xa5,0x9e,0xcd,0x92,0x9a,0xc8,0x39 -,0x26,0x4a,0x1a,0x32,0x15,0x0d,0xae,0x09,0x42,0xa8,0x12,0xa9,0xb8,0x67,0x9e,0xa2,0x8b,0xad,0xa8,0x8c,0x37,0x9d,0x93,0x7e,0x2c,0x1a,0x27,0x19,0x1f,0x47,0x08,0xb6 -,0x21,0x17,0x92,0x23,0xd1,0xad,0x2b,0x47,0x3b,0x9b,0x9b,0xd4,0x92,0x62,0xc5,0x8d,0xa9,0xe0,0xaf,0x3e,0x3a,0x23,0xd7,0x0b,0x18,0xa9,0x09,0xaa,0xcc,0x1d,0xa2,0x46 -,0x35,0x2f,0xb3,0x92,0x3b,0xa6,0xa4,0x2e,0x98,0x8f,0xad,0xab,0xde,0x3b,0x26,0x25,0x2e,0x0c,0xa5,0x17,0x12,0x9d,0x15,0x3b,0xa0,0x43,0xd8,0xcb,0x91,0xa3,0xc2,0x8f -,0x68,0xbb,0x95,0xa9,0x3c,0xd8,0x20,0x18,0x18,0x52,0x0f,0x19,0x99,0x0e,0xb2,0x9c,0x20,0xa0,0xa9,0x3e,0x2a,0x57,0x9b,0x3c,0x9c,0x98,0x2b,0xa1,0x98,0xae,0xba,0xac -,0x3c,0x23,0x2d,0x34,0x0a,0x58,0xbf,0x0b,0x9e,0x36,0x19,0x9e,0x66,0x22,0x2c,0xa4,0xa7,0x37,0x94,0xaa,0x2f,0x92,0x98,0xac,0x9d,0xa6,0x40,0x2d,0x36,0x25,0x0c,0xa1 -,0x25,0x09,0x9b,0x1a,0x1a,0xa3,0x49,0x24,0x60,0x9d,0xa5,0xb8,0x8f,0xae,0xec,0x96,0xb6,0xcd,0xb0,0x49,0x2b,0x2b,0x30,0x1e,0x0f,0x96,0x1a,0x18,0x8d,0x1e,0x39,0x96 -,0x2c,0x1c,0xd5,0xb7,0xd2,0xc0,0x94,0x3a,0xdd,0x92,0xae,0xc3,0x9f,0xc5,0x2f,0x29,0x30,0x19,0x0f,0x97,0x13,0x1a,0x92,0x13,0x49,0x96,0x1e,0x2b,0xb7,0xad,0xe7,0xcf -,0x96,0x2e,0xa9,0x8c,0xac,0xa4,0x9b,0xcf,0x4e,0x2b,0x38,0x14,0x13,0x9b,0x09,0x1d,0x9d,0x0b,0xcf,0xa4,0x1e,0x34,0xad,0x9b,0xb5,0x9f,0x91,0x3c,0x9e,0x99,0x4e,0xb5 -,0xb7,0x43,0x3e,0x2f,0x3d,0x12,0x2b,0x96,0x0c,0xae,0x9d,0x11,0xae,0xbe,0x17,0x25,0xb8,0xba,0x52,0xac,0xa0,0x37,0x9d,0x98,0xbf,0xa8,0xa3,0xfd,0x3d,0x2e,0x3a,0x0f -,0x3f,0x9f,0x0a,0xa3,0xae,0x14,0x9d,0xbc,0x1c,0xe6,0xb6,0xda,0x46,0xaf,0xae,0x39,0x97,0x9b,0xbf,0x9f,0xa8,0xd5,0x49,0x2d,0x2e,0x0b,0x3e,0x52,0x05,0x9f,0x32,0x13 -,0x99,0xd3,0x23,0xac,0x9a,0xa4,0xa8,0x94,0xb1,0xbc,0x95,0xb7,0x62,0xad,0xc3,0x2e,0x3e,0x21,0x1e,0x0e,0xb4,0x34,0x0c,0x93,0x2b,0x1a,0x99,0x28,0x1a,0xae,0xac,0xbf -,0xbf,0x9d,0xd1,0xaf,0x92,0xaa,0xbb,0x9d,0xb2,0x3f,0x48,0x28,0x29,0x10,0xa5,0x22,0x0f,0x93,0x20,0x29,0x99,0x1f,0x21,0xaf,0xcc,0x43,0xd7,0xa8,0x4b,0xa8,0x97,0xae -,0xae,0x9a,0xb6,0xef,0x5f,0x27,0x1e,0x10,0xad,0x11,0x13,0x95,0x19,0x35,0x99,0x21,0x49,0x9b,0xa3,0xa3,0xab,0x9d,0xec,0xab,0xa1,0x48,0xb7,0xad,0x35,0x3c,0x25,0x1f -,0x16,0x1b,0xa0,0x0e,0xd7,0x97,0x18,0xb6,0xa6,0x1a,0x71,0x9e,0x6f,0xb4,0xaf,0xb4,0xc2,0x9f,0xa2,0xb1,0xab,0xa5,0x5b,0x56,0x26,0x38,0x16,0x21,0xa1,0x0a,0xae,0x9e -,0x12,0xab,0xbe,0x14,0xcb,0xaa,0x35,0xea,0xa8,0xb9,0xc1,0x95,0xa2,0xa8,0x98,0xa2,0xb9,0xc9,0x2b,0x31,0x0d,0x2a,0xfa,0x05,0xa1,0xc6,0x0e,0xa8,0xc7,0x1c,0xa7,0x9b -,0xca,0xaf,0x9d,0xb0,0xbe,0x99,0xb1,0xbd,0xa3,0xc0,0x35,0x44,0x28,0x2d,0x0e,0xb5,0x68,0x09,0x8e,0x38,0x13,0x9c,0x35,0x1e,0xa4,0xaf,0x43,0xc8,0xa1,0xbe,0xb2,0x98 -,0xa9,0xa8,0xa3,0xb3,0x50,0x36,0x2a,0x2e,0x0c,0xb6,0x35,0x0b,0x91,0x2b,0x15,0x9c,0x2d,0x1d,0xa3,0xc8,0x35,0xbb,0xa0,0xb2,0xac,0x92,0xa2,0xa3,0x97,0xaf,0xcb,0x4f -,0x26,0x20,0x0b,0xcd,0x1a,0x0a,0x93,0x16,0x18,0x98,0x28,0x3f,0x99,0xb8,0xad,0xad,0xa2,0xa5,0xb8,0x9a,0xaf,0xaf,0xa9,0x72,0x4d,0x2b,0x28,0x25,0x0d,0xa0,0x1a,0x10 -,0x8f,0x12,0x23,0x99,0x21,0x3e,0x9a,0x7e,0xbd,0xab,0xa3,0xac,0xa3,0x9c,0xa8,0xa9,0xaa,0xbc,0x49,0x26,0x2b,0x24,0x0c,0xa1,0x17,0x11,0x95,0x16,0x1f,0x9c,0x1f,0x2d -,0x9e,0xeb,0xcc,0xad,0x99,0xb2,0xa2,0x93,0xa8,0xaa,0x97,0xbf,0x48,0x3d,0x27,0x16,0x0f,0xa8,0x0a,0x1b,0x9a,0x0d,0x2f,0x99,0x1c,0xc9,0x94,0xbe,0xae,0x9d,0xa0,0xbc -,0x9d,0xa4,0xb8,0xab,0xb3,0x38,0x49,0x22,0x30,0x16,0x1a,0x9c,0x08,0xf5,0x9c,0x0b,0xa8,0xa6,0x1a,0xb0,0xa1,0x6e,0xb0,0xa0,0xaa,0xaa,0x9d,0xaa,0xa7,0xa7,0xb8,0xd1 -,0x5d,0x1d,0x3a,0x11,0x1a,0x9c,0x05,0xc9,0x9c,0x09,0xa5,0xa9,0x10,0xaf,0xa2,0x39,0xad,0xa2,0xa3,0xa7,0x99,0x9a,0x9f,0x9d,0xa3,0xb9,0x60,0x26,0x2d,0x0b,0x2f,0x59 -,0x03,0x9f,0x3f,0x0c,0x9b,0x62,0x18,0x9e,0xa7,0xf7,0xa9,0x9e,0xaf,0xa9,0x9b,0xab,0xa0,0xab,0xb9,0xc0,0x33,0x20,0x3f,0x0b,0xaa,0x51,0x08,0x8f,0x2e,0x12,0x95,0x4f -,0x18,0x9a,0xde,0x47,0xb6,0xab,0xb1,0xe1,0xa0,0xac,0xde,0xa9,0xb7,0x36,0xd6,0x27,0x2b,0x14,0x9d,0x29,0x12,0x8d,0x1d,0x1b,0x96,0x20,0x1f,0x9f,0x48,0x6a,0xb8,0xa4 -,0xba,0xae,0x9a,0xab,0xaf,0xa6,0xcb,0x61,0x29,0x33,0x10,0x1c,0x9e,0x0a,0xcc,0xa2,0x11,0xb7,0xa4,0x21,0xac,0xae,0xb9,0xb0,0xc0,0xa0,0xc0,0xaa,0xaa,0xa6,0x48,0xa3 -,0x5b,0x38,0x2d,0x28,0x0f,0x6a,0xaa,0x09,0x95,0x5b,0x13,0x9a,0xb9,0x1c,0x98,0xca,0x5e,0xa9,0xf2,0xaf,0xfb,0xa3,0xe4,0xab,0xbc,0xbf,0xbe,0x37,0x28,0x2c,0x13,0xa0 -,0x44,0x0f,0x8f,0x1e,0x22,0x97,0x31,0x2f,0xa3,0xc3,0x4e,0xbc,0xa8,0x40,0xb1,0x9f,0x69,0xa2,0xb7,0x4f,0xe1,0x1f,0x28,0x19,0x17,0xa5,0x10,0x25,0x96,0x19,0xc4,0x96 -,0x29,0xad,0x9b,0xad,0xb4,0xbb,0xa4,0x54,0xab,0xa3,0xdd,0xcc,0xc2,0x5e,0x3b,0x20,0x37,0x0e,0x2a,0x9f,0x09,0xa6,0x9f,0x0e,0x9d,0x9f,0x1b,0x9f,0xa7,0xd0,0xbe,0xa6 -,0xa7,0x49,0x9e,0xb6,0xe2,0xa9,0xbb,0x4d,0x3c,0x20,0x28,0x12,0xb4,0x4e,0x0c,0x96,0x4c,0x14,0x92,0x4e,0x1c,0x99,0xba,0xc1,0xa9,0xa8,0xbd,0xb7,0x9e,0xaf,0xb9,0xa7 -,0x5e,0x36,0x2b,0x22,0x16,0x15,0xa6,0x0f,0x1f,0x94,0x17,0x3f,0x92,0x22,0xbe,0x95,0xd0,0xac,0xa2,0xb2,0xc2,0xa3,0xbc,0xaf,0xbb,0xb9,0x67,0x33,0x2c,0x1f,0x14,0x26 -,0xb6,0x0c,0xc3,0x9e,0x12,0xa7,0x9c,0x19,0x9e,0x9d,0x47,0x9c,0xb6,0xb9,0xa8,0xca,0xaa,0xae,0x76,0xa8,0x44,0x2b,0x2e,0x1f,0x0f,0xb1,0x34,0x0c,0x98,0x3f,0x15,0x99 -,0x5b,0x1e,0x9b,0xb3,0xba,0xa5,0xaa,0xb0,0xa9,0xa4,0xa5,0xb7,0xad,0xbe,0x2a,0x3a,0x1c,0x19,0x10,0xab,0x17,0x15,0x8e,0x1d,0x2c,0x8e,0x26,0x47,0x8f,0x46,0xa4,0xa0 -,0xf5,0xaf,0xaa,0xc3,0xb4,0xc5,0xcf,0x49,0x36,0x22,0x1f,0x11,0x19,0x9e,0x0c,0xdf,0x90,0x11,0xac,0x93,0x1c,0xa5,0x94,0x5a,0xa3,0xa5,0xfc,0xb7,0xb0,0xdd,0xb7,0x75 -,0xaf,0x32,0x38,0x25,0x20,0x10,0xd2,0xb5,0x0a,0x97,0xbd,0x12,0x9c,0xb0,0x19,0x9a,0xa3,0x50,0x9c,0xab,0xc7,0xa6,0xab,0xb6,0xad,0xbc,0xca,0x2e,0x2f,0x1a,0x1f,0x0e -,0xbd,0x2f,0x0e,0x90,0x51,0x1c,0x92,0xd9,0x27,0x92,0xab,0xbc,0xa2,0xae,0xd6,0xbd,0xb3,0xb6,0x3d,0xb3,0x5f,0x23,0x27,0x29,0x10,0x15,0x95,0x0b,0x59,0x8c,0x11,0xac -,0x91,0x1d,0xa6,0x91,0x4f,0xa7,0xa3,0xcf,0x48,0xaf,0xd5,0x54,0xcf,0xbd,0x2a,0x32,0x23,0x1f,0x15,0x2d,0xa3,0x0b,0xa1,0x9c,0x0f,0x9b,0xa2,0x19,0x9b,0x9c,0x4e,0xa1 -,0x9d,0xc3,0xba,0xa1,0xb6,0xcf,0xb2,0xc8,0x26,0x2a,0x1f,0x1b,0x0d,0xac,0x22,0x0e,0x8d,0x2a,0x21,0x91,0x3a,0x2e,0x92,0xb3,0xb7,0x9e,0xab,0xd1,0xb1,0xb7,0xb3,0xd5 -,0xc8,0xbc,0x27,0x23,0x25,0x1b,0x0d,0x9b,0x1a,0x15,0x89,0x1d,0x2a,0x8c,0x28,0x55,0x8e,0xd4,0xcb,0x9f,0xb5,0x30,0xb9,0xad,0x39,0xce,0xa9,0x27,0x2e,0x2d,0x1f,0x13 -,0x29,0xa3,0x0b,0xa7,0x97,0x0f,0x9d,0x9c,0x1e,0x9b,0x9d,0xbd,0xa9,0xa1,0xa7,0x3f,0xa7,0xac,0x42,0xbd,0xb7,0x21,0x2e,0x1d,0x1c,0x0d,0x39,0xd2,0x0a,0x92,0xb2,0x17 -,0x91,0xad,0x26,0x95,0xa1,0xd4,0xa3,0x9e,0x73,0xdb,0xa4,0xdb,0xe6,0xb3,0xcf,0x2a,0x2b,0x24,0x1a,0x0c,0xa5,0x24,0x0e,0x8c,0x33,0x1b,0x8e,0xd3,0x33,0x92,0xa8,0xc4 -,0xb3,0x9f,0x43,0x3e,0xa7,0xca,0x32,0xab,0x66,0x1f,0x2f,0x29,0x14,0x13,0x98,0x10,0x2a,0x8c,0x18,0xea,0x8f,0x27,0xb3,0x92,0x6b,0xa9,0xa8,0xac,0x6c,0xcf,0xb1,0x6d -,0x3a,0xb6,0x2c,0x25,0x25,0x20,0x0f,0x17,0x98,0x0d,0xce,0x8b,0x12,0xa9,0x8f,0x1e,0xa1,0x98,0xcd,0xad,0xa5,0xac,0x48,0xb3,0xb2,0x5e,0x6b,0xb7,0x27,0x28,0x20,0x1e -,0x0b,0x3f,0xae,0x09,0x95,0xa0,0x11,0x93,0xa3,0x22,0x94,0x9f,0xb5,0xb9,0xa2,0xb5,0x2d,0xa4,0xb4,0x2c,0xad,0xbb,0x1e,0x3e,0x22,0x1e,0x0d,0xab,0x44,0x0c,0x8c,0x43 -,0x16,0x8f,0x68,0x2f,0x95,0xa8,0xb8,0xb1,0x9c,0x55,0x5c,0xa1,0x4e,0x3e,0xab,0x38,0x29,0x2b,0x1e,0x1c,0x0c,0x9e,0x27,0x11,0x8b,0x3b,0x1c,0x8d,0xdc,0x3c,0x94,0xa5 -,0xd3,0xad,0x9e,0x39,0xbc,0xad,0xe0,0x3f,0xbc,0x39,0x26,0x1d,0x26,0x10,0x11,0x97,0x0d,0x39,0x8d,0x18,0xb6,0x91,0x2b,0xa5,0x97,0xaf,0xb0,0xaf,0xa2,0x3e,0xba,0xa5 -,0x56,0x48,0xa7,0x2d,0x28,0x26,0x20,0x0f,0x1e,0xa2,0x0c,0xc6,0x98,0x14,0xb4,0x9b,0x29,0xa7,0x9b,0xbb,0xae,0xa6,0xaa,0xb8,0xb7,0xac,0xb8,0x43,0xae,0x4c,0x25,0x25 -,0x2f,0x0b,0x3e,0xa9,0x09,0x9b,0x9d,0x11,0x9e,0x9b,0x1d,0x9e,0x99,0x5c,0xbe,0x9e,0xbc,0x3b,0xa3,0xaf,0x33,0xbf,0xaf,0x1f,0x30,0x28,0x1b,0x0d,0xb1,0x4f,0x0c,0x90 -,0xb8,0x19,0x95,0xa0,0x27,0x9a,0x9b,0x52,0xad,0xa3,0x7e,0xba,0xb0,0xb8,0xc5,0x56,0xbd,0x36,0x22,0x21,0x1c,0x0c,0xad,0x29,0x0e,0x90,0x3d,0x18,0x92,0xb5,0x2a,0x95 -,0x9c,0x66,0xa7,0x9a,0x4d,0xb3,0xa1,0xc5,0x58,0xc6,0x73,0x2a,0x25,0x25,0x16,0x0f,0x9e,0x19,0x1a,0x8e,0x21,0x2b,0x91,0x3c,0x4c,0x97,0xaf,0xbc,0xac,0xa8,0x4d,0xb3 -,0xad,0xbf,0x4f,0xbf,0x4c,0x2e,0x2e,0x1f,0x16,0x18,0x9e,0x14,0x28,0x90,0x1b,0x60,0x92,0x39,0xd3,0x96,0xb2,0xee,0xa3,0xc7,0xe4,0xa6,0xd4,0xaa,0x4d,0xea,0xdb,0x2b -,0x21,0x21,0x0f,0x1a,0xa0,0x0c,0x46,0x92,0x16,0xb3,0x91,0x25,0xa4,0x95,0xb9,0xaa,0xae,0xa9,0xc2,0xb2,0xa8,0xc9,0x30,0xae,0x2c,0x26,0x26,0x1e,0x0f,0x1f,0x9f,0x0a -,0xc7,0x93,0x11,0xa6,0x93,0x1f,0xa2,0x97,0xc9,0xaf,0xa1,0xb8,0xb8,0xa0,0xc7,0xbd,0x6c,0xdb,0x39,0x32,0x1d,0x22,0x0f,0x27,0xaa,0x09,0xa6,0x9c,0x13,0x9c,0x9b,0x1f -,0x9c,0x9a,0x6d,0xaa,0xae,0xc0,0xaa,0xb3,0xae,0xb7,0x3b,0xaf,0x2e,0x2a,0x1e,0x1c,0x0f,0x28,0xc1,0x0b,0xa9,0x9e,0x18,0x9e,0x9b,0x29,0x9a,0x98,0xb5,0xaa,0xa3,0xae -,0xab,0xb3,0xb5,0xb6,0x2d,0xb9,0x2e,0x20,0x1c,0x1e,0x0d,0x24,0xbc,0x0a,0xa4,0x9d,0x18,0x9b,0x9b,0x27,0x99,0x96,0x67,0xa2,0xa0,0xc1,0xa2,0xb7,0xb6,0xb5,0x34,0xb8 -,0x2b,0x26,0x1e,0x1e,0x0e,0x34,0xcd,0x0a,0x9b,0xa8,0x15,0x95,0xa8,0x22,0x91,0xa2,0xc5,0xa1,0xac,0xab,0xab,0xac,0xae,0xbe,0x4e,0xd2,0x27,0x25,0x1b,0x1c,0x0d,0x3c -,0x59,0x0c,0x98,0xb3,0x1a,0x94,0xab,0x30,0x92,0x9d,0xb3,0xa2,0xa4,0xb0,0xae,0xb0,0xbd,0xcc,0x47,0x58,0x32,0x22,0x18,0x25,0x09,0x45,0xed,0x08,0x97,0xb8,0x19,0x94 -,0xa7,0x32,0x92,0x9e,0xac,0x9d,0xac,0xa3,0xa4,0xc3,0xa9,0xcc,0x2f,0xce,0x2b,0x1d,0x1b,0x1e,0x09,0xc9,0x3e,0x09,0x93,0xbb,0x17,0x93,0xa7,0x26,0x96,0x9f,0xbc,0xa7 -,0xa7,0xa5,0xad,0xb7,0xa1,0x4d,0x34,0xad,0x2b,0x1e,0x1e,0x23,0x09,0xba,0x48,0x0a,0x95,0xc1,0x18,0x9a,0xa4,0x25,0x96,0x9a,0xc9,0x9c,0xa3,0xb8,0x9f,0xc0,0xb8,0xbe -,0x2f,0xcc,0x38,0x1b,0x1a,0x1d,0x0b,0xba,0x26,0x0d,0x93,0x64,0x1a,0x90,0xa7,0x2a,0x90,0x9c,0xbd,0x9e,0x9d,0xb0,0xaf,0xa6,0xb0,0x2f,0x6c,0xc3,0x22,0x1f,0x1e,0x17 -,0x0b,0xa9,0x1b,0x0c,0x8d,0x2f,0x1b,0x8c,0xb8,0x33,0x8f,0xa1,0xb8,0x9a,0xa1,0xab,0xa9,0xb9,0xa8,0x36,0x3a,0xb5,0x27,0x1a,0x21,0x18,0x0c,0xa9,0x1c,0x0f,0x8f,0x2e -,0x1f,0x8f,0xfd,0x38,0x91,0xac,0xc7,0x9c,0xa6,0xca,0xa8,0xb0,0xb1,0x4e,0xd5,0xc4,0x22,0x21,0x23,0x14,0x0f,0x9f,0x18,0x13,0x8c,0x26,0x29,0x8e,0x4a,0x47,0x8f,0xaf -,0x5a,0x98,0xaf,0xbb,0x9f,0x47,0xb1,0x38,0x52,0xb3,0x1f,0x1b,0x25,0x17,0x14,0xa9,0x13,0x1f,0x8e,0x1d,0x32,0x8e,0x2a,0xea,0x8e,0xa6,0xc9,0x9b,0x9d,0xcb,0xa3,0xa7 -,0xed,0x4c,0xd3,0x33,0x1b,0x1c,0x21,0x0c,0x1c,0xab,0x0c,0x2d,0x8f,0x15,0x49,0x90,0x28,0xc9,0x8e,0xb9,0xd9,0x9d,0x9d,0xe8,0xa6,0xaa,0xed,0xc9,0xa5,0xb1,0x1b,0x37 -,0x19,0x12,0x1d,0x96,0x06,0xeb,0xa2,0x00,0x1e,0x1a,0x48,0x32,0xa3,0xbd,0x28,0x86,0x8f,0x97,0x8d,0x8c,0x9f,0x9f,0x86,0xe1,0x19,0x8f,0x2d,0x0d,0x99,0x0b,0x1b,0x81 -,0x90,0x51,0x8b,0xaf,0x10,0x64,0x19,0x08,0x06,0x0b,0x06,0x0d,0x08,0x0b,0x07,0x0d,0x0e,0x05,0x10,0x06,0x09,0x0a,0xc9,0xfa,0x0f,0x8c,0x95,0x2c,0x86,0x8b,0xa2,0x86 -,0x86,0x87,0x82,0x82,0x83,0x84,0x81,0x84,0x82,0x86,0x88,0x90,0x26,0x3b,0xbb,0x1d,0x13,0x1d,0x04,0x17,0x29,0x00,0x13,0x0f,0x00,0x12,0xf9,0x0b,0x0b,0x07,0x03,0x13 -,0x02,0x07,0x05,0x11,0x21,0x12,0x1a,0x0f,0x0f,0x15,0x95,0xa9,0x90,0x80,0x8a,0x98,0x81,0x82,0x86,0x83,0x81,0x87,0x85,0x83,0x8d,0x85,0x94,0x8d,0x3c,0x9e,0xb9,0x33 -,0x74,0x13,0x0a,0x06,0x29,0x0a,0x08,0x2c,0x04,0x06,0x19,0x06,0x0b,0x18,0x12,0x08,0x0d,0x12,0x19,0x1b,0x0d,0x49,0x3b,0xaa,0xb3,0x13,0xbf,0xa7,0x30,0x26,0x8b,0x20 -,0xc9,0x82,0xbe,0x90,0x86,0x8c,0x87,0x85,0x83,0x88,0x88,0x89,0x85,0x85,0x89,0x88,0x4f,0x96,0x33,0x15,0x21,0x0f,0x0a,0x03,0x0d,0x01,0x16,0x0a,0x01,0x08,0x0e,0x0c -,0x0e,0xdd,0x0e,0x17,0x09,0x07,0x0b,0x2f,0xaf,0x25,0x55,0x2f,0xb5,0x31,0xbb,0xac,0xbd,0x80,0x95,0xb8,0x81,0x86,0x8f,0x84,0x82,0x8b,0x84,0x84,0x8b,0x8f,0x88,0xad -,0xa4,0xb0,0xa3,0x36,0x18,0x2c,0x14,0x17,0x09,0x06,0x04,0x20,0x0e,0x03,0x15,0x0e,0x0a,0x1e,0x09,0x06,0x07,0xd5,0x1d,0x1f,0xac,0x1b,0x16,0x0d,0x8f,0x2a,0x95,0x8f -,0x2f,0xac,0x93,0xf8,0x0e,0x86,0xa6,0x9b,0x92,0x2e,0x84,0x8a,0x91,0x8c,0x8c,0x85,0x84,0x80,0x8e,0x8d,0x8a,0xa0,0xb5,0xb9,0xce,0x52,0x11,0x05,0x08,0x00,0x06,0x15 -,0x04,0x07,0x16,0x00,0x10,0x1a,0x0c,0x9b,0x2d,0x0b,0x28,0x54,0x19,0x24,0xab,0x3e,0x39,0x4c,0xbb,0xab,0xac,0xc7,0x9f,0xd0,0x99,0xaf,0x7d,0x80,0x9a,0x8f,0x84,0x86 -,0x8f,0x92,0x82,0x87,0x97,0x35,0xbd,0xcc,0x8a,0xad,0x0f,0x30,0xa1,0x22,0x0f,0x22,0x08,0x07,0x16,0x1c,0x0e,0x40,0x18,0x02,0x2f,0x04,0x0e,0x1a,0x21,0xac,0x07,0x0e -,0x06,0x25,0x35,0xb2,0xd1,0x11,0xb6,0x0b,0xde,0x8d,0x76,0x92,0x61,0xa8,0x85,0x88,0x8d,0x83,0x80,0x98,0xa3,0x84,0x86,0x9c,0x8f,0x90,0x8c,0xa3,0x9c,0x1d,0x23,0xb2 -,0x97,0x19,0x0c,0x0b,0x0f,0xb8,0x01,0x21,0x14,0x0f,0x0d,0x36,0x13,0x11,0x17,0x0a,0x3c,0x1e,0x18,0x19,0x27,0x16,0x0e,0x24,0x92,0x48,0x20,0x07,0x0f,0x1d,0xbd,0x87 -,0x9d,0x84,0xa1,0x2c,0x8b,0x8a,0x80,0x92,0x8b,0x8f,0x95,0x81,0x8b,0x9b,0xca,0x88,0xbc,0xa0,0x98,0x2b,0x2a,0x16,0x26,0x44,0x9f,0x09,0x14,0x92,0x0e,0x1a,0x1e,0x1b -,0x28,0x09,0x29,0x1c,0x0b,0x0f,0x11,0x0c,0x1c,0x0f,0x0c,0x0b,0x19,0x1c,0x1f,0x26,0x09,0xdb,0xb4,0x9e,0x8b,0x85,0xa3,0x8e,0x86,0x8e,0x88,0x85,0x8b,0x99,0x8d,0x8f -,0x9d,0x8d,0x98,0xa7,0xaa,0xb8,0x93,0x1d,0x14,0x07,0x1b,0xa5,0x16,0x2f,0x8f,0x0b,0x3d,0xa3,0xae,0x31,0x2d,0x9c,0x16,0xeb,0x14,0x3d,0x0b,0x13,0xb5,0x1b,0x1e,0x0d -,0x07,0x0c,0x0d,0x0a,0x30,0x1c,0x22,0x9c,0x18,0x2b,0x8c,0xa8,0x9c,0x95,0x9b,0x96,0x9f,0x8e,0x8e,0x90,0x9c,0x8f,0x9b,0x9c,0x9b,0x92,0xba,0x9a,0x9f,0x98,0x93,0x2f -,0x8b,0x5a,0x9a,0xa8,0xad,0x53,0xbd,0x27,0x0d,0x30,0x3a,0x0f,0x08,0x12,0x1c,0x15,0x0a,0x0e,0x0e,0x10,0x07,0x06,0x13,0x52,0x02,0xab,0xac,0x0b,0x8c,0xad,0x49,0x8d -,0x8d,0x92,0x98,0x92,0x96,0x98,0x8f,0x9c,0x86,0x82,0x2c,0x9e,0xfa,0xc8,0x9e,0x35,0xa4,0x0f,0xa6,0x8e,0xb4,0x9b,0xbd,0x15,0x39,0x94,0x9a,0x28,0x2d,0xae,0x17,0xbd -,0x9e,0x0c,0x0d,0x26,0x18,0x0f,0x1e,0x07,0x09,0x11,0x13,0x0d,0xc0,0x1c,0x12,0xb7,0x2a,0xa4,0x1c,0xac,0x18,0xbe,0xca,0xca,0x9b,0xaa,0x48,0x9f,0xb5,0xbf,0x8c,0x23 -,0x99,0x5a,0x86,0x99,0x37,0x84,0x9a,0x88,0x89,0x98,0x89,0x97,0x94,0x9e,0xa8,0x96,0x2b,0x26,0x1f,0x3e,0x0d,0x07,0x33,0x0e,0x0c,0x09,0x0b,0x07,0x10,0x0e,0x18,0x1a -,0x1a,0x2c,0x12,0x9e,0x1e,0xc1,0x9d,0x16,0xda,0x9a,0x2e,0x9c,0x7c,0x29,0xb8,0x21,0x93,0x1e,0x98,0xaa,0xaf,0x92,0x26,0x85,0x88,0x8e,0x83,0x95,0x8e,0x88,0x98,0x94 -,0xa7,0x8e,0x3e,0xbe,0xa7,0x25,0x16,0x18,0x23,0x15,0x0e,0x0d,0x0f,0x0e,0xb6,0x0c,0x32,0x15,0x0e,0x76,0x13,0x9a,0x1e,0x0e,0x95,0x1f,0x1c,0xb7,0x27,0x2e,0x2b,0x33 -,0x38,0x10,0x9d,0x33,0x56,0xad,0x10,0x8f,0xa6,0xae,0x8e,0x98,0x97,0x8b,0xa4,0x8b,0xa8,0x8c,0x84,0xa6,0x93,0xac,0xb9,0xad,0x94,0x21,0x42,0x21,0x12,0x4a,0x42,0x0e -,0x15,0x1e,0x0c,0xa5,0x21,0x1a,0x36,0x1c,0x34,0x4f,0x3b,0x9f,0x3e,0x99,0xa4,0x1b,0x4b,0x0d,0xaf,0x24,0x29,0x14,0x12,0x24,0x12,0x0f,0x1d,0x28,0x39,0x3b,0x2d,0xa7 -,0x9f,0x8c,0xa8,0x9c,0x89,0x8a,0x91,0x8a,0x8c,0x8c,0x9f,0x8e,0x91,0x49,0xcb,0x9e,0x40,0xc6,0x1f,0x16,0xd5,0x15,0xd7,0x28,0x0a,0x1b,0x25,0x1e,0x47,0x1b,0x11,0x30 -,0x30,0x0f,0x18,0xa3,0x1e,0x0b,0xb5,0x0b,0x26,0x58,0xca,0xaf,0x43,0xa1,0x1b,0x96,0xa7,0x99,0x97,0xb0,0x8c,0xa4,0x97,0x8d,0xa2,0x90,0xaa,0x9c,0x9b,0x8c,0xa8,0x18 -,0x2b,0x4e,0x9b,0x1c,0x4c,0x15,0x11,0x1b,0x14,0x3d,0x1d,0x0f,0x25,0x19,0x4a,0xa5,0x16,0xac,0xb1,0x4e,0xc2,0x95,0x95,0x3d,0xcd,0x9d,0xa2,0xd5,0x9f,0x25,0x20,0xaf -,0x3a,0x3f,0x2a,0x1b,0x12,0x1d,0x36,0x11,0x1f,0x19,0x12,0x22,0x1b,0xa2,0x4b,0xa7,0xb6,0x59,0x9d,0x9b,0x9a,0xa4,0x8c,0x99,0x8f,0x8d,0xa2,0xa2,0x8f,0x97,0x95,0xc2 -,0x9e,0x3b,0xc6,0x4c,0x10,0x46,0x26,0x20,0x16,0x16,0x18,0x17,0x12,0x2e,0xcd,0x34,0x1c,0xfc,0x24,0x55,0x0f,0x5c,0x9e,0xe7,0xd8,0x2a,0xa5,0xa5,0xc2,0x2d,0xb7,0xa9 -,0xe8,0x28,0xa9,0x25,0xdd,0xed,0xa7,0x2f,0x2e,0xa3,0xae,0x91,0x9a,0xa3,0xac,0x9b,0xa3,0x99,0xa8,0x50,0xbb,0x24,0xa9,0x50,0x3f,0x23,0x0f,0x6f,0x23,0x49,0x22,0x1e -,0x2b,0x65,0x19,0x32,0xcf,0xe7,0xbd,0x27,0x3e,0xb3,0xa2,0x4d,0xb2,0xda,0x33,0x9f,0xab,0x29,0x99,0xbd,0x45,0xb0,0xd1,0x32,0xcc,0x1e,0x4b,0xa6,0x1b,0xce,0x1c,0x52 -,0xfa,0xd5,0xbf,0x26,0xb4,0xd8,0x58,0xa2,0xc5,0xc8,0xaa,0xc5,0xa7,0x9f,0xa9,0xd3,0xc6,0x74,0xb2,0xb9,0xcc,0xa4,0xb6,0xca,0x4e,0x41,0xcf,0x3f,0x57,0x28,0x2f,0x39 -,0x24,0x30,0x43,0x26,0x25,0x1e,0x31,0x31,0xe8,0xa7,0x23,0xbf,0xf6,0x2c,0x24,0x33,0x98,0xad,0x35,0x65,0x29,0xd4,0x9d,0xa6,0x9f,0xac,0x2d,0xcc,0xaf,0xa7,0x9f,0xad -,0xc6,0x55,0xb7,0xb2,0xac,0xb9,0xba,0xcc,0x49,0xb1,0xc7,0xbe,0xb1,0xca,0xdc,0x2e,0xab,0xad,0x54,0xdf,0x3e,0x24,0x2f,0xb1,0xb2,0x50,0x3f,0x27,0x1f,0x24,0x2e,0xbf -,0x39,0x6b,0x2c,0x20,0x22,0xdd,0xbd,0xc8,0xac,0x2f,0x27,0x4c,0x53,0x3c,0x62,0x3c,0x33,0x26,0x41,0xa6,0xa4,0xc7,0x2e,0x1f,0xd0,0xac,0xc2,0xc1,0xa0,0xb5,0x3f,0x44 -,0x2d,0xb9,0xc7,0xb9,0xae,0x77,0x2b,0x5f,0x38,0xbb,0xd7,0x31,0x3a,0x34,0xae,0xbc,0x51,0x56,0xbe,0x25,0x24,0xa4,0x9d,0x42,0x76,0x29,0x2a,0xcd,0x3e,0xa0,0xcf,0x24 -,0xb7,0x29,0x48,0xaf,0x30,0x25,0x3f,0xbd,0x30,0xc2,0xce,0xa6,0x3d,0x28,0xbf,0xeb,0xb7,0xab,0xcb,0xcf,0xa9,0xc8,0xab,0xc5,0x3b,0x4c,0x41,0x3f,0xbb,0x5c,0x46,0x46 -,0x44,0x33,0x49,0x6d,0x34,0xb9,0xde,0xb4,0xcc,0x38,0x2f,0x56,0xc5,0x9c,0xa8,0x32,0x39,0x2b,0xc9,0x36,0xd8,0xb6,0x44,0x36,0x47,0x35,0xde,0xb9,0x2b,0xbe,0xab,0xa2 -,0xbd,0x25,0x6b,0x69,0x55,0xb8,0x9c,0xb2,0x29,0x3c,0x4c,0xbf,0x66,0xbe,0x65,0x47,0x47,0x4d,0xb8,0x3c,0x4a,0x36,0x37,0xed,0x38,0xb1,0xbb,0x42,0xed,0xb7,0xae,0x36 -,0x36,0xb7,0xa8,0xbc,0xc9,0x2b,0x3d,0xbb,0x3d,0x4f,0x2e,0x1f,0x55,0x9f,0xae,0x74,0x1c,0x1f,0xa2,0xb2,0x48,0xb7,0xd5,0x4a,0x53,0xb5,0xbb,0xc9,0xc5,0xb3,0xe7,0x7d -,0xb2,0x3f,0xb4,0x3b,0x2e,0x27,0x6b,0x9e,0xae,0xdd,0x6e,0xd5,0x2a,0xd4,0xb6,0xaf,0xc5,0xbf,0xb3,0xd5,0xcb,0x22,0x2c,0xb4,0xd4,0xad,0xed,0x25,0x42,0xce,0x3d,0x3c -,0x76,0x50,0xad,0xbe,0x34,0x20,0xec,0xae,0x6d,0xab,0xda,0xbb,0xd5,0x2c,0xcb,0x41,0x5f,0xae,0x64,0xde,0xbf,0x34,0x39,0x3f,0x60,0xb4,0x7b,0x49,0x3e,0x3e,0xcd,0xaa -,0xa4,0x4c,0x25,0x38,0xb5,0xad,0x57,0x43,0xba,0x60,0x3b,0x74,0x5d,0xe0,0xd9,0x35,0x62,0x48,0xf7,0xbb,0x37,0xb3,0x50,0x46,0xc8,0x30,0x4f,0x36,0x44,0xa8,0xcf,0x34 -,0x42,0x2f,0xbc,0xab,0xbe,0x2b,0x36,0xc8,0xc8,0xac,0xc9,0x4d,0xc1,0xb1,0x4c,0xa7,0xb9,0xc2,0xba,0xd2,0xe8,0x48,0xc0,0x51,0xc6,0x3b,0x3d,0x7e,0x5b,0xbd,0x5f,0x28 -,0x2d,0x33,0xe6,0xdd,0xbe,0xd5,0x38,0x3f,0x37,0xcc,0xae,0xaf,0x45,0x44,0xcf,0x42,0xc9,0x44,0xdc,0xc6,0x3d,0x2e,0xfb,0xbb,0xc2,0xcb,0x26,0xe0,0xb8,0xb6,0x3a,0x4b -,0x30,0x59,0xbe,0xb8,0xab,0x39,0xcc,0xb8,0x5b,0x51,0x3f,0x68,0x9d,0xbf,0x35,0x37,0x73,0x61,0xb7,0x4a,0x49,0xcb,0x27,0x38,0xbb,0xae,0xc5,0xba,0x38,0x49,0xd8,0xe4 -,0xbd,0xac,0x69,0x31,0x2a,0x33,0xb4,0x55,0x4f,0x58,0xcf,0x5c,0x5a,0x5e,0x2d,0xb7,0xea,0x2d,0xaf,0xb5,0xc8,0xbe,0x56,0xaf,0xb0,0x53,0xda,0x46,0xc5,0xbb,0x3e,0x2d -,0xfb,0x5a,0xc9,0xd8,0x37,0x34,0x35,0xb8,0xc0,0xba,0x3c,0x31,0x33,0xc9,0xa3,0xb6,0x3f,0x4c,0x40,0xee,0xb9,0x5e,0xb5,0xe7,0x3d,0x3c,0xcd,0x3f,0x69,0xaf,0x33,0x35 -,0x39,0x34,0x3f,0xc0,0x6b,0xf5,0xe2,0xb4,0xad,0x5b,0x4a,0x5f,0xaa,0xbf,0xbe,0x68,0xdd,0x44,0x5c,0xb6,0x4c,0x36,0x33,0xd1,0xc7,0xe8,0x49,0x3b,0x3e,0xcc,0x6b,0xb2 -,0xd2,0xc6,0xcd,0x36,0x58,0xcb,0xaf,0xc3,0x49,0xee,0x3a,0x4c,0xaf,0x4a,0x36,0x3c,0xbd,0xd8,0x56,0x33,0x51,0xae,0xfb,0x3c,0x36,0x5a,0xe8,0xaa,0xef,0x43,0xb0,0xcd -,0xcc,0x4e,0x38,0x68,0xbd,0x4c,0xbf,0xc4,0x2c,0xba,0x61,0x44,0xc9,0x41,0x3c,0x2c,0xca,0xc3,0xc5,0xec,0x4b,0xa7,0xc6,0x36,0x3d,0xc8,0xad,0xb6,0xcb,0xdf,0x5c,0x2e -,0xe1,0x57,0x3f,0xc0,0x3a,0x28,0x29,0xbc,0xb5,0x46,0x4e,0xcf,0x4b,0x41,0x49,0xee,0xb3,0xba,0xa9,0x47,0x5d,0xbf,0x58,0xb7,0x42,0xe6,0xb4,0x3d,0x25,0xb7,0xbd,0xfb -,0x69,0x44,0xf5,0x3a,0xcd,0x3f,0x47,0x45,0xe0,0xab,0xa7,0xbc,0x39,0x35,0xe6,0xb6,0xc1,0xb6,0x65,0x2f,0x41,0x33,0xd1,0xcd,0xe3,0x40,0x2c,0x73,0x26,0xe9,0xaf,0xcd -,0x60,0x4e,0x49,0xcc,0xaf,0xd9,0xb9,0x49,0x3d,0xb4,0xac,0xc9,0x3a,0x3a,0x47,0x76,0xc3,0x56,0x2f,0x76,0x56,0x4b,0xbe,0x3c,0xc0,0xc0,0x3a,0xd8,0x76,0x6e,0x7e,0xbb -,0xc8,0xc3,0xc9,0x4a,0x3f,0x43,0xbd,0x33,0x2c,0xc0,0xbc,0xbc,0x2f,0x2d,0xbe,0xb8,0xb2,0x29,0x2c,0xb1,0xa5,0xf7,0x24,0x43,0xbc,0xa9,0xba,0xd5,0xd3,0x49,0x48,0x52 -,0xb7,0x5a,0x34,0xf4,0xe9,0xb0,0xb3,0x49,0x2b,0x27,0x3f,0xd5,0xb7,0xab,0x3f,0x71,0xae,0x5f,0x3d,0xcd,0x50,0x7e,0xc4,0x5b,0xb8,0xf9,0x3a,0xda,0x6b,0x2a,0x32,0xbe -,0xb9,0x49,0x37,0x3d,0xd5,0x3e,0x63,0xb2,0xcc,0xc8,0x42,0x3b,0xbb,0xb0,0xca,0xff,0xbd,0x64,0x2c,0x40,0xb0,0xb1,0xc5,0x39,0x25,0x4e,0x5b,0xbd,0xa8,0xc1,0x2d,0x33 -,0xdc,0xbd,0xa9,0xe2,0x32,0x73,0x46,0xbc,0xab,0x79,0x3f,0x30,0x3a,0x5f,0x45,0xdc,0xba,0xc5,0x38,0x30,0x3b,0x38,0xb5,0xea,0x5c,0xaf,0xc7,0x36,0xc2,0xab,0xc5,0x53 -,0x3b,0xd2,0xb6,0xbe,0x70,0x39,0xcc,0x4a,0x35,0xe5,0x4e,0xea,0x4b,0x58,0x2f,0x45,0xc2,0xc1,0xba,0xc4,0x54,0x78,0x57,0xd9,0xc5,0xc2,0xa9,0x6c,0x2a,0x43,0xb9,0xb5 -,0xb5,0x29,0x28,0x3c,0x58,0xae,0xbe,0x6f,0x27,0x24,0x4d,0x6f,0xad,0xb0,0xbc,0xce,0x3c,0x49,0xc2,0xca,0x42,0x37,0xda,0xb6,0x55,0xe7,0xb7,0x4a,0x27,0x33,0xc2,0xbe -,0xbb,0xab,0x37,0x35,0xbc,0xbe,0xbf,0xe6,0x4e,0xad,0xd8,0x4e,0x38,0xe8,0xa5,0xbd,0x4b,0x2c,0x4b,0x74,0xc2,0x36,0x58,0xc4,0x2e,0x40,0xdb,0xbe,0x58,0x2e,0xe6,0xbb -,0x38,0x4f,0xbd,0xb8,0xb6,0xdd,0xed,0xd2,0xc4,0x3f,0x47,0xb0,0x48,0x37,0x49,0x52,0xe7,0x53,0x4d,0x39,0xc3,0xd1,0x3c,0xa6,0xb0,0x2b,0x33,0x3e,0xa0,0xa7,0x3d,0x57 -,0x3e,0xbf,0xae,0xbc,0xfb,0xd9,0x31,0x54,0xe5,0x73,0xb2,0x33,0x35,0xf7,0x48,0xb8,0x44,0x4b,0x38,0x39,0xbb,0x28,0xae,0xb6,0xc9,0xdb,0x2f,0x3a,0x6a,0xa6,0x53,0xad -,0xa7,0x33,0x30,0x2e,0xda,0xb5,0x37,0x4f,0xad,0xef,0x32,0xbf,0xee,0x3c,0x43,0x34,0xab,0xad,0x50,0x41,0x40,0xbd,0xc1,0x3e,0x7b,0xaf,0xb8,0x3a,0x36,0x66,0xc4,0x4c -,0x33,0xaf,0xcf,0x4d,0x59,0xde,0x39,0x3b,0xab,0x4d,0x56,0xba,0xc9,0x49,0x48,0x6c,0x4a,0x40,0x62,0x73,0x37,0xad,0xbc,0x48,0x3e,0x40,0xb2,0xde,0xb1,0x4b,0x48,0x5f -,0x3c,0x64,0xb9,0xb5,0x38,0x57,0x3a,0x5a,0xcb,0x42,0xca,0xba,0x6b,0x40,0x61,0xc1,0xbd,0xcc,0xcf,0xc2,0x3b,0x3d,0xe3,0x4a,0xd6,0xc4,0x52,0x4a,0x5b,0x56,0x4f,0xc8 -,0x4d,0x2e,0xbd,0x5a,0xb9,0xaa,0x3d,0x37,0x39,0x57,0x39,0xbb,0xb4,0xf1,0x69,0x3f,0xbd,0xde,0xcc,0xcf,0x55,0xd3,0xcb,0x4f,0x3c,0xc0,0xc3,0x3c,0x41,0xd6,0xba,0xcd -,0xcf,0x34,0x39,0x68,0x44,0xe3,0xc3,0xad,0xba,0x37,0x2f,0x4b,0xce,0xaf,0xc0,0xd8,0x38,0x3c,0x30,0xbc,0xac,0xd6,0x4b,0x2b,0x49,0x4f,0xa9,0x5a,0x5a,0xcc,0x4c,0xef -,0xe5,0xc5,0x2b,0xee,0xe7,0xc7,0xaa,0x68,0xe9,0x41,0x3a,0x7a,0x4b,0x4e,0x3a,0xd1,0xa9,0xc5,0x44,0x32,0x41,0xea,0xb5,0xaa,0xba,0x4d,0x2f,0x2f,0x46,0xa7,0xbe,0x41 -,0x60,0xd4,0x4d,0x2c,0x58,0xbf,0xbc,0x40,0xdf,0xe9,0x3b,0xc0,0xb3,0x57,0x4f,0xbe,0x34,0xe9,0xaf,0x45,0x46,0xbe,0xdb,0x57,0xca,0x36,0x49,0xbc,0xbf,0x42,0x32,0xce -,0xc5,0xe9,0xd3,0xbf,0x29,0x47,0xb4,0xd4,0xb7,0xd7,0x5a,0x41,0xd7,0xbe,0x52,0xe3,0xc2,0x58,0x49,0x4d,0xdd,0x37,0x2d,0x51,0xb6,0x6a,0xeb,0xaf,0x3c,0x51,0x3b,0x36 -,0xcd,0xa9,0xa2,0xe5,0xbf,0x2f,0x2c,0xc9,0xb6,0xad,0x66,0x45,0x35,0xb0,0xca,0x58,0x43,0x2e,0x53,0x64,0xbd,0xc9,0x3c,0x2d,0x3f,0xbc,0x63,0x2b,0xc9,0xbd,0xa8,0x69 -,0x2e,0x3f,0xd6,0xb4,0xc8,0xbb,0xc8,0xe1,0x47,0x42,0xca,0xdc,0x41,0xe1,0x32,0x3d,0xaf,0xc0,0x2b,0x51,0xca,0x3f,0xcf,0xc0,0xb2,0xc1,0x36,0x61,0xe0,0xdb,0xc9,0xda -,0xe4,0x59,0xfb,0x2b,0xd4,0xa8,0x2d,0x2b,0x3f,0xd5,0xba,0x49,0xc9,0xe7,0x2c,0x37,0xb0,0xb7,0xb8,0x67,0x43,0xcf,0x46,0xd5,0x4a,0x69,0xc6,0xba,0x3a,0x2e,0xc4,0xbb -,0xb4,0x42,0x37,0x34,0x62,0xb5,0xaf,0xd0,0x69,0xd9,0x5d,0xda,0x2e,0xae,0xd1,0x3f,0xb5,0xc2,0x4e,0x37,0xaf,0xcd,0x3f,0x4d,0x2f,0x3a,0xb7,0xb2,0xb0,0x3b,0x29,0x39 -,0xb9,0xc1,0x3f,0xaa,0x6f,0x29,0x5e,0x5d,0x39,0xbf,0x6d,0x4d,0x54,0x3b,0xae,0xc8,0xc1,0xe3,0x2b,0x60,0xcd,0x4a,0xae,0xbc,0x46,0x38,0xef,0xad,0x45,0xc4,0xd1,0x3e -,0xbf,0xb2,0x54,0x50,0xcc,0xd3,0x3d,0x69,0xae,0x3d,0x3a,0xcb,0x2c,0x3a,0xcb,0x4c,0xbb,0xc6,0x40,0x3c,0x44,0x34,0xe5,0xb7,0xbb,0xcd,0x45,0x4b,0xcc,0xc2,0x63,0x38 -,0x25,0xc9,0xb1,0xc7,0x6b,0x33,0xcf,0xdb,0x43,0x39,0xdc,0xaa,0xb9,0xcd,0xec,0x41,0xd3,0x4a,0xcf,0xb9,0xb6,0xbc,0x63,0x2d,0x38,0xcb,0x3a,0xab,0xc5,0xe9,0xa7,0xad -,0xa1,0x9a,0x2e,0x2c,0x34,0x0e,0x0f,0x19,0x2b,0xb8,0xae,0x27,0x28,0xab,0xc3,0x2d,0xa2,0xd9,0x18,0xb2,0x98,0x8a,0x99,0x1b,0x99,0x8e,0x98,0x9f,0x9d,0xbf,0x1b,0x1a -,0x10,0x20,0xac,0x9a,0xbe,0xbf,0x16,0x0f,0xeb,0x1d,0x1b,0x33,0x39,0x2a,0x9f,0x94,0x1d,0x29,0xac,0xbc,0xbf,0x3d,0x2d,0x98,0xbd,0x05,0x0e,0x96,0x92,0xa5,0x9d,0xbe -,0x25,0x4d,0xac,0x2d,0x9c,0xa4,0x2b,0xbe,0x54,0xdd,0x8f,0x8e,0x36,0x23,0x17,0x28,0xd4,0x32,0x19,0x15,0x2c,0x96,0x86,0x96,0xae,0x9b,0xa7,0x19,0x19,0x27,0xb6,0x3b -,0x16,0x0b,0x16,0x15,0x16,0xc7,0x29,0x2d,0xb3,0x95,0xac,0xda,0x26,0x17,0x40,0x93,0x8d,0x8d,0x93,0xad,0x2e,0xbb,0x36,0x1a,0x95,0x9a,0x41,0x2f,0xb0,0x29,0xbb,0xab -,0x32,0x6e,0x24,0x2f,0x9c,0x5c,0x07,0x11,0xd0,0xaf,0xb9,0xbc,0xb2,0xaa,0xc4,0xb8,0x3a,0x4b,0xa4,0x9b,0xc8,0x2d,0xba,0x98,0x92,0x32,0x1b,0x1c,0x24,0x62,0x17,0x08 -,0x07,0x0b,0x47,0x98,0xac,0x67,0x94,0x8f,0xaa,0x2b,0xbe,0x8a,0x88,0x9e,0x2d,0xb0,0x97,0x93,0x9c,0xa8,0x20,0x7a,0x8f,0xaf,0x24,0x0e,0x07,0x16,0xdf,0x26,0x1b,0x1e -,0x2c,0xed,0x1e,0x0e,0x1e,0xbd,0xfe,0x32,0xc8,0x98,0x8c,0x98,0xd4,0x4b,0xbb,0x9c,0x98,0x94,0x5d,0x0a,0x11,0xc4,0xa6,0xae,0x4a,0x34,0xb2,0x21,0x15,0x0e,0x21,0x95 -,0xa2,0x1d,0x0d,0xd1,0x8b,0x8c,0xad,0x3d,0x5e,0xbc,0x95,0x9e,0x69,0x29,0x26,0x90,0x8a,0x98,0x94,0x8e,0x8f,0xd3,0x0e,0x1a,0xb3,0x5a,0x10,0x0a,0x07,0x1b,0x9a,0xae -,0x22,0x5e,0x8f,0x86,0x86,0x8a,0x8d,0xb4,0x3d,0xa2,0x9d,0x9e,0xa0,0x58,0x1b,0x0b,0x00,0x05,0x0d,0x0d,0x08,0x01,0x02,0x09,0x08,0x02,0x05,0x01,0x0c,0x1f,0x0b,0x0d -,0x1a,0x2a,0xc5,0x2f,0x92,0x86,0x92,0x89,0x88,0x8d,0xa7,0x9d,0x83,0x83,0x9f,0x3e,0x92,0x85,0x81,0x8d,0xa2,0xa4,0xa0,0xa2,0xb7,0x19,0x1e,0xb8,0xb8,0x8e,0x8a,0x88 -,0x84,0x87,0x88,0x95,0xc3,0x8e,0x84,0x90,0x3d,0x18,0xbf,0x9d,0xc2,0x37,0x1f,0x22,0x2f,0x32,0x15,0x07,0x01,0x04,0x03,0x02,0x28,0x0e,0x15,0xbb,0x09,0x07,0x0f,0xc2 -,0x8c,0x1b,0x0d,0x23,0x35,0xad,0xab,0x31,0x2b,0x2d,0x55,0xa9,0x1b,0x20,0x19,0x0f,0x14,0x0e,0x28,0x33,0x11,0xac,0x31,0x07,0x9f,0x8a,0x89,0x8f,0x22,0x90,0x8b,0x92 -,0x89,0x29,0x23,0x41,0x3e,0xaf,0x1a,0x22,0xa2,0xbe,0xba,0xa4,0x8b,0x87,0x92,0x90,0x9e,0x1f,0x8d,0x82,0x94,0x87,0x8e,0x8a,0x81,0x84,0x80,0x84,0x8c,0x80,0x87,0x8e -,0x92,0xe7,0xa7,0x1c,0x09,0x1e,0x23,0x1e,0x0f,0x01,0x01,0x00,0x01,0x02,0x00,0x03,0x06,0x00,0x12,0x0f,0x08,0x10,0x0a,0xcf,0x0f,0x04,0x36,0x19,0x09,0x0a,0x0a,0xf9 -,0x22,0xcb,0x98,0x17,0x27,0xc6,0xa7,0xa1,0x4e,0xc5,0x61,0x13,0x87,0x8d,0xe8,0x85,0x8b,0x8c,0x88,0x8c,0x82,0x9b,0xaf,0x84,0x8d,0x88,0x80,0x87,0x88,0xa5,0x9e,0x8d -,0xa2,0x96,0x9f,0x21,0x2e,0x55,0x37,0x3f,0x11,0x93,0x9b,0x1d,0x89,0xa2,0x2b,0x27,0x28,0x51,0x0f,0x2a,0x8f,0x1b,0x0a,0x17,0x19,0x1a,0x0d,0x21,0x0e,0x07,0x16,0x1c -,0x1e,0x0e,0x0a,0x0e,0x07,0x06,0x9e,0x1a,0x0b,0xab,0x1d,0x1a,0x30,0x9a,0x8b,0x4c,0xb7,0x95,0xde,0xc4,0xa1,0xb9,0x31,0x1d,0x67,0x21,0x0f,0x26,0x18,0x10,0x13,0x0b -,0x0e,0x0f,0x0e,0x8b,0x28,0xd3,0x80,0x84,0x80,0x83,0x80,0x85,0x8a,0x85,0x80,0x97,0x8c,0x80,0x84,0x86,0x88,0x83,0x89,0x89,0x84,0x93,0x5d,0x35,0x1a,0x0d,0x01,0x09 -,0x4f,0x07,0x0b,0x4f,0x0d,0x0e,0x14,0x0c,0x09,0x01,0x0d,0x0e,0x03,0x08,0x07,0x07,0x05,0x0e,0x12,0x01,0x07,0x09,0x05,0x02,0x07,0x09,0x0f,0x09,0xc0,0x8c,0x14,0x93 -,0x82,0xab,0x93,0x85,0x88,0x9d,0xaa,0x84,0x8e,0xa0,0x85,0x86,0x90,0x8d,0x83,0x89,0x9a,0x9c,0x9f,0xa2,0x95,0x8a,0x9a,0x4d,0x11,0xa9,0x8e,0x2c,0x86,0x85,0xa6,0x8e -,0x84,0x85,0x8c,0x8b,0x87,0xa7,0xb7,0x96,0x35,0x1b,0x0f,0x08,0x05,0x07,0x1e,0x13,0x08,0x0e,0x0b,0x07,0x0a,0x05,0x3f,0x20,0x04,0xbc,0x46,0x0e,0x3e,0xb1,0x1c,0x0e -,0x25,0x77,0x0c,0x16,0x41,0x0d,0x12,0xb2,0x70,0x1c,0xfe,0xbc,0x1d,0x19,0x17,0x0f,0x0d,0x04,0x05,0x45,0x12,0x13,0x8e,0xc5,0xda,0x8c,0x8e,0x8e,0x92,0x8d,0x8a,0x96 -,0x89,0x82,0x87,0x85,0x84,0x88,0x8d,0x88,0x86,0x8a,0x89,0x89,0x8a,0x85,0x8d,0x8f,0x81,0x97,0x8f,0x80,0x94,0x99,0x90,0x2c,0x16,0x0c,0x1f,0x1c,0x11,0x1c,0x0a,0x09 -,0x0d,0x0d,0x07,0x03,0x03,0x02,0x01,0x02,0x03,0x01,0x03,0x00,0x09,0x11,0x02,0x22,0x1d,0x03,0x18,0xca,0xc2,0x40,0xb7,0x91,0x9f,0x90,0x8b,0x9f,0x98,0xa1,0xbc,0xb5 -,0xc2,0xae,0xb9,0xcb,0x99,0xa4,0xb0,0x93,0xcd,0x87,0x8d,0x3d,0x83,0x85,0x96,0x88,0x87,0x8f,0x8e,0x8e,0x89,0x9c,0x91,0x86,0x94,0x8d,0x88,0x96,0x98,0x8e,0x95,0x9f -,0x44,0x68,0x1e,0x0a,0x04,0x04,0x1f,0x07,0x0e,0xb5,0x1b,0x23,0xa6,0xcd,0x3a,0x5f,0x4f,0x1f,0x0f,0x5e,0x24,0x11,0x25,0x0f,0x0c,0x0b,0x15,0x0f,0x0b,0x09,0x0b,0x0a -,0x0d,0x0c,0x0d,0xac,0x0f,0xd1,0x88,0x4a,0x64,0x95,0x78,0x21,0x39,0xc7,0x1c,0x16,0xa6,0xdd,0x19,0xaa,0x93,0xba,0xa4,0x9a,0xb1,0xbe,0xa1,0x99,0xbd,0x9e,0x96,0x97 -,0x82,0x91,0x84,0x80,0x87,0x84,0x81,0x82,0x83,0x82,0x81,0x84,0x89,0x83,0x93,0xa4,0x96,0x2e,0x0f,0x1b,0x0c,0x06,0x05,0x06,0x09,0x05,0x06,0x00,0x08,0x0f,0x01,0x0b -,0x11,0x02,0x09,0x0d,0x07,0x06,0x0e,0x1c,0x0a,0x0f,0x2c,0x15,0x10,0x1f,0x0f,0x10,0xcf,0xe3,0x2a,0x27,0x1c,0x1c,0x28,0xe7,0x18,0x9f,0x99,0x27,0x87,0x89,0x8f,0x87 -,0x86,0x88,0x85,0x86,0x88,0x92,0x96,0x89,0x9d,0x94,0x8c,0x9c,0xa1,0x9c,0x9a,0x97,0x8e,0x9b,0xb4,0xac,0x9a,0x2d,0x9c,0x8d,0x33,0x8f,0x9b,0x49,0x9b,0xae,0x2e,0x3d -,0x30,0x40,0x37,0x22,0xae,0x2f,0x1c,0xd6,0x18,0x0c,0x14,0x0c,0x07,0x08,0x0a,0x07,0x05,0x08,0x00,0x1f,0x1e,0x10,0x9f,0x33,0x1a,0x4a,0x23,0x1f,0x2b,0x27,0xcd,0x26 -,0x1c,0xa7,0x2a,0x2f,0xae,0x18,0x28,0x20,0x1b,0x1f,0x21,0x20,0x1b,0x1f,0x2c,0x0f,0xac,0x9a,0x1c,0x8c,0x89,0x99,0x86,0x83,0x87,0x84,0x82,0x80,0x81,0x81,0x80,0x82 -,0x83,0x81,0x85,0x84,0x85,0x8c,0x94,0xce,0xbf,0xb3,0x23,0x1f,0x06,0x16,0x1f,0x05,0x2f,0x1f,0x05,0x18,0x1b,0x0b,0x0c,0x07,0x09,0x03,0x03,0x0d,0x05,0x04,0x08,0x03 -,0x07,0x0c,0x0b,0x0f,0x0d,0x0e,0x0b,0x04,0x0d,0x05,0x18,0xa9,0x0e,0x43,0xa2,0x2d,0x97,0x8d,0x8e,0x8e,0x95,0x89,0x8c,0x92,0x86,0x8f,0x8c,0x85,0x92,0x8d,0x8e,0x9d -,0x9f,0xac,0xa8,0xa5,0xde,0x9e,0x4e,0xa6,0x8a,0x9b,0x87,0x86,0x9e,0x8c,0x88,0x8c,0x86,0x8d,0x8d,0x9d,0xad,0x94,0xa1,0xc8,0x59,0x2e,0x26,0x2b,0x22,0x2a,0x17,0x0e -,0x17,0x0e,0x18,0x09,0x0e,0x18,0x06,0x19,0x1f,0x0a,0x19,0x1c,0x15,0x29,0x34,0xb3,0x2e,0x49,0xb8,0x1a,0x16,0x24,0x11,0x14,0x2b,0x1a,0x10,0x12,0x17,0x17,0x0e,0x1e -,0x0a,0x0e,0xa8,0x17,0x4d,0x9d,0x2a,0xa9,0x93,0xa6,0xa4,0x9b,0x8e,0x9b,0x9e,0x85,0x8a,0x8b,0x83,0x88,0x87,0x82,0x83,0x81,0x83,0x85,0x84,0x89,0x83,0x8e,0x8b,0x88 -,0xaf,0x90,0x94,0xbf,0x98,0xaa,0x39,0x3a,0x1c,0x2f,0x1b,0x0d,0x1d,0x0d,0x09,0x0d,0x04,0x03,0x04,0x03,0x03,0x04,0x03,0x01,0x01,0x03,0x01,0x0e,0x0d,0x08,0x3d,0x12 -,0x0c,0x51,0x1a,0x1c,0x4f,0x3e,0xbe,0x1f,0x52,0x9f,0xb6,0xa1,0x9a,0xaf,0xa7,0x9c,0x9e,0x97,0x9e,0x9b,0xba,0x99,0xb0,0xab,0x8e,0xcf,0x93,0x8f,0xa5,0x91,0x8d,0x8f -,0x8b,0x8b,0x89,0x88,0x89,0x87,0x8b,0x8a,0x8c,0x95,0x94,0x97,0xad,0xca,0xf4,0x55,0x27,0x3c,0x14,0x0e,0x2e,0x0b,0x0f,0x1e,0x0d,0x13,0x1c,0x16,0x49,0x44,0x2a,0x35 -,0x27,0xc6,0x48,0x49,0x45,0x24,0x1f,0x1d,0x1d,0x1b,0x21,0x1c,0x0f,0x0c,0x0c,0x10,0x20,0x1b,0x20,0xa3,0x30,0x46,0x9f,0xb4,0xb1,0x62,0xa1,0xa6,0xa5,0xa3,0xb6,0xaf -,0x9c,0x96,0xa6,0xa5,0xdd,0xcc,0xbd,0x4f,0x27,0x2c,0x1c,0x16,0xc6,0x2e,0xcd,0x97,0xe5,0xb1,0x98,0x9c,0x8d,0x91,0x93,0x95,0x95,0x8e,0x92,0x94,0x9b,0xae,0xe0,0x9e -,0xae,0xc5,0x6b,0x2e,0x18,0x2f,0x29,0x1f,0xac,0x1c,0x37,0x9d,0x2d,0x26,0xe7,0x1d,0x26,0x3a,0xb7,0xbb,0xa9,0x9e,0xaf,0x9b,0x93,0xac,0x3d,0xaf,0x2c,0x26,0x1f,0x0f -,0x0c,0x0f,0x02,0x0e,0x22,0x0a,0x3c,0x1f,0x11,0xee,0x31,0x30,0xbb,0x34,0x49,0x58,0x45,0xab,0xce,0x24,0x2a,0x27,0xb9,0xbc,0x2c,0x4a,0x1e,0x41,0xa8,0xc2,0x21,0x9c -,0x95,0xb6,0x89,0x8e,0xa0,0x8d,0x91,0xa9,0x94,0x93,0x96,0x93,0x8c,0x8d,0x8b,0x87,0x8a,0x98,0x95,0x97,0x9d,0x9e,0xbb,0x21,0x1a,0x10,0x19,0xd1,0x0c,0x20,0xde,0x0f -,0xce,0xb4,0x1e,0x3e,0x1d,0x2c,0x36,0x26,0x39,0x17,0x15,0x1b,0x0d,0x12,0x21,0x14,0x14,0x12,0x11,0x24,0x0e,0x0b,0x4a,0x16,0x26,0xa7,0x22,0xdd,0xa8,0x26,0x49,0xab -,0xad,0x5d,0xa7,0x9d,0x9b,0x9c,0xa6,0xa5,0xcd,0x9b,0xad,0xb8,0x31,0x19,0x23,0x0f,0x36,0x95,0x3f,0xa7,0x8d,0x3e,0x95,0x86,0x98,0x8f,0x93,0x92,0x8f,0x8f,0x91,0xa7 -,0xa1,0xae,0xbf,0xad,0xb2,0xad,0xaa,0xc9,0xbe,0x9b,0x35,0x93,0x91,0xb7,0x86,0x95,0x9f,0x88,0xa6,0x69,0xa9,0x24,0x20,0x0f,0x13,0x11,0x0a,0x0e,0x0a,0x02,0x03,0x04 -,0x01,0x03,0x01,0x00,0x00,0x00,0x08,0x02,0x08,0x13,0x06,0x1e,0xd2,0x4c,0x9a,0x96,0x9b,0x8f,0x8d,0x8b,0x89,0x88,0x89,0x95,0x96,0x92,0x93,0x93,0x93,0x90,0x93,0x8d -,0x80,0x8d,0x89,0x80,0x85,0x82,0x81,0x86,0x82,0x85,0x8a,0x87,0x8c,0x89,0x95,0x9e,0x95,0xa1,0xb4,0x2d,0x12,0x19,0x0b,0x08,0x08,0x04,0x11,0x04,0x06,0x1a,0x0a,0x0e -,0x1a,0x08,0x0e,0x24,0x23,0x32,0x1f,0x24,0x1e,0x1f,0x6b,0x22,0x19,0x12,0x08,0x10,0x0b,0x07,0x08,0x05,0x1d,0x14,0x3f,0x9e,0x1d,0xad,0x9d,0x3d,0xa4,0x9d,0xa6,0xa3 -,0xa4,0xa9,0x96,0x8f,0x9b,0x9f,0xb5,0xa8,0xbd,0x33,0x1a,0x21,0x0e,0x0c,0x27,0x0a,0x22,0x38,0x09,0xc8,0x96,0xb3,0x8f,0x90,0x88,0x83,0x81,0x80,0x80,0x80,0x80,0x80 -,0x81,0x81,0x81,0x87,0x96,0x91,0x25,0xa9,0xa3,0x10,0x42,0x18,0x0a,0x1b,0x0a,0x03,0x09,0x05,0x07,0x05,0x06,0x05,0x04,0x04,0x03,0x05,0x04,0x03,0x05,0x05,0x04,0x09 -,0x00,0x0f,0x15,0x06,0xb3,0x1f,0x14,0xaf,0x19,0x2f,0xa4,0xa3,0xb3,0x9d,0x93,0x94,0x84,0x88,0x8c,0x89,0x8b,0x8e,0x86,0x8f,0x8d,0x97,0xc5,0x8a,0x9d,0x8e,0x84,0xa0 -,0x8c,0x8a,0x95,0x8a,0x93,0x95,0x9c,0xad,0x9c,0xaa,0xc2,0x3d,0x15,0x18,0x18,0x0e,0x18,0x08,0x0f,0x09,0x13,0xbf,0x11,0xb7,0x50,0x24,0x99,0xdf,0x37,0xb9,0x2c,0xc8 -,0xb7,0xb3,0xad,0x4a,0x3a,0x48,0xb3,0xab,0x2e,0x1d,0x15,0x18,0x19,0x08,0x38,0x15,0x0c,0x6d,0x17,0xbf,0x99,0x27,0x3e,0xb4,0x9c,0x96,0x70,0xa5,0xb0,0x4a,0x27,0x0e -,0x0d,0x0b,0x09,0x0e,0x08,0x0b,0x0f,0x0f,0x93,0x9d,0x89,0x81,0x88,0x81,0x81,0x81,0x80,0x80,0x82,0x80,0x82,0x80,0x85,0x86,0x8a,0x98,0x9c,0xb4,0x1f,0x0f,0x06,0x07 -,0x02,0x05,0x07,0x00,0x08,0x04,0x00,0x09,0x07,0x06,0x0c,0x09,0x14,0x12,0x14,0x21,0x2a,0x1e,0x1d,0x17,0x0e,0x0f,0x12,0x0d,0x07,0x11,0x06,0x20,0x31,0x38,0x92,0xbc -,0xa7,0x8b,0x97,0x8d,0x86,0x90,0x8e,0x8f,0x89,0x87,0x84,0x8b,0x8a,0x87,0x8b,0x8a,0x8d,0x9f,0x98,0xaf,0xd2,0x8e,0x42,0x9f,0x9a,0x21,0x95,0xa5,0x48,0x93,0xa2,0x9e -,0x94,0x98,0x94,0x98,0xa2,0xb2,0xc5,0xbd,0x29,0x17,0x18,0x06,0x0c,0x06,0x0d,0x1b,0x07,0x2a,0x21,0x1c,0xd3,0x17,0x1b,0x9f,0x49,0x46,0x6c,0x22,0x2e,0x19,0x0e,0x13 -,0x18,0x13,0x0e,0x11,0x10,0x0f,0x16,0x0a,0x27,0x1c,0x20,0xb4,0x18,0x3c,0x1f,0x0b,0x2d,0x2f,0x23,0x5e,0x47,0xb7,0xb5,0x96,0x92,0x92,0x86,0x88,0x89,0x83,0x87,0x88 -,0x83,0x87,0x81,0x83,0x82,0x80,0x85,0x83,0x83,0x86,0x82,0x87,0x8e,0x8f,0xbc,0x45,0x45,0x1a,0x0f,0x06,0x02,0x03,0x02,0x02,0x01,0x01,0x00,0x03,0x07,0x03,0x12,0x08 -,0x03,0x15,0x0c,0x16,0x23,0x0f,0x1e,0x1e,0x21,0xba,0x29,0xe2,0xbf,0x2d,0xa4,0xa1,0x41,0xcb,0x29,0x3b,0x20,0x59,0x9d,0x26,0x99,0x9d,0xb0,0x87,0x95,0x8f,0x84,0x8b -,0x82,0x85,0x87,0x84,0x85,0x89,0x8b,0x92,0x9a,0x9b,0xb2,0x27,0x1e,0x2e,0x12,0x3a,0x28,0x13,0x9f,0x36,0x2b,0xa6,0x28,0xa4,0xa3,0x2a,0xa0,0xa5,0xba,0xb0,0x26,0x33 -,0x45,0x1a,0x26,0x1e,0x24,0x1f,0x0b,0x0f,0x0d,0x1d,0x12,0x0e,0xaf,0x19,0x0b,0x18,0x0c,0x28,0xe2,0x26,0xc7,0xb7,0xd4,0xa2,0xa0,0xa1,0x9f,0x4c,0xbb,0x33,0x1e,0x0f -,0x0a,0x07,0x04,0x13,0x09,0x0b,0x3b,0x0d,0x25,0x9b,0xcf,0x8f,0x8c,0x8a,0x82,0x83,0x81,0x81,0x80,0x82,0x81,0x82,0x82,0x82,0x84,0x88,0x8b,0x8e,0xae,0x9c,0x40,0x1f -,0xac,0x13,0x11,0x1a,0x04,0x05,0x06,0x03,0x09,0x0a,0x08,0x0a,0x09,0x0f,0x0f,0x0c,0x0e,0x07,0x0a,0x09,0x0b,0x0c,0x06,0x0b,0x0a,0x0c,0x2e,0x18,0x1f,0xa4,0x25,0xab -,0x92,0xad,0x8d,0x90,0x99,0x8a,0x8f,0x8e,0x8d,0x9d,0x95,0x9f,0xad,0x9f,0xa5,0x9c,0xae,0x91,0x92,0x8f,0x88,0xa8,0x90,0x8b,0xa5,0x94,0x94,0x9a,0x98,0x9b,0x9d,0x92 -,0x98,0xb7,0xab,0xaf,0x9e,0x51,0x2a,0x28,0x1c,0x1a,0x0a,0x1e,0x20,0x12,0x2c,0x0e,0x19,0xc8,0x10,0x26,0x50,0x2f,0xad,0xaf,0xda,0xb8,0xc3,0x2c,0x6b,0x2e,0x19,0x0f -,0x0d,0x09,0x08,0x0b,0x05,0x1a,0x0f,0x10,0x74,0x14,0x2f,0xb1,0x1c,0x5d,0x73,0x31,0xa1,0xed,0x37,0xee,0x28,0x2b,0x3f,0x1e,0x37,0x30,0x46,0xb4,0xc7,0xa7,0xa8,0x89 -,0x8b,0x88,0x80,0x85,0x83,0x82,0x84,0x81,0x80,0x83,0x81,0x82,0x83,0x82,0x8a,0x8e,0x91,0x55,0x2c,0x12,0x08,0x05,0x01,0x01,0x00,0x03,0x02,0x02,0x06,0x01,0x06,0x0f -,0x07,0x0f,0x0f,0x0a,0x1e,0x1c,0x20,0x30,0x1a,0x15,0x1e,0x1a,0x1d,0x25,0x1e,0x1c,0x1f,0x34,0x1d,0xbe,0x38,0x58,0x92,0x52,0x9a,0x8d,0xa8,0x92,0x92,0x92,0x88,0x89 -,0x88,0x89,0x88,0x85,0x86,0x8a,0x8e,0x93,0x91,0xa3,0xa6,0xa8,0x38,0xb1,0x19,0x3e,0x94,0x2c,0xbe,0xa7,0x29,0x98,0x9a,0xaa,0x94,0xa7,0x98,0xa0,0xc8,0xa9,0x33,0x18 -,0x21,0x12,0x16,0x19,0x0e,0x15,0x09,0x12,0x1d,0x1c,0xc5,0x1b,0x21,0xe5,0x16,0x2d,0x2a,0x15,0x29,0x2d,0x23,0x3c,0x2a,0x20,0x24,0x22,0x2e,0x2e,0x1d,0x10,0x18,0x0f -,0x0e,0x20,0x11,0x0e,0x15,0x08,0x19,0x2c,0x10,0x3c,0xec,0x6e,0x8e,0x8e,0x8b,0x83,0x83,0x82,0x83,0x82,0x82,0x82,0x85,0x85,0x83,0x86,0x8a,0x84,0x8b,0x8b,0x81,0x93 -,0x8f,0x8f,0x43,0xb4,0x58,0x1a,0x1b,0x0d,0x0c,0x0e,0x09,0x08,0x05,0x03,0x05,0x04,0x04,0x07,0x03,0x03,0x02,0x0a,0x08,0x11,0x19,0x08,0x1b,0x1c,0x17,0x32,0x3f,0x5f -,0x9f,0xa1,0x94,0x8a,0x96,0xaa,0x98,0xa2,0xa8,0xaa,0xc0,0xa6,0x51,0x1c,0x21,0x9f,0x4e,0xbd,0x90,0xaa,0x8f,0x89,0x9b,0x8a,0x8b,0x8e,0x87,0x89,0x89,0x8a,0x8f,0x97 -,0x97,0xb8,0xa7,0xc2,0x3a,0x2a,0x26,0x2e,0x21,0xc0,0x1b,0x28,0xba,0x25,0xab,0x30,0x1a,0xf5,0x2b,0xc9,0xa9,0xc8,0xac,0xb7,0xb1,0xa9,0xcb,0x32,0x40,0x26,0x1a,0x0e -,0x0c,0x0d,0x09,0x12,0x06,0x0a,0x15,0x09,0x15,0x18,0x12,0x44,0x26,0xbd,0xa2,0x2e,0xa1,0x56,0xbc,0xc9,0x10,0x13,0x10,0x0b,0x12,0x07,0x0c,0x0e,0x18,0xb1,0x31,0x8e -,0x95,0x93,0x80,0x80,0x28,0x56,0x80,0x86,0x80,0x84,0x81,0x86,0x8f,0x85,0x44,0x9a,0x0d,0x05,0x12,0x00,0x05,0x00,0x02,0x01,0x00,0x01,0x01,0x01,0x03,0x02,0x07,0x0d -,0x08,0x16,0x24,0xc0,0x8f,0x8d,0x8f,0xa7,0x8a,0x80,0x89,0x8c,0x84,0x80,0x80,0x83,0x82,0x84,0x86,0x80,0x82,0x80,0x81,0x80,0x84,0x82,0x83,0x85,0x84,0x87,0x88,0x89 -,0x85,0x8f,0x9d,0xa1,0x38,0x25,0x17,0x0c,0x0c,0x08,0x06,0x03,0x08,0x06,0x00,0x02,0x02,0x02,0x02,0x01,0x00,0x01,0x01,0x01,0x00,0x01,0x00,0x00,0x01,0x01,0x00,0x01 -,0x01,0x01,0x03,0x03,0x01,0x06,0x0a,0x15,0x0f,0x29,0x2d,0x15,0xad,0xc3,0x96,0x88,0x8d,0x85,0x82,0x82,0x80,0x82,0x81,0x80,0x82,0x80,0x82,0x81,0x84,0x87,0x85,0x83 -,0x80,0x80,0x82,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x83,0x83,0x84,0x85,0x83,0x84,0x83,0x8e,0x8a,0x8c,0x96,0x90,0xa5,0x9c,0xab,0xc0,0xc3,0x16,0x0e -,0x0a,0x05,0x09,0x07,0x05,0x03,0x01,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x04,0x04,0x08,0x09,0x0c,0x0b -,0x0a,0x0b,0x06,0x06,0x08,0x0c,0x0a,0x08,0x08,0x0a,0x0b,0x0f,0x0e,0x12,0x15,0x27,0xc2,0x5b,0xa7,0x99,0x96,0x8f,0x8c,0x8c,0x8a,0x8a,0x88,0x89,0x8a,0x8b,0x8f,0x93 -,0x92,0x91,0x95,0xa5,0x9d,0x8d,0x8d,0x88,0x87,0x87,0x84,0x83,0x81,0x82,0x81,0x81,0x81,0x82,0x81,0x81,0x83,0x87,0x89,0x89,0x87,0x89,0x8f,0x90,0x91,0x96,0x98,0x94 -,0x94,0x8e,0x8d,0x8b,0x8a,0x8c,0x8a,0x86,0x84,0x86,0x86,0x82,0x82,0x82,0x83,0x83,0x87,0x99,0xaa,0x97,0xac,0x14,0x08,0x02,0x03,0x02,0x03,0x05,0x09,0x06,0x09,0x1c -,0x44,0xc1,0xc7,0x9d,0x8f,0x8b,0x8f,0x92,0xa6,0xc5,0x62,0x2b,0x23,0x14,0x09,0x07,0x08,0x05,0x04,0x05,0x04,0x04,0x06,0x04,0x04,0x02,0x02,0x03,0x03,0x05,0x05,0x09 -,0x04,0x07,0x09,0x02,0x03,0x03,0x02,0x01,0x02,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x02,0x04,0x03,0x02,0x03,0x06,0x09,0x08,0x0c,0x0e,0x0a,0x0c,0x0c,0x0d -,0x0b,0x0c,0x0b,0x0b,0x11,0x14,0x19,0x19,0x29,0x48,0xac,0x99,0x91,0x8e,0x88,0x83,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81 -,0x81,0x82,0x81,0x80,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x81,0x84,0x88,0x8d,0x94,0x9b,0x37,0x17,0x0d -,0x03,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x02,0x03,0x03,0x03,0x04,0x08,0x0d -,0x0d,0x0b,0x09,0x06,0x08,0x0a,0x10,0x0e,0x0a,0x08,0x0b,0x0f,0x10,0x17,0x19,0x1e,0x27,0x35,0x40,0x2f,0x2e,0x4f,0xa6,0x9b,0x94,0x8c,0x8f,0x8d,0x89,0x8c,0x8e,0x8d -,0x8d,0x91,0x94,0x97,0xa2,0xb0,0x9a,0x97,0x96,0x93,0x96,0x96,0x96,0x8d,0x8c,0x8f,0x92,0x92,0x8b,0x8b,0x9b,0x9b,0xa4,0x53,0xe3,0xad,0xa8,0x76,0x29,0x2e,0xb6,0xa4 -,0x48,0x21,0xd3,0xb8,0x38,0x2c,0x71,0x2f,0x14,0x18,0x3b,0xaf,0xb6,0x57,0xab,0x96,0xac,0x45,0x9f,0x8c,0x8c,0x8e,0x8b,0x8d,0x93,0x88,0x84,0x82,0x81,0x82,0x84,0x84 -,0x82,0x83,0x89,0x8a,0x8d,0x93,0x9d,0x78,0x1c,0x09,0x04,0x03,0x04,0x03,0x01,0x01,0x01,0x03,0x06,0x0a,0x0a,0x10,0x1d,0x2a,0x3e,0x73,0x6c,0x47,0xa7,0x97,0x97,0x8d -,0x8c,0x8e,0x8b,0x8d,0x91,0x91,0x92,0x92,0x9b,0x9f,0xb6,0x3d,0xa5,0xa7,0xad,0x97,0x9d,0x9d,0x93,0x8d,0x8c,0x93,0x8f,0x8d,0x8d,0x8a,0x8d,0x9c,0xad,0xac,0xa6,0xac -,0xee,0x4e,0x2f,0x36,0x2b,0x29,0x3a,0x27,0x29,0xf7,0xd8,0x33,0x2d,0x33,0xc7,0xa4,0xaa,0xae,0x9b,0x93,0x9c,0x59,0x62,0x4d,0x1f,0x1b,0x1e,0x13,0x06,0x02,0x09,0x13 -,0x0b,0x07,0x0e,0x23,0x28,0x1c,0x2f,0x44,0x30,0x2b,0x2f,0xc0,0x6e,0x24,0x23,0x25,0x18,0x0d,0x0b,0x0f,0x17,0x0e,0x0a,0x08,0x0c,0x16,0x18,0x41,0xa2,0x9f,0x92,0x8b -,0x88,0x85,0x83,0x81,0x80,0x80,0x80,0x81,0x81,0x82,0x83,0x85,0x89,0x99,0x3d,0x1e,0x0d,0x09,0x07,0x04,0x02,0x04,0x06,0x05,0x05,0x04,0x06,0x09,0x0b,0x0d,0x10,0x11 -,0x12,0x15,0x19,0x18,0x16,0x1a,0x2a,0x2c,0x1e,0x17,0x11,0x1a,0x22,0x1e,0x2b,0x2f,0x23,0x35,0xcb,0xad,0xad,0xa0,0x99,0x8e,0x87,0x89,0x8c,0x8f,0x91,0x94,0x97,0x93 -,0x9d,0x53,0x50,0x58,0x41,0xb6,0xb0,0xba,0xa0,0x9b,0x9b,0x96,0x9b,0xa2,0x9c,0x92,0x97,0x9d,0xa0,0x9e,0xaa,0x4f,0x4a,0xbb,0xdf,0x33,0x49,0x5a,0x26,0x0e,0x11,0x2c -,0x1f,0x15,0x15,0x14,0x17,0x12,0x10,0x1b,0x24,0x16,0x18,0xd8,0xac,0x6d,0x2b,0x33,0x38,0x2c,0x1e,0x16,0x12,0x0f,0x0c,0x0c,0x16,0x12,0x0f,0x16,0x27,0x48,0x39,0x34 -,0x37,0x42,0xb6,0xa8,0x98,0x93,0x92,0x8b,0x89,0x88,0x85,0x83,0x83,0x81,0x81,0x82,0x84,0x83,0x82,0x83,0x85,0x87,0x8e,0x93,0x9b,0xaa,0x4d,0x22,0x15,0x0f,0x18,0x13 -,0x0a,0x07,0x05,0x05,0x06,0x06,0x05,0x03,0x03,0x03,0x04,0x08,0x0a,0x0a,0x0f,0x1c,0x27,0x2e,0x2f,0x37,0x48,0xee,0xdd,0xbd,0xb4,0xb6,0xb7,0xb9,0xd7,0x4a,0xd5,0xb9 -,0xab,0xb6,0xde,0x61,0xc9,0xa9,0xa7,0x9f,0xa3,0xaa,0x9b,0x8d,0x8e,0x99,0x96,0x8d,0x8b,0x8c,0x8c,0x8c,0x8d,0x9a,0xa2,0x9c,0xa6,0x43,0x2e,0x58,0x3f,0x1c,0x1f,0x3e -,0xb5,0xac,0xcc,0xbe,0xa4,0xa4,0xb9,0xb6,0xc5,0x3c,0x2d,0x4c,0x6a,0x33,0x21,0x1b,0x1f,0x1c,0x12,0x0c,0x0d,0x0f,0x0c,0x0c,0x0d,0x0a,0x0b,0x13,0x18,0x20,0x2e,0x2a -,0x34,0x52,0x3f,0x39,0x5a,0xbb,0xcf,0x3b,0x26,0x17,0x0f,0x15,0x1d,0x1f,0x22,0x2d,0x4f,0x9c,0x8c,0x89,0x86,0x83,0x82,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x81,0x82 -,0x85,0x8c,0x91,0x9d,0x3e,0x17,0x0c,0x06,0x04,0x02,0x01,0x01,0x01,0x01,0x02,0x04,0x05,0x09,0x0c,0x18,0x2a,0x2a,0x29,0x36,0xb1,0xae,0xcd,0xda,0x2d,0x1b,0x1a,0x1d -,0x1f,0x16,0x12,0x14,0x1b,0x2e,0x2c,0x36,0xb7,0xb7,0xa4,0x95,0x91,0x98,0x9e,0x92,0x8c,0x8d,0x8d,0x8c,0x8a,0x8a,0x8e,0x8f,0x93,0x9c,0xa9,0xaf,0xaa,0xdc,0x1f,0x20 -,0x3e,0x4e,0xd8,0xbe,0xac,0xa0,0x9c,0x97,0x94,0x95,0x99,0x98,0x91,0x93,0x98,0xae,0x45,0x44,0x2d,0x1e,0x16,0x12,0x0f,0x0f,0x11,0x10,0x0d,0x0c,0x0e,0x16,0x1b,0x1f -,0x18,0x12,0x1c,0x27,0x2a,0x3c,0x58,0x46,0xd2,0xe0,0x35,0x28,0x23,0x1e,0x1b,0x15,0x0d,0x08,0x07,0x0b,0x0f,0x0f,0x16,0x24,0x4c,0x9c,0x8f,0x8b,0x86,0x83,0x82,0x81 -,0x80,0x81,0x81,0x80,0x80,0x81,0x82,0x83,0x84,0x87,0x8d,0x9b,0xce,0x24,0x16,0x0d,0x09,0x06,0x03,0x04,0x06,0x05,0x05,0x07,0x09,0x10,0x14,0x15,0x19,0x19,0x19,0x1b -,0x21,0x1a,0x0f,0x14,0x1b,0x16,0x10,0x10,0x16,0x1f,0x20,0x29,0x3f,0x38,0x46,0xb2,0x9c,0x9c,0xb3,0xa7,0x96,0x93,0x97,0x96,0x90,0x8f,0x8f,0x92,0x94,0x96,0x9a,0xa0 -,0x9e,0xa3,0xc6,0x35,0x3f,0xc9,0xd5,0xd0,0xbb,0xac,0x9c,0x92,0x92,0x97,0x95,0x94,0x92,0x8f,0x95,0x9b,0xae,0xc0,0xb7,0xb9,0xd4,0x3a,0x23,0x21,0x2a,0x22,0x1e,0x18 -,0x17,0x15,0x11,0x13,0x12,0x0f,0x14,0x19,0x1b,0x1b,0x1d,0x26,0x30,0xc0,0xca,0x3a,0x2a,0x23,0x23,0x29,0x24,0x17,0x0e,0x0c,0x0c,0x0b,0x0a,0x0a,0x0a,0x0e,0x18,0x1b -,0x20,0x2e,0xc3,0x9b,0x8d,0x88,0x85,0x84,0x83,0x81,0x81,0x80,0x81,0x80,0x81,0x80,0x80,0x82,0x86,0x89,0x8f,0x9d,0xd7,0x26,0x11,0x09,0x06,0x05,0x05,0x04,0x03,0x05 -,0x0a,0x0a,0x09,0x0a,0x0e,0x0f,0x10,0x17,0x1d,0x18,0x15,0x19,0x22,0x20,0x19,0x1c,0x26,0x33,0x2c,0x23,0x28,0x2b,0x29,0x29,0x46,0x3f,0x2a,0x5f,0xb3,0xac,0xa3,0x9f -,0x97,0x8f,0x8e,0x8e,0x8f,0x8f,0x92,0x91,0x94,0x93,0x9b,0xa3,0x9f,0xa5,0xa5,0xbb,0xb3,0xad,0xa0,0xae,0xaf,0xb8,0xd6,0xbb,0xbf,0xc8,0x6c,0x5a,0x3f,0xc6,0xd9,0xd7 -,0xde,0x61,0x56,0xce,0xb8,0xdb,0x43,0x2a,0x23,0x25,0x2b,0x24,0x20,0x1a,0x17,0x19,0x18,0x1d,0x1e,0x23,0x25,0x25,0x29,0x30,0x3d,0x44,0x31,0x26,0x2a,0x33,0x48,0x49 -,0xcb,0xe3,0x5d,0xbd,0xbe,0xb3,0xbb,0xc5,0xb5,0xc4,0xca,0xc6,0xe7,0x66,0xd3,0xd6,0xf9,0xd2,0xcd,0xba,0xa1,0x9d,0xa1,0xaa,0xb5,0xa7,0x9f,0x9e,0x9f,0x9f,0x9f,0xa0 -,0x9d,0x9f,0x9d,0xa2,0x9d,0x9f,0xa9,0xa7,0xaf,0xae,0xbf,0xba,0xbe,0x4b,0x30,0x22,0x22,0x20,0x1d,0x1d,0x1c,0x1c,0x1d,0x1c,0x1c,0x1b,0x1b,0x1e,0x1b,0x1a,0x1c,0x1c -,0x1d,0x21,0x21,0x22,0x29,0x2e,0x38,0x3d,0x56,0xcd,0xbd,0xb7,0xa8,0xa7,0xaa,0xa2,0xa0,0x9d,0x9b,0x9c,0x9c,0x96,0x9a,0x9b,0x97,0x9c,0x9a,0x9a,0x9d,0x9c,0x9c,0x9c -,0x9e,0xa0,0xa3,0xa8,0xa6,0xa4,0xaa,0xb2,0xae,0xb5,0xba,0xb5,0xdc,0x7e,0xcf,0x4c,0x2e,0x3e,0x2e,0x25,0x1f,0x19,0x1d,0x1f,0x1c,0x1c,0x1f,0x1f,0x1e,0x1c,0x1c,0x1e -,0x1f,0x1c,0x1f,0x26,0x1e,0x1f,0x27,0x23,0x1f,0x1d,0x1d,0x1f,0x22,0x1b,0x1d,0x20,0x1d,0x1d,0x1b,0x1d,0x1f,0x29,0x26,0x2c,0x31,0x3a,0xc3,0xb8,0xad,0xa6,0x9e,0x9b -,0x98,0x95,0x94,0x92,0x90,0x8f,0x8f,0x8d,0x8e,0x8f,0x8e,0x8f,0x91,0x91,0x90,0x94,0x94,0x98,0x9b,0x9f,0xa6,0xab,0xbc,0xc3,0xcd,0x3b,0x2b,0x2a,0x22,0x1c,0x17,0x15 -,0x14,0x13,0x10,0x0f,0x10,0x0f,0x0f,0x10,0x10,0x11,0x14,0x13,0x16,0x19,0x1a,0x1f,0x20,0x28,0x35,0x4c,0x51,0xc5,0xb4,0xb9,0xaf,0xa8,0xa6,0xa9,0xa2,0xa4,0x9e,0x9f -,0xa1,0x9e,0xa0,0x9f,0x9f,0x9f,0xa1,0x9f,0x9e,0x9b,0x9d,0xa0,0x9f,0x9e,0x9e,0xa0,0xa5,0xa1,0xaa,0xaf,0xb0,0xc0,0xc8,0xfa,0xc9,0x6b,0x48,0x4a,0x37,0x34,0x39,0x2f -,0x2d,0x2c,0x2d,0x3b,0x30,0x2f,0x3f,0x3b,0x41,0x45,0x3d,0x4b,0x4d,0x3a,0x38,0x36,0x2e,0x2d,0x2b,0x2e,0x2c,0x2f,0x2a,0x2b,0x33,0x29,0x26,0x2b,0x2c,0x2d,0x2c,0x2f -,0x38,0x32,0x49,0x49,0x66,0xcd,0xda,0xc3,0xbd,0xbd,0xba,0xb5,0xaf,0xac,0xa9,0xac,0xac,0xa5,0xab,0xab,0xa6,0xa6,0xa6,0xa5,0xa9,0xa6,0xa6,0xac,0xae,0xaf,0xb3,0xbb -,0xbc,0xd3,0x62,0x6e,0x4f,0x3a,0x36,0x35,0x2d,0x27,0x29,0x25,0x1e,0x1d,0x1d,0x1c,0x1c,0x1e,0x1e,0x1e,0x1e,0x1f,0x23,0x20,0x23,0x2b,0x2b,0x2e,0x33,0x48,0xe5,0x6e -,0xc8,0xb3,0xb7,0xad,0xab,0xa7,0xa9,0xad,0xa4,0xa9,0xa9,0xa2,0xa6,0xa6,0xa0,0xa5,0xa5,0xa7,0xab,0xa6,0xad,0xb2,0xac,0xa9,0xac,0xae,0xac,0xab,0xae,0xb5,0xaf,0xbc -,0xcc,0xd4,0xe1,0x64,0x4f,0x47,0x35,0x3a,0x37,0x33,0x2f,0x2d,0x2d,0x2d,0x29,0x26,0x2f,0x2b,0x2a,0x34,0x37,0x3e,0x39,0x4c,0x5e,0x65,0x42,0x46,0x6d,0x44,0xf0,0x49 -,0x54,0x71,0x44,0x3d,0x4f,0x40,0x48,0x58,0x3f,0x50,0x4a,0x4f,0xf4,0xd9,0xd0,0xc7,0xb8,0xb8,0xb4,0xb1,0xb6,0xab,0xb0,0xb1,0xa9,0xad,0xac,0xaa,0xb3,0xb5,0xb1,0xb5 -,0xb1,0xbb,0xbf,0xb3,0xb7,0xb6,0xbc,0xbf,0xb3,0xbf,0xbc,0xbb,0xcd,0xc6,0x78,0x4f,0xe5,0x48,0x3f,0x3f,0x35,0x31,0x28,0x28,0x29,0x25,0x21,0x23,0x21,0x1f,0x27,0x23 -,0x29,0x29,0x2c,0x30,0x38,0x38,0x38,0x4b,0x37,0x50,0x58,0xfb,0x75,0xc2,0xcb,0xcf,0xcb,0x6e,0xc1,0xe1,0xc2,0xc9,0xc3,0xbb,0xc8,0xbc,0xb4,0xb5,0xaf,0xac,0xad,0xad -,0xad,0xae,0xb2,0xb0,0xb2,0xb2,0xb4,0xb3,0xb6,0xbd,0xbf,0xcb,0xfc,0xeb,0x50,0x3f,0x49,0x4b,0x4b,0x50,0x46,0x46,0x57,0x5f,0x40,0x54,0x6c,0x4d,0x46,0x68,0x4f,0x5d -,0x6a,0x79,0x6b,0x45,0xf5,0x3f,0x64,0x4b,0x41,0x4e,0x49,0x48,0x49,0x63,0x45,0x50,0x75,0x52,0xd9,0x4e,0x48,0xd7,0x48,0x48,0xdf,0x46,0x65,0x6e,0x47,0xfc,0x4a,0x5f -,0x42,0x52,0x6b,0x57,0x75,0xef,0xe8,0xd6,0xdc,0xcb,0xc9,0xc5,0xbf,0xd4,0xc1,0xcc,0xc1,0xcf,0xc4,0xeb,0xce,0xc4,0xec,0xdc,0xd9,0x56,0x5f,0xd1,0x40,0xdb,0xfe,0x70 -,0xec,0x6b,0xc3,0xe9,0xd6,0xc7,0x69,0x6e,0x71,0x5c,0xf1,0xe6,0x73,0x43,0xef,0xf4,0x71,0x53,0x4e,0x55,0x41,0x4c,0x4a,0xdf,0x45,0xe3,0xd0,0xde,0xca,0xcd,0xbd,0xbc -,0xcd,0x7a,0xbf,0x5d,0x6f,0xcf,0x65,0x5e,0xd0,0x4d,0x62,0x59,0x5a,0x5e,0x3a,0x5f,0x3d,0x51,0x55,0x4c,0x4d,0x54,0x6d,0xf8,0xd4,0xdb,0xe7,0xe9,0xd9,0x49,0xde,0xef -,0x4a,0x67,0x6c,0x47,0xde,0xd1,0x4c,0xdc,0x57,0x6b,0xce,0xd3,0xde,0xdf,0xc0,0xcd,0xcc,0xc9,0xbc,0xc1,0xcc,0xcd,0xd1,0xcc,0xcb,0xc0,0x48,0x7b,0x6a,0x4e,0x6a,0x62 -,0x4a,0x45,0x5a,0xe7,0xed,0x4b,0xf8,0xd1,0xd9,0x5e,0xcf,0xc7,0xcd,0x62,0x63,0x7a,0x58,0x64,0x72,0x69,0x4f,0x4c,0x4b,0x48,0x50,0x48,0x3d,0x57,0x4a,0x74,0xcd,0xec -,0xcf,0xc8,0xde,0xcb,0xc3,0xc7,0xbd,0xcf,0x60,0x60,0xed,0x5a,0x4d,0x49,0x44,0x53,0x47,0x43,0x3d,0x45,0x49,0x3c,0x5f,0x4c,0xe6,0xde,0xdd,0xbf,0xe7,0xbb,0xc3,0xba -,0xb5,0xc9,0xda,0xd5,0xf6,0xf9,0x72,0x48,0x4b,0x54,0x4b,0x43,0x4e,0x44,0x5a,0x3e,0x62,0xf9,0x54,0xd5,0x75,0xc0,0xc5,0xc7,0xb9,0xb5,0xba,0xc0,0xcc,0xeb,0xd7,0x67 -,0x6d,0x4e,0x4b,0x49,0x3d,0x4d,0x3d,0x3f,0x54,0x47,0x65,0xed,0x55,0xcb,0xd2,0xc4,0xcb,0xcf,0xb8,0xb9,0xbd,0xc5,0xcc,0xd4,0xca,0x54,0x65,0x3e,0x4c,0x63,0x31,0x40 -,0x3e,0x3a,0x3f,0x43,0x4c,0x59,0x4f,0xd8,0xce,0xe6,0xf2,0xc5,0xbc,0xd7,0xbf,0xc7,0xcd,0xd0,0xc9,0x7a,0xcc,0x78,0x42,0xd6,0x40,0x3e,0x5d,0x36,0x38,0xe9,0x3e,0x4e -,0x68,0xcb,0xcf,0x74,0xc6,0xb9,0xbc,0xbd,0xbc,0xc1,0xcf,0xd9,0xbe,0xea,0xe1,0xd8,0x7b,0x4f,0x59,0x4b,0x48,0x36,0x3f,0x3e,0x3c,0x71,0x41,0xec,0xfa,0x6d,0xcb,0xca -,0xbd,0xbf,0xc9,0xcb,0xed,0xc6,0xd7,0x4b,0xcf,0x5e,0x55,0x5b,0x56,0x4a,0x46,0x46,0x3e,0x44,0x37,0x42,0x55,0x57,0x51,0x61,0x52,0xd5,0xbd,0xc2,0xca,0xd3,0xc0,0xc5 -,0xf2,0xd8,0xc6,0x59,0xd9,0xdd,0x5f,0x4b,0x4e,0x4e,0x4d,0x43,0x4b,0x4f,0x48,0xef,0x4f,0xf2,0xfc,0xca,0xbd,0xe0,0xca,0xb8,0xd7,0xcd,0xc7,0xdc,0xd2,0xec,0xdf,0xdf -,0x4f,0x4e,0x79,0x5e,0x53,0x54,0x53,0x5e,0x6b,0xe9,0x59,0x53,0xd1,0xed,0xd1,0x6e,0xca,0xd2,0xe4,0x65,0xdb,0xcd,0x53,0xca,0xd5,0x58,0xe8,0xe9,0x54,0x6b,0x46,0xdc -,0x4c,0x5d,0xe1,0x4d,0xcf,0x4d,0x66,0xe0,0x73,0xe5,0xea,0x5e,0x64,0xd9,0x5a,0xe2,0xd6,0xcd,0xef,0xeb,0xdd,0xe0,0x68,0x55,0x54,0x4c,0x58,0x58,0xde,0x44,0xf0,0xe4 -,0x5e,0x78,0xcf,0xfb,0x5c,0xd8,0x4a,0x46,0xe3,0x4b,0xca,0xdb,0x57,0xc5,0xcc,0xef,0x4c,0xb9,0xe5,0x6d,0xd1,0xd7,0x46,0xdf,0xd7,0x59,0xda,0x4c,0x66,0xeb,0x74,0xe8 -,0x61,0x45,0x46,0x58,0xf9,0x5c,0x56,0xf1,0xd8,0x60,0xc5,0x65,0xc7,0xd6,0x73,0xc0,0x59,0xca,0xe3,0x45,0xc9,0xd7,0x4c,0xdb,0xc1,0x62,0x3d,0xd2,0xd1,0x4f,0x43,0x73 -,0xcd,0x4d,0x4b,0xc5,0xef,0x67,0xc4,0x53,0x68,0xda,0xd2,0xcf,0xc8,0x4e,0x4c,0x6d,0x5c,0xcd,0x63,0x6a,0x59,0xec,0xeb,0x4a,0xf2,0xde,0x4f,0xed,0x49,0xd9,0xce,0x42 -,0xf5,0xc9,0xce,0x7a,0xf1,0x5b,0xcb,0x57,0xcc,0xd7,0x7b,0x5d,0x3f,0xde,0x48,0xe0,0x53,0x4d,0xce,0x7d,0x5b,0xf6,0xde,0x52,0x68,0xc5,0xee,0x47,0xd1,0xca,0xda,0x59 -,0xd8,0xbe,0xd5,0x68,0x5a,0xf1,0xd4,0x7c,0x47,0x4c,0x44,0xeb,0x4d,0x59,0x52,0x6a,0xc5,0x49,0xdd,0xbf,0x4a,0xd6,0xbc,0x28,0x2c,0x39,0xbc,0x99,0xa4,0x5a,0xb6,0xb6 -,0x1b,0x31,0xb2,0x2a,0x9d,0x35,0x1f,0x93,0xce,0x16,0x28,0x94,0xa2,0x17,0xb6,0x9d,0x11,0x00,0x2e,0x84,0xda,0xa6,0x93,0xa1,0xa3,0x63,0x11,0x17,0x8c,0x8d,0x6d,0x0f -,0x16,0xb1,0x0b,0x1a,0x82,0x90,0x2a,0x1e,0x2c,0x4a,0x93,0xb3,0x3a,0xe4,0x29,0x16,0x06,0x15,0x8d,0x9d,0x17,0x99,0x8f,0x1e,0x0d,0x8f,0x81,0x8e,0x19,0x07,0x22,0x1f -,0xa9,0x90,0x95,0x90,0x4b,0x0c,0x07,0x4a,0x8f,0x99,0x5e,0x1a,0x20,0x17,0x05,0x21,0x86,0x8a,0xab,0x39,0x13,0x07,0x1a,0x8d,0x80,0x9a,0x1c,0x9c,0x2b,0x1d,0xa4,0x72 -,0x96,0x8e,0xed,0x09,0x16,0x99,0xa2,0x0f,0x14,0x9d,0x21,0x04,0x11,0xa6,0x8c,0x87,0xb7,0x0f,0x32,0x93,0xeb,0x2e,0x9d,0x96,0x2f,0x07,0xa9,0x88,0xbd,0xb1,0x94,0xa5 -,0x4e,0x16,0x1c,0xf5,0xc8,0x41,0x4a,0x20,0x14,0x16,0x07,0x32,0x97,0x92,0x9a,0xb3,0x9b,0x98,0x1e,0x0e,0xd7,0x8d,0x9f,0x21,0xad,0x9d,0x28,0x1c,0xa9,0x94,0x97,0xb5 -,0xc4,0x4d,0x1f,0x1b,0x0d,0x07,0xc1,0x2a,0x10,0x24,0xab,0xa3,0x2f,0x9c,0x88,0x9a,0x10,0x26,0xae,0x99,0x94,0x9b,0xa7,0x99,0x9f,0x19,0x0b,0xb6,0x8b,0x2e,0x10,0x30 -,0xc4,0x0e,0x05,0x23,0x31,0x38,0x4b,0x25,0xbf,0x99,0x8e,0x99,0xa7,0xa9,0xc2,0x22,0x34,0x9e,0x97,0x90,0x94,0x9a,0x3f,0x0f,0x12,0xb3,0x99,0xb7,0x1e,0x1b,0x0d,0x01 -,0x06,0x14,0x97,0x8c,0x93,0x95,0x9e,0xb0,0xca,0x2c,0xae,0x8a,0x9f,0x1c,0x1a,0xad,0x9d,0xce,0x93,0x8e,0x2a,0x11,0x25,0xbd,0xa0,0xdf,0x1d,0x09,0x07,0x0c,0x04,0x25 -,0x8b,0x87,0xaa,0x44,0x9a,0xa0,0x36,0xc4,0x90,0x8f,0xbf,0x1f,0x52,0xa6,0x99,0x97,0xab,0x4d,0xdf,0x2f,0x17,0x26,0x1d,0x1c,0x0b,0x0c,0x16,0x14,0x47,0xa2,0x8c,0x8b -,0x9f,0xc3,0xc1,0x32,0x1e,0x1f,0x97,0x8f,0x99,0x8f,0x98,0x9a,0x9f,0x1e,0x15,0x67,0x9d,0xb9,0x10,0x0d,0x0a,0x04,0x04,0x0e,0xa0,0x8e,0x8d,0x96,0xb6,0xa2,0x9f,0xad -,0xa2,0x9e,0xa4,0x28,0x13,0xaa,0x8c,0x97,0x99,0x98,0x24,0x0f,0x20,0xa3,0x97,0x2b,0x0b,0x04,0x02,0x07,0x14,0x91,0x86,0x87,0x9a,0x19,0x25,0xbf,0x9d,0x8e,0x9d,0xa0 -,0xc3,0x11,0xdb,0x90,0x8a,0x89,0xaf,0x1a,0x0e,0x0b,0x1e,0xb8,0xae,0x28,0x09,0x09,0x06,0x10,0xa8,0x90,0x84,0x8c,0xdf,0x1b,0x1a,0xce,0xcf,0xce,0x98,0x94,0xab,0xa6 -,0x9d,0x99,0x8c,0x9e,0x1e,0x1b,0x2d,0x54,0x15,0x0b,0x0e,0x0a,0x06,0x07,0xc3,0x8d,0x8c,0x89,0x95,0x60,0x2a,0x29,0xb2,0xbe,0xaa,0x96,0xae,0x98,0x93,0x9a,0x9d,0xaa -,0x44,0x18,0x1d,0xc9,0xcd,0x1b,0x0a,0x02,0x0b,0x09,0x1f,0x94,0x8e,0x8a,0xd6,0x1b,0x25,0xb4,0x8e,0x8c,0x96,0x9c,0x3b,0x22,0xb5,0x92,0x88,0x91,0xba,0x1b,0x0b,0x0c -,0x25,0xb1,0xd9,0x16,0x06,0x07,0x02,0x28,0x8c,0x88,0x85,0x90,0x2e,0x0b,0x13,0x9d,0x93,0x9f,0x91,0xa5,0xb8,0xaf,0x9d,0x8c,0x93,0xaa,0x24,0x09,0x10,0x29,0x3a,0x3b -,0x0f,0x0d,0x04,0x04,0x42,0x94,0x85,0x89,0x99,0x2c,0x0e,0x29,0xa7,0x96,0x89,0x92,0xaa,0xbc,0x2b,0xcc,0xb3,0x98,0x9c,0xdb,0x2a,0x1e,0x23,0x1b,0x0f,0x08,0x0c,0x08 -,0x19,0xbb,0x90,0x8c,0xa0,0xc3,0x29,0x2e,0xa3,0x95,0x94,0x8f,0x9e,0xa2,0xaa,0xad,0x97,0x9e,0x3a,0x1f,0x17,0x11,0x11,0x20,0x42,0x13,0x10,0x0e,0x0a,0xb0,0x9b,0x8b -,0x92,0xb8,0xbd,0x15,0x2f,0x99,0x96,0x8c,0x9c,0xbe,0xaa,0xca,0x9c,0xa1,0xa0,0xb2,0x19,0x15,0x13,0x1b,0x37,0x1e,0x0f,0x0b,0x02,0x12,0xa7,0x8b,0x84,0x8a,0x9b,0x25 -,0x11,0x2b,0xaa,0x8f,0x8a,0x98,0xbe,0x4c,0x2a,0x32,0xb3,0xa9,0xa5,0x41,0x22,0x1b,0x1c,0x2f,0x1c,0x18,0x18,0x0b,0x28,0x65,0x9b,0x92,0xb9,0xab,0x1f,0x2a,0xa3,0xa2 -,0x8b,0x8e,0x98,0xa2,0x45,0x52,0x3c,0xcc,0xa9,0x32,0x3a,0x23,0x1c,0x24,0x1e,0x17,0x1a,0x10,0x14,0x54,0xac,0x8f,0xa0,0xa5,0x66,0x25,0x39,0xe7,0xba,0x99,0x9d,0x99 -,0x9e,0x9c,0x9b,0xa1,0xad,0x50,0x1e,0x2c,0x29,0x28,0x39,0x1e,0x10,0x0b,0x08,0x0e,0xbb,0x9b,0x89,0x9d,0xa4,0x3b,0x1e,0x53,0xad,0x99,0x8c,0xa4,0xab,0x4e,0x43,0xba -,0xcc,0x9d,0xdf,0x51,0xca,0x3a,0x73,0x49,0x29,0x14,0x0a,0x09,0x0b,0x5a,0x9d,0x8e,0x9e,0xae,0x34,0x1b,0x48,0xa1,0x94,0x8d,0x9d,0xad,0xbe,0xb8,0xac,0xaf,0xb0,0xf2 -,0x20,0x20,0x1f,0x39,0xb9,0x39,0x2b,0x14,0x14,0x09,0x20,0xcb,0x95,0x99,0xa2,0x3d,0x1d,0x28,0x4d,0xa3,0x95,0x8e,0x9b,0x9c,0xa9,0xad,0xb3,0xb9,0xc6,0x4b,0xda,0xcf -,0x34,0x31,0x19,0x0f,0x08,0x0c,0x09,0x21,0xad,0x8e,0x8d,0x9f,0xa9,0x19,0x2d,0xf8,0xa4,0x93,0x95,0x9a,0xa5,0xcb,0xa4,0xbd,0xaa,0xdf,0x3d,0xd9,0x41,0x6c,0x2b,0x20 -,0x1a,0x0d,0x0f,0x0d,0x0e,0xde,0xc9,0x8f,0xa1,0xa1,0xb4,0x2a,0xa5,0x9d,0x95,0x93,0xa0,0xa2,0xbd,0x53,0xad,0x32,0xda,0x27,0x29,0xc8,0x55,0xb6,0x32,0x1f,0x1a,0x0b -,0x17,0x0e,0x39,0x9b,0x90,0x92,0xca,0x3e,0x11,0x1c,0xb1,0x9f,0x8f,0x91,0xa4,0x9d,0x7d,0xa2,0xb5,0xcd,0xc0,0x26,0x39,0x3e,0x37,0x64,0x1f,0x20,0x13,0x0f,0x17,0x0d -,0xaa,0x9b,0x8f,0x9c,0xe0,0x2d,0x16,0x39,0xa5,0x9d,0x90,0xa6,0xbe,0xc9,0x75,0x9d,0xa4,0x98,0x9d,0x53,0x54,0x2d,0x2d,0x2f,0x15,0x1c,0x0b,0x0e,0x08,0x15,0xa2,0x95 -,0x8f,0x9e,0xdd,0x1f,0x24,0xbf,0x98,0x8f,0x8d,0xa5,0xb4,0x39,0xd9,0xd4,0xb1,0xa7,0xc5,0x4b,0xf1,0x3f,0x36,0x39,0x22,0x1b,0x0e,0x10,0x09,0x25,0xad,0x96,0x9d,0xae -,0x5a,0x1f,0x40,0xa8,0x93,0x8f,0x91,0xad,0xf4,0xc8,0xa9,0xa9,0x9f,0xbc,0x48,0x22,0x24,0x20,0x2a,0x30,0x1e,0x18,0x1a,0x0f,0x17,0xba,0x9a,0x93,0xaf,0xad,0x1d,0x1c -,0x48,0xad,0x99,0x94,0x9a,0xa7,0xbc,0x9c,0xa4,0xac,0xa9,0x5a,0xe1,0x2f,0x5a,0x3a,0x23,0x1a,0x0e,0x09,0x0f,0x0b,0x25,0xae,0x91,0x90,0xa0,0xa3,0x29,0x5d,0xaa,0x9f -,0x9a,0x9b,0xae,0xbe,0xc7,0x9f,0xba,0xac,0xaf,0xee,0xc1,0x3f,0x57,0x25,0x20,0x17,0x0c,0x0f,0x0e,0x0e,0x33,0xbb,0x95,0x9d,0xa1,0xab,0x44,0xa1,0xa0,0x9b,0x95,0x9d -,0xa3,0xbd,0xba,0xb3,0x35,0xc3,0x38,0x36,0x6c,0x40,0x3b,0x22,0x22,0x1f,0x0e,0x17,0x12,0x1e,0xaf,0x9a,0x8f,0xaa,0xbb,0x24,0x20,0xbc,0xb1,0x9b,0x93,0x9d,0x9f,0xd3 -,0xae,0xb6,0xad,0xa4,0x47,0x6b,0x4c,0x23,0x20,0x18,0x1c,0x13,0x11,0x1a,0x10,0x76,0x9f,0x90,0x9b,0xa8,0x6b,0x24,0x39,0xaf,0xa8,0x9a,0xa0,0xab,0xc7,0xcb,0xa6,0xa9 -,0x99,0x9f,0xb2,0xcf,0x41,0x21,0x1b,0x17,0x13,0x0d,0x0e,0x09,0x1b,0xaf,0x93,0x97,0x9b,0xa8,0x2f,0x38,0xb3,0x9d,0x93,0x90,0x9e,0xab,0xcc,0xb1,0xcd,0xb6,0xb4,0xec -,0x58,0x3a,0x22,0x1b,0x19,0x17,0x11,0x16,0x0f,0x1f,0xb7,0x96,0x9b,0xad,0xdd,0x22,0x44,0xb6,0x9e,0x94,0x91,0x9b,0xae,0xb2,0xa3,0xab,0xa7,0xb3,0x4b,0x3c,0x20,0x1a -,0x14,0x18,0x16,0x0e,0x1c,0x13,0x30,0xa2,0x94,0x97,0xa3,0xc9,0x21,0x42,0xb5,0xa9,0x98,0x99,0xa4,0xa9,0xae,0xa6,0xa9,0xa7,0xb1,0xf4,0xc7,0x3a,0x20,0x1c,0x18,0x12 -,0x0d,0x0f,0x0c,0x1e,0xad,0x9b,0xa2,0x9c,0xbb,0x49,0xb5,0xaa,0x9a,0x94,0x97,0xa1,0xa9,0xb0,0xb5,0xbb,0xac,0xc0,0x5a,0x41,0x35,0x20,0x1a,0x1c,0x10,0x11,0x10,0x10 -,0x2e,0xab,0x9f,0xb2,0xae,0x3b,0x3f,0xaf,0x9e,0x97,0x91,0x92,0x9c,0x9e,0x9f,0xa5,0xb7,0xb3,0x3d,0x2c,0x26,0x1a,0x17,0x11,0x14,0x0e,0x10,0x12,0x1b,0xba,0x9e,0x9f -,0x9d,0xa1,0xbb,0xab,0xae,0xa4,0xaa,0x9c,0x9e,0xa3,0xa1,0xa7,0xab,0xb6,0xca,0x63,0x4d,0x4e,0x2c,0x19,0x18,0x12,0x10,0x0f,0x11,0x29,0xbe,0xa7,0xaf,0xa7,0xaf,0xad -,0xa0,0xa6,0x9e,0x9e,0x9b,0x9e,0x9b,0x9d,0xa9,0xdc,0x51,0x39,0x51,0x56,0x6c,0x2c,0x1e,0x17,0x0e,0x13,0x0f,0x1d,0x37,0xcc,0x3e,0x3e,0x42,0x5b,0xa4,0x9e,0x9e,0x9e -,0x9e,0x99,0x9a,0x93,0x95,0xa4,0xb6,0xc8,0xed,0x31,0x5f,0x2e,0x22,0x1b,0x0f,0x0d,0x12,0x10,0x28,0xbd,0xe0,0xca,0x50,0xd4,0xb6,0x9e,0x9a,0x9f,0xa6,0xa9,0x9c,0x9b -,0x96,0x9b,0xa8,0xb0,0x4e,0x2f,0x33,0x44,0x2f,0x26,0x19,0x0f,0x0d,0x0c,0x16,0x2f,0xf6,0x3b,0x4c,0xc7,0xd5,0x9c,0x96,0x98,0x9d,0x9e,0xa4,0x9e,0x9b,0x97,0xa7,0xbb -,0xed,0x3a,0xe7,0x38,0x4e,0x2e,0x25,0x1a,0x12,0x15,0x0e,0x1e,0x4c,0x4a,0x2a,0x2b,0x3d,0x39,0xa2,0x9a,0x9e,0x9f,0x9f,0xa2,0x95,0x90,0x95,0x9f,0xa3,0xc1,0xcb,0xdd -,0x3f,0x42,0x22,0x1c,0x11,0x14,0x0d,0x0f,0x1f,0x42,0x2c,0x1f,0x31,0x2c,0xb9,0x9d,0x9d,0x9e,0xa0,0xa9,0x9e,0x94,0x8e,0x93,0x9f,0x9f,0xc5,0xba,0xbf,0xed,0x38,0x23 -,0x1b,0x0e,0x0f,0x0a,0x0f,0x1f,0x20,0x1d,0x2e,0x32,0xf5,0xa3,0x9a,0x97,0x9c,0x96,0x9d,0x98,0x93,0x93,0x9d,0xa7,0xbc,0xcc,0xc3,0x51,0x3d,0x2a,0x1f,0x13,0x12,0x10 -,0x0d,0x1a,0x2a,0x1f,0x1f,0x34,0x33,0xbb,0x9f,0x9a,0x99,0x9b,0x9a,0x9a,0x91,0x91,0x94,0xa0,0xa6,0xcf,0xbf,0xca,0x31,0x23,0x1c,0x19,0x10,0x12,0x0e,0x12,0x23,0x2c -,0x1d,0x2d,0x57,0xcc,0xa2,0x9d,0x9c,0xa1,0xa0,0x9e,0x97,0x90,0x8f,0x9b,0xa3,0xa8,0xc5,0xb2,0xb8,0x47,0x24,0x1c,0x12,0x0e,0x0d,0x0c,0x18,0x1f,0x1c,0x19,0x2b,0x3b -,0xa9,0x9a,0x9b,0x98,0x9f,0x9a,0x9c,0x92,0x8d,0x94,0xa0,0xa4,0xc0,0xbe,0xbf,0x53,0x33,0x1e,0x1a,0x10,0x10,0x0d,0x15,0x1e,0x1d,0x13,0x1b,0x2b,0x38,0x9f,0x99,0x99 -,0x9d,0x9a,0x97,0x90,0x8c,0x8d,0x96,0x9f,0xa8,0xc7,0xe7,0x44,0x25,0x1b,0x1a,0x11,0x12,0x0f,0x0d,0x19,0x1d,0x1a,0x17,0x35,0x44,0xae,0x9a,0x99,0x9a,0xa1,0x9d,0x9a -,0x8f,0x8e,0x90,0x9b,0x9e,0xb1,0xbc,0xc7,0x45,0x29,0x1e,0x16,0x0f,0x12,0x0b,0x12,0x1a,0x1b,0x13,0x1d,0x36,0xe2,0x9b,0x98,0x97,0x9c,0x9b,0x9d,0x94,0x8e,0x8f,0x9d -,0x9e,0xa9,0xc2,0xae,0x45,0x32,0x20,0x1f,0x12,0x15,0x14,0x0f,0x19,0x1b,0x17,0x14,0x23,0x26,0xc7,0x9e,0x99,0x9a,0x9b,0x9b,0x99,0x8f,0x8f,0x8f,0x9c,0x9b,0xa6,0xb3 -,0xbc,0x38,0x21,0x1a,0x19,0x10,0x16,0x0f,0x11,0x1c,0x1c,0x15,0x1a,0x2b,0x35,0xa9,0x9e,0x9b,0x9f,0x9c,0x9c,0x99,0x8e,0x8e,0x97,0x9e,0x9e,0xa9,0xab,0xbb,0x2f,0x21 -,0x1d,0x17,0x12,0x15,0x0d,0x14,0x19,0x17,0x12,0x1c,0x32,0x65,0x9d,0x99,0x97,0x9b,0x98,0x97,0x93,0x8f,0x92,0x9e,0xaa,0xad,0xb0,0xb4,0xe0,0x3b,0x1e,0x1a,0x14,0x15 -,0x14,0x0f,0x1e,0x1d,0x16,0x12,0x21,0x2a,0xb3,0x9b,0x9f,0x9b,0x9a,0x97,0x96,0x8f,0x8f,0x94,0x9f,0xa0,0xb0,0xaf,0xba,0x37,0x23,0x1c,0x1a,0x10,0x15,0x11,0x10,0x1d -,0x1f,0x18,0x18,0x2e,0x3b,0xaa,0x9e,0x9c,0x9c,0x9d,0x96,0x94,0x90,0x91,0x97,0xa2,0xa7,0xad,0xb8,0xbd,0x44,0x23,0x1c,0x16,0x10,0x14,0x0e,0x14,0x1f,0x19,0x16,0x1c -,0x36,0x6d,0x9e,0x9d,0x9b,0x9b,0x9b,0x97,0x90,0x8d,0x94,0x9d,0xac,0xaf,0xcd,0xbc,0x5d,0x32,0x21,0x1c,0x17,0x16,0x19,0x0e,0x18,0x1e,0x1c,0x18,0x22,0x2f,0xe7,0xa0 -,0x9b,0x9e,0x9c,0x9a,0x98,0x8f,0x8f,0x91,0xa0,0xb0,0xbf,0xbf,0xdd,0x75,0x32,0x1f,0x1c,0x1b,0x13,0x1a,0x10,0x15,0x26,0x1f,0x1c,0x26,0x45,0x63,0x9f,0x9f,0xa0,0xa4 -,0x9b,0x9a,0x93,0x8f,0x92,0xa1,0xb4,0xae,0xb2,0xb9,0xd4,0x30,0x23,0x1e,0x1a,0x16,0x1b,0x0e,0x13,0x1e,0x1d,0x1c,0x23,0x46,0x78,0x9f,0x9e,0x9e,0xa7,0x9c,0x9b,0x90 -,0x92,0x94,0xa0,0xae,0xb2,0xb1,0xb8,0x5c,0x30,0x27,0x25,0x20,0x22,0x19,0x11,0x0c,0x1c,0x1d,0x1b,0x1c,0x4c,0x3f,0xad,0x9e,0xa0,0xa1,0x9e,0x98,0x95,0x8e,0x92,0x9b -,0xaf,0xaf,0xba,0xb4,0x62,0x35,0x23,0x21,0x26,0x1e,0x1e,0x17,0x0e,0x18,0x1f,0x1d,0x1c,0x49,0x4f,0xc4,0xa4,0xa5,0xa8,0x9e,0x9a,0x94,0x90,0x96,0x98,0xa7,0xa7,0xa8 -,0xa5,0xd0,0x35,0x1f,0x23,0x22,0x20,0x1b,0x19,0x0b,0x0e,0x1e,0x1c,0x1c,0x31,0xc0,0x6e,0x9e,0x9f,0xa4,0xa3,0x98,0x9b,0x93,0x90,0x94,0xa7,0xab,0xa9,0xb4,0xbc,0x4c -,0x26,0x20,0x2e,0x20,0x18,0x1a,0x10,0x0b,0x1a,0x20,0x1d,0x26,0xc5,0x50,0xaf,0x9e,0x9e,0x9f,0x9b,0x98,0x92,0x91,0x96,0x9e,0xaa,0xad,0xae,0xbe,0x34,0x2e,0x22,0x26 -,0x23,0x25,0x19,0x15,0x0c,0x18,0x25,0x23,0x21,0x3d,0xde,0xfd,0x9f,0x9f,0xa1,0x9f,0x98,0x9f,0x93,0x91,0x9a,0xab,0xa7,0xab,0xc0,0x55,0x36,0x26,0x24,0x26,0x1e,0x1b -,0x18,0x10,0x0e,0x24,0x28,0x26,0x2d,0xbf,0xed,0xa4,0x9e,0xa4,0xa7,0x9c,0x9d,0x97,0x91,0x99,0xa6,0xb5,0xab,0xbd,0xb8,0x3f,0x3a,0x28,0x2b,0x1f,0x1e,0x17,0x16,0x0d -,0x18,0x2d,0x28,0x24,0x35,0xc1,0xc2,0x9c,0xa3,0xa7,0xa6,0x9b,0x9f,0x90,0x92,0x9d,0xab,0xac,0xbe,0xb6,0xba,0x48,0x2d,0x28,0x24,0x1c,0x1b,0x19,0x15,0x11,0x21,0x20 -,0x1f,0x1f,0xde,0xdc,0xa8,0xa1,0xa8,0xac,0x9b,0x9b,0x93,0x8e,0x98,0xa2,0xae,0xaf,0xbe,0xac,0x6c,0x37,0x28,0x24,0x1c,0x20,0x19,0x18,0x0f,0x19,0x21,0x1f,0x1d,0x3d -,0xc1,0xbf,0xa2,0xa9,0xae,0xa2,0x96,0x9b,0x8f,0x92,0x9e,0xb1,0xa3,0xb3,0xac,0xb6,0x47,0x25,0x25,0x22,0x1d,0x1b,0x1c,0x11,0x10,0x21,0x1b,0x1b,0x2b,0xb8,0x4f,0xa5 -,0xa5,0xab,0xa7,0x94,0x9a,0x93,0x8f,0x9e,0xae,0xa5,0xa7,0xb6,0xa9,0x4e,0x29,0x22,0x24,0x1b,0x1f,0x1c,0x14,0x0d,0x1b,0x1e,0x1c,0x25,0xd5,0xcc,0xb5,0x9e,0xa9,0xa8 -,0x97,0x94,0x9c,0x8f,0x96,0xad,0xb6,0x9f,0xb7,0xb8,0xca,0x29,0x1f,0x2a,0x24,0x1f,0x1e,0x19,0x0e,0x13,0x20,0x1f,0x22,0x33,0xc8,0xd3,0xa1,0xa5,0xa7,0x9f,0x94,0x9a -,0x97,0x92,0x9e,0xb2,0xa4,0xaa,0xb4,0xbb,0x3a,0x21,0x22,0x2b,0x23,0x1c,0x1b,0x11,0x0e,0x1e,0x1f,0x23,0x28,0xd0,0x5d,0xab,0x9f,0xa5,0xa3,0x98,0x9a,0x9b,0x90,0x99 -,0xa7,0xa4,0xa3,0xbb,0xb5,0xcc,0x28,0x1f,0x2a,0x22,0x1c,0x1a,0x15,0x0e,0x1a,0x1f,0x1f,0x24,0x3d,0xcf,0xb7,0xa1,0x9f,0x9e,0x9c,0x9b,0x9d,0x93,0x94,0x9f,0xa5,0xa3 -,0xb4,0xbd,0xc2,0x2e,0x21,0x29,0x21,0x1b,0x1b,0x16,0x0e,0x1a,0x20,0x1b,0x21,0x38,0x4c,0xbd,0x9f,0xa0,0x9f,0x99,0x9a,0x9d,0x91,0x91,0x9f,0xa4,0xa2,0xb0,0xb7,0xcf -,0x2e,0x23,0x2a,0x21,0x1b,0x1a,0x17,0x0e,0x15,0x23,0x1e,0x1e,0x2b,0x3f,0x7b,0x9f,0x9e,0xa0,0x9d,0x98,0x9e,0x98,0x8f,0x99,0xa1,0x9e,0xa9,0xbe,0xc3,0x34,0x20,0x24 -,0x27,0x1a,0x18,0x18,0x0e,0x15,0x22,0x1d,0x1c,0x2e,0x43,0xea,0x9e,0x9d,0xa7,0x9c,0x98,0x9e,0x97,0x8f,0x9b,0xa2,0x9b,0xa9,0xb8,0xae,0x3f,0x1d,0x29,0x26,0x1c,0x18 -,0x1a,0x0d,0x13,0x1e,0x19,0x19,0x2c,0x4e,0x4c,0x9f,0x9d,0xa5,0x9f,0x95,0x9a,0x94,0x8f,0x95,0xa0,0x9c,0xa3,0xc5,0xc0,0x3f,0x1e,0x1f,0x21,0x1a,0x1a,0x1a,0x10,0x14 -,0x22,0x1a,0x19,0x2b,0x4d,0xe9,0xa0,0x9b,0xa2,0x9d,0x96,0x9b,0x99,0x8e,0x91,0x9e,0x9e,0xa8,0xcc,0x65,0x4b,0x20,0x22,0x25,0x1d,0x16,0x1a,0x11,0x10,0x1f,0x1b,0x17 -,0x25,0xee,0x46,0xa6,0x9b,0x9e,0x9e,0x93,0x9a,0x98,0x8f,0x95,0x9e,0x9d,0xa5,0xde,0x74,0x2e,0x1e,0x28,0x28,0x1a,0x1a,0x17,0x0d,0x14,0x20,0x19,0x1c,0x2b,0x3c,0x5b -,0xa2,0x9f,0x9f,0x9a,0x94,0x9a,0x95,0x90,0x96,0x9c,0x9d,0xa5,0xc7,0xeb,0x2c,0x1e,0x23,0x28,0x1b,0x18,0x16,0x0e,0x11,0x1e,0x19,0x1d,0x35,0x42,0x7b,0xa2,0xa6,0xa1 -,0x97,0x95,0x97,0x92,0x8e,0x96,0x9c,0x96,0xa1,0xb8,0xc8,0x2c,0x20,0x1e,0x2b,0x1a,0x1a,0x11,0x0b,0x10,0x20,0x1d,0x38,0x4a,0xf3,0x23,0x9a,0x8e,0x8f,0x8d,0xa0,0x92 -,0x09,0x0a,0x03,0x1b,0x95,0x1a,0xc5,0x0a,0x18,0x96,0xaa,0xb1,0x4c,0xa8,0xd0,0x8e,0x8d,0x7d,0x95,0x94,0x41,0x8f,0x30,0xc7,0x85,0x94,0x8d,0x8f,0xa0,0x2e,0x45,0x19 -,0x20,0x0f,0x0b,0x03,0x0b,0x0a,0x02,0x07,0x07,0x06,0x00,0x0c,0x02,0x06,0x0e,0x1d,0x2f,0x9e,0x98,0x93,0x89,0x87,0x87,0x89,0x85,0x84,0x84,0x82,0x87,0x84,0x85,0x82 -,0x83,0x82,0x86,0x8c,0x85,0x18,0x26,0x93,0x88,0x19,0x05,0x19,0x01,0x12,0x07,0x02,0x07,0x05,0x00,0x75,0xb7,0x09,0x08,0x00,0x4c,0x1b,0x08,0x05,0x0c,0x26,0x17,0xcc -,0x1e,0x0e,0x08,0xaf,0x90,0x8d,0x8f,0x8c,0xda,0xa9,0x80,0x88,0x84,0x80,0x84,0x8b,0x80,0x88,0x80,0x85,0x82,0x96,0x92,0x94,0x98,0x9b,0x2b,0x2c,0x06,0x0d,0x07,0x09 -,0x01,0x02,0x00,0x03,0x08,0x05,0x08,0x0d,0x12,0x08,0x16,0x19,0x12,0x14,0x2b,0x93,0x8c,0x90,0xb1,0x90,0x86,0x87,0x97,0x8e,0x8c,0x34,0xa1,0x98,0xad,0x6b,0x97,0x29 -,0x25,0x83,0x9a,0xb8,0x84,0x85,0x86,0x8d,0x86,0x9a,0x8b,0x97,0x26,0xc7,0x1b,0x9c,0x00,0x07,0xb7,0x07,0x04,0x05,0x03,0x03,0x0d,0x05,0x13,0x17,0x02,0x02,0x09,0x06 -,0x25,0x88,0x2a,0xab,0x9b,0x8c,0x85,0x32,0x89,0x85,0x85,0x80,0x8e,0x8d,0x85,0x83,0x8b,0x82,0x92,0x99,0xde,0x30,0x31,0x2b,0x18,0x06,0xa9,0x0e,0x13,0xbc,0x5d,0x2b -,0xb0,0x3c,0x1f,0xc8,0xbe,0x89,0x24,0x06,0x8f,0x96,0xa3,0xde,0x0b,0x03,0x1d,0x9d,0x1f,0xb4,0x04,0x00,0x00,0x06,0x1c,0x15,0x1e,0x14,0x26,0x0a,0x2a,0x12,0x16,0xbe -,0x2c,0xc3,0x01,0x9f,0x80,0x5a,0xb2,0x3a,0xcf,0x89,0x80,0x8d,0x8e,0x9d,0x93,0x58,0xc0,0x8b,0x37,0x94,0x4c,0x29,0xa6,0x2b,0x11,0x8b,0x9c,0x9b,0xa8,0x3c,0x95,0x34 -,0x80,0x8b,0x15,0xa1,0x92,0x29,0xd7,0x9c,0x2c,0x1e,0x1f,0x1c,0x15,0xce,0xbd,0xb6,0x8b,0x0b,0x5d,0x92,0x8a,0x80,0x8a,0x27,0xc6,0x8c,0xa9,0x9a,0x9a,0x86,0x05,0x0c -,0xa6,0x87,0x36,0x04,0x13,0x19,0x28,0x00,0x15,0x04,0x07,0x00,0x0e,0x17,0x00,0x8f,0x0b,0x0a,0x2b,0x03,0x15,0x45,0x86,0x34,0x09,0x0f,0x24,0x5f,0xcf,0x89,0x0d,0x1c -,0x0a,0x0a,0x93,0x9a,0xa9,0x0a,0x19,0xa8,0xa0,0x92,0x85,0x80,0x81,0x97,0x8a,0x80,0x84,0x81,0x83,0x80,0x81,0x80,0x8a,0x8e,0x8d,0x80,0x88,0x1b,0x48,0x1f,0x0c,0x03 -,0x05,0x01,0x00,0x04,0x00,0x00,0x06,0x07,0x00,0x19,0x07,0x00,0x09,0x05,0x0b,0x0a,0x05,0x22,0xe6,0x1b,0x1d,0x01,0x25,0xc4,0xac,0x8c,0x8c,0x12,0x06,0x29,0x26,0x89 -,0xa7,0x49,0x1e,0x9e,0x81,0x92,0x80,0x89,0x8a,0x83,0x8b,0x80,0x85,0x83,0x8b,0x94,0x80,0x87,0xa6,0x7e,0x9b,0xc5,0x34,0x16,0x10,0xb3,0x06,0x04,0x13,0x1d,0x02,0x06 -,0x0f,0x06,0x19,0xa9,0x0a,0x0d,0x88,0xa1,0xa4,0x9a,0x9c,0xd4,0x89,0x99,0x8b,0x98,0x4b,0x9d,0x2a,0x8c,0x9b,0x2c,0x98,0xec,0x2d,0x1d,0x14,0x9c,0x10,0xb5,0x17,0xde -,0x87,0x0d,0x05,0x99,0x99,0x34,0x1c,0x35,0x1d,0x08,0xcb,0x3d,0x08,0x09,0x1f,0x05,0x23,0x08,0x01,0x0b,0x0d,0x94,0xa5,0x39,0xb6,0x42,0x88,0x86,0x86,0x80,0x85,0x80 -,0x81,0x84,0x8d,0x80,0x84,0x8c,0x95,0x9f,0x91,0x22,0xbc,0x1b,0x27,0x5c,0x13,0x06,0x0b,0x0d,0x0b,0x0d,0x0e,0x21,0x00,0xb1,0x0d,0x04,0x38,0x16,0x14,0xa3,0x3e,0x12 -,0x29,0x09,0x26,0x29,0x2b,0x07,0x04,0x26,0x16,0x05,0x12,0x20,0x0d,0x11,0x32,0x3b,0xad,0x2f,0x1a,0x2b,0x95,0x92,0x9e,0x80,0x8a,0x8c,0x81,0x91,0x8b,0x84,0x87,0x84 -,0x84,0x84,0x80,0x9e,0x8c,0x94,0x23,0x8d,0x8b,0xb1,0x1b,0x28,0x1d,0x2d,0x3c,0x1f,0x06,0xa9,0x17,0x17,0x8b,0x0e,0x15,0x99,0xc8,0x94,0xa1,0x0e,0x3e,0x3a,0x2a,0x43 -,0x2c,0x56,0x0c,0x01,0x35,0x0f,0x09,0x09,0x0e,0x0e,0x03,0x04,0x06,0x05,0xb6,0x09,0x1e,0x8a,0x0b,0x1c,0x9b,0xbb,0x1d,0x8e,0x22,0x2a,0xae,0x94,0x96,0xa9,0x89,0xa8 -,0x86,0x80,0x85,0x86,0x80,0x85,0x82,0x81,0x82,0x8f,0x8b,0x82,0x96,0x85,0x8d,0xab,0x9b,0x8b,0x0e,0x25,0x37,0x06,0x0e,0x02,0x0a,0x06,0x04,0x03,0x00,0x06,0x09,0x07 -,0x00,0x0a,0x0e,0x0c,0x10,0x14,0x01,0x0a,0xc5,0x10,0xab,0x8c,0xcd,0xaa,0x8c,0xe0,0x8b,0x80,0x8e,0x8c,0x86,0x8c,0x8d,0x8c,0x8c,0x98,0x8e,0x9c,0x51,0xa5,0x96,0xc7 -,0x1d,0x96,0x26,0x2f,0xae,0x87,0x1d,0xa2,0x87,0x21,0xbd,0x98,0xdf,0x21,0x99,0x17,0x16,0xc2,0x2a,0x0d,0x20,0xae,0x19,0x21,0xaf,0x22,0x14,0xc9,0x24,0xbe,0x1c,0x07 -,0x16,0xde,0x88,0x0a,0x9f,0x89,0x51,0x87,0x87,0xb3,0x93,0x86,0xa1,0x97,0x39,0xd5,0x17,0xc1,0xea,0x08,0x11,0x10,0x19,0x1b,0x37,0x10,0x0b,0x05,0x13,0x07,0x08,0x21 -,0x00,0x0a,0x1a,0x00,0x16,0xaf,0x22,0x94,0x98,0x92,0x9d,0x8d,0x80,0x85,0x86,0x81,0x83,0x82,0x82,0x8b,0x88,0x80,0x89,0x8f,0x89,0xa3,0x92,0x49,0x8f,0x3b,0x1c,0x95 -,0x0c,0x35,0x9f,0x02,0x1e,0x48,0x08,0x07,0x0f,0x12,0x0a,0x0f,0x12,0x0d,0x07,0x17,0x0e,0x07,0x10,0x0b,0x07,0x03,0x06,0x00,0x0e,0x34,0x00,0x0f,0xad,0x1c,0xb5,0x8f -,0x27,0x8a,0x87,0xa5,0x86,0x8f,0x8c,0x8b,0x87,0x80,0x95,0x8b,0x87,0x8a,0x85,0x8c,0x91,0x8e,0x9e,0xa8,0xb6,0x3f,0x8b,0x18,0x1e,0x8c,0x0e,0x9c,0x97,0x18,0x90,0xa6 -,0x20,0xab,0xbe,0x23,0x2a,0xb3,0x5e,0x11,0x1b,0x16,0x19,0x31,0x2e,0x0f,0x28,0x1d,0x18,0x10,0x2b,0xa0,0x02,0xb2,0x9c,0x06,0x9c,0xc4,0x0a,0x38,0x25,0x0f,0x1a,0x5c -,0x13,0x1a,0x2d,0x1b,0x0f,0x0e,0x23,0x11,0x14,0x2a,0x05,0x0a,0x16,0x0a,0x0b,0x29,0xae,0x18,0x8a,0x84,0x94,0x81,0x82,0x84,0x82,0x80,0x84,0x83,0x80,0x84,0x83,0x84 -,0x87,0x91,0x96,0x94,0x39,0x40,0x24,0x0d,0x0d,0x04,0x07,0x03,0x04,0x02,0x00,0x0f,0x07,0x00,0x1f,0x0c,0x0d,0xa8,0x11,0x14,0x2e,0x32,0x1c,0xcd,0x64,0x15,0x14,0x41 -,0x18,0x12,0xb6,0x1d,0x32,0xbe,0x28,0x5b,0x1c,0x9b,0x99,0x2f,0x88,0xa1,0xae,0x85,0xa3,0xb4,0x80,0xa0,0x96,0x8a,0x95,0x8d,0x8e,0x94,0x90,0x9a,0xc2,0x9d,0x9d,0x9e -,0x1f,0x1f,0x1b,0x2a,0x0e,0x0d,0x9f,0x0e,0x3a,0x8c,0x17,0x9f,0x90,0x2b,0x95,0x8f,0x2f,0xcf,0xd4,0x28,0xac,0x1c,0x2e,0x2c,0x1d,0x39,0x27,0xd5,0x1c,0x27,0x24,0x10 -,0xc1,0x0e,0x1b,0x3f,0x06,0xa9,0x2c,0x15,0x97,0x37,0x1f,0x98,0x7d,0x27,0xaf,0x2b,0x2b,0x32,0x29,0x0b,0x08,0x0c,0x08,0x0d,0x15,0x0e,0x14,0x1b,0x29,0xb5,0x94,0x86 -,0x91,0x85,0x80,0x87,0x81,0x82,0x84,0x81,0x81,0x83,0x82,0x86,0x89,0x89,0x87,0x8e,0x2f,0xb9,0x2d,0x0c,0x23,0x0a,0x04,0x03,0x03,0x00,0x04,0x0f,0x00,0x11,0x19,0x01 -,0x1a,0x19,0x08,0x2b,0x28,0x0d,0x29,0x23,0x15,0x1d,0xd6,0xbb,0x17,0x53,0xba,0x25,0x9e,0xc9,0x2d,0x2a,0x4a,0x15,0x4a,0x8d,0x0d,0x9f,0x8b,0x3b,0x8e,0x8d,0xa1,0x87 -,0x88,0x8d,0x8b,0x88,0x8e,0x9c,0x8a,0x8f,0xa7,0x9b,0xbf,0x2d,0x9f,0x2c,0x2a,0x1c,0x1c,0x10,0xa5,0xae,0x0f,0x8d,0x22,0x2d,0x8e,0xdd,0xd9,0xad,0x32,0x38,0x3e,0xad -,0x3a,0x73,0x99,0xe2,0x4b,0x9f,0x23,0x2f,0xa3,0x1e,0x14,0x1f,0x05,0x05,0xac,0x06,0x20,0x9d,0x03,0x20,0x9f,0x0c,0x36,0xdc,0x12,0x1c,0x3a,0x18,0x07,0x1b,0x0e,0x06 -,0x1d,0x0f,0x0b,0x26,0x1a,0x1c,0xbb,0xb1,0x34,0x85,0x8c,0x8d,0x80,0x85,0x81,0x80,0x84,0x83,0x80,0x82,0x81,0x84,0x81,0x8b,0x8d,0x8b,0x3d,0xc1,0x49,0x0a,0x17,0x0b -,0x00,0x03,0x02,0x01,0x08,0x01,0x0a,0x23,0x01,0x17,0x34,0x08,0x1a,0x22,0x1a,0x25,0x23,0x13,0x13,0x41,0x28,0x11,0x57,0x30,0x2a,0xc8,0xe4,0x2e,0x4e,0x1d,0x28,0x8d -,0x18,0x95,0x8b,0x1f,0x88,0x8e,0xbb,0x87,0x89,0x95,0x88,0x87,0x93,0x8f,0x8b,0x99,0x9d,0x9b,0x57,0x27,0x57,0x0f,0x12,0x1f,0x0d,0xa2,0x13,0x1e,0x90,0x0d,0x9c,0x8e -,0xc3,0x88,0x87,0xab,0x9a,0xa1,0x42,0x33,0x9d,0xc2,0x59,0xb3,0x16,0x11,0x12,0x0c,0x0a,0x2a,0x0d,0x9a,0x2c,0x14,0x98,0x0d,0x3f,0x9a,0x37,0xa5,0x95,0x32,0x2f,0x29 -,0x1b,0x1e,0xac,0xcf,0x36,0xf9,0x1f,0x13,0x1c,0x18,0x18,0x72,0x1c,0x94,0x1d,0x20,0x92,0x13,0x99,0x8c,0xd5,0x9a,0x9f,0x23,0x4d,0xbf,0x67,0xa1,0x8e,0xa3,0xa1,0xa5 -,0x28,0x22,0xad,0x30,0x40,0xaa,0x1a,0xa1,0x12,0x34,0x98,0x1d,0x8c,0x90,0x43,0x91,0xbb,0x2d,0xac,0xa0,0x9e,0x9b,0x8b,0xbe,0x9d,0x9e,0x3b,0xbd,0x9e,0x2a,0x2c,0x1c -,0x0d,0x30,0x04,0x5a,0xb5,0x0e,0x93,0xfd,0x10,0xaa,0x19,0x1d,0xb6,0xaa,0xaa,0xab,0xab,0x19,0x1f,0x27,0x10,0x29,0xd5,0x0e,0x1e,0x07,0x14,0x0b,0x0b,0x96,0x12,0xab -,0x89,0x29,0xa9,0x91,0xc8,0x95,0x8a,0x89,0x8a,0x84,0x8f,0x9f,0x98,0xa9,0x30,0x99,0xae,0x29,0x28,0x10,0xc3,0x08,0x5e,0x9a,0x1b,0x89,0x98,0x1e,0x8b,0x99,0xbb,0x91 -,0x8a,0x91,0x91,0x8e,0x1f,0xd8,0x66,0x13,0x1e,0x2e,0x15,0x15,0x04,0x16,0x10,0x06,0xa4,0x17,0x25,0x87,0x27,0x31,0x8e,0x18,0x20,0xb7,0xae,0x5a,0x9c,0x2f,0x0f,0x16 -,0x0b,0x07,0x16,0x17,0x0d,0x10,0x08,0x30,0x06,0x24,0x9d,0x16,0x8e,0x89,0x4c,0x8b,0x92,0x3e,0x8f,0x8d,0x96,0x8f,0x88,0xa0,0x9c,0xa0,0x5d,0xa4,0x8d,0x9d,0x92,0xa4 -,0x8c,0x8a,0x48,0x86,0x91,0x91,0x80,0x74,0x1c,0x9d,0x1f,0x0d,0x05,0x03,0x0a,0x19,0x09,0x00,0x01,0x04,0x02,0x02,0x04,0x07,0x11,0x03,0x29,0x0c,0x13,0x9c,0x13,0x9a -,0x88,0x1f,0x96,0x8f,0x1a,0xb7,0x92,0xa1,0x8f,0x85,0x8e,0x93,0x8f,0x9b,0xa7,0x89,0x94,0x8c,0x95,0x8c,0x8b,0x28,0x87,0x94,0xba,0x83,0xb0,0x48,0x86,0x27,0x0d,0xa6 -,0x93,0xbe,0x98,0x8b,0x8a,0x8b,0x99,0xa1,0x88,0x8d,0x14,0xa8,0xae,0xbc,0x0a,0x09,0xaf,0x06,0x08,0x47,0x0a,0x0f,0x11,0x00,0x0d,0x12,0x0a,0x14,0xcd,0x16,0x15,0x1a -,0x12,0x09,0x1c,0x0f,0x0f,0x24,0x0a,0x31,0x06,0x1b,0xbf,0x0a,0x9e,0x8c,0x2f,0x8f,0x93,0x5d,0x95,0x98,0x9e,0x8e,0x87,0x95,0x9f,0xa3,0xbc,0x25,0xba,0x12,0xed,0xc8 -,0x1b,0x23,0x08,0x89,0x9a,0x22,0x87,0x83,0x84,0x82,0x87,0x83,0x80,0x86,0x87,0x82,0x80,0x8e,0x2a,0xdb,0x2d,0x12,0x0c,0x00,0x0a,0x04,0x04,0x06,0x01,0x17,0x05,0x00 -,0xa4,0x13,0x0e,0xa5,0x0c,0x13,0x33,0x18,0x30,0xa6,0x4b,0x1d,0x1a,0x12,0x08,0x0a,0x13,0x0b,0x1f,0x08,0x25,0x1f,0x06,0x98,0x15,0x37,0x83,0xd2,0x9d,0x8c,0x51,0xa1 -,0x9f,0xbd,0xaa,0x89,0x97,0x1d,0xb8,0xa4,0xa8,0xa1,0xaa,0x94,0x80,0x8e,0x87,0x89,0x8d,0x80,0x9b,0x8b,0x80,0x8e,0x8c,0x92,0xf4,0xaf,0x4a,0x10,0x0f,0xad,0x18,0x03 -,0x12,0x08,0x05,0x0d,0x0b,0x0b,0x16,0x04,0x1d,0x0e,0x05,0xa8,0x06,0x17,0x93,0x0f,0x1e,0xcc,0x09,0x0e,0x2b,0x1f,0x27,0xa0,0x52,0x1e,0xbd,0x29,0x23,0xb0,0x9c,0x56 -,0x9a,0x1f,0xc9,0xac,0x0b,0x94,0x22,0x28,0x84,0x2d,0x11,0x99,0xad,0xa2,0x99,0x8e,0x85,0x80,0x85,0x90,0x80,0x81,0x89,0x8a,0x80,0x86,0x85,0x2d,0xf1,0xaf,0x07,0xff -,0x08,0x0b,0xab,0x0b,0x05,0x1c,0x05,0x07,0x19,0x15,0x20,0x55,0x25,0x15,0x1b,0x11,0x12,0x1c,0x47,0x17,0x19,0x0d,0x0e,0x16,0x03,0xb3,0x33,0x0f,0x8e,0x29,0x15,0x9b -,0x1a,0x25,0x9d,0xa7,0x99,0x97,0xab,0x51,0xad,0x56,0x1b,0x21,0x99,0x2d,0x15,0x0b,0x17,0x99,0x0e,0xa5,0x86,0x89,0x80,0x8e,0x97,0x80,0x83,0x8e,0x85,0x80,0x81,0x87 -,0x9a,0xa6,0xa4,0x38,0x0c,0x12,0x4f,0x09,0x04,0x07,0x00,0x0e,0x05,0x12,0x9d,0x0e,0xaf,0x9d,0x0c,0xd4,0x25,0x17,0xaf,0xb1,0xae,0x6d,0x4a,0x26,0x0d,0x21,0x1f,0x15 -,0xa9,0x1b,0x11,0x18,0x09,0x2e,0x0b,0x42,0x89,0x2a,0x95,0x95,0x27,0x98,0xc3,0x1c,0x97,0x8e,0xaf,0x1c,0x42,0x9f,0xb4,0x32,0xae,0x8c,0x80,0x91,0xa5,0x87,0x8b,0x85 -,0x9b,0x98,0x80,0x8f,0x9b,0x87,0x37,0xe3,0xc7,0x0c,0x2c,0x5f,0x19,0x0a,0x0e,0x0c,0x04,0x0b,0x1e,0x0e,0x23,0x1f,0x07,0x0a,0x03,0x14,0x0a,0x15,0x8e,0x10,0x2d,0x9f -,0x09,0x1e,0xc5,0x19,0xa3,0x92,0xb2,0xbf,0x9f,0xc7,0x27,0xad,0x9e,0xa9,0x96,0x9e,0x22,0xba,0x0d,0x25,0x31,0x26,0x85,0x16,0x10,0x8b,0x29,0x2e,0x9c,0xa5,0x81,0x85 -,0x8e,0x86,0x80,0x83,0x8c,0x88,0x80,0x83,0x88,0xa5,0x32,0x35,0x07,0x16,0x08,0x0e,0xaa,0x00,0x08,0x21,0x03,0x0b,0x1f,0x08,0x2d,0xbf,0x18,0x1d,0x28,0x1d,0x14,0x4a -,0xd7,0x2a,0xbc,0x1f,0x07,0x0f,0x02,0x21,0x11,0x11,0x8c,0x12,0x24,0x95,0x0e,0x43,0x97,0xd7,0x8e,0x91,0x97,0xa0,0x99,0x47,0x1f,0x9e,0x98,0x3d,0x25,0x1f,0x28,0x24 -,0x06,0xa0,0xa4,0x8b,0x83,0xb4,0x85,0x80,0x97,0x8a,0x80,0x84,0x80,0x88,0x93,0x90,0x8f,0x19,0x10,0x42,0x17,0x0c,0x0f,0x04,0x03,0x04,0x00,0x20,0x05,0x1b,0x99,0x03 -,0x25,0xbb,0x05,0x6b,0xb3,0x18,0xa1,0xa3,0x1f,0x1c,0x40,0x13,0x19,0x5b,0x37,0x24,0xd7,0x0d,0x0e,0x0f,0x0e,0x9e,0x13,0x8f,0x90,0x17,0x89,0xaa,0x0a,0x90,0x8f,0xbd -,0xa7,0xbd,0xb9,0x9c,0xa0,0x13,0x9a,0x80,0x91,0x98,0x82,0x8a,0x89,0xa0,0x96,0x82,0x91,0x81,0x92,0xcb,0x82,0x3f,0x0a,0x9d,0x1f,0x15,0x32,0x17,0x05,0x0d,0x11,0x05 -,0x12,0x36,0x0f,0x1a,0x1a,0x02,0x0c,0x04,0x1d,0x12,0x13,0x8f,0x0f,0x1d,0x95,0x0c,0x1c,0x95,0x30,0xb6,0x95,0xb5,0x34,0xa7,0x2f,0x1d,0x95,0x95,0x3a,0x9e,0xa7,0x16 -,0x10,0x08,0xa3,0x36,0x4a,0xa0,0x0c,0x95,0x96,0x07,0xa2,0x82,0x8b,0x8a,0x86,0x82,0x82,0x82,0x8c,0x87,0x80,0x84,0x99,0x8d,0xa5,0x1d,0x0b,0x0f,0x17,0x06,0xbb,0x0b -,0x01,0x29,0x0b,0x04,0x2d,0x12,0x17,0xb7,0x3e,0x1a,0x19,0x40,0x1a,0x25,0xa6,0x2a,0x1f,0x4f,0x09,0x0b,0x06,0x1a,0x15,0x0f,0x8e,0x12,0x14,0x94,0x0f,0x16,0x90,0xb6 -,0xa4,0x93,0x9f,0xa0,0x9c,0x36,0x30,0x9a,0x90,0x1d,0x16,0xe4,0x20,0x08,0x0a,0x92,0xb6,0x8b,0x86,0xa5,0x80,0x85,0xb2,0x87,0x80,0x84,0x80,0x88,0x8a,0x8e,0x95,0x38 -,0x1f,0xd3,0x49,0x0a,0x0c,0x05,0x02,0x00,0x05,0x1a,0x01,0xca,0x3d,0x00,0xbb,0x2f,0x03,0xaa,0xbc,0x1a,0xa2,0xbb,0x1b,0x2f,0x34,0x15,0x24,0xb1,0x64,0x25,0x53,0x14 -,0x13,0x0a,0x4e,0xf3,0x1f,0x87,0x3f,0x25,0x89,0x1a,0x0c,0x8d,0x9d,0x57,0xd7,0xef,0x4e,0xbc,0x24,0x21,0x8e,0x83,0x98,0x94,0x84,0x8a,0x8e,0x9a,0x84,0x83,0x88,0x80 -,0x92,0x9d,0x83,0x1c,0x19,0x93,0x1a,0x19,0x32,0x0b,0x04,0x0c,0x08,0x09,0x14,0x21,0x0c,0x16,0x0b,0x04,0x07,0x0c,0xcd,0x0c,0xcf,0x9c,0x05,0x50,0xad,0x09,0xb9,0x9a -,0x32,0xcb,0xbb,0x27,0x2c,0xbf,0x4d,0xa7,0x96,0xaa,0x1a,0x3e,0x2a,0x1d,0x10,0x1f,0x8a,0x19,0x37,0xaf,0x0c,0x97,0x9f,0x0f,0x8a,0x81,0x9b,0x92,0x8c,0x87,0x83,0x84 -,0x84,0x80,0x81,0x84,0x9f,0x98,0xa5,0xe6,0x1f,0xfb,0xce,0x04,0x2b,0x0c,0x00,0x1f,0x12,0x0a,0x5c,0x16,0x0e,0x17,0x14,0x1c,0x11,0x2c,0xce,0x1d,0x31,0x1e,0x0c,0x1a -,0x0c,0x0d,0x0c,0xbc,0xc0,0x06,0x9b,0x3c,0x0a,0x99,0xb0,0x2a,0x90,0x98,0x4b,0x3d,0x9d,0x9b,0x38,0xa7,0x91,0x9f,0x3f,0x20,0x08,0x2b,0x33,0x0c,0x12,0x8f,0x8d,0x1e -,0x8b,0x87,0x8c,0x83,0x84,0x89,0x80,0x81,0x8a,0x89,0x8b,0x90,0x93,0x9a,0x9d,0x2a,0x19,0x1c,0x01,0x05,0x07,0x04,0x01,0x23,0x12,0x02,0xca,0x0f,0x05,0x94,0xc8,0x17 -,0x97,0x6c,0x28,0x1c,0x1f,0xa7,0x27,0x3e,0xaa,0x18,0x20,0x1f,0x08,0x23,0x1e,0x0e,0x17,0xba,0xda,0x07,0x8f,0x88,0x16,0x93,0x9c,0xfb,0x85,0xa4,0x39,0x9a,0x93,0x06 -,0x0a,0x80,0xaf,0x00,0x3d,0x89,0x85,0x82,0x92,0x92,0x8e,0x0b,0x10,0x0f,0x1a,0x1b,0x00,0x1a,0x2f,0x00,0x00,0x03,0x02,0x1f,0x0f,0x0c,0x04,0x00,0xec,0xcb,0x9b,0x89 -,0x11,0x38,0xcf,0x97,0x86,0x18,0x8f,0x82,0x82,0x80,0x82,0x80,0x84,0x87,0x84,0x80,0x81,0x83,0x8b,0x81,0x81,0x80,0x8e,0x23,0x9a,0x80,0x88,0xac,0xbf,0x13,0x0e,0x16 -,0x8a,0xaa,0x1c,0xb7,0x04,0x06,0x0c,0x07,0x00,0x08,0x49,0x0b,0x01,0x12,0x0d,0x00,0x01,0x07,0x05,0x00,0x00,0x00,0x03,0x04,0x00,0x00,0x00,0x15,0x07,0x07,0x20,0x02 -,0x0a,0xdf,0x17,0x15,0x8e,0x95,0x2b,0xf4,0x91,0xa3,0x13,0x98,0x82,0x81,0x80,0x81,0x81,0x98,0xa3,0x80,0x84,0x82,0x80,0xa4,0x86,0x80,0x86,0x84,0x80,0x80,0x80,0x81 -,0x83,0x81,0x80,0x80,0x81,0x80,0x80,0x80,0x89,0x93,0x85,0x82,0xad,0x20,0x3c,0x8d,0x82,0x80,0x8e,0x98,0x81,0x97,0x8f,0x88,0x2d,0x26,0x2d,0x1c,0x0f,0x03,0x04,0x07 -,0x0b,0x0b,0x02,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x01,0x00,0x02,0x09,0x00,0x00,0x03,0x01,0x17,0x0e,0x02,0x05,0x02,0x04,0x01,0x03,0x01,0x02,0x02,0x07,0x0e,0x04 -,0x03,0x02,0x11,0x1d,0x0c,0x06,0x05,0x00,0x04,0xb8,0x58,0x9c,0x8c,0x21,0x26,0x9c,0x9d,0xa9,0x3f,0x8c,0x80,0x82,0x86,0x96,0x87,0x84,0x85,0x8e,0x91,0xa8,0xb3,0x9f -,0x95,0x8a,0x8f,0xc1,0xa9,0x82,0x82,0x83,0x80,0x82,0x85,0x84,0x82,0x81,0x80,0x87,0x86,0x80,0x85,0x97,0x9b,0x86,0x80,0x80,0x80,0x85,0x8c,0x8a,0x99,0x92,0x88,0x8d -,0xae,0xb1,0x8c,0x94,0x87,0x83,0x8f,0x8f,0x98,0xa6,0xbe,0x1a,0x12,0x27,0x36,0x2f,0x10,0x09,0x09,0x07,0x0c,0x13,0x09,0x03,0x20,0xb3,0x9f,0x97,0x9d,0x76,0x97,0x99 -,0xb4,0x89,0x85,0x98,0x27,0x41,0x9b,0x9f,0x19,0x1c,0xb2,0xab,0x16,0x01,0x02,0x06,0x06,0x05,0x09,0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x17,0x0e,0x01,0x10,0x0f -,0x03,0x00,0x00,0x03,0x04,0x00,0x00,0x02,0x0a,0x04,0x00,0x01,0x05,0x06,0x04,0x02,0x00,0x00,0x00,0x01,0x04,0x08,0x01,0x01,0x0c,0x06,0x05,0x1b,0x1d,0x23,0x23,0x31 -,0xa3,0xab,0x5a,0x2f,0xa6,0x8a,0x97,0x55,0x9a,0x8b,0x85,0x81,0x84,0x8a,0x86,0x81,0x80,0x80,0x80,0x83,0x85,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x80,0x80,0x80 -,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x84,0x84,0x83,0x83,0x84,0x9c,0x96,0x82,0xa2,0x23,0x34,0x35,0x0e,0x06,0x07,0x0c,0x07,0x02,0x01,0x04,0x0a -,0x02,0x00,0x02,0x09,0x0f,0x0d,0x07,0x04,0x00,0x00,0x01,0x03,0x05,0x00,0x03,0x11,0x0d,0x00,0x09,0x19,0x0f,0x08,0x03,0x06,0x0e,0x06,0x05,0x1f,0xb0,0x21,0x03,0x05 -,0x0d,0x0f,0x0b,0x07,0x0c,0x19,0x24,0x21,0x2d,0x52,0x0b,0x0c,0x9d,0xc5,0x49,0xad,0xa6,0x99,0xa4,0xbd,0x9d,0x8c,0x89,0x87,0x86,0x85,0x9e,0x1e,0x2b,0xad,0x96,0x94 -,0xaa,0x36,0x1e,0x29,0x27,0x2f,0xb0,0x32,0x91,0x83,0x92,0x9e,0x9d,0xa1,0xa6,0x2b,0x2b,0xc4,0x5c,0x46,0xad,0x8b,0x8c,0xc6,0x25,0xaf,0x9f,0xba,0x2f,0x23,0x18,0x1b -,0x24,0x39,0x9a,0xa2,0x1e,0x93,0x85,0x8e,0x8c,0x86,0x80,0x81,0x80,0x81,0x81,0x82,0x84,0x83,0x81,0x81,0x90,0x3e,0x4d,0xf7,0x30,0x1c,0x16,0x11,0x0b,0x06,0x02,0x02 -,0x00,0x00,0x10,0x0e,0x04,0x09,0x09,0x0b,0x0b,0x04,0x09,0x10,0x20,0xb4,0x96,0x8a,0x96,0x2c,0x2b,0x3c,0xbf,0x9c,0x9c,0x9c,0xaf,0xa8,0x9e,0x99,0x98,0x9b,0x86,0x81 -,0x86,0x8d,0x95,0x8c,0x88,0x8f,0x8c,0x86,0x8b,0x90,0x95,0x8f,0x8e,0x9b,0xa7,0x99,0x94,0x92,0x99,0xa9,0x30,0x1c,0x1e,0x1c,0x1f,0x12,0x1f,0x96,0x9c,0xb0,0xb3,0xa2 -,0x8e,0x99,0xbb,0xac,0x47,0x1b,0x22,0xed,0xa1,0x9c,0xb6,0x24,0x19,0x1b,0x1a,0x11,0x14,0x1d,0x1f,0x1a,0x1c,0x0f,0x0a,0x2c,0x32,0x1d,0x19,0x0c,0x0d,0x0e,0x0f,0x17 -,0x1a,0x21,0x19,0x27,0xba,0xd9,0x3d,0x13,0x0d,0x11,0x12,0x1b,0x35,0xc3,0xc7,0xad,0xa1,0xba,0xb6,0x87,0x80,0x81,0x80,0x81,0x80,0x87,0x89,0x84,0x85,0x88,0x8d,0x98 -,0x94,0x8f,0xaf,0x3d,0x35,0x1c,0x14,0x0b,0x05,0x02,0x00,0x01,0x02,0x02,0x00,0x0a,0x0a,0x0d,0x12,0x06,0x0e,0x0b,0x09,0x35,0x9f,0x99,0xa3,0x7d,0xa5,0x9a,0x9f,0xa9 -,0xa4,0xa9,0xb1,0xed,0x33,0x67,0x50,0x42,0xae,0x9f,0x31,0xae,0xac,0x53,0x9b,0x99,0x91,0x99,0xcf,0xb3,0x98,0x9a,0xa9,0xc2,0xa0,0x8e,0x8d,0x90,0x91,0x9c,0xb0,0x2f -,0x24,0x26,0x1d,0x13,0x15,0x2f,0x1b,0xfd,0xab,0xa2,0x90,0x95,0x8e,0x9d,0x19,0x14,0x24,0xd1,0xa2,0xbf,0xb8,0xbc,0xae,0x45,0x1f,0x25,0x2f,0x1d,0x19,0x1d,0x17,0x0d -,0x09,0x0d,0x07,0x15,0x18,0x0e,0x14,0x1b,0x39,0x22,0x0d,0x0e,0x1b,0x69,0xb7,0x3d,0xd3,0x2a,0x28,0x36,0xbf,0xa0,0x99,0x96,0x9c,0x95,0x97,0xac,0x9c,0x89,0x85,0x81 -,0x80,0x80,0x82,0x83,0x81,0x81,0x87,0x8b,0x91,0x9c,0x9c,0xcd,0x47,0x49,0x2e,0x1d,0x16,0x15,0x0b,0x03,0x02,0x03,0x02,0x02,0x00,0x02,0x00,0x08,0x10,0x0a,0x0f,0x0e -,0x1f,0xae,0x5a,0xb6,0xc6,0x63,0xa1,0xbb,0xa2,0x9c,0xa1,0x9f,0xa8,0x9e,0x9e,0xb2,0xad,0xa7,0xa7,0xad,0x2d,0x27,0x14,0x2c,0x9b,0x9c,0x97,0xa2,0x9b,0x8d,0x97,0xa2 -,0x9e,0x99,0x91,0x9e,0x98,0x8a,0x8e,0x9d,0xa6,0x9a,0x98,0xac,0x2e,0x2b,0x2e,0x20,0x15,0x1c,0x1b,0x2d,0x9c,0x9c,0x95,0xa5,0x50,0xc2,0x36,0xcf,0xb7,0xca,0xae,0x4e -,0x3b,0x37,0x2f,0x23,0x1b,0x29,0x34,0x3e,0x25,0x0e,0x0b,0x0c,0x0a,0x08,0x04,0x06,0x0a,0x0c,0x11,0x0d,0x13,0x23,0x1e,0x26,0x3c,0x3f,0x2c,0x13,0x17,0x3b,0xc6,0xaf -,0xab,0x96,0x8a,0x88,0x89,0x89,0x88,0x85,0x84,0x82,0x82,0x86,0x83,0x83,0x83,0x83,0x87,0x88,0x90,0xa1,0x98,0xbe,0xd9,0x2a,0x14,0x1d,0x14,0x0e,0x08,0x03,0x07,0x08 -,0x06,0x06,0x04,0x04,0x03,0x05,0x07,0x03,0x06,0x0e,0x14,0x20,0x2a,0x3b,0x74,0x3c,0xa4,0x9c,0xa0,0x98,0xac,0xaa,0x9d,0xa4,0x9f,0xad,0xa1,0x99,0x9a,0x95,0xa9,0x36 -,0x2b,0x30,0x67,0x4e,0x31,0xbe,0xb1,0xa2,0x9d,0xaa,0x9d,0x9d,0x9a,0x93,0x92,0x8f,0x91,0x9d,0x99,0x9b,0x9d,0x9b,0xaf,0xb9,0xb0,0xaa,0xba,0x2d,0x2e,0x2b,0x48,0xb3 -,0x39,0x18,0x14,0x21,0x2b,0x2a,0x24,0x33,0x41,0x46,0x41,0x2c,0x2e,0x4a,0x54,0x3b,0xe5,0x45,0x2a,0x1a,0x15,0x1d,0x1f,0x19,0x0f,0x0b,0x0c,0x0f,0x11,0x0d,0x0c,0x0c -,0x0f,0x19,0x16,0x14,0x12,0x16,0x2a,0xd5,0xb0,0x9f,0x95,0x8b,0x86,0x86,0x85,0x84,0x82,0x82,0x81,0x81,0x81,0x82,0x83,0x83,0x82,0x87,0x91,0x9c,0xb3,0xba,0x24,0x0f -,0x13,0x0f,0x0c,0x0d,0x0c,0x0c,0x09,0x05,0x07,0x0a,0x0a,0x0a,0x09,0x0a,0x0e,0x12,0x0e,0x0e,0x0f,0x10,0x17,0x22,0x28,0x1f,0x1d,0x26,0x3f,0x40,0xd3,0xb1,0xbe,0xb8 -,0x9d,0xa1,0xa6,0x9e,0xa0,0x96,0x96,0x9d,0x9e,0x9f,0xa0,0xa4,0xa5,0x9b,0x9d,0xa2,0x9e,0x99,0x9a,0xa8,0xa6,0xac,0xab,0xa2,0xa0,0xa4,0xad,0xb9,0xab,0xa1,0xa8,0xb8 -,0xcd,0xb2,0xc9,0x6f,0x45,0xeb,0xce,0xb5,0xa3,0xaa,0xc1,0x41,0x62,0xed,0xb1,0xa9,0xb8,0x57,0x37,0x34,0x4a,0x3c,0x2c,0x24,0x2a,0x29,0x1e,0x1f,0x16,0x17,0x19,0x17 -,0x14,0x10,0x10,0x0f,0x0f,0x15,0x13,0x0f,0x11,0x15,0x16,0x19,0x23,0x1c,0x12,0x16,0x20,0x36,0xaf,0xa7,0x99,0x8c,0x88,0x88,0x87,0x86,0x83,0x82,0x82,0x82,0x84,0x84 -,0x84,0x84,0x88,0x89,0x8e,0x96,0x97,0xa5,0xc4,0x37,0x19,0x0f,0x0f,0x10,0x0d,0x09,0x08,0x07,0x08,0x08,0x08,0x09,0x09,0x0a,0x0d,0x0f,0x0f,0x0d,0x0f,0x1a,0x1a,0x21 -,0x3a,0x31,0x3f,0x4d,0xaf,0xa8,0xa3,0xb2,0xfa,0xb8,0xb8,0xb2,0xae,0x9f,0x9b,0x9c,0x9f,0x9b,0x9c,0x9d,0x9e,0xa0,0x9d,0x9c,0xa5,0xa5,0xa7,0xae,0xac,0x9f,0x9f,0xad -,0xa0,0xae,0x9f,0xab,0xa0,0x98,0xa2,0x9f,0xad,0xa3,0xa7,0xaf,0x4d,0x41,0x25,0x1d,0x19,0x1a,0x19,0x18,0x23,0x1b,0x2e,0x20,0x25,0x2c,0x43,0xc0,0xc8,0xc6,0x3c,0x3e -,0x2f,0xeb,0x4f,0xc9,0xb7,0xba,0xec,0x32,0x32,0x2f,0xbf,0x5c,0x35,0x40,0x4f,0x3e,0x32,0x42,0xb9,0xa0,0xae,0xc0,0xbe,0xc3,0x5f,0x42,0x3a,0x36,0x2f,0x1f,0x1d,0x1d -,0x1c,0x25,0x31,0x29,0x27,0x32,0x4b,0xee,0xcb,0xba,0xa5,0xb1,0xb2,0xbf,0xeb,0xc5,0xbf,0xcd,0xd5,0xc2,0x3d,0x2d,0x33,0x6e,0xc4,0xb4,0xbd,0xb9,0xab,0xa3,0xa5,0x99 -,0x96,0x9f,0xaa,0xc1,0x69,0x26,0x37,0xdb,0x49,0xbb,0xc4,0xea,0xac,0x9e,0x9b,0x9a,0x9a,0x99,0x97,0x93,0x99,0x99,0x93,0x9c,0xa7,0xbe,0x5c,0x3b,0x25,0x1c,0x14,0x0e -,0x0a,0x0b,0x0c,0x0c,0x10,0x0d,0x0d,0x12,0x12,0x1a,0x23,0x2d,0x4f,0x41,0x3e,0x38,0x43,0xcd,0xd9,0xcd,0xcd,0x4f,0x2c,0x7e,0xc5,0xbe,0xa4,0xa9,0xab,0xa2,0x9a,0x97 -,0x8f,0x8b,0x8f,0x94,0x8e,0x97,0x95,0x91,0x99,0x9b,0xa2,0xbc,0x4a,0xb8,0xb6,0xaf,0xad,0xa2,0xaf,0xc8,0xb0,0xb2,0xac,0xac,0xea,0x3b,0x4e,0x39,0x34,0x2e,0x2c,0x25 -,0x1f,0x2d,0x23,0x1b,0x24,0x1f,0x1c,0x18,0x18,0x14,0x14,0x15,0x19,0x1e,0x1c,0x16,0x0f,0x18,0x18,0x18,0x18,0x1a,0x1b,0x1c,0x1d,0x17,0x24,0x40,0xdb,0xcd,0xac,0x9d -,0x9d,0x96,0x91,0x8d,0x8b,0x8e,0x91,0x8e,0x8d,0x8b,0x8a,0x8e,0x96,0x9a,0x96,0x99,0xaa,0xac,0xa0,0x9b,0x9d,0xad,0xdf,0xd4,0xd9,0x3a,0x2e,0x23,0x19,0x0f,0x0e,0x0c -,0x0a,0x0a,0x07,0x06,0x07,0x06,0x03,0x06,0x07,0x09,0x0b,0x0e,0x0e,0x0d,0x13,0x16,0x1f,0x40,0xd9,0xd3,0xb4,0xa6,0x9f,0x9d,0x99,0x97,0x9a,0x99,0x9e,0xc0,0xb2,0xa8 -,0x9a,0x95,0x8f,0x8d,0x8e,0x8b,0x8b,0x87,0x85,0x89,0x8a,0x87,0x8b,0x8b,0x8b,0x8d,0x8f,0x99,0xa3,0xba,0x3a,0x3b,0x3d,0x37,0x4f,0x42,0x34,0x36,0x38,0x37,0x56,0xc5 -,0x3e,0x28,0x24,0x1a,0x1b,0x1b,0x19,0x19,0x13,0x0f,0x0e,0x0b,0x0e,0x12,0x14,0x1a,0x19,0x18,0x1e,0x1f,0x1a,0x31,0xc9,0x5e,0x40,0x36,0x2b,0x2c,0x36,0x34,0x36,0x2a -,0x21,0x1a,0x19,0x25,0x23,0x28,0x49,0x7a,0xc4,0xb3,0xb1,0xa2,0x92,0x94,0x9b,0x99,0x95,0x96,0x93,0x9c,0x9e,0x9a,0xa5,0xae,0xae,0x9e,0x9a,0x95,0x96,0x97,0x95,0xa8 -,0xaf,0xa8,0xa7,0xa3,0x59,0x26,0x25,0x1e,0x1a,0x19,0x0f,0x10,0x14,0x0f,0x10,0x13,0x15,0x19,0x2b,0x3a,0x39,0x3e,0x62,0xa5,0x96,0x91,0x8b,0x89,0x8a,0x8a,0x89,0x8b -,0x8e,0x8d,0x8c,0x8a,0x8d,0x8f,0x97,0xad,0xaa,0xad,0xcb,0x43,0x2d,0x23,0x1a,0x19,0x15,0x17,0x13,0x0d,0x0d,0x0d,0x0e,0x0c,0x09,0x08,0x08,0x05,0x03,0x03,0x03,0x08 -,0x0b,0x0e,0x13,0x0f,0x10,0x1b,0x22,0x58,0xab,0xac,0xaa,0xb2,0xa1,0x9f,0x9f,0x9c,0x9c,0x99,0xa1,0xaa,0xbb,0xb5,0xa3,0x9e,0x9a,0x97,0x95,0x93,0x8f,0x8e,0x89,0x85 -,0x87,0x87,0x88,0x87,0x87,0x8a,0x8a,0x8a,0x96,0x97,0x9b,0xd0,0xbd,0xcb,0x6b,0xd0,0x57,0x38,0x3e,0x3f,0x31,0x39,0xec,0x3a,0x29,0x27,0x25,0x24,0x1f,0x1e,0x1b,0x17 -,0x17,0x15,0x0d,0x11,0x1e,0x1b,0x1e,0x1e,0x1f,0x24,0x25,0x24,0x44,0xee,0x3c,0x2e,0x26,0x21,0x19,0x16,0x18,0x1e,0x1a,0x18,0x18,0x0f,0x18,0x1f,0x1a,0x2d,0x3e,0x2a -,0x3b,0xbd,0xba,0xa2,0x9e,0xa7,0xaa,0xa4,0xa4,0xae,0xaf,0xb9,0xae,0xc5,0xde,0x5e,0x36,0xbf,0xa6,0xa9,0xa4,0xa5,0xaa,0xa0,0xa7,0xaa,0x9b,0xa0,0xd3,0x36,0x31,0x2a -,0x22,0x1f,0x23,0x27,0x1e,0x1d,0x18,0x19,0x21,0x37,0xd2,0xa9,0x9b,0x9a,0x8f,0x8b,0x8a,0x87,0x86,0x85,0x85,0x86,0x87,0x84,0x87,0x87,0x87,0x8c,0x8e,0x96,0xa3,0xa6 -,0xa4,0xb0,0x32,0x26,0x1e,0x15,0x11,0x0f,0x0f,0x0d,0x0a,0x08,0x07,0x07,0x05,0x05,0x05,0x06,0x05,0x03,0x02,0x05,0x07,0x08,0x0c,0x0c,0x0f,0x11,0x18,0x20,0x2e,0xca -,0xc8,0xbf,0xc7,0xbd,0xa8,0xa7,0xaa,0xa1,0x9f,0x9e,0xa5,0xb1,0xab,0xa3,0x98,0x96,0x96,0x91,0x8e,0x8d,0x8b,0x87,0x86,0x87,0x89,0x8a,0x8b,0x8b,0x8b,0x8d,0x90,0x95 -,0x9b,0x9e,0xaf,0xbf,0xb7,0xab,0xb3,0xda,0x48,0x3d,0x6b,0x57,0xcd,0xc6,0x7a,0x41,0x23,0x29,0x2f,0x1f,0x1e,0x1c,0x16,0x14,0x0f,0x0d,0x0f,0x13,0x16,0x17,0x1a,0x15 -,0x18,0x1b,0x1e,0x33,0x2d,0x22,0x1f,0x1f,0x1e,0x1d,0x1c,0x23,0x26,0x1b,0x1d,0x1b,0x17,0x1e,0x28,0x25,0x3c,0xfa,0x3e,0xbf,0xad,0xa6,0x9a,0x9e,0xa6,0xac,0xa5,0xa0 -,0xa2,0x9f,0xa5,0xaa,0xaf,0xb8,0xb1,0xa5,0x9f,0x99,0x9a,0x98,0x96,0x9c,0x9b,0x99,0x9b,0x9e,0xb6,0x5f,0x3e,0x2b,0x2a,0x20,0x1d,0x13,0x0e,0x0e,0x0f,0x14,0x17,0x1a -,0x29,0x3d,0xc6,0xa8,0x9d,0x8e,0x8d,0x8e,0x8b,0x8a,0x89,0x87,0x88,0x89,0x86,0x8a,0x8d,0x8d,0x8d,0x8f,0x8f,0x93,0x9c,0x9f,0xab,0xbd,0xb8,0xc2,0x2f,0x1c,0x13,0x0f -,0x0c,0x0a,0x09,0x07,0x07,0x06,0x03,0x03,0x03,0x04,0x06,0x07,0x07,0x08,0x0a,0x0c,0x10,0x1a,0x1b,0x17,0x1b,0x22,0x29,0x3a,0x44,0x49,0xd5,0xbf,0x6c,0x44,0xb0,0x9e -,0x9d,0x9a,0x97,0x99,0x98,0x94,0x91,0x8d,0x8c,0x8e,0x90,0x8f,0x8e,0x91,0x90,0x8e,0x8f,0x8f,0x91,0x99,0x9b,0x97,0x95,0x92,0x92,0x95,0x99,0x98,0x97,0x98,0x92,0x99 -,0xa6,0xb1,0xca,0x3e,0x39,0x2d,0x23,0x1e,0x19,0x16,0x0f,0x0e,0x14,0x17,0x15,0x1a,0x1a,0x17,0x1d,0x1f,0x2b,0x49,0x27,0x1e,0x1d,0x16,0x16,0x18,0x18,0x17,0x13,0x12 -,0x0e,0x0b,0x0e,0x12,0x15,0x16,0x19,0x1b,0x20,0x2a,0x31,0xc4,0xb3,0xc1,0x62,0xe1,0xd7,0xbf,0xbc,0xb9,0xb5,0xb5,0xb4,0x48,0x4a,0xb4,0xa8,0xa9,0xa4,0x9e,0x9b,0x98 -,0x92,0x8f,0x8c,0x8c,0x93,0x99,0x99,0x9f,0x9f,0xa2,0xaf,0xc4,0x2c,0x24,0x19,0x14,0x19,0x1a,0x1c,0x21,0x20,0x22,0x2f,0x5a,0xc2,0xa9,0x9e,0x9b,0x99,0x95,0x93,0x90 -,0x8d,0x8d,0x8c,0x8c,0x8c,0x8c,0x8f,0x8c,0x8d,0x8f,0x8d,0x91,0x96,0x97,0x99,0x9b,0x9b,0xab,0x4d,0x2f,0x1e,0x16,0x12,0x0e,0x0c,0x08,0x07,0x07,0x03,0x03,0x03,0x04 -,0x06,0x06,0x07,0x07,0x09,0x0c,0x0d,0x15,0x19,0x19,0x1b,0x1f,0x21,0x28,0x2c,0x2a,0x3a,0x47,0x3b,0x2f,0x39,0xbe,0xa3,0xa0,0x9c,0x98,0x97,0x98,0x93,0x8e,0x8b,0x8d -,0x8e,0x8e,0x8e,0x8e,0x8e,0x8d,0x8d,0x8d,0x8e,0x90,0x98,0x99,0x95,0x93,0x95,0x95,0x94,0x9b,0x97,0x9a,0x9c,0x94,0x9c,0xa3,0xaa,0xb7,0xcc,0xcc,0x47,0x3a,0x34,0x1e -,0x1c,0x13,0x13,0x1a,0x1a,0x18,0x1b,0x1d,0x1b,0x1e,0x21,0x24,0x32,0x30,0x23,0x1e,0x1c,0x1d,0x1d,0x1b,0x1d,0x19,0x12,0x0f,0x0d,0x0e,0x11,0x15,0x1a,0x1f,0x1e,0x1f -,0x27,0x28,0x38,0xaf,0xb2,0xca,0xde,0xc5,0xb8,0xbe,0xb3,0xbb,0xbd,0xde,0xb7,0xd0,0x68,0xa7,0x9f,0xa6,0x9d,0x98,0x9b,0x97,0x94,0x8f,0x8d,0x8d,0x96,0x97,0x94,0x9b -,0x9f,0xa7,0xb8,0x51,0x28,0x1c,0x13,0x12,0x18,0x18,0x19,0x1d,0x1f,0x1f,0x2b,0x38,0xbd,0xa1,0x9f,0x9d,0x98,0x90,0x8e,0x8d,0x8a,0x8b,0x8b,0x8b,0x8b,0x8e,0x8e,0x8c -,0x8b,0x8c,0x8e,0x8e,0x91,0x96,0x9e,0x9d,0x9b,0xa7,0x4d,0x25,0x18,0x11,0x0e,0x0b,0x09,0x08,0x06,0x04,0x03,0x02,0x03,0x04,0x07,0x06,0x05,0x09,0x0c,0x0a,0x0e,0x18 -,0x19,0x16,0x1a,0x1b,0x1f,0x2d,0x25,0x2c,0x2d,0x2d,0x29,0x28,0x42,0xb6,0xac,0xa2,0x9b,0x99,0x9a,0x99,0x92,0x8c,0x8c,0x8f,0x8e,0x8e,0x8e,0x92,0x8f,0x8e,0x8f,0x93 -,0x94,0x99,0x9b,0x98,0x97,0x8f,0x92,0x92,0x93,0x93,0x92,0x92,0x95,0x94,0x9a,0xa1,0xa6,0xac,0xba,0x58,0x3f,0x2c,0x2f,0x1e,0x19,0x0f,0x0d,0x4e,0x8d,0x1d,0x00,0x90 -,0x9a,0x1a,0xbd,0x12,0x25,0x0c,0x0d,0x0b,0x12,0x0c,0x00,0x0a,0x00,0x02,0x02,0x01,0x03,0x00,0x02,0x03,0x03,0x08,0x07,0x0a,0x0d,0x16,0x2e,0xad,0xa1,0x93,0x89,0x8c -,0x8d,0x8a,0x80,0x85,0x8a,0x84,0x81,0x80,0x82,0x82,0x81,0x82,0x81,0x82,0x80,0x82,0x82,0x80,0x84,0x83,0x89,0x88,0x89,0x8a,0x8d,0x96,0xa3,0xcd,0xb1,0x2b,0x1c,0x14 -,0x17,0x0f,0x0c,0x0a,0x04,0x08,0x05,0x04,0x04,0x05,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x04,0x03,0x07,0x05,0x0b,0x0d -,0x0e,0x1c,0x29,0x3c,0x3e,0xac,0x9d,0x95,0x8f,0x8f,0x8e,0x8a,0x85,0x86,0x85,0x84,0x82,0x82,0x82,0x81,0x81,0x81,0x80,0x81,0x81,0x80,0x80,0x80,0x80,0x81,0x81,0x80 -,0x81,0x81,0x82,0x82,0x83,0x83,0x84,0x87,0x86,0x87,0x88,0x8a,0x87,0x89,0x8e,0x8d,0x96,0x95,0x99,0x9e,0xad,0xd8,0x3c,0x27,0x13,0x0f,0x09,0x0a,0x0b,0x05,0x06,0x01 -,0x04,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x01,0x06,0x07,0x04,0x04,0x06,0x07,0x0b,0x0b,0x09,0x0a -,0x0e,0x14,0x10,0x18,0x13,0x16,0x2e,0x1e,0x1d,0x1f,0x1e,0xa7,0x94,0x93,0x96,0x96,0x8a,0x88,0x89,0x89,0x8a,0x86,0x84,0x87,0x86,0x89,0x87,0x84,0x88,0x87,0x8a,0x88 -,0x86,0x89,0x8a,0x87,0x8a,0x8a,0x8e,0x8f,0x92,0x9a,0x85,0x84,0x84,0x85,0x89,0x83,0x83,0x83,0x87,0x8f,0x8a,0x85,0x8b,0x8c,0x99,0x96,0x8c,0x8f,0x95,0x9e,0x9d,0x8f -,0x95,0x97,0xa8,0xaa,0x9d,0xcc,0x49,0x1b,0xa0,0x8b,0x8c,0x8b,0x98,0x8d,0x88,0x88,0x8b,0x9c,0x9d,0x8c,0x8e,0x8d,0x97,0x9d,0x90,0x95,0x96,0xa1,0xae,0x9a,0x9b,0xb6 -,0x2c,0x18,0x0e,0x0d,0x0a,0x01,0x12,0x1f,0x26,0x1b,0x08,0x0c,0x0e,0x0b,0x06,0x02,0x01,0x04,0x04,0x03,0x01,0x01,0x01,0x02,0x01,0x01,0x00,0x01,0x01,0x00,0x00,0x00 -,0x00,0x00,0x00,0x00,0x04,0x03,0x09,0x05,0x01,0x03,0x03,0x04,0x02,0x00,0x02,0x06,0x08,0x0c,0x05,0x07,0x0b,0x0c,0x0f,0x09,0x0b,0x12,0x11,0x1b,0x11,0x0e,0x15,0x1d -,0x18,0x9e,0x82,0x86,0x81,0x86,0x83,0x82,0x83,0x81,0x84,0x83,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x81,0x83,0x83,0x80 -,0x80,0x80,0x81,0x81,0x80,0x81,0x81,0x84,0x87,0x80,0x81,0x80,0x82,0x85,0x89,0x89,0x89,0x92,0x98,0x9d,0xa2,0xa6,0x55,0x26,0x12,0x0d,0x0a,0x04,0xec,0x7e,0x50,0x18 -,0x04,0x0b,0x05,0x07,0x04,0x01,0x08,0x0b,0x13,0x0c,0x03,0x03,0x01,0x03,0x02,0x01,0x02,0x01,0x02,0x01,0x00,0x00,0x00,0x01,0x00,0x11,0x17,0x16,0x0e,0x00,0x07,0x04 -,0x08,0x08,0x03,0x0f,0x24,0x4f,0xd8,0x11,0x13,0x19,0x1d,0x20,0x0f,0x1e,0x1a,0x31,0x36,0x21,0x1b,0x1b,0x16,0x17,0x8a,0x88,0x86,0x90,0xac,0x95,0x9c,0x90,0x92,0x9f -,0x89,0x84,0x84,0x81,0x8c,0x93,0x9b,0x96,0x8f,0x98,0x8f,0x98,0x8f,0x96,0x9f,0xd4,0x4f,0x3f,0x31,0x85,0x86,0x85,0x94,0x63,0xa5,0xb4,0x9b,0x99,0x5d,0x93,0x8c,0x88 -,0x8a,0xd6,0x23,0x20,0x32,0x4a,0x2d,0x2e,0x1c,0x2d,0x1d,0x17,0x0c,0x0b,0x0a,0x0a,0x90,0x97,0x91,0x3f,0x0f,0x1c,0x15,0x3a,0x37,0x15,0xb6,0x9d,0x95,0x92,0x21,0x18 -,0x16,0x25,0xd7,0x49,0x65,0x2d,0x4c,0x31,0x2d,0x1d,0x25,0x15,0x2e,0x84,0x85,0x84,0x9e,0xbb,0xa6,0xa0,0x8b,0x90,0x9a,0x89,0x86,0x84,0x84,0x97,0xae,0x46,0x9f,0x93 -,0x90,0x8f,0xac,0xa1,0xc9,0xd4,0x2d,0x2a,0x0c,0x53,0x89,0x8a,0x8b,0x1c,0x16,0x13,0x20,0xa8,0x30,0x3f,0xa3,0xa4,0x8e,0xa7,0x25,0x0f,0x0a,0x1f,0x24,0xbf,0x65,0x17 -,0x19,0x10,0x15,0x18,0x15,0x06,0xb6,0x92,0x8a,0x96,0x11,0x15,0x0d,0xd5,0x9e,0xbf,0xab,0xad,0x96,0x8d,0xa2,0x5c,0x0f,0x17,0x30,0x66,0x9f,0x3d,0x27,0x19,0x18,0x1e -,0x1c,0x17,0x09,0x9c,0x97,0x88,0x9e,0x19,0x1a,0x10,0xa6,0x9b,0x9f,0x9b,0xa6,0x90,0x8a,0x9f,0xce,0x10,0x20,0x74,0xa6,0x98,0x40,0x2d,0x1b,0x1b,0x1b,0x1f,0x0e,0x11 -,0x96,0x96,0x88,0xdf,0x1d,0x13,0x12,0xa0,0xa5,0x9c,0xa1,0xa9,0x8f,0x8c,0x9a,0x5e,0x11,0x21,0x40,0xa5,0x9b,0x3a,0x26,0x16,0x1e,0x18,0x21,0x0a,0x1d,0x96,0x92,0x8a -,0x27,0x18,0x0c,0x1d,0xa0,0x9e,0x98,0xac,0xa9,0x90,0x97,0x9b,0x21,0x13,0x20,0x2d,0x9e,0xaf,0x37,0x1b,0x10,0x1d,0x16,0x23,0x07,0x22,0x9b,0x96,0x8c,0x23,0x19,0x0b -,0x27,0x9d,0x9c,0x98,0xaa,0xac,0x8f,0x9c,0x9e,0x1e,0x19,0x31,0x3b,0x97,0xac,0x3a,0x1e,0x18,0x1b,0x1d,0x20,0x0b,0xcc,0x99,0x8f,0x90,0x23,0x1e,0x0b,0xfb,0x99,0x95 -,0x98,0xad,0xa7,0x97,0x9b,0xab,0x1d,0x19,0x2a,0x49,0x96,0xb1,0x42,0x16,0x19,0x12,0x22,0x1d,0x12,0x9a,0x9f,0x89,0xb3,0x2a,0x18,0x0e,0xac,0x9e,0x93,0x9d,0xac,0xa3 -,0x9b,0xa6,0xb9,0x19,0x28,0x22,0xba,0x9d,0x47,0x3a,0x0f,0x17,0x12,0x2c,0x16,0x2d,0x99,0x98,0x8d,0x30,0x2b,0x0c,0x1b,0xad,0x9f,0x92,0x9d,0x9f,0xa2,0x9f,0xa7,0x29 -,0x1e,0x2f,0x29,0x9e,0xaa,0xc8,0x23,0x1b,0x1a,0x17,0x2c,0x12,0x9e,0x9b,0x8e,0x9a,0x1f,0x28,0x0c,0x62,0xa5,0x99,0x95,0x9f,0xa3,0x9f,0xa2,0xad,0x1f,0x23,0x2c,0x3a -,0x9e,0xca,0x5d,0x19,0x1e,0x17,0x26,0x18,0x2a,0x96,0x9c,0x8d,0x28,0x2c,0x10,0x1a,0xa9,0xa7,0x92,0x9f,0xa4,0x9e,0x9f,0x9f,0x44,0x17,0x27,0x1d,0xa2,0xba,0xbe,0x2b -,0x15,0x1a,0x13,0x25,0x0f,0xa5,0xa0,0x92,0xaa,0x19,0x1c,0x0c,0xd1,0xa6,0x98,0x9b,0xa9,0xb9,0x9e,0x9b,0xab,0x2b,0x1b,0x24,0x40,0xa0,0xc3,0xf3,0x19,0x1f,0x0f,0x26 -,0x16,0x31,0x96,0x9d,0x8d,0x1f,0x27,0x0e,0x1c,0xa6,0x9c,0x8f,0x9d,0xa1,0xa0,0x9e,0x9a,0xcc,0x2e,0x2f,0x2c,0x9f,0xa7,0xb4,0x2c,0x1a,0x1e,0x17,0x2e,0x16,0xa6,0x9b -,0x96,0x9e,0x17,0x1d,0x0c,0x55,0xa3,0x96,0x99,0xac,0xa9,0xa6,0x9f,0xa1,0x41,0x31,0x2e,0x34,0xa6,0xe5,0xef,0x19,0x1f,0x15,0x1e,0x18,0x23,0x98,0xa3,0x8f,0x1f,0x1b -,0x0e,0x18,0xad,0xa9,0x94,0xaa,0xa5,0xab,0x9e,0x9f,0xaf,0x33,0x2c,0x22,0xb9,0xb9,0xb8,0x2e,0x1d,0x1d,0x16,0x1f,0x15,0x9d,0x9e,0x8e,0xb0,0x1c,0x1c,0x0c,0xb2,0xab -,0x97,0x9b,0xa3,0xa5,0xa1,0x9f,0xa7,0x64,0x3c,0x2f,0x3f,0xab,0xba,0xcd,0x1b,0x22,0x11,0x21,0x16,0xc0,0x93,0x98,0x92,0x1a,0x22,0x0d,0x24,0xa7,0x9c,0x94,0xa7,0xa6 -,0xaf,0xa1,0xa4,0xce,0x3d,0x3a,0x39,0xb1,0xcf,0xbf,0x1f,0x25,0x17,0x1b,0x1b,0x1d,0x94,0xa2,0x8f,0x29,0x1d,0x14,0x17,0xae,0xaa,0x97,0xa5,0xa7,0xad,0x9f,0xa1,0xa9 -,0x30,0x3e,0x29,0xbb,0xcc,0xdd,0x28,0x1b,0x1e,0x13,0x28,0x13,0x9f,0x9d,0x93,0xa3,0x1a,0x1c,0x0c,0x58,0xa4,0x97,0x9a,0xa4,0xad,0xa1,0x9d,0xa4,0x55,0x2f,0x33,0xd9 -,0xb5,0x73,0x44,0x15,0x27,0x16,0x30,0x1b,0xb5,0x97,0x98,0x95,0x1a,0x1e,0x0b,0x2e,0xaf,0x99,0x97,0x9f,0xaf,0xb0,0x9e,0x9d,0xbb,0x2e,0x34,0x47,0xac,0x72,0x48,0x14 -,0x1d,0x16,0x31,0x1d,0xab,0x9d,0x9b,0x9b,0x1b,0x27,0x0b,0x2f,0xbe,0x98,0x99,0xa2,0xb9,0xb4,0x9c,0xa0,0xbc,0x33,0x34,0x2e,0xc6,0x54,0x53,0x17,0x18,0x0f,0x2d,0x1f -,0xa2,0x9d,0xa1,0xa4,0x16,0x2f,0x0e,0x4b,0xc4,0x9e,0x9b,0x9f,0xa7,0xb8,0xa5,0xa9,0xae,0xdf,0xc0,0xcc,0xbd,0x3e,0x3d,0x14,0x1d,0x11,0x2d,0x1d,0x9c,0x98,0x9f,0xa4 -,0x17,0x2b,0x0f,0xc5,0xd2,0x97,0x9e,0x9b,0xb2,0xb3,0xa9,0xad,0xa8,0xb7,0xc3,0xc5,0xc7,0x3c,0x34,0x14,0x14,0x10,0x22,0x31,0x8d,0x96,0x93,0x1e,0x17,0x10,0x19,0xa7 -,0xa5,0x92,0xa6,0x9f,0xad,0xac,0xc6,0xee,0x48,0xaa,0xad,0xa2,0xbf,0x31,0x17,0x0f,0x0e,0x14,0x1b,0x90,0x8e,0x8c,0x68,0x0f,0x0f,0x0a,0xb0,0xa0,0x90,0x99,0x9d,0xae -,0xbe,0xb9,0x2c,0x3b,0xc8,0xa2,0x9c,0xaa,0x39,0x0f,0x0e,0x0d,0x1a,0x14,0x92,0x91,0x8d,0xac,0x17,0x18,0x0a,0x3a,0xba,0x8d,0x95,0x92,0xb1,0xa9,0xba,0x40,0x2f,0x3a -,0xb2,0xab,0xa1,0xcf,0x20,0x0b,0x0d,0x0c,0x29,0x8f,0x8c,0x8e,0x32,0x1d,0x0e,0x18,0x4a,0x35,0x9e,0x9d,0x90,0x9b,0x9e,0x65,0x2b,0x5b,0xaf,0x9b,0xb6,0xce,0x1f,0x18 -,0x0f,0x15,0x12,0x31,0x93,0x8e,0x8a,0x2a,0x22,0x0a,0x1e,0xbe,0xaa,0x96,0xab,0x9f,0xab,0x9c,0xbd,0x6a,0x2b,0xed,0x4c,0xa5,0xd3,0x27,0x0d,0x0a,0x0e,0x1e,0x8d,0x8f -,0x8b,0x2c,0x1b,0x16,0x16,0xb0,0xe0,0xa8,0xa5,0x9e,0x9f,0xa1,0xc9,0xc3,0x38,0xaa,0xc1,0xc6,0x61,0x22,0x18,0x0d,0x14,0x10,0x98,0x8e,0x89,0xaf,0x19,0x13,0x0d,0xad -,0xac,0x98,0xa3,0xa0,0xae,0xa3,0xac,0x5d,0x65,0xc4,0xa6,0xb6,0xb3,0x22,0x0f,0x0a,0x18,0x15,0x97,0x90,0x94,0xb0,0x18,0x37,0x12,0xbb,0xd0,0xac,0xa0,0x9b,0x9a,0xa5 -,0xb5,0x57,0x5e,0xc8,0xad,0xc7,0xf7,0x1e,0x16,0x0d,0x13,0x13,0x9c,0x96,0x91,0xc8,0x1b,0x1b,0x12,0xa8,0xaf,0x9e,0xac,0x9f,0xa7,0xa0,0xae,0xbf,0x2f,0xc0,0xac,0xb0 -,0xb8,0x21,0x0d,0x0b,0x14,0x1a,0x92,0x9a,0x8f,0x2f,0x24,0x1d,0x13,0xac,0xca,0x9a,0x9e,0x99,0xa4,0xad,0xba,0xd5,0xc2,0xa6,0xb7,0xc6,0x3d,0x18,0x10,0x14,0x12,0x32 -,0x91,0x95,0x8f,0x1e,0x20,0x0e,0x1b,0xa7,0xb7,0x92,0xa9,0x99,0xa7,0xa7,0xb6,0x6f,0xd9,0xab,0xbf,0xb6,0x2f,0x14,0x0d,0x11,0x14,0xaf,0x8f,0x90,0x98,0x15,0x2e,0x0b -,0x37,0xbd,0xb4,0x9c,0x9f,0x9b,0xba,0xae,0x42,0x65,0xb0,0x9d,0xae,0xd7,0x1e,0x0f,0x0d,0x17,0x15,0x91,0x9a,0x8d,0xdf,0x1b,0x2c,0x0e,0x9e,0x6a,0xa6,0xb5,0xa5,0xa7 -,0xa3,0xbb,0xcd,0x2e,0xc4,0xa6,0xbc,0xdf,0x1b,0x0c,0x13,0x14,0xd1,0x8c,0x9a,0x92,0x0f,0x3b,0x17,0x48,0x98,0xae,0xa3,0xc4,0xa3,0xb8,0xbb,0x47,0x3e,0x58,0xa1,0xa9 -,0xbf,0x1d,0x0d,0x0c,0x1b,0x2b,0x8c,0x92,0x8f,0x1f,0x13,0x1c,0x1c,0x98,0xad,0x94,0xec,0x9a,0xae,0xa8,0xf4,0x32,0x34,0xbd,0xa4,0xaf,0x2c,0x13,0x0b,0x0c,0x1c,0xc2 -,0x88,0x90,0x90,0x16,0x1d,0x0f,0x39,0xa1,0xa6,0x9e,0xae,0x97,0xb1,0x9f,0x3c,0x37,0x34,0xaa,0xa5,0x5e,0x1f,0x0b,0x08,0x11,0x1c,0x8b,0x8f,0x8e,0x2a,0x14,0x1f,0x1e -,0x92,0xae,0x9f,0x37,0xa2,0xa6,0x97,0xad,0xc8,0x51,0xbe,0x9d,0xc0,0x26,0x0e,0x06,0x0e,0x12,0xb4,0x88,0x99,0x91,0x0d,0x23,0x0f,0x4e,0x98,0xa3,0x95,0xb4,0x9e,0xbe -,0xac,0x3d,0xbd,0xbe,0x92,0x9f,0xb3,0x1e,0x09,0x08,0x0c,0x18,0x8f,0x8d,0x8c,0x3b,0x0e,0x17,0x0e,0x9a,0x66,0x97,0xc0,0x9d,0x9e,0x9e,0xa4,0x2e,0x40,0xbd,0x9a,0x9f -,0xcb,0x1a,0x0d,0x0a,0x12,0x27,0x8d,0x96,0x93,0x19,0x1c,0x12,0x27,0xa6,0xbe,0xa0,0xbe,0x99,0xb2,0x9d,0x55,0xc9,0x68,0x9b,0x9b,0xb7,0x28,0x0f,0x0b,0x16,0x17,0x98 -,0x8c,0x94,0xab,0x0a,0x20,0x0b,0xa8,0xaf,0xa6,0xad,0xb4,0xa2,0xa7,0xae,0x3c,0x58,0xea,0x8f,0xa4,0xa0,0x17,0x0d,0x09,0x11,0x23,0x8e,0x8c,0x8b,0x44,0x11,0x1a,0x0c -,0xa4,0x48,0x98,0xbb,0x9d,0x9e,0xb1,0xb8,0x25,0x2e,0xb1,0x99,0x99,0xcc,0x1c,0x0b,0x0a,0x15,0x31,0x8b,0x90,0x8e,0x1c,0x1e,0x15,0x29,0xb0,0xb8,0xad,0xca,0x99,0xac -,0x99,0x29,0x40,0x1f,0xa1,0x98,0xa4,0x3d,0x12,0x09,0x0e,0x1c,0xba,0x89,0x9a,0x90,0x0e,0x25,0x11,0x28,0x9c,0xb2,0x97,0xaa,0x99,0xb1,0xc9,0x28,0x32,0x2d,0x95,0x9b -,0xa8,0x27,0x0d,0x09,0x0f,0x1c,0x98,0x8c,0x8d,0x9e,0x10,0x22,0x0a,0x4d,0xd0,0x9f,0x99,0x9b,0x90,0xb2,0xb9,0x24,0x28,0x46,0x99,0x9d,0xaa,0x1e,0x0f,0x07,0x12,0x1c -,0x9b,0x8c,0x92,0xa5,0x14,0x25,0x0d,0xdb,0xcc,0xa9,0xa3,0x9a,0x96,0xa5,0xb0,0x2c,0x3d,0xcc,0x96,0xa7,0xe2,0x1a,0x0b,0x0d,0x1a,0x25,0x8f,0x9d,0x92,0x2e,0x16,0x2b -,0x0f,0x9e,0x3a,0x9d,0xad,0x9c,0xa0,0xb6,0xdb,0x3f,0xdc,0x9d,0x93,0xaf,0xd3,0x11,0x0e,0x0c,0x1c,0x30,0x8f,0x98,0x93,0x1a,0x1b,0x12,0x19,0xa6,0x61,0x91,0xbf,0x8f -,0xbc,0xaf,0x32,0x2f,0xd1,0x9d,0x96,0xa5,0x36,0x16,0x0d,0x13,0x1c,0x5d,0x8d,0x9e,0x91,0x13,0x29,0x0e,0x21,0xdb,0xc8,0x9b,0xa8,0x93,0xb9,0xa5,0x26,0xbb,0x45,0x97 -,0xa5,0xbd,0x29,0x12,0x10,0x1a,0x1d,0xa3,0x8f,0x97,0x99,0x0d,0x2e,0x0a,0xd0,0x6b,0xa5,0x9e,0xb6,0x98,0x4e,0xad,0x2b,0xb7,0xb2,0x95,0xa3,0xce,0x17,0x0e,0x0c,0x1c -,0x23,0x91,0x8f,0x8e,0xb9,0x12,0x1e,0x0b,0xb6,0x2d,0x95,0xae,0x97,0xa5,0x62,0xda,0x1f,0xb3,0xaa,0x8f,0xa0,0x48,0x16,0x0c,0x0c,0x1b,0x21,0x8e,0x93,0x8d,0x3d,0x19 -,0x1f,0x11,0xad,0x49,0x9c,0xb4,0x9a,0xa6,0xb0,0x3e,0x2d,0x3d,0xa0,0x97,0xa5,0x30,0x13,0x0b,0x14,0x1e,0xd9,0x8c,0x9d,0x90,0x11,0x37,0x14,0x2d,0xa2,0xc7,0x99,0x5e -,0x98,0x58,0xb2,0x35,0xef,0xb8,0x96,0xa2,0xd6,0x19,0x0f,0x0d,0x18,0x2a,0xab,0x8d,0x95,0xa0,0x13,0x27,0x0e,0xd9,0xb2,0x9b,0x9f,0xab,0x9a,0x7e,0xbc,0x28,0x34,0xb1 -,0x9a,0x9d,0xbb,0x18,0x0e,0x07,0x1c,0x1e,0x8e,0x8e,0x8f,0x79,0x12,0x26,0x0f,0xaa,0xe5,0xa0,0xb8,0x9c,0x9c,0xa1,0xb9,0x2b,0x47,0xb0,0x9a,0xa7,0x2f,0x16,0x0b,0x0f -,0x1e,0x28,0x8f,0x9f,0x8e,0x24,0x28,0x1f,0x16,0xac,0x3b,0x98,0xc7,0x99,0xa5,0xb5,0xc8,0xe4,0xad,0x99,0x9f,0xb4,0x1b,0x0f,0x0c,0x14,0x22,0x76,0x91,0x9f,0x97,0x16 -,0x2c,0x14,0x36,0xaa,0xc6,0x9c,0xd6,0x99,0xad,0xaa,0xde,0xeb,0xab,0x9a,0x9c,0xa8,0x1a,0x13,0x09,0x17,0x18,0xcf,0x8f,0xa5,0x96,0x12,0x36,0x11,0x3a,0xb8,0xbf,0x9c -,0xcd,0x98,0xb2,0xaa,0x4f,0xb9,0xa8,0x9a,0x9d,0x7b,0x1b,0x17,0x0f,0x29,0x17,0xaa,0xa1,0xa2,0xa5,0x12,0xbe,0x0d,0xbb,0x3f,0xb8,0xa8,0xc9,0x98,0xb1,0xa7,0xb4,0xb8 -,0x9f,0x9b,0xb0,0x5c,0x10,0x1b,0x0f,0x38,0x1d,0xac,0x9f,0xa5,0xbb,0x15,0x49,0x11,0xab,0x6f,0xa6,0xb6,0x7b,0x9d,0xb9,0x9d,0xae,0xb2,0x9d,0xaf,0xa7,0x2a,0x1f,0x1a -,0x11,0x38,0x12,0xa1,0xaf,0x98,0xc9,0x1b,0x3b,0x0e,0xab,0x55,0xb0,0xbe,0xca,0xa2,0xb2,0xa5,0xb3,0xad,0x9c,0x9e,0xaf,0x3a,0x19,0x18,0x1a,0x37,0x1b,0xe5,0xb6,0xa1 -,0xb4,0x2a,0xd1,0x18,0xbd,0x42,0xbb,0xb5,0xb4,0xa2,0x5e,0xa8,0xb6,0xab,0x9c,0xa7,0xb4,0x1f,0x1e,0x1e,0x1d,0x4d,0x17,0x76,0xbb,0x9f,0xba,0x2d,0xe8,0x1a,0xbf,0xd3 -,0xc5,0x65,0xc4,0xa5,0xad,0xa1,0xa7,0xae,0xaa,0xaf,0xc2,0x29,0x27,0x25,0x1f,0x37,0x17,0x3d,0x5d,0xa2,0xc0,0x2c,0xbb,0x1a,0xcb,0xf6,0xcc,0xb7,0xd4,0x9e,0xaf,0x98 -,0x9d,0xad,0xa7,0x41,0x6d,0x26,0x2f,0x37,0x23,0x2c,0x11,0x28,0xec,0xaf,0xb8,0x2f,0xd8,0x2a,0xc2,0xc5,0xe5,0xfa,0x4d,0xa7,0xa0,0x99,0x99,0x9f,0xb0,0x73,0x53,0x2d -,0x2d,0x34,0x25,0x2a,0x1c,0x1b,0x28,0xcd,0xdb,0x4b,0xbe,0x49,0xc1,0xc1,0xe9,0x5e,0xe5,0xb0,0xaa,0x9d,0x95,0x99,0xa9,0xb3,0x40,0x3c,0x3b,0x3c,0x26,0x1f,0x1e,0x16 -,0x26,0x32,0x3f,0x33,0xfd,0x5c,0x4f,0xb2,0xc5,0xca,0xb8,0xbc,0x9d,0x9a,0x99,0x9c,0xac,0xa2,0x4a,0xb8,0x4c,0x58,0x2e,0x1b,0x1e,0x15,0x1a,0x20,0x34,0x2c,0x46,0x65 -,0xf9,0x7b,0xc1,0xce,0xba,0xac,0x9f,0x96,0x93,0xa4,0xaf,0xb2,0x48,0xb3,0xb9,0xae,0x50,0x2f,0x1d,0x17,0x17,0x18,0x23,0x28,0x2e,0xea,0x65,0x40,0x6e,0xea,0xb6,0xb5 -,0x9e,0xa1,0x97,0x9c,0xa1,0xa8,0xcc,0xaa,0xbe,0xaa,0xd1,0x3f,0x2e,0x1f,0x1f,0x17,0x1c,0x28,0x19,0x1e,0x2f,0x1d,0x3b,0xf2,0x3f,0xd9,0x7b,0x30,0x2a,0x8f,0x83,0x8a -,0x9b,0x22,0x13,0x9a,0x83,0x8e,0xa6,0xc7,0xb5,0xdf,0x2c,0x0c,0x0d,0x10,0x21,0x2a,0x10,0x09,0x10,0x2b,0xbd,0x96,0xc4,0x47,0x0c,0x0d,0xb2,0x85,0x80,0x84,0x8c,0x96 -,0x98,0xb7,0xe6,0x0c,0x17,0x2b,0xbb,0x1d,0x0b,0x0b,0x13,0xc9,0x23,0x19,0x1a,0x28,0x3c,0xa4,0x9f,0x97,0x8e,0x90,0x9e,0x4c,0x36,0x3b,0x36,0x4a,0x29,0xa9,0x93,0x1c -,0x0b,0x16,0xac,0x92,0xde,0x12,0x0d,0x50,0x90,0x91,0x9a,0xb6,0xaa,0xbf,0x1e,0x1b,0x2b,0xd1,0xdf,0x3e,0x5b,0xf1,0x39,0x1b,0x1a,0xa2,0x8a,0x91,0x54,0x15,0x0e,0x32 -,0xa1,0x9b,0xaf,0x38,0xa7,0xb5,0x2f,0x1e,0x2b,0xbc,0xa5,0x9e,0x53,0x4a,0xb9,0xa3,0x9d,0x9f,0xbd,0x16,0x09,0x0c,0x17,0xa6,0x91,0xac,0xd9,0xd7,0xc9,0x39,0x2c,0x17 -,0x1e,0x9c,0x92,0x9b,0xbe,0x48,0xb2,0xa3,0x9d,0xaf,0x22,0x22,0x27,0xbd,0x96,0x93,0x9c,0x63,0x17,0x0d,0x1c,0x2c,0x29,0x17,0x20,0x4b,0x47,0x1c,0x0e,0x1e,0x9f,0x87 -,0x98,0xc7,0xfe,0xa2,0x8e,0x8d,0x97,0x99,0x92,0x9d,0x27,0x1d,0x30,0x1b,0x16,0x15,0x1c,0x1f,0x17,0x08,0x08,0x40,0x98,0xa8,0x36,0x1f,0x2d,0x9a,0x8b,0x88,0x96,0x94 -,0x98,0xb8,0xaf,0x3c,0x2b,0xdb,0xba,0xab,0x38,0x3e,0x4d,0x23,0x35,0x2c,0x30,0x17,0x0a,0x08,0x14,0x9e,0x9e,0x2c,0x30,0xcc,0x9a,0xaa,0x53,0x62,0xb3,0x8a,0x8c,0x9a -,0xcc,0xed,0x9d,0x92,0x93,0xb0,0x21,0x16,0x14,0x1c,0x41,0x59,0x54,0x1f,0x0f,0x0e,0x0d,0x1a,0x11,0x12,0xb6,0x94,0x87,0xa8,0x46,0xaa,0x95,0x86,0x9d,0x3f,0x2f,0xbf -,0x8d,0x95,0x99,0xa5,0xbc,0xa6,0x1f,0x18,0x15,0x15,0x1a,0x14,0x1b,0x15,0x08,0x06,0x03,0x2b,0x8e,0x8b,0x95,0x6f,0x9b,0x92,0x88,0x89,0x9c,0x92,0x93,0x94,0x9e,0x3d -,0x49,0x19,0x20,0x2e,0x17,0x19,0x0d,0x13,0x1b,0x29,0x46,0x0e,0x0c,0x06,0x0c,0x98,0x89,0x85,0x92,0x96,0x8f,0xbf,0xb0,0x35,0x29,0x93,0x90,0x8d,0xa7,0x35,0xdf,0x42 -,0xae,0x2f,0x18,0x14,0x12,0x2b,0x54,0x44,0x26,0x0e,0x0e,0x06,0x0e,0x46,0xbe,0x95,0x98,0x8a,0x87,0x9e,0x9f,0x37,0x98,0x87,0x91,0x98,0x22,0x28,0x2a,0x5f,0xaa,0x4c -,0x5e,0x2e,0x17,0x18,0x0f,0x0e,0x0e,0x10,0x2b,0x11,0x2d,0x4b,0xc6,0x8e,0x96,0x8d,0x9b,0xc2,0xa5,0xca,0x98,0x8f,0x9b,0x8f,0xa4,0xa6,0xc8,0x28,0x46,0x1b,0x2a,0x25 -,0x19,0x1c,0x0a,0x0c,0x0f,0x23,0x3a,0x0d,0x27,0x2b,0xa1,0x8c,0x8e,0x85,0x92,0x91,0x9a,0x2f,0xaf,0xc6,0xb2,0x9f,0x7b,0xae,0x32,0x2f,0x2f,0x1c,0x38,0x2a,0x29,0x23 -,0x10,0x1c,0x1d,0xaf,0x4d,0x2c,0xa0,0x3d,0xbb,0x20,0x1c,0xcf,0xbe,0x8f,0x9c,0xc0,0x9f,0xb7,0x95,0x97,0xa5,0xa3,0x5f,0xa9,0xba,0xe6,0xa7,0xdd,0x3e,0x15,0x0b,0x0c -,0x0f,0x10,0x08,0x23,0xb1,0x9a,0x9f,0x2a,0xd5,0xab,0x94,0x8d,0xb3,0xa1,0x9c,0x9c,0x98,0xac,0xa5,0xa3,0xa3,0xab,0x28,0x25,0x28,0x1d,0x23,0x0f,0x15,0x15,0x1a,0x0d -,0x1a,0xa9,0x9f,0xa5,0x1a,0x1e,0x44,0xa9,0x93,0x9f,0x99,0x89,0x8f,0x8f,0xbd,0x34,0xb4,0xa4,0x97,0xb9,0x3b,0x25,0x1e,0x19,0x0f,0x0d,0x0c,0x12,0x09,0x17,0xac,0x97 -,0x8b,0xa7,0xaf,0xb9,0x58,0xc8,0x1a,0x36,0x9b,0x91,0x8d,0x9d,0xc3,0xb1,0xba,0xad,0x55,0x2a,0x5e,0x4d,0xb9,0x31,0x22,0x25,0x29,0x0f,0x17,0x3f,0x3d,0xbf,0x1e,0x25 -,0xe6,0x41,0x58,0x1b,0x27,0x92,0x8e,0x89,0x98,0xbc,0x9e,0xa1,0x95,0x9e,0xaa,0xa5,0xf4,0x2a,0x13,0x09,0x0a,0x0d,0x06,0x1a,0xa2,0x9f,0x97,0x2f,0x33,0xaa,0xb7,0x9e -,0x29,0x2f,0x9e,0x9e,0x91,0x9e,0xae,0x9a,0x9f,0xa4,0x3d,0x26,0x2d,0x26,0x2a,0x1f,0x16,0x21,0x23,0x12,0xbd,0xae,0xa8,0xc8,0x1e,0xdf,0xce,0xa2,0xa2,0x3d,0xb4,0xa0 -,0xb1,0xac,0x2d,0x37,0xa6,0x9b,0x96,0xbd,0x3e,0x30,0x1d,0x1e,0x1b,0x11,0x1f,0x14,0x24,0x95,0x92,0x8b,0x9b,0xb8,0xb8,0x35,0x3b,0x24,0x19,0xde,0xa7,0xac,0xb3,0x27 -,0x2c,0x4a,0xd4,0xc8,0x32,0x5c,0xba,0xda,0x47,0x35,0xce,0xad,0x2e,0xaa,0x9f,0xa1,0xa0,0x28,0x2b,0x23,0x21,0x2e,0x1d,0x2d,0xa1,0x9f,0x9a,0xb4,0x2d,0x4e,0x7e,0xb1 -,0xb4,0xd7,0xa8,0xaa,0x59,0x27,0x0f,0x1c,0x10,0x13,0xac,0xa9,0x93,0x99,0xb9,0xa4,0xba,0xbb,0x52,0x21,0xbc,0xa3,0xa4,0x9c,0xc4,0xbb,0xbb,0x3a,0x20,0x12,0x14,0x1c -,0x2a,0x31,0x29,0x2c,0xef,0x23,0xb1,0x95,0x9b,0x92,0xb0,0xb8,0xae,0xdd,0xb0,0x38,0x5a,0x9c,0xab,0xaa,0x5e,0x23,0x4a,0x42,0x5f,0x32,0x1f,0x22,0x22,0x1d,0x1e,0x15 -,0x20,0x1c,0x19,0x9a,0x98,0x8c,0x8d,0x9a,0x91,0xa7,0xb3,0xde,0x21,0xbd,0xb4,0xc6,0xb2,0x34,0x64,0x55,0x30,0x29,0x1b,0x1a,0x1b,0x16,0x1c,0x18,0x22,0xbc,0x2f,0x9a -,0x8d,0x93,0x94,0x51,0xdd,0xb2,0x3f,0xcc,0x2e,0x54,0x99,0xa2,0x9e,0xab,0xe8,0xab,0xd5,0x47,0x3b,0x2b,0xdd,0x2c,0x1f,0x1a,0x0c,0x14,0x0b,0x0b,0x43,0xc3,0x98,0x9c -,0xa8,0x91,0x98,0x9a,0xa2,0xbb,0x97,0x95,0x9a,0x99,0xa9,0x9c,0xa2,0x7e,0x21,0x0f,0x13,0x12,0x0e,0x0e,0x0b,0x0f,0x1a,0x0f,0x3c,0xa5,0x9c,0x91,0xa1,0x9a,0x99,0xa0 -,0x9f,0xb7,0xa5,0x8f,0x99,0x99,0xa8,0xbf,0xb0,0x49,0x3a,0x23,0x1f,0x27,0x1c,0x17,0x15,0x0c,0x17,0x0e,0x0d,0x4d,0x5c,0x9f,0x9f,0xa8,0x92,0x9a,0x99,0x9e,0xcc,0x98 -,0x99,0x9c,0x99,0xae,0xa1,0xa8,0xbd,0x38,0x18,0x18,0x17,0x12,0x14,0x0f,0x12,0x29,0x1c,0xc2,0x9a,0xa2,0x9e,0x4f,0x5a,0xae,0x69,0xb2,0x5f,0x43,0x9c,0xa6,0x9e,0x9d -,0xaa,0x99,0x9f,0xb2,0xda,0x2f,0xd8,0xe2,0x2d,0x2e,0x15,0x18,0x14,0x0a,0x24,0x24,0x35,0xd0,0x28,0xb4,0xb6,0xcb,0xb4,0x3d,0xa1,0x91,0x97,0x8f,0x99,0x98,0x91,0x9d -,0xad,0x30,0x1f,0x26,0x1c,0x19,0x16,0x0e,0x19,0x0e,0x1a,0xb5,0xcc,0x9f,0xba,0xc6,0xa8,0xcf,0xcc,0x45,0x32,0xa1,0x9f,0xa1,0x9e,0xbd,0xa6,0xa0,0xab,0xb3,0x43,0xe9 -,0xb9,0x38,0x4a,0x1a,0x1c,0x1e,0x11,0x4d,0x3e,0x41,0xd0,0x33,0xad,0xaa,0xca,0xef,0x1d,0x35,0xad,0xb5,0xa4,0xb6,0xaf,0x9b,0x9e,0xa3,0xcb,0x2e,0xc9,0x3f,0x43,0x2f -,0x18,0x2d,0x1c,0x28,0xa2,0xae,0x9c,0xad,0x49,0xb1,0x34,0x2e,0x24,0x16,0x3d,0xf6,0x55,0xb8,0x2e,0xc6,0xaa,0xae,0xa5,0xc3,0xa8,0x99,0x9d,0x9d,0xbe,0x28,0x2d,0x14 -,0x2f,0xbe,0x36,0x58,0x1e,0x22,0x43,0x2d,0x38,0x29,0x29,0xa8,0xaf,0xa3,0xa8,0xbb,0x9c,0x9b,0x9d,0xab,0xf5,0xdf,0x76,0x2e,0x2d,0x18,0x1e,0x1f,0x18,0xd2,0xd3,0xbe -,0xac,0xcf,0xaa,0xab,0xb5,0xb5,0x3c,0xc9,0xab,0xb7,0xb1,0xde,0x2c,0x4e,0x42,0x38,0x2c,0x21,0x45,0xc4,0xb2,0xba,0x27,0x2d,0x26,0x22,0xa8,0xb2,0xab,0xae,0xb4,0xa2 -,0xa5,0xaf,0xc0,0x35,0x3d,0xb5,0xbf,0xa9,0xf5,0x2c,0x36,0x2c,0x34,0x31,0x2a,0x35,0x2c,0x31,0x32,0x1f,0x38,0x2c,0x3c,0x9f,0x9b,0x99,0x9d,0xb3,0xaa,0xa8,0xb4,0xaa -,0x49,0xdf,0xbb,0x68,0x4c,0x25,0x1b,0x31,0x31,0x2f,0x2a,0x21,0x45,0xbc,0xaf,0xad,0x40,0x46,0x36,0x28,0xaf,0xb7,0xb8,0xd1,0x30,0x57,0xbc,0xae,0xab,0x4d,0x78,0xa4 -,0x9d,0x99,0xa0,0xc8,0xcc,0xe7,0x3f,0x46,0x29,0x27,0x29,0x1f,0x1e,0x16,0x17,0x19,0x16,0x35,0xb4,0xa9,0x9f,0xa7,0xa6,0x9d,0x9c,0x94,0x98,0x9a,0x96,0x9a,0xa3,0xbf -,0x27,0x20,0x1d,0x1d,0x21,0x21,0x23,0x29,0x23,0x1f,0x1a,0x16,0x20,0x1d,0xfb,0xa6,0xa3,0x9f,0xb8,0xbf,0xa2,0x9c,0x96,0x9c,0xa8,0x9c,0x9d,0x9b,0xa5,0x59,0x2d,0x36 -,0x2b,0x2f,0x26,0x1f,0x1f,0x1a,0x1d,0x1a,0x18,0x1d,0x23,0x28,0xad,0xa3,0xa1,0xac,0xc7,0xb5,0xa2,0x9d,0x97,0x9f,0xa4,0x9e,0xa9,0xa4,0xc7,0x46,0x31,0x2b,0x37,0xf3 -,0x3b,0x3f,0x2e,0x29,0x27,0x20,0x1e,0x2b,0x26,0x2c,0x3f,0x26,0x2c,0x22,0x2c,0xc7,0xab,0xa3,0x8f,0x95,0x95,0x91,0x95,0x92,0xa0,0xaf,0xc1,0xfa,0xc0,0x2e,0x22,0x16 -,0x18,0x1d,0x15,0x19,0x13,0x1a,0x18,0x21,0x34,0xe3,0xe1,0xbd,0xa7,0xa3,0x98,0x96,0x8f,0x96,0x99,0xa5,0xa3,0xa0,0xaa,0xbb,0x2e,0x4a,0x43,0x38,0x22,0x1e,0x20,0x26 -,0x2b,0x24,0x25,0x1f,0x1e,0x17,0x29,0x36,0xda,0xbe,0xd4,0xaa,0xa6,0x9f,0x99,0x9f,0xa2,0xa1,0xa5,0x9a,0x9e,0xa4,0x63,0x3b,0x28,0x2a,0x22,0x1f,0x27,0x2e,0x34,0x22 -,0x2e,0x1e,0x1e,0x19,0x21,0x43,0x6b,0xcf,0xc3,0xd8,0xad,0xa3,0xa2,0xa0,0xaa,0x9e,0x9d,0x9a,0x9e,0xa0,0xaf,0xc7,0x5b,0x4c,0x45,0x3d,0x2f,0x25,0x26,0x1f,0x1b,0x13 -,0x10,0x13,0x1a,0x29,0x34,0xe0,0xc6,0xad,0x9f,0x9e,0x97,0x97,0x97,0x96,0x95,0x9c,0x9e,0xad,0xc5,0x3e,0x2a,0x23,0x21,0x24,0x24,0x29,0x20,0x26,0x1e,0x20,0x21,0x20 -,0x21,0x30,0xae,0xb2,0xae,0xc9,0x57,0xaf,0xae,0xa2,0x9e,0xa7,0xa6,0xa8,0xad,0x9f,0xac,0xbb,0xbb,0x69,0xc9,0x68,0x39,0x2d,0x27,0x23,0x25,0x1e,0x20,0x1c,0x1d,0x1b -,0x2b,0xeb,0xc7,0xb5,0x6f,0xbb,0xaa,0x9f,0x99,0x9e,0xa5,0xa0,0xad,0xa2,0xae,0xa6,0xac,0xc1,0xf4,0x2f,0x35,0x29,0x2d,0x2d,0x2a,0x26,0x22,0x1a,0x1d,0x1c,0x22,0x53 -,0x33,0x3f,0x46,0xe3,0xa2,0xa3,0x9d,0x9d,0xa6,0x9a,0x97,0x9a,0x97,0xa4,0xb9,0xbe,0x33,0x2b,0x1d,0x18,0x21,0x1f,0x2a,0x28,0x1c,0x1c,0x1e,0x21,0x21,0xc2,0xca,0xab -,0xae,0xb5,0xa5,0xac,0xa3,0xa6,0xa5,0xa2,0x9c,0x9e,0x9e,0xca,0x75,0x41,0x37,0x30,0x36,0x35,0x33,0x42,0x56,0x37,0x28,0x20,0x1d,0x1d,0x15,0x3c,0x2d,0x44,0x5d,0x34 -,0xb7,0xa2,0x9c,0x94,0x9b,0x9d,0x97,0x9d,0x9a,0xaa,0xb6,0xdd,0x3b,0x2d,0x2c,0x1f,0x2f,0x25,0x2b,0x22,0x1c,0x1b,0x1f,0x18,0x20,0xe2,0x31,0xaf,0x3c,0xba,0x9c,0x9d -,0x98,0x9d,0xb1,0x98,0x99,0x9e,0xa0,0xcd,0xe3,0xe7,0x32,0x35,0x25,0x2c,0x37,0x2c,0x28,0x1e,0x18,0x1c,0x1a,0x16,0x5a,0x27,0xc2,0xd2,0xc9,0x9b,0x9c,0x99,0x97,0xa8 -,0x9b,0x99,0xa5,0x9e,0xc8,0xe0,0x59,0x25,0x28,0x22,0x29,0x3a,0x2b,0x2f,0x28,0x1e,0x26,0x1d,0x1b,0xc9,0x30,0xcf,0x5d,0x41,0xa1,0xa6,0x9e,0x9c,0xb1,0x9d,0x9a,0xa8 -,0x9e,0x61,0xdf,0xbd,0x3e,0xc4,0x36,0x41,0xca,0x47,0x39,0x23,0x11,0x17,0x10,0x14,0x4f,0x23,0x5d,0x3d,0x3f,0x9f,0xa6,0x98,0x95,0xa2,0x96,0x98,0xa3,0x99,0xd1,0xbf -,0xdc,0x31,0x4e,0x29,0x34,0x32,0x2a,0x25,0x1d,0x15,0x1d,0x13,0x1d,0xdc,0x34,0xb7,0xe0,0xb9,0x99,0xa7,0x9b,0x9e,0xb9,0x97,0xa2,0xa4,0xab,0x4f,0xb9,0x5f,0x50,0x46 -,0x2b,0x5e,0x44,0x2f,0x2a,0x1b,0x19,0x1d,0x10,0x28,0x5c,0x56,0xa9,0x49,0xa8,0x9d,0xab,0x9a,0xae,0xae,0x9a,0xab,0xa0,0xb8,0xdb,0xb4,0x33,0x41,0x2b,0x29,0x6b,0x46 -,0x3a,0x2d,0x1a,0x1f,0x1e,0x17,0xe3,0x3c,0xcd,0xb3,0x43,0x9d,0x9f,0xaf,0xa4,0x41,0xaf,0x9f,0xb3,0xa4,0x4e,0xce,0xaf,0x4f,0xc5,0x32,0x3f,0xb8,0x58,0xcf,0x2b,0x1b -,0x1d,0x11,0x0f,0x34,0x37,0xb5,0xb5,0x57,0x9d,0x9e,0x9f,0x9c,0xe3,0xa4,0x9e,0xac,0xa5,0x3f,0x6d,0xce,0x35,0x4a,0x23,0x37,0xcc,0x3b,0x4d,0x22,0x19,0x20,0x17,0x15 -,0xc2,0xcf,0xa6,0xa4,0xbf,0x96,0x9c,0x9f,0x9f,0x34,0xae,0xad,0x68,0xc2,0x27,0x4a,0xe4,0x40,0xdd,0x2a,0xd9,0xbc,0x45,0x50,0x24,0x1f,0x24,0x18,0x14,0x6c,0xc6,0xa3 -,0xa2,0xaf,0x98,0x9f,0xa3,0xa7,0x3c,0xb2,0xab,0x79,0xc8,0x2f,0x5a,0xd3,0x32,0x43,0x25,0xec,0xb4,0x47,0x44,0x20,0x1c,0x26,0x1b,0x18,0xb9,0xbb,0xa4,0xa4,0xb3,0x97 -,0xa1,0xac,0xad,0x2e,0xb0,0xa8,0xd9,0xc2,0x2a,0x51,0xdf,0x40,0xcd,0x2e,0xb9,0xaf,0x60,0x3f,0x1d,0x1a,0x1d,0x19,0x14,0xc8,0xbd,0xa7,0xa6,0xb9,0x97,0x9a,0x9f,0xa4 -,0x3c,0xb4,0xa6,0xcb,0xbf,0x2d,0x45,0xcf,0x3a,0x3e,0x25,0x40,0xbb,0x3c,0x32,0x1f,0x1a,0x22,0x1c,0x12,0xc6,0xaf,0x9f,0x9d,0xb3,0x95,0x97,0x9d,0xa2,0x30,0xdd,0xaf -,0x52,0xbe,0x2a,0x49,0xbd,0x3e,0x5b,0x25,0x48,0xba,0x46,0x4d,0x21,0x1e,0x1d,0x19,0x0d,0x2c,0xa8,0xa2,0x96,0xaf,0x9c,0x95,0xa2,0x9d,0x3f,0x5e,0xa4,0xeb,0xad,0x37 -,0x3d,0xbe,0x2f,0x3d,0x25,0x3a,0xb5,0x42,0x4c,0x22,0x1c,0x1e,0x1a,0x0e,0x22,0xa9,0xa1,0x95,0xad,0xa1,0x96,0xa2,0x9e,0x5b,0x3d,0xa1,0xbd,0xb2,0x52,0x32,0xbb,0x4c -,0x48,0x39,0x36,0xb9,0x3f,0x38,0x22,0x19,0x1b,0x1a,0x0e,0x19,0xae,0xa5,0x96,0xa9,0xa7,0x92,0x9d,0x9a,0xbf,0x30,0x9e,0xb0,0xaf,0xcd,0x2c,0xc3,0x41,0x34,0x34,0x29 -,0xc7,0x4d,0x34,0x25,0x19,0x19,0x1c,0x11,0x17,0xab,0x9f,0x94,0xa6,0xad,0x96,0x9f,0x9c,0xc6,0x2b,0xa1,0xa8,0xb3,0xd7,0x2a,0xd7,0xc7,0x47,0x53,0x2c,0xd0,0xdd,0x30 -,0x25,0x17,0x18,0x1d,0x14,0x12,0xb6,0x9f,0x98,0xa5,0xcf,0x99,0x9c,0x9c,0xae,0x2a,0xa3,0x9f,0xaf,0xb4,0x2f,0xc5,0xb6,0x4c,0x4f,0x29,0xe2,0xd5,0x34,0x26,0x18,0x18 -,0x1a,0x10,0x0d,0xd2,0xa5,0x9a,0xa0,0xf3,0x98,0x9c,0x9d,0xae,0x27,0xa2,0x9c,0xa8,0xa9,0x44,0xc1,0xb3,0x49,0x54,0x33,0xcb,0xc6,0x2e,0x1f,0x15,0x14,0x17,0x0d,0x0f -,0xbe,0xa7,0x98,0xa7,0xd5,0x97,0x9d,0x9c,0xaf,0x35,0x9b,0x9a,0xa8,0xaf,0x33,0xda,0xb8,0x48,0x5b,0x37,0xcd,0xea,0x27,0x1f,0x16,0x15,0x19,0x0d,0x16,0xb0,0xa6,0x98 -,0xb6,0xc1,0x97,0xa0,0x9d,0xd8,0x2c,0x9c,0xa4,0xaa,0xad,0x40,0xaa,0xae,0xd5,0x49,0x2e,0xc1,0x47,0x27,0x1d,0x14,0x17,0x1a,0x0e,0x1d,0xb0,0xa6,0x99,0xbe,0xac,0x98 -,0xa9,0xa4,0x3d,0x34,0x9a,0xa6,0xaa,0xb5,0x3b,0xa6,0xae,0xc5,0x4a,0x2e,0xba,0x4a,0x29,0x20,0x15,0x17,0x19,0x0d,0x25,0xaf,0xa3,0x9c,0x6d,0xa3,0x9a,0xaa,0xa3,0x38 -,0x6b,0x9a,0xab,0xaa,0xbe,0xec,0xa2,0xb5,0xd6,0x3a,0x36,0xbb,0x36,0x1f,0x1c,0x16,0x19,0x1b,0x0e,0x31,0xac,0xa4,0x9f,0x5e,0x9c,0x99,0xa9,0xa8,0x31,0xb9,0x98,0xae -,0xb4,0x41,0x64,0xa7,0xcd,0x5c,0x34,0x43,0xb7,0x31,0x20,0x1e,0x1a,0x1d,0x16,0x0f,0x5d,0xa6,0x9c,0xa5,0xf3,0x9b,0x9e,0xa8,0xb6,0x2a,0xba,0xa1,0xbc,0xc1,0x52,0xb2 -,0xa6,0xc9,0x3d,0x2e,0x58,0xba,0x37,0x21,0x1d,0x18,0x21,0x16,0x19,0xb3,0xae,0x9d,0xb2,0xb7,0x96,0xa4,0xa5,0xeb,0x2c,0xa9,0xac,0xc9,0xdd,0x50,0xa9,0xad,0xc8,0x3d -,0x2f,0xec,0x4f,0x31,0x28,0x1d,0x19,0x1c,0x10,0x28,0xa8,0xab,0x9e,0xce,0xa6,0x97,0xaa,0xa9,0x43,0x42,0x9e,0xab,0xca,0xce,0xf5,0xa8,0xbc,0x40,0x32,0x2f,0xc7,0x44 -,0x28,0x26,0x1a,0x1b,0x1b,0x10,0x6b,0xa4,0xa6,0x9f,0x4d,0x9e,0x99,0xad,0xb1,0x2c,0xcd,0x9c,0xaa,0xe5,0x3a,0x4c,0xba,0xd1,0x5a,0x3a,0x56,0xb9,0x3e,0x2b,0x26,0x1b -,0x1e,0x19,0x12,0xd9,0xaa,0x9e,0x9e,0x5a,0x9e,0x9d,0xaf,0xb1,0x2e,0xc2,0x9f,0xb3,0xbb,0x49,0xe2,0xb0,0x7b,0x46,0x2e,0x3b,0xb3,0x3b,0x27,0x20,0x16,0x22,0x1c,0x17 -,0xb7,0xac,0xa6,0xa8,0xe4,0x99,0x9d,0xab,0xbb,0x30,0xb6,0xa0,0xae,0xcb,0x41,0xca,0xb5,0x60,0x3d,0x2b,0xee,0xb6,0x34,0x25,0x20,0x1a,0x22,0x17,0x1c,0xab,0xaf,0xa1 -,0xaf,0xb8,0x99,0xa3,0xaf,0xc9,0x40,0xa9,0xab,0xb7,0x68,0x42,0xb8,0xa7,0xb9,0x31,0x2c,0x53,0xde,0x2f,0x1f,0x1e,0x1b,0x23,0x19,0x17,0xa9,0xa8,0xa4,0xae,0xdb,0x98 -,0x9b,0xac,0xc0,0x33,0xa8,0xa7,0xfc,0x67,0x3a,0xaf,0xae,0x70,0x4b,0x2e,0xdf,0xd9,0x2b,0x26,0x27,0x1c,0x21,0x17,0x17,0xad,0xad,0xa5,0xac,0xf6,0x9c,0x9e,0xaa,0xba -,0x2c,0xa9,0x9e,0xbb,0x66,0xca,0xba,0xa6,0x45,0x58,0x30,0xdd,0xc8,0x2c,0x1f,0x3c,0x4f,0x24,0x11,0x0f,0x9c,0xaf,0x96,0x2f,0xac,0x18,0x0a,0x13,0x12,0xab,0x23,0x97 -,0x3e,0x2d,0x8e,0x90,0x8f,0x92,0x9a,0xad,0x92,0x8a,0x34,0xb7,0x90,0x0f,0xbc,0x16,0x03,0x87,0x89,0x94,0x97,0xab,0xc1,0xae,0x19,0x0e,0x07,0x09,0x0b,0x0a,0x08,0x07 -,0x0d,0x0d,0x17,0x06,0x1b,0x1b,0x0e,0x1c,0x2f,0x33,0x27,0x39,0x26,0x31,0x93,0x8b,0x8b,0x8e,0x8d,0x84,0x86,0x83,0x8a,0x8c,0x83,0x81,0x83,0x82,0x8b,0x84,0x8d,0x4e -,0xa5,0x94,0x99,0x0e,0x19,0x15,0x08,0x0b,0x03,0x01,0x03,0x04,0x15,0x27,0x08,0x0b,0x02,0x1a,0x13,0x00,0x05,0x0c,0x35,0x19,0x40,0x2c,0x67,0x23,0xc8,0x92,0x99,0x86 -,0x8a,0x97,0x93,0x86,0x8c,0x8e,0x96,0x8d,0x89,0x83,0x88,0x87,0x89,0x89,0x8c,0x99,0x9b,0x42,0x8f,0x9e,0x36,0x1b,0x19,0x1d,0x1c,0x0f,0x07,0x06,0x0c,0x09,0x05,0x0b -,0x04,0x04,0x03,0x02,0x04,0x1a,0x1d,0x1b,0xb7,0x30,0x8f,0x97,0x9e,0x8f,0xa3,0x95,0x8d,0x95,0xa3,0x95,0x95,0x90,0x94,0x8d,0x8a,0x90,0x8a,0x8e,0x9c,0x90,0x8f,0x87 -,0x3d,0xa8,0x8b,0x93,0x89,0x2c,0xde,0x9f,0xaf,0x10,0x04,0x13,0x12,0x16,0x04,0x0b,0x05,0x0e,0x1b,0x03,0x10,0x08,0x0d,0x03,0x05,0x08,0x27,0x12,0x17,0x15,0x0c,0x8b -,0x9b,0x94,0x91,0x8b,0x80,0x89,0x8f,0x8d,0x8a,0x86,0x81,0x8b,0x8e,0x93,0x8c,0x89,0xa4,0xab,0x3d,0xa7,0x33,0x37,0x19,0x18,0x1f,0x10,0x0e,0x06,0xaa,0x4b,0x3e,0x2b -,0x03,0x20,0x33,0x0e,0x0a,0x06,0x09,0x0b,0x23,0x23,0x50,0x25,0x17,0x04,0x18,0xa9,0xe1,0x8e,0xc8,0xb4,0xa3,0xae,0x1e,0x16,0x95,0x81,0x8b,0xa5,0x8e,0x84,0x87,0x9c -,0x45,0xaf,0x8e,0x80,0x81,0x90,0x8b,0x89,0x98,0xae,0x28,0x5d,0x17,0x19,0x16,0x06,0x06,0x04,0x07,0x03,0x06,0x05,0x1f,0x16,0x13,0x3c,0x33,0x19,0x04,0x0c,0x10,0x10 -,0x90,0x92,0xbe,0x92,0xb8,0x9b,0xaf,0xcf,0x9d,0x9a,0xa9,0xae,0x9a,0x8d,0x87,0x36,0x9e,0x9b,0x9d,0x85,0x87,0x87,0x8a,0x23,0x3a,0x35,0xc4,0x8f,0x1f,0xa4,0x8a,0x8c -,0x2e,0x98,0xc3,0x1f,0x0c,0x0e,0x23,0x04,0x2f,0x0e,0x03,0x0e,0x01,0x06,0x02,0x0a,0x9c,0x15,0x20,0x0e,0x19,0xa9,0x48,0x13,0x1f,0xa7,0x9a,0x85,0x88,0x85,0x91,0x9b -,0x24,0x4f,0x96,0x95,0x80,0x8a,0xba,0xa9,0x91,0xbf,0xb4,0x25,0x39,0x80,0x8a,0x8f,0x1a,0x2b,0x88,0x9e,0x08,0x11,0x1f,0x8e,0x9f,0x44,0xb0,0x0e,0x19,0x03,0x07,0x0b -,0x15,0x0a,0x0f,0x39,0x15,0x06,0x08,0x0b,0x08,0x0c,0x8b,0x95,0xab,0x9d,0x0f,0x9e,0x20,0x31,0x8d,0x8e,0x80,0x99,0x8e,0x89,0x82,0x90,0x1e,0x9e,0x1e,0x8c,0x8d,0x91 -,0x8e,0x94,0xa2,0x08,0xb5,0x18,0x19,0x83,0x94,0x8d,0xa1,0x46,0x4b,0x0c,0x13,0x0f,0x3f,0x49,0xa6,0x18,0x0d,0x1e,0x0f,0x05,0x07,0x08,0x09,0x25,0x11,0x1a,0x0d,0x0f -,0x0c,0x1e,0x06,0x3c,0x86,0x85,0x8b,0xbc,0x8e,0x9e,0xa6,0xb3,0x98,0x85,0x81,0x84,0x87,0x8e,0x8e,0x2c,0x5c,0xd3,0x4d,0xac,0x9d,0x96,0xb8,0x0f,0x0d,0x0e,0x21,0x08 -,0x2d,0x88,0x2c,0x99,0x1f,0xc6,0x13,0x0d,0x10,0x19,0xae,0xa7,0x8f,0x14,0x3a,0x38,0x09,0x0a,0x0b,0x1a,0x26,0x32,0x1a,0x1c,0x2a,0x15,0x13,0x09,0x16,0x86,0x8b,0x93 -,0x9c,0xee,0x8d,0xa3,0x30,0x9f,0x93,0x8c,0x80,0x89,0x8a,0x8e,0xa6,0x54,0x97,0x98,0x9c,0x98,0x9e,0x9c,0x25,0x31,0x0d,0x13,0x07,0x0f,0x96,0xd6,0xab,0x11,0x04,0x15 -,0x04,0x0a,0x0c,0x2c,0xaf,0xa6,0x51,0x13,0x37,0x0c,0x0a,0x0c,0xb9,0x3b,0x3a,0x8f,0x45,0xc3,0xce,0x1b,0x3c,0x41,0x9c,0x83,0x87,0x89,0x4b,0x8f,0x97,0x28,0x9c,0xa8 -,0x88,0x84,0x87,0xd3,0xbe,0xa6,0x21,0x2d,0x26,0x5c,0x2f,0x4b,0xcd,0x13,0x12,0x0f,0x0e,0x20,0x0d,0x9b,0x9d,0x3d,0xa1,0x08,0xcb,0x22,0x09,0x14,0x0c,0x8e,0xa1,0xa1 -,0x43,0x1c,0x1a,0x13,0x09,0x1c,0xae,0x3d,0xa7,0x1c,0x59,0x2b,0x17,0x29,0x9e,0x0d,0x88,0x85,0x93,0x91,0xc4,0x88,0xba,0x49,0xc2,0x8e,0x81,0x83,0x8b,0x98,0xa9,0x2c -,0x46,0x27,0x2e,0x95,0xbb,0x2c,0x29,0x08,0x09,0x0e,0x0f,0x12,0x01,0x88,0xea,0x36,0x31,0x00,0x1c,0x15,0x0a,0x1b,0xa4,0x9f,0x8e,0xed,0x1e,0xb6,0x6c,0x2c,0xcd,0x21 -,0x9f,0x9e,0xa2,0x98,0xed,0x9d,0x18,0x2f,0x2b,0xea,0x80,0x89,0x8c,0xa8,0x32,0x9c,0xa0,0x20,0x3e,0x89,0x86,0x94,0x9d,0x2c,0x49,0x0b,0x18,0x17,0x1b,0xbd,0x28,0xb2 -,0x1d,0x0f,0x10,0x0c,0x08,0x16,0x14,0x8c,0x99,0x14,0x14,0x11,0x15,0x0d,0x14,0x2d,0x9f,0x89,0x84,0xbf,0x1d,0xde,0x0f,0xa4,0x1e,0xb2,0x88,0x8b,0x94,0xb6,0xdd,0x3c -,0x9d,0x2e,0x28,0x0e,0x81,0x89,0x8c,0x3c,0x15,0x29,0xe7,0x4a,0x27,0x87,0x90,0x8c,0xa8,0x3f,0x19,0x11,0x0d,0x1f,0x4a,0x47,0xc7,0x1c,0x15,0x1f,0x17,0x06,0x0f,0x14 -,0x12,0x8b,0x85,0xc1,0x0e,0x0e,0x20,0x26,0x11,0x2a,0xa5,0x8e,0x87,0x25,0x17,0x3d,0x0f,0x34,0x20,0xd1,0x84,0x93,0x8a,0xc3,0x2c,0xad,0x3d,0x9f,0xb7,0x24,0x8b,0x81 -,0x8f,0xa4,0x0e,0x4c,0x97,0x16,0x33,0xb6,0x93,0x81,0x40,0x07,0x17,0x0c,0x0a,0x15,0x0f,0x2e,0xf6,0x1e,0x02,0x09,0x53,0x10,0x07,0x25,0x00,0xae,0x80,0x9d,0x9c,0x14 -,0x48,0x9c,0x9d,0x35,0x93,0x83,0x82,0x87,0x12,0x31,0xb1,0x2a,0x9e,0xc6,0x95,0x8d,0x96,0x34,0x17,0x1c,0x34,0x10,0x0d,0x19,0x0d,0x80,0x99,0x2f,0x10,0x04,0xb8,0xbd -,0x0c,0x61,0x9a,0x8d,0x81,0x10,0x0e,0x2c,0x29,0x2c,0x18,0xbe,0x86,0xaa,0x42,0x1e,0x14,0x22,0x10,0x11,0x3b,0x09,0x98,0x83,0xaa,0xe0,0x03,0x1f,0x26,0x45,0x16,0xa8 -,0x88,0x87,0xa5,0x0b,0x2c,0xe8,0xb3,0x2e,0x96,0x8a,0x90,0x95,0xa6,0x2b,0x47,0xb9,0x2f,0x58,0x7e,0xbd,0x83,0x8b,0xc7,0x16,0x0f,0xcd,0x2c,0x0f,0x20,0x9f,0xa4,0xaf -,0x0b,0x13,0x0b,0x26,0x2f,0x11,0x22,0x26,0x9e,0xbd,0x17,0x18,0x2d,0x3d,0xcf,0x24,0x23,0xaa,0x80,0x94,0x98,0x11,0x14,0x9f,0xad,0xb6,0xc6,0x8e,0x8a,0x92,0x29,0x18 -,0x4a,0x9c,0xc7,0x5c,0xb0,0x9e,0xa8,0xf6,0x12,0x41,0x10,0x21,0x13,0x14,0x13,0x4e,0x81,0xad,0x39,0x0c,0x28,0x42,0x30,0x1f,0x9c,0x9b,0x8f,0xd6,0x10,0x1c,0x39,0xa4 -,0x2a,0x4a,0xb6,0xa6,0xb8,0xaa,0x2e,0x2b,0x2a,0x55,0x1b,0x37,0x0a,0xa0,0x80,0xaf,0x9c,0x0a,0x15,0xce,0x19,0x1b,0x9c,0x89,0x89,0xab,0x16,0x22,0xe6,0x57,0xc2,0x4d -,0xa2,0x95,0x9e,0xc3,0x16,0x23,0x14,0x44,0x26,0x24,0x10,0xa8,0x80,0xbc,0xb7,0x0c,0x13,0x37,0x29,0xdb,0x9e,0x9a,0x94,0x95,0x0c,0x19,0x25,0x4d,0xc7,0x3d,0x35,0x9f -,0xa1,0x2c,0x1a,0x1f,0x1b,0x1e,0x1f,0x2f,0x2b,0x5c,0x80,0x9a,0xb3,0x17,0x1b,0xab,0xb8,0x3c,0xa0,0x8e,0x86,0x8c,0x1a,0x1d,0x29,0xb1,0x9f,0xab,0xe9,0xb3,0xb7,0x68 -,0x19,0x29,0x19,0x1f,0x1c,0x25,0x1a,0x32,0x80,0x9b,0xbe,0x11,0x0a,0x30,0xae,0x2f,0xb7,0xa5,0x98,0x88,0x2e,0x14,0x18,0x35,0xa0,0x6b,0x1c,0xac,0x9d,0xc9,0x17,0x19 -,0x22,0x27,0xcc,0x2c,0x1b,0x0f,0x8b,0x8d,0x9e,0x28,0x06,0x27,0xaf,0xc9,0x74,0x9c,0x97,0x8c,0xe6,0x22,0x1e,0xc2,0xb8,0xbb,0x3e,0xcf,0xab,0xb2,0xdb,0x19,0x2d,0x29 -,0xbc,0x19,0x2b,0x0c,0x94,0x85,0xc3,0xbf,0x08,0x26,0xa2,0xf4,0x1e,0xac,0xa0,0x8b,0x96,0x1a,0x22,0x35,0xcc,0x28,0x2f,0xba,0x95,0x9f,0x1f,0x17,0x27,0x4b,0xd1,0x23 -,0x26,0x0a,0x2a,0x81,0x95,0xa4,0x0c,0x0f,0xaf,0xbb,0xf1,0xb6,0xa8,0x8c,0x8a,0x1a,0x1c,0x24,0xa9,0x76,0x1e,0xf4,0xa8,0xa4,0xac,0x22,0x1a,0x2b,0xbc,0x2e,0x20,0x1c -,0x12,0x86,0x8c,0x98,0x20,0x0a,0xc0,0xab,0x4a,0x24,0xa1,0x8d,0x8a,0x4d,0x1b,0x20,0x26,0x63,0x2d,0x54,0x9b,0x97,0xa6,0x1c,0x15,0x1a,0x2f,0xb6,0x1b,0x1b,0x0f,0x98 -,0x84,0x99,0xf0,0x09,0x13,0xa8,0xcf,0x5d,0x94,0x9f,0x8a,0xa9,0x14,0x25,0x2f,0xce,0x3f,0xd2,0x99,0x96,0x55,0x1b,0x17,0x25,0x4f,0xb7,0x1a,0x18,0x0b,0xa6,0x80,0x8f -,0xaf,0x06,0x16,0xb4,0xf3,0x3b,0xcd,0xa9,0x8c,0x96,0x16,0x1a,0x23,0x3d,0xba,0xbc,0xaf,0x9a,0xa7,0x4e,0x14,0x1f,0x29,0xc9,0xda,0x24,0x1f,0x2c,0x83,0x8f,0xae,0x19 -,0x0e,0xbd,0xa2,0x48,0xeb,0xaf,0x8e,0x8b,0x17,0x0f,0x17,0xb1,0xb9,0xb3,0xb6,0xa3,0xdb,0x23,0x11,0x1b,0xbe,0x2e,0x4b,0x1d,0x26,0x1c,0x87,0x8f,0xad,0x24,0x12,0xdd -,0x37,0x39,0x45,0x98,0x95,0x8e,0x1b,0x15,0x2c,0xb8,0x9b,0xad,0x27,0x58,0xb4,0xdb,0x2b,0x1b,0x2f,0x2c,0xd5,0x2d,0x34,0x13,0x90,0x8a,0x9f,0x47,0x0f,0x35,0xce,0x32 -,0x28,0xab,0x9b,0x8b,0x5a,0x1b,0x2f,0x4f,0xad,0xb5,0x2c,0x41,0xb1,0xd6,0x2f,0x1f,0x38,0x3d,0x3b,0x2c,0x28,0x0f,0x8d,0x8c,0xae,0x37,0x0d,0x3c,0xad,0x4d,0x26,0xab -,0x9a,0x89,0xbd,0x1b,0x32,0x43,0xad,0xb0,0x38,0x3d,0xa8,0xaa,0x2c,0x1a,0x2c,0xaf,0x29,0x1c,0x18,0x1c,0x84,0x8c,0xbf,0x15,0x0d,0x47,0xb1,0x1e,0x3c,0xb1,0x94,0x8b -,0x33,0x1c,0x3b,0xd5,0xbc,0x2c,0x1f,0xa2,0xa9,0xba,0x22,0x2b,0x41,0x4c,0x18,0x1e,0x16,0x9c,0x82,0xaa,0x4d,0x0c,0x29,0xd3,0xb9,0x46,0x2c,0xa7,0x88,0x8e,0x28,0x17 -,0x17,0xb5,0xad,0x38,0xc4,0xaf,0x7c,0x2f,0x17,0x24,0xbc,0x1d,0x1f,0x15,0xd8,0x81,0x90,0xe8,0x0e,0x1a,0x50,0xdb,0x4a,0xd5,0x9d,0x8c,0x8c,0x1e,0x1c,0x20,0x56,0xb3 -,0x2f,0x4f,0xab,0x9e,0x2e,0x1c,0x28,0x29,0x18,0x21,0x23,0x24,0x83,0x8d,0xc3,0x1c,0x0d,0x26,0x39,0xba,0xcd,0x9d,0x8a,0x8e,0x27,0x13,0x36,0xd0,0x3b,0x25,0xb9,0xa4 -,0xa4,0x33,0x12,0x2f,0xc5,0x28,0x1a,0x13,0x20,0x85,0x88,0xba,0x1e,0x09,0x24,0xb3,0x5b,0x59,0x97,0x87,0x8f,0x1a,0x0f,0x33,0xbe,0xea,0x1b,0x2d,0xa1,0xa6,0x4b,0x1d -,0x1f,0x3a,0x1a,0x22,0x18,0x39,0x82,0x8d,0xab,0x13,0x0b,0x5a,0xaa,0x3d,0x43,0x96,0x88,0x8b,0x22,0x16,0x25,0xc0,0xad,0x1f,0x4e,0xa9,0xa9,0x59,0x27,0x1b,0x25,0x1b -,0x16,0x13,0x99,0x85,0x98,0x3e,0x0d,0x2d,0x33,0x2f,0x32,0xa2,0x88,0x88,0xa9,0x0f,0x1a,0x37,0xbb,0xa6,0x71,0x2a,0x45,0x38,0x2c,0x26,0xd5,0x1f,0x17,0x13,0x21,0x84 -,0x8f,0x9e,0x1b,0x0b,0xda,0xbe,0xe5,0xab,0x95,0x94,0x98,0x39,0x29,0x53,0xa6,0xc4,0x34,0x43,0xe2,0x70,0x24,0x1f,0x23,0xe0,0x1e,0x2d,0x0d,0xa9,0x87,0xb3,0xe8,0x0d -,0x1e,0xe8,0xaf,0xc4,0xa7,0x98,0x94,0xae,0x1f,0x4d,0xa5,0xa7,0x2c,0x29,0xd0,0xc8,0x3f,0x2b,0x18,0x2f,0x28,0x3f,0x17,0x4a,0x85,0x94,0xb8,0x0d,0x18,0x7b,0xcf,0xba -,0xa3,0x8e,0x8d,0xa1,0x1a,0x3e,0xb4,0xdb,0xc1,0xca,0xb8,0x3d,0x16,0x15,0x13,0xda,0xbc,0x2c,0x0f,0x16,0x86,0x92,0x42,0x0e,0x18,0xa5,0x30,0x2b,0x5d,0x8c,0x8a,0x9a -,0x23,0x24,0x9e,0xb6,0xac,0x55,0x2d,0xe1,0x1e,0x1e,0x1f,0xf4,0xd0,0x2b,0x16,0x11,0x88,0x8e,0xa6,0x26,0x0a,0xcf,0x35,0x41,0xa6,0x8f,0x8d,0x96,0x2d,0x10,0xf4,0xab -,0xa6,0xb0,0xfa,0x4d,0x13,0x13,0x1d,0x2c,0xcd,0x43,0x2a,0x0e,0x99,0x8c,0xa4,0x1a,0x0d,0x3f,0x49,0xb2,0xb5,0x8f,0x8b,0x9a,0x21,0x1b,0x46,0x9f,0x9e,0xab,0xb7,0xc5 -,0x25,0x17,0x21,0x18,0x3c,0x36,0x26,0x27,0x89,0x8b,0xdf,0x14,0x09,0x4d,0xb6,0xac,0xcd,0x9c,0x91,0x95,0x27,0x17,0xfd,0xbe,0xaf,0xc6,0xbb,0xab,0x25,0x19,0x12,0x12 -,0x31,0x1e,0x3c,0x45,0x8a,0x8a,0xe1,0x14,0x07,0x29,0x9f,0x9d,0xbb,0x99,0x91,0x9a,0x39,0x19,0xbe,0x9f,0xa3,0x9f,0xcd,0xc4,0x36,0x10,0x1c,0x14,0x36,0xc0,0x5a,0x1f -,0x54,0x8b,0xa6,0x3a,0x0e,0x11,0x66,0xab,0xa9,0x9c,0x96,0x9b,0xca,0x15,0x18,0xaf,0x90,0x97,0xab,0x2f,0x26,0x11,0x1c,0x1e,0x4a,0xbf,0x25,0x19,0x4d,0x84,0x96,0x4f -,0x0e,0x14,0x68,0xe9,0xb3,0x9b,0x8d,0x8d,0xaa,0x0f,0x0e,0xc5,0x9c,0x9d,0x9a,0x4f,0xb4,0x1a,0x0f,0x0d,0x1d,0xea,0x69,0x2d,0x3f,0x83,0xa3,0x37,0x0c,0x0f,0xbe,0xc7 -,0xaf,0xad,0x8f,0x8d,0xa3,0x18,0x20,0x47,0xab,0xa8,0xaa,0x68,0x9e,0xcb,0x17,0x0b,0x0b,0x36,0xcd,0x3f,0x2d,0x85,0x90,0xc9,0x0e,0x06,0x3e,0xb9,0xaf,0xae,0x8f,0x8a -,0x9a,0x27,0x1d,0x1d,0xcc,0x9e,0x95,0xba,0xd8,0x2c,0x17,0x1d,0x13,0x37,0x18,0x26,0x1d,0x90,0x84,0xaf,0x23,0x09,0x25,0xdf,0xb6,0xbf,0xa0,0x8a,0x8e,0x68,0x10,0x22 -,0xb7,0xac,0x9b,0x9b,0xef,0x41,0x13,0x0e,0x12,0x3a,0xdf,0x2c,0x16,0x18,0x81,0x9b,0x55,0x1b,0x14,0x67,0x2d,0x4d,0xc9,0x8b,0x8b,0x90,0x23,0x1b,0x4e,0xd7,0xad,0xab -,0xbc,0xb3,0xee,0x36,0x11,0x13,0x3b,0x20,0x1f,0x19,0x88,0x8f,0xad,0x2d,0x08,0x2b,0xd6,0xec,0xac,0xa4,0x97,0x8c,0xad,0x1c,0x21,0x4a,0xac,0xae,0x4b,0xb6,0xf0,0x2e -,0x28,0x15,0x20,0x27,0x21,0x12,0x66,0x82,0x9d,0xb1,0x0f,0x0c,0xc8,0xa1,0xa6,0x54,0x9d,0x99,0x8d,0x27,0x27,0x50,0xaa,0xa9,0x3c,0x50,0xf9,0xb9,0x1d,0x23,0x26,0x35 -,0x1b,0x21,0x0d,0x9d,0x81,0x9b,0x4c,0x0a,0x17,0x58,0xa9,0xb9,0xb1,0x99,0x8e,0x9c,0x1b,0x18,0x3a,0xad,0xaf,0xc5,0x28,0xd5,0xb6,0x2a,0x1c,0x1a,0x3b,0x23,0x1c,0x0e -,0x8c,0x86,0x99,0x3b,0x07,0x20,0xa5,0x9f,0x31,0xae,0x96,0x8c,0x97,0x1d,0x1a,0x55,0x3f,0xb6,0x49,0x67,0xa5,0xb6,0x1b,0x1c,0x20,0x58,0x2d,0x1b,0x0a,0xb1,0x82,0x98 -,0xae,0x0b,0x16,0xe6,0xb1,0x33,0xe2,0x98,0x8f,0x8f,0x38,0x1b,0x29,0x39,0xc1,0xf6,0xae,0xc1,0xa1,0x20,0x25,0x36,0x2e,0x28,0x15,0x14,0x1c,0x81,0x8f,0x96,0x19,0x0c -,0x21,0xdf,0xc0,0x2b,0x97,0x8b,0x88,0x62,0x0d,0x15,0xc4,0xc0,0xe5,0x48,0xcd,0xa4,0xab,0x2e,0x17,0x1d,0x1c,0x13,0x24,0x13,0x8e,0x85,0x98,0x4f,0x09,0x26,0x3e,0x40 -,0x2d,0xa0,0x8c,0x86,0x99,0x10,0x13,0x2d,0x2e,0xc1,0x3e,0xad,0x95,0x9d,0x30,0x10,0x1b,0x1c,0x1c,0x23,0x39,0x1b,0x8a,0x86,0xa8,0x1c,0x06,0x1a,0x76,0x65,0xcb,0x95 -,0x8b,0x8a,0xd6,0x0d,0x1c,0xb4,0x57,0xdd,0x5d,0x9e,0x9b,0xb7,0x26,0x1d,0x16,0x18,0x19,0x1b,0x58,0x1f,0x87,0x88,0x4e,0x17,0x07,0x23,0xb7,0x4a,0xa3,0x95,0x91,0x8f -,0x7e,0x14,0x28,0x3b,0x36,0xad,0xb1,0xaa,0xa9,0x5d,0x2c,0x1d,0x1c,0x22,0x2f,0x1b,0x47,0x1c,0x96,0x86,0xaf,0x39,0x09,0x2d,0x48,0xc1,0xd5,0x9e,0x90,0x8f,0xa9,0x14 -,0x21,0x3c,0xa8,0xa9,0x61,0x49,0xaa,0x4a,0x2d,0x1a,0x3d,0x2d,0x2e,0x1a,0x2b,0x21,0x4a,0x83,0xa2,0x62,0x16,0x10,0xbc,0xa7,0x49,0xad,0xa4,0x93,0x98,0x37,0x2b,0xf7 -,0x42,0x30,0x43,0x2a,0xa6,0xa0,0x4c,0x32,0x20,0x3b,0x3c,0x23,0x1c,0x1c,0x0f,0x9a,0x82,0xa4,0xaa,0x0e,0x10,0x5b,0x4a,0xcd,0xb7,0x8f,0x88,0x99,0x18,0x17,0x3d,0x4f -,0xd0,0x2c,0x32,0x97,0x97,0xda,0x19,0x1f,0x23,0x19,0x1f,0x23,0xc4,0x16,0x99,0x88,0xaf,0x52,0x19,0x27,0xaf,0x2e,0x1d,0x9c,0x95,0x8a,0x95,0x23,0x1c,0x1d,0x2a,0xbf -,0xbb,0xad,0x97,0xb7,0x24,0x17,0x20,0x2a,0x39,0xb7,0x19,0x19,0x0c,0x91,0x82,0xac,0x2d,0x0d,0x25,0xa6,0x5c,0x4f,0x96,0x91,0x96,0x3b,0x1a,0x26,0xcd,0xc7,0xc8,0x3e -,0xc0,0x9f,0xdf,0x1f,0x1f,0x30,0x3f,0x50,0x2e,0x18,0x36,0x1a,0xa8,0x88,0xa7,0xb0,0x20,0x2f,0x2a,0x21,0x3d,0x94,0x8e,0x9c,0xc9,0x18,0x2b,0xae,0xba,0x4c,0x36,0xe7 -,0x9f,0xba,0x23,0x2e,0x27,0x4b,0x34,0x34,0x2b,0xd5,0x15,0x1f,0x87,0x93,0xa4,0x15,0x16,0xc2,0xb2,0x2a,0xd7,0x96,0x8f,0x9d,0x1e,0x2f,0x3a,0x2e,0x4c,0x2b,0xad,0x9d -,0xab,0x29,0x18,0x29,0x41,0xba,0x4e,0x27,0x16,0x0f,0x3f,0x86,0x8c,0x9b,0x1b,0x0f,0x28,0x59,0xc5,0x1e,0x1e,0x1c,0x18,0xf7,0xab,0x1b,0x15,0xbe,0x8b,0x87,0x82,0x87 -,0x8e,0x96,0xa2,0xa8,0xac,0xbb,0x13,0x15,0x11,0x05,0x19,0x14,0x01,0x02,0x09,0x52,0x98,0x8e,0x8f,0x8e,0x85,0x84,0x8e,0x9e,0x8c,0x9f,0xb3,0x36,0x1c,0x38,0xb4,0x2e -,0x05,0x01,0x03,0x14,0x5b,0x4e,0x1a,0x2d,0xa8,0x89,0x89,0x9d,0x8d,0xbb,0xdb,0x29,0x14,0xad,0x98,0xbf,0x1a,0x15,0xb8,0x93,0x1b,0x08,0x0f,0x99,0x88,0x9c,0xa8,0x8e -,0x89,0x95,0xa7,0x23,0x48,0xe7,0x1a,0x01,0x19,0x8c,0x92,0xb3,0x08,0x0f,0x2f,0x0b,0x02,0x0f,0x91,0x83,0xa4,0x3a,0xaf,0x9b,0x93,0x9f,0xac,0xae,0x8d,0x8d,0x9c,0x9e -,0xb6,0x6e,0x16,0x09,0x0d,0x1e,0x09,0x0c,0x31,0x29,0x26,0x11,0x30,0xb6,0x26,0xae,0x8d,0x87,0x85,0x96,0xa7,0x5d,0x6c,0x29,0x1e,0xb8,0xa6,0x9e,0x35,0x0c,0x0b,0xc7 -,0xa8,0x15,0x0b,0xa6,0x87,0x8a,0x8a,0x8f,0x96,0xad,0x18,0x1b,0xcc,0xc2,0x36,0x11,0x23,0x30,0x7d,0x12,0x00,0x00,0x0f,0x8c,0x88,0x8d,0x98,0x8f,0x8d,0x96,0xa3,0xa8 -,0xad,0xb6,0xcd,0x18,0x0f,0xad,0x9e,0x0f,0x05,0x09,0xbb,0x53,0x10,0x14,0xad,0x84,0x91,0xbb,0x9a,0x88,0x8d,0x9b,0xb9,0xa7,0x8f,0x8e,0xcc,0x0d,0x0f,0x27,0x33,0x20 -,0x1a,0x16,0x03,0x08,0x2d,0xae,0x98,0x61,0x3c,0xb0,0xa3,0xaa,0x8d,0x84,0x8d,0xa9,0xd2,0x95,0x9b,0xe8,0x2f,0xb7,0x45,0x31,0x1a,0x08,0x0b,0x12,0x24,0x13,0x0d,0x25 -,0x31,0x22,0xa0,0x9b,0x95,0x94,0x9b,0x98,0xd6,0xdd,0x2d,0xba,0x9a,0x91,0x9d,0x2a,0x0f,0x04,0x0e,0x9e,0x90,0x36,0x74,0x94,0x8a,0x8c,0x94,0xc9,0x2d,0xbe,0x2f,0x21 -,0x93,0x93,0xc5,0x25,0x0e,0x23,0xc2,0x1e,0x09,0x1f,0x8b,0x81,0x8f,0x98,0x8e,0x8c,0x9e,0x9e,0xac,0xb6,0x66,0x1b,0x14,0x0a,0x05,0x03,0x02,0x00,0x03,0x00,0x08,0x0a -,0x0a,0x0b,0x07,0x15,0x11,0x22,0xaf,0x9b,0x8e,0xa4,0x1d,0x23,0xe7,0x9f,0xab,0x2c,0xbc,0xa4,0x8b,0x88,0x8b,0x9c,0x28,0x53,0xa0,0x86,0x86,0x88,0x80,0x82,0x8c,0xa9 -,0xa3,0x91,0xa3,0x4b,0x99,0x8a,0x81,0x90,0x34,0x1e,0x41,0xda,0x23,0x31,0x39,0x9b,0xa0,0x34,0x3a,0xaa,0x9c,0xdd,0x21,0x2c,0x18,0x9f,0x84,0x98,0x1e,0x04,0x08,0x0c -,0x08,0x17,0x2e,0xcb,0x15,0x06,0x08,0x19,0x45,0x0f,0x29,0xab,0x8f,0x97,0x24,0x21,0x3e,0x27,0x1c,0x1a,0x25,0x15,0x08,0x1f,0x27,0x1f,0x0d,0x06,0x05,0x06,0x1e,0x95 -,0x84,0x80,0x87,0x8c,0x97,0x99,0x98,0x9e,0x88,0x85,0xa2,0x2b,0x0c,0x27,0xca,0x1c,0x13,0x0d,0x21,0x28,0x94,0x8c,0x97,0x96,0x99,0x94,0x9f,0x9f,0x9d,0x97,0x8c,0x99 -,0xbe,0x41,0x3b,0x17,0x08,0x0d,0xf2,0xa7,0x1b,0x05,0x05,0x13,0x15,0x1b,0xb4,0x9c,0x9f,0x8e,0xa2,0xbe,0xaa,0xa9,0xa8,0xd9,0x9b,0x8e,0x87,0x86,0x8b,0x8f,0x8f,0x98 -,0x9d,0x96,0x8e,0x88,0x8d,0x9a,0x99,0x90,0xb0,0x19,0x0f,0x18,0x16,0xba,0x9c,0x2d,0x0e,0x01,0x02,0x00,0x02,0x05,0x08,0x0f,0x07,0x00,0x02,0x04,0x0c,0x0e,0x10,0x29 -,0x29,0x31,0x19,0x16,0x15,0x0e,0x14,0x1e,0x1d,0x22,0x99,0x97,0xa0,0xe8,0x69,0xd3,0x5b,0x9d,0x88,0x80,0x80,0x80,0x85,0x8a,0x8f,0x8f,0x95,0x8e,0x8a,0x8f,0xa8,0x4e -,0x22,0x17,0x1b,0x2e,0x1e,0x1f,0x8d,0x8b,0x8e,0x90,0x8b,0x86,0x99,0x98,0x8d,0x88,0x87,0x95,0xa4,0xb9,0x20,0x16,0x07,0x0a,0x17,0x15,0x16,0x0e,0x12,0x0b,0x08,0x10 -,0x1d,0x19,0xa8,0x8f,0x9d,0xc9,0x19,0x20,0x13,0x17,0x1f,0x1f,0xae,0x52,0x18,0x1f,0x15,0x14,0x0e,0x0b,0x0f,0x0f,0x14,0x18,0x2f,0x4d,0xe3,0x5d,0x5c,0x2c,0x9a,0x8c -,0x96,0x8f,0x9c,0x9a,0x24,0x11,0x34,0xa1,0x8a,0x98,0xca,0xc8,0x2f,0x47,0xbb,0x9b,0x91,0xb6,0x3d,0xa7,0x9e,0x9b,0x47,0x2f,0xce,0x1a,0xab,0xab,0x3e,0x36,0x11,0x1c -,0x0d,0x0c,0x2a,0x35,0x9f,0xa2,0x9f,0x8a,0x89,0x85,0x88,0x8c,0x85,0x94,0x9f,0x8e,0x90,0x96,0x4d,0x41,0xad,0x9c,0x81,0x8e,0xab,0xa8,0xa7,0x8b,0x9c,0x94,0x86,0x89 -,0x85,0x96,0xeb,0xaa,0x26,0x12,0x0b,0x09,0x0c,0x03,0x00,0x01,0x00,0x00,0x00,0x01,0x03,0x02,0x11,0x0e,0x11,0x16,0x10,0x22,0x10,0x1b,0x22,0x2e,0xa3,0x40,0x42,0xb8 -,0x24,0x29,0x2d,0x9d,0x8a,0x95,0x9a,0x9e,0xbe,0xb1,0xa5,0x8a,0x87,0x8a,0x80,0x86,0x88,0x91,0xa3,0x9c,0xad,0x9e,0x8f,0x8d,0x86,0x94,0x9f,0x9e,0xe0,0xdf,0x49,0xb4 -,0xa5,0xa0,0x98,0x9a,0xb6,0xd4,0x1e,0x4c,0xcf,0xa8,0x87,0xa3,0xe2,0x24,0x0d,0x0d,0x04,0x0a,0x24,0x27,0x4a,0x1f,0x1c,0x26,0x12,0x1e,0x33,0xb7,0x99,0xbe,0x3e,0x3c -,0x1f,0x13,0x07,0x0b,0x0a,0x0c,0x2a,0x1d,0x11,0x0c,0x08,0x08,0x04,0x07,0x1d,0x47,0x8f,0x8a,0x92,0x89,0x8f,0x97,0xa0,0x98,0x8f,0xb3,0x2a,0x36,0x25,0x1b,0x15,0x0f -,0x1d,0x1f,0x93,0x93,0xa9,0x93,0x99,0x91,0xa6,0xab,0x8c,0x8b,0x8a,0x8f,0x9e,0x93,0xa7,0x2d,0x1a,0x12,0x25,0x1b,0x0e,0x15,0x15,0x10,0x0d,0x0c,0x17,0x1a,0x94,0x87 -,0x95,0x8e,0x9a,0x8f,0x91,0xb6,0x97,0x8c,0x89,0x85,0x8c,0x8a,0x89,0x97,0x8e,0x98,0x99,0x92,0xb4,0xab,0xa6,0xab,0xb8,0x3a,0x37,0x20,0x13,0xa9,0x2e,0x18,0x20,0x09 -,0x0a,0x01,0x01,0x09,0x07,0x05,0x07,0x01,0x05,0x05,0x05,0x07,0x09,0x18,0x11,0x11,0x25,0x1d,0x24,0x21,0x18,0x28,0x19,0x9f,0x94,0x2e,0xbb,0xe3,0xa9,0xa0,0x3c,0x97 -,0x8c,0x8b,0x84,0x84,0x82,0x80,0x87,0x85,0x88,0x87,0x8b,0xa7,0x98,0xaf,0xde,0x30,0x1b,0x2b,0x34,0x19,0x9e,0x9d,0xc5,0x9e,0x5e,0x91,0x90,0x98,0x89,0x8f,0x8c,0x8a -,0x99,0x96,0xaa,0x29,0x23,0x15,0x0e,0x0d,0x0a,0x0b,0x09,0x09,0x0e,0x0e,0x16,0x14,0x0e,0xa6,0xa2,0xaa,0xa2,0x26,0x37,0x1c,0x1a,0x36,0x1f,0x22,0x23,0x14,0x1c,0x1c -,0x0e,0x18,0x0f,0x0d,0x0f,0x0d,0x1a,0x19,0x1a,0x41,0x33,0x48,0x31,0x1e,0x8f,0x95,0x9f,0x95,0xaa,0x99,0xc8,0x21,0x9c,0xa0,0x9f,0x95,0xac,0x9a,0x9b,0xaa,0x93,0x97 -,0x9e,0xa0,0xad,0x96,0x96,0x9f,0xba,0x3e,0x31,0x33,0x13,0x68,0x4e,0x18,0x3e,0x1f,0x2f,0x1b,0x0c,0x29,0x74,0xc4,0x91,0x93,0x8b,0x8a,0x8d,0x86,0x88,0x8c,0x89,0x90 -,0x8c,0x92,0xb1,0x9b,0xad,0x59,0xa5,0x39,0x3d,0x9a,0xc3,0x97,0x93,0x96,0x8f,0x2d,0x33,0xab,0x25,0x2f,0x20,0x16,0x15,0x08,0x07,0x06,0x01,0x02,0x02,0x02,0x04,0x02 -,0x07,0x06,0x03,0x05,0x09,0x08,0x4c,0x64,0x1f,0xa9,0x38,0xab,0x39,0x1a,0xd6,0x2f,0x79,0x9a,0x9d,0x90,0x95,0x94,0x8c,0x96,0x97,0x8f,0x8a,0x85,0x87,0x8f,0x8f,0x8f -,0x9c,0x9f,0xa9,0xab,0x89,0x92,0x98,0x98,0xa7,0x9a,0xc3,0x6d,0x9e,0xa7,0xa8,0x9a,0xa7,0x96,0x94,0x9b,0x9d,0xa2,0xa6,0xa8,0xae,0x9c,0x9f,0x39,0x1b,0x0e,0x08,0x0d -,0x0d,0x0a,0x26,0x1c,0x1b,0x18,0x0b,0x10,0x10,0x1a,0x3e,0x2a,0xb1,0xa7,0x4f,0xbb,0x3c,0x3c,0x49,0x21,0x0f,0x11,0x15,0x14,0x0d,0x0b,0x0b,0x08,0x06,0x0b,0x0b,0x1c -,0x9c,0xb9,0xaa,0x9f,0xa3,0x99,0xc4,0xad,0x8d,0xa2,0x99,0x97,0xd7,0xa2,0xbf,0xa9,0x99,0xaf,0xaf,0xb6,0xab,0x95,0x9e,0x98,0x98,0xb8,0xaf,0xa1,0xbe,0xb8,0x96,0xb0 -,0x4c,0x3e,0x24,0x1c,0x11,0x1a,0x2f,0x1f,0xeb,0xbe,0x43,0xb6,0xb3,0xa2,0x9b,0x9d,0x96,0x8e,0x8e,0x8b,0x91,0x8f,0x8a,0x91,0x9a,0x9e,0xab,0x9e,0x88,0x8b,0x95,0x8e -,0x97,0xab,0xd3,0x63,0x9c,0xa0,0xad,0xb8,0x2d,0x26,0x16,0x0f,0x0f,0x0e,0x0b,0x08,0x05,0x06,0x05,0x06,0x06,0x03,0x02,0x02,0x04,0x01,0x07,0x11,0x13,0x15,0x17,0x18 -,0x1f,0x1f,0x35,0xc2,0x75,0x98,0x9f,0xac,0x9a,0xad,0xa4,0x9d,0x95,0x92,0x97,0x98,0x96,0x97,0x92,0x90,0x8f,0x93,0x94,0x96,0x95,0x85,0x88,0x8f,0x8e,0x93,0x9c,0xa9 -,0xb4,0x8d,0x9f,0x98,0xa7,0xbe,0xca,0x10,0x1e,0x19,0xd9,0x14,0x21,0xb2,0x1a,0xa5,0x9f,0xb6,0x9c,0xb7,0x1f,0xa6,0x93,0x2c,0xfc,0x8d,0x44,0xa0,0xa4,0x09,0x2f,0xad -,0x6d,0x2c,0xb8,0x2e,0x1d,0xbe,0x11,0x03,0x0a,0x07,0x05,0x05,0x06,0x0f,0x0c,0x10,0x0d,0x13,0x12,0x02,0x0d,0x12,0x15,0xb9,0xa4,0x9a,0x93,0x8c,0x87,0x97,0xa5,0x97 -,0x98,0x8d,0x87,0x86,0x88,0x87,0x87,0x88,0x93,0x96,0x8f,0xa3,0x9e,0x9e,0xc8,0xe5,0x3c,0xd1,0x33,0x25,0x21,0x15,0x27,0x1c,0x1e,0x27,0x15,0x16,0x23,0x11,0x11,0x19 -,0x09,0x08,0x09,0x0c,0x18,0x1f,0x6e,0xc2,0xb3,0xb5,0xa2,0x9f,0xa2,0x91,0x8b,0x8a,0x84,0x88,0x86,0x8f,0x94,0x88,0x93,0x9a,0xa1,0xa0,0x99,0x9e,0xc9,0x9f,0x32,0x36 -,0x43,0x25,0x16,0x10,0x1b,0x1a,0x1e,0x0f,0x0d,0x0b,0x09,0x07,0x0b,0x09,0x06,0x07,0x05,0x0c,0x0d,0x12,0x32,0xa3,0xb0,0x9d,0x9c,0x42,0xbd,0xaa,0x9a,0xbf,0xa5,0xa4 -,0xc4,0xb4,0xa5,0xaf,0xb2,0xa3,0xa5,0x96,0x99,0x91,0x8a,0x88,0x88,0x89,0x8e,0x8e,0x97,0xbc,0xb8,0x9e,0xa0,0xa5,0x97,0xb1,0x19,0x10,0x18,0x0d,0x10,0x19,0x14,0x2c -,0x17,0x1b,0x0c,0x0b,0x08,0x0a,0x17,0x26,0x40,0x1c,0xb2,0xb0,0x95,0x93,0xad,0x9e,0xb7,0x91,0x88,0x96,0x99,0x8a,0x9b,0x9c,0x8d,0x9b,0x97,0xb7,0xa2,0x9c,0xad,0x1f -,0xb6,0xdc,0x54,0xbd,0x36,0x6a,0x1b,0x1e,0x11,0x0f,0x0d,0x11,0x0b,0x0d,0x10,0x16,0xb5,0xd0,0x2b,0xa2,0xb5,0x2d,0x38,0x32,0x32,0xc6,0x2a,0x24,0x41,0x0f,0x0d,0x08 -,0x07,0x0b,0x0d,0x09,0x07,0x14,0x21,0x1c,0x1d,0x4b,0xa2,0xdf,0xa7,0xa7,0x9b,0x82,0x89,0x87,0x86,0x8e,0x88,0x8f,0x91,0x8f,0xa0,0x9d,0x9a,0x96,0xa2,0xa4,0x26,0x48 -,0x2c,0x26,0x3b,0x0f,0xf8,0xe0,0xc3,0xab,0x9c,0xa3,0xa7,0x9f,0x48,0xaf,0x9f,0x5f,0x97,0x96,0xa1,0xae,0xb8,0xa1,0xbf,0x44,0x40,0xae,0x1d,0xc2,0x2f,0x3a,0xae,0x3b -,0x27,0x0f,0x0f,0x0e,0x0b,0x09,0x0d,0x0d,0x12,0x1b,0x45,0x96,0x86,0x92,0x8a,0x84,0x86,0x8b,0x90,0x86,0xa7,0x9c,0x91,0x17,0x17,0x08,0x03,0x06,0x00,0x04,0x01,0x06 -,0x01,0x0c,0x14,0x11,0x0f,0x0e,0x2d,0x1c,0x27,0xbb,0x97,0x98,0x8f,0x88,0x8c,0x8e,0x97,0x8d,0x95,0xa8,0x96,0x88,0x85,0x89,0x8b,0x8a,0x8f,0x9e,0x9b,0x6a,0x9f,0x9b -,0x94,0xa7,0xa6,0xa0,0xab,0xd5,0x0f,0xd1,0x29,0x3a,0xde,0x94,0x40,0x4d,0xae,0x18,0x29,0x1f,0x27,0x18,0x1a,0x23,0x4b,0x26,0x20,0x10,0x1d,0x15,0x1f,0x17,0x04,0x18 -,0x16,0x19,0x23,0x1a,0x25,0xa8,0x94,0x91,0x83,0x86,0x88,0x81,0x81,0x82,0x85,0x81,0x8a,0x8c,0xa6,0xbb,0x3b,0x10,0x0c,0x06,0x0a,0x0a,0x06,0x06,0x03,0x03,0x01,0x05 -,0x06,0x00,0x0d,0x12,0x0a,0x4f,0xbb,0x11,0x2a,0x1b,0x23,0x2b,0x34,0x20,0xad,0x94,0xa6,0x9a,0x91,0x8d,0xb7,0x8f,0xa0,0xa4,0x93,0x96,0x8b,0x93,0x8e,0x8d,0xa5,0x89 -,0x8b,0xa4,0x8f,0x8f,0x92,0x8a,0x87,0x8e,0x8e,0x8f,0x91,0xad,0xa5,0x69,0x4f,0x2b,0x3d,0xab,0x79,0x2b,0x14,0x13,0x09,0x08,0x02,0x07,0x04,0x01,0x12,0x0d,0x16,0x3f -,0x46,0xce,0xa4,0x90,0x9a,0x8e,0x84,0x82,0x88,0x88,0x80,0x86,0x89,0x90,0xb8,0xa8,0x59,0x0c,0x0a,0x0b,0x06,0x08,0x06,0x06,0x04,0x0f,0x0c,0x0a,0x16,0x11,0x21,0xd1 -,0xbd,0xc3,0xb6,0x2f,0xba,0x29,0xf2,0x27,0x13,0x52,0x2f,0x1e,0x63,0xb9,0x29,0x1f,0x12,0x0e,0x0d,0x13,0x0a,0x18,0xc3,0xb3,0xa9,0x91,0xa2,0xb3,0x8c,0x97,0x90,0x8c -,0x8b,0x8b,0x87,0x84,0x86,0x8c,0x8d,0x97,0x92,0x8d,0xc1,0x9d,0x9d,0xaf,0x1f,0x3a,0x35,0x09,0x14,0x1c,0x0f,0x10,0x16,0x14,0x11,0x19,0xc2,0xa7,0x9f,0x94,0xa4,0x8f -,0x84,0x8a,0x85,0x84,0x82,0x84,0x83,0x90,0x9d,0x3c,0x22,0x10,0x03,0x05,0x01,0x09,0x04,0x03,0x0c,0x07,0x01,0x08,0x08,0x0e,0x18,0x1e,0x22,0xec,0xde,0xaa,0xa7,0x56 -,0xaf,0xab,0xa9,0x4b,0xc7,0xba,0xc4,0xa2,0xa4,0xa7,0xb2,0xa3,0x9f,0x43,0xac,0x44,0xce,0x95,0xa4,0x8f,0x9a,0xcb,0xa6,0xc0,0x9a,0xa2,0xa8,0x3b,0x9e,0x92,0xad,0xa2 -,0xad,0xae,0x26,0x1f,0x10,0x15,0x13,0x14,0x45,0x2c,0x33,0x9b,0x33,0x27,0x44,0x15,0x2b,0x25,0xcf,0x34,0x31,0x98,0xa7,0x92,0x91,0x9d,0x88,0x87,0x8c,0x84,0x85,0x85 -,0x85,0x85,0x8c,0x97,0x8f,0xa9,0x2a,0x3c,0x13,0x0a,0x0e,0x04,0x08,0x0b,0x0b,0x05,0x03,0x08,0x09,0x05,0x0d,0x1d,0x09,0x0f,0x21,0x1f,0x15,0x19,0x15,0x0e,0x0f,0x09 -,0x25,0x39,0x3e,0xad,0x92,0xad,0xa1,0x93,0x99,0x8f,0x9a,0x8f,0xa2,0x8a,0x8a,0x8d,0x8c,0x8f,0x90,0x99,0x9e,0x9e,0xa5,0xac,0x90,0x31,0x9d,0x93,0xbf,0x9c,0x32,0xbc -,0x99,0x24,0x27,0xa7,0xc8,0xc5,0x57,0xae,0x23,0x1a,0x24,0x10,0x16,0x17,0x0a,0x1b,0x21,0x0d,0x42,0x1b,0x22,0x2a,0xb6,0xa0,0xa7,0x89,0x8a,0x86,0x80,0x86,0x84,0x87 -,0x8f,0x8b,0xa5,0xa6,0xbf,0x1b,0x5b,0x19,0x0f,0x15,0x06,0x0c,0x0d,0x07,0x05,0x06,0x07,0x0d,0x09,0x10,0x14,0x17,0x38,0x12,0x1e,0x1f,0x1b,0x2c,0x54,0x4c,0x3c,0xab -,0x9a,0x24,0x33,0x9f,0x77,0x33,0xaf,0x6e,0xa4,0x9a,0xaa,0x99,0x9f,0x9b,0x2d,0xa7,0xac,0xa8,0x97,0xb8,0x8e,0x89,0x8e,0x8a,0x94,0x95,0x92,0x9c,0x92,0x9b,0xb2,0x9e -,0xa5,0xb0,0x9c,0x1a,0x2d,0x1b,0x0c,0x0d,0x05,0x07,0x06,0x08,0x0e,0x0a,0x29,0xbf,0x14,0x95,0x94,0x96,0x87,0x85,0x82,0x82,0x81,0x80,0x87,0x8b,0x89,0x9b,0xa5,0x2e -,0x12,0x17,0x0c,0x06,0x05,0x06,0x05,0x00,0x01,0x01,0x00,0x0a,0x06,0x0c,0x1c,0x19,0x2f,0x51,0xbd,0xeb,0x6e,0xa3,0x9d,0xcd,0x9a,0x8e,0x91,0x8c,0x8e,0x96,0x99,0xa6 -,0xa1,0x56,0xba,0xa7,0x31,0xdd,0xbe,0x65,0xb5,0x1d,0x2e,0x9d,0x2f,0xd0,0xa3,0x96,0x96,0x8f,0x91,0x98,0xd3,0x98,0x92,0xb3,0xab,0x74,0xab,0x93,0xe6,0x1f,0x3d,0x1e -,0x1f,0x0e,0x0e,0x07,0x04,0x0d,0x0d,0x0a,0x32,0x4f,0x3e,0x98,0xa9,0x98,0x8b,0x88,0x85,0x85,0x81,0x83,0x82,0x81,0x85,0x8e,0x95,0xad,0x1b,0x18,0x07,0x0b,0x07,0x06 -,0x08,0x01,0x03,0x03,0x01,0x08,0x07,0x06,0x1a,0x17,0x1c,0x32,0xb3,0x2d,0x20,0x66,0x3e,0x1c,0x64,0xb8,0xd0,0xa4,0xb3,0xc3,0xa7,0xeb,0x27,0xc5,0x27,0x47,0x26,0x58 -,0xae,0xec,0x9b,0x9d,0x98,0x90,0x92,0x93,0x95,0x90,0x8c,0x93,0x8b,0x87,0x8c,0x8a,0x91,0xa4,0x97,0xb8,0x42,0xaf,0xc0,0x57,0x28,0x2b,0x40,0x16,0x0b,0x11,0x08,0x0c -,0x16,0x0e,0x1a,0x1a,0x2e,0xad,0xae,0xa2,0xa6,0x98,0x8c,0x8f,0x8b,0x80,0x85,0x85,0x83,0x88,0x8e,0x8f,0x98,0xad,0x26,0x12,0x0f,0x04,0x08,0x0c,0x06,0x08,0x08,0x03 -,0x0b,0x0d,0x0c,0x0f,0x17,0x1f,0x18,0x70,0xcd,0x29,0x44,0x30,0x1b,0x1e,0x1f,0x23,0xbe,0xb4,0xad,0xa2,0x2f,0x2c,0x38,0x1e,0x30,0x2a,0xbd,0x98,0x9e,0x9c,0x8e,0x98 -,0x96,0x93,0x91,0x96,0xa2,0x93,0x91,0x90,0x98,0x94,0x92,0x95,0xa9,0xbc,0xac,0xb4,0xbb,0x4c,0x27,0x2d,0x20,0x1e,0x7a,0x18,0x17,0x23,0x12,0x15,0x18,0x14,0x2b,0x45 -,0xd6,0xad,0xc1,0xa6,0x9c,0x9d,0x96,0x8c,0x87,0x85,0x85,0x84,0x84,0x86,0x8e,0x9f,0xa6,0xe5,0x18,0x0f,0x15,0x0a,0x0b,0x15,0x09,0x04,0x08,0x08,0x0a,0x0d,0x09,0x0f -,0x1c,0x19,0x1d,0x1f,0x1f,0x1b,0x1b,0x2a,0x1d,0x13,0x21,0x35,0x62,0x4a,0x3d,0xb8,0x6c,0x4b,0xa9,0x3e,0x4d,0x9e,0xaa,0x9a,0x90,0x90,0x8f,0x91,0x92,0x9d,0xa0,0x9b -,0x96,0x9a,0x9b,0x96,0x91,0x8b,0x97,0xb8,0xe2,0xbe,0xbf,0xd5,0x44,0x3a,0x68,0x24,0x3e,0x4a,0x1a,0x2b,0x2f,0x15,0x1c,0x1e,0x1a,0x28,0x28,0x2e,0xc1,0xad,0xd0,0xaf -,0x9e,0x99,0x8e,0x88,0x83,0x86,0x84,0x85,0x88,0x8b,0x98,0xa0,0xae,0x29,0x1e,0x21,0x0d,0x0a,0x0d,0x05,0x0c,0xad,0x1e,0x00,0xae,0x94,0x11,0xab,0x1b,0x19,0x0c,0x0b -,0x0c,0x0f,0x14,0x00,0x09,0x01,0x03,0x05,0x00,0x07,0x01,0x04,0x0b,0x0b,0x11,0x0e,0x20,0xb8,0x47,0xa8,0x96,0x9c,0x90,0x88,0x8d,0x99,0x90,0x80,0x83,0x8e,0x89,0x80 -,0x80,0x81,0x82,0x80,0x82,0x82,0x82,0x81,0x81,0x82,0x81,0x86,0x85,0x8d,0x96,0x91,0x91,0x91,0x91,0x91,0xa7,0x9e,0xac,0xa9,0xc4,0x35,0x1e,0x11,0x13,0x08,0x08,0x05 -,0x08,0x05,0x02,0x01,0x00,0x01,0x01,0x00,0x01,0x01,0x00,0x00,0x03,0x03,0x04,0x03,0x02,0x05,0x09,0x08,0x05,0x0b,0x06,0x0b,0x09,0x08,0x0d,0x13,0x2a,0x1b,0x28,0xb2 -,0xae,0x9c,0x8f,0x8a,0x85,0x87,0x8d,0x8e,0x8b,0x87,0x85,0x85,0x84,0x82,0x82,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x82 -,0x83,0x82,0x84,0x89,0x8e,0x8c,0x8d,0x93,0x96,0x9f,0xa2,0xc2,0xaf,0x9e,0x9b,0xaa,0x4e,0x39,0x2b,0x1e,0x1b,0x19,0x0d,0x10,0x07,0x04,0x04,0x03,0x03,0x05,0x05,0x02 -,0x04,0x02,0x04,0x04,0x04,0x02,0x02,0x01,0x02,0x03,0x03,0x02,0x04,0x04,0x01,0x02,0x02,0x03,0x04,0x03,0x04,0x04,0x06,0x06,0x09,0x0d,0x0b,0x0a,0x0e,0x15,0x1a,0x1d -,0x15,0x0e,0x0c,0x08,0x08,0x0b,0x0d,0x15,0x16,0x1e,0x26,0x41,0xc9,0xb1,0x8e,0x8a,0x8b,0x87,0x84,0x83,0x82,0x82,0x82,0x82,0x81,0x85,0x85,0x83,0x82,0x82,0x84,0x84 -,0x84,0x82,0x82,0x81,0x82,0x81,0x81,0x84,0x83,0x82,0x81,0x83,0x84,0x86,0x85,0x84,0x88,0x8b,0x8d,0x90,0x95,0xac,0xab,0xa0,0x9f,0xa1,0x3f,0x21,0x1c,0x1c,0x18,0x1a -,0x14,0x18,0x15,0x11,0x1b,0x2d,0xc7,0xb2,0xa8,0xa8,0x95,0x8c,0x86,0x87,0x88,0x86,0x8b,0x89,0x8c,0x91,0x98,0x98,0xaa,0xb3,0xac,0xb1,0xa1,0xa9,0xa9,0xaf,0xc0,0xbe -,0xb4,0x65,0x31,0x1d,0x13,0x0f,0x0c,0x07,0x05,0x04,0x02,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00 -,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x04,0x0a,0x0d,0x0a,0x0c,0x0f,0x11,0x16,0x18,0x19,0x1a,0x20,0x1d,0x21,0x78,0xae,0x9d,0x99,0x90,0x8a,0x8a,0x87,0x82 -,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x81,0x82,0x82,0x82,0x83,0x88,0x8a,0x89,0x8b,0x8c -,0x8a,0x8e,0x8b,0x85,0x87,0x86,0x85,0x87,0x87,0x85,0x82,0x82,0x83,0x84,0x85,0x86,0x86,0x89,0x8b,0x8f,0x97,0xa9,0x3b,0x26,0x19,0x0f,0x0b,0x07,0x03,0x03,0x02,0x01 -,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x04,0x05,0x03,0x07,0x0b,0x0b,0x12,0x19,0x19 -,0x1c,0x17,0x1d,0x36,0xe4,0xac,0xa1,0x9e,0x95,0x8f,0x8c,0x87,0x85,0x87,0x89,0x8a,0x89,0x88,0x8a,0x8e,0x8d,0x8f,0x99,0x99,0x95,0x99,0x8f,0x8e,0x92,0x8f,0x8e,0x8d -,0x88,0x88,0x8a,0x8d,0x8f,0x91,0x95,0x98,0x9b,0xa1,0xa9,0xd4,0x24,0x20,0x27,0x25,0x1e,0x2d,0x27,0x22,0x4e,0x56,0xb4,0xa8,0xc8,0xdc,0xdf,0xcb,0xdb,0x31,0x33,0x32 -,0x23,0x1a,0x16,0x13,0x18,0x1d,0x1a,0x18,0x18,0x17,0x1a,0x2b,0x2a,0x2b,0x31,0x1e,0x2d,0x4b,0x2b,0x45,0xc9,0xb5,0xad,0xb7,0xa3,0x9b,0x9a,0x97,0x99,0x9c,0x99,0x99 -,0x9a,0x95,0x9d,0xb7,0x39,0x22,0x23,0x25,0x1b,0x1e,0x2d,0x23,0x25,0x4f,0xcd,0xa2,0x96,0x8f,0x8a,0x88,0x84,0x82,0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x85 -,0x8a,0x91,0x97,0x97,0xa6,0xe1,0xb7,0x4c,0x24,0x27,0x21,0x1a,0x15,0x0e,0x0c,0x0a,0x08,0x08,0x06,0x05,0x04,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x06,0x06,0x0a,0x0e -,0x0b,0x0a,0x0f,0x15,0x16,0x24,0x3c,0x3a,0x44,0x42,0xc5,0xa2,0x9d,0x9b,0x96,0x96,0x95,0x90,0x8d,0x89,0x89,0x8d,0x8e,0x8d,0x8d,0x8d,0x8f,0x8f,0x93,0xa1,0xa7,0x9b -,0x9d,0x9c,0x96,0x9a,0x9b,0x99,0x99,0x94,0x91,0x9b,0xa9,0xaa,0xa8,0xad,0xc2,0x47,0x33,0x24,0x17,0x0f,0x0f,0x11,0x12,0x0f,0x0f,0x0c,0x0b,0x12,0x1a,0x1b,0x1b,0x19 -,0x19,0x1e,0x20,0x25,0x2a,0x23,0x1f,0x1c,0x15,0x18,0x1e,0x23,0x25,0x29,0x22,0x22,0x22,0x28,0x44,0x38,0x2d,0x22,0x22,0x2b,0x3d,0x3b,0x44,0x7a,0x7a,0x50,0xff,0xad -,0xa1,0x9a,0x99,0x96,0x93,0x8f,0x8e,0x8a,0x88,0x8b,0x8e,0x96,0x9b,0xa4,0xb0,0x58,0x27,0x1e,0x12,0x0c,0x0d,0x0e,0x10,0x13,0x1a,0x1f,0x23,0x32,0xb9,0x9d,0x99,0x9b -,0x96,0x8e,0x8b,0x8a,0x8a,0x89,0x89,0x8a,0x8d,0x8c,0x8b,0x8a,0x8a,0x8b,0x8e,0x94,0x95,0x9a,0x96,0x9b,0xaf,0xe5,0x3a,0x21,0x19,0x14,0x0d,0x0a,0x08,0x05,0x04,0x05 -,0x05,0x06,0x06,0x05,0x05,0x05,0x07,0x09,0x0c,0x0c,0x0d,0x0b,0x0a,0x0b,0x0e,0x13,0x17,0x17,0x1a,0x1e,0x2c,0x60,0xaf,0xa5,0x9d,0x97,0x95,0x90,0x8e,0x8a,0x88,0x8b -,0x8d,0x8d,0x8d,0x8e,0x8d,0x8e,0x8f,0x92,0x98,0x9b,0x98,0x95,0x96,0x93,0x8f,0x8f,0x8f,0x90,0x8d,0x8b,0x90,0x97,0x9a,0x9c,0x9e,0xa6,0xb6,0xd9,0x3d,0x1d,0x1b,0x1e -,0x1a,0x1b,0x1a,0x16,0x17,0x16,0x16,0x1b,0x1c,0x18,0x15,0x16,0x18,0x1a,0x18,0x16,0x12,0x0e,0x0d,0x0f,0x16,0x19,0x1b,0x1a,0x1a,0x1a,0x1c,0x2e,0x31,0x29,0x2c,0x2b -,0x2a,0x28,0x2a,0x28,0x21,0x19,0x18,0x1e,0x2c,0x4c,0x64,0xbe,0xaf,0xae,0xa5,0x9a,0x91,0x8e,0x8d,0x8c,0x8c,0x8c,0x8d,0x8e,0x94,0x9a,0xa8,0xbc,0xb8,0xbe,0xdd,0x3c -,0x2a,0x22,0x22,0x1f,0x27,0x2d,0x29,0x2f,0x37,0x3c,0xc6,0xb8,0xb0,0xa6,0xa3,0x9f,0x9d,0x91,0x8b,0x89,0x88,0x88,0x87,0x86,0x86,0x84,0x84,0x86,0x88,0x8c,0x91,0x95 -,0x9e,0xc3,0x2f,0x1d,0x10,0x09,0x09,0x08,0x08,0x07,0x06,0x05,0x05,0x05,0x08,0x0b,0x0a,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0c,0x0f,0x15,0x1b,0x1e -,0x28,0x2f,0x45,0xb7,0x9b,0x97,0x98,0x9a,0x9d,0x99,0x95,0x96,0x95,0x92,0x94,0x99,0x99,0x94,0x93,0x8f,0x8e,0x8e,0x8c,0x8b,0x89,0x86,0x85,0x88,0x8c,0x8e,0x8e,0x93 -,0x9a,0x9a,0x9d,0xa6,0xd8,0x2d,0x2b,0x3f,0x3d,0x30,0x3b,0x36,0x35,0x37,0x42,0xcd,0x3e,0x27,0x27,0x1f,0x21,0x2b,0x1f,0x1d,0x16,0x0f,0x0e,0x0d,0x0d,0x0f,0x13,0x15 -,0x16,0x13,0x14,0x19,0x23,0x2c,0x1f,0x1e,0x23,0x26,0x28,0x22,0x1f,0x1d,0x1b,0x16,0x16,0x1c,0x2c,0x46,0x3b,0x4c,0x52,0xb5,0xad,0xa8,0x96,0x94,0x98,0x99,0x9c,0x97 -,0x96,0x9a,0x98,0x9b,0xa2,0xad,0xae,0xb3,0xac,0xad,0xcc,0x6d,0x3e,0x3a,0x4b,0xf5,0xbc,0x59,0x2e,0x2f,0x2f,0x43,0x38,0x38,0xee,0xbc,0x55,0xce,0x9f,0x95,0x8e,0x8d -,0x8b,0x88,0x87,0x85,0x83,0x83,0x84,0x86,0x86,0x89,0x8e,0x8e,0x96,0xa4,0xc3,0x24,0x1b,0x1a,0x11,0x0e,0x0a,0x0a,0x09,0x07,0x07,0x08,0x09,0x08,0x07,0x05,0x07,0x08 -,0x06,0x08,0x08,0x06,0x06,0x08,0x0b,0x0d,0x0e,0x12,0x18,0x20,0x2a,0x2d,0xad,0xa6,0xac,0x9e,0xa1,0x9b,0x96,0x9a,0x9c,0x9b,0x9a,0x9e,0x98,0x91,0x95,0x91,0x90,0x93 -,0x91,0x8d,0x89,0x8a,0x8b,0x8b,0x8d,0x8d,0x8e,0x8e,0x91,0x95,0x99,0xa6,0xa0,0xa0,0xa2,0xa3,0xa9,0xb9,0xb8,0xb0,0xab,0xa6,0xae,0xc9,0x4a,0x39,0x3a,0x2c,0x27,0x22 -,0x1a,0x10,0x0d,0x11,0x14,0x14,0x14,0x16,0x12,0x14,0x16,0x1d,0x28,0x22,0x1f,0x19,0x1a,0x1d,0x1c,0x1a,0x17,0x16,0x17,0x0e,0x0f,0x18,0x19,0x1b,0x1d,0x24,0x25,0x29 -,0x6a,0xa6,0xad,0xa9,0xa9,0xa7,0xaa,0xa1,0x99,0xa3,0x9a,0x99,0xa0,0xa4,0xa1,0x99,0x99,0x9d,0x99,0x9b,0x9e,0x9c,0x97,0x97,0xa0,0xad,0xc0,0x3a,0x2c,0x2f,0x29,0x24 -,0x1e,0x18,0x18,0x19,0x1e,0x3c,0xbb,0xa6,0x9f,0x96,0x8d,0x88,0x88,0x85,0x86,0x88,0x88,0x88,0x89,0x8b,0x8e,0x96,0xa3,0xc3,0x39,0x23,0x22,0x1b,0x1c,0x16,0x14,0x14 -,0x13,0x16,0x1c,0x13,0x0f,0x18,0x11,0x17,0x14,0x14,0x13,0x11,0x0e,0x0f,0x15,0x14,0x1d,0x1b,0x26,0x27,0x27,0x3f,0x43,0xeb,0xbb,0xc3,0xd6,0xc3,0xcb,0xb9,0xbf,0xc1 -,0xc5,0x54,0x4f,0x42,0x54,0xc1,0xdd,0xdb,0xdd,0xd0,0xb2,0xb3,0xad,0xaa,0xaa,0xab,0xac,0xa7,0xab,0xb5,0xb7,0xab,0xb3,0xbe,0xc4,0xb8,0xb8,0xc0,0xb2,0xb5,0xb4,0xad -,0xa8,0xa9,0xa5,0xa9,0xaa,0xb2,0xb5,0xae,0xac,0xaf,0xbb,0xb6,0xb9,0xbf,0xcf,0xeb,0xc6,0xce,0x7a,0xc8,0xf5,0xec,0x58,0x58,0x5d,0x4f,0x40,0x3d,0x38,0x31,0x3c,0x2e -,0x29,0x26,0x1e,0x25,0x21,0x23,0x28,0x1f,0x25,0x25,0x29,0x29,0x2b,0x2c,0x2e,0x2e,0x30,0x34,0x30,0x2e,0x2e,0x2e,0x2c,0x2d,0x2b,0x30,0x32,0x2f,0x2e,0x2f,0x31,0x2e -,0x34,0x3b,0x4e,0xfe,0x4e,0x44,0xfe,0xcb,0xc2,0xc0,0xbd,0xb7,0xb0,0xaa,0xaf,0xac,0xa4,0xa2,0xa0,0x9b,0x9a,0x99,0x94,0x92,0x92,0x92,0x92,0x91,0x90,0x92,0x92,0x90 -,0x92,0x96,0x98,0x98,0x99,0x9b,0x9d,0xa3,0xa5,0xa2,0xaf,0xc3,0xc8,0x56,0x43,0x2f,0x26,0x2d,0x2b,0x20,0x1c,0x19,0x1b,0x1a,0x15,0x16,0x19,0x1a,0x1b,0x1a,0x19,0x1d -,0x1e,0x1d,0x1e,0x1e,0x1f,0x21,0x26,0x20,0x20,0x21,0x1e,0x1f,0x1e,0x22,0x29,0x2c,0x28,0x27,0x28,0x29,0x27,0x29,0x2f,0x33,0x3e,0x3d,0x3c,0x3f,0x4a,0xfa,0xf9,0xd7 -,0xc5,0xb7,0xae,0xae,0xa7,0xa1,0x9f,0xa0,0xa0,0x9e,0x9a,0x9a,0x99,0x97,0x96,0x94,0x97,0x99,0x98,0x98,0x97,0x98,0x98,0x98,0x99,0x99,0x9a,0x9c,0x9e,0xa2,0xa3,0xa4 -,0xac,0xb2,0xb9,0xca,0x4c,0x38,0x2f,0x27,0x22,0x20,0x1e,0x1c,0x1b,0x1a,0x1a,0x1a,0x18,0x19,0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1d,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1d -,0x20,0x23,0x23,0x29,0x26,0x27,0x2c,0x2d,0x2f,0x2f,0x2f,0x36,0x3c,0x3f,0x4e,0x44,0x65,0xcc,0xd2,0xb6,0xaf,0xaa,0xa6,0xa5,0x9f,0x9f,0x9e,0x9d,0x9d,0x9b,0x99,0x98 -,0x97,0x98,0x99,0x97,0x96,0x98,0x99,0x9a,0x99,0x9a,0x9a,0x9a,0x9d,0x9d,0x9f,0xa1,0xa4,0xa8,0xab,0xab,0xb3,0xbf,0xc5,0x62,0x42,0x3a,0x34,0x39,0x34,0x2e,0x2c,0x26 -,0x29,0x2a,0x24,0x23,0x24,0x21,0x1f,0x1f,0x22,0x25,0x25,0x23,0x24,0x26,0x24,0x2a,0x27,0x2b,0x2c,0x2c,0x2e,0x2b,0x2b,0x2a,0x31,0x31,0x2f,0x33,0x36,0x2f,0x37,0x37 -,0x3a,0x3d,0x39,0x3b,0x35,0x5b,0xd9,0x4d,0x6c,0x5e,0x5a,0xdb,0x5e,0x62,0xd8,0xc3,0xbe,0xc3,0xc6,0xb8,0xb4,0xb7,0xb4,0xaa,0xa7,0xa3,0xa7,0xa6,0xa1,0xa9,0xa3,0xa9 -,0xae,0xaa,0xab,0xa8,0xab,0xb1,0xae,0xb5,0xb4,0xbc,0xc5,0xbc,0xdb,0xc6,0xe2,0x5e,0x59,0x54,0x55,0x3d,0x3d,0x42,0x46,0x3c,0x41,0x3c,0x30,0x2e,0x2f,0x2c,0x2c,0x2e -,0x32,0x3c,0x2f,0x2c,0x2e,0x2d,0x31,0x2a,0x2b,0x39,0x2e,0x30,0x2c,0x30,0x3a,0x35,0x40,0x46,0x47,0x4c,0x4c,0x4a,0x54,0x7b,0x46,0x41,0x44,0x41,0x7a,0x50,0xfa,0xd2 -,0xe8,0xeb,0xdf,0x77,0xc7,0xc6,0xbf,0xb1,0xb4,0xb7,0xb8,0xb7,0xaf,0xab,0xb2,0xab,0xa5,0xa8,0xae,0xa8,0xa6,0xae,0xaa,0xaf,0xb2,0xad,0xac,0xaa,0xaf,0xb9,0xba,0xbd -,0x6d,0x4c,0xd2,0xd9,0x38,0x57,0x56,0x3b,0x3d,0x39,0xdc,0x4b,0x62,0xcf,0x47,0xc6,0xc9,0x40,0xd3,0x49,0x4a,0xf1,0x38,0x4f,0x5d,0x4c,0xd9,0x3a,0x39,0x59,0x31,0x3e -,0x38,0x3b,0x6c,0x3f,0x3d,0x5a,0x52,0x39,0x58,0xc7,0x45,0x52,0xc8,0x48,0xc4,0xcd,0x44,0xe9,0x42,0x77,0x6b,0x3a,0xae,0xf5,0x58,0xc2,0x33,0xdf,0x3c,0x5d,0x4f,0x55 -,0xb0,0x58,0x66,0xaf,0xe8,0x59,0xb0,0xc7,0xb1,0xaf,0xb9,0xc3,0xbd,0xb3,0xcf,0xcc,0xb9,0xb9,0x6c,0xc9,0xc4,0xe6,0xfa,0xfd,0x5a,0x33,0xf5,0x3a,0x4d,0xe1,0x38,0xbf -,0x37,0x31,0x4a,0x33,0x3f,0x39,0x4f,0xf9,0x3e,0xf7,0x2f,0x40,0xc5,0x4a,0x3e,0xcf,0x4b,0x47,0xcf,0x31,0x45,0x37,0x50,0x35,0x24,0x62,0x3e,0x47,0x4f,0x40,0xc6,0x35 -,0x62,0xfc,0x38,0xca,0xfb,0xbb,0xbe,0x43,0xb2,0x40,0xcc,0xb8,0x36,0xac,0x5e,0xdb,0xbe,0x4b,0xc4,0x4b,0xd6,0xb6,0x3c,0xb7,0xda,0xca,0xbb,0xbc,0xa9,0x49,0xd1,0xb6 -,0x78,0x7c,0xc3,0xc6,0xc7,0xcc,0xb6,0x52,0xb8,0xd5,0xdb,0xb2,0x42,0xb1,0x62,0xea,0xcd,0x3e,0xd5,0x38,0xc4,0x3f,0x47,0xb6,0x3a,0xbb,0xdb,0x59,0xbc,0x3b,0xbd,0x47 -,0x40,0xb0,0x4f,0xba,0x52,0xd4,0xba,0x41,0xca,0xc6,0x50,0xfd,0xc9,0x42,0xd3,0x52,0x3a,0xc3,0x34,0x3c,0xc9,0x2d,0xce,0x40,0x51,0xd6,0x27,0xcf,0x38,0x3b,0xe2,0x3e -,0x70,0x49,0x44,0xd9,0x62,0x58,0x46,0x46,0xb6,0x44,0x49,0xdf,0x36,0x5d,0x37,0x42,0x32,0xdf,0xb6,0x36,0xbe,0x58,0xc5,0xba,0x62,0xb3,0x5d,0xd5,0xb7,0x66,0xc5,0x56 -,0xbf,0xbd,0x78,0x55,0xd3,0xbb,0xe6,0xc1,0x50,0x49,0xbf,0x59,0x32,0xb7,0xbb,0x6b,0xba,0x7e,0xca,0xc8,0x34,0x50,0xb6,0xee,0x5b,0x3c,0xca,0xbd,0x2e,0x5a,0x57,0xbe -,0x3f,0x5c,0x55,0x43,0xb9,0x3d,0x3b,0x47,0x53,0x3b,0x35,0x46,0xc0,0x3c,0x4e,0x3e,0x4d,0x6c,0x36,0xc4,0x49,0x44,0xc8,0x4d,0x5d,0xf9,0x3d,0x45,0xf5,0xe5,0x3b,0xc3 -,0x50,0xe1,0x5f,0x36,0xc0,0x31,0xa6,0x2f,0x55,0xac,0x3c,0xbb,0x39,0xaf,0x44,0xfa,0xa8,0x3b,0xb8,0xba,0xbd,0xb0,0x4c,0xb0,0x46,0xbf,0xb7,0xc4,0x67,0xc3,0xc8,0xbf -,0xd5,0x47,0xb1,0xc9,0xc0,0x44,0xc9,0xbe,0xbc,0x41,0xb0,0xbf,0xc0,0xb7,0xd2,0xaa,0x3d,0xae,0xd8,0x4f,0xd3,0x39,0x3f,0xb3,0x4b,0x2c,0xc2,0x41,0x44,0x44,0x2d,0xba -,0xee,0x30,0xb4,0x28,0xc0,0x3e,0x28,0xb7,0x33,0x4b,0x62,0x4a,0xc8,0x2b,0xdf,0x3e,0x3f,0x31,0xd2,0xcf,0x36,0xcf,0x2c,0xb1,0x39,0x39,0x36,0x4a,0x48,0xdd,0x36,0xca -,0x60,0x49,0xce,0x3c,0x68,0x65,0xce,0xba,0xd8,0xaf,0xb9,0x3b,0xb1,0x40,0xba,0xca,0x51,0xb9,0xc1,0x40,0xc2,0x2e,0xc8,0x3e,0xe8,0xbb,0x2f,0xa5,0x43,0xbe,0xbe,0x46 -,0xba,0x73,0x47,0xc8,0xab,0x3a,0xce,0xa6,0x33,0xbe,0x58,0x43,0xba,0x34,0x53,0xcb,0x36,0xc4,0x3a,0x2f,0x43,0x3d,0x46,0x4b,0x5a,0x45,0xbd,0x2b,0x6d,0xd3,0x4a,0x4a -,0xbd,0x4a,0xe8,0x54,0x45,0xaa,0x3a,0xc7,0x31,0x43,0xc3,0x2e,0x32,0xb3,0x2a,0xac,0x41,0x21,0x9f,0x3f,0x44,0xbe,0xce,0x4c,0xac,0x5d,0xcf,0xb1,0xd8,0xbe,0xba,0x54 -,0xc6,0xbe,0x41,0xae,0xd1,0xdc,0xbb,0xf6,0xb8,0x46,0xd7,0xae,0x78,0xb8,0x51,0xbd,0xbf,0x3c,0xcb,0xdf,0xcf,0xcb,0xbf,0x52,0x48,0xb4,0xc3,0x36,0x5b,0xb5,0xd3,0x4a -,0xaf,0x53,0xcf,0xc4,0x36,0xe1,0x2b,0xe3,0x55,0x47,0x33,0xdc,0xc0,0x30,0x41,0x30,0xd0,0x30,0xe0,0xdc,0x2f,0xb8,0x74,0x47,0xf9,0x36,0xb8,0x3f,0x54,0xdd,0xfe,0xd9 -,0x29,0xc1,0x40,0x63,0xd4,0x37,0xbc,0xc8,0x32,0xd6,0xbf,0xca,0x5c,0x38,0xb7,0xbd,0x38,0xb2,0xb9,0x5b,0xae,0x4f,0xd9,0xaf,0x31,0xb1,0x44,0xea,0xac,0x2b,0xc9,0x50 -,0xcc,0xd4,0x4b,0xb9,0x4f,0x6f,0xd6,0xc0,0xb5,0x48,0xb9,0x33,0xbf,0xbf,0x41,0xc7,0xd7,0xc2,0xed,0x25,0xc7,0x62,0x2c,0xaf,0x38,0xc6,0x3f,0xce,0x46,0x50,0xdf,0x46 -,0x38,0xb0,0xd4,0x3c,0x46,0xbb,0xce,0x34,0xbc,0x49,0xd9,0x3f,0xeb,0x52,0xe3,0x47,0xbe,0x25,0xcc,0x47,0xd5,0xad,0x2b,0xcf,0x39,0x5b,0xa7,0x2f,0x3d,0xb3,0x36,0xdb -,0x43,0xab,0x3c,0xc6,0xf1,0xaf,0xba,0x35,0xbd,0xc0,0x54,0xd3,0xac,0x30,0xab,0x29,0x31,0xab,0x31,0xbf,0x3f,0xef,0xb8,0x42,0xc0,0x3d,0x50,0xf0,0x4a,0xb1,0xc2,0xce -,0xd2,0x50,0xb6,0xaf,0x4e,0x45,0xa9,0xe7,0x4d,0x47,0x25,0x38,0xa4,0xa3,0xaf,0x13,0x0f,0xc2,0x9e,0x9f,0xad,0xa7,0xb8,0xa5,0x0d,0x10,0x0d,0x1f,0x93,0x8e,0x98,0x13 -,0x05,0x0d,0x8e,0x83,0xa4,0x10,0x2e,0xa2,0x89,0x96,0x9e,0xaf,0x19,0x1b,0x36,0x3f,0x5b,0x2e,0x12,0x36,0x25,0x15,0x03,0x1d,0x8a,0x86,0x89,0x42,0x31,0x24,0x1f,0x89 -,0x8f,0xae,0x2f,0x0f,0x3e,0x9f,0x97,0xc3,0x1e,0x28,0x1f,0x19,0x37,0x9f,0x90,0x39,0x2e,0x34,0x18,0x15,0x09,0xac,0x89,0x86,0xa7,0x0c,0x25,0xb9,0x9a,0x94,0x30,0x1b -,0x15,0x2f,0x94,0x92,0x9b,0x26,0x08,0x1c,0x96,0xaa,0xc7,0xa0,0x9b,0xb1,0x22,0x1a,0x0f,0x09,0x79,0x8e,0x8c,0x33,0x07,0x0a,0x26,0x82,0x8f,0x1f,0x22,0xbf,0x8f,0x95 -,0x97,0x97,0x17,0x29,0x38,0x3b,0xb6,0x13,0x24,0x3b,0xc2,0x1f,0x05,0x09,0xb5,0x8b,0x89,0x95,0x37,0x16,0x29,0x9f,0x8a,0x98,0x56,0x16,0x27,0x93,0x97,0x3e,0x1c,0xad -,0x2d,0x1c,0x19,0xca,0xac,0x9d,0xbb,0xd0,0x25,0x0a,0x0b,0x1e,0x8d,0x88,0x8f,0x2d,0x1c,0x2a,0x56,0x9d,0xa1,0x2a,0x1c,0x21,0xad,0x92,0x9c,0xbf,0x17,0x2c,0xb0,0x4e -,0xcc,0xbf,0x8c,0xa2,0xd4,0x19,0x0a,0x12,0x0e,0x95,0x91,0xa7,0x18,0x05,0x23,0x9d,0x89,0xa6,0x26,0xd2,0xaf,0x90,0x99,0x9f,0xaf,0x29,0x5c,0x4d,0x4e,0x1e,0x10,0xdc -,0xa3,0xbd,0x0a,0x06,0x1f,0xab,0x8c,0x8f,0xa4,0x3b,0x18,0x4a,0x90,0x9a,0x9c,0x11,0x11,0xa0,0x99,0xa7,0x2c,0xc7,0xbc,0x2c,0x1c,0x28,0x3c,0xb5,0x9e,0xa2,0xdf,0x11 -,0x07,0x15,0xa7,0x8d,0x91,0xa1,0x45,0x28,0xb4,0xcb,0xb7,0xba,0x2d,0x1e,0x1f,0x9f,0x98,0x4a,0xc8,0x2a,0xba,0xbc,0x15,0x9e,0x9f,0x8e,0xa7,0x23,0x26,0x06,0x18,0x1e -,0x9d,0x8e,0x21,0x1a,0x0d,0xc6,0x9c,0xab,0x99,0x35,0xad,0x6d,0x9e,0x8f,0xaf,0x9b,0xcc,0x41,0x5d,0x1a,0x19,0x24,0x9e,0xaa,0x34,0x0d,0x09,0x2d,0xb6,0x99,0x95,0xc5 -,0xf1,0x28,0xca,0x95,0xac,0xe0,0x17,0x66,0xa0,0xbc,0x3a,0xab,0xaf,0xa7,0x24,0x1a,0x1f,0x33,0x9f,0x9c,0x92,0x1b,0x11,0x0c,0x14,0x97,0x95,0x9d,0x9f,0xe8,0xa5,0x1e -,0x3a,0xcb,0x3c,0xc6,0x1c,0xb3,0xb9,0x57,0xec,0x9e,0xa8,0x37,0x29,0x29,0xb1,0x93,0x94,0xa7,0x1f,0x1a,0x0a,0x11,0xb8,0xba,0xa6,0x28,0x25,0x20,0x7a,0xab,0xb1,0x9c -,0xae,0x4e,0xb8,0xba,0x9c,0xa3,0x9d,0x99,0x2b,0x2a,0x14,0x12,0xad,0x99,0xb1,0x1e,0x0e,0x14,0x23,0xae,0x9c,0xa5,0xc9,0xbd,0xcb,0xca,0xa6,0x39,0x2c,0xb2,0xb1,0xb7 -,0x3e,0xb0,0xa4,0xc5,0xa5,0x26,0x1b,0x19,0x36,0x90,0x99,0xa5,0x17,0x0b,0x1d,0x24,0xa2,0xa0,0xa6,0x9e,0xb5,0xa2,0x1e,0x23,0x4b,0x25,0xaa,0x35,0x3d,0x3c,0x2a,0x9c -,0x97,0xb1,0x34,0x22,0x4f,0xbd,0x9a,0x8e,0xb7,0x1d,0x1d,0x14,0x1a,0x40,0x5b,0x41,0x48,0xb7,0xca,0xe2,0x26,0x9a,0xa5,0xb3,0xd7,0x38,0xaa,0xb0,0x96,0x9e,0xbc,0x2b -,0x12,0x16,0x2d,0xaf,0xa8,0xba,0x2a,0x16,0x17,0x28,0x9e,0x64,0x9d,0xa2,0xdb,0xa7,0xd6,0x3e,0x27,0xa8,0xaa,0x3b,0xe1,0xfa,0xaa,0xaf,0xa7,0x4f,0x21,0x1a,0x1f,0xc9 -,0x9f,0x9b,0x49,0x24,0x0e,0x2b,0x2e,0xba,0x98,0xa9,0x98,0xa8,0xcf,0x33,0x1e,0x33,0x2f,0xcf,0xba,0x1b,0x41,0xf9,0x9b,0x96,0x2a,0xba,0x23,0xba,0x9d,0xc5,0x96,0xb9 -,0x2f,0x14,0x15,0x2e,0x22,0x2d,0x3b,0xb6,0xb3,0x3c,0xc3,0x61,0x9f,0xab,0xae,0xac,0x34,0xca,0xa8,0x9a,0xa1,0xe2,0x2b,0x18,0x1d,0x35,0xb2,0x5e,0x3a,0xdf,0x19,0x23 -,0x2b,0xb8,0xb6,0xdd,0x9a,0xc8,0xa8,0x4b,0x26,0xa0,0x46,0xa4,0x62,0x38,0xab,0x41,0xa6,0xab,0x39,0x27,0x18,0x2a,0xcb,0xaf,0xa2,0x20,0x31,0x2e,0x2d,0x54,0x45,0x9a -,0xa0,0xa9,0x9c,0x4b,0x3e,0x1f,0x30,0x47,0x2e,0x50,0x13,0xe9,0xb0,0xa4,0x97,0xbd,0xbe,0x6f,0x3a,0x9d,0xb7,0xab,0xcc,0x29,0x35,0x1e,0x1f,0x13,0x26,0x44,0xbc,0xb7 -,0xb3,0x73,0xaa,0x9f,0xa5,0xbb,0x3f,0xd4,0x77,0xa9,0x9e,0x9f,0x38,0x23,0x34,0x1c,0x40,0x33,0x43,0x59,0x2f,0x38,0x29,0x3b,0x2c,0xcc,0xbb,0x96,0xbf,0x3c,0xa1,0xd4 -,0xc0,0xa0,0x52,0x55,0xd9,0xcf,0xab,0x47,0xcb,0x30,0x1d,0x2b,0x32,0xcc,0xb2,0x29,0x4f,0xc9,0x25,0x4f,0x43,0xb0,0x9e,0xc4,0x98,0x6e,0x74,0x4d,0x2d,0xdf,0x26,0x2c -,0x2a,0x1e,0xc8,0xa3,0xa4,0x9f,0xf3,0xab,0xc5,0xb8,0xb1,0xb4,0xa7,0x2e,0x43,0x37,0x14,0x26,0x10,0x36,0xc2,0x1b,0x9c,0x3b,0xa3,0x9e,0x53,0x9b,0x2f,0xcd,0xbf,0x3d -,0x94,0xb0,0xee,0xb0,0x1a,0x3d,0x3d,0x2b,0xb2,0x36,0xbd,0x3e,0x25,0x38,0x20,0xd0,0x39,0xae,0x9f,0x2d,0xaf,0xcf,0xc7,0x9f,0x3f,0xa9,0xbf,0xe9,0xab,0x2d,0xa3,0x33 -,0x27,0x3c,0x2d,0x3a,0x31,0xd6,0x48,0x41,0xc4,0x2f,0x4b,0x6c,0xd6,0xa1,0xb2,0xa0,0x7d,0xcd,0x38,0x59,0xe8,0x22,0x2d,0x27,0x29,0xb5,0xca,0xbd,0x9b,0xb1,0xad,0xc6 -,0xbe,0xb1,0x4a,0xaf,0xc0,0x36,0x3b,0x15,0x1f,0x20,0x1e,0x3a,0x4b,0xab,0x4a,0xaa,0x9b,0xcb,0xa5,0xed,0xc7,0xa9,0x78,0xaf,0xad,0x33,0xae,0x54,0x2a,0x4f,0x25,0xb1 -,0x3e,0x4c,0x31,0x33,0x3a,0x1c,0xc2,0x56,0x3d,0xa6,0x3e,0xbd,0xb5,0xee,0x9f,0xbf,0xa2,0xb1,0x3b,0x9d,0x26,0x49,0xeb,0x21,0xad,0x1a,0x31,0xe7,0x2a,0xd4,0x3d,0xd6 -,0x2d,0xe7,0xaf,0x24,0x97,0xb3,0xb0,0xa4,0x2c,0xaf,0x42,0x37,0x48,0x37,0x38,0x3e,0x67,0xb5,0x2f,0x9d,0xae,0xdd,0xa4,0x36,0xaf,0xc5,0xd9,0xb7,0x2a,0x28,0x1c,0x1c -,0x29,0x23,0x3c,0x7a,0xa8,0x4c,0x9c,0xad,0xb9,0x9f,0xe7,0xab,0xb0,0xbc,0x4a,0xc4,0x3f,0xae,0x21,0x43,0xbb,0x21,0x5f,0xcc,0x38,0x26,0x2e,0x34,0x41,0x35,0x5a,0x48 -,0xaf,0x49,0xb2,0xae,0xaf,0x9f,0xd1,0x9e,0xb2,0xb7,0xd2,0x37,0x3e,0x33,0x48,0x2f,0x2b,0x22,0xbf,0x28,0x54,0xd1,0x24,0xb8,0x43,0xbe,0xb5,0xab,0xbc,0x68,0xa5,0x5b -,0x52,0x78,0x30,0x4f,0x26,0x5d,0xf3,0x52,0xc3,0xac,0xac,0xad,0xb1,0xaf,0xcc,0xc8,0xb9,0x33,0xb0,0x24,0x1f,0x21,0x27,0x26,0x1c,0xe6,0x40,0x52,0xa5,0xae,0xb7,0xa8 -,0xaa,0xaf,0xad,0xa1,0xcb,0xc7,0xc5,0x64,0xbd,0x7a,0x3c,0x47,0x28,0x43,0xce,0x1d,0x40,0x20,0x28,0x45,0x22,0xb5,0x37,0x39,0xa8,0xbc,0x9e,0xca,0xa0,0xa0,0xbd,0x9d -,0xd4,0xb9,0xe8,0x5a,0x48,0x28,0x2d,0x31,0x1f,0x2d,0x2e,0x6c,0x54,0xe7,0x57,0x68,0xb0,0x39,0xa9,0xd2,0xbd,0xa8,0x37,0xbb,0x5f,0x1f,0x43,0x2b,0x45,0xff,0xcb,0xa0 -,0xde,0xad,0xa7,0xca,0xad,0xb2,0xbd,0xbc,0x5e,0xde,0x2e,0x24,0x1e,0x1a,0x1f,0x36,0x3a,0x36,0xcb,0xb0,0xbb,0xb6,0xa1,0xb2,0xa8,0x7a,0xab,0xa1,0xf0,0xbf,0xf8,0xbb -,0xbf,0xf7,0x21,0xb7,0x2d,0x28,0x74,0x2f,0x4e,0x1d,0x2f,0x2e,0x4b,0x43,0x4b,0xbc,0xbf,0xad,0xa0,0xb9,0xa0,0xaa,0xd0,0xa3,0x65,0xbf,0x3b,0x49,0x46,0x26,0x36,0x2b -,0x32,0x34,0x2d,0xc8,0x39,0xef,0xb9,0x74,0xb4,0xc5,0xb6,0xb1,0xd7,0xda,0x32,0xfd,0x5c,0x25,0x44,0x28,0xcd,0xbe,0x62,0xa9,0xaf,0xce,0xaa,0xaa,0xb0,0xb1,0x40,0xad -,0x36,0x2c,0x3c,0x24,0x28,0x21,0x4c,0x3b,0x2f,0x4e,0x54,0xdc,0xb9,0xad,0xae,0xbf,0xc4,0xac,0xc1,0xb0,0xb4,0xca,0xba,0xbc,0xed,0xc2,0xd7,0x28,0x5c,0x34,0x2f,0x30 -,0x26,0x2f,0x2f,0x2c,0x42,0x3e,0xc8,0xca,0xb5,0xa1,0xcd,0xa0,0xab,0xbe,0xa8,0xcc,0xb8,0xcb,0x28,0x3d,0x2e,0x2f,0x3a,0x29,0x54,0x4b,0x36,0xbb,0xc7,0xd1,0xc3,0xb1 -,0xbe,0xc2,0xba,0xdf,0xe3,0x26,0xe0,0x34,0x27,0x39,0x3b,0x67,0xce,0xbb,0xb9,0xb4,0xd2,0xb1,0xa8,0xa8,0xaf,0xb7,0x63,0x46,0x4a,0x31,0x3c,0x2f,0x29,0x3c,0x31,0x2c -,0x64,0xe1,0xc3,0x5b,0xf8,0xa9,0x3c,0x4b,0xa8,0xce,0xab,0xb7,0xca,0xaf,0x53,0xbe,0xbc,0x66,0xca,0x2e,0x42,0x37,0x26,0x4b,0x1f,0x3f,0x30,0x38,0x3b,0x42,0xa7,0xbb -,0xad,0xac,0xb0,0xb0,0xd6,0xd9,0xaa,0xd4,0x54,0x7b,0x28,0x26,0x42,0x48,0xbd,0x47,0x4d,0xcc,0xdb,0xd1,0xb2,0xcc,0xc1,0xb3,0x4d,0x54,0xc6,0x48,0x3a,0xc7,0x26,0x4b -,0x2b,0x35,0x4e,0xee,0xb6,0xb2,0xb1,0xd6,0xb9,0xb1,0xba,0xc5,0xb4,0x5c,0xb6,0x31,0x3a,0x76,0x23,0x35,0x3d,0x38,0x43,0x4a,0x5c,0x46,0x3d,0xbf,0xc7,0xda,0xdc,0xdf -,0xac,0xc4,0xaa,0xb0,0xd5,0xb8,0xc7,0xee,0xd1,0xd3,0x34,0x35,0x27,0x58,0x2a,0x3a,0xfa,0x22,0xc9,0x5a,0xc4,0xb9,0xc6,0xa3,0xbd,0xb0,0x64,0xbe,0xca,0x3d,0xb4,0x35 -,0xe5,0x31,0x27,0x6a,0x5d,0x40,0x48,0xc0,0x63,0x55,0xba,0xbe,0xbc,0xc6,0xbc,0xc5,0x53,0xda,0x40,0x3e,0x36,0x44,0x3e,0x3d,0x55,0x3c,0xbd,0xcc,0x46,0xaf,0xb9,0xce -,0xae,0xbc,0xd9,0xcb,0xc6,0x42,0x3c,0x5d,0x3a,0x32,0x42,0x4e,0x5e,0x5b,0x3d,0x59,0xd9,0xec,0xc2,0x65,0x63,0xb6,0xe2,0xcf,0xb6,0xcc,0xb0,0xbc,0xf4,0xc6,0xdb,0x75 -,0x34,0x42,0x3c,0x2d,0x36,0x38,0x3d,0x42,0x64,0xc0,0xbc,0xb9,0xc2,0xaa,0xb1,0xc0,0xb2,0x6d,0xe7,0x4c,0xd9,0x3f,0x2a,0x39,0x33,0x3b,0xd3,0x4a,0x5e,0x55,0xef,0xe8 -,0xcc,0xb4,0xf6,0xb9,0xcd,0xce,0xc6,0x44,0x59,0x43,0x5d,0xdd,0x3d,0x42,0xd9,0x43,0x62,0xca,0xd2,0xbc,0xec,0xb1,0xc3,0x63,0xb8,0x6b,0x4f,0x4f,0xe8,0x50,0x39,0x43 -,0x3f,0x4c,0x4e,0x41,0x52,0xe5,0x5a,0xcc,0xf6,0xd7,0xd4,0x56,0xb7,0xe3,0xcb,0xbc,0xbc,0xc2,0xc6,0xc8,0xef,0x59,0x39,0x44,0x32,0x34,0x3d,0x3c,0x3e,0x42,0x53,0x56 -,0xce,0xcc,0xb6,0xb2,0xc0,0xad,0xb5,0xc9,0xbb,0x47,0x4a,0x46,0x3a,0x49,0x3d,0x3a,0x3d,0x4a,0xf4,0xde,0x4c,0xce,0xcb,0xcb,0xba,0xc8,0xcf,0xd2,0xe2,0x55,0x49,0x4d -,0x46,0x72,0x4c,0x47,0xfd,0x45,0x7d,0x79,0xdb,0xc0,0xbe,0xbd,0xc0,0xcd,0xd7,0xd6,0xc5,0xed,0x46,0x74,0x45,0x57,0x49,0x3b,0x64,0x3c,0x50,0x49,0x48,0xd9,0x4c,0xdf -,0x75,0xe7,0xbd,0xcb,0xc9,0xbc,0xb6,0xbb,0xca,0xbf,0xcb,0x67,0x46,0x5a,0x38,0x33,0x3a,0x36,0x3b,0x4f,0x50,0xfe,0x4f,0x62,0xb6,0xbf,0xb6,0xbf,0xb9,0xba,0xda,0x7e -,0x4a,0x4b,0x40,0x3c,0x5f,0x4f,0x5b,0xdc,0x4e,0xd1,0xd6,0x4b,0xd3,0xcf,0xcd,0xcd,0xd7,0xcb,0xf4,0x42,0x4d,0x5e,0x3e,0x45,0x62,0xf6,0x4f,0x5e,0xda,0xef,0x65,0xcf -,0xc9,0xc0,0xbf,0xca,0xc4,0xe0,0xdb,0x74,0x54,0x71,0x43,0x72,0x67,0x40,0x49,0x4a,0x4a,0x4b,0x51,0x4c,0x56,0xd5,0xd1,0x79,0xd2,0xc4,0xc7,0xcf,0xc0,0xba,0xcf,0xc8 -,0xc3,0xcf,0xd8,0x3c,0x3e,0x3f,0x36,0x41,0x3a,0x47,0x6f,0x50,0xe3,0xcf,0xca,0xc5,0xd2,0xbd,0xb6,0xcc,0xd4,0x5c,0xe7,0x54,0x4a,0x4f,0x3a,0x57,0x4d,0xf2,0xd3,0x76 -,0xe1,0x62,0xdd,0xc0,0xdf,0xcd,0xdc,0xd5,0xd9,0x6d,0x75,0x3a,0x43,0x5f,0x5d,0x68,0x68,0x57,0x4e,0x73,0xc9,0xe4,0xfb,0xd8,0xd4,0xcd,0xc5,0xd1,0xd2,0x66,0x6b,0xe3 -,0x4f,0x76,0x4a,0x4e,0x58,0x4f,0xdc,0x4c,0x3f,0x3f,0x4d,0x6c,0x5f,0xd0,0xd5,0xd0,0xc1,0xbf,0xbd,0xbf,0xdd,0xc9,0xde,0xc9,0xda,0x47,0x52,0x3c,0x42,0x3a,0x3d,0x4b -,0x40,0x5d,0xd4,0xc2,0xc5,0xde,0xd6,0xdb,0xc4,0xbd,0xc4,0xd9,0xe3,0xe1,0x5c,0x4c,0x3f,0x3c,0x43,0x7c,0xfc,0xd6,0xdd,0xf1,0x78,0xfc,0xcb,0xda,0xdd,0xcc,0xe7,0xdc -,0xd2,0x6c,0x59,0x49,0x44,0x48,0x54,0xea,0xde,0x79,0xce,0xd2,0x73,0xd8,0x4e,0x64,0xcf,0xe0,0xc3,0xde,0xcd,0xdd,0x4e,0xf7,0x4a,0x5d,0x4f,0x48,0x72,0x78,0x71,0x64 -,0x47,0x54,0x4d,0x57,0xd5,0xcd,0xbf,0xd2,0xc2,0xc2,0xcc,0xd3,0xec,0x60,0x6e,0xcb,0xf5,0x46,0x3d,0x3d,0x3d,0x40,0x48,0x4d,0xe8,0xe2,0xc9,0xc0,0xc7,0xc5,0xd6,0xd0 -,0xcd,0xce,0xcd,0xde,0x6f,0x55,0x49,0x4a,0x4c,0x46,0x4b,0x4f,0xd3,0xd3,0xe2,0xd3,0x5a,0xe8,0x5d,0xef,0xd1,0x6b,0xdb,0xde,0xe4,0xdd,0x64,0x66,0x64,0x56,0xdc,0xed -,0xec,0x73,0x58,0xd9,0xfb,0x75,0x53,0x50,0xda,0xd5,0xc3,0xcb,0x6a,0x5e,0x48,0x5a,0x69,0x58,0xee,0x4d,0x65,0xf8,0x5b,0xed,0x54,0xf6,0xe8,0xde,0xc9,0xcb,0xd5,0xce -,0xc3,0xcd,0xe7,0x57,0x58,0x4f,0x78,0xe1,0x62,0x50,0x3e,0x3c,0x51,0x57,0x68,0x6c,0x5a,0xc6,0xc9,0xcb,0xc6,0xc9,0xcc,0xee,0xe8,0xcf,0x7a,0x5b,0x54,0x5e,0xfb,0x54 -,0x44,0x43,0x5b,0xd2,0xce,0xd2,0xdc,0x54,0x50,0xe8,0xdc,0xdf,0xe8,0x55,0x70,0xdc,0xd3,0x70,0x4e,0x5f,0xf2,0xe4,0xec,0xe6,0xdc,0x61,0x7e,0xe5,0x67,0x68,0x46,0x6d -,0xca,0xc4,0xcb,0x5b,0x6f,0x5e,0x4e,0x63,0x5a,0xff,0x57,0x4d,0xe6,0xf3,0x6e,0x54,0x5c,0xce,0xcb,0xcf,0xce,0xd5,0xcb,0xcf,0xe0,0x63,0x51,0x51,0x4e,0x70,0xe5,0x6c -,0x4a,0x47,0x50,0x7b,0x6c,0xea,0x64,0xe7,0xcc,0xcd,0xc3,0xe0,0xea,0x7c,0xfa,0xd4,0xd5,0xe6,0x5c,0x57,0xed,0x68,0x4b,0x47,0x47,0xf0,0xf6,0xe5,0xc9,0xe6,0x75,0x6c -,0xe5,0xe0,0x64,0x67,0x6a,0xda,0xc8,0xee,0x5d,0x5f,0x56,0x73,0x68,0xef,0xd0,0x66,0x5d,0x72,0xe4,0xdb,0x52,0x4d,0xe2,0xc8,0xcf,0xd5,0xd7,0xef,0xf8,0x5c,0x54,0x53 -,0x4a,0x56,0xfd,0xd2,0xdc,0x59,0x5e,0x5d,0xe3,0xd3,0xd9,0xc4,0xda,0xde,0xd3,0x64,0x5a,0x4f,0x4b,0x4a,0x58,0xeb,0xec,0x63,0xd1,0x75,0x58,0x5b,0x5a,0x7c,0xf2,0xc6 -,0xc6,0xca,0xcf,0x71,0x5f,0x53,0xf6,0xd9,0x67,0xf3,0x59,0x6e,0x55,0x4d,0x61,0x51,0x60,0xee,0xe0,0xde,0xda,0xd9,0xd9,0xf7,0xea,0x71,0x4f,0x5d,0xdc,0xc2,0xd1,0x5a -,0x5a,0x4e,0x63,0x76,0x5f,0x79,0x64,0xee,0x69,0xf7,0xff,0x58,0xe4,0xef,0xe7,0xd2,0xca,0xd4,0xd7,0xdd,0x64,0x49,0x45,0x50,0x5f,0xd6,0xdd,0xd9,0xe5,0x5e,0x66,0xd4 -,0xd7,0xd4,0xfe,0xdb,0xca,0x53,0x57,0x4f,0x59,0x59,0x48,0x51,0xef,0xce,0xc7,0xd2,0xe8,0x60,0x56,0x53,0x50,0xdf,0xd6,0xd6,0xd7,0xda,0xea,0x74,0x78,0xe4,0xd5,0x65 -,0x4f,0x6a,0x64,0x6f,0x6d,0x58,0x55,0x4d,0x59,0x66,0xd8,0xc1,0xd9,0x6e,0x75,0x5a,0x6d,0x79,0xc4,0xc2,0xd0,0xdd,0x49,0x4b,0x5d,0xe4,0xe3,0x79,0x6e,0xe7,0x5f,0x48 -,0x53,0x5c,0x67,0xe4,0xd3,0xe0,0xcd,0x6e,0x5e,0x74,0x67,0x63,0x6c,0xd7,0xd7,0xd5,0xed,0xfd,0x62,0xef,0x68,0xef,0xca,0xcb,0xd6,0xfc,0x52,0x6b,0x46,0x40,0x56,0x6c -,0xd8,0x4e,0x52,0x7e,0xd6,0xdb,0xe8,0xe0,0xfe,0x64,0x68,0xde,0xd7,0xce,0xcd,0xdb,0x66,0x43,0x64,0x6b,0x69,0xbb,0xcd,0xca,0xeb,0x4b,0x57,0x39,0x66,0xd3,0x78,0x5c -,0xea,0xcc,0xf3,0x61,0x51,0x48,0x49,0xda,0x70,0xd9,0xc7,0xc8,0xc8,0xd4,0x69,0x5d,0x4c,0xd1,0x55,0x49,0xdd,0xec,0xc9,0xe9,0xbd,0x5e,0x3e,0x4e,0x45,0xf2,0x7b,0x5b -,0xb4,0xe4,0x44,0x57,0x46,0x5a,0x3f,0xe6,0xbf,0xbc,0xbd,0xcd,0x60,0x3e,0x3c,0xd9,0xc9,0xc0,0x63,0x5a,0xe3,0x4a,0x3e,0x3c,0xbf,0xcb,0xd2,0xc1,0x71,0x48,0x4d,0x4c -,0xd9,0xcd,0xd2,0xde,0x62,0xce,0x4b,0xed,0x4a,0xe1,0xdd,0x45,0xce,0xce,0xd2,0x61,0xce,0x52,0x49,0xc3,0x5f,0x57,0xe4,0x4e,0xde,0x49,0xc7,0xcd,0x45,0xd6,0x3b,0x5c -,0xdf,0xd9,0xcc,0x4b,0xc2,0xbb,0x5c,0x64,0x49,0x6c,0x65,0x5a,0x79,0x49,0xb3,0xd7,0x6e,0xd7,0x49,0x58,0x44,0xc6,0xcd,0x42,0x53,0xd7,0x55,0x7c,0xe5,0x5c,0xe4,0x51 -,0xbf,0xe9,0x46,0xba,0xce,0x5e,0xc5,0xcc,0x5c,0x34,0x30,0xe6,0xdb,0xbd,0x64,0x4f,0xc7,0xc9,0x46,0x3f,0xc1,0xce,0xc3,0x7e,0x5e,0xfe,0xeb,0x48,0x52,0x55,0xd8,0xd8 -,0xe4,0xcb,0x3f,0x59,0xd9,0x4a,0xc4,0xcf,0x56,0xcd,0x39,0xbf,0x50,0x59,0xc5,0xde,0xce,0xef,0x60,0x55,0x45,0x4e,0xc8,0x74,0x6d,0x3f,0xcb,0xf4,0x48,0x50,0xc4,0x3e -,0xca,0xd9,0x48,0xc0,0xad,0x31,0xcc,0xbe,0x9e,0xa3,0x4c,0xdb,0x20,0xb1,0x2b,0x9d,0x18,0x3a,0x1c,0x01,0x11,0x09,0xa8,0xd9,0xea,0x64,0x2a,0x8d,0x8f,0x9d,0xa2,0x97 -,0xae,0x9f,0x87,0xbe,0xb5,0x8b,0x38,0xd0,0xa0,0x15,0x8d,0x88,0x93,0x98,0x8a,0x4a,0x1c,0x1c,0x08,0x0d,0x00,0x04,0x04,0x07,0x02,0x07,0x03,0x0e,0x08,0x11,0x47,0x17 -,0x30,0xaf,0x9a,0x95,0x9f,0x9a,0x92,0xa1,0x8d,0x9d,0x92,0x9b,0x9d,0x8d,0x86,0x83,0x85,0x83,0x83,0x84,0x80,0x8c,0x85,0x8b,0x15,0xa8,0x86,0x88,0x0a,0x16,0x0f,0x0a -,0x17,0x03,0x05,0x04,0x00,0x08,0xa3,0x0a,0x08,0x00,0x08,0xaf,0x04,0x04,0x08,0x33,0xb6,0xaa,0xbc,0x26,0x0c,0x1e,0x43,0x9f,0x81,0x8b,0x9d,0x43,0x8f,0x85,0x80,0x83 -,0x80,0x8c,0x88,0x8f,0x90,0x88,0x99,0x9d,0x9d,0x8f,0xdf,0x9e,0x37,0x29,0x10,0x0b,0x23,0x18,0x0e,0x05,0x0c,0x34,0x11,0x0c,0x18,0x09,0x07,0x04,0x07,0x0f,0x0f,0x0f -,0x06,0x16,0x33,0x48,0x20,0x22,0x4c,0x23,0xb4,0xae,0xa9,0x97,0x88,0x91,0x97,0x91,0x89,0x87,0xaf,0x97,0x80,0x93,0x8f,0x89,0x80,0x8d,0x96,0x9a,0xd3,0x8e,0x0c,0x24 -,0x34,0xc3,0x95,0x16,0x3c,0x1b,0x0c,0x0c,0x06,0x00,0x0a,0x23,0x26,0x39,0x20,0x0c,0x00,0x03,0x0c,0x2d,0x0f,0x1a,0xba,0x0f,0xc2,0x8b,0x87,0x82,0x84,0x83,0x93,0xab -,0x9a,0x88,0x8a,0x84,0x85,0x8f,0x8d,0x9b,0x9c,0x36,0xa7,0x1f,0x29,0xb4,0x1f,0x2f,0x84,0x8c,0xba,0x8b,0x1d,0x2e,0x0e,0x14,0xa0,0x0b,0x1b,0x61,0xd1,0xbf,0x11,0x08 -,0x08,0xa5,0x0e,0x20,0xb6,0x03,0x14,0xb2,0x86,0x9b,0x92,0xb4,0x09,0x0f,0x9f,0x1b,0x15,0x87,0x26,0x46,0x0f,0x0a,0x85,0x18,0x09,0x0c,0x00,0x36,0xbf,0x90,0x93,0x0d -,0x40,0x16,0x07,0x18,0x1e,0xcb,0x24,0x93,0x72,0x0f,0xbf,0xaf,0x31,0x2e,0xf0,0x0a,0x09,0x06,0x3b,0x8e,0xa2,0xfc,0x9b,0x96,0x9b,0x85,0x9e,0xb1,0x84,0x86,0x80,0x82 -,0x80,0x83,0x82,0x89,0x4e,0xc7,0x91,0x89,0xa3,0x34,0x1b,0x80,0xab,0xbb,0x8a,0x9c,0x4e,0x00,0x1c,0x90,0x83,0x33,0x0f,0x2e,0x9c,0x03,0x0f,0x3c,0x00,0x06,0x00,0x0b -,0x00,0x0c,0x98,0x01,0x0b,0x06,0x02,0x19,0x09,0x17,0x03,0x0b,0x25,0x70,0x4b,0x90,0x32,0x10,0x24,0x00,0x9e,0xc4,0x9f,0xa7,0x27,0x85,0x88,0x83,0x83,0x82,0x80,0x35 -,0x1d,0x80,0x86,0x80,0x8d,0x89,0x83,0x8e,0x8d,0x15,0x13,0x8a,0x8f,0x0e,0x0a,0x0c,0x87,0xf1,0x1a,0x3c,0x00,0x14,0x00,0x0b,0x1a,0x08,0x0e,0x07,0x15,0x0d,0x04,0x0d -,0x16,0x14,0x09,0x0c,0x87,0x8f,0x90,0x84,0x93,0x80,0x80,0x80,0x80,0x88,0x9e,0x81,0x82,0x80,0x80,0x92,0x88,0x2c,0x9a,0x8a,0xbf,0x22,0x02,0x17,0x02,0x15,0x8f,0x08 -,0x0b,0x0c,0x09,0x08,0x02,0x02,0x05,0x03,0x0a,0x06,0x00,0x14,0x09,0x00,0x04,0x05,0x04,0x02,0x06,0x06,0x12,0x8d,0xe5,0x0a,0x8e,0x9f,0xa3,0x19,0x32,0x91,0xa9,0x82 -,0x8c,0x82,0x8d,0x91,0x86,0x86,0x84,0x82,0x85,0x87,0x89,0x89,0x82,0x80,0x81,0x80,0x8b,0x8a,0x9c,0x15,0xa9,0x2c,0x9b,0x8b,0xb7,0x36,0x2e,0x07,0x37,0xb2,0xad,0x0c -,0x03,0x23,0x03,0x9d,0x3e,0x1e,0x1c,0x10,0x19,0x05,0x01,0x0f,0x10,0x0b,0xb4,0x1a,0x12,0x18,0x18,0x1c,0x08,0x12,0xed,0x03,0x1c,0x12,0xa3,0x87,0x1f,0x91,0xa1,0xaa -,0x21,0x10,0xa3,0x9a,0x60,0x86,0x98,0x80,0x8c,0xa5,0x8b,0xba,0x47,0x1c,0x2b,0x37,0x1d,0x3e,0x87,0x0e,0xc1,0x94,0x1f,0x0c,0x00,0xdc,0x96,0x16,0x9b,0x1f,0x21,0x48 -,0x01,0x19,0x0e,0x0d,0x06,0x03,0x06,0x01,0x1e,0x92,0x66,0x8f,0x90,0xb7,0x95,0xd2,0x8f,0x80,0x82,0x80,0x80,0x80,0x83,0x83,0x84,0x81,0x85,0x81,0xb5,0x26,0xac,0xa7 -,0x80,0x9e,0x9e,0xae,0x13,0x1c,0x00,0x0a,0x1e,0x08,0x15,0x1e,0x0d,0x03,0x00,0x04,0x05,0x00,0x02,0x00,0x02,0x00,0x04,0x39,0x13,0x07,0x14,0x0d,0x0e,0x04,0x0b,0xa0 -,0x19,0x97,0xc4,0xaf,0x8e,0x2f,0xa4,0x8f,0x2c,0x98,0xad,0x1c,0x8d,0x92,0x80,0x86,0x86,0x80,0x8a,0x81,0x8b,0x8f,0x80,0x89,0x87,0x80,0x88,0x89,0x9b,0xb4,0xae,0xa5 -,0x1b,0x0d,0x13,0x2b,0x10,0xa6,0x88,0x0d,0xd1,0x1b,0x04,0x0b,0x08,0x21,0x0a,0x11,0x1e,0x0d,0x22,0x08,0x0c,0x33,0x14,0x2d,0x0e,0x01,0x16,0x08,0x95,0x85,0xb6,0x8c -,0xdc,0x27,0x23,0x0f,0x9d,0xa0,0x9f,0x97,0x64,0x90,0xf8,0x1b,0xb7,0x25,0x12,0xbf,0x0d,0x20,0x09,0x3f,0x83,0x37,0x9c,0xd3,0x23,0x13,0x07,0x22,0xa0,0x2c,0x8e,0xdb -,0xb5,0x95,0x19,0x8d,0x91,0xbd,0x38,0x12,0x3f,0x11,0x3c,0x80,0xae,0x2e,0x97,0x16,0x17,0x06,0x12,0x9f,0xbd,0x95,0x79,0xb2,0x9d,0x8e,0x8c,0x9d,0xbe,0x8e,0x9a,0xa0 -,0x9b,0x93,0x80,0x87,0x80,0x88,0x88,0x95,0xa1,0x8f,0x84,0x8b,0x8f,0x8f,0x8d,0x8b,0x14,0x26,0x14,0x05,0x05,0x02,0x00,0x03,0x00,0x38,0x15,0x00,0x0a,0x00,0x05,0x00 -,0x00,0x08,0x09,0x09,0x17,0x0d,0x0d,0x08,0x16,0x0e,0x10,0x14,0x0e,0x16,0x1c,0x2b,0x83,0x88,0x93,0x84,0x88,0x94,0xa8,0x8c,0x83,0x86,0x85,0x80,0x89,0x83,0x95,0x8c -,0x8c,0x9d,0x94,0xba,0x0c,0x37,0x19,0x91,0x80,0x2f,0x9c,0x9e,0x7b,0x0f,0x0f,0x87,0x95,0x35,0x83,0x53,0x99,0xb0,0x41,0xa7,0xdd,0x1e,0x07,0x11,0x13,0x0b,0xa0,0x84 -,0x49,0x35,0xdd,0xdc,0x16,0x0d,0xa8,0xae,0x23,0x96,0x24,0x1f,0x18,0x12,0x14,0x07,0x08,0x05,0x02,0x06,0x02,0x18,0x91,0x1b,0x9f,0x4b,0x21,0x1e,0x00,0xcf,0x9f,0x1d -,0x9b,0xaa,0xaf,0x35,0x29,0x98,0x3a,0x26,0xea,0x12,0x1d,0x29,0xa0,0x80,0x90,0x8a,0x8f,0x99,0x98,0x10,0xaf,0x8e,0xb6,0x98,0xc3,0x9b,0xbc,0x4f,0x44,0x1d,0x1f,0x1b -,0x0d,0x26,0x2f,0x1e,0x80,0x8a,0x95,0x8f,0x92,0x98,0x7a,0xa1,0x84,0x9b,0x84,0x83,0x88,0x84,0x8d,0x8c,0x92,0x95,0x8c,0xb2,0x20,0xaa,0xc5,0x84,0xb5,0xcc,0xd3,0x0c -,0x01,0x00,0x02,0x0d,0x09,0x09,0x0e,0x0e,0x0a,0x04,0x0a,0x0b,0x05,0x04,0x02,0x00,0x04,0x04,0x8f,0x1e,0x0f,0x2c,0x09,0x0d,0x04,0x0b,0x9d,0xa7,0x97,0x8b,0x8e,0x98 -,0x9b,0x91,0x89,0xa8,0xa7,0x4e,0x2f,0x9c,0x38,0x80,0x90,0xa4,0x8c,0x9f,0x29,0xbf,0xbe,0x86,0x8e,0x8d,0x83,0x86,0x84,0x92,0x8a,0x8d,0x9e,0x9d,0xcc,0x29,0xa2,0x21 -,0x80,0x92,0x22,0xa7,0x35,0x19,0x0b,0x10,0xc8,0xae,0x39,0x9e,0xa5,0xa9,0x1c,0x18,0x3e,0x10,0x0e,0x0d,0x03,0x0d,0x06,0x97,0xd4,0x0d,0xd7,0x14,0x0c,0x03,0x09,0x39 -,0x4e,0x3e,0xab,0xbc,0x47,0x14,0x12,0x2b,0x0d,0x09,0x07,0x06,0x06,0x07,0x8b,0xa0,0x1d,0xb1,0xb6,0x22,0x0f,0x2a,0x89,0x8c,0x8f,0x86,0x8d,0x8d,0x9e,0x9a,0x91,0xa6 -,0xe9,0x1f,0x17,0x35,0x41,0x83,0x89,0x9e,0x8e,0xb9,0xbc,0x19,0x20,0x91,0xab,0xdb,0x98,0xa6,0xdf,0x2d,0x24,0xa5,0x2f,0x1d,0x27,0x38,0xae,0x93,0x80,0x85,0x85,0x81 -,0x84,0x86,0x8f,0x8c,0x82,0x88,0x88,0x87,0x8f,0xa6,0x3a,0x17,0x16,0x07,0x02,0x01,0x01,0x01,0x04,0xb3,0x0e,0x07,0x0f,0x06,0x04,0x00,0x06,0x0f,0x0a,0x0a,0x16,0x10 -,0x07,0x05,0x08,0x12,0x09,0x07,0x06,0x0d,0x09,0x2f,0x80,0x95,0x94,0x8d,0xa0,0xa3,0x25,0x98,0x8a,0x94,0x8d,0x90,0x8e,0x96,0xaa,0x95,0x8e,0x9f,0xb2,0xbb,0x9e,0x9a -,0x87,0x80,0x87,0x85,0x85,0x8a,0x98,0x2b,0x8f,0x8e,0x9f,0x98,0x95,0x90,0xc9,0xdc,0xbd,0xa3,0x1f,0x24,0x13,0x24,0x0e,0xa2,0x86,0x43,0xa2,0x2e,0x19,0x0c,0x00,0x18 -,0x22,0x15,0x4d,0x1d,0x24,0x0f,0x0d,0x18,0x1e,0x0f,0x08,0x03,0x0c,0x03,0xb5,0x8f,0x16,0x56,0x14,0x13,0x06,0x02,0x2f,0x56,0x29,0xc6,0xbc,0xbd,0x2d,0x2f,0x9a,0xa4 -,0x3c,0x1f,0x28,0xc8,0x26,0x88,0x85,0x9b,0x8b,0x9e,0xa7,0x45,0x23,0x89,0x89,0x8f,0x8b,0x94,0x96,0xa7,0xb7,0xa0,0xb7,0x1d,0x0f,0x0a,0x13,0x0a,0x91,0x98,0x24,0xa1 -,0x21,0x2b,0x11,0x12,0x92,0x99,0x9a,0x8a,0x8b,0x83,0x87,0x8b,0x85,0x88,0x8f,0xb6,0xa7,0x95,0x98,0x80,0x87,0x94,0x99,0x2b,0x15,0x04,0x02,0x25,0x16,0x12,0x1c,0x1a -,0x0e,0x05,0x02,0x0a,0x07,0x02,0x02,0x04,0x09,0x0c,0x8c,0x33,0x16,0xd0,0x19,0x1b,0x0c,0x26,0x8a,0x95,0x92,0x8f,0xa7,0xba,0x24,0x23,0x34,0x21,0x1a,0x0b,0x10,0x1b -,0x23,0x85,0xaa,0xa6,0x9e,0x44,0xa9,0x12,0xc6,0x87,0x8b,0x8d,0x90,0x8f,0x9c,0x34,0x49,0x94,0xa6,0x33,0x1f,0xce,0x1f,0xd1,0x83,0xad,0xa4,0xba,0x2c,0x1d,0x09,0xb6 -,0x8e,0xaf,0x9a,0x99,0xa2,0x47,0x26,0xb5,0x94,0x9f,0xa4,0x3b,0x4e,0x17,0x9c,0x85,0x28,0x9c,0xa7,0xe2,0x1f,0x0a,0x61,0xbb,0x35,0xfc,0x26,0x37,0x13,0x0d,0x1f,0xb6 -,0x3b,0x0e,0x08,0x14,0x06,0xac,0x8e,0xca,0x8b,0xa8,0x9b,0x1f,0x09,0xb2,0xb4,0x2d,0x48,0x40,0xc5,0x0f,0x0c,0x38,0x1a,0x12,0x0c,0x06,0x09,0x06,0x8c,0x97,0x2e,0x8c -,0xb1,0xae,0x17,0x0d,0x9b,0x9f,0x96,0x8e,0x99,0x8d,0xc1,0x33,0xaa,0xd0,0xc7,0x1c,0x1e,0x3b,0x25,0x81,0x97,0xa0,0x88,0x9c,0x9e,0x19,0xce,0x82,0x88,0x87,0x82,0x83 -,0x85,0xaf,0xa5,0x93,0xb4,0xaa,0x29,0x3c,0x2e,0xdf,0x86,0x2d,0x36,0xca,0x0b,0x13,0x05,0x10,0xb6,0x2a,0xd7,0x45,0x21,0x1b,0x07,0x0c,0x1b,0x1b,0x2a,0x1c,0x9c,0xd1 -,0x96,0x86,0x3a,0x96,0xaf,0x15,0x13,0x05,0x27,0x48,0x05,0x09,0x0c,0x0b,0x03,0x00,0x03,0x08,0x08,0x08,0x04,0x0a,0x07,0xab,0x8f,0x1c,0x9a,0xa2,0x9f,0xa4,0x3a,0x8e -,0x8c,0x8f,0x87,0x8b,0x8a,0x8f,0xa6,0x8d,0x95,0x98,0xad,0x31,0xae,0xad,0x81,0x89,0x8f,0x81,0x88,0x87,0x8e,0xa3,0x84,0x89,0x87,0x86,0x8c,0x89,0x9f,0x42,0xa3,0xc2 -,0x27,0x0a,0x05,0x0b,0x06,0xc2,0x0b,0x09,0x1e,0x0d,0x06,0x00,0x03,0x1b,0x18,0x09,0x16,0xb0,0x8a,0x96,0x9a,0x8c,0x8a,0x88,0x9e,0xbf,0x2a,0xa4,0x80,0xae,0xd1,0xcf -,0x16,0x0b,0x00,0x04,0x08,0x04,0x07,0x0e,0x18,0x26,0x0c,0x0a,0x0e,0x0e,0x0d,0x03,0x0f,0x14,0x9b,0x84,0xa6,0x8a,0x91,0xa7,0xad,0x17,0xaf,0x8c,0x8f,0x89,0x8c,0x85 -,0x8c,0xda,0xae,0xa8,0x9f,0xbb,0x36,0x9e,0xa1,0x87,0x80,0x8b,0x85,0x8a,0x8c,0x96,0x1a,0x9c,0x8e,0x97,0x8d,0xa3,0x94,0x3a,0x09,0x16,0x0a,0x06,0x06,0x00,0x0e,0x07 -,0x3b,0x55,0x0d,0xc1,0x28,0x15,0x12,0x16,0x8f,0x86,0x86,0x84,0x84,0x80,0x86,0x9f,0x96,0x8c,0x8f,0xb8,0x12,0x1d,0x06,0x3f,0x1d,0x00,0x09,0x05,0x05,0x00,0x01,0x0b -,0x0c,0x09,0x13,0x0d,0x20,0x20,0x0f,0x20,0x29,0x2b,0x15,0x0b,0x12,0x0f,0x97,0x96,0xab,0x8f,0x97,0x8d,0x5f,0x13,0xcc,0xac,0xb7,0xa5,0x96,0x88,0x8f,0x9c,0x91,0x99 -,0x96,0xab,0x67,0xca,0xa4,0x82,0x83,0x87,0x83,0x86,0x89,0xcd,0x11,0xad,0xae,0xa5,0xaf,0x2a,0x9f,0xaa,0x18,0x0d,0x05,0x08,0x08,0x03,0x04,0x06,0x9d,0x8d,0x8e,0x8c -,0x8f,0x88,0x8a,0x97,0x8a,0x84,0x84,0x81,0x84,0x83,0x90,0x5d,0x1a,0x0b,0x04,0x01,0x00,0x01,0x00,0x15,0x14,0x06,0x07,0x09,0x0d,0x05,0x01,0x09,0x1a,0x4f,0xbb,0xc6 -,0xb9,0x4c,0x25,0x22,0x14,0x1d,0x21,0x20,0x23,0x27,0x8d,0x8f,0xad,0xa7,0xaa,0x9f,0xac,0x2d,0xaa,0x95,0x88,0x8a,0x93,0x8d,0x8c,0x97,0x98,0x94,0x95,0x8e,0x97,0x99 -,0xcc,0x99,0x90,0x9a,0x9c,0xa1,0xbb,0x76,0x23,0x3e,0x5f,0x21,0x29,0x17,0x1c,0x18,0x0d,0x0f,0x1c,0x33,0x96,0xaf,0x47,0x70,0x90,0x80,0x85,0x83,0x83,0x82,0x82,0x87 -,0x91,0x9c,0xb9,0xb5,0x1f,0x09,0x07,0x06,0x04,0x05,0x06,0x04,0x03,0x01,0x02,0x00,0x06,0x16,0x1a,0x21,0x1d,0x20,0x2e,0x1a,0x1c,0x24,0x28,0xbe,0xd5,0x3c,0xc4,0xab -,0x9e,0xad,0x4f,0xe8,0x24,0x16,0x25,0x2d,0x9f,0x8d,0x8c,0x8f,0x9a,0xa5,0x99,0x99,0x95,0x88,0x8b,0x8b,0x89,0x89,0x8d,0x9a,0xaf,0xa1,0xaf,0x4e,0x1e,0x14,0x2b,0xc6 -,0x3c,0x25,0x18,0x0c,0x13,0x0a,0x0b,0x10,0x24,0xa6,0x9b,0xa4,0xa8,0x96,0x8b,0x87,0x89,0x86,0x83,0x84,0x86,0x83,0x86,0x8e,0x9b,0x4f,0x10,0x10,0x0a,0x06,0x05,0x05 -,0x09,0x04,0x02,0x03,0x04,0x04,0x0a,0x0f,0x15,0x16,0x1d,0x1b,0x18,0x23,0x28,0x1e,0x1a,0x1d,0x3c,0x2a,0x4a,0xa7,0xd7,0xc3,0x28,0x1c,0x29,0x39,0xa6,0x98,0x93,0x8e -,0x9a,0xa2,0xa1,0xba,0xa2,0x8f,0x89,0x8b,0x8c,0x8b,0x8d,0x8c,0x8f,0xa2,0xde,0xa8,0x94,0x9f,0xd3,0xaf,0x9e,0x9f,0xd5,0x1b,0x0e,0x12,0x22,0x2d,0x19,0x2a,0x3c,0x2d -,0x4f,0x2d,0x68,0xb3,0x95,0x8b,0x8a,0x86,0x83,0x84,0x84,0x86,0x86,0x8d,0xb4,0xac,0xb4,0x2e,0x3a,0x24,0x14,0x0b,0x04,0x04,0x01,0x03,0x04,0x08,0x0a,0x0b,0x0e,0x0c -,0x09,0x0c,0x0f,0x0e,0x0e,0x0f,0x1a,0x1f,0x4b,0x41,0x28,0x43,0x3a,0x2f,0x3b,0xae,0x99,0x9e,0x94,0x8e,0x9c,0xa7,0xa7,0xad,0xa8,0x9f,0x94,0x8f,0x8e,0x8d,0x95,0x96 -,0x91,0x97,0xa9,0x53,0xa5,0x9b,0x93,0x93,0xa5,0xa7,0xa8,0xb8,0x1f,0x14,0x1c,0x3a,0x3d,0x45,0x1d,0x12,0x15,0x15,0x16,0x16,0x30,0xb4,0xa7,0x92,0x8d,0x8a,0x88,0x87 -,0x84,0x8b,0x8d,0x8e,0x91,0x93,0x94,0xa5,0x43,0x16,0x0d,0x08,0x03,0x06,0x08,0x07,0x08,0x0a,0x08,0x06,0x08,0x0b,0x0a,0x0c,0x10,0x17,0x15,0x1c,0x26,0x1b,0x1b,0x29 -,0x2c,0x23,0x23,0xc2,0x9c,0x98,0x8f,0x9c,0x9f,0x9e,0xa9,0xa4,0x9f,0x90,0x8e,0x97,0x8d,0x8c,0x94,0x9e,0xa0,0x9b,0x9e,0x9d,0xa2,0xaf,0x9a,0x8e,0x98,0xbe,0x29,0x3b -,0x3d,0x2e,0x2d,0x25,0xfc,0xa4,0x53,0x19,0x0f,0x0f,0x12,0x14,0x1d,0x2d,0xb7,0x9f,0x9d,0x9a,0x94,0x8c,0x8b,0x8b,0x86,0x84,0x86,0x84,0x85,0x8b,0x99,0xb1,0x2f,0x0f -,0x0d,0x0c,0x0a,0x0b,0x0a,0x08,0x06,0x03,0x04,0x06,0x07,0x0d,0x0e,0x10,0x1c,0x2c,0x1c,0x1a,0x1e,0x21,0x25,0x24,0x21,0x2e,0xe6,0x9f,0xa0,0x51,0x4e,0x6f,0x47,0x24 -,0x2e,0xaa,0x99,0x9b,0x9b,0x9a,0x97,0x96,0x96,0x9c,0x9d,0x8d,0x8a,0x8e,0x91,0x8b,0x8a,0x8d,0x98,0x9f,0xb9,0xbf,0xa8,0xc4,0x5f,0xd9,0xba,0x2d,0x14,0x0f,0x0c,0x0a -,0x0b,0x0f,0x18,0x18,0x25,0x49,0xcd,0xab,0x9a,0x96,0x8f,0x86,0x84,0x83,0x83,0x81,0x82,0x85,0x8d,0x97,0xaa,0x30,0x25,0x1b,0x0f,0x10,0x0c,0x05,0x04,0x02,0x04,0x04 -,0x04,0x06,0x0a,0x0d,0x12,0x17,0x18,0x16,0x19,0x15,0x19,0x27,0x2e,0xae,0x9c,0x9b,0x9b,0xa8,0xaf,0xb1,0xb7,0xa6,0x98,0x99,0x94,0x94,0x9e,0xa7,0xab,0xac,0xb7,0xaa -,0xa4,0xa3,0x9d,0x99,0x9d,0x9e,0x9d,0x9d,0xb3,0xe1,0xaf,0xa8,0xa8,0x9c,0xa2,0xb9,0xbf,0x49,0x35,0x28,0x4b,0xd9,0xc9,0xc6,0xce,0x55,0x34,0x46,0x3c,0x31,0x38,0x2c -,0x2a,0x2a,0x2b,0x3f,0x4c,0x2f,0x29,0x27,0x21,0x25,0x22,0x28,0x44,0x70,0x44,0x38,0x29,0x2c,0x35,0x3d,0x3a,0x32,0x39,0x30,0x3e,0x2c,0x29,0x3a,0x38,0x31,0x2f,0x33 -,0x35,0x5b,0xc5,0xb7,0xc6,0xd5,0x64,0x46,0x4e,0x6c,0xc0,0xb3,0xbb,0xfd,0x38,0x3c,0x4f,0x46,0xcc,0xbe,0xb2,0xaf,0xa7,0xa1,0x9c,0x98,0x93,0x92,0x94,0x96,0x95,0x92 -,0x92,0x8f,0x8f,0x94,0x9b,0x9f,0xa3,0xb2,0xcb,0xbe,0xd9,0x4f,0x3a,0x2b,0x22,0x1b,0x19,0x1b,0x18,0x17,0x16,0x15,0x15,0x17,0x1d,0x1e,0x1b,0x1a,0x1e,0x21,0x1d,0x22 -,0x2d,0x3d,0x46,0x41,0x5a,0x5b,0x49,0x3e,0xe4,0x56,0x5e,0x52,0x39,0x4f,0x41,0xdd,0x6b,0x32,0x38,0x3f,0x3c,0x7c,0xdf,0xbf,0xba,0xca,0xae,0xbc,0xb8,0xaf,0xc8,0xb5 -,0xb7,0x7e,0x2e,0x3c,0x6c,0x3f,0xd0,0xd7,0xc8,0xbb,0xae,0xaa,0xa3,0x9c,0x98,0x96,0x97,0x8f,0x92,0x8f,0x8d,0x8f,0x8f,0x90,0x8e,0x96,0x99,0x9a,0xa4,0x9f,0xa2,0xb0 -,0xbf,0xc8,0x3c,0x32,0x39,0x2e,0x1e,0x1e,0x34,0x30,0x23,0x0b,0x0b,0x0f,0x0c,0x1d,0xb8,0x15,0x00,0xae,0x97,0x0f,0x23,0x03,0x09,0x20,0xbc,0x12,0x0b,0x11,0x00,0x1b -,0x06,0x00,0x01,0x01,0x22,0x0d,0x07,0x10,0x04,0x01,0x07,0x0e,0x13,0x0c,0x0f,0x20,0x42,0x97,0x92,0xcb,0x8e,0x81,0x80,0x80,0x83,0x81,0x80,0x80,0x80,0x80,0x84,0x84 -,0x81,0x82,0x81,0x80,0x86,0x85,0x80,0x81,0x83,0x83,0x80,0x86,0x8f,0x8d,0x85,0x84,0x8e,0x9d,0xb8,0xa8,0xae,0x0d,0x03,0x05,0x09,0x08,0x05,0x06,0x02,0x00,0x01,0x08 -,0x0b,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x06,0x0b,0x04,0x05,0x09,0x20,0x46,0x12,0x03,0x0f,0x94,0x89,0x8a,0x8e,0x8f,0x8f -,0x8c,0x8e,0x97,0x98,0x86,0x83,0x85,0x81,0x81,0x82,0x82,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x84,0x83,0x83,0x88,0x8b,0x85,0x82,0x85,0x86 -,0x83,0x82,0x89,0x8f,0x8e,0x8b,0x86,0x8c,0x9e,0xae,0x9e,0xba,0x0f,0x0f,0x17,0x0f,0x0e,0x0a,0x04,0x02,0x02,0x04,0x08,0x09,0x03,0x00,0x00,0x01,0x01,0x00,0x00,0x00 -,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x03,0x02,0x02,0x06,0x05,0x01,0x01,0x06,0x0f,0x0e,0x0e,0x0a,0x04,0x06,0x0b,0x0c,0x0b,0x0e,0x16,0x12,0x12,0x1a,0x1a -,0x22,0xa7,0x8d,0x90,0x93,0x90,0x8b,0x88,0x82,0x87,0x8a,0x88,0x89,0x8b,0x8c,0x87,0x86,0x86,0x82,0x80,0x81,0x82,0x84,0x81,0x80,0x81,0x83,0x82,0x80,0x80,0x80,0x81 -,0x82,0x82,0x83,0x82,0x82,0x83,0x83,0x82,0x86,0x8e,0x8f,0x92,0x92,0x8e,0x99,0x4b,0x1b,0x13,0x15,0x11,0x0f,0x0d,0x09,0x07,0x05,0x06,0x07,0x08,0x0c,0x15,0x2c,0x9b -,0x98,0xac,0x99,0x8c,0x91,0x9a,0x96,0x88,0x81,0x82,0x83,0x8a,0x8f,0x90,0x9b,0xbd,0xbb,0xc1,0xb5,0xaa,0xaa,0xb3,0xcf,0xac,0x90,0x93,0x9d,0xa2,0xaa,0xad,0xac,0xb5 -,0x1b,0x0a,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x03,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00 -,0x01,0x01,0x02,0x03,0x06,0x05,0x02,0x01,0x01,0x02,0x04,0x16,0x1d,0x0e,0x0c,0x0f,0x18,0x28,0x2d,0x37,0x98,0x88,0x84,0x85,0x84,0x80,0x81,0x82,0x81,0x80,0x80,0x80 -,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x83,0x83,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x84,0x85,0x84,0x84,0x86,0x8a,0x89,0x84,0x83 -,0x83,0x83,0x82,0x83,0x82,0x83,0x84,0x84,0x86,0x84,0x83,0x83,0x87,0x92,0xa9,0xb2,0x73,0xce,0x1c,0x16,0x24,0x0c,0x0a,0x06,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00 -,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x01,0x02,0x01,0x02,0x00,0x03,0x04,0x0e,0x67,0x37,0x22,0x1b,0x0b,0x0d,0x0c,0x08,0x18 -,0x2a,0xc7,0xa5,0x9a,0x8a,0x84,0x86,0x85,0x87,0x88,0x83,0x81,0x81,0x82,0x85,0x8c,0x94,0xbe,0x7a,0x6b,0x5e,0xba,0xa1,0xb4,0x9d,0x88,0x89,0x87,0x8d,0x8f,0x90,0x9c -,0xa4,0x99,0x8c,0x88,0x94,0xa6,0x9d,0x94,0x94,0xa3,0xc1,0x48,0xc3,0xc4,0x3c,0x3f,0x4e,0x2c,0x25,0x18,0x15,0x0d,0x08,0x0c,0x13,0x14,0x18,0x32,0x20,0x15,0x15,0x1a -,0x18,0x0f,0x10,0x2a,0xa7,0x96,0x99,0xae,0xa3,0x9d,0xd2,0x50,0x3f,0xcb,0xa5,0xb5,0xc7,0x37,0x17,0x1b,0x16,0x13,0x18,0x0d,0x0e,0x13,0x16,0x1f,0x9a,0x8b,0x98,0xb0 -,0xbd,0x96,0x8f,0x9f,0xa5,0x97,0x98,0x9b,0xec,0xe1,0x9a,0x96,0x8d,0x89,0x86,0x83,0x84,0x83,0x84,0x83,0x85,0x84,0x84,0x82,0x82,0x83,0x89,0x8f,0x9a,0xa5,0x88,0x83 -,0x89,0x9a,0x76,0xe1,0x31,0x0c,0x09,0x0d,0x0f,0x0b,0x02,0x03,0x04,0x04,0x03,0x04,0x04,0x03,0x00,0x01,0x00,0x03,0x02,0x02,0x02,0x07,0x0b,0x0a,0x0a,0x0f,0x10,0x1e -,0xa1,0x98,0x97,0x9e,0x9c,0x94,0x9c,0xc4,0xb7,0x9f,0x95,0x9f,0xbc,0xa3,0x9d,0x9c,0x96,0x8f,0x86,0x84,0x8d,0x8f,0x8d,0x8b,0x87,0x87,0x85,0x86,0x92,0xac,0x29,0x24 -,0x20,0xce,0x91,0x91,0x9c,0xa5,0xaf,0xa7,0x62,0x21,0x33,0x3f,0x40,0x1f,0x24,0xc0,0x5a,0x1e,0x17,0x16,0x3d,0x44,0x1a,0x12,0x14,0x16,0x15,0x11,0x1a,0x1e,0x0f,0x0b -,0x07,0x06,0x05,0x1e,0xaf,0xca,0x39,0x17,0x15,0x12,0x0a,0x10,0x21,0x54,0x64,0x1e,0xb9,0x94,0x97,0xa3,0xaf,0x9c,0x97,0xa4,0xae,0xb4,0xaa,0xb6,0x4a,0x3f,0x42,0xc8 -,0x41,0x26,0x28,0x20,0x13,0xb5,0x95,0x8f,0x92,0xa5,0x99,0xb2,0x2d,0x36,0x7e,0xa1,0x9e,0x2c,0x2d,0x33,0x2d,0x21,0x16,0x27,0xeb,0xb2,0xab,0xa4,0x90,0x88,0x89,0x89 -,0x89,0x89,0x8a,0x8f,0x92,0x8e,0x8e,0x87,0x83,0x84,0x84,0x89,0x88,0x8e,0xaa,0xae,0xb6,0x9d,0xab,0x16,0x12,0x0f,0x0c,0x06,0x02,0x04,0x04,0x02,0x01,0x01,0x03,0x03 -,0x02,0x04,0x03,0x05,0x03,0x06,0x06,0x08,0x08,0x14,0xae,0xa4,0xa3,0xae,0x9e,0x9f,0x3e,0xd7,0x9b,0x8f,0x8a,0x93,0x96,0x8f,0x94,0x98,0x99,0x98,0x92,0x93,0x8f,0x90 -,0x95,0x8d,0x8f,0x8e,0x91,0x97,0x91,0x8c,0x95,0x9f,0xa1,0xa5,0x8a,0x8a,0x8e,0x8d,0x9b,0x96,0xaa,0x42,0xb4,0xf9,0xb4,0x3b,0x14,0x15,0x13,0x18,0x14,0x12,0x23,0x28 -,0x20,0x23,0x1f,0x56,0xce,0x26,0x25,0x1e,0x1e,0x0f,0x0a,0x07,0x05,0x04,0x06,0x11,0x18,0x17,0x13,0x19,0x20,0x17,0x12,0x19,0x31,0xad,0x49,0x1f,0x2f,0x43,0x48,0x3c -,0x6a,0xa7,0xa8,0xc0,0x50,0x47,0xe7,0xb6,0xbb,0xa9,0x9e,0xa8,0xb6,0xb1,0xba,0xaa,0x2e,0x55,0x92,0x95,0x96,0xa8,0xa4,0x9e,0xd7,0x26,0x1d,0x27,0xb8,0x7e,0x3d,0xb8 -,0xaf,0xac,0x62,0xbb,0x9b,0x9e,0xab,0xad,0x9b,0x91,0x8f,0x8f,0x89,0x8a,0x8c,0x9b,0xa9,0xa0,0x9d,0x9a,0x94,0x84,0x82,0x83,0x89,0x89,0x85,0x94,0xc3,0x4c,0x4a,0xbc -,0x1b,0x0a,0x08,0x06,0x04,0x00,0x01,0x01,0x03,0x03,0x02,0x03,0x04,0x03,0x04,0x08,0x0b,0x09,0x05,0x03,0x07,0x08,0x0c,0x0a,0x1a,0x9b,0xac,0xfd,0x7c,0x9f,0x96,0xa3 -,0x9f,0x93,0x89,0x86,0x8d,0x8a,0x8a,0x8d,0x94,0xa7,0x97,0x8f,0x8f,0x92,0x9a,0x91,0x9a,0x9e,0x96,0x8e,0x8a,0x8e,0x90,0x94,0x91,0x91,0x8f,0x92,0x89,0x86,0x8c,0x99 -,0xaa,0x9d,0xaa,0x2f,0x1e,0x1a,0x1e,0x19,0x0e,0x15,0x1c,0x22,0x17,0x1a,0x2c,0xf9,0xc2,0x32,0x21,0x29,0x1c,0x17,0x17,0x15,0x12,0x0b,0x08,0x04,0x06,0x06,0x09,0x0a -,0x23,0xb6,0x3f,0x26,0x1f,0xc6,0x7d,0x21,0x19,0x2a,0xae,0xb2,0x4f,0xc5,0xaa,0xab,0x4e,0x39,0xaf,0x9f,0x9d,0xa2,0x9d,0x98,0x99,0x9e,0x99,0x90,0x95,0xa7,0xb7,0x4f -,0x3f,0x43,0x2c,0x23,0x2d,0xce,0x36,0x26,0x1e,0x25,0x27,0x1a,0x1f,0x40,0xa1,0x93,0x9c,0xa1,0x99,0x9b,0x9a,0x99,0x8e,0x8a,0x8c,0x91,0x9a,0x93,0x91,0x98,0x96,0x8c -,0x8a,0x8a,0x8d,0x8a,0x89,0x8a,0x8f,0x9c,0xaf,0x9f,0x9c,0x5d,0x1e,0x0b,0x0b,0x05,0x03,0x04,0x03,0x06,0x04,0x02,0x04,0x06,0x0a,0x0a,0x08,0x0a,0x07,0x08,0x06,0x06 -,0x07,0x07,0x07,0x08,0x0e,0x18,0x19,0x26,0x4e,0x33,0xd5,0xae,0x97,0x93,0x8f,0x88,0x8c,0x8c,0x91,0x8f,0x8e,0x97,0x99,0xa8,0x9d,0x90,0x98,0x93,0x8f,0x91,0x92,0x96 -,0x8e,0x88,0x88,0x89,0x8b,0x88,0x8a,0x8e,0x96,0x96,0x99,0xa2,0x4c,0x2f,0x2a,0x23,0x1c,0x12,0x10,0x12,0x2a,0x2e,0x3e,0x39,0x2e,0x2c,0x25,0x2f,0x38,0x68,0xcb,0x37 -,0x21,0x14,0x0f,0x0f,0x0e,0x0f,0x0f,0x0f,0x0e,0x0b,0x0e,0x12,0x1b,0x1b,0x18,0x1b,0x19,0x19,0x16,0x15,0x0e,0x10,0x0e,0x0c,0x0b,0x1d,0x55,0x49,0xcc,0xd4,0x9f,0x9c -,0x94,0x8b,0x89,0x88,0x8b,0x92,0x93,0x93,0x8d,0x91,0x9c,0xa0,0xb3,0x4d,0x2f,0x29,0x33,0x32,0x27,0x21,0x21,0x28,0x2b,0x40,0xf8,0x44,0x6e,0xb3,0xa3,0x9e,0xa6,0x8f -,0x98,0xa5,0xa7,0xa1,0x92,0x97,0x97,0xa0,0x94,0x8d,0x92,0x96,0x92,0x8f,0x8a,0x8a,0x88,0x8b,0x90,0x96,0xaa,0xc1,0x49,0x3c,0x18,0x12,0x09,0x0d,0x0b,0x08,0x07,0x06 -,0x08,0x05,0x0c,0x0e,0x1d,0x21,0x25,0x1f,0x1e,0x27,0x36,0x26,0x1b,0x19,0x18,0x2b,0x21,0x28,0x44,0xab,0xaf,0xb0,0x97,0x9b,0x99,0x9f,0xa6,0xa1,0xa4,0x9f,0xae,0xc9 -,0x2c,0x25,0x2c,0x24,0x1e,0x2a,0x27,0x28,0x2f,0xb2,0x9f,0xc2,0xae,0xa4,0x97,0x8f,0x93,0x9a,0xa0,0xb4,0xa7,0xc1,0xb4,0xad,0xaf,0xcf,0x2a,0x2e,0x3d,0xb8,0xde,0x34 -,0x26,0x76,0xd7,0xbe,0xb5,0xa8,0xae,0xe4,0xb5,0xba,0xa1,0x9f,0xa0,0xa9,0xac,0x8f,0x8f,0x98,0xa0,0xad,0xa7,0xbf,0xd8,0x37,0x3d,0xc5,0x1b,0x18,0x1f,0x25,0x2b,0x16 -,0x20,0x25,0x27,0x46,0x25,0x22,0x1f,0x1d,0x25,0x27,0x2a,0x25,0x1c,0x14,0x0d,0x15,0x18,0x1d,0x16,0x1e,0x4d,0x3c,0xe2,0x4a,0xc3,0x48,0x24,0x1f,0x21,0x3b,0x30,0x20 -,0x23,0x25,0xf2,0x66,0xcd,0xa5,0xa7,0x98,0x91,0x8c,0x89,0x8e,0x94,0x9a,0x96,0x99,0xad,0xb4,0x3f,0x30,0x23,0x27,0x29,0x47,0xaf,0xb4,0xaa,0xa2,0x8f,0x8d,0x8e,0x8e -,0x91,0x8d,0x8b,0x90,0x94,0x96,0x9d,0xb1,0xa8,0xa1,0xae,0xb4,0x42,0x30,0x2e,0x5a,0xcb,0x2e,0x20,0x1e,0x18,0x15,0x15,0x0f,0x0e,0x0a,0x08,0x0e,0x16,0x1b,0x1b,0x25 -,0x30,0x5b,0xaf,0xad,0xb7,0xab,0xbb,0xb8,0xa0,0x9e,0xa8,0x2e,0x24,0x25,0x1e,0x1d,0x19,0x1b,0x1d,0x1a,0x22,0x2a,0x2c,0x33,0x52,0xbd,0xac,0xa8,0xa5,0xa9,0x96,0x8b -,0x8d,0x8b,0x89,0x89,0x90,0x94,0x8f,0x96,0xa4,0xbb,0x4d,0x29,0x16,0x0f,0x0e,0x09,0x04,0x03,0x06,0x08,0x07,0x07,0x0a,0x0c,0x0f,0x16,0x17,0x17,0x19,0x1e,0x28,0x2e -,0x36,0x75,0xcc,0xba,0xab,0x9a,0x90,0x92,0x8f,0x8e,0x8c,0x86,0x84,0x85,0x87,0x87,0x88,0x89,0x89,0x8b,0x94,0xab,0xb6,0xb1,0xaf,0xa6,0xac,0xae,0xaf,0xae,0x9e,0x9f -,0xa9,0xba,0xbf,0xba,0xb8,0xb1,0xdc,0x2e,0x1e,0x17,0x19,0x19,0x14,0x11,0x12,0x14,0x14,0x1b,0x28,0x21,0x1a,0x19,0x19,0x19,0x1b,0x19,0x16,0x10,0x0c,0x0c,0x0f,0x0f -,0x0e,0x0f,0x11,0x17,0x1c,0x27,0x32,0xe9,0xbf,0xd9,0xa8,0x97,0x9a,0x9b,0x9b,0x9a,0x99,0x98,0x92,0x90,0x92,0x97,0x9a,0x8e,0x8c,0x98,0xa7,0xaa,0xac,0xd0,0x39,0x2d -,0x27,0x20,0x1a,0x21,0x30,0x34,0x31,0x32,0x4d,0xb3,0x9a,0x8e,0x8a,0x88,0x88,0x87,0x86,0x86,0x85,0x85,0x84,0x88,0x8a,0x87,0x88,0x8a,0x8d,0x94,0x9c,0xa7,0xac,0xcc -,0x23,0x12,0x0c,0x0b,0x08,0x04,0x02,0x02,0x01,0x00,0x01,0x01,0x03,0x04,0x04,0x06,0x07,0x0c,0x12,0x10,0x11,0x15,0x1d,0x22,0x23,0x2a,0x30,0x26,0x1c,0x1e,0x2d,0x4c -,0xc4,0xbb,0xb0,0xa5,0x9b,0x92,0x95,0x9a,0x9b,0x98,0x93,0x94,0x96,0x95,0x93,0x9f,0xaa,0x9b,0x94,0x91,0x8f,0x8f,0x8e,0x89,0x84,0x85,0x88,0x87,0x86,0x87,0x8b,0x8e -,0x92,0x97,0xab,0x39,0x35,0x43,0x26,0x1a,0x13,0x13,0x11,0x14,0x17,0x10,0x0e,0x0d,0x10,0x16,0x16,0x15,0x14,0x0f,0x0f,0x13,0x16,0x1b,0x21,0x24,0x1f,0x23,0x47,0xbd -,0x5c,0x2c,0x2d,0x35,0x36,0x30,0x28,0x2e,0x1e,0x13,0x13,0x16,0x18,0x18,0x1b,0x1d,0x1d,0x2d,0xc5,0xec,0x2f,0x3b,0xbf,0xb4,0xaa,0xa8,0xa6,0xa5,0xa8,0x9c,0x95,0x8f -,0x8f,0x8f,0x8e,0x8c,0x89,0x84,0x85,0x87,0x89,0x8a,0x8a,0x8a,0x89,0x8b,0x8d,0x92,0x92,0x91,0x96,0x98,0x95,0x94,0x9c,0x9e,0x94,0x99,0xaa,0x58,0x34,0x26,0x1d,0x14 -,0x0d,0x0b,0x06,0x03,0x04,0x04,0x04,0x03,0x02,0x03,0x03,0x07,0x08,0x05,0x05,0x06,0x07,0x09,0x0c,0x0c,0x0c,0x0a,0x0b,0x15,0x1b,0x24,0x62,0xaf,0x9e,0x9d,0x8f,0x8a -,0x8b,0x8a,0x8c,0x89,0x88,0x89,0x89,0x8b,0x8e,0x97,0x9a,0x97,0x98,0x9a,0x9e,0x9e,0x97,0x90,0x8d,0x91,0x92,0x91,0x92,0x91,0x90,0x90,0x93,0x9a,0x9f,0xa1,0xa7,0xa6 -,0xa9,0xaf,0xb9,0xcc,0x67,0xba,0xe5,0x2e,0x27,0x22,0x1d,0x1a,0x18,0x15,0x0e,0x08,0x09,0x0b,0x0c,0x0b,0x0c,0x0c,0x0d,0x0f,0x18,0x19,0x13,0x16,0x19,0x1b,0x1f,0x1f -,0x1e,0x1d,0x15,0x19,0x1f,0x30,0x2e,0x2a,0x34,0x2d,0x31,0xc3,0xcd,0x5a,0x4f,0x51,0x50,0x4c,0x3e,0x29,0x1f,0x16,0x1e,0x4c,0xbc,0xaa,0xa2,0x99,0x95,0x8f,0x87,0x86 -,0x85,0x85,0x84,0x83,0x82,0x82,0x83,0x83,0x85,0x88,0x88,0x89,0x88,0x89,0x8c,0x8f,0x91,0x8f,0x98,0xba,0x36,0x1d,0x14,0x0d,0x0a,0x09,0x05,0x02,0x02,0x03,0x03,0x02 -,0x02,0x03,0x03,0x05,0x0a,0x0c,0x0b,0x0b,0x0c,0x0f,0x15,0x16,0x11,0x0f,0x14,0x1c,0x22,0x2b,0x2f,0x45,0x5f,0xd1,0xa8,0xa0,0xab,0xac,0xa4,0x9c,0x9b,0x9d,0x9e,0xa5 -,0xa0,0x9b,0x9b,0x98,0x99,0x98,0x93,0x8d,0x88,0x8a,0x8b,0x8b,0x8a,0x89,0x8a,0x8b,0x8d,0x91,0x91,0x8e,0x8e,0x8f,0x94,0x98,0x9f,0xa5,0x9e,0xac,0xca,0x45,0x33,0x27 -,0x1e,0x1c,0x16,0x0e,0x0a,0x0a,0x0d,0x10,0x11,0x13,0x17,0x18,0x24,0x2f,0x26,0x1f,0x20,0x25,0x24,0x2d,0x2b,0x27,0x1c,0x12,0x17,0x18,0x1b,0x1b,0x18,0x18,0x1b,0x2e -,0x3b,0x25,0x20,0x1f,0x1e,0x23,0x23,0x21,0x1e,0x16,0x14,0x19,0x22,0x2f,0x32,0x59,0xb8,0xa3,0x90,0x8b,0x8b,0x8c,0x8b,0x88,0x86,0x85,0x84,0x84,0x86,0x88,0x88,0x87 -,0x88,0x88,0x89,0x89,0x89,0x87,0x86,0x8b,0x8f,0x95,0x9c,0xa7,0xbf,0x3f,0x2b,0x1a,0x0f,0x0e,0x0d,0x0b,0x09,0x08,0x08,0x06,0x0a,0x0c,0x0a,0x09,0x08,0x08,0x09,0x0a -,0x09,0x08,0x07,0x04,0x06,0x09,0x0a,0x0d,0x0f,0x12,0x16,0x1f,0x2e,0x2f,0x2e,0x34,0x4c,0xab,0x9f,0x9f,0x9d,0x9f,0x9e,0x98,0x93,0x91,0x8f,0x8d,0x8d,0x8c,0x88,0x87 -,0x89,0x8d,0x8e,0x8e,0x8f,0x92,0x97,0x9e,0xa2,0x9f,0x9d,0x9a,0x9a,0x9b,0x9e,0xa1,0x9b,0x96,0x9a,0x9f,0xa3,0xa0,0xa6,0xb4,0xe0,0x2d,0x1f,0x1e,0x1f,0x1e,0x1f,0x22 -,0x1e,0x1e,0x2b,0x2f,0x23,0x1c,0x1b,0x19,0x17,0x16,0x15,0x0f,0x0d,0x0e,0x0f,0x0f,0x0e,0x0e,0x0f,0x14,0x1c,0x27,0x23,0x1e,0x1f,0x27,0x2c,0x2c,0x2a,0x28,0x1d,0x20 -,0x2b,0x2d,0x38,0x40,0x56,0x5f,0xb5,0x9f,0xa4,0xaa,0xa5,0xa1,0x9b,0x96,0x95,0x90,0x94,0x98,0x92,0x8d,0x8a,0x89,0x88,0x87,0x86,0x84,0x83,0x83,0x84,0x85,0x85,0x87 -,0x87,0x89,0x8d,0x95,0xa4,0xac,0xaf,0xcc,0x3b,0x21,0x18,0x12,0x12,0x15,0x0e,0x09,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x01,0x02,0x03,0x04,0x04,0x05,0x08,0x0a,0x0e -,0x15,0x14,0x17,0x19,0x1d,0x25,0x3a,0xe9,0xd0,0xee,0x53,0xc8,0xa7,0x9f,0x9f,0x9d,0x99,0x94,0x8e,0x8b,0x8c,0x8e,0x8f,0x8e,0x90,0x90,0x93,0x96,0x9e,0xa4,0x9f,0x9c -,0x98,0x98,0x99,0x97,0x96,0x91,0x8e,0x8f,0x8e,0x8f,0x8f,0x8f,0x91,0x94,0x9b,0xb5,0xe4,0xd7,0xd1,0x5a,0x3e,0x39,0x2d,0x2f,0x4e,0x34,0x21,0x1a,0x15,0x14,0x13,0x14 -,0x10,0x0c,0x0c,0x0c,0x0c,0x0c,0x0b,0x0c,0x0c,0x10,0x1c,0x1e,0x1d,0x1e,0x1f,0x1f,0x20,0x22,0x1c,0x15,0x18,0x21,0x2a,0x2c,0x28,0x2b,0x2f,0x40,0xce,0x54,0x3f,0x44 -,0x53,0xdd,0xe4,0xcc,0xc8,0x3f,0x48,0xae,0xa0,0x9d,0x9a,0x94,0x8d,0x89,0x85,0x83,0x84,0x83,0x83,0x83,0x83,0x83,0x83,0x85,0x88,0x8b,0x8b,0x8b,0x8c,0x90,0x97,0x9c -,0xa4,0xaa,0xd0,0x2c,0x1c,0x16,0x11,0x0d,0x0b,0x08,0x05,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x04,0x06,0x0a,0x0b,0x0b,0x0b,0x0b,0x0f,0x14,0x17,0x1b,0x1c,0x17,0x1a -,0x23,0x32,0x4c,0xfe,0xc5,0xaf,0x9e,0x95,0x96,0x96,0x97,0x98,0x93,0x91,0x91,0x93,0x98,0x9f,0xa4,0x9c,0x9b,0x9b,0x9a,0x99,0x93,0x92,0x8e,0x8d,0x8e,0x8f,0x8e,0x8e -,0x8d,0x8e,0x8f,0x93,0x98,0xa0,0xa0,0xad,0xa6,0xab,0xd6,0xbb,0x1f,0xb0,0x86,0x8c,0x02,0x1b,0x82,0x1e,0x3d,0x1e,0x0b,0x0b,0x06,0x08,0x04,0x0e,0x00,0x03,0x03,0x00 -,0x06,0x02,0x05,0x03,0x02,0x08,0x06,0x0b,0x0f,0x09,0x08,0x10,0x18,0x1d,0x6f,0xee,0x9e,0x97,0xa5,0x94,0x83,0x80,0x89,0x8b,0x84,0x80,0x81,0x85,0x84,0x87,0x8a,0x87 -,0x85,0x82,0x85,0x81,0x84,0x83,0x85,0x89,0x84,0x8b,0x8d,0x8f,0x95,0x9e,0x9c,0x9f,0xbb,0x40,0x34,0x26,0x0e,0x13,0x0a,0x09,0x0a,0x06,0x06,0x05,0x05,0x03,0x04,0x03 -,0x02,0x01,0x02,0x01,0x01,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x07,0x05,0x06,0x05,0x08,0x0c,0x0a,0x0d,0x0f,0x19,0x16,0x1b,0x25,0x28,0x2f,0x47,0x4a,0xac,0x97,0x91 -,0x92,0x8f,0x8a,0x8a,0x87,0x85,0x84,0x84,0x84,0x82,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x81 -,0x84,0x83,0x85,0x88,0x8b,0x8c,0x8c,0x93,0x9a,0xa6,0xa3,0xfb,0x26,0x13,0x18,0x0e,0x0b,0x07,0x03,0x07,0x03,0x03,0x01,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00 -,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x04,0x03,0x02,0x04,0x04,0x04,0x05,0x05,0x09,0x0b,0x0a,0x0a,0x10,0x14,0x0d,0x10,0x1c,0x26,0x2b,0x2b -,0x6d,0xce,0xbc,0xae,0xa6,0x94,0x8f,0x8b,0x86,0x84,0x84,0x83,0x83,0x82,0x83,0x82,0x81,0x80,0x81,0x82,0x81,0x81,0x81,0x81,0x82,0x82,0x81,0x82,0x82,0x83,0x82,0x82 -,0x84,0x85,0x85,0x83,0x83,0x85,0x87,0x83,0x86,0x88,0x87,0x87,0x87,0x8c,0x8d,0x8f,0x90,0x95,0x9f,0xac,0xa6,0xaf,0xb5,0x32,0x2a,0x2a,0x1d,0x1b,0x13,0x1a,0x16,0x1b -,0x18,0x14,0x1a,0x1f,0x28,0x29,0x3c,0xb4,0x9f,0xa4,0x9d,0x9b,0x95,0x92,0x96,0x91,0x94,0x91,0x9a,0x9e,0x9f,0xa3,0xaa,0x5a,0xf5,0x2e,0x20,0x13,0x0f,0x0d,0x0a,0x08 -,0x05,0x03,0x03,0x03,0x03,0x02,0x01,0x01,0x01,0x02,0x01,0x02,0x02,0x02,0x01,0x01,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x01,0x01,0x01,0x01 -,0x01,0x01,0x02,0x03,0x04,0x04,0x04,0x07,0x09,0x09,0x0b,0x0f,0x18,0x1e,0x25,0x3a,0xbd,0xa9,0x9f,0x9c,0x93,0x8d,0x8a,0x87,0x85,0x84,0x84,0x83,0x82,0x82,0x82,0x81 -,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x83,0x83,0x84,0x86,0x88 -,0x8a,0x8e,0x90,0x90,0x93,0x9a,0xa7,0xab,0xb3,0x5c,0x4b,0x2b,0x25,0x1f,0x15,0x0e,0x0d,0x0d,0x08,0x07,0x07,0x06,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x02,0x02 -,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x09,0x0a,0x0b,0x0c,0x0f,0x0f,0x0f,0x11,0x15,0x19,0x16,0x19,0x1c,0x1a,0x1b,0x1a,0x1c,0x1a,0x1b,0x19,0x17 -,0x19,0x17,0x1a,0x1a,0x1d,0x20,0x25,0x2a,0x2a,0x33,0x48,0xf4,0xba,0xaa,0xa0,0x9e,0x9b,0x98,0x97,0x92,0x90,0x8e,0x8e,0x8d,0x8c,0x8d,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d -,0x8e,0x8f,0x92,0x94,0x94,0x96,0x95,0x95,0x95,0x98,0x9d,0x9f,0xa1,0xa4,0xa2,0x9f,0x9f,0xa1,0xa8,0xac,0xb0,0xb5,0xbd,0xbf,0xb6,0xbb,0xc9,0xc6,0xcb,0x58,0x42,0x3e -,0x37,0x32,0x30,0x31,0x2f,0x2f,0x2c,0x27,0x25,0x24,0x25,0x27,0x28,0x2b,0x2e,0x2e,0x29,0x29,0x2c,0x2d,0x35,0x35,0x36,0x3d,0x3e,0x3d,0x47,0xd6,0xc3,0xbe,0xb4,0xaa -,0xa3,0xa9,0xa7,0xa0,0x9f,0x9e,0x9e,0x9f,0x9b,0x9b,0x9d,0x9d,0x9d,0x9d,0x9f,0x9e,0x9e,0x9d,0x9e,0x9f,0xa0,0xa4,0xa6,0xa9,0xa8,0xaa,0xad,0xbb,0xb8,0xaf,0xaf,0xad -,0xad,0xae,0xae,0xaf,0xad,0xad,0xab,0xaa,0xae,0xad,0xa9,0xa9,0xac,0xad,0xad,0xaf,0xb5,0xbb,0xc7,0xd3,0xe1,0x4b,0x37,0x2e,0x29,0x27,0x24,0x22,0x1f,0x1d,0x1c,0x1c -,0x1d,0x1d,0x1d,0x1f,0x23,0x25,0x26,0x27,0x2a,0x2c,0x2f,0x33,0x39,0x42,0x48,0x55,0x5b,0x56,0x61,0x52,0x55,0xd1,0xc7,0xc6,0xce,0xdd,0xeb,0x5f,0x52,0x42,0x3f,0x46 -,0x47,0x46,0x41,0x39,0x37,0x38,0x41,0x45,0x4e,0xfc,0xf1,0xd6,0xce,0xd0,0xec,0xcf,0xb7,0xb5,0xb7,0xb2,0xaf,0xac,0xaf,0xb4,0xb2,0xaf,0xb0,0xb7,0xb9,0xb8,0xbe,0xc6 -,0xd4,0xda,0xda,0x6e,0x59,0x51,0x57,0x5b,0x4d,0x46,0x45,0x55,0x50,0x46,0x48,0x48,0x4f,0x43,0x44,0x48,0x43,0x4f,0x6b,0x5c,0x4c,0x42,0x47,0x43,0x3e,0x3b,0x36,0x37 -,0x33,0x2f,0x2e,0x2c,0x2a,0x2b,0x26,0x27,0x27,0x25,0x27,0x29,0x2d,0x31,0x33,0x31,0x35,0x3e,0x43,0x45,0x4b,0x6a,0xcf,0xcf,0xcc,0xbf,0xbc,0xb3,0xac,0xad,0xae,0xae -,0xab,0xac,0xad,0xad,0xab,0xab,0xad,0xae,0xaf,0xb0,0xb9,0xbe,0xc2,0xbd,0xbc,0xc3,0xc2,0xca,0xe1,0x60,0x44,0x43,0x4a,0x49,0x46,0x44,0x44,0x48,0x45,0x43,0x50,0x61 -,0x6b,0x5d,0x59,0x62,0x69,0x5a,0x4f,0x62,0xdd,0xe0,0xdd,0x66,0x71,0x57,0x4e,0x5a,0x61,0xcd,0xd2,0xe3,0x50,0x61,0x59,0x45,0x4b,0x4b,0x5b,0x5f,0x4f,0x4a,0x4d,0x44 -,0x4d,0x57,0x6d,0x56,0x4a,0x57,0x5c,0xf9,0xe6,0xd7,0xc7,0xc7,0xdb,0xe7,0xd1,0xc8,0xd5,0xe8,0xc8,0xc7,0xd0,0xd1,0xd0,0xca,0xd2,0xcc,0xde,0xdd,0xcc,0xc8,0xc7,0xc8 -,0xc2,0xc0,0xbd,0xbc,0xba,0xba,0xbc,0xc4,0xbe,0xc3,0xce,0xcd,0xcb,0xd0,0xe3,0xe6,0x60,0x59,0x45,0x42,0x4a,0x4d,0x4a,0x41,0x3d,0x42,0x3e,0x3e,0x40,0x42,0x3f,0x44 -,0x66,0x50,0x5f,0xe5,0xc6,0xc8,0xde,0xc6,0xcd,0xcf,0xd9,0xe5,0xe0,0xe6,0xbe,0xd5,0x55,0x49,0x4a,0xde,0x46,0x5c,0x47,0x53,0x7a,0x49,0x5a,0x45,0xe9,0x71,0xd0,0xcf -,0x69,0xcf,0xcd,0xc5,0xd3,0xc6,0xb6,0xbd,0xbb,0xc0,0xbd,0xc2,0xd6,0xcd,0x4b,0x56,0x48,0x54,0x5b,0x40,0x3c,0x34,0x39,0x33,0x2b,0x2e,0x36,0x3e,0x3a,0x3b,0x47,0x3e -,0x48,0x3f,0x3b,0x4b,0xda,0xe7,0xda,0xd8,0xc3,0xbb,0xbd,0xba,0xb8,0xb6,0xbc,0xca,0xc2,0xc4,0x79,0xd4,0xcf,0x51,0x47,0x40,0x5d,0x52,0x36,0x3d,0x39,0x3c,0x3a,0x3d -,0x54,0x50,0x68,0x54,0x39,0x40,0x41,0xf9,0xff,0xe4,0xbb,0xc1,0xb9,0xce,0xbb,0xb2,0xb5,0xb2,0xb4,0xb8,0xc0,0xc4,0xbf,0xc0,0xcb,0xc6,0xcf,0xde,0x53,0x58,0x4d,0x45 -,0x4f,0x51,0x52,0x50,0x4e,0x4f,0x4e,0x44,0x53,0x4f,0x59,0x64,0x57,0xfb,0xc9,0xca,0xc9,0xd9,0xc0,0xc9,0xd1,0xcb,0xdf,0xc0,0xdb,0xcc,0x56,0x4b,0xd2,0xfd,0x5e,0x4d -,0x63,0x4d,0x38,0x41,0x53,0x65,0x5b,0xca,0x4b,0x39,0x46,0x3b,0x48,0x45,0xd4,0x78,0x64,0xc0,0xd3,0xbd,0xd7,0xba,0xca,0xdb,0xbd,0x53,0xbd,0xd6,0xd8,0xc2,0xdd,0xe0 -,0x4d,0x51,0x51,0x3d,0x57,0x4c,0x59,0x41,0x3a,0x49,0x3f,0x3b,0x3f,0x4d,0x3a,0x3d,0x40,0x4c,0x40,0x72,0xd3,0x4b,0x50,0xeb,0x6a,0x3e,0x4a,0xc2,0x7e,0x56,0xd6,0xdc -,0xca,0xde,0xcc,0xdc,0xe9,0xc8,0x58,0x5b,0xdd,0xd2,0xe7,0xcf,0xd1,0x4b,0x49,0x53,0x50,0x48,0x4f,0x4b,0x58,0x5d,0x58,0x5d,0x57,0xe7,0x79,0x4e,0x7c,0x56,0xcf,0x65 -,0x5b,0xc5,0xfb,0xc4,0xde,0x5d,0xc1,0xf3,0xc5,0xca,0xcb,0xba,0x5d,0xbe,0xca,0xc9,0xd9,0xf7,0xca,0x44,0x67,0x56,0x47,0x59,0x46,0xd3,0x69,0x43,0xef,0x36,0x43,0x3f -,0x46,0x4e,0x4c,0xd6,0x4d,0x66,0x6d,0xcd,0xe0,0xf9,0xc0,0xce,0xf4,0xcb,0xcc,0xc1,0xc9,0xe5,0xcd,0x58,0xfc,0x49,0x3f,0x6d,0x54,0x5d,0x49,0x4f,0xfd,0x55,0xf9,0x51 -,0x3f,0x50,0x4e,0x4b,0x7a,0xf6,0xd1,0xce,0xd0,0xe2,0xe0,0xc6,0xd9,0xc5,0xc8,0xbe,0xbf,0xc7,0xc6,0xcd,0xbc,0xd3,0xdc,0xc6,0x66,0x5b,0x4d,0x74,0xfc,0x47,0xf3,0x53 -,0x5c,0x4b,0x3b,0x3a,0x42,0x49,0x3c,0x54,0xeb,0x6e,0xef,0x62,0x61,0xef,0x57,0xe9,0x4d,0xd5,0xba,0xc4,0xbc,0xc4,0xc0,0xdc,0x59,0xdf,0x4f,0x6c,0x7b,0x4e,0x67,0x43 -,0x69,0x59,0x76,0x63,0x3a,0x4a,0x3f,0x3a,0x44,0x64,0x6b,0x60,0x69,0x61,0xf0,0x7a,0xf4,0xcb,0xcb,0xc9,0xd2,0xc8,0xb8,0xcd,0xcf,0xcd,0xc6,0xc9,0xc5,0x47,0xe4,0xcc -,0x66,0xc3,0xf4,0xde,0xf5,0x42,0x3c,0x3e,0x38,0xc4,0x2c,0x3f,0xc6,0xbe,0x40,0x3a,0xc6,0xd9,0xd6,0x5a,0xb2,0x7b,0xb9,0xb8,0xb7,0x54,0xc0,0xbe,0xcf,0xcd,0x43,0xbf -,0x45,0x48,0x49,0x3d,0xd2,0x56,0x4a,0x44,0x56,0xe8,0x38,0x3e,0x35,0x67,0x6f,0xee,0x7b,0xd0,0xc9,0x54,0xd4,0xc8,0xdb,0xce,0xba,0xca,0xbc,0xd8,0xbe,0xed,0xcc,0xca -,0xf4,0xd4,0x49,0xce,0xf5,0xdf,0x56,0xc9,0x46,0x51,0xd3,0x3b,0x3d,0x35,0x3d,0x4c,0x4d,0x5f,0x4e,0xf2,0x61,0xe7,0xd5,0x5b,0xbb,0xcf,0xbd,0xc5,0xbd,0xb8,0xec,0xc9 -,0xdb,0xd7,0xd1,0x56,0xcf,0x6c,0x4d,0x61,0x4b,0xe9,0x4b,0x56,0x55,0x49,0x7b,0x48,0x40,0x44,0x40,0x56,0x44,0x5a,0xcd,0xd9,0xec,0x56,0xcb,0xc5,0x4f,0xc5,0xc2,0xea -,0xc7,0xde,0xbc,0xde,0x5e,0xc5,0x42,0x55,0x4d,0x55,0xc9,0x49,0x58,0x4b,0x47,0x4c,0x47,0x47,0x41,0x4a,0x6c,0x48,0x79,0xe9,0xc8,0xca,0x76,0xbe,0xe1,0xbc,0xd2,0xd8 -,0xbb,0xcb,0xbb,0xc9,0xc9,0xcb,0x67,0x6f,0x60,0x67,0x4d,0x53,0x49,0x4f,0x4b,0x57,0x47,0x6b,0x49,0x49,0x61,0x37,0x77,0x3d,0xde,0x69,0x51,0xbf,0xd8,0xe4,0x63,0xe3 -,0xce,0xd1,0xc7,0xba,0xcd,0xc4,0xce,0xcc,0xc7,0x5e,0xd2,0x47,0x51,0x5f,0x5b,0xc9,0x3e,0x4f,0x69,0x40,0x52,0x3b,0x5e,0xee,0x3b,0xd9,0x4c,0xee,0xe0,0x4f,0xcb,0x6c -,0xc3,0xd9,0x59,0xcf,0xca,0xc7,0xc2,0xc9,0xbe,0xc6,0xce,0x58,0xf8,0xdd,0x4b,0xdf,0x56,0x5f,0x4b,0x43,0x4a,0x4b,0x45,0xf6,0x4c,0x7e,0x62,0x44,0xcd,0x46,0xde,0x75 -,0xd6,0xcb,0xdf,0xc8,0x5f,0xda,0xda,0xef,0xc9,0xcc,0xd4,0xc1,0x5b,0xc6,0x5c,0xcd,0xf2,0x3e,0xd3,0x3b,0xdb,0x4d,0x4f,0x7b,0x58,0x4c,0x63,0x4e,0xdf,0x4e,0x54,0xc6 -,0x48,0xc0,0x4b,0xe8,0xca,0x6d,0xc3,0x59,0xcf,0xcc,0xf8,0xbe,0x65,0xcc,0xcd,0x5c,0xb9,0x4d,0xe7,0x7b,0x43,0xd1,0x46,0xdc,0x4c,0x49,0xd3,0x4a,0xe9,0x66,0x3c,0xf5 -,0x3e,0xd8,0xee,0x57,0xc1,0x45,0xbf,0x5a,0xdf,0xd2,0x5c,0xd4,0xfc,0xec,0xc9,0x7e,0xd7,0xde,0x50,0xbe,0x3c,0xc7,0x64,0x52,0xcd,0x46,0xbc,0x52,0x79,0xdb,0x4f,0xcc -,0x4e,0x4e,0xcb,0x57,0xf3,0x5a,0x66,0xd4,0x3d,0xde,0x4d,0x5f,0xd5,0x42,0xcb,0x5b,0xe9,0xc6,0x76,0xc7,0xe1,0xc8,0xcb,0x55,0xd4,0x53,0x6d,0xce,0x5b,0xd1,0x5c,0x4a -,0xdc,0x45,0x71,0x58,0x4e,0xe5,0x45,0xc9,0x5d,0x6f,0x7e,0x3f,0xce,0x4b,0x5d,0xe2,0x5c,0xc0,0x75,0xce,0xbd,0x6c,0xbf,0x57,0xda,0xcd,0x4d,0xc5,0x52,0xc7,0xc1,0x72 -,0xf1,0x45,0x59,0xde,0x4e,0xe9,0x54,0xf0,0xd6,0x44,0xd3,0x4c,0xfc,0xe4,0x4d,0xd8,0x51,0xdf,0xf7,0x58,0xc6,0x6c,0xcc,0xce,0x4d,0xc1,0xf1,0xd9,0x5d,0x67,0xc9,0x4a -,0xc9,0xe4,0xf0,0xdb,0x4b,0xf2,0x50,0x4e,0xe5,0x4b,0xe1,0xf1,0x54,0xbf,0x4c,0x6b,0x6e,0x5f,0xc7,0x3f,0xde,0x7a,0x64,0xe1,0x4f,0xd4,0x5a,0x59,0xd0,0x4b,0xe6,0x69 -,0x68,0xc1,0x48,0xc3,0xd1,0xdd,0xcd,0x47,0xc8,0x5f,0x52,0xcf,0x55,0xcc,0x68,0x5e,0xca,0x4d,0xcb,0x5b,0x4f,0x7e,0x46,0xd9,0x5d,0x66,0xdf,0x48,0xd9,0x4a,0x6c,0xd0 -,0x45,0xc5,0x57,0xdb,0xd7,0x59,0xc7,0x73,0xd5,0xc9,0x6c,0xcb,0x6f,0x62,0xd6,0x3d,0xc6,0x6e,0x7a,0xd1,0x49,0xcb,0x4d,0xdd,0x51,0x4b,0xd5,0x47,0xf6,0xed,0x4d,0xdf -,0x5c,0x68,0xd7,0x4c,0xc6,0x45,0xd6,0xca,0x4f,0xb5,0x4f,0xcf,0xcf,0xd8,0xc7,0x4c,0x7d,0x69,0x4b,0xd8,0x4d,0xea,0xd3,0x4a,0xc4,0x43,0xcc,0x5f,0x4e,0xca,0x40,0xcf -,0x61,0x63,0xd2,0x51,0xc9,0x6e,0x4c,0xca,0x4e,0xca,0xee,0x5a,0xd9,0x61,0xc4,0xe5,0xfb,0xcf,0x43,0xf9,0xd1,0x6a,0xbe,0x49,0xce,0xe6,0x70,0xcf,0x3e,0xc9,0x63,0x59 -,0xef,0x47,0xdc,0x4e,0x4a,0xd3,0x4e,0xcc,0x4d,0x48,0xdf,0x48,0xd8,0x55,0xcc,0xcb,0x71,0xc4,0xe7,0xd0,0xcb,0x68,0xd8,0x68,0xdd,0xcb,0x58,0xc5,0x52,0xf0,0xe2,0x40 -,0xcd,0x3f,0x75,0x6e,0x42,0xd0,0x46,0x5d,0x4e,0x3e,0xd3,0x46,0xd9,0x6a,0x44,0xbd,0x4c,0xc8,0xde,0xdb,0xbc,0x58,0xc4,0xd5,0xef,0xc2,0x70,0xca,0xd1,0x4c,0xbf,0x48 -,0xcf,0x6d,0x45,0xc9,0x3d,0x70,0x4b,0x41,0x6b,0x38,0x5a,0x77,0x3e,0xc5,0x3e,0xde,0xdb,0x4a,0xbd,0x49,0xbb,0xe4,0xe0,0xb9,0x51,0xbc,0xcb,0x66,0xc0,0x56,0xc5,0xe3 -,0x57,0xbc,0x45,0xcc,0xf5,0x44,0xc9,0x3f,0xea,0x4d,0x3d,0xd7,0x3b,0xee,0x4c,0x46,0xd6,0x40,0xd2,0x4e,0x56,0xc6,0x3f,0xc0,0xca,0xde,0xb9,0x58,0xbc,0xd4,0xce,0xbb -,0x52,0xbb,0xfd,0x69,0xc6,0x4a,0xcc,0x68,0x54,0xec,0x41,0x76,0x42,0x42,0xf1,0x39,0x62,0x4f,0x3f,0xe5,0x3c,0xd0,0x4b,0x5f,0xc0,0x4f,0xb9,0xe4,0xda,0xcd,0x60,0xc1 -,0xee,0xf0,0xc1,0x69,0xbd,0xe1,0xf5,0xc3,0x42,0xc2,0x4e,0x6e,0xde,0x4a,0xca,0x3f,0x5c,0x5d,0x3e,0xef,0x3f,0x51,0x5d,0x36,0xd6,0x45,0x5e,0xd7,0x40,0xb9,0x62,0xd7 -,0xc8,0x5f,0xb8,0x75,0xbf,0xbb,0xdd,0xba,0xe5,0xc6,0xc9,0x5b,0xd6,0x42,0x65,0xff,0x40,0xd8,0x3e,0x4b,0x5c,0x3d,0xf3,0x3a,0x4c,0x4e,0x47,0xcf,0x3f,0xd8,0xc8,0x58 -,0xc3,0xd7,0xc2,0xc7,0xdb,0xbc,0x7e,0xbf,0xca,0x67,0xbf,0x6e,0xd9,0xdc,0x5c,0xdc,0x4b,0xd6,0x5a,0x42,0xd8,0x3f,0xee,0x5e,0x41,0x6e,0x3f,0x5b,0x47,0x41,0xcd,0x49 -,0xce,0xea,0x49,0xbe,0x5b,0xc6,0xee,0xd5,0xbb,0xec,0xbe,0xd6,0xcd,0xc4,0x79,0xd4,0x79,0x5c,0xd4,0x3e,0x4d,0x48,0x4e,0xe5,0x3e,0xd1,0x5b,0x62,0x63,0x44,0xe6,0x5c -,0x4a,0xec,0x50,0xee,0xd8,0x51,0xc9,0x51,0xc6,0xd5,0xf2,0xbc,0x61,0xc1,0xd6,0xec,0xc6,0x67,0xda,0x59,0x71,0xdc,0x3b,0xd1,0x57,0x40,0xd6,0x56,0xd7,0x53,0x6b,0x6c -,0x45,0xeb,0x50,0x4e,0xd9,0x4e,0x79,0x74,0x62,0xd1,0x4e,0xc5,0x61,0xfe,0xc0,0x6d,0xc8,0xcf,0x75,0xbf,0x57,0xda,0xe7,0x55,0xc6,0x3f,0xd3,0x4c,0x6f,0xea,0x40,0xc9 -,0x4a,0x44,0xf9,0x4a,0xcd,0x4d,0x5b,0xda,0x44,0xc5,0x60,0xd1,0xcd,0x78,0xcb,0x6d,0xdc,0xd7,0xdd,0xd0,0x70,0xf5,0xd3,0x5b,0x5c,0x57,0x6e,0xdb,0x46,0xd8,0x64,0x61 -,0x6a,0x47,0xd0,0x59,0xda,0xe7,0x49,0xcb,0x65,0x64,0x4e,0x53,0xbf,0x64,0xe2,0x72,0x71,0xd2,0x69,0xc6,0xd2,0x54,0xd6,0x4e,0xc1,0xc5,0xb2,0xfa,0x2b,0xd0,0x41,0x4a -,0xdf,0xbe,0xc4,0x3c,0x3b,0x78,0x48,0x47,0xcf,0x64,0xf0,0x78,0x76,0xde,0x5e,0xd4,0xd3,0xce,0x5f,0xf0,0xc5,0x4d,0xd8,0x58,0xe6,0xe7,0x42,0x5a,0x77,0x6c,0x54,0x4f -,0x67,0xdb,0x55,0x5d,0x5a,0xda,0x66,0x6e,0xc6,0xcb,0xcf,0x67,0xcc,0xf1,0xfe,0x78,0x6b,0xee,0x68,0x6a,0x56,0xd3,0x6d,0xd3,0x4e,0x47,0x55,0x4c,0xd6,0x4d,0xfa,0xf1 -,0xe0,0xd0,0x70,0xd4,0xeb,0xeb,0xe3,0xe5,0x69,0x7b,0xbe,0xd2,0x4c,0xdb,0xce,0xd0,0xe6,0x5e,0x4c,0x5a,0xee,0x4f,0xe0,0xe0,0x56,0x4d,0xe7,0x44,0x66,0x7e,0x43,0xf4 -,0x51,0xd7,0x44,0xc7,0xc8,0xde,0xd6,0x5e,0xbe,0xe5,0xc3,0xc2,0x6b,0xe9,0xe7,0x5d,0xbe,0x5d,0xfb,0x59,0x4c,0xfc,0x67,0x64,0x43,0xc9,0x55,0x56,0xf0,0x55,0x73,0x7e -,0x62,0xe9,0xec,0xe0,0x5d,0x5d,0x58,0x6d,0x59,0xcb,0xef,0xda,0xc9,0x47,0xef,0xc5,0xbd,0x6f,0xc6,0x3e,0x4d,0xbc,0x71,0xdf,0x4e,0xe7,0x4d,0x3e,0xb9,0xea,0x68,0x4c -,0xde,0x5d,0x3f,0xf2,0xcb,0x65,0x3f,0xe9,0x4b,0x63,0xd7,0xdd,0x4a,0xda,0x3d,0xc3,0xc9,0x45,0xed,0xcb,0xdd,0xcf,0xc3,0xd8,0xda,0x70,0xd0,0x4d,0xbc,0xd1,0x4e,0xe3 -,0x46,0xdb,0x46,0xce,0xac,0xb4,0xa6,0x2f,0x2e,0x33,0x3e,0xfb,0x14,0x15,0x3b,0x99,0x90,0x2c,0x0c,0x17,0xfb,0x98,0x91,0x98,0xa3,0xbf,0x2e,0x1b,0x26,0x9d,0x8f,0xd0 -,0x22,0xb3,0x9c,0xd8,0x34,0x6f,0xad,0x96,0x22,0x0e,0x74,0x26,0x0a,0x0d,0x21,0x92,0x8c,0xa9,0x24,0x18,0xbe,0x93,0x89,0x93,0xdb,0xe8,0xbb,0x2a,0x13,0x26,0x9a,0x98 -,0xa1,0x2a,0x0f,0xd1,0xa6,0x1b,0x06,0x04,0xcf,0x87,0x98,0x19,0x18,0x9f,0x9b,0x53,0xd6,0x8f,0x8c,0x94,0xf5,0x29,0x39,0x41,0xd5,0x1b,0x17,0x1f,0x9e,0x9a,0x3a,0x0d -,0x0b,0x29,0x9f,0x9d,0x99,0xa4,0x33,0x35,0x1b,0x2c,0xa7,0x8f,0xa4,0x2f,0x37,0xa7,0x9b,0xb3,0x32,0xda,0x9d,0x24,0x13,0x2e,0x5d,0x17,0x0c,0x1f,0x9f,0x8d,0x9a,0x29 -,0x1a,0x1f,0xa6,0x8c,0x91,0xb2,0x2d,0x5d,0x6f,0x18,0x2e,0xa3,0x97,0xab,0x28,0x25,0x3e,0x9d,0x3a,0x09,0x07,0x18,0x8f,0x8c,0x35,0x1c,0x3d,0x9c,0xa1,0x30,0x9c,0x8b -,0x91,0xb5,0x2e,0x2b,0x30,0xf1,0x1b,0x17,0x1e,0xab,0x99,0xa1,0x19,0x07,0x1b,0xb3,0x98,0x99,0xa9,0x59,0x24,0x1e,0x40,0xb1,0x8b,0x9d,0xe2,0x36,0x31,0x98,0xac,0xc8 -,0x4b,0xc7,0xb9,0x17,0x1a,0xfe,0x25,0x16,0x0f,0x39,0x90,0x9f,0xf4,0x23,0x1d,0xaf,0x9a,0x8e,0xa2,0x29,0xf9,0x66,0x40,0x31,0xae,0x97,0xb8,0x2f,0x27,0x35,0xa7,0x67 -,0x1a,0x06,0x0b,0xa8,0x8f,0x9c,0x29,0x2c,0xad,0xbb,0x50,0xa1,0x8e,0x8e,0xcc,0x37,0x23,0x2c,0x66,0x29,0x2b,0x1e,0xc0,0x97,0xae,0x1f,0x0a,0x17,0x4a,0xba,0x92,0x9e -,0xb9,0x2f,0x19,0x41,0xb6,0x92,0x90,0xbe,0x29,0x20,0x9d,0x95,0xc1,0x30,0x37,0x5b,0x1e,0x1a,0x46,0x53,0x25,0x13,0x1e,0xa5,0x99,0xab,0x5f,0x22,0x28,0x9f,0x99,0x9c -,0x47,0x40,0xba,0xd0,0xc1,0xad,0x9f,0xbe,0x41,0x45,0x32,0xb9,0xae,0x19,0x09,0x06,0x1e,0x96,0x8f,0xa6,0x36,0x47,0x5e,0x37,0xad,0x90,0x90,0x9d,0x34,0x20,0x2a,0x3b -,0x3a,0x29,0x2f,0xd3,0xa1,0xa5,0x57,0x1a,0x12,0x24,0xcf,0xa0,0x9a,0xab,0x3e,0x1b,0x1e,0xb9,0x95,0x96,0xa8,0x2b,0x24,0xeb,0xab,0xa0,0x38,0x2b,0x20,0x1f,0x24,0x33 -,0xae,0x4a,0x1f,0x1d,0x57,0x99,0x92,0xa2,0x4c,0x29,0xc3,0x9b,0x9d,0xaf,0x3a,0x46,0x43,0x2f,0x2d,0xc9,0x3b,0x2b,0x26,0x24,0xba,0xbc,0x39,0x11,0x0c,0x1f,0x9d,0x88 -,0x8a,0xa2,0xc4,0x4b,0xcc,0xa5,0x9c,0x96,0xaa,0x28,0x15,0x0f,0x14,0x1d,0x1c,0x2f,0x2e,0xc2,0x9a,0xab,0xbf,0x2c,0x2f,0xa9,0xa4,0x90,0x95,0xb0,0x47,0x1e,0xb8,0xae -,0xa5,0xbf,0x18,0x1e,0x18,0x1f,0x35,0x5a,0x3d,0x1a,0x25,0xb8,0xb1,0x9b,0x9b,0xaa,0xe2,0x27,0x97,0x8d,0x98,0xbf,0x24,0x2e,0x21,0x34,0x3d,0x23,0x23,0x17,0x13,0xd3 -,0xbf,0x3d,0xac,0xa3,0x9a,0xba,0x9d,0x9c,0x25,0x15,0x16,0xa9,0x96,0x95,0x95,0x41,0x1f,0x17,0x1f,0xab,0xca,0x5c,0x13,0x24,0x58,0x12,0xbd,0x9f,0x9b,0xa7,0xba,0x8f -,0xa1,0xb3,0xd4,0x28,0x33,0x1e,0xaa,0xad,0x2d,0x1e,0x11,0x20,0x29,0x76,0x1d,0xd0,0x9a,0x27,0x9b,0x93,0x91,0xa1,0x25,0x9f,0x29,0x4e,0x9a,0xa8,0xac,0x0c,0x20,0x57 -,0x49,0xaa,0x1e,0x20,0x0e,0x11,0x11,0xe4,0x8f,0xd9,0x95,0x98,0x96,0x9f,0xc2,0x8d,0xb5,0xb1,0xa2,0xda,0xa0,0x11,0x0f,0x0f,0x0e,0xe6,0x4d,0xbe,0x1f,0x11,0x0e,0xd4 -,0x98,0x9f,0x8b,0x92,0x98,0x7e,0x28,0x95,0x6c,0xcd,0xa0,0x39,0xa1,0x29,0xa9,0xcb,0x0f,0x16,0x0c,0x18,0x1b,0x13,0x15,0xa1,0xa7,0x7d,0x8e,0x8e,0x92,0xa6,0xa1,0x8f -,0xc7,0xac,0x9e,0x2b,0x2c,0x18,0xc1,0xef,0x22,0x3f,0x0f,0x0a,0x0e,0x1b,0x18,0x97,0x9d,0x25,0xa2,0xac,0x92,0x9b,0xa7,0x89,0xb3,0x5c,0x98,0x58,0x9d,0x4b,0xad,0xac -,0x18,0x2b,0x0c,0x09,0x05,0x08,0x0c,0xb4,0x8a,0xbe,0x9b,0x96,0x9e,0x9a,0xaf,0x8a,0x98,0x27,0xa2,0xec,0xef,0xc3,0x4e,0xa5,0x1c,0x22,0x2b,0x22,0x1f,0x0e,0x0c,0x0c -,0xa9,0x47,0xd7,0x8d,0x9a,0x99,0xc7,0x9f,0x8f,0x3f,0xa5,0x9d,0xc3,0x9f,0x3b,0xae,0x2d,0x12,0x1f,0x17,0x27,0x22,0x17,0x0c,0x2f,0xa2,0x32,0x91,0x8f,0x9f,0xa8,0x17 -,0xa8,0xa7,0x27,0x8e,0xa1,0xa4,0xad,0x30,0x99,0x2c,0x3a,0x60,0x1d,0x21,0x0e,0x0e,0x06,0x27,0x42,0x1f,0x8e,0x98,0x94,0x9b,0x3c,0x8e,0xb8,0xdc,0x8f,0xa9,0xab,0x43 -,0x4e,0x9f,0x2f,0x2e,0x49,0x17,0x12,0x0f,0x18,0x12,0xa9,0x4c,0x18,0xa3,0xd0,0x9e,0xa8,0xbb,0x8d,0xb6,0xcd,0x91,0xa8,0x9d,0xab,0xc3,0xa4,0x2c,0x3b,0x37,0x11,0x11 -,0x0d,0x13,0x0e,0x9c,0xa9,0x18,0x96,0xa2,0x97,0xa5,0x27,0x94,0x2a,0x18,0x99,0xa9,0x98,0xa4,0xa2,0xa0,0x2d,0xba,0xb6,0x1f,0x1b,0x0d,0x16,0x06,0x4b,0x9c,0x0f,0xa4 -,0xad,0xa1,0x9e,0x2e,0x93,0x9d,0x1f,0x91,0x9c,0xa3,0xa8,0xc6,0x9f,0x35,0x32,0xb5,0x1f,0x16,0x0c,0x0f,0x0c,0x19,0x8a,0x3d,0x56,0xa4,0x60,0xab,0x27,0xb0,0x92,0x34 -,0xa0,0x98,0xa0,0x9c,0xb0,0x96,0xa8,0x2f,0x48,0x2b,0x14,0x0d,0x0b,0x11,0x0a,0x97,0x9c,0x28,0x95,0xab,0x9c,0xbb,0x2e,0x99,0x3c,0x1b,0xc7,0xbc,0x9f,0xab,0x9c,0x97 -,0xb0,0xe1,0xb8,0x39,0x26,0x0e,0x17,0x0d,0x10,0x8d,0x27,0x46,0x9d,0xba,0xa7,0x1d,0xb2,0x93,0x1b,0xcb,0x9b,0xa7,0xa0,0x48,0x97,0x9f,0x26,0xb5,0xce,0x1f,0x13,0x0e -,0x15,0x08,0x98,0x8d,0x2d,0x9c,0xaf,0xa9,0x1f,0x17,0x9a,0x5d,0x1e,0xa1,0xac,0x9d,0xa7,0x9c,0x8f,0xb3,0x57,0x6d,0x2f,0x18,0x0a,0x0e,0x0e,0x12,0x8c,0xb9,0xc7,0x91 -,0xae,0xa1,0x1e,0x28,0x97,0x1e,0x1b,0xab,0xb8,0x9b,0xb6,0x95,0x92,0x68,0xdb,0xab,0xe4,0x1b,0x0d,0x1f,0x0c,0x12,0x8e,0x32,0xac,0x9f,0xf0,0xcb,0x15,0x47,0x9d,0x1e -,0xc9,0x9a,0xa4,0x9e,0xb5,0x93,0x9e,0x47,0xb7,0xb0,0x2c,0x16,0x0d,0x1c,0x09,0x37,0x8a,0x3b,0xa0,0xad,0x57,0x32,0x0d,0x4b,0xa4,0x1b,0xaa,0x98,0x9b,0x9a,0x9e,0x8c -,0x9f,0x37,0xdb,0x47,0x1a,0x0b,0x0c,0x1d,0x08,0xaf,0x8d,0x35,0x94,0xa0,0xab,0x3d,0x14,0xbb,0x3e,0x14,0xaf,0xa7,0xa5,0x9e,0x9b,0x8d,0xb7,0xe7,0x9f,0x60,0x20,0x15 -,0x17,0x1c,0x06,0x9c,0x9a,0x1c,0x98,0x45,0xbd,0x20,0x13,0x9f,0x3c,0x28,0x99,0x9f,0x9a,0xa6,0x9a,0x95,0xd4,0xc2,0xc3,0x3e,0x1e,0x11,0x1a,0x1a,0x0d,0x8e,0xa3,0x2b -,0x9e,0x2e,0xf1,0x18,0x17,0xa8,0x3e,0x3b,0x96,0x9e,0x95,0xa0,0x95,0x95,0x45,0x47,0x5c,0x27,0x14,0x0c,0x19,0x14,0x0e,0x8a,0xaa,0xce,0x99,0xb4,0xa7,0x1a,0x22,0xa8 -,0x2a,0x23,0xa8,0xb1,0x9e,0xac,0x9b,0x98,0xb4,0xaf,0xad,0x38,0x28,0x0f,0x18,0x0f,0x0e,0x8c,0x36,0x4a,0x9f,0x68,0xaf,0x1a,0x30,0x9f,0x28,0xd0,0x9f,0xab,0x9b,0xb8 -,0x96,0x9e,0xdd,0xca,0xd8,0x2f,0x1c,0x0e,0x23,0x10,0x1e,0x89,0x37,0xcd,0xa9,0xbe,0xdc,0x12,0x2f,0xab,0x1f,0xcd,0x9f,0x9e,0x98,0x9f,0x8f,0xa2,0x6d,0x57,0x40,0x18 -,0x0f,0x0d,0x1b,0x0c,0x4e,0x87,0x35,0xa1,0x96,0xa2,0x41,0x15,0x4c,0xd3,0x13,0x40,0xa3,0xb6,0x9f,0x9f,0x8f,0x9b,0xbe,0xa6,0xbd,0x1d,0x13,0x0f,0x1d,0x09,0xc2,0x8c -,0x1c,0xaa,0x9f,0xb8,0x47,0x15,0xb7,0xb6,0x18,0xac,0xa5,0xad,0xa3,0xa5,0x93,0xa7,0x5e,0xae,0xf5,0x1e,0x18,0x19,0x26,0x0d,0x9a,0x8f,0x15,0xa1,0xad,0xd2,0x27,0x0e -,0xa8,0x4e,0x1c,0x9e,0x9e,0x9c,0xa6,0x9e,0x97,0xb5,0x37,0xc0,0x34,0x17,0x13,0x19,0x26,0x0d,0x8d,0x94,0x25,0x93,0xa8,0xac,0x1a,0x0f,0xbf,0x25,0x16,0xac,0xa8,0xa1 -,0xac,0x9c,0x8f,0xa8,0xbe,0xa9,0x61,0x1d,0x11,0x1c,0x1c,0x0c,0x8b,0xab,0x22,0x9a,0xbb,0xae,0x17,0x1c,0xa7,0x2f,0x21,0x9f,0xae,0xa9,0xc2,0x9e,0x97,0xbf,0xbc,0xac -,0x68,0x1e,0x17,0x2b,0x1c,0x12,0x88,0xe2,0x26,0x9b,0x57,0x7c,0x0c,0x1c,0xac,0x22,0x39,0x9a,0xa0,0xa3,0xa9,0x96,0x97,0x77,0xd2,0xae,0x25,0x16,0x10,0x2b,0x17,0x21 -,0x83,0x54,0xbe,0x97,0xc4,0x43,0x0a,0x22,0x5f,0x14,0x2e,0xa8,0xb5,0xad,0xa0,0x8f,0x93,0xb9,0xa7,0xa4,0x22,0x19,0x11,0x2e,0x0f,0x30,0x88,0x1e,0xaf,0x9d,0xc0,0x2f -,0x0e,0x4f,0xdb,0x17,0xc5,0xaa,0xbb,0xaa,0xa0,0x8f,0xa2,0xca,0xaa,0xa6,0x22,0x1c,0x18,0x29,0x0e,0xb7,0x8d,0x13,0xa6,0xad,0x47,0x1f,0x0f,0xb7,0xe5,0x20,0x9c,0x9f -,0xa7,0x9f,0x9b,0x92,0xbc,0xe3,0xc7,0x53,0x15,0x16,0x1a,0x25,0x0f,0x95,0x8f,0x19,0x97,0xb1,0x3f,0x19,0x12,0xbe,0x31,0x20,0x9e,0xac,0xa8,0x99,0x93,0x92,0xb1,0xb9 -,0xba,0x34,0x17,0x14,0x18,0x19,0x0d,0x8f,0xa1,0x1e,0x92,0xae,0xdd,0x1d,0x1d,0xb5,0x2a,0x29,0x9d,0xba,0xa9,0x9a,0x97,0x99,0xbc,0xb8,0xab,0x2f,0x1c,0x15,0x1e,0x16 -,0x0e,0x8c,0x5f,0x1f,0x96,0xcc,0x40,0x16,0x24,0xa4,0x28,0xd5,0x96,0xaf,0x9d,0x9b,0x95,0x9c,0x37,0x48,0xe8,0x1a,0x17,0x14,0x2a,0x12,0x1c,0x86,0x3c,0x3f,0x92,0xc5 -,0x3a,0x12,0x2c,0xaa,0x1a,0xc9,0x9a,0xab,0x99,0x9a,0x90,0x9e,0x2c,0x4b,0x4f,0x17,0x16,0x12,0x2a,0x0d,0x2b,0x87,0x25,0xbd,0x93,0xbb,0x3a,0x12,0x38,0xb1,0x17,0xb2 -,0x9d,0xa9,0x9d,0x9f,0x90,0xa5,0x32,0xc3,0x6f,0x1b,0x1a,0x17,0x31,0x0b,0xd3,0x8a,0x1a,0xac,0x9a,0xd4,0x28,0x14,0xc0,0xb1,0x1c,0xa1,0x9e,0xaa,0xa0,0xa0,0x93,0xc1 -,0x2b,0x5e,0x30,0x19,0x1a,0x1a,0x30,0x0d,0x9c,0x8d,0x1b,0x9b,0x9d,0xcb,0x1f,0x16,0xbd,0x3d,0x1b,0xa1,0xa6,0xa9,0x9e,0x9b,0x93,0xc3,0x3d,0xc5,0x2f,0x19,0x17,0x1a -,0x29,0x0c,0x92,0x94,0x1c,0x90,0xa1,0xc1,0x18,0x18,0xbb,0x24,0x1f,0xa5,0xad,0xb3,0xa4,0x98,0x95,0xb7,0xdf,0xaf,0x36,0x1a,0x18,0x1c,0x1f,0x0c,0x8c,0x9f,0x1a,0x8f -,0xb2,0xdf,0x17,0x25,0xa6,0x22,0x2e,0x9c,0xad,0xad,0xa1,0x96,0x9c,0x50,0x4e,0xd5,0x24,0x18,0x17,0x22,0x1b,0x12,0x87,0x59,0x22,0x8e,0xc9,0x40,0x11,0x2f,0xb8,0x1b -,0xcf,0x99,0xaa,0x9e,0x9d,0x90,0x9f,0x46,0xe0,0x3d,0x1d,0x16,0x13,0x28,0x10,0x1f,0x84,0x25,0xc8,0x8f,0xfa,0x27,0x10,0x43,0x53,0x18,0xb9,0x9d,0xac,0x9c,0x9a,0x8f -,0xa0,0xd3,0xc2,0x3b,0x1a,0x16,0x12,0x25,0x0b,0x60,0x87,0x19,0xa6,0x94,0xdb,0x25,0x19,0xb6,0x47,0x1b,0xa6,0x9c,0xb0,0xa0,0x99,0x92,0xba,0x41,0xc9,0x24,0x17,0x18 -,0x16,0x27,0x08,0x98,0x8c,0x14,0x93,0x9a,0x6b,0x1d,0x1c,0xad,0x29,0x28,0x9a,0xa2,0xa8,0x9f,0x96,0x99,0x4c,0x43,0x4f,0x1e,0x15,0x15,0x16,0x1c,0x0b,0x8c,0x93,0x19 -,0x8d,0xa0,0x37,0x1b,0x23,0xb0,0x20,0x2e,0x98,0xad,0xa7,0x9b,0x93,0x9c,0xc8,0xc7,0x59,0x1d,0x15,0x15,0x15,0x15,0x0d,0x89,0xa5,0x1b,0x8d,0xa9,0x37,0x1d,0x37,0xb4 -,0x1c,0x47,0x95,0xbd,0xa8,0x9b,0x94,0xa2,0x43,0xc5,0x5e,0x1b,0x1c,0x19,0x1b,0x12,0x16,0x84,0x39,0x2a,0x8c,0xcb,0x2f,0x18,0x4b,0xd5,0x1a,0xad,0x97,0xca,0xa0,0x99 -,0x95,0xb0,0x38,0xcb,0x42,0x17,0x1c,0x17,0x1b,0x11,0x34,0x83,0x1e,0xbe,0x8c,0x45,0x27,0x1b,0x66,0x3a,0x1a,0xa6,0x9e,0xcd,0x9b,0x97,0x97,0xb4,0x73,0x6f,0x37,0x14 -,0x19,0x14,0x1b,0x0d,0xb9,0x87,0x16,0x9e,0x8e,0x4e,0x2a,0x20,0xbb,0x34,0x1c,0x9c,0xa5,0xc5,0x9c,0x9a,0x98,0xcd,0xcf,0xc2,0x2b,0x18,0x1b,0x14,0x1c,0x0a,0x97,0x8d -,0x0e,0x92,0x9a,0x32,0x24,0x20,0xad,0x27,0x27,0x92,0xb5,0xb6,0x9c,0x96,0x9a,0x48,0xb9,0xc1,0x1f,0x17,0x1b,0x16,0x18,0x0e,0x8a,0x9d,0x12,0x8b,0xa0,0x28,0x1f,0x2c -,0xd0,0x1c,0x3b,0x96,0xe1,0xa9,0x97,0x95,0xa4,0xc5,0xb8,0x4f,0x1b,0x15,0x16,0x16,0x14,0x11,0x86,0xc5,0x23,0x87,0xaa,0x2d,0x21,0x49,0xd8,0x1a,0xc1,0x96,0x7c,0xa5 -,0x99,0x99,0xab,0xc4,0xba,0x3f,0x13,0x1b,0x15,0x13,0x11,0x15,0x84,0x2b,0x2a,0x85,0xf3,0x2a,0x2b,0x4b,0xcb,0x19,0xa3,0x92,0x3f,0x9e,0x95,0x9a,0xb8,0xc1,0xb9,0x28 -,0x12,0x20,0x12,0x13,0x0f,0x2c,0x85,0x19,0xbb,0x86,0x36,0x28,0x2d,0x41,0x3d,0x1d,0x9f,0x9b,0x4a,0x99,0x98,0x9d,0xb9,0xba,0xbf,0x1f,0x17,0x1f,0x0f,0x1b,0x0c,0xda -,0x87,0x11,0x97,0x8a,0x2e,0x35,0x2e,0xcb,0x2f,0x1e,0x99,0xa7,0x47,0x99,0x9e,0xa3,0xb8,0xbf,0x45,0x1f,0x1a,0x20,0x0f,0x1d,0x0c,0xab,0x8a,0x0f,0x92,0x8c,0x2c,0x35 -,0x3c,0xc6,0x36,0x2b,0x97,0xa9,0x44,0x9a,0x9a,0xad,0xcf,0xbd,0x33,0x1f,0x1b,0x1e,0x12,0x1a,0x0d,0x96,0x93,0x0f,0x8a,0x94,0x20,0x34,0x3d,0xce,0x2a,0x36,0x94,0xd5 -,0xd1,0x96,0x9d,0xad,0xba,0xbc,0x33,0x1d,0x1d,0x1c,0x11,0x1a,0x0e,0x8d,0x9e,0x17,0x85,0x9d,0x21,0x41,0x45,0x4f,0x1f,0x49,0x97,0x32,0xc6,0x97,0x9e,0xb3,0xb6,0xbe -,0x33,0x1c,0x1f,0x1c,0x12,0x14,0x15,0x89,0x61,0x28,0x83,0xae,0x22,0x5a,0xc8,0x3b,0x21,0xaa,0x9c,0x29,0xaa,0x99,0xa4,0xdd,0xb6,0xcc,0x26,0x1c,0x21,0x18,0x16,0x11 -,0x1f,0x87,0x21,0xca,0x84,0x3b,0x23,0xcd,0x66,0x3b,0x23,0x9f,0x9a,0x25,0x9e,0x96,0xac,0xbd,0xb8,0x52,0x24,0x18,0x27,0x15,0x16,0x0f,0xdb,0x89,0x16,0x97,0x89,0x2a -,0x38,0x61,0x58,0x2a,0x27,0x9b,0xbd,0x2b,0x98,0x9e,0xaa,0xae,0xbd,0xe9,0x29,0x1c,0x27,0x11,0x1b,0x0d,0xac,0x8d,0x0f,0x8d,0x8d,0x22,0xd3,0x7e,0xcb,0x2c,0x26,0x96 -,0x35,0x2b,0x96,0xa9,0xb4,0xb5,0xaf,0x48,0x1f,0x27,0x21,0x13,0x1b,0x0c,0x93,0x9a,0x14,0x87,0x9b,0x25,0xc1,0x69,0x64,0x26,0x47,0x96,0x2d,0x56,0x94,0xa9,0xb8,0xad -,0xbb,0x2e,0x1f,0x23,0x1a,0x15,0x16,0x0e,0x8b,0xad,0x1c,0x83,0xa9,0x25,0xe0,0x4c,0x42,0x1d,0xc5,0x98,0x1f,0xb2,0x8f,0xb2,0xb5,0xa2,0xb3,0x2e,0x1f,0x2a,0x19,0x11 -,0x18,0x13,0x8d,0xd6,0x2a,0x84,0xcc,0x21,0xb8,0x5d,0x2b,0x2a,0xb2,0xa2,0x26,0xa8,0x95,0xbf,0xba,0x9e,0xcc,0x29,0x2b,0x2c,0x1a,0x16,0x15,0x18,0x8b,0x2b,0x46,0x85 -,0x2f,0x2a,0xb1,0x45,0x2e,0x33,0xa2,0xa8,0x21,0x9a,0x97,0x59,0xaf,0xa1,0x39,0x26,0x2f,0x27,0x15,0x18,0x18,0x1b,0x8c,0x25,0xbf,0x87,0x2b,0x2d,0xae,0x4d,0x2b,0x52 -,0xa5,0xb6,0x2b,0x99,0x99,0x5f,0xaa,0xa0,0x30,0x2f,0x2c,0x27,0x15,0x19,0x13,0x1b,0x8b,0x19,0xb3,0x87,0x20,0x3e,0xa2,0x63,0x29,0xe8,0x9f,0x6c,0x29,0x9a,0x9f,0x7b -,0xaa,0xa4,0x2f,0x48,0x3a,0x26,0x17,0x1d,0x11,0x23,0x8d,0x13,0xa4,0x8a,0x1e,0xed,0xa6,0x3d,0x35,0xe8,0xa4,0x58,0x2b,0x94,0xa4,0x5e,0xa4,0xaf,0x31,0x46,0x2c,0x25 -,0x14,0x1f,0x0f,0x30,0x91,0x12,0x97,0x8f,0x23,0xb8,0xa1,0x4e,0x2e,0xad,0xa7,0x2c,0x67,0x97,0xab,0xeb,0xa6,0xa6,0x21,0x3b,0x56,0x19,0x12,0x25,0x0c,0xdb,0x96,0x0f -,0x90,0x91,0x24,0xaa,0xa5,0x35,0x37,0xb2,0xab,0x2b,0xf1,0x97,0xad,0xc3,0xa6,0xb1,0x29,0x56,0x44,0x1d,0x18,0x22,0x0c,0xaf,0x9f,0x0f,0x8d,0x9a,0x1e,0xa8,0xae,0x2c -,0x3e,0xa9,0xab,0x25,0xb3,0x9b,0xed,0xb4,0xa2,0xcb,0x30,0xca,0x31,0x1c,0x1c,0x1e,0x0e,0xa5,0xa7,0x19,0x8c,0x9c,0x21,0xa8,0xa5,0x24,0x57,0xa2,0x51,0x25,0xaa,0x9e -,0x5d,0xbb,0x9e,0xfc,0x30,0x55,0x29,0x1d,0x18,0x1b,0x11,0x9b,0xed,0x22,0x88,0xb9,0x2d,0x9d,0xbb,0x24,0xb8,0xa7,0x3b,0x41,0xa0,0xa5,0xca,0xba,0xa1,0x4d,0x2e,0xd4 -,0x25,0x19,0x1d,0x17,0x12,0x94,0x26,0x26,0x88,0x3b,0x2d,0x9a,0xb7,0x28,0xae,0xa0,0x55,0x43,0x9d,0xab,0x36,0xac,0xa4,0x28,0x4b,0xcd,0x1f,0x19,0x28,0x16,0x19,0x95 -,0x1b,0x40,0x8b,0x2d,0x36,0x95,0x41,0x3c,0x9f,0xb1,0x46,0x5f,0x9b,0xb9,0x32,0xa3,0xaf,0x25,0x32,0x53,0x1c,0x17,0x2e,0x15,0x29,0x97,0x18,0xa4,0x8d,0x1e,0xb0,0x9d -,0x3a,0xed,0x8e,0xab,0x2e,0xbb,0x95,0x4b,0xa2,0xad,0x36,0x3b,0x02,0x0b,0x00,0x1a,0x1a,0x06,0xac,0x2f,0x2e,0x89,0x8b,0x9e,0x8c,0x93,0xab,0x88,0x8d,0x51,0x8e,0x9e -,0xce,0x96,0x0d,0x9f,0x89,0x9b,0x9a,0xa8,0x1f,0x11,0x15,0x02,0x1e,0x0a,0x00,0x1b,0x0f,0x02,0x1a,0x0c,0x08,0x16,0x1f,0x20,0x0e,0x36,0x36,0xde,0xa6,0x99,0xbd,0xa5 -,0x9b,0x9a,0x9b,0x9e,0xa1,0xa7,0x82,0x8d,0x8e,0x80,0x89,0x88,0x81,0x83,0x88,0x86,0x86,0x5a,0xa0,0x8f,0x94,0x1f,0x16,0x4a,0x07,0x1b,0x0d,0x03,0x04,0x04,0x00,0x12 -,0x18,0x00,0x09,0x06,0x09,0x05,0x0b,0x03,0x0f,0x26,0x28,0xcf,0x3a,0x25,0x2d,0x95,0x90,0x87,0x8d,0x86,0x8e,0x8d,0x87,0x89,0x8e,0x86,0x8b,0xa2,0x80,0x8e,0x8f,0x88 -,0x8e,0xe8,0x9a,0x99,0xaf,0xaa,0xbe,0x1f,0x11,0x1c,0x14,0x12,0x0c,0x07,0x03,0x07,0x05,0x09,0x06,0x13,0x04,0x04,0xe3,0x0a,0x0e,0x28,0x1d,0x3f,0x9c,0x9c,0xd0,0x94 -,0x95,0x9c,0x97,0x8d,0x9b,0xae,0x9b,0xa1,0x9d,0x9a,0x8f,0xab,0x93,0x82,0xa6,0x8a,0x86,0x8d,0x82,0x86,0x92,0x92,0x87,0xaa,0x57,0x2c,0x1e,0x22,0x08,0x0b,0x0f,0x0c -,0x08,0x04,0x05,0x02,0x08,0x05,0x1c,0x0b,0x09,0x15,0x05,0x0a,0xd2,0xb9,0x0f,0x90,0xc2,0xa8,0x94,0x4d,0x8c,0x8b,0x83,0x8d,0x90,0x88,0x8b,0x86,0x90,0x88,0x94,0x95 -,0x8c,0x9d,0x8e,0x87,0x24,0xa1,0x99,0x16,0x99,0xa8,0x25,0x33,0xb5,0x13,0x19,0x31,0x12,0x18,0x16,0x07,0x0a,0x11,0x0a,0x03,0x05,0x03,0x0f,0x0f,0x34,0x2a,0x0c,0x3b -,0x09,0x3b,0x8f,0x95,0x8e,0x90,0x9b,0x91,0x8d,0xc8,0x93,0x8e,0x91,0xa5,0x2a,0x89,0x8d,0xcc,0xa5,0x9c,0x97,0x8a,0x80,0x99,0xbe,0x87,0xac,0xbf,0x8b,0x5c,0x5f,0xb7 -,0x1f,0x12,0x08,0x06,0x0b,0x13,0x08,0x0d,0x06,0x04,0x08,0x07,0x44,0x23,0x03,0x10,0x3a,0x0e,0x20,0x9f,0x12,0xc4,0x9b,0xd4,0x8a,0x8a,0xa0,0x8d,0x89,0xa4,0x8f,0x9c -,0x83,0x8a,0x99,0x8e,0x91,0x9b,0xce,0x8b,0x8f,0x98,0xdb,0x27,0xb0,0x85,0x55,0x23,0xa2,0x9c,0x9b,0xe3,0xd5,0xd9,0x23,0x0c,0xb4,0x0f,0x0b,0x2d,0x01,0x0b,0x0a,0x02 -,0x0f,0x0a,0x21,0x02,0x0e,0x17,0x06,0xd1,0xc2,0xc8,0x16,0xaf,0x39,0xae,0x8a,0x90,0x8e,0xb9,0x94,0x8d,0x8e,0x8c,0x85,0x81,0xa3,0x49,0x89,0x8b,0x9e,0x97,0xa7,0x94 -,0x96,0xab,0x12,0x1d,0x5b,0x8b,0xa2,0x0e,0x1d,0x20,0x76,0x10,0x69,0x0c,0x1b,0x12,0x0c,0x1c,0x1b,0x0f,0x06,0x20,0x19,0x12,0x0e,0x20,0x0c,0x0f,0x0e,0xb0,0x51,0xd4 -,0x3d,0x0d,0xe2,0xa6,0x85,0x8a,0x86,0x9e,0xb7,0x92,0x92,0x80,0x9a,0x92,0x97,0x9c,0x88,0x8f,0x94,0x50,0x8e,0x3e,0x32,0x8d,0xd9,0xb8,0x3a,0xbe,0xf9,0xa7,0xce,0x0d -,0x3e,0x26,0x18,0x0a,0x18,0x2e,0x04,0x0b,0x28,0x16,0x0c,0x16,0x08,0x12,0x15,0x15,0x0b,0x18,0x36,0x3d,0xba,0x21,0x37,0xa9,0x8d,0xc1,0x8f,0x91,0xa5,0x96,0x99,0x8a -,0x8e,0x8e,0x8a,0x9f,0x8d,0x96,0x9e,0x94,0xa1,0x9f,0xba,0x8f,0xbb,0x33,0x17,0x45,0xaf,0xa9,0x21,0xdb,0x19,0x0e,0xc4,0x3d,0x29,0x15,0x4e,0x12,0x2a,0x0d,0x2e,0x1e -,0x0c,0xb1,0x1b,0x17,0x0f,0x17,0x22,0x1d,0x34,0x1e,0x2f,0x37,0x27,0x1f,0x32,0x91,0xa4,0xc9,0x9f,0x4e,0x9d,0x97,0x9d,0x96,0x8e,0x95,0x96,0x9a,0x9c,0x92,0x95,0x92 -,0x8d,0x8c,0x9c,0x95,0x97,0xa9,0x21,0xb3,0xac,0x9d,0x1d,0x12,0x19,0x07,0x1d,0x6d,0x0e,0x09,0x13,0x17,0x1f,0x0c,0x11,0x09,0x18,0x0f,0x1e,0x26,0x1d,0x13,0x22,0xcc -,0x0f,0xa0,0xcc,0x66,0xa7,0xa2,0x98,0x95,0x95,0xa1,0x98,0x8d,0x8f,0x86,0x86,0xaf,0x97,0xb1,0xac,0x8d,0x8f,0x9f,0x2e,0xc6,0xbd,0xb7,0x36,0x2c,0x44,0x1e,0xfb,0x56 -,0x1d,0x14,0x26,0x56,0x2e,0xa3,0x22,0x12,0x20,0x36,0x18,0x6a,0x17,0x1d,0x1a,0x1a,0x1e,0x17,0xf4,0x0c,0x2e,0x2e,0x29,0x17,0x5b,0x1c,0xbc,0x30,0x2c,0x9f,0x5d,0xaf -,0x91,0x9a,0x49,0x8b,0x58,0x8f,0x94,0x97,0x8f,0xa0,0x9a,0x9f,0x86,0x96,0x9f,0x96,0x9b,0xa1,0x9f,0x9e,0x34,0x5c,0x6a,0x1a,0xd0,0x38,0x0e,0x1e,0x15,0x2b,0x0c,0x1b -,0x0e,0x0f,0x3d,0x0a,0x1e,0x22,0x1f,0x0c,0x24,0xde,0x21,0x37,0x23,0x1d,0xa6,0x59,0x9f,0xaa,0x1e,0xa2,0xd9,0xa1,0x9e,0x90,0x98,0xbf,0x9b,0x9d,0x90,0x8b,0x99,0x93 -,0x90,0xa1,0x8a,0x9a,0x5c,0x9d,0x97,0x1e,0xaa,0x6c,0x2e,0x23,0x10,0xb0,0x17,0x27,0x19,0x2d,0x1d,0x1a,0x15,0x1e,0x1b,0x19,0x27,0x0c,0xb5,0x13,0x11,0xc4,0x1c,0x1b -,0x3c,0x73,0x2d,0xd2,0x67,0xaa,0x2f,0x9c,0xb4,0xae,0x99,0x2e,0x9c,0xa5,0x8c,0x9f,0x99,0xae,0x9a,0x95,0xaa,0xac,0xab,0x8e,0xa5,0xc4,0xb1,0x6a,0x26,0x96,0xf7,0xab -,0xb5,0x16,0x62,0xb6,0x41,0x1c,0x1c,0x1e,0xaa,0x1d,0x10,0x2b,0x12,0x1a,0x24,0x1d,0x27,0x38,0xa9,0xce,0x3b,0x43,0x13,0xb4,0xd4,0x1e,0x20,0x57,0xcc,0x1f,0x29,0x36 -,0x21,0xb0,0xcc,0x3a,0x9a,0xd4,0x9c,0xab,0xab,0x8e,0x9f,0x91,0x9a,0x94,0x90,0xdb,0x8d,0x9a,0x9f,0xb4,0x9a,0x9c,0xb9,0x4d,0x30,0xb9,0x1a,0xcf,0xba,0x0f,0x13,0x38 -,0x15,0x25,0x18,0x10,0x1b,0x1b,0x11,0x14,0x67,0x27,0x0e,0x3e,0x2a,0x2a,0xaa,0xcb,0xaa,0x64,0xb4,0xe6,0x97,0x97,0x9b,0x98,0xae,0x9b,0xb6,0xc5,0x9b,0xc0,0xa9,0x95 -,0x4e,0xce,0x9a,0x9f,0x2e,0x31,0x4c,0xab,0x25,0x28,0x4f,0x36,0x42,0x26,0x64,0x3b,0x27,0x2d,0x2e,0x3d,0xa4,0x1f,0x60,0xa1,0x3a,0x46,0x5c,0xc0,0xb6,0xe9,0xa5,0xb2 -,0x24,0x63,0xf4,0x29,0xda,0xf4,0x51,0x3b,0x1d,0x29,0x1b,0xbf,0x2b,0x2d,0x30,0x1a,0x2d,0x15,0xc8,0xea,0xa6,0x9d,0x21,0x47,0xa3,0xa5,0xb2,0x9b,0x9c,0x98,0x92,0xa7 -,0xab,0x8e,0x95,0x97,0xaa,0x9d,0xd1,0xae,0x95,0x21,0x3b,0x2d,0x2c,0x1a,0x15,0x28,0x19,0x0e,0x29,0x2b,0x21,0x13,0x20,0x1b,0x2b,0x3b,0x4d,0xc1,0x23,0x3b,0x3b,0x4f -,0x9b,0x9e,0xcb,0xcb,0xb9,0xa6,0xc6,0xa0,0x37,0xa9,0xb9,0x9e,0x33,0x2d,0xa9,0xb2,0x9d,0xb7,0xcf,0x7a,0xa1,0xb0,0xa8,0x99,0xd5,0x38,0x3c,0x30,0x44,0x2e,0xa2,0x2e -,0xb6,0x24,0x2f,0xbf,0x27,0xe1,0xc0,0x2f,0x39,0xb6,0x3f,0x34,0x1c,0x3c,0xc5,0x5a,0x1c,0xcd,0x31,0x2f,0xce,0xfa,0x23,0x61,0xb0,0xba,0xa8,0x36,0x2f,0x67,0xaa,0xa8 -,0xa3,0x18,0xc8,0xb6,0x5b,0xb6,0xab,0xad,0x29,0xba,0xfb,0xb6,0xa4,0x65,0xb7,0xc2,0x42,0xcc,0xc9,0xbd,0xbd,0xdd,0xef,0x9f,0x34,0xb8,0xd1,0x40,0x4f,0x3d,0xa0,0x33 -,0x34,0x38,0x2c,0x34,0xc3,0x33,0x24,0x5a,0x2c,0x4e,0x32,0x25,0x34,0x2d,0xbd,0x68,0x54,0xbd,0x68,0x51,0x73,0x5f,0x5c,0x30,0x6e,0xb3,0xb8,0xae,0xe7,0xbb,0xb7,0x46 -,0xd5,0xa5,0x9d,0x9d,0xb0,0xe9,0xb0,0xbd,0xce,0xa2,0xa3,0xde,0xe6,0xcc,0x4d,0xcd,0xcd,0xcd,0xb8,0x59,0x3e,0xd9,0x2b,0x35,0xb7,0x34,0x27,0xfc,0x65,0x3e,0x5a,0x34 -,0xb5,0x38,0x2b,0xe0,0x34,0xf7,0x35,0xc5,0xce,0xb4,0x66,0x23,0x6c,0x40,0xd7,0xcd,0x25,0x2f,0xa5,0xe7,0x3f,0x4e,0x2d,0x34,0x2e,0x58,0xc6,0x48,0xd5,0x3f,0x4a,0xc6 -,0xb2,0xac,0x51,0xaf,0x4d,0x24,0x4e,0xae,0xad,0xce,0x3f,0x30,0x4f,0xc9,0xaa,0xb1,0x2e,0x2b,0x33,0xbd,0xa7,0x6d,0x2e,0x2b,0xd9,0xa8,0xb3,0xca,0x5e,0x2b,0x3f,0xbd -,0x77,0xef,0x48,0xba,0x4a,0x30,0x64,0x36,0xd8,0x3f,0x42,0x3b,0x24,0x44,0xc9,0x4f,0xf7,0xac,0xdc,0x3c,0x63,0x3e,0xb5,0xbf,0xb5,0xbb,0x2f,0x4d,0x50,0xa1,0xae,0xe3 -,0x68,0x2d,0xce,0xc9,0xc5,0xe9,0x5e,0x52,0xc8,0xc1,0x4d,0xae,0xbb,0x69,0xfb,0x34,0xb0,0xbf,0x3d,0x45,0x29,0xcf,0xb0,0xdf,0x3d,0xd9,0x32,0x31,0xba,0xba,0xc4,0x48 -,0x2c,0x33,0xd3,0xe6,0xba,0xda,0xcd,0xda,0xb6,0xb2,0x57,0x45,0x3b,0x56,0xd9,0xab,0xcc,0x2f,0x44,0xb8,0xb9,0xd4,0xbf,0x47,0x23,0x46,0x70,0xd8,0xab,0xc2,0xc8,0x3f -,0x42,0xca,0x48,0xb5,0xcd,0x4f,0xcc,0x2a,0x3f,0xce,0xbf,0x33,0x32,0xc4,0xe9,0x34,0x2a,0xaf,0xc6,0x1f,0x28,0x4e,0xcc,0xbd,0xe1,0xc5,0xba,0x54,0x55,0xc5,0xae,0xb2 -,0x66,0x43,0xcc,0xbf,0xd6,0xc2,0xbd,0x58,0x76,0xcc,0x2c,0xca,0x7b,0xed,0xbf,0x3f,0xb5,0x40,0xb2,0xa4,0xb3,0x50,0x2d,0x37,0x3a,0xb6,0xbc,0xba,0x46,0x45,0x4f,0x2d -,0x5c,0xb4,0xdf,0x2c,0xbb,0xc8,0x44,0x45,0x39,0x45,0xe3,0xc4,0x33,0xc9,0xba,0x30,0xd7,0xc9,0xac,0xfb,0xe2,0xb4,0x3c,0x5e,0x36,0xcb,0xb6,0xb7,0x36,0x45,0x75,0x3c -,0x2a,0x4d,0xaf,0xe4,0x5b,0x36,0xeb,0xba,0xb9,0x3a,0xed,0x44,0x3b,0xbb,0xc2,0x34,0xc0,0xbe,0x69,0x50,0x5c,0xc9,0x2d,0x32,0xa7,0xc9,0x30,0xbc,0x26,0x2d,0xf2,0xa3 -,0xae,0x3a,0xd3,0xb3,0x3e,0xd2,0x67,0x3b,0xb8,0xb6,0xab,0x47,0x47,0x36,0xd5,0xdd,0xbf,0xa8,0x3d,0x2a,0x2c,0xca,0xb1,0xfa,0x3d,0x40,0xd1,0xcf,0xbe,0xe4,0xbc,0xc2 -,0xcc,0xd8,0xc2,0xdb,0x2f,0xb0,0x4c,0x50,0xae,0x44,0x34,0xe7,0x3a,0x38,0x3f,0x49,0xb1,0x26,0x24,0xd9,0xad,0xb1,0x55,0x49,0x53,0xc6,0x56,0x3d,0x55,0x3c,0x62,0xf2 -,0xdb,0xb0,0xaf,0xe5,0x41,0xc1,0x2e,0x2e,0xae,0xbd,0x46,0xb9,0x45,0xbc,0xae,0xc7,0xc2,0xbe,0xb5,0x20,0x39,0xad,0xbb,0xbc,0x3f,0xd8,0x3d,0x2f,0xbe,0x5a,0x6f,0x5c -,0x2d,0x2b,0xbd,0x3f,0x4b,0x47,0x3e,0xbc,0x3c,0xaf,0xb9,0x56,0xcd,0xbc,0x2f,0xbb,0xb6,0x39,0xbb,0x3d,0xb8,0xae,0xb0,0xb8,0x29,0x29,0xda,0xe6,0x6c,0xc9,0xd6,0x38 -,0x3c,0xb2,0xb9,0xca,0xdc,0x33,0x40,0xbf,0x58,0x3f,0x31,0xb1,0xaf,0x4f,0xce,0x6c,0x35,0xaf,0xd6,0x3d,0xb0,0x2b,0x3c,0x6f,0xe8,0x44,0xb6,0x5c,0x3e,0xbe,0xdb,0x6e -,0x2d,0x34,0x5b,0xa4,0xfa,0xef,0xd4,0x21,0x3b,0xb5,0xc9,0xa7,0x3d,0x2b,0x56,0x47,0xc1,0x74,0xc0,0xd1,0xb8,0xae,0xc8,0x3e,0xaf,0x2a,0x3b,0xa7,0xb7,0x5f,0x28,0xc6 -,0x5e,0x5d,0xca,0x30,0x31,0xc3,0xae,0xbc,0x39,0x2e,0x3c,0xbb,0x62,0xd4,0x4a,0xdb,0xa7,0xe2,0xcd,0x62,0x5e,0x34,0x4b,0xaf,0xaf,0xd3,0x36,0x63,0x46,0x37,0xe2,0xcd -,0xb6,0xbd,0x29,0x28,0xde,0xd7,0xcf,0xb9,0x3a,0xbf,0xd8,0x33,0xaf,0x45,0xe6,0xaf,0xb0,0xf4,0x29,0xd7,0xbd,0xe5,0x71,0x44,0x39,0x71,0x3c,0xb4,0xc4,0x2e,0xe6,0x56 -,0xd3,0xb8,0x68,0x2f,0xe6,0xaa,0xab,0x49,0x2c,0x59,0x6c,0x5a,0x41,0xdf,0xc7,0x36,0xe7,0x49,0x4f,0xba,0xf7,0x64,0x3b,0xc7,0xb9,0x31,0xf4,0x4c,0x4d,0xa7,0xac,0xcf -,0x38,0x3e,0x50,0xd7,0xcd,0x54,0x46,0xbf,0xaa,0x5b,0x2b,0x37,0x33,0xbb,0xb7,0x63,0xac,0x3b,0x3c,0x43,0x3c,0xd7,0x58,0xe8,0xb2,0xa8,0xd1,0x51,0xce,0x31,0x30,0xbc -,0xb5,0xaa,0x51,0x2d,0xe6,0xbb,0x3a,0x37,0x37,0xd2,0xe3,0xba,0xbc,0x30,0x2c,0x2b,0xc3,0xbc,0x9f,0xbb,0xf2,0x2f,0x34,0xc5,0xbe,0xc6,0x2e,0x2b,0x38,0xaf,0xaa,0xa7 -,0x35,0x31,0x4e,0x2d,0xc0,0xaa,0xd3,0x4a,0x42,0x5e,0xd0,0xba,0xaf,0xba,0x39,0x3b,0xc4,0x79,0x2b,0x3d,0xb6,0xf7,0x3e,0x40,0xab,0x5f,0x5e,0x6d,0x35,0x46,0xca,0xb8 -,0x37,0xc4,0xe4,0x37,0xf9,0xb3,0xbf,0xbb,0xe7,0x3f,0x78,0x2f,0x31,0xaa,0xac,0x3a,0x3f,0x47,0xcd,0xbd,0x4d,0xc6,0xbe,0x2f,0x35,0x39,0xc5,0xb8,0xc2,0x46,0xb2,0xcb -,0x31,0xbe,0xc3,0xb6,0x39,0x2a,0x2d,0xaf,0xa4,0x53,0x37,0x6d,0x4f,0x35,0xcd,0xb7,0xbd,0x39,0x2f,0x5d,0x4f,0xc8,0x4c,0xc2,0xb3,0xec,0x45,0xb9,0xab,0x41,0x30,0x32 -,0x44,0xe8,0xae,0x7c,0x7c,0x72,0x69,0xd9,0xe2,0x3b,0x3a,0x43,0xd2,0xbf,0x67,0xc7,0xd7,0x69,0x3a,0xb8,0xbf,0xbb,0xc2,0x41,0x45,0x5a,0x43,0x72,0xe5,0xd5,0xab,0x3f -,0x2e,0xde,0xce,0x62,0x47,0x57,0xec,0xae,0x38,0x2a,0xbc,0xda,0xcc,0xcb,0xb9,0xc4,0xdb,0x5b,0x40,0x38,0x4a,0x59,0x46,0xbb,0xb9,0xc6,0x4e,0x32,0xbf,0xc6,0x3c,0x39 -,0x5d,0x54,0x41,0xac,0xb0,0xad,0x3d,0x2f,0xc8,0xca,0xca,0xc0,0xe7,0x3e,0x31,0x3e,0xc1,0xa8,0x44,0x3e,0xb5,0x30,0x7c,0x48,0x4f,0xba,0xbe,0x2c,0x3e,0x57,0xda,0xaf -,0x67,0x4a,0x4d,0xe9,0xea,0x62,0x33,0x4d,0xbe,0xcc,0x30,0xd9,0xc1,0x59,0xad,0xe6,0x3a,0x46,0xee,0xb8,0xbc,0x61,0x30,0x57,0xc5,0xae,0xb8,0xd0,0x56,0x3c,0xd7,0xd1 -,0xb0,0x35,0x29,0x67,0xba,0xb9,0x60,0x3d,0x4b,0xb4,0x3f,0x38,0x3e,0x37,0xb9,0x4d,0xbf,0xb4,0x4a,0x5d,0x3e,0xcb,0xaa,0x5b,0x35,0xfc,0x2f,0xcf,0xf8,0x35,0xc9,0xc4 -,0xae,0x43,0x51,0x45,0xdb,0xc9,0x33,0xca,0xaf,0xaf,0x36,0x38,0xb8,0x50,0x3a,0xaf,0xa6,0x53,0x3f,0xc2,0x37,0x3f,0x41,0xeb,0xbe,0xca,0x4d,0x49,0x3c,0x3d,0xb4,0xc9 -,0xc3,0xcf,0x23,0x2e,0xae,0xb3,0xc3,0x4b,0xc7,0xd9,0x51,0x4d,0x35,0xbd,0xf2,0x3c,0xbf,0x38,0xe8,0xbc,0xd2,0xf4,0x48,0xbc,0xcc,0x36,0x45,0xb9,0x55,0x4e,0x51,0x4a -,0xb1,0xab,0xe1,0x74,0x39,0x3c,0xf8,0xaf,0xc1,0x2f,0x2d,0x3a,0xaf,0xa9,0xd0,0x39,0x30,0x2c,0xbd,0xb7,0x5d,0xd1,0xcd,0x53,0x41,0xd6,0x4d,0x57,0xb2,0xbb,0x39,0x2c -,0xe3,0xc8,0xbb,0xc3,0xc8,0x34,0x2d,0xb4,0xbe,0xba,0xb2,0x4a,0x33,0x36,0x42,0xae,0xbd,0x5f,0x33,0x36,0xbf,0xd1,0xcd,0x9e,0xea,0x24,0x2f,0xc1,0xc7,0x2f,0xf8,0x41 -,0xb7,0xcc,0xc9,0xdc,0xbe,0x3c,0x2d,0xf1,0xc1,0xd3,0x47,0xd6,0x58,0x5a,0x47,0xcf,0x5e,0xe2,0xb6,0xbd,0x57,0xc8,0x33,0x60,0x5b,0xcb,0xaf,0xee,0x3f,0x35,0xc8,0xb3 -,0xb6,0x29,0x2e,0x3e,0xb8,0xb1,0xc0,0x3a,0x43,0x6b,0x3a,0x9f,0xdc,0x36,0xfd,0x4b,0x63,0xef,0xbd,0x39,0xe7,0xda,0x5b,0xc1,0xdd,0xf8,0xcf,0xdf,0x57,0x38,0x2d,0x46 -,0xce,0xbc,0x4b,0xbf,0xda,0xbf,0x43,0x4a,0xa3,0xc9,0x2c,0x34,0xce,0x2e,0xbe,0xaf,0xc3,0xbe,0x35,0x4a,0xb5,0x4f,0x46,0x34,0x3d,0xdb,0xcd,0xb6,0xc7,0xc0,0x4d,0x47 -,0xc0,0xbd,0x38,0x39,0x54,0xc0,0x3a,0xd8,0xb2,0x6d,0x4c,0xcb,0x40,0x35,0xc2,0x74,0xb1,0xc8,0x3d,0x2b,0x3a,0xc3,0xaa,0xb6,0xfe,0x76,0x3e,0x47,0x3b,0xc6,0x71,0xca -,0xb4,0x2a,0x4e,0xbc,0xc0,0xba,0xdc,0x3a,0x33,0xbf,0x3d,0x3f,0x51,0xd8,0xb9,0x49,0x5b,0xbe,0xba,0xc8,0xc2,0xb6,0x49,0x64,0x40,0x42,0xbc,0x4b,0xb9,0x5d,0x4c,0xdc -,0x68,0x4b,0x2b,0x2a,0x40,0x2f,0x33,0xdb,0xdb,0x4c,0x48,0x56,0xd8,0xaf,0xbc,0xa9,0x42,0xb2,0xa8,0xd9,0xab,0xa8,0xaa,0xc2,0xb4,0xbf,0xb5,0xc2,0x3d,0x2a,0x25,0x28 -,0x3a,0x36,0x30,0x2e,0x1a,0x1d,0x2d,0x31,0x3f,0xe7,0x26,0x48,0xae,0xa8,0xaa,0x9b,0x9c,0xa3,0xa0,0xa8,0x9c,0xad,0xab,0xb1,0xaf,0xce,0x54,0x4f,0x3b,0x1f,0x21,0x24 -,0x1f,0x1d,0x17,0x1f,0x22,0x25,0x19,0x21,0x38,0xe8,0xa8,0xa1,0xae,0xa6,0x9f,0xa6,0x96,0x92,0x99,0x9f,0xaf,0xaa,0xb1,0xa6,0xa9,0x62,0x34,0x22,0x28,0x17,0x20,0x26 -,0x1f,0x17,0x12,0x25,0x1f,0x1f,0x28,0x4f,0x64,0xcb,0xa7,0xa3,0x9d,0xa0,0xaa,0x9c,0x91,0x94,0x95,0x94,0xa8,0x5b,0x5f,0xb5,0xbb,0x3e,0x27,0x18,0x1b,0x1d,0x1b,0x1f -,0x1a,0x12,0x1b,0x1b,0x20,0x35,0x29,0x33,0xbd,0x9c,0xad,0x9a,0x90,0x93,0x97,0xa6,0xa2,0x9a,0x91,0xab,0xa6,0xbc,0xcd,0xba,0x30,0x22,0x19,0x26,0x20,0x1d,0x14,0x16 -,0x16,0x16,0x1a,0x1f,0x27,0x32,0xc9,0xa7,0xad,0xab,0x96,0x99,0x9b,0x9e,0x98,0x9c,0x9c,0x92,0x9e,0xa6,0xc4,0x36,0xc5,0x4f,0x2c,0x1b,0x17,0x1b,0x1f,0x1f,0x0d,0x18 -,0x27,0x1b,0x1f,0x2f,0x3c,0x3c,0xa6,0x9c,0xa2,0x9e,0xa0,0x9d,0x97,0x92,0x94,0x9a,0x9e,0xa6,0xa8,0xc9,0x36,0x3b,0x2d,0x20,0x29,0x1b,0x15,0x1a,0x1a,0x12,0x17,0x16 -,0x0f,0x23,0x44,0xa0,0x8e,0x8f,0x92,0x91,0xaf,0x2c,0x4f,0x9e,0x9a,0x17,0x05,0x1e,0x93,0x8f,0x8f,0x2b,0x1d,0xaa,0x9d,0x48,0x25,0x2f,0x0e,0x38,0x59,0x33,0x6d,0x95 -,0x1e,0x1e,0x29,0x22,0x9d,0xa1,0x96,0x19,0xa4,0x90,0x8f,0x88,0x8d,0x2d,0xad,0x98,0x22,0xdd,0x2b,0x0e,0x03,0x11,0x15,0xdc,0xa7,0x11,0x06,0x08,0x0a,0x1c,0xa3,0x9b -,0x97,0xa9,0x3d,0x2a,0x8f,0x81,0x8e,0x94,0x95,0x8e,0x93,0xb0,0xa5,0x1d,0x13,0xad,0x8c,0x8e,0xc9,0x1d,0x12,0x09,0x05,0x0f,0x36,0xcc,0x12,0x01,0x1a,0xaf,0x9d,0x83 -,0x93,0x2a,0xa2,0x86,0x95,0xad,0xc9,0x25,0x24,0x2f,0x49,0x9c,0x8d,0x28,0x14,0x19,0x13,0x19,0x5c,0xc7,0x10,0x0d,0x23,0xaa,0xa7,0x3f,0xd2,0xa5,0x51,0xb9,0x8e,0x8d -,0xb4,0x2d,0xac,0x96,0x85,0x8a,0x91,0x45,0x10,0x2e,0xb5,0xb5,0x43,0xa1,0x26,0x09,0x06,0x0c,0xf3,0x29,0x15,0x1b,0x16,0x1c,0x36,0xa1,0x53,0x15,0x9f,0x84,0x84,0x8f -,0x93,0x9d,0x67,0x27,0x1b,0xb7,0xa0,0x1c,0x0f,0x16,0x14,0xba,0x9b,0xad,0x11,0x0e,0xa4,0xb0,0xca,0x48,0x1a,0xed,0xab,0xb3,0x87,0x83,0x96,0xa7,0xa6,0xcb,0x36,0xa0 -,0x95,0x1c,0x0c,0x3a,0xc4,0x2d,0x25,0x28,0x3f,0x19,0x0a,0x10,0x20,0x0a,0x07,0x1d,0x26,0xc0,0x88,0x8a,0x47,0xbf,0xb6,0x92,0x88,0x8a,0x92,0x9d,0xb1,0x24,0x44,0x98 -,0x93,0x4d,0x25,0xba,0x1e,0x13,0x4d,0x14,0x03,0x09,0x3c,0x99,0xab,0x1a,0xa4,0xbe,0x12,0xa9,0x8f,0x94,0x8f,0x8c,0x98,0x9c,0x8d,0x84,0x93,0x20,0xc8,0xb6,0x34,0xb6 -,0x16,0x0a,0x0d,0x07,0x0a,0xb5,0xa4,0x30,0xa6,0x1b,0x1d,0x8b,0x8e,0x8e,0x8d,0xb6,0x67,0x90,0x96,0xad,0xbf,0x3e,0x14,0x0a,0x0f,0x07,0x02,0x01,0x02,0x00,0x09,0x13 -,0x0c,0x03,0x02,0x00,0x1a,0xca,0x13,0x97,0x99,0x26,0x96,0x8c,0x8c,0x83,0x81,0x84,0x8a,0x87,0x86,0x88,0x86,0x97,0xb1,0x8c,0x84,0x8a,0x8d,0xa9,0x2e,0x24,0x1b,0x1f -,0x1c,0xa1,0x41,0x9e,0x8b,0xbe,0x89,0x80,0x8f,0x95,0x88,0x87,0x89,0x8a,0x95,0x1b,0x1b,0xb4,0xce,0xb4,0xa6,0x0e,0x03,0x04,0x02,0x06,0x08,0x07,0x00,0x08,0x05,0x0b -,0xce,0x31,0x22,0x9f,0x36,0x1a,0xb4,0xa5,0x21,0x1d,0xb7,0x3a,0xae,0x90,0x4e,0x12,0x1c,0x0f,0x16,0xcc,0x29,0x13,0x0c,0x0b,0x06,0x1c,0xbc,0x4d,0x8b,0xa8,0x32,0x8a -,0x89,0x8f,0x92,0x9f,0x9d,0x93,0x87,0x8e,0xdf,0xca,0x26,0x10,0x29,0x39,0x3a,0x97,0xc4,0x2a,0x3d,0xa6,0x9c,0x90,0x85,0x99,0x8a,0x80,0x8f,0x88,0x84,0x9a,0x88,0x80 -,0x83,0x82,0x84,0x87,0x99,0xba,0xaa,0xd2,0xbf,0xd3,0x09,0x04,0x07,0x04,0x09,0x09,0x02,0x00,0x02,0x00,0x03,0x0a,0x01,0x00,0x17,0x0f,0x0f,0x33,0x0e,0x0e,0x10,0x18 -,0x1a,0x1d,0xce,0x12,0x10,0x25,0x14,0x1f,0xbc,0x2f,0x1a,0x29,0x58,0x24,0xa6,0xa0,0x12,0x99,0x8a,0x92,0x83,0x82,0x8c,0x82,0x86,0xa5,0x90,0x87,0x88,0x8d,0x87,0x90 -,0x99,0x8b,0x8c,0xa0,0x91,0xa7,0x33,0x9e,0xcd,0x1b,0x0f,0xd3,0x32,0xbf,0x85,0x9c,0xaf,0x8a,0x30,0x13,0x99,0xab,0x7d,0x6a,0x21,0x15,0x2b,0xc1,0x1c,0x1b,0x1f,0x0b -,0x08,0x0e,0x09,0x05,0x07,0x06,0x07,0x17,0x25,0x09,0x36,0x3c,0x0e,0xa2,0xab,0x2b,0x8f,0x99,0x36,0xb0,0xe4,0xaa,0xa1,0x96,0xb5,0x2c,0xe5,0x2e,0x15,0x10,0x07,0x05 -,0x1a,0x0e,0x1a,0x1e,0xbc,0x10,0x0c,0x9a,0xb0,0x90,0x80,0x8b,0x88,0x80,0x87,0x83,0x81,0x84,0x86,0x85,0x87,0x8b,0x8c,0x8c,0x98,0x8d,0x88,0x98,0x8a,0x8d,0xb6,0x1f -,0x25,0xd3,0x0f,0xda,0xbb,0x06,0x2b,0x30,0x0c,0xb0,0xae,0x0f,0x12,0x0b,0x0b,0x0a,0x06,0x04,0x01,0x06,0x03,0x02,0x06,0x05,0x00,0x03,0x01,0x03,0x05,0x0d,0x15,0x06 -,0xac,0xa8,0x43,0x83,0x92,0x9d,0x85,0x87,0x8a,0x85,0x97,0x3b,0x99,0x8d,0x91,0x8f,0x89,0x8c,0x93,0x95,0xa8,0xa3,0x9b,0xae,0xaf,0x22,0xa2,0x9e,0x3d,0x85,0x95,0xb0 -,0x81,0x8f,0x90,0x81,0x8d,0x89,0x83,0x8c,0x8d,0x8b,0x97,0xb6,0x39,0x19,0x0c,0x0e,0x0a,0x02,0x04,0x04,0x03,0x09,0x0f,0x25,0x0f,0x18,0xaa,0x0b,0x1b,0xae,0x08,0x16 -,0x4e,0x0f,0x36,0xbc,0x1d,0x26,0x25,0x19,0x10,0x1a,0x27,0x17,0x20,0x1e,0x0b,0x18,0x1f,0x1b,0x10,0x0e,0x42,0x12,0x1b,0x46,0x0a,0x2a,0x9c,0x29,0x94,0x88,0x98,0x89 -,0x8e,0x97,0x88,0x8a,0x8c,0x86,0x8b,0x93,0x95,0x8b,0x8b,0x8f,0x86,0x88,0x8c,0x8a,0x8d,0x84,0x8b,0x88,0x80,0x91,0x86,0x81,0x97,0x8b,0x8e,0x2e,0xb0,0x2d,0x09,0x0e -,0x0d,0x09,0x0b,0x0e,0x09,0x04,0x0c,0x0b,0x05,0x06,0x02,0x00,0x00,0x01,0x08,0x00,0x0b,0x13,0x00,0x1e,0x29,0x09,0xb6,0xa2,0x2a,0x98,0xa2,0xbe,0x9d,0xa1,0x9a,0xa7 -,0xa0,0xa4,0xaa,0xbe,0x6c,0x30,0x55,0x29,0x39,0xae,0x9f,0x85,0x99,0x89,0x82,0xa7,0x86,0x86,0x9b,0x84,0x8b,0x9b,0x89,0x8c,0x98,0x94,0x94,0x8f,0x97,0x95,0x91,0x94 -,0x93,0xab,0x4d,0x9d,0xaf,0x3c,0x18,0x0a,0x26,0x06,0x14,0x2f,0x08,0xd2,0x33,0x08,0xab,0xa3,0x40,0x9a,0xb7,0x20,0x2b,0x25,0x10,0x0d,0x08,0x04,0x06,0x08,0x0d,0x0d -,0x14,0x08,0x07,0x07,0x0a,0xb1,0x1a,0xbc,0xa3,0x0e,0x9e,0x9c,0x1f,0x8f,0x91,0x3f,0xa8,0xcc,0x27,0x1e,0x1c,0x1d,0x26,0x7c,0xac,0xb9,0x9d,0xa5,0xd6,0x91,0x9b,0xa2 -,0xae,0x9b,0x89,0xab,0x89,0x81,0x8e,0x81,0x83,0x88,0x80,0x80,0x83,0x81,0x85,0x87,0x88,0x89,0x8f,0xb2,0x2f,0x14,0x0e,0x10,0x0d,0x05,0x04,0x02,0x04,0x04,0x07,0x18 -,0x04,0x11,0x1b,0x01,0x22,0x19,0x00,0x0a,0x06,0x04,0x1e,0x11,0x07,0x0f,0x19,0x11,0x15,0x33,0x1a,0x1b,0x1c,0x1a,0x18,0x1e,0x18,0x13,0x1b,0xd8,0x9b,0x5a,0x93,0x91 -,0xdb,0x88,0x88,0x98,0x82,0x86,0x88,0x82,0x86,0x89,0x89,0x8e,0x9b,0xa3,0x9c,0xac,0xbd,0x9f,0xa6,0xb0,0x97,0xa8,0x9f,0xad,0x9a,0x88,0x4f,0x8b,0x8b,0xca,0x8a,0xa2 -,0x1f,0x93,0xba,0x21,0xa8,0x1d,0x19,0xe7,0x4d,0x2e,0x19,0x1e,0x17,0x0f,0x1a,0x13,0x11,0x0a,0x05,0x06,0x02,0x05,0x09,0x03,0x1f,0x27,0x0d,0x9b,0x66,0x13,0x98,0x4e -,0x3e,0x99,0x31,0x27,0x2c,0x1c,0x23,0x26,0x2d,0x2f,0x1f,0x26,0x13,0x19,0x1a,0x13,0x1d,0x0e,0xc0,0xb3,0x22,0x8a,0x9a,0x9f,0x82,0x8e,0x8a,0x81,0x89,0x85,0x81,0x83 -,0x81,0x81,0x81,0x83,0x82,0x82,0x83,0x85,0x87,0x94,0xa2,0xb9,0x31,0x1d,0x17,0x51,0x09,0x0f,0x33,0x07,0x2f,0xbd,0x0b,0x17,0x1e,0x10,0x1a,0x14,0x0e,0x0c,0x0a,0x05 -,0x03,0x05,0x02,0x01,0x04,0x05,0x05,0x0b,0x09,0x08,0x05,0x0d,0x16,0x0c,0xb6,0x6c,0x1b,0x9c,0xfe,0x2f,0x8b,0x92,0x93,0x86,0x8d,0x93,0x8b,0x8c,0x95,0x8d,0x92,0x9e -,0x93,0x8e,0x98,0x94,0xbc,0xce,0x45,0x5b,0x8f,0x2f,0x9c,0x8c,0x5d,0x8c,0x85,0x91,0x83,0x87,0x8e,0x83,0x87,0x88,0x8d,0x96,0xa7,0x2e,0xfa,0x2a,0x1d,0x1b,0x0b,0x0c -,0x0f,0x13,0x0e,0x0a,0x15,0x0a,0x0d,0xd7,0x0d,0x24,0xa6,0x0d,0x1f,0x34,0x0c,0x1d,0x1e,0x16,0x2f,0x20,0x3d,0x34,0x28,0x18,0x0d,0x20,0x1d,0x0d,0x13,0x12,0x06,0x05 -,0x17,0x0d,0x11,0x9b,0x17,0x1b,0x94,0xe9,0xa6,0x8f,0xc1,0xa9,0x97,0xad,0x98,0x89,0x8f,0x9c,0x8f,0x96,0x9e,0x8b,0x90,0x9c,0x8e,0x8c,0x8c,0x8b,0x82,0x87,0x8a,0x80 -,0x85,0x85,0x80,0x89,0x8c,0x85,0x98,0x9b,0x91,0x7d,0x2b,0x43,0x1d,0x0e,0x19,0x14,0x05,0x07,0x08,0x01,0x04,0x04,0x01,0x02,0x06,0x00,0x05,0x0d,0x00,0x0a,0x11,0x03 -,0x1b,0x25,0x0e,0x27,0x4a,0x1c,0x25,0x72,0x22,0x1d,0xe0,0x1f,0x14,0x5f,0x1f,0x18,0x41,0x39,0x17,0xa4,0xb7,0x40,0x83,0x97,0xa0,0x82,0x8f,0x8f,0x80,0x89,0x89,0x85 -,0x8d,0x98,0x8b,0x8b,0x9a,0x8d,0x9b,0x7e,0x8f,0x92,0xa7,0x99,0x97,0x26,0x97,0x97,0x32,0x89,0xbe,0x21,0x8b,0xb4,0xbf,0x8e,0x32,0x2b,0xb5,0x1a,0x15,0x29,0x0f,0x0f -,0x18,0x20,0x15,0x17,0x15,0x07,0x0f,0x0c,0x05,0x1d,0x0e,0x07,0xc1,0x17,0x1a,0x98,0x18,0x3a,0x97,0x2c,0x98,0x9c,0x40,0xac,0x9d,0xbb,0xa7,0xad,0x2f,0xcd,0x29,0x1a -,0x1d,0x3b,0x0d,0x1b,0xab,0x0c,0xac,0x8d,0x2b,0x8d,0x8a,0xa6,0x8b,0x8c,0x9f,0x97,0x9a,0xbd,0xad,0xa4,0x48,0xb9,0xc3,0x27,0xb6,0xdd,0x30,0x7a,0x1c,0x16,0xba,0x19 -,0x19,0x9f,0x13,0x2d,0x94,0x2d,0x9c,0x91,0xc2,0xa7,0xac,0xa2,0xa3,0xad,0x34,0x28,0x36,0x15,0x26,0x20,0x07,0x0c,0x12,0x07,0x2e,0x1f,0x0f,0x90,0x31,0xa6,0x85,0xa9 -,0x8e,0x88,0x93,0x8b,0x8a,0x8f,0x91,0x9a,0xa0,0x9b,0x9c,0xce,0x2d,0x29,0x20,0x2e,0x22,0x0b,0x2a,0x17,0x0f,0x9c,0x33,0xe2,0x99,0x17,0x4a,0x97,0x78,0xb8,0xaa,0x1f -,0xdf,0xa3,0x49,0xed,0x2d,0x1c,0x1a,0x1b,0x0d,0x0f,0x09,0x00,0x0d,0x01,0x09,0x14,0x03,0x2d,0x2f,0x1d,0x9a,0xa5,0xa6,0x8e,0x97,0x9b,0x8a,0x8c,0x9e,0x98,0x9b,0xad -,0x99,0x9f,0x34,0xa7,0x37,0xa9,0x8f,0x2d,0x8d,0x97,0xbb,0x83,0x90,0x98,0x84,0xa2,0x98,0x87,0x8d,0x8d,0x8b,0x93,0x9b,0x8d,0x97,0xaf,0xac,0x37,0x22,0x25,0x09,0x1e -,0x0e,0x08,0x2b,0x09,0x14,0xbc,0x13,0x2f,0x4a,0x1b,0xc5,0xdb,0x41,0xad,0xe3,0x32,0xdb,0x30,0x24,0x19,0x18,0x0f,0x1c,0x0f,0x0e,0x38,0x08,0x2b,0xbb,0x16,0xae,0x2f -,0x2b,0x94,0xac,0x9f,0x9e,0x2b,0xbe,0x9d,0x9a,0x9d,0xc6,0xb2,0x3a,0x24,0x3c,0x17,0x18,0x07,0x0f,0x0b,0x04,0x1d,0x05,0x0a,0x16,0x04,0x0e,0x1f,0x17,0x4c,0x3a,0x20 -,0x96,0x8f,0x9f,0x91,0x95,0x93,0x98,0x93,0x9e,0x9e,0x4b,0xb5,0x8c,0xc2,0x88,0x8c,0x9b,0x83,0x87,0x86,0x80,0x8a,0x87,0x84,0x8e,0x87,0x89,0x94,0x98,0xa4,0xcf,0x49 -,0xca,0x1f,0x19,0x20,0x16,0xae,0x1f,0x1c,0xa4,0x13,0x30,0xa8,0x1c,0xaa,0x29,0x0d,0x37,0x17,0x12,0x1e,0x16,0x0b,0x12,0x14,0x0d,0x0f,0x0d,0x06,0x0c,0x09,0x08,0x17 -,0x09,0x1e,0x22,0x19,0x9e,0x2f,0x2f,0x96,0xb9,0x94,0x8c,0x9e,0x95,0x93,0xaa,0x96,0x9f,0xcb,0x70,0x35,0x2b,0x18,0x1f,0x0e,0x53,0x28,0xc3,0x8f,0xd7,0x99,0x96,0xb4 -,0x8e,0x8f,0xb1,0x9a,0x58,0x2b,0xa3,0x99,0x9d,0x91,0x9a,0x9f,0x94,0x8d,0x93,0x8e,0x92,0x8f,0x86,0x94,0x85,0x87,0x8d,0x85,0x8a,0x8c,0x83,0x98,0x96,0x8f,0xcc,0x9b -,0xae,0x17,0x19,0x0e,0x07,0x09,0x03,0x02,0x01,0x00,0x00,0x02,0x01,0x02,0x08,0x01,0x0a,0x1a,0x0b,0x1d,0x26,0x11,0x74,0xd0,0x20,0x4a,0x3f,0x21,0x2c,0x25,0x2c,0x33 -,0x25,0x19,0x2d,0x40,0x4d,0x9e,0x27,0x92,0x8e,0xa5,0x87,0x8e,0x9b,0x85,0x90,0x9a,0x87,0x9f,0x92,0x91,0x9e,0x8c,0x8b,0x99,0x9e,0xa4,0xdb,0x5d,0xc9,0x26,0x2d,0x25 -,0x12,0xa9,0x3e,0x2e,0x9d,0x2f,0x3c,0x98,0xae,0xa0,0x96,0x38,0x49,0x9f,0xef,0x36,0xcc,0x18,0x14,0x21,0x15,0x13,0x19,0x09,0x22,0x1b,0x19,0x93,0x19,0x2c,0x99,0x1c -,0xbb,0x98,0x20,0xc8,0xbd,0x26,0xc7,0xbc,0x66,0xae,0xc8,0x3a,0x2f,0x2a,0x18,0x16,0x17,0x07,0x2c,0x0d,0x0a,0x1d,0x03,0x28,0xa1,0x1b,0x9c,0x95,0xaa,0x86,0x89,0x88 -,0x82,0x84,0x85,0x82,0x82,0x85,0x87,0x84,0x8b,0x8b,0x98,0xc4,0x8b,0xb0,0x9c,0x8d,0x1e,0xac,0xda,0x0e,0x46,0x1e,0x0b,0x0c,0x05,0x08,0x0a,0x09,0x06,0x09,0x09,0x09 -,0x0f,0x10,0x06,0x0b,0x06,0x05,0x1e,0x05,0x14,0x1d,0x03,0x4f,0x23,0x10,0xa0,0x3a,0xaf,0x92,0xaa,0x98,0x93,0x93,0x97,0x96,0x92,0x9e,0xae,0xa5,0xd0,0xa5,0xde,0x60 -,0x90,0x2d,0x8e,0x8a,0xbf,0x87,0x99,0xab,0x86,0x92,0x91,0x8d,0x9f,0x98,0x97,0x90,0x99,0x8f,0x9a,0x9f,0x93,0xa0,0x3f,0xc8,0x23,0x19,0xb8,0x0c,0x2b,0x2e,0x08,0x3e -,0x1d,0x0f,0xf4,0x19,0x18,0x3d,0x1f,0x29,0x1f,0x18,0x1c,0x24,0x19,0x14,0x12,0x0c,0x06,0x0b,0x07,0x0b,0x19,0x05,0x1d,0x30,0x19,0x9b,0x5a,0x23,0x9b,0x6c,0xc7,0x94 -,0xad,0xcc,0x55,0x3d,0x2b,0x38,0x34,0x28,0x2b,0x3e,0x24,0xc6,0x48,0x2e,0x90,0xb0,0x8b,0x81,0x8d,0x82,0x86,0x89,0x80,0x81,0x82,0x80,0x81,0x83,0x82,0x81,0x85,0x87 -,0x8c,0x9b,0x9d,0xdf,0x0e,0x0b,0x03,0x01,0x09,0x02,0x04,0x09,0x00,0x0a,0x0b,0x08,0x15,0x0c,0x0a,0x17,0x14,0x13,0x1b,0x1a,0x10,0x14,0x18,0x16,0x27,0x1b,0x0f,0x1b -,0x11,0x0d,0xb2,0x1d,0x28,0x97,0x1d,0x9c,0x94,0x3d,0x90,0x98,0xad,0x8c,0x8d,0x91,0x8c,0x8d,0x8e,0x88,0x86,0x98,0x93,0x92,0xab,0xa7,0xa5,0x2c,0xa9,0x2b,0x13,0x97 -,0x38,0xba,0x90,0xdd,0x98,0x8c,0x9d,0x90,0x92,0xa4,0x94,0x94,0xa5,0xa4,0xc0,0x1d,0x20,0x25,0x0f,0x0c,0x11,0x06,0x12,0x17,0x09,0xdf,0x13,0x0c,0xc2,0x14,0x1f,0xc1 -,0x17,0x21,0x23,0x14,0x2e,0x2d,0x39,0x51,0x47,0xc3,0xba,0xbc,0x27,0x15,0x23,0x13,0x18,0xe6,0x08,0x18,0x1f,0x06,0xe6,0x27,0x10,0xa7,0x22,0x2a,0x91,0x9d,0x94,0x88 -,0x89,0x87,0x87,0x89,0x85,0x86,0x87,0x89,0x86,0x89,0x8b,0x82,0x8c,0x8a,0x80,0x90,0x88,0x8b,0xaf,0x8d,0x9c,0x3d,0xbd,0x17,0x0b,0x11,0x0a,0x0b,0x0c,0x04,0x07,0x05 -,0x07,0x08,0x05,0x05,0x01,0x0e,0x09,0x08,0x22,0x07,0x0c,0x1c,0x0a,0x2e,0x4b,0x12,0x48,0x2d,0xbb,0x99,0xaa,0x9d,0x9c,0xa4,0xb4,0xaa,0xaa,0xd4,0x2f,0x33,0x1a,0xab -,0xad,0x3d,0x88,0xa8,0x98,0x84,0x99,0x8c,0x87,0x93,0x8a,0x89,0x8d,0x8b,0x95,0x9a,0x93,0x96,0x98,0x9d,0xa1,0xae,0x47,0xae,0x3f,0xa3,0xa6,0x16,0x98,0xbe,0x21,0x90 -,0x27,0x25,0xa4,0x21,0xcb,0xe6,0x27,0xc1,0x4c,0x2a,0x38,0x2c,0x1a,0x19,0x19,0x0f,0x0b,0x0e,0x05,0x0a,0x0e,0x00,0x1b,0x11,0x0d,0xb5,0x15,0x2b,0x9f,0x2c,0xdc,0xa9 -,0xd2,0xa3,0xba,0xcf,0x52,0x17,0x1d,0x1e,0x14,0x10,0x0c,0x11,0x09,0x17,0xcd,0x1d,0x91,0x97,0xa0,0x82,0x89,0x87,0x80,0x85,0x82,0x81,0x82,0x80,0x81,0x81,0x82,0x83 -,0x84,0x87,0x91,0x9f,0x3b,0x2d,0x0f,0x10,0x0e,0x00,0x0a,0x04,0x04,0x0d,0x03,0x08,0x12,0x07,0x16,0x1d,0x0e,0x1b,0x17,0x15,0x1e,0x11,0x12,0x0f,0x08,0x09,0x0a,0x0d -,0x02,0x12,0x0f,0x0a,0x9c,0x28,0x25,0x8f,0x47,0x9a,0x86,0x9f,0x8d,0x8c,0x9b,0x8f,0x8d,0x8d,0x8d,0x95,0x97,0x94,0x91,0x9c,0xa6,0xb0,0x25,0x96,0xc7,0x46,0x8d,0x2f -,0xb1,0x90,0xd1,0x8f,0x8d,0xb1,0x89,0x8a,0x91,0x88,0x8b,0x91,0x8d,0x97,0xb4,0xad,0xcc,0x1a,0x14,0x0e,0x07,0x1d,0x07,0x0e,0x3a,0x09,0x3e,0xbd,0x13,0xcf,0x2b,0x1c -,0xab,0xb0,0x4f,0x32,0x1d,0x16,0x24,0x20,0x1a,0x18,0x15,0x0a,0x12,0x0c,0x0e,0x2b,0x05,0x21,0x2a,0x09,0xb5,0x2d,0x0b,0xdc,0x1f,0x1e,0xa8,0x60,0x6e,0xb7,0xaf,0x96 -,0x8d,0x97,0x93,0x8e,0x8f,0x8e,0x88,0x97,0x8b,0x86,0x9a,0x82,0x84,0x89,0x80,0x88,0x88,0x80,0x86,0x86,0x87,0x95,0x94,0x92,0xb8,0x37,0x1b,0x0b,0x09,0x07,0x03,0x01 -,0x04,0x00,0x06,0x05,0x03,0x12,0x04,0x0a,0x1f,0x06,0x19,0x23,0x0a,0x14,0x15,0x14,0x1f,0x29,0x1c,0x3a,0x2b,0x37,0xbd,0xb7,0x2c,0x22,0x2c,0x19,0xab,0x1c,0x5f,0x9e -,0x22,0x9d,0x9b,0xac,0x8c,0x92,0x9d,0x8a,0x8f,0x8d,0x88,0x93,0x8f,0x8c,0x96,0x91,0xa4,0xae,0x58,0xb9,0x2c,0xca,0xae,0x21,0x8b,0x9b,0x9b,0x85,0xa8,0x98,0x89,0x9f -,0x90,0x94,0xa7,0x9e,0x4e,0x3a,0x42,0x24,0x26,0x1d,0x1f,0x0f,0x0c,0x15,0x09,0x1e,0x0c,0x11,0x49,0x0d,0x1e,0x28,0x08,0x28,0x24,0x0d,0x64,0x1e,0x1f,0x3b,0x21,0x41 -,0xc3,0x1f,0x2b,0x20,0x12,0x10,0x17,0x0a,0x07,0x1b,0x02,0x1e,0x2d,0x0e,0x97,0x34,0xcc,0x89,0x9d,0x8a,0x88,0x8c,0x85,0x82,0x86,0x84,0x83,0x85,0x88,0x85,0x88,0x8a -,0x88,0x9c,0x83,0x8e,0x8e,0x8c,0xc8,0x87,0x81,0x11,0x05,0x84,0x2b,0x15,0x23,0x03,0x0b,0x02,0x09,0x05,0x07,0x03,0x00,0x04,0x00,0x01,0x00,0x00,0x01,0x00,0x02,0x02 -,0x01,0x08,0x04,0x12,0x2e,0x15,0x2e,0xb4,0xa9,0x92,0x8b,0x8e,0x94,0x8a,0x80,0x86,0x89,0x84,0x81,0x80,0x83,0x81,0x84,0x81,0x81,0x82,0x80,0x81,0x81,0x81,0x83,0x84 -,0x82,0x86,0x8a,0x87,0x8b,0x8a,0x8c,0x99,0xaf,0x31,0x2d,0x17,0x0d,0x08,0x0d,0x04,0x04,0x0d,0x00,0x07,0x07,0x00,0x04,0x06,0x00,0x01,0x01,0x00,0x01,0x00,0x01,0x01 -,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x04,0x08,0x01,0x11,0x09,0x0b,0x5a,0x1a,0x4b,0xb1,0x2d,0xa7,0x90,0x93,0x8f,0x89,0x87,0x83,0x82,0x83,0x83,0x82,0x83,0x82,0x83 -,0x83,0x80,0x86,0x83,0x81,0x81,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x83,0x85,0x85,0x86,0x85,0x87,0x87,0x8c,0x86,0x8b,0x89,0x81,0x9d,0x89 -,0x8b,0x9f,0x8e,0xac,0x17,0x1c,0x0d,0x08,0x0b,0x02,0x02,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x03,0x01,0x02,0x04 -,0x01,0x04,0x04,0x03,0x05,0x04,0x04,0x03,0x04,0x04,0x05,0x06,0x03,0x0f,0x09,0x14,0x2c,0x0b,0x4c,0xa8,0x2d,0x9d,0x98,0x95,0x89,0x91,0x92,0x88,0x8f,0x8f,0x8b,0x8c -,0x8b,0x8b,0x8e,0x9e,0x8e,0x9f,0x8f,0x8c,0x99,0x85,0x89,0x86,0x83,0x87,0x83,0x80,0x83,0x80,0x82,0x82,0x82,0x82,0x82,0x83,0x82,0x84,0x85,0x83,0x85,0x89,0x8a,0x8b -,0x84,0x88,0x86,0x84,0x91,0x8f,0x97,0x9f,0x8b,0xdc,0x13,0x43,0x1a,0x11,0x0e,0x10,0x1e,0x0d,0x0a,0x35,0x3a,0x1a,0x21,0x29,0x4f,0xb7,0xbd,0x3d,0xaf,0xc7,0xd5,0x8e -,0x92,0x91,0x89,0x8f,0x86,0x83,0x87,0x84,0x84,0x88,0x84,0x89,0x8b,0x8f,0xa9,0xa5,0x41,0x23,0x13,0x1b,0x0c,0x0b,0x1c,0x0a,0x08,0x0a,0x03,0x06,0x07,0x01,0x02,0x00 -,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x00,0x04,0x02,0x01,0x03,0x02,0x03,0x05,0x03 -,0x08,0x07,0x08,0x09,0x0b,0x0b,0x0a,0x19,0x0c,0x21,0xa9,0x3a,0xb2,0xaa,0xad,0x90,0x96,0x96,0x84,0x89,0x8b,0x85,0x84,0x80,0x82,0x82,0x80,0x80,0x80,0x81,0x80,0x80 -,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x85,0x85,0x8d,0xa8,0xad,0x52,0x4c,0x1c,0x15,0x1b,0x0f,0x1f,0x18,0x0b -,0x1f,0x0f,0x09,0x18,0x0b,0x07,0x06,0x04,0x08,0x07,0x07,0x09,0x05,0x0a,0x0d,0x0b,0x0c,0x07,0x0a,0x08,0x0a,0x0d,0x04,0x0a,0x09,0x04,0x0f,0x09,0x05,0x0d,0x07,0x0d -,0x0f,0x07,0x09,0x0a,0x0b,0x09,0x09,0x09,0x06,0x07,0x08,0x07,0x0b,0x06,0x0c,0x0f,0x0c,0x37,0x16,0x0f,0x33,0x1b,0x24,0x3f,0x19,0x1b,0x23,0x1c,0x20,0x25,0x26,0x24 -,0x2f,0xc1,0xdc,0xd3,0x2b,0x27,0xb9,0x3e,0xb6,0x47,0x2d,0x92,0xa6,0xac,0x91,0x9c,0x98,0x9b,0x93,0x85,0x8c,0xbf,0xa1,0x92,0x9d,0xbb,0xc5,0xaf,0x48,0x1d,0x19,0xce -,0xae,0x21,0xad,0x93,0x92,0x8e,0xad,0x8b,0x80,0x86,0x81,0x81,0x83,0x81,0x81,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x86,0x8a,0x90,0x9e,0xb0,0x17,0x17,0x0a,0x02,0x08 -,0x03,0x03,0x04,0x01,0x05,0x07,0x05,0x0a,0x06,0x09,0x0c,0x0b,0x10,0x0c,0x0a,0x0c,0x09,0x10,0x0e,0x10,0x1f,0x14,0xc4,0xa7,0xbe,0x92,0x9c,0x90,0x88,0x8d,0x87,0x89 -,0x8b,0x87,0x87,0x85,0x87,0x88,0x86,0x86,0x83,0x87,0x8b,0x87,0x8d,0x8c,0x8d,0x9c,0x97,0xa6,0xa6,0x98,0xa7,0xaa,0xa7,0xa5,0x94,0x94,0x9c,0xa5,0xa2,0x9f,0xab,0xa2 -,0xad,0x3a,0x5b,0x5d,0x57,0x34,0x1a,0x2e,0x3a,0x1d,0x21,0x1e,0x1d,0x19,0x10,0x24,0x20,0x0c,0x10,0x2e,0xbc,0x26,0x15,0x29,0xbf,0x35,0x26,0x4c,0xd1,0x1c,0x0e,0x19 -,0x19,0x0d,0x06,0x0c,0x11,0x06,0x04,0x06,0x0b,0x14,0x0e,0x11,0x17,0x15,0x1a,0x2f,0xae,0x9e,0x98,0x90,0x89,0x86,0x84,0x82,0x81,0x80,0x80,0x81,0x82,0x81,0x82,0x84 -,0x84,0x8b,0x9c,0xa7,0xbd,0x3e,0x1e,0x11,0x0b,0x0b,0x0d,0x09,0x07,0x06,0x06,0x09,0x0a,0x09,0x08,0x06,0x08,0x09,0x09,0x0c,0x0c,0x09,0x0e,0x15,0x18,0x18,0x18,0x2b -,0x3b,0x5a,0xce,0xbf,0xc0,0xb6,0xa0,0x99,0x95,0x93,0x96,0x8f,0x89,0x8d,0x91,0x95,0x97,0x93,0x98,0xa0,0x9d,0xbe,0x7e,0xad,0xa8,0xa3,0xab,0xb0,0x9f,0x97,0x9e,0xa1 -,0x9c,0x9f,0xa7,0x9e,0x95,0xa0,0x45,0x65,0xa9,0xad,0x3d,0x4b,0xb5,0x5d,0x3e,0x4c,0xcb,0xc8,0x20,0x22,0xa9,0xb5,0x22,0x16,0x21,0x2c,0x19,0x1f,0x57,0x5f,0x2a,0x24 -,0x5b,0xd5,0x20,0x1f,0x27,0x24,0x1a,0x0c,0x09,0x0c,0x0b,0x0c,0x0d,0x0c,0x0c,0x0b,0x11,0x1d,0x1d,0x1a,0x1a,0x1f,0x23,0x2e,0x68,0x63,0xbc,0xa3,0x9b,0x8f,0x8a,0x88 -,0x84,0x82,0x81,0x81,0x81,0x81,0x81,0x80,0x81,0x81,0x85,0x88,0x8a,0x8f,0x99,0xaa,0x4d,0x28,0x1f,0x16,0x0f,0x0a,0x06,0x06,0x07,0x07,0x04,0x03,0x03,0x05,0x06,0x07 -,0x09,0x0a,0x0a,0x12,0x17,0x17,0x1a,0x18,0x23,0x35,0x44,0x49,0x2f,0x40,0xbb,0xb5,0xaa,0xa5,0xa2,0x9f,0x94,0x8d,0x95,0x9b,0x97,0x96,0x93,0x99,0x99,0x99,0xa8,0xa8 -,0x98,0x97,0xa4,0xa8,0x98,0x8d,0x96,0xa6,0x9d,0x95,0x9d,0xc0,0x9f,0xa1,0x41,0x2e,0xd2,0xa8,0x58,0x22,0x53,0x9f,0xa4,0x55,0x55,0xb1,0xbd,0x37,0x4a,0xb4,0x70,0x28 -,0x28,0x45,0x45,0x32,0x2b,0xe3,0xb2,0x29,0x1d,0x27,0x2d,0x29,0x1f,0x18,0x15,0x0f,0x0e,0x13,0x16,0x14,0x10,0x10,0x14,0x10,0x0e,0x10,0x16,0x16,0x13,0x0f,0x0a,0x0c -,0x11,0x16,0x1a,0x26,0x33,0xbd,0x99,0x8f,0x88,0x86,0x85,0x82,0x81,0x81,0x81,0x82,0x81,0x80,0x81,0x82,0x82,0x85,0x87,0x89,0x92,0x9d,0xd7,0x22,0x19,0x0f,0x0a,0x05 -,0x03,0x03,0x04,0x04,0x03,0x05,0x06,0x08,0x0c,0x0d,0x0c,0x0d,0x0e,0x12,0x1b,0x16,0x10,0x13,0x18,0x1b,0x20,0x29,0x43,0x3a,0xd7,0x9e,0x9c,0xa8,0xa9,0x95,0x92,0x9e -,0x9b,0x98,0x9f,0xaa,0xae,0x98,0x99,0xae,0xa8,0x94,0x8e,0x9a,0xaa,0x96,0x90,0x9f,0xa4,0x9a,0x9d,0xbf,0xca,0xaf,0xa5,0xaa,0xd3,0xb7,0x9c,0xa2,0xb8,0xb4,0xae,0xa8 -,0xd5,0x3e,0xcb,0x35,0x22,0x2c,0x31,0x43,0x28,0x1e,0x2d,0x59,0xcd,0x70,0xe6,0x3b,0x31,0x39,0x33,0x5c,0x3b,0x1c,0x1e,0x1c,0x17,0x1a,0x1a,0x19,0x1f,0x20,0x16,0x0f -,0x0f,0x11,0x12,0x12,0x11,0x0c,0x08,0x0a,0x0c,0x0e,0x12,0x17,0x1a,0x45,0xa9,0xad,0x9a,0x8e,0x89,0x85,0x84,0x83,0x83,0x82,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x83 -,0x89,0x8e,0x93,0x9f,0xd9,0x24,0x12,0x0d,0x0a,0x07,0x08,0x05,0x04,0x05,0x08,0x09,0x06,0x06,0x09,0x0a,0x08,0x0a,0x0a,0x09,0x0a,0x0d,0x13,0x12,0x12,0x1d,0x63,0xbf -,0x3a,0xd0,0x9e,0x9e,0xa9,0x9b,0x96,0x9e,0xa7,0x9d,0x93,0x96,0xa0,0xa1,0x8f,0x8d,0x9c,0x9f,0x9b,0x9c,0x9f,0xa5,0xa0,0xae,0x61,0xc1,0xa6,0xa2,0xad,0xbb,0xa3,0x93 -,0x99,0xa3,0xa5,0xa3,0xa5,0xa5,0xa2,0xa5,0xdc,0x30,0x31,0x55,0x4e,0x3e,0x4f,0x3f,0xc4,0xd7,0x34,0x3f,0x66,0xc6,0xb9,0x40,0x2e,0x20,0x1e,0x2c,0x38,0x3a,0x29,0x1c -,0x1e,0x3c,0x56,0x29,0x1d,0x21,0x19,0x11,0x0f,0x0e,0x0c,0x09,0x0a,0x0c,0x0c,0x0a,0x0a,0x0b,0x15,0x1a,0x14,0x18,0x1f,0x2c,0x6d,0xaa,0x98,0x92,0x8d,0x88,0x85,0x82 -,0x83,0x82,0x81,0x80,0x80,0x81,0x81,0x81,0x82,0x85,0x87,0x8c,0x9f,0x6a,0x44,0x29,0x13,0x0b,0x0b,0x0a,0x09,0x09,0x0a,0x09,0x07,0x07,0x0a,0x0c,0x09,0x05,0x09,0x0c -,0x09,0x0a,0x0f,0x12,0x12,0x1b,0x2c,0x2f,0x29,0x26,0x45,0xaf,0xb7,0xc8,0xb6,0xaa,0xa8,0xa4,0x9f,0x9e,0x9d,0x9a,0x94,0x90,0x94,0x99,0x9a,0x98,0x98,0x9d,0xa4,0xaa -,0xa9,0xab,0xa8,0xaf,0xaf,0xac,0xad,0x9f,0x9e,0xa2,0xae,0xa4,0xa6,0xac,0xab,0xc9,0xcd,0xcc,0xde,0x57,0xde,0x4d,0x4a,0x76,0x4e,0x39,0x3c,0x39,0x2f,0x2e,0x28,0x28 -,0x23,0x23,0x26,0x27,0x27,0x29,0x2f,0x32,0x35,0x37,0x3f,0x37,0x33,0x34,0x32,0x2c,0x27,0x2b,0x23,0x23,0x25,0x29,0x27,0x2a,0x2d,0x2e,0x38,0x3e,0x52,0x63,0xcb,0xda -,0xc2,0xe9,0xc2,0xbb,0xb8,0xad,0xac,0xa8,0xa8,0xa3,0xa3,0xa5,0xa5,0xa0,0xa2,0xa1,0xa7,0xa7,0xae,0xac,0xa8,0xaa,0xa7,0xa2,0xa2,0xa3,0x9e,0xa5,0xa6,0xa5,0xae,0xb3 -,0xbd,0x69,0x52,0x3a,0x2f,0x27,0x27,0x22,0x23,0x23,0x20,0x1f,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x19,0x1c,0x1f,0x1c,0x23,0x2a,0x25,0x37,0x2e,0x3d,0xdf,0x4f,0xca,0xbd -,0xb5,0xae,0xaa,0xa5,0xa9,0xa6,0xa3,0xa4,0x9b,0xa0,0x9d,0x98,0x9c,0x99,0x9c,0x9f,0x99,0x9d,0x9d,0x9c,0xa5,0xa2,0xa1,0xa6,0xaa,0xaf,0xb1,0xad,0xb3,0xb5,0xba,0xc0 -,0xcf,0x79,0x4d,0x4f,0xe1,0x3d,0x39,0x40,0x30,0x26,0x24,0x21,0x26,0x21,0x1e,0x27,0x23,0x20,0x1e,0x19,0x1e,0x1f,0x18,0x1d,0x21,0x1c,0x1e,0x1e,0x20,0x22,0x1d,0x1e -,0x1f,0x25,0x21,0x1d,0x23,0x24,0x1f,0x21,0x20,0x25,0x2c,0x2c,0x36,0x3b,0x49,0xf0,0xca,0xab,0xad,0xac,0xa0,0x9e,0x99,0x94,0x96,0x92,0x8f,0x8f,0x8d,0x8f,0x8e,0x8f -,0x90,0x8f,0x92,0x92,0x94,0x96,0x9b,0x9e,0xa0,0xa8,0xae,0xb7,0xe5,0x5a,0x47,0x2c,0x30,0x2b,0x1f,0x22,0x1c,0x1a,0x19,0x16,0x16,0x13,0x13,0x12,0x10,0x12,0x13,0x11 -,0x14,0x16,0x16,0x1a,0x1d,0x1d,0x21,0x28,0x2c,0x3c,0xfd,0xc3,0xbd,0xaf,0xac,0xa9,0xa4,0xa0,0x9e,0x9f,0x9e,0x9d,0x9c,0x9d,0x9e,0x9f,0x9d,0xa0,0xa3,0x9e,0xa0,0xa5 -,0xa3,0xac,0xaa,0xa1,0xaa,0xa5,0xa3,0xab,0xab,0xae,0xb4,0xb4,0xbe,0xbd,0xc0,0xd2,0xda,0x68,0x42,0x3c,0x3a,0x2e,0x34,0x36,0x2c,0x2c,0x2e,0x27,0x2d,0x2f,0x2b,0x3a -,0x37,0x36,0x40,0x38,0x36,0x3a,0x30,0x31,0x37,0x37,0x39,0x3f,0x32,0x38,0x35,0x2d,0x36,0x31,0x2e,0x32,0x2f,0x2d,0x3b,0x3b,0x3f,0x5a,0x4b,0x52,0xcf,0xdd,0xcf,0xbb -,0xbd,0xbb,0xb1,0xb0,0xab,0xa7,0xa9,0xa4,0xa6,0xa5,0xa3,0xa5,0xa5,0xa9,0xaa,0xaa,0xab,0xab,0xae,0xaf,0xb6,0xc3,0xc5,0x69,0x4a,0x46,0x35,0x2e,0x2d,0x28,0x28,0x24 -,0x21,0x20,0x1f,0x21,0x1f,0x1f,0x20,0x1e,0x1f,0x21,0x23,0x28,0x29,0x2c,0x2e,0x2e,0x36,0x39,0x3b,0x4a,0x48,0x55,0xd4,0xd9,0xc7,0xb6,0xb6,0xb4,0xac,0xac,0xaa,0xa7 -,0xa8,0xa8,0xa5,0xa4,0xa4,0xa0,0xa2,0xa6,0xa5,0xa7,0xab,0xab,0xac,0xad,0xb1,0xb3,0xba,0xbf,0xbf,0xcd,0xdd,0xd6,0xfa,0x4f,0x5e,0x46,0x3a,0x3c,0x3a,0x37,0x3b,0x3e -,0x3d,0x3c,0x3d,0x34,0x36,0x38,0x2f,0x33,0x33,0x34,0x33,0x38,0x38,0x35,0x3b,0x3e,0x3b,0x3f,0x47,0x40,0x47,0x44,0x44,0x4e,0x5e,0xea,0xdd,0xd2,0xcc,0xef,0xd6,0xce -,0x5d,0xde,0xe1,0x76,0xe2,0xd6,0xcd,0xc9,0xbc,0xbc,0xbe,0xb4,0xb7,0xb6,0xaf,0xb5,0xb1,0xb0,0xae,0xad,0xae,0xab,0xac,0xaf,0xac,0xaf,0xb4,0xb2,0xbb,0xc2,0xbf,0xd0 -,0xe7,0xd9,0x71,0x56,0x48,0x47,0x3f,0x37,0x35,0x2f,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2b,0x2a,0x2c,0x29,0x29,0x2c,0x28,0x28,0x2d,0x2a,0x2d,0x33,0x2f,0x37,0x37,0x3a -,0x49,0x48,0x5b,0x6b,0xed,0xc8,0xc3,0xba,0xb6,0xb8,0xb3,0xb8,0xb6,0xb4,0xb9,0xaf,0xb6,0xb9,0xb2,0xbb,0xb8,0xb4,0xb9,0xba,0xba,0xb8,0xbc,0xbc,0xbd,0xd0,0xbe,0xc1 -,0xce,0xbb,0xc7,0xd7,0xc5,0xf5,0x5e,0x7c,0x4c,0x59,0x4b,0x45,0x48,0x43,0x4a,0x46,0x45,0x44,0x44,0x4a,0x46,0x49,0x45,0x41,0x56,0x4d,0x58,0xd0,0x6f,0xdc,0xc8,0x5b -,0xed,0xfa,0x4d,0x77,0x4e,0x48,0x5f,0x46,0x4e,0x5e,0x44,0x50,0x54,0x48,0x53,0x4b,0x41,0x4f,0x4f,0x4b,0xea,0xd3,0xee,0xcd,0xc6,0xe9,0xd5,0xd6,0x68,0xcf,0xed,0x58 -,0xd1,0x66,0xf6,0xca,0xf0,0xcb,0xc9,0xd5,0xc2,0xde,0xe1,0xcb,0xeb,0xd5,0xcf,0xdb,0xcc,0xcf,0xd6,0xe0,0xee,0xf7,0x67,0xde,0x55,0x51,0x7c,0x48,0x56,0x58,0x48,0x5e -,0x57,0x55,0x5d,0x4e,0x63,0x5d,0x59,0xec,0x67,0xdf,0xcd,0xe4,0xcf,0xd8,0x7e,0xd6,0xdc,0xdb,0xe8,0xdc,0xdd,0x66,0xe9,0x66,0x61,0x77,0x58,0x66,0x59,0x51,0x68,0x59 -,0x61,0xe8,0x65,0xdc,0xda,0x63,0xf4,0x56,0x4d,0x5c,0x5d,0x50,0x53,0x5d,0x4b,0x52,0x5c,0x55,0x6b,0x61,0x67,0x5a,0x55,0x58,0x5a,0x70,0x5e,0xf4,0xde,0xd6,0xcf,0xd2 -,0xd7,0xdc,0xee,0xd8,0xca,0xdd,0xce,0xca,0xdd,0xcd,0xd0,0xd3,0xc6,0xcf,0xd0,0xd4,0xe6,0x76,0xfb,0x76,0x59,0x6f,0x64,0x7a,0xda,0x6c,0x67,0x69,0x4c,0x61,0xfd,0x4b -,0x6e,0x66,0x4b,0xe4,0x5b,0x5c,0xd0,0x70,0xf0,0xdc,0x60,0x6b,0xe9,0x5f,0x5a,0xf7,0x71,0xec,0xd8,0x5c,0x61,0x67,0x4b,0xf1,0x61,0x4a,0xe4,0x4d,0x49,0xe4,0x4e,0x7a -,0xcd,0x54,0xe9,0xd9,0x57,0xdc,0xe1,0x57,0xfd,0xdf,0x61,0xee,0xde,0x5b,0x67,0x5e,0x4c,0xf3,0x70,0x5a,0xd5,0x59,0x66,0xcf,0x61,0xdc,0xd5,0x5b,0xd5,0xdb,0x5d,0xde -,0xeb,0x5e,0xf2,0xdb,0xed,0xd4,0xcd,0x6a,0x73,0x68,0x53,0xdd,0xef,0x65,0xd6,0xfd,0xf2,0xd2,0xf7,0xd3,0xd2,0x6c,0xda,0xfb,0x5f,0xe7,0x7d,0x5d,0x76,0xd9,0xd9,0xd8 -,0xd8,0xf7,0x75,0x72,0x59,0xfc,0x75,0x56,0xe6,0x69,0x53,0xd5,0xdc,0xde,0xce,0xfa,0xe5,0xec,0x65,0x6a,0x57,0x57,0x5f,0x6a,0x7d,0x78,0x7a,0x7e,0x53,0x50,0x59,0x57 -,0x5c,0x5e,0x6c,0x5a,0x5e,0xd8,0xf7,0xe5,0xcd,0xdb,0xdd,0xde,0xef,0x6d,0x79,0x6d,0x69,0xf6,0xda,0xe2,0xda,0xdd,0x5d,0xed,0xde,0xfc,0xe1,0xe8,0x7a,0xfd,0x7c,0xe6 -,0xeb,0xd7,0xd9,0xe5,0xfc,0x7c,0xec,0x6c,0xf0,0xfa,0x6c,0xe9,0xde,0xf8,0xe8,0xfc,0x58,0x73,0x74,0x5b,0xf8,0x69,0x56,0x5e,0x59,0x5b,0xfc,0x62,0x5f,0x63,0x51,0x65 -,0x5e,0x64,0xf8,0x68,0xfd,0xe4,0xee,0xdf,0xe8,0x5b,0x58,0x63,0x5e,0x65,0xea,0x67,0x6b,0x72,0x64,0xec,0xe8,0x5e,0xeb,0x5d,0x4c,0x5c,0x4c,0x61,0x6e,0x6e,0xdf,0xd9 -,0xd3,0xcc,0xcb,0xdf,0xe6,0xcf,0xdb,0xdb,0xd0,0xea,0xea,0xdc,0xf0,0xe7,0xdb,0x71,0xef,0x5d,0x4d,0x50,0x4c,0x5a,0x59,0x5b,0x77,0xdb,0xce,0xd1,0xce,0xcf,0xd5,0xcd -,0xce,0xdd,0xd7,0xd9,0x7b,0xe6,0xec,0xfc,0xd8,0xdb,0xf8,0x63,0x65,0x53,0x4e,0x5b,0x45,0x48,0x5d,0x52,0x5e,0xe9,0xf5,0x77,0xe8,0xd8,0xd8,0xcd,0xcd,0xdd,0xdc,0xdc -,0xdd,0xce,0xd6,0xda,0xd9,0xed,0xfc,0x4f,0x62,0x60,0x48,0x4e,0x4d,0x4b,0x61,0x5d,0x5a,0x5d,0x66,0xe8,0xe9,0xd4,0xd9,0xe9,0xd6,0xdc,0xe2,0xcd,0xd8,0xce,0xd5,0x71 -,0xfe,0x62,0xe5,0x64,0x52,0x5d,0x58,0x5c,0x65,0x54,0x51,0x5b,0x5b,0x5e,0x67,0x6e,0x68,0x6e,0xf4,0x7d,0xd9,0xcf,0xda,0xca,0xd2,0xe2,0xd3,0xdd,0xe2,0xe2,0xe9,0xe4 -,0xdd,0xdf,0xe5,0xe4,0x6c,0x5c,0x5a,0x5a,0x55,0x53,0x59,0x4d,0x4c,0x5a,0xe8,0xe6,0xd6,0xcc,0xd9,0xdc,0xe2,0xfc,0xe4,0xed,0xe7,0xdf,0xd3,0xcc,0xd0,0xce,0xdb,0xf5 -,0xfb,0x7d,0x52,0x50,0x4f,0x42,0x44,0x4f,0x4d,0x57,0xe8,0x7b,0x63,0xe5,0x5a,0x5c,0xdd,0x5f,0x6d,0xcf,0xcc,0xcb,0xc8,0xc9,0xcf,0xd4,0xcb,0x6b,0x56,0x4e,0x39,0x30 -,0x32,0x2b,0x3d,0x7b,0x3e,0xb9,0xb5,0xc6,0xb0,0xb2,0xc9,0xbc,0xbc,0xc3,0xdc,0xc8,0xcb,0x62,0xc8,0xc6,0xd6,0xcf,0xdb,0x49,0x35,0x28,0x2b,0x1f,0x1b,0x31,0xbb,0x25 -,0xd0,0x9a,0x33,0xb0,0x9e,0x4f,0xbb,0xaf,0xb1,0xcf,0x53,0xab,0x5e,0x50,0xa1,0xae,0xd0,0xa0,0xc4,0x2d,0xb6,0x37,0x25,0xec,0x3b,0x2a,0x1f,0x18,0x1d,0x0f,0xcf,0xb0 -,0x20,0x87,0x96,0x16,0xb0,0xc1,0x12,0x3c,0x88,0x86,0x1f,0x0a,0x0f,0x1a,0x8e,0x85,0x8c,0x8f,0x98,0x1d,0x08,0x2e,0x97,0xb1,0x24,0x05,0x01,0x0d,0x0b,0x09,0xa8,0x90 -,0x87,0x8c,0x07,0xa5,0x80,0x88,0x87,0xa1,0x1c,0x2c,0x25,0x2c,0xd1,0xaa,0xaa,0x0d,0x08,0x12,0x1a,0x8e,0x8b,0x2d,0x2d,0x1c,0x17,0x09,0x04,0xa7,0x80,0x2f,0x5f,0x30 -,0x09,0x91,0x83,0x94,0xb8,0x9c,0xa5,0x14,0x0b,0xa5,0x9e,0x2c,0xb9,0x17,0x20,0x9d,0x38,0x29,0xa5,0x91,0xbc,0x18,0x1f,0x1e,0x38,0x8b,0x1a,0x0e,0x9c,0x1a,0x3e,0x99 -,0xa8,0xf6,0x1c,0x22,0xa3,0xa5,0x98,0x96,0xd5,0x93,0xd7,0x21,0x95,0x8c,0xad,0x37,0x25,0x13,0x0b,0x08,0x0a,0x09,0x91,0x17,0x12,0x93,0x31,0x8b,0x84,0x91,0x28,0x1a -,0x93,0x97,0x5f,0x92,0xb7,0x16,0xb3,0x1d,0x16,0xae,0x8a,0x95,0x18,0x0f,0x13,0x16,0x0e,0x0f,0x1f,0x86,0x33,0x00,0x1c,0xcb,0x89,0x81,0x8f,0x9c,0x9e,0xa2,0xb5,0x2d -,0x94,0x96,0x2a,0x2c,0x09,0x07,0xa9,0x52,0x29,0x9a,0x60,0x14,0x0c,0x1b,0x30,0x2f,0x87,0x32,0x0c,0xa4,0x2b,0x9a,0x85,0x9f,0x1b,0x29,0xaa,0x30,0x2b,0x8d,0x8d,0xca -,0x9e,0x27,0x0b,0xe9,0xa5,0xb3,0x9c,0x38,0x11,0x08,0x07,0x11,0x27,0x88,0x2b,0x1e,0x91,0x15,0xbe,0x88,0x94,0x9f,0xd7,0x97,0xab,0x14,0xb8,0x41,0xad,0x8d,0x51,0x1c -,0xa5,0x8e,0xcc,0x25,0x19,0x18,0x10,0x0c,0x07,0x11,0x95,0x0e,0x13,0xa7,0xbf,0x87,0x85,0xac,0xa7,0x95,0x8f,0xa7,0x3c,0x8d,0x99,0x33,0xe4,0x0f,0x0c,0x43,0x4f,0x2a -,0x1b,0x12,0x1d,0x1b,0x1e,0x13,0xba,0x8d,0x0c,0x20,0x97,0xae,0x88,0x87,0xb7,0x28,0xad,0x9b,0x48,0x57,0x8d,0x8f,0x21,0x1e,0x0d,0x0d,0x9e,0x9e,0xe8,0x3a,0x0f,0x06 -,0x06,0x14,0x3f,0x8d,0x87,0x1d,0xa8,0xa4,0x1f,0x8d,0x86,0x9b,0xd1,0x27,0x38,0x15,0x18,0x9d,0xb1,0x9c,0x95,0x14,0x13,0xa3,0x91,0xa3,0xae,0x23,0x10,0x0e,0x0f,0x0b -,0xee,0x94,0x06,0x2d,0xb6,0x23,0x8c,0x87,0x92,0xa4,0xb6,0xa0,0x31,0x23,0x8f,0x9a,0xa2,0x8f,0x0f,0x08,0xbe,0xab,0xa8,0x45,0x21,0x14,0x0a,0x0f,0x05,0xb9,0x96,0x12 -,0x9d,0x5e,0x57,0x8b,0x9f,0xae,0xa7,0x91,0x90,0xa7,0x9e,0x91,0x9f,0xb9,0xae,0x0e,0x13,0xad,0x3c,0x14,0x15,0x0b,0x07,0x0f,0x25,0x1f,0x9c,0x8b,0x12,0x9e,0x8e,0xcd -,0x86,0x8d,0x9e,0xaf,0x2b,0xa8,0x1d,0x1e,0x94,0x38,0x3e,0xa6,0x15,0x29,0x9a,0x9e,0x58,0x24,0x0f,0x0d,0x15,0x22,0x14,0xaf,0x9b,0x08,0xbb,0x94,0x5c,0x8b,0x86,0x9d -,0x57,0x29,0xc4,0x2a,0xdc,0x8a,0xa5,0x63,0xaa,0x0b,0x09,0x9e,0x92,0x9d,0xb9,0x2e,0x18,0x0b,0x1a,0x08,0x1d,0x8d,0x0d,0x1d,0xaf,0x19,0x9d,0x8d,0x94,0x9b,0x9c,0x8d -,0xd2,0xdc,0x89,0x92,0xaf,0x9e,0x1f,0x12,0xd3,0xad,0x2b,0x18,0x0b,0x0a,0x0a,0x0b,0x10,0x23,0x86,0x28,0x2d,0x8a,0x2e,0x9b,0x88,0x93,0x97,0xae,0x99,0x2a,0x14,0x94 -,0x99,0x6b,0xab,0x61,0x1a,0x36,0xbb,0x1e,0x25,0x1f,0x13,0x13,0x15,0x14,0x09,0x9d,0x2a,0x28,0x83,0x98,0x94,0x84,0x99,0xb4,0x6b,0xbf,0xbd,0x1d,0x9e,0xb5,0x14,0x3b -,0x1a,0x15,0x9f,0x98,0x9d,0x42,0x27,0x1e,0x16,0x21,0x22,0x12,0x96,0x43,0x0b,0x95,0xca,0x39,0x90,0x9b,0xc7,0x48,0x9a,0x9d,0x3c,0x97,0x8d,0x2e,0x24,0xc3,0x19,0xae -,0x97,0xcc,0x28,0x16,0x11,0x16,0x15,0x4b,0x14,0xb2,0x9d,0x01,0xaf,0x98,0xd9,0x8d,0x8f,0x9a,0x38,0x28,0xa9,0x24,0xa0,0x84,0x9d,0x69,0xaa,0x2f,0x35,0xb9,0xd3,0x2a -,0x1a,0x11,0x0b,0x06,0x12,0x11,0x1a,0x8e,0x1c,0xb0,0x85,0xa9,0x8e,0x8b,0x98,0x9d,0x4a,0xa3,0x4e,0x20,0x96,0x3a,0x0d,0x2f,0x2a,0x2d,0xb4,0xa5,0xa9,0x31,0x49,0x1f -,0x0d,0x1b,0x1f,0x0f,0x99,0x38,0x17,0x8b,0xaf,0xad,0x8c,0x99,0xa4,0xb8,0xaf,0xae,0x1b,0xb7,0xa8,0x19,0x4e,0xb0,0xcc,0x62,0x2c,0x6a,0x21,0x30,0xba,0x1e,0x30,0xb8 -,0x0d,0x5c,0x73,0x0a,0x97,0x97,0x3c,0x9e,0xae,0x2a,0x2f,0xbd,0x93,0xae,0x93,0x8e,0x32,0xe1,0x9c,0x57,0xaf,0xb6,0xdb,0x26,0x17,0x20,0x09,0x0c,0x2c,0x0a,0x12,0x9c -,0x13,0xa1,0x87,0x99,0x94,0x97,0xa4,0xda,0xe3,0x93,0xad,0xcd,0x9c,0x2b,0x1b,0xb6,0xa3,0x5d,0xa7,0xad,0x30,0x18,0x19,0x0e,0x11,0x24,0x20,0x07,0x49,0x24,0x0d,0x8a -,0x93,0x91,0x87,0x90,0x96,0xb2,0xa2,0x98,0x27,0xad,0x49,0x11,0x22,0x2e,0x1f,0x25,0xca,0xb8,0xf1,0x41,0x4d,0x2e,0x30,0x47,0x16,0x0e,0x9c,0x1d,0x3b,0x8c,0xca,0xad -,0xb7,0x6b,0xc1,0x3b,0x94,0x9a,0x37,0x98,0xbc,0x34,0xb3,0xb3,0xc5,0xcc,0xb3,0xd8,0x1b,0x1f,0x28,0x1c,0x16,0x2a,0x0f,0x19,0x99,0x1b,0xbf,0x92,0xdc,0xac,0xa3,0xa5 -,0xa1,0x4d,0x98,0x56,0x1f,0x99,0xaf,0xad,0x97,0x99,0xaf,0xdd,0xca,0x2c,0x13,0x2f,0x1b,0x0a,0x0c,0x11,0x03,0x23,0x91,0x21,0x92,0x85,0xa9,0x95,0x90,0x96,0x9a,0xc3 -,0x93,0x2c,0x16,0xa5,0x23,0x1c,0xba,0xc9,0x27,0x48,0xb0,0x2f,0x31,0xad,0x27,0x0e,0x19,0x1c,0x08,0xad,0x95,0x12,0x92,0x90,0x38,0x96,0x9a,0x93,0xa4,0xc3,0x99,0x17 -,0x25,0x9d,0x1f,0x3f,0x9d,0x37,0x2b,0x3d,0x2e,0x3a,0xc0,0xb4,0x2b,0x19,0x2c,0x23,0x0c,0x99,0xbc,0x0f,0x90,0xbd,0x1c,0xaa,0xbc,0xa3,0x61,0xb4,0x8f,0x2f,0x9c,0x8e -,0xe2,0x9c,0x9a,0xd7,0xd2,0x27,0x5f,0x37,0x16,0x1c,0x0d,0x0a,0x16,0x13,0x0f,0x95,0xc9,0x37,0x88,0x9d,0xaa,0x92,0x99,0xa1,0x66,0xae,0x9c,0x1a,0xb3,0x9b,0x36,0xbc -,0xa1,0xd0,0x29,0x3d,0xb7,0x1e,0x14,0x26,0x12,0x0c,0x1f,0x16,0x0e,0x98,0x48,0x6e,0x85,0x96,0x96,0x8b,0x98,0x9f,0x53,0xae,0xad,0x0f,0xf4,0xb6,0x0d,0x2a,0xc5,0x1f -,0x39,0xa7,0xa8,0x2e,0x40,0xaf,0x1e,0x1c,0xb3,0x14,0x1c,0x97,0x18,0x33,0x93,0x35,0xbb,0xa4,0xd6,0xae,0xe3,0x98,0x9f,0x2f,0x8f,0xa6,0x21,0x9f,0xbb,0x2b,0xc0,0x3b -,0x2b,0x1c,0x28,0x39,0x15,0x20,0x51,0x0f,0x2a,0x9e,0x17,0xaa,0x94,0xda,0xa4,0xab,0xc5,0xab,0x3d,0x9a,0xa2,0x73,0x8e,0xaa,0xb6,0x9b,0xc1,0xcd,0x37,0x1b,0x28,0x10 -,0x17,0x19,0x0a,0x19,0x1d,0x0d,0xac,0x99,0x39,0x8c,0x8c,0x9c,0x96,0x9c,0x9c,0xb5,0xfe,0x9b,0x2a,0x20,0xae,0x25,0x24,0x5c,0xda,0x40,0x29,0xd4,0x50,0x23,0xdf,0x29 -,0x16,0x46,0x17,0x13,0x9a,0x31,0x37,0x8e,0xa4,0xb7,0x9c,0x9d,0xaa,0x55,0xab,0xa4,0x20,0x6f,0xa3,0x29,0x37,0xac,0x2d,0x27,0x3e,0xc6,0x60,0x59,0xb0,0x2b,0x27,0x31 -,0x0f,0x33,0xaf,0x1a,0xac,0xaf,0x24,0xd5,0xb5,0xbb,0xbd,0xb0,0x94,0xa6,0xc1,0x92,0x9f,0xaf,0x9a,0xb6,0x2e,0xf9,0x2e,0x24,0x1f,0x1b,0x1b,0x10,0x18,0x11,0x16,0x9d -,0x55,0xd8,0x8f,0xad,0xac,0x9a,0xa7,0xa5,0xbe,0x9e,0xae,0x2c,0xa4,0xa9,0xc2,0xa8,0xad,0x3a,0x36,0x3e,0x24,0x1f,0x23,0x1d,0x13,0x18,0x14,0x0d,0xa8,0xb6,0x30,0x8d -,0x95,0x9f,0x94,0x9b,0x9c,0xaf,0xa4,0xab,0x21,0xda,0x46,0x23,0x35,0x2c,0x2e,0x27,0x3f,0x4f,0x36,0xb7,0x35,0x2a,0x45,0x23,0x14,0xa1,0xb7,0x1b,0x96,0xad,0x2e,0xac -,0xb2,0xba,0xcd,0xa6,0x9e,0x31,0xac,0x9c,0x6d,0xb0,0xab,0x5b,0x36,0x46,0x42,0x27,0x2e,0x32,0x1c,0x21,0x1c,0x11,0xaa,0x5c,0x1d,0x92,0xb0,0x4a,0x9f,0xb9,0xab,0x65 -,0xac,0x9f,0x29,0xa2,0x99,0xde,0x9a,0xa2,0x4e,0xcd,0x71,0x32,0x2d,0x23,0x20,0x10,0x12,0x0e,0x0a,0xa4,0x1d,0x2e,0x8a,0xb9,0xa7,0x94,0x9e,0x97,0xa9,0x95,0x97,0x26 -,0x9b,0xab,0x1c,0xa8,0x3d,0x1b,0x29,0x2c,0x2c,0x1e,0x28,0x21,0x1c,0x26,0x10,0x22,0x96,0x1d,0xa0,0x8d,0x34,0x9c,0x9f,0xac,0xa1,0xae,0x96,0xae,0x23,0x97,0xc8,0x23 -,0xa1,0x4c,0x23,0x3b,0x24,0x2b,0x14,0x28,0x2d,0x15,0x38,0x10,0xa7,0xad,0x28,0x8a,0x9d,0x2e,0x96,0xab,0x21,0xbe,0xab,0x4d,0x3e,0xa6,0xa3,0x34,0xaa,0x96,0x4a,0x6d -,0x9c,0x49,0x23,0x34,0x2c,0x12,0x17,0x18,0x0a,0xb7,0x29,0x2b,0x9a,0xc2,0xa8,0x9f,0xa1,0xa9,0xa9,0x9a,0x9e,0xed,0x9d,0xa5,0xd7,0xa8,0xab,0xc3,0x46,0x62,0x38,0x1d -,0x20,0x26,0x0c,0x19,0x0c,0x23,0xbb,0x11,0x97,0xa3,0xd7,0x9a,0x9e,0xa4,0x9e,0x9b,0x95,0xa9,0xa0,0x92,0xd0,0xaa,0x9f,0x5a,0x23,0x26,0x1d,0x19,0x13,0x17,0x13,0x0f -,0x1a,0x12,0xbb,0x47,0x67,0x8a,0xa5,0x9e,0x94,0xa0,0xaa,0xc5,0xa1,0xa9,0x2f,0xac,0xae,0x34,0xac,0xb0,0x2e,0x67,0x42,0x2e,0x2b,0x1b,0x22,0x14,0x20,0x0c,0x28,0xa2 -,0x13,0x95,0x8f,0x49,0x94,0x9a,0xaf,0xaf,0xba,0x9b,0x4a,0x49,0x9d,0x35,0x58,0xa9,0x58,0x3c,0xcb,0x43,0x31,0x27,0x29,0x1c,0x1c,0x1c,0x0e,0xa3,0x1f,0x1d,0x90,0x4e -,0x4c,0x9c,0xaf,0xc2,0xac,0xa5,0x99,0x6b,0x9c,0x98,0xea,0xa1,0xa3,0xd9,0x3e,0x3b,0x28,0x1e,0x15,0x19,0x16,0x19,0x0c,0x72,0xaa,0x0e,0x93,0x97,0x3a,0x97,0x9b,0xb0 -,0xac,0xa4,0x9d,0xbb,0xb2,0x95,0x54,0xbd,0xa4,0x32,0x3a,0x3d,0x26,0x26,0x1a,0x18,0x14,0x17,0x0e,0x23,0xa1,0x17,0xa4,0x8f,0xd0,0x9e,0x93,0x9f,0xa7,0xa5,0x96,0xad -,0x33,0x96,0xcd,0x21,0xaa,0x53,0x1c,0x56,0x3b,0x23,0x1e,0x27,0x1c,0x1b,0x1a,0x1b,0x9a,0x2a,0x31,0x8e,0xc4,0xdf,0x9e,0xaa,0xc5,0xbe,0xa2,0xa9,0x40,0x9e,0x9b,0x36 -,0xa8,0xa4,0x2b,0x4d,0x50,0x2e,0x1e,0x1b,0x1f,0x16,0x19,0x11,0xae,0xb9,0x19,0x92,0xa1,0x3d,0x9c,0xa5,0xb6,0xd2,0xb2,0x9c,0x38,0xc7,0x8f,0xae,0x68,0x96,0xb3,0x32 -,0xb6,0x5a,0x25,0x19,0x22,0x0e,0x0f,0x0e,0x14,0xa9,0x11,0x58,0x8e,0x38,0xab,0x93,0x9e,0xa4,0xa0,0x94,0xa8,0x78,0x92,0xa7,0x7a,0xa7,0xb0,0x2c,0x27,0x42,0x2e,0x13 -,0x1c,0x1e,0x0e,0x14,0x0f,0xa8,0x3d,0x19,0x8c,0xa6,0x35,0x96,0x9a,0xab,0xa6,0x9b,0x99,0x38,0xa7,0x92,0x37,0xbc,0x9d,0x45,0x20,0x37,0x2c,0x19,0x1a,0x1b,0x10,0x19 -,0x10,0x1c,0x97,0x1b,0xad,0x89,0x4e,0xaf,0x92,0xa1,0xc3,0xae,0x9e,0xae,0x1f,0x9b,0xa0,0x22,0x9d,0x9f,0x2c,0x35,0xca,0x33,0x18,0x1e,0x23,0x13,0x13,0x0e,0xc6,0x3e -,0x15,0x90,0xa1,0x33,0x9a,0x98,0xae,0xb7,0x98,0x9a,0xcd,0xac,0x96,0x64,0x48,0x9d,0x55,0x27,0x51,0x3c,0x24,0x1a,0x21,0x1a,0x14,0x1b,0x0e,0xac,0x39,0x1c,0x8f,0xad -,0x5e,0x97,0x9f,0xad,0xad,0x9d,0x98,0xd9,0xa3,0x95,0x60,0xb0,0xa5,0x3a,0x36,0x2e,0x23,0x1a,0x15,0x1e,0x10,0x14,0x1f,0x10,0x9e,0x56,0x35,0x8b,0xa6,0xad,0x93,0x9d -,0xb0,0xaa,0xa2,0xa5,0x34,0xb0,0xa4,0x2d,0xf5,0xad,0x46,0x27,0x45,0x37,0x1e,0x23,0x27,0x14,0x1c,0x1d,0x10,0x9e,0x3d,0x30,0x8c,0xaa,0xb9,0x98,0x9e,0xab,0xb1,0xa2 -,0x9f,0x33,0xb5,0xa5,0x2c,0xda,0xbb,0x3f,0x27,0x37,0x3c,0x29,0x25,0x2e,0x1d,0x1c,0x23,0x10,0xa6,0x4f,0x1f,0x90,0xb2,0x3b,0x9b,0xab,0xb3,0xab,0xa3,0x9a,0xbf,0xaf -,0x9a,0x47,0xbb,0xa6,0x34,0x2e,0x45,0x28,0x21,0x23,0x1f,0x18,0x18,0x1e,0x0e,0xaa,0xca,0x1f,0x8f,0x9d,0x49,0x99,0x9f,0xba,0xae,0xa7,0x9b,0xc6,0xc1,0x9b,0x6b,0x44 -,0xa1,0x3d,0x2b,0x4e,0x31,0x26,0x27,0x1f,0x1c,0x13,0x25,0x0e,0x2c,0x9c,0x19,0x9c,0x8f,0x4b,0x9d,0x98,0xaf,0xa8,0xbe,0x97,0xba,0x2c,0x9b,0xbf,0x24,0xae,0xd9,0x25 -,0x3b,0x45,0x3e,0x2a,0x27,0x2e,0x18,0x25,0x17,0x1b,0x9b,0x1d,0xd3,0x90,0x54,0xc4,0x9c,0xab,0xbb,0xb5,0x9a,0xa2,0x3d,0x9c,0x9e,0x2f,0xb2,0xae,0x2a,0x47,0x3a,0x3b -,0x2a,0x1e,0x2c,0x19,0x19,0x21,0x0e,0xad,0xbe,0x1d,0x93,0xa1,0x45,0x9f,0xa2,0xb3,0xb4,0xa8,0x9b,0xc7,0xb6,0x9d,0xb7,0x62,0xab,0xce,0x46,0x3a,0x3c,0x2e,0x1d,0x21 -,0x1c,0x14,0x22,0x0e,0x21,0x9a,0x1c,0xa8,0x91,0xcb,0xaa,0x9b,0xaa,0xab,0xb6,0x9c,0xa6,0x38,0xa5,0xa8,0x2f,0xc2,0xbf,0x3b,0x42,0x2c,0x76,0x29,0x1e,0x3d,0x1b,0x16 -,0x2e,0x0e,0xc0,0xad,0x1b,0x94,0xa0,0x5a,0x9b,0xaa,0xaa,0xa7,0xbb,0x9a,0xe6,0x7a,0x9e,0xc7,0x3f,0xb6,0xd6,0x37,0x2d,0x5e,0x3f,0x1f,0x3b,0x2e,0x14,0x27,0x1d,0x13 -,0xa5,0x39,0x37,0x9a,0xb4,0xbc,0xa4,0xac,0xa9,0xba,0xa8,0x9c,0x53,0xa9,0x9b,0xd9,0xd3,0xab,0x40,0x2d,0x49,0x45,0x28,0x28,0x2f,0x1e,0x12,0x29,0x14,0x19,0x9c,0x28 -,0x62,0x94,0xb6,0xb4,0x9c,0xa9,0xa8,0xbe,0xa2,0xa4,0x3e,0xa6,0xa0,0x3e,0xce,0xb0,0x42,0x31,0x44,0xde,0x23,0x2a,0x2e,0x1a,0x14,0x2a,0x11,0x24,0xa2,0x21,0xaf,0x96 -,0xbc,0xa4,0x9b,0xa8,0xa7,0xc9,0xa0,0xaa,0x38,0xa8,0xa9,0x2c,0xbb,0xb7,0x30,0x4a,0xf2,0x5f,0x2a,0x31,0x31,0x18,0x18,0x2f,0x0c,0x2e,0x9d,0x16,0xa8,0x92,0xfb,0xa5 -,0x9a,0xa6,0xae,0xc6,0x98,0xac,0x31,0x9e,0xab,0x29,0xbc,0xb9,0x3c,0x3b,0xe5,0x52,0x26,0x2e,0x24,0x1a,0x17,0x21,0x0f,0x3f,0xaf,0x1e,0x9c,0x98,0xe0,0x9e,0x9c,0xaf -,0xac,0xaf,0x9c,0xb5,0xda,0xa2,0xbe,0x63,0xb2,0xd9,0x67,0x4c,0x39,0x39,0x28,0x1e,0x22,0x16,0x17,0x20,0x0d,0xdd,0xa7,0x1f,0x97,0x95,0xbb,0x9d,0xa0,0xad,0xac,0xb6 -,0xa0,0xbb,0x41,0xac,0xac,0x45,0xc1,0xae,0x6f,0x4a,0x3b,0x52,0x29,0x1e,0x2c,0x14,0x16,0x20,0x0c,0xbc,0xb2,0x21,0x93,0x9b,0xba,0x9f,0xa6,0xa0,0xb6,0xae,0x9a,0xf8 -,0x4b,0xa3,0xb9,0x3f,0xaf,0xbd,0x43,0x34,0x4b,0x34,0x20,0x2a,0x24,0x10,0x1e,0x19,0x0f,0xa4,0x4e,0x43,0x95,0xa1,0xa9,0xa5,0xa0,0x9f,0xbb,0xa7,0x9c,0x3d,0xdc,0x9e -,0xd3,0x48,0xb1,0x6c,0x2e,0x31,0x2e,0x2c,0x23,0x23,0x21,0x11,0x24,0x15,0x24,0x9e,0x2d,0xa5,0x95,0xaf,0xa6,0xa0,0xa1,0xae,0xbd,0x9c,0xb8,0x4a,0xa9,0xac,0xec,0xcc -,0xbf,0x4c,0x2a,0x33,0x3b,0x20,0x1f,0x27,0x16,0x18,0x1f,0x16,0xab,0xc6,0x3e,0x97,0xa3,0xab,0xa6,0xa5,0xa3,0xca,0xa9,0xa5,0xc4,0xb8,0xab,0xa7,0x50,0xf1,0xbe,0x34 -,0x28,0x40,0x30,0x20,0x1f,0x1c,0x17,0x1c,0x12,0x4d,0xaa,0x20,0xa0,0x9a,0xb3,0xa8,0xa2,0x9f,0xab,0xb6,0xa2,0xa7,0xb3,0xaa,0x9f,0xcd,0x4b,0xbe,0x3a,0x2b,0x30,0x36 -,0x26,0x1c,0x18,0x15,0x1d,0x0f,0x25,0x9e,0x1f,0xb3,0x96,0xb5,0xa4,0xa3,0x96,0xa5,0xc7,0x99,0xa7,0xbe,0xa1,0xa5,0xc1,0x4f,0x7a,0x34,0x23,0x2b,0x2e,0x23,0x1f,0x1a -,0x13,0x21,0x10,0x1e,0x9b,0x23,0xb3,0x94,0xb0,0x9f,0xa5,0x96,0xa1,0xc8,0x9b,0xa3,0xc7,0xa9,0xa3,0xc2,0x49,0xe2,0x44,0x24,0x28,0x33,0x25,0x1b,0x18,0x13,0x1f,0x0d -,0x23,0x9f,0x22,0xa4,0x9a,0xac,0x9f,0xa5,0x97,0xa2,0xb0,0x97,0xa1,0xaf,0xab,0xa2,0xbc,0x39,0xc8,0x33,0x20,0x26,0x25,0x22,0x18,0x13,0x1c,0x1e,0x0d,0x45,0xab,0x20 -,0xa0,0x9d,0xa4,0xa5,0x9e,0x92,0xac,0xab,0x97,0xa2,0xb3,0xae,0xa1,0xcd,0x35,0xd8,0x2a,0x1f,0x25,0x2b,0x1d,0x15,0x17,0x1e,0x1a,0x12,0xaf,0xc9,0x2d,0x9e,0x9f,0xa1 -,0xad,0x9d,0x96,0xb6,0xa8,0x98,0xa9,0xae,0xa0,0xaa,0xe9,0x3f,0x3b,0x2c,0x1f,0x25,0x2d,0x1d,0x14,0x17,0x22,0x11,0x25,0xa9,0x2c,0xb9,0xa0,0xab,0xaa,0xa9,0x98,0xa0 -,0xa4,0x9d,0xa3,0xa6,0xb7,0xa1,0xaf,0x45,0xd8,0x30,0x2e,0x23,0x23,0x2e,0x19,0x12,0x22,0x15,0x10,0xba,0x37,0x3d,0xa5,0xae,0xa2,0xcb,0x9d,0x9b,0xab,0x98,0x9d,0xa0 -,0x9f,0xa3,0xa4,0xb9,0xca,0x68,0x2d,0x2c,0x22,0x21,0x20,0x18,0x16,0x1e,0x10,0x29,0xbd,0x27,0xad,0xab,0xab,0xae,0xad,0x98,0xa9,0xa3,0x99,0x9f,0xa0,0xa1,0x9b,0xb4 -,0xbf,0xc2,0x2d,0x32,0x2a,0x20,0x20,0x16,0x15,0x1a,0x0f,0x1d,0xcb,0x28,0xc5,0xaf,0xac,0xa5,0xd1,0x97,0x9f,0xb7,0x9a,0x9b,0xa4,0x9f,0x9c,0x8e,0xbb,0xbd,0x2c,0x54 -,0xbf,0xba,0xc0,0x12,0x2c,0x00,0x02,0x00,0x13,0xce,0x0f,0xf8,0x18,0x57,0x92,0x8f,0x8d,0x8f,0x8e,0x8c,0x86,0x82,0x91,0x86,0x8c,0x7b,0x8a,0x17,0x17,0x90,0xa8,0x31 -,0x3e,0x23,0x05,0x04,0x05,0x0f,0x04,0x09,0x06,0x14,0x0b,0x0d,0x18,0x0f,0x0f,0x0d,0x4e,0x16,0x1e,0x32,0x98,0xea,0x96,0x93,0x9f,0x9e,0xb1,0x8e,0xa6,0x9c,0x9a,0xa3 -,0x95,0x8b,0x8f,0x88,0x82,0x82,0x80,0x82,0x87,0x80,0x9e,0x99,0x83,0x80,0xaa,0x0d,0xac,0x09,0x15,0x15,0x02,0x05,0x01,0x00,0x1b,0x1a,0x00,0x04,0x00,0x1b,0x0b,0x00 -,0x06,0x11,0x3e,0x31,0x8f,0x92,0x4a,0x3a,0x86,0x84,0x80,0x82,0x83,0x94,0x8d,0x85,0x89,0x86,0x86,0x8f,0xab,0x99,0xab,0x9b,0xbe,0x9f,0x48,0xac,0xc8,0xac,0x96,0xba -,0x20,0x19,0x26,0x19,0x17,0x15,0x0f,0x0d,0x0e,0x0a,0x18,0x14,0x0b,0x0d,0x07,0x04,0x04,0x07,0x03,0x08,0x1a,0x15,0xab,0x33,0x9a,0x87,0x8b,0x87,0x88,0x8a,0x88,0x8b -,0x8b,0x8a,0x8a,0x86,0x8e,0x94,0x83,0x8a,0xab,0x8f,0x85,0x86,0xaf,0x8e,0x1d,0xcd,0x2c,0x00,0x17,0x11,0x13,0x00,0x09,0x1c,0x0f,0x09,0x0a,0x0a,0x05,0x25,0x4d,0xaa -,0xa3,0x2b,0x08,0x06,0x0e,0x1c,0xaf,0x15,0xc0,0x22,0x36,0x42,0x12,0x9e,0x97,0x85,0x8e,0x9c,0x8a,0x86,0x82,0x86,0x83,0x84,0x88,0x8e,0x8d,0x97,0x8b,0x8e,0xbf,0xa6 -,0x2f,0xdf,0x1f,0x19,0x1f,0x1b,0x0e,0x09,0x0f,0x0f,0x52,0x21,0x00,0x1c,0x36,0xb8,0x3d,0x10,0x02,0x2d,0x90,0x16,0xab,0x0d,0x0b,0x00,0x0f,0x34,0x20,0x9d,0x01,0x0e -,0x3d,0x16,0x00,0x0e,0x9e,0x14,0x0e,0x05,0x96,0x8c,0x10,0xb8,0xbc,0x9d,0x86,0x80,0x84,0x84,0x85,0x89,0x8d,0x8b,0x88,0x8a,0x8b,0x90,0x35,0x0e,0x29,0x36,0x9e,0x2f -,0xad,0x21,0x11,0xe7,0x14,0x87,0xa9,0x09,0xe7,0x27,0x1e,0xbc,0x99,0xc3,0x2f,0x40,0xa9,0x96,0x91,0x90,0x91,0x88,0x3b,0x24,0xa6,0x82,0x84,0xbe,0x1a,0xa7,0x9d,0x0b -,0x3a,0xa7,0xaa,0x02,0x06,0x0b,0x94,0xca,0x00,0x23,0xc4,0x34,0x05,0x9d,0x36,0x0b,0x0b,0x38,0xfd,0x0e,0x9f,0x0b,0x0d,0x14,0x00,0x10,0x1a,0x90,0x08,0x01,0x10,0x0c -,0x24,0x21,0x92,0x09,0x11,0x05,0x19,0x80,0x90,0x8c,0xb6,0x96,0x9b,0x8e,0x80,0x83,0x80,0x84,0x8e,0x82,0x80,0x82,0x80,0x82,0x80,0x82,0x80,0x97,0x50,0x95,0x80,0x95 -,0x04,0x08,0x02,0x0d,0x02,0x01,0x02,0x00,0x08,0x02,0x08,0x07,0x06,0x00,0x0f,0x0c,0x05,0x04,0x06,0x09,0x04,0x02,0x17,0x1d,0x0b,0x13,0x04,0x06,0x19,0x93,0x8e,0x92 -,0x1c,0x0b,0xac,0x9b,0x80,0x92,0x8e,0x90,0xa8,0x80,0x84,0x80,0x8a,0x87,0x84,0x89,0x80,0x94,0x8d,0x8e,0x98,0x86,0x8f,0xab,0x0b,0x25,0x29,0x15,0x0c,0x12,0x27,0x04 -,0x07,0x14,0x1f,0x06,0x0e,0x09,0x18,0x22,0x14,0x0c,0x29,0x96,0xc7,0xa7,0x39,0xa5,0x2f,0x8a,0xaa,0x99,0x90,0x1b,0xa3,0x38,0x50,0xbf,0x9c,0x95,0x22,0x1a,0xb5,0x9c -,0x8d,0xb5,0xa4,0x9a,0x8f,0x2c,0x19,0x14,0x2d,0xa6,0xb6,0x30,0x16,0x07,0x08,0xd8,0x1f,0x0d,0x04,0x20,0x06,0x09,0x06,0x17,0x25,0x11,0x90,0x92,0x98,0x8f,0x85,0x82 -,0x80,0x81,0x82,0x82,0x80,0x82,0x88,0x96,0x81,0x87,0x59,0xac,0x1a,0x2b,0x13,0x14,0x14,0x17,0x16,0x09,0x05,0x04,0x08,0x09,0x0b,0x0f,0xda,0x16,0x26,0x14,0x13,0x0e -,0xc1,0x33,0x5d,0x9c,0x26,0x19,0x0c,0x59,0xa9,0x2b,0x03,0x0b,0x1c,0x13,0x08,0x14,0x0a,0x0f,0x0c,0x19,0xab,0xa0,0x2c,0x32,0x8f,0xb5,0x86,0x8c,0x8e,0x84,0x84,0x87 -,0x88,0x8a,0x91,0x87,0x86,0x84,0x88,0x80,0xa7,0xad,0x9a,0x64,0x9f,0xac,0xc4,0x0a,0x10,0x11,0x1a,0xc6,0x1b,0x0d,0x1c,0x50,0x22,0x19,0x3e,0xc9,0x2d,0x30,0x90,0xa4 -,0x15,0x20,0xb3,0x3a,0x9c,0x2a,0x11,0x1b,0x09,0x12,0x07,0x27,0x06,0x03,0x05,0x08,0x08,0x0a,0x06,0x10,0x21,0x0b,0x13,0x1a,0x20,0x78,0xa3,0x1d,0x9b,0x17,0xf5,0x8c -,0x89,0x84,0x90,0x8a,0x86,0x80,0x81,0x81,0x81,0x80,0x81,0x82,0x80,0x85,0x8a,0x89,0x91,0x91,0x9c,0x14,0x1e,0x23,0x1e,0x0a,0x0d,0x0c,0x00,0x0f,0x03,0x06,0x0b,0x09 -,0x01,0x05,0x06,0x0b,0x0d,0x01,0x06,0x1d,0x18,0x15,0x2c,0x07,0x12,0x0f,0x2d,0xf9,0x28,0xa2,0xd2,0xa0,0x9f,0x8d,0x84,0x89,0x86,0x84,0x8b,0x83,0x86,0x88,0x8a,0x85 -,0x97,0x9c,0x9c,0x97,0xa9,0x27,0x95,0x2a,0xb5,0xdd,0xae,0xd8,0x1e,0x27,0x29,0x1f,0x21,0xbd,0x0e,0x3b,0x44,0x16,0xab,0x2f,0x24,0x38,0xaa,0xa8,0xa1,0x3b,0x5a,0x3e -,0xaa,0xd7,0x1f,0xa4,0x17,0x4b,0x2f,0xa7,0x2d,0x2a,0x1d,0xaf,0x91,0xda,0x1b,0x23,0x8f,0x93,0xa5,0xd3,0x9f,0x20,0xa6,0x31,0xb2,0xab,0x14,0x4c,0xc9,0x30,0x14,0x0d -,0x0e,0x38,0x0d,0x07,0x09,0x03,0x04,0x05,0x0a,0x0b,0x1d,0x3c,0xb0,0x92,0x8a,0x93,0x88,0x80,0x83,0x81,0x81,0x80,0x81,0x82,0x83,0x89,0x81,0x86,0xb4,0x9c,0xa9,0x9b -,0x4b,0x0f,0x1e,0x0b,0x0c,0x11,0x0a,0x0c,0x03,0x08,0x0d,0x0b,0x06,0x12,0x14,0x14,0x1a,0x13,0xec,0x11,0x26,0x5b,0x0d,0x12,0x29,0x0d,0x0c,0x0d,0x0c,0x11,0x0e,0x0b -,0x03,0x1e,0x38,0x0d,0xbe,0xc8,0x2f,0x9d,0x9e,0x8b,0x8d,0x8d,0x8e,0x86,0x82,0x86,0x84,0x87,0x84,0x82,0x86,0x88,0x8e,0x90,0x84,0x97,0xac,0x99,0xa2,0x1d,0x16,0x1b -,0x71,0x1a,0x0e,0x17,0x16,0x1a,0x0e,0x1a,0x24,0x20,0x27,0x21,0x35,0x9b,0x14,0x1d,0x9f,0x32,0xbe,0xb9,0xaf,0xa3,0x53,0x3d,0x4e,0x1f,0x27,0x29,0x17,0x17,0x0c,0x08 -,0x0a,0x10,0x14,0x0b,0x14,0x08,0x0d,0x1e,0x0d,0x21,0x12,0x1e,0x1f,0x14,0x3b,0x18,0x20,0x5e,0xb6,0xa0,0x8f,0x94,0x8b,0x82,0x82,0x85,0x82,0x81,0x81,0x81,0x80,0x81 -,0x85,0x82,0x88,0x89,0x8e,0x97,0xb1,0x33,0x48,0x3b,0x0d,0x0d,0x0f,0x0c,0x08,0x0f,0x0a,0x0a,0x04,0x01,0x0d,0x0a,0x08,0x09,0x0d,0x0f,0x1f,0x0e,0x1c,0x19,0x17,0x12 -,0x2d,0x1d,0x0f,0x13,0x1b,0x1d,0x19,0xe6,0x26,0xb4,0xbb,0x9f,0x8a,0x8e,0x94,0x8c,0x86,0x8f,0x8c,0x8b,0x8d,0x92,0xb8,0x91,0x9c,0x91,0xad,0xaf,0x91,0x9e,0xf5,0xba -,0xb5,0x5e,0xbb,0x3b,0xb4,0x1e,0x20,0x2e,0xba,0x4b,0xce,0x67,0x69,0x9b,0x94,0xab,0xb1,0xa5,0xa6,0x9e,0xb9,0xa7,0x39,0x1f,0x15,0x5e,0x19,0x1d,0x29,0x15,0x27,0x1a -,0x25,0x12,0x2b,0x3e,0x1b,0x29,0x2b,0x20,0x1d,0x25,0x3c,0x3d,0x48,0x58,0x2c,0x3a,0xa4,0x4f,0x39,0x33,0x1c,0x1a,0x13,0x11,0x0c,0x0c,0x0a,0x0d,0x0e,0x17,0x1e,0x1f -,0xa1,0x8e,0x89,0x88,0x86,0x81,0x82,0x81,0x81,0x81,0x82,0x81,0x84,0x84,0x85,0x8c,0x8f,0x9c,0x92,0xa8,0x36,0x2b,0x1c,0x13,0x0c,0x0e,0x0b,0x04,0x04,0x07,0x07,0x07 -,0x08,0x09,0x0a,0x0c,0x15,0x19,0x11,0x12,0x1a,0x1c,0x1c,0x19,0x1a,0x19,0x1c,0x1f,0x28,0x3c,0x3f,0x33,0xa9,0x95,0xa3,0xbd,0x9d,0x97,0x99,0x95,0x95,0x94,0x9e,0x9f -,0x98,0x93,0x95,0x9a,0x97,0x8f,0x8f,0x98,0x9f,0x99,0x9d,0xa5,0xa8,0xaa,0xaf,0x45,0x41,0x4e,0x67,0x55,0x36,0x3f,0xb8,0xb2,0xbe,0xdc,0x46,0x79,0x76,0xcb,0xd9,0x36 -,0x1e,0x1c,0x25,0x34,0x31,0x2a,0x1f,0x22,0x35,0x32,0x2f,0x2b,0x35,0x2f,0x29,0x29,0x26,0x1d,0x19,0x1b,0x1c,0x1b,0x18,0x18,0x1e,0x26,0x20,0x22,0x1e,0x1a,0x18,0x15 -,0x17,0x12,0x0b,0x0a,0x0e,0x0f,0x13,0x1a,0x34,0xaa,0x90,0x8b,0x88,0x85,0x83,0x82,0x81,0x80,0x80,0x81,0x82,0x81,0x83,0x85,0x87,0x88,0x8f,0x96,0x9b,0xad,0x33,0x18 -,0x0f,0x10,0x0c,0x08,0x06,0x04,0x04,0x04,0x06,0x08,0x07,0x07,0x0f,0x18,0x15,0x16,0x18,0x1f,0x1f,0x1c,0x28,0x2c,0x1a,0x16,0x21,0x2f,0x28,0x20,0x26,0xc1,0xad,0xb3 -,0xae,0xb7,0x9d,0x9d,0x9c,0x94,0x97,0x9f,0x9e,0x98,0x91,0x92,0x94,0x92,0x8d,0x8a,0x8f,0x91,0x94,0x9a,0x9b,0x9c,0xb8,0x54,0x37,0x1f,0x1d,0x1d,0x28,0x48,0x5d,0x3d -,0x2c,0x29,0x2a,0x3f,0xaf,0x9a,0x94,0x9e,0xa1,0xad,0x4b,0x2e,0x54,0xc6,0xaa,0xa5,0x3d,0x24,0x1a,0x12,0x19,0x1f,0x36,0xa8,0xba,0xdf,0x36,0x1f,0x1d,0x1f,0x33,0xb5 -,0xcf,0x2d,0x54,0x26,0x0e,0x12,0x22,0x28,0xcb,0xb8,0x3b,0x3d,0x24,0x23,0x4d,0xc9,0x9d,0x99,0xa6,0xaf,0xc4,0x44,0xc9,0xac,0xa4,0x9e,0xbe,0x2d,0x2c,0x1f,0x1f,0xfe -,0xc8,0x9e,0x9c,0xab,0xbe,0x37,0x3e,0xae,0xa2,0x9a,0x96,0x9f,0xb4,0x2d,0x2c,0x41,0x48,0xb9,0xa1,0xdb,0x51,0x20,0x15,0x21,0x3e,0xae,0xa3,0xa9,0xaa,0xab,0xf2,0xb0 -,0x9e,0x97,0x94,0x9b,0xaf,0xb5,0x2a,0x24,0x38,0x3f,0xb3,0xc9,0x42,0x28,0x1f,0x1a,0x26,0x43,0xc2,0xa8,0xcd,0x46,0x33,0x1a,0x19,0x26,0x2d,0xc3,0xb2,0x2c,0x18,0x0f -,0x0d,0x11,0x15,0x2c,0xb3,0xd7,0x27,0x2d,0x2b,0x2b,0xc3,0xa5,0x93,0x93,0x97,0x9c,0xa9,0x5c,0xb5,0x9c,0xa0,0x94,0x96,0xac,0xbc,0xe9,0x39,0x71,0xaf,0xa0,0x9a,0xaa -,0xac,0xa2,0xaf,0xbf,0xa6,0xa1,0xa0,0x9b,0xab,0xc5,0x3c,0x2b,0x2e,0x33,0xeb,0xb4,0xc3,0x3a,0x2f,0x25,0x26,0x4c,0xbf,0xa3,0x9a,0xa9,0xc4,0x58,0x2c,0x3e,0x3d,0x49 -,0xb0,0x62,0x1e,0x12,0x0d,0x0a,0x0d,0x14,0x1f,0x27,0x22,0x1a,0x18,0x12,0x19,0x2c,0x66,0xab,0x9f,0xaa,0xc3,0x47,0x20,0x33,0xe6,0xb8,0xac,0xb4,0x48,0x29,0x1f,0x23 -,0x4c,0xac,0x9b,0x92,0x91,0x97,0x96,0x97,0x92,0x8d,0x8d,0x8b,0x88,0x8d,0x95,0x97,0x92,0x93,0x9a,0x96,0x9c,0xbc,0x19,0x15,0x11,0x09,0x07,0x0d,0x15,0x0c,0x07,0x05 -,0x07,0x09,0x09,0x09,0x14,0x20,0x17,0x14,0x0f,0x0a,0x0d,0x16,0x2a,0xbc,0xb7,0xa9,0xa7,0xb1,0xbb,0x9c,0x95,0x8d,0x8b,0x8b,0x8d,0x92,0x95,0x98,0x93,0x8e,0x8b,0x8a -,0x90,0x9a,0x9b,0xb5,0xbf,0xd8,0xaa,0xa4,0xb7,0x67,0x52,0xcd,0x3e,0xbf,0x9e,0x8c,0x8f,0x97,0x8b,0x8a,0x97,0xa7,0x8f,0x87,0x8e,0xb1,0xab,0x9a,0x22,0x06,0x0c,0x1b -,0x1b,0x0f,0x0b,0x0f,0x0e,0x06,0x06,0x11,0x1c,0x26,0x26,0x1c,0x16,0x0e,0x08,0x0c,0x12,0x19,0x21,0x22,0x1c,0x17,0x14,0x15,0x27,0x2e,0xb8,0xb1,0xc4,0xc3,0xc9,0x27 -,0x35,0xeb,0xa9,0x97,0xa1,0xad,0xb2,0xad,0x33,0xda,0xaa,0x9b,0x9c,0xab,0xa3,0x9d,0x40,0xb9,0x91,0x8a,0x88,0x89,0x85,0x85,0x87,0x95,0x8a,0x82,0x86,0x8a,0x8a,0x87 -,0x93,0x1f,0x15,0x66,0x3b,0x1a,0x12,0x14,0x15,0x08,0x05,0x0a,0x0e,0x0f,0x13,0x18,0x14,0x0e,0x08,0x0b,0x0e,0x0c,0x11,0x24,0x1b,0x13,0x10,0x0e,0x13,0x1d,0x3b,0xc9 -,0xad,0xc6,0x48,0x3f,0x21,0x24,0x4c,0xb5,0x9b,0xc2,0x3c,0xf5,0x1e,0x1b,0x25,0x3d,0xfd,0xfc,0x3e,0xb2,0x37,0x26,0xb0,0x8e,0x8d,0x8d,0x84,0x82,0x85,0x8f,0x8a,0x85 -,0x81,0x89,0x88,0x84,0x8a,0xa8,0x24,0x4c,0xb7,0x2e,0x1c,0x3f,0x2c,0x18,0x13,0x0c,0x13,0x23,0x1e,0x2c,0x32,0x18,0x0f,0x0b,0x0c,0x0c,0x0c,0x21,0x1e,0x1a,0x10,0x0e -,0x11,0x19,0x1a,0x2f,0xb8,0xbd,0xce,0x43,0x3c,0x21,0x2f,0x4c,0xa5,0xb6,0xd3,0xfa,0x34,0x1a,0x1a,0x24,0x37,0x3c,0x2f,0xb6,0x46,0x23,0x28,0x99,0x8f,0x8e,0x8a,0x87 -,0x83,0x8a,0x8e,0x8c,0x83,0x87,0x8b,0x86,0x89,0x97,0x38,0x2c,0x5b,0x27,0x12,0x1d,0x27,0x18,0x0f,0x0e,0x0b,0x0f,0x10,0x1f,0x57,0x26,0x18,0x11,0x14,0x0e,0x11,0x19 -,0x2b,0x2e,0x1b,0x16,0x15,0x10,0x18,0x23,0x3e,0xb7,0xbf,0xcd,0xcc,0x31,0x20,0xed,0xbf,0xaf,0xae,0xd9,0x4a,0x25,0x16,0x1c,0x2d,0x2d,0x2d,0xd1,0x4b,0x20,0x22,0xea -,0x96,0x98,0x93,0x84,0x82,0x85,0x8a,0x8b,0x81,0x85,0x88,0x85,0x82,0x8a,0xab,0x6a,0x5c,0x47,0x19,0x1b,0x32,0x23,0x0f,0x0d,0x0c,0x0f,0x16,0x21,0xcb,0xbf,0x3f,0x27 -,0x1d,0x11,0x15,0x1e,0x2f,0x49,0x2e,0x1f,0x19,0x11,0x11,0x1a,0x28,0x3e,0xcc,0x5e,0x3f,0x2a,0x1c,0x27,0x5d,0xc3,0xac,0xae,0xd1,0x3b,0x1d,0x18,0x21,0x26,0x28,0x48 -,0xd2,0x25,0x18,0x2e,0xab,0x9e,0x9e,0x8b,0x82,0x85,0x8a,0x8b,0x84,0x84,0x8a,0x89,0x82,0x82,0x90,0xc5,0xb9,0xbd,0x27,0x19,0x1f,0x30,0x18,0x0c,0x0b,0x08,0x0c,0x0e -,0x15,0x1f,0x1e,0x15,0x13,0x0c,0x0a,0x0e,0x16,0x21,0x26,0x26,0x1e,0x20,0x17,0x15,0x2b,0xca,0xae,0xa2,0xad,0xbb,0x49,0x29,0x42,0xae,0xa4,0x9d,0x9d,0xa9,0x48,0x20 -,0x29,0x2b,0x2a,0x37,0xad,0xcf,0x1e,0x1f,0x46,0xa4,0xa6,0x97,0x87,0x82,0x88,0x8a,0x85,0x84,0x89,0x8a,0x85,0x82,0x88,0xa0,0xba,0xbb,0x2f,0x17,0x14,0x1f,0x1d,0x0d -,0x0b,0x08,0x0a,0x0c,0x0f,0x1f,0x2b,0x28,0x1a,0x1a,0x11,0x0f,0x16,0x1e,0x2f,0x2b,0x23,0x1c,0x1a,0x16,0x18,0x23,0x3a,0xc0,0xb2,0xcd,0x33,0x25,0x27,0x4c,0xce,0xb7 -,0xa5,0xa6,0x47,0x2c,0x27,0x2e,0x27,0x2b,0xb2,0xad,0x2e,0x1a,0x36,0xbf,0xb7,0xbe,0x91,0x83,0x86,0x8c,0x89,0x82,0x85,0x8b,0x8b,0x83,0x82,0x8c,0x9d,0x9c,0xa9,0x28 -,0x1a,0x1e,0x32,0x1f,0x0e,0x0b,0x0b,0x0b,0x11,0x1b,0x2a,0x33,0x26,0x1e,0x15,0x0f,0x0f,0x17,0x1f,0x2a,0x26,0x1a,0x14,0x10,0x0f,0x1a,0x1d,0x2a,0xac,0xb8,0x5a,0x2e -,0x26,0xbf,0xae,0xab,0x9c,0x97,0x9f,0x58,0x3f,0x36,0x31,0x22,0x59,0xaa,0x36,0x15,0x16,0x31,0x38,0x24,0xbc,0x8c,0x86,0x8e,0x90,0x84,0x88,0x8b,0x8a,0x85,0x82,0x86 -,0x93,0x9a,0x9c,0xdd,0x1f,0x21,0x3e,0x23,0x15,0x0d,0x0c,0x0a,0x0c,0x0f,0x1b,0x29,0x23,0x1b,0x18,0x12,0x0c,0x16,0x1b,0x27,0x2c,0x24,0x20,0x19,0x11,0x17,0x21,0x3f -,0xb9,0xa4,0xac,0x48,0x30,0x32,0x55,0xd2,0xad,0xa7,0xa6,0x3a,0x2c,0x26,0x1a,0x19,0x23,0xb3,0xb1,0x1d,0x17,0x2f,0x50,0x2c,0x4b,0x90,0x85,0x86,0x8c,0x88,0x84,0x85 -,0x8c,0x88,0x82,0x82,0x8a,0x9c,0x9e,0xa6,0x27,0x14,0x1f,0x2c,0x1e,0x0b,0x0c,0x0c,0x0b,0x0c,0x11,0x1e,0x27,0x24,0x19,0x17,0x0d,0x0e,0x17,0x1e,0x28,0x2a,0x1e,0x1b -,0x14,0x12,0x1c,0x23,0x49,0xad,0xa4,0xbd,0x33,0x2f,0x38,0x49,0xd8,0xae,0x9e,0xaf,0x2f,0x2c,0x2c,0x1b,0x1c,0x30,0xb3,0xcb,0x19,0x1f,0x3d,0x39,0x2c,0xa4,0x8a,0x85 -,0x8c,0x8c,0x82,0x84,0x86,0x8a,0x84,0x80,0x84,0x8b,0x95,0x9a,0xad,0x29,0x1a,0x26,0x23,0x14,0x0d,0x0b,0x0c,0x0c,0x0f,0x19,0x26,0x2a,0x24,0x19,0x12,0x10,0x12,0x1c -,0x23,0x23,0x2f,0x1f,0x1b,0x13,0x18,0x24,0x22,0x4c,0xa9,0xbe,0x38,0x26,0x21,0x78,0x3c,0xd8,0x9d,0x9f,0xc6,0x3a,0x2e,0x37,0x20,0x27,0xbd,0xcd,0x20,0x16,0x1c,0x30 -,0x2a,0x2c,0x95,0x87,0x8b,0x90,0x8b,0x84,0x85,0x8a,0x86,0x83,0x83,0x88,0x93,0x95,0x96,0xb7,0x2e,0x45,0xdb,0x1f,0x10,0x0a,0x09,0x0b,0x0f,0x15,0x1c,0x22,0x1a,0x1a -,0x0f,0x0f,0x14,0x23,0x2b,0x21,0x1a,0x14,0x14,0x10,0x1a,0x25,0x37,0x3d,0x45,0x3e,0x1d,0x20,0x2e,0xb6,0xa8,0xac,0xaa,0xb0,0x4b,0x1d,0x3e,0xab,0xba,0x5b,0xba,0xbd -,0x2b,0x0c,0x11,0x37,0xc1,0x3e,0xc3,0x8e,0x8f,0x98,0xa2,0x8a,0x84,0x84,0x84,0x83,0x81,0x85,0x91,0x9e,0x90,0x90,0x96,0xc5,0x36,0x1f,0x0d,0x0c,0x0c,0x0f,0x14,0x1e -,0x1f,0x10,0x13,0x0f,0x0e,0x0e,0x14,0x1d,0x30,0x1d,0x17,0x16,0x0b,0x19,0x1e,0x2f,0xb7,0x4d,0x54,0xb6,0x22,0x26,0x6a,0xbb,0x9e,0xbc,0xaf,0xa1,0x2f,0x1c,0x1f,0x6c -,0xa2,0x33,0x3e,0xba,0x2a,0x16,0x0d,0x1e,0xca,0x2f,0x38,0x9a,0x8f,0x97,0xa6,0x94,0x82,0x82,0x84,0x83,0x81,0x83,0x88,0x94,0x96,0x8b,0x90,0x9a,0xdf,0x2c,0x1a,0x09 -,0x08,0x0e,0x10,0x19,0x15,0x12,0x12,0x0f,0x0e,0x15,0x1b,0x21,0x2f,0x23,0x1f,0x19,0x19,0x0e,0x1c,0x1f,0x41,0x2b,0x2c,0x5e,0x24,0x1e,0x26,0x5b,0xab,0xad,0x1f,0xa0 -,0x57,0x1c,0x8e,0x80,0x2f,0x1e,0x80,0xa7,0x1b,0x09,0x0b,0x13,0x08,0x24,0x19,0x2e,0x04,0x0a,0x1b,0x00,0x1f,0x18,0x04,0x01,0x00,0x06,0x12,0x08,0x09,0x1a,0x0d,0x1f -,0x0a,0x0a,0x1d,0x6f,0x97,0x89,0x88,0x88,0x80,0x81,0x86,0x87,0x81,0x81,0x80,0x85,0x85,0x83,0x82,0x86,0x8c,0x83,0x80,0x82,0x8e,0x8b,0x84,0x8b,0x88,0x85,0x91,0x9b -,0x8a,0x98,0x15,0x15,0x37,0xa6,0x0a,0x0e,0x8a,0x91,0xc5,0x2f,0x10,0x08,0x04,0x00,0x02,0x00,0x08,0x08,0x00,0x00,0x00,0x01,0x00,0x01,0x02,0x01,0x00,0x00,0x00,0x01 -,0x01,0x04,0x06,0x03,0x01,0x03,0x02,0x0e,0x2b,0x56,0x8c,0x89,0x99,0x95,0x98,0x8d,0x84,0x83,0x88,0x85,0x81,0x83,0x80,0x81,0x80,0x82,0x80,0x82,0x84,0x85,0x81,0x81 -,0x81,0x80,0x81,0x80,0x80,0x80,0x80,0x81,0x82,0x80,0x87,0x89,0x80,0x80,0x80,0x82,0x84,0x80,0x88,0x8d,0x88,0x8d,0x8b,0x83,0x98,0x48,0x5e,0x97,0x92,0x1b,0x17,0xd1 -,0x12,0x05,0x0d,0x03,0x00,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x05,0x02,0x02,0x03,0x00,0x00,0x01,0x00,0x03,0x05,0x00,0x02,0x05,0x04,0x04,0x00 -,0x02,0x04,0x01,0x06,0x03,0x01,0x0f,0x3c,0x0c,0x0f,0x2a,0x3d,0x22,0x17,0x5f,0x64,0x15,0xae,0x8d,0x9f,0x8c,0x8c,0x96,0x9e,0xbc,0x9c,0x8c,0x94,0x8c,0x8a,0x9f,0xaa -,0x9c,0x3b,0xad,0x8e,0x81,0x88,0x98,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x84,0x88,0x8e,0x85,0x81,0x86,0x87,0x85,0x95,0x95,0x98,0x7b,0xb2,0x37,0x14,0x1e,0x14 -,0x11,0x5d,0x2e,0x21,0x2d,0x8d,0x9c,0x9f,0x87,0x86,0x87,0x83,0x85,0x8a,0x84,0x82,0x82,0x89,0x9a,0x8a,0x86,0x8c,0x87,0x86,0x84,0x86,0x89,0x93,0x9a,0x9a,0x90,0x9b -,0x95,0x8f,0x92,0xb1,0xb1,0xc1,0x8f,0xa7,0x38,0x9d,0x36,0x17,0x34,0x38,0x0d,0x1b,0x0b,0x0c,0x08,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x00 -,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x02,0x07,0x07,0x08,0x04,0x05,0x09,0x05,0x00,0x00,0x01,0x01,0x01,0x02,0x06,0x13,0x19,0x31,0x4b -,0x1d,0x15,0x16,0x07,0x08,0x1e,0xac,0x3c,0x37,0x8e,0x9b,0x88,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x81,0x80 -,0x82,0x82,0x85,0x82,0x84,0x8e,0x92,0x8c,0x8d,0x97,0x86,0x9e,0x9d,0x87,0x88,0xae,0x95,0x8a,0x87,0x84,0x89,0x88,0x84,0x8e,0x94,0x8b,0x9e,0x2c,0x13,0x15,0x0f,0x14 -,0x15,0x35,0x2f,0x25,0x21,0x32,0x12,0x0d,0x09,0x0b,0x07,0x18,0x16,0x00,0x0b,0x2e,0x16,0x0c,0x2b,0x1e,0x2f,0x24,0x13,0x0e,0x19,0x07,0x07,0x06,0x03,0x01,0x01,0x00 -,0x00,0x01,0x05,0x09,0x0f,0x09,0x0a,0x0d,0x04,0x01,0x04,0x05,0x04,0x1d,0x09,0x04,0x13,0x2f,0x0b,0x35,0xe7,0x2b,0x31,0x24,0x23,0xb8,0xaf,0x24,0xb5,0xb3,0x2b,0x20 -,0x2c,0x0e,0x15,0x16,0x2b,0xdd,0xaa,0x34,0x94,0x8c,0xab,0x3e,0xad,0x47,0xa8,0x88,0xaf,0x9d,0x8c,0x8f,0x98,0x82,0x83,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 -,0x81,0x81,0x88,0xa3,0xac,0xad,0xa9,0x9b,0xa9,0x29,0x2e,0x1d,0x0e,0x06,0x05,0x00,0x08,0x07,0x00,0x01,0x08,0x04,0x04,0x0f,0x0e,0x14,0x1b,0x13,0x1a,0xbe,0x16,0x0e -,0x1d,0x1d,0x14,0x24,0x17,0x0b,0x0f,0x0f,0x16,0xc5,0x3f,0x3c,0x9a,0x97,0xa3,0xac,0xab,0x3f,0x8c,0x8f,0xa0,0x8c,0x83,0x8d,0x8c,0x83,0x85,0x82,0x84,0x89,0x88,0x80 -,0x87,0x8b,0x86,0x86,0x8f,0x8c,0x91,0xa1,0x78,0x34,0x28,0xb8,0xde,0xfd,0xa3,0x9e,0xa0,0xba,0x2c,0x1a,0x9f,0x33,0x0f,0x1e,0xb8,0x0f,0x0e,0x28,0xce,0xa5,0xb5,0x32 -,0xb1,0x93,0x35,0x22,0xc7,0xd7,0x1e,0x1f,0x0e,0x0b,0x07,0x04,0x08,0x1e,0x13,0x0f,0x1a,0x1f,0x20,0x22,0x13,0x09,0x1c,0x0b,0x02,0x0d,0x33,0x13,0x23,0x9f,0x8f,0x89 -,0x88,0x8a,0x86,0x80,0x83,0x83,0x83,0x82,0x83,0x81,0x84,0x84,0x8a,0xa0,0xce,0xa6,0xb2,0x2c,0x1e,0x16,0x12,0x14,0x09,0x03,0x0e,0x0a,0x01,0x08,0x0e,0x05,0x05,0x0d -,0x0e,0x1d,0x21,0x0f,0x15,0xbb,0x58,0x23,0x4e,0x33,0x38,0xbf,0x2b,0x23,0x33,0x13,0x0d,0x1e,0x24,0x1f,0x67,0xc8,0xac,0x8f,0x92,0xbf,0x99,0x92,0xc0,0xa5,0x95,0xa6 -,0xb1,0x93,0x98,0x8c,0x84,0x8c,0x8f,0x86,0x86,0x8d,0x8f,0x9b,0xb2,0xa5,0x6e,0x20,0x39,0x1a,0x0d,0x17,0x1e,0x19,0x29,0x2b,0x2c,0xae,0xaf,0x17,0x18,0x3d,0x15,0x0f -,0x26,0x27,0x0f,0x1d,0x2b,0x41,0xad,0xab,0x4d,0xdc,0xbf,0x24,0x2a,0x2d,0x23,0x2c,0x3c,0x18,0x18,0x14,0x0d,0x10,0x14,0x10,0x13,0x15,0x0f,0x1c,0xcc,0x35,0x14,0x2c -,0x2d,0x16,0x1e,0x33,0x20,0x3d,0xac,0xae,0x91,0x87,0x89,0x87,0x80,0x81,0x81,0x80,0x81,0x81,0x81,0x82,0x85,0x87,0x93,0xaf,0xb2,0xde,0x2b,0x3c,0x21,0x16,0x21,0x1e -,0x0c,0x07,0x0d,0x09,0x02,0x04,0x04,0x03,0x07,0x09,0x0d,0x25,0x32,0x1d,0x30,0xae,0xbd,0x43,0x36,0x24,0x26,0x3b,0x2a,0x1c,0x1a,0x19,0x19,0x25,0x36,0x36,0xe9,0xbe -,0xa9,0xa5,0xa6,0xc3,0xb6,0x97,0xa7,0xab,0x9d,0x9e,0xab,0x96,0x8f,0x90,0x8b,0x8a,0x90,0x8e,0x88,0x8e,0x8e,0x95,0xa0,0x9c,0x99,0xc6,0x29,0x25,0x1d,0x17,0x18,0x1a -,0x20,0x2c,0x2f,0xcf,0xc8,0xcb,0x25,0x2d,0xe4,0x25,0x1b,0x1b,0x11,0x11,0x1e,0x1e,0x2d,0xc3,0xf8,0x50,0x9e,0x9c,0xac,0xb3,0x5a,0x2a,0x28,0x1b,0x0d,0x0b,0x0a,0x09 -,0x0c,0x0f,0x10,0x1b,0x29,0x2f,0x34,0x28,0x1e,0x11,0x18,0x1c,0x14,0x1a,0x1d,0x27,0xc4,0x98,0x8f,0x87,0x83,0x82,0x81,0x80,0x80,0x82,0x81,0x82,0x82,0x83,0x86,0x90 -,0x9c,0xa6,0xc4,0x45,0x28,0x1c,0x17,0x17,0x17,0x0e,0x0a,0x0b,0x08,0x0a,0x0a,0x07,0x06,0x06,0x06,0x0a,0x0f,0x0e,0x13,0x20,0x24,0x3d,0xc1,0xe2,0x62,0xc2,0x6c,0x5f -,0xdc,0x26,0x12,0x18,0x1b,0x1c,0x23,0x2d,0x3e,0xa8,0x9a,0x9a,0x9a,0x9c,0x9b,0x9b,0x95,0xa2,0xba,0xbe,0xac,0xad,0x9c,0x91,0x8f,0x8c,0x8b,0x87,0x86,0x89,0x8e,0x8e -,0x92,0xa5,0xb2,0xba,0x26,0x1d,0x20,0x20,0x29,0x2f,0x2c,0x3f,0xa8,0xa7,0xb9,0x3b,0x2e,0x28,0x1f,0x20,0x20,0x16,0x11,0x16,0x1a,0x1f,0x21,0x29,0x45,0xba,0xbd,0x68 -,0x3d,0x3d,0xfc,0x40,0x32,0x2d,0x1b,0x0f,0x0e,0x10,0x17,0x19,0x15,0x13,0x1e,0x2b,0x22,0x20,0x1e,0x26,0x1f,0x20,0x2a,0x22,0x20,0x44,0xad,0x9e,0x8f,0x8b,0x87,0x83 -,0x80,0x81,0x80,0x80,0x80,0x81,0x82,0x83,0x87,0x95,0xae,0x64,0x31,0x20,0x16,0x11,0x11,0x18,0x16,0x10,0x0c,0x0c,0x09,0x06,0x07,0x06,0x02,0x03,0x07,0x09,0x0b,0x0f -,0x17,0x1f,0x53,0xbc,0xbe,0xbf,0xc5,0xcc,0xcc,0x48,0x3c,0x2d,0x1f,0x22,0x2d,0x3e,0x43,0x46,0xe0,0xa5,0x9c,0x9f,0xa7,0xa3,0x9d,0xa5,0x9e,0x9a,0xa9,0xad,0x9f,0x9c -,0x98,0x93,0x97,0x95,0x8d,0x8b,0x8d,0x8b,0x8b,0x8f,0x92,0x98,0x9d,0xa7,0x4e,0x2f,0x2c,0x1f,0x1d,0x1b,0x1d,0x2a,0xe2,0xd9,0x3e,0x34,0x47,0x36,0x48,0x40,0x24,0x1b -,0x16,0x14,0x19,0x20,0x1f,0x2e,0x52,0xbe,0xbe,0xb3,0xb8,0xb9,0xbe,0x3b,0x2a,0x1d,0x0f,0x0c,0x0d,0x0e,0x0f,0x11,0x0f,0x11,0x1c,0x1c,0x18,0x1b,0x1b,0x15,0x1e,0x1e -,0x1a,0x22,0x3a,0xb1,0x93,0x8e,0x8b,0x85,0x83,0x81,0x80,0x80,0x81,0x81,0x81,0x82,0x83,0x84,0x8d,0x99,0xa1,0xc0,0x36,0x1f,0x14,0x0f,0x0e,0x0c,0x0b,0x0a,0x07,0x0a -,0x0e,0x0a,0x09,0x0a,0x08,0x09,0x0e,0x10,0x12,0x18,0x19,0x22,0x5c,0x39,0x36,0xc6,0x73,0x48,0xc6,0xe3,0x3c,0x2e,0x27,0x24,0x2a,0x27,0x28,0x2e,0x3d,0xc4,0xa9,0xab -,0xa5,0x97,0x9a,0x9b,0x96,0x9c,0xa6,0x9c,0x99,0x98,0x92,0x91,0x94,0x8f,0x94,0x92,0x8e,0x90,0x93,0x95,0x9c,0xa3,0xa5,0xc8,0xc5,0x2d,0x2f,0x43,0x1e,0x1c,0x1c,0x1d -,0x19,0x1d,0x29,0x21,0x2b,0x2b,0x2a,0x2a,0x36,0x63,0x66,0xb0,0x4c,0xb3,0xaa,0xc7,0xb1,0xae,0x2d,0x26,0x23,0x13,0x18,0x11,0x13,0x15,0x17,0x11,0x16,0x14,0x0f,0x1d -,0x20,0x3f,0xaf,0xab,0xaf,0x9e,0x9c,0x94,0x8f,0x93,0x94,0x96,0x9a,0xaa,0xa3,0xa4,0x9e,0xaa,0xb1,0xa2,0xad,0xca,0xa9,0xa4,0xa1,0xa5,0x62,0x6a,0x2c,0x1e,0x19,0x1c -,0x18,0x19,0x26,0x18,0x16,0x33,0xf8,0xc4,0xa3,0xa3,0xaa,0xa5,0xa6,0xac,0x9e,0xa6,0xbe,0xcd,0x4e,0x48,0x39,0x37,0x3e,0x35,0x28,0x1e,0x1a,0x1d,0x1b,0x1d,0x27,0x1f -,0x1d,0x31,0x56,0xf2,0x9f,0x9a,0x9e,0x9d,0x9e,0xa7,0xad,0xab,0xbe,0xac,0xcb,0x4e,0xec,0x7a,0xae,0xb5,0xad,0xa0,0x9e,0x9d,0x9c,0x9c,0x92,0x94,0x9f,0xab,0xe3,0x34 -,0x40,0x4c,0x26,0x23,0x17,0x0f,0x15,0x17,0x1a,0x26,0x24,0x26,0x2b,0x22,0x24,0x2e,0x32,0x24,0x19,0x11,0x10,0x13,0x14,0x17,0x18,0x1a,0x17,0x12,0x19,0x1d,0x2b,0xcc -,0xa8,0xa4,0xa1,0x9c,0x96,0x8a,0x87,0x8a,0x8a,0x8b,0x88,0x86,0x8a,0x8d,0x8e,0x93,0x9f,0xcc,0x4c,0xc9,0xd4,0x55,0x55,0xdd,0xe1,0xdd,0xbd,0xa2,0xa7,0xbc,0xa9,0xab -,0xb3,0xbc,0xbe,0xae,0xa9,0xa4,0xa5,0xb6,0xaf,0xb2,0xc8,0x31,0x27,0x20,0x1a,0x18,0x10,0x13,0x12,0x0d,0x0b,0x0a,0x09,0x09,0x0a,0x0b,0x0d,0x0b,0x0f,0x16,0x17,0x24 -,0x41,0xcd,0xa3,0x98,0x97,0x91,0x8e,0x8d,0x89,0x89,0x8e,0x94,0x9b,0x96,0x91,0x99,0x9f,0xa7,0xa9,0x9f,0xaa,0x4b,0x6b,0xc5,0xaf,0xc8,0x2d,0x39,0xe2,0xc3,0xbb,0xb8 -,0xbe,0xbc,0x4d,0x31,0x27,0x1f,0x1f,0x13,0x0b,0x09,0x07,0x05,0x04,0x04,0x05,0x07,0x08,0x0a,0x0e,0x0f,0x12,0x19,0x27,0x2c,0x1d,0x2b,0xf6,0xbd,0xa7,0x9f,0x9c,0x90 -,0x8e,0x94,0x97,0x97,0x8f,0x8b,0x89,0x89,0x8a,0x8c,0x8b,0x8a,0x89,0x87,0x89,0x8b,0x8b,0x8d,0x93,0x99,0x9c,0xa2,0xbf,0xe6,0xf1,0x37,0x52,0x6b,0x52,0xcc,0xbb,0xb4 -,0xae,0xac,0xaa,0x9b,0x99,0xa4,0xbd,0x3a,0x30,0x2c,0x1c,0x16,0x15,0x11,0x0e,0x0b,0x06,0x06,0x07,0x09,0x08,0x0a,0x10,0x17,0x1f,0x2b,0x3a,0xbf,0xad,0xb7,0xb7,0xb4 -,0xba,0xb1,0xac,0xc3,0x46,0x2d,0x21,0x1f,0x24,0x21,0x20,0x2c,0x2f,0x2f,0x2b,0x2b,0x30,0xb1,0xaf,0x5b,0xb9,0xa2,0x9b,0x9a,0x9c,0x99,0x91,0x92,0x91,0x91,0x8f,0x8b -,0x8a,0x8b,0x8d,0x94,0x9f,0xa5,0xad,0xad,0xa8,0x4f,0x26,0x20,0x1c,0x13,0x0c,0x0a,0x0a,0x09,0x0b,0x0f,0x0f,0x15,0x1f,0x31,0xb4,0x9f,0x9d,0x98,0x8f,0x88,0x85,0x83 -,0x83,0x86,0x88,0x89,0x8a,0x8d,0x8d,0x8f,0x92,0x93,0x9d,0xbe,0x3a,0x32,0x33,0x21,0x1c,0x1c,0x17,0x16,0x13,0x0f,0x18,0x19,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x09,0x07 -,0x06,0x05,0x03,0x03,0x04,0x05,0x07,0x08,0x09,0x0b,0x0e,0x11,0x21,0x37,0x44,0xbf,0xad,0xa4,0x9e,0x9a,0x94,0x8f,0x8e,0x8e,0x94,0x99,0x95,0x92,0x8f,0x8f,0x93,0x8f -,0x8f,0x90,0x8e,0x8a,0x88,0x88,0x8b,0x8e,0x8f,0x93,0x93,0x97,0xa0,0x9c,0x9e,0xaa,0xb8,0xb5,0xab,0xa3,0xa1,0x9e,0x9d,0xa0,0x9f,0xa5,0x9f,0x9c,0xb1,0x38,0x2d,0x25 -,0x1f,0x1c,0x16,0x17,0x18,0x12,0x0c,0x09,0x0a,0x0d,0x0b,0x0e,0x14,0x17,0x1d,0x24,0x2b,0xbd,0xa5,0xa7,0xa8,0xb1,0xae,0xb3,0xd6,0x4f,0x36,0x22,0x1d,0x14,0x0d,0x11 -,0x17,0x1a,0x1d,0x1e,0x1e,0x1f,0x21,0x2f,0x43,0xd8,0xb8,0xd3,0xbc,0xab,0xb3,0xac,0x9e,0x99,0x97,0x98,0xa1,0x9e,0x96,0x96,0x9a,0xa2,0xa8,0xa9,0xbc,0x64,0x6b,0xc8 -,0x4e,0x23,0x18,0x12,0x0e,0x0f,0x0e,0x0d,0x13,0x19,0x18,0x1a,0x1b,0x28,0xb7,0x9f,0x98,0x8f,0x8c,0x88,0x86,0x85,0x83,0x83,0x84,0x84,0x86,0x86,0x85,0x87,0x89,0x8b -,0x8f,0x96,0xa9,0x49,0x55,0x2e,0x25,0x2e,0x24,0x1e,0x1e,0x19,0x1b,0x26,0x1e,0x14,0x0e,0x0c,0x0b,0x08,0x08,0x07,0x05,0x04,0x04,0x02,0x03,0x03,0x04,0x06,0x08,0x0a -,0x0a,0x0b,0x0e,0x18,0x23,0x34,0x5c,0xd3,0xad,0xa4,0x9c,0x92,0x8f,0x8f,0x8e,0x90,0x94,0x96,0x95,0x90,0x91,0x96,0x95,0x95,0x94,0x90,0x8e,0x8b,0x8c,0x8e,0x90,0x92 -,0x96,0x92,0x98,0x9d,0x97,0x98,0xa2,0xad,0xb3,0xa5,0x9b,0x9e,0x9e,0x9f,0xa0,0x9a,0x9c,0x9a,0x9c,0xbd,0x39,0x27,0x1c,0x17,0x13,0x0e,0x0d,0x0d,0x0b,0x08,0x06,0x08 -,0x0c,0x0b,0x0d,0x15,0x17,0x1d,0x27,0x34,0xb6,0xaf,0xd5,0xc6,0xf5,0xdb,0xc2,0xdf,0x5b,0x34,0x20,0x1a,0x11,0x0f,0x15,0x16,0x15,0x1a,0x1e,0x21,0x2f,0x2e,0x68,0xb7 -,0x4a,0xc4,0xab,0xa7,0x9d,0x9b,0x99,0x95,0x96,0x97,0x9a,0x9b,0x92,0x8f,0x8f,0x8f,0x94,0x9a,0x99,0x9d,0x9c,0x9c,0xbd,0x43,0x2e,0x22,0x1c,0x19,0x10,0x0e,0x0b,0x08 -,0x0b,0x0f,0x19,0x1f,0x24,0x4f,0xab,0x9f,0x94,0x8d,0x89,0x86,0x86,0x87,0x87,0x89,0x8a,0x89,0x8b,0x8c,0x8d,0x94,0x95,0x93,0x96,0x97,0xa3,0xbc,0xe0,0x2b,0x2b,0x56 -,0x5a,0x35,0x20,0x16,0x15,0x14,0x11,0x13,0x0e,0x0b,0x08,0x05,0x05,0x06,0x04,0x04,0x04,0x04,0x05,0x06,0x07,0x0c,0x12,0x12,0x13,0x13,0x16,0x19,0x19,0x26,0x4b,0xd0 -,0xba,0xd3,0xbe,0x9c,0x92,0x8d,0x8b,0x8c,0x8b,0x8a,0x8a,0x87,0x86,0x89,0x8c,0x90,0x92,0x8f,0x93,0x96,0x98,0x9a,0x9a,0x9e,0xb3,0xb2,0xa6,0xa6,0x9b,0x97,0x97,0x95 -,0x97,0x97,0x8f,0x8e,0x8e,0x94,0x9b,0x9d,0x9f,0xa9,0xae,0x57,0x28,0x1e,0x15,0x0e,0x0e,0x0e,0x0f,0x0f,0x0e,0x0f,0x0e,0x0e,0x0f,0x15,0x18,0x1b,0x1d,0x1e,0x27,0x25 -,0x24,0x28,0x29,0x33,0x31,0x1e,0x1a,0x1d,0x1f,0x26,0x20,0x1d,0x1d,0x1c,0x1f,0x27,0x37,0x40,0x29,0x1f,0x23,0x25,0x21,0x1e,0x1d,0x21,0x31,0x39,0x37,0x4b,0xc2,0xa8 -,0x9a,0x94,0x8e,0x8b,0x8a,0x89,0x88,0x86,0x86,0x8b,0x90,0x97,0xa0,0xa8,0xaf,0xc0,0x3b,0x1d,0x19,0x11,0x0b,0x0b,0x0c,0x0d,0x0c,0x10,0x18,0x1f,0x38,0xc1,0x9e,0x95 -,0x91,0x8c,0x88,0x87,0x86,0x86,0x84,0x84,0x86,0x88,0x8c,0x91,0x8f,0x8e,0x8f,0x8f,0x94,0x9a,0x9f,0xac,0xc4,0xc9,0x2c,0x17,0x15,0x12,0x0f,0x0e,0x0a,0x08,0x08,0x08 -,0x08,0x05,0x05,0x07,0x07,0x09,0x0a,0x08,0x08,0x08,0x07,0x0b,0x13,0x12,0x11,0x10,0x13,0x17,0x18,0x15,0x19,0x18,0x18,0x20,0x20,0x2e,0xbc,0xa8,0x9d,0x97,0x91,0x8c -,0x8a,0x89,0x87,0x86,0x86,0x87,0x8a,0x8c,0x8e,0x90,0x8f,0x90,0x94,0x94,0x98,0xa1,0xa5,0xa1,0xa0,0x9f,0xa9,0xac,0xa0,0x9c,0x97,0x94,0x92,0x94,0x9a,0x9a,0x99,0x9b -,0x9e,0xa4,0xb3,0xba,0x47,0x24,0x1b,0x13,0x12,0x15,0x14,0x17,0x19,0x15,0x15,0x15,0x16,0x1b,0x18,0x0f,0x10,0x14,0x19,0x1d,0x1b,0x1b,0x1c,0x1c,0x1c,0x18,0x18,0x23 -,0x26,0x25,0x2d,0x2c,0x26,0x29,0x1f,0x2c,0xe2,0x3a,0x33,0x35,0x2f,0x34,0x32,0x27,0x27,0x24,0x20,0x27,0x2a,0xff,0xa6,0xa3,0x9c,0x96,0x91,0x8c,0x8a,0x89,0x86,0x87 -,0x89,0x8b,0x90,0x96,0x9c,0xa9,0xc3,0x47,0x2b,0x20,0x19,0x0e,0x0d,0x0e,0x0f,0x10,0x0e,0x10,0x1a,0x27,0xec,0xa8,0x9b,0x94,0x91,0x8d,0x88,0x86,0x86,0x86,0x86,0x85 -,0x87,0x89,0x8c,0x8e,0x8e,0x8f,0x92,0x92,0x97,0x9d,0xa3,0xb8,0xbe,0xbd,0x2c,0x19,0x16,0x12,0x10,0x0f,0x0c,0x0a,0x09,0x08,0x08,0x06,0x06,0x09,0x09,0x08,0x08,0x08 -,0x08,0x09,0x09,0x0d,0x10,0x0f,0x0f,0x0f,0x12,0x16,0x16,0x17,0x1b,0x1a,0x1d,0x22,0x29,0xd1,0xa7,0x9d,0x95,0x91,0x8d,0x8a,0x89,0x87,0x85,0x86,0x87,0x88,0x8b,0x8e -,0x91,0x95,0x96,0x9b,0x9b,0x9d,0xaa,0xb6,0xb3,0xaf,0xab,0xaa,0xb0,0xa1,0x9a,0x97,0x94,0x8f,0x8d,0x8f,0x90,0x8f,0x91,0x94,0x96,0xa2,0xab,0xb9,0x33,0x22,0x11,0x0b -,0x3a,0x96,0x15,0x00,0x98,0xa0,0x11,0x30,0x0d,0x0f,0x05,0x09,0x04,0x0c,0x0b,0x00,0x07,0x00,0x03,0x01,0x03,0x06,0x01,0x03,0x05,0x04,0x07,0x04,0x06,0x0f,0x0f,0x15 -,0x46,0xa3,0xa1,0x8e,0x92,0x9a,0x8e,0x80,0x87,0x91,0x83,0x81,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x86,0x87,0x87,0x8e,0x95,0x9a,0xa7 -,0xc9,0x2d,0x1d,0x11,0x0d,0x0d,0x08,0x09,0x07,0x04,0x06,0x0a,0x08,0x06,0x0a,0x06,0x03,0x07,0x04,0x04,0x05,0x02,0x01,0x02,0x03,0x02,0x02,0x01,0x01,0x01,0x03,0x04 -,0x02,0x04,0x02,0x05,0x06,0x08,0x0c,0x15,0x2c,0x42,0xa2,0x97,0x90,0x8b,0x8b,0x87,0x85,0x82,0x83,0x83,0x83,0x82,0x82,0x82,0x81,0x82,0x82,0x82,0x81,0x82,0x81,0x80 -,0x82,0x81,0x81,0x81,0x82,0x83,0x81,0x82,0x80,0x82,0x82,0x82,0x83,0x81,0x83,0x83,0x83,0x83,0x85,0x89,0x89,0x8e,0x92,0xa4,0xd2,0x3f,0x26,0x19,0x0f,0x0d,0x08,0x05 -,0x05,0x04,0x02,0x02,0x01,0x03,0x02,0x03,0x02,0x03,0x03,0x02,0x05,0x03,0x04,0x05,0x03,0x03,0x04,0x02,0x02,0x02,0x02,0x01,0x02,0x03,0x02,0x03,0x04,0x03,0x03,0x04 -,0x05,0x05,0x06,0x0a,0x0e,0x16,0x1a,0x19,0x1e,0x1e,0x29,0xc7,0xb2,0xb3,0xaa,0xb2,0xa3,0xa3,0xa2,0xa0,0xa9,0xa1,0xa2,0x9b,0x9e,0x97,0x95,0x93,0x97,0x92,0x91,0x8f -,0x8f,0x96,0x8a,0x86,0x84,0x88,0x86,0x86,0x84,0x83,0x84,0x83,0x82,0x82,0x83,0x83,0x85,0x84,0x86,0x88,0x88,0x87,0x88,0x89,0x89,0x8a,0x8b,0x8e,0x91,0x91,0x96,0x99 -,0x98,0x96,0x8e,0x91,0x8f,0x91,0x93,0x92,0x8e,0x8b,0x8d,0x8b,0x8e,0x8e,0x8f,0x93,0x94,0x97,0x99,0xa1,0x9c,0x9d,0x98,0x97,0x9a,0x99,0x98,0x9b,0xa5,0xaa,0xaf,0xa6 -,0xa6,0xa0,0x9c,0xa1,0xa7,0xab,0xbc,0xb8,0xc1,0x3b,0x2a,0x19,0x12,0x0d,0x0b,0x07,0x04,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x06,0x0b,0x0f,0x19 -,0x24,0x31,0xd5,0xaf,0x9b,0x8f,0x8b,0x86,0x85,0x84,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 -,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x82,0x83,0x85,0x87,0x88,0x89,0x8a,0x8d,0x8f,0x96,0x9d,0xa6,0xb8,0x4e,0x3d,0x55,0x44,0x3a,0x2c,0x22 -,0x1e,0x1a,0x1c,0x1c,0x16,0x13,0x0e,0x0a,0x09,0x07,0x05,0x04,0x03,0x02,0x02,0x01,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04 -,0x05,0x08,0x0a,0x0c,0x0d,0x0c,0x0d,0x0f,0x10,0x0f,0x0f,0x0e,0x0e,0x0e,0x11,0x18,0x1a,0x1f,0x1f,0x1f,0x22,0x24,0x27,0x2e,0xcf,0xaf,0x9c,0x97,0x98,0x96,0x93,0x8e -,0x8a,0x89,0x89,0x89,0x8b,0x8c,0x8c,0x8c,0x8d,0x8e,0x93,0x95,0x97,0x95,0x93,0x97,0x9a,0x9e,0xa4,0xa8,0xad,0xb6,0xab,0xa4,0x9d,0x97,0x9b,0x9d,0x9c,0x9f,0x9b,0x95 -,0x97,0x99,0x9e,0xaa,0xab,0xb8,0xde,0x5d,0x32,0x26,0x24,0x24,0x29,0x25,0x24,0x1e,0x18,0x15,0x16,0x14,0x13,0x1a,0x1f,0x2d,0x38,0x36,0x3c,0x39,0x4d,0xb1,0xac,0xac -,0xa9,0xb3,0xb5,0xb4,0xc0,0xc8,0xe5,0x4a,0x43,0x3b,0xea,0xb9,0xbb,0xb5,0xbe,0xcf,0xbb,0xb6,0xba,0xaa,0x9e,0x98,0x91,0x91,0x90,0x8e,0x8e,0x8b,0x89,0x89,0x88,0x8a -,0x8d,0x8d,0x8f,0x93,0x94,0x9a,0x9f,0xa5,0xa9,0xa5,0xac,0xb9,0xe1,0x37,0x27,0x24,0x1e,0x1d,0x2b,0x30,0x36,0x39,0x30,0x36,0x35,0x3e,0xcc,0xc0,0xc2,0xcd,0x4e,0x4e -,0x41,0x2f,0x2c,0x22,0x1a,0x19,0x18,0x1a,0x1b,0x1b,0x1b,0x19,0x15,0x13,0x12,0x10,0x17,0x1e,0x28,0x42,0x46,0x4f,0xff,0xcf,0xac,0xa0,0x9f,0x9e,0xa5,0xab,0xaa,0xb5 -,0xc2,0xc5,0x3e,0x2f,0x2f,0x2e,0x3f,0x3f,0x40,0x3b,0x2d,0x25,0x27,0x23,0x21,0x39,0x57,0xb5,0xad,0xb1,0xa8,0xa9,0xa0,0x98,0x97,0x97,0x98,0x9f,0xa3,0xaa,0xbb,0xcc -,0x3e,0x2b,0x26,0x20,0x24,0x29,0x26,0x24,0x1e,0x19,0x18,0x15,0x11,0x19,0x1f,0x2a,0x3e,0x35,0x3f,0x51,0x7b,0xaf,0xa4,0xa7,0xa2,0xab,0xb9,0xb8,0xdf,0x4e,0x3a,0x26 -,0x1f,0x1d,0x1d,0x24,0x21,0x20,0x1f,0x1b,0x19,0x1a,0x16,0x17,0x24,0x2b,0x58,0xc2,0xcc,0xb4,0xaf,0xa7,0x9b,0x9b,0x9a,0x9b,0xa2,0xa2,0xa4,0xac,0xae,0xc3,0x43,0x3b -,0x38,0x41,0x50,0x44,0x42,0x33,0x28,0x25,0x23,0x1e,0x2b,0x3f,0xca,0xa8,0xab,0xaa,0xa5,0xa3,0x9a,0x96,0x98,0x96,0x9c,0xa1,0xa0,0xaa,0xb2,0xba,0x58,0x3b,0x37,0x32 -,0x3d,0x39,0x37,0x2e,0x23,0x1d,0x1c,0x18,0x18,0x1f,0x29,0x5a,0xcd,0x5c,0xca,0xc0,0xb2,0xa0,0xa1,0xa0,0xa3,0xb4,0xb8,0xc0,0x52,0x48,0x33,0x26,0x23,0x1f,0x25,0x29 -,0x27,0x27,0x1f,0x1b,0x1a,0x18,0x14,0x1a,0x24,0x34,0xc7,0xeb,0xd6,0xba,0xb7,0xa4,0x9b,0x9b,0x9a,0x9e,0xa6,0xa7,0xb2,0xb5,0xba,0x55,0x3c,0x35,0x30,0x43,0x3c,0x40 -,0x44,0x30,0x2a,0x2b,0x21,0x1f,0x38,0x69,0xb1,0xa8,0xae,0xaa,0xa9,0xa5,0x9a,0x99,0x9a,0x9b,0xa1,0xa5,0xa9,0xb9,0xc0,0x4f,0x30,0x30,0x28,0x29,0x2d,0x28,0x2a,0x26 -,0x1f,0x1e,0x1c,0x16,0x1c,0x2c,0x3b,0xb8,0xba,0xcc,0xc3,0xc1,0xab,0x9e,0xa1,0xa1,0xa8,0xba,0xb8,0xcf,0x48,0x40,0x2b,0x23,0x22,0x1e,0x26,0x25,0x23,0x23,0x1e,0x1c -,0x1b,0x18,0x15,0x1e,0x2b,0xf8,0xac,0xb3,0xaf,0xac,0xa8,0x9b,0x98,0x99,0x98,0x9f,0xa5,0xa7,0xb2,0xb9,0xc8,0x3b,0x33,0x2e,0x31,0x3f,0x38,0x39,0x31,0x29,0x24,0x23 -,0x1e,0x1f,0x36,0xe2,0xa9,0xa5,0xa6,0x9f,0xa1,0x9b,0x94,0x94,0x95,0x98,0x9f,0xa0,0xaa,0xb7,0xc0,0x42,0x2b,0x2c,0x26,0x29,0x2b,0x27,0x27,0x22,0x1e,0x1c,0x1a,0x15 -,0x1d,0x2c,0x4b,0xb7,0xb4,0xb1,0xaf,0xae,0x9d,0x9b,0x9d,0x9c,0xa5,0xad,0xae,0xcb,0x4d,0x36,0x24,0x20,0x1f,0x1e,0x25,0x23,0x20,0x21,0x1e,0x1b,0x1a,0x18,0x17,0x22 -,0x30,0xc3,0xae,0xaf,0xaa,0xa8,0x9f,0x98,0x99,0x98,0x99,0xa0,0xa2,0xa6,0xb0,0xbc,0xea,0x38,0x33,0x2d,0x33,0x35,0x2f,0x34,0x2b,0x23,0x20,0x1e,0x19,0x1d,0x2d,0xf6 -,0xab,0xab,0xaa,0xa5,0xa6,0x9c,0x96,0x96,0x95,0x9b,0xa2,0xa2,0xab,0xbc,0xcb,0x3f,0x30,0x30,0x2a,0x30,0x2c,0x2a,0x29,0x20,0x1d,0x1d,0x19,0x15,0x1e,0x2e,0x5f,0xb8 -,0xbd,0xb6,0xaf,0xab,0x9c,0x99,0x9b,0x9b,0xa4,0xab,0xaa,0xbe,0x7b,0x48,0x2b,0x2c,0x2b,0x27,0x2e,0x2b,0x28,0x24,0x1f,0x1b,0x1a,0x15,0x15,0x26,0x36,0xd5,0xb7,0xbd -,0xb5,0xab,0xa1,0x97,0x97,0x98,0x9a,0xa1,0xa2,0xa6,0xbb,0xca,0x59,0x34,0x3a,0x2d,0x30,0x38,0x2f,0x2c,0x29,0x24,0x1e,0x1c,0x18,0x1d,0x30,0x49,0xb3,0xac,0xb0,0xac -,0xa7,0x9e,0x97,0x98,0x98,0x9c,0xa3,0xa3,0xab,0xbd,0xd4,0x33,0x2a,0x2c,0x2a,0x3d,0x36,0x2f,0x2e,0x2a,0x22,0x1e,0x1b,0x16,0x1f,0x2d,0x63,0xb0,0xbb,0xc4,0xb9,0xaf -,0x9d,0x98,0x9a,0x9c,0xa6,0xaa,0xa9,0xb8,0xc7,0x48,0x2a,0x29,0x29,0x2b,0x36,0x2c,0x2c,0x2d,0x28,0x20,0x1e,0x17,0x17,0x27,0x39,0xb4,0xab,0xbb,0xb0,0xad,0xa2,0x98 -,0x99,0x99,0x9c,0xa4,0xa2,0xab,0xba,0xce,0x3b,0x2e,0x33,0x2f,0x36,0x37,0x2e,0x2e,0x2e,0x29,0x1f,0x1f,0x17,0x1d,0x38,0xd6,0xaa,0xb1,0xb4,0xaa,0xa4,0x9c,0x98,0x99 -,0x99,0x9f,0xa8,0xa4,0xab,0xbb,0xf1,0x32,0x2c,0x35,0x34,0x41,0x34,0x29,0x2a,0x25,0x22,0x1d,0x19,0x14,0x1e,0x34,0xc2,0xa8,0xb0,0xb5,0xaf,0xa9,0x9b,0x95,0x99,0x9d -,0xa3,0xa6,0xa2,0xb0,0x6d,0x3c,0x2d,0x2d,0x31,0x2f,0x38,0x2f,0x2f,0x2e,0x28,0x22,0x1b,0x15,0x13,0x1f,0x3d,0xbb,0xaa,0xb6,0xb8,0xac,0x9e,0x95,0x95,0x9c,0x9d,0xa5 -,0xa2,0xa1,0xaf,0xcf,0x37,0x2a,0x35,0x38,0x36,0x3a,0x29,0x2c,0x2d,0x2e,0x27,0x1e,0x16,0x1c,0x29,0xb9,0xa9,0xac,0xb9,0xbf,0x9f,0x9e,0x98,0x95,0xa2,0xa0,0xa2,0x9f -,0x9c,0x61,0x5f,0x29,0x2c,0x3f,0x47,0x2e,0x27,0x1f,0x2c,0x2b,0x1d,0x1e,0x16,0x16,0x13,0x2f,0xc5,0xaf,0xa4,0x5c,0xba,0xa3,0x9c,0x93,0x9b,0x9b,0x9d,0x9f,0x9d,0xa2 -,0xc8,0x42,0x2d,0x2b,0x3d,0x2f,0x2e,0x27,0x25,0x26,0x29,0x21,0x16,0x19,0x16,0x1b,0x33,0xdc,0xb2,0xc2,0xe8,0xad,0xa3,0x9b,0x93,0x97,0x9e,0xa1,0x9d,0xa1,0xa5,0x79 -,0x44,0x3d,0x2c,0x3f,0x2a,0x30,0x27,0x2c,0x35,0x2c,0x24,0x18,0x16,0x14,0x22,0x64,0xcd,0xc1,0xc5,0x78,0xa2,0x9d,0x9b,0x93,0x9e,0x9a,0x9e,0xa3,0x9e,0xca,0xf9,0x39 -,0x37,0x49,0x45,0x2c,0x2e,0x37,0x2e,0x58,0x26,0x20,0x1a,0x17,0x15,0x22,0x39,0x37,0xc1,0x50,0xb4,0xab,0xa5,0x9b,0x98,0x98,0x9d,0x9f,0x9f,0xa5,0xc3,0x7d,0x58,0x36 -,0x3a,0x2f,0x23,0x2e,0x2f,0x31,0x34,0x20,0x1d,0x1b,0x1a,0x18,0x26,0xc6,0xc7,0xc0,0xb7,0xb6,0xa9,0x9e,0x9c,0x98,0xa1,0x9d,0xa2,0xa9,0x9f,0xdd,0xd1,0x52,0x36,0x35 -,0x33,0x3b,0x39,0x3e,0x3c,0x34,0x2b,0x1b,0x1a,0x1b,0x1b,0x3c,0x41,0xc9,0xb6,0xcc,0xad,0xa7,0xa3,0x98,0x9d,0xa4,0x9e,0xa3,0xa1,0xb1,0xea,0x3d,0xcb,0x34,0x33,0x2f -,0x29,0x5b,0x34,0x46,0x2e,0x20,0x1b,0x1b,0x18,0x1d,0x4c,0x49,0xc8,0xca,0xc6,0xa8,0xa4,0x9e,0x9c,0x9f,0xa0,0x9b,0xaa,0xab,0xb2,0x3f,0xf7,0x4a,0x3b,0x32,0x27,0x36 -,0x46,0x2e,0x3b,0x28,0x1f,0x1c,0x1e,0x1a,0x1f,0x63,0x3c,0xc6,0xca,0xcb,0x9e,0x9e,0x9c,0x99,0xa6,0x9a,0x9d,0xaa,0xa2,0xbf,0x6b,0xcd,0x38,0x30,0x29,0x2c,0x30,0x36 -,0x35,0x2b,0x2c,0x1a,0x23,0x1f,0x19,0x39,0x4d,0xce,0xc0,0x39,0xaf,0x9f,0x9c,0x99,0xa3,0xa0,0x9b,0x9c,0xab,0xae,0xbe,0x66,0x59,0x34,0x2b,0x2e,0x2c,0x7c,0x31,0x28 -,0x36,0x22,0x22,0x1d,0x15,0x1f,0x3d,0x61,0xc4,0x40,0xbf,0xa0,0x9d,0xa1,0xa4,0x9d,0x9b,0x97,0xa8,0xb4,0xab,0x4e,0xd7,0x33,0x27,0x3c,0x2a,0x3c,0x3e,0x25,0x34,0x2b -,0x1f,0x1f,0x18,0x1a,0x28,0xc8,0x3f,0x47,0xc1,0xb8,0x99,0xad,0xa6,0x97,0x9d,0x97,0xa1,0xb6,0xa0,0xbb,0xd9,0xc6,0x29,0x3a,0x3d,0x2d,0x2f,0x2d,0x2a,0x2e,0x28,0x18 -,0x1e,0x1e,0x18,0x55,0x41,0x46,0xb5,0x3d,0xa9,0xa0,0xab,0x9b,0x9a,0x99,0x96,0xa6,0xa6,0x9f,0xb7,0x67,0x67,0x38,0x33,0x32,0x21,0x2f,0x2b,0x26,0x2e,0x1c,0x1c,0x23 -,0x17,0x1e,0xfb,0x3d,0x3e,0x53,0xc6,0xa4,0xa8,0xa8,0x9b,0x99,0x9b,0x9a,0xa3,0x9f,0x9f,0xee,0xc4,0xd0,0x35,0x44,0x2a,0x2b,0x3c,0x2a,0x2a,0x23,0x20,0x1e,0x1b,0x17 -,0x25,0xd5,0x2a,0x3b,0xcb,0xbf,0xa3,0xb3,0xa9,0x8f,0x9d,0x9c,0x9b,0xaa,0x99,0xb4,0x6d,0xbe,0xe9,0x46,0x35,0x2f,0x3a,0x39,0x23,0x24,0x27,0x1c,0x1c,0x1d,0x16,0x36 -,0x49,0x20,0xe6,0xc6,0xc9,0xad,0xbc,0x9c,0x98,0xa2,0x9b,0x9a,0x9d,0x9e,0xab,0xbc,0xae,0x65,0x32,0xc1,0x2d,0x39,0x32,0x1f,0x40,0x1b,0x1c,0x21,0x1a,0x18,0x30,0x37 -,0x23,0x3e,0xcd,0xe4,0xba,0xaa,0xa3,0x98,0xa7,0x9c,0x95,0xa9,0x97,0xa8,0xba,0xa3,0x3f,0xd5,0x5b,0x2f,0x2c,0x31,0x2c,0x27,0x1d,0x1e,0x22,0x1f,0x17,0x25,0xd5,0x1d -,0x2e,0xce,0x60,0xbf,0xae,0x9f,0x9f,0xa0,0x9a,0x97,0xa1,0xa2,0x97,0xb8,0xb3,0xaa,0x50,0xcf,0x48,0x2d,0x3e,0x1e,0x27,0x24,0x17,0x26,0x1c,0x1e,0x1e,0x2f,0x2f,0x1a -,0xfb,0xba,0x34,0xa4,0xa3,0xad,0x9d,0x9d,0x99,0x9e,0x9f,0x9a,0xaa,0xac,0xa8,0xc6,0x54,0xca,0x46,0x2a,0x3b,0x27,0x21,0x22,0x1f,0x20,0x1d,0x1f,0x1d,0x2a,0x28,0x1b -,0xbd,0x59,0x33,0x9c,0xb6,0xb4,0x96,0xa1,0x99,0x9b,0xa0,0x96,0xae,0x9e,0xa4,0x43,0xb6,0xe9,0x2a,0x38,0x2f,0x21,0x24,0x26,0x1f,0x23,0x23,0x1d,0x18,0x25,0x3c,0x18 -,0x44,0xb5,0x1f,0x9f,0xa7,0x3f,0x91,0xa3,0xa9,0x8e,0xa1,0x9d,0x97,0xa9,0x9f,0xb9,0xbf,0xd4,0x32,0x3d,0x29,0x20,0x2e,0x28,0x20,0x27,0x1e,0x19,0x28,0x18,0x23,0xd4 -,0x14,0xb6,0xfc,0x1e,0x97,0xc6,0x5e,0x93,0xaa,0x9e,0x91,0xa5,0x9b,0x98,0xa6,0xa6,0xae,0xf4,0xc2,0x42,0x2f,0x44,0x28,0x2b,0x24,0x1e,0x27,0x19,0x23,0x2b,0x19,0x27 -,0x36,0x1e,0x2b,0xe8,0x39,0x5d,0xa5,0xb3,0xaf,0x94,0xa9,0x9e,0x92,0xaa,0x9b,0x9c,0xb4,0xa3,0xb5,0xd9,0xc0,0xe1,0x3c,0x28,0x33,0x1f,0x1f,0x2d,0x1b,0x2b,0x26,0x1e -,0x29,0x20,0x22,0x37,0x24,0x3b,0xb7,0x31,0xac,0xa3,0xbe,0x9c,0x9b,0xb2,0x98,0x9d,0xb7,0x97,0xa8,0xaa,0xa4,0xda,0xce,0x6f,0x4c,0x27,0x2b,0x34,0x1e,0x2a,0x2e,0x19 -,0x38,0x23,0x1d,0x39,0x25,0x35,0x3d,0x40,0x39,0xc6,0xd1,0xe3,0xa1,0xc8,0xae,0x9d,0xb0,0x9d,0x9d,0xa7,0x9e,0xa6,0xb4,0xb2,0xd2,0xd8,0x39,0xda,0x31,0x25,0x4f,0x1c -,0x2d,0x30,0x21,0x4c,0x2b,0x25,0xe8,0x25,0x45,0x47,0x2a,0xbe,0x28,0xbc,0x49,0x3b,0x9e,0xf8,0xa7,0xa2,0xb8,0xa2,0xaa,0xaa,0xa6,0xaa,0xb6,0xba,0xbd,0x4d,0x61,0x56 -,0x34,0x4f,0x3e,0x30,0x48,0x37,0x34,0x3b,0x37,0x36,0x2c,0x3a,0x27,0x3f,0x2f,0x32,0xbf,0x24,0xb3,0x3a,0x36,0xa9,0x38,0xac,0xb1,0xbb,0xa1,0xae,0xaa,0xa6,0xab,0xac -,0xb8,0xab,0xc8,0xce,0xb4,0x44,0xd1,0x54,0x37,0x3e,0x34,0x2e,0x33,0x2e,0x32,0x2a,0x3a,0x26,0x2b,0x3a,0x1e,0xec,0x22,0x42,0xc4,0x26,0xab,0xea,0x4b,0xa1,0xbb,0xa6 -,0x9d,0xa8,0x9c,0xa6,0x9d,0xa8,0xb5,0xa9,0x52,0xbd,0x5d,0x37,0x59,0x3a,0x37,0x2e,0x2e,0x2d,0x29,0x2b,0x26,0x26,0x32,0x1e,0x36,0x26,0x24,0x6f,0x1f,0xc8,0xd6,0x35 -,0xa4,0xbc,0xae,0x9e,0xa8,0x9a,0xa2,0x9d,0xa0,0xac,0x9c,0xb8,0xa7,0xb7,0x3c,0xb4,0x33,0x2f,0x4a,0x24,0x29,0x29,0x27,0x25,0x25,0x28,0x1f,0x2f,0x29,0x2d,0x48,0x22 -,0xc1,0x44,0x39,0xa9,0x3d,0xb6,0xa7,0xca,0xa2,0xa6,0xa3,0x9b,0x9e,0x9c,0xa7,0x9e,0xa8,0xc1,0xc1,0x58,0x2e,0x3b,0x30,0x21,0x28,0x2a,0x21,0x2e,0x2f,0x25,0x38,0x32 -,0x2f,0x3b,0x36,0x33,0x35,0x30,0xd0,0x30,0x4d,0xac,0x35,0xad,0x9e,0x6d,0x9e,0x9b,0xb2,0x9d,0x9d,0xaf,0xa9,0xaa,0xd5,0xe8,0x66,0x4d,0x2b,0x43,0x3c,0x1f,0x3f,0x37 -,0x1f,0x4f,0x32,0x2b,0x51,0x2f,0x3e,0x4b,0x3b,0x5a,0x29,0x53,0xc3,0x21,0xc4,0xc3,0x2a,0xab,0xa6,0xe0,0x9f,0x9e,0xb7,0x9d,0x9f,0xa9,0xa7,0xbb,0xb2,0x75,0x3a,0xca -,0x2b,0x29,0x4d,0x23,0x30,0x3c,0x32,0x3c,0x4e,0x67,0x39,0x3c,0x43,0x38,0x20,0x31,0x28,0x33,0x2d,0x2f,0xc3,0x3a,0xbf,0xa4,0xb7,0xa9,0x9c,0xa6,0x9e,0xa1,0xa3,0xaa -,0xba,0xad,0xd3,0x3d,0xcb,0x48,0x2e,0x43,0x43,0x29,0x39,0x4f,0x36,0x3d,0x39,0x42,0x27,0x2d,0x30,0x23,0x1e,0x2a,0x44,0x20,0x3c,0xae,0x4c,0xcb,0x9c,0xad,0xa8,0x9a -,0xa2,0x9c,0x9f,0x9f,0xa2,0xbe,0xcc,0xaf,0x3a,0x2d,0xdf,0x2c,0x32,0x4b,0x3a,0x39,0x3e,0x3e,0x3a,0x38,0x2a,0x28,0x2c,0x1f,0x25,0x1d,0x2b,0x40,0x1e,0xbe,0xb4,0xf4 -,0xa4,0xa0,0xa1,0x9e,0x9c,0x9a,0x9d,0xa1,0xa3,0xa6,0x5d,0x60,0xbd,0x37,0x2e,0x37,0x2d,0x39,0x2c,0x35,0x3f,0x26,0x48,0x3a,0x23,0x26,0x27,0x25,0x24,0x16,0x38,0xc6 -,0x22,0xc1,0x9e,0xc5,0xa4,0x99,0xa1,0x99,0x9f,0x99,0x98,0xb2,0xb9,0xa8,0x59,0x56,0x4f,0x38,0x34,0x38,0x2c,0xc7,0x44,0x22,0xbe,0x3b,0x23,0x2d,0x25,0x22,0x32,0x1f -,0x23,0x22,0x40,0x5c,0x3b,0xbd,0xa2,0x9e,0xa2,0xa8,0x9a,0x99,0xab,0xa2,0xa1,0xb5,0xa8,0xb3,0x38,0x48,0xca,0xbf,0xa8,0xa0,0x34,0x2f,0x1d,0x2c,0x1e,0x20,0x3a,0x36 -,0x18,0x0e,0x22,0x42,0xdc,0x35,0x32,0x15,0x16,0x0e,0xa7,0x91,0xac,0x89,0x85,0x8b,0x9d,0xac,0x44,0x2a,0x24,0x2e,0x89,0x87,0xaa,0x30,0x26,0x1f,0x24,0xb6,0x22,0x07 -,0x07,0x30,0xaf,0xfe,0x3e,0x48,0x21,0x06,0x01,0x3c,0x9e,0xb6,0x8c,0x8d,0x8e,0x9a,0xaf,0xa2,0x94,0xa8,0x96,0x97,0x1c,0x30,0x9d,0x91,0x21,0x0e,0xef,0x8b,0x98,0x19 -,0x18,0x1c,0x1a,0x1a,0x2a,0x5a,0x0f,0x06,0x0f,0x19,0x35,0x8a,0x9b,0x09,0x04,0x2b,0x83,0x80,0x87,0x90,0x8d,0x99,0x4b,0xac,0xb2,0x29,0x0d,0x21,0x93,0x9b,0xb0,0x2a -,0x1e,0x0d,0x08,0x20,0x37,0x12,0x0b,0x28,0xfa,0x9b,0x93,0xaa,0x12,0x06,0x27,0xa9,0x94,0x89,0x8b,0x8e,0x4c,0x17,0xa1,0x89,0x94,0x37,0x1f,0x23,0x2b,0xc5,0x95,0x97 -,0x22,0x18,0xb6,0x48,0x1b,0x1d,0x1d,0x21,0x0e,0x2e,0x94,0xb9,0x15,0x0d,0x1f,0x5e,0x8f,0x9b,0x23,0x1c,0xcd,0x8a,0x8b,0xad,0x9e,0x8c,0xaa,0x19,0x0f,0xd0,0x8e,0x33 -,0x18,0xae,0xbc,0x24,0x23,0xde,0xac,0xbd,0x3b,0x19,0x0b,0x1a,0x9b,0x99,0x38,0x1b,0x33,0xba,0xa4,0x4a,0x1a,0x48,0xc1,0x9f,0x8b,0x9d,0x2f,0x74,0xbd,0xba,0xbd,0x3f -,0x24,0x0c,0x0a,0xdc,0x88,0x86,0x94,0xb0,0x54,0x2f,0x22,0x4f,0xc7,0x3d,0x2b,0x3a,0x4e,0x24,0x1f,0x16,0x1e,0x19,0x0e,0x2d,0x9a,0x92,0x94,0xab,0xbc,0x9d,0x98,0xbe -,0x29,0x1b,0x2b,0xa0,0x9d,0x8f,0x8f,0xa5,0x0e,0x0c,0xbf,0x88,0x8b,0x32,0x0a,0x0d,0x2b,0xb3,0xb5,0x1d,0x0f,0x0d,0x48,0xb4,0xe7,0xb4,0xb7,0x21,0x1e,0x4a,0x9a,0x8f -,0xb3,0x2b,0xaa,0x90,0x9c,0x58,0x19,0x26,0xa1,0x8d,0x8f,0x92,0x97,0xa5,0x1b,0x08,0x0b,0x22,0xc1,0x29,0x1b,0x1d,0x1c,0x0e,0xec,0xaa,0x20,0x1e,0x19,0x28,0xa9,0x98 -,0x90,0x8c,0x99,0xda,0xc5,0xa5,0xa6,0xb0,0xea,0xa2,0x94,0x8f,0x9a,0x3d,0x20,0x2f,0x33,0x21,0x1a,0x15,0x19,0x0e,0x0d,0x1e,0xbe,0x25,0xd3,0x33,0x18,0x33,0xbc,0x93 -,0x91,0x9c,0xae,0xa0,0xb2,0xc8,0xae,0x91,0x99,0x4a,0x19,0x27,0x98,0x8f,0xa2,0x5f,0x5d,0xbd,0xa9,0x33,0x1a,0x14,0x16,0x0f,0x18,0x22,0x38,0x0f,0x0a,0x1a,0xbe,0x8b -,0x8d,0xaf,0x2a,0x67,0xae,0x8b,0x84,0x8d,0xa4,0x5b,0x37,0xb9,0xb1,0xdc,0xed,0x20,0x1b,0x2d,0xa1,0xa5,0xf1,0x1d,0x11,0x13,0x10,0x0f,0x1b,0x22,0x34,0x3c,0xa1,0x93 -,0xad,0xbf,0x2f,0x2f,0xb8,0x92,0x8e,0x8d,0x96,0xb7,0x36,0xdf,0xad,0xc1,0x28,0x0f,0x1d,0x5e,0xaa,0xa0,0xa2,0xf4,0x1c,0x0f,0x17,0x3c,0xcc,0x26,0x25,0x51,0xce,0x26 -,0x22,0xce,0x43,0xa8,0x99,0x9a,0xa6,0xb4,0x3e,0xb3,0xa1,0x9f,0xa1,0xa1,0xb0,0x70,0x2d,0x1c,0x49,0x3d,0x2f,0x27,0x2f,0x2c,0x3f,0x2f,0xc3,0xa8,0x48,0x0f,0x09,0x1c -,0xae,0xa5,0xb1,0x8f,0x9d,0xb5,0xad,0xae,0xb8,0xbf,0x29,0x3c,0x9b,0x97,0xa3,0x42,0x1e,0x1c,0x3e,0x25,0x26,0x29,0x23,0x33,0xaa,0x95,0x8c,0x9c,0x24,0x1f,0x1f,0x2b -,0x24,0x3b,0xbf,0x2f,0x10,0x39,0x9c,0xac,0xaa,0xfc,0x3d,0x36,0x38,0x4e,0x95,0x90,0xa5,0xdd,0x5d,0x5c,0x58,0x2e,0x1f,0x25,0x2f,0xad,0x9c,0x98,0xaa,0x35,0x26,0xba -,0xaa,0x50,0x1a,0x15,0x1e,0x2a,0x1f,0x33,0x96,0xc7,0x1d,0x23,0xba,0x99,0xa2,0x35,0x5c,0x9f,0xad,0x5c,0xb5,0xa8,0xaa,0xb9,0x30,0x3a,0x30,0x4f,0xe0,0xb6,0xa8,0x9a -,0x9f,0xac,0xbc,0x2c,0x23,0x15,0x1a,0x1d,0x1c,0x0e,0x2c,0xad,0x3c,0x62,0x4f,0xfd,0x30,0x17,0x17,0x9e,0x8a,0x8b,0x93,0x96,0x9c,0xaf,0x34,0x2e,0xc7,0xc9,0xd3,0xaf -,0xad,0xaa,0xac,0x1f,0x1e,0x1a,0x15,0x13,0x15,0x2c,0x42,0x23,0x14,0xb7,0xa9,0x28,0x34,0x39,0xb4,0xa3,0xac,0x9c,0x8b,0x96,0xbb,0xce,0xa8,0x93,0x9c,0x5a,0x36,0xcf -,0x4d,0xe4,0xb9,0xab,0xae,0x28,0x1e,0x3a,0x31,0x22,0x10,0x0b,0x14,0x18,0x17,0x18,0xb1,0xaf,0x4d,0xa8,0x9e,0x9a,0xa9,0x67,0xa5,0x8c,0x8d,0x8f,0x94,0x9c,0xbf,0x29 -,0x24,0x3d,0xc8,0x2b,0x2f,0x47,0xbb,0xb7,0x2c,0x27,0x2a,0x15,0x0b,0x0c,0x12,0x35,0x30,0x1c,0x2a,0x96,0x9d,0xba,0xa6,0xaa,0x94,0x9d,0x9f,0x90,0x8c,0x9e,0xaf,0xbb -,0xc9,0xfd,0x1a,0x1a,0x1e,0x1d,0x25,0xbe,0xb5,0xa0,0xc5,0x1f,0x39,0x2c,0x1a,0x1b,0x1e,0x29,0x3a,0x24,0x1d,0x27,0xa0,0xbe,0x46,0xb4,0xaa,0x97,0x9f,0x9c,0x8f,0x91 -,0x9e,0xa3,0xae,0xae,0x4d,0x1e,0x20,0x29,0x23,0x21,0x25,0x25,0x2c,0x2c,0x3d,0xad,0xc9,0x27,0x23,0x21,0x2c,0x77,0x50,0xd9,0xc1,0xa3,0xbc,0xdb,0xae,0xb6,0xae,0xfe -,0xc1,0x9e,0x9a,0x9f,0xa1,0xb9,0xc5,0x2c,0x1a,0x1d,0x27,0x30,0x4e,0xb6,0xa5,0x9e,0xaf,0xca,0x38,0x22,0x1e,0x34,0x37,0x61,0x54,0x31,0x31,0x24,0xc0,0x40,0x2c,0x3b -,0x30,0xac,0xa7,0xa1,0x9a,0xa2,0xae,0xb9,0xd1,0xb1,0xbe,0x37,0xda,0xc7,0xb1,0xbf,0xc8,0xb9,0xb9,0xed,0x36,0x44,0x33,0x25,0x1b,0x1c,0x28,0x3a,0x31,0x36,0x23,0xdb -,0x56,0x2b,0xc3,0xca,0xa5,0xc1,0xed,0xab,0xa6,0xa5,0xaa,0xb6,0xb3,0x58,0x35,0xc4,0xae,0xa6,0xa4,0xaa,0x9f,0x9c,0xb5,0x4c,0x34,0x25,0x1b,0x17,0x1a,0x1c,0x1e,0x19 -,0x1c,0x18,0x27,0x3e,0x20,0x46,0x4b,0xaf,0x9c,0x9b,0x8f,0x8f,0x97,0x9c,0xa8,0xa4,0xad,0xe1,0xb4,0xd8,0xc2,0xbd,0xbe,0xb0,0xc9,0x2f,0x1e,0x1d,0x1d,0x1d,0x1e,0x26 -,0x23,0x29,0x2d,0x24,0x20,0x19,0x28,0x33,0x45,0xa4,0xa2,0x97,0x9b,0xa6,0x96,0x9b,0x9b,0xa1,0xaf,0xa5,0xb0,0xb3,0xb7,0xb0,0xc1,0x3b,0x34,0x2f,0x32,0x2a,0x20,0x22 -,0x22,0x1e,0x1f,0x28,0x27,0x24,0x2a,0x29,0x2a,0x2a,0x4a,0x3b,0x48,0xac,0xac,0x97,0x92,0x97,0x95,0x9a,0x9a,0x9f,0xb2,0xa2,0xbd,0x70,0x5c,0x2e,0x48,0x29,0x20,0x1a -,0x17,0x17,0x1b,0x26,0x32,0xde,0xba,0xad,0xc3,0xb8,0x68,0xd3,0x7d,0x3c,0x3b,0xc9,0xb4,0xc4,0xb2,0xcb,0xae,0xd2,0xc7,0xbc,0xb6,0xaf,0xbb,0xb7,0xa5,0xa9,0xae,0xdb -,0x32,0x32,0x20,0x2a,0x26,0x2d,0x2f,0x30,0x3d,0x51,0xcb,0xb9,0xc5,0xc9,0xc4,0xc5,0xbc,0x4f,0xb9,0x59,0x57,0xcd,0x43,0xbe,0x4d,0x32,0x36,0x2d,0x42,0x62,0x79,0xbc -,0xb7,0xbc,0xb9,0xb3,0xb9,0xbd,0x46,0x3c,0x37,0xf0,0xb2,0xb5,0xad,0xb4,0xbc,0xc0,0xcb,0xc2,0x54,0x3a,0x3a,0x39,0x44,0x42,0x3d,0x2d,0x2d,0x1f,0x25,0x24,0x2c,0x2f -,0x38,0xc0,0xb0,0x9e,0xa1,0x9e,0xa7,0xad,0xaf,0xab,0xb2,0xb2,0xac,0xbe,0xd8,0x5d,0x48,0x3e,0x37,0x22,0x27,0x27,0x2e,0x40,0x4f,0x5e,0x4f,0x3c,0x59,0xc1,0x37,0xc9 -,0x3e,0x6a,0xc2,0x38,0xb7,0xce,0xbc,0xee,0x55,0xb9,0xc2,0xd3,0xbf,0x65,0xb2,0xab,0xb9,0xa9,0xbd,0xbd,0xd9,0x4b,0x32,0x37,0x27,0x28,0x25,0x22,0x2e,0x35,0x44,0x44 -,0xd4,0xf4,0xca,0xbb,0xaf,0xa4,0x9e,0xa5,0xa2,0xab,0xaa,0xb4,0x4f,0x39,0x2d,0x2f,0x2b,0x32,0x2e,0x36,0x2d,0x31,0x36,0x2d,0x2d,0x29,0x2d,0x36,0xee,0xd1,0xb9,0xb4 -,0xbd,0xba,0xaf,0xa8,0xa8,0xae,0xab,0xa2,0xa6,0xa7,0xa8,0xb5,0xb6,0xcb,0x39,0x2e,0x28,0x1f,0x1f,0x1f,0x28,0x27,0x26,0x2e,0x2d,0x43,0x44,0x48,0xf8,0xcb,0xc0,0xb4 -,0xba,0xb9,0xab,0xbc,0xb6,0xaf,0xbf,0xbb,0xc1,0xba,0xa8,0xac,0xad,0xbb,0xb2,0xb5,0xc8,0x49,0x35,0x36,0x2e,0x21,0x20,0x23,0x21,0x2e,0x1f,0x2a,0x3e,0x3d,0x3f,0x62 -,0xc6,0xab,0xa4,0xa6,0x9f,0xa5,0xa1,0xa2,0xa4,0xaa,0xb9,0xd4,0x51,0x4a,0x4c,0x2f,0x2e,0x2e,0x2c,0x23,0x26,0x29,0x27,0x2f,0x34,0x58,0xcc,0xbb,0xc0,0xb0,0xb3,0xbe -,0xb7,0xbe,0xbd,0xb6,0xb7,0xb4,0xb8,0xbd,0xcc,0xc5,0xdc,0x59,0x58,0x3a,0x44,0x49,0x49,0x44,0x40,0x2f,0x31,0x38,0x30,0x30,0x38,0x37,0x37,0x5f,0xdb,0xb8,0xb4,0xbb -,0xb8,0xad,0xad,0xb2,0xb8,0xb4,0xc5,0xcc,0xb8,0x44,0xbf,0xda,0x5f,0xed,0x3e,0x40,0x42,0x34,0x34,0x3c,0x31,0x3f,0x2d,0x46,0x3f,0x3b,0x2d,0x3d,0x3d,0x67,0xb9,0xaf -,0xae,0xa2,0xa4,0xb0,0x9e,0xbd,0xa8,0x58,0xc0,0x4c,0x56,0xd3,0x3b,0x2b,0x26,0x29,0x1c,0x3a,0x1f,0x4b,0x34,0xd5,0xbd,0xca,0xa3,0xb9,0xae,0xe9,0xa7,0xb4,0x7c,0xc3 -,0x4c,0xc7,0xcb,0xd0,0xdf,0x4f,0x3d,0xe8,0x43,0x48,0x5c,0x4f,0xce,0x57,0xf6,0x47,0x4c,0x52,0x4e,0xe3,0x40,0x34,0x4d,0x59,0xdd,0xdf,0xca,0xb4,0xc1,0xcc,0xc2,0xbf -,0xbe,0x77,0xcb,0xc1,0xb5,0xb3,0x75,0xba,0x57,0x5a,0x38,0x2f,0x2d,0x2c,0x2f,0x2a,0x4b,0x58,0x41,0x3d,0x57,0x4f,0x6a,0xc9,0xb6,0xcb,0xb5,0xb6,0xb1,0xb5,0xb1,0xac -,0xc5,0xbc,0xbe,0xca,0x3e,0xc7,0x5f,0x63,0xef,0x40,0x37,0x3b,0x29,0x26,0x2b,0x25,0x45,0x2f,0x52,0xeb,0xbe,0xbb,0xc0,0xae,0xb7,0xb1,0xaf,0xb9,0xb5,0xb9,0xc3,0xba -,0xbf,0xdc,0x39,0x43,0x36,0x37,0x37,0x38,0x45,0x6d,0xc9,0x78,0xcb,0x5e,0xdd,0x50,0x4e,0x44,0x4d,0x44,0x57,0x69,0x3f,0xdb,0x4f,0xc3,0x55,0xca,0xbc,0xb8,0xba,0xb2 -,0xae,0xba,0xb9,0xda,0xcb,0xde,0xff,0x36,0x33,0x2f,0x2f,0x30,0x5d,0x4c,0x4b,0x61,0x5f,0xe4,0x52,0xbb,0xf7,0xc4,0xb2,0xcb,0xb6,0xac,0xbd,0xc6,0x6c,0xce,0xdd,0x47 -,0x44,0x3b,0x55,0x66,0x50,0x3a,0x3d,0x3c,0x36,0x37,0x3e,0x4e,0x5f,0x63,0xc8,0xcc,0xb1,0xaf,0xc5,0xb6,0xcc,0xbb,0xc4,0xcf,0xbe,0xb8,0xd0,0x53,0xc6,0x5c,0x57,0x3c -,0x3f,0x41,0x2e,0x2e,0x46,0x45,0x3f,0x4b,0x4e,0x5f,0xcb,0xce,0x5b,0xda,0xe3,0xe0,0xd4,0xca,0xb6,0xba,0xe7,0xc8,0xcb,0xd0,0xda,0xd8,0xd9,0xdb,0xcd,0xb7,0xc4,0xcd -,0xbf,0x46,0x3e,0x39,0x3b,0x38,0x3c,0x37,0x36,0x40,0x43,0x58,0x5f,0x5b,0x46,0x6d,0xbb,0xc0,0xba,0xb5,0xb7,0xaa,0xb6,0xb4,0xbc,0xde,0xcd,0x3f,0x3f,0x77,0x3f,0x3f -,0x41,0x41,0x3a,0x36,0x3c,0x38,0x42,0x3e,0xf6,0xd1,0xcb,0xce,0xba,0xbf,0xc4,0xd5,0xde,0xc8,0xc8,0xc0,0xcc,0xb9,0xc6,0xc4,0xd5,0xd7,0xce,0x46,0x3e,0x3f,0x3a,0x49 -,0x3f,0x3c,0x39,0x42,0x51,0x4c,0x4e,0x58,0xd7,0xd3,0x6f,0xe3,0xc2,0xc1,0xb8,0xec,0xbe,0xbb,0xd6,0xdf,0xdd,0xc0,0x4a,0x4f,0xca,0xba,0xd0,0xce,0x55,0x4c,0x3f,0x39 -,0x4c,0x2c,0x3f,0x3f,0x3b,0x44,0x74,0xf6,0x59,0x43,0x4a,0xdf,0xc9,0xc3,0xcd,0xb3,0xb4,0xad,0xad,0xaf,0xc0,0xc7,0xdc,0xc9,0xfd,0x5d,0x54,0x3e,0x39,0x38,0x3c,0x2f -,0x2e,0x2b,0x3d,0x3d,0x40,0x5d,0xe1,0xbf,0xbb,0xd4,0xc2,0xba,0xc5,0xbf,0xc7,0xc1,0xc5,0xc9,0xcb,0xde,0xca,0xc4,0xcc,0x6c,0x5d,0xd6,0x4c,0x5c,0xef,0x44,0x5d,0xf9 -,0x4f,0x45,0x3f,0x3d,0x3c,0x4a,0x42,0x3e,0x3e,0x4f,0xce,0xc6,0xea,0xbc,0xb8,0xc8,0xba,0xb9,0xbb,0xc1,0xdd,0xce,0xc8,0xe4,0xca,0x42,0x45,0x4b,0x4b,0x48,0x3d,0x58 -,0x62,0xd8,0x4f,0x5c,0xe4,0x60,0x3d,0x36,0x49,0x59,0x58,0x75,0xcd,0xbe,0xaf,0xc6,0xe1,0xc6,0xb3,0xc4,0x59,0xbf,0x74,0x6b,0x4d,0x3d,0x5e,0x41,0x33,0x37,0x3d,0x59 -,0x60,0xdf,0xbf,0xd2,0xc7,0xba,0xc7,0xff,0xdf,0xcf,0xe4,0xd6,0xf0,0xce,0x73,0xe6,0x56,0x3b,0xdb,0x56,0x5f,0x75,0xe3,0xfd,0x68,0x4a,0x4f,0xca,0x71,0x41,0x4f,0xd6 -,0x5e,0x7d,0x5e,0x6e,0x5a,0x5c,0xf9,0xcb,0xc5,0xca,0xc9,0x59,0xca,0xc6,0x74,0xc8,0xd8,0xcf,0xc0,0xe7,0xd2,0x49,0x3f,0x45,0x45,0x49,0x42,0x59,0x48,0x5f,0xea,0x5a -,0xef,0xef,0xdd,0x66,0xd6,0xd1,0xc6,0xc4,0xdd,0xc3,0x77,0xca,0x70,0xf9,0xe8,0x67,0xe2,0x54,0x64,0xfa,0xe0,0x49,0xf2,0x4f,0x44,0x42,0x47,0xc1,0xd1,0x47,0x67,0xd7 -,0xd8,0xc5,0x6b,0xde,0xe4,0x47,0xd6,0xbf,0xc5,0xd8,0xf9,0x66,0xca,0x5a,0x46,0x5e,0x7c,0x46,0x37,0x76,0xcf,0x4e,0x56,0x59,0x5c,0xce,0xf0,0xc4,0xcf,0xe7,0xcb,0xcc -,0x59,0x54,0x58,0x4d,0x4a,0x49,0x56,0xd8,0xca,0xe5,0xce,0xeb,0xe9,0xc6,0xce,0xdc,0xd0,0x7c,0xe9,0x4c,0x44,0x4b,0x3f,0x4c,0x3d,0x44,0xeb,0xd4,0x7d,0x5c,0xfb,0xcd -,0xd3,0xdc,0xc1,0xef,0xcf,0xc6,0xc4,0xd9,0x5b,0x60,0x4f,0x63,0x69,0x49,0x6b,0xcb,0xe6,0xce,0x60,0x3b,0x44,0x59,0xd2,0xcb,0x69,0xd0,0xdf,0xc0,0xfb,0x4a,0x57,0x4d -,0xfe,0x7e,0xdb,0xc4,0xbe,0xca,0xef,0x49,0x5b,0xe9,0xdd,0x5c,0xd1,0xe8,0x5d,0xcf,0x6d,0x5d,0x3a,0x46,0x64,0x56,0xea,0xfa,0xc6,0x6c,0x46,0xc7,0xce,0xe9,0x63,0x46 -,0xcc,0xcf,0x5e,0x6a,0xda,0xf3,0xe8,0xca,0xd4,0x7b,0xec,0xc9,0xda,0x77,0x78,0x59,0x68,0xf6,0x57,0x57,0x41,0x57,0x4a,0xd9,0x50,0x38,0xfc,0xe7,0xcc,0xf8,0xcf,0xdb -,0xcb,0xcb,0xec,0xbf,0xcf,0xe4,0xf9,0xfa,0xd9,0x5e,0x59,0xec,0x4c,0x4b,0xec,0x55,0x4e,0x51,0xfc,0xd4,0xd9,0x64,0xd4,0xfa,0x60,0xd8,0x59,0x41,0x3d,0xfb,0x6f,0x47 -,0xda,0xd2,0xc5,0xcc,0x79,0xcd,0x4e,0xd0,0xce,0xc8,0xe0,0x6b,0xcc,0xc2,0xdf,0x35,0x3b,0x3a,0xdb,0xca,0x5d,0x50,0xdc,0xc9,0xde,0xe6,0x59,0x42,0x4c,0x66,0xec,0xc7 -,0xdd,0xcc,0x61,0x49,0xcb,0xc6,0x47,0x47,0xbf,0xc0,0xec,0xd8,0xde,0xe8,0x54,0x40,0x5c,0x63,0xef,0xd5,0x64,0x57,0x59,0x4b,0xdf,0xcf,0x4d,0x53,0xd1,0xbe,0xc0,0x63 -,0x51,0x68,0x65,0x56,0x5f,0xde,0xd8,0xd2,0xde,0x5c,0xff,0xfe,0x50,0x6c,0xf3,0xd1,0xce,0xdc,0xc1,0xc5,0x5e,0x4b,0x41,0x42,0x5e,0xda,0xe8,0x67,0x68,0x5e,0xe1,0x5f -,0x48,0x48,0x58,0xdc,0xd5,0xcb,0xce,0xda,0x59,0x57,0x6f,0x6d,0xef,0xec,0x6a,0x69,0xe4,0xeb,0xdf,0x59,0x4a,0x5c,0x57,0x6b,0xd8,0x79,0xee,0x6b,0x58,0xe3,0x79,0x65 -,0xe6,0xdb,0xef,0x5f,0x68,0x59,0x5c,0x63,0x5e,0x75,0xea,0x7e,0xee,0xe7,0x5f,0x63,0x73,0xec,0xf4,0xcb,0xca,0xe3,0x6c,0x63,0xd1,0xd6,0x5c,0x4f,0x61,0xdf,0xd1,0xea -,0x6f,0x6f,0x69,0x56,0x53,0x63,0x70,0x7b,0xfa,0x5e,0x6b,0xd4,0x7d,0x5b,0x5e,0xfb,0xd4,0xe2,0xdc,0xea,0x5b,0xe1,0xd6,0xdc,0xda,0xe3,0xf8,0xcb,0xe0,0x5b,0xdf,0xdd -,0x56,0x57,0x73,0xf7,0xce,0x5e,0x4f,0x67,0x5d,0x50,0x51,0x50,0xdb,0xdc,0xf7,0xe6,0xf2,0xfe,0x5c,0x47,0x45,0x78,0xe7,0xcd,0xc5,0xc1,0xc1,0xd1,0x6e,0xd3,0xda,0xe3 -,0x7b,0x61,0xf7,0x69,0xfa,0x70,0x4f,0x44,0x46,0x47,0x6a,0x60,0xf8,0xd7,0xdf,0xea,0xed,0xfa,0xdd,0xf5,0x53,0xdb,0xeb,0xfb,0xec,0x64,0xe9,0xd2,0xef,0xf6,0x77,0xdd -,0xe7,0x5f,0xf5,0xff,0x6c,0x5f,0x5d,0x79,0x79,0x5f,0x52,0x54,0xd8,0x53,0x42,0x4b,0xee,0xcf,0xca,0xcc,0xd0,0xd5,0x72,0xfc,0xd6,0xce,0xdc,0x7d,0x69,0xd4,0xde,0xdb -,0x7d,0x4a,0x5f,0x53,0x4c,0x71,0x56,0x59,0x6e,0x60,0xe0,0xf0,0x50,0x4b,0x50,0x73,0x79,0xf9,0xc5,0xc8,0xd0,0xdd,0xd0,0xbf,0xc5,0xdd,0x7b,0xf1,0xed,0x5a,0x6d,0xbe -,0xc8,0xe7,0x53,0x4b,0x5e,0x59,0x4e,0x48,0x4a,0x42,0x46,0x4e,0x5a,0xf7,0x56,0x4d,0xe4,0xd2,0xd4,0xd3,0xe0,0xcb,0xc7,0xd5,0xcb,0xd4,0xe6,0x4f,0x46,0x62,0xd9,0xd2 -,0xdc,0xe3,0xe7,0xd2,0xd6,0xd2,0xd7,0x69,0x44,0x46,0x47,0x3f,0x55,0x4f,0x48,0x4b,0x44,0x4d,0xdd,0xdb,0x6e,0xe3,0xd5,0xcd,0xc7,0xcc,0xce,0xce,0xcd,0xd1,0x6f,0xef -,0xe6,0x65,0x4d,0x55,0xcc,0xca,0xcf,0xdb,0xf2,0x52,0x4f,0x5d,0x60,0x67,0x4a,0x44,0x40,0x46,0x57,0x56,0x59,0x65,0x4f,0x59,0xe4,0xd2,0xc9,0xca,0xbf,0xc1,0xc7,0xd7 -,0xd7,0xdb,0x6a,0x70,0x5c,0xd7,0xd7,0xd9,0xf0,0x56,0xdb,0x65,0x53,0x55,0x41,0x4f,0x49,0x3e,0x4c,0x78,0xf3,0x4a,0x47,0x4b,0x5d,0x61,0xc5,0x65,0xa6,0x9e,0x1a,0x41 -,0xa4,0xc9,0x2a,0x39,0xa4,0x5e,0x3b,0xc9,0xad,0x41,0x49,0x54,0xc3,0x44,0x3d,0xb9,0xd6,0x62,0xa3,0x2b,0x3e,0xae,0x7d,0x37,0x1f,0xa0,0xce,0x47,0x1b,0x9c,0x0f,0x01 -,0x1b,0x10,0xa7,0x2c,0xb1,0x2f,0x36,0x8d,0x92,0x9c,0x8e,0x8f,0x30,0x91,0x8e,0xc1,0xc2,0x9b,0x63,0x95,0x1e,0x07,0x8a,0x8c,0x9a,0xaa,0xa0,0x16,0x21,0x1f,0x0d,0x08 -,0x08,0x07,0x05,0x0f,0x07,0x0c,0x0a,0x11,0x09,0x1f,0x1d,0x0b,0x20,0xb7,0x9e,0xb2,0xaa,0xa2,0x9f,0x95,0x90,0x90,0x91,0x92,0x8a,0x88,0x87,0x85,0x86,0x85,0x82,0x84 -,0x83,0x8d,0x85,0x96,0xd0,0x94,0x98,0xa8,0x11,0x23,0x17,0x14,0x13,0x04,0x04,0x04,0x03,0x08,0x0e,0x05,0x08,0x02,0x0a,0x0b,0x01,0x07,0x06,0x1c,0x28,0xe7,0xa7,0x3a -,0x3c,0xa4,0x9b,0x8e,0x8a,0x94,0x89,0x89,0x84,0x86,0x88,0x81,0x82,0x97,0x88,0x85,0x88,0x88,0x9b,0x9e,0xca,0x4f,0x25,0xcf,0x21,0x20,0x12,0x0a,0x53,0x20,0x13,0x11 -,0x0b,0x13,0x0e,0x0d,0x18,0x0b,0x09,0x0c,0x0b,0x0f,0x0e,0x10,0x19,0x69,0x32,0xa3,0xa0,0xc2,0x9d,0x99,0x98,0x9b,0xbb,0x48,0xa0,0x54,0xbf,0x2a,0x9d,0x83,0x9e,0x8b -,0x80,0x87,0x83,0x84,0x80,0x85,0x85,0x9f,0x92,0x8f,0x24,0x1a,0x10,0x49,0x0f,0x04,0x13,0x0d,0x0c,0x0f,0x08,0x01,0x0b,0x10,0x0a,0x0e,0x04,0x07,0x03,0x04,0x06,0x11 -,0x17,0xc5,0xab,0xb3,0x85,0x9c,0x8e,0x8c,0x8c,0x80,0x8f,0x95,0x90,0x88,0x88,0x86,0x88,0x8d,0x8e,0x97,0x8d,0x8e,0x8d,0xa7,0x2d,0xd7,0xb4,0x14,0x0f,0x22,0x1c,0x1a -,0x0d,0x0a,0x0c,0x10,0x1c,0x09,0x0c,0x27,0x2f,0x13,0x09,0x08,0x03,0x45,0x0f,0x26,0x2a,0x13,0x15,0x18,0x9f,0xe7,0x86,0xd5,0x3a,0x94,0x8a,0xb4,0xf5,0x84,0xa2,0xa1 -,0x22,0x93,0x82,0x95,0xca,0x37,0xb6,0x8e,0x80,0x86,0x8a,0x88,0x8c,0x96,0xac,0x3d,0x5f,0x27,0x21,0x2d,0x16,0x06,0x0a,0x21,0x0b,0x10,0x0c,0x00,0x0b,0x09,0x2e,0x34 -,0x09,0x0b,0x27,0x1b,0x14,0x18,0x10,0x16,0x24,0x10,0x17,0x98,0x81,0x8e,0x85,0x85,0x94,0x96,0x9a,0x85,0x8c,0x88,0x9c,0x8f,0x94,0x8b,0x80,0x8a,0xc6,0x26,0x2a,0x93 -,0x8d,0x16,0x29,0xb7,0xa4,0x1f,0xb1,0x3d,0x0c,0x0a,0x18,0x18,0x00,0x0a,0x12,0x0f,0x18,0x10,0x2f,0x29,0xad,0x0f,0x00,0x1e,0x13,0x34,0x23,0x96,0x99,0x2f,0x3d,0x4f -,0x8c,0x9b,0xae,0xa3,0x94,0x9b,0x97,0x8a,0x92,0x80,0x93,0x0c,0xd0,0x85,0xac,0x16,0x21,0x9b,0x80,0x93,0x9d,0x99,0x9f,0x95,0x4d,0x08,0x21,0x0f,0x3f,0xae,0x33,0xcf -,0x13,0x14,0x0b,0x12,0x06,0x11,0x08,0x1a,0x23,0x0b,0x14,0x27,0x23,0x0e,0x05,0x1e,0x4d,0x05,0x0a,0x00,0x9b,0x85,0x8f,0x82,0x82,0x86,0x2a,0x0a,0x36,0x81,0x8a,0x97 -,0x89,0x97,0x80,0x8c,0x97,0x8e,0x9f,0xa2,0x0c,0x91,0x8e,0x48,0xc1,0xa9,0xae,0xb9,0x48,0x07,0x19,0x16,0x02,0x03,0x03,0x99,0x91,0x06,0x51,0xab,0x26,0x1e,0x00,0x06 -,0x18,0x29,0x1d,0x30,0x9e,0x95,0xad,0x0b,0x1f,0x22,0x92,0xbb,0xc6,0x86,0x9d,0x8e,0x9a,0x90,0x8a,0xa2,0x9b,0x95,0x38,0x1c,0x0d,0x9e,0x80,0x87,0x8e,0x86,0x94,0x62 -,0x06,0x06,0xa0,0x91,0xa5,0xbf,0x8f,0xb7,0x95,0x2f,0x1b,0x05,0x14,0x0c,0x15,0x3d,0x0f,0xbb,0x08,0x3d,0x5b,0x0e,0x06,0x02,0x0b,0x0a,0x09,0x06,0xc8,0x81,0x8f,0xa7 -,0x1f,0xc3,0x50,0x04,0xd2,0x95,0x8d,0x89,0x86,0x84,0x83,0x94,0x1d,0xca,0x95,0x8f,0xa0,0x8e,0x8c,0x82,0x97,0xd8,0x9d,0x98,0x2e,0x1e,0x1e,0x04,0x10,0x07,0x96,0x83 -,0xd4,0x46,0x5e,0x09,0x07,0x00,0x0c,0x31,0xce,0x47,0x30,0xcc,0x19,0x16,0x06,0x0e,0x0a,0x29,0x16,0x22,0x8d,0xac,0xb1,0xad,0xb9,0x98,0x97,0x3a,0x2f,0xc0,0xbf,0xb0 -,0x81,0x80,0x83,0x8e,0xa9,0x8f,0xa5,0x25,0x0f,0xe4,0x87,0x87,0x8c,0x9f,0xb0,0x1f,0x0e,0x0e,0x13,0x1f,0x1c,0xa2,0x2a,0xa5,0xb5,0x0d,0x09,0x17,0x1e,0x17,0x1c,0x01 -,0x07,0x00,0xae,0x84,0x8e,0x15,0x1d,0x1e,0x0a,0x05,0x08,0x9e,0x88,0x87,0x24,0x9a,0x9b,0xaa,0x1d,0x2e,0x28,0x8b,0x8b,0xa6,0x80,0x8a,0x9b,0x37,0x95,0xa7,0x9b,0x96 -,0x5f,0x59,0x3c,0x33,0x94,0x80,0x8a,0x38,0x2c,0x1a,0x12,0x26,0x00,0x29,0x90,0x9e,0x4e,0x13,0x25,0x09,0x0a,0x09,0x0a,0x18,0x4c,0x3a,0x2d,0xbe,0x15,0x08,0x13,0x0d -,0xb4,0xad,0x13,0x2f,0x0a,0x0f,0xa4,0x85,0x82,0x9d,0x93,0xae,0x2b,0x5c,0xd0,0x8c,0x80,0x83,0x83,0xa2,0xa0,0x8c,0x1e,0x1a,0xad,0x96,0xa6,0x91,0xa8,0xcd,0x0f,0x38 -,0x17,0x09,0x29,0x11,0x3c,0x07,0x08,0x0b,0x0d,0xac,0x80,0x4f,0x13,0x38,0x01,0x0b,0x0f,0x0f,0x96,0x8b,0xa1,0x6e,0x4e,0xab,0x13,0x17,0xbe,0x27,0x8a,0x9d,0x93,0x8f -,0x9c,0xe3,0x2b,0x9b,0x42,0x90,0x40,0x2f,0x1b,0x29,0xbb,0x9c,0x85,0x89,0xbd,0xc3,0xa9,0x1b,0x25,0x09,0x9f,0x80,0x94,0xaf,0x2e,0x23,0xac,0xc2,0x06,0x0d,0x2a,0x52 -,0xb0,0x9c,0x21,0x0d,0x2b,0x2d,0x16,0xf5,0x21,0x09,0x1c,0x0c,0x07,0x15,0xcb,0x8a,0x86,0x1a,0x0e,0x28,0x1c,0x0b,0x22,0x98,0x88,0x80,0x90,0x95,0xc8,0xad,0xa2,0xef -,0x8e,0x98,0x88,0x83,0x92,0x9c,0x9e,0xc9,0x22,0x99,0x4e,0xa2,0x0d,0x08,0xa5,0x0e,0x04,0x1a,0xa2,0x84,0xaa,0x00,0x06,0x0c,0x0b,0x01,0x0d,0x86,0x8b,0xe2,0x36,0x0b -,0x28,0x0f,0x14,0xab,0x92,0x93,0x95,0x8d,0x97,0x8f,0x39,0x38,0x99,0xd0,0x94,0xa9,0x1e,0xaf,0x16,0x17,0xad,0x92,0x85,0x81,0x31,0xb5,0x17,0x11,0x26,0x0b,0x8f,0x86 -,0x8c,0x4c,0x1c,0x15,0x67,0x17,0x24,0x26,0x36,0x8b,0xb8,0x2f,0x38,0x3d,0x4b,0x0f,0x10,0x9a,0x5d,0x10,0x1e,0x1e,0x0c,0x21,0x12,0x9e,0x80,0xaf,0x15,0x1c,0x15,0x0e -,0x17,0x0f,0x94,0x89,0x92,0x9c,0x13,0xce,0x5a,0x12,0x28,0xa2,0x8c,0x82,0x9a,0x6c,0x8a,0x95,0x50,0x3a,0x94,0x8f,0x4a,0x1e,0x49,0x1d,0xb3,0x2d,0x14,0x8c,0x86,0x57 -,0x06,0x0b,0x0d,0x0b,0x05,0x12,0x8c,0x96,0x9f,0x1a,0x0b,0x17,0x08,0x42,0x30,0x27,0x95,0x8f,0x97,0x9a,0x2c,0x27,0xb5,0xb9,0x29,0xba,0x98,0x19,0x18,0x28,0x25,0x1f -,0xbc,0x86,0x82,0x93,0x20,0x23,0x24,0x24,0x1a,0xa0,0x80,0x88,0x95,0x2a,0xd3,0x10,0x1e,0x1d,0x22,0xb5,0xa4,0x8f,0x2d,0x18,0x1e,0x1f,0x0f,0x1f,0xed,0xa6,0x1e,0x0c -,0x0b,0x25,0x33,0x25,0x3b,0x9b,0x80,0x93,0x0e,0x0a,0x2b,0xc3,0x2d,0xa4,0x82,0x84,0x99,0x17,0x24,0x1c,0x12,0x46,0xc6,0x98,0x9b,0xa6,0x28,0x1e,0x39,0x32,0xa4,0xc5 -,0xad,0xa6,0x24,0x3e,0x0d,0x12,0x2b,0xb4,0xd4,0xdb,0x85,0x8f,0x2e,0x08,0x0f,0x4f,0xc5,0x2e,0x8f,0x82,0x92,0xbc,0x0f,0x1b,0x34,0xec,0x29,0x2d,0xac,0x9d,0xd5,0x15 -,0x29,0x1d,0xc9,0x3f,0x2e,0x23,0x20,0x2c,0x31,0x2b,0x1b,0xca,0x32,0x23,0xa1,0x83,0x9d,0xc9,0x28,0x2b,0xad,0xc6,0xa8,0x90,0x86,0x8c,0xa8,0x1a,0x18,0x36,0x52,0x2b -,0xba,0xde,0x9e,0xbc,0x1f,0x29,0x27,0x61,0x33,0x36,0xaf,0xa2,0xe1,0x2a,0x0d,0x1e,0x2f,0x19,0x14,0xa8,0x82,0x8b,0xbe,0x0a,0x10,0xf3,0x2b,0x25,0x95,0x8a,0x8e,0xc0 -,0x0d,0x10,0x31,0x2d,0x22,0x2c,0x9f,0x90,0x49,0x1c,0x20,0x3f,0xcd,0xbf,0xe6,0x52,0x9b,0x3d,0x1f,0x0f,0x0b,0x35,0x43,0x20,0xa7,0x84,0x86,0xa8,0x0d,0x09,0x2e,0xbf -,0x26,0x97,0x8d,0x8c,0x99,0x11,0x0b,0xa6,0x9f,0x1d,0x55,0xaf,0x9b,0xa4,0x21,0x32,0xa6,0x45,0x2b,0x2f,0x2f,0x9f,0xce,0x1c,0x12,0x13,0x4d,0x25,0x18,0x28,0x89,0x86 -,0xa3,0x1c,0x0d,0x1e,0x3d,0x1b,0xcd,0x93,0x8a,0x89,0x28,0x0f,0x1c,0xd6,0xe4,0x6b,0x38,0x9f,0x98,0x38,0x30,0xf2,0xa2,0xc8,0x1c,0x2c,0x9d,0x91,0x34,0x13,0x11,0x23 -,0x41,0x2c,0x2a,0x9e,0x84,0x8d,0x27,0x0c,0x19,0xaf,0xc1,0x1f,0xa8,0x89,0x89,0xb7,0x0f,0x1b,0xad,0x3c,0x46,0x4b,0xb1,0xa3,0x4f,0x21,0xd8,0xa8,0x3f,0x3d,0x2a,0xae -,0xad,0x2e,0x18,0x17,0x26,0x34,0x4f,0x1c,0x1d,0x8b,0x86,0xc8,0x12,0x12,0x1f,0xa6,0xb4,0x31,0x98,0x8a,0x97,0x40,0x20,0x34,0xb7,0x25,0x3d,0x6d,0xd7,0x9f,0x9e,0xaf -,0x73,0x25,0x2d,0xd8,0xbe,0xa4,0xae,0x1b,0x0d,0x16,0x38,0x33,0x17,0x1f,0x3f,0x87,0x8e,0x29,0x18,0x0b,0x27,0x3d,0x3a,0x9e,0x8a,0x8a,0x9d,0x25,0x14,0x19,0x70,0xa4 -,0xa9,0xad,0xa6,0x95,0x52,0xc2,0xa7,0xbd,0x24,0x40,0xa3,0xa5,0xc5,0x0e,0x1a,0x15,0xd2,0x2f,0x13,0x25,0x8d,0x88,0x1d,0x1a,0x17,0x33,0x57,0x2e,0xb3,0x92,0x8c,0x9a -,0x3c,0x1e,0x26,0x3d,0x22,0x2d,0x9d,0x99,0x97,0xbe,0x20,0x31,0x3e,0x3d,0x6a,0x3b,0x54,0xb6,0x2a,0x17,0x12,0x32,0xbb,0x15,0x13,0x99,0x83,0x8e,0x26,0x0a,0x1a,0xae -,0xb7,0xb0,0x94,0x8b,0x8d,0x4b,0x0f,0x18,0xbf,0xa0,0x3b,0x41,0x9e,0x96,0xac,0x1d,0x12,0x1c,0x59,0xcf,0x3e,0xa9,0xdc,0x22,0x0c,0x0b,0x30,0x37,0x1a,0x2d,0x86,0x85 -,0xad,0x0e,0x08,0x35,0x9c,0xac,0xa6,0x8d,0x8a,0x8e,0x2a,0x0d,0x1a,0xac,0x9c,0xcc,0xad,0x98,0x98,0x2d,0x0e,0x0f,0x22,0xaa,0xa6,0xab,0xbb,0x50,0x12,0x04,0x13,0x37 -,0x51,0x4f,0x89,0x85,0xa9,0x14,0x06,0x24,0xac,0xac,0xb2,0x96,0x87,0x8d,0x34,0x14,0x15,0x1f,0xbf,0xa3,0x9b,0x96,0xb2,0x32,0x14,0x0d,0x2f,0xbb,0xb3,0xa7,0xbd,0x24 -,0x10,0x0e,0x18,0x2c,0x2b,0xa6,0x83,0x8e,0x4d,0x1b,0x0c,0x46,0xea,0x34,0x90,0x87,0x85,0xa4,0x0f,0x0f,0x24,0x3d,0xbf,0xb2,0x95,0x93,0x24,0x1b,0x19,0x2e,0x67,0x2e -,0x6d,0xc4,0x47,0x19,0x14,0x48,0x40,0x0f,0x33,0x86,0x89,0xa9,0x1f,0x08,0x2a,0xb4,0x37,0x94,0x8b,0x87,0x94,0x1a,0x11,0x11,0xc9,0x96,0x7e,0x4f,0x9c,0xa7,0x38,0x19 -,0x0e,0x31,0x3e,0x51,0xbd,0x23,0x23,0x17,0x16,0x30,0x1d,0x9f,0x83,0x9a,0x4f,0x10,0x10,0xe7,0x4e,0xa8,0x8e,0x89,0x88,0x9e,0x1a,0x28,0x21,0x3c,0xaf,0x35,0x99,0x9e -,0x56,0x2b,0x23,0x44,0x20,0x1e,0x4e,0xcf,0x2c,0x18,0x10,0x1d,0x2f,0xe6,0x8c,0x8f,0xa1,0x1f,0x05,0x19,0xcd,0xb2,0x9a,0x8e,0x8d,0x8c,0x3b,0x17,0x27,0x3e,0x9f,0xa6 -,0x2e,0xcd,0xc1,0x4f,0xed,0x28,0x3e,0x31,0xb6,0xcd,0x1f,0x09,0x16,0x31,0x2e,0x35,0x8d,0x84,0x9d,0x2f,0x05,0x14,0xb7,0xb7,0x9f,0x8b,0x92,0x94,0x4e,0x17,0x17,0x71 -,0x9e,0xb4,0xab,0x9e,0xb8,0x1a,0x0e,0x2e,0xa4,0x44,0x42,0xab,0x65,0x08,0x0b,0x16,0xd2,0x22,0x93,0x83,0x99,0x42,0x03,0x0d,0xd6,0xaf,0xa2,0x8f,0x8c,0x8a,0x3a,0x0d -,0x1b,0x2d,0xb8,0x99,0x92,0x91,0x7a,0x19,0x1f,0x26,0xcb,0x9d,0x32,0x3b,0x22,0x10,0x2a,0x1a,0x23,0x32,0x8c,0x85,0xa1,0x17,0x06,0x18,0xaa,0xcf,0xb7,0x8e,0x8c,0x95 -,0x1f,0x0c,0x1d,0x23,0xaa,0x98,0xb4,0xab,0x4e,0x28,0x1f,0x1d,0xbe,0x9d,0xba,0xb1,0x1a,0x09,0x15,0x3d,0x34,0x97,0x84,0x8c,0xa6,0x11,0x03,0x13,0xb2,0x96,0x86,0x92 -,0x90,0xa7,0x13,0x0f,0x1d,0xbd,0x9d,0x9c,0xa0,0xb8,0x21,0x1f,0x1e,0x25,0x44,0xad,0xb5,0x33,0x19,0x13,0x11,0x1a,0x1f,0x8c,0x83,0x9f,0x34,0x09,0x0d,0xaf,0xc7,0xb8 -,0x8f,0x8c,0x89,0xc9,0x0d,0x0d,0xda,0xa3,0xa6,0xa9,0xa2,0xa6,0x29,0x1f,0x1a,0x30,0xad,0xa4,0xab,0x1f,0x10,0x19,0x1e,0x18,0x3b,0x83,0x86,0xae,0x0c,0x05,0x25,0x3a -,0x47,0x8d,0x89,0x8c,0xa7,0x09,0x0f,0x37,0xad,0x9c,0xbf,0xa5,0x98,0x4b,0x17,0x0f,0x2e,0xab,0x9b,0xb4,0x20,0x13,0x18,0x1f,0x1e,0x20,0x8f,0x81,0x94,0x2a,0x06,0x0e -,0xa9,0x3c,0x39,0x8f,0x8b,0x84,0x3d,0x06,0x16,0x4b,0xab,0x99,0x59,0xa3,0x94,0x2d,0x22,0x1a,0x17,0x3a,0xa5,0xbd,0x33,0x25,0x1c,0x1d,0x1b,0x2a,0x85,0x86,0xa0,0x1e -,0x07,0x15,0xdf,0x22,0xa8,0x89,0x8d,0x91,0x1c,0x0e,0x25,0x24,0x4c,0x9c,0x96,0x97,0xb1,0x18,0x15,0x1a,0x2c,0xa7,0xa8,0xb9,0x19,0x12,0x1c,0x4b,0x16,0xa6,0x80,0x89 -,0xaf,0x08,0x07,0x2b,0xb7,0x67,0x8d,0x8a,0x8a,0xee,0x0b,0x15,0x35,0x6c,0xd6,0xa3,0x99,0x9d,0x2e,0x1c,0x1e,0x24,0x5a,0x58,0xaf,0x74,0x0e,0x1a,0x2f,0x5e,0x23,0x91 -,0x83,0xa7,0x1e,0x07,0x25,0xad,0x29,0xd7,0x93,0x87,0x8a,0x2f,0x08,0x18,0x25,0x2c,0x9f,0x9b,0x8f,0xad,0x24,0x24,0x18,0x24,0x65,0xbc,0xac,0xe7,0x13,0x15,0x29,0x6a -,0x28,0x8a,0x84,0xbc,0x1c,0x04,0x1e,0xa5,0xcc,0x95,0x90,0x94,0x8d,0x2c,0x0b,0x10,0x2e,0xd8,0xa8,0xa9,0xa1,0x97,0x1c,0x12,0x2b,0xe7,0xbf,0x4b,0x35,0x19,0x0f,0x24 -,0x46,0xd3,0x6d,0x88,0x8b,0x41,0x23,0x08,0x1d,0x9f,0xdc,0x9f,0x8c,0x8e,0x8f,0x24,0x11,0x15,0x24,0xb6,0xa9,0xa3,0xa2,0xb9,0x36,0x27,0x2f,0x28,0x27,0xac,0x44,0x2a -,0x18,0x1b,0x1e,0x20,0x3b,0x89,0x84,0xe2,0x1d,0x09,0x23,0xa6,0x29,0xb7,0x8d,0x8c,0x8c,0xb7,0x0f,0x15,0x1e,0xde,0xad,0x9f,0x98,0xfd,0x23,0x1c,0x23,0xbc,0x3d,0x4c -,0x48,0xbb,0x30,0x0f,0x15,0x2c,0x1a,0x34,0x81,0x8a,0xa6,0x19,0x06,0x20,0xc4,0x27,0x94,0x8a,0x8b,0x8f,0x15,0x1a,0x22,0x26,0x38,0xf0,0x9b,0x91,0xf3,0x24,0x1c,0x28 -,0xba,0x3e,0xb4,0x30,0x2f,0x25,0x18,0x13,0x21,0x25,0x9f,0x80,0x9b,0x24,0x18,0x0d,0xc4,0x31,0x2b,0x8e,0x8e,0x8b,0xa9,0x28,0x1f,0x20,0x1a,0x3c,0xa5,0x9f,0x9b,0xb9 -,0xd1,0x1f,0x1d,0x21,0x34,0xb6,0xb9,0x57,0x21,0x17,0x17,0x20,0x14,0xa7,0x80,0x8c,0xaf,0x15,0x0c,0x2d,0x3b,0x2c,0x99,0x8b,0x8b,0x92,0x22,0x1e,0x2c,0x17,0x3b,0xbb -,0xa8,0xa1,0xaa,0xc0,0x47,0x20,0x2b,0x26,0x20,0x33,0xad,0x2f,0x12,0x11,0x16,0x38,0x28,0x87,0x86,0xa0,0x30,0x0a,0x26,0x46,0x14,0x9f,0x87,0x89,0x8b,0x37,0x24,0x1d -,0x17,0x2f,0x34,0xab,0x93,0x9c,0xaa,0x33,0x16,0x16,0x2f,0xb0,0x3f,0xb2,0x28,0x0c,0x17,0x11,0x5c,0x24,0xa2,0x80,0x92,0x22,0x15,0x13,0x34,0x2a,0x1e,0x8e,0x86,0x84 -,0xa6,0x1d,0x1d,0x19,0x17,0x27,0xbd,0x9e,0x93,0x9a,0xb4,0x1b,0x17,0x24,0x30,0xf8,0x49,0x3a,0x18,0x0f,0x22,0x40,0x5d,0x2d,0x8a,0x82,0xc8,0x1a,0x09,0x1d,0xa2,0x2a -,0x9c,0x8b,0x85,0x8d,0x1b,0x15,0x24,0x1d,0x1f,0x49,0x9f,0x92,0xac,0xd9,0xec,0x39,0x13,0x1b,0x26,0xd4,0xd5,0x21,0x1d,0x1b,0x23,0x2d,0x1d,0xb4,0x80,0x8c,0x36,0x09 -,0x0d,0xac,0x5f,0x1f,0x8c,0x87,0x8b,0x9c,0x1f,0x1e,0x1d,0x1e,0x29,0x64,0x9e,0x8f,0x9e,0xb3,0x3e,0x1b,0x1a,0x16,0x2b,0xcc,0x3e,0x61,0x19,0x29,0x5d,0x1d,0x11,0x9b -,0x82,0x95,0x26,0x0b,0x1d,0xb0,0x25,0x3f,0x8b,0x85,0x8a,0x32,0x11,0x22,0x1f,0x1c,0x4a,0xa2,0x90,0x97,0xa8,0x25,0x1d,0x2f,0x18,0x1c,0x3e,0xaa,0xa6,0x3e,0x0e,0x19 -,0x1d,0x16,0x25,0x8b,0x80,0x9b,0x14,0x04,0x1d,0xa0,0x40,0xa5,0x8a,0x85,0x96,0x15,0x12,0x21,0x26,0x36,0x9c,0x9b,0x95,0xab,0x3e,0x1a,0x1c,0x23,0x1f,0x3b,0xae,0x9a -,0xfe,0x11,0x07,0x28,0x29,0x37,0x37,0x8f,0x81,0xb3,0x0d,0x0a,0x79,0xa2,0x30,0x9f,0x85,0x89,0x99,0x0c,0x13,0x2f,0x3f,0xa9,0xa5,0x94,0xa7,0x27,0x13,0x31,0x3d,0x28 -,0x3e,0xb8,0x9f,0x59,0x16,0x15,0x24,0x2f,0x27,0x1f,0x2a,0x93,0x84,0xa9,0x18,0x1a,0x2f,0xba,0x3f,0xb0,0x8c,0x8b,0x9d,0x23,0x21,0xc5,0x49,0x2b,0x4a,0xb5,0xbb,0xd4 -,0x46,0xb9,0xaf,0x24,0x1f,0x21,0x2d,0xcd,0x4e,0x36,0x1c,0x1e,0x2b,0x2f,0x20,0xac,0x86,0x95,0x4c,0x23,0x1b,0xd6,0x2a,0x1c,0x94,0x88,0x8c,0xa6,0x2b,0xbf,0x1b,0x0d -,0x1d,0xc3,0x90,0x96,0xba,0xb9,0x41,0x21,0x12,0x14,0xb3,0xa9,0xb6,0x3f,0x3a,0x33,0x15,0x17,0x1d,0x26,0x96,0x83,0x92,0x2c,0x0f,0x0f,0x47,0x75,0x9d,0x88,0x86,0x8e -,0x24,0x10,0x0f,0x18,0x3e,0xb2,0x9f,0x9d,0xa9,0xaf,0x3d,0x18,0x11,0x19,0x4a,0x9c,0xa9,0xc5,0x22,0x1a,0x14,0x36,0xa1,0x32,0x1a,0x9f,0x8b,0x3a,0x5f,0x1f,0x19,0x27 -,0x5e,0x8f,0x80,0x89,0x88,0x9c,0x21,0x2f,0x11,0x0e,0x0b,0x16,0x9e,0xb0,0x15,0x0f,0x1a,0x1c,0x1a,0x92,0x84,0x8d,0xa4,0xdc,0x4b,0x3a,0xaf,0x8d,0x93,0xb9,0x38,0x9c -,0x5e,0x04,0x05,0x0b,0x18,0x0d,0x0e,0xa1,0x88,0x9a,0x1a,0x1f,0x4f,0x43,0x31,0xb8,0x8c,0x85,0x85,0x9e,0x3a,0x10,0x17,0x0e,0x08,0x14,0x95,0x83,0x40,0x0d,0x0e,0xeb -,0x9e,0x9c,0x91,0x8c,0x87,0x8c,0x29,0x0d,0x07,0x4b,0x8e,0x20,0x1d,0xce,0x96,0xa8,0x14,0x14,0x17,0x1b,0x62,0x90,0x89,0x9b,0xb5,0x3f,0x1c,0x0f,0x0f,0xbc,0xa3,0xa8 -,0x8f,0x8c,0x99,0x22,0x05,0x05,0x0a,0x0d,0xbb,0x86,0x87,0xab,0x18,0x11,0x21,0xb0,0x98,0x9d,0xa0,0x93,0x8d,0x99,0x4a,0x37,0x2a,0x1c,0x12,0x1a,0xb0,0xdf,0x16,0x28 -,0x2d,0x16,0x17,0xaa,0x90,0xaf,0x3e,0x99,0x8b,0xa1,0x2d,0x36,0xa7,0x93,0x86,0x83,0x92,0x1d,0x09,0x05,0x05,0x04,0x0d,0x9c,0xae,0x14,0x1d,0xaf,0x97,0x9f,0xc4,0xeb -,0xa5,0x9a,0xae,0xa4,0xa2,0x9f,0x91,0xbe,0x14,0x0c,0x1e,0x24,0x0e,0x0e,0x24,0x9a,0xab,0x5e,0xca,0x93,0x8a,0xa3,0x4b,0x1a,0x2b,0xa5,0xa1,0x9e,0x99,0x8f,0x94,0x1e -,0x05,0x07,0x0c,0x22,0x79,0x9f,0xa6,0x33,0x43,0xb8,0x99,0x8d,0x94,0xb2,0x35,0x32,0x9d,0xa1,0x1e,0x1c,0x9d,0x95,0xc5,0x28,0xa1,0x2e,0x0e,0x0e,0x15,0xa4,0x2b,0x21 -,0x74,0xaf,0xc4,0x72,0x72,0x2a,0x12,0x1c,0x8b,0x82,0x83,0x85,0x99,0x4c,0x34,0x38,0xb8,0xac,0x99,0x97,0xaa,0x23,0x1a,0xae,0x99,0xbe,0x26,0x94,0x82,0x90,0x16,0x05 -,0x0d,0x1d,0x11,0x20,0xd8,0x2d,0x0c,0x00,0x01,0x00,0x02,0x06,0x08,0x0d,0x2b,0x7d,0x50,0x14,0x09,0x0b,0x0d,0x22,0x96,0x8d,0x93,0x6b,0x24,0x1b,0x0a,0x0b,0xb4,0x89 -,0x93,0x94,0x9d,0x95,0x8e,0x94,0x87,0x81,0x80,0x80,0x84,0x8f,0xa2,0xa2,0x95,0x98,0x9d,0x8a,0x94,0x5e,0x22,0x21,0x44,0xad,0xa6,0xab,0xbc,0xc6,0x2a,0x2b,0x95,0x96 -,0xbb,0x91,0x91,0x27,0x2b,0x19,0x2c,0x2c,0x11,0x26,0xb7,0xed,0x0f,0x02,0x04,0x09,0x06,0x09,0x0f,0xba,0x9c,0x37,0x15,0x12,0x0e,0x0e,0x11,0x25,0xbe,0xb9,0x50,0x0e -,0x0b,0x15,0x0b,0x0f,0x8c,0x8b,0xa1,0x2e,0x0c,0x1d,0x22,0x5e,0x8e,0x89,0x88,0x8e,0xbb,0x97,0xa0,0xc4,0x9e,0x95,0x8c,0x93,0xa9,0xd8,0x1b,0x0a,0x14,0x30,0x9b,0xa8 -,0x22,0x16,0xbf,0x8c,0x8b,0x8e,0x82,0x86,0x9e,0xab,0x27,0x9c,0xb8,0x27,0xc8,0xc0,0x3d,0x0c,0x02,0x06,0x07,0x05,0x14,0x28,0xb5,0x42,0x17,0x2c,0x30,0xfb,0xa7,0xa3 -,0x88,0x83,0x86,0x9a,0x46,0x8f,0x90,0xb0,0x8b,0x80,0x85,0x84,0x9b,0xa4,0x97,0xec,0x94,0x84,0x83,0x82,0xb1,0x0c,0x09,0x01,0x04,0x0b,0x15,0x1a,0x07,0x06,0x04,0x00 -,0x01,0x00,0x06,0x08,0x06,0x04,0x09,0x0c,0x07,0x02,0x25,0x9b,0x1d,0x0d,0x0a,0x38,0x9c,0xb0,0x99,0x97,0x9c,0xab,0x1d,0x2a,0x55,0xba,0x8c,0x8e,0x8e,0x8a,0x90,0x87 -,0x85,0x8c,0x8f,0x8d,0x86,0x86,0x93,0xc2,0x9d,0x95,0xc0,0xbb,0x86,0x88,0xa0,0xc2,0x3f,0x99,0x9b,0xa7,0x8c,0x86,0x84,0x87,0x8a,0x8b,0xb3,0x32,0x65,0xa2,0x89,0x96 -,0xfb,0x39,0x0d,0x03,0x01,0x03,0x0e,0x0f,0x03,0x02,0x0c,0x38,0x17,0x3c,0x87,0x9e,0x2f,0x0c,0x0a,0x43,0x1a,0x17,0xb1,0x9f,0xa0,0x13,0x05,0x04,0x05,0x0f,0x2e,0x93 -,0x8c,0x9f,0x56,0x36,0x28,0x26,0x46,0x9f,0x97,0xcd,0x0f,0x13,0x54,0x3d,0x12,0x9c,0x8a,0x2a,0x1e,0x0b,0x12,0xc0,0x29,0x94,0x83,0x83,0x82,0x8d,0x94,0xa3,0x2c,0xd4 -,0x99,0x8b,0x8e,0xa7,0xa1,0xaf,0x24,0x0d,0x09,0x0e,0x0f,0x0b,0x0e,0x21,0x31,0x0e,0x0e,0x8e,0x90,0xb9,0x36,0x2a,0x9a,0x9d,0x91,0x80,0x80,0x80,0x81,0x8a,0x8c,0x9a -,0xe8,0x9b,0x8b,0x86,0x8b,0x8f,0x95,0xbe,0x2e,0x1a,0x2f,0x9f,0xab,0x15,0x09,0x06,0x0b,0x00,0x0a,0x99,0x1b,0x05,0x02,0x00,0x01,0x00,0x00,0x0c,0x24,0xcb,0x1c,0x0e -,0x1e,0x09,0x03,0x0c,0x27,0xae,0xce,0x9d,0x98,0x40,0x2c,0x0f,0x14,0x1d,0x0f,0x0e,0x12,0xcc,0x9e,0x9a,0x86,0x80,0x87,0x89,0x8d,0x8d,0x86,0x9e,0x8e,0x81,0x83,0x82 -,0x92,0x96,0xbe,0x18,0x13,0x1e,0xb1,0x96,0x8f,0x89,0x8c,0xa0,0xb5,0x57,0x9c,0xa1,0xcc,0xba,0xb0,0xc4,0x22,0x0f,0x90,0x85,0xed,0x1f,0x07,0x07,0x08,0x00,0x13,0xca -,0xc2,0xc4,0x1f,0x2d,0x0e,0x07,0x17,0x13,0x2d,0x30,0x29,0xa8,0x57,0x19,0x0f,0x11,0x28,0x14,0x0a,0x0b,0x0f,0x18,0x31,0x16,0x9a,0x8a,0x39,0x36,0x1d,0xbf,0xc1,0x25 -,0x94,0x86,0x8a,0x8a,0x92,0x95,0xa4,0x1f,0x3e,0x5f,0xbe,0xb0,0x24,0xb1,0x9d,0x4f,0x2e,0x56,0x98,0x8a,0x8f,0x96,0x95,0xab,0x99,0x3d,0x9d,0x80,0x99,0xb1,0x1b,0x0e -,0x0f,0x01,0x05,0x22,0xcf,0x9f,0xa6,0x39,0x2f,0x13,0x17,0x6b,0xa6,0x8a,0x82,0x85,0x85,0x8f,0x90,0x8d,0x99,0x8d,0x8e,0x91,0x99,0xbf,0x99,0xaa,0x9d,0x80,0x8a,0xa9 -,0xab,0x61,0xb9,0x37,0x14,0xe0,0x30,0x19,0x11,0x08,0x08,0x01,0x00,0x01,0x02,0x02,0x06,0x09,0x10,0x08,0x02,0x08,0x0a,0x0c,0x0f,0x22,0x1d,0x10,0x14,0x15,0x0a,0xa4 -,0x87,0x99,0x9c,0x7c,0xbc,0xcc,0x16,0xca,0x89,0x8a,0x89,0x90,0x8c,0x8b,0xaf,0xa7,0x8d,0x85,0x85,0x84,0x85,0x84,0x8f,0xb6,0xa4,0xa8,0xc7,0xad,0x99,0x3d,0x14,0x21 -,0x1a,0x2b,0x8b,0x8a,0x9c,0x96,0xa9,0xa0,0x9d,0x4c,0x91,0x8b,0x8e,0x8d,0x9d,0x92,0x34,0x07,0x07,0x09,0x09,0x09,0x15,0x15,0x0e,0x0c,0x09,0x08,0x0f,0x1d,0x32,0xad -,0x2e,0x1e,0x13,0x0b,0x08,0x36,0x96,0x35,0x19,0x0f,0x09,0x05,0x03,0x0f,0xaa,0xa1,0x93,0x94,0x95,0xa9,0x1f,0x2e,0xc8,0xef,0xb8,0x98,0x93,0x9c,0xd8,0x24,0x1c,0x2d -,0x27,0xbd,0xab,0x58,0xae,0xcb,0x4e,0x39,0x9e,0x81,0x84,0x8b,0x8b,0x92,0x99,0x4a,0x4f,0x8a,0x8b,0x8d,0x8f,0x9d,0xaa,0x13,0x06,0x0a,0x0a,0x0e,0x28,0xb0,0x9f,0x3a -,0x19,0x3b,0x40,0x56,0xb0,0x96,0x8d,0x99,0x98,0x8b,0x89,0x93,0x89,0x80,0x87,0x8d,0x9b,0x9a,0xa7,0x1c,0xae,0x8c,0x9a,0xb6,0xbc,0xa4,0x38,0x09,0x0e,0x0f,0x0a,0x09 -,0x0c,0x28,0x14,0x05,0x03,0x02,0x01,0x00,0x01,0x02,0x04,0x02,0x05,0x0a,0x08,0x06,0x4a,0x8c,0x40,0x2a,0x37,0xd9,0x3d,0x14,0xb8,0x8e,0x8f,0x9a,0x9e,0xa4,0x23,0x0d -,0x23,0xae,0xb4,0x9b,0x86,0x81,0x83,0x86,0x85,0x87,0x8a,0x98,0x91,0x89,0x88,0x94,0x9e,0x9a,0x3d,0x19,0xf8,0x8f,0xad,0xaf,0xa9,0xa0,0xa7,0x3a,0x90,0x88,0x8a,0x89 -,0x8d,0x8b,0xa7,0x1c,0x1d,0x20,0x25,0x29,0xb1,0xa6,0x29,0x10,0x0b,0x04,0x07,0x0b,0x10,0x1a,0x18,0x0f,0x0f,0x0f,0x13,0x0e,0x1d,0x9c,0x31,0x25,0x2a,0x15,0x17,0x0e -,0x11,0x32,0x1f,0x1b,0x39,0xf6,0x24,0x0f,0x10,0x18,0x1b,0x37,0xa1,0x94,0x93,0xb6,0xb4,0xaf,0xe4,0xc3,0xbc,0xa0,0xaa,0xbf,0x2d,0x1b,0x2b,0x35,0x1e,0xae,0x8f,0xa9 -,0xa2,0x9c,0x9a,0x94,0x93,0x89,0x89,0x8d,0x8c,0x8a,0x8a,0x9a,0xce,0x3e,0x1e,0x0c,0x07,0x0b,0x16,0x14,0x16,0x24,0x17,0x14,0x18,0x51,0x95,0x91,0x8c,0x8c,0x93,0x8c -,0x97,0xa3,0x88,0x81,0x8a,0x8d,0x8b,0x8e,0xa7,0x29,0xbd,0x92,0x9d,0xad,0x9c,0x91,0x9c,0x2a,0x1d,0x11,0x09,0x0a,0x0d,0x16,0x15,0x09,0x04,0x02,0x00,0x01,0x02,0x07 -,0x04,0x05,0x08,0x04,0x06,0x0a,0x07,0x16,0x9d,0x9d,0xbc,0x37,0x27,0x16,0x0e,0x26,0x9e,0x96,0x97,0x94,0x94,0xaa,0x1f,0x3f,0xa6,0xa9,0x99,0x8c,0x8d,0x8c,0x8d,0x89 -,0x86,0x8d,0x8d,0x8b,0x8c,0x8b,0x92,0x97,0x9f,0xae,0x9f,0xc9,0x2a,0xa2,0x8c,0xaa,0xda,0xab,0xaf,0xa0,0xc2,0x9e,0x8e,0x91,0x92,0x95,0x91,0x97,0xac,0xad,0xc7,0x31 -,0x29,0x1f,0x24,0x1e,0x1a,0x18,0x11,0x06,0x11,0x0b,0x0c,0x0e,0x05,0x0e,0x03,0x0b,0x08,0x04,0x0c,0x0d,0x9f,0x9d,0x25,0xac,0xac,0x14,0x21,0x8d,0x95,0xa8,0x82,0x8e -,0x8b,0x8a,0x18,0x96,0x89,0x97,0x92,0x8c,0xa9,0xd3,0x44,0x15,0x09,0x08,0x0c,0x06,0x0d,0x09,0x12,0x0b,0x0c,0x0f,0x26,0x3d,0x14,0xb3,0x9d,0xbf,0xbb,0x95,0x8b,0x88 -,0x8d,0x8a,0x8c,0x94,0x93,0x91,0x8e,0x92,0x90,0x9c,0x92,0x90,0x90,0x8d,0x93,0x9a,0x9b,0x98,0xa4,0x4c,0x22,0x2c,0x34,0x3d,0x1f,0x18,0x13,0x0c,0x13,0x0a,0x06,0x0b -,0x13,0x26,0x11,0x0d,0x0d,0x01,0x00,0x04,0x0d,0x13,0x28,0xa5,0xa8,0xc8,0x1e,0x4e,0xb4,0xa8,0x98,0x8b,0x84,0x81,0x84,0x82,0x86,0x88,0x89,0x8b,0x89,0x91,0x87,0x8c -,0xa1,0xc9,0x99,0x20,0x1e,0xa2,0xce,0x1a,0x0a,0x0b,0x09,0x05,0x06,0x09,0x0c,0x09,0x06,0x0e,0x0a,0x07,0x06,0x0b,0x13,0x14,0x2a,0xab,0x91,0x95,0xa3,0x94,0xb4,0xba -,0xa4,0xa4,0xaf,0x40,0x33,0x2b,0x10,0x1e,0x31,0x31,0xa3,0xa7,0x8d,0x96,0x8f,0x83,0x88,0x87,0x8e,0x93,0x88,0x87,0x8f,0x8e,0x96,0x9d,0xd0,0xd0,0xb4,0x16,0x0d,0x0c -,0x13,0x18,0x1a,0x15,0x1e,0x15,0x18,0x0e,0x11,0x0c,0x0c,0x16,0x12,0xce,0x2a,0xab,0xa9,0x8e,0x83,0x8d,0x8a,0x88,0x84,0x88,0x9a,0x8d,0x88,0x8a,0x86,0x85,0x8b,0x97 -,0xb5,0x3f,0x2f,0x27,0x0f,0x23,0x1a,0x19,0x28,0x18,0x21,0x12,0x14,0x0b,0x0b,0x0a,0x0a,0x0b,0x1a,0x11,0x1c,0x45,0xae,0xa6,0xcd,0x6b,0x34,0x35,0x1d,0x19,0x16,0x1a -,0x10,0x1d,0x0d,0x0b,0x0b,0x0a,0x0a,0x02,0x08,0x07,0x1e,0x47,0x26,0x1d,0x48,0x9a,0xa8,0x9c,0x9d,0x97,0x86,0x8e,0x92,0x89,0x8f,0x8b,0x90,0x8d,0x8b,0x9e,0x96,0x8e -,0x97,0x2d,0xca,0x1a,0x1c,0x2d,0x4a,0x9a,0x17,0xec,0xa7,0xb3,0x9b,0xa2,0x90,0x8d,0x8e,0x93,0x8e,0x89,0x9d,0x96,0x97,0x97,0x8e,0x9b,0xb1,0x23,0x45,0x1e,0x1f,0x0c -,0xa3,0xae,0x19,0xb1,0x0e,0x14,0x0b,0x08,0x0b,0x0f,0x0b,0x1f,0x24,0x25,0xc1,0xaa,0x8f,0x88,0x8d,0x8b,0x83,0x87,0x8c,0x9d,0x8f,0xd1,0x29,0x44,0x08,0x07,0x03,0x00 -,0x02,0x00,0x02,0x00,0x0b,0x0a,0x0a,0x1e,0x26,0x0d,0x0e,0x22,0x2d,0xb2,0xa4,0x8b,0x8c,0x8e,0x8f,0x9a,0x90,0x9b,0x8d,0x84,0x9d,0x95,0x84,0x86,0x8e,0x89,0x8a,0x8f -,0x9f,0x9c,0xbd,0xd0,0xb3,0xab,0xb9,0x5e,0x8d,0x8f,0x8e,0x9f,0x96,0x3f,0xc5,0xad,0xa6,0xab,0xa0,0x9a,0x34,0xc1,0x23,0x1a,0x0a,0x06,0x0b,0x12,0x0d,0x0c,0x0f,0x11 -,0x08,0x02,0x08,0x05,0x0e,0x0b,0x21,0x9e,0x4e,0x9d,0x9d,0x86,0x86,0x89,0x80,0x82,0x80,0x84,0x82,0x82,0x81,0x90,0x9e,0xa6,0x3d,0x21,0x0e,0x06,0x05,0x07,0x05,0x02 -,0x07,0x03,0x04,0x05,0x05,0x07,0x03,0x09,0x0a,0x0d,0x0e,0x14,0x0a,0x17,0x3b,0x19,0x24,0xbe,0x33,0x37,0xa1,0x9d,0x8f,0x8f,0x89,0x97,0x93,0x8c,0x91,0x8c,0x8e,0x8a -,0x89,0x8b,0x87,0x8e,0x86,0x8b,0x90,0x8c,0x93,0x8b,0x8e,0x8a,0x94,0x95,0x9f,0x9c,0x8e,0xa1,0xc1,0xa8,0x24,0x16,0x1a,0x16,0x16,0x0f,0x12,0x07,0x0b,0x07,0x0c,0x0a -,0x03,0x10,0x0a,0x0f,0x37,0xa2,0x9e,0xa7,0x98,0x89,0x87,0x88,0x87,0x8d,0x84,0x86,0x92,0x97,0x8a,0x58,0x1b,0x45,0x14,0x0f,0x0e,0x07,0x0b,0x07,0x10,0x1b,0x10,0x15 -,0x19,0x2b,0x13,0x2b,0x33,0x27,0x27,0xbc,0x1f,0x25,0x16,0x21,0x1b,0x0b,0x15,0x18,0x18,0x0b,0x13,0x1f,0xaf,0x16,0x23,0xce,0x1a,0x12,0x44,0xb9,0xda,0x4c,0x95,0x91 -,0xb2,0x8b,0x8b,0x96,0x96,0x89,0x89,0x89,0x86,0x89,0x8b,0x88,0x9b,0x91,0x8d,0xb7,0x9f,0xb6,0x3e,0x4b,0x3d,0xbe,0x22,0x13,0x35,0x4e,0x10,0x0b,0x0c,0x0e,0x1a,0xc8 -,0x8e,0x9a,0x94,0x89,0x86,0x81,0x8e,0x8b,0x83,0x82,0x86,0x86,0x93,0xab,0x26,0x0e,0x0c,0x02,0x06,0x02,0x02,0x02,0x00,0x0b,0x09,0x00,0x10,0x0c,0x09,0x0c,0x0f,0x0f -,0x1c,0x6d,0x5c,0xa0,0x4c,0xa6,0x9b,0xa5,0x44,0x39,0xab,0x9c,0x8a,0x93,0x91,0x8f,0x9b,0xcf,0x56,0x2d,0x4e,0xa9,0x2d,0x1d,0x9a,0x8f,0x16,0x9a,0x97,0xc1,0xbc,0x9b -,0xa2,0xb7,0x99,0x91,0x97,0x99,0x8c,0xb3,0x9e,0xa0,0x28,0x16,0x13,0x1e,0xac,0x1f,0x52,0x25,0x0a,0x12,0x08,0x0d,0x0b,0x0a,0x0f,0x2d,0x8f,0x99,0x9e,0x85,0x87,0x87 -,0x84,0x86,0x82,0x83,0x82,0x82,0x83,0x86,0x88,0x8d,0xa7,0x3e,0x0b,0x09,0x02,0x03,0x04,0x01,0x07,0x07,0x03,0x02,0x02,0x02,0x04,0x01,0x0a,0x0a,0x1a,0x18,0x28,0xe8 -,0x1a,0x1f,0x1e,0xe4,0x67,0xcd,0xa5,0x8e,0xa6,0x92,0x87,0x9b,0x8f,0x93,0x92,0xb3,0xb0,0xaa,0x97,0xa0,0x9c,0x8d,0x9b,0x97,0xaa,0xa6,0x9e,0xa6,0x55,0x8d,0x89,0x91 -,0x86,0x8c,0x93,0x99,0xa4,0xad,0x1b,0x27,0x9b,0x26,0x1f,0xd3,0x1b,0x0f,0x14,0x0e,0x0c,0x06,0x06,0x0c,0x0f,0x16,0x0f,0xae,0xac,0x75,0xbe,0x92,0x88,0x90,0x8b,0x87 -,0x83,0x86,0x83,0x81,0x89,0x8f,0x90,0xc7,0x20,0x17,0x0e,0x12,0x0b,0x0f,0x13,0x0a,0x0c,0x08,0x08,0x03,0x0c,0x0f,0x0e,0x1b,0x18,0x27,0x11,0x1d,0x15,0x0a,0x1d,0x19 -,0x0a,0x1b,0x36,0x15,0xd6,0x91,0x3f,0x26,0x9b,0x9e,0x1e,0x41,0xc8,0xac,0xa3,0x93,0x88,0x94,0x96,0xb4,0x8c,0x8e,0xad,0x8e,0x93,0x89,0x87,0x91,0x8d,0x9c,0x99,0xac -,0xc0,0xbe,0xce,0x31,0xa9,0xb4,0x1c,0xa6,0x26,0x2f,0x1c,0x14,0x0f,0x08,0x12,0x18,0x0d,0x23,0xad,0x9f,0x93,0xaf,0x95,0x8e,0x8e,0x8d,0x85,0x82,0x83,0x85,0x81,0x8a -,0xa7,0xb3,0x37,0x23,0x0e,0x04,0x05,0x0e,0x08,0x06,0x13,0x0a,0x01,0x06,0x04,0x05,0x07,0x0c,0x17,0x10,0x23,0xb4,0x1c,0x19,0x2c,0x1d,0x55,0xb6,0xce,0xa7,0x9b,0x9a -,0x9e,0x92,0x90,0x9a,0x3e,0xae,0xa4,0x65,0xd1,0xb9,0x8d,0x9c,0xa5,0x8f,0x98,0xaa,0xc9,0xb5,0xba,0x9f,0x94,0x95,0x90,0x99,0x89,0x99,0xaa,0xa0,0xbb,0xb0,0xef,0xab -,0xa5,0xcf,0x22,0x4d,0x34,0x18,0x0b,0x0c,0x05,0x07,0x0c,0x0e,0x0c,0x22,0x9e,0xcd,0x93,0x8d,0x90,0x8a,0x88,0x86,0x85,0x82,0x83,0x85,0x85,0x88,0x96,0xbb,0xb4,0x1e -,0x13,0x08,0x0a,0x0b,0x02,0x07,0x0b,0x08,0x02,0x05,0x06,0x05,0x02,0x09,0x0f,0x0f,0x11,0x31,0x2d,0x11,0x2a,0x5d,0x1a,0x2d,0xb1,0xb0,0xa8,0x9a,0x90,0x9a,0xa9,0x9a -,0x94,0xaf,0xaf,0xbf,0xad,0x99,0xa4,0x91,0x8f,0x94,0x9f,0xc6,0xa4,0x9d,0xa5,0x9a,0x9e,0x9b,0x8f,0x95,0x93,0x95,0xac,0xc3,0xa3,0x9e,0xca,0xe7,0xad,0x37,0x3e,0xce -,0x23,0x0f,0x11,0x16,0x0c,0x0a,0x0b,0x0e,0x11,0x35,0xab,0xa9,0xa5,0x9c,0x97,0x91,0x8b,0x88,0x84,0x84,0x83,0x84,0x84,0x90,0xa1,0xa3,0xb5,0x1c,0x0d,0x19,0x0d,0x09 -,0x0f,0x0d,0x0a,0x07,0x0b,0x09,0x06,0x09,0x0b,0x15,0x1e,0x19,0x24,0x21,0x2b,0x25,0x1d,0x25,0x1c,0x1d,0x34,0xc7,0xc7,0xaf,0xab,0xb8,0x35,0xbb,0xae,0x32,0x3f,0xac -,0xac,0xb5,0x97,0x93,0x9c,0x9a,0x9a,0x9d,0x99,0x95,0x9a,0xa5,0x95,0x8f,0x8d,0x8a,0x8e,0x9d,0xa4,0x9d,0xa9,0x58,0x35,0x5f,0x71,0xe4,0x41,0x1f,0x15,0x12,0x11,0x0a -,0x08,0x0b,0x0c,0x14,0x20,0xbe,0xab,0xb7,0x9f,0x9c,0x8c,0x88,0x87,0x84,0x83,0x82,0x85,0x82,0x85,0x8d,0x9c,0xa1,0xd9,0x16,0x0b,0x0c,0x0d,0x09,0x09,0x07,0x05,0x05 -,0x04,0x04,0x04,0x05,0x07,0x0c,0x1b,0x1b,0x19,0x14,0x14,0x1f,0x19,0x1f,0x37,0x46,0xac,0xab,0xa2,0x95,0x93,0x99,0xb4,0xaf,0x9f,0xaa,0xaf,0xb1,0xa5,0x9f,0x9b,0x95 -,0x9f,0xac,0xaf,0x9f,0xab,0xd3,0xab,0x9a,0x92,0x8e,0x8f,0xac,0x9d,0xa0,0xa6,0xa0,0xbb,0xb1,0xc9,0xac,0xa5,0xb7,0xce,0x52,0x22,0x15,0x14,0x14,0x0c,0x0e,0x17,0x18 -,0x28,0xb2,0xa7,0xa7,0x9f,0x9d,0x9a,0x91,0x87,0x86,0x85,0x84,0x85,0x8b,0x92,0x9e,0xb8,0x2d,0x18,0x1a,0x10,0x0d,0x0a,0x04,0x03,0x09,0xa7,0xc9,0x00,0x27,0x8e,0x1b -,0x53,0x1b,0x1c,0x18,0x11,0x15,0x0e,0x18,0x00,0x06,0x02,0x01,0x04,0x00,0x05,0x01,0x02,0x0a,0x0d,0x0c,0x0e,0x18,0x2e,0x28,0x26,0xaa,0xa7,0xa4,0x92,0x98,0x97,0x95 -,0x82,0x80,0x90,0x88,0x80,0x80,0x80,0x81,0x80,0x81,0x82,0x81,0x80,0x80,0x81,0x80,0x81,0x82,0x88,0x8a,0x89,0x8a,0x8b,0x95,0x9b,0x97,0x98,0xb1,0xb7,0xb8,0x42,0x19 -,0x0f,0x0c,0x06,0x07,0x03,0x02,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x01,0x02,0x02,0x05,0x03,0x02,0x02,0x05,0x08,0x05,0x0a -,0x11,0x1e,0x1c,0x1f,0xbe,0xa7,0x93,0x8f,0x88,0x82,0x85,0x87,0x89,0x86,0x84,0x82,0x82,0x81,0x81,0x82,0x83,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 -,0x80,0x80,0x81,0x82,0x82,0x84,0x84,0x85,0x89,0x8d,0x88,0x87,0x8a,0x86,0x8d,0x8f,0x8d,0x95,0x8d,0x8c,0x8d,0x96,0xbd,0xc5,0x26,0x16,0x18,0x0b,0x0b,0x05,0x02,0x03 -,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x01,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x02,0x01,0x03,0x03,0x07,0x0b,0x0c -,0x0e,0x10,0x1d,0x24,0x2b,0x3b,0x27,0x27,0x1c,0x1b,0x27,0x20,0x38,0x37,0x3e,0xd5,0xa7,0x98,0x93,0x88,0x86,0x87,0x85,0x84,0x83,0x81,0x82,0x81,0x80,0x81,0x82,0x83 -,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x83,0x84,0x86,0x89,0x8e,0x97,0x9f,0xa4,0xac,0x43,0x48,0x3f,0x36,0x2f,0x1e -,0x10,0x10,0x1b,0x15,0x16,0x10,0x11,0x16,0x16,0x24,0x2e,0x5c,0xbd,0xa3,0x9b,0x9a,0x93,0x8b,0x87,0x89,0x87,0x89,0x86,0x89,0x8f,0x99,0x9f,0x9f,0xac,0x9f,0x98,0x91 -,0x9e,0xa7,0xae,0xb0,0xa8,0xa9,0xa0,0xaf,0x3d,0x2d,0x1b,0x10,0x0f,0x08,0x05,0x04,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00 -,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x02,0x04,0x07,0x09,0x07,0x06,0x0a,0x09,0x0b,0x0d,0x0f,0x16,0x0f,0x0f,0x16,0x20,0x42,0xbf,0x9f -,0x90,0x90,0x89,0x86,0x83,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81 -,0x82,0x83,0x84,0x84,0x85,0x87,0x89,0x88,0x85,0x83,0x84,0x85,0x86,0x87,0x85,0x84,0x81,0x84,0x84,0x83,0x85,0x84,0x87,0x86,0x86,0x8e,0x94,0x9f,0xc4,0xd9,0x27,0x17 -,0x0c,0x05,0x05,0x02,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x05,0x04,0x05,0x05,0x06 -,0x09,0x0a,0x0f,0x0e,0x0f,0x11,0x0b,0x0c,0x14,0x1f,0x2f,0x5b,0xb5,0xa8,0x9b,0x93,0x8b,0x87,0x87,0x87,0x89,0x87,0x87,0x89,0x88,0x8a,0x8a,0x8e,0x95,0x8d,0x8f,0x8d -,0x8b,0x91,0x8e,0x8f,0x91,0x8b,0x89,0x8a,0x8e,0x90,0x8f,0x94,0x97,0x9b,0xa7,0xae,0xd4,0x33,0x2c,0x2f,0x31,0x2a,0x26,0x2f,0x21,0x1e,0x2b,0x37,0xac,0x45,0x27,0x43 -,0x31,0x4a,0x2d,0x24,0x29,0x1d,0x17,0x11,0x12,0x1d,0x1e,0x1f,0x28,0x1f,0x21,0x23,0x38,0xc0,0x3e,0x37,0x35,0x2e,0x29,0x21,0x20,0x2b,0x22,0x22,0x25,0x32,0xb2,0xbd -,0xa9,0xa3,0xad,0x9f,0x9c,0x9a,0x92,0x9a,0xa3,0xbf,0x36,0x3d,0x2b,0x3c,0xfb,0x3d,0x3e,0x2c,0x33,0x4c,0xb4,0x9e,0x9d,0x92,0x8d,0x8b,0x85,0x84,0x84,0x83,0x84,0x82 -,0x81,0x82,0x80,0x81,0x81,0x84,0x87,0x86,0x89,0x8a,0x8e,0x98,0x9a,0xc5,0x37,0x42,0x29,0x18,0x0b,0x08,0x07,0x03,0x03,0x02,0x02,0x01,0x00,0x01,0x01,0x01,0x02,0x02 -,0x03,0x05,0x04,0x0d,0x13,0x14,0x1f,0x1b,0x2f,0x35,0x3f,0xcd,0x37,0x44,0x37,0x3d,0xb1,0xae,0xa6,0xa2,0xae,0xa6,0xa8,0x99,0x8d,0x8f,0x91,0x97,0x93,0x8f,0x96,0x8f -,0x8f,0x91,0x8e,0x9a,0x93,0x8e,0x97,0x8f,0x91,0x95,0x91,0x99,0x8f,0x8f,0x9e,0xa6,0xdb,0xeb,0x79,0x34,0x32,0x1e,0x1d,0x19,0x0c,0x0d,0x0e,0x12,0x12,0x0b,0x0f,0x0f -,0x0c,0x16,0x19,0x20,0x1a,0x16,0x29,0x1b,0x20,0x28,0x1b,0x1d,0x19,0x19,0x17,0x14,0x21,0x1e,0x1c,0x21,0x1b,0x2e,0x2e,0x3e,0xba,0x53,0x55,0x51,0x48,0xb7,0x5c,0x3b -,0xd5,0x2c,0x2b,0x22,0x2f,0xb9,0xbb,0x9f,0x9d,0x9e,0x93,0x92,0x8b,0x89,0x8b,0x89,0x8f,0x97,0x99,0xa5,0xae,0x3f,0x22,0x1e,0x10,0x0f,0x0f,0x0d,0x0f,0x10,0x0f,0x15 -,0x19,0x2a,0xcb,0xc4,0xad,0xb2,0xa4,0x92,0x8f,0x8c,0x8a,0x8b,0x88,0x8b,0x8a,0x87,0x86,0x84,0x85,0x86,0x87,0x8b,0x8c,0x8c,0x8e,0x97,0xb2,0x49,0x2c,0x16,0x0e,0x0a -,0x07,0x05,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x06,0x07,0x0d,0x0e,0x0d,0x0f,0x11,0x19,0x1f,0x28,0x2c,0x2d,0x2c,0x24,0x2c,0x49,0xd8,0xae,0x9e,0x97,0x97 -,0x9a,0x92,0x8c,0x8b,0x8c,0x8e,0x8f,0x8d,0x8e,0x8d,0x8d,0x90,0x8f,0x94,0x94,0x90,0x8f,0x8d,0x8d,0x8d,0x8e,0x8d,0x8c,0x8a,0x88,0x8b,0x8f,0x96,0x9f,0xa7,0xab,0xbc -,0x45,0x27,0x1b,0x19,0x19,0x18,0x17,0x13,0x12,0x14,0x15,0x19,0x22,0x28,0x1c,0x15,0x14,0x14,0x17,0x12,0x10,0x12,0x0f,0x0d,0x0d,0x10,0x14,0x15,0x18,0x17,0x16,0x1b -,0x2c,0x38,0x2a,0x29,0x2d,0x2f,0x2d,0x2d,0x29,0x2b,0x21,0x1a,0x1e,0x33,0xc8,0xbe,0xb4,0xa9,0xa2,0xa4,0x9f,0x94,0x8f,0x8f,0x90,0x8e,0x8d,0x8e,0x91,0x96,0x9b,0xa9 -,0xb9,0xb8,0xc5,0xcf,0x5b,0x35,0x2b,0x25,0x2e,0x4a,0x48,0x3a,0x3c,0x43,0x46,0x63,0xc1,0xba,0xac,0xa2,0xa3,0x9f,0x98,0x92,0x8e,0x8b,0x8b,0x8a,0x87,0x85,0x84,0x84 -,0x87,0x89,0x8e,0x90,0x91,0x99,0xab,0x5c,0x2a,0x17,0x0d,0x0b,0x08,0x07,0x07,0x06,0x05,0x04,0x04,0x05,0x08,0x07,0x04,0x05,0x07,0x08,0x0b,0x0b,0x09,0x0a,0x0a,0x0a -,0x0c,0x10,0x1a,0x1c,0x26,0x33,0x3c,0xc0,0xa4,0x9b,0x95,0x93,0x94,0x96,0x97,0x94,0x93,0x93,0x91,0x92,0x95,0x97,0x93,0x90,0x90,0x8e,0x8f,0x8d,0x8b,0x89,0x87,0x86 -,0x88,0x8c,0x8d,0x8d,0x8e,0x8d,0x91,0x96,0x9f,0xc1,0x3b,0x2b,0x32,0x37,0x3d,0x38,0x2c,0x2b,0x27,0x22,0x34,0x2b,0x24,0x26,0x1f,0x1f,0x1c,0x1b,0x16,0x0f,0x0f,0x0e -,0x0d,0x0f,0x11,0x17,0x13,0x11,0x16,0x18,0x1a,0x1f,0x2d,0x29,0x1f,0x1c,0x1a,0x1e,0x23,0x20,0x24,0x2a,0x1f,0x1a,0x1c,0x23,0x33,0x2e,0x3f,0xc3,0xb7,0xad,0xa5,0x96 -,0x95,0x9c,0x99,0x98,0x97,0x97,0x95,0x97,0x9a,0x9d,0xab,0xab,0xab,0xa8,0xae,0xbc,0xc8,0x66,0x58,0x4b,0xdb,0xb0,0xe8,0x34,0x2f,0x2b,0x2f,0x33,0x34,0x43,0x3e,0x3d -,0xd8,0xa8,0x9a,0x90,0x8e,0x8e,0x8c,0x8a,0x88,0x86,0x84,0x84,0x85,0x86,0x89,0x8e,0x8e,0x94,0xa2,0xb8,0x2e,0x1c,0x19,0x13,0x0e,0x0c,0x08,0x08,0x08,0x07,0x08,0x09 -,0x0a,0x07,0x06,0x06,0x05,0x06,0x05,0x07,0x07,0x06,0x06,0x09,0x0c,0x0e,0x12,0x19,0x1d,0x28,0x44,0xb8,0xa6,0xa9,0xa6,0xa0,0x9b,0x9b,0x9c,0x9d,0x9d,0xa6,0xa6,0x9e -,0x99,0x94,0x93,0x93,0x92,0x91,0x8d,0x89,0x89,0x88,0x88,0x89,0x89,0x89,0x89,0x8a,0x8f,0x93,0x9d,0xa1,0x9f,0xa0,0xa3,0xa5,0xad,0xb0,0xab,0xae,0xab,0xb5,0xbd,0x49 -,0x3d,0x3e,0x31,0x2a,0x22,0x1a,0x11,0x0e,0x0f,0x12,0x13,0x14,0x12,0x14,0x16,0x15,0x1e,0x2a,0x20,0x1c,0x18,0x15,0x16,0x14,0x14,0x15,0x11,0x0f,0x0d,0x0c,0x0e,0x12 -,0x16,0x18,0x1f,0x22,0x2f,0x4b,0xb7,0xa7,0xb3,0xb7,0xb0,0xa9,0x9e,0x9b,0x9e,0x9f,0xa0,0xa9,0xaf,0xa8,0x9d,0x96,0x98,0x9a,0x98,0x98,0x9c,0x9a,0x97,0x9c,0xa4,0xb3 -,0xd8,0x5a,0x3a,0x2c,0x23,0x1c,0x1e,0x1a,0x19,0x24,0x3c,0xc8,0xaf,0xa5,0x99,0x90,0x8a,0x87,0x85,0x84,0x86,0x86,0x86,0x86,0x88,0x8a,0x8d,0x94,0x9d,0xbb,0x3d,0x2a -,0x1c,0x1c,0x12,0x10,0x0e,0x0f,0x0f,0x0d,0x0c,0x0b,0x0c,0x09,0x0d,0x0d,0x0f,0x0c,0x0b,0x0b,0x0d,0x0c,0x0e,0x15,0x17,0x1f,0x1f,0x26,0x31,0x55,0xc8,0xae,0xae,0xad -,0xad,0xa9,0xaf,0xb3,0xab,0xb9,0xc3,0xc4,0xbe,0xc7,0xc6,0xbe,0xae,0xba,0xb8,0xa9,0xa9,0x9e,0x9f,0x9e,0xa1,0xa7,0xaa,0xa8,0xa5,0xa9,0xa7,0xaa,0xb0,0xb9,0xbd,0xc5 -,0xbd,0xb8,0xb6,0xb2,0xae,0xb7,0xaf,0xaa,0xa9,0xab,0xb9,0xb5,0xb1,0xb3,0xb4,0xc5,0xcc,0xc4,0xce,0xc9,0xf1,0xcc,0xbe,0xbe,0xc5,0xcc,0xc1,0xbd,0xb4,0xbe,0xbd,0xbc -,0xd9,0x3f,0x30,0x34,0x2a,0x29,0x26,0x22,0x27,0x1f,0x23,0x21,0x21,0x25,0x20,0x24,0x24,0x24,0x2b,0x2f,0x2a,0x29,0x2a,0x2d,0x2f,0x2c,0x2d,0x2f,0x2a,0x26,0x29,0x2c -,0x32,0x37,0x34,0x35,0x33,0x31,0x2e,0x34,0x3f,0x35,0x35,0x46,0x5d,0x5d,0x44,0x54,0x51,0x54,0xf0,0x75,0xba,0xb8,0xb7,0xad,0xa6,0xa1,0x9e,0x99,0x99,0x98,0x95,0x96 -,0x94,0x95,0x92,0x90,0x90,0x91,0x92,0x94,0x98,0x9a,0x9d,0x9b,0x9e,0xa0,0x9e,0x9f,0xa4,0xae,0xb3,0xc7,0xdc,0x4e,0x41,0x4b,0x39,0x29,0x27,0x28,0x1e,0x1e,0x1f,0x1d -,0x1f,0x1b,0x1b,0x1d,0x1c,0x1b,0x1b,0x1c,0x1c,0x1d,0x1a,0x1f,0x21,0x1d,0x1d,0x1f,0x1e,0x1f,0x20,0x22,0x2c,0x29,0x27,0x2d,0x2f,0x2e,0x2f,0x2e,0x38,0x38,0x3b,0x42 -,0x49,0x6e,0x46,0x3b,0x3f,0x40,0x50,0xee,0xce,0xce,0xcb,0xc9,0xdb,0xcb,0xb5,0xaf,0xaa,0xa2,0xa2,0x9f,0x9e,0x9f,0xa0,0x9d,0x9d,0x9c,0x97,0x98,0x97,0x98,0x9b,0x9c -,0x9e,0x9d,0x9c,0x9c,0x9a,0x9b,0x9d,0xa1,0xaa,0xb2,0xbd,0xc8,0xbd,0xcb,0x68,0x42,0x31,0x29,0x28,0x23,0x24,0x28,0x23,0x27,0x21,0x1e,0x1e,0x19,0x1c,0x1c,0x1c,0x20 -,0x22,0x22,0x1f,0x1d,0x1c,0x1d,0x1d,0x22,0x27,0x2a,0x2d,0x29,0x28,0x21,0x1e,0x24,0x2a,0x2a,0x2d,0x34,0x34,0x2f,0x34,0x3a,0x44,0xdd,0xbe,0xb3,0xaf,0xaf,0xb3,0xb4 -,0xa9,0xab,0xa5,0x9f,0xa0,0x9f,0x9e,0x9c,0x9f,0x9e,0x9b,0x9b,0x9a,0x99,0x9a,0x9c,0x9c,0x9d,0x9e,0xa2,0xa0,0x9e,0xa1,0xa7,0xab,0xaa,0xb0,0xb8,0xaf,0xb1,0xbb,0xc4 -,0xcd,0xcd,0x64,0x49,0x78,0x45,0x3f,0x41,0x35,0x44,0x30,0x2f,0x3d,0x36,0x34,0x2e,0x31,0x2b,0x2d,0x37,0x2b,0x2c,0x2f,0x36,0x2c,0x22,0x37,0x2c,0x26,0x31,0x2e,0x39 -,0x2b,0x32,0x37,0x2a,0x2d,0x2a,0x47,0x34,0x2d,0x4e,0x2b,0x37,0x34,0x2c,0x40,0x39,0x44,0x2d,0x34,0x46,0x2b,0x47,0x44,0x31,0x60,0x3a,0x3f,0xcf,0x41,0xd7,0xba,0xbb -,0xc5,0xbe,0xad,0xcb,0xac,0xa9,0xbd,0xa9,0xad,0xa8,0xaf,0xad,0x9e,0xaf,0xa9,0xa3,0xab,0xac,0xb4,0xaa,0xbe,0xb5,0xba,0xc1,0xb6,0x3f,0xc8,0xdd,0x38,0x5b,0x3f,0x3d -,0x42,0x40,0x59,0xdd,0x4d,0x34,0x3c,0x37,0x32,0x2f,0xee,0x4b,0x49,0x58,0x35,0x46,0x34,0x50,0x3d,0x42,0x68,0x33,0x36,0x34,0x2a,0x33,0x30,0x30,0x39,0x2e,0x31,0x32 -,0x28,0x35,0x3c,0x2b,0x4e,0x3c,0x3e,0xd3,0x40,0xee,0x33,0xd1,0xc8,0x39,0xa9,0x41,0xb2,0xaa,0xe3,0xa7,0x6c,0xac,0xae,0xec,0xa5,0xbd,0xad,0xaf,0xc8,0xa4,0x4f,0xb5 -,0xaf,0xaf,0xb0,0xc6,0xac,0xbc,0xa8,0x72,0xaa,0xab,0xfc,0xab,0xb1,0xaf,0xc6,0xaf,0xa5,0x4e,0xae,0xb7,0xc6,0xb3,0xc8,0xac,0xe7,0xac,0x65,0x64,0xb2,0x39,0xcf,0x3a -,0x4e,0x3d,0x2e,0xe1,0x2a,0x3d,0x57,0x45,0x2c,0x39,0x65,0x29,0x34,0x34,0x22,0x2f,0x45,0x29,0x39,0x36,0x35,0x3b,0x2f,0x2a,0x33,0x36,0x39,0x2f,0x5e,0x3b,0x2a,0x64 -,0x2d,0x38,0x2c,0x38,0x3e,0x3f,0x31,0x5b,0xba,0x38,0xc1,0xca,0x62,0xcc,0xab,0xfd,0xc0,0xaf,0xc0,0xbe,0xbc,0xac,0xee,0xa1,0xa4,0x60,0xa8,0xaf,0xb2,0xce,0xb6,0xa6 -,0xcf,0xab,0xa7,0x5c,0xb3,0xb7,0x59,0xc7,0xac,0xd5,0xde,0xae,0x76,0xb2,0x67,0xc9,0xd2,0x59,0xad,0x2f,0xfc,0xac,0x26,0xc9,0x35,0xd5,0x34,0x46,0x41,0x25,0xac,0x1d -,0x3f,0x5e,0x2b,0xf2,0x34,0x29,0xae,0x1d,0x33,0x3e,0x20,0x56,0x28,0x5c,0x30,0x36,0x58,0x2f,0x2c,0x49,0x2c,0xda,0xda,0x67,0x44,0xcc,0xcf,0x5b,0x42,0xde,0xa5,0x2d -,0xb2,0xbd,0xc4,0xcf,0xb4,0xaf,0x4a,0xa7,0xb9,0x5f,0xbd,0xb4,0xb9,0xc9,0xa8,0xc1,0xb8,0xa9,0x5c,0x9f,0xca,0x4a,0x9f,0xc9,0xd5,0xa3,0x54,0xa7,0xc4,0xc2,0xa6,0x2c -,0xa7,0xaa,0x2f,0xa6,0xc3,0xd4,0xb8,0x3e,0xae,0x37,0xd3,0xd6,0xc5,0x43,0x28,0xb6,0x2d,0x45,0x33,0x49,0x69,0x2e,0x48,0x35,0x45,0x1f,0x3a,0xdd,0x26,0x42,0x32,0x2a -,0x43,0x1b,0xce,0x2c,0x2c,0x68,0x23,0x40,0x32,0x47,0x3d,0x41,0x3a,0x41,0x2f,0x3e,0x42,0x55,0x33,0xa6,0x39,0xf7,0xba,0x29,0xa6,0x3d,0xae,0xb5,0xd3,0xad,0x3e,0xa3 -,0xb3,0x46,0xae,0xcd,0xb6,0x5c,0xb3,0xbc,0x4f,0xa2,0xc2,0xd6,0xa3,0xcd,0xb0,0xb8,0xb2,0xb6,0x6b,0xa6,0x3b,0xae,0xc5,0xc3,0xac,0x4e,0xbe,0x2d,0xaf,0x57,0x43,0xa7 -,0x4a,0x78,0xbd,0x38,0x3b,0x2e,0x68,0x54,0x2b,0xcf,0x2b,0x36,0x30,0x46,0x2a,0x28,0xb9,0x3b,0x1f,0x73,0x2e,0x23,0xd2,0x2b,0xc8,0x3b,0x40,0xbe,0x22,0xdc,0x37,0x39 -,0x72,0x45,0x47,0x45,0xb4,0x34,0x3f,0xfc,0x78,0x47,0xcd,0x4a,0xbc,0xca,0x3d,0xc4,0xb0,0x66,0x52,0xcb,0xaf,0xb2,0x5d,0xbd,0xb8,0xbd,0xc2,0xb3,0xd6,0xa4,0xd6,0xb1 -,0xae,0x51,0xaa,0xc9,0xc6,0xa3,0xfc,0xc8,0xac,0x37,0xa7,0xf7,0x3c,0xac,0x53,0xb1,0x63,0x3b,0xb5,0xc1,0x4e,0xcc,0xe8,0x4b,0x51,0x41,0x3a,0xce,0x3f,0xcb,0xc6,0x48 -,0x3e,0x39,0x5c,0x28,0xac,0x1e,0xab,0x3d,0x31,0x5d,0x24,0xb8,0x20,0xbf,0x27,0x4e,0xef,0x2a,0x54,0x73,0x21,0xae,0x4c,0x38,0xe3,0x69,0xeb,0x28,0xd0,0x3e,0xdf,0x48 -,0x67,0xbe,0xbe,0x2c,0xae,0x4e,0x48,0xb0,0x3c,0xa7,0xc4,0xc9,0xda,0xbb,0xc4,0x65,0xc5,0xae,0xaf,0x57,0xa9,0x5f,0xb3,0x36,0xb9,0xb9,0x45,0xa4,0x3b,0xae,0x43,0xb1 -,0x4d,0x41,0xad,0x36,0xac,0xd9,0xd0,0xf6,0x48,0xb2,0x48,0xd5,0x35,0xb4,0x51,0x46,0x3e,0x3e,0xbb,0x31,0x49,0x64,0xcc,0x2a,0xc8,0x77,0x3c,0x30,0xc9,0x3e,0x39,0xe2 -,0x52,0xd3,0x2b,0xc5,0x33,0x2f,0xce,0x39,0xca,0x38,0xd8,0xbf,0x34,0xb0,0x31,0x3e,0xbd,0x5c,0x45,0xd8,0xc8,0xe8,0xfb,0xc4,0x5e,0x59,0xae,0x6e,0xe5,0xb6,0xee,0xe1 -,0x7d,0x37,0xad,0x2a,0xc2,0xa5,0x2d,0xa8,0x55,0xb5,0x31,0xd4,0xa8,0x40,0xac,0x5c,0xbd,0xd4,0x56,0x5c,0x5d,0x47,0xad,0x49,0x3b,0xa8,0x2e,0x41,0xb3,0x55,0xd1,0xcf -,0xcb,0xb8,0x2e,0xc1,0x54,0x2b,0xa9,0x22,0xb3,0x42,0x40,0xb0,0x23,0xb9,0x32,0xdb,0xbc,0x71,0x32,0xbc,0x40,0x4f,0x27,0xbc,0xcd,0x2b,0xcf,0x69,0xb3,0x1e,0xba,0x49 -,0x37,0x3b,0xbe,0xca,0x56,0x48,0x5f,0xbd,0x30,0x3f,0xbe,0xbc,0x45,0xc2,0xbf,0xbc,0x2f,0xbc,0xc4,0x63,0x6f,0xdf,0xc0,0xdb,0x5d,0x3e,0xbb,0xbb,0x36,0xba,0xce,0x5d -,0xe1,0xe6,0xb7,0x3a,0xa1,0x37,0xc2,0xaf,0x31,0xd2,0xb3,0xca,0x6f,0xcc,0x3f,0xbf,0x67,0x5f,0xb9,0xf1,0x4f,0xb6,0x5c,0xd8,0xd8,0x2e,0xe2,0x3f,0xd3,0xc0,0x30,0x67 -,0x3c,0xcf,0x3d,0xf0,0x40,0xb4,0xbd,0x24,0xaf,0x2f,0x42,0xbe,0x28,0xa8,0x28,0x4d,0xa5,0x1b,0xad,0x78,0xca,0xc7,0x2f,0xaa,0xec,0x45,0x3d,0x45,0x40,0xfa,0xe6,0x3f -,0xc4,0x3b,0x55,0xce,0x2a,0xae,0x33,0xbd,0xb3,0x3e,0xb4,0x58,0xab,0x1f,0xac,0x58,0xe7,0x3c,0x7b,0xc5,0x65,0xf2,0x44,0xa6,0x2e,0xc8,0x36,0xa2,0x33,0x47,0xd0,0xb0 -,0x43,0x2f,0xa6,0xe8,0x29,0xb7,0xb6,0x2e,0xb9,0x4f,0xae,0x2f,0x51,0xba,0xb5,0xb9,0x24,0xdb,0xb3,0xcb,0x1a,0x1d,0x92,0x96,0xc1,0x15,0x13,0xb9,0x9c,0xc2,0x97,0xae -,0x12,0x06,0x16,0x99,0x90,0x93,0xab,0xce,0x1f,0x9c,0x26,0x2a,0x9e,0xa1,0xbb,0x1c,0x2d,0x0f,0x0b,0x24,0x94,0x9d,0x17,0x11,0xf0,0x8d,0x8b,0x3e,0x0e,0x49,0xa0,0xce -,0xa4,0x8c,0x8e,0x2d,0x1d,0x1b,0xab,0xae,0xa7,0xa0,0xbd,0xaa,0x0d,0x01,0x10,0xbd,0x3e,0xb8,0xa0,0xd2,0x25,0x4c,0x99,0x8f,0x96,0xaa,0xf4,0x3b,0xac,0x99,0x2e,0xbf -,0x9c,0x1c,0x0e,0x29,0xb1,0xa7,0x2d,0x29,0x5b,0xdc,0x4f,0x11,0xab,0xb6,0x8d,0x2f,0x0f,0x3e,0x41,0x9a,0xa9,0x8f,0x2f,0x0a,0x0c,0xe9,0x8f,0x99,0x99,0xba,0x4f,0xbd -,0x30,0x1d,0xa5,0x90,0x3e,0xab,0x32,0x11,0x0d,0x10,0xaa,0x96,0xbc,0x2e,0x0f,0xbd,0x8a,0xa0,0x28,0x19,0xb6,0x39,0xc2,0x9c,0x8e,0xa7,0x2c,0x1c,0x34,0xcd,0xbf,0x97 -,0xa8,0x75,0x31,0x0a,0x09,0x1a,0x4c,0xb0,0xa3,0xa0,0x2a,0x5c,0x4a,0x8f,0x96,0x9c,0x9c,0x40,0x23,0xb5,0x5f,0x3b,0x98,0x2f,0x13,0x17,0x26,0xc2,0xc7,0xde,0xd7,0x4f -,0xb3,0x2d,0xf2,0x2f,0x9b,0x97,0x1b,0x1e,0x26,0xbc,0x93,0x9c,0xba,0x21,0x0e,0x10,0xc9,0x90,0x8f,0x96,0x27,0xbd,0x23,0x1c,0xa5,0xae,0xa0,0xa2,0xb3,0x19,0x0a,0x0e -,0x1e,0x9b,0x97,0x38,0x21,0x15,0xb3,0x91,0x5e,0x35,0x48,0x32,0xc2,0x95,0x9f,0x9b,0x40,0xa1,0x5a,0x1d,0xab,0xaf,0x94,0x2c,0xab,0x20,0x04,0x14,0x1e,0x4e,0x95,0xaf -,0xfd,0x14,0x2e,0x9a,0x98,0x8e,0x9c,0x9b,0x1a,0x29,0x2a,0x2d,0xa6,0x9c,0xd1,0x32,0x1b,0x16,0x2c,0xa9,0xb2,0x41,0xa9,0xba,0x32,0x1f,0xb5,0xb6,0xd6,0xcd,0x2f,0x19 -,0xa8,0x96,0x9c,0x38,0x1e,0x1b,0x11,0xa8,0x9a,0x8e,0xac,0xdb,0x42,0x19,0x31,0xa9,0xa4,0x9c,0xa2,0x38,0x1d,0x08,0x14,0xae,0xa9,0xa8,0xaa,0x18,0x27,0x2d,0xae,0x9b -,0x2e,0x43,0x23,0x9b,0xa3,0xac,0xa8,0xb2,0x98,0x26,0x2f,0x48,0xa9,0xad,0xc7,0xcc,0x0e,0x0f,0x11,0x1a,0xa6,0xa5,0xbe,0x2d,0x2b,0xa0,0xaf,0x93,0x8c,0x9a,0xb8,0x26 -,0x23,0x1b,0xbb,0x9f,0xab,0xc7,0x2f,0x15,0x0d,0x5d,0xa3,0xa6,0xa6,0x3c,0xac,0x27,0x21,0x45,0x40,0x97,0x35,0x4c,0x30,0xb7,0x9d,0x5d,0xbe,0x1a,0x1c,0x3b,0xbf,0x92 -,0x91,0xa4,0xd8,0x14,0x3f,0x23,0xbe,0x9b,0x9f,0x97,0x1e,0x12,0x0a,0x1b,0xba,0xa4,0x9c,0xdf,0x1f,0x22,0x2b,0x9a,0xa1,0x3e,0x5d,0xc6,0xa4,0xc6,0xed,0xba,0x9b,0x9f -,0x4e,0x2d,0x37,0xb9,0xbb,0x3c,0x51,0x17,0x0f,0x12,0x55,0x9e,0xbc,0x2b,0x2f,0x3c,0xb2,0x98,0x98,0x90,0xa8,0xc6,0x26,0x18,0x2a,0xb4,0x9f,0x98,0xa9,0x15,0x13,0x16 -,0x3f,0x9f,0xa4,0xab,0xc8,0xde,0x25,0x1c,0x43,0xc9,0xae,0xdc,0x46,0xc8,0xce,0xa9,0x34,0xba,0x6e,0x22,0x30,0xcf,0x9b,0x97,0xd9,0x2b,0x44,0x28,0x48,0xa5,0xa0,0xa6 -,0xbb,0x1e,0x19,0x18,0x24,0xbe,0x98,0xbe,0x3f,0x1d,0x19,0xc3,0x50,0x99,0xcd,0xab,0xb6,0x36,0x7a,0x43,0x97,0x9b,0xa0,0xbc,0xdb,0x2e,0x2d,0x38,0x38,0x27,0x27,0x1c -,0x1d,0xef,0x31,0xb7,0x2d,0x2d,0xa9,0xb6,0x9a,0x9b,0x9a,0xa5,0x3c,0x24,0x1e,0x32,0xbf,0x94,0xa5,0xb0,0x19,0x11,0x20,0x3e,0x9b,0xac,0xa0,0xc0,0xe5,0x1a,0x17,0x39 -,0x69,0xa7,0xb6,0xbf,0xde,0x38,0x48,0x48,0xb2,0xe8,0x2e,0x6c,0x54,0x9f,0xa5,0x59,0xb4,0x36,0xec,0x47,0xbd,0x9a,0x5b,0x68,0x1f,0x27,0x28,0x1e,0xac,0xb5,0xae,0x3d -,0x18,0x26,0x4c,0xbc,0xa2,0xa5,0xbc,0xb6,0x29,0x32,0xaf,0x9c,0x9a,0xa8,0xbf,0x39,0x26,0x22,0x75,0x52,0x3f,0x3d,0x26,0x2a,0x26,0x2a,0x3f,0x2c,0xa4,0xb6,0x9e,0x9c -,0xa0,0x96,0x5e,0x2e,0x1e,0x2a,0x3d,0xc0,0x9f,0xa4,0x3c,0x19,0x17,0x28,0xd0,0xaf,0x9d,0xa7,0xcc,0xe9,0x19,0x25,0x3b,0xae,0xa7,0x4c,0xb8,0x44,0x2e,0x44,0xbb,0xaf -,0xc1,0x2b,0xbc,0xcf,0xba,0xb8,0xd3,0xb4,0x33,0xbc,0xda,0xb3,0xad,0xc9,0x61,0x25,0x23,0x2f,0x2a,0xf3,0xb5,0x31,0x34,0x1e,0x2f,0xc0,0xc0,0x9f,0xac,0xac,0x6b,0x46 -,0xc8,0xba,0x98,0x9d,0xa0,0xcc,0x32,0x34,0x1d,0x32,0x36,0x2d,0x2f,0x23,0x28,0x25,0x26,0x2f,0x47,0xb3,0x9e,0xa1,0x99,0x9f,0xaa,0xb0,0x2e,0x5a,0x23,0x3c,0xa2,0xc6 -,0xbc,0x2c,0x29,0x2c,0x2a,0xa9,0xb8,0xb6,0xb9,0x49,0x42,0x1b,0x32,0xd0,0xd8,0xb7,0xc6,0xd3,0x32,0x35,0xbb,0xc9,0xaf,0xb0,0x4e,0xb5,0x37,0xb9,0x5b,0x3b,0xcd,0xc1 -,0xb2,0xbf,0xae,0xdb,0x55,0x4f,0x3d,0x25,0x43,0x38,0x56,0x49,0x2d,0x2d,0x1e,0x4c,0xc6,0xb5,0xa4,0xb9,0xb9,0x46,0x5a,0xbb,0xac,0x9b,0x9d,0xa3,0xbe,0x2e,0x2c,0x2a -,0x24,0xf3,0x2f,0x32,0x29,0x1e,0x2d,0x1f,0x6b,0xc0,0xc0,0x9f,0xa7,0xa2,0xa5,0xab,0xab,0x2e,0x3c,0x58,0x35,0xb3,0xdd,0x65,0x2b,0x29,0x3d,0x2f,0xbe,0xb7,0xb0,0xbf -,0x39,0x3c,0x2e,0x35,0xc4,0xc8,0xad,0x7d,0x3c,0x54,0x3a,0xae,0xb8,0xbc,0xb8,0x3f,0x69,0x4a,0xea,0xcf,0x4e,0xbb,0xbc,0xc2,0xc8,0xd3,0xf2,0x72,0xea,0x58,0x30,0x3a -,0x44,0x37,0x3b,0x22,0x2e,0x2b,0x3c,0xbd,0xbd,0xa5,0xbf,0xf1,0xbf,0xc2,0xa8,0xa4,0x9e,0x9d,0xb4,0xc6,0x2d,0x29,0x2c,0x2f,0x47,0x2a,0x2a,0x2a,0x1d,0x2e,0x2c,0x3f -,0xbe,0xbd,0xa3,0xac,0xa8,0xa6,0xaf,0xaf,0x4a,0x3d,0xd6,0x5d,0xb8,0x5d,0x60,0x3d,0x2b,0x51,0xce,0xc7,0xbe,0x69,0xe1,0x39,0x2c,0x44,0x3a,0xbd,0x5e,0xda,0x43,0x2f -,0x3d,0x50,0xaf,0xb4,0xb1,0xbe,0x41,0x50,0xca,0xcb,0xc0,0x4c,0xb8,0xb7,0xd5,0xbb,0xe2,0xbf,0xba,0xd4,0x48,0x36,0x3a,0x36,0x2f,0x3b,0x21,0x29,0x31,0x37,0xbe,0x54 -,0xad,0xba,0xee,0xb4,0xbe,0xa4,0x9f,0xa0,0xa5,0xc1,0x6d,0x38,0x2c,0x4a,0x2f,0x33,0x33,0x26,0x27,0x1e,0x33,0x3d,0x4e,0xba,0xc4,0xac,0xae,0xb7,0xa3,0xae,0xb8,0xd5 -,0x4b,0xca,0x48,0xd7,0xe5,0x41,0x56,0x38,0xcd,0xda,0x53,0xd3,0x3e,0xe0,0x3b,0x33,0x52,0x3d,0xc7,0x53,0x45,0x4d,0x32,0xdc,0xbf,0xaf,0xb4,0xce,0xd3,0x3f,0x4a,0xbc -,0xe3,0xc0,0xd1,0xcb,0xbb,0x44,0xc0,0xdf,0xbd,0xaf,0xce,0xdc,0x48,0x2d,0x36,0x2a,0x2e,0x28,0x25,0x48,0x37,0xbb,0xd5,0xc4,0xbd,0x70,0xad,0xad,0xa4,0x9e,0xa7,0xa9 -,0xba,0xdf,0x4b,0x2e,0x3b,0x32,0x31,0x28,0x21,0x2b,0x24,0x2d,0x4e,0x4e,0xbb,0xbe,0xbd,0xae,0xaf,0xa8,0xb8,0xbe,0xb8,0xcd,0xbd,0x4d,0x69,0x68,0x3f,0x53,0x3e,0xd2 -,0x75,0x40,0xd3,0x4e,0x40,0x44,0x34,0x4e,0x50,0x64,0x59,0x44,0x5b,0x49,0xf3,0xb3,0xb8,0xc1,0xc4,0x68,0xcf,0x4d,0x78,0x6a,0xda,0xb8,0xd5,0xc1,0xdb,0xc2,0xbe,0xc2 -,0xb7,0xd9,0x68,0x40,0x35,0x30,0x2b,0x2d,0x2a,0x2c,0x35,0x3e,0x50,0x4d,0xd8,0xc4,0xb8,0xa8,0xa9,0x9f,0x9f,0xa7,0xab,0xc0,0xdb,0x40,0x39,0x3b,0x2d,0x2d,0x2e,0x23 -,0x28,0x2b,0x37,0x3d,0x54,0xc4,0xcb,0xb9,0xb8,0xaf,0xaf,0xb5,0xbc,0xb7,0xca,0xe4,0xe4,0x45,0x6d,0x4b,0xc6,0x70,0xea,0xc4,0x42,0xce,0x4a,0x3c,0x5f,0x3c,0x4f,0x4c -,0x41,0x43,0x3d,0x5a,0x55,0xce,0xcd,0xcb,0xc0,0xd3,0x6f,0xd9,0xd6,0x5c,0xd0,0xcc,0xc3,0xe0,0xcc,0xd3,0xc9,0xbe,0xc0,0xb8,0xc9,0xd1,0x6f,0x3f,0x30,0x30,0x2a,0x2e -,0x2e,0x2b,0x38,0x3a,0x4d,0x79,0xc9,0xb3,0xb1,0xa9,0xa7,0xa9,0xaa,0xad,0xb2,0xbf,0xed,0x53,0x46,0x39,0x2e,0x2b,0x2e,0x2a,0x27,0x2c,0x3e,0x3a,0x4a,0xf4,0xc8,0xbb -,0xbd,0xb8,0xbb,0xb6,0xbb,0xc3,0xbf,0xbf,0xc5,0xc2,0xc5,0xc1,0x41,0x4f,0x4a,0x4a,0x6a,0x46,0x4c,0x3f,0x4e,0x3f,0x3e,0x48,0x57,0x57,0xe6,0xd9,0xda,0xdf,0xcc,0xd4 -,0x5b,0xd2,0xdf,0x7a,0xe4,0xdc,0xec,0x7d,0xd8,0xcc,0xcb,0xbb,0xb2,0xb7,0xba,0xce,0xf7,0x42,0x3a,0x3f,0x35,0x36,0x2f,0x2e,0x2f,0x2f,0x30,0x43,0x73,0xca,0xbc,0xaf -,0xaa,0xa7,0xad,0xaf,0xab,0xb4,0xbe,0x7e,0xdf,0x49,0x3b,0x30,0x30,0x2d,0x37,0x2a,0x3a,0xe6,0x2e,0x3e,0x51,0x56,0xbc,0xc2,0xc8,0xbd,0xb8,0xcf,0xc4,0xd5,0xc8,0xae -,0xe6,0xb3,0xe9,0xc2,0x4a,0x46,0x3d,0xed,0x54,0x38,0x6f,0x35,0xe7,0x34,0x4d,0x3d,0xda,0x3b,0xe4,0xd3,0x56,0xb3,0x3b,0xc7,0xc0,0xbf,0x7e,0x4a,0x6e,0xc5,0xbf,0xbc -,0xd0,0xcd,0xbd,0xcd,0xae,0xbc,0xc1,0x46,0x30,0x3a,0x75,0x35,0x2f,0x2a,0x2d,0x34,0x31,0x48,0x37,0xbb,0xcd,0xbc,0xb0,0xab,0xaa,0xb6,0xaf,0xb1,0xb4,0xca,0xcd,0x60 -,0x53,0x41,0x3d,0x32,0x39,0x38,0x34,0x3c,0x46,0x67,0x3c,0x3f,0xfd,0xc5,0xc4,0xb5,0xbe,0xc2,0xd1,0xc1,0xc0,0xcf,0xce,0xd8,0xc9,0xd0,0xc8,0x44,0x4d,0x5b,0xef,0x42 -,0x46,0x4b,0x36,0xd6,0x42,0x6a,0xcd,0x3f,0xe4,0x4a,0xc4,0xc1,0xee,0x6b,0x4a,0xe1,0xe9,0x62,0x6b,0xcc,0xd0,0xcc,0xe6,0xc2,0xcf,0xbd,0xc3,0xc6,0xb9,0x5c,0x5a,0x3e -,0x41,0x3c,0x3a,0x35,0x31,0x35,0x39,0x40,0x73,0xbf,0xbf,0xc1,0xce,0xb2,0xb5,0xb7,0xb4,0xbc,0xb3,0xcc,0xda,0xef,0x53,0x56,0x3b,0x33,0x37,0x40,0x3c,0x47,0x46,0x3d -,0x54,0x49,0x4c,0xd4,0xcb,0xd7,0xc2,0xc4,0xcb,0xc4,0xd2,0xc2,0xc3,0xc7,0xc7,0xea,0xe3,0x53,0x40,0x6f,0xd2,0x5d,0x40,0x46,0x4e,0x40,0x48,0x64,0xd7,0xda,0xdc,0x7b -,0xc8,0xe9,0x79,0xea,0x6e,0x5c,0x50,0xde,0x5e,0xd8,0x61,0xd9,0x6a,0xd8,0xcb,0xd4,0xbc,0xc5,0xc7,0xcd,0x59,0x3e,0x49,0x4b,0x48,0x3e,0x3b,0x3b,0x33,0x3d,0x59,0xc7 -,0xc8,0xc2,0xbc,0xc4,0xb6,0xc2,0xbc,0xb6,0xc5,0xcf,0xda,0x59,0x46,0x4c,0x50,0x51,0x3a,0x3a,0x3c,0x48,0x52,0x50,0xdd,0x4a,0x56,0x5f,0xd8,0xc1,0xc1,0xc9,0xcd,0xd0 -,0x5c,0xc9,0xc4,0xc7,0xca,0xc9,0xde,0x59,0x4c,0x4c,0x50,0x71,0x59,0x4e,0x47,0x4a,0xfd,0x59,0xd6,0xcf,0x55,0x50,0x6e,0xef,0xd6,0xf5,0xd7,0x4d,0x52,0x57,0x60,0xe1 -,0x74,0xc9,0xeb,0xc9,0xc9,0xc4,0xc6,0xc2,0xc8,0xd1,0xf5,0x4c,0x45,0x40,0x42,0x3a,0x44,0x37,0x3a,0x42,0x45,0xdb,0xd2,0xda,0xcc,0xcd,0xbf,0xbb,0xbd,0xbd,0xbd,0xb8 -,0xc0,0xcf,0xe6,0x5b,0x58,0x64,0x6f,0x4c,0x3b,0x3c,0x38,0x31,0x3e,0x38,0x37,0x3f,0x3d,0x59,0xd2,0xd1,0xcb,0xc7,0xba,0xb1,0xb0,0xae,0xaf,0xb2,0xaf,0xb6,0xc1,0xde -,0x48,0x55,0x3b,0x32,0x29,0x2d,0x39,0x2f,0x2e,0x2f,0x42,0x54,0x40,0x69,0xbc,0xad,0xb2,0xba,0xad,0xb2,0xb4,0xbd,0xbd,0xbd,0xcb,0xcd,0xd0,0x55,0x3f,0x47,0x37,0x2f -,0x2b,0x30,0x37,0x30,0x3f,0x4b,0x65,0xdc,0xdd,0xc2,0xb8,0xab,0xa9,0xad,0xaf,0xbe,0xbe,0xbd,0xca,0x69,0x48,0x4e,0x3a,0x29,0x27,0x29,0x2c,0x33,0x3d,0xf4,0xc8,0xbe -,0xc5,0xbe,0xb4,0xb1,0xb8,0xaf,0xad,0xbf,0xc8,0xee,0x55,0x3a,0x3b,0x43,0x39,0x2e,0x2e,0x3d,0x38,0x40,0x4f,0xd6,0xbc,0xbe,0xb6,0xb7,0xb8,0xba,0xbb,0xb6,0xbf,0xf0 -,0xd6,0xc9,0x4a,0x38,0x3c,0x39,0x2e,0x29,0x2f,0x3b,0x3c,0x47,0x74,0xcc,0xb7,0xb8,0xb0,0xab,0xa9,0xad,0xb3,0xb8,0xbd,0xdc,0x5f,0x5b,0x36,0x32,0x2d,0x2a,0x25,0x23 -,0x2d,0x39,0x3f,0xe3,0xc7,0xb3,0xaf,0xb2,0xaa,0xaa,0xa9,0xac,0xac,0xb1,0x6d,0x55,0x48,0x3b,0x2f,0x35,0x39,0x2e,0x28,0x27,0x2f,0x2e,0x3e,0x5e,0xba,0xaf,0xb4,0xb4 -,0xb2,0xaf,0xad,0xb4,0xb4,0xbe,0xc9,0xbe,0x64,0x3b,0x3c,0x3f,0x36,0x2a,0x26,0x31,0x32,0x3a,0x50,0xf2,0xc0,0xbb,0xbb,0xb1,0xac,0xac,0xb8,0xb8,0xbc,0x59,0xf0,0xf1 -,0x4f,0x39,0x3b,0x3f,0x31,0x2d,0x2d,0x37,0x48,0x6d,0xea,0xc7,0xb2,0xb1,0xb7,0xb4,0xb7,0xbc,0xc9,0xcd,0x60,0x53,0xc8,0x4c,0x39,0x3d,0x4b,0x44,0x2f,0x30,0x38,0x46 -,0x4a,0x77,0xc9,0xba,0xbe,0xc3,0xb4,0xb5,0xb9,0xc4,0xb9,0xc0,0x6f,0x7d,0x4f,0x4c,0x3a,0x3e,0x45,0x3b,0x30,0x29,0x37,0x40,0x4a,0xd7,0xcc,0xb9,0xb2,0xb3,0xaf,0xb6 -,0xb3,0xb7,0xbf,0xe7,0xe4,0xcb,0x5c,0x3b,0x37,0x46,0x36,0x2c,0x29,0x34,0x44,0x41,0x61,0xcf,0xbf,0xbc,0xc4,0xb7,0xb3,0xb6,0xba,0xba,0xba,0xcf,0xbe,0xc9,0x5a,0x48 -,0x52,0x59,0x38,0x2d,0x2a,0x32,0x3a,0x3c,0x3e,0x59,0xc4,0xc9,0xc3,0xbb,0xba,0xbb,0xbc,0xb5,0xc1,0xbc,0xb9,0xca,0x5c,0x4f,0xf4,0x3e,0x32,0x2b,0x33,0x3a,0x38,0x3f -,0x51,0xc4,0xcc,0xc7,0xbd,0xba,0xbc,0xc2,0xbb,0xc1,0xd9,0xc5,0xc3,0x69,0x45,0x4e,0x58,0x3b,0x30,0x2f,0x39,0x40,0x48,0x63,0xda,0xc4,0xc3,0xc2,0xba,0xba,0xc2,0xc4 -,0xbb,0xca,0xcf,0xc6,0xda,0x55,0x45,0x68,0x48,0x33,0x2b,0x2f,0x3f,0x3d,0x41,0x4a,0xcc,0xbb,0xc1,0xbc,0xb2,0xb5,0xbc,0xbe,0xbc,0xce,0xd7,0xd6,0xe2,0x61,0x40,0x4c -,0x36,0x2e,0x2f,0x34,0x3f,0x4a,0xef,0xdf,0xc3,0xc0,0xc6,0xbd,0xbc,0xb7,0xba,0xc2,0xbc,0xd8,0xd2,0xdf,0x56,0x4a,0x4a,0x66,0x39,0x35,0x36,0x35,0x3b,0x3f,0x4f,0x69 -,0xd0,0xbd,0xbc,0xc7,0xce,0xc4,0xc0,0xba,0xbc,0xc4,0xb9,0xbf,0x7e,0x46,0x51,0x45,0x36,0x31,0x36,0x48,0x3f,0x40,0x43,0x63,0xc7,0xcf,0xd9,0xcd,0xbd,0xbf,0xc9,0xbd -,0xc9,0xcc,0xca,0xd7,0xdf,0x4a,0x69,0x5b,0x42,0x3f,0x3f,0x4a,0x4b,0x5c,0x48,0x5e,0xce,0xd3,0xce,0xe6,0xc7,0xce,0xe0,0xc5,0xe0,0xdd,0xbf,0xbc,0xcb,0x4a,0x4d,0x5b -,0x40,0x36,0x33,0x41,0x4b,0x56,0x47,0x50,0xc6,0xcf,0xce,0xce,0xb5,0xb7,0xbc,0xbe,0xc5,0xc9,0xee,0xca,0xfe,0x4f,0x45,0x61,0x4b,0x36,0x2e,0x2e,0x39,0x3e,0x4a,0x6d -,0xd3,0xd8,0xc2,0xc8,0xc2,0xbc,0xbe,0xb3,0xb8,0xc1,0xc3,0xbc,0xc6,0x67,0x4a,0x4c,0x5f,0x3e,0x2d,0x2c,0x30,0x3b,0x3f,0x38,0x56,0xc5,0xca,0xc9,0xc2,0xb8,0xba,0xbc -,0xb4,0xb0,0xba,0xbf,0xbe,0xde,0x51,0x3f,0x46,0x3f,0x32,0x2d,0x2e,0x2f,0x39,0x47,0x41,0xe5,0xc5,0xbd,0xc0,0xc9,0xb5,0xb1,0xb7,0xb6,0xba,0xbb,0xb7,0xcd,0x72,0x40 -,0x3e,0x47,0x34,0x2b,0x2c,0x35,0x36,0x3c,0x3c,0x4c,0xcc,0xc0,0xbb,0xbb,0xb4,0xb2,0xb5,0xb5,0xc3,0xc5,0xcb,0xbe,0xd4,0x42,0x3b,0x3b,0x5e,0x3a,0x2e,0x2d,0x3d,0x4a -,0x3d,0x3f,0xda,0xbf,0xbd,0xbc,0xb9,0xb6,0xbf,0xbb,0xbf,0xbf,0xc8,0xd3,0xf1,0xda,0x3c,0x32,0x50,0x3d,0x2e,0x2e,0x3b,0x3a,0x4f,0x65,0x46,0xc6,0xb5,0xb6,0xb5,0xb6 -,0xb1,0xb7,0xba,0xbc,0x6f,0x55,0xe7,0xd4,0x41,0x2e,0x3e,0x4a,0x34,0x2a,0x2c,0x3a,0x47,0xe2,0xeb,0xca,0xb3,0xbd,0xb3,0xb6,0xaf,0xaf,0xbe,0xae,0xc0,0x41,0x43,0x4b -,0x36,0x21,0x29,0x5a,0x3f,0x2b,0x25,0x3e,0xd0,0xda,0xd3,0xb6,0xa4,0xa7,0xb7,0xad,0xab,0xb6,0xba,0xed,0xcb,0x32,0x32,0x39,0x2a,0x1d,0x30,0x7d,0x31,0x2d,0x2d,0xc7 -,0xc2,0xba,0xb1,0xa3,0x9c,0xa4,0xb9,0xab,0xac,0xb1,0xdf,0x51,0x38,0x1e,0x25,0x1c,0x16,0x2a,0x64,0x34,0x31,0x2d,0xbb,0xa5,0xaa,0xa3,0x9f,0x94,0xa2,0xb3,0xa5,0xae -,0xc7,0x2f,0x35,0x2d,0x15,0x1a,0x1b,0x0e,0x36,0x60,0x3d,0xaf,0xdf,0x94,0x9c,0xa7,0x94,0xa1,0x95,0xae,0xbe,0xa4,0x3b,0xea,0x22,0x1a,0x1b,0x06,0x16,0x0d,0x0f,0x9a -,0x31,0x9f,0xa0,0x99,0x89,0xe2,0x8e,0x97,0xa6,0x9c,0x29,0x9d,0x3c,0x23,0x3f,0x16,0x29,0x05,0x0f,0x1c,0x07,0x93,0xaf,0x9f,0x8e,0xa9,0x85,0x59,0x9d,0x97,0x37,0x9c -,0x1e,0xa4,0xc7,0x22,0xb5,0x17,0x32,0x09,0x0d,0x2a,0x04,0x9c,0xac,0xc1,0x8e,0xae,0x86,0x57,0xb2,0x93,0x38,0x9b,0x2c,0xa7,0xa4,0x1b,0xbb,0x23,0x2c,0x12,0x06,0x37 -,0x03,0xd0,0x96,0x38,0x89,0xc1,0x88,0x9e,0x33,0x97,0x33,0x9a,0x1f,0xc4,0x98,0x22,0xaf,0x20,0x47,0x16,0x05,0x46,0x0a,0x1b,0x8d,0xd5,0x8f,0x9f,0x8e,0x8c,0x18,0x91 -,0xaf,0xb6,0x5f,0xe4,0x96,0x2f,0x7d,0xba,0x33,0x2b,0x07,0x0f,0x12,0x0c,0x89,0xc8,0xa4,0xc1,0x9c,0x86,0x3f,0x3c,0xa7,0x24,0x07,0x0d,0x1c,0x9e,0x3c,0xad,0xe0,0x1a -,0xd0,0xc9,0xab,0x12,0xac,0x93,0xae,0x86,0x9a,0x8c,0x8b,0x2a,0xa1,0x9c,0x1d,0xab,0x86,0x8b,0x93,0x88,0x9e,0x2e,0x0d,0x00,0x06,0x00,0x01,0x0d,0x0a,0x08,0x0e,0x16 -,0xd2,0x00,0x0e,0x5a,0x0e,0x1e,0x11,0x92,0x9b,0x9e,0x88,0xa1,0xae,0x3c,0x36,0xc2,0x0c,0x9b,0x82,0x8b,0x80,0x82,0x80,0x83,0x8f,0x80,0x8d,0x89,0x8b,0x14,0x8f,0x8a -,0x81,0x17,0x13,0x11,0x00,0x08,0x01,0x01,0x0c,0x09,0x09,0x9f,0x27,0x29,0x00,0x0c,0x9a,0x02,0x05,0x03,0xb4,0xb9,0x38,0x8d,0x4b,0x12,0x01,0x16,0x9f,0x47,0x97,0x80 -,0x9a,0x88,0x81,0x80,0x83,0x8b,0x84,0x84,0x91,0x8f,0x86,0x89,0x9e,0xaf,0x8a,0x23,0x14,0x0c,0x0e,0x15,0x00,0x39,0x97,0x6a,0xbe,0x1e,0xa3,0x08,0x0a,0xba,0x06,0x04 -,0x0b,0x0f,0x16,0x08,0x17,0x0c,0x0b,0x0a,0x05,0x1a,0x07,0x16,0x82,0x8c,0x92,0x80,0x88,0x89,0x2b,0x8e,0x83,0xaa,0x87,0x88,0x8c,0x80,0x9b,0x8e,0x8b,0x8d,0xbb,0x1e -,0x9b,0x08,0xa0,0x84,0xc6,0x99,0x89,0x93,0x06,0x0a,0xdf,0x08,0x03,0x0a,0x00,0x15,0x17,0x14,0xcc,0x09,0x03,0x01,0x00,0x08,0x02,0x9b,0x86,0x9d,0x89,0x82,0x8b,0xbf -,0x99,0x88,0x86,0x93,0x92,0x87,0x8a,0x91,0x86,0x84,0xae,0xb6,0x0c,0x11,0x0f,0x17,0x89,0x8f,0xae,0x8c,0x95,0x8d,0x26,0x1a,0x8f,0x09,0x2b,0xd7,0xc7,0xa3,0x0c,0x0e -,0x18,0x10,0x10,0x02,0x03,0x00,0x28,0x8d,0x98,0x9e,0x9e,0x26,0x0b,0xa5,0xb9,0x8b,0xbf,0x14,0xc8,0x8d,0x46,0x07,0x94,0x3e,0x02,0x03,0x00,0x98,0x17,0x04,0xa4,0x05 -,0xbd,0x84,0x8d,0x72,0x07,0x0f,0x1b,0x0a,0x4a,0xbc,0x8c,0x3a,0x1d,0xd3,0x09,0x12,0x0c,0x19,0x16,0x1a,0x11,0xa6,0x40,0x9c,0x80,0xae,0x0d,0x16,0x9f,0x9a,0x8e,0x80 -,0x86,0x82,0x8a,0x86,0x80,0x8c,0x86,0x89,0x8e,0x11,0x1d,0x88,0x80,0x8d,0x8a,0x97,0x88,0x59,0x12,0x97,0x97,0xae,0x12,0x43,0x8f,0x86,0x1a,0x0a,0x0b,0x47,0x06,0x00 -,0x1e,0x00,0x07,0x17,0x25,0x13,0x20,0x51,0x00,0x02,0x08,0x05,0x1c,0xc7,0xa7,0x07,0x07,0x0b,0xdc,0x1d,0x1b,0x1a,0x00,0x12,0x00,0x9d,0x80,0x88,0x8a,0xa2,0x92,0xa7 -,0x92,0x82,0x80,0x80,0x88,0x9d,0x83,0x84,0x8b,0x8e,0x9b,0x8b,0x2e,0x26,0x13,0x02,0x9c,0x80,0x39,0x18,0x2a,0x34,0x23,0x01,0x1e,0x02,0x17,0x1e,0x06,0x2a,0x0b,0x04 -,0x01,0x0a,0x04,0x00,0x01,0x16,0x09,0x0f,0x86,0x80,0x84,0x80,0x8f,0x21,0x9d,0x84,0x80,0x81,0x80,0x8a,0x86,0x84,0x83,0x80,0x66,0xac,0x18,0x1f,0x8f,0x19,0xab,0x86 -,0xa4,0x1b,0xac,0x28,0x03,0x00,0x08,0x13,0x0c,0x1e,0x05,0x03,0x0a,0x04,0x01,0x00,0x08,0x0b,0x00,0x03,0x00,0x0a,0x98,0x0f,0x13,0xa5,0x70,0x12,0x00,0xc5,0x93,0xb1 -,0x90,0x9f,0x9c,0x8f,0x8c,0x9d,0x8c,0xb4,0x9f,0x9d,0x94,0x88,0x8e,0x80,0x80,0x82,0x80,0x87,0x84,0x8c,0x8c,0x84,0x92,0x81,0x8c,0xb7,0x1e,0xac,0x98,0x1e,0x12,0x2f -,0x04,0x0c,0x1d,0x3e,0x86,0xc3,0xc8,0xa5,0x1d,0x07,0x04,0x04,0x28,0x15,0x14,0x19,0x09,0x0d,0x05,0x0c,0x06,0x04,0x0b,0x19,0x0e,0x03,0x0a,0x80,0x93,0x15,0x88,0xbc -,0xc7,0x0c,0x0e,0x96,0xaa,0x9c,0x8b,0x98,0x9e,0x28,0x94,0x94,0x95,0x85,0x4b,0x9a,0x9c,0x13,0x8c,0x80,0xa4,0x81,0xaf,0x21,0x0b,0x02,0x90,0x4e,0x12,0x21,0x2f,0xbe -,0x12,0x1b,0x12,0x0d,0x0f,0x01,0x06,0x0b,0x05,0x2c,0x8b,0x0e,0x25,0xa5,0x0d,0x10,0x13,0x8f,0x95,0x9c,0x82,0x88,0x82,0x84,0x83,0x80,0x84,0x89,0x86,0x90,0x87,0x88 -,0x83,0x80,0x8e,0x85,0x8b,0x8d,0x47,0x08,0xef,0x70,0x12,0x57,0x23,0x1f,0x12,0x03,0x0d,0x0b,0x00,0x03,0x00,0x05,0x00,0x0f,0xf7,0x09,0x09,0x0b,0x06,0x02,0x00,0x07 -,0x26,0x15,0x70,0x3c,0xc6,0x1d,0x3d,0x40,0x1d,0x4b,0x53,0x15,0xc7,0xc5,0xb0,0x80,0x9b,0x87,0x80,0x85,0x8d,0x36,0x8c,0x80,0x82,0x80,0x82,0x83,0x89,0x94,0x89,0x85 -,0xd6,0xa0,0x2b,0x1e,0xd6,0x16,0x82,0x91,0xc2,0x8e,0x14,0x29,0x03,0x0c,0xa4,0x03,0x2f,0xa9,0x1e,0x0c,0x05,0x0b,0x0b,0x0c,0x0a,0x04,0x0b,0x0f,0x0e,0x86,0x96,0x2f -,0xa2,0xb5,0xe9,0x0f,0x19,0x98,0x4c,0xb6,0x88,0x9d,0xb9,0x2e,0x46,0x44,0x27,0x29,0x16,0x17,0x49,0x0b,0x89,0x89,0xa8,0xae,0x1d,0xca,0x0a,0x11,0xb2,0xab,0x48,0xab -,0x28,0x51,0x18,0x38,0xbd,0x0e,0xae,0x1e,0x0a,0xa0,0x1b,0x8f,0x82,0xb2,0x8c,0xa9,0x29,0x15,0x00,0x9b,0xb1,0x11,0x96,0x24,0x34,0x30,0x61,0x31,0x1f,0x26,0x9b,0x36 -,0xe7,0x4b,0x96,0x80,0x8b,0x83,0x84,0x95,0x9e,0x90,0x95,0x80,0x8a,0x84,0x81,0x88,0x8d,0x9d,0xb5,0xac,0xa2,0x1a,0x05,0x08,0x00,0x16,0x8b,0x05,0x0c,0x18,0x05,0x00 -,0x00,0x05,0x03,0x04,0x17,0x0e,0x03,0x0a,0x03,0x0e,0x0c,0x02,0x06,0x04,0x05,0x07,0x2a,0x80,0xe4,0xa9,0x88,0xce,0x29,0x2b,0x9a,0x84,0x97,0x87,0x80,0x89,0x88,0x8e -,0x80,0x95,0x96,0xb0,0xe8,0xb2,0xf9,0x95,0x80,0x9d,0x9f,0x88,0x23,0xa8,0x0d,0x26,0x8c,0xda,0xaa,0x9d,0x8a,0x9c,0x12,0x8f,0x2f,0x14,0x59,0x0d,0x0c,0x1d,0x18,0x8a -,0x96,0x1f,0x89,0x3d,0x18,0x0b,0x0f,0x94,0x35,0xa6,0x86,0xba,0x1b,0x2e,0x9f,0x14,0x0c,0x1b,0x08,0x03,0x06,0x07,0x8e,0xca,0x07,0x9f,0x11,0x0b,0x03,0x0b,0x9c,0x4b -,0x4e,0xa1,0xb9,0xb3,0x1c,0x1d,0xc6,0x0e,0x13,0x0e,0x0f,0x2f,0x0b,0x89,0x8b,0x31,0x82,0x8f,0xab,0xda,0x27,0x84,0x91,0x9c,0x84,0x92,0x9d,0xc6,0xe4,0x19,0x24,0x16 -,0x17,0x06,0x0d,0x0e,0x8c,0x86,0x54,0x82,0xb4,0x38,0xbf,0x1c,0x9b,0x87,0x94,0x80,0x8e,0x8b,0x95,0x94,0x83,0x98,0x94,0x97,0xca,0xb9,0x9f,0x86,0x83,0x9e,0x8b,0x8b -,0x1a,0x0f,0x0d,0x1b,0xc8,0x00,0x3e,0x0f,0x05,0x0a,0x01,0x0b,0x09,0x00,0x03,0x01,0x07,0x01,0x0f,0x88,0x08,0x1a,0x26,0x0c,0x07,0x00,0x10,0x35,0x0d,0x3d,0xc5,0x2e -,0xb4,0x27,0xb4,0xba,0x15,0xb0,0x1f,0x3e,0xc5,0x59,0x80,0x9b,0x8d,0x89,0x94,0xb5,0x18,0x44,0x86,0x9e,0x8c,0x82,0x8a,0x8a,0xa1,0x8d,0x8c,0x97,0x9c,0x94,0x56,0xaa -,0x9b,0x80,0x8e,0x93,0x80,0x9c,0x21,0x0c,0x0e,0x8e,0x4d,0x58,0x8a,0x26,0xa7,0x1a,0x23,0x4c,0x12,0x0d,0x0c,0x09,0x09,0x07,0x89,0x91,0x0c,0xaa,0x19,0x05,0x05,0x00 -,0x40,0x24,0x0f,0x95,0x28,0xd9,0x28,0x1b,0x2c,0x13,0x09,0x0f,0x05,0x0b,0x0a,0x9d,0x85,0x0f,0xaf,0xcb,0x12,0x0d,0x06,0xba,0x97,0x42,0x88,0x8d,0x8b,0x92,0x9f,0x96 -,0xc6,0x3e,0xb4,0x1a,0x4b,0xcf,0x97,0x80,0xec,0x8f,0x8d,0x4e,0x1e,0x0a,0x31,0x9a,0x27,0x93,0x8b,0xad,0xb6,0x39,0x33,0x1f,0x0f,0x1b,0x12,0x12,0x19,0xaa,0x80,0x90 -,0x8b,0x81,0x8a,0x95,0xac,0x96,0x80,0x88,0x84,0x80,0x85,0x87,0x8e,0x9f,0xbf,0x1c,0x0e,0x07,0x00,0x04,0x03,0x97,0x15,0x05,0x25,0x03,0x01,0x01,0x00,0x12,0x04,0x07 -,0x2d,0x0d,0x0a,0x09,0x05,0x06,0x02,0x03,0x05,0x03,0x07,0x07,0x89,0x8f,0x2b,0x89,0x96,0xb8,0x3d,0x19,0x89,0x93,0x9d,0x81,0x8d,0x8c,0xa3,0xa9,0x9a,0xc4,0xab,0xc1 -,0x3d,0xa8,0xd5,0x82,0x82,0x8e,0x80,0x88,0x94,0x9d,0x31,0x86,0x90,0xa7,0x83,0x94,0x95,0xaf,0xab,0xab,0x1a,0x21,0x20,0x0d,0x2f,0x0f,0x89,0x8a,0x19,0x92,0xc5,0x1b -,0x13,0x00,0x28,0x1b,0x08,0xb7,0x2e,0x43,0x15,0x14,0x19,0x06,0x07,0x0d,0x06,0x10,0x00,0x9e,0x8a,0x0a,0x9d,0x3c,0x16,0x0b,0x00,0x32,0x1e,0x0b,0x9b,0xab,0xb3,0x48 -,0x3a,0xa9,0x19,0x2c,0x3d,0x19,0x29,0x0f,0x8c,0x82,0xbe,0x86,0x8b,0x9d,0xc3,0x0e,0x90,0x9a,0x3a,0x87,0x91,0x92,0x9b,0xa6,0x8f,0xb0,0x21,0x3c,0x15,0x1f,0x0a,0x96 -,0x81,0x42,0x8c,0x8b,0xa2,0x3b,0x0b,0x96,0x9a,0x12,0x93,0x9d,0x98,0x95,0x99,0x88,0xac,0x28,0xaf,0x24,0x29,0x1b,0x8c,0x80,0xa0,0x84,0x89,0xab,0x2e,0x08,0xc3,0x1e -,0x04,0xbe,0x24,0x37,0x24,0x0d,0x1d,0x09,0x03,0x06,0x00,0x08,0x00,0xa2,0x88,0x1f,0x9b,0xb8,0x37,0x19,0x05,0x9f,0xb5,0x2d,0x8d,0x8e,0x8f,0xbe,0x3b,0x9a,0x1e,0x0b -,0x0d,0x0b,0x15,0x05,0x8d,0x8e,0x1e,0x9a,0xa4,0xb2,0x15,0x10,0x93,0xab,0xc2,0x8c,0x90,0x90,0xaa,0xa4,0x9b,0x39,0x20,0x21,0x27,0x3f,0x16,0x8a,0x8c,0xb2,0x92,0xac -,0xa2,0x10,0x0e,0xa0,0xb1,0xcb,0xa6,0x97,0x8f,0xb7,0xac,0x93,0x9f,0xc5,0xdb,0x9d,0x3f,0x16,0x87,0x8d,0xbd,0x9f,0xa0,0x94,0x0f,0x14,0xa2,0x18,0x12,0x13,0x42,0x2c -,0x11,0x25,0x41,0x23,0x0e,0x0c,0x10,0x05,0x04,0x9b,0xa6,0xb5,0x9b,0x90,0x89,0x1a,0x1f,0xb8,0x11,0x14,0x0e,0x4b,0x25,0x18,0x36,0x26,0x1b,0x06,0x08,0x0d,0x01,0x0a -,0x98,0x9b,0x99,0x9a,0x8a,0x89,0x27,0xc0,0xa7,0x48,0x55,0x4f,0x8b,0x92,0x8f,0x8e,0x97,0x9d,0x19,0x1b,0x43,0x0f,0x39,0x8b,0x92,0x89,0x95,0x89,0x8b,0x2a,0x9e,0x8f -,0x93,0x95,0x96,0x80,0x8b,0x8c,0x92,0x91,0xac,0x13,0x25,0x35,0x0d,0x2b,0x94,0xbf,0xa0,0x23,0xbd,0x2c,0x07,0x1c,0x1b,0x1b,0x1c,0x15,0x44,0x16,0x20,0x1c,0x22,0x2a -,0x11,0x30,0xa5,0xbc,0x95,0x8a,0x98,0x8e,0xb7,0x9b,0xaa,0x15,0x1c,0x27,0x16,0x04,0x02,0x05,0x04,0x02,0x01,0x09,0x07,0x03,0x07,0x09,0x02,0x14,0xd2,0x78,0xa8,0xad -,0x8a,0x90,0x9f,0x8b,0x8e,0x91,0xa3,0x93,0x8d,0x98,0x8d,0x89,0x85,0x91,0xa6,0xb3,0xac,0x49,0x93,0x87,0x8b,0x84,0x86,0x81,0x84,0x88,0x87,0x87,0x8b,0x96,0x96,0x95 -,0x9d,0x9e,0x9f,0x9a,0x26,0x0b,0x09,0x08,0x02,0x08,0x0c,0x0d,0x0d,0x0e,0x21,0x0a,0x03,0x09,0x0e,0x0e,0x07,0x14,0x2e,0xa8,0x8f,0x87,0x85,0x8e,0x8f,0x91,0x9c,0x53 -,0x98,0x8b,0x90,0x9f,0xbb,0x44,0x0d,0x09,0x09,0x05,0x04,0x04,0x0d,0x0a,0x0c,0x15,0x12,0x16,0x08,0x0c,0x0b,0x0e,0x0f,0x27,0xac,0x9f,0x9e,0xa0,0x97,0xb1,0xae,0xa4 -,0x9b,0x98,0x9d,0x95,0x97,0xac,0xc1,0xb7,0x9e,0xc7,0x6d,0xb4,0x9c,0xa6,0x98,0x85,0x89,0x8b,0x8c,0x87,0x8d,0x94,0x8d,0x8d,0x8d,0x94,0x9a,0xae,0x2b,0x1f,0x16,0x1a -,0x0d,0x0a,0x0c,0x0f,0x0f,0x03,0x0b,0x0f,0x11,0x0c,0x15,0x44,0xa6,0x91,0x8a,0x83,0x83,0x84,0x83,0x89,0x8c,0x8e,0x88,0x8c,0xa4,0xcd,0x1c,0x0f,0x03,0x01,0x03,0x02 -,0x06,0x03,0x04,0x0d,0x0a,0x0c,0x0b,0x11,0x0f,0x0d,0x1c,0x1c,0x3f,0x7d,0xc1,0x4b,0x2e,0x2a,0x18,0x1b,0x28,0x37,0xd6,0x9a,0x8f,0xaa,0xae,0xa9,0xa9,0xb0,0xa2,0x90 -,0x92,0x92,0x8b,0x8a,0x8c,0x8d,0x93,0x8e,0x96,0x97,0x92,0x91,0x8e,0x8d,0x94,0xa2,0xb0,0xc3,0x54,0x2e,0x3a,0x45,0x2a,0x24,0x33,0x1e,0x18,0x12,0x1c,0x1e,0x15,0x1b -,0x26,0x6e,0x9d,0x93,0x97,0x8e,0x8a,0x88,0x88,0x8a,0x88,0x87,0x88,0x88,0x97,0xb3,0x31,0x19,0x12,0x08,0x07,0x08,0x06,0x05,0x06,0x07,0x05,0x06,0x0b,0x0d,0x09,0x0e -,0x18,0x1e,0x20,0x2d,0x27,0x14,0x13,0x15,0x19,0x18,0x24,0xec,0xc3,0xac,0xa3,0xa1,0xb1,0x67,0xce,0xb6,0xbf,0xa9,0x9b,0x96,0x8e,0x8c,0x8e,0x92,0x9a,0x99,0xa1,0x9f -,0x94,0x8f,0x90,0x8d,0x8e,0x9d,0xae,0xb8,0xac,0x54,0xdb,0x46,0x43,0xd4,0xd1,0x4a,0x1e,0x1a,0x1f,0x16,0x0e,0x0e,0x18,0x7b,0xa9,0x95,0x9c,0x99,0x8e,0x89,0x8a,0x8c -,0x88,0x86,0x86,0x87,0x89,0x92,0x9b,0x37,0x1e,0x0f,0x06,0x05,0x05,0x06,0x09,0x0c,0x07,0x06,0x0a,0x0f,0x09,0x0b,0x15,0x17,0x1b,0x4a,0xde,0x23,0x23,0x26,0x22,0x19 -,0x1f,0x37,0x5b,0x41,0xa1,0x9b,0xad,0xc7,0xc0,0xb1,0x4c,0xc2,0xa0,0x96,0x97,0x8f,0x91,0x94,0x9a,0x9e,0x9d,0x9e,0x9d,0x9a,0x91,0x96,0x98,0xa0,0xa8,0xa2,0xa9,0x7d -,0x53,0xe9,0xb3,0xbf,0xd0,0x4b,0x2a,0x20,0x21,0x1d,0x0f,0x13,0x22,0xcc,0xab,0x99,0x9e,0x9a,0x91,0x8d,0x8c,0x8b,0x87,0x82,0x87,0x89,0x87,0x8f,0x9d,0x46,0x26,0x11 -,0x0a,0x0a,0x0c,0x0b,0x08,0x08,0x06,0x04,0x04,0x05,0x08,0x0c,0x0e,0x15,0x21,0x2b,0x26,0x1b,0x1d,0x20,0x16,0x23,0x42,0xd8,0xb5,0xaf,0xa7,0xc4,0x4b,0x6d,0x25,0x2b -,0xcf,0xaf,0xa2,0x98,0x95,0x98,0x9e,0x9e,0xad,0xb4,0x98,0x91,0x91,0x8f,0x8b,0x8e,0x96,0x9d,0xad,0xb7,0xa4,0xb2,0xc5,0xb8,0xaa,0xcd,0x1e,0x15,0x12,0x10,0x11,0x16 -,0x11,0x12,0x25,0x5c,0x30,0x3f,0xb8,0xa1,0x9e,0x96,0x8b,0x86,0x84,0x84,0x84,0x85,0x88,0x8b,0x90,0x9e,0xae,0x3f,0x28,0x1a,0x13,0x0b,0x05,0x07,0x08,0x03,0x04,0x05 -,0x09,0x0d,0x12,0x16,0x11,0x11,0x18,0x1c,0x19,0x1d,0x31,0x3f,0x5f,0xa3,0xbc,0xcf,0x6f,0xbd,0xc1,0xc5,0xa6,0xaa,0xa8,0xa0,0x98,0xa7,0xc2,0xaa,0xae,0xb3,0xa4,0x9a -,0x93,0x93,0x8f,0x8f,0x96,0x99,0xa4,0xa8,0x98,0x91,0x94,0x98,0x94,0x9f,0xd0,0x3d,0x1d,0x12,0x15,0x1f,0x1f,0x15,0x1b,0x1d,0x14,0x13,0x13,0x1d,0x2e,0xbd,0x95,0x8c -,0x86,0x83,0x84,0x84,0x87,0x8c,0x91,0x8d,0x8c,0x8f,0x94,0x9b,0x3f,0x1a,0x0e,0x08,0x05,0x03,0x07,0x05,0x03,0x0a,0x0e,0x0c,0x0b,0x0b,0x0e,0x0a,0x0e,0x19,0x1b,0x26 -,0xc6,0xb3,0x4d,0x39,0xc5,0xf0,0x3f,0xd3,0xb4,0xa2,0xa0,0x9e,0xa4,0xaa,0xb2,0xad,0xc1,0xb4,0xb9,0xae,0x9f,0x96,0x97,0xa4,0x97,0x94,0x9c,0xac,0x9e,0x97,0x96,0x95 -,0x92,0x9e,0xb9,0xa7,0xb1,0x37,0x38,0x47,0x64,0x34,0x22,0x1a,0x0f,0x10,0x0e,0x0d,0x13,0x23,0x40,0xac,0x9a,0x95,0x94,0x8e,0x89,0x8b,0x87,0x85,0x84,0x84,0x86,0x88 -,0x95,0xb5,0x37,0x19,0x0d,0x09,0x0c,0x0a,0x07,0x08,0x09,0x06,0x03,0x05,0x06,0x07,0x0a,0x10,0x18,0x28,0x34,0x30,0x2e,0x20,0x20,0x24,0x2f,0x4c,0xb2,0xa3,0x99,0x9f -,0xaf,0xae,0xae,0xdd,0x47,0xbb,0xa1,0xb5,0xab,0x94,0x95,0x9a,0x9f,0x9b,0xa6,0xa5,0x9e,0x97,0x97,0x8d,0x88,0x90,0x9c,0xa8,0x9e,0xa9,0xc5,0x43,0x53,0x4c,0x56,0x37 -,0x1e,0x17,0x17,0x16,0x0d,0x0c,0x0f,0x1f,0x39,0xab,0x9d,0x98,0x97,0x90,0x8c,0x88,0x86,0x86,0x84,0x85,0x84,0x8b,0x93,0x9a,0xbe,0x24,0x17,0x0e,0x0b,0x06,0x08,0x09 -,0x05,0x06,0x06,0x05,0x04,0x06,0x0d,0x12,0x12,0x1d,0x20,0x1d,0x18,0x1c,0x23,0x23,0x3d,0xb7,0xae,0xa6,0xab,0xb2,0xae,0xbb,0xba,0xa9,0x9f,0x9a,0x99,0x94,0x94,0x96 -,0x9c,0xa2,0xa4,0xa9,0x9f,0x96,0x94,0x91,0x8e,0x95,0x99,0xb2,0xd9,0xbc,0xdc,0xaf,0xa9,0xa9,0xa8,0xc8,0x67,0x44,0x29,0x29,0x24,0x2f,0x2f,0x30,0xc9,0xe8,0x4b,0x50 -,0x37,0x30,0x1f,0x27,0x36,0x30,0xf3,0xb1,0xb1,0x55,0x3d,0x4c,0x34,0x2f,0x2c,0x2f,0x3e,0x31,0x36,0x3d,0x2b,0x24,0x29,0x21,0x1e,0x18,0x1c,0x22,0x28,0x2e,0x3d,0x3d -,0x2c,0x30,0x34,0x44,0x47,0xd1,0xb2,0xac,0xaf,0xc3,0xc4,0xb3,0xbf,0xb6,0xb0,0xae,0xba,0xbf,0xa7,0xa8,0xa7,0x9e,0x9b,0x9d,0xa2,0x9f,0x99,0x9d,0x9c,0x9a,0x9d,0x9f -,0xaf,0xaf,0xb2,0xd1,0xe1,0x5f,0x68,0x34,0x27,0x2b,0x24,0x21,0x25,0x21,0x21,0x21,0x1e,0x20,0x20,0x23,0x22,0x25,0x2b,0x23,0x2a,0x2f,0x2f,0x3d,0x4b,0x62,0x3c,0x30 -,0x62,0x5f,0x54,0x5e,0x76,0x65,0x43,0x3b,0x39,0x36,0x2c,0x27,0x23,0x25,0x1d,0x1e,0x27,0x28,0x2c,0x34,0x3f,0x31,0x2f,0xec,0xc4,0xb3,0xa7,0x9e,0x9e,0xa6,0xa9,0xa7 -,0xa0,0x9e,0x9e,0x9b,0x9a,0x9d,0x9b,0x96,0x96,0x96,0x90,0x8f,0x95,0x94,0x90,0x91,0x92,0x96,0x98,0x9a,0xa6,0xaf,0xb0,0xad,0xd2,0x39,0x3b,0x2d,0x28,0x20,0x22,0x1f -,0x1f,0x20,0x24,0x20,0x1c,0x1d,0x20,0x22,0x1b,0x1b,0x21,0x1e,0x10,0x0e,0x1a,0x21,0x10,0x22,0x22,0x1d,0x46,0x92,0xaf,0x00,0xaf,0x8f,0x6e,0x8b,0x1c,0x0b,0x0a,0x43 -,0x2c,0x16,0x1c,0x00,0x11,0x03,0x02,0x05,0x00,0x03,0x00,0x02,0x01,0x03,0x00,0x09,0xb3,0x8b,0xeb,0x3d,0x91,0x84,0x88,0x8d,0x82,0x88,0x81,0x80,0x80,0x83,0x83,0x80 -,0x81,0x85,0x85,0x85,0x88,0x82,0x80,0x81,0x89,0x8b,0x85,0x81,0x81,0x80,0x81,0x83,0x8a,0x9c,0x93,0x8f,0x9a,0x9f,0xc8,0xc8,0x19,0x03,0x02,0x09,0x0b,0x03,0x01,0x02 -,0x04,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x01,0x00,0x03,0x0c,0x0c,0x0b,0x12,0x37,0x4a,0x35,0xbf,0xa8,0x9a -,0xa0,0x97,0x8a,0x8f,0xa5,0xa1,0x87,0x80,0x80,0x82,0x81,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x80,0x80,0x83,0x84,0x81,0x81,0x84,0x8e -,0x8c,0x83,0x81,0x80,0x80,0x80,0x82,0x8c,0x8e,0x87,0x8a,0x91,0x9e,0xa9,0x48,0x0d,0x03,0x04,0x0d,0x0d,0x03,0x02,0x02,0x03,0x01,0x00,0x00,0x02,0x02,0x00,0x00,0x00 -,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x08,0x06,0x06,0x05,0x07,0x07,0x06,0x05,0x05,0x07,0x08,0x05,0x03,0x00,0x00,0x02,0x29,0x8e,0xa4 -,0x24,0x1c,0x38,0xaf,0xc8,0xcf,0x9b,0x8b,0x88,0x8a,0x8e,0x9d,0xa8,0x9e,0x8c,0x88,0x89,0x89,0x86,0x82,0x82,0x82,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x82,0x83,0x81 -,0x80,0x81,0x81,0x81,0x81,0x85,0x8b,0x8f,0x8b,0x85,0x84,0x85,0x89,0x8c,0x9a,0xaa,0x9c,0x94,0x9a,0xb6,0xd5,0xc4,0x4a,0x39,0x58,0x24,0x12,0x0e,0x12,0x13,0x1d,0x29 -,0x20,0x29,0xc1,0x9b,0x8e,0x8e,0x97,0x92,0x90,0x92,0x90,0x8d,0x8b,0x8c,0x94,0x9b,0xc4,0x1f,0x1f,0xc7,0x8d,0x87,0x8e,0xa5,0xad,0xa3,0x93,0x8d,0x8c,0x8b,0x87,0x88 -,0x8e,0x9b,0x54,0x28,0x1f,0x1c,0x0e,0x06,0x02,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x04,0x0a,0x0a,0x05,0x04,0x05,0x09,0x0f,0x0c,0x07,0x07,0x06,0x06,0x06,0x0c,0x14,0x1c,0x57,0x9f,0x92,0x8c,0x8a,0x87,0x85,0x85 -,0x83,0x82,0x81,0x81,0x81,0x81,0x84,0x88,0x89,0x84,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x86,0x88,0x85,0x85,0x87,0x8c,0x91 -,0x8b,0x86,0x87,0x89,0x8e,0x8e,0x84,0x80,0x80,0x80,0x81,0x83,0x82,0x81,0x81,0x81,0x84,0x87,0x8b,0x8d,0x9b,0xb0,0xae,0xa5,0xbb,0x16,0x06,0x02,0x02,0x03,0x06,0x04 -,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x04,0x05,0x04,0x08,0x09,0x06,0x0a,0x0a,0x0e,0x0d,0x05,0x05,0x02,0x03 -,0x06,0x13,0xba,0xbc,0xcf,0x4b,0x35,0xb1,0x9f,0x92,0x88,0x87,0x85,0x88,0x8a,0x8d,0x8b,0x83,0x86,0x85,0x88,0x8f,0x95,0x94,0x8a,0x8b,0x91,0x96,0x98,0x8a,0x89,0x87 -,0x8a,0x90,0x8f,0x8f,0x8f,0x99,0xa5,0xbd,0x27,0x1d,0x1c,0x14,0x19,0x27,0xd4,0x2b,0x16,0x0f,0x12,0x27,0xb8,0x8f,0x99,0xb1,0x3c,0x30,0x3e,0x24,0x3c,0x74,0x7d,0x23 -,0x0d,0x0a,0x0f,0x0f,0x1a,0x28,0x43,0x7b,0x2e,0x3c,0x44,0x54,0x26,0x21,0x22,0x1d,0x17,0x1b,0x11,0x0b,0x08,0x07,0x06,0x15,0x99,0x8f,0x8a,0x8f,0x90,0x9b,0x9e,0x92 -,0x8e,0x88,0x8c,0x96,0x94,0x9a,0xb2,0xc8,0xc5,0xb7,0x31,0x1b,0x18,0x1b,0x29,0xd4,0xa4,0x98,0x97,0x8e,0x89,0x86,0x83,0x82,0x82,0x82,0x80,0x80,0x81,0x81,0x82,0x82 -,0x89,0x99,0x92,0x8b,0x8b,0x8f,0x9f,0xa7,0x2f,0x1a,0x1b,0x1a,0x1e,0x0c,0x04,0x03,0x02,0x02,0x02,0x03,0x04,0x01,0x01,0x00,0x00,0x00,0x02,0x01,0x0c,0x2f,0x28,0x2d -,0x2d,0xa8,0xaf,0x28,0xbf,0xa8,0x9e,0x9a,0xb5,0xb1,0xe7,0x1f,0x1a,0x1d,0xe4,0x9d,0x9a,0x91,0x94,0x9c,0x97,0x9d,0x8e,0x89,0x89,0x8d,0x93,0x91,0x92,0x9b,0x8c,0x85 -,0x89,0x8f,0xc4,0xb8,0xa4,0xb4,0xad,0xac,0xa3,0xa1,0xc3,0xad,0xa0,0x9f,0xae,0xc5,0xb4,0xb3,0x44,0x21,0x19,0x11,0x0e,0x07,0x05,0x07,0x0e,0x13,0x0d,0x0a,0x0d,0x0b -,0x0f,0xba,0xa9,0xc8,0x1f,0x15,0x1b,0x18,0x15,0x1e,0x29,0x56,0x23,0x0f,0x10,0x0e,0x18,0x22,0x2d,0xc2,0xaf,0xaf,0xa4,0xa6,0xa8,0xb5,0x3c,0x35,0x52,0xc5,0x7a,0x1d -,0x1d,0x10,0x0e,0xd6,0xa2,0x98,0x95,0x8f,0x87,0x8e,0x95,0x91,0x8c,0x86,0x8f,0x9e,0xa6,0xb6,0x3f,0x20,0x22,0x21,0x16,0x0e,0x09,0x07,0x0b,0x0e,0x17,0x18,0x1d,0x39 -,0xc4,0xa0,0x8f,0x94,0x8b,0x81,0x81,0x80,0x82,0x84,0x83,0x85,0x8d,0x91,0x8f,0x88,0x8d,0x93,0x95,0xa2,0xbe,0x3c,0x34,0x2d,0x1e,0x12,0x0a,0x04,0x03,0x02,0x01,0x01 -,0x00,0x01,0x01,0x01,0x01,0x00,0x01,0x0a,0x12,0x23,0x2b,0x29,0xdd,0xe7,0x52,0xc3,0xbb,0x9f,0x9e,0xa9,0xad,0x38,0x38,0x39,0x31,0x3e,0x49,0xc3,0xa4,0x9f,0x98,0x8c -,0x89,0x8c,0x8f,0x8d,0x8c,0x8f,0x93,0x95,0x9b,0x8e,0x88,0x87,0x89,0x90,0x92,0x92,0x9d,0x9d,0x97,0x8d,0x86,0x8e,0x99,0x9c,0xa6,0xa3,0xab,0xbf,0xb3,0x60,0x3e,0x1f -,0x10,0x11,0x11,0x0f,0x0d,0x07,0x0a,0x0b,0x0e,0x1c,0x0d,0x22,0xd0,0xcf,0xac,0x28,0x1e,0x1e,0x14,0x15,0x0b,0x0c,0x1a,0x19,0x1e,0x1a,0x11,0x12,0x16,0x20,0xf4,0xda -,0xbe,0xb7,0xb0,0xae,0xbb,0xb2,0xaf,0xe3,0x30,0x27,0x16,0x1a,0x1d,0x19,0xeb,0xa6,0x9d,0x9b,0xa9,0x95,0x8c,0x8b,0x8a,0x8e,0x8d,0x86,0x89,0x8d,0x9b,0xac,0xc6,0x26 -,0x27,0x1f,0x1b,0x21,0x1a,0x17,0x18,0x14,0x1e,0x3c,0x36,0x33,0x3c,0x4a,0xa4,0x9f,0x8f,0x83,0x83,0x81,0x84,0x88,0x87,0x86,0x85,0x88,0x8b,0x8a,0x8a,0x8b,0x8b,0x95 -,0xa4,0xcc,0x36,0x2d,0x1d,0x18,0x10,0x0b,0x08,0x04,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x02,0x01,0x07,0x13,0x21,0x24,0x15,0x17,0x1c,0x27,0x41,0x39,0x70,0xaf,0xb7 -,0xdf,0x3c,0x45,0x5e,0x69,0xbf,0xc8,0xbc,0xad,0xa0,0x96,0x8f,0x93,0x8f,0x8d,0x8d,0x8e,0x91,0x96,0x94,0x93,0x9a,0x8a,0x85,0x84,0x85,0x8c,0x90,0x94,0x94,0x8f,0x8c -,0x8d,0x8f,0x92,0x96,0xa5,0xbf,0xc8,0xcf,0xc5,0x65,0x31,0x28,0x1f,0x24,0x26,0x1a,0x19,0x16,0x13,0x11,0x0e,0x11,0x0f,0x0f,0x0c,0x1d,0x42,0x4a,0x42,0x1c,0x19,0x10 -,0x0a,0x0d,0x0e,0x15,0x1f,0x1e,0x1e,0x1a,0x14,0x18,0x2b,0x37,0x2c,0x39,0x53,0xdb,0xbe,0xca,0xc2,0xbf,0xef,0x2e,0x25,0x21,0x2b,0x2a,0x4a,0x46,0xb5,0x9c,0x9d,0x8f -,0x97,0x9d,0xa2,0x9d,0x91,0x94,0x92,0x8f,0x92,0x99,0xad,0x3f,0x3a,0x42,0xdc,0x54,0x3b,0x2b,0x1f,0x1f,0x27,0x36,0x33,0x29,0x34,0x3b,0x43,0xaa,0xaa,0x9a,0x96,0x8f -,0x85,0x83,0x81,0x83,0x85,0x86,0x87,0x85,0x85,0x86,0x85,0x8c,0x92,0x9f,0xd0,0x32,0x1b,0x17,0x11,0x0a,0x07,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x03,0x02 -,0x04,0x03,0x05,0x0e,0x13,0x2a,0x1f,0x13,0x16,0x1b,0x4a,0xb4,0xb5,0xa8,0xaa,0x9d,0x99,0x9a,0x99,0xaa,0xa4,0xa1,0xa1,0x9e,0xa9,0xa9,0xa7,0xa1,0xa2,0xa4,0x9f,0x98 -,0x9b,0x99,0x94,0x90,0x8d,0x8d,0x85,0x83,0x83,0x86,0x8d,0x91,0x96,0x97,0x95,0x9b,0xa3,0xf7,0xf1,0xaf,0xc0,0x46,0x30,0x47,0xc2,0xbb,0xb9,0xac,0xc7,0x31,0x1f,0x19 -,0x1a,0x13,0x12,0x0c,0x0a,0x0d,0x0a,0x08,0x07,0x11,0x26,0x2a,0x2a,0x1b,0x13,0x14,0x1c,0x37,0x2a,0x1d,0x1d,0x25,0x25,0x1e,0x1c,0x18,0x17,0x1a,0x1c,0x23,0x2d,0x2f -,0x2a,0x31,0x53,0xbc,0xaa,0xa9,0x9f,0xad,0xa9,0xbc,0xbf,0x4a,0xae,0x9b,0x93,0x92,0xaa,0x72,0x32,0xdf,0xa4,0x9f,0x9d,0x9f,0xa0,0x9b,0x9e,0x98,0xa5,0xad,0xb7,0xae -,0xaa,0xd1,0xcd,0x2e,0x2d,0x28,0x26,0x2a,0x34,0x48,0xcd,0xae,0x99,0x8e,0x91,0x87,0x82,0x83,0x80,0x85,0x85,0x88,0x8d,0x92,0x95,0x97,0xad,0x52,0x22,0x1d,0x0e,0x08 -,0x06,0x08,0x0a,0x0a,0x09,0x05,0x06,0x07,0x0b,0x0d,0x0d,0x0e,0x0c,0x09,0x0d,0x11,0x16,0x17,0x1b,0x3a,0xb0,0xa4,0xad,0xb4,0xd3,0xbc,0x9c,0x8f,0x8d,0x94,0x9a,0x9f -,0xa0,0xaa,0xc1,0x38,0x2b,0x25,0x19,0x21,0x25,0x2b,0x29,0x35,0xc8,0xb0,0xa0,0xa8,0xb7,0xd3,0xa6,0x92,0x93,0x91,0x90,0x94,0xa1,0x41,0x39,0x2d,0x25,0x35,0x3c,0x41 -,0xd3,0xba,0xaa,0xc7,0x50,0xb2,0xb1,0xa1,0x9d,0xa5,0xa7,0xd1,0x39,0xe9,0xaf,0xa9,0xb7,0xbc,0x3d,0x2b,0x5f,0xad,0xa6,0x7b,0x52,0xc2,0xab,0xaa,0xd8,0x2c,0x16,0x13 -,0x15,0x26,0x34,0x24,0x29,0x21,0x2c,0x3c,0xda,0xc8,0x2f,0x2f,0x33,0x55,0x45,0x2b,0x28,0x1f,0x18,0x1c,0x1e,0x10,0x0f,0x10,0x1b,0x1a,0x26,0xc6,0xbc,0xad,0xc2,0xfb -,0x24,0x1e,0x2d,0xbb,0xa0,0x9d,0x9f,0x9a,0x9d,0x9a,0x95,0x94,0x8f,0x90,0x8d,0x8d,0x94,0x99,0x9c,0xaa,0xa4,0xb0,0xad,0xed,0x21,0x2f,0x3d,0xbf,0xae,0x9c,0x9a,0x95 -,0x92,0x92,0x93,0xa0,0xaa,0xa4,0x9c,0x96,0x99,0x9d,0xa5,0x43,0x34,0x4b,0x60,0x3c,0x2b,0x1f,0x1d,0x21,0x2c,0x1f,0x1c,0x1b,0x15,0x11,0x0c,0x0e,0x0e,0x0e,0x0c,0x10 -,0x23,0x25,0x4a,0x6d,0xbe,0xa5,0xad,0x97,0x95,0x95,0x8c,0x8f,0x91,0x97,0x98,0x9b,0xb9,0x20,0x11,0x0e,0x0e,0x0c,0x07,0x07,0x08,0x0b,0x08,0x07,0x05,0x04,0x07,0x08 -,0x0c,0x0c,0x0e,0x0f,0x1d,0x2c,0x31,0xd4,0xcd,0xab,0x9d,0x8e,0x88,0x89,0x88,0x86,0x87,0x87,0x89,0x89,0x8c,0x90,0x8f,0x92,0x91,0x92,0x95,0x95,0x98,0x91,0x8f,0x96 -,0x96,0x98,0x95,0x94,0x9b,0x93,0x97,0x99,0xa7,0xaf,0xae,0x54,0x59,0x3e,0x4b,0xbe,0xb1,0xc2,0x35,0x23,0x26,0x1d,0x1f,0x1b,0x16,0x10,0x07,0x07,0x09,0x0b,0x0d,0x0d -,0x0d,0x0d,0x0f,0x1d,0x22,0x1c,0x18,0x1f,0x25,0x3e,0x7d,0x3a,0x36,0x17,0x17,0x22,0x2b,0xc7,0x69,0x4e,0xbc,0xba,0xa3,0x9f,0xab,0xb7,0xce,0xd1,0xc9,0xaf,0xaf,0xba -,0x3c,0x23,0x2b,0x2e,0x3d,0xae,0xb3,0xac,0xa7,0x99,0x8e,0x96,0x95,0x96,0x90,0x96,0x9d,0x9c,0x9b,0x99,0x9c,0x99,0x93,0x94,0x91,0x8b,0x89,0x88,0x88,0x85,0x87,0x89 -,0x89,0x89,0x89,0x8b,0x90,0x99,0xa8,0xba,0xc1,0xbc,0x46,0x1f,0x1a,0x13,0x15,0x13,0x12,0x0d,0x06,0x05,0x04,0x04,0x05,0x05,0x04,0x03,0x02,0x02,0x03,0x05,0x04,0x04 -,0x05,0x07,0x0d,0x18,0x1e,0x1b,0x18,0x18,0x1b,0x2a,0x5f,0xc1,0xbc,0x4a,0x4a,0xba,0x9c,0x93,0x95,0x96,0x9a,0x9a,0x8f,0x89,0x87,0x88,0x8a,0x8b,0x8c,0x88,0x89,0x8a -,0x92,0x9e,0x9d,0x9b,0x96,0x97,0x9c,0xa2,0xa5,0xa2,0x9b,0x9e,0xa2,0xa1,0xa3,0xac,0xab,0xad,0xa6,0xae,0x35,0x1e,0x15,0x17,0x19,0x22,0x2f,0x2c,0x2c,0x3d,0x47,0x60 -,0x58,0x42,0x2f,0x2d,0x2b,0x20,0x1e,0x14,0x12,0x11,0x0e,0x0b,0x0b,0x0c,0x0f,0x11,0x18,0x17,0x10,0x19,0x25,0x2e,0x34,0x27,0x21,0x24,0x1e,0x27,0x4d,0xcd,0xc3,0xdb -,0xe4,0xc7,0xb0,0x9d,0x9d,0xac,0xc7,0xb6,0xa6,0xa5,0xa4,0xb8,0xe0,0x39,0x3b,0xad,0x99,0x8f,0x8f,0x8f,0x8d,0x87,0x82,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x83,0x85 -,0x8c,0x95,0x96,0x93,0x92,0x9d,0xcf,0x23,0x14,0x12,0x15,0x0e,0x07,0x04,0x02,0x01,0x02,0x02,0x02,0x01,0x00,0x01,0x01,0x03,0x07,0x0a,0x0b,0x0c,0x10,0x1f,0x2f,0x42 -,0x62,0xd2,0x4d,0x47,0xbd,0xab,0xa4,0xc7,0x41,0x55,0xed,0xc2,0xb1,0xa8,0xa2,0xa5,0x9e,0x99,0x96,0x90,0x8f,0x8e,0x8f,0x91,0x91,0x8f,0x8e,0x8f,0x90,0x91,0x95,0x93 -,0x90,0x8f,0x8d,0x8b,0x8c,0x96,0x99,0x96,0x93,0x95,0x9c,0xb0,0x67,0x2c,0x1e,0x1c,0x19,0x11,0x0f,0x0f,0x13,0x19,0x1f,0x28,0x1e,0x1d,0x23,0x35,0x4f,0xc9,0x49,0x2e -,0x1f,0x18,0x1e,0x26,0x20,0x18,0x11,0x0e,0x10,0x17,0x27,0x1f,0x17,0x13,0x11,0x12,0x14,0x16,0x17,0x12,0x0e,0x0f,0x18,0x20,0x1c,0x19,0x18,0x1e,0x3a,0xac,0xa3,0xaa -,0xaf,0xbc,0xc3,0xae,0xa0,0x98,0x98,0x9e,0x9d,0x97,0x8f,0x8b,0x89,0x88,0x87,0x85,0x82,0x82,0x82,0x83,0x83,0x85,0x85,0x85,0x85,0x88,0x8e,0x96,0x9b,0x9d,0xa1,0xa2 -,0xa9,0xe7,0x2d,0x25,0x19,0x0e,0x0b,0x0b,0x09,0x07,0x05,0x03,0x02,0x01,0x01,0x02,0x04,0x04,0x04,0x05,0x07,0x0a,0x0f,0x13,0x14,0x15,0x1d,0x24,0x2b,0x30,0x28,0x25 -,0x1f,0x38,0xaf,0xa0,0x9d,0xa6,0xa5,0x9e,0x95,0x8c,0x8b,0x8b,0x8e,0x8f,0x8f,0x8f,0x8f,0x90,0x94,0x95,0x94,0x95,0x99,0x9b,0x9c,0x9f,0x9d,0x97,0x93,0x94,0x95,0x99 -,0xa2,0xa7,0xab,0xb2,0xb3,0xab,0xa1,0xad,0xda,0x3a,0x33,0x3d,0x5c,0xb5,0xc5,0x33,0x27,0x24,0x2b,0x2a,0x29,0x27,0x1c,0x19,0x1b,0x1c,0x1c,0x19,0x17,0x1a,0x1e,0x33 -,0x30,0x21,0x1c,0x16,0x14,0x17,0x19,0x1d,0x1a,0x14,0x16,0x18,0x1c,0x21,0x1f,0x21,0x20,0x2f,0x47,0x31,0x3a,0x3a,0x44,0x46,0x40,0x52,0x4b,0x2d,0x22,0x2d,0x58,0xc1 -,0xad,0x9f,0x98,0x90,0x8b,0x89,0x8b,0x8b,0x88,0x85,0x83,0x82,0x83,0x84,0x87,0x8a,0x88,0x87,0x87,0x8a,0x8d,0x8f,0x92,0x8e,0x8f,0x9a,0xa9,0x4e,0x25,0x18,0x10,0x0c -,0x07,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x07,0x08,0x0a,0x0d,0x0f,0x12,0x14,0x17,0x1c,0x1b,0x19,0x1e,0x28,0x30,0x41,0xe0,0xba,0xaa,0x9b,0x93,0x96 -,0x99,0x99,0x96,0x93,0x91,0x92,0x94,0x9a,0x9f,0x9c,0x99,0x9a,0x9b,0x9b,0x9b,0x9a,0x8f,0x8c,0x8e,0x93,0x95,0x95,0x93,0x92,0x95,0x96,0x9f,0xac,0xa8,0xa7,0xa7,0xa9 -,0xaa,0xae,0xbc,0xb1,0xb6,0x3b,0x25,0x20,0x20,0x1e,0x1c,0x1a,0x16,0x11,0x15,0x18,0x1b,0x1a,0x17,0x1a,0x1f,0x32,0xea,0x42,0x2f,0x27,0x20,0x1e,0x1d,0x1b,0x15,0x10 -,0x13,0x16,0x18,0x19,0x18,0x17,0x18,0x1f,0x2d,0x29,0x29,0x29,0x2c,0x32,0x33,0x2e,0x1f,0x1b,0x1f,0x2a,0x30,0x39,0x54,0xc5,0xb2,0x9b,0x93,0x92,0x8f,0x8e,0x8b,0x89 -,0x87,0x86,0x86,0x87,0x86,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x84,0x85,0x88,0x8b,0x8d,0x90,0x95,0xa0,0xbc,0x2b,0x12,0x0d,0x0b,0x0a,0x08,0x06,0x05,0x04,0x05,0x07 -,0x05,0x03,0x03,0x03,0x05,0x06,0x06,0x08,0x07,0x06,0x07,0x09,0x0d,0x10,0x15,0x19,0x1d,0x2f,0xc1,0xb7,0xae,0xac,0xa7,0xa5,0xa3,0xa0,0xa1,0xa6,0xb1,0xab,0x9d,0x99 -,0x95,0x94,0x94,0x91,0x8e,0x8b,0x8c,0x8e,0x8f,0x8e,0x8d,0x8c,0x8f,0x93,0x9b,0xa4,0xa0,0x9e,0x9d,0x9c,0x9e,0x9e,0xa1,0x99,0x94,0x9b,0xa2,0xac,0xb1,0xcb,0x45,0x32 -,0x28,0x1d,0x17,0x18,0x1c,0x1b,0x18,0x18,0x18,0x1c,0x2a,0x3f,0x37,0x2f,0x35,0x32,0x2b,0x26,0x1f,0x17,0x0f,0x0e,0x13,0x14,0x15,0x14,0x15,0x17,0x17,0x1e,0x21,0x1b -,0x1a,0x1b,0x20,0x27,0x26,0x20,0x19,0x18,0x1c,0x1e,0x20,0x22,0x25,0x2e,0xfc,0xab,0xa5,0xaa,0xa9,0xa6,0xa1,0x9c,0x99,0x97,0x95,0x8f,0x8a,0x89,0x87,0x85,0x85,0x84 -,0x83,0x82,0x82,0x84,0x84,0x84,0x84,0x85,0x88,0x8b,0x96,0xa0,0xa7,0xbd,0x57,0x2e,0x1e,0x18,0x10,0x14,0x13,0x0b,0x07,0x05,0x05,0x05,0x04,0x04,0x03,0x02,0x02,0x03 -,0x04,0x04,0x05,0x06,0x08,0x0b,0x15,0x1a,0x1d,0x21,0x2a,0x37,0x44,0xfb,0xc5,0xcc,0x3e,0x44,0xba,0xaa,0xa3,0x9f,0x9e,0x9c,0x98,0x90,0x8f,0x93,0x94,0x8f,0x8e,0x8e -,0x8e,0x8f,0x91,0x99,0x9b,0x98,0x97,0x95,0x97,0x99,0x96,0x92,0x8d,0x8e,0x94,0x95,0x96,0x97,0x99,0x9b,0x9e,0xaa,0xca,0x4b,0x4a,0x42,0x3d,0x2e,0x29,0x26,0x2b,0x3f -,0x3d,0x32,0x28,0x2e,0x2f,0x2b,0x2a,0x20,0x17,0x14,0x10,0x16,0x1c,0x22,0x1a,0x11,0x1b,0x0e,0x25,0x8d,0x8f,0x01,0x16,0x85,0x1f,0x61,0x22,0x0e,0x13,0x09,0x0c,0x08 -,0x1a,0x01,0x06,0x08,0x00,0x08,0x01,0x0a,0x05,0x02,0x06,0x09,0x0b,0x08,0x0b,0x14,0x1f,0x1e,0xea,0x95,0x9e,0x8f,0x87,0x8b,0x8a,0x82,0x80,0x86,0x85,0x80,0x80,0x80 -,0x82,0x81,0x83,0x83,0x83,0x83,0x82,0x83,0x81,0x82,0x82,0x87,0x89,0x87,0x8a,0x8d,0x8d,0x97,0xa1,0x9e,0x4a,0x24,0x1f,0x16,0x12,0x0c,0x09,0x06,0x04,0x07,0x05,0x04 -,0x02,0x03,0x03,0x02,0x01,0x00,0x01,0x00,0x00,0x00,0x01,0x01,0x02,0x01,0x01,0x01,0x01,0x03,0x03,0x04,0x04,0x05,0x08,0x07,0x0e,0x1a,0x1e,0x1f,0x1d,0x3e,0xb0,0x9e -,0x97,0x8d,0x8b,0x89,0x85,0x85,0x83,0x83,0x82,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x81,0x80,0x80,0x80,0x80,0x81,0x80,0x81,0x81,0x80,0x81,0x81,0x83,0x82 -,0x82,0x83,0x84,0x84,0x84,0x88,0x89,0x8e,0x93,0x98,0xa6,0xac,0x3c,0x29,0x1a,0x19,0x0f,0x0a,0x08,0x07,0x05,0x02,0x02,0x01,0x03,0x00,0x01,0x00,0x01,0x00,0x00,0x00 -,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x01,0x02,0x02,0x01,0x02,0x03,0x04,0x05,0x08,0x08,0x0b,0x0e,0x12,0x17,0x1b,0x2d,0x2b,0x6c,0xd7,0xb6,0x98,0x97 -,0x92,0x8f,0x8e,0x8a,0x8c,0x8b,0x8b,0x8b,0x8a,0x89,0x88,0x89,0x89,0x89,0x8c,0x8d,0x8b,0x8d,0x89,0x8d,0x8b,0x8b,0x8c,0x8a,0x8d,0x8d,0x8d,0x8d,0x8c,0x8e,0x91,0x8b -,0x8c,0x8d,0x8d,0x8c,0x8a,0x8e,0x8e,0x92,0x8f,0x8e,0x8e,0x93,0x91,0x91,0x97,0x92,0x97,0x94,0x97,0x99,0x95,0x98,0x91,0x8e,0x91,0x90,0x94,0x8e,0x8f,0x90,0x8e,0x8f -,0x8c,0x8e,0x8d,0x8d,0x8b,0x8b,0x8c,0x8a,0x8c,0x8d,0x8f,0x91,0x8f,0x8e,0x8f,0x8f,0x94,0x98,0x99,0xa2,0xaa,0xb9,0xbd,0x3e,0x35,0x25,0x1c,0x17,0x0f,0x0e,0x0b,0x08 -,0x06,0x05,0x04,0x03,0x03,0x03,0x03,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x05,0x06,0x08,0x09,0x0c,0x0f,0x15,0x1d,0x29,0x3d,0xe0,0xad,0x9b,0x90,0x8d,0x89,0x87,0x86,0x84,0x83,0x82,0x82,0x81,0x81,0x81 -,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x84,0x84,0x86,0x86,0x87 -,0x89,0x89,0x8a,0x8b,0x8d,0x8e,0x93,0x99,0x9c,0x9d,0xa1,0xaa,0xb0,0xbd,0x6f,0x4a,0x34,0x2a,0x1e,0x18,0x17,0x14,0x0f,0x0d,0x0d,0x0d,0x0a,0x09,0x08,0x07,0x06,0x05 -,0x07,0x06,0x05,0x05,0x04,0x05,0x05,0x05,0x06,0x04,0x04,0x04,0x04,0x05,0x04,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0c,0x0d -,0x0e,0x0f,0x11,0x13,0x14,0x17,0x18,0x1c,0x1f,0x1f,0x29,0x28,0x29,0x28,0x29,0x3c,0x49,0xee,0xda,0xce,0xc3,0xbf,0xbb,0xae,0xab,0xa7,0xa1,0x9f,0x9b,0x9b,0x99,0x97 -,0x96,0x93,0x92,0x8f,0x8f,0x8e,0x8c,0x8c,0x8c,0x8d,0x8b,0x8b,0x8a,0x8b,0x8c,0x8d,0x8d,0x8c,0x8e,0x8f,0x91,0x92,0x95,0x97,0x98,0x9d,0xa0,0xa4,0xab,0xad,0xbc,0x4b -,0x39,0x36,0x2f,0x29,0x25,0x26,0x20,0x1c,0x1a,0x1b,0x1c,0x1b,0x1c,0x1c,0x19,0x1a,0x18,0x1a,0x1d,0x1c,0x21,0x22,0x23,0x25,0x28,0x2f,0x32,0x31,0x3c,0x65,0x56,0xd7 -,0xc1,0xb9,0xaf,0xae,0xa4,0xa6,0xa7,0x9f,0x9d,0x9b,0x9c,0x99,0x98,0x98,0x96,0x97,0x96,0x93,0x95,0x92,0x94,0x97,0x94,0x94,0x93,0x94,0x96,0x93,0x97,0x97,0x9a,0xa0 -,0xa3,0xaf,0xaa,0xae,0xba,0xc2,0x54,0x4b,0x38,0x33,0x2f,0x2b,0x2b,0x28,0x27,0x25,0x20,0x25,0x28,0x29,0x2d,0x2c,0x2b,0x26,0x24,0x2c,0x2d,0x2e,0x36,0x39,0x39,0x2f -,0x2f,0x37,0x35,0x37,0x3b,0x3a,0x3c,0x2f,0x31,0x3b,0x36,0x35,0x2e,0x37,0x3a,0x30,0x36,0x37,0x39,0x3b,0x37,0x3e,0x4e,0x4b,0x65,0x4e,0x5e,0xfd,0x5f,0xc7,0xca,0xbe -,0xb0,0xb8,0xb5,0xb7,0xba,0xb7,0xca,0xc3,0xbc,0xbe,0xbd,0xc2,0xc9,0xd1,0x51,0x50,0x58,0x68,0x55,0x3f,0x4f,0x46,0x3a,0x3e,0x3e,0x3d,0x35,0x30,0x32,0x30,0x33,0x31 -,0x2f,0x30,0x32,0x3b,0x3c,0x3b,0x3a,0x3f,0x40,0x3d,0x3e,0x56,0xe1,0x65,0xcf,0xdf,0x4f,0x71,0xe4,0xc9,0xd7,0x54,0xd1,0x7e,0xef,0xe7,0x69,0xec,0x4a,0x44,0x47,0x47 -,0x4a,0x40,0x44,0x48,0x3a,0x54,0x59,0x51,0x4f,0x4d,0x5d,0x56,0x4c,0x78,0xf8,0xe4,0xcd,0xd0,0xc1,0xe0,0xf9,0xee,0xed,0xd8,0xdc,0xde,0xd9,0x66,0xd9,0xd4,0x51,0x49 -,0x45,0x44,0x3f,0x3f,0x45,0x3d,0x39,0x3e,0x42,0x4c,0x44,0x3c,0x42,0x45,0x46,0x3e,0x41,0x7a,0x5a,0x70,0xff,0x55,0x53,0x5e,0x6c,0x5c,0x4a,0x5c,0xd2,0xde,0xcf,0xf5 -,0xe2,0x56,0x4d,0x53,0x5f,0x7c,0xf8,0xda,0xdf,0xe0,0xe2,0xca,0x66,0x4e,0x55,0xfe,0xed,0x52,0x4f,0x62,0x7e,0x73,0xfa,0xfc,0xda,0xe8,0xdd,0xe3,0x58,0x72,0xcb,0xc0 -,0xcc,0xdf,0xd5,0x6b,0x53,0x51,0x4d,0x6a,0x5c,0x7c,0x61,0x49,0x4f,0x4b,0x5d,0x54,0x47,0x57,0x6f,0x58,0x4d,0x59,0x68,0x6c,0xed,0xe1,0x6a,0x66,0x6b,0x5e,0x55,0x55 -,0xe8,0xdb,0xda,0xd8,0xda,0xdd,0x58,0x47,0x56,0xe5,0xeb,0xff,0x75,0x5a,0x51,0x51,0xf8,0x70,0x5d,0x55,0x4d,0x55,0x4d,0x53,0x52,0x52,0x5e,0xed,0x78,0x6a,0xe8,0x6c -,0xee,0xe8,0xcd,0xc4,0xd5,0xd2,0xd9,0xd4,0xee,0x52,0x5f,0x73,0x64,0x67,0x6c,0x65,0x59,0x54,0x68,0x66,0xec,0xef,0x5e,0x5e,0x65,0x67,0x56,0x58,0xe2,0xdb,0xd9,0xdc -,0xfa,0x63,0x4e,0x4c,0x59,0x73,0xdc,0xdd,0x6e,0x73,0x78,0x5f,0x5c,0x5e,0xf6,0xe7,0x6c,0x60,0x50,0x69,0x7d,0x72,0xf9,0x5c,0x5f,0x58,0x5e,0xee,0x67,0x66,0x6d,0xf6 -,0xd3,0xe7,0x64,0x6e,0xe9,0xe5,0xe6,0xda,0xd0,0xce,0xcc,0xec,0x66,0x7e,0x5e,0x66,0x6a,0x68,0x5b,0x50,0x52,0x65,0x68,0x7e,0x6d,0x68,0xea,0x6e,0x6e,0xee,0xf7,0x7a -,0xfd,0xe1,0xdc,0xec,0xce,0xd3,0xea,0xf3,0x70,0xdd,0xd6,0xd9,0xd1,0xed,0x76,0xe8,0xf2,0xef,0x6b,0xfb,0xe0,0x68,0x53,0x57,0x63,0xfe,0x5b,0x69,0x75,0x59,0x4f,0x4c -,0x54,0x58,0x57,0x5e,0x5e,0x6d,0xd9,0xe5,0x79,0x67,0x73,0xe4,0xdc,0xda,0xf6,0xf8,0xdd,0xdb,0xd5,0xeb,0x6c,0x6f,0x6b,0x6b,0x4d,0x4a,0x52,0x56,0x57,0x5f,0x61,0x6e -,0x68,0x58,0x5d,0x62,0x6f,0x65,0xf5,0xd2,0xd1,0xd3,0xdd,0x75,0x6c,0x79,0xdb,0xcf,0xd4,0xd0,0xd8,0xd7,0xd1,0xe8,0xe0,0xe4,0xf1,0xd9,0xde,0xee,0x59,0x5b,0xdc,0xea -,0xdf,0xde,0xf1,0x69,0x4d,0x4f,0x5a,0x5a,0x5e,0x65,0xfe,0xde,0x75,0xef,0xe8,0xf7,0xd9,0xd4,0xd7,0x6c,0x64,0xe0,0xdb,0xdf,0xe8,0x6e,0x55,0x51,0x5c,0x64,0x53,0x56 -,0x67,0x75,0x7e,0x66,0xe8,0xf6,0x6b,0xf8,0xfc,0xf6,0x5a,0x60,0xdf,0xe3,0xe1,0xf1,0x5b,0x51,0x4d,0x6c,0xdd,0xec,0xe0,0xed,0xfc,0xee,0x72,0xe7,0xf1,0x74,0xe2,0xea -,0x6f,0x5e,0x65,0xdb,0xd7,0xd2,0xd0,0x7e,0x62,0x62,0xe7,0xe6,0x5e,0x5e,0x67,0x79,0xf5,0x7d,0xe1,0xef,0x5d,0x65,0xfa,0xf8,0x6d,0x61,0xf2,0xeb,0x6f,0x6d,0x58,0x55 -,0x5e,0x70,0x7c,0x6b,0x62,0x63,0xff,0xdd,0xdc,0xe1,0x68,0x5f,0xf8,0xe3,0xec,0x6d,0x66,0x73,0xed,0xe2,0xd7,0x7b,0x59,0x5d,0x79,0xea,0xf4,0x6e,0xe3,0xe2,0xf1,0xf0 -,0xed,0xe2,0xf5,0xe4,0xdf,0xea,0x5d,0x58,0x5e,0xe4,0xd0,0xd9,0x6c,0x5a,0x65,0x5a,0x6b,0xed,0xde,0xdb,0xdd,0xde,0xee,0xde,0xda,0xde,0xd7,0xcc,0xd0,0x6d,0x6b,0xf6 -,0xd8,0xe0,0xfb,0x66,0x53,0x4f,0x4c,0x5e,0x6d,0x67,0x66,0xf6,0xe0,0xdf,0xdc,0xd3,0xd9,0xda,0xe4,0x77,0xf5,0xe7,0xe3,0xdf,0xe4,0xf2,0x67,0x4b,0x4c,0x6a,0xdd,0xf9 -,0x6b,0x5f,0xec,0x64,0xf4,0xd9,0xd9,0xda,0xef,0x74,0x69,0x69,0x72,0xf9,0xdd,0xd8,0xe4,0x59,0x4e,0x5a,0x6d,0xed,0x6d,0xcb,0x7c,0xee,0x6c,0xd0,0xdc,0x79,0x5a,0xf1 -,0x5a,0xcc,0x53,0xd3,0x4b,0x44,0xc9,0x49,0xbd,0x43,0xdb,0xda,0xd7,0x71,0xc6,0x51,0xc6,0xd4,0xc5,0xc8,0xdf,0xc9,0xf8,0xc6,0x59,0xd4,0x3f,0x62,0x3f,0xdf,0x3a,0x64 -,0x4a,0x3b,0x62,0x3e,0x68,0x40,0xbb,0xbf,0x52,0xc0,0xcd,0xbf,0xd6,0xc7,0xdd,0xfe,0xbe,0x46,0xcf,0xe6,0xcd,0xbd,0xd6,0x5d,0x47,0x58,0x68,0x59,0x65,0xd3,0xdd,0xd6 -,0x5e,0x5a,0x55,0x48,0xdd,0x54,0x46,0x50,0xe4,0x63,0x4c,0xd6,0xc6,0x46,0xda,0xf7,0x59,0xbf,0x50,0xcc,0x59,0xc9,0xcf,0xd1,0xc2,0xf5,0xbf,0x67,0x70,0x6a,0x67,0x7e -,0x4f,0x5a,0xd9,0x54,0xd4,0x4f,0x55,0xd2,0x57,0xcb,0x42,0x4d,0x54,0x7a,0xca,0xf7,0xcc,0xe5,0x47,0xed,0x46,0x4f,0xdd,0x6b,0x76,0xce,0xbd,0xd9,0x5e,0xdf,0xc4,0x78 -,0xbd,0x58,0xc2,0xf8,0x50,0xcb,0x3e,0xef,0x38,0x76,0xe4,0x46,0x56,0x4d,0x48,0x47,0x46,0xdb,0xd7,0x5c,0xcf,0x52,0xd7,0x58,0xe7,0xbd,0xf5,0xcb,0x71,0xc7,0x7d,0x5b -,0xd5,0x56,0xc2,0xe0,0x6b,0xd4,0x68,0xca,0xce,0xcf,0xcd,0x57,0xfc,0x3c,0x69,0xe1,0x46,0x40,0x41,0xeb,0x63,0x52,0x51,0x45,0x4e,0xed,0x48,0xdc,0x4a,0xc5,0xc2,0xd5 -,0xbf,0xef,0xbf,0xfb,0x65,0xce,0xcc,0xbe,0xc3,0x57,0xc3,0x4c,0x78,0x52,0x61,0xcd,0x3d,0xf7,0x3a,0x71,0xdf,0x58,0x74,0x5e,0x51,0xda,0xfd,0x73,0xde,0x4c,0x63,0x4f -,0xc4,0xc4,0x7d,0xc2,0xdd,0x5a,0x6f,0x46,0xcc,0x53,0xee,0xd7,0x58,0xbf,0x55,0xdf,0x49,0xe1,0xda,0x41,0xcb,0x5d,0xf2,0xdc,0x5c,0x56,0x4e,0x5b,0xe8,0x45,0xe0,0xe2 -,0x4c,0xcf,0x48,0xc4,0xc9,0xc8,0xd5,0x4d,0xce,0x44,0x5b,0xcd,0x42,0x5f,0xda,0xeb,0xc4,0x3b,0xd5,0x48,0xf0,0xc9,0x5b,0xbb,0x45,0xcf,0xd9,0xe6,0xc5,0xf9,0x4c,0xe9 -,0x4c,0xd9,0x45,0x39,0xdb,0x5f,0xca,0xfd,0xe5,0xec,0x4c,0xcf,0xe8,0x50,0xdc,0x47,0xbc,0xfd,0xdc,0xcc,0x47,0xcc,0x3a,0x61,0x61,0xe0,0xc0,0x5a,0xdd,0xfc,0x4b,0xce -,0x49,0xce,0xcc,0x57,0xc0,0x39,0xcc,0xcd,0x5b,0xbb,0xf9,0xd7,0x65,0x58,0xda,0x49,0x7a,0x4f,0x4a,0xc7,0x45,0xda,0xde,0x43,0xea,0x3f,0xc4,0x57,0x4d,0xce,0x58,0xbe -,0x4f,0xf3,0xc8,0x53,0xcb,0xef,0x64,0xca,0x4d,0xc4,0xdf,0xed,0xc8,0x52,0xcf,0x65,0xfa,0xd5,0x42,0xfd,0x64,0xe8,0xc7,0x48,0xcd,0x3b,0x3f,0x4f,0x3c,0xe4,0x4a,0x65 -,0xd5,0x5e,0x75,0x4d,0x52,0xca,0x64,0xdc,0xdc,0xe5,0xcf,0x75,0xbb,0xe3,0x72,0xbf,0x60,0xc1,0xea,0x5b,0xe5,0x4d,0x73,0x4d,0x67,0x61,0x49,0xce,0x4a,0x45,0x6c,0x3d -,0xcf,0xf2,0x5e,0xd8,0x64,0xd8,0xed,0xde,0xdd,0x3f,0xcd,0xd7,0x66,0xc3,0x5a,0xba,0xe4,0xcc,0xec,0x6d,0xcf,0x4f,0xde,0xe2,0x52,0x7c,0xe8,0x4e,0xcb,0x46,0xe7,0x43 -,0x5e,0x5d,0x50,0xc4,0x42,0xd6,0xfc,0xfb,0xdc,0x6d,0xd2,0xee,0x55,0xd7,0x67,0x6f,0xe9,0x55,0xc9,0x48,0xe7,0xf1,0x4c,0xce,0x44,0xe3,0xfe,0x4e,0xe2,0x59,0xcd,0xee -,0x55,0xc7,0x48,0xcf,0xe0,0x5b,0xd1,0x4a,0xb7,0xf9,0x78,0xc8,0x58,0xea,0x43,0x7d,0xdd,0x47,0xf9,0x58,0x6f,0xca,0x47,0xd2,0x55,0x64,0xdf,0x4d,0xbd,0x44,0x6f,0xbe -,0x44,0xca,0x5b,0x6d,0xd4,0x4a,0xca,0x47,0xda,0xe1,0x5a,0xcf,0x7c,0x5c,0xd0,0x52,0xdc,0x6a,0x56,0xc6,0x3b,0xba,0x5d,0xed,0xd7,0x51,0xd1,0x40,0xd3,0x4f,0x54,0xca -,0x48,0xdc,0xd2,0x44,0xdf,0x4a,0xd5,0x76,0x3f,0xd1,0x4a,0xcc,0xd1,0x50,0xb7,0x6f,0xe7,0xdc,0x47,0xd9,0x4c,0x73,0xcd,0x4c,0xba,0xdf,0x5f,0xd3,0x3d,0xbc,0x3f,0xdc -,0x61,0x51,0xb9,0x42,0xdf,0x53,0x62,0xfd,0x45,0xc9,0x61,0x41,0xca,0x3f,0xcf,0x66,0x69,0xce,0x52,0xc8,0x53,0xcd,0xcc,0x64,0xd5,0xed,0xdf,0xbc,0x6d,0xc5,0x54,0x67 -,0xde,0x35,0xc9,0x56,0x5c,0x6a,0x4a,0xe0,0x49,0x4f,0x4d,0x44,0xc5,0x55,0x47,0xcc,0x4a,0xce,0xf3,0xd0,0xc1,0x5d,0xbd,0xd6,0xdb,0xc2,0x64,0xd8,0x61,0xf3,0xcf,0x5a -,0xd1,0x3a,0x5b,0xce,0x3f,0xcb,0x52,0xd3,0xfa,0x42,0xd0,0x49,0xcd,0x67,0x4c,0xbc,0x3e,0x6b,0xdc,0x3f,0xbe,0x4e,0xcb,0xd9,0xee,0xc6,0xfd,0xd7,0xcf,0x4d,0xbe,0x52 -,0xcd,0xc5,0xd3,0x98,0x29,0xb5,0xb2,0x2f,0xc3,0x33,0xe8,0x2e,0x42,0xbe,0x2f,0x2f,0x69,0x39,0x4e,0x3c,0xbf,0xdb,0x6c,0xad,0x46,0x5f,0xbb,0xd4,0xcf,0xf4,0x4e,0x57 -,0xdf,0xc1,0x2c,0xdc,0xcf,0x31,0xee,0x3f,0x45,0x3f,0x67,0xdd,0x37,0x64,0x4f,0x3f,0xda,0x3d,0xef,0x4d,0x52,0x55,0x3a,0xcd,0x4f,0x41,0xd2,0x47,0xc9,0xc4,0x51,0xc4 -,0x58,0x46,0xdd,0xd7,0x4e,0xc5,0xcf,0x4a,0xc5,0xce,0x39,0xcf,0xcf,0xc7,0xdc,0xce,0xb3,0x69,0xff,0xba,0xfd,0xdb,0xb3,0xe0,0xbc,0x4c,0xb6,0x79,0xb6,0xb9,0x38,0xa9 -,0x6b,0xbd,0xc5,0x3e,0xb6,0x76,0x4f,0xb7,0x50,0xb9,0x52,0x3a,0xbc,0x32,0xcf,0x4c,0x51,0xcc,0x42,0xbe,0x3d,0xd8,0xbc,0x37,0xcc,0xba,0x3a,0xb5,0xcf,0x4d,0xae,0x38 -,0xe1,0xbe,0x4b,0xc4,0x53,0x36,0xcd,0x79,0x3e,0xd0,0x38,0x53,0xed,0x2f,0xcc,0x50,0x36,0xc8,0x34,0xbd,0x4d,0x3a,0xac,0x2b,0xbd,0x63,0x38,0xb7,0x3f,0xc0,0x55,0xde -,0xbb,0x38,0xb7,0x44,0xdf,0xb0,0x38,0xba,0x47,0x77,0xdb,0x30,0xd0,0xf6,0x2d,0x64,0x2f,0x3f,0x3b,0x2c,0xc5,0x27,0xbc,0x3d,0x73,0xac,0x3d,0xab,0xd5,0xb1,0xa9,0xbb -,0xab,0xb6,0xb7,0xb2,0xcd,0xd6,0x45,0x3d,0x4f,0x24,0x2d,0x26,0x27,0x30,0x1c,0x3e,0x35,0x32,0xdb,0x3d,0xac,0xb1,0xbe,0x9d,0xad,0x98,0x9d,0xa9,0x9d,0xae,0xa3,0x4d -,0x68,0x41,0x28,0x2c,0x1c,0x1f,0x1b,0x18,0x1d,0x1f,0x22,0x2b,0x2b,0xd4,0xb5,0xa7,0x9b,0x9f,0x93,0x96,0x98,0x99,0x9e,0x9d,0xae,0xc1,0xdf,0x28,0x2a,0x2c,0x13,0x17 -,0x12,0x19,0x18,0x15,0x1f,0x1d,0xcb,0xdf,0xc0,0x9e,0x9a,0x90,0x9a,0x97,0x94,0x98,0x98,0xad,0xa9,0xae,0x42,0x29,0x21,0x1e,0x18,0x0e,0x16,0x17,0x14,0x1a,0x1b,0x33 -,0x58,0xb9,0xae,0xa2,0x91,0x94,0x94,0x94,0x93,0x96,0x9d,0xa8,0xae,0xdb,0x2e,0x23,0x1d,0x17,0x0f,0x13,0x16,0x1a,0x15,0x1a,0x2e,0x4a,0xdc,0xaf,0x9f,0x95,0x92,0x91 -,0x92,0x96,0x90,0x9f,0xa2,0xaf,0xcc,0x3d,0x1f,0x1f,0x17,0x0f,0x13,0x17,0x16,0x18,0x19,0x2a,0x3e,0xd1,0xac,0xa8,0x94,0x91,0x94,0x91,0x95,0x92,0x9e,0xa2,0xac,0x51 -,0x3a,0x1e,0x1e,0x16,0x0e,0x16,0x14,0x1c,0x18,0x1a,0x37,0x3e,0xc0,0xa9,0x9f,0x95,0x92,0x96,0x92,0x99,0x96,0x9f,0xad,0xaf,0x4c,0x37,0x1d,0x1f,0x17,0x0f,0x16,0x19 -,0x1c,0x18,0x1b,0x32,0x59,0xc0,0xab,0xa1,0x93,0x97,0x96,0x95,0x96,0x96,0xa0,0xa9,0xae,0x59,0x30,0x1f,0x1c,0x16,0x0e,0x18,0x17,0x18,0x18,0x1d,0x38,0x3f,0xc6,0xaa -,0x9f,0x94,0x96,0x93,0x95,0x97,0x95,0x9e,0xa9,0xbd,0x52,0x30,0x1d,0x18,0x16,0x0f,0x17,0x17,0x1b,0x1b,0x1d,0x45,0xd5,0xca,0xa0,0x9e,0x92,0x93,0x97,0x96,0x98,0x95 -,0xa3,0xab,0xbe,0x3a,0x29,0x1d,0x16,0x17,0x0e,0x17,0x1b,0x1c,0x1d,0x1e,0x4e,0xc7,0xb4,0x9f,0x9c,0x92,0x92,0x98,0x95,0x96,0x98,0xa6,0xb5,0xcf,0x36,0x23,0x1a,0x14 -,0x15,0x0f,0x15,0x1a,0x23,0x1d,0x21,0x4e,0xb4,0xae,0xa6,0x9a,0x93,0x90,0x98,0x99,0x98,0x98,0xa5,0xaf,0xbe,0x61,0x21,0x1b,0x18,0x16,0x12,0x16,0x1a,0x1d,0x23,0x24 -,0x40,0xbd,0xad,0xa2,0x99,0x95,0x96,0x98,0x9a,0x9e,0x9d,0xa9,0xc0,0xfc,0x3d,0x29,0x1b,0x17,0x18,0x0e,0x14,0x1b,0x1d,0x27,0x29,0x53,0xbb,0xac,0x9e,0x9c,0x95,0x90 -,0x99,0x97,0x99,0x9b,0xa4,0xb9,0xae,0xae,0x23,0x0d,0x18,0x28,0x08,0x0d,0x1a,0x1d,0xac,0xa2,0xcf,0x3c,0x3b,0xa2,0x89,0x8f,0xb0,0xa3,0x8e,0xa8,0xbf,0x97,0xa2,0x37 -,0xe3,0x50,0x18,0x0c,0x14,0x4f,0x25,0x17,0x14,0x16,0x20,0x22,0xa4,0xa0,0x2f,0x4a,0x97,0x8b,0xb0,0x2a,0x99,0x81,0x82,0x8c,0xaf,0x2a,0x35,0x1e,0x09,0x01,0x0a,0x09 -,0x11,0x18,0x04,0x0b,0x8e,0x84,0xab,0xbc,0x99,0x88,0x82,0x8b,0x42,0xb5,0x91,0x8e,0xaf,0x19,0x1d,0xb2,0x9b,0x0f,0x00,0x09,0x1e,0x11,0x14,0x0f,0x1d,0x94,0x8f,0x9d -,0x2e,0xb6,0x91,0x88,0x8c,0xb9,0x3c,0x9f,0x97,0xa6,0x45,0xad,0xac,0x3a,0x25,0x11,0x12,0x16,0x3b,0x2f,0x1d,0x1c,0x19,0x26,0xa3,0xa4,0x33,0xad,0xa8,0x9e,0x93,0xa1 -,0x3e,0x9c,0x86,0x85,0x90,0xc3,0x26,0x2c,0x1b,0x07,0x03,0x07,0x10,0x19,0x19,0x0e,0x17,0x8d,0x85,0xa2,0x49,0xac,0x8b,0x82,0x8f,0x30,0x40,0x95,0x9c,0xdd,0x35,0x26 -,0xba,0xa6,0x10,0x04,0x03,0x13,0x3b,0x1b,0x0f,0x1b,0x95,0x8b,0x98,0x55,0xaf,0x8f,0x88,0x8e,0xb3,0x2e,0x54,0x9a,0xb6,0x1f,0x53,0x9f,0xda,0x12,0x09,0x1a,0x34,0x3b -,0x21,0x1c,0x1d,0x16,0x26,0x9d,0x9e,0x57,0x9d,0x9a,0xac,0xa3,0x97,0xa0,0x9f,0x93,0x8d,0x8e,0xa5,0x22,0x25,0x1d,0x08,0x05,0x09,0x0f,0x10,0x1c,0x23,0x1c,0xb0,0x88 -,0x8d,0xbd,0xcb,0x91,0x82,0x8c,0xc4,0xd6,0x9e,0xa5,0x3a,0x2f,0xc3,0x3f,0x3e,0x17,0x07,0x03,0x0b,0x3b,0x33,0x13,0x1c,0x9d,0x8f,0x92,0xb3,0x9a,0x8d,0x8d,0x92,0xa9 -,0xd4,0x63,0xa0,0xb2,0x20,0x2c,0x9f,0x72,0x12,0x09,0x1b,0x33,0x1f,0x2b,0x2c,0x22,0x14,0x21,0xa6,0xa4,0x49,0xa2,0x98,0xa9,0xb6,0x9b,0x8e,0x96,0xa2,0x96,0x8e,0x9a -,0xef,0x31,0x1c,0x0b,0x08,0x07,0x08,0x0f,0x1e,0x21,0x1c,0x35,0x8f,0x8c,0xa1,0xb4,0x95,0x86,0x8c,0x9d,0xa0,0xa8,0xda,0x43,0xc5,0xa5,0x54,0x35,0x20,0x0a,0x04,0x06 -,0x1c,0x33,0x15,0x1c,0xcc,0x9d,0x8f,0x97,0x91,0x92,0x92,0x8f,0x9e,0x5e,0x4c,0x9d,0xb3,0x1a,0x22,0xa8,0xca,0x16,0x0b,0x1b,0x34,0x1e,0x27,0x2e,0x1d,0x19,0x2b,0xa7 -,0xa5,0xc8,0x9b,0x9e,0xc2,0xad,0x99,0x8e,0x94,0x9e,0xa1,0xa7,0xa1,0x9d,0xae,0x1c,0x09,0x0a,0x0a,0x05,0x08,0x1e,0xb9,0x61,0x35,0xa1,0x8f,0x98,0xa0,0x9c,0x8c,0x8c -,0x96,0x9f,0xbc,0x3f,0x33,0xf7,0xa9,0xb5,0x2e,0x18,0x0b,0x09,0x09,0x0f,0x1f,0x28,0x2e,0x63,0xab,0x95,0x8d,0x8f,0x91,0x98,0x9a,0x9f,0x67,0x46,0xb9,0xc2,0x21,0x24 -,0xb1,0xb3,0x26,0x14,0x1a,0x41,0x26,0x1a,0x26,0x2d,0x2d,0x30,0x4f,0xae,0xad,0xac,0x9f,0xbf,0xaf,0x97,0x90,0x95,0xad,0xc8,0xc0,0xa5,0x9c,0xa8,0x33,0x14,0x0c,0x0c -,0x06,0x06,0x1e,0xb9,0xbe,0x3d,0xc6,0x95,0x95,0xa4,0x9d,0x98,0x8f,0x93,0xa3,0xb4,0x32,0x7b,0xbf,0xb0,0xac,0xd0,0x38,0x12,0x07,0x0a,0x0e,0x11,0x2c,0x38,0x4c,0xce -,0xaa,0x8c,0x8c,0x97,0x9d,0x9f,0xa0,0x6e,0x2f,0xbc,0xc7,0x3e,0x29,0xca,0xa1,0xbb,0x47,0x2b,0x20,0x24,0x16,0x0e,0x42,0xeb,0x6d,0x4a,0x2f,0x9d,0xb4,0x2d,0x2d,0x5d -,0x95,0x9c,0xa6,0x9d,0xa9,0xa2,0xac,0x96,0x93,0xaf,0x2e,0x11,0x0c,0x07,0x04,0x09,0xaa,0x98,0xd3,0xc7,0xa4,0x8d,0xa4,0x26,0xbd,0x99,0x9a,0xbf,0x3c,0xa3,0xa7,0xac -,0xa5,0x98,0x9e,0x29,0x19,0x0e,0x0a,0x07,0x08,0x0a,0xa5,0x9b,0xeb,0x91,0x8c,0x84,0x98,0x28,0xb6,0xbe,0x3a,0x21,0x29,0x9f,0xe4,0x32,0xbc,0x9e,0x9d,0x36,0x62,0x3d -,0x1d,0x10,0x0a,0x0c,0x9e,0xa0,0x2e,0x9f,0xa5,0x99,0x25,0x11,0xc4,0xa9,0xaa,0xa8,0x9f,0x94,0xb3,0xa7,0x94,0x92,0x9e,0x20,0x25,0x0e,0x06,0x05,0x09,0x0f,0x97,0x90 -,0x71,0x95,0x99,0x92,0x3c,0x1a,0xb5,0xa7,0xea,0xe5,0xa5,0x97,0xa4,0xa5,0x96,0x9f,0x43,0x17,0x1f,0x0e,0x08,0x08,0x10,0x0c,0xaf,0x8c,0xa7,0x86,0x8d,0x8a,0xaa,0x11 -,0x3d,0x33,0x24,0x24,0x41,0xa4,0x61,0xdd,0x9c,0x9c,0xa3,0x3e,0xad,0x2e,0x12,0x0e,0x19,0x0e,0x41,0x90,0x3b,0x9d,0x5a,0xad,0x34,0x0d,0xcc,0x9f,0x9f,0xb1,0xa4,0x92 -,0x9d,0xa0,0x93,0x99,0xb0,0x1a,0x20,0x0e,0x08,0x08,0x18,0x14,0x29,0x8a,0xb5,0x95,0xa7,0x9f,0xaf,0x0e,0x6c,0xaa,0xad,0xbf,0x9c,0x8a,0x97,0xa6,0x9e,0xb2,0x34,0x0e -,0x19,0x12,0x09,0x0a,0x13,0x15,0x1e,0x86,0x8d,0x8c,0x8d,0x96,0xa3,0x0b,0x18,0x3f,0x28,0x24,0xdd,0x99,0xa4,0xb3,0x95,0x95,0x9f,0x4a,0xc3,0x3a,0x0f,0x0d,0x18,0x18 -,0x0e,0x97,0xa2,0xfa,0xb7,0x5b,0xad,0x10,0x2c,0x9e,0xa8,0xbf,0xa4,0x8c,0x92,0x9d,0x95,0x9a,0xcd,0x19,0x1b,0x1a,0x09,0x0c,0x15,0x1c,0x0b,0x9a,0x8c,0xac,0x9b,0xb2 -,0x9a,0x16,0x1c,0xa2,0xa7,0xa9,0x9e,0x8a,0x94,0xba,0xa8,0xb7,0x26,0x12,0x16,0x1f,0x0a,0x0b,0x16,0x27,0x15,0x98,0x81,0x97,0x91,0xa6,0xa1,0x16,0x0a,0x3c,0x37,0x29 -,0x3a,0x97,0x90,0x9f,0x95,0x90,0xa6,0xd9,0x2e,0x71,0x16,0x0c,0x17,0x1c,0x09,0x22,0x8e,0x4a,0xc1,0x44,0xaa,0x30,0x12,0xae,0xaa,0xb1,0xab,0x8d,0x89,0x98,0x99,0x97 -,0xc3,0x2d,0x17,0x2a,0x12,0x0a,0x10,0x17,0x0c,0x1b,0x87,0xab,0xaf,0xb2,0xa6,0xc5,0x11,0xab,0x9b,0xa6,0x9f,0x8d,0x8d,0xa6,0xb2,0xa4,0x26,0x15,0x11,0x1d,0x0f,0x09 -,0x18,0x2e,0x1c,0x33,0x81,0x94,0xa6,0x9e,0xa8,0x4e,0x07,0x1f,0xd5,0x1f,0x3b,0x93,0x8a,0x96,0x9b,0x8d,0xa8,0x2e,0x27,0x3b,0x1c,0x0b,0x12,0x1d,0x0e,0x0c,0x8b,0x9e -,0x3e,0xaa,0xac,0xa9,0x0c,0x2b,0x9b,0xcf,0xb6,0x8e,0x88,0x98,0xa8,0x93,0xae,0x1f,0x19,0x27,0x18,0x09,0x0e,0x1b,0x18,0x0d,0x8b,0x94,0x38,0xa1,0xa9,0x9d,0x13,0x3d -,0x90,0xb1,0xb1,0x90,0x8d,0xa4,0xcb,0xa4,0x2f,0x11,0x11,0x1e,0x15,0x0d,0x1e,0x3d,0x3c,0x1c,0x88,0x8d,0xdf,0x99,0xb2,0xdd,0x08,0x12,0xcd,0x1b,0x3b,0x90,0x8a,0x92 -,0x99,0x8d,0xa4,0x2b,0x32,0x36,0x1c,0x0c,0x14,0x18,0x0e,0x0b,0x8e,0x97,0x2c,0x9f,0xa6,0xb1,0x0d,0x29,0x9d,0x4e,0xae,0x8c,0x8a,0x96,0xa2,0x8f,0xaf,0x19,0x1c,0x1f -,0x13,0x05,0x0f,0x1c,0x10,0x10,0x8a,0x93,0x35,0x9c,0x99,0xa4,0x15,0xd6,0x91,0xb6,0xae,0x8c,0x8e,0xa3,0x3e,0xa6,0x27,0x0a,0x11,0x1e,0x16,0x0b,0x26,0xbe,0x23,0x2a -,0x82,0x9a,0xc7,0x9d,0xb6,0x30,0x07,0x23,0xca,0x22,0xac,0x8b,0x8d,0x96,0x9f,0x8f,0xda,0x1e,0x28,0x2f,0x12,0x0b,0x18,0x17,0x0d,0x1f,0x84,0x44,0xc3,0x97,0xb3,0x48 -,0x15,0xb0,0xa6,0x3f,0x99,0x8b,0x97,0x9d,0xa0,0x95,0x2a,0x1a,0x21,0x1c,0x09,0x0a,0x13,0x17,0x0c,0xd6,0x83,0x28,0x9e,0x90,0x9c,0xdd,0x1f,0x9a,0xa1,0x53,0x9a,0x8d -,0x9b,0xc8,0xc0,0xb3,0x0f,0x10,0x18,0x1d,0x0b,0x0f,0x3a,0x3d,0x18,0x94,0x82,0x4f,0x9b,0x99,0xb7,0x10,0x0e,0x4e,0x3f,0x27,0x97,0x8b,0x93,0xa1,0x97,0x9a,0x1b,0x34 -,0x2f,0x15,0x0b,0x0e,0x1f,0x1c,0x0c,0x8c,0x8f,0x22,0x9b,0xa8,0xbc,0x10,0x23,0xa0,0x4f,0xaf,0x8d,0x8c,0x92,0xa2,0x90,0x65,0x1a,0x27,0x16,0x0e,0x08,0x10,0x1a,0x0e -,0x15,0x86,0xa9,0x39,0x8f,0x96,0xb7,0x21,0x9e,0x93,0xc5,0x9f,0x8d,0x9c,0xae,0x4e,0xb9,0x16,0x0e,0x20,0x17,0x0b,0x13,0x1d,0x32,0x17,0xa9,0x80,0xea,0x9b,0x96,0xba -,0x1a,0x0f,0xb9,0xb7,0x24,0x9a,0x8e,0x9e,0x9f,0x9e,0x9d,0x23,0x2d,0x4f,0x1b,0x0a,0x13,0x1b,0x1b,0x0d,0x97,0x8a,0x2d,0x9f,0xa4,0xb3,0x18,0x20,0x9f,0xe8,0x3f,0x8c -,0x96,0x99,0x9c,0x97,0xa4,0x1c,0x37,0x1f,0x0e,0x08,0x0f,0x11,0x12,0x0e,0x88,0x94,0x30,0x8e,0x9b,0xab,0x21,0xb2,0x94,0xdf,0xa1,0x8a,0xb3,0xaf,0xb6,0xb6,0x1b,0x0e -,0x25,0x19,0x0d,0x0f,0x1b,0x26,0x1f,0xb3,0x80,0xa6,0xa7,0x90,0xd6,0x1d,0x15,0x60,0xb6,0x1c,0x9a,0x8d,0xba,0xa6,0x9f,0x97,0x29,0x2b,0x4f,0x21,0x0d,0x0f,0x1b,0x1d -,0x11,0x99,0x88,0x28,0x9b,0x9f,0x47,0x1f,0x1d,0xa3,0xb1,0x29,0x8d,0x8f,0xac,0x9a,0x95,0xa7,0x18,0x31,0x2f,0x0f,0x09,0x0d,0x1c,0x0f,0x10,0x89,0x95,0x2a,0x8f,0x99 -,0x3b,0x29,0xbe,0x91,0x59,0xad,0x8a,0xb0,0xc7,0xb1,0xa9,0x1e,0x14,0x1f,0x21,0x12,0x0e,0x27,0x2b,0x15,0xa5,0x80,0xb1,0xab,0x8d,0xb4,0x17,0x13,0xca,0xbd,0x17,0x98 -,0x94,0x58,0x9e,0xa5,0x9b,0x23,0x25,0xec,0x1c,0x0b,0x15,0x25,0x2a,0x13,0x8e,0x8b,0x1f,0x96,0xa4,0x2a,0x0e,0x2b,0xaa,0x30,0x4c,0x8b,0x9b,0xa6,0x98,0xa0,0xa0,0x25 -,0x3a,0x22,0x16,0x0c,0x0c,0x17,0x14,0x15,0x87,0x98,0x48,0x8e,0xae,0x43,0x1f,0x38,0x9b,0xb0,0xaa,0x8b,0xb4,0xb5,0xee,0xf2,0x3a,0x18,0x2b,0x1f,0x15,0x0f,0x14,0x42 -,0x1a,0xbc,0x81,0xae,0xa1,0x90,0xc7,0x21,0x14,0x29,0xb7,0x20,0xa4,0x92,0xb3,0x9f,0xad,0xa9,0xcc,0x5e,0x29,0x2b,0x19,0x0e,0x19,0x31,0x12,0x9b,0x84,0x32,0x9e,0x9e -,0x29,0x18,0x17,0x2d,0xcd,0x2b,0x8f,0x93,0xb2,0x93,0xa0,0xa8,0x4f,0x48,0x27,0x1a,0x0e,0x0f,0x12,0x15,0x11,0x88,0x91,0x22,0x89,0xa2,0x26,0x1f,0x38,0xad,0x45,0xaf -,0x8b,0xb8,0xbe,0xa1,0xc1,0x2f,0x20,0x35,0x26,0x15,0x0f,0x17,0x1f,0x19,0x3f,0x80,0xa6,0xb4,0x8c,0x42,0x1a,0x1b,0x2d,0x47,0x2a,0xa5,0x8e,0xcb,0x9f,0xa1,0xb6,0x3d -,0x3a,0x4a,0x22,0x18,0x19,0x16,0x1e,0x16,0x98,0x83,0x2d,0x94,0x9a,0x1c,0x19,0x16,0x31,0x29,0x2b,0x8e,0x98,0xac,0x93,0x9f,0xa8,0x3d,0x59,0x36,0x17,0x11,0x0e,0x0f -,0x19,0x12,0x8a,0x8c,0x37,0x8b,0x9e,0x28,0x21,0x25,0xc1,0x35,0xcd,0x8d,0xb5,0xa8,0xa2,0xca,0xe5,0x29,0x35,0x21,0x15,0x13,0x13,0x1b,0x1f,0x2f,0x81,0xa0,0xa8,0x8a -,0x3a,0x23,0x1c,0x1c,0x3d,0x23,0xaa,0x90,0xe4,0x99,0x9f,0xad,0x7e,0x56,0x39,0x1f,0x16,0x19,0x13,0x1c,0x1b,0xab,0x83,0x59,0x96,0x96,0x21,0x1c,0x18,0x21,0x32,0x2a -,0x92,0x97,0xaf,0x90,0x9d,0xaa,0x66,0xb4,0x26,0x18,0x13,0x0e,0x0d,0x19,0x11,0x90,0x8a,0x31,0x8a,0x9b,0x23,0x2a,0x2d,0x36,0x36,0x62,0x8f,0xac,0xb2,0x95,0xaf,0xd6 -,0x67,0x7a,0x21,0x17,0x13,0x13,0x11,0x1c,0x1c,0x88,0x94,0x58,0x87,0xac,0x1c,0x25,0x25,0x27,0x27,0xd2,0x91,0xbe,0xa8,0x97,0xa9,0x4a,0xb3,0xc3,0x21,0x1e,0x14,0x11 -,0x1a,0x16,0x24,0x82,0xb8,0xaf,0x87,0x47,0x15,0x1f,0x20,0x23,0x25,0xa8,0x90,0xbe,0x98,0x96,0xa1,0xcf,0xa8,0x51,0x1d,0x12,0x0e,0x0d,0x15,0x0d,0xc6,0x82,0x32,0x93 -,0x89,0x3d,0x1f,0x2e,0x26,0x2b,0x29,0x9d,0x9c,0xba,0x99,0x9b,0xa6,0xdb,0xa6,0x2d,0x1d,0x13,0x0e,0x0e,0x1c,0x0c,0x9b,0x87,0x24,0x8c,0x8e,0x2d,0x25,0x25,0x22,0x2a -,0x25,0x99,0xab,0xaf,0x96,0xa5,0xa5,0xad,0xb2,0x2b,0x29,0x11,0x11,0x14,0x1a,0x11,0x8b,0x8f,0x32,0x8b,0x9f,0x25,0x1b,0x24,0x1f,0x2f,0x40,0x98,0xa8,0xa1,0x98,0x9c -,0xac,0xaa,0xc0,0x1e,0x1b,0x0f,0x0e,0x12,0x13,0x1c,0x83,0xa9,0xac,0x89,0xac,0x33,0x21,0x2e,0x2a,0x24,0xb6,0x9c,0xf0,0x9b,0x9f,0xa1,0xb7,0xad,0x4c,0x1f,0x18,0x11 -,0x0f,0x19,0x0e,0xb6,0x83,0x32,0x93,0x8d,0x54,0x27,0x25,0x26,0x21,0x27,0xa3,0xa9,0xc0,0x98,0xa6,0xa2,0xb7,0xae,0x37,0x1e,0x19,0x12,0x0f,0x1f,0x10,0x90,0x89,0x2c -,0x8a,0x9b,0x2a,0x22,0x1f,0x24,0x29,0x2d,0x9a,0xb4,0xae,0x99,0xa3,0xa7,0xae,0xb1,0x25,0x1f,0x15,0x0e,0x10,0x1b,0x14,0x87,0x9a,0x40,0x87,0xa8,0x2b,0x2a,0x28,0x28 -,0x26,0x43,0x9a,0x6d,0x9f,0xa2,0x9d,0xab,0xbc,0xb5,0x23,0x1b,0x15,0x0f,0x17,0x14,0x21,0x81,0x53,0xad,0x86,0xdf,0x27,0x2d,0x23,0x2c,0x24,0xbf,0x9c,0x67,0xa1,0xa2 -,0xa3,0xb6,0xad,0x59,0x32,0x1a,0x13,0x13,0x1a,0x12,0x55,0x83,0x2e,0xa7,0x88,0x47,0x26,0x44,0x2b,0x2f,0x29,0xb9,0xa0,0x4a,0x9f,0x9e,0xab,0xab,0xab,0x36,0x33,0x17 -,0x11,0x12,0x1b,0x0f,0xba,0x85,0x21,0x97,0x8b,0x38,0x28,0x2f,0x26,0x25,0x24,0xa7,0xa3,0xc2,0x95,0x9a,0xa2,0xae,0xa2,0x3c,0x22,0x18,0x14,0x0e,0x1b,0x0c,0x9c,0x8a -,0x1b,0x8d,0x95,0x29,0x29,0x3e,0x28,0x2a,0x32,0xa1,0xb7,0xd6,0x9a,0x9a,0xa5,0xa8,0x9e,0x3b,0x27,0x15,0x14,0x12,0x1a,0x0a,0x90,0x91,0x18,0x8b,0x94,0x28,0x3b,0xbd -,0x23,0x2e,0x31,0xa6,0xbb,0xbf,0x9a,0x99,0xa1,0xa5,0xbd,0x30,0x21,0x0e,0x12,0x18,0x19,0x0d,0x8c,0x95,0x1e,0x8a,0x97,0x1d,0x31,0x64,0x21,0x2c,0x3f,0x9c,0xd8,0xbe -,0x91,0x9d,0xac,0x9c,0xb3,0x33,0x25,0x16,0x1a,0x0d,0x16,0x12,0x90,0x9e,0x1d,0x8b,0x98,0x1d,0x35,0xb2,0x27,0x28,0x28,0x99,0xc9,0xc5,0x93,0x96,0xa6,0x9c,0xab,0x2f -,0x27,0x10,0x17,0x10,0x14,0x12,0x8e,0xa2,0x21,0x89,0x99,0x1c,0xa8,0xa9,0x18,0x2c,0x46,0xa2,0x5e,0xb9,0x96,0x9e,0xb5,0x9f,0xb9,0x29,0x1e,0x1b,0x1b,0x11,0x17,0x15 -,0x8d,0xb6,0x1c,0x88,0x9f,0x1d,0xad,0x5b,0x22,0x3c,0x3d,0xa1,0x66,0xae,0x93,0xa0,0xaf,0x96,0xc6,0x26,0x20,0x1c,0x1a,0x0d,0x12,0x16,0x8e,0xea,0x19,0x86,0xa3,0x1e -,0x9f,0x4f,0x1d,0x66,0xcd,0xa4,0xcd,0xa7,0x93,0x9d,0xa6,0xa0,0xc1,0x24,0x1f,0x23,0x13,0x0e,0x13,0x16,0x90,0x32,0x1c,0x87,0xad,0x27,0x9e,0xc7,0x28,0x5b,0xaf,0xa4 -,0x37,0xaa,0x94,0xa6,0xaf,0xa5,0xc0,0x35,0x1e,0x1f,0x15,0x14,0x19,0x0f,0x90,0x37,0x23,0x88,0xb4,0x2a,0x9c,0x4b,0x20,0xca,0xe8,0xaf,0x4d,0x9f,0x97,0x9e,0xa4,0xa2 -,0x5f,0x2c,0x29,0x1d,0x0f,0x14,0x17,0x12,0x95,0x25,0x32,0x8b,0xbc,0x36,0x9a,0x40,0x29,0xab,0xc5,0xad,0xe4,0x98,0x98,0xa3,0xaa,0xab,0x4c,0x23,0x1f,0x1c,0x0e,0x19 -,0x13,0x12,0x8f,0x1d,0x46,0x8a,0xdc,0x46,0x9a,0x57,0x59,0xae,0xce,0xa8,0x4f,0x9d,0x9f,0xaf,0xb2,0xa6,0x2f,0x2d,0x27,0x1b,0x14,0x1c,0x10,0x1b,0x8f,0x14,0xe2,0x8c -,0x45,0x43,0x97,0x2f,0x4d,0xad,0xcd,0xa9,0xc7,0x9c,0x9f,0xa6,0xaf,0xae,0x27,0x33,0x2c,0x19,0x13,0x25,0x0b,0x36,0x95,0x0a,0x9b,0x90,0x21,0xa9,0x99,0x20,0xa3,0xa8 -,0xbc,0xa6,0xcc,0x96,0xa8,0xcd,0xa1,0xd6,0x1a,0x58,0x1d,0x12,0x1a,0x22,0x0b,0xb0,0xa6,0x0f,0x91,0x96,0x27,0x9d,0x98,0x29,0xa2,0xa8,0xb1,0xb6,0xad,0xa2,0xb0,0x4e -,0xaa,0x60,0x20,0x42,0x20,0x17,0x1b,0x1f,0x0a,0x99,0x48,0x11,0x8d,0xa3,0x1f,0x95,0xa7,0x28,0x9d,0xaf,0xad,0xbf,0xa9,0x9c,0xbb,0x6d,0x9c,0x26,0x2b,0x3e,0x1d,0x15 -,0x1d,0x13,0x13,0x93,0x14,0x2a,0x8c,0x3e,0x2d,0x8e,0x5d,0xe5,0x98,0xb5,0xab,0xbb,0xa3,0xa0,0xc9,0xe8,0xa4,0x22,0x2b,0x28,0x18,0x13,0x26,0x0b,0x3e,0x94,0x0d,0x9c -,0x8d,0x24,0xab,0x92,0x2b,0xa4,0xa3,0xb3,0xac,0xdd,0xa6,0xa4,0x41,0xbb,0xae,0x1d,0x32,0x27,0x1b,0x13,0x24,0x0b,0xaf,0xa5,0x0e,0x90,0x96,0x23,0x9d,0x9d,0x29,0xa0 -,0xad,0xa7,0xb0,0xbc,0x9b,0xaa,0x38,0xa4,0xbd,0x1e,0x44,0x1e,0x19,0x1d,0x15,0x0f,0x99,0x27,0x18,0x8c,0xb4,0x21,0x95,0xab,0x48,0x9e,0xaf,0x9f,0xdd,0xaf,0x9c,0xc2 -,0x57,0x9f,0x2f,0x27,0x31,0x1b,0x14,0x1b,0x10,0x1b,0x92,0x13,0xe6,0x8a,0x2e,0xce,0x8f,0x33,0xac,0x9b,0xc3,0xa4,0x71,0xb1,0xa6,0x53,0xd8,0xa4,0x29,0x37,0x2e,0x1c -,0x13,0x23,0x0d,0x40,0x9a,0x0f,0x9c,0x93,0x21,0xae,0x98,0x29,0xa2,0xa8,0xb9,0xa5,0xbe,0xaa,0xa1,0xdb,0xaf,0xa6,0x29,0x31,0x2d,0x17,0x18,0x1b,0x0c,0x9f,0x38,0x11 -,0x91,0xa7,0x1b,0x96,0xa0,0x2a,0x97,0xa5,0xa8,0xb4,0xab,0xa2,0xc9,0xce,0xa4,0x3c,0x33,0x29,0x20,0x17,0x18,0x14,0x15,0x94,0x1d,0x20,0x8a,0x4a,0x24,0x91,0xeb,0x4e -,0x93,0xb7,0xa4,0xa8,0xb4,0xa7,0xcf,0x9e,0xab,0x3c,0x22,0xbe,0x1e,0x24,0x1b,0x0e,0x1d,0x06,0x04,0x09,0x96,0x23,0x1b,0x93,0x0e,0x99,0x8c,0x9e,0x8b,0x92,0x98,0x94 -,0x8b,0x8f,0xc3,0x8f,0xae,0x29,0x9f,0x00,0x27,0x96,0x93,0x94,0x2f,0xa7,0xc8,0x0b,0x0f,0x16,0x03,0x0e,0x07,0x11,0x08,0x0e,0x0d,0x10,0x0e,0x0e,0x1f,0x0e,0x10,0x12 -,0x17,0x18,0x1f,0x15,0x8d,0xab,0xbe,0x82,0x96,0x9b,0x83,0x8f,0x8a,0x80,0x87,0x82,0x82,0x82,0x80,0x84,0x89,0x81,0xad,0xc3,0x9a,0x98,0x0a,0x0a,0x0c,0x05,0x4d,0x01 -,0x08,0x16,0x00,0x06,0x36,0x08,0x0b,0x05,0x00,0x22,0x04,0x03,0x09,0x0b,0x1b,0x2a,0x21,0x2a,0x13,0x14,0xb4,0xa2,0xa1,0x88,0x88,0xa6,0x83,0x81,0x89,0x85,0x80,0x89 -,0x87,0x82,0x87,0x82,0x89,0x8a,0x9a,0x9d,0x9d,0xa2,0xbc,0x3a,0x10,0x06,0x0f,0x03,0x06,0x1b,0x05,0x03,0x19,0x06,0x0b,0x1e,0x07,0x06,0x12,0x15,0x12,0x1f,0x12,0x29 -,0xaa,0xfd,0x9a,0x23,0xc8,0xaa,0xbe,0x51,0xb8,0x25,0x29,0x8d,0xba,0x90,0x86,0x8b,0x87,0x85,0x87,0x89,0x89,0x86,0x83,0x83,0x88,0x87,0x94,0x8b,0x99,0x10,0x1c,0x18 -,0x0a,0x01,0x06,0x01,0x0d,0x0a,0x00,0x0f,0x08,0x0b,0x1b,0xce,0x11,0x1b,0x0c,0x0b,0x17,0x51,0xaa,0x39,0xa0,0x4a,0xa2,0xcb,0xc5,0x9d,0xaa,0x81,0x92,0x26,0x88,0x8b -,0x89,0x84,0x85,0x8a,0x86,0x8d,0x8b,0x8b,0x8d,0x93,0x9b,0xa2,0x69,0xcf,0x1f,0xa2,0x0f,0x18,0x0e,0x0d,0x0b,0x0c,0x0d,0x01,0x0d,0x06,0x11,0x23,0x0c,0x0a,0x04,0x0d -,0x31,0x2f,0xac,0x18,0x12,0x16,0xa6,0xad,0x8e,0x87,0x3c,0x9e,0x9a,0xa6,0x0e,0x98,0x9b,0xb8,0x9a,0x1c,0x82,0x87,0x9e,0x8d,0x8d,0x89,0x84,0x81,0x86,0x8d,0x90,0x8c -,0xab,0xad,0x96,0x25,0x11,0x1a,0x05,0x00,0x00,0x05,0x03,0x06,0x17,0x00,0x0c,0x14,0x0a,0xaa,0x2a,0x0b,0x14,0xb7,0x2a,0x1f,0x94,0x40,0x7a,0x30,0x9a,0xa4,0xb6,0x8f -,0xa3,0xa6,0x1d,0xc6,0x1a,0x83,0x8c,0x41,0x84,0x85,0x8b,0x93,0x87,0x83,0x8d,0xbc,0xa0,0xb0,0x85,0x95,0x1b,0x3e,0x88,0x30,0x0f,0xa5,0x13,0x0c,0x00,0x16,0x07,0x13 -,0x29,0x00,0x15,0x0d,0x08,0x0a,0x19,0xba,0x05,0x1e,0x1a,0x1a,0xe4,0x9f,0x98,0x17,0xa1,0x1f,0xd7,0x8d,0x9e,0xc5,0x32,0xbd,0x27,0x8e,0x8d,0x8e,0x80,0x97,0x29,0x8b -,0x87,0x89,0x96,0x8a,0x85,0x97,0x8e,0x33,0xdb,0xa8,0x89,0x33,0x11,0x1e,0x0e,0xe2,0x03,0x0e,0x00,0x0b,0x12,0x06,0x18,0x11,0x0b,0x05,0x24,0x1b,0x0e,0x28,0xb1,0x3c -,0x1c,0x16,0x8d,0xa2,0xa8,0xe2,0x0e,0x5b,0xa7,0x92,0x97,0x8c,0x44,0x0c,0xbb,0x97,0x8b,0x8d,0x96,0x9f,0x9f,0x85,0x8a,0x88,0x8d,0x88,0xa9,0x9d,0x83,0x97,0x99,0xa7 -,0x95,0xd2,0x74,0x2f,0x12,0x30,0x11,0x0b,0x00,0x0e,0x1c,0x00,0x07,0x0f,0x0c,0x03,0x12,0x0b,0x19,0x2a,0x1a,0x0e,0x64,0xa5,0xa7,0x9e,0x4c,0x29,0xf4,0x82,0xb2,0x91 -,0xa8,0x9f,0x8f,0xa5,0x8f,0x94,0xa5,0x9b,0x9c,0x92,0x9c,0xb5,0x8b,0x92,0xa1,0x99,0x86,0xaa,0xac,0x4b,0x99,0xa2,0xc4,0x30,0xcf,0x0e,0x1a,0xa7,0x19,0x10,0x08,0x1a -,0x05,0x21,0x09,0x0c,0x0f,0x05,0xc5,0x1b,0x1b,0x27,0x17,0x24,0x50,0xe8,0x34,0xad,0xa2,0x9c,0x1b,0x1c,0x8d,0x97,0xe4,0xa0,0xbf,0x54,0xa7,0x9a,0x96,0xa3,0xd3,0xa1 -,0x9b,0x91,0x90,0x93,0x97,0x92,0x80,0x9c,0x8f,0x90,0x8e,0xa7,0xa2,0xa6,0xa1,0x76,0x18,0x1e,0x07,0x15,0x19,0x0d,0x08,0x0c,0x08,0x13,0x07,0x08,0x0e,0x24,0x08,0x0d -,0x26,0x16,0x1b,0x18,0xc6,0x15,0x93,0xa0,0xa9,0x93,0xa5,0x95,0x92,0x8f,0xa9,0x92,0x8b,0x92,0x88,0x80,0xbe,0xa3,0xa4,0xb6,0x93,0x93,0xac,0x1f,0xba,0xb7,0xaa,0x6a -,0x20,0x25,0x1e,0x29,0x3f,0x2d,0x1c,0x1e,0xb2,0x4d,0xaf,0x21,0x1a,0xaf,0xcb,0x0c,0x36,0x1a,0x20,0x22,0x1a,0x1f,0x0e,0x2c,0x11,0x2b,0x25,0xba,0x15,0x2f,0x13,0x2a -,0x24,0x71,0xb0,0xbd,0xb4,0xa4,0x9c,0xad,0x8c,0x2f,0x8c,0x8e,0x89,0x8e,0x9c,0x97,0x9b,0x89,0x8b,0x9b,0x94,0x9d,0xa8,0xa5,0x9e,0x4e,0x23,0x2f,0x10,0x51,0x29,0x09 -,0x1e,0x13,0x16,0x12,0x6d,0x18,0x0b,0x2c,0x0c,0x17,0x1c,0x2d,0x0f,0x24,0x1e,0x28,0x46,0x0f,0x19,0xa5,0x38,0xad,0xa5,0x2b,0xa0,0x2d,0x9c,0x9e,0x9b,0x8e,0x9f,0x9e -,0x98,0x90,0x8b,0x96,0x92,0x91,0xba,0x8d,0x94,0xba,0x9f,0xa0,0x1b,0x55,0x2c,0x3c,0x4c,0x17,0xbb,0x1b,0x36,0x15,0x30,0xad,0x24,0x2a,0x1f,0x19,0x1b,0x1f,0x17,0xae -,0x19,0x0b,0xeb,0x24,0x15,0x29,0x49,0x17,0x25,0xb1,0xb9,0x19,0xbe,0xbd,0xb5,0x95,0x36,0x92,0x98,0x92,0xa5,0xa6,0xa6,0x96,0x98,0xae,0xc5,0xaf,0x90,0x9f,0xb7,0xd6 -,0x36,0x26,0x8f,0x4f,0xce,0x32,0x14,0xab,0xb1,0xc5,0x4f,0x35,0x21,0xa7,0x1f,0x32,0x29,0x15,0x2a,0x27,0xe6,0x1e,0x4d,0x46,0x2e,0x2d,0xbc,0x12,0x37,0x49,0x19,0x1e -,0x28,0xe4,0x19,0x1c,0x29,0x44,0xcc,0x3a,0x29,0xad,0xc0,0x95,0xa7,0xb6,0x8f,0x95,0x9d,0x9c,0x9d,0x92,0xa5,0x90,0x91,0x6d,0xc7,0x9f,0x9b,0x9e,0xb4,0x35,0xa7,0x2b -,0xd6,0x6e,0x16,0x23,0x1c,0x1a,0x4b,0x13,0x0e,0x1f,0x27,0x0d,0x0a,0xdc,0x25,0x12,0x5b,0x18,0x2b,0xab,0xaa,0xa1,0xb7,0x9a,0x3f,0x98,0x8f,0x98,0x9c,0xa7,0x95,0xa9 -,0x51,0x9a,0x9b,0xcd,0x99,0x29,0x43,0x8f,0xeb,0x20,0xe9,0xeb,0xa7,0x2e,0x3a,0x3a,0x15,0x3c,0x5a,0xb8,0x3d,0x1c,0xb3,0x37,0x3b,0x9c,0x3c,0xe0,0xa2,0x4e,0x33,0xae -,0x4d,0xbd,0x33,0xaa,0xb6,0x21,0x2b,0x27,0x2f,0xd1,0x36,0xd3,0xbb,0x1a,0x2c,0x1d,0xa7,0x26,0x23,0x38,0x19,0xd5,0x1c,0xaa,0x3d,0x4a,0xb8,0x1c,0xb2,0xdf,0xd8,0xbf -,0x98,0xa9,0xa3,0x95,0xac,0xb5,0x9c,0x92,0x98,0x9e,0x91,0xbc,0x5f,0x9c,0xcc,0xb7,0xbd,0xcc,0x19,0x19,0x36,0x18,0x10,0x29,0x26,0x1d,0x12,0x41,0x14,0x15,0x0f,0x27 -,0xa2,0x28,0x42,0x1f,0x42,0xaf,0x9f,0x9e,0xa1,0xa2,0xb6,0x2c,0xa3,0xc8,0xb2,0xb3,0x9f,0x3b,0x27,0xc9,0x45,0x96,0xb6,0x3b,0xae,0xa7,0xb1,0x6a,0xb4,0xce,0xb2,0xac -,0xaa,0x55,0x21,0xb0,0x2d,0x9d,0xdf,0xaf,0xbc,0x1a,0x3b,0x5d,0xef,0xaf,0xc8,0x30,0x3a,0x1e,0x2f,0x3c,0x36,0x1d,0xb6,0xf6,0x1f,0xbd,0x47,0x2a,0xae,0xb3,0xaf,0xe0 -,0xdd,0x2f,0x29,0x46,0xbf,0xad,0x27,0x57,0x25,0x35,0xbe,0xd2,0xaa,0x5f,0xb7,0x37,0x2f,0x9e,0xbc,0xb1,0xa1,0xa5,0xaa,0x94,0xab,0x2f,0xb4,0xc0,0xa7,0xa9,0xba,0x5b -,0x3a,0xbe,0xb0,0xc3,0x48,0x1e,0x2d,0xdd,0x3f,0x34,0x44,0x20,0x34,0x2f,0x5d,0x4f,0x22,0x37,0x2d,0xfe,0x38,0x39,0x21,0x2c,0x26,0xdc,0xbd,0x2e,0x3c,0x6c,0x6d,0x2d -,0xb2,0xda,0xb8,0xa9,0xa5,0x9e,0x7d,0xab,0x9e,0x97,0x9f,0xa1,0x9e,0xc1,0x9d,0xae,0x56,0xae,0xae,0xba,0xd1,0x6c,0x2a,0x42,0xca,0xe4,0xbf,0x2e,0x31,0x20,0x1f,0xcb -,0xb5,0x3e,0x34,0x60,0xbe,0xbc,0x27,0x2a,0x44,0x37,0xbc,0x33,0x19,0x33,0x36,0x28,0x30,0xa4,0xcd,0x38,0x47,0x1c,0x2a,0x2e,0xab,0xb7,0x34,0x43,0x2a,0x7c,0xaa,0xa0 -,0xb6,0xd3,0xd1,0x1f,0x50,0xa0,0xb1,0xd5,0xbf,0xea,0x52,0xd9,0xc0,0xad,0xae,0xd3,0x24,0x2c,0x47,0xba,0xb2,0x38,0x24,0xac,0xa4,0x2d,0xbe,0xdc,0x38,0x3c,0x2b,0x45 -,0x48,0xb2,0xbc,0x37,0x44,0x32,0xab,0x4b,0x36,0xdf,0x2a,0x4a,0xfb,0xcf,0x3c,0x62,0xaf,0x4d,0x3f,0x4f,0xbe,0xa7,0xb6,0xc9,0x58,0x24,0x31,0xaa,0xa1,0xac,0x61,0x40 -,0xd3,0xb9,0x41,0xd5,0xcf,0x6b,0x55,0x69,0x46,0x31,0x9d,0xa3,0x3f,0x2e,0xd0,0xac,0xbb,0xb9,0x3e,0x24,0x2f,0xe4,0xbe,0xd5,0xda,0xc2,0x56,0x37,0x21,0x54,0xaa,0x42 -,0x5e,0x35,0x68,0xbf,0x53,0xbe,0x36,0xed,0xb5,0xbf,0xbf,0xbe,0xbd,0xef,0x3e,0xc9,0xae,0xbf,0xb0,0xb6,0xc8,0x57,0xf7,0x3d,0x25,0xf0,0x5f,0xc1,0xbe,0x40,0xca,0xc4 -,0xbf,0xde,0xb1,0x35,0x3a,0xcb,0x2f,0x47,0xce,0x47,0x27,0x57,0x45,0xf4,0xfe,0x33,0x46,0x3d,0xe9,0x2b,0x38,0x37,0xbc,0xc8,0x48,0xab,0x7d,0xfb,0xf1,0xc0,0x3e,0x4a -,0xaf,0xb2,0x3d,0x42,0xc0,0xa7,0xa6,0x3c,0x28,0xdd,0xae,0xa7,0x43,0x2e,0x4f,0x6b,0xa2,0xde,0xd6,0x3e,0xc7,0x9f,0xc8,0xd0,0x2e,0x3d,0xd6,0x4b,0x67,0x3c,0x3d,0x2c -,0xc6,0x49,0x2b,0xc6,0xb8,0x2d,0x26,0x36,0x29,0x44,0xb3,0xa5,0xc8,0xe0,0xba,0xbc,0x3e,0x6b,0xc5,0xa8,0xaf,0x2a,0x2c,0xc7,0xa6,0xcf,0xca,0x7b,0x3e,0xc7,0xc0,0x56 -,0xc7,0x4a,0x38,0xcc,0xd3,0xae,0xc7,0x31,0xbe,0xaa,0x49,0x3a,0x4e,0x5e,0x34,0x2c,0x49,0x47,0x3e,0x55,0xe0,0x2f,0x48,0x4d,0x37,0x32,0x56,0x36,0x29,0xae,0x44,0x4c -,0xbc,0xc2,0xa9,0xbc,0x35,0x2f,0xdd,0xa9,0xb8,0xaa,0xbb,0x34,0xe6,0xbb,0xad,0xa6,0xbb,0x39,0x2e,0x2a,0xc8,0xbe,0xb9,0xc0,0x41,0x40,0x35,0xbf,0xb1,0xcb,0xbe,0x4b -,0xcc,0x3c,0x31,0xf4,0x49,0x44,0x6a,0xc9,0x5c,0x2e,0x5c,0x4a,0x1d,0x4b,0xca,0xc1,0x5e,0x4e,0x2c,0xd8,0xb7,0xb0,0xb3,0xb2,0xaa,0x34,0xd1,0xd8,0xbb,0x51,0xce,0xae -,0xb9,0x46,0x3d,0xcf,0xad,0x35,0x2b,0x3a,0xcc,0xed,0x29,0xcf,0x5a,0xbc,0x69,0xb6,0xbc,0xc9,0x43,0xb3,0xd7,0x53,0x3e,0x39,0xb3,0xba,0xbc,0x2d,0x31,0x3d,0xbf,0x1e -,0x2e,0x3c,0x50,0xc3,0x34,0x2b,0xbb,0xb4,0x50,0xa6,0xf8,0xb7,0xc2,0xd6,0xb7,0xc3,0x55,0xb1,0xc1,0xc0,0xac,0xc3,0x3c,0x22,0x42,0xb0,0xce,0xd1,0x38,0x1f,0x3f,0xbf -,0xc7,0x54,0xa8,0xbe,0x4e,0x3a,0xb9,0xad,0x28,0x4d,0xcc,0xbc,0xde,0x40,0xcf,0x2d,0x40,0xaf,0x2d,0x3a,0x67,0x23,0x2e,0xb4,0x6e,0x42,0xaf,0xb3,0xc1,0x29,0x51,0x9f -,0xa5,0xaf,0x3c,0xe3,0x26,0xb9,0x9d,0xcf,0xb2,0x5b,0x2c,0xae,0xab,0x2e,0x2b,0x23,0x57,0xcd,0x45,0x3f,0xaa,0x4d,0x2b,0xe0,0xbe,0xcb,0x39,0xaf,0x5f,0x37,0x48,0xde -,0xb0,0xfe,0x2c,0x46,0x6e,0xad,0xb0,0x39,0x2b,0x30,0x40,0xed,0xb2,0xb9,0xcb,0x4f,0xcb,0x48,0xc7,0xca,0xd2,0xac,0xbd,0xb4,0x29,0x26,0xbc,0xa4,0xb6,0x3d,0xaf,0xf7 -,0x36,0x36,0x55,0x3b,0x2e,0xb8,0xe3,0xe7,0x31,0x3b,0x36,0x70,0xac,0xcf,0xc6,0x34,0x78,0xbf,0x51,0xc6,0x3e,0x4e,0xab,0xbb,0x3a,0xbf,0xb5,0x22,0x6a,0x3c,0xcf,0xc3 -,0x21,0x4f,0xb1,0xab,0x4b,0xd9,0x2a,0xbe,0xd2,0x2a,0xa7,0xab,0xd1,0x2f,0x2e,0xd2,0x9d,0x9c,0x38,0x1e,0x2f,0x33,0xae,0xa8,0xbc,0x45,0x1c,0x44,0xa8,0xb6,0xbc,0xbd -,0x38,0x1f,0x29,0xa0,0xad,0x2f,0xec,0x4a,0xc3,0x44,0x2b,0xca,0xb7,0xaf,0x59,0x19,0x30,0xa6,0xa9,0x41,0x71,0x4b,0x27,0xae,0xac,0xad,0xe3,0x40,0x2d,0x69,0xa0,0x74 -,0x62,0x2b,0xbe,0xab,0x39,0xbe,0x4a,0xce,0xc5,0x65,0x2e,0x73,0x5e,0x3d,0x41,0xbe,0xa8,0x2b,0xbb,0xc0,0x3e,0xc8,0x2d,0x3b,0x41,0x41,0xad,0xc2,0xc2,0xc2,0x3a,0x29 -,0xb0,0xb4,0xbe,0x4e,0x37,0x53,0x1c,0xd2,0xb5,0xc0,0xbc,0xb2,0x6e,0x38,0xbe,0xbc,0x4b,0x2f,0x6d,0x56,0xc5,0xac,0xba,0x46,0x22,0xc3,0xb1,0x5b,0xb5,0x3a,0x2e,0x38 -,0x41,0x45,0xb5,0xaa,0xbf,0x52,0x5b,0x38,0x3a,0xbb,0xbb,0x34,0x7c,0x59,0x45,0x65,0xcb,0xac,0x51,0x41,0x5b,0xb4,0xe6,0x2d,0x2e,0xad,0x52,0x3c,0xb2,0xc7,0x3b,0x5f -,0xae,0xd3,0x4a,0xda,0x48,0x59,0xc8,0x2e,0xc8,0xaf,0x37,0x44,0xc0,0xee,0x9c,0x4d,0x20,0x2d,0xd0,0xa7,0x2e,0x42,0xfd,0xb2,0xbe,0x2d,0xa0,0x7c,0x26,0xa8,0x4c,0xb2 -,0x4f,0x2c,0x2d,0x59,0xa4,0xa4,0xb6,0x30,0xeb,0x2c,0x28,0x48,0xbb,0xdb,0x3a,0xb0,0x3c,0x28,0xda,0xcb,0x5c,0x46,0xfb,0xad,0x30,0x3f,0xc2,0x32,0xaf,0xbe,0xcc,0x4a -,0xd6,0xbb,0xd6,0xb8,0xc4,0x33,0x1f,0x34,0x9f,0xb9,0x4a,0x4e,0xc7,0xa3,0xb9,0x3f,0x24,0xd7,0xbe,0xb3,0xc2,0xd2,0x2e,0x2d,0xd1,0x5d,0xae,0xdd,0xbf,0x6c,0x2d,0x70 -,0x33,0xc0,0x47,0x39,0xb6,0x37,0xab,0x57,0x3f,0xdd,0xd7,0xcc,0x27,0xbe,0x31,0x3c,0xab,0x6c,0xdf,0xce,0xd3,0x3f,0x43,0xd7,0xbb,0x42,0xba,0x45,0x32,0x45,0xbf,0x9d -,0xbc,0xf8,0x3a,0xb4,0x37,0xbc,0xa9,0x6c,0xd9,0x1e,0xba,0xa5,0x40,0xbe,0x2f,0x26,0xaf,0xb7,0x34,0x6e,0x2a,0x2a,0x5a,0x43,0xbc,0x57,0xc9,0x4a,0x37,0x3a,0xab,0xbb -,0xd5,0xc6,0x33,0x4b,0x45,0xc1,0xc5,0xa6,0x3e,0x2f,0xba,0x71,0xbe,0x25,0x49,0xbc,0xae,0xb6,0xd9,0xb5,0x38,0xbe,0x3c,0xb8,0xb4,0xba,0x3d,0x33,0xb8,0xd6,0xbb,0x3c -,0x60,0x5a,0x3e,0x4f,0xe8,0x45,0xef,0xcb,0x43,0x3c,0x30,0x39,0xbb,0x3c,0xbe,0xae,0x44,0x34,0xc2,0xaf,0x2d,0x4f,0x6b,0xac,0xc7,0x3b,0x2c,0x44,0x7b,0xaf,0xae,0x2d -,0xcd,0x2a,0x4a,0xb4,0xba,0xed,0x2d,0xbc,0x9f,0xdf,0x6e,0xc9,0x79,0xd4,0x33,0xa4,0x5b,0x41,0xa7,0x23,0x4a,0xc7,0x33,0xcc,0xb8,0xd9,0x43,0x4e,0x33,0xbe,0x61,0x27 -,0x4b,0xdf,0xa9,0xb4,0x53,0xd2,0x3c,0x55,0x39,0x4d,0x5b,0xcd,0x3f,0x30,0xbd,0x68,0xca,0xc0,0x3f,0x3f,0xc5,0x30,0xe5,0x4a,0xcf,0x3d,0xdb,0xa5,0xc1,0xb5,0x4a,0x4a -,0x3b,0xca,0xb3,0xaf,0xda,0xd6,0x36,0x67,0x4c,0xb8,0xa7,0x67,0x49,0x2d,0xdf,0xbf,0x59,0x22,0x4b,0xac,0xb4,0xbb,0xc2,0x29,0x2a,0x6c,0xa8,0xb6,0x2b,0x47,0x34,0xe0 -,0x4e,0x37,0x37,0x56,0xc9,0xc1,0xe7,0x2f,0x34,0xb9,0xb4,0x2f,0x69,0xd5,0xe1,0x5b,0xad,0xea,0xc5,0xa0,0xda,0x37,0x33,0x46,0x3b,0x9f,0xc2,0x3f,0x52,0x3f,0xac,0xbb -,0xe5,0xbe,0xcb,0x2f,0x63,0x46,0x33,0x3f,0xb6,0xab,0xc1,0x29,0x4d,0xb5,0x51,0x48,0x27,0x52,0x2f,0xb6,0xb2,0x4a,0x58,0x1f,0xcb,0xb8,0xb8,0xd9,0x3f,0xc5,0x36,0x32 -,0x4b,0xcd,0xb8,0xba,0xdc,0xca,0xad,0x64,0x2e,0x33,0xaf,0xd4,0x3a,0xb5,0xa6,0xc3,0x2c,0xd7,0x3f,0x65,0xb3,0xaf,0xb3,0x3d,0x21,0x38,0xc4,0x3c,0xbf,0xb8,0xbe,0xd6 -,0x26,0xd9,0x39,0x5a,0x47,0x2a,0xa8,0x41,0xdb,0xb0,0x48,0xb4,0x3b,0x28,0xc0,0xb8,0xa1,0xdf,0x34,0x2d,0x44,0xb7,0x51,0xcb,0xd5,0xcf,0xc9,0x37,0x44,0x30,0x34,0xaa -,0x6d,0x65,0x3f,0x26,0xb2,0x9c,0xbd,0x3f,0x38,0x2b,0x33,0xa8,0xa5,0xa4,0xb3,0x35,0x73,0xad,0xa8,0xc0,0xaf,0xbe,0x4e,0xe0,0x3d,0x37,0x33,0x30,0x2d,0x3e,0xb2,0x34 -,0x2c,0x21,0x2c,0x3b,0x27,0x26,0x3d,0xc6,0x49,0x34,0x44,0xb5,0x2a,0xd6,0xa6,0xbe,0xb0,0xc0,0xbd,0xa6,0x9c,0x9f,0xab,0xa3,0xad,0xa8,0xae,0xa9,0xa9,0x2f,0x48,0x25 -,0x4d,0xc9,0x30,0x2e,0x21,0x22,0x25,0x29,0x27,0x32,0x32,0x29,0x28,0x54,0x1f,0x58,0xb8,0xc6,0xa3,0x3a,0xba,0xa7,0xab,0xa6,0xa9,0xc0,0xae,0xad,0xab,0xa2,0x9f,0xae -,0x44,0xec,0x26,0x2a,0xe0,0x3e,0x2b,0x21,0x26,0x26,0x20,0x2d,0x2e,0x33,0x2d,0x33,0x3d,0xde,0x4e,0x49,0xa3,0x31,0xbf,0x94,0x9e,0x91,0x9f,0x50,0xa5,0x9b,0x9c,0xb2 -,0x4e,0x7b,0x2c,0xcf,0x45,0x3c,0x30,0x29,0x22,0x17,0x22,0x15,0x1b,0x23,0x1d,0x1c,0x31,0x24,0xbf,0xbd,0x2b,0xa0,0xa6,0xb2,0x9f,0x8f,0x9e,0x98,0x93,0xa3,0x94,0x9b -,0xbe,0xab,0xa2,0x46,0x37,0x31,0x1c,0x1e,0x1b,0x22,0x28,0x1d,0x1c,0x10,0x21,0x15,0x1f,0x6f,0x15,0xaa,0xc7,0x4f,0xa4,0xa0,0xa1,0x9c,0x8f,0x9c,0x92,0x93,0xb8,0x98 -,0x93,0xcf,0xaa,0x5d,0x27,0x22,0x32,0x3d,0x29,0x2e,0x11,0x0d,0x1b,0x19,0x1d,0x1b,0x1e,0x6c,0x15,0x3a,0x9a,0x41,0xa4,0xa6,0x9e,0x95,0xad,0x8e,0x9c,0x9b,0x96,0x9c -,0x8f,0xbf,0xad,0xa0,0x3e,0x2c,0x1c,0x1a,0x20,0x1c,0x0f,0x1b,0x1b,0x0b,0x25,0x16,0x1c,0x1d,0x1a,0xbb,0x2a,0xab,0x9c,0xa0,0x94,0x97,0x94,0x8d,0x8e,0x98,0x9d,0x9e -,0x99,0xb9,0x28,0xbe,0x2e,0xd7,0xa7,0x40,0xd3,0x17,0x05,0x07,0x1f,0x96,0xa5,0x24,0x03,0x01,0x0a,0x13,0x8c,0x88,0xaa,0x9c,0x92,0x98,0x95,0x88,0x87,0x8f,0x8b,0x87 -,0x8f,0xab,0x1a,0x01,0x10,0x1b,0x96,0x8d,0xaf,0x1c,0x00,0x0c,0x26,0x8f,0x35,0x01,0x0b,0x0a,0x07,0x92,0x8f,0xa4,0xaa,0x3d,0x94,0x95,0x87,0x89,0x8a,0x9e,0x18,0x3d -,0x92,0x98,0x94,0x2a,0x02,0x14,0x23,0x1d,0x05,0x01,0x03,0xc1,0xcc,0x09,0x95,0xa4,0x13,0x91,0x81,0x84,0x80,0x88,0x9c,0x17,0x0f,0x9e,0x83,0x85,0xa8,0x06,0x0c,0x10 -,0x2a,0x92,0xd2,0x27,0x1d,0x0a,0x0e,0x0f,0x08,0xcc,0x10,0x03,0x1a,0x25,0x23,0x3f,0x1a,0x1a,0x9f,0x88,0x80,0x82,0x85,0xa6,0x92,0x83,0x89,0x8d,0x5a,0x0c,0x0d,0x0b -,0x2b,0xc8,0x1c,0x07,0x07,0x04,0x11,0xa8,0xb5,0x8a,0x2f,0x03,0x53,0x8d,0x8c,0x80,0x89,0xb5,0x9c,0x93,0x9a,0xb1,0x30,0x1c,0x21,0x43,0x0a,0x11,0xa6,0x10,0x11,0x3f -,0xbc,0x96,0xbf,0x06,0x0e,0x00,0x1a,0x83,0x9e,0x9b,0x2d,0x04,0x19,0x8f,0x83,0x82,0x88,0x90,0x9c,0x94,0x99,0x93,0x86,0xa1,0x0c,0x12,0x3a,0x38,0x26,0x05,0x04,0x07 -,0x0b,0x92,0xa6,0x42,0xa8,0x15,0x92,0x87,0x3c,0x98,0xa0,0x16,0xa9,0x8e,0x94,0x96,0xad,0x1c,0x09,0x23,0xa1,0x9c,0x95,0x18,0x01,0x0a,0x0f,0xba,0xa0,0xe9,0xa8,0x04 -,0x0e,0x8a,0x1f,0xf5,0x94,0x25,0x94,0x91,0x98,0x89,0x8b,0x92,0x95,0x86,0x8a,0x9c,0xba,0x08,0x00,0x11,0x2d,0xb9,0x1e,0x04,0x09,0x04,0x1f,0x88,0xab,0x8d,0x8f,0x0e -,0x8e,0x8c,0xba,0x81,0x85,0xc5,0x32,0x9c,0x93,0x8f,0xac,0x26,0x18,0xbf,0x9e,0x95,0x8e,0x33,0x1a,0x2f,0x22,0x0d,0x09,0x0b,0x0e,0x00,0x26,0x1b,0x02,0x34,0x0c,0x00 -,0x1c,0x5f,0x29,0x95,0x1c,0x00,0x08,0x13,0x2b,0xba,0xaa,0x13,0x03,0x0c,0x09,0x1c,0x3e,0x19,0x1b,0x0f,0x90,0x9d,0x9c,0x80,0x8a,0x8c,0x81,0x80,0x82,0x80,0x8a,0xa0 -,0x8a,0x85,0x85,0x85,0x94,0x0b,0x0c,0x4a,0xa0,0x8b,0x90,0x38,0x1a,0x27,0x44,0x2c,0x8d,0x89,0x0a,0xba,0x9d,0x6d,0x82,0x90,0x12,0x39,0x9d,0x2a,0x97,0x85,0x3a,0x12 -,0x1e,0x08,0x06,0x11,0x0c,0x00,0x03,0x00,0x06,0x0d,0x06,0x03,0x00,0x27,0x1b,0xdf,0x80,0x1a,0x0e,0xb1,0x44,0x8d,0x80,0x87,0x8d,0xa3,0x2e,0x15,0xab,0x91,0x22,0x2f -,0x27,0x02,0x0e,0xd8,0x3f,0x54,0x1b,0x15,0x24,0x8d,0x9c,0x00,0x2f,0x2e,0x09,0x8c,0x88,0xaf,0x95,0x87,0x8b,0x88,0x80,0x84,0x88,0x82,0x8b,0x8c,0x82,0x84,0x8c,0x90 -,0xd5,0xc6,0x8d,0x87,0x94,0x9a,0x89,0x14,0xab,0x80,0x92,0x8e,0x83,0xab,0x6c,0x9a,0x2d,0x1e,0x1c,0x0e,0x00,0x06,0x07,0x00,0x00,0x00,0x00,0x01,0x09,0x04,0x01,0x00 -,0x02,0x00,0x0f,0x17,0x06,0x97,0x17,0x00,0x1b,0x1b,0x21,0x93,0x91,0x2d,0xb1,0x95,0x9b,0x91,0x85,0x8f,0x90,0x85,0x89,0x9a,0x8d,0xb5,0x19,0x30,0x9c,0xb9,0xb1,0x84 -,0x1a,0x9e,0x80,0x8c,0x86,0x80,0x91,0x8e,0x80,0x84,0x84,0x83,0x89,0x52,0xb6,0x98,0x9c,0x8f,0x9c,0x18,0x0d,0x0d,0x13,0x18,0x26,0x28,0x06,0x23,0x15,0x01,0xa7,0x1d -,0x01,0xce,0x2a,0x0c,0x4b,0x29,0x0b,0x12,0xaa,0xa3,0x33,0x64,0x0f,0x00,0x0d,0x2e,0x13,0x2f,0x53,0x0d,0x03,0x08,0x0a,0x0a,0x94,0x10,0x04,0x9e,0x18,0x25,0x84,0x98 -,0xdb,0x89,0x95,0xb7,0x95,0x9c,0x31,0x1a,0x1d,0x1b,0x16,0x33,0xbf,0x33,0x9d,0x8e,0x9c,0x93,0x88,0x9d,0x8f,0x81,0x97,0x85,0x80,0x8f,0x8d,0x80,0x88,0x81,0x80,0x81 -,0x84,0x87,0x88,0xa0,0x8f,0x86,0x9e,0x3a,0x4c,0x0b,0x04,0x06,0x04,0x00,0x03,0x04,0x00,0x03,0x04,0x00,0x0d,0x13,0x00,0x19,0x1b,0x00,0x09,0x19,0x0a,0x0d,0x1e,0x1c -,0x10,0x13,0x16,0x07,0x0f,0x48,0x1a,0x18,0x37,0x0f,0x17,0xd0,0x9a,0xea,0x8b,0x90,0x1f,0x83,0x82,0x94,0x86,0x87,0xa6,0x8a,0x81,0x84,0x84,0x84,0x89,0x8d,0x87,0x93 -,0xb0,0xc0,0xa9,0xad,0xa1,0x9e,0xcb,0x2a,0x51,0xa6,0xa7,0x87,0x88,0xc2,0x98,0x98,0x18,0x9a,0x88,0x69,0x9d,0xa5,0x11,0x14,0x1e,0x23,0x19,0x1b,0x11,0x07,0x09,0x07 -,0x08,0x0b,0x16,0x09,0x0a,0x08,0x08,0x02,0x08,0x1f,0x03,0x26,0x8f,0x15,0x1b,0x97,0x1d,0xac,0x8e,0xed,0xdc,0x75,0x3f,0x23,0x1e,0x5f,0x29,0x0e,0x0e,0x1b,0x20,0x38 -,0x25,0x1c,0x0d,0x0d,0x13,0x23,0x85,0xab,0x9d,0x80,0x8c,0x8c,0x80,0x86,0x89,0x80,0x82,0x81,0x81,0x81,0x84,0x85,0x81,0x81,0x85,0x83,0x83,0x93,0x9a,0x98,0xac,0xa7 -,0xc9,0x1a,0x04,0x19,0x13,0x00,0x33,0x1e,0x02,0x17,0x0d,0x00,0x09,0x0c,0x04,0x09,0x0b,0x09,0x07,0x03,0x04,0x00,0x01,0x0a,0x08,0x09,0x1d,0x0a,0x02,0x0e,0x2a,0x09 -,0x21,0xae,0x07,0xb1,0x8f,0x1e,0x9a,0x87,0xb3,0x92,0x85,0x8a,0x88,0x87,0x89,0x8d,0x95,0x8b,0x93,0x9a,0x8d,0x8a,0x92,0x8c,0x8c,0x9d,0xa3,0x9f,0xab,0x40,0x85,0xa8 -,0x5c,0x80,0x95,0xbd,0x83,0x82,0x8c,0x85,0x89,0x9c,0x9b,0x9a,0x99,0x78,0x1b,0x39,0x07,0x0f,0x46,0x15,0x13,0x15,0x0e,0x0c,0x0f,0x0e,0x00,0x10,0x14,0x01,0x3e,0xad -,0x09,0x18,0x3a,0x09,0x1e,0xab,0x52,0x2a,0x49,0x3e,0x28,0x66,0xbf,0x15,0x0d,0x17,0x17,0x0c,0x0f,0x19,0x10,0x0a,0x1c,0x14,0x0c,0x9d,0x15,0x1c,0x8f,0x22,0x29,0x8b -,0xad,0x9b,0x82,0x88,0x85,0x87,0x86,0x88,0x8a,0x84,0x84,0x8c,0x86,0x82,0x88,0x87,0x83,0x82,0x84,0x82,0x88,0x94,0x82,0xa2,0xb0,0x84,0x2c,0x23,0x8b,0xbc,0x17,0x33 -,0x15,0x14,0x29,0x1f,0x12,0x03,0x03,0x02,0x01,0x02,0x04,0x01,0x01,0x02,0x03,0x01,0x03,0x06,0x00,0x1d,0x0e,0x05,0x9e,0x20,0x0b,0xa5,0x42,0x1b,0xac,0xb2,0x2f,0x3d -,0xb6,0x9b,0xa7,0xa9,0x96,0xac,0x9f,0x85,0x8e,0x94,0x8f,0x9f,0xbc,0x95,0xa8,0xb8,0x81,0x50,0xc5,0x80,0x93,0xa1,0x84,0x8f,0x8c,0x80,0x87,0x8a,0x88,0x89,0x89,0x93 -,0x92,0x89,0xbe,0x22,0x30,0x18,0x23,0x4f,0x13,0x0c,0x23,0x08,0x12,0x8b,0x0f,0x1f,0x90,0x09,0x12,0x9b,0x0d,0x0e,0x1f,0x07,0x0f,0x11,0x14,0x16,0x0a,0x14,0x25,0x10 -,0x22,0x33,0x0f,0x1a,0x2b,0x0c,0x17,0x17,0x00,0x27,0x13,0x02,0xae,0x2e,0x0b,0x9b,0xf2,0x14,0x91,0x97,0xa7,0x9c,0x9f,0xa1,0xa4,0x28,0x62,0x48,0x29,0xa5,0xa3,0xa5 -,0x8c,0x8b,0x8f,0x84,0x8c,0x85,0x80,0x89,0x81,0x80,0x86,0x83,0x80,0x83,0x81,0x81,0x8f,0x9e,0x99,0x98,0xa1,0x4b,0x1f,0x0f,0x0b,0x0f,0x0f,0x0c,0x09,0x06,0x02,0x02 -,0x00,0x03,0x07,0x00,0x04,0x0b,0x00,0x09,0x1e,0x01,0x09,0x25,0x18,0x14,0x30,0x49,0x15,0x0e,0x28,0x19,0x09,0x1c,0x1b,0x0a,0x0e,0x1c,0x12,0xbb,0x13,0x9f,0x8c,0x19 -,0x85,0x80,0x9a,0x8c,0x80,0x94,0x8a,0x83,0x89,0x89,0x96,0x8a,0x8e,0xba,0x8e,0x96,0xe4,0x8c,0x88,0x9a,0x95,0xb9,0xbe,0xb9,0x2b,0x80,0x9b,0x2e,0x84,0xa4,0x16,0x8c -,0x95,0x2a,0x9b,0x9d,0xa5,0xde,0x9f,0x98,0x2c,0x1d,0xb5,0x1a,0x0e,0x23,0x0d,0x02,0x04,0x00,0x07,0x00,0x07,0x39,0x01,0x0c,0x8e,0x17,0x15,0x86,0x35,0x21,0x9b,0x5a -,0x3a,0x35,0x25,0x23,0x07,0x0c,0x21,0x0e,0x0f,0x1d,0x09,0x0a,0x16,0x2f,0x29,0x0d,0x90,0x2c,0x0b,0x8b,0x93,0x23,0x88,0x90,0xc3,0x87,0x84,0x84,0x85,0x83,0x81,0x82 -,0x81,0x80,0x82,0x84,0x81,0x80,0x86,0x85,0x86,0x91,0x1a,0x8b,0x99,0x09,0x8b,0x91,0x0b,0xb3,0xab,0x10,0x39,0x42,0x1b,0x0d,0x09,0x11,0x05,0x00,0x08,0x04,0x00,0x04 -,0x03,0x00,0x02,0x04,0x02,0x00,0x2b,0x11,0x05,0xa4,0xd2,0x0d,0xb3,0xb5,0x1e,0xce,0x45,0xb5,0x1b,0x36,0x9c,0x2a,0x25,0x90,0xac,0x71,0x88,0x95,0x99,0x99,0x8e,0x3c -,0xad,0x80,0x37,0x9f,0x80,0x9a,0xa3,0x82,0x8f,0x8f,0x89,0x89,0x88,0x8f,0x85,0x85,0xb7,0x98,0x84,0xa4,0x8f,0x92,0x5f,0x1d,0x2c,0x2a,0x0b,0x8f,0xb9,0x0c,0x9a,0x3a -,0x09,0xcd,0xd2,0x16,0x4d,0x2d,0xc3,0x1c,0x15,0x22,0x08,0x07,0x1d,0x11,0x0a,0x15,0x10,0x05,0x0f,0x1c,0x04,0x41,0x60,0x03,0xa3,0x8c,0x1e,0xac,0x90,0xce,0x36,0xab -,0x9c,0x2d,0x38,0x5e,0x16,0x13,0xaf,0x3a,0x1b,0xfa,0xdd,0x2b,0x2b,0xa7,0x0e,0x98,0x8b,0x17,0x92,0x83,0xca,0xa3,0x8b,0xa0,0xa9,0xa0,0x92,0xab,0xad,0x93,0x96,0x29 -,0x9f,0xa3,0x24,0xba,0xa5,0x29,0x12,0x1f,0x08,0x98,0x8e,0x19,0x8f,0x8a,0xb3,0x8e,0x83,0x91,0x9e,0x90,0x93,0x47,0x22,0xf4,0x20,0x07,0x1d,0x1f,0x0a,0x19,0xb8,0x0f -,0x22,0x45,0x0e,0x8a,0x9f,0x21,0x80,0x91,0x1c,0x8c,0x94,0x36,0xaf,0xd2,0xdd,0x27,0x13,0xda,0x22,0x06,0xce,0x22,0x08,0x11,0x0f,0x06,0x18,0x06,0x05,0xda,0x02,0x0e -,0x93,0x15,0x0c,0x9e,0x37,0x36,0x99,0xa0,0xac,0x28,0x3e,0x90,0x57,0x4e,0x95,0x1d,0x19,0x5f,0x1a,0x13,0xbd,0x08,0x9a,0x8a,0x2a,0x82,0x81,0x9d,0x8b,0x80,0x8b,0x81 -,0x84,0x85,0x8a,0xa9,0x96,0x8d,0x24,0x9e,0x9a,0x20,0xae,0xab,0x13,0x1c,0x0f,0x08,0x89,0x12,0x07,0x8f,0x2c,0x00,0xaf,0xdc,0x13,0x28,0x24,0x1f,0x1e,0x32,0xfc,0x1f -,0x10,0xa1,0x1c,0x0d,0x27,0x1c,0x01,0x0d,0x05,0xcb,0x99,0x00,0xce,0x8e,0x12,0xbd,0x87,0x3b,0x3c,0x6c,0xa1,0xcb,0x1e,0x2f,0x39,0x0a,0xe1,0xa7,0x1f,0xc3,0xac,0x1c -,0x22,0x2a,0x22,0x82,0x1f,0x2b,0x80,0x9d,0x1f,0x88,0x95,0x3f,0xab,0x99,0x8c,0xa0,0xad,0x8c,0x98,0x9e,0x83,0x90,0xa5,0x8a,0x8a,0x9f,0x8e,0xc6,0x89,0x89,0x30,0x8a -,0x80,0x4c,0x99,0x8b,0x1e,0xc8,0xc8,0x12,0x07,0x06,0x05,0x07,0x00,0x03,0x01,0x01,0x00,0x02,0x00,0x02,0x00,0x02,0x2d,0x08,0x09,0x8f,0x37,0x0d,0x94,0xa3,0xaa,0x9c -,0x9b,0xa9,0xd8,0x58,0x94,0x9d,0xac,0x89,0x8f,0x8f,0x81,0x89,0x8e,0x87,0x8f,0x80,0x83,0x8a,0x80,0x80,0x8d,0x87,0x80,0x85,0x85,0x83,0x84,0x8b,0x96,0x92,0x8f,0x23 -,0x23,0x7c,0x0f,0x0b,0x1a,0x03,0x05,0x00,0x07,0xe0,0x06,0x03,0xaf,0x20,0x07,0xa7,0x32,0x0c,0x15,0x18,0x14,0x10,0x0b,0x16,0x07,0x01,0x0c,0x0b,0x05,0x08,0x0b,0x07 -,0x0d,0x01,0xb0,0x6c,0x04,0x9f,0x89,0x1b,0x33,0x93,0x53,0xc4,0x9c,0x90,0x9c,0xaf,0x97,0x8e,0x4e,0x9f,0x92,0xaf,0x1f,0x3c,0x1d,0x10,0x04,0x08,0x9c,0x0d,0x09,0x8e -,0x92,0x1a,0x8a,0x85,0x85,0x80,0x83,0x82,0x83,0x81,0x81,0x80,0x83,0x80,0x83,0x88,0x86,0x80,0x8f,0x8d,0x4d,0x94,0x83,0x0f,0x1c,0x8e,0x16,0x03,0x2b,0x09,0x02,0x01 -,0x01,0x01,0x01,0x01,0x03,0x00,0x00,0x04,0x05,0x02,0x06,0x05,0x00,0x05,0x00,0x31,0x22,0x00,0x1b,0x9d,0x05,0x17,0x9b,0x15,0x37,0x9d,0x95,0x8b,0x9e,0x94,0x81,0x95 -,0x8d,0x81,0x85,0x91,0x88,0x92,0x98,0x8d,0x9e,0x80,0x94,0xbe,0x80,0x84,0xae,0x87,0x84,0xa5,0x91,0x95,0x9c,0xbb,0x10,0x39,0x4e,0x0a,0x23,0x30,0x1a,0x12,0x3e,0x1a -,0x32,0x1a,0x0e,0x8d,0x1e,0x14,0x86,0x99,0x0b,0x9a,0xa3,0x1d,0xb7,0xbc,0xc4,0x57,0x29,0x9d,0x9d,0x0e,0x45,0xab,0x20,0x1f,0x27,0x04,0x0e,0x07,0x0d,0x8b,0x0f,0x0e -,0x85,0xa3,0x0e,0x90,0x9e,0x2b,0x31,0x27,0x42,0x1c,0x06,0x0d,0x16,0x04,0x15,0x0d,0x08,0x0a,0x1e,0x17,0x52,0x27,0xb8,0x80,0x9b,0x8a,0x80,0x85,0x8a,0x80,0x80,0x81 -,0x80,0x82,0x81,0x83,0x86,0x80,0x86,0xb7,0x93,0x98,0x27,0x2b,0x14,0x00,0x05,0x00,0x06,0x1d,0x02,0x00,0x1f,0x0f,0x00,0x18,0x0a,0x05,0x11,0x06,0x0d,0x15,0x02,0x0c -,0x0e,0x00,0x16,0x1a,0x0c,0x18,0x13,0x0e,0xd6,0x07,0x12,0x85,0x29,0x4f,0x80,0x8e,0x2b,0x8b,0x8a,0x8f,0x88,0x8c,0x84,0x86,0x8f,0x85,0x80,0x94,0x8b,0x85,0x8f,0x8e -,0x9d,0x45,0x98,0x0e,0x0d,0x85,0x24,0x0f,0x83,0x8f,0x33,0x8c,0x8c,0x94,0x8e,0xa6,0x8f,0x8e,0x30,0xa3,0x9e,0x0b,0x1a,0xae,0x23,0x15,0x16,0x0d,0x15,0x08,0x04,0xa2 -,0x13,0x00,0xa6,0xbc,0x07,0x15,0x1c,0x0b,0x12,0x0b,0x0d,0x16,0x0a,0x0e,0x2d,0x23,0x24,0xad,0x28,0x1d,0x29,0x22,0x24,0x10,0x00,0x28,0xaf,0x00,0x29,0x95,0x0d,0x17 -,0x7d,0xca,0x99,0xab,0xad,0x8b,0x9a,0x98,0x80,0x88,0x86,0x82,0x84,0x82,0x81,0x81,0x83,0x80,0x89,0x85,0x80,0x84,0x84,0x80,0x88,0x8f,0x86,0x9a,0xaa,0x24,0x06,0x0d -,0x07,0x02,0x08,0x02,0x00,0x05,0x03,0x04,0x07,0x02,0x00,0x04,0x02,0x00,0x18,0x0f,0x00,0x11,0x2d,0x0c,0x1b,0x3b,0x1e,0x2a,0x22,0xbb,0x9b,0x1f,0x2b,0x96,0xb3,0xa7 -,0xa8,0xa5,0x9a,0xc8,0xb2,0x9e,0x9b,0x1c,0x95,0x80,0x9d,0x8b,0x80,0x8a,0x97,0x86,0x86,0x8b,0x9d,0x9f,0x89,0xe6,0x1c,0x90,0xa0,0x2c,0xad,0xa5,0xad,0x6f,0x58,0x3b -,0xca,0x0d,0x12,0x87,0x29,0x0d,0x93,0xa2,0x16,0x51,0xc3,0x28,0x2c,0x1a,0xbf,0xcc,0x18,0x2a,0x29,0x0f,0x3c,0xd8,0x14,0x19,0x17,0x06,0x0b,0x07,0x02,0x9f,0x2a,0x02 -,0x98,0x88,0x22,0xca,0x93,0x4b,0x51,0x27,0x32,0xbd,0x0f,0x0c,0x1c,0x0a,0x0d,0x19,0x08,0x0e,0x11,0x0d,0x0f,0x1c,0x04,0xc8,0x87,0x28,0x88,0x80,0x87,0x88,0x80,0x82 -,0x80,0x80,0x81,0x80,0x81,0x81,0x81,0x80,0x84,0x84,0x8e,0x8a,0x9e,0x1d,0x0a,0x07,0x00,0x02,0x1b,0x07,0x00,0x0d,0x0a,0x07,0x15,0x06,0x0b,0x0c,0x01,0x0c,0x1a,0x09 -,0x09,0x0d,0x06,0x07,0x0a,0x1a,0x10,0x0c,0x08,0x13,0x15,0x05,0x98,0xae,0x0d,0x8d,0x85,0xa0,0x94,0x97,0x96,0x8a,0xa2,0x8f,0x83,0x96,0x8f,0x82,0x8a,0x89,0x8b,0x8d -,0x87,0x98,0xcb,0xa4,0xbd,0x06,0xa9,0x8d,0x15,0x97,0x84,0xa5,0xa1,0x96,0x92,0x86,0x9e,0xb9,0x8b,0xa6,0x34,0x99,0xc6,0x22,0x24,0x25,0x33,0x11,0x0d,0x15,0x12,0x00 -,0x28,0x89,0x0b,0x1b,0x8c,0xbd,0x1d,0x46,0x29,0x2c,0x15,0x08,0x42,0x22,0x09,0x1b,0x19,0x0a,0x1f,0x28,0x27,0x1a,0x0b,0x0b,0x18,0x02,0x0f,0x96,0x0c,0x0e,0xa3,0x23 -,0x14,0x28,0x16,0xd7,0x3b,0x27,0x9a,0xaa,0x21,0x92,0x8b,0x96,0x89,0x8a,0x85,0x86,0x8d,0x8a,0x80,0x8c,0x88,0x80,0x83,0x82,0x80,0x83,0x85,0x83,0x85,0x87,0x92,0x38 -,0x28,0x13,0x02,0x0b,0x07,0x02,0x03,0x01,0x02,0x03,0x02,0x00,0x04,0x00,0x05,0x1d,0x05,0x03,0x29,0x0c,0x09,0x16,0x0c,0x2d,0x19,0x0e,0xb9,0x5c,0x1c,0xa2,0xa8,0x2d -,0x9e,0xb8,0x9b,0x95,0x2d,0x1b,0xb9,0x18,0x9e,0x81,0x5f,0x8c,0x80,0x8d,0x8b,0x80,0x8a,0x84,0x87,0x95,0x83,0x8b,0xa1,0x90,0x9a,0xa8,0xa3,0xbc,0x9f,0xa8,0x0b,0x18 -,0x9c,0x0f,0x9c,0x8c,0x17,0x94,0x89,0x1a,0x9d,0x9a,0x10,0xc3,0x1f,0x0e,0xc5,0x2d,0x14,0xad,0x30,0x1b,0x25,0x1b,0x28,0x1a,0x07,0x0e,0x0b,0x00,0xc1,0x22,0x00,0xa8 -,0xb2,0x07,0xd7,0x3c,0x1a,0xae,0x1e,0x16,0xbf,0x24,0x1e,0xa9,0x1f,0x0f,0x17,0x17,0x19,0x0d,0x02,0x0f,0x03,0x0c,0x90,0x1d,0x28,0x82,0x98,0xbe,0x84,0x8c,0x87,0x81 -,0x8b,0x87,0x81,0x85,0x80,0x81,0x81,0x81,0x80,0x81,0x83,0x8a,0x92,0x8f,0x1f,0x8e,0x90,0x0b,0x22,0x74,0x07,0x06,0x09,0x02,0x09,0x03,0x01,0x0d,0x0a,0x00,0x0a,0x0a -,0x07,0x0b,0x09,0x0a,0x09,0x00,0x07,0x06,0x08,0xcc,0x10,0x10,0x8e,0xab,0x30,0x91,0x50,0x56,0x97,0x6c,0xb2,0x8e,0x29,0xcc,0x94,0xac,0xad,0x9b,0x8c,0x8c,0xac,0xa9 -,0x8f,0x3f,0x8b,0x88,0x9a,0x85,0x80,0x95,0x92,0x8b,0xc0,0x92,0x99,0xfc,0x9b,0xa1,0x4b,0x93,0x99,0xa9,0x98,0xb7,0xdc,0xa3,0x13,0x1f,0x19,0x0f,0x9c,0x2d,0x17,0x8b -,0xa1,0x16,0x9a,0x67,0xc9,0xa7,0x1c,0x1d,0xb6,0x0d,0x18,0x37,0x11,0x13,0x0d,0x0c,0x0c,0x03,0x04,0x09,0x04,0xbe,0x4d,0x0d,0xb4,0x98,0x1c,0x1e,0x2b,0x17,0x22,0x15 -,0x15,0x1e,0x0d,0x0d,0x1a,0x0f,0x14,0x1c,0x26,0xaf,0x15,0x13,0x95,0x84,0x1e,0x1c,0x80,0x83,0x80,0x83,0x88,0x82,0x89,0x80,0x8a,0x81,0xab,0x19,0xcb,0x03,0x19,0x08 -,0x00,0x04,0x00,0x02,0x00,0x01,0x00,0x02,0x09,0x04,0x00,0x15,0x19,0x0b,0x3c,0x56,0x3b,0x2d,0x9a,0x80,0x87,0x92,0x88,0x80,0x80,0x80,0x80,0x81,0x82,0x86,0x87,0x80 -,0x86,0x80,0x85,0x87,0x81,0x80,0x88,0x8a,0x87,0x89,0x83,0x98,0x9c,0x8b,0xab,0x34,0xca,0x20,0x17,0x15,0x0f,0x08,0x05,0x00,0x03,0x00,0x06,0x0a,0x00,0x01,0x03,0x02 -,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x01,0x02,0x02,0x03,0x07,0x06,0x0a,0x00,0x09,0x08,0x0e,0x93,0x18,0x2f,0x8c,0x8c,0xa1,0x8b,0x89,0x85,0x80,0x87,0x82 -,0x81,0x84,0x82,0x80,0x82,0x80,0x82,0x80,0x82,0x83,0x82,0x81,0x83,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x86,0x8b,0x80,0x84,0x85,0x81,0x81,0x84,0x86 -,0x81,0x84,0x87,0x9b,0x9a,0xb2,0x88,0x8a,0x21,0xf0,0x98,0x16,0x07,0x09,0x03,0x06,0x00,0x01,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -,0x02,0x00,0x00,0x06,0x07,0x00,0x02,0x00,0x04,0x03,0x00,0x01,0x04,0x01,0x01,0x07,0x0c,0x09,0x06,0x0b,0x2f,0x0e,0x03,0x0e,0x15,0x8f,0xaa,0xc6,0x87,0x83,0x8d,0x8f -,0x8a,0x8a,0x88,0x93,0x92,0x82,0x85,0x8e,0x8b,0x84,0x85,0x86,0x8b,0x89,0x85,0x94,0x8f,0x8a,0x81,0x81,0x85,0x80,0x80,0x81,0x81,0x80,0x81,0x81,0x82,0x85,0x83,0x84 -,0x8b,0x84,0x87,0x82,0x84,0x8e,0x8c,0x83,0x97,0xbc,0xb4,0x90,0x80,0x9d,0x8f,0x80,0x85,0x91,0x88,0x8a,0x88,0x87,0x8f,0x8d,0x84,0x8a,0x90,0x9a,0x69,0x9b,0x9d,0x11 -,0x0b,0x05,0x01,0x02,0x00,0x2c,0x29,0x04,0x18,0x8c,0xba,0x47,0x51,0x9b,0x8b,0xa7,0x3f,0x95,0x9e,0x1d,0x37,0x47,0x74,0x1a,0x0c,0x0b,0x21,0x08,0x03,0x00,0x1a,0x1d -,0x01,0x08,0x1f,0x0e,0x00,0x03,0x01,0x08,0x00,0x01,0x00,0x04,0x01,0x00,0x01,0x02,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x07,0x01,0x00,0x03,0x09,0x02,0x02,0x00 -,0x03,0x05,0x01,0x00,0x07,0x08,0x01,0x04,0x05,0x0f,0x0b,0x07,0x09,0x0f,0x0c,0x0d,0x07,0xbe,0x8a,0xd9,0x9f,0x85,0x84,0x8d,0x8a,0x87,0x80,0x81,0x82,0x81,0x80,0x80 -,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x82 -,0x80,0x82,0x84,0x93,0x8d,0x80,0x97,0x2c,0xb2,0xbb,0x06,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x06,0x09 -,0x00,0x00,0x07,0x06,0x04,0x04,0x00,0x05,0x06,0x03,0x02,0x08,0x07,0x05,0x02,0x08,0x1c,0x12,0x05,0x0d,0x0f,0x15,0x15,0x0c,0x9a,0x9a,0x2b,0xa6,0x8c,0x9d,0xba,0x2c -,0x27,0x93,0x9b,0x35,0xce,0x97,0x8e,0x90,0xb3,0x99,0x8b,0x97,0xa8,0x96,0xa4,0xad,0xf8,0xae,0x81,0x8a,0x9a,0x8a,0x85,0x89,0x86,0xa2,0xac,0x8d,0x92,0xd1,0xcd,0xad -,0xab,0x47,0x10,0x58,0x99,0x5c,0x1e,0x25,0xd5,0x9a,0x16,0x24,0x88,0x9d,0x37,0x97,0x93,0xa9,0x29,0x07,0x18,0xb0,0x1e,0x0c,0x21,0xb2,0xa5,0x1e,0x1f,0x8f,0x87,0x8d -,0x8c,0x8c,0x8d,0x8b,0x8e,0x84,0x80,0x83,0x84,0x80,0x81,0x81,0x8a,0x9b,0x97,0x97,0x2d,0x12,0x13,0x06,0x04,0x02,0x01,0x04,0x06,0x02,0x02,0x03,0x09,0x0a,0x03,0x20 -,0xac,0x3e,0xc1,0x95,0x9f,0xa1,0xb8,0x41,0x94,0x91,0xb2,0xa6,0x8f,0x90,0x8f,0xa7,0xa5,0x8e,0x8f,0x95,0x9b,0x3f,0xb2,0xad,0x63,0x8b,0x8b,0x95,0x8d,0x84,0x86,0x88 -,0xa0,0xa2,0x8a,0x8f,0xa6,0xa7,0xb0,0xa9,0x9d,0x3c,0xcb,0xa5,0xba,0xb5,0xc0,0x1c,0xe3,0x1f,0x1c,0x9b,0xae,0x3b,0x5b,0xdd,0xa7,0xa4,0x16,0x1e,0xae,0xc8,0x28,0x1d -,0x1c,0x32,0x18,0x08,0x18,0x1c,0x0b,0x06,0x07,0x08,0x0b,0x01,0x07,0xd9,0x48,0x1a,0x57,0xb8,0xa8,0xf1,0x0c,0x20,0x7e,0x15,0x12,0x1b,0x13,0x0f,0x0a,0x08,0x18,0x1b -,0x14,0x14,0x0b,0x0a,0x1b,0x16,0xbe,0x88,0x8c,0x88,0x82,0x82,0x81,0x80,0x81,0x80,0x80,0x80,0x81,0x82,0x83,0x82,0x87,0x9e,0xaf,0x48,0x21,0x15,0x06,0x02,0x03,0x00 -,0x03,0x0c,0x08,0x06,0x0a,0x08,0x10,0x13,0x05,0x0a,0x14,0x0f,0x15,0x18,0x10,0x1b,0x1f,0x26,0x39,0x24,0x26,0x46,0x1b,0x11,0x1e,0x10,0x0e,0xbc,0xd1,0xcb,0x9e,0xaf -,0x9d,0x8f,0x98,0x94,0x88,0x8e,0x8f,0x8e,0x96,0x8e,0x8d,0xb8,0xa9,0x9c,0x9c,0x97,0xbf,0x30,0xb1,0xb5,0x3b,0x94,0x93,0xa7,0x95,0x92,0x99,0x99,0xbb,0xb1,0x9a,0xef -,0xb9,0x9a,0xdb,0x46,0xa2,0xa4,0xbf,0x26,0x1a,0x30,0x2e,0x0f,0x09,0x07,0x06,0x05,0x07,0x10,0x16,0x0f,0x09,0x12,0xea,0x2c,0x1a,0x30,0x79,0x43,0x24,0x1f,0x29,0x27 -,0x1a,0x20,0x26,0x15,0x16,0x15,0x17,0x1c,0x1a,0x0f,0x0d,0x1d,0x37,0x62,0xba,0xae,0x9c,0x8c,0x8b,0x88,0x83,0x83,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x82,0x85 -,0x8e,0x9d,0xc5,0x29,0x16,0x09,0x09,0x08,0x06,0x0a,0x06,0x02,0x04,0x07,0x06,0x07,0x07,0x07,0x0a,0x0a,0x0c,0x10,0x0f,0x0f,0x17,0x23,0x2d,0x2c,0x27,0x18,0x15,0x16 -,0x1c,0x16,0x0f,0x21,0x2c,0x3a,0xf0,0x3b,0xf4,0x9f,0x94,0x8c,0x8e,0x8f,0x8e,0x8e,0x8f,0x90,0x96,0x9c,0x9a,0x92,0x91,0x9e,0xab,0xa3,0x9a,0x9f,0xae,0x9d,0x9c,0xb1 -,0xac,0xa4,0xa5,0xba,0x58,0xa2,0x96,0xad,0xc5,0xa4,0x92,0x92,0xa8,0xab,0x9e,0xa2,0xba,0x4d,0x32,0x1e,0x17,0x17,0x19,0x18,0x0f,0x0f,0x17,0x19,0x0e,0x0c,0x10,0x1b -,0x1e,0x1b,0x17,0x0f,0x14,0x17,0x1c,0x2b,0x38,0x2e,0x28,0x33,0x33,0x1c,0x1a,0x26,0x23,0x1f,0x1a,0x11,0x0d,0x0f,0x17,0x1e,0x31,0xc5,0xb2,0x97,0x8a,0x88,0x86,0x84 -,0x81,0x81,0x80,0x80,0x81,0x81,0x81,0x82,0x82,0x83,0x87,0x8d,0x8e,0x93,0xae,0x1e,0x0f,0x0f,0x0c,0x07,0x04,0x02,0x01,0x01,0x01,0x03,0x03,0x04,0x05,0x0c,0x14,0x12 -,0x15,0x15,0x1e,0x37,0x35,0x47,0x2f,0x24,0x28,0x2c,0x3d,0x4d,0x3b,0x35,0xbc,0xaf,0xb4,0xba,0xb8,0xb4,0xaf,0xa7,0x9d,0xa6,0x48,0xb4,0x9d,0x9f,0xaf,0x9b,0x90,0x90 -,0x8f,0x8d,0x8d,0x91,0x95,0x8e,0x8d,0x8f,0x9d,0xb6,0xa1,0xab,0xba,0xb7,0xac,0xbd,0xae,0xa4,0xa8,0xad,0xaf,0xcf,0x4b,0xb1,0xb0,0x35,0x29,0x2d,0x22,0x1d,0x1f,0x2e -,0x1e,0x27,0x34,0x27,0x1a,0x10,0x10,0x18,0x1c,0x1a,0x13,0x0d,0x0f,0x13,0x1a,0x1d,0x1f,0x1f,0x31,0x39,0x29,0x23,0x1e,0x1d,0x28,0x29,0x17,0x0d,0x0c,0x11,0x17,0x13 -,0x18,0x1e,0x2e,0xa8,0x9d,0x8f,0x88,0x87,0x84,0x82,0x81,0x82,0x81,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x86,0x8d,0x96,0xa8,0x33,0x14,0x0d,0x06,0x02,0x03,0x02,0x02 -,0x03,0x01,0x03,0x08,0x07,0x06,0x0b,0x0d,0x0e,0x15,0x18,0x1b,0x15,0x1f,0x2d,0x28,0x26,0x37,0x4e,0xbc,0xac,0xc3,0xa8,0xaa,0xdb,0xa5,0x9c,0xb8,0xca,0xc4,0xbc,0xac -,0xb5,0xbc,0x9e,0x9e,0x9a,0x96,0x97,0x92,0x98,0x9d,0x96,0x93,0x9f,0xab,0xac,0xb0,0xa1,0xa8,0xa6,0x9b,0x9f,0x9d,0x98,0x9e,0xa8,0xa5,0xaa,0xa1,0xa6,0xc7,0x39,0x3b -,0x5a,0xc8,0xe8,0x3f,0x3c,0x2a,0x30,0x51,0x3a,0x2d,0x28,0x1f,0x28,0x22,0x16,0x0f,0x15,0x17,0x16,0x13,0x11,0x19,0x1b,0x22,0x2e,0x2a,0x1f,0x18,0x17,0x22,0x20,0x15 -,0x0d,0x0c,0x0c,0x0c,0x0b,0x0e,0x11,0x12,0x1c,0x2b,0x2e,0x31,0xbe,0xa3,0x94,0x89,0x87,0x87,0x84,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x84,0x86,0x89,0x8d -,0x96,0xaf,0x1f,0x10,0x09,0x08,0x06,0x04,0x03,0x03,0x06,0x07,0x06,0x05,0x09,0x0b,0x0a,0x0c,0x11,0x0e,0x09,0x0d,0x15,0x1b,0x19,0x1b,0x44,0xd7,0xe9,0xc5,0xb5,0xb7 -,0xae,0xab,0xac,0xa7,0xb0,0xad,0xa7,0xa1,0x9d,0x9d,0x9d,0x96,0x95,0x93,0x9a,0x9e,0x9a,0x9e,0x9c,0x9b,0x9b,0x9f,0x9e,0xa6,0xa6,0xad,0xa8,0xaa,0xa2,0xa3,0xa6,0xa0 -,0xaa,0xa1,0xb7,0xac,0xc4,0x5c,0xf1,0xf9,0x2d,0x24,0x2d,0x26,0x33,0x3d,0x53,0x3b,0x2b,0x2b,0x32,0x21,0x1f,0x1f,0x17,0x1f,0x1c,0x19,0x1e,0x1f,0x26,0x26,0x28,0x2e -,0x37,0x2b,0x29,0x3c,0x32,0x34,0x35,0x38,0xc3,0xbb,0x3e,0xc5,0xbf,0xc3,0xab,0xc1,0xba,0xa6,0xb1,0xab,0xa7,0xaa,0xaa,0xa9,0xae,0xa7,0x9c,0xaf,0xa4,0xa6,0xa1,0x9b -,0xa0,0x9f,0x97,0x9a,0xa2,0x9c,0xa3,0xab,0xb6,0xc7,0xbd,0xdb,0x39,0x4b,0x45,0x2e,0x2c,0x29,0x1e,0x26,0x25,0x18,0x1b,0x19,0x18,0x19,0x16,0x1f,0x20,0x1a,0x1f,0x27 -,0x22,0x24,0x28,0x23,0x3a,0x2e,0x2e,0x4f,0xf3,0xc2,0xbf,0xb7,0xa8,0xa4,0xab,0xa6,0xa3,0x9e,0x9b,0x9b,0x96,0x94,0x94,0x95,0x92,0x95,0x9a,0x98,0x9e,0x9f,0x9b,0xa3 -,0xa5,0xa0,0x9f,0xa8,0xb1,0xa7,0xae,0xbd,0xbc,0xbf,0x58,0x73,0x3b,0x36,0xe2,0x45,0x36,0x32,0x42,0x37,0x1f,0x1c,0x1e,0x1b,0x1a,0x1e,0x1a,0x1f,0x1d,0x12,0x18,0x1d -,0x18,0x16,0x1d,0x1d,0x1a,0x1a,0x1d,0x1f,0x1e,0x1b,0x1b,0x1f,0x23,0x1b,0x1a,0x24,0x1c,0x18,0x1e,0x21,0x22,0x2e,0x2b,0x29,0x45,0x58,0x5d,0xb3,0xab,0xac,0x9f,0xa3 -,0x98,0x93,0x94,0x91,0x8f,0x8c,0x8c,0x8d,0x8d,0x8c,0x8d,0x8f,0x8e,0x8c,0x8d,0x8f,0x94,0x97,0x97,0xa0,0xa8,0xa8,0xb8,0xde,0x4d,0x34,0x2d,0x29,0x1d,0x1c,0x1b,0x17 -,0x15,0x0f,0x0f,0x10,0x0e,0x0c,0x0f,0x11,0x12,0x11,0x0f,0x18,0x1a,0x17,0x1b,0x1f,0x1f,0x1f,0x28,0x36,0x4c,0xef,0xcd,0xb2,0xb1,0xab,0xa3,0xad,0xa3,0x9e,0xa5,0xa3 -,0x9a,0x99,0x9a,0x9e,0x9d,0x98,0x9b,0x9f,0x9c,0x99,0x9e,0xa7,0xa2,0x9d,0xa7,0xa5,0xa4,0xa6,0xaa,0xab,0xb4,0xc7,0xc7,0xc9,0xce,0x5b,0xcc,0xcf,0x3f,0x3d,0x43,0x3e -,0x34,0x31,0x3c,0x49,0x33,0x2d,0x32,0x36,0x35,0x2a,0x36,0x3f,0x39,0x34,0x31,0x30,0x25,0x2d,0x2a,0x2a,0x35,0x2d,0x2c,0x35,0x33,0x32,0x3a,0x2e,0x30,0x41,0x2f,0x2a -,0x4b,0x5f,0x3d,0x3f,0x67,0x66,0xe7,0xdf,0xed,0xc3,0xc7,0xcc,0xbb,0xae,0xa9,0xae,0xab,0xa0,0xa5,0xa2,0xa4,0xa2,0x9e,0xa1,0xa3,0xa2,0xa3,0xa6,0xab,0xb3,0xac,0xba -,0xd2,0x6c,0x3f,0x3c,0x30,0x28,0x2a,0x2e,0x26,0x1f,0x22,0x21,0x20,0x1e,0x1f,0x1e,0x21,0x1d,0x1e,0x27,0x1f,0x24,0x24,0x28,0x2f,0x2d,0x2b,0x2f,0x2e,0x3b,0x45,0x3a -,0x5b,0xd1,0xe4,0xcd,0xb0,0xae,0xa8,0xa9,0xa7,0x9e,0xa5,0xa7,0x9f,0x9f,0x9e,0x9f,0xa0,0xa1,0x9d,0xa1,0xac,0xa4,0xa8,0xaf,0xad,0xb1,0xbc,0xb3,0xbd,0xdc,0xcc,0xc5 -,0xdf,0xd3,0xd1,0xfe,0xe3,0x55,0x3f,0x4f,0x3d,0x30,0x3c,0x39,0x42,0x3b,0x28,0x2e,0x31,0x26,0x33,0x2f,0x2c,0x3b,0x39,0x2f,0x3c,0x3e,0x38,0x45,0x46,0xe8,0x4f,0x4d -,0x5e,0xcd,0xd4,0x7b,0xec,0x6a,0x79,0x7a,0x42,0x5d,0x61,0x4d,0xd8,0x7e,0x4b,0xdb,0xcc,0xd7,0xb6,0xbf,0xb5,0xb7,0xae,0xae,0xad,0xac,0xb4,0xac,0xa7,0xac,0xaf,0xa8 -,0xaa,0xae,0xb4,0xaf,0xb7,0xbd,0xbc,0xbe,0xc5,0xc8,0xc4,0xd6,0x5c,0x5d,0xcc,0x4e,0x61,0x70,0x55,0x38,0x2c,0x38,0x2f,0x25,0x2c,0x34,0x2a,0x27,0x25,0x25,0x24,0x22 -,0x24,0x25,0x22,0x28,0x2d,0x2a,0x2b,0x2d,0x3b,0x3b,0x3f,0x4d,0xdf,0xf9,0x56,0xb9,0xc3,0xca,0xb8,0xb6,0xb6,0xb6,0xb3,0xb5,0xb7,0xc7,0xb9,0xb6,0xc4,0xbe,0xab,0xb9 -,0xc7,0xb0,0xaf,0xaf,0xb6,0xac,0xaf,0xb8,0xb8,0xb6,0xb6,0xbf,0xba,0xc3,0xbe,0xc9,0x54,0xce,0x47,0x31,0x56,0x48,0x2e,0x41,0x49,0x31,0x35,0x3c,0x4b,0x4a,0x4c,0x5b -,0x59,0x52,0x61,0x5f,0xf7,0xd6,0xf8,0xca,0xbe,0x6c,0x73,0xc3,0x43,0x3f,0xe3,0x47,0x44,0x5f,0x44,0x3f,0x43,0x4e,0x4a,0x3f,0x56,0x4b,0x42,0x62,0x5a,0x4a,0xe1,0xdb -,0x49,0xc4,0xbd,0x6c,0xd1,0xbf,0xf4,0x6a,0xdc,0xe7,0xc4,0xd8,0xe0,0xda,0xca,0xe7,0xc9,0xc8,0xc0,0xd1,0xeb,0xbf,0xcf,0x7a,0xbb,0xc5,0xdc,0xbb,0xd0,0xcf,0x4d,0xed -,0x76,0x66,0x4a,0x4e,0xe9,0x4f,0x37,0x52,0xd5,0x4a,0x4f,0xfe,0xd6,0x3d,0x4e,0x6f,0x5e,0x4d,0xcd,0xce,0x72,0xd9,0xbf,0xda,0xd7,0xc8,0xdb,0xce,0x55,0xcf,0xca,0x7a -,0x53,0xd9,0xd3,0xe6,0x49,0xda,0xcc,0x48,0x46,0x69,0x5e,0x3f,0x4e,0xdf,0x6d,0x4a,0x60,0xef,0xcc,0x48,0x64,0xd2,0x51,0x54,0xe0,0x59,0x46,0xd7,0xe6,0x5e,0x65,0xeb -,0xd4,0x5e,0x3a,0x65,0x6e,0x4a,0xd5,0x71,0x53,0xdc,0x50,0xe4,0xce,0x50,0xce,0xc1,0xcb,0xd4,0xc4,0xd7,0xbd,0xbf,0xdd,0xbe,0xc7,0xce,0xba,0xcb,0x4c,0xc0,0xe5,0x61 -,0xde,0x46,0x4f,0x4e,0x3d,0x49,0x6c,0x3e,0x49,0xce,0x3e,0x4d,0xdf,0x59,0xcd,0x4e,0x5e,0xc9,0xd0,0x71,0xd9,0xc9,0xe2,0x6c,0x5d,0xd9,0x62,0x4a,0x70,0x56,0x52,0x59 -,0x4b,0x4e,0x6d,0x73,0x52,0x3e,0xed,0xd2,0x57,0x51,0xf3,0xcd,0x75,0xe2,0x67,0xc7,0xf4,0x7c,0xd8,0xd4,0xe7,0x49,0xd6,0x59,0x68,0x54,0x77,0xdf,0x79,0xe9,0x45,0xe4 -,0xe4,0xfc,0x6d,0x57,0xcd,0xfd,0xce,0xee,0x59,0xcf,0xd5,0xf9,0x5c,0xdb,0xcf,0x5c,0x5b,0xcd,0x62,0x55,0xf9,0xc5,0x60,0x4b,0xcf,0xdc,0xce,0xda,0x6f,0x71,0xce,0xd1 -,0x6f,0xe6,0xe1,0x6d,0xc5,0x54,0x4f,0xcc,0x52,0x4a,0xf8,0xd1,0x47,0x59,0xdf,0xdb,0x6e,0x3f,0xcf,0xc9,0x6f,0xd7,0xcd,0xde,0xe1,0xdf,0x4b,0xcc,0x63,0x4d,0xc6,0x76 -,0x4c,0xe5,0xdb,0x3b,0xed,0xd8,0x43,0x6f,0x77,0xea,0x48,0x45,0xca,0xe9,0x4e,0xc8,0xc6,0x59,0xf7,0xc9,0x5d,0xe7,0xed,0x61,0xcd,0xdf,0x6c,0xd4,0x6a,0x50,0xc7,0x63 -,0x78,0xda,0xc8,0x5c,0x4c,0xcc,0xcc,0xf2,0x6c,0xc1,0xf5,0xe1,0xe8,0xca,0x58,0x4c,0xe0,0x6e,0xfa,0x53,0x53,0xda,0xdb,0x4a,0x68,0xcf,0xe0,0x63,0xcd,0x48,0x5e,0xe6 -,0xec,0xdf,0x73,0xc4,0xf3,0xee,0xe5,0xd4,0x3e,0x44,0xe5,0x4c,0x5b,0x4d,0x46,0x52,0x61,0x4f,0x54,0xda,0xc8,0x69,0x43,0xcf,0xd0,0x4e,0xe5,0xee,0xc9,0xc6,0xf5,0x78 -,0xc8,0xee,0x4d,0xdf,0x58,0x56,0x64,0x4b,0x49,0x4f,0x53,0x59,0x50,0xda,0xca,0x72,0x52,0xd9,0xcb,0xd6,0x49,0xc4,0xba,0x4e,0xce,0xd9,0xd6,0xd9,0xea,0x5f,0x57,0x78 -,0xdc,0x5e,0x56,0xec,0x4d,0x52,0x53,0xd9,0x69,0x55,0x59,0xc7,0xcf,0x4b,0x60,0xcc,0xbc,0x4e,0xde,0xcb,0xd6,0x5e,0x4d,0xcd,0x75,0x4a,0x53,0xe1,0xf9,0x60,0x48,0x53 -,0xe6,0xcb,0x6c,0x3b,0xe6,0xce,0x4e,0x49,0x78,0xbf,0xdc,0x43,0xc4,0xc0,0x54,0xdf,0xea,0xec,0xdd,0x4a,0xf1,0xf3,0x56,0x54,0x4e,0x71,0x6c,0xd5,0x59,0x3c,0xec,0xc5 -,0x52,0x3e,0x71,0x5d,0xf3,0x55,0xef,0xcd,0x78,0xe5,0x4e,0xb6,0xfb,0x5a,0x5e,0x6e,0xcd,0x4a,0xdb,0x58,0xd9,0x6d,0x45,0x72,0xd0,0x54,0x48,0x5b,0xcc,0x4d,0x41,0xd0 -,0x7d,0x5e,0xcf,0x78,0xdf,0xc9,0xd8,0xcc,0xde,0xc5,0xd3,0xe3,0x53,0xd5,0xbe,0x4d,0x5a,0xc5,0xde,0x3f,0x48,0xc9,0x79,0x37,0x4a,0xd9,0x4d,0x52,0xfa,0x58,0xde,0x5f -,0xd2,0xd1,0xcf,0xe8,0xbe,0xc5,0x4c,0xb4,0xc3,0x4c,0x7e,0xc8,0xc1,0x3c,0x4d,0xb6,0x47,0x34,0x4d,0x75,0x40,0x4c,0x49,0x6b,0xd4,0x48,0x4f,0xdb,0xd7,0xe7,0xbf,0xed -,0xd8,0xbe,0xbf,0x5e,0xf8,0xb5,0xc3,0x47,0x73,0xc8,0xf8,0x41,0x48,0xcf,0x47,0x37,0x60,0xd3,0x45,0x42,0x46,0xd3,0x49,0xfd,0xd2,0xcd,0xcd,0x7c,0xbe,0xdb,0xb9,0xe6 -,0xcd,0xe9,0xc9,0xc7,0x3e,0x5c,0x69,0xcf,0xd2,0x44,0x49,0xd3,0x3f,0x3c,0x4e,0xcc,0x51,0x50,0x42,0xdc,0xca,0x47,0x62,0xbf,0xc1,0xd7,0xce,0x58,0xcd,0xcb,0xc3,0xc6 -,0xb4,0x4f,0xbe,0xae,0xab,0xe9,0xca,0x28,0x04,0x0b,0x34,0x8c,0x86,0x2d,0x06,0x19,0xc9,0x97,0x8f,0x9d,0xac,0x92,0xa5,0x2b,0x14,0x03,0x28,0x91,0x8b,0x8f,0x12,0x01 -,0x10,0x8c,0x88,0x88,0x95,0x1f,0x22,0x0f,0x5e,0x9e,0x0f,0x0b,0xbc,0xaa,0x9d,0x37,0x0b,0x12,0xa5,0x9d,0xa0,0x45,0x13,0x9a,0x8d,0x8f,0x95,0x1f,0x05,0x45,0x85,0x94 -,0x2a,0x0f,0x0e,0xc9,0xa6,0x8f,0x98,0x24,0x4d,0x23,0x1f,0x17,0x10,0x06,0x0b,0x8d,0x87,0x9e,0x0c,0x03,0xe6,0x8d,0x8a,0x91,0x93,0xaf,0x97,0x8b,0x46,0x2c,0x1f,0x14 -,0x49,0x76,0xd9,0xcc,0x07,0x0d,0xa1,0xa6,0x38,0x46,0x0f,0x0c,0xa1,0xcb,0xaf,0x1d,0x14,0x88,0x86,0x2e,0x2f,0x24,0xe3,0x87,0x94,0x9b,0xae,0x30,0x3f,0xa8,0x40,0xbc -,0x1f,0x0c,0xbf,0x99,0x33,0x0e,0x08,0x06,0x1f,0xcd,0x9e,0x37,0xc9,0x8f,0x8c,0x8c,0xde,0x12,0x0d,0x26,0x89,0x80,0x9f,0x15,0x0f,0x5f,0x92,0xcc,0x37,0xa3,0x72,0xa7 -,0x9b,0x20,0x12,0x0d,0x05,0x13,0x1a,0x27,0x22,0x09,0xa1,0x80,0x8b,0x92,0xdf,0x36,0x96,0x8e,0x8e,0xdc,0x0c,0x2a,0x94,0x9b,0x26,0x15,0x17,0x1d,0x9f,0x90,0xa5,0x1c -,0x11,0x0a,0x0e,0x0e,0x14,0x20,0x0e,0x96,0x80,0x8c,0xab,0x0d,0x20,0x89,0x84,0x8c,0xd7,0x2e,0xa7,0xc5,0x2c,0x40,0x33,0x14,0x10,0xcd,0x9f,0xbc,0x0d,0x07,0x0e,0x1a -,0x10,0x2f,0xe4,0x9a,0x82,0x84,0x8c,0x14,0x0b,0x2e,0x92,0x86,0x8b,0x17,0x06,0x1e,0xa0,0xa0,0xca,0xa7,0xa9,0xff,0x1e,0x3b,0x1a,0x0f,0x0d,0x16,0x2b,0x14,0x1b,0x17 -,0x9e,0x82,0x82,0x8b,0x3f,0x0d,0x31,0x96,0x8b,0x8c,0x1e,0x0e,0x19,0xad,0xa8,0x1b,0x18,0x7d,0x9e,0x9d,0x27,0x18,0x1b,0x17,0x0c,0x07,0x26,0x2a,0xd4,0x95,0x88,0x80 -,0x98,0x0e,0x0b,0xbd,0x86,0x85,0x9d,0x41,0x27,0xf3,0xa5,0xcb,0x18,0x1d,0x3e,0xd2,0xb9,0x19,0x03,0x01,0x09,0x12,0xa5,0x93,0x8b,0x8c,0x99,0x98,0x9e,0xd1,0x1e,0x32 -,0x94,0x81,0x90,0x1e,0x0d,0x1a,0x9a,0x8b,0xa7,0x35,0x22,0x1d,0x21,0x12,0x11,0x04,0x05,0x07,0x1c,0x97,0x98,0x99,0x91,0x8c,0x8d,0x99,0xb0,0x9c,0xb0,0x8e,0x8e,0xa8 -,0x3c,0x0a,0x21,0x99,0x8f,0xb3,0x0c,0x0a,0x22,0x1b,0x1e,0x0e,0x0b,0x10,0x15,0xbb,0x9d,0x8c,0x92,0x9c,0xa5,0xad,0xa6,0x24,0x1c,0x9f,0x88,0x88,0x8b,0xa6,0xbd,0xbe -,0xa8,0xb9,0x14,0x07,0x0e,0x2d,0x1d,0x0c,0x02,0x04,0x08,0xd6,0x8a,0x85,0x86,0x8d,0xb4,0x1b,0x2b,0xbf,0xa0,0xbc,0x8f,0x8d,0x97,0xa2,0x1f,0xb6,0x8d,0x93,0xa8,0x12 -,0x0a,0x1a,0x10,0x17,0x0a,0x03,0x02,0x08,0x9d,0x88,0x85,0x8c,0xa8,0x37,0x1e,0xe6,0x92,0x8f,0x86,0x89,0x9d,0xa5,0x34,0x36,0xbb,0x9b,0x97,0x1c,0x03,0x02,0x0a,0x1e -,0x42,0x1e,0x13,0x07,0x1c,0x9c,0x8c,0x89,0x96,0xa4,0x28,0x24,0x38,0xcc,0xa2,0x8b,0x8a,0x8e,0x90,0x9e,0xa7,0xac,0xc0,0x59,0x14,0x04,0x09,0x0c,0x26,0x1c,0x06,0x05 -,0x08,0x9a,0x85,0x84,0x84,0x95,0x4c,0x10,0x17,0x39,0xfd,0x99,0x8e,0x8f,0x8f,0xb1,0xbe,0xba,0xaf,0xa4,0xee,0x27,0x0e,0x10,0x1a,0x21,0x16,0x0a,0x00,0x0d,0x9b,0x87 -,0x87,0xa4,0x3c,0x1e,0x1b,0x56,0x98,0x8a,0x87,0x89,0x9b,0xaa,0xdc,0x2c,0xa0,0xb1,0xb0,0x2d,0x09,0x06,0x0a,0x21,0xbe,0x21,0x14,0x06,0x15,0x9d,0x8c,0x85,0x9b,0x64 -,0x19,0x11,0x25,0xbd,0x9c,0x85,0x88,0x8a,0x98,0xbb,0x9d,0xa5,0xae,0xc5,0x1a,0x08,0x04,0x0c,0x1f,0x25,0x12,0x0a,0x06,0x23,0x96,0x86,0x86,0x8c,0xa3,0x1e,0x17,0x1d -,0xb8,0x9f,0x87,0x8a,0x8f,0xb0,0x19,0x35,0xcd,0xc5,0xae,0x2f,0x29,0x1a,0x1d,0x35,0x13,0x0b,0x0b,0x03,0x22,0x9a,0x8e,0x89,0xab,0xac,0x2d,0x1d,0x36,0xa8,0x90,0x85 -,0x8a,0x8f,0xb6,0x3a,0x27,0xda,0xcd,0x2f,0x1a,0x10,0x18,0x1d,0x56,0x2a,0x17,0x16,0x0e,0x11,0xa3,0xa7,0x8d,0x9f,0xaa,0xdc,0x13,0x17,0x31,0x9b,0x86,0x87,0x8b,0x8d -,0xaa,0xb4,0x52,0xc9,0x28,0x16,0x0f,0x13,0x23,0x39,0x1a,0x10,0x09,0x0e,0x09,0x39,0x91,0x8a,0x85,0x91,0x99,0x15,0x0e,0x1f,0xb9,0x8c,0x85,0x96,0x97,0x41,0x3b,0x48 -,0x39,0xe4,0x42,0x2c,0x2d,0x29,0x35,0x1c,0x0d,0x0d,0x09,0x13,0x0b,0xc3,0x96,0x8b,0x8a,0x8f,0xba,0x20,0x26,0xae,0x96,0x8a,0x8d,0xaf,0xa8,0x27,0xcb,0x23,0x20,0x30 -,0x32,0xc2,0xb6,0xe3,0xd9,0x1d,0x0f,0x0f,0x15,0x15,0x0f,0x51,0x9c,0x8d,0x92,0xbd,0x1b,0x11,0x28,0xa7,0x95,0x85,0x88,0x8e,0x95,0xc7,0x41,0x1f,0x1d,0x2e,0x34,0xb0 -,0x5c,0x1e,0x21,0x0c,0x0f,0x16,0x1e,0x2b,0x17,0xb9,0x9c,0x92,0x98,0x47,0x2c,0x1a,0x36,0xab,0xa1,0x8b,0x88,0x95,0x96,0xb7,0xbd,0xbf,0xd6,0xb3,0x7e,0x3a,0x1b,0x12 -,0x10,0x0e,0x0e,0x11,0x17,0x20,0x0e,0x4b,0x98,0x8d,0x87,0x92,0xa3,0x1a,0x1d,0x32,0xbf,0x8f,0x8a,0xa6,0xb0,0x32,0x2d,0xeb,0xb8,0xa2,0xc4,0xad,0xca,0x2f,0x2c,0x1c -,0x0e,0x0d,0x0c,0x17,0x0b,0x17,0xb8,0x98,0x88,0x93,0x9a,0x32,0x24,0xae,0x9a,0x8f,0x8a,0xa1,0xc7,0x30,0x2d,0x52,0x3b,0xd4,0x29,0xdf,0xcc,0xbd,0xc4,0x4a,0x25,0x15 -,0x11,0x13,0x0c,0x09,0x2a,0xaf,0x92,0x97,0x9e,0x3a,0x22,0xb4,0x9f,0x8a,0x88,0x88,0x9d,0xb0,0x5a,0x2e,0x39,0x29,0x2f,0x2d,0x32,0x31,0x29,0x1c,0x1c,0x13,0x1b,0x17 -,0x1b,0x20,0x20,0x9f,0x94,0x91,0x97,0xc0,0x2c,0x1d,0x38,0x99,0x97,0x8b,0x97,0xae,0xa2,0xc9,0xab,0xb5,0xb0,0x44,0x27,0x2f,0x2a,0x14,0x18,0x12,0x0b,0x0f,0x0f,0x2f -,0x17,0xaf,0x8f,0x89,0x87,0x96,0xaa,0x17,0x1d,0x3b,0xb1,0x9e,0x98,0xcf,0xb0,0x61,0xad,0x9c,0xaa,0x9e,0x4a,0xb8,0xcb,0x24,0x20,0x18,0x0c,0x0e,0x0d,0x19,0x14,0x10 -,0xbc,0x98,0x87,0x93,0x96,0xb9,0x23,0xca,0xaf,0x96,0x93,0x9a,0xb5,0xde,0x4b,0x4f,0x38,0x47,0x34,0x57,0xec,0xd5,0xcf,0x23,0x27,0x15,0x19,0x17,0x14,0x0f,0x1b,0xa7 -,0x97,0x94,0x9d,0x9f,0x28,0x2f,0xb6,0x8f,0x8e,0x8a,0x92,0xbf,0xb7,0x27,0x2e,0x2e,0x2a,0x25,0x20,0x20,0x39,0x20,0x40,0x2a,0x2d,0x33,0x21,0x31,0x16,0xd5,0xa6,0x98 -,0x95,0xb1,0x2a,0x12,0x1e,0xae,0x97,0x90,0x8c,0xa7,0xa7,0xbc,0xbc,0xa4,0xc3,0x45,0x24,0x20,0x25,0x2a,0x23,0x27,0x1b,0x27,0x1c,0x28,0x1b,0x1d,0xa2,0x99,0x8e,0xa6 -,0xc6,0x1f,0x18,0x3a,0xa8,0x9b,0x95,0x9c,0xc4,0xaf,0xa7,0x9e,0xac,0xa9,0xed,0xf0,0x52,0x39,0x27,0x17,0x17,0x0e,0x0e,0x0f,0x15,0x0d,0x40,0x9d,0x8d,0x8d,0x94,0x9d -,0x2b,0xb3,0xb6,0x9d,0x9a,0x9b,0xcf,0xbd,0x64,0xc4,0x3d,0xe2,0xcf,0x33,0xb4,0xcd,0xbd,0x22,0x2b,0x0f,0x12,0x0f,0x14,0x0c,0x19,0xb3,0x9b,0x8e,0x9d,0x9e,0x32,0xe0 -,0xaf,0x96,0x94,0x8f,0xa5,0xbf,0xaf,0xd6,0xf1,0x2d,0x32,0x26,0x43,0x4c,0xca,0x2d,0x4e,0x20,0x1c,0x1c,0x1b,0x16,0x15,0xcb,0xaa,0x98,0xaf,0xd9,0x1f,0x23,0xda,0x9c -,0x94,0x8f,0x93,0x9c,0x93,0x9f,0xac,0x40,0x3e,0x2d,0x33,0x36,0x42,0x1e,0x1e,0x13,0x0e,0x14,0x18,0x1a,0x15,0xa5,0x9d,0x92,0x9e,0xae,0x64,0x2b,0xd2,0xa9,0xa5,0x9b -,0x99,0xb0,0x99,0xa7,0x9f,0xbc,0xc9,0x57,0xfa,0x48,0xcf,0x2a,0x1c,0x13,0x0c,0x0e,0x13,0x13,0x0f,0xb3,0xa4,0x93,0x9b,0x97,0xb3,0xb7,0xae,0xa6,0x9e,0x9d,0xa3,0x6f -,0xa7,0xb8,0xba,0x42,0x7b,0x37,0xb1,0xb0,0xac,0x4d,0x2d,0x16,0x14,0x12,0x17,0x0d,0x17,0xb7,0xb5,0xa8,0xd4,0xbd,0x30,0xab,0xa1,0x93,0x97,0x93,0x9e,0x9e,0x97,0xa0 -,0xba,0x33,0x3a,0x2d,0x31,0x3a,0x3e,0x34,0x29,0x1c,0x17,0x18,0x11,0x0f,0x3e,0xa6,0xa5,0x67,0xca,0x27,0x34,0xab,0x96,0x96,0x96,0x99,0x9f,0x96,0x95,0x97,0xa8,0xb3 -,0x3e,0x3b,0x2a,0x20,0x1b,0x17,0x13,0x0c,0x0d,0x0c,0x0c,0xe0,0x9b,0x99,0xaa,0xad,0xd2,0xbd,0x9d,0x95,0x98,0x9a,0x9b,0xaa,0xa1,0xa2,0xac,0xc1,0xab,0xb4,0x56,0x3c -,0x27,0x1f,0x1c,0x1d,0x16,0x15,0x0d,0x0a,0x2e,0xab,0xac,0x39,0x59,0x30,0xcd,0x9e,0x99,0x9a,0x96,0x94,0x9c,0x9b,0xb6,0xb6,0x5c,0x62,0xdc,0xe1,0x4b,0x32,0x28,0x29 -,0x28,0x1e,0x26,0x14,0x13,0x2f,0xbf,0x29,0x1d,0x24,0x1e,0x39,0xab,0xa0,0xa4,0x91,0x95,0x8d,0x8f,0x93,0x9d,0xae,0xaa,0xae,0xa8,0xbe,0x34,0x1b,0x13,0x0f,0x15,0x11 -,0x0f,0x14,0x2d,0x3e,0x1d,0x1d,0x29,0x35,0xb8,0xa6,0xa7,0xb3,0x9a,0x96,0x8f,0x8e,0x90,0x9e,0xaa,0xa3,0xb0,0xa8,0xaf,0xc9,0x36,0x19,0x0e,0x0d,0x0b,0x09,0x0d,0x2d -,0x28,0x18,0x1a,0x38,0x54,0xa3,0x97,0x96,0x95,0x91,0x91,0x8f,0x8c,0x9a,0xa2,0xc6,0x67,0x50,0xc3,0x4b,0xe6,0x54,0x27,0x1d,0x11,0x11,0x0a,0x0f,0x36,0x2c,0x13,0x16 -,0x1d,0x22,0xb5,0x9b,0x97,0x99,0x90,0x8f,0x8c,0x8a,0x8f,0x93,0xa6,0xa6,0xcb,0xbe,0x4f,0x28,0x1d,0x15,0x14,0x0f,0x0d,0x09,0x12,0x1f,0x20,0x12,0x21,0x2e,0x46,0x9f -,0x9f,0x9d,0x98,0x8f,0x8e,0x8b,0x8c,0x8f,0x98,0x9e,0xa3,0xa4,0xa7,0xb1,0x35,0x19,0x0f,0x0c,0x0b,0x0a,0x09,0x15,0x17,0x0f,0x12,0x24,0x39,0xa9,0x93,0x95,0x99,0x8f -,0x8b,0x8d,0x8b,0x8e,0x94,0xa6,0xb6,0xc5,0xaf,0xab,0xbd,0x2d,0x19,0x12,0x0a,0x0d,0x0c,0x0e,0x1a,0x1a,0x0f,0x10,0x1e,0x35,0xa4,0x94,0x96,0x99,0x90,0x8d,0x8b,0x8a -,0x8d,0x92,0x9f,0xb6,0xcf,0xc8,0xbb,0x4e,0x27,0x17,0x11,0x0c,0x0a,0x08,0x11,0x1d,0x1c,0x14,0x1b,0x29,0x3c,0xa4,0x9c,0xa2,0x9e,0x95,0x8f,0x89,0x8a,0x8d,0x94,0x9d -,0xa6,0xa6,0xac,0xb5,0xd2,0x26,0x18,0x0e,0x0e,0x09,0x07,0x0f,0x15,0x13,0x14,0x26,0x2f,0xcb,0x9e,0x9e,0xa5,0x97,0x8f,0x8d,0x88,0x8b,0x90,0x9d,0xa5,0xab,0xa5,0xad -,0xda,0x3a,0x1c,0x15,0x0e,0x0e,0x0a,0x0c,0x10,0x0f,0x0d,0x13,0x29,0x3d,0xa2,0x9a,0x9a,0x99,0x90,0x8e,0x89,0x87,0x8c,0x93,0x9b,0xa8,0xb4,0xae,0x4e,0x2a,0x1d,0x16 -,0x0e,0x0e,0x0c,0x0a,0x0f,0x16,0x14,0x0f,0x1c,0x33,0xd7,0x9d,0x9a,0x9f,0x9c,0x94,0x8f,0x89,0x88,0x8d,0x97,0x9a,0x9d,0xa2,0xa5,0xde,0x2d,0x1a,0x11,0x0b,0x0d,0x09 -,0x07,0x0e,0x17,0x13,0x12,0x29,0x37,0xac,0x96,0x95,0x9d,0x96,0x92,0x90,0x8b,0x8b,0x93,0x9d,0xa1,0xa6,0xa0,0xaa,0xe4,0x27,0x16,0x14,0x0e,0x0e,0x0d,0x0a,0x11,0x16 -,0x12,0x13,0x27,0x36,0xbe,0x9d,0x99,0x9e,0x94,0x90,0x8e,0x87,0x8a,0x92,0x9c,0x9d,0xa6,0xa9,0xaf,0x38,0x1d,0x15,0x0f,0x0c,0x0f,0x0d,0x0a,0x13,0x1c,0x16,0x17,0x33 -,0x3b,0xae,0x9a,0x9c,0x9e,0x95,0x93,0x8c,0x89,0x8b,0x94,0x9e,0xa2,0xa0,0xa0,0xaf,0x3d,0x1e,0x12,0x0f,0x0f,0x0e,0x0d,0x07,0x14,0x1b,0x19,0x17,0x2d,0x36,0xad,0x97 -,0x97,0x9a,0x93,0x91,0x90,0x8b,0x8d,0x97,0xa3,0xa3,0xa4,0xa3,0xb4,0x37,0x1d,0x1a,0x18,0x15,0x10,0x0d,0x08,0x13,0x1c,0x1a,0x16,0x2a,0x30,0xcc,0x98,0x98,0x9a,0x94 -,0x8f,0x8f,0x8b,0x8d,0x99,0xa8,0xa2,0xa8,0xaa,0xb2,0x32,0x1b,0x18,0x1a,0x16,0x11,0x10,0x09,0x12,0x1f,0x1d,0x18,0x2b,0x36,0x59,0xa2,0x9c,0x9e,0x98,0x8f,0x8f,0x8c -,0x8e,0x99,0xa0,0x9d,0x9f,0x9f,0xb1,0x3b,0x1d,0x1b,0x19,0x19,0x12,0x10,0x08,0x0f,0x1b,0x1a,0x15,0x27,0x5e,0xf6,0x9f,0x9e,0x9f,0x97,0x8d,0x92,0x8b,0x8c,0x9a,0xaf -,0x9d,0xa5,0xa3,0xad,0x34,0x1d,0x21,0x1e,0x17,0x16,0x16,0x0b,0x0c,0x1c,0x17,0x13,0x1d,0x4b,0x41,0xa3,0x9d,0xa2,0x9a,0x8d,0x8f,0x8c,0x8a,0x98,0xa9,0xa0,0xa5,0xa7 -,0xab,0x3b,0x1f,0x25,0x1f,0x1a,0x16,0x16,0x0e,0x0c,0x1d,0x1b,0x16,0x17,0x3d,0x35,0xad,0x9e,0xa2,0xa7,0x92,0x92,0x91,0x89,0x8f,0x9f,0x9f,0x9a,0xaa,0xa8,0xc6,0x26 -,0x1e,0x27,0x1a,0x12,0x16,0x0f,0x0a,0x17,0x20,0x19,0x19,0x34,0x34,0xc3,0x9d,0xa1,0xa6,0x97,0x95,0x94,0x8c,0x8e,0x9b,0x9c,0x9b,0xa5,0xa5,0xd4,0x2b,0x21,0x25,0x1c -,0x19,0x12,0x12,0x0a,0x12,0x21,0x21,0x19,0x28,0x37,0x43,0x9f,0x9e,0xa4,0x9b,0x92,0x99,0x8e,0x8e,0x98,0xa1,0x99,0xa6,0xad,0xbc,0x35,0x1f,0x28,0x20,0x19,0x17,0x18 -,0x0d,0x0f,0x25,0x1f,0x18,0x1b,0x35,0x43,0xa2,0x9e,0xa2,0xa1,0x95,0x97,0x92,0x8e,0x93,0x9e,0x9b,0x9d,0xa6,0xad,0x44,0x23,0x25,0x26,0x1c,0x19,0x16,0x0e,0x0c,0x1b -,0x1e,0x1a,0x19,0x35,0x59,0xac,0xa0,0xa9,0xad,0x9b,0x96,0x94,0x8e,0x8f,0x9a,0x9e,0x9a,0x9e,0xa1,0xb8,0x35,0x24,0x22,0x1c,0x18,0x14,0x12,0x0b,0x14,0x1e,0x18,0x14 -,0x28,0x3f,0xba,0x9f,0xa3,0xae,0x9f,0x9a,0x99,0x8e,0x8d,0x96,0xa0,0x9c,0xa1,0xa0,0xae,0x43,0x21,0x24,0x1d,0x1b,0x18,0x18,0x0d,0x0f,0x1c,0x19,0x14,0x1f,0x4c,0xef -,0xa0,0x9e,0xa8,0xa7,0x98,0x9a,0x8f,0x8b,0x90,0xa4,0xa2,0xa7,0xab,0xab,0x5f,0x29,0x27,0x26,0x1b,0x1a,0x16,0x0f,0x0b,0x19,0x1a,0x1a,0x1d,0x39,0xec,0xa8,0x9b,0xa3 -,0xa5,0x9d,0x98,0x94,0x8d,0x90,0x9e,0xaa,0x9f,0xa5,0xa9,0xbd,0x2d,0x26,0x29,0x1e,0x19,0x16,0x11,0x0a,0x11,0x1d,0x1d,0x1c,0x2b,0x4b,0xb4,0x9d,0x9f,0xb0,0xa2,0x97 -,0x98,0x8e,0x8e,0x9a,0xa4,0x9a,0xa0,0xa3,0xb3,0x32,0x21,0x2e,0x22,0x1e,0x19,0x11,0x0c,0x0d,0x1a,0x1e,0x1d,0x1e,0x41,0xc7,0xa3,0xa2,0xab,0xaf,0x99,0x96,0x90,0x8d -,0x93,0x9f,0x9d,0x9d,0xaa,0xb6,0x3b,0x21,0x24,0x29,0x22,0x1e,0x17,0x0f,0x0c,0x17,0x1d,0x1c,0x1a,0x30,0xcf,0xac,0x9f,0xa3,0xae,0x9e,0x97,0x96,0x8f,0x91,0x9c,0xa0 -,0x9b,0xa5,0xaf,0x5c,0x28,0x22,0x27,0x25,0x24,0x1a,0x16,0x0d,0x10,0x1d,0x1c,0x15,0x27,0xcf,0xbb,0x9f,0x9e,0xb0,0xa2,0x97,0x9c,0x8f,0x8e,0x98,0x9d,0x97,0xa5,0xac -,0xcf,0x27,0x22,0x2a,0x1e,0x1e,0x1b,0x14,0x0e,0x0f,0x1c,0x1d,0x19,0x1c,0x4e,0xb9,0xa0,0x9c,0xa6,0xa6,0x99,0x99,0x94,0x8f,0x94,0x9d,0x9b,0xa2,0xad,0xc9,0x2c,0x20 -,0x28,0x22,0x1e,0x1c,0x16,0x10,0x0e,0x1b,0x1f,0x1c,0x1b,0x32,0xd9,0xa7,0x9b,0xa1,0xa9,0x9a,0x97,0x95,0x8e,0x92,0x9d,0x9e,0xa5,0xaf,0xb7,0x3d,0x23,0x27,0x29,0x25 -,0x20,0x17,0x10,0x0d,0x15,0x21,0x20,0x1c,0x2d,0x45,0xba,0x9d,0x9e,0xac,0x9b,0x98,0x97,0x8f,0x90,0x9d,0x9f,0xa1,0xb2,0xb2,0x64,0x28,0x23,0x29,0x24,0x21,0x1a,0x11 -,0x0b,0x12,0x1e,0x1e,0x1f,0x32,0x59,0xbb,0xa1,0xa2,0xae,0x9c,0x96,0x98,0x8f,0x8f,0x9e,0x9f,0x9c,0xab,0xb0,0xcb,0x2a,0x27,0x31,0x24,0x1f,0x18,0x0f,0x0a,0x11,0x1d -,0x1e,0x1c,0x2c,0xf1,0xb0,0x9f,0x9f,0xac,0x9f,0x94,0x95,0x8f,0x8e,0x9c,0xa6,0x9c,0xa7,0xad,0xc3,0x25,0x20,0x2f,0x24,0x1f,0x19,0x10,0x0a,0x11,0x1b,0x1c,0x1b,0x26 -,0x40,0xba,0x9d,0xa0,0xad,0x9f,0x96,0x97,0x8d,0x8e,0x9a,0x9f,0x9d,0xa9,0xab,0xbf,0x23,0x1e,0x2a,0x20,0x20,0x18,0x10,0x0c,0x11,0x1d,0x1f,0x1c,0x27,0x56,0xc4,0x9c -,0x9a,0xa7,0xa1,0x94,0x98,0x8f,0x8d,0x9a,0xa4,0x9e,0xa8,0xb1,0xb9,0x2e,0x1e,0x25,0x23,0x1d,0x18,0x11,0x0c,0x10,0x1d,0x1c,0x1b,0x28,0x3e,0xce,0x9e,0x99,0x9f,0x9c -,0x95,0x98,0x92,0x8f,0x98,0x9f,0x9e,0xa6,0xb4,0xc4,0x2e,0x21,0x28,0x24,0x1c,0x18,0x15,0x0c,0x0f,0x1d,0x1c,0x1b,0x2e,0x3b,0x6d,0xa3,0x9d,0xa1,0x9c,0x96,0x98,0x91 -,0x8f,0x98,0x9f,0x9f,0xae,0xb9,0xb8,0x35,0x1e,0x25,0x21,0x1c,0x1a,0x17,0x0f,0x0f,0x1a,0x1e,0x1e,0x2a,0x36,0x3d,0xae,0xa0,0xa4,0x9e,0x97,0x99,0x95,0x8f,0x98,0x9e -,0x9e,0xa8,0xb4,0xb6,0x3e,0x1f,0x22,0x1f,0x1d,0x1b,0x1a,0x0f,0x0f,0x1a,0x1e,0x1e,0x2a,0x30,0x52,0xab,0x99,0x9c,0x9a,0x95,0x96,0x92,0x8c,0x94,0x9c,0xa6,0xa4,0xb5 -,0xa4,0xcf,0x1f,0x17,0x1d,0x33,0x24,0x51,0x0a,0x22,0x03,0x00,0x00,0x0b,0xaf,0x17,0xba,0x17,0xb2,0x89,0x8e,0x8f,0x89,0x8a,0x8d,0x87,0x83,0x95,0x8f,0x88,0x2c,0x9a -,0x20,0x0c,0x9b,0xb6,0x27,0x1a,0x13,0x06,0x08,0x04,0x0b,0x08,0x04,0x07,0x1a,0x22,0x13,0x15,0x0f,0x22,0x1a,0xbc,0x2d,0x24,0x26,0x76,0xb5,0x9f,0x97,0xba,0x34,0xb5 -,0x99,0x99,0xa7,0xa7,0xaa,0x9d,0x89,0x8a,0x83,0x86,0x83,0x82,0x80,0x87,0x80,0x94,0xae,0x85,0x80,0x8f,0x17,0xd0,0x07,0x10,0x11,0x02,0x01,0x01,0x00,0x0b,0x1e,0x00 -,0x05,0x00,0x0d,0x0c,0x00,0x02,0x04,0x3d,0xab,0x8d,0x8c,0x99,0x60,0x86,0x80,0x81,0x80,0x85,0x8d,0x8f,0x83,0x89,0x8a,0x8a,0x9a,0xbe,0x93,0xd8,0x9a,0x9d,0xb0,0x48 -,0xca,0x9f,0xa5,0x8e,0x9a,0x36,0x22,0x35,0x22,0x32,0x2d,0x0d,0x07,0x06,0x07,0x0a,0x0a,0x0a,0x04,0x01,0x04,0x02,0x02,0x01,0x07,0x0f,0x0c,0xb3,0x40,0x9f,0x85,0x87 -,0x85,0x82,0x89,0x8b,0x83,0x8c,0x89,0x86,0x88,0x83,0xa6,0x8f,0x84,0x3e,0x97,0x86,0x84,0xb0,0x95,0x21,0x18,0xaa,0x00,0x07,0x4d,0x2f,0x00,0x05,0x9b,0x1b,0x06,0x08 -,0x11,0x0a,0x0f,0xaa,0x3b,0x39,0x1c,0x0a,0x01,0x08,0x05,0xc1,0x27,0x14,0x23,0x30,0xe3,0x0f,0x9b,0xcc,0x8a,0x80,0xa5,0x89,0x82,0x80,0x84,0x81,0x82,0x84,0xaa,0x8d -,0x84,0xa0,0x92,0xa1,0x2b,0x1c,0xbd,0x14,0x2a,0x15,0x0a,0x0c,0x00,0x0a,0x0e,0x13,0x09,0x08,0x2d,0x9a,0x87,0x9f,0x13,0x0a,0x39,0x8e,0x56,0x8e,0x20,0x03,0x03,0x17 -,0x2b,0x04,0xa4,0x0f,0x08,0x15,0x0b,0x09,0x00,0x28,0x0b,0x0a,0x00,0x5e,0x83,0x11,0x8d,0x9c,0x2b,0x8a,0x80,0x84,0x81,0x86,0x80,0x97,0x95,0x81,0x8e,0xa6,0xc3,0xc7 -,0x02,0x12,0x1e,0xdf,0x0a,0x22,0x39,0x09,0x0d,0x1d,0x80,0x93,0x3b,0x8a,0x98,0x92,0x85,0x83,0x97,0xb0,0x8e,0x9e,0x9c,0x89,0x89,0xad,0x84,0xcc,0x0e,0x64,0x92,0x84 -,0x4a,0x0b,0x12,0x3e,0x0a,0x24,0x98,0xa4,0x08,0x47,0x1c,0xa9,0x83,0x0c,0x19,0x9e,0x8f,0x0f,0x28,0x2a,0x10,0x07,0x25,0x36,0x00,0xaf,0x13,0x00,0x0b,0x00,0x09,0x02 -,0x18,0x0a,0x02,0x15,0x03,0x99,0x9d,0x93,0x28,0x9c,0x29,0x0a,0x89,0x87,0x88,0x21,0xb5,0xa8,0x8d,0x87,0x8c,0x80,0x88,0x37,0x8d,0x80,0x85,0x82,0x8d,0x80,0x82,0x80 -,0xa7,0x9f,0x80,0x84,0x80,0x94,0x9b,0x1e,0x2e,0x0c,0x08,0x07,0x02,0x09,0x00,0x0f,0x04,0x02,0x00,0x04,0x05,0x01,0x00,0x02,0x00,0x02,0x00,0x1e,0x31,0x02,0xad,0x06 -,0x05,0xa8,0x83,0x87,0x80,0x9a,0x16,0xb8,0x3e,0x80,0x9a,0x8c,0x89,0x14,0x8a,0x80,0x88,0x8b,0x86,0x91,0xef,0x83,0x9e,0xae,0x87,0x27,0x82,0x84,0xb6,0xcf,0x8a,0xc2 -,0x58,0xb5,0x1b,0x98,0x11,0x0f,0x1b,0x2e,0x0e,0x0b,0x02,0x12,0x12,0x0e,0x09,0x03,0x1c,0x0e,0x15,0x07,0xaa,0x19,0xc9,0x85,0x97,0x94,0x8d,0x9d,0xae,0x86,0x88,0x91 -,0x99,0x8e,0xa3,0xd0,0xa0,0x8c,0xde,0xcf,0x21,0xf0,0xce,0x09,0x00,0x03,0x1a,0x0d,0x04,0x2d,0x06,0x08,0xa0,0x0d,0xa5,0x13,0x0f,0x1d,0x3d,0x0f,0x06,0x1b,0x24,0x8a -,0x9b,0x9a,0x9e,0x8d,0x84,0x8b,0x82,0x81,0x88,0x83,0x82,0x88,0x45,0x88,0x80,0x18,0x87,0x8b,0x2a,0x8a,0x94,0x1a,0x8e,0x99,0x14,0x1b,0x0f,0x14,0x0e,0x1a,0x19,0x36 -,0x0a,0x0e,0x08,0x0a,0x05,0x05,0x11,0x08,0x15,0x06,0x21,0x02,0x05,0x8a,0x16,0x05,0xb7,0x0f,0x1a,0x27,0x2f,0x14,0x3a,0x38,0x36,0x8e,0x8b,0xa3,0x2b,0x89,0x6e,0x9e -,0x85,0xaa,0x8f,0x90,0x9b,0xa3,0xa1,0x86,0xa8,0x98,0x80,0x8b,0x80,0x83,0xb0,0x89,0x88,0x92,0x8a,0x8a,0xda,0x21,0xa4,0xa1,0xaf,0x2f,0x60,0x11,0x13,0x33,0x0f,0x16 -,0x06,0x09,0x0b,0x1b,0xca,0x01,0x1b,0x8f,0x04,0x33,0x8d,0x16,0x2a,0x18,0x27,0x2f,0xd3,0x05,0x11,0x2f,0x0d,0x08,0x17,0x0c,0x0c,0x1b,0x10,0x20,0x13,0x08,0x0a,0x24 -,0x06,0xa3,0x08,0x11,0x93,0x1d,0x8d,0x8b,0xa2,0x8b,0x80,0x82,0x80,0x81,0x80,0x81,0x80,0x80,0x82,0x83,0x85,0x8a,0x88,0x81,0x51,0x63,0x41,0x18,0x0a,0x05,0x20,0x00 -,0x0d,0x0f,0x00,0x0d,0x19,0x00,0x09,0x0d,0x05,0x0b,0x03,0x03,0x2e,0x25,0x2f,0x30,0x0b,0x0f,0x0e,0x2f,0xbb,0x1c,0xab,0x2c,0x14,0x1a,0x1d,0x87,0x2d,0x9b,0x80,0x5d -,0x8a,0x87,0x96,0x85,0x84,0xa0,0x8f,0x8c,0x8e,0x86,0xc8,0x8d,0xa4,0x93,0x9f,0xa3,0x90,0x28,0x2d,0xac,0x22,0x0d,0x20,0x07,0xbd,0x0f,0x0a,0x8c,0x0c,0x1c,0x90,0x2f -,0x99,0x96,0xb7,0x8f,0xaf,0x58,0x8c,0x99,0x9b,0x16,0x2b,0x6a,0xb4,0x19,0x22,0xce,0x5b,0xa7,0x20,0x28,0x08,0x99,0x24,0x4c,0x93,0x0c,0x1e,0x8e,0x1f,0x4e,0xa2,0x0b -,0xa1,0x9f,0x2a,0x36,0x1c,0x18,0x22,0x0b,0x0d,0x0a,0x04,0x07,0x01,0x0a,0x09,0x05,0x1e,0x0c,0x2b,0x9a,0x4b,0x84,0x88,0x8b,0x80,0x82,0x80,0x80,0x81,0x81,0x82,0x80 -,0x80,0x87,0x81,0x97,0x8d,0x8d,0x27,0x9e,0x44,0x0f,0xdc,0x14,0x05,0x04,0x00,0x16,0x0a,0x00,0x2b,0x0a,0x0b,0xad,0x06,0x20,0x2b,0x07,0x2e,0x19,0x08,0x1c,0x0a,0x0a -,0x11,0x07,0x0b,0x0f,0x0a,0x09,0x18,0xba,0x15,0x11,0x42,0x11,0x93,0xa0,0x44,0x82,0x90,0xab,0x82,0x87,0x8b,0x83,0x8d,0x85,0x82,0x8e,0x84,0x8b,0x8e,0x8a,0x99,0x92 -,0x92,0x4d,0x24,0x2b,0x25,0xad,0x0a,0x13,0x14,0x1f,0x1c,0x0e,0x8a,0x11,0x0f,0x8b,0x28,0x1e,0x90,0x16,0x4e,0x99,0x14,0x37,0xce,0x3f,0xcc,0x23,0xb9,0xa3,0x0c,0x2d -,0x27,0x16,0x18,0x05,0x06,0x03,0x0d,0x0a,0x0a,0xa5,0x0a,0x10,0x8f,0x0a,0x46,0xba,0x1a,0x9a,0x2c,0x18,0x20,0x13,0x24,0x1a,0x12,0xaa,0x35,0xb0,0x8b,0x8c,0x88,0x89 -,0x87,0x81,0x84,0x80,0x84,0x86,0x80,0x84,0x82,0x85,0x8b,0x84,0x86,0x97,0x90,0xb6,0x39,0x3b,0x11,0x0a,0x08,0x06,0x04,0x01,0x01,0x06,0x01,0x03,0x01,0x03,0x02,0x0d -,0x15,0x00,0xd5,0x2a,0x02,0x92,0x20,0x0c,0xa4,0x25,0x39,0xa4,0xba,0xbc,0x9e,0x94,0xb8,0x9c,0x93,0xb0,0x99,0x8c,0xe2,0x95,0x9a,0x1e,0xaf,0x1b,0x8a,0x25,0x9c,0x84 -,0x2a,0x84,0x8d,0x5c,0x86,0x8b,0x5f,0x87,0x92,0x94,0xd6,0xaa,0xaf,0x48,0x5f,0x18,0x21,0x4f,0x1d,0x28,0x4e,0x10,0x1f,0x15,0xc4,0x18,0x19,0xaa,0x0e,0x24,0x8d,0x0c -,0x3b,0x90,0x1f,0x96,0x9e,0x99,0x3d,0x9f,0xa9,0x2f,0xa4,0x2f,0x15,0x2f,0x11,0x0d,0x1c,0x0c,0x10,0x0c,0x3f,0x10,0x11,0x9d,0x0a,0x1e,0x9b,0x0a,0x29,0x29,0x04,0x1b -,0x1a,0x15,0x14,0x2e,0x2f,0x29,0xaa,0x93,0x96,0x8c,0x87,0x8c,0x83,0x88,0x89,0x8a,0x81,0x8c,0x87,0x80,0x8f,0x86,0x82,0x94,0x86,0x85,0x4e,0x9b,0x99,0x1a,0x27,0x26 -,0x08,0x0a,0x0a,0x05,0x05,0x0a,0x02,0x05,0x08,0x07,0x00,0x0b,0x13,0x02,0xbf,0x13,0x06,0xa9,0x11,0x0b,0xa1,0x1e,0x1b,0xd9,0xce,0xb3,0xb3,0x98,0xa1,0x9d,0x9a,0xbd -,0x9a,0x8f,0x3a,0x2d,0xa2,0xca,0x21,0x8c,0x31,0xd2,0x80,0xbd,0x92,0x81,0xca,0x8b,0x82,0xa2,0x93,0x8f,0x49,0xae,0x8d,0xbf,0x3c,0xa9,0xb9,0x1f,0x9e,0x67,0x1e,0x1a -,0x16,0x0b,0x48,0x3d,0x0a,0x96,0x11,0x0c,0x95,0x21,0x2b,0x90,0xc5,0xab,0x9c,0xb0,0x38,0xad,0xaf,0x2d,0x51,0x33,0x0e,0x17,0x24,0x0c,0x0d,0x11,0x01,0x19,0x1f,0x07 -,0x9a,0x22,0x0b,0x9a,0x1b,0x0d,0x56,0x0d,0x0d,0x24,0x14,0x11,0x1f,0x1e,0x15,0x4a,0x98,0x9c,0x8b,0x89,0x8c,0x84,0x86,0x8d,0x81,0x89,0x8f,0x80,0x87,0x85,0x80,0x8e -,0x88,0x80,0x98,0x95,0x8c,0x3f,0x58,0x3c,0x11,0x09,0x06,0x01,0x04,0x05,0x04,0x00,0x06,0x01,0x06,0x1a,0x00,0x1e,0x32,0x00,0xa8,0x53,0x0a,0xab,0x3e,0x2b,0x9c,0x47 -,0x35,0xaf,0xcd,0x2b,0xb4,0xab,0x2c,0x5c,0xaf,0x33,0xd4,0x3d,0x0e,0x90,0x54,0xef,0x81,0xd1,0x8e,0x83,0x97,0x84,0x83,0x96,0x85,0x8f,0x98,0x8e,0xaf,0xb3,0xc5,0x1e -,0x23,0x2b,0x1f,0x1d,0x19,0x15,0x08,0xd3,0x19,0x21,0x82,0x40,0x96,0x88,0x1e,0x9e,0x96,0x2a,0x93,0x99,0xb6,0x9d,0x2e,0x1d,0x19,0x16,0x17,0x22,0x40,0x1f,0x16,0x17 -,0x02,0x25,0x14,0x0b,0x87,0x24,0x46,0x8b,0x0f,0x2a,0x9c,0x1c,0x9b,0x95,0xb3,0x9b,0x50,0x2f,0xc7,0x38,0xd2,0xa2,0xa6,0x2b,0x1f,0x1e,0x08,0xb7,0x0f,0x26,0x88,0x10 -,0xa5,0x95,0x0a,0x9e,0x97,0x6b,0x89,0x94,0x9b,0xa7,0xa4,0xb2,0xa1,0x9c,0x9a,0x90,0xa3,0x1d,0x18,0x09,0x0c,0xad,0x08,0x9d,0xa2,0x06,0xaf,0x29,0x0d,0x8f,0x9f,0xa4 -,0x88,0x9e,0x98,0xa0,0xa4,0xa8,0x94,0x8e,0xa4,0xb1,0x3c,0x0a,0x1e,0x07,0x2a,0xbd,0x09,0x90,0x1b,0x11,0x97,0x19,0x5b,0x86,0x9f,0x8d,0x8f,0xae,0xbf,0x38,0xb2,0x49 -,0xa8,0xa7,0x1e,0x1e,0x0d,0x00,0x09,0x00,0x38,0x17,0x0e,0x95,0x09,0x1c,0xa5,0x0e,0x99,0x88,0xb0,0x8a,0x95,0xac,0x98,0xdd,0xaa,0x9d,0x9e,0x9b,0xbd,0x3e,0x11,0x17 -,0x11,0x2f,0x96,0x1d,0x8d,0x9e,0x2e,0x8a,0x66,0xb7,0x85,0x93,0x8c,0x8e,0xbf,0xc1,0x36,0x47,0x4a,0xaf,0x9c,0x3d,0x5d,0x33,0x08,0x10,0x09,0xb0,0xb2,0x2a,0x80,0x53 -,0xc5,0x8a,0x1c,0x9c,0x87,0xcf,0x8d,0x9c,0x1b,0x35,0x0f,0x0c,0x21,0x14,0x2e,0x26,0x1d,0x0b,0x06,0x09,0x09,0xa9,0x12,0xb5,0x96,0x0d,0x9f,0x5c,0x0c,0x9e,0xbc,0xae -,0x97,0x3b,0x3e,0x28,0x26,0x22,0xab,0x94,0xa6,0x9e,0x8f,0xb1,0x93,0xac,0x99,0x82,0xa5,0x80,0x8a,0x22,0x8d,0x2d,0x0e,0xa5,0x08,0x1a,0x41,0x02,0x02,0x07,0x04,0x06 -,0x08,0x0f,0x1e,0x1a,0x0d,0x04,0x0e,0x06,0x5b,0x29,0x21,0x84,0x17,0x36,0x8f,0x10,0x9c,0x87,0x9b,0x84,0x8b,0x96,0x8b,0x93,0x98,0x89,0x87,0x87,0x8a,0x8b,0x9b,0xcb -,0xb4,0x1d,0x8d,0x36,0xb9,0x84,0x0c,0xb6,0x9d,0x0b,0x99,0x94,0xa0,0x85,0x93,0x8f,0x8a,0x85,0x88,0x8e,0x83,0x87,0x8f,0xa2,0x0d,0x13,0x0a,0x03,0x11,0x00,0x1e,0x0e -,0x00,0x16,0x0b,0x00,0x2b,0x0c,0x17,0x9c,0x0c,0x24,0x27,0x0f,0x22,0x27,0xbf,0x47,0x25,0x1c,0x03,0x0b,0x00,0x0f,0xd1,0x07,0x93,0xac,0x0b,0x8b,0x50,0x44,0x80,0x8e -,0x8a,0x83,0x8f,0x91,0x92,0x9f,0x9b,0x96,0x98,0xb3,0xbc,0x1e,0x08,0x14,0x02,0x28,0xae,0x21,0x81,0xa6,0x9f,0x80,0x8e,0x87,0x80,0x81,0x80,0x83,0x89,0x86,0x8a,0xa0 -,0x1f,0xa5,0x9e,0x11,0x0c,0x06,0x00,0x04,0x00,0x0d,0x0f,0x04,0xb9,0x0a,0x06,0xcd,0x07,0x16,0x9e,0x17,0x45,0xf6,0x10,0x15,0x0a,0x12,0x17,0x1e,0x40,0x14,0x1f,0x19 -,0x03,0x12,0x07,0x2f,0x5e,0x0f,0x86,0x27,0x18,0x8d,0x1d,0xc5,0x8e,0xb9,0x95,0x98,0xe9,0x4f,0x33,0x5e,0xa5,0x8b,0x87,0x8e,0x88,0x83,0x88,0x8b,0x8d,0x84,0x81,0x8c -,0x80,0x89,0x93,0x85,0x24,0x7b,0x87,0x40,0x1c,0x24,0x12,0x09,0x08,0x0e,0x0c,0x21,0x2a,0x0c,0x17,0x12,0x01,0x0e,0x06,0x21,0x5f,0x09,0x9c,0x10,0x05,0xae,0x0b,0x13 -,0x98,0x21,0xdb,0xaf,0x18,0x28,0x3d,0x30,0xbb,0x98,0x98,0xc1,0x3f,0xcc,0x0f,0x24,0x0f,0x1e,0x91,0x08,0x9f,0xaa,0x01,0x99,0x4d,0x5f,0x80,0x8e,0x8d,0x82,0x83,0x85 -,0x86,0x80,0x81,0x81,0x82,0x85,0x88,0x8f,0x12,0x29,0x1c,0x17,0x36,0x00,0x33,0x14,0x00,0x39,0x0f,0x0a,0x9b,0x1a,0x1e,0xaf,0x0e,0x18,0x1c,0x21,0x36,0x3a,0x41,0x18 -,0x0d,0x0c,0x01,0x0a,0x04,0x0f,0xa6,0x04,0x5f,0xc1,0x02,0x9d,0xca,0x2a,0x84,0x9a,0xcf,0x97,0xc7,0x65,0x40,0xaf,0xb7,0x37,0x60,0x24,0x11,0x10,0x0a,0x1d,0x3a,0xcc -,0x88,0xb5,0x84,0x84,0x9f,0x82,0x82,0x85,0x80,0x81,0x84,0x82,0x9d,0xae,0x9b,0x9a,0x5e,0x1d,0x1b,0x0c,0x04,0x05,0x02,0x06,0x08,0x07,0x3b,0x06,0x18,0xb1,0x00,0xaa -,0xa0,0x1a,0x8b,0x9b,0x29,0xbc,0x3e,0x29,0x3f,0x9e,0xad,0xab,0xbe,0x2c,0x27,0x18,0x0f,0x1a,0x2c,0x18,0x95,0x0f,0x1d,0x92,0x03,0xb8,0x97,0x16,0x9a,0xb0,0x17,0x24 -,0x20,0x4d,0xa4,0x8a,0x92,0x8c,0x82,0x8a,0x8d,0x86,0x85,0x86,0x88,0x9e,0x80,0xa1,0x2f,0x8c,0x0d,0xd1,0x97,0x08,0xdb,0x25,0x03,0x0e,0x06,0x0d,0x13,0x1a,0xce,0x1d -,0x1c,0x29,0x09,0x19,0x19,0x0c,0x31,0x0e,0xce,0x10,0x07,0x9e,0x03,0x1c,0x8a,0x0e,0x9f,0x95,0x0e,0xa9,0x41,0x3a,0x9a,0x94,0x92,0x9c,0x9c,0xa3,0x2a,0xc8,0x46,0x1b -,0xde,0x0f,0xc8,0x19,0x05,0x99,0x19,0xbc,0x84,0xb2,0x86,0x80,0x8e,0x85,0x81,0x80,0x82,0x82,0x80,0x84,0x8a,0xa0,0x24,0xad,0x1a,0x0b,0x0e,0x03,0x13,0x05,0x03,0x22 -,0x00,0x10,0x9f,0x05,0xda,0x5d,0x07,0x3d,0x22,0x1d,0xd7,0xa4,0xc8,0x29,0x28,0x12,0x0e,0x1d,0x0e,0x16,0x20,0x09,0x9b,0x0b,0x10,0x8e,0x08,0x9b,0x88,0x20,0x8c,0x8e -,0x26,0xa6,0xa3,0xa3,0xb9,0x98,0xaf,0x1b,0x34,0x13,0x15,0x9f,0x23,0xbf,0x98,0x99,0x80,0x25,0x88,0x80,0x97,0x83,0x83,0x8a,0x80,0x8d,0x6f,0x8d,0xaf,0x2c,0x1e,0xc0 -,0x18,0x06,0x0c,0x05,0x01,0x0d,0x01,0x0c,0x09,0x0d,0x31,0x00,0xb4,0x1c,0x05,0x87,0x42,0x1c,0x8c,0x22,0x1b,0xf6,0xc7,0x39,0xb4,0x9d,0x22,0x3e,0xc9,0x0b,0x1f,0x3d -,0x11,0x4d,0x18,0x93,0x1b,0x0f,0x87,0x0e,0xed,0x87,0x23,0x9a,0x97,0x1d,0xd5,0x96,0x91,0xa9,0x87,0x81,0x8e,0x88,0x86,0x8e,0x80,0x8c,0x90,0x87,0x88,0x89,0x0f,0x91 -,0x97,0x05,0x98,0x5b,0x0c,0xda,0x0c,0x09,0x0b,0x0e,0x19,0x0d,0xeb,0x2c,0x07,0x4b,0x10,0x01,0x23,0x0b,0x0c,0x0f,0x3e,0x0f,0x05,0xa8,0x07,0x17,0x8b,0x19,0xb8,0x93 -,0x2a,0xef,0xd9,0xa4,0x9e,0x9b,0x8c,0x99,0xbd,0x9c,0x26,0x18,0x21,0x1d,0x0e,0x2c,0xab,0x00,0xb5,0xad,0x0a,0x8b,0x90,0x97,0x80,0x86,0x8b,0x83,0x80,0x85,0x85,0x80 -,0x81,0x86,0x8c,0x9c,0xaa,0x27,0x0d,0x0b,0x05,0x2d,0x0a,0x01,0x29,0x00,0x06,0x6a,0x0a,0x15,0xb0,0x14,0x13,0x1e,0x3e,0x1a,0xdf,0x9e,0x29,0x53,0x31,0x0f,0x12,0x0d -,0x0f,0x0e,0x15,0x98,0x03,0x47,0xa6,0x00,0x99,0x9b,0x2d,0x98,0x9a,0xa7,0x29,0xad,0xa0,0x15,0x90,0x8f,0x1b,0xb7,0x26,0x0f,0x40,0x14,0x25,0x32,0x87,0x93,0x24,0x80 -,0x88,0x8c,0x81,0x82,0x82,0x80,0x85,0x95,0x9d,0x8a,0x2e,0x1a,0x8e,0x1a,0x0c,0x26,0x03,0x05,0x08,0x05,0x05,0x0a,0xbc,0x04,0x1e,0xab,0x00,0x4c,0x9f,0x18,0xb3,0xc0 -,0x36,0x0e,0x19,0x36,0x0b,0x51,0xba,0x1b,0xd4,0xad,0x0e,0x17,0x24,0x28,0x0f,0x9a,0x92,0x06,0x87,0xad,0x0c,0x8a,0xa4,0xcc,0x91,0xa3,0x1a,0x16,0xaa,0x3f,0x20,0x8e -,0x87,0x8e,0x8d,0x8a,0x8a,0x86,0x87,0x8a,0x8b,0x80,0x9d,0xbc,0x80,0x3e,0xc7,0x8a,0x30,0x34,0x7a,0x1b,0x04,0x09,0x13,0x04,0x12,0x22,0x0b,0x0e,0x14,0x0d,0x05,0x0b -,0x14,0x06,0x0d,0xa7,0x06,0x15,0x98,0x0a,0x6f,0x95,0x34,0x31,0xae,0xdf,0x0f,0xaa,0x9b,0x38,0x9b,0xa4,0x37,0x30,0x31,0x2d,0x38,0x52,0x5d,0x0a,0x42,0x9f,0x00,0xaf -,0x92,0x2c,0x91,0x94,0x93,0x92,0x88,0x8b,0x8d,0x80,0x82,0x85,0x81,0x81,0x86,0x8e,0x8b,0x93,0xc3,0xa8,0x1f,0x03,0x16,0x17,0x00,0x18,0x14,0x07,0x21,0x18,0x0d,0x0a -,0x2d,0x1f,0x08,0xa2,0x51,0x12,0xc3,0x22,0x10,0x13,0x2e,0x19,0x0c,0x31,0x22,0x00,0x4a,0x24,0x07,0x94,0xbb,0x63,0x93,0x9b,0xaa,0x2a,0x9a,0x9d,0x2d,0x89,0x9e,0x2d -,0x9b,0x4c,0x0f,0x0f,0x4f,0x3a,0x27,0xcf,0xaa,0x1e,0x8e,0x8f,0x23,0x80,0x80,0x84,0x83,0x81,0x80,0x8c,0x84,0x89,0x9b,0x81,0x9a,0x20,0xaa,0x14,0x0b,0x02,0x0c,0x0c -,0x07,0x0d,0x07,0x00,0x08,0x19,0x02,0x2f,0xbb,0x1f,0xbc,0x19,0x2e,0x15,0x2c,0xba,0x18,0xa8,0xac,0x1c,0x26,0x2d,0x39,0x13,0x1f,0xa3,0x23,0x29,0x19,0x1c,0x10,0xae -,0x4e,0xb7,0x95,0x53,0x9c,0xb7,0x97,0xab,0x94,0x1a,0x00,0x45,0x8f,0x85,0x80,0x28,0x0f,0x8b,0x84,0x91,0x90,0x0c,0x01,0x1a,0x03,0x04,0x06,0x05,0x24,0x0b,0x02,0x07 -,0x00,0x08,0x0a,0x2c,0xa3,0x19,0x05,0x1a,0xc1,0x9c,0x8f,0x84,0x9e,0x30,0x83,0x80,0x89,0x8a,0x80,0x81,0x80,0x82,0x8b,0xa8,0x93,0x81,0x80,0x89,0x8b,0x80,0x82,0x82 -,0x84,0x81,0x8c,0x97,0x88,0x8b,0x89,0x87,0xba,0x17,0x26,0x29,0x19,0x0e,0x06,0x02,0x00,0x04,0x09,0x01,0x00,0x04,0x08,0x05,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01 -,0x00,0x02,0x03,0x07,0x0e,0x05,0x00,0x04,0x3c,0x99,0x1f,0x0b,0x1d,0xa6,0x21,0x21,0x2b,0x21,0x2c,0x93,0x83,0x3f,0xaf,0x84,0x81,0x80,0x82,0x82,0x88,0x8b,0x81,0x80 -,0x80,0x80,0x80,0x81,0x85,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x82,0x8a,0x85,0x80,0x80,0x89,0x3c,0x9d,0x8b,0xba,0x86,0x80,0x92,0x97,0x95,0x83,0x8a,0xae,0x8a,0x9f -,0x14,0x24,0x3e,0xfa,0x1b,0x0c,0x13,0x13,0x07,0x04,0x00,0x04,0x12,0x1b,0x09,0x00,0x00,0x05,0x0b,0x05,0x00,0x04,0x02,0x00,0x02,0x03,0x08,0x07,0x06,0x0f,0x04,0x03 -,0x09,0x00,0x01,0x01,0x02,0x02,0x03,0x01,0x08,0x04,0x13,0x11,0x02,0x01,0x0a,0x16,0x11,0x1f,0x00,0x0f,0x2b,0x10,0x1d,0x1a,0x9e,0x98,0x0a,0xb3,0x86,0x92,0x8b,0x9c -,0x9a,0xa8,0x37,0x1e,0x13,0x22,0x97,0x97,0xac,0xbc,0x95,0x8a,0x80,0x85,0x80,0x89,0x97,0x80,0x81,0x80,0x80,0x80,0x80,0x81,0x83,0x80,0x80,0x81,0x80,0x83,0x85,0x83 -,0x88,0x89,0x86,0x81,0x80,0x9d,0x17,0xb9,0x92,0x87,0x9b,0xa3,0x82,0x2f,0x8f,0x80,0x97,0x8b,0x80,0x85,0x86,0x8d,0x85,0x85,0xa6,0x87,0x84,0x27,0x1d,0x2b,0x0e,0x1e -,0xb9,0x92,0x38,0x02,0x10,0x1f,0x08,0x05,0x00,0x04,0x02,0x01,0x0c,0x04,0x00,0x29,0x1f,0x04,0x05,0x03,0x13,0x06,0x01,0x1a,0x09,0x00,0x03,0x00,0x03,0x02,0x09,0x06 -,0x01,0x00,0x0c,0x0a,0x05,0x00,0x0b,0x28,0x00,0x0d,0x0b,0x00,0x09,0x1f,0x07,0x03,0x06,0x1f,0x1e,0x02,0x0c,0x0d,0x00,0x01,0x05,0x02,0x0a,0x08,0x01,0x02,0x01,0x0b -,0x0f,0x01,0x03,0x00,0x29,0x14,0x0a,0x96,0xb4,0x4f,0x8d,0x9c,0x1f,0x19,0x2e,0x8f,0xbb,0x17,0x99,0x9f,0x47,0x8a,0x81,0x81,0x81,0x83,0x83,0x80,0x80,0x80,0x81,0x83 -,0x83,0x80,0x81,0x87,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x84,0x85,0x8b,0xa7,0x8a,0x82,0x81,0x81,0x82,0x82,0x81,0x81,0x80,0x81,0x84,0x85,0x84,0x80 -,0x8e,0x8d,0x80,0x82,0x81,0x8a,0x97,0x99,0x41,0xa8,0x8d,0x18,0x03,0x0a,0x01,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x02 -,0x07,0x02,0x02,0x01,0x02,0x03,0x03,0x0a,0x04,0x00,0x03,0x03,0x02,0x07,0x0c,0x0f,0x10,0x0b,0x35,0x25,0x0b,0x05,0x0b,0x0c,0x06,0x98,0xab,0x4f,0x82,0x82,0x86,0x89 -,0x8e,0x86,0x84,0x89,0x81,0x8b,0x28,0x9e,0x92,0x9c,0x93,0x91,0x8e,0x8f,0x96,0x88,0x87,0x8e,0x93,0x8e,0x9b,0x1f,0x90,0x2e,0x0f,0x92,0x91,0xb4,0xad,0xc5,0x9e,0x8a -,0x8f,0x8b,0x95,0x18,0x53,0xa8,0x3e,0xaf,0x35,0x47,0xac,0x13,0x17,0x41,0x19,0x13,0x14,0x0f,0x06,0x2b,0x1d,0x0b,0x97,0x8d,0x1b,0x0d,0x0d,0x14,0x25,0x1b,0xa9,0x9b -,0x1b,0x9d,0x8c,0x96,0x88,0x8a,0x88,0x80,0x87,0x85,0x82,0x88,0x87,0x86,0x8e,0xb8,0x89,0xa6,0xe4,0x83,0x87,0x9c,0x9e,0xa6,0x9e,0xa6,0x1d,0x42,0x0e,0x01,0x0a,0x05 -,0x03,0x0d,0x09,0x18,0xe6,0x14,0x18,0x1b,0x11,0x10,0x24,0x0e,0x13,0xa9,0x10,0x36,0x87,0x9c,0xa2,0x9e,0xaf,0x8e,0x9d,0xae,0x8b,0xae,0x4a,0x8f,0xb5,0x2c,0xbf,0x21 -,0xc5,0xa5,0x29,0xae,0x9b,0xa9,0x8f,0x8d,0x2c,0x95,0x8e,0x2c,0x8d,0x85,0x92,0x9a,0xce,0xc7,0x8e,0x38,0xb8,0x8b,0x20,0x3a,0x97,0x3a,0x3d,0xa6,0xb4,0x8f,0xa8,0x16 -,0x14,0x0c,0x03,0x08,0x03,0x04,0x2d,0x07,0x0c,0x94,0xa5,0x34,0xde,0x1f,0xab,0xa9,0x0e,0xbf,0xb0,0x10,0x2e,0x31,0x0f,0x1d,0x0d,0x13,0xc9,0x14,0x0b,0x17,0x09,0x0b -,0x15,0x02,0x15,0x19,0x00,0x0f,0x40,0x0f,0x71,0xa8,0x9f,0x80,0x8a,0x88,0x81,0x86,0x86,0x80,0x84,0x83,0x85,0x8c,0x82,0x83,0x8d,0x8f,0x93,0xba,0x9f,0x23,0x20,0x90 -,0x12,0x0b,0x98,0x3d,0x0b,0x16,0x06,0x09,0x0a,0x00,0x0c,0x0e,0x04,0x13,0x18,0x08,0x15,0x0b,0x0a,0x27,0x12,0x0d,0x10,0x05,0x0e,0x19,0x07,0xa7,0xb1,0x09,0x9a,0x8a -,0xbf,0x9b,0x95,0x93,0x89,0xab,0x94,0x89,0xda,0x3e,0x9d,0xae,0x6b,0xab,0xa3,0x8b,0x8a,0x92,0x93,0x9d,0xf8,0x98,0x5e,0xa5,0x89,0x1a,0x2e,0x8e,0xa4,0xab,0x95,0xbf -,0x8e,0x96,0xd0,0x92,0x99,0xa6,0x97,0xa0,0xbd,0x34,0x0a,0x17,0x15,0x07,0x07,0x0b,0x01,0x07,0x0e,0x0f,0x9b,0x2c,0x12,0x99,0xba,0x1f,0xb1,0x25,0xd1,0xaa,0x1f,0xc4 -,0xc1,0x1e,0x4f,0xac,0x3d,0x30,0x10,0x0c,0x23,0x1c,0x0e,0x14,0x0e,0x04,0x08,0x01,0x3f,0x9a,0x15,0x91,0x80,0x87,0x85,0x81,0x82,0x80,0x82,0x81,0x80,0x84,0x86,0x81 -,0x83,0x85,0x88,0x99,0x97,0x99,0xb8,0x1e,0x1a,0x0d,0x0d,0x05,0x0a,0xab,0x0d,0x00,0x1d,0x13,0x03,0x09,0x05,0x0e,0x11,0x04,0x1b,0x2c,0x0e,0x18,0x1f,0x21,0x23,0x0e -,0x0c,0x14,0x13,0x0b,0x0f,0x0f,0x0d,0x1a,0x0d,0xa3,0x8c,0x27,0x9c,0x84,0x95,0x8d,0x93,0xb0,0x8b,0xad,0x31,0x8f,0x95,0x9f,0x92,0x8b,0x86,0x89,0x9c,0x8f,0x8a,0xa9 -,0xb4,0xa4,0x1d,0x24,0x0f,0x17,0x89,0xad,0x33,0x8b,0x8d,0x9c,0x97,0xac,0x99,0x8e,0x7c,0xa4,0x94,0x78,0x27,0x25,0x1d,0x27,0x0e,0x04,0x16,0x17,0x0b,0x0f,0x13,0x0e -,0x0f,0x03,0x3c,0x90,0x0f,0x1e,0x9d,0x3f,0x2b,0x31,0x1f,0xb5,0x3c,0x17,0x54,0x62,0x1c,0x21,0x27,0x2f,0xb9,0x10,0x0a,0x18,0x0d,0x0c,0x11,0x11,0x21,0x2a,0x3b,0x85 -,0x82,0x88,0x80,0x80,0x80,0x80,0x81,0x85,0x80,0x88,0x8c,0x81,0x8b,0x8f,0x90,0xa2,0x94,0xad,0x14,0x21,0x17,0x0f,0x0d,0x08,0x02,0x03,0x01,0x00,0x14,0x0b,0x00,0x15 -,0x14,0x0f,0x29,0x09,0x16,0x4b,0x0b,0x1b,0x37,0x12,0x19,0x18,0x1b,0xaf,0x2a,0x1c,0xdf,0xde,0xc8,0xb7,0x31,0x26,0xb8,0x1d,0xe0,0x86,0xa1,0xb6,0x8b,0x92,0x93,0x93 -,0xcd,0x8f,0x89,0x9b,0x8c,0x85,0x8b,0x89,0x8c,0x8e,0x87,0xa9,0x2d,0xa8,0x4c,0x50,0x3e,0x16,0x1d,0x3b,0x0e,0x2f,0x8f,0x49,0xc7,0x92,0x9b,0x95,0xac,0x1a,0x53,0x32 -,0x0c,0x1a,0x25,0x14,0x1d,0x1b,0x24,0x48,0x0e,0x12,0x31,0x21,0x22,0x14,0x08,0x0a,0x0f,0x02,0x1a,0x9e,0x1b,0x29,0xa6,0xbc,0xa5,0x40,0x14,0xbf,0x4b,0x12,0x26,0x1e -,0x16,0x1c,0x14,0x22,0x49,0x23,0x2f,0x96,0x8d,0x8a,0x87,0x8e,0x86,0x82,0x8b,0x83,0x80,0x84,0x82,0x80,0x83,0x81,0x8f,0xa6,0x8c,0x9e,0x27,0x39,0x29,0x1e,0x1b,0x0e -,0x0e,0x14,0x06,0x03,0x09,0x05,0x06,0x03,0x01,0x03,0x07,0x00,0x0f,0x35,0x0f,0x27,0xb6,0x3f,0xbf,0x1b,0x13,0xb6,0x4b,0x22,0xbe,0xc3,0xb8,0x99,0xb8,0xa9,0x95,0xbe -,0xaf,0x9a,0xa6,0xa5,0xe0,0x23,0x55,0xf5,0x1a,0x9c,0x8c,0x9e,0x8a,0x86,0x8a,0x86,0x8d,0x95,0x87,0x8d,0x9c,0x99,0xaf,0xa1,0x98,0x45,0xce,0xa4,0x32,0xba,0xad,0x35 -,0xd5,0x24,0x18,0x2b,0x25,0x13,0x68,0xca,0x28,0xba,0xbb,0x56,0xbf,0x1d,0x13,0x3b,0x1f,0x17,0x20,0x1c,0x4e,0x52,0x10,0x1e,0x1f,0x12,0x25,0x1a,0x17,0x24,0x0f,0x0a -,0x11,0x12,0x0a,0x22,0x37,0x1c,0x3d,0x32,0x22,0x2a,0x13,0x10,0x29,0x1e,0x2a,0x42,0xbf,0x8a,0x86,0x8a,0x83,0x81,0x81,0x80,0x81,0x82,0x82,0x84,0x88,0x8b,0x8d,0xa3 -,0x90,0x8b,0x9c,0x96,0xa1,0x50,0x76,0x19,0x0f,0x16,0x0d,0x0b,0x0a,0x0a,0x14,0x13,0x08,0x0b,0x0b,0x06,0x08,0x09,0x08,0x0f,0x0e,0x0a,0x0e,0x0f,0x08,0x40,0xaa,0x57 -,0x9b,0x9a,0x97,0xa4,0x48,0xeb,0xa1,0xb0,0x98,0x9f,0xa2,0x8f,0x99,0xab,0x98,0x91,0x9d,0xa3,0x35,0xb1,0x9e,0xbd,0x3e,0x63,0x3c,0x48,0xae,0xa4,0x9e,0xa3,0x99,0xa5 -,0xab,0xeb,0x65,0x31,0x27,0xaf,0xa5,0xa7,0xb3,0xa9,0xba,0xaa,0xbe,0x4a,0xce,0x36,0x39,0x2e,0x16,0x12,0x15,0x1c,0x12,0x1a,0xc4,0xd0,0xbb,0xb7,0xa6,0x98,0xaa,0x38 -,0xca,0x49,0x4d,0xb4,0x44,0x3d,0x44,0x27,0x1e,0x14,0x14,0x1f,0x1c,0x1a,0x25,0x1c,0x13,0x1a,0x26,0x2f,0x4b,0xb5,0xad,0xac,0xbb,0xa6,0xa9,0xa6,0xa9,0xb4,0xad,0xb0 -,0xa0,0x96,0x99,0x98,0x95,0x9b,0xa2,0xb0,0xa7,0x9f,0x9f,0xa8,0xc3,0x27,0x29,0x23,0x21,0x1f,0x17,0xcb,0xac,0x47,0xd4,0xb7,0x9d,0x9a,0xae,0xab,0x9b,0x92,0x94,0x9a -,0x99,0x9d,0xa9,0x2b,0x19,0x1b,0x17,0x0f,0x0c,0x0c,0x07,0x05,0x07,0x0b,0x0e,0x0d,0x0b,0x18,0xcc,0x49,0xc5,0x9c,0x94,0x92,0x98,0x9a,0x96,0x8e,0x8f,0x91,0x98,0x98 -,0x9b,0xaa,0x9d,0x99,0x9e,0x96,0x96,0xa1,0x9c,0xb9,0xb5,0x95,0xa5,0x48,0xd0,0x2c,0x72,0xaa,0x45,0xb9,0xc6,0xde,0xf0,0x36,0x3e,0xa8,0xa5,0xab,0xab,0xef,0x35,0x36 -,0x51,0x2e,0x2c,0x1c,0x1a,0x1c,0x13,0x0f,0x0d,0x0e,0x12,0x10,0x0d,0x0f,0x16,0x14,0x15,0x19,0x1c,0x2b,0x29,0x1d,0x5f,0xec,0x24,0x32,0x23,0x28,0x39,0x29,0x20,0x43 -,0x44,0x3d,0x59,0x2e,0xb2,0x9f,0x9e,0x9b,0x95,0x93,0x90,0x90,0x8c,0x87,0x86,0x8b,0x8e,0x8a,0x88,0x86,0x8b,0x8d,0x8c,0x93,0x9e,0x9d,0xa7,0x98,0x92,0xa4,0x9f,0xa4 -,0x3c,0x26,0x1c,0x1a,0x23,0x10,0x07,0x04,0x04,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x03,0x04,0x07,0x08,0x0e,0x18,0x0f,0x16,0x42,0xbb,0x99,0x93,0xa5,0x9e,0x8f -,0x93,0x98,0x8e,0x93,0x91,0x95,0xbf,0xbd,0xaa,0xa0,0x92,0x92,0x8b,0x85,0x8b,0x8c,0x85,0x83,0x82,0x83,0x88,0x86,0x84,0x89,0x8d,0x8f,0x8f,0x93,0x9f,0x37,0x35,0xe3 -,0x2b,0x2b,0x36,0x2e,0x2f,0x21,0x19,0x21,0x32,0x37,0x1f,0x17,0x22,0x1e,0x0f,0x0f,0x17,0x12,0x14,0x10,0x0a,0x0e,0x10,0x0f,0x12,0x1b,0x19,0x1d,0x1e,0x1b,0x21,0x3f -,0xc3,0xcb,0x3c,0x2b,0x3b,0x37,0x6a,0x2e,0x24,0x26,0x25,0x18,0x12,0x1d,0x2e,0xdd,0xbb,0xbd,0xad,0xa7,0xa1,0x93,0x8c,0x8f,0x93,0x97,0x9c,0x97,0x9c,0x98,0x95,0x9b -,0xa2,0xad,0xa5,0x9c,0x99,0x96,0x93,0x8f,0x98,0xc4,0xe8,0xab,0xa4,0xac,0x2a,0x1a,0x1b,0x15,0x10,0x0b,0x0a,0x0b,0x09,0x08,0x0c,0x0c,0x0e,0x1b,0x20,0x2e,0xdd,0xc0 -,0xc8,0xa6,0x90,0x89,0x87,0x85,0x87,0x88,0x87,0x87,0x87,0x8a,0x88,0x89,0x8c,0x92,0x9d,0xaa,0xa2,0xa1,0xaf,0xb5,0x37,0x41,0x2f,0x1a,0x1a,0x1e,0x1b,0x0f,0x0b,0x09 -,0x06,0x05,0x07,0x04,0x04,0x02,0x04,0x03,0x02,0x04,0x06,0x0a,0x0c,0x0c,0x0c,0x15,0x17,0x23,0x5f,0x58,0x51,0xdb,0xbb,0xb5,0xa4,0x9d,0x9b,0x97,0x96,0xa3,0x57,0xc7 -,0xa1,0x97,0x99,0x99,0x8f,0x8d,0x8d,0x8d,0x88,0x86,0x87,0x8a,0x8d,0x8b,0x8a,0x8d,0x8b,0x8c,0x91,0x95,0xa8,0xbe,0xba,0xc5,0xbe,0xb1,0xad,0xad,0xd3,0x4d,0x76,0xc7 -,0xb5,0xb9,0x5f,0x26,0x28,0x2a,0x1c,0x1a,0x18,0x13,0x17,0x0f,0x0c,0x12,0x15,0x25,0x27,0x1c,0x26,0x22,0x2d,0x2d,0x27,0x3e,0x4c,0x29,0x24,0x26,0x1a,0x1c,0x20,0x1c -,0x18,0x1a,0x16,0x0d,0x10,0x19,0x20,0x1d,0x15,0x29,0x3f,0x4f,0xbf,0xa8,0x99,0x9f,0xaf,0xb9,0xa7,0xc3,0xad,0xa6,0xa8,0xa3,0xac,0xe6,0x52,0xa1,0x98,0x96,0x9c,0x9c -,0x9c,0x9f,0xac,0xa8,0x98,0x97,0xaf,0x2c,0x1d,0x1b,0x1e,0x20,0x1f,0x1c,0x1e,0x1e,0x0d,0x0d,0x22,0x2e,0xcf,0xab,0x97,0x8f,0x8f,0x8e,0x8b,0x85,0x83,0x85,0x87,0x86 -,0x86,0x87,0x87,0x89,0x89,0x87,0x8d,0x9a,0xa5,0xa3,0xad,0xc1,0xe8,0x2b,0x1e,0x1c,0x1a,0x0d,0x0f,0x13,0x0c,0x0a,0x07,0x04,0x06,0x06,0x04,0x04,0x03,0x03,0x02,0x02 -,0x05,0x07,0x0b,0x0b,0x0d,0x16,0x19,0x1d,0x22,0xbb,0xa4,0xd9,0xd8,0xcf,0xb0,0x9b,0x9d,0xa3,0x9b,0xa2,0xab,0xa4,0xaa,0xa3,0x95,0x93,0x99,0x95,0x8d,0x8e,0x8f,0x89 -,0x84,0x87,0x88,0x8b,0x8b,0x8b,0x8b,0x8d,0x8e,0x8d,0x93,0xa2,0xc9,0xcb,0xac,0xa1,0xb7,0x78,0xba,0xe5,0x34,0x35,0x4a,0x56,0x35,0x30,0x2a,0x1c,0x1e,0x1d,0x1c,0x18 -,0x18,0x12,0x0d,0x0d,0x0c,0x15,0x1b,0x19,0x14,0x19,0x19,0x1e,0x28,0x2f,0xdf,0x40,0x21,0x1d,0x1d,0x1a,0x1f,0x1e,0x23,0x1d,0x15,0x10,0x1b,0x2a,0x28,0x36,0x39,0xed -,0xce,0xbc,0xaf,0xa0,0x9c,0x99,0x9f,0xad,0xa2,0xae,0xa6,0x9a,0x9e,0xa8,0xb9,0xc2,0xb3,0xc6,0xb8,0x9c,0x93,0x92,0x97,0x97,0x98,0x95,0x96,0xa1,0xac,0xb3,0xcd,0x3f -,0x28,0x18,0x16,0x14,0x0d,0x0d,0x0e,0x12,0x14,0x19,0x1f,0x34,0xde,0xaa,0x9c,0x8f,0x8a,0x8c,0x8a,0x8a,0x89,0x86,0x85,0x87,0x88,0x8a,0x8d,0x8d,0x8a,0x8c,0x91,0x91 -,0x95,0x9d,0xaa,0xaa,0xac,0xaf,0x37,0x19,0x17,0x10,0x0c,0x09,0x06,0x05,0x05,0x03,0x01,0x01,0x03,0x04,0x03,0x03,0x05,0x05,0x09,0x0b,0x0e,0x17,0x1f,0x1d,0x18,0x20 -,0x2d,0x3e,0xdb,0xb8,0x5d,0x5c,0x44,0x4d,0xac,0x9e,0x9c,0x9a,0x96,0x97,0x97,0x97,0x8c,0x89,0x89,0x8b,0x8d,0x8c,0x8b,0x8d,0x8e,0x8b,0x8a,0x8d,0x95,0x9c,0x98,0x8e -,0x8f,0x91,0x92,0x92,0x97,0x9c,0x9d,0x95,0x8c,0x93,0xa4,0xc2,0xca,0xd7,0x40,0x29,0x29,0x1d,0x1c,0x17,0x0b,0x0e,0x18,0x1a,0x12,0x15,0x1a,0x1d,0x1b,0x18,0x24,0x3a -,0x2d,0x1f,0x1a,0x1b,0x1a,0x1b,0x1a,0x17,0x15,0x0f,0x0e,0x0d,0x0e,0x13,0x12,0x17,0x1d,0x1c,0x1f,0x2f,0x78,0xae,0xb1,0xc7,0x7d,0xc2,0xb2,0xbf,0xaf,0xac,0xb4,0xcc -,0xcd,0x46,0x3f,0xd4,0xb9,0xa8,0xa1,0x9b,0x9d,0x99,0x92,0x8d,0x8a,0x8b,0x90,0x90,0x95,0x9c,0xa1,0xa5,0xa0,0xbc,0x35,0x22,0x19,0x16,0x12,0x17,0x18,0x1c,0x21,0x18 -,0x1e,0x5c,0xb1,0xa4,0x9c,0x9b,0x95,0x8f,0x91,0x8f,0x8c,0x89,0x8b,0x8c,0x8a,0x8c,0x8f,0x8e,0x8c,0x8a,0x8c,0x90,0x96,0x92,0x92,0x9e,0xa7,0xac,0xcc,0x2f,0x1f,0x12 -,0x0d,0x0b,0x08,0x05,0x04,0x05,0x02,0x01,0x01,0x02,0x03,0x04,0x03,0x05,0x08,0x08,0x0a,0x10,0x17,0x1e,0x1d,0x1a,0x1b,0x22,0x35,0x2b,0x2b,0xbf,0xcb,0x31,0x30,0x78 -,0xa0,0x9a,0x9c,0x99,0x95,0x92,0x9b,0x95,0x88,0x88,0x8c,0x8f,0x8f,0x8d,0x8f,0x94,0x93,0x8d,0x89,0x90,0x9a,0x9d,0x99,0x90,0x92,0x95,0x90,0x92,0x9b,0x9e,0x9d,0x91 -,0x92,0x9a,0xac,0xc3,0xcb,0x39,0x37,0x33,0x38,0x2c,0x18,0x0f,0x0d,0x11,0x20,0x19,0x14,0x19,0x1b,0x22,0x1c,0x19,0x45,0x47,0x1d,0x1a,0x1c,0x31,0x25,0x18,0x13,0x15 -,0x18,0x14,0x0b,0x0a,0x10,0x18,0x1a,0x18,0x20,0x1e,0x1f,0x1e,0x2c,0xaf,0xb9,0x6e,0xcc,0xeb,0xc5,0xc9,0x7d,0xb9,0xb9,0xb7,0xcc,0x3b,0x45,0xac,0xa9,0xab,0x9e,0x9f -,0x9c,0x95,0x94,0x8f,0x8c,0x91,0x92,0x94,0x9c,0x99,0xa7,0xb6,0xab,0x47,0x27,0x1f,0x1a,0x19,0x1a,0x17,0x17,0x21,0x2c,0x29,0x25,0x33,0xa9,0x99,0x9e,0x9e,0x97,0x8e -,0x8c,0x8e,0x8e,0x8b,0x8a,0x8b,0x8e,0x8f,0x8a,0x8a,0x8f,0x8f,0x8d,0x91,0x93,0x9d,0x9e,0x8e,0x9a,0xad,0xcf,0x19,0x1a,0x1c,0x0d,0x0f,0x0c,0x07,0x06,0x03,0x02,0x02 -,0x02,0x05,0x04,0x03,0x03,0x02,0x06,0x0b,0x0f,0x0e,0x0b,0x0f,0x2c,0x48,0x37,0x22,0x20,0x33,0x3f,0x40,0xc3,0xb5,0xad,0x9d,0xa2,0xac,0xa6,0x98,0x97,0x95,0x97,0x8e -,0x8e,0x99,0x98,0x9b,0x8f,0x8c,0x98,0xa0,0x88,0x86,0x88,0x98,0xda,0x9b,0x8f,0x8c,0x8b,0x8f,0x8b,0x89,0x97,0xa5,0x9e,0x8f,0x93,0x9b,0xcb,0x40,0x6e,0x24,0x16,0x1a -,0x17,0x17,0x17,0x04,0x0d,0x91,0x85,0x24,0x00,0x50,0x97,0x3b,0x9e,0x2f,0x5d,0x16,0x10,0x04,0x0d,0x11,0x00,0x11,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x02,0x04,0x02 -,0x04,0x3d,0xc1,0x1f,0x18,0x11,0xaf,0x8e,0x8a,0x87,0x84,0x87,0x80,0x88,0x9b,0x83,0x80,0x80,0x80,0x86,0x83,0x84,0x85,0x85,0x82,0x83,0x84,0x81,0x89,0x82,0x80,0x83 -,0x8d,0xbf,0x39,0x93,0x9d,0xa9,0x8c,0x9f,0x50,0x0e,0x05,0x08,0x18,0x14,0x05,0x07,0x03,0x04,0x00,0x02,0x01,0x02,0x00,0x00,0x00,0x00,0x18,0x09,0x00,0x02,0x00,0x02 -,0x01,0x02,0x09,0x11,0x13,0x07,0x01,0x00,0x0a,0x22,0x24,0x2a,0x1c,0x30,0x16,0x15,0xc3,0x9d,0xa8,0xab,0xaa,0x9c,0x81,0x80,0x82,0x8a,0x9f,0x93,0x82,0x82,0x81,0x80 -,0x81,0x80,0x87,0x8b,0x82,0x80,0x80,0x80,0x82,0x80,0x82,0x81,0x84,0x83,0x83,0x85,0x84,0x8f,0x83,0x80,0x82,0x88,0xb6,0x34,0x8c,0x89,0x91,0x82,0x86,0x8f,0xfc,0x09 -,0x09,0x2a,0x34,0x1e,0x0e,0x05,0x09,0x00,0x02,0x01,0x04,0x01,0x01,0x00,0x04,0x9d,0x1b,0x00,0x01,0x00,0x03,0x05,0x03,0x0b,0x1c,0x19,0x06,0x00,0x00,0x02,0x0f,0x0d -,0x0a,0x04,0x06,0x06,0x01,0x02,0x05,0x08,0x02,0x04,0x00,0xa3,0x88,0x12,0x06,0x00,0x03,0x2e,0x18,0x1d,0x97,0x8d,0x8f,0x16,0x03,0x10,0x9c,0x90,0x8f,0x9b,0x9b,0x8c -,0x99,0xb0,0x99,0x8c,0x8e,0x93,0xab,0x8a,0x80,0x81,0x85,0xb8,0xc2,0x87,0x80,0x84,0x80,0x80,0x80,0x82,0xa3,0xad,0x84,0x81,0x80,0x83,0x85,0x83,0x86,0x8e,0x98,0x89 -,0x8d,0x90,0xb6,0xa0,0x80,0x80,0x89,0x53,0x10,0xa4,0x82,0x8d,0x87,0x80,0x82,0x80,0xac,0x1b,0x96,0x84,0x85,0x85,0x8e,0x86,0x8a,0x9d,0xcd,0xa1,0x92,0x96,0xc1,0x21 -,0x87,0x80,0x8a,0x22,0x03,0x0e,0x8f,0xab,0xc9,0x96,0x92,0x88,0x0f,0x00,0x02,0x07,0x0e,0x0e,0x04,0x06,0x09,0x00,0x01,0x00,0x02,0x00,0x02,0x00,0x07,0x97,0x0f,0x00 -,0x02,0x00,0x03,0x02,0x01,0x04,0x07,0x16,0x0a,0x00,0x01,0x00,0x03,0x03,0x04,0x00,0x07,0x01,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x94,0x9f,0x04,0x03,0x00,0x06,0x1e -,0x0a,0x20,0xac,0x97,0x87,0x14,0x04,0x1f,0x9f,0x8a,0x87,0x8d,0x83,0x82,0x86,0x8a,0x8e,0x85,0x81,0x84,0x88,0x81,0x80,0x80,0x83,0x9e,0x8b,0x80,0x80,0x80,0x80,0x80 -,0x80,0x80,0x8d,0x89,0x80,0x81,0x80,0x80,0x80,0x80,0x81,0x81,0x89,0x89,0x83,0x84,0x8e,0x88,0x80,0x81,0x86,0x2c,0x1a,0x8e,0x86,0x95,0x87,0x82,0x82,0x82,0x1d,0x0b -,0x20,0x3e,0xa2,0x66,0x1b,0x42,0x20,0x09,0x05,0x00,0x06,0x03,0x04,0x00,0xb4,0x8d,0x05,0x02,0x00,0x00,0x07,0x03,0x02,0x0b,0x13,0x23,0x06,0x00,0x01,0x00,0x05,0x07 -,0x05,0x05,0x0c,0x02,0x02,0x00,0x03,0x02,0x04,0x00,0x0d,0x85,0xb5,0x08,0x04,0x00,0x10,0x20,0x0a,0x3a,0x9f,0x8e,0x90,0x08,0x06,0x11,0x1e,0xd6,0xd6,0xf3,0x9a,0xa9 -,0x2a,0x19,0x1d,0x51,0xee,0x29,0x19,0x89,0x80,0x91,0x2f,0x09,0x2e,0x8b,0x99,0x9f,0x83,0x85,0x80,0x8e,0x17,0xbc,0x9e,0x94,0x8b,0x96,0x8c,0x87,0x9e,0xaf,0x4a,0xb6 -,0xa4,0xc4,0x1b,0xeb,0x80,0x86,0x9f,0x12,0x08,0xbb,0x98,0x2a,0xa0,0x8a,0x87,0x84,0x1c,0x08,0x1f,0x23,0xd4,0xc9,0x38,0x9b,0xb8,0x1b,0x1a,0x11,0x2a,0x1d,0x11,0x07 -,0xac,0x80,0x9b,0x29,0x07,0x0a,0xa5,0xd4,0x19,0x97,0x8c,0x82,0x8c,0x0e,0x13,0x36,0x4e,0xa3,0xb1,0x9f,0x8a,0xad,0x69,0x3f,0x4f,0xa6,0x79,0x1e,0x27,0x85,0x80,0x8e -,0xce,0x11,0x30,0x8c,0xb5,0xbf,0x86,0x85,0x80,0x90,0x17,0x2e,0xb4,0xac,0x9b,0xb1,0x9b,0x90,0xd8,0x31,0x26,0x2c,0x25,0x14,0x08,0x10,0x82,0x88,0x4f,0x10,0x02,0x15 -,0x32,0x0b,0x1c,0x97,0x8a,0x86,0x21,0x05,0x11,0x19,0x23,0x47,0x2f,0xa9,0xa2,0x21,0x1e,0x18,0x1e,0x18,0x0f,0x06,0x23,0x80,0x8c,0xd8,0x0f,0x08,0x32,0x33,0x0d,0xc3 -,0x8a,0x85,0x87,0x1c,0x0b,0x2a,0x20,0x2d,0xf1,0x44,0x96,0x9b,0x34,0x3a,0x1f,0x23,0x16,0x0f,0x09,0xca,0x80,0x8d,0x6b,0x0d,0x0b,0x36,0x20,0x0c,0xa6,0x88,0x85,0x8d -,0x13,0x0d,0x2f,0x20,0x2a,0x38,0x56,0x95,0xa1,0x32,0x2d,0x17,0x1d,0x0e,0x0c,0x0b,0xaf,0x80,0x8e,0x39,0x0e,0x0b,0x29,0x1f,0x0d,0x96,0x85,0x86,0x8d,0x14,0x0f,0x3d -,0x1f,0x36,0x68,0xbe,0x90,0x9f,0x3e,0x3b,0x17,0x1d,0x0f,0x0e,0x0f,0xaf,0x80,0x8e,0x6c,0x17,0x0b,0x2e,0x25,0x10,0x8f,0x85,0x85,0x8b,0x1a,0x11,0xc9,0x27,0x2c,0x44 -,0xc0,0x8f,0x9c,0x34,0x3a,0x1e,0x1b,0x0f,0x10,0x0d,0xae,0x80,0x93,0xb9,0x14,0x09,0x2b,0x1c,0x11,0x91,0x86,0x87,0x8f,0x1a,0x14,0x44,0x21,0x1f,0x2d,0xae,0x8e,0x9e -,0x28,0x31,0x1d,0x16,0x0f,0x0e,0x15,0xb4,0x80,0x8c,0x52,0x16,0x0b,0x1e,0x2d,0x11,0x97,0x86,0x8b,0x8f,0x1d,0x17,0x3d,0x1d,0x29,0x2c,0xb7,0x93,0xa7,0x2d,0x2c,0x13 -,0x18,0x12,0x0b,0x25,0x1f,0x86,0x86,0x37,0x16,0x0c,0x1a,0xcc,0x14,0xc0,0x86,0x8c,0x8d,0x39,0x15,0x42,0x2e,0x29,0x34,0xc8,0x95,0x9b,0xde,0x2e,0x1a,0x1d,0x21,0x10 -,0x29,0x1c,0x8f,0x80,0xbd,0x1d,0x0f,0x1c,0xb3,0x18,0x1e,0x8b,0x89,0x8b,0xa9,0x18,0x39,0xd7,0x1c,0x2a,0xe7,0x9c,0x97,0xdd,0x32,0x29,0x1a,0x27,0x16,0x18,0x20,0x41 -,0x81,0x94,0x21,0x1f,0x17,0x2f,0x22,0x0e,0xa2,0x88,0x8c,0x97,0x21,0x1d,0x4c,0x1e,0x20,0x5e,0xa9,0x97,0xf0,0x2a,0x30,0x1d,0x21,0x26,0x12,0x23,0x13,0x9e,0x82,0xc6 -,0x3a,0x28,0x1a,0x35,0x11,0x13,0x8d,0x8a,0x8e,0xad,0x1b,0x3a,0x3d,0x1d,0x32,0xae,0x9b,0x9f,0x41,0x2c,0x42,0x23,0x2d,0x1a,0x15,0x21,0x1d,0x87,0x89,0x7d,0x5d,0x20 -,0x1d,0x26,0x0b,0xae,0x86,0x8f,0x93,0x4a,0x2c,0xae,0x21,0x16,0xa6,0xaa,0x9e,0xcb,0x33,0xb7,0x39,0x1f,0x1e,0x12,0x22,0x18,0xce,0x80,0x95,0x48,0x25,0x10,0x27,0x19 -,0x18,0x8d,0x8b,0x8e,0x9e,0x28,0xd5,0x35,0x11,0x3d,0xb5,0xbf,0xab,0x39,0xcc,0xbf,0x1c,0x19,0x16,0x0f,0x20,0x18,0x8f,0x82,0xb9,0x23,0x14,0x18,0x2a,0x0f,0xe7,0x88 -,0x8e,0x92,0xb3,0x2b,0x45,0x1d,0x1a,0xca,0xdd,0xa9,0xba,0x57,0xa8,0x2e,0x11,0x1e,0x0e,0x1a,0x28,0xad,0x80,0x95,0x25,0x1f,0x1c,0x33,0x1d,0x18,0x8e,0x88,0x91,0x9b -,0x3a,0xc0,0x60,0x15,0x29,0xb4,0xa4,0xa7,0xc9,0xb5,0x4d,0x16,0x1c,0x14,0x1a,0x28,0x4d,0x83,0x8e,0x2c,0x31,0x25,0x2b,0x20,0x10,0x9c,0x86,0x90,0x9a,0x44,0x70,0xec -,0x13,0x19,0xd9,0xa5,0xa8,0x51,0x6c,0x5d,0x1c,0x11,0x0d,0x1c,0x2a,0xbd,0x85,0x98,0x3f,0x33,0x1a,0x24,0x17,0x1c,0x99,0x8c,0x8f,0x95,0x55,0x5b,0x2c,0x13,0x1e,0x72 -,0x9f,0xa1,0xcf,0xd8,0x54,0x1d,0x0f,0x0e,0x24,0x33,0x91,0x8a,0xad,0xb4,0x33,0x1d,0x19,0x15,0xc6,0x8f,0x91,0x8e,0x9c,0xbc,0xea,0x20,0x18,0x36,0xb0,0xa2,0xa9,0xc1 -,0xc0,0x2a,0x13,0x0c,0x19,0x1f,0x96,0x88,0xad,0xab,0xe2,0x1f,0x1b,0x0c,0x2a,0x8d,0x93,0x91,0x98,0xad,0xb2,0x28,0x13,0x20,0xcf,0xab,0xa4,0xac,0xc3,0x2b,0x15,0x0a -,0x19,0x15,0x95,0x87,0x6b,0xa9,0xc5,0x1f,0x17,0x0b,0x24,0x90,0x93,0x90,0x9a,0xa4,0xab,0x2a,0x10,0x1d,0xcf,0xaa,0xb2,0xac,0xb4,0x34,0x0c,0x09,0x11,0x3b,0x88,0x96 -,0xb0,0xae,0x5a,0x26,0x0f,0x0f,0xac,0x99,0x93,0x8f,0x99,0x9d,0xbc,0x19,0x1c,0x2c,0xef,0xa4,0xbd,0xbc,0xbb,0x19,0x0f,0x1a,0x0e,0x91,0x8d,0x56,0x9f,0x3b,0x17,0x24 -,0x18,0xd8,0x9a,0xa6,0x8d,0x95,0xa5,0xa8,0x1f,0x1d,0xee,0x2a,0x4f,0xa8,0xa9,0xb7,0x10,0x09,0x26,0x19,0x99,0x8f,0x37,0x9b,0xb6,0x14,0x14,0x14,0xcf,0x93,0xa7,0x91 -,0x91,0x9e,0xad,0x18,0x20,0xc4,0x3d,0xc6,0xc1,0xd9,0xa3,0x11,0x07,0x18,0x1b,0x8b,0x8f,0xf7,0x9b,0x42,0x1a,0x0e,0x08,0xda,0x92,0x96,0x87,0x97,0xa6,0xb8,0x13,0x1c -,0x3b,0xdc,0xa4,0xa3,0xac,0xc3,0x09,0x0f,0x14,0x2c,0x88,0xa3,0x9d,0x90,0x29,0x16,0x0d,0x12,0xb3,0xe2,0x92,0x89,0x90,0x98,0x29,0x17,0x26,0x29,0x27,0x9e,0x99,0x9f -,0x23,0x09,0x1b,0x14,0x9e,0x97,0x1e,0x92,0x9f,0x33,0x1d,0x0e,0x37,0xc3,0x5d,0x97,0x94,0x90,0x96,0x27,0x20,0x22,0x19,0x44,0xb9,0x9f,0x54,0x13,0x22,0x10,0xca,0x8d -,0x3b,0xa5,0x97,0x2b,0x20,0x10,0x27,0xa2,0xc7,0x9b,0x9a,0xa2,0xb0,0x25,0x2e,0xae,0x32,0x2b,0xb5,0x7d,0xf4,0x0e,0x17,0x25,0xa7,0x90,0x2a,0xa6,0x95,0x34,0x1d,0x15 -,0x27,0x9c,0xcf,0x98,0x94,0x99,0xa3,0x1e,0x1f,0x37,0x2e,0x3c,0xa4,0xaf,0x3d,0x0d,0x12,0x1d,0xb5,0x92,0xc3,0xa1,0x9f,0x27,0x1b,0x20,0x44,0xbb,0xcf,0x9a,0x91,0x95 -,0x9e,0x37,0x23,0x34,0x1b,0x4d,0xa9,0xcf,0x51,0x11,0x1c,0x17,0xaf,0x91,0x3b,0x9c,0x9d,0x2a,0x18,0x12,0x3c,0xaf,0xc6,0x93,0x98,0x9a,0xaf,0x2f,0xbd,0x3b,0x1e,0xe7 -,0x4d,0x43,0x28,0x11,0x24,0x14,0x93,0x90,0x2f,0x9d,0xa8,0x38,0x18,0x13,0x39,0xb2,0xc3,0x9b,0x93,0x96,0xae,0x37,0x35,0x2d,0x1d,0xbc,0xaf,0x48,0x1c,0x10,0x25,0x1a -,0x8f,0x9c,0x43,0x90,0xb0,0x1e,0x19,0x1b,0x55,0xbe,0xd8,0x93,0x92,0x9b,0xb4,0x36,0xcc,0x38,0x29,0xc7,0x3e,0x4b,0x14,0x18,0x18,0x19,0x8a,0xaf,0xc7,0x91,0x4c,0x23 -,0x16,0x25,0xa9,0xb4,0xa3,0x94,0x93,0xa7,0x2f,0x4a,0xc0,0x35,0x2c,0xd2,0xdc,0x2b,0x0c,0x1e,0x16,0xcf,0x8d,0x26,0xab,0x91,0xb2,0x1c,0x11,0x1d,0xbe,0xce,0xa3,0x91 -,0x8e,0xa2,0x4d,0x3f,0x3f,0x1e,0x26,0xab,0xda,0x2a,0x0b,0x27,0x13,0xad,0x94,0x1f,0x94,0x95,0x30,0x1f,0x1f,0x35,0xbc,0x2f,0x9b,0x98,0x99,0xaa,0xaf,0xa3,0x6f,0x1f -,0x27,0x3a,0x2d,0x19,0x18,0x65,0x12,0x8e,0xa1,0x21,0x95,0xb9,0x3d,0x1f,0x1c,0x6c,0x55,0xb6,0x92,0x97,0x9f,0x30,0xc5,0xab,0xcd,0x31,0x4f,0xb3,0x28,0x0a,0x17,0x18 -,0x2a,0x87,0xb7,0xbe,0x98,0x54,0x23,0x13,0x1a,0xba,0xc7,0xa4,0x90,0x92,0xa1,0x77,0x3e,0xdf,0x2a,0x1d,0xae,0xb2,0x37,0x0d,0x1e,0x13,0x3e,0x8d,0x1f,0xa3,0x8e,0xf0 -,0x2b,0x13,0x2c,0xb0,0x24,0xa2,0x93,0x91,0x9d,0x56,0xb3,0xb3,0x22,0x20,0x47,0x29,0x1a,0x15,0x2f,0x13,0x9b,0x8f,0x21,0xa6,0xe0,0x55,0x2a,0x1b,0xa8,0xb1,0xc1,0x9d -,0x9e,0x9d,0xc4,0xb2,0xa1,0xa9,0x2d,0x2c,0xc8,0x21,0x0f,0x0b,0x16,0x1c,0x8d,0x9a,0x3f,0x94,0xac,0x2f,0x12,0x16,0xb9,0xb2,0xae,0x97,0x95,0x95,0xc4,0x43,0xf9,0xd0 -,0x3a,0xba,0x7e,0x2f,0x10,0x0d,0x14,0x0f,0x8d,0xb9,0xbe,0x8e,0xb1,0x62,0x1e,0x26,0xb9,0x27,0x56,0x96,0x97,0x96,0xc3,0x9c,0xa6,0x34,0x1f,0x3d,0x3d,0x47,0x0d,0x17 -,0x19,0x17,0x8d,0x27,0xbf,0x9b,0xb4,0xe4,0x23,0x36,0xad,0x53,0xb8,0xab,0xaa,0x9d,0xad,0x99,0xa5,0xbb,0x36,0xb2,0x1f,0x1d,0x0e,0x1d,0x1a,0x22,0x8c,0x28,0xac,0xa3 -,0x5b,0x35,0x27,0x40,0xb9,0x49,0xb7,0x9c,0xa6,0xa2,0xd3,0x9d,0xa1,0xc5,0x2d,0xe1,0x33,0x25,0x0e,0x1c,0x11,0x2b,0x8b,0x16,0xa2,0x9e,0xbc,0x3d,0x18,0xba,0xce,0xdb -,0xaf,0xaa,0xa4,0xa5,0xb7,0x90,0xa3,0xd3,0x28,0x52,0x4e,0x15,0x0e,0x1b,0x1b,0xce,0x9c,0x12,0x9e,0x9e,0xc2,0x24,0x29,0xa3,0xb7,0x50,0x32,0x9c,0xa3,0xab,0xae,0x9e -,0x97,0xcc,0x39,0xcc,0x2d,0x1f,0x0d,0x18,0x19,0xc4,0x9a,0x10,0xac,0xa2,0x38,0xe4,0x32,0x9f,0xa7,0xbb,0x4b,0xe5,0xa5,0x60,0xab,0x9d,0x9b,0xaf,0x2d,0xe6,0x3d,0x1e -,0x19,0x1b,0x1c,0xc9,0xb4,0x16,0xf1,0x9b,0x2e,0x29,0x50,0x9f,0xa2,0xac,0xce,0xc4,0xa1,0x63,0xdc,0xa8,0x9c,0xac,0x42,0xbe,0xc8,0x2d,0x1e,0x16,0x21,0x51,0x6f,0x19 -,0x2a,0xab,0x30,0x2b,0x31,0xab,0x9f,0xc9,0xbc,0xb1,0xa2,0x9c,0xba,0xa4,0xa8,0xb8,0xc7,0x2e,0xad,0xbb,0x36,0x26,0x19,0x37,0x25,0x11,0x1d,0x32,0x46,0x2c,0x34,0xaf -,0xa5,0xaf,0xcf,0xc9,0xa5,0x9a,0x9c,0x9d,0x9a,0x9f,0xdb,0x36,0x3c,0xce,0x4b,0x29,0x26,0x2e,0x3c,0x17,0x0f,0x1b,0x1e,0x38,0xef,0x40,0xa7,0xa1,0xa6,0xeb,0xbe,0x95 -,0x99,0x96,0xa5,0xa8,0x9d,0xce,0xe2,0x34,0x2e,0x39,0x1c,0x1f,0x1f,0x22,0x24,0x1d,0x1b,0x1f,0x36,0xd6,0x54,0xac,0xa6,0xb1,0xa2,0xa3,0x94,0x9a,0x9c,0x9d,0xbd,0xdb -,0xb2,0xba,0xbc,0x35,0x1e,0x1e,0x14,0x1e,0x16,0x1b,0x2f,0x3c,0x4a,0x2e,0x42,0xdb,0x67,0xff,0xaf,0x99,0x90,0x92,0x9a,0xa1,0xa7,0xb7,0xaf,0xca,0x50,0xb8,0x3b,0x24 -,0x19,0x14,0x1e,0x11,0x14,0x27,0x2d,0xb0,0x5b,0x44,0xcd,0x3a,0xb7,0xa7,0x99,0x92,0x99,0x93,0xa0,0xaf,0xad,0xc5,0xaf,0xbb,0x3e,0x28,0x19,0x1a,0x1e,0x17,0x15,0x1e -,0x31,0x20,0x29,0x5b,0xd8,0xaf,0xad,0xac,0x9d,0x98,0x97,0x9f,0xa9,0x98,0xa5,0xa2,0xaf,0xbb,0xb0,0x26,0x1f,0x14,0x17,0x1e,0x16,0x20,0x2c,0x1f,0x30,0x26,0x2b,0x42 -,0xae,0x9d,0xab,0x94,0x98,0x9e,0x9e,0xac,0xa0,0xa7,0xa3,0xaa,0xb1,0xbf,0x1d,0x19,0x18,0x1b,0x1f,0x16,0x25,0x2a,0x20,0x2d,0x22,0x4d,0xb6,0xb3,0xa9,0xaa,0x91,0x98 -,0x9e,0x9b,0xab,0xa1,0xa5,0xbc,0xae,0xd3,0x3c,0x26,0x17,0x1f,0x1e,0x1d,0x1d,0x1b,0x23,0x22,0x2d,0x4a,0xce,0xa8,0xb9,0xad,0x9b,0x9b,0x9a,0x9a,0x9f,0xa9,0xa5,0xa4 -,0xb7,0xe7,0x2e,0x1e,0x23,0x1a,0x24,0x20,0x1c,0x2a,0x1e,0x27,0x22,0x2f,0xb9,0xcb,0xae,0xa9,0xa6,0x9a,0x9c,0x9b,0x9c,0xa3,0xa2,0xad,0xae,0xc8,0x36,0x2d,0x1b,0x1b -,0x1f,0x20,0x19,0x20,0x30,0x25,0x2c,0x36,0x31,0xcf,0xc0,0xc4,0x9e,0x9d,0x93,0x99,0xa1,0x9b,0xa8,0xa2,0xac,0x52,0xd6,0x2d,0x1f,0x1b,0x1c,0x2b,0x13,0x1b,0x20,0x1d -,0x3c,0x3a,0xb8,0xc0,0xca,0xb7,0xd7,0x9b,0x94,0x98,0x95,0x9d,0x9f,0xa8,0xb3,0xd2,0x36,0x44,0x1d,0x16,0x2a,0x20,0x17,0x1d,0x1f,0x1e,0x25,0x2d,0xcd,0xb2,0xa9,0xad -,0xa7,0x9c,0x9d,0x9e,0x9e,0x95,0x9d,0xa4,0xb3,0x4c,0x5d,0x27,0x1a,0x18,0x1f,0x3f,0x16,0x1d,0x2b,0x1a,0x34,0x2b,0xe3,0xc7,0xed,0xac,0xa9,0x92,0x92,0x9e,0x9c,0x9f -,0xab,0xab,0xac,0xac,0x4f,0x27,0x1c,0x12,0x27,0x29,0x16,0x25,0x23,0x1a,0x2e,0x4c,0xbc,0x5e,0xd6,0xcb,0xad,0x93,0x99,0x97,0x9b,0x9c,0xa7,0xaa,0xa9,0x3a,0x32,0x23 -,0x20,0x1e,0x2c,0x27,0x16,0x1c,0x1e,0x24,0x4d,0xbb,0x41,0x43,0x5e,0xb4,0x9e,0x95,0x9a,0xb7,0x9d,0x99,0x9a,0x9a,0xbb,0x39,0x2b,0x1c,0x1b,0x1c,0x72,0x21,0x17,0x1d -,0x21,0x2f,0x47,0xe0,0x31,0x5e,0xe9,0xb1,0x9d,0x8f,0xa3,0xa9,0xa1,0x9c,0x97,0x9c,0xb6,0x42,0x2f,0x1f,0x14,0x1c,0x2e,0x18,0x15,0x1b,0x2d,0x33,0xc7,0x43,0x47,0x63 -,0xb4,0xad,0x96,0x94,0xa3,0xa0,0x9c,0x99,0x9d,0xa4,0x3e,0x39,0x38,0x27,0x16,0x20,0x28,0x14,0x12,0x1e,0x21,0x3b,0xb8,0x38,0x48,0xb7,0xae,0xa9,0x96,0x98,0xa2,0xa1 -,0xa4,0x9f,0x93,0x9a,0xdb,0x2a,0x21,0x1b,0x1a,0x2e,0x27,0x15,0x14,0x1c,0x1c,0x34,0x50,0x3e,0x41,0xb4,0xab,0x9a,0x8e,0x9d,0xa7,0xa9,0xa4,0x9a,0x97,0xab,0xec,0x42 -,0x38,0x18,0x12,0x20,0x1b,0x15,0x1b,0x29,0x25,0xd9,0x75,0x24,0x39,0xb8,0xa4,0x93,0x91,0xa1,0xa4,0x9b,0xa0,0xa4,0x9b,0xae,0x4d,0x46,0x1e,0x19,0x2c,0x29,0x0f,0x0d -,0x1e,0x28,0x3d,0xbd,0x32,0x2f,0xe2,0xbf,0xa7,0x95,0x94,0xa8,0x9d,0x9a,0xa2,0x99,0x9e,0xc5,0x3a,0x2f,0x1f,0x1c,0x2b,0x20,0x12,0x19,0x1f,0x20,0x38,0x46,0x52,0x3c -,0x4e,0xbc,0x9b,0x92,0x9c,0xb4,0xa5,0x9d,0x9b,0x9a,0xa6,0xdf,0x3e,0x41,0x1d,0x26,0x2b,0x19,0x0f,0x19,0x1f,0x39,0xc8,0x44,0x27,0x40,0xaa,0x97,0x8f,0x9f,0xa7,0xa2 -,0x9c,0xa3,0xab,0x34,0x32,0x36,0x60,0xa8,0xa8,0xdc,0x14,0x0b,0x09,0x1e,0x9c,0xa1,0x58,0xbc,0xa9,0xda,0x18,0xbc,0x8e,0x96,0x99,0x2b,0x0f,0x22,0x98,0x96,0x95,0xb3 -,0x1f,0x2e,0xa4,0xae,0x21,0x3c,0x18,0x1b,0xbe,0xb0,0x17,0x0c,0x0d,0x13,0x9e,0x9b,0xbc,0xaf,0xb0,0x9f,0x8a,0x81,0x83,0x8e,0xfc,0x1a,0x17,0x47,0xa1,0x18,0x09,0x08 -,0x09,0x12,0x10,0x11,0x45,0xa7,0x23,0x24,0xae,0x8e,0x8d,0x8c,0x8b,0x95,0x97,0x8b,0x9a,0x4d,0xb2,0x31,0x19,0x31,0x41,0x0f,0x07,0x05,0x09,0xcb,0x91,0xca,0x14,0x13 -,0x24,0x7b,0x85,0x82,0x92,0x98,0xcd,0x2f,0xa9,0x99,0x62,0x2d,0x22,0x1b,0xaa,0x95,0x2b,0x0c,0x14,0x2b,0x1a,0x1e,0x1d,0x1a,0x35,0xab,0xbb,0xab,0x92,0x52,0x2f,0xa8 -,0x9d,0x8f,0x8a,0x8f,0x9d,0x47,0x27,0x0b,0x0e,0xab,0x45,0x0c,0x07,0x0b,0x10,0xb7,0xa1,0xc7,0x9c,0x97,0x3b,0xa3,0x8a,0x8b,0x90,0xa5,0x4e,0xc5,0x95,0xba,0x11,0x11 -,0x2f,0x23,0x5c,0x21,0x06,0x08,0x1a,0x2e,0xa1,0x8d,0x99,0xad,0x65,0xc7,0xb5,0x8c,0x8c,0xad,0x66,0xb1,0x29,0x3d,0xca,0x26,0x37,0x2d,0x08,0x09,0xad,0x9b,0x93,0xa9 -,0x45,0x2a,0x32,0x4c,0xc0,0x48,0x3d,0x2d,0x23,0x8c,0x8d,0xc2,0x1f,0x2c,0xc9,0x8f,0x94,0x4b,0x18,0x0b,0x0e,0x18,0x8d,0x89,0x9f,0x11,0x0c,0x13,0xab,0x99,0xf0,0x2b -,0x3f,0xa2,0x9c,0x95,0xaf,0xde,0x2e,0xcd,0x25,0x56,0x35,0x55,0x23,0x1d,0x0f,0x30,0x8b,0xa3,0xa5,0x31,0x4f,0xdb,0xac,0xc2,0x75,0x1d,0x2e,0xa2,0x8f,0x8b,0xbf,0x0e -,0x16,0x1e,0x47,0xae,0x2d,0x17,0x13,0x09,0x1b,0x85,0x82,0x85,0x36,0x1d,0xe0,0x3f,0x26,0x15,0x0d,0xa1,0x8b,0xa5,0x1d,0x09,0x0c,0xac,0x8e,0x92,0x96,0xa2,0x4e,0x0a -,0x04,0x09,0x8c,0x82,0x87,0x3e,0x0f,0x33,0x1c,0x17,0x1c,0x1b,0xa5,0x87,0x9b,0x5d,0x2a,0xad,0x8e,0x91,0xd2,0x1b,0x10,0x4d,0x1c,0x0c,0x02,0xb6,0x80,0x87,0x3a,0x00 -,0x0f,0xdf,0xc2,0x43,0x40,0xb1,0x83,0x88,0x9f,0x2a,0x3f,0x99,0x97,0x27,0x1a,0x1c,0x2d,0x11,0x03,0x03,0x1c,0x80,0x89,0x90,0x1e,0x28,0x9f,0x21,0x0d,0x1c,0x9d,0x83 -,0x84,0xe1,0x0e,0x0a,0x2c,0x98,0x9b,0xa0,0xbb,0x5e,0x37,0x0a,0x04,0x04,0x8f,0x80,0x8d,0x2b,0x01,0x13,0x27,0x1b,0x39,0x9d,0x89,0x80,0x9c,0x13,0x0c,0x30,0x8d,0x98 -,0x3b,0xef,0x3e,0x4d,0x08,0x03,0x06,0xd0,0x80,0x91,0x32,0x05,0x14,0x97,0xa5,0x2e,0xbc,0xa1,0x82,0x8b,0x2e,0x1d,0x19,0xa4,0x96,0xc2,0x3b,0x0e,0x0c,0x0c,0x00,0x07 -,0x14,0x85,0x81,0x8d,0xca,0x18,0x9d,0x98,0x1d,0x24,0xb8,0x8f,0x80,0x42,0x0c,0x08,0x18,0xa9,0x28,0x22,0x68,0x2b,0xbb,0x0d,0x05,0x0b,0xa9,0x80,0x87,0x9e,0x09,0x0e -,0xaa,0x5c,0x14,0xc2,0x9e,0x85,0x90,0x16,0x0e,0x0c,0xaa,0x99,0xb2,0xaf,0x20,0x10,0x0d,0x04,0x1c,0xb7,0x85,0x80,0xa8,0x0d,0x01,0x2a,0x99,0x22,0x1e,0xaa,0x8c,0x80 -,0xf6,0x13,0x15,0x3d,0x97,0x33,0x25,0x46,0x1f,0x2e,0x0d,0x0a,0x18,0x2c,0x80,0x8a,0xa9,0x0f,0x0c,0x95,0xa2,0x2e,0xab,0x54,0x95,0x9f,0x05,0x0b,0x13,0xa3,0x96,0xc9 -,0x98,0x95,0x45,0x1c,0x05,0x16,0xf6,0x8b,0x80,0xa1,0x14,0x02,0x0f,0xb8,0x11,0x16,0x9d,0xa3,0x86,0x46,0x07,0x13,0x2b,0x8e,0x93,0x9f,0x90,0xa6,0x29,0x12,0x08,0x1a -,0x25,0x84,0x83,0x3f,0x0e,0x00,0x16,0x74,0x14,0xd0,0x9b,0x9b,0x85,0x23,0x2b,0xa2,0x94,0x8c,0x32,0x31,0xb8,0x25,0x17,0x07,0x05,0x11,0x31,0x80,0x93,0x1e,0x0d,0x0b -,0x95,0x9f,0x2f,0x97,0x9c,0x8d,0x8e,0x0f,0x21,0x1f,0xae,0xab,0x1e,0xc5,0x48,0x1c,0x24,0x0b,0x15,0x1b,0xa3,0x80,0xb5,0x14,0x03,0x0d,0x96,0xb1,0xa4,0x88,0x8e,0x85 -,0x32,0x07,0x29,0x24,0x9a,0xbf,0x59,0x93,0x4e,0x17,0x0d,0x00,0x0f,0x1a,0x8a,0x81,0x2f,0x15,0x01,0x21,0x95,0x43,0x9c,0x8f,0x8e,0x82,0x27,0x27,0xab,0xb4,0x96,0x1d -,0x25,0xc3,0x0e,0x12,0x0a,0x05,0x12,0x0e,0x81,0x8d,0x3a,0x28,0x0b,0x8c,0x8d,0xce,0x8e,0x9d,0x95,0x9a,0x05,0x1e,0x2c,0xad,0x9d,0x17,0xf6,0x38,0x14,0x1c,0x09,0x19 -,0x4c,0xa0,0x80,0x95,0x2b,0x0b,0x06,0x9b,0xb4,0x20,0x98,0xab,0x8b,0xc2,0x04,0x1e,0x23,0x9a,0xb6,0x2a,0x9f,0xb7,0x52,0x36,0x0d,0x2d,0x2d,0x96,0x80,0xcd,0x1e,0x05 -,0x0b,0x9e,0x1d,0x26,0x9a,0xae,0x8a,0x21,0x0d,0xae,0xb1,0x91,0x2c,0x30,0x9f,0xcb,0x38,0x24,0x0c,0x1f,0x10,0x93,0x80,0xca,0x3f,0x05,0x33,0x8e,0x23,0xe9,0xb1,0xba -,0x8e,0x0d,0x0a,0x27,0xca,0x93,0x27,0xb7,0x98,0xaf,0x47,0x1c,0x1b,0xc2,0x1a,0x8e,0x81,0xdb,0x24,0x01,0x20,0x9d,0x1b,0xd8,0xcb,0xc4,0x9a,0x0e,0x12,0xac,0x95,0x86 -,0xad,0xa7,0x9d,0x3c,0x29,0x15,0x18,0x5f,0x16,0xa4,0x80,0x40,0x12,0x01,0x0a,0xb3,0x2c,0xba,0x9a,0x92,0x84,0xaf,0x21,0x9d,0x8f,0x8a,0xbc,0x4b,0xcf,0x21,0x0f,0x0e -,0x0c,0x14,0x0a,0x29,0x80,0x9b,0x2d,0x08,0x12,0x92,0xb4,0xbd,0x95,0x8f,0x88,0x45,0x0a,0x2c,0xa6,0x8f,0x58,0x25,0xc5,0x4d,0x23,0x1b,0x1c,0x39,0x1d,0x14,0x86,0x8d -,0x2c,0x0f,0x09,0x9e,0xa3,0x32,0xaa,0xa3,0x93,0xbd,0x0b,0x31,0x9a,0x8d,0x9d,0x21,0xb1,0x74,0x28,0x23,0x1d,0x2a,0x29,0x10,0x94,0x86,0x39,0x1a,0x06,0x32,0x9b,0x31 -,0x9d,0x9d,0x99,0x9e,0x12,0x24,0x94,0x8f,0x96,0x1b,0x14,0x1c,0x10,0x16,0x1f,0x5b,0xb1,0x29,0xa6,0x80,0x93,0x4c,0x0f,0x15,0x98,0xc0,0xd2,0xa9,0x66,0x55,0x0e,0x08 -,0xcf,0x9f,0x9a,0x2b,0x24,0xc1,0x65,0xcb,0xc8,0xa3,0xa4,0x4d,0x2f,0x86,0x8d,0x2b,0x0c,0x08,0xb1,0x77,0x21,0x37,0x4b,0xa9,0x27,0x0c,0xc7,0x97,0x8f,0xa2,0x2a,0xb4 -,0x9d,0xa0,0xa4,0xb9,0x28,0x1d,0x09,0x93,0x8f,0x13,0x0d,0x07,0xb6,0xae,0x2b,0xac,0xa5,0x9e,0xa3,0x2c,0x99,0x89,0x92,0x69,0x15,0x29,0x54,0x32,0x27,0x35,0x2b,0x1f -,0x12,0x8c,0x8d,0x23,0x0f,0x0b,0x9c,0xcd,0x1c,0x48,0xc1,0x9a,0xb7,0x1b,0x9a,0x8d,0x8f,0xb9,0x25,0xb2,0xa6,0x55,0x3c,0x2b,0x24,0x16,0x18,0x88,0xad,0x14,0x09,0x0d -,0xab,0x18,0x18,0x97,0x99,0x8f,0xcf,0x3d,0x8a,0x8f,0x97,0x3d,0xd9,0x9b,0xa7,0x2f,0x36,0x13,0x10,0x04,0x5b,0x8c,0x18,0x16,0x09,0xfb,0xa2,0x1d,0xa4,0x8d,0x8a,0x8c -,0x2d,0x9f,0x8f,0xa0,0xde,0x13,0x1a,0x3c,0x20,0x2b,0x12,0x0d,0x16,0x39,0x82,0xa4,0x1e,0x1d,0x41,0x8f,0xd4,0x3a,0x91,0x9a,0xa0,0x14,0x16,0x9b,0x9d,0xc9,0x1a,0x1c -,0xe3,0x2a,0x25,0x20,0x14,0x1e,0xa9,0x81,0x91,0x2d,0x0f,0x1e,0x96,0x52,0x2b,0xa3,0x9a,0x9b,0x16,0x15,0xa7,0x97,0xac,0x1e,0x29,0xb6,0x22,0x1d,0x20,0x14,0x1b,0xa3 -,0x81,0xa9,0x20,0x10,0x18,0x9f,0x3a,0xaf,0x91,0x93,0x98,0x1b,0x1f,0x9a,0x9b,0x9d,0x28,0x2c,0x1f,0x0b,0x0b,0x0c,0x15,0x2b,0x87,0x86,0xac,0x21,0x17,0x70,0xb1,0xbd -,0x8c,0x8c,0x95,0x42,0x0a,0x18,0x22,0xcc,0xa2,0xaa,0xb2,0x18,0x0d,0x0f,0x12,0x38,0x8d,0x80,0x93,0xc3,0x13,0x18,0x3e,0x1b,0xa9,0x91,0x94,0xb2,0x0c,0x16,0x1f,0x1a -,0x3c,0xad,0x8f,0x9c,0x22,0x12,0x12,0x23,0x89,0x80,0x95,0xdc,0x1d,0x1c,0x16,0x05,0x27,0x9c,0x9c,0xa2,0x15,0x19,0x1d,0x24,0xe4,0xb9,0x8e,0x8f,0xa2,0x21,0x0d,0x13 -,0x97,0x80,0x99,0x43,0x17,0x1e,0x27,0x0c,0x1f,0x9b,0x93,0x9b,0x17,0x2f,0x6b,0x2d,0xc8,0x41,0xa4,0xc8,0x1d,0x15,0x19,0xad,0x80,0xa6,0x1d,0x27,0x3c,0xa4,0x12,0x22 -,0x9b,0x8f,0x99,0x1e,0x1c,0xc8,0x2a,0x39,0x37,0xb4,0x4d,0x20,0x14,0x17,0x20,0x8f,0x83,0xa9,0xb6,0x1d,0x3c,0x3e,0x22,0x9f,0x98,0x9d,0x2d,0x18,0x2c,0x1a,0x1f,0x32 -,0xae,0xae,0x2f,0x0e,0x16,0xd6,0x88,0x83,0xba,0xb1,0xbc,0x69,0x13,0x0b,0xd0,0x94,0x94,0x3c,0x0d,0x1d,0x1d,0x2d,0x4f,0x9e,0xa5,0xfa,0x13,0x10,0x2b,0x8f,0x80,0xa4 -,0x58,0x24,0xc0,0x1c,0x09,0x3d,0x8c,0x98,0x2c,0x15,0x45,0x4e,0x29,0xc9,0xa4,0x8e,0x1f,0x06,0x09,0x37,0x81,0x8a,0x35,0x3e,0x2b,0x1e,0x0b,0x0e,0x90,0x90,0x9e,0xb2 -,0xac,0xbc,0x10,0x34,0x99,0x94,0xae,0x0d,0x08,0x16,0x34,0x82,0xaf,0x1f,0xbd,0x28,0xd6,0x07,0x37,0x89,0x92,0x9d,0x39,0x5e,0x2f,0x18,0x4d,0xa7,0xa8,0x2e,0x05,0x16 -,0x14,0x97,0x84,0x2c,0x96,0xc8,0x3c,0x26,0x0c,0x9e,0x8d,0xbf,0xad,0x33,0x2f,0xd9,0x1e,0xb4,0xcd,0xc3,0x1a,0x07,0x0b,0x38,0x80,0x99,0xf1,0xa6,0x41,0xb9,0x12,0x27 -,0x91,0x9c,0xcb,0x5a,0x1f,0x39,0x17,0x2f,0x98,0xac,0x31,0x05,0x18,0x61,0x85,0x8f,0x1d,0xa3,0x4c,0x33,0x13,0x17,0x90,0x8d,0x5b,0x2b,0x0e,0x2e,0xaa,0x31,0xa0,0xac -,0x9f,0x16,0x0a,0x1c,0x8a,0x87,0x15,0xd7,0xa8,0x5f,0x13,0x09,0x9f,0x89,0xc5,0x34,0x2a,0xc9,0xaf,0x1f,0xbe,0xa5,0xd4,0x0f,0x0d,0x1c,0x8d,0x85,0x1e,0x4e,0xc7,0x54 -,0x1d,0x0f,0x98,0x89,0x41,0x2f,0x29,0x2f,0x9e,0x23,0xab,0xba,0x3b,0x0d,0x09,0x12,0x92,0x84,0x1d,0xbd,0xc4,0x65,0x16,0x12,0x90,0x81,0x9a,0xcd,0x27,0x1e,0x30,0x1a -,0xa6,0x9a,0x3f,0x06,0x08,0x15,0x8f,0x8a,0x13,0xaa,0xa1,0x36,0x22,0x1b,0x8e,0x88,0xbf,0xb5,0xb0,0x4e,0x38,0x24,0xbb,0xd2,0x13,0x04,0x0c,0x18,0x89,0x86,0x1a,0xb9 -,0xf1,0x1f,0x1d,0x14,0x8e,0x84,0xa0,0xa2,0x21,0x30,0x2f,0x1f,0xa4,0x9f,0x1f,0x04,0x09,0x10,0x88,0x91,0x22,0x90,0xb1,0x1f,0x14,0x18,0x8c,0x8c,0xb2,0x98,0x27,0x34 -,0x38,0x29,0xa2,0xb9,0x18,0x0b,0x0f,0x22,0x82,0xab,0x17,0xa0,0x38,0x33,0x18,0x25,0x89,0x99,0x3c,0x9f,0x36,0xbf,0x4b,0x46,0x9d,0xac,0x17,0x0e,0x0e,0x45,0x81,0x3b -,0x1e,0x9c,0x1d,0x13,0x0d,0x36,0x87,0xa0,0xa6,0x9a,0x29,0x4b,0x38,0xb4,0x96,0xb9,0x0e,0x0c,0x12,0xa4,0x81,0x1e,0x33,0xa0,0x18,0x18,0x0f,0xb6,0x8b,0xbb,0xac,0x95 -,0x22,0xc6,0xc1,0xa5,0xa0,0x33,0x14,0x10,0x0d,0xae,0x85,0x10,0x32,0x99,0x2a,0x1b,0x0d,0xb0,0x87,0xb1,0x9c,0x95,0x33,0x3b,0x74,0x9f,0xa7,0x2c,0x0f,0x0e,0x0a,0xaf -,0x85,0x23,0x4b,0xac,0x14,0x19,0x1a,0xaa,0x89,0xa9,0x9f,0x9b,0x24,0xa8,0xc0,0xa8,0xaa,0x23,0x12,0x0f,0x0f,0xa1,0x86,0x11,0x43,0xa9,0x20,0x22,0x18,0xb0,0x8f,0xc3 -,0xa5,0x94,0x1f,0xd9,0xbe,0xa8,0x9b,0xc5,0x13,0x0b,0x09,0x51,0x81,0x2b,0x3a,0x94,0x15,0x15,0x18,0xb8,0x87,0xa4,0xdc,0xa5,0x18,0x33,0xa5,0xac,0x98,0xaf,0x1e,0x0e -,0x0b,0x18,0x87,0x9f,0x1c,0x97,0x67,0x15,0x14,0x1a,0x97,0x95,0x32,0x8f,0xaa,0x27,0xa8,0x38,0xb0,0x9b,0x33,0x1d,0x16,0x0a,0x96,0x8b,0x17,0xe5,0xba,0x13,0x1c,0x13 -,0xaf,0x8d,0x5e,0x9c,0x99,0x1b,0xb0,0xa9,0xab,0x90,0x3d,0x18,0x15,0x0b,0x1e,0x85,0xa6,0x1a,0xa1,0x1f,0x1b,0x13,0x1c,0x96,0x9f,0xb4,0x92,0xaa,0x2b,0xa9,0xb7,0xa7 -,0xae,0x49,0x27,0x17,0x07,0x28,0x8a,0x31,0xa8,0x93,0x24,0x1b,0x0c,0x1f,0x95,0xab,0x9b,0x8b,0xb9,0x34,0xad,0x6e,0xd8,0x31,0x30,0x21,0x1f,0x10,0x9d,0x8f,0x0e,0xfa -,0x9b,0x29,0x26,0x17,0x4e,0x99,0x3a,0x9a,0x94,0x47,0xad,0xb5,0xc2,0xa7,0x52,0x25,0x19,0x10,0x0e,0x92,0x99,0x2b,0x8f,0xab,0x12,0x18,0x14,0xb3,0x9d,0x79,0x94,0x9e -,0x4e,0xaf,0x36,0xb8,0xa4,0x3e,0x2f,0x1a,0x16,0x1a,0x94,0xaf,0x2d,0x97,0xac,0x25,0x1e,0x13,0x4d,0xab,0xc1,0x92,0x96,0xab,0xbf,0x2a,0xc1,0xb1,0x2b,0x28,0x23,0x14 -,0x19,0x97,0x45,0x3f,0x97,0x50,0x40,0x23,0x1e,0x9d,0xcb,0xf8,0x94,0xa7,0xa8,0xa6,0x66,0xa4,0x34,0x31,0x26,0x10,0x0e,0x1c,0x93,0xbe,0x2c,0xa2,0xaa,0xd9,0x26,0x1e -,0xb0,0xc1,0xa8,0x98,0xa9,0xa0,0xa9,0x43,0xa8,0x4f,0x43,0x1b,0x0f,0x14,0x25,0x9b,0x2e,0x2e,0xa2,0xa7,0x49,0x24,0x39,0x9d,0xa3,0xd2,0xb2,0xa9,0xa8,0xb8,0x65,0xb6 -,0xac,0xdb,0x13,0x1a,0x18,0x25,0xa1,0x24,0x3f,0xa0,0xb5,0xbd,0x29,0x46,0xa8,0x31,0xe5,0x9a,0x9e,0xa9,0xb9,0xc4,0x9c,0xbd,0x27,0x18,0x1c,0x13,0x1e,0xa9,0x4d,0xb7 -,0xac,0x4d,0xc6,0x2c,0x3b,0xad,0xec,0xa1,0x9f,0xbb,0xb5,0xb6,0xae,0xa5,0xeb,0xfa,0x20,0x1d,0x15,0x1d,0xb2,0x2e,0x33,0xb7,0xb4,0xa9,0x36,0x2e,0xae,0x4f,0xa4,0xaa -,0xd0,0xa3,0xa0,0xa8,0xb6,0x4f,0xb9,0x29,0x18,0x19,0x1b,0xbf,0x30,0x2e,0xb7,0xce,0xc5,0x4c,0x3f,0xa5,0xec,0xd5,0xa9,0xb9,0x9a,0xbe,0x3e,0xaa,0xad,0xfa,0x23,0x2a -,0xcc,0x23,0x27,0x3c,0x26,0xe4,0xd1,0xc6,0x62,0x37,0x6c,0xcd,0x59,0xa7,0xa9,0xc5,0xf9,0xdb,0xa5,0xad,0x57,0x48,0xb8,0xc2,0x3f,0x32,0x39,0x2d,0x4a,0x7b,0x3e,0xd5 -,0xcc,0x30,0x21,0x2c,0xb9,0xb4,0x52,0xb9,0xac,0xaf,0x3a,0x43,0xaf,0xaf,0xbc,0xe2,0xcf,0x7a,0x54,0xb8,0xb8,0xda,0xe8,0x29,0x23,0x33,0x5e,0xc1,0x3c,0x2b,0x6a,0x78 -,0x65,0xdd,0xb8,0xb2,0x54,0x63,0x59,0x50,0x5d,0xea,0xb6,0xa9,0xa9,0xb5,0x5b,0xd3,0x6b,0x4d,0x51,0xfe,0xc3,0x2c,0x1c,0x2e,0x70,0xbb,0xc1,0x3d,0x4e,0x2a,0x37,0x5c -,0x58,0xb1,0xa6,0xb3,0xcd,0xbd,0xaf,0xaa,0xb6,0xb7,0xbf,0x3b,0x25,0x3c,0x6a,0x43,0x43,0x4a,0x41,0x32,0x31,0x39,0x46,0x46,0x6b,0x6a,0xce,0xb1,0xab,0xb4,0xc3,0xba -,0xb8,0xb8,0xec,0x43,0x41,0x45,0x62,0xce,0xeb,0x40,0x45,0x34,0x4d,0xbf,0x57,0x44,0x39,0x50,0xc3,0xd2,0x43,0xde,0xbe,0xc8,0xd5,0x47,0xc0,0xbc,0xcb,0x6b,0x3b,0x49 -,0xb9,0xbf,0x65,0x6e,0x45,0x5a,0x51,0x53,0x49,0xd6,0xca,0x68,0x4c,0x3d,0x6d,0x60,0x4d,0x4e,0x51,0xc3,0xae,0xbc,0xba,0xdd,0x3e,0x4b,0x3e,0x57,0xc3,0xe5,0xc5,0xb8 -,0x4d,0x48,0x3d,0x3f,0xd0,0xce,0x6e,0xcc,0x33,0x31,0xe8,0xea,0xba,0xc4,0xc9,0xbf,0xd2,0x3e,0x5e,0xd2,0xbe,0xaf,0x3b,0x2c,0x4c,0xc1,0xb2,0xd5,0x49,0xc0,0x53,0x2c -,0x2a,0x39,0xc1,0xc1,0xc9,0x70,0xdd,0xcf,0xd7,0xcb,0xd2,0xc4,0xbd,0xd9,0x5f,0x50,0x70,0xce,0xcf,0xd9,0x3c,0x31,0x3a,0x57,0x3f,0x58,0xbd,0xc7,0x40,0x37,0xd0,0xb2 -,0xad,0xb4,0xce,0x64,0x37,0x36,0xe2,0xb6,0xb4,0xc1,0x41,0x31,0x32,0x37,0x48,0x59,0xb6,0xbe,0x4c,0x39,0x32,0xd9,0xb6,0xaf,0xb6,0xbe,0xe7,0x42,0x4b,0x58,0x5c,0xce -,0xbf,0xc8,0x3d,0x27,0x3f,0x6e,0xb7,0xb4,0x45,0x58,0x78,0x47,0x4c,0x4a,0xb8,0xad,0x7e,0x34,0x3a,0xbf,0xbe,0xb8,0xdc,0x5e,0x4e,0x3f,0xdf,0x5a,0x43,0xdf,0xc7,0xcc -,0x4a,0x3b,0x76,0x6e,0xc7,0xd6,0x61,0x4d,0x41,0xcf,0xbf,0xe4,0xc0,0xc7,0xc4,0x4b,0x33,0x4a,0x54,0xaf,0xb8,0x58,0x39,0x32,0x59,0xd4,0x45,0xbf,0xbb,0xc9,0xcd,0x37 -,0x6c,0x56,0x4d,0xbf,0xc1,0x5c,0x5a,0x57,0x5e,0x4f,0x74,0xc0,0xc2,0xc6,0x43,0x3e,0x4c,0x4b,0xef,0xd4,0xcc,0xbc,0x5d,0x5a,0x57,0x57,0xcb,0x51,0x51,0xed,0x4e,0x5a -,0x6e,0xfb,0xc6,0xcf,0xdc,0x4a,0x56,0xea,0xe8,0xcc,0xc8,0xc8,0x71,0x48,0x40,0x42,0xd7,0xc1,0xe6,0x68,0x3d,0x39,0x40,0xd0,0xbc,0xb7,0xbf,0xdf,0xd3,0x47,0x3e,0x53 -,0xba,0xb4,0xeb,0x42,0x45,0x35,0x37,0x4b,0xbf,0xaf,0xc3,0x4a,0x49,0x3b,0x3d,0x51,0xcc,0xb8,0xdb,0xc5,0xca,0xbf,0xcc,0x7d,0x4f,0x57,0x5d,0x7b,0x3d,0x38,0xd5,0x5d -,0xee,0x79,0xc8,0xbd,0xd9,0x4c,0xff,0x5f,0x3a,0x51,0x7d,0xd4,0xcf,0xc5,0xd3,0xf2,0x44,0xdf,0xbd,0x61,0xc2,0xee,0x3e,0x41,0x73,0xec,0xc3,0xcd,0xd1,0xd7,0x40,0x38 -,0x4a,0x63,0xd2,0xcc,0x7a,0x69,0x41,0xc3,0xaf,0xd6,0x47,0xe8,0x7b,0xde,0x4a,0xfe,0xdf,0xc1,0x57,0x3c,0x3c,0xbd,0x5e,0xd0,0xbe,0x9f,0xa8,0x4c,0x2e,0x2f,0xb2,0x53 -,0x98,0x29,0xaf,0x0c,0x01,0x0e,0x0d,0xa6,0x1c,0xe7,0x23,0x26,0x8f,0x94,0x96,0x8d,0x92,0xba,0x93,0x8c,0xb4,0x9f,0x8d,0x1b,0x98,0xf4,0x0a,0x8b,0x8b,0x9c,0x9b,0x9b -,0x1c,0x2a,0x0f,0x0f,0x0c,0x07,0x08,0x09,0x0b,0x08,0x0d,0x08,0x16,0x06,0x19,0x14,0x09,0x1c,0x68,0xb0,0xaa,0xa3,0xaa,0xa5,0x9d,0x8d,0x95,0x8e,0x8d,0x8f,0x88,0x87 -,0x8b,0x88,0x83,0x84,0x83,0x84,0x8e,0x88,0x94,0xba,0x9c,0x93,0x9d,0x0c,0x26,0x14,0x14,0x1c,0x06,0x0a,0x05,0x00,0x09,0x18,0x0b,0x0a,0x02,0x08,0x0a,0x00,0x07,0x1c -,0x26,0x0e,0x08,0x0f,0x2a,0x92,0x8f,0xb9,0x3f,0x9d,0x86,0x82,0x81,0x8b,0x9d,0x9b,0x83,0x80,0x85,0x87,0x3b,0xa0,0x8b,0x8d,0x90,0x98,0x9f,0xae,0x9c,0x33,0x14,0x0b -,0x27,0x1d,0x1f,0x08,0x06,0x0a,0x07,0x0b,0x09,0x0e,0x00,0x10,0x0a,0x13,0x0c,0x07,0x0d,0x09,0x9c,0xb0,0x93,0xae,0x27,0xb9,0xb7,0x8f,0x8b,0x8e,0x39,0xb4,0x9a,0x86 -,0x8b,0x8c,0x8d,0xa1,0x87,0x88,0x86,0x8a,0x86,0x89,0x94,0x89,0x8e,0x93,0xa1,0x21,0x1e,0x2e,0x2a,0x0d,0x04,0x0c,0x0e,0x0f,0x07,0x08,0x03,0x06,0x15,0x1b,0x17,0x09 -,0x06,0x03,0x0c,0x0f,0x2f,0x1a,0xda,0x37,0x22,0xa1,0x19,0xb9,0x8c,0x87,0x80,0x8f,0x91,0x88,0x84,0x84,0x83,0x85,0x90,0x8c,0x8c,0x8f,0x94,0xae,0x2b,0xb9,0x3d,0x28 -,0x0f,0x08,0x17,0xb9,0x3a,0x1a,0x1f,0x12,0x17,0xc8,0x10,0x11,0x1b,0x0e,0x18,0x09,0x08,0x03,0x20,0x0d,0x1b,0x0e,0x09,0x09,0x0d,0xac,0x2f,0x8a,0x98,0x9b,0x8d,0x8d -,0xaa,0x9e,0x85,0x8e,0x94,0xbc,0x8c,0x80,0x95,0x92,0xa6,0xa3,0x88,0x8b,0x8e,0x9c,0xb8,0xbf,0x5f,0xaf,0x98,0xa4,0x2c,0x1e,0xb6,0x0e,0x09,0x08,0x0f,0x1b,0x1a,0x0f -,0x03,0x0e,0x07,0x18,0x15,0x04,0x0a,0x14,0x08,0x0b,0x25,0x37,0xc1,0x9b,0x4c,0x99,0x8b,0x89,0x8c,0x8c,0x96,0xa0,0x94,0x8e,0x80,0x94,0x8f,0xa0,0x9d,0x39,0xbc,0x9d -,0xaa,0x3f,0xbc,0x96,0x86,0x88,0x6f,0xb4,0x9c,0x93,0x1f,0x99,0x9e,0x36,0x17,0x26,0x1e,0x08,0x22,0x0a,0x00,0x05,0x00,0x02,0x08,0xa3,0xb9,0x0a,0x14,0x0e,0xaa,0xa7 -,0xb5,0x23,0x35,0xa1,0xb2,0x8a,0x93,0xae,0x3e,0xe7,0x58,0xa3,0xa8,0xc2,0x8d,0x86,0x9a,0x94,0x80,0x8e,0x8c,0x8b,0x8d,0x90,0x96,0xa8,0x3a,0x9a,0x92,0x8a,0x13,0x18 -,0x12,0x06,0x04,0x06,0x0a,0x00,0x59,0x1c,0x56,0xa4,0x1b,0x0d,0x0e,0x2c,0x0e,0x13,0x48,0xa1,0x20,0x0f,0xaf,0xc3,0x3c,0x1e,0x06,0x07,0x16,0x2f,0xac,0x85,0x87,0x90 -,0x85,0x9c,0x86,0x85,0xab,0x89,0x96,0x88,0x85,0x8c,0x9b,0x8c,0x91,0x21,0x9e,0x14,0x0c,0x17,0x07,0xad,0x88,0x8f,0x7e,0xd3,0xb0,0x15,0x1a,0x0a,0x25,0x0e,0x0c,0xc9 -,0x1a,0x08,0x0c,0x0c,0x0a,0x0a,0x00,0x03,0x02,0x0d,0xac,0x8b,0x9d,0x8f,0x27,0x8f,0x8a,0xa7,0x91,0x9e,0x84,0x83,0x89,0x8f,0x8a,0x8d,0x8f,0x3b,0x1b,0x11,0xa5,0x24 -,0x65,0x83,0x87,0x8c,0x2f,0x28,0xb3,0xae,0x1f,0x2b,0x9b,0x9d,0x2e,0x28,0x62,0xa7,0x08,0x20,0x0f,0x02,0x06,0x01,0x0a,0xee,0x8d,0xae,0x37,0x10,0x0f,0x1e,0x0c,0x19 -,0xbb,0x4b,0x8c,0xa2,0x2a,0x19,0xbf,0xb1,0x18,0x13,0x0d,0x47,0x1b,0x93,0x80,0x87,0x8e,0xa3,0x99,0x8e,0x90,0xae,0x89,0x86,0x80,0x86,0xba,0x90,0x8e,0x21,0x1a,0x1e -,0x0a,0x0c,0x06,0x1f,0x8c,0x3b,0x3b,0x1a,0x00,0x16,0x16,0x06,0x0d,0xb1,0xc8,0xa0,0x13,0x06,0x35,0x1a,0x0b,0x07,0x08,0x07,0x05,0x2f,0x80,0x8a,0x9b,0x95,0x23,0x96 -,0x9c,0x15,0x97,0x80,0x82,0x80,0x9b,0x26,0x8c,0x94,0xad,0xa5,0x21,0x0b,0x0a,0x0f,0x85,0x86,0x55,0x21,0x0a,0x2f,0xba,0x01,0x1e,0x86,0x8b,0x98,0x1a,0x24,0x2f,0x1a -,0x16,0x0d,0x0d,0x0a,0x09,0x06,0x92,0x8d,0x07,0x1e,0x08,0x1c,0xaa,0x08,0x0b,0x8a,0x8a,0x93,0xd4,0x0d,0x9c,0x95,0xbf,0x36,0x38,0x18,0x2f,0x2e,0x85,0x80,0x9a,0x8e -,0x1f,0x9a,0x96,0x0d,0x8f,0x80,0x83,0x80,0xf5,0x0e,0x9b,0x97,0x2e,0x25,0x0f,0x07,0x15,0x00,0x9a,0x8b,0x0b,0x10,0x03,0x1e,0x0d,0x08,0x0d,0x98,0x9b,0x90,0x0e,0x04 -,0xa5,0x36,0x39,0x1d,0x08,0x18,0x1d,0x00,0x87,0x8e,0x9c,0x46,0x07,0x97,0x94,0x3d,0x9a,0x80,0x84,0x84,0xa9,0xae,0x8c,0x85,0x9a,0x9b,0x9e,0x14,0x11,0x0c,0x9c,0x81 -,0x9d,0x20,0x07,0x05,0x9f,0x0f,0x17,0x8e,0x9a,0x86,0x21,0x08,0x44,0x18,0x0c,0x1b,0x1a,0x11,0x1d,0x00,0xb2,0x81,0x19,0x0d,0x09,0x38,0x26,0x0c,0x29,0x8d,0x85,0x83 -,0x0e,0x1c,0xa0,0x9c,0x91,0xa1,0xa3,0xca,0x3a,0x0b,0x8f,0x80,0x9d,0x1a,0x4d,0x9f,0x97,0x11,0x13,0x8d,0x80,0x8b,0x1a,0x15,0x15,0xa0,0x96,0x43,0x28,0x0b,0x09,0x0b -,0x1d,0x86,0x9f,0x0f,0x09,0x0b,0xc8,0x0b,0x05,0x97,0x80,0x88,0xcb,0x00,0x19,0x9d,0xaa,0x16,0x1a,0xa6,0x10,0x06,0x0b,0x88,0x88,0xde,0x08,0x25,0xab,0x27,0x17,0xac -,0x80,0x82,0x8f,0x29,0xbc,0x8c,0x96,0x94,0x94,0xab,0x41,0x17,0x2a,0x8f,0x82,0x23,0x1b,0x0c,0x15,0x9a,0x03,0x0c,0x96,0x8e,0x9c,0x08,0x01,0x1a,0x5b,0x1c,0x09,0x10 -,0xf6,0x07,0x02,0xb7,0x86,0x8c,0x18,0x0f,0x17,0x9c,0x18,0x23,0x84,0x83,0x82,0xc4,0x10,0x90,0x88,0x98,0xf2,0x27,0x9b,0x27,0x09,0x4c,0x80,0x92,0x46,0x0e,0x11,0xc8 -,0x0f,0x0b,0x1b,0x88,0x84,0xa3,0x04,0x0c,0xa7,0x9b,0x1f,0x1f,0xbc,0x0c,0x19,0x0d,0xb7,0x80,0x9f,0x22,0x0b,0x69,0x99,0x10,0x16,0x8d,0x82,0x91,0x13,0x05,0xaf,0xbc -,0x40,0x15,0xbc,0x2b,0x00,0x05,0x0f,0x80,0x9e,0x16,0x10,0x08,0x8e,0x22,0x0d,0x98,0x82,0x84,0x8f,0x0e,0x28,0x86,0x8f,0xc7,0x25,0x8c,0x9d,0x1b,0x0a,0x92,0x80,0x92 -,0x2c,0x08,0x18,0x26,0x0e,0x11,0x97,0x8a,0xbd,0x0d,0x03,0x40,0x30,0x1e,0x1c,0x29,0x31,0x02,0x09,0x0b,0x87,0x87,0xd6,0x26,0x34,0xc6,0x42,0x0f,0x98,0x84,0x80,0x93 -,0x04,0x2e,0xa4,0x9b,0x28,0xac,0xad,0x3d,0x10,0x06,0xae,0x80,0x8c,0x22,0x10,0x1c,0x50,0x1a,0x10,0x8e,0x87,0x8e,0x1f,0x0c,0x3b,0xdc,0xad,0x2d,0x1f,0x2f,0x17,0x05 -,0x0c,0xa0,0x80,0xe9,0x10,0x09,0x3b,0xd1,0x0e,0xb4,0x8f,0x85,0x8b,0x1a,0x0e,0xaa,0xc5,0xb5,0x44,0xa3,0xb4,0x0d,0x04,0x0d,0x8d,0x87,0xb6,0x1c,0x11,0x1f,0x9f,0x12 -,0x4c,0x8a,0x8b,0x87,0x2a,0x11,0xdc,0x9c,0xa4,0x3f,0xa4,0xb3,0x0e,0x0b,0x11,0x86,0x87,0xc0,0x14,0x0b,0xc1,0xaa,0x1b,0x47,0x94,0x8a,0x96,0x0f,0x14,0x3c,0xb2,0xd1 -,0x2b,0x27,0x47,0x15,0x09,0x08,0x8b,0x86,0xc9,0x1c,0x0b,0xe5,0x34,0x10,0x3a,0x90,0x85,0x90,0x20,0x0b,0x29,0x9a,0xa9,0x92,0x9d,0xce,0x16,0x18,0x1b,0x91,0x82,0x9e -,0xfc,0x18,0x39,0x5c,0x25,0x23,0x92,0x87,0x8c,0xaf,0x0a,0x20,0xbc,0x1d,0xc9,0xc6,0xaf,0x10,0x08,0x09,0xab,0x80,0x9f,0x36,0x0b,0x1a,0xbf,0x1e,0x14,0x97,0x85,0x8e -,0x23,0x06,0x1d,0x9e,0xc4,0xc6,0x25,0x43,0x26,0x04,0x08,0x3f,0x80,0x90,0x1c,0x0c,0x2d,0x9e,0x38,0x1a,0x96,0x88,0x8e,0x46,0x13,0x25,0xb8,0xb0,0x41,0xd3,0xc7,0x15 -,0x0a,0x12,0x2b,0x80,0x8f,0x40,0x1b,0x1f,0x50,0x22,0x1f,0xa5,0x88,0x8b,0xad,0x10,0x17,0x2f,0xae,0xb9,0xbb,0xcf,0x1c,0x09,0x08,0x12,0x8b,0x83,0x9f,0x24,0x14,0x1b -,0x27,0x1b,0xc3,0x88,0x85,0x8f,0x0f,0x0a,0x1e,0xa7,0x9c,0xe5,0x4d,0xc7,0x13,0x0a,0x0e,0xa3,0x80,0x93,0x1f,0x0e,0x1a,0xaf,0x26,0x17,0x8a,0x88,0x8f,0x39,0x07,0x1e -,0x3e,0xaf,0xaa,0xab,0xa3,0x20,0x0a,0x06,0x4a,0x81,0x88,0xa8,0x16,0x0e,0x1e,0x21,0x1a,0x95,0x85,0x86,0xa8,0x08,0x0d,0x2d,0xad,0x97,0x9e,0xbe,0x21,0x06,0x0c,0x1d -,0x8c,0x80,0xa2,0x19,0x0b,0x11,0x4e,0x37,0xa1,0x8b,0x91,0xb1,0x1c,0x12,0x19,0xa9,0xb0,0x9d,0xa8,0x35,0x0d,0x09,0x17,0xb6,0x80,0x89,0x4f,0x0a,0x08,0x3a,0x2c,0x3a -,0x8c,0x8e,0x91,0x22,0x09,0x29,0xae,0xaf,0xae,0x29,0xc3,0x21,0x07,0x14,0x31,0x85,0x82,0xb9,0x0a,0x09,0x1b,0xba,0x36,0xa5,0x87,0x8c,0x4c,0x09,0x19,0xd4,0xa7,0xad -,0xbe,0xa9,0xbb,0x0d,0x0e,0x20,0x8f,0x80,0xb5,0x20,0x18,0x1f,0x46,0x0e,0xbf,0x84,0x8b,0xed,0x0d,0x10,0x35,0xc4,0xab,0xac,0xb1,0xa7,0x12,0x07,0x0d,0xa6,0x80,0x8d -,0x70,0x15,0x09,0x22,0x21,0x35,0x8c,0x8c,0x8f,0x18,0x08,0x28,0x70,0xad,0x9b,0xaa,0xb9,0x10,0x0a,0x1d,0x68,0x81,0x8a,0x27,0x0f,0x0a,0x28,0xdb,0x26,0x93,0x89,0x8d -,0x2e,0x00,0x1f,0xaa,0x9e,0x98,0xaf,0xbf,0x13,0x04,0x23,0xaf,0x88,0x84,0x1e,0x17,0x0f,0x1c,0x3f,0x16,0x9a,0x89,0x8a,0xc6,0x06,0x15,0x65,0xa8,0x99,0xd8,0xb5,0x2d -,0x07,0x13,0x18,0x8e,0x80,0xee,0x16,0x0a,0x17,0xb4,0x1f,0xa0,0x8c,0x8a,0xaf,0x0c,0x19,0xb4,0xa1,0x9c,0xf3,0xbb,0x4f,0x06,0x17,0x19,0x96,0x80,0xb9,0x1d,0x0f,0x0f -,0x3d,0x1e,0xbf,0x8a,0x8d,0xb3,0x0e,0x18,0xbd,0xad,0xa8,0xaf,0xad,0x28,0x0b,0x0d,0x0f,0x9a,0x80,0x9d,0x40,0x15,0x0c,0x3d,0x0c,0x49,0x88,0x8a,0x91,0x19,0x12,0x24 -,0x3d,0xa6,0xa0,0xa8,0xb7,0x0b,0x0c,0x0f,0xa5,0x80,0x9e,0x2b,0x0c,0x0f,0x61,0x14,0xaa,0x8b,0x8c,0x95,0x13,0x14,0x26,0xbd,0xa3,0xb4,0xa6,0xb7,0x0e,0x0d,0x0f,0x9d -,0x80,0xad,0xbc,0x10,0x0b,0x27,0x0d,0xa1,0x82,0x88,0xae,0x0e,0x12,0x30,0xcc,0xb0,0xa6,0x9d,0x42,0x08,0x0c,0x13,0x90,0x82,0xad,0x35,0x0d,0x1d,0x1d,0x09,0xa0,0x83 -,0x86,0xbb,0x16,0x24,0x18,0x2e,0x9d,0x9a,0x9a,0x19,0x08,0x18,0x38,0x82,0x8e,0x41,0x4d,0x0d,0x2b,0x1b,0x19,0x91,0x89,0x96,0x38,0x1a,0x2d,0xcd,0x39,0xac,0xce,0xcd -,0x13,0x0b,0x15,0xd5,0x80,0x9a,0x32,0x18,0x11,0x35,0x11,0x21,0x8a,0x85,0xa1,0x15,0x14,0x57,0xd0,0x5f,0x41,0x9c,0xa1,0x0d,0x0b,0x11,0x92,0x80,0xcf,0x2f,0x1b,0x2b -,0x55,0x0d,0xbf,0x86,0x8b,0xb2,0x10,0x23,0xa8,0x6a,0x2a,0x37,0xa8,0x45,0x0c,0x0b,0x25,0x82,0x8b,0x1c,0x19,0x11,0x4f,0x23,0x2e,0x8a,0x8b,0x9c,0x1b,0x0d,0xbd,0xa1 -,0x42,0x2b,0xf3,0xa7,0x11,0x09,0x13,0x9c,0x80,0xd7,0x15,0x0e,0x17,0xb7,0x22,0xaf,0x85,0x87,0xbc,0x08,0x0d,0xa6,0x9c,0x9c,0xd4,0xbd,0x26,0x0b,0x0b,0x1a,0x83,0x86 -,0x30,0x10,0x07,0x41,0xb9,0x20,0x8e,0x88,0x95,0x27,0x03,0x31,0x96,0xac,0x4e,0xb9,0xb7,0x0e,0x03,0x0c,0x94,0x80,0xa3,0x17,0x0b,0x0c,0x38,0x1a,0x9c,0x80,0x8f,0xaa -,0x0d,0x0c,0x32,0xcb,0x90,0x9d,0xa2,0x22,0x07,0x0d,0x19,0x82,0x8c,0x23,0x27,0x0f,0xf0,0x27,0x19,0x8c,0x83,0x92,0x13,0x07,0xc2,0xa9,0x3f,0xae,0x9b,0xa8,0x08,0x07 -,0x11,0x95,0x80,0x49,0x1a,0x17,0x20,0x2f,0x13,0x9e,0x80,0x91,0x2f,0x06,0x19,0x9c,0xc6,0xa0,0xa5,0xa6,0x18,0x09,0x0f,0xcd,0x80,0x9b,0x1a,0x13,0x17,0xb1,0x17,0x28 -,0x84,0x86,0x97,0x0f,0x07,0xbf,0xcc,0xb9,0xc2,0xa3,0xb2,0x0c,0x0a,0x1d,0x85,0x87,0x1f,0x14,0x14,0x33,0x25,0x1a,0x8c,0x88,0x9b,0x39,0x0b,0xa5,0xac,0x1c,0x68,0xbd -,0xa0,0x14,0x0c,0x18,0x90,0x83,0x3e,0x24,0x11,0x1d,0xd0,0x18,0x99,0x81,0x96,0x3a,0x07,0x1d,0x9b,0xc2,0xa6,0x69,0xb4,0x0e,0x09,0x22,0xaa,0x80,0xa5,0x0f,0x0e,0x12 -,0xb5,0x22,0x4a,0x80,0x8c,0x28,0x0f,0x0e,0x9b,0xb2,0xc1,0xb1,0x47,0x34,0x07,0x0b,0xd1,0x81,0x88,0x16,0x07,0x0c,0x2b,0x2d,0xce,0x85,0x83,0xa1,0x0f,0x04,0x4b,0x9e -,0x9f,0xa3,0xc6,0x33,0x06,0x08,0x20,0x88,0x81,0x2d,0x0d,0x08,0x1a,0xd6,0x1d,0x8e,0x81,0x92,0x28,0x05,0x1f,0xa9,0xbb,0x9a,0xa2,0xca,0x0c,0x02,0x14,0x91,0x80,0xa6 -,0x1d,0x11,0x0d,0x1b,0x0f,0x95,0x80,0x86,0xb7,0x03,0x14,0xda,0xa4,0x99,0xab,0x9f,0x0e,0x06,0x13,0xa9,0x80,0xa8,0x18,0x13,0x16,0x2c,0x0c,0xd8,0x81,0x8b,0xa0,0x0c -,0x15,0xad,0x1c,0xb5,0x9a,0x93,0x26,0x01,0x0a,0xb7,0x80,0x94,0x15,0x1e,0x23,0x30,0x0b,0x3a,0x82,0x8a,0xb1,0x0e,0x1c,0x9f,0x4f,0xd4,0xda,0xa3,0x2f,0x08,0x0c,0x2b -,0x80,0x98,0x18,0x1c,0x1f,0xb4,0x10,0x19,0x88,0x89,0x93,0x19,0x0d,0xaa,0x58,0xa7,0x38,0xdf,0x26,0x07,0x1c,0xb7,0x80,0x95,0x0c,0x11,0x15,0xb8,0x1c,0x37,0x85,0x8b -,0xb7,0x0f,0x10,0x98,0xaf,0x58,0xa1,0x4b,0x1b,0x09,0x17,0xd7,0x81,0x8c,0x1a,0x1d,0x0e,0x22,0x28,0x56,0x85,0x8a,0xbb,0x12,0x10,0xab,0xbc,0xa7,0xa6,0xdb,0x29,0x03 -,0x0d,0x5c,0x85,0x85,0x1d,0x11,0x0e,0x21,0x2c,0x39,0x8a,0x85,0xae,0x11,0x0b,0xb5,0x97,0xc7,0x9f,0xe5,0x1f,0x06,0x0d,0x44,0x89,0x81,0x29,0x10,0x09,0x15,0x46,0x2f -,0x8d,0x83,0x97,0x23,0x0b,0x1e,0xa8,0x9c,0x9d,0xc1,0x44,0x0d,0x06,0x12,0x9a,0x80,0xb5,0x11,0x13,0x13,0x23,0x0f,0x9b,0x82,0x8b,0x5b,0x0a,0x2a,0x9c,0xbe,0xb8,0xcb -,0xbb,0x1b,0x06,0x1e,0xa8,0x80,0x9b,0x17,0x1c,0x0e,0x36,0x10,0x2b,0x84,0x8b,0xa0,0x1d,0x14,0xd9,0x2d,0xa6,0x96,0xac,0x22,0x06,0x11,0x2a,0x8b,0x84,0x2b,0x1d,0x17 -,0x1f,0x1c,0x11,0x98,0x80,0x8e,0x1f,0x0e,0x20,0xd6,0xcc,0x9a,0xb2,0xb3,0x13,0x08,0x1c,0xaf,0x80,0x9e,0x1f,0x20,0x14,0x2c,0x11,0x39,0x86,0x88,0x9e,0x13,0x18,0x7a -,0x37,0xa9,0xb1,0xce,0xe0,0x0a,0x13,0x24,0x8f,0x84,0x16,0x26,0x27,0x1f,0x1e,0x0a,0x95,0x86,0x8d,0xb8,0x10,0xdb,0xe1,0x1f,0xca,0x9e,0xae,0x29,0x0a,0x19,0x35,0x86 -,0x89,0x1c,0x27,0x13,0x22,0x13,0x1f,0x89,0x8b,0xa1,0x40,0x21,0xc2,0x21,0x2e,0xa8,0xa8,0xc0,0x0e,0x0f,0x2f,0x46,0x87,0x96,0x1e,0xb9,0x12,0x1e,0x1e,0x29,0x8b,0x96 -,0x95,0x40,0x5d,0xb2,0x12,0x2b,0x3b,0x92,0xb1,0x14,0x1c,0x1c,0x17,0x8c,0x8d,0x38,0xf6,0x0e,0x2b,0x17,0x24,0x89,0x8b,0x99,0x54,0x34,0x3c,0x19,0x29,0xa2,0x9b,0x41 -,0x1e,0x23,0x17,0x18,0x89,0x8e,0x25,0x39,0x12,0x4f,0x1b,0x1e,0x8b,0x96,0x8f,0x4b,0x38,0xc7,0x0f,0x47,0xa6,0xaf,0x28,0x2b,0x22,0x1f,0x15,0x8d,0x8f,0x19,0xfe,0x18 -,0xbd,0x1b,0x11,0x92,0x8b,0x8c,0xca,0x25,0x56,0x16,0xf2,0xb3,0x9f,0x9f,0x23,0x16,0x17,0x14,0x8e,0x8a,0x38,0xd4,0x14,0x33,0x1c,0x15,0x95,0x8e,0x94,0xdb,0x30,0xec -,0x1b,0x4f,0x51,0xa5,0xab,0x2d,0x25,0x11,0x0a,0xa1,0x82,0x2a,0x39,0x2f,0xdc,0x35,0x08,0xb9,0x8f,0x8f,0x98,0x36,0x71,0x1d,0x18,0xcb,0x9e,0xa9,0x9f,0x1c,0x0b,0x0b -,0x35,0x81,0xb2,0xc7,0xbc,0xd8,0x28,0x08,0x2e,0x8e,0x8e,0x99,0xc3,0xaf,0x29,0x16,0x5d,0xb2,0x9e,0x35,0x1d,0x17,0x1c,0x1d,0x8a,0x9f,0x26,0xa3,0x38,0xdd,0x07,0x24 -,0x8f,0x9f,0x9d,0x9f,0xa3,0x6d,0x0d,0x1f,0x9c,0x9e,0x5e,0x24,0x1b,0x0c,0x0c,0x96,0x81,0xc2,0xbe,0x2d,0x1f,0x12,0x0f,0x95,0x93,0x94,0x9b,0xc5,0xb5,0x11,0x1d,0xa3 -,0xa2,0xae,0x29,0x1f,0x12,0x0a,0xbc,0x80,0x9e,0xd1,0x31,0x28,0x27,0x09,0x3a,0x8f,0x8f,0x9b,0x46,0xd9,0x2d,0x19,0x37,0xc4,0xab,0x4c,0x2b,0x10,0x0f,0x25,0x85,0x8d -,0x6a,0xb5,0x21,0x1e,0x05,0x26,0x8c,0x8c,0x95,0xbb,0xda,0x1f,0x0f,0xe8,0xa6,0xa0,0x4c,0x21,0x19,0x0f,0x19,0x8f,0x82,0xae,0x4d,0x1e,0x19,0x13,0x17,0x8e,0x8c,0xa4 -,0x9d,0x45,0x49,0x11,0x24,0xae,0xb4,0x36,0x22,0x24,0x15,0x1a,0xad,0x80,0xb3,0x32,0x20,0x26,0x2f,0x0f,0x9d,0x94,0x9a,0x94,0x4d,0x2f,0x1e,0x23,0xbb,0xc5,0x40,0x49 -,0x41,0x15,0x0e,0x43,0x80,0x9e,0x14,0xdf,0xda,0x24,0x09,0xba,0x89,0x9e,0x9f,0xcf,0x36,0x1f,0x1f,0xaf,0xaf,0xc3,0x3a,0x1a,0x0d,0x16,0x3c,0x83,0x9a,0x17,0x25,0x1a -,0x1b,0x0e,0xa3,0x81,0xb9,0x0e,0x4a,0x8f,0x9b,0x1f,0x9c,0x89,0x9e,0x0f,0x03,0x15,0x9b,0x8b,0x83,0x4c,0x3e,0x88,0xc4,0x0c,0x00,0x1d,0x84,0x86,0x8d,0xa0,0xcb,0x0b -,0x02,0xa6,0x91,0x1a,0x08,0x03,0x18,0x91,0x87,0x81,0xaf,0x0a,0x18,0x29,0x39,0x14,0xc6,0x8c,0xa2,0x98,0xd1,0xd0,0x10,0x0a,0x67,0xab,0xad,0x2a,0x16,0x0f,0x1d,0x9b -,0x80,0x2f,0x14,0xaf,0x26,0x42,0x09,0xba,0x84,0x85,0x88,0x9c,0xbb,0x0d,0x4a,0x8b,0x8f,0x29,0x08,0x05,0x10,0x13,0x8d,0x89,0x07,0x15,0x1b,0x13,0x07,0x08,0x8a,0x8a -,0xcb,0x9a,0x90,0x97,0x3a,0x3f,0xa6,0x9f,0x9a,0x21,0x09,0x10,0x26,0x81,0x94,0x0b,0xb7,0xa9,0x22,0x00,0x11,0x85,0x93,0x8d,0x9d,0x1c,0x27,0x12,0xb1,0x9f,0xba,0x0e -,0x01,0x00,0x10,0x8a,0x80,0x34,0x12,0x8f,0x8d,0x97,0x0b,0xbf,0x8c,0x96,0x82,0x85,0x8a,0x13,0x04,0x0e,0x0b,0x29,0x2a,0x07,0x04,0x00,0xa7,0x80,0x44,0x31,0x0c,0x05 -,0x09,0x1e,0x82,0x89,0x8c,0x88,0x97,0xa7,0x0c,0x2e,0x93,0xab,0xa9,0x32,0x19,0x0d,0x1d,0x80,0xdd,0x0b,0x99,0x6b,0x2e,0x0a,0x4d,0x90,0xca,0xa6,0x99,0x8e,0x62,0x0c -,0x3c,0xad,0xa7,0x89,0x40,0x09,0x00,0x3b,0x80,0xad,0x8f,0xbe,0x0a,0x0b,0x08,0xa9,0xbd,0xbf,0x89,0x86,0x9e,0x1a,0x34,0x99,0x26,0xb3,0xa2,0x14,0x09,0x04,0x85,0x8d -,0x1f,0xa8,0x11,0x0f,0x00,0x26,0x8b,0x27,0xad,0x8a,0x86,0xa6,0x1b,0x31,0x20,0x14,0x9f,0x9e,0x1e,0x06,0x70,0x85,0x1c,0x91,0x88,0x3e,0x0e,0x0f,0x87,0x89,0x8f,0x86 -,0x83,0x86,0xbf,0xbb,0x90,0x18,0x13,0x29,0x10,0x04,0x04,0x9c,0x11,0x00,0x1f,0x0a,0x06,0x00,0x07,0x15,0x00,0x1d,0x8b,0xc7,0x0d,0x04,0x0b,0x0a,0x0c,0xb1,0xc8,0x38 -,0x0e,0x92,0x88,0x1c,0x85,0x8a,0xa8,0x26,0x40,0x81,0x88,0x9b,0x87,0x89,0xa4,0x90,0x86,0x8e,0x29,0x48,0x9d,0x9e,0xb6,0x95,0x80,0x11,0x2b,0x80,0x88,0x8c,0x45,0x8d -,0x8c,0x31,0x92,0x86,0x8e,0x90,0x92,0x96,0x17,0x12,0x26,0x0b,0x08,0x0d,0x8a,0x4f,0x00,0x26,0x16,0x0c,0x06,0x06,0x1f,0x02,0x1b,0x92,0x5b,0x29,0x29,0x92,0xae,0x0a -,0x0d,0x0d,0x0e,0x16,0x8d,0x83,0x05,0x0b,0x20,0x06,0x07,0x08,0x90,0xa2,0x19,0x93,0x9c,0x4b,0x47,0x8b,0x93,0x1a,0x1c,0x3d,0xfe,0x40,0xa4,0x80,0xa5,0x06,0x9d,0xbf -,0x23,0x29,0x98,0x80,0x9d,0x9c,0x8b,0xa0,0x1a,0xc1,0x86,0x8c,0xa9,0xa4,0x28,0x0d,0x06,0x9d,0x80,0x0e,0x1d,0x28,0x06,0x0d,0x13,0x8d,0xd4,0x07,0x31,0x4f,0x14,0x16 -,0x2c,0xd9,0x1a,0x19,0x44,0x1b,0x0f,0x1f,0x80,0x8f,0xaf,0x81,0x90,0x33,0x1e,0x93,0x80,0x84,0x83,0x80,0x8e,0xce,0xa8,0x8c,0x87,0x94,0x8b,0xb4,0x0b,0x05,0xa5,0x84 -,0x07,0x0d,0x18,0x00,0x02,0x00,0x12,0x1a,0x00,0x0e,0x19,0x00,0x01,0x05,0x14,0x14,0x0d,0x15,0x07,0x03,0x01,0x90,0x93,0x0d,0x8c,0xa0,0x09,0x01,0x0b,0x8f,0x9a,0xa3 -,0x80,0x8c,0x2f,0xf6,0x96,0x8d,0x9b,0x8b,0x87,0xb4,0x25,0xab,0x80,0x94,0x9a,0x80,0x4b,0x09,0x0f,0x9a,0x81,0x89,0x83,0x80,0x89,0xc9,0xce,0x9a,0x99,0x93,0x81,0x8b -,0x3e,0x0d,0x1a,0x8f,0x0e,0x3a,0x97,0x0c,0x04,0x01,0x1e,0xaf,0x24,0xa8,0xc3,0x0e,0x06,0x0d,0xdc,0x3b,0x39,0x9b,0x22,0x07,0x02,0x38,0x86,0x0f,0xb6,0x90,0x0d,0x03 -,0x08,0x4e,0x2e,0x15,0x9e,0x93,0x2c,0x0b,0x19,0x2d,0x13,0x22,0xa5,0x5b,0x0f,0x06,0x9c,0x81,0x57,0x93,0x89,0x18,0x09,0x2a,0x92,0x94,0xaf,0x89,0x8b,0x3d,0x1c,0xa3 -,0xa5,0x28,0xb5,0x86,0x97,0x2d,0x2a,0x94,0x83,0x18,0xa3,0x8c,0x1d,0x09,0x16,0x3e,0x25,0x14,0xdb,0x96,0x24,0x1e,0x38,0x23,0x23,0x3b,0x91,0xcf,0x12,0x25,0x9b,0x80 -,0xb2,0x9b,0x80,0x96,0x45,0xab,0x8c,0x89,0x98,0x86,0x80,0x87,0x8b,0x8c,0x91,0xa8,0xa1,0x8b,0x8f,0x2b,0x0e,0x0e,0x91,0x0d,0x05,0x1d,0x0a,0x02,0x00,0x06,0x05,0x01 -,0x0b,0x23,0x0a,0x04,0x09,0x08,0x03,0x0f,0x27,0x16,0x03,0x02,0x05,0x99,0x6b,0x19,0x8d,0x9e,0x37,0x16,0xc5,0xbb,0x48,0x9d,0x86,0x84,0x91,0x98,0x92,0xb1,0xb0,0x96 -,0x8d,0x9f,0x28,0x28,0x8c,0x85,0xa5,0x84,0x89,0x39,0x33,0x9e,0x8f,0x91,0x90,0x81,0x84,0x99,0x9e,0x8e,0xa9,0xa3,0x8e,0x8b,0xa3,0x19,0x10,0x22,0x9b,0x14,0x38,0xa7 -,0x17,0x0d,0x0a,0x0d,0x0a,0x07,0x26,0x30,0x1a,0x10,0x2e,0x5f,0x2e,0x9b,0xc6,0x24,0x05,0x05,0x0b,0x97,0xa6,0x42,0xa6,0x10,0x0b,0x03,0x12,0x11,0x0c,0x6d,0xa6,0xbf -,0x3b,0xcd,0x9e,0x3f,0xb9,0xc8,0xed,0x13,0x15,0x1d,0x9f,0x8a,0x3a,0x94,0x97,0xbf,0x3c,0x5f,0x9d,0x98,0x8f,0x89,0x95,0x9e,0x9e,0x8e,0x91,0x98,0x8b,0xa3,0x31,0x16 -,0x0d,0x21,0x8f,0x4a,0xab,0xa8,0x21,0x22,0x0d,0x2b,0x1d,0x1b,0xbb,0x58,0x2e,0x4d,0xbe,0x5d,0x4c,0xa6,0x5d,0x20,0x1a,0x2f,0xa3,0x87,0x86,0x8c,0x88,0x8a,0x8a,0x93 -,0x8b,0x8b,0x93,0x8d,0x88,0x8c,0x93,0x8f,0x94,0x9e,0xab,0xb4,0x40,0x0d,0x0a,0x07,0x0a,0x1c,0x09,0x0d,0x0d,0x04,0x02,0x01,0x03,0x03,0x04,0x09,0x06,0x08,0x0b,0x17 -,0x26,0x1d,0x2a,0x19,0x08,0x0a,0x0a,0x3f,0x8e,0xab,0x94,0x97,0xc6,0x3e,0x3c,0x92,0x98,0x9a,0x8a,0x8f,0x8f,0x8a,0x85,0x88,0x8e,0x8d,0x90,0xac,0xbf,0x4b,0xab,0x8f -,0xae,0x97,0x96,0x9f,0x9b,0x99,0x8a,0x91,0x92,0x89,0x8f,0x97,0x95,0x88,0x8c,0x93,0x90,0xa9,0x1d,0x09,0x08,0x0e,0x34,0x1b,0x19,0x1b,0x1a,0x1d,0x0c,0x1d,0x28,0x13 -,0x17,0x17,0x17,0x35,0xd0,0xb7,0x3c,0x1d,0x19,0x0a,0x0c,0x0d,0x0b,0x27,0x21,0x16,0x1c,0x15,0x23,0x16,0x1f,0x2c,0x15,0x18,0x1e,0x31,0x2d,0xbb,0xb5,0x45,0x6e,0x48 -,0x2d,0x28,0x2d,0x1d,0xa5,0xa5,0xb2,0x91,0x99,0x8d,0x9f,0x9f,0x92,0xad,0x9f,0x91,0x97,0x9b,0x8d,0x8b,0x92,0x95,0x99,0xb1,0x46,0x1e,0x1c,0xaf,0xce,0x22,0x26,0x2c -,0x3c,0x24,0x35,0xcf,0x28,0x25,0xd1,0xa5,0xb2,0x9d,0x8e,0x99,0x9e,0xa9,0x9d,0x9e,0xaf,0xaf,0x9d,0x94,0x9e,0x99,0x8f,0x8a,0x8c,0x8d,0x8c,0x8f,0x92,0x8d,0x8d,0x92 -,0x93,0x95,0xa3,0x39,0x1f,0x1b,0x0b,0x06,0x04,0x02,0x04,0x03,0x02,0x04,0x04,0x05,0x06,0x06,0x07,0x0c,0x0d,0x09,0x0f,0x19,0x19,0x1a,0x16,0x1a,0x22,0x1e,0x18,0x1a -,0x29,0x2e,0xb8,0xae,0xab,0x97,0x93,0x8e,0x9a,0x99,0x8e,0x8d,0x91,0x8f,0x88,0x8b,0x92,0x92,0x93,0x9a,0x9c,0x9b,0x9f,0x9e,0xb6,0xbf,0xc4,0xaa,0x8e,0x8f,0x94,0x9e -,0xa1,0x94,0x94,0x97,0x8e,0x8d,0x91,0x9b,0x93,0x98,0x6f,0xc1,0x3b,0x1e,0x1e,0x1a,0x14,0x0b,0x0a,0x12,0x16,0x12,0x0f,0x16,0x10,0x14,0x27,0x37,0x4d,0x3b,0x3f,0x6f -,0x2f,0x2e,0x4a,0x23,0x1e,0x19,0x1a,0x10,0x08,0x0f,0x0f,0x15,0x14,0x18,0x1b,0x11,0x1b,0xd3,0xb9,0x48,0x2e,0x6e,0xb6,0x44,0xdf,0xae,0xa7,0x3a,0x40,0xd3,0x41,0x41 -,0xa4,0x9b,0x96,0x93,0x96,0x99,0x9d,0x90,0x91,0x8a,0x8e,0x90,0x91,0xa4,0xb4,0xae,0xa8,0x50,0x28,0x41,0x38,0x16,0x11,0x28,0x69,0x55,0x3b,0x6a,0x31,0x21,0xd3,0xa2 -,0x99,0x9b,0xa0,0x9c,0xa9,0xa9,0x93,0x8d,0x8f,0x96,0x94,0x96,0x9a,0x8f,0x8a,0x8b,0x8b,0x8e,0x9d,0xa4,0x9c,0x99,0x97,0x9e,0xa1,0xac,0x25,0x1a,0x1d,0x1b,0x0e,0x0b -,0x0c,0x0b,0x04,0x03,0x05,0x06,0x05,0x04,0x06,0x04,0x05,0x07,0x0b,0x11,0x1c,0x16,0x14,0x16,0x16,0x22,0x23,0x20,0x37,0xcb,0x3a,0x2c,0x4d,0xbc,0xa2,0xa7,0x9c,0x91 -,0x9d,0x99,0x92,0x8d,0x89,0x89,0x88,0x8f,0x93,0x92,0x93,0x95,0x99,0x9b,0xad,0xc7,0xbc,0xb0,0xb5,0xbd,0xa7,0x9f,0x98,0x99,0x98,0x96,0x8a,0x8b,0x8c,0x8d,0x8f,0x8f -,0x9a,0xad,0xc9,0x53,0x35,0x2a,0x13,0x20,0x14,0x11,0x12,0x1e,0x1d,0x23,0x17,0x1b,0x24,0x09,0x0c,0x0a,0x17,0x0e,0x09,0x19,0x0d,0x1a,0x3d,0x21,0xbe,0xb8,0x27,0x54 -,0x8e,0xac,0xc0,0x8e,0xa4,0x9c,0x92,0x10,0x6b,0x8b,0xab,0xa3,0xa4,0x54,0x3e,0x3d,0x0f,0x0e,0x0b,0x0e,0x0e,0x16,0x1b,0x16,0x35,0x33,0x29,0x2a,0xb3,0x38,0x27,0x34 -,0x57,0xb6,0x9a,0x8b,0x90,0x8e,0x8d,0x8e,0x9e,0xa2,0xac,0x99,0x90,0x95,0x98,0x91,0x87,0x8a,0x8e,0x93,0x91,0xac,0x9f,0x91,0xac,0xbf,0xa8,0xa2,0x4b,0x21,0x1d,0x15 -,0x0c,0x0d,0x0e,0x0b,0x0b,0x06,0x19,0x0f,0x0b,0x11,0x07,0x04,0x0a,0x0f,0x13,0x1b,0x48,0xa1,0x58,0x3d,0xb6,0xaf,0x9d,0x98,0x8d,0x87,0x85,0x87,0x85,0x86,0x87,0x84 -,0x87,0x87,0x8f,0x8d,0x8d,0x8f,0xac,0xa6,0xd9,0x29,0x1e,0x14,0x12,0x0d,0x0e,0x0a,0x0e,0x0a,0x0c,0x0e,0x0c,0x0c,0x12,0x0d,0x0a,0x08,0x0c,0x13,0x14,0x26,0x1e,0xd9 -,0xde,0x53,0xc8,0x20,0x3e,0xbc,0xb9,0x4e,0xde,0x37,0x2d,0xe3,0x48,0xbe,0xab,0xa0,0x9e,0x97,0x93,0x8e,0x89,0x89,0x86,0x8b,0x8c,0x8e,0x8f,0x92,0x9e,0xaa,0x35,0x44 -,0x37,0x27,0x1c,0x0f,0x18,0x11,0x13,0x1f,0x11,0x1f,0x1f,0x3d,0x21,0x1c,0x19,0x13,0x21,0xb4,0xad,0xc6,0x9b,0xa0,0x8e,0x8d,0x91,0x8e,0x8e,0x86,0x89,0x92,0x8e,0x8b -,0x8c,0x91,0x8a,0x94,0xa5,0x9d,0xaa,0x33,0x2f,0x10,0x1e,0x16,0x1d,0x6d,0x16,0x1b,0x1b,0x44,0x0f,0x0f,0x0f,0x13,0x14,0x16,0x19,0x37,0x65,0x1c,0x1a,0x1c,0x15,0x11 -,0x18,0x15,0x1a,0x1f,0x2b,0x12,0x17,0x19,0x13,0x08,0x08,0x13,0x0f,0x0e,0x0a,0x24,0xa8,0x28,0x1a,0x38,0x9e,0x94,0x9e,0xa1,0x99,0x89,0x85,0x88,0x89,0x91,0x89,0x8e -,0x9b,0x96,0xa8,0x9e,0xaa,0x9b,0xc8,0xb1,0x3d,0x3f,0x35,0x1d,0x3e,0x19,0xd3,0x4c,0x9e,0x98,0x90,0x8f,0x98,0x94,0xa0,0x9b,0x98,0xae,0xa0,0xa4,0x9a,0x9a,0x98,0x95 -,0xba,0xb2,0x2a,0xae,0x1e,0x3d,0x2c,0x1e,0xc9,0x21,0x2b,0x17,0x17,0x0c,0x09,0x08,0x16,0x1f,0x1c,0x25,0x34,0x8f,0x86,0x89,0x89,0x8b,0x8b,0x94,0x9c,0x8b,0xa9,0x2f -,0xae,0x0f,0x09,0x05,0x02,0x06,0x00,0x02,0x00,0x07,0x01,0x07,0x1a,0x13,0x0c,0x0c,0x1e,0x16,0x1e,0xdc,0xa6,0x95,0x9b,0x94,0x8b,0x90,0x94,0x8c,0x8a,0xa8,0xb0,0x89 -,0x88,0x8b,0x87,0x88,0x92,0xa0,0x93,0xa4,0xa5,0xa2,0x90,0x93,0xa7,0x8f,0x8e,0x96,0xd4,0x9a,0x2a,0xcd,0x44,0xd0,0xa1,0x2b,0x4b,0x1a,0x4f,0x22,0x16,0x17,0x11,0x09 -,0x10,0x19,0x1e,0x18,0x1b,0x1a,0x0f,0x15,0x08,0x11,0x1a,0x3f,0xc4,0x3b,0xa7,0x9a,0x89,0x8e,0x88,0x84,0x8b,0x82,0x84,0x83,0x84,0x81,0x8c,0x8e,0x9b,0x34,0x3c,0x0c -,0x08,0x0a,0x0b,0x0c,0x06,0x08,0x03,0x05,0x04,0x07,0x0a,0x05,0x06,0x0f,0x0f,0x0c,0x17,0x0a,0x12,0x14,0x15,0x10,0x0c,0x16,0x41,0xa0,0xa9,0x98,0x99,0x8e,0xb7,0x98 -,0x8c,0x9a,0x93,0x98,0x8a,0x8c,0x8b,0x89,0x88,0x86,0x8c,0x8d,0x8e,0x98,0x8e,0x8a,0x84,0x8b,0x91,0x94,0x99,0xd6,0xac,0xc5,0xbb,0x1f,0x16,0x38,0x24,0x20,0x20,0x4a -,0x0e,0x0e,0x06,0x0c,0x09,0x0b,0x19,0x0c,0x19,0x21,0x2b,0x3b,0xca,0x9d,0x8f,0x8f,0x8a,0x86,0x8a,0x89,0x81,0x84,0x88,0x8f,0xa9,0xcd,0x1f,0x11,0x0f,0x19,0x08,0x0e -,0x16,0x0b,0x0b,0x0b,0x0e,0x12,0x13,0x0c,0x1f,0x2a,0x22,0x36,0xb0,0x27,0x2c,0x13,0x0f,0x13,0x10,0x2c,0x29,0x1f,0x35,0x4d,0x2a,0x3e,0x26,0x28,0x17,0x2c,0x33,0x3b -,0x6a,0xbb,0xa5,0x97,0x9b,0xcd,0x90,0x9c,0x99,0x8e,0x92,0x8c,0x87,0x84,0x86,0x8c,0x8b,0x91,0x92,0x8e,0xc5,0x95,0x9f,0x4f,0xdf,0xa9,0xb1,0x13,0x1d,0x1a,0x18,0x0f -,0x0d,0x0e,0x11,0x1d,0x3e,0xb5,0xb8,0xb0,0xbd,0xa1,0x8a,0x8c,0x8b,0x88,0x88,0x85,0x83,0x90,0x97,0xa6,0x3f,0x1b,0x0a,0x0c,0x08,0x0a,0x06,0x07,0x08,0x07,0x02,0x05 -,0x05,0x0b,0x0d,0x0c,0x12,0x2e,0x21,0x1f,0xbe,0x26,0xbc,0xd4,0x6a,0x2d,0x32,0xb4,0xac,0x94,0x97,0x98,0x9c,0x9c,0xa4,0xb1,0xb7,0x3a,0xa9,0x9e,0xb4,0x99,0x91,0xb5 -,0x9a,0xb0,0xad,0xae,0xb7,0x5d,0xb6,0x8d,0xa2,0x9f,0xa1,0xa0,0x55,0x43,0xb9,0x3b,0x4b,0x50,0x3a,0xbf,0x20,0xb1,0xad,0x17,0x28,0x15,0x1c,0x16,0x1a,0x27,0x20,0xba -,0x9f,0x96,0x98,0x9f,0x8e,0x86,0x8e,0x89,0x83,0x84,0x85,0x84,0x86,0x85,0x92,0x9e,0xbd,0x1f,0x19,0x07,0x0e,0x08,0x07,0x0a,0x06,0x05,0x05,0x04,0x05,0x07,0x03,0x0c -,0x09,0x08,0x19,0x27,0x19,0x11,0x1c,0x17,0x1f,0x1c,0x2c,0x2f,0xad,0xaf,0x9f,0x93,0xb5,0x9b,0xa6,0x9c,0xc2,0xb1,0xb0,0x99,0x98,0x8f,0x8c,0x97,0x8d,0x90,0x96,0x9d -,0x9a,0x97,0x89,0x93,0x8d,0x88,0x94,0x93,0x9d,0xa4,0xb4,0x2f,0x34,0x51,0x1d,0x21,0x5b,0x2d,0x1a,0x11,0x0c,0x0c,0x0f,0x10,0x07,0x09,0x16,0x15,0xc6,0xd3,0x35,0xae -,0x99,0x92,0x97,0x8e,0x8b,0x87,0x82,0x82,0x85,0x8a,0x92,0x93,0xbf,0x46,0x44,0x12,0x0f,0x0d,0x0f,0x0f,0x09,0x0f,0x0a,0x07,0x06,0x08,0x09,0x12,0x12,0x13,0x28,0x15 -,0x24,0x2c,0x11,0x17,0x15,0x11,0x24,0x29,0x21,0x42,0xa8,0x64,0x3a,0xa4,0xa5,0x25,0x2e,0x2c,0xad,0x96,0x9e,0x90,0x8f,0x8e,0x9f,0x93,0x91,0x9b,0x95,0x92,0x8f,0x91 -,0x8d,0x89,0x90,0x99,0x97,0xb6,0xd2,0xab,0xc9,0xce,0xb1,0xb1,0xb8,0x1a,0x19,0x19,0x17,0x10,0x0a,0x0e,0x0d,0x0b,0x0f,0x14,0x69,0x9b,0x2d,0xb2,0x94,0x9c,0x90,0x87 -,0x82,0x85,0x86,0x82,0x82,0x89,0x91,0x99,0xf3,0x2d,0x13,0x0e,0x0c,0x08,0x08,0x09,0x08,0x02,0x05,0x05,0x03,0x05,0x06,0x15,0x16,0x14,0x2e,0x1e,0x24,0x31,0xcf,0x61 -,0x44,0x30,0xbe,0x9e,0x9d,0x99,0x8c,0x90,0x94,0x9e,0xa5,0xbf,0x4c,0x90,0x9d,0xa0,0xa5,0x9e,0xad,0xf8,0xaa,0x9e,0xa6,0x2b,0x36,0xa5,0xa1,0x95,0x9b,0x99,0xac,0xc2 -,0xb0,0xd2,0xcb,0x36,0xcd,0xaa,0xd3,0x3f,0xc3,0x78,0x37,0x1c,0x25,0x0f,0x0d,0x11,0x1b,0x13,0x13,0x4b,0xaf,0xa5,0xa9,0x9e,0x94,0x8f,0x8c,0x86,0x82,0x82,0x82,0x82 -,0x86,0x8b,0x93,0x90,0xcb,0x1f,0x10,0x14,0x0e,0x08,0x0a,0x0d,0x07,0x02,0x04,0x05,0x06,0x06,0x0c,0x11,0x17,0x10,0x2c,0x1c,0x17,0x26,0x26,0x1b,0x16,0x2e,0xb6,0xb4 -,0xba,0xa9,0x9a,0xb4,0x5e,0xa4,0xd2,0xa6,0x7b,0xc8,0xa4,0x95,0x93,0xa5,0x99,0x97,0x99,0x9d,0xac,0xa3,0x8f,0x91,0x8f,0x8c,0x89,0x92,0x9b,0x95,0x97,0xa8,0xc1,0xab -,0x9f,0xa8,0xc2,0xbf,0xba,0x4b,0x1d,0x0e,0x0e,0x11,0x0c,0x0f,0x13,0x0e,0x17,0x1e,0x24,0x4c,0xcb,0xb2,0x9d,0x96,0x8c,0x85,0x87,0x85,0x84,0x85,0x89,0x91,0x9a,0x9e -,0xc7,0x1f,0x1b,0x15,0x0e,0x0d,0x0d,0x0a,0x09,0x05,0x04,0x06,0x06,0x08,0x0e,0x18,0x1c,0x2b,0x22,0x1b,0x1c,0x1b,0x2d,0x27,0x2c,0x3e,0x4f,0xc2,0xaf,0x9c,0xac,0xed -,0xce,0xbc,0xda,0x37,0x40,0x9e,0x97,0xa0,0xa2,0x9b,0x96,0xb2,0xab,0x97,0xa2,0x9a,0x91,0x96,0x97,0x96,0x8f,0x92,0x9e,0xab,0xaf,0xb4,0x56,0xb4,0xbd,0xd2,0xb6,0xba -,0xdb,0x30,0x1f,0x1b,0x1d,0x14,0x0e,0x0c,0x12,0x19,0x24,0xea,0x3c,0x2f,0xd4,0x9c,0x9d,0x9e,0x8b,0x84,0x84,0x85,0x83,0x83,0x86,0x8a,0x99,0xaf,0xf9,0x39,0x1a,0x0e -,0x12,0x0e,0x0a,0x04,0x03,0x04,0x05,0x02,0x03,0x0b,0x0f,0x0c,0x10,0x3b,0x2c,0x1b,0x15,0x1d,0x42,0xfa,0x2e,0x26,0xa6,0x98,0x9e,0xa3,0xa7,0xad,0x5d,0x38,0x3f,0x4c -,0xdc,0xaf,0xab,0xa3,0x9b,0x9e,0x9c,0xa0,0xaa,0xcb,0x9d,0x90,0x95,0x92,0x8d,0x88,0x91,0x9f,0xa9,0xae,0xb9,0xb9,0x3a,0x22,0xa6,0xa3,0xb9,0x3c,0x33,0x37,0x23,0x15 -,0x0b,0x1e,0x25,0x21,0x21,0x3b,0xa9,0xb0,0xda,0x4c,0xb2,0x9c,0x91,0x8f,0x8e,0x87,0x83,0x86,0x8a,0x88,0x8d,0x99,0xb0,0x29,0x4c,0x2c,0x1c,0x0d,0x0b,0x08,0x0b,0xca -,0x21,0x00,0x1d,0x98,0x07,0x14,0x0f,0x17,0x0d,0x06,0x0d,0x0c,0x15,0x00,0x05,0x01,0x02,0x0a,0x02,0x08,0x05,0x07,0x0e,0x0b,0x0a,0x0a,0x18,0x1c,0x1c,0x53,0xa9,0xa3 -,0xae,0x97,0x9c,0x9d,0x96,0x83,0x80,0x89,0x83,0x81,0x80,0x80,0x81,0x81,0x85,0x84,0x80,0x81,0x83,0x83,0x80,0x82,0x85,0x8e,0x8e,0x8d,0x8f,0x8d,0x8e,0x94,0x9a,0x92 -,0xa3,0xac,0x9f,0x3f,0x18,0x06,0x08,0x09,0x02,0x03,0x05,0x05,0x01,0x01,0x00,0x01,0x02,0x01,0x01,0x00,0x01,0x02,0x05,0x06,0x09,0x0a,0x04,0x01,0x01,0x03,0x04,0x02 -,0x01,0x05,0x08,0x04,0x04,0x08,0x13,0x29,0x21,0x27,0xac,0x8f,0x8b,0x87,0x84,0x82,0x86,0x8c,0x90,0x8a,0x85,0x85,0x86,0x85,0x82,0x82,0x81,0x84,0x81,0x80,0x80,0x80 -,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x84,0x88,0x88,0x88,0x93,0x8f,0x94,0x8d,0x8f,0x97,0x94,0x95,0x8c,0x8f,0x96,0x97,0x89,0x8b,0xa4,0xa5,0xa6,0x2e,0x16,0x0e -,0x09,0x0a,0x03,0x00,0x02,0x02,0x02,0x01,0x02,0x01,0x03,0x04,0x02,0x03,0x07,0x07,0x05,0x01,0x03,0x03,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x02,0x02 -,0x03,0x05,0x09,0x0c,0x0e,0x12,0x10,0x1c,0x2d,0x24,0x1c,0x0f,0x0b,0x0e,0x0c,0x07,0x0c,0x15,0x1f,0x16,0x20,0xb4,0xa4,0x95,0x8b,0x85,0x85,0x83,0x81,0x83,0x81,0x82 -,0x82,0x83,0x85,0x85,0x85,0x87,0x86,0x83,0x81,0x83,0x85,0x83,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x86,0x8d,0x89,0x8a,0x98,0xba,0xab,0x9d,0x34 -,0x21,0x24,0xe2,0xae,0x2c,0x20,0x1d,0x2c,0x3d,0x2a,0x26,0x18,0x11,0x12,0x12,0x1e,0x44,0x2a,0x1d,0x31,0x96,0xa2,0xa8,0x98,0x95,0x86,0x8d,0x8b,0x8c,0x8a,0x8b,0xac -,0xa1,0x3f,0x4d,0x3f,0x1b,0x95,0x94,0xa1,0x35,0x29,0x8b,0xae,0x21,0x0b,0x0f,0xcc,0x14,0x0e,0x08,0x15,0x0c,0x00,0x01,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x01,0x01 -,0x07,0x00,0x01,0x00,0x04,0x0a,0x01,0x01,0x01,0x0a,0x04,0x00,0x01,0x00,0x01,0x00,0x01,0x1f,0x0b,0x04,0x00,0x10,0x16,0x00,0x04,0x04,0xad,0x45,0x0c,0x0a,0x26,0x94 -,0x1b,0x14,0x3d,0xc2,0x2d,0x11,0x8f,0x80,0x83,0x85,0x8a,0x80,0x81,0x8d,0x87,0x80,0x80,0x80,0x83,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x89,0x89,0x80,0x80,0x80,0x82 -,0x83,0x80,0x86,0xa2,0x86,0x80,0x80,0x8d,0x98,0x85,0x81,0x8d,0x94,0x83,0x83,0x96,0x1a,0xa5,0x80,0x81,0x88,0x87,0x87,0x80,0x9a,0xe9,0x86,0x80,0x81,0x9d,0x9d,0x8b -,0x91,0x26,0x19,0xb3,0x1c,0x01,0x00,0x00,0xb6,0x17,0x00,0x02,0x02,0x08,0x00,0x02,0x00,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0xcf,0x12 -,0x00,0x02,0x0f,0x15,0x00,0x05,0x10,0x99,0x1b,0x07,0x0c,0x16,0x1d,0x0a,0x1f,0xb2,0x4f,0x0a,0x0a,0xa7,0x80,0x86,0x8e,0x8e,0x85,0x81,0xca,0x96,0x82,0x80,0x85,0x96 -,0x91,0x8b,0x8b,0xa0,0x90,0x8a,0x9b,0x19,0x0f,0xa7,0x80,0x8a,0x99,0xd8,0x8d,0x89,0x10,0x4d,0x90,0x80,0xa0,0x33,0x26,0xa7,0x9c,0x27,0xab,0xad,0x35,0x05,0x04,0x19 -,0x80,0x96,0x1e,0x0e,0xcb,0xa8,0x02,0x0c,0x3d,0x88,0x1d,0x0b,0x0a,0x22,0x2e,0x14,0x26,0x2b,0x12,0x01,0x02,0x16,0x80,0xa6,0x19,0x0c,0xbd,0xa0,0x02,0x0f,0xc3,0x84 -,0xe2,0x1d,0x21,0x9c,0x93,0xd3,0xa9,0xaf,0x6a,0x08,0x09,0x27,0x80,0x91,0x27,0x0d,0x3f,0x97,0x0a,0x10,0x3d,0x86,0xa6,0x2b,0x21,0x9e,0x88,0x98,0x91,0x8d,0x86,0xa8 -,0xc4,0x90,0x81,0x80,0x84,0x8c,0x8b,0x80,0x89,0x9a,0x8e,0x80,0x82,0x91,0xb0,0x9e,0x86,0xa8,0x37,0x2a,0x58,0x0b,0x01,0x00,0x17,0x8e,0x07,0x02,0x01,0x0f,0x05,0x00 -,0x01,0x0a,0x2d,0x05,0x03,0x00,0x1c,0x16,0x0d,0x0f,0x25,0x13,0x00,0x02,0x0e,0x82,0x9d,0x21,0x0c,0x46,0x97,0x13,0x1d,0xa9,0x80,0x8d,0xc4,0x46,0x8b,0x81,0x89,0x94 -,0x8f,0x87,0xed,0x27,0xc7,0x84,0x81,0x8e,0xd3,0xe6,0x83,0x9f,0x38,0xae,0x88,0x83,0xa2,0xb9,0x9c,0x86,0x98,0xbd,0x35,0xad,0x19,0x03,0x04,0x11,0x86,0x32,0x09,0x04 -,0x24,0x57,0x04,0x08,0x19,0x8e,0xbc,0x15,0x0d,0xd9,0x97,0x2b,0x12,0x12,0x24,0x03,0x04,0x00,0xa5,0x94,0x0e,0x08,0x0d,0x9b,0x10,0x09,0x0e,0x92,0x89,0xbd,0x18,0x2c -,0x89,0x9a,0xc6,0x1d,0x9c,0x1f,0x09,0x04,0x1d,0x80,0x92,0xb7,0x1c,0x8f,0x92,0x2d,0x5b,0x8f,0x80,0x85,0x9a,0x36,0x8c,0x87,0x99,0x24,0x31,0xbf,0x07,0x04,0x00,0xac -,0x8e,0x1a,0x0a,0x0c,0xa8,0x19,0x0e,0x23,0x8b,0x84,0x99,0xc2,0x9d,0x82,0x85,0x8d,0x9a,0x85,0x8f,0x2d,0x26,0x9a,0x80,0x83,0x8a,0xc7,0x91,0x8a,0xae,0x6e,0xb8,0x86 -,0x93,0x1e,0x0a,0x12,0x2b,0x0e,0x06,0x03,0x05,0x00,0x01,0x00,0x05,0xc6,0x0e,0x03,0x01,0x0b,0x0e,0x04,0x05,0x12,0xab,0x23,0x16,0x10,0x20,0x37,0x2b,0x1b,0x1a,0x28 -,0x0e,0x13,0x0d,0x95,0x80,0x8d,0xab,0x48,0x87,0x8f,0x9f,0xa6,0x88,0x80,0x85,0x91,0xa5,0x87,0x88,0x8d,0x9a,0x8f,0x94,0xc1,0x2a,0x38,0x82,0x83,0x89,0xc9,0xba,0x8d -,0xb0,0x24,0x2a,0x8b,0x8b,0xb1,0x12,0x11,0x56,0x4d,0x19,0x0f,0x21,0x0e,0x06,0x02,0x0a,0x87,0x8f,0x1f,0x06,0x14,0x48,0x0d,0x07,0x0d,0xa4,0xbc,0x10,0x04,0x11,0x4c -,0x1e,0x0f,0x16,0x25,0x0a,0x06,0x07,0x40,0x84,0x9c,0x27,0x0b,0x3b,0xcd,0x16,0x0d,0x2c,0x8c,0x9a,0xb5,0x2c,0xaa,0x97,0xa1,0x9f,0x97,0x91,0xbd,0x3c,0x2a,0x8e,0x80 -,0x87,0x99,0x25,0x96,0xa3,0x24,0x17,0xa7,0x88,0x92,0xdf,0x13,0x2b,0xae,0xb1,0x52,0x2a,0x2c,0x14,0x0c,0x09,0x9c,0x81,0x8e,0x33,0x15,0x9a,0x94,0xa1,0xb2,0x87,0x80 -,0x82,0x8b,0x98,0x85,0x80,0x85,0x8d,0x92,0x8d,0xac,0x11,0x0f,0x8f,0x85,0x1c,0x03,0x03,0x15,0x09,0x02,0x01,0x0e,0x2d,0x0a,0x03,0x03,0x15,0x0f,0x04,0x05,0x09,0x0a -,0x00,0x02,0x00,0xa3,0xa1,0x09,0x04,0x0c,0xdb,0x19,0x10,0x1e,0x8e,0x86,0x8f,0x9c,0x96,0x87,0x8f,0x9c,0x98,0x8e,0x9c,0x23,0x1b,0xf5,0x82,0x87,0x99,0x53,0x99,0x86 -,0x91,0x9c,0x94,0x80,0x82,0x82,0x8a,0x8f,0x86,0x88,0x8c,0x9a,0x95,0xd0,0x12,0x0a,0x12,0x85,0x90,0x2f,0x0b,0x1d,0xc8,0x1d,0x11,0x1e,0x8e,0x95,0xce,0x0f,0x24,0xae -,0x4a,0x1b,0x0e,0x1d,0x08,0x02,0x01,0x0b,0x8b,0xac,0x10,0x05,0x15,0x47,0x1c,0x0c,0x18,0x92,0xa6,0xb3,0x12,0x25,0xb2,0x28,0x1a,0x0f,0x2a,0x0c,0x08,0x04,0x24,0x80 -,0x96,0x3f,0x15,0x9a,0x89,0x9c,0x20,0x9e,0x81,0x85,0x8c,0xca,0x92,0x8d,0x9a,0x3d,0xf8,0x99,0x23,0x0f,0x08,0x52,0x80,0xa0,0x1b,0x10,0x9f,0x96,0x19,0x07,0xd1,0x86 -,0x90,0x3e,0x0f,0xac,0x9c,0xad,0xd0,0x99,0x8a,0xb3,0x22,0x32,0x88,0x80,0x82,0x88,0x8e,0x82,0x85,0x9a,0xc8,0x87,0x82,0x89,0x50,0x12,0x2b,0x20,0x11,0x0a,0x0d,0x0c -,0x00,0x02,0x00,0x14,0x98,0x0d,0x04,0x01,0x0c,0x0d,0x02,0x02,0x0c,0x1f,0x13,0x06,0x04,0x0f,0x1c,0x18,0x12,0x1d,0x29,0x10,0x12,0x13,0x90,0x80,0x99,0x48,0x37,0x8b -,0x8e,0x3f,0x1e,0x92,0x86,0x89,0x9f,0xad,0x8f,0x8b,0x8c,0x95,0x88,0x8a,0x9d,0x43,0xeb,0x85,0x80,0x89,0xad,0xab,0x87,0x92,0x1b,0x1f,0x8e,0x84,0x8e,0x2d,0x41,0x9f -,0x93,0xba,0x2d,0xb3,0x5b,0x0e,0x06,0x06,0x92,0x89,0x1b,0x09,0x08,0x3a,0x13,0x01,0x0a,0x61,0x9e,0x40,0x0c,0x13,0x36,0x33,0x10,0x0f,0x27,0x18,0x04,0x03,0x02,0x9d -,0x96,0x0b,0x0a,0x0a,0xf2,0x1c,0x05,0x17,0xa4,0x8c,0x94,0x7b,0xb0,0x9f,0x9c,0x58,0xb2,0x91,0xa1,0x23,0x0f,0x1d,0x85,0x88,0xa7,0x44,0xae,0x87,0x9e,0x1f,0xa6,0x88 -,0x80,0x8c,0xb7,0xb7,0x9d,0xa0,0x28,0xd9,0x9b,0x47,0x09,0x03,0x0f,0x85,0x92,0x44,0x24,0xaa,0x88,0x53,0x1d,0x94,0x80,0x81,0x8c,0xba,0x93,0x8c,0x9d,0xcb,0x9a,0x8d -,0x2e,0x06,0x04,0x18,0x87,0xab,0x15,0x10,0x1d,0x64,0x08,0x06,0x24,0x9c,0x9d,0x14,0x0e,0x1a,0x36,0x17,0x0f,0x2c,0x29,0x0c,0x03,0x04,0x14,0x86,0x9f,0x26,0x13,0x34 -,0x9d,0x18,0x0e,0xba,0x8a,0x89,0x56,0x18,0xed,0xae,0x4c,0x27,0xb0,0xa5,0x1a,0x05,0x06,0xed,0x80,0x96,0x36,0x1f,0x9f,0x90,0x15,0x12,0x97,0x86,0x89,0x3c,0x2c,0xab -,0xa7,0x32,0x41,0x99,0x9d,0x1d,0x0a,0x0c,0x9a,0x80,0x9f,0xad,0x49,0x8d,0x96,0x0e,0x20,0x95,0x84,0x8e,0xd5,0xe6,0xa9,0xa2,0x2e,0x4f,0x9f,0xa8,0x17,0x09,0x09,0x93 -,0x85,0x7a,0x2b,0x1e,0x97,0x3c,0x03,0x12,0xa9,0x8d,0xb5,0x17,0x1f,0x3a,0x36,0x0f,0x1e,0xb4,0x3b,0x0c,0x03,0x0a,0x8b,0x8c,0x26,0x1d,0x1c,0x9b,0x17,0x04,0x21,0x9f -,0x91,0x38,0x17,0x1e,0x3e,0x2b,0x19,0x38,0xb2,0x2d,0x0a,0x04,0x13,0x85,0x90,0x3e,0x20,0x2f,0x99,0x1a,0x0d,0xc9,0x8b,0x88,0x9e,0x55,0xe6,0x96,0xa0,0xb6,0x96,0x90 -,0x9c,0x1b,0x10,0xa9,0x80,0x8c,0xa4,0xcc,0x9c,0x8a,0x2c,0x1f,0x91,0x85,0x85,0xa7,0xcd,0xa8,0x93,0xad,0x49,0xa0,0x99,0x2d,0x08,0x06,0x2d,0x82,0xdc,0x16,0x13,0x1f -,0x74,0x05,0x09,0x3a,0x9b,0x9e,0x13,0x0f,0x20,0x5e,0x17,0x11,0x30,0x65,0x13,0x04,0x03,0x2d,0x85,0x32,0x13,0x12,0x37,0xc8,0x07,0x0b,0xca,0x8d,0x97,0x20,0x1e,0xb6 -,0xa6,0x1e,0x24,0xa5,0x9b,0x24,0x0b,0x0d,0x9c,0x80,0xa7,0xd9,0xc6,0x96,0x95,0x15,0x32,0x8c,0x82,0x8a,0xa1,0xa2,0x93,0x90,0xc6,0x9d,0x8d,0x90,0xdd,0x11,0x13,0x99 -,0x80,0x9b,0xae,0xd6,0x99,0xa6,0x0b,0x1b,0x9b,0x86,0x94,0x2b,0x2a,0x4d,0xb9,0x1b,0x27,0xd4,0xdc,0x0e,0x04,0x02,0x4e,0x82,0x29,0x18,0x18,0xd8,0x2c,0x00,0x0f,0xa4 -,0x8c,0xa9,0x16,0x1c,0x46,0x28,0x13,0x25,0xbe,0xbf,0x0c,0x03,0x06,0xaa,0x82,0x2d,0x1f,0x2f,0xa7,0x20,0x03,0x1b,0x93,0x89,0xb1,0x33,0x27,0xbf,0xf1,0x1e,0xb5,0xa9 -,0xbd,0x10,0x06,0x0e,0x90,0x80,0xb8,0xd7,0xbf,0x97,0x6d,0x0c,0xc9,0x88,0x84,0x93,0xa9,0xc1,0x9a,0xa4,0x4b,0xa0,0x9a,0xa0,0x13,0x0a,0x17,0x8b,0x82,0x39,0x49,0x56 -,0x9e,0x2a,0x09,0x55,0x8e,0x8c,0xaa,0x3e,0x2c,0x6e,0x30,0x1b,0x3e,0xc2,0x39,0x09,0x07,0x0a,0x8f,0x88,0x15,0x28,0x1f,0xad,0x19,0x06,0x32,0x97,0x94,0xad,0x27,0x20 -,0xde,0x23,0x22,0x38,0xc5,0x55,0x07,0x08,0x0c,0x8a,0x8a,0x18,0x34,0x2a,0x99,0x16,0x08,0xca,0x8d,0x8d,0xae,0xdd,0x51,0xaf,0x2b,0x26,0xa0,0x9b,0xbb,0x0e,0x0d,0x1f -,0x82,0x8e,0x39,0xa5,0xae,0x8c,0x1a,0x15,0x99,0x88,0x8b,0xa5,0xa9,0xae,0xb0,0x2e,0x43,0x9a,0x9b,0x3b,0x0c,0x0d,0x1a,0x83,0x96,0x33,0xac,0xce,0x9b,0x0e,0x0d,0xa7 -,0x8e,0x92,0xae,0x39,0xdf,0x2e,0x1b,0x2c,0xb2,0x9f,0x1e,0x08,0x0a,0x18,0x82,0xa4,0x21,0xde,0xd2,0xae,0x09,0x0c,0xa4,0x8f,0x9f,0xc4,0x28,0x61,0x21,0x13,0x3a,0xbb -,0xa7,0x1b,0x07,0x09,0x1c,0x82,0xad,0x2c,0xbc,0xb0,0xb5,0x06,0x0f,0x9d,0x8e,0x9c,0xaf,0xd7,0xb9,0x29,0x18,0xc8,0xa5,0xa1,0x21,0x0c,0x0e,0x42,0x80,0xab,0xcb,0xa7 -,0xa1,0xa0,0x07,0x1b,0x8f,0x8a,0x97,0xad,0xae,0xb4,0x27,0x16,0xb9,0x9d,0xaa,0x15,0x0a,0x0c,0x45,0x80,0x5e,0x7e,0xbe,0xb7,0x3e,0x03,0x1a,0x95,0x8e,0xa2,0xbf,0xca -,0x39,0x17,0x15,0xcd,0xa3,0xb4,0x0d,0x0b,0x0b,0x3d,0x80,0x39,0xca,0xbc,0xbd,0x2c,0x05,0x1e,0x93,0x92,0xa2,0xb1,0x49,0x30,0x19,0x1d,0xb6,0xa7,0xc4,0x0e,0x0a,0x0c -,0xbd,0x80,0x54,0xb1,0xb8,0xaf,0x29,0x07,0x4c,0x8e,0x8f,0x99,0x9f,0xc1,0x3b,0x22,0x2d,0xa6,0xa3,0xaf,0x15,0x0e,0x10,0xa6,0x80,0x3b,0xab,0xaf,0xa8,0x2f,0x07,0xca -,0x8d,0x92,0x9c,0x9a,0xcc,0x2e,0x25,0x24,0xa0,0xb6,0xc4,0x14,0x0c,0x0e,0xa6,0x82,0x2a,0xae,0xc9,0xa7,0x21,0x04,0x65,0x93,0x95,0x9f,0x9a,0xbb,0x2b,0x22,0x1f,0xaa -,0xdf,0x71,0x10,0x0d,0x0d,0x9f,0x84,0x1f,0xae,0x5a,0xad,0x17,0x03,0x49,0x95,0x98,0xa1,0x9c,0xce,0x28,0x1a,0x1a,0xb6,0x5d,0x47,0x0e,0x0f,0x0c,0x96,0x88,0x1f,0xa7 -,0xea,0xa5,0x11,0x07,0xb8,0x8f,0x96,0x97,0x99,0xbb,0x2d,0x19,0x31,0xa6,0xaa,0xbf,0x11,0x12,0x0c,0x8e,0x8a,0x27,0x99,0xaf,0x9f,0x0f,0x08,0xa5,0x8f,0x9a,0x94,0x96 -,0xc2,0x29,0x1b,0x35,0xab,0xc5,0x46,0x13,0x0d,0x0b,0x8b,0x8d,0x1e,0xa2,0xae,0xad,0x0a,0x09,0x9d,0x91,0x9f,0x9a,0x97,0x3d,0x1c,0x19,0x36,0xab,0x52,0x3c,0x0e,0x0b -,0x09,0x89,0x90,0x1b,0x9f,0xaa,0xbb,0x06,0x0b,0x9a,0x94,0xa1,0x99,0x94,0x43,0x1b,0x1e,0x3a,0xb1,0x52,0x38,0x10,0x0c,0x0e,0x84,0x99,0x22,0x9b,0xa5,0xb3,0x06,0x18 -,0x92,0x94,0x99,0x94,0x95,0x5d,0x1e,0x2a,0x4f,0xaf,0xc1,0x39,0x0f,0x0b,0x15,0x82,0x9f,0x29,0x96,0xa0,0xc4,0x06,0x1f,0x96,0x99,0x9b,0x8f,0x94,0xf8,0x2b,0x1e,0x37 -,0xe0,0xdc,0x2e,0x0f,0x0c,0x18,0x82,0xbe,0x2c,0x93,0xaf,0x3b,0x04,0x24,0x9a,0xa6,0x9a,0x8f,0x98,0x25,0x22,0x1c,0x28,0x59,0x50,0x28,0x0d,0x0a,0x13,0x82,0x59,0x37 -,0x94,0xac,0x27,0x04,0x25,0xa7,0xad,0x9b,0x8c,0x9a,0x20,0x29,0x26,0x1f,0x43,0xc7,0x2f,0x0e,0x0a,0x1b,0x81,0xde,0x48,0x8e,0x9f,0x2d,0x05,0x3c,0x9f,0xa5,0x92,0x8c -,0x97,0x27,0x3e,0x31,0x1d,0xce,0xad,0x33,0x0c,0x0b,0x27,0x82,0xc9,0x3e,0x89,0x9c,0x23,0x06,0x3a,0xa1,0xb1,0x93,0x8e,0x96,0x2a,0x3d,0x1e,0x1e,0xd1,0xb2,0x27,0x09 -,0x0f,0x19,0x86,0xc9,0x4b,0x8a,0xa4,0x1a,0x07,0x2a,0xaa,0x58,0x98,0x90,0x9e,0x37,0x2a,0x23,0x1d,0xd6,0xe0,0x1e,0x0a,0x12,0x10,0x8a,0xaa,0x72,0x8b,0x9f,0x24,0x08 -,0x33,0xc1,0x48,0x9a,0x8f,0x9a,0x5f,0x38,0x38,0x1f,0xa7,0x4f,0x21,0x0b,0x13,0x0f,0x96,0x8f,0x5c,0x88,0x99,0x32,0x0e,0x2e,0xcc,0x35,0x9f,0x8b,0x9d,0xc4,0xda,0xbc -,0x2e,0xbc,0xb5,0x1f,0x0c,0x10,0x0d,0xab,0x89,0xc7,0x8a,0x93,0x51,0x14,0x21,0x3b,0x2f,0xa8,0x8d,0xa3,0x4f,0xb4,0xac,0x34,0xde,0xa9,0x21,0x09,0x0b,0x0e,0x24,0x87 -,0xd1,0x8e,0x8d,0xd3,0x1e,0x17,0x3b,0x28,0x75,0x98,0x9f,0x6a,0xaa,0xb0,0x55,0x63,0xa9,0x20,0x09,0x0b,0x13,0x10,0x8b,0xa5,0x95,0x89,0xbe,0x2d,0x18,0xea,0x25,0x39 -,0xab,0x94,0x3f,0xba,0xac,0xab,0xb0,0xb4,0x2c,0x11,0x0b,0x12,0x0c,0x99,0x8e,0xb8,0x86,0xa6,0xb8,0x1b,0x59,0x41,0x25,0xb1,0x96,0x3f,0xcf,0xa0,0xa5,0xb3,0xbe,0xc5 -,0x13,0x0d,0x12,0x0d,0x48,0x8c,0x49,0x8b,0xa2,0xa7,0x25,0x3b,0xa3,0x20,0xb1,0xa3,0xc7,0x20,0xa5,0x9f,0xc3,0xbb,0xa9,0x1b,0x10,0x11,0x0f,0x11,0x98,0xac,0xa3,0x9c -,0xb8,0xaf,0x1e,0x9d,0x4a,0xc1,0xb3,0xb4,0x23,0x36,0x9b,0xb0,0xba,0xdf,0x57,0x14,0x15,0x16,0x14,0xbd,0x9f,0xbe,0xb4,0x68,0xa4,0x38,0xac,0xa5,0x5f,0xaf,0x46,0x66 -,0x29,0xa1,0x9c,0xb4,0xe1,0x42,0x2d,0x1e,0x16,0x28,0x3b,0xaf,0xad,0x27,0xdf,0xc7,0xb6,0x57,0xb9,0xa5,0xc6,0x4b,0x31,0xb7,0x9c,0xa4,0x9f,0xb4,0xba,0x49,0x26,0x4e -,0xed,0xac,0x5b,0xe5,0x3f,0x2f,0x46,0x2d,0x46,0x4b,0x3d,0x28,0x27,0x35,0x49,0xad,0xa1,0xa4,0xaa,0xb4,0x3e,0x3f,0xb8,0xb7,0xa9,0xb3,0xa8,0xb8,0x5a,0xd8,0xee,0xc2 -,0x2e,0x3a,0x1f,0x1c,0x20,0x1c,0x56,0xc1,0xc4,0x68,0x3e,0x3b,0x2c,0x74,0xb6,0xaf,0xab,0x9f,0xa3,0xff,0xa9,0xa0,0xa9,0xbc,0xda,0x58,0x22,0x23,0x26,0x5f,0xbd,0x2d -,0x2a,0x28,0x25,0x1f,0x22,0x47,0xb8,0xc3,0xdd,0xb4,0xaf,0xad,0xa9,0xa2,0xa4,0xa9,0xb3,0x4a,0xe5,0xb9,0xa9,0xaa,0xad,0xba,0x22,0x13,0x0f,0x2b,0x9c,0x92,0xa9,0x29 -,0x14,0x07,0x12,0xb0,0x90,0x93,0xac,0x5a,0x48,0x22,0x1f,0x9f,0x8b,0x8f,0x9e,0x34,0x1d,0x43,0x56,0xb4,0xbd,0x19,0x0c,0x0d,0x3d,0x9c,0x99,0x31,0x2c,0x27,0x2b,0x27 -,0x1f,0x9d,0x8e,0x8c,0x3b,0x1c,0x1f,0x39,0x99,0x94,0x9e,0xd8,0x14,0x23,0xa8,0xa9,0xa5,0x4b,0x22,0x23,0x33,0x2c,0x6c,0xa4,0x9d,0xaa,0x2c,0x13,0x0f,0x1e,0x9d,0x8f -,0xa0,0x38,0x24,0x24,0xd1,0x99,0xac,0x2d,0xca,0xad,0xb7,0xbe,0xb8,0xc3,0x24,0x24,0x4c,0x4e,0xad,0x96,0x95,0xa9,0x22,0x0e,0x0e,0x2a,0xaa,0x9e,0xa6,0xb0,0x2e,0x1c -,0x1a,0x2c,0xa6,0x9b,0x9f,0xfc,0x2d,0xd6,0xf2,0xfc,0xbb,0x36,0x19,0x0d,0x28,0x95,0x8f,0xa3,0xb9,0xbd,0x3d,0x2f,0x28,0xc7,0x95,0x92,0xa6,0x27,0x15,0x19,0x39,0x9a -,0x9a,0x2e,0x0c,0x0b,0x25,0xa6,0x9d,0xb5,0x25,0x23,0x2c,0x2f,0x71,0x9d,0x8e,0x97,0xa0,0x4c,0x1b,0x12,0xba,0x87,0x89,0x9b,0x1c,0x0d,0x19,0x49,0xbd,0xb8,0xe5,0x68 -,0x45,0x2c,0x3c,0x2e,0x22,0x2c,0x2c,0x32,0x25,0x4c,0x9e,0x92,0x91,0x46,0x11,0x11,0x2c,0xb5,0xa1,0x95,0x8f,0xb8,0x27,0x25,0x5c,0x9a,0x9c,0xac,0x43,0x32,0x33,0x28 -,0x3d,0x55,0x32,0x1a,0x13,0x2a,0x6f,0xd1,0x4a,0xb7,0xa6,0xac,0x2a,0x23,0xc5,0xa2,0x9d,0xa0,0x3f,0x1f,0x2c,0xb6,0x93,0xa0,0x27,0x15,0x2e,0xa5,0x9c,0xb6,0x21,0x1a -,0x2c,0x30,0x45,0xb3,0x9f,0x9a,0xa7,0xa5,0x28,0x0f,0x17,0xab,0x89,0x8d,0xb6,0x12,0x0f,0x2f,0xae,0xb0,0x3b,0x2b,0x28,0x43,0xba,0xab,0x30,0x2d,0x3b,0x42,0x3f,0x39 -,0xaa,0x98,0x8c,0x99,0x27,0x10,0x13,0x2f,0x9e,0x93,0x95,0xb5,0x26,0x1c,0x27,0xa6,0x99,0xb5,0x3a,0x2c,0x24,0x24,0x35,0xcb,0x78,0x39,0x19,0x13,0x1a,0x3b,0x99,0x97 -,0x98,0xa4,0x2c,0x1b,0x1c,0xaf,0x94,0x91,0x9e,0x3b,0x1e,0x26,0xba,0x9a,0xaf,0x2e,0x33,0x2b,0xd1,0xdd,0xe2,0x35,0x27,0x2a,0x22,0x2e,0xcd,0xa5,0x97,0x9d,0xc5,0x1a -,0x0c,0x1c,0xab,0x90,0x95,0xfa,0x1f,0x1e,0x25,0xd5,0xae,0xac,0xc9,0xc2,0xac,0xa4,0xc9,0x27,0x42,0xb6,0xaf,0x5a,0x2c,0xd5,0x9c,0x96,0xb9,0x1d,0x18,0x16,0x2a,0xa4 -,0x9a,0xa4,0x40,0x1f,0x27,0x31,0xc9,0x63,0xe3,0xcd,0x38,0x2e,0x26,0x53,0xc1,0x59,0x44,0x23,0x1b,0x31,0xb7,0x8d,0x8b,0x90,0xa7,0x2b,0x3a,0x30,0x5d,0xa9,0x9e,0xad -,0x2e,0x22,0x36,0x45,0xf2,0x3a,0x21,0x20,0x23,0x3a,0x44,0x70,0x5c,0x21,0x23,0x20,0x3f,0xab,0xa8,0x95,0x9e,0xdf,0x1d,0x1b,0xbe,0x93,0x8b,0x92,0xb9,0x23,0x1a,0x20 -,0xea,0xb1,0xac,0xb7,0xe4,0xbe,0x40,0x2c,0x2b,0x30,0x5f,0x36,0x2b,0x1f,0xf2,0x9b,0x99,0x9f,0x1f,0x12,0x10,0x22,0xaf,0xa5,0xaa,0xb7,0xda,0x60,0xd5,0xba,0xa9,0xad -,0xaf,0xdc,0x3e,0xdd,0x64,0xac,0xa7,0xb8,0x3b,0x13,0x1e,0x7c,0x97,0x99,0xaa,0xc6,0x28,0x1f,0x1d,0x39,0xa9,0xa3,0xb2,0x44,0x1f,0x27,0x26,0x31,0x51,0xda,0x79,0x36 -,0x2f,0x40,0x62,0x4f,0x29,0x2a,0x54,0xc2,0x9d,0x9a,0x8f,0x95,0xb8,0x3f,0x29,0xc6,0xa2,0x9c,0x9f,0xed,0x36,0x1f,0x20,0x2e,0x2e,0x4c,0x4e,0x2b,0x24,0x23,0x2c,0x2f -,0x35,0xc3,0x30,0x23,0x24,0xd7,0xa3,0x9f,0xa7,0x2f,0x2b,0x49,0xbb,0x9e,0x9b,0x9a,0x99,0xa9,0xb1,0xdb,0xba,0xa4,0xb7,0xce,0x3a,0x2b,0x29,0x26,0xe3,0x3c,0x24,0x15 -,0x0b,0x19,0x3f,0x9e,0x9e,0xac,0xc4,0x2c,0x1c,0x18,0x2c,0xa4,0x9b,0xa4,0xac,0xbd,0xab,0x5e,0xba,0xa0,0xa5,0xa7,0xfb,0xdd,0xb3,0xb6,0xaf,0x38,0x2e,0x39,0x29,0x5e -,0xc1,0xa6,0xb2,0x2d,0x1f,0x1a,0x3c,0xc2,0xc9,0xba,0x2f,0x21,0x19,0x19,0x1e,0x40,0xac,0xa7,0xb9,0xbc,0xc4,0xc4,0xae,0xb1,0x9c,0xad,0xb5,0xbf,0xa5,0x92,0x9a,0xa7 -,0x4d,0x30,0x2f,0x23,0x2d,0x3b,0xd4,0xae,0x5e,0x3a,0x29,0x23,0x1d,0x1c,0x1f,0x25,0x24,0x2e,0x35,0xce,0xc6,0x2d,0x22,0x20,0xb7,0x9c,0x90,0x8f,0x97,0x96,0xa5,0xc8 -,0xc3,0xaf,0xa3,0xa6,0xaa,0xbd,0x48,0x38,0x2b,0x30,0x3f,0x2c,0x28,0x1b,0x1e,0x25,0x1d,0x1e,0x15,0x16,0x1c,0x2b,0x74,0xb4,0xa1,0xad,0xb1,0xaf,0xaf,0x99,0x94,0x95 -,0x97,0xa0,0xa4,0xb5,0x5f,0xad,0xac,0xaa,0xbc,0x34,0x3f,0x29,0x2d,0x2e,0x28,0x26,0x14,0x18,0x19,0x23,0x4c,0x3d,0x3c,0x24,0x21,0x26,0x24,0x4c,0xab,0x9e,0x95,0x9f -,0x9f,0x9f,0xa7,0x9c,0xa5,0x9e,0xa6,0xaf,0x9e,0xad,0xa9,0xb8,0x29,0x20,0x15,0x23,0x43,0x45,0xcd,0x3e,0x32,0x1b,0x11,0x17,0x18,0x2a,0x38,0x3a,0x59,0x2b,0x49,0xc7 -,0xad,0x9d,0xa4,0x9d,0xa6,0xae,0x9c,0xa0,0x9e,0xa6,0xac,0x9f,0xb7,0xb0,0xb5,0xaf,0xac,0x49,0x41,0x26,0x25,0x26,0x23,0x2e,0x1d,0x18,0x16,0x11,0x1b,0x23,0x30,0x38 -,0x29,0xbf,0xdb,0xb9,0xa2,0xae,0x9e,0xab,0xaa,0x9d,0x9a,0x91,0x98,0x95,0x9a,0xd4,0xd1,0x5b,0x5d,0xb8,0xbf,0xb3,0x39,0x24,0x20,0x17,0x1b,0x12,0x14,0x18,0x17,0x28 -,0x25,0x29,0x26,0x1b,0x34,0x2e,0xd9,0x99,0x97,0x8e,0x93,0x92,0x93,0xa3,0xa3,0xa1,0x94,0x9a,0xb0,0xb0,0xe2,0xd4,0xe0,0x29,0x2d,0x1f,0x18,0x17,0x12,0x1e,0x18,0x19 -,0x19,0x15,0x24,0x25,0x2c,0x3b,0xab,0x9e,0xad,0xa2,0x9e,0x9a,0x93,0x99,0x9b,0x9b,0xa5,0xaa,0xab,0xa6,0xae,0xbb,0xbc,0x5f,0xd9,0xec,0x45,0x2e,0x1a,0x1a,0x18,0x13 -,0x19,0x1b,0x29,0x28,0x25,0x2c,0x22,0x24,0x34,0xcb,0xb5,0xa2,0x99,0x96,0x97,0x99,0x9b,0x98,0xa1,0xbb,0xa2,0xa5,0xae,0xae,0xbf,0xd2,0x2e,0x27,0x1f,0x1e,0x2c,0x24 -,0x2d,0x24,0x1c,0x26,0x1d,0x1d,0x21,0x31,0xdc,0x24,0x2e,0xc1,0xcb,0xa6,0xa8,0x9f,0x9d,0xa3,0x9d,0xac,0x9e,0xa1,0xae,0xa4,0xf3,0xb8,0xac,0xb4,0xb3,0xbc,0xac,0x5a -,0x23,0x1f,0x20,0x25,0x1e,0x18,0x1a,0x18,0x1d,0x1b,0x20,0x2b,0x28,0xfa,0x59,0xcb,0xa0,0x9b,0x9a,0x9f,0x9b,0x9b,0xa5,0xa3,0xa8,0x99,0x9a,0xad,0xb8,0xd3,0xc7,0x7d -,0x3a,0x32,0x35,0x30,0x29,0x1d,0x1d,0x1b,0x1a,0x17,0x15,0x28,0x2b,0x2f,0x27,0x34,0x52,0x47,0xc1,0xae,0x9e,0x95,0x96,0x9b,0x98,0x99,0x9b,0xa0,0xa2,0xaa,0xad,0xb4 -,0x5c,0xd7,0xb8,0x4c,0x3a,0x20,0x1b,0x1d,0x16,0x18,0x17,0x1c,0x1c,0x17,0x1b,0x1f,0x2c,0x57,0x4c,0xaf,0x9f,0x9f,0x9d,0x9d,0x93,0x93,0x93,0x97,0xaa,0x9f,0xa4,0xbb -,0xb9,0xca,0xbc,0x47,0x35,0x36,0x36,0x47,0x25,0x1d,0x1c,0x15,0x15,0x13,0x1a,0x28,0x35,0x44,0x28,0x2e,0x49,0x50,0xb2,0xa2,0x9a,0x96,0x98,0x97,0x98,0x96,0x9b,0xa5 -,0x9e,0xb6,0xbf,0xc9,0xd9,0xd2,0x3e,0x3a,0x27,0x20,0x1a,0x1c,0x1e,0x1e,0x1e,0x1b,0x1a,0x1e,0x24,0x34,0x3e,0x7c,0xb1,0xc0,0xaf,0xa6,0x9f,0x9c,0x9c,0x9c,0x9b,0x9b -,0xa1,0xb1,0xa8,0xab,0x64,0x4e,0x2e,0x37,0x4f,0x49,0x5a,0x45,0x3d,0x26,0x26,0x20,0x1d,0x1f,0x1e,0x1d,0x22,0x33,0x2a,0x2f,0x3c,0xec,0xc0,0xb2,0xae,0xaf,0x9b,0x98 -,0x9d,0x9d,0xa7,0xa8,0xa7,0xad,0xb7,0xc3,0xb0,0xfa,0x4e,0x4e,0x4b,0x55,0x3f,0x2d,0x37,0x2c,0x1d,0x1d,0x18,0x1e,0x25,0x27,0x22,0x25,0xf0,0x3b,0x44,0xc0,0xbe,0xab -,0xae,0xac,0xa2,0x9b,0x96,0x9d,0x9d,0x9c,0xa8,0xae,0xbd,0xd1,0xb6,0xb6,0x5f,0x3e,0x39,0x32,0x28,0x20,0x1a,0x1b,0x19,0x14,0x15,0x1d,0x28,0x24,0x30,0x2c,0x3e,0xb4 -,0xb2,0x9f,0x9b,0x93,0x92,0x97,0x96,0x9d,0x9c,0x9d,0xb4,0xb1,0xc3,0x4c,0x3f,0x2c,0x41,0x2e,0x32,0x2a,0x1e,0x2c,0x1b,0x1d,0x1b,0x19,0x21,0x1f,0x2d,0x28,0x2d,0xba -,0x52,0xc6,0xac,0xa6,0x9d,0x9d,0x98,0x98,0x97,0x97,0x9e,0xa0,0xa8,0xbe,0xaf,0xdf,0x69,0xcc,0x3f,0x2f,0x25,0x1f,0x1b,0x1b,0x19,0x19,0x1a,0x1b,0x1f,0x23,0x2d,0x33 -,0x3d,0xcf,0xf2,0xc4,0xa5,0x9d,0x9c,0x9b,0x93,0x95,0x9a,0x9d,0xa5,0x9f,0xaf,0xc4,0x6f,0x6f,0x3b,0x34,0x29,0x26,0x39,0x29,0x26,0x23,0x2d,0x2b,0x23,0x1d,0x1c,0x2d -,0x2e,0x2d,0x23,0x38,0xb4,0x3a,0xb7,0xae,0x9c,0x9c,0xa0,0x9f,0x9c,0x94,0xa2,0x9e,0xac,0xac,0xba,0xe6,0x3f,0x4e,0x5f,0x2f,0x2c,0x24,0x31,0x28,0x24,0x20,0x2a,0x29 -,0x20,0x1c,0x1f,0x2f,0x2f,0x5e,0x3a,0x46,0xc1,0xb5,0xac,0xa7,0xa2,0xa0,0xa1,0x9d,0xa6,0xa8,0x9f,0xb0,0xa8,0xac,0xb4,0xf8,0x42,0x3d,0x33,0x52,0x4c,0x31,0x28,0x23 -,0x1f,0x1d,0x18,0x1c,0x28,0x2a,0x1e,0x21,0x37,0x4f,0x63,0xd6,0xa8,0xa4,0x9e,0xa1,0xa1,0x96,0x97,0x98,0x9d,0xa8,0xa5,0xb4,0xdb,0x3a,0x49,0x6d,0x2d,0x27,0x1e,0x27 -,0x24,0x1b,0x1d,0x1f,0x1e,0x15,0x1a,0x24,0x29,0x3f,0xde,0x6e,0xd7,0xac,0xaa,0xa2,0x9d,0x98,0x96,0x97,0x9b,0x9d,0x97,0xa3,0xae,0xc2,0xd6,0x73,0x34,0x2e,0x30,0x31 -,0x2a,0x26,0x1f,0x1c,0x18,0x19,0x18,0x17,0x20,0x39,0x29,0x2d,0xfd,0xe7,0xb5,0xb0,0xa6,0x9e,0x97,0x9b,0x9c,0x96,0x99,0x98,0x9b,0xa7,0xb0,0xb0,0x62,0x36,0x28,0x31 -,0x3a,0x23,0x20,0x20,0x2d,0x20,0x16,0x1b,0x24,0x21,0x1c,0x22,0x2f,0x4d,0xd1,0x3f,0xc8,0xa9,0xaa,0xaa,0xa2,0x9a,0x97,0x94,0x9c,0x9c,0x9a,0xa3,0xbd,0xef,0xd3,0xca -,0x47,0x2c,0x2b,0x32,0x2b,0x20,0x28,0x25,0x23,0x1f,0x19,0x1b,0x23,0x33,0x34,0x2c,0x41,0x3b,0xdd,0xba,0xaf,0x9d,0x9a,0x9b,0xa1,0x9c,0x9b,0x9e,0x9d,0xa3,0xa8,0xa9 -,0xc9,0x4e,0x51,0x48,0x4a,0x46,0x2b,0x27,0x27,0x20,0x1d,0x1b,0x1b,0x1c,0x23,0x20,0x1f,0x2d,0x3b,0x36,0x4e,0xce,0xb5,0xa5,0xa5,0x9e,0x99,0x91,0x95,0x9b,0x98,0x9d -,0xa3,0xaf,0xd8,0xbf,0xbe,0xee,0x2c,0x27,0x2b,0x1e,0x1d,0x1b,0x1a,0x1e,0x1b,0x18,0x1f,0x24,0x28,0x2d,0x3b,0x4b,0xcb,0xbe,0xbf,0xa6,0x9d,0x98,0x9a,0x9b,0x9c,0x99 -,0x9a,0xa0,0xa3,0xab,0xae,0xed,0x40,0x35,0x2d,0x3b,0x2f,0x28,0x29,0x21,0x1a,0x19,0x1a,0x1b,0x20,0x22,0x1f,0x2d,0x4d,0x4d,0xdc,0xba,0xb2,0xa6,0xa5,0x9e,0x9c,0x98 -,0x91,0x97,0x9a,0xa2,0xa9,0xb2,0xd2,0xdd,0x52,0x51,0x31,0x27,0x26,0x20,0x26,0x1f,0x1d,0x21,0x1f,0x1d,0x1f,0x23,0x27,0x4b,0x4e,0x3b,0x6d,0xb1,0xb2,0xb9,0xa7,0x9f -,0x9d,0x9d,0x9d,0x9a,0x9a,0x9c,0xa6,0xae,0xb4,0xda,0x3d,0x37,0x30,0x36,0x3e,0x27,0x26,0x28,0x26,0x1e,0x18,0x1b,0x21,0x28,0x23,0x2b,0xe0,0x45,0x48,0xd6,0xbf,0xab -,0xa9,0xa4,0xa1,0x9c,0x98,0x99,0x9c,0x9f,0xa5,0xab,0xc6,0x4c,0xd2,0xe8,0x49,0x34,0x32,0x30,0x26,0x26,0x23,0x29,0x26,0x1f,0x1b,0x1f,0x23,0x24,0x41,0x3c,0x41,0x66 -,0xc6,0xc0,0xb4,0xa8,0xa4,0x9e,0x9b,0x9b,0x99,0x9b,0x9f,0xa0,0xa6,0xb1,0xc9,0x4d,0x48,0x38,0x3d,0x3b,0x2a,0x24,0x1e,0x1f,0x1e,0x1c,0x1b,0x1e,0x29,0x23,0x21,0x35 -,0x35,0x55,0xcd,0xbd,0xa7,0xa5,0xa2,0x9f,0x9b,0x97,0x98,0x9b,0x9f,0xa2,0xa1,0xad,0xc1,0xd5,0xd3,0x44,0x2a,0x24,0x29,0x2d,0x23,0x1e,0x21,0x24,0x1e,0x17,0x1b,0x22 -,0x23,0x31,0x32,0x43,0xba,0xb4,0xb2,0xac,0xa0,0x9d,0x9c,0x9c,0x9a,0x95,0x98,0xa4,0xa9,0xa6,0xad,0xce,0x3a,0x3d,0x2f,0x2d,0x27,0x22,0x27,0x20,0x20,0x1c,0x1d,0x1f -,0x1f,0x28,0x24,0x2a,0x44,0x3a,0x46,0xc3,0xac,0xa4,0xa7,0xa6,0xa3,0x9f,0x9b,0x9b,0x9a,0x9d,0xa1,0xa4,0xb8,0xd4,0xe7,0x59,0x42,0x2e,0x2c,0x2c,0x28,0x25,0x21,0x28 -,0x26,0x1e,0x1b,0x1d,0x23,0x2c,0x37,0x3f,0x48,0xce,0xbc,0xca,0xb2,0xa4,0x9e,0x9e,0x9e,0x9d,0x9c,0x9e,0xa8,0xa8,0xa7,0xac,0xca,0x51,0x54,0x3b,0x46,0x30,0x27,0x2b -,0x2b,0x26,0x1f,0x21,0x24,0x22,0x21,0x20,0x27,0x2f,0x32,0x35,0xe7,0xb6,0xae,0xaf,0xab,0xa4,0xa4,0x9c,0x9d,0x9e,0x9b,0x9d,0x9f,0xad,0xb3,0xb9,0xcd,0x5e,0x3b,0x3a -,0x2e,0x25,0x24,0x22,0x22,0x22,0x1d,0x1d,0x1f,0x1f,0x29,0x2a,0x30,0x3c,0x53,0xcd,0xcf,0xb3,0xa3,0x9f,0x9f,0x9e,0x9c,0x9e,0xa3,0x9f,0xa1,0xa0,0xa7,0xba,0xc2,0xe8 -,0x47,0x3a,0x2e,0x2a,0x29,0x28,0x24,0x21,0x24,0x25,0x1e,0x1d,0x1f,0x29,0x27,0x2b,0x3e,0xd5,0xb9,0xb5,0xae,0xa7,0xa3,0xa3,0x9e,0x9d,0x9d,0x9e,0x9f,0xa3,0xae,0xaf -,0xbb,0xcf,0x7c,0x41,0x38,0x2a,0x25,0x21,0x28,0x27,0x24,0x22,0x25,0x28,0x25,0x2e,0x2e,0x34,0x32,0x40,0x6d,0xe4,0xb4,0xac,0xa7,0xa6,0xa9,0xa7,0xa6,0xa8,0xa7,0xa0 -,0xa3,0xaa,0xaf,0xb4,0xc5,0x5e,0x5c,0x3c,0x38,0x2f,0x2d,0x2e,0x27,0x29,0x2c,0x29,0x26,0x22,0x28,0x2a,0x26,0x32,0x3d,0x69,0xdd,0xca,0xb1,0xb0,0xaa,0xa3,0xa5,0xa6 -,0xa7,0xa6,0xaa,0xac,0xa6,0xa8,0xaf,0xbd,0xcc,0xd0,0x42,0x2d,0x33,0x35,0x2f,0x2c,0x2c,0x2e,0x28,0x28,0x2c,0x26,0x27,0x2b,0x33,0x39,0x4a,0xbf,0xba,0xbe,0xb8,0xb5 -,0xae,0xb0,0xb5,0xa8,0xa4,0xa2,0xa9,0xab,0xad,0xb8,0xb8,0xbe,0xeb,0x63,0x4d,0x43,0x38,0x2f,0x37,0x30,0x2b,0x28,0x2c,0x2d,0x26,0x27,0x2e,0x3e,0x45,0x36,0x46,0xce -,0xc8,0xbf,0xba,0xb8,0xb3,0xaf,0xb1,0xb4,0xac,0xa5,0xaa,0xaf,0xac,0xae,0xc2,0x69,0x62,0xc9,0xd5,0x46,0x3c,0x40,0x3c,0x2e,0x2d,0x2e,0x2a,0x2c,0x28,0x2e,0x34,0x3a -,0x60,0x55,0x72,0x7a,0xef,0x63,0x6a,0xc2,0xb6,0xb3,0xb2,0xb6,0xb4,0xb3,0xb7,0xae,0xb0,0xb6,0xb9,0xc4,0xc4,0x64,0x5b,0xdf,0x5c,0x4b,0x3f,0x41,0x39,0x2f,0x31,0x34 -,0x39,0x34,0x34,0x4b,0x5c,0x5b,0x63,0x51,0x41,0x49,0x49,0x51,0x6a,0xc3,0xb3,0xb9,0xb9,0xb7,0xb8,0xbf,0xe1,0xbf,0xb6,0xbd,0xbf,0xc9,0xbc,0xcf,0x54,0x5e,0x4e,0x43 -,0x38,0x34,0x41,0x41,0x49,0x67,0x5b,0x5f,0x53,0x48,0x45,0x44,0x4a,0x45,0x49,0x59,0x4b,0x69,0x67,0x55,0xd0,0xc6,0xe4,0xd8,0xcd,0xc2,0xc9,0xc6,0xb8,0xb8,0xbd,0xc5 -,0xce,0xe6,0x47,0x44,0x50,0x74,0xce,0x58,0xd3,0xde,0x6f,0xec,0x57,0x41,0x6f,0xce,0x40,0x4f,0x5a,0xd4,0xdc,0x48,0x4b,0x46,0x39,0x34,0x4f,0x65,0x6e,0xe4,0x50,0xd9 -,0xce,0xdc,0xcf,0xd5,0xc7,0xcf,0xcb,0xc3,0xc3,0xb4,0xae,0xb0,0xbd,0xcb,0x64,0x5a,0x42,0xef,0xdf,0x67,0xe6,0x38,0x7e,0x48,0x3b,0x45,0x3f,0x4d,0x49,0x3d,0x3f,0x53 -,0xef,0xc9,0xda,0xd3,0x51,0x47,0x41,0x49,0xcf,0xbf,0xc9,0xc9,0xbf,0xb7,0xb1,0xbb,0xbb,0xbe,0xbc,0xca,0xdf,0xd5,0xbe,0xbb,0xc6,0x57,0x47,0x3f,0x38,0x37,0x3a,0xee -,0x42,0x37,0x34,0x3a,0x4b,0x3b,0x3c,0x4e,0x56,0x44,0x42,0x4b,0xce,0xbd,0xb4,0xb9,0xbe,0xb9,0xc0,0xbc,0xc5,0xc2,0xb6,0xbd,0xd6,0xc6,0xbe,0xc4,0xcb,0x76,0xe4,0x5d -,0x47,0x39,0x43,0x4b,0x4a,0x47,0x3d,0x40,0x3c,0x3d,0x3b,0x37,0x38,0x3f,0x3f,0x51,0x5a,0xd8,0xd6,0xcc,0xb8,0xb6,0xbf,0xc4,0xbc,0xb5,0xb3,0xc4,0xbf,0xc8,0xcf,0xe2 -,0xdf,0xcf,0x4f,0x56,0x4e,0x51,0x63,0x4f,0x3f,0x49,0x4c,0x57,0x52,0x32,0x40,0x3b,0x3c,0x3d,0x55,0x5f,0x5d,0xd8,0x68,0xc1,0xdf,0x79,0xd7,0xbf,0xc3,0xc5,0xd8,0xd5 -,0xbb,0xc1,0xc2,0x7b,0xcd,0xcc,0x54,0x6b,0xf1,0xd7,0xdb,0x6a,0x5f,0x64,0x6a,0x40,0x38,0x4b,0x5c,0x66,0x51,0x3f,0x5d,0xc7,0xe1,0x56,0x67,0x50,0x6b,0x40,0x5a,0xc7 -,0xc7,0xdf,0x49,0xdd,0xc3,0xd2,0x4f,0xdc,0xcb,0xc6,0xed,0x73,0xcf,0xc1,0xbf,0xdc,0xee,0xd6,0x48,0x44,0x4a,0x76,0xcb,0xeb,0xf3,0x4c,0xd3,0x66,0x49,0x49,0x48,0x48 -,0x52,0x46,0x3b,0x49,0xf4,0x5e,0x3f,0x42,0x73,0x59,0x4f,0xca,0xc3,0xbc,0xc2,0xbd,0xbe,0xb9,0xbe,0xca,0x6c,0xf6,0xcc,0x6c,0xd5,0xc7,0xc8,0xd4,0xdd,0x73,0xd7,0x5f -,0x47,0x43,0x48,0x36,0x43,0x4e,0x46,0x2c,0x42,0x6b,0x41,0x35,0x6d,0x4d,0xca,0x40,0x4d,0xad,0xa6,0x99,0xbf,0xac,0x28,0xb9,0x51,0xa9,0x25,0x49,0x3e,0x03,0x16,0x09 -,0xa3,0xec,0x38,0xbb,0x27,0x8b,0x91,0x97,0xbe,0x9f,0xbe,0xd1,0x8c,0xaf,0x3b,0x9e,0xbe,0x3d,0x9b,0x1b,0x93,0x83,0x8d,0x8c,0x8b,0x9a,0xaf,0x2e,0x0d,0x0e,0x01,0x03 -,0x03,0x0a,0x03,0x05,0x05,0x0c,0x05,0x07,0x1c,0x0e,0x19,0x25,0x2f,0xd1,0xc3,0x5c,0x95,0x9c,0x9c,0x91,0x9f,0x8f,0x8c,0x8a,0x81,0x86,0x83,0x83,0x82,0x84,0x80,0x86 -,0x85,0x85,0x21,0xbd,0x8a,0x87,0x0a,0x11,0x1b,0x06,0x11,0x05,0x02,0x03,0x04,0x01,0x20,0x0b,0x0a,0x01,0x04,0xa9,0x14,0x0b,0x09,0x24,0xa2,0x9d,0x9d,0xab,0x11,0x19 -,0xab,0x9b,0x83,0x8e,0x97,0xaf,0x8e,0x8a,0x86,0x83,0x80,0x8f,0x9c,0x94,0x9c,0x87,0xd4,0x26,0x1b,0xd8,0xd4,0x2f,0x62,0xdf,0x2f,0xdd,0x3b,0xc4,0x9a,0x40,0x1c,0x3c -,0x1f,0x0d,0x17,0x09,0x07,0x04,0x05,0x07,0x08,0x0a,0x06,0x16,0x16,0x1d,0x1d,0x16,0x3e,0xaf,0xb2,0x3c,0xcf,0x92,0x8f,0xa1,0x8b,0x87,0x84,0x84,0x87,0x88,0x80,0x8c -,0x92,0x8b,0x81,0x91,0x93,0x8e,0x29,0x8d,0x2a,0x26,0xa1,0xc6,0xdc,0x05,0x0f,0x25,0x06,0x06,0x02,0x01,0x01,0x06,0x04,0x1f,0x17,0x05,0x04,0x10,0x2f,0xa1,0xa9,0x9c -,0x87,0xa7,0x87,0x9d,0xa8,0x88,0x87,0x82,0x8f,0x9d,0x8c,0x8d,0x8d,0x91,0x83,0x94,0xfd,0xac,0x4f,0x53,0x24,0x44,0x44,0x20,0x17,0x9c,0x98,0x5e,0xa4,0x8d,0xab,0x30 -,0xdc,0xcf,0x3f,0x0b,0x0c,0x2d,0x1b,0x21,0x0f,0x06,0x06,0x9d,0xab,0xcd,0x9c,0x22,0x18,0x03,0x91,0xa2,0x9d,0xa2,0x02,0x15,0xdc,0x17,0x00,0xa9,0x94,0x14,0x10,0x1b -,0x80,0x96,0x12,0x27,0x0c,0x2b,0x8b,0x92,0x1f,0x22,0x15,0x24,0x10,0x2a,0xab,0xad,0x23,0x2c,0x2b,0x0a,0x10,0x25,0x32,0x0f,0xda,0x0f,0x14,0x08,0x1e,0x8e,0xd3,0x1d -,0x59,0x8e,0x8f,0x88,0x87,0x8a,0x87,0x8d,0x86,0x80,0x82,0x84,0x87,0x83,0xb4,0x9f,0x8e,0x80,0x8b,0x41,0x2f,0x8f,0xfa,0x20,0xa3,0xbf,0x25,0x03,0x1b,0x26,0x89,0x13 -,0x05,0x30,0x9d,0x14,0x46,0x8e,0x13,0x0b,0x0a,0x44,0x05,0x1d,0x35,0x00,0x07,0x02,0x0b,0x19,0x1d,0xa3,0x00,0x09,0x09,0x1d,0x1b,0x1b,0xb5,0x06,0x20,0x00,0x43,0x8b -,0x8f,0x9a,0x2f,0xb7,0x8a,0x8b,0x88,0x80,0x80,0x8c,0xab,0x81,0x85,0x8a,0x8d,0x87,0x88,0x8c,0x8d,0x25,0x1e,0x94,0x80,0x58,0x16,0x18,0x10,0x14,0x0e,0x16,0x00,0x0c -,0x08,0x02,0x0a,0x05,0x04,0x00,0x15,0x16,0x02,0x18,0x8c,0x40,0x20,0x9d,0x80,0x8a,0x8b,0x89,0xa7,0x8b,0x83,0x80,0x80,0x81,0x9f,0x8b,0x85,0x84,0x80,0x9d,0x8e,0x2d -,0xa8,0x89,0x49,0x51,0x0c,0x27,0x06,0x0d,0x1f,0x00,0x1f,0x01,0x19,0x60,0x0f,0x07,0x00,0x11,0x06,0x00,0x00,0x0d,0x0b,0x01,0x03,0x13,0x0d,0x05,0x0b,0x04,0x33,0x29 -,0x0b,0x05,0x36,0xad,0x43,0x21,0x2b,0x29,0x40,0x96,0x3f,0x8e,0x8a,0x86,0x88,0x81,0x80,0x84,0x80,0x80,0x80,0x8a,0x8d,0x80,0x84,0x89,0x84,0x85,0x87,0x9e,0xe6,0x23 -,0xb2,0x94,0xac,0x1b,0x2f,0x09,0x19,0xae,0xae,0x0f,0x02,0x22,0x0a,0x0f,0x00,0x1f,0x1a,0x08,0x91,0x1c,0x0b,0x12,0x0d,0x19,0x0e,0x1f,0x19,0x11,0xae,0xd4,0x1a,0x12 -,0x9a,0xb3,0x1f,0x39,0x31,0xac,0x1a,0x37,0xee,0xaa,0x28,0xaf,0x34,0x45,0xb7,0x4a,0xaf,0x8e,0x80,0x8d,0x8c,0x87,0x98,0x9b,0x85,0x9c,0x95,0x34,0xb3,0x20,0x08,0xad -,0x9f,0x1b,0x0d,0x1c,0xb9,0x0e,0x11,0x2c,0x15,0x15,0x04,0x10,0x0f,0x0e,0x05,0x08,0x0c,0x05,0x10,0x08,0x0c,0x8b,0x99,0x95,0x81,0x90,0x86,0x87,0x84,0x80,0x82,0x80 -,0x8a,0x87,0x80,0x85,0x81,0x81,0x85,0x90,0xa9,0x98,0x8c,0xaf,0xb7,0x25,0x16,0x15,0x09,0x0e,0x05,0x08,0x03,0x03,0x07,0x03,0x02,0x04,0x11,0x03,0x08,0x05,0x0b,0x00 -,0x04,0x04,0x0d,0x0b,0x03,0x1c,0x22,0x18,0x0c,0xb8,0x09,0x3a,0x1f,0x23,0xa6,0xa6,0xb6,0xa1,0xa6,0x95,0x87,0x47,0x8b,0x92,0x88,0x8e,0x85,0x86,0x8d,0x80,0x83,0x80 -,0x82,0x84,0x87,0x8b,0x86,0x8c,0xa5,0x8c,0x97,0x91,0xa4,0x16,0xb2,0x1f,0x1e,0x1b,0x1b,0x09,0x0e,0x17,0x04,0x0a,0x0e,0x08,0x03,0x07,0x01,0x05,0x08,0x2b,0x0f,0xbe -,0x93,0xae,0xb7,0x27,0x9d,0x1e,0xd4,0x9d,0xae,0xa4,0xae,0xa8,0xe0,0xa9,0x8e,0xd1,0x38,0x60,0x2c,0xad,0x38,0x3e,0x5a,0xbf,0x1b,0xa4,0x29,0x40,0x18,0x0f,0x46,0x1d -,0x90,0x13,0x98,0x8e,0x1b,0xcc,0x3c,0x2d,0x2e,0x22,0xa8,0xae,0x1d,0x8f,0x8c,0x91,0x9f,0xad,0xbb,0x31,0xb6,0x2c,0x2e,0x1f,0x22,0x18,0x17,0x0e,0x0b,0x14,0x1d,0x17 -,0x0e,0x24,0x97,0x8c,0x96,0x81,0x8b,0x8b,0x82,0x81,0x88,0x8f,0x86,0x85,0x87,0x88,0x82,0x8a,0x89,0x86,0x87,0x9d,0x99,0x9d,0x3d,0x94,0x28,0x13,0x14,0x04,0x08,0x07 -,0x04,0x05,0x00,0x02,0x01,0x08,0x02,0x05,0x1f,0x07,0x05,0x07,0x0b,0x05,0x06,0x18,0x0b,0x05,0xb2,0x1e,0x15,0xa8,0x33,0xa8,0x3d,0x62,0x9e,0x22,0x91,0x91,0x97,0x8c -,0x9c,0x83,0x8f,0x92,0x8e,0x8a,0x9f,0x85,0x8d,0xa5,0x80,0x8e,0x8a,0x8c,0xae,0x9f,0x5b,0xaf,0x92,0x3b,0xa0,0x9c,0x8e,0x75,0x40,0x82,0xbf,0x22,0x98,0x1e,0x20,0xbc -,0x29,0x3c,0x2a,0x31,0x08,0x28,0x23,0x0d,0x16,0x18,0x8d,0x1c,0x3b,0x86,0x65,0x9e,0xa9,0x21,0x28,0x32,0x2c,0x13,0x0d,0x44,0x21,0x0e,0x2b,0x0f,0x12,0x0a,0x0c,0x11 -,0x0b,0x10,0x1a,0x16,0x19,0x28,0x0a,0x16,0x1c,0x0c,0x0d,0x12,0x9d,0x2e,0x16,0x83,0x95,0x57,0x95,0x9d,0xa6,0xd8,0x92,0x8c,0xa4,0x88,0x8c,0x91,0x89,0x9d,0x8e,0xae -,0xcf,0xa6,0x11,0x3b,0x50,0x1e,0x37,0x1f,0x27,0x17,0x25,0xc7,0x52,0x14,0xa6,0x84,0x45,0x8b,0x81,0x8c,0x8a,0x8d,0x86,0xab,0x96,0x81,0x93,0x8d,0x83,0x8a,0x89,0x8d -,0x88,0x90,0xb7,0x92,0xa5,0x28,0xd8,0x1f,0x0e,0x12,0x04,0x05,0x05,0x03,0x02,0x01,0x02,0x2d,0x0a,0x0a,0xe1,0x13,0x0e,0x0e,0x1b,0x08,0x07,0x0f,0x17,0x04,0x33,0x20 -,0x0c,0xdd,0x16,0x23,0x1e,0x39,0x58,0x1c,0x99,0xc6,0xef,0x94,0x9b,0xa9,0x4b,0xa1,0x38,0xb9,0x2f,0x8d,0x8e,0x31,0x84,0x8c,0xae,0x8c,0x8c,0x8c,0x99,0x96,0x85,0x94 -,0x83,0x85,0x88,0x87,0x8c,0x89,0x98,0x9b,0x8c,0xd9,0xae,0xa9,0x18,0x24,0x28,0x1d,0x15,0x1d,0x09,0x13,0x08,0x28,0x8f,0x0d,0x9e,0x91,0x2e,0x2e,0x27,0x3d,0x0c,0x0f -,0x31,0x09,0x0a,0xc4,0x17,0x19,0x3a,0x1c,0x15,0x19,0x4c,0x19,0x1c,0x2e,0x1f,0x15,0x1b,0x1b,0x08,0x15,0x0e,0x0a,0x08,0x09,0x93,0x12,0x41,0x87,0xfe,0x9d,0x99,0x96 -,0x9c,0x9f,0x8d,0x94,0xa8,0x87,0x93,0x8c,0x8e,0x95,0x93,0xb5,0x9f,0xc2,0xdd,0xa3,0xb1,0x4a,0x4b,0x2d,0x2f,0x1f,0x4d,0x1f,0x19,0x0e,0x9f,0xaf,0x15,0x85,0xa0,0x4b -,0x9a,0x9a,0x9c,0xaf,0x8c,0x87,0x97,0x85,0x82,0x89,0x82,0x81,0x83,0x87,0x86,0x88,0x99,0x98,0x95,0x30,0x2d,0x1a,0x0c,0x04,0x05,0x04,0x02,0x00,0x0d,0x12,0x00,0x23 -,0x16,0x04,0x0c,0x08,0x07,0x02,0x08,0x0d,0x00,0x0c,0x0e,0x03,0x1b,0x17,0x0f,0x17,0x16,0x2d,0x20,0x29,0x9e,0xb8,0xb1,0x9e,0xa9,0xbb,0xa9,0xaa,0xb8,0xf9,0x99,0x88 -,0x39,0x8a,0x81,0x95,0x88,0x8b,0x8b,0x94,0x8e,0x82,0x8f,0x8b,0x82,0x92,0x88,0x86,0x8b,0x91,0x98,0x94,0x7c,0x52,0xa6,0xd4,0xef,0x33,0x3d,0x1e,0x1e,0x21,0x22,0x14 -,0x1f,0x8c,0x15,0xc7,0x90,0x1f,0x2c,0x23,0x18,0x0b,0x0a,0x2d,0x0f,0x0c,0xbb,0x11,0x19,0x29,0x25,0x20,0x19,0x26,0x15,0x0e,0x1e,0x16,0x0d,0x0f,0x0f,0x0b,0x08,0x0b -,0x0a,0x07,0x0f,0x92,0x1b,0x37,0x88,0xae,0x9a,0x90,0x98,0xa9,0xbb,0x91,0x9d,0xc3,0x87,0x9d,0x9f,0x96,0xa2,0xa9,0xb0,0x9c,0xa3,0xb4,0xa9,0xa9,0xc5,0xb0,0xae,0x54 -,0x20,0x24,0x1b,0x13,0x0e,0x8e,0xc2,0x27,0x83,0xa4,0xab,0x91,0x9a,0xb8,0xe6,0x9e,0xa0,0x3e,0x8a,0x88,0x8e,0x86,0x8e,0x91,0x90,0x95,0x94,0x99,0x8f,0x8d,0x98,0xa0 -,0xdd,0x1b,0x18,0x10,0x05,0x08,0x02,0x4b,0x1a,0x08,0x9e,0x15,0x07,0x19,0x0e,0x08,0x0b,0x1e,0x26,0x0f,0xaa,0x3e,0x10,0x35,0x2d,0x1b,0x40,0x9e,0xa4,0xb4,0x9d,0x9f -,0x2d,0x3e,0x31,0x21,0x14,0x1d,0x11,0x13,0x0f,0x9c,0x9a,0x11,0x8f,0x9d,0x21,0xb1,0x9d,0xb1,0xaa,0x91,0x8c,0xc3,0x96,0x8f,0xb0,0x9a,0x9d,0xb5,0x9c,0x9d,0x9e,0x9b -,0xa9,0xa5,0x2e,0x49,0x2c,0x17,0x10,0x2e,0x17,0x2c,0x24,0x9b,0x97,0x1b,0x85,0x9b,0xbc,0x8d,0x8f,0x9a,0x95,0x8f,0x99,0x2f,0x9e,0xa5,0x14,0xc9,0x3d,0x1c,0x29,0x2c -,0x1d,0x10,0x0f,0x17,0x0b,0x0e,0x15,0x12,0x12,0x27,0x16,0x14,0x0b,0x3a,0xaa,0x0c,0x8d,0x90,0xae,0x91,0x90,0xb5,0x30,0x46,0x2b,0x12,0x21,0x4f,0x11,0x51,0x66,0x1a -,0x2c,0x19,0x14,0x16,0x15,0x2c,0x28,0xfe,0xac,0xb2,0xb1,0x9f,0x46,0x3b,0x37,0x93,0x8d,0xa4,0x80,0x89,0x90,0x86,0x8f,0xa5,0xac,0x9f,0x9c,0xca,0x99,0x95,0x9b,0x9f -,0x9f,0xa4,0x37,0xbe,0xad,0xbd,0xa0,0x99,0x96,0x9f,0xa7,0xf0,0x24,0x3c,0x12,0x0f,0x13,0xa4,0x5f,0x2e,0x94,0x1e,0x0f,0x34,0x12,0x09,0x1b,0x28,0x20,0x16,0xbb,0x30 -,0x17,0xec,0x19,0x1c,0x40,0x26,0xb2,0xa7,0x89,0x8a,0x9b,0xa4,0xc1,0xcf,0x3f,0x17,0x0b,0x0f,0x1d,0xb7,0x05,0x08,0x1c,0x06,0x02,0x05,0x06,0x07,0x0a,0x19,0x1c,0x11 -,0x42,0x2c,0xf8,0xa4,0xb8,0xa0,0x9c,0x90,0x8d,0x96,0x8e,0x98,0x8f,0x90,0x98,0x9a,0x95,0x90,0x9c,0xaa,0x8c,0x8b,0xdf,0x85,0x86,0xa1,0x8b,0x87,0x8e,0x8b,0x86,0x85 -,0x91,0x97,0x8a,0x9d,0x9e,0x8d,0xb3,0xb0,0xa6,0x39,0x1b,0x10,0x0b,0x09,0x0c,0x06,0x04,0x01,0x07,0x09,0x02,0x00,0x12,0x09,0x0b,0x37,0x0b,0x1f,0x8d,0x8b,0x8c,0x8a -,0x84,0x84,0x8b,0x8a,0x9b,0x9b,0x83,0x99,0x37,0x5f,0x10,0x0c,0x02,0x02,0x03,0x03,0x05,0x06,0x06,0x0b,0x11,0x0f,0x09,0x2c,0xa5,0x0d,0x9e,0x96,0xe2,0x95,0x8d,0x96 -,0xa9,0xa5,0x99,0xaf,0xad,0x8f,0x9a,0x8e,0x88,0x90,0x94,0x99,0xa7,0x9d,0xaa,0xaa,0x9b,0x98,0x8e,0x92,0x90,0x90,0x99,0x4b,0x95,0x89,0x31,0x90,0x8a,0x76,0x9e,0x9d -,0x2f,0x1d,0x19,0x23,0x10,0x07,0x16,0x19,0x1f,0x33,0x0f,0x13,0x13,0x16,0x11,0x06,0x13,0xd7,0x9d,0x90,0x8d,0x93,0x8f,0x83,0x97,0x97,0x82,0x9b,0x8a,0x84,0x40,0x3f -,0x3b,0x09,0x04,0x03,0x03,0x04,0x01,0x0c,0x10,0x0b,0x14,0x0d,0x0d,0x0d,0x0a,0x0f,0x0f,0x1c,0x4a,0x2c,0x48,0x26,0x1d,0x19,0x22,0x1e,0x30,0x86,0xab,0x99,0x82,0xb1 -,0x47,0xa1,0x4d,0x4e,0x5c,0x9a,0x8f,0x9c,0x89,0x86,0x8e,0x8b,0x86,0x93,0x8e,0x8c,0x8c,0x90,0x94,0x8e,0x99,0xb0,0xac,0x4e,0x1f,0x2b,0x33,0x09,0x35,0x95,0x0f,0x48 -,0x15,0x02,0x15,0x0e,0x0a,0x0f,0x11,0xa3,0x96,0xa8,0x8e,0x92,0x8b,0x80,0x86,0x88,0x86,0x86,0x86,0x90,0x9d,0xac,0x2d,0x17,0x0c,0x05,0x07,0x01,0x05,0x05,0x05,0x19 -,0x04,0x06,0x1a,0x04,0x08,0x1a,0x0e,0x1d,0x2a,0x40,0x51,0x1f,0xcf,0xc5,0x28,0xbe,0xa7,0xb4,0xa8,0x9e,0x9d,0xa5,0x4e,0x6d,0xc6,0x2d,0xaf,0x9d,0x98,0x97,0x8f,0x9e -,0xa0,0xa7,0x98,0x8f,0xae,0x89,0x89,0x94,0x8c,0x89,0x8e,0x98,0xba,0xa4,0xb6,0xe6,0xbd,0x24,0x32,0xa5,0xb5,0x17,0x0f,0x0d,0x1a,0x18,0x0b,0x0e,0x1d,0x4c,0x99,0x9c -,0xae,0x98,0x89,0x84,0x8c,0x8e,0x88,0x87,0x8f,0x8f,0x95,0x9a,0xab,0x28,0x2d,0x14,0x09,0x0b,0x08,0x04,0x08,0x05,0x03,0x03,0x07,0x0a,0x0b,0x16,0x1e,0x25,0x2e,0x35 -,0x2a,0x1f,0x1f,0x28,0x1f,0x2b,0xce,0xaf,0xac,0x9d,0x9c,0xab,0xae,0xd5,0x3a,0x32,0xe2,0xaf,0x9c,0x97,0x97,0x90,0x8f,0x99,0x9a,0x99,0x9f,0x98,0x98,0x97,0x91,0x8d -,0x8d,0x9c,0xbf,0xac,0x9f,0x63,0x40,0x53,0x37,0xbb,0xc4,0x17,0x0c,0x0d,0x14,0x13,0x0d,0x0c,0x13,0x30,0xac,0xab,0xc7,0xa5,0x8f,0x8a,0x8d,0x89,0x84,0x82,0x84,0x82 -,0x85,0x8d,0x9c,0xc2,0x1c,0x0c,0x1d,0x0f,0x05,0x10,0x0d,0x06,0x03,0x03,0x04,0x02,0x04,0x0b,0x0f,0x12,0x29,0x3a,0x22,0x1a,0x25,0x19,0x11,0x29,0x3a,0x3c,0xb0,0xa7 -,0xb7,0xb4,0xbd,0xee,0x3b,0x37,0xb1,0xae,0x9e,0x97,0x9f,0x9d,0x98,0x9e,0xad,0xa2,0x94,0x91,0x91,0x8f,0x91,0x8f,0x91,0x9f,0xb7,0xa2,0x91,0x97,0xab,0xa7,0xaa,0xd3 -,0x2e,0x19,0x0c,0x0e,0x1e,0x20,0x10,0x0f,0x1e,0x25,0x27,0x24,0x4e,0xc9,0xa4,0x8d,0x89,0x87,0x83,0x82,0x85,0x86,0x88,0x8b,0x95,0x9e,0xa7,0xdd,0x29,0x1c,0x0d,0x08 -,0x03,0x03,0x04,0x02,0x04,0x06,0x0a,0x0f,0x18,0x14,0x15,0x17,0x1a,0x17,0x1b,0x27,0x2b,0x4e,0xb0,0xcd,0xc5,0x42,0x2d,0x59,0x4a,0xba,0xab,0xac,0x9f,0x95,0x98,0xa9 -,0xa9,0xa0,0xb2,0xb1,0xa8,0x99,0x8e,0x8b,0x8e,0x99,0x90,0x8e,0x9c,0xa5,0x9a,0x93,0x8d,0x8f,0xa1,0xcc,0xbd,0xc4,0x1d,0x0e,0x11,0x1d,0x25,0x23,0x12,0x0f,0x12,0x11 -,0x0f,0x10,0x25,0xd1,0xaa,0x8f,0x89,0x8c,0x89,0x87,0x87,0x88,0x88,0x88,0x89,0x8a,0x8c,0xa1,0x39,0x1b,0x0e,0x08,0x03,0x04,0x04,0x06,0x08,0x08,0x08,0x08,0x08,0x0d -,0x0a,0x0c,0x19,0x21,0x2d,0x4c,0x49,0x3f,0x3a,0x2c,0x44,0x2f,0x32,0xb0,0x9e,0xa1,0x9a,0x9a,0xa5,0xb2,0xb5,0xc8,0xd2,0xaa,0xa0,0xa7,0x9d,0x8e,0x94,0xa9,0xaa,0xa0 -,0x9d,0x9a,0x9b,0xa0,0x9a,0x8c,0x8f,0xaa,0x53,0x50,0xcf,0x67,0x40,0x26,0x29,0xbf,0x5d,0x18,0x10,0x0f,0x0d,0x0d,0x11,0x1a,0x26,0xc7,0xa2,0x9f,0x9a,0x8e,0x8e,0x8b -,0x85,0x83,0x83,0x83,0x83,0x87,0x91,0x9e,0xc5,0x1d,0x14,0x0e,0x0c,0x0a,0x0b,0x09,0x06,0x05,0x06,0x06,0x06,0x0a,0x0d,0x0f,0x1b,0x25,0x1b,0x1b,0x1a,0x1d,0x1d,0x1f -,0x2d,0x4d,0xc1,0xa0,0x9c,0xa7,0xb3,0xab,0xa4,0xcc,0x69,0xac,0x9a,0x9e,0x9a,0x99,0x9a,0x96,0x9c,0xa7,0xaf,0x9b,0x8e,0x8f,0x93,0x90,0x8f,0x8f,0x9b,0xac,0x4c,0xb8 -,0x9f,0xc7,0x3c,0x6f,0xbf,0x30,0x1c,0x15,0x12,0x0c,0x0c,0x0f,0x12,0x18,0x29,0x6c,0xc5,0xb6,0xa3,0x96,0x95,0x8a,0x85,0x85,0x83,0x82,0x83,0x86,0x90,0x97,0xa6,0x30 -,0x22,0x19,0x10,0x0d,0x0d,0x08,0x05,0x03,0x04,0x04,0x04,0x07,0x0b,0x0e,0x18,0x1f,0x19,0x15,0x15,0x19,0x1b,0x2a,0x37,0x49,0xab,0x9d,0xa4,0xb3,0xa8,0xaf,0x51,0xda -,0xaa,0x9d,0x97,0x97,0x9a,0x9a,0xa0,0xb5,0xc3,0xb8,0xaa,0x9e,0x97,0x91,0x98,0x9d,0x92,0xa1,0xef,0xc4,0xad,0x9d,0x9d,0x99,0x94,0x9c,0xa9,0xbf,0x37,0x2d,0x2a,0x46 -,0xcd,0xba,0xab,0xc0,0xd9,0x3c,0x23,0x2e,0x21,0x1c,0x2e,0x33,0xbf,0x6c,0x2c,0x37,0x21,0x1d,0x1c,0x19,0x2a,0x29,0x28,0x32,0x2d,0x2c,0x27,0x21,0x2f,0x39,0x25,0x27 -,0x34,0xbc,0xb9,0x5c,0xc9,0xbf,0x51,0x3f,0x33,0x3c,0x67,0x37,0x4c,0xb8,0xbc,0xcc,0x35,0x30,0x32,0x6a,0xaf,0x27,0x38,0xbc,0xc8,0xb5,0x34,0xbd,0xbf,0x2a,0x2d,0x54 -,0x67,0x4f,0xa4,0xc2,0xc5,0x41,0x2c,0xbd,0xda,0xb5,0x9f,0x9b,0x98,0x98,0x9e,0x98,0x9e,0x9d,0x94,0x98,0x91,0x8f,0x95,0x97,0x9a,0xa1,0xad,0xab,0xad,0xbe,0xd4,0x4a -,0x38,0x29,0x23,0x22,0x1a,0x1b,0x1e,0x17,0x19,0x19,0x15,0x16,0x16,0x17,0x17,0x1a,0x1e,0x1a,0x1d,0x22,0x23,0x28,0x39,0x5f,0x5c,0xc4,0xb7,0xc1,0xd6,0xcc,0xce,0xce -,0xc3,0xc2,0xfe,0x3d,0x3c,0x2e,0x23,0x28,0x33,0x30,0x3b,0x6a,0x53,0x42,0x4c,0xd6,0xde,0xd4,0xb0,0xb0,0xb6,0xab,0xb0,0x4e,0x41,0x51,0x49,0xc4,0xbc,0xb1,0xa6,0xaa -,0xa9,0x9e,0x9b,0x95,0x92,0x93,0x8f,0x8e,0x90,0x8f,0x8f,0x8d,0x90,0x93,0x95,0x8f,0x89,0xda,0x25,0x1b,0xa5,0xa5,0x10,0x0e,0x10,0x3f,0x86,0x89,0x00,0x4c,0xa4,0x0c -,0xf8,0x0f,0x1a,0x5e,0x20,0x0b,0x00,0x03,0x00,0x08,0x07,0x03,0x0b,0x01,0x02,0x00,0x00,0x09,0x19,0x03,0x0b,0x0d,0x16,0xc2,0x0f,0x0a,0x27,0x9a,0x90,0xa5,0x35,0x8a -,0x80,0x83,0x88,0x86,0x80,0x80,0x80,0x87,0x86,0x89,0x42,0x99,0x80,0x80,0x80,0x87,0x8b,0x86,0x8b,0x92,0x81,0x80,0x80,0x83,0x9b,0x4a,0x3e,0x1a,0x1d,0x98,0x85,0x9f -,0x0b,0x03,0x05,0x06,0x06,0x0a,0x07,0x08,0x03,0x00,0x01,0x17,0x0b,0x00,0x02,0x04,0x05,0x00,0x01,0x01,0x03,0x01,0x01,0x00,0x03,0x07,0x05,0x00,0x01,0x00,0x01,0x00 -,0xce,0x80,0xd0,0x0d,0x01,0x0e,0x3a,0x23,0x89,0x80,0x81,0x87,0x19,0x2c,0x86,0x84,0x87,0x83,0x80,0x80,0x8b,0x8d,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x85,0x85 -,0x86,0x84,0x82,0x80,0x81,0x80,0x85,0x84,0x82,0x82,0x82,0x81,0x82,0x80,0x84,0x88,0x8a,0xab,0x45,0xb3,0xae,0x12,0x04,0x13,0x80,0xa7,0x01,0x04,0x00,0x0a,0x01,0x09 -,0x1f,0xc7,0x23,0x00,0x00,0x02,0x05,0x05,0x06,0x09,0x05,0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x1b,0x98,0x00,0x01,0x00,0x04,0x0e,0x01,0x0d,0x1a,0x1d,0x07,0x00,0x02 -,0x11,0x5d,0x2c,0x13,0x12,0x0f,0x0a,0x05,0x05,0x06,0x2d,0x80,0x8b,0x12,0x05,0x1c,0x8c,0xa6,0x9b,0x84,0x81,0x82,0x19,0x03,0x9f,0x80,0x80,0x80,0x80,0x80,0x87,0x98 -,0xa7,0x86,0x81,0x80,0x81,0x80,0x8d,0xf9,0x8b,0x8a,0x86,0x80,0x81,0x80,0x95,0x0f,0xa5,0x82,0x80,0x81,0x82,0x8f,0xf5,0x11,0x0a,0x1b,0x94,0x80,0x86,0x4a,0x00,0x03 -,0x0e,0x04,0x1b,0x9b,0x86,0x8e,0x06,0x00,0x0a,0xae,0x8e,0xa8,0x8f,0x8c,0xbd,0x19,0x12,0xb6,0x80,0x83,0x86,0x27,0x2f,0x80,0xba,0x43,0x98,0x86,0x80,0x98,0x14,0x1a -,0x97,0x86,0x90,0xa5,0x95,0x98,0x15,0x05,0x0e,0x86,0x88,0x07,0x00,0x00,0x04,0x02,0x03,0x0a,0x23,0x23,0x00,0x01,0x00,0x07,0x29,0x10,0x05,0x03,0x00,0x00,0x00,0x01 -,0x8f,0xab,0x00,0x02,0x00,0x04,0x00,0x03,0x06,0x2d,0x20,0x00,0x01,0x00,0x0c,0x2e,0x16,0x13,0x14,0x01,0x01,0x00,0x32,0x80,0xa6,0x0d,0x00,0x0c,0xcf,0xb8,0x9e,0x9b -,0x85,0x89,0xae,0xa1,0x88,0x80,0x80,0x80,0x83,0x87,0x8d,0x8b,0x84,0x80,0x81,0x80,0x8b,0x97,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x9e,0x96,0x80,0x81,0x80,0x84,0x8d -,0xc4,0x28,0x18,0x8c,0x80,0x81,0x85,0x29,0x8e,0x85,0x8a,0x83,0x85,0x80,0x80,0x82,0x8a,0x84,0x80,0x81,0x87,0x8f,0x94,0xa6,0xb3,0xa4,0x81,0x8c,0x25,0x06,0x02,0x1a -,0x0a,0x06,0x02,0x04,0x05,0x00,0x01,0x00,0x0d,0x0e,0x03,0x00,0x00,0x00,0x01,0x00,0x0e,0x18,0x00,0x01,0x00,0x01,0x00,0x02,0x02,0x0f,0x1f,0x05,0x01,0x00,0x0d,0x33 -,0x1c,0x07,0x0c,0x07,0x07,0x00,0x1d,0x8f,0x27,0x1b,0x09,0x9c,0x8d,0x99,0x9c,0x96,0x82,0x85,0x90,0x92,0x81,0x80,0x81,0x9d,0x48,0x25,0x4f,0xaf,0x8c,0x80,0x8a,0x9c -,0x12,0xb9,0x88,0x8b,0x85,0x86,0x82,0x89,0xb9,0x2f,0x96,0x85,0x85,0xa3,0x23,0x0e,0x08,0x0f,0xb5,0x80,0x94,0x3e,0x07,0x0c,0xc8,0x2f,0x49,0x42,0x94,0x8c,0xe3,0x14 -,0x5b,0x8d,0x8c,0x16,0x0a,0x06,0x02,0x09,0x18,0x8a,0xa2,0x0f,0x01,0x03,0x23,0x47,0xaf,0x3f,0x98,0x98,0x0e,0x02,0x12,0x8e,0x87,0xb5,0x1a,0x0c,0x06,0x08,0x18,0x83 -,0x82,0x8a,0x1b,0x08,0xa4,0xb9,0xac,0xcb,0x90,0x85,0xa3,0x0f,0x14,0xdb,0x94,0xc3,0x0f,0x0a,0x05,0x10,0x23,0x87,0x80,0x82,0x8e,0xca,0x85,0x81,0x80,0x81,0x80,0x80 -,0x80,0x87,0x8a,0x81,0x80,0x81,0x88,0xae,0x15,0x1d,0x1d,0x8e,0x82,0xa0,0x17,0x00,0x04,0x04,0x05,0x08,0x0f,0xbf,0x1f,0x06,0x00,0x03,0x0d,0x0c,0x03,0x03,0x00,0x01 -,0x00,0x03,0x49,0x1e,0x17,0x04,0x0a,0x33,0x1c,0x2b,0x1c,0x96,0x8e,0xa7,0x1f,0x5d,0x8a,0x8a,0xa8,0x1f,0x1d,0x1a,0x2f,0xd1,0x87,0x80,0x83,0x9c,0x1b,0x99,0x8c,0x8a -,0x86,0x82,0x80,0x88,0xc9,0x1c,0x99,0x88,0x89,0xa2,0x32,0x13,0x0b,0x0c,0x20,0x82,0x85,0x89,0x18,0x0a,0x4b,0x24,0x4f,0x27,0x98,0x8c,0x3f,0x09,0x02,0x11,0x3c,0x28 -,0x10,0x0c,0x05,0x07,0x04,0x15,0x92,0xaf,0x24,0x01,0x0c,0x26,0x36,0xba,0xba,0x97,0xa3,0x1a,0x07,0x11,0xb8,0x9d,0x2f,0x14,0x0c,0x06,0x08,0x0b,0x9d,0x82,0x8e,0xb5 -,0x09,0x28,0xc5,0xa3,0x9d,0x96,0x88,0x8e,0xce,0x16,0x37,0x91,0x89,0x8d,0x97,0xaa,0x2f,0x1f,0x19,0x9b,0x8a,0x96,0xb6,0x07,0x19,0x15,0x17,0x0d,0x0d,0x2a,0x3f,0x19 -,0x0a,0x15,0xdd,0x9a,0x9a,0x92,0x92,0x94,0x97,0x9b,0x84,0x80,0x80,0x84,0x96,0x85,0x89,0x89,0x91,0x8f,0x85,0x85,0x98,0x2c,0x32,0x9d,0xa0,0x34,0x19,0x07,0x00,0x01 -,0x00,0x15,0xb4,0x21,0x0b,0x00,0x03,0x01,0x04,0x03,0x0b,0x1c,0x17,0x05,0x01,0x06,0x22,0xce,0x30,0x17,0x0e,0x04,0x07,0x08,0x9e,0x84,0x8f,0xbd,0x08,0xdb,0xbf,0xa2 -,0xa2,0x91,0x82,0x83,0x8c,0xa0,0x8c,0x82,0x82,0x85,0x8d,0x92,0xca,0x47,0x2c,0x8c,0x80,0x82,0x8e,0x1c,0xa5,0xab,0x9b,0xab,0x91,0x81,0x86,0x9a,0x29,0xc1,0x8e,0x91 -,0xa7,0x2a,0x16,0x06,0x04,0x03,0x3d,0x8a,0xa0,0x1e,0x00,0x0d,0x0d,0x1a,0x1f,0x45,0x9b,0xae,0x14,0x03,0x0a,0x2a,0x26,0x13,0x0c,0x0e,0x05,0x04,0x03,0x22,0x8b,0x9e -,0x4d,0x04,0x1e,0x2f,0x2c,0x17,0x2a,0x97,0x97,0xc0,0x11,0x1d,0xa0,0x97,0xd4,0x1d,0x2c,0x17,0x0f,0x0d,0x59,0x80,0x85,0x8a,0x22,0x9d,0x8e,0x8f,0x91,0x8e,0x82,0x83 -,0x92,0x1f,0x1a,0xb2,0x9f,0x39,0x1a,0x0f,0x05,0x03,0x03,0x0e,0x8c,0x91,0x8e,0x17,0x29,0xa9,0xaf,0x8f,0x8d,0x80,0x82,0x85,0x97,0x9d,0x89,0x82,0x83,0x84,0x87,0x98 -,0xdb,0xda,0xb2,0x81,0x85,0x89,0x26,0x13,0x1c,0x09,0x0b,0x06,0x13,0x1b,0x0a,0x00,0x00,0x08,0x12,0x09,0x06,0x04,0x05,0x00,0x03,0x01,0xaf,0xa8,0x1d,0x09,0x04,0x23 -,0x13,0x17,0x0f,0x5f,0x9a,0x3a,0x12,0x12,0xa5,0x8d,0x9d,0xb5,0xce,0xbe,0x22,0x3c,0xc7,0x83,0x81,0x82,0x95,0xb6,0x86,0x94,0x8e,0x92,0x89,0x83,0x8c,0xac,0xc3,0x94 -,0x85,0x8a,0x8f,0x9d,0xb8,0x19,0x1e,0x23,0x8a,0x83,0x87,0x9f,0x11,0x63,0x1c,0x28,0x1e,0xc4,0x98,0xa1,0x26,0x0e,0x19,0xbb,0xc2,0x45,0x1c,0x0c,0x01,0x04,0x00,0x25 -,0x90,0xa6,0x1e,0x00,0x0a,0x05,0x0d,0x13,0x34,0x99,0x9c,0x27,0x0d,0x1b,0x9c,0x94,0xa4,0x2b,0x15,0x04,0x07,0x06,0xc3,0x86,0x8f,0xb7,0x04,0x18,0x18,0x45,0xb5,0x9b -,0x88,0x8b,0xa3,0x2a,0xb0,0x88,0x86,0x8a,0x91,0xa3,0x26,0x2c,0x2c,0x99,0x82,0x8d,0xbe,0x06,0x1b,0x17,0x16,0x1a,0x26,0x9a,0x9b,0x44,0x1b,0x1e,0x9f,0x94,0x93,0x98 -,0xa6,0x2e,0x2a,0x3f,0x8f,0x80,0x82,0x82,0x9f,0x8a,0x8b,0x8a,0x85,0x87,0x80,0x83,0x8d,0x38,0x27,0x9d,0xaf,0x2f,0x0d,0x04,0x00,0x01,0x00,0x09,0x59,0x26,0x0f,0x00 -,0x04,0x04,0x08,0x0d,0x18,0xb0,0x3a,0x0b,0x02,0x07,0x1c,0x2e,0x21,0x0d,0x08,0x00,0x05,0x03,0xbe,0x87,0x8a,0x99,0x19,0x9e,0xa3,0x97,0x99,0x91,0x82,0x86,0x8c,0xbf -,0x9b,0x88,0x87,0x88,0x98,0xa3,0x20,0x29,0x40,0x8b,0x80,0x81,0x8b,0xd1,0x94,0x97,0x95,0x99,0x96,0x86,0x8c,0xb1,0x16,0x3a,0x94,0x9a,0xa8,0x1c,0x16,0x06,0x0d,0x18 -,0x8d,0x84,0x8d,0x4b,0x10,0x69,0x1a,0x1b,0x1d,0x38,0xab,0x1b,0x07,0x03,0x0e,0x1f,0x15,0x0f,0x07,0x03,0x01,0x06,0x13,0x90,0x97,0xb0,0x14,0x11,0x38,0x1a,0x29,0x21 -,0x4c,0xa7,0x25,0x13,0x0e,0xe6,0xa5,0xb0,0xee,0x2a,0x1e,0x12,0x23,0xbc,0x84,0x8a,0x8c,0x3e,0xab,0x96,0xa7,0x97,0x9f,0x8c,0x88,0x9b,0xc7,0x3c,0x94,0x92,0x9e,0xc0 -,0x1e,0x0e,0x06,0x09,0x2f,0x89,0x93,0xa8,0x0d,0x31,0x2e,0x1e,0x2d,0x50,0x8a,0x89,0x95,0xa0,0x8e,0x83,0x82,0x82,0x85,0x84,0x8f,0x9d,0x94,0x87,0x81,0x88,0x9d,0x12 -,0x2e,0x0f,0x07,0x06,0x03,0x13,0x0d,0x06,0x00,0x04,0x0e,0x0f,0x15,0x13,0x0b,0x05,0x01,0x05,0xad,0x95,0xac,0x0e,0x0a,0x20,0x10,0x18,0x1c,0xae,0x8a,0x9f,0x2f,0x1d -,0xa3,0x88,0x8f,0x96,0xbe,0x1c,0x11,0x0e,0x4d,0x8a,0x8d,0x9a,0x22,0x65,0xac,0x49,0xbe,0xac,0x8b,0x85,0x8f,0xb3,0x2a,0x99,0x8a,0x89,0x90,0xc7,0x16,0x08,0x04,0x4d -,0x99,0x9d,0x25,0x0e,0x39,0x19,0x1f,0x1d,0xae,0x89,0x8d,0xbc,0x28,0xd8,0x93,0x8f,0x93,0xa5,0x31,0x19,0x0a,0x17,0x8f,0x8e,0x91,0x2a,0xad,0x9e,0x3f,0x3e,0x1b,0x9e -,0x8c,0x94,0x32,0x17,0x1a,0x3c,0x41,0xca,0x27,0x13,0x0a,0x04,0x1e,0x93,0x92,0xc9,0x10,0x4a,0x5b,0x2d,0x1a,0x19,0x9a,0x9c,0x5d,0x11,0x17,0x4f,0x42,0x25,0x35,0x2b -,0x2c,0x10,0x0e,0x9f,0x9d,0xaf,0x18,0x17,0xad,0x31,0x24,0x15,0x65,0x8c,0x8f,0x9d,0xc9,0x98,0x8e,0x8f,0x91,0x9b,0xb4,0x55,0x19,0xdc,0x8f,0x98,0xad,0x14,0xfe,0xc7 -,0xd0,0xb6,0x4c,0x95,0x8b,0x87,0x8b,0x8e,0x89,0x8e,0x95,0x98,0xab,0xba,0x33,0x1d,0xc3,0xba,0xb2,0x23,0x23,0xaa,0x3c,0x7e,0x2a,0x56,0x99,0x9c,0x9b,0xb3,0x4a,0xc9 -,0x19,0x1a,0x14,0x08,0x09,0x07,0x0b,0x1f,0x14,0x16,0x0c,0x1c,0xbb,0x46,0x45,0x17,0x18,0xd0,0x9f,0x9b,0xa8,0x74,0x31,0x15,0x15,0x15,0x0d,0x16,0x13,0x1a,0x52,0x27 -,0x1c,0x14,0xbd,0x96,0x8f,0x94,0xae,0xac,0x90,0x89,0x88,0x84,0x85,0x8d,0xa8,0xb7,0xb8,0x4d,0xdf,0x23,0x22,0x1b,0x0d,0x05,0x07,0x0b,0x09,0x0e,0x0e,0x0b,0x07,0x0b -,0x12,0x2b,0xce,0xba,0x23,0x1f,0x24,0x21,0x2a,0xb2,0xbd,0xa4,0xc3,0x28,0x20,0xaf,0x91,0x8e,0x8b,0x8d,0x91,0x90,0x86,0x88,0x83,0x83,0x85,0x8b,0x8f,0x96,0x9f,0xb3 -,0xa8,0x2f,0xcc,0x4b,0x1f,0x10,0x25,0xb6,0x99,0x8f,0x9e,0xf5,0x40,0x9b,0x93,0x8c,0x90,0x9d,0x2d,0x2a,0x1a,0x15,0x16,0x1c,0x0b,0x0b,0x09,0x08,0x04,0x0b,0x11,0x18 -,0x21,0x13,0x0d,0x0e,0x2b,0x2c,0x2d,0x48,0x5d,0x2b,0x31,0x34,0xbc,0xae,0x9d,0xb4,0xa0,0xa1,0x3e,0x22,0xad,0x90,0x90,0x9d,0xe1,0x29,0x37,0x9f,0x96,0x8d,0x93,0xad -,0xda,0x9f,0x97,0xa0,0xc5,0xad,0x35,0x3f,0x1c,0x0f,0x0e,0x20,0x38,0xe1,0xac,0xc8,0x3e,0xaf,0x97,0x91,0x8b,0x88,0x85,0x88,0x87,0x8a,0x8b,0x8c,0x8b,0x99,0x90,0x98 -,0xaf,0xd1,0x97,0x90,0x93,0x9b,0xc6,0x4e,0xa3,0x95,0xb1,0x3b,0x2d,0x25,0x13,0x11,0x09,0x08,0x03,0x02,0x00,0x03,0x03,0x01,0x00,0x04,0x03,0x06,0x08,0x07,0x07,0x0e -,0x1d,0x1c,0x25,0x4b,0xb0,0x4a,0x3b,0x2c,0xe0,0xcb,0xb9,0x34,0xb2,0xaf,0xf0,0xc0,0x98,0x92,0x99,0x94,0x97,0x8f,0x8a,0x86,0x89,0x8f,0x8d,0x8c,0x91,0x8e,0x91,0x97 -,0x98,0x94,0x97,0x8f,0x98,0xad,0xca,0x99,0x91,0x98,0x99,0xa1,0x4c,0xf0,0xa6,0xa9,0xaa,0xa8,0xbf,0x3b,0x60,0x30,0x1f,0x1b,0x1e,0x0d,0x0f,0x14,0x0c,0x08,0x11,0x10 -,0x0b,0x0d,0x0d,0x0b,0x1a,0x37,0x3e,0x30,0xb1,0xa4,0xdc,0xb9,0x2f,0x2f,0x2e,0x30,0x17,0x18,0x16,0x09,0x07,0x1a,0x26,0x24,0x28,0x27,0x26,0xaa,0x8d,0x92,0x97,0x92 -,0x93,0x9d,0xa1,0xdf,0x64,0x43,0x4f,0x21,0x38,0xe6,0x2d,0x26,0xb3,0x9b,0x92,0x8b,0x8c,0x8d,0x89,0x83,0x86,0x83,0x82,0x81,0x85,0x89,0x8e,0x8c,0x8a,0x8c,0x9c,0xa0 -,0x9f,0x42,0x2f,0xb4,0xe8,0x1f,0x17,0x0f,0x0d,0x15,0x17,0x0c,0x09,0x0a,0x0b,0x07,0x08,0x05,0x05,0x05,0x05,0x03,0x06,0x07,0x05,0x03,0x08,0x0b,0x0b,0x0e,0x12,0x12 -,0x1e,0xbe,0x4a,0xb1,0x9d,0x98,0x9c,0x98,0x91,0x8d,0x93,0x9b,0xce,0xb6,0x97,0x9a,0x9f,0x99,0x96,0xae,0xae,0xa0,0x96,0x8d,0x88,0x8c,0x8a,0x87,0x83,0x88,0x89,0x89 -,0x8a,0x8d,0x91,0xa2,0xb9,0xac,0x4a,0x26,0x29,0x3a,0x1f,0x1e,0x24,0x27,0xd8,0x9e,0xb9,0x3f,0x4e,0xbd,0x3a,0x32,0x2d,0x1f,0x13,0x09,0x04,0x06,0x0c,0x0b,0x07,0x06 -,0x0a,0x0a,0x12,0x1c,0x1f,0x2a,0xc1,0xe9,0x5d,0x4e,0xbd,0x57,0x2d,0x25,0x1e,0x20,0x1c,0x10,0x0b,0x17,0x1f,0x19,0x15,0x1d,0x1f,0x2f,0x3d,0x57,0xb7,0x9c,0xa1,0xd0 -,0xab,0x94,0x8f,0x8d,0x8b,0x8e,0x8d,0x8e,0x8c,0x8e,0x8a,0x89,0x8e,0x8f,0x8b,0x88,0x89,0x88,0x8c,0x8c,0x87,0x85,0x87,0x87,0x87,0x88,0x8a,0x89,0x93,0xab,0x3d,0x1a -,0x0a,0x06,0x09,0x06,0x03,0x01,0x02,0x03,0x04,0x03,0x04,0x0a,0x0d,0x0a,0x11,0x18,0x19,0x11,0x0f,0x10,0x15,0x11,0x0b,0x05,0x06,0x0a,0x0c,0x0b,0x0e,0x23,0x23,0x3b -,0xcd,0x9c,0x92,0x8e,0x8f,0x8f,0x88,0x86,0x88,0x8d,0x8e,0x8c,0x8c,0x9a,0xb6,0xc8,0xae,0xa7,0xaa,0xaf,0x9c,0x9a,0x99,0x9d,0x97,0x8c,0x8a,0x8d,0x8f,0x89,0x88,0x87 -,0x8c,0x91,0x96,0x94,0x9b,0xbd,0x27,0x1d,0x26,0x1a,0x10,0x10,0x18,0x12,0x0a,0x0c,0x15,0x22,0x2b,0x1d,0x24,0x34,0xc0,0xb9,0x32,0x28,0x24,0x1e,0x12,0x0e,0x0d,0x0f -,0x0d,0x07,0x07,0x0c,0x15,0x13,0x15,0x1e,0x47,0xa3,0xa6,0xbd,0xa9,0x9c,0x9c,0xad,0xae,0xaf,0xe8,0x1b,0x0c,0x0d,0x0f,0x17,0x15,0x10,0x1b,0xee,0xa9,0x9c,0x96,0x8c -,0x8b,0x89,0x88,0x84,0x81,0x82,0x82,0x85,0x84,0x85,0x88,0x8c,0x8d,0x8f,0x8f,0x8d,0x8e,0x98,0x99,0x97,0x9e,0x9d,0x9e,0xa0,0xae,0x3f,0x1d,0x24,0x2f,0x24,0x17,0x0e -,0x0b,0x07,0x06,0x05,0x04,0x03,0x03,0x03,0x02,0x02,0x04,0x05,0x05,0x05,0x07,0x0e,0x17,0x19,0x1e,0x4c,0xaa,0x9a,0x95,0x9c,0xad,0xc5,0xcd,0x6a,0xce,0x62,0x3d,0x33 -,0x1e,0x26,0xba,0xa2,0x9d,0x9c,0x94,0x8c,0x87,0x86,0x86,0x85,0x84,0x85,0x88,0x8a,0x8d,0x95,0xa9,0xa3,0x9c,0xad,0xc4,0xc5,0xc4,0xc4,0xa0,0x9f,0xa9,0xa2,0xa9,0xa1 -,0xa0,0x9e,0x9d,0xa3,0xac,0xcf,0x4f,0x47,0x29,0x1e,0x1c,0x13,0x16,0x0f,0x0b,0x0b,0x0b,0x0a,0x0b,0x0d,0x0c,0x0b,0x0b,0x11,0x22,0x39,0x2f,0x46,0xbd,0xe6,0xad,0xa8 -,0xae,0xd7,0x5b,0x2a,0x18,0x18,0x12,0x12,0x11,0x0e,0x0d,0x14,0x14,0x11,0x16,0x2b,0xaf,0x98,0x98,0xa4,0x97,0x8e,0x8d,0x8b,0x8a,0x88,0x8b,0x96,0x9c,0x92,0x8b,0x8e -,0x90,0x8d,0x8f,0x8e,0x88,0x89,0x89,0x86,0x86,0x86,0x85,0x87,0x89,0x89,0x8c,0x8f,0x96,0x9e,0xbc,0x2b,0x1e,0x10,0x0f,0x11,0x07,0x02,0x03,0x03,0x02,0x02,0x03,0x03 -,0x03,0x02,0x02,0x08,0x0e,0x0d,0x0f,0x17,0x1f,0x28,0x55,0x43,0x32,0x36,0x28,0x1e,0x1f,0x20,0x17,0x12,0x12,0x12,0x15,0x1f,0x29,0x4e,0xa6,0x9a,0x8e,0x88,0x86,0x88 -,0x86,0x82,0x82,0x84,0x86,0x89,0x8e,0x92,0x98,0x9d,0x9a,0xa0,0x5d,0x55,0xbb,0xad,0xad,0xa1,0x9d,0x9c,0x98,0x99,0x94,0x8b,0x8b,0x98,0x9a,0x92,0x96,0x9e,0x9f,0xac -,0xad,0xdc,0x30,0x28,0x19,0x0e,0x07,0x06,0x08,0x08,0x05,0x04,0x05,0x08,0x0b,0x0f,0x12,0x1c,0x27,0x25,0xc8,0x9a,0x9b,0x9f,0xa9,0xae,0xbd,0x3e,0x20,0x12,0x14,0x16 -,0x11,0x0b,0x0b,0x0e,0x0d,0x0e,0x18,0x20,0x24,0x2b,0x4b,0xae,0x9c,0x99,0x99,0x9c,0x93,0x8c,0x8b,0x8a,0x8a,0x88,0x88,0x89,0x87,0x84,0x85,0x87,0x8b,0x8c,0x8b,0x8d -,0x94,0x90,0x90,0x91,0x8f,0x91,0x90,0x8e,0x91,0x9a,0x94,0x8c,0x8e,0x9f,0xbb,0x28,0x26,0x1d,0x0e,0x07,0x05,0x02,0x00,0x00,0x01,0x02,0x02,0x01,0x01,0x03,0x07,0x0b -,0x0a,0x0e,0x1b,0x26,0x25,0x38,0x4e,0xbc,0x67,0x4a,0x48,0x4c,0xd4,0x6d,0x3b,0x46,0xb6,0xa8,0xbd,0x2b,0x2a,0x3e,0x56,0xf3,0xa7,0xa7,0x9e,0xa3,0xaa,0x9a,0x8c,0x89 -,0x88,0x88,0x88,0x86,0x85,0x83,0x86,0x86,0x89,0x8c,0x99,0x9f,0xa0,0xa8,0x58,0x1f,0x24,0x24,0x18,0x18,0x1e,0x36,0x1f,0x3c,0x8b,0x85,0x0f,0x13,0x80,0x97,0x98,0x9c -,0x22,0x1c,0x08,0x0b,0x05,0x11,0x03,0x00,0x02,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x02,0x03,0x04,0x09,0x0c,0x12,0x1e,0x2e,0x9f,0x94,0x8a,0x84,0x85,0x87,0x82,0x80 -,0x84,0x87,0x83,0x80,0x80,0x84,0x87,0x8a,0x8d,0x8c,0x89,0x86,0x88,0x87,0x85,0x83,0x87,0x89,0x83,0x82,0x85,0x87,0x88,0x8d,0x8d,0x94,0xad,0x46,0x21,0x19,0x0e,0x07 -,0x05,0x03,0x04,0x02,0x01,0x02,0x01,0x01,0x01,0x01,0x01,0x04,0x03,0x02,0x03,0x06,0x08,0x07,0x09,0x08,0x0a,0x0b,0x0b,0x09,0x0b,0x0e,0x09,0x07,0x06,0x0c,0x0f,0x0c -,0x10,0x10,0x1a,0x15,0x31,0xbb,0x9d,0x8d,0x8d,0x84,0x84,0x82,0x83,0x82,0x81,0x81,0x80,0x81,0x82,0x82,0x81,0x84,0x83,0x83,0x88,0x86,0x8c,0x8f,0x87,0x86,0x8a,0x86 -,0x83,0x81,0x82,0x87,0x81,0x81,0x81,0x81,0x81,0x80,0x81,0x82,0x81,0x87,0x88,0x8b,0x8e,0x8b,0xa3,0xa7,0xb3,0x15,0x10,0x08,0x23,0x19,0x05,0x0f,0x09,0x0e,0x05,0x06 -,0x0f,0x08,0x07,0x08,0x05,0x04,0x01,0x05,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x06,0x04,0x05,0x0d,0x03,0x06,0x0b,0x0c,0x0a -,0x0a,0x19,0x17,0x09,0x0e,0x16,0x13,0x0d,0x12,0x17,0x1c,0x0a,0x16,0x9e,0x30,0x99,0x90,0x8e,0x8f,0x8c,0x82,0x85,0x85,0x82,0x83,0x85,0x84,0x82,0x81,0x84,0x81,0x82 -,0x83,0x86,0x89,0x87,0x86,0x8c,0x83,0x81,0x8a,0x82,0x81,0x81,0x83,0x83,0x80,0x83,0x83,0x81,0x83,0x82,0x83,0x82,0x87,0x8b,0x84,0x8b,0x8e,0x8d,0x8c,0x96,0xaa,0x37 -,0x96,0x95,0x47,0x8e,0x8f,0x92,0xa3,0x9e,0x99,0x40,0xad,0x9f,0x5b,0xea,0x2b,0x33,0x18,0x12,0x2f,0x0d,0x11,0x0b,0x09,0x08,0x05,0x04,0x11,0x13,0x0a,0x39,0x24,0x24 -,0x1d,0x39,0x56,0x17,0xcc,0x37,0x16,0x1d,0x19,0x1f,0x12,0x13,0x0f,0x06,0x08,0x05,0x02,0x03,0x01,0x02,0x09,0x02,0x04,0x08,0x06,0x07,0x04,0x08,0x04,0x01,0x07,0x03 -,0x03,0x04,0x03,0x03,0x00,0x03,0x01,0x02,0x01,0x02,0x01,0x01,0x00,0x04,0x0b,0x03,0x0d,0x10,0x12,0x11,0x15,0x39,0x19,0x34,0xaf,0x2d,0xde,0xbc,0xa3,0xb1,0xb4,0x97 -,0x9b,0x94,0x90,0x92,0x8c,0x8a,0x8c,0x83,0x84,0x84,0x80,0x81,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x81,0x81,0x81,0x81,0x84,0x83,0x85 -,0x86,0x80,0x86,0x82,0x80,0x82,0x81,0x83,0x81,0x85,0x87,0x81,0x8a,0x89,0x8a,0x8f,0x95,0x9d,0x98,0x42,0x2c,0x28,0x15,0x0f,0x0e,0x05,0x12,0x14,0x08,0x1a,0x10,0x11 -,0x09,0x09,0x0d,0x03,0x07,0x07,0x03,0x04,0x02,0x02,0x00,0x01,0x02,0x00,0x02,0x01,0x00,0x00,0x01,0x00,0x07,0x03,0x08,0x0d,0x0a,0x0c,0x07,0x16,0x15,0x12,0x37,0x1d -,0x1a,0x1c,0x1e,0x23,0x1b,0xcc,0x25,0x1f,0x26,0x19,0x12,0x1d,0x18,0x2b,0xaa,0x28,0x9f,0xa4,0xa7,0xa4,0x98,0x8e,0x9e,0x98,0x92,0xa2,0x99,0x98,0x93,0x9d,0x9c,0x94 -,0xae,0xa0,0xa8,0xcd,0xe3,0xce,0x2e,0x96,0xab,0xa2,0x89,0x8d,0x8a,0x8f,0x8a,0x8d,0x94,0x85,0x8b,0x8d,0x8b,0x93,0x92,0xa3,0x91,0x9f,0xb3,0xa6,0x42,0x1c,0x13,0x0b -,0x1a,0x4e,0x1a,0xb5,0xbe,0x5f,0x53,0xf1,0xa2,0xdf,0xa2,0x9c,0x57,0xa7,0xa9,0xb7,0xc8,0xaf,0xad,0x25,0x28,0x1a,0x10,0x0f,0x14,0x0e,0x27,0x23,0x15,0x56,0x37,0xb3 -,0xde,0xa1,0x9a,0xac,0x94,0x99,0xa8,0x92,0x96,0x9a,0x9c,0x97,0xa0,0xb5,0xaf,0xc6,0x3b,0x2b,0x2f,0x1b,0x9c,0x47,0xae,0x97,0xa3,0x94,0xa4,0x8f,0x96,0x9a,0x8a,0x99 -,0x9c,0x96,0xa1,0xa6,0x61,0xa6,0x35,0x35,0x27,0x1b,0x0f,0x0d,0x0d,0x0d,0x24,0x0f,0x3a,0xeb,0x39,0xbd,0xb4,0x9e,0xb2,0xa4,0x95,0xba,0x9d,0x99,0xa4,0x9e,0x9e,0x99 -,0xe7,0xbe,0xc6,0x2d,0x18,0x22,0x11,0x2b,0xd9,0x17,0xa5,0xbc,0xb1,0xd1,0x7c,0xb7,0x25,0xb3,0xb4,0x1f,0xb5,0xba,0x4e,0x2b,0x3d,0x57,0x15,0x2b,0x20,0x13,0x0f,0x19 -,0x0b,0x2b,0x30,0x1d,0xa9,0x43,0xab,0xc2,0xb3,0xab,0x41,0x9a,0x99,0xd4,0x9c,0xb3,0xae,0x54,0xab,0xb2,0x26,0xc1,0x33,0x1a,0x1c,0x19,0x10,0xc6,0x1b,0x3e,0xac,0x3a -,0xaf,0xe8,0xa1,0xb9,0xc5,0x97,0xdd,0xbb,0x9a,0xb0,0xad,0xd2,0x9c,0x68,0x4a,0xa8,0x36,0x22,0x36,0x1d,0x1c,0xae,0x20,0xb7,0xa8,0xad,0xa3,0xcf,0xa0,0x3e,0xcd,0x9c -,0x34,0xcc,0xae,0x55,0x4e,0x4d,0xa5,0x2d,0x42,0xee,0x1d,0x12,0x1a,0x12,0x16,0xb1,0x1c,0xc5,0xb3,0x4d,0xc6,0x45,0xa6,0x38,0xc2,0xa4,0x25,0xc7,0xb7,0x47,0x3e,0xe7 -,0xa6,0x20,0x3c,0x2e,0x18,0x17,0x22,0x16,0x1a,0xa7,0x1d,0xbd,0xab,0xb6,0xac,0xbc,0x9b,0xc8,0x9f,0x94,0xd5,0x9c,0x9a,0x9e,0xa2,0xa7,0x96,0xfc,0xa2,0xad,0x2d,0x2a -,0x4a,0x19,0x2c,0xab,0x1d,0xad,0xc2,0xc8,0xce,0x6b,0xa6,0x28,0xae,0xa2,0x2c,0xb3,0x68,0x6b,0x43,0xd1,0xaf,0x25,0xb3,0x38,0x1a,0x1a,0x1d,0x0f,0x1e,0xcc,0x18,0xae -,0xb5,0x78,0xfc,0xb5,0xa2,0x34,0xa4,0xa5,0x3d,0xa5,0xad,0xbf,0xb9,0xae,0xb6,0x27,0xbd,0x29,0x19,0x15,0x18,0x0c,0x1e,0xdd,0x13,0xaa,0xb3,0x65,0x56,0xb9,0xa6,0x3d -,0x9d,0x9b,0x68,0x9a,0xa7,0xb1,0xae,0xa3,0x9f,0x2f,0xad,0x34,0x21,0x1e,0x23,0x13,0x2b,0xae,0x19,0xa9,0xad,0xc1,0xb1,0xac,0x9b,0xd2,0x9d,0x9e,0x52,0x9d,0xb3,0xa8 -,0xe4,0xc3,0xaa,0x24,0xb7,0x22,0x1d,0x19,0x19,0x10,0x27,0xdd,0x18,0xa2,0xb2,0xba,0xb6,0xac,0xa0,0x50,0x9c,0xa0,0x38,0xa0,0xc8,0xbb,0x6f,0xb9,0xb8,0x22,0x7e,0x22 -,0x1a,0x16,0x1d,0x0c,0x35,0x50,0x17,0xa4,0xbd,0xaf,0xa9,0xa2,0x9a,0x40,0x9b,0x9f,0x46,0x98,0xa7,0xa2,0xbe,0xa5,0xa7,0x39,0xb2,0x2f,0x21,0x1b,0x1c,0x0e,0x2d,0x4e -,0x1c,0x9d,0xc6,0x5f,0xbe,0xd5,0xbd,0x3c,0x9d,0xaa,0x39,0xa1,0xb1,0xaf,0xbe,0xac,0xbf,0x31,0xbf,0x1f,0x16,0x19,0x1d,0x0e,0xc7,0x27,0x1c,0x9f,0x37,0xbf,0xca,0x9f -,0xaf,0x4f,0x93,0xa7,0xb7,0x9a,0xb6,0xac,0xbc,0x9d,0xd2,0x2e,0xae,0x2a,0x18,0x19,0x16,0x0a,0x57,0x1a,0x1d,0xa4,0x3f,0xc4,0x4d,0xa0,0xa8,0xc3,0x95,0xb1,0xb9,0x98 -,0xa7,0xa3,0xae,0x94,0xab,0x43,0xad,0x24,0x19,0x1b,0x17,0x0f,0xb6,0x21,0x22,0xa7,0xc8,0xaa,0xbc,0xa0,0xcc,0xbd,0x95,0xbd,0xbe,0x9a,0xa1,0x9f,0xb9,0x9d,0x55,0x3e -,0xda,0x1d,0x16,0x1a,0x16,0x0a,0xc3,0x19,0x2c,0xa5,0x30,0xbc,0x55,0x9f,0xe2,0xce,0x92,0xbf,0xa5,0x9c,0xad,0xa4,0xb8,0x9e,0x3c,0xd6,0xda,0x1c,0x13,0x1a,0x12,0x0f -,0xab,0x14,0x2b,0xa9,0x36,0xc5,0x5d,0x9a,0xf8,0xaf,0x91,0x57,0xa4,0x9b,0xa5,0x9e,0xa6,0x97,0xcf,0xe2,0xb9,0x21,0x18,0x24,0x0f,0x0f,0xaf,0x12,0x2b,0xbb,0x2e,0xc2 -,0x49,0x9c,0x45,0xe7,0x96,0x41,0xaf,0x97,0xa4,0xa4,0xb4,0xa1,0x51,0xd7,0xb7,0x22,0x17,0x24,0x13,0x10,0xbb,0x15,0x38,0xac,0x57,0xcd,0x6a,0x9e,0x48,0xac,0x94,0xbc -,0xa1,0x9a,0xa9,0xa6,0xab,0x9f,0x36,0xc7,0xc2,0x1b,0x1a,0x1e,0x0e,0x12,0xb5,0x13,0x37,0xac,0x45,0xc8,0xd3,0x9c,0x49,0xbb,0x94,0x4c,0x9e,0x97,0xad,0x9f,0xab,0x9f -,0x4b,0xae,0xca,0x1f,0x1e,0x20,0x0f,0x16,0xab,0x11,0x4f,0x9f,0x3f,0x73,0x5c,0xab,0x33,0xb5,0x97,0x3f,0xa9,0x9d,0xb5,0xac,0xae,0xa2,0x55,0xbc,0xf9,0x1f,0x1a,0x25 -,0x0e,0x22,0xab,0x11,0xb6,0xb4,0x43,0xba,0xc2,0xa2,0x2c,0xad,0x9e,0x2c,0xa2,0xa1,0xc2,0xba,0xac,0xa1,0x3f,0xb7,0x44,0x1d,0x1f,0x2a,0x0c,0x1d,0xa6,0x14,0xac,0xa8 -,0x53,0xad,0xaf,0x9d,0x39,0xae,0x96,0x2d,0xa2,0xa0,0xb5,0xae,0xcd,0xa3,0x2c,0xb4,0x6c,0x17,0x1a,0x1f,0x0e,0x2d,0xb2,0x18,0xac,0xb1,0xe1,0xb5,0xb7,0x9d,0x3e,0xa4 -,0x99,0x2f,0xa1,0xac,0xdb,0xb0,0xb5,0xb7,0x2f,0xf2,0x39,0x1c,0x19,0x26,0x0c,0x33,0xa7,0x0f,0xa1,0xa7,0xdf,0xb3,0xac,0x99,0x3c,0xa4,0x99,0x2a,0x9e,0xa2,0x59,0x6c -,0xd9,0xa6,0x2a,0x6f,0x3e,0x1a,0x1f,0x1d,0x0a,0x53,0xf4,0x1e,0x9d,0xac,0xb2,0xaf,0x9f,0xa7,0x37,0x9a,0x9f,0x26,0x9f,0xb3,0xdf,0xbe,0xb6,0xb1,0x27,0xbf,0x2f,0x14 -,0x1d,0x21,0x0f,0xd8,0xcb,0x1c,0x99,0xad,0xaf,0xa4,0xae,0xa7,0x30,0xa8,0xa3,0x2d,0x9c,0xba,0xbc,0xb6,0xf3,0xb1,0x23,0xb6,0x37,0x17,0x1d,0x1a,0x11,0xab,0x38,0x2c -,0x9b,0x4a,0xb9,0xe9,0xaa,0xae,0xee,0x9a,0xb8,0x40,0x9d,0xd1,0xba,0xbf,0xab,0xd1,0x2f,0xb0,0x25,0x1a,0x28,0x1d,0x0f,0xae,0x27,0x1f,0x9a,0xde,0xb7,0xac,0xa7,0xb1 -,0x3a,0x99,0xab,0x38,0x9a,0xb4,0xba,0xb9,0xac,0x5c,0x36,0xb2,0x27,0x12,0x27,0x12,0x13,0xa8,0x18,0xbd,0x9e,0x56,0xae,0xc9,0xa1,0x67,0xdc,0x97,0x4c,0xae,0x9f,0xc0 -,0xad,0xb2,0xa6,0x2d,0x75,0xe6,0x17,0x16,0x27,0x0c,0x38,0xac,0x19,0x9e,0xaf,0xc9,0xc2,0xc2,0x9e,0x2f,0xa8,0x9a,0x38,0xa0,0xab,0xad,0xce,0xad,0xae,0x28,0x79,0x35 -,0x1a,0x19,0x21,0x0e,0xb2,0x2d,0x28,0x98,0x69,0xab,0xb4,0xab,0xc0,0x3e,0x97,0xb8,0xce,0x9b,0xc2,0xc0,0xc9,0xa7,0x3c,0x70,0xc7,0x1f,0x12,0x24,0x11,0x16,0x9c,0x19 -,0xab,0x9e,0x7d,0xc0,0xbf,0x99,0x30,0xb6,0x94,0x2c,0xb7,0xa5,0xc4,0xb9,0xbd,0x9f,0x28,0x53,0x4e,0x12,0x16,0x1d,0x12,0xbb,0x5e,0x28,0x99,0xc6,0xac,0xca,0xa5,0xae -,0x31,0x96,0xbd,0x44,0xa4,0xc8,0xbd,0x5a,0xab,0xc5,0x3c,0xda,0x28,0x14,0x1e,0x17,0x18,0xa5,0x23,0xb1,0x9b,0x5c,0xab,0xb1,0x9e,0xf4,0x47,0x95,0x36,0xbf,0xa8,0xe6 -,0xaf,0xe9,0xa3,0x3a,0x37,0xce,0x1c,0x10,0x29,0x0f,0xd2,0xcf,0x1b,0x96,0xc4,0xa4,0xaf,0xb1,0xa2,0x24,0xa1,0xa7,0x25,0x9d,0xc8,0xba,0xc4,0xdc,0xb3,0x35,0x5c,0x44 -,0x17,0x1b,0x1b,0x16,0xa2,0x1f,0xa8,0x9b,0x58,0x9f,0x74,0xaa,0x35,0x3e,0x9b,0x4d,0xb3,0xa8,0x6d,0xbe,0xce,0xa8,0x5f,0xd1,0xc9,0x1f,0x14,0x23,0x10,0x56,0xb8,0x1d -,0x98,0xb0,0xb3,0xb1,0xc3,0xad,0x2b,0xa8,0xa7,0x2b,0xa8,0xaf,0xc4,0xe4,0xa5,0xb0,0x4d,0xde,0x4e,0x17,0x1a,0x1c,0x14,0xa3,0x22,0xad,0x9e,0x4e,0xa8,0xc2,0xb8,0x38 -,0x7d,0x9c,0x3d,0xe4,0x9e,0xfb,0xb9,0xb6,0xad,0x72,0xc3,0xc1,0x1f,0x10,0x2d,0x11,0x32,0xc3,0x1a,0x94,0xbe,0xaf,0xad,0xbf,0xab,0x27,0xa9,0xa8,0x37,0x9d,0xbb,0xc1 -,0xb6,0xb6,0xae,0x39,0x74,0x4b,0x15,0x1c,0x1b,0x15,0xab,0x1b,0xaf,0x9b,0x5a,0xa5,0xbe,0xa8,0x37,0xcf,0x9a,0x2c,0xb8,0xa0,0xbc,0xcd,0xc5,0xa7,0x30,0xbc,0xb7,0x1b -,0x17,0x23,0x10,0xde,0x36,0x21,0x99,0xb6,0xa9,0xae,0xaa,0xbd,0x27,0xa0,0xae,0x4a,0xa2,0xb3,0xbc,0x3c,0xb1,0xe5,0x3f,0xdd,0x49,0x15,0x1a,0x18,0x23,0xd3,0x1b,0x9c -,0xa3,0xae,0xaf,0xb7,0xa7,0x3b,0xaf,0xa1,0x47,0xba,0xa2,0xbc,0x2f,0xb8,0xbc,0x50,0x47,0x50,0x20,0x12,0x19,0x17,0xb0,0x21,0xdb,0x99,0x48,0xa1,0xa8,0xaa,0xbf,0xd8 -,0x9c,0xcf,0x5f,0xaf,0xbb,0xcf,0xc0,0xaf,0x3f,0x43,0xe6,0x2b,0x12,0x25,0x0f,0x33,0xbf,0x17,0x99,0xad,0xa9,0xa0,0xbb,0x9c,0x24,0xab,0xa1,0x2a,0xa4,0xb1,0xb7,0x49 -,0xc2,0xc9,0x36,0xcf,0x5f,0x15,0x27,0x14,0x18,0xa1,0x16,0xaa,0x9c,0xc4,0x9e,0xd3,0xa4,0x47,0x39,0x96,0x32,0xa9,0xaf,0x42,0xb5,0x34,0xa8,0x36,0x64,0xb1,0x1c,0x1e -,0x22,0x0b,0xad,0x61,0x26,0x99,0xbe,0xaa,0xb9,0xaa,0xa7,0x29,0xa4,0xb6,0x2a,0xb0,0x4d,0xb4,0x49,0xab,0xc6,0x41,0xb6,0x36,0x19,0x2b,0x15,0x2d,0xa7,0x18,0x9f,0xaf -,0xaf,0xa8,0xb0,0xa6,0x2d,0xca,0xac,0x29,0xb9,0xb8,0xb9,0xcd,0xd0,0xc5,0x39,0xca,0xdd,0x24,0x22,0x2b,0x0f,0x9f,0x1f,0x3e,0x93,0x38,0xa1,0xcf,0xa6,0xb2,0x20,0x9d -,0x3e,0x36,0xa6,0x37,0xbb,0x5f,0xc1,0xc7,0x50,0xae,0x3c,0x19,0x34,0x11,0xa9,0x53,0x1b,0x8e,0x37,0xaf,0xa6,0x44,0xa6,0x29,0xa6,0xc5,0x1e,0x9b,0x26,0xba,0xc0,0x46 -,0xa7,0x2c,0xae,0xcc,0x16,0x4e,0x14,0x1e,0x97,0x12,0x9a,0x9f,0x35,0x9a,0x45,0x9d,0x3b,0x3d,0x9b,0x1d,0xac,0x63,0x37,0xac,0x33,0xa9,0x29,0x57,0xaf,0x17,0x27,0x1d -,0x1d,0x97,0x17,0xaf,0x95,0x26,0x9d,0xc6,0xa5,0xc9,0x4d,0x97,0x22,0x55,0x99,0x22,0xd7,0xbc,0x54,0x2e,0x44,0xb4,0x21,0x1d,0x40,0x0e,0xc4,0xaf,0x16,0x94,0xae,0xca -,0xab,0xa2,0xa1,0x39,0xac,0xa8,0x23,0xa5,0xbd,0x2f,0xbf,0xca,0xcf,0x28,0xe9,0xc8,0x18,0x28,0x1b,0x1e,0x9e,0x11,0xa4,0x9c,0x2d,0x9b,0xb8,0x9f,0xc4,0xdc,0x97,0x27 -,0x4d,0x9f,0x32,0x46,0xb0,0xde,0x24,0xc0,0xd9,0x23,0x1a,0x3c,0x11,0x36,0xa3,0x14,0x9c,0xa5,0xd8,0xa2,0xab,0x9e,0x38,0xb7,0x9c,0x1b,0xb0,0xae,0x25,0xa2,0xcf,0x59 -,0x38,0xc2,0xce,0x1e,0x2e,0x2e,0x10,0x3b,0xa6,0x14,0xa3,0x9c,0x4b,0xa7,0xa6,0xa4,0x2c,0xb2,0xa4,0x1e,0x61,0xa4,0x2d,0x40,0xa6,0xbe,0x2f,0xd5,0xac,0x29,0x36,0x5a -,0x29,0x13,0xb2,0xbd,0x11,0x99,0xae,0x3b,0xa9,0xa5,0xaf,0x26,0xa2,0xbc,0x21,0xb8,0xb2,0x2a,0x2b,0xa3,0x6b,0x37,0x9f,0xa6,0x2e,0xad,0xc7,0x1c,0x1e,0x24,0xba,0x18 -,0xed,0x9b,0x20,0xae,0xa7,0xd0,0xd2,0xd6,0xa7,0x21,0x39,0xaf,0x28,0xb8,0xab,0xae,0xb4,0xbb,0x9b,0x4c,0xc7,0xab,0x32,0x23,0x26,0x21,0x1e,0xc2,0x1e,0x2f,0xb0,0x39 -,0xef,0xcc,0xad,0xc4,0xd2,0xa4,0x43,0x43,0xa6,0xde,0xe5,0xb1,0xa7,0xb1,0x7c,0xa5,0xbc,0x3e,0xaf,0x3a,0x33,0x29,0x1f,0x16,0x1a,0xbe,0x1a,0xdf,0xa3,0x28,0xb1,0xa2 -,0xae,0x71,0xa9,0xa0,0x46,0xcd,0xa4,0x3f,0xdd,0xaf,0x7b,0x54,0xbf,0xa2,0x31,0x44,0xab,0x23,0x3e,0x4c,0x31,0x32,0x1e,0x1d,0x1f,0xd7,0x24,0xe0,0x9c,0xc0,0x9f,0x9e -,0xae,0xb1,0xc2,0xa6,0x43,0x2b,0xb1,0x33,0x3a,0x47,0x4a,0x79,0xf0,0xa7,0xfc,0x40,0xb5,0x2d,0x35,0x53,0x46,0x43,0x35,0xc0,0x3e,0x40,0xb0,0x31,0x53,0xc9,0xba,0xd1 -,0xdf,0xa3,0x3c,0xd8,0xb2,0x37,0x38,0x47,0x5d,0x34,0x37,0xb3,0x3e,0x65,0xac,0xca,0xc2,0xb5,0xaa,0x5c,0x4a,0xae,0x33,0x34,0xc4,0x2d,0xba,0xdd,0x3b,0xbf,0x32,0x45 -,0xdf,0x34,0xfa,0x3a,0x28,0xc9,0x36,0x3d,0xd0,0xc1,0xb0,0xce,0xa5,0xbe,0xfa,0xab,0xde,0xb8,0xcb,0x51,0x48,0x33,0xe0,0x52,0x44,0xe6,0x5e,0xc7,0xca,0x62,0x34,0x37 -,0x3f,0x37,0x3c,0xc8,0x74,0xe5,0xac,0x48,0xaa,0xc1,0xfc,0xb4,0x47,0xd3,0xd0,0x5e,0x47,0x2f,0x53,0x29,0x3e,0xaf,0x1e,0xae,0xbb,0x2e,0xb1,0xc4,0xba,0xdb,0xb2,0xad -,0x3a,0x71,0x5f,0x2e,0xd7,0xc5,0xd3,0xcd,0xbb,0xb0,0x49,0x6c,0xc5,0x34,0x66,0x62,0x3c,0x39,0x38,0x46,0x4d,0xdd,0xb9,0xbb,0xf7,0xbe,0xfd,0x3b,0xee,0xd8,0x5c,0x63 -,0xe7,0x67,0x4b,0x44,0x3f,0x50,0xc5,0xd0,0xd0,0xb8,0xee,0x60,0x5a,0xfe,0xc3,0xde,0xfa,0x67,0x48,0x3f,0xd1,0x43,0x44,0xc6,0xbf,0x5c,0x62,0xbe,0x43,0x57,0xfb,0x4b -,0x46,0xc8,0xc3,0x79,0x4b,0x6f,0xd2,0x5b,0xc4,0xcb,0xbc,0xd1,0xf9,0x66,0x39,0x4c,0x4d,0x31,0x5b,0x5e,0xe2,0xde,0x47,0xb0,0xc6,0xbb,0xb0,0xdc,0xbf,0x43,0x36,0x43 -,0x38,0x75,0x3b,0xf1,0xbc,0x3c,0x5d,0xb1,0x64,0xdd,0xb6,0x58,0x3f,0x4b,0xc2,0x3b,0x4a,0xb6,0x68,0xdb,0xbb,0xf8,0xbe,0xeb,0xce,0x56,0x48,0xc8,0x4e,0xce,0x3d,0x59 -,0xe8,0x37,0x4a,0x4c,0x4a,0xca,0xc3,0xb9,0xdf,0x60,0xbe,0x58,0x55,0xd4,0xc8,0x66,0x58,0x5d,0x3d,0x4a,0x7a,0x49,0xc0,0xc8,0x42,0xdd,0xfe,0x4f,0x7c,0xdb,0xc8,0xd8 -,0x72,0x5a,0x31,0x4a,0xc6,0x76,0xd5,0xc9,0xec,0x76,0xe6,0xc0,0xf5,0xdc,0x3f,0x22,0x1c,0x34,0x99,0x8f,0x97,0xa7,0xb1,0x1f,0x0d,0x13,0x9e,0x8e,0xac,0x21,0x09,0x01 -,0x0d,0x92,0x89,0x28,0x35,0x8d,0x8b,0x4a,0xbb,0x98,0x91,0x96,0x2d,0x17,0x4e,0xdd,0x16,0xcc,0x16,0x18,0xa4,0xce,0x0d,0x0d,0x2d,0x9d,0x9c,0xa2,0xa2,0x26,0xdb,0xd8 -,0x9b,0x8e,0x99,0xc4,0xbf,0x44,0x15,0xd1,0x94,0x35,0x05,0x0a,0x29,0xb7,0xce,0xab,0x8c,0x9a,0x16,0x0c,0x44,0x9e,0xa6,0x9d,0xc2,0xef,0x35,0x21,0x1e,0x11,0x38,0x8b -,0x86,0x8f,0xaf,0x3a,0x22,0x0e,0x1b,0xcd,0x95,0xa7,0x16,0x13,0x0b,0x07,0xcf,0x8c,0xae,0x19,0xa6,0x8b,0x9c,0xa6,0xa3,0x8f,0x98,0x29,0x27,0xbf,0xec,0x2b,0x40,0x23 -,0x0f,0x2c,0xb2,0x1f,0x10,0x2d,0xa4,0x9a,0xb1,0x36,0xa3,0xc5,0x2c,0xa3,0x91,0xa4,0x3d,0xc5,0x4a,0x28,0xcb,0x9b,0xc7,0x0a,0x04,0x1c,0xb9,0xb0,0x9b,0x94,0x9c,0x29 -,0x0f,0x1e,0xa8,0x95,0xa0,0xa6,0xdf,0x1d,0x3f,0xd4,0x1b,0x34,0x90,0x89,0x93,0xb4,0x2f,0x1f,0x1c,0x1e,0x33,0xa7,0xae,0x1b,0x1f,0x18,0x0b,0xd0,0x8e,0xa7,0x20,0x39 -,0x96,0x98,0xa1,0xa9,0x9d,0xae,0x3f,0x2c,0x36,0xb9,0x43,0x3c,0x1c,0x14,0x26,0x49,0x26,0x26,0x39,0xb4,0xa9,0x35,0x41,0xb7,0xc5,0xae,0x9f,0x97,0x98,0xc7,0x71,0xc6 -,0x48,0xa8,0x99,0xac,0x12,0x06,0x18,0x50,0xb3,0x98,0x93,0x9f,0x56,0x14,0x11,0x37,0x9b,0x9a,0xdd,0x1a,0x13,0x17,0x2f,0x25,0x19,0x91,0x87,0x90,0x9f,0xae,0xcc,0x2f -,0x3f,0x69,0x7b,0x40,0xc0,0x39,0x13,0x18,0x5e,0x96,0x9e,0x39,0x23,0x4f,0x99,0x98,0xac,0xcc,0x45,0x21,0x1d,0x31,0x31,0x2f,0xac,0x1d,0x0d,0x20,0xd8,0xa9,0xb3,0xaf -,0xaf,0xb8,0xb8,0xb7,0xab,0x9f,0x9c,0x9b,0xa8,0xab,0xdc,0x2a,0x37,0x40,0xc5,0xa5,0xe3,0x0e,0x07,0x09,0x18,0xc5,0xdc,0x9c,0x9b,0x49,0x2e,0x20,0xcd,0x98,0x8a,0x8f -,0x3f,0x28,0xcc,0xb9,0x2f,0x40,0xa1,0x98,0x95,0xa2,0x3a,0x28,0x2b,0x3a,0x1f,0x1a,0x19,0x1b,0x20,0x16,0x0d,0x28,0xb3,0xb6,0xb6,0x3e,0xab,0x90,0x86,0x8a,0x9c,0xb0 -,0xbd,0xe0,0x65,0xa9,0x9f,0xb4,0x2a,0x0f,0x0b,0x12,0x33,0xcd,0x3f,0x58,0x29,0x16,0x1f,0x2f,0x37,0x9d,0x9e,0xb3,0xa9,0xaf,0xec,0xda,0x9b,0x98,0x94,0x99,0x2d,0x12 -,0x11,0x27,0xad,0x98,0x96,0xa6,0x7b,0x1f,0x12,0x19,0xd9,0x9b,0xac,0x1c,0x11,0x11,0x17,0xf4,0x36,0x43,0x9a,0x93,0x99,0xac,0xa0,0xaa,0xac,0xad,0x33,0x2e,0xfe,0xac -,0xc0,0x38,0x3a,0x3f,0xcd,0x2f,0x21,0x33,0xae,0x94,0x9f,0x31,0x1b,0x13,0x12,0x3b,0xd2,0xae,0x9f,0xf8,0x1d,0x0f,0x2c,0xad,0x9f,0x97,0x9f,0xb6,0x55,0xa9,0x9f,0x9b -,0x92,0x99,0xab,0x47,0x2a,0x1e,0x1e,0x2d,0x29,0x29,0x1f,0x0c,0x07,0x11,0x17,0x39,0x94,0x8f,0x97,0xa7,0xa3,0xca,0xd0,0x98,0x8e,0x9a,0xc6,0x4e,0x34,0x43,0xb2,0xb1 -,0xea,0x5e,0xbd,0xd0,0x51,0x5e,0x29,0x22,0x16,0x0a,0x0b,0x1a,0x31,0x50,0xa7,0xa4,0x3e,0xbb,0xa3,0xf8,0xad,0x91,0x89,0x8c,0x99,0xae,0x43,0x2d,0xdb,0xa8,0xa4,0xbc -,0x3e,0x18,0x0b,0x0d,0x13,0x1f,0x2e,0x1f,0x0f,0x1b,0x2a,0x34,0x99,0x91,0x92,0x99,0x9e,0x9c,0xba,0xa1,0x9c,0xa1,0x9d,0xbb,0xdd,0x22,0x1a,0x25,0x32,0xad,0xaa,0xb5 -,0xdd,0x2c,0x18,0x12,0x1f,0x26,0x1a,0x23,0x23,0x17,0x3e,0x9d,0x9c,0xa6,0xa2,0x98,0x9a,0x92,0x8f,0x97,0x9c,0xde,0x23,0x17,0x1c,0x33,0xcb,0xb4,0x3e,0x2b,0x1f,0x1d -,0x19,0x14,0x33,0xb3,0xd0,0xcf,0x6c,0x22,0x2b,0xb5,0x9d,0x96,0x96,0x9a,0xd7,0x29,0x2b,0x3f,0xa9,0xa2,0xab,0x4c,0x29,0x3e,0x63,0xa9,0x9e,0xa1,0xac,0x3c,0x21,0x17 -,0x1c,0x27,0x1a,0x1f,0x38,0x1f,0x1b,0x26,0x3c,0xb5,0x9c,0x91,0x96,0x9d,0x9a,0xa8,0xb7,0xaa,0xa5,0xad,0x52,0x34,0x28,0x35,0x5a,0xdc,0x60,0x2a,0x22,0x24,0x32,0x4b -,0x3b,0x2b,0x2e,0x18,0x11,0x1f,0x49,0xa4,0x9e,0x99,0x9f,0xb2,0xac,0xb4,0xad,0xa3,0x99,0x93,0xa4,0xcf,0x3b,0x32,0x66,0xe3,0xb9,0xbb,0x2b,0x16,0x0f,0x0f,0x0f,0x14 -,0x30,0x29,0x1b,0x2f,0xbc,0xa0,0x99,0x8e,0x8b,0x94,0x9b,0xa1,0xa9,0xa7,0xae,0xaf,0x56,0x35,0x27,0x1f,0x24,0x25,0x37,0x51,0x43,0x2b,0x2a,0x2f,0x1f,0x1a,0x36,0x3b -,0x1f,0x2d,0x3f,0xbc,0xa8,0x9e,0x93,0x9a,0xaa,0xb3,0xa7,0x9a,0x9d,0x98,0x9e,0xd5,0x2a,0x1b,0x1c,0x1f,0x3c,0xe1,0x39,0x25,0x17,0x19,0x17,0x12,0x2a,0xbf,0xba,0xbd -,0xbb,0xa1,0xa4,0xa1,0x95,0x93,0x96,0xa3,0xad,0xdd,0x28,0x38,0x46,0x32,0x2a,0x24,0x29,0x2c,0x53,0xab,0xa5,0xaf,0x46,0x31,0x2a,0x1a,0x1f,0x3d,0x32,0x2c,0x2e,0x5f -,0xe9,0x65,0xaa,0x9f,0x9b,0x9f,0xa0,0x9c,0xad,0xab,0xaa,0xbe,0x4b,0x28,0x33,0x2d,0x29,0x3c,0x52,0xfc,0x2f,0x27,0x24,0x1b,0x25,0xc2,0xbe,0xbd,0x5c,0x3c,0x3b,0x28 -,0xea,0xa6,0x9a,0x9c,0xae,0xa5,0xb0,0xc9,0xc5,0xb4,0xa9,0xc2,0xc2,0xc8,0x67,0x7b,0x5d,0xbf,0x3d,0x28,0x28,0x18,0x15,0x1b,0x1c,0x1f,0x1f,0x26,0x36,0x3c,0xab,0x9b -,0x91,0x8c,0x8f,0x91,0x9e,0xaa,0xa6,0xbd,0xae,0x4a,0x28,0x26,0x1d,0x26,0x24,0x2b,0x2b,0x20,0x25,0x1c,0x1c,0x34,0x3c,0x4a,0x55,0x49,0xd6,0x4a,0xc3,0xa6,0x9d,0x93 -,0x98,0x9a,0x9f,0xb6,0xac,0xb3,0xa8,0xa9,0xca,0xcf,0x25,0x1e,0x1a,0x18,0x1f,0x1b,0x1e,0x1a,0x15,0x20,0x2b,0x36,0xda,0xba,0xa5,0xa0,0x9f,0x96,0x93,0x90,0x95,0x9c -,0x9b,0xac,0xc6,0x3f,0x2f,0x2b,0x1d,0x1b,0x18,0x18,0x1d,0x21,0x2d,0x3e,0xcc,0xcb,0x3d,0x7a,0x6d,0xee,0xbf,0xe6,0xc0,0xcd,0x65,0xb8,0xac,0xa0,0xa4,0xaa,0xa0,0xb3 -,0xb8,0xb4,0xbe,0xb3,0xd7,0x41,0x2a,0x26,0x27,0x1f,0x23,0x2c,0x2b,0x32,0x2a,0x24,0x37,0x49,0xbd,0xb0,0xa9,0xa1,0xb7,0xaf,0xad,0xbd,0xad,0xae,0xaf,0xbb,0xd8,0x78 -,0x3d,0x58,0x57,0x33,0x39,0x48,0x50,0x78,0x65,0xc8,0xc3,0xd7,0x54,0x2d,0x32,0x36,0x28,0x2a,0x26,0x32,0x32,0x1f,0x2c,0x4c,0xb3,0xa4,0x9e,0x95,0x97,0x9c,0x9d,0xa6 -,0xa4,0xaa,0xd2,0x5d,0x33,0x2c,0x24,0x21,0x29,0x22,0x26,0x25,0x1d,0x23,0x2d,0x35,0x3f,0x4d,0xdc,0xda,0x7c,0xc2,0xb2,0xa6,0x9e,0x9e,0x9f,0xa1,0xa6,0xb0,0xb6,0xab -,0xae,0xb4,0xce,0x4c,0x44,0x2c,0x28,0x25,0x22,0x25,0x1d,0x1b,0x1d,0x22,0x27,0x29,0x32,0x38,0xd9,0xb4,0xae,0x9d,0x93,0x90,0x93,0x96,0x98,0xa1,0xb2,0xaf,0xcb,0x3a -,0x29,0x1d,0x17,0x16,0x1a,0x1c,0x24,0x34,0x44,0x4c,0xec,0xfc,0xbb,0xb0,0xb5,0xba,0xd9,0xc1,0xd8,0xf1,0xb9,0xb6,0xad,0xb0,0xd8,0xcd,0xc3,0xbd,0xbe,0xb8,0xb9,0x40 -,0x33,0x2c,0x2d,0x3a,0x37,0x53,0xeb,0x43,0x46,0x45,0x41,0x4f,0xe1,0xb8,0xc5,0x5f,0xc1,0xd6,0xc6,0xc1,0xe5,0xd5,0x48,0x54,0x41,0x3f,0x74,0x56,0x59,0x42,0x3e,0x4f -,0xe2,0xbe,0xb2,0xa2,0x9f,0xa9,0xae,0xad,0xbc,0xe5,0xd9,0x3e,0x2a,0x21,0x1e,0x19,0x1b,0x1f,0x23,0x30,0x45,0xc5,0xb4,0xaa,0xa4,0x9f,0x9c,0x9e,0xa6,0xaf,0xba,0xc3 -,0xb7,0xc4,0xc9,0xd7,0x40,0x35,0x2e,0x2f,0x38,0x4a,0x3a,0x3f,0x2e,0x2a,0x26,0x2a,0x38,0x42,0xe7,0x60,0xca,0x69,0xc7,0xaf,0xb2,0xac,0xac,0xaf,0xb1,0xaf,0xb3,0xb3 -,0xae,0xaf,0xee,0x4a,0x3b,0x2b,0x2d,0x2d,0x2c,0x2a,0x29,0x2b,0x29,0x36,0xe4,0xdd,0xad,0xac,0xac,0xa7,0xb2,0xab,0xaa,0xaf,0xbc,0x76,0x3d,0x2f,0x24,0x27,0x29,0x2b -,0x2f,0x38,0xee,0xd6,0xb6,0xa9,0xaa,0xa8,0xac,0xba,0xc8,0x69,0x5f,0xde,0x5e,0xe1,0x4c,0x42,0x47,0x36,0x41,0x48,0x66,0x50,0x3c,0x40,0x39,0x37,0x5e,0x64,0xc2,0xce -,0x5f,0xc9,0xee,0xcb,0xcd,0xb9,0xb5,0xd7,0xc9,0xbd,0xbf,0xb4,0xb7,0xbb,0xca,0x50,0x4a,0x3c,0x32,0x2e,0x2f,0x2e,0x2b,0x29,0x2f,0x32,0x35,0xd2,0xb2,0xaf,0xa5,0xa1 -,0xaa,0xa9,0xa6,0xae,0xb5,0xbe,0xfb,0x37,0x2e,0x28,0x1f,0x2b,0x2b,0x27,0x27,0x3a,0x5e,0xc2,0xb5,0xae,0xac,0xac,0xb9,0xbc,0xb1,0xbd,0xb9,0xd4,0xd7,0x48,0xdc,0x62 -,0xd9,0x5e,0x62,0xcc,0x3d,0x2b,0x2e,0x3e,0x37,0xfd,0x4b,0xc0,0x5f,0x48,0x6a,0xea,0xbc,0xc0,0xaf,0x4c,0x60,0x79,0xd5,0xaf,0xaf,0xaf,0xb7,0xbf,0x5c,0x4e,0x3b,0x41 -,0x33,0x3c,0x38,0x2a,0x2b,0x2c,0x33,0x36,0x44,0xdb,0xaf,0xb9,0xab,0xa7,0xa7,0xaa,0xaf,0xa6,0xec,0xeb,0x3e,0x30,0x2e,0x29,0x44,0x38,0x32,0x33,0x37,0x47,0xec,0xc1 -,0xcb,0xc1,0xd0,0xd3,0xb6,0xca,0xbe,0xbd,0xd8,0xcb,0xed,0xef,0xcf,0xf2,0x4d,0x5d,0x65,0x40,0x42,0x3b,0x3d,0x73,0x6f,0xea,0x53,0x58,0xf7,0xda,0x53,0xca,0xbe,0x4b -,0x76,0xe3,0x5b,0xbe,0xb1,0xaf,0xb2,0xb6,0xb5,0xee,0x5a,0x37,0x3e,0x37,0x29,0x2e,0x2f,0x2f,0x30,0x36,0x63,0xd4,0xce,0xb6,0xb7,0xb3,0xae,0xa9,0xa8,0xad,0xaf,0xbc -,0x5d,0x4f,0x39,0x32,0x32,0x2f,0x2f,0x31,0x38,0x40,0x5e,0xda,0xc9,0xc2,0xdb,0xde,0xbd,0xc2,0xca,0xc2,0xc5,0xd5,0xd8,0xe9,0x64,0xcd,0xd5,0x56,0x43,0x4d,0x4a,0x3d -,0x3f,0x4c,0xd9,0xe7,0xc5,0x73,0x56,0xeb,0x70,0xd6,0xe1,0xc5,0xda,0x57,0x73,0x75,0xc8,0xc2,0xce,0xd2,0xc5,0xc5,0xfb,0x5f,0x5b,0x3f,0x34,0x35,0x33,0x33,0x31,0x3d -,0xee,0xd6,0xd7,0xb5,0xaf,0xb6,0xb2,0xb8,0xaf,0xbb,0xc1,0xd2,0x5b,0x57,0x3b,0x3e,0x34,0x2f,0x33,0x30,0x2f,0x35,0x46,0xd7,0xc9,0xbf,0xbe,0xc4,0xbc,0xb5,0xb6,0xba -,0xc4,0xbf,0xbd,0xcc,0x66,0x46,0x4e,0x4d,0x4c,0x40,0x4c,0x3c,0x39,0x37,0x50,0x58,0x56,0xd4,0xef,0xd7,0xf8,0xde,0xd0,0xc7,0xf4,0xca,0xe6,0xcd,0xbf,0xc8,0xbb,0xbf -,0xbe,0xcf,0xd1,0xd9,0x5f,0x4f,0x3d,0x34,0x32,0x31,0x36,0x37,0x39,0x4f,0x57,0xe6,0xc3,0xb7,0xb5,0xc1,0xb7,0xb1,0xb1,0xbd,0xc8,0xc6,0x5a,0x4b,0x64,0x43,0x4d,0x3e -,0x30,0x3b,0x37,0x44,0x52,0xe3,0xed,0xd9,0xbe,0xcb,0xc1,0xc2,0xc5,0xcf,0xf7,0xc9,0xca,0x57,0x4c,0x5f,0x50,0x4f,0x58,0x52,0x4e,0x58,0x5f,0xfa,0xdb,0xd5,0xbf,0xce -,0xd2,0xfb,0x63,0xc9,0x73,0x6a,0x53,0x46,0x4e,0x40,0xd1,0xce,0xca,0xbc,0x6a,0xd8,0xdb,0x68,0x4d,0x3d,0x3f,0x3f,0x3f,0x4a,0x3c,0x46,0xe4,0xd2,0xc2,0xb9,0xb6,0xb7 -,0xbc,0xc3,0xb6,0xc2,0xc8,0xcf,0x63,0x3a,0x3f,0x44,0x30,0x3b,0x31,0x31,0x2f,0x38,0x52,0x75,0xd4,0xcf,0xbe,0xc8,0xc1,0xb3,0xb4,0xb0,0xb4,0xc9,0xcc,0xc8,0xf7,0x52 -,0x57,0x72,0x47,0x39,0x3c,0x42,0x38,0x3b,0x43,0x4f,0x52,0x50,0x57,0x46,0xdb,0xd7,0xbc,0xbb,0xd3,0xc8,0xcd,0xef,0xcb,0xbf,0xb8,0xbe,0xc4,0xc6,0xda,0xd1,0x6f,0x4b -,0x3c,0x38,0x31,0x39,0x38,0x33,0x3d,0x4e,0x48,0x5b,0xea,0xbe,0xbe,0xbf,0xb7,0xbf,0xbb,0xbf,0xb9,0xcc,0xd9,0xcd,0xdb,0xf9,0x4d,0x32,0x37,0x36,0x3c,0x4b,0x50,0xda -,0x4f,0xfb,0xf7,0xd7,0xbf,0xc2,0xca,0xce,0xe0,0x73,0x55,0xc9,0xc9,0xf3,0xfc,0x54,0x5f,0x48,0xf2,0x79,0xe5,0x7c,0xf5,0xdd,0x59,0x4f,0x53,0xfb,0xda,0xd5,0xfb,0xe1 -,0x48,0x60,0x64,0x64,0xc9,0xc6,0xd5,0xf6,0xdd,0xcf,0xd4,0xc4,0x65,0x47,0x52,0x36,0x45,0x42,0x4f,0x48,0x58,0xe6,0x4f,0xcd,0xbf,0xba,0xbe,0xc5,0xc2,0xcb,0x7e,0x70 -,0x56,0x52,0x53,0x61,0x67,0x3e,0x46,0x46,0x3f,0x4c,0x4d,0x64,0x58,0x4f,0xd7,0xcc,0xbe,0xb3,0xbf,0xc4,0xca,0xdb,0x5a,0x5f,0xbd,0xdf,0x5f,0x4f,0x3c,0x47,0x4f,0x51 -,0x67,0x4a,0x52,0x51,0x4b,0x5d,0x54,0xf1,0xca,0xdd,0xda,0xcc,0xd2,0xe9,0x60,0xbc,0xc5,0xd9,0xd6,0xc6,0xe1,0xf4,0xca,0xcc,0xd5,0x47,0x44,0x3a,0x3b,0x3a,0x3c,0x4b -,0x50,0x46,0x46,0xf9,0x7c,0xca,0xbe,0xb8,0xb4,0xb9,0xc0,0xcb,0xc9,0xec,0xd5,0x6f,0x5d,0x4e,0x3f,0x48,0x42,0x45,0x4d,0x4b,0x47,0x44,0x41,0x49,0xd9,0xc8,0xce,0xc4 -,0xc0,0xc1,0xef,0xcc,0xc6,0xd4,0xd5,0xd8,0x59,0x4d,0x5c,0xe2,0xcf,0x56,0xe1,0x73,0x46,0x41,0x4b,0x4c,0x46,0x6a,0x68,0x4d,0x6e,0xd8,0x67,0xdb,0xc8,0xc3,0xdd,0xdd -,0xdb,0xbe,0xba,0xe7,0xc6,0xc6,0x64,0x3e,0x54,0x50,0x43,0x3f,0x51,0x48,0x3e,0x58,0x4b,0x7d,0xdb,0xcc,0xbb,0x73,0xca,0xc0,0x5e,0xcd,0xd3,0xba,0x56,0x45,0xda,0x4d -,0x5b,0x53,0xea,0xdf,0x49,0x49,0x47,0x6d,0x56,0xea,0xcb,0xd5,0xcc,0xd0,0xc7,0xd6,0xcb,0xdf,0x5a,0xdf,0x74,0x46,0x40,0x46,0xf3,0x4c,0xd9,0xf3,0x66,0xf8,0x48,0x4e -,0xde,0xce,0x66,0xc6,0xcf,0xe7,0xdb,0xd0,0xcd,0xcb,0xca,0x54,0x6f,0xd9,0xf4,0xf9,0xfb,0x74,0x43,0x49,0x4e,0x4c,0x3f,0x4b,0x3c,0x40,0x51,0x57,0xdb,0xc6,0xc8,0xd9 -,0xb3,0xc5,0xc1,0xbf,0xcd,0xc3,0xd3,0xbe,0xe0,0x51,0x4c,0x3b,0x46,0x3d,0x48,0x43,0x40,0x42,0x39,0x43,0x5e,0xcd,0xc5,0xc0,0xbd,0xc6,0xcd,0xca,0xc9,0xc6,0xd0,0xea -,0xdc,0x57,0x47,0x56,0x4f,0x67,0x5b,0xfd,0x4a,0x4f,0x6f,0x3e,0x4a,0xe4,0x6a,0x5e,0x5d,0x61,0xcf,0xc8,0xd1,0xc7,0xb9,0xc4,0xfd,0xd3,0xe1,0x62,0xc6,0xd2,0x4a,0x54 -,0x66,0x52,0x6d,0x3b,0x4a,0x3d,0x42,0x3c,0x4f,0xd3,0x58,0xc2,0xe0,0xb8,0xba,0xbd,0xcf,0xc6,0xd8,0xe2,0xde,0xf6,0xd4,0x48,0x4e,0x4d,0x4c,0x57,0x48,0x3b,0x40,0x40 -,0x4d,0x4f,0xcb,0xbd,0xc5,0xde,0xd2,0xc0,0xcc,0xb8,0xbb,0x57,0x54,0x47,0x3f,0x4b,0xeb,0xda,0x5a,0xdc,0x60,0x56,0xce,0x4f,0x46,0xeb,0x66,0x7c,0x6d,0xde,0x47,0xea -,0xbe,0xd7,0xde,0xba,0xc6,0x3d,0x51,0xe6,0x5e,0xea,0xc2,0x52,0x3f,0x51,0x5b,0x4f,0xca,0xd1,0x47,0x62,0x4d,0x44,0x75,0xcd,0xce,0xcc,0xbd,0xcb,0xeb,0xc3,0xce,0x4e -,0xf5,0xf3,0x5a,0x51,0x44,0x50,0x3c,0xef,0xd7,0x43,0x41,0x4f,0xd4,0xe5,0xd0,0xcc,0xd5,0xc7,0x61,0x6b,0xd7,0xc2,0xb9,0xcc,0xe2,0x49,0x4d,0x73,0x67,0x60,0xcc,0xd9 -,0x4b,0x49,0x45,0xf8,0xd3,0x46,0x3a,0x4d,0x7d,0x45,0x3f,0x52,0xc2,0xbf,0xe5,0xcb,0xbc,0xcf,0xd9,0xc9,0xc7,0xbb,0xc9,0xdc,0xcf,0x48,0xdd,0xbe,0x3c,0x5b,0xec,0x2f -,0x32,0x5c,0x35,0x34,0x5e,0x5d,0x46,0xe8,0xbf,0xd0,0xbc,0xbb,0xd1,0xc5,0xce,0xca,0xc2,0xde,0xc3,0x5f,0xc9,0xca,0x49,0x56,0x45,0x3f,0x60,0x6a,0x43,0x45,0x4c,0x39 -,0x3a,0x59,0x7e,0xc2,0xbf,0xcc,0xe7,0xd6,0xc7,0xc4,0xca,0xc7,0xc3,0x49,0x6f,0xde,0x7b,0xc8,0xda,0xde,0x36,0x50,0x4e,0x3c,0xec,0x44,0x5b,0xe4,0x71,0xf7,0x49,0xda -,0xd6,0x5d,0xc2,0xbe,0xe4,0xfb,0xcf,0x68,0xd3,0xf5,0xc9,0xdc,0x6a,0x5b,0x5a,0xf4,0x42,0x50,0xf2,0xe3,0x54,0xd2,0xeb,0xfe,0xea,0x56,0x46,0x56,0x61,0x4a,0xeb,0x69 -,0x59,0xec,0xdb,0xcc,0xda,0xdd,0xbb,0xde,0xd1,0xd3,0x5b,0xe7,0xf4,0x55,0x53,0xbe,0x58,0x66,0xca,0x4e,0x4a,0xff,0xdd,0x42,0x4c,0x53,0x4a,0x6d,0x5a,0xcc,0xe6,0x59 -,0xc4,0x56,0x6e,0xd6,0xd0,0xcf,0xd6,0xda,0xdf,0xda,0xf2,0xfd,0x6c,0xd9,0x7a,0xd4,0xef,0xdd,0x68,0x4c,0x67,0x4c,0x62,0x59,0x51,0x4d,0x4a,0x4c,0x5e,0x62,0x5d,0x60 -,0xd4,0xc8,0xc4,0xd8,0xbf,0xba,0x62,0xd3,0xe5,0xf4,0x47,0x6a,0x6c,0x6f,0xc9,0x76,0xd5,0xde,0x48,0x7a,0x6d,0x4c,0x6e,0x42,0x4e,0x49,0x52,0x47,0x68,0xd0,0xe7,0xfc -,0xd1,0xd3,0xc3,0xc7,0x78,0x5d,0xee,0xc8,0xef,0xd4,0xce,0xcd,0x6d,0xc5,0xe5,0x5c,0xe5,0x56,0x4f,0x48,0x56,0x56,0x48,0x4d,0xdf,0x4c,0x79,0xdf,0x54,0xbf,0xd0,0xde -,0xf9,0xd5,0xc4,0xf9,0xc8,0xe8,0xd9,0x5d,0xd5,0xd7,0xeb,0x53,0x4e,0x78,0x47,0xc2,0x44,0x7d,0xe1,0x34,0x4d,0x59,0x3f,0x51,0x45,0xca,0x6b,0xcc,0xcd,0xde,0xb4,0xbf -,0xde,0xd4,0xc2,0xf7,0xe3,0xcb,0x6e,0x63,0xda,0x52,0x61,0x51,0xa8,0xd7,0xc8,0x26,0xcc,0xcd,0xaa,0x34,0x27,0xdd,0x03,0x0e,0x07,0x4c,0x3e,0x1a,0xbf,0x17,0x99,0x92 -,0xa5,0x94,0x94,0xab,0x9d,0x8d,0x94,0x7b,0x94,0x9e,0x6a,0x8f,0x0c,0xb9,0x86,0x9a,0xa6,0x9b,0xd8,0x1a,0x1e,0x0d,0x0c,0x06,0x0a,0x07,0x0d,0x09,0x0c,0x09,0x11,0x0e -,0x0d,0x2d,0x13,0x17,0x36,0xaf,0x2f,0xaf,0xa8,0xa2,0x9f,0x96,0x91,0x99,0x91,0x9c,0x8c,0x88,0x8d,0x8e,0x87,0x85,0x86,0x81,0x86,0x87,0x87,0x9e,0xa5,0x93,0x8c,0x2a -,0x1f,0x37,0x0c,0x2e,0x0e,0x06,0x08,0x03,0x03,0x0d,0x08,0x04,0x05,0x00,0x19,0x05,0x01,0x07,0x0d,0x18,0x1d,0x53,0xb2,0x3b,0xaf,0x8c,0x90,0x82,0x8a,0x86,0x8a,0x85 -,0x83,0x89,0x88,0x84,0x89,0x90,0x8b,0x96,0x8d,0xa8,0xb7,0x27,0x2f,0x28,0xd5,0xc2,0x27,0x1c,0x18,0x1f,0x1b,0x1d,0x17,0x10,0x0e,0x11,0x11,0x22,0x0f,0x0d,0x0e,0x0b -,0x0f,0x0e,0x11,0x0b,0x1d,0x26,0x24,0x39,0x17,0x37,0x48,0x2e,0xd2,0xa7,0x70,0xbf,0xa2,0x8c,0x8b,0x8b,0x83,0x85,0x87,0x83,0x86,0x87,0x87,0x82,0x85,0x90,0x8c,0x9d -,0x9d,0xcd,0x20,0x1f,0x1a,0x0f,0x01,0x07,0x10,0x06,0x06,0x08,0x04,0x02,0x0d,0x18,0x36,0x14,0x1d,0x10,0x0e,0x2f,0xaf,0x9a,0x35,0x9d,0x4f,0x92,0x97,0xac,0x99,0x9a -,0x86,0x8c,0x9e,0x9a,0x8d,0x8f,0x93,0x8d,0xa5,0x9f,0x98,0x96,0x95,0x8f,0x98,0xca,0x9e,0xa3,0x9d,0xa2,0xab,0xb6,0xa9,0x22,0x27,0x25,0x1b,0x1f,0x07,0x04,0x0c,0x0d -,0x0c,0x0b,0x07,0x00,0x08,0x0f,0x0e,0x0d,0x0e,0x0c,0x0a,0xa3,0xae,0x8e,0x8a,0x95,0x89,0x87,0x89,0xa4,0x86,0x85,0x8f,0xb5,0xaf,0x80,0x8b,0x97,0x91,0x42,0x98,0x8b -,0x91,0x95,0x37,0xb8,0x48,0x0e,0x20,0x29,0x22,0x1f,0x2f,0x26,0x08,0x0e,0x2b,0x5a,0x0f,0x1d,0x0d,0x13,0x1a,0x0e,0xa4,0x25,0x06,0x0e,0x1e,0x0a,0x10,0x24,0x18,0x29 -,0x0f,0x18,0x32,0x29,0xdf,0xaf,0x93,0xa5,0x9e,0x91,0x80,0x88,0x86,0x85,0x84,0x86,0x92,0x85,0x86,0x8c,0x41,0xd5,0xab,0x8f,0xaa,0x13,0x1e,0xb3,0x1d,0x18,0x2b,0x0b -,0x0e,0x08,0x15,0x0a,0x06,0x2d,0x02,0x18,0x18,0x0e,0x29,0x1c,0x98,0x18,0x1d,0x48,0xd9,0xb9,0xad,0x9f,0x1b,0xab,0x1b,0x2c,0x8f,0x9b,0x95,0x6d,0x2e,0xb6,0x93,0x9b -,0x89,0x89,0xbc,0x2b,0x9f,0x88,0x8e,0x90,0x8f,0x88,0x8c,0x8d,0xc8,0x2d,0xa3,0x88,0xa6,0x20,0x2a,0x1e,0x40,0x0b,0x19,0x0c,0x11,0x0e,0x0b,0x13,0x07,0x0b,0x04,0x08 -,0x0a,0x09,0x0e,0x29,0x29,0x2e,0x39,0x8e,0x97,0xa6,0xcb,0x30,0x90,0x93,0x85,0x87,0x8d,0x9e,0xc7,0xa0,0x91,0x85,0x9e,0xa4,0xa8,0x38,0x91,0xa9,0x57,0x3a,0xa4,0x1c -,0x1f,0x9b,0x5c,0x9a,0xae,0x9e,0x93,0x92,0x9b,0x35,0x9e,0xd7,0x3a,0x1d,0x2c,0xf4,0x08,0x08,0x1a,0x15,0x05,0x0a,0x04,0x0e,0x0d,0x0c,0x0b,0x16,0x0d,0x0f,0x24,0x16 -,0x47,0xa4,0x87,0x9e,0x8b,0x8e,0x92,0x83,0x8e,0x8b,0x84,0x88,0x8c,0x9b,0x92,0x9a,0x9f,0x98,0xb7,0x43,0x34,0xa4,0x43,0x1c,0x0c,0x1d,0x18,0x12,0x0f,0x2d,0x0d,0x18 -,0xad,0x38,0x23,0x24,0x9b,0x2d,0xb2,0x20,0xaf,0xc4,0x1f,0x97,0x48,0x22,0x1e,0x1c,0x21,0x11,0x15,0x12,0x1b,0x2d,0x2f,0x0b,0x0d,0x41,0x1b,0x29,0x35,0x1d,0xad,0x97 -,0x95,0x8f,0x8f,0x96,0x8c,0x88,0x8c,0x8b,0x8a,0x8b,0x89,0x83,0x9c,0x9c,0x97,0x98,0x2f,0xea,0x34,0x1e,0x1d,0x13,0x14,0x03,0x09,0x0d,0x08,0x07,0x0c,0x1f,0x17,0x11 -,0x19,0x1f,0xbe,0x1b,0x34,0x6d,0x9f,0xbc,0x9a,0x9c,0x19,0x9e,0xad,0xb4,0x9d,0xa2,0x35,0xa0,0xa2,0x3a,0xa8,0xa5,0x3c,0xb2,0x90,0x39,0xa1,0xb4,0xa3,0x8f,0x96,0x96 -,0xbe,0x9c,0x9b,0x8c,0x90,0x97,0xa8,0xe4,0xa2,0xc1,0x2e,0x2d,0x37,0x1d,0x1f,0xcc,0x13,0x0d,0x1a,0x13,0x0d,0x11,0x06,0x13,0x11,0x0d,0x1e,0x28,0xbb,0x1b,0x39,0xb8 -,0xac,0xb7,0x9d,0x41,0x94,0xa1,0xbd,0x97,0xa9,0xac,0x9f,0xa9,0x2d,0x99,0x32,0xaa,0x97,0xa3,0xb8,0x4a,0x50,0x25,0x93,0x9b,0xbd,0x95,0x94,0x9d,0xa3,0x95,0x9b,0x9b -,0x97,0x77,0xa6,0xb2,0x10,0xa5,0xc2,0x3c,0x0c,0x1a,0x0e,0x0b,0x38,0x0b,0x17,0x13,0x0d,0x09,0x14,0x0a,0x0e,0x1c,0x0d,0x1d,0x9b,0xdd,0xbc,0xb3,0x2a,0x99,0xa2,0x92 -,0x8f,0x8d,0x86,0x97,0x8f,0x94,0x8f,0x89,0x9a,0x96,0x9c,0xa6,0x93,0x4c,0x21,0x35,0x57,0x12,0x15,0x15,0x24,0x18,0x11,0xb2,0x17,0xb4,0x2c,0xca,0xa8,0xb4,0xdb,0xa5 -,0x36,0x4a,0x95,0x22,0x9e,0x19,0x0e,0x3e,0x1a,0x17,0x1d,0x36,0x1b,0x14,0x23,0x1b,0x0b,0x1c,0x1a,0xae,0xb8,0x1e,0xaa,0x9b,0x8a,0x9f,0x96,0xab,0x8c,0x8c,0x8d,0x93 -,0x9b,0x89,0x8e,0x9e,0xd0,0xae,0x2a,0x9f,0x3e,0xc9,0x59,0x0e,0x2a,0x2d,0x19,0x0c,0x0c,0x15,0xbc,0x16,0x18,0x33,0x14,0x4f,0xaa,0xb8,0x2e,0x9c,0x9c,0x9f,0x9a,0x9f -,0x2e,0x9e,0xa6,0x1f,0x22,0x1d,0x26,0x1d,0x40,0x1b,0x0e,0x21,0x14,0x11,0x2c,0x0f,0xb1,0x44,0x41,0x8e,0xa7,0x94,0x8d,0x8d,0x8f,0x97,0x85,0x88,0x8e,0x93,0x8a,0x8c -,0x96,0xb2,0x4a,0x9f,0x1b,0x5f,0xbb,0x0d,0x17,0x13,0x08,0x10,0x0a,0x07,0x0f,0x18,0x07,0x0c,0x3d,0x2a,0x0f,0xb5,0x45,0x38,0x90,0xa8,0x99,0x97,0x8e,0x9d,0x8c,0x8e -,0xbf,0xa5,0xb7,0x9c,0xa9,0xb7,0xad,0x1b,0x42,0xae,0x1f,0x20,0x59,0x21,0x17,0x28,0x34,0x97,0x3e,0xc8,0x65,0x58,0xb1,0xa0,0x9d,0xa7,0x9b,0x93,0xa4,0x5a,0x9a,0x23 -,0xb1,0xd3,0x25,0xc1,0x48,0x2a,0x1d,0x0f,0x1c,0x27,0x12,0x12,0x1b,0x11,0x2d,0x44,0x1e,0x3d,0xcd,0xad,0x76,0x9f,0x2d,0xae,0x9d,0xb7,0x9b,0xbd,0xa7,0xbf,0xa9,0xb9 -,0x3a,0xaf,0x45,0x64,0xb3,0xa7,0x3b,0x4b,0xa6,0xc8,0x15,0x36,0xab,0x99,0x9b,0x91,0xe0,0x5f,0x8c,0x48,0x9a,0xaa,0xaa,0xb3,0x4c,0xcb,0x28,0x29,0x1f,0x1b,0x14,0x17 -,0x28,0x18,0x1a,0x0b,0x0f,0x21,0x0e,0x19,0x1c,0x19,0x59,0x33,0xdc,0x9c,0xa2,0x9f,0xb7,0x92,0xa6,0x99,0x93,0x8f,0x9e,0x9b,0x8e,0x9f,0x95,0xaa,0xa1,0xae,0xc3,0xb4 -,0xc1,0xa7,0x22,0x17,0x16,0x2b,0x17,0x09,0x16,0x0c,0x3e,0x1f,0x2b,0xe7,0x2c,0xe9,0xa0,0xa4,0xa4,0xa4,0xa1,0x9d,0x9e,0x97,0xac,0xae,0x19,0x6b,0x3f,0x28,0xcd,0x2b -,0x1d,0x1f,0x35,0x1d,0x24,0x27,0x14,0x24,0x25,0x53,0x9c,0x20,0xe7,0x5c,0xa0,0x9c,0x9c,0x93,0xbf,0x8e,0x92,0x9c,0x9f,0xc7,0xab,0x9c,0xd9,0x6f,0xbb,0x48,0x4c,0x35 -,0x1b,0x17,0x1b,0x21,0x18,0x17,0x21,0x1e,0x2b,0xaf,0x9c,0xbf,0xbe,0x27,0xbe,0x99,0x99,0x9c,0xa5,0x96,0xa6,0xa6,0x35,0x38,0xbc,0x2b,0x36,0x38,0x2b,0x1a,0x1e,0x20 -,0x1d,0x1d,0x13,0x10,0x1e,0x33,0x63,0xa9,0xbc,0xaf,0x9c,0xa4,0xa9,0x95,0x8c,0x8e,0x90,0x94,0xa2,0xa2,0x95,0xa2,0xc4,0x33,0x34,0x3f,0x2b,0x26,0x25,0x1c,0x1b,0x1b -,0x11,0x11,0x1a,0x24,0x1f,0x43,0xb7,0x6d,0xcb,0xab,0xab,0xae,0xa0,0x9c,0x9e,0x99,0x95,0x9f,0xcc,0xc1,0x5f,0x57,0xe8,0x2c,0x38,0x2f,0x24,0x1d,0x1c,0x17,0x14,0x0b -,0x11,0x21,0x23,0xc6,0x47,0x3d,0xcd,0xb9,0xaf,0xa4,0x98,0x97,0x97,0x99,0x97,0x9b,0x9d,0x9d,0xae,0xd9,0x23,0x38,0x3f,0x6b,0x63,0x23,0x17,0x17,0x18,0x0f,0x0e,0x1d -,0x36,0x1d,0x3c,0xfd,0xbc,0xa1,0xa5,0xa2,0xad,0x9f,0x9b,0x98,0x90,0x99,0x9d,0xac,0xab,0xc9,0x49,0x43,0x34,0xd5,0x22,0x20,0x1d,0x1a,0x10,0x19,0x16,0x16,0x22,0x1e -,0x4e,0x40,0xc9,0xb5,0xa5,0x9d,0xa1,0x96,0x9b,0x9f,0x9e,0x9c,0x93,0x9a,0x9e,0x3a,0x2a,0x45,0x39,0x57,0x34,0x2e,0x1c,0x1e,0x1d,0x1c,0x15,0x13,0x19,0x2a,0x37,0xc1 -,0x9c,0xa1,0xa9,0xc7,0xaa,0x9a,0x92,0x98,0x99,0x97,0x98,0xa5,0xa8,0x9e,0xd9,0xfa,0x28,0x32,0x4c,0x2e,0x1f,0x1c,0x1f,0x10,0x17,0x0e,0x16,0x28,0x24,0x2d,0x40,0xad -,0xe1,0x9e,0xa2,0xab,0x9e,0xa1,0x9e,0x9a,0x95,0x98,0x9a,0xa1,0xb9,0x2f,0x4d,0x4a,0x35,0x20,0x30,0x30,0x1f,0x1f,0x12,0x13,0x10,0x1b,0x23,0x4f,0xbd,0xd7,0xbf,0xd0 -,0x9f,0x9d,0x9f,0xa0,0x9b,0x97,0x96,0x9a,0xcf,0xa6,0xad,0x35,0xb4,0x3c,0x1d,0x22,0x40,0x2a,0x1c,0x1d,0x16,0x18,0x16,0x12,0x29,0x3f,0x3e,0xae,0xb4,0xa5,0x95,0x9b -,0xaa,0x9d,0x97,0x9c,0x97,0x8f,0x99,0x75,0x5f,0xb1,0xf2,0xba,0x33,0x1e,0x21,0x26,0x3c,0x1f,0x1a,0x1b,0x0f,0x0d,0x20,0x39,0x3f,0x5c,0xbf,0xbb,0xb4,0xab,0x9d,0x9f -,0x9d,0x97,0x9f,0x9f,0x9a,0x9d,0xb6,0xaf,0x55,0x3f,0x5b,0x3f,0x2c,0x1d,0x35,0x35,0x25,0x16,0x15,0x11,0x16,0x2a,0x24,0x57,0xc8,0xb9,0xb5,0xae,0xac,0xb9,0x96,0x9a -,0x9a,0x99,0x99,0x9f,0xa3,0x9f,0x39,0x6a,0x29,0x32,0xba,0x2b,0x25,0x2a,0x19,0x18,0x19,0x16,0x14,0x17,0x20,0x2c,0x40,0xc2,0xa0,0xc0,0xa4,0x98,0x9a,0x9a,0x98,0x99 -,0x97,0x93,0x9d,0x9f,0xab,0xb4,0x3d,0x4c,0x34,0x40,0x27,0x1d,0x21,0x19,0x1e,0x19,0x13,0x0d,0x16,0x2e,0x4d,0x3f,0x45,0xae,0x9c,0xa5,0xab,0xae,0x9e,0x90,0x93,0x9c -,0x9b,0xa0,0xa2,0xc3,0x30,0xbd,0x2d,0x3f,0x47,0x1c,0x1f,0x2a,0x1d,0x1c,0x15,0x0b,0x18,0x5d,0x38,0x40,0xa9,0xb8,0xba,0xa2,0xa1,0x9e,0x9c,0x9a,0x9c,0x93,0x96,0xc2 -,0xae,0xa6,0xef,0x37,0x2f,0x30,0x31,0x2e,0x1e,0x24,0x29,0x1b,0x11,0x0e,0x1d,0x33,0x2e,0x3d,0x44,0xb8,0xc0,0xaa,0xa5,0xbe,0x97,0x9b,0xa7,0x99,0x97,0x95,0x9b,0xba -,0xb9,0xc9,0x4e,0x49,0x25,0x25,0x5a,0x3c,0x2b,0x1f,0x15,0x12,0x13,0x2a,0x26,0x24,0x4a,0xd4,0xc7,0xac,0xa7,0xa6,0xa2,0xa0,0x99,0x9d,0x9e,0xa3,0xa2,0x9d,0xa2,0x39 -,0x25,0x3d,0x56,0xbc,0x31,0x20,0x1d,0x1e,0x18,0x23,0x1a,0x13,0x1f,0x1a,0x22,0xca,0xa5,0xc9,0xa7,0xa5,0xb9,0xa6,0x94,0x9a,0xa5,0x98,0x94,0x9a,0x9e,0xac,0x3f,0x3e -,0x2f,0xbb,0x4b,0x2b,0x1e,0x1b,0x21,0x2b,0x1d,0x0c,0x0f,0x19,0x41,0x52,0xb7,0xba,0xb8,0xb2,0xaf,0x9e,0xa5,0x98,0x95,0x9c,0x97,0x9c,0xb1,0xbf,0x59,0xac,0xbc,0x41 -,0x1e,0x1f,0x2b,0x1f,0x2c,0x24,0x18,0x14,0x16,0x10,0x15,0x27,0xc4,0xaa,0xa1,0x9d,0xae,0xae,0xa1,0x9c,0x93,0x98,0x93,0x9e,0xab,0x9a,0xa5,0xa3,0xcf,0x1c,0x23,0x3d -,0x26,0x25,0x20,0x1d,0x1e,0x16,0x0b,0x16,0x18,0x1e,0x45,0xba,0xa4,0xb1,0xb6,0xb0,0xa0,0x98,0x92,0x9d,0x97,0x92,0xa0,0xa1,0xa7,0xd0,0xbb,0xd3,0x2c,0x21,0x2b,0x2d -,0x2a,0x29,0x1f,0x12,0x10,0x18,0x15,0x1d,0x30,0xc3,0x5b,0xac,0xa6,0xa1,0x9f,0xae,0x94,0x8f,0x99,0x9d,0xa1,0x9f,0x94,0xac,0x4a,0xcb,0x3c,0x27,0x26,0x4a,0x2c,0x1e -,0x1d,0x1a,0x16,0x0e,0x0f,0x16,0x3f,0x5b,0x64,0x54,0xb6,0xa8,0xb1,0x9d,0xa3,0x9b,0x91,0x90,0x9e,0x9b,0xa4,0xb1,0xae,0x41,0x62,0x2f,0x2e,0x57,0x1f,0x2a,0x1c,0x12 -,0x1d,0x10,0x18,0x1d,0x1e,0x28,0x3f,0xc0,0xa0,0x9a,0xa8,0xab,0x9c,0x9a,0x99,0x92,0x98,0x9d,0x9f,0x9b,0xb4,0x41,0x41,0x28,0x28,0x20,0x23,0x1d,0x26,0x1c,0x16,0x17 -,0x0e,0x17,0x19,0x26,0xd9,0xe2,0xb9,0xad,0x9b,0x9a,0x9d,0x9b,0x9c,0x91,0x93,0x94,0xa3,0x9f,0xa4,0x4d,0xbc,0x50,0x37,0x26,0x24,0x21,0x1f,0x1c,0x1a,0x1d,0x15,0x16 -,0x1d,0x1f,0x26,0x51,0xaa,0x9a,0xb6,0xac,0xa0,0x9c,0x9b,0x9d,0x96,0x9d,0x9b,0xa5,0xad,0xc0,0xcd,0xbe,0x3a,0x1b,0x24,0xef,0x20,0x1f,0x24,0x17,0x14,0x17,0x1b,0x1e -,0x21,0x45,0x3e,0xc1,0x9d,0xa0,0xaf,0xa5,0x98,0x95,0x9c,0x9c,0x96,0x9d,0xa9,0xa5,0xc1,0xc1,0xd1,0x2c,0x2b,0x1e,0x26,0x26,0x23,0x1e,0x1c,0x17,0x14,0x1a,0x1c,0x25 -,0x47,0xae,0xba,0xaa,0x9e,0xa4,0x9c,0x9d,0x9b,0x9d,0xa3,0x9c,0x9b,0x9c,0xb5,0xb9,0x2f,0x25,0x28,0x2a,0x3a,0x2a,0x2f,0x1c,0x1f,0x14,0x0f,0x16,0x26,0x24,0x2a,0x76 -,0xb4,0x9a,0xa9,0xa4,0xa3,0x94,0x99,0xa0,0x98,0x93,0x96,0x9f,0xb0,0xc5,0xc0,0x3c,0x2a,0x21,0x24,0x24,0x3f,0x1f,0x1b,0x14,0x0e,0x17,0x20,0x1c,0x1d,0x54,0xc4,0xd7 -,0xae,0xa5,0x9e,0x97,0xab,0x99,0x99,0x93,0x91,0xa1,0xa1,0xaa,0xaf,0x4e,0x31,0x2f,0x38,0x1b,0x28,0x2b,0x1e,0x29,0x14,0x0d,0x12,0x28,0x20,0x2a,0x35,0xee,0xb0,0xa3 -,0x9b,0x98,0x99,0x9e,0x9b,0x9b,0x95,0x9a,0xa3,0xaf,0xad,0xa7,0x60,0x28,0x20,0x1d,0x20,0x29,0x2d,0x1c,0x1a,0x11,0x10,0x20,0x25,0x37,0x2e,0x39,0xee,0x9e,0xa2,0xb1 -,0x9b,0x98,0x98,0x96,0x93,0x9e,0x9d,0xa1,0xaf,0xa9,0xac,0x38,0x25,0x22,0x21,0x24,0x1f,0x1f,0x22,0x1b,0x0f,0x16,0x22,0x1d,0x1e,0x41,0xc1,0xad,0xbb,0xb2,0x98,0x8f -,0xa0,0xad,0x9a,0x8f,0x97,0x9f,0x9d,0xab,0xb5,0x2c,0x2f,0x33,0x3b,0x3a,0x20,0x1f,0x1b,0x17,0x15,0x1a,0x1e,0x1a,0x1b,0x32,0x38,0xe1,0xb0,0xab,0x99,0xa1,0xa5,0x9a -,0x97,0x95,0x9c,0x99,0x97,0xa6,0xc2,0xce,0xe6,0x3f,0x31,0x22,0x19,0x22,0x23,0x15,0x1d,0x19,0x1c,0x1d,0x1d,0x23,0x2f,0xee,0xe5,0xa1,0xa1,0x98,0x9e,0xa3,0x9c,0x98 -,0x96,0x98,0x9c,0x9f,0xac,0xd8,0xd3,0x2f,0x37,0x2b,0x29,0x2c,0x1e,0x14,0x1f,0x1b,0x1f,0x1c,0x17,0x1c,0x1a,0x36,0xb3,0xa1,0xaa,0xab,0xa9,0x9b,0x9b,0x9b,0x9b,0x97 -,0x96,0x9c,0xa6,0x62,0xc5,0xc6,0x3f,0x2c,0x2f,0x34,0x1a,0x16,0x1d,0x1f,0x24,0x1d,0x19,0x1f,0x1c,0x1e,0xd6,0xb2,0xb9,0xaa,0xa0,0x99,0x9c,0x9a,0x9f,0x9a,0x93,0x9a -,0x9e,0xad,0xaa,0xca,0x50,0x27,0x2d,0x3c,0x22,0x1d,0x19,0x19,0x1f,0x28,0x16,0x17,0x1c,0x1d,0x3e,0x48,0xaf,0xad,0xbf,0xa3,0x9e,0x9c,0x99,0x9a,0x9a,0x94,0x99,0x9b -,0xb6,0x63,0xc0,0xbb,0x4d,0x24,0x28,0x1d,0x21,0x25,0x1b,0x1c,0x20,0x1b,0x1d,0x1e,0x22,0x35,0x50,0x3b,0xaf,0xa0,0xa5,0xa2,0xa7,0x9b,0x9a,0x9a,0x9c,0x9b,0xa5,0xa1 -,0xa6,0xdc,0x3d,0x40,0x66,0x28,0x26,0x21,0x19,0x1f,0x25,0x23,0x1b,0x1f,0x1e,0x1b,0x2b,0x3a,0x65,0xba,0x9f,0xb4,0xae,0xa4,0xa0,0x9b,0x9f,0x98,0x96,0x9e,0xa6,0xaf -,0xb7,0x54,0x43,0xe0,0x3f,0x24,0x22,0x29,0x18,0x25,0x29,0x28,0x1d,0x19,0x1f,0x23,0x38,0x37,0x39,0xb5,0xad,0xab,0xa6,0xa2,0x99,0x9c,0x99,0x9d,0xa6,0xa1,0xa6,0xab -,0xa9,0xd1,0x34,0x42,0x2c,0x24,0x2d,0x1c,0x29,0x22,0x19,0x1e,0x1c,0x1f,0x2a,0x3c,0x53,0x56,0x33,0x61,0xca,0xae,0x9e,0x9f,0x99,0x98,0x9d,0xa7,0xaf,0x9c,0x9c,0xa2 -,0xbc,0x4c,0x54,0x49,0x29,0x1e,0x2f,0x3b,0x27,0x1a,0x1d,0x25,0x23,0x34,0x26,0x30,0x4a,0x2d,0x6c,0xd0,0xb2,0xb9,0x5a,0xa9,0x99,0x9e,0xa2,0xa9,0xa7,0xaa,0xb2,0xa2 -,0xa7,0xc3,0xdc,0x4d,0x37,0x41,0x31,0x2b,0x2e,0x1b,0x1e,0x34,0x29,0x2b,0x31,0x1e,0x22,0x36,0x36,0xba,0xad,0xbf,0xdb,0xc0,0xb9,0x9f,0x9c,0xa5,0xa2,0xa4,0x9f,0xa0 -,0xb9,0xba,0xaa,0xbf,0xca,0x2b,0x4f,0xce,0x26,0x2a,0x1f,0x25,0x33,0x36,0x2b,0x24,0x25,0x1e,0x23,0x23,0x58,0xb1,0xae,0xc5,0x4a,0xc0,0xbb,0xa6,0xa7,0xa4,0x9c,0xa8 -,0xaa,0xa6,0xac,0xa2,0xb7,0xcf,0x30,0x4c,0x67,0x57,0x3c,0x2d,0x23,0x1c,0x42,0x26,0x28,0x25,0x23,0x2e,0x4d,0x41,0x3d,0x49,0x3e,0xc3,0xac,0xb2,0xa9,0xa7,0xad,0x9c -,0xa5,0xad,0xa9,0xa3,0xc5,0x4b,0xdf,0xcd,0xc4,0x41,0x4e,0x2d,0x2d,0x28,0x28,0x28,0x24,0x2f,0x34,0x3e,0x39,0x36,0x3e,0x3d,0x40,0xb9,0xc2,0xc2,0xaa,0xa3,0xac,0xb5 -,0xbc,0xae,0xa9,0xa7,0xb1,0xc1,0xa1,0xaa,0x50,0x3b,0xcc,0x3a,0x29,0x38,0x43,0x3d,0x36,0x33,0x2d,0x31,0x28,0x2e,0x5b,0x38,0x3c,0x3f,0x48,0xb9,0xd1,0xc8,0xbe,0xac -,0xb6,0xbe,0xc0,0xb3,0xa3,0xc6,0x36,0xe9,0x9a,0xa0,0xaa,0x58,0x1f,0xa7,0x9b,0xd1,0x36,0xee,0x3b,0x1c,0x27,0x30,0x0b,0x01,0x09,0x3e,0x8e,0x44,0x3f,0x90,0xae,0x2a -,0xb4,0x92,0x8f,0x8f,0x91,0x9a,0x9f,0x8d,0x92,0xd9,0x0b,0x0b,0x2f,0xb7,0x1f,0x1e,0x6a,0x11,0x15,0x99,0x8d,0x1d,0xda,0xad,0x26,0x13,0x1e,0x94,0x8f,0xb2,0x0c,0x26 -,0xad,0x2f,0x4f,0xa7,0x2f,0x30,0xaa,0xb4,0x1f,0x0d,0x17,0x2c,0x5e,0x8e,0x81,0x8d,0x31,0x2a,0x26,0x21,0xa5,0x8f,0x8a,0x9f,0x14,0x1b,0x94,0x5f,0x08,0x0b,0x27,0x18 -,0x1a,0x38,0x41,0xbd,0x1d,0x14,0xc8,0x92,0x96,0x95,0x8d,0x9c,0x23,0xc1,0xa8,0xbd,0x49,0x2f,0x0f,0x19,0xb8,0xbe,0x20,0x08,0x0d,0x2e,0xb8,0x13,0x36,0x98,0x35,0x18 -,0xa1,0x8b,0x8e,0x96,0x9c,0x2c,0x14,0xaf,0x8d,0x89,0xb6,0x22,0x4b,0xa7,0xa1,0xb7,0xb3,0x21,0x2f,0xa7,0xd0,0x1d,0x08,0x19,0x1c,0x10,0x45,0x90,0x92,0x36,0x25,0x17 -,0x19,0xb4,0x9f,0x97,0xac,0x2d,0xad,0xac,0xbc,0x2c,0x35,0x3a,0x1e,0x3b,0xb5,0xb1,0x25,0x1f,0x18,0x1a,0xb4,0x90,0x87,0x8d,0xc1,0x21,0x9e,0x95,0xab,0xba,0x3b,0x3d -,0x47,0xbe,0xa0,0x46,0x0b,0x10,0x21,0x5f,0x52,0x2a,0x9d,0xb5,0x21,0x28,0x9a,0x8b,0x90,0xad,0x1c,0x1b,0x1f,0xa8,0x9f,0x36,0x23,0x27,0x27,0x22,0x2c,0x1e,0x28,0x2a -,0x48,0x2a,0x0e,0x22,0x65,0x3b,0x32,0xaa,0x8d,0x83,0x86,0x9a,0x31,0x5d,0x90,0x8d,0x92,0x97,0x5e,0xcc,0xb8,0x1c,0x1c,0x0e,0x0e,0x10,0x0c,0x1a,0x1d,0x1a,0xb9,0x1d -,0x10,0xa7,0x8d,0x88,0x84,0x94,0xa9,0x91,0x9d,0x95,0x96,0x98,0xa4,0xa7,0x9b,0xbe,0x1f,0x16,0x20,0x1c,0x2e,0x1c,0x5a,0x2e,0x15,0x1a,0x04,0x26,0x94,0x25,0x22,0x15 -,0x03,0x23,0x2d,0x1e,0x2b,0x1a,0x13,0x0e,0x1f,0x18,0x0a,0x0f,0x16,0x0f,0x0a,0x09,0x09,0x0f,0x08,0x05,0x0a,0xd5,0x88,0x94,0x8c,0x9f,0x55,0x8b,0x82,0x85,0x82,0x83 -,0x82,0x80,0x86,0x8c,0x8d,0x8a,0x94,0xa3,0xa2,0x9a,0xb5,0xc4,0x1d,0x0a,0x19,0xaa,0x99,0x9b,0x8a,0xe0,0x3c,0x8f,0xcd,0xab,0x8e,0x9f,0x8f,0x86,0x8f,0xbd,0x34,0x34 -,0x1e,0x14,0x1e,0x22,0x0e,0x15,0x09,0x01,0x07,0x11,0x14,0x0b,0x04,0x00,0x0e,0x0e,0x0b,0x3d,0x33,0x18,0xa4,0x9f,0xb3,0x9f,0x9f,0x9d,0x9d,0xa9,0xc3,0x3c,0x37,0x2d -,0x12,0x1c,0x5b,0xaf,0xaf,0xbd,0x16,0x0f,0x22,0x22,0xa7,0x29,0x24,0x8d,0x90,0xdb,0xa6,0xed,0x22,0xad,0xa7,0xa2,0x8f,0x8a,0x8b,0xa0,0x36,0x9d,0x91,0x87,0x83,0x88 -,0x8c,0x8d,0x9b,0x9a,0xa5,0x46,0x88,0x96,0x9e,0x82,0x8c,0xaa,0x8b,0x8e,0xa7,0x87,0x8a,0x9c,0x95,0xbf,0x1b,0x1b,0x2d,0xba,0x0c,0x01,0x04,0x02,0x01,0x02,0x02,0x02 -,0x01,0x00,0x08,0x04,0x03,0x18,0x11,0x01,0x17,0x25,0x0b,0x51,0xb5,0x17,0x22,0x3e,0x9b,0x98,0xa2,0x8f,0xa4,0x43,0xbc,0x32,0x20,0x9c,0x97,0xa3,0x41,0x36,0x8c,0x44 -,0x34,0x88,0x90,0xa5,0x87,0x84,0x94,0x8b,0x8b,0x8d,0x84,0x82,0x81,0x82,0x8c,0x8b,0x9f,0x26,0xa6,0x95,0xab,0xed,0x28,0x43,0x17,0x0c,0x62,0x0e,0x0e,0xba,0x16,0x11 -,0xad,0x4d,0x19,0xb9,0xb2,0x2e,0x55,0x2d,0x51,0x2d,0x0f,0x18,0x19,0x0f,0x16,0x14,0x0c,0x0f,0x08,0x0a,0x04,0x06,0x22,0x0b,0x05,0x2c,0x1d,0x18,0xa6,0x9e,0x93,0x89 -,0x8b,0x8c,0x8e,0xae,0xac,0xb1,0xdf,0x98,0xa2,0x24,0x2e,0x1e,0x08,0x0c,0x0a,0x0f,0x0e,0x13,0x9c,0xda,0xe6,0x8a,0x90,0x8f,0x80,0x80,0x80,0x80,0x83,0x85,0x86,0x89 -,0x83,0x81,0x8c,0x8c,0x8b,0x96,0x95,0x94,0x4d,0x2b,0x1a,0x18,0x0e,0x0a,0x27,0x0e,0x00,0x17,0x1d,0x09,0x1d,0x23,0x11,0x11,0x15,0x1d,0x16,0x0d,0x0c,0x0a,0x04,0x08 -,0x0b,0x04,0x01,0x05,0x04,0x03,0x04,0x04,0x09,0x03,0x2a,0xa6,0x1d,0x9c,0x87,0x9e,0xa7,0x8b,0x8f,0x8f,0x8d,0x8a,0x87,0x89,0x8b,0x8d,0x9e,0xaa,0x8e,0x8c,0x95,0x94 -,0x9b,0xc9,0xca,0x49,0xa5,0xdd,0xa1,0x86,0xad,0xab,0x87,0x93,0xbf,0x89,0x89,0x8d,0x85,0x89,0x88,0x8e,0xa6,0xac,0xc4,0x16,0x15,0x0f,0x06,0x07,0x0b,0x09,0x0b,0x0b -,0x0b,0x0d,0x08,0x5c,0x3c,0x0b,0x6d,0xc9,0x0b,0x1c,0xb7,0x1f,0x2b,0x16,0x11,0x1b,0x13,0x18,0x17,0x0f,0x18,0x24,0x18,0x1f,0x22,0x2b,0xbd,0x68,0x14,0x1e,0x0d,0x08 -,0x50,0x1d,0x19,0x9c,0xa5,0x1f,0xa1,0x96,0xb6,0x9d,0x92,0x94,0x8f,0x8b,0x8b,0x8b,0x96,0x97,0x89,0x88,0x86,0x84,0x88,0x85,0x85,0x93,0x86,0x8c,0x97,0x81,0x87,0x90 -,0x83,0x8b,0xa6,0x8c,0x9e,0x2f,0x2c,0x20,0x1a,0x1a,0x0a,0x07,0x0b,0x05,0x08,0x0f,0x0c,0x06,0x07,0x04,0x06,0x07,0x02,0x04,0x03,0x00,0x0a,0x08,0x01,0x10,0x15,0x05 -,0x16,0x30,0x3c,0xc0,0xc1,0xb4,0x9b,0xa2,0x90,0x8c,0xa6,0x9f,0xa6,0x62,0x6e,0x9e,0x9e,0x96,0x9b,0xba,0xa8,0x99,0xad,0x92,0x89,0xa8,0x9c,0x87,0x94,0x9f,0x8c,0x8e -,0x91,0x8c,0x86,0x86,0x8a,0x93,0x8a,0x8c,0xa2,0x91,0x8b,0xa2,0xad,0xa1,0xb0,0x28,0x20,0x1d,0x13,0x0a,0x03,0x1a,0x18,0x05,0x13,0x35,0x11,0x65,0xa6,0x36,0xbc,0xc7 -,0x36,0xb7,0x21,0x17,0xeb,0x11,0x0a,0x0b,0x0a,0x09,0x0b,0x0b,0x0e,0x0f,0x0c,0x0f,0x26,0x1b,0x09,0xc8,0xbc,0x16,0x9f,0x9d,0x18,0x47,0x3f,0x38,0xa5,0xbe,0xa4,0x97 -,0xbb,0x50,0x97,0xae,0x3f,0xa3,0xab,0xab,0x93,0x93,0x9b,0x9d,0x98,0x8e,0x86,0x8b,0x8c,0x80,0x84,0x8a,0x84,0x81,0x87,0x87,0x84,0x85,0x8a,0x8b,0x8e,0x8f,0xde,0x1f -,0x27,0x0d,0x0b,0x0d,0x07,0x06,0x08,0x0a,0x13,0x0c,0x09,0x0c,0x0d,0x07,0x04,0x10,0x0c,0x02,0x07,0x0e,0x06,0x0c,0x18,0x0b,0x0c,0x1a,0x28,0x55,0x1c,0x18,0xd2,0x28 -,0x29,0x5f,0xea,0x59,0xc2,0xa9,0xb4,0xa3,0x9e,0xa3,0xa1,0x93,0x99,0x9f,0x8c,0x92,0x9f,0x8b,0x93,0x9e,0x8c,0x99,0xab,0x97,0x98,0x8f,0x89,0x9c,0x8e,0x85,0x8c,0x8a -,0x8f,0x9a,0x8f,0x98,0x9b,0x9e,0xa4,0xb0,0x31,0x1a,0x12,0x10,0x13,0x1e,0x0d,0x12,0x39,0x31,0x1b,0x36,0x36,0x3c,0xbf,0xc5,0xb0,0xbc,0x24,0x1e,0x1f,0x0e,0x13,0x15 -,0x0f,0x0b,0x0b,0x0e,0x17,0x17,0x15,0x16,0x13,0x14,0x09,0x0f,0x40,0x15,0x14,0x37,0x2b,0xea,0x9f,0xa3,0xaa,0xa7,0x9d,0x94,0x98,0xae,0xa0,0xa7,0x49,0x4a,0x2e,0x2a -,0x1f,0x45,0xc3,0xcb,0xa9,0x9a,0x9a,0x93,0x89,0x8c,0x85,0x80,0x83,0x83,0x80,0x82,0x85,0x84,0x84,0x85,0x87,0x96,0x98,0x9a,0x2a,0x2e,0x20,0x0c,0x0c,0x0c,0x0b,0x09 -,0x0a,0x0a,0x09,0x0b,0x0a,0x0c,0x0a,0x0b,0x05,0x02,0x0a,0x09,0x05,0x0d,0x0b,0x06,0x0f,0x16,0x1d,0x1a,0x1c,0x21,0x33,0x1a,0x1d,0x74,0x20,0x1f,0x26,0x27,0x4d,0xa3 -,0xa3,0xab,0xa0,0x91,0x91,0x92,0x8d,0x93,0xa2,0x90,0x8b,0x9a,0x9a,0x8e,0x9c,0xa5,0x96,0x9b,0x92,0x92,0x97,0x8e,0x90,0x91,0x89,0x88,0x91,0x91,0x8c,0x90,0x92,0x92 -,0x96,0x9e,0xc1,0x3c,0x3b,0x2c,0x19,0x0c,0x15,0x22,0x12,0x1a,0x40,0x1e,0x18,0x2b,0x2c,0x48,0xbd,0x2c,0x2c,0xd7,0x1a,0x14,0x1b,0x15,0x0f,0x0e,0x14,0x16,0x18,0x1e -,0x15,0x14,0x15,0x17,0x11,0x0e,0x0d,0x12,0x1b,0x0f,0x16,0x26,0x29,0x34,0xbe,0xb2,0xa3,0x9d,0x9a,0x95,0x98,0xa9,0xa2,0xa2,0xb8,0xc6,0xd5,0xbe,0xc6,0xc6,0x9c,0x91 -,0x8f,0x8f,0x8d,0x89,0x89,0x86,0x83,0x81,0x86,0x85,0x81,0x85,0x85,0x85,0x86,0x89,0x93,0x9d,0x99,0xa7,0x33,0x23,0x15,0x10,0x0f,0x0d,0x0c,0x08,0x07,0x06,0x07,0x09 -,0x08,0x06,0x07,0x03,0x03,0x0a,0x09,0x03,0x0c,0x12,0x0f,0x19,0x19,0x21,0x37,0x25,0x21,0x42,0x29,0x20,0x3d,0x28,0x1d,0x1c,0x34,0xa8,0xb6,0xcc,0x9d,0x98,0xa3,0x99 -,0x91,0x8e,0x9d,0x96,0x88,0x97,0xa2,0x8f,0x91,0xa6,0x98,0x96,0x90,0x90,0x9b,0x8c,0x8f,0x97,0x8f,0x8a,0x8c,0x8d,0x91,0x92,0x8e,0x9c,0xa5,0xa5,0x6b,0x39,0xeb,0x2b -,0x1a,0x0e,0x1d,0x12,0x05,0x0f,0x16,0x0a,0x0b,0x1a,0x18,0x45,0x3f,0x35,0xab,0x35,0x40,0xb0,0xd1,0xa9,0x69,0x3a,0x2c,0x37,0x21,0x36,0x2a,0x0f,0x18,0x15,0x25,0x13 -,0x2d,0x26,0x18,0x29,0xc8,0x59,0xbb,0xa9,0xcd,0x99,0xa5,0xab,0x9b,0x9b,0xba,0xa8,0x95,0x96,0xad,0xd4,0xa7,0xb5,0x29,0x47,0x5e,0x24,0x18,0x18,0x1b,0x11,0x29,0x3b -,0x20,0x52,0x9f,0x9b,0x9d,0xa5,0x99,0x8b,0x9a,0xa2,0x97,0xa1,0x3e,0xbf,0xa5,0xad,0xed,0x20,0x29,0x2d,0x31,0x3f,0x2a,0x18,0x18,0x21,0x1c,0x16,0x4c,0x2f,0x14,0x30 -,0x3a,0xc0,0xa1,0x9e,0x9d,0x93,0x92,0x8e,0x8a,0x94,0x95,0x9c,0xb2,0xa2,0xbd,0x39,0x49,0x21,0x29,0xcb,0x3d,0x25,0x23,0x2f,0x33,0x42,0xaa,0xde,0x25,0xc7,0xc9,0x32 -,0xb0,0x3f,0x20,0x2a,0x1c,0x1f,0x2f,0x1d,0x1f,0x1c,0x19,0x24,0x19,0x14,0x1a,0x1e,0x11,0x21,0x20,0x16,0x13,0x0b,0x05,0x0d,0x39,0x13,0x1f,0xdc,0x60,0x9d,0x90,0x95 -,0x8a,0x8a,0x8e,0x84,0x84,0x88,0x89,0x89,0x8c,0x8e,0x8d,0x8a,0x8c,0x98,0x98,0x8e,0x99,0xa6,0xa8,0x4e,0x1b,0xad,0xb5,0x1f,0xea,0x3e,0x18,0x2e,0x42,0xca,0xa8,0x23 -,0x44,0x97,0x9e,0xb5,0xa1,0xc8,0x45,0x2c,0x2d,0x2b,0x1a,0x11,0x0d,0x0f,0x0f,0x14,0x0e,0x07,0x0f,0x19,0x18,0x22,0x44,0x1f,0x37,0xa9,0xcf,0xa7,0x3d,0x2b,0xac,0xa5 -,0xc0,0xae,0xbe,0x28,0x25,0x1f,0x5d,0x2f,0x0f,0x19,0x1b,0x0f,0x10,0x11,0x06,0x11,0x17,0x0b,0x29,0xac,0xab,0x93,0x8e,0x8d,0x82,0x85,0x88,0x84,0x85,0x87,0x86,0x8b -,0x8f,0x96,0xa4,0x9e,0xab,0xcb,0xbf,0x4d,0x3d,0xad,0x9b,0x78,0xb6,0x9d,0xa6,0x9d,0x99,0x9b,0xa5,0xaf,0x2d,0x48,0x1e,0x16,0x23,0x0f,0x07,0x07,0x09,0x05,0x04,0x04 -,0x03,0x03,0x03,0x06,0x04,0x03,0x03,0x04,0x00,0x0b,0x15,0x09,0x1d,0xc2,0xa7,0x8f,0x8e,0x8b,0x84,0x88,0x87,0x81,0x84,0x87,0x85,0x8b,0x89,0x8b,0x8e,0x8b,0x8d,0x93 -,0x8f,0x8c,0x93,0x97,0x9e,0x97,0x87,0x90,0xa5,0x8b,0x8d,0x9c,0x93,0x97,0x92,0x91,0xa4,0xa6,0x93,0xaa,0xb9,0xbc,0x1d,0x1a,0x14,0x13,0x13,0x0d,0x08,0x05,0x05,0x08 -,0x0a,0x03,0x09,0x19,0x0c,0x0f,0x29,0x15,0x14,0x2c,0x25,0x49,0xfd,0x1d,0x2d,0x26,0x17,0x75,0xc5,0x2f,0x2b,0x1c,0x28,0x5e,0x30,0x22,0x29,0x15,0x18,0x1c,0x12,0x2e -,0x19,0x0c,0x22,0x59,0x3c,0xb1,0xb7,0x79,0x99,0x96,0x8d,0x89,0xa5,0xa9,0x91,0x9d,0x9f,0x90,0x97,0xa5,0xab,0x95,0x8d,0x8c,0x8b,0x8e,0x8d,0x86,0x81,0x86,0x84,0x81 -,0x86,0x86,0x85,0x88,0x8c,0x9b,0xbe,0xa3,0x3d,0x11,0x0f,0x0a,0x08,0x07,0x05,0x03,0x04,0x02,0x01,0x02,0x02,0x03,0x00,0x02,0x06,0x02,0x02,0x09,0x09,0x08,0x11,0x27 -,0xc1,0xca,0x2d,0xda,0x9f,0xa3,0x9b,0x91,0x9f,0xaf,0xad,0xa3,0x98,0x9c,0xba,0xa5,0xa5,0x9e,0x9d,0xad,0x8e,0x91,0xa9,0x8d,0x89,0x92,0x8d,0x8f,0x92,0x8a,0x91,0x93 -,0x8a,0x93,0x9c,0x8e,0x8e,0x9d,0xb2,0xb7,0xaa,0xac,0x33,0x21,0x20,0x17,0x16,0x0d,0x1f,0x41,0x14,0x20,0xa5,0xa0,0xa7,0xa0,0xae,0x9b,0x99,0xa7,0x98,0x9b,0x41,0x28 -,0x3f,0x33,0x2d,0x1d,0x18,0x20,0x21,0x1b,0x1c,0x16,0x10,0x0d,0x0d,0x2a,0x16,0x08,0x14,0x1d,0x17,0x1e,0x22,0x34,0xfd,0x27,0x34,0xa5,0xad,0x3a,0x2d,0x25,0x24,0x28 -,0x21,0x1e,0x26,0x24,0x46,0x5c,0xb7,0x9a,0x99,0x89,0x84,0x87,0x82,0x81,0x81,0x81,0x80,0x81,0x82,0x83,0x86,0x87,0x8a,0x92,0xa6,0xb5,0x29,0x19,0x0e,0x08,0x07,0x06 -,0x04,0x03,0x02,0x01,0x00,0x01,0x09,0x06,0x04,0x0d,0x0f,0x0e,0x14,0x1d,0x27,0x2e,0x2b,0x2f,0x3e,0x41,0x4f,0x45,0x24,0x1f,0x33,0xfe,0xbd,0xce,0x4c,0xbd,0x9f,0xa1 -,0xa9,0x63,0x9c,0x8e,0xa1,0x98,0x8f,0x9a,0x9c,0x98,0x93,0x90,0x93,0x90,0x8f,0x92,0x94,0x8f,0x90,0x93,0x9e,0xab,0xa2,0xa3,0xc2,0xde,0xcf,0x25,0x39,0x2e,0x1e,0xa4 -,0xae,0x31,0x99,0x93,0xad,0xa7,0xad,0xac,0x9f,0xa8,0x63,0x3f,0x1d,0x18,0x1d,0x13,0x13,0x19,0x11,0x10,0x20,0x18,0x1c,0x16,0x0b,0x14,0x0d,0x09,0x1c,0x0f,0x06,0x13 -,0x18,0x12,0x19,0x15,0x21,0x2e,0x28,0xae,0xbe,0x46,0x34,0x3b,0x46,0x43,0x27,0x1f,0x2b,0x28,0x21,0x3b,0x5f,0x34,0xae,0xa0,0x8f,0x83,0x86,0x88,0x82,0x82,0x82,0x80 -,0x80,0x81,0x81,0x83,0x84,0x83,0x86,0x89,0x8e,0x96,0x9f,0xaa,0x21,0x16,0x10,0x09,0x0a,0x05,0x02,0x03,0x01,0x00,0x05,0x04,0x03,0x08,0x0a,0x08,0x0e,0x1b,0x19,0x2b -,0x1b,0x1c,0x3a,0x2e,0x38,0x2f,0x20,0x18,0x1e,0x27,0x58,0xcd,0xe0,0xd8,0x51,0xec,0xa2,0xab,0x45,0x99,0x98,0xac,0x9b,0x91,0x93,0x98,0xab,0x9c,0x8c,0x8d,0x91,0x8f -,0x93,0x93,0x8c,0x94,0x95,0x99,0xa8,0xaa,0xac,0xaa,0xc1,0x2e,0x21,0x28,0x36,0x16,0x25,0xa4,0x2f,0x4e,0x99,0x9e,0xa4,0xa1,0xaf,0xa1,0x9b,0xa9,0xac,0xbc,0x2f,0x25 -,0x1f,0x26,0x22,0x18,0x10,0x16,0x31,0x2e,0x1b,0x13,0x16,0x1b,0x12,0x0d,0x1d,0x1c,0x0d,0x19,0x28,0x1a,0x29,0x25,0x19,0x2f,0x78,0x4d,0xba,0x4b,0x2c,0x3c,0x1b,0x1e -,0x2e,0x1f,0x1b,0x1e,0x1c,0x2e,0x49,0x2d,0x44,0x9d,0x95,0x8e,0x84,0x89,0x88,0x82,0x81,0x82,0x81,0x81,0x81,0x81,0x84,0x88,0x86,0x89,0x92,0x9e,0xac,0xcd,0x22,0x10 -,0x0d,0x0e,0x08,0x07,0x07,0x03,0x02,0x02,0x01,0x04,0x08,0x04,0x05,0x0b,0x0c,0x15,0x1a,0x15,0x1e,0x23,0x1e,0x2a,0x40,0x2d,0x45,0x2a,0x20,0x56,0x43,0x60,0xa0,0xa8 -,0xb0,0x96,0x90,0x9c,0xae,0x9f,0xa3,0xa4,0x94,0x96,0xab,0xbb,0xa2,0x99,0x97,0x95,0x93,0x8d,0x90,0x90,0x8c,0x8e,0x94,0x99,0x9c,0x9c,0xa1,0xb3,0xad,0x53,0x39,0x37 -,0x48,0x4e,0x28,0x28,0x28,0x32,0xb8,0xac,0x23,0x2e,0xa7,0xb3,0xb0,0xae,0x61,0x5e,0x50,0x30,0x6f,0x53,0x2f,0x2a,0x22,0x2b,0x2c,0x1f,0x20,0x1d,0x19,0x17,0x19,0x17 -,0x12,0x0b,0x0b,0x0d,0x0b,0x0f,0x0f,0x0f,0x0f,0x26,0x39,0x35,0x2e,0x29,0x49,0xc5,0xbb,0xca,0x50,0x28,0x27,0x28,0x2c,0x57,0xb4,0xa5,0x9b,0x93,0x89,0x86,0x86,0x84 -,0x85,0x82,0x83,0x84,0x82,0x82,0x86,0x85,0x86,0x87,0x87,0x8e,0x96,0x92,0x98,0xac,0x3b,0x1d,0x13,0x0b,0x06,0x04,0x04,0x03,0x03,0x02,0x03,0x04,0x04,0x07,0x07,0x06 -,0x0b,0x0b,0x09,0x15,0x1c,0x16,0x1d,0x22,0x26,0x36,0x28,0x2e,0xa8,0x9f,0xb2,0xa7,0x9d,0x9c,0x9c,0x96,0x96,0x96,0x98,0x93,0x8e,0x94,0x94,0x9a,0xa3,0xa5,0xad,0xa7 -,0xb7,0xb5,0x9f,0xaa,0xaa,0x97,0x95,0x9f,0x9b,0x97,0x92,0x91,0x98,0x9f,0xa0,0xa6,0xb6,0xbf,0xb9,0xce,0x46,0x3c,0x4c,0xb6,0xbc,0x41,0x3a,0x32,0x1f,0x21,0x24,0x19 -,0x15,0x18,0x13,0x16,0x1b,0x1a,0x1e,0x24,0x2c,0xb1,0xb0,0x47,0xcd,0x36,0x42,0x3d,0x2f,0x20,0x17,0x14,0x0e,0x11,0x11,0x17,0x16,0x12,0x12,0x17,0x1a,0x15,0x0f,0x17 -,0x29,0x1c,0x1c,0x25,0x24,0x30,0x3b,0xd5,0x9e,0x93,0x91,0x93,0x8b,0x86,0x84,0x85,0x84,0x83,0x82,0x82,0x83,0x82,0x83,0x86,0x87,0x88,0x8e,0x93,0x9a,0xab,0xaf,0xb7 -,0x4a,0x24,0x19,0x11,0x10,0x0e,0x0b,0x0c,0x0a,0x08,0x04,0x07,0x0a,0x08,0x06,0x07,0x07,0x0a,0x0f,0x0d,0x10,0x0f,0x14,0x0f,0x11,0x17,0x16,0x0b,0x0d,0x2e,0x29,0x28 -,0xbc,0xa7,0xa4,0x95,0x8f,0x8a,0x88,0x8c,0x8e,0x8f,0x8e,0x90,0x97,0x9c,0xa3,0xae,0xd8,0xbb,0xa3,0xa5,0xaf,0xb4,0xad,0xae,0xad,0xb8,0xbb,0x9d,0x9b,0xa3,0x9d,0x9d -,0xa1,0x9d,0xa0,0xa1,0x96,0x98,0x9f,0x9c,0x99,0x97,0x9a,0xb1,0xb6,0xc4,0x43,0x33,0x37,0x39,0x1e,0x17,0x10,0x0e,0x12,0x14,0x0d,0x19,0x29,0x2e,0x2a,0x21,0x28,0x3c -,0x30,0x28,0xc4,0x46,0x1e,0x1e,0x17,0x1b,0x1b,0x11,0x11,0x14,0x1a,0x1e,0x20,0x10,0x13,0xa4,0x99,0x0a,0x01,0x99,0x19,0x19,0xa1,0x16,0x78,0x1f,0x9e,0xa6,0x8c,0x56 -,0x1e,0x84,0x2d,0x9c,0xdc,0x33,0xf9,0x10,0x1f,0x1d,0x13,0x0d,0x0b,0x1e,0x20,0x0f,0x11,0x14,0x25,0x22,0x29,0x4d,0x1e,0x9a,0x80,0x90,0x9d,0x87,0x80,0x80,0x82,0x82 -,0x82,0x86,0x83,0x83,0x81,0x87,0x83,0x89,0x8a,0x89,0x98,0x96,0x96,0x97,0xc8,0xa8,0xad,0x2c,0x2d,0xb6,0x37,0x36,0x4d,0x22,0x2e,0x16,0x0d,0x16,0x0f,0x06,0x09,0x06 -,0x06,0x08,0x02,0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x03,0x01,0x03,0x05,0x0a,0x0b,0x0e,0x15,0x0c,0x24,0x47,0x3c,0xa5,0xb1,0xab,0x9f,0x97,0x8e,0x90 -,0x8f,0x8f,0x87,0x87,0x8a,0x89,0x88,0x85,0x85,0x87,0x85,0x86,0x8b,0x86,0x82,0x81,0x81,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x83,0x89,0x89,0x87 -,0x85,0x86,0x85,0x8b,0x8a,0x87,0x8d,0x8f,0x96,0x9c,0x99,0x90,0x9e,0xb0,0x2c,0x1e,0x1d,0x18,0x0d,0x09,0x0b,0x04,0x06,0x03,0x03,0x02,0x01,0x01,0x01,0x01,0x00,0x00 -,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x01,0x02,0x03,0x04,0x02,0x05,0x07,0x06,0x08,0x09,0x0e,0x0e,0x0b,0x13,0x1e,0x15,0x16,0x26,0x2d,0x3a,0x3c -,0x4f,0xa6,0xa2,0xa9,0x96,0x90,0x98,0x8f,0x89,0x88,0x83,0x85,0x88,0x86,0x84,0x84,0x84,0x86,0x87,0x86,0x87,0x86,0x87,0x87,0x86,0x85,0x84,0x83,0x86,0x88,0x88,0x8a -,0x8c,0x87,0x86,0x88,0x85,0x85,0x84,0x85,0x85,0x84,0x82,0x82,0x83,0x84,0x85,0x8f,0x9a,0x96,0x96,0x2f,0x0c,0x12,0x0d,0x08,0x05,0x08,0x0a,0x05,0x03,0x11,0x2d,0x15 -,0x1b,0x3a,0xb5,0x9f,0xa3,0xad,0xb2,0x9f,0x98,0x90,0x8e,0x8b,0x8b,0x8e,0x89,0x88,0x89,0x8b,0x8b,0x8d,0x8d,0x8d,0x95,0xa4,0xde,0x29,0x42,0xdb,0x1e,0x1f,0x1c,0x22 -,0x32,0x19,0x0d,0x10,0x10,0x0e,0x0c,0x07,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00 -,0x01,0x03,0x04,0x03,0x02,0x03,0x04,0x03,0x04,0x05,0x05,0x06,0x08,0x09,0x0b,0x0a,0x0a,0x0c,0x0b,0x15,0x43,0x5e,0x2a,0x5b,0x9f,0x9a,0x93,0x8f,0x88,0x83,0x86,0x84 -,0x82,0x80,0x81,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x84,0x8a,0x8f -,0x9a,0xa5,0xb6,0x2e,0x1f,0x18,0x1a,0x18,0x0e,0x0b,0x0a,0x09,0x07,0x08,0x09,0x03,0x02,0x06,0x05,0x07,0x07,0x06,0x08,0x0e,0x15,0x14,0x0f,0x0e,0x14,0x15,0x10,0x0b -,0x08,0x08,0x07,0x05,0x06,0x07,0x05,0x02,0x04,0x05,0x06,0x08,0x06,0x08,0x0d,0x0b,0x0e,0x0f,0x09,0x0e,0x15,0x17,0x1a,0x19,0x18,0x26,0x30,0x1e,0x19,0x16,0x1c,0x24 -,0x1c,0x18,0x15,0x0c,0x0e,0x0f,0x0d,0x18,0x1e,0x17,0x2e,0xb4,0xbc,0xa5,0xa7,0xaa,0x97,0x8f,0x91,0x95,0x9d,0x91,0x8d,0x9a,0x9b,0x97,0xad,0xcc,0x9a,0x93,0xa2,0x2c -,0x23,0xcc,0x50,0x1a,0x2e,0xd6,0x29,0x1e,0x28,0xa7,0x97,0xa9,0x9e,0x87,0x87,0x90,0x8f,0x88,0x82,0x82,0x83,0x82,0x84,0x85,0x82,0x81,0x81,0x82,0x84,0x85,0x83,0x84 -,0x8d,0x92,0x91,0x9b,0xae,0x2b,0x1c,0x15,0x0b,0x08,0x0b,0x0a,0x07,0x06,0x05,0x09,0x0b,0x08,0x07,0x07,0x07,0x0c,0x0c,0x0a,0x08,0x06,0x07,0x0a,0x0c,0x0a,0x14,0x26 -,0x47,0xa1,0xa2,0x9f,0x8e,0x8a,0x89,0x87,0x86,0x86,0x86,0x88,0x87,0x86,0x89,0x8a,0x8d,0x8c,0x89,0x8d,0x92,0x90,0x8f,0x94,0x97,0x9c,0xb9,0xb3,0x9e,0xa2,0xa4,0xa2 -,0xa3,0x9d,0x8f,0x90,0x9a,0x9b,0x96,0x93,0x99,0x9e,0xa6,0x6e,0x41,0x5c,0x2b,0x1f,0x1f,0x24,0x2c,0x1f,0x1a,0x24,0x1d,0x0e,0x0e,0x25,0x25,0x0d,0x0e,0x2b,0xcc,0x32 -,0x1d,0x2a,0xa7,0xc7,0x35,0xac,0xaf,0x28,0x13,0x1a,0x1e,0x0b,0x05,0x0b,0x0e,0x07,0x04,0x05,0x0b,0x0f,0x0c,0x0b,0x0e,0x13,0x14,0x1f,0xb4,0xa3,0x9a,0x8e,0x89,0x86 -,0x83,0x82,0x81,0x80,0x80,0x81,0x81,0x81,0x82,0x84,0x85,0x8a,0x9a,0xaf,0xc9,0x29,0x10,0x0b,0x09,0x07,0x06,0x06,0x07,0x05,0x06,0x08,0x0b,0x0d,0x0a,0x0a,0x0f,0x10 -,0x16,0x1a,0x14,0x14,0x19,0x29,0x2b,0x1e,0x1c,0x28,0x33,0x3a,0x43,0x3a,0x2b,0x31,0x56,0xc3,0xbc,0xae,0xa5,0x9a,0x8e,0x91,0x96,0x90,0x8f,0x8f,0x8f,0x92,0x92,0x98 -,0xa0,0xa2,0x9f,0xa1,0xa9,0xc6,0xbb,0xa1,0xb7,0xbd,0xb7,0x6d,0x37,0x3e,0xc5,0x4f,0x19,0x1c,0xcc,0xd8,0x2f,0x40,0xb5,0xa8,0xa6,0xa6,0x99,0x9e,0xb5,0xaa,0x99,0x9e -,0x4f,0x1f,0x2f,0x41,0x18,0x13,0x2d,0x3a,0x18,0x1a,0x26,0x26,0x19,0x14,0x1a,0x1b,0x11,0x0d,0x0c,0x0f,0x11,0x0f,0x14,0x19,0x13,0x10,0x1c,0x32,0x3f,0x26,0x1c,0x20 -,0x26,0x29,0x2c,0x27,0x30,0xcc,0xaa,0x9a,0x93,0x8d,0x89,0x84,0x82,0x82,0x83,0x82,0x81,0x81,0x81,0x82,0x86,0x87,0x88,0x8d,0x96,0xa2,0xb4,0x44,0x22,0x19,0x0f,0x0a -,0x07,0x06,0x05,0x05,0x04,0x03,0x04,0x04,0x04,0x06,0x08,0x07,0x07,0x0a,0x12,0x16,0x16,0x19,0x1e,0x2a,0xe7,0xc0,0x4f,0xc8,0xa7,0x9d,0x98,0x99,0x9a,0x9b,0x93,0x8e -,0x96,0x9e,0x9c,0x9a,0x9f,0xa2,0xa6,0xba,0xd0,0xfa,0xaf,0xa7,0xcc,0x47,0xab,0x94,0x9a,0xaf,0x9e,0x90,0x97,0xa3,0x98,0x93,0xa0,0xb3,0xa0,0x96,0xa6,0x36,0x49,0xa4 -,0xb2,0x29,0x2a,0x54,0x34,0x1d,0x1e,0x2a,0x27,0x1a,0x1a,0x22,0x28,0x29,0x30,0xc7,0xbf,0x48,0x3e,0xe9,0xbb,0xca,0xd5,0x3c,0x27,0x1e,0x18,0x16,0x1a,0x1a,0x10,0x11 -,0x11,0x0c,0x0d,0x0e,0x0e,0x0e,0x0d,0x0a,0x09,0x0a,0x0d,0x15,0x1c,0x29,0x4c,0xaf,0x93,0x8a,0x87,0x84,0x83,0x82,0x81,0x80,0x81,0x82,0x81,0x81,0x82,0x84,0x86,0x88 -,0x8a,0x8e,0x9a,0xb4,0x2b,0x1c,0x15,0x10,0x0b,0x05,0x04,0x06,0x07,0x06,0x05,0x08,0x0d,0x10,0x10,0x14,0x17,0x15,0x15,0x19,0x1d,0x1d,0x19,0x14,0x19,0x1a,0x1d,0x2c -,0x40,0x2d,0x39,0xa5,0xa1,0xad,0xad,0x9f,0x9d,0x9e,0x9a,0x98,0x9f,0xab,0xa1,0x92,0x94,0xa4,0xa3,0x8f,0x8c,0x97,0x9d,0x98,0x93,0x9a,0xa3,0x9c,0x9e,0xcb,0xd8,0xb3 -,0xaf,0xf0,0x3f,0x7c,0xae,0xba,0x35,0x44,0xb9,0xb5,0xde,0x5b,0xbf,0xc2,0x38,0x4b,0xbb,0xb4,0xff,0x40,0x68,0xaf,0xa8,0xb6,0xb9,0xc1,0x3e,0x34,0x46,0x62,0x2e,0x1a -,0x18,0x18,0x16,0x10,0x11,0x14,0x1b,0x23,0x18,0x10,0x13,0x1a,0x1b,0x1b,0x1c,0x16,0x10,0x12,0x17,0x1e,0x1f,0x1e,0x24,0xfa,0xab,0xaa,0x9e,0x90,0x8b,0x8a,0x87,0x85 -,0x85,0x84,0x83,0x83,0x82,0x82,0x83,0x83,0x82,0x83,0x88,0x8c,0x8e,0x99,0xaa,0x60,0x1f,0x16,0x0e,0x0b,0x0a,0x08,0x05,0x06,0x0a,0x0a,0x08,0x07,0x09,0x09,0x08,0x09 -,0x08,0x07,0x08,0x0b,0x12,0x13,0x10,0x1e,0xc5,0xbc,0x4e,0xb8,0x9a,0x94,0x9b,0x99,0x93,0x98,0x9e,0x9c,0x94,0x97,0x9f,0xa1,0x95,0x96,0xa6,0xad,0xa5,0xa3,0xad,0xbb -,0xaf,0xbe,0x3e,0x4e,0xaf,0xa6,0xab,0xb1,0xa6,0x94,0x94,0x9b,0x9d,0x9e,0x9d,0x9c,0x9c,0xa0,0xd8,0x32,0x38,0x3d,0x36,0x29,0x24,0x30,0xf4,0x2c,0x1e,0x20,0x29,0x35 -,0x36,0x2b,0x29,0x21,0x21,0x30,0x73,0xc9,0x4a,0x2f,0x35,0xbe,0xbd,0x47,0x2f,0x26,0x1f,0x17,0x11,0x12,0x0d,0x08,0x09,0x0b,0x0b,0x09,0x08,0x0a,0x12,0x13,0x0e,0x15 -,0x1e,0x28,0x50,0xa5,0x95,0x90,0x8e,0x88,0x84,0x83,0x82,0x82,0x81,0x80,0x80,0x81,0x81,0x82,0x84,0x86,0x8a,0x8e,0xa3,0x48,0x2f,0x1e,0x0f,0x0a,0x0b,0x0b,0x09,0x0a -,0x0b,0x0b,0x09,0x09,0x0e,0x10,0x0c,0x09,0x0c,0x0e,0x0d,0x0c,0x12,0x16,0x12,0x19,0x2c,0x2b,0x20,0x25,0x3d,0xbb,0xbe,0x4e,0x5f,0xaf,0xb0,0xb1,0xa5,0x9d,0x9c,0x9c -,0x97,0x8f,0x93,0x9b,0x9a,0x96,0x95,0x99,0x9e,0xa6,0x9f,0xac,0xb0,0xa6,0xab,0xad,0xa7,0x9f,0x9e,0xa7,0xaf,0xb4,0xaf,0xbe,0xaf,0xb7,0x68,0xd2,0xd5,0xc8,0x5f,0xc3 -,0xbe,0xb3,0xc9,0xc3,0xcd,0x62,0x6a,0x45,0x3f,0x2f,0x2d,0x24,0x2d,0x28,0x27,0x28,0x2a,0x30,0x38,0x34,0x31,0x34,0x37,0x3c,0x2f,0x36,0x2b,0x28,0x26,0x29,0x2d,0x26 -,0x2b,0x2f,0x35,0x42,0x3c,0x3c,0x4f,0x3a,0x3a,0x36,0x37,0x3b,0x36,0x3f,0x38,0x49,0x4e,0xd9,0xd0,0xcc,0xbc,0xba,0xaf,0xb3,0xae,0xad,0xaf,0xb2,0xb0,0xae,0xab,0xaa -,0xac,0xaf,0xa6,0xa4,0xa9,0xa7,0xa1,0x9f,0xa0,0xa4,0xa5,0xa6,0xae,0xaa,0xa7,0xa9,0xac,0xac,0xb2,0xb5,0xb7,0xca,0xcc,0xea,0x44,0x35,0x2f,0x2b,0x25,0x21,0x1c,0x1e -,0x1b,0x1a,0x1c,0x18,0x1a,0x1c,0x1c,0x1b,0x1b,0x1e,0x1f,0x22,0x27,0x26,0x2c,0x2f,0x35,0x45,0x5a,0xca,0xd0,0xb8,0xaf,0xac,0xaa,0xa8,0xa3,0xa2,0xa0,0xa3,0xa2,0xa1 -,0x9f,0x9e,0x9e,0x9d,0x9d,0x9d,0x9c,0x9b,0x9e,0x9c,0x9a,0x9e,0x9d,0x9d,0xa1,0xa5,0xa7,0xae,0xba,0xb8,0xbf,0xcc,0x52,0x31,0x33,0x3f,0x2d,0x28,0x2e,0x30,0x26,0x1e -,0x20,0x23,0x22,0x21,0x20,0x2a,0x29,0x1f,0x21,0x28,0x25,0x1d,0x1f,0x28,0x26,0x20,0x1f,0x1f,0x1d,0x1a,0x17,0x1a,0x1d,0x1e,0x19,0x1c,0x20,0x1e,0x1e,0x1e,0x22,0x29 -,0x2d,0x31,0x44,0x4f,0xf3,0xbd,0xb4,0xa7,0xa3,0x9f,0x9d,0x9a,0x98,0x96,0x94,0x93,0x90,0x90,0x8f,0x90,0x90,0x90,0x91,0x93,0x94,0x93,0x96,0x97,0x98,0x9c,0x9f,0xa6 -,0xab,0xb2,0xbf,0x6a,0x3a,0x2a,0x24,0x1f,0x1b,0x18,0x17,0x14,0x10,0x11,0x10,0x0f,0x0f,0x0f,0x0f,0x10,0x12,0x12,0x16,0x17,0x18,0x1b,0x1e,0x22,0x29,0x2e,0x3d,0x66 -,0xdb,0xbe,0xaf,0xac,0xa9,0xa4,0xa2,0x9f,0x9f,0x9e,0x9e,0x9d,0x9e,0x9f,0x9f,0x9f,0xa0,0xa2,0xa1,0xa0,0xa1,0xa4,0xa2,0xa5,0xa4,0xa5,0xa6,0xa6,0xa8,0xaa,0xad,0xae -,0xb5,0xb4,0xbc,0xbd,0xc2,0xde,0x50,0x6f,0x4d,0x3a,0x37,0x34,0x35,0x30,0x2f,0x2f,0x2d,0x2b,0x2b,0x2c,0x30,0x2f,0x36,0x3f,0x42,0x36,0x37,0x3c,0x3c,0x3b,0x3d,0x3d -,0x3f,0x3f,0x34,0x36,0x31,0x32,0x2f,0x34,0x2f,0x2e,0x2d,0x2c,0x33,0x2d,0x2f,0x3c,0x3c,0x44,0xdb,0xfe,0xc3,0xb3,0xb7,0xaf,0xaa,0xa6,0xa7,0xa1,0xa0,0xa4,0xa0,0xa2 -,0xa5,0xa3,0xa3,0xa6,0xa7,0xa8,0xad,0xb5,0xb7,0xc4,0xee,0x77,0x4b,0x3d,0x3c,0x33,0x2f,0x2e,0x2c,0x29,0x28,0x27,0x25,0x21,0x20,0x23,0x20,0x21,0x20,0x1f,0x1f,0x21 -,0x21,0x22,0x28,0x2b,0x29,0x2a,0x32,0x30,0x38,0x3f,0x51,0xcd,0xc5,0xc8,0xb2,0xad,0xab,0xab,0xaa,0x9f,0xa5,0xa9,0xa3,0xa3,0xa3,0xa5,0xa8,0xa8,0xa7,0xa5,0xaa,0xa8 -,0xa8,0xb0,0xae,0xaf,0xb9,0xc6,0xbe,0xba,0xd0,0xe5,0xd2,0xd0,0x73,0x5b,0x57,0x5c,0x53,0x3b,0x3e,0x40,0x3b,0x33,0x36,0x31,0x33,0x36,0x2c,0x2f,0x34,0x2f,0x2e,0x39 -,0x36,0x35,0x35,0x3b,0x3a,0x3a,0x3e,0x4a,0x48,0x4f,0xed,0x45,0xee,0xdd,0x65,0xf3,0x4e,0xdc,0xdb,0x6f,0xef,0x57,0xf7,0xdb,0x6a,0xe4,0xc1,0xcb,0xca,0xd7,0xc8,0xc2 -,0xc2,0xbd,0xb9,0xb1,0xb3,0xbb,0xaf,0xa9,0xb1,0xad,0xaa,0xa8,0xa6,0xb1,0xae,0xa8,0xb8,0xb4,0xbb,0xc4,0xbb,0xc0,0xdc,0x6d,0x66,0x42,0x3d,0x3a,0x32,0x33,0x3d,0x3a -,0x2a,0x25,0x2b,0x31,0x2a,0x24,0x2b,0x35,0x2b,0x26,0x31,0x2d,0x2b,0x2a,0x2d,0x34,0x3b,0x30,0x2c,0x4d,0x40,0x34,0x50,0x32,0x4d,0x4b,0x3c,0xb6,0x7a,0x6c,0xca,0xb8 -,0xc5,0xdb,0xc5,0xa8,0xa4,0xbc,0xaf,0xac,0xa7,0xab,0xb2,0xaa,0xac,0xa6,0xb5,0xbb,0xba,0xaf,0xe4,0x61,0xb3,0x3e,0xdc,0x45,0xd5,0x6c,0x44,0x6e,0x3b,0x47,0x40,0xdb -,0x4e,0x38,0xbf,0x66,0xf3,0xff,0x41,0xbf,0x4e,0xba,0xfa,0x48,0xcd,0x4f,0x47,0x3f,0x57,0x42,0x54,0xf0,0x49,0x34,0x37,0x6d,0x3a,0x3e,0x56,0x5d,0xec,0x56,0x48,0x49 -,0xd0,0xd1,0xde,0xba,0xd7,0xfd,0xd2,0x5b,0xe6,0x3a,0xca,0xe3,0x59,0x53,0x3a,0x4a,0x4f,0x78,0x37,0xd7,0xc8,0x4d,0x68,0x60,0xc4,0x69,0xbf,0xac,0xe2,0xf9,0xb9,0xc0 -,0xbb,0xce,0xc4,0xdb,0xc4,0xc2,0xda,0x3b,0xc8,0xbe,0x2d,0xd5,0x2e,0xe9,0x35,0x47,0x43,0x3e,0xb7,0x3b,0xeb,0x45,0x5a,0xc7,0xce,0xbe,0xcd,0xbf,0xc1,0x4c,0xbe,0xca -,0xf2,0xb4,0x66,0xf5,0xea,0x3d,0xd9,0x36,0xdb,0x44,0x62,0x41,0x54,0xbf,0x36,0xcf,0xbc,0xd8,0x4e,0x56,0xbb,0xdf,0x42,0xc5,0xcc,0x5e,0x5c,0x45,0x5b,0xb8,0x2f,0xd2 -,0x53,0x56,0x4c,0x3d,0xc1,0x2e,0x3c,0x42,0xc1,0x7d,0x43,0x5a,0xea,0xaf,0x4f,0x36,0xc8,0xaf,0xed,0x49,0xf9,0xad,0x54,0xe0,0xbb,0xed,0xd0,0x68,0xc7,0xd9,0xb6,0x3c -,0xd4,0xbf,0xcf,0x2f,0xaf,0x41,0xbc,0x42,0x4f,0xad,0x2a,0xa6,0x3f,0xd4,0x3b,0xbe,0x51,0x67,0xc8,0x3a,0xbd,0x50,0x54,0x54,0x3f,0xea,0xc0,0xda,0x31,0x68,0x3e,0xcb -,0xce,0x2a,0xae,0x36,0xb1,0x2e,0x78,0xc4,0x51,0xb4,0x34,0xbf,0x4d,0xf6,0xed,0xd5,0xca,0xd1,0x39,0xb3,0x2f,0x4b,0xe8,0x42,0xb3,0x25,0x6f,0xba,0x35,0x46,0x41,0x3f -,0xb9,0xcd,0x69,0xcb,0x40,0xac,0x38,0x3f,0xa6,0x2e,0xbb,0x6a,0x5e,0xca,0x5a,0xf1,0xf7,0x43,0xbf,0x35,0xed,0x63,0xc0,0x78,0x3b,0xc9,0x4b,0xae,0x27,0xaa,0x3a,0xbd -,0xc7,0x3c,0xcf,0xd5,0xb6,0x36,0xc0,0x74,0xe5,0xca,0xfb,0xfd,0xc6,0x4c,0xbe,0x3c,0x3e,0xac,0x3a,0x4a,0xb5,0xe0,0x41,0x47,0xae,0x38,0xdc,0xec,0x47,0xb5,0x66,0x3e -,0xf7,0xb9,0x38,0xca,0xc5,0xff,0xc0,0x2b,0xa7,0xed,0x21,0xa5,0x2e,0xbf,0x4c,0xdd,0xcd,0x30,0xbc,0x40,0xcc,0x71,0x35,0xbf,0xba,0x30,0xcd,0x6e,0xd0,0x39,0xad,0x42 -,0x4e,0xaf,0x54,0xd3,0x51,0xc5,0x6d,0x6a,0x42,0xfe,0x43,0xa9,0x3a,0x34,0xc6,0xc8,0x47,0x3d,0xc4,0x45,0xc1,0x5f,0x51,0xb5,0x46,0xbd,0xdc,0x79,0xb9,0x5f,0x74,0x39 -,0xad,0x4a,0x3f,0xf9,0x36,0xbb,0x38,0x4d,0x7e,0x58,0xcf,0x2b,0xbb,0x36,0xcf,0x3f,0xcf,0xab,0x2c,0xb9,0x4b,0xc9,0xbe,0x38,0xca,0xcc,0x3d,0xee,0x3a,0xe3,0xca,0x4c -,0xf7,0x3c,0xb3,0x36,0x3a,0xb2,0x2a,0xb3,0x4e,0xdd,0x4d,0x6f,0x5c,0xc5,0xbf,0x3b,0xa3,0x2e,0xcf,0xb6,0x39,0xb8,0xdb,0x39,0xaa,0x2d,0xe8,0x48,0xef,0xd8,0x2d,0xba -,0x3c,0x57,0xce,0x40,0x49,0xb8,0x4f,0xf9,0xb4,0xbe,0x53,0xac,0x34,0xa9,0x30,0xad,0xa7,0x28,0xa4,0x2d,0xad,0x3c,0x3f,0xbc,0x32,0x54,0x37,0xca,0x4e,0x22,0xba,0x36 -,0xbb,0x2c,0x56,0xaa,0x33,0x5a,0xd6,0xab,0xbc,0x5a,0xbc,0xb6,0x39,0xaf,0x5b,0xa7,0x23,0xa5,0x44,0x56,0x7a,0x22,0xb3,0x31,0xb4,0x28,0x5d,0x43,0xdf,0x26,0xae,0x3a -,0xbd,0x2c,0xe3,0xab,0x3c,0xba,0xe5,0x9d,0x21,0xa3,0x2b,0xab,0xb8,0x35,0xb4,0x33,0xac,0x31,0xbc,0x3d,0x28,0xab,0x39,0x40,0xb6,0x1e,0xb8,0x33,0xdf,0x2d,0xc3,0xbb -,0x2c,0xa6,0x28,0xba,0x4c,0xbf,0xad,0x5f,0x45,0xa7,0x48,0x57,0xac,0xb9,0x68,0xfc,0xd5,0x49,0x59,0x39,0xba,0x28,0xd2,0x36,0x3f,0x4b,0x4c,0xcf,0x2d,0xc2,0x62,0xcd -,0x59,0xb6,0xdb,0xdc,0xad,0x22,0x95,0x2b,0x78,0xa9,0x35,0x9c,0x1e,0xa3,0x2d,0x3d,0xcd,0x3a,0xb4,0x2b,0xbe,0x39,0x33,0x6e,0x3a,0xe2,0x4b,0x38,0xb3,0x48,0x4f,0x66 -,0x3f,0xaa,0xec,0x3f,0xa5,0xd2,0xbe,0xaa,0x38,0xaf,0x21,0x9c,0x59,0x22,0xba,0x28,0xa9,0x1f,0x3e,0x34,0xb8,0x3a,0x2f,0xb1,0xdb,0x3b,0x3a,0xd5,0xac,0x4b,0xeb,0xa5 -,0xeb,0x56,0x55,0x9e,0x3f,0xac,0x41,0x56,0xbe,0xe9,0xc4,0x2c,0xc7,0x32,0xdd,0x32,0x3b,0x3e,0x37,0xb9,0x31,0x48,0xed,0x42,0xb6,0x2d,0xb0,0xc0,0xb8,0xc1,0x69,0xcb -,0xcd,0xa9,0xcc,0xcc,0xcb,0x2f,0x2c,0x9d,0xa9,0xbb,0x2b,0xab,0x20,0x09,0x1a,0x9e,0x8e,0x18,0x0f,0x40,0xd1,0xa8,0x2d,0xac,0x93,0x85,0x9a,0x07,0x0f,0x3c,0x84,0x9e -,0xab,0x37,0x0e,0x1b,0x27,0xa5,0x1f,0xbf,0xa6,0x20,0x4a,0x27,0x59,0x34,0xb0,0x98,0x29,0xa7,0x8c,0x1f,0x02,0x42,0x86,0xa1,0x10,0x27,0xa6,0x8f,0xf1,0xee,0x19,0x27 -,0x88,0x98,0x12,0x18,0x45,0x0f,0x1a,0x44,0x9a,0x9d,0x1e,0x2d,0xa8,0xac,0x95,0x99,0xac,0x23,0x19,0xf5,0x4d,0x21,0x0a,0xa5,0x8a,0x3c,0x0d,0x10,0x9f,0x89,0x86,0x9f -,0x1b,0x1d,0x21,0x54,0x6b,0xaa,0x90,0x2c,0x0c,0x0c,0x18,0xae,0x92,0x9c,0xaf,0xa3,0xcc,0x0d,0x0d,0xbe,0x8b,0x8c,0xbc,0xbe,0x08,0x0d,0x9a,0x88,0x9a,0x26,0x4a,0xb0 -,0x14,0x18,0xa5,0xac,0x8e,0xae,0x20,0x0c,0x29,0xad,0x1b,0xac,0xa4,0x92,0x17,0x07,0xc7,0xa5,0x82,0xa4,0x6c,0x16,0x23,0x9b,0x43,0x9a,0x1e,0x42,0x33,0x1f,0x27,0x0c -,0x9a,0x97,0x9a,0x99,0x1c,0xc2,0x33,0xaf,0xb6,0xb4,0x9d,0x44,0x0d,0x09,0x2f,0x92,0xb0,0x18,0xc4,0xaa,0x8d,0x97,0x11,0x1f,0xc3,0x99,0xab,0x20,0xaf,0x21,0x23,0x31 -,0xab,0x58,0xb1,0xa9,0xaa,0x2e,0x21,0xbb,0x1e,0x3e,0xe3,0x97,0xaf,0x21,0x12,0x0d,0xb2,0x89,0x8d,0x41,0x09,0xac,0x9f,0x9c,0x3d,0x31,0x92,0xc5,0x29,0x11,0x2a,0xaa -,0xb2,0xf5,0x75,0x24,0x27,0x11,0x45,0x99,0x8d,0x8f,0x3a,0x0e,0x12,0x94,0x8f,0x91,0x32,0x10,0x19,0x15,0x35,0x26,0x44,0x95,0x8a,0xc2,0x17,0x10,0xbb,0x92,0x95,0xa4 -,0x2e,0x37,0x0f,0x0a,0x24,0x89,0x8d,0xd2,0x10,0x3d,0xcb,0xa0,0xad,0x40,0xbb,0x9e,0xcc,0x12,0x15,0x2b,0xd3,0xa1,0x9b,0x28,0xdb,0x16,0x93,0x9a,0x9d,0xc5,0x2f,0x52 -,0x15,0x24,0x28,0x93,0x2a,0x18,0x2c,0xc0,0xa2,0x3a,0x25,0xbc,0x97,0x98,0xc3,0x1b,0x2c,0x9a,0x9c,0xa4,0x31,0x2e,0x67,0x25,0x26,0x2a,0x47,0x66,0x41,0xac,0xc9,0xcd -,0x34,0x21,0xa8,0x39,0x99,0x9a,0xb0,0x15,0x0a,0xab,0xa5,0xae,0xe8,0x2d,0x92,0xb0,0x1a,0x1c,0x27,0x8b,0x95,0xb4,0x19,0x1f,0x1d,0x19,0x22,0xa0,0x95,0x9e,0x1c,0x15 -,0x9b,0xab,0x8d,0xad,0x33,0x49,0x39,0x14,0x22,0x2d,0xe1,0x97,0xc9,0x3e,0x0e,0x2a,0x99,0x94,0x92,0xc4,0x4c,0x1a,0x39,0x36,0x3f,0x92,0xb0,0x1c,0x0e,0x16,0x4c,0x9e -,0xac,0x99,0xab,0x9e,0x1b,0x18,0x24,0x3e,0x86,0xa6,0xc4,0x1e,0x0f,0x3c,0x4d,0x96,0xa5,0xb1,0xb8,0x16,0xe0,0x26,0x2d,0xa2,0x9c,0xa1,0x12,0x3f,0xad,0x15,0x42,0x1f -,0x98,0xa1,0x1d,0x29,0x33,0x8c,0x9b,0xbe,0xd5,0x4d,0xbf,0x6e,0xc7,0x29,0x18,0xbb,0x30,0x2e,0x1d,0x33,0xa0,0x54,0xab,0xc4,0x9b,0x9d,0x29,0x5a,0xad,0x3d,0xa7,0x3d -,0x12,0x1f,0x27,0xbb,0x6b,0x21,0xac,0x8a,0x9a,0x29,0x26,0x1f,0xa4,0xcf,0x4f,0xa6,0x3e,0x2d,0x18,0x28,0xb2,0x9f,0xa2,0x9a,0xfb,0x30,0x1f,0x31,0xdf,0x32,0xa5,0x96 -,0x2e,0x1e,0x0d,0x1a,0x97,0x56,0x8b,0x3d,0x25,0xb4,0x30,0xa2,0x3e,0xa1,0x96,0x30,0x25,0x1c,0x47,0x46,0xc6,0xae,0x2f,0x43,0x1b,0x22,0x49,0xa4,0x9f,0x97,0x36,0x27 -,0x39,0xae,0x97,0xb4,0xb9,0x18,0x21,0x21,0x20,0x28,0xc7,0x8f,0x9a,0x4e,0x21,0xd2,0x4a,0xac,0xef,0x9f,0xbe,0x1c,0x1d,0x0d,0xc8,0xa5,0x98,0xa1,0x2e,0x5d,0xad,0xc3 -,0xe3,0x35,0x97,0xac,0x46,0x18,0x19,0x5c,0x1d,0xbc,0xa5,0x6c,0xba,0xa5,0xaf,0xb8,0xbe,0x9d,0x31,0x34,0x2c,0x28,0xc5,0x2b,0x1a,0xb9,0x32,0xaa,0xb7,0x4c,0xc8,0x2e -,0xa0,0xb9,0xae,0x34,0x59,0xb3,0xb2,0xce,0x43,0xc9,0xc6,0x2b,0x1d,0x2f,0x1f,0x54,0xb6,0xbc,0xa7,0x3f,0xa0,0x1a,0x46,0x9d,0xc4,0x8d,0x31,0x24,0x26,0x2b,0xbe,0x45 -,0xe6,0xa9,0x9b,0x31,0x20,0x1d,0xa4,0xac,0xa2,0xb1,0x1f,0x4d,0x0c,0x1c,0x1f,0x9d,0xa9,0xaa,0xac,0x38,0x9b,0xaa,0x9b,0xa8,0xd1,0xfd,0x2a,0x1e,0x1b,0x19,0xb1,0x36 -,0xc7,0x41,0x24,0xc4,0xbb,0x9c,0xa7,0xdd,0x3f,0x48,0x35,0xe2,0x38,0x98,0xd2,0x23,0x2f,0x37,0xbf,0xd5,0xbc,0xa6,0x9d,0x42,0x28,0x27,0xda,0x25,0xa1,0xac,0x4a,0x3b -,0x1c,0x7e,0xb2,0x45,0xb7,0xcd,0xb0,0x44,0x1d,0xb8,0x3f,0xaf,0xf4,0x9f,0xad,0x36,0xc7,0x22,0x23,0xb6,0x65,0x3d,0xcc,0xd0,0xb1,0xc6,0xa9,0xa0,0x5e,0xbe,0xac,0x3e -,0x20,0x2a,0x1c,0x2c,0x3d,0x26,0xbb,0x33,0xb9,0xa5,0x3e,0x9c,0x99,0xc9,0xa8,0xfc,0x53,0xec,0x59,0x21,0x3b,0x3f,0x2d,0x29,0x20,0xbc,0xa5,0xab,0x9f,0xcd,0x30,0xbf -,0x1e,0x47,0xae,0x60,0x48,0x5c,0x1d,0x78,0xd4,0xa2,0xa3,0xca,0x9e,0x47,0x27,0x29,0xce,0xd0,0xb1,0x5f,0x5d,0x30,0x23,0x1d,0xbd,0xb2,0x38,0xa6,0x3a,0xc1,0xad,0x21 -,0x9a,0x9f,0xec,0xa9,0x29,0xec,0x22,0x46,0x72,0x45,0x35,0x3f,0x3c,0x29,0x47,0xaf,0x9c,0xbf,0xcb,0xd5,0xbd,0xad,0xae,0x3e,0xbb,0x24,0x33,0x1f,0x14,0xd8,0xb3,0xb5 -,0xae,0xbe,0xa8,0xad,0x2e,0xa4,0xb1,0x3e,0xdd,0x3d,0x20,0x2d,0x3f,0x4e,0xb0,0xb5,0xae,0xa5,0x7e,0x3f,0xda,0xd2,0x49,0xda,0x35,0x45,0x29,0x18,0xce,0x28,0xba,0xed -,0xc0,0x9a,0x55,0x9c,0xae,0xde,0xa3,0x49,0xb8,0x33,0x1a,0xc9,0x20,0xe0,0x27,0x2f,0x9a,0x1f,0xc8,0xe0,0x41,0xb0,0xd4,0xc5,0xa5,0x5d,0xba,0xc7,0xca,0xad,0x28,0xb8 -,0x37,0x23,0x26,0x4c,0xc2,0xbc,0x49,0xf4,0x9e,0x3d,0x2f,0xad,0xb6,0xb5,0x34,0x2b,0xc1,0x1f,0x33,0xbb,0x4c,0xab,0xb9,0xe9,0xca,0x49,0xa7,0xa8,0x55,0xb9,0x43,0x27 -,0x2c,0x19,0x2a,0x5a,0x4f,0xa5,0x45,0xbd,0x9e,0xad,0xa4,0xae,0xad,0xc3,0x23,0x29,0x28,0x26,0x52,0x27,0x3c,0x4a,0x3b,0x6f,0xa4,0xc0,0xb8,0xab,0x77,0xaa,0x35,0xb9 -,0xac,0x57,0xdc,0x3d,0x2d,0x4a,0x2f,0xd2,0xfd,0xc2,0xcb,0x4a,0x4b,0xf2,0xe1,0x4f,0xc4,0x48,0xcf,0x52,0x66,0x3e,0x4a,0xdd,0xb1,0x51,0xcf,0xb4,0x30,0xcd,0xec,0x64 -,0x9f,0x36,0xaa,0xdd,0x2c,0x68,0x1e,0xcc,0x20,0x31,0xb8,0x3d,0xae,0x6a,0xaf,0x9e,0xca,0xa6,0xbc,0x7e,0xf6,0x2b,0x2e,0x2f,0x22,0x3f,0x47,0x37,0xeb,0xbf,0xbf,0xa7 -,0xad,0xb9,0xa1,0x46,0xb7,0xc5,0x2f,0xcc,0x2b,0x2e,0x37,0x1d,0xce,0x3a,0xc2,0xa1,0x49,0xad,0xbe,0xd4,0xce,0x31,0xb4,0xc6,0x2d,0x4a,0x26,0xe6,0xb3,0x3f,0xaa,0xbe -,0xbc,0xb2,0x2f,0x6a,0xe2,0xd0,0xc0,0x49,0x3c,0x2f,0x2d,0x41,0x3b,0xe9,0x4b,0xc1,0xd7,0x41,0xae,0xc1,0xaa,0xb1,0xbb,0xb6,0x4a,0xe5,0xc0,0x1e,0x3c,0x4b,0x37,0x33 -,0x23,0x48,0x46,0xb2,0x5d,0xb8,0xa4,0xb5,0xa9,0xb8,0xaa,0xc5,0xd7,0xd2,0x20,0x28,0x23,0x3c,0x4d,0x43,0xbb,0xbd,0xaf,0xb5,0x4c,0xb7,0xaa,0xed,0x3a,0x48,0x2f,0x27 -,0x3f,0x47,0x4a,0xc6,0xad,0xb3,0xc3,0xce,0xac,0xe6,0xbc,0x5e,0x37,0xbd,0x2d,0x21,0x2d,0x30,0x39,0x5d,0xca,0xbc,0xfe,0xb2,0xb1,0xaa,0xa8,0xde,0xc4,0xf4,0xe2,0x3a -,0x2f,0xe6,0x39,0x67,0x35,0x3d,0xd6,0x3c,0x3d,0xb6,0xe0,0xca,0xc4,0x47,0xa9,0x4f,0xb6,0xb2,0x3f,0x47,0x38,0x31,0x3e,0x38,0x44,0xe7,0xc7,0x60,0xbd,0xbc,0x70,0xa8 -,0xb4,0xbd,0x62,0x5f,0x38,0x35,0x32,0x4c,0x5d,0x63,0x5f,0x3a,0xbb,0xbf,0xad,0xbd,0xbe,0xe5,0x75,0xdc,0x27,0x35,0x2d,0x39,0x69,0x4d,0x4e,0xbf,0xac,0xb2,0xaa,0xaa -,0xaf,0xca,0x46,0x3b,0xd7,0x2d,0x2d,0x31,0x2b,0x68,0x3a,0x3e,0xd4,0xd5,0xc7,0xb7,0xbd,0xb6,0x5d,0xd1,0xb2,0xcb,0xcc,0x4e,0x48,0x7c,0x44,0x35,0xdf,0x56,0xde,0xf2 -,0x6f,0xf4,0x62,0xd6,0x49,0xca,0xdf,0xc5,0x5b,0x3e,0x41,0x4e,0xcb,0xc8,0x48,0xcc,0xd2,0x3a,0xb0,0xb8,0xca,0xaf,0xb8,0xc0,0x6b,0x3c,0x2c,0x35,0x59,0x2d,0x3f,0x3d -,0xf0,0x46,0xf9,0xaf,0xa6,0xa8,0xcd,0xc7,0xc9,0xf2,0x42,0x32,0x31,0x3b,0x3d,0x4e,0x2f,0x4f,0xd2,0xb5,0xb1,0xaf,0xbf,0xbc,0xc1,0xcd,0xda,0xe7,0x58,0x3b,0x36,0x2e -,0x45,0xcf,0x4e,0xfb,0xb9,0x42,0xb3,0x3e,0xd8,0xd4,0x3b,0x76,0x4b,0x5e,0x4e,0x5f,0xb5,0xbb,0xba,0xce,0xc3,0x6f,0xc8,0xb0,0x2c,0xcb,0x43,0xcd,0x3d,0x39,0x3a,0x5f -,0x31,0x2f,0xc9,0x49,0xb9,0x41,0xd1,0xde,0xab,0xb4,0xaf,0xc7,0xd4,0xb2,0x3a,0xf8,0x3b,0x3d,0x36,0x58,0x3a,0x33,0x42,0x3d,0xde,0x5e,0xb8,0xb8,0xbb,0xbb,0xc4,0xcb -,0x66,0x5f,0x4c,0x44,0x4b,0x4c,0x5b,0xe4,0x6f,0xb6,0xbf,0xc8,0xb9,0x5f,0xc8,0x4c,0x4f,0x48,0x31,0x3f,0x3c,0x43,0xd3,0xc6,0x63,0xd8,0xc9,0xcd,0xc6,0x6b,0xc8,0xc9 -,0x4f,0x66,0x42,0x3b,0x49,0xde,0x4e,0xf3,0x65,0xc8,0xc7,0xcf,0xbb,0xba,0xc0,0xfc,0xdb,0x4c,0xdf,0x48,0x42,0x43,0x5e,0x3a,0x3f,0xce,0x5d,0xd8,0x43,0x5c,0xc4,0x65 -,0xd1,0xbc,0xc0,0xb9,0xd1,0xc0,0xdd,0x43,0x5b,0x43,0x4a,0x4c,0x40,0x5c,0x53,0xd6,0xf6,0xc4,0xc2,0x60,0xc9,0x77,0x72,0x4a,0x65,0x5d,0x3e,0x49,0xcd,0xdd,0x5a,0x66 -,0xbd,0xbd,0xd0,0xcc,0xce,0xc1,0x48,0x3a,0x3b,0x3c,0x47,0x41,0x5c,0xee,0xcf,0xc9,0xc4,0xb5,0xb7,0xbf,0xde,0xbe,0xfd,0x40,0x3d,0x39,0x37,0x3d,0xe0,0x4f,0x6e,0xcd -,0xe6,0xc7,0x6a,0xcd,0xce,0x5c,0xc9,0xde,0xc8,0x65,0x69,0xd9,0x78,0x61,0x66,0x55,0xce,0xc9,0x5c,0x55,0x44,0x4c,0x5f,0x5c,0xeb,0xcd,0x6d,0x5c,0xeb,0x5e,0xe2,0xd8 -,0x70,0xc7,0x5a,0x67,0x5e,0xdb,0xcf,0xe6,0xbe,0xbe,0xcd,0x56,0x50,0x4b,0x50,0x3b,0x41,0x49,0x4c,0x55,0x53,0xdd,0xbc,0xbb,0xbb,0xc3,0xcf,0xd8,0x58,0x63,0x4b,0x3b -,0x3f,0x3f,0x43,0x5f,0x59,0xcb,0xcf,0xc9,0xca,0xcb,0xc0,0xc7,0xc2,0xda,0x4d,0x4d,0x41,0x3d,0x4e,0x53,0xcf,0xdc,0xe9,0xdc,0xe3,0xe2,0xdc,0x61,0x69,0xe9,0x57,0x49 -,0x4c,0xfc,0x58,0xd1,0xe0,0xd5,0xc1,0xef,0xcf,0xf8,0x5d,0xd0,0x4f,0x74,0x50,0x58,0xd9,0x47,0xcd,0x53,0x4b,0xec,0x4e,0xd1,0x60,0x5f,0xe5,0xe1,0xc9,0xd2,0xcd,0xd7 -,0xc7,0x6c,0x43,0x68,0x4f,0x67,0x46,0x5b,0x59,0x4a,0x65,0xfc,0xcf,0xd6,0xbf,0xc8,0xc1,0xd6,0xdb,0xcd,0x77,0x42,0x3d,0x3c,0x51,0x4d,0x52,0xcc,0xd4,0xd1,0x63,0xe5 -,0xd4,0xcd,0xdf,0xcf,0x57,0x49,0x4c,0x63,0x66,0x58,0xca,0xc1,0xc4,0xdb,0xe5,0xcc,0xc5,0xe8,0xeb,0x54,0x4a,0x3e,0x3c,0x44,0x5a,0x64,0x52,0x71,0xd9,0xda,0xde,0xbe -,0xbf,0xce,0xdb,0xd7,0xdb,0x5e,0x58,0xd5,0xe8,0x74,0x6c,0x5a,0x62,0x57,0xe7,0xe9,0x5b,0x5b,0xee,0xed,0xee,0x5f,0xd0,0xcb,0x60,0x46,0x59,0xde,0x50,0x45,0x5e,0xd8 -,0x70,0xdf,0xe5,0xd4,0xeb,0xd0,0xd5,0xe4,0xd5,0x5d,0xe2,0x7d,0xe9,0x4e,0x46,0x64,0x6d,0x5e,0x62,0xe7,0xe5,0x67,0x4c,0xf0,0xd7,0x67,0x52,0x45,0x40,0x58,0x57,0x70 -,0x62,0xdc,0xbe,0xc5,0xcd,0xc4,0xca,0xc0,0xce,0x59,0x6b,0x43,0x46,0x3e,0x4f,0x5b,0x44,0x3f,0x3e,0x42,0xe6,0x6a,0xe0,0xdb,0x5b,0xdf,0x67,0xd7,0xf6,0xcf,0xd1,0xd1 -,0xc8,0xe1,0x66,0xe4,0xce,0xcd,0xde,0xe3,0x54,0x49,0x56,0x52,0x5f,0xfd,0x69,0x47,0x5c,0x77,0xca,0xe6,0x56,0xde,0xdb,0xc7,0xcc,0xc0,0xbb,0xbf,0xca,0xcd,0xca,0xce -,0x59,0x5a,0xdb,0xe2,0x54,0x45,0x58,0xdf,0xcb,0xc6,0xd9,0x62,0x57,0x4b,0x64,0x75,0x4e,0x4c,0x4c,0x52,0x7a,0x56,0xed,0xc8,0xc1,0xd4,0xce,0xc8,0xe0,0xcc,0xd7,0xdd -,0xd9,0xdb,0x4c,0x47,0xe5,0xdc,0xed,0x5b,0x57,0x79,0xd8,0x6e,0x6d,0xeb,0xee,0x54,0x3b,0xe5,0xcc,0x4e,0x52,0xcb,0xc1,0x77,0x4d,0xfa,0xd2,0xe4,0x42,0x5e,0x74,0x4a -,0x4c,0x4a,0x74,0x45,0x3f,0x3f,0x47,0x4e,0x56,0x55,0xf3,0xe7,0xd7,0xd3,0xca,0xd4,0xdb,0xbc,0xe0,0xfe,0xf3,0xe7,0x69,0x4d,0x69,0xd3,0xf0,0x4b,0x3f,0x51,0xcf,0x6b -,0x3f,0x4b,0xcd,0xce,0x67,0x51,0xd0,0xc9,0x58,0x60,0x4d,0xcf,0xc3,0xee,0xd3,0xd7,0xcb,0xe7,0x6a,0x62,0xe1,0xdc,0x53,0x4e,0x47,0x52,0xca,0xf9,0xe1,0xcb,0xdc,0xd9 -,0x55,0xd4,0xd2,0xe0,0xcc,0xf7,0x69,0x4c,0x49,0xd3,0xdb,0xcc,0xcb,0xd2,0xe6,0x57,0x5b,0xd2,0xc0,0xd2,0xf3,0xf8,0xe0,0x4d,0x40,0x62,0xd9,0x65,0x4d,0x59,0x69,0x4f -,0x49,0x4f,0xd2,0x61,0x63,0x5e,0x5a,0xbf,0xce,0x5a,0x63,0xd0,0xda,0x49,0x46,0xdf,0xd6,0xdd,0x77,0x5e,0xea,0xe5,0x63,0x5d,0x4d,0x51,0xf9,0x60,0x47,0x45,0x4e,0xcb -,0xb8,0xd6,0xe7,0xc9,0xc7,0xd6,0xc9,0xc5,0x5c,0x4f,0x5f,0xea,0xfb,0x39,0x3d,0xe4,0xf8,0x4e,0x42,0x4f,0xdc,0xe8,0xdf,0x5b,0x54,0xc7,0x7d,0x5a,0x53,0x44,0xce,0xd5 -,0xf9,0xd8,0xcf,0xb7,0xc4,0x55,0x4d,0xc3,0xbc,0x74,0x53,0x6e,0xd1,0xee,0x48,0xed,0xc2,0xcd,0x5e,0x46,0x6e,0xc8,0xc9,0x4f,0x4d,0xca,0xbf,0x57,0x43,0xfd,0xbc,0xcb -,0x52,0x43,0xef,0xdd,0x41,0x5e,0xea,0xd1,0x62,0x3f,0x60,0xc8,0xde,0x52,0x5d,0xc1,0x6f,0x3a,0x3f,0xfe,0x5b,0x47,0x50,0xde,0xbf,0x72,0x56,0xd7,0xc7,0xd1,0xfe,0x54 -,0xcc,0x73,0x46,0x5c,0x4b,0x6d,0x48,0x6c,0xc4,0xe5,0x6a,0x4e,0xc6,0xc4,0x55,0x57,0x67,0xcb,0x6b,0x46,0xf4,0xe6,0x7b,0x63,0xf5,0x7d,0x6e,0xd3,0xe3,0x6a,0x6b,0xe9 -,0x5f,0x4c,0x44,0x4e,0x64,0x79,0xe1,0x46,0x46,0xd7,0xc4,0xc0,0xda,0x78,0xbf,0xc3,0xc6,0xd4,0x4f,0xea,0xbb,0xd0,0x42,0x4a,0xeb,0xd1,0x50,0x4f,0x6f,0xcb,0xee,0x49 -,0x64,0x68,0xce,0xc8,0x40,0x46,0xd4,0xbd,0xe4,0x42,0x3e,0xcd,0xb9,0x4c,0x4c,0xcd,0xbd,0xd4,0x77,0xee,0xc0,0xc6,0x62,0x45,0xf1,0xd6,0x55,0x41,0x48,0xc9,0xdd,0xda -,0x45,0x58,0xc3,0x5e,0xf7,0x58,0x52,0x60,0x3e,0x3b,0x4e,0xe6,0x61,0x50,0x51,0x6d,0xed,0xd4,0x72,0x4c,0xdc,0xc7,0xc9,0x56,0x37,0x67,0xbe,0xc5,0x6c,0x49,0xce,0xc4 -,0x78,0xef,0xd8,0xc2,0xc2,0xed,0xcc,0xde,0xe6,0x79,0xcd,0xcb,0x69,0x77,0xd0,0xcb,0x6a,0x5b,0xdd,0xcc,0x4f,0x48,0x56,0x3e,0x3c,0x4c,0x58,0x3b,0x2c,0x3a,0x4c,0x47 -,0x30,0x33,0x54,0x51,0xe9,0x53,0x51,0xcf,0xbb,0xbb,0xbe,0xba,0xaf,0xb4,0xb0,0xb1,0xb8,0xad,0xae,0xb1,0xbd,0xbb,0xb9,0xcb,0xec,0x65,0x6c,0x58,0x36,0x2c,0x2f,0x30 -,0x29,0x2a,0x2f,0x30,0x30,0x31,0x2e,0x30,0x3e,0x4a,0x3e,0x3f,0x63,0x6b,0x5d,0xf7,0xc1,0xb5,0xad,0xaa,0xae,0xaa,0xa0,0x9f,0xa6,0xa8,0xa9,0xa6,0xab,0xbc,0xcf,0xcd -,0xcd,0x51,0x3f,0x33,0x32,0x2c,0x2d,0x2e,0x29,0x28,0x25,0x2b,0x2b,0x26,0x23,0x31,0x36,0x2f,0x2d,0x32,0xe2,0xc4,0xcc,0xbe,0xab,0xa9,0xa8,0xa5,0xa1,0x9e,0x9e,0x9f -,0x9f,0xa3,0xac,0xb5,0xbe,0xc4,0xf7,0x3f,0x3b,0x2e,0x36,0x2e,0x23,0x2a,0x2d,0x2c,0x25,0x22,0x27,0x30,0x2c,0x1e,0x21,0x2f,0x3c,0x43,0x43,0x4d,0xbc,0xa7,0xa8,0xab -,0xa4,0x9e,0x9b,0x99,0x9d,0xa2,0xa5,0xa3,0xa6,0xb8,0xcb,0xdc,0xdc,0x63,0x3b,0x2c,0x2d,0x2d,0x29,0x23,0x22,0x25,0x23,0x22,0x1f,0x22,0x2d,0x2a,0x29,0x2b,0x3a,0x63 -,0x47,0x73,0xbd,0xab,0xa6,0xa9,0xa5,0x9d,0x9a,0x9b,0x9b,0x9d,0xa4,0xa5,0xac,0xb4,0xcd,0x54,0x67,0x3c,0x33,0x2c,0x26,0x29,0x2b,0x27,0x26,0x23,0x22,0x25,0x28,0x27 -,0x26,0x28,0x29,0x3b,0x3a,0x3b,0xca,0xba,0xae,0xa8,0xa7,0x9f,0x9b,0x9b,0x9a,0x99,0x9c,0x9e,0xa5,0xad,0xaf,0xc7,0x55,0x44,0x34,0x2b,0x27,0x1e,0x1f,0x22,0x20,0x21 -,0x21,0x1e,0x22,0x27,0x20,0x23,0x21,0x33,0x6c,0x65,0x79,0xcd,0xaf,0x9f,0x9c,0x9e,0x9c,0x97,0x94,0x98,0x9e,0x9e,0x9d,0xa7,0xbc,0x43,0x33,0x34,0x35,0x2b,0x1f,0x1c -,0x1f,0x22,0x1e,0x1e,0x20,0x24,0x2a,0x25,0x1f,0x20,0x26,0x3c,0x56,0x40,0xbf,0xb6,0xab,0xa3,0xa2,0x9d,0x97,0x94,0x94,0x99,0x9f,0xa3,0xa6,0xa8,0xb9,0x5e,0x38,0x36 -,0x27,0x26,0x1a,0x26,0x25,0xc1,0x20,0x1e,0x1a,0x2a,0xbd,0xe4,0xa7,0x24,0xa3,0x05,0x02,0x03,0x0c,0xad,0x1b,0xc6,0x2a,0x3c,0x8b,0x88,0x8d,0x8b,0x8b,0x91,0x8b,0x84 -,0x9e,0x92,0x91,0x23,0x94,0x1e,0x0c,0x9b,0xae,0x33,0xc1,0x1d,0x0c,0x12,0x02,0x09,0x03,0x03,0x03,0x07,0x07,0x08,0x0c,0x0f,0x22,0x0c,0xe0,0x43,0x2f,0xb9,0x99,0x98 -,0x8e,0x8a,0x96,0xb6,0x9b,0x8c,0xa7,0x96,0x9b,0xa3,0x9c,0x9c,0x9d,0x90,0x8a,0x8f,0x88,0x87,0x9c,0x83,0xbb,0x2f,0x88,0x80,0x9d,0x0c,0x9b,0x13,0x13,0x2c,0x09,0x0b -,0x06,0x03,0x22,0x4f,0x08,0x07,0x00,0x0b,0x0c,0x01,0x03,0x01,0x0e,0x0d,0x3d,0x1e,0x12,0x0b,0xa8,0x8b,0x8c,0x83,0x8c,0x8f,0x96,0x86,0x86,0x88,0x82,0x83,0x90,0x81 -,0x8a,0x80,0x87,0x8b,0x95,0x9b,0x8d,0xa9,0x99,0x41,0x1f,0x05,0x11,0x0f,0x07,0x04,0x01,0x04,0x04,0x04,0x09,0x08,0x00,0x09,0x03,0x08,0x03,0x0b,0x12,0x0e,0xa8,0xa3 -,0x97,0x8b,0x8b,0x88,0x80,0x87,0x81,0x87,0x8e,0x88,0x91,0x8b,0x94,0x96,0x9b,0x3e,0x8e,0x96,0x1d,0xc0,0x8d,0x86,0xce,0x96,0x18,0x68,0xb1,0x07,0xd4,0x15,0x1f,0x04 -,0x06,0xa1,0x22,0x0f,0x0f,0x11,0x13,0xbb,0x65,0x24,0xa8,0x3b,0x0a,0x03,0x07,0x0b,0x21,0x1a,0xf5,0x14,0x18,0xbc,0x17,0xa7,0x8d,0x89,0x8f,0x3a,0x9a,0x86,0x81,0x8b -,0x89,0x88,0x8b,0x85,0x88,0x88,0x8a,0x84,0x98,0xad,0xbe,0xb0,0x36,0x52,0x25,0x13,0x0f,0x04,0x0f,0x1c,0xbe,0x1b,0x00,0x1a,0xa9,0x5f,0x22,0x07,0x02,0x0e,0xa3,0x13 -,0xc6,0x0f,0x02,0x04,0x05,0x1d,0x0f,0x89,0x1c,0x10,0x9b,0xee,0x0a,0x14,0x8c,0x3f,0x25,0x05,0xad,0x82,0x44,0xbd,0x1b,0xab,0x87,0x80,0x87,0x86,0x8e,0xa4,0xa9,0xdf -,0x90,0x8d,0x92,0xaf,0xb4,0x0c,0x1a,0x2d,0xa1,0x90,0x96,0x9b,0x43,0x8f,0xa6,0x80,0x8b,0x26,0xb2,0xa8,0xd9,0x24,0xbb,0x42,0x17,0x08,0x0a,0x23,0xc8,0xa0,0x5e,0xbb -,0x17,0x0a,0x1a,0x8c,0x83,0x9a,0x1d,0x1e,0x8c,0xb8,0x91,0x92,0x8d,0x20,0x17,0x26,0x8c,0x90,0x03,0x0f,0x36,0xba,0x00,0x1c,0x10,0x01,0x03,0x0d,0x0d,0x01,0xef,0x0d -,0x00,0x08,0x01,0x05,0x0f,0x9a,0x15,0x01,0x12,0x0b,0xaa,0x9e,0x84,0xbd,0x3a,0xb3,0x2f,0x80,0x87,0x8b,0x95,0xa1,0x4a,0xa8,0x83,0x88,0x80,0x89,0xc4,0x8b,0x80,0x84 -,0x80,0x83,0x80,0x84,0x80,0x8e,0x29,0x95,0x83,0x83,0x16,0x0d,0x09,0x21,0x0f,0x0c,0x05,0x01,0x1a,0x03,0x0a,0x05,0x05,0x00,0x07,0x07,0x03,0x01,0x04,0x03,0x04,0x00 -,0x12,0x2e,0x0c,0x0d,0x00,0x07,0x11,0x92,0x89,0x8a,0xaf,0x07,0x41,0x96,0x80,0x8e,0xa6,0x8b,0x91,0x81,0x85,0x80,0x87,0x8a,0x84,0x90,0x80,0x90,0x98,0x8b,0x53,0x93 -,0xb5,0xb3,0x16,0x19,0x33,0x0c,0x1b,0x0d,0xb6,0x08,0x05,0x1d,0x18,0x12,0x0e,0x09,0x12,0xd8,0x21,0x0d,0x1f,0x8c,0x96,0xc8,0x44,0x99,0x3e,0x86,0xaf,0xab,0x8d,0x17 -,0xb6,0x24,0x2b,0x9d,0xa7,0xa2,0x3d,0x20,0xdf,0x26,0x9a,0xb9,0xd7,0x67,0x9f,0x24,0x16,0x1a,0x35,0xbe,0x9d,0xaf,0x37,0x1e,0x09,0x9a,0x9c,0x1c,0x05,0xbd,0x16,0x07 -,0x06,0x1b,0x51,0x11,0x9e,0x8f,0x9f,0xa3,0x93,0x88,0x84,0x82,0x85,0x8d,0x80,0x85,0x88,0x92,0x8c,0x82,0xad,0xa3,0xb7,0xd6,0x57,0x3e,0xba,0xd8,0x70,0x20,0x14,0x0c -,0x0c,0x0d,0x17,0x0f,0x76,0x0c,0x0b,0x0d,0x0c,0x06,0x0d,0x1b,0x10,0x5b,0x0c,0x0e,0x09,0x1d,0xd4,0x2c,0x07,0x0b,0x27,0x39,0x1f,0x34,0x51,0xb5,0xb3,0xc0,0x8c,0x8d -,0xa0,0xa8,0x8d,0x4f,0x92,0x90,0xab,0x8b,0x8e,0x97,0x95,0x98,0xa0,0x9a,0x8e,0x8b,0x8e,0x81,0x99,0xb8,0x9d,0xac,0x98,0x93,0x8d,0x51,0x4f,0xdb,0xa5,0x88,0x93,0x9b -,0x3a,0x9f,0xbb,0x15,0x27,0x1f,0x1c,0x08,0xc3,0x2d,0x04,0x09,0x15,0x12,0x1b,0x15,0x0b,0x11,0x05,0x0a,0x06,0x40,0x0b,0x07,0x0a,0x12,0x19,0x18,0x1c,0x67,0xa3,0x1e -,0xb5,0xc6,0xd5,0x5f,0xaa,0x18,0x9f,0x16,0x0c,0xb0,0x9f,0x8c,0xad,0x9b,0x91,0x85,0x80,0x82,0x81,0x81,0x82,0x82,0x80,0x84,0x85,0x89,0x8d,0x8c,0x87,0x32,0x3d,0xb1 -,0xfb,0x1f,0x12,0x1c,0x03,0x17,0x07,0x01,0x09,0x04,0x01,0x01,0x05,0x05,0x05,0x03,0x01,0x13,0x19,0x14,0x20,0x08,0x0d,0x0f,0x1f,0x6b,0x36,0xa0,0xb0,0xb8,0xa6,0x92 -,0x86,0x89,0x87,0x84,0x8b,0x85,0x87,0x8a,0x89,0x86,0x90,0xa1,0x9e,0x97,0x94,0x1d,0x99,0xa9,0xb2,0xab,0xc6,0xb1,0x2e,0x2c,0x2a,0x1c,0x15,0x25,0x0b,0x1b,0x1d,0x07 -,0x28,0x22,0x1a,0x1f,0x34,0x9f,0x98,0xa2,0x9d,0x99,0x9e,0x96,0x49,0x94,0x3c,0x3f,0x5b,0xbd,0x61,0x2d,0x20,0x35,0x92,0x4f,0x1c,0x0f,0xa8,0xaa,0x2e,0x17,0x19,0x09 -,0x1a,0x17,0x11,0xc1,0x0e,0x25,0xad,0xd0,0xd7,0x23,0x22,0x9a,0xc1,0x1a,0x21,0x0e,0x0a,0x0f,0x13,0x11,0x20,0x3f,0xb0,0xbe,0x8f,0x9a,0x8f,0x81,0x89,0x86,0x84,0x84 -,0x84,0x85,0x90,0x8e,0x86,0x8a,0x9d,0x8e,0xaf,0x8f,0x99,0xae,0x93,0xc8,0xcd,0xc8,0x34,0x2e,0x0b,0x0f,0x1e,0x0c,0x05,0x07,0x0c,0x08,0x0f,0x05,0x13,0x09,0x0c,0x1b -,0x09,0x09,0x0e,0x09,0x09,0x0a,0x0b,0x11,0x19,0x0f,0x08,0x35,0x96,0xe0,0x9b,0x8e,0x99,0x85,0x88,0x84,0x8a,0x88,0x88,0x8c,0x86,0x8d,0x8c,0x8e,0x8c,0x8a,0x99,0x8c -,0x94,0xaa,0x95,0xa6,0xc6,0x9e,0xa0,0x14,0x12,0x1c,0x9d,0x24,0x1c,0x35,0x30,0xa1,0xbf,0x9f,0xaf,0xcd,0xa7,0xa9,0xbe,0x9f,0x10,0x13,0xc3,0x17,0x11,0x17,0x2c,0x32 -,0x13,0x15,0x23,0x15,0x16,0x1b,0x0d,0x1c,0x0c,0x05,0x0b,0x0d,0x1c,0x0c,0x1b,0x14,0x0e,0x3c,0x1d,0x42,0x2d,0x29,0xb2,0x5d,0xc8,0x1d,0x2d,0xd9,0xbd,0x3e,0xa5,0xa1 -,0xa4,0x88,0x84,0x87,0x86,0x81,0x83,0x82,0x82,0x80,0x87,0x83,0x86,0x8c,0x8d,0x94,0xab,0x2a,0xe6,0x3e,0x12,0x19,0x13,0x11,0x0b,0x19,0x10,0x0a,0x08,0x01,0x0d,0x09 -,0x09,0x09,0x0c,0x0f,0x17,0x0c,0x1c,0x19,0x19,0x0d,0x1b,0x1f,0x10,0x12,0x12,0x19,0x16,0xc2,0x1c,0xb9,0xac,0xab,0x8d,0x8f,0x8b,0x91,0x8a,0x88,0x8b,0x8b,0x8c,0x8d -,0xa2,0x8f,0x9a,0x8d,0x95,0xdb,0x8f,0x95,0xc2,0x9e,0xa6,0x44,0xa5,0x2b,0xb9,0x2b,0x19,0x0e,0x1d,0x1d,0x21,0x38,0x14,0xb9,0xa6,0xb8,0xae,0x9a,0xa7,0x97,0x9d,0xa9 -,0x9e,0x39,0x1a,0xbe,0x1b,0x1a,0xfe,0x14,0x1f,0x1a,0x1e,0x17,0x1d,0x2b,0x15,0x1f,0x1b,0x13,0x13,0x11,0x1c,0x1e,0x20,0x1d,0x28,0x32,0xa9,0xac,0xb6,0xa9,0x75,0xb3 -,0x3f,0x3f,0x23,0x1f,0x18,0x13,0x15,0x18,0x26,0x27,0xad,0x9b,0x90,0x8b,0x89,0x83,0x85,0x83,0x83,0x83,0x84,0x87,0x88,0x88,0x88,0x8e,0x94,0x9a,0x92,0x9a,0xaf,0xb5 -,0xbd,0x25,0x17,0x1d,0x15,0x0c,0x07,0x09,0x08,0x05,0x07,0x08,0x08,0x08,0x0c,0x11,0x0b,0x0e,0x0e,0x0e,0x13,0x0f,0x15,0x14,0x1b,0x1e,0x31,0xfb,0x62,0x6d,0xa1,0x8e -,0x90,0x95,0x8f,0x8d,0x8e,0x90,0x8f,0x8e,0x99,0x9f,0x9b,0x99,0x9b,0x9f,0xab,0x9f,0x98,0x9e,0xa6,0xaa,0xae,0xb7,0xed,0xba,0xbd,0x31,0x31,0x39,0x4a,0xc7,0xe3,0xc0 -,0xa3,0x9d,0x9c,0xa4,0xa8,0xaa,0xa4,0xa4,0xb0,0x32,0x19,0x1a,0x1e,0x24,0x1d,0x19,0x18,0x19,0x23,0x2b,0x28,0x27,0x24,0x23,0x20,0x21,0x24,0x1d,0x1b,0x29,0x2e,0x29 -,0x1e,0x24,0x3e,0xbc,0xca,0x2f,0x2d,0x1e,0x1b,0x15,0x11,0x0f,0x0a,0x08,0x0a,0x0c,0x0b,0x0f,0x1d,0x3a,0xa0,0x97,0x90,0x89,0x86,0x83,0x82,0x81,0x81,0x81,0x81,0x81 -,0x81,0x82,0x83,0x84,0x89,0x8e,0x93,0x9d,0xc6,0x1d,0x16,0x11,0x0c,0x07,0x06,0x04,0x03,0x03,0x04,0x06,0x04,0x04,0x07,0x11,0x14,0x0e,0x15,0x1d,0x24,0x2b,0x2f,0x3c -,0x2c,0x33,0xc1,0xbc,0xdf,0x48,0x41,0xbc,0xae,0x66,0x3e,0xd6,0xd6,0xc3,0xf6,0xc8,0xac,0xc2,0xbb,0xad,0xa7,0x9f,0x9e,0x98,0x8e,0x8b,0x8b,0x8c,0x8a,0x8a,0x8d,0x8d -,0x8e,0x95,0x9d,0xbc,0x5d,0xde,0xef,0xbb,0x54,0x2c,0x28,0x1d,0x15,0x1d,0x30,0x51,0xaf,0xe6,0x2e,0x24,0x15,0x19,0x1e,0x2d,0x61,0xe9,0x55,0x4f,0x3c,0x26,0x4e,0xc6 -,0x9e,0x92,0x97,0xa2,0xac,0x51,0x22,0x1e,0x19,0x2d,0x2f,0x20,0x14,0x0c,0x0b,0x0e,0x14,0x18,0x28,0x2a,0x33,0x30,0x2f,0x32,0xc2,0x9e,0x90,0x8c,0x8f,0x92,0x98,0x98 -,0x98,0x96,0x96,0x95,0xa9,0x34,0x1d,0x13,0x13,0x1b,0x1d,0x1f,0x32,0x2c,0x26,0x19,0x18,0x24,0xeb,0x9d,0x94,0x9c,0x9f,0xaf,0xb3,0xa7,0x9e,0x94,0x92,0x94,0x9e,0xc5 -,0x26,0x28,0x3f,0xb9,0xd0,0x38,0x2e,0x25,0x15,0x14,0x19,0x24,0x6f,0x2e,0x23,0x18,0x10,0x17,0x31,0xbf,0xa0,0x9d,0x9c,0x96,0x9c,0xaa,0x9b,0x91,0x8a,0x86,0x89,0x8f -,0x9a,0xa3,0xde,0xd6,0x35,0x6b,0xc5,0x1f,0x0e,0x07,0x04,0x06,0x0a,0x0d,0x0f,0x16,0x18,0x1c,0x1b,0x11,0x2b,0xaa,0x94,0x8e,0x92,0x97,0x92,0x9b,0xa8,0xa5,0xa7,0x9a -,0xa6,0x38,0x1c,0x14,0x11,0x16,0x19,0x1f,0x3c,0x4b,0x3b,0x3c,0x1e,0x2f,0xa7,0x9e,0x8e,0x92,0x99,0x98,0x98,0xa0,0x9d,0x94,0x8e,0x89,0x8e,0x9e,0xa5,0xb2,0x43,0xc5 -,0xb9,0xa9,0x9f,0xcf,0x2c,0x29,0x1b,0x1c,0x28,0x2e,0x38,0x4d,0x2d,0x20,0x1a,0x0e,0x1d,0xce,0xa5,0x96,0x98,0xa4,0xa6,0xb1,0x4e,0xb8,0xa2,0x9e,0xa7,0x41,0x1c,0x10 -,0x09,0x0c,0x0d,0x0d,0x11,0x10,0x0d,0x07,0x05,0x06,0x0f,0x1b,0x3f,0xae,0xa7,0x9a,0x96,0x8f,0x8c,0x88,0x84,0x81,0x81,0x84,0x8e,0x91,0x8e,0x9c,0x35,0x19,0xe4,0x4d -,0x09,0x01,0x03,0x07,0x04,0x01,0x04,0x0c,0x0d,0x09,0x0d,0x0d,0x11,0x1f,0xaf,0x95,0x9b,0xaf,0xaa,0xb5,0xcd,0xca,0xaf,0x97,0x91,0x9d,0xb3,0xb3,0xca,0xab,0x9b,0x8f -,0x8c,0x8b,0x8d,0x90,0x9a,0xae,0x9b,0x8f,0x87,0x89,0x96,0x9b,0x9b,0xa9,0x5b,0x2e,0xac,0x8d,0x91,0xc6,0x4d,0x9f,0x9d,0xaa,0xb9,0x8f,0x84,0x8f,0xb4,0xa4,0x9d,0x3c -,0x1a,0x22,0xba,0x23,0x08,0x08,0x12,0x0a,0x03,0x06,0x15,0x3e,0x18,0x0e,0x1a,0x1f,0x16,0x1b,0x1d,0x36,0xe3,0x2c,0x14,0x0a,0x05,0x0a,0x10,0x15,0x17,0x16,0x1e,0x22 -,0x15,0x0d,0x25,0xa8,0x8f,0x8a,0x90,0x93,0x8d,0x8f,0x8f,0x91,0x8d,0x87,0x88,0x8f,0xa6,0xe5,0x27,0x20,0x1d,0x2b,0x3b,0x1b,0x13,0x31,0xad,0x4a,0x50,0x90,0x81,0x83 -,0x93,0x8c,0x82,0x82,0x8e,0x96,0x83,0x80,0x8b,0xae,0xa9,0xa2,0x37,0x16,0x1b,0x34,0x24,0x12,0x0e,0x0d,0x07,0x06,0x0d,0x16,0x1d,0x13,0x0e,0x0d,0x08,0x04,0x03,0x09 -,0x11,0x1f,0x1d,0x10,0x13,0x1c,0x1e,0x49,0x53,0xa1,0x8f,0x9a,0xa4,0xbd,0x28,0x2f,0x36,0x3f,0xbf,0x29,0x1d,0x1f,0x18,0x0a,0x07,0x12,0x48,0x47,0x13,0x1d,0x98,0x8e -,0x9f,0x91,0x82,0x80,0x81,0x81,0x80,0x80,0x83,0x86,0x83,0x80,0x88,0xa3,0xb1,0xb2,0x19,0x05,0x06,0x0f,0x14,0x0e,0x08,0x0b,0x0b,0x08,0x09,0x0b,0x12,0x2a,0x32,0x24 -,0x14,0x0e,0x0f,0x1b,0x28,0x48,0xb9,0xbd,0xc9,0x42,0x20,0x1b,0x43,0xcb,0xb1,0xe2,0x35,0x38,0x2a,0x17,0x1a,0x21,0x44,0xba,0x3f,0x24,0x1a,0x16,0x0f,0x2c,0xbb,0xb2 -,0xe0,0xb3,0x8d,0x86,0x99,0x95,0x82,0x80,0x80,0x83,0x83,0x80,0x84,0x9b,0x96,0x88,0x8b,0xa2,0x2e,0x3a,0x19,0x06,0x04,0x0b,0x0d,0x0b,0x0f,0x19,0x1f,0x0f,0x0b,0x1e -,0xd9,0xab,0xa3,0xb2,0xbd,0x56,0x1e,0x16,0x14,0x16,0x21,0x1f,0x15,0x0d,0x08,0x08,0x0d,0x11,0x16,0x1c,0x3a,0x45,0x29,0x17,0x11,0x30,0xb2,0xa0,0xa1,0xb9,0xa7,0xa8 -,0x2f,0x2a,0xe9,0x9e,0x9d,0xc1,0xa3,0x94,0xa1,0x51,0x9a,0x85,0x84,0x88,0x86,0x81,0x82,0x96,0xa2,0x87,0x85,0x91,0xc4,0xc0,0xab,0x21,0x0b,0x0e,0x1a,0x29,0x4a,0x64 -,0x40,0x25,0x27,0x35,0xc6,0xc7,0xcd,0xaf,0xef,0x1e,0x10,0x0a,0x0a,0x11,0x16,0x1b,0x19,0x12,0x13,0x0f,0x0d,0x0f,0x1f,0xb9,0xa0,0x9f,0xb0,0xb2,0xab,0xa5,0x99,0x94 -,0x94,0x92,0x94,0xa5,0x26,0x0e,0x19,0x34,0x1e,0x0e,0x10,0x3d,0xc2,0x1c,0x23,0x9a,0x89,0x89,0x8a,0x84,0x84,0x8a,0x92,0x8a,0x83,0x8a,0x92,0x90,0x91,0xa5,0x1e,0x10 -,0x24,0x28,0x22,0x1f,0x16,0x13,0x0f,0x09,0x0b,0x0e,0x13,0x25,0x23,0x18,0x0d,0x0a,0x0b,0x0d,0x0e,0x0f,0x1e,0x3c,0x2c,0x1f,0x16,0x1e,0xb4,0x9f,0x95,0x91,0x95,0x90 -,0x96,0xab,0xac,0xa2,0x98,0x99,0xaa,0xca,0x26,0x0f,0x0d,0x1c,0x2a,0x17,0x16,0x54,0xa5,0x3e,0x16,0xa8,0x85,0x84,0x87,0x83,0x80,0x80,0x87,0x8b,0x83,0x83,0x86,0x8c -,0x8e,0x9c,0x24,0x0d,0x0b,0x0c,0x09,0x08,0x0c,0x0c,0x09,0x06,0x03,0x09,0x0f,0x16,0x1b,0x13,0x16,0x1c,0x16,0x12,0x15,0x24,0xb8,0xa6,0xae,0x5d,0x4b,0x64,0xd5,0xb1 -,0xb9,0xa7,0x9c,0xac,0x4f,0x1f,0x16,0x29,0x3f,0x35,0x37,0x2f,0x2b,0x17,0x09,0x0c,0x14,0x19,0x19,0x4d,0x9c,0xa9,0x4b,0x9f,0x86,0x81,0x84,0x82,0x80,0x80,0x81,0x89 -,0x86,0x81,0x87,0x95,0x9b,0xa2,0x2c,0x0d,0x06,0x07,0x06,0x07,0x0b,0x0d,0x0a,0x06,0x08,0x0d,0x18,0x23,0x27,0xd6,0xae,0xbd,0x5b,0x23,0x27,0x7c,0xbe,0xb0,0xbf,0x3b -,0x28,0x1a,0x11,0x13,0x19,0x26,0x49,0x41,0x2e,0x1c,0x18,0x1d,0x2b,0x28,0x27,0xbb,0xa7,0xf8,0x19,0x16,0xce,0xa7,0x45,0xb0,0x91,0x8b,0x95,0xa4,0x8c,0x83,0x86,0x87 -,0x82,0x80,0x84,0x8f,0x91,0x89,0x8d,0xad,0xe0,0xa7,0x43,0x0e,0x05,0x04,0x09,0x0b,0x0d,0x10,0x10,0x16,0x18,0x19,0x1d,0x2a,0xb4,0x9d,0x9e,0xbe,0x2a,0x24,0x1a,0x14 -,0x14,0x17,0x1f,0x23,0x17,0x0f,0x0b,0x0b,0x18,0x1f,0x2b,0x28,0x35,0xca,0x43,0x38,0x3c,0xb0,0x9a,0x92,0x8b,0x90,0xab,0xcd,0xab,0x99,0xc3,0x28,0xae,0x95,0xa3,0x25 -,0x2b,0x98,0x8c,0x94,0x8c,0x83,0x82,0x89,0x96,0x8e,0x8c,0x8f,0x97,0x8f,0x8e,0xc4,0x1e,0x18,0x19,0x1f,0x1a,0x26,0x40,0x27,0x19,0x12,0x0f,0x14,0x1a,0x1f,0x24,0x19 -,0x13,0x0f,0x0c,0x09,0x0a,0x12,0x1c,0x1e,0x12,0x0e,0x16,0x16,0x1a,0x23,0x3a,0xa5,0x9a,0x9e,0xa8,0xb3,0xa3,0x96,0x95,0x9a,0x96,0x96,0xae,0x1d,0x13,0x1f,0x1f,0x12 -,0x11,0x2a,0x39,0x19,0x14,0xd0,0x91,0x97,0x91,0x84,0x80,0x81,0x88,0x87,0x81,0x81,0x83,0x86,0x85,0x87,0x96,0x42,0x19,0x16,0x16,0x13,0x0e,0x0a,0x07,0x07,0x06,0x06 -,0x08,0x0d,0x16,0x18,0x13,0x0d,0x0e,0x0f,0x14,0x1f,0x29,0xbc,0xb2,0xbd,0xbe,0x58,0x61,0xaa,0xa0,0x9a,0x9a,0xa9,0xbb,0x41,0x22,0x26,0x2c,0x28,0x4e,0xbb,0x38,0x10 -,0x0b,0x13,0x24,0x13,0x0c,0x28,0xa6,0xb0,0x25,0x6d,0x8b,0x84,0x85,0x82,0x80,0x80,0x82,0x84,0x83,0x82,0x86,0x89,0x8b,0x95,0xed,0x15,0x0b,0x0a,0x0a,0x08,0x08,0x08 -,0x06,0x05,0x03,0x07,0x0e,0x1b,0x2a,0x2f,0x2c,0x29,0x25,0x33,0xbf,0xb5,0xa7,0x9f,0xaa,0xf6,0x21,0x1e,0x2f,0x34,0x2c,0x21,0x1f,0x20,0x12,0x0c,0x12,0x2c,0xcc,0x5a -,0x21,0x3f,0xca,0x22,0x1b,0x32,0x9d,0x9a,0x3f,0x2d,0xa3,0xac,0x34,0x75,0x8f,0x84,0x87,0x8e,0x8a,0x84,0x89,0x90,0x8b,0x83,0x83,0x8c,0xa0,0xa1,0xd8,0x15,0x10,0x17 -,0x21,0x18,0x0e,0x0c,0x0b,0x0b,0x0d,0x1a,0x29,0xbe,0xcc,0x35,0x2c,0x24,0x1a,0x1b,0x21,0x27,0x29,0x17,0x0e,0x0d,0x0a,0x0b,0x11,0x15,0x1c,0x23,0x1e,0x19,0x1d,0x18 -,0x27,0xba,0x9b,0x96,0xab,0xa5,0x91,0x9a,0x5f,0x4c,0x9d,0x8e,0xa0,0x2c,0x2c,0xc7,0x22,0x0f,0x2b,0x92,0x90,0x9a,0x94,0x89,0x88,0x90,0x8c,0x88,0x86,0x86,0x8a,0x8e -,0x8f,0xa5,0x56,0xcb,0xaf,0xaf,0x60,0x2d,0x1c,0x17,0x16,0x19,0x19,0x1d,0x1d,0x18,0x12,0x0b,0x07,0x0e,0x0f,0x0e,0x13,0x15,0x11,0x0d,0x0a,0x0c,0x1c,0x22,0x47,0x3a -,0x35,0x45,0xb0,0x9e,0xaf,0xba,0x8d,0x82,0x93,0x9b,0xa7,0xb0,0x98,0x83,0x20,0x00,0x9d,0x98,0x33,0x1f,0x07,0x0b,0x00,0x0a,0x34,0x24,0x02,0x11,0x83,0x28,0x08,0x09 -,0x1d,0xde,0x1d,0xaf,0x27,0x13,0x1f,0x0b,0x01,0x0d,0xa2,0xbd,0x09,0x03,0xb5,0x8d,0x47,0x1f,0x8f,0x80,0x84,0x93,0xb2,0x89,0x85,0x81,0x80,0x85,0x82,0x80,0x80,0x82 -,0x80,0x80,0x82,0x8e,0x8e,0x94,0xc0,0x8d,0x89,0xae,0x27,0x96,0x99,0x17,0x16,0x28,0xbf,0x6f,0x24,0x0d,0x02,0x0e,0xfe,0x0e,0x00,0x05,0x06,0x01,0x01,0x0a,0x04,0x03 -,0x14,0x0b,0x00,0x01,0x04,0x05,0x00,0x0a,0x16,0x07,0x00,0x06,0x07,0x07,0x12,0x18,0x0a,0x00,0x0d,0xac,0xb7,0x0f,0x2c,0x8f,0x8f,0x8b,0x8e,0x8e,0x8a,0x86,0x81,0x82 -,0x81,0x80,0x80,0x82,0x81,0x80,0x80,0x84,0x95,0x8a,0x80,0x84,0x8e,0x99,0x8f,0x84,0x80,0x88,0x92,0x84,0x80,0x82,0x81,0x81,0x85,0x89,0x81,0x82,0x8a,0x8e,0x80,0x84 -,0xa6,0x91,0x80,0x84,0x8b,0x86,0x82,0x86,0x9f,0x1c,0x0b,0x03,0x1b,0x57,0x08,0x00,0x03,0x05,0x01,0x01,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x03,0x05,0x01,0x01,0x03 -,0x02,0x01,0x03,0x06,0x09,0x07,0x03,0x02,0x00,0x03,0x08,0x03,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x04,0x04,0x02,0x00,0x03,0x16,0x1b,0x07,0x18,0x98,0x96,0xab,0x8e -,0x82,0x83,0x87,0x85,0x95,0x6f,0x8f,0x80,0x83,0x8b,0x87,0x80,0x84,0x8a,0x8b,0x88,0x84,0x81,0x83,0x8e,0x89,0x80,0x81,0x86,0x83,0x80,0x80,0x83,0x87,0x82,0x80,0x80 -,0x81,0x83,0x81,0x80,0x80,0x8a,0x9a,0x8d,0x88,0x8f,0xa1,0x3e,0x19,0x16,0x14,0x0b,0x03,0x04,0x0b,0x0f,0x0a,0x0b,0x1f,0x2e,0x4e,0xad,0x9a,0x95,0x9a,0x9e,0xa3,0x98 -,0x86,0x81,0x8b,0x97,0x88,0x81,0x82,0x87,0x8c,0x8e,0x94,0x91,0x8e,0x9b,0x9b,0x89,0x89,0x9d,0x53,0x34,0x23,0x2a,0xce,0x2b,0x0f,0x09,0x05,0x01,0x00,0x0a,0x11,0x04 -,0x00,0x01,0x03,0x05,0x04,0x05,0x09,0x14,0x0d,0x01,0x00,0x00,0x04,0x04,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x05 -,0x05,0x01,0x01,0x06,0x11,0x15,0x0b,0x07,0x12,0xa8,0x9f,0x2b,0x26,0x2f,0x23,0x16,0x1f,0xe3,0xf2,0x45,0x4a,0x37,0xc5,0x93,0x8b,0x8e,0x87,0x80,0x80,0x80,0x80,0x80 -,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x85,0x86,0x83,0x87,0x93,0xaf,0xa9,0x9c,0xaa,0x2c,0x1c,0x2e,0x48,0x2d -,0x16,0x13,0x32,0xa3,0xa9,0x37,0x26,0x2f,0x4a,0xcb,0xcf,0x4e,0x29,0x28,0x2a,0x18,0x15,0x22,0x24,0x0c,0x04,0x09,0x0f,0x0e,0x0e,0x11,0x11,0x0f,0x09,0x03,0x00,0x07 -,0x1b,0x14,0x07,0x05,0x05,0x06,0x06,0x09,0x0a,0x06,0x05,0x02,0x02,0x03,0x0b,0x1b,0x1f,0x25,0x20,0x1c,0x11,0x0d,0x0e,0x19,0x28,0x1e,0x0d,0x08,0x11,0x25,0x1c,0x12 -,0x0e,0x11,0x17,0x17,0x1c,0x22,0x2b,0x31,0x2f,0x1e,0x1d,0x2c,0xba,0xb0,0xaa,0x96,0x8e,0x8d,0x8a,0x88,0x8a,0x8b,0x8f,0xa3,0x2f,0x44,0xa4,0xb5,0x2b,0x30,0xae,0x9f -,0xa9,0xcd,0x4f,0x5f,0xa1,0x94,0x8e,0x88,0x83,0x82,0x83,0x83,0x81,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x83,0x83,0x82,0x82,0x89,0x9c,0xda,0x33,0x24,0x1b,0x0e,0x08 -,0x06,0x03,0x02,0x01,0x01,0x01,0x03,0x02,0x01,0x02,0x05,0x07,0x0a,0x0d,0x0e,0x0c,0x09,0x07,0x0a,0x19,0x33,0x3e,0x3f,0xaf,0x98,0x93,0x91,0x8d,0x8d,0x93,0x99,0x9c -,0x9c,0x92,0x88,0x84,0x85,0x87,0x88,0x8b,0x8c,0x88,0x87,0x88,0x8b,0x8f,0x9b,0xa8,0x9f,0x99,0xa7,0xae,0xa9,0xa9,0xa9,0xac,0xa4,0x92,0x8b,0x8c,0x91,0xa2,0xa6,0x9d -,0x9e,0xa7,0xb8,0xc0,0xb0,0xbb,0x47,0x2d,0x25,0x1d,0x10,0x0c,0x0a,0x0a,0x0e,0x11,0x11,0x19,0x25,0x1f,0x0f,0x0d,0x17,0x24,0x2b,0x2e,0x2a,0x2d,0xb6,0xaf,0xbe,0xbb -,0xd9,0x44,0x26,0x1a,0x11,0x0a,0x0d,0x13,0x0e,0x0b,0x0b,0x0b,0x0b,0x0f,0x1d,0x4e,0xac,0x9f,0x93,0x8b,0x88,0x87,0x87,0x87,0x87,0x85,0x84,0x85,0x85,0x85,0x84,0x84 -,0x85,0x88,0x8e,0xa0,0xe3,0x29,0x1b,0x15,0x0f,0x0d,0x0c,0x0a,0x08,0x06,0x03,0x04,0x06,0x03,0x02,0x02,0x03,0x06,0x0c,0x0f,0x11,0x11,0x15,0x15,0x17,0x28,0x45,0xec -,0xbd,0xb6,0xbd,0xae,0x9e,0x96,0x95,0x96,0x92,0x90,0x93,0x8f,0x8a,0x87,0x88,0x8a,0x90,0x9e,0x99,0x95,0x99,0x9e,0xa1,0xa5,0xa8,0xb4,0xde,0x4a,0x46,0x34,0x1c,0x15 -,0x1b,0x26,0x75,0xa6,0xa2,0x9c,0x95,0x94,0x94,0x95,0x94,0x94,0x9f,0xaf,0xb9,0xc5,0xba,0xc8,0x41,0x28,0x1e,0x1a,0x14,0x0e,0x0f,0x14,0x13,0x0f,0x0d,0x0c,0x0e,0x14 -,0x14,0x14,0x1a,0x28,0x2b,0x4c,0xb8,0xc9,0xdb,0x3d,0x26,0x1e,0x1a,0x18,0x14,0x12,0x18,0x19,0x1c,0x1e,0x1e,0x21,0x2b,0x39,0x35,0x42,0xb3,0x98,0x8d,0x89,0x86,0x84 -,0x83,0x82,0x82,0x82,0x84,0x85,0x86,0x88,0x86,0x89,0x8e,0x92,0x99,0x9f,0xb0,0x49,0x2b,0x1b,0x16,0x14,0x0d,0x09,0x07,0x07,0x07,0x07,0x06,0x04,0x05,0x08,0x0a,0x0d -,0x10,0x15,0x13,0x11,0x11,0x12,0x14,0x15,0x20,0x2e,0xba,0xa2,0xad,0xa5,0x98,0x91,0x90,0x97,0x9c,0x9d,0x9b,0x93,0x8f,0x8c,0x8a,0x8a,0x8b,0x8c,0x8e,0x91,0x95,0x9b -,0xa1,0xad,0xc3,0x70,0x3f,0x2f,0x33,0x31,0x36,0x22,0x23,0x3b,0xcf,0xa2,0xa5,0xb8,0xaf,0xa2,0x9c,0x9c,0xa6,0x9e,0x9b,0x9e,0x9e,0x9e,0x9f,0xa7,0xe9,0x2e,0x2a,0x1c -,0x13,0x10,0x12,0x11,0x10,0x13,0x17,0x14,0x17,0x18,0x16,0x10,0x0d,0x15,0x1c,0x2e,0x30,0x1b,0x1c,0x2b,0x2d,0x2d,0x25,0x21,0x1c,0x12,0x13,0x15,0x16,0x1b,0x23,0x28 -,0x4f,0xc5,0xad,0x9a,0x91,0x8a,0x86,0x85,0x84,0x85,0x85,0x84,0x85,0x85,0x88,0x88,0x88,0x88,0x87,0x8b,0x90,0x91,0x9d,0xbb,0x47,0x27,0x1d,0x11,0x0e,0x0e,0x0c,0x0d -,0x0c,0x0a,0x0a,0x0b,0x08,0x05,0x04,0x05,0x06,0x07,0x08,0x0a,0x09,0x0b,0x0f,0x17,0x17,0x17,0x23,0x33,0xd0,0xc6,0x66,0xb2,0x9f,0x9b,0x95,0x95,0x94,0x93,0x93,0x8d -,0x8b,0x8b,0x8b,0x8e,0x90,0x8e,0x92,0x9a,0x9e,0x9f,0x9f,0xa5,0xae,0xb6,0x65,0x32,0x2e,0x2b,0x24,0x18,0x19,0x26,0x55,0xb2,0xba,0xaf,0x9c,0x96,0x97,0x98,0x99,0x9a -,0xa3,0xa8,0xac,0xc7,0x4f,0x41,0x39,0x4c,0x36,0x1d,0x19,0x15,0x12,0x12,0x11,0x11,0x0f,0x0d,0x0e,0x0f,0x14,0x17,0x1b,0x30,0x4a,0xc7,0xcb,0x3e,0x41,0x4a,0x3f,0x3c -,0x28,0x1b,0x13,0x13,0x1a,0x1d,0x1f,0x25,0x2a,0x3e,0xbe,0xbe,0xac,0x9e,0x95,0x8d,0x8a,0x88,0x86,0x86,0x84,0x83,0x83,0x83,0x87,0x89,0x8a,0x8b,0x8c,0x96,0x9f,0xa3 -,0xb7,0xdf,0x40,0x25,0x19,0x13,0x14,0x0f,0x0b,0x0a,0x0a,0x09,0x0a,0x09,0x06,0x06,0x07,0x08,0x0a,0x0c,0x0e,0x0c,0x0b,0x0f,0x12,0x14,0x12,0x15,0x25,0x5e,0xa6,0xa5 -,0xab,0x9a,0x8f,0x8e,0x8f,0x92,0x96,0x98,0x98,0x92,0x91,0x93,0x8f,0x8f,0x8f,0x8e,0x93,0x94,0x98,0x9e,0xa4,0xad,0xbb,0x4c,0x24,0x25,0x30,0x30,0x27,0x1c,0x27,0x72 -,0xac,0xa5,0xb8,0xb5,0xa5,0xa1,0x9c,0x9b,0x9c,0x9e,0x9f,0x9e,0x9f,0xa8,0xa5,0xa8,0xc9,0xe1,0x2b,0x1a,0x14,0x10,0x12,0x14,0x12,0x0e,0x0b,0x0c,0x14,0x17,0x17,0x12 -,0x13,0x1d,0x25,0x2d,0x27,0x21,0x2f,0x39,0x30,0x2f,0x1f,0x16,0x13,0x11,0x14,0x11,0x10,0x17,0x18,0x29,0xe1,0xb6,0x9e,0x96,0x8d,0x87,0x85,0x85,0x84,0x85,0x83,0x83 -,0x84,0x86,0x8b,0x8a,0x8a,0x8c,0x8f,0x9b,0x9f,0xa5,0xbc,0x53,0x29,0x19,0x15,0x11,0x0e,0x0d,0x0c,0x0e,0x0e,0x0e,0x13,0x0d,0x0c,0x0c,0x0c,0x0d,0x0c,0x0b,0x0a,0x09 -,0x0c,0x0f,0x0e,0x11,0x12,0x1b,0x2c,0xf8,0xab,0xaf,0xa2,0x97,0x91,0x8f,0x8d,0x8e,0x8f,0x8f,0x90,0x91,0x97,0x98,0x99,0x9f,0xa1,0xa8,0xa1,0x9e,0x9c,0x9b,0x9a,0xa5 -,0xac,0xb3,0xf7,0xcd,0x3c,0x43,0x24,0x1d,0x3e,0x2e,0x23,0x1d,0x1b,0x35,0x51,0xb6,0xd8,0xb3,0xa7,0x99,0x9b,0xa5,0x98,0x9b,0x9d,0xc9,0xe2,0x46,0x56,0x20,0x18,0x1a -,0x1f,0x1e,0x12,0x13,0x16,0x2f,0x22,0x1d,0x16,0x1c,0x4a,0x3d,0x4a,0xdd,0xba,0xae,0xa1,0xa2,0x9d,0x98,0x9e,0xcc,0x3a,0x6f,0x6f,0x59,0x4d,0x65,0xef,0x48,0x3f,0x3f -,0x42,0xb7,0xa9,0xde,0x5f,0xd1,0xc7,0x6e,0x2e,0x2a,0x25,0x1b,0x1c,0x20,0x1e,0x28,0x28,0x20,0x31,0xba,0xa4,0xa8,0xb3,0xa0,0x99,0x96,0x9e,0xa8,0x9f,0xa5,0xaf,0xec -,0x31,0x2b,0x2d,0x1d,0x1c,0x23,0x23,0x2c,0x2b,0x2a,0xb9,0xd1,0xed,0x63,0xed,0x9e,0x99,0x99,0x9a,0x97,0x9a,0x90,0x8f,0x90,0x8d,0x9a,0xa3,0xab,0xae,0xbf,0x31,0x23 -,0x1f,0x29,0x26,0x1d,0x19,0x1e,0x22,0x1f,0x15,0x17,0x1c,0x16,0x18,0x12,0x12,0x14,0x11,0x11,0x14,0x19,0x25,0x24,0x1b,0x20,0x39,0xd8,0xb0,0xb0,0xc7,0xa1,0x98,0x94 -,0x95,0x98,0x90,0x94,0x9d,0xaf,0xb0,0xb0,0x61,0x2d,0x1b,0x22,0x4a,0xbb,0xa8,0xaa,0x9c,0x8e,0x8f,0x96,0x9b,0x92,0x8d,0x8c,0x8f,0x97,0x90,0x8e,0x8f,0x97,0x9d,0x99 -,0x9b,0xaf,0x5d,0x47,0x37,0x30,0x1b,0x0f,0x12,0x10,0x0f,0x12,0x0f,0x18,0x1e,0x17,0x16,0x15,0x16,0x17,0x17,0x11,0x0e,0x0f,0x15,0x1e,0x1c,0x21,0x32,0x36,0x39,0x3b -,0xbe,0xb1,0xa0,0x9b,0x9a,0x97,0x9a,0xa2,0xaa,0xae,0xb8,0x73,0x20,0x18,0x17,0x18,0x19,0x1a,0x16,0x1c,0x37,0xdd,0xa9,0xa4,0x98,0x8e,0x92,0x95,0x90,0x8d,0x8b,0x8b -,0x8f,0x8f,0x8b,0x8a,0x8a,0x8a,0x8b,0x89,0x8a,0x8e,0x94,0x99,0x9a,0xa0,0xb2,0xfe,0x32,0x27,0x22,0x29,0x1f,0x1b,0x1b,0x10,0x0b,0x08,0x05,0x03,0x03,0x01,0x00,0x00 -,0x01,0x02,0x03,0x03,0x08,0x0f,0x0d,0x0f,0x22,0xbc,0xa7,0xab,0xa3,0x93,0x93,0x99,0x99,0x9c,0x98,0x98,0xaa,0xa9,0x9f,0x9e,0x97,0x98,0x9d,0x98,0x92,0x8e,0x8c,0x8c -,0x8c,0x89,0x89,0x8d,0x8e,0x8c,0x8b,0x8b,0x91,0x94,0x8e,0x8b,0x8b,0x8d,0x8e,0x8c,0x8c,0x93,0x9e,0xad,0xbe,0xce,0x49,0x27,0x23,0x1f,0x19,0x12,0x0d,0x0e,0x0d,0x0a -,0x08,0x06,0x05,0x07,0x07,0x04,0x03,0x04,0x08,0x0a,0x08,0x0a,0x10,0x16,0x13,0x12,0x1f,0x2f,0x2d,0x22,0x26,0xb3,0xa3,0xbc,0xa8,0x96,0x8f,0x8e,0x8e,0x88,0x85,0x86 -,0x85,0x83,0x83,0x85,0x85,0x84,0x82,0x84,0x8a,0x8a,0x8a,0x98,0x6f,0x40,0x4e,0x2e,0x0f,0x07,0x0a,0x0d,0x0d,0x0d,0x0d,0x15,0x17,0x10,0x11,0x11,0x14,0x18,0x15,0x13 -,0x18,0x16,0x14,0x17,0x14,0x16,0x1a,0x19,0x15,0x13,0x16,0x1b,0x24,0x1e,0x1d,0x2a,0x34,0xe0,0xc0,0xab,0x96,0x96,0x9b,0x9a,0x97,0x8f,0x8f,0x98,0x97,0x8f,0x8f,0x91 -,0x94,0x92,0x8e,0x94,0x9d,0xa0,0xa6,0xaa,0xaf,0xb6,0xb6,0xaf,0xac,0xaa,0xb7,0xec,0xcb,0xc3,0x3f,0x2b,0x1a,0x14,0x1a,0x19,0x16,0x13,0x13,0x1b,0x1a,0x12,0x1a,0x2c -,0x2b,0x1d,0x14,0x1c,0x23,0x14,0x0f,0x16,0x21,0x23,0x18,0x1d,0xbc,0xad,0xbd,0xa5,0x91,0x8a,0x8d,0x90,0x8a,0x84,0x83,0x84,0x85,0x85,0x84,0x87,0x8d,0x90,0x98,0xaa -,0x3e,0x1f,0x20,0x1b,0x0e,0x0c,0x0c,0x0e,0x0d,0x0a,0x09,0x0a,0x08,0x09,0x0a,0x09,0x0c,0x0f,0x17,0x1d,0x1d,0x2a,0x37,0x33,0x36,0x37,0x47,0xdb,0x47,0x23,0x2e,0xb2 -,0xad,0xaf,0xb9,0x9d,0x91,0x97,0x9a,0x95,0x8e,0x8c,0x8e,0x98,0x96,0x94,0x98,0x9a,0x9d,0x9c,0x99,0x9f,0xa9,0xad,0xb0,0xb1,0xb4,0xb9,0x5c,0x42,0xc8,0xa4,0x9a,0xa2 -,0xa1,0x9e,0xa9,0xba,0x4d,0xcf,0xbd,0x38,0x18,0x16,0x29,0x34,0x1f,0x14,0x1c,0x2f,0x1c,0x0e,0x0e,0x14,0x10,0x0b,0x08,0x09,0x0c,0x0a,0x0a,0x0f,0x18,0x24,0x26,0x2b -,0xb6,0x99,0x90,0x8d,0x8b,0x8d,0x8a,0x86,0x84,0x83,0x84,0x84,0x82,0x83,0x85,0x89,0x8b,0x8d,0x94,0xaa,0x34,0x24,0x18,0x0c,0x07,0x06,0x08,0x06,0x04,0x04,0x06,0x05 -,0x06,0x07,0x07,0x0b,0x0f,0x16,0x1c,0x19,0x1f,0x47,0x50,0xeb,0xe8,0xde,0xa8,0x9f,0xa9,0xad,0xa0,0x99,0x97,0x9a,0x97,0x8f,0x93,0x9a,0x9c,0x98,0x98,0x9e,0xa8,0xba -,0xaa,0xa3,0xac,0xae,0xac,0x9d,0x9a,0x9f,0xa3,0xa1,0xad,0xb0,0xa3,0xab,0xb9,0xb3,0xa6,0x97,0x99,0x9a,0x93,0x93,0x96,0xa0,0xa8,0xa8,0xaf,0x2c,0x18,0x1a,0x1c,0x14 -,0x0b,0x0a,0x0d,0x0d,0x09,0x08,0x08,0x0a,0x0a,0x0a,0x08,0x09,0x0a,0x0b,0x10,0x1a,0x28,0x53,0xc5,0xa4,0x91,0x8b,0x87,0x85,0x85,0x85,0x83,0x82,0x82,0x82,0x84,0x83 -,0x83,0x87,0x8d,0x93,0x9a,0xa8,0x60,0x1c,0x14,0x0f,0x09,0x08,0x06,0x07,0x06,0x03,0x04,0x06,0x07,0x09,0x0a,0x0c,0x0e,0x13,0x1e,0x2d,0x39,0x58,0xb0,0xa0,0xa8,0xba -,0xe5,0xc8,0xb7,0xcd,0x2d,0x26,0x38,0x2e,0x36,0x31,0x49,0xb3,0xcf,0x5b,0xca,0xae,0xa8,0xb2,0xae,0xa2,0x9a,0x96,0x98,0x93,0x8f,0x8b,0x8b,0x8b,0x8c,0x8d,0x8f,0x8e -,0x8e,0x98,0x9e,0x9e,0x9b,0x9c,0xab,0xaa,0xa5,0xbc,0x36,0x26,0x26,0x2a,0x1f,0x14,0x12,0x14,0x10,0x0c,0x0d,0x0f,0x15,0x16,0x0e,0x0d,0x11,0x14,0x17,0x14,0x11,0x1b -,0x1d,0x1c,0x22,0x24,0x2f,0xf9,0xc9,0xb0,0xad,0xa5,0x95,0x93,0x95,0x91,0x8c,0x88,0x88,0x88,0x86,0x85,0x89,0x8d,0x90,0x90,0x92,0x9c,0xca,0x37,0x2e,0x23,0x20,0x15 -,0x11,0x14,0x12,0x0e,0x0b,0x0a,0x09,0x0a,0x0b,0x09,0x08,0x08,0x0c,0x11,0x0e,0x14,0x1e,0x1f,0x1c,0x1e,0x26,0x2e,0x2d,0x23,0x28,0x4f,0xb2,0xa7,0xad,0xa1,0x92,0x8d -,0x8e,0x8f,0x8d,0x8c,0x8d,0x8e,0x92,0x91,0x94,0x97,0x91,0x95,0x9a,0x96,0x9a,0xa8,0xa2,0xb7,0xad,0xab,0xb8,0xc5,0xe9,0xd4,0xba,0xb0,0xaa,0x99,0x9b,0xa4,0xac,0xa9 -,0xa3,0x9c,0xb4,0xc4,0x41,0xef,0x3a,0x1f,0x1d,0x12,0x17,0x0e,0x0a,0x09,0x06,0x07,0x08,0x04,0x05,0x05,0x07,0x0a,0x0c,0x0e,0x16,0x1f,0x2a,0xd1,0x9f,0x90,0x8a,0x8b -,0x8d,0x84,0x83,0x82,0x82,0x83,0x80,0x83,0x82,0x87,0x8b,0x8e,0x99,0xaa,0x34,0x1b,0x18,0x0b,0x0c,0x08,0x06,0x08,0x04,0x06,0x05,0x06,0x05,0x06,0x07,0x07,0x0a,0x10 -,0x1c,0x1e,0x27,0xcc,0xac,0x9c,0xac,0x99,0x9c,0x94,0x97,0xab,0xa3,0xaa,0xa4,0xb5,0xaf,0xaf,0xa9,0xa9,0xde,0xb9,0xac,0xca,0xa5,0xd6,0xad,0xa3,0xae,0xa8,0xa5,0x99 -,0x97,0x94,0x96,0x9a,0x93,0x97,0x90,0x8f,0x96,0x8f,0x90,0x8f,0x93,0x90,0x97,0x95,0xa1,0xad,0xc6,0x49,0x48,0x2b,0x1a,0x17,0x17,0x0f,0x13,0x0d,0x10,0x0d,0x0b,0x08 -,0x09,0x0a,0x09,0x0d,0x09,0x08,0x0a,0x0d,0x12,0x1e,0x1c,0x3b,0xb0,0xa9,0x9c,0x9a,0x96,0x8f,0x8d,0x90,0x8b,0x8a,0x88,0x87,0x89,0x89,0x85,0x8a,0x8e,0x96,0x98,0x9c -,0xbf,0x27,0x1c,0x17,0x13,0x18,0x0a,0x0d,0x0c,0x0c,0x0b,0x0a,0x0e,0x0c,0x0f,0x14,0x11,0x12,0x14,0x18,0x23,0x16,0x33,0x2d,0x2f,0x2c,0x21,0x3e,0x32,0x5a,0x2d,0x26 -,0x3d,0xbb,0xed,0x6d,0xba,0x9d,0x99,0x98,0x97,0x98,0x94,0x8f,0x8e,0x8e,0x8e,0x8d,0x8d,0x8d,0x8c,0x8c,0x8c,0x91,0x98,0x9d,0x9f,0x9f,0xaa,0xad,0x3f,0xbd,0xcb,0xd9 -,0xbc,0x3d,0xa0,0xb1,0xdd,0x3d,0x5e,0xcd,0xfb,0x47,0x34,0x4e,0x2d,0x27,0x39,0x34,0x29,0x2b,0x1b,0x1c,0x15,0x0e,0x0f,0x0a,0x0a,0x08,0x07,0x09,0x0a,0x08,0x0d,0x17 -,0x1b,0x32,0x30,0xb8,0xa1,0x8e,0x91,0x91,0x8b,0x88,0x83,0x85,0x84,0x84,0x84,0x85,0x88,0x88,0x87,0x90,0x98,0xa0,0xb6,0x41,0x23,0x12,0x0c,0x0b,0x0a,0x09,0x04,0x04 -,0x05,0x05,0x07,0x08,0x05,0x06,0x0f,0x0e,0x12,0x17,0x1d,0x35,0x19,0xda,0xd5,0xcc,0xa4,0xba,0xa3,0xa5,0x93,0x90,0x98,0x8c,0x8e,0x8d,0x8b,0x98,0x93,0xa2,0x99,0x93 -,0xa0,0xb5,0xb9,0x9f,0xa0,0x9f,0xa4,0x95,0xa6,0x2f,0x95,0x80,0x9b,0x02,0x8d,0x83,0xb3,0x8a,0xd5,0x3d,0x23,0x38,0x21,0x23,0x1d,0x00,0x12,0x05,0x02,0x05,0x01,0x05 -,0x01,0x01,0x03,0x03,0x04,0x04,0x02,0x05,0x07,0x08,0x10,0x1a,0x26,0x54,0xcb,0xa7,0x9f,0x82,0x83,0x92,0x88,0x82,0x80,0x82,0x84,0x82,0x83,0x82,0x82,0x81,0x80,0x83 -,0x80,0x83,0x84,0x87,0x8a,0x87,0x8f,0x97,0x9b,0xb9,0xbd,0xbe,0x34,0x1f,0x1e,0x19,0x0d,0x0b,0x0f,0x09,0x05,0x09,0x06,0x04,0x06,0x04,0x03,0x06,0x02,0x04,0x04,0x04 -,0x05,0x04,0x08,0x03,0x07,0x03,0x02,0x03,0x05,0x06,0x02,0x05,0x01,0x07,0x08,0x07,0x0d,0x12,0x15,0x1b,0x14,0x35,0x66,0x4f,0xab,0x99,0x8b,0x8b,0x85,0x85,0x83,0x82 -,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x82,0x81,0x83,0x83,0x87,0x88,0x85,0x87,0x8a,0x94,0x8f,0x94,0x9e,0x9a,0xa8 -,0xb6,0x48,0x4a,0x1c,0x33,0x28,0x16,0x1e,0x11,0x19,0x0c,0x0f,0x0a,0x0a,0x05,0x05,0x05,0x03,0x02,0x02,0x04,0x01,0x05,0x00,0x04,0x02,0x03,0x02,0x02,0x02,0x03,0x02 -,0x01,0x02,0x02,0x02,0x03,0x02,0x06,0x04,0x03,0x09,0x08,0x0d,0x0d,0x15,0x19,0x16,0x1f,0x11,0x1c,0x1e,0x1a,0x2c,0x1d,0x20,0x24,0x32,0x37,0x7b,0xbb,0xc4,0xb7,0xa2 -,0xaa,0xae,0xa8,0xa3,0x9c,0xae,0x99,0x96,0x93,0x8e,0x95,0x8b,0x8a,0x87,0x84,0x88,0x84,0x83,0x81,0x82,0x82,0x82,0x80,0x81,0x81,0x81,0x81,0x82,0x82,0x81,0x83,0x82 -,0x81,0x83,0x82,0x83,0x86,0x85,0x8d,0x89,0x8e,0x94,0x8d,0x99,0x9e,0x99,0xa1,0xa7,0xb9,0xa5,0x9b,0xaa,0xa3,0xaf,0xa0,0xaf,0xa6,0xa5,0xa4,0xb3,0x57,0xa7,0x2a,0xad -,0xd9,0x4a,0xa8,0xce,0xb8,0xb4,0xc6,0xa5,0xa8,0xae,0xa5,0xb1,0xa2,0x4c,0x3c,0x2c,0x38,0x30,0x1d,0x16,0x1a,0x13,0x0e,0x11,0x11,0x0d,0x0e,0x0d,0x09,0x0c,0x06,0x09 -,0x06,0x03,0x04,0x04,0x02,0x04,0x00,0x02,0x02,0x01,0x02,0x01,0x02,0x02,0x02,0x01,0x02,0x02,0x01,0x02,0x03,0x01,0x02,0x02,0x03,0x01,0x01,0x03,0x02,0x04,0x06,0x03 -,0x0c,0x04,0x0c,0x06,0x0e,0x16,0x0b,0x1f,0x10,0x1f,0x17,0x2a,0x3e,0x58,0xa2,0x96,0x91,0x89,0x8a,0x85,0x86,0x83,0x82,0x84,0x80,0x83,0x81,0x82,0x81,0x81,0x81,0x81 -,0x80,0x81,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x81,0x82,0x80,0x82,0x82,0x82,0x82,0x84,0x82,0x85,0x82,0x85,0x84,0x85,0x86,0x88,0x86,0x8c,0x8f -,0x8d,0xa8,0x92,0xae,0xa6,0x9e,0x23,0x32,0x45,0x1d,0x21,0x22,0x14,0x13,0x11,0x0c,0x0d,0x0a,0x07,0x0c,0x03,0x07,0x05,0x04,0x04,0x04,0x04,0x04,0x03,0x04,0x07,0x01 -,0x06,0x04,0x04,0x03,0x05,0x03,0x02,0x04,0x05,0x03,0x05,0x05,0x04,0x05,0x06,0x09,0x07,0x09,0x0e,0x0a,0x0f,0x10,0x11,0x10,0x12,0x2e,0x0e,0x2f,0x35,0x15,0xe1,0x2f -,0x3d,0xb7,0x39,0x9c,0xbe,0xa5,0x97,0xa2,0x95,0xa9,0x92,0xa6,0xa0,0x9d,0xa4,0x97,0x9e,0xa9,0x91,0xa7,0xa1,0x8e,0x9c,0x8d,0x99,0x8a,0x97,0x8d,0x8c,0x96,0x8e,0x93 -,0x90,0x91,0x95,0x9d,0x91,0x9e,0x9b,0x9f,0x9c,0x9d,0xac,0xa0,0x9d,0xc5,0xa5,0xa8,0xc2,0xf2,0x2a,0xba,0x23,0x32,0x70,0x1a,0x32,0x24,0x2b,0x1d,0x3b,0x2f,0x34,0x38 -,0x21,0xb9,0x25,0x3a,0x2e,0x26,0x23,0x1f,0x1f,0x21,0x17,0x43,0x28,0x2d,0x36,0x34,0xc0,0x3e,0x75,0xab,0xf3,0xae,0xaa,0x43,0xa5,0x3b,0x9c,0xce,0xa0,0x9c,0xa5,0x96 -,0xa4,0x91,0x8f,0x9b,0x8c,0x92,0x99,0x8b,0x95,0x9a,0x90,0x9c,0xa6,0x98,0xaa,0xa0,0x9b,0xab,0x9a,0xab,0x9f,0x9d,0xb8,0xa1,0xd4,0xa7,0xae,0xbf,0xcc,0x2f,0x3f,0x4e -,0x1c,0x4d,0x1f,0x26,0x36,0x1f,0x30,0x2d,0x31,0x2e,0x2d,0x3b,0x33,0x36,0x2d,0x1f,0x30,0x1c,0x38,0x20,0x24,0x24,0x2b,0x41,0x27,0x32,0x3e,0x3a,0x41,0x2c,0xc5,0x38 -,0x3e,0x72,0x2c,0x3a,0x4b,0x47,0xcf,0x4b,0x39,0x61,0x4c,0xb0,0x3b,0xae,0xc0,0x49,0xf7,0xb7,0x31,0x43,0x52,0x36,0x28,0x29,0x46,0x20,0x22,0x35,0x2b,0x1d,0x3a,0x2a -,0x41,0x47,0x39,0xec,0xb7,0x5f,0x60,0xcb,0xf4,0xb8,0xb0,0xab,0x79,0xc6,0xaf,0xaf,0xb4,0xa4,0xad,0xa7,0xb2,0xa4,0xa8,0x61,0xc6,0xc6,0x2a,0x35,0x32,0x24,0x3f,0x1b -,0x2e,0x20,0x20,0x1d,0x27,0x22,0x6a,0x22,0xc0,0x34,0x30,0x78,0x2b,0xb0,0xb5,0xaa,0xe3,0xa0,0xeb,0xaf,0xad,0x9f,0x5a,0xa0,0xa4,0xaf,0xb6,0xb2,0xe8,0x44,0x2c,0x24 -,0x31,0x22,0x1e,0x22,0x27,0x16,0x24,0x25,0x1f,0x28,0x5a,0x3d,0xde,0x31,0xb1,0x57,0xcd,0xf8,0xad,0xa7,0xbe,0xbd,0xa2,0xa8,0xaa,0x9a,0xdf,0x96,0xae,0xaa,0xa5,0xb3 -,0x58,0x33,0x4d,0x29,0x29,0x20,0x2d,0x1a,0x1e,0x26,0x1f,0x23,0x2a,0x2c,0x2c,0x3c,0x38,0xcb,0x44,0x4c,0xc7,0x9d,0xb6,0xb2,0xac,0xaf,0x9c,0xb6,0x99,0x9c,0xac,0xa9 -,0x9f,0xa3,0xba,0xc4,0xc8,0x3f,0x30,0x33,0x36,0x1d,0x21,0x26,0x19,0x26,0x24,0x24,0x1f,0x41,0x2b,0x2d,0xfe,0x2d,0x34,0xc7,0xc7,0xaf,0xc4,0xba,0xb0,0xae,0x9c,0xa3 -,0x9e,0x9c,0xa3,0x9e,0x9d,0xa6,0xab,0xbe,0x71,0x49,0x39,0x21,0x3a,0x20,0x20,0x23,0x21,0x1f,0x22,0x1c,0x29,0x2c,0x2e,0x27,0x24,0xbe,0x1f,0xb3,0x45,0x4f,0xaf,0x75 -,0x9e,0x9d,0xb9,0x94,0xa6,0x9f,0x9a,0xb0,0x9f,0xa7,0xb5,0x37,0xaf,0x33,0x39,0x2c,0x29,0x3b,0x20,0x1e,0x4c,0x1b,0x22,0x2f,0x28,0x2b,0x1d,0x2e,0x2a,0xc2,0x46,0x4c -,0xad,0x4e,0xa8,0xaa,0xa1,0x9a,0xb0,0x94,0x9e,0xa7,0x9c,0xa6,0xc3,0xaa,0xee,0xc1,0x30,0x3c,0x41,0x1d,0x28,0x3e,0x2b,0x1b,0x45,0x1e,0x38,0x32,0x1b,0x44,0x48,0x22 -,0xb2,0x50,0x31,0xaa,0xb4,0xad,0x9d,0xa2,0x9d,0x9c,0xa4,0xa1,0x9a,0xac,0xb8,0xaa,0xde,0x45,0x6c,0x37,0x29,0x2d,0x27,0x2c,0x20,0x35,0x26,0x1a,0x70,0x32,0x1c,0x38 -,0x2c,0x4c,0xfc,0xdb,0xc1,0xcd,0xaf,0xad,0xa7,0xa1,0xb0,0x97,0xa3,0xa7,0xaa,0xab,0xad,0xdb,0x58,0x3e,0xde,0x27,0x29,0x2a,0x2b,0x22,0x3a,0x1d,0x37,0x24,0x28,0x3f -,0x37,0x20,0x2f,0xc9,0x56,0x69,0xce,0xae,0xbd,0xa7,0xb6,0x9d,0xa4,0xa3,0xab,0x9f,0xb4,0xa3,0xb5,0x65,0xcb,0x2e,0x3e,0x2e,0x28,0x29,0x2f,0x25,0x25,0x2e,0x26,0x2e -,0x3d,0x22,0x32,0x28,0x3d,0x38,0xc8,0xc2,0x62,0xc5,0xb9,0xa7,0xb2,0xaa,0x96,0xa0,0xab,0x97,0xa8,0xba,0xa5,0xd1,0x5d,0xe3,0x2c,0x49,0x29,0x22,0x2c,0x29,0x20,0x2c -,0x24,0x2e,0x2c,0x2f,0x37,0x24,0x2f,0x45,0x4d,0x6b,0xdd,0xaf,0xb7,0xc5,0x98,0xa8,0xa0,0x9b,0xa2,0x9e,0xa2,0xa7,0xa6,0xab,0xf1,0xfa,0x3f,0x2f,0x3d,0x32,0x2a,0x2b -,0x29,0x25,0x2a,0x26,0x2a,0x33,0x26,0x32,0x2c,0x2c,0x30,0xbf,0xbb,0x57,0xbe,0xab,0xab,0xa5,0x9d,0x9f,0x97,0xa4,0x9d,0xab,0xad,0xa4,0xcb,0xe4,0xb9,0x27,0x2e,0x2e -,0x21,0x27,0x20,0x32,0x1d,0x2a,0x31,0x28,0x2c,0x29,0x26,0x3f,0x2b,0xe4,0xf1,0xd1,0xbd,0xd3,0xa6,0xa4,0xa5,0x9e,0x9b,0xa3,0x9e,0xa4,0xa6,0xab,0xbf,0xce,0x3e,0x4e -,0x38,0x2a,0x2a,0x2a,0x2b,0x22,0x2e,0x27,0x20,0x29,0x43,0x20,0x25,0x3a,0x2d,0x4e,0x79,0xcc,0xbd,0xb6,0xb7,0xa0,0xa3,0xa1,0x9b,0x9d,0x9f,0xa5,0xa5,0xa6,0xac,0xdb -,0xbf,0x3d,0x34,0x34,0x2d,0x27,0x22,0x2d,0x1f,0x2a,0x25,0x2d,0x2d,0x2b,0x33,0x29,0x2e,0x7b,0xd1,0xce,0xd6,0xcb,0xaa,0xba,0xa4,0x9e,0x9e,0x9f,0xa0,0x9f,0xa7,0xa6 -,0xa9,0xb4,0xd6,0x58,0x3d,0x2f,0x2e,0x2d,0x34,0x2b,0x1f,0x2e,0x22,0x26,0x2b,0x28,0x2a,0x24,0x27,0x35,0x31,0x3b,0xb9,0xc9,0xc2,0xaa,0xb3,0xa6,0x9e,0xa2,0x9a,0x9c -,0xa0,0xa1,0xaa,0xaf,0xae,0xce,0x40,0x37,0x33,0x20,0x2c,0x2e,0x1e,0x28,0x2d,0x1e,0x25,0x2f,0x1f,0x2f,0x23,0x2e,0x4c,0x30,0xc2,0xdf,0xc2,0xbb,0xa9,0xa4,0xa8,0x9c -,0x9f,0xa0,0x9a,0xa5,0xa7,0xa4,0xfa,0xba,0xf8,0x3f,0x3e,0x27,0x2c,0x30,0x23,0x29,0x2f,0x24,0x26,0x2f,0x29,0x27,0x29,0x23,0x3c,0x44,0x2f,0xb4,0xc5,0xb6,0xab,0xa4 -,0xb0,0xa4,0x9a,0xa3,0x9d,0xa0,0x9f,0xa5,0xaf,0xbc,0xae,0x3a,0x36,0x29,0x35,0x28,0x24,0x27,0x29,0x2f,0x29,0x29,0x25,0x24,0x24,0x33,0x22,0x3a,0x4c,0x3c,0xbd,0x3c -,0xd2,0xa8,0xa9,0xa8,0xa3,0x96,0x9d,0x98,0xa3,0x9e,0xa1,0xad,0xae,0xbb,0x71,0x47,0x38,0x2a,0x2f,0x21,0x27,0x1f,0x22,0x1f,0x20,0x2a,0x21,0x1e,0x3c,0x24,0x2b,0x4d -,0x43,0x56,0xaf,0xae,0xc1,0xb7,0xa4,0xa7,0xa2,0x9c,0xab,0x9c,0xae,0xa4,0xa9,0xae,0xba,0x47,0x54,0x2c,0x2f,0x34,0x28,0x28,0x30,0x21,0x2b,0x29,0x28,0x27,0x3b,0x2d -,0x30,0x3c,0x2c,0x49,0xc1,0x67,0xba,0xb1,0xc2,0xa7,0xa3,0x9c,0xa1,0x9e,0xa3,0xa4,0xac,0xaf,0xb5,0xc4,0x59,0xe4,0x3c,0x35,0x5a,0x26,0x2e,0x2b,0x2e,0x29,0x26,0x34 -,0x28,0x2e,0x2e,0x33,0x32,0x30,0x42,0x5c,0xc9,0x69,0xc5,0xb2,0xad,0xb6,0x9d,0x9d,0xa3,0xa4,0xa2,0xa5,0xb7,0xaa,0xd1,0xc8,0x75,0x38,0x47,0x48,0x30,0x40,0x39,0x2e -,0x33,0x2f,0x27,0x25,0x2e,0x27,0x32,0x25,0x28,0x30,0x3a,0x47,0xbb,0xcb,0xcb,0xac,0xba,0xa9,0xa1,0xa8,0xa5,0x9d,0xb3,0xa9,0xac,0xb7,0xb7,0xe6,0xe7,0xdf,0x2e,0x36 -,0x40,0x2c,0x3a,0x26,0x30,0x2f,0x29,0x2b,0x2a,0x2b,0x2b,0x2f,0x31,0x2c,0x36,0x45,0x5d,0xb6,0xb3,0xac,0xac,0xab,0xa0,0xa6,0x9b,0x9f,0xa6,0xa2,0xae,0xaa,0xb8,0xbd -,0xd8,0x3f,0x3f,0x4c,0x2b,0x31,0x2a,0x2d,0x21,0x2c,0x42,0x2a,0x33,0x28,0x3e,0x2d,0x30,0x3d,0x30,0x31,0x79,0x75,0xb0,0xaf,0xae,0xa4,0xa9,0x9f,0xa1,0x9e,0xaa,0xaa -,0xa8,0xbc,0xc0,0xb7,0x4f,0x5e,0x3d,0x39,0x38,0x2b,0x40,0x25,0x2f,0x2b,0x2b,0x32,0x2b,0x33,0x39,0x3c,0x5d,0x39,0x3c,0xef,0x37,0xc0,0xde,0xd8,0xbc,0xbb,0xb2,0xb3 -,0xa7,0xad,0xa5,0xa0,0xb2,0xa5,0xbb,0xc4,0xaf,0x3f,0x63,0x3e,0x33,0x38,0x2d,0x4f,0x35,0x30,0x3b,0x2d,0x3e,0x2e,0x38,0x45,0x32,0x4f,0x41,0x38,0x43,0x39,0xcb,0x3f -,0xce,0xbe,0xde,0xb8,0xc9,0xaa,0xaf,0xa8,0xa7,0xaf,0xaf,0xae,0xcd,0xb7,0x60,0x48,0xd5,0x31,0x4f,0x32,0x4c,0x3d,0x44,0x4b,0x2f,0x36,0x35,0x36,0x3b,0x32,0x3d,0x46 -,0x34,0x40,0x32,0x5c,0x40,0x3c,0xcf,0x5f,0xc2,0xb8,0xbc,0xad,0xaf,0xa6,0xa7,0xaa,0xa6,0xbe,0xb7,0xc1,0x64,0xd8,0x3b,0x41,0x40,0x33,0x5c,0x4c,0x48,0x3f,0x35,0x4e -,0x35,0x39,0x3a,0x2c,0x4c,0x2f,0x46,0x39,0x2b,0x7e,0x48,0xcf,0xbe,0xc2,0xba,0xd0,0xb5,0xab,0xb1,0xa4,0xac,0xaa,0xb5,0xc1,0xad,0x6e,0xc5,0xe7,0x4e,0xd9,0x45,0x4f -,0x65,0x3e,0xef,0x3f,0x4c,0x39,0x2c,0x3d,0x2b,0x3c,0x2c,0x2f,0x38,0x2d,0x3e,0x3f,0x4f,0xbc,0x5c,0xcc,0xc8,0xda,0xaf,0xb5,0xa6,0xb1,0xaf,0xac,0xb5,0xad,0xc3,0xb3 -,0xc2,0x55,0xce,0x47,0x50,0xf1,0x45,0xd9,0x43,0x38,0x49,0x2d,0x34,0x2c,0x37,0x34,0x28,0x34,0x2e,0x38,0x37,0x35,0xd2,0xf0,0xe8,0xc4,0x61,0xba,0xb9,0xb0,0xac,0xae -,0xa3,0xac,0xa4,0xab,0xb3,0xac,0xc9,0xbe,0xee,0x4e,0xe7,0x4a,0x48,0x4b,0x39,0x45,0x2f,0x2c,0x2d,0x29,0x2e,0x29,0x2d,0x2a,0x2a,0x3a,0x2d,0x4f,0x51,0x59,0xbc,0xce -,0xb9,0xb5,0xad,0xa7,0xa7,0x9f,0xa3,0xa8,0xa1,0xad,0xaa,0xb4,0xc6,0xc8,0x3c,0x46,0x34,0x38,0x38,0x30,0x3c,0x2a,0x32,0x2e,0x23,0x2e,0x28,0x2f,0x34,0x2a,0x38,0x2c -,0x37,0x77,0xe4,0xaf,0xca,0xac,0xad,0xb9,0xa5,0xab,0x9f,0xa3,0xa5,0xa5,0xae,0xb0,0xaf,0xd4,0xcf,0x3e,0x37,0x3d,0x29,0x53,0x2c,0x36,0x38,0x29,0x39,0x28,0x2e,0x2e -,0x28,0x3b,0x2c,0x38,0x37,0x34,0xed,0x73,0xbb,0xb8,0xaf,0xab,0xb0,0xac,0xa8,0xab,0xa0,0xa9,0xa8,0xad,0xbc,0xae,0xcc,0xcb,0x5c,0x37,0x3f,0x2c,0x37,0x33,0x30,0x3e -,0x2c,0x38,0x2e,0x2e,0x33,0x2a,0x31,0x36,0x30,0x3b,0x34,0x57,0x57,0xc8,0xae,0xb7,0xa8,0xac,0xac,0xab,0xb4,0xa8,0xaa,0xae,0xaa,0xc5,0xb8,0xd2,0xee,0xc9,0x3a,0x46 -,0x32,0x31,0x4c,0x36,0x3b,0x32,0x31,0x43,0x2e,0x3b,0x32,0x2f,0x49,0x2d,0x47,0x34,0x3d,0xdf,0x57,0xb4,0xb8,0xb3,0xb5,0xbd,0xab,0xb4,0xb3,0xa6,0xba,0xac,0xb9,0xbf -,0xb2,0xd0,0xbd,0x71,0x4c,0x51,0x32,0x47,0x35,0x2e,0x42,0x29,0x35,0x2e,0x35,0x3a,0x2d,0x4c,0x2c,0x31,0x3a,0x31,0xca,0xdf,0xbd,0xaf,0xc3,0xae,0xb0,0xa9,0xa6,0xae -,0xa3,0xaf,0xb6,0xae,0xc8,0xae,0xc6,0xcb,0x67,0x36,0x50,0x38,0x35,0x2f,0x2d,0x2e,0x26,0x29,0x31,0x27,0x45,0x2f,0x33,0x32,0x28,0x6c,0x47,0xc7,0xbf,0xcb,0xac,0xb8 -,0xa7,0xa1,0xa9,0x9d,0xa9,0xa6,0xac,0xb3,0xac,0xc7,0xc1,0x69,0x37,0x4f,0x33,0x37,0x3d,0x2a,0x30,0x21,0x29,0x27,0x26,0x33,0x28,0x30,0x2f,0x2f,0x43,0x3f,0xd7,0xb9 -,0xbe,0xad,0xb2,0xa9,0xa3,0xa6,0x9d,0xa8,0xa2,0xa9,0xac,0xa9,0xc9,0xba,0x57,0x45,0x48,0x35,0x3e,0x34,0x30,0x32,0x24,0x28,0x23,0x20,0x2b,0x21,0x2d,0x28,0x2c,0x3f -,0x37,0xbc,0xbe,0xb0,0xa8,0xae,0xa4,0xa3,0xa6,0xa1,0xa9,0xa5,0xa7,0xaa,0xa8,0xbd,0xb5,0xf5,0x41,0x49,0x2f,0x33,0x2c,0x2c,0x2d,0x23,0x2a,0x26,0x29,0x2c,0x2a,0x2e -,0x25,0x2d,0x38,0x3d,0xcb,0xc0,0xb8,0xab,0xae,0x9f,0xa4,0xa3,0xa0,0xaa,0xa0,0xae,0xaa,0xac,0xbc,0xb9,0x6b,0x64,0x59,0x3b,0x43,0x2e,0x29,0x2d,0x20,0x27,0x22,0x27 -,0x2b,0x25,0x2c,0x24,0x35,0x3c,0x46,0xc5,0xcf,0xb8,0xaf,0xab,0xa2,0xa3,0x9f,0x9f,0xa9,0xa0,0xab,0xac,0xae,0xca,0xca,0x4a,0x5f,0x42,0x3e,0x41,0x2f,0x2d,0x2b,0x23 -,0x26,0x22,0x27,0x27,0x20,0x29,0x25,0x39,0x4d,0x5f,0xbd,0xbb,0xad,0xad,0xa9,0xa4,0xa8,0xa3,0xa0,0xa9,0xa0,0xa8,0xab,0xad,0xbe,0xb7,0xde,0xe6,0x3f,0x38,0x39,0x2d -,0x2f,0x2b,0x1f,0x27,0x22,0x2b,0x26,0x20,0x27,0x1f,0x35,0x3a,0x68,0xb6,0xbc,0xac,0xa6,0xab,0xa0,0xa5,0x9f,0xa6,0xab,0xa2,0xb1,0xa9,0xb7,0xb9,0xb8,0xdf,0xe9,0x57 -,0x37,0x3b,0x2c,0x28,0x26,0x1f,0x29,0x23,0x2b,0x28,0x27,0x2a,0x2b,0x38,0x3c,0x5b,0xbe,0xc7,0xbb,0xb2,0xac,0xa5,0xa5,0x9e,0xa1,0xa0,0xa2,0xab,0xac,0xb7,0xbd,0xc1 -,0x6c,0xf2,0x41,0x36,0x39,0x2a,0x29,0x24,0x1f,0x27,0x25,0x25,0x26,0x25,0x2b,0x2b,0x3c,0x54,0xd3,0xba,0xc6,0xb0,0xac,0xaa,0xa5,0xab,0xa1,0xa2,0xa2,0xa3,0xaa,0xac -,0xba,0xc2,0xd4,0x59,0x4c,0x45,0x37,0x37,0x31,0x2c,0x2b,0x26,0x2c,0x2a,0x29,0x26,0x24,0x26,0x26,0x32,0x3d,0xe1,0xc6,0xb6,0xb5,0xae,0xaa,0xa7,0xa8,0xa7,0xa2,0xa6 -,0xa5,0xa9,0xa6,0xad,0xb4,0xba,0xc6,0xf1,0x42,0x45,0x31,0x2f,0x2a,0x26,0x2a,0x25,0x29,0x2d,0x2b,0x29,0x29,0x29,0x2d,0x34,0x58,0xdb,0xcc,0xad,0xb7,0xab,0xa7,0xa6 -,0x9e,0xaa,0xa6,0xa6,0xab,0xad,0xbb,0xb3,0xd8,0xec,0xc7,0x42,0x39,0x3f,0x31,0x2e,0x24,0x24,0x28,0x26,0x30,0x28,0x29,0x2b,0x2d,0x37,0x36,0x36,0x67,0xd4,0xd4,0xbc -,0xb4,0xaa,0xa9,0xa4,0xa3,0xa4,0xa2,0xa3,0xa5,0xab,0xb6,0xb5,0xbb,0xc8,0xe9,0xe3,0x43,0x3d,0x33,0x2d,0x29,0x25,0x27,0x21,0x26,0x1e,0x1f,0x28,0x26,0x2d,0x3b,0x42 -,0xc5,0xcb,0xb9,0xb8,0xaf,0xa4,0xa5,0xa3,0x9e,0xa1,0xa1,0x9e,0xa6,0xa4,0xb2,0xaf,0xcd,0xcd,0x5e,0x3b,0x3b,0x34,0x2d,0x2a,0x27,0x28,0x2d,0x22,0x24,0x1e,0x24,0x26 -,0x25,0x2a,0x35,0x38,0xce,0xbe,0xba,0xab,0xae,0xa2,0xa1,0xa4,0xa2,0xa2,0xa2,0xa6,0xac,0xa9,0xad,0xba,0xc6,0x6e,0x3f,0x3d,0x39,0x2c,0x2c,0x27,0x2b,0x2f,0x3a,0x3c -,0x33,0x2a,0x22,0x34,0x29,0x1c,0x13,0x15,0xbd,0x6d,0x17,0x2e,0x90,0x89,0x8f,0x9f,0x9b,0x8f,0x8d,0x94,0x9e,0x9b,0xaa,0x9f,0xd5,0x16,0x0c,0x14,0x17,0x2d,0xb1,0xbf -,0x17,0x0b,0x0f,0x14,0xb6,0xb7,0xca,0x7c,0x64,0x35,0xae,0xaa,0x2a,0x09,0x12,0xc6,0x96,0x8d,0xaf,0x97,0x8d,0x87,0x8c,0x97,0x2c,0x1b,0xae,0x95,0x9d,0x44,0xb8,0x38 -,0x0f,0x0b,0x19,0xca,0x1f,0x17,0x37,0xfd,0xb8,0xae,0x42,0x35,0xd5,0xb4,0x29,0x0e,0x09,0x13,0x41,0x27,0x2e,0x42,0x91,0x9a,0xb4,0x93,0x8b,0x8a,0x8f,0xa1,0x9f,0x8f -,0xa1,0xc8,0x41,0x3c,0x1f,0x15,0x04,0x02,0x0d,0x3d,0xad,0x55,0xd4,0xa0,0x93,0xa3,0xbf,0xb5,0x9c,0x97,0xa3,0xd2,0x22,0x13,0x1c,0x25,0x1b,0x0c,0x18,0x1d,0x1c,0xcc -,0x92,0x8c,0x9b,0x98,0x95,0x9b,0x90,0x93,0x9a,0xb8,0x1c,0xc7,0x44,0x1a,0x08,0x0c,0xca,0x9c,0xad,0x2c,0x1b,0x1a,0x29,0xb9,0x99,0xab,0xa5,0xd7,0x5c,0x35,0x25,0xb6 -,0x19,0x0b,0x17,0xe4,0x99,0x9a,0x9d,0x92,0x8f,0x9e,0xfc,0x2d,0x2c,0x3f,0xa2,0x9c,0xb3,0x6b,0xce,0x3b,0x16,0x0e,0x2b,0xa5,0xd9,0x64,0xa8,0xab,0x2a,0x25,0x3f,0x64 -,0x4e,0x24,0x0e,0x0d,0x58,0xa6,0x4d,0x25,0x1b,0xc7,0x89,0x8b,0x99,0x94,0x89,0x8f,0xa7,0xa0,0xb2,0xe9,0x2a,0x2f,0x3d,0x1a,0x0f,0x0b,0x07,0x05,0x0f,0x53,0xa7,0xaf -,0xb1,0xa6,0x9a,0x92,0x99,0xc4,0x39,0xb2,0xc3,0x9e,0x3e,0x19,0xa7,0xa8,0x33,0x1c,0x38,0x2f,0xcd,0x93,0x8d,0x8f,0x9e,0xbf,0xc6,0xbe,0x46,0x5e,0x36,0x1f,0x19,0x1f -,0x2a,0x19,0x0f,0x1a,0x53,0xb2,0x30,0x17,0x27,0x6d,0xb7,0xb2,0x9a,0xa4,0xa1,0x93,0x48,0x5d,0x9d,0xa0,0x64,0x30,0x30,0xb8,0x9f,0xaf,0xad,0xa1,0xaf,0x29,0x14,0x12 -,0x31,0xa5,0xba,0x3d,0x44,0x4d,0xd9,0x4d,0x1a,0x15,0x4b,0xa5,0xa4,0xb4,0xc0,0x44,0x2a,0x39,0xb1,0xd4,0xad,0x28,0x12,0x57,0xb6,0xbd,0xac,0xad,0x22,0x2f,0xa2,0x92 -,0x97,0xac,0x51,0xb9,0xb6,0x3d,0x45,0x32,0x54,0xa6,0xa5,0x29,0x13,0x13,0x17,0x15,0x1b,0xb4,0x9e,0xa7,0xae,0xbf,0x4f,0xc1,0x74,0xc3,0x97,0xbb,0xaa,0x96,0xb3,0x70 -,0xad,0xce,0x15,0x0c,0x0f,0x28,0xad,0xa3,0x9f,0x99,0xa6,0xbe,0xb2,0xbb,0xb2,0xa2,0xa9,0x46,0x30,0x3d,0x21,0x11,0x0f,0x14,0x22,0x2b,0x1d,0x20,0x33,0xa7,0xb6,0x96 -,0x8f,0xa7,0x8d,0x8e,0x9d,0xa5,0x9b,0x9e,0xbd,0x1f,0x17,0x26,0x4b,0x43,0xb9,0xae,0x1e,0x15,0x19,0x19,0x32,0xb0,0xbc,0xbc,0x56,0x42,0xc1,0x48,0x1e,0x14,0x21,0x5d -,0xbb,0xbf,0xb9,0x3f,0xaa,0x8e,0xa9,0xb8,0xa6,0xb0,0xfa,0xab,0x9f,0x9c,0xa6,0x29,0x1f,0x23,0x33,0x35,0xbe,0xbc,0x52,0xd7,0xbf,0xda,0xbf,0xb8,0xd1,0x51,0x1f,0x13 -,0x14,0x19,0x17,0x18,0x23,0x42,0xbe,0x9f,0xba,0x9f,0x90,0xaf,0x9b,0x94,0x9c,0xa1,0xa4,0xcb,0x71,0xde,0x2c,0x1c,0x0f,0x09,0x0d,0x59,0xa6,0x9d,0x9c,0x9b,0x9c,0xa1 -,0xa7,0xab,0xae,0xa9,0xb6,0xfd,0x31,0x23,0x1b,0x14,0x14,0x17,0x1a,0x18,0x62,0x2e,0x3a,0xa0,0x9b,0x99,0x9b,0x9a,0x93,0x96,0xb1,0xc5,0xca,0x2e,0x1b,0x16,0x14,0x21 -,0x47,0xa1,0x9b,0xb2,0x3d,0x3b,0x35,0xc3,0xa6,0xa0,0x9e,0xab,0x60,0x34,0x2d,0x1f,0x0d,0x18,0x46,0x29,0xaf,0xa1,0x9c,0x9b,0xa4,0xa9,0xa4,0x37,0x29,0xd5,0x64,0x58 -,0xc6,0xbb,0x48,0x1f,0x16,0x1c,0x2c,0xfe,0xae,0xa4,0xa4,0xb8,0x3f,0x45,0x3c,0x74,0x58,0x26,0x25,0x17,0x2a,0xbf,0x23,0x43,0x68,0xa9,0x98,0x9c,0x91,0x8e,0x94,0x98 -,0x97,0x9f,0xb4,0x3a,0x66,0x5d,0x29,0x27,0x1c,0x0e,0x08,0x08,0x10,0x24,0x2d,0xbc,0x9f,0xaa,0xaa,0xbd,0xd2,0xc3,0x2f,0xcb,0xac,0x4e,0xc0,0xe6,0xb9,0xba,0x3a,0x7d -,0xdf,0xbe,0xa0,0x9f,0x98,0x93,0x9b,0x9b,0xa4,0xbb,0xda,0x5b,0x2e,0x2d,0x1f,0x27,0x1b,0x15,0x18,0x1d,0x40,0x4f,0x3f,0x2e,0x32,0x24,0xce,0xc2,0xcb,0x9f,0x9d,0xa0 -,0xac,0xc8,0xba,0xd7,0x2d,0x33,0x37,0x51,0xfe,0xd1,0xae,0xa7,0xc2,0x74,0x31,0x28,0x31,0x54,0xc4,0xb7,0xbe,0xbc,0xc7,0x3c,0x28,0x2e,0x4c,0xc4,0xaa,0xa7,0x9e,0xac -,0xaf,0xb7,0xcf,0xdb,0x47,0x33,0x25,0x22,0x24,0x2e,0x22,0x24,0x2a,0x3e,0xb7,0xad,0xa1,0xa6,0xae,0xae,0x7d,0x3a,0xf2,0x38,0x4d,0x7b,0x3e,0x47,0x29,0x1e,0x1c,0x1a -,0x2e,0xc7,0xa3,0x95,0x99,0x97,0x9d,0xa8,0xb3,0xbc,0xba,0xbc,0xca,0xbc,0xd9,0xbf,0x4e,0x1f,0x19,0x16,0x16,0x1f,0x4d,0xd0,0xa1,0xa1,0x9d,0xa3,0xb3,0xba,0xf9,0x4f -,0x44,0x36,0x30,0x26,0x1b,0x19,0x19,0x1f,0x2b,0x46,0x73,0xb9,0xb7,0xab,0xa5,0xa3,0x9d,0x9b,0x9b,0xa5,0xa6,0xae,0xaf,0xbe,0xea,0x40,0x2e,0x3f,0x56,0xb9,0xaf,0xb8 -,0xd2,0x4a,0x21,0x29,0x24,0x28,0x2c,0x30,0x55,0x3f,0x3f,0x32,0x2c,0x26,0x3e,0x47,0xba,0xb9,0xae,0xa5,0xa7,0xa6,0xab,0xbc,0xcc,0x40,0x30,0x3a,0x57,0xd4,0x40,0x3f -,0x37,0x39,0x4f,0xc0,0xad,0xa6,0xaf,0xa9,0xb0,0xc2,0xb9,0xbb,0xbf,0xfd,0x36,0x3c,0x2b,0x1b,0x1f,0x1c,0x29,0x48,0xaf,0x9f,0xa7,0xa2,0xa0,0xab,0xa9,0xca,0xdc,0x4d -,0x25,0x2e,0x26,0x29,0x1e,0x19,0x18,0x18,0x1b,0x2c,0xdd,0xad,0x9c,0x9b,0x96,0x99,0x9e,0x9b,0x9c,0x9e,0xa3,0xac,0xb5,0x46,0x3f,0x2d,0x21,0x29,0x23,0x2c,0x2d,0x2f -,0x37,0x42,0xd3,0x70,0xc3,0xc5,0xc8,0xdb,0xcf,0xd0,0x5f,0x2c,0x2a,0x20,0x1f,0x2a,0x43,0xb5,0xb9,0xa2,0xac,0xad,0xad,0xba,0xb6,0xa8,0xa4,0xaa,0xaf,0xba,0x46,0x33 -,0x2d,0x24,0x29,0x36,0x52,0xde,0xbd,0xad,0xae,0xd4,0xed,0x4f,0x3f,0x2f,0x34,0x3a,0x43,0x49,0x3e,0x3d,0x2f,0x41,0xc0,0xb5,0xb0,0xa8,0xa8,0xaf,0xb6,0xbd,0xc6,0xd1 -,0x36,0x2f,0x27,0x26,0x22,0x20,0x26,0x24,0x31,0x42,0xbf,0xaf,0xa7,0x9c,0x9c,0x9d,0x9e,0xaa,0xaa,0xb1,0xce,0xdd,0xf1,0x40,0x29,0x1f,0x19,0x19,0x1a,0x21,0x2f,0xc4 -,0xb2,0xa4,0x9f,0xa2,0xa1,0xa6,0xab,0xb7,0xd9,0x47,0x3c,0x2d,0x28,0x1e,0x1e,0x1f,0x2b,0x32,0x3f,0xf1,0xb3,0xa7,0xa2,0xa3,0xa3,0xa2,0xad,0xb5,0xb5,0xcf,0x39,0x2e -,0x28,0x2a,0x26,0x3d,0x3f,0x45,0xd4,0xd4,0xcd,0xc9,0xb5,0xb4,0xbb,0xa9,0xad,0xba,0xbb,0xbf,0x3f,0x3e,0x33,0x31,0x34,0x28,0x41,0x33,0xcc,0x59,0x61,0xe5,0x36,0x4e -,0x3d,0x56,0x5e,0x55,0xbd,0xee,0xc2,0xe0,0x4a,0xcd,0xc9,0xae,0xa8,0xa8,0xa6,0xa0,0xab,0xab,0xb0,0xbe,0x48,0x2c,0x2c,0x20,0x1d,0x1d,0x1d,0x1e,0x24,0x34,0x3b,0xcf -,0xae,0xa5,0xa7,0xa5,0xa8,0xad,0xa8,0xa8,0xb4,0xc0,0xc7,0x35,0x3a,0x27,0x1f,0x1d,0x2f,0x3d,0x45,0xbc,0xbb,0xae,0xaf,0xa9,0xaa,0xac,0xb4,0xb7,0xd5,0xeb,0x4b,0x34 -,0x2a,0x21,0x25,0x1e,0x1f,0x2a,0x2d,0x48,0xba,0xa9,0xa6,0x9f,0x9e,0xa2,0x9d,0x9d,0xa6,0xb1,0xbb,0x35,0x2a,0x25,0x1b,0x1d,0x1d,0x27,0x24,0x2c,0x3a,0x3c,0xbf,0xba -,0xa7,0xa8,0xa3,0xa4,0xa8,0xa9,0xae,0xb8,0xed,0x3a,0x38,0x3b,0x58,0xc3,0x4b,0xd2,0xea,0x4f,0xfc,0xcc,0x47,0x3b,0x46,0x5b,0x54,0x36,0x3c,0x39,0x2e,0x49,0x40,0x46 -,0xd5,0x48,0xbd,0xb3,0xab,0xab,0xac,0xb6,0xc9,0xc7,0x50,0xdf,0x4f,0x3a,0x32,0x31,0x2f,0x30,0x4b,0x3b,0x4e,0xb3,0xb7,0xad,0xb2,0xb3,0xb0,0xb4,0xb5,0xeb,0xbd,0x44 -,0x2e,0x2e,0x21,0x28,0x2a,0x2a,0x49,0xd3,0xc2,0xb8,0xa6,0x9f,0x9c,0xa3,0xac,0xa6,0xc2,0xde,0x4b,0x36,0x24,0x1c,0x1f,0x18,0x1d,0x23,0x26,0x41,0x4a,0xb5,0xa8,0xa8 -,0xa5,0x9f,0x9e,0x99,0x9f,0xad,0xad,0xd9,0xde,0x37,0x35,0x29,0x24,0x2c,0x24,0x24,0x2f,0x3e,0x42,0x3f,0x6a,0xc5,0xa8,0xb5,0xd1,0xaf,0xb8,0xcb,0x39,0xe4,0x36,0x5e -,0x47,0xd8,0x57,0x72,0xb6,0x59,0xc3,0xd3,0xc4,0xb8,0xb9,0xe0,0x65,0x47,0x59,0x39,0xce,0x3a,0xd9,0x35,0x44,0x61,0x4a,0x4c,0xd0,0xb2,0xaa,0x99,0xc0,0xb5,0x35,0xc4 -,0x26,0x18,0x1b,0x06,0x08,0x1d,0x2e,0xa3,0x8b,0x80,0x9c,0x4c,0x2a,0x32,0x93,0x8b,0x83,0xae,0xa7,0x89,0x9a,0x07,0x1d,0xaf,0x29,0x0a,0x05,0x03,0x0a,0x22,0x30,0x28 -,0xe5,0x84,0x8b,0x93,0x29,0x1a,0x16,0x3e,0x15,0x0e,0x19,0xca,0x9d,0x96,0x93,0x9f,0x8f,0x94,0x83,0x93,0xa6,0x8a,0x86,0x94,0x8b,0x8c,0x9e,0x1f,0x14,0x12,0x03,0x00 -,0x00,0x00,0x02,0x06,0x05,0x17,0xa3,0x90,0x8a,0x86,0x90,0x93,0x99,0xb2,0x9f,0xa1,0x37,0xa7,0x90,0x91,0x91,0x9d,0x9f,0x8d,0x9a,0x59,0xa9,0xae,0x63,0xa7,0xa0,0x99 -,0x98,0x2f,0x6e,0x24,0x11,0x06,0x00,0x00,0x02,0x0a,0x08,0x12,0x2d,0xcd,0xa4,0x98,0x98,0x96,0x9f,0x98,0x9a,0xa3,0x8e,0x8b,0x8e,0x8b,0x89,0x88,0x8f,0x92,0x97,0xae -,0x33,0x1b,0x16,0x11,0x1b,0x1d,0x7a,0x3b,0x1c,0x4d,0x2c,0x10,0x08,0x06,0x06,0x0b,0x0d,0x0e,0x0f,0x16,0xd3,0xb4,0xbc,0xa1,0x9e,0x9e,0x8b,0x8d,0x90,0x8f,0x90,0x8a -,0x84,0x85,0x8d,0x8c,0x98,0x9a,0xdb,0x16,0x11,0x14,0x1f,0x1c,0x13,0x0f,0x12,0x0d,0x0e,0x15,0x1b,0x24,0x18,0x12,0x12,0x0e,0x0a,0x0f,0x2f,0xc2,0xb4,0xaf,0x9f,0xa0 -,0x9f,0x94,0x8f,0x8d,0x88,0x84,0x85,0x86,0x89,0x8c,0x93,0x95,0x98,0xac,0xc3,0x79,0x34,0x21,0x14,0x0d,0x0d,0x0e,0x09,0x08,0x0b,0x11,0x0d,0x0c,0x17,0x14,0x1c,0x47 -,0x4c,0x1c,0x1c,0x3e,0x34,0x2a,0xaf,0x95,0x8e,0x8c,0x8d,0x92,0x8f,0x8a,0x8d,0x8f,0x8c,0x86,0x8c,0x93,0x8c,0x90,0x9b,0x9d,0x77,0x2c,0x27,0x19,0x0e,0x07,0x08,0x06 -,0x05,0x04,0x05,0x0e,0x0d,0x15,0x19,0x14,0x18,0x19,0x30,0xc5,0xa6,0xa5,0x9f,0x91,0x8c,0x8f,0x95,0x8f,0x8e,0x8f,0x8b,0x87,0x8b,0x8d,0x8d,0x8a,0x8e,0x96,0xa1,0x44 -,0x58,0x35,0x18,0x0e,0x0c,0x0f,0x11,0x0e,0x0a,0x05,0x04,0x09,0x09,0x07,0x0b,0x0d,0x0f,0x21,0xc4,0xa7,0xa8,0x9c,0x95,0x9b,0xa5,0x9b,0x94,0x93,0x8c,0x8e,0x8d,0x87 -,0x87,0x89,0x89,0x8a,0x8e,0x92,0x99,0xa8,0x35,0x23,0x17,0x15,0x13,0x0e,0x0c,0x12,0x0f,0x0a,0x09,0x09,0x0d,0x0d,0x0c,0x0c,0x17,0x16,0x1b,0x3c,0xaa,0x9c,0x9c,0x9a -,0x9f,0x9a,0x9c,0x9a,0x9a,0x95,0x8c,0x88,0x85,0x85,0x87,0x88,0x8a,0x8e,0x92,0xa2,0xbf,0x50,0x2a,0x23,0x1a,0x12,0x12,0x0f,0x0b,0x0f,0x0c,0x06,0x08,0x0c,0x0b,0x0d -,0x0c,0x0f,0x1b,0x21,0x2c,0x2d,0xc2,0xad,0xa5,0x9c,0x97,0x97,0x95,0x91,0x91,0x8b,0x8c,0x92,0x8e,0x8b,0x8b,0x8a,0x8d,0x94,0x94,0x9d,0xb7,0x40,0x28,0x1f,0x23,0x20 -,0x16,0x0e,0x0d,0x0e,0x10,0x13,0x12,0x0d,0x0c,0x0f,0x0c,0x0a,0x0e,0x19,0x17,0x17,0x1a,0x1c,0x3d,0xaf,0x9e,0x96,0x91,0x8d,0x8b,0x8e,0x90,0x90,0x8f,0x8d,0x95,0x97 -,0x97,0x94,0x8e,0x95,0x9b,0xb7,0xcd,0x5d,0x2a,0x2d,0x22,0x29,0x20,0x19,0x1a,0x11,0x0f,0x0e,0x0c,0x0e,0x0e,0x0a,0x0a,0x09,0x0d,0x13,0x14,0x26,0x2d,0x3c,0xb1,0xad -,0xa5,0x9d,0xa2,0x9e,0x97,0x8d,0x8a,0x87,0x87,0x86,0x87,0x86,0x8b,0x8e,0x93,0x9c,0x9d,0xc0,0x32,0x20,0x1f,0x12,0x17,0x12,0x0f,0x0f,0x0b,0x0e,0x12,0x17,0x14,0x13 -,0x18,0x1b,0x1c,0x1d,0x14,0x1d,0x14,0x1b,0x1f,0x2b,0x42,0xb6,0xae,0xb1,0xa0,0x9a,0x92,0x90,0x8c,0x8b,0x88,0x8b,0x8e,0x90,0x8c,0x8c,0x8d,0x91,0x90,0x90,0x9e,0x3b -,0x16,0x0f,0x0d,0x0f,0x0d,0x0b,0x0c,0x13,0x1a,0x19,0x1e,0x23,0x20,0x22,0x1a,0x1b,0x1a,0x1c,0x1b,0x19,0x1f,0x45,0xc4,0xa6,0x9d,0xa3,0x9b,0x9c,0x9c,0x9c,0x9c,0x9f -,0x9f,0x98,0x95,0x9b,0x9d,0xaa,0xa2,0x98,0x93,0x94,0xa4,0x9a,0x99,0xae,0xb5,0xcc,0x2f,0x28,0x1d,0x1a,0x11,0x0e,0x15,0x0f,0x0d,0x10,0x16,0x1a,0x19,0x19,0x1f,0x27 -,0x1b,0x20,0x2b,0x2a,0xd0,0xb2,0xc0,0xb8,0xaf,0x9f,0x97,0x9d,0xaa,0x9b,0x9c,0x9e,0x9a,0x94,0x94,0x98,0x8e,0x8f,0x8d,0x90,0x8f,0x97,0x9f,0xa5,0x48,0x24,0x19,0x17 -,0x17,0x13,0x10,0x14,0x10,0x17,0x16,0x16,0x10,0x12,0x12,0x17,0x13,0x17,0x1d,0x18,0x2f,0x4b,0x3e,0x59,0xa5,0xa9,0xa3,0xaa,0x9f,0x9e,0x9a,0x96,0x97,0x8e,0x8f,0x92 -,0x97,0x9b,0xa0,0xa8,0xc4,0xba,0xd9,0xb1,0xac,0xa5,0x9b,0xa3,0xa5,0xda,0xc8,0x47,0x2b,0x23,0x17,0x17,0x16,0x13,0x0f,0x0f,0x14,0x12,0x0f,0x0e,0x0e,0x1a,0x18,0x1a -,0x1c,0x20,0x58,0xbd,0xa3,0xa5,0xa2,0x9c,0x9b,0x9c,0x95,0x91,0x93,0x95,0x92,0x91,0x8f,0x8f,0x95,0x9a,0x9b,0x9a,0x9d,0x9f,0xac,0xae,0xac,0xad,0xca,0x6c,0x4a,0x2d -,0x26,0x27,0x1c,0x13,0x0f,0x0e,0x0d,0x0a,0x0c,0x0d,0x0c,0x10,0x1a,0x1c,0x19,0x13,0x13,0x1d,0x36,0x55,0x7c,0xb8,0x9b,0x96,0x97,0x91,0x8d,0x8b,0x8a,0x8a,0x8a,0x89 -,0x8a,0x8d,0x8f,0x8f,0x8e,0x93,0x97,0x99,0xa6,0xc4,0x38,0x20,0x17,0x15,0x0e,0x15,0x14,0x0f,0x0c,0x08,0x0b,0x0b,0x09,0x0b,0x0e,0x0d,0x0d,0x11,0x15,0x13,0x1b,0x29 -,0xac,0xa1,0xa0,0x98,0x95,0x92,0x93,0x94,0x91,0x8d,0x8c,0x8b,0x8f,0x8f,0x89,0x87,0x87,0x86,0x8b,0x8d,0x8f,0x98,0xb0,0x53,0x21,0x15,0x12,0x0f,0x0c,0x0b,0x0d,0x09 -,0x08,0x07,0x0b,0x0b,0x0e,0x13,0x10,0x17,0x1c,0x1f,0x19,0x1a,0x28,0x32,0xd3,0xca,0xac,0x9f,0xa6,0x9d,0xa0,0x9c,0x97,0x91,0x90,0x90,0x90,0x91,0x8b,0x8b,0x8c,0x8c -,0x8b,0x8e,0x8d,0x90,0x9b,0xa9,0xbc,0xdc,0x1f,0x19,0x1a,0x13,0x11,0x10,0x0d,0x0d,0x0c,0x0f,0x0e,0x10,0x0d,0x0b,0x0d,0x0e,0x12,0x11,0x12,0x15,0x15,0x1c,0x2d,0x38 -,0xbd,0xa2,0x94,0x96,0x9d,0x9b,0x8f,0x91,0x93,0x92,0x8f,0x8d,0x8b,0x8e,0x8e,0x89,0x8d,0x8a,0x8f,0x93,0x93,0x97,0xa9,0xbf,0x4f,0x31,0x1f,0x17,0x15,0x13,0x0d,0x09 -,0x08,0x05,0x04,0x09,0x0b,0x07,0x08,0x0c,0x18,0x1e,0x20,0x1f,0x22,0x1e,0x2b,0xe1,0xbb,0xb8,0x9f,0x97,0x90,0x8e,0x8e,0x8e,0x8d,0x8a,0x8d,0x8a,0x8a,0x8c,0x8d,0x8a -,0x8c,0x8d,0x91,0x9d,0x9c,0xaf,0x54,0x1f,0x1b,0x19,0x19,0x16,0x0d,0x15,0x17,0x18,0x0f,0x0e,0x0d,0x0b,0x0d,0x0a,0x0a,0x0b,0x0d,0x11,0x1a,0x1d,0x1b,0x1d,0x38,0x40 -,0x5e,0xb8,0xa1,0x9a,0x98,0x91,0x8f,0x8f,0x8c,0x8a,0x8b,0x90,0x91,0x8d,0x8c,0x8b,0x8b,0x8a,0x8a,0x8c,0x8e,0x8f,0x97,0xcd,0x1e,0x1c,0x23,0x18,0x0c,0x08,0x09,0x0c -,0x0f,0x0d,0x0e,0x0d,0x0b,0x0f,0x0b,0x0b,0x0d,0x12,0x18,0x1b,0x19,0x1b,0x28,0xc9,0xad,0xc3,0xab,0x9a,0x8e,0x95,0x97,0x8e,0x88,0x88,0x89,0x89,0x8b,0x8b,0x8a,0x8c -,0x8e,0x8d,0x95,0x92,0x90,0x8f,0x9a,0xb3,0x55,0x3c,0x2f,0x17,0x0b,0x0d,0x0e,0x09,0x13,0x0a,0x09,0x0b,0x09,0x0d,0x0d,0x09,0x06,0x0c,0x0c,0x0a,0x10,0x14,0x1c,0x30 -,0x4f,0xb5,0xab,0x9b,0x96,0x93,0x8d,0x8e,0x8d,0x8d,0x8d,0x8c,0x8c,0x8b,0x8b,0x88,0x87,0x8a,0x8a,0x8a,0x87,0x89,0x8d,0x98,0xa2,0xa9,0x4a,0x23,0x1a,0x10,0x0c,0x07 -,0x05,0x03,0x02,0x05,0x04,0x04,0x05,0x05,0x05,0x06,0x0e,0x0d,0x16,0x1e,0x20,0x37,0x4a,0x8f,0x8a,0x8b,0x8b,0x8a,0x86,0x89,0x89,0x83,0x86,0x8a,0x8c,0x8a,0x88,0x90 -,0x94,0x91,0x89,0x94,0xa6,0xa5,0xae,0xa9,0xac,0x6c,0x38,0xca,0x2e,0x0e,0x06,0x09,0x06,0x03,0x01,0x06,0x0a,0x03,0x03,0x05,0x0a,0x0f,0x0a,0x16,0x34,0x51,0xc2,0x31 -,0xad,0xbc,0x2d,0xb9,0x8b,0x87,0x8b,0x98,0x99,0x8a,0x87,0x8c,0x86,0x83,0x81,0x82,0x8c,0x8c,0x95,0xa4,0x32,0x9d,0x9a,0xec,0x29,0x18,0x35,0xc9,0x2e,0xc0,0xe0,0xb0 -,0x2e,0x0e,0x0c,0x03,0x01,0x01,0x08,0x05,0x01,0x04,0x05,0x13,0x11,0x15,0xc6,0xca,0x97,0x1f,0x32,0x26,0x35,0x1f,0x2e,0x8a,0x93,0x8d,0x83,0x83,0x82,0x81,0x82,0x80 -,0x83,0x80,0x9d,0x94,0x43,0xe6,0x07,0x28,0x25,0x08,0x3d,0x05,0x9c,0x2e,0x13,0x0f,0x00,0x2e,0x15,0x00,0x02,0x09,0x0c,0x17,0x80,0x9c,0x3c,0x94,0x46,0x85,0x86,0x8d -,0x80,0x88,0x80,0x94,0x08,0x0c,0x15,0x0b,0x18,0x1f,0x00,0x0b,0x13,0x9d,0x11,0x05,0x4e,0x40,0x49,0x05,0x03,0x01,0x07,0x00,0x30,0x86,0x91,0x85,0x90,0x80,0x81,0x9f -,0x92,0x8a,0x85,0x8e,0x96,0x88,0x73,0xba,0x80,0x89,0x8a,0x9e,0x99,0x8e,0x04,0x00,0x05,0x05,0x08,0x07,0x00,0x0e,0x16,0x08,0x89,0x97,0x20,0xa8,0xdc,0x8b,0x2f,0x00 -,0x15,0x51,0xaf,0x28,0x0e,0x14,0x23,0x16,0x8f,0x8a,0xaa,0x9e,0x58,0x85,0x8f,0x9d,0x9f,0x23,0x83,0xbe,0x0c,0x06,0x05,0x00,0xbb,0x84,0x99,0x82,0xb5,0x82,0x9d,0x19 -,0xaf,0x9b,0x83,0x8c,0xca,0x35,0x0c,0x1a,0x83,0x89,0x9e,0xa1,0x42,0x92,0x33,0x06,0x0a,0x00,0x42,0x15,0x0f,0x0f,0x00,0x09,0x91,0x85,0x33,0x0e,0x05,0x0b,0x02,0x01 -,0x02,0x04,0x0c,0x18,0x3c,0xe0,0x27,0xb8,0x83,0x80,0x80,0x94,0x8b,0x80,0x84,0x86,0x81,0x81,0x80,0x82,0x88,0x54,0x0d,0x0f,0x94,0x9f,0x0c,0x0c,0x00,0x06,0x00,0x04 -,0x00,0x2e,0x91,0x1f,0x05,0x00,0x01,0x00,0x37,0xb7,0x13,0x09,0x2a,0xa6,0x9b,0x1c,0xc5,0x81,0x83,0x80,0x88,0x8b,0x96,0x8f,0x80,0x80,0x80,0x8c,0x8b,0x85,0x9f,0x8e -,0xb1,0xcd,0x99,0x0f,0x04,0x02,0x00,0x0b,0x87,0x98,0x0e,0x07,0x0d,0x16,0x0a,0x02,0x02,0x8f,0x8b,0x21,0x02,0x02,0x00,0x3c,0x81,0x8e,0xcd,0x05,0x1c,0x1f,0x5d,0xc2 -,0x92,0x81,0x87,0x86,0x7b,0x21,0x13,0x8e,0x80,0x81,0xc5,0x07,0x8c,0x13,0x09,0x08,0x03,0x95,0x83,0x8e,0x12,0x05,0x0c,0x91,0x80,0x84,0x91,0x0b,0x1e,0x42,0x14,0x13 -,0x0b,0x8d,0x82,0x9e,0x0a,0x00,0x03,0xa4,0x80,0x85,0x4f,0x00,0x1a,0x0f,0x05,0x24,0x1c,0x9b,0x47,0x0e,0x0a,0x00,0x00,0x09,0x88,0xa6,0x06,0x01,0x08,0xb7,0xdf,0x54 -,0x85,0x80,0x83,0x80,0x8c,0x91,0x23,0x94,0x80,0x82,0x80,0x3e,0x66,0x95,0x9f,0x9a,0x88,0x80,0x81,0x98,0x0d,0x07,0x00,0x06,0x94,0x1e,0x06,0x02,0x00,0x01,0x03,0x06 -,0x00,0x0c,0x12,0x0d,0x0a,0x00,0x02,0x00,0x59,0x80,0x85,0x84,0x94,0x8b,0x8b,0x87,0x8a,0x80,0x80,0x81,0x80,0x0d,0x18,0x87,0x82,0x80,0x81,0x81,0x82,0x8c,0x1b,0x09 -,0x0b,0xa0,0x84,0x17,0x00,0x01,0x00,0x02,0x00,0xca,0x96,0x10,0x06,0x00,0x01,0x00,0x00,0x08,0x9c,0x8b,0xa7,0x20,0x0b,0x05,0x0d,0x96,0x80,0x82,0x81,0x26,0x11,0x9f -,0x95,0x80,0x83,0x80,0x83,0x80,0xa2,0x0e,0x56,0x14,0x81,0x86,0x8e,0x99,0x1e,0x0f,0x18,0xbd,0x19,0xaa,0x8d,0x2b,0x05,0x00,0x02,0x05,0x0c,0x92,0x9e,0xa8,0x0b,0x00 -,0x01,0x22,0x4b,0x29,0x8c,0x8c,0x9b,0x23,0x00,0x05,0x13,0x8c,0x80,0x8d,0x8f,0x0b,0x0c,0x26,0xae,0xea,0x86,0x80,0x87,0x84,0x1c,0x0a,0x0d,0x16,0x84,0x80,0x86,0xa4 -,0x0e,0x1b,0x08,0x20,0xb8,0x91,0x95,0xa2,0x24,0x00,0x01,0x00,0x0b,0x85,0x85,0xc1,0x16,0x00,0x03,0x12,0xa6,0x9c,0x81,0x85,0x8b,0x97,0x22,0xa5,0x1f,0x93,0x80,0x88 -,0x92,0x12,0x06,0x02,0x1d,0x35,0x9b,0x8d,0x94,0x14,0x00,0x00,0x05,0x02,0x1d,0x88,0xa4,0xc2,0x06,0x02,0x10,0xa2,0x9a,0x82,0x89,0x96,0xd8,0x14,0x11,0x34,0x98,0x87 -,0x80,0x80,0x8a,0x18,0x1d,0xad,0x82,0x94,0x88,0x8b,0x99,0x5b,0x09,0x02,0x07,0x1a,0x8f,0x85,0x39,0x02,0x00,0x00,0x03,0x0f,0x3b,0x9a,0x2d,0x48,0x06,0x05,0x06,0x07 -,0x14,0x8b,0x80,0x99,0x1b,0x05,0x06,0x9d,0x88,0x97,0x81,0x88,0x94,0x8c,0xb6,0xd2,0x88,0x8b,0x81,0x81,0x83,0x9e,0x29,0x2b,0x8d,0x88,0x88,0x81,0x8c,0xac,0x0d,0x07 -,0x00,0x16,0x17,0x36,0xb6,0x24,0x04,0x00,0x01,0x08,0x1f,0x27,0xa8,0x2c,0x0f,0x02,0x00,0x00,0x09,0x19,0x86,0x81,0x8c,0xa4,0x07,0x23,0x9a,0x8d,0x86,0x82,0xaa,0x9d -,0x2d,0x0b,0x3f,0x3e,0x89,0x80,0x80,0x85,0xaf,0xbd,0xaf,0x8b,0x86,0x80,0x87,0x94,0xa1,0x1c,0x0e,0x11,0x09,0x1f,0x93,0xba,0x16,0x01,0x00,0x00,0x0d,0x07,0x2e,0x29 -,0x0e,0x14,0x05,0x07,0x04,0x0b,0x60,0x84,0x86,0xa4,0x1d,0x08,0x19,0x8a,0x88,0x84,0x84,0x8e,0x97,0x36,0x9e,0xa5,0xa5,0x84,0x80,0x80,0x86,0x24,0x0e,0x9c,0x8d,0x89 -,0x91,0x4a,0xb3,0x0a,0x00,0x07,0x05,0x0f,0x18,0x8a,0xd7,0x02,0x06,0x00,0x07,0x09,0x2d,0x8c,0x5d,0x14,0x0f,0x02,0x0a,0x1d,0x13,0x8d,0x80,0x87,0x93,0x16,0x1d,0xbe -,0x8d,0x85,0x82,0x88,0x83,0x91,0xa5,0x1a,0x15,0x9d,0x84,0x80,0x8a,0xac,0x06,0x06,0x14,0x60,0xb7,0xac,0x9e,0x3f,0x00,0x03,0x00,0x08,0x19,0xa4,0x87,0x18,0x08,0x02 -,0x00,0x1d,0x97,0x88,0x84,0x86,0xa9,0x1a,0x12,0x22,0x9d,0x97,0x86,0x80,0x86,0x9d,0x0e,0x1c,0x99,0x93,0x81,0x87,0x93,0x42,0x14,0x0b,0x07,0x0b,0x1e,0x86,0x82,0x3c -,0x07,0x02,0x04,0x12,0x0b,0xb2,0x9e,0x24,0x14,0x00,0x03,0x00,0x0f,0x94,0x80,0x81,0x8b,0xe4,0x06,0x19,0x25,0x99,0x80,0x86,0x81,0xaf,0x12,0x25,0x23,0x2c,0x88,0x80 -,0x85,0x89,0x0e,0x00,0x10,0xa9,0xe9,0x93,0x8d,0x2d,0x12,0x05,0x04,0x0a,0x0a,0xa8,0x86,0x8b,0x26,0x03,0x00,0x06,0x4e,0xac,0x8c,0x9d,0x0b,0x02,0x04,0x05,0x27,0x92 -,0x87,0x81,0xb7,0x10,0x03,0x0b,0x8f,0x8f,0x85,0x80,0x85,0x88,0xba,0xb9,0xa7,0x93,0x85,0x80,0x82,0x82,0xa7,0x06,0x16,0x29,0xcd,0xa0,0xbd,0x9a,0x13,0x02,0x00,0x00 -,0x04,0x1c,0x86,0xb0,0x0c,0x00,0x00,0x06,0x07,0x0c,0x27,0x1d,0x1b,0x0d,0x03,0x0a,0x18,0x9a,0x88,0x80,0x82,0x88,0x27,0x26,0x9b,0x8b,0x80,0x81,0x80,0x86,0x86,0x98 -,0xa9,0x8c,0x86,0x80,0x81,0x8b,0x26,0x02,0x08,0x09,0x07,0x1b,0x3e,0x1d,0x0d,0x00,0x01,0x00,0x03,0x1f,0xad,0x2b,0x04,0x01,0x00,0x04,0x15,0x99,0x8b,0x86,0x89,0x5f -,0x17,0x0d,0x14,0x8b,0x80,0x80,0x81,0x96,0x3c,0x2d,0x87,0x84,0x82,0x80,0x81,0x87,0xa1,0x14,0x0d,0x29,0x8b,0x80,0x87,0xa3,0x0d,0x00,0x0e,0x18,0x2b,0xa8,0x23,0x7b -,0x09,0x00,0x02,0x00,0x09,0x8c,0x94,0x0e,0x04,0x00,0x03,0x03,0x2a,0x9c,0xb1,0x97,0x75,0x0e,0x07,0x0a,0x90,0x80,0x80,0x80,0xa1,0x1d,0x92,0x8b,0x81,0x80,0x81,0x80 -,0x83,0x94,0x28,0x2f,0xaf,0x84,0x82,0x94,0x0e,0x00,0x02,0x01,0x08,0x0a,0x15,0x47,0x1e,0x02,0x00,0x01,0x03,0x8e,0x8f,0x36,0x0a,0x00,0x09,0x0c,0x5e,0xb6,0x90,0x86 -,0x95,0x39,0x13,0x27,0x8c,0x80,0x82,0x82,0xa4,0x29,0x97,0x91,0x8b,0x86,0x85,0x83,0x9a,0x1e,0x0d,0x1e,0x8c,0x80,0x86,0x9c,0x09,0x0c,0x0f,0x0c,0x1e,0x37,0xaf,0x22 -,0x06,0x00,0x03,0x00,0x23,0x8a,0xcc,0x10,0x00,0x02,0x06,0x0e,0x31,0xd3,0xa5,0xad,0x10,0x15,0x25,0x92,0x80,0x83,0x80,0xb8,0x2c,0x99,0x94,0x87,0x81,0x87,0x80,0x8b -,0x2d,0x2c,0xa6,0x81,0x80,0x82,0x92,0x06,0x0d,0x0f,0x0a,0x17,0x0a,0x14,0x25,0x06,0x01,0x00,0x00,0xb5,0xad,0x09,0x05,0x00,0x02,0x03,0x09,0x2e,0xa1,0x89,0x95,0x26 -,0x11,0x10,0x88,0x80,0x80,0x87,0x21,0x94,0x83,0x88,0x84,0x86,0x84,0x84,0x90,0xba,0x3c,0x9a,0x80,0x8d,0xbd,0x0c,0x06,0xb0,0xad,0x98,0x3b,0x16,0x27,0x0c,0x00,0x03 -,0x00,0x50,0x88,0x1f,0x0a,0x00,0x02,0x05,0x09,0x0d,0x20,0xa5,0x25,0x00,0x03,0x00,0x1c,0x80,0x84,0x81,0x1d,0x0f,0x98,0x92,0x82,0x81,0x80,0x80,0x8b,0xc0,0x33,0xae -,0x80,0x80,0x83,0x8d,0x09,0x23,0x25,0x0d,0x35,0x43,0x8f,0x90,0x0d,0x06,0x00,0x0f,0x8a,0xaa,0x1c,0x01,0x06,0x06,0x00,0x02,0x05,0xad,0x8c,0x18,0x00,0x02,0x05,0x83 -,0x8d,0x8a,0xa7,0x1a,0x90,0x9d,0x8b,0x8b,0x83,0x80,0x87,0x69,0x1c,0x1c,0x86,0x80,0x84,0x81,0xa7,0x95,0x9c,0x6e,0x2d,0x0f,0x0e,0x3b,0x05,0x00,0x00,0x05,0x8d,0xb9 -,0x8c,0x16,0x00,0x41,0x89,0x84,0x23,0x18,0x9a,0xae,0x09,0x0c,0x08,0x84,0x80,0x98,0x24,0x1d,0x9f,0x2c,0x0d,0x3f,0x83,0x80,0x9b,0x00,0x04,0x00,0x95,0x86,0xd1,0x29 -,0x00,0x1b,0x1e,0x90,0x82,0x86,0x80,0x86,0x0a,0x00,0x00,0x04,0x88,0x92,0xa3,0x10,0x0c,0xb9,0xaf,0xad,0x89,0x83,0x81,0x89,0x1c,0x0c,0x36,0x82,0x8c,0x8a,0x9c,0x17 -,0xc0,0xa9,0xa9,0x2c,0x2d,0xa7,0xe6,0x08,0x00,0x05,0x1b,0x24,0x0d,0x05,0x00,0x05,0x0f,0xdc,0x40,0x95,0x82,0x84,0x9a,0xb0,0x41,0x8f,0x80,0x88,0x92,0x04,0x0c,0x2c -,0x17,0x20,0x9a,0x84,0x8a,0x25,0x09,0x01,0x1a,0x80,0x82,0x80,0x21,0x06,0x15,0x0d,0x55,0x2c,0xc1,0x88,0x9e,0x0f,0x08,0x00,0x90,0x8a,0x96,0xb1,0x09,0x14,0x00,0x01 -,0x07,0x1b,0x8c,0x91,0x0e,0x0d,0x08,0x90,0x81,0x8a,0x9c,0x23,0x92,0xa7,0xba,0xaa,0x92,0x89,0x85,0xa9,0x1a,0x0d,0x9e,0x80,0x8e,0x93,0x19,0xbc,0x9c,0x3a,0x1b,0x16 -,0xfe,0xb0,0x18,0x05,0x01,0x07,0x85,0x83,0x88,0x12,0x07,0x9a,0x96,0xa8,0x10,0x3f,0x2d,0x0f,0x00,0x02,0x00,0xbe,0x89,0x93,0x28,0x03,0x27,0x17,0xc4,0x3d,0x94,0x81 -,0x80,0x89,0x5b,0x1c,0x87,0x80,0x81,0x83,0x2b,0x8d,0xa1,0xb5,0xce,0x28,0x8f,0x84,0x2f,0x05,0x00,0x09,0x99,0x2e,0xab,0x0b,0x0c,0x0b,0x11,0x2c,0x0d,0xa0,0x96,0x29 -,0x06,0x04,0x0b,0x90,0x6a,0x42,0x0d,0x0d,0xe2,0x1d,0x44,0x19,0x99,0x8c,0xa3,0x33,0x0f,0x11,0x83,0x83,0x82,0x98,0x20,0x87,0x8e,0x86,0x85,0x83,0x80,0x86,0x46,0x08 -,0x08,0x98,0x80,0x8e,0xcb,0x01,0x0d,0x0d,0x0f,0x12,0x0b,0xbf,0xc0,0x06,0x00,0x00,0x08,0x98,0x1f,0x20,0x06,0x12,0x1a,0x0c,0x14,0x07,0x93,0x81,0x8d,0x19,0x02,0x0c -,0x83,0x83,0x85,0x43,0x0c,0x9b,0x9b,0x85,0x86,0x82,0x80,0x84,0xa2,0x1d,0x17,0x87,0x80,0x8d,0x4d,0x00,0x2e,0x4f,0xbe,0x31,0xb9,0x88,0x8a,0x28,0x02,0x00,0x09,0x88 -,0x8f,0x3a,0x01,0x05,0x0a,0x02,0x06,0x00,0x11,0x43,0x0e,0x01,0x00,0x05,0x84,0x86,0x81,0x3c,0x1e,0x8c,0x8e,0x86,0xa9,0x89,0x83,0x82,0xb0,0x21,0x28,0x86,0x80,0x83 -,0x8c,0x23,0x92,0xaa,0xa4,0x31,0xb4,0x89,0x86,0xab,0x08,0x00,0x25,0x81,0x99,0x1f,0x00,0x0a,0x09,0x06,0x07,0x07,0x2d,0xc9,0x12,0x00,0x03,0x00,0xab,0x94,0x30,0x09 -,0x01,0x18,0x5d,0x91,0xc8,0x8e,0x82,0x81,0x8b,0x6a,0x21,0x8a,0x80,0x80,0x82,0xbc,0x96,0xd3,0xb7,0x9e,0x95,0x85,0x87,0x34,0x07,0x00,0x26,0x80,0x84,0x88,0x0b,0x12 -,0x15,0x0e,0x17,0x0f,0xad,0x96,0x3e,0x02,0x01,0x01,0xb3,0xaa,0xa8,0x13,0x00,0x06,0x00,0x05,0x07,0x9f,0x85,0x83,0x19,0x01,0x00,0xa8,0x80,0x83,0x88,0x31,0x8f,0x92 -,0x89,0x97,0x8a,0x81,0x81,0x8d,0x0e,0x01,0x19,0x82,0x8d,0x9f,0x08,0x23,0xa0,0xb4,0xa4,0xd7,0x8c,0x8b,0xac,0x05,0x02,0x00,0x91,0x87,0x97,0x19,0x05,0x12,0x10,0x38 -,0x1d,0x94,0x87,0x86,0x0d,0x02,0x00,0x1f,0x80,0x84,0xb9,0x00,0x1c,0x0e,0x1b,0x09,0x48,0x86,0x80,0x8f,0x0e,0x00,0x1a,0x80,0x88,0x85,0x1e,0x3a,0x27,0x0f,0x0b,0x0d -,0x8d,0x83,0x82,0x26,0x03,0x07,0x87,0x82,0x80,0x9e,0x24,0xa8,0x35,0x98,0xb1,0x8d,0x8a,0x8a,0x17,0x03,0x00,0x48,0x84,0x9c,0x1d,0x00,0x17,0x0f,0x13,0x06,0x0c,0xc7 -,0xa0,0x12,0x04,0x00,0x0a,0x8c,0x88,0x84,0x18,0x1c,0x1a,0x1c,0x2b,0xbe,0x85,0x83,0x8b,0x1b,0x02,0x0f,0x80,0x85,0x80,0x70,0x14,0x25,0x12,0xce,0x3d,0x86,0x83,0x81 -,0xcf,0x09,0x06,0x90,0x81,0x84,0x90,0x07,0x21,0x0c,0x0e,0x05,0x15,0x8c,0x88,0x62,0x05,0x00,0x04,0x90,0x91,0x9c,0x0d,0x19,0x2b,0x0f,0x0f,0x0a,0xa7,0x8a,0x8e,0x0a -,0x04,0x00,0x9f,0x86,0x8a,0x28,0x06,0x3e,0x30,0x9f,0x27,0xa4,0x8c,0x85,0xcd,0x09,0x01,0xaf,0x80,0x83,0x81,0x23,0x9d,0x99,0x92,0x97,0xa8,0x89,0x82,0x8c,0x0d,0x02 -,0x02,0x8d,0x87,0x87,0x33,0x0a,0x3b,0x0e,0x21,0x14,0xc8,0x9a,0x8c,0x20,0x08,0x00,0x16,0x8a,0x9b,0xca,0x01,0x0c,0x0f,0x17,0x08,0x06,0x2e,0x8d,0xc3,0x06,0x01,0x06 -,0x8c,0x89,0x88,0x1d,0x13,0x2f,0xad,0x87,0x9e,0x87,0x84,0x82,0x9a,0x0e,0x1b,0x88,0x82,0x80,0x93,0x0a,0xc7,0xa3,0x82,0x8f,0x9d,0x88,0x88,0xa7,0x0d,0x00,0x09,0x8e -,0x8e,0x9d,0x08,0x05,0x09,0x0f,0x1d,0x0f,0x22,0x94,0x9d,0x0e,0x05,0x00,0xbb,0x89,0x87,0x25,0x00,0x03,0x08,0x1d,0x09,0x1a,0xad,0x94,0x4a,0x13,0x0c,0x9f,0x80,0x80 -,0x88,0x0a,0x25,0xbb,0x8b,0x8c,0xa3,0x8d,0x86,0x85,0xa4,0x0d,0x15,0x87,0x83,0x80,0x3a,0x0f,0x3c,0xa1,0x80,0x8a,0x90,0x8d,0x8c,0x32,0x06,0x00,0x13,0x8c,0x8d,0x3f -,0x00,0x02,0x03,0x19,0x1d,0x0d,0x22,0xc1,0x22,0x05,0x00,0x00,0xb4,0x8a,0x86,0x17,0x02,0x0c,0x18,0x32,0x12,0x1c,0xa0,0x88,0x98,0x1a,0x05,0x9b,0x81,0x80,0x8a,0x3e -,0xa7,0x97,0x86,0x8d,0x9a,0x9f,0x89,0x84,0xab,0x20,0x97,0x83,0x80,0x83,0x21,0x13,0x19,0x90,0x83,0xa7,0x1c,0x0b,0x1a,0x0d,0x05,0x01,0x1d,0xa8,0x42,0x0d,0x00,0x03 -,0x00,0x15,0x11,0x0e,0x0f,0x09,0x0d,0x07,0x01,0x03,0xa7,0x86,0x8a,0x15,0x08,0x12,0xa7,0x81,0x83,0x80,0x83,0x86,0x9d,0x25,0x22,0x8c,0x80,0x80,0x86,0x9f,0x9b,0x9b -,0x84,0x87,0x8e,0x98,0x96,0x91,0x27,0x09,0x04,0x1d,0x51,0x9f,0x1b,0x05,0x05,0x0b,0x21,0x07,0x17,0x1b,0xb3,0xeb,0x0e,0x08,0x0c,0xbe,0xae,0xac,0x10,0x04,0x01,0x14 -,0x6d,0x49,0x2d,0x1d,0x65,0x2e,0x44,0xb7,0x8f,0x84,0x88,0x9f,0x4c,0x5b,0xaa,0x89,0x8d,0x9c,0x29,0x57,0x9c,0x9f,0xa4,0xab,0x8c,0x8f,0x8a,0x9e,0x29,0x19,0x2a,0x9d -,0xa6,0xb3,0xaf,0x9f,0x42,0x21,0x0d,0x29,0x8e,0x89,0x97,0x0a,0x0e,0x18,0x4a,0xb6,0x1f,0x1a,0x14,0x2a,0x2b,0x2e,0x0d,0x21,0xa3,0x9c,0xaf,0x29,0x3f,0x14,0x1f,0x15 -,0x0f,0x1e,0x34,0xcc,0x35,0x16,0x10,0xb9,0x92,0x88,0x8f,0x2e,0x1c,0x13,0xaa,0xa9,0xa7,0x68,0x15,0x25,0x20,0xbf,0x1b,0xda,0xa9,0x8c,0x8a,0xa6,0xa4,0x27,0x9b,0x92 -,0x87,0x86,0x8e,0x8d,0xa5,0xa9,0x3b,0xa3,0x8d,0x89,0x83,0xa1,0x14,0x04,0x10,0xa9,0x90,0x9d,0x0c,0x09,0x08,0x10,0x0c,0x0c,0x26,0x1c,0xa8,0x0f,0x04,0x01,0x04,0x1d -,0x2a,0x2d,0x0a,0x15,0x0f,0x0d,0x09,0x03,0x1d,0x98,0x80,0x8b,0xa2,0x1a,0x1e,0x86,0x82,0x81,0x8d,0x9c,0x8c,0x8e,0x87,0xe2,0x94,0x86,0x84,0x80,0x96,0x97,0x58,0x8f -,0x8f,0x8e,0x90,0xa1,0x89,0xae,0xc8,0x0c,0x03,0x12,0x18,0x9f,0x11,0x0b,0x02,0x05,0x12,0x09,0x11,0x08,0x08,0x16,0x0f,0x0b,0x04,0x06,0x09,0x13,0x99,0x4f,0xa5,0x0a -,0x0d,0x19,0x14,0x91,0xae,0x8a,0x95,0x8d,0x8a,0x38,0x9d,0x97,0x87,0x80,0x86,0x86,0x29,0xd3,0xa5,0x8e,0x83,0x89,0x8b,0x9e,0x9a,0xcf,0x16,0x2a,0xb5,0x90,0x87,0x87 -,0x8f,0x11,0x28,0x1f,0x98,0x8e,0xab,0xbb,0x09,0x04,0x03,0x02,0x09,0x11,0x0d,0x10,0x07,0x08,0x02,0x08,0x0a,0x17,0x1c,0x0d,0x15,0x17,0x4c,0xb0,0x21,0x10,0x22,0xa4 -,0x85,0x89,0x8d,0x1d,0x1a,0xa7,0x8d,0x85,0x8f,0x90,0x8f,0x8c,0x8f,0x9f,0xb2,0x9d,0x97,0x83,0x85,0x8c,0xe0,0x24,0x49,0x63,0x8d,0x8f,0x8d,0x9d,0xed,0x18,0x15,0x24 -,0xb8,0x97,0x9c,0x97,0x24,0x10,0x02,0x07,0x18,0x37,0xcc,0x0f,0x06,0x08,0x0e,0x10,0x1a,0x19,0x1a,0x38,0x9c,0xb2,0x27,0x0b,0x0c,0x25,0xac,0x9d,0x1b,0x17,0x16,0x37 -,0xa6,0xa9,0x3d,0x41,0xc5,0x91,0x8a,0x91,0x92,0xa4,0x95,0x90,0x91,0x94,0x97,0x9f,0x96,0xa1,0xb3,0x1d,0x17,0x5a,0xb1,0x8a,0x91,0x9d,0x28,0x2a,0x4b,0x4c,0x98,0x96 -,0x2d,0x0c,0x2e,0x19,0x09,0x05,0x18,0x98,0x8a,0x85,0xbc,0x0f,0x1f,0x5d,0x1a,0xa0,0x80,0x82,0x9b,0x17,0x04,0x0a,0x12,0x19,0x3f,0x07,0x01,0x00,0x04,0x05,0x17,0xb9 -,0xd5,0x2a,0x16,0x8b,0x8c,0x8e,0x83,0x85,0x80,0x82,0x85,0x26,0xae,0x9d,0x92,0x1b,0x00,0x42,0x9f,0x94,0x0e,0xbd,0xa5,0xba,0x8f,0xba,0x0a,0x17,0x04,0x45,0x83,0x82 -,0x92,0x07,0x04,0x00,0x16,0x3c,0x9e,0x2e,0x06,0x02,0x09,0x1e,0x89,0x98,0x6c,0xac,0x8e,0x83,0x8f,0x87,0x9a,0x25,0x0e,0x09,0x0a,0x1b,0x0d,0x08,0x15,0x19,0x2b,0x3c -,0xd7,0x95,0x82,0x8b,0x92,0x91,0x9e,0x8f,0x9c,0xad,0x1e,0xa9,0x81,0x96,0x18,0x04,0x71,0x86,0x80,0x87,0x9e,0xa8,0x2a,0x1d,0x1c,0x95,0x8c,0x38,0x2c,0x0a,0x02,0x02 -,0x01,0x03,0x01,0x1a,0xb4,0x9d,0xd0,0x18,0x1e,0xae,0x88,0x84,0x85,0x8a,0x98,0xf8,0x8f,0x97,0x33,0x3d,0x1e,0x17,0x09,0x18,0x2b,0x15,0x9a,0x8c,0x5d,0x0c,0x09,0x53 -,0x96,0x8b,0x8b,0x9e,0x97,0x90,0x8e,0x80,0x83,0x96,0x19,0x0f,0x1a,0x69,0x98,0x30,0x24,0x2e,0x1e,0x20,0x0e,0x0c,0x0c,0x49,0x94,0x92,0x8a,0x0e,0x00,0x00,0x13,0x94 -,0x9c,0x13,0x00,0x05,0x0d,0x12,0x12,0xad,0x9f,0x95,0x86,0x98,0xa1,0x93,0x8c,0x86,0x94,0x8d,0x8e,0x9a,0xd0,0xec,0x99,0x3f,0xd6,0x25,0x1b,0x21,0xc2,0x8b,0x8d,0x89 -,0x88,0x84,0x82,0x91,0x9b,0x93,0x9a,0xac,0x25,0x07,0x04,0x0a,0x2d,0x40,0x11,0x03,0x00,0x02,0x00,0x15,0xb8,0xb8,0x55,0x4e,0x69,0x2f,0xb7,0x90,0x87,0x85,0x81,0x97 -,0xbb,0x0d,0x05,0x16,0xd7,0x9d,0x2f,0x21,0x1c,0x2f,0x97,0x8b,0x89,0x84,0x86,0x82,0x8d,0x9d,0x2f,0x0c,0x1a,0x28,0x4f,0x1a,0x09,0x08,0x0f,0xc5,0xc2,0x12,0x0c,0x22 -,0x9a,0x92,0xb6,0x21,0x10,0x16,0x18,0x15,0x16,0x05,0x07,0x06,0x05,0x09,0x00,0x00,0x03,0x21,0x87,0x88,0x8c,0xbd,0x1e,0xc2,0x8f,0x80,0x81,0x81,0x84,0x88,0x8a,0x91 -,0x9c,0x94,0x98,0x90,0x9e,0xc9,0x26,0x1f,0x97,0x8e,0x8d,0xa4,0xbc,0x54,0x2f,0x13,0x0e,0x1f,0xaf,0x98,0x8c,0x9a,0x1e,0x43,0xce,0x8b,0x87,0x83,0x8a,0x93,0x92,0x93 -,0x93,0xa1,0x2f,0x0b,0x03,0x0e,0xae,0xa0,0xce,0x07,0x01,0x03,0x0c,0x1d,0x15,0x21,0x2d,0x11,0x0f,0x01,0x01,0x05,0x12,0xa0,0x35,0x27,0x0b,0x07,0x0f,0x0d,0x31,0x46 -,0xad,0xcc,0x1a,0x14,0x0e,0x1d,0xa9,0x8b,0x87,0x8e,0xb5,0x20,0x14,0x9a,0x83,0x80,0x86,0xaa,0x1b,0x37,0x87,0x86,0x84,0x81,0x81,0x80,0x85,0x87,0x90,0xb6,0x9e,0x9c -,0x97,0x3f,0x13,0x0e,0x09,0x0a,0x09,0x02,0x05,0x08,0x11,0xaf,0x1e,0x1b,0x07,0x08,0x0f,0x0c,0x13,0x12,0x4a,0x9f,0x90,0x99,0x25,0x2a,0x9e,0x8a,0x81,0x8d,0xaf,0x0d -,0x06,0x2a,0x8e,0x82,0x85,0x8d,0x93,0xaa,0x96,0xa2,0x3d,0xa1,0x95,0x88,0x9c,0xb8,0x10,0x05,0x12,0x23,0x39,0x24,0x0e,0x11,0x0a,0x02,0x05,0x0c,0xa9,0x2c,0x2c,0x0e -,0x05,0x09,0x0d,0xb6,0xa4,0xbb,0x22,0x09,0x08,0x0d,0x20,0x38,0x1a,0xc0,0x38,0x98,0x96,0xae,0xac,0xa8,0x84,0x82,0x81,0x83,0x9c,0x9f,0x9e,0xa1,0xb1,0x0c,0x18,0x20 -,0xba,0xa7,0x22,0x18,0x06,0x17,0x27,0xa3,0x8c,0x9b,0x8f,0x8f,0x8c,0x9f,0x22,0x9f,0x8b,0x81,0x82,0x87,0x96,0xcf,0x8f,0x8a,0x8d,0x95,0x13,0x12,0x0e,0x10,0xca,0x21 -,0xab,0xa3,0x94,0x9d,0x25,0x18,0x03,0x0d,0xad,0x92,0x99,0x0e,0x02,0x07,0x0c,0x2a,0x0b,0x12,0x15,0x16,0xa6,0x13,0x0b,0x05,0x06,0x0f,0x0c,0x0e,0x07,0x07,0x0a,0x0b -,0x14,0x0a,0x18,0x4a,0xdd,0xad,0x2b,0x9e,0xa7,0x9f,0x97,0x9a,0x8b,0x90,0x85,0x81,0x84,0x82,0x8a,0x87,0x81,0x82,0x80,0x8a,0x8d,0x26,0x19,0xac,0x98,0x8c,0xd9,0x18 -,0x06,0x02,0x0b,0x02,0x13,0x2c,0x9f,0x88,0x9b,0x9c,0x1a,0x2e,0x8d,0x88,0x83,0x89,0x97,0xb5,0xb4,0xaa,0x22,0x6d,0x55,0xaf,0x93,0x37,0x3f,0x17,0x4f,0x88,0x8d,0x92 -,0x1e,0x07,0x07,0x02,0x0c,0x05,0x0c,0x08,0x0a,0x1e,0x19,0x1e,0x04,0x06,0x16,0x1e,0xba,0x1f,0x0f,0x23,0x1b,0x36,0x0a,0x11,0x2c,0xcc,0x93,0x59,0x55,0x0f,0x0b,0x2f -,0xa9,0x8a,0x94,0x9d,0x93,0xb1,0x9a,0x58,0xb7,0x8e,0x8a,0x80,0x86,0x91,0x38,0xab,0x8f,0x8b,0x83,0x85,0x8c,0x9d,0xbe,0x98,0x91,0x8a,0x87,0x97,0x96,0x20,0x0b,0x03 -,0x07,0x24,0xaf,0x8f,0xa2,0x1e,0x0e,0x0e,0x14,0x0c,0x23,0xc6,0xae,0x92,0x32,0x37,0x0f,0x0b,0x19,0x1a,0x2f,0x13,0x12,0x16,0x1d,0xbc,0x23,0x25,0xc5,0xb8,0x8b,0x9a -,0x8f,0xc3,0x18,0xce,0xbf,0xb6,0x1a,0x16,0x12,0x09,0x10,0x08,0x0c,0x2b,0xaf,0x8d,0x9c,0x9d,0x20,0x23,0xa0,0x8e,0x84,0x92,0x4d,0x1c,0x12,0x17,0x11,0x1b,0x9b,0x8d -,0x82,0x90,0xac,0x0e,0x0d,0x59,0xa1,0x84,0x8b,0x95,0xa7,0x3e,0xf4,0x26,0x15,0x35,0xba,0xab,0x6f,0x26,0x0b,0x01,0x12,0x2c,0x57,0x27,0x19,0x16,0x24,0xbc,0xed,0xb8 -,0xa5,0x9e,0x83,0x88,0x8c,0xa0,0x65,0x93,0x8b,0x80,0x85,0x88,0x88,0x84,0x8f,0xcd,0x30,0xaf,0xad,0x8f,0x8e,0x8e,0xa1,0x15,0x28,0x2a,0x96,0xaa,0xb6,0xc3,0x0f,0x09 -,0x01,0x02,0x05,0x04,0x10,0x0d,0x08,0x03,0x01,0x03,0x05,0x0e,0x11,0x17,0x0b,0x02,0x04,0x05,0x0a,0x4d,0xd3,0x8c,0x94,0xab,0x1d,0x07,0x1b,0xd1,0x8d,0x8c,0x8c,0x9c -,0xcb,0xcc,0xa9,0xa6,0x8c,0x84,0x81,0x85,0x87,0x8e,0xaf,0x9d,0x98,0x8d,0x8e,0x95,0x90,0x97,0xa5,0xaa,0xb3,0x97,0xa7,0x8a,0x89,0x8a,0x98,0x20,0xab,0xa1,0x91,0x9d -,0x9e,0xad,0x57,0x28,0x14,0x0d,0x23,0x39,0x9a,0x9e,0xaf,0xc0,0x0c,0x0e,0x16,0xa9,0x4d,0x2c,0x2e,0x11,0x08,0x01,0x00,0x03,0x08,0x38,0x19,0x09,0x05,0x01,0x0b,0x0c -,0x18,0x1f,0x3b,0x35,0x21,0x16,0x19,0x2a,0xa9,0x9a,0x89,0x96,0x99,0x99,0xc8,0x9e,0x96,0x85,0x86,0x88,0x98,0xb9,0x43,0x48,0x79,0xa3,0xa6,0x99,0xa3,0xaf,0xa5,0xb1 -,0xa0,0xb3,0x8d,0x86,0x86,0x8a,0x93,0xad,0xa4,0xc1,0x3a,0x2f,0xda,0x65,0x1d,0x0d,0x05,0x10,0x0d,0x12,0x15,0x2e,0xa9,0xa6,0x9c,0xa3,0xa9,0x96,0x91,0x8e,0x89,0x88 -,0x8f,0xac,0xa9,0xa3,0x9e,0x92,0x91,0x99,0xa8,0x3c,0x27,0x33,0x2d,0x28,0xc8,0xa0,0x3c,0x0b,0x07,0x07,0x0c,0x0b,0x08,0x09,0x0a,0x06,0x05,0x04,0x03,0x03,0x06,0x16 -,0x17,0x25,0x1e,0x1d,0x49,0x46,0xd5,0xca,0xa8,0x99,0x98,0x9b,0x9e,0x4c,0x23,0x1c,0x2f,0xe9,0xbc,0xa9,0xa8,0x27,0x14,0x1f,0xbc,0x8e,0x8b,0x8a,0x95,0x94,0x91,0x9a -,0x9b,0x93,0x8a,0x87,0x88,0x9c,0xa7,0x9c,0x93,0x92,0x94,0x8e,0x8e,0x92,0xa4,0x4c,0x1f,0x29,0xc9,0xbd,0xc7,0x26,0x1c,0x0f,0x17,0x37,0x31,0x2b,0x2d,0x2f,0x22,0x26 -,0x1b,0x1a,0x16,0x11,0x13,0x10,0x0d,0x16,0x1a,0x1a,0x1c,0x1f,0x38,0xda,0x3f,0x1c,0x24,0xaf,0xa8,0xe0,0x55,0xdc,0xc9,0xb4,0xd0,0x26,0x2b,0x2f,0x1d,0x23,0x2d,0x2a -,0x3c,0x29,0x25,0x2e,0x25,0x36,0xbb,0xa9,0xb3,0xb7,0x3f,0x24,0xd4,0xbf,0xa9,0x9e,0xaa,0xa9,0xa8,0xa7,0xae,0xaa,0x96,0x8d,0x8e,0x8d,0x9d,0xa8,0x9c,0x98,0x9c,0x97 -,0x97,0xc7,0x2b,0x16,0x13,0x14,0x0f,0x15,0x19,0x15,0x0f,0x0a,0x0a,0x15,0x37,0x5d,0xac,0x98,0x93,0x8c,0x8b,0x89,0x86,0x87,0x87,0x85,0x85,0x86,0x86,0x88,0x8d,0x8f -,0x97,0xa5,0xc7,0x51,0xd7,0x2b,0x1c,0x1a,0x0f,0x0b,0x08,0x0a,0x0e,0x0c,0x0d,0x0f,0x0c,0x0c,0x10,0x0d,0x0e,0x0b,0x05,0x05,0x06,0x05,0x06,0x0b,0x0b,0x10,0x0d,0x11 -,0x1f,0x1d,0x3c,0xb6,0x9f,0x9e,0x9d,0xac,0xb7,0xb5,0xd1,0x46,0xf0,0xa2,0x9e,0x9a,0x96,0x9a,0x9d,0x8e,0x86,0x84,0x83,0x84,0x87,0x89,0x8d,0x91,0x9c,0xaa,0xaa,0xac -,0xbf,0x2e,0x32,0x34,0x2f,0x43,0x3e,0xab,0x99,0xa3,0xe0,0xc7,0x9e,0xa6,0xa0,0xab,0xa6,0x33,0x46,0x3a,0x64,0x32,0x0b,0x24,0x1e,0x47,0x1c,0x14,0x40,0x1f,0xb6,0xa6 -,0xdb,0x9f,0xa8,0xd9,0x4f,0xa1,0x19,0x0c,0xab,0x2e,0x29,0x4a,0x06,0x16,0xad,0x4b,0x45,0xbf,0x43,0x17,0x1c,0x0c,0x0e,0x0c,0x10,0x0f,0x15,0x14,0x13,0x19,0x0e,0x17 -,0x0e,0xaf,0xc8,0x7d,0xae,0xe7,0xe6,0xaf,0xa0,0xad,0x93,0x8c,0x90,0x9a,0x92,0x98,0x8f,0x85,0x88,0x89,0x88,0x8a,0x84,0x83,0x86,0x88,0x8b,0x8a,0x8b,0x96,0x8f,0xa9 -,0xe5,0x17,0x06,0x0a,0x0a,0x09,0x04,0x05,0x04,0x09,0x07,0x0f,0x0d,0x0b,0x12,0x0a,0x05,0x0c,0x0d,0x1e,0xba,0x9e,0xa0,0xa8,0x9d,0x9b,0x98,0x8d,0x8c,0x88,0x83,0x84 -,0x86,0x94,0x94,0x8f,0x8c,0x99,0x8f,0x9a,0x9b,0x9d,0xb1,0x39,0x65,0xa8,0x92,0x8f,0x45,0x2e,0x1c,0x1e,0x13,0x1b,0x0d,0x0e,0x0d,0x09,0x07,0x07,0x09,0x09,0x15,0x0d -,0x14,0x0f,0x16,0x0c,0x2b,0xb1,0xad,0x9a,0xda,0x9e,0xab,0xb6,0xd0,0x98,0xa0,0x9f,0x9c,0xa9,0x9b,0xb2,0x8e,0x98,0x93,0x8e,0x99,0x8b,0x8f,0x87,0x8f,0x9a,0x99,0x94 -,0x99,0x99,0xb2,0x19,0x18,0x1e,0x24,0x0e,0x13,0x17,0x1c,0x49,0x2f,0x1a,0x29,0x13,0x1d,0x17,0x1c,0x12,0x0a,0x0f,0x1d,0x29,0x11,0xc4,0xbc,0x9c,0x98,0x9b,0x8f,0x8c -,0x85,0x84,0x89,0x88,0x88,0x88,0x89,0x89,0x97,0x95,0x93,0x9a,0xa8,0xad,0xe0,0x46,0x3a,0x2d,0x4e,0x15,0x1e,0x19,0x2b,0x1e,0x20,0x26,0x0c,0x0c,0x0d,0x0a,0x09,0x1c -,0x0e,0x09,0x1b,0x14,0x16,0x23,0x1d,0x25,0x34,0x3e,0x24,0x2b,0x1a,0x12,0x0d,0x15,0x2f,0x14,0x0f,0x0c,0x1d,0x1f,0x1c,0x2e,0xa4,0x8f,0x9d,0x9d,0x99,0x9d,0x8e,0x8e -,0x9d,0x8f,0x9f,0x9c,0x98,0xba,0xe8,0x34,0xc4,0x9c,0xbb,0x47,0x1f,0x1b,0x40,0x21,0x4c,0xb0,0x2b,0xb9,0x2f,0x36,0x94,0x9b,0x9e,0x9c,0x90,0x93,0x9b,0x94,0x9e,0x89 -,0x91,0x95,0x93,0xc8,0x99,0x94,0x9c,0xc3,0xad,0xd1,0x8e,0xae,0x2a,0xa3,0x49,0xc3,0x46,0x20,0x10,0x15,0x1e,0x21,0x0f,0x18,0x32,0x26,0xa2,0x8f,0x97,0x96,0x93,0x8d -,0x8e,0xa5,0x9c,0xe0,0x1f,0xd9,0x0b,0x0a,0x0c,0x0c,0x0c,0x00,0x09,0x07,0x08,0x05,0x04,0x09,0x0b,0x0b,0x08,0x14,0x0c,0x34,0xb2,0x4f,0xaa,0x9d,0x96,0x9a,0x8c,0x96 -,0x8f,0x88,0x90,0xa5,0x90,0x8d,0x90,0x8d,0x89,0x9a,0x97,0x89,0x9e,0xa5,0xa6,0x89,0x94,0xad,0xb4,0xae,0x8a,0x1c,0x19,0x48,0x95,0x92,0x1e,0x21,0x2e,0x9b,0xb0,0x9c -,0xcc,0xc1,0xa3,0xa2,0x1d,0x0b,0x18,0x4c,0x33,0x0c,0x18,0x0d,0xcc,0x10,0x0a,0x0c,0x2b,0x94,0x2c,0x30,0x9e,0x8a,0x95,0x9a,0x89,0x87,0x89,0x8a,0x8f,0x86,0x86,0xb6 -,0xbb,0x9d,0xb4,0x3d,0x10,0x1d,0x0f,0x0f,0x08,0x03,0x0f,0x08,0x09,0x05,0x09,0x09,0x08,0x0b,0x08,0x05,0x10,0x1d,0x0d,0x0d,0x10,0x2b,0x42,0x43,0x28,0x38,0x39,0x56 -,0xb9,0x9f,0x98,0x1f,0x92,0x91,0x97,0x98,0xac,0x8b,0x89,0x8c,0x8d,0x8d,0x85,0x87,0x8e,0x8e,0x8b,0x8b,0x97,0x93,0x92,0x90,0xab,0x98,0x99,0x9d,0x77,0xb5,0xcb,0x9f -,0xa9,0x28,0x2d,0x22,0x2c,0x14,0x17,0x11,0x14,0x0a,0x0c,0x0b,0x17,0x15,0x1e,0xb6,0xbf,0x2a,0xb2,0x8e,0x8a,0x8b,0x8f,0x97,0x89,0x8e,0xee,0x93,0x94,0xbd,0x1b,0x19 -,0x25,0x12,0x0b,0x07,0x0a,0x1d,0x0f,0x0f,0x19,0x0a,0x14,0x1d,0x1b,0x21,0x24,0xa6,0x49,0xdc,0x1d,0x2a,0x29,0x23,0x40,0x18,0x30,0x37,0x1c,0x16,0x1c,0x21,0x1f,0x11 -,0x35,0x0e,0x45,0x3e,0x1d,0xa6,0x25,0xaf,0x97,0xa9,0x9d,0x8b,0x86,0x8b,0x8f,0x88,0x8a,0x85,0x91,0xa9,0x8d,0x89,0x8e,0x8f,0x8e,0x94,0xa5,0xa6,0xaa,0x99,0x99,0x2e -,0x3c,0x31,0x25,0x1f,0x37,0x17,0x08,0x09,0x19,0x52,0x25,0x19,0x32,0x9d,0xa0,0x8c,0xad,0x9f,0x88,0x8d,0x8a,0x9e,0x98,0x9e,0x27,0x6c,0x17,0x16,0x0c,0x05,0x17,0x0b -,0x08,0x08,0x0e,0x06,0x0a,0x0d,0x07,0x29,0x3c,0x29,0x64,0x1e,0xce,0xa6,0xc9,0x4d,0x9b,0x8c,0xb6,0x9d,0xba,0x9f,0x8f,0x2e,0x44,0xb5,0x8d,0xa5,0x2d,0x9f,0xd4,0x95 -,0xa0,0xa0,0x96,0xb8,0x2c,0xa7,0xa5,0xae,0x30,0xe4,0x8f,0xf0,0xb1,0xc7,0x6e,0x9d,0x2b,0x1c,0xa6,0x9f,0xd4,0x2f,0x3b,0x4d,0xa2,0x4d,0x4a,0xbb,0x15,0xae,0x17,0x21 -,0x40,0x0e,0xae,0x20,0x99,0x9b,0x99,0x8f,0xbf,0x84,0x8d,0x8a,0x87,0x8e,0x88,0x9d,0x88,0x9d,0x9b,0x8d,0xc7,0xb0,0x0f,0x14,0x1c,0x06,0x09,0x05,0x0c,0x12,0x07,0x0d -,0x04,0x08,0x07,0x07,0x33,0x1c,0x11,0x09,0x12,0x25,0x10,0xc5,0x13,0x43,0xb7,0x16,0xee,0x1b,0x91,0xa3,0x4f,0xc9,0xa0,0x8b,0xa2,0xa3,0xaa,0xb2,0x8f,0x89,0x8b,0x8e -,0x93,0x99,0x9d,0x92,0x8c,0x96,0x9f,0x8a,0x91,0x91,0xaf,0xae,0x90,0x98,0x7c,0x26,0xd8,0x33,0x36,0x0b,0x15,0x2c,0x1a,0x14,0x1c,0x2a,0x0f,0x12,0x0a,0x0c,0x1b,0x14 -,0x13,0x25,0x32,0x5b,0x29,0x9e,0x92,0x96,0x8c,0x8e,0x86,0x83,0x88,0x8e,0x9c,0x98,0x92,0xad,0x45,0x47,0x2f,0x27,0x28,0x1c,0x21,0x2c,0x51,0x31,0x17,0x2d,0x4b,0x1d -,0x2b,0x23,0x3d,0x40,0x16,0x1e,0x40,0x27,0x1f,0x1c,0x18,0x30,0x10,0x0b,0x23,0xcb,0x14,0x0c,0x23,0x39,0x17,0x1c,0x18,0x1e,0xaf,0x3c,0xb6,0xb4,0x9e,0xa4,0x99,0x8b -,0x8e,0x8e,0x96,0x95,0x91,0xa6,0xa5,0x9e,0x98,0x8c,0xb8,0xa7,0x9d,0xac,0xb5,0xb4,0xaa,0xd1,0xb6,0x30,0x1e,0x14,0x0f,0x18,0x1c,0x1f,0x0f,0x11,0x2e,0xdf,0x9c,0xca -,0x95,0x8b,0x9b,0x95,0x8a,0x8a,0x90,0x90,0x8f,0x8f,0xa4,0x9f,0xa5,0x43,0xe4,0x3c,0x19,0x16,0x33,0x1e,0x0f,0x0a,0x06,0x09,0x0c,0x13,0x0e,0x09,0x10,0x0c,0x15,0x18 -,0x1a,0x40,0x29,0x26,0x1d,0x2c,0x26,0x3d,0xa6,0x9e,0xa2,0xad,0xb3,0xbc,0x9e,0x8f,0x95,0x96,0x91,0x94,0x9d,0x5f,0x29,0x3d,0xa9,0x9f,0x46,0x1b,0x23,0x1b,0x30,0xc4 -,0x9f,0xa9,0xae,0xa7,0xb7,0xe4,0x28,0xba,0x8d,0x92,0x9a,0xd4,0x3c,0xca,0x1b,0x43,0xbe,0xab,0x1d,0x1a,0x24,0x0e,0x08,0x09,0x3a,0xa3,0xaf,0x31,0x5b,0x98,0x9e,0x8d -,0x84,0x84,0x80,0x84,0x83,0x8c,0x99,0xa6,0xa1,0x91,0xa1,0x6f,0x0f,0x07,0x07,0x0b,0x1f,0x0c,0x1c,0x17,0x11,0x0c,0x01,0x05,0x08,0x1b,0x0f,0x0e,0x0b,0x05,0x0e,0x1c -,0x2d,0x48,0xb2,0xa5,0xb7,0x31,0x21,0xcc,0x9f,0x97,0x92,0x57,0xba,0xc1,0xae,0x91,0x94,0x8c,0x91,0x8f,0x9e,0x14,0x1a,0x2e,0xa2,0x9e,0x64,0x37,0x1f,0x1e,0xad,0x8c -,0x8d,0x8d,0x95,0x8a,0x99,0x23,0x1f,0x39,0x9d,0xa9,0x2d,0x11,0x0f,0x0d,0x22,0xe5,0x36,0x4d,0xae,0xa1,0x2f,0x28,0x3a,0x9e,0x8d,0x8b,0x8a,0x8d,0x91,0x8d,0x81,0x82 -,0x80,0x87,0x86,0x8b,0x2f,0x10,0x0b,0x1f,0x13,0x07,0x04,0x03,0x02,0x06,0x15,0x0f,0x17,0x0f,0x12,0x12,0x07,0x03,0x05,0x0f,0x0b,0x0a,0x08,0x0f,0x0d,0x33,0x8f,0x98 -,0x94,0x9a,0x8e,0x90,0x9a,0xb4,0xb2,0x97,0xa7,0xe8,0x30,0x50,0x27,0x9f,0x91,0x92,0x97,0xca,0x99,0xaa,0xbd,0x3a,0xcd,0xa4,0xaf,0x4f,0x32,0x3a,0x2e,0x8d,0x8c,0x95 -,0xa4,0x9a,0x95,0xcc,0x6e,0x2a,0xc6,0x47,0x30,0x17,0x15,0x1c,0x14,0x9d,0x92,0x97,0xaf,0xab,0x95,0x9f,0x9d,0x9a,0x91,0x8c,0x8b,0x9c,0x92,0x9f,0x9e,0x85,0x89,0x8e -,0xb4,0x3a,0x22,0x0e,0x0d,0x09,0x06,0x06,0x07,0x04,0x01,0x00,0x04,0x15,0x19,0x0c,0x0b,0x0f,0x15,0x1a,0x13,0x18,0x1d,0x18,0x17,0x2d,0x1d,0x10,0xbf,0x8f,0x8e,0x98 -,0x9f,0x9a,0x94,0x94,0xb3,0xb5,0x9c,0x9c,0xa5,0xc6,0x3f,0x17,0xae,0x89,0x8a,0x98,0xa2,0x8f,0x95,0x99,0x94,0x97,0x93,0x92,0x97,0x96,0xb0,0x2f,0x9c,0x85,0x9c,0x31 -,0x56,0x9f,0xb5,0x18,0x14,0x19,0x1c,0x0c,0x0d,0x12,0x0d,0x10,0xcd,0x89,0x93,0xaa,0x8e,0x85,0x88,0x8a,0x89,0x86,0x86,0x8d,0x90,0x95,0xaf,0x2c,0xee,0xa3,0xdc,0x11 -,0x11,0x1e,0x09,0x04,0x19,0x19,0x00,0x06,0xe1,0x0d,0x19,0x0c,0x14,0xec,0x09,0x06,0x12,0xa1,0x06,0x05,0x03,0x00,0x08,0x00,0x03,0x00,0x01,0x00,0x11,0xaa,0x13,0x0a -,0x0d,0x26,0x1c,0x0e,0xc0,0x98,0x8f,0xa4,0x94,0x8a,0x81,0x81,0x8a,0x82,0x80,0x81,0x80,0x81,0x80,0x84,0x88,0x85,0x80,0x84,0x87,0x81,0x8e,0x96,0x92,0x83,0x85,0x8d -,0x99,0x90,0x85,0x9d,0xa7,0x3f,0xa3,0x29,0x21,0x1c,0x05,0x08,0x01,0x28,0x52,0x0b,0x05,0x05,0x06,0x06,0x04,0x03,0x03,0x0a,0x03,0x00,0x00,0x01,0x00,0x06,0x0f,0x03 -,0x03,0x01,0x13,0x0c,0x02,0x05,0x09,0x0e,0x05,0x08,0x0e,0x15,0x0f,0x0c,0x8d,0x97,0x9f,0xab,0xaf,0x8b,0xe2,0x96,0x8c,0x81,0x83,0x86,0x83,0x82,0x80,0x84,0x82,0x80 -,0x80,0x82,0x84,0x80,0x84,0x88,0x81,0x81,0x80,0x83,0x83,0x85,0x83,0x8d,0x98,0x81,0x83,0x87,0x87,0x89,0x83,0x8d,0x93,0x8f,0x82,0x83,0x93,0x8a,0x95,0xaf,0x1d,0x32 -,0x98,0x42,0x57,0x0f,0xb3,0x45,0x08,0x0b,0x02,0x1d,0x07,0x02,0x03,0x00,0x02,0x00,0x0a,0x09,0x00,0x02,0x00,0x11,0x0b,0x00,0x04,0x00,0x0c,0x05,0x06,0x03,0x03,0x04 -,0x00,0x18,0x09,0x0b,0x09,0x05,0x0e,0x05,0x01,0x06,0x08,0x11,0x0e,0x10,0x0d,0x0c,0x04,0x09,0x96,0xa4,0x9b,0x34,0xad,0x8d,0xe6,0x9f,0x60,0x8c,0x88,0x8d,0x87,0x92 -,0x86,0x94,0x8d,0x80,0x84,0x84,0x8c,0x86,0x84,0x8d,0x8b,0x8b,0x80,0x82,0x86,0x80,0x84,0x80,0x8c,0x8c,0x80,0x82,0x83,0x87,0x86,0x80,0x87,0x85,0x8b,0x81,0x88,0xa0 -,0x9b,0x41,0x99,0x1a,0x2f,0x8e,0x95,0x9b,0x14,0xaf,0x3e,0x19,0x5a,0x1e,0xb0,0x49,0x0f,0x2a,0x27,0xbc,0x10,0x26,0x86,0x93,0x99,0x1b,0x9c,0x90,0x2d,0xb5,0x28,0x8e -,0x8a,0xb5,0x98,0x8a,0x85,0x9f,0xa0,0x84,0x87,0x8b,0x9a,0x93,0x89,0x1e,0x68,0x2c,0xba,0xa4,0x07,0x1a,0x0d,0x0e,0x06,0x00,0x16,0x09,0x01,0x00,0x05,0x09,0x00,0x01 -,0x00,0x09,0x08,0x02,0x00,0x05,0x08,0x02,0x00,0x0e,0x14,0x02,0x03,0x00,0x0c,0x02,0x01,0x03,0x08,0x0c,0x02,0x02,0x02,0x04,0x02,0x00,0x19,0x0b,0x0c,0x05,0x07,0x60 -,0x07,0x03,0x0e,0xf3,0x99,0x25,0x3e,0x93,0x8f,0x8f,0x64,0x88,0x80,0x83,0x8a,0x8b,0x80,0x8a,0x89,0x86,0x88,0x80,0x8d,0x81,0x82,0x83,0x80,0x95,0x84,0x80,0x83,0x8b -,0x87,0x80,0x85,0x91,0x84,0x80,0x81,0x83,0x88,0x80,0x85,0x88,0xa7,0x89,0x80,0x84,0x8f,0x9d,0x80,0x9a,0x41,0x9c,0x8e,0x80,0x8d,0x8a,0x84,0x93,0xc4,0x28,0x8b,0x80 -,0x90,0xa2,0x97,0x80,0x9f,0x05,0x14,0x96,0xbe,0x12,0x0b,0x4f,0x08,0x00,0x00,0x06,0x26,0x00,0x01,0x00,0x13,0x08,0x00,0x00,0x02,0x04,0x00,0x01,0x06,0x04,0x00,0x02 -,0x00,0x26,0x09,0x00,0x05,0x0d,0x13,0x00,0x0a,0x0d,0x18,0x09,0x04,0xb9,0x2c,0x03,0x06,0x24,0x80,0x8c,0x25,0xa6,0x8f,0x80,0x18,0x31,0x82,0x82,0x87,0x97,0x82,0x84 -,0x25,0x12,0x28,0x85,0x82,0x9d,0x8f,0x95,0x85,0x13,0x0b,0x8c,0x91,0x98,0x94,0x88,0x81,0x4f,0x07,0x49,0x8f,0x80,0x9c,0x9b,0x88,0x97,0x50,0x03,0xc8,0x99,0x41,0xb7 -,0xab,0x92,0x1f,0x00,0x04,0x0f,0x8c,0x28,0x0b,0x1c,0x16,0x1f,0x04,0x09,0x1c,0x0d,0x18,0xb2,0xa7,0x6b,0x03,0x0c,0x0f,0x88,0x98,0x24,0xa2,0x51,0x94,0x0c,0x1c,0xa2 -,0xae,0xc2,0x46,0xa4,0x42,0x06,0x06,0x04,0x9b,0x84,0x16,0x29,0x16,0xc3,0x1b,0x05,0x54,0xbe,0x8f,0x92,0x8a,0x90,0x2b,0x1f,0x1a,0x8f,0x82,0x91,0x8f,0x9a,0x8d,0xa8 -,0x12,0x9e,0x8d,0x87,0x85,0x83,0x82,0x8b,0x4d,0x39,0x9b,0x80,0x82,0x85,0x86,0x86,0x83,0x1d,0x30,0xbd,0x93,0x94,0x8f,0x91,0xd6,0x10,0x01,0x04,0xbf,0xfe,0x04,0x09 -,0x05,0x0d,0x00,0x06,0x07,0x09,0x0e,0x05,0x0f,0x0e,0x00,0x03,0x00,0x4e,0x8e,0x0a,0x0d,0x10,0x62,0x0d,0x03,0x1d,0x9a,0x94,0x93,0x9d,0x91,0x56,0x0e,0x17,0xa0,0x80 -,0x91,0x87,0x94,0x8a,0x9a,0x10,0x9d,0x8b,0x80,0x88,0x84,0x87,0xbc,0x0e,0x0d,0x31,0x83,0x8d,0xa9,0xa3,0xcd,0x9a,0x01,0x09,0x29,0xbc,0x96,0x1f,0x9e,0x9a,0x11,0x14 -,0x01,0x9f,0x8b,0x49,0xa4,0xc3,0x97,0x1a,0x03,0x24,0x9f,0xa0,0xaf,0x14,0x44,0x05,0x04,0x00,0x15,0x8e,0x09,0x16,0x07,0x1a,0x11,0x00,0x0f,0xaf,0x8c,0xf1,0x15,0xb6 -,0x58,0x0e,0x1d,0x27,0x80,0x90,0xa5,0x9e,0xa7,0x8b,0x08,0x2d,0x8c,0x85,0x85,0x48,0xbf,0x22,0x0a,0x0f,0x0e,0x85,0x90,0x9f,0x9a,0x9c,0x9c,0x06,0x08,0x9f,0x88,0x87 -,0xaa,0x51,0x91,0x11,0x15,0x09,0x96,0x85,0xdd,0xa8,0x4a,0x8d,0x24,0x07,0x76,0x8b,0x84,0x8f,0x7c,0xae,0xb3,0xd7,0xb0,0x95,0x80,0x8d,0x8a,0x8e,0x89,0x9a,0x0c,0xa1 -,0x88,0x84,0x8d,0x1b,0xcc,0x16,0x05,0x05,0x06,0x8c,0x1e,0x04,0x07,0x0c,0x0c,0x00,0x05,0x0e,0x9d,0xbd,0x04,0x02,0x08,0x00,0x09,0x00,0x9b,0x9c,0x16,0x1b,0x0a,0x23 -,0x00,0x09,0xa9,0x8c,0x89,0xae,0x30,0x9e,0x29,0x40,0xc3,0x88,0x80,0x95,0x8d,0x8e,0x81,0x99,0x38,0x8d,0x80,0x80,0x8d,0x40,0xac,0x42,0xae,0xb8,0x99,0x80,0x95,0x8d -,0xb7,0xac,0x30,0x0a,0x38,0x96,0x8a,0x9d,0x12,0x17,0x10,0x0a,0x12,0x1f,0x81,0x96,0x9b,0x2b,0x3f,0xab,0x02,0x15,0xbc,0x8b,0x92,0x0e,0x06,0x0a,0x0b,0x0f,0x05,0xa1 -,0xc6,0x15,0x10,0x04,0x0e,0x00,0x06,0x19,0xba,0x99,0x16,0x0b,0x1a,0x17,0x31,0x13,0x88,0x8a,0xa3,0xac,0x18,0x92,0x1c,0x16,0x96,0x87,0x82,0x9a,0x0e,0x1c,0x1c,0xb5 -,0x28,0x9b,0x83,0xa7,0x9d,0x0d,0x24,0x1b,0x09,0x97,0x85,0x84,0x8d,0x2a,0x2e,0x19,0x34,0x1b,0x99,0x81,0x8e,0x8c,0x25,0xa9,0x26,0x05,0x1d,0x96,0x85,0x8d,0x15,0x18 -,0x1f,0xb7,0xa9,0x56,0x80,0x89,0x80,0x93,0xa4,0x97,0x1b,0x98,0x89,0x85,0x82,0xb0,0x2e,0x23,0x1e,0x23,0x17,0x90,0x3f,0x1a,0x08,0x00,0x07,0x00,0x03,0x0a,0x27,0x22 -,0x05,0x00,0x02,0x03,0x0e,0x04,0x9c,0xb4,0x3c,0x1d,0x03,0x18,0x03,0x0f,0xb9,0x8b,0x80,0x96,0x20,0x25,0x13,0xa7,0x2b,0x8b,0x80,0x8b,0x87,0x26,0x9a,0x4f,0x1d,0x94 -,0x87,0x80,0x84,0xb6,0xae,0x32,0x9f,0xa0,0x8e,0x80,0x8b,0x89,0x34,0x9e,0xae,0x26,0xa8,0x89,0x81,0x8d,0x0f,0x0d,0x0b,0x1e,0x20,0x1f,0x86,0x39,0xb2,0x0d,0x16,0xbd -,0x18,0xac,0x99,0x8b,0x94,0x08,0x07,0x06,0x0a,0x24,0x1a,0x86,0xaa,0x2c,0x0e,0x00,0x09,0x00,0x09,0x28,0xa6,0x8e,0x0e,0x02,0x06,0x03,0x13,0x08,0x89,0x88,0x89,0x9d -,0x11,0xba,0x14,0x26,0x96,0x8a,0x82,0x9c,0x2a,0x4b,0x1a,0xa2,0x27,0x8c,0x85,0x99,0x94,0x09,0x47,0x13,0x0e,0xb5,0xb6,0x89,0xb6,0x0e,0xb8,0x18,0xac,0x2a,0xb4,0x82 -,0xa2,0x9e,0x0f,0x2a,0xa9,0xad,0x8c,0x8a,0x86,0x89,0x1d,0xb4,0x49,0x9c,0x91,0x91,0x80,0x8e,0x87,0x1a,0x28,0xac,0x26,0x96,0x8a,0x84,0x83,0x2f,0x1a,0x10,0x0c,0x18 -,0x07,0x8c,0x98,0xdf,0x15,0x00,0x0c,0x00,0x0b,0x16,0x21,0x37,0x06,0x01,0x04,0x00,0x07,0x00,0xb9,0x9d,0x18,0x17,0x00,0x0d,0x05,0x0f,0xc2,0x9f,0x8a,0x32,0x0f,0x2b -,0x1e,0x9f,0xbb,0x8e,0x82,0x8d,0x8c,0x28,0xa2,0xbb,0x9f,0x84,0x87,0x81,0x90,0x2c,0xa4,0x36,0xad,0x9f,0xa1,0x80,0x8e,0x8d,0x15,0x0e,0x3f,0x35,0x89,0x88,0x83,0x8a -,0xa9,0xae,0x39,0x25,0x3d,0x47,0x88,0x92,0xae,0x1a,0x09,0x17,0x0b,0xce,0xa2,0xa7,0x97,0x0f,0x0e,0x10,0x05,0x19,0x08,0x9e,0x8f,0x25,0x1a,0x00,0x07,0x06,0x0c,0x21 -,0xee,0x5e,0x62,0x0e,0x13,0x03,0x0a,0x0e,0x1b,0x8b,0x5a,0xa8,0x0c,0x1c,0x1b,0x1b,0x99,0xac,0x8d,0xa6,0x2c,0x35,0x1e,0xcb,0xac,0xa4,0x83,0x8e,0x95,0x27,0x0e,0x5b -,0x27,0x95,0x95,0x8b,0x8a,0xd8,0x9e,0x31,0x6b,0xa4,0x3a,0x87,0x89,0x92,0xac,0x0f,0xbe,0xbc,0xaa,0x97,0x8e,0x88,0x99,0x33,0xf4,0x1d,0xa3,0xb8,0x8d,0x81,0x97,0x96 -,0x06,0x23,0x12,0xe6,0x97,0x8f,0x82,0xa5,0x2f,0x1d,0x0b,0x1d,0x14,0x18,0x82,0xb9,0xdc,0x0b,0x08,0x25,0x0f,0x26,0x21,0x2e,0x50,0x0d,0x14,0x06,0x0a,0x15,0x11,0x8a -,0xa7,0x38,0x0e,0x07,0x0d,0x12,0x1b,0x3d,0x94,0x92,0x9d,0xa3,0xbc,0x29,0xaa,0x1c,0x8a,0x8c,0x9c,0xa2,0x0d,0x9b,0xc5,0x9c,0x4f,0xaa,0x99,0x36,0x38,0x11,0x0f,0x46 -,0x22,0x9e,0x86,0x2d,0xfd,0x02,0x0f,0x21,0xf0,0x92,0x8e,0x81,0x91,0xa2,0x29,0x0e,0x64,0x1f,0xa8,0x80,0x91,0x97,0x18,0x1e,0x9f,0x98,0xa5,0x8e,0x8f,0x8f,0x4b,0x1c -,0x14,0x14,0x3d,0x15,0x82,0x96,0xa0,0x27,0x09,0xbb,0x1e,0x2d,0x2e,0xa2,0x9c,0x41,0x29,0x11,0x0f,0x19,0x0a,0x8f,0x8b,0x5d,0xa2,0x09,0x7e,0x26,0x0e,0x24,0x30,0xca -,0x1c,0x10,0x11,0x0d,0x1f,0x0d,0xfd,0x89,0x1e,0x42,0x06,0x0b,0x19,0x0e,0x36,0xc5,0x9d,0x9f,0xc4,0x21,0x18,0x2d,0x1e,0xc1,0x83,0xa6,0x9d,0x25,0x16,0x9f,0x3d,0x95 -,0x8e,0x8d,0x8f,0x7a,0x2c,0x0f,0x2b,0x52,0x21,0x81,0x96,0x97,0xb5,0x09,0x9e,0x28,0xbd,0x8e,0x8f,0x84,0x8d,0xb6,0x5a,0x24,0xb3,0x4b,0x8f,0x83,0x8c,0x82,0x28,0xa2 -,0xcf,0x1b,0xb7,0xae,0xa0,0xb5,0x17,0x0c,0x0d,0x0e,0x0d,0x21,0x93,0x2b,0xc1,0x04,0x0b,0x18,0x07,0x2e,0x28,0xa4,0x9e,0x2c,0x1d,0x16,0x2d,0x1e,0x21,0x89,0xb9,0x9e -,0x1e,0x0c,0x2e,0x0f,0x25,0x3a,0x63,0xa5,0x46,0x0f,0x0f,0x0e,0x21,0x16,0x97,0xa3,0x3e,0x3f,0x04,0xb7,0x21,0xa8,0x8b,0x8b,0x83,0x8b,0xa1,0x2d,0x60,0xc9,0xa8,0x90 -,0x82,0x8c,0x85,0xc2,0x9d,0x97,0x40,0x90,0xa2,0x8f,0x8e,0x3d,0x24,0x0f,0x1a,0x1b,0x33,0x85,0x96,0x8e,0x15,0x0f,0x1b,0x0c,0x24,0x3a,0x9c,0x8f,0xc7,0x18,0x17,0x1a -,0x55,0x1c,0x88,0x9d,0x94,0x3b,0x09,0x33,0x08,0x1f,0x21,0xc9,0x9a,0xba,0x18,0x15,0x0d,0x0e,0x0a,0xbf,0x99,0x28,0x27,0x03,0x18,0x0b,0x15,0xcf,0x9f,0x86,0x99,0x63 -,0x25,0x1a,0x27,0x17,0xae,0x89,0xa2,0x93,0x1c,0xaa,0xaf,0x41,0x9f,0x9c,0x92,0x95,0x29,0x21,0x18,0x19,0x28,0x19,0x84,0xce,0x8e,0x21,0x32,0xae,0x19,0x9e,0xa5,0x87 -,0x8b,0xa0,0xd3,0xc9,0xd2,0x9f,0xc9,0x81,0x8d,0x8d,0xa1,0x1e,0x9a,0x11,0x49,0xbc,0xc6,0x95,0x19,0x14,0x0b,0x0c,0x1d,0x0a,0x99,0xa4,0xb7,0x1f,0x09,0x1c,0x08,0x1c -,0x2b,0x9a,0x8a,0xa2,0xce,0x4a,0x1a,0x45,0x0b,0x9b,0x8e,0xb5,0x9a,0x07,0x48,0x0f,0x1a,0x3d,0x4c,0x8f,0xb3,0x23,0x19,0x0a,0x13,0x08,0x2b,0x96,0xd9,0xd2,0x0e,0x35 -,0x2c,0x2c,0xce,0xa2,0x8a,0x92,0xac,0x9d,0x20,0xac,0x23,0x97,0x82,0x9c,0x89,0x1f,0x9d,0xa7,0xaf,0x98,0xb0,0x8e,0x9f,0x1c,0x25,0x0f,0x1d,0x2c,0x42,0x81,0x9b,0x95 -,0x22,0x20,0xba,0x17,0xb8,0x37,0x93,0x93,0xb8,0xc0,0x1a,0x1f,0x39,0x43,0x84,0x9a,0x91,0x33,0x1d,0x62,0x0e,0x5b,0x19,0x9b,0x91,0x7a,0x26,0x0e,0x07,0x16,0x05,0x94 -,0xc2,0x2e,0x33,0x05,0x45,0x04,0x19,0x18,0xc8,0x8e,0x9c,0xb9,0x58,0x1f,0xbd,0x20,0x97,0x8b,0xa4,0x9a,0x10,0x9c,0x32,0xaf,0xa8,0xcc,0x89,0x9f,0x3d,0x1c,0x0b,0x1f -,0x0e,0x45,0x8d,0x53,0x9d,0x0e,0x42,0x25,0x1b,0xb4,0x2f,0x8f,0x93,0xcf,0xc1,0x16,0x29,0x5e,0x4c,0x80,0x94,0x8b,0x2d,0x2f,0xad,0x29,0xa5,0x2d,0x9a,0x9a,0xf5,0x1c -,0x0f,0x0a,0x14,0x09,0x96,0x9c,0x9f,0x75,0x0c,0x3d,0x0c,0x28,0x14,0x32,0x92,0x99,0x9b,0xbd,0x1e,0xb4,0x1e,0x97,0x8b,0x95,0x96,0x11,0x6f,0x1e,0x3a,0x2d,0x3c,0x94 -,0xa2,0x5f,0x32,0x0c,0x21,0x0c,0x1f,0x8e,0x28,0xa2,0x0a,0x1a,0x23,0x28,0xa7,0x2e,0x94,0x98,0xa0,0xd9,0x2d,0x4a,0x41,0x20,0x87,0x96,0x8e,0x4f,0x21,0x9e,0x27,0x97 -,0xee,0x8c,0x95,0xbb,0x38,0x0c,0x0d,0x0e,0x07,0x96,0xaa,0x95,0xa9,0x12,0x4b,0x15,0xcf,0x25,0xcf,0x9b,0xa5,0x3e,0x3f,0x28,0xac,0x15,0x8d,0x88,0x90,0x8c,0x25,0x9a -,0x44,0xd0,0xda,0xbc,0xa2,0xa3,0xad,0x27,0x1e,0x23,0x15,0x43,0x98,0xb1,0x98,0x10,0x16,0x1f,0x0f,0x3b,0x1e,0x9e,0x9c,0xbf,0x35,0x5f,0xbb,0x36,0x54,0x89,0x9f,0x98 -,0x1d,0x1b,0x35,0x13,0xc5,0x33,0x9f,0x9b,0xa7,0x20,0x1a,0x15,0x1f,0x0a,0xa9,0xcd,0xa1,0x2f,0x09,0xae,0x15,0x51,0x5f,0xa2,0x8c,0x98,0xc4,0xbe,0x32,0x3c,0x1e,0x93 -,0x8e,0x96,0x9e,0x15,0xa2,0x33,0xbb,0x9e,0xd4,0x98,0xa3,0x1f,0x24,0x12,0x16,0x0b,0x25,0x9f,0xad,0xa6,0x0b,0xa7,0x3b,0xe0,0xbe,0x2f,0x9b,0xad,0x4d,0x2d,0x25,0x1d -,0x2d,0xb9,0x88,0x9a,0x8b,0x1c,0xc3,0xce,0x21,0x96,0x17,0xa3,0xb7,0x28,0x26,0x15,0x16,0x14,0x13,0x9e,0x9b,0x96,0x22,0x17,0x3f,0x13,0xd2,0x21,0x34,0xa9,0x27,0xba -,0xae,0x51,0xaf,0x28,0x93,0x8f,0x87,0xb5,0x1b,0x3c,0x13,0x94,0x32,0xb1,0x9a,0x3b,0x2f,0x3d,0x20,0x44,0x18,0x2c,0x91,0xad,0xa4,0x0b,0x2f,0x12,0x5e,0xc3,0x29,0x8c -,0x6c,0xa0,0xa5,0xed,0xa5,0xc5,0x2e,0x8c,0x96,0x96,0x3b,0x26,0x61,0xb2,0xad,0x27,0x97,0xaf,0x36,0x47,0x17,0x25,0x12,0x06,0xa0,0x4e,0x9e,0x26,0x20,0xca,0xc6,0xa2 -,0x21,0x9a,0xd8,0x45,0x3f,0x1d,0x42,0xc3,0x14,0x8f,0x8e,0x91,0x98,0x15,0xb2,0x31,0xa3,0x1f,0xd0,0xac,0x16,0x3a,0x0c,0x1a,0x17,0x03,0xbf,0x9e,0xaf,0xae,0x11,0x27 -,0x39,0xab,0x48,0xac,0x9d,0xcf,0x98,0x5f,0xb2,0x95,0x13,0x91,0x87,0x91,0x8a,0x10,0x4a,0x1a,0x54,0x1f,0x2e,0x9f,0x2f,0x9e,0x25,0x28,0xbe,0x09,0x27,0x8f,0x34,0x92 -,0x1b,0x29,0xcb,0x2f,0xac,0xe7,0x96,0xc0,0xa3,0x6e,0x23,0x99,0x11,0x38,0x8b,0xae,0x94,0x0f,0x17,0x1b,0x21,0xef,0x35,0x9d,0x50,0x40,0x29,0x0e,0x2c,0x0d,0x0b,0x8e -,0x3f,0x8c,0x2f,0x1c,0xa3,0x61,0x8e,0xab,0x91,0x9d,0xa7,0xb9,0x1a,0xb1,0x1c,0x11,0x8a,0xab,0x98,0x29,0x0c,0x2f,0x1a,0x58,0x4c,0xc6,0xae,0xbc,0xcd,0x27,0x74,0x2a -,0x0a,0x8f,0xa7,0x98,0xbf,0x16,0xad,0x3f,0xaa,0xb8,0x9e,0xa9,0x69,0xd1,0x1f,0x43,0x2f,0x0e,0x8f,0x9b,0x93,0xaf,0x18,0xcc,0x21,0x4e,0xe4,0xc2,0x9c,0xbf,0xb3,0x1d -,0x2f,0x44,0x0a,0x93,0xab,0x97,0xa9,0x1e,0xd0,0x22,0xd8,0x38,0xe7,0xbe,0x2d,0x2a,0x16,0x1e,0x38,0x13,0x98,0x8f,0x93,0x90,0x3e,0xae,0x2d,0x4f,0xcd,0xdc,0xb0,0x4f -,0xc3,0x1e,0x2b,0x38,0x0a,0x73,0xb6,0xcb,0xa0,0x1d,0x43,0x24,0x31,0x24,0x3a,0x4e,0x39,0xae,0xc1,0x32,0xba,0x1d,0x9b,0x8a,0xa0,0x8e,0x34,0xab,0x2f,0x3d,0x2b,0x31 -,0xaa,0xc1,0x9e,0x46,0x27,0x42,0x10,0x2e,0x9b,0x44,0xae,0x1e,0x26,0x2e,0xcf,0x66,0xb1,0xa8,0xa6,0x9e,0x56,0x2c,0x4a,0x16,0x48,0x8d,0xbb,0x96,0x46,0xb0,0x1f,0x38 -,0x49,0x35,0xa2,0x35,0x98,0x50,0x18,0x24,0x0e,0x0d,0xa4,0x2e,0xa2,0x2c,0x2f,0xe3,0x3b,0x9c,0xa7,0x98,0xd0,0x99,0x9b,0x46,0x34,0x15,0x1c,0x97,0xae,0x9a,0x5c,0x32 -,0x74,0x65,0x54,0x24,0xb4,0x1e,0xa1,0xae,0x1e,0xdf,0x1f,0x0d,0xac,0xba,0xaf,0xda,0x19,0xc9,0x75,0xc7,0x1c,0xad,0xcb,0x9d,0x96,0x24,0x61,0x18,0x1b,0x98,0x97,0x9f -,0x9d,0xae,0xd3,0xdf,0x2a,0x1b,0xc0,0x51,0xb0,0xa1,0x29,0x2c,0x3c,0x0f,0xc9,0xa6,0xc4,0xa2,0x30,0xb9,0x44,0xbf,0xdf,0x9e,0xbb,0xba,0x96,0x26,0x2b,0x14,0x18,0x28 -,0xad,0x33,0x9c,0xdf,0x31,0xad,0x2c,0x9a,0xbd,0x9c,0xd2,0x94,0x42,0x29,0x46,0x12,0x1f,0x30,0x59,0xb5,0xb7,0x16,0xc9,0x2e,0x45,0xb0,0x46,0x9b,0x92,0xa0,0xb1,0x67 -,0x15,0x1a,0xba,0x2b,0xaa,0x9a,0xb5,0xd9,0x28,0x24,0x24,0x60,0x2c,0xaf,0x9d,0x9e,0x9c,0x50,0x1a,0x1c,0x1e,0xb8,0x96,0x46,0xc6,0x1c,0x50,0x9e,0xad,0xb4,0xb2,0x9b -,0x2c,0x1f,0x0f,0x1e,0x17,0x0b,0x2b,0x87,0x85,0x3c,0x19,0x38,0x9e,0x5e,0x17,0x2a,0x43,0x9b,0x8d,0xb1,0x19,0x13,0x19,0x29,0x94,0x97,0xc6,0x1e,0xa8,0x8c,0x99,0x9d -,0x45,0xaa,0x2a,0xbe,0xa9,0x1c,0x11,0x06,0x32,0x93,0x9b,0x1d,0x0d,0x14,0xc7,0x3a,0x15,0x0f,0x25,0x94,0x8a,0x88,0xa3,0xe8,0xf9,0x6d,0xa3,0x93,0xad,0x20,0x0d,0x23 -,0xa5,0x96,0x99,0x7e,0xb1,0x98,0xa0,0x15,0x11,0x13,0x1a,0x9f,0x8e,0xb8,0x23,0x78,0x9e,0xb4,0xaa,0xb3,0x25,0x0b,0x0e,0x6d,0x36,0x30,0x1d,0x16,0xcf,0x8d,0x8c,0x9f -,0x1a,0x9f,0x85,0x8b,0xa2,0x34,0xc0,0xa8,0x98,0x24,0x06,0x04,0x06,0x1c,0x98,0x8e,0x95,0xcb,0xac,0xbe,0x2a,0x45,0x1e,0x0c,0x10,0xe9,0xa4,0x2b,0x1b,0x1c,0x2e,0x95 -,0x93,0xda,0x0f,0x0d,0xae,0x8b,0x88,0x99,0x99,0x8f,0x8f,0x8f,0x3d,0x18,0x0b,0x1d,0xb5,0x9c,0x4f,0x16,0x14,0x1c,0x1f,0x19,0x29,0x1d,0x12,0x31,0x92,0x9f,0xd0,0xc5 -,0xa1,0x92,0x91,0xa5,0x1d,0x28,0x95,0x8f,0x8e,0x93,0x98,0xb6,0x4a,0x3f,0x2e,0x1a,0x08,0x04,0x12,0xad,0xae,0xaf,0xaa,0xb7,0x30,0x28,0x4b,0x29,0x1a,0x1c,0xb6,0x9b -,0xd5,0x1a,0x18,0xb2,0x99,0x93,0xa0,0xaf,0x62,0x9b,0x90,0x96,0x91,0xac,0x39,0x1e,0x2b,0x7d,0xbf,0x38,0x2e,0x2e,0x3b,0x16,0x0a,0x11,0x1d,0x22,0x1f,0x3b,0x48,0x5f -,0x98,0x8d,0x97,0xde,0x28,0x32,0xa0,0x9b,0x9c,0x92,0x8f,0x9e,0x37,0x21,0x1f,0x3b,0x30,0x3a,0xeb,0x5e,0x2f,0x17,0x0e,0x41,0x9c,0xad,0x1c,0x13,0x2d,0xab,0xae,0xbc -,0x9a,0xa2,0x43,0x2e,0x45,0x32,0x21,0x19,0x3d,0xa2,0x9d,0xa2,0x97,0x8f,0x95,0x93,0x9a,0xa5,0x2f,0x1b,0x27,0x1c,0x26,0x27,0x13,0x0e,0x2a,0xa1,0xc3,0x24,0x29,0x5d -,0x2f,0x37,0xe8,0xae,0xb1,0xb5,0xa6,0x9b,0xbf,0x1c,0x1a,0x71,0xac,0xa3,0x9f,0xb9,0xda,0x44,0xaf,0x9f,0xaf,0x3f,0xee,0xaf,0xa3,0x4d,0x2b,0x26,0xc0,0xa1,0xaf,0x2e -,0x1c,0x1f,0x1a,0x17,0x1b,0xcb,0xab,0x45,0xbf,0xad,0xae,0xc4,0x1f,0x3e,0xa3,0xa1,0xa6,0xa9,0xad,0x96,0x90,0x8e,0xb3,0xc2,0x47,0x21,0x2d,0x11,0x14,0x16,0x1c,0x2a -,0x43,0x2f,0x41,0x42,0xab,0x65,0x27,0x28,0x28,0xba,0x74,0xab,0xab,0x5b,0x20,0x14,0x28,0x9f,0x92,0x91,0x9a,0x9b,0x9c,0x9f,0x96,0xa4,0xb5,0xba,0x46,0x22,0x1d,0x1b -,0x1f,0x42,0xaa,0xc2,0x29,0x13,0x0c,0x14,0x17,0x34,0x42,0xa4,0xcc,0x6a,0xa2,0xa0,0x9f,0xc0,0xcb,0x9b,0x94,0xab,0x75,0xb4,0x96,0xbe,0x2e,0x2a,0x26,0x2e,0x40,0x35 -,0x47,0x20,0x1d,0x33,0xe1,0xa6,0xa6,0xad,0x47,0x25,0x2b,0x3b,0x4c,0xcf,0xe8,0xae,0xbe,0x49,0x25,0x17,0x1b,0xc8,0x99,0x9b,0x9d,0x94,0x99,0x95,0xac,0xc0,0xb3,0xab -,0xc4,0x2d,0x26,0x18,0x19,0x1c,0x2f,0x38,0xb2,0x54,0x3a,0xd9,0xb0,0xcc,0xb8,0xce,0xd5,0xae,0xa7,0xe4,0x2b,0x25,0x1e,0x5c,0xae,0x9c,0x69,0x46,0xdb,0xdd,0xb2,0x3b -,0x51,0xba,0xb1,0xa4,0xab,0xaa,0x3e,0x28,0x2e,0xda,0x9f,0xa5,0x3f,0x28,0x3b,0x2a,0x1c,0x17,0x15,0x28,0xc1,0xb9,0xed,0x37,0x26,0x37,0xbb,0xa4,0x99,0x9d,0x9c,0xb5 -,0xb2,0xa6,0xaf,0x9c,0x9e,0xa9,0xa7,0x3b,0x1c,0x0b,0x0b,0x1c,0xd8,0xb1,0x32,0x3b,0x3e,0xc0,0xa6,0xd8,0x2e,0x2e,0x2b,0x4e,0x44,0x4e,0x27,0x1b,0x1e,0x40,0xa9,0xa0 -,0x4f,0xba,0x98,0x90,0x8d,0x9a,0xa8,0xad,0x9a,0xab,0x5d,0x25,0x17,0x18,0x39,0xaf,0xaf,0x60,0x29,0x1e,0x1a,0x14,0x12,0x1f,0x2d,0xc6,0xbb,0xba,0xb3,0xdf,0xcb,0x99 -,0x8f,0x8f,0x9d,0x3f,0x3f,0xa1,0xa0,0xb8,0x39,0x2b,0x2a,0x4b,0x60,0x19,0x19,0x1c,0x4a,0xaf,0xae,0xc8,0xdf,0xb0,0x33,0x28,0x3b,0x3a,0x2e,0x53,0xdf,0xa8,0xab,0x25 -,0x1a,0x21,0xac,0xaa,0xa6,0xad,0xc4,0x92,0x95,0x96,0x9f,0xac,0x9d,0xab,0x4c,0x1a,0x17,0x14,0x13,0x24,0x20,0x28,0x48,0x32,0x3a,0x4f,0x5a,0xd1,0xe0,0xb8,0xa8,0x9e -,0xbc,0x29,0x24,0x27,0xaf,0xa3,0xa5,0xad,0xdf,0xf5,0xdb,0x3d,0xf0,0x5e,0x52,0xaf,0x75,0x48,0x3d,0x26,0x27,0xbe,0x99,0x98,0x9f,0xbe,0x28,0x32,0x28,0x36,0x21,0x14 -,0x25,0x24,0x46,0x3b,0x24,0x36,0xaf,0xa0,0xa1,0xa3,0xa3,0x9c,0x9a,0xad,0xbd,0xa3,0xae,0xa4,0xa7,0xbd,0x3f,0x1b,0x18,0x1e,0x3a,0xc6,0xf8,0x2e,0x2a,0x37,0x61,0x36 -,0x3c,0x2d,0x4e,0xb4,0x45,0x41,0x2d,0x23,0x35,0x4f,0x65,0xbd,0xad,0xa7,0xbb,0xa2,0x96,0x98,0x9a,0x9d,0xa8,0xab,0xdd,0x23,0x18,0x1c,0x3d,0x69,0xbd,0x3e,0x30,0x2e -,0x1f,0x1b,0x10,0x1a,0x2f,0xe1,0xb9,0x3d,0xc9,0xa7,0xb8,0xa3,0x9c,0x9d,0x92,0x99,0x92,0x9d,0x9f,0x9f,0xca,0x2f,0x29,0x24,0x1b,0x17,0x14,0x1a,0x2f,0xab,0xbd,0xaf -,0x36,0x2f,0x2f,0x28,0x26,0x28,0xd2,0xb4,0xa7,0xa3,0xb1,0xb2,0x3f,0x2a,0x2d,0x2a,0xe9,0xd9,0xa2,0x96,0x9b,0x98,0x98,0xa9,0xa4,0xbc,0x3c,0x1f,0x20,0x1e,0x19,0x35 -,0x1f,0x38,0x38,0x1e,0x29,0x19,0x26,0x2b,0xc8,0x98,0x9c,0x9b,0x99,0xb7,0x3b,0x1f,0x21,0xcc,0x42,0xb7,0xb2,0xa7,0xa2,0xa5,0x9f,0x5c,0x2b,0x21,0x1b,0x27,0x26,0x37 -,0xc5,0xae,0xa0,0x9f,0xa3,0xa6,0xbb,0x3a,0x20,0x21,0x27,0x1b,0x2f,0x35,0x67,0x57,0x2c,0x27,0x2a,0xcb,0xad,0xac,0x9e,0x9e,0x96,0x9a,0xa2,0xa8,0xcc,0x3c,0x45,0xdf -,0x23,0x27,0x1f,0xdd,0xb6,0xaf,0xb0,0x3c,0x2b,0x21,0x30,0x25,0x37,0xd0,0xd8,0xab,0xa4,0xa4,0xaf,0x2e,0x2d,0x2e,0x27,0x49,0x2d,0xbc,0xb6,0xbd,0xa1,0xae,0x97,0xa7 -,0xae,0xb4,0x47,0xed,0x2d,0x30,0x33,0x26,0xbd,0xbc,0xc6,0x2e,0x19,0x1c,0x1b,0x26,0x23,0x31,0xc3,0xbd,0xc7,0xf4,0xf4,0xa6,0xb7,0xa9,0xa9,0xa3,0x9f,0x9b,0x90,0x99 -,0x9c,0xc4,0x2b,0x1b,0x18,0x1a,0x18,0x16,0x17,0x1f,0x3b,0xae,0xab,0xa4,0xd5,0x45,0x46,0x4b,0xac,0xc6,0xa6,0xa2,0xa9,0xaf,0xb7,0xcd,0x55,0x2b,0x33,0x4a,0xcf,0xcb -,0x35,0xa9,0xa5,0xa1,0xad,0x3e,0x37,0x1d,0x1f,0x29,0x24,0xd8,0x4b,0xcb,0xac,0xcd,0xe5,0x29,0x30,0xe8,0x4d,0xd8,0xa7,0xa0,0x9c,0xa9,0x9f,0xaf,0x44,0x2c,0x1d,0x3e -,0x29,0x2c,0x24,0x34,0xcf,0xd5,0x30,0x25,0x26,0x1f,0x27,0x26,0x4a,0x48,0xab,0x98,0x92,0x8e,0x94,0x9a,0xc5,0x4b,0x73,0xbf,0xc1,0x4b,0x30,0x26,0x25,0x25,0x1f,0x17 -,0x1d,0x1c,0x2f,0x38,0x39,0xc7,0xbb,0xa3,0xa1,0xa6,0xad,0x5b,0xdb,0x5f,0xcf,0xb1,0xbc,0xab,0xa7,0xa6,0xaa,0xaf,0x3a,0x2d,0x37,0x4d,0x37,0x43,0x2b,0x34,0xbf,0xc9 -,0xf6,0x20,0x18,0x18,0x22,0x35,0x2f,0x2f,0x28,0x4f,0xab,0xa1,0x9e,0xa2,0xa6,0xb9,0xad,0xac,0xac,0xbc,0xa0,0x9e,0x98,0xa8,0x47,0x37,0x1d,0x28,0x2b,0x22,0x19,0x1c -,0x20,0x3a,0x39,0x2b,0x24,0x2c,0x5c,0x67,0xaf,0xa9,0xa3,0x9a,0x97,0x95,0x96,0xa8,0x6a,0x3f,0x35,0x28,0x1e,0x1b,0x1e,0x4b,0xa8,0xae,0xcb,0xe6,0x67,0xba,0xb7,0xbb -,0x62,0x3e,0x4a,0xbb,0xbb,0xb5,0xec,0x2b,0x2a,0x24,0xd0,0x56,0x39,0x35,0x35,0xaf,0xa8,0xa4,0xa5,0xba,0xca,0x50,0x31,0x28,0x25,0xdc,0xb6,0xb9,0xe2,0x20,0x1f,0x22 -,0x2d,0xd3,0x5c,0x4f,0xdd,0xa9,0x9b,0xa6,0xac,0xb5,0x6b,0xb6,0xae,0xab,0xbe,0x28,0x2f,0x5b,0xbc,0xcd,0x2b,0x26,0x20,0x2e,0x25,0x20,0x1e,0x29,0xb5,0xb1,0xa1,0xb2 -,0xa9,0xa9,0xa4,0xa1,0xa4,0xba,0x45,0x36,0x51,0xbe,0x2c,0x25,0x17,0x1f,0x39,0xcd,0xc3,0x35,0x5b,0xc4,0xa6,0xa2,0xb2,0xa6,0xab,0xac,0xce,0x2d,0x1c,0x2c,0x5e,0xa7 -,0x9e,0x55,0x51,0x23,0x38,0xbb,0xa7,0xc9,0x45,0x44,0x40,0xb8,0xdf,0x3d,0x3c,0xcb,0xbe,0xb3,0xd8,0x35,0x23,0x2d,0x36,0x7c,0xef,0x67,0xb6,0xb0,0xb1,0xe1,0x4f,0x36 -,0x49,0xaa,0xa3,0xaf,0xbb,0xbd,0xc5,0x48,0x3a,0x39,0x3a,0x20,0x28,0x30,0x29,0x2a,0x25,0x39,0xb9,0xa7,0xa6,0xad,0xc2,0xbb,0xad,0xa9,0xa5,0xa2,0xac,0xbb,0xcd,0x32 -,0x28,0x26,0x20,0x2a,0x21,0x44,0x49,0x38,0x33,0x3e,0xad,0xaf,0xa4,0xd6,0xdb,0xd4,0xb8,0xf9,0x59,0xf3,0xbb,0xc4,0xc5,0xa9,0xdb,0xbd,0x2b,0x45,0xb7,0xbc,0xad,0xaa -,0xb4,0xea,0x34,0x2a,0x25,0x2c,0xb7,0xdd,0xbf,0x63,0x1f,0x22,0x29,0xcf,0xb5,0xc8,0x50,0x2d,0xbf,0xd1,0xc3,0xbe,0xc4,0xb3,0xad,0xa6,0xbd,0xae,0xcc,0x42,0xed,0x50 -,0x3a,0x48,0x4b,0x2d,0x31,0x27,0x28,0x26,0x28,0xb6,0xaf,0xaa,0xd9,0xc1,0xb9,0xa2,0x9c,0xa4,0xaf,0x46,0xdd,0x2a,0x2e,0x29,0x3a,0x4d,0x2f,0x36,0x47,0x63,0x3f,0x44 -,0xdd,0xc9,0xae,0xa8,0xb9,0xb9,0xb5,0xbe,0x6f,0x37,0x3b,0x5f,0xc4,0xb8,0x4d,0x6d,0x26,0x29,0x50,0xbb,0xb3,0xb7,0xb6,0x59,0x60,0x45,0xfe,0xca,0xb2,0xca,0xc2,0xaf -,0x39,0x27,0x2e,0x45,0xe0,0xcf,0xf4,0x6d,0x4a,0x3a,0xb8,0xc9,0x5a,0xd0,0xb9,0xad,0xbc,0xc4,0x4d,0x5f,0x56,0xfb,0x4a,0x40,0x3e,0x27,0x24,0x25,0x54,0x3d,0x29,0x2f -,0xd2,0xa8,0xa3,0xaa,0xb8,0xad,0xb6,0xab,0xa7,0xae,0xcd,0x34,0x33,0x2b,0x29,0x36,0x41,0x38,0x2e,0x3b,0x4b,0x49,0x3e,0xd5,0xb2,0xb9,0xbb,0xdb,0x34,0xce,0xbf,0x4e -,0xbf,0x4c,0xb2,0xac,0xae,0xb3,0x41,0x47,0x34,0x3a,0xbc,0xaf,0xb8,0x54,0x3d,0xe6,0x56,0x62,0xb5,0x6a,0x4b,0x55,0x5e,0x6f,0x2d,0x3c,0x4e,0x7e,0x57,0x6d,0x40,0x3c -,0xce,0xaf,0xaf,0x2f,0xcf,0xc8,0xbd,0xa4,0xb2,0xac,0x4e,0x2d,0x2c,0x6a,0xbd,0x34,0x2c,0x27,0x23,0x23,0x2e,0x35,0xd2,0xbe,0xaa,0xa8,0xbb,0xaf,0xb6,0xa7,0xa7,0xaf -,0xb3,0xbb,0xee,0x40,0x3b,0x27,0x31,0xe7,0xcb,0x40,0x34,0x39,0x2a,0x2d,0xfa,0xa8,0xa7,0x6c,0x26,0x3a,0xe5,0xcb,0xb6,0xab,0xa6,0xb9,0xce,0xbd,0xbc,0x3c,0x28,0x2a -,0x3f,0xd7,0xbc,0xb5,0x53,0x34,0x2e,0x27,0x2e,0x47,0xd3,0x6f,0xcd,0x64,0xf7,0x3a,0x3c,0xb2,0xb4,0xb5,0xc0,0xad,0xb9,0x59,0x4d,0x5e,0xad,0xac,0xac,0xb0,0xc7,0x29 -,0x1c,0x33,0x58,0xb1,0xd7,0x31,0x2f,0x20,0x1f,0x2d,0x37,0x48,0xd5,0xe7,0xae,0xad,0xb2,0xb4,0xb1,0xa0,0x9e,0x9f,0xb2,0x56,0x44,0x2f,0x29,0x4b,0xbd,0xcd,0x66,0x27 -,0x2c,0x21,0x23,0x2d,0x37,0x3b,0x67,0xcb,0x5d,0xb8,0xc5,0xb3,0xd3,0xc4,0xac,0xa6,0x9c,0xa6,0xb2,0x49,0x36,0x59,0xb5,0xae,0xc9,0x39,0x24,0x29,0x2b,0x37,0x6c,0xc9 -,0x54,0xcd,0xc8,0x43,0x22,0x1f,0x2e,0x3b,0xaf,0xaf,0xcb,0xe7,0x5d,0xbf,0xad,0xa0,0xa6,0xc8,0xe2,0x4c,0xd5,0xbf,0xbc,0xbf,0xcf,0xf5,0x3a,0x23,0x21,0x29,0x1e,0x2d -,0x2e,0x41,0xea,0x3c,0xb6,0xb9,0xb6,0x69,0xbf,0xc0,0xad,0xa0,0xa7,0xae,0xde,0xba,0xd3,0xc5,0x46,0x32,0x3f,0x41,0x3e,0x64,0x3f,0x39,0xe6,0xcb,0xaf,0xcc,0x39,0x26 -,0x27,0x77,0xb1,0xaa,0xb9,0xbc,0xe5,0xf8,0xb7,0xbe,0x62,0x48,0x62,0xc4,0x6d,0x58,0xdb,0x49,0xd2,0x48,0x37,0x37,0x2e,0x5b,0x37,0x48,0xc1,0x63,0xe4,0xcc,0xaf,0xcd -,0x35,0x2a,0x3a,0x4e,0xea,0xc8,0xbd,0xaa,0xab,0xad,0xc2,0x5a,0x3a,0x4b,0xc1,0xc0,0xc2,0x2b,0x22,0x34,0x62,0xb9,0x69,0x34,0x20,0x27,0x5a,0xb4,0xaa,0xae,0xbf,0x4d -,0xae,0xaa,0xb9,0x45,0x2e,0x54,0x64,0xd0,0xbb,0xb4,0xad,0xbb,0x3b,0x3b,0x30,0x30,0x3b,0x4c,0x6f,0x3b,0x2f,0x36,0xc1,0xc8,0xce,0x2f,0x2b,0x49,0xd0,0xaa,0xb2,0xcd -,0xd8,0xd0,0xae,0x9d,0xab,0x33,0x26,0x2d,0xd2,0xd5,0xec,0xee,0x56,0xc0,0x50,0xcd,0xbd,0x30,0x1d,0x21,0x44,0xbc,0xcd,0xdc,0xb3,0xd0,0xb4,0xaf,0xcb,0x4d,0x75,0x52 -,0x4e,0xbd,0xbd,0xab,0xc8,0xe9,0x43,0x31,0x30,0x42,0xcf,0x4b,0x31,0x3d,0xb7,0xbd,0xb0,0xbe,0x46,0x34,0x22,0x2f,0xce,0xda,0xb7,0x42,0x5e,0xa8,0xaf,0xb1,0x4b,0x39 -,0x37,0x51,0xe9,0xe0,0xdb,0x65,0xc9,0xbc,0xab,0xc3,0x5b,0x2a,0x1f,0x32,0x4f,0xbf,0xb3,0xac,0xbf,0x51,0xcd,0xba,0x60,0x3c,0x44,0x49,0x3e,0x40,0xbf,0x9f,0xa5,0xbf -,0x3f,0x2d,0x2f,0x44,0xb5,0x71,0x61,0x64,0xfd,0xbe,0xf7,0xcd,0x3c,0x22,0x25,0x3e,0xde,0xc7,0xbf,0xbc,0xae,0xa5,0xab,0xbe,0x3c,0x23,0x34,0x45,0x58,0x47,0x2e,0x39 -,0x63,0xcd,0xb7,0xdb,0x54,0x35,0x35,0xfe,0xc3,0xa0,0xa8,0xb4,0xc6,0x52,0xc5,0xd4,0x39,0x36,0x36,0x34,0x43,0xcd,0xa6,0xa3,0xac,0xde,0x2e,0x23,0x2d,0x46,0x4e,0xbf -,0xe4,0xc3,0xbb,0xcc,0x6f,0xc8,0x4e,0x35,0x3d,0x3d,0x5d,0xbd,0xac,0xb3,0xaf,0xbc,0xbe,0xe9,0x2f,0x25,0x2f,0xee,0xca,0x68,0x4b,0xc9,0xbc,0xbe,0xbb,0xd8,0x2b,0x21 -,0x1c,0x2d,0xb0,0xa8,0xad,0xbe,0x38,0x3e,0xbb,0xda,0xbf,0x47,0x44,0xd3,0xaf,0xa0,0xb4,0xb9,0xbe,0x35,0x26,0x1f,0x24,0x5d,0x48,0xc8,0xb0,0xab,0xae,0x6b,0xd9,0x68 -,0x37,0x31,0x3d,0x3e,0xb4,0xb9,0xba,0xbe,0xc8,0xb2,0xd6,0x64,0x30,0x2d,0x2e,0xc3,0xad,0xc4,0x44,0x3b,0xb9,0xc7,0xc3,0x40,0x31,0x28,0x22,0xd2,0xad,0xa3,0xa6,0xb7 -,0xc3,0x4e,0xfd,0x2a,0x26,0x2f,0x41,0xc2,0xad,0xb4,0xb5,0xab,0xda,0x52,0x23,0x2b,0x33,0xc1,0xab,0xbd,0xba,0x3c,0x5c,0x5a,0x65,0x34,0x22,0x27,0x5e,0xc2,0xb2,0xa7 -,0xbd,0xa9,0xa3,0xaa,0xde,0x32,0x2d,0x21,0x31,0xc2,0xbb,0x50,0x38,0xd4,0xc7,0xd7,0x2e,0x22,0x23,0x2b,0xd3,0xa0,0x9d,0xa9,0xbb,0xcd,0xd8,0x4b,0x3c,0x27,0x3d,0x43 -,0x62,0xb7,0xb0,0x9d,0xa6,0xb7,0x38,0x28,0x1f,0x27,0xca,0xb9,0xac,0x47,0x57,0xb3,0xa7,0xce,0x2c,0x19,0x1d,0x4a,0xb5,0xa0,0x9f,0xa4,0x43,0x71,0xd7,0x4d,0x35,0x29 -,0x3d,0xd9,0xc1,0xbc,0xc1,0xbc,0xb2,0xb0,0x37,0x2d,0x1c,0x1e,0x26,0x3a,0xaf,0xb0,0xa9,0x69,0xb9,0xcf,0xeb,0x29,0x2d,0x3c,0x6d,0xaa,0xac,0xa3,0xa9,0xa6,0xca,0x36 -,0x21,0x17,0x21,0x58,0xa9,0xb0,0xbf,0xdb,0xb7,0xa1,0xac,0xcf,0x1f,0x19,0x1e,0x7c,0xb9,0xa0,0xac,0xc7,0xad,0xc9,0xf9,0x1f,0x27,0x3b,0xcf,0xb4,0xb1,0xb2,0xb6,0xd1 -,0xce,0xdb,0x3c,0x26,0x1d,0x2f,0x5a,0xb8,0xb1,0xae,0xa6,0xab,0xb4,0x3c,0x28,0x2b,0x25,0x38,0x47,0xb5,0xaf,0xb6,0xa9,0xaa,0xb6,0x2d,0x1e,0x23,0x5c,0xb6,0x9f,0xac -,0xbb,0xca,0x51,0xcf,0x33,0x2a,0x1d,0x2b,0x59,0xb9,0xa6,0xaf,0xa0,0xa4,0xa5,0xb2,0x2b,0x20,0x26,0x3d,0xe8,0xca,0xe6,0x48,0xf9,0xaa,0xac,0x4a,0x1e,0x1c,0x2f,0x5e -,0xbf,0xbd,0xa9,0xac,0xc6,0xda,0x73,0x45,0x29,0x38,0xbf,0xe9,0x52,0x35,0xe2,0xa9,0x9c,0xa6,0x27,0x1d,0x1e,0x39,0xbc,0xaa,0xb1,0xc1,0xc8,0xb0,0xaf,0x6c,0x33,0x1d -,0x25,0x4e,0xa9,0xb4,0xc0,0xaf,0xa9,0xac,0x38,0x2f,0x25,0x29,0x3d,0xd5,0xc1,0xcc,0xb8,0xbe,0xb1,0xab,0xb1,0x27,0x22,0x2d,0x2c,0x34,0x39,0xcd,0x6e,0xab,0xad,0x9c -,0xcc,0x18,0x2f,0x4b,0xa9,0xc3,0xad,0xaf,0xca,0xc5,0x53,0xda,0x22,0x18,0x1b,0x3d,0xb4,0xb4,0x5c,0xb0,0x9f,0xb9,0xcc,0x2b,0x2a,0x31,0xfa,0xab,0xb7,0xab,0xde,0xa9 -,0x9d,0xa2,0xcf,0x23,0x19,0x1e,0xeb,0xbd,0xb3,0x5a,0xb4,0x59,0x5d,0x3d,0x28,0x3c,0x26,0x44,0x54,0xc6,0xbf,0xcc,0x9f,0x9d,0x9f,0xac,0x34,0x1f,0x31,0xf3,0xba,0x43 -,0x46,0xa6,0xa5,0x9c,0xae,0x3a,0x1e,0x18,0x34,0x39,0x47,0x2d,0x3c,0xb5,0xbc,0x7a,0x3d,0x43,0x1c,0x2b,0x3f,0xa3,0xa5,0x63,0xb4,0xa3,0x9d,0xa5,0xde,0x3e,0xcd,0x75 -,0xb8,0x3c,0x4a,0xbe,0xcd,0x47,0x2e,0x2e,0x23,0x1f,0x39,0xbb,0xb5,0x42,0x4c,0xc7,0xac,0xaf,0xba,0xd0,0x2e,0x38,0x34,0xa9,0x9b,0x9e,0xb7,0xa5,0x9b,0xae,0xe9,0x16 -,0x21,0xc5,0x20,0x1a,0x10,0x1e,0xa3,0xa2,0xac,0xac,0xa0,0x9a,0xb9,0x3c,0x1b,0x58,0x28,0x0e,0xb9,0xbb,0x6f,0xc1,0x47,0x92,0x88,0x9f,0x9d,0x2f,0x9f,0x99,0xb8,0x12 -,0x12,0x1f,0x00,0x07,0x0c,0xae,0xac,0x3a,0xc7,0x37,0xab,0xa9,0xa1,0x93,0x83,0x8d,0x99,0x87,0x99,0x57,0xa6,0x11,0x2a,0xae,0x0c,0xac,0x86,0x87,0x94,0x8e,0x2f,0x3b -,0x40,0x07,0x09,0x02,0x03,0x02,0x00,0x04,0x10,0x0f,0x25,0x0d,0xb3,0x98,0x34,0x5e,0xc8,0x88,0xa8,0x11,0x3c,0x62,0xa9,0x17,0x15,0x8a,0x87,0x84,0x8e,0x87,0x80,0x87 -,0x88,0x89,0x88,0x82,0x22,0xa0,0x86,0x34,0x19,0xbf,0x80,0xbf,0x9d,0x1e,0x09,0xad,0x0e,0x07,0x09,0x09,0x27,0xb0,0x10,0x0b,0x03,0x01,0x08,0x09,0x09,0x0f,0x27,0x13 -,0x1a,0x1b,0x18,0x0b,0x29,0x95,0x94,0x81,0x8a,0x8b,0x8d,0x88,0x86,0x87,0x84,0x80,0x8d,0xce,0x95,0x87,0x80,0x8e,0xbc,0x20,0x96,0x99,0x8f,0x85,0x4f,0x1c,0xba,0xb8 -,0x15,0x0c,0x03,0x06,0x1f,0x11,0x05,0x09,0x01,0x03,0x09,0x1d,0xd2,0x15,0x0b,0x0e,0x17,0x0e,0x1c,0x12,0x2c,0xb1,0xbc,0x8c,0x94,0x9a,0xa9,0x8b,0x88,0x95,0x8a,0x8e -,0x98,0xaf,0x9f,0x80,0x90,0xa3,0x8d,0x81,0x89,0x96,0x8c,0xaa,0x84,0xa7,0xc5,0x55,0x08,0x08,0x00,0x12,0xa9,0x1f,0x06,0x04,0x05,0x0b,0xb7,0xc9,0xa1,0x55,0x31,0x0e -,0x02,0x07,0x0a,0x26,0x9d,0x98,0x41,0xb5,0x2e,0xbf,0x86,0x8a,0x8e,0x91,0x8c,0x8c,0x14,0x18,0x95,0x81,0x84,0xb5,0x1e,0xb4,0xa9,0x89,0x8d,0x8f,0x8d,0x96,0x8b,0x9b -,0x2b,0x08,0x14,0xb8,0x96,0x4e,0x32,0x4a,0x02,0x05,0xbe,0xca,0x2f,0x05,0x02,0x09,0xb4,0x4b,0x14,0xac,0x1a,0x15,0x16,0x9f,0x17,0xaf,0x80,0x92,0x8b,0x92,0x3f,0x0c -,0x93,0x97,0x13,0x11,0x09,0x88,0x3e,0x00,0x0a,0x00,0x1f,0x8d,0x8b,0x9c,0x9e,0x1f,0x04,0x02,0x0f,0x95,0xac,0x16,0x29,0x0f,0x07,0x0c,0x16,0xbf,0xc3,0x8c,0x4d,0x9f -,0x16,0x33,0x81,0x98,0x8f,0xa9,0x9f,0x28,0x95,0xa6,0xa3,0x80,0x88,0x87,0x8b,0x89,0x8e,0x9c,0x3a,0x3a,0x81,0x84,0x80,0x96,0x12,0x2a,0x8f,0x8f,0x9c,0x83,0x8a,0x97 -,0x1a,0x0c,0x05,0xaa,0x2a,0xd1,0xa2,0xc9,0x0d,0x04,0x2b,0x0e,0x15,0x0f,0xaf,0x16,0x1d,0x28,0x00,0x04,0x00,0x0e,0xd2,0x54,0x28,0x00,0x03,0x00,0x29,0x90,0x9a,0x4d -,0x03,0x1b,0x02,0x32,0x87,0x81,0x81,0x8a,0x8e,0xa9,0x92,0x9b,0x85,0x80,0x8d,0x9a,0x86,0x85,0x9e,0x11,0xc0,0x80,0x81,0x8d,0x13,0x0e,0x33,0x8f,0x07,0x1a,0x9e,0x60 -,0xa4,0x05,0x0e,0x01,0x0e,0x0e,0x16,0xa7,0xc5,0x15,0x06,0x18,0x04,0x03,0x3e,0x92,0x98,0x1b,0x2c,0x8c,0xe7,0x27,0x18,0x9c,0x87,0x87,0x87,0x93,0x8e,0x18,0x13,0x8b -,0x81,0x80,0x89,0x97,0x1b,0x19,0x90,0x8c,0x83,0x8b,0x88,0x15,0x16,0x20,0x00,0x0f,0x17,0x96,0x95,0x15,0x03,0x00,0x01,0x00,0x06,0x10,0xdc,0x0f,0x00,0x02,0x01,0x05 -,0x03,0x17,0x1f,0xa0,0x33,0x05,0x00,0x06,0x11,0x97,0x87,0x84,0x8e,0xa3,0x85,0xa3,0x8a,0x85,0x82,0x80,0x85,0x85,0x87,0x93,0x9a,0x4f,0x8d,0x81,0x82,0x87,0x9d,0x2e -,0x3f,0x95,0x9c,0x9c,0x99,0x8b,0x9d,0xa0,0x0b,0x0f,0x0d,0x90,0x80,0x86,0x26,0x06,0x33,0x09,0x0c,0x15,0x9c,0x26,0x1f,0x1d,0x0c,0x06,0x00,0x0d,0x33,0x9b,0x95,0x0e -,0x06,0x0b,0x0b,0x05,0x0f,0x8f,0x94,0xb9,0x1f,0x0e,0x0a,0x06,0x13,0xa6,0x87,0x88,0x9c,0x1c,0x19,0xf3,0x31,0x94,0x80,0x81,0x88,0x8d,0x97,0x36,0x1d,0x4d,0x9f,0x88 -,0x8c,0xc8,0x0c,0x05,0x1b,0x25,0x0c,0x2d,0xaf,0x19,0x06,0x09,0x0c,0x00,0x09,0x0b,0xbf,0x99,0xbb,0x0c,0x0a,0x0f,0x11,0x8c,0x86,0x86,0x8a,0x90,0xaf,0x36,0x1c,0x9f -,0x83,0x81,0x80,0x80,0x87,0xd6,0xa7,0xaa,0x8b,0x80,0x80,0x86,0xa1,0x98,0x2c,0x22,0xaf,0x96,0x86,0x81,0x8c,0x21,0x05,0x05,0x0a,0x0e,0xb5,0x99,0x12,0x07,0x13,0x08 -,0x00,0x06,0x05,0x12,0x0a,0x04,0x03,0x00,0x01,0x00,0x0c,0x10,0x0f,0x0d,0x09,0x0c,0x21,0x09,0x0f,0xd3,0x8d,0x8b,0x89,0x9d,0xbe,0x9b,0xb1,0x85,0x80,0x80,0x80,0x84 -,0x8e,0xa0,0x98,0x92,0x84,0x83,0x81,0x89,0x9f,0xb8,0x21,0x1e,0xa7,0x87,0x82,0x8c,0x1b,0x20,0x0c,0x02,0x04,0x3a,0xa1,0x8e,0x91,0x1f,0x0d,0x09,0x09,0x08,0x9e,0x92 -,0x9a,0x47,0x18,0x09,0x0d,0x03,0x1d,0xb1,0xbb,0xa5,0x1e,0x19,0x0d,0x12,0x27,0xa8,0x9a,0x9c,0xb8,0xc5,0x0e,0x0c,0x1a,0xd6,0x96,0x8c,0xd9,0x15,0x0f,0x02,0x1c,0x51 -,0x91,0xa6,0xa2,0x95,0x25,0x1b,0x0f,0x45,0x8d,0x88,0x83,0xa2,0x0a,0x0c,0x0c,0x09,0xa6,0x9b,0x90,0x84,0xbb,0x12,0x06,0x02,0x07,0xb2,0x89,0x86,0xd8,0x20,0x14,0x11 -,0x13,0x36,0x8a,0x85,0x80,0x8e,0x98,0x1a,0x1d,0xe1,0x93,0x87,0x82,0x83,0x9c,0xb5,0xb7,0x9a,0x8f,0x81,0x83,0x80,0x96,0xc5,0x9a,0x1f,0x2a,0x9f,0x90,0x8a,0x8e,0x0e -,0x0e,0x19,0x0c,0xad,0x9d,0x62,0x1c,0x0c,0x0c,0x01,0x02,0x08,0x09,0x97,0xbb,0x03,0x01,0x00,0x01,0x00,0x0d,0x27,0x3e,0x35,0x08,0x01,0x03,0x01,0x04,0xc1,0x84,0x83 -,0x9e,0xbb,0xd5,0xde,0xac,0x8e,0x80,0x83,0x83,0x88,0x88,0x98,0xed,0x64,0x89,0x80,0x86,0x8a,0xb2,0x10,0x18,0x24,0xa8,0x8b,0x8f,0xa4,0xe8,0xbc,0x09,0x06,0x56,0x9b -,0x9a,0x8c,0x18,0x1a,0x2c,0x21,0x92,0x89,0x84,0x89,0x91,0x2a,0x1f,0x25,0x10,0x2c,0x97,0x8a,0x8f,0x11,0x05,0x08,0x02,0x2f,0x88,0x8b,0xa4,0x2a,0x0f,0x06,0x01,0x01 -,0x08,0x2a,0x9e,0x27,0x0b,0x02,0x01,0x05,0x0b,0x9b,0x8a,0x99,0xa4,0x2d,0x09,0x05,0x0e,0xa9,0x8c,0x85,0x80,0x96,0x19,0x16,0x0f,0x20,0x8e,0x8b,0x90,0xd0,0xc7,0x4d -,0x1d,0xe8,0x4e,0xa2,0x90,0xd1,0x26,0x0d,0x24,0x21,0xab,0x87,0x8b,0x8c,0xdb,0x7a,0x4b,0x46,0xa3,0x8d,0x85,0x84,0xb1,0xa6,0xab,0xd9,0xa7,0x8a,0x85,0x82,0x84,0xac -,0xa3,0x25,0xa3,0x8f,0x8f,0x83,0x9b,0x16,0x0e,0x0e,0x0f,0x21,0x8d,0x8b,0x85,0xb4,0x0e,0x09,0x00,0x05,0x11,0x49,0x99,0x3a,0x03,0x07,0x03,0x03,0x00,0x08,0x08,0x29 -,0x15,0x06,0x04,0x00,0x03,0x14,0xb2,0x9b,0x99,0x14,0x16,0x14,0x1a,0x4b,0xa1,0x8b,0x83,0x8d,0x31,0xa6,0x2d,0x2f,0x85,0x88,0x81,0x96,0x21,0x2b,0x97,0xad,0x97,0x88 -,0x8d,0x85,0xa5,0x29,0xdd,0xb2,0xac,0x83,0x83,0x88,0x9a,0x0a,0x08,0x64,0x46,0x90,0x82,0x8a,0x84,0xa2,0x0f,0x11,0x19,0x17,0x93,0x8b,0xa3,0x21,0x03,0x06,0x10,0x12 -,0x9d,0x8b,0x8b,0x9f,0x0f,0x03,0x04,0x07,0x16,0x90,0x86,0x8f,0x1a,0x07,0x01,0x07,0x06,0x1c,0xbe,0x32,0x20,0x0b,0x06,0x03,0x0a,0x14,0x99,0x95,0xc8,0x1e,0x09,0x14 -,0xbd,0x94,0x87,0x86,0x87,0xaf,0x1e,0x10,0x10,0xa7,0x8d,0x83,0x80,0x97,0x1d,0x0e,0x0c,0xe9,0x9c,0x95,0x8b,0x9e,0x3e,0xdd,0x23,0xdb,0x8a,0x8b,0x85,0x8a,0x19,0x0c -,0x07,0x0e,0xa0,0x84,0x83,0x80,0x8e,0x2a,0xbd,0x11,0x2c,0x8b,0x85,0x80,0x81,0x9b,0x2b,0x2e,0x25,0x8b,0x82,0x8b,0x84,0xb2,0x18,0x1b,0x03,0x0e,0x94,0x8a,0x84,0xa8 -,0x04,0x01,0x03,0x01,0x1b,0xae,0x2d,0x37,0x0b,0x00,0x00,0x00,0x00,0x20,0xa4,0x26,0x0c,0x00,0x02,0x08,0x15,0xa2,0x8e,0x57,0x6d,0x1a,0x00,0x06,0x13,0x8f,0x80,0x80 -,0xa0,0x28,0x0e,0x13,0x91,0x8c,0x8c,0x80,0x8f,0x8b,0x8e,0x0e,0xc3,0x8c,0x86,0x80,0x8a,0x22,0x1c,0x0f,0x37,0x82,0x87,0x82,0x87,0xad,0x35,0x0e,0x02,0x34,0x83,0x82 -,0x82,0xa6,0x09,0x0a,0x10,0xb4,0x87,0x8c,0xd4,0x2d,0x0d,0x00,0x0d,0x09,0xb1,0x84,0xea,0x27,0x0d,0x00,0x04,0x0d,0x33,0x8a,0xa0,0x1b,0x18,0x01,0x00,0x06,0x0f,0x91 -,0x8d,0x1a,0x14,0x0d,0x0c,0xac,0x9f,0xae,0x92,0xa8,0x4d,0x1a,0x0c,0x0d,0x95,0x8a,0x96,0x9f,0x0e,0x1d,0xba,0xbc,0x9c,0x94,0xbb,0x8f,0x8d,0x1a,0x59,0xde,0xbc,0x83 -,0x8f,0xbf,0xb7,0x1a,0xae,0x80,0x88,0x86,0x96,0x1c,0x1b,0x0a,0x0b,0xbd,0x8c,0x9d,0x69,0x20,0x0a,0x20,0x9e,0x8b,0x81,0x8d,0xa8,0xa6,0x19,0x0f,0x98,0x85,0x80,0x80 -,0xba,0x17,0x11,0x06,0x9d,0x94,0x9e,0x8b,0xaa,0x24,0x09,0x00,0x06,0x99,0x89,0x99,0x24,0x00,0x00,0x03,0x0f,0xcc,0xa3,0x19,0xad,0x31,0x00,0x06,0x06,0x44,0x8a,0xc8 -,0x0f,0x17,0x05,0x18,0x8f,0xa5,0x92,0x94,0xa1,0xbc,0x16,0x12,0x9b,0x83,0x99,0x77,0x0e,0x0b,0xa9,0x8b,0x8d,0x85,0x9a,0xa9,0x9f,0x04,0x0c,0x39,0x96,0x83,0x9e,0x0d -,0x0f,0x27,0x9a,0x83,0x93,0xa8,0x7c,0x40,0x10,0x08,0x12,0x97,0x80,0x84,0x8d,0x66,0x0f,0x1b,0x89,0x8d,0x87,0x98,0x1e,0x23,0x04,0x0b,0xa5,0x81,0x83,0x98,0x08,0x01 -,0x01,0x0c,0xba,0x9c,0x90,0xa5,0xdc,0x07,0x01,0x0c,0xa7,0x83,0x95,0x15,0x08,0x04,0x09,0x9f,0xaf,0x95,0x8a,0x8a,0xaf,0x04,0x00,0x17,0x87,0x88,0xaf,0x0b,0x04,0x05 -,0x3f,0xab,0xa1,0xa6,0xef,0xa5,0x07,0x01,0x08,0xcf,0x8d,0x9e,0x1a,0x18,0x1d,0xaa,0x86,0x94,0x98,0x9a,0x8c,0x4e,0x0d,0x1a,0x94,0x80,0x8b,0x5b,0x2d,0x2f,0x9f,0x81 -,0x8f,0x8f,0xa1,0x9c,0xa4,0x08,0x0c,0x8f,0x80,0x80,0x8c,0x0e,0x07,0x0d,0x8f,0x88,0x8d,0x9f,0xa9,0x97,0x08,0x05,0x2a,0x86,0x80,0x87,0x18,0x05,0x00,0x0e,0xa5,0x49 -,0xa0,0xaa,0x93,0x0c,0x00,0x00,0x18,0x8f,0xab,0x10,0x05,0x02,0x0f,0x8f,0xa7,0x95,0x95,0x84,0x95,0x0a,0x04,0x15,0x93,0x8f,0xc0,0x14,0x09,0x0e,0xa3,0x1d,0x11,0x03 -,0x0f,0x0f,0x00,0x01,0x0a,0x9e,0x99,0x24,0x05,0x07,0x0a,0x97,0x8b,0x8e,0xba,0xb1,0x97,0x0c,0x1c,0x96,0x81,0x80,0x86,0xaa,0x24,0x22,0x8a,0x80,0x83,0x80,0x83,0x80 -,0x46,0x0a,0x15,0x89,0x80,0x83,0x96,0x28,0x08,0x29,0x9c,0xba,0x92,0xb1,0x89,0x1d,0x00,0x03,0x1c,0x92,0x90,0x26,0x0a,0x03,0x06,0x21,0x0c,0x14,0x0d,0x9e,0x4d,0x06 -,0x0b,0x45,0x89,0x8a,0xa0,0xa2,0x9a,0x9e,0x81,0x8f,0x8f,0x98,0x88,0xa9,0x02,0x01,0x06,0xa0,0xbe,0x08,0x00,0x01,0x01,0x22,0x18,0x1a,0x0d,0x2f,0xe7,0x02,0x02,0x0a -,0x8b,0x80,0x8a,0x40,0x1a,0x15,0x90,0x8f,0x99,0x9f,0x9a,0x85,0x37,0x10,0x12,0x94,0x85,0x8a,0x9b,0xa3,0x2e,0xa4,0xa1,0xaa,0x8a,0x88,0x80,0xac,0x0e,0x13,0x91,0x82 -,0x8a,0x6f,0x47,0xdf,0x8d,0x88,0xca,0x33,0x24,0x8a,0x36,0x08,0x02,0x10,0x9f,0xca,0x05,0x04,0x02,0x0e,0x9f,0x1e,0x43,0x1e,0x94,0x9e,0x49,0xe9,0x8e,0x80,0x82,0x8d -,0xc9,0x40,0x9d,0x86,0xa1,0x97,0xc3,0x97,0x24,0x00,0x01,0x06,0x5e,0xa9,0x0d,0x00,0x01,0x07,0xa5,0x1d,0x0c,0x02,0x16,0xd5,0x05,0x04,0x04,0x31,0x8f,0xaa,0x1a,0x14 -,0x0f,0x90,0x8f,0x9f,0x97,0x8d,0x86,0xae,0x2c,0xaf,0x82,0x80,0x85,0xc0,0x35,0x29,0x88,0x84,0x91,0x9c,0xbe,0x8b,0x26,0x0e,0x0e,0x91,0x83,0x8c,0x1a,0x07,0x0b,0xa5 -,0x89,0xb2,0x34,0x14,0x97,0x1e,0x06,0x03,0x16,0x8d,0x83,0x94,0x28,0x0c,0x24,0x86,0x8a,0x85,0x88,0x80,0x8c,0x5b,0x24,0x9a,0x80,0x87,0xb9,0x0a,0x03,0x09,0xab,0x1c -,0x09,0x02,0x15,0x2f,0x02,0x01,0x00,0x15,0xa8,0x43,0x0c,0x05,0x06,0xa1,0x9e,0xae,0x30,0xb1,0x8d,0x0f,0x06,0x04,0xa8,0x84,0x86,0xb6,0x13,0x03,0x4a,0x8b,0x94,0x9a -,0x4c,0x94,0x19,0x0a,0x0e,0x93,0x80,0x84,0x9c,0x14,0x0f,0x9a,0x80,0x8a,0x8d,0x9c,0x81,0x8e,0x1e,0x09,0x1b,0x8a,0x83,0x8d,0x20,0x04,0x03,0x2d,0x23,0x25,0x0c,0x5f -,0x42,0x03,0x04,0x0a,0x8e,0x81,0x88,0x91,0xca,0xb9,0x81,0x82,0x82,0x91,0x8f,0x82,0x9f,0x2c,0x0d,0x31,0xa2,0x1d,0x06,0x05,0x01,0x18,0x24,0x09,0x08,0x08,0xa8,0x12 -,0x01,0x01,0x04,0x6d,0xb0,0x1c,0x0b,0x01,0x0e,0x99,0xab,0xa5,0x1d,0x9a,0xb0,0x0b,0x0b,0x25,0x83,0x80,0x85,0x9e,0x1d,0x22,0x84,0x89,0x89,0x98,0x8e,0x81,0xc8,0x1c -,0x12,0x9f,0x84,0x8a,0x9e,0x29,0x04,0x1c,0xe9,0x2a,0xbd,0xae,0x82,0xac,0x07,0x01,0x0b,0x94,0x8b,0xae,0x21,0x07,0x16,0x8d,0x99,0x95,0x60,0x8d,0x87,0xb0,0xca,0xa5 -,0x82,0x81,0x85,0x98,0xce,0x2b,0x8b,0x94,0x2d,0x12,0x11,0xa3,0x0c,0x02,0x00,0x07,0x31,0x3e,0x0d,0x05,0x00,0x0c,0xbf,0x3d,0xbe,0x12,0x9e,0x1e,0x02,0x03,0x0f,0x8e -,0x88,0xa6,0x13,0x09,0x0a,0x8e,0xa3,0x99,0x60,0x9d,0x8a,0x1b,0x0e,0x0b,0x9a,0x85,0x87,0x94,0xae,0x14,0x9c,0x9b,0xbd,0x97,0x98,0x80,0x8e,0x2f,0x0a,0x5c,0x85,0x81 -,0x91,0xcb,0x0d,0x16,0x8d,0xcf,0xa9,0x0f,0x34,0xd7,0x03,0x03,0x03,0x2b,0xa3,0x3e,0x17,0x16,0x16,0x8a,0x87,0x87,0x88,0x8e,0x80,0x8f,0xa9,0xbd,0x8a,0x80,0x82,0x99 -,0x18,0x01,0x06,0x2e,0x14,0x55,0x0b,0x0e,0x09,0x00,0x01,0x03,0xac,0x92,0xeb,0x03,0x03,0x00,0x1d,0xbf,0x9c,0x98,0xcf,0x8e,0x0d,0x07,0x05,0xb1,0x81,0x82,0x85,0xa0 -,0x0c,0x18,0x93,0x9d,0x86,0x8f,0x83,0x8d,0x1a,0x10,0x15,0x8d,0x84,0x89,0x9d,0x1d,0x09,0xa9,0x9d,0x92,0x94,0xab,0x8b,0x0f,0x0f,0x0c,0xd4,0x8b,0xb5,0x1a,0x09,0x05 -,0x1e,0x8f,0xc6,0xa7,0x0f,0x9e,0x99,0x17,0x25,0x26,0x84,0x81,0x80,0x8a,0x59,0x25,0x85,0x82,0x80,0x8f,0x22,0x55,0x04,0x03,0x01,0x20,0x91,0xb1,0x09,0x00,0x00,0x04 -,0x4d,0xcd,0xa1,0x12,0x1d,0x16,0x00,0x04,0x04,0x96,0x86,0x97,0x1c,0x05,0x01,0x3c,0x8f,0x93,0x8e,0x9f,0x89,0x25,0x09,0x05,0x2e,0x82,0x82,0x86,0xf1,0x0b,0x23,0x85 -,0x84,0x84,0xa7,0x91,0x8f,0x4a,0x39,0x1e,0x8b,0x85,0x89,0xd5,0x0f,0x0d,0x9f,0x86,0x97,0x36,0x0e,0xa9,0x1d,0x09,0x04,0x09,0xb0,0x9f,0xbe,0x0b,0x06,0x0e,0x91,0x83 -,0x84,0x8e,0x97,0x90,0xb1,0xa0,0x8e,0x80,0x80,0x81,0xac,0x09,0x08,0x2b,0x90,0x9f,0x2b,0x06,0x0a,0x08,0x00,0x01,0x02,0x38,0x95,0x2d,0x00,0x02,0x00,0x23,0x91,0xa9 -,0xb2,0x13,0xc0,0x16,0x09,0x05,0x26,0x82,0x83,0x8c,0x1f,0x0d,0x35,0x86,0x8b,0x8b,0xcb,0x3b,0x9c,0x26,0x3f,0x1d,0xa0,0x87,0x8e,0xb3,0x3e,0x20,0x9f,0x8f,0xa5,0x9d -,0x47,0x8f,0x97,0xbc,0x21,0x15,0x8f,0x8c,0xa1,0x13,0x07,0x0d,0x9d,0x98,0xaa,0x1a,0x08,0x43,0x14,0x1e,0x1c,0xaa,0x84,0x88,0x94,0x76,0x9d,0x8a,0x80,0x82,0x81,0x9a -,0x9f,0x8f,0xe4,0x1e,0x07,0x1c,0xe1,0x28,0x09,0x01,0x00,0x03,0x24,0xbb,0xb2,0x09,0x0b,0x0c,0x05,0x08,0x07,0xca,0x95,0x9e,0x2a,0x0f,0x05,0x24,0x94,0x8d,0x90,0x25 -,0xbc,0x46,0x23,0x1e,0x52,0x8a,0x8d,0x8e,0xa7,0x2f,0x1e,0xac,0x98,0x8c,0x8f,0x98,0x88,0x9f,0xa4,0x2f,0x9e,0x87,0x8a,0x9f,0x1b,0x0f,0x21,0x8e,0x8a,0x8d,0x25,0x1e -,0x4d,0x49,0x1e,0x0a,0x1c,0x2e,0xd6,0x38,0x19,0x0c,0x22,0x91,0x8d,0x94,0x1a,0x1b,0x23,0x17,0x1a,0x15,0xb2,0x91,0x96,0x5b,0x15,0x07,0x24,0x95,0x8e,0x96,0x19,0x1e -,0x17,0x18,0x1b,0x4b,0x92,0x8c,0x8d,0xc0,0x10,0x05,0x32,0xa7,0x9c,0x4d,0x19,0x30,0x12,0x16,0x0e,0x1d,0x8f,0x87,0x87,0x9c,0x0b,0x01,0x10,0xad,0x8c,0x92,0xb6,0xc4 -,0xe7,0x42,0x27,0xdc,0x95,0x8f,0x95,0x2a,0x08,0x05,0xbb,0x85,0x83,0x8c,0x9b,0xa4,0xaa,0xae,0x15,0x13,0xe9,0x9a,0x97,0xb4,0x1b,0x1e,0x96,0x86,0x83,0xa6,0x0e,0x0d -,0x0b,0x15,0x11,0x0a,0x14,0xc3,0xa4,0x2f,0x0f,0x03,0x14,0x2f,0xc9,0x2b,0x09,0x08,0x09,0x20,0xb1,0xb8,0x98,0x9e,0xa4,0xbe,0x18,0x0b,0x2d,0x8f,0x8d,0x9f,0x2c,0x56 -,0x5d,0xba,0x25,0x06,0x14,0xb3,0xae,0x2c,0x10,0x0d,0x0b,0x36,0x9f,0x8f,0x9c,0xae,0xa3,0xb8,0xbb,0x26,0x1e,0x74,0x9d,0x9a,0x9e,0xee,0x33,0x96,0x85,0x82,0x80,0x8c -,0x95,0x99,0xa0,0x5f,0x22,0xac,0x8d,0x85,0x83,0x96,0xc7,0x49,0x95,0x85,0x86,0x9e,0x2e,0x1e,0x1d,0x1c,0x0b,0x14,0xb3,0x92,0xa4,0x0f,0x00,0x02,0x08,0x22,0x2a,0x88 -,0x95,0x00,0x0f,0x56,0x1f,0x9f,0x21,0x1b,0xb8,0x1d,0x08,0x04,0x05,0x00,0x11,0x05,0x01,0x08,0x06,0x0b,0x07,0x05,0x15,0x0a,0x01,0x08,0x07,0x08,0x06,0x04,0xdb,0x87 -,0x84,0x83,0x8b,0x3d,0x18,0x8a,0x80,0x86,0x84,0x80,0x80,0x80,0x81,0x85,0x8f,0x86,0x80,0x80,0x80,0x81,0x80,0x82,0x81,0x81,0x87,0x92,0x8c,0x87,0x81,0x87,0x86,0xb9 -,0x1e,0xa3,0x3c,0x3e,0x29,0x1d,0x0d,0x03,0x02,0x01,0x03,0x04,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x0b,0x23,0x07,0x00,0x00,0x00,0x00,0x05,0x05,0x03,0x00,0x04,0x03 -,0x05,0x04,0x07,0x21,0xa9,0x9c,0x16,0x04,0x04,0x1c,0x91,0x8a,0xa3,0xaf,0xac,0x8f,0x95,0x8e,0x8e,0x93,0x80,0x81,0x80,0x82,0x83,0x81,0x82,0x81,0x82,0x81,0x80,0x80 -,0x80,0x80,0x80,0x80,0x84,0x84,0x80,0x80,0x80,0x80,0x80,0x83,0x85,0x82,0x82,0x86,0x88,0x8a,0x89,0x89,0x8f,0x9a,0x6a,0xa2,0x90,0x8f,0xa6,0x3b,0x1b,0x0f,0x10,0x0d -,0x0a,0x05,0x07,0x13,0x0e,0x05,0x01,0x00,0x00,0x02,0x0f,0x0e,0x03,0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x03,0x00,0x01,0x00,0x01,0x05,0x03,0x05,0x02,0x00,0x01 -,0x09,0x30,0x1e,0x0c,0x07,0x05,0x0a,0x18,0x2c,0x0f,0x05,0x0c,0x40,0x9a,0x8f,0x9b,0xae,0x58,0xaf,0x9e,0xab,0x8f,0x85,0x83,0x83,0x8b,0xad,0x27,0xa4,0x84,0x80,0x80 -,0x80,0x83,0x82,0x82,0x81,0x86,0x8b,0x86,0x87,0x85,0x82,0x81,0x80,0x82,0x82,0x84,0x83,0x82,0x83,0x84,0x85,0x87,0x88,0x8e,0x93,0x90,0x92,0x8e,0xa2,0x1d,0x08,0x08 -,0x24,0x9e,0x8b,0x73,0x0d,0x0b,0x0b,0x19,0x1d,0x59,0xa5,0xa9,0xa7,0x9f,0xbc,0xd6,0x4a,0xa7,0x96,0x9b,0xac,0x1d,0xd9,0x91,0x89,0x8d,0x9a,0x98,0x9e,0x9c,0x91,0x92 -,0x9f,0x64,0xbe,0x94,0x8a,0x86,0x8b,0x9e,0xb0,0x2d,0x2a,0x5e,0x9c,0x8e,0x9e,0x4b,0x0c,0x01,0x01,0x00,0x03,0x0a,0x15,0x0c,0x02,0x02,0x01,0x01,0x00,0x01,0x01,0x00 -,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x04,0x06,0x02,0x03,0x03,0x01,0x02,0x02,0x03,0x01,0x02,0x04,0x04,0x01,0x01,0x00,0x06,0x18,0x25,0x16,0x09,0x06,0x03,0x07,0x17 -,0xcb,0xab,0x5c,0xa6,0x98,0x92,0x8f,0x8e,0x85,0x83,0x82,0x82,0x86,0x83,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x82,0x83,0x80,0x80,0x80,0x80,0x81,0x83 -,0x86,0x84,0x81,0x81,0x80,0x81,0x80,0x85,0x8e,0x9f,0xa3,0x88,0x82,0x81,0x81,0x84,0x85,0x87,0x87,0x83,0x85,0x85,0x8a,0x8e,0x87,0x85,0x85,0x8e,0x93,0x8f,0x97,0x9b -,0xaa,0xac,0xda,0x20,0x16,0x09,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x02,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x03,0x02,0x02,0x01,0x06 -,0x07,0x07,0x04,0x03,0x04,0x06,0x0d,0x10,0x10,0x0f,0x0d,0x18,0x29,0x1f,0x18,0x12,0x48,0x95,0x8c,0x87,0x8e,0x94,0x9a,0x9c,0x91,0x89,0x84,0x82,0x82,0x82,0x8a,0x9f -,0x53,0xa9,0x8e,0x8b,0x8a,0x91,0x8e,0x92,0x95,0x94,0x9b,0x9e,0x4c,0x3a,0xba,0xaf,0xa9,0xb4,0xa4,0x93,0x97,0x99,0x9e,0x94,0x8f,0x91,0x8d,0x91,0x9e,0xc8,0x2d,0x3b -,0x27,0x16,0x09,0x0b,0x1d,0x36,0xc1,0x2c,0x1e,0x12,0x0b,0x0b,0x0e,0x0e,0x10,0x13,0x1c,0x23,0x19,0x14,0x1c,0xa9,0x9c,0x96,0xb5,0x2e,0x1a,0x17,0x37,0xb6,0x99,0xa4 -,0xb1,0xb0,0x6f,0x59,0x23,0x1e,0xda,0xa2,0x93,0x9b,0xaf,0x3e,0x1e,0x21,0x2b,0x36,0xad,0xa6,0x8e,0x8d,0x97,0x5c,0x17,0xc9,0x9c,0x8a,0x8d,0x8f,0x8e,0x8d,0x87,0x87 -,0x87,0x88,0x88,0x88,0x86,0x88,0x8c,0x89,0x82,0x81,0x81,0x88,0x9a,0xa9,0xa7,0x9c,0x99,0x9b,0xa8,0x20,0x0f,0x06,0x02,0x01,0x01,0x04,0x09,0x0d,0x08,0x06,0x04,0x04 -,0x04,0x05,0x08,0x0b,0x0a,0x0e,0x0d,0x0b,0x0a,0x0b,0x35,0xaa,0x96,0xa6,0x28,0x1b,0x13,0x25,0x36,0x54,0xbb,0xb4,0xa7,0xac,0x59,0x2b,0x3e,0x9b,0x8b,0x85,0x88,0x8e -,0x94,0x91,0x8e,0x8e,0x90,0x91,0x90,0x8c,0x89,0x87,0x8c,0x8f,0x8d,0x91,0x91,0xa7,0xc4,0x52,0x4a,0xc1,0xbd,0xc3,0xd8,0x31,0x28,0x13,0x0a,0x05,0x07,0x23,0xa2,0x8d -,0x95,0x58,0x1a,0x14,0x1c,0x2b,0x41,0xa8,0xb1,0xb3,0x34,0x18,0x09,0x08,0x19,0x2c,0x5e,0x13,0x0a,0x07,0x09,0x0e,0x10,0x18,0x15,0x16,0x19,0x19,0x19,0x0d,0x1c,0xc3 -,0x99,0x8e,0x99,0x9b,0xaa,0xb9,0xad,0xce,0xb1,0x9e,0x9c,0x90,0x9c,0x9f,0x37,0x39,0x9d,0x94,0x8e,0xa0,0xc1,0x40,0x48,0xb9,0xbf,0xac,0xb3,0x41,0x4c,0x2c,0x25,0x11 -,0x26,0xa9,0x94,0x94,0xb9,0x3d,0x1c,0x20,0x3c,0xbf,0x99,0x90,0x8d,0x8a,0x90,0x99,0xba,0x99,0x89,0x82,0x81,0x83,0x84,0x8d,0x93,0x9b,0xa4,0x94,0x94,0x9a,0xaa,0x1f -,0x0d,0x04,0x08,0x0f,0x19,0x14,0x0a,0x06,0x03,0x02,0x03,0x03,0x09,0x09,0x08,0x09,0x08,0x0a,0x09,0x17,0x27,0xc4,0x5e,0x2f,0x29,0x20,0x20,0x23,0x29,0x38,0x3c,0x45 -,0xc3,0xb9,0x45,0x2b,0xb7,0x9d,0x8c,0x93,0x96,0x95,0x9c,0x8f,0x8c,0x88,0x83,0x86,0x83,0x87,0x8e,0x9c,0x9f,0x8a,0x85,0x82,0x87,0x8f,0x9b,0xa8,0xc9,0x38,0x32,0xbf -,0xb6,0xb7,0x42,0x1b,0x0c,0x0b,0x19,0x2a,0x4d,0x2d,0x53,0xac,0xad,0xc1,0x2d,0x3a,0xe5,0x33,0x3f,0x27,0x1d,0x12,0x18,0x2f,0x2e,0x2a,0x18,0x15,0x13,0x0e,0x0a,0x06 -,0x09,0x0c,0x0d,0x15,0x1a,0x1a,0x12,0x1a,0x29,0x7b,0xa8,0xb5,0xa4,0x9f,0xaa,0xaa,0xdc,0xaa,0xa6,0xb1,0xa7,0x48,0x5b,0x22,0x50,0x9a,0x8e,0x8f,0xa0,0xab,0xbb,0xd8 -,0x5a,0xba,0x9e,0x99,0x98,0x91,0xa1,0xcb,0x1c,0x25,0xbd,0xaa,0xa7,0xc3,0xb3,0xb6,0xb4,0xb9,0x44,0x41,0x29,0x3b,0xae,0xa8,0xa6,0xed,0xaa,0x93,0x89,0x86,0x88,0x87 -,0x89,0x8a,0x89,0x8b,0x8a,0x8d,0x93,0x8f,0x9d,0xae,0x24,0x1b,0x38,0x2a,0x26,0x18,0x12,0x0c,0x0c,0x0a,0x05,0x04,0x01,0x02,0x03,0x05,0x05,0x04,0x07,0x0f,0x18,0x20 -,0x1e,0x20,0x1c,0x24,0x20,0x16,0x1c,0x16,0x2c,0xc2,0x5b,0xef,0x1c,0x26,0xbc,0x9d,0x8f,0x9e,0x9d,0xb5,0xae,0x95,0x95,0x8d,0x8f,0x92,0x8e,0x91,0x8d,0x8e,0x93,0x8b -,0x8c,0x8c,0x95,0x9c,0x96,0x93,0x8d,0x93,0x9c,0xb1,0x62,0xa1,0x9c,0x9c,0xaf,0x25,0x2d,0x35,0x7d,0xc1,0xfb,0xc5,0xcc,0xce,0x4b,0x2e,0x3d,0x30,0x31,0x25,0x18,0x10 -,0x0b,0x0e,0x1a,0x28,0x2b,0x1f,0x14,0x13,0x19,0x23,0x23,0x18,0x0d,0x0a,0x17,0x30,0xcf,0x39,0x15,0x12,0x18,0x28,0x50,0x28,0x30,0x54,0xb3,0xa3,0x57,0x28,0x21,0x27 -,0x4b,0xe8,0x3b,0x2f,0x2d,0x41,0xbc,0xa2,0x9c,0x9d,0x95,0x99,0x95,0x93,0x96,0x96,0x95,0x94,0x8f,0x91,0x9b,0xa7,0x2d,0x1f,0x1f,0x27,0x2b,0x37,0x3d,0x56,0x49,0x1f -,0x16,0x16,0x2a,0xbe,0xa5,0xa2,0x96,0x8e,0x8c,0x88,0x86,0x86,0x86,0x88,0x86,0x86,0x8b,0x8c,0x8d,0x8e,0x8e,0x9d,0xb7,0xca,0x4b,0x2b,0x1b,0x11,0x0d,0x0d,0x0a,0x0a -,0x09,0x05,0x02,0x02,0x03,0x07,0x08,0x06,0x08,0x0a,0x0b,0x0f,0x15,0x19,0x1f,0x1f,0x1b,0x19,0x11,0x0e,0x20,0x35,0xbe,0xb1,0x2f,0x2c,0x39,0xe2,0xa8,0xa3,0xa0,0x9c -,0xa4,0xa8,0x9c,0x97,0x91,0x8c,0x8c,0x8d,0x8e,0x90,0x91,0x8f,0x96,0x95,0x92,0x99,0x9a,0xa9,0xbe,0x9d,0x99,0x9b,0x9b,0xab,0xaa,0xa3,0xac,0xba,0xaf,0xa9,0x9e,0x9f -,0xe4,0x32,0x32,0x38,0xc1,0x59,0x21,0x26,0x36,0x3e,0x39,0x19,0x0f,0x17,0x15,0x19,0x1b,0x15,0x18,0x1b,0x15,0x16,0x12,0x0f,0x19,0x18,0x11,0x0f,0x10,0x13,0x1b,0x1b -,0x15,0x1b,0x1f,0x26,0x2e,0x1d,0x22,0x42,0x4c,0xc2,0xa7,0xb6,0xc5,0xbe,0xf1,0xc0,0xb7,0xc7,0xa8,0x9f,0x99,0x91,0x96,0x98,0x9d,0x9f,0x9a,0x8f,0x8f,0x96,0x9e,0x66 -,0x3f,0xc9,0xae,0x9f,0xa9,0x5e,0x42,0xbf,0xb1,0xb6,0x50,0x31,0xc9,0x9c,0x9c,0xae,0x5f,0xb3,0xa6,0x99,0x8e,0x8a,0x95,0x9f,0xad,0xc0,0x92,0x8e,0x8c,0x8e,0xc9,0x17 -,0x26,0x34,0xb0,0xcc,0x1d,0x10,0x52,0xbf,0x48,0x1a,0x0b,0x13,0x18,0x25,0x1c,0x14,0x0d,0x0b,0x09,0x25,0x3e,0xc6,0x3a,0x18,0x14,0x1f,0xb7,0xb3,0xcf,0x18,0x14,0x6e -,0x8c,0x8f,0xc3,0x1b,0x0c,0x1a,0xc5,0xa6,0x3d,0x3d,0xbd,0x3a,0x2f,0x3c,0xa6,0x9f,0x95,0xab,0x1c,0x19,0x3c,0xad,0xbf,0xba,0xea,0xa5,0x99,0xa7,0x24,0x48,0x9f,0x8e -,0x85,0x89,0x96,0x32,0x1f,0x20,0xaf,0x90,0x90,0x9a,0xb4,0x1a,0x20,0xb3,0x9b,0x8f,0x97,0xd6,0x1f,0xbe,0xb9,0x2f,0x1e,0x1a,0x1d,0x31,0xb8,0x2f,0x2c,0xcb,0x3c,0xd5 -,0xa4,0xbc,0xaf,0xa6,0xba,0x1d,0x19,0x2d,0x2c,0x27,0x1a,0x13,0x22,0xa8,0xa5,0x3d,0x1b,0x18,0x1f,0xd6,0xc5,0xd8,0x3b,0x1e,0x0f,0x10,0x1e,0x28,0xaa,0xaa,0x33,0x15 -,0x14,0x26,0xb6,0x9f,0xa9,0xb7,0xa2,0x9c,0xbf,0x3f,0x4c,0xbf,0x97,0x8d,0x9d,0xcd,0x4e,0x33,0xfd,0xa2,0x99,0x93,0x8f,0x98,0x4b,0x3c,0x9f,0x8c,0x88,0x9a,0x2c,0x1f -,0xa7,0x8d,0x8b,0x8e,0xa2,0xad,0x9b,0x97,0x9b,0x9a,0x9b,0xaa,0xc6,0x2e,0x21,0x3d,0x7b,0x3d,0x2e,0x2c,0x24,0x27,0x1f,0x19,0x20,0x35,0x33,0x19,0x10,0x0e,0x12,0x14 -,0x12,0x0f,0x1b,0xe3,0xaf,0xbf,0x2e,0x1c,0x21,0xbb,0x9e,0x99,0xbc,0x1c,0x14,0x22,0xa9,0x8d,0x87,0x91,0xc4,0x2a,0x29,0xae,0x93,0x96,0xb7,0x1b,0x10,0x1b,0x2f,0x26 -,0x18,0x0f,0x0f,0x0d,0x0d,0x0d,0x0b,0x0b,0x0a,0x0f,0x1f,0x57,0x3b,0x1e,0x19,0x19,0x37,0x9d,0x9f,0xe9,0x2e,0x49,0xac,0x99,0x8e,0x90,0x8f,0x93,0x9a,0x9d,0x91,0x88 -,0x85,0x88,0xa2,0x7e,0xc6,0x9b,0x8e,0x8a,0x8b,0x9d,0xa6,0x9c,0x96,0x8f,0x8d,0x8d,0x8e,0x9d,0xbe,0x49,0x49,0x4c,0xe5,0xb5,0xbe,0x40,0x23,0x0f,0x0a,0x12,0x2e,0xce -,0x3d,0x17,0x0a,0x09,0x0c,0x10,0x17,0x17,0x0f,0x0c,0x0b,0x0f,0x18,0x2d,0x40,0x25,0x1a,0x0f,0x0f,0x1b,0x29,0x38,0xc8,0xad,0xb8,0xaf,0xb2,0xbd,0xd8,0xbe,0xb6,0xed -,0xbe,0x2d,0x2e,0xd1,0xaa,0xa1,0xa6,0xad,0x6f,0xd0,0xae,0xa0,0x92,0x92,0x9d,0xb4,0xba,0xa5,0x98,0x8e,0x93,0xa2,0x45,0x30,0xce,0x9c,0x99,0x9d,0x9a,0x9f,0xaf,0xd3 -,0xb3,0xa2,0x9a,0x8f,0x8e,0x8f,0x90,0x93,0x97,0x9b,0x9a,0x91,0x8d,0x8c,0x96,0x9e,0x9b,0x97,0x8f,0x8e,0x95,0x4c,0x21,0x12,0x17,0x24,0x26,0x17,0x09,0x05,0x02,0x06 -,0x07,0x07,0x04,0x03,0x05,0x07,0x0a,0x09,0x05,0x04,0x06,0x0a,0x0a,0x09,0x08,0x08,0x0e,0x1f,0xbe,0xaf,0xb2,0x5c,0x4e,0xac,0x9b,0x8d,0x8d,0x90,0x9e,0xa6,0x8e,0x87 -,0x84,0x88,0x90,0x9a,0x99,0x92,0x91,0x8f,0x95,0x9c,0x9a,0x98,0x94,0x96,0x9b,0xa4,0xba,0xa6,0x9e,0x9f,0xa8,0xb4,0xcc,0xa5,0x96,0x96,0xa2,0x3b,0x2a,0x32,0x9f,0x9d -,0xaa,0xad,0x2c,0x1a,0x1b,0x2b,0x3d,0x25,0x12,0x0a,0x0a,0x0e,0x1a,0x29,0x1f,0x0f,0x08,0x0c,0x12,0x19,0x19,0x0d,0x0c,0x19,0x3c,0x2d,0x27,0x27,0x18,0x25,0xaf,0xa4 -,0xbb,0x43,0x33,0x21,0x4f,0x9e,0x9b,0xc3,0x2a,0x25,0x34,0xae,0xa3,0xaa,0x22,0x18,0x20,0x39,0xba,0xc0,0x34,0x1a,0x25,0xc9,0x9c,0x8d,0x88,0x87,0x8c,0x8d,0x89,0x85 -,0x83,0x85,0x89,0x8e,0x89,0x82,0x81,0x82,0x89,0x92,0x92,0x8b,0x86,0x8d,0x39,0x18,0x1f,0x21,0x3c,0xae,0x14,0x01,0x00,0x02,0x05,0x0f,0x10,0x03,0x00,0x02,0x09,0x0e -,0x13,0x09,0x03,0x05,0x0f,0x27,0x1b,0x16,0x19,0x17,0x12,0x2f,0xa3,0x25,0x0f,0x34,0x45,0x19,0xcf,0x8a,0x9a,0x2f,0xce,0xa6,0xb1,0x98,0x88,0x9e,0x28,0xcb,0x98,0x8b -,0x84,0x84,0x99,0x2d,0x96,0x83,0x83,0x85,0x89,0x94,0xb3,0x92,0x82,0x84,0xa7,0x2a,0xa6,0xa3,0xa2,0x8a,0xa3,0x0f,0x2e,0xa9,0xb9,0x1e,0x1f,0x0f,0x05,0x1e,0xaf,0x37 -,0x0d,0x1a,0x1a,0x07,0x0e,0x9e,0xa1,0x11,0x0e,0x21,0x17,0x0e,0xbf,0x8e,0x34,0x11,0x29,0x0b,0x0b,0xa4,0x97,0x18,0x03,0x0b,0x1a,0x51,0xa7,0x12,0x00,0x07,0x34,0xae -,0x1d,0x1d,0x2a,0x0a,0x0e,0x97,0x82,0x8e,0x0d,0x0c,0x1e,0xab,0x85,0x81,0xb7,0x16,0xaf,0x8e,0x8a,0x84,0x85,0xae,0xb4,0x8b,0x86,0x87,0x82,0x81,0x8c,0x98,0x8b,0x80 -,0x87,0x8c,0x8d,0x96,0xbd,0x9b,0x80,0x90,0x3b,0xe7,0xad,0x1f,0xb7,0x91,0x1f,0x04,0x07,0x0f,0x11,0xce,0x2c,0x05,0x00,0x02,0x09,0x12,0x17,0x0c,0x02,0x00,0x04,0x2b -,0x38,0x08,0x03,0x06,0x03,0x0f,0xa6,0x9f,0x0c,0x14,0xdc,0x2c,0xa6,0x91,0xa5,0x1b,0xaa,0x8e,0x8f,0x86,0x82,0x8f,0x2e,0x9e,0x84,0x85,0x87,0x8e,0x99,0x20,0xdd,0x89 -,0x82,0x9b,0x47,0xac,0x42,0xc4,0x8b,0x84,0xd3,0x48,0xa9,0xb3,0x94,0x83,0x8c,0x17,0x1f,0x9e,0x98,0x92,0x91,0x77,0x0d,0x1c,0x92,0x8a,0xc2,0x13,0x0e,0x0a,0x0a,0xb6 -,0x8c,0x1b,0x02,0x04,0x07,0x0a,0x67,0xaa,0x08,0x00,0x0b,0x16,0x1f,0x9e,0xab,0x0d,0x04,0x17,0xd7,0x6d,0xb0,0xa5,0x1f,0x0e,0x49,0x90,0xa2,0x18,0x1d,0x1d,0x1a,0xb5 -,0x88,0xc2,0x0a,0x0e,0x32,0xbf,0x90,0x8a,0x1d,0x08,0x11,0xa1,0x93,0x8c,0x8b,0xac,0x2b,0x96,0x82,0x82,0x85,0x88,0x88,0x92,0x86,0x80,0x80,0x89,0x95,0x87,0x88,0x8b -,0x85,0x97,0x1b,0x1a,0x4f,0x2f,0x34,0x3e,0x0d,0x00,0x04,0x0e,0x0e,0x0a,0x06,0x02,0x00,0x00,0x0c,0x2d,0x0c,0x02,0x02,0x03,0x08,0x27,0x6b,0x15,0x14,0x22,0x2a,0x2a -,0xa6,0xb9,0x15,0x0f,0x2b,0xae,0x93,0x96,0x53,0x0b,0x11,0x9e,0x8b,0x8b,0x91,0x99,0xac,0xb0,0x96,0x87,0x8a,0x98,0x9d,0xa6,0x9f,0x8a,0x84,0x8f,0xb4,0x9d,0x91,0x89 -,0x82,0x84,0x92,0x6c,0xb9,0xa7,0x99,0x8e,0x98,0x30,0x1a,0xd9,0xb2,0x3a,0x1f,0x15,0x12,0x17,0xd7,0xa9,0x46,0x0f,0x0e,0x13,0x16,0xb2,0x9a,0xf6,0x0e,0x09,0x09,0x12 -,0xbc,0x9c,0x1e,0x0c,0x1b,0x3b,0x2c,0x1c,0x24,0x0e,0x08,0x16,0xb6,0xb1,0x33,0x15,0x0a,0x06,0x10,0xc3,0xbf,0x4b,0x2c,0x25,0x22,0x29,0xfa,0x2e,0x17,0x1f,0xb9,0xbb -,0xac,0x9f,0xd0,0x1a,0x3b,0x8e,0x88,0x85,0x87,0x8a,0x98,0x92,0x8b,0x86,0x83,0x84,0x86,0x8d,0x8b,0x85,0x85,0x8a,0x8d,0x8b,0x88,0x86,0x83,0x90,0x2b,0x13,0x23,0x4a -,0x3f,0xd3,0x20,0x07,0x04,0x0b,0x12,0x17,0x10,0x0e,0x05,0x05,0x0d,0x0f,0x0a,0x05,0x07,0x07,0x09,0x0b,0x0e,0x06,0x05,0x04,0x0d,0x1e,0x49,0xa8,0x2b,0x18,0x19,0x2c -,0x2d,0xb8,0x9c,0xa9,0x3d,0xaf,0x99,0x96,0x9d,0x93,0x90,0x8d,0x87,0x85,0x88,0x98,0xba,0x3d,0x9c,0x87,0x84,0x8e,0xb2,0xc9,0xd4,0x4e,0x90,0x88,0x8a,0x9d,0x9f,0x93 -,0x9d,0xab,0xb7,0x7e,0x74,0xb8,0x9c,0xa8,0x36,0x1f,0x15,0x3f,0xbc,0xa3,0x9e,0xa8,0xc3,0x1b,0x0c,0x10,0x28,0xce,0x1e,0x19,0x12,0x0b,0x0f,0x16,0x27,0x1a,0x1b,0x1e -,0x1d,0x26,0x1e,0x0c,0x03,0x0d,0x31,0x3e,0x2e,0x14,0x0b,0x06,0x12,0xb0,0xab,0xb5,0x3a,0x39,0x2d,0x24,0xcd,0xb1,0xb8,0xa9,0xa8,0xa6,0xb1,0xaa,0x30,0x27,0xb5,0x94 -,0x8a,0x8d,0x88,0x89,0x94,0xa3,0x9b,0x89,0x87,0x85,0x89,0x8f,0x8f,0x8d,0x82,0x82,0x83,0x84,0x86,0x87,0x8b,0x8f,0xd2,0x1c,0x30,0xaf,0xaf,0x4b,0x1d,0x06,0x01,0x09 -,0x12,0x14,0x0f,0x0d,0x05,0x00,0x02,0x03,0x05,0x07,0x08,0x09,0x05,0x08,0x09,0x08,0x0e,0x1f,0xbd,0xe1,0xbe,0xbd,0x17,0x09,0x0e,0xb4,0x99,0x99,0xa5,0xb2,0x35,0x1a -,0xb8,0x92,0x87,0x8c,0x9c,0x9e,0x9f,0xb3,0xb1,0xa4,0x94,0x8e,0x91,0x91,0x8d,0x9a,0x49,0x96,0x85,0x86,0x8c,0x89,0x8a,0x9f,0x31,0x3a,0xab,0x8b,0x87,0x9a,0x7c,0xcb -,0x36,0x1c,0x5c,0xbe,0xae,0x30,0x39,0xa1,0x36,0x05,0x09,0x24,0xab,0xb6,0xb8,0xa9,0x0d,0x03,0x08,0x22,0x2d,0x3b,0x28,0xc8,0x42,0x07,0x04,0x06,0x37,0x8a,0x8d,0x07 -,0x0a,0x8d,0x0b,0x17,0x9f,0xe4,0xa7,0x1d,0xad,0x0b,0x03,0x01,0x02,0x2a,0x09,0x0e,0x0c,0x01,0x04,0x00,0x11,0x2e,0x47,0x2f,0x3b,0x9b,0x0f,0x02,0x0d,0x8f,0x80,0x82 -,0x83,0x85,0x89,0x89,0x81,0x84,0x80,0x80,0x80,0x81,0x80,0x89,0x3f,0x91,0x80,0x80,0x80,0x82,0x81,0x8a,0x35,0x31,0x88,0x83,0x84,0x89,0x89,0x8b,0x11,0x09,0xc1,0x8c -,0x8e,0x3c,0x53,0x13,0x08,0x00,0x03,0x27,0x26,0x1d,0x07,0x10,0x06,0x00,0x01,0x00,0x10,0x0a,0x01,0x03,0x00,0x00,0x00,0x04,0x10,0x11,0x13,0x0e,0x07,0x00,0x00,0x00 -,0x09,0x37,0xa3,0x23,0x3e,0x21,0x03,0x04,0x2e,0x88,0x88,0x95,0x92,0x89,0x36,0x0f,0xb3,0x84,0x80,0x80,0x80,0x80,0x84,0x99,0xa3,0x86,0x80,0x81,0x80,0x81,0x80,0x89 -,0x98,0x86,0x80,0x80,0x80,0x81,0x80,0x8c,0x37,0xc8,0x84,0x80,0x80,0x80,0x81,0x81,0x9e,0x1a,0xcf,0x86,0x83,0x87,0x8f,0x93,0x24,0x03,0x03,0xaf,0x91,0x7a,0x1b,0x09 -,0x09,0x00,0x01,0x00,0x12,0x1e,0x07,0x03,0x04,0x00,0x00,0x00,0x0d,0x2c,0x0d,0x05,0x04,0x03,0x00,0x00,0x01,0x22,0x3b,0x0d,0x06,0x07,0x00,0x01,0x00,0x0c,0x5c,0x11 -,0x0c,0x09,0x07,0x01,0x00,0x0b,0xb8,0x8c,0x8f,0x9a,0x95,0x1a,0x07,0x19,0x89,0x80,0x83,0x80,0x83,0x81,0xae,0x24,0x89,0x80,0x80,0x80,0x83,0x81,0x95,0x2d,0xbd,0x85 -,0x80,0x81,0x80,0x81,0x82,0x9b,0x2d,0x90,0x82,0x80,0x82,0x86,0x8b,0xeb,0x1f,0x2d,0x8b,0x80,0x83,0x84,0x8c,0xa0,0x0e,0x03,0x22,0x99,0x8e,0x8f,0x91,0x99,0x1b,0x08 -,0x0a,0x97,0x80,0x86,0x8c,0x9a,0xa1,0x1a,0x03,0x1e,0x89,0x82,0x83,0x8c,0x9b,0x35,0x11,0x1c,0x5f,0x8a,0x87,0x89,0x8e,0xa8,0x1e,0x09,0x23,0x8d,0x84,0x86,0x84,0x8f -,0x32,0x08,0x09,0x3e,0x8d,0x93,0xb3,0xce,0x25,0x0b,0x00,0x01,0x0b,0x2c,0x2c,0x0e,0x02,0x01,0x00,0x01,0x00,0x09,0x19,0x0d,0x0a,0x00,0x00,0x00,0x00,0x01,0x07,0x0f -,0x0a,0x02,0x00,0x00,0x00,0x00,0x03,0x0f,0x0b,0x0c,0x03,0x00,0x00,0x00,0x01,0x0a,0x18,0x0f,0x05,0x01,0x00,0x00,0x00,0x07,0xa0,0xa9,0x36,0x1b,0x0d,0x0c,0x04,0x11 -,0x90,0x81,0x80,0x82,0x8b,0x95,0x9c,0x90,0x85,0x80,0x80,0x80,0x80,0x83,0x88,0x89,0x83,0x80,0x80,0x80,0x80,0x80,0x80,0x85,0x89,0x83,0x80,0x80,0x80,0x80,0x81,0x85 -,0x98,0x99,0x82,0x80,0x80,0x80,0x8b,0xa0,0xb6,0xb4,0xa5,0x8b,0x80,0x81,0x85,0x97,0x27,0x20,0x27,0xa1,0x8a,0x87,0x8a,0xa3,0x17,0x08,0x05,0x0d,0x1c,0x9d,0x9b,0x26 -,0x0e,0x02,0x02,0x00,0x02,0x11,0x20,0x15,0x0a,0x05,0x04,0x00,0x02,0x00,0x0f,0xa5,0x2c,0x0f,0x03,0x01,0x01,0x00,0x09,0x23,0xe3,0x23,0x07,0x02,0x02,0x03,0x06,0x08 -,0x24,0x1f,0x22,0x12,0x01,0x03,0x00,0x11,0xa8,0xa9,0xe1,0x29,0x1d,0x0e,0x06,0x0d,0x22,0x8f,0x8b,0xb9,0x45,0x24,0x22,0x11,0x11,0xa2,0x8f,0x8e,0xaa,0x12,0x10,0x0e -,0x0f,0x18,0xa1,0x82,0x86,0x8e,0x2a,0x08,0x14,0xd0,0x8b,0x83,0x86,0x8b,0x98,0xef,0x1d,0x1d,0xba,0x93,0x86,0x83,0x88,0x8f,0x7c,0x19,0x14,0xc4,0x86,0x83,0x89,0x98 -,0x4e,0x2d,0x3b,0x3e,0x50,0x89,0x80,0x85,0x8f,0x2f,0x33,0x40,0x28,0xa5,0x89,0x84,0x8a,0x34,0x0f,0x0c,0x0d,0x1c,0x58,0x8c,0x96,0xda,0x12,0x05,0x0c,0x0d,0x4a,0x8f -,0xa6,0x27,0x21,0x1f,0x18,0x0c,0x0e,0x47,0x87,0x88,0xa7,0x3c,0x1b,0x1b,0x14,0xdd,0x88,0x83,0x89,0xb9,0x16,0x19,0x21,0x3d,0xb5,0x8d,0x82,0x89,0x8c,0xbf,0x1c,0x33 -,0xaa,0x8a,0x82,0x86,0x8b,0xa0,0x1d,0x12,0x2c,0x98,0x89,0x82,0x8f,0xba,0x29,0x1c,0x16,0x15,0xc1,0x93,0x99,0xb2,0x2e,0x16,0x0e,0x11,0x15,0x23,0x8a,0x86,0x97,0x39 -,0x0a,0x0f,0x1b,0x2d,0xa2,0x97,0xa7,0x56,0x0f,0x0d,0x18,0x31,0x4b,0x5b,0x9e,0xbf,0x3b,0x0f,0x0a,0x0e,0x1a,0x99,0x88,0x94,0xfe,0x20,0x13,0x15,0x30,0xd5,0x97,0x84 -,0x95,0x39,0x1e,0x21,0x4c,0x2b,0x3e,0x9a,0x98,0x9f,0x18,0x09,0x0f,0x13,0x1f,0x25,0x95,0x8b,0x9f,0xb1,0x0f,0x12,0xed,0x9e,0x89,0x8c,0x9e,0xcc,0x2b,0x2c,0x25,0x4c -,0xb4,0x90,0x87,0x9d,0xb1,0x2b,0x1a,0x10,0x0d,0x31,0xa2,0xd4,0x21,0x0d,0x0f,0x25,0x2b,0x19,0x1c,0x8f,0x99,0xce,0x2f,0x1a,0x31,0x24,0x3d,0x98,0x96,0xa2,0x43,0x1f -,0x1e,0x1c,0x29,0x31,0x96,0x9c,0x6d,0x2e,0x15,0x15,0x0f,0x26,0x9d,0x99,0x44,0x1f,0x2e,0xc7,0x43,0x2f,0x21,0x9d,0x8a,0xae,0xc9,0x34,0x27,0x27,0x23,0xae,0x93,0xa2 -,0x4f,0x18,0x14,0x1b,0x1a,0x1e,0x2d,0xa0,0x9b,0x99,0x9e,0x22,0x16,0x24,0xb9,0x94,0x9b,0xb7,0xaf,0xd6,0x26,0x1e,0x23,0x7e,0x8e,0x8f,0xa7,0xea,0x1f,0x15,0x0e,0x17 -,0x3d,0xac,0xb1,0x7a,0x19,0x20,0x2c,0x22,0x14,0xbf,0x88,0x8b,0x90,0x4c,0x17,0x13,0x26,0xb2,0x98,0x94,0x9a,0xba,0x34,0x1e,0x1f,0x17,0x1e,0x9d,0xa0,0xa5,0x67,0x1d -,0x13,0x0b,0x22,0xa0,0x93,0x9e,0x39,0x49,0x2e,0x29,0x21,0x36,0x8c,0x89,0x9c,0xae,0x3b,0x28,0x21,0x27,0xaf,0x98,0xa2,0x43,0x22,0x1c,0x18,0x16,0x19,0xb4,0x9f,0xaa -,0xb1,0x2a,0x14,0x0d,0x4a,0x97,0x8d,0x95,0xdb,0x5b,0x30,0x16,0x17,0x1f,0x97,0x85,0x8f,0x9a,0xe5,0x1c,0x0b,0x0c,0x24,0x9d,0x91,0xaa,0x1f,0x0f,0x0c,0x11,0x1f,0xb8 -,0x8b,0x87,0x8d,0xa6,0x1f,0x0c,0x15,0xec,0x9b,0x92,0x94,0x9a,0xab,0x29,0x19,0x1b,0x1d,0xa2,0x98,0x9e,0xb2,0x1f,0x0c,0x0b,0x19,0xf2,0xa2,0x9e,0x5a,0x5f,0xb6,0x27 -,0x2e,0x2d,0xa2,0x8e,0x9a,0xae,0x31,0x23,0x31,0xbe,0x9e,0x93,0x92,0xcb,0x17,0x0e,0x0b,0x1f,0xc8,0x9e,0x93,0xb7,0x30,0x1a,0x0a,0x0a,0x2f,0x8e,0x88,0x8c,0xad,0x21 -,0x21,0x15,0x14,0x28,0x9c,0x84,0x87,0x98,0x2f,0x16,0x0e,0x17,0xce,0xa5,0x94,0x99,0x39,0x16,0x0a,0x0c,0x18,0x1e,0x9d,0x8b,0x8b,0x91,0xca,0x12,0x0f,0x3f,0xaa,0x9a -,0x9a,0xad,0xcf,0x25,0x1b,0x1f,0xdc,0x8f,0x8f,0xac,0x3c,0x24,0x13,0x0e,0x1e,0xae,0x9a,0xae,0x20,0x11,0x22,0x4f,0xb9,0x9e,0x8d,0x8e,0x95,0x45,0x10,0x0d,0x0f,0xa7 -,0x8a,0x89,0x91,0x43,0x16,0x12,0x0d,0x16,0x69,0x8f,0x8e,0xa1,0x3d,0x18,0x0e,0x08,0x12,0x9c,0x88,0x88,0x9c,0x27,0x13,0x0f,0x14,0x29,0x8d,0x88,0x8a,0x95,0x2f,0x13 -,0x0b,0x1c,0xa3,0x98,0x9a,0xab,0x26,0x1c,0x0f,0x0e,0x1d,0xa1,0x9a,0xb5,0xa4,0x4f,0x21,0x1a,0x24,0x98,0x8a,0x93,0x4c,0x18,0x14,0x1a,0x3e,0xa5,0x8d,0x8c,0x99,0xae -,0x1c,0x0e,0x0f,0x1e,0x99,0x8f,0x97,0xbe,0x18,0x0b,0x04,0x12,0x67,0x90,0x85,0x8e,0x9d,0x52,0x0f,0x0a,0x16,0x9f,0x87,0x89,0xa3,0x26,0x15,0x10,0x1a,0x2e,0x9b,0x89 -,0x92,0xa2,0x2a,0x09,0x08,0x0e,0xc6,0x91,0x8e,0x9a,0x5f,0x1a,0x0a,0x0e,0x69,0x8e,0x88,0x96,0xbb,0xd1,0x22,0x17,0x1b,0xaf,0x8d,0x90,0xaa,0x1f,0x16,0x0e,0x12,0x2f -,0x97,0x8b,0x93,0xde,0x19,0x14,0x0b,0x1a,0x96,0x8d,0x8d,0x9d,0x1f,0x19,0x0f,0x0f,0x59,0x8b,0x86,0x8c,0xa0,0x2d,0x0f,0x04,0x0b,0xae,0x89,0x87,0x9a,0x1e,0x0c,0x06 -,0x06,0x18,0x8d,0x82,0x8a,0x9c,0x23,0x0e,0x0b,0x14,0xa9,0x89,0x87,0x8e,0xbd,0x16,0x07,0x06,0x1f,0x8f,0x87,0x8b,0x97,0x42,0x0f,0x06,0x0a,0x63,0x93,0x95,0xba,0x3b -,0x1f,0x15,0x17,0x2d,0x91,0x8b,0x96,0xa6,0x2a,0x14,0x13,0x20,0x9f,0x8b,0x8b,0x96,0x3e,0x0b,0x06,0x09,0x36,0x8d,0x89,0x92,0xba,0x1d,0x07,0x07,0x1e,0x97,0x87,0x89 -,0xa3,0x47,0x11,0x05,0x0a,0x3d,0x89,0x85,0x86,0x90,0x27,0x09,0x04,0x10,0xa6,0x89,0x85,0x90,0xb1,0x0d,0x03,0x07,0x1f,0x9e,0x8b,0x83,0x89,0xac,0x09,0x01,0x09,0x38 -,0x92,0x8f,0x9f,0xd1,0x24,0x1f,0x3b,0x9e,0x8d,0x91,0x9f,0xb9,0x1f,0x0a,0x04,0x19,0x93,0x85,0x88,0xad,0x14,0x07,0x09,0x14,0xb7,0x9c,0x99,0x93,0x93,0xbf,0x0e,0x07 -,0x17,0x93,0x88,0x87,0x9d,0x47,0x16,0x0a,0x13,0xa3,0x99,0x96,0x8e,0x9f,0x1b,0x04,0x03,0x07,0xa1,0x83,0x81,0x8d,0xdd,0x0d,0x08,0x0d,0x2d,0xa7,0xa8,0x92,0x8b,0x91 -,0x29,0x0b,0x18,0xaf,0x9e,0xa1,0xc3,0x3e,0x0f,0x08,0x1b,0x96,0x8e,0x9e,0xab,0xa2,0xae,0x12,0x07,0x14,0xb3,0x8a,0x8a,0x9c,0x2b,0x0b,0x07,0x11,0x9c,0x8e,0x90,0x9a -,0x9e,0x6f,0x11,0x0c,0x25,0x9e,0x8d,0x99,0x3a,0x29,0x0c,0x08,0xb5,0x88,0x89,0x9a,0x5b,0x4b,0x1e,0x09,0x04,0x11,0xae,0x94,0x89,0x85,0x94,0x52,0x11,0x13,0x24,0x3f -,0xa9,0xac,0x9a,0xa3,0x1a,0x15,0x1c,0x34,0xa3,0x9e,0x9e,0xd3,0x17,0x06,0x0f,0x94,0x88,0x8d,0x9a,0xaa,0x22,0x0c,0x0b,0x2f,0x96,0x90,0x96,0xaf,0x2f,0x1a,0x10,0x25 -,0xad,0xbf,0x9f,0x9c,0xc2,0x24,0x1c,0x23,0xaf,0xa6,0x9a,0x9b,0xab,0x3e,0x15,0x17,0x2b,0x9b,0x94,0x8d,0x9f,0x5f,0x32,0x0e,0x0a,0x1a,0x69,0xaa,0xb5,0xb5,0x3e,0x1a -,0x12,0x1f,0x9d,0x9a,0x99,0x99,0x99,0xbb,0x18,0x1e,0x45,0xe6,0xa6,0xb3,0xe7,0x2b,0x27,0x25,0xc6,0x9d,0x9d,0xa5,0xda,0x33,0x21,0x12,0x09,0x16,0x99,0x83,0x8c,0x8f -,0xaf,0x1b,0x08,0x14,0xa2,0xa0,0xba,0xc9,0xab,0xc6,0x15,0x0f,0x3a,0xaa,0x98,0xa3,0xd8,0x13,0x0a,0x17,0x95,0x86,0x8d,0x99,0xbc,0x5a,0x10,0x08,0x0c,0x2e,0x8e,0x86 -,0x96,0xb8,0x2f,0x1a,0x0d,0x0f,0x53,0xab,0xa5,0xa8,0x99,0x92,0xde,0x1f,0x29,0xad,0x9d,0xae,0xc9,0x2a,0x14,0x14,0x33,0x96,0x95,0xb4,0xbb,0x4a,0x21,0x0e,0x15,0x18 -,0x3a,0x95,0x9a,0xaa,0x2c,0x1d,0x1f,0x38,0x9c,0x94,0x99,0xa1,0xe3,0x5b,0x20,0x11,0x1f,0xae,0x95,0xb3,0xcf,0xbf,0x27,0x1d,0x24,0x9f,0x93,0x99,0x99,0x9f,0x28,0x09 -,0x05,0x14,0xa8,0x8c,0x8b,0x92,0xa9,0x24,0x0e,0x0a,0x22,0x9e,0xa6,0xd7,0x41,0xa1,0xa8,0x29,0x36,0xbe,0x96,0x98,0xe7,0x47,0x29,0x0e,0x10,0x2e,0xa0,0x9f,0x9d,0x96 -,0x9f,0xc8,0x11,0x0d,0x1b,0xb1,0x96,0x9e,0xa7,0x3c,0x1a,0x15,0x1c,0x34,0x93,0x8b,0x8f,0x95,0x2c,0x0d,0x0b,0x18,0xb3,0x93,0xa9,0xdf,0x2d,0x1c,0x1c,0x22,0x9b,0x8f -,0x96,0x9d,0xad,0x3e,0x16,0x09,0x19,0x66,0x95,0x8e,0xa1,0xbb,0x17,0x0e,0x16,0x2c,0xa5,0x91,0x93,0x95,0xac,0x1b,0x0e,0x0c,0x36,0x91,0x8f,0x92,0xa5,0x58,0x19,0x09 -,0x11,0x6b,0x93,0x93,0xa4,0x4a,0x13,0x0d,0x13,0x38,0x92,0x8a,0x8d,0x97,0xde,0x18,0x0a,0x09,0x24,0xcb,0x8f,0x8b,0x8f,0x9b,0x1a,0x0a,0x0e,0xb3,0x8d,0x8e,0xa8,0x26 -,0x12,0x0c,0x0b,0x25,0x9c,0x87,0x88,0x98,0xaa,0x17,0x0f,0x0f,0x2b,0x9e,0x9f,0xa0,0xb3,0x23,0x14,0x0d,0x1e,0x96,0x8c,0x8a,0x9f,0xcd,0x28,0x0d,0x0d,0x1a,0xa7,0x8d -,0x92,0xa4,0xb6,0x2a,0x18,0x0c,0x19,0xa5,0x8f,0x8e,0xa4,0x2b,0x0e,0x08,0x13,0xa0,0x8a,0x87,0x91,0xd0,0x20,0x0e,0x0b,0x19,0xa9,0x8d,0x8d,0xae,0x59,0x1b,0x0f,0x14 -,0x17,0xa5,0x91,0x97,0x9f,0x31,0x19,0x14,0x14,0xeb,0x9f,0x97,0x94,0xa2,0xa8,0x3d,0x1e,0x1f,0x48,0x9e,0x9b,0xad,0x3f,0x1d,0x12,0x12,0x0f,0x3d,0x98,0x90,0x95,0xae -,0x6a,0xda,0xda,0x3b,0x34,0x44,0xc1,0x54,0x54,0x53,0x24,0x27,0x4c,0xa5,0x9b,0xa5,0xa7,0xd3,0x57,0x2c,0x18,0x1b,0x6a,0xaa,0xae,0xc9,0x58,0xe6,0xd4,0x38,0x35,0xc2 -,0xba,0xaf,0x34,0x63,0xb0,0x3b,0x41,0x44,0xbf,0x9e,0xa5,0xb4,0xd5,0x25,0x21,0x1e,0x41,0xd5,0x5e,0xb1,0xad,0x8f,0x9a,0x1f,0x10,0x0d,0x37,0x9c,0xa3,0xa6,0x4f,0x24 -,0x1d,0x13,0x47,0x9f,0x9c,0x97,0x9b,0x9b,0xbe,0x26,0x19,0x1f,0xb4,0xad,0xad,0xa7,0x2f,0x1a,0x0d,0x13,0xc9,0xb0,0x94,0x97,0x8f,0x99,0x23,0x0d,0x0a,0x2e,0xab,0xa0 -,0x9a,0xa9,0xac,0x34,0x14,0x1b,0x2b,0xa2,0x95,0x8e,0x96,0x21,0x0d,0x08,0x11,0xaf,0x9a,0x8f,0x92,0xa4,0x5a,0x16,0x1b,0x3f,0xcb,0x9d,0x9d,0xa4,0xa9,0x1b,0x0e,0x10 -,0x2f,0x97,0x8e,0x8d,0xa6,0x24,0x10,0x09,0x14,0x57,0xa3,0x93,0x91,0x98,0xba,0x1d,0x17,0x23,0xbf,0x9e,0x95,0xa5,0xc9,0x18,0x08,0x0d,0x1d,0x9a,0x8a,0x8b,0x90,0xc6 -,0x25,0x0f,0x0d,0x1d,0x63,0x96,0x97,0xa7,0x3d,0x19,0x16,0x19,0xe8,0x91,0x8e,0x8e,0x99,0x3e,0x18,0x0a,0x0f,0x34,0x93,0x8b,0x9e,0xba,0x22,0x12,0x17,0x1a,0xbc,0x96 -,0x97,0x9f,0x6f,0x37,0x18,0x0d,0x1a,0xc6,0x8e,0x8e,0x9f,0x35,0x14,0x1c,0x24,0xaa,0x92,0x9e,0xa0,0xbb,0x26,0x1e,0x11,0x1a,0xba,0x9b,0x8d,0x99,0xb6,0x22,0x0d,0x0f -,0x16,0xe6,0x9e,0x9b,0x98,0xbf,0xec,0x34,0x26,0xae,0x9e,0x97,0x9f,0x69,0x20,0x0f,0x15,0x1a,0x3b,0x9c,0x97,0x92,0xa4,0xd9,0x26,0x16,0x24,0x2e,0xb0,0x9a,0xb1,0x48 -,0x32,0x24,0x28,0x22,0x48,0xac,0x9e,0x9b,0xae,0xa7,0x44,0x1e,0x1e,0x32,0xae,0xa5,0xc5,0x34,0x2c,0x2f,0x3e,0x36,0xa8,0x9e,0xac,0xc8,0x2a,0x3f,0x71,0x41,0x2b,0x35 -,0xae,0xa8,0xa6,0xb7,0x4a,0x44,0x32,0x2f,0xef,0xb1,0xb6,0x45,0x39,0x2f,0x42,0x3d,0x3c,0xbf,0xfb,0xa9,0xaa,0xd0,0x60,0x2c,0x1e,0x26,0xae,0xa3,0xb0,0xe0,0x44,0x38 -,0x46,0x4e,0xa5,0x9b,0x9c,0xb6,0x29,0x25,0x19,0x1d,0x21,0x2f,0xbf,0xaf,0xa3,0x98,0x9a,0xa9,0x26,0x1b,0x1f,0x2b,0xa8,0xac,0xc7,0x2b,0x21,0x31,0x76,0xb0,0xa4,0xa3 -,0x9c,0xa6,0x3f,0x24,0x1b,0x29,0x34,0xb4,0x9f,0xa4,0xdc,0x1c,0x1b,0x30,0xdf,0xb4,0xaa,0xb9,0xa1,0xa9,0xc6,0x2a,0x1c,0x2e,0x6c,0xa7,0xc9,0xdc,0xc4,0xee,0x59,0x1f -,0x31,0xa4,0x9f,0xa1,0xc5,0x2f,0x1e,0x15,0x21,0xbb,0x8e,0x90,0xbd,0x1f,0x19,0x1f,0x3d,0xbf,0xb5,0xa8,0xaf,0xb3,0xd0,0x3c,0x26,0x28,0xdc,0x9e,0x9d,0xaf,0x2b,0x1a -,0x1d,0x20,0xfc,0xb2,0xad,0xbb,0xcf,0xac,0xb4,0x5a,0x2c,0x44,0xa8,0x9d,0xa0,0x52,0x1a,0x19,0x14,0x20,0xc5,0xa1,0x92,0x9a,0x9e,0x3a,0x19,0x19,0x1f,0xab,0x9a,0x9f -,0xb6,0x17,0x16,0x21,0xc2,0x93,0x9b,0xa7,0x31,0x4a,0xbc,0x2e,0x20,0x1e,0xb3,0x97,0xa0,0xb3,0x1e,0x18,0x1f,0x32,0xaf,0xb1,0xa7,0xba,0xb8,0xa4,0xdd,0x36,0x1f,0x26 -,0xc4,0xad,0xa6,0x7d,0x22,0x1f,0x32,0x9e,0x95,0x9b,0xa6,0x5d,0x3c,0x19,0x0f,0x17,0x45,0x92,0x99,0xba,0x2a,0x19,0x1f,0x32,0x9d,0x9b,0xad,0xdb,0x31,0xbd,0x5e,0x36 -,0x2d,0x3c,0x9e,0x9b,0xa2,0x54,0x19,0x16,0x21,0xac,0x98,0xa4,0x43,0x2a,0xe6,0x3f,0x1d,0x1f,0x3d,0x9c,0x9c,0xac,0x3e,0x1f,0x1f,0x1f,0xb9,0xa0,0x94,0xa3,0xd8,0xde -,0x46,0x3e,0x2d,0x48,0xb7,0xa1,0xaf,0x25,0x10,0x0f,0x2c,0x93,0x93,0x9d,0xdb,0x25,0x28,0x1e,0x3e,0x40,0xbc,0xac,0xc1,0xb1,0x70,0x31,0x22,0x2e,0xa8,0x97,0x99,0xaa -,0x2e,0x28,0x2c,0x4e,0xaf,0xb4,0xb0,0xca,0xbf,0x27,0x15,0x12,0x1e,0xb5,0x99,0x94,0xa3,0x4f,0x1f,0x13,0x1b,0x54,0xa0,0x9c,0xaa,0xb2,0x3a,0x24,0x2e,0xb2,0x9f,0x90 -,0x92,0xc6,0x1e,0x0f,0x18,0x39,0xbc,0xa4,0xb6,0x66,0x2f,0x2f,0x2f,0x25,0x2e,0xb7,0x9c,0x9b,0xaf,0x2a,0x17,0x12,0x32,0x99,0x8c,0x99,0x34,0x17,0x1c,0x3e,0xa7,0xac -,0xb8,0x9a,0x99,0xac,0x1e,0x0f,0x1f,0x47,0xa6,0xa8,0xaf,0x48,0x15,0x10,0x1e,0xbd,0xb0,0xb2,0x9f,0x9d,0xb3,0x38,0x1a,0x1e,0xbb,0x92,0x96,0xbb,0x1e,0x18,0x33,0xa5 -,0x9c,0xbb,0xdc,0xbf,0xaa,0xe7,0x1b,0x10,0x19,0xb8,0x9f,0xac,0x42,0x1a,0x1a,0x4f,0x9f,0x9e,0xaa,0xcc,0x52,0xaf,0xaf,0x6c,0x34,0xf6,0xab,0xa8,0xa4,0x42,0x0f,0x0f -,0x37,0x9c,0x9d,0xb7,0x51,0xba,0xa9,0x30,0x22,0x15,0x1c,0xad,0x9d,0xa9,0x29,0x1b,0x2e,0x9d,0x8d,0x99,0x45,0x16,0x14,0x2e,0x36,0xb7,0x9c,0x8f,0x97,0xaa,0x14,0x0d -,0xcc,0x8f,0x97,0xaf,0x2e,0x0c,0x1d,0x1b,0x14,0x34,0xa2,0x90,0x97,0x32,0x0d,0x19,0x6c,0x1b,0x9f,0x87,0x85,0x8d,0xa6,0x62,0x11,0x1e,0x2c,0xba,0x24,0x0a,0x0f,0x34 -,0x28,0x13,0x46,0xa4,0x99,0x8e,0x8d,0x9a,0xda,0x33,0xb9,0xe8,0x26,0x4e,0x93,0x68,0x0a,0x0c,0x1c,0xb7,0x94,0x92,0xb6,0x2f,0x34,0x35,0x2f,0x1a,0x2c,0x89,0x86,0x96 -,0x1b,0x09,0x04,0x13,0x9e,0x94,0x8d,0x8f,0x9c,0xee,0x17,0x0a,0x44,0x87,0x85,0x9c,0x2c,0x0b,0x04,0x1a,0xa7,0xa7,0xb2,0xb3,0xa3,0xae,0x17,0x0e,0x2e,0xad,0x32,0xad -,0x99,0xa3,0x9e,0x9e,0xa2,0xaf,0xa6,0xb9,0x46,0x16,0x0b,0x16,0x2a,0x29,0x41,0xa1,0xaa,0xa2,0xac,0x36,0xbd,0x9e,0x9d,0x94,0xb4,0x1c,0x1f,0x55,0x26,0x10,0x1f,0x49 -,0xae,0xa1,0xcf,0x2a,0x1e,0x34,0x98,0x8e,0xaa,0x39,0xa0,0x9f,0x1d,0x1b,0x20,0x17,0x2d,0xb8,0xaa,0xc1,0xac,0x9c,0xa3,0x1f,0x16,0xab,0x8c,0x95,0x7a,0x28,0x0e,0x10 -,0x2c,0xa6,0xa1,0x5f,0x25,0x25,0x3d,0x48,0xa4,0x98,0xbc,0x27,0x2a,0x39,0xb8,0x9f,0x99,0x93,0x99,0xb7,0x2d,0x10,0x0b,0x1d,0xb4,0xa0,0x39,0x1f,0x2a,0x2c,0x6a,0xae -,0x9a,0x92,0x9d,0xba,0x40,0x16,0x0f,0xc7,0x8f,0x9e,0x28,0x1a,0x2b,0xa9,0xad,0xb2,0x3d,0x1f,0x25,0xce,0xa3,0x4a,0xd8,0xa5,0xa5,0xb4,0xa9,0xdc,0x1e,0x19,0x1f,0x37 -,0x3d,0xbf,0x9b,0x9c,0x30,0x27,0x34,0x39,0x36,0xa2,0x90,0x99,0x49,0x1d,0x20,0x29,0x5e,0x79,0xcb,0x3c,0x2f,0xb9,0x54,0x19,0x17,0x48,0x95,0x8d,0x8f,0x9d,0xab,0xb6 -,0x3d,0x2d,0x18,0x0e,0x28,0xb0,0x77,0x1e,0x0f,0x19,0x2b,0xa8,0x92,0x8a,0x89,0xa4,0x2d,0x19,0x15,0x27,0x9e,0x90,0xc5,0x1a,0x15,0x14,0x2c,0xad,0x9b,0x99,0xa9,0x3b -,0x24,0x25,0x4e,0x96,0x8c,0x99,0xdd,0x2c,0x1e,0x15,0x12,0x1e,0x2c,0xd4,0xaa,0xa4,0xbe,0x26,0x3a,0xbc,0xb3,0xc2,0xb2,0xa7,0xa8,0x40,0x27,0x2a,0x35,0x7d,0xb7,0xa8 -,0xc3,0xac,0xb0,0xd5,0x2b,0x23,0x48,0xaf,0x9c,0x9f,0xaf,0xaf,0x5e,0x2f,0x1d,0x0e,0x14,0x2a,0xb5,0xd2,0x2c,0x26,0x28,0xc1,0xa2,0xa3,0x9c,0x97,0x97,0x9a,0xdb,0x22 -,0x29,0xbb,0xae,0xef,0x37,0x3d,0x3c,0x33,0x3b,0x2d,0x27,0x24,0x2e,0x28,0x26,0x6e,0xa5,0xa3,0xbd,0x4f,0x79,0xa3,0xa3,0xca,0xfd,0x55,0x4f,0x36,0x3e,0xd9,0xab,0x98 -,0x99,0xb4,0x25,0x13,0x1d,0xb6,0xa9,0xaf,0xc0,0xbb,0x3a,0x1b,0x15,0x12,0x24,0xa8,0xa4,0xd7,0x2b,0x24,0x36,0xaa,0x92,0x8d,0x8b,0x8d,0x9e,0x2c,0x0d,0x0d,0x1d,0x48 -,0xce,0x45,0x2f,0x2c,0x2f,0x23,0x29,0xcd,0x9f,0x99,0x9a,0xb5,0x4e,0x49,0xe8,0xd8,0x2f,0x2b,0x46,0xb1,0xae,0x45,0x2f,0x2a,0x2d,0xfa,0xea,0xc9,0xaa,0x9a,0x9e,0xd1 -,0x2a,0x1f,0x34,0xb8,0xbf,0xfe,0x41,0x25,0x1e,0x1f,0x30,0xa7,0x96,0x95,0xa1,0xc7,0x78,0xbb,0xa8,0xbc,0x45,0x3f,0x34,0x2e,0x1e,0x19,0x22,0x2c,0xd9,0x52,0x24,0x21 -,0x29,0xb8,0x9e,0x97,0x91,0x95,0x99,0xa7,0xc5,0x2e,0x1d,0x25,0x2b,0x29,0x1c,0x1c,0x2f,0xaa,0x9f,0xa8,0xaf,0xc8,0xb8,0xbb,0xc2,0xfd,0x51,0x66,0x5b,0x3f,0x47,0xd9 -,0xe6,0x29,0x18,0x21,0xbb,0x9e,0xa0,0xbf,0x47,0xcc,0xa3,0x9c,0xae,0x6f,0xd3,0xc7,0x5e,0x20,0x1f,0x37,0x3f,0x3a,0x2e,0x3a,0xb8,0xa2,0xa5,0xc1,0x27,0x24,0x50,0xa9 -,0x9f,0xa2,0xb4,0x27,0x1c,0x18,0x1e,0x30,0x41,0xb9,0xa8,0xaa,0xd2,0x45,0x66,0xbf,0xa6,0x97,0x91,0x99,0xbd,0x27,0x1a,0x1b,0x28,0x30,0x28,0x19,0x15,0x27,0xb5,0xa2 -,0x9f,0xa0,0x9f,0xa7,0xaa,0xbb,0x3f,0x44,0x53,0x42,0x2d,0x30,0x53,0xbc,0x48,0x2c,0x3d,0xf0,0xbe,0xce,0x58,0xdf,0x53,0xb5,0xa0,0xaf,0xbe,0xbc,0xbd,0x45,0x26,0x27 -,0x2e,0x29,0x20,0x20,0x48,0xa2,0x9b,0x9e,0xd1,0x22,0x26,0xb8,0xa1,0xa3,0x9b,0x9e,0xba,0x33,0x1d,0x1c,0x1e,0x1e,0x2c,0x65,0xc1,0xcf,0xca,0xae,0xaf,0xaa,0x9b,0x96 -,0x9d,0xbd,0x2f,0x1e,0x18,0x1c,0x3d,0xcf,0x64,0x2a,0x27,0x3e,0xda,0xb7,0xa6,0xaf,0xbe,0xb1,0xa9,0xaf,0xc6,0xc3,0x4f,0x34,0x2d,0xcc,0xca,0x46,0x4b,0x53,0xcf,0x4e -,0x38,0x33,0x3d,0x39,0xc9,0xbb,0x38,0x29,0x3d,0xaf,0xae,0xaf,0xb9,0x48,0x25,0x1a,0x19,0x2d,0xa3,0x91,0x8f,0xa2,0x30,0x22,0x3a,0xc8,0xae,0xa3,0xa2,0xee,0x26,0x1f -,0x1f,0x21,0x28,0x3e,0x6f,0x6e,0x3a,0x37,0x38,0x57,0xb3,0x98,0x8f,0x9b,0xaf,0xd6,0x4c,0x2c,0x1e,0x1f,0x27,0x30,0x5e,0xc8,0xb9,0xb6,0x3c,0x3a,0x4a,0xcf,0xb4,0xae -,0xb1,0xa8,0xab,0x42,0x37,0x41,0xca,0xbe,0x3b,0x1f,0x1a,0x1b,0x36,0xa8,0x9c,0x9f,0xb9,0xd1,0xcd,0x57,0x50,0x53,0xb8,0xae,0xa9,0xa8,0xb4,0x3e,0x1b,0x17,0x24,0xb0 -,0xab,0xbc,0xe0,0x3d,0x6b,0xac,0xa8,0xaa,0xa8,0xa4,0xb1,0x41,0x1c,0x11,0x17,0x2c,0xca,0xbd,0xc2,0xcb,0x5b,0x37,0x34,0x6e,0xa8,0x9c,0x97,0x9d,0xaa,0xee,0x2b,0x23 -,0x27,0x3f,0x43,0x24,0x1c,0x27,0xd6,0xac,0xa4,0xaf,0xc1,0xc0,0xde,0x6e,0x3f,0x51,0x4a,0xdc,0xbc,0xb6,0xaf,0xc1,0x61,0x2d,0x23,0x2c,0x30,0x4f,0xd4,0xaf,0xaa,0xbb -,0xd0,0x70,0xb4,0xbb,0x62,0x35,0x44,0xca,0xe1,0x31,0x2c,0x45,0xae,0xa7,0xd8,0x31,0x29,0x27,0x3d,0xa7,0x9d,0x9d,0xa1,0xa9,0xbb,0x37,0x1a,0x14,0x10,0x13,0x29,0xd3 -,0xaa,0xac,0xb5,0xac,0x9e,0x9d,0xab,0x58,0x3d,0xd6,0xbd,0xbc,0xcc,0x4b,0x42,0x3f,0x3e,0x37,0x21,0x1d,0x32,0x54,0xdb,0xbe,0xc8,0xa8,0x9e,0xa6,0xde,0x33,0x32,0x36 -,0x7d,0xb0,0xa5,0xb3,0x41,0x2f,0x3f,0x49,0x33,0x34,0x42,0x66,0xde,0xb3,0xba,0xb2,0xac,0xab,0xb0,0x57,0x29,0x1b,0x18,0x1d,0x40,0xca,0xb0,0xab,0xa7,0xae,0xcb,0x4f -,0x33,0x3e,0xbe,0xa0,0x9f,0xac,0xbb,0xc3,0x3f,0x21,0x12,0x14,0x21,0x5c,0xb2,0xbd,0xb7,0xaf,0xa7,0x9e,0x99,0x9f,0xbd,0x31,0x27,0x27,0x2b,0x2f,0x3b,0xca,0xb2,0xac -,0x57,0x1f,0x18,0x1e,0x39,0xaf,0x9e,0x9a,0xa4,0xb0,0xa9,0xa8,0xb6,0x38,0x26,0x21,0x2c,0x32,0x32,0x2f,0x48,0xad,0xa4,0xa7,0x56,0x2f,0x29,0x39,0x49,0xe5,0xbb,0xb8 -,0xa9,0xab,0xbf,0x2a,0x1c,0x19,0x27,0xd5,0xae,0xa9,0xb9,0xbd,0xbd,0xaa,0xa9,0xb6,0xbc,0xbe,0xcd,0x4b,0x49,0x37,0x2a,0x2d,0x38,0x59,0x70,0x30,0x1f,0x2d,0x50,0xb4 -,0xa8,0xa3,0x9e,0x9c,0x9c,0xb6,0x31,0x1d,0x1d,0x2a,0x43,0x57,0xcf,0xca,0xbf,0xc4,0x4d,0x30,0x26,0x3d,0xc2,0xdd,0xef,0xef,0xc1,0xab,0x9f,0xa0,0xb8,0x3b,0x1e,0x1f -,0x27,0x2e,0xda,0xb6,0xbf,0xb3,0xae,0xb3,0x6b,0x27,0x2a,0xd0,0xaa,0xad,0xd1,0x4c,0x6b,0xdd,0x5e,0x32,0x25,0x21,0x28,0x43,0xbc,0xa8,0xa7,0xa5,0x9b,0x97,0x95,0xad -,0x2d,0x21,0x1d,0x19,0x19,0x1f,0x2b,0xc8,0xac,0xad,0xe0,0x2a,0x1f,0x38,0xb6,0xa8,0xa2,0xa5,0xaf,0xb1,0xb1,0xad,0xce,0x2b,0x1c,0x21,0x47,0x73,0xd0,0xc9,0xb6,0xbc -,0xb9,0x4f,0x29,0x25,0x2d,0xf2,0xc6,0xb4,0xad,0xb4,0xbd,0xae,0xb4,0x38,0x1e,0x1e,0x2f,0x36,0x3d,0xbb,0xab,0xa8,0x9f,0x9e,0xa2,0xb7,0x32,0x2a,0x25,0x25,0x3e,0x47 -,0x5f,0xb1,0xab,0xac,0xd2,0x27,0x23,0x2e,0x4e,0xc3,0xba,0xad,0xaa,0xae,0xbf,0x66,0x38,0x2a,0x2a,0x29,0x2a,0x31,0xd7,0xb2,0xad,0xa4,0xac,0xd7,0x2f,0x30,0x35,0x4d -,0xc5,0xab,0xa7,0xae,0xac,0xaf,0xaf,0x3c,0x24,0x20,0x1a,0x1a,0x27,0x2d,0xba,0xa6,0x9f,0x9d,0xa6,0xaf,0x56,0x72,0x3c,0x4e,0x57,0x64,0xc1,0xba,0xaf,0xd5,0x37,0x26 -,0x20,0x34,0x49,0xdf,0xb5,0xaf,0xbd,0xc0,0xe8,0x61,0xc9,0x3b,0x25,0x15,0x1e,0xb4,0x9c,0xa7,0xd1,0xbf,0xaf,0x5b,0x2f,0xac,0x9d,0x97,0xac,0x1b,0x12,0x28,0x9f,0xa5 -,0xcc,0x2e,0x2e,0x1b,0x0f,0x23,0xaf,0x99,0xa3,0x46,0x20,0x2d,0x9d,0x8f,0x9f,0xad,0xb6,0xd2,0x2d,0x1c,0x4e,0xa8,0x9c,0xbc,0x16,0x0c,0x17,0xbd,0xa9,0xaf,0xa5,0xa5 -,0xc3,0x1f,0x2e,0x60,0xa4,0x9c,0x6f,0x27,0x1e,0x48,0x69,0xb2,0xab,0x9b,0xb6,0x21,0x21,0x23,0xbb,0x9b,0x96,0x3a,0x19,0x1a,0x6d,0xb2,0xa9,0xab,0xbd,0x4a,0x1d,0x1e -,0x22,0xaa,0x8f,0x94,0xca,0x2c,0x36,0x48,0xb7,0x9b,0x9a,0xaf,0x19,0x0e,0x10,0x27,0x9e,0xa0,0xce,0x20,0x1b,0x32,0xd2,0xa1,0x98,0x9f,0xb4,0x2f,0x1e,0x1f,0xa5,0x94 -,0x9d,0xcc,0x1b,0x1e,0x2b,0xed,0xa4,0xaa,0xc7,0x1c,0x17,0x28,0xa1,0x8f,0x9c,0x69,0x24,0x28,0x25,0x28,0xe7,0xa8,0xa3,0xf6,0x23,0x1e,0x25,0xb9,0xa0,0xa1,0xa9,0x47 -,0x32,0x1e,0x2a,0xc0,0xa2,0x9f,0x57,0x22,0x16,0x3f,0xa9,0xaa,0xcd,0x3b,0xb8,0xb7,0x3b,0x57,0xad,0x9d,0xa4,0x29,0x1b,0x23,0xb0,0xa8,0x43,0x2a,0x29,0x5e,0x35,0xdd -,0xac,0xae,0xcb,0x2f,0x28,0x2d,0xa6,0x95,0x9d,0xcb,0x30,0x4a,0xe2,0x34,0x4c,0x6a,0xf0,0x56,0x32,0x1d,0x20,0x4a,0xb2,0xb3,0xc3,0xa3,0xa7,0xcf,0x3e,0xc5,0xc5,0x55 -,0x33,0x38,0x65,0xbe,0xbd,0x33,0x2c,0xcf,0xaa,0xfd,0xb0,0xa5,0xad,0x38,0x1b,0x1f,0x32,0xad,0xc0,0x3d,0x32,0xce,0xa8,0x36,0x27,0xb7,0x9e,0xc8,0x3f,0x2f,0x33,0xa5 -,0x9e,0xba,0x2f,0x3c,0xab,0xb6,0x2f,0x24,0x28,0x2d,0x2d,0x5e,0x66,0xcd,0xa4,0xa4,0x55,0x2d,0xab,0x9f,0xba,0x4c,0x39,0xc2,0xb9,0x2d,0x1d,0x22,0xc3,0xa1,0xae,0x2d -,0x26,0xf6,0x42,0x37,0xf2,0xdf,0xb4,0xab,0x7e,0x2a,0x31,0xd8,0xbe,0xaa,0xcb,0xc2,0xb4,0x7a,0xc8,0xd6,0x66,0x3a,0x2c,0x22,0x33,0x9f,0x9c,0x69,0x2c,0x2e,0xbd,0xb5 -,0xc8,0xfe,0xc6,0xbd,0x2b,0x1f,0x1d,0x2f,0xc7,0xbf,0xb0,0xa4,0x9a,0xa7,0xc7,0xb6,0xb1,0xa5,0x42,0x1c,0x16,0x1d,0x47,0x3b,0x30,0x2e,0xbe,0x9f,0xac,0xc2,0xc7,0xa3 -,0x9e,0x31,0x15,0x1d,0xb5,0xa9,0xd0,0x4e,0xb8,0xa4,0xbb,0x51,0xc5,0xaa,0xb1,0x25,0x10,0x1a,0xb2,0xa4,0xcf,0x5a,0xae,0xa7,0xb0,0xc2,0x6c,0x3e,0x49,0x55,0x36,0x1f -,0x24,0x62,0xf4,0x59,0xda,0xab,0x9d,0x9e,0xbe,0x33,0x54,0xb9,0x39,0x17,0x17,0xea,0xa7,0xe4,0x29,0x5c,0xa3,0xb5,0xcb,0xc6,0xa9,0x9d,0xba,0x29,0x1e,0x3c,0x60,0x2c -,0x37,0xea,0xad,0xc4,0x41,0xba,0xca,0x4a,0xe2,0xbe,0x33,0x2a,0xdc,0x57,0x4e,0x40,0xd6,0xac,0xaa,0xaf,0x53,0x53,0xb4,0xb2,0x30,0x1d,0x40,0xcd,0x2b,0x24,0xc0,0x9b -,0xa2,0xbd,0x3a,0xbc,0xa2,0xc0,0x24,0x1e,0x3c,0x48,0x29,0x1f,0x3a,0xa2,0x9f,0xae,0xcd,0xd3,0xbc,0xc3,0x47,0x28,0x31,0x42,0x3a,0x31,0x33,0xad,0x9b,0x99,0xc7,0x29 -,0xd3,0xb6,0xc0,0x28,0x1d,0x69,0xb1,0xef,0x2b,0x40,0x9c,0x98,0xb3,0x20,0x25,0x42,0x3a,0x2b,0x23,0xfa,0xc6,0x32,0x2c,0x47,0x9d,0x94,0x99,0xb6,0x26,0x37,0x3f,0x5a -,0x62,0xde,0xb8,0x39,0x2b,0x26,0x4d,0x9e,0x9d,0x69,0x1b,0x26,0xbf,0xbe,0x40,0x34,0xcd,0x5b,0x31,0x31,0xd4,0x95,0x98,0xc6,0x23,0x26,0x77,0xdd,0x39,0xc9,0xa2,0xbf -,0x25,0x19,0x3d,0x98,0x94,0xad,0x28,0x1d,0x27,0x35,0xd8,0x57,0xcb,0xb4,0x34,0x1a,0x1f,0xa1,0x8f,0x93,0xae,0x26,0x23,0x33,0x52,0x3d,0x57,0xad,0xda,0x16,0x12,0xaf -,0x8c,0x94,0xb6,0x1d,0x27,0xb1,0xb5,0x35,0x28,0xba,0x57,0x1a,0x14,0x3f,0x8f,0x8d,0x9a,0x56,0x1f,0x27,0x2b,0x3d,0x5f,0xa7,0xa7,0x18,0x0e,0x1f,0x98,0x8a,0x91,0x57 -,0x1b,0x35,0x46,0x31,0x31,0x49,0xa8,0xcd,0x1a,0x15,0xd8,0x8f,0x8f,0xa2,0x2b,0x30,0x35,0x27,0x32,0xbd,0x9c,0x5a,0x11,0x0e,0x4a,0x8a,0x8a,0xae,0x19,0x1a,0x43,0xd0 -,0x49,0x57,0x9c,0x9f,0x27,0x0d,0x13,0x9c,0x8c,0x95,0x4f,0x22,0x2a,0x1c,0x1f,0x38,0x9a,0x93,0x2e,0x0f,0x18,0x98,0x89,0x98,0x2d,0x13,0x38,0xbe,0x46,0x2d,0x3e,0xa5 -,0x55,0x18,0x0f,0x3d,0x8d,0x8d,0x9e,0x2e,0x1f,0x2d,0x28,0x5a,0xa5,0x91,0xa3,0x14,0x06,0x15,0x8c,0x86,0x9d,0x1c,0x16,0xd5,0x69,0x2c,0x2c,0xab,0x9b,0x2b,0x0e,0x12 -,0xa0,0x8b,0x9d,0x4c,0x26,0x44,0x2e,0x2a,0xe5,0x9e,0x94,0x2e,0x0a,0x0d,0x9d,0x84,0x8b,0xb8,0x13,0x1c,0x37,0x37,0x5b,0x39,0xa6,0xae,0x17,0x0b,0x1b,0x91,0x89,0x90 -,0x38,0x1d,0x3f,0x24,0x21,0xd0,0x90,0x97,0x17,0x06,0x11,0x8d,0x82,0x94,0x2c,0x12,0x28,0x34,0x2d,0x3d,0xa6,0x9c,0x24,0x0b,0x0e,0xb4,0x8a,0x8d,0x9e,0x34,0x28,0x1b -,0x15,0x4d,0x9a,0x90,0xbd,0x0f,0x09,0x29,0x8a,0x86,0x9d,0x1b,0x14,0x31,0x3a,0x2f,0x69,0x9f,0xa5,0x1f,0x0a,0x18,0x90,0x87,0x94,0xd7,0x1e,0x28,0x1e,0x1d,0xad,0x8d -,0x95,0x1a,0x06,0x09,0xa2,0x85,0x8e,0x55,0x18,0x1e,0x2c,0x37,0xbe,0x9e,0x9d,0x36,0x14,0x12,0x3b,0x8e,0x8e,0xa2,0x28,0x20,0x35,0x4b,0xc1,0xa1,0x9a,0xe5,0x0d,0x07 -,0x23,0x8c,0x86,0x9d,0x19,0x10,0x2b,0x51,0xbf,0xab,0x9d,0xb1,0x1b,0x0c,0x14,0xa1,0x8b,0x93,0xb5,0x33,0x2b,0x29,0x2c,0xdf,0x9e,0x9d,0x24,0x0c,0x13,0xa6,0x8c,0x8e -,0xb4,0x17,0x17,0x39,0xc0,0xb5,0xb4,0xc0,0x26,0x10,0x15,0xb0,0x8b,0x8a,0x9d,0x27,0x1a,0x1e,0x2d,0xd1,0xb0,0xa8,0x5f,0x13,0x0f,0x40,0x8f,0x89,0x8f,0x3d,0x16,0x21 -,0x3a,0x39,0x68,0x61,0x2e,0x21,0x1b,0x3a,0x94,0x8b,0x97,0x5b,0x1c,0x1f,0x2c,0xf9,0xbe,0xc9,0x38,0x1f,0x14,0x1c,0x99,0x86,0x8b,0xae,0x1b,0x14,0x1d,0x44,0xaa,0xab -,0x65,0x1e,0x18,0x1d,0xb1,0x8e,0x8e,0xa7,0x23,0x19,0x28,0x4e,0xaf,0xb8,0x27,0x21,0x1f,0x20,0xb4,0x8c,0x8b,0xa1,0x27,0x18,0x23,0xc1,0xa0,0xb0,0x2a,0x17,0x15,0x1b -,0xee,0x96,0x8d,0x99,0x3b,0x20,0x35,0xbd,0xb8,0xba,0x50,0x1d,0x19,0x25,0x72,0xa1,0x98,0x96,0xb5,0x36,0x5c,0xec,0xbd,0xbd,0x27,0x17,0x13,0x1d,0x51,0xa0,0x94,0x99 -,0xb1,0x32,0x3d,0xb9,0xaa,0xb1,0x64,0x1d,0x14,0x16,0x49,0xaa,0x9b,0x90,0xa8,0x34,0x32,0xbc,0xc3,0xcb,0x4a,0x1c,0x10,0x18,0x2e,0xa2,0x95,0x98,0xb2,0x22,0x30,0xb0 -,0xa2,0xa4,0x45,0x19,0x13,0x1d,0xd9,0x9b,0x92,0x96,0xc5,0x1e,0x30,0xcc,0xb4,0xad,0x29,0x18,0x1d,0x26,0xcf,0xa5,0x9c,0xa3,0xb5,0x4e,0x37,0xe2,0xcd,0xbf,0x2d,0x1b -,0x1f,0x3c,0xae,0xa4,0xaf,0xaa,0xad,0xc3,0xb7,0x4e,0x33,0x3c,0x35,0x27,0x2d,0xb6,0xbf,0xd1,0xd2,0x4c,0xb7,0xa2,0x9f,0x57,0x1d,0x22,0x4a,0xbf,0xc8,0x30,0x2e,0x2b -,0xcc,0xa7,0xac,0xa2,0xa8,0x42,0x20,0x2a,0xbd,0xa2,0xa3,0x27,0x10,0x1e,0xe9,0x9a,0x9c,0xa4,0x75,0x2b,0x27,0x36,0xbe,0xa0,0x9e,0x2f,0x0e,0x0d,0x2b,0x91,0x8d,0xb5 -,0x23,0x1f,0x4d,0xaa,0x9a,0x99,0xa4,0x1b,0x08,0x0c,0xbd,0x89,0x8b,0xa0,0x14,0x0c,0x2f,0x9d,0x8e,0x8e,0x35,0x0d,0x08,0x11,0x9d,0x90,0x96,0xc1,0x19,0x16,0x45,0x94 -,0x8a,0x97,0x15,0x06,0x0f,0xbc,0x96,0x99,0xa7,0x36,0x18,0x25,0xa5,0x8e,0x8b,0xef,0x0d,0x0a,0x18,0x9c,0x9c,0xb8,0x2e,0x1d,0x2f,0xa3,0x92,0x91,0xb2,0x11,0x0d,0x29 -,0x9b,0x97,0xbb,0x35,0x17,0x14,0xd3,0x90,0x89,0xab,0x0f,0x0f,0x2c,0x9c,0x9c,0xac,0xbe,0x19,0x13,0x2d,0x99,0x89,0x9c,0x12,0x05,0x1b,0x9d,0x8f,0x94,0xd6,0x14,0x0d -,0x1e,0x9a,0x88,0x8b,0x33,0x06,0x0b,0xfe,0x91,0x8c,0x9b,0x20,0x0a,0x0f,0xac,0x88,0x87,0x5b,0x08,0x09,0x24,0x9a,0x8a,0x90,0x49,0x09,0x06,0x3c,0x89,0x84,0x9f,0x12 -,0x07,0x0f,0x4b,0x8e,0x8b,0xa7,0x1a,0x08,0x17,0x99,0x86,0x8e,0x1f,0x0c,0x0d,0x4d,0x98,0x8f,0x93,0x1f,0x07,0x0c,0xb1,0x8c,0x86,0xa9,0x0f,0x0a,0x1d,0x9b,0x8b,0x93 -,0x37,0x0b,0x0b,0x3c,0x8e,0x8a,0xa7,0x18,0x0c,0x1c,0xaa,0x8e,0x8a,0xdc,0x08,0x06,0x1b,0x87,0x86,0x94,0x10,0x0f,0x20,0xb0,0x9c,0xad,0x92,0x06,0x02,0x00,0x17,0x8d -,0x98,0x52,0x02,0x14,0x90,0x8b,0x89,0x86,0xb5,0x14,0xa2,0x97,0x92,0x80,0x99,0x0b,0x29,0x09,0xc0,0x80,0x8a,0x97,0x1c,0x0d,0x13,0x9e,0x9e,0x1a,0x01,0x03,0x03,0x0e -,0x15,0x4f,0x11,0x01,0x04,0x03,0x9d,0x9a,0x2d,0x15,0x15,0x25,0xa3,0x97,0x8e,0x8d,0xb9,0x1d,0x22,0x8c,0x80,0x85,0x96,0x9e,0x8e,0x89,0x83,0x82,0x80,0x8a,0xb2,0xbf -,0xad,0x8d,0x82,0x91,0x0e,0x07,0x44,0x28,0xd4,0x3b,0x03,0x03,0x02,0x00,0xbe,0xc0,0x09,0x06,0x00,0x0f,0x05,0x05,0x14,0x10,0x0d,0x08,0x23,0xd1,0x9c,0xb4,0xae,0xc7 -,0x9b,0x8d,0x88,0x84,0x85,0x86,0x9b,0x8e,0x83,0x83,0x86,0x8c,0x9d,0x8c,0xa5,0xaa,0x99,0x8d,0xab,0x26,0x2f,0x34,0x9d,0x3c,0x25,0x0a,0x10,0x09,0x08,0x0a,0x0e,0x0e -,0x07,0x07,0x04,0x1b,0x36,0x1f,0x0b,0x0f,0x0f,0x26,0x3e,0xc1,0xa6,0x34,0x39,0x41,0x8e,0x8c,0x8e,0xad,0x34,0xae,0xa4,0x96,0x8a,0x8e,0x95,0xae,0x94,0x88,0x8b,0x85 -,0x86,0x8e,0xa7,0x8e,0xa7,0x8d,0x98,0x24,0x11,0x08,0x21,0x14,0x21,0x18,0x0b,0x08,0x08,0x0a,0x0b,0xc9,0x24,0x10,0x06,0x07,0x0c,0x10,0xf2,0x25,0x27,0x0b,0x1e,0x3a -,0x91,0x89,0x58,0xab,0xa9,0x8c,0x8a,0x8e,0x8d,0x85,0x8b,0x95,0x89,0x87,0x85,0x8d,0x8f,0xc6,0xab,0x9f,0xb5,0xa0,0x9d,0xa3,0x1e,0x0b,0x0f,0xb0,0xb0,0x57,0x16,0x07 -,0x0f,0x0f,0x05,0x28,0x46,0x10,0x0b,0x05,0x06,0x10,0x2f,0x33,0x21,0x0d,0x0c,0x09,0x3f,0x94,0x8c,0x8f,0x1f,0x28,0xb3,0x89,0x96,0x8a,0x8a,0xbb,0x42,0x17,0x88,0x80 -,0x8e,0x8f,0xca,0xbf,0x8b,0x88,0x87,0x8a,0x91,0x9f,0x11,0x15,0xa1,0x9c,0x4d,0x0e,0x08,0x07,0x06,0x0e,0x19,0x0a,0x15,0x07,0x09,0x29,0x15,0xa6,0x25,0x02,0x13,0x1e -,0x15,0x24,0x2e,0x1a,0x22,0xae,0x9e,0x96,0x99,0xbc,0xa2,0x92,0x94,0x92,0x90,0x89,0x9b,0xb9,0x90,0x80,0x83,0x90,0xe9,0x34,0x98,0x2e,0xb8,0x98,0x8a,0xa5,0x05,0x0b -,0x95,0x83,0x9a,0xbb,0x13,0x07,0x0d,0x9f,0xbd,0x19,0x6f,0x03,0x05,0x06,0x0e,0xa4,0x1c,0x24,0x02,0x04,0x0f,0x2f,0x91,0xcb,0x30,0x0f,0x19,0x13,0xae,0x84,0x85,0x90 -,0x44,0x26,0x3c,0x8a,0x82,0x88,0x83,0x9f,0x1e,0x95,0x89,0x8a,0x8b,0x93,0x8d,0xb3,0xcb,0xaa,0xca,0x2f,0xb5,0xb0,0x25,0x26,0x0d,0x1c,0x0c,0xaf,0x4a,0x0c,0x0d,0x08 -,0x18,0x13,0x16,0x0f,0x35,0x25,0x05,0x06,0x29,0xce,0x9e,0x2c,0x2d,0x28,0x13,0x14,0x26,0x91,0xb6,0x9b,0xa1,0xa7,0x9c,0x9f,0x80,0x8c,0x8e,0x1e,0x2c,0x89,0x8d,0x82 -,0xa7,0xb1,0xd5,0xa2,0xdc,0x92,0x80,0x9d,0x29,0x0d,0x1e,0x8d,0x90,0x92,0x0b,0x10,0x1d,0x0b,0x1e,0x18,0x93,0x14,0x0c,0x08,0x06,0x0b,0x1e,0x0f,0x0e,0x0e,0x05,0x0d -,0x34,0xdf,0x50,0x8f,0x37,0x3f,0x12,0x90,0x90,0x90,0x96,0x1a,0x95,0x8f,0x88,0x92,0x96,0x85,0x8d,0x8d,0xac,0x2d,0x9d,0x9e,0x90,0x4c,0x9a,0xcb,0x15,0x0c,0x18,0x8e -,0x85,0xb8,0x1c,0x0b,0x09,0xb1,0x96,0xab,0x15,0xb5,0x0c,0x08,0x07,0xb8,0x8d,0xb2,0x2c,0x0a,0x07,0x38,0x33,0x23,0x2a,0x1d,0x11,0x03,0x30,0x41,0x97,0x97,0xad,0x1d -,0x22,0xa4,0x8b,0x8a,0x9e,0x43,0xc0,0x99,0xaf,0x8f,0x8c,0x89,0x88,0x8f,0x16,0xc4,0x82,0x8e,0x98,0xb1,0x45,0x2a,0x36,0x2e,0x9f,0x9c,0xaa,0x1b,0x04,0x0c,0xb2,0x26 -,0x09,0x0a,0x04,0x1f,0x0d,0x20,0x15,0x23,0xcf,0x1c,0x2d,0x0e,0x0c,0x27,0xa1,0x0f,0x3f,0xb2,0x1d,0xad,0x99,0x8d,0x8d,0x96,0xbf,0x2f,0x9f,0x8e,0x85,0x86,0x4a,0xb9 -,0x98,0x90,0x94,0x92,0x97,0xa1,0x96,0x1f,0x19,0x2e,0x93,0xbb,0x1b,0x13,0x1f,0x64,0x1f,0xd3,0x2b,0xc3,0x9c,0x1b,0x01,0x3d,0x9f,0x3c,0x30,0x11,0x3d,0x1d,0x0b,0x2f -,0x1c,0xde,0x1d,0x19,0x17,0x09,0x6d,0x9d,0x41,0x5f,0x11,0x0c,0xbf,0x9a,0x94,0x9b,0x99,0xae,0x8b,0x32,0xbd,0x85,0x86,0x99,0x10,0xa8,0x96,0x92,0x8c,0xab,0x89,0x8b -,0xa1,0x40,0x28,0x95,0x94,0x3c,0x09,0x12,0xa7,0x0c,0x27,0xa0,0x17,0x36,0x2d,0x13,0x06,0x22,0x25,0x0e,0x0b,0x10,0x0e,0x1d,0x69,0xb3,0x37,0x21,0x2b,0xc5,0x2f,0x2b -,0x8e,0x2c,0xe8,0x17,0x1d,0x8a,0x8a,0x8d,0xb4,0xa7,0x8d,0x8b,0xa0,0xeb,0x94,0x8b,0xa8,0x2d,0xae,0xa8,0x98,0x8f,0x2a,0x34,0x9d,0x8d,0x25,0x08,0x27,0x4e,0xa2,0x18 -,0x14,0x19,0x1e,0xaa,0xb3,0x2f,0x1b,0x21,0x0e,0x1d,0x1d,0x28,0xaf,0x12,0x09,0x0d,0xb0,0xd8,0xa4,0x24,0x58,0x2b,0xa3,0xa3,0x16,0x96,0xa9,0x8d,0xb0,0xae,0xb4,0x9c -,0x99,0x8f,0xa8,0x9b,0x98,0xaa,0x4f,0xa6,0x84,0x9c,0x36,0x03,0xac,0xb7,0x9d,0x97,0x0e,0xaf,0x9e,0xf7,0x1b,0x17,0xa0,0x8c,0x1e,0x06,0x09,0x0c,0x33,0xb5,0x34,0x1d -,0x2e,0x42,0x28,0x1e,0xa9,0x59,0x66,0x19,0x0c,0x28,0xbd,0xaa,0xc6,0xc9,0x3d,0x2f,0xa8,0x4f,0x0f,0x95,0xa1,0xbc,0x13,0x1f,0x8e,0x8d,0x8a,0xa6,0x9e,0x91,0x98,0x8c -,0x97,0x90,0x9d,0xa1,0x47,0x1e,0x90,0xd1,0x99,0x2a,0x28,0x9e,0x1f,0x1a,0x13,0x0c,0x55,0x29,0x06,0x0e,0x32,0x28,0x0f,0x1d,0x17,0x15,0x3a,0xe0,0x19,0xbd,0x5b,0x9d -,0x49,0xcb,0xa6,0x9b,0x85,0x46,0x97,0x9c,0x98,0x47,0x32,0xb7,0x9b,0x91,0x9e,0x35,0x15,0x99,0x9a,0x9e,0x3e,0x24,0xa0,0xb4,0x26,0xd8,0x18,0x59,0xc5,0x39,0x28,0x21 -,0xb0,0xd0,0x13,0x26,0xc9,0xb1,0x95,0x0e,0x25,0xa6,0xa2,0x4a,0x0e,0x1e,0xb6,0xa7,0x5f,0xae,0xc1,0xbb,0x64,0x16,0x2e,0x53,0xaf,0xca,0x16,0x13,0x19,0x32,0x4c,0xba -,0x47,0xa6,0x9b,0x35,0x1b,0x27,0x9e,0x89,0xd0,0x15,0xaf,0x9a,0x8c,0x8f,0xc3,0xaf,0x96,0x8c,0x94,0x53,0xa0,0x52,0x40,0xac,0x30,0x55,0xb1,0xcb,0x1a,0x17,0x29,0x2c -,0x0e,0x14,0x2d,0x79,0x19,0x16,0x0f,0x38,0x1c,0x7d,0x9a,0x0f,0x2d,0x62,0x9a,0x4a,0x46,0xaf,0xa7,0x47,0x9c,0xac,0x99,0xa0,0x1f,0xb1,0x9b,0x92,0xaf,0x38,0x1d,0x97 -,0x93,0x9f,0x2b,0x48,0x9c,0x8e,0xc5,0x13,0x1b,0x76,0x9c,0xad,0x17,0x59,0xb1,0xb2,0xc9,0x0f,0x2b,0x1f,0x3b,0xeb,0x23,0x47,0x9c,0x1d,0x1d,0x21,0x98,0x8f,0x25,0x0e -,0x12,0xb1,0x9d,0x45,0x1d,0x1c,0xa5,0x90,0x2b,0xb3,0xaa,0x99,0xa1,0x18,0x1f,0xad,0x2e,0xee,0x4c,0x9d,0xc5,0x2f,0xaf,0x41,0xc0,0x98,0x99,0x2c,0x0f,0x23,0x8f,0x9f -,0xb5,0x27,0xbf,0x9c,0xa4,0x22,0x56,0xaf,0xae,0x4b,0x22,0x26,0xe4,0x9b,0x21,0x1b,0xb2,0xa5,0xc1,0x15,0x1b,0xa7,0xb6,0x25,0x0d,0x1a,0xb2,0x8e,0x45,0x20,0x28,0x3b -,0xc4,0x29,0x23,0x39,0xad,0xb8,0x1a,0x39,0xa4,0xa9,0xa2,0x9e,0xa5,0x4b,0x44,0xae,0x6f,0xbf,0xa5,0x97,0x9f,0x14,0xdf,0x99,0x91,0x51,0x31,0x29,0x50,0xad,0x65,0xd3 -,0xbc,0xaa,0x2a,0x2a,0x40,0xaf,0x9f,0x27,0x15,0x1b,0x4e,0x70,0x1c,0xcb,0x95,0x94,0x2e,0x14,0x24,0xe3,0x9e,0xaa,0x26,0x60,0x15,0x9e,0x27,0x1d,0x93,0xb8,0xa2,0x2f -,0x34,0x27,0x32,0x61,0xb6,0x2b,0x3c,0x2e,0xc4,0x4f,0x47,0xa5,0xa8,0x2a,0x15,0x2b,0xe9,0x9e,0xc5,0x1f,0x3e,0xa8,0x36,0xad,0xc3,0xaa,0xaa,0xb2,0x1b,0x1a,0x63,0xc7 -,0x9f,0x33,0x45,0xaf,0xa9,0x24,0x2d,0x2d,0xa2,0xa4,0x25,0x20,0x24,0x98,0xa6,0x45,0x27,0xbd,0xa3,0x26,0x36,0x2c,0x9b,0xac,0x1d,0x2b,0x2f,0x9e,0x95,0xad,0x1c,0x17 -,0x3e,0xae,0x54,0x9c,0x2b,0x41,0x1c,0x27,0xb9,0x9c,0x92,0xcf,0x1f,0x1d,0xbf,0xbd,0x5f,0x16,0xd1,0x29,0x96,0xdd,0x1a,0xad,0x94,0x9f,0x4c,0x29,0x35,0xaf,0xf2,0x34 -,0x27,0xba,0xcf,0x65,0x2c,0x9c,0x99,0xbb,0x1c,0x1e,0xed,0x9e,0xbe,0x64,0x32,0x3f,0xa8,0x28,0x2d,0xe3,0xba,0xcc,0x32,0x44,0x5f,0x9b,0xa6,0x1d,0x1d,0xd3,0xa9,0xcc -,0x27,0x2d,0x93,0xcf,0x1c,0x1c,0x58,0xc4,0xbd,0xa4,0xc8,0x25,0x3a,0x3b,0xaa,0x9c,0xbb,0xb0,0x38,0x18,0x21,0xa0,0xcd,0xab,0xaf,0xac,0xfc,0xbd,0xad,0x25,0x30,0x27 -,0xbf,0x3f,0x32,0xab,0xbf,0xce,0xbc,0xb2,0xcd,0x31,0x1e,0x1e,0x2c,0xb9,0xaf,0x65,0xa9,0x4e,0xae,0x97,0x39,0x1c,0x3f,0xac,0x2a,0xe0,0xb2,0x3e,0xc9,0xc1,0xac,0xbe -,0xc3,0x5e,0x2d,0xcb,0x2d,0x3c,0x9b,0xaf,0xd6,0x41,0xa9,0xcb,0x2c,0x38,0x33,0xb4,0x28,0x1e,0xa0,0xac,0xb4,0x5f,0xb5,0xdc,0x1e,0xa5,0xaf,0xb4,0x27,0xae,0x9d,0x27 -,0x2f,0xc0,0x1f,0x4a,0xb4,0xbb,0x2a,0x1f,0x97,0x25,0x5b,0x42,0x32,0xb1,0x34,0x23,0x41,0xbc,0x50,0xad,0xa9,0xfa,0xab,0x4f,0x1f,0x2f,0x1c,0xa1,0xbd,0xc0,0xce,0x3b -,0x9c,0xa6,0xbd,0xa7,0x2c,0x21,0x2a,0x29,0x99,0xd1,0x4a,0xc3,0xe0,0xbb,0x36,0xb4,0xb7,0x21,0xee,0x31,0x2e,0x3b,0xa1,0x98,0xb7,0xeb,0x68,0x61,0x1b,0x21,0x36,0x46 -,0x42,0x2e,0xb7,0x99,0xa9,0xb8,0x36,0x32,0x28,0x29,0xa7,0xde,0x2b,0x45,0x38,0xd6,0xa4,0x94,0xbd,0x19,0x1f,0x3a,0x9d,0xa7,0x2e,0x34,0x3e,0xa4,0xaa,0x99,0xa5,0x14 -,0x32,0x33,0xac,0xc7,0x55,0xcd,0x3d,0xdf,0xc6,0xbd,0x37,0x2e,0x57,0xb7,0x3b,0xfb,0xb5,0x3e,0xcc,0xdd,0xbd,0x38,0x27,0xab,0xb3,0x26,0x1b,0x5c,0x44,0xaa,0xa7,0x4c -,0x59,0xdb,0x46,0x4b,0x39,0x34,0x3e,0x9f,0x9b,0x28,0x2e,0x2b,0xa2,0x97,0x3d,0x25,0x1c,0x2b,0xf4,0x4f,0xa1,0xb3,0x98,0xba,0xbe,0xcc,0x19,0xad,0x29,0x3a,0xca,0x9b -,0xab,0x2e,0xb2,0x52,0x2f,0x3a,0xa6,0x69,0x1e,0x2c,0xd2,0xbf,0xa9,0xff,0xbe,0xa7,0x26,0x29,0x39,0x1b,0x19,0xce,0x9a,0xc4,0x34,0xab,0xa2,0xc8,0x71,0x49,0x20,0x27 -,0x27,0xd6,0x98,0x9f,0xbd,0xbd,0x22,0xad,0x92,0xc2,0x34,0x0d,0x1d,0xa1,0xcc,0xb0,0xa9,0x2c,0x32,0xa7,0xba,0x2a,0x25,0x29,0xbd,0xae,0x44,0xa1,0xc9,0x47,0x26,0x27 -,0xa2,0xae,0x30,0x2b,0xbf,0x47,0x4e,0x37,0xa3,0xd3,0xce,0x97,0x1e,0x10,0x29,0x9f,0x9d,0x52,0xa4,0xce,0x2a,0xec,0x3a,0xb0,0x2e,0x1f,0xbe,0xa4,0x9a,0xaa,0x52,0x37 -,0x26,0xae,0xa9,0x27,0x1d,0x29,0xab,0x9a,0xab,0xf2,0x30,0x26,0xa9,0xac,0x27,0x2d,0x2e,0x22,0xab,0xbf,0xb2,0x8e,0x66,0x1a,0x14,0x35,0x25,0x2f,0xbd,0xc6,0xa5,0x4f -,0x96,0xbe,0x2b,0x29,0x55,0x93,0x1b,0x15,0x1f,0x9e,0x9a,0x7b,0xa1,0xad,0xb2,0xb6,0xbc,0x22,0x41,0x1e,0xcd,0x63,0xad,0x95,0x4a,0x3e,0x26,0xb4,0xbe,0x36,0x19,0x2b -,0xb1,0xf8,0xb9,0xb3,0x3a,0x3a,0xcf,0xa9,0x2f,0x17,0x2e,0xbc,0x96,0x2f,0x42,0x3f,0x55,0x9f,0xbc,0xdc,0x1a,0x28,0xc7,0xb9,0x66,0xa7,0xb4,0x37,0x20,0xeb,0xdb,0x2a -,0xcc,0xbf,0x9e,0xad,0xbb,0x56,0x30,0x3b,0xb9,0xa1,0xae,0x24,0x21,0x57,0x97,0xa7,0xdf,0xb5,0xc2,0xb3,0x25,0xb8,0x2d,0x1e,0x2b,0x34,0xa2,0xa7,0xe9,0x65,0x17,0x18 -,0xb6,0x6f,0xba,0x2b,0x57,0x39,0x53,0x9e,0xab,0xa6,0x2b,0x2c,0x32,0xbb,0xb3,0xba,0xa6,0x20,0x2b,0xa5,0xaa,0xcc,0xac,0xb8,0x2c,0x1e,0x18,0x44,0x95,0x93,0xb5,0x1e -,0x1b,0xc1,0xa2,0xba,0x4f,0x23,0x27,0xe1,0xaf,0x99,0xbe,0xd7,0x17,0x1c,0x99,0xa4,0xbd,0x1a,0x24,0x39,0xbe,0xa1,0xa3,0xbb,0x1e,0x27,0x9f,0xd8,0x27,0x38,0xd6,0x9a -,0xb8,0xb8,0x3f,0x27,0x6b,0x42,0x2d,0x4a,0x33,0xaf,0xab,0xb4,0xcd,0x22,0x79,0x49,0xbb,0xae,0x2c,0x31,0x44,0xa3,0x94,0xba,0xc4,0x29,0x27,0x3c,0xa6,0xbb,0x21,0x1d -,0x23,0xa7,0xa6,0xac,0x3d,0x28,0x19,0x3b,0xa4,0xa8,0x52,0x1b,0x23,0xaa,0x92,0xa1,0x21,0x20,0x27,0xb6,0x9e,0xde,0x2d,0x2f,0xb0,0xae,0x9b,0xa6,0xac,0x1d,0x4e,0xb7 -,0x29,0xe3,0xb8,0xa7,0x2b,0x36,0x2c,0xbe,0xae,0xc1,0x3b,0x48,0x46,0x39,0xd1,0x4d,0xa8,0x28,0x23,0x2b,0x36,0xa7,0xb6,0xb6,0x26,0x2f,0xd2,0xb1,0x97,0xc0,0x22,0x1d -,0x2a,0xa3,0x91,0xa7,0x27,0x24,0x24,0xce,0xa1,0x96,0x4a,0x0c,0x1d,0x3f,0x9c,0xaa,0x3e,0xbe,0x7c,0x29,0x6a,0xae,0x3e,0x44,0xf4,0x4a,0x2d,0xa5,0xae,0xb2,0x9d,0xd5 -,0x31,0x5b,0x5c,0xb8,0x43,0x38,0x47,0x1f,0xaf,0x9a,0xb7,0x30,0x2d,0x1d,0x21,0x9f,0x93,0x2c,0x1d,0x22,0x2c,0x99,0xa2,0x41,0x29,0x21,0x42,0x9f,0x94,0xc2,0x1d,0x41 -,0x45,0xd6,0xc3,0xb2,0xce,0x21,0x3d,0x5b,0xac,0xa5,0x6f,0x3a,0x29,0x2d,0xbd,0xdd,0x4f,0x46,0xbd,0xad,0x2a,0x5e,0xb0,0xe4,0xc8,0x5a,0x45,0x25,0x2f,0xb7,0xa9,0xa7 -,0x3f,0x6c,0xab,0xae,0xb7,0x25,0x21,0x3e,0xc6,0xa8,0xaf,0x4e,0x28,0xc9,0xad,0xac,0x2c,0x26,0x1c,0x1c,0xa9,0xa2,0xa1,0x4f,0x34,0x42,0xca,0xd9,0xa2,0xad,0x1e,0x26 -,0x4c,0xed,0xae,0xaa,0xe5,0x31,0x32,0xd7,0xab,0xa0,0x59,0x4b,0xec,0x46,0x2a,0xb4,0xac,0xc7,0xee,0x2e,0x2a,0x28,0xae,0xc9,0x41,0x2c,0x20,0xbd,0xa0,0x5d,0x33,0x42 -,0x36,0xde,0xad,0xae,0xb8,0x55,0x2b,0x3f,0xae,0xb9,0xca,0x4c,0x2d,0x4a,0xaf,0x96,0x9c,0x52,0x18,0x14,0x3d,0xb8,0xa9,0x4f,0x2b,0x55,0x6e,0xbc,0xb4,0xac,0xdb,0x49 -,0x30,0x2c,0x72,0xb9,0xa7,0xb5,0xcb,0x56,0x4a,0xa2,0xab,0x2d,0x37,0x1f,0x21,0xdc,0xb0,0x67,0x41,0xcd,0xad,0xac,0x5d,0x37,0x27,0x2a,0x1f,0xeb,0xa6,0xac,0xab,0x2d -,0x20,0x21,0xb3,0x96,0xaa,0x32,0x1b,0x21,0xb2,0x93,0x9c,0x3b,0x23,0x35,0xbc,0xa5,0xaf,0xc5,0xc7,0x32,0x3a,0x2b,0x41,0xaa,0xa4,0x50,0x1f,0x2a,0x4d,0x9b,0x9c,0x3f -,0x25,0x1c,0x5e,0xaf,0x65,0xd4,0x65,0xc0,0x38,0xdc,0xb4,0x3a,0x2c,0xdb,0xd7,0x3f,0x52,0x39,0xb4,0x2e,0xe3,0xac,0xb4,0x9c,0xad,0x25,0x1b,0x45,0x42,0xbd,0x3e,0xc0 -,0xaa,0x45,0xe1,0xe4,0xbd,0x38,0x44,0x27,0x2f,0x49,0x45,0xa6,0xa1,0xb7,0x39,0xc5,0xaf,0xa8,0xb1,0x20,0x1e,0x65,0xcc,0xb8,0xc0,0xaa,0x53,0x3d,0xba,0x59,0x47,0xd8 -,0x4e,0x2c,0x26,0x25,0xac,0xb3,0x37,0x38,0xca,0xa8,0xa0,0x4b,0x1b,0x25,0xc6,0xa5,0x9f,0xc5,0x3a,0x41,0x36,0xb2,0xb7,0x28,0x41,0xaa,0x4e,0x68,0x36,0xad,0xaa,0x34 -,0x2a,0x37,0xa3,0xa9,0xa3,0x39,0x15,0x29,0xb8,0xb2,0xce,0x2f,0x25,0x4e,0xcc,0xbb,0xab,0xf3,0xe4,0xdc,0xc4,0x3f,0x2d,0xb4,0xc5,0xa9,0x39,0x2f,0xb7,0xa9,0x9b,0x38 -,0x19,0x1c,0xd9,0xae,0x4a,0x3e,0x3d,0x66,0xb9,0xbb,0xa6,0xbd,0x4d,0x3d,0x31,0x3c,0x27,0x39,0xbf,0xa1,0xcf,0x4a,0xb4,0xab,0xad,0x22,0x32,0xec,0x34,0xbe,0xc2,0xcc -,0xe1,0x32,0xd2,0xcb,0xf6,0xa3,0xa0,0x3a,0x1f,0x27,0xb4,0xac,0x34,0x24,0x24,0xc1,0x9f,0xa7,0x2f,0x1a,0x28,0x4b,0xb8,0xb0,0xc1,0xc6,0xbf,0xad,0xbe,0xba,0x3e,0x36 -,0xbb,0x38,0x3b,0x54,0xc3,0xab,0xa0,0xd9,0x22,0x2b,0xcd,0xa2,0xa7,0xd2,0x1d,0x1e,0xba,0xb0,0xcf,0xef,0xdf,0x54,0x49,0xb7,0xab,0xa7,0x2a,0x1b,0xc5,0xbc,0x1f,0x24 -,0x74,0xb6,0xa7,0xaf,0xba,0x3f,0x2c,0x35,0x79,0xae,0xaa,0x34,0x2f,0xb1,0xb3,0x34,0x2f,0xfe,0xd8,0xcf,0x2c,0x1b,0x2d,0x9f,0x9f,0x2f,0x2f,0x2d,0xba,0x95,0x93,0xa6 -,0x23,0x25,0x2a,0xad,0xc2,0x5e,0x56,0x6e,0xce,0x39,0xb4,0xbf,0x46,0x2a,0xb9,0xac,0xc6,0x36,0x21,0xdb,0xb8,0xbd,0xb5,0x3d,0x28,0x2d,0x48,0xc4,0xaf,0xbc,0x1f,0x3d -,0xc4,0xb1,0xa6,0x2c,0x53,0x9b,0xb4,0x2a,0x26,0x28,0x29,0x2c,0x1f,0xbd,0x93,0x3e,0xa2,0x92,0x2e,0x2e,0x1f,0xe2,0xb9,0x30,0xa8,0x2b,0xcf,0x6f,0xbd,0x9e,0x2c,0xb6 -,0xbd,0x46,0x5d,0x4f,0xac,0xf1,0x2e,0xab,0xb0,0x4c,0x50,0x38,0x6b,0x40,0x37,0x48,0x3d,0x20,0x20,0xaa,0x98,0x69,0x21,0x31,0xa8,0x5e,0x15,0x26,0x3d,0x8c,0x9e,0x33 -,0xa8,0x3c,0xd4,0x38,0xa9,0xba,0x1f,0xb7,0xbb,0xc9,0x99,0xcd,0xc7,0x26,0xf8,0x4f,0x1b,0x0f,0x0c,0x54,0x9c,0x81,0xba,0xb6,0x1c,0x26,0x90,0xa6,0x8c,0x32,0x1f,0xa1 -,0x21,0x0f,0x0b,0x1d,0x2b,0x0c,0x8a,0x8b,0x25,0x18,0x1a,0x25,0xa4,0x8f,0xad,0x13,0x17,0x1b,0x8a,0x84,0x12,0x8f,0x20,0x0f,0x1a,0xba,0x80,0x1f,0x26,0xa1,0x1f,0x3a -,0x19,0xa9,0x98,0x1a,0x91,0x1e,0x22,0x0f,0x0d,0x28,0xac,0x85,0x12,0x8e,0x8d,0x2a,0x2d,0x19,0xc7,0x9d,0xbc,0xa1,0x07,0x17,0x92,0x8a,0x8b,0x0c,0x19,0x07,0x02,0x1f -,0x8f,0x94,0x20,0x0f,0x8c,0xa7,0xc9,0x85,0x93,0xbb,0x0f,0x9d,0x8c,0x2b,0x1c,0x28,0x35,0x2d,0x2c,0x91,0x4c,0x0d,0x33,0x49,0x2f,0x0d,0x23,0x37,0x1e,0x82,0x2a,0xa6 -,0x81,0xa5,0xae,0x0b,0x59,0x26,0x16,0x84,0x8d,0x39,0x15,0x08,0x2d,0x1b,0x99,0xa3,0x19,0x1c,0x0d,0xbb,0x16,0x8d,0x5f,0x19,0x87,0x45,0x92,0x2b,0x24,0x99,0x1d,0xa1 -,0x90,0xa7,0xb0,0x0f,0x2e,0xa0,0x9c,0x8c,0x0e,0x07,0x02,0x04,0x07,0x8e,0x83,0x48,0x8c,0x29,0x3e,0x52,0x98,0x80,0x27,0xb7,0x92,0x28,0xa6,0x12,0x3a,0x17,0x15,0x95 -,0x17,0x39,0x0e,0x0d,0x0d,0x8c,0x9e,0x26,0x85,0xcd,0x1d,0x1d,0x94,0x84,0x26,0x9c,0xc8,0x09,0xde,0x2b,0x80,0xb9,0x19,0x1f,0x0a,0x1e,0x1c,0x24,0x1d,0x85,0x29,0x1e -,0x98,0x66,0x34,0x0a,0xc6,0x94,0x14,0x8f,0x91,0xae,0x90,0x29,0x8e,0x16,0x30,0x1c,0x07,0x20,0x20,0xc1,0xa7,0x87,0x0c,0x12,0x5e,0x28,0x3e,0x17,0x8d,0x92,0x16,0x92 -,0xae,0x92,0x8e,0x9e,0x8d,0x15,0x4a,0x13,0x35,0x25,0x19,0x19,0x93,0x87,0x14,0x8f,0x8d,0x93,0x1d,0x13,0x8b,0xa4,0xa1,0x82,0x8c,0x82,0x94,0x8b,0xbb,0x0f,0x17,0x0a -,0x08,0x0a,0x1b,0x05,0xa5,0x08,0x07,0x15,0x05,0x0a,0x00,0x14,0x19,0x02,0x2a,0x25,0x1b,0x21,0x0d,0x3e,0x0e,0xaf,0x54,0xac,0x38,0x4f,0x25,0x8f,0x87,0x15,0x8a,0x8d -,0x85,0x96,0xab,0x8b,0x73,0x33,0x85,0x8e,0x87,0x8c,0x84,0x88,0xa1,0x8f,0x8b,0x8f,0x8f,0xad,0xcf,0x80,0x1e,0x93,0x93,0x44,0x1e,0x03,0x9c,0x99,0x29,0x9a,0xa7,0x2b -,0x0d,0x11,0xad,0x19,0xce,0x36,0x1d,0x13,0x1a,0x00,0xa7,0x30,0x04,0xad,0x2e,0xac,0x09,0x1a,0x3c,0x07,0x1f,0x53,0x1d,0x27,0x1c,0x9d,0x0b,0x0e,0x26,0x1e,0x23,0x15 -,0x0a,0x31,0x86,0x2a,0x89,0x89,0xad,0x0e,0x0d,0x9c,0x28,0x1f,0x93,0xa8,0xb0,0x2b,0xc5,0x1f,0x11,0x28,0x0e,0x0c,0x27,0xcd,0x36,0x80,0x3f,0xa5,0x8a,0x94,0x9e,0x11 -,0x9b,0x91,0xb0,0x85,0x85,0x87,0x8b,0x8c,0x82,0x8e,0x84,0x88,0x8c,0x9f,0x5c,0xb6,0x80,0x86,0x8a,0x81,0x8b,0xb8,0x04,0xba,0xa4,0x06,0x13,0x1c,0x15,0x0c,0x05,0x08 -,0x00,0x02,0x01,0x01,0x02,0x04,0x00,0x2a,0x10,0x06,0x24,0x12,0x0a,0x00,0x08,0xb7,0x24,0xa8,0x9d,0xba,0x2e,0x13,0xab,0x1b,0x66,0xba,0xaf,0x34,0x6e,0x0f,0x88,0x92 -,0x32,0x8b,0x9a,0x8f,0xc6,0x86,0x80,0x8c,0x89,0x82,0x86,0x87,0x8b,0x83,0xb0,0x5f,0xa9,0x9a,0x3d,0x1b,0x0d,0x92,0x8c,0x34,0x82,0x8f,0x45,0x00,0x14,0x88,0x9d,0x9f -,0x8b,0x9d,0x1d,0x1a,0x98,0x15,0x0c,0x10,0x11,0x0c,0x0f,0x06,0x9c,0xe6,0x08,0x35,0x11,0x29,0x07,0x3a,0xaf,0x0b,0x0a,0x26,0x99,0x24,0x14,0xcf,0x0d,0x25,0xaf,0xa6 -,0x44,0x09,0x00,0xa3,0xdc,0x22,0x8b,0x9c,0x39,0x00,0x1e,0x97,0x1a,0x19,0x26,0x27,0x0f,0xaa,0x82,0x58,0x48,0xcb,0xbb,0x40,0x16,0x2b,0x80,0x9a,0xa8,0x80,0x81,0x8c -,0x31,0x87,0x82,0x97,0x85,0x80,0x80,0x8d,0x94,0x85,0x90,0x87,0x83,0x88,0x9e,0x0d,0x1f,0x84,0x23,0x17,0x32,0x14,0x07,0x00,0x25,0x1e,0x02,0x04,0x03,0x06,0x02,0x15 -,0x12,0x01,0x00,0x02,0x06,0x0a,0x00,0x09,0xca,0x06,0x44,0x98,0x91,0x12,0x09,0xa4,0xad,0x36,0xa6,0xa1,0x9c,0x1b,0xa6,0x92,0xa8,0x9c,0x40,0xc9,0x0d,0x17,0x86,0x80 -,0x8c,0x89,0x8a,0x82,0xa8,0x91,0x80,0x88,0xa2,0xb2,0x88,0x85,0x9e,0x87,0xa9,0x17,0x0c,0xdc,0x84,0x9b,0x17,0x3f,0x31,0x1d,0x92,0x89,0x88,0x0e,0x33,0xaa,0x9e,0x5d -,0x12,0x33,0x1b,0x0a,0xda,0x56,0x1e,0x08,0x07,0x0b,0x01,0x09,0x28,0xab,0x1e,0x09,0x05,0x31,0x0f,0x1c,0x1e,0x2d,0x1d,0x0d,0xa2,0x8a,0xa4,0x1e,0x0e,0x25,0x29,0x37 -,0xc5,0x15,0x0b,0x01,0x16,0xb6,0x9c,0x2b,0x18,0x05,0x09,0x9f,0x8c,0x8d,0x9d,0xa3,0x8e,0x89,0x8c,0x8e,0x92,0x97,0x9c,0x90,0x89,0x83,0x8e,0x8b,0x86,0x8b,0x90,0x87 -,0x80,0x86,0x85,0x8a,0x87,0x85,0x8a,0x82,0x82,0x97,0xc7,0xab,0xa4,0x1d,0x0a,0x03,0x03,0x0f,0x29,0x12,0x02,0x01,0x00,0x01,0x04,0x19,0x1a,0x02,0x02,0x01,0x0e,0x3e -,0x15,0x0b,0x08,0x0e,0x0e,0x1e,0xb9,0x1d,0x14,0x27,0xd0,0xcb,0x24,0x14,0x2c,0x28,0x26,0xa2,0x9a,0x94,0x97,0xca,0x91,0x96,0x9b,0x87,0x8c,0x84,0x8d,0x8c,0x8f,0x8f -,0x8a,0x98,0x92,0xaf,0xc4,0x91,0x85,0x92,0xb5,0x2c,0x3f,0x97,0x94,0x8a,0x93,0x2b,0xd7,0x9a,0x86,0x92,0xb2,0x4b,0x17,0x33,0xd8,0xa6,0x1c,0x0a,0x08,0x1c,0xd2,0x54 -,0x5a,0x13,0x15,0x20,0x18,0x27,0x2c,0x17,0x19,0x29,0x1d,0x12,0x15,0x0c,0x0d,0x08,0x0e,0x09,0x08,0x40,0x98,0x96,0x15,0x1e,0xf8,0xce,0x3d,0x17,0xe4,0x18,0x10,0xa8 -,0x95,0x48,0x07,0x08,0x12,0x2b,0x5a,0xaf,0x25,0x0f,0x32,0x91,0x82,0x88,0x9d,0xaa,0x9a,0x8c,0x83,0x83,0x81,0x8c,0x8a,0x85,0x81,0x83,0x85,0x8a,0x8d,0x8a,0x8c,0x88 -,0xa0,0x8c,0x86,0x84,0x98,0x10,0xc0,0xa8,0xc8,0x11,0x04,0x12,0x09,0x1b,0x18,0x07,0x06,0x00,0x07,0x0a,0x02,0x00,0x02,0x00,0x0a,0x16,0x3b,0x11,0x00,0x0b,0x09,0x1b -,0xdb,0x30,0xa4,0x19,0xa6,0x8a,0x91,0x3d,0x09,0x1f,0x25,0x11,0x6d,0x95,0x11,0x24,0xa5,0x89,0x89,0xac,0x88,0x8d,0x8e,0x89,0x89,0x80,0x91,0x88,0x82,0x82,0x9b,0xe0 -,0x95,0x97,0x3a,0xbd,0x95,0x0f,0xa5,0x8f,0x8b,0x4a,0x3e,0x85,0xbe,0xa6,0xd8,0x8d,0x95,0x20,0x94,0x8a,0x8e,0x10,0x02,0x09,0x08,0x11,0x9f,0x14,0x03,0x14,0xb7,0xa1 -,0x0c,0x22,0x0e,0x09,0x0d,0x0f,0xa1,0x15,0x1f,0x2f,0x17,0x1b,0x09,0x1f,0x17,0x00,0x5c,0x9d,0x0d,0x10,0x59,0x8f,0x2a,0x4c,0x9a,0x0a,0x13,0x0e,0x64,0x20,0x08,0xa5 -,0x37,0xa7,0xa8,0x3b,0xd5,0x0b,0x4e,0x81,0xaa,0xa3,0x8f,0x8d,0x81,0x89,0x80,0x8b,0x9e,0x95,0x92,0x81,0x8c,0x80,0x86,0x8e,0x83,0x85,0x8a,0xb2,0xc7,0x84,0x9d,0x0c -,0xcf,0x26,0x21,0x05,0x45,0xa1,0x07,0x16,0x04,0x0b,0x07,0x0a,0x0e,0x00,0x05,0x11,0x0a,0x05,0x00,0x08,0x28,0x05,0x0a,0x09,0x0e,0x08,0x19,0x83,0x2c,0x24,0x97,0xaf -,0xab,0x64,0x88,0xa8,0x18,0xb2,0x9f,0xa1,0x14,0x0c,0x94,0xa8,0x2a,0x8f,0x90,0x9b,0x3c,0x85,0x81,0x8e,0x85,0x90,0x8f,0x97,0x89,0x82,0xac,0x94,0x8e,0x9d,0xb2,0x0c -,0x2b,0x96,0x25,0xc1,0x96,0xe3,0x15,0x37,0x81,0x9b,0x8b,0x9c,0x1b,0x39,0x4b,0x8e,0x47,0x14,0x11,0x22,0xc1,0xe6,0x07,0x2b,0x15,0x0e,0x36,0x0d,0x0e,0x00,0x25,0x21 -,0x38,0x96,0x1d,0x11,0x0b,0x17,0x17,0x0e,0x29,0x1b,0x12,0x75,0x1e,0x32,0xa8,0x0f,0xab,0x31,0x13,0x07,0x0c,0xac,0x25,0x9e,0xbe,0x1f,0x24,0xde,0x9d,0x31,0x3e,0x9b -,0x38,0xc4,0x9d,0x99,0x83,0x93,0x89,0x80,0x85,0x8b,0x95,0x83,0x8c,0x87,0x80,0x83,0x8d,0x92,0x81,0x82,0x8b,0x94,0x96,0xa4,0xa5,0x2a,0xa8,0x3e,0x04,0x2b,0x28,0x0b -,0x00,0x08,0x14,0x02,0x0d,0x1f,0x18,0x04,0x06,0x1b,0x08,0x03,0x03,0x04,0x07,0x04,0x0c,0x1a,0x01,0x0a,0xce,0xad,0x0e,0x09,0x9d,0x3a,0xa8,0x88,0x8c,0x99,0x34,0x90 -,0x9c,0x5b,0xbe,0x2f,0x2f,0x15,0x27,0x87,0x98,0xcc,0x93,0x96,0x8b,0xae,0x8d,0x8f,0x9e,0x84,0x84,0x80,0x8b,0x88,0x84,0x9a,0xa8,0x37,0x25,0x3e,0x1d,0x9c,0x9e,0x18 -,0x3f,0x9c,0x90,0xc9,0xc2,0xb1,0x18,0x29,0xea,0x94,0x95,0x28,0x45,0x3a,0x55,0x35,0x1b,0x13,0x05,0x19,0x24,0x0b,0x07,0x06,0x25,0x21,0x11,0x1c,0x17,0x1e,0x22,0xb7 -,0xab,0x2b,0x75,0xb0,0xd0,0xbd,0xde,0x2e,0x0a,0x10,0xa3,0xb8,0x4c,0x21,0x32,0xb9,0x30,0x2c,0x33,0x23,0xf6,0xac,0x9a,0xa2,0xa8,0x9a,0x9b,0x9c,0x7c,0xb9,0xba,0xa6 -,0xa7,0xcf,0xa0,0x9d,0x3b,0x1f,0x39,0x62,0xb0,0x43,0x1e,0x51,0xa2,0x99,0x92,0x8e,0x90,0x9b,0x8f,0x8f,0xe5,0x1b,0x1e,0xce,0xc6,0x98,0xad,0x17,0x44,0x9e,0xa5,0xfc -,0xc8,0x4c,0xb0,0xbd,0xbb,0x9b,0x9d,0xb6,0xac,0x9c,0x3e,0x15,0x17,0x1a,0x18,0x2a,0xdb,0x1e,0x0f,0x22,0xaa,0xac,0x20,0x0d,0x0c,0x14,0x1d,0x1e,0x2d,0x4f,0x1e,0x19 -,0x18,0x18,0x17,0x18,0x10,0x24,0xcf,0x2f,0x34,0x2c,0xbc,0x9d,0x97,0xa0,0x28,0x1e,0xa5,0xb4,0xbe,0xb1,0xa6,0x99,0x8f,0x8e,0x9b,0x9e,0x9f,0x9c,0x9b,0x96,0x8f,0x8b -,0x98,0x98,0x8f,0x96,0xa1,0x49,0x62,0x9d,0xa5,0xa0,0x9e,0xa9,0x49,0x48,0xa2,0xce,0x1e,0x07,0x10,0x23,0x1d,0x37,0x2f,0x28,0x27,0xc4,0xad,0xca,0x21,0x15,0x1a,0x38 -,0x59,0x3d,0x2f,0x2e,0x4a,0x17,0x12,0x0c,0x0d,0x21,0x1e,0x16,0x13,0x27,0x19,0x23,0x97,0x9b,0x3f,0x32,0xbf,0x48,0xde,0xc4,0xad,0x97,0x9b,0xab,0xbf,0xcc,0x14,0x0c -,0x1e,0x21,0x52,0xd5,0x1e,0x17,0xb2,0x8e,0x8f,0x9a,0xb7,0xb5,0xa8,0x8f,0x8a,0x88,0x86,0x8e,0x8e,0x96,0x98,0xa1,0x9d,0x9e,0xb7,0x3b,0xc0,0x99,0xa3,0x98,0x9c,0x9d -,0x9f,0xa3,0x6d,0x3d,0x93,0x8f,0x9b,0xa6,0x5d,0x2f,0xee,0x21,0x0c,0x09,0x09,0x09,0x07,0x07,0x04,0x05,0x07,0x07,0x05,0x01,0x00,0x02,0x08,0x07,0x04,0x0a,0x1b,0x24 -,0xe6,0xb8,0xd3,0x29,0x1e,0xb9,0x96,0x89,0x8a,0x8c,0x91,0x8f,0x88,0x84,0x88,0x8d,0x8e,0x8f,0x8d,0x88,0x83,0x84,0x85,0x85,0x88,0x88,0x8b,0x92,0x8e,0x95,0x9e,0xa2 -,0x96,0x8e,0x92,0x8b,0x8b,0x9d,0xbd,0x47,0xb9,0x3c,0x19,0x1e,0x1a,0x24,0x19,0x17,0x0e,0x0b,0x0e,0x08,0x0d,0x0d,0x08,0x0b,0x0f,0x10,0x2a,0x2e,0x1c,0x0e,0x0e,0x19 -,0x18,0x1b,0x27,0x26,0x13,0x15,0x1e,0x22,0x20,0x21,0x18,0x1f,0x28,0x22,0x25,0xe6,0xaf,0x3d,0x69,0x5a,0x45,0x3f,0xb0,0xaa,0x4e,0x3b,0xaa,0x9f,0xb6,0x36,0x33,0x69 -,0x31,0x4b,0x53,0xee,0xa6,0xa9,0xc4,0xa1,0x96,0x92,0x94,0x99,0x91,0x8a,0x84,0x84,0x82,0x82,0x83,0x84,0x84,0x82,0x83,0x8a,0x8f,0x91,0x8e,0x95,0xa9,0xb8,0x2e,0x1b -,0x15,0x0e,0x07,0x03,0x05,0x05,0x02,0x04,0x09,0x0b,0x07,0x04,0x04,0x07,0x0a,0x08,0x07,0x06,0x06,0x0d,0x0e,0x0e,0x11,0x17,0x1c,0x1d,0x24,0x29,0x3e,0xbd,0xa2,0xac -,0xa0,0x9d,0x95,0x94,0x9e,0x9c,0x9b,0x90,0x90,0x96,0x91,0x92,0x92,0x8b,0x8c,0x8c,0x91,0x93,0x8f,0x90,0x8c,0x8a,0x8c,0x95,0xab,0xc2,0xa3,0x97,0xa7,0x5b,0x2a,0x26 -,0x36,0x2a,0x4f,0x2d,0x21,0x19,0x1b,0x2a,0x44,0x3d,0x1e,0x21,0x36,0x31,0x27,0xd0,0x5a,0xc5,0xb9,0x2d,0x28,0x26,0xe2,0xca,0x27,0x1a,0x1e,0xad,0x5b,0x1b,0x13,0x18 -,0x30,0x2a,0x1e,0x1b,0x2c,0x59,0x2e,0x21,0xda,0xad,0x70,0xd5,0x26,0x2f,0x3f,0x22,0xf6,0x2b,0x19,0x1e,0x3b,0xc6,0x1f,0x1c,0x1e,0x37,0xbf,0xae,0x97,0x96,0x91,0x96 -,0x8c,0x84,0x83,0x82,0x84,0x85,0x86,0x85,0x84,0x86,0x8c,0x89,0x8e,0x94,0x9b,0xc6,0x33,0x1f,0x17,0x0d,0x09,0x08,0x07,0x08,0x07,0x09,0x07,0x07,0x08,0x06,0x0d,0x0e -,0x09,0x06,0x0b,0x11,0x13,0x13,0x12,0x16,0x23,0x2c,0x17,0x14,0x18,0xcb,0xa5,0xc2,0x35,0x2a,0xc3,0xb4,0xa1,0x97,0x95,0x9c,0x9b,0xa1,0x9d,0x8b,0x89,0x8e,0x9b,0x9c -,0x8f,0x8b,0x90,0x9a,0x9a,0x92,0x91,0x97,0x9a,0x9b,0x9d,0x9d,0x9a,0xa3,0xab,0x9b,0x9c,0x9f,0x9e,0xa7,0xb8,0x3c,0x56,0xba,0xc5,0x34,0x2e,0x68,0x40,0x2c,0x4c,0x40 -,0x22,0x20,0x1e,0x1e,0x13,0x10,0x1d,0x24,0x2d,0x24,0x1a,0x1c,0x1a,0x14,0x0e,0x1a,0x19,0x13,0x16,0x13,0x29,0x37,0x1b,0x15,0x16,0x1f,0x1f,0x1c,0x1a,0x14,0x18,0x1a -,0x2e,0xe7,0x25,0x25,0x2c,0x2f,0x25,0x20,0xd7,0xac,0xb2,0xc1,0xa7,0x9a,0x8d,0x8b,0x8b,0x8c,0x87,0x87,0x88,0x83,0x83,0x82,0x82,0x83,0x85,0x83,0x86,0x89,0x95,0x97 -,0x98,0xa6,0xb6,0x20,0x16,0x0f,0x0e,0x08,0x05,0x09,0x06,0x07,0x08,0x0a,0x0b,0x0b,0x0c,0x0b,0x0a,0x0b,0x0c,0x0d,0x14,0x15,0x1b,0x1f,0x18,0x1a,0x22,0x2a,0x2e,0x28 -,0x25,0x2c,0xca,0xaa,0xaf,0xa9,0x9f,0x9c,0x9d,0xa6,0xa6,0xac,0xa5,0x9b,0x95,0x96,0x9a,0x8d,0x91,0x90,0x96,0x96,0x94,0xa4,0xae,0x9f,0x98,0x99,0x9d,0x9b,0x99,0x9e -,0x97,0xaf,0xbe,0x33,0x38,0x53,0xb6,0xa2,0xb6,0xb3,0xbd,0xc3,0x48,0x4d,0x2a,0x2a,0x1c,0x14,0x17,0x3e,0xd3,0x22,0x1b,0x16,0x1f,0x23,0x27,0x2d,0x25,0x19,0x0f,0x14 -,0x1e,0x2d,0x29,0x1f,0x19,0x14,0x23,0x33,0x2c,0x29,0x2f,0x2a,0x24,0x33,0x4d,0x41,0x33,0x21,0x27,0x2a,0x1c,0x24,0x2f,0x54,0x2e,0x2d,0x2b,0x24,0x3d,0xee,0xaa,0xa4 -,0x91,0x8d,0x8b,0x87,0x88,0x88,0x85,0x83,0x82,0x83,0x85,0x88,0x8a,0x83,0x84,0x87,0x96,0xb0,0x4e,0x29,0x26,0x1b,0x13,0x0d,0x0b,0x0c,0x0c,0x0e,0x0d,0x09,0x05,0x03 -,0x0a,0x0d,0x0d,0x09,0x0c,0x11,0x18,0x16,0x13,0x16,0x15,0x13,0x15,0x14,0x1b,0x2c,0xd4,0xba,0xc0,0x9d,0xa2,0xac,0xb9,0x5b,0xb0,0xa8,0x9f,0x96,0x95,0x8f,0x96,0x94 -,0x94,0x93,0x8d,0x9b,0xac,0xac,0x9a,0x90,0x8f,0x95,0x97,0x99,0xa5,0xa2,0xa0,0x95,0x9a,0xb8,0x5b,0xca,0x9e,0x9c,0x9a,0x9f,0xba,0x45,0x49,0x44,0xef,0x39,0x49,0x75 -,0x3f,0x2c,0x27,0x29,0x2e,0x32,0x24,0x1f,0x14,0x1f,0x1d,0x1b,0x27,0x2a,0x25,0x1b,0x13,0x13,0x1d,0x1c,0x1f,0x26,0x23,0x25,0x23,0x1a,0x1c,0x2c,0x31,0x20,0x18,0x1d -,0x24,0x47,0x57,0x39,0x37,0x1e,0x12,0x12,0x1c,0x35,0x3e,0x23,0x2e,0xc6,0xaa,0xa3,0x9a,0x96,0x97,0x8f,0x8a,0x8a,0x8c,0x88,0x83,0x81,0x82,0x83,0x83,0x85,0x89,0x8a -,0x8c,0x90,0x9a,0x99,0xa6,0xb2,0x49,0x20,0x1b,0x0f,0x09,0x06,0x06,0x05,0x09,0x0b,0x0f,0x10,0x0d,0x0c,0x0b,0x0e,0x0e,0x13,0x0a,0x04,0x0b,0x16,0x2f,0x2b,0x1e,0x19 -,0x22,0x30,0x48,0x2f,0x29,0x2c,0x34,0xb2,0xa9,0x9d,0x9f,0xa0,0xa2,0x9f,0x91,0x96,0x9f,0xac,0x9d,0x8f,0x94,0x8f,0x95,0x98,0x97,0x99,0x9d,0x9b,0x9f,0x9f,0x98,0x9c -,0x95,0x9c,0x9e,0xab,0xac,0xb5,0xc7,0xbc,0xce,0xa9,0xa3,0xb5,0x2f,0x31,0xb8,0xbd,0xf4,0xd8,0x24,0x1c,0x1b,0x38,0xbf,0x2c,0x1b,0x15,0x19,0x21,0x25,0x1e,0x1f,0x1f -,0x2a,0x49,0xc5,0x2b,0x19,0x17,0x16,0x26,0x25,0x18,0x13,0x16,0x1e,0x3a,0x5e,0x38,0x20,0x19,0x21,0x1b,0x16,0x1c,0x2b,0xe6,0x3e,0x2d,0x2c,0x1f,0x2a,0xb6,0xcd,0x3f -,0x2e,0x4a,0x9d,0x91,0x86,0x83,0x86,0x87,0x86,0x82,0x82,0x84,0x88,0x88,0x86,0x84,0x83,0x8c,0x91,0x97,0x9a,0x99,0xab,0x23,0x0e,0x0e,0x0c,0x16,0x15,0x0b,0x0a,0x08 -,0x07,0x08,0x07,0x06,0x07,0x0b,0x10,0x11,0x0d,0x0a,0x0e,0x1c,0x1e,0x1c,0x14,0x14,0x1f,0x24,0x2d,0x36,0xcf,0xef,0x3c,0xa8,0xad,0x37,0x2a,0xc9,0x9f,0xa5,0xa1,0xa1 -,0xa6,0xa5,0xa0,0x90,0x90,0xa4,0xb7,0xa6,0x95,0x91,0x96,0x9b,0xa6,0x9a,0x98,0xa5,0x9b,0xac,0xb9,0x9e,0x9d,0x9d,0x9a,0xa0,0xb4,0xa8,0xa7,0xbb,0xde,0x65,0x59,0xe5 -,0x35,0xb9,0xa7,0xe9,0x52,0xb1,0xb5,0x2e,0x28,0x1f,0x2d,0x41,0x28,0x2d,0x30,0x5f,0x2d,0x1b,0x1a,0x0e,0x14,0x19,0x21,0x20,0x19,0x26,0x41,0x2c,0x25,0x1e,0x1c,0x1b -,0x1b,0x22,0x16,0x17,0x17,0x35,0x51,0x2d,0x39,0x20,0x1a,0x18,0x1e,0x2b,0x2b,0x2d,0xb2,0x9d,0xa6,0x92,0x9c,0x9d,0x8c,0x80,0x8f,0x1c,0x81,0x82,0x8a,0x81,0x8c,0x95 -,0xd9,0xbe,0x1e,0x44,0x16,0x03,0x17,0x04,0x03,0x03,0x03,0x07,0x02,0x02,0x05,0x07,0x06,0x0a,0x09,0x0b,0x0b,0x0a,0x10,0x1e,0x31,0xbc,0xbe,0xaa,0x93,0x81,0x83,0x8f -,0x88,0x82,0x83,0x85,0x81,0x81,0x82,0x83,0x85,0x85,0x86,0x85,0x87,0x86,0x89,0x8d,0x8e,0x92,0x8a,0x8e,0x8b,0x9c,0xa1,0x9a,0xc7,0x23,0x15,0x18,0x0f,0x11,0x0c,0x09 -,0x0f,0x0b,0x05,0x04,0x03,0x03,0x04,0x06,0x02,0x03,0x05,0x04,0x02,0x01,0x02,0x00,0x01,0x01,0x04,0x03,0x02,0x06,0x03,0x09,0x0b,0x0a,0x09,0x04,0x11,0x26,0x14,0x1a -,0x2f,0x19,0xb9,0xa7,0x91,0x8e,0x93,0x86,0x85,0x81,0x82,0x83,0x83,0x80,0x83,0x80,0x85,0x82,0x80,0x85,0x80,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x82,0x81,0x82 -,0x85,0x81,0x8b,0x85,0x83,0x8f,0x85,0x87,0x87,0x8d,0x8b,0x81,0x89,0x8d,0x8a,0xb0,0xa8,0x1b,0x17,0x26,0x01,0x0e,0x06,0x01,0x06,0x01,0x02,0x01,0x04,0x09,0x01,0x04 -,0x03,0x00,0x02,0x00,0x07,0x05,0x00,0x06,0x00,0x02,0x01,0x03,0x0a,0x01,0x17,0x09,0x04,0x1c,0x06,0x0b,0x03,0x02,0x1d,0x01,0x1d,0x12,0x00,0x15,0x07,0x22,0x19,0x47 -,0x9d,0x15,0xb5,0x21,0x1c,0xc1,0x13,0x91,0x2e,0x2a,0x8f,0x29,0x9c,0xa1,0x8c,0x8b,0x8f,0x80,0x87,0x80,0x83,0x86,0x87,0x98,0x83,0x82,0x90,0x82,0x91,0x8d,0x84,0x87 -,0x82,0x8d,0x83,0x86,0x85,0x80,0x8e,0x86,0x94,0x9f,0x81,0x9d,0x8f,0x8d,0xb1,0x94,0x95,0x8a,0x94,0x87,0x86,0x8b,0x80,0x8b,0x8f,0x8e,0x99,0x86,0x89,0xa4,0x89,0x8f -,0x8f,0x8e,0x8c,0x8a,0x8e,0x87,0xba,0x8e,0x92,0x16,0x1e,0x0a,0x0e,0x15,0x05,0x07,0x0f,0x03,0x08,0x0d,0x29,0x19,0x48,0x9f,0xc2,0x88,0x29,0x27,0xaf,0x16,0x23,0x40 -,0x0f,0x18,0x0d,0x0b,0x0e,0x0d,0x19,0x05,0x28,0x0b,0x16,0x15,0x00,0x0b,0x03,0x01,0x04,0x05,0x00,0x04,0x01,0x05,0x00,0x08,0x03,0x07,0x1a,0x02,0x13,0x05,0x01,0x08 -,0x00,0x01,0x05,0x03,0x00,0x03,0x02,0x03,0x00,0x0b,0x00,0x0e,0x10,0x06,0x13,0x00,0x09,0x0c,0x01,0x07,0x0c,0x05,0x13,0x0e,0x19,0x1b,0xaf,0x98,0xc2,0x82,0x93,0x84 -,0x82,0x8d,0x82,0x8d,0x89,0x81,0x8a,0x87,0x82,0x86,0x82,0x82,0x80,0x82,0x80,0x81,0x83,0x80,0x81,0x80,0x83,0x8e,0x84,0x83,0x8d,0x81,0x81,0x81,0x81,0x81,0x80,0x80 -,0x80,0x81,0x80,0x80,0x80,0x81,0x82,0x82,0x80,0x8b,0x85,0x82,0x8c,0x8d,0x91,0x8a,0x40,0x9a,0x1f,0x06,0x13,0x02,0x02,0x00,0x00,0x01,0x00,0x01,0x09,0x00,0x02,0x03 -,0x05,0x01,0x05,0x0b,0x00,0x02,0x05,0x00,0x02,0x00,0x08,0x04,0x00,0x17,0x00,0x03,0x0b,0x03,0x04,0x05,0x16,0x04,0x02,0x1f,0x02,0x06,0x05,0x16,0x0f,0x04,0x8a,0x13 -,0x0b,0x97,0x37,0x32,0x28,0x8b,0x50,0x13,0x87,0x17,0x1e,0xaf,0x94,0x62,0x20,0x80,0x53,0x12,0x8a,0xa0,0x33,0xb1,0x82,0xd6,0x19,0x85,0x26,0x1f,0x96,0x8b,0x2d,0xb0 -,0x80,0x9f,0x3a,0x85,0x8a,0x5b,0x9c,0x80,0xbd,0x37,0x84,0x59,0x29,0x98,0x88,0x1d,0xa8,0x83,0x35,0x3b,0xa1,0x45,0x0b,0xff,0x8a,0x07,0x14,0xa6,0x06,0x02,0x20,0xaf -,0x03,0x1c,0x9a,0x14,0x1c,0xae,0xab,0xbf,0x89,0x80,0x9a,0x8b,0x84,0x93,0x87,0x80,0x83,0x8b,0x81,0x82,0x8e,0x8c,0x88,0x98,0x1a,0x9b,0x97,0x0b,0x11,0x0a,0x00,0x03 -,0x1a,0x0b,0x00,0x0b,0x08,0x05,0x0c,0x14,0x10,0x07,0x5c,0xab,0x1a,0x45,0x1e,0x1d,0xc6,0x89,0xa0,0xa2,0x8d,0xa2,0xa4,0x98,0x98,0xb9,0x3d,0x8a,0x8d,0x99,0x91,0x3f -,0x3e,0xa0,0x88,0xa3,0x9b,0x91,0xad,0xa6,0x93,0x8f,0xa2,0xd8,0x88,0x8e,0x98,0x98,0x25,0x32,0x9d,0x8a,0xa0,0x90,0x98,0xe5,0xe7,0xab,0xa2,0x21,0x12,0xa4,0x59,0x2e -,0x21,0x09,0x08,0x1c,0x5b,0x0e,0x39,0x1d,0x09,0x0d,0x19,0xc1,0x1c,0x0c,0x9c,0xb1,0xc9,0x22,0x0e,0x1c,0x77,0xa7,0x1f,0x9c,0xc7,0x0a,0x15,0x37,0x30,0x0d,0x00,0x23 -,0x1d,0x0f,0x14,0x06,0x04,0x0c,0x11,0x0d,0x20,0x18,0x07,0x0a,0x1c,0x59,0x2c,0x1f,0x8c,0x88,0x89,0x88,0x96,0x8e,0x87,0x80,0x81,0x80,0x80,0x88,0x89,0x81,0x82,0x89 -,0x9d,0x8b,0x8d,0xa6,0xbc,0x0d,0x07,0x0b,0x13,0x08,0x0d,0x07,0x02,0x02,0x05,0x16,0x0d,0x01,0x13,0x17,0x12,0x18,0x09,0x08,0x0f,0xc2,0x32,0x9c,0x9e,0x1a,0x1b,0x3e -,0x9d,0xb4,0x10,0xb1,0xac,0xb2,0x9f,0x24,0x1e,0x26,0x92,0xac,0x93,0x8f,0x2b,0x36,0xa3,0x8a,0x8c,0xcc,0x8c,0x89,0x8e,0x89,0xa0,0xae,0xb8,0x8a,0x90,0x8b,0x86,0xa7 -,0x47,0xd1,0x9c,0x97,0x1d,0x4c,0xad,0x59,0xa8,0x1b,0x0f,0x14,0xaf,0x1d,0x3e,0xa1,0x1c,0x0a,0x0d,0x41,0xa5,0x19,0x1a,0xb4,0x4d,0xe6,0x13,0x13,0x17,0xa2,0x49,0xaa -,0x8d,0x25,0x0f,0x15,0x34,0xb5,0x0f,0x0b,0x32,0x1f,0x4a,0x16,0x0e,0x0c,0x21,0x14,0x15,0xd4,0x12,0x07,0x07,0x19,0xcb,0x25,0x24,0x98,0x95,0x8c,0x96,0x96,0x91,0x84 -,0x82,0x83,0x80,0x81,0x88,0x87,0x82,0x81,0x86,0x94,0x89,0x8d,0x8f,0x2f,0x16,0x0d,0x1b,0x0f,0x06,0x1c,0x0b,0x01,0x00,0x05,0x0d,0x07,0x01,0x12,0x11,0x14,0x08,0x07 -,0x0e,0x2b,0x1e,0x1c,0x98,0xa5,0x1a,0x12,0x43,0x9e,0xd0,0x1b,0xa9,0xb6,0xac,0x33,0x1f,0xc9,0x9d,0x77,0xd0,0x8c,0x8e,0xc2,0x1c,0xa8,0x89,0x93,0xa9,0x93,0x94,0x8e -,0xaa,0xae,0x9f,0x88,0x96,0xa1,0x82,0x85,0x95,0x22,0x4d,0x8a,0xac,0x21,0xa3,0xa6,0xa6,0x1d,0x16,0x58,0x8f,0x23,0x0f,0x9b,0x9c,0x13,0x03,0x0f,0x9b,0x46,0x18,0xb2 -,0xd6,0x3c,0x0c,0x0e,0x49,0x8f,0x1b,0x10,0x8c,0x8e,0x1b,0x08,0x10,0x9f,0x21,0x09,0x1d,0x1c,0x10,0x04,0x05,0x27,0x9c,0x0a,0x0a,0xaf,0xb6,0x08,0x00,0x0a,0xb1,0x1c -,0x14,0xb0,0x96,0x9e,0x12,0xb2,0x84,0x80,0x92,0x8a,0x80,0x80,0x86,0x8c,0x85,0x80,0x88,0x8a,0x86,0x80,0x8e,0x1b,0x58,0x87,0x8d,0x0f,0x09,0x4a,0x31,0x05,0x00,0x0c -,0x18,0x02,0x06,0x0c,0x3a,0x0a,0x00,0x05,0xa2,0xe8,0x03,0x0b,0xbb,0x99,0x0c,0x05,0x69,0xb1,0x13,0x1f,0x40,0x8e,0x13,0x02,0xaf,0x80,0x8f,0x35,0x35,0x8c,0x9b,0x0f -,0x1e,0x94,0x8e,0xc8,0xac,0x8c,0x86,0x1d,0x0d,0x8e,0x81,0x9d,0x44,0xb0,0x8c,0x95,0x30,0x9e,0x87,0x91,0xa6,0xb6,0x8d,0x98,0x0c,0x0e,0x8c,0x86,0xac,0x53,0xc6,0x97 -,0xc8,0x0c,0x22,0x46,0x25,0x16,0x18,0xaf,0x1d,0x00,0x12,0x8b,0xa2,0x25,0x19,0x2a,0xa8,0x17,0x18,0xb9,0xa0,0xb3,0x13,0x3f,0x3d,0x09,0x06,0xaf,0x99,0x4b,0x13,0x13 -,0xb5,0x1c,0x09,0x0c,0x0e,0x15,0x10,0x07,0x1c,0x0c,0x01,0x1c,0x90,0x94,0x9d,0xa2,0x8a,0x86,0x8e,0x88,0x83,0x81,0x81,0x80,0x82,0x81,0x8f,0x8f,0x81,0x82,0x85,0x8c -,0x8f,0x8f,0x25,0x12,0x0f,0x06,0x13,0x0a,0x03,0x03,0x00,0x00,0x10,0x37,0x1e,0x0d,0x0a,0x13,0x07,0x02,0x13,0x0e,0x22,0x50,0x1f,0x25,0x0e,0x09,0x9d,0x88,0xbf,0xac -,0x2d,0x9f,0x75,0x10,0x9b,0x95,0x93,0x93,0xf7,0xac,0x0f,0x08,0x92,0x83,0x8a,0x9f,0xac,0x8c,0x91,0x2d,0x93,0x94,0x8e,0x9c,0xba,0x8f,0x34,0x16,0x9f,0x82,0x89,0x99 -,0x3b,0x8e,0x9c,0x0f,0x3d,0x27,0xa8,0x9d,0x3a,0x26,0x0d,0x03,0xde,0x96,0x98,0xad,0x14,0xa8,0x1f,0x26,0xb1,0x1c,0xc2,0xe3,0x1f,0x15,0x07,0x10,0x92,0x4f,0x3e,0x4e -,0x1f,0xab,0x08,0x15,0x17,0x0a,0x1f,0x1a,0x0d,0x0f,0x00,0x0a,0x95,0x14,0x1a,0x0c,0x12,0x3d,0x03,0x1c,0x2e,0xd8,0x8e,0xa9,0x9c,0xbe,0xdc,0x88,0x82,0x84,0x82,0x8b -,0x80,0x81,0x86,0x80,0x8b,0x82,0x88,0x8f,0x93,0x16,0x12,0x87,0xaf,0xa8,0x22,0x0c,0x1c,0x00,0x09,0x00,0x0f,0x26,0x07,0x09,0x09,0x00,0x3f,0xb3,0x1f,0xba,0x07,0x33 -,0x10,0x0b,0x2b,0x1a,0x9c,0xab,0x24,0x13,0x06,0x58,0x8b,0xd3,0x9e,0xc7,0x8f,0x90,0x10,0x9c,0x2c,0xa3,0x8b,0x2f,0xac,0x19,0x15,0x86,0x8a,0x8e,0x8f,0xba,0x81,0xc3 -,0x27,0xb5,0xa6,0x89,0xa8,0x43,0x1c,0x0f,0x90,0x90,0x25,0x90,0x0d,0x94,0xa5,0x08,0x44,0x15,0x9e,0x9b,0x09,0x0a,0x00,0x0c,0x87,0x1f,0xa8,0x29,0xa0,0x8c,0x0e,0x3c -,0x10,0xb1,0x8c,0x10,0x14,0x06,0x04,0x83,0x9d,0x99,0xb6,0x1f,0x92,0x0e,0x1b,0x14,0x32,0x8b,0x49,0x3c,0x13,0x04,0x8a,0x9e,0x43,0xaf,0x12,0x85,0x31,0x1f,0xb0,0xb4 -,0x82,0x95,0xb4,0x2a,0x0d,0x8f,0x87,0xb6,0x9c,0x1a,0x89,0xa1,0x52,0x3c,0x0b,0x8e,0x9b,0x0f,0x10,0x00,0x23,0x85,0x1a,0xbf,0x0a,0xc9,0x33,0x08,0x1b,0x04,0xab,0xad -,0x1c,0x1e,0x04,0x21,0x80,0x54,0x92,0x1e,0x9f,0x8a,0x11,0xbf,0x22,0x8b,0x86,0x9c,0x54,0x08,0x28,0x80,0x9b,0x8e,0x29,0xa2,0x85,0x4e,0xae,0x0a,0xb6,0x86,0x55,0x2c -,0x0a,0x0d,0x80,0x9a,0x8c,0x35,0xb5,0x86,0xd8,0x9e,0x09,0xbc,0x8a,0xc5,0x3d,0x0b,0x07,0x80,0x2e,0xdf,0x18,0x0d,0x8e,0x0c,0x25,0x01,0x18,0x8d,0x4b,0x0e,0x07,0x00 -,0x8c,0x2a,0x26,0x16,0x0c,0x86,0x0f,0x26,0x0b,0x0e,0x8e,0xcc,0x1a,0x0e,0x00,0x87,0x9f,0x99,0x24,0x12,0x87,0x16,0xce,0x06,0x0c,0x88,0xd7,0x17,0x14,0x02,0x80,0x9e -,0xaf,0x65,0x1e,0x82,0xa4,0x90,0x1f,0xa8,0x81,0x8a,0x8a,0x38,0x0f,0x80,0x8e,0x89,0x9e,0x2c,0x81,0x8f,0x8e,0x1c,0x46,0x8c,0x99,0x1a,0x0a,0x00,0x8b,0x4c,0x1e,0x14 -,0x07,0x95,0x09,0x10,0x01,0x05,0x51,0x2e,0x0b,0x07,0x00,0x8c,0x94,0xbb,0x13,0x0d,0x86,0x66,0x95,0x0c,0x1d,0x84,0x8e,0xaa,0x11,0x07,0x84,0x8e,0x99,0x21,0x0f,0x8a -,0xbf,0x8f,0x0d,0x25,0x88,0x9b,0xae,0x0d,0x02,0x83,0x8d,0x98,0x47,0x11,0x83,0x91,0x8d,0x11,0x2c,0x88,0x8e,0x98,0x0d,0x08,0x80,0x8b,0x8d,0x37,0x06,0x8d,0xaa,0xa0 -,0x09,0x07,0xa2,0x9b,0x2d,0x0b,0x00,0xa7,0x97,0xa7,0x17,0x06,0x94,0x3e,0x98,0x13,0x0e,0x8e,0x8f,0xb9,0x13,0x01,0x8f,0x88,0x95,0x2e,0x09,0x8f,0xa3,0x8e,0x0a,0x03 -,0x9e,0x95,0xcd,0x13,0x00,0xa6,0x89,0xa1,0x2d,0x02,0xac,0xa9,0x92,0x0f,0x08,0xa7,0x8e,0x8b,0x3d,0x05,0x8f,0x84,0x8c,0x91,0x0c,0x8c,0x8d,0x88,0xbe,0x0f,0x9b,0x89 -,0x98,0x16,0x02,0x52,0x89,0xa2,0x33,0x00,0xca,0xb5,0xa3,0x13,0x00,0x1c,0xa7,0xbc,0x13,0x00,0x10,0x86,0x98,0xa5,0x05,0x53,0x9c,0x8f,0xa8,0x01,0x74,0x91,0x8c,0x5c -,0x05,0x1f,0x81,0x8f,0x8e,0x0a,0x21,0x8f,0x94,0xaa,0x04,0x3e,0x97,0x8e,0x2e,0x04,0x0b,0x87,0x8a,0x8d,0x10,0x16,0x8a,0x8f,0x8b,0x0b,0x1d,0x8f,0x80,0x93,0x0d,0x09 -,0x8b,0x85,0x86,0x26,0x0a,0x96,0x9f,0x8f,0x09,0x0a,0x39,0x9a,0xb8,0x0e,0x00,0x2f,0x89,0x9e,0x20,0x02,0xf1,0xb4,0x95,0x0e,0x06,0xcb,0x8e,0x9a,0x13,0x03,0xdf,0x81 -,0x8c,0xa2,0x05,0xae,0x90,0x8b,0x3c,0x09,0x3c,0x91,0x8d,0x1c,0x01,0x0b,0x87,0x8a,0xa1,0x06,0x11,0xa7,0x97,0xbf,0x06,0x29,0x98,0x8c,0xeb,0x0a,0x0f,0x89,0x85,0x86 -,0x26,0x15,0x8a,0x8e,0x8d,0x18,0x27,0x92,0x87,0xa1,0x0b,0x08,0x95,0x84,0xa1,0x1a,0x04,0xb3,0xae,0xb6,0x09,0x00,0x2e,0x9f,0xf6,0x0e,0x00,0x15,0x86,0x96,0x73,0x03 -,0x34,0x98,0xa5,0x49,0x07,0xc7,0x8f,0x93,0x26,0x0a,0x21,0x83,0x92,0xa0,0x10,0x1d,0x8f,0xba,0xae,0x08,0x28,0x91,0xa8,0x1c,0x0a,0x09,0x8b,0x89,0xb8,0x1d,0x0f,0x8a -,0x9a,0xa7,0x15,0x28,0x8a,0x8a,0x98,0x16,0x0b,0x99,0x82,0x95,0x9a,0x0c,0xa6,0x96,0xcb,0x26,0x0c,0xa7,0x97,0xbc,0x0f,0x08,0x0b,0x8d,0xa6,0x2b,0x0f,0x20,0x99,0x19 -,0x22,0x07,0x4d,0x90,0x98,0x25,0x0d,0x0e,0x8e,0x89,0xae,0xd1,0x17,0x8b,0x9d,0xf6,0x0c,0x1e,0x91,0x90,0xb1,0x0d,0x04,0x22,0x86,0xbb,0x36,0x07,0x38,0xa8,0x35,0x21 -,0x0b,0xbb,0x9c,0x9d,0x1e,0x11,0x18,0x89,0x93,0x96,0x3a,0x4f,0x8a,0xc2,0xaf,0x1a,0x9c,0x8d,0x93,0x4b,0x14,0x0c,0x8f,0x8b,0xc0,0x41,0x0e,0x93,0xd7,0x24,0x08,0x0c -,0xab,0x9f,0x36,0x11,0x03,0x30,0x87,0xa4,0xa3,0x0a,0xa2,0x8f,0xae,0x5c,0x16,0xa5,0x8f,0x92,0xbe,0x16,0x19,0x88,0xa4,0x9d,0x28,0x5d,0x8f,0x1e,0x26,0x08,0x3f,0x98 -,0xbe,0x1c,0x0f,0x09,0x94,0x9a,0x24,0x2b,0x13,0x8b,0xc0,0x29,0x0e,0x25,0x8f,0x8d,0x9d,0x1c,0x0e,0xad,0x89,0xaf,0x9c,0x11,0x94,0x9a,0x20,0x1d,0x0e,0x9f,0x9a,0xaf -,0x1a,0x0a,0x07,0x93,0xc5,0x6f,0x1c,0xdc,0x97,0x14,0x25,0x0d,0xa0,0x8f,0x98,0x79,0x1a,0x0f,0x8e,0x8d,0xa8,0xad,0x24,0x85,0xaf,0x23,0x0c,0x32,0x91,0x8c,0xa3,0x11 -,0x03,0x1c,0x8b,0xaa,0xc8,0x0d,0x9b,0x51,0x18,0x16,0x0b,0xb5,0x95,0x9f,0x27,0x0b,0x0e,0x8b,0x9d,0xa0,0x33,0x9f,0x96,0x73,0xef,0x19,0x9c,0x95,0x97,0xab,0x1e,0x12 -,0x95,0xa3,0x55,0x1e,0x1e,0x8e,0x28,0x15,0x0a,0x19,0x9e,0x90,0x44,0x0d,0x06,0x2b,0x8b,0x9f,0x42,0x1e,0x8e,0x9d,0x9f,0x21,0x1c,0x8c,0x8e,0x94,0x3e,0x0b,0x0e,0x8a -,0xa7,0xb0,0x36,0x29,0x97,0x1f,0x11,0x0e,0xcb,0xb5,0x9c,0x4f,0x0f,0x0f,0xb4,0xa3,0xcd,0xb6,0x3f,0x88,0x2f,0x15,0x10,0x33,0x8a,0x89,0xb0,0x1b,0x0f,0x30,0x83,0xb3 -,0x2e,0x39,0x93,0xb5,0x5a,0x10,0x0e,0x9f,0xae,0x93,0x2a,0x02,0x07,0x95,0xb5,0xa3,0x2a,0x20,0x93,0x2d,0x2b,0x2d,0x9a,0x99,0x8d,0x45,0x1a,0x27,0xda,0x94,0x9f,0xa9 -,0xa8,0x8f,0x1e,0x2d,0x11,0x2f,0x8a,0x9e,0x25,0x11,0x08,0x27,0x89,0x31,0x35,0x20,0xb2,0xa8,0x35,0x0e,0x1e,0x97,0xaf,0x8e,0x2b,0x09,0x17,0x96,0x9a,0x91,0x44,0xb2 -,0x8e,0x40,0xc0,0x35,0xb0,0xa7,0xa1,0x21,0x29,0x0e,0x18,0xa7,0xc7,0x45,0xc4,0xb9,0x1a,0xd0,0x1a,0xab,0x96,0x49,0x2a,0x21,0x17,0xa7,0x8d,0x2d,0xbf,0xf8,0x96,0x92 -,0x28,0x13,0xdd,0x98,0x93,0x96,0x18,0x09,0x0f,0xb8,0x9a,0xa3,0x17,0x1b,0xb1,0x5e,0xa4,0x2d,0x44,0x9b,0xbf,0x53,0x2c,0x0e,0x1a,0xbf,0xda,0x9c,0xb9,0x2f,0x3b,0xd9 -,0xaa,0x99,0x97,0xb8,0xaa,0x3b,0xe0,0xdc,0xd4,0x45,0x3b,0x47,0x55,0xaa,0x15,0x1c,0xdc,0xa5,0x94,0x9e,0x28,0x1c,0x20,0x6b,0x9b,0x36,0x1d,0x1d,0x24,0xc1,0xac,0x44 -,0xc6,0xb7,0x9f,0x95,0xd2,0x1d,0x22,0x42,0x9b,0x96,0xd6,0x1e,0x1a,0xaf,0x9c,0x97,0x3a,0x26,0xae,0xbb,0xc2,0x1c,0x1e,0x26,0x46,0xa7,0xa8,0x24,0x16,0x25,0xe5,0x99 -,0x9d,0xc0,0x3c,0x51,0x55,0xae,0xaf,0x24,0x50,0xda,0xb6,0xba,0x28,0x30,0x29,0xd0,0x93,0x90,0x4f,0x1f,0x27,0x3d,0xb6,0x42,0x30,0x30,0x36,0x3a,0xa6,0xb1,0x27,0x43 -,0xc6,0xa0,0xcd,0x19,0x1c,0x28,0xcc,0xb4,0xb3,0x64,0x2c,0x3f,0xa8,0x9f,0xb9,0xc6,0x3e,0xd5,0xa0,0x9f,0x53,0x31,0x24,0x2f,0xa9,0xf1,0x38,0x18,0x21,0xab,0x9a,0xa2 -,0x25,0x1f,0xb4,0xa9,0xeb,0x2e,0x1a,0x22,0xb4,0x9d,0xbc,0x2a,0x34,0xa2,0x9c,0xac,0x2e,0x2b,0xc8,0xa8,0xa9,0xcd,0x3d,0x2e,0x9f,0xa5,0x44,0x2e,0x41,0xcd,0x71,0xbf -,0x41,0x36,0x3e,0x2f,0x2d,0x35,0x22,0x3b,0xf0,0x29,0x47,0xb0,0x99,0xa7,0xee,0xbc,0xbe,0x98,0x9d,0x48,0x27,0x29,0x4a,0xba,0xa5,0xdc,0x24,0x26,0x3f,0x63,0x38,0x29 -,0x50,0xa8,0xb0,0xd4,0x38,0x2f,0x2c,0xbe,0xa9,0x4e,0x3b,0x1e,0x33,0x37,0x38,0xb5,0xa5,0x97,0x96,0xba,0x3f,0x42,0x39,0x9b,0xdf,0xa8,0xb5,0xcf,0x37,0x1f,0xba,0xb6 -,0xb5,0x29,0x20,0x1c,0x25,0x14,0xd3,0x3a,0xb0,0xab,0x36,0xbd,0x12,0xde,0xa0,0x93,0x98,0xbe,0x2e,0x2c,0xc4,0xb2,0x38,0xa1,0x94,0x36,0xe7,0x1a,0x16,0xb8,0x32,0x3e -,0x4d,0x69,0xc4,0x5c,0x36,0xb5,0xb2,0x33,0xbb,0x2a,0x25,0x26,0x40,0x99,0x8c,0xc8,0xac,0x95,0x14,0x0a,0xcf,0x9e,0x1e,0x11,0x0a,0xbd,0x9e,0x89,0x88,0x25,0x53,0x72 -,0x15,0x0f,0x10,0x0b,0x94,0x85,0x9d,0x1f,0x25,0x89,0x87,0x8d,0x26,0x2e,0x58,0xd9,0x26,0x07,0xcd,0x85,0xc9,0x02,0x0f,0x46,0x93,0x17,0x0f,0x8e,0x80,0x86,0x1f,0x09 -,0x11,0x16,0x0f,0x03,0x10,0x2c,0x15,0x80,0x8b,0xb3,0xa1,0x9e,0x8c,0xa2,0x5c,0x28,0x00,0x0f,0x8d,0xa3,0x92,0x8d,0x80,0x44,0x16,0xd4,0x1e,0x13,0x04,0x19,0xb0,0x00 -,0xad,0x94,0x2c,0xa8,0x36,0x98,0x0f,0x11,0x04,0xaf,0x8f,0x8f,0xab,0x0f,0x0a,0x86,0x95,0x57,0x9c,0x9f,0x85,0x1a,0x1c,0x47,0x84,0x3d,0x21,0x2d,0x06,0x00,0x58,0x6c -,0x8b,0x81,0x88,0xaf,0x0b,0x56,0x0d,0x08,0x0f,0xa4,0x16,0x00,0x0d,0x83,0x8e,0x8a,0xa6,0x8d,0xbe,0x29,0xa2,0x0e,0xed,0x8d,0x88,0xec,0x07,0x2c,0x83,0xc4,0x91,0x13 -,0x1c,0x06,0x1c,0xa0,0x33,0x91,0x99,0xe0,0x0b,0x00,0x0b,0x81,0x9c,0xb4,0x1f,0x86,0xdb,0xbf,0x91,0xa0,0x8d,0x8e,0xd8,0x09,0x00,0x1a,0x80,0x99,0x88,0xca,0x8c,0x17 -,0x27,0xab,0x1d,0x17,0x29,0x9e,0x22,0x00,0x1e,0x81,0xa7,0xab,0x03,0x58,0x29,0x2b,0x1e,0xce,0x8e,0x98,0xbc,0x1d,0x05,0xac,0x80,0xa9,0xaf,0x21,0x84,0x1b,0x1c,0xa0 -,0x97,0xa1,0x3d,0x1a,0x0b,0x02,0xbc,0x80,0x32,0xa9,0x20,0x8f,0x0b,0x0a,0x13,0x1a,0xab,0x55,0x3b,0x13,0x0b,0x4e,0x85,0x36,0x88,0x9f,0x90,0x2a,0xaa,0x8f,0xa0,0xc2 -,0x19,0x9b,0xad,0x05,0x0b,0x88,0x40,0x9c,0x24,0x90,0x36,0x50,0xad,0x33,0x24,0x0e,0x20,0x08,0x00,0x17,0x82,0x1f,0x9f,0xaf,0x88,0x6c,0x6a,0x98,0xe3,0xa8,0x4b,0x8d -,0xa4,0x0c,0x0b,0x85,0xcf,0x9b,0xd1,0x94,0x1e,0x0b,0x26,0x11,0xdc,0xab,0x8c,0x37,0x03,0x00,0x8c,0x1e,0x27,0xbd,0x8e,0xb1,0x15,0xa4,0x37,0xa6,0x9a,0x84,0xab,0x07 -,0x06,0x82,0xa7,0xa7,0xb4,0x99,0x9b,0x15,0x31,0x14,0xad,0xa4,0x8d,0x2a,0x07,0x03,0x85,0x9c,0x22,0xc1,0xad,0x22,0x00,0x0f,0x1f,0x99,0xa0,0x8c,0xcc,0x0f,0x02,0x8a -,0x8d,0xaa,0x89,0x93,0xa9,0x02,0x35,0xa0,0x8e,0x94,0x88,0x42,0x0c,0x00,0x9a,0x91,0x1e,0x9a,0x38,0xa9,0x00,0x13,0x2f,0x61,0x1f,0xc4,0x36,0x0f,0x00,0x9b,0x84,0xb9 -,0x92,0xc3,0x8f,0x0b,0x44,0x90,0x94,0x99,0x98,0xca,0x12,0x04,0x9a,0x82,0x2f,0xb9,0x15,0x36,0x00,0x18,0x93,0x9a,0xb0,0xce,0x54,0x14,0x00,0x12,0x84,0x3c,0xb6,0x12 -,0xc4,0x21,0x36,0x8b,0xa4,0x96,0x8b,0x8a,0x3d,0x01,0x1b,0x80,0x38,0x52,0x1f,0x9a,0xcb,0x14,0x99,0x1e,0x38,0xab,0xab,0x1d,0x03,0x0e,0x80,0x1f,0x0c,0x08,0x26,0xaf -,0x0f,0x99,0xcf,0x95,0x92,0x96,0xb8,0x13,0x1c,0x80,0xd8,0x1e,0x37,0xaf,0xa4,0x08,0x99,0x9f,0x9e,0x9f,0x96,0x2c,0x08,0x00,0x8c,0x97,0x39,0xa4,0x39,0x9e,0x02,0x1e -,0x1c,0x2f,0xa7,0x9d,0x30,0x0d,0x00,0x8f,0x8c,0x38,0x8c,0x97,0x86,0x0b,0x22,0xb7,0xab,0x97,0x8b,0x94,0x19,0x00,0xa1,0x8b,0x13,0xa3,0x36,0x98,0x08,0x19,0xac,0xb6 -,0xad,0x9a,0x45,0x08,0x00,0x18,0x87,0xee,0x8d,0xc0,0x9a,0x10,0x27,0x8c,0x92,0x93,0x8c,0x9d,0x0a,0x00,0x19,0x80,0x9e,0x8f,0xa9,0x9b,0x0e,0x05,0x33,0xc3,0x93,0x87 -,0x99,0x09,0x00,0x09,0x82,0x59,0xaa,0x34,0x21,0x10,0x05,0xa0,0x98,0x8e,0x89,0x8d,0x1f,0x06,0x0a,0x81,0xa4,0x9f,0x9f,0x9f,0xc6,0x09,0x98,0x8f,0xa6,0xb3,0x58,0x0b -,0x06,0x04,0x85,0x96,0xd6,0xb9,0x1e,0x21,0x03,0x32,0xce,0x2f,0xa0,0x99,0x1d,0x0e,0x05,0x88,0x89,0x9c,0x91,0x2d,0x2c,0x02,0x38,0x8c,0x9f,0xa3,0x96,0x36,0x1d,0x00 -,0x99,0x8b,0x2a,0x95,0x46,0x99,0x0d,0x1b,0xb3,0x12,0x1e,0xac,0x19,0x0d,0x00,0xe3,0x83,0x4c,0x8b,0x9e,0x8b,0x25,0x1f,0x9b,0x21,0x49,0x92,0x9d,0x3c,0x04,0x2b,0x80 -,0xc3,0x96,0x33,0xca,0x0c,0x07,0xc4,0x2b,0xbc,0x94,0xbc,0x0e,0x01,0x0d,0x81,0x1f,0xfc,0xae,0x9d,0x2a,0x07,0x9c,0xac,0x96,0x89,0x8d,0x2d,0x07,0x09,0x81,0x9f,0x9f -,0x93,0x9e,0x3c,0x00,0x3e,0x29,0xd9,0x9c,0x96,0x37,0x09,0x07,0x87,0xa0,0x20,0xac,0x28,0x1b,0x00,0x2a,0x6e,0xbd,0x9c,0x8e,0x9e,0x1a,0x0c,0x8a,0x8a,0x4e,0x98,0xb1 -,0xb9,0x06,0x33,0xa5,0xa2,0x97,0x92,0x37,0x0a,0x00,0xa6,0x85,0x31,0x9b,0x2a,0x26,0x01,0x0d,0x45,0x3c,0xab,0x99,0xb1,0x0f,0x08,0xa4,0x80,0xa1,0x8d,0xcd,0xca,0x0e -,0x0d,0xa8,0xd0,0x9f,0x93,0x9f,0x17,0x09,0x49,0x80,0x39,0xbe,0x4b,0x3c,0x19,0x06,0xb9,0x68,0xbb,0xa5,0x2e,0x0c,0x04,0x0f,0x80,0xc6,0x3a,0xb4,0xe1,0xad,0x0e,0x98 -,0x95,0x9c,0x94,0xa1,0x22,0x12,0x0f,0x81,0x9f,0x28,0xaf,0x24,0xa2,0x08,0x53,0xae,0x49,0xa7,0xa2,0x1d,0x0e,0x00,0x95,0x9a,0x0d,0xb3,0x1d,0x99,0x0d,0x4f,0x93,0xa2 -,0x8f,0x91,0xad,0x26,0x09,0x9b,0x87,0x13,0xa5,0x39,0x9a,0x10,0x14,0x9e,0x5f,0x98,0x9c,0xe8,0x1e,0x05,0x29,0x83,0x1c,0x3f,0x1d,0x3c,0x12,0x09,0xa0,0x34,0x9f,0x92 -,0x9d,0x2a,0x0a,0x13,0x80,0x9b,0x9c,0xa0,0xaf,0x36,0x0a,0x93,0x9f,0x9c,0x9d,0xa8,0x19,0x09,0x08,0x87,0x99,0x17,0x6a,0x30,0xbd,0x03,0x31,0x36,0x3c,0x47,0xbf,0x35 -,0x11,0x09,0x8f,0x83,0xd8,0x9a,0xaf,0x90,0x15,0xf4,0xa5,0x58,0xae,0xaf,0x2f,0x0f,0x04,0xcc,0x81,0x27,0xb4,0xd2,0x9e,0x13,0x1c,0x93,0xb6,0xd5,0x3a,0x1c,0x0c,0x03 -,0x19,0x80,0x35,0x2d,0xd6,0x92,0xa4,0x21,0x92,0xa7,0xaf,0xae,0xba,0x29,0x0f,0x0c,0x82,0xa1,0x3a,0xb6,0xd5,0xd3,0x0e,0xa3,0x4a,0x1f,0x3c,0xa9,0x2d,0x12,0x00,0x91 -,0x96,0x11,0xbc,0xc2,0x98,0x1a,0x9c,0x9a,0x3c,0xbd,0x95,0xa3,0x2d,0x07,0xa0,0x86,0x18,0xdd,0xcc,0x94,0x18,0x1c,0x43,0x0f,0x1f,0x9c,0x98,0x27,0x04,0x19,0x81,0xc8 -,0xa8,0xa6,0xa3,0x17,0x0b,0xaf,0x1d,0x29,0xa5,0x90,0xd7,0x0d,0x0e,0x84,0x99,0x4f,0x97,0x9b,0x35,0x07,0xb8,0xcb,0x32,0xac,0x9b,0x2b,0x0b,0x03,0x9b,0x89,0x2b,0x9c -,0x92,0xa1,0x0e,0x1d,0xc1,0x1b,0xe5,0x98,0xaa,0x17,0x08,0x31,0x82,0x9c,0xa2,0x99,0x46,0x15,0x0f,0x9e,0x19,0x13,0xc0,0x9a,0x45,0x0e,0x0c,0x8f,0x91,0x27,0x8f,0xab -,0xac,0x13,0xa0,0xa2,0x35,0x9d,0x93,0xb0,0x11,0x07,0x2e,0x88,0x0f,0xbf,0xa8,0xab,0x1e,0x17,0xbf,0x10,0x61,0x9b,0x9a,0x1d,0x0a,0x11,0x85,0xa1,0x20,0x99,0xae,0xaf -,0x18,0x9d,0x28,0x1c,0x9b,0x86,0x88,0x3e,0x08,0x2a,0x94,0x0d,0xa4,0x99,0xc1,0x0b,0x13,0xb9,0x1c,0xb4,0x95,0x8d,0x35,0x09,0x06,0x98,0x20,0x18,0x89,0x93,0x56,0x0c -,0xf2,0x33,0x30,0x92,0x86,0x93,0x1c,0x0a,0x9f,0x83,0x29,0x98,0x9a,0x29,0x0d,0x0f,0x27,0x09,0x26,0x8d,0x8b,0x3e,0x09,0x06,0x93,0xa9,0x33,0x8c,0xc2,0x1d,0x0d,0xaf -,0xaf,0x34,0x8f,0x8e,0xa4,0x25,0x0c,0x23,0x97,0x29,0x94,0x85,0x9a,0x1d,0x0b,0x2a,0x15,0xad,0x8f,0xaf,0x18,0x0b,0x09,0xb2,0x8f,0xcf,0x8b,0x95,0xcb,0x0f,0x16,0x1e -,0x22,0x91,0x8c,0xa7,0x15,0x0c,0x09,0x91,0x96,0xac,0x96,0x4a,0x2f,0x2e,0x9e,0xad,0xbe,0xb2,0xad,0x36,0x28,0x0a,0x0b,0x99,0xc3,0x96,0x90,0xbb,0x1c,0x16,0xc3,0xaf -,0xa3,0xc4,0x2d,0x2d,0xfb,0x19,0xad,0x95,0x4b,0x9a,0x98,0xb3,0x0e,0x0d,0xfd,0xac,0x9b,0xa5,0xe1,0x28,0x15,0x11,0xa8,0x9b,0x23,0x70,0xbb,0xaf,0x28,0xaf,0x9c,0xb0 -,0xa9,0x9b,0xa2,0x15,0x0f,0x0d,0x8f,0x8f,0xde,0xc7,0x2b,0x21,0x22,0xa7,0xbc,0x1f,0x1a,0xb1,0xab,0x9f,0xec,0x25,0x96,0xa9,0xfc,0x9f,0x33,0x12,0x0f,0xbd,0xa4,0x2f -,0xb8,0xaf,0xb9,0xce,0x3d,0x6e,0xa3,0x1e,0x30,0x9d,0x9e,0x38,0x1c,0xb5,0x64,0xa8,0xaa,0x2f,0x1e,0x26,0x2f,0xca,0x95,0xa9,0x31,0xab,0xdb,0x19,0x1c,0x23,0x23,0x61 -,0x9d,0x9b,0xb5,0x3f,0xfc,0xa7,0x89,0xb8,0x1d,0x30,0x17,0x29,0x6d,0xb2,0x26,0x3e,0xaf,0x5b,0x65,0xb7,0x7a,0x34,0xd7,0xc3,0x9f,0xc6,0xbd,0x44,0x5e,0xa9,0x5d,0x4b -,0x14,0x1c,0xac,0xaf,0xbc,0xda,0x2b,0xb7,0xd8,0xbe,0xae,0x49,0x2f,0x1f,0xae,0xa3,0xdf,0x3d,0xa5,0xa3,0xc4,0x2e,0x28,0x26,0x2e,0xba,0xc2,0xa9,0x3c,0x2e,0x2e,0xd9 -,0xb5,0x3f,0x3c,0x38,0x4d,0xb0,0xa7,0xa8,0xa5,0x4c,0xd2,0xbe,0xbf,0x33,0x1c,0x2f,0x3b,0x75,0xca,0x2b,0xbb,0xa7,0xbe,0xa9,0x66,0x2d,0x1b,0x2e,0xa6,0xa4,0xbc,0x35 -,0x5e,0xad,0xba,0x3c,0xd6,0x51,0x31,0x2e,0x40,0xdc,0xb6,0xa8,0xc5,0x3e,0x42,0x2d,0x4c,0xd3,0x4f,0xb0,0xc8,0xbe,0x3e,0x59,0xb2,0xb3,0xb1,0x45,0x23,0x24,0x4a,0xb5 -,0xaa,0xd1,0x48,0x3d,0x48,0x2a,0x33,0x60,0x4d,0xdf,0x76,0xb9,0xbc,0xb3,0xa1,0x9c,0xa9,0x32,0x28,0x33,0x2e,0x39,0xda,0x42,0x2f,0x25,0x2f,0xba,0x9f,0x9d,0xad,0x31 -,0x23,0x6b,0xa9,0xa5,0xd8,0xc1,0x3f,0x18,0x1a,0x2d,0xbf,0xac,0xa6,0xa8,0xb0,0x3e,0x4d,0xd1,0xb6,0xbf,0x35,0x2a,0x1f,0x27,0xd6,0xac,0xab,0xab,0xae,0xf2,0x31,0x5f -,0xc7,0xb6,0xc9,0x33,0x29,0x2c,0x2c,0xce,0xaa,0xcd,0xe1,0x5f,0x75,0x31,0x35,0xa7,0x9e,0xab,0x44,0x2b,0x38,0x36,0xea,0xa9,0xba,0x3d,0x2e,0x3e,0x47,0x41,0xc2,0xca -,0xbf,0xc1,0xcf,0x4b,0x2f,0x3e,0xc8,0xdb,0xce,0xa6,0xb4,0x6a,0x2f,0x51,0x56,0x3c,0x48,0x3f,0xbf,0x46,0x2d,0xe8,0xb1,0xab,0xa5,0xae,0xb9,0x2f,0x2d,0x39,0x37,0xce -,0xd1,0xb8,0x59,0x2e,0x36,0x43,0xbf,0xb4,0xbe,0xce,0x38,0x31,0x31,0x58,0xb4,0xaf,0xa9,0x3a,0x17,0x1d,0x76,0x9f,0x98,0x9a,0xaa,0x26,0x1d,0x26,0xc9,0xa8,0xc2,0xbf -,0x3e,0x20,0x2c,0x6c,0xb1,0xa9,0xb7,0xaf,0x2d,0x25,0x2c,0x4b,0xae,0xba,0x9d,0xa8,0x2b,0x1d,0x26,0x3c,0xbe,0xb2,0x9b,0xb1,0x33,0x3a,0x2e,0xb4,0xb2,0xab,0xa8,0x2b -,0x1d,0x28,0x2f,0xa8,0xb3,0xae,0x50,0x1e,0x2f,0x26,0xdb,0xc1,0x59,0xbb,0x78,0x44,0xaf,0xc4,0xb6,0xc2,0xb4,0xa7,0x56,0xd5,0x38,0x4f,0xb2,0xa6,0xa4,0x5c,0x1d,0x1a -,0x24,0xfa,0xbc,0xb6,0xb2,0x28,0x20,0x2e,0xe2,0xad,0xa7,0xad,0x6d,0x27,0x36,0xdf,0xa8,0x9f,0xa3,0x9c,0x51,0x27,0x21,0x27,0x3f,0x6b,0xcd,0xf4,0x33,0x37,0x3e,0x2c -,0x35,0x3d,0xa2,0xa0,0xde,0x2f,0x2b,0x52,0xbb,0xa3,0x9e,0xbc,0x33,0x38,0xde,0xba,0xca,0xad,0xab,0x59,0x39,0x40,0x43,0x2b,0x29,0x2a,0x20,0x2f,0xdb,0xb7,0xbb,0xe7 -,0xbc,0xaf,0xbd,0xc5,0x48,0x54,0x52,0xec,0xad,0xcd,0x49,0x6b,0xcc,0xd0,0x62,0xaf,0xa1,0xc9,0x4d,0x31,0x37,0x5c,0xbc,0xa3,0x5b,0x16,0x16,0x27,0x42,0xea,0xbf,0xac -,0xe8,0xd5,0xce,0xf6,0xd3,0xbf,0xb7,0xc9,0x5a,0xce,0xaf,0xb1,0xd2,0xd1,0xa9,0xb4,0xbf,0x44,0x26,0x24,0x30,0x61,0xbb,0x52,0x32,0x43,0x3b,0x32,0x7b,0xb0,0xce,0x63 -,0x65,0xc7,0xb6,0xa8,0xad,0xba,0x3d,0x29,0x3d,0xc7,0xae,0xc1,0xc9,0x2f,0x2b,0x40,0xe4,0xd7,0x3c,0x34,0x3d,0x4d,0x49,0x65,0xc4,0xaf,0xc2,0xa8,0xaf,0x5a,0x36,0x26 -,0x30,0x75,0xaf,0xb0,0xc6,0x3c,0x34,0x47,0xac,0xb7,0xd1,0x37,0x45,0xdb,0x4f,0xc5,0xdf,0xb9,0xc8,0x6a,0x4b,0x5f,0x53,0x7a,0x3f,0x3a,0x36,0xd5,0xaa,0xb5,0x6a,0x26 -,0x29,0x3b,0xde,0xab,0xa8,0xf4,0xd7,0xca,0xad,0xb5,0xb1,0xba,0x24,0x21,0x29,0xcc,0xb6,0x4d,0x2b,0x39,0x36,0xc8,0xb1,0xad,0xe7,0x26,0xec,0x4a,0xb7,0xb3,0xba,0xb3 -,0xc4,0x53,0x4e,0x4f,0x46,0x3f,0x39,0x5d,0x43,0xaa,0xc0,0x3c,0x32,0x2a,0x3f,0xca,0xaa,0xb2,0x42,0x2c,0x58,0xac,0x9e,0xac,0xb1,0x5e,0x22,0x26,0x3b,0xaf,0xaf,0xc5 -,0xd8,0x3d,0x40,0xed,0x5f,0x3a,0x29,0x3a,0xc6,0xed,0xce,0xda,0xe7,0xba,0xb3,0xb2,0xd9,0x58,0x3a,0x30,0x3a,0x31,0xde,0xa8,0xc9,0x34,0x2b,0x42,0xb3,0xb5,0xba,0xd5 -,0x69,0xdd,0xbc,0xb1,0xaf,0xef,0x49,0x2c,0x24,0x2e,0x4c,0xc2,0x44,0x38,0x37,0xb6,0xaa,0xb5,0x74,0x39,0x3b,0xdf,0xb6,0xae,0xb9,0x49,0xba,0xd7,0xba,0xb1,0xba,0x4e -,0x26,0x2b,0x2e,0x4c,0xb3,0xb6,0x58,0x3f,0x38,0xd6,0xfa,0x60,0x59,0x49,0xdd,0x3f,0x72,0xbc,0xbc,0xbd,0xbe,0xc8,0x45,0x3d,0x4f,0x2e,0x38,0x56,0xbe,0xac,0xd6,0x3a -,0x37,0x49,0xfb,0xbb,0xb8,0x69,0x48,0xc8,0xc2,0xaf,0xae,0xaf,0xc8,0x25,0x22,0x2d,0xe4,0xbb,0xde,0xe0,0xed,0x2f,0x39,0xc2,0xbb,0x5d,0x47,0xc6,0xde,0xc5,0xae,0xb1 -,0xaf,0xbe,0xe1,0x50,0x38,0x2d,0x29,0x2d,0x3e,0xc1,0xa9,0xac,0x36,0x38,0xe4,0xb4,0xc2,0x44,0x38,0x2d,0x3b,0xcd,0xaa,0xad,0xc0,0x3b,0x47,0x2e,0x38,0xdd,0xe4,0x57 -,0x2f,0x4e,0xba,0xaa,0xb2,0xcd,0x3b,0x6e,0x47,0xfe,0xdf,0xcb,0xb0,0xb6,0xb8,0x48,0xca,0xd9,0x3b,0x2e,0x2c,0x30,0x60,0xc2,0xa9,0xba,0x35,0x3d,0x5d,0xaf,0xbb,0x50 -,0x36,0x35,0x4d,0xc4,0xb5,0xb0,0xd8,0x7e,0x4e,0x4e,0xdc,0x2c,0x34,0x5d,0xbb,0xac,0xc5,0xc8,0x77,0x28,0x2e,0x59,0xb7,0xb1,0x47,0x40,0x3f,0xd3,0xb5,0xb6,0xb6,0x36 -,0x29,0x2b,0x22,0x57,0xaf,0x9f,0xa5,0x6d,0x56,0x54,0xc4,0xba,0x75,0x2e,0x2f,0x42,0xb8,0xc4,0xc4,0xcc,0xaf,0xaa,0x38,0x36,0x33,0x2c,0x30,0x59,0xb0,0xb4,0x40,0x3c -,0x3c,0x6d,0xbf,0xae,0xba,0x3c,0x4d,0xce,0xce,0xbc,0xb1,0xb3,0xd9,0x29,0x2c,0x1f,0x26,0x5f,0xb1,0xa7,0xc4,0x76,0xc8,0xb8,0xc1,0xbe,0x41,0x2c,0x2e,0xbf,0xc1,0x58 -,0x47,0x47,0xad,0xab,0xb1,0x38,0x1f,0x1f,0x68,0xae,0xa8,0xb0,0xc2,0xdd,0x35,0x5d,0xc3,0xbe,0x4d,0x3d,0x3c,0xd7,0x6f,0xbf,0xac,0xc2,0x44,0x3e,0x46,0x2b,0x30,0x4f -,0xb8,0xab,0xbe,0x48,0xf4,0xce,0xdf,0x64,0x29,0x2e,0x43,0xbb,0xcc,0x39,0xc4,0xa7,0x9e,0xbc,0x2e,0x24,0x21,0x2f,0xb9,0xad,0xb9,0xd6,0xce,0xf8,0x38,0xe2,0xcc,0x50 -,0x39,0x3c,0xbe,0xaf,0xbf,0xd0,0x69,0xcb,0xd0,0x3f,0x30,0x2f,0x4a,0xd5,0xba,0xb1,0xbe,0xb6,0xab,0xca,0x39,0x23,0x23,0x3a,0xbc,0xaf,0x47,0x34,0xbb,0xa0,0xa9,0xd4 -,0x3e,0x3e,0x2c,0x2f,0x6c,0xca,0x67,0x36,0xbb,0xb3,0xe6,0x44,0x32,0x32,0x3e,0xc4,0x9f,0xae,0x40,0x44,0xeb,0xb5,0xc0,0x4a,0x25,0x1d,0x26,0x58,0xa9,0xa1,0xac,0xaa -,0xed,0x48,0x41,0x37,0x61,0x6c,0xbb,0xce,0x34,0x2a,0x70,0xa7,0x9e,0xc5,0x38,0x2b,0x2b,0x36,0x51,0xb5,0xc6,0xb8,0xbe,0xd6,0xc5,0x44,0x2a,0x44,0x53,0xb8,0xc1,0x45 -,0x35,0x42,0xaa,0xa5,0xaf,0x47,0x27,0x26,0x56,0xc9,0xad,0x7c,0xdc,0xd4,0x47,0x4d,0x2a,0x35,0x38,0x5f,0xca,0xcc,0x5f,0xc6,0xb0,0xa5,0xaa,0xcc,0x2e,0x23,0x43,0xd2 -,0xb8,0x54,0x6d,0xc3,0xc5,0xe2,0xc7,0xd7,0x2f,0x3e,0xba,0xa7,0x59,0x2c,0x35,0xb3,0xad,0xba,0xca,0x25,0x21,0x2a,0xcd,0xb3,0xd2,0xda,0xbc,0xb9,0xaa,0xb4,0x44,0x23 -,0x20,0xda,0xb1,0xc7,0x38,0xea,0xb0,0xbe,0xb2,0xae,0x51,0x39,0x31,0x40,0x33,0x26,0x40,0xb9,0xbb,0xcb,0xc8,0x37,0x28,0x48,0xa0,0xa6,0xbd,0x5e,0x5b,0xcb,0xc5,0xaf -,0xbb,0x30,0x1c,0x28,0x45,0xbc,0xb1,0xb7,0xba,0x6a,0xa4,0x9f,0x64,0x20,0x19,0xcb,0x99,0x32,0x27,0x1f,0x34,0x8c,0x9e,0xb3,0x1c,0x0f,0xb2,0xa2,0xbb,0xaf,0x1c,0x29 -,0x9e,0xaf,0xae,0x2c,0x0e,0x35,0x92,0xa7,0xb3,0x1c,0x0c,0xba,0x8d,0x99,0xaf,0x0f,0x07,0xb6,0x91,0xa2,0xae,0x20,0x16,0x9d,0x98,0xad,0xd8,0x0f,0x12,0x96,0x9b,0xae -,0xfb,0x0e,0x1e,0x8c,0x8c,0x9d,0x24,0x04,0x13,0x98,0x9a,0xac,0x3d,0x09,0x24,0x8f,0x97,0xaa,0xf9,0x12,0x36,0x97,0x9d,0x46,0x37,0x0c,0x20,0x93,0x95,0xb0,0x4c,0x0d -,0x16,0x8e,0x93,0xa2,0x28,0x09,0x0a,0x90,0x8e,0x8f,0x9d,0x1b,0x07,0x98,0x91,0x8f,0xa3,0x19,0x06,0xde,0xa8,0x18,0x1c,0x00,0x2c,0x00,0x8c,0x8a,0xa1,0xb8,0x10,0x3f -,0xa7,0x84,0x82,0x82,0xdc,0x07,0x25,0x9d,0x90,0x80,0x4a,0x02,0x15,0x3a,0xa4,0x80,0x83,0xbf,0x00,0x03,0x00,0xba,0x8c,0x22,0x07,0x00,0x00,0x0a,0x86,0x87,0x3b,0x00 -,0x02,0x00,0x8c,0x80,0x81,0x25,0x00,0x04,0x1e,0x80,0x81,0x88,0x08,0x06,0x16,0x80,0x82,0x80,0x8e,0x1b,0x12,0x8f,0x80,0x83,0x83,0x0c,0x01,0x05,0x83,0x84,0x86,0x4e -,0x00,0x00,0x12,0xd5,0x89,0x2e,0x00,0x05,0x02,0x91,0x9d,0x6c,0x06,0x02,0x00,0x0c,0xa5,0x87,0xbf,0x09,0x02,0x03,0xab,0x89,0x80,0x9a,0xb6,0x0d,0xa0,0x84,0x80,0x84 -,0x85,0x2e,0x1b,0x8b,0x83,0x80,0x81,0x98,0x04,0x2e,0x89,0x81,0x80,0x9c,0x0c,0x00,0x1b,0x8e,0x8c,0xa5,0x04,0x00,0x01,0x2b,0xa1,0x8b,0x13,0x00,0x00,0x08,0x9b,0xa1 -,0x9f,0x05,0x01,0x03,0xa9,0x86,0x88,0x87,0xbb,0x13,0x26,0x81,0x84,0x80,0x8b,0x12,0x00,0x22,0x80,0x82,0x83,0x96,0x12,0x02,0x9b,0x80,0x83,0x80,0x3a,0x03,0x06,0x96 -,0x83,0x85,0x39,0x06,0x02,0x00,0x97,0x1b,0x96,0x94,0x00,0x02,0x05,0x4b,0x8c,0x84,0x95,0x07,0x00,0x00,0x17,0x9f,0x8e,0x80,0x1e,0x02,0x0d,0xc3,0x85,0x81,0x89,0x95 -,0x31,0x2b,0xae,0x98,0xa7,0x80,0x8b,0x4c,0x04,0x2c,0x84,0x8b,0x87,0x9d,0xb6,0x20,0xb3,0xad,0x15,0x31,0x80,0xaa,0x18,0x03,0x0e,0x9a,0xae,0x29,0x9b,0x7e,0x02,0x02 -,0x17,0x00,0xe6,0x80,0x0f,0x0d,0x00,0x0b,0x41,0x89,0xa2,0x03,0x15,0x0b,0x00,0x3a,0x05,0x18,0x80,0x9a,0x1d,0x00,0x06,0x9e,0x80,0x8f,0x8f,0x1d,0x09,0x9e,0x80,0x8b -,0xa4,0x80,0x94,0x8f,0x08,0xbc,0x99,0x9c,0x89,0x89,0x3d,0x07,0x08,0x08,0x24,0x2b,0x80,0x41,0x18,0x03,0x1b,0x80,0x97,0x8e,0xa5,0x37,0xd3,0xa7,0x2f,0x1f,0x00,0x97 -,0x80,0x88,0x9a,0x05,0x4d,0x2c,0xa5,0x89,0x83,0x83,0xac,0x07,0x06,0x2d,0x2c,0x83,0x83,0x8c,0x06,0x00,0x0f,0x95,0x83,0x19,0xb3,0x1e,0x0c,0x00,0x15,0x15,0xaa,0x83 -,0x29,0x0f,0x00,0x16,0x04,0x17,0x59,0x0e,0x17,0x0a,0x05,0x01,0x00,0x17,0x82,0x83,0xb8,0x06,0x00,0x0e,0xa7,0x92,0x80,0x84,0x8e,0x3a,0x04,0xe7,0x8e,0x80,0x82,0x80 -,0x89,0x0e,0xce,0x8b,0x80,0x80,0x81,0x80,0x8a,0x41,0x08,0x2e,0x8b,0x80,0x85,0xec,0x0b,0x00,0x06,0x07,0x21,0xe4,0x1d,0x10,0x03,0x00,0x01,0x05,0x5c,0x8c,0x16,0x01 -,0x00,0x05,0x0d,0x0e,0x0e,0x93,0x9b,0x13,0x01,0x01,0x00,0x1f,0x80,0x81,0x88,0x0b,0x00,0x08,0xc2,0x80,0x83,0x84,0x8f,0x0a,0xc0,0x9b,0x9a,0x80,0x82,0x81,0xf4,0xc7 -,0xdb,0xb2,0x89,0x88,0x80,0x84,0xa7,0x01,0x0d,0x19,0x99,0x82,0x9d,0xa9,0x04,0x01,0x15,0x28,0x0f,0x38,0x1e,0x2b,0x0c,0x04,0x01,0x05,0x85,0x82,0x8a,0x0e,0x06,0x07 -,0x94,0x86,0x88,0x83,0x9e,0x2b,0x0b,0x3d,0x9d,0x88,0x80,0x82,0x1a,0x04,0x04,0xb0,0x8a,0x9e,0x4f,0xb8,0x43,0x01,0x00,0x01,0x19,0x87,0x92,0xd2,0x0e,0x00,0x07,0x25 -,0xa8,0x22,0x96,0xa2,0x1b,0x02,0x01,0x0e,0x96,0x80,0x80,0x99,0x0b,0x12,0xa2,0x81,0x81,0x80,0x87,0x87,0xaf,0x36,0x30,0x8d,0x80,0x89,0x8b,0x17,0x08,0x0b,0x23,0x99 -,0x8e,0xa2,0x19,0x0e,0x00,0x03,0x0e,0xaf,0x89,0x80,0xbe,0x07,0x02,0x0b,0x1b,0x9c,0x9b,0x1f,0x3d,0x03,0x00,0x04,0x11,0x8b,0x88,0x18,0x06,0x01,0x03,0x1b,0x92,0x9c -,0x27,0x1f,0x0f,0x13,0x1d,0x2e,0xc3,0x83,0x8b,0x8d,0x57,0x0b,0x91,0x82,0x82,0x82,0x85,0x9a,0x25,0x31,0xa4,0x8e,0x80,0x83,0x8e,0xb7,0x07,0x20,0xa6,0x8e,0xa5,0x43 -,0xdf,0x23,0x0e,0x08,0x17,0x3c,0x86,0x85,0x2b,0x08,0x02,0x17,0x97,0x84,0x95,0x1a,0x2b,0x22,0x04,0x0a,0x1d,0xb6,0x88,0x36,0x0e,0x05,0x00,0x0c,0xaa,0x9b,0x1f,0x06 -,0x07,0x03,0x01,0x0e,0x11,0x89,0x89,0x17,0x07,0x05,0x0a,0x94,0x8e,0x8f,0x95,0xa3,0xa1,0xaf,0x9c,0x89,0x80,0x80,0x84,0x8d,0xab,0x9f,0x80,0x83,0x80,0x85,0x87,0x8f -,0xa2,0xc1,0x15,0x6c,0x8c,0x88,0x0d,0x04,0x01,0x00,0x30,0x1f,0x0c,0x0a,0x07,0x04,0x01,0x02,0x0b,0x1b,0x8f,0x7d,0x18,0x0b,0x01,0x63,0x23,0xfd,0x28,0x3e,0xc7,0x11 -,0x21,0x1c,0xb1,0x8b,0x84,0x8f,0x2d,0x06,0xb1,0x90,0x85,0x87,0x9c,0x8c,0x9e,0x2a,0x17,0x92,0x8e,0x87,0x8f,0x95,0x19,0x1a,0x93,0x8d,0x83,0xb0,0xcd,0xad,0x1c,0x06 -,0x28,0x1c,0x9d,0x83,0x1f,0x1b,0x01,0x06,0x3c,0x9b,0xad,0x16,0xbf,0x44,0x07,0x0b,0xb1,0xa1,0x80,0xa1,0xf2,0x13,0x10,0x94,0x91,0x87,0xa3,0x95,0xaa,0x2a,0x10,0x26 -,0x2c,0x90,0x88,0x30,0x0e,0x09,0x22,0x22,0xbe,0x0f,0x1c,0x2e,0x0e,0x02,0x05,0x0d,0x3c,0x84,0x26,0x19,0x03,0x07,0x46,0x7a,0x2a,0x1c,0x8d,0x9b,0x9e,0xa9,0x70,0x9a -,0x80,0x82,0x85,0x98,0xab,0x80,0x86,0x82,0x8e,0x83,0x84,0x90,0xab,0x1e,0x1a,0x9f,0x82,0x91,0x35,0x00,0x13,0x19,0xc3,0x19,0x1a,0xde,0x1c,0x07,0x06,0x0f,0x15,0x83 -,0xbf,0x2b,0x04,0x06,0x2d,0x0c,0x0d,0x0e,0x14,0x29,0x19,0x00,0x09,0x07,0x8b,0x9a,0x1a,0x15,0x00,0x3e,0xb8,0xa5,0xc3,0x91,0x89,0x8a,0xa4,0x1f,0xa9,0x87,0x82,0x81 -,0x94,0x17,0x8d,0x98,0x84,0x92,0x9c,0x8a,0x9e,0xb2,0x15,0xad,0xe1,0x83,0x8e,0xa6,0x08,0x0f,0x34,0x11,0x23,0x0e,0x9b,0x59,0x22,0x08,0x10,0x10,0x8b,0x88,0xad,0x2c -,0x02,0x20,0xbb,0x8a,0x6f,0x9c,0xa3,0xbb,0x0e,0x08,0x13,0x31,0x89,0x29,0x14,0x00,0x0e,0x17,0x24,0x1a,0x17,0x11,0x0c,0x09,0x05,0x0b,0x12,0x83,0xb3,0x23,0x06,0x10 -,0x48,0xb1,0x35,0x36,0x8e,0x96,0x81,0xa0,0xa7,0x8f,0x81,0x81,0x81,0x97,0x9a,0x87,0x85,0x80,0x8b,0x81,0x89,0x83,0x2d,0x14,0x0f,0x1b,0x8d,0x1f,0x0f,0x00,0x18,0x0c -,0x1f,0x06,0x0a,0x1d,0x10,0x0e,0x04,0x07,0x0b,0x88,0x1f,0xdc,0x06,0x13,0x0e,0x19,0x0d,0x0c,0xaa,0x30,0xa3,0x06,0x23,0x21,0x81,0x8c,0xa6,0x0c,0x1e,0x95,0xac,0x96 -,0xd9,0x90,0x92,0x89,0x24,0x2d,0x59,0x8c,0x85,0x8f,0x24,0x2e,0x8f,0xa1,0x84,0xde,0xa9,0x9c,0xa4,0x1c,0x1e,0x12,0x96,0x82,0x35,0xc9,0x1d,0x9e,0xd8,0xbc,0x0e,0xb2 -,0xa5,0x35,0x1d,0x0c,0x1b,0x94,0x80,0xc8,0xa0,0x00,0x3d,0xba,0x3d,0x21,0x21,0xa0,0xb7,0x3b,0x10,0x29,0xbd,0x85,0x51,0x1c,0x01,0xe9,0xdd,0xac,0xe5,0x0f,0xbf,0x1c -,0x0c,0x05,0x08,0x06,0x8c,0x21,0x11,0x04,0x17,0xbb,0xad,0x28,0x0f,0x97,0x23,0x53,0x18,0x20,0x91,0x80,0x84,0x80,0xab,0xaf,0x80,0x86,0x81,0x8b,0x84,0x87,0x82,0xa9 -,0xb5,0x96,0x81,0x88,0x5c,0x05,0x05,0x19,0x12,0xe8,0x06,0x0f,0x18,0x15,0x01,0x07,0x00,0x5a,0x92,0x10,0x08,0x06,0xc2,0xa8,0x9d,0x09,0x24,0x27,0x1c,0x0b,0x09,0x02 -,0x98,0x83,0x99,0xd1,0x00,0x33,0xaf,0xa1,0x19,0x2e,0x34,0xac,0x1e,0x10,0x5e,0x86,0x80,0x85,0xa6,0x06,0x8d,0x98,0x88,0x91,0x94,0x8d,0x85,0xb7,0x1f,0x13,0x40,0x80 -,0x96,0x3f,0x04,0xcc,0xe0,0x89,0x34,0xe5,0x96,0x9d,0x28,0x0c,0x03,0x14,0x80,0xa6,0x90,0x0a,0x34,0x6b,0x9e,0x22,0xba,0xab,0x1d,0x23,0x04,0x12,0xac,0x80,0x9d,0xac -,0x00,0x1b,0x1e,0x28,0x16,0x08,0x11,0x15,0x15,0x01,0x0f,0x0a,0x89,0xb2,0x1d,0x00,0x12,0x14,0xb0,0xa4,0x19,0xa3,0xb5,0x35,0x0a,0x10,0x0d,0x80,0x8c,0x86,0x9e,0x8f -,0x80,0x83,0x83,0x8b,0x80,0x85,0x84,0xb2,0xc4,0xa7,0x80,0x8a,0x83,0x18,0x12,0xaf,0x1a,0x14,0x07,0x17,0x0c,0x30,0x05,0x08,0x03,0xa4,0x66,0x1e,0x05,0x08,0x25,0x0f -,0x1a,0x06,0x45,0xca,0xc7,0x00,0x08,0x03,0x90,0x9d,0x26,0x09,0x12,0x97,0x9f,0x8b,0x17,0x9b,0x9d,0x8e,0x31,0x25,0x19,0x81,0x87,0x8b,0xe7,0x22,0x89,0x98,0x8e,0x14 -,0x99,0x71,0x97,0xd9,0x3b,0x26,0x82,0x8e,0xa4,0x23,0x0a,0x8e,0xb9,0xad,0x0c,0xb8,0xba,0x91,0x1b,0x0d,0x0c,0x8e,0x8d,0xc0,0x10,0x09,0x8a,0x9b,0x8b,0x22,0x7e,0xcf -,0x9d,0x11,0x18,0x0d,0x8e,0x8c,0x2c,0x0e,0x0c,0x95,0xb0,0x9b,0x04,0x1d,0x1f,0x3e,0x0e,0x1a,0x0b,0x8b,0x8b,0x36,0x12,0x0a,0x96,0xa6,0x9b,0x07,0xb2,0x57,0x8d,0xbb -,0x1a,0x0a,0x8d,0x8d,0xaf,0x23,0x04,0x9f,0xc4,0x91,0x1e,0x9c,0x31,0xa2,0x15,0x0c,0x09,0x93,0x8a,0xbe,0x10,0x05,0x8f,0x9f,0x88,0x26,0xb4,0xc3,0x9f,0x1e,0x48,0x2f -,0x87,0x82,0x95,0x1d,0x07,0x94,0x9c,0x83,0x1d,0xb3,0xca,0xa9,0x38,0xbf,0x11,0x8e,0x85,0xc3,0x24,0x00,0xd9,0xad,0x8b,0x11,0xac,0x5b,0xaa,0x1c,0x0b,0x03,0xa1,0x87 -,0x6f,0x2c,0x00,0x53,0x3d,0x91,0x26,0x57,0x1d,0xc2,0x10,0x06,0x0b,0xae,0x83,0xa8,0x20,0x00,0x4a,0x1e,0x8f,0x2f,0x23,0x5b,0xa7,0x28,0x1c,0x1d,0xa4,0x80,0x91,0xb6 -,0x04,0xa7,0xa6,0x80,0x9e,0x9c,0x8c,0x93,0x98,0x30,0x0f,0xe8,0x80,0x9e,0x97,0x01,0x1f,0xd7,0x8f,0x38,0xae,0x99,0xbd,0xb2,0x02,0x05,0x1d,0x80,0x94,0x92,0x00,0x20 -,0x3e,0xb2,0xa7,0x20,0xb4,0xa1,0xaa,0x07,0x15,0x18,0x80,0x89,0x9c,0x01,0x0f,0x18,0xaf,0x9d,0x06,0x32,0x31,0x66,0x09,0x07,0x00,0x8c,0x97,0x1d,0x06,0x04,0x20,0x97 -,0x9c,0x15,0x94,0x9e,0x89,0x33,0x09,0x0e,0x82,0x85,0x80,0x3d,0x0f,0x86,0x89,0x84,0x98,0x89,0x8b,0x80,0xa5,0x3d,0x29,0x8a,0x80,0x80,0x2b,0x04,0x27,0x11,0x9b,0x07 -,0x08,0x13,0xbb,0x08,0x02,0x00,0x11,0x8b,0x1f,0x08,0x00,0x17,0x28,0x9f,0x07,0x2d,0xaf,0x9b,0xb7,0x0b,0x00,0x2b,0x81,0x9a,0xa5,0x00,0xbc,0x92,0x87,0x49,0x35,0x9f -,0x88,0x88,0x2a,0x16,0x3d,0x80,0x84,0x82,0x0e,0x9b,0x92,0x89,0x91,0x1f,0xa0,0x87,0x87,0x23,0x09,0x17,0x80,0x88,0x8f,0x0d,0x9b,0x88,0x88,0x90,0xd4,0x86,0x92,0x8c -,0x3c,0x09,0x00,0x97,0x91,0x28,0x04,0x01,0x1a,0xaf,0x1f,0x00,0x09,0x0d,0xa0,0x12,0x07,0x00,0xba,0x94,0x98,0x12,0x05,0xc3,0xe3,0xa5,0x09,0x16,0x35,0x99,0x0e,0x08 -,0x04,0xa0,0x88,0xb8,0x0c,0x03,0x56,0xaa,0x8d,0x10,0x1b,0xac,0x88,0x9b,0x3c,0x0d,0xa0,0x80,0x89,0x9d,0x02,0x4d,0x8b,0x80,0x92,0x2d,0xa4,0x82,0x80,0x8d,0x1b,0x96 -,0x80,0x83,0x89,0x15,0x8f,0x94,0x9e,0x2e,0x1d,0x21,0x1d,0x1e,0x0c,0x06,0x02,0x9e,0xa8,0x24,0x01,0x08,0x3e,0x95,0x34,0x01,0x0a,0xda,0x8f,0x20,0x08,0x00,0xad,0x94 -,0x9e,0x0e,0x01,0x0f,0x3a,0xa3,0x0f,0x0b,0x11,0xb7,0x26,0x13,0x02,0xd0,0x8d,0x91,0x28,0x04,0xb8,0x92,0x89,0x34,0x19,0xaa,0x8a,0x98,0x3b,0x1d,0x8f,0x82,0x87,0x88 -,0xa4,0x8c,0x88,0x83,0x81,0x8b,0x9f,0x89,0x80,0x88,0x18,0x0f,0x8e,0x8b,0xa3,0x04,0x05,0x16,0x4d,0x6b,0x09,0x09,0x18,0x47,0xbd,0x11,0x05,0x2a,0xab,0x98,0x2c,0x09 -,0x1b,0x2d,0xaa,0x18,0x0f,0x18,0x29,0x3f,0x12,0x03,0x13,0x59,0xb3,0x3a,0x05,0x14,0x1c,0xb1,0xdd,0x13,0x1a,0xfc,0x99,0xa1,0x1b,0x12,0xb5,0x8f,0x86,0x45,0x11,0x32 -,0x8c,0x82,0x9d,0xa5,0x89,0x80,0x82,0x90,0x91,0x81,0x85,0x85,0x89,0x8b,0x95,0xcb,0xa0,0xa6,0x37,0x0e,0x0d,0x1c,0x1c,0x07,0x06,0x12,0x22,0x34,0x0f,0x15,0x1d,0x6e -,0x3d,0x15,0x18,0x1c,0x6d,0xac,0x1c,0x0b,0x17,0x1c,0xd4,0x34,0x1b,0x15,0x16,0x24,0x18,0x15,0x17,0x45,0xbe,0x22,0x0a,0x12,0x36,0xaf,0xcb,0x32,0xc8,0x44,0xfb,0xc7 -,0xaf,0xa5,0xc4,0xb7,0x9a,0x9a,0xa9,0xb6,0x8d,0x81,0x85,0x94,0x8c,0x80,0x82,0x8c,0x95,0x87,0x81,0x8b,0xbe,0x38,0xd9,0x1f,0x17,0x1e,0x1d,0x14,0x0e,0x0d,0x0d,0x15 -,0x24,0xb3,0xb7,0x28,0x15,0x19,0x41,0xba,0x6d,0x2c,0x2c,0x2c,0x29,0x1d,0x1f,0x1f,0x38,0x2c,0x1b,0x1b,0x1b,0x1b,0x20,0x22,0x18,0x1c,0x22,0x3a,0x26,0x21,0x17,0x23 -,0xa8,0x9f,0x43,0x15,0x26,0xb0,0xab,0x2c,0xe9,0x9a,0x8f,0x9f,0xa6,0x8b,0x83,0x87,0x8f,0x87,0x81,0x87,0x92,0x8b,0x84,0x88,0x99,0xbe,0xb9,0x2e,0x17,0x11,0x22,0x26 -,0x0d,0x07,0x0a,0x16,0x1e,0x19,0x1b,0x1b,0x1d,0x2b,0x18,0x1f,0x2e,0xc9,0x53,0x31,0x1d,0x12,0x16,0x27,0x31,0x23,0x2f,0x22,0x3f,0x20,0x2a,0x2b,0x49,0xc5,0x2c,0x1b -,0x16,0x2e,0x45,0xcb,0xb8,0x9e,0xbb,0x5c,0x35,0xb3,0x9e,0xab,0xb2,0x9c,0x8f,0xac,0xbb,0x95,0x84,0x88,0x91,0x8e,0x83,0x84,0x8d,0x8d,0x85,0x81,0x8d,0xbd,0x28,0xc2 -,0x2b,0x19,0x0e,0x11,0x0b,0x07,0x0c,0x10,0x15,0x16,0x19,0x1a,0x1d,0x15,0x1f,0x25,0x2d,0x2a,0x3b,0x3c,0x2e,0x20,0x17,0x1f,0x3c,0x5e,0x2d,0x29,0x1c,0x21,0x26,0x36 -,0x2e,0x23,0x1f,0x23,0x26,0x35,0x2c,0x20,0x4a,0xa1,0x9d,0x2b,0x1a,0x3b,0x9d,0xa8,0x37,0x4a,0xa7,0xa0,0xa4,0x96,0x88,0x84,0x94,0x97,0x86,0x80,0x85,0x8c,0x8d,0x87 -,0x89,0x91,0x9f,0x9c,0xbd,0x1b,0x1f,0x26,0x28,0x0d,0x07,0x08,0x10,0x18,0x14,0x11,0x14,0x18,0x2e,0xb1,0xee,0xcf,0x37,0xcc,0x5a,0x29,0x1c,0x1d,0x1d,0x1b,0x1e,0x1e -,0x1f,0x1a,0x2c,0x28,0x39,0x2b,0x28,0x1a,0x1b,0x5f,0xb7,0xf9,0x27,0x30,0xe1,0xc9,0x32,0xdb,0xdc,0xbf,0x2d,0x38,0x9b,0x94,0xad,0x55,0x94,0x87,0x89,0x9b,0x90,0x85 -,0x84,0x8d,0x8b,0x83,0x83,0x8a,0xa1,0xa3,0xa6,0x52,0x1a,0x19,0x13,0x0f,0x0c,0x0c,0x0f,0x15,0x15,0x14,0x15,0x11,0x1e,0x29,0x2a,0x24,0x20,0x32,0xf2,0x39,0x26,0x1f -,0x22,0x38,0x30,0x26,0x1f,0x1d,0x1f,0x2a,0x27,0x2a,0x39,0x25,0x27,0x4c,0x4d,0x47,0x48,0xd2,0x9f,0x9d,0x3d,0x22,0x36,0xc8,0x7c,0x2c,0xda,0x98,0x9d,0x4b,0xab,0x8c -,0x86,0x93,0x9b,0x88,0x81,0x86,0x8e,0x8e,0x87,0x88,0x93,0x9b,0x9a,0xbf,0x25,0x32,0x30,0x2c,0x18,0x0d,0x0f,0x0f,0x13,0x18,0x19,0x17,0x18,0x18,0x1b,0x23,0x2a,0x23 -,0x2a,0x20,0x19,0x1e,0x14,0x17,0x15,0x19,0x2b,0x45,0x2e,0x2a,0x17,0x1b,0x2a,0x1e,0x2c,0x2b,0x4d,0x2f,0x26,0x1f,0xb3,0x8f,0x9e,0x33,0x23,0x66,0xa6,0xcc,0x26,0xad -,0x9c,0xa8,0xdc,0x9b,0x8c,0x91,0x9b,0x8c,0x82,0x84,0x8d,0x8f,0x84,0x82,0x84,0x8d,0x8b,0x94,0xf8,0x23,0x18,0x23,0x1f,0x0e,0x0a,0x0d,0x0e,0x17,0x10,0x0f,0x13,0x1e -,0x2b,0x29,0x27,0x1a,0x29,0x41,0x42,0x32,0x1c,0x18,0x1b,0x1c,0x2f,0x3b,0x2c,0x2a,0x29,0x26,0x2e,0x3e,0x3c,0x32,0x2d,0x2b,0x32,0x27,0x24,0xa8,0xa0,0x4f,0x2e,0x51 -,0xb0,0x2d,0x10,0x22,0x9e,0xa0,0x39,0x48,0x93,0x8d,0x9e,0x96,0x85,0x81,0x84,0x8e,0x8d,0x84,0x83,0x8b,0x8e,0x8b,0x99,0xbb,0x29,0x23,0x37,0x23,0x14,0x0d,0x0a,0x07 -,0x09,0x11,0x16,0x15,0x1a,0x1e,0x34,0x2a,0x1f,0x20,0x26,0xd9,0xda,0x2c,0x19,0x10,0x17,0x2b,0x2f,0x54,0x2d,0x1b,0x16,0x22,0xfa,0xee,0xb0,0xbe,0x3f,0x24,0x18,0x3e -,0x99,0xba,0x1b,0x13,0x2a,0x3c,0x1c,0x22,0xaf,0x99,0xb7,0x2e,0xb2,0x90,0x8e,0x9e,0x93,0x83,0x82,0x86,0x86,0x83,0x82,0x86,0x8c,0x89,0x8b,0xa7,0x1a,0x14,0x1e,0x36 -,0x27,0x1a,0x14,0x0d,0x0e,0x11,0x1c,0x1a,0x18,0x1b,0x26,0x24,0x18,0x1a,0x26,0x33,0x5a,0x23,0x10,0x13,0x15,0x14,0x1e,0x41,0xea,0x34,0x1b,0x1c,0x2b,0x35,0x1c,0x1b -,0x37,0xbf,0x22,0x25,0xa1,0x9b,0xc9,0x44,0xaa,0xa5,0x1e,0x07,0x1e,0x9a,0x9d,0x3b,0x40,0x9b,0x8a,0x8e,0xaa,0x8d,0x82,0x83,0x8e,0x8b,0x82,0x83,0x89,0x92,0x89,0x8e -,0x9e,0x2f,0x1c,0x0e,0x0f,0x18,0x2a,0x1f,0x0b,0x0c,0x19,0x3f,0x2c,0x2b,0x12,0x19,0x12,0x35,0xc4,0x1d,0x16,0x12,0x14,0x1c,0x1e,0x14,0x15,0x10,0x30,0xa9,0x3f,0xcd -,0x55,0x1d,0x06,0x22,0x8e,0x98,0xa6,0x1d,0x26,0x92,0x98,0x1b,0x1b,0x19,0x8f,0xc9,0x0c,0xa4,0x83,0x19,0x00,0x80,0x8f,0xab,0x8b,0x8f,0x80,0x8c,0x18,0x18,0x92,0x44 -,0x1f,0x4f,0x0f,0x01,0x03,0x00,0x20,0xaa,0x0a,0x23,0x05,0x13,0x19,0x02,0x06,0x05,0x12,0xdd,0xaa,0xca,0x2e,0x66,0x0e,0x3d,0x80,0xa7,0x48,0x84,0x81,0x80,0x89,0x92 -,0x86,0x82,0x81,0x80,0x81,0x80,0x8a,0xb9,0x9c,0x81,0x83,0x98,0x89,0x8d,0x88,0x91,0x11,0x0f,0x49,0xac,0x8f,0x16,0x1e,0xed,0x0e,0x08,0x01,0xdd,0x07,0x0b,0x0b,0x00 -,0x09,0x04,0x04,0x00,0x00,0x04,0x09,0x01,0x03,0x00,0x03,0x00,0x10,0x0a,0x08,0xa8,0x0f,0x0e,0x03,0x02,0x06,0x07,0x27,0x9d,0x4c,0xbb,0x12,0x0a,0x02,0x23,0x80,0xe6 -,0x8b,0x9f,0x8b,0x80,0x8c,0x85,0x83,0x80,0x80,0x82,0x82,0x81,0x83,0x84,0x8d,0x80,0x82,0x81,0x80,0x85,0x80,0x83,0x86,0x85,0x85,0x80,0x80,0x81,0x80,0x8c,0x8f,0xa0 -,0x86,0x81,0x8d,0x83,0xa1,0x8c,0x8e,0x25,0xb6,0x5a,0x9a,0x9b,0x0c,0x18,0x08,0x0d,0x07,0x06,0x5f,0x10,0x47,0x0a,0x00,0x08,0x03,0x08,0x01,0x01,0x0a,0x04,0x05,0x03 -,0x00,0x02,0x00,0x07,0x00,0x05,0x0b,0x07,0x0c,0x00,0x04,0x0b,0x07,0x1b,0x08,0x07,0x0c,0x00,0x06,0x00,0xd2,0xb7,0x2c,0x29,0x02,0x1c,0x13,0x0c,0x26,0x18,0x96,0xa2 -,0x31,0x3f,0x13,0x9b,0x19,0x8f,0x9e,0xaf,0x84,0xa1,0x86,0x8b,0x8e,0x8c,0x9e,0x8b,0x88,0x8c,0x80,0x8f,0x88,0xa0,0x8b,0x80,0x85,0x80,0x87,0x80,0x87,0x8e,0x8a,0x8f -,0x85,0x80,0x8e,0x84,0xaa,0x8b,0xaa,0xa6,0x82,0x9f,0x81,0x8e,0x88,0x88,0x8d,0x82,0x85,0x89,0x80,0x8d,0x80,0x93,0x9b,0x9e,0xb7,0x80,0xbb,0x98,0x30,0xc3,0x9e,0x08 -,0x0a,0x05,0x16,0x8e,0x16,0x35,0x14,0x0d,0x19,0x00,0xbd,0x19,0x8f,0xa3,0x25,0x9e,0x1a,0xab,0xaf,0x61,0x89,0x1d,0xb5,0x5a,0x0d,0x21,0x0e,0x80,0xc0,0xb8,0xc1,0x1e -,0x8f,0x0c,0x13,0x0d,0x0a,0x3e,0x03,0x0c,0x0e,0x00,0x06,0x00,0x0b,0x01,0x04,0x06,0x02,0x0f,0x01,0x03,0x07,0x00,0x14,0x04,0x06,0x0b,0x00,0x05,0x00,0x2b,0x09,0x08 -,0x0e,0x00,0x0d,0x01,0x01,0x03,0x05,0x1c,0x03,0x04,0x0f,0x04,0x10,0x00,0x3d,0x11,0x08,0x16,0x03,0xa6,0x26,0x1e,0x38,0x0c,0x96,0xd3,0x9d,0x87,0x9b,0x8e,0xe6,0x82 -,0x82,0x86,0x80,0x82,0x80,0x89,0x8f,0x83,0x85,0x80,0x81,0x81,0x81,0x86,0x85,0xa2,0x81,0x80,0x81,0x80,0x83,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x84,0x80 -,0x8a,0x80,0x85,0x8c,0x88,0xa6,0x83,0xa9,0x18,0x2a,0x08,0x4f,0x09,0x09,0x2f,0x08,0x0f,0x00,0x13,0x0d,0x00,0x07,0x00,0x1a,0x07,0x00,0x02,0x00,0x10,0x08,0x01,0x09 -,0x00,0x04,0x00,0x1c,0x1a,0x04,0x12,0x0b,0xba,0x0d,0x04,0x16,0x08,0x52,0x09,0x0b,0x3c,0x06,0x11,0x00,0x3e,0x1e,0x04,0x0c,0x03,0xa2,0x1d,0x0c,0x1c,0x0e,0x8d,0xd0 -,0x32,0x9e,0x12,0x5f,0x07,0x8c,0x93,0x3b,0x94,0xcb,0x82,0xb6,0x20,0xaa,0x29,0x8a,0xe7,0x54,0x8c,0x6c,0x97,0x0c,0x89,0x8b,0xbf,0xae,0x15,0x86,0xab,0x2d,0xa8,0x20 -,0x8e,0x29,0x2a,0x9f,0x1a,0x9f,0x0b,0x89,0x91,0x42,0x94,0xe3,0x80,0x8f,0xab,0x9f,0x17,0x93,0x5d,0xab,0x88,0x25,0x99,0x04,0x97,0x92,0x45,0x89,0x35,0x83,0x92,0xa0 -,0x86,0x8d,0x80,0x82,0x83,0x81,0x99,0x86,0x5a,0x89,0x84,0xb5,0x9b,0x0c,0xcf,0x16,0x07,0x23,0x06,0x16,0x07,0x02,0x18,0x01,0x16,0x00,0x30,0xc3,0x00,0x0d,0x00,0x44 -,0x2a,0x0d,0x7b,0x0a,0xbe,0x28,0x1b,0x8e,0x10,0xb0,0x08,0xa6,0x8a,0x2e,0x88,0x9d,0x81,0x87,0x94,0x82,0x91,0x83,0x8a,0x9b,0x80,0xc1,0x90,0x20,0x94,0x83,0x25,0x99 -,0x19,0x93,0x9d,0x19,0x92,0x32,0x93,0xa6,0x1a,0x88,0x22,0xac,0x0b,0xc8,0x88,0x19,0x99,0x1e,0x8f,0x9e,0x10,0xa3,0x17,0xc2,0x2d,0x0c,0x95,0x0d,0x1f,0x08,0xb3,0x84 -,0x14,0xb9,0x0c,0xb1,0x32,0x02,0x2f,0x11,0x37,0x1d,0x04,0xc2,0x07,0x0e,0x03,0x1f,0x8e,0x07,0x48,0x0d,0xbe,0xad,0x0d,0xa1,0x25,0x3d,0x22,0x06,0xa4,0x14,0x1d,0x0b -,0x23,0x86,0x10,0x9f,0x2b,0x93,0x8e,0x26,0x8b,0x8b,0x83,0x81,0x88,0x80,0x85,0x84,0x98,0x94,0x80,0xa9,0x90,0x55,0x9d,0x9e,0x05,0x28,0x11,0x1c,0x18,0x01,0x1b,0x05 -,0x05,0x03,0x09,0x93,0x0a,0x17,0x0b,0x12,0x69,0x00,0x21,0x17,0x2c,0x4b,0x06,0xa6,0x1e,0x12,0x0d,0x06,0x8a,0x18,0x4e,0x46,0xcc,0x85,0x1c,0x8e,0x8c,0x8d,0x84,0x45 -,0x88,0x9c,0x5d,0xdb,0x17,0x80,0xb6,0xb7,0xb0,0x27,0x8b,0x0b,0x41,0xac,0xdb,0x8f,0x11,0x98,0x9a,0x49,0xd7,0x0c,0x84,0x9d,0x2e,0xa3,0x2e,0x85,0x1a,0x25,0xa0,0x23 -,0x9d,0x0d,0x65,0xb8,0x0d,0x26,0x03,0x99,0x9d,0x17,0x9e,0x15,0x95,0x17,0x09,0x3a,0x0d,0xbc,0x0c,0x16,0xad,0x07,0x0f,0x00,0x22,0x96,0x09,0x4e,0x0f,0xa7,0x5d,0x05 -,0x9f,0x32,0x95,0x2f,0x0f,0x99,0x10,0x2e,0x12,0x30,0x80,0x23,0x9c,0xb8,0x92,0x85,0x25,0x8a,0x8d,0x86,0x83,0x8d,0x80,0x86,0x84,0x8a,0x94,0x80,0x97,0x9c,0xa6,0xb5 -,0x8b,0x07,0x19,0x1a,0x11,0x23,0x00,0x17,0x0d,0x03,0x08,0x00,0xbd,0x1b,0x09,0x14,0x06,0xb1,0x06,0x0b,0x1f,0x0f,0xb6,0x09,0x40,0xaa,0x0f,0x1f,0x00,0x9b,0x99,0x0d -,0xc6,0x1f,0x85,0xa7,0x1e,0x8a,0x97,0x80,0x9b,0x9e,0x87,0x4b,0xa2,0x0f,0xaf,0x84,0x23,0x9d,0x28,0x95,0x95,0x0f,0x94,0xbf,0x90,0xa7,0x23,0x8b,0x37,0xb4,0x27,0x69 -,0x80,0xc4,0xa3,0xce,0x9d,0x84,0x18,0xa7,0x40,0xb3,0xa7,0x09,0xaa,0x21,0x1d,0x17,0x05,0x8a,0x2f,0x1d,0x51,0x2b,0x8a,0x08,0x15,0x23,0x1b,0xba,0x06,0xdf,0x3a,0x0a -,0x13,0x00,0x99,0xa8,0x10,0x34,0x0a,0x9a,0x11,0x0c,0x3a,0x17,0x98,0x11,0x1f,0xbf,0x0c,0x2a,0x07,0x9f,0x86,0x21,0xa1,0x29,0x89,0x8f,0x3e,0x84,0x88,0x80,0x87,0x8a -,0x80,0x86,0x81,0x8b,0x8b,0x80,0xac,0x9a,0x48,0xa2,0x95,0x05,0x1e,0x0d,0x13,0x0e,0x00,0x1e,0x09,0x03,0x03,0x00,0xbb,0x0b,0x09,0x10,0x15,0x9a,0x06,0x1e,0x50,0x3d -,0xac,0x0d,0xac,0x48,0x0e,0x11,0x01,0x95,0xbf,0x13,0x4e,0x19,0x8c,0x26,0x2b,0x8c,0x95,0x85,0x4e,0x9f,0x8c,0x57,0xa6,0x16,0x8c,0x87,0x2b,0x99,0xd5,0x88,0xa2,0x17 -,0x8a,0x9e,0x8d,0x41,0x26,0x8a,0x30,0xa5,0x1f,0xa3,0x82,0x1a,0xac,0xde,0x8f,0x8e,0x0a,0x9f,0x30,0x4d,0x29,0x07,0x9a,0x13,0x10,0x0b,0x0e,0x83,0x1f,0x4b,0xb2,0xb0 -,0x8c,0x07,0xc5,0xac,0x38,0xb9,0x04,0xaa,0x26,0x0b,0x0f,0x01,0x94,0x1c,0x0a,0x17,0x0a,0xb0,0x03,0x10,0xb7,0x1b,0xbd,0x05,0x36,0xcd,0x0d,0x49,0x1a,0x84,0x8d,0x28 -,0x91,0x9c,0x80,0x94,0x9a,0x80,0x89,0x80,0x90,0x8b,0x80,0x8b,0x82,0x93,0x87,0x84,0x26,0x9f,0x2b,0xa1,0x2b,0x00,0x2e,0x08,0x0a,0x05,0x03,0x27,0x04,0x07,0x03,0x0a -,0x9f,0x07,0x1a,0x1b,0x2a,0xa8,0x04,0xad,0xb9,0xdf,0xaf,0x0e,0x92,0x2b,0x16,0x13,0x0a,0x8e,0x16,0x10,0x38,0x36,0x8f,0x0f,0xa5,0x88,0x99,0x8c,0x20,0x8e,0x97,0x30 -,0xa2,0x40,0x82,0x98,0x29,0x9a,0xc2,0x8a,0x4a,0x39,0x8c,0x47,0x9c,0x1c,0xa6,0x8e,0x23,0xbc,0x1f,0x8d,0x8e,0x19,0xa5,0xae,0x8b,0x9f,0x21,0x8a,0xb3,0xb6,0x1b,0x18 -,0x9f,0x0d,0x16,0x0e,0x46,0x94,0x13,0xb2,0xb3,0xab,0xaa,0x0f,0x98,0xde,0x1d,0x1a,0x0b,0xab,0x0f,0x0c,0x0b,0x17,0x9d,0x08,0x0c,0x1d,0x1b,0x31,0x06,0x35,0xe5,0x14 -,0x21,0x0a,0xab,0x2f,0x0f,0x24,0x29,0x87,0xa4,0xaf,0x8a,0x94,0x88,0x9c,0x89,0x80,0x86,0x83,0x8b,0x83,0x82,0x8b,0x8c,0x8e,0x82,0x8f,0x39,0x9c,0xbb,0xab,0x15,0x0c -,0xc9,0x10,0x0d,0x06,0x08,0x0c,0x02,0x05,0x09,0x1c,0x16,0x00,0x0e,0x1c,0x2a,0x22,0x13,0x9a,0x4c,0x26,0x28,0x24,0x9e,0x1a,0x10,0x26,0xad,0xa9,0x0d,0x15,0x33,0xa5 -,0x94,0xac,0x8e,0x95,0xdb,0xab,0x99,0x85,0x94,0x1d,0x1e,0x47,0x8b,0x93,0x97,0x8c,0x8f,0xa6,0x1e,0xa7,0x9a,0xa7,0xba,0x1a,0xaa,0xa9,0x37,0x2e,0x25,0x96,0xb3,0xcc -,0xa4,0xae,0x1e,0x0d,0x19,0x97,0x8a,0x97,0x2b,0x11,0x18,0x09,0x0f,0x2d,0x96,0xad,0x0d,0x10,0xac,0x8a,0x96,0xba,0x44,0x4b,0x2f,0x24,0xe2,0x36,0x34,0x20,0x2c,0xa6 -,0xaa,0x1d,0x0e,0x3c,0x39,0x40,0x1f,0x59,0xc3,0x0e,0x26,0xeb,0x90,0x98,0x16,0x1c,0x2e,0x90,0x95,0xb3,0x92,0xba,0x24,0x0e,0x10,0x94,0xb9,0x2d,0xcf,0x2d,0x30,0x0c -,0x5f,0xa5,0x99,0x91,0x0a,0x4f,0xa7,0x2e,0x2b,0x18,0x93,0x9c,0x28,0xab,0x1d,0x3a,0x1f,0x28,0x8d,0xa1,0x8c,0x30,0xcf,0x8c,0xe3,0x91,0xa5,0x98,0x94,0x0f,0xb2,0x97 -,0x90,0x9d,0x1d,0xbf,0x1c,0xa1,0xcf,0x18,0x98,0x42,0xf1,0x2b,0x1d,0x9d,0x17,0xa3,0x95,0x1f,0x2a,0x04,0x15,0x10,0xcc,0xa8,0x15,0x8a,0xbe,0x19,0x1b,0x0d,0x46,0x14 -,0x1d,0xc5,0x0f,0x13,0x03,0x14,0x18,0xa2,0x89,0x1a,0x9d,0xcd,0x3f,0xa6,0xa1,0x86,0x39,0x1d,0xa2,0x3e,0x9e,0x43,0x97,0x77,0x9c,0x84,0x38,0x88,0x84,0x8f,0x93,0x9c -,0x89,0x6b,0x5b,0x8d,0x22,0x9e,0x26,0xbc,0x12,0x22,0x8c,0x0c,0x9d,0xc6,0x1e,0x2f,0x1f,0x99,0x13,0x05,0x38,0x15,0x9c,0x38,0x3f,0x0e,0x16,0x8d,0x09,0x94,0x91,0x2a -,0x12,0x03,0x28,0x0c,0xe7,0x89,0x0e,0x12,0x03,0x16,0x17,0x45,0x89,0x02,0x38,0xb4,0x4a,0xa5,0x2b,0x8f,0x1b,0x2b,0x89,0x64,0x9c,0x21,0x4f,0x1e,0xa1,0x80,0x96,0x84 -,0x86,0x91,0x96,0x8e,0x80,0x9c,0xa9,0x81,0x53,0x69,0x2d,0xab,0x18,0x28,0x8c,0x00,0x18,0x42,0x12,0x0e,0x0b,0x12,0x00,0x03,0x2e,0x0b,0x14,0x0a,0x06,0x00,0x0c,0x96 -,0x06,0xd4,0x9d,0x1d,0x21,0x31,0x8f,0x13,0x18,0x8e,0xf3,0x9b,0xa5,0xaf,0x0c,0x25,0x80,0xf6,0x88,0x82,0x99,0xb9,0xa9,0x86,0xba,0x97,0x80,0xab,0xbd,0xae,0x9f,0xb8 -,0x95,0x80,0x26,0x9b,0x87,0xaa,0xa8,0x95,0x84,0x2a,0xb7,0x82,0x4b,0xe8,0xba,0x38,0x09,0x1f,0x86,0x05,0x29,0xb7,0x05,0x09,0x27,0x94,0x0a,0x0d,0x6b,0x06,0x1e,0xe5 -,0x1d,0x06,0x0f,0x91,0x06,0xa8,0x87,0x24,0x1d,0x1e,0xb5,0x07,0x1a,0x8b,0x18,0x28,0x23,0x18,0x0a,0x21,0x85,0x08,0xbb,0x8b,0x14,0x19,0x2f,0xa6,0x07,0x17,0x86,0x29 -,0x9f,0xa5,0x19,0x0d,0xba,0x80,0x3d,0x8c,0x82,0x1b,0x2f,0x8e,0x82,0x9c,0x96,0x80,0x1b,0xa1,0x8b,0xad,0x1e,0x37,0x8a,0x05,0xae,0x85,0x13,0x16,0x1b,0x21,0x06,0x13 -,0x9a,0x04,0x0e,0x1e,0x0c,0x14,0xb8,0x86,0x04,0x23,0x86,0x58,0x90,0x87,0x8a,0x1f,0xae,0x80,0x8e,0x85,0x82,0xa5,0x1a,0x9f,0x80,0xba,0x8e,0x80,0x17,0x1e,0xa0,0x9c -,0x18,0x1d,0x9d,0x03,0x0c,0x1f,0x02,0x01,0x05,0x1b,0x00,0x12,0x91,0x08,0x04,0x0f,0x0f,0x04,0x16,0x8d,0x0a,0x0b,0x20,0x02,0x06,0x48,0x86,0x07,0x0f,0x95,0x09,0x2b -,0x85,0x9b,0x0a,0x12,0x8f,0x26,0x96,0x82,0x24,0x17,0xa0,0x81,0xb4,0x8b,0x80,0x32,0xb8,0x83,0x8b,0x94,0x8b,0x80,0x3f,0xa5,0x81,0xa0,0xad,0xa1,0x89,0x0f,0xa3,0x80 -,0xbf,0x27,0xb4,0x29,0x0e,0x3a,0x86,0x1b,0x12,0xb7,0x06,0x0a,0x58,0x81,0x19,0x20,0x94,0x0a,0x29,0x89,0xa7,0x0a,0x0a,0xa8,0x20,0xa7,0x89,0x0c,0x03,0x0d,0x90,0x12 -,0x43,0x92,0x05,0x03,0x15,0xb3,0x50,0x1e,0x2d,0x04,0x0b,0xa0,0x39,0x23,0x11,0x69,0x05,0x24,0x80,0xa5,0xba,0xa2,0x38,0x18,0xca,0x81,0x94,0xaa,0x9e,0x08,0x16,0x9c -,0x81,0x23,0xac,0x88,0x08,0x41,0x80,0x9a,0x0e,0x19,0xa7,0x0f,0x9f,0x81,0x0f,0x00,0x09,0xbb,0x14,0x8e,0x81,0x08,0x07,0xaf,0xa9,0x9f,0x89,0x8b,0x08,0x0d,0x8b,0x97 -,0x8c,0x91,0x8b,0x0c,0xe2,0x80,0x88,0x85,0x8b,0xaf,0x57,0x8e,0x80,0x8c,0x92,0x8d,0x11,0x22,0x99,0x80,0x3f,0x47,0x99,0x04,0x1b,0x8a,0xad,0x0d,0x06,0x08,0x00,0x1a -,0x8d,0x09,0x02,0x01,0x0a,0x00,0xd1,0x8a,0x04,0x01,0x03,0x01,0x0d,0xaf,0xc7,0x03,0x04,0x13,0x0b,0x2f,0xaa,0xa8,0x00,0x2d,0x81,0x9f,0x8a,0x8d,0x32,0x25,0x99,0x80 -,0x84,0x89,0x91,0x19,0x4a,0x8a,0x80,0x98,0x8a,0x8c,0x08,0xc0,0x82,0x89,0x99,0x55,0xbc,0x13,0xac,0x85,0xaa,0x2f,0x3d,0x1f,0x0c,0x86,0x84,0x1a,0x4d,0xb2,0x18,0xa6 -,0x84,0x88,0x17,0x24,0x34,0x14,0x9b,0x86,0x46,0x00,0x28,0x32,0x17,0x91,0xb7,0x04,0x01,0x0b,0xb0,0x3d,0x9e,0x0f,0x00,0x00,0x23,0xb5,0x10,0x99,0x12,0x02,0x0f,0xb4 -,0x98,0xb4,0x2a,0x28,0x11,0x9b,0x92,0xa8,0x1d,0xa1,0x17,0x1b,0x80,0x9d,0xb8,0xc6,0x0d,0x0e,0x9b,0x86,0x93,0x2b,0xa5,0x08,0x0c,0x8f,0x80,0x25,0x2b,0x90,0x0e,0x9a -,0x80,0x93,0x1f,0x2f,0xbd,0xc0,0x8f,0x82,0x20,0x02,0x25,0x8e,0x43,0x89,0x8e,0x08,0x0a,0x17,0x37,0x91,0xa7,0x17,0x06,0x0e,0x45,0x9e,0x99,0x92,0xe3,0x0d,0x87,0x86 -,0x87,0x80,0x8d,0x26,0x9b,0x86,0x83,0x84,0x80,0xac,0x0c,0x40,0x80,0xa1,0x2c,0x82,0x0c,0x03,0xae,0x9c,0x0a,0x05,0x07,0x02,0x01,0x2f,0x0f,0x00,0x01,0x0b,0x00,0x18 -,0x89,0x07,0x01,0x04,0x03,0x0d,0x9e,0x99,0x14,0x0f,0x0c,0x0d,0x99,0x80,0x96,0x09,0x8b,0x90,0x1e,0x83,0x88,0x32,0x1a,0x9f,0x9f,0x92,0x82,0x94,0x0e,0x1e,0x87,0xb1 -,0xb1,0x80,0xb4,0x07,0xa9,0x8e,0x8e,0x92,0x86,0xa0,0x24,0x97,0x89,0x8f,0x8c,0x84,0x0a,0xaf,0x80,0xa3,0x8c,0x9a,0x10,0x0a,0x40,0x87,0xb9,0x1e,0x10,0x00,0x08,0x89 -,0xa5,0x06,0x90,0x0d,0x00,0xa1,0x95,0x1a,0x0c,0x34,0x09,0x06,0x94,0x9c,0x06,0x26,0x97,0x01,0x56,0x80,0x10,0x10,0x2d,0x0d,0x05,0x45,0x90,0x1d,0x0f,0x0d,0x01,0x0d -,0x88,0xd6,0x14,0x8f,0x06,0x0e,0x8b,0x9e,0x25,0xbd,0xa6,0x2b,0x93,0x84,0x59,0x13,0x8e,0x9e,0x4b,0x80,0x8a,0x17,0xba,0xa0,0x2d,0xad,0x83,0x90,0x1d,0x21,0x1e,0x17 -,0x92,0x8e,0x10,0xa3,0x37,0x0a,0x9a,0xa8,0x19,0x18,0x29,0x13,0x28,0x96,0x50,0x0a,0x9c,0x8d,0x16,0x87,0x80,0xcd,0x97,0x8f,0x92,0x8d,0x82,0x82,0x92,0x9e,0xac,0xbf -,0x8e,0x86,0x25,0x8d,0xab,0x09,0x93,0xa9,0x0d,0x08,0x0b,0x05,0x12,0x38,0x0a,0x00,0x0c,0x1d,0x00,0xcb,0xb8,0x00,0x0e,0x0b,0x0f,0x0e,0x27,0x14,0x08,0x0b,0x08,0x07 -,0x92,0x92,0x08,0x8a,0x42,0x0c,0x92,0x8d,0xb5,0x3d,0x8e,0x4c,0x19,0x8e,0x99,0x0d,0x8a,0xa8,0x1a,0x80,0x8f,0x95,0x8e,0xa7,0xb5,0x92,0x80,0x8c,0x93,0x96,0x23,0xb5 -,0x80,0xa6,0x9e,0x84,0x12,0x99,0x80,0x8d,0xf8,0xd9,0xa2,0x17,0x3b,0xa0,0x0e,0x2e,0x99,0x01,0x9a,0x94,0x16,0x9f,0x29,0x11,0x0c,0x97,0x9c,0x1f,0x32,0x19,0x00,0xaf -,0xc6,0x0c,0x81,0x3c,0x19,0x1d,0x19,0xef,0x30,0x24,0x0c,0x08,0x0a,0x0a,0x21,0x9e,0x02,0x1e,0xae,0x07,0xae,0xaf,0x14,0x08,0xc0,0x9b,0x1c,0xaa,0x2a,0x05,0xa0,0x8f -,0x5e,0x80,0xa2,0x34,0x9d,0xae,0x97,0x8e,0x82,0xd1,0x27,0x9f,0x1b,0x4d,0x82,0x1c,0xb7,0x8e,0x1a,0x90,0xa3,0xaa,0x7e,0x29,0xb5,0x0d,0x1d,0x24,0x09,0x92,0x18,0x0b -,0x83,0x42,0x2b,0xad,0x1f,0x17,0x2c,0x84,0x9e,0xdf,0xa4,0x0e,0x9f,0x84,0xa1,0x80,0x88,0xb9,0x82,0x86,0x8a,0x9d,0x8e,0x9f,0x23,0x8c,0xa8,0x0b,0x96,0x1e,0x0e,0x8d -,0x0f,0x46,0x1f,0x05,0x09,0x0b,0x17,0x06,0x08,0x09,0x00,0x1d,0x25,0x00,0x98,0x0f,0x06,0x26,0x0a,0x0d,0x10,0xa9,0x35,0x09,0x1d,0x02,0x37,0x88,0x06,0x99,0x91,0x16 -,0x8c,0x87,0x97,0xbe,0x8f,0x8e,0x3a,0x8f,0x9e,0x2b,0x86,0x47,0x94,0x80,0xb5,0x8d,0x90,0xa8,0x99,0x8b,0x81,0xeb,0xae,0xb7,0x09,0x86,0x98,0x58,0x80,0xf3,0xa7,0x91 -,0xa5,0xc3,0xce,0x94,0x2e,0x1c,0xa9,0x04,0xc0,0x9a,0x06,0x8b,0x68,0x0e,0xe2,0xb8,0x96,0x13,0x08,0x99,0x35,0x2a,0x0f,0x06,0x9a,0x00,0x22,0xc7,0x05,0x14,0x00,0x08 -,0x00,0x04,0x0c,0x00,0x07,0x02,0x00,0x2e,0x05,0x0a,0x3b,0x00,0x2c,0x3e,0x11,0x21,0xbe,0x8f,0xcf,0x91,0x99,0x26,0x80,0x8a,0x96,0x80,0x82,0x80,0x81,0x82,0x87,0x86 -,0x80,0x8a,0x83,0x85,0x9f,0x81,0x87,0x95,0x80,0x8a,0x94,0x85,0x91,0xa8,0x9b,0x8c,0x44,0x1e,0xcf,0x00,0x51,0xa6,0x00,0xaa,0x16,0x05,0x18,0x0b,0x07,0x01,0x0a,0x08 -,0x00,0x04,0x00,0x01,0x12,0x00,0x0d,0x10,0x00,0x0b,0x05,0x05,0x00,0x0b,0x0d,0x00,0x0c,0x02,0x01,0xa4,0x05,0x26,0x93,0x0c,0xad,0xba,0x99,0xc2,0x90,0x87,0x4c,0x8b -,0x94,0xbb,0x80,0x9c,0x8e,0x80,0x8d,0x80,0x82,0x81,0x86,0x85,0x80,0x87,0x82,0x87,0x9f,0x80,0x8a,0x8d,0x80,0x87,0x83,0x81,0x82,0x86,0x85,0x80,0x8b,0x8c,0x86,0xcc -,0x83,0x8d,0x2c,0x80,0xb0,0xa4,0x8d,0xa2,0xac,0x2e,0x97,0x13,0x0b,0x20,0x00,0x15,0x33,0x00,0x2c,0x09,0x03,0x0e,0x02,0x04,0x00,0x0c,0x07,0x00,0x07,0x00,0x04,0x19 -,0x00,0x16,0x0c,0x00,0x0d,0x04,0x07,0x01,0x19,0x0f,0x01,0x0e,0x04,0x02,0xa7,0x02,0x19,0xbd,0x01,0x28,0x1e,0x1e,0x10,0x2f,0xb3,0x0d,0x26,0x28,0x05,0x8c,0x13,0x1e -,0x87,0x16,0x9a,0x9e,0xac,0x2e,0x9a,0x87,0xbd,0x9d,0x93,0x0f,0x8a,0x8d,0xbd,0x80,0x9c,0x8c,0x8b,0x8e,0x8e,0x8b,0x80,0x91,0x91,0x84,0x35,0x8d,0x83,0xac,0x80,0x8d -,0x8b,0x83,0x85,0x88,0x90,0x83,0x86,0x94,0x87,0xa3,0x9b,0x81,0x30,0x85,0x85,0x96,0x86,0x94,0x8e,0xa6,0x89,0x88,0xac,0x8d,0x55,0x28,0x82,0x37,0x91,0x84,0x78,0x8b -,0x95,0x93,0xa6,0x8d,0x84,0x47,0x97,0x97,0x19,0x84,0xaa,0x36,0x80,0x4c,0x90,0x96,0x9f,0xba,0x35,0x89,0x2f,0x24,0xdf,0x00,0x1e,0x2d,0x01,0xaa,0x10,0x09,0x0d,0x01 -,0x05,0x04,0x10,0x07,0x00,0x05,0x00,0x04,0x0e,0x00,0x0c,0x0a,0x00,0x06,0x01,0x02,0x00,0x07,0x05,0x00,0x05,0x01,0x00,0x0f,0x02,0x02,0x15,0x01,0x05,0x04,0x03,0x00 -,0x06,0x14,0x02,0x05,0x08,0x00,0x13,0x0d,0x02,0xa9,0x0d,0x0c,0x1c,0x15,0x12,0x21,0x91,0x22,0x29,0x9c,0x11,0x96,0x83,0x31,0x84,0x84,0x8a,0x80,0x82,0x84,0x86,0x80 -,0x82,0x84,0x80,0x8a,0x8b,0x80,0x8c,0x84,0x80,0x82,0x80,0x80,0x83,0x83,0x80,0x80,0x84,0x81,0x88,0x99,0x80,0x8b,0x91,0x80,0x89,0x88,0x81,0x84,0x8a,0x88,0x80,0x95 -,0x92,0x86,0x2b,0x90,0x8b,0x10,0x87,0x95,0xae,0x8e,0xd7,0x1b,0x14,0x9b,0x43,0x16,0x2e,0x04,0x05,0x32,0x01,0x25,0x4c,0x03,0x0d,0x08,0x06,0x03,0x13,0x0b,0x03,0x07 -,0x02,0x00,0x17,0x07,0x02,0x1d,0x01,0x07,0x09,0x05,0x02,0x07,0x0b,0x00,0x0b,0x0b,0x00,0x0e,0x0f,0x00,0xbb,0x15,0x08,0x1f,0x0f,0x07,0x0b,0xac,0x1e,0x17,0x29,0x03 -,0x18,0x91,0x08,0x9a,0x92,0x13,0x9f,0xa3,0xa7,0x49,0x8f,0xaa,0x36,0x94,0x4d,0x27,0x83,0x6f,0xee,0x80,0xb0,0x8d,0x87,0x99,0xbf,0x94,0x8d,0xa3,0x8e,0x95,0x17,0x8c -,0x92,0x1e,0x80,0x92,0xa8,0x8d,0x9b,0xb2,0x9b,0x86,0x9f,0xbc,0x9c,0x10,0xce,0x84,0x12,0x96,0x8f,0x13,0x99,0x9f,0xdc,0x22,0xab,0xb6,0x16,0xb1,0x1e,0x09,0x93,0x11 -,0x16,0x85,0x19,0x52,0xaf,0x1c,0x14,0x33,0x97,0x25,0x2a,0x4a,0x00,0x6a,0x9d,0x09,0x89,0xb9,0x1c,0xa3,0x47,0xd1,0x5e,0x91,0xbf,0x1c,0xa3,0x17,0x2c,0x87,0x11,0x9b -,0x88,0x30,0x8b,0x8d,0xa3,0xf5,0x90,0x8d,0xad,0x8d,0xa7,0x11,0x87,0xa4,0x2f,0x80,0xa1,0xa5,0x91,0xa5,0xb9,0x9c,0x85,0xac,0x44,0x9d,0x0b,0xbe,0x8b,0x0d,0x8c,0xa3 -,0x17,0x97,0xc7,0x35,0x1a,0xa9,0x57,0x14,0xbe,0x15,0x09,0x97,0x0b,0x1f,0x8a,0x13,0xc2,0x6e,0x17,0x0c,0x2d,0x9e,0x1f,0x28,0x25,0x00,0x73,0xa8,0x0d,0x87,0x31,0x16 -,0xb3,0x25,0x2f,0x39,0x99,0x4d,0x13,0x43,0x0e,0x1c,0x8b,0x0c,0x9b,0x8f,0x13,0x96,0xaa,0x3f,0x1f,0xab,0x99,0x28,0xdd,0x2e,0x08,0x92,0x3e,0x23,0x80,0x28,0xbb,0xa0 -,0x26,0x25,0xcf,0x91,0xe6,0x25,0xc2,0x08,0x48,0x8b,0x0d,0x8a,0x9d,0x14,0x95,0xb9,0x4b,0x25,0xa0,0x9f,0x15,0xaf,0x26,0x09,0x8c,0x16,0x2e,0x87,0x1a,0xa1,0xcd,0x28 -,0x1c,0x28,0x95,0x24,0x21,0x3c,0x02,0xb0,0xa7,0x0c,0x85,0x37,0x1d,0x9d,0x29,0x2d,0x1e,0x96,0xba,0x11,0xb2,0x0c,0x0f,0x8c,0x0e,0xa3,0x8e,0x13,0x99,0x4b,0x3e,0x22 -,0x37,0x93,0x1f,0x54,0x2a,0x04,0x94,0x2d,0x1c,0x80,0x1b,0xb4,0x9e,0x1e,0x6f,0x46,0x8b,0xe0,0x32,0x9f,0x05,0xcf,0x8b,0x0c,0x88,0x9b,0x1d,0x93,0x3b,0xab,0x1d,0x9d -,0x98,0x15,0xab,0x18,0x0d,0x8b,0x18,0xbc,0x86,0x13,0x98,0xca,0x39,0x2b,0x3f,0x8f,0x1e,0x5d,0xec,0x00,0x9c,0x9a,0x0d,0x83,0x33,0x1f,0xbe,0x2d,0xc4,0x17,0x8e,0xc5 -,0x0d,0xb9,0x09,0x14,0x8c,0x0b,0x9a,0x9d,0x0f,0x9d,0x1f,0x3f,0x13,0x4d,0xa4,0x16,0xbb,0x16,0x05,0x8e,0x1c,0x1b,0x83,0x18,0xe7,0xb7,0x37,0x1b,0x30,0x8d,0x27,0x29 -,0xb5,0x02,0xcd,0x8f,0x0e,0x86,0xb8,0x19,0xa5,0x37,0xd8,0x26,0x91,0xa6,0x1b,0xa4,0x0e,0x18,0x84,0x0f,0x9f,0x89,0x15,0x9b,0xa4,0xbf,0x21,0x9f,0x8d,0x1c,0xae,0x65 -,0x03,0x8d,0xa8,0x21,0x81,0x2f,0xca,0xab,0x70,0x4d,0x2e,0x8e,0xd5,0x1d,0xbf,0x06,0xd2,0x8e,0x0d,0x88,0xad,0x10,0x9d,0x4c,0x45,0x26,0x9a,0xad,0x17,0xa8,0x11,0x0e -,0x89,0x10,0xc8,0x8c,0x10,0xa4,0xcd,0x33,0x1e,0x4e,0x96,0x1e,0x2d,0x1f,0x04,0x98,0x5a,0x18,0x82,0x1f,0x34,0x9b,0x2f,0x2d,0x3e,0x95,0x3c,0x26,0xae,0x09,0xfa,0x8b -,0x0c,0x8d,0x96,0x16,0x95,0xb0,0x4a,0x2b,0x9a,0x9f,0x1b,0xaa,0x19,0x0d,0x88,0x19,0xc3,0x83,0x19,0x9d,0xa4,0x3a,0x20,0xc0,0x8d,0x2b,0xc5,0x54,0x02,0x95,0xa4,0x17 -,0x81,0x5a,0x68,0xa5,0xdd,0x49,0x28,0x8f,0x59,0x1b,0xd2,0x07,0x2e,0x8f,0x0d,0x8d,0x9b,0x1b,0x9f,0xdb,0x3c,0x1b,0x9d,0xae,0x1a,0xbf,0x10,0x0b,0x8e,0x18,0xc1,0x85 -,0x1e,0xaf,0x5b,0x33,0x1d,0x7c,0x96,0x24,0x28,0x20,0x03,0x99,0xa8,0x19,0x82,0x27,0x2d,0xab,0x49,0xeb,0x51,0x92,0x3b,0x1a,0x5e,0x0a,0x50,0x8d,0x0c,0x8d,0x9f,0x25 -,0x98,0xc3,0xd4,0x21,0x9a,0xa9,0x27,0xb5,0x0e,0x12,0x8c,0x12,0x9c,0x86,0x1f,0x9e,0xe5,0x3c,0x1e,0xa0,0x94,0x25,0xbf,0x20,0x06,0x8e,0xbf,0x26,0x84,0x1c,0x61,0xbc -,0x4d,0x3c,0x4e,0x93,0x2f,0x27,0x3c,0x0a,0xa3,0x9c,0x0c,0x88,0xbf,0x27,0x9d,0x35,0x1e,0x1e,0x9a,0x48,0x2a,0xb2,0x0a,0x21,0x8b,0x0f,0x8f,0x94,0x14,0xc8,0x25,0x27 -,0x1d,0x9a,0xa1,0x1d,0xdd,0x0e,0x0c,0x89,0x1e,0xaf,0x8a,0x0f,0xbd,0xfd,0xce,0x2a,0xbf,0x99,0x1a,0x6b,0x30,0x07,0x8e,0x37,0x15,0x82,0x34,0xab,0xaa,0x2e,0x25,0x33 -,0x8e,0x34,0x65,0xb9,0x02,0xa9,0x99,0x0e,0x84,0xb8,0x2b,0xad,0x2f,0xd4,0x37,0x8c,0x53,0x1a,0xba,0x08,0x31,0x8b,0x0c,0x8f,0x97,0x18,0x9b,0xbe,0xac,0x1e,0xa2,0xbf -,0x1c,0x9d,0x14,0x0c,0x8b,0x0f,0x32,0x86,0x1a,0xaa,0xcc,0x33,0x1a,0xa8,0x91,0x23,0xa9,0x23,0x00,0x98,0xc4,0x15,0x82,0x1d,0x23,0xa4,0xb2,0x32,0x5f,0x8b,0x23,0x30 -,0xb6,0x04,0xbe,0x99,0x04,0x91,0xa5,0x45,0x97,0xac,0xba,0x1b,0x97,0xe6,0x26,0xa5,0x08,0x16,0x8e,0x0d,0x97,0x8c,0x24,0x9d,0x3d,0x2c,0x16,0x94,0x9c,0x1b,0xa7,0x13 -,0x0c,0x88,0x1f,0x38,0x85,0x1c,0x6f,0x3a,0xbd,0x2e,0xb0,0x98,0x14,0xd7,0x56,0x07,0x8f,0xc6,0x0e,0x83,0xff,0xad,0x9d,0x49,0x1f,0x24,0x8f,0x23,0x28,0xad,0x01,0x43 -,0x93,0x0d,0x86,0x92,0x40,0xa9,0x37,0x3a,0x14,0x9c,0x2e,0x1d,0x94,0x0e,0x19,0x8e,0x07,0xae,0x8f,0x1d,0xa0,0x4f,0xc3,0x17,0x91,0x93,0x15,0xac,0x15,0x05,0x8d,0x1b -,0x20,0x87,0x2e,0x91,0x9c,0xac,0x14,0x22,0x9c,0x1c,0x5a,0x1d,0x00,0x9e,0xa4,0x2c,0x80,0xc0,0xc4,0xa3,0x57,0x1e,0x1f,0x97,0x23,0x56,0x9c,0x0c,0xb8,0x98,0x09,0x8f -,0x9d,0x2a,0xac,0x1c,0x16,0x1d,0x87,0x9a,0x28,0xb0,0x0b,0x26,0x87,0x0d,0xaa,0x8e,0x27,0x8d,0xac,0x2f,0x0f,0xbd,0xb3,0x0f,0x9d,0x30,0x07,0x96,0x17,0xb6,0x81,0x1f -,0xac,0x5c,0xbb,0x1e,0x1f,0xb1,0x14,0xa9,0x9e,0x0e,0x8f,0x43,0x0c,0x8a,0x28,0x7e,0xad,0x29,0x12,0x22,0x8c,0x44,0xd0,0x9e,0x08,0xac,0x93,0x08,0x8e,0xce,0x51,0x8b -,0xad,0x1e,0x0b,0x9d,0x4b,0x1e,0xa1,0x0b,0x11,0x94,0x10,0x8b,0x88,0x2f,0xa0,0xc2,0xec,0x0b,0xb7,0xa3,0x1f,0x96,0x3f,0x08,0x92,0x1c,0x1e,0x89,0x26,0x9c,0x34,0x1a -,0x0f,0xaf,0x83,0xae,0xb3,0x44,0x05,0x9e,0x44,0x0a,0x87,0x21,0xae,0xa3,0xcb,0x4d,0x23,0x8b,0x56,0x38,0xc2,0x03,0x3b,0x9a,0x0c,0x8a,0xad,0x24,0xa0,0xae,0xa9,0x1f -,0x8e,0xd6,0x1f,0x9b,0x11,0x1f,0x92,0x07,0xbf,0x8d,0x11,0xbc,0xdf,0x4c,0x12,0x9b,0x95,0x1a,0xae,0x17,0x0c,0x8d,0x1c,0x17,0x87,0x4e,0x97,0xa1,0xac,0x1f,0x7c,0x99 -,0x16,0xde,0x2f,0x06,0x9f,0xb7,0x0d,0x86,0xad,0x2c,0xa9,0xb9,0x16,0x11,0x93,0xa7,0x9b,0x92,0x0f,0xbb,0x97,0x01,0x9e,0x93,0x21,0xb4,0xb5,0xb5,0x1d,0x9d,0x3e,0x16 -,0xcd,0x0d,0x14,0x94,0x0c,0xba,0x80,0x95,0x8f,0xa4,0x3d,0x0b,0xbd,0xac,0x11,0x26,0x1e,0x0b,0x92,0xc7,0x18,0x83,0xe5,0xea,0xb5,0x42,0x11,0x1c,0x92,0xa9,0xaf,0xd4 -,0x05,0xb3,0x92,0x0b,0x88,0x9e,0x2e,0xab,0xaa,0xae,0x1b,0x9f,0x2a,0x12,0xcc,0x0a,0x0d,0x91,0x0d,0x9a,0x89,0x68,0x9d,0x6f,0xa6,0x14,0xb2,0xb0,0x0d,0x33,0x28,0x11 -,0x8a,0x34,0x3a,0x84,0x27,0xa7,0x32,0xbe,0x15,0x17,0x9a,0x2f,0xb9,0xac,0x0f,0x97,0x9f,0x0c,0x8c,0x2b,0xa4,0xa6,0x3d,0x41,0x16,0x96,0x29,0x2c,0x9b,0x0e,0x2c,0x98 -,0x06,0x93,0x8e,0xac,0x97,0x3b,0xcc,0x0c,0xa2,0xb2,0x1f,0xa8,0x18,0x16,0x8b,0x14,0x2e,0x88,0x2c,0xa8,0x1b,0x28,0x0e,0x40,0x8f,0x2c,0xa2,0xa8,0x0a,0x99,0xa4,0x0f -,0x85,0x6e,0xc4,0x52,0xca,0xe8,0x15,0x8d,0xbe,0x1f,0xa8,0x08,0x21,0x96,0x0a,0x89,0x99,0x42,0xbb,0x18,0xa6,0x17,0x9e,0x9f,0x17,0xaa,0x16,0x0f,0x88,0x13,0xb3,0x8d -,0x1d,0x9e,0x22,0xa8,0x18,0x32,0x8b,0x2e,0xc8,0x5d,0x09,0x8f,0x3b,0x13,0x87,0x1d,0xa3,0x2f,0x52,0x42,0x1a,0x8c,0x64,0x1e,0x37,0x07,0xa8,0x96,0x0b,0x88,0xc1,0xad -,0xa0,0x42,0xa2,0x16,0x97,0xc5,0x12,0xb7,0x10,0x18,0x8e,0x09,0x9e,0x8e,0x3f,0xa7,0x26,0x9a,0x1a,0xb7,0x96,0x22,0xb6,0x23,0x09,0x92,0x1a,0x24,0x85,0x4a,0x9c,0x36 -,0xa6,0x2c,0x1f,0x8e,0x33,0x1f,0x2d,0x04,0xa2,0xa4,0x0a,0x8b,0xaa,0x98,0xb2,0xb1,0xa9,0x0c,0x95,0xa3,0x19,0xd9,0x0a,0x22,0x93,0x0b,0x8d,0x91,0xa7,0xae,0x22,0xa4 -,0x0d,0xbe,0x95,0x28,0x36,0x0f,0x16,0x8b,0x12,0xa5,0x86,0xae,0xa0,0x19,0xad,0x18,0x22,0x91,0x2f,0x1b,0x10,0x0b,0x8b,0x3c,0x1d,0x86,0xa0,0x94,0x1f,0xb2,0x3b,0x14 -,0x92,0x4f,0x1b,0x1a,0x08,0x99,0xb6,0x0f,0x83,0x99,0xa2,0x1e,0x40,0xa6,0x11,0xa1,0xbf,0x2a,0x20,0x09,0xa2,0x8c,0x12,0x8e,0x90,0x9d,0x29,0x27,0x93,0x0d,0x23,0xb9 -,0x47,0x2a,0x0a,0x2f,0x8a,0x16,0xad,0x8f,0x9d,0xb7,0x1c,0x90,0x17,0x12,0xa8,0xac,0xf4,0x0a,0x0f,0x88,0x20,0x1f,0x8b,0x94,0x9b,0x0c,0xa3,0xbc,0x13,0xa9,0xa9,0xb8 -,0x0d,0x0a,0x85,0xa9,0x11,0x97,0x9d,0x8c,0x0f,0x29,0x9b,0x0b,0x2c,0xa8,0x9d,0x21,0x02,0x90,0x8e,0x0e,0xa3,0x9b,0x89,0x1a,0x0a,0x90,0x24,0x2e,0xbb,0xa0,0xa1,0x02 -,0x61,0x89,0x11,0x5c,0xbc,0x8c,0xae,0x03,0x98,0xa8,0x34,0x39,0x2e,0x98,0x09,0x1c,0x86,0x27,0xd3,0x38,0x9d,0x8b,0x0b,0xb4,0xb8,0x1c,0x3e,0x20,0x8d,0x1c,0x0c,0x91 -,0x4c,0x9e,0xe5,0x46,0x8d,0x18,0x5f,0xc8,0x2d,0x9d,0x19,0xa3,0x3f,0x11,0x99,0x28,0x3b,0x33,0x2f,0x8b,0x30,0x4b,0xb2,0x27,0x9e,0x29,0xaa,0xbf,0x11,0x9b,0x39,0x29 -,0x7c,0x21,0x94,0xa5,0x2a,0x3b,0x2e,0xa5,0x5b,0xcd,0xad,0x1b,0xc3,0x2f,0x27,0xb5,0x25,0xa5,0xa5,0x2f,0xaf,0xaa,0x9e,0xc5,0x29,0xef,0x27,0x3e,0x4c,0x23,0x2d,0x2e -,0xae,0xa4,0xbb,0xba,0xb5,0x9f,0xb3,0x1e,0xfd,0xb6,0x2e,0x2c,0x26,0xd0,0x68,0x28,0xb1,0xae,0xbd,0xab,0xbe,0xed,0x4f,0xbc,0xcd,0x22,0x2b,0x39,0x2c,0x31,0x2d,0xb3 -,0x9f,0x9e,0x9e,0x4e,0xc4,0x3f,0x26,0xb6,0x4f,0x2b,0x2b,0x2b,0x3e,0xdb,0xa5,0x96,0x9c,0x4b,0x2b,0x4a,0x2a,0x1e,0xb3,0x6f,0x28,0x3e,0x39,0xb3,0xb3,0xa8,0xa1,0xaf -,0xf4,0x23,0x2e,0x3f,0x3f,0xc3,0x3e,0x4f,0x4c,0x3c,0xb5,0x66,0xde,0xa0,0x9f,0xad,0x33,0x30,0xda,0x26,0x35,0x2e,0x24,0x41,0x2c,0xd2,0xb2,0xa4,0x99,0xae,0xea,0x2e -,0x3c,0xc7,0x1f,0x23,0x45,0xdc,0xb2,0xcf,0xb5,0xa0,0xa3,0xb2,0x3b,0x36,0x26,0x35,0xb6,0x24,0x2f,0xe3,0xbe,0xa6,0xc4,0xbc,0xbb,0x65,0x42,0x31,0xb3,0xb3,0x37,0x4f -,0x2f,0x40,0xbe,0xcd,0x2c,0x2c,0xc8,0xbb,0xae,0xbf,0xfe,0xb9,0xb1,0x69,0xe1,0x3e,0x25,0x24,0x3a,0x56,0xbd,0x9d,0xaf,0xbf,0x7a,0x2d,0x48,0x53,0x46,0x4f,0x32,0x47 -,0xe3,0xc4,0xb2,0x9f,0x9e,0x46,0x2d,0x20,0x21,0xca,0xa9,0xc7,0x2f,0x44,0x4c,0xd0,0xb3,0xb1,0xad,0xcd,0x2b,0x1e,0x34,0xc4,0xbc,0xa7,0xb6,0x3b,0x5e,0x3b,0x26,0x32 -,0xae,0xa3,0xb7,0x44,0x2e,0xf2,0xad,0xb9,0x54,0x62,0x28,0x29,0x33,0x2c,0xaa,0x9e,0x9e,0xac,0x3e,0x35,0x35,0x47,0x3f,0x3d,0x4b,0x31,0x3d,0x78,0xaa,0x98,0xab,0xc4 -,0x37,0x1f,0x2e,0x3d,0xd6,0xc8,0x2d,0x42,0xd2,0xc5,0xa6,0xb7,0xb6,0xce,0x37,0x3f,0x2f,0x3a,0x5c,0xc2,0xb2,0x3f,0xbc,0x32,0x1e,0xb7,0xc8,0xa1,0xaa,0x2a,0x4b,0xc2 -,0xbd,0xc2,0x53,0x34,0x1e,0x2e,0x5b,0x37,0xac,0xa6,0x9b,0xa7,0x2e,0x3b,0x2e,0x3d,0x41,0x32,0x7c,0x31,0x2c,0xdc,0xac,0x96,0x98,0xaf,0x2d,0x18,0x22,0x6d,0xb5,0x31 -,0x2e,0xc5,0xfa,0xb7,0xb6,0xd3,0xae,0xb5,0xda,0x59,0x3c,0x2f,0x33,0xae,0x78,0xbf,0xc4,0x1e,0x26,0x4f,0xb0,0xb3,0xaf,0xbb,0xc5,0xb4,0xb2,0xcd,0xcf,0x25,0x19,0x39 -,0x2e,0x3e,0xe8,0xbb,0xa2,0x9c,0xaa,0x36,0x3e,0x48,0x36,0x5e,0x3f,0x22,0x28,0xd8,0xa7,0x9a,0x9d,0x5d,0x2d,0x3b,0x3e,0x52,0x5a,0x1e,0x25,0xb7,0xb9,0xae,0xb5,0x48 -,0x4f,0xb6,0xb8,0x52,0x43,0x36,0xd6,0xb4,0x49,0x44,0xae,0x3c,0x2e,0x4d,0xd3,0xb3,0x5c,0xdf,0x42,0xab,0xa2,0x5e,0x3c,0x22,0x22,0x5c,0x34,0x27,0x70,0xa4,0x98,0x9d -,0xae,0x36,0x2d,0x61,0x44,0xdb,0x2f,0x18,0x26,0xd1,0xb0,0x9a,0x9b,0xcd,0x3c,0x39,0x57,0x47,0x5b,0x2d,0x29,0xc4,0xe9,0xad,0xad,0x31,0x66,0xa9,0xb9,0x4b,0x23,0x2f -,0x38,0xb5,0xa0,0x55,0x38,0x1b,0x4a,0x9e,0xdd,0xc7,0xd6,0x49,0xc7,0xb5,0xa5,0xcd,0x5e,0x3d,0x1f,0x27,0x2d,0x32,0xdf,0xa5,0x9f,0xa9,0x3a,0x2d,0x46,0xbe,0xa5,0x7c -,0x2c,0x12,0x23,0x9d,0x9e,0x95,0xa0,0x25,0x1f,0x2e,0xef,0x5b,0x2d,0x31,0x2c,0xb1,0x66,0xbe,0xa1,0xcd,0x9e,0x9f,0x4c,0x1f,0x1e,0x39,0xcc,0xaf,0xa8,0x31,0x22,0x27 -,0xb7,0xa3,0xed,0xad,0xbd,0x32,0x26,0x56,0xba,0xf9,0xb4,0xa3,0x23,0x1d,0x51,0x24,0xa6,0x92,0x95,0xbe,0x1b,0x1b,0x28,0xad,0xa8,0x35,0x1f,0x16,0x3c,0x9d,0x9f,0x94 -,0x9b,0xcb,0x2b,0x2a,0x29,0x28,0x36,0x3f,0x29,0x27,0xa7,0xa2,0xa7,0x9f,0x9f,0x9b,0x1c,0x0f,0x1a,0x28,0xb5,0xb8,0xac,0x1f,0x4d,0x96,0xa4,0x98,0xa6,0xcf,0x2a,0x0f -,0x22,0x3d,0xbb,0x38,0x40,0x2f,0x2c,0xc7,0x46,0xa0,0x99,0x90,0xe1,0x1a,0x12,0x2d,0x8d,0x8c,0xa6,0x11,0x08,0x31,0x51,0x8b,0x84,0x19,0x05,0x08,0xaf,0x8e,0xb7,0x1c -,0x0e,0x0d,0xb4,0x88,0x88,0xae,0x30,0x5d,0xd9,0x15,0x11,0xe7,0xa2,0xac,0x97,0x95,0x2d,0xae,0x39,0xb6,0xac,0xaa,0xa2,0x1b,0x0d,0x08,0x1e,0x91,0xa9,0x0b,0x1f,0x8b -,0x9e,0x2b,0x9a,0x93,0x99,0x29,0x12,0x0b,0x08,0xa0,0x85,0x8c,0x16,0x11,0xad,0x29,0xbb,0x8c,0x8c,0x13,0x05,0x2c,0x9f,0x91,0xbc,0x38,0x1c,0x21,0xab,0x98,0x8f,0xac -,0xb0,0x23,0x0c,0x0a,0x08,0xa5,0x9a,0x1b,0x3d,0x8e,0x87,0xb5,0xc1,0x8c,0xa3,0x1d,0x12,0x2f,0x4d,0xa7,0x99,0x22,0x07,0x06,0x8d,0x8b,0x16,0x1d,0x9c,0x9b,0x1f,0x35 -,0x4f,0x1f,0x35,0x9e,0x8c,0xbc,0x32,0x5c,0x37,0x9f,0x9c,0x92,0x26,0x08,0x08,0x2b,0x88,0x97,0xb7,0x11,0x0f,0x2f,0xc9,0x84,0x8b,0x23,0x0a,0x14,0x49,0x1a,0xdd,0x91 -,0x9d,0x29,0x14,0x8f,0xb8,0xea,0x88,0x95,0x2a,0x02,0x23,0xc1,0x2e,0x9d,0xae,0xda,0x07,0x27,0x88,0xaf,0x31,0x3d,0x8f,0xa3,0x1d,0x36,0x15,0x20,0x3d,0x94,0x98,0x19 -,0x42,0x1d,0xc7,0xb6,0xb2,0x99,0x2e,0x16,0x1b,0x94,0x86,0x9f,0x39,0x12,0x47,0x9b,0xb2,0x99,0x36,0x17,0x11,0x1a,0x15,0x0d,0xbe,0x93,0x9a,0x1e,0x28,0x93,0xb8,0xb4 -,0x8f,0x90,0x1c,0x0b,0x5e,0x9c,0x9e,0xa3,0xad,0x1e,0x05,0xda,0x92,0xc2,0xf1,0x6f,0xa6,0x16,0x1b,0xac,0x3c,0x25,0x2e,0x8e,0x97,0x37,0xc8,0x18,0xb2,0xa4,0xad,0x2d -,0x0c,0x21,0x23,0x9d,0x8d,0x9b,0x9f,0x10,0x3d,0x44,0x4c,0x8d,0x8f,0xa3,0x0b,0x0f,0x14,0x11,0xb4,0x8f,0x95,0x19,0x0e,0x95,0xa2,0x9e,0x9e,0xce,0x0e,0x08,0xae,0xa0 -,0xab,0xae,0xb7,0x2e,0x0c,0xa4,0x86,0xb8,0x6e,0x77,0x99,0xaf,0x4c,0x43,0x0b,0x10,0xdc,0x9b,0x64,0x10,0x9b,0xcb,0xb3,0x9d,0xa2,0xbd,0x0b,0x1d,0x46,0xcd,0x94,0x93 -,0xa4,0x14,0x2b,0x9c,0x1f,0x9e,0xae,0x9d,0x19,0x05,0x24,0x1b,0x49,0x9e,0x98,0xcf,0x0e,0x93,0x8d,0xac,0x8f,0x9b,0xb9,0x09,0xd3,0x98,0x2e,0x38,0x16,0x26,0x0e,0x1c -,0x8f,0x5c,0x75,0xa8,0x92,0xde,0x14,0x38,0x18,0x1f,0x9e,0x97,0x9e,0x0e,0x31,0x8e,0xbd,0x9f,0x9f,0x9c,0x18,0x16,0x33,0x1e,0xba,0x99,0xa8,0x23,0x0b,0xaa,0xb6,0x50 -,0x95,0x97,0xa5,0x09,0x13,0x22,0x30,0x95,0x96,0xd0,0x0a,0x16,0x89,0xa6,0xa3,0xa2,0xaa,0x3b,0x25,0x98,0x65,0x26,0x26,0x2f,0x37,0x0b,0xa1,0x91,0x27,0x9e,0x8e,0x8c -,0x0e,0x0e,0x16,0x0f,0xfb,0xa0,0x95,0x45,0x0e,0xa0,0xbd,0x34,0xa3,0x94,0xa2,0x0a,0xd7,0xaa,0xab,0x9a,0x99,0x9d,0x0d,0x0e,0xbe,0x36,0xad,0x9e,0x94,0x15,0x09,0x29 -,0x2d,0xb1,0xa6,0xa9,0x31,0x1b,0x9b,0x92,0x30,0xc2,0x96,0x96,0x24,0xea,0x3a,0x12,0x1d,0xae,0xaa,0x1e,0x0d,0x9b,0x65,0x28,0x8f,0x89,0x9e,0x0a,0x28,0x1f,0x30,0x97 -,0x8d,0x95,0x17,0x19,0x99,0x10,0x12,0xaa,0x90,0x22,0x0c,0xa8,0x2d,0xce,0x93,0x93,0x48,0x06,0x26,0x94,0x28,0xa5,0x94,0x99,0x12,0x1b,0x9d,0x2a,0x36,0xb0,0xa5,0x59 -,0x18,0xa1,0xaf,0x1c,0xc5,0x93,0x9e,0x0f,0x1c,0x24,0x23,0xab,0x92,0x9d,0x1a,0x1c,0x97,0x3d,0xb5,0x9c,0x9f,0x18,0x0d,0x3c,0x25,0xb8,0x95,0x8c,0xb3,0x13,0x32,0x56 -,0x12,0xac,0x92,0x96,0x1a,0x33,0xb1,0x46,0x9d,0x9e,0xbb,0x11,0x0a,0x9c,0xae,0x1a,0xb1,0xa4,0x4f,0x06,0x5b,0xb8,0x1e,0xb6,0x94,0x92,0x34,0x2e,0x8c,0x5f,0x3b,0x93 -,0x92,0x1f,0x07,0x3d,0x1e,0x16,0xb8,0xa4,0x54,0x1d,0x4f,0x90,0x2e,0xb9,0x9c,0xa8,0x18,0x18,0xad,0x51,0xa8,0x8f,0x9a,0x2b,0x0c,0x4f,0x40,0x1e,0x9e,0x9c,0xa8,0x11 -,0xb1,0xba,0x26,0xb4,0xb2,0xcd,0x11,0x3a,0x89,0x57,0xa6,0x95,0x9f,0x18,0x0a,0x30,0x0f,0x23,0xa3,0x9a,0xf4,0x10,0xa7,0x92,0x2e,0xa3,0x92,0x9b,0x0e,0x22,0xca,0x19 -,0x38,0xa2,0x9d,0x24,0x16,0x9b,0xa0,0x2c,0xa8,0x96,0x63,0x0b,0x3e,0x42,0x2d,0xa9,0x9b,0xab,0x0d,0x17,0x96,0xce,0xb4,0x98,0x8c,0x3b,0x29,0x9d,0x23,0x1d,0x2e,0x3a -,0x22,0x0e,0xb1,0x9d,0x5b,0x9a,0x9d,0xa1,0x12,0x2b,0x23,0x17,0xbe,0x99,0x97,0x2f,0x4d,0x8f,0x66,0x54,0x97,0x9e,0x26,0x0f,0x3c,0x11,0x13,0x52,0xb1,0x36,0x12,0xad -,0x9a,0x2e,0xa4,0x8c,0x95,0x21,0xb3,0x9d,0x24,0x2d,0xaa,0xbe,0x0e,0x0a,0xae,0x3b,0x1e,0x95,0x87,0xa2,0x1e,0x9f,0x42,0x19,0xcd,0xab,0x3c,0x0f,0x2c,0x95,0x49,0xba -,0xa0,0x9f,0x13,0x14,0xc5,0x1b,0x28,0xa1,0x95,0x59,0x1c,0x9a,0xac,0x31,0x9d,0x97,0xa4,0x15,0xdd,0x3b,0x20,0xa7,0x9f,0xc6,0x0a,0x20,0xa3,0x18,0x3e,0xa6,0x9e,0x1f -,0x28,0x9f,0x27,0xf3,0x9b,0x9c,0x1f,0x0a,0xab,0xba,0x24,0x91,0x86,0x9b,0x18,0xaf,0x61,0x11,0xd2,0xa1,0xe6,0x0d,0x2f,0x8e,0x2e,0x2b,0xa4,0x9a,0x0f,0x0b,0xc4,0x21 -,0x39,0x90,0x8c,0xbf,0x15,0x9b,0xab,0x19,0xac,0x97,0xc0,0x0a,0x26,0xcd,0x2b,0xaf,0x98,0x9e,0x12,0x21,0x97,0x26,0x4b,0x95,0x92,0x27,0x17,0xca,0x25,0x3d,0xa8,0xa9 -,0x19,0x08,0xb4,0xaf,0x1f,0x9d,0x8e,0xa0,0x17,0xcb,0xbc,0x1f,0xaf,0x9b,0x9f,0x22,0xc6,0x8e,0x6d,0x45,0x9c,0xac,0x0c,0x05,0x20,0x20,0x3b,0x97,0x92,0x47,0x19,0x92 -,0x9c,0x32,0xb5,0x9d,0x6d,0x0c,0x2c,0xbb,0x34,0x4c,0x9e,0x9e,0x11,0x24,0xa4,0x38,0xb0,0x91,0x91,0x20,0x15,0x38,0x4c,0xdd,0xe9,0x56,0x13,0x12,0xa7,0xab,0x9e,0x92 -,0x91,0xbf,0x17,0x2f,0x1d,0x29,0x58,0xaf,0x39,0x17,0xab,0xa8,0x9e,0x95,0x94,0xd1,0x0a,0x0f,0x26,0xce,0xa0,0x9a,0xaa,0x19,0x35,0xa3,0xbb,0xad,0xa4,0x9f,0x1e,0x1c -,0x2a,0x2e,0xe8,0xbf,0xae,0x1b,0x15,0x3a,0x5a,0x9f,0x94,0x8e,0xab,0x2f,0xcc,0x39,0xa9,0x7c,0x35,0x18,0x0d,0x29,0x1f,0xd8,0x9a,0x92,0x9c,0x29,0x38,0x1a,0x21,0xac -,0xa2,0xa5,0x27,0xbf,0xaf,0xbf,0x90,0x90,0xb3,0x0f,0x13,0x1e,0x23,0xe2,0xbf,0xac,0x1c,0x43,0xa7,0x31,0xd5,0xb3,0x9b,0x35,0x3c,0xab,0xdf,0xab,0xb6,0x9e,0x31,0x15 -,0x28,0x1a,0x43,0xab,0x9c,0xac,0x2e,0xb3,0xbb,0xa5,0xba,0xfd,0x31,0x1b,0x26,0x28,0x36,0xd5,0xa3,0x9b,0x5c,0x75,0x39,0x24,0x30,0xc8,0xa2,0x3b,0x3c,0xe6,0x3d,0xcf -,0xa7,0xa4,0x2a,0x19,0x3e,0xd9,0xac,0x9f,0x98,0x9a,0xd5,0xc9,0xd8,0x25,0x1c,0x35,0xd6,0x1f,0x1f,0x42,0xbc,0xe2,0xc3,0x9f,0x45,0x1c,0x1f,0x2c,0x32,0xc2,0x96,0x9a -,0xa4,0xa1,0x9f,0xa5,0x4d,0x5a,0xdd,0x2d,0x20,0x16,0x1e,0x28,0xbd,0xa0,0x6d,0x30,0x28,0x2c,0x44,0xb0,0xa1,0xaf,0xbc,0xb9,0xc2,0xb5,0xae,0xc5,0x24,0x1d,0x24,0x32 -,0x4e,0xbd,0xa0,0xa9,0xb3,0xca,0x4b,0x39,0x3b,0xad,0xb1,0x6e,0xf5,0xbd,0xa7,0xb9,0xc8,0xbe,0x2f,0x19,0x17,0x1f,0x2a,0x2e,0x79,0xaa,0xa2,0xa7,0xa3,0xb2,0x3c,0x34 -,0xb6,0xaf,0x34,0x3a,0xd7,0xb8,0xc0,0xa9,0xa5,0x37,0x1d,0x1f,0x26,0x37,0xfe,0xad,0xaf,0x47,0xd6,0xb3,0xb8,0x62,0x33,0x32,0x26,0x2c,0xe5,0xb9,0xa3,0x9d,0xa5,0xc4 -,0x35,0x30,0x46,0x42,0xc7,0xdc,0xe3,0xca,0xd7,0xe8,0x55,0xd8,0x39,0x21,0x22,0x30,0x34,0xfe,0xab,0x98,0x99,0xa8,0xaa,0x4d,0x28,0x2d,0x33,0x32,0x1f,0x29,0x6e,0x7c -,0xab,0xa8,0xac,0x75,0x29,0x32,0x38,0xc0,0xb9,0xb1,0xab,0xc5,0xc1,0xc2,0x43,0x2d,0x30,0x28,0x24,0x1e,0x37,0xa4,0xaf,0xa9,0xa4,0xb5,0xd6,0x41,0x47,0x37,0xdb,0xa8 -,0xb7,0xac,0xad,0xb4,0xba,0x2c,0x30,0x2d,0x1e,0x1b,0x1b,0x31,0xc3,0x9f,0x98,0xa6,0xb8,0xd5,0x3b,0x47,0xfd,0xce,0x3e,0x32,0x3f,0x3f,0xbe,0xad,0xa9,0xab,0x35,0x19 -,0x1a,0x37,0x9f,0x99,0xa5,0x4d,0x34,0x3b,0x2c,0x46,0xb2,0xaf,0x4b,0x1a,0x0d,0x1c,0x9d,0x89,0x8f,0x4b,0x25,0x3f,0x3f,0x34,0xdb,0xa6,0xad,0x36,0x19,0x12,0xba,0x8c -,0x8f,0xb6,0x18,0x17,0x28,0xcc,0xe3,0x33,0x9b,0x9a,0x26,0x17,0x1d,0x9d,0x8f,0xaa,0x2d,0x19,0x29,0x6d,0x4c,0x36,0xc1,0xa0,0xcd,0x15,0x1d,0xad,0x94,0x8f,0xa5,0xcd -,0x4a,0x3e,0x62,0x2d,0x20,0x40,0xce,0x26,0x11,0x16,0xc3,0xa0,0x98,0xa4,0x3a,0x55,0xd9,0x4c,0x39,0xb9,0x9b,0x9b,0x39,0x17,0x22,0xa6,0xa3,0x9d,0xaa,0x3d,0x4e,0x22 -,0x27,0x23,0xd7,0xaa,0xd5,0x21,0x1c,0x2f,0xa6,0x97,0xa6,0x4e,0x26,0xef,0x43,0x25,0xb7,0xa0,0xab,0x35,0x19,0x29,0xda,0x99,0x99,0xbb,0xc2,0x2f,0x2c,0x26,0x46,0x9e -,0x9f,0x5a,0x16,0x1a,0xfb,0xb2,0xa6,0xad,0xc0,0xde,0x25,0x1f,0x27,0xac,0x9c,0xb3,0x2d,0x1e,0x3c,0xa9,0xad,0xb6,0xcf,0xeb,0xb3,0x35,0x2e,0xc5,0x9e,0x9e,0x36,0x1c -,0x29,0xcb,0xa9,0x62,0x27,0x34,0x48,0x32,0x1c,0x2c,0xa2,0x9a,0xaf,0x2e,0x26,0xb3,0xa8,0xac,0xad,0xc7,0xb8,0x3b,0x24,0x27,0x50,0x9c,0xa8,0x39,0x25,0x22,0xbd,0xb7 -,0xda,0xec,0x41,0xcd,0x47,0x2e,0x33,0xa6,0x98,0x54,0x1c,0x27,0xaf,0xad,0x56,0x7b,0x31,0x2f,0x35,0x35,0xb8,0x9b,0x9e,0x36,0x2c,0xbe,0xaa,0xdb,0x4a,0xae,0xc6,0x34 -,0x2e,0x1c,0x2c,0xa0,0x9d,0x33,0x13,0x33,0x9d,0xab,0x29,0x3e,0xab,0xd9,0x4a,0x3f,0x28,0xbe,0x99,0xa5,0x2a,0x27,0xb6,0xa6,0xcf,0x32,0x49,0xbb,0x4d,0x27,0x2d,0x29 -,0xa3,0x97,0x3d,0x1c,0x3c,0x9f,0xc9,0x2d,0x3d,0xdb,0xb1,0xcd,0x2a,0x25,0xd7,0x99,0xab,0x37,0x3b,0xbf,0xaf,0x3f,0xd4,0xcd,0x58,0x49,0x27,0x22,0x2c,0xb6,0xab,0xbf -,0xe2,0x2e,0xc5,0xbe,0xaf,0x9c,0xa7,0xab,0x2f,0x19,0x1c,0x3b,0xac,0x43,0x2d,0x31,0x4c,0xa3,0xe0,0xa8,0x96,0x9f,0xbe,0x14,0x14,0x21,0xae,0xad,0x27,0x2d,0x64,0xa8 -,0xac,0xa3,0x9a,0x97,0xbb,0x12,0x13,0x1e,0x3f,0xe4,0x3e,0x3a,0x38,0xb1,0x9d,0x9c,0x99,0x9b,0x9f,0x30,0x0c,0x0f,0x27,0x53,0x54,0x28,0x32,0xac,0xa0,0xa4,0xaf,0x97 -,0x96,0x47,0x18,0x0f,0x25,0x72,0x5d,0x3c,0x39,0xa7,0xa5,0xa5,0xaf,0xa2,0x95,0xc4,0x1f,0x1a,0x1a,0x2e,0x43,0x2e,0x22,0xd8,0xa1,0xaf,0xab,0xae,0xa4,0xa6,0xc7,0x1f -,0x13,0x27,0xe2,0xc5,0x28,0x32,0x9c,0xa0,0xbf,0xcb,0xa5,0x9c,0xbd,0x23,0x15,0x2c,0xb9,0x2c,0x25,0x30,0xa5,0x9a,0xbc,0xe0,0xc8,0xab,0xac,0x50,0x31,0x1c,0x25,0x37 -,0x22,0x33,0xbd,0xa2,0xac,0xaf,0xaa,0xbe,0xb1,0xaa,0x4b,0x27,0x29,0xc2,0x5e,0x19,0x31,0x9c,0x99,0x5d,0x3f,0xc0,0xbe,0x6b,0x2e,0x22,0x28,0x4b,0x39,0x2e,0x27,0xbd -,0x97,0xa6,0xcb,0xab,0x9f,0xb8,0x2d,0x33,0x2b,0x2d,0x2e,0x29,0xf5,0xaf,0xb2,0xb1,0xac,0x3d,0x3c,0xac,0xa4,0xb2,0x29,0x20,0x35,0x35,0x2d,0x3f,0xa0,0x9f,0xc7,0x3e -,0x29,0x40,0xfb,0xba,0xef,0x4c,0x3e,0x29,0x2e,0x47,0xad,0x98,0xa4,0xc0,0x42,0x48,0x5e,0x3f,0xb5,0x39,0x3f,0x2d,0x22,0x32,0x4c,0x9f,0x9a,0xae,0x32,0x2e,0x6e,0xfc -,0xf1,0x5a,0x39,0x36,0x25,0x2a,0x3a,0x9e,0x90,0x9e,0xcb,0x29,0x56,0x72,0x35,0x3d,0xe9,0xcd,0x1f,0x17,0x23,0xaf,0x90,0x96,0xab,0x33,0x27,0x3f,0x4a,0xd1,0x58,0xea -,0x35,0x1e,0x1f,0x3e,0x9c,0x91,0x9c,0x51,0x2b,0x32,0x34,0x59,0x7e,0xe8,0x4f,0x1f,0x12,0x20,0x96,0x8c,0x93,0xad,0x25,0x42,0xdc,0x2e,0x25,0xe3,0xae,0x20,0x12,0x18 -,0xb7,0x92,0x8f,0x96,0xd5,0x28,0x27,0x2b,0x2f,0xb6,0x99,0x3d,0x0c,0x0e,0x44,0x92,0x8e,0x9a,0x3f,0x2d,0x57,0x37,0x2e,0x38,0xa9,0xb7,0x1d,0x12,0x1c,0xaa,0x90,0x8e -,0x9f,0x4d,0x2f,0x21,0x21,0xec,0x9c,0xa4,0x1c,0x0b,0x0e,0x78,0x8d,0x8e,0xa4,0x53,0x42,0x3c,0x3d,0x28,0xea,0x9e,0xb5,0x1c,0x0b,0x24,0x9d,0x97,0x96,0x9f,0xb3,0x2a -,0x17,0x25,0xb8,0x95,0xa4,0x16,0x09,0x18,0x9a,0x90,0x9e,0xd7,0x46,0x47,0x3c,0x2d,0x32,0xaa,0x9d,0xef,0x15,0x11,0x3f,0x9b,0x91,0x9a,0xe2,0x3f,0x1e,0x1c,0x4f,0xa3 -,0x97,0xba,0x15,0x0a,0x2b,0x8e,0x8e,0xa9,0x34,0x4d,0xd5,0x2e,0x1e,0x35,0xa8,0xa6,0x2a,0x10,0x17,0xab,0x94,0x9a,0xa9,0xbc,0x2b,0x1b,0x26,0xbf,0x92,0x98,0x29,0x0b -,0x0f,0xa8,0x8e,0x90,0xad,0x29,0x2d,0x2c,0x2e,0x2e,0xdd,0x98,0xa7,0x18,0x0e,0x21,0x9e,0x8e,0x96,0xd3,0x29,0x25,0x1f,0x1d,0xa3,0x8d,0xa5,0x14,0x08,0x21,0x93,0x8c -,0x98,0x4c,0x27,0x41,0x3b,0x28,0x32,0x9c,0x9d,0x28,0x0f,0x0e,0xe3,0x92,0x8e,0x9b,0x5c,0x2a,0x19,0x1a,0x40,0x9c,0x93,0xc4,0x0c,0x09,0x47,0x8e,0x8e,0xa4,0x39,0x35 -,0x59,0x2e,0x1f,0xc1,0x99,0xad,0x21,0x0b,0x1e,0x97,0x91,0x97,0xad,0x49,0x26,0x16,0x23,0xb8,0x92,0x9b,0x14,0x05,0x10,0x9b,0x8a,0x95,0xb9,0x3e,0x50,0x3b,0x23,0x3a -,0xa2,0x9b,0xca,0x11,0x0c,0x37,0x98,0x91,0xa7,0xf2,0xdd,0x2f,0x27,0x2f,0xa2,0x94,0xe0,0x0f,0x0a,0x2f,0x8e,0x8f,0xbd,0x23,0x31,0x42,0x36,0x37,0xad,0x9b,0xa8,0x20 -,0x0d,0x1c,0xa2,0x8e,0x9e,0x68,0xdf,0x2f,0x1b,0x27,0xac,0x97,0x9e,0x2f,0x0d,0x17,0xa8,0x91,0x98,0x28,0x1a,0x3d,0xbf,0xf6,0x3d,0xb5,0x9f,0x3b,0x15,0x1c,0xa8,0x92 -,0x9c,0xd7,0x28,0x1f,0x31,0x45,0x50,0xa3,0x94,0xb6,0x11,0x11,0xcf,0x94,0x95,0xb3,0x21,0x1f,0x29,0x39,0x63,0xbc,0xad,0xaa,0x30,0x19,0x69,0x9b,0x9a,0xaa,0x35,0x1c -,0x25,0x54,0x4a,0xfa,0xad,0xb8,0x2d,0x16,0x2e,0x94,0x8d,0x9b,0x38,0x19,0x1b,0x3d,0xc0,0xe5,0xb7,0xbc,0x3e,0x1a,0x20,0x9c,0x93,0xa4,0x7c,0x2a,0x20,0x2e,0x47,0x58 -,0xd6,0xb5,0x55,0x22,0x21,0x9f,0x8d,0x9b,0xf9,0x1d,0x1d,0x2c,0xb2,0xbb,0x4e,0x30,0x2d,0x2a,0x26,0xad,0x95,0x96,0xa5,0x31,0x21,0x24,0x30,0x60,0xb1,0xb1,0x37,0x1f -,0x1e,0xba,0x97,0x97,0xac,0x30,0x29,0x33,0x44,0xbe,0xbb,0x49,0x21,0x1d,0x2e,0xb1,0x9e,0x9a,0xa2,0x40,0x22,0x26,0xc6,0xab,0xb6,0x59,0x23,0x1e,0x25,0x5d,0x9c,0x98 -,0x9a,0x48,0x17,0x26,0xc6,0xb4,0xc6,0xd8,0x33,0x27,0x22,0x4a,0x9c,0x95,0x9d,0x32,0x1b,0x2c,0x7c,0xbf,0xba,0x6d,0x31,0x1f,0x27,0xb8,0x9b,0x96,0xa9,0x3a,0x22,0x29 -,0x38,0xaf,0xaa,0x36,0x2b,0x2b,0x3e,0xcd,0xb8,0xa8,0xa7,0xb5,0x3d,0x1f,0x2e,0x56,0xc6,0xd6,0x29,0x3a,0xba,0xbb,0xb9,0xa8,0xa6,0xb8,0x35,0x2f,0x2f,0x2d,0x4b,0x58 -,0xe7,0xbd,0xcf,0x58,0xd4,0xbd,0xa9,0xab,0xdc,0x2b,0x25,0x27,0x2c,0xd0,0xb0,0xbd,0x3b,0x45,0xd0,0xaa,0xa2,0xb5,0xdc,0x42,0x2a,0x2a,0x39,0xec,0xaf,0xb1,0x31,0x2b -,0xf4,0xaf,0x9a,0xa3,0x5e,0x20,0x1f,0x25,0x37,0xc1,0xae,0xac,0x2b,0x1a,0x3c,0x9e,0x97,0x9e,0xdf,0x25,0x1d,0x2b,0xb8,0xae,0xb4,0xcd,0x29,0x22,0x33,0x9d,0x98,0xa9 -,0xbc,0x38,0x28,0x24,0x29,0xac,0x97,0xb2,0x15,0x0e,0x22,0x9d,0x8f,0x95,0xcf,0x1a,0x1b,0x20,0x96,0x88,0xa8,0x0c,0x07,0x17,0x8e,0x88,0x9e,0x20,0x0e,0x0f,0xbb,0x88 -,0x8c,0xac,0x0e,0x02,0x13,0x88,0x86,0xb1,0x13,0x13,0x0f,0x95,0x8a,0x8d,0xb1,0x05,0x02,0x2a,0x83,0x88,0xcb,0x0b,0x0e,0x18,0x8b,0x8a,0x8e,0xcb,0x08,0x01,0x1b,0x81 -,0x87,0x39,0x05,0x0a,0x1c,0x8b,0x82,0x8d,0x2c,0x05,0x04,0x14,0x89,0x80,0xb3,0x07,0x04,0x1f,0xa4,0x86,0x83,0x9e,0x10,0x00,0x0b,0xac,0x80,0x87,0x27,0x03,0x03,0x24 -,0x97,0x83,0x80,0xc9,0x04,0x00,0x18,0x8f,0x84,0x84,0x1b,0x03,0x00,0x22,0x86,0x81,0x81,0x19,0x00,0x01,0x22,0x8c,0x8d,0x88,0xdc,0x05,0x03,0x1d,0x85,0x87,0x84,0xae -,0x03,0x04,0x0c,0x98,0x96,0x89,0x90,0x09,0x04,0x0f,0x86,0x85,0x96,0x97,0x0d,0x07,0x09,0xb4,0x96,0x9d,0x8b,0x1a,0x09,0x16,0x9d,0x8e,0xad,0x8a,0xa1,0x1b,0x04,0x0a -,0xa9,0x99,0x86,0xa7,0x1e,0x0f,0x17,0xde,0x9e,0x81,0x8d,0x16,0x05,0x05,0x01,0x19,0x8b,0x8d,0x1d,0x0d,0x05,0x0c,0x94,0x80,0x81,0xae,0x13,0x0b,0xa7,0x86,0x85,0x83 -,0x90,0x08,0x03,0x2c,0xa9,0x80,0x86,0x1f,0x0a,0x08,0x0f,0xaf,0x85,0x8e,0x06,0x00,0x00,0x0a,0x3d,0xbf,0xaf,0x04,0x06,0x00,0x08,0xa2,0x92,0x8c,0x1a,0x0b,0x0c,0x2c -,0x92,0x8c,0x83,0x8d,0x2f,0x2e,0x98,0x85,0x89,0x89,0x86,0x95,0x87,0x97,0x92,0x80,0x88,0x83,0x99,0xa5,0x84,0xa4,0x1b,0x04,0xa7,0x9f,0x0b,0x2c,0x09,0x03,0x06,0x05 -,0xf1,0xb4,0x0f,0x1b,0x00,0x04,0x06,0x0a,0x34,0x07,0x10,0x0f,0x0d,0x25,0x51,0x8a,0x3d,0x17,0x80,0x8c,0x9d,0x14,0xa6,0x80,0x83,0x80,0x9b,0x97,0xbd,0x84,0x83,0x81 -,0x09,0xb0,0x80,0x1f,0x1a,0x01,0x80,0x96,0x9c,0xb8,0x1d,0x24,0x00,0x18,0x27,0x09,0x04,0x00,0x8b,0x94,0x00,0x01,0x08,0x89,0xac,0x22,0x0e,0x10,0x07,0x07,0x96,0x8e -,0x9c,0x05,0x11,0x80,0x8d,0xc2,0x00,0x4e,0x80,0x81,0x89,0xb5,0x91,0x0c,0xb2,0x83,0x81,0x86,0x0a,0x31,0x80,0x8e,0x25,0x00,0x9a,0x87,0xa8,0x33,0x1d,0x13,0x02,0x0d -,0x27,0x6a,0x0b,0x00,0x09,0x80,0xbc,0x0b,0x00,0x0d,0xa6,0x50,0x90,0x0e,0x1d,0x08,0x0f,0x8b,0x90,0x98,0x00,0xdd,0x80,0x8e,0xca,0x02,0x89,0x81,0x80,0x93,0x97,0x85 -,0x3e,0xb1,0x87,0x8a,0x1e,0x00,0xa7,0x80,0x97,0x0e,0x00,0xab,0xa2,0x98,0x90,0x32,0x12,0x03,0x0a,0xb8,0x19,0x03,0x08,0x84,0x92,0x01,0x00,0x05,0x89,0x86,0xb9,0x0f -,0x0a,0x04,0x06,0x93,0x83,0x8a,0x04,0x27,0x80,0x8c,0xab,0x02,0x88,0x87,0x98,0x0b,0x50,0x80,0xa2,0xa1,0x45,0xbb,0x15,0x95,0x80,0x89,0xa6,0x03,0x14,0x97,0x8a,0x8a -,0x2f,0x1c,0x07,0x01,0x08,0x14,0x1b,0x02,0x87,0xbb,0x01,0x02,0x02,0x8f,0x8a,0x28,0x00,0x1d,0x4e,0x1f,0x16,0x22,0x0f,0xcc,0x80,0x8f,0xb3,0x03,0xbc,0x8a,0x8d,0xae -,0xa7,0x85,0x8f,0xb9,0x48,0x94,0x98,0x80,0x86,0x99,0x0c,0x07,0x4f,0x9b,0x82,0x8a,0x3a,0x03,0x0e,0xaa,0x88,0xa0,0x85,0x15,0x02,0x08,0x2f,0xcb,0x1c,0xd1,0x00,0x0f -,0x07,0x66,0x1b,0x1e,0x09,0x1c,0xbd,0x11,0x0a,0x14,0x9a,0x10,0x1d,0x31,0x9a,0x89,0x93,0xa3,0x49,0x0a,0x88,0x81,0x80,0xaa,0xbc,0x9c,0x24,0x89,0x83,0x86,0xd8,0x4d -,0xa0,0xd3,0x3b,0x87,0x8d,0xa3,0x0f,0x26,0x10,0x28,0xb2,0xa9,0xbd,0x06,0x10,0x07,0x16,0x00,0xcc,0x8f,0x9b,0x07,0x03,0x0f,0x0b,0x35,0x2b,0x9b,0xfa,0x17,0x07,0x12 -,0x09,0x8e,0x94,0x93,0xa7,0x1a,0x3c,0x15,0x8d,0x8d,0x81,0x89,0x9f,0x17,0x07,0xd9,0x86,0x80,0x85,0x37,0x0e,0x19,0x47,0x9b,0x82,0x82,0x45,0x15,0x00,0xb7,0x97,0x8d -,0x94,0xc8,0xb5,0x05,0x0d,0x07,0xb3,0xaa,0x21,0x0b,0x04,0x06,0x14,0x0f,0x07,0x1f,0x1a,0x24,0x0e,0x1d,0x09,0x37,0x9d,0x8d,0xa7,0x2c,0xb1,0x64,0x9e,0x26,0x8c,0x80 -,0x82,0x99,0x5b,0x1d,0x9d,0x88,0x82,0x9d,0xf3,0x3a,0xce,0x2e,0x31,0x88,0x88,0x90,0x06,0x1b,0x29,0xa6,0xa5,0x4a,0x09,0x27,0xd4,0x1d,0x15,0x06,0xd9,0xb2,0x92,0x13 -,0x49,0x20,0x0e,0x1b,0x05,0x26,0x2b,0xc5,0x0d,0x0d,0x05,0x0a,0x94,0x87,0x8f,0x1f,0x3b,0x19,0x09,0x23,0x89,0x89,0x8a,0x1e,0x1a,0x2b,0xca,0x84,0x82,0x80,0x91,0xed -,0x16,0x25,0x8c,0x82,0x87,0x90,0x2e,0x12,0x21,0x17,0xdf,0x88,0x85,0xa3,0x07,0x00,0x11,0xad,0x1e,0x1c,0x0c,0x1d,0x0a,0x11,0x07,0x06,0xb2,0x8e,0x8e,0x06,0x03,0x07 -,0xd7,0x3f,0x2d,0x93,0xa4,0x33,0x48,0xa0,0x4c,0x9d,0x87,0x86,0x9c,0x3f,0x9f,0x88,0x99,0xbc,0x87,0x8c,0x9b,0x24,0xab,0xc6,0xb2,0x8d,0x9f,0xb8,0x2b,0x28,0x11,0x15 -,0x32,0xa3,0xbc,0xa2,0x28,0x11,0xeb,0x22,0x04,0x39,0x84,0x95,0x14,0x09,0x05,0x1d,0x34,0xa9,0xaf,0xcd,0x1f,0x0a,0x0c,0x00,0x3b,0x84,0x81,0x1e,0x04,0x04,0x14,0x98 -,0x85,0x87,0x8a,0x29,0x1e,0x2b,0x07,0x8c,0x83,0x80,0xa0,0x0a,0x1c,0xa7,0x8b,0x98,0x89,0x82,0x8d,0x0f,0x09,0x16,0xc8,0x86,0x8b,0xb9,0x1b,0x06,0x0d,0x2d,0x1e,0x1f -,0xd5,0xa4,0x07,0x07,0x0b,0x0f,0x0e,0x39,0xa3,0xaa,0xac,0x0e,0x07,0x10,0xa3,0x8c,0x8f,0x0d,0x17,0x27,0xb1,0xcf,0x1b,0x88,0x84,0x84,0x1f,0x26,0x9b,0x91,0x89,0x8f -,0x99,0x90,0x55,0x14,0x2b,0x1f,0x87,0x81,0x8d,0x15,0x0d,0x1b,0xba,0x1d,0x24,0x9e,0x9f,0x38,0x00,0x02,0x0e,0xa9,0x87,0x8e,0x27,0x0f,0x04,0x05,0x13,0x6a,0x89,0x95 -,0x07,0x00,0x09,0x37,0xfc,0x8f,0x88,0x96,0xd1,0x18,0x03,0x1f,0x89,0x86,0x88,0xe1,0x0b,0x1a,0x93,0x94,0x8c,0x8c,0x87,0x9d,0x13,0x0e,0x9f,0x8d,0x8d,0x24,0x21,0xa5 -,0x24,0x9d,0x2e,0x10,0xac,0x8a,0xa7,0x1a,0x01,0x28,0x9e,0x13,0x1c,0x25,0xb7,0x4b,0x20,0x0d,0x16,0x2e,0x91,0x8f,0xb2,0x1c,0x0e,0x32,0x07,0x1e,0x93,0x87,0xfd,0x0a -,0x09,0x0b,0x2f,0x93,0x8f,0x89,0x9a,0x0a,0x0b,0x08,0x9a,0x81,0x84,0x87,0x38,0x15,0x2e,0x98,0x8c,0x89,0x83,0x85,0x32,0x02,0x18,0x4d,0x88,0x8e,0xd5,0xb8,0x0c,0x07 -,0x07,0x0d,0xa8,0x83,0xaf,0x07,0x00,0x07,0x1c,0xdc,0x8d,0x2b,0x12,0x27,0x06,0x11,0x41,0x95,0x85,0x8c,0x42,0x0d,0xd0,0x93,0x8f,0x8d,0xa5,0x96,0x33,0x17,0xc8,0xac -,0x95,0xcc,0xb6,0xa9,0x8f,0xba,0x5e,0x27,0x27,0xb0,0xae,0x8f,0x14,0x0f,0x1b,0x32,0x0e,0x46,0x8c,0x8d,0x31,0x11,0x20,0x17,0x96,0xa0,0x47,0xb9,0xd2,0x2c,0x0c,0x02 -,0xa5,0x81,0x84,0x9a,0x06,0x07,0x1c,0xca,0x90,0x95,0xa7,0x1b,0x06,0x0b,0x0b,0x27,0x8a,0x82,0x92,0x07,0x0b,0x13,0x27,0x9f,0x91,0x84,0xa9,0x08,0x04,0x3e,0x92,0x82 -,0x82,0x8b,0x1d,0x12,0x2a,0x2f,0x8d,0x82,0x9b,0x6d,0x17,0x08,0x2e,0x4c,0xb5,0x8b,0xa8,0x1b,0x06,0x05,0x18,0x9b,0x91,0x3d,0x1a,0x04,0x10,0x23,0x95,0x68,0x4f,0x90 -,0x91,0x29,0x12,0x20,0x6b,0x91,0xa9,0x9a,0xa5,0x4e,0x15,0x33,0x29,0x99,0x84,0x8d,0x26,0x0e,0xbb,0x2f,0xca,0xd2,0xb5,0x99,0x8e,0xb1,0x0f,0x0a,0x1d,0x83,0x8d,0xb3 -,0x15,0x18,0x28,0x0c,0x1b,0x9d,0x94,0x9d,0x2b,0x0d,0x1d,0x12,0x99,0x8b,0x89,0xa2,0x1c,0x0a,0x01,0x20,0x96,0x80,0x93,0x10,0x05,0x0f,0x24,0x8d,0x86,0x88,0xaa,0x11 -,0x07,0x0a,0x60,0xab,0x86,0x8c,0x38,0x05,0x0d,0x09,0xc1,0x80,0x80,0x99,0x04,0x00,0x15,0x8d,0x86,0x8a,0xc3,0x1b,0x15,0x16,0x0e,0xae,0x85,0x80,0x9d,0x05,0x0b,0x23 -,0xca,0x9a,0x88,0x8f,0x28,0x08,0x07,0x12,0x9c,0x86,0x8e,0x24,0x04,0x19,0x3e,0xd0,0x78,0xca,0x99,0xb2,0x11,0x0d,0x28,0x3f,0x91,0x95,0xdc,0x10,0x27,0xa3,0xb9,0xb4 -,0xc7,0x9a,0xc0,0x22,0x49,0x90,0x99,0xc1,0xbf,0xa3,0xae,0x9f,0xa1,0x18,0x23,0xaf,0x97,0xb9,0x1f,0xbb,0xb7,0x1e,0xcf,0x9c,0x96,0x4e,0x38,0x3c,0x1b,0x1c,0x20,0xbc -,0xa3,0xa3,0x39,0x19,0x08,0xb3,0x8c,0x8a,0xb7,0x13,0x14,0x10,0x39,0x1f,0xa3,0x96,0x97,0x16,0x05,0x0d,0x9f,0x84,0x8c,0x50,0x16,0x1d,0x12,0x1f,0x1e,0x9b,0x89,0x99 -,0x17,0x06,0x0c,0x8f,0x80,0x89,0x1c,0x0a,0x3e,0x1b,0x2d,0xa2,0x8e,0x90,0x2a,0x0c,0x0b,0x23,0x87,0x85,0x8f,0x17,0x05,0x25,0x21,0xbf,0x9f,0x8e,0xb4,0x0e,0x0a,0x21 -,0xc4,0x90,0x89,0xa1,0xcf,0x0a,0x14,0x1b,0xa7,0x97,0x95,0xb8,0x11,0x0e,0x1c,0xb6,0x9c,0x8e,0x9d,0x2b,0x08,0x3b,0xf7,0xa4,0xa2,0x52,0xc4,0x2d,0xbf,0x43,0x3d,0xb5 -,0x8d,0x8c,0x23,0x0b,0x29,0x38,0xa1,0x52,0x1b,0xa8,0x98,0xad,0x2d,0x13,0xb2,0x89,0x96,0x2f,0x14,0xbd,0x1d,0x1e,0x21,0xb1,0x9b,0xa1,0x49,0x0c,0x17,0x97,0x84,0x95 -,0x2a,0x0f,0xa9,0x1d,0x11,0x13,0xa7,0x8a,0x9d,0x27,0x0b,0x1e,0x8f,0x8a,0xa2,0x41,0x27,0x9a,0x0d,0x14,0x3f,0x9d,0x8e,0x3f,0x28,0x0f,0x0d,0xa8,0x8b,0x8e,0x42,0x19 -,0xa5,0x2d,0x41,0x22,0xac,0xac,0x28,0x1f,0x13,0x1a,0x94,0x84,0x95,0x1e,0x14,0xa1,0x38,0x1b,0x17,0xa2,0xa8,0x2e,0x30,0x14,0x14,0x8d,0x89,0x9c,0x0f,0x0c,0x99,0x4c -,0x29,0x1b,0x9c,0x8c,0x9e,0x2d,0x18,0x10,0x97,0x8b,0x9b,0x11,0x10,0x92,0xa7,0xba,0x0e,0x2b,0x9f,0xa9,0x50,0x1f,0x1e,0x9b,0x99,0x8e,0x43,0x1d,0xa8,0x25,0x28,0x0d -,0xb7,0x94,0xae,0x16,0x08,0x35,0x84,0x8e,0xa5,0x0d,0x10,0xae,0x3b,0xbb,0x1b,0x9c,0x92,0xae,0x28,0x0b,0x11,0x90,0x86,0x8e,0x0d,0x0d,0xc7,0xbf,0x99,0x28,0xa9,0x9c -,0x53,0x0d,0x09,0x26,0x89,0x89,0x8f,0x1d,0x19,0xb9,0x17,0x40,0x28,0x9e,0x9b,0x27,0x1b,0x07,0x18,0x85,0x84,0x91,0x10,0x13,0x21,0x12,0xdc,0xa8,0x8d,0x93,0x1f,0x0e -,0x04,0x1c,0x83,0x8e,0x97,0x14,0x33,0x34,0x0e,0x9a,0xa8,0x8c,0x99,0x21,0x0d,0x00,0x16,0x86,0x82,0x91,0x18,0x1d,0xb9,0x39,0x48,0x26,0x97,0xa0,0x22,0x14,0x06,0x1d -,0x88,0x87,0x8c,0x15,0x1c,0x2b,0x0c,0x32,0x57,0x8d,0x98,0x2b,0x28,0x13,0x1e,0x8c,0x90,0xa3,0x0f,0x25,0x99,0x1f,0x22,0x23,0x8f,0x93,0x25,0x2d,0x0c,0x0b,0x9b,0x89 -,0x89,0x12,0x1a,0x95,0x3f,0xc2,0x1c,0xb4,0x99,0x27,0xc8,0x12,0x0c,0x9b,0x91,0x86,0x1e,0x17,0x96,0x3f,0x31,0x0b,0xd9,0x8f,0x1c,0x2e,0x2e,0x16,0x9e,0xc0,0x8d,0x9a -,0x23,0x9d,0x16,0x0f,0x0a,0x38,0x86,0x99,0xe5,0x15,0x09,0x94,0x8e,0x8a,0xb8,0x0b,0x9c,0x2f,0x7c,0x2f,0x29,0x96,0xa4,0xad,0x2e,0x05,0xd5,0x99,0x92,0x92,0x0f,0x9f -,0xb5,0xe7,0x13,0x06,0x98,0x98,0x35,0x1e,0x06,0xe3,0x94,0x93,0x90,0x1d,0xa5,0x23,0x17,0x2d,0x0e,0xc1,0x8b,0xa3,0x67,0x08,0x1c,0x8b,0x98,0x89,0x11,0x17,0xa3,0x28 -,0xb2,0x1d,0xc1,0x95,0x4a,0xb6,0x0d,0x0d,0x91,0xa9,0x8c,0x9e,0x1d,0xaa,0x42,0xa5,0x13,0x0d,0x95,0xaa,0xaf,0x12,0x08,0x8c,0x8f,0x93,0xaf,0x12,0x9c,0x2c,0x25,0x1d -,0x09,0xa8,0x92,0x9c,0xdc,0x08,0x2c,0x94,0x9b,0x9d,0x11,0x37,0xa8,0x3a,0xaf,0x16,0x48,0x91,0xa9,0x67,0x0d,0x12,0xa0,0xae,0x8f,0x9b,0x1f,0xa6,0xb7,0xb3,0x2a,0x15 -,0xa0,0x91,0x20,0x13,0x1a,0xa7,0x8f,0xaf,0xa0,0x27,0x18,0x4e,0x46,0x2c,0x2f,0x57,0x9e,0x54,0x32,0xa7,0x63,0xea,0x3a,0x41,0x54,0x17,0x2d,0x99,0x9f,0xc3,0x21,0x41 -,0x9a,0xbb,0x41,0x7e,0x1a,0x27,0xc7,0x9b,0x9e,0x57,0xae,0x2b,0x1c,0x23,0xae,0xa3,0x2b,0x1f,0xb0,0x99,0xa7,0xe9,0x27,0x3d,0x5a,0xac,0xad,0x35,0x25,0x20,0xa8,0xa6 -,0xd3,0x9b,0xab,0x30,0x19,0x28,0xaa,0xc8,0xb9,0xaf,0x4a,0x1c,0x32,0xc0,0xc1,0x2a,0x27,0x4a,0x25,0x5e,0x77,0x9a,0xba,0x2b,0xa5,0xac,0x3d,0x26,0xb2,0x3c,0x19,0xc2 -,0x8f,0xb4,0x2f,0x63,0xc7,0xa0,0xd4,0xab,0xab,0x24,0x26,0x3c,0x9b,0xab,0x45,0xae,0x22,0x19,0x25,0xd7,0xa5,0xc1,0x2e,0x52,0x54,0xc7,0xda,0xae,0xbd,0x19,0x3a,0xaf -,0xd9,0x1e,0x3b,0xb5,0x31,0x2e,0x9e,0x9c,0xd1,0x29,0x1b,0x2d,0x2d,0x9c,0x8c,0x9f,0x1f,0x17,0x1e,0xc1,0xa6,0x9d,0xac,0x1c,0x10,0x53,0x8d,0xad,0xc4,0xb2,0x64,0x1c -,0x27,0x9b,0xa5,0x36,0x2f,0xb5,0xe8,0xf5,0xad,0xbf,0x25,0x17,0xc0,0x95,0xba,0x1c,0x27,0x49,0xba,0xaa,0xa3,0xa5,0x28,0x21,0x25,0x36,0x25,0xbe,0x96,0xd4,0x1c,0x29 -,0xda,0x24,0xa2,0x8f,0xa6,0x17,0x16,0xa9,0x93,0xae,0x3a,0xcd,0x3b,0x1d,0x25,0xa3,0x55,0x3e,0xbb,0x97,0xa3,0x2d,0x2b,0x35,0x4a,0x29,0x9b,0xb1,0x23,0x24,0x2c,0x37 -,0xb6,0xa5,0x9d,0x50,0x17,0x1b,0xb5,0xa4,0x29,0xae,0xb1,0xc9,0x39,0xaa,0xac,0x56,0x32,0xb6,0xd3,0x1b,0x38,0x9f,0x99,0x2c,0x2b,0x2c,0x3d,0x4e,0xb3,0xbb,0x4e,0x5b -,0x7a,0x9c,0xd4,0x23,0x6a,0x57,0x28,0x44,0xa2,0xba,0x26,0x2e,0xaf,0xb8,0xad,0xa6,0x3e,0x21,0x10,0xa9,0x8d,0xa7,0x21,0x1c,0xcf,0x3f,0xc6,0xa2,0xbb,0x19,0x1f,0xbf -,0xab,0xbf,0xdf,0xa5,0xaa,0x1f,0x1c,0xb7,0xb7,0xa7,0xaf,0x33,0x17,0x30,0x98,0x9e,0x2b,0x17,0xca,0xb0,0xc5,0x4f,0xbd,0xbc,0x3d,0x60,0xbe,0xb2,0xb3,0x5a,0x41,0x1c -,0x1b,0x9e,0x95,0xa9,0x1f,0x25,0x2b,0xb5,0x98,0xa8,0x29,0x13,0x1e,0xa5,0x96,0xb3,0x6a,0xbd,0x6c,0x25,0xcb,0xae,0xcb,0x28,0x33,0x41,0x3d,0xb0,0xa7,0x58,0x1a,0x2b -,0xac,0x99,0xc5,0x2d,0x2e,0x24,0x29,0xb6,0x9e,0xad,0x2d,0x25,0x2a,0x16,0x44,0x8f,0x91,0xb3,0x1c,0x19,0x47,0x9c,0x96,0xb1,0x21,0x1e,0xb7,0xab,0xb7,0xc6,0xdf,0xa6 -,0xa8,0x43,0x39,0x2a,0x27,0x38,0x49,0xae,0xa5,0x71,0x27,0x2b,0x4c,0xca,0x9f,0x97,0x45,0x16,0x16,0x28,0xa9,0x9e,0xb6,0x1e,0x1a,0x28,0xc2,0x9e,0xa4,0xa6,0xa9,0xcc -,0x21,0x4e,0xbd,0x3d,0xb9,0xd7,0x28,0x1f,0x3a,0xa9,0xc9,0xbe,0xb4,0x65,0xa4,0x71,0x21,0x1c,0x2a,0xc4,0x9d,0x94,0xba,0x28,0x1d,0x26,0xa7,0x92,0x9a,0x72,0x1e,0x1e -,0x1e,0x35,0x9a,0x9c,0xc3,0x2b,0x1c,0x41,0xb2,0xc2,0xeb,0x3c,0xbb,0x61,0x37,0x56,0x26,0x40,0x40,0xca,0xa6,0xc6,0xd8,0xe0,0xb8,0xa7,0x2f,0x3e,0xa3,0xce,0x26,0x17 -,0x23,0xb3,0x91,0x99,0x2b,0x1f,0x4a,0xee,0xb0,0x9f,0xcb,0x30,0x14,0x1e,0x6f,0xc9,0xa1,0xa0,0xa9,0x1a,0x1f,0xb8,0xab,0x9e,0x3f,0x23,0x2c,0xf0,0xbb,0x3a,0xeb,0xd1 -,0xc2,0xa3,0xad,0xd1,0xc7,0x56,0x51,0xc5,0x27,0xed,0xac,0x23,0x19,0x22,0x54,0x97,0x8d,0xa1,0x2b,0x0f,0x1e,0xb3,0xb3,0xac,0x54,0x3b,0x2b,0x2a,0x9e,0xa0,0xd4,0xcd -,0xdd,0xd8,0x30,0x5e,0xbf,0x2d,0x2e,0x24,0xe5,0x99,0x9e,0xba,0x1b,0x1e,0xa4,0xaa,0xa0,0xc7,0x24,0x20,0x2c,0xa5,0xbe,0x2f,0x25,0x32,0xc4,0xb3,0x73,0xd6,0xa4,0xac -,0x2c,0x1b,0x2b,0xa3,0x97,0xdd,0x1a,0x25,0xad,0x9f,0xc7,0xbb,0xa6,0x3e,0xe4,0x2b,0x29,0xb8,0xb4,0x56,0x30,0x1f,0x28,0xa8,0xa0,0xad,0x2b,0x3a,0xc4,0x9c,0xba,0x1d -,0x1a,0x54,0x9a,0xa0,0xbb,0x27,0x33,0x5e,0xb8,0x36,0x36,0x41,0x33,0x2f,0xd4,0xae,0xc4,0xc7,0x59,0xe6,0x42,0xae,0xa7,0xa6,0x2b,0x1c,0x2e,0x3f,0xbe,0x52,0x3a,0x2d -,0x57,0x54,0xe9,0xa1,0xa9,0xc8,0xbe,0xf1,0x53,0x29,0x54,0xa3,0xab,0x24,0x2a,0xa1,0x9e,0xa1,0x25,0x20,0xce,0xc4,0xae,0x3d,0x13,0x1c,0x52,0xa4,0xa2,0x9c,0xb2,0x21 -,0x2b,0xc5,0xb3,0xd1,0xa7,0xc0,0x2a,0x1b,0x20,0xc3,0x9d,0xd9,0x22,0x4d,0xc0,0xc3,0xbe,0xac,0xb5,0x49,0x29,0x37,0x2f,0xbe,0xa2,0xa7,0xce,0x18,0x42,0xae,0xa6,0xbd -,0x1e,0x2b,0xd1,0x6f,0x26,0x2f,0x2d,0xba,0xb3,0xb7,0x9c,0xa1,0xf4,0xc7,0x5d,0xbf,0xa3,0xfd,0x23,0x1d,0x2f,0x3b,0xc8,0xba,0x98,0xaf,0x21,0x3c,0xb4,0xb5,0xeb,0x4b -,0x2f,0x25,0x24,0xb9,0x4e,0x51,0x9e,0xa9,0x49,0x31,0xcc,0xb4,0x47,0x30,0x30,0x3f,0x2d,0x3f,0x2e,0x49,0xb9,0xb1,0xaa,0xa9,0xae,0x37,0x49,0xbd,0xa2,0x4f,0x22,0x41 -,0xc7,0x51,0xc8,0x78,0x3d,0xc6,0xa8,0x4e,0x1a,0x26,0x45,0xab,0xc3,0x45,0x30,0xc1,0xa5,0xc7,0xd5,0xbe,0xbe,0xbd,0xac,0x4c,0x3b,0x29,0x1c,0x25,0xb9,0x9a,0xa6,0x21 -,0x26,0xb4,0xa8,0x98,0xb6,0x5e,0x28,0x25,0x66,0x27,0x28,0x26,0xaa,0xaf,0xd6,0xbd,0x4a,0xae,0xce,0xb9,0xa6,0xee,0x2f,0x39,0x5e,0xbf,0x39,0x3d,0xaa,0xbf,0x29,0x2c -,0x3c,0xbe,0xa5,0xa0,0xaf,0x1c,0x19,0x2a,0xbe,0xa5,0x9f,0xb4,0x29,0x22,0x31,0xa7,0x9b,0xb9,0x30,0x29,0x1a,0x18,0x38,0x9d,0x9b,0xb1,0xa9,0xa9,0x37,0x36,0xc8,0x9f -,0xc6,0x1e,0x3a,0x46,0x1c,0x61,0xa2,0xc2,0x2c,0x2f,0x40,0xa7,0xa8,0xc4,0xa6,0x3a,0xbb,0xa1,0xb0,0x15,0x0b,0x0f,0x91,0x8d,0x29,0x2e,0x2a,0xa0,0x93,0xdd,0x2a,0xc6 -,0x3e,0xbb,0x21,0xe7,0x91,0x36,0x0e,0x04,0x9c,0x80,0x23,0x0f,0x24,0xad,0x92,0x0a,0x05,0x27,0x9d,0x8f,0x10,0x0e,0xb9,0xa9,0x92,0x36,0xab,0x80,0xd3,0x17,0xdf,0x96 -,0x80,0x26,0x10,0x20,0x15,0xe5,0x00,0x18,0x8b,0x92,0xb1,0x05,0x03,0x8e,0x93,0x98,0x8d,0xcd,0x84,0x0d,0x17,0x9e,0x99,0x85,0x0b,0x0b,0x1e,0x18,0x1e,0x04,0x08,0x89 -,0x8b,0x8e,0xbc,0x0f,0xa2,0x16,0x8f,0x83,0x97,0x8a,0x2a,0x42,0xa4,0x29,0x19,0x06,0x06,0x75,0x1d,0x06,0x0c,0x23,0x84,0x97,0x98,0x94,0xc2,0xa9,0x18,0x8a,0x81,0x99 -,0x26,0x06,0x14,0x8e,0x8c,0x23,0x13,0x0e,0x39,0x1c,0x07,0x2e,0xe2,0x8d,0x96,0xac,0xa1,0x0d,0x07,0x07,0x3e,0x83,0x82,0x91,0x32,0x19,0x99,0x9d,0x24,0x9f,0x23,0x23 -,0x19,0x17,0xa6,0x2a,0xb6,0x57,0x1c,0x1d,0x25,0x17,0xa3,0x8a,0x85,0xa8,0x09,0x2d,0x42,0xaa,0x10,0xac,0x80,0x9a,0x1a,0x04,0x08,0x1d,0x28,0x1e,0x91,0x8d,0x93,0x1c -,0x07,0x93,0x86,0x83,0x37,0x20,0x8a,0x92,0x32,0x05,0x09,0x38,0x1d,0x05,0x09,0x15,0x9a,0xa6,0x96,0x85,0x8d,0x7d,0x04,0x2e,0x96,0x94,0x97,0x59,0x9c,0x88,0xc2,0x22 -,0x15,0x45,0x90,0x19,0x18,0x2a,0x2f,0x11,0x04,0x36,0x8f,0xc6,0x07,0x0b,0x9c,0x90,0x91,0x8a,0x8a,0x8c,0x31,0x12,0x1c,0xb7,0x9c,0x29,0x34,0x2e,0x14,0x0b,0x09,0x9f -,0x8a,0x94,0xd8,0x29,0xa5,0x52,0x20,0x9e,0x96,0x9f,0xfd,0xa5,0xb8,0x17,0x0e,0x1b,0x88,0x8f,0x0f,0x08,0x23,0x93,0x4b,0x2d,0x8e,0x92,0xb9,0x0e,0x2f,0x97,0x8e,0x9f -,0x31,0x9b,0x27,0x1b,0x1f,0xc4,0xab,0x1f,0xca,0x3a,0x59,0x1b,0x0c,0x27,0xb6,0xb9,0x2a,0x9d,0x90,0x22,0x46,0x8e,0x82,0x84,0xa6,0x9c,0x9d,0x96,0xaf,0x9d,0x8d,0x1e -,0x08,0x09,0x3d,0xc1,0xba,0xa7,0x94,0xd6,0x05,0x02,0x05,0x61,0x33,0x19,0x2e,0x0f,0x04,0x04,0x20,0x20,0x06,0x05,0x0d,0x27,0x15,0x08,0x05,0x0b,0x18,0x21,0x96,0xb7 -,0x2d,0x1d,0x93,0x81,0x8a,0x8c,0xb0,0x8b,0x9c,0x1e,0xae,0x8c,0x80,0x90,0xc7,0xaf,0x53,0xa9,0xa5,0x8b,0x81,0x83,0x83,0x8b,0x91,0xb3,0xb6,0x96,0x8c,0x8f,0xb5,0x98 -,0xa7,0x1e,0x11,0x40,0x8e,0x40,0x0c,0x08,0x1f,0xba,0xab,0x87,0x8b,0x35,0x05,0x09,0xc8,0xb7,0x50,0x1a,0xcf,0xd0,0x0d,0x11,0x2e,0xaf,0x1a,0x0c,0x0f,0x0b,0x10,0x0f -,0x1f,0x20,0x0e,0x0d,0x16,0xf1,0x16,0x12,0xce,0x8c,0x87,0xab,0x29,0x31,0xc3,0x27,0x18,0x3c,0x38,0x18,0x07,0x10,0xe1,0x5f,0x8c,0x83,0x84,0xbc,0x0a,0x24,0x9c,0x8c -,0xcc,0x9b,0x89,0x9c,0x33,0x1f,0x8f,0x8a,0x9e,0xad,0xa8,0x9a,0xaf,0x2b,0x55,0x9f,0x8f,0x9d,0x9a,0xdd,0x0e,0x0d,0xf5,0x81,0x89,0xc6,0x0f,0x17,0x2c,0x0a,0x09,0x14 -,0x20,0x11,0x00,0x0f,0x18,0x26,0x40,0xa4,0x81,0x8c,0x9b,0x9d,0x8a,0x81,0x9b,0x99,0x86,0x81,0x82,0x8a,0x89,0x92,0xb3,0xf7,0xad,0x8c,0xaa,0x1d,0x2a,0x98,0x89,0xc9 -,0x14,0x0a,0x04,0x03,0x07,0x31,0x6d,0x12,0x02,0x01,0x0d,0x04,0x02,0x00,0x0d,0x40,0x0c,0x0b,0x07,0x0e,0x0d,0x0a,0x20,0x13,0x09,0x03,0x1e,0x8b,0x99,0xd3,0xba,0x90 -,0x88,0x25,0x1d,0x96,0x85,0x8b,0xb6,0xa7,0xc3,0x2a,0x27,0x92,0x80,0x84,0x8e,0xcd,0x92,0x82,0x8b,0x8a,0x8a,0x88,0x93,0x9a,0x85,0x8a,0xab,0x10,0x10,0x97,0xb9,0x1e -,0x29,0xa7,0x90,0x56,0x9f,0x97,0xa4,0xce,0x2b,0x94,0x99,0x29,0x1e,0x22,0x9a,0x33,0x05,0x0e,0x15,0x47,0x0d,0x0b,0x1e,0x10,0x12,0x0e,0x62,0x2f,0x0f,0x0e,0x08,0x33 -,0x2d,0x18,0x20,0x31,0x8f,0x58,0x2e,0x5a,0x0f,0x08,0x0a,0xb2,0x45,0x08,0x05,0x07,0xa2,0x86,0x9c,0xa9,0x1d,0xa4,0xab,0x30,0x94,0xa5,0x9d,0x41,0xb3,0x95,0x26,0x1e -,0x24,0x94,0x85,0x9a,0xac,0x26,0xa3,0x92,0xa6,0x90,0x97,0xa8,0x1c,0x28,0x97,0xd3,0x1c,0x2d,0xb6,0x98,0x1f,0x0d,0x12,0xb0,0x9a,0x0d,0x0c,0x05,0x14,0xaa,0x8f,0x80 -,0x86,0x93,0x37,0x42,0x87,0x82,0x87,0x8b,0x8b,0x80,0x86,0x85,0x84,0x88,0x8a,0x51,0xc4,0x9d,0x15,0x0f,0x0f,0x43,0xa9,0x15,0x0d,0x05,0x13,0x10,0x03,0x0e,0x16,0x1f -,0x14,0x0f,0x09,0x00,0x01,0x00,0x02,0x08,0x06,0x02,0x03,0x27,0x93,0x21,0x0f,0x12,0x46,0xaa,0x26,0xbf,0x1e,0x11,0x29,0x9d,0x80,0x8f,0x3d,0x21,0xa7,0x84,0x8e,0x9c -,0xa6,0xa5,0x8d,0x8d,0x84,0x84,0x99,0xa0,0xb1,0x8c,0x83,0x8b,0x92,0x98,0x86,0x8b,0xe8,0xdc,0xb6,0x94,0xa7,0xc9,0x6e,0x16,0x15,0x19,0x96,0x85,0xb1,0x17,0x26,0xa8 -,0xa9,0x1d,0x2e,0x6d,0x9f,0x8f,0xa5,0x47,0x0b,0x0c,0x13,0x0f,0x20,0x0e,0x03,0x05,0x0e,0x93,0xa0,0x0e,0x0e,0x0c,0x18,0x17,0x43,0xc2,0x15,0x18,0x1e,0xb0,0x9b,0x10 -,0x08,0x1c,0xaa,0xbc,0x13,0x17,0x1c,0xae,0x99,0x3d,0x27,0x22,0x3e,0xb7,0xb0,0x8f,0xa1,0xb5,0x99,0x8d,0x81,0xa4,0x18,0xb9,0x8b,0x8c,0x48,0x3f,0xb4,0x76,0xa2,0x97 -,0x93,0xce,0x0e,0x6d,0x90,0x87,0x96,0x2d,0xc0,0x2d,0xac,0x9f,0x70,0x1a,0x04,0x0b,0x0b,0x18,0x5c,0x0c,0x08,0x1b,0x96,0x8b,0x95,0x8a,0x86,0x83,0x82,0x87,0x83,0x8c -,0x97,0x8b,0x8d,0x8f,0xcb,0xb7,0x8d,0x8d,0x8a,0x9d,0x2a,0x29,0x22,0x1b,0x16,0x11,0x0b,0x09,0x10,0x0a,0x01,0x04,0x03,0x08,0x11,0x2d,0x19,0x01,0x02,0x0e,0x26,0x18 -,0x0a,0x0a,0x04,0x02,0x0b,0x23,0x47,0x10,0x0b,0x3d,0x9e,0x88,0x8e,0xb0,0xba,0xa0,0x91,0xbb,0xbc,0x92,0x89,0x86,0x8f,0x9e,0x9f,0xa4,0x99,0x93,0x86,0x92,0x29,0x90 -,0x82,0x81,0x86,0x8b,0x8a,0x8f,0x96,0xba,0xde,0xbc,0x2a,0xad,0x92,0x97,0xbc,0x10,0x0e,0x1e,0xab,0x90,0xb1,0x23,0xe5,0xb0,0x93,0xa3,0x2e,0x30,0x1a,0x1e,0x26,0xd8 -,0x1e,0x09,0x1f,0xaf,0xd9,0x1b,0x0e,0x0e,0x04,0x07,0x0a,0x03,0x0a,0x21,0xb8,0xac,0xaf,0xbb,0x22,0x2c,0xdb,0x2a,0x17,0x0d,0x16,0x2f,0xeb,0x29,0x13,0x1f,0x1c,0x0d -,0x22,0xb4,0x98,0xad,0xd5,0x8e,0x88,0x88,0xc7,0x2b,0xa2,0x6e,0xa3,0xb5,0x2e,0xc6,0x96,0x86,0x86,0x86,0x98,0x37,0x3f,0xb0,0x96,0x94,0xd7,0xb5,0xb8,0x99,0x9a,0xbb -,0xa4,0x25,0x0c,0x11,0x36,0x2f,0x1a,0x3c,0x93,0x94,0xa8,0x16,0x0f,0x1e,0x32,0xa9,0x2c,0xbc,0x92,0x8b,0x81,0x82,0x81,0x82,0x8c,0x8b,0x88,0x8b,0x9f,0xac,0x8c,0x8f -,0x8a,0xaf,0x06,0x05,0x03,0x08,0x10,0x1b,0x0b,0x02,0x0c,0x42,0x2d,0x13,0x0e,0x11,0x0c,0x00,0x02,0x00,0x07,0x0a,0x08,0x0f,0x0f,0x15,0x0b,0x04,0x12,0x5c,0x2b,0x0e -,0x2e,0x92,0x89,0x8d,0xa6,0xab,0xc4,0x4c,0xb7,0xe5,0xb4,0x9f,0x9a,0x8a,0x85,0x8d,0x9d,0x93,0x8f,0x94,0x96,0xa6,0xb8,0x93,0x87,0x83,0x82,0x85,0x91,0xae,0xa7,0xa3 -,0xa4,0xaa,0xb4,0xa8,0x8e,0x95,0x40,0x21,0x22,0x1e,0x28,0x3b,0x29,0x3e,0xbb,0x9d,0x8f,0x9b,0x45,0x42,0x4e,0x53,0x25,0x10,0x07,0x0b,0x24,0x2c,0xbb,0xb6,0x1e,0x08 -,0x05,0x0f,0x1b,0x0c,0x04,0x0f,0xea,0xbe,0x1d,0x14,0x1b,0x2d,0x1e,0x11,0x1b,0x33,0x19,0x18,0xc9,0x99,0x9b,0x3c,0x17,0x1b,0x26,0x17,0x11,0x1e,0x52,0xa7,0x8f,0x8f -,0x8c,0x8d,0x98,0x96,0x93,0xb0,0x29,0xab,0x8b,0x8c,0x93,0xac,0x56,0xa5,0xbb,0x3b,0x36,0xb1,0x30,0xe7,0x91,0x8b,0x8a,0x99,0xad,0xaf,0x6c,0x1b,0x0a,0x08,0x12,0x1f -,0x2d,0x2f,0xc5,0xc3,0x38,0xbd,0x92,0x9a,0xcd,0x9a,0x85,0x81,0x81,0x8b,0x8f,0x86,0x87,0x8e,0xa8,0x9f,0x93,0xa3,0xa8,0x97,0x8a,0x9c,0x19,0x1d,0x13,0x0d,0x05,0x01 -,0x02,0x09,0x1b,0x0b,0x05,0x0c,0x0d,0x0a,0x0a,0x06,0x08,0x07,0x0a,0x16,0x1a,0x12,0x0f,0x15,0x0e,0x0e,0x0b,0x09,0x19,0x18,0x25,0xac,0x91,0x91,0xa5,0x9a,0x91,0x91 -,0xab,0x4a,0xd1,0xa2,0x91,0x97,0x8d,0x83,0x8b,0x95,0xaf,0xa2,0x9c,0x9c,0x96,0x8b,0x89,0x8a,0x96,0x94,0x89,0x88,0x93,0xae,0xa2,0x3e,0x7e,0x22,0x9c,0xa8,0xc0,0x3a -,0x12,0xda,0x0d,0x0c,0x4e,0x50,0x9d,0x9b,0x64,0xa5,0x8a,0x8e,0x4d,0x9c,0xa9,0x1f,0x3a,0x06,0x1e,0x8b,0xcd,0x35,0x3d,0x18,0x11,0x0c,0x08,0x05,0x04,0x0b,0x12,0x1d -,0x0d,0x1a,0x2a,0x16,0x15,0x02,0x0d,0x0f,0x16,0xda,0x1f,0xca,0x9c,0xa5,0xa3,0x9c,0x92,0x97,0xb8,0x9a,0x91,0x8c,0x8a,0x95,0x8c,0x87,0x86,0x8c,0x97,0x8f,0x91,0x8d -,0x8d,0x87,0x92,0xb1,0x99,0xc8,0x28,0x0d,0x0a,0x09,0x05,0x10,0x15,0x08,0x14,0x14,0x20,0x24,0x1c,0x28,0x03,0x06,0x14,0x18,0x21,0x1d,0xc6,0x99,0xb0,0xc9,0x39,0x58 -,0xc9,0xa8,0x86,0x89,0x83,0x87,0x88,0x80,0x84,0x84,0x99,0x8e,0x94,0x9c,0x8d,0x87,0x8a,0x9a,0x27,0x29,0xa2,0x20,0x07,0x06,0x14,0x06,0x03,0x07,0x11,0x3d,0x17,0x13 -,0x2a,0x0d,0x05,0x04,0x0c,0x1b,0x0a,0x13,0x1f,0xab,0x24,0x0a,0x1d,0x17,0x3c,0x18,0xa1,0x86,0x8e,0xd5,0x2f,0x87,0x97,0x3a,0x9c,0x92,0xd2,0x1b,0xb5,0x95,0x88,0x87 -,0x8e,0x85,0x88,0x8b,0x4e,0x18,0x96,0xb8,0x29,0xab,0x29,0x20,0x16,0x09,0x08,0x30,0x1d,0x05,0x18,0xb0,0x29,0x12,0x18,0xae,0x1e,0x16,0x2c,0x0e,0x27,0x14,0x15,0xcf -,0x8c,0x9d,0x8e,0x81,0x88,0x83,0x8a,0x91,0x92,0x9d,0x89,0x84,0x87,0x8f,0x9c,0x4c,0x9e,0x9e,0x25,0xa7,0x98,0x94,0x31,0x1f,0x1c,0x0f,0x2f,0x97,0x1d,0x0e,0x0f,0x0b -,0x05,0x3a,0x2d,0x0e,0xa8,0xb8,0x1b,0x07,0x09,0x11,0x04,0x13,0xbb,0xc8,0x2e,0x11,0x17,0x14,0x92,0x1b,0x0b,0x4a,0x0d,0x09,0x00,0x1d,0x1a,0x04,0xcb,0x26,0x19,0x27 -,0x36,0x20,0xa0,0x80,0x92,0x85,0x81,0x84,0x87,0x96,0x94,0x38,0xa2,0x8a,0x23,0x4e,0x9a,0xff,0x1a,0x8d,0x94,0x0a,0x9c,0x9c,0xae,0xe6,0x42,0x98,0x1f,0xa5,0x8e,0xa0 -,0x9d,0xa3,0x3b,0x21,0x86,0x2d,0x2f,0x80,0x8c,0x9d,0x34,0x9e,0x1f,0x12,0xc9,0x3d,0x1e,0x19,0x38,0x08,0x14,0x8a,0x2a,0x2f,0xad,0x0d,0x0e,0x0e,0x0f,0x09,0x1a,0x89 -,0x8f,0x9b,0x90,0xaf,0x26,0x8d,0x82,0xb5,0x97,0x98,0xa5,0x14,0x0f,0x1c,0x04,0x1b,0x0e,0x03,0x03,0x0b,0x02,0x00,0xa0,0x39,0x00,0x6b,0xbb,0x06,0x15,0x33,0x41,0x21 -,0x92,0x8d,0x2f,0x89,0x87,0xa4,0x91,0x80,0xac,0x70,0x81,0x8b,0x8e,0x8a,0x8c,0xab,0x44,0x8e,0x91,0xcc,0x85,0x98,0x12,0xb1,0x80,0x94,0x26,0x80,0xdf,0x1d,0xaa,0x24 -,0x1d,0x0e,0xaa,0x10,0x0f,0xa4,0x0f,0x01,0x19,0x9b,0x07,0x1c,0x87,0x0d,0x10,0x18,0x0c,0x13,0x09,0x9e,0x32,0x11,0xaa,0x0c,0x0c,0x9e,0x80,0xa4,0x91,0x80,0xb9,0x8d -,0x80,0x8a,0x8c,0x8a,0x88,0x9a,0x90,0xa4,0x1a,0x13,0x37,0x9b,0x01,0x0e,0x1e,0x00,0x06,0x11,0x04,0x01,0x05,0x06,0x00,0x0a,0x1a,0x01,0x07,0x0a,0x5f,0x03,0x15,0x8b -,0x10,0xd2,0xa5,0x12,0x28,0x4c,0xa5,0x92,0x91,0x8c,0xab,0x38,0x92,0x83,0xa4,0x8a,0x80,0x9e,0x90,0x83,0x97,0x8e,0x8b,0x88,0x8c,0x9c,0x83,0x69,0x31,0x3c,0x84,0xaa -,0x26,0x8d,0x13,0x20,0x2b,0x23,0x2c,0x0f,0x1c,0x26,0x06,0x3b,0x09,0x07,0x15,0xd1,0x12,0x00,0x8d,0x17,0x0e,0x9a,0x2a,0xc7,0xb0,0x98,0x89,0x8d,0x82,0xa3,0x97,0x8d -,0x81,0x8e,0x19,0x80,0xa3,0x12,0x94,0x3a,0x08,0x0e,0x10,0x0b,0x06,0x21,0x0b,0x00,0x0b,0x20,0x2b,0x09,0x89,0xcd,0x07,0xcd,0x1b,0x04,0x1c,0x35,0x13,0x10,0xc6,0x1b -,0x09,0x0e,0x29,0x93,0x07,0x99,0x8c,0x0c,0x4c,0x95,0x16,0xba,0x95,0xaa,0xe3,0xc8,0x94,0xad,0x8f,0x91,0x84,0x3d,0x8f,0x80,0x3e,0x95,0x81,0x9d,0xa4,0x8b,0xca,0xa2 -,0x9c,0x98,0x27,0x1f,0x22,0xaf,0x18,0x0c,0x84,0x1d,0x10,0x9d,0x0c,0x0b,0xa8,0x51,0x22,0x2f,0x96,0x68,0x9f,0xad,0x98,0x85,0xa0,0x80,0x88,0xb5,0x87,0x9a,0x25,0xa9 -,0x1e,0x2b,0x07,0x0e,0x09,0x00,0x06,0x0a,0x17,0x00,0x18,0x1c,0x00,0x26,0x5d,0x09,0x30,0x2a,0x1f,0x15,0x62,0xac,0x10,0x27,0x1c,0x88,0xbe,0xbb,0x80,0x2e,0x9d,0x86 -,0x23,0x38,0x8f,0xae,0xaf,0xa6,0x8f,0x31,0x9f,0x2d,0x9f,0x97,0x1c,0x81,0xab,0x0f,0x97,0xa0,0x14,0x9e,0xd4,0x36,0x29,0xa3,0x18,0x0c,0xbc,0x26,0x9a,0x0f,0xd6,0x8f -,0x14,0x98,0x96,0x04,0x2a,0xc1,0x38,0x30,0x2c,0xb4,0x17,0x9f,0xc0,0x8a,0x97,0x8e,0x80,0x9b,0x86,0x80,0x8c,0x85,0x84,0x8f,0x8c,0x97,0x91,0x0b,0x1f,0x07,0x11,0x1c -,0x00,0xbc,0x0f,0x03,0x13,0x07,0x00,0x14,0x03,0x0a,0x08,0x0c,0x0e,0x05,0x0b,0x0e,0xa6,0x05,0x29,0x98,0x0c,0xac,0xa4,0x11,0xaa,0x9b,0xbc,0xa9,0xa8,0x93,0x3c,0xa3 -,0x40,0x8c,0x9d,0xac,0x80,0xa4,0x9a,0x85,0xbd,0x9a,0x89,0xb2,0x8a,0x97,0x8b,0xa9,0xad,0x9f,0x9e,0x94,0x0b,0x93,0xb9,0x13,0x8e,0x21,0x0a,0xac,0x27,0x33,0x1b,0x21 -,0x13,0x06,0x0b,0x00,0x2a,0x08,0xce,0x8a,0x11,0xa3,0x9a,0x20,0x8c,0x8b,0x8c,0x88,0x85,0x8c,0xa8,0x83,0x9c,0x8c,0x99,0x27,0x84,0x1e,0x0d,0xa5,0x07,0x19,0x1b,0x09 -,0x0c,0x07,0x0e,0x06,0x0a,0x02,0x0c,0x5d,0x06,0xe9,0xaa,0x17,0xa3,0x19,0x06,0x16,0x22,0x2f,0x16,0x1e,0x2c,0x0e,0x14,0x1d,0x8a,0x0f,0xca,0x84,0x13,0x95,0x92,0x46 -,0x8d,0x89,0x9a,0x96,0x98,0x8e,0x78,0xa9,0x68,0x8a,0x8c,0x58,0x83,0xb0,0x9b,0x81,0x2e,0xf8,0x93,0x32,0xac,0x27,0x9e,0x16,0x16,0x1e,0x18,0xd7,0x07,0xa6,0x29,0x03 -,0xbc,0x1a,0x0c,0x8b,0xb0,0xa2,0x8e,0x95,0x9e,0xa6,0x8c,0x8b,0x81,0x8c,0x86,0x80,0xa5,0x8a,0x8b,0x16,0xa3,0x20,0x06,0x07,0x04,0x0c,0x07,0x07,0x04,0x11,0x06,0x05 -,0x2a,0x0b,0x0f,0x9f,0x08,0x0e,0xce,0x29,0xbe,0x3a,0xa6,0x12,0x24,0x26,0xa4,0x9b,0x18,0x85,0x8f,0x2e,0x85,0xd5,0x25,0x8a,0xb9,0xba,0xd7,0x9e,0x3a,0x23,0x50,0x98 -,0x8a,0x19,0xa5,0x8d,0x12,0x91,0x90,0x1e,0xa7,0x59,0xbe,0x31,0xb9,0x9d,0x1a,0x42,0x3b,0xce,0x10,0xf2,0x80,0x1e,0xa1,0xa6,0x04,0x16,0x29,0x13,0x0f,0x1c,0x23,0x1a -,0xba,0x9f,0x82,0x94,0x9f,0x80,0x90,0x8c,0x80,0x9d,0x8d,0x82,0x98,0x94,0xb9,0xae,0x07,0x0e,0x0f,0x0f,0x08,0x04,0x45,0x05,0x0d,0x6b,0x04,0x04,0x0d,0x05,0x13,0x07 -,0x24,0x0b,0x0a,0x36,0xa0,0x1d,0x0d,0x87,0x33,0x1f,0x92,0x0f,0x2d,0x93,0xac,0x90,0xb3,0x95,0x2f,0x1c,0xa7,0x8a,0x9e,0x1a,0x80,0xa1,0xed,0x80,0xb4,0x9f,0x8e,0xb7 -,0x94,0xa6,0x9a,0x39,0x22,0xa6,0x85,0xc5,0x1d,0x83,0x5f,0x39,0x8e,0x0b,0x1b,0xba,0x1e,0xa9,0x19,0x31,0x0f,0x05,0x0b,0x48,0x0b,0x0c,0x89,0x1d,0x36,0x84,0xbc,0x9c -,0x87,0x8a,0x83,0x8c,0x89,0xa7,0xa5,0x8f,0x80,0x9a,0xbe,0x86,0x0e,0x13,0xb3,0x01,0x08,0x08,0x03,0x0b,0x0e,0x10,0x07,0x02,0x0b,0xfd,0x02,0x2d,0xa5,0x06,0x43,0x2f -,0x0a,0x24,0x2a,0xc6,0x2e,0x26,0x1e,0x0c,0x0d,0x9e,0x88,0x28,0x87,0x8e,0x29,0x89,0x9b,0x41,0xa4,0xa3,0x96,0xb8,0x97,0x8e,0x5f,0x1f,0x85,0xa2,0x25,0x80,0xd7,0x26 -,0x94,0x36,0xc5,0x9e,0xa6,0x9c,0x2c,0x69,0x4c,0x0b,0x0f,0x8e,0x0c,0x17,0x87,0x07,0x38,0x5c,0x00,0x1b,0x0f,0x0f,0xb5,0x1b,0xa0,0x9d,0x25,0x8a,0x83,0xa4,0x81,0x81 -,0xab,0x83,0x95,0x64,0x8a,0xa7,0x4d,0xbb,0x32,0x16,0x06,0x00,0x1f,0x07,0x06,0xa1,0x06,0x06,0x15,0x06,0x09,0x16,0x1f,0x0c,0x08,0x1d,0x17,0x00,0x36,0x8e,0x00,0xa2 -,0x86,0x0b,0x90,0x4a,0x1a,0xc2,0x4c,0x99,0x9b,0x8f,0x89,0x35,0x11,0x85,0xa8,0x1f,0x80,0xb3,0x14,0x8c,0x2e,0xa2,0x95,0x8d,0x8f,0xcd,0x8e,0x56,0x0d,0x99,0x86,0x10 -,0x8e,0x8a,0x2f,0x9d,0xbc,0x2f,0x0f,0xc5,0xba,0x09,0x19,0x20,0x00,0xbf,0x8e,0x01,0xcc,0x95,0x20,0x95,0x9e,0xa8,0x48,0x98,0x80,0x8d,0x87,0x81,0x45,0x93,0x80,0x26 -,0x8d,0x86,0x27,0xa9,0x24,0x0f,0x04,0x04,0x16,0x17,0x22,0x07,0x00,0x9a,0x9f,0x04,0xb6,0xaf,0x07,0x06,0x02,0x08,0x0d,0x00,0x0f,0x06,0x00,0x0b,0x00,0x10,0x1b,0x00 -,0x4e,0x45,0x0c,0x17,0x13,0x1a,0x07,0x2a,0xb1,0x28,0x8f,0x94,0x2d,0x86,0x88,0x8b,0x80,0x84,0x89,0x83,0x80,0x84,0x87,0x80,0x82,0x8c,0x80,0x82,0x8c,0x80,0x86,0x8d -,0x80,0x87,0x8d,0x90,0x8b,0xb5,0xe9,0x8c,0x5b,0x35,0x95,0x0f,0x0c,0x98,0x06,0x1c,0x4f,0x07,0x0a,0x03,0x04,0x00,0x02,0x09,0x02,0x02,0x0d,0x00,0x0a,0x0d,0x00,0x0d -,0x09,0x04,0x04,0x00,0x03,0x00,0x06,0x05,0x02,0x0f,0x06,0x00,0x3a,0x05,0x14,0x95,0x2d,0x27,0x0b,0x3f,0x24,0xad,0x80,0xa6,0xa8,0x89,0xbb,0x86,0x83,0x8f,0x80,0x82 -,0x80,0x85,0x82,0x85,0x88,0x80,0x80,0x85,0x80,0x8e,0x8a,0x80,0x86,0x83,0x80,0x82,0x81,0x81,0x81,0x87,0x83,0x81,0x8d,0x89,0x84,0x9b,0x80,0x97,0xa9,0x80,0x8c,0x85 -,0xda,0xa0,0xcc,0x1b,0x9d,0x0f,0x06,0x1c,0x00,0x27,0x3a,0x00,0x1b,0x0e,0x09,0x0a,0x07,0x02,0x00,0x08,0x0a,0x00,0x06,0x04,0x00,0x19,0x00,0x08,0x26,0x04,0x06,0x03 -,0x04,0x00,0x03,0x0d,0x02,0x04,0x06,0x00,0x0b,0x03,0x05,0x2c,0x0d,0x0e,0x05,0x08,0x01,0x07,0x25,0x0a,0x0a,0x1d,0x00,0x20,0x33,0x01,0x8f,0x9e,0x4f,0xcd,0x50,0x24 -,0x1d,0x88,0x8d,0xa0,0x82,0x99,0x8e,0x80,0x92,0x83,0x80,0x81,0x84,0x81,0x87,0x8e,0x81,0x81,0x88,0x81,0x89,0x8c,0x80,0x86,0x81,0x80,0x82,0x83,0x82,0x83,0x8e,0x89 -,0x80,0x8e,0x87,0x88,0xc7,0x80,0x96,0x97,0x80,0x8d,0x9c,0x3f,0x3f,0x0f,0x17,0xa4,0x0f,0x0f,0x4f,0x02,0xa8,0xc7,0x11,0x8b,0x9f,0xa7,0x43,0xa4,0x23,0x1f,0x8b,0x9c -,0xac,0x85,0x2c,0x91,0x85,0x66,0x81,0x86,0x89,0x91,0x85,0x98,0x36,0x8b,0x9e,0x2b,0x86,0x1f,0x30,0x8e,0x04,0xb3,0xaf,0x1b,0x0e,0x09,0x05,0x00,0x08,0x05,0x00,0x07 -,0x01,0x01,0x0e,0x00,0x03,0x09,0x02,0x01,0x01,0x03,0x00,0x01,0x05,0x00,0x03,0x04,0x00,0x0b,0x04,0x00,0x08,0x04,0x03,0x00,0x04,0x00,0x03,0x0c,0x00,0x05,0x0c,0x00 -,0x0e,0x0a,0x01,0x33,0x1f,0x16,0x0c,0x1d,0x0d,0x0f,0x8f,0xc7,0xac,0x88,0xc5,0x86,0x86,0x9c,0x80,0x82,0x80,0x83,0x80,0x83,0x86,0x80,0x81,0x84,0x80,0x89,0x89,0x80 -,0x88,0x80,0x80,0x80,0x82,0x80,0x80,0x84,0x81,0x80,0x88,0x80,0x85,0x8b,0x80,0x91,0x86,0x80,0x84,0x82,0x82,0x84,0x8f,0x84,0x81,0xbb,0x8b,0x8a,0x4b,0x80,0x91,0x9a -,0x80,0x87,0x89,0x89,0x83,0x9e,0xa6,0x83,0xaa,0xb4,0x9d,0x02,0xb2,0x33,0x00,0x35,0x0c,0x06,0x07,0x05,0x01,0x00,0x04,0x00,0x00,0x02,0x00,0x00,0x04,0x00,0x02,0x04 -,0x00,0x01,0x01,0x01,0x00,0x04,0x04,0x00,0x04,0x02,0x00,0x17,0x00,0x08,0x1d,0x0c,0x1c,0x1d,0x21,0x0a,0x21,0xa0,0x1d,0x9f,0xb8,0x10,0x85,0xb2,0xbc,0x80,0x8e,0x8d -,0x8c,0x86,0xae,0x9e,0x80,0xb1,0xb1,0x84,0x1d,0x94,0x8a,0x2e,0x85,0x84,0x88,0x9c,0x8f,0xa2,0x49,0x84,0x90,0xb4,0x87,0x24,0xb2,0x80,0x25,0x8d,0x84,0x99,0x9c,0x91 -,0xc3,0x0e,0x93,0x9a,0x10,0x9f,0x1d,0x02,0x99,0x10,0x1b,0x92,0x25,0x18,0x12,0x1c,0x04,0x10,0x3d,0x06,0x12,0x27,0x00,0xa8,0x5c,0x08,0x8e,0x9c,0x49,0x25,0xb2,0x18 -,0x12,0x8f,0x2a,0x15,0x9d,0x0b,0x40,0x88,0x0f,0x97,0x90,0x5f,0xd2,0xaa,0x2b,0x0b,0x9c,0xc6,0x12,0x98,0x1f,0x0a,0x8a,0x18,0x41,0x85,0x9d,0xae,0xa3,0x92,0x23,0x9f -,0x8b,0x35,0xa0,0x8e,0x29,0x85,0x91,0xba,0x80,0x84,0x84,0x89,0x84,0x9d,0x90,0x80,0x89,0x8c,0x80,0x9d,0x91,0x80,0x2d,0x8d,0x87,0xa0,0xa8,0x9d,0x26,0x07,0x37,0x22 -,0x08,0x27,0x0b,0x00,0x1c,0x03,0x07,0x31,0x09,0x05,0x08,0x08,0x00,0x07,0x10,0x01,0x09,0x16,0x00,0x14,0x0f,0x01,0xab,0x54,0x1f,0x1c,0x1b,0x0d,0x18,0x8e,0xa9,0xed -,0x8b,0x25,0xa6,0x81,0x25,0x8c,0x83,0x8d,0x8a,0x88,0x91,0x4b,0x8b,0x86,0xa7,0x8b,0xa2,0x0d,0x89,0xca,0xaf,0x81,0x9d,0xa8,0xac,0x9e,0x2e,0x57,0x9d,0x17,0x34,0x8f -,0x0a,0xba,0xa9,0x0a,0x8b,0x8d,0xb0,0x38,0x34,0x1e,0x15,0x97,0xca,0x0a,0xd3,0x0c,0x0d,0x9b,0x04,0x12,0xad,0x20,0x3f,0x24,0x11,0x00,0x0f,0x32,0x06,0x14,0x12,0x00 -,0x42,0x19,0x0a,0x8e,0x49,0x25,0xcd,0x9b,0x40,0x1c,0x9d,0x2e,0x5f,0x8a,0x1b,0xbb,0x8f,0x10,0x89,0x85,0x97,0x9d,0xa6,0x4f,0x2a,0x8c,0xa7,0x15,0x9d,0x2f,0x17,0x85 -,0x0f,0x18,0x88,0xa1,0x9b,0x96,0xbb,0x0a,0xd1,0x92,0x2a,0xcd,0xbf,0x03,0xa0,0x9d,0x20,0x84,0x9b,0xae,0x9a,0x8c,0xbe,0xfa,0x92,0x9e,0x94,0x81,0xa6,0x93,0x85,0x2f -,0x85,0x81,0x8f,0x9a,0x9f,0x33,0x34,0x8f,0xb7,0x0d,0x33,0x19,0x09,0x9f,0x08,0x08,0xc9,0x18,0x18,0x0d,0x06,0x00,0x05,0x0b,0x06,0x03,0x07,0x00,0x19,0x16,0x03,0xb6 -,0x14,0x0c,0x1d,0x26,0x07,0x08,0x28,0x17,0x34,0x8d,0x16,0x6f,0x8b,0x1c,0x86,0x82,0x8c,0x92,0x8e,0x95,0x9c,0x84,0x89,0xae,0x8b,0x91,0xad,0x80,0x2b,0xa6,0x80,0x88 -,0x8b,0x91,0xa0,0x13,0xbb,0x8c,0xd5,0xb0,0xbc,0x08,0x8d,0x9a,0x23,0x87,0x9f,0xaa,0x9e,0xa5,0x15,0x1a,0xa5,0x2c,0xeb,0x97,0x0b,0x2f,0xb5,0x03,0x99,0xa1,0x0f,0x0d -,0x1a,0x0e,0x09,0xc7,0x14,0x02,0x19,0x06,0x08,0xd7,0x00,0x11,0xae,0x28,0x2c,0x1c,0x11,0x04,0x34,0x9b,0x1a,0xed,0x22,0x0a,0x87,0xa4,0xd1,0x85,0xa4,0xbc,0x9d,0x94 -,0x14,0x24,0x94,0x48,0x95,0x8a,0x17,0x95,0xae,0x16,0x83,0x93,0xb2,0x48,0xab,0xfe,0xbd,0x8d,0x2c,0x1f,0x8f,0x18,0xb5,0x8f,0x08,0x98,0x87,0x90,0x9a,0xa4,0x21,0x0b -,0x90,0x8f,0x2b,0x9a,0x22,0x37,0x80,0xa5,0x8b,0x81,0x8b,0x8a,0x88,0x8a,0x39,0x9a,0x8d,0xae,0x88,0x94,0x0c,0x95,0x20,0x1a,0x8c,0x56,0x12,0x0a,0x1a,0x03,0x0c,0x14 -,0x00,0x05,0x07,0x00,0x0b,0x09,0x00,0x23,0x19,0x1e,0x0f,0x0a,0x04,0x03,0x29,0x0e,0x06,0x1e,0x00,0x1f,0x8e,0x16,0x8c,0x8e,0x97,0x97,0x8c,0x9a,0x1f,0x8b,0x96,0xa5 -,0x80,0xae,0xd7,0x81,0x23,0x8d,0x80,0x8c,0x90,0x92,0x88,0xa7,0x87,0x88,0x23,0x97,0x9e,0x14,0x85,0x41,0x4f,0x85,0x8c,0x88,0xa7,0x9c,0x11,0x22,0x8c,0x18,0x20,0xbc -,0x02,0x92,0x9a,0x16,0x89,0xbf,0x3e,0x2b,0x4e,0x0d,0x06,0xcc,0x0e,0x18,0x9e,0x01,0x14,0x41,0x00,0xab,0xdd,0x15,0x0a,0x0f,0x12,0x03,0xc9,0x1d,0x02,0x2c,0x09,0x0b -,0x9d,0x05,0x3f,0x8f,0x8f,0x99,0xc7,0xb1,0x08,0xa8,0x90,0x12,0x9f,0x54,0x15,0x80,0xa1,0x9a,0x85,0x99,0x99,0x9f,0x99,0x0a,0x1c,0x97,0x1c,0x98,0x95,0x09,0x92,0x47 -,0x20,0x87,0xb7,0x4f,0x1c,0xa2,0x29,0x1f,0x8e,0x1f,0x25,0x8f,0x17,0x94,0x97,0x1c,0x83,0x86,0x81,0x8b,0x8b,0x99,0x68,0x82,0x90,0x62,0x89,0x2a,0x9c,0x80,0xc9,0x88 -,0x90,0xa1,0xad,0xce,0x20,0x00,0x19,0x1f,0x05,0x34,0x0a,0x01,0x21,0x01,0x1d,0x22,0x08,0x0a,0x02,0x0e,0x00,0x0e,0x22,0x01,0x17,0x11,0x00,0x23,0x03,0x0c,0x9e,0xa3 -,0x97,0x2d,0x5b,0x0a,0x1b,0x85,0x41,0xb6,0x9c,0x11,0x87,0x90,0x9e,0x80,0x92,0x83,0x88,0x86,0xab,0x1f,0x89,0x97,0x95,0x80,0x30,0x92,0x8c,0x6d,0x84,0xa3,0x9f,0xca -,0x94,0x8e,0x1f,0x8c,0x9f,0x12,0x88,0xab,0xa8,0x8d,0x0a,0x9c,0x9c,0x98,0x99,0x3f,0x7b,0x0b,0x56,0xc6,0x02,0x16,0x08,0x07,0x92,0x0a,0x25,0xb2,0x18,0x34,0x1c,0x18 -,0x00,0x06,0x28,0x07,0x1b,0x23,0x00,0xb1,0x10,0x2e,0x8e,0x25,0x2e,0x0e,0x2f,0x19,0x18,0x95,0x10,0x1b,0x96,0x09,0xa0,0x1b,0x0b,0x86,0x91,0x88,0x9b,0xa9,0xd6,0x1d -,0x89,0xae,0x0c,0x9e,0x0e,0x9a,0x88,0x1f,0x87,0x8f,0x89,0x88,0x8e,0xa0,0x0d,0xb0,0xa1,0x11,0x8e,0x1a,0x1c,0x8a,0x0f,0x8e,0x8e,0xe1,0xdd,0xaf,0x90,0x56,0x93,0x8a -,0x2c,0x8a,0x8f,0xa7,0x80,0x12,0x9c,0x82,0x8d,0x87,0xac,0xaa,0x25,0xe7,0x8e,0x0e,0x0e,0x14,0x00,0x9c,0x0f,0x11,0xa5,0x17,0x44,0x1e,0x19,0x06,0x00,0x1c,0x0b,0x0b -,0xb2,0x00,0x36,0x27,0x0b,0x8e,0x37,0x19,0x0d,0x1d,0x1e,0x10,0xa1,0x21,0x0f,0x8b,0x25,0x92,0x98,0x07,0x8a,0x91,0x8f,0x97,0xca,0xae,0x1f,0x97,0x98,0x0c,0xc6,0x0b -,0x2f,0x84,0x14,0x8d,0x97,0xb2,0x94,0xb2,0xab,0x0a,0x14,0x99,0x0b,0xa9,0xae,0x14,0x86,0x2f,0x8e,0x85,0xab,0xab,0xd8,0x98,0x35,0xb4,0x8a,0x1c,0x9d,0x8e,0x23,0x81 -,0x14,0x20,0x8a,0xc2,0x9a,0xf9,0xc5,0x12,0x0f,0x96,0x12,0x0a,0x24,0x00,0x9c,0x2a,0x1b,0x8f,0x21,0xa2,0x5e,0xad,0x2e,0x05,0xbd,0x2c,0x0e,0x97,0x0b,0xb7,0xa5,0x16 -,0x86,0xa1,0x38,0x15,0x2c,0x2a,0x08,0xb8,0xff,0x05,0xae,0x13,0x31,0xa9,0x00,0xa6,0xaa,0x33,0x3f,0x35,0x31,0x0e,0xaf,0x92,0x11,0xb9,0x19,0x2b,0x87,0x22,0x8a,0x8a -,0x99,0x8d,0x98,0x8e,0x2f,0x2e,0x8a,0x23,0xb1,0x95,0x3a,0x88,0x3b,0x95,0x84,0x99,0xa3,0x39,0x9e,0x39,0x36,0x89,0x2c,0x42,0x97,0x1e,0x85,0x71,0x2d,0x88,0x9b,0x95 -,0xa9,0xa6,0x23,0x16,0x8d,0x45,0x0e,0x35,0x02,0xcc,0x1e,0x0e,0x97,0x1b,0x1d,0x18,0x1a,0x18,0x02,0x1c,0x1f,0x03,0x35,0x0c,0x31,0x66,0x0f,0x8e,0x9b,0xab,0x21,0x22 -,0xbc,0x10,0xa6,0x96,0x08,0xb3,0x2a,0x57,0x94,0x0d,0xaa,0xa2,0x4d,0x43,0x2b,0x21,0x0b,0x32,0x9a,0x09,0x1e,0x10,0x15,0x93,0x15,0x95,0x8b,0xa5,0x99,0x9e,0x97,0xdc -,0x78,0x86,0xbf,0xac,0x91,0x9d,0x83,0xca,0x91,0x80,0x8d,0x98,0xbf,0x9f,0x3b,0x16,0x89,0x47,0x09,0xc4,0x14,0x9a,0x33,0x16,0x98,0xaf,0x29,0x25,0x4c,0x1a,0x08,0xa6 -,0xba,0x09,0x2b,0x0d,0xa5,0x4e,0x15,0x89,0x99,0x24,0x2c,0x5b,0x35,0x0f,0x24,0xae,0x08,0x0e,0x12,0xb8,0x21,0x09,0xa5,0xa7,0x2c,0x10,0x19,0x22,0x0a,0x1b,0x95,0x12 -,0x10,0x1d,0xa2,0x91,0x29,0x97,0x88,0x90,0x37,0x9c,0x8e,0x23,0x34,0x87,0xa6,0x5d,0x3a,0xa0,0x89,0x1f,0xa1,0x84,0x92,0x1f,0x3d,0x9b,0x31,0x18,0x9d,0xa4,0x29,0x1a -,0xb9,0x86,0x23,0xdb,0x88,0x89,0xa4,0x25,0x9d,0x98,0x1e,0x9e,0x8b,0x3b,0x16,0x1f,0x8a,0xaa,0x22,0x9d,0x8d,0xf6,0x0a,0x2c,0x3e,0x09,0x0f,0xd5,0x25,0x0f,0x05,0xcb -,0xbf,0x14,0x35,0x97,0xa4,0x09,0x17,0xab,0x36,0x1f,0xf5,0xa7,0xb6,0x0c,0xb6,0x93,0x1f,0x48,0x9c,0x8d,0x43,0x0a,0x2f,0xba,0x11,0x1e,0x3a,0x23,0x08,0x11,0xab,0x2e -,0x1d,0x1a,0x9d,0x9d,0x14,0x1f,0xb4,0x28,0x4d,0xb0,0xa0,0xb1,0x1c,0x9b,0x8b,0x93,0x99,0x8c,0x8c,0xa5,0xae,0x96,0x95,0x99,0xa9,0x9b,0x9b,0x1b,0x30,0xb8,0x4b,0x3e -,0xe8,0xa4,0xa9,0x13,0x1f,0xb5,0x2b,0x4c,0x4d,0x2c,0x25,0x1b,0x2e,0xb8,0x27,0x3b,0x9b,0x94,0xe4,0x2e,0x7a,0x29,0xc5,0xb5,0xef,0x5d,0x16,0x1c,0xa9,0x1c,0x16,0x26 -,0x2e,0x43,0x18,0x1c,0x2c,0x12,0x1b,0xc0,0x2f,0x2c,0x1d,0x1b,0x2e,0x31,0x35,0xa7,0x96,0xa3,0xa5,0x98,0xaa,0xb7,0x97,0xa3,0x99,0xa3,0xab,0xa7,0xd2,0xaf,0x99,0x9a -,0xba,0xbb,0x37,0x3e,0x34,0x3e,0xc4,0x47,0x28,0xdd,0xcb,0x1d,0x2e,0x3a,0xcf,0xa2,0xaa,0xa3,0xa0,0x2f,0xa4,0x93,0xa1,0xa1,0xb4,0xb4,0xbf,0xae,0xab,0x9c,0xa6,0xc2 -,0xa2,0xa1,0x31,0x24,0x25,0x20,0x3e,0x1f,0x24,0x22,0x13,0x20,0x4a,0x3b,0x33,0x22,0x28,0x65,0x3c,0x4a,0x3a,0x30,0x75,0x9e,0xa6,0x34,0x3e,0x3d,0xc7,0xab,0xb0,0xa6 -,0xbb,0x2e,0xbf,0xb8,0x3c,0x1f,0x19,0x1e,0x2a,0x2a,0x1d,0x25,0x1b,0x1d,0xfb,0x5a,0x27,0x23,0x1c,0x29,0xd4,0x4f,0xd9,0x3e,0x61,0x9a,0x99,0x9b,0x9e,0xaa,0x9b,0xa1 -,0xa4,0x9c,0x9f,0xaa,0xa1,0x99,0xaa,0x42,0x22,0x21,0xba,0xa2,0x3a,0x5e,0x32,0x1e,0x4f,0x52,0xcb,0x3b,0x2b,0x2c,0x2f,0x3b,0x5b,0xe7,0xbe,0xa1,0x9b,0xaf,0x49,0x3e -,0x35,0xa4,0xad,0xa8,0xab,0x22,0x4b,0xbb,0x51,0xb5,0x2d,0x19,0x26,0x24,0x2e,0x24,0x1f,0x26,0x2d,0x29,0x1f,0x1e,0x16,0x1e,0xe4,0x6c,0x44,0x45,0x2b,0xbc,0xa2,0x9f -,0x9e,0xb7,0xd8,0xac,0x9f,0xa2,0xa2,0xb7,0xad,0xa2,0xba,0xb7,0xb2,0x2a,0x2c,0xcc,0x36,0x4b,0x30,0x2e,0xac,0xc3,0xbc,0xaf,0x2b,0x2b,0xdb,0xaf,0xa3,0xa3,0xb0,0xbc -,0x9f,0xa6,0xaf,0xa0,0xc5,0xad,0x9d,0xa5,0x99,0xaa,0xad,0x99,0xb2,0xb7,0xae,0x31,0x23,0x2e,0x2b,0x30,0x24,0x1b,0x2a,0x3e,0x3c,0x4d,0x2a,0x0f,0x1e,0x2c,0x38,0xb8 -,0x26,0x28,0xc8,0x65,0xbd,0xbb,0x3d,0xe8,0xb7,0xa6,0xac,0xbc,0x4a,0xca,0xbd,0x4e,0xce,0x1a,0x11,0x29,0x27,0x3c,0xc3,0x22,0x2d,0x3f,0x2e,0x48,0x38,0x20,0x25,0x39 -,0x53,0xad,0xb1,0xeb,0xa0,0x9d,0xab,0x9b,0xb0,0xb6,0xa6,0xa8,0x98,0xa7,0x35,0xae,0x98,0x9a,0x98,0xcd,0x1d,0x28,0x40,0xcc,0xb5,0x42,0x1e,0x4b,0x2e,0x27,0x33,0x18 -,0x2c,0x4c,0x34,0xae,0xbf,0x46,0xa8,0xaa,0x9d,0x99,0xbf,0x33,0xfd,0xd8,0xac,0xa3,0xc4,0x4b,0xb8,0x2f,0xe8,0xfb,0x0f,0x30,0x1e,0x19,0xc6,0x1a,0x1b,0x57,0x29,0xc9 -,0x42,0x1b,0x1c,0x2b,0x4f,0xb8,0xa6,0x20,0x2f,0xb6,0x4f,0x9a,0xad,0x2e,0xa9,0x4c,0xab,0x94,0xe5,0xbd,0x9f,0xcb,0xa5,0xb9,0x1b,0x1e,0x23,0x76,0xb8,0xc9,0x27,0x3e -,0x6a,0x2f,0x9d,0x35,0x19,0xbe,0x33,0xa3,0x99,0x3a,0xa9,0x9d,0xa4,0x95,0x9c,0x56,0xb2,0x9f,0xaf,0x9f,0xb1,0x22,0xaf,0xb9,0xbc,0xae,0x19,0x1c,0x2f,0x32,0xae,0xaa -,0x1e,0x22,0x3f,0x4f,0xa6,0x3d,0x14,0x2d,0x2b,0xd5,0xa2,0x24,0x29,0xae,0xaf,0xa9,0xa0,0x1e,0x24,0xc4,0x5c,0x98,0xbe,0x16,0xe5,0x44,0xcf,0xa3,0x1a,0x19,0x2b,0x2e -,0x73,0x4b,0x1b,0x1d,0xc3,0xa8,0xa1,0xec,0x14,0x24,0xbb,0xac,0x93,0xc9,0x32,0xa4,0xaa,0x97,0x9e,0x29,0x2a,0x3e,0xb3,0x91,0xa2,0x18,0x44,0xc9,0xe3,0x96,0x34,0x11 -,0x2f,0x45,0xca,0x9b,0x22,0x16,0xae,0xa9,0x92,0xb2,0x12,0x27,0x24,0xdd,0x98,0xc0,0x3d,0xac,0xa1,0xa4,0xa7,0x2b,0x1f,0xb4,0xcb,0x96,0x9f,0x15,0x2a,0x2b,0xaf,0x91 -,0x5a,0x1a,0x26,0x13,0x3a,0xa5,0x1d,0x27,0xbe,0xba,0x9e,0xc3,0x0b,0x15,0x23,0x3d,0x8c,0x97,0x1a,0x1a,0x23,0xb4,0x98,0xcb,0x4a,0xc6,0x3b,0xdc,0xb4,0xc7,0xa7,0x9d -,0x97,0x8b,0x30,0x06,0x14,0x17,0xa4,0x8e,0x3c,0x1e,0x23,0x24,0x8e,0x93,0x37,0x9f,0xf3,0x20,0x24,0x1f,0x1e,0xcc,0xa2,0x9b,0x90,0x21,0x1a,0xac,0xaf,0x8f,0x89,0xd0 -,0x10,0x0f,0x1c,0x97,0x98,0x46,0x2d,0x1a,0x2e,0x9b,0xae,0x6d,0x96,0x9c,0xa3,0x74,0x06,0x0c,0x2c,0x23,0x9d,0xb0,0x0e,0x31,0xbe,0x99,0x87,0x9a,0x20,0x1b,0x0c,0x15 -,0xab,0x25,0xb0,0xa8,0x6c,0x97,0x92,0xba,0xd3,0xaa,0xd7,0xc2,0x17,0x07,0x15,0x29,0x9c,0x8a,0x1a,0x1b,0x3b,0x56,0x90,0xa8,0xaf,0x2d,0x0d,0x16,0x56,0xba,0x35,0xa7 -,0xbc,0x22,0xa6,0xad,0x97,0x9d,0x9b,0x8c,0xae,0x0c,0x0b,0x1f,0x2b,0x8e,0xa1,0x12,0x2e,0xa8,0x9d,0x8c,0xa0,0xc3,0x27,0x04,0x0c,0x19,0x1f,0xd3,0xa4,0xa7,0x99,0xa9 -,0xb4,0x9b,0x99,0x91,0x95,0x1f,0x09,0x0e,0x18,0x97,0x87,0xce,0x1d,0x27,0x3b,0xab,0xd2,0xa4,0xa4,0x1e,0x0a,0x1b,0x29,0x2b,0x96,0xba,0x4f,0x3a,0x39,0x9a,0xae,0xa1 -,0x8f,0xaf,0x0d,0x0d,0x20,0x2c,0x90,0x91,0x75,0x3e,0x56,0x9f,0x96,0x96,0x96,0xe9,0x0c,0x0a,0x0f,0x10,0xa7,0x8f,0xc4,0xcd,0xcb,0xdc,0x3f,0x33,0x9c,0x94,0x19,0x07 -,0x29,0x47,0x99,0x88,0xa3,0xb5,0x42,0xba,0xa5,0xdb,0xa6,0x98,0xbf,0x1c,0x0f,0x0b,0x31,0xaa,0xba,0x2a,0x22,0x96,0x92,0xc2,0xbb,0x99,0x5a,0x14,0x09,0x11,0xb8,0xa3 -,0x95,0xa3,0x3a,0x51,0x8d,0x26,0x17,0x32,0x0d,0x0f,0x08,0x1c,0x98,0x8b,0x8f,0x8f,0x4f,0x2e,0x9f,0xa9,0x9c,0x9a,0xdb,0x15,0x09,0x0b,0x21,0x91,0x8a,0xa2,0x0d,0x0c -,0x98,0xa6,0x25,0x9a,0x8b,0xc8,0x1b,0x14,0x2b,0xa3,0x97,0xac,0x09,0x0a,0x8f,0x8f,0x48,0x99,0xa5,0x2e,0x0b,0x0e,0x0a,0x12,0x98,0x8a,0x8f,0x24,0xbb,0x90,0x94,0xa0 -,0x2b,0x0d,0x07,0x0a,0x16,0x9f,0x83,0x84,0x8c,0xb1,0xce,0x8f,0x35,0x1d,0x9f,0x9f,0xae,0x1f,0x0e,0x0f,0xb8,0x9b,0x36,0x0e,0x02,0x2a,0x2d,0x21,0x9f,0xb0,0x11,0x06 -,0x28,0xa9,0x9e,0x9b,0x92,0x8b,0xcc,0x97,0x80,0x8d,0x90,0x94,0xaa,0x11,0x00,0x08,0x0d,0xaf,0x98,0xa5,0x30,0x0d,0x8f,0xaf,0x0f,0x3f,0x2a,0x14,0x00,0x13,0xb4,0x9b -,0x84,0x8a,0xaa,0x19,0x65,0xa0,0xc5,0x92,0x96,0xc7,0x29,0xaf,0xa4,0x4e,0x9a,0x90,0xaa,0x05,0x0d,0xae,0x29,0x9a,0xad,0x1c,0x06,0x02,0x22,0x0e,0xad,0x8b,0x97,0x28 -,0x01,0x91,0x92,0xab,0x86,0x86,0x8e,0x0d,0x0f,0x41,0x9b,0x8e,0x8e,0x8c,0x16,0x13,0xc2,0x20,0xb6,0x41,0x19,0x04,0x05,0x29,0x15,0xcc,0x95,0x87,0xb2,0x13,0x9d,0xc3 -,0xab,0x8f,0x8b,0xcf,0x01,0x11,0x45,0xa7,0x8e,0x95,0xc9,0x06,0xb5,0x86,0x2d,0xe8,0x90,0x8d,0x18,0x0a,0x1d,0x27,0x9d,0x87,0x84,0xc8,0x09,0x1e,0xd1,0x4d,0x96,0x96 -,0x0d,0x00,0x11,0xee,0xa8,0xa4,0xab,0xae,0x07,0x28,0x89,0x9a,0x95,0xd0,0x93,0x3d,0x1b,0x36,0xbe,0x88,0x84,0x97,0x0d,0x00,0x49,0x9f,0x9d,0x87,0x8e,0xcf,0x00,0x0d -,0x29,0x25,0xae,0xb2,0x2e,0x08,0x10,0x8f,0x2f,0xca,0x8c,0x9f,0x19,0x08,0x28,0x1a,0xa6,0x81,0x80,0x9a,0x00,0x42,0x88,0x97,0x8f,0x8b,0x7c,0x00,0x0a,0x1b,0xda,0x9a -,0xcd,0xc8,0x18,0x02,0xc9,0x13,0x24,0x8e,0x8f,0xa6,0x00,0x17,0x20,0xa6,0x83,0x88,0x8e,0x08,0x0d,0x8c,0x8f,0x83,0x8e,0x90,0x76,0x0d,0x1e,0x09,0xef,0x94,0x96,0xa0 -,0x0c,0x52,0x3d,0x07,0xb8,0x93,0xe4,0x03,0x01,0x0f,0x3a,0x88,0x89,0x9b,0x1b,0x0c,0x8b,0x93,0xad,0x87,0x85,0x8e,0x1d,0x30,0x2b,0x1d,0x94,0x89,0x9b,0x07,0x07,0xb3 -,0x18,0x29,0xb4,0x99,0x1b,0x00,0x11,0x18,0x9f,0x93,0xab,0xa3,0x14,0x3f,0x8b,0xd5,0xa7,0x93,0x8b,0x11,0x08,0x1c,0x1e,0xa1,0x93,0x87,0xa9,0x08,0x79,0x9a,0xd9,0x8c -,0x8c,0x9d,0x07,0x13,0x2c,0x2d,0x90,0xc2,0x22,0x0c,0x09,0xac,0x41,0x1e,0x9a,0x8a,0x9b,0x05,0x0d,0x19,0x4b,0x8f,0x89,0x92,0x2f,0x10,0xac,0xb6,0x43,0x8b,0x9b,0x33 -,0x0a,0x28,0xab,0xb4,0x97,0x93,0x9c,0x1d,0x10,0x48,0x2c,0xbe,0x86,0x88,0x18,0x00,0x09,0x1a,0xc5,0xa4,0xbe,0x1f,0x0d,0x0a,0xb2,0x63,0xa9,0x87,0x8e,0xc6,0x15,0x5a -,0xad,0x9c,0x87,0x85,0x8d,0x1e,0x0e,0xa8,0x5d,0x6e,0x95,0x9b,0x12,0x02,0x08,0x19,0x27,0xdc,0xa0,0x2c,0x0e,0x04,0xbf,0xad,0xa6,0x87,0x84,0x9f,0x0e,0x4e,0x32,0xc7 -,0x8e,0x8b,0x9e,0x11,0x0f,0x97,0x8e,0xa1,0x97,0x95,0x2a,0x05,0x18,0x24,0x2e,0x9d,0x99,0xae,0x0c,0x02,0x14,0x1d,0x37,0x99,0x8e,0xa5,0x0c,0x0d,0x24,0xd4,0x8e,0x8a -,0x94,0x3f,0x1e,0x9c,0x8e,0xa3,0x8d,0x85,0x92,0x18,0x05,0x0e,0x10,0x69,0xaa,0x3b,0x17,0x09,0x12,0xc6,0xbe,0xae,0x92,0x8e,0x2f,0x16,0x20,0x23,0xad,0x9b,0x8b,0xad -,0x1d,0x14,0x38,0xab,0xaa,0x8d,0x8e,0x3a,0x0a,0x19,0x22,0xad,0x9a,0x8f,0x9b,0x20,0x12,0x36,0x9d,0x9f,0x95,0x96,0x3a,0x07,0x0f,0x14,0x24,0xb8,0x99,0x9c,0x15,0x09 -,0x12,0xb8,0xa1,0x97,0x87,0x91,0x25,0x15,0x16,0x22,0x61,0x90,0x8d,0xb0,0x1e,0x14,0x9f,0x94,0xa6,0x8e,0x91,0x2c,0x0c,0x0d,0x1f,0xaf,0x92,0x93,0x3a,0x11,0x0d,0x1f -,0x2d,0x11,0xed,0x97,0xaa,0x17,0x11,0x19,0x26,0x98,0x8e,0x8e,0x9f,0x16,0x31,0x8c,0x97,0x8c,0x89,0x87,0x28,0x07,0x15,0x0e,0x49,0xaa,0xa3,0x4b,0x08,0x02,0x1c,0x2f -,0xa6,0x98,0x99,0x26,0x05,0x14,0x21,0xa9,0x8c,0x86,0x8e,0xda,0x15,0x25,0xac,0x9e,0x8f,0x83,0x8c,0x17,0x0b,0x0e,0x21,0xa9,0x91,0x97,0x20,0x06,0x0c,0x2d,0xf7,0x9f -,0x9a,0xa4,0x17,0x04,0x08,0x17,0xb2,0x91,0x8c,0x9f,0x1b,0x1c,0xbc,0x9c,0x93,0x88,0x83,0x92,0x1c,0x14,0x1f,0x32,0x9a,0x98,0xce,0x19,0x04,0x0c,0x23,0x28,0x94,0x91 -,0xaa,0x0e,0x04,0x0d,0x20,0x8e,0x87,0x8c,0x9e,0x18,0x1b,0x3f,0x9c,0x90,0x90,0x8c,0x2e,0x0d,0x0f,0x19,0xc1,0x96,0x8e,0x98,0x1a,0x07,0x18,0xc0,0x9f,0x98,0x87,0x91 -,0x0c,0x08,0x0d,0x18,0xb1,0x95,0x92,0x3b,0x0a,0x17,0x59,0xa4,0x98,0x8e,0x8d,0x12,0x0a,0x14,0x29,0x97,0x8a,0x86,0xa0,0x0f,0x15,0x2f,0x34,0x57,0x93,0x8c,0x2b,0x12 -,0x19,0x21,0xd2,0x9b,0x8b,0x9f,0x1e,0x0e,0x15,0x5a,0xc5,0x96,0x8b,0xab,0x0c,0x02,0x0b,0x1f,0xa0,0x92,0x9e,0xb3,0x1c,0x1e,0xa9,0xa3,0x94,0x88,0x88,0xaf,0x0f,0x16 -,0x2b,0xa0,0x8f,0x8f,0x9e,0x0d,0x06,0x1a,0x25,0x31,0xa3,0x9b,0x29,0x07,0x0c,0x14,0x2e,0x98,0x8d,0x93,0x24,0x0c,0x27,0xa7,0x91,0x87,0x86,0x96,0x12,0x0f,0x1c,0xbf -,0x93,0x8e,0x8b,0x43,0x0b,0x12,0x3b,0x4c,0xbc,0x93,0xa2,0x14,0x05,0x08,0x15,0xcd,0x9e,0x8f,0xc1,0x0c,0x10,0x34,0xb6,0x90,0x88,0x89,0xf2,0x10,0x1c,0x4d,0x8f,0x89 -,0x87,0xa5,0x0f,0x0a,0x2e,0x52,0x3d,0xa1,0xa0,0x18,0x08,0x0e,0x0f,0xc1,0x9f,0xa3,0xb8,0x22,0x1b,0xbc,0x9b,0x9e,0x91,0x87,0xa8,0x24,0x23,0x1f,0xb7,0xaa,0x98,0xa0 -,0x2d,0x11,0x2b,0x38,0x44,0x9b,0x99,0x37,0x0e,0x12,0x20,0xcc,0xb2,0x9d,0xaa,0x3f,0x17,0x20,0xda,0xbb,0x9c,0x99,0xb2,0x1d,0x2b,0x32,0x5e,0xa1,0x99,0x9b,0xca,0x47 -,0x30,0xa8,0xb3,0xc7,0x98,0x5f,0x24,0x15,0x0f,0x17,0x2a,0xa7,0xb2,0x3d,0x1e,0x29,0xc3,0xad,0x92,0x8f,0xa6,0x37,0x2b,0x2e,0xa8,0x9c,0xa6,0xcf,0x13,0x1f,0x4c,0x2e -,0xc7,0xc8,0xbf,0x23,0x20,0x21,0x24,0xb2,0xaa,0x9b,0xa8,0x1f,0xa6,0x9d,0xb1,0x96,0x9f,0xa7,0x21,0x29,0x29,0x43,0xcf,0xd3,0xc6,0x1b,0x1b,0xb3,0xfb,0x1e,0xbf,0x9e -,0xaa,0x18,0x20,0x20,0xca,0x9d,0xb0,0xb5,0x1a,0x39,0x9d,0x9f,0x98,0xa1,0xad,0x1f,0x15,0x59,0xc0,0x98,0xa5,0xdd,0x2a,0x17,0xa3,0x97,0x9e,0xad,0xc0,0x2d,0x08,0x0b -,0x17,0xbe,0x90,0xa8,0x30,0x12,0x10,0xad,0x93,0x8f,0x95,0xa7,0x23,0x14,0xd3,0x9e,0x95,0x93,0x9e,0x21,0x0b,0x16,0x2e,0xa6,0x94,0x95,0x46,0x08,0x08,0x1a,0xa7,0x8c -,0x8c,0x78,0x0a,0x13,0xad,0x94,0x8d,0x8d,0x75,0x0e,0x12,0x12,0x29,0x9d,0xa3,0xa6,0x1e,0x1a,0xc6,0xde,0x9c,0x95,0x91,0x32,0x0e,0x15,0x1f,0x95,0x87,0x8e,0xc0,0x0e -,0x3d,0xb3,0xb7,0xa3,0x37,0x2a,0x16,0x1d,0x1e,0xf5,0xab,0x9e,0xca,0x1d,0x3c,0x48,0x3b,0xec,0xa2,0xb7,0x23,0x24,0x1d,0xe8,0x9c,0x9c,0xa4,0x11,0x1f,0x99,0x8c,0x8b -,0x99,0x47,0x0e,0x1b,0xab,0x9b,0x9d,0xc7,0x41,0x12,0x1d,0xb2,0xc8,0xa8,0xf9,0x1c,0x08,0x07,0x13,0xc8,0x8e,0x8f,0x9d,0x1d,0x2b,0xa0,0x95,0x89,0x90,0x75,0x08,0x0e -,0x30,0x9b,0x8b,0x91,0xb9,0x0f,0x1b,0x29,0x2e,0xbd,0xaf,0xcf,0x12,0x0f,0x17,0x21,0x96,0x8b,0x8e,0x34,0x21,0x1c,0x1b,0x97,0x89,0x95,0x16,0x16,0x1b,0x33,0xa1,0x9f -,0xab,0x2a,0xbd,0xa5,0x33,0xae,0xa3,0xce,0x1a,0x1f,0x21,0x18,0xbd,0xc0,0xc6,0x23,0xc8,0xa5,0xc9,0x9f,0x9e,0xe3,0x0e,0x12,0x2a,0x97,0x8d,0x94,0xb4,0x0f,0xc3,0x94 -,0x96,0x9d,0x35,0x0e,0x04,0x0f,0x31,0xa3,0x9c,0xa4,0x39,0x12,0x2d,0xb8,0xa9,0xa6,0x94,0xad,0x18,0x26,0x1f,0x9b,0x8b,0x8a,0xb8,0x0c,0x25,0x40,0xa2,0x9b,0xa2,0x24 -,0x0c,0x18,0x19,0x50,0xa8,0xaa,0x4b,0x2a,0xa3,0xa2,0xb2,0xa7,0xa6,0x23,0x19,0x1a,0x16,0x41,0x9a,0x8b,0xac,0x59,0xac,0xb7,0x99,0x93,0xa6,0x0f,0x0c,0x19,0xc0,0x99 -,0x9a,0xa1,0x11,0x1c,0xea,0xa9,0x9b,0xb9,0x2b,0x05,0x0f,0x23,0xba,0x8e,0x8e,0x92,0x3d,0x77,0xd6,0xb5,0x95,0x8e,0x9d,0x0f,0x0a,0x0c,0x36,0x9b,0x99,0xac,0x0f,0x1e -,0x3f,0xaf,0x9e,0x9a,0xa8,0x15,0x18,0x1b,0xb1,0x9a,0x9d,0x9d,0xb9,0x99,0xce,0xdc,0xbd,0xb1,0x3a,0x14,0x1c,0x0d,0x1f,0xb8,0x92,0xbd,0x43,0xa6,0x32,0xbd,0xc5,0xa5 -,0x20,0x1b,0x3a,0x2e,0xa3,0x9e,0x9e,0x32,0x3c,0x9b,0xa2,0x99,0xb3,0x1f,0x11,0x17,0x2a,0xdb,0x99,0x99,0xa6,0x18,0x4b,0xa8,0x5a,0xb7,0xa8,0xc1,0x09,0x0e,0x1b,0x2b -,0x9e,0x9b,0x9e,0x24,0x70,0x9b,0x9b,0x8d,0x95,0xb0,0x11,0x18,0x28,0xbd,0x9d,0xaf,0x64,0x12,0x40,0xaa,0xbc,0xc6,0x4f,0x1c,0x0b,0x18,0x24,0xb7,0x94,0x98,0xb8,0x2e -,0xa2,0x9b,0x99,0xa4,0xa2,0xd5,0x07,0x17,0x27,0xa9,0x94,0x9f,0x37,0x0b,0x55,0xa6,0x9f,0x9e,0xda,0x2d,0x0b,0x1a,0x30,0xb7,0x90,0x9e,0x35,0x17,0x4c,0xa0,0x9c,0x94 -,0x9c,0x5e,0x10,0x14,0x18,0x33,0x8e,0x8c,0x9f,0x16,0x1e,0xad,0xa6,0x97,0x9d,0xd4,0x0b,0x08,0x16,0x20,0x9e,0x99,0x97,0x26,0x12,0xab,0xd1,0xa1,0x92,0x90,0x39,0x0a -,0x1b,0x22,0x9b,0x8e,0x92,0x40,0x0a,0x22,0xf1,0x99,0x9b,0xa0,0x25,0x09,0x13,0x16,0xd5,0x98,0x9a,0xaf,0x1f,0xc5,0xa3,0xb1,0x94,0x9b,0xad,0x16,0x0f,0x1f,0x1f,0x95 -,0x94,0x9d,0x18,0x0e,0xd2,0x43,0x9c,0x9e,0xb0,0x15,0x0d,0x2a,0x40,0x9d,0x96,0x93,0x45,0x10,0x49,0xba,0xac,0x9e,0x9e,0x3a,0x0d,0x1b,0x28,0xae,0x8f,0x91,0xb2,0x0e -,0x24,0xa2,0xa9,0x97,0xac,0x33,0x0d,0x0f,0x44,0x4d,0xaa,0xb0,0xbf,0x2a,0x18,0xb6,0xa5,0xa0,0x93,0x9f,0x4d,0x16,0x1d,0x50,0xb5,0x95,0xa0,0xf8,0x15,0x19,0xab,0xb7 -,0xa2,0xb9,0x3a,0x20,0x1c,0x2d,0x4a,0x9c,0x9b,0x97,0xae,0x1a,0x3b,0xe4,0xaa,0x96,0x98,0xa5,0x1e,0x19,0x28,0x45,0xa6,0xa7,0x3f,0x17,0x14,0x55,0x48,0xa9,0xad,0xb3 -,0x5d,0x19,0x37,0x51,0xb5,0xb9,0xa1,0xa4,0x22,0x29,0xa9,0xad,0xa7,0x9d,0xa6,0x1f,0x0e,0x1b,0x34,0xa5,0x9f,0x9e,0xb1,0x12,0x1f,0xc4,0x3d,0xa7,0x9d,0xa7,0x1c,0x0e -,0x22,0x3d,0x9c,0x96,0x9c,0x37,0x12,0x3e,0xdb,0xac,0x99,0x9e,0xac,0x1f,0x1a,0x2a,0x4e,0xad,0xc3,0x5d,0x25,0x1b,0xc1,0xba,0xad,0xa2,0xa8,0x5f,0x1a,0x23,0x2f,0xaf -,0x99,0x99,0xa4,0x1d,0x24,0xb0,0xaf,0xa6,0x9e,0xb5,0x21,0x15,0x1b,0x27,0xba,0x9f,0xa7,0x4d,0x15,0x1a,0x61,0xd6,0xab,0x94,0x99,0x3a,0x1c,0x3d,0x4c,0xba,0x9c,0xae -,0xfe,0x1c,0x3c,0x9c,0xc1,0xa7,0x9e,0xa5,0x27,0x12,0x2a,0x18,0x25,0xac,0xba,0xd9,0x20,0x29,0xb9,0xc9,0xb0,0xa8,0xb7,0x28,0x16,0x2b,0xd3,0xa2,0x9a,0xa1,0xba,0x21 -,0x3f,0xa8,0xc4,0xa9,0xa1,0xb5,0x29,0x10,0x21,0x4a,0x48,0xb2,0xbe,0x2f,0x14,0x1f,0xb5,0xb9,0xa3,0x9e,0xa0,0x2f,0x16,0x28,0x45,0xf0,0xa9,0x9f,0x9d,0x59,0x2c,0xb0 -,0x54,0xc5,0x9c,0xa9,0x21,0x0f,0x16,0x23,0xc7,0x9d,0xa2,0xc7,0x20,0x25,0xcf,0xc0,0xbd,0xa2,0xab,0x53,0x20,0x25,0x5f,0x5d,0xa3,0x9d,0xad,0x25,0x17,0x3f,0xab,0xa5 -,0x92,0x95,0xc0,0x13,0x13,0x2e,0x2e,0xa6,0x9a,0xc6,0x25,0x14,0x27,0xa3,0xa8,0x98,0xa4,0x34,0x1a,0x10,0x2b,0xa6,0x94,0x95,0xa7,0x46,0x1e,0x31,0xa0,0xa8,0xac,0xae -,0xd3,0x35,0x17,0x2b,0x50,0x36,0x4d,0x5c,0x3a,0x26,0x2e,0xbc,0xb9,0xbd,0x9e,0x99,0xaa,0x24,0x2a,0x30,0x25,0xc1,0xb3,0xb4,0xd8,0x25,0xd0,0xbe,0x74,0xa3,0xa6,0xb7 -,0x21,0x17,0x21,0x2f,0xbb,0xa0,0x9c,0xad,0x35,0x3a,0x3c,0x3c,0xa1,0x9d,0x9e,0xb9,0x1a,0x19,0x1e,0x47,0x9d,0xa4,0xc4,0x2c,0x15,0x2b,0xad,0x97,0x95,0x99,0xc9,0x0f -,0x17,0x27,0x44,0xb0,0xad,0xc9,0x29,0x1c,0x74,0xa4,0xb2,0x9d,0xa5,0xca,0x22,0x1d,0x37,0x3f,0xba,0xa1,0xa0,0xc1,0x34,0x4a,0x46,0x3b,0xe4,0xf0,0xab,0xc0,0x1b,0x16 -,0x25,0x53,0xad,0xac,0xae,0x3c,0x2a,0xcd,0xa8,0x9c,0xa5,0x99,0xa9,0x25,0x1e,0x20,0xd0,0xc7,0xca,0xb5,0x3c,0x2c,0x47,0x70,0xd1,0xb4,0xa9,0xb3,0x26,0x1d,0x1f,0x38 -,0xb0,0xae,0xaa,0xbf,0x2e,0x27,0xda,0xbc,0xbd,0xa2,0xa8,0x33,0x23,0x30,0x44,0x55,0xb1,0xb5,0xd7,0x3c,0x28,0xce,0xae,0xb2,0xb9,0xc7,0xcd,0x36,0x2f,0x2d,0x42,0x4a -,0x35,0xb9,0xb6,0xbc,0xdd,0x61,0xf5,0xee,0xbe,0xad,0xaf,0x37,0x2b,0x37,0xbf,0xbc,0xab,0xbd,0x2f,0x38,0x45,0xd0,0xb7,0xb5,0xdd,0x3e,0x22,0x26,0x5f,0xb8,0xeb,0xd0 -,0xb6,0x50,0x4e,0xbf,0xbe,0x60,0xd4,0xaa,0xb8,0x38,0x2a,0x22,0x3a,0x49,0xde,0xb6,0xcb,0x37,0x2d,0xea,0xaf,0xa6,0xaa,0xd5,0x46,0x46,0x2f,0x48,0x57,0xda,0xa8,0xbb -,0x3a,0x33,0x42,0xb9,0xae,0xbc,0x4e,0x36,0x48,0x48,0xd8,0xd1,0x36,0x39,0x74,0xd8,0xcc,0xcc,0xeb,0x49,0xd2,0xbf,0xb3,0xb8,0x33,0x2d,0x4e,0xb8,0xbd,0xce,0x3c,0x3c -,0x49,0xb4,0xa4,0xbb,0x67,0x33,0x4b,0x36,0x2f,0x68,0xbc,0x3f,0x2d,0x69,0x53,0x6e,0xb9,0xee,0x3f,0x4f,0x54,0xcb,0xe6,0xc3,0xa6,0xb4,0x41,0x5c,0xc5,0xb6,0xcf,0x3a -,0x2c,0x3c,0xb9,0xc2,0x5e,0x34,0xe5,0xab,0xd1,0x39,0x36,0x33,0xd4,0x6c,0x46,0xc3,0x48,0x43,0x35,0x6e,0xa7,0xb6,0xae,0xcb,0x2d,0xdc,0xb6,0xb4,0xbf,0x5b,0xdd,0x40 -,0x3d,0x29,0x2e,0xbd,0xcd,0xce,0x44,0x2e,0x75,0xb9,0xbc,0xc3,0x5c,0x26,0x36,0xbc,0xbd,0xb1,0xc2,0x36,0x3b,0xb9,0xb9,0xc5,0x39,0x34,0xf6,0xbb,0xb4,0xc8,0xcf,0x49 -,0xdd,0xa9,0xbb,0x35,0x28,0x27,0x39,0xc1,0xaf,0xbf,0x58,0x5f,0x44,0x50,0xbb,0x54,0x59,0xb9,0x52,0x5f,0x6e,0x45,0x4d,0xb5,0xac,0xc8,0x67,0x28,0x28,0x38,0xe5,0xb1 -,0xd0,0xcb,0xbe,0x5e,0x6c,0x34,0x40,0x4c,0xba,0xaf,0x52,0x45,0x30,0x68,0xaf,0xae,0xbe,0x2a,0x1d,0x28,0x6f,0xa0,0xa3,0xa8,0xc4,0x31,0x2e,0xe7,0xb9,0x50,0xda,0x4b -,0x26,0x37,0x61,0xd6,0xa6,0x9c,0xa6,0x2e,0x1c,0x18,0x3f,0xa6,0xa6,0xb9,0x3a,0x40,0xc3,0xaf,0xb9,0xb7,0xbf,0x51,0x28,0x2c,0x3a,0x28,0x3e,0xa9,0xac,0xca,0x30,0x1e -,0x23,0xc3,0x99,0x95,0xb7,0x2c,0x2d,0x49,0xba,0xbc,0xf0,0x23,0x25,0x28,0x35,0xae,0x9f,0xa0,0xc6,0x49,0xef,0x38,0x2e,0x57,0xc9,0x67,0xec,0xf4,0x74,0xb7,0xa8,0xa1 -,0x75,0x2a,0x2d,0x2f,0xc4,0xca,0x32,0x2a,0x3c,0xa3,0x9a,0x9f,0x5f,0x1f,0x1e,0x28,0xda,0xb1,0xab,0x55,0x28,0x43,0x47,0xb5,0xa9,0xae,0xa9,0xa5,0x3b,0x17,0x1e,0x38 -,0xa8,0xb1,0x59,0x23,0x1c,0x7d,0xbf,0xa1,0x9a,0xba,0xbc,0x35,0x2f,0x3b,0x3c,0xb4,0x3b,0x20,0x2f,0xb1,0x9f,0xa3,0x9c,0xa3,0x3c,0x27,0x0e,0x1a,0xb4,0xa0,0xb3,0x25 -,0xb5,0xa1,0xa4,0x9a,0x9d,0xae,0x1c,0x0c,0x0d,0x1b,0xa7,0xac,0x1e,0x2f,0x99,0x8c,0x94,0xa8,0xbb,0x21,0x0e,0x17,0x61,0x57,0xc6,0x4d,0x3c,0xbc,0xaa,0x9f,0x9d,0x93 -,0x8c,0x2f,0x0d,0x0d,0x14,0x30,0xba,0x94,0x22,0x0c,0x28,0x9a,0x8f,0x9c,0x9c,0xba,0x28,0xc5,0x1b,0x2f,0x4d,0x34,0x1b,0x19,0x98,0xa9,0xaf,0xa3,0x8c,0x8f,0x2d,0x17 -,0x15,0xb5,0x93,0xba,0x26,0x17,0x1d,0x13,0xad,0x8f,0xab,0x1f,0x08,0x20,0x40,0x3f,0x9c,0x98,0x94,0x9e,0xb1,0xa8,0x4f,0x1d,0x20,0xb0,0x2e,0x21,0x27,0xc0,0x8c,0x9b -,0xb7,0x2c,0xd8,0x8f,0x3d,0x3d,0x1e,0x06,0x03,0x13,0x9c,0x99,0x8c,0x3c,0x33,0xa5,0x4c,0xa3,0xe5,0x85,0x9c,0x0d,0x15,0x14,0x1b,0x17,0x8d,0x8c,0x99,0xab,0x5a,0x93 -,0x2f,0xa1,0x4f,0x31,0xc5,0x0a,0x19,0x16,0x1e,0x11,0x7e,0x9d,0xac,0x9c,0x9c,0x8b,0xb5,0x27,0x3b,0x13,0x9b,0xab,0x2e,0x5c,0x17,0x10,0x27,0x88,0x87,0x8a,0xbb,0x1d -,0x40,0x15,0x19,0x27,0x21,0x98,0x13,0x02,0x09,0x02,0x1c,0x94,0x90,0x9d,0x2a,0x2b,0x8e,0x93,0x91,0x88,0x98,0x87,0x88,0x9c,0xe9,0x9c,0x10,0x0d,0x8c,0x15,0x90,0x84 -,0x98,0x8e,0xbe,0x0c,0x05,0x22,0x23,0x06,0x05,0x00,0x03,0x00,0x21,0x94,0x45,0xb3,0x13,0x1f,0x0f,0x09,0x20,0xae,0x83,0x96,0x2f,0x20,0x1b,0x1c,0x9c,0x82,0x8e,0x8e -,0x9b,0x96,0x8c,0x3b,0x99,0x8b,0x88,0x83,0x93,0x8f,0x8c,0x8e,0x16,0x90,0x82,0x81,0x3c,0x0b,0xd3,0x05,0x08,0x05,0x07,0xbb,0x1f,0x0d,0xa6,0x08,0x04,0x00,0x1e,0xb3 -,0x00,0x07,0x00,0x0c,0x02,0x13,0xbd,0x9d,0x84,0xb4,0x9e,0xac,0x92,0xaa,0x8e,0x83,0x85,0x85,0x9d,0x8d,0x88,0x94,0x90,0x96,0x88,0x80,0x8a,0x99,0x19,0x1f,0x0a,0x8a -,0x94,0x2b,0x1b,0x0c,0xa9,0x1d,0x1c,0x0b,0x08,0xa4,0x1a,0x0d,0x0c,0x00,0x00,0x04,0xa9,0xc0,0xd6,0x1d,0x07,0xbd,0x13,0x13,0xbc,0x9f,0x84,0x9a,0xa3,0x1b,0x13,0x09 -,0x99,0x80,0x83,0x81,0xa2,0x9b,0xbb,0x45,0x83,0x8e,0x8e,0x80,0x83,0x97,0x0e,0x11,0x1e,0x80,0x8e,0x9f,0x3f,0x10,0x0f,0x00,0x0a,0x0e,0x0a,0x19,0x09,0x03,0x00,0x07 -,0xf0,0x94,0x80,0x45,0x09,0x09,0x07,0x2c,0x06,0x10,0x1e,0xc1,0x80,0x8f,0x22,0x18,0x2c,0x94,0x81,0x88,0x89,0x8b,0x4b,0x4b,0x9f,0x98,0x5b,0x16,0x85,0x82,0x80,0x2f -,0x09,0x08,0x27,0x80,0x83,0x84,0x0e,0x04,0x0e,0x0e,0xbc,0x27,0xbb,0xa7,0x10,0xc4,0x04,0x01,0x00,0x03,0xac,0x87,0x3a,0x0a,0x15,0x04,0x09,0x27,0x85,0x8d,0x81,0x86 -,0x27,0x14,0x5f,0x0e,0x35,0x80,0x85,0x8b,0x09,0x00,0x9e,0x26,0x16,0x28,0x20,0x9e,0x8d,0x10,0x00,0x08,0x04,0x97,0x97,0x8e,0xbc,0x09,0x07,0x12,0x28,0x0b,0x29,0x8c -,0x8c,0x13,0x06,0x06,0x0a,0xab,0x84,0x80,0x8b,0x2e,0x14,0x2b,0x39,0x8e,0x84,0x93,0x84,0x9e,0x8f,0x27,0x1e,0xb1,0x95,0x80,0x8b,0x8d,0xa5,0x89,0x99,0xb7,0x96,0x85 -,0x89,0x8b,0x88,0x8b,0x15,0x00,0x0c,0xcc,0x80,0xbf,0x1a,0x0e,0x0e,0x02,0x09,0xaa,0x0c,0x1a,0x9e,0x2b,0x07,0x00,0x09,0x00,0x12,0x4a,0x19,0x29,0x01,0x05,0x00,0x03 -,0x0a,0x23,0x8c,0x87,0xae,0x00,0x05,0x05,0x21,0x89,0x80,0x81,0x8e,0x27,0x14,0x99,0x8f,0x80,0x81,0x81,0x90,0x8b,0x88,0x24,0xc8,0xbc,0x80,0x83,0x80,0x55,0x05,0xc9 -,0x91,0x22,0x1b,0x4e,0xbd,0xa9,0x00,0x09,0x00,0x13,0x08,0x1e,0x87,0x9e,0x19,0x00,0x0c,0x09,0x0f,0x94,0x92,0x99,0xa9,0x19,0xa9,0x15,0xa0,0x20,0xbf,0x80,0x83,0x80 -,0x8a,0xa7,0x0c,0x3d,0x86,0x82,0x80,0x86,0x82,0x3b,0x0e,0x87,0x52,0x90,0x84,0x82,0x9c,0x0b,0x08,0x04,0x0c,0x0a,0x4e,0x9a,0xb3,0x08,0x00,0x03,0x00,0x01,0x00,0xbd -,0x2b,0x00,0x03,0x00,0x05,0x00,0x0f,0x0c,0x2b,0x2b,0x05,0x03,0x09,0xd1,0x28,0x98,0x80,0x86,0x86,0x8a,0xad,0x89,0x8f,0x84,0x80,0x81,0x81,0x89,0x91,0x47,0x62,0xa7 -,0x8d,0x80,0x81,0x84,0x3a,0x1e,0x40,0x1b,0x9f,0x92,0x85,0x87,0xa5,0x0d,0x19,0x0b,0x12,0x92,0x80,0x8d,0x4e,0x18,0x00,0x08,0x04,0x0f,0x12,0x37,0x8e,0x24,0x07,0x00 -,0x03,0x03,0x10,0x94,0xa3,0xc9,0x09,0x04,0x06,0x07,0xe0,0x35,0xbb,0xc6,0x1a,0x16,0x06,0x10,0x65,0x91,0x86,0x86,0x99,0x18,0x10,0x27,0xa1,0x83,0x80,0x87,0x87,0x95 -,0x28,0x0d,0x16,0x16,0x9c,0x86,0x85,0x98,0x0c,0x0b,0x0e,0x04,0x0a,0xb3,0xa5,0x2f,0x1d,0x0b,0x03,0x06,0x02,0x11,0x93,0x89,0x9e,0x1f,0x09,0x03,0x55,0xb9,0x8f,0x81 -,0x89,0x86,0x89,0x9d,0x3f,0xa6,0x89,0x80,0x82,0x80,0x8f,0xa7,0xda,0x9a,0x85,0x82,0x89,0x9f,0x8e,0x9c,0x95,0xaf,0xd4,0xa9,0x99,0x83,0xb2,0x0e,0x03,0x00,0x03,0x30 -,0x8c,0x1d,0x07,0x0d,0x07,0x00,0x02,0x00,0x04,0x00,0x12,0x2e,0x0d,0x07,0x00,0x02,0x0b,0x11,0x18,0x2a,0x14,0x2b,0x0f,0x09,0x19,0x5d,0xa9,0x84,0x82,0x81,0x8c,0x17 -,0xdb,0x8b,0x81,0x80,0x84,0x84,0x83,0x81,0x90,0x38,0xba,0xa4,0x89,0x80,0x80,0xa5,0x1b,0x13,0x23,0x98,0xb8,0x18,0xe6,0x2c,0x1a,0x17,0x2b,0x0b,0x0e,0x8e,0x91,0x9e -,0x17,0x04,0x00,0x0a,0x28,0xa0,0x97,0xca,0xc5,0xad,0x1f,0x16,0x0c,0x08,0x3d,0x8e,0x8c,0xce,0x1b,0x0c,0x0d,0x12,0xb8,0x8f,0x96,0xa3,0x36,0x13,0x07,0x0f,0x11,0x2c -,0x8b,0x8f,0xc7,0x1d,0x06,0x15,0x19,0xa4,0x86,0x95,0x9a,0xb2,0x46,0x0d,0x0a,0x0e,0x56,0x95,0x8c,0x99,0x1a,0x17,0x0a,0x1c,0xa1,0xa1,0x30,0xc2,0x68,0x0d,0x11,0x1b -,0x4c,0x37,0x87,0x81,0x8c,0x24,0x05,0x13,0xf2,0x8e,0x87,0x87,0x90,0x87,0x9f,0x2e,0x13,0x2f,0x90,0x80,0x82,0x8b,0xa7,0x26,0x9f,0xb0,0x8a,0x86,0x86,0x83,0x8a,0x9c -,0x34,0x12,0x27,0xa8,0x96,0x85,0x93,0x24,0x02,0x03,0x04,0x0d,0x68,0x2a,0x2e,0x20,0x10,0x03,0x00,0x02,0x00,0x0c,0x2f,0x13,0x08,0x00,0x06,0x06,0x2b,0x23,0x12,0x44 -,0x11,0x17,0x06,0x10,0xdd,0xa8,0x82,0x83,0x81,0x9a,0x17,0x9e,0xa1,0x8c,0x80,0x85,0x81,0x85,0x94,0x9e,0xc4,0x32,0x8f,0x80,0x84,0x86,0x49,0x07,0x1c,0x1a,0x2f,0x99 -,0xab,0x74,0x46,0xe2,0x0d,0x02,0x0f,0x2f,0x82,0x82,0x85,0x2e,0x09,0x1d,0x13,0x94,0x90,0x8e,0x82,0x84,0x8d,0x19,0x04,0x0d,0xd6,0x85,0x8b,0x31,0x0c,0x0e,0x0c,0x12 -,0x25,0x27,0x2d,0x13,0x18,0x03,0x00,0x00,0x02,0x78,0x9c,0xc5,0x0f,0x00,0x0c,0x1e,0x22,0x94,0x8e,0x8e,0x90,0x99,0x38,0x0d,0x0c,0x9a,0x80,0x86,0x8f,0x16,0x04,0x12 -,0x2a,0x4b,0xaa,0x8b,0x8c,0x95,0xd4,0x06,0x06,0x15,0x8a,0x82,0x89,0x9b,0x1e,0xbe,0x39,0xa9,0xc6,0xa0,0x93,0x8d,0x8e,0x21,0x18,0x68,0x8a,0x87,0x83,0x9d,0x1b,0x37 -,0xa4,0xb9,0x9a,0x93,0x8c,0x85,0x8b,0x9d,0x1d,0x2e,0x89,0x8d,0x9a,0xa8,0x24,0x39,0x67,0x93,0x4b,0x9f,0x34,0xae,0xc7,0x04,0x03,0x06,0x28,0xa3,0x1f,0x01,0x02,0x03 -,0x01,0x0c,0x18,0x02,0x14,0x0e,0x13,0x0b,0x03,0x08,0xae,0x8e,0x3d,0x19,0x00,0x0f,0x25,0xb2,0x8e,0xac,0xa1,0x98,0xd6,0x0d,0x0c,0x1e,0x8e,0x80,0x88,0x9d,0x35,0x39 -,0x97,0x84,0x89,0x84,0x82,0x88,0x96,0x0e,0x06,0x5f,0x80,0x83,0x80,0xa8,0x13,0xb4,0x19,0x3f,0x9d,0x9e,0x85,0x88,0x1d,0x08,0x04,0x1e,0x81,0x86,0x9d,0x37,0x11,0x17 -,0x2b,0x1c,0x22,0x9a,0x8d,0xa1,0x13,0x07,0x00,0x3a,0x9c,0xaf,0x29,0x01,0x29,0x1f,0x18,0x20,0x07,0x0e,0x33,0x08,0x00,0x04,0x02,0x8f,0x8b,0xbb,0x21,0x0e,0x28,0x96 -,0xaa,0x10,0xef,0xc9,0x9b,0x9e,0x14,0x11,0x8d,0x82,0x88,0xae,0x00,0x12,0x2b,0x98,0x8b,0xaa,0x99,0x87,0x92,0x1b,0x0f,0x19,0x86,0x80,0x83,0xbb,0x09,0x17,0xa6,0x87 -,0xab,0x90,0x9c,0x2e,0x11,0x02,0x02,0xaa,0x80,0x81,0x85,0x11,0x17,0x61,0xb4,0x97,0x8e,0x88,0x83,0x85,0xad,0x2c,0x9c,0x82,0x80,0x85,0x1e,0x14,0x22,0x20,0xa9,0x13 -,0xcb,0x8c,0xa5,0x18,0x07,0x00,0x1b,0xaf,0x10,0x07,0x00,0x06,0x15,0x2e,0x07,0x08,0x09,0x0b,0x07,0x01,0x00,0x0e,0xa5,0xa2,0xc9,0x00,0x0d,0x18,0x1d,0x32,0x12,0x19 -,0x59,0x24,0x0d,0x0b,0xb3,0x81,0x81,0x86,0x23,0x36,0x47,0x9c,0x87,0x8d,0x82,0x80,0x84,0x95,0x0f,0x16,0x82,0x83,0x84,0x38,0x09,0x23,0xa9,0x95,0x9e,0x89,0x8b,0x89 -,0xe0,0x04,0x06,0x90,0x82,0x80,0x8e,0x25,0xa3,0xc4,0xaa,0x39,0x10,0x26,0xa5,0x14,0x07,0x04,0x39,0x8b,0x95,0x15,0x00,0x07,0x0c,0x56,0x13,0x0b,0x15,0x24,0x15,0x0d -,0x00,0x1d,0x8b,0x9b,0x34,0x03,0x07,0x0f,0xaf,0xb2,0xaa,0x96,0x98,0xd8,0x0c,0x00,0x17,0x8e,0x8e,0x8d,0x19,0x1d,0xc6,0xf2,0x19,0x11,0x3a,0x8f,0x8f,0x4a,0x0b,0x2d -,0x83,0x83,0x82,0x36,0x4c,0xbb,0xa0,0x9b,0xc3,0xa6,0x8b,0x8d,0xaf,0x1c,0x1b,0x8e,0x8f,0x9c,0x08,0x0e,0x0f,0x21,0xab,0x3b,0x8d,0x82,0x8b,0xa0,0x20,0x3c,0x80,0x83 -,0x87,0x43,0x46,0x9a,0x86,0x8c,0x39,0x9f,0xa0,0x9b,0x37,0x06,0x0d,0x8d,0x92,0x92,0x0e,0x00,0x0d,0x12,0x1a,0x11,0x1c,0x28,0x54,0x08,0x01,0x03,0x58,0x9d,0x9f,0x0a -,0x02,0x0e,0x0a,0x24,0x0f,0x31,0x8c,0x87,0x31,0x0d,0x00,0xc4,0x88,0x89,0xb2,0x2c,0x99,0x90,0x84,0x4f,0x3e,0xa4,0x9a,0xa1,0x78,0x0a,0x95,0x8c,0x9c,0xa7,0x0f,0xb5 -,0x99,0x91,0x28,0x25,0x13,0x25,0x1b,0x0e,0x14,0x8d,0x87,0x8d,0xb5,0x03,0xca,0xb6,0x91,0x98,0x9f,0x96,0x88,0xb3,0x16,0x0a,0x30,0x85,0x84,0x92,0x0f,0x28,0x0d,0xe3 -,0x3e,0x43,0x8e,0x8b,0xaf,0x1c,0x05,0x16,0x88,0x99,0xa0,0x0f,0x20,0x34,0xa8,0x17,0x14,0xe1,0xab,0x9c,0x1d,0x06,0x26,0x88,0xa2,0xb5,0x00,0x10,0xa4,0x94,0x9e,0x27 -,0x1e,0xb0,0x9e,0x10,0x09,0x08,0x9a,0x91,0x9b,0x07,0x09,0x0f,0x1e,0x9a,0x28,0xa7,0x94,0xb2,0x0e,0x08,0x02,0x8e,0x84,0x87,0xad,0x19,0x62,0x9d,0x8d,0x2d,0x98,0x97 -,0x8e,0xc1,0x07,0x03,0x90,0x85,0x84,0x99,0x12,0x9b,0xa0,0x99,0x3c,0x33,0x6b,0x8b,0xa4,0x1e,0x14,0x98,0x82,0x82,0x8e,0x27,0x92,0xeb,0x8f,0x92,0x9a,0x87,0x85,0xab -,0x2f,0x0d,0xca,0x82,0x9b,0x40,0x02,0x0a,0x09,0x2b,0x0b,0x0d,0xe6,0xd1,0x26,0x08,0x00,0x1a,0x85,0x97,0x90,0x10,0x28,0x96,0x99,0x26,0x11,0x2f,0x98,0x9d,0x05,0x01 -,0x02,0x22,0x19,0x1f,0x02,0x0f,0x17,0x0c,0x1a,0x05,0x10,0xce,0xdb,0x0e,0x09,0x02,0x9e,0x91,0x97,0x37,0x5d,0x98,0x90,0x85,0xa8,0x8c,0x89,0x8a,0x97,0x2f,0x30,0x81 -,0x81,0x80,0x8b,0xcd,0x86,0x86,0x8a,0xba,0xa3,0x96,0x86,0x9a,0x14,0x0b,0x99,0x82,0x81,0x9b,0x04,0x2d,0x14,0x2f,0x0c,0x06,0x3a,0x97,0x26,0x0a,0x02,0x0c,0xb2,0x20 -,0x1e,0x02,0x0f,0x0c,0xc4,0x43,0x20,0x92,0x8a,0x87,0x89,0xb9,0xba,0x86,0xab,0x92,0x15,0x1b,0xd5,0xae,0x29,0x07,0x08,0x0c,0x1d,0x04,0x01,0x02,0x5f,0xaa,0xa4,0x07 -,0x08,0x2d,0xb4,0x93,0x1b,0x17,0x50,0xa1,0x2d,0x15,0x0c,0x8c,0x82,0x82,0xbc,0x0e,0x2c,0xbe,0x89,0xe4,0x9e,0x8f,0x8a,0x8f,0xcc,0x11,0x92,0x82,0x85,0x89,0x23,0xac -,0xaf,0x93,0xaa,0xa6,0x97,0x88,0x89,0xa9,0x21,0xb0,0x87,0x8d,0x99,0x08,0x26,0x1a,0x39,0x1c,0x07,0x0c,0x0e,0x1b,0x19,0x0d,0x06,0x44,0x1c,0x49,0x0f,0x25,0xa3,0x8c -,0x84,0x8e,0x86,0x88,0x85,0x8c,0xa8,0x2b,0x88,0x90,0x9a,0x0f,0x00,0x0f,0x19,0xca,0x11,0x10,0x10,0x12,0x01,0x01,0x00,0x0f,0x9a,0x92,0x35,0x00,0x06,0x09,0xcc,0x39 -,0x1b,0x1f,0xd8,0x33,0x1f,0x0c,0x26,0x84,0x86,0x80,0xad,0xac,0xaa,0xa4,0xae,0x4b,0x8d,0x85,0x81,0x8c,0x2e,0x18,0x8c,0x87,0x84,0x50,0x18,0xbd,0xa7,0x94,0x32,0x22 -,0x47,0x94,0xa4,0xb8,0x08,0x17,0xb0,0xaa,0x33,0x07,0x1a,0x22,0x98,0x49,0x1e,0x2d,0xa7,0x94,0x9d,0x1f,0x51,0x86,0x83,0x82,0xaf,0xb7,0x9f,0x8a,0x89,0x98,0x9e,0x99 -,0xab,0x08,0x02,0x00,0x1d,0xe0,0x32,0x0a,0x00,0x04,0x0a,0x1c,0x08,0x12,0x21,0xaa,0x24,0x0b,0x00,0x0f,0x9c,0x8d,0x8d,0x1e,0x27,0x17,0x3b,0x16,0x25,0xb2,0x8d,0x8a -,0xbf,0x16,0x10,0x8c,0x88,0x84,0xe5,0x4d,0xb4,0x9e,0x9c,0x34,0x9c,0x8e,0x82,0x8c,0xbc,0x0e,0x97,0x8a,0x89,0xb0,0x12,0xa3,0x92,0x87,0x40,0x1e,0x3f,0x89,0x96,0x10 -,0x00,0x06,0xaf,0x93,0xa7,0x03,0x04,0x0d,0xa6,0xa4,0xfe,0xac,0x8b,0x86,0x9f,0x24,0x50,0x81,0x82,0x80,0x96,0xac,0xb8,0xa8,0xa7,0x19,0x21,0x7a,0x99,0x19,0x05,0x00 -,0x07,0x1f,0xc3,0x1d,0x02,0x06,0x09,0x13,0x06,0x05,0x0e,0xa6,0x9b,0x18,0x00,0x02,0x9f,0x86,0x83,0x4b,0x1e,0xdc,0x99,0x8c,0xbb,0xb0,0x90,0x85,0x8a,0x4e,0x0a,0x9f -,0x83,0x82,0x91,0x17,0x23,0xb7,0x95,0xe6,0x2f,0xa7,0x8a,0x93,0x1c,0x00,0x0d,0x8f,0x8b,0x8b,0x14,0x10,0x16,0x1d,0x2f,0x17,0xc7,0xa2,0x9e,0x11,0x03,0x02,0xa3,0x81 -,0x80,0x8a,0xd5,0xa1,0x93,0x81,0x89,0x8d,0x88,0x83,0x84,0x9f,0x06,0x0b,0xb3,0x97,0x93,0x07,0x03,0x01,0x05,0x09,0x06,0x0c,0x1b,0x37,0x0b,0x03,0x00,0x3e,0x94,0x8b -,0x55,0x08,0x12,0x16,0xcd,0x1e,0x1f,0x33,0xa3,0xf7,0x12,0x01,0x17,0x8e,0x84,0x8d,0x16,0x0e,0x10,0xa7,0x99,0xa7,0x9a,0x91,0x8b,0x93,0x27,0x1b,0x8d,0x85,0x80,0x8d -,0x37,0x13,0x1e,0x8d,0x8a,0x8e,0x9f,0xa6,0xb0,0x1a,0x03,0x0e,0xb5,0x8a,0x8e,0x0d,0x05,0x01,0x1c,0xb7,0x3f,0x56,0xab,0x94,0xa1,0x1d,0x20,0x87,0x81,0x80,0x89,0x97 -,0xa6,0x95,0x83,0x8e,0x8f,0x9b,0x92,0xa3,0x0e,0x00,0x0b,0x24,0x9d,0x4b,0x00,0x03,0x00,0x16,0x1f,0x16,0x0b,0x08,0x10,0x0b,0x03,0x02,0x1c,0xb1,0x89,0x1b,0x0b,0x07 -,0x2b,0x88,0x95,0x98,0xbc,0x99,0x94,0x9f,0x2b,0x95,0x87,0x81,0x8b,0x34,0x19,0x1e,0x8b,0x98,0xb2,0x3e,0xa5,0x8e,0xbf,0x08,0x0b,0x92,0x83,0x81,0x2c,0x0b,0x09,0xbd -,0x89,0x9d,0xb0,0x26,0xac,0x4f,0x0f,0x03,0x1c,0xaf,0x8d,0x9d,0x17,0x16,0x14,0x90,0x8e,0x8d,0x8f,0x8b,0x85,0x8d,0xb1,0xd2,0x8c,0x87,0x82,0xa5,0x24,0x0c,0x18,0x27 -,0x0c,0x0f,0x07,0x0f,0x0b,0x02,0x00,0x0c,0x22,0x93,0xf3,0x04,0x0a,0x0c,0xaa,0x47,0x1a,0x11,0x1e,0x54,0x36,0x0f,0x0e,0xa4,0x8e,0x84,0xcd,0x1e,0x10,0x3d,0x95,0x59 -,0xab,0xef,0xa6,0x9a,0x4e,0x19,0xad,0x90,0x84,0x83,0x9f,0x36,0x13,0xa2,0x8c,0x87,0x8c,0x96,0xb1,0x21,0x1c,0x2f,0x9f,0xa2,0x98,0x16,0x0c,0x05,0x0d,0x33,0x0f,0x16 -,0x11,0x30,0x74,0x1b,0x0a,0x45,0x8a,0x83,0x80,0x8b,0x8e,0x90,0x84,0x83,0x83,0x88,0x94,0x98,0x48,0x0d,0x07,0x15,0x33,0x9a,0x13,0x01,0x02,0x01,0x0d,0x0d,0x0d,0x09 -,0x09,0x0b,0x0d,0x06,0x0f,0x4e,0x9b,0x8e,0x51,0x1b,0x0b,0x19,0xd9,0xb9,0x9b,0xac,0xa5,0xc3,0x21,0x19,0xac,0x8d,0x82,0x8a,0x34,0x25,0x18,0x95,0x8d,0x90,0x93,0xa1 -,0x94,0xb1,0x26,0x1d,0x93,0x88,0x87,0xa7,0x21,0x27,0x3b,0x9d,0xed,0xae,0x54,0xaa,0xc6,0x16,0x09,0x11,0xbd,0x99,0x8d,0x1f,0x19,0x0b,0x23,0x9e,0x95,0x89,0x99,0x8e -,0x99,0x96,0xa1,0x8c,0x86,0x82,0x86,0xa3,0xa9,0x14,0x2d,0x19,0x1e,0x1f,0x0c,0x07,0x01,0x03,0x06,0x36,0xbf,0xa4,0x16,0x0b,0x10,0x08,0x19,0x0d,0x21,0x2c,0x23,0x20 -,0x0c,0x04,0x14,0x93,0x8b,0x87,0xc0,0x23,0x15,0x26,0x9e,0x99,0x8a,0x9a,0x8f,0xbe,0x38,0x24,0x70,0x8f,0x8d,0x89,0xab,0xae,0x23,0x52,0xad,0x9e,0x8a,0x95,0x8d,0xa6 -,0x38,0x26,0xb9,0x8e,0x8e,0x8c,0xa1,0xa5,0x25,0x25,0xe3,0x9f,0x96,0x34,0x1a,0x07,0x0c,0x0a,0x1a,0x29,0x2e,0xab,0xad,0xa9,0x20,0x24,0x1c,0xc6,0xaf,0xbe,0x5e,0x16 -,0x1a,0x1e,0x9f,0x98,0x8f,0x9a,0x4d,0x28,0x0b,0x13,0x16,0x29,0x3c,0x1f,0x16,0x17,0x1f,0x18,0xa8,0xaa,0x9d,0xa7,0x21,0x1e,0x11,0xcb,0x9c,0x8a,0x92,0xd4,0x4d,0x1f -,0x40,0x20,0xc2,0xb8,0x98,0x99,0x30,0x2f,0x0e,0xad,0x95,0x8c,0x95,0x30,0x5d,0x4b,0x99,0xb7,0x9d,0x91,0x8b,0x83,0x8d,0x95,0x2d,0xc1,0x96,0x95,0x8f,0xac,0xb1,0x1c -,0x1b,0x0e,0x0f,0x54,0xb3,0x9e,0x21,0x20,0x10,0x17,0x1d,0x14,0x2e,0x12,0x43,0x25,0x1e,0x17,0x09,0xb4,0xc0,0x95,0xa5,0xab,0xe1,0x19,0x1f,0x09,0x13,0x15,0xec,0x98 -,0xa7,0x9a,0x1f,0x34,0xc6,0xac,0x94,0x63,0xaa,0x1a,0x2c,0x19,0x1f,0x9d,0x9b,0x93,0x39,0x2b,0x1a,0x0d,0x2e,0x1f,0xba,0xd3,0x65,0xad,0x25,0xaf,0x33,0x98,0x8d,0x8e -,0x8c,0x9a,0xa5,0x71,0x3b,0x94,0x8a,0x81,0x8b,0x90,0xaa,0x4a,0x98,0x96,0x8d,0x9a,0xa3,0x39,0x1c,0x24,0x13,0x1b,0xaa,0x8f,0x8c,0x52,0xee,0x0a,0x19,0x2a,0x24,0x38 -,0x15,0x1a,0x09,0x0c,0x53,0xb5,0x00,0x37,0x87,0x56,0x15,0x07,0x02,0x00,0x02,0x04,0x0f,0x21,0x00,0x16,0x0e,0x00,0x0d,0x07,0x18,0x0e,0x1d,0x17,0x13,0x08,0x0a,0x18 -,0x0e,0x13,0x09,0x0d,0x1d,0x95,0x8f,0xa1,0xad,0x99,0x80,0x82,0x8a,0x88,0x84,0x80,0x80,0x80,0x81,0x81,0x83,0x84,0x83,0x84,0x87,0x84,0x80,0x80,0x80,0x83,0x86,0x94 -,0x8f,0x8c,0x89,0x87,0x95,0xb5,0x1c,0x1a,0x0b,0x05,0x0b,0x0e,0x12,0x21,0x0b,0x08,0x05,0x04,0x09,0x04,0x09,0x02,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x05,0x05 -,0x02,0x00,0x00,0x02,0x01,0x03,0x05,0x07,0x04,0x23,0xac,0x3f,0x21,0x2a,0x9b,0x8f,0x91,0x96,0x9d,0x9b,0x8e,0x8c,0x8e,0x92,0x8d,0x96,0x91,0x85,0x83,0x81,0x80,0x80 -,0x80,0x80,0x81,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x83,0x88,0x8a,0x84,0x83,0x80,0x80,0x80,0x8a,0xa2,0x9e,0xac,0x8d,0x87,0x8a,0x9b,0x2e,0x3f,0x23,0x0d -,0x1e,0x28,0xde,0xa5,0x2e,0x1e,0x09,0x0e,0x11,0x15,0x16,0x0a,0x03,0x00,0x01,0x01,0x00,0x00,0x01,0x00,0x02,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x04 -,0x0a,0x07,0x07,0x07,0x09,0x21,0x1f,0x1c,0x0d,0x07,0x0a,0x0f,0x1e,0x13,0x08,0x04,0x02,0x06,0x0a,0x1f,0xa6,0xa5,0x94,0x9e,0xad,0x29,0x20,0xa0,0x8a,0x80,0x81,0x80 -,0x84,0x8b,0x87,0x8c,0x8c,0x82,0x83,0x80,0x80,0x80,0x81,0x87,0x86,0x86,0x83,0x81,0x81,0x81,0x85,0x85,0x89,0x94,0x87,0x83,0x83,0x83,0x85,0x82,0x8d,0x8f,0x89,0x86 -,0x84,0x8c,0x9c,0x20,0x12,0x1c,0x12,0x3a,0x39,0x6a,0x2c,0x0f,0x1a,0x0d,0x10,0x17,0x2e,0xbb,0x2a,0x21,0x1b,0x2d,0x99,0x9a,0x8b,0x88,0x86,0x85,0x8d,0x89,0x9b,0x95 -,0x8e,0x8d,0x89,0x96,0xa9,0x2e,0x1a,0x1e,0x0f,0x3d,0x97,0x8c,0x85,0x9b,0xae,0x14,0x0f,0x17,0x1b,0xc7,0xd0,0xe8,0x1b,0x05,0x03,0x00,0x02,0x07,0x0a,0x0d,0x03,0x02 -,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x04,0x02,0x05,0x02,0x01,0x01,0x01,0x08,0x0b,0x18,0x16,0x09,0x08,0x00,0x02,0x00,0x04,0x12,0x16,0x25 -,0x0b,0x04,0x04,0x03,0x0e,0x0f,0x1f,0x30,0x1f,0x2d,0x29,0xb5,0x99,0x89,0x80,0x81,0x80,0x81,0x80,0x82,0x83,0x80,0x80,0x80,0x80,0x80,0x81,0x85,0x85,0x86,0x89,0x82 -,0x81,0x80,0x80,0x80,0x84,0x90,0x8a,0x87,0x85,0x80,0x82,0x80,0x84,0x84,0x89,0x93,0x85,0x84,0x80,0x84,0x8a,0x8b,0x8c,0x82,0x81,0x81,0x81,0x86,0x87,0x8d,0x9a,0x9e -,0xa7,0x88,0x86,0x84,0x8e,0x36,0x18,0x03,0x09,0x0b,0x0e,0x16,0x09,0x06,0x02,0x00,0x00,0x00,0x01,0x01,0x04,0x04,0x01,0x01,0x00,0x00,0x00,0x01,0x02,0x01,0x00,0x01 -,0x00,0x01,0x00,0x05,0x09,0x1b,0x40,0x0f,0x0f,0x03,0x07,0x0e,0x11,0x3a,0x2e,0xc3,0xbd,0x16,0x0e,0x03,0x0d,0x44,0x94,0x83,0x8b,0x8a,0xaa,0xb4,0x98,0x9a,0x88,0x88 -,0x87,0x89,0x95,0x90,0x9a,0x8c,0x84,0x85,0x82,0x8b,0x8d,0xae,0xe1,0x96,0x8f,0x85,0x8a,0x96,0x9f,0x24,0x2a,0x11,0x1d,0xa5,0x9c,0x88,0xaa,0x44,0x17,0x0d,0xbf,0xb2 -,0x90,0x8e,0x98,0x8e,0xbe,0x45,0x10,0x10,0xb0,0xb0,0x8e,0xb1,0x2e,0x17,0x04,0x0b,0x09,0x16,0x28,0x16,0x14,0x04,0x01,0x01,0x02,0x15,0x2b,0x8f,0x92,0x9c,0xb2,0x16 -,0x4e,0x9f,0x8b,0x83,0x8b,0x8c,0xbe,0x20,0x11,0x07,0x46,0xc8,0x8f,0x97,0x3e,0x29,0x0b,0x21,0x26,0x2b,0xd3,0x1d,0x34,0x1d,0x20,0x32,0x25,0x8c,0x8b,0x84,0x8a,0x94 -,0x8f,0xa3,0x89,0x83,0x82,0x80,0x82,0x80,0x8a,0x91,0x92,0xa1,0x87,0x82,0x81,0x81,0x89,0x8e,0x24,0x1a,0x1f,0x20,0xa7,0x3f,0xdd,0x27,0x0b,0x0c,0x00,0x0a,0x0c,0x17 -,0x24,0x0a,0x09,0x01,0x03,0x07,0x08,0x19,0x0d,0x08,0x07,0x00,0x02,0x00,0x04,0x0a,0x28,0x9e,0x3e,0x3e,0x0f,0x13,0x58,0xb4,0x8b,0x8b,0x8e,0x91,0xdf,0xbf,0x17,0x45 -,0x99,0x94,0x88,0x9a,0x92,0x9f,0x9f,0x89,0x8b,0x84,0x8d,0xa2,0xa8,0x1f,0xb8,0x41,0x9e,0x84,0x87,0x80,0x8e,0x96,0x5c,0x1b,0xb6,0xb5,0x95,0x94,0xbd,0xac,0x1b,0x1c -,0x09,0x06,0x18,0x14,0xb4,0x26,0x1b,0x0f,0x07,0x18,0x17,0x2e,0x4f,0x1f,0x56,0x1e,0x23,0x14,0x0f,0xaf,0xb6,0x8e,0xa5,0x2b,0x18,0x07,0x16,0x16,0x24,0x6d,0x1c,0x1b -,0x09,0x05,0x05,0x01,0x14,0x16,0xa5,0xa0,0xa3,0x98,0xd1,0x95,0x8e,0x89,0x82,0x89,0x89,0x9a,0xa1,0xa3,0x2b,0x95,0x9a,0x8d,0x94,0x33,0x2d,0x0d,0x24,0x57,0x3e,0xad -,0x1a,0x1b,0x11,0x0b,0x0f,0x04,0x29,0xe6,0x91,0x8b,0x9a,0x92,0xcc,0x9e,0x93,0x91,0x86,0x8b,0x8a,0x8d,0x95,0x8d,0xa1,0x8c,0x8a,0x87,0x84,0x8e,0x8e,0x51,0x48,0xb3 -,0x7a,0x97,0xaf,0xd0,0x2c,0x0f,0x17,0x06,0x17,0x23,0x34,0xe2,0x0f,0x0e,0x04,0x06,0x0d,0x0a,0x16,0x0e,0x09,0x0a,0x01,0x04,0x00,0x03,0x05,0x0e,0x32,0x19,0x2c,0x18 -,0x1b,0xac,0xaf,0x8e,0x8e,0x93,0x90,0xcb,0xa3,0x3c,0xab,0x90,0x91,0x88,0x98,0x97,0xac,0xba,0x92,0x95,0x88,0x88,0x91,0x95,0x49,0xa7,0xd9,0xa2,0x8a,0x8d,0x83,0x8b -,0x88,0x92,0xa8,0x95,0xa9,0x97,0x9c,0x42,0xc7,0x1a,0x2c,0x12,0x0e,0x25,0x1c,0xb4,0x1f,0x1d,0x11,0x08,0x20,0x20,0xbe,0xab,0x25,0x33,0x0d,0x11,0x0c,0x0d,0xc0,0xbc -,0x90,0xb9,0x3e,0x1b,0x09,0x18,0x13,0x25,0x52,0x1b,0x1f,0x0a,0x08,0x05,0x03,0x0f,0x0f,0x4c,0x26,0x2e,0x6e,0x34,0x96,0x8e,0x87,0x84,0x8f,0x8f,0xb2,0xae,0xbe,0xbc -,0x8b,0x8e,0x86,0x9a,0xc9,0x28,0x0f,0x29,0x2c,0x56,0xa9,0x2e,0x35,0x16,0x18,0x18,0x14,0xb2,0xcf,0x94,0x9f,0x9f,0x96,0xa6,0x8d,0x8f,0x8e,0x89,0x95,0x91,0xa2,0x9e -,0xa1,0xaf,0x8a,0x8b,0x83,0x8a,0x91,0x9c,0x2f,0xac,0x9d,0x93,0x88,0x94,0x97,0x43,0x1d,0x15,0x0b,0x32,0x2b,0xab,0x2e,0x11,0x0f,0x04,0x0d,0x0f,0x13,0x1a,0x09,0x08 -,0x03,0x01,0x02,0x00,0x07,0x06,0x0f,0x0a,0x06,0x0b,0x07,0x1e,0x48,0xab,0x8e,0x99,0x8e,0x9b,0x9e,0xa5,0xc0,0x8d,0x91,0x88,0x8f,0x9a,0x98,0x5a,0x9d,0x9a,0x97,0x8d -,0xa0,0x9e,0xf3,0xce,0xbd,0x5a,0x8f,0x8f,0x86,0x8b,0x93,0x97,0xb4,0x90,0x89,0x88,0x84,0x8e,0x8f,0xa9,0xbf,0x2a,0x16,0xc0,0xed,0x9d,0x3f,0x1b,0x15,0x0a,0x1a,0x1d -,0x2b,0xc5,0x3a,0x4c,0x13,0x0c,0x08,0x07,0x1d,0x1f,0xad,0x2f,0x29,0x3d,0x1b,0x46,0x34,0xca,0xa6,0x44,0x3f,0x15,0x16,0x0f,0x09,0x15,0x0f,0x22,0x11,0x0d,0x0f,0x06 -,0x17,0x28,0xc3,0xa3,0xda,0xb3,0xc4,0xa3,0xa8,0xb1,0x92,0x92,0x87,0x8b,0x8e,0x90,0xb7,0x9e,0xa8,0x9b,0x92,0x9a,0x9c,0x43,0x2d,0x18,0x15,0x2d,0x28,0xae,0x31,0x22 -,0x28,0x10,0x3c,0xce,0x9a,0x8e,0x9c,0x9d,0x75,0xb7,0xce,0x65,0x9a,0x96,0x86,0x88,0x8c,0x8a,0x99,0x89,0x86,0x86,0x84,0x8e,0x8f,0x9c,0x9f,0xb9,0x21,0x26,0x18,0x24 -,0x1a,0x0c,0x0f,0x05,0x0c,0x0e,0x0f,0x1b,0x0f,0x0c,0x07,0x05,0x04,0x04,0x08,0x0a,0x0e,0x0e,0x08,0x0b,0x05,0x0a,0x0e,0x11,0x24,0x23,0x2f,0x38,0x50,0x66,0xd9,0xae -,0xa5,0x92,0x8d,0x91,0x91,0x9e,0x9d,0x96,0x94,0x8d,0x8e,0x8f,0x93,0x91,0x92,0x97,0x9a,0x9e,0x91,0x90,0x99,0x9e,0x3e,0x3f,0xae,0x9a,0x8d,0x8d,0x8f,0x92,0x94,0x9d -,0xae,0xb8,0xdb,0xaa,0xa7,0xc7,0xf6,0x1f,0x28,0x38,0x32,0x5f,0x4c,0x68,0xeb,0xe2,0x25,0x19,0x17,0x0e,0x1b,0x23,0x1a,0x13,0x09,0x08,0x0d,0x14,0x1e,0x29,0x27,0x28 -,0x58,0x39,0x29,0x24,0x17,0x20,0x2a,0x20,0x1e,0x13,0x0f,0x17,0x1d,0x1e,0x1e,0x22,0x2d,0xcf,0xad,0xa8,0xa5,0xb4,0xa6,0x9e,0x96,0x8d,0x92,0x95,0x98,0xa4,0xa4,0x9b -,0x97,0x93,0x8e,0x97,0xdb,0x29,0x26,0x48,0xa4,0x9f,0xbb,0x2d,0x2a,0x39,0x2f,0x3d,0x32,0x60,0xa0,0x9d,0xb5,0xb6,0xae,0xaa,0x8e,0x88,0x84,0x8f,0xa3,0x5c,0xcd,0x8c -,0x87,0x89,0x8d,0xa8,0x25,0x35,0xb6,0x3f,0x38,0x1b,0x16,0x43,0x2e,0x26,0x0f,0x10,0x0d,0x12,0x1d,0x2b,0x19,0x0c,0x0c,0x0a,0x23,0x2c,0x53,0x1d,0x16,0x11,0x18,0x1d -,0x34,0x3d,0x18,0x27,0xcc,0x8c,0x92,0xa5,0x24,0x13,0x1c,0x1f,0xd4,0x3a,0xeb,0xae,0xd1,0x4e,0xbf,0xa0,0xa5,0xa7,0xb5,0x25,0x2c,0x4a,0x3c,0x26,0x22,0x41,0xad,0x96 -,0xb3,0x1e,0x38,0xa4,0x92,0x89,0x8c,0x93,0xaf,0xc8,0xa8,0x9b,0x8f,0x97,0xaf,0x4c,0x27,0x31,0x9c,0x9c,0xab,0xe6,0x32,0x27,0xbd,0xa9,0x4e,0x33,0x2f,0x3a,0x56,0xb1 -,0x46,0x32,0x29,0x2d,0x49,0xae,0xbd,0xdc,0xb3,0xac,0xaa,0xb8,0xae,0x2f,0x15,0x11,0x15,0x35,0xa3,0xbc,0x28,0x15,0x12,0x20,0x43,0x33,0x1a,0x1b,0x1a,0x14,0x13,0x1b -,0x2c,0x43,0xd8,0x47,0x1f,0x26,0x25,0x2c,0x2c,0x46,0x9e,0x8f,0x8e,0xdb,0x2c,0x2f,0x3a,0xc2,0xc6,0x38,0x33,0x2e,0x29,0x3e,0xb0,0x9c,0x94,0x92,0xaa,0xdb,0xac,0x91 -,0x8e,0x93,0x9f,0xdd,0xa8,0x8f,0x8d,0x91,0x9a,0x9a,0x95,0x90,0x90,0x9b,0x91,0x92,0x9d,0x9f,0xaa,0x60,0x3f,0x31,0x1e,0x26,0x5f,0x36,0x1e,0x11,0x12,0x2a,0xd9,0x4e -,0x20,0x13,0x1f,0x4a,0x39,0x1a,0x0d,0x14,0x28,0xc5,0x33,0x1c,0x17,0x0e,0x13,0x31,0x9d,0x9c,0x35,0x14,0x09,0x0e,0xf8,0x8f,0x8d,0xc4,0x14,0x0d,0x24,0xa4,0xa2,0xa6 -,0xbb,0x6c,0x49,0x2b,0x2f,0x41,0xe9,0xbf,0xce,0xcc,0xb3,0xa6,0xb9,0xc1,0xa2,0x93,0x89,0x86,0x86,0x8d,0x9e,0x91,0x88,0x8a,0x9a,0xdf,0x44,0x32,0x2a,0x20,0x25,0x3e -,0x19,0x0c,0x0a,0x0d,0x0f,0x0a,0x08,0x02,0x01,0x05,0x0d,0x13,0x0c,0x0b,0x0d,0x0f,0x15,0x16,0x25,0xa8,0x98,0x8f,0x8f,0x93,0x96,0x97,0x95,0x97,0x90,0x8c,0x8d,0x97 -,0xb9,0xd0,0xa1,0x8d,0x87,0x8d,0x9f,0x47,0xd9,0xa6,0x9d,0x9a,0xa3,0xab,0xb7,0xb6,0xa7,0xa3,0x96,0x91,0x9d,0xb6,0xbb,0xa5,0xb4,0xd3,0x39,0x3e,0xbf,0xaf,0xb4,0x22 -,0x16,0x18,0x1c,0x22,0x2a,0x1d,0x19,0x15,0x11,0x17,0x1e,0x28,0x26,0x1e,0x15,0x18,0x25,0xc7,0xc7,0x24,0x16,0x17,0x3f,0x9d,0x9d,0xa9,0xa7,0xb7,0x51,0xd0,0xae,0xab -,0xa5,0xc4,0x33,0xaf,0xaa,0x62,0xf6,0xde,0x2e,0x25,0xde,0xbd,0x2d,0x14,0x0d,0x1f,0xa9,0x9e,0xdd,0x21,0x1f,0x1b,0x30,0x9f,0x9c,0x9f,0xb5,0x46,0x47,0x99,0x8c,0x89 -,0x86,0x8a,0x94,0x90,0x87,0x86,0x85,0x89,0x8e,0x8b,0x84,0x83,0x87,0x90,0xa8,0xc4,0xbe,0xc4,0x2a,0x10,0x0a,0x06,0x0b,0x17,0x15,0x0f,0x07,0x03,0x04,0x0b,0x17,0x11 -,0x09,0x02,0x01,0x08,0x1b,0x31,0x13,0x07,0x04,0x07,0x12,0x22,0x24,0x16,0x0e,0x0f,0x1d,0x44,0x51,0x41,0x26,0x24,0x36,0xa9,0x9c,0x9f,0xb3,0x55,0xaf,0x95,0x88,0x86 -,0x8c,0x94,0x92,0x89,0x85,0x83,0x87,0x95,0xaa,0x9f,0x8c,0x87,0x87,0x96,0x2d,0x27,0xc7,0x94,0x90,0xad,0x11,0x0b,0x1c,0xbc,0x94,0xb4,0x19,0x15,0x39,0x60,0x5a,0x3d -,0xcc,0x2e,0x1e,0x30,0x6a,0xb4,0xa7,0xca,0x12,0x12,0xb0,0x9e,0x1c,0x0e,0x06,0x0b,0x1c,0x45,0x42,0x19,0x0c,0x05,0x09,0x21,0x5a,0xc0,0x0c,0x0e,0x18,0x1d,0xb7,0x96 -,0x8f,0x4b,0x58,0x0c,0xa3,0x8b,0x8d,0xa7,0x0f,0x1c,0x33,0x96,0x8d,0xbd,0x1f,0x1b,0xdd,0x8e,0x8e,0x98,0x14,0x14,0x18,0x94,0x80,0x89,0x45,0x2e,0x98,0x87,0x81,0x80 -,0x8a,0x73,0xa5,0x8f,0x80,0x81,0x82,0x97,0xc6,0x8f,0x90,0x8e,0x8e,0xa0,0x2c,0x04,0x14,0x32,0x1e,0x15,0x06,0x09,0x00,0x0a,0x28,0x1c,0x05,0x00,0x00,0x02,0x0f,0xdf -,0x0f,0x01,0x00,0x05,0x29,0xb5,0xad,0x0f,0x00,0x0a,0x9a,0x87,0x8e,0x97,0xbd,0x0f,0xd7,0x82,0x82,0x8c,0xec,0x29,0x3c,0x92,0x80,0x84,0x98,0x5b,0xce,0x9f,0x90,0x83 -,0x8b,0x2e,0x16,0x56,0x8c,0x85,0x85,0xa6,0x1f,0x26,0xac,0x89,0x82,0x84,0xc1,0x0f,0x26,0x89,0x80,0x86,0xb1,0x0c,0x0a,0x1b,0x90,0x89,0xd1,0x07,0x04,0x06,0x1c,0xa6 -,0x29,0x07,0x00,0x04,0x1f,0xc4,0xad,0x0e,0x02,0x04,0x17,0x91,0x97,0x36,0x08,0x09,0x0a,0x94,0x85,0x94,0x16,0x01,0x0c,0x16,0x90,0x8a,0x26,0x09,0x06,0x18,0xb5,0x96 -,0x98,0x0d,0x06,0x03,0x1d,0x98,0x8e,0x2d,0x06,0x03,0x19,0x8a,0x80,0x8f,0x34,0x2a,0x6b,0x85,0x80,0x80,0x89,0x9b,0x9b,0x86,0x80,0x80,0x82,0x98,0xcf,0x8e,0x80,0x80 -,0x82,0xa7,0x15,0x16,0x96,0x82,0x8e,0x12,0x04,0x02,0x06,0x2a,0xa1,0x15,0x00,0x02,0x00,0x0a,0x22,0x19,0x04,0x01,0x02,0x07,0x1e,0xcf,0x17,0x02,0x01,0x02,0x22,0x9d -,0xbc,0x10,0x06,0x03,0x15,0x90,0x8d,0x1c,0x0d,0x0b,0x0b,0x8f,0x83,0x8c,0x20,0x15,0x21,0xb2,0x82,0x82,0x98,0x25,0x23,0x8d,0x82,0x80,0x85,0xab,0xe2,0x9e,0x83,0x81 -,0x8b,0x9f,0x59,0xd6,0x95,0x82,0x84,0xc2,0x11,0x0c,0x14,0x9c,0x83,0x9a,0x0c,0x06,0x13,0x33,0x91,0x8a,0x45,0x0d,0x09,0x17,0xa4,0x8b,0xae,0x16,0x09,0x0f,0xa3,0x8e -,0xc3,0x0e,0x0b,0x05,0x0f,0x96,0x87,0x58,0x05,0x02,0x09,0x32,0x92,0x1f,0x02,0x01,0x0a,0x2b,0xab,0xa2,0x18,0x05,0x05,0x1d,0x8c,0x8e,0xbf,0x18,0x0c,0x1e,0x9d,0x84 -,0x92,0x1f,0x1f,0x14,0x2a,0x8a,0x87,0xa0,0x1f,0x46,0x9e,0x8b,0x80,0x88,0x93,0xb1,0xb6,0x89,0x81,0x80,0x86,0x9a,0xaf,0x99,0x80,0x81,0x85,0x94,0xa7,0x9e,0x8f,0x80 -,0x89,0xaa,0x18,0x0d,0x18,0xaf,0xa2,0x0f,0x00,0x02,0x02,0x12,0x2e,0x12,0x03,0x00,0x01,0x06,0x1d,0x17,0x06,0x02,0x01,0x08,0x2a,0x53,0x15,0x08,0x05,0x03,0x33,0x87 -,0x8a,0xb8,0x19,0x21,0xb4,0x8c,0x85,0x91,0x9e,0x3b,0x1b,0xa2,0x88,0x84,0x97,0x2a,0x2a,0x98,0x85,0x85,0x9c,0x29,0x1a,0xb1,0x8b,0x87,0x8c,0x9f,0x3b,0x1e,0x96,0x83 -,0x82,0x94,0x3c,0x4c,0x97,0x84,0x85,0x92,0x34,0x1f,0x23,0xe7,0x9f,0xa3,0x1f,0x0a,0x0c,0x2b,0x9b,0x9c,0xad,0x0f,0x03,0x05,0x21,0xe7,0x1b,0x16,0x0b,0x07,0x08,0x1f -,0x4f,0x29,0x22,0x14,0x0f,0x3c,0x9d,0xbf,0x0e,0x09,0x1f,0x36,0xb2,0x77,0x19,0x09,0x07,0x15,0xa5,0x97,0xa3,0x3b,0x09,0x03,0x10,0xac,0xaf,0x29,0x12,0x0d,0x4e,0x91 -,0x9a,0x36,0x36,0xa1,0x91,0x88,0x82,0x81,0x89,0x95,0x8f,0x83,0x80,0x81,0x85,0xa0,0xae,0x8f,0x82,0x80,0x81,0x84,0x92,0x99,0xa3,0xa0,0xce,0x2e,0x22,0x0e,0x0c,0x12 -,0x19,0x09,0x06,0x06,0x05,0x0b,0x11,0x1a,0x07,0x00,0x00,0x03,0x13,0x29,0x19,0x06,0x01,0x03,0x16,0xc0,0x49,0x18,0x0b,0x12,0xb1,0x9f,0x3e,0x0f,0x17,0x20,0x36,0x9d -,0x9b,0xad,0x1f,0x44,0xa6,0x8b,0x83,0x84,0x8a,0xcc,0x20,0xed,0x8d,0x84,0x88,0x9a,0x4a,0x5d,0xb3,0x8f,0x88,0x83,0x8a,0x9c,0x8d,0x90,0x91,0xae,0xaa,0xb0,0x56,0x9e -,0x95,0x99,0x20,0x20,0x30,0xad,0x92,0x93,0xa6,0x0f,0x07,0x08,0x23,0x9f,0xb8,0x11,0x01,0x06,0x15,0xb3,0xd6,0x46,0x28,0x17,0x2f,0xb6,0x34,0x10,0x14,0x1a,0x17,0x1d -,0xdd,0x3c,0x09,0x08,0x16,0x34,0x9f,0x96,0x9c,0x19,0x08,0x08,0x0e,0x2f,0xc8,0x1c,0x09,0x05,0x11,0xa6,0x98,0x93,0xa9,0xbc,0xbd,0x9b,0x95,0xe3,0xbd,0xaa,0x9c,0x9d -,0x88,0x86,0x93,0x8b,0x89,0x82,0x81,0x81,0x81,0x97,0xaf,0x98,0x82,0x84,0x84,0x94,0xb1,0x30,0x2f,0x86,0x8c,0x8f,0xc7,0xbe,0x49,0x11,0x13,0x04,0x08,0x09,0x09,0x03 -,0x05,0x05,0x01,0x13,0x0a,0x12,0x07,0x18,0xbd,0x03,0x03,0x00,0x19,0x22,0x21,0x12,0x08,0x09,0x07,0x8d,0x93,0x86,0xa9,0xb8,0xa9,0x18,0x9e,0xe8,0x8f,0xbe,0xa3,0xb0 -,0x9f,0x91,0x2c,0x8c,0x95,0x84,0x8a,0x8c,0x89,0x3b,0x3c,0x2a,0x84,0x85,0x8a,0x9f,0xaa,0xac,0x3f,0x81,0x88,0x84,0xa8,0xb2,0x9a,0x1e,0x2c,0x17,0x93,0xa0,0x47,0x2a -,0x11,0x17,0x47,0x84,0x07,0x2f,0x84,0x9f,0x9b,0x17,0x07,0x04,0x2b,0x40,0x0c,0x08,0x02,0x00,0x01,0x07,0x1a,0x0e,0x02,0x04,0x05,0x01,0x01,0x01,0x0f,0x13,0x0c,0x08 -,0x09,0x04,0x0f,0x8b,0x84,0x81,0x9a,0x97,0x84,0x81,0x9f,0x4e,0x80,0x81,0x80,0x8b,0x85,0x8b,0xb9,0x82,0x81,0x80,0x88,0x83,0x84,0x8b,0x9f,0x3f,0x83,0x8a,0x8f,0x8e -,0x8f,0x96,0x1f,0x96,0x84,0x8d,0xaa,0x1f,0x2d,0x10,0x03,0x00,0x10,0x48,0x19,0x09,0x05,0x04,0x00,0x01,0x10,0x0f,0x07,0x01,0x04,0x03,0x00,0x00,0x07,0x2e,0x1e,0x0a -,0x06,0x04,0x02,0x00,0x0c,0x4f,0xa8,0x25,0x15,0x4a,0x0a,0x02,0x06,0xa6,0x8f,0xa8,0xbc,0xdc,0x3a,0x04,0x23,0x83,0x80,0x85,0x89,0x83,0x80,0x98,0x9d,0x84,0x80,0x81 -,0x80,0x83,0x81,0x8d,0x9d,0x83,0x80,0x80,0x81,0x83,0x80,0x8b,0xd9,0x92,0x80,0x80,0x82,0x85,0x83,0x88,0x46,0x9d,0x80,0x82,0x80,0x9c,0x88,0x92,0x1b,0x13,0x1b,0x88 -,0x8d,0x34,0x18,0x0c,0x06,0x00,0x05,0xfe,0x25,0x0e,0x00,0x06,0x01,0x00,0x00,0x05,0x19,0x08,0x01,0x03,0x00,0x02,0x00,0x0c,0x4d,0x0f,0x08,0x00,0x07,0x02,0x00,0x00 -,0x0e,0xcb,0x0d,0x04,0x03,0x00,0x02,0x00,0x28,0xbf,0x2d,0x0f,0x0a,0x18,0x04,0x04,0x0f,0x8a,0x87,0xa1,0x3f,0x3f,0xf7,0x0c,0x19,0x83,0x80,0x81,0x8b,0x8b,0x85,0xb2 -,0x46,0x8b,0x80,0x81,0x83,0x8c,0x90,0x97,0xd4,0x93,0x80,0x80,0x80,0x86,0x81,0x81,0x93,0xb9,0x8b,0x80,0x81,0x85,0x8c,0x88,0x8e,0xae,0x8a,0x80,0x80,0x84,0xaf,0x9a -,0x9e,0x29,0x16,0xa4,0x82,0x89,0x9e,0x40,0xa0,0xbb,0x0f,0xcc,0x83,0x8a,0xcf,0x09,0x1b,0x18,0x06,0x0d,0xac,0x87,0x91,0x3a,0x16,0x17,0x10,0x01,0x1e,0x84,0x85,0xa6 -,0x0c,0x7c,0xba,0x19,0x1b,0x8d,0x80,0x83,0x8e,0xe6,0x21,0x0e,0x03,0x1a,0x87,0x8d,0xa1,0x0a,0x18,0x0e,0x02,0x01,0x0c,0x56,0x0d,0x00,0x00,0x02,0x00,0x00,0x00,0x34 -,0x2f,0x08,0x00,0x00,0x01,0x00,0x00,0x01,0x17,0x0d,0x01,0x01,0x01,0x01,0x00,0x02,0x76,0x20,0x04,0x00,0x00,0x01,0x00,0x00,0x09,0x3c,0x26,0x09,0x03,0x05,0x02,0x02 -,0x0d,0x8a,0x84,0x9d,0x0f,0x0d,0x20,0x16,0x2d,0x8e,0x80,0x81,0x81,0x84,0x8d,0x98,0xa7,0x97,0x80,0x80,0x80,0x84,0x88,0x82,0x86,0x86,0x81,0x80,0x80,0x80,0x80,0x82 -,0x83,0x87,0x86,0x80,0x80,0x80,0x80,0x83,0x82,0x82,0x85,0x86,0x81,0x80,0x81,0x86,0x91,0x93,0x9f,0xcb,0x90,0x80,0x84,0x8e,0x3c,0xac,0x90,0x9e,0xb6,0xa3,0x91,0xa2 -,0x24,0x08,0x05,0x05,0x05,0x08,0x9f,0x94,0x15,0x04,0x00,0x02,0x00,0x03,0x06,0x13,0x16,0x07,0x00,0x00,0x00,0x01,0x01,0x1e,0x93,0x45,0x0b,0x00,0x03,0x01,0x02,0x05 -,0x2e,0x94,0xaf,0x0d,0x02,0x02,0x04,0x07,0x11,0x8d,0x95,0x2e,0x05,0x03,0x0b,0x09,0x0a,0x0f,0x9c,0x8c,0x9a,0x1d,0x0e,0x0a,0x0c,0x14,0x92,0x8b,0x9d,0xd0,0x1c,0xd3 -,0xb3,0xb1,0xa1,0x8b,0x8c,0xaa,0x1a,0x2c,0xbd,0xba,0x5e,0x92,0x81,0x86,0x9c,0x12,0xa0,0x8a,0x86,0x88,0x88,0x81,0x85,0xa9,0x0f,0x24,0x91,0x89,0x88,0x81,0x82,0x8c -,0x2d,0x1a,0x2b,0x2c,0xf3,0xa9,0x8b,0x8c,0x60,0x0b,0x07,0x0e,0x0f,0xc3,0x85,0x80,0x8a,0x1c,0x05,0x19,0x1d,0x19,0x26,0x8f,0x83,0x8e,0x28,0x0a,0x0e,0x16,0x0e,0x17 -,0x91,0x8c,0xa0,0x0d,0x07,0x0c,0x0d,0x14,0x2b,0xae,0x94,0x9e,0x2f,0x38,0x26,0x25,0x2d,0x8f,0x8a,0x96,0xab,0x3d,0x9d,0xbc,0xbc,0x98,0x87,0x84,0xa6,0x17,0x16,0x30 -,0xaf,0xcd,0x9a,0x86,0x93,0xc8,0x08,0x1e,0x9b,0x8e,0x8b,0x93,0x8e,0x91,0x47,0x0d,0x12,0x41,0x9c,0x8f,0x82,0x89,0x96,0x1c,0x0b,0x13,0x24,0x9f,0x99,0x8a,0x8f,0x2c -,0x0c,0x0c,0x1a,0x14,0x26,0x8a,0x80,0x85,0xb9,0x06,0x0c,0x14,0x1d,0x43,0x98,0x8b,0x94,0x1e,0x08,0x0c,0x1a,0x18,0x1b,0xa3,0xb5,0x3e,0x0f,0x0c,0x0d,0x14,0x27,0x43 -,0x48,0xd0,0xac,0x3b,0x33,0x1e,0x18,0x27,0x8d,0x8f,0x9e,0x21,0x16,0xc2,0xae,0xa7,0xa9,0x96,0x9d,0x29,0x0c,0x0c,0x16,0x3a,0x24,0xb7,0x95,0xa2,0x27,0x02,0x08,0x3d -,0x8c,0x86,0x89,0x98,0x49,0x19,0x0c,0x0f,0x35,0x9c,0x87,0x80,0x8b,0xa9,0x0f,0x0c,0x18,0x3a,0xbc,0x9c,0x8e,0x9a,0x1d,0x0a,0x06,0x11,0x18,0x34,0x84,0x85,0x89,0x28 -,0x09,0x11,0x36,0xad,0xad,0x94,0x98,0x9e,0x28,0x0f,0x18,0x2d,0x26,0x98,0x99,0xa9,0x26,0x0b,0x10,0x11,0x2a,0x2e,0xb0,0x2a,0x16,0x1d,0x28,0x45,0xc8,0x1d,0xab,0x99 -,0xb0,0x2b,0x0d,0x2a,0xaf,0x96,0xbb,0x9e,0xa9,0x40,0x12,0x08,0x0e,0x2f,0xc1,0x93,0x8c,0xa1,0x2c,0x08,0x09,0x0f,0x97,0x8b,0x86,0x8a,0xae,0x1f,0x16,0x1d,0x6d,0xd2 -,0x96,0x82,0x8b,0xa1,0x13,0x12,0x1e,0xd6,0xdd,0xaf,0x9b,0xb9,0x19,0x08,0x09,0x14,0x1c,0x2a,0xa4,0x91,0x91,0x33,0x2a,0x1e,0x2b,0x30,0x33,0xa3,0xa8,0x6d,0x2f,0x2e -,0x64,0x44,0x64,0x90,0x97,0x72,0x0d,0x14,0x34,0xad,0xd8,0x37,0xb7,0xc1,0x10,0x07,0x27,0x99,0x98,0x9d,0x8d,0x9e,0xb6,0x0e,0x0e,0x1f,0xc7,0x98,0x96,0x8b,0x99,0x1a -,0x0e,0x10,0x29,0x30,0xa9,0x8a,0x96,0xcd,0x09,0x0f,0x2e,0xcf,0x27,0x9d,0x87,0x88,0x9e,0x17,0x0f,0x27,0x71,0xac,0x89,0x8e,0x8e,0x2f,0x1f,0x2e,0x28,0x3e,0xba,0xa7 -,0xb3,0x26,0x15,0x17,0x2e,0x1d,0x26,0x9c,0xd3,0x35,0x1f,0xdd,0xa5,0x9a,0xba,0xae,0x95,0x9c,0x37,0x11,0x11,0x3d,0xb5,0x96,0x87,0x9f,0xb5,0x10,0x0c,0x16,0x24,0x5c -,0xae,0x9f,0xbf,0x15,0x0b,0x05,0x0a,0x2d,0x8c,0x81,0x87,0xa1,0x0e,0x13,0x1a,0x37,0xa9,0x8f,0x86,0x8a,0xb6,0x1b,0x0b,0x1b,0x2d,0x9c,0x8e,0x9c,0xc7,0x17,0x1b,0x11 -,0x11,0x1b,0xca,0xa9,0x9b,0xb8,0x35,0x19,0x1a,0x19,0x93,0x8d,0x94,0xbb,0x11,0x2c,0x2f,0xbb,0xad,0x9c,0x96,0xa4,0x18,0x0b,0x0a,0x13,0x24,0x8d,0x8e,0x98,0x2a,0x0a -,0x08,0x0f,0x66,0x97,0x85,0x87,0x96,0x1f,0x0a,0x08,0x14,0x42,0x84,0x85,0x89,0x4c,0x0c,0x0d,0x0f,0x1a,0x51,0x96,0x8d,0x97,0x2f,0x09,0x05,0x07,0x1a,0x8f,0x8a,0x83 -,0x99,0x38,0x19,0x13,0x25,0xa5,0x8f,0x8a,0x99,0xd3,0x1c,0x1a,0x1c,0xb2,0x8b,0x92,0x9a,0x1e,0x12,0x0e,0x15,0x29,0xaf,0x98,0x97,0x65,0x0f,0x05,0x0e,0x29,0x8b,0x84 -,0x87,0x94,0x1a,0x0f,0x0b,0x1a,0xbb,0x8c,0x86,0x8c,0xaf,0x17,0x07,0x0b,0x0d,0x9e,0x90,0x8d,0x9b,0x1e,0x14,0x07,0x09,0x15,0x97,0x84,0x86,0x9e,0x16,0x09,0x0b,0x14 -,0x91,0x8a,0x88,0x9b,0xbf,0x40,0x1b,0x14,0x1d,0xa3,0x8d,0x98,0x58,0x12,0x10,0x0d,0x16,0x97,0x9d,0x97,0x2c,0x28,0x22,0x34,0x29,0xb2,0x8c,0x89,0xa0,0x17,0x07,0x0f -,0x1f,0x9e,0x88,0x8f,0x93,0x1f,0x23,0x17,0x14,0x0e,0x28,0x9a,0x8a,0x97,0x1e,0x08,0x06,0x0b,0xa8,0x88,0x86,0x8b,0x53,0x38,0x1b,0x18,0x1a,0xc0,0x91,0x8a,0x98,0x47 -,0x13,0x19,0x12,0xa9,0x9f,0x9a,0x9c,0x35,0x3a,0x14,0x0f,0x0f,0x31,0xa2,0x8f,0xab,0x21,0x1b,0x25,0x3c,0x89,0x95,0x9d,0x30,0x17,0x4d,0xba,0x62,0x45,0xaf,0x96,0x93 -,0xc5,0x24,0x0e,0x0e,0x15,0x97,0xa0,0x95,0x39,0x1d,0x16,0x18,0x21,0x6f,0x8d,0x89,0x8e,0xce,0x1a,0x12,0x15,0x2f,0x8e,0x9b,0x92,0x6d,0xaf,0xb7,0x2f,0x1a,0x1d,0xce -,0x9d,0xa9,0x23,0x0f,0x0d,0x0e,0x23,0x8f,0x95,0x97,0x2c,0x54,0x3e,0xc7,0x61,0x69,0xaa,0x9f,0xb3,0xb2,0xe8,0xda,0x25,0xc8,0x8f,0xa6,0xad,0x19,0x1f,0x1a,0x1c,0x1b -,0xf4,0xa1,0x9a,0x1e,0x0f,0x12,0x1f,0xe6,0x91,0x85,0x8d,0x9b,0x17,0x28,0x26,0x3c,0x26,0xa5,0x93,0x90,0x9e,0xc7,0x28,0x1d,0x11,0x1e,0x97,0x9d,0xc0,0x0f,0x17,0x22 -,0x1e,0x1a,0x3c,0x9f,0x8d,0xab,0x56,0x24,0x1b,0x13,0xd5,0x87,0x8e,0x8e,0x36,0x62,0xbb,0x41,0x1a,0x16,0xd6,0x97,0xa1,0xbc,0x16,0x0f,0x0a,0x19,0x93,0xb1,0xbf,0x14 -,0x2d,0x9e,0x99,0x97,0xaf,0xa0,0x98,0xd4,0x37,0x16,0x1e,0x28,0xb8,0x87,0x8c,0x93,0x1c,0x0e,0x0f,0x19,0x26,0x1d,0x24,0xaa,0x9f,0xa2,0x44,0x19,0x2e,0x2d,0x8f,0x94 -,0x9f,0x36,0x15,0x5e,0xc7,0xa3,0xa7,0x9d,0x95,0xbd,0xf4,0x22,0x12,0x0c,0x08,0xa9,0x8c,0x8c,0xa7,0x1f,0x17,0x0d,0x18,0x14,0x2b,0x96,0x8b,0x92,0xa3,0x2c,0x2a,0x18 -,0x37,0x98,0x98,0x9d,0x1c,0x2f,0xac,0xa0,0xa9,0x3f,0xac,0xa3,0xbb,0x24,0x0b,0x0b,0x0b,0x2f,0x8f,0x96,0x9d,0x2f,0x2a,0xe5,0xcb,0x76,0x1e,0x27,0xae,0x8e,0x8e,0xb9 -,0xce,0xbb,0x37,0xae,0xa6,0xa5,0x2c,0x1d,0xda,0x2d,0x21,0x14,0x15,0x44,0xaf,0xb3,0xcc,0x1d,0x16,0x1d,0x9b,0x8a,0x8b,0x8c,0xcc,0x32,0x1a,0x11,0x1c,0x1d,0xa7,0x8a -,0x8d,0x9b,0x22,0x10,0x0e,0x0e,0xb6,0x9c,0x9c,0x20,0x13,0x2d,0x1d,0x5f,0xa0,0x95,0x8f,0x9f,0xad,0x33,0x1c,0x1e,0x17,0xbd,0x90,0x8c,0x8c,0xa2,0x2d,0x19,0x18,0x15 -,0x12,0xfb,0x9a,0xa6,0x68,0x17,0x10,0x0a,0x0a,0x3c,0x8d,0x85,0x8f,0x9f,0x40,0x1c,0x25,0x34,0x9d,0x92,0x96,0x9b,0xb8,0x21,0x1c,0x15,0x37,0x9c,0x9d,0x9b,0x1b,0x10 -,0x0f,0x13,0x42,0xba,0x9e,0x98,0x9c,0xbb,0x41,0x1c,0x0c,0x0d,0x9e,0x8b,0x88,0x9a,0x1e,0x24,0x1a,0xa9,0x97,0xa9,0x49,0x24,0xad,0x99,0x69,0x19,0x11,0x19,0xa8,0xbb -,0x32,0x0f,0x0d,0xc7,0x9c,0x8f,0xa0,0xb3,0xa7,0x49,0x32,0x1e,0x14,0x1b,0x2d,0x8d,0x82,0x8a,0x9a,0x48,0x30,0x13,0x1b,0x23,0x2e,0xb4,0xfb,0xd0,0x30,0x10,0x0b,0x16 -,0xaf,0x8c,0x8b,0x9e,0x18,0x0d,0x24,0xa8,0x95,0x9c,0xa8,0xbc,0xb1,0xb8,0x3c,0x1f,0x1a,0x25,0xaf,0x96,0x9d,0xaa,0x24,0x13,0x15,0x28,0x38,0x1a,0x2e,0xa3,0x8c,0x8f -,0xb4,0xf2,0x25,0x16,0x1f,0x46,0xa7,0x9a,0xa8,0x94,0x96,0xa7,0x3b,0x1b,0x29,0x47,0xb0,0x2d,0x14,0x11,0x13,0x1f,0xaf,0xab,0x9c,0xa1,0x9a,0x9b,0x6e,0x47,0x0f,0x1f -,0xab,0xa2,0xa1,0xae,0xb0,0x35,0x1e,0x36,0xc5,0xab,0xaf,0x47,0xac,0xb8,0x53,0x2d,0x10,0x11,0x11,0x2e,0xa0,0x9b,0xa2,0xc6,0x35,0xc5,0x9a,0x9b,0x9c,0xb9,0xf1,0x2d -,0x2b,0x25,0x37,0xa0,0x90,0x92,0xa3,0x5f,0x0f,0x07,0x07,0x2a,0xa9,0x9e,0xa8,0x25,0x26,0x1f,0x26,0xc0,0x9d,0x98,0x93,0x9f,0xbd,0x25,0x18,0x18,0x31,0x8d,0x8c,0x92 -,0xa6,0x38,0x2c,0x2d,0x22,0x19,0x27,0xab,0xa4,0x4b,0x16,0x08,0x07,0x10,0xa8,0x8a,0x86,0x8a,0x9b,0xc7,0x31,0x23,0x1d,0x1e,0x4b,0x98,0x8f,0x94,0x2b,0x0f,0x0e,0x23 -,0x8f,0x8e,0x93,0x36,0x14,0x12,0x0e,0x19,0x1d,0x2e,0x9c,0x93,0x97,0xb7,0x19,0x13,0x19,0x98,0x8b,0x8f,0x9e,0x1b,0x1e,0x3f,0xc0,0xa6,0xae,0xaf,0xa9,0xbd,0xc5,0x19 -,0x0f,0x11,0x22,0x99,0x9a,0x48,0x12,0x19,0x3e,0xa8,0x9c,0xa8,0xb8,0xa0,0x9e,0xa5,0x42,0x0e,0x0a,0x20,0x8e,0x89,0x8e,0xaf,0x2c,0x47,0x29,0x2f,0x2e,0x2d,0xad,0xae -,0x58,0x19,0x06,0x07,0x11,0x9c,0x85,0x88,0x94,0x26,0x1e,0x4b,0xaa,0xa3,0x4d,0x31,0xb0,0x9e,0x9e,0x28,0x10,0x17,0xd4,0x8c,0x8f,0xad,0x1e,0x14,0x18,0x1f,0x27,0x19 -,0x1a,0xe7,0xaa,0x98,0x9f,0x37,0x3c,0xbb,0x8e,0x8e,0x9d,0x30,0x10,0x2b,0xbd,0xb6,0xdf,0x28,0xb3,0x9b,0x9b,0xb7,0x16,0x0f,0x0f,0x55,0x9d,0xa7,0x2e,0x0e,0x13,0x40 -,0x98,0x97,0xa8,0xbd,0xa3,0x9a,0x9e,0x1e,0x0b,0x0d,0xb6,0x88,0x89,0x9f,0x21,0x1e,0x36,0xac,0xae,0x4c,0x2f,0x42,0x34,0x28,0x19,0x0c,0x0c,0x36,0x9a,0x8c,0x8e,0xbe -,0x2e,0x3c,0xa8,0x9a,0xab,0x37,0x2d,0xae,0x96,0x4c,0x1a,0x0a,0x1f,0x94,0x8d,0x91,0x35,0x22,0x25,0x44,0x46,0x18,0x0e,0x13,0x33,0x9b,0x98,0xb0,0x18,0x29,0x97,0x8b -,0x86,0xbf,0x16,0x16,0x39,0x9e,0xde,0x2e,0x2d,0x4b,0x9e,0x5e,0x2c,0x1a,0x1e,0x9d,0xa8,0xa1,0x36,0x0f,0x11,0x1a,0xb6,0x9d,0xa5,0xa9,0xbb,0x9a,0xa0,0x5d,0x1c,0x19 -,0x9e,0x94,0x95,0x2c,0x11,0x1f,0x4d,0x97,0xa5,0x3e,0x52,0xe1,0xa3,0x4f,0x11,0x08,0x09,0x4a,0x99,0x8f,0x97,0x3d,0x2f,0x41,0xab,0x9e,0xa9,0xbe,0x33,0xc2,0xbe,0x41 -,0x21,0x23,0xae,0x9a,0x93,0xb1,0x2b,0x26,0x2d,0xbf,0x32,0x22,0x1e,0x1c,0x4a,0x2a,0x26,0x1b,0x43,0x93,0x8f,0x8c,0xab,0x4d,0x32,0x56,0x9c,0xa3,0xbd,0x25,0x1f,0xb7 -,0x38,0x2b,0x11,0x19,0x9b,0x90,0x8d,0x40,0x19,0x18,0x17,0xcf,0x24,0x2d,0xd8,0x3b,0xad,0x2c,0xee,0xdf,0x9e,0x8d,0x98,0x90,0xc6,0x1f,0x1e,0x19,0x5a,0x38,0xc6,0xa6 -,0xb0,0x9b,0xd5,0x23,0x11,0x1b,0xf4,0xb3,0xb2,0x20,0x16,0x24,0xc5,0x9a,0xa3,0xa4,0xa8,0xa9,0xa9,0x32,0x21,0x1d,0xbc,0x9e,0x92,0x9b,0x35,0x27,0x22,0x40,0xb0,0xcd -,0xc0,0x3d,0x41,0x17,0x10,0x17,0x1b,0xa4,0xa0,0x9a,0xc4,0x27,0xc9,0xcc,0x99,0xa3,0x4f,0xa7,0xba,0x9d,0x3a,0x16,0x11,0x1a,0x9b,0x92,0x90,0x9f,0x26,0x22,0x15,0x23 -,0x34,0x2b,0xac,0x39,0xfa,0x1f,0x18,0x1e,0x4a,0x95,0x8c,0x8d,0xa1,0x30,0x38,0xaf,0xa3,0x69,0x2c,0x51,0x4f,0x2f,0x12,0x0d,0x15,0xa1,0x93,0x8c,0x95,0x46,0x2d,0x1f -,0x31,0x2a,0x19,0x23,0x1c,0xd1,0xb3,0xe3,0xca,0xbd,0x8e,0x8e,0x8c,0xa7,0x1e,0x19,0x0f,0x26,0x55,0xbd,0x9f,0xa7,0x9b,0x54,0x1a,0x10,0x13,0xdb,0xa6,0x9f,0x4c,0x22 -,0x2c,0x31,0xbf,0xb0,0xac,0x9a,0xa0,0xb2,0x29,0x1c,0x25,0xb1,0x95,0x8e,0x9e,0x37,0x20,0x13,0x2d,0x54,0xdf,0xd5,0x46,0xcd,0x29,0x31,0x1c,0x1c,0xb0,0xb6,0xaa,0x50 -,0x5e,0xaf,0xf9,0xa8,0xdd,0xb9,0x96,0x9e,0xb3,0x25,0x17,0x19,0x3a,0x9f,0x99,0x98,0xb2,0x33,0x24,0x1e,0x23,0x2e,0xcd,0xad,0xbc,0x2c,0x1b,0x0f,0x1c,0xb4,0x9c,0x92 -,0xaa,0xbe,0xb5,0xad,0xa6,0xc6,0xc2,0xb7,0xbc,0x76,0x19,0x15,0x16,0xdd,0x92,0x94,0x99,0x44,0x3d,0xec,0x30,0x1d,0x0e,0x14,0x25,0x48,0xb4,0x7b,0xe6,0xba,0x9f,0x8e -,0x91,0xb6,0x29,0x29,0x3b,0xd8,0x35,0x3d,0xb6,0x9c,0x98,0xcc,0x20,0x0e,0x19,0x64,0x9f,0xa5,0x37,0x4b,0x4c,0x76,0x5e,0x26,0x3e,0xad,0xaa,0xc5,0x1f,0x1a,0x20,0xab -,0x92,0x8e,0x95,0x46,0x22,0x28,0x34,0x4d,0x2f,0x3c,0xab,0xac,0xb9,0x3a,0x1f,0x2e,0xcd,0xa4,0xab,0x3a,0x25,0x1f,0x2f,0x4b,0x5e,0xb7,0xad,0xa0,0xb0,0x2f,0x1f,0x1d -,0xb3,0x9a,0x97,0x9c,0xae,0x4d,0x1d,0x1d,0x27,0x3e,0xaf,0xb2,0xb3,0x36,0x18,0x16,0x28,0xaa,0x9f,0x9c,0xa3,0xba,0x40,0x27,0x2c,0x3f,0xbc,0x9f,0xa2,0xc4,0x22,0x15 -,0x1b,0xb7,0x9e,0x9b,0xa0,0xa7,0x9e,0x59,0x1a,0x0d,0x16,0xd7,0xa6,0xb7,0x31,0x1e,0x2b,0xab,0x93,0x94,0xac,0x3a,0x37,0x56,0x2a,0x19,0x1d,0x72,0x98,0x8d,0x96,0x59 -,0x18,0x16,0x2c,0xb5,0xb3,0x56,0xc1,0xaa,0xb5,0x36,0x1a,0x1f,0xc2,0x9d,0xa0,0x35,0x16,0x0e,0x24,0xa3,0x94,0x92,0x9f,0xa3,0xc1,0x2a,0x20,0x21,0x5e,0xb3,0xab,0xb2 -,0x49,0x39,0x2f,0x39,0xc9,0xb3,0xee,0x36,0x36,0x3b,0x37,0x36,0x3a,0xb7,0xa0,0xab,0xaf,0x2e,0x20,0x21,0x39,0xa9,0x9d,0x98,0xa4,0xcd,0x2a,0x27,0x4f,0xcb,0x6e,0x3f -,0x33,0x3e,0x32,0x29,0x33,0xbd,0xa2,0x9f,0xaa,0xc7,0x43,0x4a,0x5f,0x39,0x36,0x36,0xd8,0xce,0x38,0x3b,0x33,0x34,0xdf,0xb2,0xa5,0xa3,0xa5,0xac,0xdf,0x30,0x24,0x29 -,0x35,0x30,0x48,0xc7,0xb8,0xf8,0x6b,0xc4,0xbe,0xae,0xc5,0x59,0x30,0x2e,0x32,0x53,0xc6,0xaf,0xa4,0xb4,0x62,0x30,0x2e,0x24,0x29,0x31,0x63,0xaa,0xa7,0xa8,0xc6,0x47 -,0x5c,0xbb,0xc7,0x39,0x30,0x57,0x53,0x36,0xf5,0xb8,0xa3,0x9a,0xb2,0x39,0x34,0x26,0x24,0x26,0x39,0x5a,0xb0,0xa7,0xd4,0x40,0x4f,0xc5,0x41,0x13,0x1a,0xa3,0x95,0x9a -,0xaf,0xa4,0x92,0xb4,0x1b,0x1a,0x1c,0xa3,0xce,0x17,0x0e,0x0a,0xac,0x8d,0x95,0x9e,0xa1,0xa0,0xdc,0x47,0x19,0x11,0x1e,0x2e,0x8d,0x8c,0xb8,0x27,0x28,0x1f,0xcd,0xae -,0xae,0xa7,0xc1,0xc3,0x15,0x14,0x26,0xa2,0x90,0xc7,0x13,0x56,0x92,0x98,0xb1,0x17,0x16,0x5c,0x9d,0xb1,0x1d,0x28,0xa5,0x97,0x40,0x0c,0x3c,0x8c,0x96,0x3b,0x12,0x2a -,0x9e,0xb2,0x1f,0x12,0x39,0x9a,0x8f,0xa3,0x13,0x11,0xb4,0x9f,0xad,0x2f,0x33,0xae,0xac,0xb2,0x44,0xae,0xa4,0xbf,0x1d,0x09,0x0e,0xa3,0x8f,0x9f,0x36,0xa9,0x9d,0xb8 -,0xac,0x22,0x1f,0x23,0x1e,0x3c,0x9e,0x9c,0x9f,0xdf,0x23,0x33,0xbb,0xa6,0xb3,0x30,0x18,0x14,0x27,0xa8,0x9a,0x96,0xd1,0x24,0x30,0xad,0x9b,0xd5,0x22,0x19,0x23,0xad -,0xab,0xaf,0x4c,0xb6,0x9d,0x4e,0x1a,0x23,0xae,0xaf,0x2d,0x1a,0x2f,0xa0,0x9c,0x24,0x17,0x2b,0xa6,0x98,0xa9,0x38,0x47,0x9a,0x9b,0xb3,0x30,0x3f,0xbd,0xdc,0x1d,0x1e -,0xaa,0x95,0xae,0x11,0x08,0x18,0x9c,0x94,0xa1,0x3d,0x75,0xae,0xb3,0x5b,0x22,0x3c,0xaf,0xcf,0x2c,0x3e,0xa8,0x9a,0xc3,0x21,0x2a,0x9f,0x90,0x9d,0x1d,0x0c,0x18,0x47 -,0xdb,0x2f,0x4c,0x7b,0xd9,0xc0,0xae,0x9d,0x95,0xbb,0x1b,0x13,0x1f,0xb6,0x9c,0xa5,0xbf,0xc3,0x41,0x56,0xb9,0xbf,0x3b,0x2c,0x25,0xcc,0xa1,0xaa,0x3e,0x1c,0x22,0xf8 -,0xae,0xb8,0x3b,0x2c,0xbf,0xa2,0xac,0xad,0x9f,0x9e,0x79,0x12,0x16,0xba,0x97,0xac,0x17,0x0d,0x1b,0xae,0x9b,0xa9,0xbb,0xad,0x9b,0xb5,0x15,0x19,0xed,0x9f,0xaf,0x2d -,0x32,0xa4,0x9a,0xb1,0x1d,0x16,0xdd,0x93,0x96,0x2e,0x0f,0x1f,0xb8,0x6f,0x29,0x20,0x54,0xab,0xac,0xbf,0xb7,0xae,0xc8,0x46,0x24,0x1c,0x44,0x9c,0x98,0xa3,0xe3,0x3a -,0xc0,0xa7,0xd9,0x30,0x1e,0x2c,0xc9,0xc1,0xc1,0x3c,0x44,0xdb,0x6a,0xd7,0x4f,0x3a,0x47,0xc7,0xad,0x34,0x32,0xaf,0xb1,0x33,0x14,0x28,0x9e,0x96,0x9d,0x21,0x0d,0x18 -,0xb5,0x96,0x9b,0xa5,0x9d,0x9f,0x4b,0x19,0x1d,0xd0,0x9c,0x9f,0x2f,0x22,0x6e,0xa5,0xb4,0x21,0x12,0x29,0xa3,0xa6,0x24,0x16,0x2f,0xac,0xb4,0x41,0x2c,0x3c,0xad,0xaf -,0xbb,0xb4,0x98,0x93,0xaa,0x1f,0x13,0x34,0x9e,0x94,0xa6,0x2b,0x1e,0x3d,0xa9,0xba,0x20,0x16,0x1c,0x2a,0x2e,0x2c,0x3d,0xf5,0x61,0xc4,0xb5,0xbe,0xaf,0x9e,0x97,0xa2 -,0x4c,0xc5,0xaf,0xb1,0x3a,0x29,0x5e,0x9f,0x97,0xad,0x1e,0x0d,0x10,0x2b,0xaf,0xa7,0xa2,0xa3,0xb4,0x1e,0x15,0x1d,0xed,0xa7,0xb1,0x2f,0x1f,0xaf,0x8f,0x8e,0xb0,0x26 -,0x31,0xaf,0xae,0x57,0x29,0x32,0xc1,0xb5,0x74,0x26,0x26,0x3e,0xc4,0x4c,0x46,0xad,0xa2,0x6c,0x15,0x11,0x2d,0xab,0x98,0x9d,0xc3,0x29,0x53,0xa5,0xa5,0xc3,0x39,0x56 -,0x3f,0x36,0x3d,0xbe,0xbc,0x3b,0x26,0x28,0x61,0xa5,0x99,0x96,0xbc,0x28,0x20,0x2c,0x3f,0x2f,0x34,0xdd,0xa9,0x9f,0x9e,0x5e,0x1c,0x1a,0x2a,0x47,0xbd,0xaf,0xaf,0xc7 -,0x29,0x3c,0xb6,0xa7,0xa8,0xe0,0x22,0x1c,0x35,0x9d,0x96,0xae,0x39,0x41,0xd9,0x3c,0x35,0x2e,0x52,0x47,0x33,0x48,0x37,0x3d,0xe6,0xb5,0xd8,0xec,0xa9,0x99,0xa8,0x20 -,0x16,0x20,0xcf,0x99,0x94,0xa3,0x3c,0x28,0x36,0x66,0x3f,0x37,0x53,0x2b,0x2b,0xff,0xa6,0xac,0x41,0x27,0x2b,0x4d,0xae,0x96,0x95,0xa9,0x48,0x2e,0x34,0x2b,0x26,0x3d -,0xbe,0xcf,0x7e,0xbd,0x68,0x32,0x26,0x46,0x4e,0x41,0x50,0xc0,0xc6,0x34,0x3f,0xc2,0xa9,0xa0,0xa8,0x61,0x1e,0x1f,0xbb,0xa5,0xaa,0xca,0xd7,0x46,0x3e,0xc1,0xad,0xbe -,0x37,0x26,0x26,0x28,0x2f,0x3e,0x55,0xba,0xac,0x97,0x99,0xcb,0x19,0x14,0x24,0x3c,0xc5,0xad,0xa7,0xb3,0xa9,0x9f,0xac,0x49,0x38,0x3e,0x33,0x2b,0x37,0xb0,0xbb,0x4d -,0x2f,0x29,0x2a,0x40,0xa7,0xa4,0xb9,0x34,0x2b,0x4b,0x5f,0xef,0x5a,0x51,0x68,0xc8,0xaf,0xb9,0x3f,0x2e,0x4f,0xbe,0xae,0xa5,0xae,0x31,0x1e,0x23,0x48,0xb2,0xa2,0xb2 -,0x3c,0x2d,0x3b,0xa8,0xa4,0xb8,0x3b,0x32,0x2f,0x27,0x3f,0xb8,0xa9,0xa9,0xcf,0x2f,0x21,0x1f,0x2e,0xd9,0xad,0xa9,0x9f,0x9b,0xab,0x48,0x35,0x3b,0x2b,0x3a,0xc3,0xd0 -,0xdf,0xc6,0xa8,0xac,0xba,0xcc,0x28,0x17,0x15,0x23,0x49,0x6b,0x34,0x2c,0x3d,0xb5,0x9f,0x94,0x96,0xab,0x77,0x2f,0x2e,0x33,0x47,0xcc,0xb9,0xb8,0xbd,0xb9,0x66,0x2a -,0x24,0x2c,0x40,0x4e,0xb4,0xb6,0x36,0x2a,0x46,0xbc,0xaa,0xa9,0x5d,0x2d,0x2e,0xdc,0xa3,0x9e,0xbd,0x36,0x3c,0x34,0x38,0x75,0x61,0x7a,0x4e,0xbe,0xae,0xc0,0xcc,0x40 -,0x24,0x21,0x31,0xc1,0xae,0xae,0xbd,0x5b,0x46,0x31,0x39,0xbf,0xb4,0xce,0xe9,0x5e,0xdf,0xc2,0xaf,0xb1,0x38,0x26,0x2f,0xfc,0xbf,0x31,0x22,0x1f,0x2d,0xaa,0x96,0x91 -,0xa0,0xca,0x2e,0x22,0x2b,0x33,0x32,0x32,0xc1,0xa1,0x9c,0x9e,0xbb,0x39,0x27,0x29,0x2e,0x37,0x2c,0x1f,0x2b,0x49,0xb9,0xa5,0x9f,0xab,0x47,0x29,0x2e,0xd6,0xaf,0xb2 -,0xba,0xc3,0xdb,0xf7,0xd0,0xcc,0xbe,0x5b,0x2d,0x2c,0x35,0xb9,0xb1,0x58,0x32,0x3b,0x41,0xf6,0x51,0x34,0x2c,0x3b,0xd5,0xbd,0xa4,0xac,0xa9,0xa7,0xb4,0xeb,0x4c,0x4c -,0x2e,0x32,0x39,0x6d,0xb4,0xb1,0x76,0x26,0x1e,0x21,0x34,0xb5,0xa2,0x9c,0x9c,0xbd,0x3b,0xde,0xbd,0x70,0x2a,0x24,0x24,0x33,0xb3,0xa8,0xb1,0x5e,0x60,0xcb,0xd6,0x32 -,0x1d,0x19,0x24,0xc9,0x9d,0x97,0xa0,0xc2,0x4a,0xd2,0xb4,0xb5,0x4d,0x22,0x1d,0x33,0xd6,0xae,0xa8,0xa7,0xad,0x57,0x2a,0x1d,0x27,0x3b,0x2f,0x48,0xcb,0xb6,0xa3,0x9f -,0xaa,0x5c,0x23,0x1e,0x33,0xdb,0xaf,0xa7,0xaa,0xcd,0xd4,0xa3,0xac,0x3f,0x2a,0x22,0x2c,0xeb,0xb6,0x48,0x25,0x3b,0xc3,0xb7,0xb5,0xc7,0x3e,0x2c,0x35,0xf6,0xb0,0xab -,0xaf,0xc0,0x59,0x2c,0x2e,0x4a,0x4e,0xd6,0xc6,0xb3,0xc2,0xc8,0xbc,0xea,0x2e,0x1e,0x1d,0x32,0xb2,0xa0,0xa6,0xc7,0xd0,0xb2,0x9e,0x9e,0x75,0x1e,0x17,0x1b,0x39,0xaa -,0x9b,0xa4,0xba,0x7e,0xc4,0xd4,0x2b,0x1a,0x1b,0x2c,0xde,0xa3,0x9d,0xaf,0x5d,0xbb,0xaa,0xa4,0xdd,0x28,0x29,0x2b,0x56,0xb6,0xa9,0xa3,0xac,0xbe,0x41,0x28,0x1e,0x1e -,0x1d,0x21,0x38,0x50,0xbb,0xa6,0x9a,0x9e,0xd0,0x27,0x23,0x3b,0xaf,0xab,0xb2,0x3f,0x37,0xbc,0x9f,0x9f,0x4e,0x28,0x24,0x33,0x43,0x5e,0x4e,0x44,0xbe,0xab,0xa8,0xc0 -,0x2c,0x22,0x34,0xcf,0xb2,0xa7,0xad,0xe0,0x44,0x4a,0x40,0x2e,0x38,0xdf,0xc0,0x50,0x65,0xb9,0xae,0xac,0xb2,0x68,0x22,0x1d,0x2b,0xcb,0x6c,0x4a,0x4a,0xe7,0xad,0x9f -,0x9f,0xcf,0x28,0x1b,0x24,0xc8,0xa3,0xa8,0xbf,0xda,0xb3,0xae,0xc8,0x24,0x14,0x16,0x29,0xeb,0xbe,0xae,0xac,0xa5,0xa2,0x9e,0xa8,0x55,0x2d,0x29,0x2b,0x2a,0x7c,0x9f -,0x9d,0x9f,0xa6,0xc7,0x2b,0x1e,0x22,0x25,0x23,0x23,0x2d,0xea,0xab,0x9a,0x9f,0xc6,0x2c,0x26,0xd3,0xb5,0x64,0x3d,0x3b,0xc9,0xa8,0x9e,0xa5,0xdb,0x29,0x1e,0x2e,0x70 -,0xc9,0x4c,0xed,0xc8,0xba,0xc5,0x44,0x2d,0x25,0x36,0x54,0xbe,0xbd,0xb0,0xb6,0xad,0xa9,0xad,0x79,0x2c,0x41,0x41,0x2f,0x2b,0xdf,0xa6,0xaa,0xbc,0xe2,0x40,0x1f,0x24 -,0x41,0x4e,0xcb,0xff,0xbd,0xa2,0x99,0x9e,0xdb,0x29,0x20,0x2b,0x5d,0xc1,0x4c,0x45,0x4f,0xbb,0xa6,0xa8,0x3f,0x1f,0x1e,0x26,0x2f,0x6a,0xb9,0xb3,0xa6,0xa5,0x9e,0xab -,0x38,0x1c,0x1b,0x20,0x2b,0x5b,0xa9,0x9b,0x9d,0xa3,0xaa,0xba,0x3c,0x2e,0x33,0x2a,0x1b,0x1e,0x34,0xba,0xa7,0xa4,0xaa,0x6e,0x2e,0x3d,0xd0,0x4d,0x27,0x31,0xbb,0x9d -,0x92,0x97,0xb6,0x2e,0x22,0x2f,0x51,0x30,0x2a,0x2a,0x36,0x40,0xd4,0x44,0x44,0xc6,0xb8,0x3b,0x28,0x4e,0xb3,0x9f,0x9e,0xaa,0xd0,0xc6,0x42,0x27,0xd2,0xa9,0xba,0x2c -,0x15,0x14,0xd8,0x97,0x9b,0xaa,0x3a,0x3a,0x2d,0x1b,0x2f,0xa2,0x94,0x9f,0x27,0x10,0x14,0xce,0x9b,0x9a,0x9a,0xaa,0x33,0x1c,0x21,0xb4,0x96,0x9c,0x2e,0x17,0x15,0x37 -,0xaf,0xb8,0xc1,0xaf,0xa8,0x31,0x24,0x3f,0xcb,0xbe,0xae,0x2f,0x30,0xda,0xba,0xba,0xb1,0xae,0xbe,0xcf,0x19,0x25,0x43,0xb8,0x4d,0x2b,0x36,0x4a,0xa7,0xa5,0xa1,0xa1 -,0xaa,0x60,0x2d,0x1e,0x22,0x34,0xc5,0xa9,0xb6,0x40,0x40,0xa9,0x4e,0x34,0xa5,0xa3,0xea,0x17,0x1b,0x3e,0xaf,0xa9,0x3b,0x35,0xe2,0xae,0xaa,0x41,0x36,0xac,0xb5,0x36 -,0x1f,0x4a,0xb3,0xbc,0xc1,0xfe,0xc4,0x57,0x46,0x32,0x3d,0xaa,0xae,0x66,0x1e,0x18,0xbd,0x9f,0xa2,0xcf,0x27,0xca,0xa9,0x56,0x2b,0x2e,0xa1,0x9d,0xd2,0x24,0x22,0xaf -,0xb5,0x59,0x2c,0x37,0xb9,0xc4,0x2c,0x2c,0xb7,0xa3,0xb7,0x2b,0x3a,0xac,0xa5,0xb2,0x33,0x23,0xe4,0xa5,0xad,0x33,0x2e,0xc5,0xb6,0xc6,0x26,0x1a,0x39,0xb2,0xdd,0x24 -,0x2b,0xa1,0x99,0xcb,0x23,0xbd,0xa0,0xd3,0x2c,0x1e,0x3f,0xa3,0xbb,0x22,0x33,0xa5,0x99,0xa1,0xf7,0x4f,0xc5,0x56,0x22,0x24,0x24,0x33,0xad,0x31,0x1b,0x38,0x99,0x97 -,0x4e,0x4c,0xb5,0xb8,0x2f,0x1a,0x45,0x96,0x9b,0x3e,0x16,0x27,0x92,0x92,0x4a,0x1e,0x61,0xc9,0x29,0x1b,0x1a,0xb1,0x98,0x56,0x17,0x19,0x9e,0x8e,0xb4,0x2e,0x35,0xa7 -,0x41,0x23,0x2d,0x63,0x96,0xa2,0x2d,0x23,0x2a,0xa1,0xa7,0x5b,0x58,0x3b,0xbd,0x1f,0x1d,0x38,0xb0,0x96,0xb6,0x16,0x24,0x9b,0x94,0xf8,0x21,0x3a,0xab,0xb7,0x28,0x24 -,0xce,0x9d,0xb7,0x1f,0x15,0x64,0x92,0xaa,0x2a,0x2d,0x49,0xb7,0x55,0x2b,0x26,0xeb,0xa6,0xda,0x5d,0xc6,0xa8,0xa0,0x44,0xe5,0xb5,0xa7,0xb6,0x19,0x14,0x1e,0xab,0xb1 -,0x2a,0x35,0xe6,0x9e,0xab,0x55,0xb5,0xb6,0xa3,0x45,0x19,0x1d,0x54,0xa7,0x70,0x2d,0xce,0xa2,0xa7,0xbc,0xfa,0xbd,0xb1,0x36,0x18,0x19,0x59,0xa8,0xcb,0x2e,0x31,0xaa -,0x9c,0xa9,0xc5,0x44,0xb4,0xaa,0x2e,0x15,0x1c,0xd9,0xb2,0x45,0x3a,0xac,0x99,0xaa,0x2b,0x25,0xcd,0xa0,0xe2,0x18,0x17,0x54,0xa3,0xb1,0x39,0xc8,0xa7,0x9d,0xae,0x3c -,0xbc,0xab,0xb8,0x25,0x13,0x23,0xbb,0xb4,0x41,0x26,0xd1,0xa9,0xaf,0x3d,0x38,0xa3,0xa1,0x2e,0x16,0x1b,0xbd,0x9e,0x7d,0x29,0x54,0x98,0x9e,0xc9,0x37,0xc3,0x9e,0xfe -,0x26,0x1e,0x46,0xc3,0x2f,0x27,0x47,0x9c,0xa3,0x2d,0x2d,0x38,0xab,0x9e,0xc8,0x18,0x17,0xc5,0xb1,0xae,0x6c,0xb9,0xa7,0xaf,0x67,0x26,0xbc,0x99,0x9f,0x27,0x0e,0x25 -,0xad,0xe7,0x32,0x35,0xa6,0xa8,0xc9,0x30,0x3c,0xa1,0xac,0x2f,0x1a,0x2c,0xdf,0x46,0x5f,0xcd,0xa8,0x9d,0xa3,0xbc,0x2b,0x42,0xbd,0x46,0x21,0x1c,0x33,0x2f,0x4b,0xb7 -,0xa9,0xa0,0xa2,0xae,0x25,0x28,0xa7,0x9d,0xcb,0x22,0x25,0x30,0x30,0x59,0xea,0x9d,0x98,0xb7,0x24,0x1c,0x51,0xb9,0x6b,0x2d,0x2c,0x30,0x32,0xc1,0xac,0xb2,0xa8,0xab -,0xd9,0x2b,0xc2,0xad,0x73,0x4a,0x24,0x45,0x4c,0xe0,0xbc,0xbc,0x9a,0xa8,0x3b,0x1c,0x1e,0x58,0x46,0x58,0x43,0x4c,0x6d,0x39,0x73,0xbc,0x96,0x98,0xc0,0x28,0x1c,0x49 -,0x79,0x4b,0xcb,0xc8,0xcb,0x26,0x22,0xc7,0x9a,0x93,0xb6,0x26,0x1b,0x2a,0xdc,0xde,0xd5,0x4f,0x6e,0x30,0x23,0x4a,0xa1,0x95,0xa7,0x3e,0x20,0x21,0xcd,0xbd,0xc2,0x54 -,0xbd,0xd4,0x19,0x1d,0xb3,0x8f,0x91,0xaa,0x2a,0x1c,0x43,0x43,0x31,0x33,0xae,0xa6,0x28,0x1a,0x26,0xa0,0x95,0xa4,0xcc,0x29,0x2d,0x2f,0x2e,0x4e,0xac,0xa5,0x20,0x0f -,0x1e,0x9e,0x8b,0x91,0xbc,0x22,0x28,0x53,0x4a,0x4d,0x5a,0xac,0x4a,0x1b,0x1a,0x3d,0x97,0x90,0x9f,0x2f,0x1f,0x27,0x2a,0x28,0x6b,0x9d,0xae,0x19,0x15,0x3b,0x94,0x8a -,0x96,0x2e,0x1f,0x45,0x33,0x27,0x27,0xbf,0xa8,0xe1,0x24,0x20,0xac,0x95,0x9d,0xca,0x28,0x2b,0x1e,0x1a,0x36,0x9f,0x93,0xbe,0x18,0x13,0xc6,0x8c,0x8d,0xab,0x1b,0x1c -,0x2a,0x2a,0x2b,0x42,0x9e,0x9c,0x3a,0x14,0x1b,0x9f,0x92,0x9f,0x3f,0x26,0x2d,0x1a,0x27,0xb8,0x98,0x94,0x37,0x12,0x1c,0x94,0x89,0x99,0x21,0x14,0x2a,0x31,0x2e,0x32 -,0xc6,0xa6,0xee,0x1d,0x1b,0xe2,0x98,0x9a,0xa6,0x2f,0x27,0x2a,0x2c,0x3d,0xb3,0x94,0x9f,0x1e,0x0c,0x26,0x90,0x8a,0x9b,0x21,0x1b,0x35,0x46,0x33,0x2a,0xb9,0xa0,0x33 -,0x12,0x18,0xa6,0x8d,0x91,0xc0,0x24,0x2b,0x1e,0x1f,0xcd,0x97,0x96,0x24,0x0a,0x12,0x9d,0x87,0x89,0xa7,0x15,0x12,0x20,0x3c,0x4c,0xb9,0xa6,0xe5,0x1b,0x0f,0x30,0x8f -,0x88,0x93,0x2c,0x1b,0x1d,0x1c,0x24,0xb1,0x96,0x9e,0x20,0x09,0x1b,0x8f,0x86,0x97,0x20,0x13,0x25,0x33,0x20,0x4e,0x99,0x9f,0x30,0x12,0x19,0x9b,0x89,0x8f,0xb9,0x1d -,0x19,0x16,0x1b,0xbd,0x8f,0x8e,0x5e,0x0b,0x05,0x40,0x87,0x86,0xa5,0x0f,0x0f,0x20,0x2b,0x3b,0xa1,0x8e,0x9f,0x1f,0x0c,0x1b,0x95,0x8a,0x9d,0x21,0x1c,0x27,0x33,0x44 -,0xa4,0x90,0xa1,0x18,0x06,0x13,0x92,0x85,0x99,0x1d,0x10,0x16,0x3a,0xbe,0xa5,0x97,0x9e,0x3c,0x0f,0x0e,0x4e,0x8d,0x8a,0x9f,0x28,0x18,0x1c,0x22,0x38,0xa3,0x96,0xa4 -,0x11,0x0b,0x3a,0x8d,0x86,0x9c,0x1a,0x0f,0x1e,0xe7,0x65,0x5d,0xae,0x58,0x18,0x0e,0x4c,0x8c,0x86,0x90,0x46,0x10,0x0e,0x1c,0x3e,0x9f,0x95,0xa9,0x19,0x0d,0x1e,0x96 -,0x87,0x89,0xb2,0x0d,0x0d,0x23,0x49,0x3d,0xef,0xae,0xd3,0x1c,0x29,0x9a,0x8c,0x8e,0xe7,0x14,0x12,0x1b,0x2e,0x51,0xa3,0x9d,0x58,0x16,0x16,0x9e,0x85,0x88,0x9f,0x16 -,0x08,0x0c,0x25,0xc9,0x9a,0x98,0xcc,0x1d,0x17,0x36,0x94,0x8b,0x98,0x36,0x0e,0x0e,0x26,0xae,0xa5,0xa1,0xad,0x25,0x15,0x2a,0x90,0x88,0x9a,0x25,0x0c,0x0f,0x49,0xa3 -,0x98,0xa7,0x30,0x14,0x0f,0x27,0x98,0x89,0x95,0xc6,0x18,0x15,0x22,0x70,0x9d,0x9d,0xb6,0x1f,0x14,0x1f,0xa9,0x8f,0x8e,0xab,0x2a,0x1d,0x25,0x59,0xa4,0xb3,0x27,0x13 -,0x12,0x23,0xb5,0x8d,0x8a,0x9f,0x1e,0x17,0x27,0xe5,0xa7,0x97,0xbb,0x14,0x0d,0x17,0xb8,0x8b,0x87,0x97,0x22,0x13,0x1c,0x20,0xcf,0xa2,0xae,0x19,0x0f,0x1b,0xa3,0x8a -,0x8b,0x9b,0x1c,0x16,0x1f,0x2b,0xc2,0xad,0xc9,0x21,0x19,0x34,0xa0,0x8b,0x88,0x9e,0x1f,0x10,0x15,0x39,0xbe,0x68,0x2e,0x29,0x1f,0x2b,0xae,0x92,0x8b,0x9a,0x46,0x11 -,0x11,0x2c,0xcc,0xaa,0x5c,0x2c,0x2c,0x2f,0xa8,0x95,0x91,0x9a,0xf2,0x1b,0x10,0x19,0x3a,0xa7,0x9e,0xc6,0x3a,0x1f,0x37,0xa5,0xa0,0x9d,0xb0,0x39,0x17,0x11,0x29,0xa7 -,0x96,0x9e,0x31,0x18,0x24,0xac,0x9b,0x9c,0xad,0x36,0x1c,0x1d,0x3c,0xa6,0x98,0xa0,0x33,0x12,0x11,0x26,0x98,0x8e,0x9b,0x3d,0x12,0x15,0x23,0x9c,0x8f,0x97,0x4f,0x0a -,0x0a,0x2b,0x93,0x88,0x95,0x3f,0x10,0x15,0x4a,0x9a,0x8e,0xa6,0x27,0x09,0x0b,0x39,0x94,0x89,0x97,0x3f,0x14,0x0d,0x3f,0x95,0x8b,0x96,0x12,0x06,0x08,0x37,0x8c,0x88 -,0x8f,0x39,0x13,0x10,0x26,0x92,0x8c,0xae,0x16,0x0d,0x12,0xde,0xa9,0x94,0x95,0xbb,0x1d,0x16,0x4d,0x9e,0x99,0x63,0x26,0x22,0x20,0x2d,0xac,0x92,0x92,0x4f,0x21,0x17 -,0xea,0x4a,0x4a,0xaa,0xbb,0xef,0x1c,0x2a,0x51,0xa0,0xa2,0x9e,0xaf,0x43,0x1e,0x0d,0x20,0x99,0x8f,0xa9,0x23,0x1b,0x1f,0xcd,0x9f,0x92,0x97,0x33,0x0d,0x0a,0x41,0x94 -,0x92,0xb1,0x22,0x18,0x21,0x2f,0x9a,0x8d,0x91,0x46,0x09,0x0b,0x2e,0x93,0x8e,0x96,0x2e,0x13,0x0b,0x1d,0x92,0x87,0x8d,0x1f,0x0a,0x0d,0x2a,0x8f,0x8b,0x9f,0x17,0x0d -,0x1c,0xac,0x8e,0x94,0xbb,0x21,0x14,0x15,0x2b,0x9b,0x93,0xa0,0x2d,0x0e,0x23,0x5f,0x93,0x96,0xa7,0x53,0x14,0x13,0x21,0x99,0x90,0xa6,0x24,0x19,0x31,0x98,0xa3,0xb0 -,0x7e,0x3a,0x32,0x2a,0x2a,0xea,0xff,0xdc,0x50,0xc0,0x9d,0x38,0x49,0xcb,0x9d,0x9e,0x46,0x1b,0x17,0x2b,0xb4,0xc7,0x96,0xa3,0xb0,0x18,0x28,0xb0,0x9f,0x96,0x2a,0x3a -,0x01,0x04,0x01,0x2c,0x8f,0xa5,0xa5,0x09,0x14,0x94,0x8e,0x8e,0x8a,0xaa,0xd0,0x95,0x9e,0x98,0x84,0x91,0x14,0x56,0x0e,0x28,0x80,0x94,0x9e,0xa6,0x1e,0x14,0x2d,0xd9 -,0x4c,0x0e,0x08,0x00,0x08,0x04,0x0c,0x18,0x20,0x18,0x00,0x18,0x24,0xc8,0x9b,0x9b,0x2f,0x20,0x61,0x3f,0x94,0x97,0x9a,0xa3,0xa0,0x89,0x88,0x8a,0x85,0x8b,0x8d,0x88 -,0x89,0x82,0x8a,0x8e,0x89,0x99,0x8c,0x8d,0x9b,0x1e,0x18,0xac,0x14,0x10,0x08,0x02,0x0c,0x09,0x06,0x15,0x24,0x17,0x0b,0x00,0x0d,0x08,0x03,0x08,0x0e,0x1b,0x18,0x1d -,0x25,0xc2,0x90,0x87,0xb7,0xbb,0x9b,0x8d,0x89,0x8a,0x8b,0x90,0x8a,0x86,0x85,0x86,0x84,0x8b,0x91,0xbc,0x9f,0xd0,0x98,0xb3,0xaa,0x96,0x29,0x37,0x13,0xbe,0xd7,0x14 -,0x0b,0x01,0x05,0x08,0x0c,0x27,0x0c,0x06,0x08,0x0d,0x17,0x11,0x1d,0x0b,0x11,0x2d,0x1f,0xc3,0xbd,0x9a,0x9a,0x96,0x90,0x91,0x9a,0x33,0xaa,0x9f,0x97,0x94,0xaa,0x94 -,0x8d,0x84,0x86,0x8f,0x87,0x85,0x85,0x9a,0x95,0x9b,0x8f,0x91,0x19,0x18,0x31,0x40,0x14,0x17,0x1a,0x0a,0x05,0x05,0x05,0x0b,0x22,0x1a,0x15,0x05,0x0d,0x0d,0x14,0xbd -,0x19,0x28,0x07,0x2c,0xb7,0x9f,0x98,0xf4,0x8f,0xac,0x8e,0x86,0x8c,0x86,0x89,0x8f,0x98,0x8f,0x89,0x8e,0x8b,0x87,0x9f,0xa1,0x29,0x35,0xa5,0x99,0x93,0x17,0x11,0x0d -,0x39,0xec,0xc7,0xa3,0x13,0x06,0x04,0x07,0x50,0xbb,0x23,0x08,0x00,0x00,0x10,0x92,0xb0,0xb9,0x0e,0x08,0x05,0x1d,0x96,0x8d,0x80,0x43,0x09,0x21,0x9c,0x8e,0x80,0x88 -,0x59,0x16,0x10,0x8b,0x80,0x82,0x8f,0x21,0x4d,0x8f,0x88,0x83,0x82,0x88,0xb0,0x0e,0x0d,0xab,0x8b,0xbd,0x31,0x0a,0x05,0x01,0x0c,0x1f,0x18,0x43,0x06,0x03,0x01,0x0f -,0x8e,0xbb,0x0a,0x0d,0x0e,0x19,0x0c,0xaa,0x36,0x5b,0xa8,0x28,0x99,0x23,0x93,0x8f,0x87,0xa9,0xaa,0xa8,0x8c,0x8a,0xa6,0x89,0x84,0x84,0xa2,0x34,0xaf,0x8a,0xb6,0xb8 -,0xd1,0x8d,0xb1,0x09,0x1f,0x8e,0x89,0x9e,0xb8,0x0e,0x00,0x16,0x91,0xa3,0x0b,0x14,0x04,0x06,0x13,0x0e,0x9d,0x38,0xbc,0x02,0x01,0x06,0x36,0x8b,0x29,0xab,0x0b,0x11 -,0x1f,0xac,0x80,0x8b,0x91,0x5a,0x1d,0x30,0x8c,0x80,0x85,0x81,0x3e,0x13,0x8d,0x85,0x8c,0x8f,0xa8,0x8f,0x26,0x22,0xdd,0xb4,0x90,0x9f,0x19,0x0f,0xc6,0x36,0x2f,0x0d -,0xd4,0x26,0x0e,0x08,0x08,0x1d,0xc9,0x1f,0x06,0x0e,0x18,0x15,0x0d,0x66,0x20,0x1d,0x10,0x42,0x1b,0xb1,0xb1,0x22,0x9e,0x3f,0x93,0x9a,0x9d,0xad,0x9d,0x8a,0x92,0x90 -,0x40,0x1d,0x8b,0x88,0x80,0x9d,0x2e,0xdf,0x94,0xa7,0x95,0x81,0x98,0xb9,0x07,0x16,0x92,0x84,0x8d,0x12,0x0f,0x0b,0x07,0x1e,0xdb,0x9d,0x15,0x0c,0x05,0x06,0x0a,0xae -,0x1d,0x06,0x07,0x03,0x14,0x28,0x97,0x5f,0xad,0x24,0x0e,0x23,0x8f,0x8f,0x8f,0x98,0x52,0x9b,0x8e,0x8b,0x8c,0x96,0x88,0x8d,0x91,0x97,0x1e,0x95,0x8f,0x9d,0x9a,0x92 -,0xba,0x14,0x12,0x3f,0x98,0x95,0x32,0x22,0x07,0x09,0xae,0x90,0xb1,0x0e,0x26,0x11,0x2c,0x1d,0x31,0xa3,0x17,0x4d,0x07,0x0a,0x1a,0x4e,0xb8,0x1c,0x1b,0x09,0x12,0xba -,0x91,0x28,0x16,0x3c,0xa3,0x25,0xa5,0xa9,0x98,0x95,0xb3,0x9f,0x98,0x92,0x8c,0x8b,0x93,0x8f,0xa5,0xa3,0xa6,0x80,0x8f,0x96,0xbd,0xcd,0x48,0x3b,0xad,0xb9,0xae,0x13 -,0x14,0x07,0x17,0xb7,0x19,0x0b,0x15,0x1c,0x1a,0x0a,0x0f,0x18,0x3b,0x1b,0x1b,0x18,0x14,0x11,0x22,0xa2,0x13,0xac,0xb4,0x34,0xa7,0x9e,0x9b,0x9e,0x94,0x9c,0xe6,0xa5 -,0x9b,0x8e,0x80,0xb3,0xab,0x9f,0x98,0x8e,0x9c,0x94,0x51,0x9f,0x24,0x0d,0x48,0xae,0xae,0x22,0x23,0xaa,0x1f,0x1c,0x28,0xb5,0xab,0xad,0x17,0x06,0xf8,0x5b,0x1e,0x34 -,0x1e,0x38,0x17,0x11,0x3d,0x26,0xab,0x12,0x1e,0x34,0x14,0x1b,0xb4,0x4a,0x35,0x11,0x19,0xaf,0x99,0x8f,0xa4,0x9e,0x63,0x95,0x52,0x9f,0x83,0x86,0xa4,0x1f,0x57,0x98 -,0x86,0x95,0x9f,0x93,0xa0,0xa9,0xd5,0xaf,0xb1,0x9c,0xc9,0x0f,0x5f,0x9f,0x0c,0x18,0x29,0x10,0x13,0x25,0x1d,0x09,0x3e,0x13,0x0e,0x10,0x2e,0x16,0x20,0x58,0x25,0xcb -,0x29,0x1a,0xae,0x2b,0x1a,0x91,0xb7,0x96,0x3b,0x28,0xa1,0x9f,0x8b,0x8f,0xa2,0x90,0xa5,0xb5,0x9b,0x9c,0x89,0xc5,0xad,0xc5,0xbb,0x8f,0xa3,0x3e,0x98,0xa3,0x3f,0x1a -,0x0a,0xac,0x35,0xb7,0x17,0x12,0x25,0x2c,0xab,0xc3,0x1d,0x10,0x2a,0x0f,0x1f,0x14,0x13,0xb3,0x2a,0x0b,0x15,0x3b,0x1d,0x32,0xb8,0xa0,0xbd,0xc1,0x23,0x1e,0x8b,0x96 -,0x96,0x46,0xc5,0x99,0x94,0x90,0xa8,0x9f,0xa4,0x22,0x3e,0x97,0x92,0x89,0x34,0xce,0x43,0xa1,0xac,0xba,0x9c,0x13,0xaa,0x30,0x23,0x1d,0x1f,0xb7,0x9c,0x3d,0x0d,0x21 -,0x11,0x5c,0xac,0x2c,0x1d,0x35,0x43,0x1f,0x24,0xbf,0x1c,0x2d,0xb0,0x10,0x4b,0xb4,0x24,0x29,0x2f,0x34,0x18,0x62,0x4e,0x24,0x9c,0xae,0xa6,0x19,0x35,0x8a,0x93,0x8e -,0x91,0xa0,0x98,0xc8,0x94,0x8f,0x93,0x92,0x9f,0xbb,0x35,0xc2,0x2b,0xa1,0x3c,0xa8,0x97,0x0c,0x09,0x1c,0x17,0xae,0x2d,0x08,0x0f,0x17,0x1a,0x16,0x30,0xa3,0x0f,0x19 -,0x15,0x16,0x93,0x9d,0x93,0x2d,0x37,0x5a,0x9c,0x88,0x9e,0x9d,0xac,0xa8,0xda,0x1e,0x9e,0xa4,0x95,0x8f,0x2a,0x22,0xaa,0x97,0xaa,0x9a,0x3b,0xae,0x17,0x15,0x3d,0x1c -,0xaa,0xce,0xd4,0x18,0x17,0xad,0xb4,0x2e,0xe5,0x2e,0xba,0xae,0x16,0x2c,0x9b,0x9f,0xb6,0x15,0x1d,0x9b,0xcc,0x9b,0xad,0x28,0x58,0x26,0x58,0x30,0x5a,0xc9,0x33,0x25 -,0x12,0x16,0x1f,0x25,0xde,0xcf,0x9b,0xa6,0x1a,0x21,0x24,0x95,0x95,0xaf,0x1c,0xb7,0x99,0x9a,0x8f,0x9c,0xb1,0x9f,0x97,0x74,0xc6,0x91,0x8c,0x2d,0xc1,0x27,0xda,0xa2 -,0x59,0x1f,0x1f,0x42,0x16,0x0b,0x12,0x4c,0xab,0xc9,0x33,0x0d,0x14,0x3a,0x9f,0x99,0x17,0x0f,0x2e,0xa5,0x2d,0x2b,0x58,0x97,0x9c,0x36,0x3d,0x96,0x9f,0x1e,0x68,0x9d -,0xb4,0x42,0x18,0x17,0x91,0x8c,0xc7,0x36,0x2d,0x3a,0x9e,0x8f,0xab,0x48,0x41,0x2f,0xa4,0x14,0x3a,0xbd,0x98,0xac,0x19,0x3b,0x1e,0x25,0x66,0xc2,0x9e,0x92,0x26,0x16 -,0x1e,0x9d,0x88,0xa7,0x08,0x11,0x2d,0x73,0x9d,0x2c,0x32,0xc5,0x38,0x65,0xaf,0xa1,0x9f,0xd1,0x1f,0x0f,0xbf,0x2d,0x25,0x6c,0x54,0x9e,0xd8,0x37,0x11,0xcc,0x94,0x97 -,0xb4,0x0f,0x22,0x90,0x93,0x9c,0x2a,0x28,0x9f,0x9f,0xdd,0x2c,0xad,0x9e,0xae,0x25,0xec,0xb2,0x9f,0x53,0x24,0x67,0x98,0xad,0x17,0x08,0x0f,0x9e,0xaa,0x38,0x11,0x16 -,0x4f,0x9f,0xaf,0x5f,0xa6,0xed,0x27,0x14,0x19,0x59,0xa6,0xb3,0x29,0x2b,0xe7,0xa3,0x9e,0xa1,0xb2,0xa8,0x2f,0x1e,0xc0,0x9b,0x84,0x98,0x1a,0x0f,0x36,0x8b,0x8d,0xb2 -,0x24,0xb9,0xb5,0x43,0x35,0xbd,0x98,0x95,0xad,0x18,0x1b,0xaf,0xac,0x24,0x1e,0x36,0xe7,0x2e,0x1a,0x25,0x98,0x9d,0x2f,0x18,0x1d,0xa1,0x9b,0x26,0x0c,0x14,0xb3,0xa3 -,0x3d,0x38,0x31,0xa5,0xb8,0x32,0x3e,0x2b,0xc0,0xbe,0x2c,0x31,0xaf,0xec,0x25,0x29,0xd8,0x98,0x9e,0x4f,0x1e,0x37,0x9d,0x94,0xae,0x2c,0x57,0xaf,0xc0,0x3e,0xbe,0xa1 -,0x9d,0x23,0x0c,0x1c,0xa7,0x99,0xa1,0x3a,0x27,0x3c,0x4a,0x28,0xd7,0x99,0xa9,0x1c,0x10,0x1d,0xb9,0x96,0xab,0x35,0x33,0xfa,0x2f,0x2f,0x44,0xa2,0x9b,0x33,0x1b,0x15 -,0x30,0x96,0x98,0x49,0x1f,0x2f,0x55,0x47,0x36,0xb3,0x9f,0xa5,0x2c,0x30,0xc7,0xa1,0x98,0xaf,0x4a,0x38,0xc3,0x26,0x21,0x34,0xb0,0x9e,0xaf,0x20,0x1a,0xac,0x8b,0x9d -,0x24,0x1b,0x29,0x2d,0x2b,0xcb,0xcd,0x99,0xca,0x18,0x1a,0xad,0x9c,0xac,0x4a,0x2b,0xb6,0x48,0x7b,0x3e,0xcf,0xd5,0x49,0x2e,0x24,0x64,0xa3,0x9d,0x38,0xdb,0xac,0xb5 -,0x28,0x2f,0xb5,0x9e,0x9c,0x29,0x32,0xb8,0xbf,0x3e,0x1f,0x7a,0x51,0xc2,0xac,0x2f,0x29,0x34,0x95,0x9a,0x3d,0x2e,0x2f,0x28,0x13,0x28,0xa7,0xbb,0x5a,0x4a,0xd8,0xc2 -,0xb4,0xc4,0xb0,0x19,0x1c,0x5a,0x42,0xc2,0x47,0xb6,0xac,0xad,0x37,0x34,0x21,0xd3,0xb4,0xb9,0xac,0x35,0xb4,0xbc,0x9f,0x9c,0xb2,0xfa,0x16,0x46,0x9e,0xcd,0x21,0x2f -,0xa8,0xa2,0xa4,0x2e,0x1e,0x32,0xb4,0xa6,0xad,0x33,0x27,0x38,0xa7,0xee,0x3e,0xaa,0x30,0x29,0x46,0xd2,0xb8,0x3f,0x1f,0x2f,0x4d,0xbd,0xac,0xae,0x2a,0x1b,0x66,0x98 -,0xc1,0xe4,0xa3,0xd0,0x36,0x1d,0xc6,0xb4,0x4e,0xae,0xb4,0x4c,0x3c,0xb1,0xad,0x44,0x3c,0x6c,0xd4,0x2e,0x33,0xc6,0xcc,0xcb,0xbc,0xa2,0xc0,0xfd,0xbd,0x20,0x1c,0x1e -,0xc3,0x9e,0xae,0x22,0x1f,0xb9,0xab,0xb1,0x57,0xb9,0x1b,0x13,0x31,0x9a,0x9f,0x3d,0xd3,0x20,0x4b,0xb5,0xb3,0xb0,0x24,0x4c,0xaa,0x2b,0x23,0xae,0x8d,0x9a,0x4a,0x48 -,0x1f,0x1d,0x25,0xa2,0xa2,0xc5,0xbc,0xb2,0x63,0x6c,0xb0,0xbf,0x5a,0x1d,0x4c,0xae,0x4f,0x1c,0x30,0x66,0x6c,0xb4,0xb7,0x66,0x19,0x2f,0xb4,0x9f,0x3c,0x24,0x63,0xaf -,0x9a,0xb7,0x51,0x20,0x19,0xb9,0xa5,0x5c,0xc9,0xa2,0xbb,0x1c,0x1f,0xaf,0x96,0xc0,0x24,0x31,0x45,0xb7,0x3a,0x4c,0x9f,0xa7,0x40,0x6e,0x2f,0x26,0xa4,0x9d,0x32,0x22 -,0x59,0xbe,0xcf,0x28,0xf5,0xaa,0xb2,0x3f,0x38,0x36,0x1e,0x2f,0xa7,0x93,0xea,0x17,0x25,0xa5,0x9a,0xbb,0x26,0x1c,0x1c,0x25,0xaf,0xa6,0xa9,0xa5,0xb5,0x3d,0x27,0x1e -,0xab,0x9f,0x47,0xd9,0x5e,0x3e,0x39,0xa2,0xa3,0xdc,0x54,0xae,0x45,0x1d,0xb7,0xaa,0xa1,0x41,0x25,0xeb,0xbc,0x3e,0xaa,0xa8,0x18,0x14,0xe6,0x9c,0xb2,0x37,0x37,0xae -,0xbf,0x3c,0x2e,0x2e,0xfe,0x32,0x41,0x97,0xbe,0x42,0x2e,0x27,0xc6,0x9c,0xa3,0x23,0x1c,0x1a,0xa6,0x9f,0xb2,0x36,0x1a,0x53,0xc3,0xb0,0xb0,0x36,0x2c,0xab,0xa3,0x4a -,0x54,0xad,0xa0,0x28,0x29,0x5a,0x2a,0x44,0x9f,0x97,0x4d,0x21,0x2b,0xa3,0x9c,0x29,0x3a,0x32,0x29,0x40,0xad,0xa3,0x5d,0xcb,0x3d,0xc9,0x24,0x41,0x57,0x27,0x4e,0xaf -,0xa7,0xd2,0x39,0x32,0xb2,0xc0,0xb6,0x39,0x1e,0x17,0x2e,0x9b,0x98,0xa2,0x50,0x28,0x2e,0xb4,0xaa,0xaf,0xcd,0x24,0x2c,0xab,0x44,0x7d,0x9f,0xa0,0xbf,0x19,0x10,0x1e -,0xaa,0xa5,0xa4,0x59,0x24,0xeb,0xaf,0xa7,0x77,0x6b,0x43,0x29,0x2c,0x3d,0x98,0xb2,0x1d,0xba,0xad,0x3d,0xb1,0xbb,0x2d,0x34,0xbc,0xa5,0x45,0x3f,0x3d,0x31,0xc5,0xb3 -,0xb9,0x29,0x16,0x1f,0xa7,0x90,0xbb,0x2c,0x1f,0x33,0xb1,0xe4,0xb4,0x70,0x61,0x28,0x41,0xa8,0x9c,0x9e,0xb7,0xdd,0x18,0x25,0xaf,0xa7,0xee,0x48,0xe8,0x3b,0x52,0xdd -,0xae,0x47,0x46,0x26,0x18,0x1e,0xa8,0x92,0x9f,0xee,0x21,0x1c,0x33,0xa0,0x9a,0xb8,0x14,0x14,0xa0,0x8e,0x72,0x2d,0xdf,0xa8,0xa9,0xcc,0x4b,0x23,0x3a,0x2d,0xbd,0xb9 -,0x44,0xb2,0xc4,0xac,0x63,0x36,0x36,0x2e,0x30,0x2a,0xbf,0xa0,0xa1,0xb3,0x56,0x29,0x2e,0x57,0x39,0x36,0x4c,0x4a,0xab,0x2e,0x3a,0xaf,0xbb,0xc9,0x39,0x43,0x40,0x5c -,0xbf,0xa4,0x4b,0x2f,0x1f,0xb9,0xae,0xae,0xb5,0x24,0x2c,0x2f,0x99,0xac,0x4e,0xbe,0x53,0x31,0x2d,0xa5,0xaa,0x49,0x36,0xd7,0xb5,0xcf,0xa5,0xab,0x2f,0x19,0x25,0xb0 -,0xad,0xaf,0x41,0x33,0xb1,0x9d,0xad,0x22,0x1b,0x2a,0xc3,0xd9,0x4e,0x4a,0xbc,0xbb,0x43,0x2d,0x32,0xba,0xa9,0xb8,0x1e,0x17,0x2f,0xa6,0x96,0xa9,0x29,0xd0,0xb2,0x5f -,0x44,0xbb,0xc4,0x24,0x31,0xb0,0x9c,0xaf,0x55,0x4c,0x2e,0x22,0xe7,0x9f,0xbc,0x3a,0x1a,0x26,0xb5,0xab,0xa2,0xac,0x27,0x1b,0x5a,0xaf,0x2b,0x29,0xb0,0xa4,0xaf,0x39 -,0xb2,0xc7,0x38,0xbb,0xd4,0x39,0x7c,0xb9,0xb5,0x4a,0x1d,0x38,0x72,0xb1,0xcc,0x3e,0xee,0x3c,0xbf,0xba,0xae,0xb9,0x3a,0x26,0x36,0xe3,0xbb,0xb2,0xaf,0x41,0x2c,0xb1 -,0xb1,0x9f,0xa8,0x29,0x11,0x18,0x9d,0x92,0xbf,0x26,0x71,0xb9,0x49,0x3d,0x71,0x4b,0x1d,0x2b,0xc3,0xc7,0xb7,0xb8,0xb3,0x22,0x2a,0xb1,0xac,0xab,0x30,0x2c,0x1f,0x5a -,0xa6,0xaa,0xc0,0xdb,0xab,0x60,0x6e,0x2c,0xd9,0xb7,0x59,0x36,0x5d,0xae,0xb6,0xbc,0xdf,0xf4,0x26,0x2e,0xab,0x9e,0x23,0x1d,0x67,0x9f,0x9d,0x3b,0x37,0x26,0x1c,0xac -,0x95,0xaa,0x38,0x1c,0x41,0x29,0x68,0x9d,0xad,0x34,0x24,0x39,0x4a,0xa9,0xaf,0xb8,0x27,0x1f,0x3a,0xb3,0xac,0x2d,0x5a,0xae,0x5e,0x3a,0xb1,0xaa,0x39,0x2f,0x53,0x33 -,0x1e,0xeb,0x9d,0xa3,0x7b,0x24,0xbe,0x9c,0x9c,0x2e,0x24,0x23,0x28,0x9c,0xab,0xaf,0xbc,0xd0,0xae,0x5f,0xb7,0x44,0x1f,0x14,0x1b,0x9f,0x94,0x9f,0x46,0x2b,0x3d,0x29 -,0x3c,0xa7,0xaf,0x29,0x20,0x48,0x40,0x64,0xc5,0xc1,0x2d,0x38,0xb2,0xb5,0xc0,0xe7,0xba,0x57,0x2f,0x49,0xa8,0xb8,0xba,0xcd,0xd5,0x23,0x23,0xb7,0xac,0xe1,0x26,0x58 -,0xbb,0xad,0xef,0x3a,0x4e,0x66,0x54,0xad,0xa5,0x4b,0x31,0x2c,0x39,0xbb,0xa4,0xa4,0x7e,0x20,0x37,0xbf,0x9e,0x9a,0x37,0x1a,0x17,0x23,0xba,0x9d,0x4f,0x3e,0xc9,0x52 -,0xc5,0xc9,0xbc,0x29,0x25,0x2b,0xbe,0xaf,0xb7,0xbe,0x4f,0xaf,0xce,0xbd,0xc9,0xcd,0xb8,0x4c,0x3e,0x24,0x2d,0xaa,0xaa,0xd2,0xd4,0xaf,0xc7,0x37,0xd4,0xdf,0x25,0x1b -,0x32,0xa2,0xa5,0xaf,0xda,0x2a,0x1d,0x2f,0xa4,0xa7,0x5d,0x1a,0x1a,0xb6,0x99,0xa2,0xc5,0x28,0x2a,0xae,0xa4,0xc9,0x2f,0x36,0x38,0x50,0x72,0xd9,0xbe,0xb2,0x45,0x27 -,0xda,0xb6,0xa8,0xad,0x42,0x1e,0x25,0xad,0xa3,0xb1,0xab,0xbd,0x31,0x23,0xdf,0x9b,0xbf,0x2e,0x21,0x2e,0xbf,0xb8,0xba,0xcd,0x2f,0x2c,0xa6,0xae,0xb8,0xb8,0x24,0x1a -,0x29,0xe7,0xad,0xca,0xf3,0xac,0xc0,0xec,0x5a,0x2d,0x27,0x2d,0x27,0x3b,0xbe,0xaf,0xa7,0xac,0xbe,0x59,0x4c,0xa9,0xad,0x67,0x29,0x17,0x2b,0xaa,0x9a,0xa8,0xaf,0x34 -,0x37,0xa5,0xb8,0xae,0x4b,0x22,0x28,0x1d,0x37,0x99,0x9e,0xca,0x2d,0x35,0xbf,0xb6,0xc8,0x20,0x17,0x32,0xa4,0x9f,0xa8,0xde,0xd0,0x35,0x2a,0x3d,0x2b,0x2e,0x5b,0xcc -,0x27,0xcc,0x9d,0xb0,0x59,0x40,0x47,0xb4,0xad,0x3d,0x58,0x40,0x25,0x43,0xb0,0xa3,0xad,0x44,0x2d,0x36,0xbb,0xb9,0xba,0x55,0x46,0x39,0x2e,0xa7,0xa7,0xa5,0xad,0x2c -,0x2a,0x43,0xd4,0xb1,0x60,0x1c,0x1e,0x32,0xcd,0xad,0xad,0xd8,0x30,0x4b,0xb5,0xb0,0xaa,0x54,0x1f,0x23,0x3e,0x2e,0xb7,0x9e,0xb7,0xb9,0x47,0x3f,0xb7,0xad,0x21,0x24 -,0xc6,0xd2,0xba,0xaa,0xad,0xbc,0xbe,0xcd,0x38,0x2f,0xad,0xb8,0x38,0x19,0x28,0xac,0x9f,0xad,0x36,0x29,0x42,0xba,0xcc,0x57,0x2b,0x20,0x22,0xc8,0xa2,0x9a,0xad,0x75 -,0x32,0x58,0xbb,0x38,0x4d,0x2e,0x26,0x35,0xaf,0xbd,0xad,0xa8,0xbf,0x53,0x38,0x78,0xb6,0xba,0x25,0x2c,0x38,0xb9,0x9e,0xa2,0x45,0x3c,0x3a,0xa9,0xb2,0x5d,0x9a,0x1f -,0x1d,0x23,0xad,0x9c,0x32,0x38,0x2f,0x35,0xc8,0x3f,0xcb,0xcd,0x1a,0x44,0xaf,0xa7,0xb9,0x2c,0xcd,0x31,0x29,0x5d,0xc6,0xb5,0xc4,0x3b,0x11,0x2e,0xa8,0x9a,0x9b,0x5a -,0x1c,0x36,0xaf,0x6b,0xa9,0x38,0x18,0x1a,0xa7,0x98,0x9c,0x9f,0x4d,0x2a,0xcd,0x9e,0xa3,0xd7,0x1d,0x2c,0xe0,0xa3,0x9f,0xf4,0x45,0x34,0x23,0x1f,0x19,0x0e,0x4b,0xaa -,0xb9,0xa3,0xb2,0xc7,0xa8,0xaf,0x9d,0xc0,0x24,0xd8,0xb8,0xac,0xad,0x2a,0x16,0x2c,0xc9,0x93,0x9e,0x2f,0x0e,0x0e,0x10,0x4a,0x8f,0xb4,0xb8,0xe4,0x47,0x96,0x97,0xa7 -,0xcc,0x1d,0xd2,0xaa,0xc8,0xf3,0x27,0x18,0x3a,0xb1,0x9f,0x3d,0x1a,0x0f,0x1a,0x9b,0x93,0x97,0x2e,0x16,0xaf,0xa8,0x54,0xa9,0xcc,0xaf,0xb7,0x60,0x31,0x32,0x2f,0xbe -,0x30,0x2a,0x2c,0x1d,0x25,0x1e,0x9a,0xa4,0xad,0xa6,0x5c,0xba,0xa5,0x31,0x3b,0xad,0xa0,0x99,0x3d,0x1f,0x22,0x1b,0xc9,0xb8,0xd1,0x31,0x11,0x1d,0x38,0x88,0x8d,0x93 -,0x9c,0x1b,0x0f,0x1c,0x1f,0x0f,0xc2,0xbf,0x23,0xad,0x97,0x89,0x95,0x3f,0x20,0x1f,0x35,0x0b,0x0d,0x0f,0xde,0xb1,0x97,0x86,0x8e,0x92,0xaf,0x12,0x18,0x8f,0x8f,0x9a -,0x1a,0x03,0x11,0x2f,0x99,0xaf,0x27,0x67,0x1d,0x29,0x0b,0x1d,0xa1,0x95,0x8d,0x9c,0x8c,0x8a,0xb8,0x2b,0x1c,0x1f,0x9b,0xac,0x22,0x39,0x38,0x42,0x38,0x1c,0x1e,0x3d -,0x49,0x08,0x15,0x2e,0x96,0x85,0x9e,0xb8,0xcb,0xce,0x94,0x8d,0xad,0x9d,0x2b,0x0b,0x25,0x26,0x39,0x29,0x23,0x12,0x30,0x9d,0x4d,0x96,0xd0,0x2e,0x96,0x9a,0xb0,0x79 -,0x0e,0x1e,0x4f,0x95,0x85,0x9b,0x3e,0xd7,0x23,0x1a,0xb1,0x9e,0x2a,0x0f,0x04,0x02,0x31,0x9f,0x88,0x87,0xa6,0xbf,0xab,0x2f,0x1f,0xbf,0x97,0xbd,0x14,0xd0,0x8c,0x93 -,0xc2,0x0b,0x0c,0x29,0xee,0x11,0x1d,0x9b,0x33,0xac,0xab,0xb3,0x8a,0x9a,0x19,0x0b,0x14,0x8d,0x8a,0x30,0x29,0x1d,0x48,0x92,0x90,0xa1,0x1d,0x0d,0x06,0xdf,0x2e,0x18 -,0x9d,0x97,0x8d,0xa3,0x19,0xae,0x9c,0xa1,0x6c,0x11,0x24,0xa3,0x4f,0x1b,0x15,0x1f,0x99,0xa4,0x10,0x1f,0x89,0xae,0x2a,0xba,0x92,0x88,0xf9,0x11,0x1a,0x0f,0x6e,0x99 -,0xa3,0x9d,0x59,0x2b,0x2f,0x17,0x2c,0x40,0x0f,0x08,0x9a,0x84,0x99,0xcc,0x20,0x91,0x89,0x9b,0x2d,0x2a,0x2b,0x3a,0x16,0x2f,0x9e,0xf1,0x3f,0x16,0x0d,0x1a,0xa2,0xbb -,0x6a,0x93,0x27,0x38,0x96,0x87,0x81,0xb7,0x14,0x2b,0x2e,0x16,0x10,0x2c,0x86,0xab,0x1f,0x26,0xad,0x8d,0x93,0x1f,0x0c,0x98,0x9b,0xaf,0x35,0x41,0x87,0x85,0x87,0x88 -,0x8f,0xb0,0x1e,0x09,0x21,0x5b,0x0a,0x0c,0x07,0x00,0x01,0x00,0x0b,0x9f,0x37,0x00,0x09,0x0a,0x16,0x1b,0x0b,0x1b,0x39,0x1e,0x2b,0xc2,0x26,0x95,0x27,0x29,0x9b,0xb8 -,0x32,0x34,0xca,0xa6,0x82,0xeb,0x8e,0x83,0x8b,0x8c,0xa1,0x87,0x80,0x87,0xa2,0x9d,0x9c,0x8d,0x87,0x8d,0x8c,0x98,0x2c,0x20,0x0f,0x1a,0x82,0x8e,0xc8,0xdc,0x4b,0x8d -,0x8e,0x97,0x98,0x2b,0x0c,0x14,0x34,0x1d,0x10,0x18,0x37,0xb2,0x19,0x08,0x13,0x16,0x11,0x17,0x15,0x15,0x1a,0x0e,0x08,0x0c,0x35,0xa2,0x9f,0x23,0x14,0x42,0x2b,0x18 -,0x0e,0x2e,0x3d,0x19,0x18,0x26,0xaa,0xa1,0xb6,0xb7,0xd0,0x21,0x47,0x1f,0x2f,0xb3,0xd1,0x2f,0x21,0x2a,0xb2,0x94,0xd8,0xa5,0x9b,0xa6,0xb0,0x33,0xb5,0xc2,0xb4,0x9a -,0x8a,0x92,0xa7,0x32,0x1b,0x29,0xf4,0x95,0x8b,0x8c,0x90,0x88,0x85,0x84,0x82,0x84,0x97,0x9e,0x9a,0x90,0x86,0x8c,0x8a,0x89,0x89,0x92,0xad,0xb2,0x9c,0x33,0x10,0x0d -,0x0c,0x0c,0x05,0x03,0x01,0x02,0x03,0x04,0x0b,0x0e,0x0c,0x06,0x02,0x06,0x0b,0x10,0x08,0x05,0x0c,0x17,0x38,0xa5,0xa9,0x23,0x11,0x1a,0x33,0x29,0x44,0x29,0x28,0x25 -,0x1e,0xb1,0x9b,0x93,0x8c,0x8b,0x98,0x93,0x8e,0x8f,0x91,0x8c,0x84,0x85,0x8a,0x8d,0x90,0x9a,0xa9,0x36,0x44,0x99,0x8f,0x96,0x9c,0x94,0x92,0x9b,0x9a,0xb7,0x27,0x19 -,0x23,0xb9,0x98,0x9d,0x61,0xb7,0xb2,0xb5,0xab,0x3d,0x20,0x0f,0x10,0x19,0x18,0x1d,0x0f,0x0b,0x16,0x2c,0x2b,0x26,0x2a,0x1b,0x0f,0x0f,0x13,0x1a,0x13,0x10,0x0e,0x19 -,0x22,0x44,0xac,0xaf,0x5d,0x2e,0x33,0x2a,0xe0,0x2f,0x1f,0x1b,0x26,0x12,0x10,0x37,0xac,0xb7,0x2e,0x42,0x5d,0x68,0xca,0xc5,0x24,0x26,0xb9,0x95,0x99,0xa5,0x5b,0x57 -,0x9f,0x8f,0x85,0x84,0x87,0x8f,0x8d,0x87,0x81,0x81,0x85,0x8b,0x94,0x93,0x8f,0x87,0x85,0x8c,0x97,0x9a,0xab,0xc4,0xa0,0xaf,0x2a,0x18,0x08,0x01,0x04,0x09,0x0b,0x07 -,0x07,0x09,0x09,0x0b,0x0d,0x07,0x01,0x02,0x03,0x09,0x06,0x04,0x0a,0x11,0x4f,0xa0,0xaa,0x1e,0x18,0x14,0x19,0xcf,0xb6,0x4a,0x23,0xc5,0xad,0xca,0x9a,0x93,0x8f,0x8e -,0x93,0x93,0x9f,0x94,0x88,0x8e,0x8b,0x8d,0x93,0x99,0x90,0x8e,0x94,0x94,0xb1,0xa1,0x95,0x90,0x8f,0x97,0xa2,0xc8,0x98,0x92,0xae,0x1f,0x2a,0xa8,0xa2,0x99,0xa4,0x37 -,0x2e,0x25,0x1f,0xba,0x65,0x17,0x10,0x1f,0x1d,0x1b,0x13,0x12,0x1a,0x0e,0x24,0x5a,0xdc,0x17,0x32,0x3f,0x17,0x10,0x0a,0x0d,0x0a,0x0c,0x1b,0xac,0xa2,0x6c,0x44,0x38 -,0x16,0x18,0x20,0xb1,0x38,0x0c,0x0f,0x08,0x17,0xa5,0x98,0x9d,0x2e,0x23,0x18,0x26,0x9b,0x9c,0x37,0x1e,0xb7,0x8f,0x8b,0x9a,0xdb,0xa9,0x97,0x8a,0x87,0x8a,0x8b,0x8b -,0x82,0x81,0x81,0x85,0x8b,0x8f,0x8c,0x87,0x87,0x85,0x8c,0x8e,0x8a,0x8c,0xa5,0x4e,0xd4,0x56,0x1a,0x07,0x08,0x07,0x06,0x0c,0x16,0x0e,0x06,0x00,0x05,0x0b,0x0f,0x12 -,0x05,0x02,0x03,0x09,0x0e,0x0d,0x04,0x0c,0x1e,0x3f,0x58,0x36,0x1c,0x1e,0x9d,0x9d,0xf1,0x13,0x0d,0x1c,0xe9,0xea,0xa0,0x97,0x97,0x94,0x8d,0x8a,0x9d,0x9d,0x97,0x90 -,0x8d,0x8d,0x8b,0x91,0x9a,0x8f,0x8c,0x87,0xa4,0xd4,0x9d,0x8f,0x92,0x9f,0x9f,0xa5,0xa0,0x95,0x8d,0x2b,0x16,0x52,0x8f,0x8a,0xa5,0x6f,0xb1,0xdb,0xb7,0x9b,0xa9,0x1a -,0x08,0x11,0x1e,0x2b,0x2e,0x33,0x13,0x0f,0x17,0x1f,0x15,0x0d,0x2f,0x2f,0x21,0x10,0x12,0x16,0x0d,0x0b,0x22,0x2f,0x17,0x1c,0x2b,0xa0,0x3c,0xce,0x3b,0x19,0x15,0x15 -,0x25,0x0f,0x0e,0x23,0x94,0x95,0xdc,0x23,0x2f,0x1e,0x2f,0x99,0xaf,0x2b,0x11,0xbe,0x8c,0x8f,0x90,0x94,0x9a,0x9e,0x9a,0x85,0x85,0x8f,0x8d,0x83,0x83,0x83,0x82,0x88 -,0x8d,0x8d,0x83,0x85,0x96,0xb2,0x92,0x88,0x8e,0x98,0x79,0x2c,0x0f,0x0f,0x15,0x08,0x01,0x04,0x1a,0x1d,0x09,0x08,0x05,0x03,0x07,0x07,0x07,0x05,0x00,0x08,0x1a,0x1a -,0x0e,0x09,0x0d,0x0e,0x12,0xec,0x2d,0x0c,0x1b,0xa5,0x8e,0xa3,0x28,0x22,0x32,0x35,0xac,0x98,0xb6,0x25,0xbd,0x88,0x89,0x86,0x89,0x8e,0x9f,0xbf,0x8c,0x97,0xcd,0x9d -,0x86,0x85,0x8d,0x98,0x95,0x98,0xa5,0x98,0x9c,0xbd,0x21,0x9f,0x8b,0x93,0xa2,0xa8,0xa9,0x36,0x1c,0x51,0x9f,0x52,0x2f,0xad,0x9b,0x9c,0x26,0x0c,0x0d,0x0c,0x18,0x38 -,0x19,0x07,0x0f,0xa9,0x9c,0xe4,0x20,0x18,0x10,0x09,0x0a,0x0c,0x0b,0x0d,0x2a,0xa4,0xc5,0x25,0x54,0x40,0x1a,0x2c,0x2c,0x14,0x07,0x18,0xab,0xbf,0x30,0x2e,0x1f,0x15 -,0x18,0x30,0xbb,0x13,0x1e,0x9d,0x8d,0x8d,0xb8,0xc7,0xac,0x1b,0x4d,0x92,0x9a,0x91,0x89,0x81,0x80,0x81,0x84,0x8a,0x8b,0x8e,0x90,0x8b,0x8f,0x91,0x85,0x80,0x85,0x8c -,0x89,0x88,0x9b,0x5a,0x1e,0x11,0x0b,0x0d,0x0f,0x1b,0x19,0x10,0x0e,0x03,0x02,0x08,0x0d,0x04,0x02,0x0c,0x21,0x17,0x08,0x07,0x05,0x02,0x0a,0x11,0x09,0x0a,0x10,0xb8 -,0x95,0xa6,0xdb,0xbd,0x29,0x1d,0x2f,0x31,0x20,0x24,0x9d,0x89,0x8c,0x8f,0x97,0xa6,0xb2,0xa1,0xa2,0x9e,0x9d,0xc0,0x8c,0x86,0x8b,0x8b,0x8c,0x95,0x99,0x8c,0x94,0xa6 -,0xaa,0x94,0x8a,0x92,0xa3,0xc2,0xb9,0xaa,0x46,0xbd,0xed,0x1a,0x2e,0x8f,0x88,0x90,0xb5,0x2c,0x19,0x1d,0x2e,0x1e,0x0d,0x0a,0x29,0xa8,0xb2,0x2a,0x1f,0x24,0x17,0x0d -,0x0c,0x0b,0x0b,0x0b,0x1f,0xdd,0x33,0xd0,0xef,0x13,0x16,0x1d,0x12,0x11,0x12,0x1a,0xc3,0x9f,0x28,0x1d,0x28,0x1e,0x1e,0x15,0x0b,0x07,0x1c,0x9e,0x9b,0xa6,0x5f,0xbd -,0xaf,0xaa,0x37,0x31,0xbf,0x37,0x9c,0x8b,0x8c,0x8b,0x86,0x85,0x87,0x8b,0x8e,0x8b,0x8b,0x8a,0x86,0x82,0x82,0x85,0x88,0x85,0x8a,0x98,0x9f,0xa7,0x99,0x9c,0x9e,0x9f -,0x23,0x1a,0x0f,0x0d,0x0a,0x02,0x03,0x04,0x0b,0x0c,0x0e,0x13,0x0b,0x0d,0x0d,0x08,0x07,0x04,0x04,0x06,0x0d,0x11,0x0e,0x0e,0x2a,0x2f,0x26,0x18,0x10,0x21,0x3a,0xd6 -,0x42,0xa5,0xae,0x9f,0x9e,0xa9,0xa6,0xbe,0xbb,0xaf,0xab,0x9f,0x8d,0x8e,0x8f,0x9c,0x99,0x8d,0x98,0xb3,0xb6,0x99,0x8c,0x88,0x86,0x86,0x8a,0x8a,0x91,0xa5,0x48,0x22 -,0x38,0xb2,0xc6,0xaf,0x9e,0x9c,0x96,0x9b,0x9f,0xc6,0x34,0x43,0x1d,0x19,0x35,0x49,0x3e,0x4c,0x28,0x30,0x34,0x17,0x18,0x12,0x0f,0x17,0x1e,0x1a,0x0e,0x15,0x2b,0x19 -,0x10,0x0d,0x10,0x1c,0x2d,0x45,0xa6,0x9a,0xac,0xa8,0x52,0xc8,0x1e,0x11,0x18,0x33,0xab,0xc1,0xaf,0xa1,0x93,0x98,0xa0,0x7d,0xd5,0xda,0xae,0xaa,0xcf,0x9c,0x99,0x8e -,0x96,0xce,0x36,0xbf,0xad,0xa0,0x6e,0x2d,0xa6,0xaf,0x4a,0x42,0xce,0xb9,0x3e,0x23,0x27,0x29,0xbf,0xaf,0x9d,0x9d,0xa8,0x9b,0xb0,0x2b,0x1d,0x10,0x16,0x28,0x1c,0x2c -,0x31,0xaf,0x91,0xa7,0xbd,0x3a,0x1f,0x3c,0x18,0x1c,0xe7,0xc5,0x9e,0xa2,0xad,0xcb,0x56,0x4c,0x22,0x27,0x4f,0x36,0xd7,0xb4,0xae,0x92,0x96,0x9c,0xa5,0x37,0x1c,0x22 -,0xcf,0xa3,0x9b,0x99,0xa0,0xa0,0xaa,0x33,0x2c,0x1f,0x23,0x23,0x33,0x27,0xb7,0xa6,0x97,0x8f,0xad,0xea,0x1b,0x22,0x1c,0x12,0x0f,0x1d,0x6b,0xa8,0x36,0x19,0x20,0x28 -,0x20,0x0f,0x0a,0x12,0x42,0x20,0x18,0x27,0x28,0x2c,0x27,0x1e,0x18,0x12,0x29,0xbe,0x9d,0xa3,0xa1,0x8f,0x9c,0xab,0xd3,0xb6,0xa1,0x9a,0xa4,0x98,0x8e,0x8a,0x83,0x84 -,0x84,0x8d,0x96,0x9d,0x9e,0x9f,0x97,0x90,0x94,0x8d,0x95,0xa9,0xbe,0xad,0xb7,0x48,0x21,0x19,0x2d,0x29,0x1e,0x48,0xf1,0x45,0x39,0x1c,0x20,0x1d,0x13,0x19,0x3b,0x36 -,0x34,0x34,0x22,0x1a,0x0e,0x0e,0x12,0x19,0x16,0x11,0x15,0x4b,0x93,0x99,0x45,0x29,0x25,0x2d,0x25,0x1f,0x3d,0xbb,0x9b,0x9d,0xa3,0xaf,0xbb,0xa7,0xa5,0x5b,0x1c,0x23 -,0x39,0x3f,0x3c,0x26,0x17,0x15,0x12,0x0e,0x05,0x06,0x08,0x0d,0x1b,0x14,0x10,0x13,0x1a,0x1b,0x25,0x1d,0x32,0x47,0x33,0xb1,0x9d,0x8e,0x87,0x8a,0x94,0x9d,0x96,0x95 -,0x9b,0x9d,0x8e,0x87,0x86,0x85,0x8c,0x8d,0x8b,0x87,0x8b,0x91,0x96,0x91,0x8a,0x8e,0x8d,0x8e,0x92,0x91,0x9d,0xbb,0x4f,0x1b,0x1b,0xd9,0xaf,0xbc,0x33,0x3b,0x29,0x1c -,0x11,0x0a,0x0c,0x0b,0x09,0x0a,0x16,0x1b,0x1d,0x39,0x24,0x12,0x13,0x14,0x0b,0x11,0x18,0x19,0x20,0x29,0x20,0x1e,0x24,0x22,0x2f,0x27,0x1a,0x12,0x34,0xee,0xb6,0x9c -,0x9c,0xac,0xec,0xbb,0x58,0x45,0xb6,0x9c,0x9c,0xa2,0xb1,0x9e,0xae,0xc8,0xc9,0xdc,0xd4,0x48,0x29,0x2d,0xd4,0xa8,0x9c,0xad,0xaa,0xb6,0xbf,0x31,0x2c,0x46,0xa6,0x95 -,0x8f,0x90,0x94,0x8f,0x8c,0x84,0x83,0x83,0x86,0x88,0x86,0x85,0x83,0x85,0x89,0x8f,0x9d,0x54,0x24,0x27,0x1f,0x10,0x0c,0x0a,0x06,0x06,0x06,0x04,0x05,0x03,0x02,0x05 -,0x05,0x07,0x07,0x0b,0x0f,0x13,0x11,0x0d,0x0f,0x1a,0x16,0x15,0x17,0x19,0x2a,0x26,0x37,0xd3,0xac,0xa4,0xa8,0xb8,0xcd,0xa3,0x9b,0x9f,0x9f,0x97,0x90,0x91,0x96,0x96 -,0x97,0x93,0x8f,0x8c,0x8c,0x92,0x99,0x99,0x98,0x98,0x9a,0x9f,0xa3,0xc6,0xea,0xc8,0xbd,0xaa,0xc1,0xdc,0x49,0x29,0x25,0x3e,0x36,0x2c,0x2d,0x2c,0x27,0x29,0x29,0x2f -,0x4f,0x3d,0x7a,0x2e,0x31,0x31,0xe4,0xc4,0xd0,0xdd,0x30,0xd3,0xc8,0x59,0x33,0x24,0x2d,0x6e,0xc1,0x5c,0x2b,0x2d,0x44,0x5f,0x2f,0x27,0x1c,0x23,0x34,0x2b,0x2e,0xbc -,0xb8,0x3b,0x1e,0x15,0x1c,0x2a,0x2c,0x16,0x17,0x14,0x1d,0x23,0x1e,0x37,0xbb,0xac,0xa3,0x9d,0x9a,0x8e,0x8b,0x8a,0x87,0x85,0x85,0x83,0x83,0x84,0x83,0x86,0x8b,0x8c -,0x8c,0x8a,0x91,0xa0,0xbd,0x45,0x51,0x36,0x18,0x0b,0x08,0x08,0x0a,0x0a,0x07,0x06,0x07,0x08,0x0a,0x09,0x0a,0x0b,0x0c,0x0c,0x0d,0x0b,0x0b,0x0f,0x19,0x26,0x30,0x2e -,0x28,0x29,0x35,0xbe,0xdf,0xc7,0x78,0xd1,0xa7,0x9d,0x9c,0x9d,0x9c,0x91,0x95,0x9f,0xa1,0x9a,0x93,0x93,0x95,0x9d,0x97,0x95,0x96,0x99,0x93,0x97,0x91,0x93,0x9c,0x9d -,0x9e,0x97,0xa1,0xa8,0xa0,0x9f,0xa1,0xab,0x3f,0xae,0xa0,0xae,0x73,0x3e,0x5c,0x4d,0x49,0x2d,0x31,0x43,0x36,0x1f,0x18,0x1d,0x38,0x2b,0x16,0x0e,0x10,0x16,0x14,0x13 -,0x1b,0x21,0x1b,0x17,0x13,0x16,0x1e,0x1a,0x16,0x14,0x1e,0x29,0x2f,0x31,0x2f,0x4b,0x1f,0x1f,0x1c,0x1d,0x1e,0x19,0x2c,0x42,0x33,0x3a,0xc3,0x53,0xe0,0x53,0x5c,0xb5 -,0xa6,0xb6,0xc7,0x97,0x8b,0x87,0x87,0x87,0x86,0x83,0x82,0x85,0x85,0x84,0x83,0x83,0x83,0x85,0x85,0x87,0x91,0x9f,0xa4,0xb4,0x2c,0x14,0x0a,0x09,0x0d,0x0c,0x09,0x07 -,0x05,0x07,0x04,0x04,0x08,0x0d,0x0b,0x09,0x0c,0x0d,0x0f,0x1b,0x1d,0x0f,0x0e,0x0e,0x16,0x1a,0x26,0x24,0x3f,0x73,0x2f,0xbf,0xaa,0xac,0xca,0xab,0xac,0x9d,0x94,0x9c -,0xa0,0x9a,0x99,0x9e,0x97,0x94,0x9b,0x93,0x93,0x9a,0x9b,0x9a,0x98,0x9d,0x9d,0xb2,0xc6,0xac,0xaf,0xa0,0x97,0x98,0xa1,0xa3,0x9e,0xb7,0xce,0x4b,0x56,0xd1,0x4b,0x65 -,0xe2,0xc2,0xbe,0xd0,0x5a,0x3d,0x1c,0x0e,0x14,0x1b,0x23,0x29,0x21,0x2e,0x3b,0x4e,0x2a,0x1f,0x2a,0x1f,0x19,0x10,0x14,0x21,0x2f,0xdd,0x34,0x2a,0x21,0x1f,0x2f,0x26 -,0x1d,0x24,0x21,0x25,0x6c,0xc7,0xcc,0xcc,0x21,0x16,0x1c,0x19,0x1e,0x18,0x1c,0x39,0xbf,0xae,0xa4,0xaa,0xa4,0x9b,0x91,0x8c,0x8a,0x87,0x88,0x84,0x84,0x81,0x82,0x81 -,0x84,0x89,0x8a,0x8a,0x8d,0x8d,0x95,0xae,0xac,0x35,0x1b,0x17,0x18,0x10,0x09,0x07,0x05,0x07,0x0b,0x0d,0x0b,0x07,0x04,0x07,0x0a,0x0a,0x0d,0x11,0x13,0x0f,0x18,0x20 -,0x29,0x23,0x16,0x0f,0x16,0x2a,0x43,0x47,0x38,0xc1,0xa1,0x98,0x9d,0xb5,0xb9,0x66,0xb0,0x9e,0xa1,0x9c,0x92,0x8e,0x91,0x90,0x8e,0x8f,0x9a,0xa3,0xa7,0xa3,0x9d,0x8f -,0x93,0x92,0x8d,0x97,0xa7,0x9f,0x98,0xa4,0xc0,0x4c,0x3c,0xa2,0x97,0x9a,0x9f,0xa6,0x4b,0x26,0xe3,0x28,0x28,0x21,0x26,0x36,0x5b,0x3f,0x3a,0xbc,0x3f,0x22,0x1c,0x18 -,0x13,0x10,0x12,0x22,0x40,0x48,0x1d,0x14,0x13,0x13,0x19,0x2a,0x1a,0x1d,0x1e,0x16,0x22,0x35,0xae,0x36,0x1b,0x1a,0x18,0x1f,0x2b,0x21,0x1a,0x22,0x23,0x28,0x27,0x2c -,0xd1,0xc7,0xc5,0x37,0x56,0x9c,0x8e,0x8a,0x8b,0x8b,0x8b,0x87,0x84,0x84,0x83,0x83,0x84,0x84,0x82,0x83,0x83,0x8b,0x9b,0xa5,0xa1,0x9d,0x4e,0x1c,0x12,0x14,0x1a,0x14 -,0x0d,0x05,0x04,0x02,0x03,0x06,0x08,0x0b,0x07,0x0a,0x0d,0x12,0x15,0x0d,0x0f,0x0d,0x0c,0x0f,0x11,0x1d,0x2b,0xdd,0xb1,0xda,0x2f,0x49,0xc2,0xd6,0x47,0x2a,0x40,0x9e -,0x8c,0x8f,0x91,0x92,0x9d,0x97,0x99,0x98,0x9e,0x9d,0x9e,0x9c,0x8d,0x8b,0x8d,0x93,0xa0,0xaa,0x9b,0xa4,0xbc,0xcf,0xe9,0xab,0x8f,0x8f,0x9e,0x4b,0xc3,0xa5,0xa5,0xb1 -,0x57,0x3a,0x3a,0xce,0x4d,0x9f,0xad,0xc2,0xd0,0x23,0x20,0x17,0x20,0x18,0x20,0x28,0x1f,0x1e,0x1a,0x29,0x32,0x28,0x19,0x1a,0x14,0x20,0x2b,0x26,0x1b,0x10,0x17,0x1b -,0x2b,0x1e,0x14,0x14,0x17,0xb1,0xc2,0x3b,0x26,0x14,0x17,0x1c,0x62,0x35,0x1f,0x1f,0x4e,0x59,0x4f,0xa9,0xa3,0xab,0xab,0xa3,0xa7,0x97,0x8b,0x87,0x83,0x82,0x81,0x82 -,0x81,0x81,0x84,0x84,0x85,0x89,0x8b,0x8b,0x8b,0x90,0x97,0xaa,0x2f,0x25,0x23,0x0e,0x03,0x02,0x07,0x11,0x17,0x0e,0x09,0x06,0x08,0x0e,0x09,0x08,0x08,0x04,0x0c,0x13 -,0x19,0x15,0x13,0x1b,0x27,0x2a,0x20,0x1a,0x10,0x12,0x2e,0x7e,0xc1,0xcf,0x3e,0x9e,0x98,0xa4,0xbd,0x2a,0x39,0xb2,0xa0,0x96,0x9b,0x98,0x91,0x96,0x91,0x90,0xa1,0xc3 -,0x3e,0xad,0x8c,0x8a,0x90,0xc8,0x2f,0x97,0x8a,0x8d,0x9e,0xb2,0xa8,0x91,0x93,0xa2,0xad,0xd8,0x56,0x2f,0xa0,0x9b,0x9b,0x98,0x2e,0x17,0x3a,0xb0,0x98,0x9d,0x1f,0x17 -,0x14,0x1e,0xcc,0x1b,0x0e,0x03,0x0c,0xbf,0x9c,0x92,0x19,0x02,0x06,0x1a,0x9f,0xa1,0x0f,0x0c,0x11,0x43,0x9c,0x15,0x01,0x00,0x10,0xa0,0x88,0x9a,0x0c,0x06,0x0c,0xaa -,0x87,0xac,0x12,0x07,0x0e,0x97,0x8c,0x1e,0x05,0xae,0x83,0x80,0x80,0x8a,0x37,0xc9,0x86,0x80,0x80,0x85,0x8c,0x8f,0x80,0x86,0x90,0x11,0x1e,0x82,0x80,0x8e,0x00,0x1e -,0x0c,0x0a,0x8f,0x2e,0x0d,0x03,0x01,0x05,0x11,0x0b,0x00,0x04,0x00,0x19,0x99,0x06,0x00,0x01,0x00,0x17,0x3f,0x07,0x02,0x00,0x0a,0xf2,0x1e,0x09,0x00,0x9d,0x80,0x80 -,0x86,0x9f,0x8c,0x94,0x8a,0x80,0x81,0x80,0x87,0x87,0x80,0x81,0x89,0xe5,0x88,0x80,0x81,0x80,0x97,0x28,0x24,0x87,0x80,0x84,0x8a,0xab,0xb3,0x8a,0x95,0x14,0x00,0x08 -,0x8e,0x83,0x88,0x0d,0x00,0x02,0x01,0xbc,0x22,0x02,0x02,0x00,0x08,0x0c,0x01,0x00,0x00,0x04,0x55,0x98,0x0a,0x00,0x01,0x00,0x0b,0x41,0x0e,0x01,0x02,0x06,0x1d,0x05 -,0x02,0x00,0x2b,0x88,0x80,0x93,0x04,0x03,0x12,0x8b,0x80,0x83,0x82,0x8e,0x8a,0x81,0x89,0xa9,0x21,0x8c,0x80,0x81,0x80,0x8e,0x1c,0xc0,0x82,0x80,0x80,0x80,0x83,0x83 -,0x81,0x80,0x88,0x9d,0x86,0x80,0x81,0x80,0x89,0x6f,0x1d,0x91,0x80,0x80,0x82,0x88,0xa3,0x92,0x96,0xba,0x0d,0x08,0x93,0x89,0x85,0x17,0x00,0x02,0x00,0x2b,0x9c,0x0d -,0x04,0x01,0x01,0x04,0x00,0x01,0x00,0x08,0x1d,0xfc,0x0b,0x00,0x01,0x00,0x08,0x25,0x0d,0x03,0x00,0x00,0x05,0x00,0x02,0x00,0x0f,0xb9,0xa0,0x39,0x00,0x01,0x00,0x0b -,0x96,0x9c,0xc7,0x11,0x07,0x12,0x12,0x29,0x0a,0xbc,0x85,0x85,0x84,0x1e,0x06,0x0a,0x99,0x80,0x81,0x83,0x8b,0x9e,0x99,0xb0,0xa8,0x9c,0x8c,0x80,0x83,0x80,0x8e,0x2a -,0x1e,0x91,0x80,0x80,0x80,0x87,0x9f,0x9d,0x8f,0x8f,0x90,0x91,0x80,0x81,0x80,0x86,0xc9,0x1c,0x9f,0x80,0x80,0x80,0x86,0x9e,0xaa,0x98,0xa7,0x95,0xc1,0x89,0x8f,0x8c -,0xae,0x00,0x01,0x06,0x94,0x87,0x91,0xb4,0x1e,0x08,0x0f,0x17,0xc6,0x42,0x8f,0x81,0x84,0x85,0x12,0x0b,0x1e,0x88,0x80,0x81,0x88,0xc0,0x11,0xc5,0x92,0x8c,0x9b,0x8f -,0x80,0x85,0x86,0x10,0x07,0x05,0x39,0x84,0x87,0xac,0x09,0x00,0x02,0x04,0x08,0x05,0x06,0x1c,0x0d,0x0d,0x01,0x00,0x00,0x01,0x2f,0x39,0x06,0x00,0x00,0x00,0x00,0x01 -,0x01,0x00,0x0e,0x0c,0x0a,0x01,0x00,0x00,0x00,0x3a,0xa5,0x09,0x00,0x00,0x00,0x02,0x08,0x0a,0x00,0x1e,0x2b,0xb8,0x0c,0x00,0x00,0x04,0x8e,0x81,0xa6,0x0c,0x02,0x12 -,0x9f,0x95,0x8b,0x5b,0x89,0x81,0x80,0x8a,0x0d,0x14,0x99,0x80,0x81,0x80,0x84,0x96,0xa2,0x85,0x80,0x80,0x83,0x81,0x80,0x80,0x80,0x92,0x89,0x80,0x80,0x80,0x80,0x80 -,0x8e,0x98,0x80,0x82,0x80,0x8e,0x8c,0x80,0x82,0x82,0x0d,0x08,0x14,0x91,0x80,0x88,0x2e,0x04,0x00,0x13,0xd0,0x9e,0x0f,0x09,0xac,0x30,0xa7,0x03,0x00,0x00,0x12,0x86 -,0x95,0x0f,0x01,0x00,0x04,0x10,0xd9,0x0e,0x00,0x1b,0x13,0xca,0x07,0x00,0x00,0x0b,0x8c,0x8e,0x1a,0x03,0x00,0x05,0x17,0xcb,0x23,0x00,0x2c,0x2f,0x9f,0x1a,0x00,0x03 -,0x07,0x8e,0x85,0xbb,0x0b,0x00,0x07,0x30,0xaf,0x9c,0x01,0x1b,0x77,0xae,0xbd,0x00,0x05,0x06,0x92,0x80,0x91,0x1d,0x04,0x06,0x56,0xb3,0x88,0x1f,0x1e,0x8e,0x98,0x82 -,0x17,0x0d,0x1b,0x8f,0x80,0x87,0x9b,0x21,0x0f,0xca,0x9f,0x84,0x94,0x11,0x8d,0x8e,0x82,0x2b,0x01,0x14,0xa2,0x80,0x85,0x95,0x29,0x05,0x1f,0x8c,0x82,0x83,0x48,0x87 -,0x80,0x80,0x85,0xb3,0x8b,0x84,0x80,0x80,0x80,0x8b,0x1c,0xc0,0x88,0x89,0x8c,0x07,0x14,0xe9,0x27,0x2a,0x00,0x03,0x00,0x19,0x97,0x19,0x02,0x00,0x00,0x05,0x0c,0x29 -,0x09,0x04,0x30,0x22,0xcb,0x06,0x01,0x0b,0x51,0x81,0x8f,0x5e,0x0f,0x09,0xba,0x93,0x86,0x8c,0x2a,0x89,0x8a,0x83,0x9a,0x19,0x9f,0x8b,0x80,0x81,0x84,0x9a,0x23,0x9c -,0x84,0x84,0x80,0xb2,0x8b,0x85,0x84,0x8c,0x17,0x3e,0xa9,0x85,0x80,0x8b,0xd3,0x06,0x11,0xba,0x9b,0x86,0x1e,0x28,0xba,0xad,0x9d,0x05,0x09,0x13,0x97,0x83,0xaa,0x18 -,0x04,0x03,0x19,0xbc,0x89,0x14,0x0b,0xaf,0xa9,0xa0,0x04,0x05,0x0e,0xd1,0x84,0x92,0x2c,0x06,0x00,0x1a,0xb9,0x94,0x0f,0x08,0xb4,0x3d,0x4a,0x04,0x02,0x07,0x1f,0x85 -,0x96,0x16,0x04,0x00,0x21,0xa5,0x86,0x9b,0xb6,0x80,0x87,0x80,0x98,0xa1,0x88,0x85,0x80,0x81,0x80,0x99,0x36,0x8b,0x8b,0x81,0x9c,0x2b,0x90,0xca,0xc8,0x05,0x00,0x03 -,0x0e,0x8c,0xb2,0x09,0x04,0x00,0x0a,0x0f,0xa8,0x15,0x08,0xb1,0x24,0x54,0x05,0x03,0x0d,0x35,0x81,0x8f,0x2f,0x0b,0x02,0x2c,0x43,0x8d,0x43,0x30,0x8b,0x9c,0x95,0x0b -,0x0e,0x53,0x8e,0x80,0x8b,0xaa,0x14,0x0d,0xa8,0x97,0x89,0xb9,0x9c,0x85,0x8e,0x94,0x09,0x10,0x35,0x8e,0x80,0x8b,0xae,0x0a,0x16,0xbd,0xb7,0xa6,0x2d,0x92,0x94,0x9f -,0x2d,0x02,0x07,0x1a,0x88,0x82,0xb7,0x0f,0x05,0x15,0x17,0x26,0x27,0x2e,0x94,0x9b,0x9e,0x0c,0x00,0x04,0x29,0x83,0x8d,0x5a,0x09,0x06,0x12,0x16,0x2a,0x0e,0xc5,0x94 -,0x98,0x2e,0x00,0x02,0x07,0x99,0x82,0x9b,0x16,0x01,0x0b,0x1a,0x2a,0x1f,0x2d,0x87,0x82,0x84,0xad,0x1b,0xaf,0x87,0x80,0x81,0x80,0x8c,0x8c,0x82,0x81,0x83,0x93,0x87 -,0x81,0x80,0x94,0x09,0x05,0x08,0xac,0x94,0x46,0x0c,0x00,0x04,0x05,0x09,0x02,0x04,0x1b,0x7b,0xd5,0x07,0x00,0x02,0x0e,0x9e,0xa9,0x1f,0x07,0x07,0x14,0x2d,0x1a,0x19 -,0x4d,0x99,0x8e,0x31,0x0d,0x07,0x23,0x8f,0x89,0x8b,0xbd,0x32,0xd7,0x97,0x9e,0xa8,0x8c,0x89,0x87,0xb3,0x4f,0x6f,0xaa,0x89,0x8b,0x8b,0xab,0x2a,0x3f,0x9f,0xba,0xb7 -,0x8a,0x83,0x8e,0x12,0x0a,0x1e,0xa5,0x90,0x97,0x9f,0x1f,0x17,0x27,0xc1,0x23,0x1c,0x97,0x89,0x97,0x08,0x00,0x0a,0xad,0x86,0x8e,0x5f,0x0b,0x06,0x0c,0x27,0x18,0x30 -,0xa1,0x92,0x99,0x0a,0x02,0x03,0x25,0x8d,0x8f,0x2c,0x05,0x03,0x05,0x0e,0x2f,0xa7,0xac,0x65,0x0c,0x03,0x03,0x06,0x24,0x9b,0x8e,0x97,0xaf,0x2c,0xcf,0xa4,0x8b,0x80 -,0x81,0x80,0x8f,0x98,0x88,0x82,0x80,0x81,0x83,0x8b,0x8f,0x9f,0x34,0x15,0xc3,0x91,0x8c,0xd8,0x00,0x02,0x00,0x1b,0x3d,0x10,0x04,0x03,0x06,0x0d,0x0b,0x06,0x23,0x3f -,0xc7,0x0e,0x03,0x02,0x14,0x9e,0x94,0xa7,0x14,0x14,0x12,0x18,0x13,0x9b,0x8a,0x8d,0xb2,0x0c,0x1a,0x4f,0x8b,0x84,0x8a,0xc9,0x55,0x36,0xcb,0x24,0xef,0x82,0x82,0x84 -,0x18,0x0a,0x12,0x97,0x83,0x88,0x93,0x33,0x2f,0xb9,0xab,0x19,0x8f,0x8c,0x81,0xa8,0x05,0x06,0x13,0x8b,0x88,0x8a,0x6e,0x21,0x0b,0x11,0x0d,0xad,0x95,0x94,0xac,0x05 -,0x15,0x0c,0x9e,0x9b,0xa0,0x3b,0x35,0x10,0x0d,0x05,0x0f,0x89,0x8c,0x91,0x05,0x05,0x02,0xb9,0xa0,0x73,0x19,0x0c,0x19,0x18,0x0e,0x04,0xbb,0xbf,0x8e,0x0d,0x02,0x00 -,0x10,0x9d,0x8b,0x8f,0x50,0xb6,0x2b,0x94,0x9b,0x80,0x83,0x80,0x8b,0x8e,0x85,0x88,0x80,0x82,0x81,0x86,0x87,0x4f,0x30,0x06,0x9f,0x89,0x88,0x4c,0x00,0x02,0x01,0xec -,0x17,0x0e,0x02,0x08,0x07,0x0d,0x00,0x0a,0x17,0xae,0x93,0x03,0x05,0x00,0x29,0x9c,0x88,0xe0,0x26,0x0f,0x12,0x13,0x3a,0x95,0xa7,0x90,0x18,0xa1,0x1b,0x9b,0x93,0x8b -,0x8c,0x91,0xa3,0x1d,0x0f,0x15,0x82,0x84,0x80,0x23,0x1f,0x13,0x94,0x89,0x8f,0x97,0x5e,0xa2,0xa7,0x70,0x0d,0x95,0x91,0x80,0xa4,0x1f,0x07,0x12,0x9b,0x8a,0x89,0xa9 -,0xee,0x13,0x2d,0x0b,0x9c,0x35,0x8e,0x21,0x19,0x29,0x11,0xaa,0x25,0x9f,0xb9,0x9b,0x0f,0x13,0x00,0x31,0x97,0x86,0xa7,0x02,0x0b,0x0a,0x8e,0x3e,0x29,0x08,0x10,0x19 -,0x2f,0x05,0x0c,0x25,0xab,0x8c,0x05,0x05,0x00,0x1b,0xa6,0x8a,0xae,0x28,0x28,0xd1,0x9f,0x91,0x80,0x87,0x80,0x92,0x84,0x89,0x84,0x81,0x81,0x81,0x80,0x89,0x9e,0x2f -,0x0e,0x8a,0x88,0x80,0x17,0x04,0x02,0x10,0x3e,0x0a,0x0b,0x01,0x08,0x0a,0x15,0x00,0x0e,0x09,0x9a,0xab,0x04,0x04,0x02,0x29,0x47,0x98,0x20,0x24,0x0e,0x29,0x15,0x9f -,0x34,0x5a,0xb0,0x13,0x9c,0x2b,0x90,0xa4,0x90,0x96,0x89,0xa3,0x2d,0x0d,0x30,0x83,0x84,0x84,0x14,0x2c,0x1d,0x88,0x88,0x94,0x3b,0x2f,0xa0,0x99,0xab,0x0e,0x98,0x99 -,0x80,0xad,0x15,0x03,0x12,0xa3,0x90,0x8b,0x3b,0x31,0x12,0x31,0x0f,0x9b,0x2f,0x9b,0x3a,0x14,0x32,0x10,0x4f,0x29,0x9f,0xb1,0x98,0x0f,0x0b,0x00,0x2e,0x93,0x87,0x9f -,0x04,0x12,0x0f,0x8d,0x9f,0x2e,0x0f,0x2c,0x36,0xad,0x0b,0x0f,0xa6,0x91,0x82,0x16,0x0d,0x00,0x61,0x8f,0x87,0x92,0x44,0x2e,0x57,0x2c,0x27,0x8f,0xaa,0x84,0x2e,0x2b -,0x18,0x2e,0x98,0x93,0x89,0x9c,0x96,0x18,0x13,0x09,0x93,0x8a,0x80,0xa6,0x0f,0x1d,0x28,0x88,0x9a,0xa1,0x26,0xa1,0xdb,0xbe,0x06,0x0f,0xaa,0x8d,0x88,0x0e,0x08,0x00 -,0x3f,0xa6,0x91,0x38,0x18,0x13,0x23,0x0f,0x0d,0x3f,0x1a,0x8e,0x19,0x1e,0x0b,0x16,0x57,0x9b,0x90,0xaf,0xb5,0x10,0x18,0x0e,0x8c,0x8b,0x80,0xb8,0x1c,0x58,0x45,0x87 -,0x9b,0x8f,0xa4,0x8e,0xaa,0xb0,0x08,0x1e,0x88,0x83,0x83,0x17,0x0c,0x05,0x98,0x8f,0x87,0x99,0xb8,0xb2,0xbc,0x2a,0x0c,0xa8,0xb8,0x80,0xc1,0x1e,0x0a,0x0d,0x7e,0x9b -,0x8f,0xd8,0x64,0x03,0x0f,0x00,0x4c,0xae,0x94,0xf4,0x0b,0x18,0x09,0xb0,0x18,0x5f,0x29,0xa4,0x1b,0x13,0x01,0x0a,0x90,0x8f,0x86,0x09,0x06,0x02,0xbc,0xa2,0x9b,0x39 -,0x1f,0xaf,0x29,0x28,0x02,0xb3,0x9e,0x80,0x9a,0x20,0x13,0x15,0x89,0x87,0x84,0x95,0x93,0x1a,0xae,0x18,0x9e,0x83,0x84,0x83,0x68,0xc0,0x16,0x95,0xa3,0x8c,0x8e,0x8d -,0xac,0x16,0x08,0x05,0x8c,0x8c,0x81,0x19,0x02,0x03,0x14,0xb6,0xbe,0xee,0x1f,0xaa,0x0c,0x0b,0x00,0x0c,0xba,0x88,0x8f,0x09,0x07,0x03,0xba,0x9c,0x90,0xb0,0xc7,0x18 -,0x1b,0x0d,0x0b,0x8b,0x8e,0x80,0xc2,0x1b,0x0f,0x2e,0x98,0x8d,0x87,0x92,0x95,0x19,0x19,0x08,0x91,0x86,0x80,0x95,0x0a,0x17,0x13,0x8e,0x8d,0x8b,0x9c,0x94,0x2c,0x1a -,0x07,0x0a,0x89,0x87,0x80,0x18,0x07,0x01,0x35,0x8f,0x8d,0x92,0x2e,0x2c,0x0f,0x12,0x01,0x9f,0x95,0x82,0x9f,0x06,0x09,0x05,0xb5,0x9b,0x89,0xb7,0xa8,0x0c,0x0b,0x03 -,0x18,0x8a,0x89,0x8b,0x07,0x0e,0x04,0xbe,0x9e,0x9b,0xa0,0xb4,0x44,0x0e,0x0c,0x00,0x8e,0x8b,0x80,0x53,0x08,0x09,0x27,0x89,0x8d,0x8b,0x30,0xa0,0x24,0x45,0x0b,0xa4 -,0x87,0x83,0x88,0x0f,0x1f,0x0b,0x93,0x8a,0x88,0xad,0xb5,0x14,0x15,0x10,0x11,0x85,0x91,0x8a,0x0a,0x0a,0x04,0x2f,0x98,0xa9,0xa4,0x1d,0x1e,0x08,0x0b,0x00,0x94,0x91 -,0x88,0x3a,0x00,0x08,0x0f,0x8d,0x92,0x8e,0x24,0xce,0x13,0x14,0x08,0x48,0x85,0x86,0x88,0x09,0x18,0x0a,0x96,0x86,0x89,0x93,0xa6,0x2c,0x18,0x16,0x11,0x82,0x8a,0x80 -,0x26,0x11,0x12,0xc7,0x88,0x8f,0x8b,0xcc,0xc4,0x12,0x10,0x06,0x8e,0x8b,0x85,0xa9,0x02,0x11,0x0c,0x97,0x99,0x96,0x2f,0xd3,0x0f,0x0e,0x06,0x37,0x89,0x8c,0x94,0x01 -,0x0e,0x04,0xa5,0x92,0x9d,0xaf,0x40,0x15,0x11,0x0a,0x0f,0x85,0x90,0x87,0x0e,0x0a,0x0a,0xc4,0x8d,0x97,0x99,0x2b,0x3a,0x15,0x10,0x0c,0x88,0x8d,0x81,0x2f,0x07,0x15 -,0x1c,0x8a,0x8c,0x8f,0xb9,0xa4,0x17,0x24,0x0c,0x98,0x88,0x83,0x9c,0x0c,0x1d,0x12,0x8a,0x8f,0x93,0xb3,0x51,0x13,0x1f,0x07,0x46,0x89,0x91,0x8f,0x0b,0x11,0x0d,0xa8 -,0xb0,0xa1,0x39,0x21,0x16,0x0d,0x06,0x1b,0x8d,0x9a,0x8e,0x06,0x0d,0x0e,0x4b,0x99,0x9f,0xd1,0x72,0x30,0x0f,0x0e,0x0f,0x8a,0x8b,0x87,0x12,0x0d,0x10,0x33,0x8a,0x9a -,0x97,0xa2,0xb5,0x28,0x1a,0x08,0x8d,0x8b,0x85,0xab,0x0c,0x1a,0x25,0x8e,0x99,0x93,0xa9,0xa8,0x2e,0x12,0x03,0xa7,0x8e,0x88,0x92,0x09,0x1f,0x17,0x9b,0x9a,0xb3,0x5e -,0xab,0x2e,0x1c,0x06,0x1e,0x8f,0x8f,0x8f,0x0b,0x14,0x10,0xa8,0x98,0xc1,0xca,0xb6,0x3e,0x25,0x0a,0x12,0x8a,0x94,0x8a,0x19,0x0d,0x1c,0xbe,0x98,0xab,0xcb,0xbe,0xb4 -,0x1b,0x0b,0x0b,0x8c,0x8b,0x87,0x36,0x07,0x1a,0x33,0x94,0x9b,0xcc,0xad,0x9e,0x27,0x10,0x07,0xa0,0x89,0x8a,0xa7,0x0a,0x12,0x24,0x9b,0x98,0xaf,0x9f,0x9b,0x4f,0x15 -,0x04,0xf3,0x8b,0x8d,0x97,0x0f,0x0f,0x2d,0xac,0x9d,0xb7,0xb9,0xa3,0x4c,0x13,0x01,0x2a,0x8e,0x8c,0x92,0x12,0x0e,0x33,0xb0,0x9c,0xb1,0x45,0x9c,0xd1,0x1d,0x06,0x1d -,0x8f,0x8b,0x8f,0x19,0x0e,0x1d,0xbb,0xa3,0xae,0xc3,0x91,0xad,0x26,0x08,0x0f,0x8d,0x8a,0x8f,0x26,0x0c,0x18,0xaa,0xb6,0xe0,0x4f,0x9e,0x9d,0x30,0x09,0x09,0x95,0x8d -,0x8b,0xd5,0x0c,0x1b,0xaa,0xb1,0xb1,0x38,0xb5,0x93,0x42,0x0f,0x08,0xbf,0x92,0x8d,0xc4,0x13,0x1a,0x58,0xb0,0xb8,0x60,0x9d,0x8f,0x3d,0x14,0x05,0x68,0x8a,0x8d,0xaa -,0x18,0x13,0xbd,0xa2,0x33,0x35,0xb1,0x92,0xa6,0x17,0x02,0x24,0x91,0x8b,0x8e,0x1d,0x11,0xe3,0xbb,0x47,0x44,0x3c,0x91,0x9d,0x1a,0x07,0x17,0xa4,0x8e,0x93,0x2a,0x1f -,0x31,0x4b,0x2e,0x26,0xb5,0x89,0x97,0x22,0x07,0x0f,0x90,0x8c,0x9e,0x27,0x13,0x36,0x99,0x2b,0x16,0x35,0x95,0x8b,0xae,0x06,0x09,0x9d,0x8e,0x8d,0x75,0x0c,0x36,0x9a -,0x46,0x31,0x1f,0xac,0x8a,0xaf,0x0c,0x0a,0x38,0x94,0x8d,0x42,0x1a,0x3e,0xa3,0xb0,0x22,0x19,0x99,0x8b,0xaa,0x17,0x03,0x2f,0x8a,0x91,0xcd,0x1c,0x16,0x95,0x96,0x10 -,0x13,0x49,0x95,0x8c,0x2c,0x01,0x2a,0x95,0x8f,0x94,0x19,0x11,0x98,0x99,0x26,0x1f,0x17,0x98,0x8d,0x2e,0x0b,0x16,0xa8,0x8d,0xa3,0x1c,0x2a,0xc3,0x96,0x63,0x0e,0x22 -,0x8e,0x94,0xbb,0x0e,0x07,0x92,0x89,0xe1,0x2a,0x13,0x25,0x87,0xcd,0x09,0x26,0xae,0x8c,0x8d,0x0e,0x03,0xa8,0x8e,0x93,0xbb,0x0c,0x2c,0x8d,0xa5,0x19,0x11,0x2b,0x8b -,0x94,0x21,0x08,0x0f,0x90,0x8e,0x32,0x2b,0x68,0xa9,0x8c,0x1c,0x04,0xb5,0x8f,0x96,0xa4,0x09,0x09,0x8a,0x8e,0x33,0x30,0x14,0xac,0x83,0x32,0x05,0x17,0xb5,0x87,0x92 -,0x0e,0x06,0x71,0x8a,0x8e,0x23,0x11,0x4d,0x9d,0x8f,0x23,0x06,0x63,0x8d,0xa7,0xb9,0x0d,0x09,0x8a,0x8f,0x24,0xd1,0x3a,0x3f,0x8d,0x26,0x09,0xa4,0x95,0x9a,0x58,0x06 -,0x0b,0x8f,0x8b,0xac,0x16,0x1a,0x92,0x95,0x4c,0x0b,0x0a,0x9a,0x80,0xa8,0x0e,0x04,0x0f,0x86,0x85,0x17,0x10,0x55,0xca,0x8b,0x2b,0x01,0x2f,0x8c,0x8b,0x9c,0x0b,0x02 -,0xa2,0x8b,0x92,0x3d,0x17,0xb5,0x9b,0x37,0x1e,0x16,0xd8,0x87,0xba,0x15,0x10,0x1b,0x96,0x89,0x1d,0x1c,0x95,0xbe,0xab,0x1e,0x08,0xab,0x84,0xa0,0x27,0x06,0x0a,0x8c -,0x85,0xab,0x15,0x10,0xb5,0x8a,0x44,0x0f,0x14,0xb1,0x82,0x98,0x0b,0x04,0x19,0x91,0x80,0xc8,0x09,0x28,0x58,0xa2,0x9d,0x0e,0x1b,0x8e,0x9f,0xaf,0x12,0x01,0x2f,0x8a -,0x8b,0x98,0x2a,0x1b,0xb4,0x33,0x29,0xb8,0xc2,0x9e,0x9c,0x0f,0x0d,0x22,0x4a,0x8a,0x94,0x1f,0x7d,0x5b,0x26,0xe0,0x21,0x48,0x8d,0x94,0xde,0x15,0x05,0x16,0x92,0x8e -,0x98,0x2b,0x13,0xa2,0xa8,0x32,0xbd,0x35,0xca,0x8e,0x3d,0x0c,0x0e,0x0f,0x98,0x81,0x94,0x1c,0x0e,0x1b,0x96,0x93,0x35,0x29,0x1b,0x6a,0x94,0x31,0x0e,0x18,0x5f,0x89 -,0x87,0x1a,0x0b,0x32,0xc5,0x8d,0x91,0x19,0x1d,0x26,0x7d,0xa3,0x1c,0x0e,0xc9,0x93,0x96,0x4f,0x0c,0x3a,0x8f,0x9e,0xa4,0x28,0x0c,0x42,0xa5,0x31,0xc0,0x1d,0x1c,0x8e -,0x94,0x28,0x29,0x2c,0xa9,0x97,0x3b,0x1c,0x1e,0x35,0x99,0x9e,0x1c,0x1a,0x1a,0xbc,0x89,0xa1,0x13,0x2f,0xa1,0x99,0x94,0x1a,0x0d,0x26,0xa6,0x8e,0xb7,0x0a,0x09,0x32 -,0x8b,0x85,0xd7,0x0d,0x39,0x9e,0xa4,0xa7,0x11,0x0f,0xa6,0x91,0x9f,0x1c,0x09,0x12,0x99,0x85,0x8f,0x15,0x0b,0xb3,0x96,0x69,0x29,0x15,0x24,0x99,0x8d,0xa5,0x15,0x10 -,0x1e,0x9c,0x8a,0xa5,0x0d,0x18,0xa7,0x93,0x9e,0x4a,0x1d,0x25,0xf1,0x2d,0x23,0x19,0x16,0x2a,0x95,0x8c,0x9e,0x35,0xaa,0x58,0x3e,0x8b,0x9a,0x26,0x1b,0x49,0x97,0x8f -,0x4a,0x04,0x00,0x14,0x88,0x93,0x0d,0x23,0x92,0x96,0x90,0x9d,0x6b,0x69,0x9e,0x8e,0x25,0x0c,0x24,0xb6,0x1f,0x97,0x8c,0x1e,0x0a,0x1c,0x2a,0x29,0xa1,0xa2,0x14,0x06 -,0xb5,0x81,0x8b,0x1b,0x16,0xcd,0x8b,0x88,0x5f,0x1c,0x21,0xed,0x9e,0x58,0x11,0x16,0x4b,0x1e,0x3a,0x90,0xa6,0x0d,0x08,0xab,0x88,0xbc,0x30,0x73,0x22,0xaf,0x83,0x92 -,0x13,0x31,0xa1,0x96,0xa4,0x36,0x08,0x01,0x17,0x94,0x3f,0x14,0x97,0xa4,0x1b,0x96,0x87,0x31,0x25,0xa3,0x8f,0x94,0xab,0x1e,0x01,0x09,0x8b,0x81,0x15,0x04,0x1d,0x31 -,0x98,0x90,0x32,0x1a,0x29,0xa4,0x94,0x3c,0x2c,0xaa,0xa9,0x45,0xa6,0x99,0xa2,0x35,0x19,0x9c,0x98,0x21,0x0d,0x09,0x09,0xaf,0x87,0xaa,0x0b,0x0d,0xad,0x88,0x8a,0xa2 -,0x67,0x1e,0xaf,0x99,0x35,0x16,0x1a,0xac,0x9e,0x96,0xae,0x0f,0x0a,0x12,0xac,0x8f,0xa2,0x37,0x10,0x12,0x97,0x88,0xbf,0x15,0xa8,0x8e,0x8f,0x91,0x4c,0x0e,0x0d,0x30 -,0x9b,0x25,0x0b,0x28,0x3a,0x33,0x9e,0x97,0x33,0x1a,0xe0,0x9b,0xc3,0x29,0xbe,0x27,0x0f,0xb4,0x85,0x98,0x31,0x63,0xb2,0x9a,0xa8,0x1e,0x0c,0x13,0xaa,0x97,0x35,0x16 -,0x21,0x26,0x1d,0xa9,0x94,0xc3,0x5e,0xaf,0x94,0x8f,0x98,0xe3,0x1b,0x3f,0x90,0xa9,0x0b,0x07,0x0d,0x14,0x2f,0x8d,0x8d,0xa3,0xc9,0x5f,0x22,0x0f,0x1e,0xab,0x98,0xb4 -,0xa8,0x92,0x94,0x3e,0x12,0x12,0x4f,0xa1,0x1f,0x0d,0x0d,0x9c,0x80,0x8e,0x15,0x18,0xba,0xa0,0x96,0xbb,0x1a,0x0b,0x0e,0xb9,0x8e,0xb2,0xb6,0x9f,0xa7,0x9f,0x2a,0x09 -,0x0f,0xa3,0x91,0x99,0xa7,0x2b,0x0b,0x02,0x1e,0x8a,0x92,0xa7,0x9c,0xce,0xa5,0x93,0x3d,0x18,0x46,0xa2,0xf9,0x1b,0x0c,0x1c,0x16,0x1c,0x88,0x84,0xa7,0x30,0x1f,0x2c -,0xa5,0x29,0x1f,0x1e,0x45,0x8c,0x89,0x2f,0x12,0x11,0x18,0x95,0x9d,0x12,0x23,0x3a,0x9e,0x8a,0x3b,0x1f,0x4f,0xbc,0x95,0xa3,0x2f,0x5f,0x15,0x0d,0xaf,0x90,0xa6,0xb1 -,0x12,0x1c,0x96,0x5f,0x14,0x1d,0xbe,0x88,0x8e,0xb8,0x29,0x06,0x09,0xc5,0x96,0xc8,0xa2,0xd2,0x9f,0x94,0x97,0xa9,0x33,0x26,0xa3,0xb8,0x16,0x10,0x06,0x04,0x19,0x86 -,0x8a,0x96,0x1f,0xd6,0x98,0x92,0xc0,0x13,0x1f,0x9c,0x8f,0xa3,0x20,0x06,0x0b,0x1f,0x86,0x9e,0x3b,0x1a,0x4a,0x95,0x9b,0xd3,0x1f,0x22,0x45,0xd0,0xbd,0x4e,0x22,0x20 -,0x1d,0x8b,0x8f,0x99,0x2e,0x27,0xaa,0x5a,0x1b,0x0c,0x0e,0xa5,0x95,0x98,0xa9,0x2b,0x13,0x09,0x96,0x96,0x99,0xe3,0x31,0xab,0xea,0xaa,0xb3,0x18,0xad,0x9c,0x9d,0x60 -,0x09,0x07,0x08,0x8d,0x8a,0x9a,0x1e,0x11,0xaa,0x9f,0xb8,0xcb,0x28,0x93,0x8e,0x9b,0xaa,0x13,0x0f,0x09,0x7e,0xc6,0xc1,0x29,0x1b,0xa5,0x92,0xa6,0xb8,0x1f,0x6c,0x9f -,0x9d,0xac,0x11,0x0b,0x0a,0x90,0x8d,0x90,0xc1,0x2f,0xb7,0xa5,0xc4,0x1c,0x0c,0x27,0x98,0x9c,0xa1,0x18,0x0f,0x06,0x92,0x8c,0x95,0x54,0x15,0xcc,0x9b,0x92,0xab,0x1b -,0x1f,0x9f,0x9e,0xaf,0x0a,0x08,0x05,0x9c,0x8a,0x94,0xbe,0x15,0xaf,0x9c,0xad,0x37,0x1c,0x59,0x93,0x95,0x99,0x1b,0x11,0x07,0xc2,0x90,0x9f,0x2e,0x09,0x2c,0x99,0x94 -,0xa1,0x1b,0x29,0x95,0x99,0xa4,0x0e,0x0b,0x08,0x9c,0x85,0x99,0xbe,0x18,0xd1,0x96,0x97,0xb6,0x0e,0x0f,0xce,0xcb,0x99,0x2c,0x12,0x04,0x25,0x8e,0x8e,0x99,0x30,0xb4 -,0x8d,0x92,0xaf,0x17,0x14,0xa2,0xa5,0xa1,0x0c,0x06,0x01,0xc9,0x86,0x86,0xa2,0x13,0x1f,0xa3,0x94,0xa6,0x1d,0x0f,0xad,0x9d,0x8f,0x29,0x13,0x07,0x9b,0x85,0x8f,0x25 -,0x03,0x0f,0xae,0x8e,0xa6,0x15,0x0f,0xa1,0x97,0x8b,0x3a,0x18,0x08,0xa4,0x89,0x8e,0xae,0x0e,0x1c,0xbc,0xa8,0xb5,0x1b,0x16,0xc3,0x9d,0x8b,0x26,0x0e,0x02,0xac,0x88 -,0x8e,0x34,0x04,0x14,0x95,0x87,0x8c,0x2c,0x1e,0xa0,0x98,0x8d,0x0f,0x08,0x00,0x2a,0x93,0x96,0x3f,0x0e,0x26,0x92,0x8a,0x8c,0x2b,0x1b,0xa9,0x9a,0x8c,0x1e,0x08,0x02 -,0xac,0x89,0x8a,0x3c,0x0b,0x10,0xac,0x93,0x9a,0x1e,0x1b,0x7c,0x9f,0x9b,0x13,0x06,0x09,0x8e,0x85,0x82,0xc7,0x0f,0x20,0x9b,0x8a,0x9a,0x0d,0x09,0x0e,0xb0,0x9c,0x21 -,0x08,0x09,0x8f,0x85,0x83,0x57,0x0f,0x1b,0xae,0x94,0x9b,0x13,0x2f,0x47,0x8e,0x99,0x1e,0x09,0x0a,0xa6,0x94,0x8d,0x23,0x0d,0x0f,0x3d,0x91,0x8e,0x25,0x46,0x2c,0x8d -,0x8d,0x35,0x08,0x11,0x92,0x85,0x8b,0x1c,0x03,0x0a,0x27,0x9e,0xa0,0x1c,0x39,0x38,0x8d,0x93,0x3a,0x08,0x21,0xa6,0x86,0x97,0x21,0x0e,0x12,0x9e,0x89,0x8f,0x2d,0x1d -,0x1e,0xab,0x32,0x13,0x01,0x1f,0xae,0x87,0x8f,0x3c,0x1f,0x23,0xa9,0x8e,0xa8,0xd9,0x21,0xcc,0x95,0xb2,0x21,0x07,0x2d,0xa6,0x89,0xa6,0x17,0x07,0x10,0xc7,0x89,0xa8 -,0xba,0x1d,0x44,0x96,0xa9,0x1e,0x0c,0xbd,0x97,0x85,0x99,0x3a,0x0c,0x1a,0x3e,0xa8,0x1e,0x1a,0x11,0x4d,0xa1,0xa4,0x35,0x2e,0xb4,0x93,0x89,0xa8,0x2d,0x0c,0x17,0xb5 -,0x93,0xa7,0xd4,0x1e,0xa0,0xa8,0xbe,0x08,0x0d,0x1b,0x9b,0x8b,0xc0,0x1f,0x0e,0x2e,0x8f,0x8b,0x9d,0x49,0x13,0xa2,0xad,0x9b,0x1b,0x26,0x2f,0xa9,0x9e,0x26,0x12,0x0d -,0x1f,0x94,0x9e,0xe0,0xba,0x28,0x91,0x9a,0xae,0x0e,0x1a,0x2e,0x9a,0x98,0xa2,0x30,0x2d,0x36,0x9b,0xad,0x2d,0x1d,0x0f,0x3e,0x31,0x2a,0x13,0x44,0xb2,0x86,0x8b,0x93 -,0x28,0x12,0x16,0xa0,0x9a,0xa6,0x2d,0x17,0x39,0x64,0xc3,0x16,0x70,0x2f,0x90,0xa4,0x39,0x18,0x17,0x66,0x92,0xa6,0xb9,0x20,0x1d,0xad,0xa8,0x9e,0x1e,0xa7,0xb5,0x92 -,0x9a,0x3c,0x17,0x0a,0x11,0xae,0x2a,0x44,0x21,0x34,0x91,0x95,0x97,0x1d,0xcc,0xad,0x96,0x9a,0x31,0x18,0x13,0x14,0x9c,0xab,0x99,0xcf,0x1b,0x39,0x1d,0xd7,0x1e,0x68 -,0xb9,0x9b,0x9c,0xbc,0x28,0x28,0x2a,0x94,0x98,0xa0,0x74,0x19,0xb0,0xef,0xc7,0x0f,0x16,0x20,0xb4,0x9d,0xc5,0x1f,0x17,0x36,0x98,0x90,0x95,0xab,0x1f,0xdd,0x36,0xd8 -,0x15,0x22,0xc6,0x99,0x8a,0x9b,0x3c,0x0d,0x10,0x52,0xad,0xbe,0x2d,0x0f,0x2c,0x38,0xa0,0x51,0xab,0x93,0x99,0x90,0xba,0x47,0x1b,0x1f,0xca,0xac,0xca,0x3c,0x10,0x2b -,0x3a,0xaa,0x27,0x17,0x3d,0xae,0x89,0x96,0xbd,0x1a,0x1a,0xc6,0x9f,0xaf,0xb5,0x1d,0xb5,0xc7,0xaa,0x40,0x1d,0xc7,0x4e,0x94,0xb8,0x23,0x0e,0x0a,0x28,0x9c,0x99,0x8d -,0x51,0xb6,0xb8,0xae,0xbd,0x16,0xd8,0x34,0x9d,0xa2,0x3e,0x22,0x1c,0x5a,0xa2,0x35,0xce,0x1a,0x2b,0xad,0x4c,0x52,0x0f,0xdf,0xa0,0x8c,0x8d,0xa9,0x29,0x1b,0x2e,0x9d -,0xad,0xbc,0x29,0x1a,0xd0,0x28,0x2b,0x08,0x18,0xbb,0x8e,0x8e,0xa9,0x3e,0x2a,0xbb,0x98,0xa4,0xcf,0xe2,0x1d,0x40,0x1f,0x47,0x1a,0xc6,0xa2,0x97,0x95,0xde,0x1b,0x0f -,0x1b,0xcd,0xb0,0x5b,0xbc,0x2a,0x95,0xa1,0xa7,0x18,0x25,0xab,0x99,0x90,0x4f,0x20,0x18,0x23,0xac,0xac,0x2c,0x35,0x15,0xba,0xc9,0xb9,0x18,0x16,0xb4,0x95,0x86,0x95 -,0x45,0x17,0x18,0xb9,0x9e,0x49,0xae,0x23,0xab,0xb2,0x39,0x11,0x0a,0x37,0xb1,0x96,0xb6,0x2a,0x2e,0xd6,0x9b,0x90,0xb5,0x9f,0x30,0xb5,0xb2,0x21,0x15,0x09,0x3c,0xa9 -,0x89,0x93,0x2e,0x11,0x13,0x47,0x99,0x3b,0x2b,0x1d,0xfb,0x8f,0xae,0xc6,0x0c,0xfc,0x9c,0x8a,0x8d,0xee,0x1d,0x11,0x22,0xaf,0xd4,0x37,0x29,0x18,0xa9,0x26,0x28,0x0a -,0x27,0x91,0x89,0x85,0xb1,0x2a,0x1d,0x35,0x9d,0x6c,0x24,0x4b,0x2d,0x98,0x3d,0x2d,0x09,0x11,0xa5,0x9d,0x8e,0x2c,0x13,0x16,0x3c,0x8e,0x8f,0xa5,0xa5,0x21,0x98,0xab -,0x54,0x0f,0x08,0xd1,0xa5,0x8a,0xa8,0x22,0x16,0x16,0xb9,0xa1,0x23,0xc2,0x26,0xaa,0xa4,0x7a,0x3b,0x0f,0x9e,0x9e,0x8c,0x98,0x2b,0x26,0x18,0x3d,0x9f,0x46,0xc8,0x22 -,0x32,0xae,0x17,0x12,0x01,0x76,0x8e,0x84,0x8b,0xbc,0x3a,0x2d,0xad,0x9e,0x39,0x21,0x2c,0x1e,0x9c,0x2d,0x2a,0x0b,0x1d,0x9f,0x8f,0x8b,0x2c,0x18,0x0f,0x1b,0xa4,0x9a -,0xa2,0x93,0x42,0x98,0x2c,0x2f,0x0f,0x14,0x9f,0xa7,0x91,0x47,0x2c,0x14,0x1b,0x3f,0x9f,0x52,0x9f,0x30,0xa7,0xb4,0x2f,0x35,0x15,0x9c,0x98,0x8c,0xc0,0x1e,0x19,0x24 -,0x50,0x9e,0x41,0xb8,0x56,0xb6,0xa5,0x14,0x0f,0x03,0x6c,0x99,0x89,0x8d,0xae,0x38,0x1f,0x25,0x9f,0xa4,0x9c,0xb4,0x17,0x31,0x0e,0x27,0x0d,0xcf,0x99,0x93,0x90,0x2d -,0x26,0x1d,0x33,0x9d,0x9b,0x9f,0x96,0x1d,0xd1,0x1b,0x24,0x15,0x27,0x9c,0xa3,0x8f,0xb4,0x72,0x18,0x18,0x40,0xba,0x38,0xa5,0x1f,0xba,0xef,0x3d,0x2a,0x1e,0x91,0x95 -,0x8a,0xea,0x21,0x13,0x0f,0x3a,0xa5,0xa4,0x99,0x27,0x3b,0x31,0x1e,0x1c,0x10,0x9f,0xa3,0x8e,0x99,0xb6,0x34,0x24,0x6e,0xa4,0xb8,0x9a,0x3e,0x25,0x32,0x17,0x1f,0x0c -,0xb5,0xa0,0x8f,0xa2,0x30,0x22,0x1c,0x39,0x9a,0x9b,0x92,0xa7,0x1e,0x45,0x17,0x36,0x0d,0xb0,0xa6,0x98,0x93,0x4f,0x2c,0x11,0x27,0xa2,0xa5,0xa6,0xbc,0x1c,0x4a,0x19 -,0xd2,0x19,0xd1,0x9a,0x93,0x91,0x6a,0x4a,0x1e,0x18,0xc7,0xab,0xab,0xab,0x14,0xf1,0x1b,0x27,0x0f,0x29,0x9c,0x93,0x8b,0xa7,0x33,0x17,0x1c,0xac,0x97,0xa1,0x97,0x1c -,0x42,0x16,0x29,0x17,0x1b,0xa2,0x9c,0x92,0x39,0x23,0x1b,0x27,0xaf,0x96,0x9d,0x8f,0x29,0xd6,0x26,0x26,0x1f,0x1a,0xa9,0xfd,0x96,0xa9,0xb5,0x23,0x1d,0x4a,0x9b,0xa8 -,0x9c,0x28,0x1d,0x1d,0x20,0x37,0x19,0xa9,0xa4,0x8c,0x97,0xb0,0x21,0x14,0x1d,0xa7,0xaa,0x9b,0x29,0x1e,0x4c,0x24,0x2a,0x0a,0xbb,0xac,0x8c,0x8f,0x9d,0x3a,0x13,0x29 -,0xa3,0xa4,0x95,0xb9,0x1f,0x23,0x16,0x3b,0x13,0xb4,0xb1,0x96,0x9e,0x3a,0x1f,0x16,0x19,0xae,0x9f,0x8c,0x9a,0x34,0xdd,0x1a,0x3d,0x13,0xa8,0xa2,0x96,0x9f,0x4b,0x1d -,0x15,0x1f,0x9c,0x9e,0xa6,0xc9,0x19,0x6d,0x1e,0xaf,0x16,0x38,0x42,0xa3,0x9c,0xd5,0x35,0x26,0x2b,0xa7,0xa0,0x9b,0x9a,0x1e,0xc4,0x1b,0x2e,0x0b,0x2a,0xa9,0x9a,0x8c -,0x94,0xa8,0x1f,0x15,0x3c,0xae,0x9f,0x96,0x1e,0x2a,0x0a,0x14,0x0e,0x3b,0x9e,0x97,0x8d,0xac,0x2a,0x1a,0x1f,0xb0,0x93,0x90,0x8d,0x25,0x35,0x16,0x2a,0x16,0x3b,0x9c -,0x9c,0x9a,0xc4,0x2e,0x13,0x12,0x35,0xa0,0xb9,0xa0,0x1a,0x37,0x1e,0xd0,0x2a,0x3f,0xa1,0xa2,0x8e,0x98,0xa7,0x27,0x1c,0x32,0xa3,0xad,0x91,0x24,0x37,0x19,0x1f,0x14 -,0x12,0xac,0xac,0x8e,0x9e,0xb1,0x1f,0x0f,0x1c,0xa9,0xa7,0x8d,0xcf,0xa5,0x2b,0x1f,0x21,0x16,0xa1,0xa9,0x8d,0x9c,0xc8,0x1a,0x10,0x1f,0x99,0x98,0x8a,0xc9,0x1c,0x0e -,0x10,0x1e,0x0f,0x9d,0xa7,0x92,0xac,0xbb,0x25,0x17,0x26,0x9d,0x9e,0x94,0xc6,0x2f,0x56,0x22,0xb1,0x20,0xa3,0xd8,0x9d,0x9e,0x69,0x29,0x1f,0x24,0xb5,0x69,0xa6,0xb9 -,0x2a,0xd2,0x19,0x3e,0x0a,0x2f,0xa9,0x92,0x8d,0x9e,0xa5,0x1e,0x18,0xb6,0xa6,0x97,0x99,0x31,0xbc,0x17,0x2e,0x0f,0x24,0xba,0xad,0x90,0xb4,0x2d,0x0f,0x0f,0xaf,0x9b -,0x95,0x8e,0x2b,0x30,0x0f,0x24,0x1b,0x29,0x95,0x9b,0x8f,0xb7,0x7b,0x2e,0x1c,0x3a,0xaa,0xa4,0x95,0x2b,0x41,0x27,0x27,0x2a,0x15,0xbb,0xd9,0x92,0x9c,0xdd,0x29,0x17 -,0x3e,0x9f,0xb7,0x9d,0x39,0x26,0x2e,0x24,0x46,0x0f,0xbc,0xa8,0x8e,0x8d,0xa4,0xbd,0x18,0x14,0x3f,0xc9,0x97,0xae,0x27,0xe0,0x16,0x32,0x0b,0x48,0xab,0xa0,0x8e,0xca -,0x2f,0x15,0x1c,0xa6,0x9f,0x98,0x91,0x3f,0xb4,0x13,0x26,0x11,0x24,0x9b,0x9d,0x8d,0xbb,0x34,0x18,0x16,0x4e,0xab,0xaf,0x98,0x25,0xad,0x3b,0x4a,0x1c,0x10,0xa8,0x3c -,0x92,0x9e,0xb7,0x32,0x1b,0xee,0x9d,0xb4,0x90,0x55,0x33,0x27,0x17,0x2d,0x0a,0x5e,0xee,0x93,0x8d,0xa1,0xc0,0x17,0x17,0xb9,0xcb,0x91,0xac,0x2e,0xb9,0x11,0x25,0x08 -,0x37,0xa2,0x98,0x8d,0xbf,0x47,0x1d,0x23,0x9a,0x9e,0x98,0x9e,0x1a,0x35,0x0f,0x2f,0x12,0x1b,0x9e,0x9e,0x8a,0xa4,0x4b,0x1f,0x14,0x58,0xab,0x9d,0x94,0x25,0xc3,0x1f -,0x2a,0x2f,0x1d,0x9c,0x4a,0x98,0xa5,0x44,0x47,0x19,0x6b,0xab,0xb5,0x94,0x2e,0x64,0x22,0x18,0x2d,0x0b,0xa7,0xab,0x91,0x97,0x41,0xbb,0x1e,0x24,0x46,0x34,0x96,0xab -,0xaf,0xac,0x18,0x37,0x0a,0xd3,0xab,0x9e,0x91,0x2e,0x31,0x15,0x1d,0x9d,0x9f,0x90,0x9c,0x26,0x5f,0x0d,0x2d,0x14,0x3d,0x99,0xa6,0x8f,0x30,0x36,0x2f,0x1f,0xb3,0xba -,0xa1,0x9b,0x29,0xaa,0x1d,0x3e,0x1f,0x1a,0x9d,0x43,0x95,0xd5,0x33,0x4c,0x1e,0xa9,0xa9,0xbb,0x99,0x2c,0xae,0x28,0x16,0x19,0x08,0xa3,0xac,0x8c,0x94,0x3a,0xba,0x12 -,0x31,0xad,0xce,0x94,0x42,0x61,0x45,0x1c,0x3e,0x0c,0xbb,0xa8,0x9e,0x92,0x2b,0x5b,0x1f,0x32,0x99,0xb6,0x92,0xab,0x2f,0x2e,0x08,0x29,0x13,0xc4,0x96,0xab,0x8e,0x64 -,0xb5,0x28,0x1a,0xae,0x39,0xa3,0xad,0x1f,0xaf,0x20,0x4f,0x1f,0x24,0x9c,0x3e,0x93,0xd5,0x52,0xcd,0x21,0x9f,0xbc,0xab,0x9f,0x24,0xc9,0x17,0x1e,0x20,0x0e,0xa3,0x43 -,0x8f,0x99,0xba,0xa5,0x14,0x2e,0x2d,0xce,0x92,0xc2,0x9f,0xd2,0x17,0x31,0x13,0x9b,0xc3,0xbf,0xa7,0x1d,0xaf,0x1d,0x51,0xa9,0xcd,0x8d,0xa3,0x4e,0x39,0x0f,0x3a,0x0f -,0xc9,0x9e,0xbb,0x94,0x1e,0xb3,0x34,0x27,0xa6,0x2f,0xa4,0xae,0x5a,0x9c,0x1a,0xd4,0x20,0x27,0xa6,0x1c,0x9d,0x2a,0xc0,0xcb,0x1f,0x9c,0xe9,0x9f,0x97,0x30,0xb4,0x10 -,0x1a,0x1d,0x16,0x97,0x3a,0x98,0xb3,0xad,0x95,0x1e,0xe2,0x22,0x3b,0x91,0xc9,0x9d,0x2e,0x17,0x2a,0x10,0x9c,0x33,0xaf,0xa0,0x2c,0xa3,0x1e,0xbb,0xac,0xcd,0x8c,0xc8 -,0x42,0x1f,0x0d,0x35,0x0c,0xaa,0x9f,0xa7,0x90,0xdc,0x96,0x21,0x1c,0x59,0x1d,0x9e,0xd7,0x3a,0xd0,0x17,0xa5,0x25,0xdd,0xb5,0x25,0x99,0x2e,0x9e,0xbe,0x29,0xab,0x23 -,0x9b,0x9b,0x43,0x58,0x0b,0x22,0x1a,0x2b,0x95,0x46,0x91,0xb9,0x9d,0xa6,0x16,0x5f,0x22,0xae,0x9e,0x31,0xa2,0x1f,0x42,0x67,0x1a,0xa8,0x1b,0xa1,0xb7,0x51,0xaa,0x19 -,0xb6,0x55,0xa7,0x8b,0xb9,0xb5,0x19,0x19,0x2f,0x0d,0xa3,0x42,0xa8,0x9d,0xc8,0x98,0x19,0x1c,0x23,0x39,0x8e,0xa0,0x9e,0x39,0x15,0xbb,0x1a,0xb2,0x2b,0x29,0xa3,0x22 -,0xab,0x2a,0x74,0x9d,0xaf,0x8e,0xa9,0x3e,0x28,0x10,0x52,0x12,0x2b,0xc3,0xd6,0x8e,0xbb,0x96,0xc2,0x1e,0xce,0x2d,0xa5,0xb4,0x3f,0xaf,0x1a,0x53,0x22,0x2c,0xbe,0x1c -,0x9e,0xcc,0xaa,0xb9,0x22,0xae,0xe2,0x97,0x8e,0xd9,0x55,0x0c,0x16,0x18,0x15,0xa5,0xce,0x90,0x9d,0xa6,0x9f,0x1b,0x31,0x2a,0xbf,0x9c,0x28,0xda,0x1f,0x27,0xee,0x23 -,0x9f,0x39,0xaa,0x9e,0xf1,0xb3,0x18,0x59,0xb2,0xab,0x8f,0xbe,0xec,0x1a,0x18,0x47,0x16,0xd2,0x7e,0xa7,0x94,0xb1,0x9a,0x2d,0x23,0x31,0x2c,0x9c,0x58,0x3f,0x3a,0x1f -,0xbe,0x2d,0xa7,0xbe,0x2b,0xb2,0x2d,0xb4,0x35,0x28,0xa7,0xc2,0x98,0x9e,0xc0,0xbc,0x17,0x2a,0x13,0x1a,0xec,0x7d,0x92,0xac,0xb1,0x3d,0x18,0x3c,0x66,0x95,0x94,0x42 -,0xc9,0x23,0xdc,0x38,0x2b,0xb2,0x26,0xb9,0x36,0x2f,0x2d,0x1c,0xa9,0x9a,0x90,0x8c,0xad,0xc2,0x14,0x13,0x18,0x10,0x5b,0x32,0xa1,0xa3,0xbb,0xa6,0x5a,0xb3,0xad,0xb8 -,0x9f,0x2b,0x35,0x2a,0x28,0x3e,0x1a,0xcf,0x46,0xb3,0xa9,0xc7,0xbc,0x27,0x41,0x9f,0xa4,0x94,0xb9,0x40,0x24,0x0f,0x18,0x10,0x3a,0xd1,0x99,0x8e,0x9b,0xa3,0x39,0x2f -,0xbb,0x56,0x9d,0xf6,0x1e,0x1e,0x15,0x2d,0x23,0x9f,0x96,0x94,0xa3,0x30,0x27,0x19,0x24,0xae,0xad,0x97,0xb9,0x36,0x52,0x17,0x23,0x17,0xc3,0xa8,0x9b,0x9a,0xaf,0x2e -,0x1a,0x4e,0x9f,0xa7,0x98,0x3d,0x1a,0x24,0x0e,0x3a,0x12,0xef,0xa7,0x94,0x8f,0x96,0xc7,0x1a,0x24,0x4c,0x9e,0x91,0x95,0x1a,0xa7,0x09,0x05,0x02,0x0a,0xa9,0x39,0xa1 -,0xf6,0x2b,0xa5,0xa1,0x91,0x8a,0x8a,0xa2,0x9f,0x8c,0x24,0xbe,0x9f,0x2c,0x96,0x8f,0x9e,0x8a,0x95,0x2e,0x2c,0x9a,0xbe,0x9e,0x1e,0x0a,0x0e,0x04,0x06,0x01,0x0d,0x0d -,0x34,0x36,0x1a,0x07,0x08,0x09,0x19,0xa3,0x9b,0x9e,0x3f,0xa4,0xaf,0xb7,0x2a,0xa2,0x8c,0x89,0x80,0x8b,0x9b,0xc0,0x92,0x81,0x83,0x83,0x86,0x8a,0x8e,0x88,0x3b,0x03 -,0x21,0x84,0x83,0x2f,0x1c,0x0b,0x0f,0x4c,0x0e,0x09,0x07,0x03,0x1f,0x9a,0x0d,0x05,0x00,0x0b,0x97,0x1c,0x10,0x00,0x0c,0x2c,0xb3,0xa2,0x15,0x09,0x9e,0x88,0x83,0x88 -,0x18,0x12,0x92,0x80,0x83,0x85,0x9d,0x8f,0x89,0x8e,0xb4,0x98,0x95,0x85,0x8e,0xbc,0x2e,0x15,0xbb,0x9f,0x8c,0x1b,0x23,0x1c,0x20,0x16,0x03,0x05,0x07,0x0c,0x22,0x10 -,0x04,0x0a,0x08,0x08,0x03,0x9f,0x22,0xf1,0xa2,0x17,0x8e,0x43,0x46,0x9f,0xe9,0x8c,0x86,0x93,0xa1,0xe5,0x21,0x1a,0x8b,0x84,0x8c,0x91,0x97,0x83,0x9f,0xbc,0x8b,0x86 -,0x89,0x82,0x9f,0x97,0x9a,0x13,0x04,0x2d,0x89,0x20,0x0e,0x0f,0x13,0x0c,0x03,0x05,0x04,0x1f,0x9f,0x20,0x43,0x0e,0x07,0x00,0x07,0xa0,0x9e,0xac,0x1f,0x1b,0xdf,0xb3 -,0x25,0xa6,0x98,0x82,0x81,0x8c,0x89,0xa9,0x3f,0x5f,0x80,0x84,0x8d,0x98,0xba,0x8c,0x8f,0x9c,0xae,0x1f,0x6c,0xa5,0xaa,0x8b,0x17,0x07,0x02,0xcd,0x86,0xa7,0xa3,0xae -,0x12,0x0f,0x0e,0x65,0xaf,0x12,0x0c,0x04,0x87,0x14,0x07,0x00,0x11,0xf6,0x09,0x18,0x09,0x94,0x19,0x00,0x29,0x66,0x05,0x09,0xc4,0x95,0x25,0x01,0x0f,0x88,0x80,0x94 -,0x36,0x99,0x88,0x80,0x91,0xa2,0x83,0xa2,0x8f,0x93,0x84,0x8f,0x1c,0x30,0x3c,0x8f,0x58,0x0c,0x89,0x98,0xb2,0x22,0x01,0xa5,0x20,0x96,0x86,0xc7,0xa8,0x09,0x0f,0x0e -,0x92,0x89,0x08,0x95,0xa6,0x9d,0x34,0x25,0x91,0x98,0xc4,0x56,0xb7,0x84,0x93,0x1f,0x3f,0x29,0x80,0x13,0x9e,0x88,0x92,0x18,0x00,0x18,0x5e,0x98,0x15,0x16,0xac,0x3a -,0x00,0x26,0x0b,0xbd,0x12,0x0c,0x8d,0x0b,0x4f,0x0f,0x03,0x22,0x00,0x15,0x2f,0x94,0xca,0x00,0x0f,0x00,0xa7,0x99,0xb9,0x90,0x26,0x1c,0x0b,0x9f,0x87,0x97,0x8c,0x89 -,0x95,0x8c,0x9f,0x8c,0x81,0x84,0x87,0x8f,0x80,0x84,0x80,0x83,0x84,0x82,0x80,0x89,0x9c,0x9a,0x80,0x8e,0x08,0x07,0x08,0x9e,0x08,0x06,0x14,0x00,0x06,0x00,0x0a,0x08 -,0x02,0x06,0x08,0x0b,0x03,0x00,0x09,0x04,0x6b,0x05,0x13,0x8a,0x21,0x22,0x00,0x0c,0x1c,0xaa,0x83,0x87,0x98,0x0b,0x0e,0xc9,0x94,0x80,0x8e,0xb9,0x8b,0x86,0x85,0x9c -,0xcc,0x87,0x90,0x9c,0x80,0x8a,0x9f,0x33,0x4f,0x95,0x8b,0x89,0x0b,0x9a,0x94,0xcb,0x19,0x07,0x96,0x11,0x10,0xbf,0x3a,0x0f,0x08,0x05,0x03,0x1e,0x9b,0x01,0x0e,0x9f -,0x19,0x18,0x05,0xaf,0x27,0x9c,0x8e,0xa5,0x84,0x21,0xc3,0x34,0x34,0x81,0xad,0x8f,0x8a,0x3d,0x32,0x0c,0x92,0x9a,0x40,0x9d,0x9c,0x2f,0x0c,0x09,0x07,0x0b,0x94,0x64 -,0x0d,0x26,0x02,0x1a,0x0f,0x4c,0x12,0x12,0xcd,0x11,0x10,0x2a,0x36,0x16,0xb4,0x84,0x8a,0xa6,0x85,0x86,0x86,0x86,0x84,0x83,0x89,0x85,0x8a,0xab,0x91,0x92,0xec,0x0e -,0x4a,0x90,0x06,0x3d,0xd1,0x29,0x1a,0x0d,0x31,0x06,0x0f,0x1f,0x1b,0x1c,0xf5,0x1e,0x0c,0x0f,0x97,0x05,0x12,0xa3,0x17,0xe4,0x06,0x1e,0x08,0x0d,0x9d,0x38,0x09,0x0d -,0x16,0x12,0x06,0x92,0x3d,0x0e,0xa1,0x39,0xce,0x33,0xa8,0x28,0xcc,0xa4,0x97,0x8f,0x9c,0x90,0x8c,0x9f,0x83,0x88,0x4c,0x88,0x87,0x8e,0x92,0x80,0x85,0x2c,0x95,0x91 -,0x9d,0x8d,0x96,0x5d,0x0a,0x49,0x8e,0x23,0x9e,0xa4,0x30,0x27,0xe0,0x40,0x09,0x1b,0x21,0x19,0x90,0xa9,0x0e,0x00,0x14,0x92,0x0c,0x18,0x1b,0x19,0x07,0x0c,0x1b,0x37 -,0x1c,0x1f,0x19,0x19,0x1c,0x0e,0x04,0x08,0x8e,0x0a,0x0e,0xbf,0x38,0x14,0x1f,0x1f,0x35,0x2a,0x2c,0x92,0x8d,0x85,0x8d,0xa4,0x9e,0x81,0x83,0x88,0x81,0x81,0x87,0x87 -,0x80,0x83,0x8d,0x88,0x8d,0x99,0x8a,0x2d,0x0f,0x07,0x32,0x5b,0x00,0x2f,0x08,0x0b,0x03,0x04,0x0c,0x00,0x03,0x03,0x09,0x0c,0x11,0x09,0x00,0x23,0x9b,0x08,0xaa,0xc6 -,0x10,0x14,0xbd,0x8d,0x3e,0x94,0x8f,0x5b,0x9f,0x9a,0x9c,0x46,0x9b,0x83,0x4e,0x8d,0x85,0x97,0xa5,0x8f,0x8d,0x2a,0xa8,0x95,0xa8,0x2a,0x91,0x9d,0x17,0x9e,0x83,0x20 -,0xd6,0x93,0x1e,0x15,0x1b,0xab,0x12,0x21,0x96,0x13,0xc1,0xa3,0x1d,0x0c,0x15,0x91,0x17,0x3d,0x98,0x26,0x19,0x64,0x33,0x36,0x1e,0xb2,0x2d,0xc1,0x96,0x45,0x0f,0x27 -,0x80,0x25,0x2c,0xbb,0xb7,0x4b,0x2f,0x64,0x37,0x1f,0x9b,0xd2,0x16,0xaa,0x11,0x07,0x14,0xa6,0x08,0x0a,0x4f,0x27,0x0e,0x0b,0x40,0x10,0x0d,0x6a,0x25,0x13,0x2c,0xae -,0x34,0x9f,0x80,0x9f,0x94,0x80,0x8a,0x97,0x8a,0x80,0x88,0x88,0x80,0x88,0x89,0x86,0xb3,0x2c,0xaa,0x8d,0x1b,0x1a,0x9e,0x1e,0x0d,0x2a,0x35,0x0b,0x05,0x26,0x1d,0x0a -,0x0a,0x0b,0x04,0x29,0xa0,0x08,0xbd,0x2c,0x0f,0x10,0x0d,0x09,0x09,0x0e,0x1f,0x27,0x0d,0x14,0x10,0x06,0x24,0x63,0xbf,0xb3,0x3e,0xa8,0x27,0x8f,0x97,0x9a,0x8e,0x8b -,0x8c,0x9a,0x90,0x31,0x9c,0x80,0x8e,0x87,0x89,0x93,0xb7,0xcf,0x8c,0xa6,0xcb,0x8f,0x87,0x98,0xa9,0x4b,0x52,0x9b,0x9c,0x16,0xdc,0xaf,0x0a,0x0f,0x20,0x1d,0x0c,0x34 -,0x4b,0xb2,0x37,0x17,0x17,0x0b,0xbf,0x25,0x27,0x8f,0x3b,0x14,0x1e,0x29,0x0e,0x15,0x26,0x16,0x22,0x1f,0x19,0x06,0x29,0x54,0x0d,0x36,0x2f,0x15,0x06,0x1b,0x28,0x08 -,0xd1,0x2d,0x1e,0x66,0x2e,0x14,0x0d,0xa0,0xb4,0xab,0x86,0x85,0x83,0x88,0x82,0x82,0x85,0x81,0x84,0x82,0x83,0x82,0x8f,0x83,0x87,0xa9,0x8c,0xa3,0x13,0x0f,0x08,0x07 -,0x06,0x0f,0x0c,0x09,0x09,0x0d,0x03,0x06,0x32,0x02,0x0b,0x1a,0x0c,0x0d,0x40,0x1e,0x11,0xae,0xac,0x0d,0x18,0x1c,0x04,0xdd,0x8e,0xc0,0xa6,0x93,0xc8,0xa8,0x99,0xa3 -,0x36,0x9f,0x95,0xaa,0x9d,0x9b,0x0f,0xa0,0x82,0xa0,0xac,0x9f,0x25,0x3e,0x97,0xd5,0xa5,0x8c,0x90,0x98,0x8f,0xb6,0x22,0xa0,0x90,0x2b,0x97,0xb7,0x4d,0x58,0x9f,0x95 -,0x1f,0x99,0x9b,0x1d,0xdb,0xc4,0x09,0x8f,0xb7,0x1d,0x84,0xab,0x1a,0xbd,0x32,0x0f,0x1b,0x1b,0x34,0x12,0x23,0x1b,0x25,0x99,0x17,0x26,0x3e,0x28,0x1b,0x23,0xa8,0x13 -,0x46,0x99,0x1c,0x23,0x29,0x05,0x2d,0x3c,0x00,0x2d,0x1b,0x0a,0xbd,0xa2,0x19,0x25,0x45,0x1b,0xcd,0x2a,0x18,0x97,0x85,0x8e,0x80,0x81,0x86,0x82,0x88,0x82,0x8b,0x89 -,0x85,0x8e,0x8f,0x8d,0xa8,0x8d,0x8d,0x24,0x99,0x3f,0x0a,0x0c,0x19,0x02,0x17,0xab,0x06,0x14,0x10,0x00,0x13,0x1d,0x00,0x31,0x1b,0x10,0xd1,0x22,0x25,0x26,0x2c,0x28 -,0x1d,0x0a,0x0d,0x0e,0xbc,0xb8,0x99,0x8f,0x97,0x90,0xbe,0xa0,0x1c,0x36,0x93,0x28,0x49,0x9b,0x26,0x87,0x91,0xc5,0x82,0x99,0xbb,0x9a,0x97,0x25,0x9e,0x89,0xac,0x9a -,0xa9,0x0c,0x92,0xc1,0x0e,0x89,0xda,0x4d,0x98,0xa4,0xa1,0xaa,0xa5,0xa8,0x23,0x1b,0x0c,0x2c,0x3b,0x0f,0x9a,0xb7,0xa5,0xc5,0x76,0xc3,0x0d,0x40,0xeb,0x0c,0x34,0x15 -,0x28,0x8c,0x17,0xaf,0x98,0x26,0x1d,0x3f,0x1c,0x07,0x19,0x23,0x13,0x24,0x0b,0x12,0xa4,0x03,0x24,0x43,0x09,0x1e,0x1e,0x18,0x26,0x73,0xbc,0x42,0x40,0x26,0xbe,0x88 -,0xb3,0x8a,0x81,0x87,0x80,0x82,0x80,0x87,0x87,0x82,0x89,0x8d,0x95,0x5d,0x83,0xa0,0xa4,0x89,0x3b,0x1d,0x15,0x18,0x07,0x06,0x08,0x05,0x09,0x0c,0x01,0x53,0x0e,0x05 -,0xa9,0x10,0x11,0x1a,0x12,0x14,0x38,0x3f,0x1e,0x19,0x17,0x03,0xab,0x34,0x0b,0x98,0x2c,0xa4,0x93,0x98,0xa5,0xc8,0x9a,0x9f,0x2e,0xc4,0x18,0xa3,0x93,0x3a,0x81,0x92 -,0xa1,0x99,0x9d,0x9c,0x2f,0xb0,0xab,0x38,0x9e,0x49,0x97,0x8a,0x23,0x8f,0x93,0xb7,0xb9,0xbb,0xbe,0x26,0x9e,0xab,0x30,0xbc,0x11,0x2e,0x97,0x0b,0x41,0xcc,0x17,0xcd -,0xae,0xa5,0x2f,0xe7,0xc1,0x1c,0x1f,0x0d,0x19,0x9f,0x0e,0xb4,0x98,0x23,0xed,0x3c,0x39,0x24,0x1c,0x3b,0x1f,0x17,0x21,0x27,0x8b,0xc7,0xbb,0x90,0xcd,0xb8,0x67,0xbe -,0x31,0x2b,0x9e,0xa8,0x2a,0x6e,0x1b,0x98,0x48,0x19,0x96,0x35,0x2b,0xaa,0x97,0xac,0xc2,0xac,0x6b,0x20,0x25,0x0c,0xad,0x49,0x0d,0x94,0xbb,0xc3,0xb6,0xb9,0xbd,0x47 -,0xbe,0x40,0x13,0x1c,0x17,0xa0,0x91,0x1f,0x95,0xac,0xc9,0x5f,0x4b,0xae,0x29,0xab,0x90,0xc0,0xc1,0x26,0xc7,0x8b,0x39,0x98,0x9c,0xcc,0xba,0x9f,0x8f,0xac,0xa4,0x94 -,0xb4,0x54,0x1d,0x1b,0xa6,0x0f,0x6d,0xa4,0x3a,0x41,0x21,0xb0,0x36,0x1e,0x28,0x20,0x0f,0x0f,0x0f,0x9f,0x27,0x12,0xb2,0x23,0x1f,0x1d,0xcf,0x1d,0x19,0xbe,0xaf,0x22 -,0x29,0x1e,0x9a,0x99,0x24,0x95,0xb8,0xc5,0xb4,0x97,0x96,0xa0,0xa0,0x92,0xa1,0x34,0x1f,0xb9,0x9a,0x1b,0x91,0x9a,0xa8,0xc4,0xad,0x8f,0xba,0xaf,0x96,0xaa,0x21,0x29 -,0xe5,0x92,0x27,0x3c,0x92,0x9d,0x39,0x3f,0x9d,0x1e,0x2a,0xb9,0xde,0x2e,0x1b,0x15,0x9b,0x32,0x0e,0xbb,0x2f,0x33,0x27,0xd8,0x1c,0x17,0x29,0x37,0x18,0x09,0x0c,0x1b -,0x1c,0x0a,0x30,0x32,0x67,0x21,0xbd,0x9c,0x1c,0x37,0x3b,0x1b,0x11,0x10,0x1a,0x9f,0x3c,0x2f,0x96,0x94,0xa8,0x9a,0x93,0xae,0x97,0x96,0x91,0x97,0xbb,0x9d,0x88,0x94 -,0x9c,0x84,0x8a,0x8d,0x8c,0x87,0x89,0xa4,0xa0,0x93,0x70,0x11,0x16,0x11,0x0b,0x01,0x0b,0x20,0x0d,0x04,0x0d,0x19,0x06,0x08,0x09,0x0a,0x0a,0x04,0x0b,0x28,0x0f,0x09 -,0x4b,0xae,0xa8,0xb0,0x3f,0xec,0xb3,0xae,0x97,0x9d,0xbf,0x9c,0x98,0x8e,0x92,0xa4,0x96,0x89,0x88,0x8e,0x8f,0x9a,0x99,0x8c,0x8c,0x98,0x56,0x29,0xb5,0x79,0x30,0xa3 -,0x4b,0xce,0x97,0x95,0x9b,0x9e,0x93,0x89,0x87,0x93,0x8e,0x8d,0xa5,0xa7,0x95,0x8c,0x97,0x1e,0x0e,0x28,0x1b,0x0a,0x0e,0x06,0x07,0x0c,0x0b,0x0a,0x06,0x05,0x0f,0x1f -,0x17,0x1e,0x0f,0x08,0x12,0x29,0x39,0x21,0x18,0x14,0x1f,0x18,0x1d,0x28,0x28,0xca,0xc3,0x48,0xbd,0xef,0x54,0x9d,0xa8,0xae,0xba,0x30,0xcf,0x99,0x9c,0xa3,0x9e,0xac -,0xa9,0xa9,0xaf,0xa1,0xad,0xea,0x9f,0x8f,0x8e,0x98,0x91,0x87,0x84,0x87,0x85,0x82,0x87,0x90,0x8e,0x87,0x86,0x93,0x2a,0x3c,0x36,0x0f,0x0b,0x0c,0x10,0x0b,0x07,0x0b -,0x0f,0x0b,0x0c,0x14,0x12,0x19,0x18,0x0b,0x0b,0x0d,0x11,0x25,0x25,0x20,0x14,0x15,0x2a,0x7d,0x45,0x2d,0x22,0x16,0x1f,0x3b,0x29,0x26,0x2b,0x3d,0xae,0x55,0xf2,0xb6 -,0xf7,0x3e,0xd7,0xca,0x28,0x26,0x2b,0x4e,0xc3,0x6b,0xaf,0x96,0x93,0x91,0x8c,0x84,0x83,0x8b,0x88,0x84,0x82,0x8b,0x93,0x8b,0x85,0x8f,0xb0,0xb0,0xa0,0x3c,0x1a,0x1e -,0x1d,0x1a,0x0e,0x11,0x18,0x16,0x0f,0x15,0x1b,0x1b,0x1c,0x18,0x1c,0x20,0x1e,0x1d,0x20,0x18,0x1e,0x1d,0x13,0x16,0x1b,0x21,0x2b,0x29,0x2f,0x3b,0x2b,0x2d,0x31,0xb7 -,0xa8,0x3c,0x1e,0x27,0x30,0x2d,0x4c,0xbd,0xcf,0x2f,0x29,0x41,0xbc,0x5d,0xb9,0x98,0x99,0x9f,0x97,0x8c,0x86,0x87,0x8b,0x84,0x81,0x84,0x8e,0x8b,0x86,0x8e,0xa8,0xba -,0x9a,0xbd,0x16,0x0f,0x18,0x1d,0x17,0x0e,0x11,0x0f,0x14,0x17,0x15,0x20,0x1a,0x15,0x16,0x10,0x10,0x16,0x19,0x1b,0x1b,0x19,0x0f,0x19,0x24,0x24,0x34,0x25,0x1d,0x20 -,0x1e,0x27,0x32,0x62,0xcf,0x3f,0xbf,0xca,0xa9,0xb9,0x37,0xc8,0xbd,0xd2,0x32,0x25,0x2e,0x2d,0x2f,0xab,0x95,0x96,0x9b,0x91,0x88,0x88,0x8c,0x87,0x82,0x85,0x8e,0x8f -,0x89,0x87,0x95,0xb1,0xa5,0x9d,0xe4,0x1e,0x1e,0x1c,0x18,0x13,0x15,0x19,0x18,0x11,0x10,0x1b,0x1d,0x1f,0x37,0x27,0x1f,0x25,0x2a,0x45,0x38,0x2d,0x23,0x1a,0x1e,0x22 -,0x3b,0x49,0x24,0x36,0x3d,0x2f,0x2a,0x3f,0xae,0xd0,0x3c,0x31,0x4f,0xcc,0x2c,0x36,0xb6,0x5a,0x21,0x1f,0x2f,0x28,0x1d,0x30,0xa8,0x9e,0xb6,0xa9,0x8f,0x89,0x8e,0x8f -,0x85,0x82,0x87,0x8d,0x8b,0x86,0x8d,0x9b,0x9c,0x9b,0x4f,0x17,0x0f,0x17,0x1f,0x19,0x0f,0x0e,0x0f,0x15,0x16,0x18,0x1a,0x14,0x0f,0x0f,0x1a,0x1f,0x25,0x24,0x23,0x24 -,0x2d,0x34,0x29,0x25,0x21,0x23,0x35,0x57,0x4e,0x3e,0x25,0x28,0xd2,0x9e,0xb8,0x34,0xc7,0xaf,0xa7,0xbc,0xaf,0xad,0x57,0x2a,0x35,0x4a,0x1e,0x1f,0x66,0x9a,0x9a,0x9d -,0x90,0x87,0x8b,0x8e,0x87,0x85,0x88,0x8e,0x8c,0x86,0x8a,0x99,0xa2,0x96,0x96,0x3f,0x19,0x0f,0x13,0x14,0x11,0x14,0x0e,0x0f,0x0b,0x0e,0x14,0x1a,0x1e,0x1b,0x1d,0x1c -,0x18,0x18,0x21,0x34,0x39,0x21,0x18,0x16,0x1d,0x25,0x2c,0x4c,0x44,0x35,0x2e,0x36,0x48,0xf8,0x40,0x3e,0x48,0xae,0xb4,0x2b,0x32,0x4d,0xbf,0xb8,0xba,0x43,0x1b,0x18 -,0x3d,0x9e,0x98,0xaa,0xad,0x93,0x8a,0x8c,0x8c,0x86,0x84,0x89,0x8b,0x86,0x86,0x8d,0xa0,0x98,0x96,0xad,0x1e,0x0e,0x15,0x1e,0x1c,0x17,0x1d,0x14,0x0e,0x0e,0x16,0x19 -,0x18,0x16,0x15,0x18,0x16,0x1f,0x21,0x2c,0xc7,0x49,0x26,0x1c,0x16,0x18,0x1f,0x47,0x5f,0x46,0x25,0x1e,0x2c,0x53,0xae,0x54,0x3c,0xfb,0xb6,0x4f,0x56,0xbd,0xde,0x3d -,0x38,0x35,0x21,0x17,0x18,0xda,0x9e,0x9f,0xa5,0x8f,0x89,0x8c,0x90,0x8a,0x83,0x8a,0x8e,0x8b,0x88,0x8e,0x9b,0x97,0x8c,0x95,0x3a,0x14,0x16,0x2b,0x1e,0x10,0x0f,0x0e -,0x0c,0x12,0x1b,0x1a,0x15,0x16,0x1b,0x28,0x23,0x1e,0x1e,0x1b,0x2b,0x37,0x2f,0x21,0x1d,0x1d,0x35,0x3b,0x34,0x58,0xdd,0x2e,0x25,0x41,0x74,0x3e,0x2a,0x41,0xaf,0xbc -,0x4a,0x51,0xbb,0xc1,0x2a,0x37,0x3d,0x1b,0x12,0x2c,0xa8,0xb8,0x39,0xb4,0x8c,0x89,0x92,0x8e,0x88,0x88,0x89,0x87,0x83,0x85,0x8f,0x9f,0x91,0x8d,0xa6,0x23,0x18,0x17 -,0x1c,0x1c,0x1c,0x1d,0x15,0x11,0x15,0x16,0x15,0x15,0x13,0x19,0x1b,0x1b,0x1c,0x26,0x34,0x42,0x32,0x26,0x1f,0x1c,0x25,0x27,0x1c,0x1e,0x34,0x2b,0x2d,0x36,0x30,0x3f -,0x2d,0x2d,0xac,0xa4,0x4c,0x48,0xbb,0xbf,0x4c,0x36,0x33,0x28,0x10,0x1a,0xb8,0xa8,0xc1,0x44,0x9c,0x89,0x8c,0x8f,0x8b,0x85,0x85,0x8b,0x88,0x84,0x86,0x8d,0x8e,0x8a -,0x92,0xc5,0x1e,0x1f,0x3f,0x27,0x17,0x15,0x0e,0x0e,0x16,0x16,0x17,0x17,0x14,0x17,0x1f,0x1d,0x1b,0x20,0x1e,0x28,0x24,0x25,0x1c,0x11,0x18,0x2a,0x2b,0x2e,0x2f,0x27 -,0x28,0x2e,0xcf,0xb7,0x40,0x19,0x23,0xfe,0xf4,0xe5,0xcc,0xbd,0x5e,0x2b,0x3c,0x4f,0x1e,0x18,0x49,0xaf,0x3a,0x1f,0x4f,0x93,0x8c,0x8e,0x8f,0x87,0x84,0x89,0x8e,0x87 -,0x82,0x8c,0x95,0x90,0x91,0xa6,0x34,0x1c,0x2b,0x37,0x25,0x1d,0x15,0x0f,0x10,0x14,0x1b,0x19,0x11,0x14,0x14,0x18,0x20,0x21,0x1d,0x23,0x26,0x1c,0x27,0x28,0x1e,0x28 -,0x2c,0x28,0x2c,0x20,0x2a,0x36,0x24,0x2d,0x2f,0x1e,0x38,0xa6,0xa5,0xb1,0xb5,0xaf,0xc8,0x32,0x21,0x2f,0x1c,0x12,0x24,0xbf,0xa5,0xe5,0xe2,0x94,0x89,0x8e,0x98,0x92 -,0x89,0x8a,0x8f,0x88,0x82,0x88,0x91,0x8d,0x89,0x89,0x9b,0x1d,0x1c,0x1d,0x1f,0x1e,0x1b,0x14,0x11,0x10,0x16,0x1b,0x14,0x15,0x19,0x15,0x14,0x17,0x1b,0x28,0x33,0x30 -,0x28,0x1d,0x19,0x1d,0x30,0x40,0x4e,0x5a,0x45,0x3e,0x32,0xc7,0xac,0x39,0x19,0x1d,0x2a,0x28,0x2d,0x3c,0xab,0xa2,0x4b,0x3c,0x5f,0x23,0x1a,0x1f,0xb6,0xaf,0x1b,0x2a -,0x95,0x8c,0x8e,0x8b,0x86,0x83,0x86,0x8b,0x86,0x82,0x88,0x8a,0x8e,0x8d,0x94,0x39,0x17,0x2b,0x40,0x25,0x19,0x11,0x13,0x13,0x13,0x1b,0x1d,0x0e,0x10,0x16,0x18,0x25 -,0x1e,0x1c,0x30,0x28,0x3a,0x39,0x25,0x25,0x1e,0x1d,0x30,0x38,0x24,0x2c,0x4e,0x2d,0x4e,0xb0,0xeb,0xac,0x3c,0x07,0x10,0x82,0x91,0x23,0x80,0x9d,0x0e,0xaf,0x17,0x3a -,0x3f,0xa3,0x98,0xb7,0x0a,0x03,0x25,0x00,0x08,0x0b,0x01,0x05,0x01,0x04,0x07,0x12,0xb4,0x29,0x09,0x14,0xa8,0xc2,0xa3,0x9d,0x24,0x43,0x8b,0x8e,0x8e,0x80,0x88,0x91 -,0x9c,0x89,0x80,0x81,0x80,0x83,0x81,0x82,0x82,0x87,0x95,0x87,0x80,0x82,0x82,0xcd,0xbd,0x86,0x83,0x89,0xa1,0xac,0xdd,0x59,0x1b,0x05,0x08,0x05,0x0d,0x16,0x0c,0x40 -,0x1a,0x07,0x09,0x06,0x0a,0x06,0x12,0x19,0x08,0x09,0x06,0x00,0x01,0x00,0x0b,0x0f,0x04,0x03,0x00,0x02,0x05,0x11,0x06,0x08,0x19,0x0a,0x05,0x00,0x0b,0x1f,0x09,0x2f -,0x96,0xe6,0x9b,0x3f,0xac,0x8a,0x84,0x82,0x91,0x87,0x82,0x80,0x80,0x83,0x84,0x9b,0x8b,0x80,0x81,0x80,0x82,0x82,0x80,0x83,0x87,0x83,0x80,0x80,0x81,0x85,0x96,0x8a -,0x89,0x92,0x81,0x81,0x80,0x89,0x22,0x8f,0x84,0x82,0x89,0x93,0x87,0x91,0x8a,0xb0,0x17,0x3c,0x16,0x18,0x12,0x04,0x17,0x08,0x05,0x08,0x03,0x04,0x00,0x05,0x00,0x04 -,0x03,0x02,0x00,0x01,0x00,0x07,0x0f,0x03,0x06,0x00,0x01,0x04,0x03,0x01,0x06,0x19,0x1b,0x0e,0x02,0x09,0x0b,0x07,0x02,0x13,0x11,0x16,0x13,0x05,0x1c,0x12,0x20,0x0e -,0x07,0x12,0xe8,0x37,0x0f,0x0e,0x15,0x2d,0xa2,0x87,0x92,0x8e,0x96,0x8a,0x94,0x9a,0x84,0x85,0x83,0x85,0x86,0x95,0x95,0x8d,0x8b,0x9e,0x8a,0x80,0x83,0x89,0x8c,0x80 -,0x82,0x80,0x85,0x8a,0x87,0x80,0x85,0x8a,0x8e,0x88,0x92,0x0f,0xb6,0xa1,0x94,0xc3,0x0e,0x23,0x1a,0x6a,0x48,0xd8,0x8a,0x85,0x8d,0x9d,0x2c,0x92,0x98,0x8e,0x83,0x8f -,0x88,0x9e,0x91,0x8d,0x94,0x88,0x8d,0x8f,0x8d,0xa3,0x8a,0x87,0x88,0x89,0x29,0x8d,0x8b,0x89,0x8b,0x9f,0x84,0x87,0x91,0xb0,0xbf,0x8d,0x8c,0xe3,0x39,0x08,0x0b,0x02 -,0x06,0x1c,0x16,0xaf,0x0b,0x01,0x06,0x06,0x09,0x04,0x01,0x05,0x02,0x03,0x02,0x00,0x00,0x00,0x06,0x03,0x01,0x01,0x00,0x02,0x01,0x00,0x00,0x01,0x05,0x03,0x00,0x04 -,0x00,0x02,0x00,0x06,0x14,0x18,0x11,0x00,0x01,0x01,0x03,0x04,0x01,0x03,0x0d,0x0b,0x0d,0x04,0x0b,0x09,0x0c,0xa6,0x48,0xb6,0x23,0x2f,0x9e,0x9f,0x8d,0x8b,0x8c,0x87 -,0x85,0x80,0x80,0x81,0x86,0x8a,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x81,0x8b,0x94,0xbe,0x8a,0x81,0x82,0x86,0xc3,0xa9,0x96,0x88,0x84 -,0x87,0x85,0x8a,0x8b,0x89,0x9a,0xac,0x26,0x8f,0x81,0x86,0x90,0x21,0xad,0x9c,0x9d,0xc1,0x1b,0x29,0xaa,0xe3,0xb8,0x2e,0x29,0x0b,0x0f,0xb1,0xa5,0x98,0x15,0x0f,0x15 -,0x1b,0x1d,0x0d,0x06,0x0e,0x0f,0x0f,0x03,0x01,0x00,0x05,0x25,0x1f,0x1b,0x04,0x04,0x0a,0x0a,0x0c,0x08,0x09,0x0f,0x09,0x0d,0x0b,0x04,0x00,0x02,0x16,0x1a,0x17,0x04 -,0x00,0x08,0x0e,0x17,0x0e,0x07,0x1f,0x23,0x38,0x1c,0x07,0x03,0x07,0x9a,0x9b,0xa3,0x1d,0x0b,0x16,0x17,0x3a,0x4c,0x1b,0x2f,0x33,0xcd,0xd1,0x1e,0x1d,0x28,0x88,0x84 -,0x87,0xb1,0x17,0xa5,0x89,0x83,0x88,0x97,0x8f,0x88,0x84,0x82,0x89,0x8e,0x8a,0x80,0x80,0x80,0x82,0x83,0x82,0x80,0x81,0x84,0x92,0x8f,0x94,0x8d,0x96,0x19,0x04,0x00 -,0x1e,0x48,0x28,0x05,0x00,0x01,0x03,0x0b,0x10,0x07,0x14,0x13,0x1f,0x10,0x02,0x03,0x04,0xa4,0x99,0xaa,0x0f,0x00,0x09,0x17,0xae,0x9a,0x1a,0x21,0x18,0xb1,0xa0,0x25 -,0x23,0x1d,0x86,0x82,0x82,0x9f,0x1f,0x9f,0x85,0x82,0x84,0x93,0x8a,0x8b,0x86,0x8e,0x38,0x19,0x1f,0x87,0x82,0x82,0x96,0x3f,0xa6,0x8b,0x81,0x83,0x8e,0x8c,0x99,0x88 -,0x96,0x3c,0x0f,0x1a,0x88,0x84,0x8c,0x15,0x02,0x0a,0x20,0x9a,0xa5,0x16,0x26,0x1e,0x9a,0x2f,0x0c,0x03,0x0f,0x8f,0x8c,0x8f,0x1a,0x08,0x08,0x15,0xa4,0xcb,0x11,0x0c -,0x0b,0xd9,0x10,0x04,0x00,0x0e,0x95,0x8a,0x92,0x0c,0x02,0x03,0x0e,0x99,0xaf,0xce,0x48,0xc1,0x8b,0xaa,0xf3,0x1e,0x90,0x80,0x81,0x80,0x93,0xb8,0x98,0x87,0x80,0x82 -,0x83,0x98,0x9b,0x89,0xa2,0x1e,0x04,0x13,0xc1,0x9d,0x1b,0x00,0x01,0x00,0x05,0x12,0x0b,0x0f,0x09,0x15,0x28,0x0e,0x05,0x02,0x18,0xa8,0x8d,0xa7,0x11,0x07,0x07,0x27 -,0x98,0x9e,0x9e,0x1c,0x3f,0x39,0x1a,0x09,0x0b,0xa3,0x88,0x82,0x8e,0x65,0x20,0x36,0x8d,0x86,0x8b,0x8d,0xa0,0x8f,0xa3,0xc5,0x11,0x28,0xb1,0x8f,0x8b,0xac,0x21,0x0e -,0x1c,0x95,0x8f,0x8d,0x9d,0xb3,0x9b,0xae,0xbe,0x0b,0x23,0xb8,0x8a,0x8b,0xed,0x14,0x08,0x0c,0x21,0x1d,0xbe,0x1e,0x1c,0x28,0x1d,0x17,0x0a,0x4e,0xaf,0x8f,0xac,0x20 -,0x0e,0x0b,0x19,0x3f,0x39,0xdd,0x11,0x19,0x18,0x1e,0x0b,0x04,0x0c,0x1a,0x9d,0x2f,0x1e,0x0e,0x10,0x26,0x3b,0xdc,0xad,0x2b,0xa5,0xc8,0x9f,0x3a,0xae,0x91,0x8b,0x81 -,0x88,0x87,0x93,0x8e,0x85,0x83,0x81,0x83,0x87,0x85,0x8c,0x8a,0xba,0x9b,0xae,0x9a,0x9f,0x1a,0x0d,0x04,0x07,0x0c,0x06,0x0b,0x05,0x05,0x08,0x05,0x0d,0x04,0x20,0x1b -,0xb5,0xea,0x1c,0x1e,0x10,0x1d,0xb3,0x4b,0xa8,0x1b,0x20,0x3b,0x29,0x59,0x17,0xaf,0xdc,0x99,0xa0,0xb1,0xbd,0x60,0xa7,0x93,0x97,0x8c,0x9e,0x95,0x98,0x97,0x9f,0x9f -,0x8a,0x90,0x8d,0xb9,0xbc,0x27,0x1d,0x59,0xad,0xa4,0x9a,0x50,0x9c,0xb5,0x95,0xb6,0xa9,0x90,0x9f,0x90,0xe2,0x4c,0x1d,0x1d,0xb9,0xc5,0xce,0xb8,0x15,0x30,0x0d,0x19 -,0x0e,0x22,0xb8,0xc4,0xa5,0x2a,0x24,0x17,0x1b,0xbd,0xb2,0xad,0xdf,0x0e,0x1a,0x0a,0x14,0x09,0x22,0x2a,0x2b,0x1d,0x0b,0x0a,0x07,0x10,0x39,0x34,0x6c,0x29,0x14,0x26 -,0x14,0x3e,0x25,0x91,0x8f,0x87,0x8a,0x8f,0x8b,0x90,0x88,0x82,0x83,0x81,0x86,0x88,0x88,0x8c,0x89,0x92,0x84,0x88,0x83,0x8e,0xa9,0x28,0x0e,0x0d,0x17,0x0d,0x10,0x07 -,0x04,0x03,0x01,0x02,0x04,0x19,0x1d,0xb0,0x24,0x13,0x0a,0x07,0x10,0xe6,0xdd,0x9f,0x31,0x2b,0x13,0x1b,0x1c,0x2f,0x9c,0x9e,0x8e,0xd8,0x22,0x17,0x1c,0x53,0x9b,0x98 -,0x8b,0x9d,0x99,0x63,0xa0,0xbc,0x9c,0x87,0x89,0x85,0x99,0xad,0x3c,0x27,0xd0,0xa0,0x9e,0x97,0x31,0xc3,0x1f,0xbc,0x2d,0xa9,0x94,0x8e,0x88,0x96,0xa5,0x46,0x24,0x2d -,0xba,0xac,0xa0,0x2a,0x26,0x0a,0x0f,0x07,0x1e,0x3c,0xba,0xa2,0x30,0x25,0x15,0x16,0x27,0xda,0x9c,0x9f,0x73,0x57,0x0d,0x11,0x09,0x22,0x5c,0xbb,0xbe,0x19,0x0c,0x09 -,0x09,0x17,0x1b,0x22,0x23,0x12,0x1a,0x0b,0x18,0x16,0xcd,0x9b,0x97,0x8b,0x90,0x90,0x91,0x9a,0x8d,0x87,0x83,0x82,0x85,0x86,0x8a,0x88,0x8b,0x88,0x83,0x8a,0x8b,0x93 -,0x98,0x9b,0x22,0x24,0x15,0x1c,0x1c,0x0f,0x0e,0x05,0x03,0x03,0x02,0x0a,0x07,0x0c,0x0e,0x0a,0x14,0x0a,0x12,0x18,0x1f,0xc7,0xd1,0xc0,0x32,0x29,0x21,0x1a,0x33,0x3a -,0xd0,0xbd,0xd0,0xc4,0xdd,0x31,0xbe,0xa2,0x9e,0x97,0xa3,0xa3,0x9f,0x97,0x90,0x8e,0x94,0x98,0x9e,0x97,0x92,0x93,0xa0,0xd6,0xfc,0x33,0xbb,0xab,0xaa,0xa1,0xe5,0xbb -,0xa5,0xac,0xab,0xbe,0xb8,0xa5,0x96,0x9e,0x9f,0xbe,0x26,0x2f,0x37,0xe4,0xb8,0x3b,0x36,0x1f,0x23,0x22,0x28,0x2a,0x17,0x28,0x1d,0x35,0x33,0x1d,0x1f,0x1d,0x24,0xbd -,0xc0,0xb8,0x42,0x26,0x17,0x14,0x12,0x12,0x16,0x0b,0x0e,0x12,0x13,0x17,0x16,0x12,0x1b,0x17,0x21,0x43,0xe1,0xae,0xa5,0xa2,0x9a,0x8d,0x88,0x83,0x84,0x87,0x85,0x87 -,0x86,0x83,0x84,0x84,0x85,0x8a,0x92,0x8e,0x92,0x93,0x9a,0xab,0xbd,0x37,0x15,0x0f,0x0c,0x07,0x0a,0x0c,0x0c,0x08,0x08,0x04,0x09,0x0a,0x0d,0x16,0x13,0x17,0x14,0x16 -,0x4f,0x46,0x30,0x2a,0x35,0x3d,0x42,0x75,0x2e,0x2a,0x29,0xc5,0xa9,0xb9,0xdd,0xd7,0x39,0xd8,0xeb,0xc1,0x9d,0x92,0x93,0x9c,0xac,0x9f,0x98,0x93,0x90,0x97,0x94,0x97 -,0x9a,0xad,0xea,0x4c,0xbe,0xa0,0xa5,0x69,0xcb,0x2c,0x35,0xc5,0xc0,0xb7,0x44,0x3c,0x28,0xbc,0xa4,0xa3,0xad,0x2c,0x1e,0x1e,0x3f,0x66,0x3c,0x2d,0x18,0x15,0x23,0x61 -,0x4b,0x6d,0x29,0x24,0x2e,0x4d,0x44,0x3e,0xbd,0xb0,0x98,0xa1,0xb0,0x2b,0x2c,0x34,0x4d,0xb2,0xce,0x30,0x14,0x0f,0x12,0x48,0x97,0x8f,0x9d,0x31,0x16,0x29,0xbf,0xab -,0xa7,0x9f,0xaf,0x2b,0x3e,0x32,0xcc,0xaf,0xbf,0x2f,0x1f,0x29,0x25,0x39,0x33,0x1f,0x2a,0xb6,0x9e,0xb3,0x62,0x4d,0xd3,0xa8,0xa1,0x9f,0xb6,0x32,0x2e,0x30,0xa9,0xa1 -,0xb2,0x27,0x1b,0x1f,0x54,0xa1,0xa9,0xa6,0x4b,0x30,0xd8,0x9a,0x92,0x8f,0x9f,0xef,0x34,0x4e,0xa8,0xa0,0x9c,0xad,0xba,0xaa,0xa8,0xbb,0xd6,0xb2,0xc8,0x42,0xba,0x62 -,0x2c,0x20,0x1a,0x20,0xac,0x9a,0x97,0xc8,0x19,0x0f,0x0f,0x30,0x3a,0x28,0x1b,0x0b,0x05,0x0b,0x1a,0x4f,0x4f,0x39,0x19,0x12,0x1c,0x21,0x48,0xd5,0x38,0xd3,0xb3,0xac -,0xba,0xb6,0xbc,0x51,0xaf,0xa1,0x9c,0x9f,0xab,0xcf,0xb3,0x96,0x8f,0x8e,0x8f,0xa1,0xa9,0x99,0x8f,0x8e,0x93,0xb5,0x36,0xc8,0x9a,0x8f,0x98,0xaf,0x21,0x1c,0x2a,0xce -,0xb4,0xac,0xe9,0x34,0x4c,0x48,0x43,0xae,0xab,0x4f,0x2a,0x25,0x1e,0x1c,0x1d,0x25,0x3f,0x2f,0x1a,0x0f,0x15,0x1b,0x25,0x1d,0x0e,0x0c,0x11,0x20,0x44,0x2e,0x22,0x21 -,0x21,0x2a,0x46,0xb8,0xe1,0x21,0x15,0x10,0x1e,0xa4,0x94,0xa9,0x1d,0x17,0x1f,0xaf,0x92,0x9b,0x9b,0x9a,0xa2,0x99,0x8e,0x8d,0x8e,0x8b,0x8c,0x9c,0x9f,0x93,0x95,0x8e -,0x94,0x99,0x91,0x8b,0x8a,0x94,0x92,0x9f,0xa0,0x9d,0xa9,0xaa,0xad,0xde,0x20,0x1d,0x2a,0x30,0x1e,0x10,0x07,0x09,0x0b,0x0b,0x0a,0x04,0x01,0x01,0x05,0x0b,0x0e,0x0e -,0x09,0x07,0x08,0x0d,0x1a,0x29,0x32,0x28,0x24,0x2f,0x3d,0xb8,0x9d,0x9e,0xa1,0x9a,0x91,0x93,0x94,0x96,0x99,0x93,0x8a,0x85,0x87,0x8d,0x90,0x8f,0x8b,0x88,0x89,0x8d -,0x90,0x91,0x9c,0x92,0x8f,0x8f,0x8d,0x9c,0x4e,0x38,0xb6,0xa6,0xa7,0xb3,0xbd,0xac,0x9b,0xa3,0xcc,0x3d,0x2e,0x2c,0x2c,0x29,0x1b,0x18,0x18,0x13,0x16,0x1c,0x20,0x1d -,0x18,0x13,0x11,0x1e,0x25,0x1b,0x0d,0x0a,0x0e,0x1c,0x61,0x4d,0x29,0x1f,0x21,0x1e,0x29,0x22,0x21,0x28,0x1d,0x17,0x1e,0x2a,0x34,0xbd,0xd1,0xf8,0xcf,0x9e,0x9d,0xa8 -,0xbf,0x46,0xc0,0x9e,0x90,0x95,0xaa,0xb4,0xb0,0x9b,0x91,0x97,0x99,0x9f,0xb1,0xd4,0xa0,0x96,0x92,0x9a,0xb9,0xf5,0xad,0x9f,0xa5,0xbf,0x4a,0x4e,0x53,0xbc,0xce,0x36 -,0x1a,0x10,0x10,0x14,0x10,0x0d,0x0f,0x11,0x11,0x1b,0x39,0xd8,0xb9,0x3f,0x22,0x34,0xa3,0x8f,0x8f,0x98,0xa4,0xa7,0x8b,0x83,0x83,0x86,0x8b,0x8d,0x8b,0x85,0x85,0x8c -,0x96,0xa0,0xad,0xa0,0x9d,0xa6,0x58,0x23,0x14,0x10,0x17,0x18,0x0c,0x04,0x02,0x03,0x07,0x0b,0x08,0x05,0x06,0x07,0x0c,0x0d,0x0f,0x0f,0x0d,0x0c,0x0b,0x12,0x2d,0x33 -,0x21,0x19,0x16,0x28,0xa2,0x9a,0xbf,0x3b,0x5c,0xa2,0x8f,0x8c,0x99,0xb7,0xa6,0x8f,0x8b,0x8c,0x8d,0x96,0xa7,0x9d,0x8d,0x8a,0x88,0x89,0x92,0xa7,0x9d,0x8e,0x8d,0x98 -,0xb8,0x4a,0xb1,0x96,0x8d,0x92,0xb6,0x52,0xb4,0xa0,0xa5,0xa0,0xba,0x27,0x21,0x2b,0x3e,0xbd,0xa4,0x55,0x1d,0x17,0x29,0xa7,0xa6,0x24,0x0a,0x06,0x10,0xce,0xa6,0x27 -,0x0e,0x0d,0x10,0x36,0xa9,0xdf,0x18,0x10,0x14,0x0c,0x28,0xa9,0x26,0x0a,0x0d,0x14,0x18,0xa2,0xa4,0x0f,0x09,0x24,0xb5,0xa8,0xa0,0x3d,0x14,0x23,0xa7,0xa8,0xaf,0xa1 -,0xc1,0x17,0x15,0xa6,0x8e,0x95,0x9c,0xa4,0x59,0x25,0x93,0x82,0x96,0x20,0x2c,0xb7,0xab,0x8b,0x88,0x4b,0x13,0x2a,0xc4,0xb9,0x9e,0xbf,0x0b,0x08,0x26,0x9f,0xbe,0x33 -,0x46,0x19,0x14,0x99,0x82,0x8c,0x3e,0x53,0xac,0x9f,0x88,0x81,0x8b,0xb2,0x9e,0x8e,0x87,0x83,0x81,0x8d,0xad,0x9f,0x9b,0x99,0x8e,0x8a,0x4c,0x09,0x0f,0x31,0xfa,0x2f -,0x1e,0x0a,0x01,0x08,0x27,0x1f,0x05,0x02,0x03,0x02,0x0a,0x24,0x0d,0x01,0x02,0x06,0x0f,0x2f,0xbb,0x10,0x02,0x08,0x23,0xae,0xa7,0xbd,0x1a,0x0a,0x2e,0x8d,0x87,0x95 -,0xe9,0xc0,0xcf,0x94,0x84,0x85,0x9e,0x53,0xa4,0x9c,0x8b,0x82,0x88,0xa2,0xb1,0x99,0x90,0x87,0x83,0x93,0x1f,0x24,0x9e,0x91,0x8b,0x8f,0xfd,0x10,0x1d,0x93,0x86,0x91 -,0x62,0x25,0x18,0x1e,0x95,0x8c,0xdd,0x13,0x0e,0x14,0x2c,0x94,0xa5,0x0f,0x08,0x0f,0x23,0xbe,0xa7,0x19,0x04,0x07,0x1f,0xaa,0xb5,0x20,0x10,0x09,0x0c,0x49,0x8f,0xb0 -,0x0d,0x0a,0x0b,0x12,0xb4,0x98,0x2e,0x0d,0x0c,0x11,0x2c,0x91,0x92,0x25,0x11,0x24,0xb4,0xa0,0x96,0xa9,0x22,0x14,0x37,0x8f,0x8d,0xa0,0xbf,0xba,0x3f,0x9a,0x83,0x88 -,0xb8,0x38,0x2b,0x42,0x8b,0x82,0x98,0x13,0x1b,0x4e,0x9d,0x8a,0x91,0x1d,0x08,0x14,0xbf,0x99,0xa9,0x26,0x0e,0x07,0x0f,0x9a,0x8c,0x54,0x18,0x1f,0x1a,0xc1,0x86,0x88 -,0xbd,0xc7,0x9a,0x96,0x87,0x81,0x88,0x9c,0x99,0x8c,0x8a,0x84,0x84,0x8f,0x7b,0x2a,0xa4,0x8b,0x98,0x2f,0x1c,0x0b,0x05,0x21,0x9d,0x21,0x05,0x05,0x02,0x05,0x24,0x23 -,0x04,0x01,0x01,0x04,0x0f,0x3f,0x16,0x03,0x02,0x09,0xeb,0xad,0x2d,0x0f,0x08,0x04,0x1a,0x8b,0x8f,0x25,0x21,0x41,0x2f,0x92,0x81,0x8c,0x55,0xca,0xa6,0x9c,0x88,0x84 -,0x94,0xc2,0xaf,0x9d,0x8c,0x84,0x87,0x92,0xbe,0xc7,0x8e,0x86,0x8c,0x96,0x97,0x68,0x51,0x8a,0x85,0x9c,0xdb,0xca,0x56,0x97,0x84,0x8d,0x28,0x18,0x19,0x40,0x8e,0x8e -,0x27,0x06,0x09,0x19,0xa9,0x99,0xb2,0x1c,0x09,0x08,0x2b,0x98,0x61,0x0e,0x0c,0x08,0x08,0x3c,0xa6,0x1b,0x0c,0x0f,0x0d,0x18,0xb7,0x3b,0x0f,0x0d,0x0a,0x0a,0x27,0xa4 -,0xbf,0x15,0x0b,0x15,0xc2,0x9e,0xa7,0x78,0x1c,0x0e,0x30,0x8f,0x91,0xab,0xc5,0x2c,0x28,0x8f,0x83,0x90,0xd7,0x2d,0x28,0x9e,0x84,0x86,0xb2,0x1b,0x35,0xac,0x94,0x8d -,0x94,0x46,0x1a,0x5a,0x96,0x93,0xaf,0x3b,0x20,0x0d,0x24,0x96,0x9c,0x2c,0x22,0x21,0x15,0x76,0x8f,0x94,0xa3,0xad,0xcf,0xc2,0x90,0x85,0x8d,0xa4,0xa5,0x94,0x8a,0x84 -,0x82,0x88,0x9d,0xb3,0x90,0x88,0x8d,0x9b,0x4e,0x10,0x11,0xa7,0x9a,0x24,0x0a,0x05,0x05,0x12,0xb9,0x18,0x02,0x01,0x01,0x05,0x0d,0x1d,0x0d,0x03,0x03,0x07,0x14,0x1f -,0x1b,0x14,0x06,0x06,0x1f,0xab,0x57,0x24,0x30,0x1f,0x1b,0xb2,0x98,0x9c,0x9d,0xa8,0xc7,0xa9,0x8c,0x87,0x90,0xb1,0xc4,0xa4,0x8e,0x86,0x89,0x9b,0x75,0xb7,0x90,0x87 -,0x85,0x88,0x9f,0x3c,0xa6,0x87,0x86,0x94,0x53,0x1f,0xd6,0x8d,0x85,0x92,0x37,0x29,0x2a,0x51,0x9c,0x95,0x43,0x12,0x17,0x2d,0xad,0x9f,0xaf,0x1d,0x0d,0x15,0xad,0x9f -,0xbf,0x19,0x0e,0x0b,0x0c,0x26,0x3a,0x36,0x1e,0x0e,0x09,0x11,0x48,0x5d,0x16,0x0b,0x08,0x09,0x1f,0xd3,0x30,0x17,0x0c,0x0f,0x1d,0xc6,0xa7,0x3d,0x15,0x0f,0x47,0x97 -,0x99,0xb0,0x19,0x0e,0x33,0x94,0x8e,0x99,0xcc,0x35,0x23,0xa7,0x88,0x85,0x90,0xc8,0xc1,0x54,0xaa,0x8e,0x98,0x4b,0x2f,0xbd,0x9c,0x97,0x8f,0x98,0xf7,0x1d,0x1c,0x26 -,0xe1,0x9e,0xc2,0x1e,0x0f,0x1d,0xb2,0xb8,0xd2,0xbf,0x24,0x3c,0x96,0x8c,0x95,0xac,0xad,0xa3,0x92,0x83,0x81,0x87,0x8f,0x98,0x8e,0x87,0x84,0x8b,0xa3,0x5f,0x9f,0x98 -,0xa0,0xab,0x77,0x13,0x08,0x07,0x1d,0x19,0x0c,0x0d,0x04,0x03,0x05,0x0c,0x0c,0x07,0x08,0x08,0x07,0x0a,0x1b,0x11,0x09,0x04,0x05,0x1b,0x39,0xa3,0x2c,0x07,0x08,0x16 -,0xc6,0x92,0x9c,0x2f,0x1a,0x32,0x8d,0x8a,0x94,0x4b,0x0f,0x41,0x90,0x83,0x82,0x96,0x3f,0x36,0x97,0x82,0x82,0x89,0x9e,0xbf,0x96,0x96,0x94,0x2d,0x1b,0x4e,0x93,0x80 -,0x84,0x8e,0x41,0x10,0x30,0x8b,0x87,0x8c,0x2e,0x17,0x1f,0x1d,0x18,0x1b,0x9e,0x99,0x8a,0x95,0x1e,0x12,0x16,0x94,0x9f,0x02,0x8e,0x91,0x08,0x4b,0x0e,0x08,0x00,0x0c -,0x17,0xc6,0xaa,0x00,0x03,0x00,0x01,0x06,0x03,0x0d,0x05,0x00,0x05,0x05,0x03,0x00,0x07,0x25,0x9f,0x8a,0x99,0xcf,0x1e,0xde,0x8d,0x86,0x86,0x80,0x84,0x8c,0x85,0x81 -,0x82,0x8a,0x80,0x80,0x80,0x81,0x85,0x8c,0x97,0x89,0x80,0x82,0x80,0x8c,0x91,0x8d,0x9f,0x2a,0x21,0x8a,0x89,0x80,0x8c,0x1e,0x06,0x04,0x14,0xc8,0xd1,0x1c,0x08,0x01 -,0x08,0x02,0x02,0x00,0x08,0x09,0x25,0x1d,0x02,0x00,0x00,0x00,0x0a,0x10,0x0e,0x05,0x00,0x04,0x00,0x03,0x00,0x09,0x10,0xcd,0xae,0x08,0x04,0x01,0x0d,0xad,0x98,0x8d -,0x92,0xa1,0x8d,0x99,0xa4,0x38,0x8e,0x80,0x81,0x80,0x87,0x90,0xb7,0x89,0x80,0x80,0x80,0x82,0x84,0x82,0x84,0x86,0x8e,0x8a,0x80,0x81,0x80,0x82,0x8b,0xc7,0x94,0x80 -,0x80,0x80,0x81,0x8f,0x8a,0x89,0x95,0x3d,0xa7,0x83,0x83,0x80,0xa7,0x0f,0x06,0x0b,0x35,0xa7,0xf8,0x25,0x05,0x0c,0x06,0x01,0x00,0x02,0x18,0x2e,0xb9,0x08,0x00,0x00 -,0x00,0x09,0x13,0x0b,0x07,0x00,0x04,0x02,0x00,0x00,0x00,0x0c,0x2a,0xa9,0x08,0x00,0x01,0x00,0x0c,0x28,0x1f,0x16,0x04,0x07,0x07,0x05,0x03,0x06,0xac,0x90,0x88,0x4f -,0x07,0x04,0x0b,0x97,0x84,0x87,0x8b,0xab,0x92,0x91,0xa8,0x48,0xa4,0x80,0x82,0x80,0x8b,0xc3,0x25,0x9b,0x81,0x80,0x80,0x84,0x97,0x8d,0x88,0x8d,0x9f,0x99,0x80,0x82 -,0x80,0x88,0xb1,0x18,0xbc,0x82,0x80,0x81,0x85,0xa3,0x95,0x97,0x9a,0xe2,0xaa,0x81,0x82,0x80,0x99,0x1f,0x0d,0x25,0x8a,0x82,0x86,0x8e,0xcf,0xa6,0x50,0x37,0x1d,0x55 -,0x84,0x84,0x80,0x9f,0x10,0x08,0x23,0x8b,0x81,0x86,0x8e,0x3c,0xb7,0x5c,0xd8,0x2c,0xd1,0x84,0x85,0x81,0xa1,0x14,0x06,0x15,0x96,0x87,0x89,0x9e,0x0f,0x0f,0x0c,0x0d -,0x07,0x0f,0xc8,0xae,0xa3,0x08,0x00,0x00,0x01,0x12,0x29,0x17,0x09,0x00,0x01,0x00,0x01,0x00,0x02,0x0b,0x1b,0x15,0x01,0x00,0x00,0x00,0x08,0x1a,0x0d,0x07,0x00,0x02 -,0x00,0x02,0x00,0x03,0x0b,0x18,0x27,0x03,0x00,0x00,0x00,0x11,0x54,0x53,0x19,0x01,0x08,0x04,0x0c,0x08,0x16,0x96,0x94,0x8c,0x2e,0x0f,0x0a,0x2a,0x87,0x80,0x81,0x83 -,0x91,0x8f,0x8c,0x87,0x88,0x86,0x80,0x81,0x80,0x84,0x88,0x93,0x8a,0x80,0x80,0x80,0x81,0x86,0x83,0x83,0x81,0x82,0x84,0x80,0x81,0x80,0x82,0x89,0x9d,0x98,0x81,0x80 -,0x80,0x82,0x93,0x8e,0x8e,0x8b,0x91,0x9e,0x82,0x85,0x80,0x8d,0x2d,0x12,0x0e,0x97,0x88,0x8d,0xa1,0x0d,0x0e,0x0d,0x0c,0x0b,0x01,0x1c,0x21,0xc2,0x18,0x00,0x02,0x00 -,0x0c,0x2e,0x1e,0x0b,0x01,0x01,0x02,0x03,0x04,0x00,0x09,0x0e,0x2d,0x14,0x00,0x02,0x00,0x06,0x1f,0x35,0x15,0x02,0x02,0x04,0x04,0x09,0x01,0x11,0x1d,0xad,0x44,0x02 -,0x04,0x00,0x14,0xa2,0x9b,0xa0,0x18,0x17,0x21,0x22,0x2e,0x0d,0xac,0x8f,0x88,0x88,0x2d,0x17,0x09,0xa9,0x83,0x83,0x84,0xa1,0xae,0x98,0x91,0x8f,0x3c,0x96,0x84,0x83 -,0x81,0xa0,0x2f,0x0e,0xa5,0x81,0x82,0x82,0x9d,0xad,0xa4,0xa9,0x95,0x4d,0xa9,0x8b,0x88,0x84,0xdd,0x29,0x0e,0x1e,0x8b,0x88,0x89,0x51,0x21,0x3e,0x22,0x3d,0x0f,0x1b -,0xa1,0x99,0x88,0x20,0x0b,0x04,0x0c,0x98,0x9a,0x93,0x1e,0x0d,0x19,0x1c,0x2c,0x0a,0x0c,0xd5,0xa4,0x87,0xdf,0x0a,0x04,0x06,0xa3,0x92,0x8c,0xd5,0x15,0x1f,0x1e,0xcd -,0x24,0x18,0x98,0x8f,0x83,0x9f,0x27,0x16,0x0f,0x8d,0x88,0x83,0x8f,0xaa,0xaf,0xba,0x96,0xa7,0x4b,0x8a,0x87,0x80,0x8f,0x36,0x1d,0x15,0x8b,0x87,0x81,0x91,0x37,0xc3 -,0xae,0x9f,0x3a,0x14,0xad,0x95,0x84,0x94,0x0f,0x0a,0x03,0xd9,0x98,0x8a,0xa7,0x11,0x16,0x1a,0x40,0x1d,0x0c,0x36,0xa4,0x8d,0x9d,0x0e,0x0a,0x01,0x34,0x9a,0x8d,0x9b -,0x1f,0x1c,0x1c,0x35,0x1e,0x0c,0x3e,0x9c,0x8c,0x97,0x13,0x0c,0x02,0x43,0x98,0x8c,0x9f,0x1a,0x1e,0x1f,0x43,0x25,0x0d,0x2d,0xa0,0x8a,0x8f,0x15,0x0c,0x02,0x3b,0x94 -,0x88,0x93,0x21,0x25,0x1e,0x36,0x2e,0x15,0xea,0xa0,0x8b,0x90,0x21,0x17,0x06,0x3f,0x9a,0x8d,0x94,0x36,0x2b,0x1d,0x39,0x28,0x16,0xb1,0x9b,0x89,0x94,0x1e,0x11,0x05 -,0xca,0x97,0x8a,0x97,0x2c,0x29,0x1f,0xe2,0x26,0x16,0xc2,0x9d,0x86,0x99,0x28,0x0e,0x06,0xd3,0x98,0x89,0x9e,0x1f,0x21,0x1d,0xec,0x25,0x1e,0xa6,0x9c,0x89,0xb9,0x1e -,0x0c,0x0d,0xaf,0x98,0x8c,0xb6,0x22,0x1f,0x24,0x56,0x1b,0x2d,0xa9,0x9c,0x8c,0x36,0x21,0x08,0x12,0xb1,0x99,0x8d,0x38,0x22,0x1c,0x2d,0x54,0x1c,0xb1,0xa8,0x95,0x98 -,0x2c,0x27,0x09,0x1f,0xc1,0x99,0x93,0x54,0x51,0x24,0x34,0x26,0x2c,0x9a,0x9d,0x8f,0xb4,0x29,0x18,0x11,0xdf,0xb2,0x93,0xa9,0x3d,0x2e,0x29,0x35,0x1b,0xad,0x9b,0x92 -,0xa4,0x1d,0x1f,0x12,0x4a,0xb5,0xa2,0x9d,0x40,0xfe,0x24,0x2b,0x1b,0x31,0x90,0x93,0x93,0x18,0x16,0x1b,0x30,0x9a,0xbd,0xa3,0x2b,0x41,0x3b,0x2c,0x25,0x19,0x9b,0x94 -,0x8f,0x49,0x0d,0x17,0x1d,0x98,0x99,0xa4,0x40,0x1e,0x37,0x2b,0x3c,0x1d,0xb2,0x99,0x91,0xaa,0x0e,0x10,0x14,0x99,0x8d,0x91,0x49,0x0e,0x1b,0x25,0xb8,0x23,0xb4,0x9c -,0x8f,0x96,0x17,0x0f,0x08,0xaf,0x8c,0x87,0x9a,0x14,0x18,0x10,0x4f,0x1f,0xa6,0x92,0x8c,0x8f,0x14,0x10,0x07,0x49,0x90,0x89,0x91,0x24,0x1b,0x0d,0x19,0x14,0xb3,0x92 -,0x89,0x8e,0x20,0x15,0x08,0x54,0xa3,0x90,0x96,0xbb,0xf8,0x10,0x13,0x09,0xaf,0x98,0x87,0x94,0x1b,0x16,0x07,0xb3,0xbf,0x95,0xa6,0xb9,0xad,0x19,0x12,0x06,0xc2,0x99 -,0x88,0x9e,0x26,0x17,0x13,0xaf,0xbd,0x9d,0x36,0xb4,0xe6,0x79,0x12,0x13,0xae,0x9d,0x8a,0x2b,0x36,0x10,0x43,0xa1,0xaf,0x9f,0x20,0xcd,0x23,0x40,0x1a,0xa9,0x95,0x93 -,0x9e,0x0f,0x1e,0x17,0x95,0x98,0x98,0xce,0x25,0x32,0x1d,0x27,0x23,0x8c,0x8f,0x8b,0x1b,0x0e,0x0e,0x2a,0x8d,0x9c,0x95,0x27,0x51,0x16,0x17,0x0d,0xb1,0x89,0x88,0x91 -,0x0c,0x0d,0x0b,0x9d,0x92,0x90,0xaf,0x36,0x27,0x10,0x0f,0x15,0x8d,0x8c,0x84,0x2d,0x0e,0x09,0x16,0x9b,0xad,0x97,0x23,0xd8,0x1d,0x1a,0x0e,0xbc,0x8f,0x8b,0x95,0x17 -,0x1e,0x0e,0xa2,0xc3,0x9c,0x54,0x3e,0x29,0x15,0x0d,0x1b,0x8d,0x8d,0x8a,0x0f,0x12,0x0a,0xa3,0x8d,0x98,0xaa,0x1c,0x43,0x16,0x1b,0x0e,0x96,0x90,0x87,0x3d,0x0f,0x11 -,0x26,0x88,0x92,0x90,0x1e,0x4a,0x1f,0x21,0x10,0xbb,0x8d,0x88,0x91,0x0d,0x0d,0x07,0xaa,0x9f,0x8a,0x9a,0xa7,0x2c,0x11,0x0c,0x1d,0x8c,0x8b,0x87,0x15,0x16,0x08,0xaa -,0x9b,0x9d,0xa3,0x52,0x9e,0x26,0x1c,0x0c,0x97,0x94,0x85,0x33,0x18,0x0d,0x1d,0x99,0xde,0xab,0x18,0xa6,0x2f,0x31,0x0d,0xc7,0x9a,0x89,0x9e,0x0d,0x0e,0x0c,0x94,0x99 -,0x8d,0x34,0x4b,0x1c,0x19,0x0f,0xbe,0x8a,0x8c,0x91,0x0d,0x14,0x0c,0x97,0x9c,0x9a,0x35,0x27,0x30,0x17,0x0d,0x0f,0x8e,0x8b,0x82,0x24,0x14,0x06,0x4c,0x96,0x94,0x98 -,0x44,0xc3,0x0f,0x0d,0x0a,0x96,0x8a,0x80,0xb8,0x18,0x09,0x15,0x9a,0x9e,0x96,0x28,0xae,0x1c,0x1b,0x0d,0xc3,0xa4,0x8e,0xb4,0x22,0x2c,0x47,0x93,0xd1,0xaa,0x22,0x9d -,0xcf,0x27,0x0c,0xc4,0x97,0x87,0x94,0x1d,0x19,0x0e,0x9d,0xb4,0x92,0x30,0xb4,0x1f,0x11,0x04,0x14,0x98,0x88,0x8e,0x17,0x25,0x0b,0x91,0x96,0x8b,0xbc,0xf7,0x25,0x18 -,0x0f,0x19,0x8d,0x8e,0x89,0x1c,0x2e,0x0a,0xdf,0xea,0xa1,0xb5,0x4e,0x53,0x0f,0x08,0x07,0xa9,0x92,0x80,0xb8,0x4a,0x08,0x24,0xcb,0x9c,0x97,0xb8,0x9a,0x7d,0x26,0x0f -,0x9b,0xa2,0x85,0xed,0x41,0x0e,0x28,0x96,0xaf,0xa0,0x16,0x2d,0x22,0x28,0x09,0x2f,0x4f,0x8a,0xa5,0x5a,0x27,0x23,0xa7,0x48,0xa4,0x29,0x9f,0xca,0xba,0x18,0x9c,0x99 -,0x87,0xa3,0x13,0x1c,0x15,0x9c,0xc3,0x96,0x5f,0xa6,0x30,0x21,0x02,0x0f,0x4a,0x92,0x91,0x0d,0x19,0x06,0x97,0x98,0x8b,0x9a,0x96,0xa7,0x20,0x0e,0x0e,0x9e,0x9d,0x8a -,0x2d,0xaf,0x14,0xaa,0xae,0xb3,0xb1,0x3c,0xb6,0x16,0x1b,0x0b,0xa2,0xa9,0x8e,0x1a,0x0c,0x0d,0x1f,0xa3,0xf4,0x98,0xa9,0x8e,0xa9,0x4f,0x17,0xaf,0xa7,0x8d,0xac,0x12 -,0x0d,0x15,0x8a,0x8e,0x88,0xca,0xa9,0x2b,0x1e,0x08,0x11,0xae,0xac,0xa1,0x0d,0x19,0x0e,0xa3,0xa4,0x9a,0xc4,0xbf,0xc2,0x28,0x21,0x21,0x8d,0x88,0x80,0xb9,0x2b,0x0a -,0x1e,0xbb,0xca,0xab,0xa0,0x93,0x1f,0x0d,0x05,0xc4,0xab,0x8d,0x1f,0x0f,0x0c,0x1c,0x90,0xa8,0x91,0xb0,0x91,0xc9,0x1e,0x09,0x26,0xa1,0x8b,0x90,0x41,0x3e,0x1f,0x97 -,0xaf,0xa1,0x2b,0x37,0x19,0x0d,0x0a,0x20,0x91,0x8f,0x8c,0x22,0x20,0x09,0x1d,0x2f,0xba,0xad,0x31,0xad,0x31,0x41,0x25,0x94,0x8e,0x85,0xa9,0x49,0x17,0x1d,0x9a,0xa0 -,0x8f,0xb8,0xac,0x12,0x0b,0x00,0x19,0xce,0x93,0x9d,0x1f,0x21,0x0f,0x96,0x98,0x8d,0xa9,0xb1,0x39,0x17,0x0e,0x27,0x91,0x8b,0x89,0x2c,0x33,0x0c,0x6c,0xd8,0xad,0xaf -,0x31,0x58,0x18,0x1c,0x16,0x96,0x9d,0x8f,0x1b,0x1d,0x0c,0x1d,0x9f,0xb3,0x8d,0xb9,0x95,0x25,0x17,0x0e,0x9c,0x86,0x81,0x99,0x28,0x0f,0x0a,0x59,0x28,0x9f,0x29,0xa1 -,0x36,0x1a,0x06,0x10,0xa6,0x94,0x8c,0x2d,0x26,0x08,0x4d,0xa6,0x8b,0x93,0x9d,0x9d,0x3e,0x1c,0x0c,0xa6,0x95,0x85,0xdc,0x1f,0x0a,0x19,0xd7,0x25,0x3e,0x1c,0xb3,0x47 -,0x1c,0x07,0xb8,0x96,0x86,0x98,0xc7,0x21,0x14,0x95,0xbc,0x92,0x38,0x9f,0xa6,0xc9,0x0f,0x1b,0x8e,0x88,0x8b,0x15,0x0f,0x02,0x27,0x34,0xa4,0xad,0xaa,0xae,0x12,0x07 -,0x03,0xf1,0x95,0x84,0xb0,0x4d,0x0f,0xaf,0x8a,0x8d,0x91,0xbb,0x91,0x41,0x0f,0x00,0x20,0x98,0x85,0x93,0x2e,0x13,0x09,0x1f,0x17,0xa9,0x3d,0xa6,0xb5,0x1a,0x0b,0x17 -,0x96,0x8b,0x8a,0x3e,0x1d,0x0f,0xab,0x9d,0x92,0x94,0x92,0x8d,0x4c,0x0c,0x02,0xc6,0xa4,0x93,0x20,0x0e,0x0e,0x1f,0x9a,0xd0,0xb3,0x2d,0xba,0x40,0x19,0x08,0x4b,0x8c -,0x82,0x90,0x2d,0x23,0x12,0x97,0xa8,0x9c,0xad,0xa1,0x9f,0x1b,0x0b,0x1a,0x96,0x8e,0x8e,0x10,0x0d,0x04,0x19,0xe9,0xa9,0x9c,0xb0,0x8f,0x37,0x13,0x0a,0xa3,0x8b,0x85 -,0xa3,0x1b,0x15,0x23,0x97,0xbf,0x97,0xcb,0x9e,0x2e,0x0d,0x03,0x29,0x8f,0x8c,0x91,0x17,0x17,0x08,0xb7,0x3a,0xad,0x4b,0x38,0xb2,0x19,0x18,0x19,0x8b,0x88,0x85,0xf2 -,0x1c,0x0e,0x67,0x96,0x9e,0x9a,0x76,0x9f,0x13,0x0b,0x01,0x3e,0x90,0x8b,0xb0,0x0b,0x0d,0x11,0x98,0x9f,0x9a,0xba,0x9b,0xba,0x13,0x06,0x29,0x88,0x83,0x85,0x1c,0x1a -,0x11,0xa6,0xa7,0xa6,0xc0,0x2d,0x52,0x0f,0x07,0x10,0x9a,0x95,0x8b,0x18,0x15,0x0c,0xd6,0x91,0x9f,0x93,0xb2,0x98,0x37,0x11,0x0a,0x9d,0x89,0x85,0xdd,0x0e,0x0f,0x1c -,0x91,0xa7,0x9b,0x37,0x50,0x1f,0x0b,0x05,0x27,0x91,0x88,0x93,0x0f,0x12,0x0e,0x9c,0x9a,0x95,0xa2,0xae,0xa2,0x1c,0x0f,0x23,0x8f,0x88,0x89,0x17,0x0c,0x0a,0x25,0xa5 -,0xde,0xb8,0x49,0x9e,0x2e,0x0b,0x08,0xac,0x8a,0x86,0xcf,0x0b,0x0f,0x2e,0x8f,0xa4,0x9f,0xab,0xa5,0xb2,0x17,0x0c,0x9f,0x8a,0x86,0x9d,0x0c,0x15,0x0f,0xdb,0x52,0x37 -,0xac,0xcc,0x1f,0x0c,0x03,0xb8,0x8c,0x85,0x8c,0x14,0x2a,0x1c,0xa5,0x98,0xbd,0x9b,0x9b,0xb3,0x24,0x02,0x22,0x90,0x8b,0x8a,0x0d,0x0c,0x0a,0x2f,0x9c,0x4a,0xc4,0xd0 -,0x4e,0x2e,0x08,0x0f,0x97,0x8f,0x84,0xae,0x22,0x28,0x3c,0x9c,0xaa,0xa2,0x9b,0xa9,0x2f,0x0a,0x0c,0x9f,0x94,0x8e,0x51,0x0d,0x18,0x24,0xb3,0xba,0x23,0x6a,0xae,0x51 -,0x15,0x0a,0xae,0x8a,0x87,0xa0,0x14,0x17,0xcf,0x9a,0x98,0xc2,0xa7,0x95,0xa7,0x1b,0x03,0x29,0x95,0x8f,0xba,0x0d,0x0b,0x29,0xe0,0x57,0x3c,0x76,0x96,0xb7,0x1c,0x06 -,0x35,0x89,0x88,0x90,0x29,0x1e,0xba,0xaa,0xbf,0xe5,0x3c,0x91,0xa4,0x25,0x07,0x12,0x98,0x92,0x9d,0x1b,0x0f,0x21,0x2e,0x2a,0x3b,0x2e,0x95,0x9d,0xd3,0x11,0x1c,0x8e -,0x8b,0x8f,0x3f,0x18,0x5e,0xa5,0xe8,0x4a,0x26,0x9e,0xad,0x26,0x08,0x0c,0x98,0x91,0x98,0x27,0x0e,0x28,0xae,0x58,0x37,0x1c,0xa0,0x95,0xa8,0x17,0x09,0xa1,0x8b,0x89 -,0x9f,0x1a,0x28,0xa6,0xac,0xaf,0x1f,0xc1,0x9c,0xc1,0x14,0x02,0x21,0x9c,0x8f,0xaa,0x13,0x18,0xb6,0xb6,0x79,0x1d,0xd6,0x8f,0x96,0x2a,0x06,0x43,0x8c,0x88,0x96,0x1a -,0x1c,0xaa,0xa4,0x32,0x16,0x1f,0x99,0x8f,0x39,0x02,0x0c,0xa9,0x90,0x99,0x17,0x0e,0x51,0x9b,0xac,0x38,0x50,0x9b,0x8d,0xa4,0x0a,0x0c,0x9e,0x8c,0x8e,0xda,0x19,0xcf -,0x95,0xbc,0x19,0x16,0x44,0x97,0xae,0x09,0x05,0x48,0x8e,0x92,0xc9,0x14,0x1b,0x9e,0xb7,0x2b,0x25,0xac,0x8a,0x8c,0x26,0x09,0x49,0x8a,0x8d,0xc8,0x14,0x0e,0xa3,0xa1 -,0x27,0x19,0x23,0x9d,0x94,0x2c,0x02,0x0c,0xa1,0x90,0x9e,0xd6,0x17,0x9e,0x8c,0xb8,0x1d,0x19,0xaa,0x91,0x9c,0x0e,0x0c,0x99,0x8a,0x93,0xa9,0x18,0x33,0x99,0x3e,0x0d -,0x0b,0x3b,0x96,0x99,0x10,0x01,0x62,0x8a,0x95,0xbd,0x13,0x1c,0x8e,0x8c,0x4e,0x17,0xba,0x91,0x89,0xbc,0x02,0x10,0x99,0x97,0xaf,0x32,0x1c,0xaf,0x93,0x23,0x07,0x1f -,0xa3,0x9a,0xda,0x04,0x09,0x97,0x85,0x93,0xaa,0xd9,0x4f,0x97,0xbb,0x0a,0x1c,0x92,0x8a,0x91,0x16,0x05,0x37,0x8a,0x9a,0x22,0x24,0x1a,0xbc,0xa7,0x11,0x0c,0xb7,0x8d -,0x95,0x2c,0x04,0x0b,0x9a,0x8c,0xaa,0xbf,0xc1,0xa0,0x8d,0xa9,0x1c,0x2f,0x92,0x99,0x2b,0x09,0x0b,0x9d,0x8a,0x9e,0x1d,0x16,0x2e,0xa0,0x3f,0x0d,0x0d,0xb2,0x8f,0xa6 -,0x14,0x0c,0x98,0x83,0x8d,0x32,0x12,0x2a,0x93,0x94,0x2a,0x0e,0xc8,0x8c,0x98,0x1e,0x03,0x14,0x99,0x8e,0xdf,0x18,0x1c,0xce,0xa0,0xd0,0x15,0x20,0x98,0x9e,0x36,0x0b -,0x19,0x97,0x88,0x8f,0xe7,0xc9,0xa7,0x9c,0xc5,0x0d,0x0b,0x65,0x92,0x9d,0x13,0x0b,0x2e,0x91,0x90,0x31,0x19,0x1e,0xb7,0xa4,0x28,0x0e,0x2e,0x8e,0x89,0xcc,0x0b,0x15 -,0xa1,0x89,0x9a,0x3e,0x27,0xad,0x92,0xa2,0x27,0x15,0xdb,0x9f,0x31,0x09,0x09,0x49,0x91,0x99,0x48,0x2b,0xfb,0xa7,0x3d,0x15,0x13,0xb3,0x8b,0x96,0x1d,0x0c,0xc6,0x86 -,0x85,0x9c,0x25,0x23,0x49,0x42,0x28,0x12,0x28,0x95,0x92,0x2a,0x05,0x07,0x41,0x8d,0x98,0x2f,0x1e,0x46,0xa9,0x9d,0xc5,0x2e,0xaa,0x97,0x9e,0x16,0x0b,0x2a,0x93,0x8a -,0x9b,0xd9,0x48,0x42,0x45,0x23,0x19,0x26,0xaa,0x9e,0x1a,0x07,0x14,0x96,0x87,0x9b,0x19,0x16,0x3b,0xa6,0xa8,0x2f,0x2c,0xa7,0x8c,0x9c,0x15,0x0b,0x3e,0x8b,0x8c,0xe8 -,0x16,0x1c,0xdf,0xa3,0xb5,0x2b,0x26,0xac,0xaf,0x15,0x06,0x11,0x9c,0x87,0x8f,0xb8,0x39,0x32,0x5d,0xc3,0xce,0x4f,0xa6,0xa9,0x23,0x0d,0x1b,0x96,0x87,0x96,0x2b,0x19 -,0x21,0x3d,0x3d,0x23,0x18,0x5b,0x98,0x9d,0x1a,0x0a,0x1f,0x94,0x89,0x9a,0x3b,0x26,0xc9,0x99,0x9c,0xc8,0xd1,0xa3,0xb6,0x17,0x06,0x0f,0xae,0x8d,0x90,0xba,0x1f,0x18 -,0x3f,0xbd,0x3a,0x21,0x48,0xd3,0x1d,0x0e,0x17,0x96,0x84,0x8a,0xb5,0x22,0x27,0xbf,0xaf,0x34,0x21,0xaf,0x8f,0x9d,0x17,0x07,0x1b,0x8f,0x85,0x9b,0x1c,0x0f,0x29,0xaf -,0xcd,0x20,0x2e,0xa4,0xb9,0x18,0x08,0x13,0xa6,0x8d,0x91,0xb3,0xd7,0xb3,0xab,0xbc,0x2a,0x26,0xa9,0xac,0x1a,0x0d,0x25,0x90,0x8a,0x96,0x4c,0x3c,0xb4,0xc6,0x1f,0x11 -,0x1e,0x9e,0x93,0x2e,0x07,0x0a,0xa6,0x87,0x8b,0x3d,0x12,0x19,0x3d,0xaf,0xbf,0xae,0x9b,0x9c,0x2e,0x0d,0x13,0xbe,0x93,0x98,0xd0,0x4b,0xbe,0xb3,0x36,0x1f,0x3f,0x9a -,0x99,0x20,0x08,0x0d,0xa9,0x8a,0x8f,0xbd,0x27,0x3c,0x3b,0x23,0x13,0x3a,0x8e,0x8c,0xaa,0x20,0x11,0xe6,0x91,0x9e,0x46,0x0f,0x1b,0x40,0xb2,0x18,0x03,0x1a,0x8c,0x8c -,0x5c,0x1f,0x29,0x92,0x85,0x92,0x9c,0x9c,0x9e,0x39,0x0e,0x1f,0xa1,0x85,0x2a,0x02,0x00,0x1e,0x81,0x89,0x94,0xbe,0xad,0x9f,0xd6,0x0c,0x0a,0x2a,0x96,0x9a,0x1b,0x0c -,0x13,0x9f,0x9c,0x1d,0x35,0x90,0x9a,0x48,0x35,0xcc,0x96,0x83,0x88,0xc4,0x11,0x0b,0x29,0x9f,0xad,0x1f,0x25,0xf0,0x1b,0x0c,0x0b,0x1d,0x9b,0x84,0xad,0x06,0x03,0x31 -,0x84,0x82,0x9e,0xbb,0x90,0x91,0xaf,0x0d,0x04,0x15,0x98,0x8c,0xaf,0x16,0x17,0xa2,0x8c,0x46,0x1a,0x47,0xb5,0x5d,0x18,0x0e,0x2a,0x8b,0x84,0x31,0x03,0x00,0x0b,0x86 -,0x81,0x95,0xa2,0x94,0x99,0xd4,0x0f,0x12,0x8e,0x81,0x9e,0x08,0x05,0x0a,0xae,0x90,0x1d,0x0b,0xa1,0x8f,0x9d,0x31,0x07,0x1b,0x8d,0x89,0xb0,0x28,0x0b,0x0a,0x98,0x86 -,0x8a,0x9f,0x13,0x05,0x0e,0xd0,0x9b,0x8c,0x87,0x8c,0xa5,0x19,0x07,0x0d,0x2b,0x9b,0x9a,0xba,0xaa,0xc9,0x18,0x06,0x02,0x0e,0xa9,0x94,0xd8,0x23,0xad,0x9a,0x8e,0x84 -,0x87,0x9f,0x29,0x18,0x25,0xb6,0xd6,0xae,0xa1,0x38,0x0d,0x06,0x12,0xf1,0x44,0xa4,0x8e,0xa0,0x2f,0x2a,0xbc,0x9e,0x47,0x17,0x2b,0x6c,0x37,0x64,0x44,0x20,0x13,0x25 -,0x8b,0x88,0x9f,0xfb,0xcd,0x9d,0x9c,0x1e,0x14,0x23,0xae,0x94,0x9e,0x28,0x12,0x08,0x0a,0xb9,0xa4,0x9d,0xa9,0x5e,0xb5,0xde,0x18,0x2c,0xa7,0x88,0x85,0xbe,0x0d,0x05 -,0x0c,0x9e,0x80,0x8c,0xbe,0x0b,0x1c,0xb2,0x1e,0x17,0xbd,0x95,0x8d,0xcc,0x19,0x19,0x0c,0x0d,0xc7,0x87,0x95,0x7c,0x08,0x05,0x0e,0xae,0x88,0x85,0x88,0x8f,0x2c,0x15 -,0x18,0x2e,0xbe,0x93,0x84,0x99,0xcf,0x07,0x10,0x18,0x14,0x0c,0x13,0xc4,0x8f,0x9f,0xaa,0x3f,0x29,0x19,0xb2,0x8b,0xaf,0xb8,0x24,0x95,0xa4,0x45,0x23,0x2a,0x39,0xb2 -,0xc4,0xa0,0x30,0x1f,0x0e,0xac,0x87,0x8d,0x96,0x0e,0x13,0x0c,0x15,0x21,0xc3,0x94,0x99,0x0d,0x0b,0x0a,0x25,0x2e,0x8b,0x80,0x83,0x9b,0x0b,0x19,0x1e,0xbe,0x93,0x89 -,0x8b,0x9c,0x10,0x0c,0x00,0x05,0x08,0x8c,0x82,0x8b,0x33,0x07,0x15,0x1b,0x4d,0xb4,0xa5,0xa6,0xac,0x1a,0xd3,0x3a,0x98,0x23,0x8f,0x8f,0xa2,0x2e,0x0f,0x9b,0x9f,0xaa -,0x63,0xbe,0x9f,0xef,0x09,0x15,0x0a,0x25,0x09,0x95,0x91,0xab,0x4b,0x11,0xaf,0x2e,0xce,0xab,0x9f,0x8f,0x8d,0xa7,0x9f,0x13,0x23,0x09,0x93,0x87,0x8d,0x4a,0x02,0x0a -,0x08,0x26,0xa1,0x8d,0x89,0x9e,0x16,0x1a,0x08,0x1c,0x0e,0x8a,0x88,0x90,0x3b,0x0a,0x2c,0x0e,0x19,0xc5,0x93,0x89,0x93,0x3b,0x37,0x13,0xae,0x22,0x89,0x89,0xa0,0x1e -,0x03,0x17,0x18,0x2e,0x52,0x27,0xbe,0xb0,0x21,0xbd,0x18,0x32,0x10,0x8e,0x89,0x90,0xa7,0x1f,0x9b,0x4a,0x5d,0xaf,0xc2,0xc5,0x3b,0x13,0x35,0x12,0x75,0x1f,0x8b,0x8b -,0xb1,0x20,0x07,0x2e,0x18,0x2c,0xb5,0x98,0x89,0x94,0x16,0x16,0x03,0x0f,0x09,0x93,0x81,0x85,0x93,0x0f,0x3e,0x16,0x23,0xad,0x9d,0x98,0xa2,0x17,0x3b,0x0c,0x1c,0x06 -,0xa9,0x87,0x9a,0x9f,0x0a,0x32,0x23,0xae,0x9f,0xb3,0x9e,0xa0,0x16,0x27,0x0e,0x54,0x1d,0x97,0x87,0xce,0xdd,0x07,0x9c,0x9b,0x98,0x9a,0x5a,0xa6,0xb5,0x1b,0x38,0x0a -,0x19,0x0b,0xaf,0x82,0xa7,0xad,0x02,0x14,0x11,0x27,0x97,0x96,0x88,0x89,0xb8,0xae,0x14,0x27,0x0b,0x22,0x83,0x94,0x8b,0x0d,0x19,0x0f,0x0a,0x29,0x3a,0x92,0x91,0x2f -,0x35,0x0e,0x24,0x1b,0xaf,0x80,0x92,0x99,0x05,0x0d,0x14,0x30,0x92,0xad,0x9d,0x9c,0x4c,0xac,0x13,0x23,0x18,0x3c,0x80,0x99,0x91,0x0a,0x1b,0xb4,0x2e,0xa1,0x25,0x4e -,0x66,0x0f,0x24,0x10,0x41,0x3a,0x25,0x80,0x9f,0x95,0x12,0x1d,0xb2,0x1d,0x97,0xaf,0x9b,0x93,0x26,0x33,0x16,0x1a,0x1b,0x0d,0x84,0x8f,0x89,0x1d,0x0b,0x3b,0x14,0xa3 -,0x2b,0xc0,0x9e,0x27,0x36,0x0e,0x0b,0x10,0x0a,0x83,0x87,0x82,0xd8,0x10,0xac,0x12,0x9c,0xab,0x9e,0x8e,0x4a,0x47,0x16,0x0b,0x29,0x04,0x90,0xb0,0xba,0xca,0x0e,0x8f -,0x2d,0x95,0xa0,0xbf,0x99,0x2d,0x1f,0x18,0x13,0xaa,0x11,0x8b,0x8a,0xa3,0x2e,0x00,0x4a,0x24,0x8f,0x96,0xa6,0x8f,0xa9,0xb9,0x2c,0x0a,0x22,0x06,0x9d,0x89,0xa7,0xad -,0x00,0x21,0x0d,0xb8,0x9a,0xaf,0x8e,0xa6,0xbe,0x46,0x19,0x9d,0x17,0xa3,0x85,0x98,0x8f,0x05,0x29,0x12,0x27,0xb3,0x2c,0x9a,0xaf,0x69,0xbe,0x15,0x37,0x0c,0x3a,0x83 -,0xb0,0xa2,0x02,0x2d,0x39,0xb1,0x96,0x74,0x97,0xab,0x45,0x2d,0x15,0xcf,0x4f,0xae,0x80,0x9d,0x95,0x06,0x12,0x15,0x1a,0x9f,0x37,0x9c,0x47,0x1b,0x19,0x16,0xde,0x2c -,0x1a,0x85,0x9f,0x8d,0x1b,0x25,0xa8,0x34,0x8f,0x4a,0x9d,0xa1,0x43,0x26,0x0c,0x14,0x1c,0x20,0x80,0x90,0x91,0x10,0x10,0xcc,0x1d,0xa2,0x29,0xb8,0x9c,0xe5,0x38,0x10 -,0x0d,0x17,0x07,0x86,0x93,0x8c,0x41,0x1a,0x94,0x2d,0x8b,0x9d,0x99,0x99,0x36,0x20,0x14,0x11,0x2f,0x08,0x90,0x98,0xb4,0x1f,0x03,0xbd,0x17,0x99,0xba,0xaf,0x94,0xa2 -,0xa7,0x2a,0x10,0x2f,0x19,0x8c,0x87,0x9e,0x2d,0x01,0x7b,0x25,0x8e,0x95,0xa8,0x95,0x6e,0x49,0x19,0x0a,0x23,0x0d,0x97,0x87,0xa0,0xab,0x02,0x29,0x09,0x3e,0x9e,0xaa -,0x8e,0xa3,0xa9,0xbd,0x28,0xaa,0x18,0xb6,0x85,0xac,0x9a,0x05,0x2f,0x22,0x43,0x9e,0x2c,0xa2,0x54,0x25,0x1c,0x0e,0x4e,0x2a,0xab,0x81,0xa5,0x9d,0x03,0x19,0x23,0x30 -,0x9c,0x3e,0x9d,0xa2,0xcf,0x3d,0x22,0xf5,0x3a,0x39,0x80,0x96,0x8b,0x0f,0x11,0x1e,0x1d,0x96,0xcc,0x9e,0x58,0x11,0x0c,0x08,0x16,0x2d,0x20,0x80,0x93,0x88,0x1c,0x17 -,0xb2,0x1f,0x90,0xae,0x90,0x94,0xe5,0x2a,0x0f,0x0d,0x18,0x0a,0x85,0x96,0x99,0x14,0x0a,0xad,0x2b,0x8d,0xa4,0x9d,0xa6,0x3b,0x15,0x0b,0x0b,0x27,0x0f,0x87,0x89,0x8d -,0x2b,0x05,0x55,0x16,0x8d,0x8f,0x8d,0x90,0xc0,0x1b,0x1b,0x19,0xcc,0x0b,0x95,0x90,0xde,0x2d,0x01,0x3c,0x13,0x98,0x97,0x95,0x94,0xed,0x2a,0x14,0x0d,0x34,0x19,0x8c -,0x83,0x90,0xb2,0x00,0x1e,0x0c,0xac,0x91,0x98,0x8c,0x9f,0x37,0x1d,0x0d,0x3c,0x0d,0xaa,0x83,0xc4,0x47,0x00,0x15,0x11,0xad,0x8c,0x97,0x8d,0xb6,0x19,0x17,0x1a,0x9a -,0xb5,0x96,0x80,0x9e,0x9f,0x03,0x19,0x11,0x1e,0xa0,0xf2,0x9b,0xc6,0x1f,0x14,0x0e,0x40,0x24,0xc6,0x80,0x9c,0x9b,0x03,0x1d,0xdb,0x4a,0x91,0xa6,0x8c,0xae,0x11,0x0c -,0x0a,0x2e,0x20,0xca,0x80,0x8d,0x8a,0x08,0x19,0x27,0x16,0x9b,0xaf,0x95,0xb3,0x0e,0x0f,0x0d,0x24,0x18,0x0f,0x82,0x9c,0x92,0x0a,0x18,0x9e,0xb2,0x8c,0x98,0x88,0x8d -,0x1c,0x0c,0x0d,0x1a,0x2d,0x19,0x80,0x92,0x95,0x0b,0x0a,0x29,0x16,0xa5,0x9f,0x90,0xa0,0x1b,0x14,0x22,0x22,0x49,0x0f,0x84,0x95,0xa0,0x0e,0x0b,0xb0,0x30,0x8e,0x8c -,0x83,0x8c,0x23,0x0a,0x15,0x1c,0x29,0x07,0x8a,0x8e,0xa1,0x16,0x04,0x2b,0x09,0x31,0xa4,0x89,0x88,0xb5,0x1c,0x28,0x29,0xb9,0x14,0x88,0x8a,0xa6,0x18,0x02,0x35,0x12 -,0xc4,0x92,0x89,0x89,0x4a,0x0e,0x19,0x15,0x3d,0x13,0x8b,0x87,0x9b,0x27,0x04,0x50,0x0e,0x11,0x2f,0xa8,0x94,0x58,0x18,0x3c,0x26,0x9f,0x21,0x8b,0x87,0xa1,0x38,0x0b -,0x9e,0x1e,0x24,0xa0,0x8e,0x8a,0x62,0x08,0x13,0x0b,0x1b,0x06,0x99,0x84,0xa8,0xd6,0x07,0xb8,0x18,0x0f,0xd7,0x93,0x8a,0xa9,0x12,0xcc,0x1f,0xb1,0x1b,0x96,0x81,0xa5 -,0xaf,0x07,0x3d,0x19,0x11,0xa4,0x8b,0x8c,0xa2,0x09,0x17,0x08,0x0e,0x08,0xcb,0x80,0xd4,0xc7,0x0e,0x97,0xbd,0x13,0xc6,0x8c,0x88,0x94,0x19,0xdd,0x1d,0x19,0x10,0x6d -,0x80,0xb4,0xbd,0x08,0x22,0x12,0x0b,0x9b,0x87,0x8e,0xad,0x0f,0x2c,0x0e,0x0b,0x17,0xa2,0x80,0x26,0x0e,0x06,0xa3,0x94,0x2b,0xa7,0x8d,0x96,0x9f,0x1b,0x9a,0xb0,0x1c -,0x0f,0x12,0x85,0xc9,0xa2,0x2d,0x41,0x18,0x00,0x15,0x9e,0x94,0x8e,0x9c,0x97,0x19,0x00,0x07,0xcf,0x80,0x8e,0x9c,0x15,0x11,0x0c,0x05,0xac,0x81,0x90,0xab,0x10,0x19 -,0x4c,0x1e,0x70,0xa2,0x80,0x2c,0x08,0x0a,0xce,0x9e,0x19,0x1d,0x34,0x0c,0x1f,0x96,0x85,0x8c,0x1a,0x0f,0x0e,0x84,0x9f,0x9f,0x8e,0x96,0x28,0x00,0x0b,0x90,0x88,0x8d -,0x95,0xb5,0x18,0x00,0x05,0x1d,0x80,0x8e,0x5d,0x0c,0x02,0x09,0x10,0x8f,0x81,0x8f,0xb4,0x22,0x1f,0x32,0x10,0x97,0x92,0x80,0x55,0x0b,0xab,0x99,0x9a,0x22,0xe2,0x98 -,0x17,0x0e,0xb1,0x8c,0x92,0x04,0x04,0x00,0x9e,0x8e,0x9e,0x8c,0xbb,0x25,0x01,0x0f,0x93,0x8a,0x86,0x83,0x9e,0x1d,0x00,0x17,0xb1,0x83,0x89,0xeb,0x3e,0x06,0x06,0x0a -,0xa0,0x80,0xa9,0x0b,0x1e,0x27,0xa6,0x16,0x2b,0x3b,0x98,0xa7,0x07,0xcd,0xab,0x8e,0xc2,0x1d,0x69,0x2d,0xa4,0x80,0x86,0x8d,0x16,0x0a,0x05,0x28,0x8d,0xa7,0x84,0x21 -,0x02,0x00,0x0a,0x8e,0x8f,0xa5,0x8d,0x5e,0x16,0x03,0x0a,0xa9,0x86,0x82,0x2a,0x28,0x1f,0xce,0xa0,0x9f,0x8b,0x9e,0x0f,0x31,0x36,0xa6,0x99,0x51,0x0c,0x06,0x4c,0x23 -,0x92,0x9f,0x41,0x1f,0x09,0x0e,0x0f,0x28,0x84,0x80,0x9e,0x0a,0x05,0x2d,0x95,0x80,0x91,0x86,0x99,0x0c,0x04,0x0f,0x94,0x85,0x44,0x1f,0x13,0x0d,0x2a,0x1c,0x2c,0x5a -,0x8a,0x17,0x0d,0x2a,0x61,0x92,0x99,0xc3,0x1e,0x13,0x91,0x84,0x9c,0xa0,0x3e,0x1e,0x0c,0xad,0x55,0x95,0x80,0xe1,0x06,0x02,0x1d,0x94,0xd2,0x97,0x94,0x1b,0x10,0x04 -,0x0b,0x1e,0x82,0x98,0x4b,0x46,0x18,0x57,0x97,0x8c,0x8d,0xc3,0xa3,0x9c,0x0f,0x43,0xad,0xaa,0x10,0x5d,0x0f,0x19,0x8b,0xc4,0x24,0x1c,0x1c,0x17,0x0b,0x2d,0x88,0x91 -,0x95,0x27,0x0b,0x10,0x88,0x8d,0xa0,0x88,0xab,0x16,0x0e,0x1c,0xbe,0x99,0x8e,0x94,0x0d,0x0b,0x17,0x39,0x1b,0x8d,0xa6,0x16,0xae,0x0d,0x09,0x49,0x96,0x9c,0x27,0x22 -,0x8d,0xab,0x92,0xa0,0x6b,0x2d,0x94,0xb1,0x0f,0x8e,0x8e,0x36,0x13,0x0f,0x0d,0x3e,0xa2,0x8a,0x31,0x2e,0x29,0x0c,0x04,0xae,0x8c,0xbf,0x87,0xcf,0x07,0x1b,0x9d,0x9d -,0xb0,0xc8,0x8b,0x5b,0x2d,0x20,0x1d,0xbb,0x89,0x98,0x09,0x9e,0xa1,0x13,0x2c,0xb6,0x21,0x25,0x1b,0x46,0x15,0xad,0x9f,0x1d,0x0f,0xa0,0x8a,0x20,0x88,0x92,0x18,0xb0 -,0x97,0x18,0x23,0xa2,0x8a,0xc6,0x2f,0x24,0x0c,0x13,0xa0,0x95,0x0b,0x99,0xa9,0x09,0x10,0x4c,0x2e,0xb8,0x9e,0x9b,0xab,0x9c,0xa6,0x1e,0x1a,0xa9,0x8b,0x1b,0x95,0x9e -,0x0d,0xb3,0x9b,0x12,0x35,0xa7,0xaa,0xaa,0x41,0x1f,0x0d,0x17,0x38,0xbc,0x13,0x96,0x95,0x0e,0x3a,0x98,0x37,0x9b,0x98,0xde,0xa3,0x9c,0xb5,0x15,0x1e,0xab,0x95,0x27 -,0xa9,0x9b,0x0f,0x2a,0xa8,0x0e,0x26,0xaf,0x28,0xac,0xcf,0x24,0x18,0x27,0xc6,0x8f,0xab,0x9a,0x8e,0x12,0x17,0xa3,0x25,0xc1,0x9a,0x42,0x96,0xa8,0x34,0x36,0x48,0x48 -,0xa4,0x2e,0x17,0xa9,0x1e,0x14,0x58,0x19,0x19,0xb2,0x28,0x9b,0x8c,0xa2,0xa1,0x53,0x20,0xd0,0x9e,0xad,0x99,0xa8,0x15,0x2e,0x28,0x12,0x99,0x97,0x9f,0xa1,0x0d,0x11 -,0x24,0x27,0xbd,0xa9,0x58,0x2a,0x3e,0x10,0x2f,0x8d,0xad,0x9f,0x9c,0x25,0xb0,0xb0,0xa7,0x9f,0x45,0xbf,0x59,0x3e,0x29,0xb6,0xa7,0x21,0x23,0x13,0x10,0xae,0x9d,0xbd -,0x5e,0x60,0x25,0x18,0x3d,0x9c,0x8c,0x8e,0xa4,0x19,0x14,0x29,0x24,0xad,0x99,0x91,0x9b,0x13,0x12,0x6b,0xa9,0x96,0xa6,0x2c,0x1d,0x1b,0x1c,0x25,0x37,0x42,0xc5,0x49 -,0x2c,0x4a,0xae,0x9a,0x94,0xb9,0x2f,0x2e,0xaa,0x98,0xb7,0xb1,0xb5,0x26,0x19,0x23,0xae,0x95,0x9a,0x3e,0x0f,0x0f,0x1a,0x4d,0xbe,0xa9,0x9b,0x31,0x19,0x17,0x2e,0xa0 -,0x9a,0x9c,0x9f,0xbb,0x36,0x23,0xcb,0x9f,0x93,0x9b,0x2f,0x2a,0x1f,0xc6,0xc5,0x2c,0x1c,0x16,0x25,0x5f,0xc5,0x4d,0xfb,0xaa,0x6d,0x28,0x38,0xa8,0x8e,0x98,0xbb,0x16 -,0x19,0x29,0x3c,0x9e,0x99,0x90,0xa3,0x29,0x1d,0x30,0x9b,0x94,0xb2,0x25,0x14,0x15,0x14,0x1b,0x28,0x42,0xb0,0x3b,0x30,0xf6,0xa2,0x9a,0x9d,0xa1,0xb5,0x4c,0xcd,0xae -,0xac,0xa2,0xba,0x23,0x1a,0x33,0xa6,0x9e,0xa8,0x3a,0x18,0x16,0x1d,0x41,0xce,0xb5,0xab,0x32,0x15,0x13,0x39,0x9e,0x94,0x9b,0xdc,0xd7,0x59,0x2e,0xb9,0x9a,0x8d,0x99 -,0x2f,0x1b,0x36,0x9e,0xac,0x42,0x1c,0x17,0x21,0x1f,0x36,0xbc,0xb6,0xd5,0x1c,0x1a,0x21,0xac,0x93,0x94,0x9f,0x20,0x19,0x1f,0xbe,0x97,0x91,0x90,0xac,0x27,0x1d,0x34 -,0x99,0x98,0xb6,0x1f,0x15,0x18,0x12,0x1c,0xdd,0xab,0x63,0x25,0x1f,0xe8,0x9b,0x9b,0xa0,0xa7,0xb8,0x39,0x20,0x41,0x98,0x93,0xbb,0x1b,0x16,0x32,0x9e,0x9a,0xa5,0x6e -,0x30,0x20,0x1b,0x25,0x4a,0xa9,0xb4,0x2a,0x16,0x0f,0x2c,0xa1,0x97,0x9f,0xbe,0xbc,0x56,0x58,0xae,0x98,0x8f,0xa6,0x2a,0x1d,0x79,0x9d,0xdf,0x1e,0x1a,0x25,0x1d,0x21 -,0xd2,0xa4,0x9d,0xed,0x22,0x24,0x36,0xac,0xa7,0xac,0xbb,0x1e,0x19,0x19,0x55,0x9a,0x92,0x95,0xb5,0xcf,0xdc,0xad,0x9a,0x9e,0xc8,0x1f,0x19,0x1a,0x18,0x20,0x3c,0xbf -,0x32,0x1b,0x2a,0xb1,0x9b,0xa5,0xb6,0xac,0x3f,0x1a,0x24,0xb2,0x90,0x94,0xe5,0x1f,0x2d,0x9f,0x96,0x9a,0xa1,0xdb,0x1c,0x11,0x18,0x2a,0xda,0xab,0x63,0x1f,0x13,0x1d -,0x57,0xa3,0x9b,0xc0,0x55,0x3a,0x3f,0xe7,0xaa,0x97,0x9b,0xfc,0x2b,0xf5,0x9a,0x9e,0xce,0x33,0x23,0x21,0x1c,0x2b,0xd1,0x9e,0xb5,0x21,0x22,0x2b,0x3f,0xba,0xae,0xae -,0x31,0x1e,0x23,0x32,0xa6,0x9d,0x9a,0x9e,0xd2,0x36,0xb5,0x95,0x9c,0xdd,0x2b,0x1c,0x1b,0x18,0x23,0xce,0xc9,0x66,0x25,0x22,0xdd,0xa7,0xa2,0xac,0xba,0x73,0x2a,0x27 -,0x38,0x9e,0x9e,0x66,0x3a,0x32,0xab,0x9f,0x9d,0xa1,0xda,0x46,0x24,0x1e,0x3f,0xcd,0xba,0x2d,0x1e,0x1c,0x17,0x4f,0xab,0xa8,0xe3,0x32,0x41,0x49,0xe7,0xa8,0x94,0x9a -,0xd8,0xd0,0xc3,0xcf,0xad,0xad,0xbe,0x29,0x24,0x24,0x1f,0x46,0xae,0xc3,0x3f,0x34,0x53,0x4e,0xcb,0xb8,0x2a,0x1e,0x20,0x2b,0x3f,0xa8,0x9e,0xa5,0xa9,0xbb,0xbc,0xa8 -,0x97,0x95,0xc3,0x32,0x34,0x1c,0x1e,0x29,0x2a,0x56,0xad,0xcf,0x2f,0x3e,0xe8,0xeb,0x3f,0x3e,0x35,0x1d,0x2e,0xaa,0xd3,0x3a,0xcd,0xa9,0xaa,0xa6,0xa2,0xa6,0x9f,0xaf -,0x4a,0x21,0x2b,0xda,0xca,0xb3,0xa9,0x45,0x18,0x12,0x1f,0x77,0x9d,0x9e,0x2f,0x1d,0x17,0x29,0xa6,0x8f,0x8d,0xad,0x21,0x2f,0xbe,0xaa,0xa7,0xc0,0x3b,0x20,0x1d,0x2a -,0x9e,0x95,0xa5,0x26,0x17,0x29,0xbf,0x9f,0x9e,0xdb,0x16,0x0b,0x11,0xdc,0x9c,0x92,0x9c,0x3f,0x17,0x1d,0x9e,0x8e,0x93,0xb7,0x25,0x26,0x35,0xce,0xaf,0xab,0xb0,0x1a -,0x13,0x21,0xa6,0x9a,0xeb,0x34,0x20,0x2b,0x4a,0xae,0x9a,0x98,0xbf,0x13,0x0d,0x3c,0xa0,0x9d,0xb7,0xed,0xd3,0x35,0xed,0xb0,0x98,0xa4,0x2e,0x24,0x30,0x45,0x26,0x1d -,0x3a,0xe9,0x51,0xbd,0xbf,0xca,0x3e,0x3e,0xcc,0xa6,0x9d,0xd4,0x25,0x1e,0x41,0xaf,0x9e,0xae,0xbd,0x1e,0x29,0x2f,0xa5,0x8b,0x31,0x9b,0x0d,0x1c,0xaa,0xdd,0x86,0xb0 -,0x46,0x03,0x0b,0x1e,0x9e,0x8c,0xa1,0xc2,0x0a,0x19,0x4f,0x8c,0x89,0x95,0x19,0x06,0x13,0x25,0x91,0x9d,0xa8,0x18,0x0f,0x4b,0xa5,0x89,0x8f,0x99,0x17,0x0c,0x15,0xc8 -,0x91,0x9e,0x43,0x1c,0x12,0x17,0xaa,0x8f,0x8d,0x3f,0x11,0x0d,0x45,0x97,0x96,0xbe,0x20,0x1e,0x26,0xa5,0x9c,0xb3,0x2c,0x19,0x26,0xda,0xb8,0xa8,0x2d,0xc0,0xbb,0xb8 -,0x95,0x9b,0xa6,0x24,0x18,0x29,0x29,0x2f,0x1b,0x34,0x36,0xad,0xbf,0xaa,0x9e,0x99,0xa1,0x19,0x26,0x29,0x97,0xad,0x2f,0x13,0x1b,0x1b,0xb2,0x8d,0x95,0x9e,0x18,0x10 -,0x23,0x99,0x90,0x9a,0x2d,0x0f,0x1f,0xc2,0x99,0x8a,0xc3,0x24,0x0e,0x2d,0x9c,0x9c,0xc0,0xc8,0x1a,0x00,0x0e,0x13,0x8e,0xbf,0xbe,0x1c,0x03,0x9e,0xac,0x93,0x8b,0x8c -,0xa4,0x97,0x8e,0x98,0x8a,0x83,0x1c,0x0f,0x18,0x0d,0x88,0x8b,0xad,0x50,0xa4,0xe2,0x5c,0x3d,0x1c,0x06,0x01,0x06,0x0a,0x0a,0x06,0x07,0x02,0x16,0x12,0x3b,0xb5,0xbc -,0x1c,0xba,0xae,0x23,0x95,0xfb,0x92,0x93,0xa0,0x99,0x9f,0x85,0x88,0x8d,0xa8,0xad,0x87,0x84,0x88,0x8b,0x8c,0x9d,0x90,0x90,0x9c,0x89,0x8c,0x1f,0x02,0x3c,0xaa,0x25 -,0x22,0x08,0x07,0x0e,0x07,0x1c,0xae,0x26,0x16,0x00,0x09,0x12,0x07,0x0d,0x0e,0x0a,0x08,0x0f,0x12,0xfd,0x46,0xa3,0xb8,0x1c,0xad,0x90,0x86,0x87,0x84,0x92,0x8d,0x85 -,0x83,0x83,0x84,0x8a,0x8e,0x8f,0x8c,0x92,0x9d,0xa3,0xbe,0x90,0xa0,0x37,0x1d,0x10,0x10,0x0e,0x09,0x06,0x03,0x03,0x05,0x0f,0x20,0x07,0x05,0x0f,0x2b,0x20,0x17,0x22 -,0x1c,0xd7,0x2a,0xb1,0xa6,0x9d,0x8f,0x9e,0x97,0x8c,0x93,0x35,0x20,0x4e,0x94,0x9c,0xa4,0x9f,0x54,0x9c,0x8a,0x8f,0x89,0x8d,0x8e,0x92,0x86,0x8a,0x9c,0x87,0xaa,0x1a -,0x47,0xcb,0x25,0x1b,0x29,0x10,0x07,0x05,0x06,0x02,0x0c,0x2f,0x0f,0x09,0x03,0x08,0x0b,0x41,0x26,0x21,0x0f,0x10,0x4f,0xc2,0x8d,0x97,0x9a,0x9d,0x94,0x8b,0x87,0x86 -,0x87,0x84,0x9b,0x9f,0x93,0x9e,0x8a,0x91,0x9f,0xa5,0x20,0x0f,0x9b,0x95,0x91,0xb4,0x0e,0x0a,0x18,0x9e,0xae,0xbc,0x2a,0x14,0x0b,0x09,0x0b,0xb3,0xb2,0x1c,0x04,0x00 -,0x02,0x3b,0x9f,0x9f,0x30,0x02,0x09,0x07,0x9d,0x8b,0x87,0x96,0x10,0x0f,0x3f,0x8e,0x86,0x80,0x91,0xaf,0x0f,0x47,0x80,0x82,0x85,0x9e,0x1e,0x2f,0x92,0x85,0x83,0x83 -,0x8e,0x2e,0x05,0x1d,0x8d,0x91,0xba,0x13,0x00,0x03,0x04,0x17,0x36,0x46,0x1b,0x01,0x05,0x08,0xac,0x8e,0x18,0x0a,0x13,0x0f,0x2f,0x2e,0xfa,0xa5,0xd5,0x26,0x38,0x50 -,0x34,0x9e,0x87,0x8c,0x4e,0x5a,0x9b,0x88,0x95,0x8d,0x8d,0x85,0x8f,0xb2,0x34,0x9d,0xb9,0xb4,0x95,0xa0,0x87,0x3b,0x0e,0xa6,0x89,0x9b,0x93,0x22,0x03,0x05,0xc8,0x8e -,0x1e,0x15,0x0a,0x00,0x05,0x07,0xc7,0x9c,0x2e,0x0e,0x00,0x08,0x18,0x94,0x88,0x98,0x13,0x0d,0x1d,0x23,0x81,0x83,0x8d,0xa8,0x13,0x0e,0x9e,0x80,0x84,0x81,0x45,0x04 -,0x17,0x8e,0x85,0x86,0xc5,0x3c,0xa7,0x2b,0xa0,0x90,0x8f,0x91,0x9d,0x0e,0x26,0xc9,0x98,0x9f,0x25,0x1c,0x05,0x0b,0x03,0x17,0x41,0x2f,0x0c,0x04,0x0b,0x06,0x0d,0xcc -,0xb2,0x23,0x28,0x29,0x1c,0x1f,0xa7,0xa4,0x9c,0x9c,0x9c,0x9b,0x8d,0x84,0x93,0x8c,0xa3,0xbf,0xa5,0x0f,0xa3,0x9d,0x8b,0x8c,0x22,0x12,0x1b,0x8c,0x90,0x80,0x8f,0x27 -,0x28,0x0b,0x96,0x85,0x80,0x92,0x08,0x0a,0x04,0x31,0xaa,0x96,0x1f,0x02,0x04,0x02,0x04,0x26,0x9c,0x0a,0x0a,0x01,0x03,0x0f,0xae,0x99,0x9a,0x2a,0x19,0x1f,0x98,0x82 -,0x8a,0x81,0xa0,0x1c,0x48,0x96,0x86,0x83,0x8f,0xab,0xaa,0xaa,0x0f,0x96,0x8d,0x99,0xbd,0x1d,0x22,0x1e,0x5d,0x9f,0x8e,0x9c,0x30,0x12,0x2f,0x12,0xa2,0xb2,0x40,0x0d -,0x12,0x17,0x0d,0x8c,0x56,0xa9,0x1c,0x0b,0x16,0x02,0x0f,0xe4,0xea,0x1d,0x08,0x0a,0x0d,0xbb,0x8d,0xad,0xc6,0x3b,0x39,0x1b,0xed,0x8c,0x8d,0x8d,0x94,0xcb,0xa6,0x94 -,0x8e,0x84,0x89,0x91,0xcf,0xe0,0xc1,0x85,0x83,0x97,0xb3,0x11,0x0d,0x27,0x95,0x97,0xa2,0x0c,0x04,0x09,0x1d,0xa1,0x98,0x27,0x0b,0x06,0x04,0x12,0xa7,0x9a,0xb3,0x27 -,0x08,0x08,0x0d,0x20,0x35,0x99,0x1f,0x07,0x1a,0x0e,0x28,0x92,0x87,0x8c,0xb6,0xc8,0xaf,0xa4,0x8d,0x8b,0x80,0x8e,0x38,0x9b,0x8e,0x83,0x88,0x8c,0x24,0x0f,0x2d,0x1b -,0x36,0x43,0x1c,0x14,0x18,0x13,0x24,0xe1,0xc7,0xbc,0x28,0xc9,0xb6,0x11,0x36,0x93,0x9b,0xc3,0x2d,0x17,0x2c,0x0f,0x3f,0x5c,0x2c,0x1b,0x01,0x3b,0xa3,0x15,0x78,0xad -,0x0d,0x07,0x02,0x9c,0x8b,0x98,0x9f,0x99,0x3d,0xac,0x9d,0xae,0x84,0x87,0x91,0x1c,0x1f,0xdc,0x95,0x80,0x93,0x9b,0x9b,0x26,0x1b,0x3b,0x9c,0x93,0x3a,0x14,0x19,0x3c -,0x15,0x17,0x8d,0x2f,0x06,0x02,0x3d,0x17,0x19,0x13,0xa1,0xaf,0x0c,0x12,0x0f,0x89,0xa3,0x2f,0x2c,0x27,0xcb,0x9c,0x1f,0xb9,0xc9,0x31,0x27,0x0a,0x33,0xe7,0x8f,0xa4 -,0x2b,0x88,0x8c,0x9e,0x8d,0x9a,0x95,0xb9,0x77,0x8c,0x90,0x9d,0x8e,0x93,0xdd,0x9e,0xcb,0xba,0x0d,0x0f,0x1d,0x12,0x1a,0x00,0xae,0xac,0x7d,0xae,0x12,0x0f,0x0c,0x2a -,0xdc,0xa9,0x29,0x9b,0x94,0x0d,0x0e,0xb8,0x96,0x9e,0x40,0x1b,0x1b,0x19,0x10,0xad,0x8e,0x95,0x9b,0x2a,0x1c,0x10,0xaf,0x8a,0x86,0x9a,0x28,0xb8,0x37,0x91,0x8a,0x85 -,0x9a,0x19,0x0d,0x18,0x95,0xf3,0x87,0x8d,0x23,0x24,0x17,0x2e,0x20,0x19,0x94,0x92,0x04,0x05,0x0e,0xad,0x8c,0x99,0x1d,0x0f,0x14,0x15,0x16,0xcd,0x2d,0xa1,0x8f,0x0e -,0x0d,0x3b,0x88,0x5a,0x1b,0xb7,0xe2,0xdf,0xb8,0x1c,0xad,0x97,0xad,0x2c,0x0c,0x38,0x9d,0x9b,0x93,0x0a,0xa3,0x84,0x90,0x8c,0xa2,0x8e,0xa4,0x5e,0xeb,0x8d,0x9d,0x8d -,0xa6,0x32,0xa6,0x5d,0x23,0x2b,0x0b,0x08,0x1e,0x0e,0x01,0x1e,0xb2,0x3b,0x22,0x0e,0x0c,0x0d,0x48,0xdc,0x95,0xb1,0xba,0x9f,0xc4,0x3f,0x9b,0x81,0x8d,0x5e,0x19,0x4c -,0x9f,0x0f,0x8c,0x8e,0xaa,0x9b,0x15,0x0e,0x0c,0x9e,0x89,0x89,0x34,0x0e,0x2b,0xa8,0xac,0x37,0xa5,0xa2,0x19,0x05,0x10,0x48,0xa3,0x8a,0x9c,0xae,0x2e,0xc9,0xc0,0x0e -,0x5c,0x8f,0xb2,0x1a,0x06,0x27,0x96,0xae,0x9d,0x37,0x16,0x1a,0x0e,0x27,0x28,0x56,0x89,0xbd,0x24,0x0a,0x3d,0x9c,0x3d,0xaf,0xb1,0x97,0xbf,0x1c,0x21,0x5b,0x94,0x93 -,0x34,0x13,0x1a,0xbf,0x8d,0x41,0xbd,0x95,0x9e,0x8e,0x1f,0xa6,0x8d,0x4d,0x9f,0xaa,0xc6,0x9d,0x9e,0xaa,0x1f,0x18,0x45,0x20,0x17,0x09,0x19,0xae,0x0e,0x1f,0x0d,0x26 -,0xbe,0xc6,0xb5,0x10,0x1b,0x9c,0xa2,0xce,0x2c,0xac,0x91,0x35,0x1e,0xb3,0x8f,0xb1,0x0d,0x16,0x96,0xa3,0x87,0x2c,0x3d,0x90,0x98,0xa1,0x12,0x2e,0x90,0x83,0x96,0x1a -,0x1f,0xaa,0xae,0x22,0x1b,0x65,0x4a,0x11,0x0c,0x0a,0x19,0x91,0xb8,0xa9,0x1a,0x61,0xa6,0x1f,0x20,0xae,0x84,0x88,0x28,0x09,0x1a,0xb9,0x8a,0x9e,0x2e,0x14,0x15,0xae -,0x2f,0xaa,0x98,0x6e,0xc7,0x0a,0x14,0x25,0x1e,0x96,0x54,0x3f,0x3a,0xd6,0xdf,0x48,0x95,0x89,0x8e,0x32,0x09,0x11,0x8e,0x8f,0x8b,0x3b,0xdf,0x94,0xce,0x1e,0x0c,0x3a -,0x8d,0x9e,0x21,0x12,0x1b,0xc0,0x21,0x2a,0xad,0x8e,0x39,0x02,0x05,0xc2,0x8f,0x87,0x33,0x12,0xe4,0x9f,0x9a,0x6e,0xaa,0x95,0x95,0x25,0x0d,0x2a,0xa3,0xbd,0x31,0x11 -,0x1f,0x2d,0x13,0x1b,0x1e,0xb3,0x8f,0x4b,0x26,0xa9,0x8b,0x86,0xa7,0x18,0x26,0x95,0x86,0x94,0xac,0x57,0xaa,0xa2,0x4e,0x6f,0x46,0x1e,0x0f,0x0c,0x17,0x98,0x9d,0x2c -,0x0a,0x18,0x5a,0x2e,0xf7,0xb0,0xa6,0x8f,0xa9,0x3c,0x2b,0x55,0x90,0x8e,0xac,0x17,0x11,0x2a,0x25,0x3f,0x98,0xe7,0x9e,0x20,0x0f,0x14,0x2a,0xad,0xb8,0x36,0x27,0x5c -,0x2d,0x20,0x23,0x9e,0x8c,0x9e,0x28,0x11,0x49,0xab,0xab,0x90,0xb0,0x96,0xa8,0x27,0x1d,0x4b,0x8e,0x9c,0x2c,0x13,0x19,0x9e,0xa1,0x1e,0x20,0xcd,0xd8,0x1b,0x0d,0x27 -,0xce,0xa3,0xa9,0x1d,0xb3,0xa1,0x98,0x36,0x1e,0xa6,0x98,0x9d,0x42,0x2c,0x9f,0x9c,0x2d,0x15,0x1a,0xac,0xa0,0x15,0x0b,0x05,0x32,0x97,0x57,0xb0,0xb8,0xa8,0x3c,0x2f -,0xa3,0x85,0x8e,0xa6,0x38,0xe1,0x9c,0xa1,0x3a,0x22,0xbf,0xb9,0x27,0x0a,0x08,0xf9,0x8d,0xab,0xc4,0x21,0x2d,0x24,0x15,0x18,0xa9,0x96,0x9d,0x7a,0x30,0xd4,0xad,0xa3 -,0xa4,0x92,0x9d,0xb3,0x1d,0x10,0x26,0x96,0xa3,0x49,0x22,0x1a,0x1f,0x25,0x55,0xa8,0x9b,0xb2,0x27,0x14,0x27,0xba,0x95,0x99,0xd0,0x26,0x13,0x40,0x37,0x99,0x97,0xbb -,0xba,0xcc,0x6e,0x1f,0xbb,0x90,0x94,0x5e,0xe9,0x2b,0x21,0x20,0x28,0x1d,0x4f,0x97,0xab,0x19,0x1f,0x2a,0xb7,0xcb,0x25,0xb5,0x6e,0xc7,0x15,0x18,0x27,0xae,0x9c,0xa3 -,0x9f,0xb2,0x52,0xbf,0xb1,0x9b,0x96,0x3c,0x1f,0x2c,0x4a,0x54,0x27,0x54,0x99,0xcd,0x24,0x1b,0x2a,0xbc,0xa4,0x97,0xc5,0x41,0x26,0x22,0xc2,0xb7,0xc0,0xb7,0xa7,0x2a -,0xcf,0x20,0x39,0xaf,0x2f,0xa2,0xb6,0x9e,0x46,0x24,0x35,0xbb,0x94,0x9b,0xd9,0x1a,0x24,0x20,0x2e,0xb9,0xb8,0xd7,0x19,0x17,0x21,0x2e,0x2f,0xbb,0xa1,0x3b,0x23,0xd9 -,0xce,0xc1,0xa0,0x99,0x99,0xa5,0x2b,0x27,0x9d,0x9d,0x96,0x98,0xad,0xc7,0x28,0x19,0x19,0x1e,0x28,0x2d,0x2f,0x2b,0x23,0x2e,0x2a,0x47,0xa2,0x99,0x45,0x1f,0x2b,0xe1 -,0x98,0xa2,0xa1,0xad,0x32,0xec,0xca,0xba,0x48,0xbf,0xa5,0x2d,0x1e,0x26,0x2f,0xbf,0xbb,0x37,0x2a,0x18,0x1e,0xf0,0xfd,0x2c,0xc4,0x9a,0x9c,0xa3,0xad,0xa9,0xbe,0x7d -,0xc7,0xa4,0xb4,0x3f,0x4d,0xa5,0xbd,0xe3,0x9e,0xb1,0x2e,0x11,0x17,0x34,0xc9,0x3d,0x53,0xb0,0xc8,0x34,0x1f,0x1f,0x17,0x33,0x76,0x2c,0xe6,0xae,0xa9,0xbd,0xa3,0x98 -,0x97,0xa1,0x29,0x6b,0xb9,0xba,0xb5,0xaf,0xbf,0x29,0x2b,0x1d,0x24,0x29,0x2e,0xed,0x37,0x1a,0x1f,0x43,0xa0,0xa1,0xb3,0xa2,0xb3,0xa8,0xba,0x6c,0x3a,0xac,0x91,0x97 -,0xad,0x2a,0x3a,0x2c,0x52,0xcc,0x22,0x1f,0x0d,0x13,0x2a,0x2f,0xca,0xcb,0x9a,0xa3,0x1f,0x1f,0x6a,0x9c,0x9c,0x9f,0xa7,0xa6,0xc4,0x3f,0xc3,0xea,0xb3,0x97,0xac,0x1c -,0x17,0x1b,0x54,0xa3,0xaa,0xb4,0x3f,0x1a,0x25,0xb8,0x3e,0x1b,0x2e,0xa3,0xa0,0x2e,0x35,0xaf,0xa7,0xb7,0x2b,0x2f,0xf5,0xac,0xa8,0x9b,0xc8,0x23,0x9c,0xad,0x27,0x31 -,0x40,0x2a,0x19,0x2c,0xa5,0xa0,0x2a,0x1b,0x2e,0x23,0x2c,0xa8,0xaf,0x27,0x1d,0x36,0x9a,0x96,0x9d,0x93,0xa7,0x2c,0x33,0xa2,0x9b,0xcd,0xf5,0xb2,0x55,0x1e,0x1a,0x31 -,0xb5,0x2c,0x1e,0x1d,0x0d,0x25,0xbc,0xbe,0xc9,0xa9,0x8d,0xa6,0x60,0xe2,0xad,0xa8,0x3d,0xab,0x99,0x9f,0xb0,0xe4,0x3a,0x3a,0x1e,0x29,0x43,0x1d,0x13,0x19,0x5b,0xa9 -,0xe6,0x48,0xda,0x21,0x27,0xb6,0xa2,0x3d,0xb7,0x90,0x9a,0xdf,0x3a,0x97,0x9e,0x34,0x2f,0x41,0x1f,0x1d,0x53,0xab,0x53,0x4e,0xa8,0x2f,0x1f,0x1b,0x3d,0xa9,0xce,0x58 -,0xba,0x3d,0x39,0xa3,0x9c,0x3a,0x27,0x9f,0xaf,0x18,0x1b,0xaa,0x94,0xa1,0xb4,0xa3,0xe5,0x1c,0x28,0xb8,0x5a,0x2c,0x2e,0xb5,0xb1,0x2b,0x31,0x22,0x3c,0x5e,0x2f,0x2d -,0x24,0x31,0xd8,0x9c,0xaa,0xb3,0x9f,0xad,0x39,0x2e,0xa1,0x95,0xaf,0xc9,0xad,0x36,0x2f,0xaa,0xa2,0x2f,0x10,0x1e,0x33,0x1d,0x17,0xcb,0xae,0x25,0x34,0xde,0xc3,0x45 -,0xa7,0x9d,0xab,0x5a,0xab,0x8d,0xac,0x47,0xae,0xa8,0xaa,0x7a,0xc2,0x27,0x16,0x14,0x2f,0xa9,0x2c,0x2b,0xc9,0x2d,0x10,0x1a,0x4e,0x45,0x69,0xb5,0xa4,0xa2,0xa9,0xa0 -,0xa5,0xad,0xb8,0x9b,0xa0,0xc9,0xc7,0xc5,0xbb,0x35,0x34,0x6e,0x1c,0x0c,0x1e,0xec,0x37,0x1e,0x30,0xb1,0xfc,0x28,0xd4,0xaf,0xab,0xaf,0xac,0xbc,0x3d,0xbd,0x99,0x90 -,0xb8,0xe5,0xa2,0xb3,0x26,0x2f,0xfc,0x3d,0x25,0x20,0x48,0x36,0x25,0x36,0x2b,0x16,0x1c,0xa8,0x9f,0x2d,0x25,0xad,0x9a,0x95,0x94,0x9e,0xf0,0x2c,0xd5,0xb8,0xb7,0xb6 -,0xa1,0xab,0x36,0x21,0x1d,0x2a,0x26,0x23,0xf1,0x45,0x1f,0x25,0x53,0xaa,0x34,0x53,0xad,0xad,0xbf,0x3a,0xae,0xbe,0xd7,0xb5,0x9e,0xac,0xb1,0xb3,0x66,0x37,0x2a,0xaf -,0x42,0x20,0x23,0x51,0xbe,0x3f,0xdf,0x31,0x1a,0x18,0x3f,0xab,0xca,0x38,0xa4,0x95,0xb4,0x46,0x5a,0xc6,0xd7,0xa7,0x99,0xb9,0x5e,0x5d,0xbf,0xab,0xb5,0xc6,0x5f,0x2e -,0x1c,0x1d,0x1e,0x23,0xad,0xa7,0x3a,0x1a,0x26,0xb9,0x3f,0x2b,0xe7,0x9c,0xb3,0x45,0xb3,0x9b,0x97,0xbc,0x52,0x50,0xb2,0x30,0xc7,0x9c,0x2c,0x16,0x2c,0xae,0xc4,0x47 -,0x29,0x1c,0x23,0x25,0x3b,0x57,0xd8,0xaf,0xc0,0xc9,0x3b,0xa6,0x9e,0xad,0xc8,0xc1,0xa4,0xbc,0xa3,0x9b,0xc0,0x27,0x2c,0x42,0x2e,0x2c,0x3a,0x39,0x2d,0x26,0x2c,0x39 -,0xd8,0xad,0x75,0x27,0x42,0x42,0xbd,0x9b,0xb8,0x2e,0xd2,0x9c,0x9d,0xab,0xc6,0x2d,0x27,0xc1,0xa1,0xae,0xce,0x21,0x3c,0xc8,0x1d,0x54,0x38,0x22,0x1e,0xdb,0xb4,0x2e -,0xbd,0x3a,0x3a,0x5e,0xaa,0xaf,0xd8,0x46,0x2f,0x9c,0x9c,0xbf,0x7c,0xbc,0x5f,0xce,0xa9,0x27,0x2c,0x2d,0x71,0xb0,0x41,0x4a,0xd2,0xb5,0x26,0x1a,0x21,0x31,0xbf,0x9e -,0x9c,0x5b,0x2c,0x2c,0xa1,0x8e,0xa4,0x3c,0x20,0xe7,0xd9,0x9c,0x99,0xdb,0x29,0x26,0x47,0x29,0x48,0x21,0x28,0x22,0x25,0xd7,0xac,0xda,0x37,0xc5,0x1d,0x3d,0xa4,0xa7 -,0xaf,0x45,0xaa,0xa5,0xb4,0xc1,0x9b,0x9b,0x3a,0x38,0x37,0xd5,0x37,0xf3,0x52,0x1f,0x1f,0x25,0xb4,0xf1,0x23,0x21,0x23,0x27,0xbb,0x9d,0x9f,0xbc,0xb4,0xaf,0x51,0xef -,0xff,0x9a,0xab,0x33,0x74,0xc7,0xa8,0xc8,0x3e,0x2a,0x25,0x3f,0xd3,0x64,0x30,0x20,0x46,0xac,0xbd,0x24,0x1e,0x5a,0xc6,0xc6,0xb8,0xaa,0x30,0xca,0x99,0x96,0x9d,0x4e -,0x4c,0x49,0xd0,0xb0,0xc4,0x27,0x28,0x39,0x54,0x37,0x23,0x36,0x4f,0x3c,0x32,0x25,0xc2,0x48,0x3b,0xb4,0xaf,0x62,0x3b,0xac,0x5f,0xbb,0xa9,0x34,0x45,0xab,0xac,0x98 -,0xa4,0x2e,0x2c,0x27,0x3b,0xba,0xd4,0x3e,0x1d,0x2b,0xb8,0xbb,0x3e,0x29,0x31,0xac,0xb7,0x2c,0x3f,0xb3,0x9e,0xac,0xb2,0x61,0x51,0xbe,0x95,0xaa,0x22,0x32,0xe5,0x37 -,0x31,0xaf,0xb7,0x50,0x1d,0x28,0x2b,0x2c,0x46,0x2c,0x26,0x2b,0xaa,0x9b,0xcd,0x44,0xb4,0x31,0xd5,0xa0,0x9d,0x9f,0x28,0x29,0xaf,0xa9,0xba,0x3b,0x2c,0x32,0x2c,0x20 -,0xd3,0xd0,0x7e,0xc4,0x5e,0xbd,0x33,0xae,0x31,0x21,0xd4,0x64,0xb8,0xbc,0xa7,0x4b,0x30,0xbb,0xa6,0x96,0xa8,0x3f,0xdf,0xca,0xc4,0x6a,0x44,0x33,0x30,0x28,0x4c,0xcb -,0x28,0x27,0x2f,0x26,0x25,0xc3,0x9a,0x9c,0x3d,0x28,0x31,0xbd,0xbc,0xca,0xda,0xb1,0xa2,0xbb,0xc0,0x63,0xa6,0xcd,0x2f,0x26,0x69,0xa8,0x32,0x1d,0x39,0xd4,0x30,0x39 -,0xbc,0xa8,0x46,0x24,0x20,0xd9,0x4d,0xa8,0x9f,0xcc,0x6e,0x4a,0xbf,0xa7,0xa4,0xaf,0xbb,0x4f,0x1e,0xfe,0xa5,0xaa,0xac,0x1f,0x16,0x1d,0xc4,0xb7,0xe9,0x1c,0x20,0xbc -,0x9d,0xad,0xc4,0x6e,0x4e,0xe7,0xd3,0xd3,0x2e,0xb6,0xb2,0xa3,0x37,0x20,0xad,0x9d,0x66,0x2a,0x4a,0x33,0x37,0x49,0x35,0x3d,0x73,0x61,0xbb,0x4b,0x35,0xa2,0xb5,0x3d -,0x3a,0x7b,0xa7,0xda,0x3c,0x35,0x5c,0xce,0x48,0x4f,0xbf,0x3b,0xba,0x9d,0xb1,0xaf,0x4f,0x23,0x2e,0x4f,0xad,0xbe,0x25,0x1f,0x37,0x39,0xd1,0xae,0xbf,0x9b,0xba,0x22 -,0x4d,0x4a,0x38,0xb7,0xb2,0x3b,0x3e,0xb9,0xc2,0xb5,0x33,0x1d,0xdf,0xa6,0xb8,0xbb,0xb5,0xd1,0x5e,0xd2,0xa8,0x39,0x23,0x2e,0x3e,0xd3,0xb6,0xb5,0xf5,0x22,0x1f,0xbc -,0xa8,0xa3,0x61,0x30,0x39,0xbe,0xcf,0x3b,0x38,0x4d,0xac,0xdf,0x2e,0x1c,0xfb,0x9c,0xa5,0x32,0x22,0x36,0xcb,0xa5,0xb2,0xc8,0x34,0x1e,0xd5,0xac,0xe0,0xea,0x4a,0x2d -,0x23,0xc6,0xa2,0xbf,0x23,0xbb,0xa3,0xb3,0xcb,0xab,0x99,0xba,0x2f,0x26,0xb6,0x33,0x25,0x42,0x45,0x30,0xc2,0xbf,0x28,0xd4,0x54,0xc6,0x31,0x2f,0xba,0xa5,0xaa,0x3c -,0x2f,0x68,0x31,0x3d,0xb1,0xbb,0xae,0xb0,0xb7,0x3f,0x1d,0x18,0x2f,0xad,0xac,0xbb,0xc2,0x46,0x22,0x2a,0xac,0xa7,0x4a,0xd1,0xb0,0xae,0xbb,0x38,0xa7,0xa5,0x34,0x4b -,0x51,0x6b,0xfa,0x40,0x32,0x1f,0x33,0x56,0xb5,0x35,0xd7,0x97,0x9a,0xec,0x1a,0x4b,0x7c,0x4d,0x2f,0x3b,0xac,0xa2,0xaf,0xbe,0xd7,0x26,0x36,0xa2,0xba,0x27,0x30,0x2f -,0x35,0xbf,0xb3,0xe1,0x1d,0x19,0x29,0x43,0xaa,0x9d,0x99,0xcc,0x1e,0x29,0x59,0x20,0xc5,0x8e,0x99,0xdb,0x1e,0x1e,0xab,0x9b,0x94,0x8f,0x34,0x0c,0x0d,0x46,0x98,0x8d -,0xa9,0x0d,0x04,0x0c,0x9c,0x9b,0xab,0xc4,0x12,0x3d,0xbc,0xb7,0x48,0x1f,0x4f,0x8e,0x86,0x9e,0x26,0x11,0x2f,0xb4,0x9c,0x8c,0x90,0x29,0x09,0x06,0x13,0x9b,0x9a,0xa9 -,0x16,0x10,0x4d,0x8c,0x93,0xa7,0xa5,0x64,0x2f,0x08,0x0e,0xb5,0x8f,0xa0,0xb3,0x34,0x39,0xb5,0xb6,0x3c,0x3a,0xa7,0x8e,0x87,0xd8,0x1a,0x19,0x1e,0x23,0xb0,0xa2,0x22 -,0x0c,0x08,0x24,0x9f,0x8e,0xab,0x3b,0x2e,0x12,0xc6,0x99,0x92,0x99,0x97,0xe0,0x2a,0x9d,0x9a,0x9e,0x3f,0x25,0x58,0x32,0x26,0x0a,0x09,0x24,0xea,0x99,0xa0,0xe4,0x18 -,0x27,0xbf,0x5d,0xbf,0x97,0x8c,0x99,0x2f,0x1a,0x32,0xa7,0x95,0xa7,0xd3,0x17,0x0f,0xa8,0x95,0x94,0xaa,0x25,0x1a,0x08,0x0a,0x3d,0x8e,0x91,0x25,0x0b,0x1f,0x9c,0x9e -,0x3c,0x2c,0x73,0x99,0x8f,0xbe,0x1f,0x4c,0xa1,0x9d,0x94,0x96,0xc2,0x1d,0x11,0x0c,0x2c,0x90,0x9a,0x7c,0x13,0x13,0x5e,0xb3,0x9a,0x9b,0x5e,0x16,0x0f,0x1e,0xb1,0x8c -,0x8b,0xa2,0x39,0x19,0x1e,0x4a,0xc4,0x3f,0x49,0x94,0x8f,0xa8,0xb3,0xb7,0x5f,0x18,0x14,0x36,0xc1,0x1f,0x07,0x0e,0x27,0x9d,0x90,0x47,0x12,0x0c,0xb5,0x88,0x85,0x8b -,0x46,0xb5,0x9b,0xa5,0xa9,0x5d,0xa8,0x1d,0x10,0x14,0x18,0x2c,0x27,0x35,0x1b,0x38,0x9a,0x95,0x2f,0x0b,0x35,0x93,0x8f,0xa2,0xf8,0x9a,0x9b,0xa8,0xcb,0xa9,0x90,0xb1 -,0xae,0x2a,0x07,0x25,0x90,0x83,0x88,0x4a,0x1c,0x28,0xc3,0x2a,0xc7,0x99,0x96,0x9e,0x29,0x31,0x33,0x24,0x1a,0x0d,0x0d,0x0e,0x0d,0x0a,0x18,0x4b,0x33,0x15,0x12,0x1d -,0x05,0x05,0x05,0x0b,0x2f,0x2b,0x25,0x11,0x0d,0x12,0x1e,0xb9,0x4d,0x48,0x1f,0x1f,0x9d,0xab,0x86,0x81,0x83,0x9a,0x1c,0xa1,0x90,0x83,0x89,0x8b,0x86,0x8d,0x91,0x9a -,0xa2,0x9e,0xa5,0xa6,0x98,0x8f,0x38,0xb8,0x9c,0x3f,0x38,0xc7,0x91,0x9e,0x3b,0x11,0x37,0x8e,0x91,0x9f,0xab,0x27,0x23,0x17,0xa9,0x8d,0xaf,0xa6,0x3a,0x0d,0x04,0x00 -,0x0b,0xb8,0x55,0x1e,0x3c,0x4d,0x12,0x05,0x0d,0x17,0x19,0x0f,0x1f,0x8a,0x9f,0x26,0x2c,0xad,0x28,0x04,0x0f,0x1f,0x8f,0x8a,0x8e,0x92,0x31,0x0f,0x07,0x0c,0x0b,0x0a -,0x8f,0x84,0x9b,0x2f,0x22,0x9c,0x2d,0x2c,0xb6,0x93,0x84,0x9d,0xda,0x7c,0x99,0x8b,0xab,0xb7,0x1e,0x2e,0x89,0x8d,0x8d,0x98,0x9a,0x99,0x16,0x0e,0x16,0xaa,0x8a,0x9f -,0x9f,0x18,0x05,0x01,0x06,0x0c,0x1b,0x81,0x87,0x98,0x10,0x09,0x1f,0x14,0xce,0x9d,0x8b,0x83,0x98,0x95,0x99,0xbe,0x2a,0x5b,0x25,0x0f,0x86,0x81,0x82,0x88,0xa9,0xa1 -,0x41,0x26,0x9a,0x87,0x81,0x9d,0xbe,0xa2,0x3b,0x09,0x0b,0x0c,0x09,0x86,0x8a,0x24,0x03,0x00,0x04,0x00,0x07,0x13,0xa8,0xbd,0x01,0x02,0x00,0x08,0x05,0x0a,0x06,0x14 -,0x80,0x99,0x5a,0x0d,0x1d,0x2c,0x06,0x17,0x96,0x81,0x8d,0x9c,0x9d,0x8e,0xa6,0x2b,0x37,0x1e,0x8a,0x80,0x88,0x95,0x4a,0xc9,0x17,0x10,0x90,0x80,0x83,0xb7,0x18,0xc0 -,0xa0,0xa4,0x93,0xa6,0x9a,0x80,0x8a,0x23,0x0b,0x26,0xb1,0x22,0x21,0x94,0x80,0x96,0x0c,0x0b,0x35,0x24,0x10,0x0c,0x04,0x89,0x86,0x14,0x05,0x09,0x59,0x0d,0x0b,0xde -,0x88,0x8b,0x1e,0x05,0x19,0x23,0x12,0x17,0x08,0x9a,0x80,0x19,0x00,0x00,0x04,0x18,0x18,0xac,0x82,0x87,0x1d,0x04,0x03,0x11,0x1d,0xd8,0x2b,0xa8,0x80,0x94,0x0c,0x03 -,0x16,0x6f,0x46,0x9f,0x83,0x82,0x40,0x02,0x0c,0x9b,0xb7,0x39,0x16,0x24,0x80,0x8e,0x1f,0x08,0x20,0x9a,0x26,0x9f,0x82,0x80,0xa5,0x02,0x03,0x1e,0x1e,0x12,0x0c,0x2f -,0x80,0x8a,0x0f,0x02,0x04,0x1b,0x24,0x9b,0x82,0x80,0x9f,0x05,0x18,0x96,0x8a,0x8c,0xb5,0xb6,0x80,0x87,0xc2,0x32,0x98,0x80,0x95,0xa9,0x86,0x80,0xa9,0x07,0x12,0xaa -,0x1a,0x03,0x03,0x09,0x85,0x9b,0x00,0x03,0x00,0x09,0x06,0x07,0xdb,0x95,0x33,0x02,0x00,0x0b,0x0a,0x05,0x02,0x08,0x83,0x8c,0x06,0x04,0x0d,0xa1,0xed,0x38,0x8a,0x8c -,0x1f,0x02,0x0b,0x95,0x8f,0xbe,0x1e,0x21,0x81,0x88,0x41,0x31,0x9b,0x80,0x8f,0x97,0x84,0x80,0x8e,0x11,0x18,0x8b,0x8c,0x24,0x07,0x13,0x80,0x88,0xb6,0xff,0x19,0x3c -,0x16,0x23,0x8a,0x80,0x9d,0x05,0x06,0xb2,0x8e,0xca,0x12,0x18,0x80,0xa9,0x02,0x07,0x13,0xa3,0x20,0x3c,0x8c,0x8c,0x0e,0x00,0x04,0x42,0xbc,0x17,0x06,0x0a,0x82,0xa2 -,0x09,0x06,0x08,0x44,0x15,0x0e,0xa8,0x8d,0x1d,0x0a,0xaa,0x84,0xaf,0x06,0x04,0xc4,0x80,0xaa,0x15,0x12,0x20,0xf5,0x48,0x97,0x88,0x94,0x0b,0x01,0x21,0x89,0x8d,0x28 -,0x2a,0x89,0x80,0x55,0x06,0x14,0x8b,0x8a,0x9b,0x88,0x80,0x95,0x06,0x0c,0x9b,0x8a,0x2d,0x0b,0x05,0x91,0x8b,0x09,0x06,0x0c,0x9d,0xfd,0x11,0x1d,0xa3,0xac,0x0c,0x19 -,0x8e,0x82,0x99,0x36,0x9b,0x80,0x88,0x44,0x3c,0x92,0x81,0xad,0xa5,0x87,0x8a,0xb3,0x11,0x5e,0xa2,0xbc,0x2c,0x17,0x2b,0x80,0xee,0x01,0x03,0x23,0xa8,0x03,0x08,0x18 -,0x1b,0x02,0x00,0x0b,0x3e,0x17,0x08,0x03,0x0f,0x9c,0x09,0x02,0x08,0x34,0xa7,0x0a,0x0d,0x31,0x4e,0x0d,0x07,0x48,0x8a,0x8a,0x4b,0x08,0xa2,0x80,0x94,0xb3,0xcd,0x8c -,0x94,0x26,0x8e,0x81,0x80,0x9a,0x1d,0xad,0x8c,0x8f,0xa9,0x13,0xa8,0x80,0x97,0x45,0x0b,0x9f,0x8b,0x2a,0xa5,0x87,0x8b,0x0f,0x06,0xac,0x82,0x83,0xb6,0x0e,0xde,0x80 -,0xa6,0x19,0x07,0x0e,0x99,0x34,0x2c,0xb6,0xa2,0x0e,0x00,0x06,0xab,0xb1,0x07,0x01,0x10,0x80,0x8f,0x17,0x08,0x09,0x5f,0x1c,0x6a,0xa1,0xb0,0x1f,0x0a,0x24,0x9b,0x9e -,0x0f,0x0a,0x07,0x97,0x97,0x05,0x05,0x06,0x95,0x8e,0x9f,0x8f,0x97,0x37,0x0d,0x18,0xa0,0x8f,0x9a,0xb6,0x16,0x92,0x80,0xb8,0x23,0x1b,0x9a,0x8d,0xca,0x97,0x85,0x83 -,0x9c,0x2c,0x99,0x8f,0x35,0x10,0x06,0x0e,0x8c,0xb5,0x3e,0x28,0x11,0x27,0x1a,0xaf,0x9c,0x99,0xaf,0x08,0x0d,0x8d,0x80,0x87,0xae,0x19,0x92,0x86,0x9f,0x3d,0x11,0xa1 -,0x8c,0x86,0x83,0x88,0x89,0xb6,0x1c,0x3d,0x8b,0x9f,0x0b,0x03,0x3a,0x80,0x88,0xbb,0x09,0x00,0x09,0x0f,0x1e,0x1b,0x15,0x0e,0x06,0x06,0x0d,0x12,0x04,0x03,0x00,0x34 -,0x95,0x07,0x02,0x04,0xbb,0x89,0x94,0xb9,0x3a,0x1f,0x0c,0x08,0x36,0x98,0x9b,0x99,0xab,0x8e,0x80,0x8c,0x3a,0x0d,0x1b,0x9c,0x9c,0x9c,0x93,0x8b,0x87,0x99,0xa1,0x8e -,0x9e,0xa2,0xa4,0x2e,0x90,0x81,0x8a,0xda,0x11,0xaf,0x8d,0xb1,0xc1,0x9e,0xaa,0x17,0x0b,0xaf,0x88,0x82,0x8d,0x19,0x26,0x8c,0x92,0x25,0x05,0x09,0xfe,0x9f,0xa8,0xaf -,0x3b,0x16,0x04,0x03,0x0d,0x36,0x52,0x0b,0x09,0x9b,0x81,0x9a,0x1e,0x07,0x09,0x28,0x25,0x14,0x1b,0x1e,0x28,0x18,0x15,0x3c,0x9d,0x2a,0x08,0x0a,0xa0,0x8f,0x16,0x0d -,0x1c,0x8d,0x91,0xbb,0xa7,0x2c,0x50,0x1b,0x05,0x1e,0x8d,0x81,0x93,0x19,0x3b,0x83,0x88,0xb8,0x14,0x13,0xaf,0x9b,0x8d,0x86,0x85,0x8d,0xcb,0x1f,0xb3,0x95,0xbe,0x1b -,0x0b,0x38,0x87,0x9b,0x13,0x02,0x13,0xba,0xb6,0x6a,0x0f,0x0e,0x15,0x34,0x8e,0x82,0x83,0x91,0xd1,0xb0,0x83,0x85,0x9e,0x1b,0x4d,0x84,0x81,0x87,0x91,0x8d,0xa2,0x23 -,0x1c,0x1d,0x35,0x26,0x0f,0x0c,0xce,0x8a,0xb6,0x08,0x02,0x08,0x19,0x11,0x09,0x13,0x17,0x0d,0x08,0x07,0x0f,0x10,0x07,0x04,0x00,0x26,0xbc,0x22,0x12,0x15,0xa1,0xb4 -,0x9f,0xc1,0x1b,0x0c,0x09,0x0d,0xe9,0x89,0x92,0x1f,0x0c,0x92,0x80,0x89,0x37,0x0e,0x93,0x86,0x89,0x85,0x85,0x84,0x8b,0xa1,0xa5,0x90,0x99,0x34,0x10,0xa8,0x80,0x89 -,0x3d,0x08,0x2d,0x93,0x9d,0xa2,0x38,0x29,0x28,0x34,0xad,0x8c,0x88,0x9b,0x21,0x2a,0x88,0x9d,0x15,0x0c,0xad,0x91,0xae,0xb1,0x31,0xce,0x19,0x05,0x04,0x0c,0x17,0x15 -,0x00,0x0d,0xa3,0x31,0x17,0x04,0x3d,0x22,0x11,0xa6,0xa6,0x91,0xae,0x15,0x25,0x8b,0x8a,0x2e,0x1b,0x9e,0x8f,0xa9,0x04,0x0f,0x86,0x8b,0x93,0x90,0x8f,0xb1,0x0a,0x03 -,0x02,0x1f,0x5b,0x0f,0x09,0xba,0x8f,0x33,0x0d,0x03,0x2b,0xb4,0xba,0xaa,0x8b,0x8e,0x26,0xb5,0x89,0x85,0xa8,0x0e,0xc2,0x87,0x98,0x2d,0x15,0x9a,0x8b,0x8f,0x90,0x8c -,0x84,0x96,0x29,0xcf,0x8a,0x82,0x92,0x4a,0x86,0x82,0x9a,0x0a,0x00,0x17,0x11,0x1b,0x0d,0x17,0x0c,0x02,0x02,0x1b,0x4d,0x10,0x02,0x05,0x59,0x0f,0x04,0x00,0x33,0x8b -,0x8e,0x8f,0xae,0x57,0x1c,0x1f,0x96,0x84,0x84,0x91,0x91,0x80,0x82,0x95,0x0e,0x3a,0x91,0xb0,0x99,0x8f,0x8c,0xad,0x13,0x18,0x9b,0x99,0x0e,0x02,0x9b,0x9f,0x2a,0x06 -,0x07,0x28,0x29,0xa6,0x2a,0x31,0x09,0x01,0x00,0x08,0x1f,0x1c,0x14,0x8c,0x87,0xfb,0x06,0x0a,0x27,0x49,0x98,0x9b,0x96,0xe8,0x0a,0x0d,0x96,0x90,0x90,0x2d,0x88,0x87 -,0xa4,0x2a,0x39,0x80,0x84,0x80,0x85,0x90,0x9a,0x24,0x08,0x2d,0xa1,0xa6,0x11,0x97,0x8a,0x1c,0x08,0x01,0x13,0x35,0xaa,0x19,0xdb,0xe7,0x0c,0x0d,0xc3,0xa9,0x27,0x09 -,0x98,0x82,0x2b,0x0a,0x05,0x95,0x8c,0x93,0x8d,0x95,0x8e,0x2e,0x0e,0xfe,0x8f,0x90,0xbb,0x83,0x85,0x8c,0x18,0x00,0x5f,0x97,0x96,0x99,0x99,0xa3,0x21,0x02,0x42,0xa5 -,0x9c,0x09,0xa2,0x96,0x06,0x04,0x04,0x9f,0xcb,0xba,0x37,0x3f,0x5d,0x03,0x03,0x19,0xda,0x27,0x13,0x82,0x92,0xe4,0x06,0x09,0xa8,0x41,0x28,0x0c,0x1d,0x1b,0x0c,0x11 -,0x1b,0xde,0x69,0x1a,0x84,0x94,0x28,0x03,0x4a,0x86,0x90,0x8b,0x94,0x84,0x90,0x17,0x12,0xae,0x92,0x20,0xa9,0x80,0x8b,0xcd,0x03,0x34,0x98,0xab,0xab,0x9d,0x95,0x22 -,0x05,0x18,0xbe,0x8d,0xba,0x98,0x80,0xa6,0x0f,0x02,0x3c,0x8d,0x87,0x8d,0x89,0x86,0xab,0x09,0x33,0x2f,0x9d,0x1f,0x98,0x87,0x23,0x0d,0x00,0x43,0xba,0x27,0x18,0x3a -,0x2c,0x04,0x08,0x2b,0x98,0x83,0x9d,0x82,0x85,0x99,0x11,0x0f,0x88,0x99,0xa4,0x9b,0x50,0x1c,0x08,0x01,0x05,0x05,0x04,0x08,0x92,0x12,0x03,0x00,0x05,0x2b,0x27,0xe0 -,0x2c,0x98,0x39,0x07,0x1f,0x9a,0x8c,0xac,0x87,0x80,0x82,0x91,0x06,0x4b,0x8e,0x87,0x8c,0x86,0x81,0x9e,0x15,0x2c,0x99,0x8e,0xab,0x82,0x86,0xa0,0x0d,0x05,0x98,0xaa -,0x8a,0xc0,0x90,0xa3,0x08,0x0f,0x0e,0xaa,0x3b,0xa5,0x83,0xa7,0x37,0x07,0x03,0x20,0x39,0x3f,0x0f,0x2f,0x12,0x01,0x04,0x03,0x3a,0x0f,0x9f,0x87,0xb6,0x30,0x07,0x8d -,0x87,0x86,0x82,0x88,0x80,0x93,0xa8,0xcf,0x8c,0x8f,0xbb,0x80,0x98,0xbe,0x0a,0x00,0x0c,0x0c,0x2f,0x06,0x0c,0x12,0x02,0x04,0x01,0x0b,0x03,0x0e,0x8b,0x1a,0x15,0x05 -,0x00,0x0d,0x44,0x9a,0x20,0x9e,0x3a,0x0e,0x1c,0x32,0x96,0xb8,0x87,0x85,0x90,0x99,0x11,0x8e,0x8f,0x89,0x85,0x8d,0x83,0xb3,0xd2,0xa7,0x9a,0x87,0x9b,0x81,0x85,0x8c -,0x4e,0x0c,0x9e,0x94,0x8a,0x9c,0xa7,0x95,0x0f,0x0b,0x0e,0x13,0x27,0x0d,0x88,0x2a,0x07,0x03,0x03,0x28,0x17,0x3f,0x0f,0xc8,0x9f,0x13,0x1e,0x3a,0x90,0x8c,0x8c,0x80 -,0x86,0x86,0x1a,0xc2,0x8e,0x8f,0x84,0xa0,0xa3,0x1f,0x02,0x0a,0x13,0x1b,0x0d,0x0e,0x8f,0x28,0x0e,0x02,0x0f,0xa0,0x47,0xa6,0xab,0x8e,0xcd,0x07,0x04,0x19,0xa4,0x1e -,0x22,0x8d,0xaf,0x15,0x00,0x12,0xc0,0xaf,0xb2,0x3a,0x9e,0x1d,0x06,0x06,0x23,0x92,0x3c,0x2f,0x84,0x96,0x25,0x07,0xad,0x83,0x8a,0x8f,0x8d,0x83,0x89,0x29,0x1b,0x8c -,0x89,0x92,0x9a,0x82,0x8c,0xe8,0x03,0x12,0x93,0x9c,0x2a,0x1c,0x2e,0x19,0x08,0x04,0x14,0x1d,0xf8,0x3f,0x84,0x8b,0xaa,0x18,0x23,0x80,0x85,0x85,0x86,0x83,0x8e,0xc0 -,0x16,0xcc,0x9d,0x63,0x0b,0x1d,0xa4,0x04,0x02,0x00,0x0d,0x0e,0x21,0x0f,0x0b,0x0d,0x03,0x05,0x0f,0x31,0xb1,0x20,0x33,0x82,0x55,0x1f,0x09,0xc6,0x95,0x98,0x8c,0x9e -,0x8e,0xe9,0x1b,0x35,0x90,0x94,0xc7,0x16,0x8a,0x8b,0xbd,0x0b,0x12,0x8c,0xa7,0x91,0xb6,0x97,0xba,0x2f,0x13,0x32,0x8c,0x9a,0x20,0xa7,0x83,0x6a,0x22,0x09,0x34,0x9c -,0x9b,0xd3,0xbd,0x42,0x1b,0x0f,0x0d,0x2e,0x2d,0x1f,0x0c,0x95,0xac,0x14,0x09,0x23,0x86,0x84,0x87,0x8f,0x84,0x8a,0x97,0x9c,0x88,0x82,0x85,0xaa,0x96,0x80,0x95,0x20 -,0x01,0x37,0x18,0x11,0x08,0x09,0x26,0x03,0x05,0x00,0x0e,0x18,0x0a,0x00,0x5b,0xb4,0x0c,0x06,0x0c,0xae,0xd1,0x29,0x13,0xb6,0x3a,0x12,0x0c,0x3c,0x97,0xb3,0x44,0x32 -,0x82,0x87,0x9b,0x13,0xaf,0x8f,0xa7,0x9c,0x99,0x83,0x99,0xde,0x45,0x92,0x92,0xd3,0x0f,0x9c,0x80,0x8a,0x9f,0x15,0x91,0x99,0xb3,0xbd,0xa9,0xa1,0x18,0x0d,0x0e,0xba -,0x2b,0x10,0x12,0xa4,0x98,0x0c,0x04,0x06,0x17,0x11,0x0f,0x99,0x89,0x9d,0x18,0x2d,0x8e,0x87,0x8f,0x9e,0x8d,0x80,0x86,0x8f,0xaa,0x97,0x93,0x27,0x69,0x9d,0xab,0x14 -,0x0a,0x08,0x1c,0x13,0x13,0x09,0x25,0x95,0x17,0x06,0x03,0x12,0x15,0x36,0x22,0xad,0xc5,0x0d,0x09,0x12,0x1b,0x24,0x1e,0x14,0x8c,0x8c,0x2b,0x0a,0x1d,0x95,0xa9,0x8f -,0x90,0x96,0xa4,0x18,0x30,0x9f,0x8d,0x95,0xc0,0x93,0x85,0x8f,0x48,0x15,0xa9,0xa0,0x99,0x9e,0x8e,0x89,0xbe,0x17,0x0e,0xaf,0xc4,0xde,0x15,0x99,0x8b,0x4a,0x0e,0x04 -,0x27,0x2b,0x1d,0x1d,0x4d,0x22,0x0d,0x0e,0x9e,0x8f,0x92,0x94,0x99,0x80,0x89,0x97,0x65,0x9a,0x83,0x8f,0x8e,0x8d,0x8d,0x24,0x0c,0x08,0x11,0x12,0x05,0x02,0x1b,0x93 -,0x13,0x02,0x02,0x0f,0x1b,0x0f,0x14,0x51,0x55,0x0f,0x04,0x0e,0xad,0xbb,0x24,0x1a,0x96,0x90,0xbf,0x1c,0x1b,0xa0,0x9f,0x96,0x95,0x85,0x8c,0x73,0xcd,0xa9,0x9d,0xa4 -,0x30,0x9e,0x81,0x8c,0xbb,0x16,0xbb,0xaa,0xc2,0xb9,0x92,0x90,0x3f,0x16,0x1d,0xa5,0x49,0x27,0x32,0x87,0x8b,0x1e,0x06,0x09,0xf8,0x54,0x2c,0x46,0x38,0x11,0x0a,0x0b -,0x1c,0xe4,0xd9,0x2e,0xaa,0x82,0x8a,0x95,0xac,0x92,0x89,0x89,0x85,0x88,0x87,0x92,0xa8,0x31,0xa9,0x25,0x22,0x10,0x2f,0xaf,0x04,0x02,0x01,0x08,0x0d,0x2e,0x36,0x2f -,0x0f,0x05,0x04,0x0d,0x24,0x19,0x19,0x30,0x8b,0xa1,0x0e,0x05,0x18,0xa7,0x9f,0x9b,0xaf,0xa7,0x3c,0x23,0xaa,0x93,0x9c,0xd1,0x4b,0x8c,0x84,0xab,0x10,0x16,0x95,0x94 -,0x8d,0x88,0x89,0x92,0x26,0x1d,0xa5,0x90,0xa2,0xad,0x9f,0x83,0x96,0x1f,0x0e,0x1c,0xa2,0x53,0xbc,0x3d,0x4e,0x0d,0x07,0x14,0x2e,0x20,0x0e,0x0c,0x1f,0x9f,0x0f,0x0e -,0x25,0x91,0x89,0x8a,0x84,0x85,0x88,0x9d,0x93,0x8a,0x8b,0x9f,0x99,0x95,0x88,0x5c,0x04,0x06,0x0c,0x37,0x15,0x1c,0x14,0x0c,0x05,0x07,0x17,0x2f,0x1b,0x12,0x0c,0x24 -,0xbd,0x08,0x07,0x0a,0xb9,0x9e,0xb0,0x5f,0x6a,0x6a,0x18,0x18,0x44,0x9c,0x9c,0xa2,0xbb,0x8a,0x9a,0x29,0x24,0xa4,0x8c,0xa7,0xaf,0xac,0x96,0xac,0x2b,0xbc,0x92,0x9b -,0xa9,0x43,0x8e,0x8d,0x17,0x0e,0x26,0x88,0x93,0xa1,0xc7,0xa0,0xa6,0x15,0x0f,0x23,0x3d,0x43,0x16,0x3a,0x96,0x0d,0x08,0x03,0xb9,0xae,0x61,0xa2,0x93,0x8a,0xa9,0x9b -,0x8e,0x88,0x87,0x8d,0x8e,0x80,0x98,0xdf,0x28,0x9f,0xd2,0x1a,0x2f,0xb4,0xbe,0x08,0x01,0x02,0x0a,0x0d,0x0d,0x14,0x94,0x19,0x04,0x03,0x1e,0xba,0x10,0x0c,0x24,0x97 -,0x36,0x0f,0x11,0x2c,0x33,0x3c,0x4e,0x82,0x9c,0x1c,0x0d,0xb8,0x8a,0xa5,0x91,0x92,0x85,0x9a,0x31,0x29,0xa4,0x9a,0xa3,0x9c,0x80,0x93,0x54,0x19,0xb1,0x8e,0xf3,0x9e -,0xa4,0x8a,0x91,0x27,0x19,0x2f,0xc4,0xa4,0x37,0x8d,0x29,0x11,0x0c,0x0f,0x4f,0x10,0x1f,0x31,0x9a,0x4b,0x0e,0x0d,0x17,0xb3,0x8f,0x8f,0x80,0x92,0x94,0x9f,0x8a,0x83 -,0x8c,0x87,0x86,0x85,0xad,0x15,0x14,0x18,0x15,0x13,0x27,0x90,0x0a,0x02,0x06,0x21,0x03,0x0a,0x8a,0xb8,0x9b,0x1a,0x05,0x0d,0x04,0x0f,0x0e,0x5d,0xc9,0x06,0x06,0x00 -,0x0b,0x05,0x07,0x07,0x0c,0x24,0x0b,0x03,0x08,0x0b,0x1e,0x1c,0xa3,0x87,0x9e,0x2b,0x16,0x8d,0xaa,0x9c,0x80,0x80,0x81,0x8f,0x90,0x81,0x83,0x82,0x83,0x80,0x80,0x81 -,0x90,0x9f,0x85,0x86,0x86,0x86,0x82,0x85,0x9d,0x3a,0xa2,0xa5,0x99,0xa9,0x82,0x8b,0x32,0x09,0x07,0x13,0x0f,0x21,0x0f,0x32,0x19,0x03,0x02,0x01,0x01,0x02,0x0b,0xa8 -,0x0f,0x00,0x01,0x00,0x00,0x01,0x04,0x0d,0x0e,0x02,0x01,0x01,0x02,0x03,0x01,0x1b,0x97,0x17,0x06,0x02,0x16,0x14,0x0e,0x38,0x8c,0x8e,0xa8,0xac,0xab,0x9b,0x9e,0x89 -,0x80,0x80,0x83,0x92,0x90,0x81,0x85,0x84,0x83,0x80,0x82,0x85,0x86,0x87,0x88,0x88,0x83,0x80,0x80,0x82,0x8f,0x89,0x86,0x8b,0x85,0x83,0x80,0x84,0x91,0x8f,0x8e,0x8c -,0x9c,0x8a,0x80,0x82,0x8d,0x2a,0x9e,0xaf,0xaf,0xa5,0x98,0x93,0x26,0x0c,0x0a,0x05,0x06,0x01,0x1a,0x33,0x0d,0x06,0x00,0x02,0x00,0x02,0x04,0x07,0x06,0x01,0x01,0x00 -,0x00,0x00,0x01,0x1e,0x0c,0x05,0x02,0x01,0x02,0x01,0x05,0x0d,0x15,0x05,0x01,0x02,0x02,0x04,0x01,0x11,0xa8,0x29,0x0e,0x05,0x0c,0x0b,0x06,0x1b,0xa4,0x99,0x48,0x1d -,0x1b,0x28,0x5f,0x2e,0x8c,0x83,0x85,0x8c,0x9a,0x8e,0x98,0x8a,0x84,0x81,0x81,0x85,0x8a,0x8d,0x8e,0x8e,0x8a,0x80,0x80,0x82,0x88,0x88,0x86,0x89,0x85,0x82,0x81,0x82 -,0x84,0x86,0x88,0x8a,0x8c,0x86,0x80,0x82,0x85,0x95,0x94,0xaa,0xb2,0x99,0x92,0x97,0xbe,0x27,0x18,0x0c,0x0e,0x0b,0x71,0xa1,0x2f,0x2a,0x12,0x21,0x0b,0x18,0xd7,0x99 -,0x9f,0x37,0x32,0x37,0x43,0xc6,0xaa,0x8a,0x87,0x8f,0x93,0x9e,0x94,0xa5,0x9c,0x8a,0x83,0x8b,0x9b,0xb2,0xb7,0x49,0xe3,0x29,0x94,0x97,0xbf,0x26,0x0e,0x12,0x05,0x08 -,0x0c,0x18,0x0b,0x04,0x03,0x03,0x01,0x02,0x00,0x0e,0x0a,0x04,0x03,0x02,0x03,0x00,0x02,0x05,0x0d,0x04,0x02,0x01,0x02,0x00,0x01,0x00,0x0c,0x0b,0x04,0x03,0x03,0x04 -,0x00,0x02,0x06,0x0e,0x08,0x06,0x05,0x07,0x04,0x06,0x08,0x2d,0x2a,0x1d,0x27,0x38,0xbc,0x2c,0xa4,0x92,0x87,0x88,0x88,0x85,0x88,0x8a,0x8a,0x86,0x80,0x81,0x82,0x82 -,0x82,0x82,0x85,0x82,0x82,0x81,0x81,0x81,0x80,0x82,0x87,0x84,0x83,0x80,0x81,0x82,0x80,0x81,0x82,0x89,0x85,0x83,0x83,0x86,0x85,0x83,0x87,0x8f,0x8d,0x8d,0x86,0x87 -,0x8c,0x84,0x85,0x84,0x90,0x8c,0x87,0x87,0x89,0x8d,0x8a,0x8c,0x9f,0x9e,0xa6,0x97,0x9e,0x1a,0x2a,0x23,0x1c,0x08,0x04,0x05,0x05,0x05,0x02,0x02,0x01,0x00,0x00,0x00 -,0x00,0x03,0x00,0x01,0x01,0x02,0x01,0x00,0x00,0x00,0x02,0x03,0x02,0x03,0x02,0x01,0x02,0x02,0x0d,0x08,0x0b,0x11,0x16,0x1b,0x0f,0x1e,0x20,0x4c,0xad,0xa9,0xa9,0xbe -,0xbb,0xa4,0xaf,0x93,0x8d,0x95,0x8c,0x8e,0x8c,0x9a,0x9d,0x9a,0x98,0x93,0x93,0x97,0x9a,0x9d,0x9c,0xa0,0x9f,0x90,0xa5,0x95,0x8e,0x8b,0x8e,0xa3,0x96,0x91,0x90,0x94 -,0x9a,0x96,0x9b,0xa2,0xa8,0xe4,0x98,0xaa,0xaf,0x99,0x9f,0xb1,0x17,0x18,0x22,0x29,0x24,0x19,0x1f,0x21,0x11,0x0f,0x0c,0x1a,0x2c,0x13,0x2a,0x46,0xba,0x2e,0x1a,0x20 -,0x3c,0xc7,0x32,0x35,0xdf,0x79,0x2a,0x25,0x26,0xb3,0x56,0x31,0xb9,0xa8,0xb0,0x28,0x1d,0x36,0xbe,0x49,0x2e,0x2b,0x6f,0x30,0x2f,0x29,0x28,0xb4,0xd8,0xaa,0xa2,0xa5 -,0xa8,0xd0,0xad,0x9b,0x96,0x99,0xa1,0xa6,0x9b,0x9d,0x9b,0x9e,0x8e,0x86,0x88,0x86,0x89,0x8a,0x8d,0x8d,0x89,0x84,0x83,0x85,0x88,0x8d,0x90,0x9a,0xa0,0xaf,0x9a,0x94 -,0xa8,0xbd,0x22,0x1b,0x14,0x12,0x17,0x15,0x0e,0x08,0x07,0x06,0x08,0x05,0x05,0x06,0x0b,0x0e,0x0a,0x06,0x04,0x06,0x0a,0x0f,0x14,0x13,0x13,0x14,0x0f,0x19,0x1a,0x1d -,0x27,0x37,0xa3,0x9b,0xa3,0xaf,0xa0,0x98,0x93,0x8f,0x8e,0x90,0x8e,0x90,0x91,0x90,0x91,0x8e,0x8f,0x8d,0x91,0x99,0xa7,0xac,0x9f,0x9d,0x99,0x9f,0xc4,0x52,0x3f,0xda -,0xce,0x3d,0xe6,0xbe,0xae,0xbb,0x37,0x36,0xdb,0xb4,0xb8,0xc0,0xe4,0x31,0x22,0x21,0x2b,0x38,0x32,0x2b,0x4e,0x43,0x21,0x12,0x0c,0x12,0x1c,0x1e,0x1b,0x17,0x14,0x0f -,0x0d,0x0c,0x0e,0x15,0x14,0x23,0x38,0x3d,0x1e,0x1a,0x28,0xcf,0xa9,0xac,0xa9,0xca,0x58,0xd8,0xaf,0xa5,0xa1,0xaa,0x9f,0x97,0x99,0xa6,0xcb,0xc3,0xac,0x9e,0x9d,0xa3 -,0xba,0x3c,0x2d,0x34,0xcc,0xc1,0x4c,0x46,0x49,0xc8,0xfa,0x46,0x3f,0x5e,0xb7,0xaa,0xab,0x3c,0x24,0x2b,0x3b,0xbe,0xaf,0xa3,0x9e,0x9f,0x9f,0xa2,0x9b,0x9d,0x9a,0x8f -,0x89,0x88,0x8f,0x96,0x94,0x8f,0x93,0x9b,0x99,0x95,0x96,0x9f,0xb3,0xd3,0x71,0x36,0x27,0x3a,0x25,0x0f,0x09,0x09,0x0f,0x0f,0x0a,0x0a,0x0a,0x0b,0x0a,0x08,0x07,0x06 -,0x08,0x0d,0x16,0x12,0x0b,0x09,0x0a,0x11,0x18,0x19,0x1e,0x28,0x29,0x3b,0xc6,0xb6,0xaf,0xa8,0x94,0x8c,0x8e,0x9a,0xa3,0x98,0x92,0x8d,0x8b,0x8a,0x89,0x8f,0x92,0x8f -,0x94,0x95,0x99,0x8f,0x8c,0x91,0x9a,0xad,0xbe,0xdc,0xc7,0xa8,0xaf,0xae,0xbd,0xbe,0xb3,0xe0,0x3a,0x46,0xb2,0xa6,0xac,0xef,0x2f,0x39,0x2a,0x2c,0x5e,0xc8,0xce,0x30 -,0x33,0x37,0x1f,0x0d,0x0e,0x1b,0x2a,0x29,0x19,0x0f,0x0c,0x09,0x0b,0x0f,0x11,0x0f,0x0f,0x17,0x26,0x23,0x16,0x15,0x21,0xd5,0xaa,0xb7,0x3b,0x32,0x2c,0xc8,0x9b,0x9b -,0xaa,0xac,0xa5,0x9b,0xa3,0x6c,0x5b,0xbd,0xa3,0x9b,0x9b,0xa8,0xcc,0x40,0xc9,0xa6,0xa7,0x3f,0x52,0xac,0x99,0x9b,0xbd,0x6e,0xbf,0xb3,0xa8,0xa3,0xc7,0x35,0x2d,0x78 -,0xa3,0xa0,0xea,0x44,0xbb,0x9b,0x98,0xb6,0xb7,0xa8,0x99,0x8d,0x89,0x8b,0x94,0x9b,0x99,0x8b,0x8c,0x96,0x99,0x95,0x8f,0x8e,0x94,0xab,0xc7,0x46,0xbb,0xcf,0x21,0x11 -,0x0b,0x0a,0x0e,0x0e,0x09,0x08,0x08,0x08,0x09,0x08,0x05,0x05,0x05,0x0b,0x19,0x12,0x0a,0x09,0x0b,0x17,0x18,0x14,0x1b,0x1f,0x2e,0xcd,0xb9,0xb6,0xb7,0xbc,0xa3,0x90 -,0x96,0xa3,0xa5,0xa3,0x8f,0x8b,0x90,0x94,0x96,0x92,0x8e,0x8f,0x96,0x94,0x95,0x92,0x8b,0x8c,0x94,0x9c,0xac,0xa7,0x96,0xa0,0xa3,0xa6,0xaf,0x96,0x99,0xbc,0xde,0x57 -,0xae,0xa4,0xbf,0x37,0x2f,0x26,0x2d,0xb5,0xcd,0x3e,0x2f,0x20,0x4c,0xdc,0x22,0x1d,0x16,0x1d,0x41,0x32,0x1a,0x16,0x12,0x12,0x20,0x15,0x0f,0x0e,0x0c,0x17,0x21,0x1b -,0x18,0x17,0x15,0x26,0x40,0x1b,0x18,0x18,0x25,0x9f,0xa8,0xcf,0xb0,0xca,0xa6,0x9d,0xb6,0xaa,0xa4,0xb5,0x9c,0x90,0x98,0xad,0x4f,0x45,0x97,0x97,0xbb,0x4d,0x29,0xc7 -,0xa2,0xad,0xbd,0xbd,0x30,0xe3,0xb4,0x3c,0x31,0x1d,0x1e,0xa4,0x9a,0xb4,0xba,0x50,0xaa,0x93,0x9e,0xa9,0x9d,0x9d,0x91,0x88,0x8d,0x91,0x93,0x9f,0x8d,0x8a,0x94,0x94 -,0x99,0x99,0x8e,0x90,0x9d,0xa5,0x65,0xf9,0xbb,0x2d,0x19,0x0f,0x0a,0x15,0x25,0x13,0x0c,0x08,0x07,0x14,0x12,0x0d,0x09,0x06,0x07,0x0d,0x0e,0x0a,0x0f,0x0c,0x0f,0x14 -,0x08,0x0b,0x0c,0x15,0x47,0xac,0xb4,0x1f,0x1d,0x1a,0x96,0x9e,0xa5,0xaf,0x58,0x9b,0x8f,0x95,0x97,0x9a,0x97,0x8a,0x8c,0x87,0x9c,0x99,0xaa,0x8e,0x8a,0x98,0x97,0xa7 -,0x96,0x95,0xaf,0x2e,0x38,0xa8,0x98,0x94,0x91,0xa2,0xb5,0xbb,0x98,0x97,0xa3,0xba,0x23,0x39,0xb1,0xbe,0x38,0x24,0x23,0x2d,0x3e,0x29,0x1f,0x18,0x13,0x2e,0x34,0x25 -,0x1a,0x0c,0x12,0x25,0x1f,0x0b,0x0b,0x0b,0x1a,0x29,0x22,0x1c,0x1a,0x21,0x27,0xd9,0x1c,0x24,0x1b,0x1d,0xbb,0x45,0x63,0x28,0x19,0x2d,0xb7,0xb9,0x3d,0x34,0x28,0xa1 -,0x98,0x9f,0xcc,0xd7,0xa9,0x9a,0x9a,0x34,0xb4,0xc3,0x9e,0x92,0x98,0xa5,0xab,0x9e,0x99,0x8e,0xa0,0xea,0x62,0x3e,0xa9,0xa4,0xb9,0x2f,0x2d,0x47,0xad,0x9e,0x4e,0x50 -,0xdf,0xa5,0x8c,0x8e,0x9f,0x9a,0x92,0x8c,0x87,0x92,0x9c,0xa8,0xa5,0x8c,0x88,0x8d,0xa7,0xa8,0xab,0x9e,0xa9,0x19,0x13,0x0e,0x0f,0x1b,0x14,0x0d,0x0d,0x0c,0x12,0x1e -,0x0d,0x05,0x06,0x0e,0x2a,0x27,0x0f,0x08,0x11,0x17,0x2a,0x23,0x12,0x14,0x15,0x2b,0xab,0xa3,0xd9,0xc7,0xa7,0x90,0x91,0xad,0x49,0xb5,0xa4,0x9a,0x9c,0xb0,0xb5,0xab -,0x9b,0x90,0x98,0x36,0x1e,0x6c,0x9c,0x91,0xab,0x2c,0x3b,0x56,0xab,0xba,0x27,0x1c,0x27,0x3e,0xa9,0xa9,0x48,0x3d,0xb1,0x9a,0x97,0xad,0x2d,0x2b,0xc3,0x9d,0x91,0xa6 -,0x39,0xe4,0xaa,0x97,0x9a,0xda,0x26,0x3a,0xb9,0x9f,0xae,0x35,0x2a,0x2d,0x3e,0xc5,0x29,0x18,0x1b,0x39,0xb7,0xaf,0x37,0x20,0x42,0xd0,0xae,0xc1,0x23,0x19,0x23,0x44 -,0xa5,0xb4,0x2b,0x27,0x3f,0xca,0xd7,0x23,0x18,0x28,0x4d,0x56,0x40,0x1c,0x16,0x25,0x29,0xec,0x31,0x14,0x11,0x22,0x48,0xc0,0x2e,0x18,0x2a,0xd1,0xb5,0xbd,0x27,0x1d -,0x42,0xbf,0xa7,0x9c,0xb2,0xb3,0xa5,0x9d,0x97,0xa9,0x2a,0x36,0xa4,0x9b,0x9c,0x4a,0x24,0xcd,0xaa,0xa7,0xa2,0xc7,0x41,0xb9,0xa6,0x95,0x8f,0x9c,0x99,0x8e,0x8c,0x8d -,0x9d,0xce,0x9e,0x8f,0x8e,0x8f,0x9a,0x9f,0x9b,0x98,0xa1,0xa5,0x2f,0x1d,0x31,0x3e,0x42,0x23,0x0e,0x11,0x1c,0x17,0x18,0x0d,0x0c,0x10,0x1a,0x20,0x28,0x1e,0x16,0x39 -,0xcb,0x40,0x2a,0x0f,0x1a,0xef,0xb6,0xb2,0x3b,0x20,0x2b,0xe8,0x2f,0x49,0x20,0x12,0x1c,0x23,0x34,0x2c,0x14,0x13,0x28,0x37,0x2d,0x1c,0x0e,0x1c,0x49,0xeb,0xab,0xba -,0x63,0xa7,0x98,0x97,0x96,0xb2,0xdd,0x9d,0x8f,0x8a,0x8d,0x9d,0x9a,0x8f,0x92,0x90,0x9c,0xb4,0xa0,0x99,0x9c,0x9e,0xb5,0x5e,0xae,0xa6,0xa4,0xae,0x25,0x1e,0xbf,0xa4 -,0xa2,0xa7,0x4a,0xb6,0xa6,0xbd,0xca,0x2f,0x20,0x3e,0xbb,0xda,0xec,0x1f,0x1a,0x31,0x53,0x38,0x2a,0x14,0x15,0x2f,0x1f,0x1b,0x17,0x0e,0x17,0x27,0x21,0x1e,0x11,0x0a -,0x14,0x27,0x22,0x2a,0x22,0x2c,0xaf,0xc8,0x38,0x36,0x20,0x33,0xa3,0x9f,0x9f,0xa9,0x4b,0xb3,0x9a,0xa2,0xa3,0xad,0xd1,0xa0,0xa0,0xba,0xb3,0x68,0xea,0xa3,0xa8,0xaf -,0xc1,0x30,0x69,0x9e,0xa5,0xa4,0x9d,0xa3,0x98,0x94,0x9b,0x9b,0xa5,0xb3,0x96,0x92,0x97,0x95,0xa1,0xa4,0x9b,0xa6,0xb7,0xb9,0x3b,0x69,0xbd,0x25,0x1f,0x1e,0x1b,0x2a -,0x28,0x18,0x17,0x11,0x0f,0x1e,0x21,0x20,0x30,0x20,0x22,0xf3,0x3e,0x2d,0x2e,0x29,0xca,0xac,0x5c,0xee,0xe4,0x3e,0xb6,0xb8,0x4b,0xdf,0x2b,0x1f,0x36,0x30,0x20,0x1f -,0x1e,0x33,0xd5,0x24,0x17,0x1b,0x18,0x20,0x38,0x39,0xba,0xbd,0x62,0xae,0xb5,0xd0,0xb7,0xc1,0xa5,0x93,0x96,0x9f,0x9e,0x9d,0x99,0x95,0x9f,0x9f,0x9e,0xba,0xbd,0xad -,0xdb,0xc4,0xec,0xd2,0xaa,0xcf,0x2c,0x2b,0x2c,0x3b,0xc4,0x44,0x46,0xbe,0xbd,0xc0,0xec,0x3a,0x45,0x3c,0x41,0xb2,0xa6,0xdd,0x4c,0xeb,0xd0,0xad,0x4e,0x2d,0x4f,0x3b -,0x30,0x2a,0x1f,0x26,0x2b,0x2b,0x2e,0x2b,0x1d,0x16,0x18,0x1c,0x35,0x4c,0x2a,0x30,0x3b,0x50,0xdb,0x47,0x71,0xb5,0xb8,0xb8,0xb4,0xaf,0xa6,0xa1,0xa6,0x9e,0x9d,0xaa -,0xb5,0xd7,0xc2,0xae,0xbf,0x43,0xd8,0xbf,0xc5,0x45,0x29,0x28,0x2f,0x2c,0x32,0xd7,0xc6,0xc3,0x64,0x48,0xb8,0xb4,0xd0,0xb3,0xac,0xa2,0xa6,0xb7,0xaf,0x9f,0x9b,0x9c -,0x99,0x9d,0xaf,0xf6,0x3c,0xcd,0xc5,0x3f,0x42,0x48,0x42,0x2a,0x1e,0x1b,0x1f,0x1e,0x21,0x2c,0x2f,0x2c,0x2f,0x44,0xc1,0xbc,0x6c,0x51,0xf3,0xb4,0xaa,0xb3,0xbe,0xab -,0x9e,0xa2,0xa5,0xa8,0xc3,0x62,0x38,0x4e,0x4b,0x4d,0x56,0x46,0x3d,0x28,0x26,0x1e,0x1b,0x1d,0x26,0x30,0x2c,0x24,0x2a,0x3a,0xea,0x6c,0xdd,0xbc,0xcb,0xdd,0xe1,0xbb -,0xa9,0x9f,0x9d,0x9c,0x9b,0xa6,0xb9,0xc3,0xc0,0xb2,0xb9,0xce,0xce,0xc4,0x59,0x43,0x37,0x28,0x25,0x23,0x2d,0x49,0x34,0x2f,0x42,0xfb,0xc6,0xcf,0xc7,0xb4,0xb3,0xf1 -,0x6e,0xc6,0xda,0xb9,0xad,0xa5,0x9f,0xb0,0x70,0x3e,0x3b,0x43,0x4d,0x3e,0xd5,0xb6,0x3a,0x2a,0x2d,0x3c,0x39,0x20,0x1e,0x2b,0x25,0x1e,0x2b,0x3c,0xe8,0xdb,0x3b,0x37 -,0x54,0x3e,0x4c,0xcd,0xc8,0xaa,0xac,0xaa,0x9f,0x9e,0xac,0xbc,0xe6,0xcd,0xb1,0xd5,0xbd,0xb6,0x76,0x6b,0x4f,0x3d,0x3d,0x2d,0x24,0x2e,0x2e,0x24,0x30,0x32,0x5f,0xab -,0xb0,0xb3,0xcd,0x2e,0x40,0xb4,0xab,0x9f,0xa0,0xad,0xa1,0x9f,0xb0,0xad,0xc7,0xd6,0xac,0xcb,0xca,0xbf,0x3d,0x4a,0xbb,0xc1,0x4c,0x28,0x1a,0x25,0x2d,0x20,0x2e,0x27 -,0x26,0xc6,0xc7,0xb8,0xc4,0x27,0x2f,0xce,0xb2,0xa3,0x9f,0xae,0x9e,0x9b,0xad,0xa9,0xd4,0x3d,0xb0,0xd8,0xe0,0xc4,0x25,0x26,0x46,0x44,0x6d,0x2f,0x16,0x1e,0x23,0x1b -,0x31,0x35,0x29,0xd4,0x4e,0xfa,0xa9,0x3d,0x2f,0xcb,0x52,0xaa,0xa4,0x5f,0xab,0x9d,0xa3,0x9e,0xba,0x25,0xc8,0xb8,0xbb,0xa4,0x36,0x22,0x44,0x4b,0xb3,0xc2,0x1a,0x1f -,0x2b,0x1d,0x4c,0x5b,0x27,0xcb,0xdd,0x67,0xa7,0x43,0x2d,0xaa,0xbc,0xa0,0x96,0xd5,0xbe,0x9d,0xad,0x9d,0xa1,0x34,0xbb,0x3a,0x21,0xb9,0x41,0x20,0xdc,0x3d,0x56,0xb2 -,0x19,0x19,0x51,0x23,0x59,0xbc,0x1d,0x41,0xba,0x4d,0xa0,0xc8,0x1f,0x68,0x3a,0xe4,0x9c,0x43,0x2d,0xa5,0xc1,0x9f,0x9b,0x29,0x4a,0x5c,0x1f,0xb0,0xb6,0x1c,0x48,0x4f -,0x5d,0x9f,0x23,0x15,0x2f,0x1c,0x39,0xa7,0x1e,0x2a,0xbd,0x3d,0x9a,0x9c,0x2a,0xb9,0xb8,0x45,0x97,0xc0,0x2b,0x9a,0xa4,0x9d,0x92,0x34,0x28,0xbe,0x23,0xb2,0x9e,0x1b -,0x33,0xcb,0x42,0x98,0xba,0x18,0x32,0x1f,0x28,0x99,0x39,0x1f,0xba,0x3c,0x9e,0x94,0x24,0x35,0xbe,0x34,0x9a,0x9e,0x28,0xae,0xad,0xb2,0x8f,0xbd,0x1e,0x57,0x1d,0x4d -,0x9d,0x1c,0x1e,0x4a,0x20,0xae,0xb1,0x18,0x30,0x2b,0x1e,0xa3,0x3c,0x0f,0x70,0x4b,0xa8,0x8d,0x5b,0x2e,0xb6,0x27,0xaa,0x9b,0x1e,0x45,0xbf,0xd2,0x8d,0xa1,0x13,0x27 -,0x1c,0x2d,0x95,0x2e,0x17,0xb9,0x44,0xab,0x99,0x1a,0x20,0x6d,0x30,0x98,0xad,0x0e,0x27,0x4d,0xb3,0x8c,0xa6,0x2d,0xa8,0x35,0xcc,0x96,0x29,0x3c,0xa7,0xc5,0x94,0x9a -,0x1c,0x26,0x26,0x32,0x97,0xda,0x15,0x2a,0x22,0xdc,0x90,0xcc,0x2a,0x49,0x1d,0xaf,0x9f,0x1b,0x1f,0x28,0x2f,0x96,0x9d,0x28,0x30,0x1b,0x2d,0x95,0xc9,0x28,0xda,0x3b -,0x9f,0x95,0x31,0x2d,0x34,0x25,0x9d,0x9f,0x1d,0x23,0x25,0x2a,0x9a,0xad,0x1e,0x33,0x21,0xc7,0x9f,0x1e,0x1e,0xe1,0x39,0x9a,0x98,0x29,0x28,0x26,0xc6,0x8e,0x9d,0x36 -,0x43,0x2d,0xa1,0x91,0xba,0x30,0x2d,0x23,0xad,0x9d,0x40,0x38,0x33,0x2f,0xa2,0xab,0x23,0xaa,0xad,0x9e,0x9a,0x17,0x14,0x25,0x34,0x9f,0x9d,0x37,0x3b,0x30,0x22,0xc8 -,0xc8,0x2b,0x64,0x4d,0xbb,0x96,0x7b,0x28,0x33,0x29,0xb3,0xab,0x4f,0xa6,0xa0,0x2a,0x27,0x2c,0xc3,0x9d,0x4c,0x21,0x2e,0x2e,0x29,0x4a,0x23,0x30,0xa9,0xa9,0x99,0x3a -,0x0c,0x16,0xaf,0x98,0x98,0x0c,0x17,0x86,0x8a,0xa0,0x0a,0x01,0x27,0x87,0x84,0x9a,0x16,0x0a,0xea,0x9d,0xeb,0x49,0x23,0xd8,0x98,0xac,0x1e,0x0c,0x16,0xc9,0x8f,0xa0 -,0x2c,0x37,0x2c,0xac,0x9a,0x39,0xcd,0xbe,0xad,0x99,0xc8,0xad,0xa2,0xd8,0x1a,0x2a,0x2f,0xb7,0x9c,0x4b,0x38,0x43,0x24,0x6f,0xd5,0x37,0x95,0xa9,0x2c,0x20,0x17,0x1b -,0x38,0x0f,0x9e,0x83,0x99,0x60,0x02,0x04,0x2e,0x87,0x87,0x92,0x46,0x10,0x1d,0x2a,0x71,0x9d,0xad,0x99,0x8d,0xeb,0x14,0x14,0x37,0xaa,0x9c,0x24,0x11,0x0d,0x9d,0x85 -,0x9a,0x10,0x01,0x20,0x9b,0x80,0x8e,0x22,0x17,0x2d,0x97,0xa1,0x1a,0x22,0xa9,0x8a,0x95,0x1f,0x06,0x0f,0x24,0x25,0x1c,0x14,0x88,0x82,0x8d,0x11,0x00,0x08,0xaa,0x84 -,0x85,0x9d,0x1e,0x13,0x17,0x31,0xa2,0x8c,0x87,0x88,0x61,0x1e,0x0d,0x01,0x06,0x0f,0x8f,0x80,0x8f,0xb9,0x05,0x00,0x0c,0xad,0x82,0x86,0x8f,0x21,0x17,0x2d,0xab,0x8f -,0x93,0x8d,0x98,0x0e,0x0b,0x02,0x0a,0x13,0x0e,0x88,0x80,0x89,0x16,0x00,0x05,0x3e,0x81,0x8d,0xdc,0xc3,0xa0,0x97,0x9e,0x3b,0x3f,0x13,0x67,0xa3,0x20,0x0a,0x00,0x21 -,0x94,0x82,0x80,0x8f,0x16,0x00,0x0a,0x29,0xa5,0x8d,0x8e,0x96,0x8d,0x90,0x1e,0x06,0x30,0x9d,0xa0,0x24,0x0f,0x1d,0x0d,0x1e,0xce,0x86,0x8a,0x13,0x03,0x02,0x12,0x24 -,0xa5,0x97,0x8b,0x90,0xa1,0x39,0x16,0x2e,0x29,0xb1,0x8d,0x91,0xaf,0x18,0x14,0x9b,0x85,0x80,0x8b,0x17,0x00,0x09,0x16,0x3d,0xa5,0x97,0x9c,0x9d,0x3f,0x06,0x00,0x07 -,0x43,0x95,0xa1,0x4c,0x17,0x0c,0x1c,0x90,0x81,0x90,0x91,0x2e,0x1b,0x19,0x3b,0x96,0x92,0x87,0x81,0xa3,0x09,0x06,0x17,0x9a,0x93,0xa8,0x15,0x19,0x18,0x22,0x37,0x8d -,0x94,0xdc,0x16,0x06,0x0e,0x14,0xb8,0x99,0x8c,0x8e,0x98,0x24,0x15,0x4b,0x99,0x8b,0x96,0x3a,0x10,0x0e,0x26,0xa5,0x81,0x87,0xa5,0x0a,0x00,0x03,0x0f,0x9d,0x9e,0xaf -,0xb3,0xa8,0x15,0x07,0x17,0x8f,0x82,0x86,0xbc,0x18,0x0e,0x2c,0x91,0x83,0x86,0x97,0x1d,0x04,0x0d,0x20,0xb3,0xc0,0x95,0x8e,0x9c,0x13,0x03,0x0c,0xa4,0x83,0x85,0xe4 -,0x09,0x04,0x0c,0x2d,0x8a,0x8d,0x2f,0x0e,0x03,0x0f,0x0f,0x2b,0xba,0x98,0x86,0x89,0x5c,0x03,0x12,0x8c,0x80,0x81,0x9b,0x1d,0x0e,0x22,0x2d,0x8d,0x8e,0xc8,0x26,0x0a -,0x0d,0x0e,0xce,0x97,0x92,0x9b,0x29,0x08,0x03,0x09,0xa5,0x88,0x8c,0xc8,0x1e,0x0f,0x14,0x1e,0x8d,0x8c,0x96,0x34,0x0a,0x23,0x50,0x8f,0x90,0x8e,0x8f,0x98,0xd6,0x0e -,0x0c,0xa7,0x89,0x87,0xd7,0x0c,0x04,0x05,0x13,0x8f,0x8f,0x4a,0x10,0x04,0x13,0x2a,0x92,0x91,0x95,0x8f,0x92,0x6a,0x0a,0x0c,0xa9,0x84,0x81,0x9a,0x1c,0x09,0x0d,0x16 -,0x8f,0x8e,0xa6,0x1f,0x0a,0x1a,0x19,0xc6,0xbf,0xa9,0x98,0xa6,0x10,0x00,0x0b,0x9e,0x83,0x87,0xab,0x12,0x08,0x13,0x4c,0x85,0x84,0x8a,0xaa,0x21,0x26,0x1e,0xc3,0xa0 -,0x8d,0x8b,0x99,0x1d,0x0b,0x0a,0x1b,0x9c,0xa3,0x26,0x0b,0x03,0x04,0x0b,0x92,0x96,0xa3,0x2d,0x16,0x1e,0x1b,0x9a,0x8b,0x88,0x8a,0x95,0x77,0x1d,0x1f,0xa6,0x87,0x89 -,0xb1,0x10,0x10,0x1c,0xd9,0x89,0x8e,0x92,0x1a,0x0a,0x0b,0x17,0xb9,0xc1,0xa1,0xa4,0xcc,0x18,0x07,0x07,0x1b,0x9a,0x95,0x69,0x14,0x05,0x0a,0x48,0x82,0x82,0x83,0x28 -,0x0f,0x1a,0x2a,0xa9,0x98,0x87,0x8d,0x91,0x52,0x12,0x0e,0x14,0xb8,0x96,0x9f,0x30,0x0e,0x0f,0x1b,0x99,0x9b,0x9e,0x28,0x0e,0x0c,0x24,0xa0,0x97,0x8f,0x9a,0x9e,0x3a -,0x0d,0x0a,0x18,0x99,0x8c,0x9c,0x3a,0x0e,0x17,0x2d,0x88,0x85,0x85,0x34,0x09,0x0c,0x15,0xb9,0xbf,0xa8,0xa2,0x9f,0x23,0x07,0x07,0x13,0x9f,0x8d,0x94,0xae,0x18,0x14 -,0x24,0x87,0x84,0x83,0x61,0x13,0x1a,0x22,0x95,0x96,0x8e,0x97,0xc9,0x1c,0x0a,0x08,0x0c,0x2b,0xa1,0x9b,0xb3,0x0e,0x09,0x0c,0x99,0x8e,0x96,0x18,0x08,0x0d,0x1f,0x94 -,0x9b,0x99,0xa0,0x9d,0xae,0x29,0x2b,0xaf,0x8c,0x86,0x94,0xc7,0x1b,0x1e,0x21,0x8e,0x83,0x89,0x4d,0x05,0x05,0x10,0x6c,0x69,0x7e,0x2d,0x1c,0x15,0x0d,0x10,0x19,0xdb -,0x9a,0x97,0x9c,0x16,0x11,0x17,0x8d,0x82,0x84,0x9e,0x07,0x09,0x0e,0xad,0x8b,0x89,0x8f,0xac,0xc8,0x25,0x21,0x42,0xab,0x94,0xa4,0xb4,0x15,0x13,0x0d,0xba,0x8e,0x8e -,0xa6,0x07,0x08,0x08,0x69,0x9c,0xa2,0xb0,0x26,0xd5,0x41,0xc3,0xa8,0xbd,0x9d,0xae,0xa9,0x1f,0x12,0x11,0xb4,0x83,0x83,0x9a,0x05,0x01,0x06,0xc8,0x88,0x8a,0x8f,0xb3 -,0x2e,0x15,0x15,0x33,0x54,0x9b,0xab,0xa7,0xea,0x28,0x1e,0x1e,0x8a,0x8c,0x8e,0x1a,0x02,0x07,0x16,0x92,0x8d,0x8e,0x9d,0xaf,0xba,0x28,0x27,0x33,0xd6,0xac,0xbd,0x2f -,0x0d,0x07,0x07,0xee,0x96,0x9b,0x21,0x04,0x0c,0x2b,0x8a,0x8a,0x90,0xa3,0x4b,0x9f,0x9a,0x8f,0x99,0xae,0x9f,0xa9,0x96,0xc6,0x1d,0x16,0x45,0x8b,0x8f,0xda,0x04,0x01 -,0x0c,0x9e,0x89,0x9d,0x1d,0x0d,0x19,0x20,0x28,0x2c,0x29,0xca,0x44,0xcc,0x21,0x14,0x10,0x20,0x8a,0x8b,0x88,0xd0,0x28,0x30,0x9b,0x86,0x8d,0x94,0x5a,0x3d,0xbe,0xbb -,0xaa,0xe5,0x3b,0x39,0x22,0x1c,0x0b,0x06,0x05,0xb5,0x8e,0x88,0x2f,0x09,0x0d,0x41,0x86,0x8c,0x94,0x31,0x28,0x3a,0xbc,0x9e,0x4c,0x32,0x22,0x23,0x54,0x17,0x11,0x13 -,0x92,0x87,0x86,0xa4,0x0e,0x0d,0x1d,0x8f,0x8e,0x9a,0x1d,0x14,0x25,0xaf,0x96,0xa9,0xcb,0x24,0x2e,0xc5,0x1a,0x1a,0x0b,0xab,0x87,0x82,0x8f,0x13,0x0f,0x19,0x96,0x90 -,0xa7,0x25,0x1b,0x2e,0xc1,0x4a,0x1e,0x16,0x14,0x19,0x3a,0x1e,0x19,0x0a,0x77,0x88,0x83,0x8d,0x0f,0x0d,0x13,0x8e,0x85,0x8d,0xad,0x1c,0xfe,0xa8,0x98,0xa3,0x2a,0x2e -,0x55,0x9f,0xfb,0x20,0x0c,0x30,0x8b,0x84,0x8d,0x10,0x08,0x08,0xc0,0x96,0xa9,0x19,0x05,0x0b,0x15,0xe9,0x3e,0x22,0x3e,0x33,0xa0,0x2b,0x17,0x0e,0xa4,0x80,0x80,0x87 -,0x19,0x0d,0x11,0x90,0x82,0x86,0x9e,0x16,0x1a,0x3b,0xa2,0x49,0x1a,0x1a,0x26,0xaa,0x23,0x0f,0x02,0x13,0x94,0x8a,0x89,0x1a,0x0d,0x0a,0xc9,0x94,0xa0,0x44,0x14,0x1c -,0x39,0xa9,0xaa,0xad,0xb1,0xcd,0xa2,0x69,0x3f,0x1a,0xc2,0x8c,0x8a,0x8c,0x15,0x0f,0x0e,0xa1,0x93,0xab,0x22,0x0a,0x1e,0x46,0xa7,0xa7,0xb9,0xa8,0xa0,0x98,0xb1,0x2f -,0x15,0xd8,0x8d,0x88,0x8d,0x17,0x09,0x06,0x2d,0x9f,0xa4,0x29,0x0a,0x16,0x1d,0xc3,0x43,0x22,0x37,0xe1,0x98,0x3f,0x18,0x0e,0xea,0x8d,0x88,0x8b,0xfd,0x22,0x1a,0x9e -,0x91,0x8c,0xa6,0x28,0xda,0xb6,0x99,0xde,0x37,0xce,0xaa,0x99,0x23,0x0e,0x04,0x26,0x91,0x8b,0x9d,0x0a,0x04,0x05,0x25,0xa9,0x9e,0x3e,0x1b,0x22,0x3e,0xa0,0xac,0xa9 -,0xd0,0xb9,0x98,0xa7,0xc8,0x11,0xbe,0x90,0x89,0x93,0x18,0x0f,0x0f,0xae,0x92,0x8e,0x9e,0x2b,0x2e,0x3f,0xa3,0xa6,0xa3,0xad,0xaa,0xbe,0x27,0x18,0x0a,0xee,0xa3,0x8f -,0xc9,0x09,0x07,0x07,0xc2,0x98,0x9b,0x31,0x0e,0x1e,0x3d,0xa8,0x4a,0x37,0xbd,0x9c,0x91,0xa5,0x2f,0x14,0xa5,0x8d,0x83,0x9c,0x1f,0x0d,0x10,0x9c,0x8e,0x89,0xbc,0x19 -,0x21,0x3b,0x99,0xae,0xb3,0x3b,0x3b,0x3e,0x1e,0x10,0x0d,0xd9,0xa5,0x9c,0x17,0x09,0x06,0x1a,0x9e,0x93,0x8f,0xe4,0x3a,0x24,0x45,0xa0,0xb0,0x98,0xab,0x9e,0xb6,0x38 -,0x18,0x19,0xa2,0x90,0x8b,0x45,0x13,0x09,0x27,0x98,0x89,0x89,0xaf,0x2d,0x1d,0x45,0xbe,0xea,0xaf,0x26,0x2f,0x17,0x1d,0x15,0x2a,0xa9,0x9e,0x96,0x24,0x13,0x08,0x27 -,0x9f,0x8c,0x8e,0xeb,0x1c,0x14,0x3a,0xbe,0xb4,0xb0,0xe7,0xbd,0x28,0x20,0x13,0xb1,0x93,0x8b,0x98,0x17,0x0d,0x0a,0xb8,0x92,0x85,0x8a,0xa9,0x3d,0x36,0x9c,0x9d,0xa7 -,0x31,0x25,0x36,0x26,0x17,0x0a,0x2b,0xb2,0x8b,0x9b,0x1a,0x08,0x03,0x1d,0xab,0x8a,0x97,0xdf,0x1a,0x11,0x31,0x4b,0xa4,0x40,0x2f,0x22,0x29,0x33,0xd0,0x8f,0x8e,0x85 -,0x99,0x3a,0x0d,0x17,0x9b,0x8a,0x83,0x97,0x5c,0x1d,0x28,0xbc,0x5e,0x3d,0x14,0x1b,0x11,0x0e,0x0b,0x1f,0xac,0x96,0x8c,0x69,0x1a,0x03,0x0a,0x25,0x8e,0x84,0x8f,0xac -,0x17,0x2b,0xb8,0xa2,0xc3,0x2c,0x47,0x24,0x28,0x15,0xb9,0x99,0x8b,0x8d,0xb3,0x2b,0x0d,0x2c,0xb7,0x8b,0x8b,0x90,0xa3,0x1c,0x2d,0x31,0xc3,0x25,0x19,0x1b,0x19,0x1d -,0x13,0xbd,0x9e,0x8a,0x93,0x4d,0x0f,0x06,0x12,0x59,0x91,0x99,0xaa,0x24,0x11,0x1c,0x2f,0xa3,0x5e,0x3c,0x1c,0x1c,0x2c,0x78,0x8d,0x8b,0x84,0x93,0xa7,0x1f,0x1b,0x41 -,0x9c,0x8d,0x9e,0xad,0x30,0x33,0x3c,0x2d,0x2d,0x1d,0x1f,0x0f,0x13,0x0e,0x1f,0xa2,0x90,0x8b,0xba,0x2b,0x0a,0x0e,0x26,0x9e,0x8d,0x98,0xa9,0x23,0x2c,0x36,0xb6,0xc5 -,0x29,0x29,0x1e,0x30,0x1f,0xae,0x9f,0x89,0x8a,0xa0,0xc3,0x1e,0x52,0x4b,0xa5,0xae,0xaf,0xc3,0x2d,0x4b,0x2d,0xd8,0x75,0x3f,0x1e,0x15,0x24,0x1b,0xb7,0xa7,0x8e,0xa0 -,0x54,0x16,0x0b,0x1c,0x2b,0xb8,0xbc,0x3a,0x1e,0xe0,0xaf,0xc0,0xb9,0xbf,0x4c,0x2e,0x23,0x28,0x26,0x9a,0x8f,0x87,0x8c,0x9b,0x5e,0x17,0x26,0x38,0x9e,0x9d,0xc5,0x27 -,0x1e,0x3c,0x39,0x4c,0x2c,0x2f,0x25,0x1a,0x1a,0x12,0xc7,0x9b,0x89,0x97,0xc9,0x1f,0x13,0x1e,0x2f,0xa2,0xab,0x4e,0x23,0x25,0xb9,0xc3,0xa4,0xaf,0xcb,0x3b,0x1f,0x21 -,0x29,0x98,0x8d,0x84,0x8f,0x5a,0x0f,0x0f,0x33,0xa9,0x96,0xb3,0x41,0x30,0x63,0xa8,0xa5,0x9c,0xcb,0x38,0x1a,0x17,0x13,0x22,0xb9,0x9d,0x8f,0x2d,0x1a,0x08,0x10,0x39 -,0xa9,0x98,0xec,0x2f,0x1f,0xca,0xa9,0xa5,0xa1,0xb9,0x6c,0x35,0x39,0x22,0xc7,0xa4,0x8d,0x8e,0x9f,0x2f,0x10,0x26,0x47,0xa4,0xa2,0xbb,0x4e,0x26,0x62,0xae,0xb2,0xef -,0x25,0x2c,0x28,0x33,0x1b,0x28,0x4c,0x98,0x96,0xcb,0x1d,0x0d,0x1a,0x2e,0xa1,0x9a,0xc1,0x2e,0x20,0xcf,0xa1,0x9d,0xa5,0x5a,0x3e,0x25,0x2f,0x1d,0x5d,0xb1,0x91,0x92 -,0xac,0x35,0x13,0x3d,0xb5,0x95,0x9b,0xab,0x5e,0x22,0xef,0xca,0xa6,0xc2,0x3d,0x24,0x19,0x1b,0x13,0x2a,0x37,0x9a,0x9a,0xac,0x2a,0x0e,0x19,0x21,0xa2,0x9f,0xad,0x4d -,0x2a,0xb4,0xad,0x99,0x9f,0xdf,0x2e,0x1d,0x37,0x1d,0xec,0xc0,0x99,0x94,0xa7,0xbf,0x1b,0x49,0x31,0x9d,0xa1,0xa8,0xc2,0x3c,0xb0,0xbb,0xa7,0x42,0x28,0x1f,0x1f,0x30 -,0x15,0x1b,0x2c,0xa8,0x96,0xa7,0xb6,0x16,0x1c,0x16,0xc9,0xab,0xa0,0x9f,0xc0,0xae,0x2e,0xc5,0x3f,0xdb,0x54,0x3e,0x55,0x23,0x21,0x77,0xa4,0x8c,0x97,0x9e,0x2f,0x1f -,0x23,0x4a,0x9e,0xab,0xa7,0x2f,0xb9,0x36,0xbd,0xe8,0x3e,0x2a,0x23,0x3d,0x2c,0x20,0x1d,0xdd,0xa9,0x97,0xa1,0xe9,0x19,0x1a,0x29,0xc2,0xa4,0xa7,0xb9,0x33,0x49,0x4e -,0xc5,0x3a,0x43,0x30,0x2c,0x2d,0x24,0xd8,0xbe,0x9a,0x99,0x93,0xaa,0x3e,0x4f,0x63,0xa0,0xab,0x9c,0xac,0xd9,0x2c,0x2b,0x3a,0x31,0x2f,0x22,0x25,0x17,0x19,0x1c,0x3c -,0xa9,0xa4,0xa0,0x43,0x25,0x22,0xd5,0xa4,0x9e,0xa5,0x49,0x3b,0x40,0xa6,0xa3,0xa7,0xbe,0x33,0x2c,0x2d,0x3d,0xbd,0xae,0xc6,0xc2,0xd6,0x2f,0x1d,0x1f,0x39,0xa8,0xa2 -,0xa4,0x69,0x34,0x34,0xbc,0x9d,0xa3,0xab,0x5f,0x31,0x1d,0x35,0xad,0xa7,0xa9,0xbc,0x48,0x20,0x18,0x1a,0x20,0x3b,0x4a,0xc9,0x3e,0x29,0x28,0x2e,0xd3,0xac,0xa3,0xa5 -,0xbb,0x49,0xc3,0xae,0x9d,0x99,0x8f,0x96,0xba,0x24,0x1d,0x2f,0xb8,0xa5,0xaf,0x2a,0x14,0x0f,0x29,0xbb,0xaf,0xba,0x2e,0x1f,0x15,0x2d,0xbc,0xa5,0xa9,0xa2,0xaa,0x3d -,0x27,0x22,0x7c,0xaf,0xaf,0xa1,0xae,0x3f,0x2a,0x3b,0xc8,0xc1,0xc2,0x43,0x46,0x2c,0x41,0xc9,0xb9,0xac,0xab,0xb0,0x4c,0x24,0x25,0xc0,0xa8,0xa4,0xac,0x53,0x2b,0x2c -,0xc2,0xa6,0xa1,0xb0,0x31,0x27,0x1b,0x3e,0xb9,0xa4,0xa4,0xc4,0x4e,0x19,0x17,0x17,0x3c,0xce,0xae,0xac,0x5a,0x24,0x20,0x50,0xa8,0x9e,0xad,0xc9,0x30,0x32,0x67,0x9f -,0x9c,0x9b,0xb9,0xf1,0x44,0x24,0x2c,0x68,0xae,0xa8,0xa5,0xde,0x39,0x28,0x33,0x68,0xcb,0x43,0x35,0x30,0x30,0xe1,0xba,0xdb,0x51,0xe1,0xbb,0xcb,0x2b,0x27,0x35,0xf5 -,0xa9,0x9d,0xaf,0x3a,0x1f,0x2e,0xbf,0xaf,0xe7,0x45,0x38,0x29,0xbd,0xa7,0x9e,0xb6,0x3c,0x3a,0x2e,0x29,0xd5,0xa5,0xa8,0xaf,0xf4,0x49,0x30,0x48,0x6e,0xb1,0xc5,0x2b -,0x27,0x2f,0x44,0xc1,0xa8,0xab,0xc6,0x2b,0x2a,0x29,0x23,0x4f,0xc5,0xab,0xb5,0xb0,0xb4,0x40,0x2b,0x2e,0xac,0xaa,0xbf,0x57,0x5b,0x33,0xca,0xa8,0xa1,0xbb,0x4a,0x42 -,0x37,0x32,0x3a,0xba,0xba,0xab,0xb7,0xbe,0x2f,0x2a,0x32,0xcf,0x5b,0x28,0x29,0x29,0x34,0xd8,0xa5,0xa4,0xae,0x37,0xdd,0x32,0x2f,0x34,0xde,0xa4,0xab,0xa8,0x71,0x2b -,0x1c,0x31,0xad,0xa9,0x4f,0x2c,0x26,0x35,0xc3,0xa2,0x98,0xa9,0x46,0x2d,0x2d,0x53,0xc1,0xab,0xa5,0xaa,0xae,0xb2,0x3e,0x1f,0x2b,0xd3,0x59,0x36,0x33,0x31,0x35,0x40 -,0xae,0xa3,0xac,0x3f,0x46,0x2a,0x21,0x28,0x4c,0xc1,0xc5,0xaa,0xaa,0x42,0x21,0x23,0x41,0xb9,0xb8,0xb5,0xde,0xd2,0xe3,0xa8,0xa5,0xad,0xd6,0xf7,0x43,0x26,0x28,0xee -,0xab,0xa9,0xa6,0xb0,0x37,0x1e,0x24,0x34,0xc4,0x58,0x5a,0x45,0x4f,0x43,0xae,0xa2,0xd3,0x4c,0x33,0x42,0x2d,0x46,0xd8,0xb3,0xba,0xbb,0xb7,0x4e,0x33,0x28,0x43,0x66 -,0xb4,0xc6,0xc2,0x37,0x47,0xb1,0x9f,0x9c,0xb8,0x30,0x18,0x1c,0x29,0xa7,0xa4,0xac,0xc1,0x30,0x29,0x23,0x2f,0x4f,0xc6,0xbb,0xad,0xb3,0x3e,0x4a,0xbd,0x9f,0xa6,0xae -,0x47,0x1f,0x1e,0x29,0xb7,0xba,0xc1,0xc1,0xb9,0xd6,0x2e,0x25,0x2f,0x44,0xb2,0xad,0xb0,0x59,0x53,0xbf,0xb3,0xab,0xba,0x5c,0x28,0x22,0x26,0xbb,0xa7,0xab,0xae,0xbc -,0x45,0x32,0x3a,0x34,0x5b,0xc9,0xae,0xb9,0x43,0x4a,0xe9,0xae,0xd3,0x3f,0x22,0x21,0x21,0x1e,0xea,0xa8,0xa5,0xaf,0xbf,0x3a,0x25,0x27,0x42,0xb7,0xa8,0xa1,0xa9,0x3e -,0x4d,0xd1,0xaf,0xa7,0x42,0x35,0x2c,0x2e,0x36,0x49,0xbf,0xc2,0xa0,0xa7,0xed,0x2f,0x23,0x2b,0x4e,0xbb,0xb9,0xb6,0x38,0x4b,0xb1,0xa2,0xaa,0x2d,0x1d,0x17,0x2e,0xa8 -,0x9d,0xac,0xdd,0xcf,0xb1,0xbe,0x3d,0x21,0x2e,0x7d,0xcd,0xae,0xfb,0xf3,0x3b,0xb3,0xa8,0xa9,0x39,0x1a,0x19,0x1e,0xce,0xa2,0x9f,0xb3,0xac,0xb2,0xca,0x2b,0x1b,0x1f -,0x71,0xa1,0x98,0xac,0x32,0x2c,0xd0,0xa9,0xb8,0x4a,0x2b,0x1f,0x1e,0x3f,0xcb,0xa8,0xa0,0xab,0xa3,0xc4,0x28,0x1a,0x1c,0x64,0xa1,0x99,0xb1,0x45,0x36,0x3f,0xd7,0x4b -,0x39,0x2b,0x21,0x31,0x47,0xb3,0xa6,0xa4,0xa3,0xb8,0x35,0x25,0x2e,0x3c,0xbb,0xa8,0xb5,0x3e,0x3a,0x43,0xab,0xac,0xcd,0x1e,0x16,0x1c,0x36,0xa7,0xa8,0x9f,0xac,0xaa -,0xb6,0x3d,0x2d,0x2b,0x2d,0xdf,0xab,0xa3,0xc9,0x4e,0xd3,0xc7,0xc6,0x59,0x43,0x28,0x29,0x2d,0xd4,0xaa,0x9e,0xa1,0xa5,0xcf,0x2d,0x1f,0x1c,0x27,0x5d,0xa8,0xbd,0xc9 -,0x69,0xd8,0xbe,0x5d,0x36,0x22,0x2c,0x3d,0xa8,0xa4,0xc5,0xc1,0xb3,0xa4,0xb2,0x2c,0x1a,0x1c,0x25,0x4a,0xa8,0xa8,0xbb,0x74,0xeb,0xa8,0xb9,0x69,0x3f,0x2d,0x2d,0xf8 -,0xaa,0xa1,0xa4,0xac,0xb1,0x30,0x22,0x1e,0x24,0x33,0xd2,0xae,0xd3,0xba,0xd8,0xbb,0xca,0x35,0x3c,0x47,0x5e,0x30,0x4f,0x53,0xb7,0xa9,0x9d,0xa5,0xee,0x25,0x19,0x24 -,0x35,0xbc,0xa6,0xaf,0xcb,0xeb,0xdd,0xb7,0x45,0x39,0x2a,0x2d,0x36,0xef,0xbd,0xbb,0xb0,0xb5,0xac,0x50,0x2d,0x26,0x33,0x59,0x57,0xbe,0xae,0xb2,0xb8,0xae,0xba,0x3d -,0x29,0x2e,0x3f,0x3f,0xdf,0xc8,0xb6,0xac,0xaf,0xb4,0x33,0x28,0x28,0x45,0x5e,0x3d,0x39,0x37,0xb5,0x9e,0x98,0xaa,0x2a,0x25,0x27,0x49,0xb0,0xac,0xb3,0x4b,0xe9,0xe0 -,0xa6,0xe7,0x2c,0x28,0x26,0x70,0x37,0xbf,0xba,0xcf,0xca,0xcc,0xec,0x2e,0x2f,0x48,0xc6,0x54,0x6d,0xb1,0xb3,0xae,0xbd,0xc6,0x40,0x36,0x39,0x39,0x2e,0x2f,0xd6,0xa5 -,0xa2,0x9e,0xa3,0xd9,0x27,0x1d,0x3f,0xdf,0xbf,0x3a,0x2d,0x37,0xc1,0x9d,0x9f,0xd8,0x29,0x21,0x37,0x46,0x53,0xbe,0xb8,0xb4,0xb7,0xaf,0x68,0x38,0x22,0x2c,0x37,0x6b -,0xdf,0x5c,0x4e,0x4e,0xb0,0xb4,0xc2,0x3f,0x54,0xcd,0xec,0x4e,0x48,0xb8,0xb2,0xa7,0xae,0x5f,0x2d,0x1e,0x2d,0x32,0x3a,0x3b,0xb1,0xa3,0x9b,0x96,0xa2,0xec,0x28,0x2c -,0x34,0x36,0x1f,0x28,0x30,0xc5,0xaa,0xb3,0x5a,0x20,0x23,0xe4,0xa2,0x9f,0xad,0x51,0x31,0x2b,0x29,0xbb,0xab,0x9e,0x9e,0x5c,0x1c,0x19,0x17,0x23,0x5f,0xd6,0xb8,0x9f -,0x9e,0x94,0x91,0x45,0x3e,0x22,0xa5,0x99,0x8b,0xc6,0x1d,0x35,0x00,0x0b,0x05,0x20,0xaf,0x26,0x98,0x29,0xa8,0x9d,0x42,0xc6,0x98,0x8e,0x97,0x88,0x98,0x2c,0xaa,0x79 -,0x0b,0xa7,0x3b,0x98,0x80,0x8b,0x93,0x96,0x3c,0x17,0x17,0x07,0x0f,0x09,0x09,0x08,0x0c,0x03,0x04,0x03,0x0e,0x19,0x1c,0x38,0x25,0x2f,0x4c,0xbb,0x3a,0x4d,0xac,0x8e -,0x91,0x90,0xaf,0x3d,0xbf,0xd3,0x8c,0x83,0x82,0x80,0x82,0x81,0x95,0x8b,0xc8,0x98,0x82,0x9f,0x9c,0x94,0x89,0x0b,0x07,0x0f,0x00,0xdc,0xa6,0x30,0xdd,0x09,0x04,0x21 -,0x10,0x17,0x10,0x04,0x64,0x0b,0x02,0x01,0x04,0x0b,0x16,0x8e,0x8a,0xad,0x1c,0x1a,0x21,0x8e,0x87,0x83,0x92,0x8a,0x89,0x8d,0x8e,0x93,0x20,0xea,0x88,0x85,0x80,0x83 -,0x88,0x2a,0xb7,0x19,0x8f,0x8d,0xaf,0x18,0x1e,0x3f,0x09,0x02,0x05,0x09,0x1a,0x9e,0x11,0x2a,0x00,0x03,0x00,0x0e,0x24,0x10,0x1e,0x09,0xca,0x1d,0x0f,0x17,0xc1,0x8b -,0x80,0x83,0x87,0x54,0x15,0x32,0xa0,0x88,0x96,0x8c,0x95,0x95,0xa8,0x8c,0xb6,0xaa,0x84,0x80,0x84,0x89,0x29,0x05,0x69,0x4e,0xa5,0xc6,0x9c,0x25,0x00,0x0d,0x0b,0x06 -,0x06,0x1d,0x94,0x70,0x8e,0x0e,0x09,0x0b,0x0d,0x16,0x04,0x0e,0x0c,0xeb,0x3b,0x1f,0x0c,0xb4,0x8d,0x87,0x86,0x87,0xdb,0xb5,0x1e,0x98,0x80,0x85,0x86,0x84,0x8e,0x24 -,0x0c,0x23,0x89,0x81,0x82,0x98,0xa5,0x09,0x24,0x2f,0xa8,0x94,0x98,0xc8,0x1a,0xbc,0x0c,0x0a,0x09,0x03,0x8a,0x8f,0xbd,0x09,0x00,0x03,0x24,0x8f,0xaf,0xaa,0x0c,0x1a -,0x05,0x19,0x0d,0xaf,0x80,0x83,0x90,0x93,0x17,0x00,0x9e,0x8d,0x9c,0x1a,0x02,0x9d,0xaf,0x00,0x08,0x00,0xdb,0x85,0x80,0xb0,0x1f,0x00,0x0c,0x09,0xff,0x88,0x3a,0x22 -,0x0d,0x0d,0x03,0x00,0x1c,0xb0,0x97,0x88,0x25,0xb9,0x0a,0xac,0x88,0x88,0x9d,0x98,0x8f,0xd8,0x8a,0x89,0x9d,0x8f,0x8e,0x80,0x84,0x82,0x8e,0x1d,0x8f,0x17,0x8a,0x8e -,0x80,0x8a,0x50,0xd0,0x1a,0xa9,0xa9,0x88,0x80,0x94,0x1f,0x05,0x04,0x95,0x4f,0xa1,0x98,0x89,0x18,0x02,0x2c,0x00,0x11,0x09,0x8e,0x9e,0x0d,0xb5,0x00,0x03,0x00,0x0b -,0x1c,0x1e,0x9e,0x00,0x02,0x03,0x01,0x2e,0x19,0x8b,0x0d,0xce,0x15,0x1d,0x80,0xa7,0x81,0x8c,0x87,0x90,0xa4,0x96,0x8a,0x80,0x8a,0x5c,0x80,0x87,0x80,0x26,0x1c,0x8c -,0x36,0x80,0x1f,0x55,0x9d,0x8e,0x33,0x00,0x3a,0x15,0x8e,0x93,0x17,0x65,0x00,0x13,0x07,0x0f,0xad,0x1d,0xcd,0x29,0x03,0x03,0x00,0xaa,0xa6,0x8c,0x8f,0x8f,0x88,0x16 -,0xa2,0x09,0x91,0x85,0x83,0x80,0x87,0x9c,0x2c,0x92,0x80,0x80,0x80,0x89,0x9b,0xc6,0x98,0x84,0xbc,0x8b,0x8e,0x16,0x15,0x1d,0x09,0x00,0x04,0x30,0xb9,0x8f,0x09,0x00 -,0x04,0x00,0x05,0x00,0x19,0x16,0x03,0x04,0x03,0x0b,0x00,0x08,0x06,0x24,0x8d,0x08,0x0e,0x00,0x0e,0x1e,0x2b,0x86,0x8b,0x87,0x80,0x98,0x86,0x97,0x90,0x82,0x84,0x80 -,0x84,0x81,0x98,0x89,0x9d,0x90,0x82,0x85,0x8b,0xaf,0x9c,0x91,0x0f,0x32,0x17,0x90,0x8e,0x33,0x45,0x0a,0x26,0x20,0x8a,0x86,0xa9,0x32,0x29,0x03,0x0b,0x04,0x8f,0x3e -,0x9b,0x8a,0x1b,0x24,0x00,0x10,0x00,0x2c,0x3d,0x13,0x10,0x08,0x03,0x06,0x00,0x9c,0x27,0xc5,0xb0,0x0f,0xbc,0x00,0x29,0x0e,0x92,0x91,0x8b,0x8c,0x97,0x98,0xb7,0xbb -,0x86,0x82,0x80,0x88,0x8d,0x99,0x07,0x9e,0x0e,0x9e,0x57,0x2a,0x16,0x08,0x39,0x24,0x0c,0x1a,0x18,0xa1,0x16,0x09,0x17,0x00,0x3c,0x0d,0x9a,0xbc,0xa3,0x1c,0x0a,0x19 -,0x03,0x20,0x98,0x97,0x81,0x96,0x98,0xb2,0x10,0x9b,0x95,0x80,0x83,0x80,0x84,0xb6,0xaf,0xb5,0xb3,0x80,0x85,0x80,0x94,0x89,0xa2,0x25,0xa2,0x3a,0x85,0x93,0x88,0x55 -,0x08,0x05,0x02,0x00,0x0f,0x1e,0xc6,0x0a,0x0f,0x0e,0x00,0x07,0x00,0x0a,0x00,0x0a,0x0b,0x06,0x09,0x00,0x03,0x0f,0x0d,0x29,0x1f,0x14,0x18,0x00,0x12,0x1a,0x8f,0x9c -,0x8c,0x95,0x3c,0x8a,0x44,0x96,0x80,0x84,0x80,0x88,0x85,0x88,0x89,0x80,0x89,0x80,0x88,0x8b,0x8b,0x8c,0x9a,0xb0,0x37,0x97,0xa0,0x91,0x26,0x21,0x1c,0x00,0x0e,0x0b -,0x9a,0x5d,0x96,0x2a,0x07,0x18,0x0b,0x04,0xdc,0xa7,0x8d,0x93,0x19,0xc5,0x0a,0x29,0x24,0x9d,0x31,0x2e,0x1b,0x14,0x29,0x13,0x14,0x12,0x12,0xa1,0x8b,0xa2,0x9c,0x03 -,0x0e,0x00,0xbd,0x99,0x95,0x88,0xc3,0x21,0x14,0x0a,0x6a,0xe6,0xb3,0x87,0x77,0x91,0x0b,0xcd,0x19,0xfc,0x9e,0xd3,0x18,0x0b,0x20,0x13,0x3a,0x5e,0x48,0x9e,0x97,0x39 -,0x9e,0x18,0x47,0x2e,0xa4,0x95,0xa3,0x8f,0xa1,0x9a,0x9b,0x0d,0x36,0x9b,0xa8,0x8a,0x96,0x91,0x39,0x3f,0x6b,0xc3,0x86,0x82,0x8b,0x52,0x1e,0xac,0x9d,0x87,0x80,0x86 -,0x80,0x9b,0x86,0x92,0x24,0xa2,0x37,0x8c,0x87,0x98,0x6e,0x1c,0x0f,0x09,0x07,0x0d,0x04,0x3f,0x28,0x19,0x0f,0x00,0x03,0x01,0x25,0x08,0x0c,0x0a,0x02,0x02,0x02,0x01 -,0x0d,0x16,0x27,0x16,0x0f,0x0f,0x06,0x10,0x0f,0x96,0xc1,0x91,0x8e,0x98,0x86,0x8e,0x8e,0x90,0x9e,0x8d,0x80,0x84,0x80,0x94,0x89,0x93,0x93,0x88,0x83,0x96,0xa6,0x9f -,0x1e,0x1f,0x41,0x36,0x2c,0x96,0x0e,0x29,0x14,0x1d,0x06,0x3b,0xaf,0x3f,0x98,0xdf,0x8f,0x8c,0x91,0xbe,0x92,0x3e,0x8c,0x96,0x83,0x9d,0x5a,0x1f,0x1f,0xb7,0x2e,0xb5 -,0x10,0x11,0x16,0x14,0x0a,0x1d,0x14,0x92,0x0e,0x14,0x07,0x00,0x07,0x07,0x9f,0x2c,0x15,0x13,0x0d,0x16,0xa6,0x18,0xab,0x28,0xa0,0x36,0x98,0xa4,0x22,0xcc,0x21,0x9e -,0x4a,0x92,0x9f,0x36,0xd7,0x1f,0x06,0x38,0x33,0x84,0x86,0x82,0xab,0x08,0x14,0x10,0x8d,0x9a,0x87,0x96,0xab,0xc1,0x26,0x18,0xa1,0x27,0x98,0x93,0x8f,0x9b,0x9f,0x97 -,0x1b,0x8e,0x9e,0x8e,0xa5,0x8c,0x97,0xab,0x95,0x93,0x94,0x80,0x85,0x80,0x8f,0xb6,0x28,0x0a,0x9b,0x9b,0x9a,0xd5,0x39,0x17,0x11,0x0c,0x22,0xdb,0xa2,0x09,0x1c,0x06 -,0x0a,0x0f,0x09,0xaf,0x20,0x09,0x00,0x05,0x01,0x02,0x08,0x12,0x15,0xc6,0x0a,0xcf,0x0c,0x0d,0x07,0x0a,0x24,0xc2,0x95,0xd0,0xc5,0x0b,0x0f,0x9b,0x9f,0x88,0x84,0x9f -,0x83,0x14,0xca,0x9c,0x8c,0x83,0x83,0x89,0xab,0x96,0x10,0x20,0x92,0xba,0x85,0x8d,0x9c,0x8c,0xa7,0xb0,0x74,0x97,0x17,0x92,0x90,0x9d,0x87,0x18,0xdc,0x97,0x9e,0x89 -,0x8e,0xbd,0x19,0x21,0x0a,0x18,0xab,0x23,0x99,0x3f,0x13,0x08,0x04,0x11,0x63,0x9a,0x17,0x1d,0x08,0x09,0xbf,0x1a,0x94,0xb7,0x0b,0x0b,0x06,0x02,0x01,0x1b,0x16,0x8d -,0xb3,0x18,0x2d,0x00,0x16,0x15,0x27,0x4a,0xad,0xba,0xac,0x9c,0x09,0xae,0xca,0xaa,0x86,0xa0,0x9e,0x29,0xae,0x3d,0x89,0x90,0x9c,0x87,0x3d,0x67,0x15,0x38,0xbf,0x8c -,0x93,0x98,0x95,0x0c,0x94,0x6c,0x9d,0x8d,0x17,0x22,0x1f,0x24,0x1f,0x83,0x8b,0x81,0x87,0xd1,0x9e,0x0f,0x30,0x96,0x84,0x88,0x82,0x8c,0xa4,0x92,0x1a,0x97,0x87,0x85 -,0x84,0x99,0x18,0x03,0x14,0x0a,0x97,0x96,0xe2,0x9d,0x15,0x04,0x01,0x0d,0x07,0x96,0x48,0x13,0x1d,0x00,0x04,0x00,0x03,0x05,0x0e,0x09,0x0c,0x07,0x00,0x1d,0x0d,0xb1 -,0xc8,0x1e,0x1f,0x0b,0x12,0x0c,0x91,0xa5,0x8d,0x85,0xaf,0x36,0xac,0x99,0x8c,0x82,0x3f,0x8c,0xb7,0x96,0x80,0x89,0x84,0x8f,0xaa,0x65,0x7d,0x09,0x9e,0x8d,0x88,0x80 -,0x8d,0x96,0x3f,0xa8,0xba,0x85,0xa0,0xbe,0x95,0x32,0x3c,0x42,0x9a,0x92,0x80,0xb5,0x96,0x10,0x02,0x16,0x0a,0xae,0x6b,0xbc,0x0d,0x1a,0x00,0x16,0x7b,0x33,0x96,0x0c -,0x0d,0x00,0x17,0x08,0xd8,0x20,0x08,0xdb,0x06,0x06,0x04,0x1e,0xde,0x80,0xaa,0x38,0x10,0x00,0x4d,0x3e,0x8e,0x98,0x9b,0x19,0x1d,0x07,0x17,0x8f,0x8c,0x82,0x92,0x2e -,0x02,0x23,0x2b,0x8a,0x82,0x91,0x91,0x3c,0x06,0x1c,0x97,0x9c,0x80,0x9f,0x94,0xab,0x5a,0xa2,0x9d,0xa5,0x58,0x90,0x1f,0x1f,0x04,0x17,0x9c,0x81,0x85,0x88,0xa3,0x05 -,0x9c,0x3f,0x8f,0x96,0xc4,0x4b,0x9f,0x16,0x3b,0x89,0x96,0x80,0xa2,0x54,0x05,0x0e,0x08,0x9c,0x94,0xae,0x99,0x0b,0x0a,0x06,0xe7,0xcd,0x86,0x1f,0x1c,0x0a,0x02,0x14 -,0x0f,0x24,0x37,0xa4,0x16,0x17,0x00,0x0d,0x17,0x8b,0x8f,0xa1,0x15,0x02,0xb4,0x23,0x86,0x9c,0xa8,0xcc,0xb4,0x0b,0xf6,0x9c,0xa3,0x80,0xa9,0x99,0x0f,0x1d,0x1d,0x8d -,0x99,0x96,0x9d,0x13,0x10,0x0c,0x9b,0x95,0x81,0x5a,0x9e,0x16,0x1a,0x9d,0xce,0x9b,0x9b,0x93,0xc4,0x2a,0x00,0x3e,0x8f,0x80,0x83,0x8a,0x13,0x05,0x2b,0x1f,0x86,0xb9 -,0xa6,0xad,0x2e,0x07,0x1c,0x1b,0x9d,0x89,0x37,0x3c,0x00,0x06,0x00,0x3f,0x23,0x99,0xa1,0x21,0x0e,0x05,0x1d,0x33,0x8b,0x25,0x9b,0x0b,0x23,0xb4,0x4d,0x99,0xaf,0xa8 -,0xc0,0x20,0x01,0xcb,0x3f,0x88,0xa6,0x27,0x07,0x09,0x2d,0x26,0x8a,0x12,0x1a,0x0f,0x0c,0x08,0xbd,0x9f,0x87,0x83,0x95,0xa3,0x06,0x19,0x34,0x88,0x8a,0x81,0x90,0xb5 -,0x18,0x38,0x86,0x83,0x80,0x8a,0x8b,0x08,0x21,0x1d,0xb9,0x8b,0x89,0x87,0x8c,0x1f,0x04,0x31,0x4c,0x80,0x8c,0x8e,0x0d,0x0f,0x0b,0x12,0xaa,0x1d,0x96,0xa8,0x20,0x08 -,0x1c,0x0e,0x8e,0x9b,0x9c,0xd7,0x0c,0x17,0x11,0xd7,0x10,0xbe,0x16,0x19,0x06,0x0e,0x15,0xaf,0xad,0x19,0x3b,0x03,0x9d,0xb4,0x8c,0x90,0x99,0xa0,0xb7,0x14,0x13,0x96 -,0xa5,0x82,0xa1,0x5f,0x01,0x0b,0x08,0x2a,0x49,0x0a,0x16,0x03,0x03,0x00,0x19,0x1e,0x88,0x9e,0x42,0x0f,0x00,0x08,0x1a,0x8f,0x91,0x80,0x94,0x9f,0x0f,0xbd,0x89,0x82 -,0x81,0x85,0x8e,0x1c,0x94,0xa2,0x86,0x85,0x81,0x83,0x83,0x2a,0x17,0xcc,0xae,0x80,0x91,0x87,0x1f,0xab,0x25,0xd3,0x57,0x14,0xb7,0x28,0x13,0x04,0x14,0x09,0x99,0x1c -,0x28,0x0b,0x02,0x0d,0x08,0x1b,0x03,0x11,0x0a,0x1f,0x1d,0x8f,0x8a,0x84,0x88,0x8b,0x8d,0xbe,0x87,0x9a,0x83,0x8e,0x8f,0x7b,0x0a,0x00,0x08,0x1e,0x33,0xc6,0x01,0x05 -,0x00,0x09,0x09,0xbc,0x72,0x2e,0xac,0x12,0x0b,0x02,0xc3,0x8e,0x80,0x88,0x8a,0x0f,0x0a,0x29,0xaf,0x86,0x9a,0x91,0x45,0x31,0x05,0x2f,0xaf,0x89,0x82,0x85,0x9a,0x0d -,0x27,0x2a,0x82,0x88,0x80,0x8c,0xa1,0x0e,0x39,0x94,0x8f,0x83,0xa2,0x8c,0x2c,0xaf,0x36,0x54,0x20,0xbe,0x9f,0x33,0x0f,0x00,0x11,0x0f,0x97,0x2a,0x1e,0x04,0x04,0x0e -,0x1c,0xa0,0x34,0x9c,0x9a,0x92,0xc3,0x83,0x88,0x80,0x89,0x8f,0xad,0x0c,0x43,0xbe,0x87,0x46,0x28,0x08,0x04,0x00,0x08,0x12,0x42,0xc8,0x00,0x0a,0x00,0x09,0x09,0x42 -,0x38,0x1f,0x17,0x07,0x03,0x00,0x2c,0x99,0x80,0x8b,0x8d,0x0d,0x0f,0x2e,0x9b,0x80,0x8b,0x82,0x95,0xb0,0x0e,0xb4,0x97,0x82,0x82,0x83,0x99,0x0c,0x1e,0x17,0x8d,0x93 -,0x83,0x8f,0xa0,0x0d,0x10,0x43,0x96,0x84,0x9a,0x90,0x05,0x1e,0x0c,0x4a,0x2d,0x1a,0x4f,0x1e,0x0b,0x04,0x2f,0xc7,0x81,0x92,0x89,0x2b,0xb7,0x90,0x87,0x80,0x89,0x81 -,0x92,0x98,0x1b,0xa1,0x9b,0x89,0xc5,0x09,0x04,0x00,0x02,0x08,0x56,0x13,0x13,0x00,0x04,0x00,0x0c,0x32,0x93,0x8b,0x3a,0x1c,0x01,0x1a,0x22,0x8a,0x8f,0x8f,0xb3,0x12 -,0x02,0x06,0x34,0x99,0x80,0x94,0x95,0x06,0x08,0x05,0x3f,0x9c,0x8f,0x84,0x95,0xac,0x08,0xaf,0x98,0x80,0x85,0x80,0xaa,0x2a,0x40,0xc3,0x8b,0x9d,0x85,0x91,0x94,0x0a -,0x1a,0x1a,0xa4,0xa3,0x25,0x25,0x04,0x14,0x09,0x30,0x17,0xdb,0x46,0xc0,0x0f,0x1e,0x90,0x89,0x80,0x86,0x82,0xbb,0x8e,0x95,0x85,0x85,0x87,0x97,0x1b,0x08,0x01,0x1e -,0x36,0x86,0x32,0x12,0x01,0x01,0x00,0x0b,0x39,0x1b,0x38,0x07,0x08,0x00,0x0a,0x0b,0x8e,0x8f,0x9c,0x1e,0x00,0x08,0x04,0x9b,0x9e,0x82,0x8b,0x8f,0x11,0x26,0x9d,0x8a -,0x80,0x86,0x87,0x1f,0xa7,0x1f,0x8e,0x9e,0x8d,0x94,0x94,0xb8,0x1e,0xa6,0x2e,0x8e,0x1b,0xab,0x0e,0x3b,0x22,0x57,0x9f,0xb6,0xa1,0x15,0x17,0x00,0x36,0x1c,0x89,0xae -,0x52,0x14,0x0d,0xb7,0xa3,0x80,0x8a,0x82,0xad,0xa8,0x1a,0x90,0x82,0x80,0x81,0x82,0x9c,0x05,0x0f,0x06,0x44,0x1b,0x33,0x0e,0x04,0x00,0x02,0x06,0x23,0x8c,0x36,0x3a -,0x00,0x06,0x00,0x14,0x2c,0x9c,0x8d,0xa8,0x2d,0x00,0x1e,0x16,0x85,0x91,0x8e,0x26,0x0b,0x1d,0x19,0x91,0xc6,0x8e,0x4d,0xaa,0x0e,0xb6,0xa9,0x8b,0x89,0x9b,0x97,0x1b -,0x8f,0xbb,0x83,0x8d,0x85,0x95,0x9c,0x35,0x25,0x9b,0x9d,0x81,0x9d,0xa2,0x04,0x0a,0x07,0x38,0x9c,0xb2,0x56,0x02,0x04,0x00,0x0f,0x28,0x81,0x89,0x87,0x6d,0x17,0x9a -,0x92,0x80,0x85,0x80,0x8a,0x88,0x1c,0xdd,0x9f,0x8e,0x83,0xa6,0xe3,0x00,0x06,0x00,0x0c,0x07,0x15,0x12,0x09,0x08,0x00,0x16,0x0f,0x90,0x2d,0x25,0x07,0x04,0x0b,0x10 -,0x9f,0x40,0x9d,0x18,0x1e,0x07,0x3c,0x95,0x87,0x84,0xa1,0xbe,0x0a,0xac,0xa4,0x84,0x87,0x85,0x8f,0xa1,0x2d,0x0f,0xa6,0x9b,0x80,0x8a,0x8e,0x0e,0x08,0x11,0x49,0x89 -,0x94,0x8e,0x1e,0x10,0x00,0x09,0x1c,0x91,0x85,0xa2,0xc3,0x04,0x10,0x0b,0xb7,0xa6,0x95,0x97,0xbc,0x3c,0x0e,0x90,0x8d,0x80,0x84,0x80,0x9b,0xd1,0xb0,0x2e,0x97,0x29 -,0xa6,0x18,0x16,0x03,0x08,0x10,0x1e,0x9e,0x0c,0x13,0x00,0x09,0x06,0x2f,0x56,0x1f,0x27,0x09,0x18,0x01,0xd1,0x51,0x8b,0x9d,0x1c,0x14,0x01,0x21,0x21,0x81,0x91,0x8d -,0x41,0x1c,0x17,0x0e,0x8f,0x8f,0x80,0x92,0x8d,0x1c,0x16,0x27,0xac,0x80,0x85,0x81,0x2f,0x26,0x06,0x2a,0x88,0x84,0x80,0x8f,0x9b,0x0c,0x1d,0x0e,0xb9,0xab,0x32,0x2b -,0x06,0x0e,0x00,0x0e,0x0e,0x96,0x93,0xa3,0xaa,0x10,0xcc,0x57,0x86,0x8b,0x83,0x8e,0x8b,0x89,0x94,0x80,0x8f,0x82,0xab,0x3a,0x0f,0x08,0x0d,0x0b,0x2a,0x06,0x0b,0x00 -,0x06,0x04,0x0c,0x1b,0x14,0x3f,0x08,0x1a,0x07,0x13,0x1e,0x49,0x99,0xb6,0x9f,0x15,0x2c,0x0c,0xc0,0x9a,0x8c,0x85,0x98,0x99,0x24,0xa0,0xac,0x8c,0x94,0x9e,0x99,0x28 -,0xe1,0x17,0x31,0xa8,0x8c,0x87,0x8a,0x93,0x48,0xbe,0x39,0xab,0x9e,0x99,0x9b,0xc2,0x37,0x13,0x17,0x1f,0xba,0x96,0xa0,0xc1,0x0f,0x08,0x0a,0x1a,0x2a,0xba,0xae,0xa5 -,0x8f,0xa0,0x9f,0x9f,0x8e,0x84,0x81,0x80,0x88,0x9c,0x2c,0xc1,0xa4,0xbf,0xc9,0x11,0x0e,0x07,0x02,0x03,0x02,0x0b,0x14,0x32,0x14,0x0d,0x07,0x09,0x1f,0x57,0xde,0x45 -,0x14,0x0e,0x0d,0x12,0x24,0xbc,0x9e,0x9f,0x92,0x2c,0x79,0x23,0xb9,0x9a,0x90,0x95,0xc7,0x2a,0x19,0x57,0x99,0x8c,0x86,0x8d,0x9a,0x9e,0x3d,0xb3,0xae,0x92,0x92,0x8c -,0xac,0xbf,0x29,0x19,0x3c,0xc6,0x97,0x93,0xa7,0x32,0x1c,0x19,0x30,0xad,0xab,0x9d,0x9d,0x44,0x20,0x0c,0x07,0x10,0x23,0xc4,0x9b,0x55,0xbd,0x1f,0x20,0x1f,0xcc,0x3b -,0x9d,0xa5,0xb7,0x4a,0x0e,0x0b,0x0f,0xb8,0x94,0x82,0x94,0xae,0x0e,0x09,0x0a,0xd4,0xbe,0x94,0x9f,0x36,0x1f,0x08,0x09,0x0f,0xb0,0x98,0x8b,0xa8,0x3a,0x12,0x0f,0x19 -,0x9d,0x96,0x88,0x8c,0x9f,0xd3,0x1f,0x12,0x73,0x96,0x8d,0x82,0x91,0x98,0xc4,0xbb,0xc8,0x9a,0x9f,0x8f,0x99,0xa7,0x43,0x1d,0x0b,0x0e,0x2e,0xa2,0x8b,0x9d,0xa5,0x1c -,0x1a,0x10,0x79,0x42,0xa4,0x9b,0xab,0xb5,0x1e,0x07,0x04,0x0c,0x1d,0x9d,0xab,0xb7,0x0e,0x11,0x06,0x1a,0x30,0x9c,0x8c,0x91,0x9f,0x20,0x0c,0x05,0x36,0xac,0x83,0x8e -,0x99,0x12,0x08,0x05,0x0f,0x41,0xa6,0x8b,0xaa,0xa0,0x18,0x0c,0x04,0x1a,0xef,0x8a,0x89,0x8f,0xaa,0x1f,0x28,0x25,0x97,0xa0,0x8a,0xac,0xac,0x4b,0x22,0x1e,0xbb,0x94 -,0x8c,0x82,0x86,0x80,0x8d,0x8e,0xb5,0xa1,0xb2,0x91,0x8b,0x89,0x8b,0xb7,0x17,0x0a,0x15,0x1e,0x9e,0xce,0xa1,0x1d,0x0d,0x0a,0x09,0x0c,0x1b,0xc4,0xc7,0xbc,0x0a,0x03 -,0x00,0x04,0x07,0xdf,0x9f,0x90,0xbd,0x0c,0x0d,0x2e,0x8e,0x06,0xe3,0x80,0x8c,0x93,0x0d,0x02,0x07,0x0a,0x25,0xad,0x9d,0x04,0x03,0x04,0x00,0x04,0x03,0x31,0x0a,0x05 -,0x03,0x02,0x00,0x17,0xce,0xae,0x9a,0xad,0x9e,0xa5,0x99,0xaf,0x9d,0xa6,0x87,0x80,0x80,0x80,0x84,0x80,0x80,0x82,0x8f,0x85,0x80,0x80,0x80,0x80,0x8c,0x92,0x87,0x80 -,0x80,0x80,0x81,0x8a,0xa1,0xbb,0x9c,0x9c,0x87,0x85,0x8f,0x26,0x09,0x02,0x00,0x0b,0x24,0x0f,0x00,0x03,0x00,0x00,0x00,0x04,0x01,0x03,0x01,0x02,0x00,0x00,0x01,0x01 -,0x05,0x0b,0x07,0x00,0x02,0x02,0x03,0x01,0x07,0x05,0x0e,0x19,0x18,0x0c,0x07,0x09,0x07,0x12,0xc0,0x95,0xc4,0xad,0xad,0xd1,0xac,0x8b,0x80,0x81,0x80,0x81,0x84,0x86 -,0x81,0x82,0x80,0x80,0x80,0x82,0x83,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x83,0x81,0x83,0x89,0x86,0x80,0x83,0x82,0x84,0x88,0xa5,0x90,0x8a,0x8c,0x89,0x8d -,0x9d,0x0f,0x09,0x04,0x0a,0x1d,0x94,0xb0,0x0a,0x03,0x00,0x00,0x01,0x0c,0x1b,0x18,0x0a,0x05,0x00,0x00,0x00,0x02,0x04,0x0a,0x07,0x00,0x00,0x01,0x00,0x00,0x01,0x00 -,0x01,0x02,0x08,0x03,0x03,0x01,0x03,0x04,0x0c,0x15,0x0c,0x0e,0x0b,0x02,0x02,0x08,0x28,0x8e,0x87,0x89,0x40,0x16,0x11,0x22,0x7b,0x92,0x8b,0x9e,0xbb,0xc1,0xaf,0xa0 -,0x85,0x83,0x82,0x85,0x88,0x9a,0x94,0x86,0x81,0x81,0x83,0x82,0x89,0x8b,0x85,0x85,0x85,0x82,0x81,0x80,0x81,0x80,0x85,0x88,0x8c,0x8b,0x8c,0x84,0x81,0x81,0x87,0x94 -,0xa2,0xc8,0x9a,0x8f,0x88,0x8f,0x95,0x1d,0x0b,0x0c,0x35,0x9b,0x8c,0x8b,0xb4,0x13,0x06,0x0a,0x0d,0xc0,0x9b,0x91,0xa4,0x99,0xb6,0xd2,0xc5,0xaa,0x98,0x96,0x8a,0x95 -,0x97,0xaa,0xa5,0xcd,0x9f,0x9b,0x8e,0x8b,0x84,0x87,0x97,0xa7,0xa7,0x8e,0x8b,0x87,0x8f,0xad,0x1e,0x15,0x12,0x7e,0x94,0x8d,0x9e,0x41,0x0d,0x00,0x01,0x02,0x07,0x0a -,0x04,0x01,0x00,0x00,0x00,0x00,0x06,0x08,0x0c,0x03,0x01,0x00,0x00,0x00,0x01,0x02,0x01,0x01,0x01,0x03,0x01,0x01,0x00,0x01,0x01,0x08,0x06,0x08,0x04,0x01,0x01,0x00 -,0x02,0x0a,0x15,0x24,0x1a,0x07,0x02,0x00,0x0b,0x2f,0x92,0xaa,0x3b,0x11,0x0f,0x1c,0xa2,0x83,0x82,0x80,0x83,0x84,0x8e,0x8e,0x86,0x80,0x80,0x80,0x80,0x80,0x82,0x80 -,0x80,0x80,0x80,0x80,0x81,0x82,0x82,0x82,0x87,0x87,0x82,0x81,0x80,0x81,0x81,0x8a,0x88,0x8c,0x86,0x86,0x81,0x81,0x82,0x89,0xa6,0x2f,0xc6,0x85,0x81,0x80,0x81,0x80 -,0x88,0x87,0x8a,0x84,0x83,0x83,0x8b,0xa6,0x69,0x1d,0x17,0x19,0x30,0x1f,0x1c,0x07,0x03,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06 -,0x05,0x07,0x00,0x00,0x00,0x00,0x01,0x06,0x04,0x03,0x01,0x01,0x00,0x01,0x0b,0x30,0xa8,0x48,0x14,0x03,0x02,0x0a,0xbd,0x91,0x87,0x8f,0x98,0xb4,0xaf,0x4d,0xa1,0x8b -,0x85,0x82,0x86,0x86,0x97,0x8d,0x8d,0x84,0x85,0x84,0x8e,0x8f,0x97,0x96,0xb0,0xbf,0x97,0x8e,0x86,0x8a,0x8c,0xbf,0x70,0xbb,0x93,0x89,0x85,0x8a,0x8f,0xb7,0x23,0x0d -,0x19,0xa6,0x8b,0x8a,0x8f,0xb0,0x12,0x10,0x1b,0xad,0x9a,0x8f,0xb0,0x38,0x0c,0x0a,0x03,0x10,0x2c,0xa7,0xaa,0x45,0x35,0x0c,0x0f,0x0c,0x1b,0x23,0x3f,0x1d,0x23,0x11 -,0x13,0x09,0x13,0x23,0xbc,0x98,0x99,0x94,0xd8,0xfe,0x49,0x9f,0x95,0x8c,0x9a,0x9d,0x2b,0x21,0x14,0x2d,0xa5,0x8d,0x8a,0x9b,0xd5,0x0e,0x0e,0x14,0xac,0x99,0x8f,0xa3 -,0xac,0x2d,0x3a,0x2d,0xaa,0x8f,0x87,0x82,0x85,0x82,0x8a,0x87,0x88,0x81,0x82,0x80,0x81,0x80,0x85,0x89,0x9f,0xae,0x9b,0x8f,0x87,0x8e,0x9a,0x19,0x08,0x05,0x06,0x09 -,0x13,0x0f,0x17,0x08,0x05,0x00,0x01,0x06,0x0e,0x1c,0x0d,0x0b,0x02,0x03,0x06,0x17,0x15,0x1f,0x0e,0x0f,0x09,0x0a,0x07,0x09,0x1c,0x20,0xa1,0xd3,0x9f,0x30,0x2d,0x2e -,0xcb,0x9f,0x8f,0x8d,0x88,0x8c,0x95,0xbd,0x28,0x9f,0x9a,0x83,0x86,0x82,0x8e,0x99,0x9f,0x97,0x8c,0x88,0x87,0x89,0x8f,0xbb,0x29,0x0f,0x30,0x3e,0x90,0x96,0x98,0xcd -,0x1a,0x1c,0x22,0x4f,0x5e,0x4e,0x3f,0x2f,0x28,0x19,0x09,0x10,0x0f,0xd2,0x43,0xbf,0x29,0x0e,0x0d,0x12,0x2f,0x4d,0xce,0x2e,0x1e,0x10,0x0d,0x04,0x14,0x20,0x9a,0x98 -,0xaa,0x27,0x05,0x06,0x09,0x1e,0x5d,0xa4,0xba,0x49,0x1e,0x15,0x0b,0x19,0xea,0x96,0x8b,0x8f,0x91,0xc3,0xb5,0xad,0x93,0x8d,0x8a,0x8a,0x89,0x8f,0xa5,0x17,0x13,0x1d -,0xbc,0x8e,0x97,0x97,0x1e,0x14,0x0d,0x1a,0x2c,0xb4,0xad,0xb4,0x39,0x1c,0x0e,0x0c,0x29,0xbd,0x8a,0x92,0x8c,0xa5,0xa8,0x98,0x8c,0x81,0x84,0x80,0x86,0x89,0x92,0xa1 -,0x53,0x9a,0x95,0x86,0x8c,0x8f,0xdb,0x0e,0x0e,0x0c,0x1e,0x22,0x3c,0x1a,0x0e,0x03,0x04,0x00,0x05,0x0a,0x2d,0x6b,0x1e,0x13,0x01,0x03,0x02,0x0c,0x1a,0x46,0x24,0x1c -,0x0a,0x08,0x00,0x04,0x0f,0x43,0x93,0x9e,0x9b,0x24,0x29,0x2a,0xb7,0x99,0x8f,0x8c,0x8b,0x8b,0x90,0xa3,0xfd,0xa3,0x91,0x86,0x87,0x85,0x8e,0x99,0x9e,0x96,0x8a,0x87 -,0x87,0x8b,0x99,0xa5,0x43,0x24,0xac,0x99,0x88,0x91,0x93,0x37,0x13,0x17,0x24,0x9f,0x95,0x93,0xb0,0x32,0x13,0x10,0x06,0x17,0x2e,0x99,0xa1,0x3d,0x1c,0x05,0x09,0x0b -,0x3f,0xba,0xa1,0x6a,0x1f,0x0c,0x08,0x02,0x05,0x17,0xd5,0x9a,0xb0,0xea,0x0c,0x09,0x08,0x16,0x45,0xb1,0xc2,0x3d,0x27,0x19,0x0d,0x0c,0x25,0xab,0x8b,0x8f,0x8c,0xb4 -,0xbe,0xdd,0x9a,0x8a,0x89,0x87,0x8e,0x94,0xae,0xcb,0x1a,0xc1,0xbe,0x92,0xa1,0x9e,0x57,0x16,0x20,0x1f,0x9f,0xa1,0x99,0x62,0x3c,0x19,0x1a,0x0f,0x3c,0x98,0x8a,0x8b -,0x9a,0xa0,0x1e,0xaa,0xa0,0x83,0x81,0x83,0x85,0x8f,0x9e,0xaa,0xb7,0xa1,0x8b,0x85,0x85,0x94,0x9d,0x18,0x17,0x12,0x2f,0xc0,0xb8,0xc2,0x1c,0x0d,0x04,0x04,0x00,0x0a -,0x0b,0x19,0x14,0x10,0x0a,0x02,0x04,0x06,0x13,0x18,0x1e,0x0e,0x0b,0x04,0x06,0x01,0x0c,0x1b,0xb4,0x99,0x9e,0x9f,0x31,0xb3,0xb4,0x88,0x8a,0x87,0x8d,0x9b,0xa2,0xaa -,0xc2,0xa0,0x8f,0x8e,0x8a,0x95,0x97,0xcb,0x9c,0x9b,0x8a,0x8a,0x8a,0x8d,0x9f,0xbc,0x3c,0x2f,0xa5,0x8b,0x89,0x87,0x9a,0xa5,0x29,0x52,0xc3,0x97,0x91,0x96,0x9e,0x30 -,0x18,0x0d,0x0b,0x09,0x2e,0x39,0x9d,0x2e,0x1c,0x0b,0x07,0x09,0x1a,0xbd,0xb2,0xa9,0x1a,0x15,0x08,0x0b,0x07,0x2a,0x3c,0x9b,0xad,0x6b,0x1f,0x0b,0x10,0x11,0xeb,0x78 -,0xa3,0x24,0x18,0x09,0x0b,0x05,0x19,0x27,0xab,0xba,0x4a,0xb4,0x36,0x9a,0x9d,0x87,0x8f,0x8b,0x9d,0x9c,0xa0,0x9f,0xbd,0xa0,0x98,0x91,0x8e,0xb4,0xb7,0x17,0xe0,0x4b -,0x98,0xa9,0xac,0x29,0x19,0x15,0x11,0x15,0x32,0xac,0xa8,0x9d,0x35,0xb1,0x24,0xb4,0xab,0x8b,0x87,0x85,0x86,0x90,0x97,0x9f,0x95,0x8b,0x85,0x85,0x84,0x90,0x8f,0xc7 -,0x4f,0x38,0xae,0xa6,0x9e,0xba,0x19,0x0b,0x03,0x02,0x00,0x08,0x0b,0x1b,0x0b,0x0a,0x04,0x03,0x04,0x0b,0x10,0x16,0x12,0x09,0x0c,0x08,0x0b,0x0b,0x19,0x1d,0xb6,0x26 -,0xc4,0x3d,0x39,0xc9,0xa2,0x8f,0x8c,0x8a,0x98,0x9a,0xb5,0xad,0x7d,0x9a,0xa1,0x8d,0xa2,0x95,0x96,0x9a,0x8d,0x91,0x8c,0x92,0x8a,0x9e,0x99,0xb6,0xc7,0xcf,0x91,0x8a -,0x82,0x8d,0x97,0xac,0x22,0xc6,0xc3,0x98,0x9a,0x95,0x5d,0x29,0x0f,0x0c,0x0b,0x1b,0x2f,0xa5,0xaf,0xf9,0x30,0x0e,0x0f,0x10,0x32,0x48,0x9b,0x32,0x1c,0x0b,0x09,0x07 -,0x17,0x2f,0x5c,0x3a,0x15,0x1c,0x0a,0x0e,0x0f,0x1d,0x1e,0x45,0x20,0x1f,0x12,0x0e,0x0b,0x1b,0x46,0xb4,0xa9,0x33,0x5f,0x23,0x9f,0x9c,0x8f,0x9b,0x97,0xa0,0x97,0xa0 -,0xa6,0xbb,0xac,0x95,0x90,0x8e,0xbd,0x9f,0x29,0x32,0x1e,0xb2,0xad,0x92,0x9a,0xb7,0x2a,0x1b,0x19,0x16,0x70,0xab,0x92,0x96,0x8f,0x38,0x52,0x43,0x9f,0x91,0x87,0x84 -,0x8c,0xa5,0x28,0x15,0xa4,0x84,0x83,0x81,0x93,0xb3,0x1a,0x3e,0x27,0xaf,0x3b,0x27,0x38,0xbd,0x3e,0x11,0x09,0x04,0x0f,0x18,0x44,0x0f,0x0b,0x04,0x0a,0x1d,0xaa,0xe9 -,0x1d,0x0d,0x0a,0x0e,0x11,0x24,0x19,0x3d,0x39,0x9f,0x9e,0x90,0xd8,0x23,0x14,0x25,0xa1,0x92,0x8e,0x9f,0x9c,0x1e,0x1c,0x17,0xb0,0x8f,0x87,0x9a,0x49,0x11,0x12,0x2f -,0xbe,0xa7,0xa1,0x99,0x9e,0xaa,0x1b,0x14,0x0e,0xae,0x8c,0x81,0x89,0x95,0x10,0x09,0x1c,0x9b,0x87,0x95,0xa7,0x19,0x23,0x26,0x58,0x21,0x43,0x17,0x4e,0xc0,0xa4,0xac -,0x28,0x27,0x17,0xd8,0xaa,0x97,0xb6,0x68,0x20,0xe5,0xa9,0x91,0x8f,0x88,0x92,0x9b,0xc1,0x2d,0x39,0x45,0xbc,0x1f,0xd7,0xb2,0x9b,0xc4,0x17,0x02,0x0a,0x14,0x9a,0x97 -,0xad,0x12,0x03,0x0a,0x1c,0x9e,0x9b,0x98,0x37,0x1b,0x0e,0x0e,0x0f,0x3f,0xba,0x8d,0x8d,0x8c,0xbc,0x11,0x0b,0x07,0x26,0xbb,0x9a,0xbe,0x2a,0x08,0x06,0x08,0x38,0x9f -,0x8b,0xa2,0x3c,0x19,0x15,0xee,0xa0,0x90,0x35,0x2e,0x26,0xa3,0x99,0x9e,0x24,0x30,0xb8,0x8b,0x89,0x85,0x94,0x2f,0x51,0xaa,0x89,0x8a,0x89,0xa0,0x9e,0x9c,0x9b,0xc1 -,0x9f,0xad,0x8e,0x91,0x8e,0x9d,0x4c,0xd9,0x43,0x9b,0xc4,0xb2,0x2f,0x51,0x23,0x19,0x0b,0x13,0x1b,0xa3,0xa2,0x93,0x6b,0x09,0x06,0x09,0x3c,0x96,0x85,0x97,0xb3,0x18 -,0x12,0x0d,0x3c,0x33,0xa2,0x38,0x28,0x1a,0x0e,0x0d,0x06,0x0e,0x0d,0x14,0x06,0x08,0x03,0x02,0x00,0x06,0x0e,0xa6,0xb3,0xa9,0x22,0x09,0x0f,0x22,0x9c,0x9c,0x9c,0x2c -,0x42,0xb0,0x9a,0x99,0x8c,0x8e,0x8b,0x99,0x8f,0x8d,0x8b,0x8b,0x96,0x95,0x94,0x88,0x8a,0x86,0x90,0xbe,0x60,0x9a,0x8c,0x83,0x85,0x82,0x8c,0x9a,0xae,0xa1,0x94,0x99 -,0x91,0x99,0x9c,0xad,0x26,0x0b,0x09,0x0a,0xb5,0xa5,0x9a,0x1e,0x04,0x03,0x05,0x14,0x3b,0x73,0x17,0x0d,0x08,0x07,0x09,0x29,0xbc,0x9c,0x3d,0x34,0x1b,0x16,0x1a,0x1f -,0x37,0x30,0x37,0x34,0x26,0x22,0x12,0x0f,0x27,0x28,0xc4,0x18,0x1d,0x0e,0x16,0x23,0xbf,0x95,0x9c,0xa6,0x2b,0x28,0xbf,0xb4,0xc6,0xa9,0xd9,0x97,0x92,0x87,0x8e,0xaa -,0x26,0x2f,0xa4,0x97,0x92,0x95,0x94,0x9f,0xe9,0x46,0xaa,0x9a,0x88,0x8a,0x86,0x8b,0x8c,0x90,0x8c,0x8f,0x8a,0x85,0x83,0x83,0x8e,0xa8,0x20,0xa6,0x96,0x87,0x90,0x92 -,0x20,0x09,0x09,0x0f,0x1e,0x1b,0x0f,0x05,0x05,0x04,0x07,0x02,0x09,0x02,0x0c,0x09,0x13,0x0a,0x02,0x04,0x07,0x0f,0x12,0x0f,0x03,0x07,0x02,0x0b,0x0a,0x47,0x4e,0x9a -,0xbb,0xc1,0x9f,0x9c,0x8e,0x95,0x95,0xaf,0x8b,0x8a,0x80,0x8c,0x92,0x56,0xa3,0x93,0x8b,0x8b,0x92,0x94,0x42,0xaa,0xb6,0x8e,0x93,0x8a,0x9f,0x9b,0x9f,0xa1,0x27,0x27 -,0x36,0xaf,0x88,0x8a,0x87,0x45,0x7d,0x2d,0x8f,0x8e,0x8b,0x9c,0xd7,0x1f,0x1c,0x1c,0x18,0x40,0x16,0x21,0x08,0x0f,0x08,0x19,0x13,0x12,0x0b,0x13,0x18,0x19,0x1f,0x0c -,0x0a,0x0d,0x6e,0x1d,0xaf,0x2e,0xde,0x1f,0x35,0xce,0xb7,0x9c,0xa5,0xb9,0x1f,0xe4,0x5b,0x30,0x08,0x0f,0x0e,0xc1,0x9e,0xad,0x1e,0x03,0x0f,0x2d,0x95,0xa6,0xa3,0x1f -,0x29,0xbb,0xac,0xb6,0xa7,0x8a,0x8c,0x84,0x8b,0x84,0x89,0x89,0x92,0x8a,0x84,0x82,0x80,0x84,0x87,0x9c,0x8e,0x9e,0x89,0x95,0xa4,0x1e,0x1d,0x21,0x0e,0x3c,0x1b,0x0e -,0x02,0x10,0x07,0x10,0x17,0x04,0x00,0x01,0x06,0x07,0x17,0x07,0x05,0x02,0x10,0x18,0x0f,0x15,0x1b,0x4b,0x1c,0x79,0x30,0x20,0x08,0x18,0xa5,0xac,0xa6,0x8f,0x8d,0x15 -,0x2f,0x9a,0x8d,0x8d,0x83,0x94,0x18,0x4f,0x97,0x8d,0x96,0x88,0x99,0x32,0x9b,0x88,0x85,0x90,0x8e,0x8c,0x90,0x90,0x84,0x80,0x99,0x46,0x98,0x8e,0xd7,0x95,0x93,0x0f -,0x0d,0xdb,0x6c,0x0e,0x1b,0x15,0x07,0x0e,0xb7,0xcb,0x13,0x1b,0x18,0x0d,0x0c,0x7b,0x9c,0x28,0x13,0x1c,0x22,0x17,0xb2,0x8f,0x29,0x0d,0x33,0xcd,0x1a,0x5e,0xbe,0x0d -,0x04,0x10,0x18,0x0e,0x1d,0x16,0x08,0x06,0x23,0x47,0x25,0x21,0x1a,0x18,0x17,0x9a,0x87,0x9b,0x18,0x26,0xa2,0x9d,0x8b,0x81,0x98,0x1e,0xd0,0x98,0x9b,0x8d,0x87,0x9c -,0xaa,0x89,0x84,0x89,0x87,0x88,0x8f,0x8e,0x84,0x80,0x84,0x8f,0x9c,0x9c,0xa3,0x91,0x85,0x8f,0x2b,0x42,0x9e,0xd1,0xaf,0x97,0x25,0x04,0x09,0x1a,0x14,0x19,0x12,0x02 -,0x00,0x01,0x0b,0x15,0x12,0x0a,0x01,0x00,0x04,0x19,0x1e,0x0a,0x08,0x0f,0x0e,0x13,0xc1,0x2c,0x07,0x0c,0xd6,0xa8,0xa8,0x95,0xd2,0x16,0xbf,0x89,0x86,0x85,0x88,0xa8 -,0x2e,0x95,0x83,0x83,0x88,0x96,0xa9,0x5a,0xab,0x8c,0x8a,0xae,0x42,0x9e,0x9a,0x98,0x89,0x8a,0x54,0x29,0xa6,0x9b,0x95,0x89,0x9c,0x12,0x18,0xa2,0x90,0x8f,0x8f,0xad -,0x1c,0x24,0x9a,0x8f,0xdd,0x15,0x15,0x15,0x17,0xae,0x9f,0x0d,0x00,0x04,0x09,0x10,0xc4,0xbd,0x0a,0x01,0x08,0x13,0x1d,0x42,0x26,0x0b,0x0a,0x27,0xaf,0xfc,0x3c,0x3f -,0x2f,0x35,0xa1,0x8f,0x3b,0x0b,0x0f,0x30,0x5a,0x98,0x8c,0xd6,0x0b,0x0c,0x24,0x3b,0x97,0x92,0x3b,0x0e,0x15,0xd9,0x9d,0x8f,0x91,0xae,0xf8,0x8d,0x82,0x81,0x84,0x85 -,0x84,0x86,0x82,0x80,0x80,0x8b,0xa3,0x92,0x8c,0x8a,0x86,0x95,0x26,0x1b,0x42,0xc9,0x40,0x1c,0x09,0x01,0x06,0x0f,0x10,0x08,0x04,0x01,0x01,0x02,0x0f,0x1d,0x09,0x04 -,0x05,0x06,0x0c,0x30,0xb8,0x1f,0x0f,0x12,0x11,0x1c,0xc6,0xb7,0x20,0x1d,0x33,0xc6,0xa4,0xa2,0x24,0x0b,0x16,0xa2,0x8c,0x8e,0x9a,0xac,0x67,0xae,0x87,0x81,0x87,0x9d -,0xb4,0xb0,0x9b,0x86,0x82,0x89,0x9b,0x93,0x8d,0x8c,0x8c,0x8f,0xb3,0xc2,0x9d,0x96,0x96,0x98,0xaf,0x1f,0x15,0x2b,0xc3,0x39,0x32,0x3c,0x2b,0x19,0x2c,0xad,0xd4,0x1e -,0x21,0x1f,0x21,0xb2,0x99,0xf3,0x10,0x0d,0x11,0x2c,0x97,0x9b,0x0d,0x01,0x03,0x0a,0x0f,0x19,0x1e,0x0d,0x06,0x0f,0xd7,0xd8,0x1b,0x0f,0x19,0x1d,0x3a,0x9c,0xa5,0x1e -,0x18,0x2c,0x2b,0x30,0x67,0x30,0x1d,0x4f,0xa9,0xb2,0xac,0x99,0xa5,0x21,0x1d,0xc3,0x9d,0x9a,0x90,0x91,0x98,0x98,0x8a,0x83,0x85,0x87,0x86,0x8a,0x8a,0x82,0x80,0x81 -,0x88,0x8b,0x8b,0x85,0x81,0x89,0x42,0x15,0x3f,0xc1,0x3b,0x2a,0x19,0x07,0x05,0x0c,0x16,0x0b,0x03,0x02,0x01,0x01,0x07,0x1d,0x14,0x06,0x07,0x08,0x06,0x06,0x0c,0x0d -,0x0f,0x1d,0x1e,0x1b,0x25,0xd2,0x2f,0x0f,0x15,0x20,0x3e,0xb3,0x9e,0xa6,0x34,0x49,0x9e,0x90,0x91,0x94,0x9b,0xbd,0xa1,0x88,0x84,0x8c,0xa9,0xb7,0x96,0x87,0x83,0x8b -,0xb1,0xba,0x96,0x8f,0x8c,0x89,0x90,0xae,0xae,0x9d,0x9d,0xa4,0xa6,0xa6,0x2d,0x2d,0x98,0x91,0xa7,0x3a,0x30,0x1f,0x1c,0x1f,0x2d,0x3d,0x30,0x31,0x1b,0x1a,0x77,0xbf -,0x25,0x11,0x0e,0x0e,0x1d,0xb9,0xfb,0x15,0x07,0x09,0x0f,0x1a,0x25,0x16,0x09,0x0a,0x19,0xaf,0xb8,0x1b,0x0f,0x0a,0x14,0xb8,0xa7,0x33,0x12,0x18,0x1f,0x11,0xa7,0x90 -,0xcf,0x29,0x2a,0x3e,0x2b,0xad,0x9b,0xae,0x34,0xa5,0x8b,0x89,0x89,0x8b,0x8d,0x96,0x92,0x8a,0x85,0x82,0x82,0x84,0x89,0x86,0x82,0x82,0x89,0x96,0x9d,0x9f,0x8c,0x83 -,0x8d,0x49,0x1e,0x2d,0x21,0x1f,0x3e,0x15,0x07,0x0a,0x0f,0x0f,0x0b,0x09,0x05,0x00,0x05,0x0f,0x0d,0x07,0x08,0x0a,0x06,0x08,0x13,0x1d,0x0f,0x0a,0x10,0x0f,0x0c,0x1d -,0x42,0x16,0x14,0xbc,0x9c,0x9a,0x94,0x96,0xbe,0x2b,0xbd,0x9c,0x8d,0x89,0x8e,0xa5,0xbc,0x8f,0x89,0x8d,0xa4,0xab,0x97,0x92,0x88,0x86,0x8e,0xa9,0xad,0x9a,0x9e,0x9f -,0x92,0x98,0xa8,0x98,0x8c,0x8e,0x8a,0x8e,0xb7,0xb5,0xa0,0x9a,0xb8,0x1f,0x2f,0x38,0x3c,0xd0,0x22,0x3a,0x33,0x20,0x20,0x1e,0x29,0x9d,0xab,0x1a,0x0c,0x11,0x11,0x20 -,0x24,0x10,0x0f,0x08,0x26,0x17,0x25,0xa4,0x8b,0x16,0x09,0x84,0xb0,0x0d,0x17,0x00,0x0e,0x12,0x44,0x1e,0x0f,0x0f,0x02,0x1f,0x00,0x0e,0x0f,0x08,0x0e,0x02,0x08,0x02 -,0x02,0x11,0x0c,0x2a,0x16,0xc0,0x9d,0x9e,0x88,0xa3,0x84,0x8d,0x8b,0x87,0x80,0x8c,0x34,0x87,0x80,0x80,0x81,0x83,0x80,0x81,0x80,0x81,0x86,0x82,0x84,0x82,0x90,0x8b -,0xf8,0xa3,0x82,0x95,0x82,0xc8,0x95,0xa6,0xa7,0xae,0x0d,0xaa,0x2e,0x2e,0x0d,0x00,0x08,0x00,0x0f,0x0a,0x0f,0x18,0x02,0x1d,0x02,0x03,0x00,0x02,0x0a,0x02,0x06,0x00 -,0x04,0x00,0x01,0x09,0x06,0x4a,0x07,0x1e,0x12,0x05,0x0c,0x00,0x42,0x20,0x9d,0x12,0x05,0x15,0x06,0x87,0x9d,0x8c,0x8f,0xa8,0x80,0x8d,0x83,0xac,0x89,0x81,0x83,0x86 -,0x8f,0x80,0x8a,0x83,0x80,0x80,0x80,0x87,0x81,0x86,0x86,0x84,0x93,0x80,0x84,0x80,0x8d,0x97,0x8c,0xa6,0x80,0x89,0x80,0x8c,0xa0,0x85,0x93,0x8e,0x14,0x9f,0x86,0x8a -,0x8a,0x18,0x2c,0x0c,0x02,0xaa,0x15,0x9e,0x0f,0x09,0x12,0x00,0x08,0x00,0x04,0x07,0x04,0x04,0x00,0x03,0x00,0x02,0x0e,0x03,0x0e,0x01,0x0f,0x09,0x00,0x04,0x00,0x0d -,0x14,0x0d,0x08,0x00,0x07,0x00,0x13,0x1d,0x27,0x3e,0x05,0xae,0x0e,0x23,0x09,0x0c,0x96,0x9c,0x95,0xba,0x29,0x2e,0x2e,0x80,0x86,0x80,0x8b,0x93,0x87,0xb2,0x93,0x29 -,0x89,0x81,0x82,0x87,0xbd,0xad,0x2b,0x2e,0x80,0x87,0x80,0x9f,0x91,0x8b,0xab,0x9a,0x0d,0x9b,0x84,0x80,0x84,0xa3,0xa8,0x4c,0xb4,0x80,0x8a,0x80,0x22,0x9e,0x9c,0xa7 -,0xa4,0x1f,0x8d,0x97,0x83,0x96,0xa9,0xaa,0x25,0x24,0x84,0x90,0x80,0x20,0x9b,0x92,0x95,0x8a,0x52,0x84,0x87,0x81,0x94,0x38,0x30,0x2e,0xb8,0x80,0x89,0x80,0x41,0x96 -,0xa8,0x9a,0x96,0x6b,0x87,0x88,0x80,0xa3,0x1e,0x0f,0x0c,0x0c,0x86,0x87,0x80,0x1a,0x0d,0x0c,0x09,0x0b,0x02,0x0e,0x0d,0x1c,0x02,0x04,0x00,0x03,0x00,0x18,0x16,0x1e -,0x0c,0x00,0x04,0x00,0x01,0x00,0x02,0x07,0x08,0x02,0x07,0x00,0x04,0x00,0x0f,0x13,0x08,0x05,0x00,0x01,0x00,0x02,0x00,0x05,0x09,0x0c,0x03,0x07,0x00,0x06,0x00,0x39 -,0x99,0xa9,0x29,0x02,0x13,0x05,0xa5,0x8d,0x83,0x80,0x84,0x86,0x8e,0x9c,0x94,0xa2,0x85,0x80,0x80,0x80,0x96,0x83,0x9e,0x85,0x80,0x81,0x80,0x81,0x80,0x88,0x8f,0x8e -,0x8f,0x84,0x80,0x82,0x80,0x8d,0x81,0x94,0x8b,0x86,0x87,0x80,0x83,0x80,0x89,0x8d,0xaa,0x9e,0xa3,0x81,0x85,0x80,0x9c,0xb6,0xbd,0xb7,0x8d,0xb0,0x8b,0xbc,0x8d,0x28 -,0x2c,0xf7,0xb1,0x1b,0xa0,0x90,0xb2,0xef,0x00,0x16,0x02,0x22,0x0f,0x28,0x17,0x1d,0x0a,0x00,0x05,0x05,0x0a,0x04,0x9c,0x18,0x11,0x02,0x04,0x00,0x0b,0x09,0x26,0xc8 -,0x20,0x2c,0x00,0x05,0x00,0x08,0x02,0xad,0x99,0x1c,0x0e,0x00,0x07,0x00,0x17,0x13,0x57,0x1c,0xda,0x0a,0x07,0x00,0x08,0x06,0x0f,0x87,0x46,0x8f,0x0d,0x24,0x0e,0x1b -,0x26,0x49,0xc5,0xab,0x9e,0x0d,0x1a,0x0a,0x55,0x0e,0x8f,0x91,0x88,0xa9,0x2f,0xce,0x19,0x92,0xec,0x88,0x9a,0x8b,0x9e,0x3d,0x9e,0x87,0x8b,0x89,0x82,0x95,0x86,0x23 -,0x8d,0x9c,0x8a,0x88,0x8d,0x8c,0x99,0x94,0x37,0x98,0xa6,0x88,0xe7,0x89,0x95,0x8f,0x37,0x0d,0x1f,0x19,0x9f,0xaa,0x88,0x39,0x9e,0x0d,0x0d,0x0d,0x1f,0x1c,0x1a,0x8d -,0xae,0xb4,0x04,0x0c,0x03,0x1f,0xab,0x98,0xab,0x18,0x16,0x04,0x15,0x11,0xbf,0x0c,0x96,0xa1,0x92,0xaf,0x11,0x40,0x0f,0x9f,0xa9,0x89,0xad,0x8d,0xaf,0xa6,0x54,0xad -,0xab,0x56,0x83,0x87,0x81,0xd6,0xaf,0x21,0x9b,0x8f,0x8b,0x95,0xa5,0x96,0xe9,0x91,0x9e,0x8d,0x3e,0x93,0x92,0x8d,0xbb,0x0f,0x23,0x1f,0x95,0xb1,0x98,0x1d,0x4f,0x18 -,0xbb,0x52,0xcd,0x1f,0x07,0x9b,0xbb,0x92,0x0c,0x11,0x0a,0x30,0xa8,0x95,0x9f,0x39,0x3a,0x09,0x5c,0x13,0xa9,0x0f,0xa9,0x99,0xb5,0x2b,0x04,0x16,0x14,0x8c,0x96,0x8c -,0x26,0x1f,0x0e,0x1c,0x38,0x30,0x3e,0x07,0x95,0xaa,0x88,0x3c,0x24,0x2a,0x25,0x97,0xa6,0xb2,0x2f,0xd0,0x27,0xa6,0x1f,0xbc,0x0b,0x2b,0x8c,0x88,0x8a,0x0f,0x12,0x0d -,0xae,0x8f,0x8f,0xba,0x28,0x17,0x2b,0x46,0x9a,0xa2,0x17,0xb2,0xa1,0x8f,0x1f,0x13,0x17,0x29,0xa1,0xab,0x3b,0x16,0x15,0x1e,0xae,0xae,0xad,0x0d,0x0b,0xba,0x92,0x8e -,0x1d,0x11,0x11,0x4c,0x97,0x8e,0x94,0x6d,0x2c,0x26,0x39,0x3f,0xd0,0x1e,0xb4,0x8f,0x8b,0xde,0x0b,0x07,0x14,0xa5,0x8b,0x95,0x3c,0x15,0x15,0x3e,0xb2,0xb7,0x20,0x0a -,0x2c,0x8f,0x8c,0x90,0x14,0x1f,0x19,0x9c,0x8f,0x97,0xa5,0x2f,0x4e,0x2b,0x2e,0x25,0x16,0x18,0x8b,0x86,0x87,0x1b,0x04,0x08,0x1b,0x8e,0x94,0xa0,0x16,0x1a,0x1a,0x38 -,0x9f,0xb3,0x21,0x29,0x94,0x91,0x9a,0x0d,0x11,0x19,0xa3,0x8f,0xa3,0x3d,0x15,0xba,0xcc,0x9c,0x38,0x19,0x0b,0xa2,0x85,0x86,0x3c,0x02,0x08,0x12,0x94,0x8a,0x8d,0xc3 -,0x40,0x1b,0x23,0x24,0x3a,0x21,0x3f,0x89,0x8e,0xa1,0x09,0x04,0x10,0xad,0x82,0x8c,0x9f,0x18,0x1d,0x36,0xaf,0xa7,0x4c,0x14,0xb2,0x8d,0x95,0xab,0x08,0x1c,0x17,0x91 -,0x8e,0x96,0x45,0x1c,0x1f,0x14,0x25,0x21,0x1c,0x21,0x87,0x8c,0x93,0x0a,0x07,0x0e,0x9f,0x81,0x8b,0x9d,0x0c,0x14,0x18,0x63,0x9d,0x9b,0xbf,0x95,0x8b,0xa2,0x11,0x02 -,0x0e,0x2c,0x87,0x8e,0xa3,0x0f,0x0a,0x37,0xad,0x93,0xd5,0x1f,0x17,0x8e,0x90,0xa7,0x0a,0x0c,0x24,0x91,0x82,0x97,0xa5,0x14,0x53,0x2b,0xbe,0x24,0x1f,0x19,0x93,0x8b -,0x9b,0x0e,0x03,0x0f,0xb6,0x80,0x8b,0x9d,0x06,0x0e,0x15,0x9a,0x9c,0xaf,0x11,0xb3,0x8c,0x8d,0x43,0x03,0x1d,0x44,0x81,0x8c,0xa4,0x09,0x0c,0x14,0x9a,0x95,0xcf,0x08 -,0x13,0x99,0x8b,0x95,0x0b,0x12,0x0e,0x8d,0x8b,0x8e,0x25,0x13,0x13,0x4e,0xa6,0xa9,0x1b,0x35,0x87,0x8a,0x94,0x09,0x0e,0x0d,0x95,0x8e,0x90,0x1f,0x0d,0x11,0x19,0xa9 -,0x9d,0xc4,0xc2,0x97,0xa2,0xb6,0x06,0x1a,0x19,0x8d,0x8d,0x8e,0x2c,0x1d,0x26,0x39,0xa3,0xec,0xc6,0xcd,0x8c,0xa1,0xc6,0x04,0x15,0x19,0x8e,0x96,0xa8,0x31,0x7c,0xa2 -,0xc3,0x2b,0x11,0x15,0xf9,0x83,0x8f,0xa1,0x04,0x10,0x1e,0x88,0x8a,0xa2,0x18,0x1f,0xba,0x9f,0xbc,0x16,0x0b,0x20,0x87,0x8c,0x9f,0x03,0x0b,0x1a,0x86,0x86,0x9b,0x0b -,0x07,0x1a,0x9f,0x94,0xaa,0x10,0x26,0x94,0x8d,0xab,0x03,0x09,0x0f,0x85,0x85,0x86,0x14,0x0d,0x0c,0x2c,0x75,0x2a,0x0e,0x38,0x8b,0x85,0x96,0x0b,0x11,0x0d,0x8f,0x93 -,0x8e,0x1d,0x1d,0x11,0xe9,0xad,0x45,0x18,0xb9,0x8e,0x8b,0xe1,0x0c,0x18,0x1a,0x96,0xac,0xa2,0x1c,0x3c,0x1c,0x3f,0xe9,0x64,0x39,0x8f,0x8c,0x95,0x0b,0x08,0x19,0x93 -,0x88,0x97,0x44,0x0b,0x23,0x2b,0x9e,0x21,0x1c,0x1d,0x8a,0x85,0x94,0x06,0x02,0x05,0x95,0x84,0x87,0x46,0x0e,0x26,0xc9,0x9b,0x31,0x13,0x16,0x8b,0x85,0x88,0x0d,0x0c -,0x08,0x9a,0x92,0x90,0x1c,0x0c,0x1e,0xaf,0x97,0xc9,0x10,0x28,0x96,0x8d,0xaf,0x07,0x0a,0x0e,0x89,0x86,0x85,0x34,0x14,0x0f,0xca,0x9b,0xb8,0x1a,0xc3,0x9a,0x8b,0x2d -,0x0c,0x09,0x1f,0x90,0x8c,0x8f,0x27,0x1a,0x07,0x18,0x1d,0x2f,0xa6,0x8e,0x8d,0x9a,0x0c,0x14,0x19,0x8f,0x8c,0x92,0x42,0x26,0x6d,0xd5,0xbd,0x1b,0x0f,0x36,0x91,0x86 -,0xb1,0x0a,0x0c,0x0f,0x8b,0x8f,0x98,0x0d,0x0d,0x1b,0xaa,0x9b,0x5d,0x15,0xae,0x90,0x85,0xd1,0x0b,0x08,0x17,0x8d,0x88,0x8a,0x39,0x22,0x13,0x23,0x39,0x0e,0x1e,0x96 -,0x8b,0x8a,0x0f,0x07,0x06,0xa7,0x88,0x87,0x6b,0x0d,0x0b,0x19,0x9e,0xa4,0x4e,0xa5,0x95,0x89,0x9a,0x14,0x0d,0x09,0xa7,0xa7,0x92,0xb3,0x3b,0x1f,0xb4,0xa6,0xad,0x27 -,0x4f,0x55,0x96,0x2c,0x30,0x1c,0x1e,0xa3,0x53,0xaa,0x2a,0xb8,0x2d,0x2f,0x1f,0x2a,0xb9,0x89,0x89,0x88,0x0d,0x06,0x02,0x2e,0x9a,0x8b,0x93,0x58,0xae,0x23,0x3a,0x13 -,0x0d,0xb2,0x97,0x8e,0xac,0x04,0x11,0x19,0x89,0x87,0x85,0x45,0x11,0x11,0x20,0x7d,0x2f,0x1d,0x9b,0x89,0x88,0x23,0x05,0x08,0x1d,0x92,0xa6,0x3b,0x13,0xa5,0x94,0x8e -,0xae,0x20,0x0a,0x5d,0xa4,0x89,0x21,0x15,0x13,0xbe,0x8a,0x8e,0x92,0x1e,0x0f,0x0b,0x29,0x19,0x15,0x1b,0x88,0x84,0x82,0x13,0x0e,0x06,0xdd,0x8f,0xa2,0x30,0x0b,0x19 -,0x39,0x94,0x98,0xac,0x4b,0x9d,0xa2,0x91,0x08,0x0b,0x09,0x94,0x8a,0x89,0xb9,0x1e,0x21,0x39,0xb2,0x17,0x0f,0x0b,0x8e,0x85,0x81,0x19,0x0c,0x01,0x28,0xb5,0x8c,0xfc -,0x1d,0x2a,0xc0,0x8e,0xb9,0xc0,0x54,0x91,0x9f,0xa4,0x04,0x07,0x07,0x8e,0x83,0x82,0x25,0x08,0x08,0x17,0x98,0x9c,0xff,0x12,0xaf,0x95,0x88,0x2e,0x2e,0x18,0x8f,0x97 -,0x9c,0x0d,0x06,0x07,0xd2,0x8e,0x9d,0x63,0x49,0x8e,0x96,0x8e,0x0a,0x0c,0x03,0xa4,0x8b,0x83,0xb8,0x20,0x18,0x30,0x2e,0x1e,0x13,0x2a,0x88,0x8b,0x84,0x15,0x0e,0x02 -,0xa5,0x91,0x88,0x2c,0x08,0x07,0x19,0x8d,0x8f,0x45,0x13,0xaa,0x92,0x8a,0x17,0x12,0x00,0x2a,0x8e,0x82,0x9f,0x12,0x0f,0x51,0x91,0x9a,0x29,0x13,0xb1,0xaa,0x8e,0x1b -,0x17,0x08,0xaf,0x90,0x89,0x66,0x0e,0x0d,0x63,0x8c,0x89,0x91,0x0c,0x22,0x26,0x9a,0x12,0x17,0x0d,0xa1,0x89,0x84,0xa9,0x06,0x09,0x0f,0x99,0xb5,0x31,0x0d,0x8d,0x88 -,0x80,0x9f,0x0f,0x04,0x09,0xba,0x90,0x8a,0x23,0x18,0x09,0x47,0xab,0x96,0x19,0x2c,0xe0,0x8f,0xa3,0x0b,0x0d,0x11,0x8a,0x8a,0x83,0x4c,0x24,0x07,0x44,0x44,0xa3,0xde -,0x2d,0x8e,0x8b,0x93,0x0f,0x1b,0x05,0x66,0xb5,0x8d,0x12,0x0f,0x1e,0xba,0x8d,0x9e,0x38,0x09,0x29,0xc2,0x90,0x18,0x2e,0x18,0x8f,0x8b,0x88,0x9c,0x12,0x0e,0x14,0x96 -,0x9b,0xa8,0x07,0x34,0xa6,0x86,0x9f,0x1d,0x09,0x0c,0xad,0x94,0x9b,0x0c,0x0d,0x1e,0x8e,0x9b,0x9b,0x1c,0x7e,0x94,0x8b,0xb5,0x0a,0x11,0x23,0x89,0x8c,0x8a,0x23,0x16 -,0x08,0x19,0xa8,0xdc,0x24,0x1f,0x97,0x91,0x90,0x16,0x09,0x04,0x4f,0x94,0x8d,0xb5,0x1a,0x22,0xa2,0x8d,0x9f,0x5e,0x09,0x78,0x9e,0x86,0xae,0x1c,0x0a,0x14,0xa5,0x91 -,0x8e,0x45,0x2a,0x16,0xc1,0x2a,0x46,0x0b,0x38,0x9e,0x8b,0x94,0x45,0x1e,0x0d,0xd3,0xa8,0x8f,0x37,0xe3,0x23,0xb1,0xb6,0x5f,0x1c,0x15,0xb2,0x9a,0x90,0x26,0x1f,0x19 -,0xc0,0xa5,0x95,0xc5,0x16,0x1f,0x3c,0xb8,0x6f,0xca,0x1b,0xa3,0x8f,0x92,0x2c,0x0c,0x13,0x29,0x90,0x93,0x98,0x20,0x25,0x26,0x58,0xa0,0xb4,0xff,0x23,0x41,0xcb,0x9e -,0x2a,0x1f,0x10,0x2b,0xae,0x90,0x90,0xad,0xca,0x17,0x39,0x19,0xe4,0x31,0xa6,0x9a,0x91,0xc6,0x0f,0x12,0x0d,0xa4,0x96,0x88,0xb1,0x39,0x15,0x14,0x3a,0xd8,0xa6,0x32 -,0xb4,0xdd,0x96,0x73,0xcf,0x26,0x35,0xa8,0xb5,0x9b,0x2b,0x37,0x1d,0x54,0x28,0xd9,0x21,0x2d,0xa4,0x95,0x91,0x2e,0x22,0x0a,0x2e,0xae,0x8d,0xa9,0x32,0x19,0x1e,0xa1 -,0x9f,0x8e,0x3f,0xb1,0x79,0x59,0x22,0x27,0x20,0x2a,0x5e,0xb6,0x9e,0x3c,0x2f,0x16,0xbb,0xa1,0x9a,0x3c,0x12,0x41,0xa5,0x90,0xcd,0x14,0x10,0x29,0x94,0x8a,0x96,0x39 -,0x17,0x12,0x3f,0xb3,0x9b,0x23,0x39,0x3d,0xab,0x9e,0x1b,0x32,0x1c,0x95,0x96,0x94,0x19,0x10,0x18,0xad,0x96,0xb3,0x24,0x07,0x3d,0x9d,0x82,0x98,0xcc,0x0b,0x0c,0x34 -,0x98,0x8d,0xae,0x35,0x0f,0x4d,0x6e,0xaa,0x1d,0x21,0xab,0x97,0x96,0x17,0x14,0x0e,0xab,0x8f,0x8f,0xbf,0x1b,0x17,0x2e,0x96,0xa2,0x9c,0x0f,0x26,0x4a,0x95,0x99,0x42 -,0x2c,0x0c,0x38,0xd0,0x9d,0xc4,0xbc,0xb6,0x9c,0xb6,0x25,0x0c,0x10,0x90,0x8d,0x8c,0x13,0x0a,0x09,0x2a,0x8b,0x8a,0x88,0x2d,0x19,0x0f,0x1e,0xc3,0xab,0x23,0x29,0xb7 -,0x93,0xa1,0x1f,0x1e,0x13,0x98,0x9d,0x8f,0x2c,0x26,0xdd,0x3b,0xab,0x1f,0x2f,0x15,0xac,0x97,0x8b,0xac,0x18,0x09,0x10,0xa7,0x8f,0x8a,0x49,0x3f,0x10,0x28,0x23,0x66 -,0x4a,0xb2,0x8b,0x8f,0x9e,0x09,0x0b,0x0e,0xa0,0x8b,0x8a,0xbb,0x1e,0x19,0x16,0xab,0xb4,0x9e,0x15,0x5a,0xad,0x94,0xad,0x16,0x14,0x19,0x98,0x9a,0x99,0x1c,0x2d,0x25 -,0xb1,0x78,0x2c,0x1c,0x34,0x8a,0x8a,0x98,0x0a,0x0e,0x0a,0xaa,0x8e,0x86,0x9a,0x20,0x11,0x10,0xc6,0xc7,0xad,0x19,0xb4,0xa4,0x94,0x19,0x0e,0x1a,0xa3,0x86,0x92,0xa7 -,0x0c,0x1c,0x1c,0xa4,0xb3,0xe2,0x1e,0x2f,0x9b,0x96,0xa3,0x14,0x1b,0x19,0x94,0x97,0x95,0x24,0x13,0x1f,0x33,0xb5,0x27,0x1a,0x27,0x8e,0x89,0x8f,0x0f,0x0e,0x0b,0xa5 -,0x8c,0x8e,0x9f,0x15,0x20,0x18,0xac,0xbe,0xae,0x24,0xa4,0x9c,0x9f,0x1b,0x0b,0x1b,0x35,0x8a,0x95,0x9b,0x15,0x1e,0x28,0xa9,0xb0,0x2d,0x15,0x2c,0x90,0x91,0x99,0x17 -,0x27,0x17,0xb4,0xc8,0xb1,0xbe,0x4b,0xc7,0xc9,0xbc,0x4d,0x23,0x1f,0x99,0x9e,0x9d,0x0d,0x0f,0x0f,0xac,0x8c,0x8e,0x94,0x28,0x37,0x18,0x2d,0x2c,0xce,0x2f,0x9f,0xa5 -,0xa7,0x2f,0x1a,0x44,0x2d,0x96,0xbe,0xa8,0x26,0x2a,0x32,0x35,0xb7,0xed,0x2f,0xf4,0x9b,0x9d,0xaf,0x1e,0x4b,0x26,0xd5,0x68,0xa5,0x9b,0xa7,0x4b,0x0f,0x0d,0x1e,0x55 -,0xa3,0x8c,0x9b,0xa2,0x16,0x1f,0x1f,0xc2,0x9e,0xbc,0xc5,0x26,0x42,0x24,0x36,0xbc,0xae,0xaf,0x96,0xb1,0x4c,0x14,0x19,0xbb,0xac,0x9b,0xe5,0xaf,0xb0,0x6a,0x1e,0x11 -,0x1d,0xc9,0xda,0x93,0x96,0xa3,0x30,0x13,0x2e,0x27,0xa9,0x69,0xd6,0xaf,0x9c,0xa5,0x2a,0x1e,0x28,0x3b,0x9d,0x8d,0xbb,0x19,0x08,0x17,0x30,0x9b,0x96,0x96,0x9a,0xa0 -,0x39,0x13,0x16,0x20,0x23,0x4c,0x8f,0x9b,0xc0,0x11,0x2c,0xa1,0x90,0xa8,0x44,0x28,0x31,0x2f,0x22,0x34,0x45,0xf0,0xbb,0x94,0xac,0x35,0x12,0x3f,0xbd,0x9e,0xca,0xb7 -,0xa9,0xb8,0xd4,0x1c,0x1b,0x1b,0x18,0x40,0x8b,0x8b,0x96,0x18,0x19,0x1e,0xda,0xa9,0xb8,0xaf,0xc5,0x48,0x1a,0x15,0x43,0x6d,0x96,0x89,0x9b,0x2c,0x0a,0x1a,0x2a,0xad -,0xa1,0xab,0xa4,0xa9,0x26,0x18,0x1d,0x63,0xc4,0xb1,0x92,0xa9,0x3a,0x1b,0xd5,0xa0,0xad,0x25,0x12,0x31,0x9d,0xa1,0xc4,0x22,0x22,0x2d,0xa5,0x8a,0x94,0x2a,0x0e,0x16 -,0x53,0xd9,0x37,0xb9,0x9f,0x8e,0xab,0x3a,0x0e,0x0b,0x11,0xb2,0x88,0x91,0x26,0x0e,0x38,0x9f,0x8f,0xa0,0xcb,0x25,0xe3,0x35,0x27,0x1e,0x1b,0x34,0x98,0x8a,0x9d,0x24 -,0x13,0x29,0xb4,0x9f,0xd2,0x24,0x1e,0xd5,0xb3,0x9f,0x70,0x15,0x10,0xbb,0x8c,0x93,0x50,0x11,0x1b,0xbd,0x99,0x96,0xe5,0x38,0x73,0x4b,0xc6,0x1f,0x15,0x16,0xa1,0x8b -,0x8e,0xaf,0x17,0x11,0x1c,0x34,0xa1,0xa9,0x34,0x5f,0x58,0xa1,0xbd,0x24,0x17,0x33,0x9b,0x99,0xb5,0x28,0x23,0xb6,0x9a,0x9a,0xb4,0x25,0x1c,0x1b,0xab,0xa0,0xbb,0x26 -,0x25,0x29,0x3f,0xb1,0x46,0xf6,0x36,0xba,0xa4,0xa6,0x4e,0x1d,0x27,0xa5,0x93,0xa6,0x34,0x22,0x3a,0xc4,0xae,0x5e,0x28,0x1e,0x29,0xa8,0x8e,0x95,0x2d,0x0e,0x0f,0x24 -,0x56,0xb2,0xb0,0xaf,0xa7,0x9d,0xa0,0x59,0x19,0x23,0xb2,0x9b,0xb1,0x1f,0x28,0xb9,0x9c,0xab,0x47,0x2d,0x1d,0x26,0xac,0xa5,0x60,0x22,0x17,0x2c,0xa7,0x9e,0xb7,0x3e -,0xcd,0xae,0xac,0xd5,0x1f,0x17,0x3f,0x98,0x92,0xba,0x2a,0x2b,0xab,0x97,0xb1,0x20,0x1d,0x2e,0x34,0xbd,0xa8,0xc9,0x20,0x1b,0x2b,0x51,0x2f,0x3a,0x4a,0x9a,0x95,0x9e -,0xc6,0x27,0xcf,0xb2,0xa5,0xd7,0x27,0x27,0xc1,0x99,0xa7,0x2a,0x1c,0x27,0xb1,0xb0,0xf8,0x2e,0x3a,0x4b,0x37,0x3e,0x27,0x24,0x2a,0xa0,0x94,0x9d,0xca,0x18,0x28,0xaa -,0x92,0x9a,0xae,0xc8,0x32,0xd5,0xdf,0x2a,0x10,0x17,0xd3,0xd7,0xb3,0xd5,0x34,0xaf,0xab,0xb7,0x2d,0x21,0x21,0x3e,0x9e,0xa2,0xc7,0x3f,0x39,0xae,0x9e,0x9e,0x69,0x2d -,0x5c,0x5c,0x76,0xcc,0x57,0x49,0x9e,0xe7,0x6c,0x38,0x0a,0x0e,0x46,0x2f,0x5d,0x9b,0xe8,0x1e,0x9e,0x8e,0x9b,0x9d,0x12,0x11,0xe5,0x94,0xad,0xef,0xac,0xd8,0x94,0x9e -,0x1f,0x0a,0x23,0x33,0xc9,0xaf,0xbd,0xc6,0x1e,0x09,0x15,0x92,0x9a,0xb1,0x2e,0xbe,0x6d,0x2b,0x39,0x30,0xc5,0xa4,0x88,0x8a,0xc6,0x1a,0x41,0x9c,0xbe,0x1a,0x0d,0x1a -,0x5d,0x5c,0x27,0x2a,0x13,0x1b,0xb7,0x27,0x54,0x93,0x96,0x7d,0xa3,0x92,0x9d,0x2c,0x2a,0xea,0x94,0x8f,0x2f,0x37,0x34,0x17,0x1f,0x9c,0xdd,0x0e,0x13,0x2a,0xa4,0x8f -,0xad,0x28,0x1f,0x1b,0x36,0xa3,0xa4,0x28,0xd5,0x9d,0xa2,0xa3,0xa3,0x41,0x22,0x60,0xb9,0x41,0x2a,0xd4,0x9c,0xa9,0x1b,0x12,0xc5,0x98,0xa0,0xb2,0xdc,0x1f,0x09,0x0a -,0x49,0xbf,0xaf,0x96,0x96,0xa2,0x5d,0x8f,0x91,0x39,0x0f,0x12,0xb4,0xa6,0x21,0x1e,0x2b,0x34,0xa9,0xab,0x1d,0x0c,0x9a,0x8a,0x9c,0xef,0x2f,0x31,0x23,0x3d,0x9f,0x8d -,0xb5,0x18,0x13,0x25,0x32,0x4c,0x9b,0xee,0x0e,0x0e,0x43,0x9b,0x94,0x99,0x9d,0xb2,0x25,0x2b,0xc5,0xab,0xa5,0x95,0xae,0x17,0x0c,0x16,0xcb,0xb0,0xce,0xba,0x3e,0x1e -,0xb0,0x96,0x9f,0x3a,0x22,0x4a,0xa8,0xbd,0x25,0x26,0x4d,0x5b,0x32,0xbe,0x28,0x1f,0x9e,0x8d,0x8f,0x99,0xa1,0x3e,0x17,0x0d,0x16,0x4b,0xaf,0x24,0x1e,0x2e,0x29,0xa9 -,0x9a,0x4a,0x1e,0x9e,0x8d,0x99,0x2f,0x1d,0x57,0xa5,0xbb,0xc1,0xa1,0x9c,0xae,0x38,0x1e,0x11,0x1e,0xd7,0xb5,0x21,0x19,0x1c,0x45,0x7d,0xa2,0x91,0xa1,0x2e,0x17,0x19 -,0x38,0x95,0x86,0x8a,0xb7,0x19,0x12,0x23,0x27,0x3b,0x9e,0x96,0xba,0x2c,0x20,0x18,0x25,0xe1,0x96,0x94,0xb2,0x19,0x0e,0x1f,0x2e,0x47,0xbb,0x52,0x27,0x58,0xa1,0x99 -,0x98,0x90,0x8e,0x9d,0x30,0x14,0x1f,0x2b,0x3d,0x53,0x3f,0x24,0x27,0x47,0x2b,0x24,0x54,0x97,0x93,0xbc,0x2d,0x4e,0x45,0x1a,0x1c,0xb0,0x92,0x93,0xbd,0x1e,0x12,0x1a -,0x38,0xad,0xaa,0x4f,0x59,0xa4,0xa7,0xab,0xb5,0xc6,0xad,0x49,0x1e,0x1b,0xca,0x98,0x98,0xbd,0x26,0x19,0x2c,0x24,0x1d,0xd7,0xab,0xa5,0xd6,0xbe,0x76,0x41,0x31,0xe3 -,0xa1,0xa9,0xde,0x39,0x32,0x26,0x31,0xc8,0xae,0xc1,0xbb,0xd4,0xa6,0x9f,0xa2,0xaa,0x27,0x1b,0x15,0x28,0x37,0xbc,0xbb,0x43,0x2f,0x27,0x39,0x3e,0xdf,0xae,0x96,0x96 -,0xb4,0x2b,0x3c,0xca,0xbd,0x72,0xbd,0x9c,0x99,0xc0,0x20,0x1d,0x27,0x2b,0x29,0x2b,0x1d,0x19,0x30,0xa1,0x91,0x9a,0xa5,0xac,0x2f,0x19,0x1b,0xb7,0x94,0x9b,0x56,0x3c -,0x25,0x27,0x31,0xb6,0xbb,0xe7,0xaf,0xae,0x4c,0x23,0x2b,0x6c,0xaf,0xbd,0xc3,0x3a,0x2f,0x22,0x23,0x37,0xca,0xca,0xa5,0xaa,0xad,0xa0,0x9c,0x9c,0xb3,0x30,0x1b,0x1b -,0x1e,0x32,0xca,0xb1,0xe0,0x4b,0x1e,0x1c,0x20,0x74,0xaa,0xa6,0xac,0xc2,0xb7,0x9d,0x9b,0xc3,0xd9,0xd5,0xa7,0xa4,0xa6,0xbf,0x3e,0x24,0x25,0x3b,0x1b,0x0c,0x17,0x57 -,0xb1,0xab,0x9d,0xa0,0x36,0x1f,0x23,0x3a,0x6d,0xac,0x9a,0x9f,0x52,0x31,0x40,0x3c,0xdb,0xb0,0x96,0x91,0xba,0x1e,0x1d,0x4d,0x3e,0x3c,0x3b,0x51,0xcf,0x45,0x2a,0x18 -,0x14,0x1f,0xc7,0x99,0xa7,0x5e,0xab,0x9f,0x96,0x98,0x9b,0x4a,0x16,0x13,0x25,0xc2,0xb5,0xa4,0xb6,0x34,0x29,0x37,0x31,0x29,0x36,0xbb,0xb5,0xc6,0xbd,0xb3,0xaf,0xbe -,0xee,0xb8,0xb3,0xc5,0xbf,0xcc,0x3e,0x28,0x27,0x2b,0x2c,0x2e,0x59,0xc7,0xc6,0xb8,0xa5,0xa6,0x41,0x26,0x23,0x36,0xa7,0x9f,0xab,0xe5,0x2c,0x1f,0x23,0x37,0xdf,0x9d -,0x9f,0xbb,0xfb,0x3e,0x63,0x48,0x5e,0xbc,0xcc,0xdf,0xba,0xbe,0xd6,0x3e,0x2b,0x37,0x24,0x2a,0x67,0xd7,0xba,0xb6,0x9f,0xa4,0xc7,0x28,0x1f,0x2f,0x39,0xbb,0xa8,0xaa -,0xe4,0x37,0xc9,0xba,0x50,0x37,0x4d,0xd0,0xc8,0xbd,0xae,0xd2,0x3b,0xd5,0xae,0xb0,0x3a,0x2a,0x21,0x2b,0x22,0x27,0x28,0x1f,0x3a,0xc8,0xa0,0x99,0x98,0x9b,0x9e,0xca -,0x2c,0x1f,0x28,0xc7,0xa5,0x9b,0x9d,0xce,0x26,0x1c,0x1c,0x34,0xd8,0xf1,0x39,0xfe,0xb7,0xc3,0x4f,0x34,0x33,0x28,0x3a,0xaf,0xac,0xcb,0x46,0xc8,0xbf,0xdf,0x54,0xc3 -,0xb6,0xa4,0x9f,0xa8,0xb3,0x5d,0x3f,0x2f,0x3f,0x48,0x2e,0x32,0x3c,0x3f,0x26,0x1e,0x27,0x23,0x2b,0x32,0xb6,0xa8,0xad,0xb1,0xae,0x9d,0xa5,0xc1,0xbf,0x9f,0x9f,0xa6 -,0xd3,0x2b,0x23,0x1c,0x18,0x1f,0x35,0x2f,0x59,0x9f,0x99,0xa2,0xce,0x3f,0x34,0x1e,0x2d,0x51,0xbd,0xb6,0xae,0xaa,0x3e,0x27,0x31,0xe4,0xb8,0xbc,0xb3,0xab,0xdb,0xca -,0xbf,0xdf,0x42,0x32,0x44,0x37,0x39,0x5e,0x37,0x40,0x40,0x3f,0x3a,0xc6,0x9e,0x9b,0xa7,0xcd,0x6b,0x2a,0x1d,0x1d,0x5a,0xa6,0xa2,0xc5,0x47,0x30,0x2b,0x2b,0x3c,0xfb -,0x2f,0x3e,0xb6,0xa1,0xa8,0xb5,0xa0,0x9e,0xc6,0x2f,0x2e,0xbc,0x43,0xb8,0xb8,0x4a,0x35,0x20,0x2f,0x2a,0x2a,0xc4,0xb0,0xb7,0xc7,0xca,0xa5,0x6e,0x32,0x2f,0xfd,0x3a -,0x32,0x5a,0xf3,0xce,0xfb,0xc3,0xd7,0x3f,0x3a,0xa4,0x9c,0x9e,0xb6,0x3d,0x25,0x20,0x3b,0xbc,0xb8,0xc8,0xc2,0x3d,0x29,0x1f,0x21,0x2b,0xbc,0xae,0xad,0xac,0xb2,0xb9 -,0x3e,0x39,0x39,0xca,0xbf,0xc5,0xbe,0xa9,0xac,0xcc,0x2a,0x26,0x32,0x21,0x2e,0x4e,0xad,0xc3,0xac,0x9b,0xa0,0xc3,0xdf,0xba,0x45,0x3c,0x33,0x28,0x1e,0x2b,0x3e,0xd1 -,0x3b,0x30,0x4f,0xd7,0xb1,0xba,0xc3,0x7d,0xc9,0xaf,0xa1,0xad,0xb3,0xb8,0xef,0x38,0x36,0x2f,0x21,0x28,0x2f,0xcd,0xac,0x9c,0xa4,0xaf,0x3f,0x2c,0x23,0x23,0x36,0x3a -,0x67,0x42,0xc3,0xb1,0xaf,0x50,0x4a,0xd1,0xd0,0xde,0xab,0x9f,0xa9,0xba,0x51,0x4a,0x4b,0x6a,0xbf,0xcd,0x25,0x2c,0x40,0x46,0x2d,0x25,0x3b,0xde,0x4b,0x4d,0xb5,0xb0 -,0xb9,0xc3,0xaa,0xa8,0xbe,0xc7,0xc1,0xc6,0x2b,0x1f,0x2d,0x25,0x26,0x44,0xb4,0xb5,0xb9,0xa8,0xa6,0xbf,0x2d,0x25,0x2d,0xea,0xac,0xa1,0xaa,0x6a,0x30,0xba,0xa6,0xdd -,0x28,0x1b,0x20,0x4f,0xa9,0x9f,0xb4,0x56,0x40,0x3d,0x4d,0x2f,0x26,0x29,0x4a,0xc6,0xaf,0xad,0xc9,0x47,0xdb,0xa7,0xaa,0x76,0x3c,0x47,0xbd,0x60,0x6a,0xb1,0xac,0xa5 -,0xa8,0xb5,0x2c,0x1b,0x1c,0x20,0x1f,0x1d,0x1f,0x2e,0x55,0x9e,0x99,0x9f,0xc9,0x33,0xce,0xa9,0x9f,0xac,0xb8,0x36,0x37,0xb9,0xb4,0x37,0x21,0x22,0x37,0x70,0xb7,0xae -,0xb5,0xbe,0xd1,0xb3,0xb8,0x3e,0x2d,0x4a,0x47,0x2e,0x2c,0x34,0x3d,0x3f,0xe4,0xeb,0x61,0xc0,0xb9,0xa9,0xaf,0xb6,0xbf,0xb8,0xc3,0xcc,0xf1,0x3a,0x29,0x28,0xe6,0xca -,0xbf,0x46,0x37,0x39,0xac,0xa9,0xb7,0x3f,0x22,0x26,0x39,0xbf,0xab,0xab,0xdb,0x43,0x41,0xb5,0x69,0x22,0x1d,0x2a,0x54,0xb0,0xa4,0xa0,0xa5,0xab,0xb2,0xbb,0xfb,0x3e -,0x3a,0x32,0x2f,0x3b,0xb5,0xad,0xbf,0x53,0xd9,0x59,0x2f,0x28,0x2d,0x34,0x34,0x31,0x51,0xa7,0x9f,0xaa,0xbd,0x3b,0x25,0x3b,0xb3,0xbf,0x49,0x2c,0x2e,0xbc,0x9f,0x9e -,0xae,0x49,0x29,0x2b,0x37,0xdf,0xbc,0xcd,0xda,0x4f,0xcc,0xb8,0x46,0x28,0x2c,0x4e,0x4d,0x57,0x4a,0xbb,0xaa,0xb3,0xb6,0xbd,0x6a,0xbe,0xb1,0xc0,0x64,0x33,0x34,0x51 -,0xee,0x3e,0x35,0x1f,0x24,0x57,0xb0,0xaa,0xa9,0xc9,0xb1,0x9d,0x99,0x9f,0x3b,0x19,0x15,0x2f,0xdc,0xc9,0x27,0x1d,0x2d,0xdb,0xae,0xaf,0xeb,0x30,0x3c,0xd6,0xa5,0x9f -,0xbb,0xd6,0xc5,0xb0,0xa4,0xba,0x23,0x1a,0x1f,0x35,0x5f,0x5e,0xc2,0xa4,0x9e,0xa3,0xbd,0x2a,0x27,0x2b,0x3f,0x3e,0x36,0x32,0xca,0xa8,0xaa,0xa6,0x4b,0x28,0x29,0xcc -,0xb0,0xcc,0x2c,0x35,0xb7,0x9a,0x91,0x9c,0x58,0x1e,0x22,0x35,0xcd,0x26,0x1a,0x1c,0x29,0xd7,0xb2,0xac,0xa6,0xb3,0x2f,0x29,0x4b,0xab,0xac,0xad,0xb6,0xb5,0xb9,0x3d -,0x2a,0xb9,0x98,0x97,0x45,0x0d,0x09,0x20,0x93,0x94,0xb1,0x34,0x4e,0xf8,0x25,0x2d,0xb8,0x9f,0xad,0x26,0x0e,0x12,0xb8,0x94,0x99,0x9a,0x9d,0xc7,0x1c,0x10,0x27,0x98 -,0x8d,0xbb,0x0e,0x08,0x35,0x8f,0x8e,0xb4,0x2a,0x34,0x18,0x10,0x24,0x9d,0x93,0x93,0x27,0x0f,0x25,0x9f,0x9f,0xa4,0x99,0xa7,0x39,0x0b,0x0c,0x28,0x8e,0x88,0xa5,0x0e -,0x08,0xce,0x8d,0x8e,0x9b,0xbc,0x36,0x1c,0x0e,0x15,0xab,0x8a,0x8e,0x2c,0x0a,0x0f,0x6d,0xa8,0x9f,0x94,0xa6,0x2f,0x0d,0x0a,0x3d,0x8a,0x84,0xa4,0x0e,0x08,0x22,0xa7 -,0x99,0x9c,0xab,0x3f,0x18,0x0f,0x17,0x9f,0x86,0x8d,0x3d,0x0b,0x0b,0x2e,0xab,0x98,0x93,0xa5,0x36,0x0d,0x0b,0x5a,0x8a,0x87,0xc3,0x0f,0x0b,0x1e,0xae,0x9e,0x9d,0x99 -,0x9a,0x20,0x08,0x0d,0xa3,0x84,0x8f,0x20,0x09,0x0d,0x66,0xac,0x9a,0x93,0x9c,0xf8,0x0e,0x0c,0x3f,0x8c,0x87,0xcc,0x0e,0x0e,0x6e,0x9d,0xa6,0x9f,0xa0,0xb2,0x1b,0x0a -,0x0e,0xbd,0x89,0x91,0x1c,0x0a,0x14,0xa4,0x99,0x97,0x97,0xa0,0x2e,0x0d,0x0b,0x37,0x89,0x87,0xce,0x0f,0x11,0x4c,0xa0,0xa9,0x9f,0x9d,0xae,0x12,0x08,0x18,0x9a,0x86 -,0xa2,0x0d,0x0d,0x33,0xa3,0xa9,0xa8,0xaa,0xb0,0x2d,0x11,0x1b,0x9a,0x83,0x90,0x19,0x0a,0x2b,0x9e,0xa6,0x4e,0xc7,0xb6,0x33,0x0b,0x09,0x63,0x87,0x86,0x3f,0x09,0x11 -,0xa1,0xa9,0xb2,0x9e,0x98,0xb9,0x19,0x0a,0x1c,0x8e,0x87,0xb2,0x14,0x15,0x2f,0xad,0x43,0xae,0xa4,0xa9,0x2a,0x15,0x1a,0xa6,0x88,0x95,0x1d,0x0b,0x1c,0xb5,0x9f,0xa9 -,0xa8,0xad,0x3a,0x12,0x0f,0x3d,0x8a,0x89,0x38,0x0b,0x0f,0xb1,0x9e,0x9f,0xa8,0xb2,0x6e,0x16,0x0c,0x1c,0x96,0x87,0x9d,0x21,0x13,0x29,0xa8,0x9f,0x9a,0xa7,0xb5,0x22 -,0x0c,0x0f,0x48,0x8e,0x90,0x2d,0x0d,0x10,0xa8,0x92,0x97,0xa4,0xcd,0x7b,0x1d,0x0f,0x21,0x98,0x8c,0xa9,0x17,0x0e,0x27,0x9d,0x97,0x9d,0xa4,0xaf,0x1c,0x0c,0x13,0xad -,0x8c,0x99,0x1e,0x0d,0x1b,0xa4,0x92,0x9a,0xaf,0xca,0x4c,0x17,0x0f,0x2f,0x98,0x8e,0xaa,0x17,0x16,0x2b,0xb0,0x9e,0x9e,0xa2,0xc6,0x19,0x0d,0x1e,0x9b,0x8c,0x9c,0x21 -,0x11,0x1f,0xad,0x9e,0xa3,0xaf,0xbc,0x42,0x22,0x1c,0x4e,0x94,0x98,0x47,0x14,0x13,0x3a,0xa0,0x9e,0xa6,0xc3,0x3a,0x1a,0x10,0x20,0x95,0x8b,0xae,0x1b,0x18,0x47,0xa6 -,0x9a,0xa8,0xb5,0xcc,0x2a,0x19,0x18,0x50,0x9c,0x9d,0xd5,0x1e,0x22,0xd8,0xaf,0x9c,0xaa,0xc0,0xc9,0x2b,0x18,0x20,0xa4,0x9f,0xc5,0x23,0x1a,0x46,0x9f,0x9d,0xab,0x3d -,0x45,0x47,0x2a,0x2b,0xbb,0x9d,0xba,0x32,0x27,0x33,0x6e,0xab,0x9d,0xae,0x41,0x2d,0x24,0x1d,0x34,0xab,0xa0,0xa7,0xcd,0x2f,0x3a,0xb4,0xb0,0x3d,0x22,0x2d,0x64,0x3e -,0x33,0xd9,0xb4,0xb7,0xb5,0xa9,0xb4,0xb7,0xae,0x2e,0x2f,0x5b,0x5f,0x2f,0x27,0xb3,0xaa,0xeb,0x40,0x39,0xbf,0xba,0xb8,0xbe,0x29,0x26,0x2b,0xcb,0xc9,0xf8,0xda,0x38 -,0xbc,0xae,0xb4,0xb9,0xb0,0xbf,0x25,0x2e,0xd8,0xbe,0xcd,0x31,0x42,0x3a,0x47,0xc1,0xad,0x9c,0xa5,0x65,0x1a,0x17,0x35,0xb1,0xaa,0xb1,0x5d,0x25,0x1e,0x49,0x9e,0x94 -,0xa2,0x4f,0x3c,0x29,0x3b,0x5f,0xba,0xb8,0x42,0x27,0x1e,0x2d,0xb6,0x9d,0x9a,0xb8,0x29,0x19,0x23,0xaf,0xa4,0xb2,0x3c,0x43,0x26,0x1f,0xcf,0x9b,0x91,0x9f,0x42,0x1a -,0x19,0x2a,0xbe,0xa2,0xb6,0xe2,0x21,0x11,0x23,0x96,0x88,0x91,0xb6,0x19,0x0d,0x1f,0xaf,0x9d,0xab,0x48,0x1f,0x14,0x2d,0xa6,0x8f,0x8f,0xa2,0x29,0x0e,0x13,0x46,0x9c -,0x9d,0xb0,0x2d,0x0e,0x0f,0xd4,0x8d,0x88,0x9c,0x20,0x0c,0x14,0xeb,0x99,0x97,0xb6,0x45,0x1a,0x13,0x2d,0x9d,0x8d,0x90,0xad,0x17,0x0b,0x13,0x68,0x92,0x92,0xa6,0x1b -,0x0a,0x13,0xb1,0x89,0x89,0x9f,0x17,0x08,0x13,0xb8,0x92,0x96,0xac,0x34,0x13,0x12,0x2f,0x8f,0x8a,0x97,0x45,0x0d,0x0d,0x1e,0xa2,0x8d,0x91,0xfc,0x0c,0x0a,0x22,0x93 -,0x87,0x93,0x36,0x0d,0x0e,0x28,0xa2,0x95,0xa2,0xbf,0x20,0x11,0x18,0xc8,0x8b,0x8a,0x9a,0x1d,0x0a,0x17,0x2c,0x9e,0x95,0x9f,0x3c,0x0e,0x0d,0x3e,0x8a,0x85,0x9a,0x1e -,0x0d,0x15,0x28,0xb3,0x9c,0xa6,0x4b,0x12,0x0e,0x1d,0x99,0x86,0x8c,0xa4,0x10,0x08,0x15,0xa7,0x8d,0x92,0xc9,0x12,0x0b,0x19,0x9c,0x86,0x8b,0xbf,0x10,0x0c,0x1c,0xbc -,0x99,0xa5,0xab,0x4b,0x0f,0x0e,0xe3,0x8a,0x86,0x98,0x1d,0x09,0x0d,0x22,0xaa,0x90,0x90,0xef,0x0b,0x09,0x49,0x8a,0x85,0x95,0x36,0x0e,0x0c,0x1c,0xc3,0x96,0x93,0xac -,0x1d,0x0d,0x0f,0xb2,0x87,0x85,0x98,0x11,0x04,0x0f,0xc0,0x92,0x91,0x9e,0x1a,0x07,0x0b,0xb7,0x85,0x85,0xa8,0x0f,0x0a,0x1b,0xb9,0x9e,0x94,0x95,0x2d,0x0a,0x08,0x2d -,0x89,0x83,0x8f,0x3b,0x0d,0x0a,0x16,0xa8,0x8b,0x8d,0x70,0x0a,0x04,0x15,0x95,0x84,0x89,0xda,0x0d,0x0f,0x2c,0xbb,0xa1,0x95,0x9f,0x1e,0x0a,0x0b,0xca,0x86,0x84,0x9c -,0x12,0x0c,0x17,0x40,0x99,0x8d,0x90,0x25,0x05,0x03,0x3d,0x84,0x82,0x98,0x0e,0x07,0x0d,0x2b,0x9f,0x8d,0x8f,0x59,0x0e,0x09,0x1f,0x93,0x83,0x89,0x5d,0x0c,0x0a,0x13 -,0xc3,0x94,0x90,0xaa,0x1c,0x0a,0x17,0x92,0x85,0x8a,0x39,0x09,0x0b,0x26,0xb7,0x9f,0x9e,0xb3,0x1c,0x0c,0x11,0xa8,0x86,0x86,0x9d,0x1b,0x0c,0x0c,0x1e,0xa4,0x8c,0x8d -,0xd8,0x0c,0x0a,0x30,0x8b,0x85,0x92,0x22,0x08,0x0c,0x2a,0xa9,0x9e,0xa3,0x67,0x15,0x0d,0x2b,0x8f,0x86,0x8e,0x44,0x0d,0x0d,0x1c,0xaf,0x94,0x91,0xb5,0x15,0x08,0x1a -,0x8f,0x82,0x8a,0x7c,0x0c,0x08,0x19,0xba,0x9d,0x9f,0xb4,0x1e,0x0e,0x11,0xaf,0x8a,0x8a,0x9b,0x32,0x0f,0x12,0x2e,0xac,0x9b,0xa0,0x49,0x12,0x0e,0x49,0x89,0x85,0x96 -,0x1a,0x0a,0x0f,0x30,0xa3,0x9c,0xb2,0x20,0x0f,0x0d,0x2d,0x8e,0x85,0x8b,0xb4,0x12,0x0e,0x1b,0xcb,0x9d,0x9a,0xe7,0x14,0x0f,0x2c,0x93,0x89,0x8e,0xe5,0x14,0x14,0x20 -,0xdd,0x9d,0xae,0x20,0x10,0x16,0x3c,0x9a,0x8a,0x8e,0xc0,0x1a,0x1a,0x26,0x6e,0xad,0x9e,0xb9,0x1f,0x14,0x23,0xa1,0x8d,0x8d,0xa6,0x20,0x12,0x1b,0x27,0x48,0xab,0xba -,0x29,0x1c,0x21,0xae,0x91,0x8e,0x9c,0x24,0x17,0x1b,0x36,0xa9,0xae,0xd5,0x2a,0x1f,0x2d,0xaa,0x8f,0x8d,0x9c,0x28,0x13,0x17,0x29,0xb0,0xb0,0xd9,0x3a,0x23,0x1f,0x3e -,0x9c,0x95,0x9b,0xc5,0x1a,0x15,0x30,0xab,0xaf,0x40,0x2f,0x33,0x44,0xb0,0x9f,0x99,0xa1,0x55,0x23,0x1e,0x36,0xd5,0x7d,0x4d,0xd3,0xc7,0x35,0x33,0xde,0xb8,0x9f,0xa0 -,0xdd,0x1a,0x15,0x2e,0xbd,0x9f,0xa1,0x42,0x24,0x2a,0x69,0xa2,0x9a,0x9e,0x51,0x1f,0x1b,0x20,0xb9,0x94,0x9d,0x2d,0x12,0x18,0x48,0x9d,0x91,0x9a,0xcb,0x15,0x0d,0x1a -,0x9e,0x8d,0x93,0x2f,0x08,0x0e,0x60,0x8d,0x8b,0x9d,0x2e,0x15,0x1d,0x3b,0x9e,0x94,0xa5,0x1c,0x08,0x0f,0xbd,0x8d,0x8f,0xb6,0x29,0x21,0x3a,0x60,0xad,0x96,0x9c,0x28 -,0x0b,0x0e,0xd0,0x96,0x95,0xae,0x34,0x2e,0x2e,0x3e,0xa7,0x9a,0xdc,0x1f,0x1e,0x2e,0x63,0xf6,0xc9,0xc9,0xd2,0xb2,0xaf,0xbf,0xdb,0x3d,0x3e,0xc1,0xa9,0xe0,0x1e,0x1b -,0x41,0x97,0x90,0xaa,0x1f,0x1e,0x22,0x29,0xbc,0xa4,0x9e,0x6c,0x1a,0x12,0x32,0x9c,0x92,0x98,0xa9,0x20,0x0e,0x14,0xc5,0x8d,0x91,0xbc,0x0f,0x0e,0x2b,0x9c,0x8a,0x8e -,0x6b,0x0a,0x07,0x21,0x94,0x8b,0xa7,0x19,0x0f,0x18,0x70,0x98,0x8c,0x8d,0x42,0x09,0x09,0x3b,0x8f,0x8d,0xa6,0x1c,0x16,0x17,0x42,0x95,0x8c,0x98,0x20,0x0a,0x0f,0xb6 -,0x8b,0x97,0x28,0x0f,0x17,0xb3,0x97,0x94,0xab,0x24,0x1b,0x21,0xd5,0x9c,0xa6,0x2f,0x1b,0x2b,0xc4,0x9b,0x95,0xb2,0x1f,0x1d,0x58,0xa8,0xc7,0x2a,0x2a,0x3e,0x3b,0x35 -,0xaf,0x91,0x8f,0x35,0x0d,0x11,0xc3,0x8d,0x94,0x23,0x0f,0x0f,0x2a,0x9f,0x8e,0x8a,0xb5,0x0e,0x0b,0xf0,0x88,0x88,0xd4,0x08,0x08,0x22,0x9d,0x86,0x8c,0xc7,0x08,0x0c -,0x35,0x91,0x8e,0xcc,0x2f,0x00,0x03,0x07,0xe0,0x8e,0xb3,0xb6,0x05,0x16,0x93,0x8b,0x8a,0x9a,0xb4,0x45,0x9a,0x99,0x8b,0x80,0x9c,0x06,0x11,0x18,0x97,0x80,0x9e,0x21 -,0x32,0x22,0x20,0x98,0xd1,0x13,0x00,0x02,0x08,0x26,0x1b,0x07,0x03,0x05,0x0c,0x0e,0xa6,0x41,0x17,0x11,0x1d,0xc1,0x98,0xa1,0xbc,0xc4,0xae,0x9f,0xa6,0x87,0x84,0x83 -,0x91,0x9a,0x8a,0x89,0x80,0x85,0x88,0x8a,0x9c,0x8d,0x8d,0x85,0x83,0x9a,0x04,0x07,0x95,0xa4,0x3a,0x07,0x00,0x06,0x05,0x03,0x29,0x37,0x0f,0x05,0x00,0x17,0x0e,0x08 -,0x04,0x05,0x16,0x18,0x2b,0xbf,0xa0,0xad,0x9f,0xb0,0x9a,0x88,0x86,0x87,0x8f,0x8e,0x8d,0x8c,0x84,0x84,0x89,0x8d,0x9c,0x8e,0x93,0x8f,0xb0,0xab,0xce,0xc5,0xa6,0xa9 -,0x9e,0x36,0x17,0x09,0x10,0x19,0x10,0x0a,0x04,0x05,0x0d,0x0c,0x0c,0x13,0x1c,0x10,0x09,0x06,0x0f,0x29,0xb9,0x29,0x2f,0x3d,0x48,0x9e,0x8e,0x87,0x8c,0xbb,0x21,0x48 -,0x9b,0x88,0x8c,0x95,0x7a,0xa5,0x85,0x85,0x81,0x87,0x89,0x90,0x98,0x88,0xa1,0x99,0x9e,0x2a,0x1a,0x18,0x29,0x10,0x0f,0x18,0x0b,0x09,0x09,0x0b,0x02,0x13,0x1b,0x0c -,0x09,0x0d,0x10,0x10,0x4b,0x2f,0x39,0x0e,0x26,0x2c,0xa5,0x8c,0xb9,0xb1,0xc8,0x90,0x82,0x8b,0x8f,0x89,0x8a,0x8d,0x8b,0x89,0x8a,0x8e,0x92,0xaa,0x9d,0x9c,0xa6,0xad -,0xb6,0x9f,0x1f,0x16,0x17,0x5a,0x69,0x1c,0x27,0x1a,0x0c,0x0c,0x06,0x1e,0xbc,0x1c,0x04,0x03,0x00,0x18,0xae,0x19,0x2a,0x0d,0x14,0x07,0x56,0xa1,0x99,0x89,0x4d,0x2a -,0xb9,0x89,0x93,0x89,0x8e,0xa6,0xdb,0x2b,0x85,0x83,0x8c,0x9c,0x24,0x9e,0x89,0x82,0x89,0x8a,0x97,0x48,0x29,0x27,0x95,0x99,0x1a,0x0a,0x0b,0x0b,0x0b,0x0f,0x0f,0x07 -,0x12,0x06,0x0e,0x16,0x13,0x5e,0x14,0x04,0x15,0xd2,0x24,0x26,0x38,0x1d,0x1d,0x2e,0x9d,0x83,0x9c,0xa6,0x29,0x96,0x9e,0x9a,0x89,0x89,0x8c,0x26,0x9f,0x86,0x80,0x95 -,0xa6,0x4b,0x5d,0x21,0xb2,0x91,0x86,0xa2,0x04,0x0a,0x9b,0x88,0x97,0xa5,0x0b,0x0b,0x08,0xe3,0x59,0x17,0x9d,0x08,0x01,0x04,0x0e,0xa6,0x2f,0x2c,0x05,0x02,0x0c,0x1d -,0x95,0xa4,0x43,0x07,0x1d,0x52,0x9f,0x80,0x93,0x98,0xba,0xc1,0x9c,0x8a,0x88,0x8a,0x8a,0xc3,0x2b,0x89,0x80,0x9e,0xb9,0x9f,0x89,0x96,0x9b,0xb4,0x1c,0x1f,0x3d,0xbe -,0xb2,0xa4,0x19,0x16,0x06,0x21,0x2e,0x20,0x27,0x08,0x0d,0x08,0x0e,0x0c,0x9f,0xc0,0x0b,0x08,0x0c,0x28,0xc0,0xae,0x9f,0x24,0x0f,0x1d,0x23,0x94,0xa1,0x8d,0x9c,0x9b -,0xab,0x9e,0x83,0x93,0x85,0x33,0x2b,0x9d,0x9b,0x83,0x8f,0xa3,0x27,0x96,0xa7,0x98,0x81,0xa0,0x49,0x12,0x38,0xa2,0x94,0x9d,0x0a,0x13,0x0f,0x16,0x26,0x19,0x79,0x0d -,0x08,0x0e,0x1b,0x0f,0x18,0x0a,0x0b,0x12,0x09,0x14,0x48,0xa6,0x1b,0xdc,0x4b,0xba,0x9d,0x8c,0xb5,0xaf,0x9b,0xba,0x8f,0x8b,0x89,0x90,0xa0,0xa1,0x8e,0x86,0x8e,0x3f -,0x97,0xa5,0x4c,0xc3,0x92,0x99,0xb0,0x0e,0x1e,0xdd,0x9c,0x9e,0x53,0x1f,0x0b,0xd0,0x1d,0x23,0x1d,0xa1,0x14,0x1d,0x0e,0x29,0x2f,0x1e,0x97,0x13,0x0b,0x09,0x19,0x1e -,0x28,0x1d,0x1c,0x0e,0x2e,0x36,0xbf,0xc1,0x97,0xad,0x1c,0xb6,0xa6,0x9d,0xa1,0xa7,0xd5,0x8c,0xa7,0x8b,0x8f,0x8e,0x88,0x9b,0xad,0x9b,0x85,0x8f,0x9d,0xbb,0xad,0x27 -,0x95,0xe9,0xa7,0xa7,0x1b,0x1b,0x09,0x1a,0x29,0x23,0x05,0x08,0x12,0x1b,0x15,0x1e,0x15,0x15,0x0f,0x15,0xc4,0x29,0x10,0x14,0x29,0x09,0xb0,0x96,0xb1,0x9f,0xa0,0x98 -,0xb9,0x99,0x9f,0x8d,0x90,0x9d,0x95,0x89,0xa5,0xa4,0x87,0x9d,0x8f,0xb0,0x9a,0xae,0x9b,0x9a,0x18,0xfa,0xb7,0x2f,0x0e,0x2e,0xcb,0x3a,0x29,0x27,0xc3,0x1e,0x9b,0x40 -,0x0c,0x20,0x32,0x1f,0x26,0x1c,0x27,0x1c,0x0b,0x21,0x16,0xc2,0x16,0x49,0xbe,0x19,0x12,0x3a,0x1f,0x2a,0x1c,0x1b,0xa2,0xa4,0xaa,0xad,0x8f,0xa7,0x85,0xb7,0xd6,0x91 -,0x8b,0x97,0x25,0x9a,0x9b,0x8e,0x8b,0xa7,0x8d,0x8e,0xb4,0x41,0xbb,0x9b,0x9e,0x2f,0x0d,0x2d,0xdc,0x0d,0x24,0xb3,0x23,0x0b,0x2a,0x2e,0x09,0x1f,0x06,0x0c,0x14,0x19 -,0x17,0x1d,0xc6,0x2a,0x1e,0x22,0x2c,0x97,0x2e,0x20,0xa1,0x3f,0xab,0x1d,0xa8,0x9b,0x8d,0x88,0xa9,0x9a,0x8b,0x8b,0x9a,0x5a,0x9c,0x8b,0x6f,0xb3,0x98,0x99,0x9b,0x9b -,0x2a,0xbb,0x9e,0x50,0x1d,0x0e,0xad,0x25,0x34,0x1b,0x16,0xce,0x1a,0x1e,0x3d,0x2f,0x20,0x25,0x19,0x2e,0x13,0x0d,0xa5,0x1d,0x09,0x1a,0x32,0x3a,0x2b,0x2b,0xb9,0xbb -,0x9a,0xae,0x27,0x98,0x91,0x93,0x38,0xab,0x9e,0x99,0xa7,0x8f,0x97,0xc4,0x98,0xb9,0x9a,0xab,0x96,0x93,0x22,0x0e,0xa5,0xcc,0x9b,0x9f,0x11,0xad,0x9c,0x37,0x0e,0x1b -,0x9b,0x8a,0x12,0x02,0x0e,0x1b,0x2f,0xb1,0xb2,0x21,0xe5,0x35,0x2a,0x30,0x4d,0x16,0x1f,0x2c,0x11,0x16,0x90,0xa7,0x23,0x31,0x63,0x41,0x9b,0xd4,0x0c,0x92,0x63,0xab -,0x2a,0x29,0x88,0x93,0x97,0x8e,0xa4,0x92,0x9c,0x97,0x97,0x9d,0x8f,0xe7,0x26,0x79,0x95,0x9d,0x9d,0x14,0x2f,0x9d,0x1b,0x14,0x0f,0x0b,0xbe,0xde,0x0a,0x0c,0x0e,0x44 -,0x2b,0x26,0x25,0x07,0x35,0x67,0x1c,0xbb,0xcb,0x96,0x38,0xde,0x9c,0x95,0x89,0x3a,0xbf,0xa5,0x8b,0x95,0x1f,0xad,0xb1,0x95,0x93,0x1c,0x19,0xa4,0x90,0xad,0x2e,0x36 -,0xdb,0xa8,0xc7,0x1d,0x20,0xbd,0xa1,0x57,0x0a,0x13,0xbc,0xbc,0x2a,0xc6,0x33,0xc9,0x98,0x15,0x1e,0xa8,0x9f,0x6d,0x07,0x20,0xab,0x9d,0x9b,0xc1,0x30,0x58,0x98,0x44 -,0x38,0x4c,0xb4,0x1c,0x0a,0x0a,0xd4,0x9a,0x24,0xda,0x0f,0xa7,0x8e,0x3b,0x25,0x13,0x9e,0x8f,0xbe,0x11,0x36,0x95,0x8f,0x88,0x9f,0x2e,0x8f,0x8b,0x97,0x1f,0xb5,0xa2 -,0x2e,0xae,0x18,0xa7,0x9b,0x69,0x0d,0x11,0xdd,0x2e,0x0b,0x09,0x39,0x9e,0x26,0x17,0x0a,0x1b,0x3d,0xa1,0x94,0x12,0x2f,0x6c,0xc5,0xd3,0xad,0xbf,0x9d,0x9f,0x25,0x1c -,0x95,0x9a,0xbb,0x19,0xbb,0x8e,0xf7,0x3e,0x12,0x8c,0x87,0xa2,0x16,0x14,0xa6,0x8d,0x8d,0x11,0x1a,0x28,0x9e,0x98,0x17,0xa5,0x5c,0x9a,0x4f,0x06,0x1c,0x2d,0x5b,0x2d -,0x1c,0xa3,0x95,0x51,0x19,0x17,0x9d,0x90,0xaa,0x06,0x0e,0xbe,0x97,0xad,0x20,0x1c,0xab,0x8a,0xa8,0xbc,0x31,0xb0,0x9f,0x24,0x0b,0xbd,0xa9,0xaa,0x2c,0x1c,0x98,0x9b -,0xa4,0x12,0x1a,0x8b,0x94,0x3b,0x0c,0x14,0x92,0x95,0x99,0x23,0x27,0xa3,0xa0,0x2d,0x2d,0x48,0x9a,0x9c,0x26,0x24,0x27,0xa4,0xb8,0x36,0xb5,0x94,0xa8,0x0d,0x06,0x2c -,0x8a,0x8e,0x11,0x07,0x19,0x9a,0x8f,0xac,0x16,0x3a,0xda,0x4f,0x1e,0x14,0xa3,0x9d,0xb1,0x0c,0x22,0xa2,0x96,0xaf,0x53,0x75,0x32,0x9f,0x20,0x30,0x90,0x8a,0x8d,0x25 -,0x14,0x4f,0x8e,0x92,0x21,0x18,0x2c,0x8f,0x9d,0x1f,0x3a,0xa5,0x9e,0xbf,0x1b,0x2c,0xab,0xcd,0x1b,0x15,0xb8,0x9b,0x2b,0x11,0x30,0x93,0x8e,0x32,0x0e,0x0d,0xa5,0x98 -,0xae,0x22,0x18,0xbe,0xa0,0x3e,0x3d,0xa7,0xaa,0xb9,0x1c,0x1b,0x1c,0xb1,0xad,0x58,0x1c,0x48,0x9e,0x3c,0x2b,0x3e,0xab,0xb1,0x37,0x1c,0x19,0x9d,0x8d,0xb9,0x38,0x24 -,0xa8,0xa1,0x3c,0xa5,0xaf,0xbb,0x26,0x1c,0x52,0x9d,0x92,0xae,0x2b,0x1e,0xb7,0xb4,0x1e,0x2b,0xa3,0xb7,0x1c,0x1a,0x48,0xab,0x94,0xa0,0x1b,0x1c,0x5a,0x6a,0x34,0x48 -,0x45,0xc1,0xc2,0x3c,0x26,0xab,0x94,0xa1,0x1a,0x14,0x26,0x38,0xb2,0xdb,0xd5,0xad,0xcc,0x33,0x49,0x9e,0x93,0x9f,0xa9,0x12,0x24,0xb1,0xbe,0x3c,0x1f,0xae,0x9a,0xa5 -,0x1e,0x25,0xb5,0x92,0x9c,0x26,0x15,0x36,0xaf,0x3e,0x2d,0xb5,0xbd,0x49,0x23,0x18,0xb0,0xa4,0xb3,0x3e,0xfe,0xc4,0xad,0x42,0x71,0xa6,0xbf,0xce,0x26,0x27,0x29,0x5f -,0x9e,0x9c,0xaa,0xaa,0xaa,0x1f,0x20,0xe1,0x9f,0xb5,0x1d,0x2c,0x43,0xaf,0xad,0xb6,0x2a,0x2b,0xe1,0xa8,0x9a,0x24,0x27,0xac,0x2d,0x2d,0xea,0x51,0xb7,0x23,0xce,0xc9 -,0x4f,0xa5,0x62,0xbc,0x38,0x4c,0xeb,0x41,0x21,0x15,0x57,0xb9,0xc4,0xa8,0xa9,0xb1,0x2f,0x7a,0xac,0x17,0x36,0xaf,0xd5,0x3f,0x21,0xcb,0xad,0x90,0xa7,0xba,0xb8,0x12 -,0x2d,0xaa,0xc6,0xde,0x36,0xb9,0x9c,0x4c,0x5b,0xe1,0x53,0x2e,0x2b,0xc4,0x34,0xbf,0xa2,0xb5,0x50,0x2f,0xa4,0xa7,0x34,0x1e,0x1e,0xce,0x2d,0x3b,0xc7,0xd8,0xbf,0xa1 -,0x9e,0x4f,0x2b,0x25,0x57,0x46,0x36,0xe8,0xa0,0xa5,0xe4,0x5b,0x1d,0x2c,0x9c,0x9f,0x1a,0x2b,0xc8,0xcf,0xaa,0x35,0x43,0xb9,0xa9,0x29,0xcb,0xac,0x25,0xd2,0xad,0xab -,0x42,0x2c,0x2e,0x38,0x2f,0xe2,0xba,0xaa,0x2e,0x24,0xbc,0x39,0xab,0xa2,0xae,0x1a,0x19,0xcd,0xa2,0xa3,0x55,0x55,0x23,0x34,0x71,0xa6,0xb6,0x1c,0x29,0x33,0xde,0xab -,0xc0,0x9b,0x9b,0x45,0x41,0x1d,0xc9,0x2f,0x36,0x41,0x23,0x9e,0x96,0xa4,0x57,0xba,0x53,0x4a,0x2a,0x2f,0x32,0x4b,0x3a,0x52,0xa8,0x7b,0x9d,0x9b,0x58,0x1d,0x19,0x22 -,0xb7,0xd0,0x36,0x51,0xae,0x9c,0xb0,0xe1,0x30,0x2d,0x70,0xaf,0x2f,0x28,0x49,0xa7,0xb0,0x31,0xb9,0xab,0xdc,0x35,0x2a,0x21,0x32,0x5f,0xae,0xbc,0xa2,0xba,0x3e,0xa2 -,0xc9,0x6b,0xdb,0x39,0x1f,0x22,0xb7,0xb2,0xb4,0xd9,0xa5,0xa0,0xd2,0x34,0x1c,0x30,0x35,0xb5,0xb2,0xb0,0x4d,0x1f,0x61,0xaa,0xb8,0xdd,0x36,0x1b,0x19,0xba,0xa6,0x43 -,0x9f,0xa3,0xd3,0x22,0x2b,0xbe,0xa0,0x63,0x2b,0x42,0xa5,0x9a,0x5e,0x32,0x20,0xbe,0xae,0xc7,0x3b,0x3c,0x6b,0xa1,0xaa,0x38,0x3d,0x3f,0xba,0x42,0x2b,0x1e,0x22,0xa7 -,0x94,0xe6,0x33,0x4c,0xc9,0xac,0x38,0x1e,0x20,0x50,0xcd,0x7e,0xbe,0xbf,0x98,0x9c,0x36,0x2c,0x3b,0xbd,0x38,0x1a,0x18,0x48,0x9d,0xa2,0x62,0x2d,0x2f,0xb2,0x96,0xdf -,0x1d,0x16,0x24,0x95,0xa0,0xa4,0x9b,0x43,0x28,0x27,0x6f,0xd7,0xce,0xbe,0x5f,0x28,0x2b,0xab,0x9e,0x9d,0xbd,0x3c,0x26,0x17,0x3d,0xc2,0x54,0x4d,0xbc,0x9c,0x3e,0x38 -,0xc1,0xeb,0x62,0x2b,0x2b,0x3f,0xbe,0xad,0xa7,0x41,0x2a,0xbe,0x9d,0xb0,0x1d,0x18,0x38,0xa1,0xb0,0x53,0xde,0x36,0xcf,0xc9,0x3a,0xb9,0xfb,0xcd,0xd6,0x2e,0x74,0x98 -,0x9c,0x65,0x17,0x18,0x2a,0x2d,0x9f,0xa4,0x36,0x2b,0x9e,0x9c,0x46,0x2a,0x26,0x4c,0xc1,0x2e,0x27,0xac,0xaa,0xb4,0xa4,0xce,0x34,0xad,0xa6,0x26,0x18,0x1c,0xd5,0x9e -,0xa4,0xb3,0xad,0x47,0x39,0xb8,0x2f,0x1c,0x1c,0xc5,0xb7,0x37,0x4c,0xbe,0xa5,0xb4,0xda,0xbe,0x2e,0x2a,0x31,0x54,0xbb,0xc1,0x98,0x9b,0xc2,0x45,0x21,0xab,0xae,0x1d -,0x29,0x1c,0x36,0xa6,0x9a,0xb4,0x1d,0x46,0xb1,0x2f,0x1c,0xbb,0x9a,0xa8,0x1a,0x18,0xc1,0xb9,0xa9,0x98,0xad,0x0f,0x17,0x9e,0x94,0xe7,0x2a,0x32,0xb4,0xa1,0xae,0xd3 -,0x2d,0x23,0x2b,0xb8,0x4f,0x5a,0x9c,0x9f,0x26,0x10,0x2d,0xb8,0x4a,0xac,0xad,0x4c,0x33,0xd8,0x99,0xa7,0x27,0x2f,0x5b,0xe2,0x2d,0x33,0x97,0xa2,0x1e,0x35,0xab,0xda -,0x3b,0x41,0x3d,0x13,0x20,0x97,0x9f,0xe9,0xdb,0xa7,0xd8,0x1e,0x32,0xc4,0x36,0x22,0x41,0xa9,0x2f,0x65,0x92,0x9c,0x2f,0x18,0xb7,0x9d,0x49,0x31,0x25,0x2d,0x33,0xaa -,0x8f,0xa1,0x29,0x26,0xc5,0xd3,0x28,0x35,0xc8,0xdb,0xc7,0xa7,0xb7,0x27,0x4d,0x9d,0xf2,0x18,0x25,0xa1,0xac,0x27,0x36,0xbc,0x3a,0x2a,0xae,0x9f,0x3f,0x17,0x39,0x9e -,0xb2,0x31,0xa6,0xa9,0x1e,0x27,0xb1,0x9d,0x47,0x2b,0xbc,0xe5,0x42,0xe3,0xa3,0x2e,0x19,0xbc,0xa3,0x61,0x25,0xdb,0xa8,0x32,0x5b,0xa1,0x68,0x18,0x1b,0xd4,0xab,0x2d -,0x3a,0x91,0xa7,0x27,0x45,0x9c,0xaa,0x29,0xaf,0xad,0x22,0x2b,0xb2,0xa4,0x3e,0x2a,0xa7,0xa9,0x30,0x25,0xb4,0x21,0x17,0x57,0x9f,0xa5,0x2e,0xc0,0xa8,0x3b,0x20,0xaf -,0xad,0x27,0x1d,0x38,0xa0,0xb9,0xaf,0xaa,0xf0,0x21,0x21,0xa0,0x9c,0x3a,0x25,0xce,0x45,0x2e,0xbd,0x9e,0xd7,0x1d,0x2f,0x34,0xc6,0xff,0xb1,0xa1,0x18,0x20,0xa6,0x9f -,0x4d,0x34,0x9d,0x55,0x29,0xa5,0x99,0x4b,0x29,0xd0,0x46,0x3a,0x1f,0xab,0x9c,0xe3,0x25,0x3c,0xb2,0x37,0xb4,0xbc,0x3b,0x18,0x1b,0xa9,0x9b,0xc3,0x3a,0xcd,0x2b,0x3d -,0xaa,0x9e,0x34,0x0f,0x3e,0xa0,0xad,0xbd,0xa0,0x9e,0x1f,0x1c,0xb3,0xb8,0x35,0xde,0xb7,0x43,0x34,0x32,0xa9,0xac,0xc8,0x5d,0x3b,0x5a,0x25,0xbe,0xb7,0x3a,0x2b,0x3c -,0xad,0xd8,0xa4,0xa6,0x27,0x17,0x2c,0xc3,0x4b,0x6d,0x7d,0x9b,0xaf,0x21,0x55,0xa9,0xee,0x21,0xb6,0xa8,0xc9,0x3b,0xb7,0x9d,0x31,0x23,0x47,0xcc,0xc1,0x4a,0x5a,0xc0 -,0xcd,0xc8,0x78,0x41,0x45,0xba,0xb4,0x2f,0x2c,0x5b,0xb6,0x5a,0x47,0xae,0xb6,0x24,0x26,0xc1,0xbb,0xc6,0x3f,0xba,0x9e,0xf8,0x65,0xcc,0x49,0x2b,0x31,0xb0,0x2a,0x2b -,0x33,0xc1,0xc5,0x36,0x46,0xf0,0xae,0x35,0xca,0xb4,0x27,0x28,0xa8,0xa9,0xd7,0xa6,0xcd,0x38,0xb9,0xa9,0xa8,0x59,0x1b,0x2b,0x5b,0xa4,0x9b,0xaa,0x41,0x19,0x24,0xd0 -,0xb3,0xb8,0xae,0x2f,0x45,0x2e,0x1f,0xa6,0xb0,0x33,0x23,0xb6,0xc7,0x4b,0x52,0x50,0xaf,0xd6,0xaa,0xc6,0x48,0x68,0xb7,0x3c,0x2b,0x2c,0xc9,0xa1,0x40,0x62,0x58,0x43 -,0x47,0x5e,0xb4,0x53,0x31,0x6f,0x3d,0xce,0xa9,0xb7,0x2c,0x22,0x52,0xcd,0xf6,0xbe,0xbb,0x6d,0xaa,0xbc,0x53,0xb3,0x68,0x56,0xdc,0x38,0x29,0x56,0xa7,0xa3,0xcc,0x25 -,0x22,0x74,0xb4,0xc0,0x45,0x2d,0x56,0xe5,0xac,0xc8,0x34,0x5c,0xb4,0xc1,0x5d,0xbb,0xb8,0x33,0x29,0x5d,0xcd,0x99,0xc9,0x1a,0x1f,0xb5,0x9f,0x2f,0x25,0x3a,0xb0,0xa1 -,0xb4,0x6e,0xc0,0x51,0x2c,0x56,0xaa,0xb5,0x19,0x43,0xa6,0x2f,0x2e,0xe3,0xae,0x30,0x22,0x26,0xb2,0xbc,0x32,0xaf,0x98,0xac,0x32,0xb8,0x7d,0x38,0xaa,0xc2,0x19,0x1f -,0x64,0x9b,0xac,0x4d,0x36,0xc9,0x96,0x2c,0x22,0xf6,0xa3,0x5b,0x1e,0x34,0xad,0x9a,0x5d,0x25,0x1b,0x43,0xaa,0xa9,0x2c,0x22,0xe7,0xa3,0xb6,0x3f,0xa1,0xdd,0x24,0x24 -,0xca,0xa5,0xdb,0x45,0x65,0x3c,0x50,0xa8,0xaf,0x29,0x64,0x3d,0x2b,0x5f,0x49,0xb9,0x44,0x36,0xa8,0xb9,0x4f,0x67,0xe5,0xcc,0x2e,0x39,0xda,0xbc,0x52,0xb0,0xde,0xe8 -,0xa4,0xab,0xf4,0x4d,0x39,0x2a,0xb9,0xbf,0xa4,0x3c,0x2f,0x21,0x1f,0xce,0x69,0xaf,0x58,0x42,0xcd,0xa8,0x55,0xb7,0xbe,0x37,0xb5,0x5b,0x1f,0x2d,0xb6,0xb8,0x32,0x27 -,0xb2,0x9b,0xac,0x1d,0x2e,0x30,0xcb,0xa7,0xad,0xc8,0x2e,0x75,0xa8,0xb3,0x23,0xad,0xa2,0x35,0x1c,0x23,0xb9,0xcd,0xdf,0x4a,0x38,0x72,0xc9,0x5b,0xcd,0xb1,0x2e,0x28 -,0xc2,0x9d,0xa4,0x5b,0x43,0x4e,0xca,0x59,0x2f,0x2f,0x35,0x3c,0xd1,0xb4,0xb5,0xa3,0xaf,0x3c,0x4a,0xab,0xb9,0x2d,0xc6,0x38,0x24,0x30,0xbd,0x9c,0xb3,0x23,0x3d,0xaa -,0xd9,0x38,0xc9,0x32,0x1a,0x55,0xa6,0xad,0x39,0x2e,0x44,0x6b,0xb1,0x9e,0xb4,0x24,0x1e,0x2c,0xa8,0x95,0x9a,0x32,0x13,0x31,0xb1,0xfe,0xd0,0x4c,0xbb,0xb7,0x28,0x1a -,0x38,0x9f,0xae,0xbe,0x28,0x1c,0xb7,0xa9,0xad,0xb3,0x53,0x2c,0xc5,0xa2,0x28,0x2b,0xc8,0x4c,0x2e,0xc8,0xa5,0xae,0x45,0x1c,0xc9,0xc0,0x9d,0x9b,0x5e,0x6f,0x30,0xbe -,0xa7,0xcb,0x24,0x33,0x31,0x27,0x3b,0xd0,0x5b,0x1d,0x3c,0xb5,0x7e,0x41,0x35,0xb7,0xc8,0xca,0xd6,0x41,0xe1,0xa6,0x9a,0xae,0xc8,0xdc,0xb0,0x9a,0xce,0x2e,0x25,0x14 -,0xc4,0xbc,0x25,0x26,0x23,0x1f,0xcf,0xb6,0x3c,0x3a,0xf1,0xb5,0x1c,0xc3,0x95,0xa0,0xa7,0x9f,0xa3,0xa1,0xb8,0x57,0xb8,0x49,0xad,0x60,0x22,0x18,0x29,0xa9,0x39,0x1f -,0x25,0x0f,0x1d,0x31,0x6d,0xab,0x36,0xa6,0x8e,0x98,0xbe,0xb3,0xaa,0x9c,0xaf,0xc1,0x2f,0x28,0x5e,0x5a,0xba,0xb8,0x4b,0x1e,0x13,0x26,0x32,0x1f,0x3c,0x39,0xad,0x9d -,0xb9,0x3b,0x36,0x2c,0x23,0x24,0x9d,0x8a,0x94,0xe7,0x1f,0x98,0x83,0xa7,0xc1,0x21,0x02,0x07,0x1a,0x3a,0x39,0x91,0x89,0xa5,0x17,0x08,0x3a,0x9d,0x90,0xb0,0x14,0x1f -,0x21,0x91,0x84,0x98,0x26,0x9b,0xab,0x2a,0x2c,0x1b,0x0e,0x09,0x1f,0x9f,0x8f,0x20,0x1a,0x2f,0xc0,0xb0,0x94,0x8c,0xc3,0x17,0x1c,0xec,0x9e,0x8b,0x8d,0xb2,0x0b,0x09 -,0x47,0xad,0x1f,0x17,0x39,0x2f,0x31,0x3c,0xae,0x90,0xa5,0x9f,0x52,0x0a,0x13,0x90,0x8a,0x1c,0x07,0x4a,0x8a,0x8e,0x28,0x0e,0xa7,0x90,0x92,0xaf,0x15,0x00,0x0b,0x91 -,0xa0,0xca,0x8f,0x89,0xbd,0x0b,0x13,0x9c,0x8e,0x9a,0x1f,0x19,0x17,0x24,0x96,0x94,0x22,0x3c,0x8d,0xb6,0x12,0x00,0xb5,0x88,0x39,0x2f,0x1c,0x9d,0x8e,0xcb,0x37,0x1d -,0x3d,0x8a,0x89,0x59,0x05,0x0d,0x61,0xe0,0x9e,0x90,0x42,0x04,0x04,0x18,0x8b,0x90,0x9e,0xdd,0x1b,0xb0,0xac,0x94,0x8d,0x4c,0xab,0x9e,0x10,0x12,0xa5,0x86,0x1f,0x04 -,0x17,0xa8,0x58,0x0f,0x0f,0x2a,0x83,0x8a,0x9a,0x41,0x0d,0x3f,0xa4,0x14,0x28,0x8c,0x80,0xac,0x05,0x0e,0x99,0x88,0xb6,0x12,0x05,0x09,0x0f,0x2e,0x32,0x9a,0x89,0x8f -,0x93,0x12,0x32,0x8b,0xa7,0x1e,0x0c,0xa3,0x9b,0x22,0x9d,0xa1,0xae,0x25,0x24,0x4d,0x33,0x0d,0x08,0x0b,0x41,0x81,0x89,0x98,0x0c,0x0f,0x8b,0x9d,0x5d,0x58,0xb3,0x9b -,0x0f,0x1f,0x8a,0x80,0x98,0x0a,0x02,0x0c,0x29,0xa0,0x43,0x08,0x9f,0x90,0xa7,0x2a,0x2c,0x8d,0x8c,0x9c,0xbf,0xa2,0x8f,0xb1,0x1a,0xbc,0x98,0x8d,0x94,0xd9,0x37,0x1c -,0x30,0xa4,0xc8,0x89,0x88,0xcb,0x14,0x09,0xa3,0x88,0x2d,0x0a,0x0f,0xb4,0x2c,0x01,0x0c,0x15,0x0d,0x01,0x01,0x00,0x09,0x16,0x0c,0x00,0x11,0x90,0xa9,0x21,0x05,0x12 -,0x93,0xad,0xfd,0xab,0x8c,0x89,0xef,0x9c,0x8b,0x84,0x89,0xde,0x21,0xac,0x92,0x8a,0x93,0x92,0x84,0x95,0xaa,0xb6,0x88,0x80,0x96,0xcb,0xaf,0x92,0x89,0xb5,0xa1,0x88 -,0x82,0x94,0x21,0x15,0x1d,0x31,0x1b,0x0c,0x0a,0x93,0x8e,0xc4,0x12,0x19,0x91,0xb3,0x0e,0x09,0x09,0x19,0x0b,0x0f,0xec,0x90,0x9c,0x0f,0x0c,0x13,0x27,0x1e,0x0d,0x02 -,0x22,0x1c,0x16,0x21,0x47,0x8e,0xc0,0x1e,0x1e,0x2b,0xa5,0x24,0x15,0x38,0xa4,0x90,0xbc,0x19,0x1f,0xcf,0xd3,0x20,0x0d,0x99,0x97,0x76,0x2d,0x1f,0x84,0x89,0xb8,0x19 -,0x0e,0xc2,0xd4,0x2d,0xa7,0x8d,0x91,0x33,0x11,0x1d,0xa0,0x92,0x9b,0xaa,0x87,0x83,0x83,0x8a,0x8c,0x80,0x87,0x95,0x8d,0x88,0x81,0x82,0x8c,0x8a,0x8a,0x89,0x36,0x0d -,0x0c,0x1e,0x10,0x0d,0x0a,0x26,0x2f,0x0b,0x0b,0x08,0x15,0x0c,0x03,0x00,0x02,0x08,0x0b,0x06,0x09,0x14,0xfc,0x10,0x02,0x02,0x05,0x0b,0x0d,0x06,0x1e,0xb5,0x3f,0xc5 -,0xdd,0x88,0x8b,0x9f,0x40,0x36,0x92,0x97,0x98,0x8f,0x88,0x84,0x99,0x23,0x2e,0x97,0x8c,0x9a,0x2c,0x96,0x8c,0x92,0x97,0x9c,0x89,0x8a,0x8b,0x8f,0x92,0x87,0x90,0xbd -,0x3f,0xae,0x9b,0xc6,0x29,0x25,0xa9,0xad,0x36,0x0f,0x35,0x3b,0x1b,0x27,0x14,0x3d,0x6e,0xab,0x42,0x2f,0xd3,0x20,0x2f,0x49,0x56,0x1f,0x0c,0x09,0x04,0x0b,0x18,0x14 -,0x0e,0x2f,0x42,0x2e,0x2c,0x18,0x2c,0x1e,0x2f,0x35,0x3e,0xbe,0xcd,0xc9,0xcb,0xa9,0xa5,0xaf,0x14,0x09,0x10,0x1f,0x1a,0x25,0x9f,0x43,0x1e,0x1e,0x3e,0xa3,0xae,0xb4 -,0xc3,0xb6,0x5a,0x3a,0xa0,0x8d,0x83,0x86,0x8a,0x90,0x8c,0x85,0x8a,0x8e,0x89,0x88,0x88,0x84,0x87,0x81,0x83,0x84,0x8e,0x8e,0x8d,0x2d,0x12,0x1b,0x38,0xd1,0x3c,0x12 -,0x05,0x04,0x08,0x09,0x08,0x08,0x06,0x01,0x03,0x01,0x09,0x0b,0x06,0x0d,0x15,0x1b,0x0e,0x0d,0x12,0x15,0x1d,0x0f,0x09,0x05,0x0e,0x27,0x30,0xf5,0x9e,0x97,0x9e,0x4a -,0x34,0x96,0x89,0x8a,0x92,0x90,0x8d,0x99,0x98,0x8d,0x86,0x87,0x92,0xad,0x34,0xaa,0x98,0x95,0x99,0x94,0x8f,0x8e,0x90,0x94,0x86,0x94,0xd9,0xb2,0xa3,0x8f,0x9d,0xc2 -,0xbe,0x94,0x88,0xa2,0x24,0x0b,0x0a,0x0f,0x1b,0x19,0x1a,0x29,0x25,0x36,0x1d,0xef,0xab,0xb4,0x26,0x14,0x25,0x11,0x0f,0x18,0x42,0x5f,0x14,0x10,0x0a,0x13,0x2e,0x22 -,0x0f,0x03,0x0a,0x0c,0x0e,0x0f,0x24,0xb7,0x6b,0xa0,0x5e,0xb0,0xb9,0x10,0x25,0xcc,0x98,0xaf,0x1f,0x1c,0x0d,0x27,0xc1,0xad,0x2e,0x23,0xa4,0xba,0xce,0x3e,0x98,0x8c -,0x91,0x86,0x86,0x83,0x82,0x81,0x80,0x81,0x85,0x8a,0x8b,0x8b,0x86,0x80,0x85,0x8d,0xaa,0x9d,0x89,0xba,0x1b,0x0d,0x14,0x23,0x0d,0x15,0x0d,0x16,0x47,0x32,0x17,0x06 -,0x03,0x02,0x01,0x07,0x09,0x07,0x02,0x03,0x0a,0x0f,0x23,0x0f,0x0d,0x09,0x07,0x16,0x0a,0x0f,0x0f,0x37,0x8d,0x98,0x99,0xac,0x9c,0x99,0xb1,0x94,0x96,0x9d,0xa1,0x9d -,0x8e,0xa4,0x9c,0x97,0x99,0x94,0x90,0x8b,0xa3,0xbc,0x98,0x8e,0x87,0x8d,0x8f,0x8b,0x8b,0x86,0x8e,0x92,0xa6,0xcf,0xaa,0x95,0x99,0x40,0x24,0xbe,0xa5,0xa3,0xd1,0x1c -,0x1d,0x0f,0x1e,0x3a,0x79,0x37,0x1f,0xef,0xb8,0x96,0x99,0x24,0x16,0x0d,0x13,0x10,0x0f,0x1a,0x0b,0x0f,0x23,0x1c,0x10,0x0e,0x28,0x67,0x18,0x0c,0x05,0x16,0x51,0x2c -,0xae,0xaf,0xfa,0x24,0x23,0x4f,0x2e,0x2d,0x19,0x3b,0xa8,0x3a,0x1d,0x0a,0x0a,0x16,0x49,0xa1,0x22,0x16,0x38,0x9d,0x89,0x8a,0x8c,0x99,0x9c,0x91,0x8d,0x82,0x84,0x8e -,0x87,0x83,0x81,0x85,0x85,0x88,0x9a,0x89,0x90,0x91,0x8f,0x93,0x88,0x96,0x96,0xa6,0x1d,0x30,0x21,0x36,0x1a,0x06,0x07,0x0c,0x1c,0x0e,0x07,0x03,0x00,0x05,0x04,0x01 -,0x02,0x00,0x0c,0x14,0x3a,0x5c,0x15,0x14,0x05,0x0b,0x1e,0xc7,0x2c,0x05,0x1b,0xa0,0x8c,0x99,0x27,0x25,0x35,0x97,0xdf,0x21,0x26,0xc5,0x8c,0x92,0x8b,0x88,0x89,0x8f -,0xcb,0x91,0x8b,0x9d,0xaf,0x97,0x8c,0x8b,0x8a,0x9f,0x53,0xba,0x8e,0x99,0xb7,0x26,0x63,0x8a,0x94,0x92,0x97,0x9c,0x9c,0x31,0xaf,0x9e,0xae,0x2e,0x13,0xa9,0x9a,0xed -,0x0e,0x0d,0x16,0x1d,0x75,0x1a,0x0a,0x08,0x79,0x9c,0x6d,0x24,0x13,0x23,0x1b,0x12,0x1e,0x19,0x26,0x1b,0x1d,0x2f,0x1a,0x18,0x0e,0x04,0x06,0x0c,0x14,0x0b,0x16,0x91 -,0x98,0xa0,0xb3,0x2c,0xc9,0x44,0x6a,0x49,0x2c,0x1e,0x1c,0x99,0x97,0x3a,0x16,0x1a,0x1d,0x46,0xa0,0xa6,0xba,0x9e,0x82,0x81,0x80,0x82,0x87,0x83,0x89,0x86,0x81,0x81 -,0x86,0x89,0x81,0x82,0x88,0x8d,0x96,0x3e,0x1b,0x11,0x0e,0x0c,0x18,0x2f,0x1b,0x39,0x24,0x15,0x15,0x06,0x0a,0x0a,0x03,0x02,0x03,0x17,0x13,0x0a,0x05,0x01,0x01,0x0f -,0x14,0x05,0x03,0x09,0x27,0xb5,0xa4,0x29,0x3f,0xa6,0x4b,0x9c,0x9a,0xa9,0x43,0xb9,0x91,0x90,0x96,0xa2,0x1f,0x37,0xb5,0x47,0xba,0xb2,0x93,0x8e,0x8b,0x83,0x89,0x88 -,0x8e,0x98,0x89,0x92,0x99,0xa4,0x8f,0x89,0x95,0x97,0x63,0xe7,0x96,0xac,0xb1,0x40,0x23,0xb6,0xae,0x8d,0x95,0xbc,0xba,0x21,0x48,0xbf,0x48,0x13,0x1c,0xae,0xa9,0xb0 -,0x1c,0x05,0x09,0x1c,0x0d,0x0b,0x07,0x0e,0x25,0x1f,0xae,0xb2,0x9c,0xca,0x0d,0x1d,0x13,0x10,0x08,0x0d,0x10,0x16,0xc8,0x26,0x0a,0x14,0x25,0x15,0x14,0x06,0x14,0x28 -,0xab,0x8f,0x9e,0xa8,0xaa,0x99,0x9f,0xcb,0x2b,0x17,0x20,0xa9,0x8e,0x90,0x9b,0x9d,0x89,0x89,0x8f,0x8c,0x90,0x8c,0x88,0x82,0x80,0x80,0x81,0x84,0x82,0x82,0x85,0x90 -,0xac,0xa2,0xb4,0xbb,0xb4,0x12,0x09,0x0e,0x0d,0x12,0x06,0x02,0x0c,0x0c,0x13,0x13,0x18,0x0e,0x0b,0x1d,0x10,0x0c,0x06,0x03,0x08,0x11,0x18,0x0e,0x02,0x02,0x11,0x1a -,0x16,0x09,0x19,0x45,0x54,0x92,0x8f,0x95,0x8e,0x94,0x96,0x9e,0x9a,0xa7,0xda,0xad,0x9e,0x91,0x92,0xba,0x22,0xae,0xa7,0xae,0x2f,0x47,0x9b,0x90,0x85,0x85,0x8a,0x88 -,0x8a,0x89,0x96,0xac,0xc3,0xa9,0x89,0x99,0xa1,0xad,0x52,0x49,0x9e,0x79,0x1b,0x0f,0x0e,0x2d,0x38,0x99,0x9d,0xa9,0x9d,0xa5,0x97,0xb2,0x26,0x11,0x0d,0x1f,0x0d,0x1b -,0x19,0x08,0x0a,0x1f,0x1f,0x08,0x09,0x09,0x1d,0x1f,0x20,0xb6,0xaf,0xa4,0x6f,0xaf,0xa3,0x21,0x17,0x0f,0x70,0xa0,0x3f,0x1d,0x28,0xa8,0xae,0xc7,0x1c,0x19,0x2d,0x9d -,0x8c,0x9e,0xa9,0x9f,0x8f,0x8a,0x95,0x96,0x4d,0x41,0xfb,0xac,0x96,0xa1,0xc8,0x1e,0x3f,0x33,0xc2,0xdd,0x1a,0x1e,0x42,0x9a,0x98,0x9f,0x98,0x99,0x8d,0x97,0x60,0x32 -,0x1d,0xbd,0xaf,0x9a,0x9b,0x2d,0x4a,0xa4,0x9c,0x2b,0x21,0x1b,0x17,0xc3,0xca,0x99,0x96,0x9f,0x8d,0x97,0x99,0x47,0x18,0x2b,0x2c,0x9f,0x39,0x34,0x29,0x24,0x9c,0xb4 -,0xb7,0x13,0x09,0x16,0x0f,0x29,0x2d,0xcb,0xcd,0x17,0x4b,0x51,0xbd,0x29,0x09,0x16,0x27,0x3f,0x17,0x0c,0x39,0xb4,0xa4,0x3a,0x0a,0x0c,0x13,0x2c,0x42,0x19,0x24,0x4a -,0x96,0x92,0xa9,0xbe,0x31,0xb9,0x63,0xa1,0x90,0x9c,0xac,0xce,0x93,0x88,0x97,0xc4,0xaf,0x91,0x8c,0x8f,0x90,0x9b,0x97,0x8e,0x8d,0x92,0xb5,0x26,0x19,0x48,0x9d,0x9b -,0xa6,0xee,0x4c,0xae,0xaf,0x4b,0x1f,0x1c,0x30,0x2b,0x59,0xbd,0xe2,0xb9,0xaa,0x3e,0x14,0x09,0x06,0x0c,0x18,0x22,0x17,0x16,0x11,0x15,0xda,0xad,0x50,0x17,0x0e,0x11 -,0x1b,0xc0,0xa7,0xb6,0xb0,0x9f,0xa5,0xcb,0x1b,0x0a,0x12,0x1f,0xc5,0xb6,0x25,0x12,0x1c,0x9b,0x8e,0xe3,0x13,0x15,0x2a,0xad,0xa8,0x99,0x97,0x90,0x8e,0x92,0x97,0xa6 -,0xa6,0xa0,0xa9,0xab,0xa4,0x9b,0x97,0x8e,0x8a,0x99,0x9e,0xcb,0xbe,0x9b,0x91,0x91,0x99,0x9a,0x9d,0x9d,0x97,0x94,0xb0,0x22,0x19,0x28,0x3b,0x31,0x19,0x0e,0x0c,0x09 -,0x05,0x02,0x01,0x00,0x03,0x05,0x03,0x04,0x08,0x09,0x0b,0x09,0x0a,0x0a,0x0e,0x16,0x17,0xb4,0x9d,0xa2,0xa3,0x96,0x8e,0x96,0x90,0x94,0x94,0x93,0x94,0x8e,0x88,0x83 -,0x84,0x85,0x87,0x8b,0x95,0x9d,0x93,0x8c,0x88,0x86,0x8c,0x8a,0x86,0x85,0x84,0x87,0x9a,0xbe,0x9b,0x9a,0x9e,0x98,0x97,0xa8,0xbd,0x30,0x1d,0x1b,0x0c,0x06,0x06,0x06 -,0x08,0x0c,0x12,0x16,0x12,0x1c,0x1b,0x0d,0x0d,0x0d,0x0d,0x0e,0x15,0x1f,0x1d,0x20,0x29,0x2d,0x26,0x17,0x1b,0x25,0x23,0x0f,0x0f,0x1c,0x29,0x40,0x29,0x24,0x2b,0x2f -,0x46,0x3e,0xda,0xba,0xc2,0xab,0xae,0xa5,0x9c,0xa5,0xc2,0xe8,0x9f,0x9a,0xa4,0xb1,0xba,0xb4,0x60,0xcf,0xb0,0xa3,0xa6,0xa5,0x94,0x8f,0x8c,0x89,0x89,0x89,0x8b,0x8a -,0x86,0x86,0x85,0x86,0x83,0x82,0x85,0x88,0x8b,0x8e,0x96,0xaa,0x2e,0x1c,0x14,0x0d,0x07,0x09,0x0a,0x06,0x06,0x02,0x02,0x03,0x03,0x02,0x03,0x03,0x08,0x0a,0x07,0x09 -,0x0e,0x13,0x19,0x0f,0x0c,0x09,0x0d,0x1b,0x32,0xbd,0x34,0x29,0x2d,0xb7,0x9e,0xa5,0xb2,0xae,0xa2,0x9d,0x9c,0x99,0x91,0x8e,0x8c,0x8c,0x8d,0x8c,0x8c,0x90,0x8f,0x8c -,0x8d,0x91,0x99,0x9f,0x94,0x8e,0x9a,0xad,0xb5,0xa3,0xb3,0x68,0x4f,0x40,0xb9,0xb9,0xb7,0xb2,0xd2,0x42,0x41,0x4e,0xcf,0x4e,0x20,0x1e,0x26,0x47,0xed,0x42,0x2d,0x2f -,0xcf,0x3e,0x57,0xe9,0xf0,0x35,0x2e,0x29,0x26,0xd9,0x3e,0x50,0x43,0x2a,0x1f,0x4b,0x34,0x15,0x12,0x1d,0x58,0x36,0x1d,0x17,0x2e,0x3a,0x25,0x24,0x2f,0x3d,0x2c,0x1d -,0x25,0x3e,0x21,0x1a,0x24,0x32,0x59,0x43,0xc4,0xa6,0xa6,0x9e,0x97,0x8d,0x8b,0x8b,0x8c,0x86,0x83,0x84,0x84,0x84,0x83,0x84,0x88,0x92,0x8f,0x8e,0x93,0xa5,0x2b,0x1b -,0x1c,0x18,0x13,0x12,0x0b,0x06,0x03,0x04,0x08,0x0c,0x09,0x07,0x08,0x0b,0x11,0x12,0x12,0x11,0x12,0x0f,0x0e,0x0f,0x17,0x27,0x38,0x3e,0x21,0x26,0x2c,0x50,0x3b,0x4e -,0x5d,0x5a,0xaf,0xae,0x9c,0x95,0x94,0x9c,0x98,0x97,0x90,0x8e,0x9b,0xa2,0x9c,0x94,0x8f,0x8f,0x98,0x9b,0x98,0x95,0x92,0x9c,0xa5,0xa2,0xa7,0xa1,0x99,0x9b,0xa6,0xa3 -,0xaf,0xd0,0xb3,0xac,0xb5,0xad,0x5b,0x36,0xb3,0xf4,0x38,0x41,0x33,0x26,0x24,0x22,0x26,0x1f,0x18,0x1a,0x17,0x12,0x15,0x17,0x11,0x0f,0x0e,0x12,0x21,0x23,0x16,0x10 -,0x1c,0x1e,0x15,0x15,0x21,0x2e,0x1a,0x1b,0x2d,0xd7,0x4e,0x1b,0x1f,0x2d,0x30,0x29,0x29,0x23,0x30,0x70,0x63,0xbb,0xb3,0xa8,0xa1,0xa8,0xba,0xa3,0x93,0x8c,0x8b,0x8b -,0x86,0x84,0x82,0x83,0x85,0x83,0x84,0x85,0x86,0x85,0x84,0x88,0x8a,0x93,0x9e,0x9c,0xaf,0x35,0x1b,0x0e,0x08,0x0a,0x0b,0x0d,0x0a,0x07,0x07,0x09,0x08,0x07,0x08,0x06 -,0x09,0x09,0x0d,0x0f,0x0e,0x0f,0x17,0x19,0x15,0x21,0x21,0x28,0x2c,0x27,0x49,0xd6,0xbf,0xa6,0xa3,0xb2,0xaf,0xbb,0xaa,0xa1,0xa1,0xa4,0x9f,0x98,0x9b,0x9f,0x9c,0x97 -,0x98,0x98,0x9e,0x99,0x96,0x95,0x91,0x96,0x98,0x98,0x9b,0x9c,0xa7,0xbd,0xb5,0x9f,0x9d,0xa9,0xab,0xa6,0x9f,0xc8,0x42,0x36,0x78,0x3d,0x28,0x2e,0x37,0x46,0x2d,0xc2 -,0x45,0x1b,0x1a,0x1f,0x2d,0x28,0x18,0x1a,0x1d,0x22,0x24,0x2a,0x52,0x1c,0x11,0x13,0x1d,0x28,0x20,0x1f,0x32,0x76,0x2f,0x32,0x48,0x40,0x21,0x1c,0x21,0x22,0x1f,0x24 -,0x33,0x2c,0x25,0x1c,0x1d,0x20,0x29,0x2b,0x1e,0x1e,0x3a,0xa7,0x98,0x90,0x8e,0x8f,0x8c,0x88,0x87,0x88,0x87,0x85,0x85,0x85,0x82,0x82,0x88,0x8a,0x8e,0x90,0x91,0x9b -,0xa5,0xd9,0x35,0x1d,0x15,0x10,0x13,0x11,0x07,0x05,0x08,0x0a,0x0d,0x0b,0x0a,0x0a,0x0d,0x0e,0x0d,0x0f,0x0f,0x0f,0x0f,0x12,0x17,0x23,0x2e,0x2b,0x2c,0x3a,0x30,0x2c -,0x31,0x49,0x2c,0x4a,0x9e,0x9f,0x9c,0x9e,0xa1,0xae,0x9e,0x97,0x98,0x9b,0xaa,0xa8,0x9c,0x93,0x8e,0x8a,0x8f,0x9f,0xaf,0x9c,0x98,0x99,0x99,0x9c,0xa2,0xa3,0x9a,0x90 -,0x8e,0xa8,0x6c,0xca,0xb0,0xbe,0x47,0xab,0xa7,0xaf,0xbc,0x4a,0xd4,0xf2,0x3a,0x2c,0x28,0x34,0x28,0x2e,0x33,0x33,0x2a,0x1d,0x23,0x20,0x26,0x1b,0x16,0x1e,0x1b,0x23 -,0x23,0x23,0x22,0x1c,0x18,0x15,0x20,0x1c,0x1c,0x16,0x15,0x1f,0x26,0x3b,0x1e,0x1b,0x16,0x1c,0x20,0x1c,0x2e,0x23,0x29,0x3e,0x34,0x33,0xe3,0xb8,0xb9,0xb3,0xa9,0x9c -,0x92,0x8c,0x8a,0x87,0x86,0x88,0x84,0x84,0x87,0x89,0x84,0x84,0x89,0x8a,0x8d,0x8a,0x8f,0xa0,0x4b,0x37,0x22,0x16,0x11,0x0d,0x0e,0x0e,0x0f,0x0b,0x0b,0x08,0x08,0x0b -,0x0b,0x0a,0x05,0x04,0x0a,0x0f,0x16,0x1a,0x1c,0x18,0x0f,0x13,0x1d,0x29,0x24,0x27,0x34,0x4d,0xbd,0xaa,0xa6,0xaa,0xb7,0xa2,0x9a,0xa8,0xbe,0xae,0x99,0x99,0x8f,0x93 -,0x98,0x98,0x98,0x97,0x98,0x98,0xa4,0x97,0x94,0x94,0x9c,0x9f,0x96,0x9c,0xa9,0xb0,0xae,0xbb,0xf8,0xb0,0x9e,0xa9,0xc6,0x29,0xbc,0x9a,0xb2,0x38,0x2b,0x4a,0xc9,0xc5 -,0xd3,0x5f,0x24,0x21,0x24,0x25,0x27,0x1e,0x20,0x1d,0x21,0x3e,0x3b,0x27,0x1e,0x18,0x13,0x1b,0x2b,0x1b,0x13,0x14,0x19,0x1d,0x27,0x2f,0x1d,0x1a,0x1e,0x1b,0x19,0x1b -,0x26,0x3f,0x2b,0x21,0x1e,0x39,0x6a,0x36,0x33,0x1e,0x1c,0x2a,0x72,0x9f,0x96,0x92,0x96,0x9b,0x8a,0x8a,0x88,0x89,0x8e,0x88,0x86,0x84,0x84,0x83,0x86,0x8b,0x86,0x86 -,0x95,0x9e,0xa2,0xb4,0x4a,0xc1,0x39,0x16,0x16,0x11,0x0d,0x0c,0x08,0x05,0x03,0x08,0x0d,0x09,0x09,0x09,0x0f,0x19,0x15,0x10,0x08,0x0c,0x13,0x1e,0x27,0x13,0x17,0x2f -,0x2b,0x4c,0xbe,0x5f,0x21,0x28,0xbf,0xb7,0x9f,0xac,0x3d,0xad,0x9a,0x93,0x9a,0xc7,0xaf,0xad,0x91,0x95,0x97,0x9c,0xac,0x94,0x91,0x8e,0xa4,0xaf,0x99,0x9f,0x97,0x94 -,0x9d,0x95,0xa3,0x9f,0x97,0x9b,0x9d,0x37,0xa8,0x9a,0xaa,0xb7,0x3b,0xa7,0xbd,0xaf,0x5d,0x29,0x2a,0x24,0xce,0xb3,0x4e,0x2b,0x2b,0x41,0xc7,0x2c,0x2e,0x0d,0x14,0x26 -,0x22,0xda,0x16,0x11,0x19,0x1b,0x2b,0x1c,0x14,0x10,0x13,0x1b,0x1f,0x1d,0x11,0x13,0x60,0xe4,0x66,0x1a,0x0e,0x16,0x17,0xcd,0x27,0x29,0x3e,0xc3,0xae,0xb2,0xcf,0xb7 -,0x98,0x80,0xad,0x0e,0x80,0x84,0x89,0x80,0x84,0x84,0x9a,0x8d,0x9f,0x88,0xa6,0x0a,0xd6,0x02,0x0a,0x07,0x03,0x07,0x00,0x02,0x03,0x04,0x04,0x05,0x01,0x07,0x08,0x09 -,0x0c,0x13,0x19,0x17,0x24,0x28,0x9d,0x80,0x86,0x94,0x8e,0x80,0x81,0x84,0x82,0x81,0x82,0x83,0x81,0x85,0x84,0x84,0x84,0x86,0x8c,0x8c,0x8d,0x8b,0x8b,0x8c,0x8d,0x98 -,0x91,0x9f,0xbe,0x2b,0x1a,0x24,0x1a,0x14,0x0f,0x09,0x0c,0x0b,0x07,0x08,0x02,0x03,0x05,0x05,0x04,0x04,0x07,0x02,0x01,0x01,0x04,0x03,0x01,0x01,0x02,0x03,0x02,0x05 -,0x04,0x09,0x0a,0x08,0x05,0x0a,0x0f,0x11,0x1d,0x11,0x1c,0x22,0xae,0x99,0x96,0x8f,0x96,0x8b,0x85,0x82,0x83,0x82,0x83,0x81,0x82,0x82,0x81,0x82,0x82,0x82,0x80,0x80 -,0x82,0x81,0x81,0x81,0x80,0x81,0x81,0x83,0x82,0x83,0x81,0x84,0x84,0x83,0x84,0x83,0x84,0x85,0x88,0x89,0x89,0x88,0x88,0x96,0x97,0x91,0xb2,0xaf,0x2d,0x1b,0x0d,0x0c -,0x14,0x18,0x0e,0x06,0x04,0x05,0x07,0x05,0x05,0x02,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x01,0x01,0x01,0x04,0x06,0x0a,0x04,0x09,0x07,0x06,0x05,0x04 -,0x06,0x03,0x06,0x05,0x08,0x08,0x06,0x0c,0x0d,0x18,0x1a,0x24,0xd5,0xd0,0x9c,0xad,0x97,0x95,0x9a,0x8d,0x8f,0x8e,0x9a,0x8e,0x8e,0x8e,0x85,0x8b,0x8a,0x89,0x87,0x86 -,0x86,0x83,0x84,0x81,0x81,0x83,0x81,0x84,0x82,0x84,0x87,0x8c,0x8a,0x8d,0x91,0x8b,0x91,0x93,0x90,0x96,0x8f,0x89,0x86,0x8a,0x8b,0x86,0x86,0x87,0x8b,0x8c,0x8d,0x8b -,0x96,0xa4,0xab,0xad,0x9f,0xa3,0x8f,0x9c,0x96,0x8d,0x88,0x86,0x8b,0x84,0x8b,0x9d,0xb6,0xb5,0xae,0x15,0x09,0x06,0x0c,0x0c,0x01,0x08,0x09,0x08,0x15,0x1b,0x2c,0x60 -,0xb0,0x9b,0x97,0x92,0x3b,0xb8,0xdb,0x25,0x43,0x2c,0x17,0x10,0x42,0x19,0x57,0x4d,0x1f,0x1d,0x1e,0xd5,0x15,0x19,0x0b,0x04,0x09,0x03,0x01,0x01,0x03,0x00,0x02,0x04 -,0x00,0x04,0x0a,0x03,0x07,0x11,0x05,0x05,0x0c,0x02,0x03,0x05,0x00,0x00,0x03,0x01,0x00,0x04,0x00,0x02,0x06,0x05,0x02,0x0e,0x07,0x02,0x1e,0x09,0x06,0x0b,0x02,0x03 -,0x1e,0x0a,0x0f,0x6a,0x21,0xaa,0x8d,0x8c,0x92,0x80,0x86,0x88,0x80,0x82,0x86,0x81,0x89,0x8b,0x80,0x92,0x84,0x80,0x84,0x80,0x81,0x80,0x82,0x80,0x81,0x80,0x80,0x84 -,0x86,0x80,0x8b,0x85,0x81,0x89,0x80,0x85,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x83,0x90,0x80,0xa5,0x92,0x88,0xb9,0x86,0xad,0x12,0x1a,0x12,0x06 -,0x05,0x07,0x01,0x00,0x01,0x00,0x06,0x04,0x00,0x0a,0x00,0x05,0x0e,0x01,0x04,0x07,0x08,0x06,0x05,0x05,0x00,0x02,0x00,0x03,0x07,0x00,0x0c,0x06,0x01,0x1c,0x09,0x04 -,0x19,0x0a,0x0f,0x14,0x12,0x06,0x0b,0x0b,0x16,0x7d,0x08,0xb5,0xac,0x2a,0x91,0x9f,0x1d,0x92,0xa9,0xaf,0x9f,0x9e,0x3b,0x27,0x2b,0x3d,0x96,0x11,0x8c,0x96,0x32,0x89 -,0x96,0x2d,0x8b,0x99,0xa2,0x95,0x97,0x7a,0x3f,0xfc,0xad,0x8b,0x1f,0x86,0x8a,0xba,0x84,0x8b,0x41,0x87,0x8b,0x95,0x93,0x92,0xc2,0xf9,0x39,0x2e,0x8e,0x12,0x98,0xaa -,0x0e,0x8f,0xa9,0x05,0xc6,0x3c,0x12,0x0e,0x1f,0x0e,0x07,0x09,0x17,0x9f,0x0d,0x8f,0x96,0xb8,0x83,0x87,0x97,0x82,0x82,0x84,0x83,0x80,0x85,0x8d,0x8a,0x84,0x88,0xb1 -,0x80,0x90,0x1b,0x8d,0xcc,0x05,0x25,0x13,0x06,0x05,0x0c,0x02,0x02,0x00,0x10,0x14,0x00,0xaa,0x22,0x03,0x9c,0xc9,0x0d,0xaf,0xba,0xce,0x3c,0x8e,0xb5,0x19,0x20,0x8b -,0x9c,0x24,0x80,0x99,0x20,0x88,0x89,0x62,0x91,0x8a,0x95,0xbf,0x8f,0xa4,0x1d,0x25,0x88,0xa2,0x3c,0x80,0x94,0x19,0x8b,0x8a,0x5a,0x9a,0x8f,0x98,0x3e,0x8f,0xa3,0x0f -,0x19,0x87,0x58,0x17,0x84,0xa4,0x0a,0xb8,0x9e,0x15,0x20,0xb8,0x28,0x0a,0x2b,0x18,0x04,0x05,0x99,0x18,0x12,0x86,0xae,0x08,0x32,0x9b,0x24,0x12,0xb6,0xb0,0x0e,0x2c -,0x2b,0x0f,0x0e,0x95,0x17,0x1f,0x8a,0x2d,0x03,0x12,0x71,0x14,0x0a,0x30,0x1b,0x02,0x0d,0x0d,0x03,0x04,0x68,0x0d,0x12,0x97,0xbc,0x1f,0xa3,0x88,0x8b,0x96,0x83,0x83 -,0x8b,0x84,0x80,0x86,0x89,0x80,0x86,0x84,0x80,0x86,0x9d,0x9c,0x97,0x9a,0x22,0x56,0x1f,0x04,0x07,0x06,0x00,0x02,0x12,0x04,0x0a,0x2c,0x0f,0x04,0x07,0x0f,0x1b,0x09 -,0x1f,0x26,0x0c,0x1c,0x36,0x0f,0x14,0x9b,0x1d,0xcc,0x8f,0xbd,0x1d,0x21,0xc8,0x9a,0xd7,0x9c,0x9d,0x2a,0xd9,0xaf,0x25,0x21,0x92,0x3f,0x97,0x82,0x90,0xa8,0x9e,0x96 -,0x8d,0x96,0x8d,0x8d,0xb8,0x9c,0x99,0xab,0xb8,0x87,0xa8,0x9d,0x87,0x8f,0xdc,0x20,0x4e,0xad,0x7b,0xc5,0xfa,0x13,0x1a,0x11,0x0e,0x0b,0x61,0x12,0x14,0x9c,0xa2,0x22 -,0x0d,0x26,0xaf,0x75,0xc2,0x9e,0x28,0x1f,0x19,0x25,0x1c,0xb8,0x27,0x24,0x93,0xa0,0x18,0x08,0x11,0x27,0x2b,0x29,0x5f,0x0f,0x08,0x08,0x11,0x08,0x18,0x1a,0x0c,0xbf -,0xab,0x2b,0x1e,0x3c,0x9c,0x90,0x8e,0x84,0x87,0x88,0x86,0x80,0x83,0x83,0x81,0x85,0x81,0x80,0x87,0x91,0x97,0x8d,0x8c,0xab,0xa3,0x3b,0x0e,0x0a,0x07,0x02,0x01,0x09 -,0x04,0x07,0x21,0x10,0x03,0x02,0x0b,0x16,0x0e,0x17,0x2d,0x0e,0x0f,0x27,0x24,0x10,0xab,0xd6,0x1e,0x91,0x9d,0x2f,0x18,0x1f,0x9f,0x94,0x9f,0x91,0x3a,0x25,0x33,0x4e -,0x1e,0x2d,0x97,0x40,0x93,0x87,0x8e,0xbd,0x46,0x91,0x87,0x8f,0x91,0x8e,0x97,0x9b,0x9d,0x9a,0xad,0x92,0xaf,0xa1,0x86,0x96,0x2d,0x10,0x3c,0x95,0xb0,0x49,0xa5,0x21 -,0x1b,0x18,0x1c,0x0c,0x16,0x52,0x26,0x94,0x9c,0x22,0x0b,0x0e,0xce,0x9a,0x30,0xce,0x45,0x2e,0xd7,0x36,0x32,0x0f,0xc9,0xd2,0x3c,0xac,0x1e,0x0b,0x06,0x16,0xb4,0x22 -,0x0d,0x14,0x0f,0x19,0x0d,0x04,0x03,0x0c,0x23,0x29,0xa3,0xa2,0x49,0x21,0x55,0x8a,0x88,0x91,0x88,0x84,0x82,0x80,0x87,0x8a,0x88,0x82,0x81,0x83,0x85,0x86,0x96,0xb7 -,0xa1,0x8c,0xaf,0x1c,0x18,0x1c,0x22,0x04,0x01,0x01,0x05,0x19,0x16,0x0b,0x15,0x0e,0x06,0x0b,0x19,0x24,0x10,0x0f,0x2a,0xbd,0x2d,0x09,0x0d,0x0b,0x33,0x97,0x2e,0xd9 -,0xb5,0x3b,0xb9,0x9a,0x99,0x9b,0x38,0xb0,0x95,0x9c,0x3e,0x16,0x17,0x3e,0x85,0x90,0xbe,0x98,0x90,0x94,0xa4,0xad,0x95,0x9f,0xaf,0x8a,0x86,0x8f,0x1c,0x11,0x2a,0x8f -,0x89,0xcf,0xb6,0x99,0x98,0xad,0xea,0xaa,0xad,0x23,0xae,0x9f,0x5b,0x10,0x02,0x0d,0x2f,0x90,0xc1,0x11,0x28,0xa6,0xa3,0x1c,0x16,0x1e,0x1d,0x30,0x9e,0xa3,0xb8,0x0e -,0x07,0x13,0xb3,0x99,0x12,0x0f,0xba,0x95,0x40,0x0c,0x0b,0x1d,0x1d,0x36,0x1c,0x0f,0x07,0x00,0x09,0x14,0xb1,0x25,0x14,0x4f,0x86,0x88,0xa3,0xa3,0x8b,0x80,0x81,0x80 -,0x82,0x80,0x8b,0x8c,0x83,0x83,0x80,0x8e,0x94,0x86,0x80,0xa4,0x0b,0x0b,0x1f,0x2f,0x0a,0x01,0x06,0x01,0x01,0x01,0x08,0x23,0x09,0x01,0x16,0xa1,0x1e,0x04,0x02,0x18 -,0x99,0xad,0x1b,0x21,0x1c,0x12,0x20,0x1b,0x97,0x9a,0x23,0xc8,0x8a,0x85,0xa5,0x1a,0x2c,0x95,0x8e,0x35,0x1d,0x34,0x5e,0xb7,0x3a,0x91,0x89,0xa0,0xa8,0x84,0x84,0x95 -,0x12,0x12,0x92,0x83,0x8f,0xe0,0xf5,0xb1,0x9a,0x2c,0x9c,0x90,0xa5,0xa9,0x90,0x89,0xc0,0x11,0x15,0x53,0x93,0x4b,0x0d,0x11,0x1a,0x2d,0x11,0xab,0xad,0xd8,0xb1,0x97 -,0x91,0x2d,0x0b,0x06,0x1b,0x98,0xc8,0x13,0x0f,0x16,0x19,0x0a,0x2e,0x1e,0x20,0x1f,0xbc,0xb3,0x11,0x05,0x05,0x14,0xae,0x22,0x0b,0x07,0x0b,0x0c,0x0e,0xaf,0x26,0xa8 -,0x99,0x88,0x87,0xa6,0xb3,0xa2,0x87,0x80,0x80,0x84,0x89,0x87,0x89,0x82,0x82,0x85,0x8a,0x8d,0x86,0x8e,0x34,0x18,0x1e,0xd8,0xb8,0x10,0x03,0x01,0x02,0x00,0x20,0x1a -,0x0e,0x0f,0x14,0x42,0x15,0x07,0x09,0x0f,0x1a,0x36,0x1d,0x0f,0x14,0x09,0x2e,0x8d,0xa8,0x37,0x28,0x47,0xca,0x2d,0x22,0x45,0x99,0x9d,0xb0,0x53,0x25,0x13,0x14,0x97 -,0x89,0x86,0x92,0x92,0x8a,0x98,0x97,0xa3,0x96,0x8b,0xa9,0x28,0xb1,0x5d,0x28,0x97,0x97,0x8e,0x8b,0xbb,0xc4,0x24,0x11,0x47,0x37,0xf3,0xba,0x18,0x0e,0x24,0x0c,0x11 -,0x47,0x1a,0x9c,0x8f,0x9b,0x37,0x13,0x14,0xb5,0x97,0x9d,0x25,0x0d,0x19,0x19,0x4c,0xaa,0xcd,0x99,0x95,0x8c,0xbe,0x03,0x07,0x06,0xaf,0x89,0x4d,0x15,0x0c,0x0d,0x38 -,0x9a,0x2f,0x3b,0xb2,0xa0,0x93,0x13,0x0b,0x20,0x9e,0x83,0x8b,0x3f,0x20,0x14,0x66,0x85,0x89,0x8d,0x8f,0x8b,0x83,0x9e,0x20,0x1b,0x73,0x90,0xa3,0x3e,0x29,0x0e,0x1b -,0x98,0x94,0x90,0xbd,0x1f,0x3d,0x0a,0x09,0x0d,0x19,0xbb,0x44,0x16,0x2f,0x16,0x17,0x9a,0x27,0x9e,0x9b,0xba,0x4d,0x08,0x0b,0x28,0xa7,0xa1,0x2a,0x0f,0x17,0x1b,0x96 -,0x96,0xa4,0x99,0x9e,0x89,0x76,0x03,0x0c,0x25,0x8c,0x84,0x39,0x28,0x2d,0xba,0x80,0x8b,0x90,0x95,0x94,0x83,0x9a,0x23,0x1d,0xb3,0x86,0x89,0xcd,0x19,0x07,0xa8,0x88 -,0xa1,0x98,0x26,0xa5,0xa0,0x0a,0x0e,0x0e,0x1d,0x6b,0x08,0x05,0x09,0x0a,0x95,0x99,0xa8,0xa3,0x37,0xab,0x13,0x08,0x0d,0x25,0x8f,0xbc,0x0a,0x0c,0x0b,0x9f,0x89,0x1a -,0x21,0x1f,0xb0,0xc5,0x05,0x03,0x0e,0xa5,0x99,0x1b,0x06,0x02,0x0d,0x8e,0x94,0xa0,0xb8,0xbb,0x86,0xa8,0x1e,0x3c,0xa4,0x80,0x88,0xa3,0xa7,0x3c,0x88,0x80,0x8a,0x89 -,0x8f,0x85,0x8d,0x1a,0x19,0xb6,0x89,0x89,0x2c,0x18,0x0b,0x47,0x8a,0x35,0xc4,0x16,0x22,0x98,0x0c,0x05,0x06,0x2e,0x8a,0x3f,0x06,0x01,0x08,0x8c,0x8d,0xa7,0x1c,0x18 -,0x99,0x17,0x08,0x05,0x0f,0xa5,0xc9,0x0f,0x0a,0x03,0xbc,0x8b,0x9b,0x9d,0x28,0xad,0x37,0x0c,0x0d,0x1f,0x8a,0x87,0xa5,0x27,0x14,0x92,0x81,0x89,0x8b,0xa2,0x8a,0x87 -,0x28,0x10,0x2a,0x8d,0x81,0x9e,0x17,0x08,0x2d,0x86,0x8e,0x95,0x19,0x32,0x95,0x1d,0x13,0x04,0x14,0x94,0x73,0x12,0x03,0x09,0x8b,0x88,0x8d,0xbe,0x22,0x96,0x3b,0x1f -,0x11,0x33,0x89,0x99,0x3c,0x09,0x07,0x93,0x8a,0x8d,0xa9,0x0e,0x2d,0x1c,0x0f,0x0c,0x0c,0xaf,0xab,0x1d,0x06,0x01,0x27,0x98,0x8d,0x9d,0x1c,0xaf,0x65,0x27,0x22,0x1c -,0x93,0x8a,0x93,0xe3,0x13,0x9b,0x86,0x85,0x89,0xa6,0x95,0xb9,0x54,0x2d,0x18,0x9f,0x9b,0xa8,0x3b,0x09,0xe4,0x9a,0x9a,0x9b,0x13,0x22,0x1b,0x1f,0x1d,0x11,0xbb,0xbe -,0x45,0x20,0x04,0xe7,0x92,0x93,0x90,0x1c,0x3d,0x26,0x14,0x1a,0x13,0x7b,0xab,0x2f,0x14,0x02,0x17,0xaa,0x96,0x8a,0x2a,0x39,0x1e,0x0d,0x21,0x11,0xbd,0x92,0xa2,0xb8 -,0x11,0x37,0x8b,0x89,0x83,0x94,0x8c,0x93,0xd6,0xa9,0x21,0x9d,0x8e,0x9f,0xa0,0x11,0x2a,0x90,0x96,0x8f,0x40,0x3a,0xdb,0x1b,0x1e,0x0b,0x1a,0x3e,0x21,0x22,0x05,0x0e -,0xaf,0x9d,0x8b,0x51,0x21,0x55,0x1d,0x48,0x3f,0xbd,0x9f,0xb8,0x49,0x0f,0x18,0x9f,0x94,0x87,0xab,0x39,0xc3,0x14,0x20,0x19,0x2c,0xa4,0x2c,0x15,0x0a,0x09,0x57,0xa4 -,0x8e,0xad,0x36,0xc1,0x1e,0xbc,0x33,0xa7,0x8d,0x9d,0x9f,0x25,0x17,0x92,0x8b,0x83,0x8d,0xb0,0x9f,0x3f,0xb9,0x4d,0xa7,0x93,0xb2,0x38,0x0b,0x0c,0xac,0xbd,0x8e,0x9e -,0x16,0x48,0x13,0x17,0x1d,0x1f,0xa6,0xbe,0x2b,0x0f,0x09,0xd7,0x9b,0x88,0x9a,0x25,0xb9,0x16,0x2a,0x2e,0x22,0x9a,0xb9,0x26,0x17,0x04,0x2f,0xa5,0x94,0x95,0x27,0x23 -,0x0d,0x1a,0x15,0x1c,0xa1,0xc5,0xe3,0x1d,0x07,0xb2,0x96,0x8c,0x86,0xdf,0x9b,0xb0,0xed,0xbe,0xb6,0x91,0x94,0x96,0xba,0x14,0xf2,0x9d,0x8c,0x86,0x42,0xb2,0x20,0x1a -,0x3d,0x12,0x2d,0x45,0x1f,0x1e,0x0b,0x11,0xbb,0x9f,0x92,0xc7,0x52,0x1c,0x1c,0x3f,0x28,0x99,0xa3,0x64,0xb7,0x18,0x28,0x97,0x9a,0x87,0x9e,0x60,0x49,0x19,0x2e,0x26 -,0xb6,0xc9,0x3a,0x1e,0x08,0x0d,0x3b,0xb5,0x89,0xac,0x35,0xda,0x0e,0x29,0x1f,0xb1,0x95,0xc6,0x56,0x24,0x1a,0xa8,0x95,0x8a,0x8d,0x9a,0x9d,0x1c,0x2f,0x24,0xba,0x95 -,0xad,0xb7,0x19,0x0a,0x38,0xb0,0x9e,0x94,0x20,0x3e,0x1c,0x0f,0x16,0x1e,0xab,0xb2,0x54,0x1c,0x0c,0x24,0xa5,0x8e,0x88,0xb3,0x99,0x58,0x1c,0xb9,0x41,0x98,0x9a,0xee -,0x39,0x10,0x15,0x9c,0x99,0x93,0xa9,0x51,0x2a,0x12,0x17,0x11,0xc5,0x9e,0xdb,0x23,0x0a,0x08,0xba,0x9d,0x8b,0x93,0x3b,0xa5,0x25,0x37,0xdb,0xb4,0x96,0x94,0xa4,0x21 -,0x0b,0x20,0x9a,0x8a,0x8c,0xb6,0xc4,0x11,0x1a,0x23,0x1e,0xb5,0xcc,0x33,0x1b,0x09,0x10,0xdf,0xaf,0x8e,0xa8,0xc0,0x33,0x17,0x26,0x2e,0x9c,0x94,0x96,0xb0,0x19,0x1a -,0xa7,0x90,0x88,0x98,0xc9,0xcb,0x1b,0x44,0x27,0x30,0xa6,0xb8,0x71,0x19,0x08,0x16,0xb6,0x98,0x8e,0x73,0x23,0x0f,0x19,0x31,0x5d,0xa0,0xc1,0xa9,0x2b,0x15,0x29,0xac -,0x95,0x85,0x93,0x9b,0x4e,0x0f,0x34,0x46,0x92,0x91,0xa8,0x2a,0x0c,0x09,0x2c,0x9f,0x91,0x9d,0x3a,0x20,0x0d,0x1e,0x10,0x2a,0xac,0xb9,0x9e,0x1b,0x0a,0x1e,0xa1,0x8a -,0x82,0x9a,0xaf,0x25,0x1d,0xe0,0xcf,0xa5,0xa2,0x9f,0x35,0x18,0x10,0x29,0xa9,0x8d,0x95,0xbd,0x1c,0x06,0x17,0x16,0xba,0x95,0xaf,0x3e,0x13,0x0a,0x2d,0x9e,0x90,0x8b -,0xba,0xa9,0x33,0x25,0x21,0x41,0x95,0x8f,0x8d,0x34,0x0c,0x0f,0x55,0x91,0x85,0xa3,0x3f,0x1b,0x0f,0x29,0x13,0x31,0xae,0xb1,0x3f,0x17,0x07,0x15,0xac,0x8b,0x88,0x9b -,0xbb,0x19,0x24,0x27,0x9f,0x8f,0x9c,0x9f,0x22,0x0f,0x2b,0xb0,0x98,0x88,0xa2,0xab,0x2e,0x0e,0x14,0x12,0xb6,0x8e,0x94,0x24,0x08,0x03,0x1a,0x94,0x87,0x99,0xce,0x2d -,0x16,0x24,0x16,0x4e,0x98,0x96,0x90,0x54,0x09,0x12,0xbf,0x8e,0x80,0x92,0x4f,0x0f,0x0c,0x1f,0xc5,0x9e,0xa9,0xb5,0x1f,0x0d,0x0d,0x1a,0xb4,0x8d,0x96,0x93,0xc9,0x09 -,0x0e,0x14,0x9c,0x85,0x8d,0xaf,0x16,0x06,0x31,0x96,0x8d,0x89,0xbb,0x5e,0x1d,0x1e,0x11,0x1d,0xa2,0x9c,0x8f,0x37,0x04,0x08,0x27,0x91,0x81,0x98,0xbe,0x12,0x05,0x1e -,0x3e,0xa9,0xa1,0xad,0x4c,0x1f,0x0f,0x21,0xad,0x8b,0x87,0x8b,0xa9,0x07,0x0e,0x17,0x98,0x84,0x96,0xfb,0x10,0x02,0x20,0x9f,0x9d,0x90,0xb3,0xa1,0x21,0x0f,0x0d,0x1a -,0x9a,0x8e,0x8b,0x22,0x04,0x04,0x1a,0x93,0x80,0x8e,0xa7,0x1c,0x0a,0x45,0x3d,0xab,0x98,0x9b,0xa1,0x36,0x0a,0x0f,0x50,0x90,0x81,0x88,0xc1,0x05,0x06,0x10,0x9b,0x8a -,0x9d,0x56,0x0f,0x07,0x1d,0xca,0xba,0x8a,0x9d,0x99,0xba,0x09,0x0e,0x13,0x9b,0x86,0x89,0x2e,0x09,0x03,0x1e,0x8d,0x84,0x8e,0xea,0x19,0x0f,0xb7,0x20,0x2f,0x97,0x9d -,0x99,0x29,0x04,0x0a,0x33,0x91,0x80,0x92,0x28,0x0b,0x07,0x19,0xad,0x99,0xa0,0xab,0x1e,0x0e,0x0f,0x29,0x9b,0x83,0x8e,0x9f,0x2f,0x09,0x17,0x18,0x97,0x83,0x8f,0x38 -,0x0b,0x01,0x13,0x96,0x8a,0x88,0xac,0x25,0x15,0x18,0x14,0x33,0x95,0x93,0x97,0x19,0x01,0x06,0x4a,0x8b,0x80,0x91,0x3b,0x19,0x06,0x21,0xe8,0xa7,0x8e,0x96,0x3a,0x19 -,0x0a,0x1e,0x8f,0x84,0x87,0x9f,0x2b,0x07,0x15,0x10,0xaf,0x88,0xa0,0x4a,0x0d,0x00,0x0f,0x9b,0x93,0x86,0xa4,0x41,0x4a,0x14,0x20,0xbc,0x93,0x8b,0x8d,0x1d,0x07,0x05 -,0x24,0x89,0x80,0x93,0x27,0x19,0x08,0x20,0x1f,0xc1,0x8f,0xa4,0xcb,0x13,0x01,0x16,0x8d,0x8b,0x85,0xa5,0x1f,0x0f,0x09,0x12,0xba,0x8c,0x8f,0x95,0x16,0x07,0x14,0x9b -,0x88,0x83,0xb5,0x3b,0xae,0x0d,0x22,0x1f,0xa8,0x8a,0x99,0x17,0x08,0x00,0x19,0x8a,0x8b,0x8e,0x3c,0x1e,0x1b,0x33,0x14,0xb5,0x8a,0x8d,0x92,0x14,0x02,0x0e,0x8f,0x87 -,0x84,0xbe,0x34,0x31,0x0a,0x1d,0x18,0xa1,0x8c,0xb1,0x0c,0x05,0x0b,0x8f,0x83,0x8e,0xa9,0x1d,0xaf,0x13,0x0f,0x15,0xab,0x8d,0x86,0xa3,0x05,0x05,0x0d,0x93,0x81,0x88 -,0x14,0x1b,0x1a,0xc5,0x34,0x00,0xa1,0x80,0xa0,0x0e,0x04,0x05,0x8c,0x83,0x88,0xaa,0x23,0x2e,0x05,0x00,0x0c,0x82,0x85,0x9e,0x97,0x0f,0x09,0x8e,0x83,0x87,0x8f,0x2e -,0x9a,0x11,0x02,0x02,0x23,0x81,0x8f,0x0e,0x00,0x06,0x10,0x9b,0x9d,0x94,0xad,0x97,0x1f,0x0a,0x8d,0x8d,0x87,0x8d,0x9d,0x1a,0x07,0x03,0xa8,0x8a,0x8b,0x8e,0x4c,0x28 -,0x0d,0x2b,0x1a,0x8c,0x82,0xa6,0x0b,0x03,0x0c,0x3d,0x8d,0x8b,0x8b,0x07,0x0d,0x1d,0x20,0x07,0x24,0x85,0x8a,0xc2,0x04,0x00,0x0a,0x87,0x87,0x9b,0x25,0x8e,0x8c,0x17 -,0x26,0xa8,0x80,0x85,0xa0,0x0b,0x09,0x07,0xc0,0x9a,0x6a,0x9b,0xbc,0xbc,0x09,0x06,0x06,0x9c,0x80,0xa0,0x0a,0x03,0x13,0x94,0x87,0xbd,0x8f,0x8e,0x8b,0x11,0x01,0x19 -,0x8c,0x80,0x92,0x56,0x09,0x15,0x18,0xb5,0x9b,0x83,0x9a,0x16,0x0d,0x04,0x0f,0x36,0x84,0x88,0x3f,0x04,0x07,0x04,0xdc,0x86,0x86,0x92,0x26,0x2e,0x04,0x0e,0xee,0x88 -,0x88,0xa3,0xd8,0x0d,0x03,0xac,0x80,0x82,0x88,0xad,0xc8,0x0e,0x05,0x07,0x39,0x8f,0xc9,0x09,0x00,0x04,0x14,0x8c,0x90,0x8f,0x92,0xa2,0x1e,0x04,0x1f,0x8f,0x81,0x86 -,0xa5,0x06,0x07,0x2c,0x86,0x88,0x8f,0x9c,0x2f,0x19,0x02,0x08,0x4b,0x80,0x85,0x30,0x02,0x0c,0x1f,0xa0,0x93,0x9a,0x8d,0x4f,0x0f,0x00,0x08,0xa9,0x80,0x8a,0x0f,0x01 -,0x07,0x12,0x37,0x89,0x8b,0x85,0x86,0x8d,0x1a,0x06,0xb8,0x87,0x83,0x2a,0x14,0x0e,0x20,0x19,0xa5,0x90,0x9c,0xda,0x09,0x06,0x00,0x0a,0x52,0x8e,0x93,0x8d,0x3d,0x1a -,0x1e,0x96,0x84,0x91,0x8e,0xbf,0x1e,0x06,0x10,0x9a,0x82,0x85,0xaa,0x0b,0x08,0x0b,0x3b,0x8c,0x8e,0x8d,0x38,0x2a,0x0c,0x08,0x13,0x95,0x83,0x66,0x06,0x03,0x09,0x30 -,0x8a,0x8b,0x88,0x99,0xb8,0x0c,0x00,0x0a,0x95,0x80,0x8f,0xd0,0x37,0x5e,0xbd,0x89,0x88,0x8a,0x9b,0xb3,0x16,0x00,0x0b,0xa0,0x82,0x9d,0x0d,0x00,0x05,0x0b,0xcd,0xc3 -,0x9e,0x8d,0xa3,0x2b,0x06,0x3e,0x8f,0x80,0x8f,0x1c,0x11,0x13,0x17,0xac,0x88,0x87,0x85,0xc4,0x1d,0x04,0x12,0xb7,0x8e,0x86,0xb5,0x20,0x0d,0x0d,0x15,0x9c,0x91,0x8d -,0x26,0x08,0x04,0x08,0x24,0x9b,0x83,0x95,0x33,0x0b,0x05,0x0b,0x9d,0x88,0x88,0x95,0x9c,0xa3,0x20,0xf9,0x8f,0x80,0x8d,0xd3,0x0d,0x0c,0x0e,0xbb,0x95,0xaf,0xb6,0x13 -,0x08,0x00,0x07,0x2c,0x8f,0x96,0x4a,0x17,0x1e,0x26,0x97,0x88,0x96,0x8e,0xab,0x4d,0x0c,0x13,0xaa,0x86,0x84,0xa7,0x14,0x0b,0x0e,0x2a,0x8e,0x90,0x87,0x9c,0x2e,0x0c -,0x0a,0x2d,0x9f,0x98,0x4a,0x0e,0x05,0x09,0x0b,0x9e,0x8b,0x86,0x94,0x28,0x0c,0x04,0x28,0x9c,0x88,0x97,0x59,0xc7,0xce,0x29,0x8f,0x88,0x86,0x8e,0x2f,0x1a,0x0d,0x2a -,0x4b,0x9c,0x44,0x16,0x0b,0x04,0x03,0x28,0x8f,0x8f,0x98,0x32,0x4c,0x15,0xf9,0x9c,0x8d,0x90,0x58,0x18,0x0c,0x0d,0x3f,0x86,0x84,0x89,0xaa,0x28,0x0b,0x14,0xcd,0x99 -,0x8c,0xac,0x1a,0x0d,0x0a,0x2a,0x8f,0x92,0x95,0xe3,0x22,0x08,0x0b,0x24,0x9c,0x8a,0xbf,0x1e,0x0b,0x0c,0x13,0xa4,0x90,0x90,0x96,0xaa,0x53,0x27,0xbb,0x94,0x89,0x91 -,0x6f,0x16,0x2a,0x22,0x9b,0x8f,0x9e,0xb7,0x1d,0x0d,0x02,0x0d,0x25,0xab,0x45,0x1f,0x1b,0x46,0x24,0xa3,0x85,0x8b,0x8c,0x2f,0x13,0x0a,0x1b,0x9d,0x8e,0x97,0xb7,0x26 -,0x23,0x1a,0x56,0x8b,0x8e,0x8c,0xd5,0x22,0x0d,0x17,0xce,0xaa,0xa9,0x32,0x19,0x15,0x10,0x18,0x8e,0x92,0x98,0x3e,0x1d,0x10,0x0d,0x1f,0x33,0xa1,0xa6,0x49,0x4d,0xdc -,0xd0,0x88,0x87,0x8a,0x9e,0xba,0x29,0x17,0xcc,0xb5,0xa0,0xd9,0x19,0x0d,0x0d,0x0b,0xbf,0x9d,0xa6,0x3f,0x1b,0x29,0x12,0x3e,0x9d,0x8d,0x9c,0x31,0x1c,0x1d,0x21,0xa6 -,0x8b,0x8d,0x90,0xce,0x2b,0x0c,0x1b,0xa8,0x8f,0x95,0x3d,0x27,0x25,0x1d,0x3b,0x92,0x9c,0xa4,0x2d,0x17,0x07,0x17,0x66,0x9c,0x9b,0x3d,0x26,0x1a,0x17,0x0e,0x9f,0x9b -,0x97,0x5d,0x23,0x28,0xbd,0x90,0x8a,0x8b,0xa2,0xb0,0x23,0x37,0x1c,0x97,0x90,0x96,0x32,0x0f,0x0f,0x06,0x21,0xbf,0xa3,0x26,0x1a,0x10,0x1d,0x1b,0x97,0x88,0x90,0xa2 -,0x1e,0x1e,0x13,0x4f,0x9f,0x8e,0x96,0xae,0x29,0x26,0x10,0xb9,0x8e,0x9b,0x98,0x29,0x2a,0x11,0x28,0xa7,0x95,0x9c,0x35,0x15,0x11,0x0b,0x1e,0x8f,0x9a,0x96,0x24,0x3d -,0x19,0x12,0xaf,0xa6,0x9d,0x2d,0x10,0x15,0x20,0xbc,0x86,0x8a,0x89,0xa1,0xca,0x29,0x19,0x9b,0x92,0x8f,0x2f,0x0f,0x14,0x0b,0x0a,0xc4,0xa9,0xa7,0x2b,0x16,0x14,0x0f -,0xa0,0x8c,0x88,0xa1,0x1e,0x1e,0x1b,0x0e,0xb5,0x93,0x8e,0x92,0xbe,0xec,0x12,0xc3,0x95,0x95,0xb4,0x1b,0x1b,0x1a,0x13,0xbd,0x8e,0x8e,0x9f,0x4d,0x3c,0x0f,0x19,0x39 -,0xa0,0xb8,0x26,0x1d,0x18,0x0f,0x2c,0x91,0x9a,0xa5,0x1c,0x1d,0x14,0x38,0x91,0x87,0x89,0xaa,0x3d,0x5f,0x1e,0x30,0x90,0x96,0x99,0x2f,0x42,0x0f,0x0f,0x25,0xb9,0xac -,0x1a,0x0b,0x06,0x0c,0x13,0x8e,0x86,0x89,0x99,0x9d,0x35,0x18,0x24,0xae,0x99,0xc4,0x47,0x20,0x2f,0x17,0x94,0x89,0x8a,0x9b,0x37,0x19,0x0b,0x20,0xa3,0x8e,0xdb,0x1d -,0x0e,0x1d,0x0f,0xbb,0x99,0xa4,0xa7,0x2f,0x45,0x12,0x35,0xa6,0x93,0xad,0x1b,0x0c,0x17,0x0f,0xc5,0x87,0x88,0x88,0x9f,0xa2,0x1b,0x2c,0xa5,0x91,0x9e,0x1d,0x0b,0x16 -,0x12,0x1f,0x95,0xa2,0x9c,0x19,0x16,0x08,0x0d,0xbd,0x93,0x8d,0xa2,0x38,0x38,0x31,0x39,0x8a,0x8f,0x96,0x2c,0x24,0x1d,0x18,0xb8,0x99,0x90,0xb6,0x19,0x12,0x0d,0x0d -,0x9a,0x8e,0x91,0xde,0x24,0x2f,0x1c,0xc8,0xad,0x9e,0xbe,0x18,0x13,0x1c,0x1e,0x8f,0x88,0x90,0xd9,0x1b,0x1d,0x08,0x1d,0xb6,0x8e,0x95,0x4d,0x3d,0xb0,0xb5,0x99,0x8a -,0x9c,0x5d,0x1e,0x27,0x0f,0x0e,0x23,0xad,0xb1,0x2b,0x13,0x11,0x0f,0x27,0x8e,0x8f,0x94,0xaa,0x9e,0x72,0x40,0xa3,0x92,0x9d,0x23,0x17,0x1e,0x1f,0x1a,0x99,0x98,0xa4 -,0xc3,0x3f,0x18,0x0c,0x1e,0xa4,0x96,0xb7,0x2c,0x24,0x3e,0x28,0x92,0x8d,0x9d,0xd5,0x3f,0x42,0x14,0x2f,0xa1,0x90,0xaa,0x39,0x14,0x0f,0x05,0x1b,0x9b,0x9e,0xad,0x2f -,0xc0,0x23,0xaa,0x8f,0x89,0x97,0x5b,0x24,0x26,0x0f,0x37,0x98,0xa8,0xad,0x27,0x58,0x0e,0x13,0x2b,0x97,0x95,0xa4,0x7c,0x47,0x1f,0x3d,0x8b,0x95,0xac,0x11,0x1c,0x0b -,0x0d,0x2f,0x9b,0x97,0xac,0x39,0x22,0x17,0x17,0x95,0x8f,0x92,0x66,0xd9,0x1e,0x29,0x96,0x88,0x87,0xad,0x18,0x14,0x16,0x15,0x9c,0xa9,0xa9,0x2c,0x2d,0x17,0x04,0x10 -,0x3a,0x97,0xb4,0x2a,0x1d,0x1e,0x21,0x90,0x84,0x85,0x97,0xbd,0x35,0x0f,0x2f,0xa4,0x96,0xaa,0x2f,0x1c,0x1c,0x0d,0x24,0x9d,0x98,0xa3,0x4f,0x2c,0x10,0x37,0x95,0x87 -,0x97,0x2c,0x0f,0x0f,0x0a,0x1f,0x9e,0xa7,0xb4,0x37,0xa8,0x1d,0x1e,0xbd,0x8f,0x8e,0xa2,0x2b,0x14,0x0e,0x1f,0x89,0x84,0x8b,0xd1,0x2c,0x0e,0x12,0xec,0x99,0x99,0x36 -,0x19,0x0e,0x0d,0x0c,0xa5,0xa0,0xaa,0xc6,0xc2,0x22,0x0c,0x71,0x8b,0x81,0x8c,0xb6,0x1c,0x15,0x0f,0xa7,0x9e,0xbf,0x4a,0xb6,0x2f,0x0a,0x12,0xec,0x96,0x9b,0xaa,0x27 -,0x14,0x09,0xa8,0x87,0x87,0x8f,0xba,0x22,0x05,0x15,0xa8,0x8f,0xcb,0x1e,0x1c,0x2f,0x1a,0x40,0x9c,0x9d,0x91,0x9d,0xae,0x06,0x09,0xcf,0x8d,0x8a,0x9c,0x4c,0x1a,0x0b -,0x19,0x8f,0x8f,0x9c,0xd6,0xb4,0x11,0x0a,0x1e,0xb0,0x96,0x9e,0x67,0x16,0x07,0x09,0x95,0x85,0x83,0x93,0x9e,0x1a,0x0d,0x4d,0x9f,0x99,0x2a,0x23,0x1c,0x0f,0x0b,0x65 -,0x9f,0x9b,0x9d,0x91,0xed,0x05,0x0a,0x6a,0x86,0x89,0x92,0x3a,0x15,0x0b,0xec,0x8f,0x9f,0xb8,0xb8,0x76,0x07,0x0d,0x38,0x8f,0x8e,0x9c,0x57,0x13,0x04,0x10,0x9b,0x8f -,0x8f,0x98,0x98,0x0d,0x0c,0x3c,0x92,0x96,0xba,0xc1,0x2e,0x0f,0x0f,0xbe,0xb0,0x96,0x95,0x91,0x0f,0x00,0x0d,0x9f,0x87,0x89,0x8f,0x54,0x14,0x0b,0xa4,0x92,0x9c,0xbb -,0xe1,0x18,0x04,0x10,0x47,0x95,0x91,0x94,0x9e,0x1d,0x05,0x1e,0x9c,0x96,0x8f,0x8f,0xa4,0x07,0x09,0x39,0x9d,0x93,0x96,0xce,0x22,0x08,0x16,0x9d,0x97,0x8c,0x91,0x9a -,0x08,0x01,0x0e,0xac,0x89,0x8c,0x95,0x32,0x0c,0x14,0x91,0x96,0xa1,0xaa,0x96,0x1b,0x04,0x13,0x2e,0xa3,0x9d,0x96,0xc9,0x11,0x06,0x30,0xaa,0x99,0x8c,0x86,0xa4,0x08 -,0x19,0xcf,0x94,0x9e,0x9f,0x5a,0x14,0x04,0x12,0xa8,0xaa,0x94,0x8b,0x95,0x0a,0x07,0x2d,0x9a,0x94,0x8f,0x98,0x2c,0x0a,0x10,0xab,0xbc,0x9e,0x97,0x8f,0x11,0x05,0x12 -,0x38,0x95,0x8f,0x8a,0xaf,0x0d,0x01,0x28,0xa7,0x94,0x8b,0x89,0x5b,0x05,0x0e,0x4e,0x96,0x90,0x8c,0xc9,0x0e,0x02,0x1b,0xaf,0xa7,0x92,0x8a,0xa3,0x04,0x0a,0x28,0x9c -,0x8e,0x8a,0x9a,0x29,0x0a,0x17,0x9b,0xaa,0x9b,0x98,0x97,0x0c,0x03,0x16,0xb6,0x98,0x95,0x96,0x2b,0x0b,0x0b,0xa8,0xa9,0x95,0x89,0x86,0x2c,0x03,0x10,0x4a,0x9e,0x9e -,0x94,0xc1,0x19,0x05,0x2b,0xbf,0xb7,0x8d,0x87,0x9a,0x05,0x0c,0x19,0xde,0xa3,0x8d,0x92,0x37,0x08,0x1b,0xab,0x3e,0x94,0x89,0x89,0x0c,0x04,0x0e,0x1f,0xdf,0x94,0x8c -,0x53,0x0b,0x0a,0xa2,0xc7,0x94,0x88,0x83,0x3b,0x03,0x10,0x32,0x9f,0x9a,0x8e,0x4f,0x0c,0x00,0x37,0x4e,0xaf,0x8b,0x84,0x93,0x06,0x09,0x17,0xa7,0x97,0x8a,0x96,0x21 -,0x05,0x1d,0xae,0xd8,0x8f,0x88,0x8c,0x08,0x04,0x0f,0x5b,0xa1,0x8e,0x8e,0x49,0x0b,0x09,0xb8,0x2c,0x9b,0x89,0x84,0x28,0x04,0x14,0x48,0xa7,0x9d,0x8f,0xce,0x10,0x07 -,0xaf,0x4c,0x4b,0x99,0x89,0x9b,0x07,0x10,0x20,0xb9,0x9e,0x87,0x8d,0x39,0x08,0x24,0xbd,0x24,0xa4,0x8d,0x8d,0x0a,0x07,0x11,0x46,0xa9,0x8f,0x8c,0x4f,0x0b,0x10,0x9d -,0x3a,0x97,0x87,0x85,0x1f,0x03,0x11,0x28,0xa9,0x98,0x8d,0x52,0x0b,0x06,0xb5,0x31,0x3b,0x90,0x85,0xa1,0x03,0x0d,0x16,0xd3,0x98,0x84,0x8e,0x1f,0x05,0x2a,0xa7,0x39 -,0x91,0x86,0x8b,0x0b,0x0a,0x16,0x2c,0x4e,0x9a,0x93,0x27,0x08,0x11,0xa4,0x1c,0xa6,0x89,0x82,0x2d,0x09,0x1c,0x28,0x60,0xa6,0x8c,0xb9,0x0e,0x0b,0x9a,0x41,0x36,0x91 -,0x83,0x9e,0x07,0x16,0x1d,0xd0,0xb2,0x8b,0x99,0x14,0x01,0x23,0x5f,0x1c,0x99,0x84,0x8d,0x09,0x0e,0x22,0xdc,0xd0,0x90,0x89,0xf3,0x08,0x16,0x9c,0x28,0x9d,0x87,0x81 -,0x1e,0x05,0x0f,0x1b,0x2a,0xb0,0x8b,0xb2,0x0b,0x08,0xaf,0x27,0x27,0x97,0x82,0xae,0x0a,0x1e,0x3d,0xae,0xad,0x87,0x8f,0x1c,0x08,0xac,0xa8,0x20,0xa6,0x86,0x91,0x08 -,0x0e,0x21,0x68,0x1f,0xab,0x97,0x22,0x07,0x22,0x9c,0x22,0xb4,0x89,0x84,0x17,0x0a,0x19,0x71,0x6d,0xa1,0x89,0x9f,0x0e,0x11,0x98,0x4e,0x3c,0x98,0x83,0x3e,0x07,0x11 -,0x2c,0x46,0x40,0x8e,0x99,0x16,0x08,0xcf,0x42,0x2c,0x9d,0x83,0x95,0x0c,0x10,0x22,0x3f,0x25,0x99,0x90,0x3d,0x0c,0xf6,0xa3,0x41,0xa3,0x87,0x89,0x12,0x0d,0x16,0x40 -,0x1d,0xc4,0x96,0x57,0x0b,0x26,0x9d,0x24,0x34,0x96,0x85,0x2f,0x11,0x1a,0xcb,0x64,0xaf,0x8d,0x9b,0x13,0x13,0xa6,0x45,0x5a,0x9e,0x84,0xbb,0x0c,0x0f,0x2f,0x5c,0x3b -,0x9b,0xa7,0x18,0x0c,0xb6,0x6f,0xda,0x9c,0x83,0x97,0x0e,0x0d,0x21,0xb1,0x4b,0x9a,0x99,0x34,0x0d,0xb6,0xb6,0x2f,0x3c,0x91,0x8f,0x19,0x11,0x19,0xba,0x2b,0xac,0x94 -,0xa6,0x15,0x3e,0xc5,0x1f,0x35,0x95,0x87,0x2b,0x18,0x17,0x43,0x28,0x45,0x98,0xa3,0x18,0x1c,0xa9,0x50,0xbc,0x97,0x85,0x55,0x0e,0x0f,0x2f,0x3d,0x34,0x9b,0x9c,0x20 -,0x19,0xa8,0x5f,0xd2,0xb6,0x8c,0xb4,0x13,0x19,0x33,0xb2,0x3d,0x9d,0x9a,0x2f,0x18,0xaf,0xdb,0x3d,0x55,0x8d,0x97,0x1b,0x16,0x1c,0x6b,0x21,0x56,0xa6,0x3b,0x13,0xc9 -,0xb3,0xec,0xb3,0x8c,0x8c,0x2a,0x1e,0x1c,0xec,0x2f,0x4f,0xa9,0xc1,0x1c,0xc6,0xae,0x2b,0x2d,0xa9,0x8d,0x36,0x1b,0x18,0x2e,0x35,0x4f,0x99,0x9f,0x23,0x61,0xb0,0x2d -,0x46,0x9e,0x88,0xc3,0x1e,0x1c,0x32,0x40,0x38,0xae,0xbe,0x1a,0x25,0xa5,0x44,0x45,0xaa,0x89,0xa1,0x23,0x21,0x2b,0x3c,0x28,0x52,0xb4,0x23,0x1d,0x9e,0x4e,0x35,0x4e -,0x92,0xa9,0x1c,0x2a,0x37,0xcc,0x2f,0xb2,0x9f,0xe1,0x26,0x9a,0xe0,0x28,0x2a,0x98,0x95,0x20,0x26,0x2d,0xc0,0x26,0x3b,0xc3,0x3d,0x19,0xa5,0xa5,0x3a,0x3b,0x9a,0x8f -,0x2c,0x2e,0x32,0x4b,0x1e,0x2b,0xbb,0xa9,0x25,0xa4,0x98,0x37,0x2c,0xb6,0x8f,0x2b,0x1c,0x1c,0x32,0x2e,0x3a,0xa8,0xa5,0x2a,0xbe,0x92,0xde,0x2c,0x2f,0x96,0x4a,0x28 -,0x35,0xdd,0x2a,0x1a,0x2e,0xeb,0x2b,0x3b,0x94,0x6e,0x3b,0x4b,0x8d,0x9b,0x47,0x3c,0x43,0x57,0x1d,0x26,0x40,0x56,0x38,0x90,0xaf,0x2c,0x28,0x9b,0x9e,0x1f,0x28,0x27 -,0x38,0x21,0x53,0xae,0xb1,0x2c,0x9a,0xa9,0x57,0x45,0xa8,0x9e,0x1b,0x2f,0x50,0xad,0x25,0x24,0x3f,0xdd,0x27,0xa5,0x9d,0x36,0x36,0xab,0x8d,0x47,0x2d,0x30,0x51,0x1d -,0x19,0x36,0xb9,0x22,0xbf,0x94,0xbe,0xf3,0x4b,0x94,0x2c,0x1d,0x23,0xdb,0x56,0x2b,0xb5,0xa9,0x43,0x5e,0x8e,0xaa,0x46,0x1a,0xa6,0xcb,0x25,0x36,0xbf,0xb5,0x24,0x5a -,0x65,0x2e,0x22,0x98,0xb5,0x3f,0x29,0x9d,0x9f,0x1f,0x32,0x77,0xa7,0x21,0x2a,0x3d,0x3e,0x29,0x92,0x93,0xc0,0x34,0xad,0x9f,0x17,0x16,0x1f,0xb2,0x31,0x2f,0x57,0xcb -,0x34,0x95,0x8f,0xc6,0x27,0x2b,0xa5,0x1f,0x2a,0x42,0xa9,0x37,0x24,0xe7,0xb5,0x2a,0x6c,0x9b,0x77,0x46,0xc9,0x8e,0xdf,0x22,0x34,0xa7,0xb7,0x1b,0x24,0x26,0x20,0x53 -,0x8e,0x9f,0xc6,0x3b,0xa4,0xf6,0x19,0x28,0xcf,0xaf,0x25,0x25,0x7a,0x37,0x49,0x8d,0x99,0xd2,0x1c,0xbc,0xb4,0x19,0x27,0x55,0x9d,0x61,0x33,0x4d,0x2d,0x1a,0xa9,0xa0 -,0xba,0x4e,0xa1,0x96,0x1f,0x24,0x4c,0xa4,0x44,0x18,0x21,0x23,0x1d,0x98,0x90,0xa0,0x36,0xb6,0x92,0x28,0x17,0x1a,0xa6,0x5b,0x21,0x2e,0xb5,0x3f,0xa5,0x8b,0xab,0x2d -,0x18,0xa1,0x37,0x1a,0x28,0xc0,0x9f,0x39,0xd1,0xb1,0x23,0x21,0x9c,0xa6,0x69,0x2b,0x9b,0xaf,0x19,0x23,0xaf,0x9b,0x22,0x14,0x23,0x2f,0x3e,0x8e,0x97,0xa8,0x2f,0xa1 -,0x98,0x18,0x12,0x15,0xc3,0x29,0x2c,0xba,0xba,0x38,0x9b,0x8f,0xa8,0x2d,0xc6,0x95,0x20,0x13,0x1b,0xb5,0xb6,0x3a,0xb9,0xb9,0x1b,0x32,0x9e,0xac,0xc6,0xdb,0x97,0x3b -,0x1f,0x2e,0x9f,0xa3,0x16,0x17,0x2f,0x22,0x3e,0x92,0x9e,0xaf,0xd3,0x8d,0x9f,0x16,0x0e,0x21,0xad,0x2d,0x39,0xd3,0x30,0x21,0x98,0x96,0xa9,0x20,0xb4,0xad,0x15,0x15 -,0x2c,0x97,0xaf,0xc3,0xbd,0x55,0x15,0xc5,0x9a,0xa4,0x4c,0xbc,0x97,0x26,0x1f,0x2e,0x98,0xb1,0x19,0x1f,0x32,0x1e,0xf6,0x99,0xab,0xb1,0xa7,0x8c,0xcf,0x0f,0x0c,0x2a -,0xad,0x3a,0x30,0x3f,0x26,0xbc,0x8c,0x8f,0xa6,0x1d,0xbf,0x2b,0x16,0x1d,0xca,0xa1,0x42,0x3d,0xbb,0xd4,0x2a,0x9e,0xa6,0xbc,0x20,0xb0,0xac,0x1c,0x1e,0x40,0x9b,0x33 -,0x1b,0x29,0xce,0x3f,0x9b,0x9c,0xa5,0xb7,0x9d,0x8f,0x21,0x0e,0x0c,0x39,0xd4,0x47,0x4e,0x41,0x2b,0x9d,0x8a,0x90,0xb8,0x23,0xac,0x1f,0x14,0x0f,0x39,0xb9,0x33,0xac -,0x9f,0x3c,0x2a,0xa2,0xc6,0xc3,0x3e,0x93,0xa9,0x1e,0x1a,0x35,0x9d,0x33,0x2a,0x27,0x24,0x1f,0xa8,0xa8,0xa5,0xca,0x91,0x91,0x1c,0x0d,0x0f,0xa2,0xb2,0x4e,0x2c,0x2f -,0x26,0x96,0x8c,0xa6,0x39,0x48,0x9c,0x23,0x15,0x13,0x4f,0xb1,0xad,0x9e,0x96,0x39,0x25,0xac,0x2e,0x55,0x29,0x98,0x44,0x13,0x1a,0xb8,0x93,0xc6,0xdc,0xcd,0x27,0x16 -,0xa8,0xbe,0xad,0xbe,0x99,0x9f,0x19,0x12,0x2d,0x98,0x55,0x34,0x30,0x1f,0x23,0xaa,0xa1,0xbb,0xbe,0x9a,0x87,0x57,0x0f,0x0d,0x36,0x9a,0xa7,0xa6,0x1d,0x57,0x0f,0x0b -,0x14,0x0a,0xa8,0xa4,0xce,0x0e,0x04,0x9d,0x96,0x9a,0x8f,0x8c,0xb2,0xa0,0x82,0xaf,0x9f,0x8e,0xaf,0x96,0x10,0x04,0x8e,0x86,0x9f,0xa5,0x93,0x27,0x12,0x15,0x15,0x0f -,0x04,0x0d,0x1b,0x05,0x02,0x02,0x10,0x2d,0x09,0x09,0x11,0x0e,0xd7,0x8b,0xa1,0xba,0xa8,0x88,0x9d,0x1a,0x1e,0xaf,0x8e,0x8d,0x8c,0x8a,0x9c,0x94,0x81,0x80,0x80,0x8a -,0x81,0x8b,0x89,0x1d,0x0f,0xa4,0x8f,0x8e,0x0d,0x2f,0x02,0x0d,0xbd,0x0b,0x11,0x2e,0x12,0x03,0x0e,0x0a,0x35,0x07,0x0a,0x10,0x01,0x03,0x0f,0xaf,0x15,0x1b,0xa0,0x8e -,0x0c,0x07,0x0e,0x96,0x80,0x87,0x89,0xa5,0x26,0xa3,0x80,0x84,0x82,0xcc,0x84,0x8b,0x8f,0x8b,0xa1,0x8f,0x98,0x8d,0x95,0x9f,0x11,0x2d,0x19,0x4f,0x29,0x48,0x22,0x00 -,0x03,0x05,0x23,0x12,0x0a,0x02,0x09,0x00,0x0d,0x3c,0x0f,0x0a,0x2b,0x86,0x16,0x0b,0x09,0xa5,0x83,0x86,0x83,0x8f,0x18,0x12,0x86,0x86,0x8e,0xd6,0x85,0x8f,0x12,0xab -,0x8a,0x99,0x8d,0x83,0x80,0x90,0x1e,0x29,0xb3,0x86,0xc8,0x96,0xae,0x00,0x04,0x00,0x9c,0x72,0x09,0x07,0x06,0x01,0x0f,0x93,0x23,0x49,0xa3,0x9e,0x02,0x01,0x00,0x1f -,0x8c,0x8e,0x94,0x24,0x21,0x05,0x98,0x80,0x84,0x82,0x88,0x8c,0x2a,0x2b,0x9f,0x87,0x83,0x87,0x8e,0x3a,0x0a,0x3e,0x89,0x8b,0x8e,0x9a,0x8e,0x17,0x13,0x37,0xa0,0xa5 -,0x1f,0x95,0xd9,0x08,0x0c,0x01,0x34,0x88,0xa7,0x4c,0x03,0x00,0x04,0x9d,0x9b,0x99,0x1b,0x00,0x06,0x00,0x2e,0x0d,0x9e,0x4e,0x22,0xe2,0x02,0x00,0x04,0x8b,0x8a,0xbe -,0x04,0x15,0x8e,0x34,0x87,0x70,0x3a,0x8c,0x80,0x86,0x22,0x1f,0xb4,0x89,0x87,0x80,0x9d,0x0f,0x07,0x9f,0xa7,0xae,0x24,0x9d,0xbe,0x03,0x13,0x0b,0xac,0xa5,0x86,0x80 -,0x34,0x00,0x24,0xc2,0x92,0x82,0x87,0x8e,0x05,0x01,0x20,0x88,0x80,0x8c,0x99,0x2b,0x0b,0x0c,0x8b,0x82,0x91,0x93,0x86,0x8d,0x07,0x04,0x1b,0x80,0x9a,0x39,0x0c,0x0d -,0x1f,0x09,0xa7,0x89,0x9d,0x0d,0xa6,0x0c,0x01,0x05,0x2e,0x9e,0x15,0x9a,0x1c,0x00,0x01,0x02,0x1c,0x3e,0x8f,0xb8,0x00,0x04,0x00,0xc5,0x8c,0x8b,0x1f,0x1a,0x0f,0x00 -,0x89,0x87,0x81,0x8d,0x85,0x8a,0x1d,0x17,0xa5,0x80,0x80,0x88,0x91,0x88,0x88,0x87,0x81,0x80,0x80,0x81,0x81,0x10,0x0e,0x8c,0x81,0x8e,0x9a,0x52,0x0c,0x05,0x00,0x09 -,0x0c,0xb6,0x0c,0x08,0x03,0x00,0x00,0x0e,0xa2,0x0b,0x06,0x07,0x09,0x00,0x04,0x24,0x93,0xe5,0xa4,0x0d,0x00,0x00,0x1e,0x81,0x82,0x88,0x0d,0x09,0x01,0x9a,0x80,0x88 -,0x82,0x9e,0x80,0x90,0x1f,0xcf,0x8f,0x80,0x86,0x80,0x8e,0x12,0x0e,0xa6,0x80,0x81,0x85,0x9b,0x17,0x04,0x09,0x18,0x9e,0x88,0x39,0x0d,0x09,0x02,0x07,0x0d,0x1c,0xab -,0x9a,0x22,0x00,0x00,0x0e,0x96,0x84,0x94,0x9c,0x0e,0x11,0xb5,0x94,0x80,0x91,0x86,0x8a,0xa4,0x14,0x0f,0x99,0x84,0x87,0x92,0x13,0x11,0x0b,0x0f,0xb2,0x89,0x8a,0x18 -,0x03,0x00,0x09,0x0a,0x3c,0x94,0x93,0x0b,0x06,0x01,0x10,0x15,0x3b,0x8d,0x96,0xad,0x05,0x01,0x06,0x89,0x80,0x85,0x89,0x95,0xc4,0x1f,0x89,0x80,0x81,0x80,0x80,0x8b -,0x09,0x1b,0x87,0x85,0x84,0x8b,0xce,0x0a,0x01,0x0f,0xa7,0x8f,0x9b,0x29,0x12,0x01,0x01,0x0f,0x9d,0x80,0x8c,0xc7,0x0c,0x03,0x00,0x18,0x97,0xa8,0xb0,0x13,0x05,0x01 -,0x00,0x2d,0x8e,0x42,0x17,0x06,0x04,0x00,0x18,0xda,0x9a,0x8e,0x3f,0xcd,0x09,0x04,0x1f,0x83,0x86,0x85,0x88,0x1b,0x26,0x91,0x84,0x80,0x82,0x8b,0x89,0xcb,0x1a,0xa8 -,0x80,0x80,0x85,0x89,0x23,0x1d,0x18,0x99,0xaa,0xa1,0x90,0x9d,0x28,0x00,0x07,0x1c,0x88,0x88,0xa9,0x0f,0x04,0x04,0x23,0x84,0x89,0xba,0xb3,0xa9,0x03,0x00,0x14,0xb0 -,0x8e,0x18,0x13,0x06,0x02,0x00,0x23,0x9c,0xb5,0x1a,0x09,0x08,0x00,0x0b,0x10,0x89,0x93,0x28,0x0a,0x07,0x00,0xcf,0x8a,0x91,0x83,0x8d,0x97,0x11,0x62,0x88,0x81,0x80 -,0x81,0x87,0x95,0x9d,0x88,0x80,0x82,0x80,0x83,0x87,0x48,0x0e,0x13,0xa1,0x83,0x9e,0x12,0x00,0x04,0x00,0x16,0x1b,0x12,0x1c,0x0b,0x04,0x00,0x03,0x0f,0x90,0x97,0x13 -,0x07,0x06,0x01,0x1c,0x4b,0x7c,0xa6,0x26,0x3d,0x02,0x0a,0x54,0x98,0x80,0x8a,0x94,0x1a,0x0d,0xca,0x8f,0x83,0x83,0x8f,0x96,0xca,0x08,0x1a,0x89,0x81,0x80,0xb5,0xc1 -,0x31,0x10,0x90,0x85,0x81,0x91,0xae,0x2a,0x0a,0x05,0x32,0x8b,0x8a,0x9d,0x09,0x07,0x05,0x09,0xbb,0x93,0x9d,0x26,0x25,0x0c,0x03,0x0e,0x89,0x84,0x88,0x1f,0x0e,0x24 -,0x1e,0x91,0x8b,0x82,0x8c,0x94,0x19,0x06,0x0d,0xa4,0x83,0x86,0xd9,0x0c,0x02,0x0d,0x47,0xdf,0x90,0x36,0x20,0x0e,0x00,0x02,0x04,0xc1,0x88,0xa4,0x05,0x07,0x00,0x06 -,0xc0,0xa1,0x99,0xe1,0x94,0x28,0x0b,0xaf,0x87,0x80,0x82,0x86,0xa8,0xb3,0x95,0x80,0x81,0x80,0x82,0x82,0x8a,0x0d,0x42,0x91,0x86,0x85,0xbd,0x25,0x0d,0x02,0x2b,0xc9 -,0xa3,0xb7,0x1d,0x29,0x04,0x00,0x0a,0x92,0x8f,0xb0,0x0f,0x08,0x04,0x01,0xfd,0x21,0x2b,0x24,0x0d,0x05,0x00,0x08,0x1c,0x8f,0xca,0x06,0x05,0x0a,0x00,0x1d,0x92,0x90 -,0x86,0x96,0x9d,0x18,0x54,0x90,0x84,0x80,0x87,0x8f,0xa7,0xaf,0x94,0x87,0x83,0x82,0x8e,0x98,0x0e,0x08,0x9f,0x85,0x87,0x87,0x4e,0x18,0x09,0x0d,0x9f,0x30,0xa8,0x4e -,0x51,0x15,0x00,0x09,0xa6,0x89,0x87,0xc5,0x0d,0x18,0x06,0x46,0x8c,0x88,0x8d,0x9e,0x65,0x09,0x03,0x0d,0x8c,0x94,0x35,0x0c,0x04,0x00,0x08,0x38,0x4a,0x9a,0x28,0x09 -,0x02,0x00,0x07,0xe5,0x8d,0x95,0x10,0x0b,0x01,0x0b,0xaf,0x95,0x93,0x95,0x88,0x28,0x18,0x9d,0x89,0x80,0x81,0x81,0x8a,0x9b,0x8e,0x87,0x80,0x80,0x80,0x81,0x8c,0x38 -,0x0e,0x3f,0x8e,0x99,0x2b,0x07,0x06,0x00,0x10,0x16,0x1a,0x3b,0x06,0x12,0x00,0x02,0x02,0xd8,0x9a,0xa6,0x0f,0x06,0x09,0x07,0x1a,0x28,0x36,0x18,0xaf,0x08,0x02,0x08 -,0xa9,0x81,0x86,0xa7,0x1d,0x12,0x13,0x91,0x8c,0x89,0x8f,0x8d,0x97,0x1b,0x10,0x37,0x80,0x85,0x8e,0xa0,0x14,0x2b,0x96,0x91,0x86,0x89,0xa6,0x97,0x17,0x0c,0x25,0x8c -,0x87,0x86,0x4f,0x10,0x27,0x27,0xb3,0xa1,0xbe,0xb9,0x98,0x02,0x06,0x0c,0xe5,0x85,0x8a,0x38,0x26,0x08,0x09,0x94,0x5a,0x9e,0x9a,0x93,0x18,0x0a,0x09,0x32,0x86,0x97 -,0xcf,0x11,0x02,0x0d,0xbf,0xd7,0x8b,0xa2,0xa9,0x23,0x00,0x02,0x0a,0x49,0xad,0x2d,0x08,0x05,0x05,0x17,0x3d,0xb1,0x29,0x94,0x6c,0x02,0x0d,0x1b,0x84,0x80,0x80,0x82 -,0x89,0x9a,0x87,0x82,0x86,0x80,0x82,0x80,0x8e,0xaf,0x3e,0x83,0x84,0x90,0xa6,0x0b,0x01,0x11,0x0c,0x13,0x51,0x11,0xa8,0x0a,0x00,0x03,0x09,0x1e,0xb8,0x15,0x04,0x0b -,0x0f,0x37,0x37,0x1e,0x29,0x92,0x0a,0x02,0x08,0x0c,0x8e,0x8c,0x44,0xae,0x0d,0x06,0x99,0x3a,0x2a,0xab,0x97,0x5f,0x1d,0x07,0x26,0x80,0x8b,0x89,0x88,0x19,0xa6,0x89 -,0xad,0x81,0x8f,0x8c,0x81,0x25,0x0e,0x2e,0xc9,0x8e,0x86,0xc9,0x1e,0x1c,0x25,0xac,0x94,0x37,0x8e,0x8d,0x09,0x15,0x04,0x0d,0x8e,0xcb,0xd6,0x94,0x0a,0x23,0x94,0x27 -,0xab,0x9c,0xc6,0x2b,0x16,0x06,0xa4,0x89,0xc0,0x98,0x21,0x02,0x2f,0x13,0x0e,0xcf,0x06,0x44,0x3c,0x00,0x0d,0x0c,0x10,0x9f,0x22,0x05,0x0c,0x05,0x0f,0xa3,0x9d,0x27 -,0x8f,0x4e,0x13,0x3a,0x0e,0x98,0x82,0x8e,0x83,0x84,0x94,0x83,0x84,0x85,0x80,0x84,0x83,0x81,0xa3,0x9f,0x85,0x88,0x86,0x88,0x3b,0x20,0x1b,0x01,0x1e,0x14,0x08,0x25 -,0x24,0x08,0x08,0x01,0x06,0xaf,0x15,0x0f,0x18,0x02,0x04,0x11,0x12,0x7b,0x38,0x06,0x23,0x13,0x03,0x1e,0x1c,0x34,0x8e,0xbe,0x2e,0xa3,0x19,0x39,0x8b,0x9f,0x8d,0x95 -,0x1d,0x9a,0x94,0x9b,0x87,0x87,0x9a,0x8c,0xae,0x33,0x97,0xcf,0x9f,0x8a,0xa1,0xae,0x9a,0x1f,0xc8,0x9b,0xb2,0x8e,0xa7,0x0d,0x22,0x43,0x23,0x98,0xab,0x2d,0xaa,0x17 -,0x18,0xad,0x12,0x3a,0x94,0xaa,0xa5,0x2f,0x10,0x36,0xba,0x28,0x9a,0xcd,0x13,0x2a,0x1c,0x33,0x99,0x61,0x1e,0xeb,0x0f,0x18,0x27,0x0c,0x1f,0x5a,0x2c,0xa8,0xc3,0x18 -,0xb0,0xa7,0x9f,0x94,0xc0,0x1e,0xa3,0xd0,0xab,0x8d,0x5a,0xba,0xec,0x2d,0xbe,0xbc,0x1e,0x9d,0x9d,0x34,0xab,0x23,0x1a,0x3a,0x33,0x4c,0xa7,0x18,0x0e,0x22,0x1a,0xc0 -,0x98,0xbf,0xb0,0xea,0x17,0x33,0x2f,0x34,0x9d,0x9b,0xa1,0x94,0x33,0x1d,0xa3,0xae,0x8f,0x8e,0xab,0x4c,0x23,0x1c,0xce,0x9c,0xac,0xb8,0x3d,0x18,0x2f,0x1f,0x1b,0x9c -,0xa3,0x9c,0x99,0x31,0x29,0x3a,0xc7,0x98,0x95,0x47,0x46,0xb9,0x43,0xa5,0x9f,0x9e,0x9e,0x65,0x2d,0xbf,0x39,0x23,0xdd,0x2b,0x2f,0x3b,0x0e,0x10,0x16,0x15,0x39,0x1d -,0x0f,0x15,0x13,0x14,0x37,0x59,0x28,0x2f,0x19,0x24,0xcd,0x2d,0xab,0x97,0xa2,0x9e,0x9b,0xa1,0x99,0x99,0x91,0x89,0x94,0xbf,0xc7,0xcc,0xb1,0x96,0xa3,0xa1,0xa5,0x36 -,0x29,0x43,0x28,0xb3,0x9a,0xb4,0xae,0x66,0x2a,0x69,0xa9,0x9d,0x96,0xb0,0x35,0xd9,0x27,0x2a,0x99,0x97,0x90,0x93,0xca,0xcb,0x4e,0x2c,0xc0,0xb2,0x40,0x2c,0x22,0x14 -,0x16,0x0e,0x0f,0x29,0x15,0x12,0x11,0x0d,0x14,0x1e,0x1d,0x54,0x76,0x1f,0x1b,0x1b,0x15,0x25,0x52,0x49,0xaf,0x66,0xc8,0x9c,0x95,0x94,0x8c,0x97,0x9b,0x93,0x9e,0x97 -,0x8b,0x8a,0x8c,0x94,0xa6,0xa4,0xac,0x30,0x2a,0xbf,0x2c,0x15,0x08,0x0a,0x16,0x0a,0x09,0x0f,0x0f,0x0a,0x04,0x09,0x29,0x3d,0x2c,0x3e,0xfc,0x69,0x42,0x1f,0x28,0xa7 -,0xa6,0xab,0x6d,0x22,0x2f,0xbf,0xb7,0x96,0x9b,0xde,0xa9,0xad,0xa5,0x92,0x93,0x92,0x8a,0x8c,0x8f,0x94,0x9f,0x9a,0x8b,0x90,0x9c,0xaa,0x22,0x2e,0xad,0x9d,0x92,0xa3 -,0xc9,0x9e,0x9e,0x99,0x8e,0x91,0x8e,0x8e,0x93,0x8e,0x9b,0x1d,0x25,0xa0,0xac,0x1c,0x06,0x04,0x11,0x0e,0x09,0x0f,0x07,0x05,0x0b,0x0e,0x15,0x14,0x0f,0x17,0x30,0x34 -,0x26,0x1e,0x10,0x22,0xb6,0xbc,0x32,0x0c,0x09,0x19,0x65,0xa9,0xbf,0x1e,0x1d,0x29,0x44,0xb6,0xba,0x4f,0xac,0x99,0x9e,0xa8,0x44,0xd6,0x97,0x8f,0x93,0xa7,0x29,0x2d -,0x9f,0x98,0x99,0xa3,0xae,0x98,0x93,0x98,0x8d,0x8a,0x8b,0x8a,0x88,0x84,0x83,0x96,0xb2,0x8d,0x88,0x92,0x56,0x1a,0x28,0x22,0x11,0x25,0x35,0x13,0x0e,0x0f,0x18,0x24 -,0x16,0x14,0x27,0x26,0x1d,0x16,0x0f,0x0f,0x1e,0x34,0x39,0x1a,0x06,0x07,0x0d,0x0f,0x1e,0x1c,0x0f,0x0d,0x0b,0x16,0x2c,0x1f,0x22,0x4d,0x66,0x46,0x30,0x25,0x4b,0xa9 -,0x9f,0x9a,0xb0,0x39,0xcc,0x9f,0x96,0x91,0x93,0x8e,0x8b,0x8e,0x86,0x84,0x86,0x88,0x87,0x83,0x81,0x8b,0x96,0x8c,0x87,0x8e,0xa4,0xcd,0x3d,0x2f,0x13,0x19,0x2c,0x16 -,0x11,0x10,0x0f,0x13,0x17,0x14,0x23,0x2d,0x29,0x24,0x1a,0x19,0x17,0x19,0x24,0x2b,0x16,0x0e,0x0d,0x0e,0x19,0x27,0x25,0x26,0x1a,0x14,0x18,0x11,0x1c,0xdb,0xb0,0xcf -,0x27,0x24,0x34,0xc1,0x9f,0x95,0x93,0xb1,0x2e,0x32,0xee,0xa2,0x98,0x8c,0x8d,0x9c,0x98,0x89,0x83,0x84,0x85,0x83,0x82,0x88,0x90,0x8b,0x88,0x8d,0xa1,0x60,0x40,0x1d -,0x0d,0x11,0x1b,0x17,0x15,0x0f,0x10,0x14,0x13,0x15,0x23,0x2a,0x27,0x21,0x16,0x17,0x20,0x1f,0x25,0x2e,0x1e,0x15,0x14,0x12,0x13,0x13,0x14,0x18,0x0f,0x10,0x14,0x18 -,0x15,0x1e,0x29,0x29,0x2b,0x2d,0x3b,0x2d,0x26,0x3c,0xb4,0xc6,0x54,0x34,0x39,0x39,0xb6,0x96,0x8f,0x8f,0x91,0x8a,0x85,0x8a,0x88,0x85,0x83,0x86,0x8f,0x8f,0x88,0x89 -,0x9d,0xaa,0xa0,0xd0,0x19,0x0e,0x0f,0x1a,0x18,0x17,0x13,0x16,0x18,0x18,0x20,0x37,0xd2,0x6b,0xfc,0x3e,0x2a,0x1d,0x35,0x6d,0xce,0x45,0x21,0x17,0x16,0x1e,0x30,0x3c -,0x23,0x1c,0x15,0x13,0x12,0x1f,0x4a,0x3f,0x34,0x24,0x29,0xee,0x7b,0xce,0xb9,0xc1,0xc9,0x5c,0x42,0x2a,0x3b,0xa8,0x96,0x94,0xa3,0x96,0x8c,0x8a,0x88,0x87,0x83,0x83 -,0x8b,0x8f,0x8b,0x8e,0xa5,0x36,0x5b,0x34,0x16,0x0d,0x0d,0x16,0x10,0x14,0x17,0x1c,0x19,0x12,0x16,0x1e,0x26,0x3c,0x3b,0x30,0x3a,0x33,0x51,0x35,0x2d,0x24,0x30,0x34 -,0x1f,0x18,0x12,0x19,0x21,0x32,0x27,0x1b,0x12,0x16,0x2a,0x4c,0xaa,0xb3,0xae,0xb2,0x5d,0x3d,0x6c,0xac,0xad,0xa6,0xb2,0xd1,0x4d,0xae,0x94,0x8f,0x93,0x96,0x8c,0x8a -,0x8f,0x8c,0x88,0x86,0x89,0x8c,0x8a,0x8a,0x99,0xcc,0xaf,0xa9,0x48,0x18,0x0d,0x0c,0x0d,0x0e,0x16,0x17,0x10,0x0e,0x0f,0x16,0x23,0x32,0x33,0x38,0x2d,0x25,0x23,0x1c -,0x1e,0x29,0x2d,0x31,0x26,0x1c,0x1b,0x2b,0x56,0x49,0x4d,0x2b,0x1f,0x1b,0x20,0x33,0x2e,0x2b,0x2b,0x56,0x45,0x32,0x2a,0x29,0x3e,0xd9,0xa8,0xb9,0x29,0x1f,0x46,0x9f -,0x97,0x99,0x94,0x8c,0x8b,0x89,0x86,0x82,0x85,0x8c,0x8b,0x84,0x87,0x98,0xac,0xa9,0xb1,0x50,0x2b,0x1c,0x15,0x0f,0x0f,0x14,0x19,0x15,0x17,0x14,0x15,0x1b,0x2a,0x4f -,0x2b,0x1f,0x1d,0x1d,0x19,0x1c,0x1b,0x1f,0x22,0x1e,0x22,0x1b,0x1e,0x29,0x3b,0x1e,0x1b,0x23,0x2d,0xd1,0xc6,0xbd,0x60,0xb2,0xa8,0x9c,0xbb,0x2f,0x29,0x2b,0xbc,0xb5 -,0xd2,0x43,0xc8,0xa1,0x95,0x9a,0x94,0x8a,0x89,0x90,0x8f,0x89,0x86,0x8a,0x8b,0x86,0x8a,0x91,0xb6,0xcd,0xbc,0x45,0x28,0x1a,0x16,0x0e,0x0c,0x0d,0x0e,0x0e,0x0e,0x14 -,0x1c,0x23,0x19,0x1c,0x1c,0x25,0xdd,0x69,0x24,0x13,0x11,0x14,0x29,0x2a,0x25,0x1b,0x17,0x18,0x26,0x2f,0x3d,0x30,0x17,0x34,0x4b,0x34,0x51,0xe6,0xcc,0xba,0xbb,0xb9 -,0x4e,0x2a,0xc5,0x9f,0x9e,0xa7,0xb4,0xac,0xa0,0xb9,0xb4,0x8f,0x8a,0x8a,0x8b,0x8a,0x86,0x8a,0x8a,0x84,0x84,0x89,0x9f,0xf8,0xbd,0xaf,0xbf,0x26,0x2e,0x20,0x12,0x0f -,0x13,0x19,0x1b,0x14,0x11,0x25,0x1d,0x20,0x1b,0x18,0x26,0x24,0x21,0x1a,0x11,0x0e,0x18,0x1b,0x2b,0x60,0x26,0x1f,0x23,0x1d,0x21,0x2d,0x24,0x2a,0x48,0x2f,0x2c,0x32 -,0xc3,0x9d,0x9e,0xc4,0x6c,0x24,0x23,0xc5,0xcb,0xd9,0x38,0xc7,0x9b,0x96,0xa4,0x9e,0x8f,0x90,0x8a,0x87,0x85,0x86,0x8f,0x8b,0x82,0x82,0x85,0x8f,0x9b,0x9e,0xd2,0x4b -,0x3d,0x1d,0x0f,0x0c,0x0d,0x0a,0x0d,0x0a,0x0d,0x1c,0x1e,0x27,0x1d,0x15,0x1d,0x33,0x53,0x44,0x34,0x0e,0x0d,0x1a,0x1a,0x3c,0x21,0x1f,0x37,0x2c,0x28,0x3c,0x2a,0x2c -,0xc1,0xc2,0xc9,0x2d,0x19,0x26,0xb7,0xa5,0xa6,0x2b,0x14,0x1d,0x49,0xb6,0xbb,0xc6,0xaa,0xab,0x73,0xc0,0x91,0x8d,0x8e,0x88,0x85,0x82,0x86,0x89,0x84,0x81,0x82,0x87 -,0x99,0xa1,0xb8,0x30,0x30,0x31,0x17,0x0d,0x0d,0x08,0x0a,0x0b,0x0b,0x16,0x1d,0x1c,0x20,0x0f,0x0d,0x14,0x25,0x49,0x55,0x1c,0x11,0x18,0x19,0x64,0xa9,0x3a,0x21,0x19 -,0x11,0x22,0x1f,0x24,0x3b,0x3d,0x33,0x55,0xde,0x34,0xb9,0xd6,0xca,0xc3,0x1e,0x1f,0x35,0x3f,0x3d,0x63,0xa6,0x9d,0xc1,0x26,0xa4,0x8f,0x92,0x8b,0x86,0x81,0x82,0x88 -,0x85,0x81,0x81,0x84,0x8c,0x9d,0xaa,0xd7,0x32,0x32,0x1b,0x10,0x0e,0x0c,0x08,0x05,0x05,0x0b,0x17,0x22,0xeb,0xb0,0x27,0x21,0x41,0xf6,0xae,0x48,0x16,0x0b,0x04,0x06 -,0x12,0x19,0x3e,0x78,0x4d,0xb1,0xb0,0xb8,0x3a,0x35,0xe3,0xc5,0xc3,0x1b,0x28,0xaf,0xb7,0xca,0x17,0x0e,0x18,0x29,0x24,0x77,0x96,0x8a,0x8f,0x4c,0xba,0x9a,0x9b,0xa0 -,0x91,0x83,0x80,0x89,0x9c,0x8e,0x84,0x81,0x83,0x86,0x88,0x91,0xcc,0x14,0x1c,0x1d,0x20,0x22,0x0c,0x13,0x19,0x09,0x09,0x09,0x16,0xb9,0x18,0x14,0x25,0xc5,0xa0,0x1d -,0x10,0x17,0x1a,0x16,0x17,0x2b,0x41,0x19,0x10,0x0d,0x21,0xa6,0x1a,0x43,0x96,0x89,0x8e,0x23,0x27,0x2e,0xb4,0xa2,0x18,0x22,0x9b,0x21,0x03,0x0a,0x85,0xa4,0x00,0x85 -,0x81,0x83,0x8a,0x0f,0xa2,0x93,0x95,0x0f,0x41,0x88,0x0f,0x0f,0x00,0x04,0x0e,0x0e,0x1b,0x03,0x0d,0xa9,0x0e,0x00,0x05,0x0f,0x16,0x04,0xd8,0x9f,0x1b,0x1d,0x1f,0x19 -,0xbb,0x86,0x80,0x8a,0x96,0x84,0x81,0x81,0x84,0x85,0x83,0x82,0x80,0x85,0x8d,0x88,0x82,0x86,0x85,0x85,0x81,0x86,0x81,0x85,0xa1,0x88,0x93,0x2a,0x21,0x9f,0x86,0x1c -,0x04,0x05,0x00,0x0d,0x04,0x06,0x0b,0x0e,0x0a,0x00,0x01,0x00,0x03,0x04,0x05,0x00,0x02,0x00,0x01,0x00,0x0d,0x3b,0x0d,0x11,0x0c,0x0d,0x0d,0x07,0x0d,0x06,0x1d,0xe9 -,0x1c,0x20,0x39,0xc2,0x0e,0x23,0x88,0x93,0xc0,0x98,0x83,0x81,0x91,0x96,0x89,0x84,0x80,0x83,0x83,0x81,0x80,0x8a,0xaf,0x87,0x80,0x80,0x81,0x80,0x80,0x80,0x84,0x87 -,0x82,0x80,0x80,0x81,0x85,0x87,0x86,0x9a,0x8e,0x86,0x88,0x8c,0x8c,0x8c,0xb0,0x1e,0x19,0x1f,0x42,0x2a,0x0f,0x26,0x0d,0x01,0x00,0x0b,0xbe,0x20,0x18,0x2b,0x33,0x35 -,0x0c,0x02,0x00,0x19,0xc5,0x06,0x00,0x08,0x07,0x00,0x00,0x07,0x10,0x03,0x00,0x01,0x04,0x05,0x01,0x01,0x01,0x0b,0x0b,0x01,0x05,0x0c,0x05,0x00,0x07,0x1e,0x0f,0x0b -,0x20,0xb4,0x26,0x08,0x02,0x06,0x2d,0x9f,0x2b,0x1a,0xcf,0x22,0x03,0x04,0xfd,0x99,0xe2,0x28,0xca,0x9f,0x63,0x16,0x4a,0x8c,0x82,0x88,0x98,0xa5,0xb0,0x97,0x8a,0x82 -,0x82,0x81,0x81,0x82,0x81,0x80,0x83,0x84,0x80,0x80,0x82,0x86,0x81,0x81,0x8e,0xae,0x8a,0x81,0x88,0x94,0x8b,0x80,0x80,0x88,0x36,0x99,0x82,0x80,0x8f,0x97,0x88,0x8d -,0xad,0xbe,0x86,0x84,0x85,0x85,0x8a,0x89,0x8e,0xaf,0xcf,0x91,0x84,0x88,0x98,0x8f,0x9b,0x40,0x1e,0xa5,0x9b,0x19,0x18,0x1f,0x1e,0x0a,0x00,0x01,0x07,0x0d,0x08,0x01 -,0x01,0x01,0x00,0x01,0x03,0x13,0x16,0x0d,0x07,0x09,0x1f,0x0b,0x01,0x07,0x18,0x26,0x0b,0x06,0x06,0x04,0x05,0x02,0x05,0x03,0x02,0x02,0x08,0x1e,0x0c,0x00,0x06,0x10 -,0x0d,0x03,0x05,0x17,0x0b,0x02,0x01,0x07,0x1a,0x0d,0x0e,0x0e,0x20,0x19,0x01,0x00,0x07,0x30,0x30,0x08,0x09,0x09,0x03,0x03,0x02,0x1a,0x27,0x26,0x1c,0x16,0x2e,0x1c -,0x18,0xd4,0x94,0x91,0xb4,0x44,0xa4,0x93,0x89,0x86,0x82,0x80,0x84,0x83,0x81,0x80,0x80,0x84,0x82,0x80,0x80,0x81,0x83,0x80,0x81,0x80,0x85,0x88,0x80,0x82,0x83,0x81 -,0x81,0x80,0x84,0x86,0x82,0x82,0x81,0x83,0x82,0x85,0x85,0x85,0x87,0x82,0x80,0x81,0x80,0x81,0x80,0x85,0x8b,0x81,0x80,0x80,0x88,0x8a,0x86,0x9f,0x2c,0x0e,0x1d,0x2e -,0x06,0x05,0x04,0x06,0x03,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x03,0x02,0x04,0x01,0x03,0x00,0x05,0x06,0x03,0x03,0x02,0x04,0x04,0x04,0x06 -,0x01,0x07,0x06,0x02,0x0f,0x1c,0xbf,0x1b,0x13,0x44,0x29,0x53,0x30,0xac,0x99,0x9d,0x97,0x57,0xb3,0x8b,0x8f,0x88,0x8a,0x88,0x8c,0xa0,0x8a,0x8a,0x86,0x86,0x89,0x8e -,0xac,0xa8,0xa7,0xaf,0x90,0x9e,0xa2,0x95,0x98,0x8f,0xab,0x8e,0x89,0x8f,0xa8,0x27,0xb1,0xa6,0xa5,0xa5,0xac,0x95,0x96,0x4f,0xae,0xa2,0x8e,0x96,0xbe,0x9c,0xb0,0xb6 -,0x22,0x25,0x52,0x1f,0x17,0x0d,0x0a,0x0b,0x09,0x10,0x25,0x14,0x16,0x10,0x25,0x30,0x18,0x1d,0x1f,0xe0,0xc9,0xb0,0x90,0x88,0x88,0x89,0x89,0x85,0x86,0x88,0x86,0x86 -,0x82,0x84,0x86,0x8a,0x8c,0x8b,0x8d,0x9b,0xb6,0xf3,0x2a,0x13,0x0e,0x0d,0x09,0x09,0x0d,0x0f,0x0a,0x08,0x07,0x08,0x0d,0x14,0x21,0x46,0xb5,0xd7,0x45,0xee,0x59,0x55 -,0xb4,0xa5,0x9a,0x98,0xa1,0x64,0x33,0xc8,0xa2,0xa1,0xba,0x70,0x71,0x4a,0x47,0xc9,0xae,0xa3,0x9a,0x9c,0xa9,0xb4,0xb8,0xb6,0xba,0xa3,0x95,0x91,0x94,0x93,0x94,0x91 -,0x93,0x9b,0xae,0xb1,0x9e,0x9e,0x9c,0xa1,0xbc,0xcf,0x47,0x35,0x2d,0x2a,0xd6,0x46,0x25,0x1d,0x1d,0x24,0x28,0x3c,0x4d,0x38,0x1e,0x14,0x11,0x16,0x23,0xc7,0xbb,0x37 -,0x2d,0x2d,0x35,0x23,0x19,0x24,0x48,0x46,0x29,0x24,0x29,0x1f,0x17,0x15,0x16,0x15,0x0c,0x08,0x09,0x0a,0x0d,0x0e,0x12,0x1a,0x1c,0x1e,0x21,0x23,0x1f,0x2a,0xbb,0x96 -,0x8d,0x8c,0x89,0x86,0x84,0x84,0x84,0x84,0x83,0x83,0x84,0x84,0x84,0x87,0x8c,0x93,0x9d,0xa3,0xc9,0x2c,0x1a,0x0e,0x0c,0x09,0x09,0x09,0x0a,0x09,0x06,0x04,0x03,0x03 -,0x06,0x0a,0x0e,0x14,0x1a,0x2d,0x2b,0x26,0x24,0x26,0x4d,0x75,0x38,0x38,0x33,0x28,0x25,0x3d,0xc0,0xb8,0xbd,0x3c,0x32,0x3e,0xc8,0xa7,0xa6,0x9f,0x9a,0x9f,0x9f,0x9e -,0x9c,0x9b,0x97,0x93,0x94,0x96,0x98,0x96,0x92,0x95,0x9a,0xa0,0xad,0xaf,0xb4,0xaa,0x9e,0x9e,0xad,0x54,0x43,0x54,0x4e,0x39,0x2d,0x2f,0x26,0x19,0x13,0x1b,0x38,0x3e -,0x27,0x22,0x21,0x1a,0x13,0x1a,0x30,0x49,0xfd,0x51,0x5c,0x3b,0x24,0x2c,0x61,0xbf,0x46,0x2c,0x28,0x1e,0x17,0x14,0x19,0x21,0x1d,0x11,0x0b,0x0a,0x0f,0x12,0x18,0x1f -,0x21,0x24,0x1e,0x23,0x30,0xd4,0xaa,0xa7,0x9d,0x95,0x8d,0x88,0x84,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x83,0x84,0x85,0x88,0x8d,0x95,0x9d,0xb2,0x4d,0x20,0x10,0x0a -,0x06,0x05,0x07,0x0a,0x0c,0x09,0x06,0x05,0x05,0x05,0x07,0x0d,0x12,0x16,0x18,0x16,0x1c,0x23,0x22,0x29,0x34,0x35,0x29,0x1c,0x18,0x1f,0x34,0x53,0xcb,0x56,0x38,0x32 -,0x3e,0xb6,0xa7,0x9d,0x97,0x97,0x9a,0x9c,0x96,0x90,0x90,0x94,0x9a,0x98,0x97,0x99,0x94,0x92,0x90,0x94,0x9f,0xa7,0xab,0xa7,0xa1,0xa1,0xa2,0xb0,0xe0,0x4c,0x53,0xcd -,0x78,0xbe,0xbb,0x42,0x1f,0x17,0x22,0x38,0x66,0x6f,0x49,0x30,0x1f,0x1a,0x21,0x2e,0x45,0x4f,0x3e,0x31,0x1f,0x1f,0x28,0x2d,0x2e,0x2f,0x2b,0x1c,0x13,0x17,0x1f,0x25 -,0x1e,0x15,0x12,0x0e,0x0d,0x0f,0x15,0x1b,0x1b,0x18,0x1a,0x2a,0x43,0xd8,0xb3,0xab,0xa6,0xa5,0xa0,0x96,0x8c,0x87,0x85,0x84,0x84,0x83,0x84,0x84,0x82,0x82,0x84,0x86 -,0x8a,0x8d,0x96,0xa0,0xa6,0xaa,0xfc,0x1f,0x14,0x0f,0x0d,0x0c,0x0c,0x0e,0x0e,0x0b,0x06,0x04,0x04,0x07,0x08,0x07,0x0b,0x0d,0x0f,0x14,0x19,0x2a,0x2e,0x28,0x2c,0x3b -,0x36,0x2c,0x2f,0x2f,0x61,0xb0,0xb7,0xaf,0xae,0xac,0x9f,0x9e,0x9a,0x9a,0x9e,0xa3,0xa2,0x99,0x95,0x9c,0xa5,0xa6,0xa1,0xa5,0x9f,0x96,0x99,0x9d,0xa8,0xaa,0xa1,0xad -,0xba,0xae,0xa7,0xa0,0xa5,0xa9,0xa4,0xa7,0xa1,0x9f,0x9d,0xa0,0xb2,0x5c,0x2d,0x2e,0x3b,0x2d,0x35,0x48,0x2c,0x1e,0x19,0x1e,0x22,0x1f,0x1c,0x1b,0x16,0x14,0x19,0x24 -,0x2a,0x1f,0x1f,0x20,0x25,0x36,0xc7,0xd8,0x38,0x35,0x30,0x26,0x20,0x1f,0x1e,0x1e,0x13,0x13,0x1a,0x18,0x1d,0x23,0x36,0x5c,0xd5,0x4d,0xcf,0xb4,0xa5,0x92,0x8d,0x8a -,0x87,0x87,0x87,0x84,0x83,0x82,0x82,0x82,0x83,0x86,0x89,0x89,0x8c,0x96,0xa7,0x3c,0x2a,0x20,0x14,0x0f,0x0b,0x0b,0x0a,0x09,0x0b,0x0a,0x07,0x03,0x04,0x06,0x07,0x0b -,0x0d,0x0c,0x14,0x17,0x1a,0x26,0x1f,0x23,0x2a,0x2a,0x3c,0x3c,0x48,0xbd,0xbe,0xb2,0xaa,0xa9,0xa5,0xa2,0xad,0xb2,0x9f,0xa2,0x9e,0x98,0x9b,0x96,0x98,0xa4,0xa1,0xa0 -,0xa7,0xa8,0x9e,0x94,0x99,0x96,0x95,0xa0,0xa4,0xaf,0xa4,0xa3,0xab,0xb1,0x34,0x4e,0xba,0xad,0x9e,0xa9,0xd8,0xb5,0xd6,0x3f,0x2e,0x28,0x32,0x29,0x24,0x27,0x2b,0x25 -,0x2f,0x2d,0x27,0x1f,0x24,0x20,0x29,0x46,0x29,0x26,0x1e,0x19,0x27,0x2c,0x1f,0x2b,0x1d,0x1b,0x23,0x22,0x17,0x1a,0x17,0x10,0x19,0x12,0x11,0x0e,0x0f,0x18,0x1e,0x29 -,0x32,0x2c,0x34,0xa7,0x9e,0x92,0x8f,0x90,0x8e,0x8d,0x87,0x87,0x86,0x86,0x87,0x85,0x82,0x82,0x82,0x84,0x88,0x99,0xa5,0xa5,0xce,0xdf,0x35,0x1d,0x0e,0x09,0x07,0x0a -,0x10,0x11,0x0d,0x0c,0x0e,0x0f,0x0d,0x0a,0x05,0x0d,0x23,0x23,0x15,0x16,0x17,0x1a,0x3c,0xb1,0xac,0x2e,0x23,0x0e,0x2b,0x98,0x95,0x94,0xa2,0x3c,0x2a,0xa2,0x97,0x9b -,0x9b,0xb5,0xc3,0x99,0x8f,0x92,0xa1,0xe2,0x64,0xa3,0x93,0x93,0xe6,0x5b,0x3a,0xa9,0x8f,0x8f,0x9d,0xdd,0x35,0x1d,0x3c,0xc8,0x9b,0xd0,0x2d,0x2e,0xab,0x8e,0x91,0xa4 -,0x29,0x0e,0x11,0x44,0x4e,0x2b,0x1f,0x2b,0x3a,0xd3,0xb5,0x3a,0x21,0xc3,0x1f,0x1a,0x2b,0x32,0x3c,0x14,0x18,0x12,0x26,0xa0,0x57,0x23,0x4a,0xbe,0x96,0x8f,0x91,0xb2 -,0x13,0x15,0x1d,0xb9,0xb5,0x4a,0x1e,0x15,0x0f,0x27,0x93,0x8f,0x98,0x7d,0x14,0x16,0xc8,0xa5,0xac,0x21,0x21,0x30,0xb9,0x9a,0xa1,0xb2,0xce,0xab,0x95,0x8e,0x94,0x98 -,0x9c,0x9f,0xad,0x97,0x92,0x98,0x9e,0x39,0x3e,0x9d,0x8a,0x8f,0xaf,0x23,0x10,0x11,0x38,0xcb,0x14,0x0d,0x15,0x18,0x1f,0x2b,0xca,0xc3,0x33,0x1e,0x14,0x16,0x1f,0x2f -,0x17,0x09,0x1a,0xa9,0x40,0xa5,0xae,0x45,0x36,0x59,0x8c,0x9b,0xac,0xaf,0x2d,0xbc,0xad,0xb8,0xb6,0x27,0xae,0x16,0x1c,0x8a,0x89,0x88,0xba,0x48,0xa5,0xa3,0x86,0x8d -,0xb3,0xcf,0x25,0x3f,0x1e,0x9d,0xaa,0x20,0xa7,0xaa,0x9b,0xac,0xa0,0x8f,0x2d,0x43,0xa9,0xbf,0x9e,0x18,0x0d,0x02,0x0c,0x19,0x04,0x15,0x24,0x32,0x2a,0x10,0x53,0x1c -,0x2a,0x8f,0x3e,0x3f,0x17,0x12,0x05,0x0b,0x78,0x08,0x12,0x24,0x1f,0x3f,0xb2,0x84,0x92,0x2a,0x4d,0x1a,0xa1,0xa1,0xe2,0x0e,0x02,0x2e,0x12,0xad,0x87,0x8c,0x87,0xa5 -,0x89,0x85,0x98,0x80,0x96,0x9f,0xa7,0x9a,0x88,0x9d,0x87,0xe8,0x23,0x82,0x84,0x80,0x95,0x96,0x8a,0x13,0xaa,0xca,0x1f,0x26,0x00,0x04,0x00,0x0d,0x16,0x03,0x18,0x03 -,0x07,0x06,0x16,0x9c,0x02,0x08,0x09,0x03,0x0f,0x06,0x10,0x02,0x1d,0xa8,0x04,0x9c,0x88,0x86,0x90,0x31,0x84,0x9e,0x8d,0x82,0x2a,0xab,0x3d,0x97,0xb0,0xa2,0x86,0x1b -,0x91,0x80,0x83,0x81,0x94,0x81,0xb7,0x2f,0x83,0x9d,0x84,0x8f,0x56,0x0a,0x0f,0x80,0xae,0x94,0x84,0x91,0x8b,0xa7,0x85,0xca,0x0f,0x95,0x0e,0x1d,0x19,0x09,0x06,0x03 -,0xed,0x07,0x0a,0x95,0xaa,0x3c,0x05,0x14,0x14,0x0b,0x94,0x0c,0x05,0x0b,0x0d,0x14,0x0f,0x8c,0x17,0x0c,0x92,0x9d,0xa6,0x1c,0xa7,0x2a,0x08,0xa3,0x1b,0x34,0x9e,0x15 -,0x09,0x02,0x8d,0xa5,0x1f,0x8c,0x40,0xc8,0x3f,0x8f,0x9f,0x10,0x94,0x32,0xa9,0x84,0x96,0xb6,0x2d,0x85,0x9e,0xbe,0x80,0x82,0x86,0xcb,0xbc,0xce,0xf4,0x84,0xac,0x15 -,0x31,0x14,0x15,0x15,0x93,0x21,0x01,0xb0,0x2e,0x11,0x09,0x17,0x13,0x00,0x38,0x21,0x1e,0x97,0x20,0x07,0x07,0x8a,0x85,0x94,0x81,0x8d,0x9d,0x8e,0x81,0x84,0x95,0x85 -,0x90,0xa8,0x84,0x8e,0xa6,0x24,0x8d,0xc8,0x0f,0x89,0x8c,0xa3,0x14,0x08,0x06,0x04,0x4f,0x1b,0x00,0x07,0x02,0x02,0x03,0x3a,0x15,0x00,0x22,0x2e,0x18,0x1a,0x1a,0x0e -,0x01,0x18,0x27,0x13,0x95,0x1a,0x02,0x00,0x5c,0x8f,0x2e,0x85,0xa9,0x1e,0x47,0x9b,0x8c,0xbc,0x98,0x92,0xab,0x8a,0x92,0x99,0xa6,0x8c,0x8a,0x51,0x83,0x81,0x84,0x89 -,0x99,0x9b,0xa1,0x87,0x81,0xa0,0xa7,0xa0,0xa8,0xae,0x99,0x93,0x08,0xbd,0x8e,0x3b,0xae,0x4b,0x19,0x0a,0x1d,0xa9,0x30,0x93,0x9c,0x0d,0x04,0x10,0x8e,0x33,0x9d,0x93 -,0x0b,0x1d,0xe1,0xaf,0x1c,0x21,0xba,0x0f,0x23,0xb2,0x0f,0x03,0x08,0x40,0x05,0x13,0x84,0x39,0x0a,0x0e,0x0c,0x06,0x2f,0x8f,0x14,0x05,0x23,0x10,0x14,0x44,0x8d,0x2c -,0x11,0x83,0x9a,0x9f,0x88,0x91,0x30,0x14,0xa8,0x9f,0xab,0x8c,0xda,0x14,0x05,0xaa,0x86,0x36,0x8c,0x9c,0x3f,0xbd,0x9e,0x9c,0x1b,0x23,0x22,0x16,0xa6,0x5f,0x1f,0x0b -,0x19,0xa7,0x1c,0x87,0x87,0xa2,0xb4,0x11,0x1a,0x92,0x84,0x90,0xac,0x8b,0xca,0x39,0x87,0x8b,0x87,0xa9,0x8a,0x84,0x90,0x81,0x8c,0xa7,0xc8,0xa8,0x8e,0x95,0x88,0x9d -,0x08,0x0b,0x0f,0x93,0x17,0x16,0xa7,0x02,0x08,0x24,0x26,0x03,0x0b,0x1b,0x01,0x04,0x49,0x0e,0x00,0x01,0x08,0x04,0x03,0x96,0x2d,0x0a,0x0e,0x08,0x08,0x16,0x9f,0xe1 -,0x18,0xac,0xb8,0xbc,0x38,0x9b,0x86,0x2d,0x8b,0x80,0x85,0x8b,0x94,0x8c,0xa2,0x8c,0x80,0x8c,0x8b,0x93,0x2a,0x1d,0xa2,0x80,0x40,0x9b,0x86,0x40,0xac,0xa5,0xaf,0x3b -,0xbd,0xb6,0x2a,0x98,0x98,0x1b,0x3f,0x2a,0xab,0xa7,0x95,0x87,0x5b,0xa7,0xc7,0x1f,0xbc,0x49,0x39,0x18,0x14,0x3c,0x16,0x14,0x07,0x0f,0x11,0x01,0x9c,0xa3,0x17,0x1b -,0x0a,0x03,0x04,0xad,0xdc,0x09,0xd3,0x22,0x04,0x09,0x59,0xa1,0x0c,0x95,0x8f,0x21,0x9e,0xa7,0x26,0x27,0x98,0x94,0xb8,0x96,0x9b,0x18,0x0e,0x0d,0x93,0xbd,0x28,0x88 -,0xae,0x28,0x27,0x9e,0x9d,0xbd,0x8c,0x9f,0xe7,0x8c,0x91,0xa7,0x2e,0x92,0xa4,0x1e,0x82,0x8f,0xaf,0xa0,0xcc,0x78,0x9e,0x94,0x48,0x21,0xe3,0x0f,0x0f,0x20,0x0f,0x1a -,0x0b,0xae,0x9c,0xaa,0x8c,0xc6,0x29,0xad,0x8d,0x86,0x88,0x81,0x8a,0xb7,0xb3,0x9b,0x84,0x8c,0x89,0x80,0x9a,0x98,0x91,0xaf,0x2b,0xa7,0x9d,0x0e,0x15,0x3d,0x04,0x01 -,0x01,0x0b,0x06,0x06,0xc4,0x09,0x00,0x05,0x05,0x05,0x0c,0x15,0x08,0x00,0x10,0x0d,0x08,0x11,0x15,0x4a,0x09,0xa1,0x86,0xa3,0x97,0xa4,0xa0,0xb3,0x9d,0x88,0x9f,0xab -,0x9e,0x4b,0xba,0xb9,0x8a,0xa8,0x9c,0x81,0x96,0x98,0x97,0xa9,0xfe,0xaa,0x97,0x91,0x8a,0x8d,0x31,0x3c,0x4c,0x97,0x88,0x8e,0x80,0x91,0x9b,0x91,0xb2,0x93,0x93,0x98 -,0xa5,0x20,0xbf,0x1c,0x15,0x0f,0x0a,0x23,0x0d,0x98,0xa0,0x14,0x1b,0x10,0x0d,0x17,0xa8,0x3d,0x0d,0x17,0x0f,0x04,0x16,0x46,0xcd,0x0a,0x49,0x98,0x1d,0xc5,0x76,0x17 -,0x0c,0x19,0x35,0x12,0x22,0x2b,0x02,0x04,0x0b,0xab,0x20,0x1d,0x8c,0x2e,0x21,0xc8,0xdd,0x3a,0x41,0x98,0xb1,0xc1,0x89,0xa4,0x4c,0x3d,0xa2,0x92,0x9a,0x80,0x86,0xa7 -,0xb6,0xc9,0xbc,0xac,0x8f,0x92,0x1f,0x32,0x2c,0x24,0x2b,0xbf,0x9d,0x0d,0xb2,0x93,0x37,0x3b,0x1a,0x0f,0x14,0x56,0xa8,0x47,0xc7,0x54,0x25,0xaf,0x9e,0x85,0x95,0x8c -,0x84,0x92,0x85,0x87,0x8e,0x8e,0x88,0x89,0x98,0x8e,0x8b,0x51,0x2c,0x33,0x9e,0x19,0x59,0x87,0x1f,0x0a,0x08,0x02,0x0a,0x37,0x14,0x00,0x02,0x08,0x01,0x02,0x08,0x14 -,0x06,0x06,0xa0,0x1c,0x09,0x1b,0x0a,0x04,0x0f,0xa4,0x9f,0x2d,0x4d,0x0e,0x0e,0x1d,0x99,0xb9,0xd2,0x87,0x95,0xa3,0xa6,0x9d,0xa6,0xb4,0xa1,0xa2,0x9b,0x90,0xa3,0xa9 -,0x58,0x96,0x97,0x8d,0x80,0x87,0x8a,0x93,0xad,0x9c,0x87,0x83,0x8f,0xad,0x9f,0x3e,0x96,0x9b,0x92,0x2f,0x34,0x88,0xac,0xaf,0xb3,0x16,0x05,0x15,0xa3,0xa9,0xce,0x3b -,0x06,0x03,0x0d,0x90,0xa9,0x2c,0x99,0x2c,0x14,0x27,0x35,0x0f,0x1d,0xae,0x29,0x12,0x5c,0x1e,0x0d,0x06,0x2b,0x0e,0x14,0x8f,0x4a,0x13,0x05,0x07,0x0a,0x12,0xb3,0x2b -,0x16,0x13,0x0b,0x1a,0xc4,0x8d,0x2e,0x4c,0x92,0x98,0x8a,0x9a,0x2e,0x28,0x5a,0x8f,0x8b,0x82,0x8a,0x21,0x10,0xb7,0x8b,0xa2,0x85,0x87,0x32,0x1a,0xd5,0xae,0x48,0xa4 -,0x94,0x3d,0xb1,0x6d,0x0c,0x08,0xb4,0xa9,0x0f,0x8d,0x8b,0xa3,0x1a,0x09,0x16,0x1a,0x9e,0x84,0x88,0x9a,0x1a,0x1d,0xb4,0x87,0x84,0x84,0x82,0x8f,0x90,0x93,0x8e,0x8f -,0x97,0x9e,0x97,0x87,0x8a,0x5f,0x0b,0x17,0x28,0x06,0xa0,0x8a,0x0f,0x01,0x02,0x08,0x02,0x10,0x27,0x05,0x03,0x08,0x06,0x03,0x1a,0x0c,0x02,0x31,0x2a,0x0f,0x0e,0x12 -,0x10,0x07,0x15,0x35,0x8f,0x95,0x16,0x0e,0x15,0x9d,0xed,0x8f,0x80,0xba,0xa8,0x9f,0x3f,0x2f,0x95,0x89,0xa9,0x8d,0x87,0x9b,0xa8,0x84,0xb0,0x15,0x83,0x81,0x8d,0xa3 -,0x2e,0x0f,0x11,0x8d,0x80,0x86,0x98,0x1c,0x11,0xd3,0x8e,0x9e,0x8c,0x98,0x44,0x2e,0x18,0x1e,0x14,0x48,0x9e,0x32,0xd2,0x3c,0x09,0x18,0x87,0x9e,0x00,0x92,0x80,0x1b -,0x1c,0x08,0x07,0x08,0x23,0x26,0x08,0x14,0x00,0x03,0x06,0x03,0x04,0x05,0x09,0x00,0x02,0x02,0x04,0x00,0x06,0x16,0x12,0x1e,0x16,0x0b,0x2d,0x8e,0x95,0x89,0x81,0x8b -,0x83,0x85,0x94,0x92,0x84,0x80,0x82,0x86,0x82,0x89,0x88,0x80,0x83,0x83,0x80,0x82,0x89,0x98,0x98,0xa4,0x9e,0x88,0x8c,0x8d,0x99,0x61,0x56,0x96,0x23,0x37,0x8f,0x31 -,0x18,0x05,0x03,0x00,0x04,0x18,0x0c,0x0a,0x07,0x00,0x02,0x0c,0x05,0x02,0x0e,0x07,0x03,0x00,0x00,0x00,0x00,0x06,0x03,0x08,0x0f,0x02,0x00,0x11,0x04,0x13,0xa8,0xf3 -,0x1d,0x08,0x0d,0x09,0x1d,0x95,0x93,0x8f,0x8a,0xaa,0x9c,0x82,0x8c,0x84,0x80,0x83,0x86,0x89,0x86,0x9d,0x89,0x80,0x86,0x81,0x80,0x87,0x88,0x80,0x86,0x80,0x81,0x80 -,0x86,0x89,0x86,0x8e,0x83,0x80,0x83,0x82,0x8c,0xa7,0x84,0x83,0x8b,0x80,0x8b,0x9a,0x2a,0x27,0x3a,0x0f,0xa7,0xd5,0x0d,0x1e,0x09,0x00,0x1e,0x09,0x11,0x38,0x0f,0x0d -,0x00,0x02,0x00,0x02,0x0d,0x0a,0x06,0x03,0x00,0x01,0x0d,0x01,0x15,0x29,0x04,0x05,0x00,0x05,0x00,0x09,0x14,0x07,0x07,0x03,0x00,0x0f,0x0a,0x08,0x60,0x11,0x13,0x05 -,0x04,0x06,0x02,0x2e,0x1d,0x17,0x1d,0x04,0x06,0xc3,0x1e,0xa4,0x90,0xaf,0x3b,0x0d,0xaf,0x6e,0x92,0x83,0x91,0x9a,0x9a,0xa7,0x89,0x83,0x90,0x80,0x83,0x86,0xa3,0x90 -,0x8a,0x90,0x82,0x80,0x89,0x86,0x91,0x9c,0x80,0x8e,0x83,0x80,0x82,0x8e,0xb3,0x93,0x9e,0x88,0x80,0x86,0x8a,0x99,0x29,0x8a,0x85,0x8c,0x80,0x86,0x8b,0xa5,0xa2,0xb3 -,0xa6,0x85,0x87,0x96,0x8d,0xb9,0xac,0x81,0xa3,0x89,0x81,0x8b,0x9a,0x4f,0xa6,0x23,0x99,0x81,0x8f,0x96,0xa5,0x14,0x8c,0x96,0xa9,0x81,0x9c,0xcf,0x12,0x1a,0x0d,0x0c -,0xbc,0x1e,0x06,0x0a,0x00,0x0b,0x1e,0x01,0x21,0x0f,0x02,0x03,0x00,0x03,0x00,0x08,0x0c,0x01,0x01,0x01,0x00,0x0a,0x03,0x07,0x0f,0x02,0x02,0x00,0x01,0x00,0x04,0x0e -,0x05,0x00,0x02,0x00,0x07,0x0a,0x02,0x1b,0x09,0x02,0x01,0x00,0x03,0x00,0x19,0x1c,0x05,0x0a,0x01,0x07,0x2e,0x05,0xa7,0x9d,0xdf,0x24,0x0a,0x1c,0x14,0x92,0x83,0x89 -,0x8b,0x9a,0xa0,0x81,0x88,0x86,0x80,0x81,0x83,0x8a,0x83,0x86,0x82,0x80,0x80,0x81,0x81,0x85,0x81,0x80,0x82,0x80,0x81,0x80,0x86,0x84,0x84,0x88,0x80,0x80,0x81,0x81 -,0x8a,0x87,0x80,0x89,0x80,0x81,0x80,0x93,0xa3,0x8d,0xae,0x89,0x81,0x8b,0x96,0xbd,0x30,0x87,0xa0,0x9d,0x86,0xa6,0x2a,0x07,0x13,0x09,0x0e,0xc3,0x22,0x0b,0x0c,0x00 -,0x13,0x1c,0x05,0x3e,0x1a,0x0d,0x02,0x00,0x02,0x00,0x0e,0x11,0x07,0x05,0x00,0x02,0x10,0x01,0x1a,0x2b,0x0c,0x07,0x00,0x05,0x00,0x0d,0x21,0x0f,0x0b,0x06,0x02,0x2d -,0x0b,0x13,0x99,0x3c,0x1c,0x05,0x19,0x08,0x0b,0x9f,0xb6,0x35,0x20,0x0e,0xa9,0xc7,0x1a,0x89,0x8e,0xa0,0x25,0x2b,0x21,0x14,0x94,0x8f,0xb2,0xa2,0x24,0x56,0x89,0xc3 -,0x8d,0x84,0x8f,0xa9,0x2a,0xb4,0x2f,0x97,0x85,0x95,0x9e,0xb1,0x23,0x8a,0x9e,0xa8,0x80,0x8d,0x9b,0x1f,0xd4,0x25,0x20,0x89,0x8d,0xaf,0xc0,0x19,0xaf,0xba,0x18,0x89 -,0x90,0xa0,0x1c,0x14,0x17,0x0b,0xaf,0x93,0xb5,0x42,0x19,0x1f,0x9c,0x0c,0xa3,0x8d,0xaf,0x36,0x16,0x21,0x0a,0x2e,0x9a,0xd2,0x5a,0x57,0x14,0x95,0x36,0x28,0x8e,0x9b -,0xb2,0x1a,0x37,0x19,0x26,0x97,0x9c,0xbc,0xac,0x23,0x99,0x8e,0xc1,0x88,0x86,0x94,0x29,0xbf,0xb4,0x26,0x8f,0x87,0x9a,0xa8,0xfe,0x9f,0x8c,0xc7,0x8e,0x83,0x93,0xdd -,0x2b,0xaf,0x1a,0xc3,0x8c,0xa0,0xd1,0x2b,0x17,0xa2,0x2a,0x27,0x8d,0xa1,0x55,0x0c,0x14,0x11,0x11,0xaa,0xa1,0x27,0x28,0x09,0x2c,0xc4,0x0d,0x92,0x9e,0x4d,0x0f,0x10 -,0x17,0x0d,0xc2,0x9c,0x46,0x40,0x14,0x1c,0x99,0x12,0xc2,0x8e,0x9d,0x1e,0x15,0x3e,0x10,0x37,0x93,0x9a,0xbe,0x2e,0x16,0xa2,0x4e,0x22,0x8b,0x8d,0xbd,0x0f,0x25,0x19 -,0x18,0x97,0x93,0xe5,0x4e,0x16,0x3c,0xa4,0x1f,0x98,0x98,0xa9,0x17,0x0d,0x21,0x16,0x5b,0x96,0xc3,0x2c,0x18,0x19,0x9e,0x15,0x5b,0x8e,0xa5,0x2b,0x0b,0x1c,0x0f,0x1b -,0x9a,0x9e,0x38,0x1a,0x0f,0xad,0x39,0x1a,0x8e,0x97,0x36,0x0a,0x11,0x11,0x1c,0xaa,0x99,0x59,0x1e,0x10,0x26,0x98,0x19,0x98,0x8b,0xa5,0x14,0x0f,0x1d,0x10,0xb6,0x8f -,0x9e,0x3f,0x1c,0x19,0x9a,0x2d,0xb5,0x86,0x8f,0x34,0x0e,0x1f,0x15,0x2d,0x8f,0x92,0x4b,0x26,0x15,0xa3,0xaf,0x2b,0x8a,0x8e,0xa6,0x12,0x25,0x2d,0x1d,0xa2,0x93,0xb1 -,0x27,0x17,0xdc,0x97,0x1a,0x99,0x8b,0x9e,0x17,0x11,0x27,0x12,0xbe,0x95,0xac,0x2a,0x10,0x15,0x9e,0x22,0xaa,0x8d,0x99,0x1d,0x08,0x2b,0x0f,0x2d,0x92,0x9e,0x29,0x18 -,0x0d,0xae,0xd5,0x27,0x8f,0x94,0xdd,0x05,0x1d,0x1d,0x0f,0x9d,0x92,0x3c,0x1e,0x0e,0x29,0xc7,0x1c,0x8f,0x91,0x9f,0x10,0x0d,0x1f,0x0f,0xaa,0x8b,0xa2,0x35,0x13,0x17 -,0xa6,0x29,0x9d,0x88,0x8e,0x24,0x0c,0x2b,0x1a,0x3b,0x8f,0x8e,0xc7,0x1e,0x14,0x9e,0xe6,0x2f,0x87,0x8e,0x4e,0x0d,0x1c,0x14,0x1b,0x94,0x8e,0xbb,0x2c,0x0e,0x31,0xad -,0x26,0x8c,0x89,0x9b,0x0d,0x0d,0x18,0x0f,0xb1,0x8d,0x9a,0x36,0x0d,0x1e,0x9a,0x1a,0x9e,0x8a,0x98,0x1b,0x0b,0x18,0x0f,0x2d,0x9c,0x9f,0x38,0x16,0x15,0x98,0x29,0x43 -,0x8b,0x97,0xcb,0x0c,0x18,0x13,0x20,0x9b,0x93,0xa5,0x20,0x0d,0x9e,0xce,0x1c,0x8c,0x88,0xa0,0x0d,0x1e,0x11,0x1c,0xa0,0x90,0xa8,0x23,0x10,0x5b,0x95,0x20,0x91,0x89 -,0x96,0x18,0x14,0x24,0x1c,0xab,0x8e,0x95,0xb2,0x17,0x2a,0x8f,0x20,0xad,0x88,0x88,0x2e,0x0e,0x27,0x11,0x3a,0x90,0x8e,0xa6,0x1e,0x12,0x9d,0x1f,0x32,0x88,0x8b,0x79 -,0x09,0x1f,0x0f,0x25,0x90,0x8f,0xa5,0x22,0x0c,0xa4,0xd8,0x1c,0x91,0x8a,0xa7,0x06,0x1b,0x12,0x13,0xa8,0x92,0x9f,0x39,0x0d,0x35,0xab,0x0e,0x9f,0x8b,0x98,0x0d,0x0f -,0x15,0x0e,0xaf,0x8c,0x98,0xdd,0x12,0x1a,0x97,0x17,0xa4,0x89,0x94,0x11,0x07,0x27,0x16,0xd2,0x8b,0x91,0xcc,0x15,0x16,0x8d,0x26,0x2c,0x8b,0x8f,0x2c,0x0a,0x33,0x19 -,0x29,0x92,0x92,0x9e,0x32,0x0f,0x95,0x3f,0x19,0x8f,0x89,0xa0,0x09,0x1f,0x1b,0x1a,0x9a,0x8f,0xa1,0x26,0x0a,0xa3,0xa1,0x1e,0x94,0x8b,0x98,0x08,0x12,0x27,0x1b,0xb0 -,0x92,0xa0,0x3f,0x0d,0xe9,0x92,0x14,0xab,0x8f,0x92,0x14,0x10,0x2b,0x16,0x37,0x99,0x96,0xbd,0x0f,0x19,0x97,0x10,0x79,0x87,0x89,0x27,0x08,0x1f,0x11,0x27,0x92,0x8f -,0xbc,0x0f,0x0e,0x97,0x3e,0x55,0x8e,0x8b,0xc4,0x09,0x28,0x20,0x1d,0xa7,0x9b,0xa2,0x26,0x0e,0x95,0x5a,0x16,0x9a,0x88,0x97,0x12,0x2a,0x23,0x16,0xbc,0x97,0x9c,0xb7 -,0x09,0xa9,0xa7,0x15,0x95,0x87,0x89,0x14,0x0f,0x26,0x19,0xbe,0x92,0xa6,0x5e,0x08,0x41,0x8d,0x28,0x9e,0x8f,0x8f,0x13,0x0d,0x5e,0x1e,0x21,0x9f,0xa4,0xbb,0x13,0x2c -,0x8c,0x1a,0x2f,0x90,0x88,0x32,0x0b,0x26,0x13,0x1c,0xa7,0x96,0x98,0x17,0x0e,0x98,0x30,0x2a,0x94,0x87,0x4f,0x06,0x17,0x1d,0x1f,0xab,0x97,0xb7,0x1a,0x0d,0x8e,0x97 -,0x3f,0x9e,0x93,0xb7,0x0c,0x1f,0x3d,0x22,0x30,0xa1,0xa2,0xaa,0x14,0xa4,0xa3,0x15,0xb6,0x8b,0x8a,0x16,0x0f,0x1c,0x14,0x29,0x94,0x98,0xaa,0x0d,0x46,0x8d,0x37,0x9c -,0x8e,0x8f,0x13,0x06,0x27,0x27,0x33,0xa6,0xad,0xa6,0x11,0x41,0x85,0x6f,0x35,0xa9,0x8f,0x25,0x09,0x26,0x2c,0x1d,0x30,0xa3,0x8f,0x2e,0x18,0x8d,0x2d,0x29,0x9b,0x89 -,0xa2,0x05,0x15,0x24,0x2e,0xa5,0xa5,0xa2,0x1c,0x09,0x93,0x96,0xbe,0x9a,0x89,0x9e,0x03,0x0b,0x51,0x30,0x3a,0xa4,0x91,0xa5,0x0f,0xad,0xac,0x14,0x28,0x95,0x93,0x0f -,0x0d,0x3d,0xad,0xa4,0x9e,0x95,0xa1,0x0a,0x3b,0x9c,0x17,0x2f,0x98,0x85,0x2a,0x0c,0x24,0x3d,0xd9,0xab,0x9f,0xed,0x09,0x14,0x8f,0x9e,0xa3,0x9b,0x8b,0x42,0x08,0x1d -,0x6b,0x71,0xa1,0xa8,0xa6,0x25,0x28,0x91,0xd4,0x2b,0x3c,0x8c,0x6b,0x01,0x0a,0xbd,0x89,0x8d,0x9d,0xbf,0x15,0x0e,0x96,0xba,0x1c,0x31,0x94,0x8a,0x1d,0x13,0x1d,0xbf -,0xbd,0xed,0xae,0x22,0x08,0x37,0x9c,0x9b,0x9c,0x90,0x8e,0x0e,0x0f,0x2e,0x56,0x28,0x25,0xc6,0xaa,0x1e,0xab,0x96,0xbb,0x2a,0xc1,0x8a,0x1c,0x06,0x0d,0xa8,0x94,0x9f -,0xa5,0xaf,0x10,0x1d,0x93,0xc0,0x32,0x26,0x87,0x8b,0x23,0x12,0x1a,0x45,0x28,0xb0,0xa7,0x0e,0x04,0x4e,0x98,0x8c,0x8f,0x84,0x8d,0x0d,0x0b,0x19,0xac,0x2c,0x1b,0x9f -,0xab,0x0f,0x37,0xa5,0xad,0xbf,0x8e,0x85,0x18,0x03,0x06,0x9f,0x8b,0x8f,0x9b,0x51,0x08,0x20,0x95,0x5d,0x22,0x3e,0x85,0xd4,0x0c,0x13,0x65,0xa1,0xb4,0xa5,0xc7,0x0b -,0x0b,0x99,0x8f,0x8f,0xb5,0x8f,0xac,0x0a,0x10,0x34,0x9f,0x20,0x3c,0x9a,0xda,0x1e,0x99,0x9a,0xd6,0xe4,0x95,0xa5,0x05,0x03,0x12,0x9f,0xa3,0xba,0xa8,0xcb,0x0e,0xa8 -,0x8a,0xa7,0x45,0xa8,0x89,0x1d,0x0a,0x17,0xc9,0xa0,0x2f,0xdd,0xa1,0x19,0x2e,0x93,0xa0,0xc8,0x5d,0x88,0xcf,0x04,0x07,0x18,0xae,0xb3,0x8f,0x87,0xad,0x39,0x9f,0xec -,0x2f,0x1e,0x91,0x9e,0x09,0x0c,0x1e,0x97,0xc9,0x34,0xb1,0x45,0x10,0x49,0xa7,0x5b,0xa2,0x87,0x85,0x18,0x0a,0x0c,0xbc,0xc4,0x32,0xbb,0xba,0x1d,0x21,0x99,0xbd,0xb8 -,0xaa,0x8a,0x27,0x02,0x0a,0x35,0x9a,0x95,0x8d,0x9a,0x16,0x0e,0x9b,0xa2,0xb7,0x3d,0x91,0xa1,0x0d,0x1e,0xbb,0x99,0x3c,0x2d,0xa6,0x29,0x06,0x2a,0x47,0x3e,0xa3,0x89 -,0x8b,0x0e,0x0a,0x18,0x93,0xa0,0x2b,0x60,0xb1,0x16,0xe3,0x8d,0xd4,0x49,0xa7,0x87,0x1a,0x06,0x0d,0x48,0x9a,0xa2,0x96,0x97,0x2a,0x12,0x9f,0xc4,0x25,0x24,0x8e,0x98 -,0x0f,0x13,0x48,0x95,0xbd,0xb5,0x9b,0x2c,0x0b,0x31,0x59,0x2f,0xa2,0x87,0x88,0x16,0x07,0x19,0x9d,0xce,0x2d,0xb2,0xe1,0x13,0x4f,0x98,0x5a,0x5d,0x9c,0x8b,0x23,0x06 -,0x08,0xd6,0xaa,0xb7,0x98,0x97,0x1c,0x0e,0x98,0xb0,0xb3,0xa2,0x8a,0x9e,0x0c,0x12,0x59,0xa8,0xe2,0x5a,0xaf,0x1f,0x08,0xb7,0xa4,0xa1,0x9e,0x89,0x8c,0x0b,0x08,0x15 -,0xac,0xdd,0x29,0xad,0xdf,0x13,0xc1,0x99,0xb7,0xb8,0x93,0x84,0x20,0x05,0x0d,0x49,0xab,0xb8,0x9c,0xa1,0x16,0x24,0x9e,0xbc,0xba,0xae,0x83,0xaf,0x06,0x06,0x25,0x9c -,0x3b,0xc2,0xa6,0x24,0x12,0xa3,0xa2,0xa8,0xa1,0x86,0x8e,0x0c,0x09,0x16,0xa4,0x3f,0x2f,0xa0,0xab,0x10,0x2e,0x9f,0xad,0xc2,0x98,0x8a,0x16,0x07,0x0c,0xad,0xa7,0xca -,0x9a,0x9b,0x22,0x1a,0x9e,0xac,0xac,0xae,0x87,0xc9,0x06,0x08,0x24,0x9a,0x52,0xb0,0xa4,0x3f,0x15,0xac,0xb8,0x5f,0xb2,0x8c,0x90,0x0e,0x07,0x0f,0x9e,0xac,0xa8,0x96 -,0xa0,0x15,0x2d,0xa6,0xce,0xbd,0x9c,0x8d,0x16,0x07,0x0c,0xee,0xa6,0xb0,0x9d,0x99,0x24,0x29,0xa1,0xc9,0xa6,0xaa,0x88,0x52,0x06,0x05,0x27,0x97,0xb7,0xb0,0xa4,0x3e -,0x18,0xad,0xe6,0xb2,0xaf,0x8a,0x9e,0x0b,0x0d,0x1a,0x92,0xb1,0xac,0x9a,0xf9,0x0e,0x1b,0xc4,0xaa,0xa8,0x96,0x94,0x16,0x0c,0x10,0x9b,0xad,0xba,0x9f,0xab,0x27,0x1c -,0xa4,0xba,0xbe,0x9f,0x8c,0xb4,0x15,0x07,0x24,0xab,0xa6,0x9f,0xc6,0x25,0x0c,0xb2,0xcd,0xc8,0xab,0x8f,0x95,0x1c,0x10,0x1c,0xb2,0xb8,0xa5,0xaa,0x6e,0x0c,0x1e,0xd2 -,0xad,0x9a,0x97,0x90,0x25,0x13,0x16,0xad,0xa4,0xc8,0x3e,0xec,0x25,0x2d,0xa9,0x58,0xa3,0xa0,0x88,0xc0,0x10,0x0b,0x1b,0xa3,0x3e,0xbf,0x3e,0x33,0x1d,0xb8,0xaf,0x9f -,0x9a,0x90,0x9e,0x1f,0x15,0x1a,0xa9,0x31,0xc8,0x53,0x3c,0x19,0x24,0xb9,0xa6,0x95,0x92,0x92,0x37,0x19,0x0f,0x3e,0x27,0x2c,0x63,0xc9,0x1e,0x18,0x9b,0x9d,0x98,0x94 -,0x8c,0x9f,0x1d,0x09,0x14,0x31,0x51,0x40,0x3e,0x3f,0x19,0xbf,0xa2,0x98,0x9a,0x8e,0x94,0x2b,0x10,0x19,0x50,0x36,0x49,0x2f,0x26,0x13,0x25,0xa8,0xa1,0x9c,0x8f,0x8b -,0xbb,0x12,0x15,0x4a,0xc9,0x49,0x2c,0x37,0x21,0x22,0xb4,0xa8,0x9c,0x9d,0x91,0xab,0x1a,0x10,0x34,0xa4,0x35,0x2e,0x38,0x26,0x1d,0xe4,0xb2,0xa6,0xa6,0x93,0x9b,0x3a -,0x26,0x2e,0xb1,0x3f,0x2c,0x30,0x38,0x21,0x23,0xf5,0xa4,0xba,0x9b,0x99,0xbc,0x33,0x19,0xdc,0xda,0x69,0xc8,0xcd,0x29,0x1f,0xee,0xaf,0x37,0xc6,0x9a,0xb0,0x45,0x1d -,0xbe,0xba,0xc5,0xb3,0x2f,0x29,0x1e,0x30,0x34,0x41,0xb2,0x94,0x95,0xb7,0x1c,0x32,0xab,0xbb,0xb8,0x3c,0x3d,0x1e,0x2b,0xc7,0x4c,0xca,0x9b,0x9c,0x5b,0x1a,0x22,0xc1 -,0xb2,0xa6,0xd5,0xde,0x1f,0x2e,0x4f,0x31,0xe4,0xa9,0x9b,0xae,0x22,0x1e,0xa9,0xa1,0xb3,0x4f,0xc2,0x1c,0x18,0x1f,0x3c,0xb4,0xa3,0x8e,0x9f,0x4f,0x25,0xad,0xb3,0x78 -,0x29,0x2e,0x16,0x17,0x2c,0x4b,0xa6,0xdd,0x94,0xa1,0xa5,0x2c,0x3b,0xae,0xcc,0x51,0x49,0x2e,0x1c,0x4a,0x3d,0xb6,0x29,0xaa,0xab,0xa8,0xbb,0x4b,0x9e,0xb7,0x5f,0x4e -,0x2e,0x1d,0x25,0x1f,0x47,0x2a,0xa4,0x9b,0xa0,0xbd,0x28,0xa1,0xa7,0xbb,0x34,0x1d,0x1e,0x21,0x2b,0xbf,0x49,0xa9,0x9d,0xa0,0xab,0x2b,0xd9,0x76,0x43,0x7d,0x39,0x3b -,0x31,0x2c,0x47,0x26,0xcb,0x9d,0x9c,0x9f,0x24,0x49,0xe8,0xc8,0xae,0xcd,0xe6,0x2a,0x1f,0x1c,0x23,0xaf,0x97,0x9c,0xa3,0x28,0x31,0xcd,0xbb,0xb5,0x34,0x2b,0x1e,0x25 -,0x2d,0x4a,0xa3,0x9b,0x9b,0xa3,0x39,0x2b,0x28,0x38,0xc2,0xe2,0x36,0x24,0x29,0x48,0xce,0xa5,0x9a,0x9f,0xb6,0x25,0x1f,0x2c,0xb6,0xa4,0xc3,0x40,0x2b,0x28,0x2e,0x2e -,0xb2,0x9d,0xa0,0xb1,0x2f,0x3b,0x4e,0xa8,0xab,0x65,0x2b,0x18,0x22,0x32,0x55,0xb0,0xa5,0xaa,0xac,0xb9,0xad,0xdf,0x3d,0x53,0x47,0x35,0x23,0x2f,0x33,0x35,0xaf,0x9d -,0xa9,0xb9,0x27,0x51,0x59,0xcb,0xa3,0xdf,0x40,0x23,0x2f,0x58,0x38,0xca,0xaf,0x47,0x3f,0x2a,0xb5,0xad,0xb2,0xa1,0x4b,0x3b,0x29,0x2e,0xb9,0x3f,0x4a,0xb1,0x41,0xe2 -,0xd7,0xa0,0xa0,0x40,0x37,0x24,0x3b,0xed,0x3e,0xc8,0x2c,0x37,0xa6,0xb0,0xbf,0x34,0x5c,0xac,0x4a,0xcd,0x6c,0x37,0x5a,0x5a,0xac,0xe3,0x3a,0x3c,0x2f,0x39,0x38,0xb3 -,0x9f,0x48,0x3f,0xec,0xcf,0xa5,0xbd,0xd3,0x26,0x1e,0x36,0xcc,0x68,0xd0,0xa5,0x98,0xc8,0x24,0x32,0x2c,0xad,0xd0,0xea,0x25,0x1a,0xd6,0xa8,0x9f,0xa4,0xb5,0xb7,0x37 -,0x27,0x4a,0x2b,0x42,0x2f,0xf4,0xb7,0xdd,0xb6,0x3a,0x45,0xce,0xaa,0xa1,0xd9,0x29,0x2d,0x37,0xaf,0xb1,0xb8,0x42,0x1f,0x3d,0x49,0xb4,0xcd,0xce,0x9e,0xaa,0xcd,0x2e -,0x1e,0x57,0x54,0x64,0x28,0x1d,0x3f,0xef,0x9c,0x99,0xa4,0xa5,0xce,0xeb,0x2f,0x20,0x3c,0x24,0x3f,0x46,0xc4,0xa5,0x2c,0x3a,0x4f,0xab,0x95,0xb8,0x5d,0x13,0x1a,0xaf -,0xab,0xa6,0x37,0x42,0x3e,0x2d,0xbb,0xbd,0x55,0xb5,0xd7,0xa4,0x39,0x27,0x30,0x2f,0xcb,0xe5,0xa7,0xc9,0x2a,0x35,0xc0,0xa0,0x98,0xbc,0x6e,0x1a,0x21,0x3a,0x23,0x3f -,0x5f,0x98,0x9b,0x48,0x25,0x1f,0xa2,0xa2,0xb3,0x6a,0x0a,0x1a,0x3e,0xb4,0x8f,0x8e,0x92,0x24,0x0f,0x37,0xb9,0xa6,0x1b,0x21,0x1f,0x1d,0x9e,0x41,0x9d,0xa0,0x90,0x90 -,0x1d,0x1b,0x0e,0xf3,0xab,0x58,0xb0,0x0f,0xaf,0xac,0x60,0x94,0x9d,0x91,0x0f,0x10,0x22,0x20,0x9b,0x28,0xa5,0x4e,0x37,0x90,0x28,0xb3,0xb2,0x8e,0x9a,0x09,0x12,0x0d -,0xa9,0xa3,0xbd,0xb2,0x0c,0x98,0x93,0x98,0x90,0xca,0x66,0x05,0x14,0x2b,0xc3,0xc7,0x18,0xb1,0x22,0x90,0x86,0xaf,0x9f,0xcb,0xaf,0x0e,0x06,0x10,0x13,0x9b,0xaa,0x8d -,0x30,0x1e,0x8a,0x9d,0x8f,0xc9,0xac,0x14,0x02,0x17,0x19,0x9b,0x9a,0x98,0xc3,0x0e,0x99,0xa1,0xc4,0xca,0x36,0xbd,0x0e,0x1d,0x19,0xab,0x8a,0x8a,0xaf,0x0a,0x95,0x86 -,0xa2,0x5f,0xc1,0x1d,0x03,0x1b,0xbd,0xba,0xc9,0x28,0x2a,0x03,0x08,0xeb,0xab,0xa2,0x8c,0x8a,0x1f,0x18,0x3b,0xed,0x8e,0x87,0x82,0x9e,0x1b,0xa7,0xbd,0x99,0x92,0x9f -,0x0d,0x00,0x06,0x03,0x42,0x8f,0x85,0x68,0x07,0xcc,0x67,0x25,0x9c,0x88,0x9b,0x08,0x0a,0x0b,0x20,0x8a,0x82,0x84,0x17,0x24,0xa6,0x3a,0x97,0x8c,0x9a,0x08,0x0f,0x18 -,0x14,0xb0,0x99,0x96,0x12,0x1d,0x40,0x1c,0xad,0xc3,0x6d,0x1a,0xb9,0x9d,0x0b,0x0c,0x78,0x84,0x8f,0x9a,0x8b,0x27,0x4f,0x93,0x8d,0x22,0x05,0x38,0x1b,0x3c,0x9d,0x8c -,0xfb,0x0b,0x9f,0x2a,0x21,0xab,0xa0,0x0e,0x00,0x10,0x16,0x9e,0x8a,0x8a,0xbc,0x14,0x93,0xa4,0x9b,0x84,0x88,0xbc,0x02,0x25,0x2a,0xa5,0x8a,0x94,0xc8,0x00,0x1d,0x4d -,0x0e,0x61,0x9b,0xac,0x04,0x1b,0x2b,0x14,0xb6,0x9d,0x87,0x71,0x97,0x96,0x1f,0xa8,0x88,0x87,0x13,0x0c,0x0b,0x0d,0x9f,0x95,0x88,0xce,0xcd,0xa2,0x05,0x11,0x9d,0x85 -,0x2b,0x0b,0x18,0x0b,0xb8,0xad,0xa2,0x1a,0x3c,0x83,0x1d,0x0c,0xca,0x86,0xaf,0x19,0xb9,0x21,0x9b,0x8e,0x88,0xbe,0x1b,0x8c,0x47,0x0f,0x25,0xa9,0x1e,0x01,0x27,0x1b -,0xe2,0x9f,0x6e,0x1b,0x04,0x90,0x90,0x76,0x9e,0x9a,0xbd,0x08,0xaf,0xbf,0x23,0x91,0x8d,0x8e,0x1f,0x91,0x8a,0x1c,0xc2,0x9e,0xb7,0x02,0x0b,0x14,0x07,0xa7,0x8e,0x8f -,0x0e,0x15,0x92,0x10,0x19,0x96,0x87,0xbe,0x15,0x2f,0x08,0xb4,0x84,0x80,0x9c,0x14,0x9b,0x12,0x11,0x96,0x90,0x40,0x0e,0x26,0x07,0x19,0x93,0x8c,0xb0,0x07,0x98,0x9f -,0x20,0xd0,0x70,0x1e,0x0a,0xa9,0x2c,0x0c,0xd3,0x92,0x8d,0x4c,0x8c,0x8a,0x1e,0xc6,0xa2,0xab,0x19,0xb4,0xc0,0x0e,0xaf,0x99,0x9f,0x0e,0x1c,0x9b,0x14,0x1b,0x69,0xb0 -,0x0e,0x10,0xab,0x17,0xb4,0x8f,0x8f,0xb6,0x23,0x87,0xa3,0x39,0x98,0x95,0x27,0x03,0x43,0x1b,0x33,0x8b,0x8f,0x4e,0x01,0x19,0xae,0x3a,0x8e,0x89,0xc0,0x07,0x0d,0x1c -,0x11,0x93,0x8b,0x8f,0x1e,0x15,0x95,0x29,0xa2,0x84,0x8f,0x15,0x0b,0x39,0x0f,0x3f,0x8b,0x91,0xd1,0x0b,0xa3,0x24,0x0b,0x9c,0x8e,0xb0,0x10,0xd9,0x1f,0x0e,0xa7,0x96 -,0x95,0x47,0x2f,0x9f,0x08,0x24,0x8a,0x91,0x28,0x0e,0x32,0x0c,0xad,0x85,0x8b,0x98,0x17,0x9a,0x2c,0x13,0x95,0x94,0xcb,0x0f,0x1c,0x0b,0x0c,0xb1,0xc6,0x5f,0x1b,0xcd -,0x8b,0x19,0xb3,0x8b,0xa3,0x1f,0x43,0x94,0x27,0xa2,0x92,0xf0,0x24,0x17,0x8c,0xbc,0x0e,0xa4,0xb2,0x1c,0x0c,0xdd,0x20,0x13,0x99,0x9d,0xb3,0x16,0x2a,0x92,0x1b,0x9f -,0x89,0xa3,0x10,0x0c,0xbf,0x26,0x9a,0x84,0x99,0x2f,0x08,0xaf,0xb0,0x27,0x8c,0x8d,0x3c,0x06,0x10,0x12,0x18,0x93,0x8e,0xa4,0x0e,0x0d,0xaa,0x2d,0xa1,0x89,0x97,0x0b -,0x0a,0x4a,0x2e,0x9a,0x84,0x8f,0xd9,0x0d,0xb2,0x9d,0x21,0x8d,0x8b,0xb6,0x0b,0x18,0x18,0x0b,0xa7,0x90,0xae,0x20,0x0b,0xab,0x0b,0x13,0x8d,0xa1,0x36,0x0e,0x49,0x18 -,0x2a,0x81,0x88,0x91,0x2c,0xce,0x95,0x0f,0x91,0x84,0x9c,0x16,0x0a,0x17,0x04,0x23,0x95,0x3b,0x1c,0x0c,0x99,0xb1,0x1b,0x8f,0xa8,0x3b,0x13,0xb4,0xbe,0x1e,0x8f,0x96 -,0xbb,0x2d,0x2d,0x8c,0x1c,0x3d,0x93,0xa0,0x50,0x1f,0xa9,0x12,0x21,0x95,0xca,0xb0,0x1d,0xc8,0xa0,0x09,0xa7,0xb7,0x31,0x18,0x10,0x29,0x0b,0x9e,0x8c,0xc1,0xb3,0x1e -,0x8f,0xad,0xf3,0x83,0x9a,0xb8,0x11,0x31,0x23,0x19,0x8c,0x9f,0x31,0x11,0x1d,0x96,0x14,0xb6,0x9a,0x2b,0x0f,0x0a,0x2a,0x15,0xad,0x8a,0xae,0xbf,0x1a,0x9c,0x8c,0x27 -,0x8b,0x89,0xa0,0x1c,0x1b,0x27,0x0d,0xa1,0x8d,0xe1,0x23,0x0a,0xf6,0x19,0x18,0x8b,0x9a,0x6a,0x0a,0x1c,0x1b,0x1c,0x86,0x8f,0xb1,0x1a,0x23,0x94,0x1e,0x97,0x86,0xa1 -,0x19,0x0f,0x23,0x0b,0x7d,0x87,0xa8,0x2c,0x17,0xb8,0xc6,0x12,0x8f,0x90,0xc9,0x18,0x27,0x26,0x0a,0xaf,0x8e,0x6c,0x2b,0x1b,0xaf,0x11,0x21,0x84,0x8d,0x98,0x5d,0x5f -,0x0f,0x14,0x86,0x8c,0x9e,0x3d,0x19,0x3e,0x05,0x3d,0x8f,0xb8,0x1e,0x10,0x1a,0x08,0x38,0x8b,0xc7,0xc3,0x23,0x4c,0xb8,0x26,0x87,0x86,0x94,0x3e,0x35,0x1e,0x0e,0x9c -,0x8e,0xb9,0x52,0x16,0x4a,0x11,0x10,0x9b,0x9f,0x65,0x13,0x23,0x0f,0x16,0x8e,0x94,0xaa,0x33,0x1d,0xad,0x15,0xa2,0x86,0x8d,0xe7,0x16,0x39,0x19,0xae,0x86,0x9f,0x3d -,0x10,0x1e,0xc0,0x13,0x9a,0x92,0xd4,0x0f,0x11,0x1a,0x15,0x97,0x8c,0x57,0x28,0x0c,0x57,0xb8,0x42,0x87,0x91,0xce,0x18,0x1b,0x1b,0x2e,0x8a,0x93,0xb4,0xcb,0x20,0x98 -,0x1f,0xa9,0x8b,0xb7,0x43,0x0e,0x0d,0x06,0x22,0x8d,0x7b,0x2c,0x0c,0x0f,0x59,0x2f,0x88,0x8a,0x9b,0x24,0x1f,0x32,0x42,0x87,0x86,0xa8,0x37,0x0f,0x4a,0x64,0xd8,0x89 -,0xa7,0x23,0x0c,0x0e,0x0f,0x13,0x97,0xac,0x2a,0x21,0x0e,0x97,0x62,0xa8,0x87,0xa1,0x32,0x12,0x1f,0x15,0x4a,0x8b,0x9b,0x9d,0x41,0x3c,0xad,0x27,0x8f,0x8a,0xae,0x10 -,0x0f,0x17,0x16,0xab,0x94,0x4e,0x21,0x12,0x3b,0x43,0x2e,0x8c,0x9b,0x28,0x15,0x17,0x1d,0x2c,0x8c,0x91,0x40,0x3a,0x2a,0x99,0x4e,0x97,0x83,0xa6,0x29,0x1f,0x22,0x0f -,0x34,0x99,0x1f,0x2e,0x27,0x69,0xad,0x13,0x97,0x93,0x20,0x15,0x13,0x0e,0x0f,0x94,0x88,0xad,0xaf,0x39,0x9d,0xa5,0xa6,0x85,0x9f,0x1f,0x1b,0x1e,0x18,0x2a,0x8e,0x57 -,0x1a,0x13,0x0e,0xab,0x1e,0x9b,0x8a,0x42,0x29,0x1e,0x25,0x1b,0x9e,0x8e,0x2b,0x3f,0x1a,0xab,0x9d,0x49,0x88,0xa0,0x54,0xf8,0x22,0x18,0x13,0x98,0x9f,0x44,0xf4,0x26 -,0xa4,0x19,0xab,0x89,0x31,0x14,0x0e,0x11,0x0e,0xaf,0x88,0xc5,0x33,0x2a,0xab,0xae,0x2c,0x89,0x91,0x2c,0x25,0x44,0x21,0x29,0x8a,0x95,0x2b,0x15,0x12,0xae,0x17,0xca -,0x87,0x59,0x16,0x1e,0x26,0x13,0xe6,0x97,0x22,0x1e,0x20,0x97,0x9b,0x28,0x89,0x8c,0xce,0x4f,0x4c,0x13,0x15,0x8f,0x93,0x6c,0x1f,0x30,0xa0,0x16,0xa9,0x8c,0x1b,0x08 -,0x11,0x12,0x0d,0x9f,0x87,0xa8,0x28,0x23,0x9f,0xde,0x36,0x87,0x90,0x24,0x1f,0x3f,0x21,0x57,0x88,0x94,0x1d,0x0c,0x1a,0xa4,0x24,0x9d,0x8b,0x28,0x11,0x24,0x2f,0x1d -,0xb2,0xab,0x1f,0x21,0x22,0x9d,0xc4,0x25,0x8c,0x92,0x2b,0x1b,0x1b,0x17,0xc0,0x8c,0x8f,0xa2,0x28,0xa4,0x91,0x33,0x8f,0x8a,0x13,0x09,0x10,0x0b,0x15,0xab,0xa8,0x55 -,0x1e,0x1c,0xaf,0x1c,0x39,0x8a,0xa0,0x1f,0x22,0x2e,0x3d,0x96,0x87,0x99,0x2f,0x14,0xae,0x9d,0xd0,0x8c,0xa0,0x15,0x1a,0x2a,0x19,0x24,0xda,0x21,0x26,0x17,0x4f,0x9d -,0x1e,0x99,0x8f,0x66,0x25,0x1b,0x0f,0x17,0x8e,0x93,0x9c,0xae,0x29,0x8f,0xa9,0x9e,0x88,0x32,0x12,0x10,0x14,0x11,0xaf,0x8f,0xc5,0x5a,0x20,0xa9,0x32,0x18,0x8d,0xae -,0x15,0x18,0x10,0x0e,0xb6,0x86,0x9c,0x2e,0x0f,0x2d,0xa0,0xe6,0x87,0x8a,0x36,0x27,0xba,0x23,0x22,0x8e,0xdb,0x1c,0x1e,0x1f,0xa0,0x15,0xbd,0x89,0x2e,0x1d,0x1b,0x08 -,0x05,0xae,0x8f,0xb1,0xe5,0xe8,0x91,0x9f,0x9c,0x81,0xa0,0x14,0x25,0x1e,0x0e,0xd9,0x8e,0xab,0x57,0x30,0xa6,0x43,0x0c,0x9b,0x9d,0x11,0x19,0x18,0x0c,0x32,0x89,0x8b -,0xb0,0x16,0x2a,0x5f,0x23,0x95,0x8e,0x28,0x18,0xc9,0x50,0x33,0x92,0x9e,0x34,0x2a,0xfe,0x9c,0x22,0xc9,0x92,0x40,0x29,0x1f,0x0e,0x08,0x2e,0xa5,0xad,0x33,0x2d,0x9a -,0x3d,0x98,0x85,0xae,0x20,0x1c,0x16,0x0e,0xa3,0x90,0xaf,0xa1,0xa1,0x93,0xd7,0x41,0x99,0x3d,0x1b,0x22,0x14,0x06,0x27,0x8d,0x98,0xa2,0x2f,0x23,0x10,0x0f,0x8c,0x9d -,0x16,0x27,0x27,0x16,0xb6,0x86,0x90,0xa2,0x55,0xaf,0xa9,0x1d,0x8c,0x8f,0x15,0x2f,0x45,0x09,0x09,0x38,0xb1,0x9f,0xb9,0x3d,0x1a,0x0a,0x97,0x82,0xbe,0x20,0x5a,0x18 -,0x0e,0xb2,0x99,0x9f,0xaa,0xa4,0x9e,0x16,0xb5,0x80,0xbd,0x13,0xb9,0x4c,0x0c,0x17,0x1f,0xb0,0x90,0xa9,0xa4,0x09,0x0a,0x8b,0x97,0x28,0x15,0x17,0x1b,0x28,0xd6,0xbc -,0x9a,0x96,0x90,0x2d,0x17,0x8e,0x8f,0x6e,0x4d,0x29,0x23,0x41,0x3b,0x19,0x6f,0x8d,0x8b,0x30,0x01,0x25,0x98,0xb9,0xc6,0x26,0x12,0x1b,0x69,0x2a,0x27,0x9f,0x87,0x8c -,0x17,0x25,0x9d,0xaa,0xc4,0xab,0xb8,0xbd,0xa8,0x1c,0x13,0x2f,0x8e,0x86,0x25,0x0c,0x1d,0x1c,0xe9,0xd3,0x17,0x15,0xb9,0xb6,0x16,0x26,0x94,0x83,0x96,0x36,0xb3,0x29 -,0x30,0xb2,0xcd,0x24,0xa0,0x98,0x0e,0x09,0x7d,0x82,0x8a,0x19,0x21,0x1d,0x0e,0xbf,0x7d,0x19,0xb9,0x91,0x32,0x0a,0x0b,0x95,0x84,0xb6,0xaa,0xb7,0x14,0x1a,0x53,0x25 -,0xb6,0x87,0x95,0x17,0x0b,0xb1,0x81,0x95,0x58,0x5a,0x12,0x18,0x48,0x12,0x0d,0xa0,0x92,0x2c,0x07,0x0d,0x8d,0x8d,0xaf,0x9f,0x25,0x16,0x2e,0x36,0x21,0x95,0x86,0xa1 -,0x15,0x09,0x99,0x80,0x97,0xb6,0x78,0x15,0x23,0x27,0x10,0x23,0x98,0x9c,0x26,0x08,0x10,0x8c,0x97,0xcf,0xce,0x35,0x28,0x27,0x1f,0x2e,0x92,0x8e,0x4a,0x10,0x17,0x8b -,0x82,0xb9,0x3a,0xd2,0xc1,0x2b,0x0e,0x16,0xb9,0x99,0xe1,0x15,0x0a,0xdc,0x86,0xb0,0x28,0xd0,0xae,0x36,0x0f,0x16,0xd7,0x91,0xa1,0x30,0x15,0x1c,0x88,0x8a,0x3b,0xb9 -,0xaa,0xac,0x23,0x11,0x2a,0xa9,0x9a,0x38,0x19,0x0a,0xb2,0x8a,0xcc,0x36,0xb6,0xb1,0x26,0x0c,0x12,0xd1,0x97,0x9a,0x27,0x10,0x2b,0x86,0x8f,0xb3,0xaf,0xa0,0x9d,0x1d -,0x0c,0x21,0xa7,0x9e,0x2c,0x0d,0x10,0x9f,0x8f,0xdb,0x5b,0xac,0xa1,0x44,0x12,0x11,0xb6,0x91,0xaa,0x15,0x0b,0x24,0x8e,0x91,0xa4,0xb5,0x9f,0x98,0x33,0x18,0x20,0x9e -,0x97,0x1f,0x0b,0x14,0xbd,0x9a,0x44,0x30,0xa2,0x97,0xa7,0x2a,0x15,0x3c,0x9a,0xc3,0x19,0x0e,0x2b,0x9f,0xa0,0xc1,0x58,0xa0,0x99,0x9e,0xcc,0x1f,0xce,0xa4,0xda,0x19 -,0x15,0x3b,0xba,0xb4,0x4a,0xb7,0xa9,0xcf,0xb8,0x37,0x31,0x3f,0x24,0x28,0x30,0x4c,0x27,0x27,0xa2,0x97,0x99,0xa5,0xcb,0xa1,0x9d,0xb9,0x2c,0x1a,0x2e,0xb5,0xbf,0x1b -,0x0e,0x2b,0xa0,0x9a,0xae,0x2a,0x65,0xa0,0xa6,0x2a,0x0a,0x16,0x9b,0x96,0x7d,0x14,0x2d,0xa6,0xa5,0x9b,0xa9,0x9e,0x9c,0xb8,0x24,0x18,0x2d,0xb9,0xcf,0x32,0x36,0x2d -,0x1c,0x2b,0xac,0x9c,0x9b,0xa0,0xc4,0x19,0x1d,0x31,0x4e,0xb1,0xbe,0x4f,0x20,0x1e,0x2f,0xcc,0x98,0x8c,0x93,0xc0,0x28,0x3d,0x3b,0x2b,0xd6,0xa7,0xb6,0x31,0x19,0x0e -,0x2d,0xa4,0xa1,0xae,0xb6,0xac,0x37,0x1e,0x29,0xbf,0xaf,0xdc,0xc8,0x32,0x25,0x47,0x38,0x5e,0xa5,0x9b,0x9d,0xb1,0xcf,0x6b,0x4f,0xed,0xba,0x56,0x1e,0x2a,0xae,0x3c -,0x1b,0x20,0x6f,0xaf,0xae,0xab,0xc3,0xba,0xc3,0x39,0x1f,0x36,0xad,0xae,0xf6,0xc6,0xbb,0x2a,0x29,0xc1,0xa5,0xab,0xad,0xab,0x4b,0x24,0x39,0x2a,0x2e,0xb1,0xae,0xc7 -,0x42,0xef,0xcf,0x59,0x69,0xed,0x2e,0x21,0xfe,0xac,0x42,0x2d,0x69,0xda,0xec,0xb6,0xae,0xa1,0x9a,0xac,0x43,0x25,0x2e,0x37,0x28,0x42,0xb0,0xae,0x3d,0x21,0x2e,0x6a -,0xa9,0xa6,0xbb,0x59,0x2f,0x38,0x31,0x4f,0xd8,0x57,0xbd,0x3c,0x38,0xb7,0xad,0xa0,0xad,0x51,0x2d,0x29,0x3d,0xdf,0xb5,0xb8,0xaf,0xc4,0x1b,0x27,0xb4,0xa3,0xaf,0x4c -,0x39,0x2e,0x39,0x20,0x27,0xc0,0xa2,0xa7,0x59,0x3b,0xbd,0x9f,0xa0,0xb1,0xd0,0x39,0x25,0x1c,0x1f,0xc3,0xa2,0xb2,0x2d,0x23,0x61,0xb8,0xa7,0xb4,0x72,0xc6,0x5f,0x2e -,0x2c,0x2e,0x5a,0xa4,0xaf,0x3e,0x40,0xe2,0xde,0xb4,0xae,0xd4,0x3e,0x2a,0x2b,0x40,0xcf,0xa2,0xa7,0x6b,0x2f,0x6d,0xaf,0xb5,0xb8,0x2a,0x2c,0x30,0x2c,0x2a,0x29,0xbb -,0xa7,0xad,0x51,0x4f,0xb3,0xc1,0xb3,0xad,0xb2,0xdd,0x1f,0x2a,0xec,0xb5,0xad,0x46,0x40,0xbd,0xb0,0x4d,0x32,0x3d,0x39,0x36,0x2a,0x34,0xc3,0xbf,0xb3,0xad,0xf3,0x3f -,0xfd,0xb7,0xab,0xaf,0x3a,0x32,0x34,0x23,0x36,0x70,0xa5,0x9e,0xce,0x2b,0xcb,0x9c,0xab,0x40,0x2c,0x48,0x68,0x2c,0x1e,0x2a,0xbe,0xb1,0xbe,0x42,0x5c,0xa7,0x55,0x48 -,0xbe,0x43,0x30,0x21,0x37,0xea,0xa8,0xa5,0xc5,0xca,0xd2,0xa4,0xaa,0xaf,0xb5,0x2f,0x26,0x23,0x33,0x27,0x29,0xa7,0xae,0x39,0x2e,0xc3,0xa3,0xb2,0xb4,0x43,0x36,0x3a -,0x20,0x1f,0x3a,0x9b,0x9e,0x3b,0x39,0xa0,0x93,0xb4,0x3e,0x3f,0x44,0x31,0x1b,0x1f,0x2d,0xb6,0xaa,0x3b,0x31,0x48,0xa6,0x9f,0xa5,0xa5,0x60,0x2a,0x1e,0x22,0x26,0x46 -,0xa2,0xb5,0x26,0x26,0xaa,0x96,0x9e,0xd3,0x2a,0x3c,0xca,0x33,0x1a,0x27,0xaa,0xad,0x39,0x2b,0xa5,0x92,0xa6,0xce,0x49,0x3d,0x2c,0x1e,0x25,0x38,0xb1,0xd0,0x1e,0x1e -,0xca,0x97,0x9a,0xad,0xc9,0x47,0x38,0x36,0x2d,0x2f,0xb4,0xa4,0xdd,0x2f,0x31,0xa5,0x9a,0xac,0x37,0x24,0x45,0x34,0x22,0x1f,0x5b,0xa2,0x5e,0x1c,0x2b,0x9c,0x8c,0x9b -,0x36,0x24,0x4d,0xf1,0x30,0x2c,0x50,0xa6,0xcf,0x22,0x2c,0xbc,0x9f,0xa0,0xbf,0x3c,0x33,0x24,0x1f,0x2b,0x45,0xc7,0xbc,0x47,0x2d,0xac,0x91,0x94,0xb7,0x22,0x29,0xce -,0xc1,0x4f,0x27,0x29,0x3f,0x2e,0x1e,0x3e,0x93,0x8e,0xab,0x1e,0x27,0x37,0x2b,0x2e,0x3a,0xaf,0xa7,0x40,0x19,0x2a,0x97,0x8b,0x93,0xb3,0x1f,0x1c,0x29,0x2f,0x39,0x38 -,0x4b,0x42,0x26,0x1d,0xae,0x90,0x94,0xab,0x2a,0x1e,0x1f,0x34,0x47,0x3d,0xb2,0xd3,0x24,0x1c,0xbe,0x8a,0x88,0x9b,0x2f,0x1f,0x1f,0x24,0x24,0x27,0xee,0xc8,0x27,0x19 -,0x31,0x99,0x8f,0x97,0xb9,0x25,0x25,0x33,0x2e,0x29,0x52,0xb7,0x4d,0x23,0x2c,0x99,0x8b,0x92,0xb1,0x21,0x1d,0x25,0x50,0x27,0x1c,0x2e,0x2c,0x1e,0x2a,0x9e,0x8d,0x8f -,0x9d,0x37,0x21,0x2f,0x32,0x35,0x32,0x49,0x39,0x1f,0x2c,0x9f,0x8e,0x91,0x9e,0x36,0x1d,0x2b,0x2a,0x38,0x3b,0x24,0x19,0x13,0x29,0xa3,0x90,0x8d,0x97,0xcb,0x24,0x38 -,0xb6,0xc0,0xeb,0x61,0x28,0x12,0x1b,0xdc,0x97,0x8f,0x9a,0x5f,0x1c,0x21,0x4b,0x46,0x3b,0x48,0x22,0x1b,0x19,0x37,0x9b,0x8e,0x8e,0xaf,0x26,0x4b,0xbc,0xb2,0xb1,0x72 -,0x29,0x13,0x19,0x4d,0xa9,0x94,0x96,0x41,0x1e,0x2d,0x3e,0xf3,0xcd,0x2b,0x27,0x21,0x1f,0x57,0xab,0x96,0x92,0x9d,0xb8,0x2a,0x34,0xb6,0xaa,0x4e,0x1e,0x1c,0x21,0x33 -,0xb9,0x9f,0xa1,0xaf,0x3b,0x25,0x36,0xc5,0x4f,0x2e,0x2a,0x5d,0xed,0x32,0xbf,0x9e,0x96,0x97,0xa4,0x56,0x24,0x2b,0x5d,0x46,0x41,0x23,0x1f,0x1c,0x24,0xbd,0x9f,0x9d -,0xb3,0xe2,0x2a,0x28,0xc2,0xab,0xab,0xaf,0x2e,0x3e,0xc8,0xba,0xa2,0xa6,0xaf,0x33,0x14,0x0f,0x2b,0xa4,0x9a,0xa9,0x1b,0x0d,0x15,0xee,0x8f,0x94,0xa8,0xc4,0x3f,0x43 -,0xa9,0x8e,0x8f,0xa7,0x16,0x07,0x09,0x1d,0x9d,0x9e,0xeb,0x41,0x4b,0x48,0x3f,0xa8,0x94,0xb4,0x1d,0x13,0x2e,0x96,0x93,0x9a,0xa9,0x68,0x3f,0x24,0x37,0xa4,0xaf,0x1a -,0x06,0x09,0x22,0xa4,0x96,0x9a,0xa4,0x38,0x41,0xbb,0x9d,0x8c,0x99,0xd1,0x27,0x1f,0x2f,0x1f,0xcb,0x99,0xa4,0x29,0x0a,0x0c,0x35,0xa4,0x9f,0x9e,0xd6,0x24,0x14,0x1e -,0xa0,0x8b,0x8e,0xaf,0x35,0xd9,0xaf,0xc1,0xa6,0x9f,0xa0,0x19,0x09,0x0a,0x17,0x45,0x31,0xad,0x99,0x9a,0x2f,0x1c,0xaa,0x9b,0x9d,0xc5,0x23,0xe1,0x2c,0x28,0xaf,0x8f -,0x83,0xaf,0x0b,0x0b,0x24,0xa8,0xb1,0x17,0x0e,0x23,0x25,0xa6,0x8f,0x8c,0x98,0x1e,0x18,0x6a,0x99,0x98,0x67,0xfb,0xe3,0x2f,0xbf,0x50,0xa5,0xbd,0x14,0x0b,0x14,0x17 -,0x1e,0x9d,0x9e,0x94,0x33,0x1c,0x92,0x97,0x9d,0x34,0x23,0x9d,0xaf,0x3a,0x38,0x3c,0x8e,0x9a,0x1d,0x0e,0x17,0xb6,0x50,0x08,0x0b,0x97,0x8d,0x8b,0x31,0x3c,0x93,0xb5 -,0xa6,0xa4,0x48,0xa6,0x19,0x40,0x92,0x9d,0x96,0x17,0x08,0x13,0x1b,0x29,0x94,0x17,0x26,0x46,0x2d,0x8a,0x9f,0xc8,0x8f,0x1e,0x05,0x07,0x04,0x8e,0x98,0xa6,0x32,0x03 -,0x92,0x96,0xd2,0xa2,0xce,0xa1,0x49,0x1d,0x92,0x82,0x80,0xaf,0x06,0x9f,0x4d,0xa1,0x87,0x1e,0x9b,0x89,0x0d,0xbd,0x9d,0x4e,0x1f,0x00,0x01,0x06,0x07,0x07,0x02,0x01 -,0x94,0x0e,0x0e,0x95,0x2f,0x96,0x1d,0x0a,0x93,0xbb,0x95,0x93,0x54,0x81,0xb4,0xcf,0x84,0x94,0x8b,0xc8,0x1e,0x8d,0x90,0x83,0x81,0x8e,0x84,0x84,0x97,0x8a,0x9a,0x8f -,0x94,0x00,0xcc,0xa8,0x3e,0xa2,0x07,0x0a,0x0a,0x00,0x05,0x16,0x0b,0x0d,0x00,0x1e,0xa5,0x02,0x1c,0x06,0x11,0x15,0x06,0xb0,0x1c,0x9f,0x82,0xbc,0x9d,0x88,0x8c,0x80 -,0x93,0x8c,0x8b,0x1b,0x99,0x88,0x8a,0x80,0xaf,0x9f,0x83,0x9b,0x8e,0x16,0x68,0x97,0x2a,0x9f,0xb1,0xa1,0x98,0x10,0x0c,0x0d,0x05,0x07,0x02,0x00,0x0c,0x04,0x14,0x50 -,0x05,0x9d,0x1b,0x05,0x10,0x01,0x55,0x23,0x1d,0x8b,0xa2,0x98,0x8f,0x94,0x86,0xa9,0x19,0x34,0x2e,0x9f,0x9d,0x4f,0x80,0x9a,0x9f,0x80,0x8f,0x84,0xac,0x91,0x84,0xa6 -,0x87,0x8f,0x8f,0x9a,0x1a,0x2d,0x14,0x08,0x0c,0x0c,0x03,0x08,0x00,0x2f,0xab,0x00,0xa7,0x1d,0x07,0x03,0x01,0x1b,0x10,0x1c,0x9d,0x1c,0x48,0xa7,0xb9,0x88,0x2e,0x2e -,0xdf,0x1d,0x8f,0x9c,0xa3,0x80,0x8a,0x88,0x86,0x8c,0x86,0xa1,0x99,0x8c,0x22,0x8d,0xc2,0x94,0x8c,0x9c,0x9e,0x0b,0x0a,0x12,0x2f,0x1d,0x18,0x01,0xa3,0x17,0x0a,0x29 -,0x3c,0x40,0x04,0x04,0x04,0x00,0x98,0x91,0x36,0x9a,0x06,0x0b,0x0e,0xcb,0x98,0x9e,0xbb,0x0f,0x0d,0x8a,0x82,0x94,0x80,0x99,0x29,0x0f,0x1b,0x81,0x89,0x8a,0x99,0x1d -,0x89,0x88,0x80,0x89,0x92,0xb1,0x0b,0x03,0x26,0x9f,0x90,0xa7,0x07,0x13,0x08,0x0f,0x16,0x0f,0x1c,0x0a,0x00,0x12,0x18,0x92,0x97,0x14,0x01,0x09,0x29,0x0b,0x15,0x18 -,0x09,0x2e,0x88,0x91,0x8c,0x9e,0x9a,0x95,0x57,0xdd,0xb6,0x90,0x80,0xa1,0x8e,0x85,0x80,0x86,0x9e,0x39,0x29,0xda,0x17,0x30,0xa1,0x80,0x10,0x0c,0x4d,0x8a,0x8f,0x28 -,0xaa,0x03,0x03,0x23,0x87,0x96,0x12,0x1c,0x00,0x06,0x06,0x24,0x3a,0x0d,0x16,0x00,0x0f,0x0d,0x8c,0x85,0x5d,0x0b,0x00,0xb7,0xb5,0x8b,0x84,0x8d,0x9d,0x2e,0xa5,0x8d -,0x81,0x86,0x8c,0xba,0x09,0x14,0x87,0x80,0x99,0x95,0x9e,0x94,0x98,0x9c,0xa3,0x25,0x39,0x9d,0x0f,0x38,0xaa,0xae,0x2e,0x05,0x0e,0x0a,0x48,0x0e,0x04,0x07,0xe6,0x12 -,0x0c,0xb6,0x2c,0x0a,0x04,0xbd,0x1d,0x9d,0xa0,0xa4,0x19,0x12,0x9e,0xb5,0x9d,0x42,0xae,0x33,0x31,0xfd,0x8f,0x80,0x8e,0x8a,0x2e,0x5d,0x98,0x8f,0x80,0xce,0x1e,0x34 -,0x8c,0x90,0x8c,0x83,0xdd,0x30,0x11,0xca,0x9c,0x9c,0x1a,0x01,0x25,0x0b,0x1f,0xb6,0x91,0x2e,0x00,0x0a,0x0a,0x14,0x32,0xad,0x0d,0x05,0x08,0x07,0x1c,0xad,0x42,0x19 -,0x0d,0x11,0xbf,0x88,0x86,0x92,0x8c,0xa4,0x21,0xb7,0x85,0x88,0x8b,0x8e,0x96,0x8b,0x8c,0x8b,0x8e,0x92,0x20,0x0d,0x24,0x76,0x22,0x16,0x2b,0x2f,0x9b,0x99,0xb4,0x5f -,0x0c,0x23,0x20,0x47,0x2a,0x22,0xbb,0x0f,0x15,0x0e,0xc5,0x2d,0x2c,0x4b,0x08,0x06,0x15,0x98,0x28,0x2e,0x25,0x10,0x1a,0x2e,0x98,0xa7,0x9e,0x93,0x48,0x2f,0xa7,0x95 -,0x89,0xa5,0x0d,0x1e,0x9c,0xb8,0x90,0x8c,0x86,0x97,0x9a,0x96,0x84,0x82,0xea,0xa8,0x2c,0x4f,0x56,0x8d,0xa1,0xa3,0x56,0x17,0x1a,0x03,0x1d,0x22,0x09,0x00,0x06,0x18 -,0x17,0x1e,0x2a,0xb0,0x28,0x07,0x2c,0xb0,0xaf,0x18,0xbc,0x3d,0x0f,0xbb,0x4b,0xa6,0xa8,0xd3,0x27,0x48,0xc3,0x98,0x86,0x8e,0x9e,0x8e,0x89,0x29,0x9e,0x8e,0x97,0x97 -,0xa4,0x9a,0x91,0x8e,0xa2,0x67,0xc0,0x24,0x0c,0x0e,0x28,0x1a,0x14,0x40,0x32,0xbe,0x97,0x8d,0x24,0x0d,0x3d,0xcb,0x26,0xd4,0x1a,0x26,0x0f,0x27,0x2e,0x36,0xce,0x0d -,0x1d,0x10,0x09,0x17,0x98,0x15,0x27,0x16,0x27,0xa8,0x9b,0xa1,0x9a,0x8f,0x98,0x92,0xc8,0x85,0x87,0x8f,0x2e,0x26,0x3a,0xdf,0x8d,0x9e,0x9e,0x8b,0x96,0x21,0xd4,0x8e -,0x8f,0xb4,0x12,0x14,0xb0,0x44,0x0f,0xb4,0xb5,0x2d,0x18,0x2f,0x0c,0x0e,0x28,0x04,0x09,0x06,0x14,0x13,0x1c,0x5b,0x39,0x3b,0x1f,0xdf,0x99,0x45,0x99,0x9d,0xba,0xa2 -,0x2c,0x98,0x96,0x92,0xa0,0xb5,0x93,0x9c,0x94,0x9a,0xa6,0x91,0x9c,0xca,0x98,0xbd,0xdc,0xa4,0xaf,0x48,0x8f,0x9f,0xac,0x23,0x21,0x90,0x38,0x42,0x0f,0x18,0x10,0x0f -,0x2f,0x33,0x1a,0x28,0x25,0x0c,0x23,0x0c,0x2a,0xa7,0x09,0x08,0x17,0x2a,0x57,0xce,0x98,0x91,0xe6,0x99,0x23,0xce,0x8e,0xa3,0x9b,0x20,0x2e,0xa2,0x97,0xac,0x8f,0x9b -,0x9d,0x3e,0xab,0x89,0x93,0x90,0xa6,0x2a,0x2d,0x96,0xab,0x90,0x2c,0x1a,0x9b,0x3c,0x28,0x15,0x23,0xa0,0xb7,0x07,0x06,0x0d,0x1a,0x25,0x27,0x2c,0x42,0x9f,0xbd,0xde -,0xac,0xb5,0x30,0xb9,0x1b,0x0f,0x1c,0xe7,0x1e,0x13,0xb4,0x34,0x21,0xbe,0x11,0x27,0xa0,0xaf,0xc7,0x0f,0x99,0x84,0x98,0x8d,0x8e,0x8c,0x8b,0x97,0x8e,0x9a,0x8e,0x94 -,0xa5,0x14,0x2e,0x3b,0x4a,0x29,0x11,0xa2,0x46,0x0b,0x0a,0x15,0x3d,0x9c,0x1a,0x06,0x10,0x24,0x15,0x1b,0xfb,0xde,0x1c,0xd2,0x0c,0x20,0x9e,0xa4,0x9a,0x0e,0x1a,0x26 -,0x91,0x92,0xa7,0x8d,0x8b,0x8d,0xc1,0xb2,0x91,0x94,0x8a,0x9e,0x1b,0x16,0x8e,0x98,0xca,0x3f,0x1c,0xa6,0x1a,0x1f,0x15,0x1f,0x48,0x28,0x1e,0x18,0x1b,0xa9,0x6a,0x34 -,0x91,0xa5,0x9b,0xba,0x25,0xc8,0x9d,0x9c,0x18,0x09,0x1b,0xc5,0x3b,0x23,0x21,0x28,0xa2,0x49,0x23,0x26,0x9f,0xa4,0xbc,0x27,0x13,0xbe,0x3c,0xc2,0x9b,0xa0,0x93,0xda -,0x1b,0x15,0x24,0x8c,0x96,0x19,0x07,0x1c,0xcc,0x91,0x8d,0x9d,0x9b,0x93,0x94,0xb6,0x98,0x85,0x9a,0xaf,0x62,0x29,0xbf,0x49,0x29,0x0f,0x1b,0x27,0x0f,0x06,0x10,0x60 -,0xaf,0x32,0x0e,0x0a,0x15,0x39,0x9a,0xa1,0x4e,0xa6,0xa8,0xaf,0x96,0x99,0x99,0xa3,0x4d,0x13,0x1f,0x9f,0x46,0x19,0x27,0x94,0xa6,0x3c,0x14,0x30,0x8c,0x8a,0x9d,0x2d -,0x1f,0xa9,0x94,0xa3,0x39,0xed,0xd6,0xa8,0x26,0x12,0x38,0x2c,0xaf,0x13,0x0f,0x1e,0x1a,0x1b,0x32,0x42,0x8e,0x93,0x3e,0x14,0x32,0x8a,0x88,0x9c,0x0f,0x19,0x21,0xac -,0xa5,0x2a,0x25,0xcc,0x1f,0x35,0xfd,0xaa,0x9c,0xb8,0x13,0x18,0x9c,0x41,0xa4,0xbc,0xa6,0x9a,0x9a,0xf7,0x1a,0xb8,0x96,0x97,0x20,0x07,0x15,0xcf,0xb4,0xb4,0x1b,0x25 -,0xaf,0x4a,0x2f,0xb8,0x97,0x8c,0x90,0x40,0x20,0xa8,0xa8,0xab,0x3e,0x4d,0xa1,0x24,0x10,0x12,0x28,0x9a,0xa2,0x15,0x05,0x13,0x9e,0x9d,0x38,0x2a,0xbc,0x98,0xa0,0x38 -,0x54,0x9a,0x92,0x52,0x19,0x11,0x25,0xad,0xaf,0x1e,0x25,0xa7,0xa4,0x28,0x19,0x9e,0x88,0x8d,0x2b,0x11,0xb3,0x86,0x8f,0x3a,0x3b,0x9c,0x92,0x69,0x1b,0x19,0xad,0x9b -,0x17,0x0b,0x1e,0xab,0x2c,0x16,0x1d,0xcb,0x8f,0xa6,0x1b,0x50,0x8f,0x8d,0xc7,0x24,0x3f,0xe1,0xa2,0x23,0x0b,0x27,0x9d,0xf1,0x13,0x1f,0x3d,0xce,0xe8,0x58,0x1f,0x6a -,0xac,0x44,0xfe,0xaf,0x95,0xa2,0x2c,0x34,0xbf,0x9a,0x99,0x19,0x0e,0x1e,0xaf,0xe9,0x16,0x1c,0xc6,0xaf,0x6c,0x2b,0xa7,0x8c,0x9d,0xa5,0x5d,0xec,0x9f,0x96,0xb8,0x1a -,0x2b,0x3c,0x1e,0x1d,0x66,0x39,0xb5,0x43,0x1d,0x1c,0x26,0x9e,0xae,0x2d,0x60,0xa9,0x9e,0xa8,0xd0,0x9b,0x91,0xd0,0x27,0x1c,0x1e,0xa5,0xb4,0x13,0x10,0x1f,0x36,0x31 -,0x21,0xb7,0xa9,0xc7,0x2c,0xd2,0x90,0x8b,0x8f,0x23,0x1b,0xa9,0x9e,0xd9,0x20,0x34,0xaa,0x40,0x10,0x14,0x4f,0x99,0xa6,0x1d,0x1a,0x5c,0x98,0xb0,0xc7,0x9f,0x95,0x9e -,0x4b,0x4e,0x58,0xa0,0xaa,0x29,0x17,0x29,0xc7,0x24,0x25,0x39,0x2d,0x2a,0x24,0x32,0xaf,0xd6,0xa4,0x98,0xb0,0xa1,0x9b,0x9c,0x48,0x1c,0x28,0xd5,0x43,0x35,0x4e,0x1b -,0x2e,0x3f,0x3f,0x21,0x42,0xad,0xcc,0xac,0x21,0xb1,0x8d,0x90,0xa3,0xaf,0xa5,0xbd,0x2e,0x15,0x13,0x3e,0x97,0xc3,0x17,0x38,0x6f,0x24,0x16,0x1c,0xcf,0xa8,0x45,0x31 -,0x9c,0x91,0x9f,0xb1,0x9a,0xb8,0x28,0x21,0x16,0x24,0x61,0x36,0x18,0x2b,0xb1,0xe5,0x2f,0x30,0x59,0x9c,0xa2,0x2a,0x44,0x96,0x8d,0x9b,0x9e,0xb3,0x25,0x1e,0xb3,0xbb -,0x42,0x2b,0x21,0xbe,0x3e,0x36,0x27,0x34,0x37,0x25,0x3f,0xed,0xbe,0xa9,0x97,0x9c,0x9f,0x93,0x92,0x4c,0x10,0x0e,0x2d,0xd1,0x16,0x22,0x34,0x26,0x2e,0x31,0xb9,0x22 -,0x49,0x9b,0xd6,0x66,0xb6,0x95,0x8f,0x9e,0xbb,0xc2,0x39,0x2a,0x36,0xb0,0x1d,0x0b,0xe3,0xac,0x3a,0x31,0x22,0x1f,0x37,0xbd,0xa4,0xba,0xa8,0x95,0x97,0x9b,0x9e,0x94 -,0x94,0x1b,0x08,0x19,0xe5,0x4d,0x15,0x22,0x29,0x1e,0x67,0xca,0xc1,0x31,0x3d,0xb5,0xae,0xaf,0xb6,0x9a,0x8d,0x95,0xb8,0x4b,0x1a,0x29,0x43,0x21,0x14,0x24,0x9c,0x2e -,0x11,0x25,0xcd,0x9f,0x9f,0x3d,0x4a,0xa4,0xa9,0x9e,0x8f,0x93,0x5d,0xba,0xab,0x18,0x1a,0x1c,0x28,0x2c,0x28,0x20,0x1a,0xd2,0xa4,0xa4,0xe7,0x23,0x27,0x9f,0x97,0xbc -,0xa5,0x8d,0x9e,0x41,0xc5,0x3e,0x23,0x27,0x1f,0x19,0x1c,0x1b,0x2c,0xb8,0xbd,0xde,0x34,0x5d,0xa8,0xbe,0xa9,0xa9,0x3a,0xab,0x92,0xac,0xb9,0xf7,0x43,0xaa,0xb8,0xc2 -,0x15,0x13,0x12,0x15,0xb7,0x9c,0xae,0x2a,0x2b,0xad,0x93,0x9d,0xa6,0x23,0x20,0xa3,0x96,0xb3,0x35,0xac,0x3f,0x21,0x1c,0x37,0xce,0x14,0x0f,0x20,0x51,0xac,0x9b,0x9a -,0xa9,0xcd,0xb0,0xa0,0xa5,0xb5,0x56,0xca,0xe1,0x53,0xa5,0xc6,0x30,0x1e,0x1d,0x27,0x0d,0x16,0x9f,0x98,0x2f,0x47,0xa2,0x95,0x97,0xb6,0xb8,0x33,0xaf,0xbe,0xe6,0xf9 -,0x2f,0xba,0x32,0x3f,0xfd,0x22,0x15,0x17,0x17,0x52,0x9c,0x3d,0xea,0xa3,0xa8,0x52,0x9f,0x8f,0x54,0x21,0x39,0xa9,0x97,0x52,0x1c,0x2e,0x30,0x1f,0x1a,0x2a,0x28,0x23 -,0xad,0xa4,0xac,0x9c,0x99,0x92,0xa2,0xb9,0xb7,0x1d,0x2e,0xa6,0xb2,0x26,0x1c,0xa9,0xa3,0x1d,0x11,0x19,0x1f,0x1e,0x3a,0xaa,0xaa,0xcd,0xae,0x97,0x8e,0x9d,0xb3,0xc7 -,0x14,0x1c,0xde,0x9e,0x9c,0x1c,0x17,0x29,0x2f,0x34,0x6b,0x37,0x16,0x1a,0xbc,0x99,0x9e,0x98,0x9a,0x9a,0xca,0x2b,0x48,0xbd,0x41,0x3c,0x9f,0x1f,0x17,0xb8,0xa2,0x2a -,0x17,0x17,0x4d,0x32,0x19,0xbc,0x8d,0x96,0xcc,0x9c,0x98,0x9d,0xa8,0xac,0x23,0x1f,0x23,0x57,0x51,0x2c,0x4e,0x29,0x1d,0x1d,0xb4,0x33,0x0e,0x1f,0x95,0x92,0xb0,0xc1 -,0xdc,0x94,0x95,0xd5,0x54,0x32,0xea,0x2d,0xdb,0x26,0x29,0xad,0xea,0x17,0x19,0xcb,0x4e,0x3e,0x29,0xb3,0xa1,0xa0,0x9e,0x94,0x99,0xd1,0x49,0x4d,0x27,0x29,0xbf,0xa8 -,0xc3,0x19,0x18,0x28,0x20,0x1e,0xc3,0x49,0x18,0x1e,0x9d,0x9c,0xac,0x97,0x96,0x90,0x9e,0xd7,0x32,0x2a,0x32,0x3b,0xaf,0x24,0x15,0xf3,0xd8,0x1e,0x22,0x6c,0x27,0x2b -,0x36,0x9c,0x9c,0x58,0xad,0x94,0x92,0x37,0xea,0xae,0xc2,0x2f,0x35,0xac,0x3c,0x1c,0x2f,0x2e,0x1f,0x22,0x27,0x37,0x19,0x31,0x98,0x96,0xbb,0xb6,0x9a,0x9f,0x4a,0x2a -,0xd0,0xbe,0x34,0xcd,0xbc,0x1c,0x22,0xcb,0x44,0x1c,0xde,0xb2,0xc5,0x20,0x23,0xa3,0x9d,0x9d,0xaa,0x97,0xb2,0x2b,0xcc,0x9e,0xb2,0x39,0x46,0xb6,0x52,0x1e,0x36,0x37 -,0x1a,0x16,0x47,0xd0,0x2e,0x28,0x9f,0x99,0x54,0xcf,0xac,0x45,0x2c,0xa6,0x9a,0x76,0x22,0x4b,0x97,0xbd,0x25,0xe0,0x2c,0x1c,0x22,0xce,0x3f,0x26,0x29,0x9d,0x9d,0x47 -,0xbb,0xb6,0x67,0x2b,0x9b,0x97,0xb8,0x31,0x33,0x47,0x31,0x62,0xc2,0xde,0x15,0x17,0x40,0xa7,0xe7,0xbe,0x98,0xcd,0x25,0xc6,0x9c,0xbd,0x2f,0xba,0xa5,0x42,0xc8,0xb7 -,0xa2,0x4f,0x24,0x33,0x22,0x1e,0x2b,0xbc,0x27,0x21,0x3d,0x9e,0xb2,0xb8,0xa6,0xea,0x2b,0x2c,0xa0,0xa4,0xde,0xc5,0xe5,0xcf,0x3f,0x3d,0xa9,0xa8,0x2a,0x1c,0xa0,0xae -,0x25,0x30,0xba,0x35,0x1f,0xaa,0x9c,0x2b,0x14,0x38,0xa7,0xa3,0xbf,0xa5,0xa8,0x1e,0x28,0xbc,0x3d,0x2d,0xcc,0x9c,0x54,0x2b,0xa8,0xd4,0x4c,0xc7,0xad,0x45,0x23,0x1e -,0x49,0xa2,0xd3,0x42,0x6d,0xc8,0x58,0xa9,0xae,0x3e,0x2e,0xd3,0xab,0xc1,0xe6,0x4e,0x4d,0x3b,0xc5,0xd6,0xdc,0x21,0x29,0xaa,0xa6,0x44,0x30,0xa3,0xd9,0x1c,0x2c,0xc1 -,0x3f,0x27,0xa8,0x9a,0xbe,0xb6,0xac,0x9f,0xc4,0x39,0x39,0x3a,0x1b,0x18,0xaa,0xab,0x26,0x28,0x46,0xc3,0xb3,0xab,0xb0,0x1d,0x20,0x39,0x44,0xaa,0xb3,0xbd,0x9d,0xc3 -,0xf6,0x96,0x9f,0x1f,0x23,0xb9,0xbe,0xc6,0x4e,0x33,0x1f,0x2f,0xc3,0xc4,0xe7,0x25,0x3e,0xa5,0x9c,0xa7,0xed,0x4c,0x28,0x2a,0xb3,0xa4,0x5c,0x2b,0x42,0x35,0x3f,0xb2 -,0xa9,0xca,0x2a,0x2f,0x2f,0x2d,0x3b,0xb3,0xaa,0xdd,0xbf,0xa9,0x56,0x32,0xb8,0xa1,0xb0,0x1b,0x21,0x4d,0x31,0x65,0xae,0xd4,0x57,0xf1,0x4c,0x52,0x38,0x3c,0xac,0xb3 -,0xd4,0xae,0x33,0x26,0x2f,0xab,0x9b,0xa9,0x37,0x1a,0x3d,0xab,0x97,0x9c,0xc1,0x29,0x16,0x2e,0xa4,0xcc,0x42,0xc1,0x33,0x2e,0xc3,0xab,0xc7,0x6e,0x2d,0x3e,0xd8,0x25 -,0x33,0x4a,0x51,0xbe,0xa6,0xac,0xc3,0xb6,0xd3,0xb9,0x2d,0x26,0xb3,0xcf,0xd3,0x3c,0x2e,0x34,0x62,0xa5,0xbe,0x3f,0x2a,0x3c,0x59,0xe0,0xac,0xc6,0x36,0x23,0x26,0x4d -,0xa7,0x9b,0xa1,0xd5,0x2b,0x69,0x98,0xa1,0x4f,0x2a,0x1f,0x4a,0x31,0x2d,0xa7,0xb3,0x4c,0x40,0x45,0xd9,0xa9,0xac,0x25,0x1c,0x26,0xb9,0xa3,0xaf,0x4a,0x1e,0x4b,0xb2 -,0xb4,0xae,0xac,0x72,0x21,0x23,0x26,0x7c,0x9f,0xb2,0x2b,0x36,0xcc,0xa5,0xad,0x3e,0x57,0xa8,0xc0,0xae,0xc4,0xcf,0x33,0x1d,0x49,0x31,0x57,0x41,0xb0,0xac,0xb4,0xaf -,0xbe,0x2a,0x25,0x2f,0x32,0xe8,0x32,0xd1,0xb1,0xac,0xae,0x77,0x46,0xc7,0xbd,0xbb,0x30,0x1e,0x22,0xd5,0xbf,0x59,0xae,0x41,0x52,0xc1,0xa8,0xa1,0xa6,0xdd,0x2c,0x28 -,0x2b,0xa9,0xbd,0x34,0x2c,0x24,0xcc,0x9e,0xaf,0x3e,0x32,0x60,0xa0,0xa3,0x50,0x45,0x27,0x25,0x2a,0x30,0xd0,0x9f,0xa8,0x49,0xb4,0xa5,0xa2,0x37,0x26,0x2c,0x2c,0x3b -,0x3f,0xd6,0xe9,0x2a,0xe0,0xad,0x58,0x63,0xaf,0x63,0x36,0x46,0x23,0x45,0xc5,0xb4,0xeb,0x2f,0xcc,0xa8,0xa4,0xac,0xab,0x2e,0x28,0xda,0xac,0xaa,0x5e,0x1e,0x1f,0xee -,0xaa,0xa5,0x5a,0xc3,0x37,0xc9,0xa8,0xb1,0x64,0x26,0x33,0x26,0x28,0x29,0xb7,0xa6,0xce,0x2c,0x41,0xae,0x9a,0xaf,0x22,0x28,0xcc,0xa7,0xb7,0x32,0x34,0xbb,0x78,0xb8 -,0x2e,0xee,0xae,0xb2,0x60,0x1e,0x2c,0x37,0x4d,0x37,0x30,0x29,0xa3,0x9c,0xad,0xbd,0x27,0x36,0x41,0xbd,0x9f,0xb8,0xbb,0x35,0x20,0x58,0xbb,0xb1,0xb7,0xf6,0x2e,0xcc -,0xb9,0xbf,0xad,0xb5,0x2e,0x1f,0x49,0xb9,0xb7,0xae,0x53,0x28,0x3d,0xb3,0xb2,0x3c,0x2e,0x32,0xe3,0x55,0xc2,0xbb,0x6b,0xf1,0x2e,0x60,0xb9,0xe4,0x46,0x3f,0x47,0x38 -,0xba,0xb9,0x3e,0x33,0x28,0xb5,0xa2,0x9f,0xaa,0xc0,0x3e,0x22,0x38,0x3f,0x58,0x6d,0xb9,0x3b,0x21,0x2b,0xa5,0x9c,0xac,0x2f,0x17,0xb0,0x9d,0x9f,0xb4,0x26,0x26,0xc3 -,0xec,0xc0,0x9f,0xe4,0x2c,0x22,0x35,0x9d,0xab,0x2c,0x34,0x28,0x4f,0xac,0xb1,0xaf,0x4b,0x21,0xcf,0xa8,0xe6,0x27,0x39,0xaf,0x45,0xae,0x25,0x20,0x4b,0x2e,0xab,0xb3 -,0xbc,0xba,0xae,0xaf,0xaf,0x2a,0x1e,0xb9,0xb3,0x27,0x27,0x28,0xbf,0x96,0x99,0xbf,0x26,0x75,0x37,0xa4,0xc1,0x2c,0x2e,0x20,0x1f,0xa7,0xa2,0xdb,0xbe,0x63,0xbe,0x2e -,0xba,0xce,0xa6,0x5d,0x2d,0x2a,0xac,0xdc,0x1a,0x4c,0xb8,0x5f,0x45,0xa9,0x29,0xbf,0xaa,0xbc,0x35,0x32,0x32,0x4e,0xb3,0xbb,0x26,0x2c,0x9d,0x9c,0xaa,0xb7,0xec,0x21 -,0xb3,0xd0,0x1f,0x37,0x33,0x1c,0xa8,0x99,0xd3,0xcb,0x28,0xe0,0x3b,0xad,0xaf,0x24,0x53,0x22,0x9d,0xa5,0x30,0xde,0x99,0x94,0x1d,0x15,0x0e,0x1f,0xff,0xa5,0x9d,0x1f -,0x22,0x20,0x38,0x8e,0x8a,0xa9,0x0b,0x0b,0xac,0x88,0x86,0xc2,0x12,0x13,0x2f,0x46,0x10,0x21,0x9c,0x91,0x9a,0xae,0x1d,0x18,0x0b,0x41,0x8b,0xb3,0x99,0x16,0x14,0xa6 -,0x17,0xa8,0xab,0xa2,0x8d,0xe1,0x8c,0x19,0x4a,0x0c,0x0c,0x8a,0x27,0xac,0x04,0xa1,0x85,0x9b,0x8c,0x0e,0xa7,0x35,0x1b,0x5d,0x00,0x19,0x04,0x9d,0x85,0x2c,0xaa,0x04 -,0x86,0x92,0xaf,0x8e,0x16,0x83,0x15,0x33,0x1a,0x03,0x08,0x04,0x84,0x9f,0x84,0x96,0x93,0x82,0x0d,0x9a,0x18,0xba,0xb0,0x09,0xaf,0x0c,0x03,0x03,0x90,0x8c,0x87,0x8b -,0x94,0x80,0x07,0x1e,0x0f,0x96,0x8a,0x04,0x11,0x10,0xab,0x0e,0x8e,0x9c,0x98,0x8e,0xa9,0x8b,0x01,0x0b,0x10,0x95,0x86,0x5d,0x2e,0x0f,0x04,0x01,0x8f,0x80,0x84,0xa9 -,0x29,0x8f,0x14,0x19,0x2a,0xe3,0x8d,0x50,0x25,0x0d,0x07,0x02,0x99,0x85,0x9c,0xa5,0x1c,0x80,0x36,0x0c,0x10,0x17,0x89,0xa6,0x93,0x10,0x06,0x01,0xc2,0x80,0x9f,0x9a -,0x0b,0x80,0x90,0x17,0x23,0x0e,0x85,0x20,0x3d,0x0c,0x06,0x06,0x11,0x83,0x98,0x87,0x2d,0x97,0x8d,0x0c,0x6b,0x0d,0x93,0x5a,0xca,0x9d,0x0f,0x08,0x0d,0x85,0xe0,0x9a -,0x41,0x8a,0x80,0x0d,0x0a,0x00,0x89,0x9b,0xa8,0x2b,0x09,0x16,0x07,0x85,0x2a,0x99,0x2b,0x95,0x85,0x0d,0xac,0x0e,0x92,0x29,0x1b,0xa0,0x38,0x0f,0x0e,0x82,0x89,0x88 -,0x41,0xb5,0x9e,0x02,0x09,0x05,0x99,0x94,0x95,0x92,0xba,0x12,0x0c,0x8a,0x94,0x94,0x3a,0x8b,0x80,0x37,0x3f,0x16,0x9a,0x9e,0xc5,0x34,0x11,0x04,0x0d,0x88,0xbd,0xa9 -,0x0c,0x2e,0x26,0x00,0x06,0x00,0xc3,0x3a,0x1b,0x05,0x03,0x00,0x0b,0x8d,0x36,0x9f,0x12,0xb5,0x9e,0x07,0x0c,0x0a,0x8a,0x87,0x83,0x8e,0x17,0x06,0x1e,0x80,0x85,0x86 -,0x4d,0x84,0x86,0xad,0x9f,0x1c,0x86,0x87,0x88,0xbd,0x0f,0x18,0x97,0x80,0x8b,0x8a,0x1f,0x8e,0xaa,0x0f,0x23,0xaf,0x80,0x9b,0xa9,0x1c,0x0e,0x08,0xa2,0x8e,0x9b,0xa4 -,0x15,0x8d,0x0c,0x07,0x03,0x17,0x96,0x1f,0x18,0x03,0x04,0x00,0x91,0x8a,0x8f,0x70,0x11,0xaa,0x00,0x0f,0x0a,0xac,0x96,0x10,0x11,0x0c,0x0c,0x08,0x89,0x90,0x94,0x0e -,0x1c,0x8e,0x0c,0x0f,0x0b,0x8e,0x8f,0xa2,0x2c,0x09,0x00,0x13,0x80,0x8a,0x8a,0x1c,0x8d,0x95,0x0c,0x2a,0xb0,0x80,0x95,0x92,0xb6,0xad,0x19,0xaf,0x86,0x98,0x92,0x19 -,0x86,0xa3,0xc7,0x30,0x29,0x90,0xb4,0x9e,0x14,0x0d,0x00,0x9b,0x84,0x8b,0x33,0x02,0xa7,0x06,0x08,0x00,0xb3,0x8c,0x95,0x8a,0x0e,0x0b,0x05,0x88,0x93,0x93,0x5f,0xa4 -,0x80,0x98,0x89,0x53,0x8b,0x88,0x84,0x8c,0xbe,0x2f,0xcd,0x80,0x8f,0x88,0x1a,0x9f,0xa7,0x0e,0x0a,0x02,0xa3,0x2e,0xd1,0x09,0x03,0x00,0x0d,0x3b,0x09,0x22,0x00,0x13 -,0x05,0x00,0x03,0x03,0xb6,0x1c,0xab,0x0c,0x07,0x00,0x24,0xd9,0x11,0x9c,0x26,0x87,0xb7,0x3a,0x10,0x3b,0x83,0x86,0x89,0x19,0x25,0x27,0x86,0x84,0x85,0x91,0x4e,0x88 -,0xc2,0xcd,0x0f,0x94,0x80,0x84,0x82,0xa3,0xb0,0x09,0x8e,0x94,0x8b,0x89,0xb0,0x8d,0x1e,0xa3,0x13,0x99,0x85,0x8b,0x8c,0x08,0x09,0x00,0xa3,0x89,0x85,0x9b,0x05,0x1e -,0x08,0x2c,0x07,0x1f,0xa0,0x1d,0xbc,0x13,0x1b,0x00,0x3a,0x99,0xa3,0x9c,0x09,0x2a,0x05,0x0b,0x14,0x52,0x88,0x95,0xa3,0x00,0x05,0x00,0x1f,0x8b,0xa4,0x99,0x0e,0xb8 -,0x35,0x0e,0x0d,0x15,0x8a,0x93,0x8a,0x2f,0x1a,0x13,0x1c,0x8c,0xd3,0x8e,0x43,0xa5,0x8d,0xaf,0xc3,0x0f,0x91,0x84,0x80,0x9a,0x08,0x0b,0x0d,0x88,0x90,0x8f,0xc9,0x08 -,0xc6,0x1b,0x1d,0x0e,0xd0,0x88,0x8c,0x97,0x09,0x07,0x00,0x20,0x8a,0x8f,0x87,0x21,0x9b,0xb4,0x2d,0x1e,0x1f,0x83,0x86,0x80,0x96,0xc6,0x22,0x4c,0x82,0x84,0x80,0xa0 -,0x97,0x8b,0x90,0x91,0x3f,0xab,0x9a,0x8b,0xbb,0x0d,0x05,0x00,0x0e,0x1c,0xc6,0x2c,0x08,0x0b,0x02,0x01,0x01,0x07,0x18,0x1d,0x0f,0x01,0x03,0x00,0x02,0x1f,0x68,0x9e -,0x17,0x0f,0x22,0x1c,0x14,0x0a,0xb7,0x88,0x8b,0x92,0xa9,0x24,0x0b,0xba,0x82,0x83,0x89,0x9a,0x8c,0xaa,0xcb,0xa7,0x92,0x80,0x8b,0x8a,0x9e,0xb9,0x20,0x30,0x84,0x91 -,0x88,0x93,0x89,0x8d,0x19,0x1a,0x14,0x92,0x83,0x83,0x89,0x19,0x09,0x0a,0x8e,0x8c,0xa2,0x3d,0x0a,0x23,0x0f,0x19,0x08,0x15,0x8d,0x8c,0xac,0x05,0x03,0x00,0x14,0x98 -,0xae,0x97,0x25,0x2b,0x2d,0x09,0x07,0x00,0x2e,0x8f,0x90,0x3e,0x04,0x04,0x03,0x95,0x8c,0xa8,0x14,0x08,0x45,0x1e,0x38,0x13,0x5f,0x9a,0x9c,0x98,0x15,0x0a,0x03,0x2b -,0x8a,0x8c,0x8a,0xab,0x9c,0x36,0x25,0xb5,0x5d,0x92,0x8b,0x85,0xab,0x12,0x13,0x22,0x88,0x89,0x85,0xb4,0x10,0x40,0x22,0x3a,0x0b,0x49,0x89,0x87,0x9b,0x0a,0x08,0x00 -,0x2b,0x9a,0x88,0x96,0x20,0xac,0x10,0x3b,0x1b,0x9a,0x81,0x87,0x9a,0x15,0x45,0xbb,0x83,0x83,0x81,0x8e,0x4c,0x86,0xa8,0x3d,0x3a,0x97,0x80,0x86,0x80,0x5f,0x09,0x00 -,0x19,0x9e,0xbf,0xa6,0x05,0x12,0x03,0x05,0x06,0x03,0x28,0x23,0x1d,0x00,0x04,0x00,0x1d,0x93,0x3e,0x43,0x07,0x16,0x09,0x06,0x05,0x07,0xb6,0x8d,0x81,0x32,0x06,0x00 -,0xf9,0x87,0x88,0x83,0xb9,0xaf,0x28,0x8e,0x8b,0x8b,0x80,0x84,0x86,0x17,0x0e,0x11,0x91,0x84,0x89,0x85,0xa6,0x89,0x95,0x9a,0x4f,0x9e,0x80,0x8b,0x94,0x18,0x20,0x38 -,0x8a,0x85,0x88,0x44,0x0d,0xd5,0x25,0x1e,0x07,0xd1,0x8c,0x8c,0x30,0x06,0x03,0x05,0x8f,0x8f,0xeb,0x05,0x09,0x35,0x4c,0xad,0x11,0x39,0x68,0x1b,0x0c,0x0c,0x00,0x0a -,0x9e,0x8e,0x8f,0x0b,0x2b,0x16,0x12,0x07,0x0b,0x34,0x2f,0xba,0x0c,0x0f,0x01,0x92,0x87,0x8e,0x22,0x04,0xaa,0x1f,0xce,0x28,0x8e,0x8d,0x89,0x96,0x16,0x08,0x16,0x83 -,0x86,0x88,0x13,0x9b,0x86,0x8f,0xa3,0x66,0x8d,0x92,0x8b,0x1a,0x09,0x00,0xab,0x82,0x84,0x9c,0x05,0x15,0x0e,0x1f,0x1c,0xb3,0xa1,0xb7,0xab,0x23,0x0d,0x44,0x80,0x8b -,0x96,0x0d,0xd9,0x97,0xa1,0x93,0x95,0x81,0x88,0x81,0x95,0x1a,0x13,0x8b,0x83,0x86,0xc5,0x35,0x89,0x9d,0x98,0x2a,0x21,0x28,0xb3,0x0e,0x04,0x00,0x08,0x93,0xa0,0x2a -,0x01,0x07,0x02,0x08,0x09,0x0a,0x08,0x0e,0x17,0x07,0x03,0x03,0x97,0xb6,0x1c,0x01,0x0d,0x26,0x33,0x37,0x1b,0x91,0x8a,0x84,0xd0,0x08,0x0a,0x8a,0x83,0x88,0x1d,0x20 -,0x84,0x87,0x87,0xa8,0x8f,0x87,0x80,0x95,0x0d,0x03,0x8c,0x81,0x80,0xae,0x0d,0x95,0xb4,0x99,0x29,0x9d,0x94,0x88,0x9d,0x1a,0x0e,0xa5,0x82,0x85,0x98,0x08,0xac,0x26 -,0x57,0x0e,0x12,0x9d,0x88,0x99,0x07,0x00,0x03,0x91,0x8c,0xa7,0x03,0x0e,0x5c,0x9c,0x58,0x0c,0x1a,0xc2,0x9e,0x13,0x00,0x00,0xaf,0x84,0x8e,0x09,0x04,0x12,0xb2,0x1a -,0x04,0x13,0xe1,0x9e,0x27,0x08,0x11,0x97,0x91,0x8e,0x0b,0x0e,0x56,0xa3,0x59,0x16,0xc6,0x8b,0x80,0x97,0x11,0x08,0x98,0x85,0x80,0xde,0x1a,0x39,0x8a,0x85,0x97,0xab -,0xa2,0x8d,0xa7,0x15,0x07,0x9f,0x98,0x85,0xb4,0x1e,0x17,0xbe,0x9e,0x15,0x17,0x0f,0xc7,0xdb,0x17,0x12,0x8e,0x88,0x84,0xad,0xb8,0x9f,0x8f,0x8d,0xdc,0xaa,0x8c,0x80 -,0x8d,0x3f,0x24,0x85,0x85,0x80,0x3b,0x0e,0x2c,0x9b,0x87,0xbb,0x47,0x24,0xa1,0x43,0x0e,0x00,0x17,0xab,0xa0,0x0d,0x01,0x02,0x11,0x35,0x00,0x03,0x01,0x0c,0x09,0x04 -,0x00,0x17,0xa6,0x97,0x16,0x0a,0x0f,0x18,0xb8,0x0b,0x0d,0x24,0x8a,0x90,0x17,0x03,0xaf,0x87,0x80,0xb7,0x13,0xa3,0x90,0x83,0x8b,0x8b,0x91,0x82,0x8b,0x61,0x1b,0x91 -,0x8b,0x85,0xa4,0x38,0x99,0xa2,0x8b,0xa8,0x9b,0x97,0x8e,0xb8,0x13,0x0e,0x97,0x86,0x80,0x9a,0x1b,0x38,0x2a,0x93,0x3a,0x1b,0x26,0x8d,0x9b,0x29,0x00,0x1f,0x95,0x86 -,0xa6,0x01,0x04,0x04,0xa6,0x0f,0x12,0x0a,0x34,0xd0,0x0d,0x06,0x0b,0x56,0x8e,0xa0,0x0d,0x28,0x20,0x98,0x9a,0x48,0x19,0x99,0x9c,0x09,0x04,0x08,0x94,0x80,0x8e,0x2c -,0x3b,0x1e,0x8d,0x9b,0x0e,0x01,0x0e,0xa0,0x1d,0x02,0x02,0xc4,0x88,0x8b,0x0e,0x00,0x0b,0x9f,0x8e,0x98,0xb8,0xbb,0x8d,0x8c,0x59,0xd2,0x8e,0x86,0x8a,0x32,0xa0,0xb5 -,0x87,0x8e,0x96,0x8d,0x8c,0x82,0x8d,0x36,0x18,0x8b,0x82,0x80,0xab,0xdc,0x1e,0xaa,0xa8,0x14,0x08,0x04,0x0a,0x0a,0x05,0x00,0x08,0x11,0x99,0x0c,0x05,0x06,0x05,0x0f -,0x17,0x17,0x0e,0x35,0xac,0x5a,0x29,0xa3,0x9f,0x88,0xbc,0x9f,0x98,0x8f,0x80,0x8e,0x87,0x89,0x81,0x85,0x5e,0x1a,0xa0,0x8a,0x80,0x93,0xa5,0x2a,0x31,0x8c,0xa7,0x24 -,0x0a,0x18,0x25,0x15,0x04,0x0c,0x12,0xc7,0x53,0x0b,0x0c,0x00,0x0c,0x0f,0x0a,0x06,0x18,0xcf,0x14,0x04,0x2d,0x99,0x82,0x97,0x06,0x19,0x2b,0x88,0x8c,0x1b,0x17,0xac -,0x88,0x97,0x0c,0x0e,0x90,0x81,0x80,0x8f,0xa6,0xb1,0x86,0x80,0x87,0x99,0x2f,0xa0,0x9a,0x10,0x05,0x1b,0xc5,0x8c,0x2a,0x09,0x07,0x06,0x35,0x28,0x09,0x19,0x26,0x5f -,0x0f,0x03,0x1b,0xc8,0x87,0xa5,0x21,0x0f,0x6e,0x88,0x99,0xbf,0x2e,0x87,0x80,0x87,0xa6,0x34,0x8a,0x80,0x81,0x91,0x92,0xbe,0x8c,0x84,0x97,0x21,0x15,0x6c,0xaa,0x2c -,0x10,0x1f,0x19,0x9b,0xaf,0x4e,0x0a,0x09,0x2d,0x18,0x17,0x0b,0x28,0xeb,0x11,0x01,0x0a,0xb6,0xa1,0x18,0x04,0x05,0x0e,0x9c,0xbd,0x0d,0x15,0x23,0xaf,0x10,0x00,0x0a -,0x2b,0x98,0xc0,0x10,0x0f,0x07,0x36,0x97,0x9b,0x1f,0x30,0x90,0x96,0x98,0x9e,0x8e,0x82,0x81,0x88,0x8c,0x1e,0x3f,0x91,0x97,0x9d,0xa2,0x9c,0xa3,0x1b,0x0a,0x99,0xa2 -,0x8c,0xa7,0x2e,0xb9,0x17,0x8f,0x92,0xab,0xac,0x93,0x94,0x3f,0x0e,0x1d,0x99,0x8c,0x85,0x9f,0x9f,0x2d,0xae,0x89,0x9d,0xa6,0x13,0xa0,0xa8,0x0e,0x0c,0x14,0x20,0x98 -,0x91,0x18,0x0e,0x02,0x1d,0x29,0x14,0x20,0x2e,0x90,0x8b,0x25,0x28,0x96,0x86,0x82,0x98,0x98,0x1d,0x11,0x96,0x12,0x0a,0x1d,0x10,0x19,0x00,0x01,0x00,0x08,0xef,0x1d -,0x05,0x06,0x03,0x15,0xa3,0x0d,0x13,0x49,0x9c,0x93,0x0d,0x1a,0x8f,0x86,0x80,0x8c,0x98,0xb6,0xc1,0x8a,0x88,0xb3,0x8f,0x87,0x84,0x9b,0x19,0xb8,0x8d,0x84,0x83,0x8f -,0x2a,0xbf,0x4d,0x94,0xb7,0x5d,0x4f,0xea,0x2e,0x0a,0x0f,0x1b,0x93,0x9b,0xaf,0x19,0x06,0x0f,0x24,0x12,0x0d,0x16,0x1e,0x13,0x08,0x04,0x0e,0x30,0xb4,0xa9,0xb7,0x16 -,0x27,0x29,0x48,0x9d,0x8e,0x86,0x88,0x8c,0x29,0x8f,0x83,0x81,0x81,0x81,0x8f,0xa5,0xa5,0x32,0x9c,0xe3,0x33,0x18,0x0c,0x06,0x00,0x08,0x0b,0x22,0x19,0x08,0x07,0x04 -,0x06,0x0a,0x19,0x0b,0x11,0x08,0x09,0x07,0x04,0x13,0x58,0x9d,0xa8,0x96,0x21,0x1f,0xad,0x86,0x89,0x8b,0x95,0xa9,0x93,0xa0,0x8e,0x8c,0x88,0x84,0x88,0x8e,0x9e,0xaa -,0x8c,0x87,0x8a,0x97,0x97,0x9e,0xcc,0x29,0xae,0x94,0x97,0xa3,0xcb,0x25,0x13,0x2c,0xd1,0x56,0x1d,0x1c,0x0b,0x14,0x07,0x08,0x14,0x10,0x21,0x11,0x17,0x0f,0x0e,0x36 -,0xa7,0x9a,0x8f,0x9c,0xa1,0x88,0x8f,0x99,0x8a,0x86,0x8a,0x8d,0x99,0xb6,0xd0,0x2f,0x27,0x34,0x13,0x0d,0x0d,0x0c,0x0c,0x0d,0x14,0x21,0x27,0x0d,0x1b,0x1c,0x1f,0x26 -,0x19,0x0d,0x19,0x13,0x13,0x1e,0x0d,0x15,0x1f,0x2b,0x18,0x20,0xcd,0xae,0xfc,0x2a,0x1b,0xb6,0xcc,0xbb,0xa6,0xc9,0xa8,0xbe,0xa4,0x67,0x9f,0x8f,0x8f,0x8c,0xa8,0xaf -,0x9e,0x8b,0x8b,0x98,0x96,0x91,0x8b,0x8f,0x2b,0xac,0x8c,0x99,0x94,0xb3,0x3f,0x16,0x24,0x2d,0x2f,0x2d,0x17,0x22,0x14,0x1d,0x1d,0x27,0xbc,0x98,0x93,0x9d,0x88,0x95 -,0xa0,0x8c,0x8a,0x8c,0x8b,0x93,0x96,0x9f,0x61,0x27,0x10,0x2a,0x13,0x10,0x0d,0x08,0x02,0x06,0x03,0x09,0x07,0x0b,0x11,0x08,0x10,0x16,0x24,0x16,0x42,0x21,0x3d,0x4a -,0xbb,0x34,0x2b,0xac,0xab,0x93,0x96,0xa7,0x9c,0x8d,0x97,0xa0,0xbd,0x9d,0x92,0x91,0xa2,0x9d,0xa3,0x1e,0xf9,0xa7,0xa3,0xab,0x98,0x41,0x1a,0xad,0x39,0x21,0x36,0xaa -,0xa2,0xbe,0x2c,0x12,0x20,0x5e,0x62,0x9d,0xca,0xbd,0x3b,0x1c,0x36,0x1e,0x1a,0x29,0xae,0xac,0x27,0x3f,0xd3,0xad,0x90,0x96,0x8c,0x84,0x8c,0x8a,0x89,0x87,0x84,0x83 -,0x88,0x89,0x8a,0x91,0xab,0x19,0x2a,0x0a,0x13,0x0c,0x06,0x0c,0x04,0x08,0x07,0x07,0x03,0x0e,0x0a,0x10,0x0b,0x08,0x0e,0x09,0x0e,0x1e,0x2c,0x15,0x1e,0x1a,0x1f,0x2b -,0xad,0xa9,0xa6,0x92,0xb6,0x9b,0xa7,0xa3,0xaa,0xa5,0x9a,0x91,0x94,0x91,0x93,0x9b,0x8d,0x97,0x96,0x9b,0x96,0x98,0x9a,0xbf,0xaa,0x93,0x9f,0x9a,0x94,0xb8,0xb9,0x54 -,0x36,0xaa,0x3f,0x25,0x29,0x28,0x26,0x27,0x12,0x17,0x18,0x1c,0x15,0x0b,0x1b,0x18,0xbf,0xbc,0x55,0x6e,0xbf,0x99,0x9a,0x8a,0x89,0x8c,0x87,0x88,0x8d,0x8b,0x8a,0x8b -,0x9f,0xc2,0xbb,0x25,0x25,0x1c,0x08,0x0d,0x0d,0x16,0x19,0x0d,0x07,0x07,0x0a,0x0a,0x0e,0x12,0x2f,0x19,0x1c,0x29,0x0e,0x0d,0x1a,0x1f,0x31,0x22,0x14,0x19,0x19,0x18 -,0x24,0xb0,0x9b,0xb5,0x94,0xbc,0x29,0xa3,0xae,0x8e,0x8f,0x8c,0x98,0x9e,0x9a,0x9f,0x98,0x9c,0x92,0x92,0x90,0x8f,0xae,0xaf,0x8d,0x95,0xad,0xa9,0x3e,0x25,0x63,0x5f -,0x9f,0x2d,0x1a,0x28,0x1f,0x20,0x11,0x15,0x16,0x0f,0x10,0x10,0x18,0xab,0xab,0x99,0x8a,0x8e,0x8c,0x8f,0x96,0x89,0x8a,0x88,0x83,0x86,0x8b,0x9f,0xe3,0xf3,0x4a,0x35 -,0x20,0x0a,0x08,0x06,0x0b,0x08,0x06,0x07,0x06,0x0e,0x09,0x0e,0x0e,0x0c,0x12,0x1f,0x2e,0x5c,0x35,0x28,0x3e,0x2a,0x2d,0x47,0xaf,0xdb,0xa5,0x94,0x8b,0x90,0x97,0xa8 -,0x9f,0x93,0xb8,0xa9,0xab,0xa3,0xa7,0xc3,0xa5,0x9b,0xb6,0xb6,0xca,0xa0,0x9b,0x9b,0xc7,0x3e,0x27,0x37,0xa2,0x9f,0x9e,0xd2,0xad,0xbb,0x38,0x18,0x1c,0xb3,0x9e,0xaa -,0x31,0x12,0x11,0x14,0x25,0x20,0x25,0x37,0x5a,0xa7,0xa8,0x9c,0x8c,0x8e,0x96,0x93,0x8c,0x86,0x86,0x88,0x8c,0x89,0x93,0x94,0xc3,0x36,0x1d,0x11,0x14,0x07,0x05,0x03 -,0x06,0x0b,0x16,0x17,0x10,0x0b,0x0b,0x0a,0x0a,0x08,0x0e,0x1b,0x25,0x28,0x1f,0x17,0x1d,0x2f,0xb4,0xa5,0xb3,0x32,0x32,0xad,0xad,0x94,0xa1,0xa8,0x78,0x5f,0xa0,0x98 -,0x9b,0xac,0xa1,0x9b,0x98,0x8f,0x8e,0x92,0x97,0xc9,0xab,0x9d,0x9e,0xac,0x9e,0x93,0x8f,0xa4,0x2f,0x2f,0x3b,0xbf,0x3c,0xc0,0x37,0x2a,0x26,0x1e,0x24,0x1f,0x23,0x1a -,0x13,0x0b,0x0d,0x0f,0x1b,0x49,0xae,0x93,0x8e,0x8c,0x8d,0x88,0x85,0x85,0x88,0x92,0x90,0x8a,0x8d,0x95,0x5f,0x18,0x17,0x12,0x19,0x17,0x0e,0x0d,0x0c,0x0c,0x0f,0x0e -,0x0e,0x08,0x07,0x0c,0x16,0x18,0x0d,0x0e,0x1c,0x29,0x3d,0x68,0xba,0xb6,0x27,0x26,0x2a,0x25,0x2b,0xb5,0x93,0x91,0x9f,0xac,0x99,0x97,0x9d,0x9e,0xae,0xaf,0x9b,0x9b -,0x9e,0x9c,0xad,0xaf,0xa4,0x92,0x8e,0x99,0x4d,0x24,0x2f,0xac,0x9a,0x9a,0x99,0xa3,0xae,0x20,0x33,0x24,0x1f,0x35,0x35,0xcf,0x2f,0x14,0x08,0x09,0x0c,0x1e,0x41,0x5e -,0x58,0xb4,0xbf,0xb6,0x98,0x89,0x86,0x87,0x85,0x86,0x94,0xa8,0x95,0x92,0x8e,0x91,0x9d,0xa8,0x38,0x0e,0x0b,0x08,0x04,0x07,0x06,0x0b,0x0e,0x08,0x05,0x06,0x0d,0x28 -,0xb2,0x56,0x0e,0x08,0x0b,0x19,0x1e,0x25,0x2d,0x3d,0xb5,0xa8,0x5b,0x1d,0x20,0xbc,0x95,0x8e,0x8d,0x9a,0xac,0xc2,0xa3,0x93,0x9b,0xae,0xb7,0x9b,0x9b,0xad,0xca,0xb7 -,0xa5,0x96,0x8d,0x8e,0x9c,0xd4,0x30,0xbd,0x9c,0xa8,0x9c,0x99,0x9f,0xab,0x39,0x18,0x0d,0x16,0xc4,0xa0,0xca,0x1c,0x0f,0x10,0x27,0x20,0x1d,0x2a,0x33,0xcb,0xab,0xa5 -,0xc7,0xa8,0x8c,0x82,0x81,0x82,0x8b,0x8e,0x8f,0x94,0xa1,0x2f,0x3b,0x6e,0x24,0x0f,0x08,0x04,0x07,0x38,0xa3,0x00,0x16,0x8e,0x0d,0x12,0x11,0x03,0x04,0x03,0x09,0x0a -,0x19,0x00,0x07,0x0b,0x01,0x0f,0x04,0x09,0x05,0x03,0x06,0x05,0x03,0x03,0x15,0x77,0x4c,0x1a,0x2d,0x9b,0x8f,0x88,0x87,0x95,0x90,0x81,0x80,0x8a,0x9d,0x8e,0x80,0x80 -,0x80,0x82,0x85,0x82,0x80,0x81,0x81,0x8a,0x87,0x83,0x80,0x8a,0x63,0x27,0x2c,0x8d,0x80,0x89,0x27,0x2b,0x8b,0x90,0x1e,0x0e,0x09,0x19,0xa7,0x19,0x03,0x00,0x02,0x00 -,0x0f,0x13,0x05,0x03,0x0e,0x21,0x08,0x00,0x00,0x02,0x08,0x0c,0x02,0x00,0x00,0x01,0x00,0x0e,0x29,0x04,0x03,0x2f,0x2b,0x00,0x06,0x0a,0x10,0xb5,0xa8,0x06,0x0b,0x7b -,0x0f,0xb9,0x80,0x89,0xa5,0x84,0x80,0x89,0x8d,0x86,0x83,0x84,0x80,0x87,0x92,0x80,0x89,0x9e,0x82,0x80,0x88,0x84,0x80,0x80,0x85,0x83,0x8c,0x89,0x80,0x83,0x9d,0x89 -,0x84,0x15,0x96,0x80,0x87,0x92,0x83,0x84,0x8b,0x88,0x19,0x72,0x81,0x8a,0x22,0xb6,0xf2,0x09,0x00,0x2a,0x85,0x2c,0x06,0x09,0x1b,0x0d,0x01,0x00,0x0b,0x0e,0x07,0x01 -,0x03,0x02,0x02,0x00,0x1a,0xa2,0x00,0x03,0x05,0x07,0x02,0x01,0x00,0x16,0x12,0x01,0x03,0x04,0x04,0x01,0x00,0xc3,0xae,0x00,0x06,0x09,0x0f,0x03,0x00,0x0c,0xb4,0x0d -,0x0a,0x0d,0x1b,0x1d,0x00,0x0d,0x80,0x98,0x07,0x8f,0x8a,0x8b,0xc3,0xcd,0x86,0x80,0x90,0x87,0x83,0x80,0x9c,0x11,0x93,0x80,0x95,0xa0,0x80,0x80,0x83,0xad,0x99,0x80 -,0x85,0x8e,0x82,0x82,0x80,0xaa,0x2b,0x86,0x80,0xa8,0x8c,0x80,0x81,0xa4,0x12,0x9c,0x80,0xb2,0x45,0x88,0x98,0x2b,0x03,0x02,0x90,0x88,0x00,0x45,0xb1,0x3d,0x07,0x01 -,0x44,0x89,0x08,0x29,0x93,0x99,0x2e,0x02,0x16,0x82,0x8d,0x0c,0x85,0x8f,0x8a,0x17,0x27,0x85,0x88,0x17,0x86,0x88,0x8b,0x30,0x0a,0x18,0x81,0xa7,0x0b,0x8d,0x53,0xc4 -,0x01,0x04,0x2f,0x25,0x00,0x27,0x06,0x0d,0x01,0x00,0x00,0xd2,0x0e,0x00,0x10,0x00,0x09,0x00,0x01,0x0a,0x09,0x00,0x18,0x04,0x09,0x00,0x02,0x00,0xc8,0x09,0x04,0x12 -,0x05,0x08,0x00,0x00,0x0e,0x0a,0x00,0x11,0x04,0x0a,0x00,0x03,0x00,0x96,0x14,0x0e,0xc0,0x1a,0x27,0x01,0x14,0x8a,0xa6,0x2d,0x80,0x86,0x84,0x9e,0xa2,0x8d,0x80,0x87 -,0x87,0x80,0x81,0x82,0x8a,0x83,0x80,0x86,0x88,0x80,0x82,0x80,0x87,0x8e,0x88,0x80,0x86,0x86,0x80,0x81,0x83,0x8c,0x89,0x80,0x89,0x8d,0x80,0x81,0x82,0x9f,0xab,0x98 -,0x80,0x8a,0x92,0x83,0x83,0x8a,0x51,0x90,0x80,0x8c,0x8e,0x80,0x83,0x88,0x2b,0x23,0xb3,0x80,0x8d,0xab,0x88,0xa3,0x36,0x05,0x0b,0xdd,0x09,0x03,0x19,0x0b,0x07,0x00 -,0x02,0x00,0x09,0x0c,0x00,0x08,0x00,0x01,0x00,0x01,0x01,0x01,0x00,0x07,0x01,0x02,0x00,0x02,0x00,0x0a,0x1e,0x02,0x1e,0x0a,0x05,0x02,0x02,0x2a,0x10,0x0f,0x9b,0xad -,0xbc,0x17,0x1e,0x18,0x9c,0x86,0xca,0x85,0x8c,0x8e,0x4c,0x66,0x88,0x97,0xae,0x82,0x85,0x8d,0xb1,0x3c,0x1f,0xa2,0x80,0x46,0x86,0x8b,0x8f,0xbf,0x27,0x8d,0x8d,0x92 -,0x83,0x81,0x91,0xb2,0x3b,0x22,0xed,0x80,0xb1,0x8b,0x8d,0x97,0x4f,0x13,0xa1,0xad,0x22,0xbd,0xa6,0x1f,0x12,0x08,0x07,0x04,0x88,0x1b,0x24,0xa8,0x19,0x13,0x00,0x17 -,0xef,0x1d,0x4b,0x99,0x28,0x28,0x0e,0x0e,0x07,0x87,0x9e,0x57,0x8b,0xb5,0x44,0x05,0x25,0xa1,0x1d,0x29,0x8d,0xc5,0x4d,0x18,0x17,0x03,0x9d,0x8d,0x24,0x8d,0x36,0x4f -,0x0e,0x18,0xac,0x2c,0xc9,0x85,0x8c,0x9b,0x2d,0xd7,0x0e,0xb9,0x80,0xd5,0x88,0x8c,0x87,0xa2,0xa8,0x89,0x87,0x8a,0x82,0x80,0x87,0x8c,0x8b,0x9b,0xa5,0x80,0x91,0x89 -,0x88,0x90,0x3f,0x23,0x9f,0x94,0x1e,0xb7,0x9b,0x0f,0x11,0x02,0x06,0x00,0xdb,0x1f,0x06,0x1f,0x07,0x08,0x00,0x04,0x09,0x04,0x07,0x21,0x09,0x07,0x01,0x05,0x00,0x1c -,0x93,0x09,0xb6,0x22,0x1d,0x0c,0x0e,0x9b,0xa9,0x9a,0x87,0x88,0x98,0x9f,0xa7,0x3a,0xac,0x80,0x93,0x8b,0x84,0x8c,0xa8,0x49,0x90,0x91,0x9c,0x8e,0x83,0x94,0x9c,0xd8 -,0x1e,0x08,0x8a,0x8f,0x1d,0x90,0xc1,0x37,0x0b,0x28,0xa6,0x70,0xdf,0x8d,0x93,0x2d,0x12,0x0c,0x02,0x19,0x84,0x23,0xb7,0xba,0x1e,0x0b,0x02,0x2b,0x1a,0x0e,0xf2,0x9e -,0x16,0x07,0x00,0x06,0x00,0x9d,0xd8,0x0a,0x4e,0x0f,0x0f,0x03,0x1a,0x4c,0x33,0xa7,0x8c,0xa9,0x25,0x10,0x21,0x15,0xae,0x80,0xaf,0x8d,0x8f,0xaf,0x33,0x16,0x9c,0x97 -,0x9c,0x8c,0x8c,0xde,0x1d,0x3a,0x1e,0x10,0x86,0x8d,0x15,0x97,0x32,0x2d,0x09,0x1a,0x8c,0xab,0x9d,0x99,0x3c,0x0f,0x13,0x13,0x0e,0x4e,0x80,0x34,0xb1,0x9c,0xb0,0x41 -,0x10,0x88,0x88,0x8d,0x89,0x85,0x90,0xa1,0xca,0x9c,0x3e,0x89,0x87,0x3e,0x8b,0x94,0x9d,0x13,0xd0,0x93,0x3b,0x3a,0xce,0x1a,0x06,0x03,0x05,0x05,0x03,0x95,0x16,0x04 -,0x16,0x00,0x06,0x00,0x0c,0x0c,0x0a,0x17,0x1c,0x05,0x03,0x0a,0x11,0x04,0x1d,0x89,0x0b,0xb7,0xb3,0xae,0x27,0x41,0x87,0x95,0x8f,0x88,0x8b,0xcf,0x8d,0x87,0x8f,0xa2 -,0x82,0x87,0x95,0x85,0x8c,0x95,0x31,0x8e,0x86,0x8f,0x89,0x8b,0xb2,0xaa,0xab,0xcd,0x15,0x1d,0x80,0x34,0xae,0x8d,0xa5,0x20,0x16,0x90,0xad,0xaa,0xe3,0xd5,0x3a,0x49 -,0x39,0x23,0x07,0x98,0x8e,0x09,0xa3,0x27,0x0d,0x02,0x12,0x57,0x20,0x13,0x13,0x15,0x09,0x0a,0x08,0x06,0x00,0x97,0x2a,0x15,0x99,0x16,0x0c,0x05,0xdd,0xb4,0x18,0x2c -,0x9e,0xa7,0x66,0xa2,0xa4,0x09,0x33,0x80,0x3e,0x97,0x90,0x2d,0x10,0x2b,0x8c,0xa4,0x9f,0x8c,0x92,0xe6,0xb1,0xb5,0x14,0x06,0x8a,0x86,0xa8,0x87,0xaf,0x1a,0x0f,0xa9 -,0x96,0xb1,0xa0,0x97,0x9b,0xa5,0xa8,0x26,0x03,0x1b,0x80,0xa0,0x9e,0x8e,0xb0,0x2d,0xb4,0x83,0x89,0x8e,0x89,0x82,0x8e,0x96,0xa8,0x1a,0x1d,0x8b,0x80,0xa1,0x8d,0xa2 -,0x12,0x08,0x18,0x5b,0x0c,0x16,0x5d,0x1c,0x09,0x01,0x01,0x00,0x01,0x95,0x19,0x00,0x0f,0x00,0x04,0x03,0x15,0x0c,0x09,0x24,0x5c,0x0d,0x07,0x0d,0x08,0x08,0x96,0x81 -,0x26,0x9b,0xaa,0x23,0x23,0xa8,0x8d,0x9b,0x8b,0x82,0x86,0x9f,0x9b,0x70,0x35,0x9b,0x80,0x98,0xaa,0x89,0x99,0x93,0xa0,0x86,0x91,0x90,0x88,0x89,0xaf,0x3c,0x46,0x1c -,0x3b,0x85,0x88,0x17,0x9a,0xad,0x36,0x12,0x36,0xac,0x4d,0x95,0x8c,0xb6,0x1d,0x10,0x07,0x0a,0xf9,0x82,0x0d,0x1a,0x4c,0x11,0x0c,0x0b,0x20,0x0f,0x1b,0xce,0x18,0x07 -,0x06,0x00,0x09,0x14,0x84,0x25,0x09,0x63,0x0b,0x0b,0x08,0x1d,0x22,0x38,0x93,0x8f,0x40,0x2a,0x14,0x1a,0x30,0x83,0x8f,0x18,0x8a,0x9a,0xa9,0xdf,0xae,0xad,0xb3,0x8b -,0x8a,0x2a,0x17,0x14,0x1b,0x36,0x8a,0x88,0x0b,0x9f,0xa9,0x25,0x14,0x1e,0x2d,0x57,0x8a,0x8a,0xca,0x25,0x32,0x2c,0x22,0x9c,0x81,0x1c,0x8e,0x84,0x8f,0x95,0x92,0x90 -,0x96,0x83,0x83,0x93,0xc1,0xa4,0xad,0xb8,0x94,0x80,0x22,0xb3,0x93,0x27,0x10,0x09,0x0d,0x06,0x3d,0x92,0x0f,0x02,0x05,0x02,0x03,0x04,0x9b,0x08,0x08,0x1d,0x08,0x05 -,0x08,0x0e,0x04,0x13,0xa8,0x0c,0x00,0x08,0x0b,0x0f,0x1a,0x80,0x1a,0x18,0x95,0xa7,0x3f,0x2f,0x9c,0x2c,0x96,0x80,0x89,0x9d,0xa8,0xa8,0xab,0xa5,0x80,0xad,0xb1,0x82 -,0x8d,0x9e,0xa9,0x8c,0x9d,0x9f,0x82,0x9f,0x2a,0x2e,0x3d,0xb0,0xae,0x80,0x49,0xb0,0x88,0x9b,0xad,0x4b,0xaa,0x21,0x16,0x8c,0x9e,0x2f,0x2b,0x0b,0x0e,0x1c,0x88,0x09 -,0x15,0xab,0x18,0x1a,0x13,0x1f,0x0c,0x0d,0x9e,0x16,0x0a,0x06,0x01,0x04,0x1b,0x87,0x07,0x41,0xa5,0x18,0x23,0x16,0x1f,0x0d,0x18,0x99,0x33,0xbd,0x1d,0x0c,0x0d,0x98 -,0x87,0x09,0x9d,0xab,0x29,0xa5,0xa0,0xa4,0x39,0xa8,0x86,0xaf,0x9e,0x21,0x12,0x25,0x89,0x86,0x24,0x85,0x93,0xa8,0x99,0x9d,0xf2,0x2c,0x9c,0x8c,0xbb,0x9e,0x28,0x19 -,0x21,0x84,0x93,0x1e,0x8b,0xff,0x50,0xa6,0x91,0x9a,0xb1,0x8b,0x8c,0x9d,0xae,0x12,0x0f,0x1a,0x80,0xab,0x9c,0x8c,0x2e,0x3a,0x57,0xaa,0x1d,0x15,0xb0,0x22,0x1b,0x1c -,0x06,0x08,0x15,0x89,0x11,0x3d,0x24,0x06,0x0c,0x16,0x3f,0x14,0x1f,0xa9,0x1c,0xd1,0x14,0x04,0x00,0x1d,0x8f,0x10,0x86,0xb5,0x22,0x2f,0xa5,0x94,0x2b,0xac,0x96,0x23 -,0x9d,0xea,0x11,0x10,0x8c,0x8a,0x45,0x83,0x28,0x15,0x17,0xaf,0x9e,0x2e,0x97,0x90,0x1f,0x94,0xcf,0x0c,0x04,0x8e,0xa9,0x26,0x81,0x60,0xbc,0x2c,0x92,0x94,0xe3,0x8d -,0x94,0xc7,0x9c,0xa6,0x1d,0x12,0x82,0xbb,0x98,0x85,0x1f,0x15,0x0a,0x2c,0x4e,0x27,0x9c,0x66,0x1b,0x1b,0x15,0x07,0x07,0x96,0x0a,0xac,0x9e,0x14,0x10,0x11,0xc5,0xd3 -,0xb9,0x9e,0x2b,0x2c,0x2a,0x28,0x0d,0x2f,0x8c,0x11,0x8d,0x92,0x3b,0x0a,0x13,0x28,0x12,0xbe,0xc8,0x1f,0x5f,0x25,0x21,0x00,0x2d,0xb1,0x0a,0x8e,0xa6,0xb8,0x0d,0x58 -,0x9f,0x49,0x89,0x92,0xb5,0x98,0xa0,0xab,0x1a,0x87,0x8a,0x97,0x80,0x88,0x8d,0x1e,0x9a,0x9e,0xc3,0x88,0x8d,0xa4,0x97,0xa0,0xc5,0x0e,0x8e,0x2b,0x24,0x9c,0xce,0xb2 -,0x0a,0xae,0x3a,0x22,0x97,0xec,0x23,0x1e,0x38,0x27,0x0b,0x8c,0x1a,0xad,0x99,0xca,0x50,0x09,0x28,0x17,0x16,0x54,0x2b,0x19,0x19,0x18,0x0d,0x08,0xa5,0x05,0x20,0x41 -,0x4a,0x2e,0x12,0xa7,0x37,0xe6,0x9d,0xa6,0x51,0x2d,0xdd,0x1f,0x22,0x8b,0x13,0xa2,0x91,0x8f,0x5c,0x16,0xac,0x23,0x33,0xb6,0xb7,0x34,0x37,0xa9,0x15,0x1c,0x8e,0x17 -,0xb6,0xa3,0x97,0xdb,0x44,0x8b,0x9e,0x99,0x8f,0x91,0x9b,0xab,0x95,0x64,0xa7,0x82,0xbb,0x93,0x96,0x8b,0xa4,0x2d,0x99,0x1f,0x1e,0x2e,0x27,0x45,0x12,0x29,0x12,0x0f -,0xb7,0x08,0x1b,0x16,0x34,0x23,0x0c,0xbe,0x18,0x1b,0xdc,0x38,0xb1,0x1d,0x2d,0x1d,0x16,0x97,0x1b,0xcd,0xb1,0xa4,0xb5,0x0e,0xab,0x22,0x16,0x69,0x1c,0x6e,0x1d,0x1d -,0x25,0x10,0x9f,0x18,0x18,0x36,0x32,0xa8,0x1b,0x9d,0x94,0xa4,0x8e,0xaf,0x95,0x8f,0xad,0x92,0xa5,0x8c,0x91,0xb3,0x96,0x96,0x8b,0x9f,0x9e,0x8f,0xa6,0xb0,0x2e,0x56 -,0x95,0xbc,0xaf,0x36,0x24,0xaf,0x22,0x12,0x21,0x3d,0x2e,0x34,0x46,0xbe,0xc9,0xbd,0xc2,0xa6,0xa9,0xaa,0xa5,0x3a,0xad,0xa4,0x27,0x4b,0xc1,0xfa,0xd0,0x2b,0x3d,0x2e -,0x1f,0x24,0x30,0x37,0x4b,0xbd,0x27,0x17,0x21,0x13,0x15,0x11,0x18,0x48,0x33,0x2b,0x33,0x3c,0x5c,0xb0,0xbb,0xa7,0x95,0xa8,0x28,0x34,0x39,0xb3,0x2f,0x2f,0xa6,0xb0 -,0x41,0x36,0x27,0x1e,0x69,0x52,0x41,0xa1,0xd3,0x16,0x1b,0x1c,0xd2,0x28,0x1c,0xc7,0xa0,0xb8,0xc6,0xab,0xc0,0x9b,0x98,0x9f,0x8f,0x8f,0x9b,0x9f,0xb7,0x95,0x95,0xbc -,0xc1,0x99,0xa6,0x34,0x39,0x21,0x27,0x4e,0x38,0x48,0x52,0x3b,0x2a,0x17,0x20,0x52,0x26,0x16,0x2e,0x53,0x2f,0x25,0x1c,0x23,0xaa,0x9d,0xa8,0xb0,0xa9,0xa4,0xe0,0x2f -,0xa5,0xa5,0x33,0x3d,0x4b,0x3b,0x1f,0x16,0x11,0x46,0xb1,0x3c,0x21,0x1b,0x2e,0x28,0x0f,0x24,0xbe,0x2b,0x28,0x27,0x39,0xd0,0x4f,0x38,0x9a,0x8f,0x99,0x9d,0xb7,0xa0 -,0x8e,0x9d,0x9e,0x93,0x9b,0x9e,0xaa,0x63,0xaa,0xbe,0x29,0x43,0xcd,0xb3,0xbc,0x21,0x2a,0xab,0x47,0x2c,0xcc,0x72,0x50,0xc2,0x2b,0x36,0x55,0x51,0xcd,0x54,0xb1,0x98 -,0xbe,0x5a,0x9e,0x9a,0x97,0x9d,0xa7,0xab,0xad,0x3d,0x29,0x22,0x29,0x34,0x26,0x1f,0xde,0x23,0x1a,0x2b,0x28,0x67,0x3d,0x20,0x2a,0x31,0x2b,0x32,0x1f,0x27,0xfe,0xea -,0x2b,0xae,0xb3,0xca,0xaa,0xc0,0xa7,0xa2,0xbd,0xa9,0xaf,0x2f,0x51,0x48,0x2b,0x24,0x37,0x38,0x34,0x1f,0x1c,0x22,0x19,0x26,0xb8,0x32,0x39,0xd4,0x43,0xcf,0x5c,0xca -,0xb8,0xac,0xb1,0xac,0xcc,0x38,0xaf,0xa5,0x9c,0x97,0xa7,0x9b,0x97,0xa7,0xaa,0x9e,0xa8,0xef,0xdf,0x37,0x27,0x21,0x1e,0x27,0x18,0x1f,0xce,0x35,0x36,0x5d,0xca,0xc0 -,0xa9,0xad,0xaf,0xb0,0xd0,0xac,0xc4,0x27,0x31,0x4c,0x5a,0xb6,0xed,0xb4,0xac,0x36,0x6e,0xb0,0xf4,0x6f,0xc0,0x36,0x29,0x2c,0x1d,0x1e,0x16,0x15,0x2a,0x19,0x15,0x20 -,0x1e,0x28,0x78,0xc3,0xa1,0x9e,0xbb,0xab,0xa0,0xc6,0xb6,0xaa,0xaf,0xaa,0xb2,0xa9,0xb2,0x26,0x56,0x9e,0xb3,0xa6,0x99,0xc0,0xc7,0xbc,0x41,0xcb,0xd3,0x3c,0x58,0xce -,0x2f,0x2b,0x23,0x2c,0xdd,0x7a,0x9c,0x9a,0x4a,0xb1,0xa0,0xc6,0x9e,0x95,0xa1,0x9f,0x9c,0x9f,0xaa,0x3c,0x4e,0xa9,0xea,0x5b,0xbe,0x20,0x20,0x2f,0x29,0xbe,0x36,0x1f -,0xc0,0xcf,0x20,0x25,0x1b,0x15,0x29,0x2a,0x3d,0x61,0x1e,0x28,0x59,0x25,0xda,0xa4,0xbb,0xb1,0xa2,0xa7,0xa9,0x5e,0x35,0xb7,0x37,0xd1,0xaf,0x24,0x1b,0x1e,0x1b,0x2f -,0x36,0x1d,0x3d,0xc3,0x27,0x34,0xdc,0x2f,0xde,0xb9,0x9d,0x9d,0x4e,0xb2,0xa4,0x3f,0xd4,0xa9,0x4b,0xb9,0x9c,0xa2,0x9c,0x9e,0xc2,0xa3,0x9b,0x92,0x90,0xca,0x2e,0x3a -,0x23,0x36,0x43,0x1d,0x29,0x52,0x1a,0x27,0x38,0x1a,0x2d,0x3e,0xa6,0x9b,0xd7,0xd5,0xa8,0x43,0x71,0x9e,0xba,0xcf,0xa0,0xcf,0xb5,0xbb,0x1d,0x3f,0x33,0x2f,0xba,0x2b -,0x1b,0x27,0x28,0x2e,0x3f,0x21,0x2c,0xba,0x2e,0x4a,0x5c,0x13,0x1c,0x37,0x34,0xb6,0xde,0x2f,0xe1,0x3e,0xc4,0x9d,0xac,0xba,0x9f,0xa0,0x9b,0x9d,0x35,0xbe,0xa2,0x46 -,0xae,0xad,0x21,0x1d,0x24,0x2f,0xae,0x69,0x2b,0x5a,0x2c,0xb6,0xa6,0x28,0x45,0xab,0xca,0x9e,0x97,0xb1,0xb5,0xdd,0xcf,0x9d,0xbf,0x2d,0xb6,0xb7,0x9b,0x93,0x4b,0xd3 -,0xb3,0x39,0xae,0xa4,0x35,0x1e,0x1e,0x2b,0xb5,0x36,0x1f,0x2b,0x1e,0x27,0xb4,0x1f,0x19,0x3b,0x33,0xae,0xaa,0x46,0x2f,0x2d,0xde,0x9c,0xa4,0x57,0xc1,0xdd,0xc8,0xa1 -,0x63,0x25,0x27,0x1e,0x41,0xcb,0x1f,0x1c,0x1d,0x3c,0xa5,0xbe,0x55,0x6c,0x3c,0xf7,0xa1,0xb0,0x2a,0x22,0x42,0xa4,0x9b,0xb7,0xcc,0x3d,0xc9,0x99,0xad,0x50,0x44,0x46 -,0xb9,0x9f,0x9e,0xc8,0x27,0x3d,0xa4,0x9a,0xcf,0x2f,0x26,0x41,0xa5,0xb4,0x76,0x2c,0x25,0x2d,0xc2,0x37,0x1f,0x19,0x25,0xa9,0x9e,0xa8,0xb2,0x3f,0xe8,0x9e,0x9d,0xa9 -,0x4e,0x62,0xb5,0xa2,0xaa,0xcf,0x26,0x1b,0x3f,0xdc,0x27,0x1a,0x0b,0x13,0xc9,0xa8,0xaf,0x30,0x21,0x35,0x9e,0xa1,0x3d,0x20,0x24,0xb7,0x9e,0xad,0xc9,0x23,0x22,0xa8 -,0x9d,0xb3,0x2b,0x1b,0x32,0xa0,0xa7,0xbd,0x43,0x28,0xbd,0x9e,0xa9,0xbc,0x24,0x21,0xab,0x9f,0xad,0xb0,0x29,0x2d,0x9e,0xa7,0xd9,0x2a,0x1a,0x4a,0x9f,0xab,0xd5,0x28 -,0x1d,0xbc,0x9e,0xbf,0xf7,0x24,0x26,0xac,0xa9,0xbf,0x3a,0x22,0xc6,0x93,0x97,0xb8,0x2c,0x1d,0xbc,0x9e,0xba,0xbd,0x29,0x1f,0xfa,0xb7,0xef,0x20,0x14,0x1f,0xc9,0xd8 -,0x26,0x1d,0x16,0xd5,0xa3,0xb9,0xb1,0x38,0x37,0xb1,0x9d,0x9f,0xaf,0x40,0xbb,0x9a,0x9d,0xcd,0x2e,0x19,0x2b,0xb6,0x34,0x3f,0x23,0x1a,0x37,0xb4,0xce,0x27,0x1b,0x2b -,0xaf,0xad,0x4a,0x54,0x30,0xac,0x9c,0xa2,0x9b,0xb4,0x4d,0x65,0xa2,0xb0,0x54,0x2f,0x42,0xa3,0xa2,0xec,0x34,0x2f,0x32,0xb8,0xb9,0x47,0x28,0x1d,0x2a,0xaa,0xd0,0x26 -,0x21,0x2c,0xab,0xa6,0x3e,0x3c,0xcd,0xba,0x9d,0x99,0xa9,0xad,0xbd,0x28,0xad,0xab,0x3b,0x2b,0x23,0xdd,0xbb,0x2e,0x24,0x28,0x1c,0x29,0xbf,0x55,0x50,0x3b,0x25,0xa7 -,0x9d,0xf7,0xb6,0x35,0x57,0xa1,0x6a,0x4f,0x3f,0x25,0x49,0xad,0x56,0xbb,0xb1,0x38,0xb9,0xb8,0x32,0xe7,0x2b,0x1f,0xa5,0xac,0xb3,0xb7,0x3c,0x5d,0xa4,0x2e,0x6c,0xa3 -,0x22,0x5e,0x45,0x2a,0x2a,0x4c,0x3c,0xa3,0xae,0x26,0xaf,0x36,0x53,0x9f,0xbd,0xcf,0x5a,0x33,0x45,0xac,0xae,0x58,0xef,0xca,0xbd,0x3f,0xc0,0x42,0x2f,0x2d,0xc8,0x8c -,0x9b,0x3c,0x20,0x1b,0x2b,0x4e,0x2e,0x2d,0xce,0x36,0xef,0xac,0xc4,0x23,0x26,0x6e,0x9e,0xa6,0x1c,0x1c,0x20,0x2d,0xb6,0x96,0x9c,0xa1,0xa9,0x2f,0x4a,0x28,0x0c,0x0c -,0xcb,0x89,0x8d,0xc2,0x46,0xa2,0x95,0x9f,0x1b,0x11,0x30,0xaa,0xa2,0x94,0x8d,0x2a,0x13,0x16,0x13,0x21,0x1f,0x12,0x13,0xc4,0x8c,0x91,0x56,0xac,0x9d,0x9d,0xb0,0x1e -,0x0d,0x0f,0xb1,0x89,0x8d,0x39,0x18,0xcd,0xa9,0x58,0x16,0x0a,0x1b,0x4b,0x25,0x23,0x96,0x87,0x85,0x88,0x88,0x8c,0x25,0x06,0x13,0x34,0x9d,0x9f,0xb4,0xa2,0xa0,0x51 -,0x07,0x05,0x0b,0x06,0x03,0x0f,0x9a,0x8b,0x8f,0x8b,0x9a,0x2e,0x22,0x11,0xf3,0xa8,0x95,0x84,0x83,0x86,0xdc,0x1c,0x2f,0xae,0x24,0x0d,0x07,0x0f,0x17,0xa4,0x8f,0xd3 -,0x9e,0x4b,0x1e,0x1a,0x1f,0x13,0x03,0x0f,0x8e,0x8f,0xab,0xb5,0xfc,0x9b,0x9d,0xb2,0x19,0x18,0xf4,0xa7,0x89,0x80,0x8b,0xa2,0xb6,0x99,0xa7,0x0a,0x04,0x02,0x10,0x91 -,0x9c,0x2f,0x2a,0x49,0xf4,0x0c,0x04,0x08,0x19,0xb1,0x8f,0x80,0x95,0x79,0xab,0x8f,0x8f,0x27,0x16,0xe8,0x94,0x8b,0x8f,0xaa,0xb1,0x6d,0x36,0x37,0x1c,0x1b,0x16,0x0f -,0x07,0x13,0x28,0x0e,0x3f,0x99,0x96,0x9d,0xd9,0x44,0x1d,0x1a,0x99,0x8b,0x8d,0x96,0x71,0xa0,0xa2,0x2b,0x14,0x29,0xaf,0x1f,0x2a,0x50,0xa3,0x9c,0x2a,0xee,0xb7,0x2e -,0x1e,0x18,0xb8,0x90,0x96,0x95,0xa1,0x2d,0x2e,0x1a,0x19,0x12,0x19,0x0f,0x1d,0x8d,0x96,0xb1,0x0c,0x13,0x97,0xad,0x2b,0x20,0x56,0x86,0x88,0x94,0x8f,0x3c,0xd9,0xaf -,0xa7,0xc7,0x0e,0x14,0x0e,0xbb,0x9e,0x67,0x37,0x14,0x9c,0x99,0x1c,0x11,0x0b,0x20,0x9f,0xb3,0x95,0x99,0xa4,0xa7,0x28,0x18,0x0a,0x0b,0x0c,0x9b,0x80,0x88,0x8f,0xc1 -,0x9f,0x9f,0xcd,0xab,0x1a,0x15,0xb5,0xac,0x9f,0xa4,0xcd,0x4e,0x24,0x14,0x03,0x03,0x02,0x16,0x90,0xa3,0x9d,0xad,0xbb,0xb6,0x24,0x30,0xaa,0x9e,0x8e,0x8c,0x8a,0x87 -,0x97,0x8b,0x91,0x43,0x0d,0x0d,0x1e,0x13,0x36,0x34,0x44,0x31,0x1c,0x4e,0x1e,0x16,0x21,0x15,0x0e,0x16,0x1e,0x96,0x8a,0x85,0x8c,0xd9,0x20,0x0c,0x13,0x1c,0xb3,0x8e -,0x88,0x87,0x96,0x98,0x9f,0x1f,0x21,0x2b,0x42,0xb9,0x1e,0x2b,0x9c,0x9f,0x5e,0x10,0x08,0x07,0x0c,0x0a,0x1e,0x9e,0xb7,0x9d,0xbb,0x9c,0x9a,0x32,0x53,0xb7,0x9c,0x8f -,0x9f,0xab,0x8c,0x89,0x8f,0x35,0x13,0x1c,0x35,0x14,0x11,0x42,0x23,0x3a,0x1f,0x2e,0xaf,0x20,0x26,0xc6,0x9b,0x9f,0xeb,0x30,0xbf,0xac,0xa4,0xae,0x58,0x39,0x2c,0x0c -,0x0c,0xbc,0x65,0x9d,0xae,0x9e,0x8d,0xc8,0x42,0x65,0x52,0xb3,0xa0,0x94,0x8f,0x99,0xa4,0x2e,0x27,0x19,0x15,0x0c,0x13,0xbe,0x22,0xda,0x27,0x1f,0x2f,0x13,0x3d,0xc9 -,0xba,0xa1,0xa0,0x96,0x8f,0xa5,0x32,0x30,0xb5,0xc4,0xb9,0x43,0x3a,0x98,0xa9,0x99,0xcb,0x28,0xe7,0x19,0x2f,0xae,0xb4,0xa9,0xec,0xb4,0xa6,0x29,0x13,0x0a,0x10,0x16 -,0x3d,0x2e,0x0f,0xde,0x49,0x71,0xd3,0x4c,0x97,0x9c,0x8e,0x8c,0x96,0x8d,0x95,0x9a,0x95,0xa4,0xaa,0x30,0x23,0x1a,0x16,0x10,0x08,0x24,0x25,0x2c,0x2f,0x13,0x32,0x24 -,0x10,0x17,0x2a,0x9a,0x8e,0x91,0x8e,0x8f,0x9a,0x48,0x28,0x29,0x49,0x9d,0xb7,0xa1,0x9c,0xb1,0xb3,0x1b,0x37,0xb4,0x27,0x2c,0x2c,0x44,0xa7,0xb5,0x53,0x3c,0x2c,0x1d -,0x17,0x19,0x18,0x3e,0x2e,0xd5,0x9e,0xae,0xc4,0x22,0x39,0xaf,0xa5,0x99,0x99,0x97,0x94,0x99,0xb2,0xb6,0xb0,0xbe,0x69,0x39,0x2b,0x1b,0x0e,0x0e,0x27,0x2d,0x28,0x1c -,0x43,0xa0,0x9f,0xad,0xcf,0xb0,0xbb,0xba,0xb6,0x9d,0x99,0xac,0x42,0x1c,0x1a,0x1d,0x1c,0x3c,0xc7,0xd1,0xbe,0x33,0x2e,0xae,0xb3,0xa4,0x96,0x9a,0x9e,0xa5,0x9f,0xaf -,0xab,0x5b,0x2f,0x25,0x1d,0x1c,0x16,0x1e,0x20,0x2c,0x24,0x21,0x17,0x1b,0xbb,0xbd,0xa1,0x9c,0x9a,0x96,0xab,0xd3,0xab,0x93,0x9f,0xb1,0xcc,0x9f,0x9e,0xaf,0x1e,0x18 -,0x4e,0x1d,0x1e,0x12,0x4e,0x9e,0xb2,0xcb,0x35,0x3d,0x3b,0x1e,0x24,0x3b,0xc1,0x39,0x1e,0x35,0x2f,0x46,0x4f,0x3c,0xb7,0x98,0x96,0x99,0xc1,0x9d,0x98,0x99,0x95,0xce -,0xac,0xad,0xc1,0x36,0x1f,0x2b,0x1f,0x1e,0x21,0x1d,0x1c,0x17,0x18,0x17,0x1c,0x28,0x2a,0x3a,0xc4,0xa6,0x93,0x94,0x9a,0x9e,0xa3,0x9b,0x99,0x94,0xa4,0xad,0x9f,0xee -,0x36,0x33,0x1e,0x26,0x1c,0x19,0x1b,0x20,0xc6,0x26,0x1d,0x29,0x1a,0x28,0x2a,0x50,0xb0,0xa4,0x90,0x9d,0xa5,0xac,0xb3,0xa6,0x64,0x40,0x53,0xa6,0x98,0xa6,0xa7,0xb1 -,0x3d,0x2a,0x27,0x1d,0x27,0x2e,0x25,0x25,0x3c,0xd7,0x3d,0x4c,0x21,0x27,0xc8,0xbb,0xb2,0xc0,0xb8,0xa1,0xa0,0xb6,0x3c,0xe4,0xbc,0x5f,0x4e,0x1f,0x20,0x4f,0xa9,0xa1 -,0xba,0xbb,0x58,0x31,0x45,0x39,0x33,0x3b,0xb9,0xa0,0xac,0xa3,0xa5,0xb0,0xb1,0xdb,0x41,0x2b,0x23,0x21,0x2a,0x7b,0xbf,0x3c,0x21,0x1f,0x24,0x24,0x2f,0x3c,0x4d,0xae -,0x9e,0x9f,0xa9,0xb7,0xae,0xa4,0xad,0xb7,0xc0,0xa7,0xa1,0xa6,0xad,0xd8,0xcd,0x28,0x1d,0x1f,0x2c,0x48,0x2b,0x1d,0x20,0x20,0x25,0x32,0x29,0xbd,0xe0,0x66,0x2d,0x29 -,0x3b,0x5b,0x97,0x91,0x94,0x9b,0xa4,0x99,0x98,0x9b,0x99,0xc7,0xd8,0x32,0x2b,0x3c,0x21,0x20,0x14,0x15,0x1e,0x17,0x1a,0x19,0x23,0x35,0x32,0xbe,0xe8,0xb3,0xae,0xad -,0x9f,0xa4,0xa8,0x9f,0xa4,0xa2,0xa0,0xa3,0x9f,0xa4,0xaa,0x65,0x3d,0x3d,0x36,0x33,0x1f,0x1d,0x2f,0x1e,0x1e,0x2d,0x3d,0x6f,0x2e,0x1e,0x18,0x23,0xb0,0xb7,0xae,0xad -,0xaa,0x9a,0xa9,0x9a,0xac,0xb3,0xa7,0x67,0xbc,0xaf,0x9d,0x9e,0xb5,0xe1,0x23,0x26,0x2a,0x18,0x1a,0x17,0x28,0x26,0x16,0x2e,0x46,0xb3,0xbc,0x3f,0xf6,0xbe,0xa1,0xaa -,0xa4,0x9a,0x98,0x9e,0xb1,0xbf,0xb4,0x3b,0x30,0x55,0x39,0x55,0x3b,0x2c,0x32,0x3e,0xbd,0x3d,0x20,0x24,0x1f,0x66,0xae,0xae,0x49,0x2c,0xb6,0xae,0xaf,0xb8,0x66,0xac -,0x43,0x42,0xb5,0xbe,0xa4,0xcf,0xea,0x47,0x2b,0x33,0x22,0x32,0xbe,0xbe,0xaf,0x34,0x48,0x40,0x32,0xb6,0xc0,0x4c,0x2e,0x36,0xb2,0xbc,0xce,0xf3,0xcd,0x9d,0xbc,0xb7 -,0xbf,0xbc,0xa9,0xb9,0xaf,0xc2,0x26,0x1f,0x1f,0x31,0xcd,0x2e,0x1e,0x13,0x21,0x32,0xcf,0xb5,0xc6,0xac,0xae,0xa3,0x9a,0xa6,0xab,0xa0,0xa7,0xbb,0x3f,0xde,0xd8,0xc7 -,0xc5,0x55,0xc7,0x38,0x26,0x22,0x22,0x3f,0x40,0x1f,0x24,0x3d,0xcf,0xc8,0x49,0xca,0x62,0xa7,0xb3,0xd4,0xdb,0x39,0xb0,0xb6,0xa6,0xaa,0x52,0x4f,0xca,0xba,0xca,0x34 -,0x4e,0x3d,0x61,0xa1,0x9b,0xab,0x2c,0x24,0x21,0x58,0xbe,0x2c,0x1e,0x1f,0x53,0xa5,0xc0,0x33,0x2f,0x3a,0xc3,0xb7,0xc7,0x4a,0xc7,0xab,0xae,0xad,0xb7,0xb8,0xbf,0x3c -,0x40,0x2f,0x27,0x2b,0x36,0xdf,0xa2,0xa8,0x5f,0x23,0x48,0x9e,0xa6,0xb9,0x28,0x45,0xa9,0x9d,0xaf,0x30,0x36,0x2d,0x2f,0x50,0x39,0x1d,0x18,0x1a,0x2a,0xc0,0xa2,0xbb -,0x3c,0x3e,0xb2,0x9f,0xaa,0xea,0x47,0xa8,0x99,0x94,0x9c,0x7a,0x31,0x49,0xbb,0xbd,0x2c,0x1f,0x2d,0x2b,0x31,0x4a,0x33,0x38,0x32,0x2e,0x39,0xed,0x36,0x27,0x40,0xae -,0xaa,0xbb,0x4d,0x3f,0xbc,0xa4,0xae,0x2b,0x1d,0x5f,0x9c,0x96,0x9e,0xbb,0xec,0x42,0x9f,0x9d,0x5c,0x1d,0x1d,0x27,0x3c,0x49,0x2e,0x22,0x1b,0x2a,0x3d,0xcf,0x46,0x1f -,0x1c,0xb8,0x95,0x91,0x9f,0xad,0xad,0xa5,0x9d,0xb1,0x3b,0x41,0xd4,0xbf,0xcc,0x33,0x2f,0x28,0x2f,0x35,0x26,0x1c,0x16,0x1f,0x76,0xd7,0xb2,0xbc,0xbd,0xad,0x9b,0x96 -,0xcb,0x24,0x28,0xa7,0x93,0x98,0xfa,0x32,0xf6,0xa6,0xa6,0x47,0x1f,0x15,0x1a,0x3a,0xaf,0xad,0x43,0x18,0x2d,0xbc,0xb2,0xba,0x1f,0x1c,0x37,0xb1,0xa0,0xa8,0xb5,0xbf -,0xb1,0x9f,0xb3,0x2e,0x25,0xb9,0xa0,0xa5,0xab,0xee,0xfe,0xab,0xb6,0x39,0x21,0x12,0x1a,0x21,0x2d,0x37,0x34,0x38,0x49,0xc0,0xb8,0xb4,0x43,0x2a,0xaf,0x97,0x92,0x9e -,0xe9,0xcb,0xa2,0x96,0xa3,0x35,0x14,0x19,0x2f,0x4e,0xe2,0x27,0x1e,0x1d,0x2e,0xc2,0xca,0x31,0x28,0x28,0x54,0xa0,0x9b,0x9b,0xab,0x9f,0x9e,0xa8,0xcf,0x27,0x37,0xd0 -,0xbb,0x42,0x32,0x2a,0x3f,0xbd,0xb5,0x42,0x20,0x1b,0x23,0xb7,0xc0,0xfd,0x2f,0xd3,0xc8,0xae,0xae,0x33,0x24,0x25,0xb4,0x9d,0xa1,0xdc,0x3e,0xbc,0x95,0x96,0xb1,0x23 -,0x1a,0x30,0x58,0xb0,0xb5,0x36,0x20,0x27,0x2c,0x39,0x3d,0x29,0x32,0x2e,0x36,0x58,0xb8,0xa1,0x9e,0x9c,0x9a,0xb0,0x2f,0x21,0x71,0x9f,0xa9,0x4e,0x36,0x4b,0xb1,0xb1 -,0x58,0x28,0x15,0x1f,0x25,0x3e,0x4d,0xec,0xbe,0xbe,0xc2,0x4a,0x47,0x4e,0xbf,0xa1,0x9f,0xac,0xbd,0x41,0x53,0xa8,0x98,0xa7,0x2e,0x16,0x13,0x2c,0xaf,0xb6,0xad,0x3e -,0x25,0x34,0x4f,0xde,0x3b,0x39,0x37,0x4e,0x5e,0x4e,0xac,0x9e,0xa2,0xb1,0x46,0x45,0x36,0xd8,0xa8,0x9a,0xa7,0x2c,0x2b,0x3d,0xb7,0xa2,0xc0,0x24,0x19,0x16,0x26,0x41 -,0xc2,0xad,0x5a,0x34,0x38,0x2f,0x51,0xbc,0xa7,0x9d,0xa7,0xbc,0xce,0xda,0xb4,0xa2,0xa4,0x42,0x1f,0x22,0x36,0xaf,0xba,0xd9,0x2f,0x20,0x22,0x40,0xbb,0xc9,0x43,0x3c -,0x37,0x2c,0x45,0xa7,0xa2,0xaa,0x9f,0xdb,0x3f,0x37,0x3d,0xb0,0xa2,0xb0,0x62,0x1d,0x22,0xdb,0xb0,0xa9,0x4d,0x2e,0x27,0x2e,0x3c,0xb0,0xba,0x6c,0x31,0x3b,0x39,0xd2 -,0xbc,0xc7,0xbb,0xf6,0x52,0x53,0xbc,0xad,0xa2,0xac,0xa5,0x34,0x29,0x32,0x6e,0xaf,0xcc,0xc6,0x2d,0x25,0x28,0xc5,0xbd,0x53,0x3f,0x24,0x2f,0x2f,0xca,0xac,0xad,0xac -,0xb5,0x4d,0x34,0xba,0xac,0xac,0xae,0xc5,0x2f,0x2a,0x4b,0xad,0xa2,0xd2,0x1f,0x1a,0x1e,0x3b,0xd3,0xad,0xb3,0x28,0x20,0x38,0xbf,0xa6,0x9b,0xaa,0xe6,0xc2,0xe6,0xbf -,0xaf,0xb7,0xaf,0x43,0x25,0x27,0x35,0xf2,0xae,0xad,0xdb,0x2f,0x21,0x30,0xbe,0xb7,0xc2,0x42,0x3f,0x45,0x38,0xcc,0xb7,0xb5,0xc9,0xbf,0xcc,0xc9,0xd5,0xe5,0xc0,0xba -,0xbd,0x45,0x2b,0x2a,0x75,0xc6,0xe9,0x3f,0x2b,0x24,0x3c,0xb5,0xb0,0xaf,0x3a,0x24,0x3a,0x5d,0xa9,0xa6,0xa5,0xb8,0xcc,0xbd,0xb7,0xae,0x4e,0x46,0x4a,0x65,0x52,0x43 -,0x3c,0x42,0x36,0x38,0x58,0x47,0x47,0x4a,0x3b,0x33,0x39,0xe8,0xc0,0xa7,0xa4,0xb9,0xd0,0x4a,0x4f,0xd3,0xab,0xb2,0xc0,0xd9,0x2f,0x28,0x44,0x3b,0x2c,0x39,0xdd,0xae -,0x63,0x3e,0x3f,0x61,0xbf,0xb8,0xb7,0xcf,0x45,0x2a,0xc6,0xbd,0xcf,0xdf,0x45,0xbf,0xc6,0xa7,0xb4,0x47,0x33,0x34,0x47,0xe9,0xbd,0xc4,0x5e,0x40,0x3a,0x2e,0x36,0x2e -,0x44,0xbc,0xdb,0x48,0x4e,0x53,0xcb,0xb5,0xad,0xb3,0xe1,0xda,0xad,0xb0,0xcf,0xbe,0x44,0xd2,0xac,0xb7,0xfd,0x2a,0x1d,0x1e,0x38,0xda,0xd1,0xd3,0x5b,0x2a,0x2b,0x4f -,0xf3,0x45,0x67,0xa9,0xad,0xb3,0xba,0xc0,0xaf,0xbb,0xb1,0xac,0xe4,0x39,0x34,0x3d,0x6c,0x5a,0x45,0xe6,0x39,0x35,0xe1,0x6a,0x32,0x30,0x42,0x4a,0xfa,0xed,0xb3,0xb5 -,0xd5,0x7e,0x4e,0x37,0x39,0xc1,0xad,0xa4,0xc4,0x41,0x4a,0x33,0xf9,0xbc,0xbb,0x66,0x3c,0x4f,0xbd,0x45,0x36,0xc4,0xca,0xdf,0x71,0x4b,0x25,0x24,0x26,0xd5,0xa8,0xbb -,0xc4,0x4a,0xc3,0xb5,0xc8,0xb9,0xc1,0x52,0xda,0xa8,0xa8,0xbe,0x4f,0x4a,0x3a,0x4f,0xd9,0x49,0x36,0x2c,0x5f,0x35,0x27,0x3d,0xbe,0x6f,0xbc,0xbc,0x39,0x2e,0x3a,0xa8 -,0xa0,0x9f,0xc6,0x52,0xe3,0xbf,0xba,0xfd,0x5d,0x24,0x28,0x5e,0xb8,0xb9,0x48,0x53,0x36,0x2f,0x44,0x5a,0xc9,0x3d,0xdf,0xc9,0x48,0xf7,0xcb,0xc8,0xbe,0xc7,0xce,0xd0 -,0x38,0x37,0xb6,0xa7,0xe5,0xfb,0xc7,0xcb,0x77,0x35,0xe9,0xd0,0x37,0xdb,0xf6,0xd7,0x3b,0x42,0xb5,0x38,0x2f,0x33,0xcc,0xcc,0xcd,0xba,0xbb,0x7c,0xf2,0xb7,0xad,0xb8 -,0xd6,0xbe,0x3f,0x33,0x3f,0xba,0x52,0x3c,0x55,0x4d,0x3c,0x36,0x3b,0x58,0x45,0x3a,0x59,0x57,0xc6,0xdb,0xb2,0xae,0x50,0x31,0xc2,0xa7,0xb7,0xc6,0xbe,0xe0,0x41,0x5c -,0xb7,0xc0,0x38,0x31,0x3f,0x37,0x3a,0xed,0x4b,0x2e,0x3b,0x53,0xbc,0xd3,0x3e,0xb8,0xf7,0x43,0xb8,0xa8,0xae,0xc9,0xbf,0xca,0xfb,0xcc,0xbd,0xc0,0x47,0x4a,0x60,0x65 -,0x38,0x3b,0xcf,0xc9,0x42,0x3b,0xdf,0x42,0x33,0x41,0x65,0x3f,0x39,0x47,0xc0,0x64,0xd5,0xb3,0xbd,0x54,0x3e,0x74,0xc3,0xae,0xb6,0xb5,0xca,0x41,0x3b,0x4e,0x57,0x4b -,0xdb,0xf0,0x48,0x39,0x3f,0xbf,0xb5,0x40,0xe6,0x6d,0x3a,0x48,0xce,0xb8,0x62,0x5c,0xba,0xbd,0x33,0x5e,0xb3,0xdf,0x45,0x4d,0x62,0xbe,0xbb,0xcc,0xb3,0xbd,0x39,0x57 -,0x4f,0x3d,0x2d,0x33,0x4e,0x3c,0xc4,0xc0,0xe0,0x65,0xcb,0xd7,0xbe,0xb8,0x40,0x43,0x52,0x4d,0xb6,0xaf,0x7e,0x36,0x3c,0x35,0x6c,0xd5,0xd8,0xc5,0x2f,0x4a,0xcb,0xba -,0xfb,0x70,0x56,0x48,0x47,0x56,0xc2,0x63,0xbc,0xb8,0xb2,0xce,0xc6,0xbf,0xc7,0x4f,0x4d,0xef,0x6f,0x6b,0x47,0x4f,0x39,0x3c,0x42,0x7d,0x4e,0x6b,0xde,0x4c,0x3b,0x62 -,0xac,0xae,0xc4,0x6b,0x47,0x56,0x44,0xd9,0x5f,0x3a,0xe4,0xc9,0xb0,0xb3,0xc7,0x57,0x47,0x47,0x36,0x45,0xb8,0x62,0x31,0x33,0x3d,0x6f,0xdf,0x69,0x3b,0x38,0x46,0xc3 -,0xb7,0xbb,0xac,0xb4,0xce,0xbc,0xae,0xaf,0x4d,0x2d,0x2a,0x3c,0x6b,0xc4,0xb7,0xce,0x73,0xcc,0xc8,0xf3,0x49,0x3d,0x31,0x2c,0x46,0xdf,0xfe,0x47,0x5a,0xd5,0xb8,0xae -,0xad,0xb3,0x57,0x39,0xc4,0xb1,0xc2,0xcc,0x5e,0x4b,0x36,0x2b,0x27,0x34,0x4c,0xd3,0xc4,0xc9,0xcb,0xc3,0xb8,0xc5,0x7d,0x3e,0x48,0xe6,0xc7,0xd1,0x4c,0x31,0x44,0xb7 -,0xac,0xac,0x53,0x2d,0x2e,0x38,0xbe,0xa6,0xb3,0xdc,0xcc,0xc1,0xc5,0x58,0x37,0x38,0x29,0x2e,0xce,0xc0,0xaf,0xaf,0xce,0x3a,0x45,0x58,0xba,0xbc,0x3c,0x4f,0x58,0x47 -,0xc6,0xae,0xb7,0xcd,0x36,0x30,0x45,0x3e,0x65,0xed,0xde,0xb5,0xae,0xb6,0x5a,0x2a,0x22,0x2c,0x3a,0xbd,0xaa,0xbe,0x59,0x7c,0xb3,0xac,0xb9,0x62,0x3b,0x2e,0x38,0xd5 -,0xbc,0xc3,0x60,0xdf,0xc4,0xd8,0x4a,0x48,0x67,0x39,0x36,0x54,0xcb,0xbe,0xad,0xa7,0xb5,0x2e,0x24,0x2b,0x4a,0xc2,0xc8,0xc5,0xdc,0xaf,0xa6,0xb4,0x48,0x33,0x2d,0x3f -,0x65,0xda,0x5f,0x2a,0x30,0xc0,0xa5,0xad,0x40,0x25,0x28,0x40,0xc4,0xab,0xaa,0xce,0x56,0xc8,0xb8,0xca,0x33,0x2a,0x2b,0x2a,0x38,0xb8,0xa5,0xa9,0xb5,0xc4,0xda,0x5b -,0x40,0x62,0x7e,0x3e,0x35,0x37,0x53,0xb2,0xa6,0xad,0x50,0x2d,0x31,0x4d,0xf0,0xea,0xd7,0x79,0xb9,0xa7,0xa5,0xb6,0x28,0x1a,0x28,0x78,0xbf,0xda,0x45,0x43,0xbf,0xa8 -,0xa6,0xb3,0x3a,0x30,0x35,0x31,0x4b,0xca,0x4f,0x54,0xe4,0xbc,0xbb,0x51,0x38,0x40,0x4c,0x39,0x4e,0xcf,0xb4,0xa9,0xab,0xc3,0x3e,0x2a,0x3c,0xc3,0xbd,0xef,0x3a,0x4a -,0xc4,0xb3,0xb3,0xb8,0x37,0x28,0x4f,0xca,0x4d,0x40,0x3e,0xcf,0xad,0xa6,0xac,0x42,0x2b,0x2a,0x44,0xc3,0xcf,0x68,0x40,0x49,0xbb,0xaa,0xb1,0x37,0x21,0x2a,0x4b,0xbf -,0xbc,0xcc,0xea,0x78,0xce,0xb0,0xb0,0xcf,0xe3,0x53,0x2e,0x2a,0x2c,0x4b,0xbb,0xb5,0xb3,0x5b,0x28,0x2a,0xe8,0xac,0xb1,0x42,0x3f,0xb1,0xa7,0xb3,0xbe,0x3a,0x28,0x37 -,0x50,0xf7,0x46,0x33,0x43,0xbc,0xa2,0x99,0xab,0x32,0x25,0x2c,0x5c,0xe5,0x32,0x2d,0x33,0x66,0xa3,0x9e,0xbd,0x34,0x2a,0x30,0x4d,0x70,0xcc,0xbe,0xbc,0xba,0xba,0xe1 -,0x3c,0x32,0x3b,0xe7,0x49,0x30,0x32,0x5a,0xad,0xa3,0xa9,0xbe,0x3d,0x35,0x43,0x3b,0x31,0x33,0x41,0xc2,0xab,0xa8,0xe3,0x2d,0x2f,0x54,0xb2,0xb0,0x5e,0x3f,0x4f,0xb4 -,0x9e,0xa6,0xdc,0x28,0x1f,0x2e,0x46,0x44,0x3d,0x36,0x63,0xb8,0xb0,0xaf,0xee,0x7e,0xba,0x4f,0x38,0x37,0x2e,0x3c,0xc3,0xde,0xb8,0xbd,0xbf,0xa9,0xcf,0x2e,0x46,0x26 -,0x2c,0x6c,0x38,0x35,0xc1,0x9d,0x95,0x90,0xc8,0xc7,0x21,0x35,0xc3,0x9d,0x61,0x3d,0xcc,0x03,0x11,0x06,0x2e,0xad,0x13,0xb2,0x0e,0xb3,0x95,0xae,0x8f,0x8d,0x8c,0x92 -,0x88,0xad,0x31,0x8f,0x9d,0x0e,0xbc,0x15,0xc6,0x81,0x9a,0xb2,0x9a,0xc1,0x1d,0x1a,0x05,0x0a,0x05,0x03,0x08,0x0f,0x05,0x10,0x06,0x0b,0x15,0x09,0x1b,0x1f,0x14,0xaa -,0x91,0xbd,0xa4,0x9e,0x94,0xaf,0xa4,0xbb,0x9f,0x98,0x94,0x8a,0x89,0x93,0x85,0x89,0x84,0x82,0x84,0x8b,0x9a,0x83,0x1f,0x2b,0xc7,0x8c,0x14,0x09,0xab,0x07,0x0f,0x0f -,0x0e,0x0e,0x11,0x0b,0xcc,0x1c,0x0a,0x0a,0x00,0x13,0x05,0x04,0x06,0x16,0x28,0x15,0x30,0xc4,0x14,0x22,0x9c,0x4b,0x8d,0x84,0x87,0x9c,0x93,0x8f,0x8a,0x85,0x81,0x8a -,0x99,0x8f,0x8b,0x80,0x89,0x8e,0x44,0xa1,0xa4,0x95,0x8f,0x46,0x15,0x12,0x2e,0x2f,0x36,0x0c,0x01,0x07,0x0b,0x0c,0x0c,0x03,0x04,0x0a,0x0d,0x0d,0x0c,0x0a,0x01,0x36 -,0xc8,0x99,0xa1,0x28,0x8c,0x8d,0x8b,0x8d,0x41,0x21,0x9c,0x92,0x94,0xfe,0x99,0x90,0x99,0x8d,0x80,0x89,0x9c,0x92,0x84,0x82,0x8c,0x9b,0x09,0x15,0x36,0xd3,0x99,0x1e -,0x08,0x04,0x1f,0x9a,0x0e,0x01,0x1a,0x1a,0x15,0x2f,0x0e,0x1b,0x10,0x06,0x03,0x0c,0x0e,0x1c,0x13,0x37,0x81,0xcd,0x9e,0x25,0xad,0x89,0x8e,0x86,0x46,0x90,0x96,0x38 -,0xa8,0x8b,0x84,0x81,0x90,0xba,0x91,0xa2,0x85,0x4b,0xa5,0x8e,0x9f,0x8e,0x18,0xae,0xad,0x0d,0x06,0x38,0x99,0x8f,0x49,0x03,0x04,0x15,0xa8,0x11,0x0d,0x0e,0x00,0xa2 -,0xab,0x27,0xa7,0x01,0x01,0x27,0x8c,0x84,0x9a,0x90,0x8b,0xa0,0x8e,0x2b,0x05,0x8e,0x84,0xa7,0x0c,0x02,0x95,0xd6,0x00,0x20,0x07,0x14,0x8f,0x9a,0xa1,0x1a,0x10,0x0c -,0x06,0xaf,0x98,0xc4,0x0f,0x15,0x0e,0x03,0x05,0x13,0xa5,0xaf,0x8d,0x39,0x92,0x1e,0x24,0x85,0x8b,0x87,0x92,0x8f,0xab,0x8f,0x86,0x92,0x14,0x13,0x8b,0x81,0x81,0x88 -,0x89,0x8f,0x21,0xc4,0x91,0x80,0x8c,0x92,0x95,0x87,0xad,0x0a,0x0f,0xa7,0x84,0xa9,0xac,0x05,0x8a,0xd2,0x15,0xc8,0x38,0x1f,0x00,0x8e,0x5d,0x0e,0x00,0x05,0x00,0x07 -,0x93,0x0f,0x1f,0x07,0x00,0x0a,0x26,0x9c,0x00,0x05,0x01,0x14,0x8b,0x4e,0x25,0x00,0x03,0x05,0x95,0x80,0x81,0x90,0x2a,0x8f,0x9b,0x89,0x9c,0x85,0x80,0x8a,0x9d,0x89 -,0x85,0xd9,0x2d,0x0c,0x86,0x82,0x83,0x51,0x0a,0xa4,0x87,0xce,0x13,0x14,0x0e,0xc3,0x22,0xb8,0x0a,0x06,0x0b,0x00,0x0c,0xae,0xa7,0x34,0x1c,0x09,0x05,0x0b,0x97,0xae -,0x18,0x27,0x95,0x84,0x8a,0xed,0x04,0x09,0x2f,0x80,0x82,0x80,0xa6,0x0f,0x63,0x9a,0x80,0x84,0x89,0xe1,0x97,0x80,0x86,0x86,0x53,0x13,0x02,0x25,0x84,0x95,0xb2,0x04 -,0x01,0x08,0x14,0x0d,0x00,0x07,0x00,0x04,0x05,0x08,0x09,0x00,0x02,0x00,0x0f,0x21,0xb4,0x0d,0x02,0x08,0x0a,0x0b,0x1c,0x9f,0xa9,0x3a,0x91,0x94,0x97,0x84,0x2d,0x97 -,0x8d,0x83,0x80,0x81,0x85,0x96,0xab,0x87,0x84,0x86,0x9a,0x8d,0x83,0x8a,0x8d,0x8e,0x95,0x0a,0x00,0x26,0x82,0x82,0x8a,0x0c,0x0d,0x04,0xa4,0x88,0x8b,0xda,0x14,0x91 -,0x31,0xb4,0x11,0x05,0x05,0x00,0x96,0x89,0x92,0x1c,0x00,0x02,0x04,0xb3,0xba,0x2e,0x23,0x0c,0x0d,0x0e,0xa8,0x1a,0x00,0x05,0x05,0x8e,0x96,0x89,0x42,0x18,0x15,0x2a -,0x91,0x8c,0x85,0x8e,0x94,0x8c,0x81,0x8c,0x8d,0xba,0x18,0x20,0x80,0x8a,0x80,0xd8,0x05,0x05,0x0d,0xa1,0x89,0xb3,0x0f,0x0d,0x0d,0x0e,0x11,0x36,0x05,0x05,0x04,0xa4 -,0x89,0x87,0x09,0x01,0x08,0x09,0x89,0x8a,0x91,0x8f,0xa3,0x9f,0x9c,0x8e,0x97,0xaa,0x90,0x94,0x80,0x81,0x80,0x8b,0xa2,0xa9,0x8a,0x80,0x81,0x8b,0x99,0xa7,0x97,0xba -,0x95,0x96,0x2e,0x44,0x05,0x67,0x4d,0x91,0x12,0x03,0x0f,0x00,0x08,0x1a,0xe0,0x0c,0x06,0x00,0x04,0x00,0x05,0x04,0x03,0x00,0x06,0x14,0xa5,0x21,0x00,0x07,0x00,0x1b -,0xbf,0x94,0x9b,0x9d,0x15,0xb1,0x98,0x92,0x86,0x9f,0x9b,0x8d,0x80,0x82,0x80,0x8b,0x98,0x96,0x8c,0x84,0x80,0x82,0x89,0xa1,0x95,0xa7,0x8f,0x8e,0xb8,0x4a,0x0e,0x0f -,0x9d,0x89,0x4e,0x0a,0x06,0x06,0x16,0x92,0x9e,0xe2,0x29,0x0f,0x02,0x16,0xa9,0xbe,0x46,0x04,0x0f,0xa9,0x8e,0x8b,0x1e,0x02,0x03,0x0d,0xb4,0x91,0x8f,0x9b,0x0b,0x06 -,0x07,0xbd,0x8f,0x33,0x0b,0x04,0x28,0x92,0x85,0xa3,0x20,0x15,0x00,0x1a,0x97,0x83,0x9b,0x0d,0xdd,0x19,0xac,0x97,0xa4,0x2a,0x01,0x38,0x91,0x89,0xa3,0x21,0x0a,0x0f -,0x29,0x42,0x86,0xa1,0x18,0x0b,0x0e,0x16,0xa8,0x9f,0x5f,0x11,0x1b,0xb3,0x8b,0x80,0x73,0xb4,0x0f,0x1c,0x9e,0x87,0x81,0x82,0xa1,0x1d,0x22,0xa3,0x80,0x8b,0x94,0x47 -,0x98,0x93,0x81,0x81,0x84,0x99,0x0d,0xc9,0x88,0x81,0x86,0x8f,0x66,0x9f,0x2d,0xaa,0xa2,0x2c,0x0b,0x05,0x1d,0x20,0x92,0x21,0x04,0x03,0x04,0x03,0x27,0x26,0x07,0x05 -,0x04,0x01,0x04,0x0f,0x04,0x05,0x05,0x0b,0x0d,0xa3,0x30,0x13,0x09,0x00,0xc3,0x92,0x83,0x81,0x89,0xa0,0x4c,0x94,0x89,0x8e,0x88,0x8e,0x94,0x85,0x83,0x80,0x8a,0xb6 -,0xcc,0x1e,0x2d,0x8f,0x82,0x88,0xa3,0x25,0x09,0x2e,0x9d,0x24,0x16,0x0e,0x21,0x16,0x90,0x8a,0xa9,0xa5,0x0b,0x26,0xaa,0x89,0x8b,0x8b,0xdb,0x12,0x43,0x95,0x93,0x98 -,0x22,0x0e,0x4b,0x44,0x89,0x3d,0x11,0x0f,0x07,0x0f,0xae,0x8f,0xa2,0x07,0x01,0x02,0x05,0x18,0x0d,0x1b,0x04,0x09,0x28,0xc0,0xa2,0x30,0x09,0x07,0x0d,0x5b,0x8b,0x81 -,0x89,0x4a,0x0e,0x19,0x98,0xa7,0x9a,0x1b,0x0b,0xb9,0xa8,0x89,0xa0,0x7a,0x1e,0x07,0xde,0xa2,0x8b,0x88,0x1b,0x52,0x0d,0x67,0x92,0xa8,0x8d,0x15,0xaa,0xa0,0x8d,0x8e -,0xae,0x5c,0x0a,0xb1,0x88,0x8a,0x80,0x8b,0x42,0x12,0x1e,0x8d,0x8b,0x82,0x9e,0x9e,0x8d,0x8c,0x80,0x9d,0xab,0x0f,0x07,0x9c,0x86,0x83,0x8f,0xd8,0x0c,0x0a,0x14,0x3d -,0xb7,0x16,0x00,0x14,0x0e,0xd4,0xea,0x03,0x0d,0x00,0x04,0x0c,0x33,0x12,0x06,0x03,0x01,0x05,0x24,0x51,0x34,0x0c,0x07,0x18,0x32,0x8b,0x78,0x1a,0x0b,0x19,0x9c,0x88 -,0x80,0x9b,0x27,0x3c,0x19,0x85,0x8f,0x90,0x91,0x1e,0x8d,0x85,0x80,0x8d,0x97,0x13,0x1d,0x9c,0x8a,0x81,0x82,0xab,0x9f,0x38,0x2d,0x8c,0xab,0xa0,0x29,0xb8,0xa9,0x83 -,0x91,0x9e,0x9f,0x04,0x31,0x90,0x9c,0x82,0xaa,0x05,0x14,0x0e,0xa1,0x9a,0x9f,0x0e,0x14,0x28,0xd6,0x89,0x0f,0x13,0x09,0x02,0xa7,0x92,0x9e,0xa2,0x0c,0x00,0x08,0x0d -,0x0c,0x2b,0x0a,0x00,0x41,0x17,0x8f,0x9b,0x0b,0x0c,0x02,0x08,0x98,0x89,0x8f,0x97,0x1e,0x0a,0xa3,0x98,0xb7,0x92,0x05,0x3c,0x8e,0x8c,0x86,0x8e,0x14,0x0b,0xa5,0xa1 -,0x80,0x88,0x1f,0x23,0x0c,0x10,0x82,0x9e,0x98,0xca,0x1a,0xb6,0x89,0x9e,0x2a,0xd8,0x01,0x2e,0x91,0x8e,0x80,0x8f,0x17,0xdd,0x16,0xa2,0x82,0x8f,0xa3,0x8e,0x8b,0x89 -,0x80,0x9a,0x95,0x23,0x09,0x9a,0x88,0x96,0x89,0x23,0x06,0x20,0x58,0x3d,0xa2,0x0e,0x00,0x23,0x07,0xed,0x2a,0x02,0x01,0x03,0x00,0x1e,0x2d,0x07,0x08,0x01,0x00,0x10 -,0x18,0x0d,0x45,0x01,0x1b,0x9a,0x9f,0x9e,0x2e,0x00,0x08,0x24,0xb2,0x80,0x80,0x9a,0xa5,0x34,0x18,0x81,0x97,0x9c,0x9a,0x8f,0x89,0x80,0x8a,0x91,0x9b,0x08,0x99,0x89 -,0x88,0x82,0x94,0x17,0xa7,0xc0,0x97,0x86,0x98,0x1d,0x95,0x7d,0x9e,0x83,0x27,0x9f,0x2d,0x3b,0x9c,0x87,0x98,0x95,0x1d,0x01,0x0c,0x22,0x1f,0x98,0x16,0x0c,0xac,0x1b -,0x9f,0x1a,0x08,0x00,0x09,0x05,0x9e,0x8c,0x2c,0x1d,0x0a,0x00,0x2d,0x1f,0x0f,0x1a,0x01,0x24,0x97,0x88,0x5f,0x41,0x03,0x0f,0xb1,0xb2,0x88,0x99,0x11,0x22,0x1e,0x2d -,0x8e,0xc4,0x20,0x26,0x9f,0xa6,0x80,0x38,0x35,0x31,0x0d,0x8f,0x85,0x89,0x87,0x9b,0x1b,0xc3,0x4f,0xaa,0x90,0x9a,0x26,0x88,0xa5,0x8b,0x95,0x12,0x0e,0x0a,0x1d,0x9b -,0x83,0x92,0x93,0x4f,0x1c,0xb0,0x8c,0xa7,0x92,0x15,0xdb,0x8b,0x84,0x8a,0x9f,0x1f,0x09,0x9c,0xa2,0x88,0x92,0x13,0x0d,0x23,0x14,0x99,0x4f,0x0d,0x09,0x0d,0x20,0x95 -,0xc0,0x04,0x0f,0x00,0x1f,0xad,0xa4,0xb5,0x21,0x03,0x08,0x08,0x11,0x4a,0x33,0x0c,0x2d,0xa5,0x9a,0x82,0x29,0x2c,0x0a,0x0d,0xac,0x86,0x89,0x91,0x33,0x0e,0x2a,0x99 -,0x93,0x95,0x1d,0x08,0x9e,0x96,0x80,0x9d,0x1c,0x04,0x12,0xb4,0x8b,0x88,0x25,0x0b,0x0a,0x17,0x96,0x8e,0x3d,0x2a,0x0a,0xa6,0x8e,0x83,0xa4,0xd6,0x13,0x1a,0x89,0x8a -,0x84,0x94,0x1d,0x1b,0xde,0xb9,0x8a,0xa9,0x2d,0x18,0xa8,0x97,0x80,0x9b,0x17,0x12,0x01,0x2b,0x97,0x8b,0x98,0x23,0x06,0x1b,0x33,0x98,0xaf,0x1a,0x02,0x1c,0xa7,0x89 -,0x88,0x0f,0x0a,0x03,0x26,0x95,0x87,0xa5,0x1b,0x05,0x0a,0x2b,0x96,0xcf,0x1d,0x03,0x0a,0xb4,0xad,0x98,0x0b,0x08,0x01,0x1f,0xaa,0x8c,0x97,0x16,0x09,0x0b,0x18,0x92 -,0x98,0x42,0x1e,0x0b,0x92,0x8a,0x80,0xba,0x2a,0x08,0x15,0x99,0x8f,0x87,0xaf,0x12,0x1f,0xb7,0x94,0x87,0xd7,0x23,0x0d,0x9a,0x8f,0x80,0x96,0x4b,0x2c,0x0e,0x8d,0x84 -,0x84,0x8e,0x44,0x1a,0x98,0x8e,0x84,0x8e,0xa8,0x0e,0x9e,0x90,0x88,0x8c,0x0a,0x0b,0x02,0x1f,0xa0,0x8e,0x29,0x0a,0x02,0x06,0x14,0xa3,0x2b,0x1e,0x09,0x1e,0x89,0x8b -,0x83,0x30,0x19,0x02,0x17,0xa3,0x88,0xad,0x07,0x01,0x07,0x0d,0x2b,0x1d,0x04,0x04,0x00,0x13,0x2b,0x9a,0x0c,0x07,0x01,0x10,0x9c,0x92,0x99,0x33,0x12,0x26,0x9a,0x8f -,0x80,0x90,0xa0,0x7c,0x85,0x85,0x80,0x8d,0x97,0x9d,0xbd,0x81,0x81,0x80,0x84,0x98,0x22,0x9a,0x90,0x82,0x91,0x39,0x08,0xa8,0x88,0x82,0x8a,0x0b,0x0a,0x05,0xbb,0x94 -,0x94,0x17,0x0d,0x04,0x0e,0x18,0xac,0x1e,0x04,0x00,0x07,0x9d,0xa1,0x9f,0x05,0x12,0x19,0x97,0x87,0x87,0x86,0x8f,0xdc,0x33,0xb3,0x8f,0x83,0x2a,0x0c,0x00,0x1f,0xd2 -,0x9f,0x0e,0x00,0x00,0x03,0x2a,0xa1,0x9c,0x14,0x04,0x04,0x22,0xc0,0x8c,0x1a,0x0c,0x08,0xac,0x85,0x82,0x8e,0x11,0x19,0x0d,0x92,0x8a,0x8d,0xb5,0x3d,0x1e,0x95,0x96 -,0x8b,0x95,0x2c,0x22,0x40,0x84,0x88,0x80,0x34,0x37,0x1f,0x9d,0x82,0x81,0x8d,0xab,0x11,0x1e,0x9b,0x8e,0x88,0x25,0x0f,0x08,0x96,0x98,0x90,0x0f,0x00,0x01,0x04,0xbf -,0x8f,0xa9,0x08,0x02,0x05,0xb8,0x95,0x86,0x34,0x20,0x40,0x84,0x80,0x80,0x8b,0x1e,0xb5,0xbd,0x89,0x8d,0x9a,0x0f,0x07,0x05,0x1d,0x13,0x20,0x0d,0x01,0x04,0x03,0x23 -,0x16,0x24,0x03,0x07,0x01,0x0d,0x3f,0xa9,0x2f,0x10,0x05,0x0e,0x32,0xa5,0x8d,0x2c,0x1c,0x12,0x8b,0x86,0x80,0x9b,0x1f,0x46,0xb2,0x82,0x80,0x86,0x9c,0x77,0xd4,0x8a -,0x8f,0x89,0xca,0x28,0x20,0x95,0x83,0x88,0x8e,0x0a,0x16,0x13,0xa0,0x88,0x95,0x18,0x10,0x0d,0x31,0xb7,0xe7,0x2f,0x0a,0x0a,0x0a,0x90,0x94,0x89,0xed,0x19,0x45,0x9e -,0x81,0x81,0x89,0xa6,0xaf,0x9d,0x86,0x8e,0x8c,0x2e,0x14,0x07,0x26,0xb5,0x23,0x12,0x00,0x05,0x02,0x20,0x2d,0x23,0x09,0x09,0x05,0x1b,0x1f,0x2a,0x1a,0x06,0x0c,0x1b -,0x88,0x95,0x95,0x09,0x0d,0x14,0xdf,0x8d,0x9d,0xc9,0x21,0x27,0x5e,0x98,0xc7,0x9e,0x1b,0x2b,0x16,0x8e,0x89,0x8b,0xa0,0x0f,0xa7,0xa4,0x86,0x8a,0x8f,0xaa,0x97,0xb0 -,0x8f,0x95,0x8f,0x9d,0x2c,0x19,0x59,0x85,0x9b,0xba,0x00,0x0a,0x0b,0x3f,0xa8,0x20,0x0f,0x14,0x1d,0x33,0xa6,0xb7,0x8c,0x9f,0x98,0x99,0x80,0x83,0x80,0x96,0x31,0x94 -,0xab,0x8b,0x9d,0x5a,0x17,0x17,0x07,0x13,0x08,0x0c,0x07,0x03,0x03,0x0d,0xc5,0x1c,0x24,0x00,0x0d,0x08,0x18,0x3e,0x23,0x18,0x22,0x17,0x1e,0xae,0x56,0x97,0x32,0x42 -,0x2c,0x84,0x8f,0x87,0xba,0x1e,0x96,0xab,0x89,0x8e,0x8f,0xa1,0x9b,0x2d,0x99,0xae,0x98,0x56,0x26,0x1f,0x99,0x8c,0xb0,0xa5,0x04,0x28,0x14,0x55,0xa1,0x9f,0x6a,0x41 -,0x12,0x17,0x41,0x2f,0x50,0x0c,0x0f,0x2c,0x80,0x8e,0x86,0x30,0x2c,0x8f,0x93,0x81,0x83,0x85,0x88,0x88,0x9a,0x89,0xa8,0xa9,0x1b,0x09,0x05,0x3d,0x49,0x14,0x11,0x00 -,0x0b,0x05,0x17,0x1b,0x15,0x0a,0x29,0x0e,0x17,0x1d,0x10,0x2b,0x19,0x0f,0x1f,0x8d,0x2f,0x9e,0x09,0x0b,0x2c,0x31,0x9f,0x9d,0xcf,0xdb,0xb4,0x0f,0xc6,0x2c,0xa9,0xac -,0xcf,0x2e,0x84,0x89,0x87,0x8e,0x0b,0xc1,0xb2,0x8c,0x84,0x89,0xa8,0x8a,0xb5,0xa7,0xa5,0x2d,0xea,0xde,0x10,0x2d,0x8e,0x26,0x93,0x0b,0x05,0x0c,0x0c,0x1f,0xac,0x1b -,0x3a,0xa1,0x28,0x8c,0x8b,0x88,0x86,0x8f,0xa0,0x80,0x84,0x80,0x89,0x26,0x9f,0x9c,0xc1,0x9e,0xd3,0x07,0x17,0x03,0x04,0x0b,0x07,0x03,0x08,0x00,0x0f,0x9f,0x0e,0x22 -,0x06,0x03,0x0f,0x11,0x11,0x9a,0x54,0x4c,0xac,0x0e,0x44,0xa0,0x6e,0xb9,0x67,0x15,0x83,0x87,0x86,0x8c,0x1f,0x35,0x9f,0xad,0x8f,0x85,0x9e,0x91,0x43,0x1e,0x9b,0x9c -,0x21,0x21,0x07,0xb9,0x80,0x8e,0x9a,0x11,0x0a,0x3f,0xa5,0x33,0x9a,0xdb,0x1f,0x43,0x10,0x1f,0xa9,0x1e,0x15,0x14,0x0e,0x8a,0x86,0x8d,0x92,0x2f,0xd3,0x8e,0x87,0x85 -,0x80,0x8c,0x8e,0xa1,0x2a,0xbf,0xcd,0x13,0x13,0x03,0x0f,0x9f,0x2e,0x10,0x04,0x00,0x03,0x0e,0x0d,0x35,0x29,0x10,0x29,0x17,0x18,0x2e,0x14,0x0a,0x0c,0x08,0xa1,0x8b -,0x98,0xb6,0x19,0x0f,0x2d,0xab,0x9d,0x8b,0xa6,0xb8,0xb9,0xad,0x94,0x8e,0xaa,0xec,0x24,0xb3,0x83,0x84,0x87,0xa5,0x22,0x28,0x94,0x8b,0x87,0x95,0x45,0xbf,0xa6,0xa1 -,0xb4,0x1b,0x08,0x0a,0x0f,0xa7,0x98,0x4a,0x0c,0x04,0x07,0x1c,0xb5,0xdb,0xb1,0xc5,0x99,0x8c,0x8b,0x8a,0x89,0x91,0x91,0x8d,0x87,0x80,0x85,0x8d,0xcf,0x23,0x17,0x1e -,0x15,0x13,0x0d,0x06,0x0b,0x09,0x0c,0x0a,0x07,0x02,0x04,0x05,0x14,0x2f,0x1f,0x16,0x10,0x18,0x2d,0xad,0xbf,0xc4,0x38,0x60,0xb1,0xa5,0x9b,0x9c,0xa4,0x45,0x33,0xcc -,0x99,0x93,0xa8,0x2f,0xec,0xb0,0x98,0x95,0x93,0x96,0xa1,0xa5,0xd7,0xaf,0x9f,0x9d,0xb4,0x52,0xfe,0x9e,0x8f,0x97,0x41,0x1b,0x1d,0x5a,0xc3,0xcd,0x47,0x1c,0x22,0x29 -,0x4a,0xc8,0x2d,0x22,0x27,0xc6,0x9c,0x94,0x96,0x8d,0x8a,0x8d,0x89,0x88,0x8b,0x89,0x8d,0x99,0xa6,0x3a,0x2a,0x21,0x1f,0x1b,0x0f,0x08,0x06,0x07,0x0b,0x0d,0x14,0x0a -,0x07,0x0b,0x13,0x24,0x1f,0x12,0x0e,0x14,0x1f,0x36,0x25,0x29,0xb0,0x98,0x9b,0xa0,0x5a,0x3b,0x5e,0xba,0xad,0x9f,0xac,0xac,0xb8,0x9d,0x95,0x99,0xb2,0xd4,0xac,0x98 -,0x8a,0x8e,0x95,0xb0,0xa8,0xb6,0xa4,0xd1,0xa7,0xaf,0xbb,0x4f,0x40,0xbf,0xbb,0xa8,0x38,0xc3,0xcd,0x9e,0xa2,0xa0,0xc4,0x45,0x1e,0x36,0xe3,0xc8,0xe4,0x23,0x21,0x17 -,0x27,0x21,0xdc,0x2d,0x27,0x22,0x3d,0xc0,0xa6,0xea,0x24,0x26,0x23,0x4e,0xd7,0xac,0x45,0x41,0x1c,0x21,0x2c,0x21,0x1d,0x1c,0x1f,0x33,0xc5,0x4d,0x37,0x25,0x27,0x2f -,0x52,0xda,0xa2,0xa6,0xa1,0x9d,0xca,0xdf,0x71,0x45,0x4b,0x33,0x1f,0x36,0xb5,0xbe,0x46,0x39,0x2f,0xb7,0xa8,0xa4,0xbd,0x24,0x2b,0x25,0x37,0x54,0x67,0x27,0x45,0xbd -,0x9f,0x9a,0xbc,0x43,0xc2,0xa8,0x9a,0x8b,0x8e,0x8c,0x8d,0x8a,0x8c,0x90,0x9c,0xad,0xae,0x78,0xc2,0x50,0x46,0x2b,0x20,0x22,0x1b,0x0d,0x09,0x0d,0x11,0x1d,0x1b,0x15 -,0x0e,0x16,0x1e,0x3b,0xf3,0x2d,0x1d,0x1c,0x2b,0x65,0xb6,0xcf,0x48,0x39,0xa7,0xa6,0xc6,0x1e,0x1f,0x1b,0x26,0x38,0x37,0x72,0xb0,0xc4,0x36,0xbf,0xe3,0x41,0x1f,0x1d -,0x22,0x6d,0xe9,0xad,0xbc,0x5e,0xef,0x46,0x3b,0xbb,0xb3,0x78,0xf1,0x2d,0x3f,0x5c,0xab,0xaf,0x5e,0x32,0xdf,0xac,0x94,0x8b,0x93,0x98,0x98,0x95,0x8d,0x89,0x8d,0x97 -,0x9d,0x9b,0x91,0x98,0xa2,0xad,0xc6,0xaa,0x9a,0xb3,0x36,0xa0,0xc0,0x28,0x95,0x8a,0x02,0x14,0x92,0x10,0x35,0x20,0x17,0x0c,0x03,0x06,0x03,0x06,0x00,0x08,0x05,0x00 -,0x05,0x06,0x0d,0x0a,0x04,0x04,0x08,0x08,0x0a,0x0e,0xbe,0x47,0x0c,0x0e,0x11,0x1f,0x20,0x95,0x85,0x8b,0x87,0x8a,0x9c,0x8a,0x81,0x80,0x82,0x84,0x80,0x81,0x82,0x82 -,0x82,0x84,0x81,0x81,0x81,0x85,0x88,0x9a,0xaf,0x9c,0xa2,0xac,0x92,0x83,0x83,0x8e,0x91,0x8d,0x9a,0x9e,0x9b,0xac,0xc0,0x46,0x0c,0x03,0x03,0x03,0x01,0x01,0x05,0x02 -,0x00,0x00,0x00,0x02,0x04,0x05,0x05,0x03,0x02,0x02,0x02,0x08,0x13,0x0c,0x04,0x07,0x0e,0x0a,0x09,0x0e,0x08,0x03,0x06,0x11,0x3e,0x44,0x1e,0x0c,0x19,0xa9,0x99,0x93 -,0x8b,0x82,0x84,0x85,0x85,0x85,0x83,0x82,0x80,0x80,0x80,0x81,0x8a,0x88,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x84,0x84,0x83,0x81,0x81,0x82,0x83,0x83,0x85,0x87,0x84 -,0x8e,0xfc,0xd7,0x8c,0x83,0x86,0x8f,0x98,0xb7,0xef,0x9b,0xa5,0xcf,0x1d,0x0c,0x03,0x08,0x0d,0x0b,0x06,0x09,0x08,0x01,0x01,0x03,0x06,0x08,0x08,0x03,0x03,0x02,0x01 -,0x00,0x00,0x00,0x07,0x08,0x02,0x02,0x00,0x00,0x02,0x01,0x01,0x05,0x03,0x07,0x08,0x06,0x0c,0x07,0x0a,0x0d,0x05,0x11,0x20,0x11,0x10,0x02,0x0b,0x1f,0x0e,0x30,0xaa -,0x98,0xa7,0x0b,0x05,0xa6,0x88,0x84,0x8b,0x9c,0x87,0x84,0x86,0x84,0x89,0x88,0x85,0x89,0x85,0x83,0x80,0x84,0x85,0x81,0x81,0x83,0x84,0x83,0x81,0x80,0x81,0x82,0x82 -,0x80,0x81,0x82,0x84,0x80,0x87,0x94,0xa7,0x9e,0x46,0x9e,0x85,0xaf,0xb6,0x1d,0x13,0xa8,0xaf,0x9d,0x9e,0x16,0x1b,0x0e,0x23,0x96,0xa5,0x99,0x95,0xbb,0x39,0x17,0x1e -,0xeb,0x0a,0x98,0x92,0x3b,0x89,0x93,0x8c,0xae,0x0e,0x92,0x8d,0x8f,0x86,0x9c,0x85,0x92,0xaf,0x8f,0x97,0x91,0xb3,0x16,0xab,0x1e,0x0b,0x93,0x1a,0xe4,0xaa,0x23,0x30 -,0x00,0x07,0x0d,0x02,0x09,0x06,0x09,0x09,0x00,0x02,0x00,0x03,0x00,0x01,0x00,0x01,0x00,0x08,0x0d,0x02,0x07,0x01,0x09,0x02,0x00,0x09,0x05,0x01,0x03,0x00,0x09,0x05 -,0x07,0x09,0x01,0x01,0x00,0x00,0x03,0x01,0x0d,0x9f,0x11,0x10,0x0c,0x0d,0x16,0x07,0xaf,0x8e,0x93,0x8c,0x9c,0x8b,0x8e,0x90,0x81,0x82,0x81,0x8d,0x8c,0x83,0x85,0x83 -,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x80,0x84,0x81,0x81,0x81,0x80,0x82,0x82,0x85,0x83,0x86,0x85,0x86,0x8f,0xab,0x89,0x80,0x86,0x80,0x83,0x81,0x91,0x9e,0x85 -,0x89,0x88,0x86,0x88,0x80,0x86,0x83,0x87,0x88,0x8a,0x8f,0x8f,0x8d,0xab,0x94,0x84,0x31,0x33,0x14,0x0e,0x04,0x00,0x06,0x03,0x03,0x02,0x00,0x00,0x00,0x00,0x02,0x02 -,0x01,0x00,0x00,0x00,0x00,0x01,0x15,0x05,0x08,0x05,0x01,0x03,0x00,0x05,0x04,0x04,0x05,0x01,0x0b,0x03,0x08,0x0b,0x08,0x0b,0x05,0x0b,0x0d,0x08,0x14,0x8d,0xd4,0x95 -,0x8b,0x8d,0x91,0x2a,0x8f,0x8f,0x90,0x8a,0x90,0x81,0x86,0x84,0x86,0x92,0x97,0xbf,0xaa,0x99,0xa3,0x97,0x80,0x9f,0x9d,0xa9,0x9e,0x9b,0x27,0x8e,0x9b,0xce,0xa5,0xac -,0x8c,0x9e,0x95,0x89,0x93,0x98,0xc8,0x3a,0x21,0x0d,0x26,0x85,0xa0,0x96,0x9e,0xb5,0x24,0x00,0x23,0x16,0x19,0x2c,0x1f,0xb6,0x0c,0x0d,0x15,0x0c,0x0d,0x0c,0x15,0x18 -,0x07,0x34,0x90,0x1c,0xb3,0xb6,0x9d,0x24,0x05,0x6f,0x18,0x44,0xa2,0xa2,0x8f,0x2d,0xaa,0xb0,0x6d,0x30,0x1f,0x2e,0x20,0x0e,0x9a,0x8c,0x2a,0xb8,0x2e,0xbc,0x0f,0x17 -,0x8f,0xa9,0xab,0x64,0xb3,0xb5,0x2e,0x99,0x8f,0x91,0x9f,0xac,0x9a,0xac,0xb1,0x83,0x84,0x85,0x80,0x83,0x83,0x97,0x87,0x80,0x85,0x80,0x86,0x80,0x92,0xa4,0x9e,0xab -,0x47,0x0b,0x0a,0x09,0x02,0x03,0x2d,0x09,0x03,0x08,0x07,0x09,0x00,0x13,0x0b,0x03,0x07,0x08,0x1a,0x0b,0x16,0x1a,0x16,0x13,0x09,0x0e,0x15,0x09,0x2c,0x95,0x1a,0x25 -,0x20,0xc0,0x1a,0x16,0x91,0xb4,0x9b,0xa1,0x9c,0x92,0xbc,0x94,0x8f,0x8e,0x8d,0xa3,0x9f,0xa8,0x4e,0x84,0x8b,0x91,0x85,0x88,0x84,0xb2,0x95,0x8a,0xb5,0x99,0x9e,0x8e -,0x9a,0x3b,0x44,0x1e,0x1a,0x13,0x0c,0x19,0x0e,0x0f,0x9a,0x15,0x2d,0xef,0xb8,0xaf,0x0f,0x9b,0xba,0x33,0xeb,0x2f,0xbd,0x1d,0x2b,0xde,0x1e,0x0f,0x0a,0x04,0x0e,0x02 -,0x2e,0xac,0x0d,0xda,0x20,0x3b,0x0c,0x0d,0xce,0x16,0x3f,0xc6,0x9c,0xa6,0x34,0xc8,0xb8,0xad,0x37,0x2d,0x20,0x1c,0x0f,0x8d,0x94,0x9f,0x88,0x91,0x8d,0x2d,0x8f,0x8e -,0xb3,0x96,0x98,0x8d,0xa6,0xae,0xb5,0x2c,0x13,0x0d,0x09,0x11,0x0c,0x1f,0x88,0x29,0xbc,0x38,0x3b,0x2b,0x14,0x8e,0xb4,0xb1,0xa7,0x9a,0x8f,0xa1,0x8c,0x8a,0x8a,0x8f -,0x99,0x98,0x9b,0xa2,0x87,0x83,0x8a,0x84,0x88,0x8b,0x2b,0x6e,0x97,0x2a,0x42,0x1f,0x2c,0x14,0x08,0x0c,0x08,0x06,0x05,0x00,0x02,0x02,0x04,0x48,0x0a,0x0a,0x0e,0x12 -,0x15,0x01,0x44,0x1d,0x10,0x22,0x2d,0x9d,0x31,0x67,0x77,0x28,0x17,0x0d,0x0a,0x1c,0x19,0x96,0x85,0xa8,0x8d,0x98,0x8c,0xac,0xa0,0x80,0x8f,0x8b,0x8b,0x8a,0x8a,0x92 -,0x8b,0x8d,0x98,0x9a,0x9b,0xa1,0x9b,0x2c,0x89,0x90,0xb0,0x8d,0x9e,0x9b,0x0f,0x37,0xb0,0x0f,0x1c,0x27,0xcb,0x2e,0x21,0x24,0x1e,0x15,0x19,0x0f,0x15,0x13,0x19,0x8a -,0x42,0xd6,0xb4,0xbf,0x29,0x0a,0xb0,0x2f,0x0f,0x1a,0x1c,0x2c,0x13,0x1b,0x19,0x0f,0x08,0x07,0x04,0x0c,0x07,0x29,0x90,0x18,0xb9,0x2c,0xb1,0x21,0x22,0x8a,0xab,0x9f -,0x94,0x9a,0x9d,0x32,0xa4,0xa9,0xb6,0xba,0xc7,0xb9,0xab,0x2e,0x8b,0x8c,0xa8,0x8c,0x9b,0x8f,0x1f,0xdf,0x93,0x20,0x4f,0xed,0xa4,0xa6,0xac,0x97,0xb2,0x35,0x19,0x1f -,0x1b,0x5c,0x2a,0x87,0x99,0xba,0x8f,0xa0,0x96,0x29,0x90,0x86,0x9b,0x8b,0x8c,0x89,0x8a,0x8b,0x85,0x8b,0x98,0xb3,0xd6,0x36,0xd3,0x36,0x85,0x2d,0x25,0x58,0x1c,0x16 -,0x00,0x0e,0x0a,0x03,0x06,0x05,0x0a,0x05,0x06,0x09,0x06,0x03,0x04,0x03,0x04,0x02,0x09,0x9f,0x0d,0x29,0x66,0x67,0x37,0x0c,0xa1,0x39,0x1f,0xbe,0xb8,0x93,0xac,0x95 -,0x8c,0x96,0xba,0x63,0x47,0x9d,0xa8,0x8f,0x82,0xab,0x8b,0x91,0x8d,0xa7,0xe0,0x88,0x95,0x98,0x8c,0x8b,0x88,0x9c,0x90,0x8e,0x91,0xa5,0xab,0x2f,0x31,0x16,0xa0,0x87 -,0x23,0x9c,0xd9,0xb6,0x1a,0x0d,0xac,0x1d,0x1b,0x33,0x35,0xad,0x1a,0x47,0x55,0x18,0x0f,0x0c,0x0a,0x0d,0x03,0xb5,0xa1,0x0f,0xb7,0x30,0xbd,0x0c,0x0c,0xcc,0x14,0x1c -,0x29,0x3f,0x37,0x0c,0x2a,0x31,0x1f,0x13,0x16,0x16,0x19,0x0d,0x8f,0x97,0x25,0x9e,0xc0,0x9e,0x1c,0xd7,0x8b,0xa9,0xa2,0x97,0x8f,0x8f,0xaf,0x8b,0x8c,0x9b,0xb1,0xbf -,0xeb,0x2e,0x14,0x8c,0xa6,0x2e,0x99,0xa0,0x9e,0x0d,0x2f,0xa6,0x28,0x2e,0xcf,0xa4,0x52,0x1a,0xab,0xa5,0xbf,0xcf,0xbe,0xad,0xa6,0xa6,0x80,0x8d,0x8f,0x82,0x84,0x87 -,0xab,0x8d,0x85,0x95,0x8f,0x8f,0x8f,0xb3,0x1f,0xbb,0x29,0x0d,0x08,0x01,0x03,0x02,0x03,0x32,0x07,0x05,0x0a,0x0e,0x0d,0x00,0x0d,0x0e,0x08,0x0e,0x15,0x29,0x0b,0x0e -,0x34,0x33,0x25,0x1e,0x13,0x13,0x0e,0x17,0x8a,0x30,0xae,0x93,0x8d,0x98,0x23,0x8f,0x93,0xb7,0x9c,0x90,0x88,0x9c,0x95,0x88,0x8f,0x9b,0x9f,0xb3,0xa4,0x3a,0xa5,0x81 -,0xce,0x8f,0x8b,0x85,0x91,0x5a,0x89,0x92,0xa0,0x9b,0x9c,0x9c,0x11,0x2e,0xa6,0xd2,0x1c,0x16,0x15,0x19,0x0a,0x24,0x8f,0x12,0xde,0xa6,0x98,0x2c,0x0e,0x9e,0xeb,0x19 -,0x2f,0x2f,0x31,0x05,0x11,0x2b,0x19,0x0b,0x0a,0x08,0x0b,0x01,0x1d,0xa2,0x07,0x29,0x3d,0x9e,0x16,0x0b,0xa3,0xbd,0xe6,0x9d,0x94,0x96,0x17,0x75,0x9c,0xa0,0xb4,0x3b -,0x20,0x1d,0x16,0x8f,0x83,0xbf,0x93,0x93,0x88,0xbd,0x2d,0x8a,0x9a,0x9e,0x9c,0xa8,0xaf,0x13,0xb9,0x9c,0xa7,0x3e,0xe7,0x36,0x20,0x03,0xbc,0x95,0x4f,0x8b,0x9b,0x8e -,0x1a,0x1e,0x89,0x88,0x87,0x8c,0x94,0xad,0x1e,0x8b,0x83,0x82,0x8b,0xb5,0x19,0x1c,0x1c,0x8a,0x8b,0x19,0x23,0x3c,0x8e,0x0c,0x08,0x1a,0x05,0x0f,0x1d,0x1e,0x0a,0x00 -,0x03,0x05,0x1f,0x2c,0x1d,0x0b,0x05,0x00,0xc7,0xac,0x2c,0x99,0xb6,0xb3,0x08,0xad,0x82,0x98,0xcf,0x11,0xbc,0xae,0x23,0xab,0x2a,0x52,0x4b,0xa6,0xaa,0x2c,0x0e,0x93 -,0x9f,0x3b,0x93,0x93,0x8d,0x09,0x1e,0xa1,0xa1,0x89,0x8f,0x95,0x1c,0x17,0x8d,0x83,0x84,0xa8,0x1e,0x15,0x0b,0x12,0x83,0x99,0x2e,0xd3,0x48,0xcc,0x0d,0x9a,0x8a,0x4c -,0x20,0x29,0x92,0xc8,0x1c,0x29,0x1b,0x28,0xaa,0x8d,0x62,0x07,0x07,0x8c,0x91,0x8b,0x89,0x8f,0xa2,0x07,0xc3,0x95,0xa8,0x5c,0x2e,0x3f,0x04,0x0f,0x9c,0x8e,0xaf,0x0f -,0x0a,0x0a,0x0e,0x2c,0x8c,0x18,0x16,0x56,0xa0,0xac,0x06,0x26,0xdc,0x22,0x3a,0xf1,0xa7,0x13,0x26,0x2f,0xa7,0x99,0x8f,0xa0,0x16,0x02,0x0e,0x8a,0xab,0x9b,0x3a,0x35 -,0x0d,0x05,0x93,0x8f,0x9a,0xa3,0xa3,0xa7,0x14,0x3d,0x98,0x8c,0xa4,0x1d,0x18,0x44,0x23,0x93,0x92,0x19,0x8f,0x8d,0x80,0xa0,0x2b,0x93,0xa2,0x8a,0x91,0x8a,0x94,0x24 -,0xa9,0xa0,0x91,0x98,0xa9,0xbd,0x17,0x09,0x96,0xb3,0x4a,0x42,0x24,0xc2,0x07,0x19,0x23,0x13,0x18,0xcb,0x92,0x32,0x15,0x21,0x1f,0x2f,0xda,0xcb,0x39,0x08,0x0e,0x5b -,0x11,0xb2,0x99,0x90,0x1a,0x00,0x16,0x2f,0xa9,0x5d,0xc7,0x3c,0x18,0x30,0x39,0xc2,0x4d,0x27,0x22,0x21,0x17,0x9c,0xae,0x25,0x9c,0x97,0x80,0x8c,0x8b,0x8c,0x38,0x9d -,0x8c,0x81,0x8e,0x1c,0x13,0x25,0x4f,0x21,0x11,0x10,0x06,0x08,0x1e,0x0a,0x0b,0x0b,0x11,0x09,0x00,0x0d,0x12,0x15,0x12,0x1b,0x4f,0xca,0x9e,0xa8,0x43,0x49,0x99,0x8e -,0x8b,0xa7,0x94,0x8c,0xbd,0x8f,0x96,0x86,0x93,0x97,0x8c,0xbb,0xa5,0x96,0x82,0x8a,0xaa,0xd8,0xb4,0x92,0x93,0x96,0x45,0x29,0x29,0x92,0x9c,0x24,0xb5,0x9d,0x8c,0x43 -,0xd4,0xb8,0x2c,0x26,0x2d,0xaf,0xe3,0xb2,0xa4,0x26,0x0d,0x0a,0x14,0x23,0x10,0x06,0x12,0x0a,0x09,0x13,0x2a,0x62,0x0d,0x1b,0x18,0x11,0x1a,0x7b,0xa4,0x2f,0x14,0x18 -,0xaf,0x9e,0xa4,0xaf,0xab,0x4f,0x29,0x90,0x93,0x3a,0x6f,0x95,0x87,0x93,0x99,0xa0,0x5b,0xad,0xa6,0x9a,0xa8,0xbc,0xc2,0x31,0x1b,0x11,0x4b,0xa5,0x28,0x06,0x0d,0x44 -,0x40,0xa8,0x8f,0x8a,0xa3,0x3f,0x9d,0x8f,0x8f,0x8f,0x87,0x83,0x8f,0x92,0x89,0x83,0x89,0x91,0x88,0x8a,0x92,0x9b,0x90,0x97,0x24,0xaf,0x8c,0x91,0x17,0x03,0x0f,0x0b -,0x0c,0x0f,0x18,0x19,0x06,0x06,0x07,0x0a,0x13,0x12,0x0d,0x02,0x01,0x00,0x0f,0x42,0x0f,0x0b,0x0f,0x1b,0x0d,0x0a,0x13,0x12,0x0e,0x0c,0x24,0x58,0x38,0x28,0x2e,0x9f -,0xaa,0xa4,0x98,0x9c,0xc3,0x1c,0x3e,0x88,0x80,0x86,0x8b,0x8a,0x88,0x92,0x89,0x84,0x8b,0xa0,0xc0,0x8d,0x8b,0x8e,0x8b,0x8e,0x94,0x45,0x4b,0xa3,0x9c,0xad,0x2a,0x1b -,0x28,0xa4,0xa9,0xcf,0x25,0x20,0x4a,0x2d,0x2f,0x29,0x1d,0x14,0x21,0xbf,0xcc,0x67,0x29,0x27,0x1f,0x18,0x2d,0xa7,0x5d,0x17,0x08,0x0a,0x09,0x2a,0xaf,0x0f,0x0c,0x0b -,0x27,0x12,0x11,0x1d,0x12,0x1c,0x1a,0x2a,0x35,0x43,0x4d,0x3e,0x9f,0xa9,0xb8,0x95,0x9a,0xc6,0x18,0x24,0xb5,0xd3,0xb6,0xa1,0xcc,0xad,0xa1,0x8b,0x8a,0x30,0x2d,0x62 -,0xc7,0xbc,0x8c,0x82,0x9a,0xaa,0x8e,0x8c,0x86,0x84,0x8a,0x8e,0x8f,0x86,0x88,0x84,0x83,0x8d,0x99,0x86,0x8b,0x96,0x9e,0xa5,0xa5,0x0d,0x13,0x18,0x11,0x0b,0x09,0x0f -,0x05,0x01,0x12,0x0b,0x01,0x03,0x02,0x01,0x05,0x2a,0x0e,0x00,0x04,0x04,0x06,0x08,0x4a,0xfe,0x0d,0x14,0x35,0x94,0xa4,0xb6,0x9a,0xc1,0xc5,0x96,0x85,0x98,0x9c,0x89 -,0xa4,0xc2,0x88,0x86,0x3d,0xae,0x8b,0xae,0xd2,0x8f,0x8c,0x34,0xb6,0x8f,0xaf,0x91,0x87,0x88,0xa5,0x20,0x93,0x89,0x8d,0x8d,0x89,0xa5,0x16,0x9a,0x88,0x9c,0xab,0x8d -,0x3e,0x0a,0xce,0x9b,0x24,0x0f,0x1a,0x09,0x07,0x1e,0x27,0x11,0x08,0x0d,0x0d,0x0c,0x1a,0x1a,0x0d,0x03,0x0e,0x53,0x39,0x1d,0x48,0x3a,0x08,0x2f,0x9a,0x31,0x15,0x36 -,0x2e,0x0b,0xbd,0x9f,0x30,0x1e,0x3c,0x16,0x0a,0x32,0xca,0x2d,0x18,0x13,0x15,0x13,0x26,0xb7,0xbe,0x13,0x18,0x9b,0x9e,0xaf,0x8d,0x87,0xe9,0x95,0x80,0x84,0x88,0x84 -,0x88,0x9b,0x85,0x80,0x83,0x86,0x87,0x85,0x88,0x89,0x82,0x88,0xa5,0x2b,0xac,0x94,0xb3,0x5b,0x1e,0x0b,0x04,0x12,0x0f,0x04,0x0f,0x0b,0x01,0x03,0x16,0x0d,0x03,0x0d -,0x0e,0x04,0x09,0x19,0x0e,0x0f,0x0d,0x08,0x09,0x14,0x34,0x2a,0x0d,0x0b,0x1d,0x29,0x15,0x24,0xa7,0x10,0x03,0x77,0x90,0x93,0x9e,0x90,0xc5,0x22,0x8b,0x8c,0x8d,0x8a -,0x8e,0xa1,0x92,0x83,0x85,0x8f,0x9c,0x8d,0x8a,0x86,0x89,0x85,0x93,0x23,0xa7,0x87,0x92,0x38,0xad,0x3c,0x19,0xbc,0x92,0xad,0x67,0x6b,0x0f,0x0d,0xb2,0x9c,0x4c,0x2c -,0x1b,0x12,0x1f,0xbe,0x96,0xba,0x1d,0x2a,0x1e,0x3e,0x22,0xbb,0x43,0x05,0x0c,0x3b,0x30,0x43,0x3c,0x14,0x09,0x0d,0xb3,0x1c,0x0e,0x0d,0x06,0x0f,0xb7,0xa5,0x24,0x08 -,0x07,0x14,0x1f,0xa3,0x95,0x94,0x20,0x0a,0x25,0x9d,0x9f,0x9f,0x9d,0x3c,0x35,0x9c,0x95,0xac,0x9c,0x91,0xa9,0xa1,0x90,0x8b,0x89,0x91,0x98,0x93,0x85,0x81,0x83,0x88 -,0x8c,0x8c,0x87,0x85,0x84,0x83,0x8e,0xa3,0x98,0x89,0x8d,0x92,0xae,0x1e,0x0c,0x18,0x2b,0x18,0x0f,0x03,0x01,0x03,0x13,0x18,0x06,0x02,0x00,0x01,0x09,0x18,0x10,0x06 -,0x01,0x05,0x07,0xb5,0xb4,0x18,0x0b,0x01,0x2d,0x9c,0x9b,0xa7,0xac,0xb8,0xc4,0xa9,0x96,0x96,0x94,0xa1,0x58,0x9d,0x8b,0x89,0x9d,0x60,0x5f,0xc8,0x9b,0x8f,0x8c,0x93 -,0xa6,0xbc,0xa4,0x8e,0x8c,0x8a,0x9a,0xf4,0xa3,0x8a,0x84,0x88,0x9f,0x33,0x31,0x95,0x86,0x90,0xbc,0x1d,0x1e,0x16,0x9b,0x8b,0xa7,0x1f,0x07,0x15,0x3b,0xb8,0xc5,0x1d -,0x13,0x0f,0x0f,0x1e,0x1e,0x29,0x19,0x0c,0x0b,0x16,0x29,0x32,0x2e,0x0e,0x07,0x0e,0xbf,0xa6,0x20,0x0f,0x10,0x12,0x1e,0xd5,0xa3,0x2e,0x19,0x10,0x1d,0xcc,0xb0,0x4e -,0x16,0x04,0x11,0x8d,0x8a,0x9e,0x0d,0x0b,0x33,0x9d,0x8e,0x9b,0xac,0xb0,0x3f,0xf1,0x90,0x84,0x83,0x86,0x89,0x88,0x83,0x82,0x81,0x8b,0x99,0x8e,0x83,0x80,0x81,0x86 -,0x97,0xa7,0xae,0xac,0x9d,0xb7,0x14,0x0d,0x19,0x1b,0x22,0x09,0x02,0x02,0x03,0x04,0x07,0x0c,0x0e,0x05,0x01,0x01,0x09,0x45,0x3f,0x14,0x01,0x03,0x02,0x9a,0x88,0xe9 -,0x0e,0x00,0x1b,0xa8,0x98,0xb5,0x16,0x1b,0xe1,0xa2,0x9b,0xb8,0x37,0x65,0x4c,0xab,0x91,0x8e,0x8a,0x9f,0x2b,0xb1,0x91,0x85,0x84,0x8b,0xc3,0x1d,0x90,0x84,0x81,0x89 -,0xac,0xc9,0x9d,0x87,0x84,0x8e,0xb0,0x39,0x3f,0xd5,0xa4,0x99,0x9f,0x2d,0x1a,0x10,0x1a,0x1d,0x1b,0xa6,0x32,0x35,0x24,0x29,0xb6,0x1e,0x0e,0x0d,0x1d,0x98,0x92,0xd0 -,0x15,0x02,0x0b,0x2d,0x93,0x96,0x28,0x09,0x07,0x00,0x18,0x98,0x5d,0x21,0x02,0x09,0x18,0x65,0xa1,0x17,0x13,0x0e,0x17,0x66,0xbc,0xb3,0x28,0x0d,0x1e,0x97,0x9d,0x46 -,0x0b,0x17,0xbd,0x91,0x81,0xa9,0x1d,0x18,0xa6,0x88,0x8a,0x84,0x88,0x8d,0x86,0x85,0x86,0x85,0x82,0x82,0x88,0x8b,0x8b,0xac,0x8c,0x82,0x81,0x8a,0x19,0xbf,0x9a,0x9e -,0xa8,0x0f,0x0a,0x0f,0x2c,0xac,0x0b,0x00,0x00,0x07,0x1e,0x45,0x0e,0x00,0x00,0x06,0x1c,0x9c,0xb1,0x00,0x02,0x00,0x2c,0x9c,0x1e,0x12,0x0b,0x17,0x5f,0x3e,0x24,0x33 -,0x28,0x9b,0xb2,0x1a,0x08,0x5f,0x82,0x84,0x86,0x52,0x25,0xa1,0x8c,0x86,0x9e,0x9f,0x94,0x8c,0x84,0x91,0x46,0x18,0x9c,0x83,0x81,0x96,0x1c,0x06,0xa5,0x82,0x80,0x92 -,0x07,0x07,0x18,0x89,0x82,0x93,0x38,0x1b,0x35,0x96,0xea,0xa6,0xa5,0x96,0x1f,0x06,0x83,0x0b,0x15,0x8f,0xad,0xa0,0x00,0x05,0x00,0x1a,0x15,0x02,0x0f,0x00,0x04,0x00 -,0x08,0x09,0x01,0x00,0x0b,0x08,0x08,0x00,0x13,0xc9,0x98,0xa3,0x09,0x0e,0x0b,0x8b,0x82,0x83,0x82,0x82,0x91,0x95,0x83,0x80,0x80,0x85,0x88,0x86,0x8e,0x89,0x80,0x82 -,0x80,0x89,0x99,0x2f,0x91,0x80,0x81,0x83,0x93,0x51,0x54,0xc3,0x9a,0x99,0x24,0x17,0x0f,0x19,0x04,0x29,0x3f,0xd9,0x19,0x00,0x02,0x00,0x13,0x1a,0x1a,0x0c,0x03,0x02 -,0x02,0x00,0x05,0x01,0x0b,0x03,0x03,0x00,0x06,0x1c,0xd4,0xbd,0x00,0x02,0x00,0x09,0xaf,0x8f,0x93,0x1f,0x0d,0x20,0x44,0x8f,0xa9,0x9a,0x9c,0xa1,0xa6,0xc5,0x80,0x84 -,0x80,0x8c,0xa4,0x51,0xa6,0x80,0x80,0x80,0x85,0x93,0x87,0x82,0x82,0x80,0x87,0x86,0x8c,0x86,0x8e,0x81,0x80,0x80,0x85,0x98,0x93,0xa2,0x86,0x80,0x81,0x80,0x8f,0x90 -,0x8b,0x8c,0x84,0x8f,0x85,0x9c,0xa1,0x1e,0xac,0x84,0x8a,0x8c,0x09,0x09,0x02,0x0b,0xd2,0x9f,0x22,0x04,0x00,0x01,0x02,0x0c,0x07,0x03,0x04,0x00,0x02,0x00,0x0f,0x0e -,0x11,0x05,0x00,0x00,0x00,0x0c,0x16,0x10,0x03,0x00,0x00,0x02,0x05,0x09,0x06,0x0b,0x00,0x05,0x00,0x0a,0x21,0x30,0x67,0x03,0x04,0x00,0x19,0xae,0xa5,0x9b,0x38,0x26 -,0x36,0x30,0xa4,0xa2,0x93,0x96,0x9d,0xb3,0x3f,0x81,0x84,0x80,0x93,0x5b,0xcb,0xeb,0x80,0x81,0x80,0x82,0x89,0x8e,0x8c,0x86,0x83,0x83,0x83,0x8c,0x89,0x8b,0x84,0x80 -,0x81,0x80,0xaa,0xa7,0xa9,0x8a,0x80,0x83,0x80,0x8a,0x91,0x8f,0x93,0x88,0x8c,0x89,0x8a,0xa2,0x99,0x45,0x87,0x85,0x81,0x90,0x0f,0x25,0x0c,0xa4,0x8f,0x8d,0x8e,0x25 -,0x18,0x11,0x11,0x31,0x1f,0x3f,0x11,0x08,0x05,0x07,0x9a,0x97,0x96,0x0b,0x01,0x01,0x0a,0xac,0x9e,0x9d,0x1d,0x05,0x0a,0x11,0x23,0x28,0x0f,0x13,0x05,0x0a,0x00,0x17 -,0xad,0xaf,0xbf,0x00,0x03,0x00,0x06,0x17,0x22,0x1a,0x05,0x01,0x02,0x03,0x07,0x06,0x04,0x03,0x00,0x02,0x00,0x09,0x0c,0x25,0x0e,0x00,0x01,0x00,0x05,0x0e,0x3c,0x10 -,0x03,0x01,0x01,0x0a,0x1d,0x1a,0x12,0x03,0x04,0x02,0x0f,0x9c,0x9d,0x8a,0x17,0x16,0x10,0x2e,0x87,0x89,0x82,0x8c,0x93,0x8d,0x87,0x83,0x80,0x82,0x82,0x89,0x86,0x8b -,0x81,0x80,0x80,0x81,0x8a,0x85,0x8c,0x81,0x80,0x80,0x80,0x81,0x82,0x81,0x81,0x80,0x80,0x80,0x82,0x85,0x8b,0x8c,0x80,0x83,0x80,0x8e,0xa1,0xab,0x9e,0x80,0x82,0x80 -,0x89,0xae,0xb5,0xa1,0x8f,0x8c,0x99,0x96,0x1f,0x2a,0x0c,0x28,0x9a,0xab,0x9f,0x04,0x03,0x00,0x0c,0x2d,0x4a,0x1c,0x03,0x01,0x00,0x03,0x09,0x08,0x04,0x03,0x00,0x02 -,0x00,0x0b,0x0c,0x12,0x0a,0x00,0x01,0x00,0x08,0x10,0x32,0x11,0x03,0x02,0x01,0x07,0x15,0x13,0x1f,0x08,0x0b,0x06,0x10,0x95,0x9d,0x89,0x0e,0x0b,0x07,0x15,0x8d,0x8c -,0x86,0xac,0x27,0x25,0x3a,0x9e,0xa0,0x9c,0xae,0x1b,0x3a,0x17,0x8a,0x89,0x84,0x93,0x0c,0x1b,0x0d,0x8e,0x87,0x84,0x89,0xae,0xa8,0xa9,0x96,0x89,0x94,0x8c,0x9d,0xa8 -,0xb9,0x9d,0x80,0x87,0x80,0x47,0x2e,0x1f,0x49,0x84,0x87,0x81,0xa2,0x2a,0x43,0x4d,0x98,0x98,0x97,0xab,0x13,0x1e,0x0b,0x95,0x8e,0x8a,0x9b,0x06,0x10,0x07,0x9d,0x91 -,0x8f,0x9c,0x12,0x14,0x25,0xab,0x9e,0x5a,0xb4,0x17,0x16,0x12,0x25,0x8b,0x99,0x8a,0x14,0x0d,0x0a,0x1c,0x8c,0x91,0x8c,0x4e,0x1b,0x20,0x2c,0x95,0x98,0x9c,0x9b,0x23 -,0x58,0x1e,0x8d,0x8a,0x85,0x8f,0x15,0x33,0x17,0x8d,0x84,0x85,0x88,0x2e,0x2c,0x2e,0xa8,0x8c,0x99,0x90,0x1e,0x22,0x15,0xb1,0x87,0x9a,0x90,0x08,0x0c,0x08,0x2d,0x8f -,0x99,0x8e,0x1b,0x0b,0x19,0x22,0x9e,0x43,0xa6,0xe8,0x18,0x24,0x19,0x88,0x92,0x89,0x5f,0x0d,0x0f,0x12,0x8b,0x89,0x89,0x96,0x1f,0x20,0x21,0xa9,0x99,0xbc,0xa6,0x18 -,0x20,0x0c,0xad,0x93,0x8e,0x9b,0x06,0x09,0x03,0x33,0x92,0x8f,0x9d,0x15,0x0d,0x0f,0x19,0x9f,0x4f,0xa3,0x16,0x0d,0x0d,0x3b,0x88,0x91,0x8c,0x0e,0x0a,0x06,0x2d,0x8f -,0x8b,0x8d,0xb3,0x19,0x1c,0x22,0xa5,0xa7,0xa8,0xf7,0x1c,0x13,0x13,0x89,0x8d,0x86,0x27,0x0c,0x09,0x11,0x94,0x8e,0x8f,0xa7,0x1c,0x1b,0x20,0xaa,0x9f,0xad,0xa2,0x25 -,0x1f,0x0e,0x96,0x8f,0x82,0xa8,0x11,0x0d,0x0c,0x9b,0x8b,0x87,0x9c,0x21,0x1c,0x18,0xcf,0x98,0xa4,0x9c,0x1b,0x1e,0x08,0x99,0x8e,0x89,0xa9,0x09,0x09,0x07,0xb3,0x93 -,0x8d,0xa3,0x1f,0x0f,0x15,0x1c,0xa8,0xc5,0x9e,0x19,0x18,0x07,0xe7,0x8f,0x8a,0x98,0x0a,0x0e,0x04,0x3d,0x99,0x8d,0x9c,0x33,0x14,0x12,0x0f,0xb6,0x3b,0x9e,0x31,0x1f -,0x0b,0x2b,0x91,0x8e,0x8b,0x11,0x18,0x07,0x72,0x91,0x88,0x8a,0xab,0x1f,0x2d,0x18,0xa3,0xa9,0x8f,0xaa,0x3b,0x18,0x2f,0x8a,0x8e,0x8a,0x11,0x12,0x05,0x24,0x97,0x8d -,0x96,0xc4,0x0e,0x1a,0x13,0xbb,0x2a,0xb5,0x2a,0x14,0x0d,0x22,0x8e,0x94,0x8b,0x0f,0x16,0x04,0x31,0x98,0x88,0x91,0xe2,0x14,0x26,0x20,0x9d,0xae,0xa0,0x6b,0x20,0x16 -,0x34,0x8c,0x94,0x8e,0x0f,0x17,0x05,0x68,0x96,0x8b,0x95,0x55,0x0f,0x13,0x1a,0xa8,0xb7,0xa7,0x30,0x1c,0x18,0xc6,0x8d,0x8c,0x92,0x0e,0x17,0x09,0xb1,0x8e,0x88,0x94 -,0x3e,0x1d,0x1c,0x36,0x9d,0xba,0xc7,0x24,0x1e,0x1e,0x9c,0x8e,0x8b,0xc3,0x0e,0x0f,0x0c,0x9a,0x95,0x8a,0xae,0x1f,0x12,0x1c,0xa8,0xa4,0xac,0x2a,0x18,0x13,0xc8,0x8c -,0x8a,0x91,0x0e,0x09,0x06,0x2c,0x8e,0x8d,0x8d,0x1a,0x17,0x0e,0x3c,0xa9,0xb7,0xfb,0x10,0x0c,0x13,0x8f,0x8a,0x88,0x2a,0x0d,0x07,0x10,0x97,0x8e,0x89,0xcd,0x24,0x13 -,0x1f,0x9b,0x95,0x9c,0x22,0x0c,0x16,0x99,0x86,0x84,0xaf,0x0f,0x0c,0x0f,0x95,0x93,0x8a,0xb9,0x36,0x22,0x1e,0xad,0xae,0xa3,0x2a,0x17,0x10,0x9e,0x8f,0x86,0xdf,0x0d -,0x0b,0x0e,0x99,0x99,0x8c,0x44,0x1a,0x16,0x1f,0x9c,0xbb,0xb6,0x20,0x12,0x11,0x97,0x8b,0x88,0x26,0x0c,0x0f,0x18,0x8c,0x93,0x89,0x23,0x16,0x18,0x31,0x9b,0xac,0xd7 -,0x18,0x0c,0x19,0x8e,0x8a,0x88,0x16,0x09,0x05,0x25,0x8c,0x8d,0x8f,0x15,0x11,0x11,0xc2,0x93,0x90,0xbf,0x19,0x04,0x2c,0x8d,0x85,0x89,0x0f,0x0e,0x05,0xad,0x8a,0x86 -,0x95,0x17,0x11,0x10,0xbd,0xa2,0x9a,0x4e,0x19,0x0b,0xa3,0x8e,0x84,0xad,0x0b,0x0d,0x09,0x95,0x95,0x88,0xbe,0x22,0x1b,0x2e,0xaf,0xad,0x4b,0x22,0x0f,0x23,0x8e,0x8d -,0x86,0x0f,0x15,0x08,0x38,0x91,0x94,0x96,0x17,0x1c,0x1f,0xae,0x9f,0xa6,0x1f,0x15,0x09,0x93,0x8e,0x86,0xd7,0x0b,0x19,0x0e,0x8f,0xa3,0x8d,0x2a,0x1e,0x16,0x2b,0xa1 -,0x9a,0xa8,0x1e,0x0a,0x20,0x8c,0x8b,0x8d,0x06,0x18,0x0a,0x96,0x8c,0x8d,0x9d,0x13,0x1e,0x13,0x58,0xe1,0xab,0x3b,0x25,0x16,0x90,0x97,0x85,0x19,0x0b,0x0a,0x15,0x8c -,0x97,0x8a,0x21,0x2a,0x19,0xc4,0xb3,0xae,0x28,0x1e,0x0c,0x9f,0x90,0x88,0x9e,0x0a,0x23,0x0d,0x8d,0x9c,0x8d,0x30,0x1e,0x1f,0x3d,0xac,0xb4,0x45,0x1e,0x16,0x3e,0x8e -,0x98,0x91,0x05,0x28,0x0c,0x9e,0x99,0x9e,0xa7,0x18,0x54,0x29,0xa2,0xb8,0xdf,0x1e,0x19,0x2c,0x8b,0x9c,0x8c,0x0c,0x1b,0x1b,0xad,0x8c,0xa1,0x99,0x10,0x4a,0x20,0xaa -,0x44,0x38,0x24,0x2c,0x26,0x8b,0x99,0x8e,0x14,0x0b,0x1b,0x1f,0x8c,0xfc,0x95,0x18,0xdf,0x4d,0xa6,0xce,0x27,0x1b,0x22,0x1a,0x90,0x93,0x8d,0x3a,0x06,0x2a,0x1a,0x85 -,0xa9,0x96,0x15,0x14,0x2c,0xcb,0xa0,0x34,0x15,0x1d,0x1b,0x8d,0x8a,0x8f,0xbd,0x02,0x24,0x0c,0x8d,0x9c,0x91,0xdd,0x21,0xcc,0xc8,0xa9,0xbb,0x1a,0x11,0x08,0xa1,0x82 -,0x88,0x8e,0x03,0x25,0x10,0x8e,0xa4,0xa3,0x3b,0x20,0xbe,0x43,0x57,0x38,0x1c,0x1a,0x0d,0x2d,0x8a,0x9a,0x89,0x08,0x34,0x12,0x91,0x95,0xab,0x3f,0x06,0x24,0x3c,0x92 -,0x93,0xad,0x1f,0x0e,0x1a,0x8b,0xa0,0x8f,0x05,0x10,0x0d,0xa9,0x81,0x8e,0x93,0x0c,0x1e,0x23,0x9f,0xa2,0x4c,0x1e,0x0e,0x2e,0x80,0x8f,0x8d,0x09,0x08,0x0d,0x23,0x85 -,0x23,0x9c,0x1d,0xa2,0xa9,0xb4,0x9f,0x29,0xb7,0x1a,0x0a,0x95,0xa9,0x83,0xc8,0x15,0x17,0x12,0x86,0x41,0x8d,0x0e,0x1f,0x1b,0x18,0x9c,0xaa,0x9d,0x2b,0x0e,0x93,0x92 -,0x89,0x1f,0x06,0x20,0x12,0x83,0xad,0x8c,0x20,0x19,0x1c,0x3d,0x92,0x3d,0x1b,0x10,0x0a,0x96,0x89,0x87,0xab,0x08,0xb1,0x0a,0x90,0xd4,0x9f,0xc8,0x3d,0xad,0x19,0xc4 -,0x3c,0x3f,0x2c,0x0a,0x27,0x9a,0x9a,0x8e,0x10,0xab,0x10,0x8e,0x94,0x9f,0xb2,0x0d,0x36,0x1e,0x94,0xa7,0xc4,0x19,0x0c,0x17,0x8a,0x8d,0x8b,0x0c,0x0a,0x08,0xac,0x80 -,0x8c,0x92,0x08,0x38,0x1e,0xaf,0x38,0x37,0x21,0x1c,0x1d,0x8e,0x92,0x8c,0x21,0x0f,0x33,0x0f,0x8b,0x2d,0x96,0x15,0xd7,0x6b,0xb0,0x99,0x4d,0x51,0x1c,0x15,0x9d,0x8d -,0x92,0xa3,0x08,0x36,0x0a,0x8c,0xa5,0xa8,0x13,0x0d,0x22,0x27,0x98,0xc4,0xb7,0x14,0x13,0xcd,0x81,0x8d,0x8f,0x07,0x11,0x0c,0x97,0x89,0x9b,0x3e,0x08,0x40,0x35,0x8f -,0xac,0xad,0x0d,0x11,0x19,0x8c,0x8d,0x8f,0x16,0x07,0x12,0x34,0x80,0x8c,0x8b,0x1c,0x79,0x14,0x2d,0x2f,0x37,0x1f,0x1a,0x1d,0x9a,0x88,0x98,0x4b,0x02,0x17,0x10,0x89 -,0xce,0xb9,0x29,0x9d,0x8c,0x9b,0x9a,0x1e,0x25,0x0a,0x0e,0x16,0x8c,0x95,0x89,0x0e,0x18,0x11,0xa7,0x95,0xd8,0xac,0x0d,0xbb,0x23,0x96,0xa0,0x98,0x1b,0x1b,0x19,0x8c -,0x8b,0x8e,0x1e,0x08,0x2e,0x2a,0x85,0xc0,0xa8,0x0e,0x2e,0x2e,0xcd,0x52,0x2a,0x15,0x17,0x2b,0x9e,0x87,0x9d,0x9c,0x06,0xeb,0x15,0x92,0x9b,0xc3,0xcb,0x18,0xb3,0x27 -,0x9f,0x49,0xd6,0x1e,0x21,0x1d,0x92,0x9f,0x8d,0x19,0x15,0x2b,0x32,0x89,0x46,0x9b,0x13,0x79,0x26,0xb2,0xa5,0xdd,0x30,0x1a,0x1b,0xa0,0x8a,0x96,0xd5,0x02,0x23,0x17 -,0x87,0x9d,0x9c,0x42,0x1f,0xaf,0x1c,0xac,0x23,0xbe,0x2e,0x2d,0x19,0x93,0xa8,0x90,0x0f,0x1b,0x17,0x1f,0x93,0x32,0x8a,0x2a,0x98,0x25,0xc6,0x64,0x3c,0x50,0x2c,0x19 -,0x9a,0x93,0x92,0xbf,0x09,0xc8,0x0f,0x8b,0x31,0x9c,0x25,0x28,0x7c,0x26,0x9e,0x2f,0xb2,0x2a,0x22,0x21,0x8f,0xa7,0x8b,0x0b,0x29,0x0f,0xde,0x9a,0xed,0x8e,0x22,0x98 -,0x10,0x4f,0x19,0xb4,0xc8,0xcb,0x19,0xa0,0x98,0x8f,0xb7,0x0f,0x45,0x0f,0x91,0x20,0x93,0x2e,0xa6,0x30,0x26,0x2f,0x2c,0xa9,0x60,0x2a,0x24,0x8c,0xa1,0x8e,0x0b,0x48 -,0x14,0xa6,0xbe,0xc0,0x9a,0x2f,0x9f,0x12,0xbb,0x17,0xa9,0x31,0x35,0x10,0x9b,0x98,0x8d,0x3c,0x0d,0x3d,0x1c,0x8b,0x2c,0x8f,0x26,0xa4,0x29,0x2b,0x2d,0x28,0xa1,0x79 -,0x2a,0x1d,0x97,0xb2,0x8d,0x0a,0x3b,0x09,0xb9,0xa1,0x98,0x8b,0x48,0xa5,0x0e,0xb8,0x1f,0x9b,0x5f,0x34,0x0a,0x9c,0xa2,0x8d,0x39,0x0f,0x38,0x0d,0x94,0x1d,0x8b,0x37 -,0x9c,0x2b,0x58,0x44,0x47,0xad,0x3c,0x22,0x2b,0x8c,0xb0,0x93,0x05,0x3a,0x0e,0xa3,0xae,0x9b,0x95,0x34,0xb2,0x0f,0xbf,0x1b,0x9d,0x28,0x4b,0x0e,0x96,0x95,0x89,0xcc -,0x12,0x1c,0x0a,0xa6,0x45,0x85,0xbf,0x9d,0x0e,0x1c,0x1c,0xae,0x9a,0x3a,0x1a,0x1c,0x8d,0x92,0x8c,0x0c,0x37,0x0b,0xa9,0xba,0x98,0x99,0x3f,0xb0,0x13,0x52,0x16,0x9e -,0x29,0x36,0x10,0x98,0x9b,0x8a,0x27,0x14,0x2b,0x14,0x93,0x2e,0x88,0x38,0x9e,0x14,0x1c,0x1e,0xdb,0xa4,0x3c,0x18,0x2c,0x8d,0x91,0x8a,0x08,0x2e,0x07,0x9f,0x9f,0x8e -,0x95,0x39,0xbf,0x0f,0xe9,0x23,0xa9,0x25,0x1b,0x0b,0x8f,0x95,0x82,0x2e,0x0f,0x11,0x0e,0x95,0xc0,0x88,0x3e,0xa0,0x19,0x39,0x37,0xaf,0xb6,0x39,0x11,0x26,0x8e,0x93 -,0x8d,0x0a,0x23,0x08,0xae,0xb1,0x95,0x95,0xd4,0xc2,0x16,0x50,0x2b,0xa8,0x28,0x1e,0x0e,0x90,0x8b,0x86,0x22,0x0a,0x0d,0x1c,0x90,0xb9,0x94,0x2e,0x9b,0x26,0x5a,0x2b -,0xcc,0xb6,0x21,0x13,0x1f,0x89,0x8b,0x8c,0x09,0x0f,0x07,0xa9,0xa0,0x9d,0x9b,0x5e,0xa3,0x17,0xc0,0x19,0xaa,0x32,0x21,0x0e,0x9c,0x8d,0x85,0xcb,0x10,0x17,0x0e,0x9b -,0x2e,0x8e,0x3b,0x9b,0x2a,0x3a,0x2b,0x28,0xfd,0x1e,0x17,0x2f,0x8a,0x8e,0x8c,0x0d,0x1e,0x0d,0xa1,0xa5,0xa9,0xa0,0xe0,0x9e,0x22,0x4a,0x18,0x40,0x1d,0x1f,0x10,0x8f -,0x8b,0x84,0xd9,0x0a,0x11,0x0f,0x96,0x43,0x92,0xb9,0x98,0xc0,0x4b,0x1e,0x27,0x2c,0x17,0x11,0x33,0x86,0x8d,0x8e,0x0e,0x1b,0x11,0xf2,0x2e,0xcf,0xab,0x99,0x98,0xd5 -,0xce,0x1d,0xb5,0x10,0x1d,0x0f,0x92,0x8d,0x88,0xc7,0x1c,0x22,0x28,0xc0,0x19,0xbb,0x36,0x95,0x3d,0xac,0x32,0xfe,0x37,0x1c,0x1a,0x69,0x90,0x93,0x9f,0x1c,0x25,0x1c -,0xab,0x3a,0xb1,0x60,0xb1,0xaa,0xca,0x6f,0x2e,0x36,0x24,0x19,0x3e,0x99,0x9b,0x94,0x2c,0x7d,0x1d,0x39,0x24,0x21,0xb1,0xb2,0x98,0x4e,0x41,0x2f,0xcb,0x30,0x20,0x1d -,0xdb,0xa0,0x9c,0xac,0xeb,0x9f,0xb7,0xb0,0x20,0x26,0x4b,0xcb,0xb5,0x4e,0x66,0x3d,0x2e,0x26,0x2d,0xba,0x9c,0xad,0x34,0x1d,0xd0,0xa5,0x9a,0xb4,0x2d,0x36,0xd7,0xad -,0x4d,0x52,0x2a,0x69,0x23,0x29,0x3e,0xb0,0x9f,0xb3,0x45,0x24,0x2d,0x4f,0xaa,0xb5,0xa7,0x59,0xa6,0xd7,0x58,0x4b,0x2a,0xd7,0x26,0x3a,0x1f,0x64,0xac,0xae,0x5c,0xd7 -,0xc2,0xae,0xb3,0x39,0x4f,0x3d,0x9e,0xd7,0xb3,0x39,0x3c,0x60,0x35,0x37,0x2e,0xd8,0x3b,0x2d,0x1e,0x44,0xc8,0x97,0xa8,0xa7,0xd6,0xeb,0xfa,0x39,0xae,0xbe,0xad,0x22 -,0x27,0x20,0xb2,0x9e,0xae,0x25,0x16,0x1c,0x32,0xaa,0xa6,0x9d,0xb2,0xcb,0x47,0xb7,0xac,0xa1,0x50,0x5a,0x22,0x27,0x30,0x38,0xb7,0xc2,0xae,0x24,0x32,0x23,0xb7,0xb3 -,0xaa,0x64,0x5e,0xb5,0xae,0x99,0x7e,0xac,0x27,0x5c,0x2a,0x20,0x23,0x27,0xbe,0xcd,0xc1,0xca,0xbb,0x5f,0x36,0x24,0xad,0xae,0x99,0xb0,0xbd,0xc2,0xbe,0xa1,0xe3,0x2e -,0x11,0x19,0x25,0xc6,0x78,0xc6,0x3c,0xbf,0x4b,0x45,0xb7,0xd9,0xa1,0xb8,0xae,0xd9,0xbe,0xb2,0xaf,0xc0,0x5b,0x29,0x2a,0x32,0xfc,0xce,0x2c,0x24,0x1e,0x7d,0xb0,0xa1 -,0xad,0xc1,0x6b,0xb8,0xa5,0xae,0xbc,0x33,0x2e,0x32,0xb6,0xaa,0xb5,0x38,0x1e,0x1c,0x28,0xe2,0xc5,0x4c,0x37,0xee,0xb3,0xa2,0xa9,0xb8,0x70,0x5c,0x43,0x54,0xc5,0xba -,0xab,0xb8,0x32,0x24,0x2c,0x2f,0xcf,0x4f,0xcc,0x22,0x21,0x4e,0xba,0x96,0xa4,0xa9,0x31,0x3f,0xb9,0xae,0xa3,0x45,0x28,0x28,0x52,0xb4,0xbb,0x3c,0x26,0x1f,0x38,0x36 -,0x2f,0x27,0x3b,0xaf,0x9a,0x97,0xa9,0xc7,0x7d,0xb7,0xac,0xab,0x3c,0x2f,0x3f,0xb4,0xca,0xc9,0x36,0x1f,0x1c,0x1b,0x28,0x20,0x30,0x41,0x9f,0x9d,0xa8,0xb2,0xbb,0x9f -,0x9f,0xa1,0xc9,0x2f,0x35,0x39,0xb9,0xbf,0x53,0x2f,0x22,0x36,0x3c,0x4b,0x1e,0x14,0x21,0xb8,0x99,0x9a,0xb1,0x64,0xcb,0x9e,0x97,0xa6,0x31,0x1a,0x34,0xb5,0xae,0xbd -,0x36,0x2b,0x26,0x24,0x2e,0x2a,0x2e,0x33,0xde,0xba,0xa6,0x9e,0xa8,0xbd,0xbc,0xaf,0xd8,0x49,0x3d,0xae,0xa4,0xab,0x35,0x1d,0x1f,0x3a,0xc4,0xc1,0x1e,0x15,0x22,0x68 -,0xa5,0xb1,0xb1,0xe9,0xb8,0xae,0x9e,0x9d,0xce,0x28,0x2e,0xa9,0x9d,0xac,0x2c,0x1d,0x2a,0xb4,0xbb,0x27,0x11,0x1b,0x66,0xac,0xaa,0xbd,0xc7,0x3d,0x57,0xb3,0xa5,0xb2 -,0xe1,0xf3,0xac,0xab,0xa1,0xb3,0x30,0x28,0x31,0x4f,0x29,0x1e,0x1e,0x3d,0xcb,0xdc,0x2b,0x39,0xba,0x9f,0xa1,0xb1,0x33,0x29,0xc3,0xa3,0x9c,0xa7,0x42,0x2b,0xb6,0x9e -,0x9e,0x4b,0x15,0x0f,0x25,0xaf,0xa5,0xdc,0x2c,0x29,0xd9,0xa1,0xbe,0x28,0x1c,0x31,0xad,0x9f,0x9d,0xaf,0xb9,0xb2,0xb1,0xae,0xed,0x2a,0x21,0x2e,0x53,0xad,0xb3,0x3a -,0x1f,0x25,0xf0,0xb2,0x3e,0x20,0xe2,0x99,0x92,0x1d,0x0a,0x28,0x97,0x8b,0xa0,0x20,0x1d,0xa3,0x9d,0xe2,0x2a,0x0d,0x30,0x92,0x9e,0xa1,0x3d,0x15,0x0c,0x0a,0x0e,0xad -,0x8b,0x96,0x9b,0x26,0x3b,0x96,0x93,0xaf,0x2b,0xac,0x93,0x94,0xb9,0x12,0x0b,0x2f,0x41,0xc0,0x7e,0x12,0x0f,0x1e,0x5a,0x39,0xc8,0xbb,0xa0,0x98,0xb7,0x29,0xba,0x8f -,0x89,0x94,0xad,0x23,0x12,0xe3,0x2f,0x21,0x18,0x0c,0x0e,0x1a,0x4c,0xaf,0x99,0x4e,0xb8,0x9c,0x96,0x8c,0x94,0xb6,0x14,0x0e,0x1c,0xc1,0xa7,0xac,0xbd,0xaa,0xaf,0xc4 -,0x10,0x04,0x13,0x3c,0x8f,0x93,0x9b,0xa9,0x1c,0x5b,0x29,0x2d,0xad,0xe9,0xa0,0xa9,0xa4,0x27,0x3d,0xae,0x38,0xc2,0x21,0x54,0x27,0xee,0x5b,0x1f,0xaf,0x2c,0xaf,0x9e -,0xa0,0x9c,0x1e,0x1e,0x19,0xcf,0x97,0xaf,0x9b,0x23,0x35,0xbf,0x9e,0x99,0x4e,0x30,0x12,0x2a,0x1b,0x31,0x60,0x3f,0xa9,0x1d,0xd9,0xcc,0xae,0x9b,0x29,0x99,0x98,0x92 -,0x9b,0x66,0xa6,0x42,0x2f,0x08,0x0d,0x0d,0x1f,0x9c,0xa7,0x8f,0xbc,0x4b,0x1d,0x1e,0xab,0xb7,0x8f,0x98,0xa3,0xdd,0x16,0x21,0x17,0x9c,0x94,0xb0,0x1e,0x0b,0x13,0x15 -,0xa7,0xa6,0x97,0x9b,0xaa,0x96,0xbb,0xba,0x39,0xe8,0x2b,0x12,0xac,0xad,0xaa,0x26,0x18,0xbb,0x4b,0x2d,0x12,0x25,0x26,0xa1,0x92,0xaf,0x9d,0xa9,0x97,0x9c,0xba,0x2c -,0x1e,0x37,0x1a,0x2a,0x64,0x62,0xbb,0xc1,0x9f,0x2e,0x22,0x30,0xab,0x36,0x38,0xed,0x41,0xa9,0x2d,0xba,0x59,0xc1,0x9b,0xa6,0xa4,0x24,0x2a,0xaa,0x48,0xd2,0x1e,0xa4 -,0x8f,0xa4,0x1c,0x09,0x06,0x0d,0x99,0x9a,0x93,0x9c,0xa0,0xbf,0x19,0x1d,0x37,0x9d,0x90,0x9c,0x9d,0x5d,0x2b,0x38,0xca,0xc9,0x13,0x12,0x1a,0x1f,0x1c,0xa0,0x4a,0xc4 -,0xdc,0x33,0xa8,0xb8,0x8f,0x9a,0xa2,0xa8,0xb3,0x97,0x9d,0x40,0x17,0x15,0x33,0x29,0x1c,0x10,0x14,0x1b,0x98,0x98,0xbe,0xa8,0xba,0x8e,0xa7,0xa4,0xd2,0x38,0x3f,0x12 -,0x1c,0x1c,0xb2,0x97,0x93,0x9e,0x17,0x0c,0x0f,0x1e,0x1c,0xa5,0x96,0x9a,0x8e,0xa4,0xc8,0x1c,0x4d,0xa6,0xbc,0x9f,0xba,0x9b,0xbd,0x1d,0x0d,0x12,0xa1,0x9a,0xa4,0x1e -,0x11,0x0c,0xbe,0xa5,0x46,0xb6,0x2e,0xa6,0x59,0x4b,0xae,0xcc,0x9a,0xb9,0xb6,0x6c,0xb5,0x93,0xa3,0x9c,0x3a,0x27,0x21,0x3c,0x15,0x1b,0x26,0x13,0xb9,0x3a,0xcd,0x29 -,0x2f,0xaf,0x46,0x9d,0xad,0xa9,0x9c,0xa5,0x9c,0xc6,0x95,0xb6,0x19,0x0a,0x0b,0x20,0x94,0x83,0xa7,0xcf,0x18,0x17,0x1d,0x28,0xa4,0xc8,0x9f,0x9f,0x2e,0x1b,0x18,0xbf -,0x35,0xb0,0xba,0x5b,0xbf,0xcd,0x21,0x18,0xc5,0x2f,0x8c,0x93,0x99,0xb5,0xf9,0x99,0x4c,0xb2,0x2f,0x14,0x1b,0x1c,0x40,0x54,0xc1,0xbd,0x22,0x11,0x10,0x26,0xa0,0x89 -,0xb8,0xad,0xb4,0xa7,0x91,0xb1,0xad,0x1f,0x29,0x62,0x3e,0x34,0x24,0xdc,0x5b,0xbe,0x69,0x39,0x49,0x38,0x3c,0x27,0x9d,0xcc,0xb8,0xbf,0x18,0x26,0x28,0x8f,0x8c,0x96 -,0xa9,0x1e,0x1f,0x1b,0xc2,0xbe,0x4f,0xab,0xe4,0x37,0x1a,0x1f,0x14,0x5d,0xc8,0x29,0xa2,0xa7,0x9e,0xce,0xd8,0x44,0x29,0xa1,0xa4,0xa6,0xad,0xb2,0x9a,0x5a,0xae,0x26 -,0x14,0x11,0x15,0x18,0x34,0x9c,0x26,0xa9,0x5e,0xe2,0xb2,0x9c,0x8c,0xa7,0xa9,0x60,0x3e,0x4f,0x3d,0xad,0x2c,0x27,0x4a,0x23,0x1e,0x1e,0x28,0x19,0xbd,0x41,0xb4,0x91 -,0x9e,0x90,0xa6,0x9b,0xae,0x3f,0x3d,0x19,0x1b,0x23,0xaf,0xa7,0xad,0x9e,0x42,0x1d,0x0f,0x18,0x16,0x16,0x9c,0x4f,0x9e,0x99,0xa3,0xa6,0x3e,0xaa,0x34,0xb6,0x9f,0xc3 -,0xc7,0x3f,0x46,0x37,0xbe,0x9d,0x3d,0x36,0x23,0x57,0x23,0x5d,0xc0,0x10,0x2f,0x27,0xb5,0xbb,0xa5,0x9c,0x3e,0x38,0x21,0x4d,0x9c,0x96,0x8f,0xa4,0xac,0xb0,0x27,0x3a -,0x24,0x1c,0x0b,0xc0,0x2c,0x19,0x9c,0xa4,0x9e,0x1c,0xc6,0xbb,0x2d,0xa8,0xbc,0xa9,0xb5,0xad,0x9b,0xed,0xd3,0x1c,0x18,0x16,0x1e,0x2d,0x27,0x8c,0x28,0x2e,0x9a,0xad -,0x9e,0x32,0xa1,0x36,0x20,0xa2,0xc6,0xc5,0x47,0xab,0xac,0x3f,0xab,0xf5,0x3c,0x15,0x0f,0x22,0x0e,0x9c,0x99,0xba,0x8a,0x9e,0x9e,0x2c,0x2c,0x29,0x0c,0xc5,0xd7,0x50 -,0xb1,0x9d,0xa1,0x2a,0xb4,0xa8,0x32,0xd6,0x43,0x4f,0x15,0x1c,0x8d,0x2d,0xc7,0x9f,0x37,0x1f,0x17,0xb1,0x2b,0x2d,0xa3,0x38,0xd3,0xb0,0x9a,0x9f,0xb5,0x9c,0x3b,0x3d -,0x3a,0x1d,0x25,0x17,0x24,0x96,0x1b,0xa4,0x99,0x2e,0x3c,0x25,0x9c,0x5e,0xca,0x94,0x2f,0xcd,0x9e,0xa1,0xb3,0x21,0xaf,0x1d,0x1a,0x5a,0x58,0x4a,0x18,0x0e,0xe7,0x1a -,0x35,0x8f,0x9f,0x9a,0xa3,0x8f,0x9f,0x39,0xa8,0x27,0x13,0x2d,0x2c,0xd9,0x38,0xad,0xb2,0x43,0xa9,0xbe,0x3b,0x2f,0x16,0x25,0xac,0x1a,0xad,0xaa,0xc2,0xc9,0x2d,0xab -,0x27,0xcc,0x9b,0x1f,0x3a,0xcc,0xba,0x9c,0x96,0x8d,0xbe,0xcf,0x4f,0x1f,0x1b,0x17,0x0d,0x21,0x48,0x22,0x95,0x9a,0xab,0xbd,0x46,0xe3,0x24,0xc0,0xb0,0x2b,0xaf,0xa4 -,0x9b,0x9e,0xa6,0xaa,0x1d,0x1d,0x24,0x21,0x22,0x28,0x17,0x38,0x3e,0x3c,0x92,0xa2,0x9f,0xad,0xac,0xa2,0x31,0xad,0xc7,0x1c,0x6f,0x3e,0x64,0x3e,0x2f,0x4d,0x23,0xb3 -,0xb7,0xc5,0xb9,0x3b,0x1f,0xc5,0x6d,0x34,0xa7,0x47,0x6a,0x39,0xc4,0xa8,0xcb,0x9f,0xac,0x2e,0x35,0x1c,0x2f,0xab,0x9c,0x93,0xa7,0xcb,0x68,0x31,0x39,0x23,0x0c,0x1d -,0x1a,0x1d,0x9f,0xaa,0x9d,0xb1,0xb4,0xa4,0x30,0xd6,0x36,0x27,0xc0,0x9f,0x93,0x9e,0xaa,0xb6,0x2a,0x3f,0x2c,0x22,0x1a,0x0f,0x0e,0x1c,0x9f,0xb9,0x8f,0x93,0xa8,0x9c -,0x5c,0xbc,0x26,0x2f,0x79,0x20,0x43,0xea,0xb8,0x9f,0xbe,0xaf,0x27,0x2d,0xb3,0xf0,0xb3,0x37,0x38,0x1d,0xa7,0xa1,0x25,0xb1,0x1b,0x27,0x56,0xbf,0x98,0x40,0xac,0xc8 -,0x2d,0xba,0x49,0xb8,0xc2,0xbc,0xab,0xde,0xa3,0xf3,0x53,0x33,0x1c,0x10,0x10,0x41,0x16,0xb7,0x9b,0xa8,0xa2,0xb0,0x99,0xb5,0x3a,0xdc,0x27,0x4c,0x9d,0xa9,0xa9,0x5e -,0xad,0xa8,0xbd,0xb0,0x16,0x0d,0x0d,0x13,0x24,0x9b,0x97,0x51,0x99,0xa7,0x9f,0xa9,0x2b,0x2a,0x0e,0x27,0xbe,0x56,0x98,0x9a,0xa8,0xa6,0xaa,0xa3,0x3a,0x3c,0x2f,0x1f -,0x43,0x41,0x2d,0x1f,0x9b,0x2d,0x1f,0xbc,0x18,0x2d,0x22,0xcf,0xcb,0x2c,0x9d,0xaf,0xa4,0x8e,0xa6,0xaa,0x39,0xb1,0xa0,0xce,0xac,0x1d,0x2a,0x24,0x23,0x19,0x1f,0x28 -,0x11,0xaf,0xad,0xc5,0xaa,0xb5,0x9a,0xb5,0x98,0x99,0x1c,0x4d,0x39,0xb8,0xae,0xac,0x9f,0x2c,0x40,0x33,0x24,0x20,0x1a,0x19,0x2b,0x9e,0x4f,0xae,0x97,0xac,0xab,0x32 -,0x2c,0x17,0x1e,0xa4,0xe0,0xc4,0xad,0xae,0x9a,0x9b,0x91,0xaf,0x1e,0x24,0x1c,0x33,0x2f,0x22,0x17,0xe3,0xd8,0x45,0x98,0x33,0x1c,0x0f,0x2c,0xaf,0xce,0x98,0xa3,0xa0 -,0x90,0x93,0x96,0xca,0x2e,0x3b,0x19,0x32,0x2c,0x43,0x58,0x28,0x21,0xc9,0xbc,0x12,0x2d,0x2d,0xec,0x4d,0xfa,0x9e,0xb4,0x90,0x97,0x53,0x37,0x28,0xa9,0xa7,0xca,0xcc -,0x1e,0x35,0x3e,0x66,0xe2,0x41,0x1b,0x20,0xad,0x37,0x9e,0xb4,0x3d,0x27,0x2a,0x9f,0x45,0x79,0x2e,0x2b,0xa6,0xaa,0x9d,0xb1,0xb1,0x93,0xa9,0xa3,0x2b,0x16,0x1d,0x15 -,0x17,0x44,0xb8,0x2d,0xaa,0xaf,0xdf,0x38,0x39,0x35,0x28,0xab,0x9d,0xe4,0xa2,0x98,0x92,0x93,0xa8,0xc8,0x0f,0x20,0x31,0x2e,0x2a,0x0f,0x0f,0xb3,0xb5,0xdb,0xa4,0x2a -,0x2b,0x26,0xac,0x9d,0xb1,0x9a,0xbb,0xdb,0x9a,0x9c,0x9e,0x1a,0x15,0x29,0x24,0xcb,0x31,0x4c,0xaa,0x3d,0xa7,0x95,0x27,0x42,0x36,0x38,0x1f,0x15,0x41,0x58,0x9d,0x9b -,0xad,0xa2,0x3d,0x69,0xaa,0x5c,0xaf,0xde,0x5c,0x3a,0xae,0x9d,0x5a,0x0d,0x27,0x5c,0x29,0xaa,0x2c,0x2d,0x23,0xd9,0xbc,0x29,0xad,0xc0,0xae,0xa4,0xc3,0x9d,0xac,0x99 -,0xa9,0x49,0xb3,0x2c,0x19,0x0c,0x0b,0xa6,0x8d,0x38,0x17,0x0d,0x54,0x98,0x92,0x90,0x30,0xb5,0xbf,0x1b,0x2a,0xb1,0x8a,0x99,0x2f,0x13,0x11,0x31,0xab,0xae,0xa8,0x1f -,0x1f,0x62,0x14,0xb2,0x8f,0x8c,0xe2,0x0a,0x0e,0x23,0x9d,0x8d,0xb7,0xae,0xaa,0x9d,0x2c,0x15,0x9d,0x96,0x94,0x15,0x08,0x17,0x32,0xb1,0x99,0x36,0xad,0xab,0x29,0x19 -,0x13,0x90,0x9c,0x48,0x16,0x0b,0xca,0x90,0x88,0x8f,0xa6,0x9d,0x3f,0x17,0x0b,0x23,0x9a,0xbe,0x0d,0x13,0x15,0xb9,0x92,0xa9,0x99,0xd4,0x9f,0x1c,0x0d,0xcb,0x96,0x89 -,0xa6,0x18,0x15,0x3d,0x93,0x9c,0xda,0x49,0x21,0x1f,0x08,0x0b,0x97,0x94,0x9a,0xb5,0x1d,0x41,0x30,0x9d,0xaa,0xd2,0xa0,0x46,0x2b,0x0f,0xd4,0x8e,0x8b,0x9a,0x12,0x10 -,0x2a,0xf5,0xed,0x22,0x31,0x98,0x3c,0x15,0x19,0xac,0x8a,0xa6,0x3c,0x12,0x16,0xa4,0xd8,0xab,0xa6,0x93,0x93,0x1b,0x1b,0x3c,0x97,0x8d,0x21,0x0b,0x05,0x16,0x8d,0xa5 -,0xb9,0x66,0xad,0xa0,0x0f,0x1b,0xc8,0x91,0x8d,0x1d,0x19,0x21,0x90,0x8e,0x6c,0x9f,0xc7,0x40,0x16,0x09,0x1e,0xbd,0xa7,0xa2,0x0e,0x1d,0xa7,0x92,0x96,0x35,0x9c,0xa4 -,0x2b,0x16,0x0e,0xab,0x98,0x97,0x36,0x0e,0x6c,0xa0,0x9b,0xac,0x2d,0x41,0x19,0x0b,0x3b,0x3d,0x8b,0x95,0x34,0x1e,0x11,0x94,0x9f,0xb4,0xa3,0x5a,0xb4,0x14,0x13,0xbf -,0x9a,0x8b,0x38,0x10,0x1a,0xb8,0x97,0x22,0x1b,0xa1,0x31,0x2b,0x18,0x2f,0x97,0x98,0x92,0x1c,0x14,0x6f,0x9d,0x94,0x30,0x55,0x9f,0xb6,0xef,0x19,0x3c,0x9a,0xa6,0x29 -,0x04,0x10,0x98,0xb8,0xb2,0x34,0xa1,0x96,0x22,0x4f,0x27,0x9e,0x8e,0xfd,0x2a,0x0d,0xd5,0x93,0xb4,0xae,0x2b,0xbf,0x30,0x11,0x1a,0x1b,0x9f,0x8f,0x1c,0x1f,0x1e,0x91 -,0x8a,0x59,0x9b,0xdd,0xb6,0x2e,0x0e,0x33,0x79,0x97,0xd0,0x13,0x28,0x4f,0x96,0x9d,0x2f,0x46,0x27,0x2b,0x2d,0x10,0xbb,0xb8,0x9a,0xb3,0x11,0xa9,0x9e,0x8f,0x99,0x46 -,0xa0,0x34,0x2d,0x1e,0x19,0xac,0xb9,0xc8,0x1b,0x0f,0x69,0xc2,0xaf,0x9e,0x2d,0xa7,0x31,0x18,0x29,0x2b,0x8d,0x9a,0x47,0x72,0x32,0x94,0x9a,0xce,0xaf,0x6d,0x59,0x10 -,0x14,0x3b,0x2c,0xbb,0x22,0x13,0xdb,0xdd,0x92,0x9d,0xab,0x9a,0x2e,0xaa,0x37,0x23,0xa7,0xbe,0xa6,0x1c,0x1b,0xad,0xa3,0x9b,0x24,0x28,0xb1,0x37,0x1f,0x0d,0x1b,0x96 -,0xca,0x45,0x1f,0xb6,0x95,0xe6,0x98,0xa5,0xab,0xa2,0x33,0x3d,0x26,0x3e,0xa6,0x38,0x33,0x1d,0x44,0xa5,0xb3,0x48,0x23,0x2e,0xa3,0x1c,0x17,0x34,0x68,0x97,0x1a,0x2e -,0xae,0x94,0x8b,0xbf,0xa6,0xa3,0xad,0x7b,0x17,0x33,0x30,0x2b,0x33,0x1a,0x28,0x28,0xc8,0xa7,0x3e,0xb6,0xac,0x51,0xb2,0x25,0x27,0xd2,0xcc,0xa5,0x46,0xa5,0x97,0x9d -,0xb3,0x3d,0xae,0x7d,0x25,0x1d,0x16,0x19,0x27,0x28,0xb7,0xb0,0xb2,0xa5,0x39,0xa9,0xab,0xdd,0xaf,0x3f,0xb7,0x78,0x2b,0xaa,0xbd,0xa4,0xb6,0xb5,0xb1,0x2d,0x4f,0x25 -,0x29,0x2a,0x1c,0x1b,0x27,0x39,0xb6,0xb1,0xa1,0x9a,0xb2,0x53,0x42,0xcb,0xa3,0xac,0xbc,0x5c,0x25,0x3c,0xd4,0x9d,0xa2,0xad,0x4a,0x1c,0x1b,0x29,0x39,0x34,0xd5,0x24 -,0x1d,0x1e,0xd0,0xa7,0x9b,0x99,0xab,0xca,0x66,0xac,0xa9,0xab,0xaf,0xcd,0x27,0x1d,0x24,0x63,0xab,0xa0,0xc1,0x2f,0x22,0x2f,0x77,0x54,0x45,0x22,0x2c,0x2a,0x1d,0x2a -,0xa3,0x91,0x90,0xa9,0x3e,0xef,0xb7,0x9d,0xb4,0x3f,0x39,0x35,0x17,0x13,0x52,0x95,0x97,0xc2,0x37,0x1a,0x3d,0xc6,0x41,0x2b,0x3b,0x33,0x18,0x1e,0xab,0x90,0x8d,0x90 -,0xaa,0x2d,0x24,0xbc,0xb9,0x46,0x32,0x2b,0x18,0x17,0x2b,0xaf,0x9b,0x96,0xce,0x1e,0x45,0x68,0xb2,0x2d,0x28,0x4c,0x4a,0x28,0x26,0xa1,0x94,0x92,0x9a,0x3c,0x28,0x3e -,0xfe,0xe6,0x37,0xc6,0x38,0x1b,0x18,0x28,0x9e,0x98,0x9e,0xcd,0x1e,0x27,0x3c,0x2d,0xed,0xcd,0xc1,0x2e,0x20,0x3a,0xa9,0x8f,0x9a,0xb4,0x32,0x32,0xb8,0xcf,0xb4,0xab -,0xbf,0x1e,0x10,0x2a,0xb4,0xa3,0xa7,0x3c,0x21,0x2b,0xe0,0xcc,0x4a,0x5c,0x35,0x38,0x2e,0x24,0xb7,0x99,0x91,0xa3,0x38,0x35,0xa5,0xa7,0x6b,0x5a,0x3a,0x57,0x2c,0x1c -,0x2b,0xa5,0x9c,0xb4,0x20,0x22,0xc8,0x3d,0x1f,0x26,0x47,0xe7,0x2a,0x23,0xe0,0x9a,0x90,0x9f,0xa9,0xb1,0xce,0x46,0x3d,0xb3,0xbc,0x46,0x24,0x17,0x22,0xd8,0x9d,0x9b -,0xd0,0x2f,0x26,0x39,0x33,0x2d,0x37,0x3f,0xc2,0x27,0x19,0x70,0x92,0x8e,0x9c,0x54,0x45,0xaa,0xb8,0x2b,0x4b,0xaf,0xc5,0x1f,0x11,0x27,0x9b,0x94,0xc7,0x4f,0x4b,0x43 -,0x2e,0x19,0x29,0xd2,0xbb,0x31,0x19,0x24,0xb3,0x92,0x91,0x99,0xa9,0x4e,0x47,0x27,0x30,0xbd,0xa9,0xbd,0x1c,0x10,0x25,0x99,0x95,0xb1,0x3f,0x2d,0x67,0x5c,0x1e,0x2b -,0xb0,0xc3,0x1c,0x0f,0x20,0x90,0x8b,0x9a,0xaf,0x47,0xbc,0x52,0x29,0x51,0xa7,0xb5,0x1d,0x0f,0x1b,0xa5,0x93,0xa6,0xc0,0x40,0x37,0xbd,0x2a,0x21,0x64,0xb9,0x39,0x1e -,0x1e,0x46,0x9b,0x9c,0xae,0x6e,0xbc,0xa8,0xc9,0x32,0x4d,0xac,0xb4,0x21,0x12,0x2b,0x9a,0x98,0xb6,0x33,0x45,0xb9,0x4b,0x23,0x38,0xab,0xae,0x1e,0x12,0x20,0xad,0x97 -,0xa4,0xaf,0xc3,0xbd,0x38,0x1e,0x2b,0xab,0xa5,0xda,0x1b,0x2c,0xaa,0x9d,0x99,0xf0,0x53,0x57,0xfc,0x33,0x2d,0x3f,0xd0,0x2a,0x18,0x1a,0xdd,0x94,0x95,0xa8,0xff,0xdb -,0x2f,0x2c,0x28,0x7c,0xaa,0xb2,0x25,0x18,0x4a,0x9d,0x97,0xa3,0xb1,0x7b,0x37,0x36,0x26,0x34,0xc4,0x38,0x2b,0x20,0x38,0x9e,0x96,0x9f,0xaf,0xca,0x3e,0x2b,0x1f,0x22 -,0x42,0x40,0x2a,0x1f,0x22,0xa8,0x8e,0x92,0xa1,0xd8,0x36,0x2a,0x26,0x2a,0x58,0xb5,0x47,0x23,0x1b,0xba,0x94,0x95,0xa5,0xa9,0x56,0x27,0x27,0x20,0x24,0x29,0x29,0x1f -,0x1f,0x41,0x94,0x90,0x9e,0xb7,0x5a,0x48,0x46,0x43,0x5a,0x78,0x2c,0x20,0x1c,0x2e,0x9d,0x8f,0x98,0xa9,0xcd,0xf0,0x37,0x1f,0x21,0x3a,0x2f,0x1e,0x1a,0x37,0xa5,0x9e -,0x97,0xac,0xcb,0xaf,0x58,0x2f,0x29,0x56,0x5a,0x1c,0x1d,0x44,0xad,0x9c,0x97,0x9a,0xbe,0xcf,0xbe,0x33,0x3b,0x5a,0x3a,0x16,0x15,0x28,0x48,0xa6,0x9c,0x9d,0xb1,0x3e -,0x4e,0xe3,0x3a,0x5e,0x3d,0x33,0x2c,0x23,0xd1,0xa9,0x99,0x9b,0x77,0x4a,0xcc,0xcb,0x56,0x3b,0x31,0x1f,0x1f,0x28,0xde,0xa2,0x98,0xa1,0x48,0x40,0xc6,0x55,0x3b,0x30 -,0x2f,0x6f,0x2f,0x2c,0x2d,0xd2,0xa2,0xa4,0x9f,0xb2,0x3e,0x47,0x44,0x3a,0x29,0x2a,0x70,0x4b,0x3b,0x7d,0xa7,0x9d,0xa3,0xaf,0x4c,0x32,0x35,0x2f,0x2d,0x50,0xbc,0x3f -,0x27,0x2e,0x58,0xa6,0x98,0xa0,0x33,0x19,0x2a,0xcf,0xbe,0xb0,0x6a,0x27,0x26,0x5a,0xa7,0x9e,0x9c,0x9d,0x45,0x1f,0x24,0x35,0xaf,0xaa,0x3b,0x1b,0x1c,0x2e,0xbd,0xa1 -,0xa3,0xad,0x5f,0x1d,0x1d,0xc3,0x9d,0x97,0xbf,0x12,0x0f,0x27,0x9a,0x94,0xa0,0xa9,0x46,0x29,0x2e,0xc2,0x9c,0xa1,0x3d,0x12,0x0f,0x29,0x9f,0x99,0xad,0xcd,0x36,0x35 -,0x3e,0xdd,0xa2,0x9b,0x5f,0x15,0x0f,0x25,0x9f,0x98,0x9e,0xbe,0x48,0xbf,0x6d,0xaa,0x9e,0xc8,0x2d,0x1a,0x26,0x34,0x2b,0x64,0xc3,0xb8,0xc3,0x6e,0xb7,0xba,0xd7,0x43 -,0x2f,0xb6,0xb2,0x24,0x10,0x2d,0x9b,0x99,0x9d,0xf6,0xc1,0xc6,0x2a,0x2f,0xd6,0xaa,0xac,0x21,0x15,0x2c,0xb6,0xa4,0xa5,0x9c,0xba,0x1a,0x11,0x20,0x9d,0x95,0xb1,0x24 -,0x13,0x22,0xbc,0x96,0x8e,0x9e,0x1f,0x0b,0x1e,0xa1,0x91,0xa6,0x1e,0x1c,0x37,0x5d,0xad,0x9c,0x93,0xaf,0x0f,0x0c,0x23,0x98,0x98,0xbd,0x33,0x2f,0x26,0x26,0xb4,0x93 -,0x99,0x2a,0x10,0x17,0xad,0x95,0xa1,0x43,0x39,0x39,0xde,0xa7,0x9e,0xa9,0x32,0x1f,0x2c,0xaf,0xeb,0x31,0x22,0x32,0xba,0x40,0xde,0xaa,0xce,0x24,0x29,0xb8,0xa0,0x65 -,0x1f,0x27,0xa8,0x9c,0xb7,0x39,0xb7,0x93,0xb5,0x1d,0x1f,0xb9,0x99,0xb3,0x1d,0x1c,0x34,0x5d,0xc3,0xaf,0x9e,0xc4,0x1b,0x16,0xf2,0x94,0x9a,0x39,0x1b,0x1f,0x4d,0xb6 -,0x93,0x98,0xb5,0x17,0x19,0xaa,0x93,0x9a,0x1b,0xaf,0x0c,0x06,0x05,0x12,0x97,0x48,0x4c,0x08,0x22,0x8d,0x94,0xa0,0x92,0x8e,0xa9,0x95,0x9d,0xa6,0x83,0x8c,0x13,0xe7 -,0x1e,0xc8,0x86,0x9e,0xa4,0x9c,0xdb,0x16,0x3e,0x2c,0x17,0x05,0x05,0x0a,0x0f,0x07,0x05,0x07,0x0e,0x1c,0x04,0x19,0x28,0x1e,0x17,0x34,0xa1,0x9c,0x4b,0x35,0x98,0x8f -,0x96,0x50,0x92,0x83,0x84,0x91,0x9d,0x89,0x80,0x84,0x8c,0x88,0x84,0x8d,0x90,0xaf,0x98,0x8c,0xb0,0x0c,0x08,0x8f,0x30,0x0d,0x0b,0x03,0x17,0x08,0x00,0x1a,0x26,0x0d -,0x09,0x00,0x19,0x13,0x00,0x07,0x0d,0x24,0x1b,0x1e,0x1c,0x3e,0x30,0xcf,0xa4,0x94,0x8d,0x94,0x8e,0x87,0x83,0x92,0x8c,0x86,0x81,0x88,0x8e,0x96,0x86,0x82,0xa4,0x23 -,0xac,0x93,0x99,0xa6,0x68,0xb4,0x2c,0x19,0x0c,0x27,0xd3,0x0c,0x00,0x03,0x0a,0x2b,0x10,0x01,0x0b,0x16,0x16,0x06,0x15,0x2c,0x2a,0x19,0x0f,0xa9,0xa2,0xaa,0xa9,0x93 -,0x87,0x8c,0xa2,0xce,0x97,0x91,0x8f,0xa1,0x92,0x93,0xc8,0x8d,0x8b,0x83,0x8a,0x9e,0x89,0x8b,0x84,0xc0,0x34,0xa3,0x63,0x1e,0x12,0x29,0x1d,0x0f,0x16,0x0c,0x0c,0x0f -,0x09,0x02,0x17,0x32,0x0b,0x08,0x08,0x0a,0x0f,0x2a,0x0c,0x25,0x22,0x28,0x1e,0x3c,0x8a,0xa6,0xa0,0xb2,0x8e,0x80,0x8a,0x89,0x88,0x86,0x90,0x8e,0x8b,0x89,0x8d,0x8f -,0x99,0x53,0x68,0x29,0xbe,0x98,0xa9,0x1a,0x0f,0x0d,0xaf,0xa7,0x2a,0x1d,0x18,0x14,0x0f,0x09,0x1d,0x9d,0x23,0x08,0x00,0x02,0x0a,0xb6,0x21,0x3d,0x1d,0x09,0x01,0x0a -,0x8a,0x8c,0x89,0x1e,0x1a,0x90,0x8c,0x8f,0x8a,0x86,0x8c,0x5e,0x12,0x8a,0x80,0x84,0x9c,0x35,0xb5,0x8a,0x87,0x88,0x8f,0x92,0x5d,0x0a,0x0d,0x3b,0x87,0x37,0x23,0x14 -,0x05,0x0a,0x07,0xb9,0x4b,0x10,0x0b,0x02,0x17,0x17,0x53,0x38,0x06,0x0e,0x11,0x0a,0x0c,0x29,0x0f,0xbd,0x36,0xae,0x96,0xa7,0x8a,0xac,0x83,0xac,0x39,0x8b,0x8a,0x83 -,0x91,0x8d,0x80,0x8b,0x8b,0x9a,0x98,0x8d,0x11,0x0c,0x13,0x32,0x92,0x22,0x0d,0x8e,0x98,0x90,0xbe,0x0b,0x11,0x07,0x58,0x48,0x0c,0x90,0x0f,0x04,0x0a,0x0d,0x8b,0x22 -,0x18,0x01,0x01,0x05,0x08,0x12,0x8c,0xa3,0x12,0x27,0x29,0x85,0x8b,0x89,0xaf,0x23,0x99,0xb4,0x89,0x80,0x87,0x80,0x38,0x21,0x8e,0x80,0x91,0x9f,0x24,0x29,0x0e,0x2a -,0x89,0xa1,0x98,0x15,0x91,0x2a,0x08,0x0f,0x1f,0xf1,0x9e,0x0c,0x08,0x33,0x26,0xce,0x0b,0x1c,0x02,0x1b,0x0e,0x08,0x06,0x14,0x0b,0x35,0x9e,0xb5,0x99,0x18,0x8c,0x0e -,0x0b,0x2a,0x9f,0x86,0x88,0x98,0x8f,0x87,0x85,0x90,0x4f,0x9e,0x8f,0x94,0x9d,0x3c,0x1b,0x18,0x2a,0x80,0x8b,0x80,0xaf,0x21,0xa5,0x0e,0xd3,0xba,0x98,0x29,0x2c,0x1d -,0x54,0x2f,0xaf,0x9e,0x09,0x05,0x05,0x0d,0x0f,0x0e,0x00,0x05,0x01,0xb4,0x0f,0xa0,0x9d,0xcf,0x94,0x00,0x13,0x1b,0x8b,0x87,0x90,0x8f,0xa4,0x9c,0x82,0x96,0x84,0x9b -,0x9a,0x93,0xff,0x3c,0x27,0x93,0xa7,0x86,0x1f,0x8b,0xc8,0xb6,0xc0,0x06,0xd1,0x48,0x1d,0x93,0x59,0x29,0x91,0x17,0x36,0x00,0x9d,0x26,0x2c,0x16,0x0b,0x1f,0x07,0x0e -,0x14,0x8f,0x2b,0xb3,0x09,0x14,0x25,0x04,0x15,0x22,0x9c,0x86,0x2c,0xc4,0x9f,0x45,0x8e,0x1a,0xbb,0xb4,0x9a,0x98,0xfe,0x1d,0xa6,0xa9,0x8c,0x80,0x9a,0x8d,0x28,0x80 -,0xa8,0x23,0x2f,0x1b,0x90,0x86,0x91,0x98,0x9e,0x18,0x2f,0x02,0x21,0xaa,0xe6,0x03,0x01,0x03,0x21,0x0f,0x1b,0x9b,0x2e,0xae,0x05,0xcf,0x1e,0x13,0x19,0x1b,0x1c,0x9f -,0x88,0x9c,0x96,0x96,0xa2,0x1f,0x9a,0x9e,0x8a,0x8f,0xd6,0x21,0xa4,0x23,0x9c,0x80,0x8d,0x88,0x2f,0x94,0x12,0x22,0x5d,0x12,0xa1,0x8b,0xa0,0x13,0x37,0x9a,0xa6,0x14 -,0x16,0x2b,0xa8,0x9f,0x1d,0x00,0x12,0x0d,0x65,0x9a,0x28,0xa0,0x19,0x2c,0x07,0x0a,0x2f,0x0f,0xa3,0x98,0xa5,0x1b,0xe1,0x53,0x15,0x2d,0x0f,0xbb,0x8e,0xa6,0xa8,0x19 -,0x1b,0xae,0x9e,0x85,0x86,0x83,0x1f,0x24,0xc4,0x33,0x93,0x8b,0x8a,0x87,0x86,0x9b,0x3d,0xbb,0xaa,0xbb,0x21,0x08,0x3c,0x99,0x13,0x03,0x16,0x06,0x2b,0x93,0x73,0x12 -,0x17,0x31,0x01,0x05,0x0b,0x13,0x8f,0x8b,0xad,0x1f,0x1a,0xa4,0x8f,0x28,0x19,0x9f,0xc4,0x5e,0x2a,0x09,0x4f,0xd2,0x84,0x8e,0x99,0x87,0x9a,0x8a,0x16,0x1e,0xa6,0xa8 -,0x8c,0x8a,0x8a,0x9a,0x9b,0x41,0x1e,0xa5,0x9b,0x3a,0x0c,0xaf,0x17,0x00,0x0a,0x04,0x8e,0x97,0xbd,0xa1,0x0e,0xc2,0x21,0x11,0x08,0x0f,0xbf,0x8d,0x91,0x0a,0x0f,0x23 -,0x43,0x42,0x30,0xa8,0x9b,0x9a,0xe7,0x00,0x36,0x14,0x99,0x87,0xb9,0x91,0x2c,0x89,0x5a,0x41,0x25,0x2b,0x86,0x8e,0x88,0x8b,0xa2,0x48,0x06,0x69,0x9d,0x96,0x8a,0x1a -,0xba,0x0f,0x14,0x06,0x14,0x88,0x88,0x9e,0x00,0x1b,0x17,0x19,0x57,0x0b,0x4c,0x94,0x84,0xa5,0x0f,0xac,0x1d,0x40,0x1f,0x07,0xc1,0x90,0x9a,0x0c,0x00,0x0b,0x18,0x86 -,0x99,0x39,0x2c,0x31,0xca,0x0a,0x3b,0xa2,0x8a,0x8c,0x84,0x93,0x8a,0x8d,0x9d,0x9e,0x40,0x9a,0x8c,0x9a,0xc0,0xc8,0x0a,0xcb,0x09,0xa8,0x88,0xa4,0x4a,0x03,0x05,0x0e -,0xbe,0x0d,0x09,0x1f,0xb7,0xb8,0x2e,0xda,0x0c,0x2e,0xb6,0x0e,0x2c,0x3f,0x8a,0xae,0x0d,0x13,0x23,0x88,0x88,0x93,0x8d,0x4d,0x98,0x2e,0x0f,0x4d,0xcc,0x80,0xaa,0xb6 -,0xa9,0x90,0xac,0x77,0x2b,0x6d,0xa1,0x74,0xb5,0x15,0x2e,0x0a,0x0e,0x09,0xce,0x8e,0x8c,0x28,0x30,0x3c,0x15,0x94,0x0a,0x18,0x9b,0x83,0x8d,0x1a,0x13,0x1f,0x9d,0x98 -,0xa7,0x21,0xa2,0x9b,0x3d,0x05,0x08,0x13,0x3b,0x98,0xc7,0xbe,0x10,0x27,0x1d,0x18,0x17,0xcd,0x9c,0x95,0x95,0xa7,0x8e,0xb6,0x17,0x2a,0xaa,0x90,0x84,0x92,0xa9,0xb8 -,0x2c,0x1b,0x11,0x8d,0x86,0x93,0x6d,0x0a,0x20,0x2d,0x3a,0x0c,0x25,0xa4,0x93,0x2f,0x10,0x10,0x18,0xb3,0x28,0x15,0x0c,0xab,0x95,0x99,0x06,0x03,0x0d,0xb9,0x87,0x91 -,0x8f,0xb8,0x31,0x17,0x2a,0xb2,0xa3,0xa9,0x9e,0x86,0x8f,0xa6,0x1e,0x0b,0xb4,0x89,0x91,0xa6,0x48,0x28,0xbd,0x2f,0x16,0x05,0xbc,0x85,0x88,0x27,0x09,0x0d,0xc5,0xaa -,0x0e,0x26,0x38,0x8b,0x8d,0x41,0x1b,0x35,0xa3,0x29,0x1d,0xb6,0x87,0x8c,0x0f,0x00,0x05,0x1e,0x47,0x8a,0x96,0x94,0x3c,0x0e,0x38,0x1c,0x9d,0x9d,0x9e,0x1c,0x9c,0xad -,0xad,0xb0,0x11,0x1f,0xa7,0x8b,0x4c,0x65,0x65,0xad,0x22,0x05,0x01,0xa9,0x80,0x86,0xb3,0x07,0x2c,0xd0,0xc2,0xac,0x4a,0x9e,0x8c,0x94,0xcf,0x25,0x1d,0x74,0xcb,0xad -,0x9b,0xa4,0x33,0x09,0x07,0x0d,0x4b,0x2a,0x2c,0xc4,0x95,0x9e,0x12,0x16,0x21,0xad,0xa9,0xb1,0x28,0x99,0x8e,0xa6,0x21,0x0b,0xeb,0x8f,0x8e,0x9d,0x49,0xaa,0xae,0x13 -,0x06,0x30,0x93,0x80,0x90,0x19,0x1a,0x29,0x8f,0xfc,0x37,0x1d,0x6b,0x91,0x90,0xb7,0x43,0x3a,0x1e,0xad,0x3c,0x9f,0xa6,0x37,0x1b,0x0f,0x0e,0x18,0x1d,0x16,0x8e,0x89 -,0x8d,0x12,0x08,0x21,0xad,0x93,0x1d,0x24,0xde,0x8b,0x96,0x37,0x25,0xee,0x97,0xac,0x3d,0x18,0xb0,0xe9,0x16,0x09,0x1b,0x32,0x2f,0x8f,0xa8,0x95,0xba,0x1a,0x18,0x16 -,0x43,0x96,0x90,0xac,0xa5,0x3f,0xb5,0x25,0x27,0x9a,0x91,0x93,0x13,0x0e,0x23,0x3c,0x23,0x2f,0x16,0xdf,0x8e,0x9e,0xad,0x0e,0x55,0x2b,0x22,0x1e,0xb9,0x89,0x87,0xa6 -,0x14,0x1e,0x19,0x93,0xa7,0xa0,0xef,0x2b,0x1f,0x11,0x10,0x25,0x9d,0x1a,0x9e,0xa5,0x99,0xc5,0x15,0x36,0x26,0xc9,0x6c,0x46,0x9c,0x83,0x8a,0xd7,0x05,0x0e,0xa9,0xa2 -,0xe4,0x28,0x2c,0xae,0x1e,0x07,0x0e,0x45,0x80,0x87,0x8f,0x22,0x0b,0x19,0x25,0xb9,0x38,0xa4,0x91,0x8a,0x37,0x1e,0x39,0x9d,0xa2,0x51,0xa6,0x2b,0xd3,0x1e,0x15,0x15 -,0x27,0x18,0xa7,0x8f,0x93,0x92,0x1c,0x14,0x1c,0xb3,0x6a,0xd2,0xa4,0x89,0x91,0x23,0x0f,0x1e,0xae,0xa2,0xa4,0x30,0x19,0x20,0x1e,0x0e,0x12,0x14,0x8c,0x84,0x90,0x26 -,0x0b,0x1d,0x33,0xa9,0x66,0xcb,0xa2,0x87,0xa5,0x41,0x2d,0x43,0xa5,0x55,0x33,0x19,0x2d,0x2a,0x1b,0x2a,0x27,0x19,0x8d,0x91,0x95,0x1f,0x0e,0x20,0x40,0xeb,0x3d,0x95 -,0x90,0x87,0x9f,0x38,0x09,0x28,0xa7,0x9d,0x63,0x21,0x27,0x73,0x31,0x2a,0x0f,0x1f,0x8a,0x91,0x90,0x0b,0x16,0x21,0x9f,0x9f,0xda,0xa2,0x8b,0x9d,0x1c,0x1a,0x1d,0xb1 -,0x9f,0xa7,0x1a,0x43,0x39,0x2f,0x1e,0x1c,0x12,0x91,0x8b,0x95,0x4e,0x14,0x58,0x2f,0xdb,0x1f,0x2a,0x91,0x86,0xde,0x19,0x1a,0xaf,0x97,0xa6,0x41,0x27,0x1b,0x17,0x0f -,0x1c,0x10,0xab,0x86,0x8c,0x99,0x0d,0x11,0x18,0xce,0xc1,0xee,0xbf,0x8a,0x94,0xef,0x2e,0xcd,0x98,0x9b,0x34,0x14,0x14,0x4f,0xba,0x18,0x0f,0x19,0x8a,0x8c,0x90,0x18 -,0x07,0x14,0xbd,0xb7,0x3f,0xae,0x88,0x83,0x99,0x19,0x08,0x1f,0xa2,0x8a,0x3b,0x13,0x20,0x2e,0x1a,0x14,0x1c,0x8f,0x89,0x8f,0x1e,0x07,0x0c,0x29,0x9f,0x96,0xa2,0xa6 -,0x89,0xe9,0x14,0x16,0xb0,0x8e,0x93,0x31,0x1b,0x25,0xc4,0x1d,0x13,0x04,0x2d,0x86,0x83,0x95,0x0d,0x0b,0x15,0xb2,0xa2,0x99,0xae,0x90,0x95,0x60,0x0d,0x11,0xb6,0x8a -,0x8c,0x9f,0x26,0x11,0x0b,0x05,0x0c,0xb9,0x86,0x8e,0x93,0x0e,0x16,0x28,0x32,0x54,0xc0,0xa6,0x94,0x9b,0x2e,0x11,0x36,0x95,0x91,0x98,0x26,0x2d,0xd9,0x22,0x0f,0x08 -,0x02,0x9c,0x85,0x81,0xad,0x19,0x19,0x24,0x29,0x1e,0xa6,0x8b,0x88,0xbf,0x12,0x0e,0xbe,0x8c,0x8b,0xc5,0x2f,0x25,0x21,0x08,0x08,0x0f,0x93,0x86,0x87,0xa8,0x09,0x14 -,0x28,0xb2,0x1e,0x1a,0xa3,0x82,0x9f,0x1f,0x0f,0xc2,0x8f,0x98,0x4c,0x20,0x30,0x3c,0x0f,0x0f,0x0d,0x40,0x86,0x8a,0x8b,0x18,0x16,0x16,0x1e,0x1d,0x6f,0x93,0x84,0x90 -,0x23,0x0c,0x17,0x98,0x90,0xbb,0x3c,0xeb,0x9f,0x1d,0x07,0x14,0x16,0x8e,0x8e,0x91,0x0d,0x0e,0xc9,0x98,0x46,0x10,0x40,0x8e,0x83,0x9d,0x2b,0x05,0x1c,0xaf,0x94,0x9e -,0xb4,0xa3,0xa8,0x0e,0x08,0x05,0xbd,0x8f,0x94,0x9b,0x19,0x47,0x34,0x25,0x2f,0xc0,0x96,0x85,0x54,0x0c,0x0a,0x9f,0x88,0x90,0x3f,0x29,0xb5,0xa4,0x2d,0x0f,0x06,0x0d -,0x8d,0x8c,0x97,0x18,0xfe,0xa4,0x2e,0x0b,0x0e,0x2e,0x94,0x89,0x96,0x37,0x1a,0xab,0xa7,0x98,0x2e,0x4f,0xd1,0x4c,0x0b,0x09,0x19,0x99,0x88,0x8f,0xdd,0x0f,0x45,0xba -,0x3d,0x0a,0x2d,0x98,0x86,0x99,0x56,0x45,0x3b,0xac,0xac,0x2b,0x1d,0x2d,0xb8,0x99,0x18,0x0e,0x11,0x96,0x9b,0x9d,0xcf,0x2b,0x22,0x12,0x24,0xb9,0x94,0x8f,0x8c,0x6b -,0x1b,0x16,0xb8,0x9c,0xc4,0x2c,0x9f,0xbf,0x24,0x0a,0x19,0x1c,0xb6,0x8e,0x39,0x4e,0x16,0x95,0xa1,0x39,0x11,0x24,0xa1,0x94,0x92,0xad,0x20,0x0f,0xb0,0x8f,0x99,0x55 -,0x9c,0xb4,0x1f,0x0d,0x1b,0x0d,0xac,0x98,0x92,0x99,0x19,0xcb,0x18,0x29,0x16,0xa9,0x97,0xb5,0x46,0xed,0x9d,0xbb,0x4c,0xcb,0xb9,0xb2,0x4c,0x2f,0x1c,0x0c,0x18,0x29 -,0x8b,0x9c,0xcd,0x2e,0xcd,0xda,0x1a,0x21,0x15,0xa7,0x91,0x88,0xa1,0x20,0x2f,0xf1,0xaf,0xaa,0xbb,0xc1,0x24,0x1f,0x19,0x4b,0x16,0x40,0x89,0xd5,0x3d,0x26,0x99,0xdc -,0x1e,0x19,0xc0,0x9a,0xa2,0x98,0xae,0x3d,0x2c,0x6e,0x37,0x46,0x3d,0x92,0x95,0x2b,0x0a,0x15,0x0f,0xbf,0xa4,0xae,0x9e,0x2b,0xa7,0x2b,0x1e,0x1a,0xad,0x95,0xad,0x5a -,0xbc,0xaa,0xb8,0x2b,0xa0,0x96,0xb5,0xbf,0x21,0x19,0x0e,0x22,0x36,0x97,0x2c,0x34,0x97,0x9d,0xbd,0x18,0x28,0x13,0xbd,0x8f,0x9d,0xe6,0x27,0xac,0x96,0x6b,0x21,0x32 -,0xb8,0x2c,0x28,0x24,0x28,0x12,0x33,0x8e,0xa7,0xa6,0x5e,0xa3,0x28,0x2c,0x3d,0x29,0xad,0xdc,0x98,0x95,0xca,0x3c,0xda,0xdd,0x3e,0x2f,0xd2,0xc6,0x1e,0x17,0xbe,0x50 -,0xe0,0x3b,0x72,0x50,0x4e,0x9a,0x45,0x26,0x15,0xa5,0x8c,0xab,0x5c,0x3c,0x4c,0x31,0xbe,0x8f,0xac,0x1e,0x28,0x48,0x1b,0x1a,0x31,0x4e,0xd0,0x23,0xa6,0xbf,0xa2,0xcd -,0x55,0xc7,0x1e,0xb2,0xaf,0x9f,0x6a,0xa6,0xb8,0x3d,0xcf,0xbb,0xa2,0xa8,0x2b,0x0a,0x23,0x1f,0x27,0x9f,0xb7,0x54,0x3d,0xa2,0x97,0x3e,0x21,0x2c,0x59,0x4a,0xa7,0x92 -,0xb1,0x25,0x47,0xaa,0xbf,0xa8,0xae,0x38,0x12,0x10,0xd1,0xb1,0x3c,0x2f,0xa9,0xae,0x2f,0x53,0xb7,0x49,0x1c,0x2d,0x9c,0xa3,0x5e,0xa9,0x9f,0xc6,0x44,0x3d,0xd2,0x38 -,0xd8,0xa2,0x53,0x18,0x16,0xd1,0x2e,0x47,0xf5,0x30,0x32,0x2b,0xaf,0xae,0xdc,0x3e,0xa9,0x99,0x99,0xad,0xb7,0x2f,0x1c,0xa4,0x9b,0x9d,0x9e,0x39,0x2b,0x26,0x19,0x15 -,0x22,0x3d,0x24,0xac,0x9d,0xaa,0x28,0x19,0x3d,0xb7,0xa9,0x9b,0x9b,0x28,0x1e,0xd4,0x9f,0xd8,0xcb,0x95,0xba,0x29,0x20,0x35,0x28,0x1e,0x37,0xd3,0xa5,0xcd,0x64,0x24 -,0x29,0x34,0x73,0x48,0x27,0x94,0x99,0xac,0x2d,0x2e,0xa9,0xe4,0xab,0xa1,0x9f,0xbf,0x1f,0x2a,0x2e,0x3a,0x53,0x35,0x2e,0x48,0x4e,0x3d,0x5e,0x22,0x28,0x4e,0x98,0x8f -,0xa1,0x4d,0x11,0x17,0xd7,0x9b,0x9d,0xa1,0xa3,0xb9,0x3b,0x25,0x2c,0xc3,0x3a,0x38,0x4f,0x23,0x21,0x2d,0x5e,0xd7,0x2c,0x2c,0x9d,0xa2,0xb8,0x2c,0x23,0x4c,0x4b,0x96 -,0x90,0x9f,0xb2,0xbd,0x58,0x2d,0x2d,0xc6,0xe1,0x28,0xa9,0xb9,0x2b,0x1b,0x17,0x22,0x16,0xce,0x9e,0xa5,0xca,0x16,0x29,0xcb,0x9c,0x9a,0xad,0xb5,0x9f,0xa7,0xad,0x35 -,0x21,0x9f,0xad,0xa9,0xb9,0x21,0x24,0x2e,0x24,0x1e,0x29,0xb1,0x9e,0xad,0x31,0x0f,0x17,0xda,0xa2,0xaa,0xae,0xad,0x32,0x4f,0xb8,0xa4,0x9d,0xcc,0x4d,0xe1,0x1f,0xec -,0xa2,0x32,0x26,0x24,0xbc,0xa8,0x98,0xa9,0x14,0x0b,0x1c,0xa3,0x99,0xa9,0xd2,0xba,0x2b,0x27,0xc1,0xbb,0xd3,0x65,0x2e,0x36,0xc4,0xb2,0x61,0xc9,0xfb,0x3a,0xc6,0x9f -,0x9f,0xd0,0x1c,0x13,0x2a,0xaf,0x93,0xa8,0xda,0x3f,0x35,0xb7,0x34,0xde,0xa2,0xbd,0xb4,0x28,0x1b,0xe9,0xc3,0x4e,0x33,0x26,0xb3,0x98,0xad,0x2c,0x1b,0x38,0x4f,0x9f -,0x9a,0xa4,0x44,0x1d,0x29,0x2e,0x47,0xcb,0x9f,0xcd,0x4a,0xc5,0xbb,0x6d,0x2e,0x52,0xe3,0xbd,0xad,0xac,0xbf,0x16,0x13,0x68,0xad,0xb1,0xd5,0xc9,0x6f,0x3a,0x2e,0x41 -,0xab,0xa2,0xb8,0xcd,0x3f,0x54,0xb3,0xad,0xaf,0x1c,0x2b,0xb9,0x9c,0x98,0x32,0x24,0x0e,0x1c,0xa4,0x9f,0x9d,0x4c,0x2e,0x20,0x45,0xdc,0xcb,0x9c,0xba,0xc0,0x2f,0x21 -,0x2c,0xbc,0xc7,0x35,0x2a,0x4b,0x97,0x9f,0x25,0x24,0x1e,0x33,0x9d,0x9f,0xad,0x56,0x29,0x2c,0xb0,0x42,0xa9,0xa8,0x58,0x20,0x27,0xfe,0x6d,0xb4,0x45,0x32,0x64,0xae -,0xbc,0xaf,0x23,0x1a,0x32,0xb2,0xa4,0x9b,0xa7,0x68,0x49,0x2f,0xc4,0xde,0xb4,0xb9,0x29,0x25,0x35,0xb6,0xae,0xae,0x2f,0x17,0x55,0x9e,0xa1,0xb2,0x1d,0x18,0x39,0xa9 -,0x92,0xa7,0x19,0x22,0xc0,0xbb,0xa0,0xb7,0xe3,0x3d,0x29,0x5a,0xa8,0x58,0x24,0x2f,0x22,0x2d,0xa5,0x9d,0xbf,0x3f,0x28,0x3e,0xac,0x95,0xa9,0xc7,0x2d,0x26,0xb3,0xb9 -,0xcd,0x23,0x44,0x64,0x25,0x1d,0xbe,0x9b,0xcf,0x35,0x1e,0x30,0x98,0x9b,0xc2,0x2f,0x23,0x28,0xbb,0xb0,0xc7,0xb8,0x2f,0xbb,0xc8,0xb6,0xad,0xdf,0x2a,0x23,0xaf,0xcb -,0xa0,0xaa,0x24,0x1e,0x2e,0xae,0xac,0xd8,0x34,0x29,0x1e,0x35,0x9f,0x9b,0xb5,0x5e,0x3d,0x2f,0x30,0xbf,0x9e,0xb3,0xc6,0x45,0x2e,0x2a,0x35,0xf5,0xec,0x28,0x2e,0xa5 -,0x98,0xab,0x20,0x28,0x2b,0xa9,0xac,0x3a,0x1a,0xe3,0x61,0x4f,0xc2,0xb7,0xa6,0x5c,0x56,0x19,0xad,0x95,0x97,0x28,0xe2,0xcd,0x28,0xcd,0x42,0x2d,0xf4,0xbf,0x5a,0x3d -,0x1b,0x1f,0x3e,0x92,0xac,0xc2,0x2c,0xb5,0x9f,0x34,0x1c,0x1a,0xa4,0x95,0x9f,0xca,0x36,0x1a,0x25,0x2d,0xfd,0xa8,0xd4,0x2c,0x2d,0x97,0xa1,0x4d,0x2a,0x21,0xa8,0x31 -,0x24,0xa9,0x9d,0x37,0x0d,0x13,0x93,0x8c,0x1f,0x25,0x8e,0x94,0xcb,0x0e,0x0b,0xc9,0x8b,0x89,0x50,0x1b,0x0f,0x9f,0x8f,0x11,0x20,0xa0,0xb8,0x12,0x38,0x1b,0x1e,0x20 -,0xcb,0x83,0x9a,0x5b,0x0a,0x2e,0x2c,0x14,0xa0,0x8a,0x9d,0x8d,0x90,0xcc,0x1f,0x12,0xa5,0x3d,0x25,0x15,0xbf,0x27,0x03,0x17,0x99,0x3f,0x9c,0x8e,0x96,0x94,0x9a,0x95 -,0xb2,0x0b,0x04,0x3b,0x82,0xa0,0x0f,0xa1,0xb3,0x8e,0xbd,0x12,0x0f,0x22,0x34,0x92,0x36,0x07,0x08,0x76,0x8b,0x27,0xa8,0x3c,0xad,0x9a,0x8f,0x50,0x4d,0xad,0xa6,0x97 -,0x3e,0x23,0xa8,0xab,0x0a,0x0c,0xb7,0x99,0x43,0x0c,0x0c,0xac,0xc6,0x9f,0x95,0x9e,0x1c,0xaa,0x8b,0x27,0x11,0x18,0x9a,0x8c,0xa7,0x98,0xa4,0x24,0x5a,0xd2,0xce,0x0b -,0x0c,0x9b,0x9a,0x0f,0x0b,0x15,0x18,0xa5,0x88,0x85,0x8d,0x45,0x2b,0xee,0x1e,0x08,0x1d,0x88,0x9d,0xa6,0xa5,0x2d,0x24,0xc8,0x3a,0x0c,0x31,0xa7,0x99,0x26,0x03,0x19 -,0x8a,0x8f,0x1e,0x9e,0x9d,0xaa,0xbc,0xfd,0x2b,0xb8,0xa1,0xa8,0xc5,0x13,0x22,0xb4,0x8b,0x16,0x0e,0x2b,0xa8,0xa5,0x21,0x1c,0x32,0x26,0xa5,0x8e,0x34,0x19,0x20,0xae -,0x5c,0xf5,0xbf,0x9d,0x22,0x9f,0x98,0x8f,0xa6,0x20,0x20,0x1f,0x0c,0x14,0x8e,0xc1,0x23,0x0c,0x1f,0x26,0xbf,0x91,0x8c,0x8c,0xb5,0xa2,0xa0,0x0f,0x13,0x1d,0x98,0xad -,0x98,0xa4,0xcf,0x9f,0x23,0xcb,0x0c,0x72,0x9e,0x9d,0x2a,0x02,0x13,0xb0,0x9a,0x9c,0xad,0x98,0x8e,0x51,0x0f,0x1e,0x96,0x92,0x94,0x64,0x19,0x8e,0x99,0x91,0x29,0x1d -,0x97,0x9c,0xe4,0x1a,0x95,0xee,0xa7,0xab,0x8f,0x92,0xdc,0xac,0xbf,0x29,0x1e,0x1c,0x10,0x13,0x10,0x3d,0x27,0x17,0x04,0x01,0x03,0x00,0x0e,0x0b,0x0c,0x0c,0x04,0x08 -,0x0b,0x0f,0x23,0xb6,0x9b,0x9c,0x9f,0xab,0x54,0x2a,0xaa,0x8c,0x8c,0x8b,0x85,0x92,0x8d,0x8e,0x9f,0x8e,0xb9,0x8a,0x94,0x9d,0x9b,0xab,0x8b,0x9b,0x8a,0x89,0x87,0x87 -,0x8d,0x90,0x9b,0xcc,0x96,0xb1,0xbe,0x4e,0x9f,0x8d,0x1e,0x2c,0x18,0x3e,0xbe,0x1b,0x15,0x0f,0xed,0x1f,0x12,0x1a,0x0c,0x24,0x14,0x27,0x0d,0x24,0xdf,0x12,0x11,0x0c -,0xa9,0x97,0x9f,0x19,0x04,0x04,0x09,0x1d,0x9a,0x1f,0x0e,0x16,0x17,0x1d,0x18,0x2a,0x9b,0x94,0x96,0x97,0x3e,0x2b,0xc6,0x1d,0x2a,0x32,0xa7,0x8a,0xbf,0xaf,0x58,0x3a -,0x6a,0xce,0x9a,0x21,0x0c,0x11,0x39,0xce,0x2e,0x9c,0x8f,0x94,0x98,0xac,0xa0,0x9a,0xab,0x9c,0x9e,0x8c,0x85,0x80,0x84,0x87,0x8b,0x8b,0x84,0x8b,0x8c,0x93,0x87,0x89 -,0x8d,0x97,0xa9,0x42,0xbc,0x9a,0x9a,0x19,0x17,0x16,0x0e,0x0a,0x02,0x19,0x10,0x0a,0x02,0x01,0x00,0x06,0x04,0x09,0x03,0x06,0x0b,0x05,0x03,0x03,0x04,0x0b,0x26,0xd9 -,0xa1,0x2d,0x1c,0x0f,0x1d,0x1b,0xa5,0xa6,0x98,0x89,0x9a,0x91,0x98,0xa7,0x9e,0x98,0x9a,0xb3,0x43,0xaa,0x9a,0x8a,0x87,0x87,0x8b,0x8c,0x84,0x88,0x87,0x99,0xae,0x9f -,0xa7,0x8f,0x8e,0x8f,0x9c,0x3f,0x9e,0x8f,0xc4,0x3d,0x12,0xa5,0x9d,0xc6,0x2a,0x0e,0x26,0x1c,0xb7,0x54,0x1e,0x2c,0x3c,0x45,0x1d,0x19,0x1e,0x34,0x46,0x3e,0x0e,0x0b -,0x09,0x0f,0x1f,0x1b,0x15,0x0c,0x15,0x0d,0x1f,0x1c,0x1f,0x1d,0xc4,0xb8,0x9a,0xa4,0x3b,0x12,0x09,0x1e,0x4b,0x90,0x9f,0x35,0x0e,0x2e,0x37,0x3b,0x29,0x1a,0x0d,0x11 -,0x1b,0x25,0xaf,0x38,0x98,0xa0,0xa2,0x92,0x9e,0x8c,0x8a,0x8d,0x8d,0x91,0x91,0x8e,0x85,0x85,0x82,0x81,0x84,0x84,0x86,0x87,0x8b,0x8e,0x8b,0x87,0x9e,0x97,0x40,0x3a -,0x96,0x9f,0x93,0x1c,0x12,0x03,0x03,0x0a,0x12,0x1a,0x0a,0x03,0x01,0x00,0x06,0x0c,0x01,0x05,0x00,0x09,0x04,0x05,0x07,0x0c,0x2c,0x2f,0x25,0x18,0x1d,0x22,0xb1,0x73 -,0x41,0x25,0x47,0x93,0x8c,0x90,0x93,0xa2,0x98,0x9c,0xbc,0xae,0xb0,0x9c,0x94,0x88,0x8a,0x8e,0x8f,0x8c,0x87,0x84,0x85,0x8c,0xc7,0xaf,0x8d,0x8e,0x8a,0x8d,0x9a,0x4c -,0x9a,0x97,0x9c,0xa0,0xba,0x7c,0xc4,0xae,0x1f,0x14,0x10,0x22,0x2a,0x9c,0xac,0x1b,0x1b,0xd2,0x2f,0x1c,0x10,0x19,0x37,0x2c,0x26,0x0d,0x0d,0x08,0x17,0x2c,0x1e,0x08 -,0x06,0x08,0x19,0x0d,0x19,0x12,0x12,0x59,0x25,0xae,0x2e,0x1e,0x21,0x37,0x1f,0x25,0x28,0x2f,0x1d,0xaf,0x92,0xa4,0x1b,0x05,0x0b,0x0f,0xc6,0xac,0xc2,0x31,0x55,0x9d -,0x8e,0x89,0x8d,0x8a,0x89,0x93,0x8f,0x89,0x8a,0x84,0x80,0x80,0x83,0x8a,0x8a,0x82,0x80,0x82,0x88,0x8e,0x93,0x9d,0xa6,0x99,0xc4,0x27,0x21,0xaf,0xca,0x0c,0x0c,0x08 -,0x0c,0x10,0x1c,0x0d,0x02,0x02,0x02,0x06,0x09,0x07,0x03,0x03,0x03,0x0c,0x0c,0x08,0x05,0x06,0x09,0x0c,0x1c,0x5b,0xc5,0xe5,0xae,0xa3,0x3e,0x21,0x2d,0xa4,0x8d,0x97 -,0x98,0x91,0x93,0x9a,0xa3,0xa7,0x54,0xc5,0x99,0x8f,0x8e,0x92,0x8f,0x89,0x88,0x89,0x88,0x87,0x93,0xab,0x9c,0x8e,0x8d,0x9d,0x9d,0x96,0x99,0x93,0x97,0x9a,0xca,0xb5 -,0xa8,0xb9,0x3b,0x18,0x1b,0x24,0x76,0xa8,0xaf,0x1c,0x14,0x1f,0xd3,0xbf,0x3a,0x2d,0x1e,0x1a,0x13,0x0e,0x0b,0x11,0x15,0x19,0x1f,0x15,0x16,0x10,0x14,0x14,0x14,0x13 -,0x04,0x09,0x2b,0x9f,0x9d,0xd9,0xca,0x2c,0x24,0x1c,0x11,0x29,0x34,0xb4,0xa8,0xa8,0x20,0x0b,0x11,0x1d,0x2b,0x29,0x35,0x27,0x1d,0xae,0x89,0x86,0x89,0x92,0x98,0x91 -,0x8c,0x89,0x89,0x89,0x89,0x85,0x81,0x81,0x80,0x81,0x84,0x88,0x86,0x8b,0x9c,0xa4,0x9c,0x93,0x98,0xb2,0x3b,0x39,0x38,0x1b,0x0b,0x07,0x04,0x07,0x11,0x18,0x0c,0x05 -,0x04,0x04,0x06,0x06,0x02,0x02,0x03,0x0a,0x13,0x16,0x0b,0x06,0x0a,0x0a,0x0c,0x10,0x1e,0x24,0x1d,0xc4,0x89,0x8d,0xa2,0x5c,0xcd,0x9a,0x98,0x9a,0xbd,0xfa,0xab,0x97 -,0x90,0x8f,0x8f,0x93,0x9e,0xac,0x96,0x93,0x93,0x8c,0x87,0x87,0x8a,0x8d,0x93,0x9b,0x91,0x94,0xa8,0xb2,0xb9,0x93,0x88,0x8b,0x9a,0xca,0xad,0x48,0x10,0x1b,0x2f,0x29 -,0x1f,0x3f,0x96,0x95,0x35,0x10,0x15,0x28,0x26,0x19,0x14,0x12,0x18,0xc2,0xa3,0x2e,0x11,0x0d,0x0d,0x0d,0x0c,0x09,0x09,0x10,0x26,0x29,0x18,0x14,0x1a,0x1b,0x20,0x1a -,0x1b,0x1d,0x19,0x2f,0xa2,0x95,0xa2,0xb2,0xca,0x1e,0x10,0x17,0x18,0x16,0x16,0x35,0x94,0x91,0xa3,0xb9,0xbb,0xc2,0xab,0x97,0x95,0x8e,0x86,0x81,0x80,0x82,0x84,0x89 -,0x88,0x87,0x84,0x83,0x85,0x89,0x87,0x82,0x82,0x87,0x96,0x9f,0xd2,0x28,0x1a,0x14,0x0c,0x13,0x18,0x1d,0x1f,0x0f,0x0a,0x03,0x02,0x07,0x0a,0x03,0x01,0x07,0x16,0x17 -,0x0c,0x06,0x02,0x04,0x0a,0x09,0x04,0x03,0x0a,0x2c,0xb7,0xd4,0x2e,0xf1,0xc3,0x3b,0xdf,0xab,0xae,0xb7,0x96,0x87,0x84,0x8b,0x9e,0xe8,0x57,0xc4,0xac,0x9d,0x98,0x9c -,0x8d,0x85,0x84,0x88,0x8b,0x97,0x9d,0x8d,0x90,0xa5,0xad,0x8e,0x88,0x8b,0x94,0x9c,0x98,0xa1,0xac,0xbb,0x2e,0x18,0x25,0x9f,0x9b,0xae,0x27,0x18,0x18,0x1f,0x38,0x20 -,0x10,0x12,0xc6,0x8f,0x9b,0x24,0x15,0x1c,0x22,0x15,0x08,0x07,0x09,0x10,0x2a,0xcc,0xbd,0x31,0x1b,0x0b,0x0f,0x0e,0x06,0x0a,0x0b,0x1e,0x9f,0x8f,0x51,0x22,0x3b,0x40 -,0xbd,0x18,0x0b,0x0c,0x1e,0xa7,0xa4,0x53,0x1c,0x37,0x4b,0x41,0x4c,0x1f,0x28,0x2d,0xa4,0x88,0x85,0x89,0x87,0x86,0x89,0x85,0x84,0x8c,0x98,0x8b,0x80,0x80,0x80,0x86 -,0x89,0x87,0x89,0x95,0x9d,0xad,0xc6,0xa5,0x9d,0xa4,0x1b,0x0f,0x0d,0x0c,0x0c,0x02,0x01,0x03,0x05,0x09,0x1c,0x1c,0x07,0x06,0x0d,0x0b,0x08,0x02,0x01,0x05,0x14,0x2b -,0x0f,0x06,0x07,0x0f,0x22,0x14,0x0b,0x19,0x30,0xcc,0x9c,0x8e,0x9b,0x9b,0x8f,0x95,0x9e,0xa1,0x5b,0x27,0x4e,0x98,0x86,0x84,0x95,0xa9,0x99,0x8d,0x8d,0xb9,0x2a,0xd5 -,0x8f,0x83,0x85,0x8e,0x92,0x8a,0x87,0x98,0xad,0x1f,0xb7,0x8d,0x8e,0x8f,0xa9,0xcf,0x4a,0x99,0x99,0x37,0x0b,0x05,0x0a,0x31,0xa9,0xaa,0x16,0x19,0x34,0x2d,0xa9,0x1a -,0x0c,0x0f,0x23,0x1c,0x2e,0x2d,0x12,0x14,0xbe,0x2a,0x15,0x0d,0x0c,0x12,0x1b,0x9f,0xdb,0xaf,0x2c,0x33,0xb2,0x9f,0x3e,0x11,0x16,0x32,0x95,0x94,0x9e,0xb6,0x8f,0x91 -,0xa9,0x3d,0x1c,0x13,0x2c,0x9c,0xa0,0xba,0x59,0xac,0xb8,0xa9,0xa4,0x48,0x19,0x12,0x27,0xac,0x8d,0x9c,0x2b,0xea,0xa1,0x9b,0xa6,0x1b,0x0f,0x2e,0xa7,0x9f,0xcc,0x55 -,0xbf,0x98,0xa6,0x33,0x13,0x14,0x20,0x1d,0xa8,0xac,0x48,0xc6,0x97,0x9d,0x92,0x9a,0x2c,0x1f,0x37,0xad,0x9c,0x98,0xb7,0x9e,0x96,0x8f,0xda,0x14,0x13,0x12,0x33,0xa6 -,0xa7,0x4c,0xb9,0x97,0x9c,0x9e,0x9f,0x34,0x2f,0x2e,0x6e,0x9b,0x95,0xa6,0x30,0x2c,0x4b,0x3e,0x28,0x0f,0x0d,0x1c,0x3b,0x21,0x0f,0x26,0xa9,0x91,0xa3,0x0f,0x03,0x06 -,0x19,0x1b,0x26,0x25,0x25,0x5b,0xbc,0x3e,0x1e,0x17,0x06,0x05,0x16,0xc7,0xca,0x21,0x16,0xed,0x8e,0x8f,0xac,0x20,0x46,0xa8,0x93,0x87,0x8a,0x8e,0x8b,0x82,0x85,0x87 -,0x9c,0x50,0xa7,0xa2,0x8c,0x8c,0x8f,0x9f,0x95,0x8b,0x8b,0x9a,0x25,0x2f,0x2b,0xae,0xa0,0xb9,0xae,0x9a,0xac,0xab,0x50,0x17,0x10,0x17,0x27,0x17,0x15,0x11,0x0e,0x2e -,0xaf,0x6c,0x29,0x14,0x09,0x09,0x18,0x37,0x72,0x34,0x22,0x24,0x3f,0x1f,0x0c,0x0d,0x13,0x18,0x2f,0x1e,0x19,0x1c,0xaa,0x94,0x72,0x1e,0x14,0x1f,0x27,0x49,0xb9,0xad -,0xad,0xb7,0x36,0xe2,0xcb,0x26,0x16,0x1b,0xbe,0xa8,0xa5,0xa9,0xa5,0x8d,0x84,0x89,0x8a,0x9d,0xb2,0x95,0x8f,0x8a,0x87,0x8c,0x90,0x8e,0x8a,0x8c,0x97,0x99,0x97,0x93 -,0x8f,0x97,0xa3,0x9f,0x95,0x98,0xad,0x10,0x03,0x01,0x04,0x12,0x1e,0x1a,0x06,0x07,0x06,0x07,0x0a,0x04,0x04,0x02,0x06,0x07,0x0e,0x12,0x13,0x16,0x17,0x15,0x0e,0x0e -,0x0c,0x0c,0x09,0x1f,0xab,0xb2,0xbc,0xb9,0x99,0x8b,0x8d,0x8a,0x8c,0x8d,0x85,0x8a,0x89,0x85,0x82,0x80,0x82,0x81,0x82,0x84,0x88,0x8b,0x87,0x85,0x86,0x89,0x98,0xa1 -,0xa5,0xb8,0x27,0x10,0x0f,0x0e,0x2f,0xa0,0xa7,0x9f,0xa9,0x38,0x2a,0x1f,0x19,0x23,0x1b,0x14,0x2a,0x2b,0x1d,0x25,0x1b,0x12,0x0e,0x0c,0x08,0x06,0x05,0x08,0x0d,0x0f -,0x0f,0x09,0x08,0x0f,0x3c,0xc9,0x3d,0x2e,0x3c,0xc0,0x9e,0xb7,0x3a,0x29,0x2b,0xac,0xa3,0x95,0xa4,0xd5,0x3c,0x57,0xa3,0xa7,0xab,0x2a,0x22,0x1d,0x13,0x18,0x19,0x1b -,0x2c,0x8e,0x93,0x9a,0x93,0xac,0x94,0x94,0x9e,0x91,0x88,0x84,0x82,0x82,0x82,0x81,0x81,0x82,0x82,0x83,0x86,0x8d,0x8f,0x8e,0x92,0xaf,0x23,0x13,0x0e,0xae,0xcc,0x15 -,0x0c,0x01,0x02,0x03,0x08,0x04,0x03,0x03,0x02,0x07,0x06,0x09,0x07,0x0d,0x0d,0x0d,0x07,0x04,0x08,0x0b,0x12,0x11,0x0e,0x07,0x07,0x0c,0x97,0x8f,0x8f,0x9a,0x35,0xad -,0xa4,0x94,0x9d,0x90,0x91,0x8a,0x85,0x8c,0x8d,0x90,0x88,0x89,0x8e,0x94,0x9d,0xa6,0xa7,0x98,0x95,0x9e,0xce,0x1f,0x9c,0x80,0x87,0x8f,0xce,0x41,0xa1,0x9c,0xbc,0x22 -,0xcf,0xdf,0x9f,0xa0,0x62,0x42,0x2e,0xa7,0xad,0xb4,0x1e,0x17,0x10,0x12,0x2a,0x16,0x14,0x0d,0x0a,0xb0,0x89,0xab,0xdb,0x1c,0x2c,0xaa,0xb2,0x20,0x0c,0x1a,0x1b,0xa9 -,0xa2,0x4f,0x1d,0x1a,0x6d,0xdf,0x35,0x0f,0x07,0x07,0x0e,0x16,0x10,0x09,0x06,0x04,0x38,0x8b,0xa0,0xdc,0x10,0x14,0xcf,0x93,0x9b,0xd4,0x9b,0x8e,0x82,0x81,0x83,0x84 -,0x82,0x81,0x82,0x83,0x88,0x87,0x87,0x86,0x88,0x8e,0xa8,0x29,0x10,0xa4,0x83,0xa9,0x1f,0x0a,0x09,0x11,0x15,0x0a,0x01,0x06,0x07,0x0a,0x0a,0x06,0x06,0x08,0x14,0x14 -,0x0c,0x05,0x03,0x04,0x0b,0x1c,0x10,0x09,0x05,0x04,0x2d,0x84,0x92,0x9a,0xbb,0x27,0x98,0x95,0x9f,0x2c,0xbf,0x99,0x8b,0x8b,0x9e,0xa6,0xae,0x8e,0x8d,0x94,0xa3,0xae -,0xb5,0xae,0x93,0xac,0xe0,0xca,0x26,0x98,0x81,0x8a,0x89,0x8f,0x9c,0x8e,0x8f,0x98,0x58,0xbd,0x9c,0x91,0x95,0xa8,0xdc,0x28,0x9d,0xa4,0x48,0x1c,0x0e,0x0e,0x0f,0x10 -,0x0d,0x0f,0x0d,0x05,0x20,0x8e,0xb7,0x34,0x0f,0x0a,0x22,0x27,0x13,0x06,0x0f,0x1e,0x2f,0x21,0x20,0x16,0x0e,0x1e,0x24,0x27,0x1c,0x15,0x10,0x1b,0x25,0x1b,0x10,0x0f -,0x06,0x1b,0x89,0x99,0x9f,0x34,0x2e,0x99,0x97,0x97,0xdb,0xa4,0x8e,0x87,0x84,0x84,0x86,0x86,0x80,0x80,0x81,0x81,0x84,0x86,0x83,0x86,0x8c,0x93,0x9d,0x37,0x9f,0x83 -,0x97,0x33,0x0d,0x07,0x0e,0x0d,0x08,0x01,0x02,0x04,0x09,0x0c,0x07,0x03,0x04,0x0b,0x0e,0x0c,0x0c,0x09,0x08,0x11,0x0f,0x0e,0x0b,0x08,0x02,0x0e,0x91,0x98,0x9e,0xac -,0xca,0x98,0x91,0x9d,0x28,0x65,0x9c,0x94,0x8f,0x9a,0x9c,0x94,0x8a,0x8a,0x8d,0x9c,0x5c,0xc4,0xab,0xaa,0xb9,0xb1,0x6c,0x20,0xa2,0x81,0x87,0x8f,0x97,0xa8,0x98,0x9c -,0xa3,0x2f,0x4a,0xa5,0x99,0x8e,0xb7,0x25,0x19,0xd4,0x9a,0xa9,0x2d,0x13,0x19,0x2e,0x2e,0x26,0x19,0x0c,0x04,0x08,0x94,0x90,0x7d,0x29,0x1d,0xaf,0xb1,0xf9,0x0f,0x0d -,0x20,0x27,0xd3,0x27,0x1f,0x1a,0x29,0xa5,0x58,0x1d,0x11,0x12,0x1b,0x1c,0x0e,0x0c,0x11,0x09,0x10,0x96,0x97,0xbe,0x33,0x22,0xbe,0xa6,0xa2,0x4b,0x47,0x99,0x8a,0x85 -,0x87,0x8b,0x8f,0x87,0x81,0x81,0x81,0x82,0x84,0x83,0x83,0x87,0x8f,0xb2,0x22,0x53,0x88,0x8e,0xc0,0x2b,0x1c,0x20,0x14,0x0c,0x04,0x01,0x03,0x06,0x07,0x05,0x06,0x03 -,0x0a,0x17,0x16,0x0d,0x05,0x05,0x06,0x09,0x0b,0x0b,0x0b,0x06,0x28,0x8e,0x9a,0xac,0x42,0x3a,0xb5,0xa8,0x99,0xb1,0xbd,0x9a,0x8c,0x8b,0x9b,0xbf,0xbb,0x97,0x8d,0x97 -,0x9d,0xa0,0x9d,0x9b,0x93,0x93,0xac,0x27,0x1c,0x8e,0x83,0x8d,0x9b,0x99,0x8a,0x8d,0x8f,0x9e,0x2d,0x35,0x9d,0x8f,0xa6,0xdc,0x2a,0x29,0x98,0x9b,0xc8,0x2f,0x26,0x1a -,0x18,0x1c,0x15,0x15,0x09,0x0f,0x96,0x99,0x2a,0x1a,0x1d,0x33,0x41,0x3f,0x11,0x08,0x18,0xb5,0xd5,0x19,0x0f,0x0a,0x10,0x2f,0x27,0x17,0x0e,0x13,0x19,0x1c,0x27,0x10 -,0x0a,0x02,0x0f,0x99,0xaf,0x2e,0x1f,0x3a,0xaa,0x9b,0x95,0x43,0x26,0xb3,0x8c,0x89,0x8e,0x8b,0x8a,0x83,0x80,0x80,0x81,0x84,0x83,0x86,0x83,0x86,0x8d,0x9f,0xa9,0x85 -,0x80,0x8c,0xcd,0x2c,0x4c,0x21,0x25,0x0c,0x01,0x02,0x0b,0x17,0x0a,0x03,0x02,0x02,0x08,0x0e,0x08,0x02,0x06,0x09,0x0c,0x11,0x0b,0x0a,0x04,0x06,0xa8,0x9d,0x24,0x14 -,0x21,0x9d,0x8d,0x8a,0xa6,0x23,0xfc,0x92,0x89,0x97,0xac,0x4b,0xaa,0x89,0x88,0x91,0xa9,0x9b,0x9c,0x9e,0xa7,0x43,0x46,0x1f,0x96,0x80,0x87,0x93,0xac,0x8f,0x89,0x87 -,0x8e,0x2d,0x2d,0x9b,0x87,0x95,0x3c,0x2a,0x22,0x3a,0xb4,0xaf,0x19,0x0b,0x1a,0x29,0xd7,0x37,0x16,0x09,0x08,0xa4,0x94,0xcc,0x18,0x14,0x2a,0x4d,0x94,0xba,0x10,0x17 -,0x29,0x45,0x11,0x08,0x09,0x0b,0xd5,0xaa,0x27,0x0e,0x0d,0x1a,0x1a,0x1f,0x12,0x07,0x01,0x19,0x95,0x9c,0xce,0x17,0x3e,0xb2,0xa4,0x9a,0x17,0x08,0x1b,0x8c,0x84,0x9d -,0xaf,0xb0,0x8f,0x82,0x82,0x87,0x93,0x8a,0x84,0x82,0x82,0x81,0x8c,0x94,0x82,0x80,0x85,0x95,0x56,0x70,0xbc,0x9a,0xb3,0x0c,0x07,0x0e,0x15,0x07,0x02,0x01,0x01,0x0a -,0x0d,0x05,0x01,0x04,0x0e,0x0d,0x0a,0x06,0x03,0x00,0x0c,0x94,0xa0,0x2a,0x11,0x1d,0xc2,0x9a,0x8f,0x24,0x0c,0x2e,0x8f,0x93,0xdc,0xcd,0xc6,0xad,0x90,0x97,0xad,0x2e -,0x5c,0x9d,0x92,0x9d,0xae,0xca,0xbd,0x84,0x82,0x96,0xda,0xa9,0x8d,0x8d,0x89,0x97,0x3c,0x9f,0x8c,0x87,0x90,0xba,0x57,0xc5,0x9e,0x9f,0xbe,0x2c,0x3d,0x9d,0xa5,0x25 -,0x18,0x14,0x06,0x1e,0x8a,0xa0,0x1c,0x21,0xc1,0xae,0x4e,0xbc,0x1a,0x0b,0x24,0xa4,0x29,0x0f,0x0e,0x0e,0x19,0x3f,0xe2,0x19,0x06,0x08,0x0e,0x0d,0x17,0x0e,0x08,0x0f -,0x8f,0x92,0x32,0x1b,0x30,0x88,0x81,0x3b,0x00,0x8c,0x85,0x8b,0x84,0x13,0x26,0x2b,0xc8,0x55,0x3b,0x12,0x00,0x16,0x02,0x05,0x06,0x00,0x07,0x00,0x15,0xab,0x0d,0x0b -,0x10,0x1d,0x1e,0x17,0x47,0x1c,0x35,0x91,0x86,0x9b,0xbb,0x8b,0x80,0x82,0x8b,0x86,0x81,0x81,0x81,0x83,0x85,0x88,0x88,0x8a,0x83,0x80,0x81,0x83,0x85,0x82,0x84,0x89 -,0x8d,0x9b,0x9f,0x8f,0x8d,0x99,0x38,0x5c,0x2d,0x17,0x2e,0x0f,0x07,0x07,0x04,0x05,0x00,0x03,0x00,0x02,0x00,0x0c,0x1a,0x02,0x01,0x01,0x03,0x00,0x01,0x02,0x00,0x01 -,0x06,0x05,0x00,0x01,0x07,0x05,0x07,0x07,0x06,0x05,0x0a,0x1b,0x08,0x0d,0x13,0x1b,0x27,0xa0,0x80,0x87,0x90,0x85,0x81,0x82,0x84,0x82,0x85,0x86,0x80,0x81,0x80,0x82 -,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x80,0x83,0x81,0x82,0x80,0x8a,0x8d,0x80,0x80,0x82,0x85,0x81,0x80,0x84,0x84,0x88,0xa7,0x90,0x82,0x8e,0xae,0x97,0x94,0x49,0xca -,0x21,0x08,0x07,0x07,0x04,0x00,0x02,0x02,0x00,0x00,0x00,0x1c,0x16,0x01,0x01,0x01,0x03,0x02,0x00,0x00,0x00,0x05,0x06,0x01,0x01,0x06,0x06,0x02,0x05,0x02,0x01,0x03 -,0x04,0x03,0x02,0x06,0x03,0x04,0x01,0x08,0x91,0xb1,0x08,0x0d,0x25,0xcc,0x13,0x0c,0x09,0x2a,0x96,0xa3,0x5e,0xaa,0x86,0x8f,0xaf,0x9b,0xac,0xa0,0x96,0x93,0xa0,0x92 -,0x8a,0x9c,0x8d,0x94,0x8e,0x80,0x81,0x8a,0x89,0x80,0x82,0x8e,0x8f,0x8c,0x86,0x80,0x86,0x89,0x83,0x80,0x83,0x8a,0x89,0x8a,0x85,0x81,0x85,0x89,0x83,0x84,0x88,0x83 -,0x8c,0x8e,0x80,0x82,0xcf,0x97,0x81,0x99,0x08,0x15,0x2d,0x15,0x49,0x1b,0x2a,0xb5,0x99,0x76,0x39,0x3b,0x1e,0x3d,0xb4,0xaf,0xb2,0x93,0xa2,0xdb,0x8e,0x95,0xaf,0x87 -,0x80,0x9c,0x96,0x86,0x8b,0xa0,0xa0,0x9a,0xa7,0x85,0x9b,0xdd,0x87,0x85,0xb9,0x1b,0x22,0x0c,0x13,0x11,0x05,0x0b,0x0c,0x02,0x01,0x04,0x03,0x00,0x01,0x1a,0x08,0x00 -,0x03,0x00,0x01,0x00,0x00,0x00,0x04,0x02,0x00,0x06,0x07,0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x02,0x01,0x02,0x00,0x01,0x00,0x01,0x00,0x0e,0xa6,0x00,0x06,0x0f,0x0d -,0x0c,0x04,0x04,0x10,0x9f,0x0c,0x4a,0x91,0x9e,0xa3,0x1d,0xcd,0x93,0x90,0xf3,0x8d,0x82,0x86,0x8f,0xa3,0x84,0x87,0x8c,0x87,0x80,0x83,0x89,0x80,0x80,0x80,0x80,0x81 -,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x84,0x81,0x80,0x80,0x85,0x94,0x88,0x97,0xaf,0x1a,0x86,0x8b,0x08,0xad,0xbd,0xa0,0x0d,0x01,0x08,0xad,0x1a -,0x04,0x30,0x26,0x28,0x07,0x04,0x09,0x0b,0x01,0x05,0x14,0x0d,0x08,0x01,0x06,0x05,0x03,0x00,0x08,0x96,0x08,0x06,0x1b,0x12,0x0b,0x00,0x01,0x16,0x26,0x00,0x0f,0x27 -,0x2b,0x0e,0x04,0x09,0x11,0x05,0x05,0x12,0x20,0x16,0x07,0x06,0x13,0x0b,0x09,0x00,0x99,0x9a,0x08,0xbc,0xd9,0xb3,0x10,0x05,0x1b,0x9a,0x14,0x23,0x99,0x8d,0xc3,0x2f -,0x36,0xad,0x38,0x0e,0xb0,0x8e,0x9b,0x2d,0xaa,0x9b,0xa2,0x2f,0x29,0xb8,0x80,0xe8,0xa1,0x82,0x88,0xa6,0x16,0xd8,0x88,0x9a,0x31,0x89,0x86,0x8d,0x1e,0xc9,0xaa,0x43 -,0x1f,0xb4,0x8f,0x91,0x5d,0x9a,0x87,0x89,0x8f,0x90,0x8e,0x80,0x83,0x88,0x80,0x81,0x80,0x8a,0x8e,0x82,0x83,0x99,0x8b,0x8b,0x85,0x22,0x0b,0x10,0x07,0x03,0x01,0x03 -,0x0b,0x05,0x04,0x04,0x03,0x00,0x04,0x00,0x19,0x9d,0x00,0x1e,0x1a,0x2c,0x18,0x01,0x17,0xb0,0x11,0x2d,0xa3,0x8b,0x8f,0x1e,0x9c,0x9a,0xb1,0x44,0xa0,0x89,0x89,0x9e -,0x8d,0x8c,0x9c,0x91,0xad,0x93,0x80,0x99,0x8b,0x81,0x85,0x87,0xbc,0x9a,0x80,0x90,0x90,0x8c,0x86,0x86,0x3d,0x97,0x98,0x25,0x26,0x21,0xae,0x9a,0x2a,0xb3,0x2e,0x13 -,0x11,0x0e,0x06,0x95,0xb1,0x16,0x93,0x7d,0xca,0x16,0x0c,0x33,0x1d,0x19,0xaf,0x2a,0x97,0x41,0x1b,0x36,0x09,0x0e,0x14,0x0d,0x38,0x2b,0x33,0x1d,0x07,0x0d,0x0e,0x01 -,0x2b,0x94,0x0c,0x33,0x14,0x16,0x11,0x00,0x1f,0x22,0x0c,0x16,0x0e,0x9f,0xa7,0x2a,0x8f,0xae,0xa1,0x9d,0x8d,0x80,0x84,0x83,0x84,0x86,0x86,0x85,0x8f,0x8a,0x80,0x8f -,0x8a,0x8a,0x92,0xb1,0x06,0x12,0x21,0x08,0x09,0x06,0x1f,0x1e,0x01,0x0c,0x0b,0x00,0x04,0x03,0x0f,0x0e,0x09,0x20,0x0d,0x0b,0x08,0x05,0x06,0x9c,0xab,0x20,0x9e,0xf9 -,0xc7,0x14,0x1e,0xa5,0x6d,0x3b,0xb0,0x91,0x87,0x97,0xb6,0x96,0xbe,0x35,0xad,0x9f,0x92,0xb1,0x9e,0x98,0xcd,0x45,0x3b,0x27,0x86,0x8c,0xb4,0x8b,0x9d,0x99,0x4f,0x29 -,0x9c,0xb6,0xab,0xad,0xab,0x88,0xb4,0x37,0xa3,0x1c,0x23,0x18,0x16,0x2d,0x1d,0x68,0x1a,0x0f,0x11,0x12,0x04,0x2f,0x8f,0x23,0x71,0x36,0xa0,0x33,0x08,0x19,0x1c,0x19 -,0x15,0x2a,0x8d,0xb0,0x12,0x1e,0x14,0x0e,0x0d,0x11,0x1f,0x0d,0x1a,0x13,0x0e,0x0a,0x0e,0x09,0x1c,0x90,0x1a,0xf4,0x4e,0xc7,0xbc,0x24,0x9e,0x99,0x8f,0x88,0x85,0x80 -,0x83,0x84,0x81,0x82,0x84,0x84,0x82,0x82,0x8a,0x86,0x8b,0x9a,0x2a,0x2f,0x16,0x1d,0x90,0x0d,0x19,0x15,0x0c,0x0b,0x01,0x09,0x05,0x03,0x05,0x0c,0x4f,0x12,0x0e,0x19 -,0x0b,0x0c,0x06,0x0e,0x11,0x10,0x1f,0x1c,0x1d,0x0d,0x17,0x0e,0x35,0x87,0x3b,0x9e,0x99,0x9a,0xa4,0x22,0x9e,0xaf,0xab,0x98,0x8f,0x87,0x9c,0x9a,0x98,0xa5,0x97,0xa2 -,0x98,0xa7,0x9e,0x9b,0xa6,0x59,0x2d,0xb5,0x24,0x8e,0x84,0x9a,0x92,0xa8,0x97,0xbc,0x50,0xca,0x2c,0xb9,0xb9,0x93,0x9a,0xb0,0xbd,0x21,0x2a,0x37,0x2d,0x1e,0x0d,0x18 -,0x2d,0x32,0x19,0x1b,0x0e,0x1c,0x99,0x34,0xd7,0x3a,0xcf,0x27,0x1f,0xd8,0x17,0x15,0x1b,0x2b,0xac,0x21,0x12,0x12,0x0e,0x18,0x0f,0x1a,0x10,0x0a,0x09,0x14,0x14,0x09 -,0x06,0x33,0x92,0xa1,0x8b,0x89,0x84,0x8c,0x8f,0x82,0x82,0x86,0x85,0x82,0x80,0x80,0x81,0x83,0x83,0x88,0x91,0x98,0xbf,0x2d,0x10,0x0f,0x27,0x0c,0x02,0x18,0x10,0x0a -,0x0c,0x0c,0x0d,0x02,0x05,0x0e,0x19,0x13,0x05,0x0c,0x15,0x17,0x17,0x0f,0x19,0x11,0x16,0x26,0x1f,0x14,0x10,0x0f,0x1d,0x28,0x31,0x9a,0xbe,0x9c,0x92,0x8e,0x8c,0xab -,0xa1,0xae,0x9a,0x93,0xa1,0xa3,0xb4,0x8b,0x87,0x8f,0x8d,0x9b,0x9b,0x9f,0x5e,0xfa,0x2e,0x2d,0x30,0x34,0x8b,0x8c,0xa8,0xaf,0xa4,0x8b,0xac,0x38,0xcc,0xbf,0x9b,0xba -,0xac,0xad,0x24,0x1a,0x4b,0xa7,0x2f,0x16,0x15,0x2d,0x3c,0x26,0x19,0x16,0x0b,0x15,0x65,0x37,0xf6,0x18,0x23,0xb6,0xdc,0xbc,0x1e,0x2a,0x4b,0x1f,0x24,0x0e,0x0c,0x0b -,0x0f,0x2c,0x23,0x15,0x0d,0x0d,0x10,0x0e,0x0b,0x08,0x06,0x20,0xa2,0x94,0x96,0x97,0x8d,0x8b,0x85,0x82,0x82,0x83,0x83,0x81,0x80,0x81,0x82,0x86,0x84,0x87,0x8d,0x94 -,0xb1,0x43,0x22,0x1f,0x25,0x0f,0x05,0x04,0x0d,0x0f,0x09,0x03,0x02,0x07,0x07,0x0f,0x1c,0x1b,0x14,0x0e,0x1e,0x20,0x0e,0x0a,0x0f,0x2b,0x30,0x2e,0x69,0x29,0x1b,0x25 -,0xda,0xd1,0x1b,0x13,0x59,0x96,0x90,0x93,0x9d,0xa6,0x9b,0x98,0x8f,0x96,0xa8,0xa3,0x97,0x8b,0x8a,0x92,0x9f,0x9c,0x94,0x95,0x9f,0xcb,0x32,0xbb,0x9b,0x93,0x97,0xca -,0x46,0xa3,0x99,0x9c,0xd3,0x24,0x2d,0xca,0xa8,0xa8,0xc9,0xcd,0xa5,0xab,0xbf,0x2a,0x17,0x1b,0x3d,0x9e,0x9a,0xbe,0x1f,0x1f,0x46,0xaf,0x33,0x13,0x0e,0x0f,0x29,0xc7 -,0x65,0x27,0x17,0x1e,0x2e,0x1d,0x0d,0x08,0x0d,0x1d,0x2e,0x1e,0x18,0x0f,0x12,0x1e,0x1f,0x15,0x0a,0x0a,0x14,0x2f,0xbe,0xc0,0xbb,0x9c,0x8e,0x87,0x87,0x8c,0x8d,0x8b -,0x85,0x82,0x82,0x83,0x84,0x85,0x81,0x86,0x95,0xa2,0xd9,0xd3,0xa6,0xb4,0x2f,0x13,0x0e,0x13,0x0f,0x0a,0x04,0x02,0x02,0x09,0x18,0x15,0x0c,0x0c,0x19,0x1c,0x1b,0x0f -,0x0c,0x10,0x19,0x3e,0xcf,0x27,0x1d,0x28,0x4f,0xa7,0x32,0x18,0x1e,0x34,0xb1,0x9f,0xa1,0x9f,0xad,0xa8,0x94,0x94,0xae,0x3b,0xbe,0x9c,0x8e,0x93,0x9b,0x9f,0x9e,0x91 -,0x8d,0x9a,0x3c,0x2b,0xbb,0x96,0x93,0xa6,0xda,0xb3,0x9f,0x97,0x9a,0x33,0x25,0x28,0x3d,0xa5,0xb7,0x41,0x3d,0xb6,0x9b,0x9e,0x26,0x14,0x1b,0x27,0xb7,0xaa,0x32,0x27 -,0x24,0xc4,0xa1,0x2e,0x10,0x0f,0x1b,0x24,0x6a,0x50,0x34,0x3f,0x38,0xab,0xb9,0x1e,0x0f,0x13,0x2b,0xb4,0xa7,0x26,0x2a,0x4b,0xb7,0x9e,0x51,0x15,0x1a,0x1f,0xc4,0x9d -,0x37,0x29,0x3f,0xaf,0x9e,0xaa,0x1f,0x1c,0x27,0x4d,0xac,0xd5,0x31,0xd7,0xac,0x9c,0x94,0xb3,0x20,0x29,0xcd,0xa0,0x99,0xc1,0xad,0x9c,0x99,0x91,0x98,0x3d,0x24,0x62 -,0xac,0x95,0xa7,0x50,0xaa,0xa1,0x99,0x9e,0x2d,0x1d,0x2a,0x3f,0xb8,0xa8,0x32,0x20,0x2e,0x5d,0xba,0x1f,0x0a,0x0e,0x1b,0x20,0x2b,0x1a,0x10,0x1b,0x24,0x42,0x3a,0x15 -,0x0f,0x21,0x32,0x4f,0x37,0x15,0x2d,0xb4,0xa8,0x9a,0xb3,0x25,0x66,0xb9,0xa8,0x9a,0xb7,0xde,0x9f,0x94,0x95,0x99,0xcc,0xd2,0xa5,0x9f,0x95,0x99,0xac,0x9a,0x8f,0x91 -,0x91,0xaf,0x32,0xbe,0xba,0x9f,0x9b,0xb5,0xcb,0xa1,0x9d,0x9d,0xc5,0x15,0x1f,0x2b,0x2b,0x5f,0x25,0x18,0x20,0x2c,0x4d,0x3b,0x13,0x0f,0x1d,0x2e,0x37,0x2a,0x17,0x19 -,0x35,0x2b,0x37,0x2d,0x12,0x18,0x33,0x30,0x2d,0x1d,0x12,0x26,0x5c,0x5f,0x2d,0x12,0x11,0x1d,0x2f,0x35,0x2c,0x1c,0x2e,0xa9,0xa7,0xae,0x6a,0x25,0x3c,0xa3,0xa6,0xa7 -,0xb5,0xae,0x95,0x8e,0x8c,0x8f,0x9e,0x99,0x91,0x8f,0x8d,0x8f,0x99,0x94,0x8d,0x8d,0x93,0xac,0xdd,0xab,0x9c,0xac,0xb2,0xcd,0x48,0xc2,0xbe,0x27,0x18,0x0d,0x0e,0x28 -,0x1f,0x1b,0x18,0x0f,0x1b,0x24,0x1c,0x1a,0x11,0x0e,0x19,0x1d,0x17,0x1c,0x14,0x1a,0x37,0x4d,0x51,0x4c,0x27,0x2c,0xbf,0xc0,0xbc,0x3e,0x43,0xad,0x99,0xa2,0xa7,0xa8 -,0xc2,0x9b,0x99,0x9d,0x9c,0xa2,0xa7,0x95,0x96,0x9e,0xa4,0xfb,0xac,0x9c,0xa2,0xa9,0xac,0xb8,0xa4,0x9e,0xad,0xbd,0x35,0x2c,0xbc,0xa9,0xc9,0x37,0x36,0x6f,0xaf,0xb8 -,0x38,0x26,0x25,0x29,0x5b,0xd7,0x26,0x2d,0x1f,0x27,0xbd,0x2e,0x28,0x29,0x30,0xcb,0xbe,0x2f,0x27,0x2c,0x2c,0xc5,0xbe,0x47,0x26,0x23,0x30,0x58,0x39,0x24,0x33,0x3d -,0x3e,0xf0,0x4f,0x2a,0x36,0x3d,0xce,0xab,0x38,0x33,0xe0,0xad,0x9a,0x9b,0xaa,0xb1,0xac,0xa5,0x99,0xa8,0xae,0xa7,0xab,0xa0,0x9b,0xa4,0xca,0xac,0xb6,0xa3,0xac,0xfd -,0xdb,0x42,0x6d,0x5a,0x4e,0x2a,0x26,0x1f,0x28,0x5f,0x2b,0x1c,0x1b,0x1e,0x27,0x29,0x1a,0x24,0x2f,0x25,0x2b,0x27,0x1d,0x1a,0x1d,0x27,0xea,0x2d,0x21,0x3a,0x49,0xbb -,0xb6,0xde,0xc6,0xd1,0xbc,0xac,0xa5,0xbb,0xc2,0xb4,0xa5,0x94,0xa2,0xaa,0xa5,0x9d,0x9e,0x9b,0xa0,0xb3,0xab,0xcb,0xad,0xaa,0xdd,0xd2,0xae,0xae,0xa6,0xba,0x34,0xb1 -,0x65,0x5a,0xb1,0x4e,0x2f,0x38,0x39,0x31,0x34,0x21,0x22,0x37,0xe4,0x35,0x37,0x2a,0x22,0x2d,0x2b,0x36,0x27,0x1e,0x38,0x4c,0xfc,0xb5,0x46,0x32,0xd4,0xc4,0x6a,0x3d -,0x2a,0x37,0x47,0x38,0x4e,0x65,0x4b,0xeb,0xc0,0xad,0xd5,0x3f,0xb4,0xaa,0xb3,0xb5,0xbe,0x45,0xe8,0xc2,0xc6,0xb4,0xb3,0xb8,0xa4,0x9e,0xa6,0xad,0xae,0xbf,0xaf,0xaf -,0xc9,0xc5,0x44,0xe4,0xb9,0xbb,0xa8,0xa6,0xc3,0xb8,0xba,0x5e,0xea,0x2c,0x2b,0x2f,0x28,0x4b,0x46,0x37,0x2c,0x34,0x32,0x4e,0x3a,0x27,0x2a,0x21,0x27,0x24,0x29,0x1e -,0x25,0x37,0x30,0x32,0x2e,0x2a,0x37,0x34,0xf9,0xbc,0x3d,0x40,0x6c,0xc0,0xc6,0x4a,0x44,0xbe,0xcd,0xb2,0x9e,0xae,0xbc,0xba,0xb4,0xa8,0xba,0xb4,0x60,0x4d,0xb9,0xab -,0xb1,0xce,0xb3,0xaf,0xa0,0x9d,0xb9,0xe8,0x4f,0x3d,0xbe,0xb7,0xf3,0x64,0x5d,0x5e,0x5a,0x36,0x3a,0x43,0x4f,0x40,0xb1,0x46,0x2d,0x51,0x32,0x50,0x4f,0x33,0x34,0x3a -,0x38,0xbc,0xc8,0xdf,0xd3,0x46,0xcd,0xbc,0x44,0x35,0x3d,0x35,0xd8,0xb5,0xd8,0xbc,0xc3,0xb6,0xb5,0xc5,0x6b,0x51,0x43,0x3a,0xb0,0x47,0x30,0x4b,0x32,0x46,0x69,0x55 -,0xc3,0xf1,0x35,0xc6,0xbd,0x6e,0xac,0xb6,0xce,0xc2,0x47,0x57,0xbf,0x31,0x3c,0xb8,0xd1,0xb9,0xc6,0xf4,0xcc,0x3b,0x55,0xbc,0x2d,0x27,0xd8,0xdf,0x67,0xbd,0x40,0x64 -,0xb7,0xba,0xb2,0xcd,0x2d,0x4d,0xce,0x3d,0xcf,0x4e,0x3f,0xbd,0x5d,0x3a,0xba,0x2f,0x3d,0xae,0x6c,0xb1,0xaf,0x2f,0x32,0xce,0x55,0xaa,0xde,0x33,0xbd,0x43,0xc8,0xab -,0xc0,0x5a,0xc6,0xed,0xc2,0xc8,0x2c,0x41,0xd6,0x3d,0xc7,0xbe,0x31,0x59,0xc6,0x5e,0xae,0x31,0x23,0xcd,0x3f,0x61,0xb0,0x37,0x29,0x46,0x4e,0xb5,0xca,0x34,0xb6,0xb7 -,0xf6,0xa6,0xd4,0x2a,0xf0,0x44,0x4c,0x59,0x25,0x2f,0x3c,0x40,0xa9,0x9f,0x6d,0x5f,0x60,0x4e,0xa7,0xf0,0x38,0xc3,0xea,0xce,0xab,0xee,0x52,0xb3,0xb8,0xb0,0xb1,0x2c -,0x3e,0x48,0x26,0xbb,0x36,0x25,0x49,0x3b,0xde,0xa5,0x49,0x47,0xb8,0x38,0xaf,0xa7,0x3e,0x42,0x3b,0x3c,0xac,0x4e,0x2e,0xbf,0x3e,0x52,0xa1,0xc8,0x35,0xe2,0x36,0xb9 -,0xb7,0x1f,0x49,0x69,0x28,0xb9,0xa3,0x33,0xd3,0xcd,0xd6,0xa0,0x3e,0x35,0xd9,0x2d,0x64,0xa2,0x2a,0x36,0x59,0x3a,0xa5,0xb8,0x3e,0xab,0xde,0x31,0xa7,0x42,0x1d,0x3c -,0x2e,0x50,0xa7,0x35,0x3a,0x5c,0x2d,0xa8,0x9f,0x46,0xba,0x69,0x39,0xa5,0xdc,0x28,0xd7,0x30,0x4f,0x9a,0xfe,0x2d,0x58,0x30,0xae,0xa7,0x2a,0x55,0x38,0x1e,0xa3,0xac -,0x25,0xcb,0x3d,0xfd,0x9b,0xd0,0x5f,0xaa,0x2b,0xb7,0x9b,0x2c,0x2f,0xf2,0x36,0xaa,0xae,0x1f,0x38,0x2a,0x2c,0x9b,0xb6,0x30,0xbc,0x2c,0xc4,0x99,0x5a,0x3a,0xef,0x27 -,0xaf,0x9e,0x21,0x3a,0x4e,0x3c,0x9b,0xac,0x2d,0xe3,0x20,0x2c,0x9d,0x3f,0x28,0xe2,0x2a,0xbe,0xa5,0x33,0xbe,0xe0,0x24,0x9f,0xaf,0x22,0x4b,0x30,0x3e,0x9f,0xd2,0x2d -,0xe6,0x28,0xae,0x97,0x42,0x39,0xdb,0x2e,0xa1,0x9f,0x2b,0x3e,0x24,0x2b,0x9e,0x43,0x1f,0xce,0x3b,0xe8,0x9c,0xc6,0x53,0x41,0x1d,0xa2,0x9c,0x2b,0x48,0x3a,0x28,0x9f -,0xab,0x3b,0xb2,0x33,0xe3,0x9b,0x37,0x21,0x32,0x1d,0xbd,0xa2,0x29,0x2e,0x3e,0x3b,0x9f,0xa8,0x32,0xbf,0x4b,0x4f,0x99,0xc6,0x28,0x35,0x1d,0xbc,0x9d,0x2a,0x2b,0x36 -,0x20,0xaa,0x9b,0x4c,0x49,0x2a,0x36,0x99,0xb9,0x20,0x3a,0x29,0xbd,0x97,0x58,0x77,0xe6,0x27,0xad,0xa6,0x35,0x45,0x2c,0x28,0xa2,0xb0,0x27,0x2f,0x1f,0x40,0x9a,0xc4 -,0xf2,0xce,0x25,0xb4,0x9c,0x58,0xf2,0x36,0x40,0x93,0xa0,0x27,0x39,0x26,0x34,0x99,0xb9,0x35,0x3e,0x1d,0x5c,0xa5,0x28,0x2a,0x27,0x1d,0xb1,0xb3,0x39,0xc1,0x48,0xba -,0x91,0x9e,0xcd,0xc3,0x27,0xeb,0x99,0xd6,0x2f,0x2e,0x21,0xb1,0xa9,0x2a,0x34,0x21,0x1b,0xb9,0x54,0x1e,0x2f,0x1f,0x3b,0x97,0xb0,0xe0,0xa7,0xaf,0x99,0x92,0xc2,0x51 -,0x3e,0x33,0x9f,0xa8,0x2c,0x2a,0x14,0x17,0xe6,0x28,0x1c,0x2f,0x26,0xd0,0x9d,0x4f,0x71,0xbc,0x3d,0xa2,0x9a,0xba,0xae,0xc1,0xc5,0x91,0xa0,0xd6,0xb6,0x23,0x33,0xbc -,0x1f,0x1b,0x1e,0x13,0x47,0xac,0x25,0x2c,0x2a,0x2e,0x9c,0x9d,0xaf,0xa2,0xb2,0xa3,0x91,0xa4,0xd4,0xcb,0x30,0xa5,0xa1,0x24,0x20,0x1e,0x16,0xbc,0xba,0x1d,0x36,0x23 -,0x1c,0xbf,0x37,0x1d,0x74,0x3a,0x9e,0x8d,0xa1,0x9b,0x9c,0xbb,0x99,0x9e,0x2e,0x55,0x26,0x26,0xa2,0x3a,0x15,0x2a,0x15,0x1e,0xba,0x29,0x26,0x38,0x1d,0xe3,0x9e,0xcc -,0x9d,0xaa,0xc3,0x95,0x9a,0xc9,0x9c,0xb1,0xb6,0x96,0xfd,0x34,0x4b,0x10,0x19,0xbe,0x1b,0x20,0x1e,0x11,0x24,0xc7,0x33,0xa8,0xaf,0xb5,0x90,0xa6,0xa6,0x9d,0x40,0x66 -,0x99,0xb6,0xb8,0xb5,0x30,0x31,0xb5,0x28,0x3a,0x58,0x12,0x1e,0x2f,0x1b,0x1c,0x2b,0x26,0x9d,0x95,0xa1,0xcb,0x48,0x31,0xac,0xac,0x7c,0xaa,0x34,0x9c,0x86,0x99,0x1f -,0x14,0x0d,0x31,0x9c,0x1e,0x0d,0x0f,0x29,0x8f,0x90,0x17,0x15,0x95,0x8e,0x95,0x38,0x04,0x07,0x1c,0x93,0x80,0x88,0x98,0xb0,0x2b,0x2c,0x9c,0x25,0x10,0x28,0x15,0x1c -,0x98,0x4f,0x06,0x1f,0xb9,0x92,0xa0,0x17,0x0d,0x4d,0x88,0x82,0xa3,0x09,0x39,0x8f,0x9f,0x9f,0x44,0x12,0x13,0x0f,0xb6,0x87,0x93,0x26,0x37,0x0f,0x15,0x3e,0x06,0x08 -,0xc2,0x89,0x80,0x90,0x0b,0x28,0x8b,0x8c,0x91,0x23,0x19,0x36,0x18,0x17,0xad,0x29,0x2f,0x8d,0x25,0x15,0xc2,0x15,0x05,0x1b,0xac,0x88,0x8a,0x1a,0x1e,0x95,0x87,0x8c -,0x1a,0x0b,0xe1,0x8f,0x89,0x96,0x15,0x00,0x18,0x10,0x3a,0xcf,0x0b,0x28,0xab,0xb6,0x8e,0x9a,0xac,0x8c,0x97,0xa5,0x43,0xd4,0x18,0x0d,0x45,0x8f,0x8d,0x9b,0x21,0x35 -,0x47,0x59,0x0e,0x02,0x05,0x14,0x8d,0x86,0x98,0x1c,0x1e,0xa7,0xad,0x70,0x8a,0xa5,0x28,0x9f,0xcf,0xa0,0x9f,0x10,0xb0,0xa5,0xb4,0x15,0x03,0x00,0x15,0x84,0x8d,0xa1 -,0x1e,0x1f,0x98,0xa7,0xd9,0xab,0x15,0x91,0x92,0x32,0x97,0x94,0x7c,0x4f,0xdb,0x32,0xd5,0x15,0x06,0x06,0x2a,0xe6,0x9c,0x0c,0x0d,0x8b,0x87,0x8f,0x3f,0x10,0x28,0xc2 -,0x98,0x85,0x9a,0x9b,0x8e,0xac,0x18,0x1a,0x1b,0x55,0xbf,0x9e,0x22,0x0a,0x02,0x09,0x9d,0x39,0x97,0x8b,0x3c,0xaa,0x99,0x8f,0x8d,0x1a,0x2f,0xac,0x9d,0xab,0x0e,0x13 -,0xec,0x9c,0x8b,0x39,0x10,0x0c,0x0e,0xbe,0x0c,0x30,0x24,0x28,0x84,0x8e,0x99,0x99,0x60,0x3e,0x0d,0xac,0x8f,0x3b,0xa3,0x2f,0x33,0x94,0x9a,0x29,0x18,0x41,0x90,0x10 -,0x07,0x05,0x40,0x8c,0x2f,0xa5,0x9e,0xab,0x9e,0xaa,0xc0,0x31,0x1a,0x9e,0x4a,0xa9,0x88,0xac,0x1e,0x23,0x0d,0x26,0x6b,0x29,0x2e,0x27,0x97,0x2a,0x9f,0x1d,0x16,0x8b -,0x9e,0xa7,0x33,0x0f,0x3c,0x1f,0xa2,0x8b,0xad,0x8b,0x4b,0x0e,0x2d,0xe9,0x5b,0xad,0x5e,0x41,0x1a,0x53,0x18,0x15,0xa2,0x14,0x96,0x90,0x27,0xad,0x9f,0x94,0x98,0x1e -,0x2e,0x12,0x34,0x8d,0x28,0x23,0xb4,0xf2,0xb8,0x3d,0xa8,0xa8,0x31,0x5e,0x04,0xc5,0xdb,0x0c,0x9e,0x47,0x9e,0x8b,0xa7,0x3b,0x0f,0xc5,0x95,0x3b,0x99,0xbb,0x30,0xa0 -,0xa7,0xe9,0x3c,0x2b,0x40,0x16,0x39,0x1c,0x18,0xa8,0x0c,0x2f,0x8e,0x9b,0xad,0x57,0x25,0x33,0xbf,0x9a,0x2e,0xa6,0x82,0x99,0x39,0xd7,0x1e,0x22,0x3c,0x32,0x47,0x16 -,0x2f,0x0d,0xd5,0xbe,0x2b,0x96,0x2d,0x1f,0xb8,0xcb,0xc8,0x55,0xc7,0xaa,0x2f,0x89,0x8d,0x3b,0xa9,0x99,0xb3,0xb9,0x15,0x0f,0x09,0x27,0x49,0x1b,0xa9,0x06,0x2a,0x9f -,0xbc,0x8d,0x92,0x95,0x9f,0x27,0xa4,0x2a,0x35,0x94,0xdc,0xbc,0xb5,0x30,0x16,0x1d,0xbb,0xac,0xde,0x49,0x04,0x5e,0xba,0x1b,0x93,0x3d,0x54,0x9d,0xab,0xaa,0x38,0xb1 -,0x9e,0x27,0x9a,0x99,0x3c,0x3b,0x3a,0x39,0xa7,0xbc,0x18,0x04,0x23,0xf7,0x32,0x92,0x0c,0x20,0x93,0xe9,0x9d,0x99,0x9c,0x9b,0xaa,0x9a,0x39,0x1e,0xc5,0x34,0x2c,0x9f -,0xce,0x1a,0x1e,0x1b,0x28,0x29,0xa2,0x1a,0xe3,0x96,0x1d,0x8e,0xa1,0x11,0xae,0xa6,0xa1,0xb5,0x2e,0x39,0x11,0xdb,0x8d,0xae,0xb8,0xa3,0x2f,0xfa,0x47,0x28,0x11,0x1b -,0xbb,0x11,0x9a,0xbe,0x15,0x90,0x36,0xad,0x8c,0xbf,0x31,0x14,0xc4,0x98,0x2f,0x9e,0x2e,0x1b,0x98,0xa3,0xc4,0xc5,0x39,0x1c,0x0d,0xc6,0x2b,0x21,0x8d,0x1d,0x67,0x90 -,0x2a,0x29,0x3f,0x50,0x9d,0xa7,0xaf,0x14,0x15,0x92,0xac,0xaf,0x9a,0xb8,0xb7,0x9f,0xfb,0x20,0x10,0x52,0x17,0x39,0x9b,0x0c,0x35,0x2f,0x14,0x99,0x8f,0xa5,0xae,0x2f -,0x9e,0xf7,0xa5,0x97,0x15,0x3e,0x9e,0x40,0xd0,0x33,0x2b,0x32,0x3b,0xa0,0x0a,0x3f,0xca,0x11,0x8d,0xad,0x16,0xcf,0x42,0xae,0xa7,0xa8,0x97,0x19,0xa5,0x9f,0x2c,0x97 -,0x9a,0xb3,0xb1,0xbb,0x26,0x0a,0x0e,0x12,0x0d,0x8c,0x4f,0x13,0xa1,0x24,0xba,0x8e,0xaa,0xcb,0xce,0xa5,0xad,0x25,0x95,0xa1,0x2a,0x9b,0x9c,0x38,0xce,0x1f,0x0d,0x0c -,0x68,0x24,0x0c,0x94,0x25,0xb1,0x88,0x26,0x4c,0x9f,0xcc,0xa6,0xdf,0xa8,0xd0,0x19,0x99,0xc7,0x2e,0x91,0xa6,0x25,0x38,0xc1,0x2b,0x10,0x6d,0x0c,0x1d,0x92,0x0f,0xfe -,0x9b,0x26,0xa0,0x9b,0xad,0xaa,0xad,0x8f,0xd6,0x59,0xb1,0x14,0x17,0xa4,0x9c,0x32,0x64,0x36,0x11,0x19,0xb6,0x11,0xac,0x8e,0x17,0xab,0x9f,0x22,0xc4,0x9d,0xd0,0xb8 -,0xc8,0xbf,0x26,0x29,0x97,0xa9,0x5f,0x9c,0xfc,0x30,0xa2,0xd3,0x16,0x12,0x39,0x10,0xaa,0x9d,0x13,0x9a,0x9b,0x1c,0xa8,0xb4,0x2d,0xb1,0xc5,0x9c,0x3b,0x5e,0xbe,0x2b -,0x4e,0x9c,0xb2,0x22,0xcb,0x40,0x15,0x30,0xdd,0x0f,0x96,0xaa,0x20,0x95,0x3e,0x1c,0xae,0xac,0x44,0xbb,0xbb,0x58,0x27,0x45,0xa9,0xc1,0xcf,0x92,0x9c,0xbc,0xa5,0x34 -,0x1d,0x32,0x19,0x0f,0xaf,0x23,0x19,0x9c,0xd9,0x2b,0x98,0x68,0x3b,0x9f,0xb8,0xaa,0x2f,0x37,0xab,0xcc,0xb0,0x99,0xf5,0xad,0xbb,0x25,0x1b,0x1d,0x16,0x15,0x95,0x2c -,0x30,0x93,0x36,0x2f,0xbf,0x45,0xad,0xdd,0x3b,0xbf,0xb7,0xaf,0xac,0xa5,0x9e,0x99,0xa5,0xc4,0x35,0x18,0x16,0x44,0x0d,0x20,0xa6,0x18,0x44,0xa0,0x46,0x36,0xf8,0xdc -,0xa0,0x99,0x9f,0xa0,0xa7,0x3e,0xb6,0x5d,0xbd,0xa9,0x2b,0xcd,0x28,0x18,0x2e,0x2b,0x17,0x62,0xa1,0x29,0x32,0xab,0x4a,0x2d,0x7b,0x2f,0x9d,0x9b,0xb1,0xa8,0x4c,0xad -,0xa5,0x64,0xa9,0xa7,0xb1,0xbe,0x24,0x1c,0x1d,0x19,0x0d,0x3b,0x54,0x19,0xc8,0xa4,0xb0,0x9f,0xaf,0xb7,0x9d,0x9c,0x9b,0x30,0x30,0x6c,0xcc,0xf5,0xb2,0xa7,0xb7,0xbb -,0x2a,0x17,0x16,0x16,0x18,0xde,0x55,0x67,0xb3,0xb0,0xb3,0xa2,0x9d,0xc7,0xb9,0xb3,0xd6,0x34,0x22,0xc5,0xa1,0xb0,0x9f,0xc3,0xbd,0xb9,0x2a,0x27,0x1e,0x1d,0x18,0x20 -,0x5e,0xcf,0xad,0xc0,0x43,0xbb,0x61,0xca,0x9f,0x9b,0x98,0xb7,0x5e,0xba,0x6a,0xb3,0xca,0x3f,0x2f,0x25,0x2c,0x21,0x28,0x3f,0x39,0xbb,0xb5,0x6e,0x47,0x25,0x29,0x30 -,0xc2,0xae,0xb3,0xb4,0xbf,0xad,0xa9,0xa0,0xad,0xbb,0xad,0xc9,0x4c,0xcd,0x54,0x73,0x2e,0x21,0x1a,0x16,0x2d,0x3b,0xe6,0xde,0x3c,0x32,0x5d,0xae,0x98,0x9f,0xab,0xea -,0x2c,0xc3,0xcb,0xa4,0xa4,0xa7,0xa7,0xc5,0xca,0x49,0x2d,0x29,0x1e,0x1e,0x1d,0x23,0x37,0x30,0x54,0x5b,0xbc,0xc1,0x33,0x3f,0x6c,0xc8,0x9f,0xa4,0x9d,0x9d,0xa1,0x98 -,0xa1,0xaa,0xed,0x2a,0x3f,0x34,0x1d,0x1a,0x16,0x1f,0x26,0x24,0x1f,0x1f,0x3e,0xb6,0xb1,0xbf,0xcd,0xba,0x9e,0x96,0x92,0x94,0xa2,0x40,0x46,0x38,0x5c,0xba,0xef,0xfc -,0x3f,0x5f,0x4e,0x2c,0x1b,0x12,0x1a,0x27,0x26,0x36,0x30,0x39,0x48,0xb3,0x9e,0x9d,0x97,0x9d,0x9c,0x9d,0xb0,0xc4,0xbf,0xc0,0xa8,0xe9,0x31,0x30,0x25,0x2d,0x1d,0x1c -,0x19,0x1d,0x5e,0xb1,0xa9,0xd4,0x29,0x2e,0x38,0xbb,0xaa,0xbb,0xb7,0xb5,0xac,0xa0,0x9c,0xa5,0xba,0x70,0xcb,0xb7,0xce,0x2d,0x2c,0xfc,0xf1,0xca,0xeb,0x28,0x16,0x17 -,0x23,0x2f,0x38,0x2d,0x2b,0xc8,0xaf,0xac,0xa6,0xa4,0xa3,0xaa,0x9f,0xaf,0xd1,0xb8,0xbf,0xb2,0xbb,0xb8,0xdb,0x38,0xce,0xcc,0x2d,0x1c,0x15,0x18,0x3c,0xbf,0x40,0x24 -,0x1f,0x29,0x4c,0xac,0x7d,0x47,0xbe,0xa3,0x92,0x8e,0x93,0xa9,0xc2,0xf0,0xd1,0xb4,0x62,0x1f,0x19,0x23,0x3d,0x5e,0x54,0x2b,0x23,0x2c,0x3a,0x28,0x24,0xea,0xbb,0xaf -,0xc5,0x56,0xb2,0xab,0xaf,0xa9,0xba,0xbe,0x6e,0xc6,0x9e,0xa9,0xbe,0x4a,0x4c,0xad,0xa1,0xbb,0x2a,0x16,0x16,0x20,0x5c,0x6b,0x25,0x24,0x25,0xc4,0x9e,0xa6,0x66,0x24 -,0x28,0xbc,0xa2,0x9c,0xa8,0xd4,0xbf,0xb8,0xa2,0xa4,0x66,0x34,0x40,0xae,0xa0,0xaa,0xaa,0x45,0x1d,0x1e,0x1a,0x0e,0x0e,0x1b,0x29,0x3e,0x52,0x48,0xb8,0xa0,0xa0,0xa0 -,0xa4,0xac,0xa8,0xa2,0x9e,0xa1,0xad,0xab,0xae,0xdf,0xb3,0x37,0x19,0x1e,0x20,0xdc,0xb6,0x28,0x16,0x12,0x1c,0xae,0xa2,0xc1,0x26,0x21,0x4e,0xac,0x93,0x9a,0x9f,0xaf -,0xd2,0xa4,0x9a,0x9a,0xa8,0x2d,0x28,0x36,0x57,0x34,0xff,0xbf,0x38,0x2f,0x1b,0x14,0x13,0x2d,0x24,0x45,0xc8,0xad,0xa4,0xb8,0xa9,0xbd,0xaf,0xb0,0xab,0xbd,0xb9,0x2d -,0x2c,0xa5,0x9c,0x9c,0xab,0x32,0x15,0x29,0xcc,0xaa,0xab,0x2d,0x16,0x16,0x21,0x40,0x29,0x18,0x35,0x3c,0xaf,0x97,0xa5,0xa6,0x9e,0xef,0xbc,0xd0,0x49,0xaa,0xac,0xaf -,0xc9,0x54,0xd3,0xc2,0xbf,0xbd,0x4f,0x5d,0x6b,0x22,0x1c,0x25,0x1f,0x1e,0x17,0x20,0xb6,0xbb,0xab,0xbf,0xc8,0x9b,0x9d,0x9f,0x9f,0xaf,0xab,0x9a,0xc0,0x49,0xb8,0x2a -,0x2b,0x2b,0x21,0x66,0xbd,0x33,0x3b,0x25,0xbd,0xba,0x2a,0x1a,0x0c,0x26,0xab,0xa5,0xab,0xa9,0xae,0xa6,0xaa,0xbe,0xa6,0xa2,0x9d,0xad,0x2f,0xe9,0xd0,0x36,0xaf,0x60 -,0x31,0xbe,0x1f,0x23,0x2b,0x3c,0x77,0x1d,0x19,0x0f,0x42,0x9a,0xaa,0xaf,0xd6,0xb8,0x9b,0xb5,0xcb,0x9c,0x9e,0xa4,0x3a,0x1e,0xba,0xb9,0x4d,0xb2,0xbc,0xbc,0xb7,0x25 -,0x24,0x47,0x5f,0xd2,0x1a,0x18,0x0f,0x23,0xa5,0x32,0x49,0xa9,0xa0,0x9b,0xb1,0xb3,0x9b,0xa3,0xa9,0xaa,0x44,0xaf,0xd6,0x23,0xf6,0xee,0x3d,0x4c,0x28,0x2c,0xbd,0x56 -,0x36,0x1b,0x13,0x0b,0x30,0x9a,0xde,0xbc,0xb5,0xac,0xa6,0xd7,0xa5,0x8f,0xa3,0xa2,0xac,0x54,0x9e,0x3a,0x1e,0x3f,0x2d,0x22,0x3a,0x32,0x6c,0x3e,0x29,0x2e,0x26,0x12 -,0x16,0x99,0xb3,0x44,0xa5,0xa7,0xa8,0xae,0xc5,0x95,0x9e,0x48,0xa6,0x35,0xd3,0xb9,0x42,0xb1,0xb7,0x22,0x34,0x34,0x26,0x2b,0x1d,0x4a,0x2a,0x1b,0x0f,0xcc,0x9a,0x3a -,0xbb,0xb5,0x59,0xd1,0xb4,0x97,0x8e,0xbd,0xae,0xca,0x30,0xac,0xa7,0x9d,0xa6,0x1f,0x37,0xd7,0x2c,0x2c,0x1a,0x27,0x27,0x17,0x0a,0x24,0xa7,0x26,0xb6,0x95,0xa9,0xc5 -,0x30,0xbb,0x95,0xb1,0x94,0x90,0xbd,0xa8,0xaa,0xaa,0xa3,0x2d,0xd5,0x3e,0x13,0x24,0x11,0x19,0x1e,0x1d,0x11,0x15,0xca,0x21,0xc0,0x92,0xa5,0xbd,0xc3,0xa8,0x92,0x9f -,0x8f,0x95,0x3d,0xa8,0xb9,0xbe,0xa2,0x69,0xb4,0x3a,0x1f,0xfa,0x14,0x0e,0x0f,0x11,0x12,0x31,0xb0,0x20,0xe2,0xaa,0xae,0xa3,0xa8,0x93,0x92,0xbe,0x9a,0xab,0x73,0x9d -,0xa9,0xa5,0xbb,0x29,0x46,0x20,0x1e,0x49,0x1c,0x23,0x17,0x1a,0x14,0x25,0xb3,0x15,0xbe,0x9d,0xa9,0x9a,0xc3,0x9f,0x99,0xbf,0x8e,0x9c,0xdf,0xac,0x45,0xa1,0xb2,0x46 -,0xb8,0x24,0x23,0x2d,0x1e,0x23,0x14,0x14,0x0b,0x23,0xbb,0x1d,0xa2,0x9e,0x9d,0xa0,0xcc,0x9a,0xac,0xca,0x93,0xa1,0xaa,0xab,0xd7,0xa2,0xcb,0xed,0xd9,0x23,0x2e,0x3a -,0x21,0x1b,0x13,0x19,0x10,0x57,0xa4,0x2e,0xd8,0x2c,0xdb,0xb6,0xc3,0x91,0x9c,0xbb,0x9e,0xab,0x9f,0xae,0xd8,0xa5,0x61,0xcc,0xc9,0x35,0x3f,0x1e,0x20,0x26,0x1c,0x1f -,0x0f,0x39,0xb3,0x29,0xa8,0xab,0xaa,0xcc,0x37,0x9f,0xab,0xb6,0xa2,0xa8,0xa9,0xbb,0xba,0x9c,0xb3,0xc6,0xba,0x2b,0x27,0x19,0x1f,0x38,0x24,0x2a,0x1e,0x20,0xd6,0x3c -,0xc7,0xb5,0x5c,0xbf,0x5a,0xc1,0xad,0xb6,0xa2,0xa6,0xb6,0xa9,0xdc,0xeb,0xdf,0xd5,0xa3,0xc6,0xfc,0xd9,0x31,0x31,0x35,0x42,0x3a,0x1e,0x21,0x69,0xc9,0x54,0x49,0xe9 -,0x6c,0x54,0xe3,0xd5,0x52,0xce,0x7c,0x48,0x7c,0xcf,0xaa,0x9f,0x9f,0xa7,0xc1,0x47,0x30,0x3f,0xac,0xac,0xde,0x33,0x2c,0x2e,0xcb,0xb1,0x79,0x28,0x1e,0x2c,0x4b,0x3b -,0x2e,0xcf,0xf2,0x2c,0x30,0xb3,0xa9,0xb9,0xba,0xaf,0xb9,0xe9,0xbf,0xb0,0xaf,0xb8,0x6d,0x37,0x34,0x2a,0x6c,0xb6,0x68,0x4e,0x5b,0xc7,0xd3,0x6b,0x5f,0x3f,0x2e,0x38 -,0x4b,0x3f,0x67,0x4e,0xbd,0xb4,0x72,0xfc,0x57,0x51,0x47,0xcc,0xb9,0xe5,0xe7,0xaf,0xaf,0xc3,0xce,0xcd,0x49,0x39,0x5b,0xc1,0xbd,0x5b,0x48,0x62,0x75,0x48,0x46,0x49 -,0x39,0x35,0x38,0x2f,0x28,0x49,0xbb,0xb9,0xe0,0x53,0xd9,0xc7,0xb1,0xc3,0xad,0xb0,0x6f,0xdd,0xb0,0xac,0xbf,0x5b,0x3f,0x2c,0x29,0x66,0x50,0x3a,0x33,0x43,0xc3,0xc5 -,0x4f,0xef,0x5d,0x35,0x39,0xb0,0xa8,0xee,0xd2,0xbc,0xf6,0xc4,0xae,0xb0,0xcb,0x33,0x47,0x5c,0x48,0x5e,0x66,0xc4,0xd3,0x33,0x3c,0x61,0x4b,0x56,0xc3,0xde,0x33,0x34 -,0x4b,0xc8,0xbb,0xc7,0xcb,0x51,0x2b,0x3d,0xf3,0xc6,0xaa,0xac,0xb5,0x5c,0x3d,0x5f,0x50,0x38,0x41,0x62,0x37,0x35,0xd0,0xb3,0xae,0xaf,0xe2,0x44,0x2c,0x29,0xd9,0xb8 -,0xbb,0xc0,0xd8,0xbe,0x47,0x45,0xaf,0xaf,0xdf,0x3e,0x46,0x41,0x57,0xbe,0xc0,0x6c,0x3d,0x38,0x68,0x3f,0x30,0x4b,0x38,0x44,0xc3,0xaf,0xab,0xc4,0xcc,0xc6,0xc6,0xdc -,0x62,0x5f,0x4d,0x50,0xc3,0xad,0xc8,0x3c,0x2e,0x33,0x2d,0x29,0x2e,0x35,0x40,0xeb,0xb6,0xa8,0xae,0xb2,0xb2,0xc8,0xd1,0x45,0x5b,0xcd,0xc8,0xcc,0xf4,0x54,0x59,0xe9 -,0xd6,0x6f,0x44,0x3e,0x2f,0x51,0xd9,0xc6,0xc7,0x38,0x3e,0x45,0x60,0xdc,0x65,0xbe,0xbc,0xc6,0xae,0xad,0xc7,0xcf,0xd3,0x4c,0x34,0x2f,0x2c,0x2b,0x56,0xb6,0xac,0xaf -,0x40,0x37,0x38,0x4c,0x4a,0x36,0xda,0xbc,0xda,0xd7,0xc5,0xd7,0xb8,0xb3,0xc7,0x35,0x20,0x37,0xc0,0xaa,0xa7,0xbe,0xc0,0x4b,0x56,0xbe,0xd3,0x3e,0x25,0x2d,0x3c,0xd8 -,0xb5,0xd2,0x4d,0xd0,0xc1,0x66,0x3d,0x3c,0x41,0x47,0xbb,0xb2,0xbe,0xc7,0xcc,0xc7,0xb3,0xc8,0x54,0xd8,0x3e,0x36,0xcf,0xba,0xcf,0x4f,0xef,0x6c,0x32,0x2a,0x20,0x2a -,0x48,0x60,0xb9,0xb5,0xbc,0xc0,0xae,0xb0,0x4c,0x3d,0x45,0xc3,0xb4,0xb0,0xd5,0x4e,0x4b,0xc9,0xbc,0xe9,0x6c,0x24,0x23,0x35,0xe3,0xb9,0xb2,0xae,0xcb,0xce,0x48,0x58 -,0x5d,0x34,0x4d,0x5d,0x49,0x45,0xbd,0xad,0xa7,0xc7,0x3c,0x39,0x2b,0xcb,0xc3,0xce,0xb8,0x59,0xd9,0xba,0xcc,0x40,0x32,0x23,0x2f,0x48,0x40,0xc5,0xc7,0xb7,0xa5,0xa0 -,0xb2,0x34,0x20,0x26,0x50,0xda,0xbe,0xba,0x45,0x69,0xae,0xbf,0xd9,0xde,0x1f,0x28,0x58,0xc0,0xb6,0xb3,0xb8,0xfd,0xf8,0xc9,0xda,0x2c,0x60,0x3f,0xde,0xcd,0xc3,0xad -,0xb1,0xa2,0xe3,0x3e,0x1e,0x1a,0x3e,0xe5,0x5e,0xf1,0x51,0x72,0xad,0x9e,0xb9,0x2c,0x46,0x25,0x54,0xbc,0xbd,0x5c,0xb9,0xae,0xbc,0xac,0x2a,0x36,0x1f,0x39,0xe6,0xcd -,0xbf,0x3f,0xbc,0xbc,0xaf,0xbf,0x30,0x1e,0x20,0x21,0xdc,0xaf,0xaa,0x9f,0xa4,0xc8,0xb0,0x47,0x34,0xbf,0x35,0xaf,0x30,0x46,0xb9,0x5e,0x99,0xac,0x2e,0x40,0x17,0x28 -,0xb9,0x2a,0xc9,0x4a,0xb2,0xab,0xb5,0x9a,0x2b,0x25,0x56,0x32,0xb9,0x3e,0xbc,0x4c,0xc2,0xa1,0xad,0xb2,0x21,0x3a,0x27,0x2c,0xcf,0x50,0xe0,0x55,0xfd,0xfb,0xf1,0xbe -,0x38,0x1f,0x40,0xc9,0x47,0xbd,0xad,0xa2,0x9e,0xb2,0xaf,0x1f,0x33,0xc3,0x3d,0xba,0x1e,0x3f,0xbd,0xc5,0xad,0xb6,0xc3,0x22,0x31,0x45,0x45,0x66,0xf0,0x43,0xc6,0xa5 -,0xa6,0xb4,0x2b,0x20,0x2a,0x49,0xb0,0xd4,0x49,0xb8,0xc0,0x9d,0xaa,0x4e,0x26,0x16,0x33,0x4f,0xb9,0xbc,0x39,0xde,0x4d,0xbe,0xba,0x4b,0x59,0x2f,0x4c,0x4b,0x3a,0xb6 -,0xae,0xa8,0xa1,0xa8,0x5c,0x2c,0x39,0xae,0xad,0x48,0x3a,0x30,0x53,0xcb,0xab,0x32,0x1a,0x22,0x1e,0x29,0x64,0x73,0xab,0xa0,0x97,0x91,0x9f,0x9b,0x37,0x21,0x69,0x59 -,0x5b,0x2c,0x2e,0x39,0x42,0xa5,0x1f,0x1f,0x1d,0x0f,0xca,0x2e,0xdb,0xa7,0xa5,0x9e,0xba,0x9a,0xa3,0xb4,0xad,0xb9,0xac,0x35,0xc7,0x41,0x48,0xb2,0x60,0x24,0x1c,0x12 -,0x1a,0xbe,0x1b,0x3c,0x30,0xf4,0x99,0xa3,0x9b,0xb9,0xba,0xb5,0xbe,0x9e,0xbd,0xad,0xac,0xa6,0x98,0xa5,0xbc,0x26,0x0e,0x0e,0x11,0x0f,0x34,0x14,0x25,0xb6,0xb9,0x99 -,0xa7,0xaf,0xab,0xa1,0x98,0xbe,0xa4,0xa0,0xb9,0xb1,0x31,0xc4,0x23,0xdb,0xd4,0x1f,0x18,0x19,0x0d,0x2f,0x26,0x17,0xad,0x4d,0xbb,0x94,0x97,0x9f,0x39,0xa6,0x96,0x99 -,0x86,0x2c,0x9a,0x11,0x06,0x0b,0x04,0xb6,0x0f,0x0c,0x11,0x0f,0xa1,0x90,0xba,0x8f,0x8e,0xba,0x93,0x8d,0x9d,0x98,0x8a,0xd8,0xc6,0x9c,0x13,0x89,0x8b,0x3f,0x9d,0xc9 -,0x1f,0x32,0x09,0x01,0x06,0x03,0x0d,0x0b,0x09,0x06,0x06,0x13,0x29,0x16,0x12,0x09,0x38,0x2e,0x93,0x9d,0x1c,0x9a,0xad,0x97,0x95,0xaa,0xaf,0xa1,0x9d,0x8b,0x8b,0x87 -,0x96,0x90,0x80,0x82,0x81,0x85,0xa0,0x84,0x95,0x52,0xa2,0x90,0x93,0x08,0x9d,0x2e,0x0b,0x0c,0x02,0x13,0x0e,0x00,0x06,0x0f,0x12,0x14,0x00,0x1a,0x10,0x00,0x0b,0x17 -,0xb0,0x19,0x17,0x9f,0x17,0x17,0x8e,0xa6,0x9c,0x86,0x85,0x88,0x9d,0x8a,0x9e,0x93,0x83,0x83,0x8b,0x2d,0xa9,0x80,0x88,0x96,0xa7,0x36,0x8f,0x9b,0x82,0x8f,0x0a,0x0c -,0x28,0x28,0x16,0x0c,0x02,0x02,0x0c,0x0e,0x01,0x07,0x00,0x0f,0x11,0x15,0xb2,0x0e,0x07,0x19,0x93,0x8e,0x9c,0x33,0xaa,0x9e,0x8c,0x88,0x95,0x22,0x1a,0x94,0x8b,0x91 -,0x92,0x31,0xaf,0xa0,0x8e,0x80,0x25,0x94,0x83,0x81,0x88,0x84,0x9e,0xc9,0x8f,0xa8,0x94,0x22,0x1a,0x07,0x00,0x2b,0x11,0x0b,0x03,0x00,0x03,0x0a,0x1b,0x06,0x12,0x18 -,0x0a,0x0b,0x17,0x0b,0x5f,0x3a,0x96,0x98,0xfe,0x8d,0x20,0xa4,0x86,0x84,0x86,0xa6,0x98,0x87,0x87,0x88,0x92,0x8e,0x9d,0xbe,0x94,0x8e,0x8f,0x88,0xa3,0xcf,0x3a,0xc2 -,0x8f,0x9c,0x2e,0x3c,0x28,0x24,0x6a,0x18,0xb1,0x50,0x03,0x13,0xba,0xc5,0x0d,0x02,0x00,0x0a,0x8f,0x12,0x1f,0x2e,0x12,0x08,0x00,0x12,0x09,0xe5,0x1a,0x07,0x0f,0x11 -,0x03,0x06,0x92,0x99,0x43,0x04,0x1c,0x80,0x98,0x8d,0x1b,0x25,0x86,0x80,0x80,0x83,0x8d,0x93,0xa9,0xa5,0x80,0x89,0x8d,0xba,0xb2,0xbf,0xb2,0x1c,0xcb,0x23,0x2a,0xac -,0x0b,0x44,0x06,0x2f,0x95,0x21,0x9c,0xd1,0x1a,0x53,0x8f,0x87,0x1c,0x17,0x21,0x22,0x94,0x93,0x8e,0x8a,0x25,0x0d,0x9e,0x87,0x80,0x8e,0x12,0x1f,0x9d,0x1e,0x1c,0x9a -,0x8c,0x0f,0x10,0x1d,0xa7,0x8f,0x01,0x0f,0xba,0x3f,0x01,0x0e,0x28,0x19,0x14,0x10,0x13,0x00,0x98,0x67,0x00,0x07,0x00,0x06,0x08,0x8d,0xab,0x00,0x0e,0x0e,0x9f,0xa2 -,0xae,0x26,0x0f,0x17,0x15,0x86,0x89,0x8a,0x8f,0x9c,0x8f,0x8e,0x82,0x83,0x80,0x81,0x9a,0x97,0x80,0x83,0x80,0x82,0x80,0x82,0x80,0x89,0x11,0x9e,0x82,0x86,0x1d,0x08 -,0x06,0x3a,0x1a,0x00,0x06,0x00,0x09,0x01,0x03,0x00,0x02,0x00,0x06,0x64,0x0a,0x02,0x0d,0x1c,0x2c,0x0b,0x0a,0x2a,0x0b,0x39,0x11,0x00,0x0e,0x95,0x85,0x89,0x9b,0x09 -,0xa2,0x98,0x80,0x90,0xb2,0xa2,0x18,0x82,0x85,0x84,0x87,0x88,0x86,0x9f,0x94,0x8c,0x98,0x94,0xa6,0x8e,0x8d,0x86,0xa7,0x2b,0xae,0x1c,0xbd,0x2b,0x9e,0x0a,0x00,0x09 -,0x28,0xa1,0x15,0x13,0x16,0x2e,0x2b,0x0b,0x00,0x1e,0x2c,0x27,0x36,0x35,0x1e,0x8c,0x94,0x6e,0x8a,0x0f,0x95,0x93,0x26,0x32,0xee,0xa6,0xa6,0x8d,0xba,0xa4,0x8a,0x99 -,0xb7,0xc5,0x1e,0x17,0x0e,0x0f,0x2a,0x16,0xc9,0x9e,0x3a,0x0f,0x02,0x2d,0xa6,0x1e,0x05,0x0f,0x0e,0x04,0x0f,0x8b,0x8f,0xa7,0x82,0x85,0x87,0x91,0xdc,0x8d,0x87,0x84 -,0x82,0x8d,0x84,0x83,0x83,0x9f,0x98,0x8c,0xb6,0xae,0x42,0x0c,0x0b,0x03,0x1f,0x88,0x44,0x17,0x14,0x0f,0x38,0x0e,0x0a,0x1a,0x9e,0xa7,0xc6,0x21,0x15,0x17,0x1f,0x3a -,0x0f,0x15,0x13,0x14,0x08,0x01,0x0e,0x06,0x0b,0x96,0xcd,0xe5,0x22,0x23,0x6b,0x19,0x0a,0x14,0xbd,0x90,0xa2,0x22,0x9f,0xce,0x8d,0x86,0x97,0x97,0x85,0x84,0x94,0x9d -,0xac,0x6d,0x92,0x80,0x83,0x80,0x8c,0xae,0x87,0x99,0x21,0xbc,0x9d,0xa3,0x28,0x1d,0x2e,0x8d,0x9b,0x21,0x3f,0x13,0x2d,0x19,0x0e,0x06,0x07,0x03,0xcd,0x82,0x1d,0x0c -,0x11,0x1c,0x28,0x1e,0x01,0x0e,0x08,0x28,0x20,0x1d,0x22,0x0d,0x23,0x1e,0x1e,0x04,0x0a,0x1f,0x25,0x06,0x06,0x0c,0x36,0x8d,0x9f,0x1a,0xcf,0x1f,0x36,0x90,0xa5,0x8e -,0x88,0x86,0x83,0x82,0x80,0x82,0x80,0x82,0x84,0x89,0x80,0x82,0x88,0x92,0xbf,0x50,0x9a,0x8f,0x2e,0xcb,0x0e,0x06,0x0c,0x0b,0x00,0x07,0x05,0x02,0x0e,0x04,0x06,0x07 -,0x11,0x0d,0x13,0x03,0x05,0x1b,0x10,0x05,0x14,0x06,0x0d,0x87,0xc1,0x9d,0x9f,0x92,0x8d,0x9b,0x1f,0xdc,0x85,0x86,0x88,0x8b,0x93,0x8a,0x82,0x8c,0x90,0xaf,0xa0,0xbe -,0xac,0x18,0x56,0x0f,0xb1,0x83,0x98,0x9c,0xbc,0xa9,0x37,0x36,0x0a,0x15,0x28,0xa3,0xc8,0xd6,0x9a,0x48,0x9e,0xdf,0x1b,0x0c,0x35,0xae,0x1c,0x10,0x0f,0x0c,0x26,0x84 -,0x70,0xc8,0x35,0x2c,0xb9,0x9d,0x28,0x29,0x97,0xa3,0x88,0xa1,0x2c,0x33,0x8f,0x9e,0x2f,0x0f,0x4c,0x2b,0x2c,0x16,0x0b,0x17,0x0e,0x9b,0x48,0x15,0x13,0x0a,0x1b,0xd4 -,0x0c,0x07,0x1a,0x21,0x15,0x1a,0x21,0xaa,0xa1,0xaa,0x96,0xa8,0x84,0x97,0x93,0x8c,0x8e,0x91,0x8a,0x80,0x84,0x82,0x82,0x86,0x8a,0x80,0x19,0x9f,0x98,0x9e,0x9d,0x15 -,0xc0,0xbb,0x26,0x0e,0x0c,0x08,0x08,0x0b,0x08,0x01,0x0a,0x02,0xab,0x90,0x28,0x18,0x26,0x17,0x18,0x1c,0x00,0x06,0x1d,0x17,0x12,0x1d,0x12,0xba,0xd7,0x13,0x0e,0x0f -,0xcc,0x29,0x14,0x2b,0x23,0x5d,0x84,0x84,0x99,0x8d,0x8b,0x92,0x80,0xa2,0xe0,0x87,0x8c,0x86,0x9a,0x9a,0x9e,0x8c,0x92,0xa3,0xc0,0xa6,0x82,0xa1,0x1b,0x1d,0xdc,0x27 -,0x8c,0x9d,0x0f,0x36,0x18,0x22,0xb7,0x08,0x0b,0xab,0xbf,0x8f,0x1e,0x03,0xab,0x98,0x19,0x25,0x2e,0x3f,0x28,0x18,0x09,0x0f,0x09,0x2a,0x93,0x1b,0x1e,0x15,0x1e,0x36 -,0xcb,0x0a,0x0f,0x2f,0x18,0x1a,0x0a,0x21,0x9a,0x25,0x20,0x10,0x16,0x1d,0x13,0x0e,0x0b,0x1a,0x5d,0x83,0x86,0x85,0x80,0x81,0x81,0x80,0x88,0x8b,0x82,0x82,0x80,0x82 -,0x87,0x82,0x83,0x90,0x8d,0x25,0x2d,0x1e,0x03,0x01,0x03,0x04,0x03,0xd3,0x0d,0x0d,0x0c,0x02,0x0e,0x07,0x00,0x0e,0x1e,0x1a,0x28,0x09,0x1b,0x97,0xbf,0x0b,0x1d,0x0d -,0x1d,0x3c,0x1a,0x1b,0x1f,0x1e,0x8b,0x8a,0xf7,0xa5,0xab,0x94,0x8c,0x4d,0x3e,0x88,0xa2,0x8d,0x9a,0x9d,0x9e,0x8d,0xaf,0x97,0x9a,0x2c,0x8d,0xa3,0x1f,0xb9,0xb7,0x30 -,0x82,0xc5,0xa8,0xa5,0xad,0x9c,0xa8,0x0e,0xf8,0x8d,0xc7,0xaa,0x1a,0x2e,0x9f,0x9f,0x2e,0xbb,0x6f,0xae,0xd2,0x1a,0x04,0x13,0x09,0xc1,0x8e,0x15,0x39,0x1c,0xab,0x99 -,0x27,0x1b,0x38,0x1f,0x36,0x10,0x15,0xdf,0xae,0xbc,0x9f,0xac,0x36,0x1a,0x11,0x0d,0x05,0x08,0x02,0x3f,0x1d,0x1b,0x2e,0x25,0xb3,0x45,0x0e,0x3f,0xb0,0xb9,0x92,0x9f -,0x89,0x81,0x83,0x82,0x81,0x83,0x83,0x87,0x91,0x9a,0x90,0x9d,0x85,0x83,0x89,0x8a,0x98,0xad,0xc4,0x0f,0x09,0x14,0x07,0x1f,0x13,0x0d,0x16,0x1b,0x0b,0x0a,0x0c,0x0a -,0x04,0x05,0x03,0x0c,0x10,0x0f,0x98,0x66,0x4d,0x2c,0x19,0x2d,0x2d,0x0f,0x2e,0x9c,0x9b,0x99,0x9f,0x9c,0x9b,0xb1,0x2f,0xa2,0x9f,0x3b,0x39,0xb8,0x43,0x9c,0x37,0x9c -,0x89,0xa4,0x93,0x94,0x9e,0x9d,0xa8,0xaa,0x8e,0x96,0xb1,0xb0,0xa2,0xba,0xb1,0x3d,0x36,0x9a,0x96,0xa1,0x97,0x36,0x2f,0x25,0x0f,0xab,0xd7,0x34,0x5a,0x50,0x48,0xf8 -,0x2f,0x38,0xb6,0xd7,0x1a,0x1f,0x21,0x1b,0x3d,0x1c,0x54,0x96,0xd8,0x23,0x1b,0x08,0x15,0x0d,0x10,0x1e,0x0e,0x18,0x2a,0xea,0x23,0x13,0x11,0x13,0x1d,0x13,0x0a,0x19 -,0x15,0x25,0xb5,0x29,0xcd,0xa8,0x52,0xa1,0x9e,0xcb,0x98,0x99,0x8a,0x80,0x82,0x80,0x81,0x82,0x84,0x84,0x85,0x88,0x88,0x8d,0x8c,0x87,0x97,0xa0,0x3a,0x0e,0x1c,0x18 -,0x09,0x04,0x02,0x00,0x09,0x06,0x0b,0x17,0x0a,0x0e,0x16,0x16,0x18,0x0f,0x0c,0x1b,0xb7,0x46,0x3f,0x58,0x18,0x31,0x2b,0x1b,0x52,0x27,0x28,0xab,0xbc,0x53,0xaa,0x6f -,0x55,0x94,0xa0,0xa5,0x9a,0x3b,0x9d,0x8f,0x94,0x8d,0x96,0x9a,0x91,0x9a,0xab,0xa4,0x7d,0x43,0x99,0x93,0x95,0x93,0x5f,0xd6,0x9e,0xd3,0xb2,0x34,0x2a,0xad,0xa3,0xb7 -,0xdd,0x66,0x24,0x3f,0x47,0x2f,0xdc,0x1d,0x1c,0xd8,0x4f,0xae,0xb6,0x2b,0x35,0x31,0x1d,0x2b,0x28,0x1b,0x24,0x37,0x3d,0xcb,0x28,0x17,0x29,0x1d,0x24,0x3a,0x1c,0x24 -,0xa4,0xac,0x93,0x91,0xb2,0x9c,0xa5,0xbe,0xb3,0x27,0x18,0xcb,0xbd,0xaf,0x9c,0x5b,0x3c,0xac,0xd6,0xd9,0x3a,0x14,0x22,0xb6,0xd7,0xa0,0xb8,0x2b,0xb7,0x6f,0x4c,0xaf -,0x3d,0x2f,0xb5,0x42,0xad,0xa0,0xc5,0xbf,0xac,0x43,0xaf,0xb1,0x1c,0x61,0xc9,0x4f,0x9d,0xc4,0x2a,0xc0,0x2f,0x37,0x48,0x19,0x1e,0xc5,0x40,0xae,0xb1,0x36,0xc9,0xac -,0xb0,0xa2,0xc2,0x34,0xaa,0xae,0xa3,0x9b,0xb0,0xd0,0xa0,0xbb,0xa0,0xae,0x2a,0xc2,0xc5,0xcf,0xa0,0xae,0x5b,0xad,0x48,0x4e,0xb3,0x43,0x35,0xbe,0x31,0xc8,0xad,0x28 -,0x2c,0x2b,0x15,0x21,0x20,0x12,0x21,0x1c,0x20,0xc6,0x2c,0x29,0xd5,0x2a,0x38,0x2c,0x17,0x1d,0x30,0x2a,0xc9,0xae,0x64,0x9f,0xa6,0xbe,0x9d,0xcd,0x2c,0xae,0x46,0xcc -,0x9c,0xb7,0xa5,0x96,0xa5,0x9b,0x97,0xc3,0xa6,0xa8,0x61,0xa2,0xa3,0xb1,0x9b,0xa9,0xca,0xa2,0xb6,0xba,0x9f,0xc7,0xb0,0x9a,0xbb,0x9e,0x98,0xbb,0xab,0xd3,0x3e,0xb1 -,0x58,0x2c,0xc7,0x50,0x28,0x57,0x2e,0x2a,0x2e,0x11,0x1d,0x2d,0x18,0x22,0x22,0x1a,0x53,0x2d,0x1d,0x29,0x18,0x13,0x18,0x12,0x17,0x28,0x1b,0x1f,0x3e,0x2b,0x30,0x62 -,0x26,0xb4,0x9f,0xb3,0x9f,0x9f,0x95,0x8b,0x92,0x94,0x8b,0x8f,0x99,0x9b,0x96,0x96,0xaa,0x23,0xc8,0xa4,0x1c,0x0e,0x0d,0x10,0x0d,0x06,0x08,0x16,0x16,0x0d,0x14,0x1b -,0x20,0x1f,0x0f,0x11,0x15,0x13,0x21,0x27,0x24,0x44,0xbd,0xa6,0x96,0x9f,0xa6,0x9b,0xa1,0x9a,0x91,0x9a,0x91,0x8e,0x8f,0x8a,0x8f,0x97,0x94,0x91,0x92,0x90,0x9e,0xc3 -,0x9e,0x96,0xa2,0xbf,0x2e,0xbf,0x9d,0xff,0xca,0xa7,0xaf,0xae,0xae,0x92,0x85,0x92,0xad,0x98,0x8c,0x8f,0xae,0x3b,0xb2,0xb0,0x1c,0x13,0x1c,0x0f,0x06,0x05,0x0a,0x0e -,0x0b,0x07,0x09,0x0f,0x0f,0x14,0x13,0x14,0x19,0x17,0x1e,0x1c,0x13,0x14,0x1d,0x2f,0x4f,0x34,0x3d,0x3c,0x38,0x44,0x4f,0xbb,0xbc,0xb3,0xa8,0xa6,0xa3,0xab,0xa5,0x99 -,0xa0,0x9f,0x9e,0xad,0x9f,0x9e,0xa5,0xad,0xee,0x63,0xc0,0x3e,0x27,0x59,0xab,0xa4,0xb6,0x94,0x86,0x85,0x8c,0x92,0x87,0x85,0x8b,0x98,0x8f,0x87,0x98,0x34,0xa8,0xa0 -,0x30,0x12,0x10,0x1d,0x17,0x0b,0x09,0x0d,0x0d,0x11,0x14,0x1b,0x1d,0x1d,0x22,0x2b,0x20,0x11,0x15,0x12,0x11,0x16,0x16,0x1a,0x15,0x0f,0x16,0x25,0x2d,0x21,0x1e,0x17 -,0x15,0x23,0x2b,0x38,0x36,0x31,0x64,0x58,0x4e,0xad,0xb6,0x3e,0x29,0x28,0xa9,0xa0,0x41,0x5b,0x9c,0x8f,0x99,0x90,0x86,0x83,0x87,0x8d,0x87,0x81,0x85,0x8c,0x8a,0x83 -,0x88,0xa6,0xab,0xa5,0x7a,0x24,0x14,0x19,0x1f,0x11,0x0e,0x18,0x17,0x10,0x14,0x18,0x18,0x14,0x0f,0x0e,0x12,0x17,0x17,0x1f,0x13,0x16,0x1b,0x1d,0x2e,0x20,0x1f,0x1c -,0x19,0x24,0x79,0xce,0x59,0x36,0x38,0x3b,0xd6,0xb5,0xad,0xae,0x36,0x22,0x30,0x57,0x2b,0x33,0xdf,0xaf,0x2a,0x21,0xa3,0x8e,0x91,0xa4,0x8e,0x82,0x86,0x8c,0x85,0x82 -,0x83,0x8d,0x8e,0x85,0x86,0x93,0xee,0xbd,0xc4,0x21,0x16,0x15,0x19,0x11,0x0b,0x10,0x13,0x11,0x0e,0x0e,0x18,0x1a,0x1c,0x1d,0x1e,0x20,0x1d,0x1e,0x20,0x1a,0x1a,0x18 -,0x16,0x16,0x14,0x1b,0x1e,0x1f,0x2b,0x2b,0x26,0x2f,0x36,0x33,0x2f,0x2e,0x31,0xd8,0xd7,0x66,0xbd,0xc3,0x28,0x1c,0x3a,0xb5,0xc0,0x24,0x2c,0xaa,0xa2,0xab,0x94,0x89 -,0x86,0x8c,0x8b,0x83,0x82,0x87,0x8e,0x87,0x87,0x92,0xa6,0xa3,0x9a,0xf9,0x1a,0x18,0x1c,0x1d,0x17,0x12,0x15,0x13,0x1a,0x1e,0x2f,0x28,0x17,0x19,0x1f,0x31,0x38,0x25 -,0x1f,0x20,0x28,0x3c,0x37,0x60,0x2c,0x23,0x27,0x2a,0x72,0xcf,0x45,0x41,0x2c,0x2f,0x54,0x33,0x79,0xcf,0x61,0x33,0x6d,0xbd,0x2f,0x1c,0x23,0x3e,0x31,0x18,0x16,0xbf -,0x9f,0xb8,0xb4,0x94,0x87,0x8a,0x8d,0x88,0x84,0x87,0x95,0x8c,0x86,0x89,0x9b,0xa9,0x9a,0xad,0x2a,0x18,0x1c,0x18,0x0e,0x0c,0x12,0x16,0x14,0x0f,0x13,0x1c,0x1e,0x25 -,0x1f,0x19,0x16,0x16,0x1f,0x2e,0x2b,0x1f,0x1c,0x29,0x2b,0x27,0x26,0x27,0x28,0x27,0x2f,0x42,0x51,0xdc,0xbb,0xdd,0xd7,0xd5,0xb3,0xbe,0xdf,0xb2,0xb3,0x45,0x37,0xa7 -,0xa0,0x35,0x1e,0xce,0x9a,0x9c,0x51,0x9f,0x89,0x86,0x8b,0x89,0x81,0x83,0x8b,0x8e,0x88,0x88,0x8f,0xab,0xac,0xb1,0x4b,0x19,0x19,0x1b,0x11,0x0d,0x0d,0x0f,0x0e,0x0f -,0x10,0x1a,0x18,0x1a,0x16,0x15,0x1b,0x1e,0x1f,0x19,0x15,0x18,0x23,0x2c,0x2b,0x1f,0x1d,0x1e,0x2a,0x22,0x24,0x2d,0x27,0x2c,0x4d,0xe7,0xc3,0xcf,0x4b,0xd4,0xd0,0xa7 -,0xa4,0x47,0x1b,0x23,0xbd,0xbd,0x28,0x2a,0xbf,0xbc,0x3d,0xa8,0x88,0x85,0x8b,0x8e,0x86,0x81,0x85,0x8a,0x86,0x83,0x88,0x93,0x9b,0x99,0xa8,0x46,0x26,0x26,0x18,0x0d -,0x0a,0x0d,0x0e,0x17,0x19,0x15,0x12,0x11,0x19,0x1b,0x1e,0x1a,0x1e,0x1f,0x1c,0x1d,0x1e,0x2d,0x41,0x2b,0x27,0x1e,0x1c,0x22,0x28,0x3f,0xcf,0xd5,0x4b,0x59,0xe8,0xde -,0xae,0xc8,0x40,0xcb,0xbb,0x6e,0x26,0x2d,0x9f,0xa0,0x22,0x17,0x46,0x9e,0xb6,0x45,0x9f,0x89,0x8c,0x8f,0x86,0x81,0x84,0x8c,0x8a,0x83,0x84,0x93,0xa8,0xa6,0xa6,0xb8 -,0x33,0x1e,0x13,0x0a,0x09,0x0f,0x15,0x10,0x0d,0x0c,0x10,0x20,0x22,0x1c,0x19,0x12,0x15,0x1f,0x1f,0x1c,0x19,0x1a,0x31,0x4f,0x3a,0x29,0x24,0x26,0x3c,0x3e,0x39,0x41 -,0x2e,0x37,0x57,0xc0,0xae,0xb2,0x36,0x3c,0xa5,0x9f,0xca,0x2b,0x3f,0xae,0x34,0x18,0x2a,0xb9,0xb8,0x2c,0xbc,0x8a,0x87,0x8f,0x8b,0x83,0x81,0x85,0x89,0x87,0x83,0x89 -,0x93,0x91,0x92,0xa6,0x43,0x2e,0x27,0x1e,0x0d,0x0d,0x0e,0x0f,0x13,0x14,0x15,0x15,0x12,0x12,0x16,0x17,0x19,0x17,0x1c,0x18,0x1e,0x1e,0x20,0x24,0x1f,0x1c,0x19,0x1c -,0x27,0x29,0x29,0x3b,0x4b,0xb9,0xbb,0x5a,0x57,0x79,0x34,0x33,0xd9,0xab,0xbf,0x2d,0x2d,0xab,0x9d,0x3a,0x1d,0x2e,0xc3,0x4d,0x3f,0x9b,0x8a,0x8e,0x92,0x87,0x81,0x82 -,0x88,0x89,0x83,0x83,0x8a,0x94,0x95,0x97,0xaa,0xe5,0x3b,0x19,0x09,0x07,0x0e,0x16,0x16,0x13,0x0e,0x12,0x17,0x21,0x2e,0x19,0x11,0x11,0x15,0x1b,0x1f,0x1e,0x1c,0x2a -,0xfe,0xc9,0x30,0x1c,0x1a,0x27,0x37,0x43,0x35,0x29,0x2b,0x31,0xc1,0xa0,0xad,0x34,0x22,0x5f,0xa7,0x48,0x21,0x3b,0xc8,0x2f,0x19,0x1f,0xbe,0xcc,0x2d,0xbb,0x8e,0x89 -,0x8f,0x8f,0x85,0x81,0x83,0x88,0x86,0x83,0x88,0x8e,0x8f,0x8d,0x9c,0x4c,0x29,0x1e,0x13,0x0f,0x0f,0x13,0x16,0x10,0x0f,0x0f,0x10,0x12,0x1a,0x1d,0x16,0x11,0x12,0x1a -,0x21,0x1e,0x1f,0x1f,0x1e,0x1d,0x1b,0x1e,0x1f,0x2b,0x32,0x33,0x3d,0x5a,0xc4,0xff,0x3e,0x61,0xc7,0x36,0x29,0xc3,0xa0,0xa7,0x3a,0x50,0xa5,0xab,0x28,0x16,0x2f,0xba -,0x36,0x30,0x9d,0x8c,0x8d,0x90,0x88,0x81,0x84,0x8d,0x8d,0x85,0x84,0x87,0x8a,0x8d,0x91,0x9d,0xa5,0xb6,0x23,0x0d,0x08,0x0a,0x0f,0x17,0x15,0x13,0x12,0x16,0x19,0x1c -,0x15,0x0f,0x0c,0x0d,0x1c,0x25,0x27,0x1f,0x20,0x3c,0x40,0x2b,0x20,0x1c,0x19,0x1e,0x43,0xaf,0xb7,0x38,0x2f,0x3a,0xcd,0xaf,0x2a,0x17,0x2b,0xb2,0x38,0x2d,0xa5,0x9c -,0x68,0x1e,0x38,0xc1,0x29,0x13,0x2d,0x98,0x8b,0x8b,0x8e,0x88,0x82,0x82,0x86,0x84,0x82,0x88,0x90,0x8d,0x88,0x8c,0x9d,0xa1,0xbf,0x22,0x1b,0x0f,0x0a,0x0a,0x11,0x0e -,0x0c,0x10,0x0f,0x15,0x1d,0x1a,0x13,0x0e,0x16,0x31,0x21,0x1f,0x31,0x27,0x4c,0xc4,0xea,0x35,0x1a,0x17,0x1f,0x2e,0x33,0x33,0x25,0x15,0x22,0xaa,0xb8,0xa9,0x25,0x1c -,0x5c,0x84,0xc3,0x08,0x80,0x93,0xa2,0x91,0x28,0x1e,0x15,0x9b,0x2f,0x22,0x09,0x00,0x3d,0x06,0x0e,0x09,0x07,0x0a,0x00,0x0e,0xd7,0xab,0x1d,0x2e,0x0d,0x0a,0x2e,0xa2 -,0x26,0x16,0x37,0x91,0xac,0x1c,0x8a,0x80,0x82,0x91,0x88,0x80,0x88,0x84,0x83,0x81,0x8a,0x8b,0x88,0x83,0x80,0x84,0x82,0x82,0x85,0x86,0x9d,0x9a,0x8a,0x9c,0x34,0x1c -,0x20,0x1a,0x18,0x0c,0x0a,0x3d,0x28,0x0e,0x07,0x08,0x29,0x2a,0x09,0x08,0x09,0x00,0x04,0x06,0x07,0x07,0x03,0x00,0x03,0x00,0x06,0x0c,0x04,0x02,0x07,0x0a,0x04,0x03 -,0x06,0x16,0x1c,0x0a,0x07,0x00,0x0a,0xae,0xec,0x17,0x1a,0xb6,0x96,0x9a,0x90,0x81,0x81,0x87,0x85,0x82,0x84,0x81,0x81,0x82,0x80,0x83,0x85,0x85,0x87,0x89,0x81,0x82 -,0x80,0x90,0xe3,0x86,0x80,0x82,0x84,0x8a,0x84,0x87,0x89,0x82,0x80,0x81,0x82,0x81,0x81,0x84,0x84,0x85,0x83,0x95,0x4c,0xa5,0x1f,0xa8,0xb8,0x29,0xa0,0xa9,0x0e,0x08 -,0x17,0xd6,0xa6,0x0a,0x05,0x13,0x0a,0x00,0x07,0x08,0x03,0x00,0x02,0x01,0x00,0x00,0x01,0x02,0x00,0x04,0x01,0x01,0x05,0x01,0x05,0x17,0x06,0x01,0x00,0x03,0x28,0x0f -,0x00,0x04,0x04,0x03,0x03,0x03,0x04,0x05,0x03,0x02,0x03,0x00,0x11,0x27,0x04,0x20,0xb0,0x1f,0xa3,0x9f,0x92,0x80,0x86,0x8a,0x86,0x91,0x8c,0x80,0x85,0x86,0x8c,0x8c -,0x83,0x85,0x87,0x83,0x82,0x84,0x80,0x89,0x8a,0x80,0x82,0x82,0x80,0x82,0x81,0x86,0x89,0x80,0x80,0x83,0x82,0x87,0x8f,0x85,0x84,0x83,0x8e,0x5e,0xec,0xb8,0x1a,0x30 -,0x8d,0x17,0xcb,0x94,0x0a,0x0d,0x67,0xe5,0xa4,0x20,0x13,0x57,0x13,0x21,0x91,0x91,0x99,0x96,0xd9,0xac,0x8b,0x87,0x8e,0x9b,0xa8,0x85,0x86,0xb7,0x86,0x83,0x90,0x84 -,0x8c,0x42,0x53,0xb1,0x8f,0x8f,0x2c,0x46,0x44,0x0d,0x2e,0x9d,0xae,0x39,0x16,0x09,0x02,0x08,0x08,0x17,0x07,0x00,0x0c,0x03,0x00,0x03,0x01,0x02,0x04,0x01,0x01,0x00 -,0x01,0x05,0x02,0x00,0x01,0x00,0x00,0x01,0x02,0x01,0x00,0x00,0x00,0x06,0x00,0x05,0x07,0x00,0x02,0x06,0x01,0x02,0x03,0x03,0x0d,0x0e,0x0e,0x06,0x05,0x26,0xa0,0x1f -,0x20,0x19,0x18,0x0e,0x24,0x35,0xa3,0x8d,0x16,0x8f,0x88,0x8f,0x81,0x83,0x88,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81 -,0x80,0x80,0x82,0x80,0x80,0x89,0x82,0x87,0x8b,0x80,0x8a,0x8a,0x8e,0x8f,0x8f,0x71,0xb9,0x8c,0x90,0x9f,0x41,0x10,0x0d,0x14,0x49,0x14,0x4f,0x18,0x03,0xa3,0x24,0x18 -,0x98,0x1b,0x16,0x3a,0x12,0x2e,0x19,0x1f,0x17,0x07,0x09,0x07,0x02,0x08,0x0e,0x0f,0x0c,0x00,0x03,0x00,0x35,0x1a,0x0b,0xff,0x04,0x05,0x27,0x0c,0x0f,0x31,0x15,0x14 -,0x07,0x0c,0x0a,0x04,0x18,0x18,0x09,0x14,0x0e,0x0b,0x0b,0x16,0x1f,0x19,0xb8,0x03,0x19,0x8f,0x1b,0xc1,0xb8,0x09,0x1f,0x4a,0x2e,0x45,0x27,0xb2,0x18,0x0f,0x3e,0x1e -,0x1e,0xa2,0x5c,0xcd,0x2b,0x2a,0x27,0xa7,0x82,0xc6,0x8b,0x8c,0x0e,0xa5,0x8e,0x3c,0xa7,0x32,0x25,0xc7,0xaa,0x8f,0xa0,0x93,0x87,0x93,0x8d,0x83,0x85,0x83,0x83,0x85 -,0x8a,0x80,0x85,0x8d,0x80,0x81,0x85,0x80,0x90,0xa4,0x87,0x8d,0x8e,0xb0,0x2e,0x1f,0x06,0x0e,0x13,0x06,0x0e,0x15,0x06,0x05,0x02,0x04,0x00,0x1d,0x10,0x01,0x18,0x02 -,0x01,0x29,0x12,0x0f,0x38,0x0c,0x0e,0x1c,0xa9,0xa8,0x38,0xaa,0xa5,0x58,0x93,0x8e,0x9f,0x8f,0x8f,0xac,0x41,0x89,0x3a,0xa1,0x80,0xa4,0x93,0x87,0xa9,0x8e,0x82,0x84 -,0x81,0x87,0x82,0x93,0x92,0x83,0x8c,0xa0,0x89,0x9a,0xcd,0xbb,0x2e,0x24,0x49,0x88,0x20,0xa7,0x91,0x0c,0xb3,0x92,0x1b,0x36,0x41,0x1a,0x22,0x4e,0x9a,0x25,0x2f,0xcc -,0x0f,0x18,0xc0,0x10,0x0e,0x0e,0x0a,0x03,0x0f,0x22,0x01,0x9b,0x9c,0x0c,0xbd,0x2a,0x0c,0x3d,0xc9,0x3a,0x18,0x19,0x1c,0x04,0x10,0x17,0x06,0x0d,0x14,0x03,0x0e,0x10 -,0x0c,0x0b,0x9b,0x97,0x1c,0x80,0x8e,0x97,0x81,0x83,0x86,0x80,0x83,0x84,0x83,0x80,0x85,0x98,0x89,0x9a,0x4d,0x92,0x9a,0x20,0x3b,0x14,0x09,0x03,0x25,0x0b,0x06,0xc2 -,0x05,0x02,0x16,0x06,0x09,0x27,0x12,0x0c,0x08,0x0f,0x07,0x0a,0x2e,0x0e,0x05,0x25,0x0e,0x10,0xb6,0x48,0x1c,0xd0,0x89,0x16,0x9b,0x82,0x1f,0x97,0x8b,0x2b,0xac,0x9c -,0xc9,0x5d,0x9e,0x8d,0xc9,0xa0,0x8e,0xe2,0x9a,0x85,0xa4,0x9c,0x95,0xb4,0x21,0x90,0x8e,0x19,0x87,0x9c,0x0e,0x9b,0xb8,0x1c,0x9f,0xae,0x49,0x37,0xc4,0xbf,0x3a,0x92 -,0xa1,0x18,0xc8,0x2f,0x15,0xb2,0x4b,0x17,0x0f,0xa7,0x0c,0x0f,0x8f,0x0d,0x17,0xad,0x0a,0x09,0x23,0x18,0x18,0x24,0xc9,0x14,0x14,0xdf,0x16,0x2f,0x95,0x2b,0x24,0x1b -,0x0f,0x04,0x22,0x3a,0x00,0x3d,0x14,0x00,0x3d,0x4a,0x18,0x94,0x95,0x93,0x8e,0x85,0x87,0x8a,0x80,0x84,0x86,0x80,0x83,0x85,0x81,0x84,0x89,0x8f,0x80,0x48,0xa0,0x88 -,0x13,0x33,0xab,0x09,0x13,0x18,0x09,0x0d,0x0e,0x17,0x06,0x0e,0x14,0x03,0x0e,0x18,0x07,0x0c,0x0a,0x07,0x02,0x26,0x1c,0x06,0x9d,0x14,0x0d,0x92,0x33,0x27,0x9b,0xac -,0xb9,0x9b,0x8d,0xa6,0x9f,0x89,0xa8,0xb6,0x8f,0x4c,0xb5,0x46,0x34,0x1c,0xb3,0x9c,0x17,0x87,0x8d,0xaf,0x84,0x8f,0xa6,0x8d,0x8f,0x9b,0x9e,0x91,0x33,0x2d,0x98,0x42 -,0x33,0x95,0xd0,0x36,0x46,0x2c,0x1a,0xa3,0x9c,0x0a,0x8f,0xb6,0x0b,0x91,0xa1,0x2f,0x9a,0xad,0x40,0x45,0x9e,0x36,0x15,0xcf,0x0f,0x0a,0x1a,0x0d,0x16,0x12,0x14,0x0b -,0x39,0x45,0x06,0x90,0xc0,0x0b,0x94,0x2a,0x0a,0x2e,0x18,0x15,0x19,0x2b,0x0e,0x0b,0x18,0x0b,0x10,0x2d,0x3e,0xf8,0xcf,0xaa,0xb6,0x89,0x87,0x90,0x80,0x83,0x84,0x80 -,0x83,0x85,0x80,0x83,0x8a,0x8a,0x94,0xb9,0xba,0x9e,0x2f,0x1e,0x25,0x14,0x0a,0x0b,0x06,0x05,0x19,0x06,0x0b,0x21,0x00,0x0e,0x3a,0x0b,0x16,0x1e,0x0e,0x0d,0x17,0x1a -,0x0d,0x1d,0x16,0x0c,0x1a,0x1b,0x37,0x3c,0xde,0x27,0x96,0x93,0x29,0x81,0x94,0x3e,0x85,0x9d,0x28,0x94,0xbd,0xdd,0xa7,0xa3,0xa4,0xce,0x96,0x9d,0xaa,0x91,0x90,0xc4 -,0x9a,0xd0,0x9a,0x89,0x20,0x89,0x8a,0x25,0x8d,0x9f,0x2f,0x9e,0xbe,0x37,0x39,0xf3,0x5e,0x2d,0x59,0xd8,0x29,0x25,0xbc,0x13,0x28,0x18,0x34,0x9f,0x0d,0x8e,0xad,0x10 -,0x9c,0x2e,0x11,0xf9,0x1a,0x16,0x19,0x16,0x1a,0x14,0x1f,0x25,0x15,0x14,0x2f,0x0d,0x1a,0x11,0xd3,0x1b,0x0e,0x90,0x0e,0x11,0xb2,0x0a,0x0e,0x4d,0x0f,0x22,0xb6,0xce -,0x9d,0x8c,0x8c,0x89,0x87,0x83,0x85,0x86,0x86,0x86,0x80,0x8b,0x82,0x80,0x91,0x85,0x8b,0xaf,0x90,0xbc,0x2d,0x1e,0x0e,0x16,0x0c,0x0b,0x14,0x05,0x09,0x0b,0x02,0x0a -,0x01,0x1f,0x0b,0x0c,0xb8,0x04,0x0f,0x4c,0x06,0x1a,0x2e,0x19,0x21,0x23,0xc8,0x1c,0x46,0x98,0x21,0x64,0xac,0x16,0xa5,0xc8,0x8b,0x9d,0xaa,0x84,0xf5,0xac,0x89,0x3c -,0xc5,0x9d,0xdd,0xaa,0xa6,0x8b,0xa9,0x97,0x88,0xad,0x9f,0x8e,0x32,0xb0,0x2d,0x8e,0xea,0x29,0x80,0x1d,0xca,0x8b,0x1b,0xbc,0x9c,0x24,0xdf,0xc3,0xab,0x31,0x60,0x9e -,0x1c,0x32,0x47,0x0d,0x22,0x1a,0x9b,0x1a,0x22,0x8c,0x10,0xab,0x96,0x09,0x19,0x27,0x0a,0x15,0x1c,0x23,0x0d,0x2a,0x6d,0x0d,0xdb,0x1a,0x0a,0x0f,0x0d,0x26,0x06,0x3a -,0xd9,0x06,0x3d,0x1e,0x0c,0x41,0x2a,0x1e,0x39,0xa8,0x9c,0x9a,0x83,0x87,0x86,0x80,0x86,0x82,0x85,0x81,0x85,0x8f,0x80,0x88,0x94,0x80,0xa4,0xeb,0x9a,0x2e,0x22,0x19 -,0x2f,0x0d,0x0a,0x27,0x05,0x0a,0x0b,0x01,0x06,0x02,0x1f,0x0b,0x0d,0xb8,0x03,0x1d,0x9c,0x0d,0x24,0x15,0x10,0x1f,0x24,0x9f,0x12,0x2a,0xb1,0x0c,0xad,0x29,0x38,0xa1 -,0x9f,0x8f,0x12,0x92,0x8b,0xbd,0x84,0x99,0x2a,0x8f,0x9c,0xa4,0x58,0xbc,0x96,0xaf,0x88,0x9f,0x41,0x97,0x1f,0xab,0xca,0xa9,0xa6,0x24,0x89,0x4e,0xa1,0x81,0xc2,0xac -,0x2b,0x0a,0xc7,0xc3,0x9d,0xc8,0x0f,0x26,0x16,0xae,0x3a,0x11,0x16,0x0b,0xb1,0x17,0x4b,0x92,0x0b,0xb8,0x96,0x20,0x95,0xb7,0x34,0x36,0x18,0xb1,0x24,0xd5,0x33,0x06 -,0x23,0x1e,0xa6,0x95,0x9f,0xec,0x07,0x9a,0x9d,0xbf,0x87,0xaf,0x17,0xbe,0x26,0xba,0x96,0x9d,0xb3,0x10,0x22,0x1a,0xc7,0x99,0x15,0x0f,0x09,0xa4,0x98,0xba,0x86,0x1c -,0x2b,0x8d,0xb5,0x9b,0x4d,0x0f,0x1f,0x1f,0x93,0x98,0xb8,0x9e,0x0b,0x11,0x24,0xfc,0x9e,0x41,0xb2,0x05,0x25,0x85,0xab,0x8c,0x9a,0x0d,0x4d,0xa3,0x95,0x98,0xbf,0xc2 -,0x0f,0xad,0x91,0x3a,0xa3,0x1c,0x1c,0x10,0xac,0x8a,0x26,0x8a,0xb4,0x16,0x89,0x89,0x8c,0x95,0x1d,0x16,0x19,0x92,0x90,0x26,0xf8,0x0d,0x0b,0xbc,0x2b,0xb5,0x16,0x3d -,0x14,0x05,0x97,0x1c,0x2d,0x4f,0x04,0x13,0x40,0x9d,0xa4,0x18,0x1e,0x0c,0x2b,0x98,0x1b,0x18,0x0a,0x09,0x28,0x1d,0x8a,0xbe,0xb9,0x88,0x22,0x8d,0x84,0x90,0x89,0x36 -,0x2b,0xb1,0x91,0x80,0x8f,0x9d,0xd8,0x27,0x94,0x9f,0xa0,0x39,0x27,0x8e,0x1e,0x95,0x88,0x45,0x8d,0xae,0x1b,0x95,0xa3,0x99,0x2f,0x2e,0xb4,0x1a,0xad,0x1e,0x0d,0x2a -,0x0e,0x20,0x0d,0x13,0x41,0x06,0x92,0x9f,0x14,0xa3,0x18,0x0e,0x27,0x10,0x28,0x19,0x24,0x11,0x05,0xc9,0x5d,0x48,0x32,0x03,0x0c,0x06,0xb1,0x9c,0x10,0x8e,0x1f,0x24 -,0x88,0x9d,0x8d,0x8e,0x9a,0x98,0x33,0x8d,0x8f,0x9a,0x87,0x3b,0x9c,0x86,0x98,0x8a,0x3a,0x8f,0x8a,0xa0,0x80,0x9a,0x9d,0x8b,0x25,0x9e,0xa1,0xed,0xae,0x09,0x1a,0x08 -,0x12,0xb7,0x0c,0x09,0x03,0x00,0x06,0x03,0x21,0x0d,0x00,0x15,0x03,0x1e,0xeb,0x06,0x23,0x0f,0x15,0xdd,0x1f,0x9c,0x28,0x3c,0xa0,0x1f,0x95,0xa2,0x2c,0xaa,0x16,0x8c -,0x8e,0x90,0x80,0xa4,0x8e,0x81,0x8a,0x80,0x8b,0x95,0x91,0xa1,0x86,0x92,0x88,0x87,0xac,0x9c,0x36,0x1d,0xa0,0x2d,0x89,0x2e,0x22,0x84,0xaf,0x88,0x90,0x1a,0xce,0x2b -,0xb9,0x9e,0x1b,0x35,0x0a,0x1d,0x32,0x0f,0x2b,0x11,0x09,0x10,0x00,0xa7,0x2b,0x13,0xa0,0x03,0x15,0x4f,0x3a,0x9c,0x17,0x0f,0x1a,0x15,0x98,0x1b,0x1c,0x2c,0x13,0x22 -,0x1a,0x1a,0x2c,0x0c,0x9d,0x19,0x0f,0x84,0xc5,0xa4,0xa4,0x2b,0xb2,0xac,0x8c,0x8e,0xd6,0x92,0x38,0x94,0x86,0x9d,0xc2,0x2b,0x24,0x4d,0x1d,0x88,0x92,0x37,0x85,0x4e -,0x9a,0x87,0x99,0x9d,0x2c,0xe3,0x9c,0x5a,0x8c,0x2d,0x1b,0x22,0x1c,0x1b,0x1c,0x0c,0x0a,0x01,0x21,0x2f,0x08,0x8c,0x36,0x1f,0x28,0x2e,0x9b,0x97,0x8b,0x8d,0x29,0x8e -,0x88,0x85,0x81,0x8c,0x99,0xa5,0x8e,0x8a,0x93,0x8d,0x8c,0x1f,0x8d,0x91,0x91,0x98,0x48,0x2f,0x0a,0x0d,0x2a,0x0d,0x0e,0x05,0x01,0x07,0x06,0x0d,0x06,0x01,0x02,0x03 -,0x03,0x28,0x05,0x12,0x13,0x0c,0x18,0x0e,0xb9,0x2f,0x15,0x2a,0x1b,0x3f,0x9b,0xa6,0xa8,0x1a,0xdc,0x99,0xa0,0x99,0xa0,0x17,0x95,0x91,0x8e,0x83,0x94,0x8a,0xb2,0x9d -,0x87,0x91,0x8b,0x8a,0x9d,0x94,0x9c,0x8a,0x89,0x97,0xa6,0x3d,0xbc,0x91,0xa0,0x97,0xaf,0x1c,0x9f,0xd5,0x95,0x96,0x6e,0x3e,0x30,0xb9,0xa8,0x46,0x9f,0xbb,0x1a,0x2c -,0x1a,0xa4,0xab,0x1c,0x0e,0x07,0x19,0x2c,0xd7,0x1d,0x12,0x0d,0x17,0x22,0x28,0x3a,0x0f,0x15,0x17,0x1d,0x45,0x9f,0x32,0x0c,0x1d,0x2e,0x4f,0xa0,0xeb,0x0f,0x09,0x1d -,0x55,0x56,0x5d,0x2e,0x0f,0x26,0xac,0x24,0xe3,0xb4,0xa5,0x33,0x2a,0xa1,0x9e,0x9a,0x97,0x97,0x9f,0x56,0x99,0x89,0x9f,0xef,0x4b,0xce,0xad,0xa2,0x92,0x29,0x0a,0x28 -,0x21,0x3b,0xaf,0xc1,0x1e,0x0f,0xbf,0x95,0x9d,0xab,0x48,0x1c,0x24,0x96,0x87,0x96,0x2e,0xb4,0xa3,0x9e,0x8e,0x85,0x8c,0xda,0x8d,0x86,0x8d,0x88,0x82,0x85,0x8b,0x8b -,0x8d,0x8f,0x8c,0x89,0xae,0x1a,0x1f,0x3e,0x20,0x0d,0x11,0x06,0x01,0x02,0x0d,0x11,0x00,0x05,0x08,0x01,0x07,0x1a,0x0f,0x07,0x07,0x0a,0x0b,0x19,0x2a,0x0d,0x07,0x11 -,0x1d,0x29,0x22,0x1f,0x16,0x0f,0x26,0x97,0x91,0x2e,0x3e,0x9d,0xa4,0x99,0x84,0x84,0x9d,0x94,0x8a,0x8c,0x8a,0x84,0x8a,0xa4,0x9a,0x99,0xa5,0x9d,0x8d,0xa4,0xde,0x3e -,0x9a,0x8f,0xae,0x8e,0x92,0xb5,0x2f,0x9b,0x84,0x9a,0xb4,0x99,0x58,0x38,0x8f,0x91,0x30,0x1c,0x27,0x0d,0x10,0x9f,0x14,0x06,0x06,0x12,0x23,0x17,0xbc,0x30,0x0d,0x0b -,0x1d,0x9b,0xad,0x19,0x3a,0x16,0x0d,0x1e,0xb3,0x1d,0x07,0x13,0x0c,0x04,0x4a,0x27,0x07,0x0d,0x23,0x27,0x0f,0x9e,0xa7,0x20,0x31,0xbd,0x95,0x92,0x9c,0x95,0xb4,0x41 -,0xc4,0x8f,0x8d,0x3d,0xa4,0xb9,0x12,0xaa,0x8b,0x9f,0x4f,0xa6,0x9f,0x1c,0x8c,0x84,0x9d,0xda,0xb9,0xa2,0xa4,0x91,0x93,0x46,0x22,0x3b,0xbe,0x9c,0x33,0x23,0x15,0x06 -,0x0a,0xb7,0x46,0x0d,0x11,0x2e,0x10,0x2c,0x82,0x8c,0x9f,0x96,0x8e,0x8e,0x85,0x80,0x85,0x8e,0x89,0x8b,0x8c,0x87,0x88,0x88,0xca,0x2b,0xa4,0x9d,0x1d,0x13,0x2f,0x11 -,0x02,0x20,0xbd,0x0c,0x0a,0x09,0x07,0x06,0x45,0x25,0x03,0x04,0x05,0x06,0x0c,0x2c,0x15,0x03,0x00,0x07,0x15,0x18,0x0e,0x18,0x0d,0x04,0x19,0x9a,0x9d,0xc1,0xa0,0xc9 -,0x34,0x8d,0x81,0x91,0x96,0x8e,0x99,0x95,0x87,0x83,0x93,0xab,0xa0,0x9c,0x9c,0x8e,0x90,0xa7,0x22,0xdf,0x8a,0x8f,0x8c,0x8c,0x90,0xd6,0xa9,0x85,0x86,0x8d,0x95,0xa9 -,0x40,0x97,0x87,0x93,0xcf,0x48,0x13,0x15,0xc0,0xa2,0x1f,0x03,0x08,0x15,0x33,0x3a,0x5e,0x38,0x0a,0x0c,0x45,0xaa,0xbe,0x3c,0x14,0x08,0x10,0xa9,0xa2,0x1d,0x1b,0x0f -,0x06,0x0f,0x2b,0x20,0x0c,0x0c,0x05,0x07,0x10,0x5a,0x47,0x0b,0x0b,0x19,0xd9,0xda,0x9b,0xa0,0x32,0x1d,0xa7,0x8b,0x8e,0x93,0x9d,0x23,0x31,0x8f,0x8d,0x9a,0xbe,0x2c -,0x13,0xce,0x8a,0x88,0xae,0x23,0x20,0xd0,0xa1,0x8d,0x8d,0xec,0x26,0xbd,0x8d,0x8d,0x8e,0x91,0xc7,0x15,0x34,0x9a,0x9e,0x4d,0x26,0x0b,0x0a,0x2c,0xbf,0x31,0x34,0x33 -,0x22,0x39,0x9a,0x84,0x8e,0x9e,0xa4,0x8f,0x83,0x81,0x80,0x85,0x91,0x8f,0x86,0x87,0x87,0x8c,0xbc,0x10,0x1c,0xbb,0xee,0x19,0x08,0x01,0x00,0x09,0x1c,0x0f,0x01,0x01 -,0x01,0x07,0x0e,0x22,0x18,0x08,0x05,0x0b,0x1a,0x20,0x38,0x1c,0x08,0x07,0x1e,0xb9,0xb3,0x35,0x12,0x0e,0x10,0x24,0xcf,0xd8,0x23,0x2a,0x28,0xa3,0x88,0x87,0x89,0x9f -,0x9c,0x8f,0x87,0x82,0x84,0x8f,0xad,0xa1,0x8b,0x82,0x82,0x89,0xbd,0xe6,0xa2,0x8c,0x89,0x9c,0x1a,0x09,0x19,0x98,0x8a,0x9f,0xb4,0x2f,0x33,0xa9,0x8f,0x89,0x96,0x56 -,0x2f,0xc3,0x95,0x8a,0x8e,0x4e,0x0d,0x11,0x44,0xa9,0x6f,0x14,0x07,0x04,0x0a,0x15,0x29,0x18,0x0b,0x05,0x05,0x1b,0x6d,0xab,0x20,0x0a,0x09,0x1a,0x9b,0x8d,0x9f,0x1d -,0x0c,0x0f,0x55,0xa1,0xaa,0x14,0x08,0x09,0x1e,0x9d,0xa3,0x3b,0x0b,0x06,0x18,0x9a,0x97,0x9f,0x39,0x20,0x6a,0x9d,0x81,0x82,0x88,0x9d,0xc8,0x9f,0x88,0x84,0x89,0xe0 -,0x12,0x2c,0xad,0x8e,0x9a,0xe1,0x0f,0x09,0x15,0x24,0x52,0x46,0x13,0x0a,0x10,0x37,0x8e,0x97,0x56,0x1e,0x18,0xa7,0x89,0x82,0x8c,0x4a,0x3e,0x91,0x84,0x81,0x81,0x91 -,0xb6,0xa4,0x8b,0x85,0x84,0x9b,0x29,0x19,0x36,0x91,0x8f,0x9c,0x1b,0x0d,0x05,0x16,0xb3,0x57,0x0d,0x04,0x03,0x0d,0x1d,0x1e,0x11,0x00,0x02,0x03,0x0a,0x0b,0x0a,0x05 -,0x01,0x02,0x02,0x19,0x45,0x1a,0x0a,0x04,0x0e,0xa5,0x8d,0x9e,0x3a,0x15,0xc2,0x8e,0x85,0x84,0x92,0xa3,0xaa,0x90,0x8d,0x89,0x8f,0xa7,0x2b,0xad,0x95,0x8b,0x8c,0xb5 -,0x27,0x20,0x8f,0x86,0x86,0x93,0xe8,0xbf,0x91,0x86,0x82,0x8b,0xa0,0xba,0xa8,0x93,0x8b,0x8b,0xa5,0x23,0x16,0x2c,0xc2,0xaf,0x23,0x1d,0x0e,0x0d,0x28,0x10,0x33,0x98 -,0xe8,0x00,0xb6,0x84,0x2a,0x9a,0x1d,0x1c,0x0e,0x15,0x18,0x0c,0x19,0x00,0x05,0x00,0x01,0x04,0x02,0x01,0x00,0x00,0x02,0x00,0x04,0x05,0x07,0x19,0x15,0x1b,0xb1,0x9c -,0x9d,0x94,0x8f,0x87,0x8a,0x81,0x80,0x8c,0x85,0x81,0x80,0x82,0x82,0x83,0x8a,0x87,0x84,0x85,0x85,0x8f,0x96,0x85,0x82,0x85,0x87,0x88,0x8b,0x8d,0x93,0x94,0x9d,0x8d -,0x9f,0x31,0x31,0x38,0x66,0x0f,0x09,0x04,0x02,0x07,0x03,0x02,0x01,0x00,0x01,0x00,0x0b,0x0f,0x0b,0x06,0x00,0x04,0x02,0x01,0x01,0x01,0x0b,0x03,0x08,0x0f,0x12,0x1b -,0x02,0x06,0x0c,0x16,0x1f,0x0a,0x1a,0x1b,0x15,0x2e,0x2f,0x85,0x82,0x83,0x8b,0x8f,0x80,0x8b,0x8a,0x88,0x86,0x80,0x82,0x80,0x80,0x80,0x81,0x89,0x82,0x81,0x81,0x80 -,0x84,0x82,0x86,0x85,0x83,0x86,0x80,0x82,0x82,0x83,0x89,0x80,0x91,0x98,0x8c,0x88,0x80,0x8a,0x82,0x91,0x90,0x9d,0x20,0xa2,0x5c,0x3f,0x11,0x07,0x0f,0x04,0x06,0x01 -,0x06,0x2c,0x07,0x0c,0x06,0x02,0x05,0x00,0x03,0x00,0x1d,0x17,0x03,0x07,0x03,0x06,0x01,0x01,0x04,0x02,0x02,0x01,0x03,0x05,0x00,0x04,0x00,0x1c,0x27,0x0d,0x16,0x01 -,0x10,0x01,0x05,0x0b,0x21,0x90,0x1d,0x1b,0x23,0x2b,0x24,0x0b,0x14,0x26,0xdb,0x38,0x1b,0xc3,0x1b,0x27,0x0d,0x54,0x80,0x8e,0x86,0xbf,0xa4,0xa1,0x2c,0x8d,0x8a,0x80 -,0x84,0x8c,0x8b,0x89,0x84,0x91,0x8f,0x85,0x84,0x83,0x89,0x84,0x8d,0x90,0x9a,0x92,0x80,0x84,0x80,0x8f,0x99,0x88,0x9e,0x8f,0x87,0x83,0x81,0x8e,0x8b,0x89,0x85,0xa6 -,0x76,0x8e,0x8f,0x88,0x96,0x95,0xac,0x9c,0xb3,0xbe,0x80,0x87,0x82,0xb1,0x3a,0x97,0xae,0x95,0x8d,0x83,0x85,0x92,0x90,0x90,0x87,0x99,0xc5,0x8e,0x99,0x8a,0xab,0x57 -,0x27,0x26,0x20,0x11,0x85,0x9c,0x5b,0x0c,0x00,0x0d,0x00,0x09,0x08,0x1c,0x1e,0x03,0x03,0x01,0x08,0x01,0x00,0x02,0x04,0x0b,0x00,0x00,0x00,0x00,0x01,0x00,0x18,0x0b -,0x03,0x04,0x00,0x03,0x00,0x03,0x00,0x08,0x0e,0x01,0x01,0x01,0x02,0x02,0x00,0x05,0x0b,0x10,0x03,0x01,0x00,0x03,0x04,0x07,0x98,0xbe,0x2c,0x09,0x03,0x15,0x0d,0x38 -,0x4d,0x8d,0x82,0x98,0x9f,0x93,0x88,0x8d,0x8e,0x82,0x81,0x80,0x84,0x85,0x84,0x81,0x82,0x82,0x80,0x80,0x80,0x89,0x84,0x81,0x82,0x80,0x81,0x80,0x80,0x80,0x83,0x82 -,0x80,0x83,0x84,0x80,0x81,0x80,0x89,0x96,0x8f,0x84,0x8b,0x87,0x80,0x83,0x85,0x29,0xaf,0x97,0xa7,0x96,0x9d,0x83,0x8b,0xec,0x20,0x19,0xd5,0x16,0x2a,0x4e,0xdc,0x3b -,0x02,0x05,0x00,0x10,0x06,0x16,0xa8,0x10,0x10,0x00,0x02,0x02,0x03,0x05,0x06,0x38,0x10,0x01,0x03,0x00,0x07,0x01,0x05,0x08,0x0b,0x0b,0x00,0x01,0x01,0x0c,0x05,0x2a -,0x5e,0x10,0x0d,0x00,0x09,0x04,0x0f,0x16,0x26,0x93,0x2f,0x14,0x0c,0x11,0x29,0x1a,0x46,0xb9,0x9c,0x3f,0x0a,0x0b,0x1e,0xac,0x5b,0x85,0x8a,0x8f,0x55,0x11,0xb2,0x48 -,0x92,0x8f,0x8a,0x82,0x91,0xb1,0x2e,0xa3,0x96,0xa2,0x8f,0x8f,0x89,0xa7,0x1f,0x1e,0xa6,0x97,0x95,0x80,0x8e,0x8c,0x29,0x20,0xc9,0xe9,0x8f,0x9b,0x89,0x86,0x9d,0x36 -,0x1e,0xb2,0xb1,0xba,0x9b,0xa7,0x9f,0x13,0x0d,0x0c,0x2e,0x3b,0xa1,0x86,0xaf,0xad,0x08,0x0e,0x14,0x1c,0xca,0x59,0x8c,0x96,0x23,0x14,0x17,0x5c,0x41,0xb5,0xa2,0xae -,0xb9,0x0d,0x0e,0x14,0xaf,0xc3,0x8a,0x89,0x98,0xab,0x0a,0x3e,0x48,0x9d,0x92,0x8f,0x83,0x8f,0xc3,0x34,0xd3,0x98,0x97,0x8b,0x8d,0x8d,0x9b,0x20,0x1e,0xcd,0x95,0xa5 -,0x84,0x8a,0x8f,0x48,0x0f,0xbb,0x7e,0x96,0x9b,0x8d,0x86,0xa9,0x26,0x12,0x3f,0xb5,0xba,0x9d,0xec,0x9d,0x1d,0x08,0x07,0x1b,0x30,0x1e,0x8b,0xa0,0xe8,0x0c,0x07,0x1b -,0x1a,0xba,0x3e,0x98,0x8f,0x28,0x17,0x11,0xca,0xa5,0xa8,0xa6,0x41,0xa7,0x0e,0x08,0x0a,0xee,0x34,0xb5,0x86,0xab,0xb5,0x08,0x11,0x21,0x31,0x9b,0xab,0x8a,0x92,0x2f -,0x1a,0x13,0xa0,0xa2,0x99,0xa7,0xbd,0xa1,0x0e,0x0e,0x0c,0xb7,0x2d,0x93,0x88,0xde,0xd1,0x06,0x17,0x1e,0x61,0x90,0x9e,0x87,0x98,0x23,0x15,0x0c,0xa7,0xaa,0x97,0xad -,0xe6,0xb7,0x0f,0x0c,0x0d,0xda,0x37,0x8b,0x8f,0xda,0x42,0x07,0x1b,0x1b,0xa8,0x95,0x99,0x86,0xa2,0x23,0x11,0x13,0x9b,0xa2,0x92,0xb3,0xc3,0xb9,0x0f,0x0d,0x0c,0xe2 -,0x4e,0x88,0x91,0xb2,0x30,0x08,0x27,0x23,0xa1,0xa1,0x93,0x86,0xae,0x27,0x0e,0x18,0x9b,0xa8,0x8f,0xc5,0xad,0x52,0x0f,0x13,0x0c,0xb3,0x3a,0x8a,0x90,0xc3,0x2f,0x06 -,0x2d,0x1e,0xb5,0x9c,0x91,0x85,0xd9,0x28,0x0e,0x1a,0x9a,0xad,0x92,0x7e,0xb3,0x6e,0x0f,0x18,0x0c,0xa8,0x3b,0x8f,0x8d,0x33,0x3d,0x04,0x2b,0x23,0xc1,0x98,0x9a,0x87 -,0xad,0x29,0x0d,0x16,0x99,0xa1,0x96,0xb1,0xaf,0xd8,0x0f,0x17,0x0f,0xa6,0x2d,0x95,0x8c,0x54,0xd5,0x04,0x20,0x1f,0xca,0x99,0xa6,0x87,0xa9,0x27,0x0e,0x1a,0x92,0xa5 -,0x99,0xab,0xc7,0x63,0x10,0x18,0x0f,0xb5,0x2a,0x9e,0x8b,0x44,0xca,0x07,0x20,0x25,0x47,0x9b,0xac,0x87,0x9d,0x2f,0x16,0x1c,0x9a,0xae,0x99,0xa9,0x49,0xb4,0x1c,0x22 -,0x11,0xc7,0x26,0xab,0x8c,0x40,0xbd,0x09,0x18,0x24,0x49,0x98,0xa8,0x8a,0x9d,0x35,0x1d,0x19,0x9d,0xa2,0x98,0xb7,0x31,0xb7,0x19,0x1c,0x10,0xbe,0x3e,0xae,0x8b,0x49 -,0xb4,0x0b,0x14,0x2d,0x35,0x98,0xba,0x8f,0xa0,0x24,0x1a,0x18,0x9c,0x9d,0x9e,0xc2,0x2a,0xdb,0x16,0x1a,0x15,0xc2,0x35,0xbd,0x8b,0xc8,0xad,0x0b,0x15,0x29,0x3e,0x99 -,0xc9,0x8d,0xa0,0x28,0x1b,0x16,0xa5,0xc3,0xa3,0xad,0x43,0xab,0x1c,0x2d,0x15,0x4b,0x34,0xb4,0x88,0xac,0x9f,0x0f,0x16,0x2f,0x35,0x97,0xae,0x8c,0x9c,0x2c,0x1f,0x10 -,0xac,0xae,0xa4,0xc8,0x24,0xad,0x2a,0x4c,0x1c,0xba,0x72,0xb5,0x8a,0xb1,0x9f,0x10,0x1c,0x69,0x2f,0x9d,0xbf,0x8e,0x9d,0x2f,0x23,0x11,0xa6,0xa5,0xab,0x58,0x24,0xac -,0x28,0x2c,0x1b,0xbf,0x2a,0xbf,0x8b,0xad,0x9f,0x0d,0x1d,0x3d,0x31,0xa1,0xe3,0x8d,0x9f,0x29,0x19,0x10,0xa2,0xad,0xa4,0xe2,0x2c,0xb3,0x19,0x23,0x16,0x35,0x19,0xa9 -,0x8b,0xb9,0xa6,0x0f,0x36,0x36,0xca,0xa3,0xaf,0x8b,0xa6,0x42,0x12,0x18,0xae,0xbf,0x9f,0x25,0x33,0xc5,0x22,0x36,0x19,0xcf,0x1e,0x97,0x92,0x7c,0xaf,0x0e,0x3d,0x2a -,0xc1,0xa9,0x9d,0x8b,0xaa,0x28,0x14,0x33,0x9e,0x9f,0x9d,0x2c,0x49,0x3a,0x1d,0x1c,0x20,0xb1,0x2c,0x8d,0xa0,0xb9,0x2c,0x09,0x25,0x1a,0xae,0xb4,0x92,0x8a,0xaf,0x25 -,0x0f,0xeb,0xa1,0xa0,0xaa,0x1e,0xc8,0x1f,0x1d,0x0f,0x24,0x3b,0x2d,0x8a,0xc8,0x9e,0x1a,0x19,0xdf,0x37,0x99,0xca,0x8e,0x97,0x37,0x14,0x0e,0xb7,0xad,0x99,0xbd,0x28 -,0xc1,0x21,0x37,0x13,0x3d,0x1d,0xa9,0x8d,0x42,0xb4,0x0d,0x4a,0x3b,0xbc,0x9c,0xac,0x86,0x9c,0x53,0x14,0x23,0x95,0x9d,0x93,0x2a,0x2a,0x2b,0x1a,0x26,0x1a,0xb7,0x27 -,0x8e,0x95,0xb1,0x3d,0x0a,0x3c,0x1b,0xa5,0xa3,0x97,0x88,0x46,0x1c,0x0a,0x3d,0x96,0x95,0x8f,0x29,0xcc,0x1e,0x1e,0x1a,0x21,0x6c,0x31,0x8b,0xc1,0xb2,0x14,0x0e,0x1d -,0x0e,0x9d,0xa6,0x87,0x8a,0x2b,0x10,0x09,0xb8,0xa6,0x93,0xa4,0x36,0xa3,0x1e,0x3f,0x1c,0xbb,0x27,0xb5,0x8e,0x2d,0xb8,0x0a,0x27,0x14,0x15,0xef,0x32,0x87,0x98,0x2b -,0x12,0x1a,0x93,0x99,0x8a,0xb4,0xe3,0xba,0x12,0x1f,0x0f,0xbd,0x55,0x8a,0x8e,0xa6,0xd4,0x0a,0x2d,0x12,0x3d,0x7d,0xa3,0x8d,0x1b,0x0e,0x07,0x1f,0x90,0x90,0x86,0xc6 -,0x48,0x1f,0x15,0x23,0x46,0x9c,0xab,0x86,0xa2,0x9f,0x20,0x0f,0x2a,0x1b,0xa4,0xb6,0x8a,0x8a,0x42,0x15,0x04,0x1a,0xbc,0xaa,0xab,0x14,0x66,0x1c,0x29,0x18,0x2e,0xbc -,0xaf,0x89,0x3a,0xaf,0x11,0x27,0x56,0xb4,0x8d,0x97,0x83,0x94,0x18,0x0a,0x0d,0xbf,0xac,0x96,0x9a,0x9c,0xac,0x0c,0x07,0x06,0x2a,0x3b,0x8c,0xaa,0x21,0x0e,0x0d,0xb3 -,0x34,0x94,0x8e,0x89,0x86,0xab,0x15,0x0b,0x18,0x9b,0x8b,0x87,0xa8,0xaa,0x20,0x0d,0x0b,0x1c,0x1b,0x27,0x87,0x8d,0x97,0x0e,0x0b,0x08,0x15,0xaa,0xa6,0x93,0x9b,0x3b -,0x3b,0x37,0xb9,0xa7,0x8f,0x94,0xc2,0xba,0x1f,0x09,0x02,0x31,0x93,0x80,0x89,0x93,0x1b,0x08,0x19,0x08,0x1b,0x21,0xc9,0x8b,0x90,0x3a,0x0b,0x15,0x1c,0x49,0x97,0xa1 -,0xa0,0x1b,0x13,0x0e,0xb3,0x9f,0x8f,0x83,0x8c,0x8e,0x0f,0x12,0x06,0x13,0x8f,0x88,0x86,0xa8,0x14,0x08,0x07,0x1d,0x12,0x3b,0xbb,0x99,0x8c,0xd8,0x18,0x0f,0xb6,0x65 -,0x8a,0x90,0x9c,0x1c,0x0c,0x36,0x27,0x91,0x92,0x8c,0x8e,0x9f,0x38,0x07,0x06,0x05,0x25,0x89,0x89,0x8d,0x1f,0x0d,0x04,0x0e,0x19,0xa1,0x8d,0x9d,0x99,0x1d,0x3a,0x1c -,0x2a,0x98,0x8b,0x81,0x94,0xc8,0x0c,0x0f,0xce,0xc4,0x9b,0xd4,0x99,0x37,0x18,0x08,0x04,0x0d,0x57,0x83,0x8a,0x8c,0x17,0x16,0x13,0x0d,0x2d,0xb2,0x8b,0x91,0xa5,0x41 -,0x29,0xb3,0x30,0xa3,0x9c,0x8d,0x95,0x19,0x09,0x02,0x12,0x34,0x86,0x8f,0x92,0x4d,0x0d,0x13,0x06,0x19,0x43,0x8d,0x85,0x96,0xc4,0x18,0x21,0x1c,0x1e,0xa8,0x8e,0x80 -,0x91,0x3b,0x17,0x1d,0x0a,0xc9,0x90,0x9e,0xad,0x0c,0x18,0x0c,0x12,0x14,0x39,0x89,0x93,0xa4,0x23,0x0f,0x1f,0x34,0x8d,0x94,0x88,0x8d,0x43,0x18,0x0e,0x13,0x1a,0x8d -,0x8f,0x8b,0x37,0x1f,0x14,0x08,0x12,0x1b,0x8f,0x8f,0xbd,0x1a,0x1e,0xaf,0x29,0x3e,0xb1,0x99,0x8c,0x9d,0x2d,0x0a,0x1c,0x29,0x8c,0x87,0x89,0xa3,0x17,0x32,0x09,0x0f -,0x14,0x2a,0x9a,0x9f,0x9b,0x36,0x63,0x20,0x0d,0x2c,0x2b,0x9b,0xb1,0x2b,0x10,0x37,0xaf,0x9d,0x88,0x91,0x8a,0x6d,0x5f,0x17,0x0a,0x16,0x38,0x89,0x8d,0x96,0xba,0x22 -,0x2e,0x0b,0x0e,0x17,0x5d,0x9e,0xc6,0x31,0x15,0x24,0x19,0x96,0x8f,0x8c,0x9d,0x1a,0x2f,0x1f,0x9f,0xa6,0x93,0x8f,0x9d,0xa0,0x1f,0x24,0x19,0x0d,0x21,0x2f,0x9d,0xb2 -,0x34,0x13,0x0d,0x17,0x17,0x9e,0xa5,0x9a,0xc8,0x9f,0xa9,0x26,0xc8,0xc5,0x8f,0x95,0x96,0xb5,0xad,0xa8,0x1e,0x25,0x1d,0x45,0xa9,0xdb,0x2e,0x0c,0x15,0x0b,0x26,0x91 -,0x9e,0x8f,0x32,0xb7,0x1f,0x16,0x29,0x2b,0x8f,0x9d,0x98,0xa3,0x9e,0x9d,0x34,0x22,0x2a,0xa1,0xb6,0x2e,0x19,0x10,0x27,0x1c,0xa4,0x99,0x95,0xa3,0x1b,0x3e,0x0f,0x22 -,0x19,0x34,0x9f,0x9f,0x92,0xf6,0x9f,0xe7,0x41,0xb9,0xd7,0x9a,0xa8,0xab,0x43,0x22,0x3d,0x14,0xac,0xa1,0xb6,0x5a,0x1a,0x6c,0x12,0x16,0x13,0x43,0x9c,0xa2,0xaa,0xbc -,0x9a,0xca,0x38,0x1f,0xbe,0x92,0x9a,0xa0,0x1f,0x2b,0x3b,0x1f,0x9e,0xa5,0x97,0x73,0x1f,0x3c,0x12,0x24,0x13,0x2d,0xab,0xb8,0xb3,0x3c,0xac,0xc7,0x60,0xb3,0xb9,0xaa -,0xbc,0x36,0x1f,0x42,0xb3,0x3a,0x9f,0x9d,0x9a,0xa9,0x3c,0x5f,0x24,0x2c,0x12,0x1f,0x5c,0x37,0x62,0x3c,0xac,0xa8,0xa9,0x5a,0x2e,0xa5,0xb8,0xb9,0x29,0x1b,0x30,0x28 -,0x9f,0x9f,0x9d,0xa9,0x3b,0xb9,0x37,0xdc,0x3f,0x4a,0xb6,0x31,0x46,0x33,0x31,0x49,0x2d,0x4f,0xc6,0xb4,0xcd,0x28,0x29,0x3c,0xb2,0xee,0xbc,0xbf,0xb4,0xb5,0x78,0x40 -,0x5e,0xad,0xae,0x9b,0xad,0xb1,0x69,0x26,0x31,0x3d,0xae,0xcd,0x1c,0x21,0x1e,0x6e,0x4b,0x31,0x57,0x3c,0xb9,0xcb,0x74,0xb3,0x4a,0xdf,0xb2,0xb0,0x9f,0xc9,0xac,0xc7 -,0xbb,0xbb,0x35,0x2f,0x5e,0xb5,0xa6,0xc0,0x2e,0x21,0x1c,0x28,0x36,0x56,0xcc,0x31,0x2b,0x43,0x3e,0xcc,0x3c,0xab,0xaf,0x95,0x9e,0x39,0x37,0x25,0xae,0x9e,0x9b,0xa6 -,0xa3,0xaf,0x28,0x1d,0x2c,0x37,0xc8,0x2a,0x22,0x29,0x1e,0x1f,0x1c,0x3c,0xc6,0xb2,0xc5,0xcd,0x5f,0xad,0xb6,0xb6,0xa4,0x9d,0x95,0xa7,0xa7,0xc6,0xbc,0xfe,0x2f,0xdc -,0xd4,0xdf,0xc8,0x28,0x23,0x19,0x13,0x18,0x15,0x3a,0x33,0xab,0x43,0x30,0xce,0x7a,0x9c,0x98,0x92,0x95,0x9c,0xa9,0xc2,0x3b,0xb4,0xa9,0xa9,0xae,0x38,0x2c,0x1d,0x19 -,0x18,0x1c,0x31,0x3a,0x4c,0x2d,0x1d,0x20,0x24,0x3e,0xa3,0xa5,0x9f,0xa2,0xa8,0xa5,0xb1,0xa7,0x9d,0x98,0xa1,0xce,0xe5,0x3b,0x2c,0x23,0x1a,0x39,0xe3,0xbd,0x2e,0x1a -,0x1a,0x1c,0x22,0x32,0xca,0xa3,0xb2,0x4a,0x3a,0x2e,0xb9,0xb0,0x99,0x9b,0x94,0x90,0xa3,0xb0,0x37,0x3f,0x66,0x49,0x58,0x53,0x48,0x26,0x18,0x1b,0x1f,0x29,0xc2,0x42 -,0x2c,0x28,0x1c,0x24,0x31,0xa4,0x9b,0x9e,0x95,0xa9,0xac,0xc8,0x5c,0xb0,0xb8,0x99,0x9f,0xa2,0xbb,0x1e,0x21,0x1d,0x21,0x43,0x34,0x47,0x32,0x31,0x2f,0x1a,0x32,0x57 -,0xbf,0xb0,0xbe,0x3d,0x2c,0x44,0xb1,0xb0,0x9f,0x96,0x98,0x93,0xb2,0x30,0x26,0x27,0x43,0xfd,0xb2,0xc0,0x55,0x2c,0x16,0x1a,0x2d,0x49,0xc9,0xc8,0xb4,0xd0,0x3d,0x43 -,0x29,0xb3,0xa2,0xa4,0xbc,0x31,0x39,0x1f,0x6c,0xc8,0x9f,0x97,0xa7,0xa3,0x3b,0x2b,0x22,0x1d,0x33,0x45,0xbd,0xa5,0xbc,0xbe,0xc4,0x5e,0x3d,0x23,0x4d,0x37,0x4f,0xc3 -,0x3b,0x33,0x32,0x54,0xb3,0xa4,0xa6,0xb7,0x26,0x2c,0x25,0x7b,0xaa,0xad,0xa4,0xb9,0xae,0x36,0x28,0x30,0x29,0xb3,0xa9,0x9f,0x9c,0xbb,0x36,0x26,0x30,0x33,0x47,0x56 -,0x4f,0x21,0x1c,0x1b,0x35,0xad,0xab,0xa8,0x5f,0xd5,0xef,0x30,0x2f,0x3b,0xa5,0x9f,0xa2,0x9a,0xa7,0x9f,0xd6,0x3c,0x38,0x2f,0xc0,0xc2,0xb0,0xcd,0x27,0x23,0x20,0x24 -,0x2c,0x2e,0x3c,0x3a,0x2d,0x23,0x26,0x6b,0xad,0xa8,0x9f,0xba,0xd8,0x54,0x3d,0xb2,0xaa,0x9c,0x98,0x9b,0x98,0xa6,0xbc,0x4a,0x2b,0x35,0x23,0x28,0x28,0x25,0x2a,0x1c -,0x21,0x27,0x2a,0x35,0x25,0x2d,0x3a,0x43,0x3e,0x53,0xb2,0x97,0x8e,0x94,0x9d,0xba,0xce,0xec,0xac,0x9d,0x9c,0xa6,0xe2,0xd1,0x40,0x25,0x1e,0x17,0x1b,0x24,0x26,0x21 -,0x1f,0x29,0x23,0x57,0x3f,0x60,0x6f,0x2d,0xd2,0x4e,0xa2,0x9f,0x99,0x95,0x9c,0x93,0x96,0x9a,0xc4,0x32,0x2e,0x30,0x3a,0x3f,0x29,0x38,0xe0,0x29,0x1c,0x16,0x1c,0x2c -,0x2e,0x31,0x33,0x37,0x5b,0x3a,0xb3,0xb1,0xa4,0xa1,0xc7,0xae,0xbe,0xa9,0xad,0xa2,0x96,0x97,0x9f,0xcf,0x28,0x24,0x2c,0x2c,0x4d,0x3b,0x2f,0x22,0x20,0x45,0x44,0x38 -,0x1e,0x1f,0x3e,0x31,0xbf,0xc5,0xb9,0xa9,0xae,0xa2,0xae,0xad,0xc3,0xe4,0xb5,0x5b,0xc9,0x55,0xbc,0xa5,0xb3,0xc1,0x3e,0x2e,0x2a,0x31,0x36,0x39,0x35,0x65,0xbe,0xac -,0xa9,0x5a,0x2f,0x25,0x36,0x42,0x54,0x67,0x37,0x47,0xbe,0xa6,0xa1,0xc6,0x2b,0x2b,0x4c,0xcd,0x57,0x6b,0x3c,0xb6,0xa3,0xa2,0xaa,0x57,0x36,0x28,0x68,0xb9,0xc7,0x3e -,0x5f,0x68,0xaa,0xa1,0xb2,0x42,0x24,0x34,0x29,0x2d,0x1f,0x1f,0x2b,0xc9,0xb0,0xca,0x4e,0x33,0x45,0x59,0xb9,0xcb,0xc2,0xa9,0xa1,0x98,0x9c,0xb2,0xd6,0xdc,0xab,0xaf -,0xf8,0x26,0x1c,0x44,0xb1,0xb4,0x3c,0x1b,0x15,0x1e,0xf3,0x4a,0x2d,0x1e,0x1f,0x3e,0xb8,0xa0,0xaf,0xb7,0xef,0xd5,0xa8,0xa6,0xa1,0xa6,0xab,0x97,0x98,0x9f,0xd0,0x1f -,0x29,0x3c,0x38,0x22,0x1c,0x21,0x67,0xc3,0xde,0x1d,0x19,0x2b,0x3b,0xbf,0x38,0x1a,0x1e,0x51,0x9b,0x98,0xa2,0xae,0x3e,0xad,0xa3,0x9f,0xa6,0x3d,0x46,0xae,0x97,0x9a -,0xc5,0x26,0x26,0xae,0x9f,0x67,0x17,0x16,0x24,0x56,0xc9,0x2f,0x2e,0x1f,0x26,0x28,0x35,0x38,0x1f,0x2a,0xcc,0xa2,0x99,0x98,0xa1,0xad,0xa1,0x9e,0xbc,0x2a,0x2c,0xae -,0x9f,0x9b,0xbe,0x3a,0x63,0xb9,0xa6,0x3a,0x17,0x0e,0x17,0x2c,0x38,0x4d,0x2e,0x2b,0x3a,0xb3,0x98,0xa4,0x31,0x18,0x29,0x9e,0x94,0x98,0xda,0x46,0xaf,0xa2,0xa7,0x2e -,0x1f,0x36,0xb3,0xa5,0xbf,0x5e,0x2c,0x20,0x2b,0x28,0x1e,0x0d,0x18,0xd1,0xa5,0xa0,0xae,0x9c,0x9e,0xbb,0xb7,0xbc,0xa6,0xba,0xaf,0x9b,0x9d,0xa8,0x54,0x5b,0x1c,0x33 -,0x93,0x68,0x03,0x00,0x0e,0x9c,0x5e,0x0d,0x0c,0x0d,0xa1,0x82,0x81,0x86,0xc6,0x9b,0x85,0xae,0x25,0x16,0xa3,0xbf,0xad,0x92,0x8d,0xbe,0x0f,0x15,0x5c,0x6f,0x49,0x4f -,0x10,0x1b,0x17,0x30,0x0e,0x01,0x15,0x2a,0x17,0xbb,0x96,0x85,0x89,0x8f,0x88,0x9c,0xa8,0x1c,0x5d,0x8f,0x9f,0xae,0x2c,0x39,0xbc,0xba,0x98,0x1c,0x06,0x0f,0x6f,0xa1 -,0x22,0x0c,0x0d,0x1c,0xa4,0xad,0x29,0xaa,0x97,0x9a,0xfb,0x11,0x18,0xd4,0xa3,0xbf,0x9a,0x83,0x86,0x96,0xb2,0xa8,0x9b,0x9e,0x3f,0x29,0xb3,0xaa,0xff,0x26,0x0a,0x00 -,0x01,0x0b,0x0d,0x0a,0x15,0x9a,0x8a,0x86,0x8f,0x48,0x9b,0x95,0x8c,0x97,0xa2,0x8e,0x90,0x95,0xb2,0xac,0x9b,0x16,0x02,0x06,0x2d,0x9e,0x48,0x22,0x15,0x1d,0x1f,0x21 -,0x2f,0x27,0x19,0xd1,0xa7,0xca,0x72,0xfb,0x8b,0xa5,0xd0,0xaf,0xad,0x90,0x9f,0x9f,0xa7,0x9e,0x9c,0xeb,0xbb,0xaa,0x9b,0xad,0x13,0x08,0x12,0x2c,0x0c,0x02,0x0c,0x7d -,0x53,0xa2,0xab,0xaf,0x94,0xba,0x98,0xdd,0x3e,0xb9,0xd7,0x95,0x92,0x8e,0x8e,0xa9,0x74,0x24,0x3d,0xc1,0x4d,0x74,0x33,0xbd,0x9f,0xc1,0x11,0x07,0x04,0x08,0x03,0x1e -,0x7b,0xb4,0x8e,0xad,0x90,0xa9,0xbd,0x9d,0xbd,0x8d,0x8b,0x8e,0x8f,0x96,0x8b,0x9d,0x3c,0x14,0x06,0x0b,0x0e,0x28,0x36,0x1f,0x11,0x0e,0x17,0x2a,0x0b,0x29,0x8a,0x8f -,0x8c,0x50,0x9f,0x9b,0x53,0xae,0x20,0x99,0x8f,0xae,0x37,0x1f,0xa6,0x9a,0xb6,0x1a,0x0e,0x9c,0x8b,0x8f,0xac,0x29,0x19,0x0b,0x06,0x06,0x04,0x1c,0x8f,0x9a,0xa8,0x1f -,0xad,0x94,0x3c,0x24,0x1b,0x9e,0x86,0x88,0x85,0x8a,0x94,0xc1,0x15,0x10,0x11,0x3f,0x4b,0x2b,0x30,0xb9,0xb6,0x1f,0x0a,0x04,0x06,0x07,0x9a,0x8d,0x8a,0x99,0x24,0xa5 -,0x39,0x2f,0x3c,0xb6,0x8a,0x8c,0x90,0x8e,0x9c,0x97,0xc1,0x3a,0x35,0x2e,0xc2,0x27,0x1e,0x17,0x0b,0x09,0x09,0x0c,0x1f,0x0b,0x26,0x98,0x8d,0x89,0x40,0xab,0xa6,0xac -,0x9f,0xb5,0x8d,0x84,0x94,0xa8,0x30,0x39,0x5b,0x1b,0x19,0x0a,0x1f,0x9e,0x93,0x9b,0x31,0x1d,0x13,0x0e,0x11,0x0f,0x16,0x95,0x91,0x91,0x2e,0x0f,0xd8,0x30,0x25,0x19 -,0xca,0x84,0x84,0x8d,0x9c,0x9f,0x92,0xa7,0x7b,0x51,0x26,0x55,0x1f,0x17,0x19,0x1e,0x24,0x0f,0x06,0x0a,0x07,0x16,0x98,0x98,0x8f,0xbe,0x9d,0x89,0x94,0xa9,0x2b,0xaf -,0x93,0x9e,0xa1,0x99,0x9e,0xaa,0x1c,0x22,0x37,0x3a,0xaf,0x27,0x2f,0x28,0x2b,0x1e,0x0d,0x0d,0x12,0x0e,0x15,0x9d,0x97,0x92,0x47,0x2e,0x9c,0x9c,0x9d,0xc8,0xae,0x8c -,0x8f,0x92,0x95,0xa6,0xa5,0x1e,0x11,0x0a,0x0f,0xae,0xe9,0xc8,0x2e,0x2e,0x37,0x1a,0x12,0x11,0x0c,0x1b,0x8c,0x8a,0x89,0xaf,0x2f,0xdb,0x1a,0x15,0x16,0x47,0x8e,0x8c -,0x8e,0x93,0x9b,0x99,0x39,0x2d,0x27,0xf0,0x95,0xa8,0xcc,0x33,0x28,0x13,0x08,0x06,0x0c,0x09,0x06,0xb7,0x95,0x88,0x8f,0xa3,0x95,0xbd,0x45,0x42,0xb8,0x8a,0x8a,0x8e -,0xab,0x2a,0xb4,0x2e,0x18,0x0e,0x16,0xb5,0xae,0xd9,0x44,0x21,0x1a,0x0b,0x14,0x29,0x32,0x17,0xae,0x8b,0x95,0xa6,0x20,0x51,0xc7,0x5c,0xd1,0xaf,0x8f,0x8a,0x97,0xa7 -,0x4b,0xab,0xa7,0x24,0x15,0x22,0xb1,0xab,0x2d,0x34,0x28,0x1f,0x0e,0x0b,0x14,0x1d,0x2a,0x2b,0x92,0x8e,0x8a,0x98,0xbd,0xc5,0x1e,0x1d,0x20,0xbe,0x89,0x8a,0x9a,0xf4 -,0x2e,0xa9,0x4c,0x2e,0x2e,0x5e,0xb3,0x5e,0xb7,0xaf,0x25,0x17,0x07,0x09,0x08,0x13,0x17,0x1a,0x8f,0x90,0x8a,0x9f,0xa0,0x8e,0xa9,0x38,0x27,0x9d,0x84,0x89,0x94,0xb9 -,0x36,0x23,0x0b,0x13,0x16,0x2b,0x4e,0x21,0x27,0x26,0x39,0x29,0x15,0x22,0x2a,0xc2,0x51,0x59,0x8b,0x93,0x96,0xe7,0x27,0xa2,0x42,0xd8,0x39,0x63,0x94,0x9e,0xa1,0x58 -,0x31,0xb0,0xe9,0xcd,0x64,0xba,0xa9,0x30,0x1d,0x0d,0x0e,0x11,0x16,0x22,0x22,0x30,0xb3,0x5a,0xb6,0x94,0x94,0x93,0xc7,0xcc,0xa4,0xa7,0xbd,0x4d,0xa8,0x94,0xa7,0x55 -,0x2b,0x3a,0xa8,0xb7,0xd3,0x27,0x25,0x39,0x2b,0x2d,0x23,0x2a,0x1e,0x15,0x1b,0x36,0xb2,0x3d,0x2e,0x25,0x9f,0x92,0x8e,0x93,0xb9,0xa7,0xab,0x64,0x33,0x4a,0x91,0x94 -,0xd4,0x30,0x1c,0x2d,0x17,0x10,0x13,0x18,0x3c,0xbb,0xa8,0xb0,0xe2,0xa8,0xb9,0xcc,0xbd,0xc5,0xac,0x27,0x29,0x1e,0xad,0x94,0xb7,0x61,0x19,0x23,0x4c,0x70,0xbf,0xea -,0x92,0x8c,0xa2,0xac,0x4f,0xbc,0x5e,0x1a,0x1a,0x1b,0x33,0x43,0x44,0x45,0x2a,0x30,0xc7,0x44,0x3f,0x53,0xb7,0x51,0x39,0xab,0xae,0x8a,0x8f,0xa3,0xbd,0x17,0x2c,0x21 -,0x12,0x14,0x1d,0x9e,0xa1,0x4b,0x2c,0x2a,0xae,0xf6,0x4e,0x4c,0xdb,0x9b,0x9a,0x9b,0xa2,0xae,0xc9,0x2f,0x28,0x24,0x3d,0xfc,0x28,0x1f,0x27,0x2b,0x9f,0x96,0xa1,0x37 -,0x13,0x29,0x27,0x1b,0x1c,0x2f,0x9c,0x97,0xab,0xb3,0xa9,0xa2,0xa9,0xb0,0xda,0x53,0x9d,0x9a,0x9e,0xb4,0xdb,0x59,0x1f,0x1c,0x19,0x1b,0x1c,0x23,0x27,0x2b,0x1f,0x3b -,0x98,0x9f,0xc2,0x2c,0x4a,0xb3,0x31,0x28,0x2b,0xb7,0x99,0xa0,0xa3,0x3e,0x29,0x7d,0x47,0xbb,0xa9,0x9b,0x92,0x98,0x99,0x9f,0x9f,0x52,0x23,0x1a,0x14,0x16,0x16,0x11 -,0x0b,0x09,0x10,0xa5,0xa3,0xac,0x3f,0x37,0x9f,0xa2,0x9a,0x9b,0x9b,0x8b,0x8c,0x95,0xd3,0x4a,0xb0,0x24,0x1f,0x19,0x32,0xa3,0xb7,0xae,0x36,0x27,0x22,0x19,0x1e,0x17 -,0x2b,0xdc,0x5b,0x23,0x15,0x1a,0xb6,0x97,0xa8,0x3e,0x20,0xc1,0x9c,0xa9,0xb1,0xae,0x8f,0x8b,0xa0,0xcb,0x3a,0xb2,0xaa,0x47,0x36,0x21,0x3c,0xb5,0xc2,0x29,0x16,0x1c -,0x23,0x2d,0x25,0x23,0xe3,0xf0,0x2b,0x2a,0x1a,0x74,0x98,0x98,0x9c,0x36,0xbb,0xa8,0xb6,0xaf,0xb1,0x94,0x96,0xa1,0xaa,0x5a,0xb6,0x4a,0x2f,0x1e,0x11,0x25,0x34,0x52 -,0x1f,0x17,0x27,0x22,0x35,0x2e,0x51,0xad,0xa9,0x9e,0xa6,0x4e,0xac,0x93,0x98,0x9e,0x33,0x57,0xbf,0x28,0x26,0x1e,0xc6,0xca,0x3c,0x44,0x29,0xbc,0xbd,0xd2,0xc2,0xd5 -,0x99,0x99,0xa5,0xf9,0x21,0x2f,0x24,0x23,0x31,0x28,0x33,0x3b,0xd3,0x5e,0x1d,0xc9,0x9f,0x9b,0xa5,0x3b,0xa8,0xa4,0xbf,0x37,0x20,0xde,0x6b,0x2c,0x1f,0x1b,0xb2,0xad -,0x4a,0x22,0x2e,0x9c,0x93,0x99,0x4f,0x3f,0xb1,0xae,0xb3,0x4b,0x35,0x49,0x3a,0x2c,0x12,0x0f,0xd9,0xa2,0xa2,0x3c,0x25,0xb6,0xbb,0xc7,0x29,0x2a,0xb8,0xe7,0xbd,0x40 -,0xb6,0x9b,0xac,0xec,0x23,0xbf,0x8f,0x93,0x99,0xb9,0xc8,0xbc,0x54,0x3f,0x2c,0x38,0x2a,0x1c,0x15,0x08,0x0e,0x3f,0xb7,0xbd,0x1a,0x29,0xc0,0xaa,0xa1,0xc2,0xa2,0x99 -,0x99,0x9a,0xa4,0x9b,0x98,0xaf,0x33,0x1c,0xc1,0xa7,0x61,0x24,0x1c,0x3b,0x64,0x38,0x2c,0x28,0xc8,0xb4,0xe1,0x1e,0x0b,0x2a,0xc1,0xb4,0x3a,0x1e,0xb8,0xc1,0x45,0x32 -,0x3a,0x9e,0x9f,0xa2,0x9f,0x9f,0x8d,0x96,0x9e,0xa7,0xa1,0x92,0xa6,0x2c,0x18,0x19,0x22,0x16,0x12,0x0d,0x0f,0x19,0x1b,0x1e,0x0c,0x2b,0xa5,0x9a,0x9a,0xf5,0x9a,0x99 -,0x9d,0xa5,0xcd,0x96,0x9e,0xab,0xac,0xaf,0x92,0xa4,0xc8,0x2f,0x3e,0x9d,0xa7,0x2b,0x0e,0x13,0x20,0x1c,0x18,0x12,0x21,0x39,0x2e,0x27,0x1a,0xb9,0x9d,0x9f,0xb3,0x3d -,0xa8,0x9e,0x9e,0xa3,0xa4,0x96,0x9c,0xbd,0x4e,0x34,0xad,0xbf,0x55,0x38,0x35,0xa2,0x99,0xa9,0x27,0x16,0x24,0x26,0x20,0x15,0x15,0x22,0x1d,0x21,0x11,0x2b,0xde,0x6d -,0xcb,0x39,0x99,0x97,0x96,0x95,0x98,0x87,0x89,0x92,0xb4,0x2f,0xc3,0x2e,0x20,0x15,0x16,0x2c,0x41,0x33,0x18,0x0d,0x1a,0x28,0x2b,0x19,0x1a,0xd1,0xa6,0x98,0xa8,0x91 -,0x8c,0x93,0xa1,0x39,0x58,0x57,0x39,0x2a,0x2a,0xa4,0x99,0x9e,0xad,0x1e,0x25,0x22,0x33,0x57,0x2c,0xa6,0xa1,0xa4,0x49,0x0d,0x0e,0x1c,0xb3,0xc4,0x18,0x0c,0x0b,0xae -,0x8e,0x85,0x88,0x95,0xa4,0x15,0x1c,0x31,0xa6,0x9c,0x7d,0x68,0x2e,0x7b,0x90,0x90,0xa1,0xaa,0x21,0x1c,0x0c,0x0a,0x1e,0x1b,0x22,0x14,0x06,0x0c,0xb6,0x80,0x8e,0xb0 -,0x6a,0x0f,0x36,0x95,0x80,0x86,0x89,0x82,0x9a,0x04,0x0e,0x9a,0xeb,0x1c,0x10,0x09,0x06,0x03,0x03,0x13,0x4c,0x87,0x95,0x11,0x0b,0x25,0x9a,0x96,0x92,0xa8,0xaf,0x39 -,0x1e,0x9c,0x8b,0x8d,0x99,0x97,0x87,0x8a,0x90,0x9c,0x89,0x8b,0x8a,0xae,0x08,0x09,0x1d,0x8d,0x3e,0x00,0x00,0x00,0x01,0x0d,0x09,0x18,0x8b,0x89,0x96,0xab,0xa9,0x8e -,0x81,0x8e,0x29,0x10,0x13,0x9e,0x9d,0x8b,0x80,0x81,0x8c,0x46,0x1c,0xdd,0x8f,0xa4,0x09,0x06,0x1f,0x98,0x88,0xcc,0xdd,0x9a,0x7c,0x06,0x00,0x00,0x0a,0xcc,0x36,0x0a -,0x07,0x2f,0x8e,0x99,0xad,0x91,0x90,0xb3,0x13,0x17,0x8e,0x80,0x82,0x9a,0x1f,0xaa,0x8a,0x87,0xa9,0xa3,0x93,0x9d,0x44,0x09,0x0d,0x9e,0x88,0x9d,0x0e,0x16,0x9b,0xa4 -,0x1d,0x08,0x06,0x08,0x01,0x00,0x00,0x08,0xbd,0x25,0x08,0x0a,0x9c,0x82,0x81,0x87,0x8c,0x83,0x84,0x8c,0xa3,0x8f,0x82,0x80,0x86,0xc5,0x20,0xa6,0x41,0x1c,0x23,0x2b -,0x24,0x0d,0x07,0x07,0x23,0xe7,0x0c,0x01,0x00,0x09,0x0b,0x03,0x01,0x0c,0xad,0xab,0x31,0x1f,0x99,0x82,0x8a,0x9b,0xa1,0x88,0x80,0x81,0x80,0x82,0x80,0x88,0xad,0x2b -,0xbf,0x8f,0x9b,0x15,0x03,0x04,0x0f,0x16,0x05,0x06,0x07,0x06,0x01,0x02,0x00,0x0d,0x8f,0xa3,0x18,0x16,0xad,0x94,0x9c,0x9b,0x99,0x8f,0x89,0x8f,0x98,0x89,0x84,0x8a -,0x5b,0x2b,0xa1,0x8e,0x8b,0x90,0x99,0x9f,0xa0,0x43,0x17,0x25,0xb0,0xaf,0x1e,0x0c,0x0c,0x0f,0x2f,0xca,0x2f,0x0f,0x05,0x04,0x01,0x03,0x0e,0x35,0xc7,0x2e,0xf8,0x91 -,0x91,0x99,0x9f,0x96,0x98,0xa8,0x45,0xbc,0x8a,0x82,0x87,0x90,0x93,0x8d,0x89,0x90,0x9f,0xbd,0xa7,0x3d,0x43,0xa3,0x9d,0x95,0xc4,0x12,0x06,0x06,0x06,0x02,0x02,0x07 -,0x0a,0x0f,0x07,0x03,0x04,0x17,0xab,0xa6,0xa9,0x9b,0x85,0x83,0x8d,0x92,0x89,0x82,0x85,0xa1,0x54,0x99,0x8a,0x9d,0xcd,0x9b,0x8a,0x84,0x94,0x43,0x26,0x3b,0x26,0x09 -,0x04,0x0c,0x29,0x62,0x12,0x09,0x09,0x17,0x22,0x11,0x09,0x12,0xd9,0x46,0x18,0x09,0x22,0x98,0xa2,0x37,0x21,0xa0,0x9d,0x37,0x41,0x94,0x87,0x86,0x91,0x78,0x9a,0x88 -,0x89,0xa0,0xa7,0x88,0x81,0x85,0x8f,0x9a,0x9e,0xac,0x29,0x0a,0x05,0x0d,0x13,0x09,0x07,0x07,0x0b,0x13,0x0b,0x08,0x06,0x0a,0x0a,0x05,0x05,0x1a,0x97,0x92,0x95,0x9a -,0x8f,0x8b,0x94,0x9a,0xa4,0x8d,0x83,0x84,0x83,0x83,0x83,0x85,0x8f,0x98,0x9a,0xaa,0xca,0x27,0x27,0x1c,0x0f,0x0c,0x06,0x0c,0x0c,0x05,0x02,0x03,0x04,0x0b,0x20,0x36 -,0x37,0x2e,0x33,0x76,0x4b,0x22,0x25,0x57,0xba,0xb6,0xa7,0x8a,0x86,0x88,0x91,0x9f,0x91,0x8e,0x93,0x9c,0x95,0x8b,0x9c,0xba,0xad,0x9b,0x90,0xb0,0x35,0x1e,0x19,0x1d -,0x2e,0xb4,0xb4,0x2f,0x0e,0x0a,0x10,0x1a,0x27,0x1d,0x0e,0x0a,0x0b,0x12,0x0f,0x11,0x15,0x1a,0x1c,0x1b,0x21,0x37,0xa5,0x90,0x94,0x9f,0x8d,0x87,0x87,0x89,0x8a,0x86 -,0x8a,0xa5,0xb2,0x8f,0x84,0x84,0x90,0xc9,0x1c,0x15,0x1a,0x14,0x0f,0x11,0x15,0x21,0x17,0x16,0x35,0xcc,0x3b,0x19,0x09,0x06,0x07,0x0b,0x0d,0x0a,0x17,0x29,0x2f,0x19 -,0x21,0xa2,0x9e,0xdc,0x2e,0xa3,0x92,0x8b,0x8e,0x9f,0x8b,0x85,0x8b,0x8d,0x88,0x83,0x81,0x83,0x89,0x97,0xad,0xf8,0x25,0x1b,0x16,0x20,0x0d,0x01,0x08,0x26,0x63,0x1d -,0x08,0x04,0x08,0x0f,0x0e,0x08,0x09,0x0e,0x12,0x0a,0x11,0x3a,0x98,0x92,0x93,0x94,0x96,0x8e,0x92,0x95,0x8d,0x88,0x8c,0x9d,0xa5,0x92,0x87,0x82,0x87,0x95,0xaa,0x9c -,0x97,0x9e,0x3f,0x22,0x2c,0x1c,0x0b,0x09,0x1a,0x32,0x1c,0x0d,0x0d,0x16,0x16,0x0f,0x0d,0x12,0x20,0x13,0x05,0x05,0x17,0xaa,0xcb,0x2f,0x2a,0xb5,0x93,0x99,0x9d,0xa2 -,0xa9,0xa6,0xa8,0xaf,0x95,0x86,0x84,0x89,0x8d,0x92,0x8b,0x8b,0x8f,0x8d,0x97,0x99,0xbf,0x2b,0x33,0x9f,0x91,0x31,0x0b,0x04,0x0b,0x0e,0x06,0x04,0x04,0x09,0x08,0x05 -,0x08,0x1b,0xa9,0x36,0x1a,0x1c,0x32,0xad,0xa1,0x95,0x9c,0x96,0x97,0xb5,0xb3,0x94,0x86,0x89,0x97,0xb3,0xc4,0xa9,0x9e,0x96,0x9b,0xa8,0x97,0x97,0xab,0xa1,0x89,0x84 -,0x88,0x98,0x5b,0x4b,0x3b,0x29,0x16,0x16,0x1c,0x0c,0x04,0x02,0x09,0x19,0x0d,0x06,0x04,0x05,0x0b,0x0e,0x0f,0x12,0x34,0x2d,0x1e,0x40,0xb1,0x90,0x8f,0x91,0x8e,0x8c -,0x8a,0x8f,0x87,0x83,0x81,0x81,0x87,0x8d,0x8a,0x85,0x86,0x8f,0xbb,0x2c,0xdd,0x41,0x14,0x0d,0x0e,0x12,0x09,0x04,0x02,0x0a,0x1f,0x0e,0x06,0x06,0x08,0x09,0x04,0x06 -,0x0d,0x2a,0x29,0x11,0x0f,0xcb,0x8b,0x8e,0xa2,0xb6,0x9b,0x8d,0x8d,0x95,0x92,0x8c,0x8c,0x8e,0x8a,0x84,0x81,0x81,0x84,0x8d,0x93,0x8c,0x93,0xa3,0xb8,0xb2,0xcd,0x14 -,0x05,0x08,0x29,0xb5,0x15,0x04,0x01,0x06,0x0a,0x05,0x02,0x03,0x09,0x09,0x05,0x05,0x14,0xc5,0xe1,0x2c,0x23,0xae,0x94,0x92,0x97,0x94,0x8b,0x8b,0x88,0x87,0x83,0x80 -,0x82,0x86,0x96,0x99,0x8b,0x8a,0x8f,0xa6,0xae,0xbe,0x45,0x28,0x1c,0x3e,0x5f,0x1c,0x0a,0x0a,0x0c,0x0a,0x07,0x06,0x0a,0x0f,0x0d,0x08,0x07,0x0f,0x15,0x0e,0x0c,0x0b -,0x15,0x1a,0x1b,0x26,0x4d,0xc4,0xa1,0x97,0x94,0x8a,0x85,0x86,0x87,0x89,0x88,0x86,0x85,0x85,0x87,0x86,0x84,0x87,0x8d,0x8a,0x86,0x8b,0x9d,0x26,0x0d,0x0a,0x08,0x06 -,0x03,0x02,0x03,0x02,0x01,0x02,0x08,0x0a,0x09,0x09,0x07,0x0b,0x12,0x15,0x14,0x15,0x37,0xb5,0xa8,0x95,0x88,0x84,0x85,0x87,0x8c,0x8d,0x88,0x86,0x87,0x8b,0x8f,0x8d -,0x92,0x8d,0x86,0x85,0x89,0x8e,0x95,0xae,0x47,0x20,0x13,0x14,0x10,0x0b,0x06,0x06,0x0d,0x0f,0x0c,0x09,0x07,0x08,0x08,0x09,0x0c,0x0c,0x0a,0x0e,0x12,0x29,0xbf,0xbe -,0xb6,0x5b,0xbb,0xa1,0x96,0x8c,0x8c,0x89,0x87,0x89,0x92,0x8d,0x84,0x82,0x84,0x86,0x8a,0x90,0x94,0x9e,0x3a,0x1d,0x16,0x14,0x16,0x12,0x22,0x47,0x47,0x33,0x1a,0x12 -,0x1a,0x22,0x1b,0x0f,0x0a,0x0b,0x0c,0x13,0x24,0x27,0x27,0x2b,0x16,0x0b,0x0f,0x15,0x1c,0x1c,0x12,0x22,0xaf,0xa1,0x96,0x8d,0x88,0x89,0x8b,0x92,0x95,0x8d,0x8d,0x91 -,0x9e,0xa2,0x8f,0x86,0x83,0x89,0x8d,0x8c,0x8e,0x9e,0xc9,0x28,0x14,0x0e,0x0a,0x09,0x0b,0x0f,0x0b,0x05,0x02,0x06,0x1a,0x22,0x0e,0x07,0x05,0x0a,0x1b,0x4b,0xbc,0xb9 -,0xc3,0x40,0xd8,0xa3,0x9b,0x94,0x96,0xae,0xec,0x9e,0x8c,0x89,0x8a,0x98,0xa4,0x96,0x8c,0x87,0x87,0x89,0x8c,0xa4,0xef,0xa8,0x8e,0x89,0x8f,0x31,0x0a,0x0d,0x29,0xa9 -,0x4c,0x17,0x0c,0x09,0x06,0x0d,0x1f,0x24,0x10,0x03,0x00,0x03,0x15,0x55,0x23,0x0f,0x0a,0x0e,0x2b,0xa7,0x93,0x8f,0x97,0x68,0x2a,0x9f,0x86,0x83,0x89,0x93,0x9a,0x8d -,0x88,0x86,0x82,0x86,0x99,0x74,0xb7,0x90,0x8d,0x95,0xa6,0x2b,0x1e,0x21,0x31,0x3a,0x16,0x09,0x04,0x0b,0x19,0x14,0x09,0x04,0x07,0x0c,0x10,0x12,0x12,0x0f,0x08,0x07 -,0x15,0xca,0x99,0xa7,0x24,0x19,0x40,0x93,0x85,0x82,0x86,0xa1,0x27,0xb6,0x89,0x82,0x83,0x91,0x3b,0x1f,0xb4,0x85,0x81,0x80,0x9a,0x0f,0x16,0xa1,0x87,0x86,0x97,0x1c -,0x0c,0x0b,0x1b,0xab,0x9d,0x26,0x04,0x01,0x00,0x09,0x1d,0x1a,0x07,0x00,0x01,0x02,0x14,0x9a,0x9e,0x18,0x07,0x08,0x1b,0x9d,0x87,0x8f,0xa9,0xc3,0x91,0x80,0x81,0x80 -,0x85,0x94,0x92,0x89,0x84,0x81,0x85,0x95,0xad,0xa3,0x91,0x88,0x8c,0x3f,0x0c,0x0a,0x0e,0x0d,0x07,0x06,0x04,0x03,0x04,0x08,0x0d,0x14,0x0a,0x01,0x01,0x04,0x15,0xad -,0xcd,0x0d,0x09,0x18,0x9c,0x86,0x81,0x86,0x9c,0xcb,0xa4,0x86,0x81,0x82,0x88,0x9c,0xa0,0x89,0x80,0x80,0x83,0xae,0x0c,0x1f,0x5a,0x98,0x5d,0x16,0x0b,0x00,0x0a,0x08 -,0x9c,0x2d,0x0a,0x0c,0x00,0x0a,0x0f,0x06,0x16,0x42,0x4a,0x9f,0x80,0x83,0x88,0x80,0x2e,0xac,0x87,0x95,0x80,0x82,0x80,0x85,0x53,0x17,0x8e,0x8d,0x0f,0x00,0x00,0x00 -,0x04,0x03,0x03,0x00,0x09,0x5a,0x0f,0x10,0x19,0x03,0x03,0x0f,0x09,0x10,0xa1,0x8c,0x81,0x84,0x8f,0x96,0x8b,0x82,0x80,0x91,0xa2,0x83,0x80,0x80,0x81,0x84,0x87,0x92 -,0x93,0x9e,0x12,0x12,0x0b,0x02,0x00,0x02,0x09,0x1a,0x37,0x09,0x06,0x0a,0x21,0x9d,0x8d,0x55,0x0b,0x01,0x03,0x2b,0x0d,0x09,0x10,0x18,0x22,0x57,0xa5,0xaa,0x97,0xbc -,0xa4,0xad,0xa7,0x8a,0x87,0x88,0x83,0x92,0x6e,0x20,0x69,0xbe,0x0d,0x0f,0x11,0x98,0x9a,0x99,0x80,0x81,0x80,0x85,0x97,0x92,0xa8,0x12,0x15,0x0e,0xc4,0x8b,0x27,0x19 -,0x1b,0x1e,0x2b,0x02,0x02,0x00,0x00,0x02,0x08,0xdf,0xd4,0xb3,0x94,0x9d,0x3a,0x05,0x04,0x0b,0x10,0x1a,0x05,0x36,0x81,0x81,0x81,0xa0,0x1b,0xaa,0x32,0x98,0x82,0x85 -,0x80,0x82,0x80,0x82,0x80,0x83,0x85,0x8f,0x23,0x07,0x0d,0x35,0x1e,0x10,0x0d,0x09,0x02,0x01,0x00,0x00,0x00,0x09,0x02,0x01,0x00,0x21,0xbe,0x1d,0x09,0x01,0x0d,0x18 -,0x23,0xa7,0x87,0x82,0x80,0x85,0x83,0x82,0x81,0x80,0x81,0x81,0x83,0x85,0x81,0x82,0x89,0x9b,0x9b,0x1c,0x06,0x00,0x11,0x10,0x17,0x0b,0x00,0x03,0x06,0x86,0x99,0x37 -,0x0e,0x00,0x04,0x04,0x04,0xa3,0x8e,0x8f,0x28,0x01,0x02,0x0d,0x8d,0x8d,0x7a,0x12,0x09,0x27,0x80,0x85,0x80,0x8e,0x16,0x21,0xaa,0x96,0x8c,0x80,0x8a,0x2c,0x0a,0x37 -,0x85,0x80,0x84,0x45,0x04,0x00,0x12,0xb7,0xaa,0x8f,0x95,0x9f,0x13,0x04,0x33,0x1f,0x1d,0x13,0x00,0x03,0x06,0x96,0x83,0x8e,0x9e,0x08,0x17,0x1d,0x1b,0x8c,0xa9,0xe5 -,0xbd,0x09,0x07,0x1c,0x8a,0x81,0x8a,0xd6,0x13,0x0b,0x12,0x18,0xc9,0x97,0x1b,0xdf,0x0b,0x1a,0x10,0x15,0x91,0x8e,0xa1,0x13,0xc2,0x87,0x81,0x93,0xad,0xaf,0x8e,0x6d -,0x0c,0x91,0x80,0x83,0x8b,0x40,0x14,0x09,0x95,0x80,0x91,0x21,0x05,0x00,0x0a,0x07,0xb7,0x8d,0x96,0x9c,0x00,0x04,0x01,0x3a,0x9b,0x0a,0x00,0x03,0x0f,0x49,0x89,0x87 -,0x9f,0x11,0x05,0x06,0x1c,0x8c,0x84,0x82,0x8a,0x16,0x34,0x87,0x82,0x80,0x81,0x8d,0x43,0x2d,0x9b,0xaf,0x87,0x82,0x80,0x92,0x11,0x09,0x1a,0x9d,0xc2,0x18,0x00,0x05 -,0x00,0x13,0x1b,0x0c,0x03,0x00,0x01,0x01,0x02,0x3f,0xa7,0x1e,0x0c,0x0d,0x10,0x26,0x80,0x8c,0x8c,0x49,0x20,0x89,0x87,0x84,0x80,0x81,0x80,0x86,0xcd,0x0b,0xbb,0x87 -,0x85,0x8a,0xdb,0x22,0x2c,0x9a,0x2f,0x9a,0xad,0x09,0x04,0x00,0x0c,0xc2,0xb7,0x13,0x01,0x05,0x00,0xb9,0x93,0x99,0x99,0x00,0x04,0x02,0x0b,0x8e,0x82,0x84,0x8f,0x0c -,0x02,0x0c,0x8b,0x80,0x85,0x87,0xaa,0xc0,0x94,0x86,0x94,0x89,0xae,0x0e,0x0b,0x14,0xae,0x8a,0x90,0x2a,0x14,0x00,0x0e,0x9a,0x87,0x9a,0x00,0x04,0x07,0x08,0x7a,0x97 -,0x81,0x85,0x32,0x08,0x09,0x0a,0x8e,0x86,0x82,0x93,0x8e,0x89,0xb8,0x88,0x8c,0x80,0xc5,0x16,0x25,0x04,0x0c,0x07,0x16,0x21,0x00,0x0f,0x18,0x09,0x14,0x09,0x07,0x19 -,0x26,0xbd,0x8e,0x83,0x86,0x9b,0x10,0x04,0x0f,0x2f,0xa6,0x85,0x84,0x81,0x95,0x1a,0x16,0x89,0x80,0x8b,0x8f,0x4f,0x27,0x29,0x97,0x8f,0x82,0xa4,0x8a,0xbf,0x10,0xbc -,0xdc,0xba,0x0b,0x04,0x13,0x2e,0xab,0x4f,0x0f,0x0c,0x00,0x04,0x03,0x0a,0x1b,0x9b,0x36,0x02,0x02,0x01,0x09,0x3e,0x9b,0x41,0x1a,0x08,0x1f,0xa4,0x8b,0x80,0x84,0x80 -,0x8e,0x8d,0x9d,0xa4,0x81,0x87,0x8c,0x92,0x8c,0x89,0x8a,0x95,0x99,0x27,0x35,0x9c,0xae,0x9c,0xa0,0x9d,0x1a,0x06,0x11,0x02,0x0a,0x2f,0x13,0x07,0x02,0x02,0x0a,0x03 -,0x0a,0x29,0x85,0xa7,0x01,0x04,0x00,0x13,0x2e,0x98,0xb6,0xa0,0xa5,0x5d,0x9d,0x9a,0xae,0x88,0x90,0x93,0x80,0x88,0x80,0x81,0x87,0x9b,0x92,0x81,0x83,0x83,0x89,0xc8 -,0x2b,0x23,0x19,0x0b,0x2f,0x89,0x3e,0x05,0x00,0x00,0x05,0x07,0x20,0x1a,0x0e,0x09,0x08,0x00,0x07,0x2a,0x49,0x0e,0x0d,0xcf,0x9c,0x80,0x8b,0x97,0x90,0x99,0x85,0x86 -,0x8f,0x88,0xa8,0xde,0xac,0x25,0xac,0x88,0x80,0x83,0xaf,0x0a,0x12,0x8f,0x96,0x8e,0x87,0x8e,0xa0,0x15,0x0b,0x0f,0x9e,0xe1,0x0b,0x10,0x08,0x0b,0x06,0x03,0x09,0x11 -,0x1d,0x04,0x04,0x0b,0x12,0x19,0x1f,0x0d,0x34,0xa3,0x95,0x80,0x8e,0x88,0x99,0xbe,0x9b,0x8d,0x81,0x85,0x80,0x80,0x93,0x17,0xb3,0x35,0x8b,0x8b,0xba,0xa1,0x1d,0x24 -,0x07,0x1d,0x49,0x31,0x0e,0x0b,0x05,0x08,0x03,0x13,0x1f,0x0a,0x01,0x0d,0x8a,0xe9,0x39,0x04,0x0c,0xb5,0xbe,0x91,0x8e,0x8a,0x80,0x90,0x0e,0x1d,0x9b,0x82,0x83,0x80 -,0x89,0x94,0x89,0x8d,0x8c,0x83,0x87,0x96,0xa2,0x0d,0x02,0x13,0xc3,0x18,0x03,0x00,0x1a,0xb9,0x0d,0x02,0x00,0x04,0x0d,0x08,0x01,0x17,0x8e,0x79,0x19,0x0c,0x06,0xc6 -,0xa6,0x8d,0x88,0x88,0x84,0x8a,0x97,0x87,0x80,0x82,0x80,0x8a,0x89,0x97,0x2c,0x9b,0x9c,0xa1,0x9b,0x83,0x91,0x26,0x15,0x00,0x1c,0x36,0x05,0x01,0x17,0x19,0x0f,0x02 -,0x06,0x09,0x09,0x17,0x0b,0x3b,0x1d,0x13,0x0d,0x0c,0x1c,0x18,0x22,0x45,0xaa,0x92,0xb5,0x14,0xb9,0x95,0x94,0x8e,0x83,0x81,0x8a,0xb1,0xd6,0xa6,0x96,0x88,0x81,0x81 -,0x81,0x8a,0x95,0xb8,0xbe,0x8b,0x9d,0x94,0x96,0x23,0x1b,0x0b,0x0b,0x09,0x03,0x0c,0x0b,0x07,0x05,0x01,0x00,0x04,0x05,0x06,0x01,0xba,0x95,0x1f,0x0b,0x00,0x12,0x32 -,0xa8,0x8b,0x8f,0x80,0x89,0x4a,0x1e,0xae,0x85,0x82,0x84,0x88,0x83,0x87,0x86,0x85,0x89,0x8d,0x81,0x83,0x8a,0x9b,0x8e,0xc7,0x1a,0x16,0x0c,0x0e,0x1d,0xac,0x04,0x01 -,0x00,0x00,0x05,0x05,0x0e,0x24,0x2b,0x14,0x02,0x02,0x07,0xa2,0x9c,0x0a,0x22,0x9f,0x9f,0xbf,0x3f,0x99,0x88,0x8b,0x9e,0x95,0x87,0x95,0x9e,0x91,0x85,0x83,0x87,0x84 -,0x80,0x81,0x8c,0x31,0x2f,0x7a,0xa0,0x88,0x89,0x9b,0xbf,0x09,0x07,0x03,0x03,0x0b,0x08,0xcd,0x0d,0x04,0x02,0x04,0x0c,0x15,0x0b,0x07,0x0c,0x08,0x04,0x02,0x21,0x92 -,0xab,0x0b,0xa3,0x83,0x80,0x8a,0xd4,0xa1,0x86,0x84,0x86,0x81,0x82,0x80,0x92,0x2d,0x1f,0x9c,0x97,0x89,0x8f,0xb3,0xbc,0x3f,0x27,0x14,0x3b,0x28,0x21,0x11,0x07,0x0a -,0x07,0x0c,0x14,0x0b,0x02,0x0f,0x8f,0x48,0x0d,0x00,0x05,0x1b,0x0c,0x34,0xc9,0x96,0xa8,0x17,0x16,0x1a,0x30,0xb9,0x9d,0x87,0x85,0x8c,0x89,0x91,0x87,0x89,0x85,0x83 -,0x86,0x88,0x97,0x97,0x94,0x8d,0x98,0xb5,0x2b,0x90,0x9e,0x1e,0x0d,0x00,0x18,0x0e,0x0d,0x15,0x2a,0x3e,0x0d,0x03,0x00,0x02,0x04,0x10,0x32,0x1e,0x07,0x0b,0x0c,0x26 -,0x2e,0x2e,0x9a,0x98,0x94,0x8f,0xa6,0x9b,0x87,0x89,0x8f,0x9e,0x83,0x80,0x88,0x9b,0xa8,0x87,0x82,0x84,0x82,0x83,0x80,0x97,0x15,0x0f,0x24,0x55,0x1b,0x11,0x08,0x07 -,0x03,0x02,0x01,0x02,0x00,0x01,0x01,0x02,0x02,0x05,0x01,0x06,0x0b,0x16,0x44,0xae,0x83,0x8d,0x9e,0xab,0x92,0x82,0x8b,0x84,0x80,0x80,0x81,0x8a,0x8d,0x9a,0x8e,0x92 -,0x93,0x8d,0x87,0x8e,0x24,0x19,0x2b,0x39,0x17,0x12,0x33,0x2a,0x0a,0x05,0x0a,0x4d,0x18,0x0a,0x06,0x25,0x97,0x14,0x07,0x00,0x0c,0x26,0x0c,0x06,0x13,0xf5,0xf7,0x10 -,0x0c,0x17,0x41,0xad,0x99,0x92,0x8c,0x8a,0x8c,0x96,0x8c,0x84,0x84,0x86,0x8b,0x8c,0x8a,0x8e,0xa3,0x97,0x9c,0x9e,0xb4,0x92,0xa7,0x23,0x15,0x0e,0x23,0x14,0x17,0x23 -,0x1b,0x2a,0x15,0x05,0x12,0x14,0x1c,0x0e,0x0d,0x24,0x2a,0x43,0xac,0x25,0x2d,0x37,0xc3,0xaa,0x26,0x1f,0x1d,0x1f,0x20,0xd1,0xb2,0xa9,0x8c,0x81,0x91,0x4e,0x1d,0x98 -,0x82,0x93,0xb7,0x93,0x85,0x80,0x88,0xad,0x2e,0x1f,0x17,0x05,0x04,0x15,0x42,0x0c,0x02,0x00,0x0a,0x0f,0xbc,0xa7,0x1b,0x4a,0x86,0x82,0x62,0x0a,0x09,0xcb,0x86,0x85 -,0x31,0x07,0x1a,0xb3,0x9a,0x80,0x92,0x93,0xbc,0x1c,0xa3,0x9c,0xac,0x1e,0x28,0x0d,0x13,0x21,0x19,0x13,0x54,0x24,0x11,0xa8,0x82,0x8c,0xae,0x9e,0x06,0x06,0x16,0x17 -,0x09,0x12,0x3c,0x1b,0x17,0x0e,0xa9,0x88,0x83,0x84,0x87,0x82,0x8b,0xa0,0x8d,0xa5,0xd2,0x94,0x8a,0x8a,0x8d,0x87,0x8f,0xa2,0x32,0x10,0x09,0x13,0x13,0x0b,0x02,0x00 -,0x02,0x03,0x04,0x05,0x1e,0x9b,0x96,0xc2,0x26,0xa9,0x88,0x81,0x89,0xab,0x92,0xa9,0x0b,0x08,0x19,0xbb,0x43,0x47,0x91,0x87,0x89,0x8e,0x99,0x99,0x9a,0x89,0x8f,0x9a -,0xa6,0x1b,0x20,0xe6,0x9f,0xa7,0x1b,0xba,0x91,0x8d,0x9b,0x0e,0x27,0x1c,0x2a,0x1c,0x15,0x36,0x04,0x00,0x01,0x00,0x0a,0x07,0x08,0xbb,0xb1,0x2b,0x1e,0xbe,0xb0,0x96 -,0x84,0x93,0x8b,0x86,0x8d,0x9d,0x91,0x83,0x86,0x88,0x83,0x80,0x85,0xb6,0x29,0x99,0x89,0x95,0x9f,0xca,0x09,0x01,0x00,0x06,0x0a,0x07,0x05,0x08,0x1f,0xc9,0x1b,0x0d -,0x10,0x0b,0x1c,0x25,0x1c,0x18,0x11,0x14,0x0f,0x1f,0x17,0x2d,0x8d,0x82,0x8d,0x40,0x1e,0x9f,0x87,0x88,0x84,0x86,0x82,0x8a,0xc2,0xa7,0x92,0x8e,0x9a,0xa7,0x8d,0x92 -,0x8d,0xb9,0xbf,0xa9,0x1e,0x18,0x0e,0x0f,0x07,0x05,0x0d,0x14,0x0b,0x04,0x11,0x97,0x4b,0x0f,0x01,0x03,0x18,0x9f,0x8a,0x9d,0x8f,0x9d,0x0f,0x03,0x09,0x30,0x9d,0xbd -,0x5e,0x9a,0x8c,0x8e,0x8a,0x8c,0x87,0x90,0x99,0x99,0x3c,0x2f,0x3a,0x8f,0x8d,0xab,0x8e,0x80,0x88,0x9b,0x17,0x20,0x9f,0x9a,0x29,0x1a,0xbb,0x36,0x23,0x1a,0x07,0x05 -,0x0f,0x0d,0x0e,0x1f,0x1c,0x09,0x04,0x0e,0x17,0x1f,0x18,0x19,0x12,0x00,0x0c,0xbb,0x8f,0xaf,0xa8,0x8e,0x94,0xa3,0x46,0x9d,0x8c,0x83,0x82,0x81,0x81,0x86,0x98,0xab -,0xb7,0x90,0x88,0x99,0xa8,0x93,0x8e,0xa8,0x20,0x0f,0x32,0xab,0x24,0x0c,0x00,0x02,0x0f,0x3e,0x16,0x0b,0xa1,0x25,0x08,0x02,0x00,0x0a,0x11,0x1e,0x1f,0xa8,0x99,0x2a -,0x25,0xaa,0x9f,0x8c,0x8f,0xac,0xe0,0xc5,0x8e,0x87,0x8b,0x9e,0xc4,0x97,0x8a,0x8a,0xbd,0x4c,0x9e,0x93,0x8c,0x88,0x85,0x9a,0x2e,0x0f,0x11,0x1a,0x19,0xdb,0x95,0x8e -,0x36,0x06,0x06,0x0b,0x28,0x3d,0x3a,0x35,0x13,0x0f,0x0d,0x28,0xbb,0x52,0xde,0x40,0x0f,0x06,0x08,0x0c,0x0f,0x39,0x87,0x82,0x9d,0x1a,0x0c,0x2d,0x8b,0x8a,0x8f,0xb3 -,0x9b,0x8c,0xb6,0x30,0x22,0x41,0xc9,0xa0,0x8d,0x8e,0xa2,0x24,0x36,0x94,0x8c,0x95,0x8e,0x89,0xb1,0x23,0x2b,0xb0,0x28,0x46,0x90,0x41,0x0e,0x01,0x09,0x14,0x0c,0x29 -,0xa8,0x97,0xba,0x0e,0x1a,0x10,0x14,0x12,0x1c,0xaf,0xbc,0xbb,0x12,0x0b,0x12,0x39,0xa2,0xbb,0xbc,0xa3,0xa2,0xde,0x39,0x30,0x9b,0x8f,0xb3,0xf3,0x18,0x46,0xa6,0x34 -,0x9b,0x8b,0x82,0x86,0xad,0xaa,0x8f,0x85,0x8b,0x8e,0x85,0x88,0x9a,0x3d,0x5b,0x26,0x27,0x56,0x2f,0x15,0x07,0x0e,0x1b,0x0a,0x06,0x55,0x78,0x07,0x03,0x03,0x0d,0x0d -,0x0b,0x0d,0x1a,0x64,0x4d,0x24,0x0b,0x17,0x5a,0x8e,0x93,0x9e,0x95,0x9c,0xa2,0xab,0x8d,0x8f,0xa7,0xd6,0xb9,0x9b,0x93,0x8b,0x94,0x9e,0x87,0x80,0x86,0xc7,0x28,0x94 -,0x87,0x90,0x8d,0x87,0x87,0xad,0x0b,0x10,0x23,0x21,0x16,0x24,0x1d,0x06,0x03,0x01,0x05,0x0a,0x11,0x17,0x05,0x00,0x02,0x0f,0x09,0x09,0x10,0xbc,0xaa,0x37,0x2f,0x11 -,0x1d,0xd1,0x89,0x81,0x84,0x83,0x87,0xa0,0xa7,0x89,0x80,0x85,0x8a,0x84,0x8a,0x9d,0xaf,0x94,0x92,0xc0,0x3e,0xaa,0xab,0x33,0x9f,0x8f,0x2d,0x10,0xa0,0x8a,0x26,0x06 -,0x07,0x0f,0x0d,0x07,0x22,0xac,0xb0,0x13,0x00,0x02,0x03,0x0b,0x19,0x0e,0x11,0x1f,0x2b,0x0e,0x09,0x1f,0x3b,0xbd,0x25,0x9c,0x95,0x3a,0x35,0xa0,0x8e,0x86,0x80,0x83 -,0x8c,0x17,0x21,0x8e,0x8c,0x8e,0x8c,0x80,0x89,0xa5,0xb8,0x9c,0x9a,0xa8,0x9b,0x8f,0xa9,0x3b,0xba,0x1e,0x13,0x0f,0x23,0x19,0x0e,0x14,0x0e,0x08,0x0a,0x0a,0x18,0x97 -,0xb9,0x1a,0x08,0x00,0x08,0x22,0x2d,0x3f,0x24,0xaa,0xb4,0x0e,0x16,0x1a,0xbf,0x19,0x44,0x8c,0x8c,0x95,0xa8,0x93,0x89,0x89,0x93,0x93,0xb5,0xc3,0x93,0x8c,0x9e,0xe8 -,0x92,0x80,0x8b,0x99,0x3e,0x0e,0x1e,0x65,0x94,0x97,0x9f,0x8c,0x98,0x19,0x0e,0x1d,0xb5,0x30,0x17,0x31,0x2e,0x1a,0x09,0x10,0x08,0x09,0x1d,0x0c,0x0f,0x08,0x08,0x18 -,0x1c,0x10,0x0d,0x97,0x87,0x9f,0x21,0x0e,0x28,0xa9,0x98,0x8f,0x8a,0x85,0x91,0x34,0xb7,0xa5,0x95,0x9d,0x52,0x8e,0x8b,0x88,0xa7,0x2b,0xac,0x30,0x27,0x2c,0xb9,0x2a -,0x1a,0x4e,0xaf,0xc9,0x29,0x97,0x81,0x8b,0x4c,0x0b,0x17,0xa3,0xbe,0xa9,0xa6,0xb4,0x9b,0x1f,0x0a,0x0e,0x15,0x17,0x0a,0x20,0x45,0xbd,0xa3,0x46,0x27,0x20,0x25,0x1e -,0x26,0x0f,0x0e,0x19,0x31,0x22,0x1c,0x14,0xb1,0x8b,0xb2,0x1f,0x0e,0x26,0xa6,0xd4,0xa6,0x88,0x85,0x8e,0x29,0x23,0x41,0xa5,0x95,0xaa,0x96,0x99,0x8d,0x99,0xa4,0x9b -,0x96,0x92,0x9d,0x92,0x93,0x8f,0xab,0x9f,0xcf,0x22,0x34,0x9b,0x8c,0xde,0x11,0x01,0x0a,0x18,0x1a,0x1f,0xaf,0xa1,0x15,0x00,0x03,0x08,0x08,0x09,0x08,0x24,0x2b,0x1e -,0x17,0x19,0x1b,0x21,0x33,0xaf,0x9f,0xa2,0x9d,0x45,0x8f,0x8a,0x8f,0x9e,0x91,0x80,0x87,0x99,0x2d,0x9e,0x85,0x8b,0x91,0x88,0x86,0x84,0x9f,0x13,0x1e,0x35,0xa5,0x96 -,0xaa,0xb4,0x2c,0xed,0x9c,0xa1,0x9f,0x24,0x25,0x1c,0x0b,0x0b,0x07,0x07,0x0e,0x0d,0x09,0x02,0x1f,0xa7,0x07,0x04,0x00,0x0d,0xc9,0x18,0x20,0x2a,0x9c,0x94,0x31,0x3a -,0xae,0x95,0x92,0x91,0x8a,0x89,0x8f,0x8d,0x8b,0x8c,0x9c,0xaf,0xa5,0x98,0x9d,0x2f,0x1e,0xc1,0x8c,0x91,0xcf,0x25,0x8c,0x80,0x92,0x35,0x1b,0xa8,0xc3,0x3b,0xa9,0x99 -,0x8b,0x45,0x0a,0x0c,0x07,0x18,0x35,0x2d,0xcb,0x1f,0x15,0x12,0x0e,0x15,0x07,0x0b,0x1a,0x3b,0x19,0x08,0x0f,0x1c,0xc6,0x2d,0x13,0x2c,0x89,0x86,0xb5,0x12,0x14,0xb9 -,0xbe,0x1c,0xc3,0x91,0x87,0x9b,0x2c,0x2d,0x1a,0xab,0x8f,0x87,0x88,0x95,0x96,0x8d,0x8b,0x97,0x96,0x8a,0x87,0x8e,0xa3,0xa6,0x92,0x94,0x9d,0xaf,0x18,0x2a,0x8a,0x92 -,0x18,0x04,0x00,0x09,0x0d,0x0b,0x13,0x21,0x25,0x0c,0x04,0x0f,0x3f,0xaa,0x27,0x28,0xe0,0x17,0x0e,0x0d,0x0e,0x0a,0x09,0x1c,0x29,0xab,0x2b,0x18,0x25,0x3a,0x90,0xa4 -,0x37,0xa4,0x83,0x82,0x97,0x29,0x46,0x88,0x85,0x89,0x87,0x84,0x82,0x8a,0xbb,0xb1,0x8c,0x88,0x8a,0x8f,0x8f,0x9c,0x65,0x36,0x27,0x1c,0x0f,0x0f,0x16,0x1e,0x0e,0x05 -,0x0e,0x0b,0x0c,0x0b,0x0c,0x14,0x65,0x92,0x20,0x05,0x00,0x0c,0x46,0x19,0x2b,0xb4,0xa6,0x4c,0x0d,0x11,0x11,0x17,0x35,0x2e,0xb6,0x96,0x97,0x95,0xa4,0x96,0x8f,0x9d -,0x93,0x97,0x98,0xa1,0xa8,0x9b,0xdf,0x3f,0xa2,0x9f,0x93,0x86,0x81,0x8d,0xb7,0x2c,0x9c,0x8b,0x9c,0x94,0x8e,0x8a,0xa9,0x18,0x26,0xbe,0xd6,0x19,0x0a,0x14,0x1e,0x1c -,0x1e,0x11,0x0b,0x06,0x0a,0x10,0x0d,0x10,0x15,0x0a,0x07,0x01,0x12,0x22,0x0b,0x07,0xb3,0x8d,0xa0,0x3b,0x0b,0x22,0x9b,0x9a,0x89,0x8c,0x99,0x92,0x93,0x90,0x9e,0x98 -,0x90,0x9c,0x8e,0x89,0x8c,0xa6,0x9b,0x91,0xa7,0x98,0x91,0x8c,0x8b,0x8e,0xaa,0x38,0x21,0xae,0x8f,0xa3,0x33,0xb7,0x94,0xc6,0x11,0x08,0x1c,0x23,0x09,0x03,0x10,0xc6 -,0x1d,0x02,0x03,0x09,0x0c,0x11,0x20,0x76,0x2f,0x16,0x0f,0x18,0x1a,0x30,0xf2,0x57,0x3b,0x39,0x36,0x1b,0x9a,0x8e,0x8f,0x91,0xbd,0xa5,0x8a,0x81,0x8d,0x2a,0x19,0x91 -,0x83,0x9d,0xac,0x9d,0x88,0x89,0x37,0x36,0x2b,0x3d,0x3a,0x36,0x99,0x94,0xac,0x1d,0x22,0x58,0x29,0xc1,0x1f,0x09,0x05,0x13,0x2a,0x3b,0x28,0xcc,0x8b,0x9a,0xff,0x8c -,0x8a,0x0c,0x08,0xad,0x84,0x82,0xab,0x1f,0xa6,0xaf,0x0d,0x00,0x09,0x08,0x5b,0x1a,0x00,0x00,0x0c,0x95,0x0c,0x04,0x2f,0x86,0x80,0x88,0x80,0x83,0x80,0x86,0x9d,0x0c -,0x12,0xbb,0xbe,0x0a,0x08,0x86,0x80,0x9e,0x00,0x1b,0x80,0x85,0x84,0x84,0xa0,0x2b,0x07,0x07,0xbe,0x49,0x1d,0x07,0x09,0x0e,0x1a,0x07,0x02,0x03,0x0a,0xc4,0xb1,0x2d -,0x8e,0x89,0x4f,0xaf,0x9f,0x88,0x87,0x85,0x8e,0x10,0x1c,0x08,0x06,0x3c,0x06,0x0a,0x36,0xba,0x8a,0x80,0x86,0x91,0x94,0xa2,0x8a,0x81,0x94,0xad,0x16,0x0b,0x02,0x16 -,0x8f,0x11,0x01,0x00,0xe9,0x88,0xb2,0x5d,0x0f,0x1d,0x40,0xa6,0x37,0x10,0xc7,0x87,0x88,0x17,0x05,0x10,0x6a,0x22,0x13,0x99,0x89,0x89,0x8f,0x24,0x1d,0x14,0x12,0x11 -,0x92,0x80,0x82,0x8d,0x3e,0xc1,0x92,0x8d,0x4c,0x22,0x10,0x2d,0x57,0x34,0x16,0x0c,0x15,0x0a,0x0e,0x2a,0x88,0x88,0x1e,0x0d,0x09,0x2c,0x28,0x08,0xa5,0x88,0x8b,0x9b -,0x18,0x1b,0x3b,0xc2,0xad,0x9f,0x8b,0x8b,0x90,0xc1,0x2c,0xbd,0xa8,0x96,0x9e,0x22,0x09,0x0c,0x25,0x17,0x42,0x29,0x0d,0x08,0x0a,0xb4,0xbd,0x36,0x0f,0x15,0x4c,0x2a -,0x9f,0x88,0x8f,0xaf,0x1a,0x1e,0x8f,0x84,0x8c,0x9a,0x8e,0x8b,0x8e,0x8f,0x9f,0x33,0xaf,0xab,0x38,0x95,0x8e,0xcd,0x10,0x00,0x0b,0x4c,0x5d,0x24,0x29,0xb8,0x18,0x09 -,0x05,0x0d,0xa6,0xa3,0x5c,0xac,0xb3,0xa3,0xa7,0x3d,0xad,0x91,0x8d,0x8c,0x8b,0x84,0x8c,0x2b,0x0a,0x08,0x1c,0x18,0x09,0x0b,0x2d,0xb2,0x93,0x9b,0x2b,0x20,0x1f,0xb8 -,0x8b,0x80,0x8f,0x30,0x13,0x0e,0xbf,0xd2,0xa1,0x8b,0x9b,0x4e,0x0c,0x17,0x43,0x25,0x22,0x1d,0x34,0xac,0x32,0x0c,0x03,0x02,0x08,0x0c,0x1f,0x1a,0x15,0x17,0x08,0x03 -,0x12,0xb8,0xf2,0x10,0xb4,0x87,0x89,0x84,0x95,0xb0,0x30,0x17,0xb0,0x86,0x81,0x85,0xd6,0x1e,0x1a,0x31,0x8f,0x99,0xaf,0x41,0xbe,0x9e,0x8c,0x8f,0x97,0x98,0x93,0x8b -,0x8c,0x8a,0xc2,0xa8,0x9c,0xac,0xb2,0x90,0x85,0x1e,0x01,0x04,0x2c,0x8e,0x8b,0x90,0xa6,0x9f,0xa0,0xcd,0xa6,0xac,0xe8,0x3c,0x18,0x18,0x2b,0xfe,0x23,0x0e,0x07,0x0a -,0x14,0x1b,0x1d,0x15,0x0f,0x03,0x09,0x0e,0x0b,0x06,0x0b,0x2d,0x1a,0x08,0x01,0x0d,0x0a,0x0b,0x21,0x91,0x83,0x8b,0xae,0x2d,0xc5,0xaa,0x8c,0x84,0x84,0x88,0x8e,0xb7 -,0x68,0x9b,0x8c,0x8f,0xaf,0x2a,0x26,0xfb,0x8c,0x84,0x8a,0x96,0x9f,0x82,0x8c,0x20,0x0d,0x1a,0xd3,0x24,0xa5,0x89,0x8f,0xaf,0x1b,0x1d,0x4e,0x99,0x96,0xce,0x29,0x4b -,0x68,0x18,0x14,0x0c,0x08,0x0b,0x19,0x1b,0x27,0x2b,0x1e,0x37,0xea,0xb9,0x3c,0x8e,0x8b,0x99,0x2b,0x0e,0xa6,0x96,0x8d,0x89,0x89,0x8e,0xd6,0x26,0x2c,0x1e,0x0b,0x0d -,0x3e,0x97,0x99,0x28,0x0b,0x06,0x0f,0x17,0x35,0xa9,0xaf,0x1f,0x06,0x0a,0x31,0xce,0x28,0xaa,0xbb,0x2a,0x20,0x19,0x26,0x4a,0x4f,0xbf,0x94,0x92,0x43,0x0f,0x18,0x2d -,0xda,0x2c,0x20,0x20,0x2f,0x2d,0x1f,0x32,0xc0,0x92,0x9f,0x2a,0x15,0x0c,0x0b,0x25,0x9a,0xa9,0xc1,0x98,0x9d,0xbb,0x31,0x13,0x1e,0xae,0x8f,0x84,0x86,0x85,0x8c,0xe8 -,0x3a,0xaf,0x8c,0x86,0x87,0x85,0x85,0x87,0x92,0xa4,0xaa,0x9f,0x92,0x9d,0xa4,0xa3,0x2f,0x27,0x47,0x25,0xd2,0x92,0x9f,0x26,0x02,0x01,0x07,0x07,0x17,0x39,0xbf,0x23 -,0x09,0x09,0x0f,0x2b,0xac,0xc2,0x45,0x1b,0x11,0x0a,0x03,0x09,0x0b,0x0e,0x10,0x13,0x0d,0x02,0x01,0x07,0x1c,0x3d,0x94,0x8c,0xbb,0x23,0x10,0xb1,0x8f,0x92,0x8e,0x90 -,0x88,0x86,0x8a,0x8f,0x95,0x8f,0x8e,0x8a,0x87,0x83,0x86,0x88,0x86,0x90,0x9d,0xbc,0x99,0xa2,0x39,0x1c,0x07,0x0e,0x0f,0x09,0x43,0x9d,0x9e,0xad,0x1d,0xd8,0xba,0xb4 -,0x8a,0x81,0x82,0x83,0x96,0x2d,0x34,0xa7,0x8e,0x8a,0x90,0xa4,0x23,0x13,0x13,0x20,0x30,0x22,0x1a,0x13,0x13,0x06,0x02,0x05,0x0b,0x25,0x92,0x31,0x06,0x03,0x00,0x09 -,0x0b,0x0e,0x1d,0xab,0x9f,0x28,0x09,0x07,0x14,0x2f,0x5d,0xa5,0x9f,0x48,0x6f,0xa1,0xac,0x56,0x3a,0x9d,0x92,0x92,0x90,0xa6,0xa9,0xa0,0x98,0xa1,0x88,0x86,0x91,0x9c -,0x2f,0x33,0x19,0x2e,0xa3,0x8e,0x83,0x8e,0xb8,0x27,0x2d,0x27,0xb9,0x89,0x87,0x8f,0x50,0x29,0x2a,0x23,0x14,0x1b,0xce,0x3f,0x26,0x0d,0x0e,0x14,0x14,0xa9,0x82,0x82 -,0x9c,0x0d,0x09,0x2b,0x1f,0x4e,0xa6,0xa5,0x97,0x61,0x16,0x05,0x0f,0xbe,0xba,0xae,0xac,0x9d,0x41,0x2a,0x4e,0x3a,0x1f,0x14,0x16,0x0f,0x0d,0x13,0x2c,0xdf,0x0d,0x0a -,0x9c,0xa6,0x1f,0x0f,0x07,0x1c,0x20,0x61,0x8e,0x88,0x8f,0x9e,0xae,0xe1,0x1e,0x2d,0xa2,0x8c,0x84,0x81,0x88,0xa7,0x4b,0x26,0xce,0x5a,0x9f,0x95,0x4b,0x0b,0x10,0x25 -,0x11,0x08,0x1e,0x8f,0x1e,0x05,0x01,0x07,0x0f,0x1f,0x8e,0x83,0x84,0x94,0x32,0x1d,0x20,0xe6,0xa2,0x8f,0x86,0x8e,0x92,0xa1,0x3c,0xd5,0x9e,0x99,0xab,0x96,0x86,0x89 -,0x8b,0x85,0x84,0x90,0x95,0x83,0x85,0x9d,0xc5,0x21,0xc6,0x36,0x1d,0x9a,0xae,0xa5,0x3f,0x10,0x0a,0x02,0x05,0x12,0x1f,0x1e,0x26,0x0c,0x03,0x01,0x00,0x00,0x01,0x02 -,0x04,0x0c,0x06,0x00,0x07,0x0c,0x0d,0xa0,0x83,0x93,0x23,0x14,0xb8,0x87,0x88,0x85,0x80,0x82,0x87,0xc6,0x39,0x1f,0x1d,0x96,0x85,0x88,0x89,0x87,0xad,0x3b,0x9e,0x8b -,0xa2,0x69,0x9f,0x95,0x90,0x98,0x94,0x91,0x9a,0x24,0xb4,0x85,0x8d,0xb3,0x1c,0x1f,0xce,0xbb,0xab,0x9d,0x91,0x9f,0x1d,0x15,0x1c,0x1e,0x3b,0xa8,0x9b,0x8d,0x96,0x29 -,0x0c,0x0f,0x2d,0x1f,0x1e,0x67,0xa3,0xb1,0x0e,0x05,0x06,0x06,0x02,0x04,0x25,0x0b,0x00,0x02,0x05,0x1a,0x24,0xe5,0x97,0xaa,0x54,0x1b,0x0d,0x1f,0xad,0x9d,0x6a,0xab -,0x8e,0xbb,0x15,0x1d,0x2e,0xeb,0xec,0xb3,0x8e,0x8b,0x99,0xa2,0xa6,0xe2,0x41,0x3a,0xcc,0x85,0x80,0x88,0x99,0xa9,0x8d,0x9f,0xb7,0x89,0x88,0x8c,0x9f,0x0c,0x0d,0x35 -,0x9a,0x99,0x9d,0xa1,0x30,0x0c,0x02,0x07,0x15,0x25,0x4f,0x9e,0x98,0xb5,0x28,0x1c,0x19,0xc5,0x9d,0xad,0x97,0x84,0x86,0x93,0xcf,0x8f,0x89,0x43,0x1f,0xa8,0x8d,0x95 -,0x29,0x1f,0xa1,0xae,0x1d,0x0a,0x19,0x19,0x09,0x09,0x03,0x04,0x05,0x0d,0x1f,0x24,0x55,0x11,0x0b,0x0a,0x05,0x11,0x0b,0x0d,0x96,0x87,0x9f,0x0e,0x00,0x0e,0x0f,0x1a -,0x24,0x31,0x97,0x1c,0x16,0xb2,0xa2,0x8a,0x9a,0xa2,0xa6,0xad,0x91,0xa4,0xb5,0x97,0x89,0x89,0x93,0x95,0x99,0xc5,0x51,0xbf,0xa4,0xb8,0x9b,0x84,0x80,0x80,0x88,0xa8 -,0xa7,0x9b,0x74,0xbd,0x8f,0x8a,0x89,0x96,0x3e,0x29,0x0c,0x0b,0x0a,0x17,0x1a,0x0e,0x12,0x04,0x0a,0x27,0x3a,0x2a,0x21,0x18,0x09,0x09,0x07,0x01,0x0d,0x1e,0x98,0x80 -,0x87,0xaf,0x19,0x0e,0x21,0x3b,0x2a,0xdc,0x9f,0x8a,0x92,0x42,0x2e,0x0b,0x06,0x08,0x12,0x2d,0x14,0x11,0x24,0xb6,0x3a,0x19,0x2c,0x99,0xa0,0xc7,0x40,0x1a,0x09,0x0e -,0xa2,0x8d,0x85,0x80,0x86,0x6e,0x0f,0x1f,0xcf,0xa0,0x94,0x85,0x81,0x80,0x8f,0x1e,0x1d,0x27,0x2c,0x25,0x17,0x17,0x16,0x3a,0x4f,0x56,0x2a,0x14,0xb6,0xbc,0x2c,0x1c -,0x18,0x17,0x1d,0x8d,0x84,0xa7,0x99,0x83,0x8c,0xac,0x19,0x26,0xd7,0xaf,0x87,0x81,0x80,0x8d,0xae,0xae,0x9f,0x95,0x6e,0x3b,0xa6,0x90,0x93,0x9f,0x4d,0x11,0x0b,0x08 -,0x09,0x06,0x03,0x01,0x04,0x05,0x14,0xa2,0x66,0x11,0xb1,0x9c,0x12,0x04,0x02,0x0d,0x1d,0x2a,0x25,0x29,0x2f,0x0e,0x10,0x15,0x09,0x0a,0x0f,0xaa,0x8d,0x8c,0x8b,0x89 -,0x88,0x8f,0x9e,0x9b,0xa2,0xba,0x5d,0xa5,0x8e,0x9d,0xa3,0x48,0x2f,0x4f,0x96,0x9f,0x11,0x06,0x12,0x93,0x8a,0x8d,0x8a,0x82,0x81,0x8f,0xaa,0x46,0x77,0xa5,0x94,0x8b -,0x89,0x9b,0xd2,0x4e,0xb6,0x2b,0x15,0x1f,0x19,0xce,0x12,0x1f,0x23,0x11,0x6f,0x33,0xa1,0x1d,0x72,0x8c,0x3f,0x39,0xac,0xb5,0x24,0x9b,0x8f,0x9e,0x93,0x23,0x04,0x0e -,0x03,0x0c,0x96,0x8e,0x9f,0x27,0x17,0x0f,0x0f,0x04,0x00,0x03,0x0f,0x19,0x0f,0x02,0x07,0x0c,0x12,0x14,0x0a,0x15,0xae,0x86,0x89,0x99,0xd4,0x91,0x84,0x89,0x8d,0x8c -,0x89,0xa4,0x48,0xda,0x8f,0x88,0x9a,0x9e,0x86,0x83,0x85,0x8c,0x39,0xb3,0x8f,0x87,0x89,0x94,0x8a,0x87,0x8e,0x2f,0x06,0x09,0x0b,0x09,0x0b,0x24,0x1c,0x02,0x03,0x01 -,0x0b,0x0f,0x07,0x03,0x04,0x23,0x1d,0x0b,0x0c,0x28,0x97,0x8a,0x94,0x99,0xa5,0x9a,0x93,0x8a,0x87,0x8f,0x8a,0x85,0x80,0x8a,0x8f,0xa2,0xd2,0x0e,0x1d,0x99,0x88,0x8e -,0x91,0x8d,0x9b,0xa3,0x12,0x1a,0x12,0x1a,0xa0,0x9b,0x32,0x10,0x0e,0x23,0x0c,0x03,0x03,0x01,0x0e,0x06,0x06,0x0a,0x12,0x0d,0x1a,0xa0,0xaf,0x94,0xbe,0x23,0x39,0x56 -,0x3a,0xba,0xdb,0x2f,0xcd,0xb1,0x8e,0x30,0x25,0x1f,0x54,0x86,0x88,0x83,0x82,0x80,0x80,0x91,0xbc,0xe7,0xce,0xbf,0xab,0x9d,0xa6,0x1c,0x14,0x0e,0x18,0x19,0x08,0x18 -,0x2d,0x12,0x4e,0x50,0x16,0x16,0xc0,0x9d,0x2c,0x14,0x0c,0xa6,0x3e,0x1f,0x1f,0x1f,0xb1,0xd4,0x96,0x8c,0x8e,0x8c,0x9d,0x33,0xb6,0x96,0x8e,0x87,0x89,0x89,0x8b,0x95 -,0xe1,0x32,0x2b,0xb5,0x96,0xb1,0xb9,0x0d,0x1c,0xa9,0xc9,0x0d,0x0a,0x0e,0x0b,0x0c,0x38,0xa8,0x1d,0x1c,0x0f,0x17,0x31,0x0d,0x0f,0x9f,0xa8,0xb4,0x2b,0x2a,0x18,0xb6 -,0x9f,0x6e,0xc3,0x18,0x1d,0x0a,0x0b,0x0a,0x0f,0x1d,0x19,0x48,0xab,0xc2,0x10,0x0d,0x1c,0x1f,0xad,0xb4,0xb8,0x88,0x97,0xa8,0xc3,0x1a,0x11,0x1e,0xae,0xae,0x94,0x8f -,0xa5,0x28,0xe9,0x8e,0x74,0x53,0xb9,0x9b,0x8f,0xc1,0x9d,0x96,0xa9,0xa2,0x8e,0x8d,0xa2,0x9b,0xa7,0xc8,0x34,0x1e,0x91,0x8b,0x8b,0x8a,0x80,0x88,0x90,0x37,0x3f,0x96 -,0x38,0xa2,0xb4,0x9f,0xab,0x23,0x1a,0x0f,0x07,0x10,0x19,0x17,0xf7,0xa1,0xb4,0x97,0x9b,0x9c,0x8e,0x90,0x8a,0xaa,0xc9,0x2c,0x0a,0x1c,0x0a,0x09,0x13,0x04,0x0d,0x04 -,0x02,0x00,0x00,0x02,0x06,0x11,0x14,0x22,0x2c,0xd8,0x14,0x12,0x33,0x50,0x4b,0xa5,0x8b,0x87,0x89,0x92,0x8d,0x83,0x8c,0x92,0x8c,0x95,0x9d,0x96,0x95,0xa2,0x95,0x8e -,0x8e,0x93,0x8f,0x87,0x8e,0x49,0x28,0x9e,0x8d,0xa7,0x8f,0x9a,0x9c,0xa0,0x0e,0x1f,0x27,0x2b,0x0e,0x2b,0xa1,0x76,0x1f,0x2e,0x14,0x0d,0x0d,0x0b,0x0d,0x0d,0x18,0x0e -,0x0b,0x08,0x35,0x4e,0x1e,0xb1,0x8c,0x88,0x9e,0x9e,0x95,0x89,0x85,0x89,0x81,0x82,0x80,0x8b,0x90,0x9e,0x59,0x39,0x1b,0xaa,0x4e,0x18,0x0c,0x06,0x07,0x00,0x05,0x07 -,0x0a,0x08,0x04,0x09,0x04,0x0c,0x0f,0x0d,0x0a,0x40,0xee,0x0c,0x0c,0x0a,0x26,0xc8,0xbe,0x9d,0x89,0x8f,0xa0,0xc9,0x9e,0xbd,0x6b,0x92,0x98,0x88,0x93,0x92,0x91,0xa1 -,0x9f,0xb7,0x8f,0x86,0x8e,0x8e,0xac,0xcf,0x95,0x8c,0x8a,0x8c,0x8a,0x92,0x97,0xbf,0x2a,0x9b,0x98,0x94,0x8a,0x96,0xb6,0x1c,0x1a,0x0a,0x07,0x09,0x14,0x3d,0x0e,0x0a -,0x08,0x0d,0x1a,0x22,0x3b,0xd1,0xdc,0xa7,0xba,0x2f,0x9a,0x92,0x8a,0x8c,0x8c,0x8b,0x9b,0xba,0x1a,0x23,0x20,0x23,0x9d,0xb7,0x37,0x1e,0x0a,0x0f,0x0c,0x0f,0x0f,0xbf -,0x34,0x20,0x1a,0x1e,0x68,0x2d,0x19,0x13,0x27,0x19,0x2f,0x02,0x17,0x25,0x0f,0x12,0xac,0x8c,0x1a,0x09,0x02,0x09,0x19,0x1d,0xcb,0x8c,0x8e,0xb1,0x1d,0x9c,0x9f,0xa5 -,0x8c,0x86,0x82,0x87,0x8b,0x8d,0x87,0x8e,0x8d,0x85,0x89,0x8e,0x8a,0x2d,0xda,0x9d,0x2d,0x37,0xa1,0x95,0x1b,0x0a,0x04,0x09,0x17,0x11,0x14,0x2a,0xae,0x9a,0x70,0x38 -,0x6d,0xb0,0x98,0x85,0x89,0x8f,0x8a,0x8d,0x91,0x93,0xa2,0xb6,0xad,0x1e,0x10,0x02,0x08,0x0b,0x0a,0x06,0x12,0x1e,0x14,0x05,0x02,0x0b,0x0b,0x1b,0x2a,0x9b,0x8c,0x9f -,0x15,0x3f,0x2d,0x19,0x3c,0xa7,0x9c,0x40,0x3d,0x22,0x47,0xab,0xb8,0x9e,0xa0,0x2b,0x10,0x11,0x2a,0xae,0xa6,0xa2,0x8d,0x80,0xaf,0x44,0xb5,0x9c,0x9b,0xa4,0x8c,0x93 -,0x87,0xa4,0x21,0xf6,0x9e,0x44,0x4a,0x98,0x9e,0xbc,0x2f,0x23,0xdd,0x32,0x1b,0x40,0x28,0x34,0x0a,0x05,0x10,0x10,0x1b,0x1d,0x9e,0x87,0x91,0xa3,0xb8,0x95,0x8a,0x8f -,0x85,0x81,0x80,0x82,0x8d,0x96,0x99,0x91,0xa0,0xb4,0x2c,0x28,0x09,0x01,0x02,0x01,0x05,0x06,0x0b,0x0b,0x07,0x00,0x09,0x08,0x0f,0x0c,0x16,0x8e,0xb6,0x1e,0x0f,0x26 -,0x48,0x35,0xa2,0x8d,0x8d,0x9b,0x2d,0x1f,0xa1,0xba,0x9a,0x98,0x8b,0x92,0xc3,0x62,0x6a,0xa3,0xa0,0x90,0x8f,0x92,0x98,0x3f,0x1e,0x9b,0xbb,0xa1,0x87,0x84,0x84,0xa9 -,0x2e,0xad,0xca,0x56,0xa5,0x9a,0x8d,0xbf,0x0e,0x09,0x06,0x0e,0x1d,0x22,0x28,0x16,0x0d,0x0a,0x04,0x08,0x0a,0x24,0x95,0x91,0xa3,0x28,0xb2,0x90,0x8f,0x8a,0x85,0x80 -,0x81,0x8c,0x9b,0x9f,0x94,0xb7,0xb3,0x96,0x9e,0xc2,0x10,0x06,0x08,0x05,0x0b,0x22,0x3c,0x26,0x1b,0x12,0x0f,0x0f,0x0a,0x2b,0x2f,0xbb,0xb7,0x10,0x0a,0x1a,0x1a,0x0f -,0x4e,0xa7,0xac,0x2a,0x1b,0x19,0x5c,0xc5,0x36,0x9b,0x8a,0x9b,0xb8,0x34,0xc1,0xda,0xc3,0x9d,0x8f,0x89,0x9e,0xd8,0x34,0xbf,0xb3,0xe0,0xb0,0x9b,0x9a,0x99,0xdc,0x4c -,0xae,0x60,0xc7,0x8a,0x8f,0xaf,0x1b,0x11,0x4e,0x19,0x1f,0xe0,0x9f,0xba,0x17,0x0e,0x1c,0x19,0xdc,0xa5,0x91,0x85,0x8f,0x9f,0x9f,0x98,0x9a,0x8e,0x8a,0x8c,0x91,0x9b -,0xc2,0x13,0x1b,0x2d,0x11,0x40,0xc1,0x3d,0x15,0x09,0x08,0x0e,0x19,0x23,0xc8,0xda,0x1e,0x0b,0x0b,0x0c,0x0a,0x0d,0x1d,0xc2,0xb0,0xb0,0x38,0x1a,0x15,0x1d,0x2e,0xa4 -,0x99,0x9d,0xb9,0x1b,0x1b,0x38,0xa6,0xb8,0x8c,0x8a,0x9a,0x4a,0x11,0x5d,0x9b,0xaa,0x91,0x89,0x89,0x9e,0xb2,0xf1,0x27,0x26,0x21,0x96,0x95,0x9d,0xbd,0x38,0x29,0x18 -,0x0f,0x1d,0x2a,0xbc,0x4f,0x2b,0x10,0x09,0x15,0x10,0x17,0x99,0x89,0x97,0xa5,0xbc,0x91,0x8a,0x89,0x85,0x81,0x80,0x84,0x89,0x8d,0x98,0x90,0x9b,0x8b,0x92,0xb9,0xd9 -,0x0f,0x0b,0x04,0x01,0x09,0x0c,0x07,0x0c,0x08,0x05,0x01,0x08,0x0b,0x0d,0x30,0x1a,0x0f,0x0b,0x0d,0x23,0x14,0x12,0x3a,0xa8,0x9b,0x27,0x15,0x18,0x12,0x1e,0xb4,0x9d -,0x8f,0x97,0xac,0xa0,0x9e,0x91,0x9c,0x8e,0x8e,0x8c,0x89,0x8a,0x8d,0x9d,0x9a,0x9a,0xa4,0x8c,0x8b,0x96,0xa5,0xdb,0xa7,0x4f,0x37,0xa7,0x99,0x94,0xda,0x0d,0x0e,0x08 -,0x0a,0x0c,0x12,0x1d,0x0d,0x0d,0x0d,0x12,0x1d,0x1f,0xa3,0x8f,0x89,0x87,0x88,0x86,0x8a,0x87,0x83,0x8b,0x8a,0x83,0x88,0x89,0xb3,0x1d,0x1c,0x0b,0x0e,0x0e,0x1a,0x12 -,0x05,0x0b,0x0d,0x0d,0x09,0x05,0x08,0x12,0x2a,0x3c,0x1a,0x0b,0x06,0x0a,0x18,0x3d,0xba,0x3e,0x40,0x2a,0x15,0x29,0x27,0x1e,0x8b,0x83,0x8a,0x9b,0x6e,0xae,0x5e,0x66 -,0xa1,0x92,0x8d,0xb3,0x2c,0xb5,0x3a,0x2c,0x26,0xc8,0x96,0x92,0x8d,0x9c,0xd1,0x3a,0xcd,0x9d,0x95,0x95,0xa9,0xa5,0x94,0xa4,0x1a,0x12,0x0d,0x19,0x99,0x98,0xaf,0x1c -,0x0c,0x0f,0x0c,0x1d,0x9e,0x8f,0x89,0x8d,0x89,0x8b,0xa6,0xa5,0x8d,0x82,0x81,0x86,0x8d,0x9e,0xa8,0x3f,0x18,0x2b,0x2a,0x21,0x16,0x15,0x0a,0x00,0x01,0x02,0x09,0x0b -,0x2e,0x2d,0x0e,0x0a,0x05,0x0d,0x09,0x03,0x0f,0xc5,0x93,0x2c,0x0e,0x0d,0x0b,0x16,0x26,0xa4,0x9c,0xb0,0xb5,0xb9,0xa9,0xbe,0x3c,0xa9,0x9a,0x8c,0x89,0x90,0xa5,0x43 -,0x36,0x95,0x8b,0x8d,0x83,0x84,0x88,0x90,0xae,0x65,0x33,0xb7,0x88,0x84,0x88,0xaa,0xce,0xbe,0x25,0x1f,0x0e,0x16,0x23,0x2a,0x1f,0x13,0x08,0x06,0x08,0x13,0x2d,0x27 -,0x28,0x3d,0xa5,0x9c,0xa6,0x9c,0x8d,0x8a,0x80,0x80,0x80,0x89,0xc3,0xa0,0x92,0x92,0x90,0xa3,0x99,0xb3,0x1f,0x13,0x05,0x01,0x03,0x04,0x12,0x1a,0x0c,0x0c,0x0e,0x10 -,0x0f,0x0f,0x07,0x0d,0x16,0x1e,0x26,0x1a,0x0a,0x0a,0x2d,0x32,0x27,0xa7,0x9b,0xbc,0x45,0x37,0x3c,0x14,0x0f,0xa7,0x86,0x85,0x96,0x42,0x23,0x1f,0x3d,0xc8,0xb8,0x96 -,0x8d,0x88,0x86,0x8d,0xc0,0x19,0x5b,0x8f,0x8f,0xaa,0xc5,0xcf,0xaf,0xb4,0xb1,0xcc,0x18,0x2d,0x89,0x81,0x90,0x1f,0x0d,0x30,0xae,0x9d,0xa8,0xa5,0x8d,0x96,0x9f,0x9d -,0x34,0x16,0x1e,0x9c,0x8c,0x95,0x22,0x27,0x28,0x1c,0x1e,0x1d,0x30,0x4a,0x9f,0xcf,0x2c,0x0d,0x07,0x06,0x13,0x2a,0x2a,0x2f,0xa1,0xab,0x3f,0x1c,0x0d,0x0f,0x09,0x28 -,0x9b,0x98,0xd7,0x24,0x24,0xb8,0xf9,0x25,0x35,0xd2,0xa8,0x99,0xb9,0xec,0x1e,0x13,0x5c,0xb1,0x94,0xae,0x1f,0x1f,0x24,0x29,0x10,0x18,0x3e,0xa3,0x96,0x88,0x8e,0x1f -,0x19,0x1d,0xa3,0x9e,0x64,0x4d,0x94,0x85,0x8c,0xa3,0x32,0x22,0x1a,0xbb,0x90,0x9c,0xb1,0x16,0x2a,0xac,0xad,0xd1,0x1c,0x29,0x9c,0x8f,0xb0,0xae,0x28,0x45,0x91,0x87 -,0x8c,0xc7,0xa4,0x8e,0x9f,0x57,0x17,0x15,0xf5,0xdc,0x93,0x99,0x5e,0x1c,0x14,0x2c,0xbf,0x1d,0x0d,0x1d,0x3f,0x8f,0x9f,0x2b,0x0f,0x0d,0x16,0x38,0x24,0x17,0x19,0x11 -,0xe1,0x2d,0x0c,0x09,0x0e,0x1f,0x28,0x34,0x9c,0x9b,0x45,0x16,0x1f,0x44,0xd0,0x37,0xab,0x9d,0x9a,0x48,0x24,0xbd,0x2d,0x48,0x5a,0x56,0xad,0xb2,0x3d,0x45,0x23,0x26 -,0xa3,0x94,0x8d,0x8d,0xa2,0xc9,0xa2,0xa5,0x52,0x9b,0xaf,0x99,0x9b,0x91,0x89,0x48,0x1c,0x18,0xaa,0x95,0xa2,0xcd,0xa8,0x8c,0x8a,0xad,0x42,0x2c,0x41,0x9e,0x9d,0xa9 -,0x32,0x5d,0xe6,0x98,0xa5,0x2a,0x1a,0x17,0xc3,0xd1,0x25,0x0f,0x0e,0x12,0xb8,0x9d,0x16,0x0e,0x10,0x4f,0xb0,0x16,0x13,0x11,0x22,0xbb,0xad,0xa1,0x75,0x1d,0x4d,0x46 -,0x5b,0x1e,0x12,0x4a,0x9e,0x86,0xa1,0x2d,0x1c,0x0f,0xeb,0x4d,0x2d,0x17,0x1b,0x2c,0xe3,0xca,0x0f,0x12,0x0d,0x1e,0xb1,0x3f,0x55,0xba,0x57,0xa6,0x96,0xa2,0xaf,0xd9 -,0x94,0x85,0x97,0xb7,0x23,0xc5,0x98,0x99,0x98,0xaf,0xad,0xb1,0xac,0xb4,0xab,0x32,0x49,0xa6,0x8a,0x8a,0x95,0x27,0x15,0x67,0x9d,0x97,0x37,0x21,0xa3,0x8b,0x8b,0xa9 -,0x1e,0x1e,0x16,0x1e,0xbc,0xc2,0x40,0x3b,0x1f,0x96,0x38,0x1f,0x1a,0x17,0xc7,0x30,0x39,0x1b,0x0d,0x09,0x21,0xbd,0xac,0x1d,0x09,0x14,0x10,0x1d,0x18,0x19,0x28,0x1e -,0x90,0x88,0x90,0x29,0x25,0x3c,0x9a,0xad,0x44,0xa9,0xad,0x8f,0x95,0x9e,0x22,0x13,0x0f,0xd7,0x9d,0x3c,0x2a,0x23,0xaf,0xa7,0xaf,0x5a,0x1c,0x52,0x4b,0xa9,0x23,0x1f -,0x26,0x28,0x9f,0x9f,0x8a,0xa9,0x1a,0x14,0x42,0xaf,0x3b,0x17,0xb6,0x85,0x85,0x8a,0x4e,0x24,0x1a,0x38,0xa5,0x9e,0xae,0x19,0xa4,0x97,0x90,0xd5,0x19,0x1a,0x38,0xa1 -,0xdb,0x3e,0x16,0xe2,0xb1,0x95,0xa0,0xb2,0x9f,0x1b,0x33,0x38,0xad,0x4a,0x10,0x9c,0x91,0x8a,0xa1,0x10,0x11,0x16,0x12,0x3e,0x24,0x1b,0x3a,0x38,0x99,0x2b,0x13,0x0f -,0x15,0x20,0x48,0x2a,0x12,0x10,0x2b,0x9e,0xa7,0x69,0xee,0xc7,0xbc,0xc8,0xbf,0xca,0x24,0x24,0x95,0x87,0x8b,0xcc,0x0d,0x2e,0xcc,0x99,0xa1,0x46,0xb9,0xb8,0x95,0x95 -,0x69,0x18,0x15,0x2d,0xad,0xa7,0xc3,0x29,0x1f,0x8f,0x9d,0x9e,0xd9,0xce,0x96,0x52,0x99,0x47,0x2d,0x28,0xa8,0x8b,0x90,0x94,0x33,0x1b,0x3d,0x24,0xca,0x1f,0x1b,0x53 -,0xe6,0xae,0x29,0x0e,0x0d,0x19,0x31,0xb2,0x29,0x1d,0x0e,0x36,0xae,0xad,0x25,0x22,0xac,0x29,0xd8,0x26,0x37,0x23,0x2c,0x8f,0x89,0x8c,0x2c,0x2e,0xec,0xb0,0xaf,0x46 -,0xab,0x2d,0xbd,0x9e,0xad,0x2f,0x19,0x18,0x32,0xc3,0xae,0x4e,0x0f,0xd0,0x65,0xa7,0xb8,0x1b,0xaa,0xa1,0xa8,0x5d,0x40,0x27,0x2c,0xc0,0x89,0x88,0xa8,0x1f,0x14,0x47 -,0xd0,0xb4,0xae,0x9d,0xb6,0x9f,0x98,0xd4,0x1b,0x0c,0x39,0xa0,0xbb,0x7c,0x13,0x11,0x26,0x35,0x49,0x77,0xca,0x3c,0x60,0xbf,0xa7,0x20,0x10,0x31,0x88,0x88,0x92,0x7b -,0x1d,0x44,0x37,0xa8,0x55,0xcd,0x62,0xb8,0x9c,0xa1,0x1c,0x0a,0x14,0x5b,0x9e,0xd4,0x17,0x16,0x4b,0x9a,0xb3,0xa8,0xb2,0x24,0x3a,0x9d,0x97,0xd5,0x14,0x1d,0x8e,0x90 -,0x92,0x16,0x12,0x1f,0x2e,0xad,0x2f,0x2d,0x1b,0xb2,0xa0,0xae,0x1b,0x0b,0x16,0x3d,0x9e,0xae,0x1c,0x17,0x33,0xa6,0xa1,0x9e,0xa1,0x29,0x21,0xa9,0xa7,0xcc,0x1a,0xb7 -,0x8b,0x8a,0x8f,0x31,0x2b,0x20,0x32,0xab,0x9d,0xa6,0x35,0xab,0xa0,0xa9,0xdf,0x1d,0x20,0xd5,0xa7,0xab,0x2b,0x22,0x51,0x2f,0xd0,0x96,0x9c,0x32,0x1f,0x1c,0x53,0xb8 -,0x1e,0xcb,0xd1,0xa3,0x99,0x32,0x2a,0x0e,0x16,0x44,0x9c,0x9e,0x2e,0x3f,0x3b,0xdf,0x59,0x2f,0x31,0x33,0x57,0xa5,0xf4,0x25,0x22,0x16,0x34,0x94,0x8b,0x66,0x21,0x21 -,0x63,0xa3,0x2c,0xc3,0xcf,0x9e,0x9a,0xae,0x24,0x0c,0x10,0x25,0x96,0x99,0xcd,0xb4,0xb6,0x47,0xbb,0x25,0x23,0x4c,0x31,0x9a,0xaa,0x25,0x30,0x19,0x36,0x92,0x8e,0xa6 -,0x2d,0x23,0x3e,0xb5,0x3c,0xc2,0xb6,0x92,0x95,0xab,0xbb,0x14,0x18,0x2a,0xa0,0x94,0xb9,0xbb,0xad,0x29,0x2a,0x2c,0x16,0x28,0x29,0xbc,0x99,0x24,0x2f,0x34,0x1f,0xa0 -,0x8e,0xa0,0x39,0x29,0x23,0xad,0x72,0xbc,0x9c,0xa4,0x94,0xa1,0x39,0x17,0x0e,0x10,0x3a,0x9c,0x92,0xce,0x44,0x2f,0x12,0x29,0x15,0x1c,0x1d,0x30,0x9e,0x31,0x1a,0x1e -,0x11,0x19,0x8e,0x98,0x3e,0x27,0x17,0xaf,0xac,0xa7,0xa6,0xa1,0x94,0x94,0x98,0xa5,0x1b,0x13,0x45,0x97,0x88,0x9a,0xab,0x30,0x22,0xce,0x27,0x26,0x17,0x28,0x97,0x94 -,0x3e,0x24,0x1c,0x11,0x98,0x8b,0x99,0x39,0x1c,0x2c,0xa6,0xaa,0xc1,0xb2,0xad,0x9c,0x9a,0x3d,0x13,0x0c,0x0d,0xf4,0x8d,0x9c,0xb7,0x32,0x16,0xcb,0x26,0x30,0x17,0x15 -,0x47,0x93,0xbd,0x18,0x1e,0x1a,0x36,0x9a,0x89,0xad,0x6c,0x15,0x37,0x9d,0x2d,0xa1,0xbd,0xae,0x90,0xb9,0x2a,0x1c,0x0e,0x1d,0x9a,0x9a,0x95,0xb5,0x45,0x54,0xdd,0xad -,0x2a,0x1b,0x1d,0x96,0x94,0x72,0x1e,0x1a,0x1a,0x23,0x98,0x94,0x9f,0x1a,0x18,0xc3,0x3e,0x28,0x26,0x56,0x99,0x9e,0xb7,0x3c,0x0d,0x0c,0x43,0x95,0x91,0xac,0x4b,0x30 -,0xed,0xab,0x35,0x4b,0x1d,0xbb,0x8f,0x97,0x6b,0x0e,0x14,0xc7,0xbb,0xa4,0x8f,0x23,0xe5,0x9e,0x9f,0x9d,0x1b,0x38,0xa6,0x8e,0x94,0xc0,0x2a,0x11,0x20,0xae,0xa9,0xdb -,0x3e,0x2f,0xa5,0xb7,0x1a,0x1a,0x0e,0x1a,0x5e,0xa7,0xad,0x22,0x09,0x1a,0xa0,0x29,0x2a,0xaf,0xa3,0x9e,0x9b,0xc5,0xbf,0x1b,0x14,0x9e,0xa4,0xab,0xdd,0x1b,0xb4,0x9d -,0xba,0x6e,0x4a,0x2c,0x9e,0x9a,0xb3,0xaf,0x1c,0x43,0xcd,0xb1,0xa3,0xe1,0x7b,0x38,0x46,0xac,0x38,0x16,0x20,0x97,0x8e,0xae,0xbd,0xab,0x1c,0x2e,0x37,0xd1,0xa8,0x27 -,0x55,0x94,0xa3,0x40,0x2e,0x0b,0x27,0x41,0xa9,0xa1,0xd4,0x2d,0x40,0xb7,0x3e,0xf5,0x35,0x35,0xa3,0x3a,0x1d,0x38,0x0f,0x0f,0x94,0x8a,0xa0,0xe7,0x1b,0xc9,0x5a,0x1a -,0x22,0xba,0x53,0x9b,0x8c,0x98,0x3a,0x13,0x11,0x4d,0x55,0x2d,0xae,0x29,0xb9,0x9f,0xb8,0x3a,0x21,0x38,0xa9,0x95,0x9d,0x11,0x16,0x21,0x58,0xa1,0x8c,0x8e,0xaf,0x46 -,0xaa,0x75,0x0b,0x0f,0x22,0xa6,0x8e,0x8e,0xad,0x36,0x12,0x35,0x42,0x27,0x2a,0x2d,0xae,0x9b,0xa0,0x2a,0x1c,0x1a,0x1d,0x98,0xaf,0x4b,0x1a,0x0d,0xb2,0xa6,0xc9,0xab -,0x8e,0x9c,0x92,0xcf,0x26,0x15,0x0e,0x50,0x90,0x87,0x93,0xb7,0x3e,0xe9,0x34,0x25,0x1c,0x22,0x1f,0xa7,0x8c,0xfb,0x55,0x1c,0x1b,0xb6,0x2a,0x4d,0x12,0x15,0x23,0xd8 -,0xaa,0x3a,0x1c,0xd6,0x8b,0x9e,0x2c,0x12,0x10,0x18,0xdd,0x8d,0x95,0x91,0xbd,0xc9,0x9b,0x37,0x1c,0x1b,0x30,0xc4,0x93,0xb4,0xaf,0x36,0xf3,0x99,0xa4,0x2a,0x18,0x21 -,0x1c,0x97,0xaf,0xef,0xc0,0x24,0xb2,0x8b,0x92,0x19,0x2b,0x19,0x3e,0x9b,0x37,0x9c,0xa5,0xbd,0xb2,0xaa,0x14,0x0e,0x0f,0x18,0x9c,0xc7,0xcc,0x32,0x36,0x5b,0xa2,0x35 -,0x0e,0x15,0x19,0xaa,0x92,0x6c,0x23,0xa9,0xfd,0xca,0x96,0x6b,0xcf,0x31,0xca,0x9b,0x60,0x1f,0xba,0xa9,0x9c,0x89,0xc7,0x3b,0x16,0x1b,0xc5,0x9e,0xb0,0x63,0x9d,0xb4 -,0x9a,0xb2,0x11,0x1c,0x16,0x2b,0x9a,0xa7,0x28,0x26,0x36,0xa2,0xa9,0x13,0x34,0x3c,0x2e,0xad,0x97,0x2e,0x1d,0x23,0xa8,0x8f,0x9c,0x2e,0x35,0x5a,0x1b,0xd1,0x1f,0x23 -,0xb5,0xb2,0x96,0x9d,0x1d,0x12,0x1f,0x2c,0xb3,0xa0,0x28,0xab,0x3c,0xfe,0x9f,0xba,0x16,0x1d,0x9a,0x9c,0x93,0x47,0x1f,0x2f,0x32,0xa5,0x91,0xe5,0xbe,0xa1,0xae,0x9f -,0x2b,0x0e,0x2c,0xd9,0xaf,0x99,0x6e,0x10,0x27,0x24,0x3e,0xbb,0x2a,0x2e,0xaf,0x9d,0x5c,0xcf,0x1e,0x2a,0x31,0x46,0x8a,0x98,0x17,0xcb,0xaf,0xcb,0xd9,0x28,0x32,0xab -,0xb2,0x9d,0xae,0x13,0x0c,0x23,0xaf,0xb1,0xbf,0x1c,0x3e,0xbb,0xbe,0xb3,0xb9,0x33,0xba,0xaa,0x97,0x9b,0x1a,0x15,0xae,0xb1,0xae,0x5d,0xc9,0xaa,0xd6,0x9d,0xb7,0x3e -,0x0e,0x26,0xa7,0xa1,0xa6,0xce,0x29,0x3b,0x2f,0x37,0xb3,0x15,0x1b,0x9e,0xb0,0xa9,0xf4,0x20,0xc3,0xbc,0xad,0xa1,0x26,0x11,0x29,0x24,0x9a,0xbf,0x2c,0x29,0x9e,0x90 -,0xcf,0xdc,0x18,0x35,0xdf,0xb0,0x9b,0xac,0x3f,0xa9,0x93,0xac,0x34,0x17,0x1b,0x36,0xe2,0xa1,0xbe,0x3d,0x1d,0xb2,0xbf,0xd6,0x31,0x16,0x29,0x26,0xba,0x35,0x4a,0x1a -,0xbb,0xa0,0xa0,0x95,0x16,0x38,0xaa,0xa0,0xb4,0x3f,0xe7,0xaf,0x96,0x9d,0x99,0x26,0x18,0x30,0xbe,0xc2,0xaa,0x4d,0x21,0x9f,0xd9,0x9f,0x2f,0x14,0x1e,0x4b,0xab,0x2b -,0x27,0x0b,0x5b,0xb4,0x2d,0xdd,0x49,0xb0,0x46,0xa9,0xc8,0xc4,0x1c,0x1d,0xa0,0x9e,0x9a,0xa8,0x46,0x5e,0xa7,0x41,0xac,0x3a,0x1d,0xa8,0x9e,0x9d,0xba,0x30,0x28,0x43 -,0xbd,0xa7,0xe5,0x14,0x41,0x67,0x9f,0xd0,0x2f,0x1e,0x21,0x8f,0x37,0xb5,0x32,0x22,0xd4,0xdd,0xb7,0xcf,0x34,0x4f,0x9b,0xcd,0xc9,0x40,0x1b,0x23,0x62,0xa1,0xa9,0xb4 -,0x26,0x42,0xab,0x3d,0x54,0x1f,0x2c,0xbe,0xb8,0x34,0xb7,0x1d,0x2a,0xb6,0xe0,0x96,0x26,0x31,0xe3,0xa8,0xbb,0x3c,0xbe,0x28,0x9a,0x98,0x99,0xaa,0x26,0x21,0xf8,0xcd -,0x46,0xaa,0x29,0xad,0xae,0xbc,0x2f,0x1c,0x25,0xc6,0xb1,0x42,0x2c,0x1e,0x3b,0x32,0xb5,0x3f,0xa1,0xd8,0x26,0x99,0x3f,0x3f,0x44,0x2c,0xbe,0xa6,0x9a,0xae,0xc7,0x19 -,0x50,0xbb,0x3b,0x63,0x1e,0xcb,0xa9,0xaf,0x3e,0x37,0x20,0x32,0xb2,0x5f,0xc8,0x1e,0x2f,0x3f,0xb4,0xb1,0x38,0xa1,0xbf,0xa8,0x9c,0x3a,0x31,0x47,0x34,0x8c,0x9d,0x9a -,0xa3,0x1b,0xac,0x40,0x65,0x70,0x20,0x33,0xe5,0xef,0x39,0x3c,0x1e,0x1a,0x46,0x37,0x3f,0x1d,0x19,0x32,0xa8,0x2d,0x44,0xca,0x9b,0xb0,0xc1,0xac,0x19,0x30,0x1a,0x9a -,0x94,0xa9,0x96,0xad,0xaf,0xde,0x47,0x41,0x2b,0xc4,0xac,0x9d,0xe9,0x78,0xd1,0x33,0x45,0xc0,0x1f,0x1d,0x16,0x16,0xa5,0x22,0x29,0x3d,0x9c,0xa0,0x3b,0xb8,0x2a,0x24 -,0x23,0xb0,0x9a,0xa6,0x9e,0x97,0xa2,0x4f,0x3a,0x1d,0x34,0x5e,0xa9,0x97,0xa8,0xaf,0xc2,0x60,0x31,0xbb,0x2a,0x2d,0x1c,0x0f,0xd8,0x58,0x3b,0x2d,0xae,0x94,0xcf,0xb3 -,0x29,0x23,0x1f,0x1a,0x9e,0xa1,0xaf,0x98,0xa5,0xa8,0xaf,0x21,0x2a,0x1a,0x36,0xac,0xa1,0xbe,0x50,0xdb,0x25,0x2f,0x29,0x1f,0x1e,0x10,0x24,0xc3,0x2e,0x36,0xb7,0x90 -,0xa6,0x9d,0xb4,0x27,0x27,0x1a,0x9c,0x98,0xa8,0x8e,0x9a,0x9d,0xae,0x2a,0x35,0x18,0x2d,0xbb,0xa4,0xce,0x44,0xcb,0xbf,0x45,0x24,0x22,0x1e,0x1b,0x45,0xa1,0xdd,0x29 -,0xb1,0x97,0xa3,0xaa,0xa8,0x50,0x2b,0x18,0xbc,0xaf,0x62,0x95,0xb5,0xa2,0xbc,0x30,0x1f,0x16,0x1c,0x4a,0xe7,0xdd,0x46,0xbd,0x48,0x3c,0x3d,0x1d,0x15,0x0f,0x35,0x4f -,0x77,0x43,0x94,0x98,0x37,0xa7,0xb3,0x34,0x40,0x27,0x9a,0xa4,0xa3,0xa8,0xb8,0xd6,0xdb,0xa3,0x2f,0x38,0x29,0x3b,0xad,0xa9,0xbc,0xaf,0x50,0xb2,0xa7,0xee,0x1e,0x21 -,0x22,0x32,0x2e,0xad,0x8b,0x9c,0x38,0xa1,0x3b,0x1b,0x1f,0x1a,0xcc,0xa2,0x9b,0xae,0xcc,0x1c,0x29,0x4f,0x27,0x4a,0x4f,0x23,0xce,0xbc,0x4b,0x2f,0x2a,0x34,0xb3,0x25 -,0x1d,0x43,0x19,0x1c,0x30,0x92,0x93,0xb9,0xb4,0xa0,0xcf,0x2c,0xb7,0x4e,0x57,0x96,0x8c,0x93,0xa7,0x2c,0x43,0x49,0x1c,0xc1,0x49,0x34,0xde,0xaf,0xbf,0xe7,0x2e,0x2b -,0xb5,0x18,0x2a,0x38,0x18,0x1a,0xb1,0x8b,0xa8,0xba,0x3c,0x2e,0x2e,0x28,0xb5,0x46,0xb0,0x98,0x98,0xa3,0xa7,0x20,0x2d,0x3b,0x25,0xbc,0x3a,0x31,0x60,0xad,0x5b,0xe5 -,0x1e,0x1b,0x21,0x13,0x2a,0x39,0x17,0x1b,0x8d,0x96,0xb4,0x9c,0x2f,0x53,0x18,0xc2,0x97,0xc6,0x9a,0x8f,0x98,0xab,0xa9,0x2a,0x28,0x30,0xe5,0xa7,0xe6,0x1f,0xb4,0xaf -,0x30,0xba,0x2c,0x28,0x18,0x18,0x44,0x3b,0x16,0xa7,0x8b,0x41,0x9b,0xb5,0x1b,0x25,0x15,0x9e,0xa2,0xad,0xa7,0x9b,0xac,0x33,0xb3,0x1b,0x1e,0x2b,0x2c,0xa9,0xad,0x1c -,0xb2,0x77,0x25,0xac,0x30,0x23,0x21,0x27,0xc3,0xca,0x28,0x8e,0x8f,0xaa,0x93,0x6a,0x24,0x17,0x47,0xc6,0x9d,0x93,0x6c,0x99,0x3e,0x64,0xad,0x11,0x1b,0x32,0x32,0xab -,0xa6,0x23,0xca,0x37,0x1f,0xc9,0x1f,0x14,0x1e,0x2b,0x1f,0xae,0xa0,0xa5,0xa1,0xbf,0xaf,0xc3,0x15,0x1c,0xb4,0x2b,0x8f,0x92,0x3f,0x90,0xc3,0x5d,0xa9,0x1a,0x19,0x6b -,0x3b,0xac,0x90,0x3f,0x45,0xfe,0x1b,0xc6,0xdd,0x0e,0x2c,0xd5,0x22,0x97,0x8f,0xc3,0x9e,0xc0,0x48,0xb8,0x0d,0x1a,0xb8,0x2d,0x8d,0x93,0x54,0xa0,0x29,0x2c,0xb5,0x43 -,0x18,0xbb,0x3d,0x47,0x8c,0x2c,0x2d,0xb3,0x1d,0x42,0x3a,0x0c,0x20,0x3c,0x12,0x91,0x8f,0x36,0x9c,0x2c,0x3c,0xd0,0x13,0x26,0xbc,0xd6,0x91,0x8e,0xc0,0xc8,0xec,0x21 -,0xc6,0xaa,0x14,0xb3,0x54,0xe3,0x8d,0x57,0x2b,0xb1,0x1d,0x2d,0xac,0x14,0x20,0x37,0x13,0x8f,0x8c,0x42,0x9d,0xcd,0x22,0xce,0x1b,0x1a,0xad,0x36,0x9e,0x8f,0xa7,0x34 -,0xc5,0x1d,0x3b,0xa9,0x18,0xc8,0xbc,0x3f,0x90,0xc3,0x15,0xd5,0x1e,0x25,0xae,0x16,0x18,0x2f,0x0f,0x99,0x8b,0xe6,0x9e,0xae,0x19,0xba,0x7d,0x29,0xbd,0xb5,0x9e,0x8c -,0x9d,0x3d,0xb3,0x1d,0x36,0xa6,0x1f,0x3c,0xc3,0x2b,0x9d,0xb3,0x25,0x4c,0x23,0x1f,0xd5,0x1d,0x25,0x2e,0x19,0x9f,0x88,0xee,0xc3,0xa7,0x1d,0xc1,0x3b,0x23,0x3b,0x2e -,0xa8,0x95,0x9c,0xd6,0xbb,0x1f,0x2c,0x9d,0x26,0x4c,0xb0,0xca,0xa8,0x9d,0x23,0x2d,0x26,0x24,0xbe,0x23,0x2e,0x2d,0x12,0x43,0x89,0xa9,0x4d,0xa2,0x32,0x30,0x38,0x44 -,0x36,0xe2,0xa7,0xa1,0x96,0x46,0xba,0x26,0x1b,0xad,0xce,0x36,0xe5,0xa6,0xa7,0xa7,0x32,0x26,0x1c,0x27,0x48,0x6d,0x2c,0x2e,0x2a,0x1a,0x90,0x9e,0x54,0xac,0x3a,0x44 -,0x2f,0x3f,0x23,0x33,0xab,0x9e,0x94,0xa4,0x58,0x4e,0x28,0x35,0xab,0x33,0xcf,0xb5,0xbb,0x9d,0x27,0x29,0x2d,0x28,0x53,0x6e,0x28,0x2a,0xc0,0x16,0xa8,0x92,0x6d,0xae -,0xab,0xc6,0x3e,0x41,0x2a,0xd5,0x5d,0xa8,0x96,0xa5,0xed,0x3c,0x4b,0x24,0xc5,0x20,0x45,0xa8,0x2d,0xa2,0xed,0x33,0x29,0x36,0x38,0xc7,0x2b,0x17,0xbf,0x1c,0x22,0x9c -,0x95,0x38,0xb1,0xe6,0xc0,0xc8,0x1f,0xa9,0x41,0xac,0xa7,0xa7,0xb5,0xbe,0xb1,0x26,0xa8,0x37,0x26,0xac,0xbf,0xc4,0xb2,0x3c,0x2a,0xcf,0x1b,0xa4,0xc5,0x16,0x36,0x56 -,0x21,0x22,0x96,0xab,0xcd,0xad,0xc0,0xbb,0x18,0x24,0xb5,0x37,0xb0,0x95,0xae,0xb2,0xee,0x1c,0xb9,0x20,0x31,0xf8,0xe8,0x2f,0xc2,0x9c,0xa9,0x9e,0xe1,0x4e,0x24,0x41 -,0x22,0x1f,0x30,0x29,0xa3,0x90,0x9c,0x3f,0x2c,0x27,0x34,0x11,0x1e,0xbe,0x18,0x8e,0x86,0x8e,0x9c,0x29,0x1b,0x29,0x22,0x15,0x18,0x1c,0x8b,0x84,0x89,0x9d,0x22,0x0d -,0x0e,0x33,0x16,0x14,0x1a,0x28,0xa4,0x2b,0xd6,0xad,0xbb,0x95,0x93,0x27,0x0b,0x0f,0x17,0xae,0x88,0x83,0x9a,0xb7,0x27,0x38,0xac,0x1a,0x2e,0x22,0xdf,0x94,0xae,0x46 -,0xbb,0x6a,0x23,0xa6,0x28,0x2a,0x4a,0x3d,0xa5,0x95,0x3b,0x09,0x27,0xca,0xcf,0xb2,0xa8,0x33,0x0c,0x04,0x2a,0x94,0x94,0x88,0x97,0xa6,0x97,0xb4,0xbc,0x68,0xc3,0xdb -,0xbb,0x2f,0xb5,0xcb,0x13,0x20,0xa2,0xa5,0x12,0x08,0x01,0x0e,0xa9,0x96,0x37,0xef,0x8a,0x85,0x94,0x9e,0x54,0x09,0x18,0x8c,0x9c,0x4c,0xd2,0xe2,0x9d,0xab,0x1d,0x0d -,0x0a,0x15,0x9c,0x91,0x94,0xc8,0x27,0x26,0x9d,0x92,0xaf,0x21,0x0d,0x2e,0xa4,0xda,0x46,0x3c,0x31,0xb6,0x9f,0x40,0x1d,0x0e,0x10,0xab,0x8e,0x91,0xb2,0xa4,0x94,0x8c -,0xc5,0x25,0x0f,0x12,0xf6,0xb5,0xdb,0xbc,0x46,0x1e,0xaf,0xae,0x23,0x42,0x46,0x2b,0xbe,0x3f,0x4f,0xad,0x92,0xa3,0x2a,0x1c,0xb9,0x2c,0x22,0xad,0x95,0x9c,0x25,0x10 -,0x0d,0x1d,0x31,0x9f,0x9d,0xc2,0x27,0xbc,0xa3,0x95,0x9a,0x1a,0x22,0xa1,0x99,0xae,0xd7,0x6e,0xc9,0xa8,0x29,0x16,0x0c,0x0d,0x2b,0xb0,0xb1,0xaf,0x48,0x2b,0xa0,0x8f -,0x9c,0x1d,0x19,0x1e,0xb6,0xaf,0x98,0x86,0x86,0x8d,0xa9,0x27,0x0d,0x05,0x0e,0xb8,0xb5,0x2e,0x2d,0xb6,0x99,0x9f,0x3a,0x14,0x0c,0x0d,0x20,0x15,0x11,0x93,0x90,0x97 -,0x9e,0x96,0xe9,0x27,0x56,0x29,0x39,0x41,0x9f,0x8e,0x8c,0x8e,0x9f,0x21,0x1e,0x17,0x0f,0x1b,0xb8,0xb9,0xa8,0xa0,0xb7,0x1c,0x12,0x1b,0xb7,0x9e,0xae,0x5c,0x3c,0xba -,0xad,0x99,0x2d,0x12,0x19,0x2e,0x9c,0xad,0xb9,0xa5,0x1a,0x24,0x53,0xc5,0xa5,0xb9,0xa3,0x96,0xcf,0x22,0x30,0xb5,0xa5,0x99,0xab,0x23,0x15,0x1f,0xd0,0xb9,0xaf,0x4c -,0x49,0x2b,0x34,0x1e,0x17,0x4a,0xa4,0xcc,0x5e,0x2e,0x3e,0x9a,0x93,0x97,0xad,0x6b,0x47,0x16,0x10,0x33,0xc3,0xa3,0xac,0x58,0x1a,0x1f,0xbb,0x90,0x8e,0xba,0x26,0x37 -,0xad,0x9d,0x98,0xa9,0x3f,0x1b,0x10,0x17,0x2d,0xbe,0xbb,0xac,0x30,0x10,0x13,0x0f,0x3b,0x9b,0x8d,0x8f,0xc3,0x3d,0xcd,0xb3,0xab,0xc0,0xb7,0xbe,0x42,0x72,0xeb,0x58 -,0xe2,0xae,0x3e,0x1f,0x18,0x17,0x2b,0xaf,0xa3,0xad,0x46,0x5f,0xb9,0xa3,0xee,0x4d,0xc8,0x1b,0x1f,0x3c,0xb4,0x96,0xa1,0xc5,0xc1,0x1f,0x18,0x1b,0x2f,0x9c,0x9f,0xac -,0xaf,0xbc,0x97,0x99,0xae,0x47,0x29,0x36,0x2a,0x16,0x17,0x1e,0xbf,0xa8,0x36,0x24,0x1d,0x40,0xac,0xbc,0xaa,0xb3,0xbd,0x96,0xaa,0xc2,0xa0,0x4c,0x20,0x22,0x2f,0x9d -,0xa0,0xa1,0xac,0x2d,0x1e,0x17,0x16,0x3c,0x98,0x92,0xa0,0x31,0x4f,0xb7,0xa9,0xaf,0xcf,0x39,0x2e,0x3d,0x39,0xd9,0xaf,0x3e,0x32,0x27,0x1b,0x15,0x1a,0x22,0x2e,0xae -,0xaa,0xb0,0xa8,0xa6,0xac,0x9e,0xac,0x30,0x23,0x4c,0xaf,0x94,0x91,0x97,0xba,0x1b,0x16,0x0c,0x1b,0xb6,0xa6,0xa4,0x3d,0x26,0xca,0xb4,0xa9,0x9e,0x43,0x54,0x29,0x0f -,0x17,0x1d,0x63,0x97,0x9b,0xb1,0x32,0x1e,0xaf,0xab,0xad,0xd8,0xf9,0x9c,0x9c,0x99,0x9c,0xb5,0x4b,0x1d,0x1c,0x2d,0xed,0x9e,0xaa,0xdc,0x3f,0x23,0x0e,0x0b,0x14,0xc2 -,0xad,0xac,0x2f,0x12,0x27,0xbc,0x92,0x98,0xc8,0xab,0xc0,0x3f,0x38,0x6d,0x9a,0xa9,0xac,0x6f,0x28,0x4f,0x2f,0x2f,0xbf,0xaf,0xa1,0xd8,0x39,0xef,0xc7,0xaa,0x40,0x20 -,0x34,0xbf,0x9c,0xa1,0x7c,0x3f,0x16,0x14,0x26,0x28,0xab,0xa1,0x5d,0xad,0x37,0xbd,0xad,0xa6,0xa4,0xdc,0xac,0xc0,0x34,0x2e,0x2a,0xcb,0x9e,0xb0,0xe0,0x22,0x28,0xce -,0xd7,0x4f,0x3a,0x59,0xab,0xa3,0xc2,0x28,0x21,0x14,0x11,0x17,0x20,0x9c,0x99,0xbb,0x9f,0x6d,0x37,0x29,0x28,0xae,0xae,0x9c,0xa7,0xdf,0xc5,0x9a,0x91,0x98,0xc3,0x1e -,0x28,0x3f,0x6f,0xca,0x5c,0x56,0xb8,0x3c,0x18,0x14,0x14,0x1f,0x1e,0x4a,0x3c,0x6d,0x9d,0xd4,0x9e,0x9c,0x54,0x46,0x4b,0xb2,0xa3,0xab,0x99,0xab,0xf9,0xb8,0xed,0xec -,0xde,0xcf,0xef,0x39,0x46,0x26,0x33,0xa9,0xa8,0xbb,0x33,0x20,0x15,0x1c,0x1a,0x22,0x2e,0x38,0xa8,0xc2,0xcc,0xa1,0xdc,0xa3,0xaa,0xcc,0xa2,0xab,0x9e,0xb6,0x31,0x3e -,0xcb,0x5c,0x49,0x41,0x49,0x54,0xc9,0x42,0x27,0x3d,0x2c,0x1e,0x37,0x44,0x47,0x32,0xd8,0x2c,0xcb,0xaf,0xa0,0x9d,0x3e,0x9a,0xbd,0xef,0xdf,0x57,0xab,0xa3,0x4a,0x26 -,0x1c,0x45,0xc2,0xac,0x9e,0xad,0xa4,0xc2,0x3f,0x2f,0x37,0x2e,0x2b,0x5a,0xee,0x66,0x36,0x1f,0x3c,0x1e,0x1d,0x15,0x2e,0xb0,0x5f,0x96,0x9d,0xbd,0xba,0xae,0xa7,0xb4 -,0xa7,0xc7,0x55,0x37,0x76,0xcf,0x37,0xa7,0xa8,0x68,0x34,0x23,0x18,0x36,0xcd,0xa6,0xab,0xac,0xaf,0xae,0xbd,0x1b,0x15,0x17,0x26,0x37,0x47,0x9d,0x9a,0xba,0xdb,0x36 -,0x39,0x3f,0x44,0x5c,0xbd,0xad,0xa4,0xa5,0xa4,0x9c,0x94,0x9d,0x4d,0x36,0x1c,0x1f,0x3b,0xd2,0xbf,0xee,0x35,0x1d,0x1f,0x13,0x14,0x19,0x54,0xb9,0x3d,0x95,0x9c,0xad -,0xa3,0xa3,0x3a,0x21,0x3b,0xdf,0xb7,0xa2,0x9a,0xb3,0x3b,0x44,0xb6,0xce,0xd8,0xb7,0x2a,0x22,0x2c,0x70,0xb4,0xac,0xb8,0x32,0x30,0x15,0x15,0x1a,0x3e,0xc4,0xda,0xa2 -,0xc2,0xb3,0xbe,0xbf,0xaa,0xbd,0xae,0xb7,0xb8,0xa4,0x9b,0xa4,0xb7,0xaf,0xd9,0xe2,0x24,0x27,0x27,0x3a,0x3c,0x2a,0x29,0x39,0x31,0x1e,0x3a,0x1d,0x24,0x2e,0xb5,0xc6 -,0xac,0x8d,0x96,0xa9,0xed,0x6e,0xc8,0xfe,0xae,0xa8,0x56,0xcd,0x49,0x1e,0x2d,0x4a,0xc7,0xd6,0x42,0xd1,0x3b,0x37,0x44,0xbd,0xbe,0xce,0x2a,0x1d,0x46,0x36,0x3a,0x38 -,0xab,0x45,0x2c,0xa4,0x47,0xf4,0xcc,0xb5,0x49,0xc6,0xa7,0xa2,0x9f,0xa5,0xa8,0x3f,0x3d,0x2e,0x36,0x79,0xa6,0xae,0x39,0x1a,0x19,0x29,0x66,0x9e,0xd0,0x50,0x2f,0x20 -,0x3a,0xc3,0x98,0xaf,0xb2,0xa1,0x3a,0x21,0x38,0xce,0xe4,0xcd,0xdd,0x3e,0x31,0x7c,0x3f,0x33,0x37,0x4f,0x49,0xc0,0x9e,0xa0,0x9e,0xa3,0x5e,0x2d,0x23,0xe7,0x51,0x4f -,0xcb,0x28,0x23,0x23,0x48,0x1f,0xc9,0x9e,0xc4,0x49,0x3a,0x5c,0xc9,0xad,0x9f,0x9f,0xb2,0xb8,0x27,0x47,0x59,0xe8,0xdb,0x41,0xc7,0x42,0xdc,0x50,0xe6,0x48,0x25,0x37 -,0x32,0x2c,0xd9,0x41,0x2d,0xba,0xa9,0x48,0x3c,0xb4,0x4f,0xc9,0xba,0x57,0x3e,0x32,0xa6,0xa4,0x9e,0xa6,0xae,0xc5,0xcb,0xac,0x3e,0x5f,0xde,0x5d,0xad,0xcb,0x24,0x1e -,0x29,0xdb,0x31,0x1e,0x1b,0x19,0x1e,0x41,0xa1,0xcf,0xf9,0xa6,0x6c,0xa5,0x9c,0xa1,0x9f,0xc4,0xbb,0xb4,0x9f,0x9a,0xc1,0x4a,0x34,0x3b,0x1f,0x16,0x1e,0x28,0x30,0x4f -,0x3e,0x2b,0x33,0x5d,0xb7,0x24,0x5d,0x3d,0x1f,0x42,0x97,0x99,0xc8,0x98,0xb7,0x3d,0xc6,0xb8,0x30,0x2c,0xad,0xa1,0xa0,0xa7,0xbc,0x7b,0xaf,0xbd,0x3f,0x21,0x1f,0x1d -,0x25,0xcd,0xbf,0xc8,0x2e,0x22,0x2c,0x5b,0x47,0x56,0x23,0x18,0xb0,0x8e,0x9c,0x99,0xa3,0x32,0xd6,0xb6,0xbe,0x2a,0x35,0xb3,0xfb,0xbd,0xb1,0x35,0x33,0x24,0x2b,0x1f -,0x20,0x32,0x33,0xa3,0x9e,0xa9,0xbc,0xc5,0xbe,0x9f,0xbc,0x24,0x25,0x18,0x26,0x9d,0x92,0x38,0x33,0x3a,0x2a,0xab,0xaa,0x45,0x1a,0x33,0xac,0x9f,0x9d,0xa2,0xf2,0x36 -,0xd4,0xb9,0xca,0x2b,0x2c,0x2b,0xbd,0x9c,0xcd,0x1f,0x21,0x3e,0xaa,0xed,0x21,0x22,0x1e,0x2d,0x9b,0xa9,0x2e,0xae,0xc6,0x79,0xc6,0xc0,0x2c,0x1e,0xbf,0xa6,0xba,0xa8 -,0xac,0x71,0xb0,0xa2,0xa6,0x23,0x19,0x39,0xaa,0x95,0x9f,0x2e,0x1b,0x3a,0xb3,0xa3,0x3f,0x10,0x0e,0x12,0x28,0xb4,0xa9,0x1f,0x27,0xa8,0x9a,0x97,0x9c,0x4c,0x25,0xab -,0x9c,0x9c,0x9e,0xa9,0x6b,0x4e,0xb0,0x3c,0x17,0x18,0x26,0xde,0x3b,0x2e,0x25,0x4d,0xb4,0xc4,0xaf,0xda,0x1f,0x24,0xb4,0x37,0x3b,0xad,0xa9,0xce,0x9a,0x9a,0x3e,0x1a -,0x1e,0xe9,0xb6,0x92,0xad,0x2b,0xf4,0xa3,0x9b,0xaf,0x40,0x13,0x17,0x42,0xb2,0xae,0x33,0x27,0x23,0x34,0x53,0xb1,0x6e,0x28,0x19,0x1b,0xaa,0xb4,0xcc,0x9d,0xa2,0x9f -,0x8e,0xbc,0x1d,0x32,0xa8,0x9d,0xac,0xca,0x2f,0x2c,0xc3,0xb7,0x2a,0x1c,0x1b,0x21,0xb1,0xac,0xbc,0xb9,0xbb,0xac,0xb9,0xa2,0x3d,0x19,0x1f,0x43,0xbf,0xdb,0x23,0x0e -,0x2b,0x96,0x99,0xb7,0x2f,0x17,0x26,0xa3,0x93,0x9c,0x63,0xd1,0x2b,0xc2,0xa2,0xc0,0xb2,0xd6,0x2d,0x2f,0xee,0xf3,0xcf,0x5e,0xae,0xcf,0x45,0x1f,0x13,0x37,0xa9,0xae -,0x4d,0x1f,0x38,0xac,0xfc,0xae,0xc0,0x25,0xa9,0xb1,0xb8,0xb7,0x44,0xa6,0xda,0x53,0xf9,0x5e,0x44,0x37,0xdf,0xae,0xa3,0xaf,0x31,0x2d,0xbd,0x9b,0xa4,0x2b,0x10,0x10 -,0x1d,0xce,0xb1,0xcf,0x3e,0x20,0x1b,0x42,0xad,0x53,0x98,0xa8,0xc6,0xa2,0x9c,0xac,0xb5,0xad,0x47,0xbf,0x33,0x2e,0x1f,0x40,0xa2,0xc8,0x2b,0x2d,0x41,0x5f,0xa5,0xa5 -,0x2e,0x1f,0x23,0x2b,0xbd,0xa1,0xac,0xbc,0xe0,0x22,0x20,0x34,0xaf,0x3f,0xe1,0xa5,0xb0,0xb9,0x5b,0x3e,0xea,0x9c,0xa5,0xbd,0x1f,0x40,0xb5,0x53,0xb7,0x4b,0x54,0x33 -,0x4b,0x44,0x37,0x41,0x51,0x2f,0x22,0xe0,0xde,0xaf,0x5a,0x49,0xb3,0xc7,0x54,0x30,0x3e,0xbf,0x9d,0x3c,0x24,0x24,0x22,0xbe,0x9e,0x9b,0x4e,0x35,0x37,0x34,0xab,0xa2 -,0xa9,0x7b,0xd9,0xb0,0xbd,0xdc,0xc5,0x30,0x2c,0xb3,0x68,0x6e,0x36,0x38,0xec,0xb2,0xc2,0x22,0x2b,0x37,0xb0,0xbf,0xd1,0x4b,0x38,0x44,0xc9,0x9c,0xb4,0xa1,0xd9,0x34 -,0x2e,0x37,0xb1,0x42,0x71,0x47,0xc2,0x36,0x3a,0x2c,0x2b,0x58,0xbc,0xc1,0x2a,0x5b,0x66,0x9f,0xb6,0x35,0x28,0x20,0x3a,0xc4,0x9d,0xab,0x42,0x16,0x2c,0xdb,0xb2,0x99 -,0xa5,0x67,0x2a,0xa6,0xad,0xba,0xb1,0x38,0xbf,0xcb,0x59,0x24,0x21,0x2c,0x3a,0xb8,0xb6,0xe0,0x37,0xee,0x4c,0xac,0xae,0xa8,0xb4,0xed,0xad,0x5d,0xb8,0x49,0xee,0xcc -,0xf2,0x29,0x25,0x2b,0x23,0xc6,0x41,0x36,0x1d,0x34,0xe5,0xb9,0xa7,0xdb,0x3a,0x2c,0xb1,0xa8,0x9b,0xa3,0xde,0x3b,0x33,0xae,0xa7,0xa9,0xac,0x4a,0x45,0xd0,0xee,0x2e -,0x20,0x28,0xe0,0xc5,0x46,0x39,0x1f,0x20,0x31,0x57,0xe8,0xb4,0xbd,0x3b,0x2e,0x4f,0xb9,0x47,0x9c,0x99,0x9b,0xa8,0x3f,0x42,0x2d,0xae,0xa9,0xb8,0x42,0x4d,0x3b,0x74 -,0x3c,0x1b,0x23,0x26,0xbf,0xb4,0xce,0x37,0x27,0x2c,0x46,0x9f,0xa2,0xad,0xdc,0x4b,0xe2,0xba,0xb6,0x5d,0x63,0xc4,0x9e,0xb2,0x45,0x29,0x1b,0x1e,0x29,0x79,0xb5,0xb1 -,0x6f,0xdf,0x4b,0x39,0x2e,0x4c,0xa7,0xa5,0xa1,0xb3,0x65,0x49,0x68,0xbd,0xb2,0xaf,0xfc,0xc5,0x3c,0x39,0x3c,0x1f,0x32,0x38,0xb0,0xa9,0x38,0x21,0x20,0x21,0x43,0xbe -,0xbb,0xaf,0x2a,0xce,0xbc,0xc8,0xd0,0x3f,0xb0,0xbe,0xad,0x9e,0x9f,0xbb,0xc4,0xc9,0xb3,0xb5,0x3b,0x3d,0x2c,0x2d,0x2d,0x2c,0x2d,0x3e,0x27,0x2f,0xd0,0x27,0x48,0x47 -,0xef,0xad,0xc2,0xa3,0x9f,0xa8,0x9f,0xa5,0x45,0x3d,0x3e,0xd9,0xaa,0xc9,0xad,0x35,0x31,0x4e,0x51,0xcb,0x26,0x2c,0x31,0x2e,0x2d,0x58,0x3f,0x3f,0x5d,0xe7,0xb5,0x45 -,0x28,0x27,0x4c,0xb8,0xad,0xb0,0xb8,0xb9,0xd5,0xa8,0xb2,0xf6,0x39,0x43,0xda,0xd0,0xb3,0xaf,0xb9,0x4f,0xc0,0x3a,0x39,0x42,0x28,0x46,0x2e,0x2d,0x5f,0xcf,0xbc,0xba -,0xca,0x36,0x30,0x35,0xc7,0xbc,0xa7,0xbc,0x4b,0xca,0xc7,0xa6,0xab,0xc8,0x31,0x3d,0x41,0x6c,0xd9,0xc7,0xbb,0x44,0x5b,0xbe,0xb7,0xd7,0x45,0x2f,0x49,0x4d,0xb5,0x9e -,0x79,0x48,0x2b,0x37,0x3f,0x2c,0x41,0x3b,0x30,0x28,0x3b,0xc1,0xc3,0x45,0xb9,0xd7,0x5b,0xb3,0xb9,0xae,0x59,0x5e,0xbe,0xbb,0xaf,0xbd,0xae,0x5a,0x2d,0x3c,0xc7,0xc8 -,0xe3,0xed,0xf2,0x4d,0x2f,0xc4,0x5c,0x33,0x36,0x3e,0xbc,0x43,0x3c,0xb8,0x50,0x42,0xdd,0x4f,0x40,0x3d,0x42,0xbe,0x55,0x4c,0xc2,0xae,0xae,0xda,0xbc,0xca,0xca,0xd1 -,0xb6,0xe3,0x4a,0x4c,0xb7,0xb9,0xf9,0x42,0x35,0x2b,0x1f,0x56,0xba,0xcf,0x2c,0x35,0xbf,0xb9,0xc8,0xb6,0xb9,0x2d,0x29,0xef,0xb6,0xaa,0xab,0xac,0xd6,0x41,0xcf,0xbe -,0xc9,0x35,0x2f,0x47,0x3d,0x43,0xbd,0xc6,0xc6,0xde,0xbf,0xbd,0x3b,0x36,0xdf,0x49,0x35,0x34,0x6e,0xf9,0x34,0x4d,0xc6,0x37,0x2d,0x2e,0x53,0xb6,0x64,0xaa,0xaf,0xc9 -,0xc2,0xc9,0xb4,0xbe,0x65,0xd8,0xf3,0x49,0x47,0xcb,0xb4,0xdc,0xc8,0xb6,0xfe,0x3c,0x39,0x5d,0x4f,0x39,0x6a,0xbb,0x55,0x2b,0x6a,0xd1,0x77,0x49,0x3c,0x4d,0x5c,0xc4 -,0xab,0xae,0xc8,0xc6,0xbd,0xc9,0x4b,0x3f,0x52,0x3e,0xcd,0xa9,0xc4,0x4c,0x34,0x39,0xc5,0xbf,0xdd,0x4a,0x29,0x24,0x2c,0xef,0xb2,0xe5,0x3e,0x3f,0x30,0x2d,0x4e,0x50 -,0xc3,0x55,0xd6,0xa3,0xab,0xaf,0xad,0xb1,0xd4,0x5b,0xff,0xc4,0x43,0xe3,0xad,0xae,0xca,0x3c,0x40,0x39,0x3f,0x4c,0xe1,0x38,0x44,0xbe,0xfd,0xd9,0x4e,0x60,0xee,0x30 -,0x30,0x36,0x38,0x49,0xce,0xaa,0xa8,0xca,0xc2,0xcb,0x2e,0x3b,0xdb,0xdf,0x53,0xdb,0xaf,0xaa,0xbe,0xdd,0xcc,0x3a,0x2d,0x27,0x2e,0x3f,0xd3,0xcc,0xc2,0xc4,0x73,0xc9 -,0x59,0x3a,0x27,0x2f,0x3f,0xcf,0xab,0xae,0xac,0xc7,0xb2,0xac,0xbc,0x37,0x26,0x2d,0x3b,0xaf,0xba,0xa7,0xbe,0x52,0xb0,0xc2,0x3f,0x2b,0x30,0x2a,0x42,0xbf,0xb1,0xbc -,0x34,0x44,0xc7,0xef,0x38,0x49,0x2d,0x2e,0xc5,0xb1,0xae,0xb7,0xbb,0xce,0xbd,0x3b,0x31,0x27,0x2b,0x4b,0xc7,0xa9,0xb0,0xaf,0xc6,0xc2,0xcc,0x32,0x2b,0x27,0x53,0xdd -,0xbb,0xba,0xe6,0xbf,0xb6,0xcb,0x2d,0x2b,0x21,0x2e,0xfc,0xab,0xa0,0xa5,0xbb,0xbc,0xb3,0xd3,0x58,0x2d,0x41,0x36,0x3d,0xbd,0xc4,0xa9,0xbe,0xb6,0xd3,0x2b,0x29,0x27 -,0x3c,0x40,0xcb,0xbe,0xb1,0xbf,0xaf,0x59,0x29,0x28,0x23,0x3a,0x43,0xbe,0xbb,0xb4,0xa0,0xa1,0xa9,0x3f,0x1f,0x22,0x4c,0xdc,0xac,0xaf,0xd9,0xae,0xcc,0xa2,0xb5,0x47 -,0x1e,0x1b,0x2a,0x39,0xc9,0xd6,0xab,0xbd,0xab,0xbb,0x71,0x2d,0x1f,0x2b,0x38,0xc9,0xba,0xa3,0xb2,0xae,0xaa,0xca,0x36,0x23,0x2a,0x2a,0xcf,0xbf,0xb3,0xad,0xaa,0x9f -,0xb5,0x41,0x1d,0x2c,0x3c,0x37,0x5a,0xdb,0xc4,0xee,0xb6,0xb2,0xb6,0x24,0x1a,0x1e,0x2f,0xbd,0xa9,0x9b,0xaf,0xa7,0xb1,0xc7,0x39,0x1e,0x1d,0x1e,0x3e,0xf2,0xa7,0xac -,0xa0,0xa7,0xba,0xaa,0x44,0x36,0x2c,0x3e,0x51,0xd0,0xc9,0xc0,0xad,0xb9,0xb2,0x28,0x1e,0x25,0x2b,0x32,0x43,0xb4,0xae,0xa1,0xad,0xac,0x49,0x26,0x23,0x2e,0xc9,0x4a -,0xe3,0xe0,0xb4,0xa5,0x9f,0xa8,0x39,0x27,0x27,0x3f,0x6d,0xce,0xd0,0xd3,0xb7,0xb8,0xab,0x3b,0x27,0x1d,0x27,0x3c,0xc3,0xbb,0xe3,0xae,0xb1,0xa3,0xc3,0x47,0x23,0x2a -,0xdf,0xea,0xbe,0x6a,0xb2,0xaf,0xac,0xaa,0xd1,0x2e,0x22,0x35,0x47,0xee,0x3e,0x54,0xb8,0xa1,0x9d,0xb6,0x2b,0x16,0x1c,0x36,0xb9,0xc1,0xd3,0x4b,0xd0,0xa4,0x9d,0xab -,0x26,0x1f,0x23,0x4a,0xb1,0xb7,0xc2,0xca,0xaf,0xa9,0xa9,0x3d,0x28,0x29,0x26,0x41,0x5f,0xec,0xb6,0xaa,0xb2,0xae,0x7e,0x20,0x20,0x2d,0xc0,0xb9,0xb7,0xbd,0xa8,0xa6 -,0xab,0xbf,0x25,0x21,0x1d,0x30,0x2e,0x30,0xcc,0xad,0x9d,0x9d,0x99,0xb2,0x2f,0x1c,0x23,0x63,0x69,0x4f,0x2c,0xc1,0xb4,0x9d,0xa9,0x2f,0x20,0x1b,0x3c,0x3c,0x4d,0xf0 -,0xb4,0xa9,0x9e,0xa3,0x59,0x37,0x1c,0x2a,0x3b,0xd5,0xc9,0xd5,0xb7,0xbd,0xa3,0xb6,0x3f,0x22,0x2a,0x3e,0x65,0x43,0xe2,0xa8,0x9f,0x9c,0xa9,0xbe,0x1f,0x1d,0x30,0x6b -,0xd8,0x3b,0x4f,0xb7,0xa3,0x9a,0xa2,0x75,0x1e,0x1b,0x1f,0x31,0x33,0x30,0x63,0xbb,0xa3,0xa7,0xab,0x37,0x2e,0xd1,0xd8,0x61,0x42,0x2f,0x3b,0xc2,0x4b,0xba,0xb3,0xc5 -,0xa9,0xcf,0x2e,0x2b,0x30,0x3c,0xbf,0x37,0x2d,0xd5,0x74,0xa8,0xb4,0xca,0x55,0xce,0xaf,0xa4,0xaf,0x33,0x46,0x5e,0xb6,0xb3,0x4f,0x1f,0x21,0x3b,0xbd,0xb2,0x50,0x3a -,0xe7,0xa8,0xa7,0xab,0x3b,0x26,0x4a,0x46,0xb8,0xd6,0x26,0x3d,0xba,0xb4,0xb8,0x30,0x1c,0x4f,0xb0,0xa7,0xb0,0x21,0x29,0x68,0x9f,0x9f,0xc6,0x26,0x29,0xc2,0xad,0xbd -,0x20,0x1b,0x29,0xa1,0x9b,0xb5,0x1f,0x1c,0x4e,0x9e,0x98,0xd1,0x1f,0x21,0xab,0x96,0xa0,0x5e,0x18,0x29,0xaa,0x9d,0xb3,0x23,0x17,0x2f,0xa3,0xa0,0xb7,0x16,0x1d,0xd9 -,0x9f,0x9e,0x48,0x18,0x23,0xa3,0x91,0x97,0x2d,0x16,0x21,0xad,0x98,0xa8,0x1d,0x10,0x2d,0xa1,0x9d,0xbb,0x15,0x1b,0xb3,0x97,0x9b,0x3e,0x14,0x20,0x9e,0x93,0x9c,0x23 -,0x12,0x2b,0xa9,0xa4,0xb4,0x1a,0x0f,0xd7,0x9c,0x97,0xbd,0x18,0x1e,0xab,0x96,0x97,0xc4,0x19,0x40,0xab,0x9d,0xa7,0x1b,0x10,0x27,0x9c,0xa0,0xd2,0x13,0x10,0xd1,0x9a -,0x98,0xb9,0x1b,0x1c,0xae,0x9b,0x9a,0x61,0x18,0x28,0xa1,0x95,0xac,0x1f,0x12,0x31,0x9d,0x9d,0xbf,0x17,0x14,0x3f,0x9a,0x9d,0x57,0x17,0x20,0x9e,0x97,0x9c,0x32,0x17 -,0x27,0xa4,0x9d,0xad,0x26,0x14,0x40,0xa6,0xa0,0xe0,0x16,0x1c,0xad,0x95,0x9c,0xde,0x17,0x29,0xa5,0x94,0xa4,0x28,0x16,0x22,0xaa,0xa9,0xc9,0x23,0x23,0xc9,0xaf,0xc8 -,0xd0,0x62,0xad,0xb9,0x52,0x4f,0x32,0xfc,0xaa,0x3b,0x2c,0x26,0x2d,0xb6,0xb7,0x44,0x34,0x2a,0x62,0x99,0xa4,0xd8,0x3f,0x3f,0xa6,0x9b,0xcb,0x31,0x27,0x36,0x9e,0xa8 -,0x28,0x22,0x1a,0x73,0x9f,0xb4,0x2b,0x1c,0x25,0xbd,0x9c,0xb2,0x42,0x38,0x55,0xa0,0x9a,0x3d,0x29,0x24,0x37,0x9c,0xa5,0x2d,0x25,0x20,0xca,0x98,0xb6,0x2a,0x1f,0x27 -,0x9e,0x99,0xcc,0x20,0x1c,0x5d,0x9d,0x9e,0x2c,0x19,0x1f,0xc8,0xa0,0xb5,0x28,0x1f,0x4f,0xa0,0x98,0xb0,0x25,0x23,0xe2,0x9b,0x93,0xb2,0x1f,0x1e,0x33,0xa2,0xa1,0x2a -,0x1a,0x1b,0x45,0xa4,0xbb,0x29,0x25,0x27,0xa8,0x97,0xa8,0x3c,0x26,0xbe,0x9d,0x9d,0x5a,0x25,0x28,0x3e,0xb0,0xaa,0x2e,0x1a,0x28,0xd9,0xa1,0xab,0x2e,0x2d,0x3c,0xb9 -,0xad,0xbe,0x41,0x48,0xe5,0xac,0xa9,0x37,0x27,0x33,0xbf,0xab,0xb9,0x39,0x2b,0x2d,0xbf,0xa9,0xbd,0x31,0x34,0x4a,0xae,0xab,0xc8,0x38,0x3c,0xbc,0xaf,0xc7,0x3e,0x2a -,0x29,0xfa,0xb5,0xb6,0x3a,0x2f,0x47,0xb5,0xa7,0xbe,0x35,0x32,0xbf,0xa5,0xa9,0xbb,0x2d,0x2e,0x42,0xb6,0xc8,0x2e,0x21,0x27,0xbe,0xb7,0xcb,0x32,0x27,0x3b,0xaf,0xac -,0xb0,0x35,0x3c,0xaf,0xa4,0xa1,0xb8,0x45,0x3d,0x5d,0xb7,0x69,0x3b,0x25,0x32,0xc8,0xdb,0xdd,0x36,0x3a,0x45,0xb1,0xde,0xb8,0xe2,0x52,0xbf,0xbe,0xb5,0x45,0x43,0xfd -,0xbd,0xc2,0x59,0x37,0x3a,0x5d,0xbf,0xc3,0x54,0xfb,0x3b,0x41,0xeb,0x5d,0xd6,0x30,0x60,0xc7,0xba,0xbd,0xfb,0x76,0x52,0x59,0xed,0xd9,0x38,0x35,0x2e,0x37,0x4a,0xd1 -,0xbe,0xc5,0xb4,0xb1,0xb5,0xb0,0xbe,0xbb,0xc5,0xe7,0xca,0x56,0x38,0x3a,0x36,0x36,0x36,0x2e,0x43,0x4f,0xe5,0xe0,0x5a,0xe6,0xf1,0xba,0xba,0xb1,0xbc,0x5a,0xde,0xc3 -,0xbe,0xc8,0xd4,0x5d,0xf8,0x48,0x38,0x37,0x35,0x2f,0x5b,0xe9,0xca,0xc8,0x3f,0x66,0xb9,0xc9,0xcd,0xbe,0xcf,0xc2,0xc3,0x44,0x5a,0x39,0x2f,0x57,0x49,0xc8,0x4a,0x57 -,0xd7,0xc2,0xbf,0x41,0x43,0xed,0xe5,0xb9,0xcd,0xec,0xba,0xbf,0xb5,0xb7,0x69,0x3a,0x30,0x2c,0x32,0x39,0x2f,0x3b,0xda,0xc9,0xad,0xb9,0xba,0xaf,0xb3,0xb6,0xb3,0x7a -,0x49,0x59,0x51,0xdb,0x3a,0x38,0x3b,0x35,0x31,0x36,0x35,0x36,0x55,0xb2,0xaf,0xb1,0xc5,0xd4,0xc4,0xd6,0x5f,0xdc,0x6a,0xcf,0xbc,0xbf,0xaf,0xcb,0x4d,0x3a,0x39,0x2a -,0x25,0x27,0x30,0xe0,0xc8,0xaf,0xa7,0xa9,0xab,0xb2,0xe1,0xd6,0x4a,0x35,0xfc,0xd9,0xd4,0xca,0x57,0x3d,0x4a,0x3c,0x37,0x3c,0x3c,0x4c,0xe4,0xb8,0xad,0xb7,0xc2,0xc3 -,0xc1,0xde,0x3b,0x40,0x35,0x4f,0xef,0xc8,0xb5,0xce,0x3e,0x38,0x30,0x2d,0x3d,0x33,0xca,0xad,0xa5,0x9f,0xa1,0xab,0xc0,0x42,0x31,0x34,0x28,0x26,0x25,0x2f,0x4a,0x6b -,0xd8,0x75,0xbb,0xcb,0x5e,0x54,0x3c,0x38,0xdb,0xb3,0xad,0xa2,0xb0,0xaa,0xb4,0xcf,0xdb,0x37,0x31,0x3a,0x5c,0x51,0x61,0x48,0x44,0x41,0x41,0x35,0x41,0x53,0x6d,0xaf -,0xb0,0xab,0xa8,0xc1,0xcb,0x52,0x32,0x2b,0x25,0x24,0x2d,0x4a,0x4e,0xbc,0xb7,0xb0,0xb1,0xbc,0x50,0x4d,0x32,0x2a,0xea,0xce,0xb0,0xaa,0xb2,0xb0,0xbb,0x42,0x3e,0x32 -,0x26,0x2b,0x32,0x55,0xbb,0xb7,0xb6,0xb2,0xb7,0xb8,0xb2,0xdb,0xd5,0xbe,0xc1,0xc2,0xcb,0x5c,0x3d,0x38,0x2d,0x2c,0x28,0x24,0x33,0x4a,0xcb,0xb6,0xbb,0xb4,0xc4,0xee -,0x54,0x3f,0x30,0x3b,0x53,0xaf,0xaa,0xad,0xac,0xb9,0xc4,0x3e,0x3a,0x2a,0x25,0x2a,0x41,0xe6,0xb0,0xaf,0xaf,0xa7,0xb1,0xaf,0xca,0x3b,0x67,0x5e,0x54,0x56,0x4f,0xfd -,0x46,0x42,0x44,0x35,0x2f,0x3b,0x58,0xbd,0xcb,0xaf,0xaf,0xc7,0xbc,0xcd,0x4a,0x39,0x3c,0x3a,0x43,0x3b,0xd3,0xcb,0xfa,0xe5,0x33,0x2c,0x2f,0x2b,0x4d,0xc2,0xb9,0xa8 -,0xab,0xa9,0x9e,0xa6,0xbb,0xd2,0x38,0x34,0x2d,0x2b,0x30,0x4d,0x42,0xd9,0xc2,0x4b,0xee,0x4f,0x3c,0x49,0x5d,0x3e,0xbf,0xaf,0xb1,0xa9,0xb3,0xc9,0xc2,0x3b,0x2f,0x43 -,0x32,0x4b,0xca,0x38,0x7d,0x56,0x3b,0x67,0x3e,0x31,0xf4,0x68,0xbd,0x9f,0xae,0xa7,0xa2,0xb6,0xbf,0x67,0x1f,0x22,0x1f,0x1e,0x40,0xf5,0x4a,0xaf,0xb3,0xb5,0xa7,0xd9 -,0x45,0x6b,0x34,0x45,0xb2,0x4a,0xb8,0xa8,0xba,0xb5,0xce,0x21,0x2c,0x28,0x1f,0x51,0x33,0x39,0xaf,0xb5,0xab,0xaa,0x49,0x4a,0x46,0x38,0xb4,0xab,0xbb,0xa9,0xba,0xe0 -,0xc7,0x36,0x24,0x2b,0x1b,0x26,0x6f,0x5e,0xa4,0x9f,0xa5,0x9d,0xac,0x44,0x4e,0x24,0x24,0xdd,0x3e,0xd8,0xa9,0xbc,0xa9,0xab,0x39,0x36,0x26,0x16,0x2d,0x2f,0x2a,0xb7 -,0xba,0xb2,0x9b,0xad,0xc5,0xb1,0x33,0xde,0xa7,0x35,0x50,0xca,0x2b,0xb8,0xbc,0x20,0x2e,0x1c,0x14,0xbf,0x5e,0xcd,0x9a,0xaa,0xa1,0x94,0xcb,0x4c,0xc8,0x1d,0x43,0xda -,0x1f,0x44,0xde,0x32,0x9d,0xaa,0x2b,0xb9,0x24,0x1d,0xb7,0x2c,0x2f,0x9e,0xbd,0x9e,0x8f,0xec,0xc2,0xbd,0x1d,0x40,0x2f,0x14,0x4f,0x57,0x33,0x98,0xb8,0x2b,0xab,0x25 -,0x2a,0xa7,0x22,0x3d,0x9e,0x5d,0x9b,0x96,0x32,0xa7,0xbe,0x1a,0x67,0x1d,0x0f,0xca,0x38,0xca,0x8f,0xda,0xc9,0xa3,0x1b,0x2d,0x4b,0x16,0xdd,0xa4,0xe7,0x95,0x9d,0x68 -,0x9b,0x53,0x19,0x3f,0x15,0x13,0xcd,0x23,0xfc,0x97,0xf0,0xa0,0x98,0x2f,0xb3,0xcd,0x17,0xc2,0x4c,0x27,0x97,0xa9,0xbb,0x97,0x2b,0x21,0x3b,0x0f,0x1c,0x54,0x20,0xad -,0x99,0xb1,0x97,0xa5,0x33,0xad,0x44,0x24,0xc2,0x2f,0x30,0x9e,0xac,0xad,0x9f,0x2f,0x28,0x3d,0x16,0x1f,0x2b,0x18,0xb4,0x9f,0xaf,0x95,0xa1,0x65,0xae,0x29,0x20,0x3a -,0x1d,0x40,0xa0,0xae,0x9d,0x9d,0x3b,0x60,0x34,0x1c,0x2b,0x1e,0x17,0x3c,0xf3,0xb9,0x96,0xa5,0xaf,0xa2,0x49,0x6c,0xda,0x24,0x44,0xc1,0x6b,0xa7,0xaa,0x3b,0x4e,0x2d -,0x1e,0x2b,0x1f,0x1f,0xe4,0xb8,0x9d,0x90,0x9e,0xa5,0xb3,0x37,0x46,0x2c,0x1a,0x1f,0x28,0x3f,0x9e,0xa1,0xb1,0xaf,0x36,0x3e,0x3a,0x24,0x2a,0x2a,0x3c,0x9d,0x98,0x9e -,0x9b,0xfb,0x59,0xd7,0x29,0x29,0x1a,0x15,0x38,0xbc,0xb1,0xa7,0x4c,0x3d,0xc1,0x60,0x48,0x37,0x2b,0x6a,0x9c,0x98,0x99,0xa8,0x31,0x7b,0x41,0x2a,0x29,0x1a,0x19,0x5c -,0xb8,0xab,0x9f,0x32,0x3d,0xbc,0x39,0x5a,0x2f,0x1c,0x69,0xa3,0x9f,0x92,0xa4,0x4e,0xae,0x4b,0x32,0x2c,0x15,0x17,0x38,0x6b,0xa4,0xa5,0xe0,0xbc,0xca,0xba,0xb2,0xdd -,0x27,0x34,0xcd,0xb2,0xa1,0xbe,0x41,0x4c,0x36,0x3a,0x3e,0x1e,0x1c,0x38,0xc3,0x9c,0x9e,0xb0,0xb6,0xbe,0xca,0xcc,0x35,0x1f,0x2b,0x4e,0xa6,0x9f,0xab,0x50,0x36,0x31 -,0x3a,0x31,0x1e,0x22,0x26,0xdb,0x9e,0xa5,0xae,0xb2,0xb6,0xaa,0xaa,0x3b,0x25,0x27,0x2e,0xad,0xa4,0xb2,0xd5,0x3c,0x2b,0x50,0x33,0x1e,0x1e,0x24,0xca,0x9f,0x9e,0xa7 -,0xb8,0x56,0xc3,0xaf,0x58,0x3b,0x2d,0x3d,0xac,0xa6,0xbf,0x3d,0x2d,0x24,0xe3,0x4a,0x29,0x2b,0x2c,0xc0,0x9a,0x9c,0xa4,0xad,0x5c,0xcc,0xd2,0x2a,0x1c,0x1a,0x24,0xcf -,0xa2,0xaf,0xf2,0x48,0x4e,0xb2,0xbb,0x49,0x2a,0x3b,0xc4,0x9e,0x9d,0xb1,0xcc,0x3b,0x59,0xc4,0x35,0x22,0x21,0x28,0xd7,0xa8,0xba,0xe9,0x39,0x35,0xcc,0xd9,0x39,0x2e -,0x50,0xbe,0x9e,0x9c,0xb0,0xd1,0xf3,0x3e,0xea,0x33,0x19,0x27,0x2b,0xce,0x9c,0xaf,0xcb,0xc6,0x47,0xc6,0xd4,0x27,0x26,0x38,0x7b,0x9e,0x9f,0xcf,0xc4,0x70,0x3b,0xbf -,0x35,0x20,0x2d,0x2b,0xca,0xa4,0x6f,0xec,0xb6,0x4a,0xac,0xb2,0x2f,0x4f,0x6a,0x47,0xa6,0xae,0x4e,0xc8,0x33,0x2e,0x67,0x23,0x21,0x69,0x3c,0xb0,0x9c,0xbc,0xae,0xb3 -,0x34,0xd0,0x3b,0x23,0x5b,0x54,0x38,0xa1,0xbe,0x5b,0xa4,0x5b,0x4e,0xba,0x1f,0x23,0x4e,0x22,0xd0,0xaa,0x39,0xa8,0xa6,0x3a,0xac,0xd2,0x29,0xb9,0x63,0x4e,0xa0,0x58 -,0x5d,0xaa,0x2e,0x30,0xfe,0x1d,0x2d,0xef,0x24,0xb0,0xaa,0x4d,0x9e,0xaa,0x3a,0xad,0x3d,0x28,0xb4,0x30,0x3c,0xa6,0x43,0xc4,0xa4,0x2d,0x3e,0x44,0x1a,0x3c,0x4a,0x32 -,0xa7,0xa3,0xb2,0x97,0xa4,0x4e,0xb8,0x28,0x1f,0x38,0x1e,0x28,0xbe,0x23,0xcf,0x9f,0x44,0xaf,0xb7,0x25,0xc5,0xee,0x3a,0xa0,0xb8,0xda,0x9c,0xbe,0x5e,0xbc,0x1f,0x21 -,0x3f,0x2c,0xe5,0xb4,0x29,0xb4,0xb5,0x3a,0xad,0x38,0x25,0xe0,0x37,0x52,0xa0,0xcb,0xb4,0x9d,0xb6,0xb1,0xd0,0x1c,0x24,0x3d,0x25,0xc3,0x56,0x25,0xab,0xad,0xb1,0xa1 -,0x41,0x24,0xda,0x38,0xb9,0xab,0x24,0x6b,0xa6,0xbd,0xae,0xde,0x1d,0x38,0xe3,0x67,0xb7,0x28,0x20,0xb1,0xab,0xab,0xa9,0x2d,0x28,0xb2,0xb6,0xac,0xde,0x1e,0x5b,0xab -,0xbd,0xbd,0x2d,0x15,0x3c,0xc5,0xb8,0xb5,0x27,0x34,0xa7,0x9e,0x9f,0xae,0x1f,0x2e,0xce,0xc6,0xb4,0x2d,0x1e,0xdc,0xa4,0xaa,0xa9,0x23,0x20,0xc2,0xbd,0xaf,0x36,0x13 -,0x1f,0xaf,0xa6,0x9c,0xcc,0x25,0x4e,0xc1,0xaa,0xaf,0x2b,0x2b,0xba,0xa6,0xab,0xe4,0x27,0x37,0xb0,0xa8,0xbd,0x2c,0x1e,0x4c,0xa5,0xab,0xab,0x2a,0x23,0x59,0xba,0xb5 -,0x2f,0x1a,0x24,0xbc,0xa3,0xa2,0x56,0x1d,0x28,0xc6,0xa2,0xaa,0x47,0x26,0x5a,0xab,0x9f,0xa0,0x39,0x33,0x45,0xb1,0xac,0x3e,0x1c,0x1f,0x39,0xb3,0xac,0x40,0x29,0x2d -,0xb5,0xa1,0xaa,0x54,0x24,0x32,0xca,0xaf,0xab,0x59,0x2e,0x3c,0xbd,0xae,0xad,0xcc,0xc7,0xca,0x73,0xe9,0x35,0x42,0x5b,0xbf,0xbf,0x3c,0x3b,0x4c,0xd4,0xbd,0xd9,0x28 -,0x2e,0x2f,0xd7,0xa9,0x62,0x2f,0x27,0x3d,0xad,0xa4,0xd0,0x3f,0x30,0x3e,0xaa,0xab,0xfe,0x33,0x3c,0xbe,0xa0,0xa8,0x3f,0x28,0x33,0xb2,0xa4,0xb9,0x2f,0x29,0x34,0xb0 -,0xa1,0xbd,0x35,0x23,0x27,0xe7,0xb4,0xb8,0xc3,0x4c,0x4a,0xda,0x49,0x53,0xde,0xe3,0xe4,0x48,0x2f,0x2a,0xe5,0xb2,0xa5,0xb7,0x3e,0x2e,0x2f,0xbf,0xa8,0xb2,0x47,0x3b -,0x2d,0xf2,0xc4,0xc2,0x5b,0x3b,0x4c,0xd1,0xba,0xf3,0xee,0x3d,0x49,0xb6,0xb7,0x6b,0x4d,0x38,0x4d,0xbf,0xc8,0xbc,0xc4,0xd3,0xbe,0x53,0x3e,0x3f,0x3a,0xec,0xbf,0xb6 -,0xc3,0xd6,0x54,0x4b,0x46,0x6d,0xe0,0x5c,0x51,0x40,0x3e,0x39,0xda,0xd4,0xc5,0xdc,0x31,0x2d,0x38,0x45,0xcc,0xb6,0xd0,0xce,0xe8,0xe1,0xb2,0xbb,0xbd,0xbe,0x63,0x4f -,0xd1,0x55,0xd3,0xb0,0xbc,0xcc,0x3d,0x2e,0x36,0x47,0xcf,0xc4,0x52,0x38,0x41,0xdf,0xc2,0xb8,0xce,0x4b,0x43,0x5c,0x6f,0xd2,0x45,0x57,0x58,0xd3,0xbc,0x66,0xec,0x56 -,0x4d,0x5c,0xc1,0xcf,0xbe,0x7c,0x45,0x48,0x4f,0xca,0xc1,0xe8,0x3c,0x34,0x40,0x49,0xcb,0xc8,0xe6,0xd9,0xd4,0xb0,0xae,0xbf,0x55,0x38,0x2e,0x5d,0xbe,0xb4,0xdf,0x37 -,0x3a,0x45,0xd3,0xbb,0xd6,0x39,0x35,0x3d,0xdd,0xd0,0x70,0x6a,0x42,0xc7,0xb0,0xb6,0xd2,0x3a,0x3d,0xdf,0xbc,0xbc,0xc9,0x5d,0xd6,0xbc,0xba,0xe8,0x35,0x2b,0x2e,0x4d -,0xc4,0xdc,0x63,0x41,0x52,0xbe,0xb7,0xbf,0x4a,0x35,0x3f,0xd5,0xbc,0xb9,0xc8,0xdb,0xe3,0xbc,0xce,0x3c,0x2e,0x30,0x4f,0xbc,0xb8,0xd0,0xe2,0xcf,0xc2,0xc8,0x49,0x2d -,0x2e,0x42,0x70,0xb8,0xd0,0x49,0xd9,0xf7,0xc1,0xc4,0x3d,0x3e,0x42,0x6d,0xc1,0xbc,0xb4,0xb6,0xb2,0xb2,0x4c,0x30,0x3e,0x3d,0x6d,0x4c,0x39,0x5d,0xc8,0xb0,0xaf,0x4b -,0x2f,0x2c,0x38,0x5b,0x6f,0xdb,0x35,0x4a,0xba,0xb4,0xaf,0xd3,0x3b,0x45,0xee,0xc8,0xc2,0x50,0x4f,0xba,0xb6,0xb6,0xcf,0x3d,0x3d,0x56,0xc9,0xd2,0x4b,0x3a,0x64,0xb7 -,0xad,0xb3,0x4b,0x2e,0x3a,0x4d,0xd9,0x55,0x36,0x31,0x3f,0xc2,0xc2,0x5a,0x31,0x37,0xef,0xb9,0xae,0xbd,0x3a,0x31,0x6b,0xae,0xab,0xc7,0x41,0x2c,0x34,0xc9,0xb2,0xb0 -,0xbf,0xe5,0x55,0x4f,0x78,0x62,0x41,0x46,0xc2,0xb9,0xcf,0x39,0x46,0x4e,0xbf,0xb6,0x7a,0x37,0x26,0x2c,0xde,0xa9,0xa6,0xa6,0xc7,0x47,0x3b,0x2f,0x3c,0x3e,0x3e,0x51 -,0x51,0xd1,0xbb,0xb2,0xac,0xad,0x75,0x45,0x2a,0x27,0x35,0x38,0xcc,0xbd,0xbe,0xba,0xd8,0x3d,0x4b,0x3e,0xe2,0xed,0x5a,0x49,0x49,0xb7,0xaa,0xa2,0xae,0x4f,0x39,0x2e -,0x30,0x61,0x3e,0x3a,0xbe,0xb3,0xa8,0xad,0x3b,0x31,0x2d,0x55,0xb3,0xcd,0x2d,0x26,0x35,0xc6,0xa6,0xae,0x48,0x28,0x24,0x3f,0xae,0xb3,0xba,0x4e,0x3b,0xaf,0xa9,0xaf -,0xc2,0x3f,0x38,0xd4,0xcb,0xc9,0xd2,0x38,0x56,0xbe,0xb3,0xd0,0x34,0x27,0x3a,0xb9,0xbb,0xba,0x45,0x2a,0x3a,0x51,0x5b,0xf5,0x33,0x2d,0xd5,0xb8,0xac,0xa8,0xc9,0xc7 -,0xbe,0xc4,0xd7,0x37,0x21,0x32,0x5f,0xe3,0xaf,0xbc,0xc9,0xc3,0xd7,0xdd,0x6a,0x2d,0x31,0x4e,0xce,0xb0,0xb8,0x65,0xdd,0xce,0xde,0xcb,0x36,0x25,0x34,0x3e,0xb9,0xa2 -,0xac,0xb8,0xce,0x3d,0x41,0xe6,0x37,0x3f,0x37,0x28,0x4d,0xba,0xb6,0xae,0xbd,0x3a,0x58,0x3a,0x33,0xb5,0x3e,0x3f,0xca,0xcf,0xa6,0xab,0x57,0x6b,0x34,0x2d,0xbc,0xc8 -,0x51,0x7c,0x4c,0xd7,0xab,0xaa,0xb9,0x4c,0x23,0x2c,0x58,0x3e,0xfb,0x52,0x3d,0xe1,0xc9,0xee,0xb2,0xd6,0xfd,0xad,0xdc,0x6e,0x3e,0x2f,0x6e,0xab,0xb5,0xda,0x2b,0x17 -,0x37,0xb1,0xac,0xa5,0x60,0x2c,0x4c,0xba,0xab,0xad,0x2a,0x25,0x4d,0x5f,0xb4,0xb6,0x34,0x3d,0xae,0xa8,0xa1,0xfa,0x1c,0x2a,0x43,0xb0,0xa2,0xea,0x2c,0x39,0x48,0xac -,0xa4,0x39,0x22,0x21,0x2c,0xc5,0xa9,0xd6,0x5a,0x73,0x41,0xb4,0xd1,0x33,0x4e,0x45,0x55,0xad,0xc9,0x54,0xd4,0x5e,0xab,0xa9,0xdb,0x6d,0x37,0x36,0xb9,0xbb,0x6d,0xef -,0x32,0x2c,0x4d,0x2d,0x36,0xda,0xd0,0xab,0xaa,0x57,0x53,0x4f,0xe6,0xa5,0xae,0x44,0x32,0x2b,0x30,0xb2,0xb8,0xef,0x4b,0x29,0x2f,0xca,0x60,0xb6,0xae,0x41,0xc5,0xb3 -,0xdd,0xb9,0x5a,0x2d,0x35,0x1f,0x30,0xb0,0xb2,0xac,0xa5,0xc7,0xb7,0xaf,0x5a,0x45,0x2c,0x1d,0x2c,0x52,0xde,0xb2,0xc4,0xb6,0xa4,0xa9,0xb9,0x41,0x1c,0x1b,0x2f,0x5f -,0xb1,0xad,0x4b,0x52,0xb1,0xad,0xb0,0x4b,0x1e,0x20,0x28,0xda,0x9d,0xa4,0xc8,0xba,0xc3,0xb5,0xb2,0x33,0x22,0x1d,0x24,0x54,0xba,0xc6,0xb2,0xb4,0xaf,0xa6,0xc3,0x2c -,0x2b,0x2d,0xe4,0xa6,0xb4,0xc4,0xe9,0x69,0xad,0xab,0x39,0x2b,0x20,0x22,0x5a,0xca,0x4d,0xd7,0xbe,0xb1,0xa3,0xce,0x25,0x26,0x23,0x7c,0xa2,0xbf,0xdb,0xcc,0x5d,0xad -,0xa0,0xb9,0x5d,0x2a,0x25,0x64,0xb9,0xc0,0xb1,0x5d,0x41,0xcb,0x30,0x3c,0xce,0x37,0x58,0x63,0x3c,0xbb,0xc5,0xbd,0xa9,0xe8,0x27,0x28,0x25,0xdc,0xa9,0xbf,0xdc,0x4d -,0x40,0xab,0xa0,0xe1,0x3b,0x26,0x1f,0x6c,0xb8,0xd2,0xda,0x34,0xd4,0x96,0xad,0x23,0x14,0x0e,0x32,0x8f,0x99,0xaa,0x9a,0xba,0xa1,0x93,0x99,0xd8,0x0d,0x09,0x1f,0x35 -,0xb1,0xaf,0x2c,0xb6,0x4f,0x0c,0x05,0x29,0x93,0x8a,0x88,0x96,0x21,0x08,0x16,0x93,0x8b,0x90,0xac,0x0a,0x09,0xac,0xa9,0x25,0xaa,0x9e,0xc6,0x6f,0x3c,0xae,0xda,0x33 -,0xa4,0x3f,0x1e,0xd8,0xc3,0xc1,0x95,0xa4,0x0a,0x05,0x1c,0xaa,0x9c,0xac,0x9f,0xdd,0x15,0x2c,0x9d,0x90,0x86,0x8e,0x3f,0x64,0x2e,0x0a,0x0e,0x5a,0xa4,0xa2,0x15,0x0f -,0x20,0x2e,0xa2,0x9f,0xab,0xca,0x1b,0x0d,0x3c,0x8d,0x91,0xa3,0x9d,0xb1,0xc5,0xa8,0xa4,0xa1,0x3d,0x20,0x23,0x1a,0xbd,0x9a,0x1e,0x1e,0xfc,0x0d,0x06,0x16,0x9b,0x84 -,0x8a,0x9b,0x3b,0x0d,0x11,0x39,0xbd,0x96,0x8c,0xbe,0x0f,0x2e,0xaa,0x46,0x44,0x9c,0x9a,0x60,0x14,0x13,0x28,0xa4,0x8d,0x9e,0x2e,0x37,0x23,0x1f,0xa0,0x9e,0x28,0x0d -,0x0c,0x50,0x97,0x9d,0x9b,0xa3,0x2f,0x1b,0x13,0x39,0x89,0x83,0x92,0x67,0x28,0x11,0x11,0x40,0xa9,0xa4,0x1e,0x07,0x0b,0x30,0x90,0x95,0xb7,0x9d,0xb4,0x12,0x0c,0x22 -,0xaa,0x94,0x8e,0x8d,0x9f,0x3f,0x32,0x72,0xac,0x9f,0x4b,0x0c,0x1b,0x9f,0xa3,0x3c,0x52,0x1e,0x09,0x08,0x1b,0x90,0x87,0x8e,0xa8,0x1b,0x17,0x2e,0x2f,0xa5,0x89,0x94 -,0x25,0x0e,0x19,0xde,0xb0,0xa7,0xa3,0xc2,0x1c,0x11,0x1a,0x9e,0x8b,0x97,0xd9,0x3d,0x36,0x21,0x32,0xcd,0x5a,0x28,0x18,0x24,0xaa,0x9f,0xb0,0x51,0xcb,0x9e,0x3d,0x1b -,0xa0,0x8e,0x8f,0x9f,0x49,0x1e,0x18,0x21,0xc8,0xa3,0xe6,0x16,0x07,0x0f,0x9e,0x8f,0xae,0xb7,0xa7,0x2c,0x12,0x10,0x1c,0x52,0x9a,0x8c,0x8b,0x98,0x5d,0x25,0x22,0x9e -,0x96,0x35,0x17,0x2e,0xaf,0xb7,0xdb,0x25,0x1a,0x0f,0x17,0xb4,0x99,0x95,0xa3,0x47,0x4e,0xbe,0x2d,0x2c,0xaa,0x9d,0xa9,0x26,0x12,0x18,0xdf,0xa3,0x8f,0x8f,0xaf,0x1e -,0x0b,0x1d,0xa0,0x9d,0xbd,0xf9,0x34,0x26,0x38,0x3d,0x6f,0xca,0x4d,0x20,0x1e,0x31,0x46,0x5a,0xa8,0x8d,0x9b,0x2c,0x24,0xb3,0x90,0x8b,0x98,0x25,0x0f,0x0e,0xcf,0x97 -,0x94,0xb9,0x0a,0x03,0x18,0x9a,0x94,0x98,0xaf,0x2c,0x17,0x0f,0x1f,0xd7,0x9c,0x91,0x90,0x9a,0xc2,0x21,0x24,0x9f,0x8e,0xa1,0x17,0x10,0x25,0xb3,0xb3,0x2d,0x1a,0x10 -,0x18,0x47,0x97,0x8d,0x94,0xdd,0x35,0x55,0x22,0x27,0x32,0xa2,0x93,0xa9,0x2d,0x15,0x22,0xac,0x92,0x95,0xad,0x1a,0x0d,0x23,0x97,0x8c,0x9f,0x2c,0x16,0x16,0x1f,0x3f -,0x57,0x52,0x37,0x29,0x35,0x57,0xad,0x58,0x2a,0xc8,0xb0,0xcb,0x4c,0xaf,0x97,0x8d,0x94,0xb4,0x36,0x36,0xc5,0xbf,0x5e,0x28,0x14,0x0b,0x12,0x5f,0xa4,0x9c,0xa1,0xab -,0xcd,0x1e,0x11,0x15,0x3c,0x98,0x8b,0x8f,0x98,0x48,0x1b,0x32,0xaf,0xa4,0x4e,0x20,0x22,0xd1,0xb5,0x3e,0x1e,0x19,0x1a,0x24,0xba,0x9b,0x95,0xaa,0xc7,0xab,0xb4,0xc3 -,0x39,0x2c,0x52,0xd0,0x37,0x30,0x2e,0xd4,0xa5,0xa5,0x9b,0xb1,0x21,0x1b,0x26,0xcd,0xa7,0xaa,0xaf,0xb7,0x45,0x2c,0x1f,0x1d,0x2f,0x3d,0xc3,0xc6,0x40,0x25,0x1d,0xee -,0x9d,0x98,0xa4,0x73,0x37,0xc8,0xa8,0x9f,0xa2,0xa9,0xaf,0x74,0x52,0x32,0x1e,0x13,0x17,0x24,0x3d,0xc2,0xd0,0xa9,0x9f,0x9f,0x3b,0x15,0x14,0x29,0x9c,0x8d,0x8b,0x9f -,0x2a,0x1c,0x3e,0xa2,0x9d,0xa9,0x32,0x1f,0x24,0x22,0x1c,0x20,0x2a,0x39,0xec,0x53,0x46,0x34,0xbb,0x97,0x92,0xa1,0x26,0x17,0x20,0xb3,0xa4,0xb1,0x37,0x2a,0x4e,0xa8 -,0x92,0x99,0xc7,0x1f,0x1f,0x47,0xb1,0xa4,0xab,0xba,0xe8,0x2f,0x18,0x1c,0x26,0x5b,0xa9,0xb4,0x37,0x1e,0x20,0x33,0xa4,0xa4,0xb7,0xd3,0x4c,0xac,0xa6,0xad,0xbd,0xbf -,0xc2,0xaf,0xab,0x51,0x2d,0x1f,0x22,0x2a,0x28,0x26,0x36,0xcd,0xa1,0xa2,0x38,0x1c,0x15,0x2c,0x9f,0x8f,0x92,0xa3,0xf0,0x36,0xbf,0xa7,0xa4,0xb0,0x37,0x26,0x2d,0x30 -,0x2b,0x35,0x26,0x22,0x29,0x20,0x38,0xc2,0xa9,0x9a,0x9d,0xab,0xca,0x37,0x37,0x48,0x3d,0x2f,0x25,0x31,0xc9,0x9c,0x9b,0xa4,0xbf,0x2a,0x2c,0x3a,0xd7,0xb6,0xa7,0xb0 -,0xb1,0x5b,0x1e,0x1d,0x25,0x57,0xad,0xb5,0x30,0x1d,0x1c,0x45,0xa2,0x9f,0xa9,0xf5,0x32,0xce,0xa9,0xad,0xb7,0xde,0xcf,0xaa,0xa8,0xbe,0x37,0x27,0x26,0x2a,0x21,0x20 -,0x2a,0x2f,0xba,0xa4,0xb9,0x34,0x1f,0x24,0xd1,0x9d,0x95,0x99,0xad,0xc1,0xbe,0xbd,0xa7,0xa1,0xb1,0x3d,0x2d,0x20,0x24,0x37,0x3e,0x3d,0x26,0x1a,0x18,0x25,0xbb,0x9b -,0x9d,0xaa,0xaf,0xd4,0xc9,0xbc,0x32,0x21,0x1d,0x28,0x7b,0xa6,0x9e,0xa3,0xb6,0x6e,0xd9,0xcd,0x6a,0xbc,0xb5,0xba,0xc2,0x36,0x2d,0x31,0x4a,0xcf,0xc9,0x45,0x33,0x27 -,0x25,0x61,0xba,0xc4,0xbf,0xdd,0xf5,0xbd,0xb7,0xb7,0xb2,0xc3,0xc8,0xae,0xb3,0xa5,0xaa,0x3a,0x31,0x22,0x1a,0x20,0x27,0x36,0xe4,0x34,0x2a,0x2a,0x28,0x4b,0xab,0xa5 -,0xa1,0xa4,0xba,0xae,0xa5,0xa7,0xa9,0xab,0xb0,0xba,0x42,0x2a,0x28,0x2b,0x3d,0xdb,0x40,0x24,0x1d,0x18,0x32,0xa1,0x9a,0x9c,0xab,0x58,0x57,0xdd,0x4c,0x3f,0x26,0x1f -,0x2a,0x37,0xac,0x9f,0xab,0xbd,0xe9,0x45,0x41,0xcd,0xb9,0xb3,0xba,0x49,0x39,0x36,0x2f,0x46,0x40,0x45,0xbb,0x4c,0x2a,0x2b,0x2f,0x66,0xaa,0xa8,0xb1,0xbb,0x39,0xd6 -,0xad,0xa7,0x9d,0xa3,0xb4,0xb4,0xd1,0x34,0x3a,0x2f,0x2c,0x2f,0x23,0x23,0x20,0x1d,0x2a,0x44,0x4c,0xd4,0xca,0x5a,0xbb,0xaf,0xa2,0x99,0x9c,0xa8,0xb2,0x4b,0x3e,0xbb -,0xcf,0xcc,0x53,0x2c,0x35,0x3f,0x45,0x60,0x39,0x20,0x24,0x26,0x36,0xb8,0xa8,0x9d,0x9c,0xaa,0xda,0x36,0x20,0x2c,0x36,0x33,0x5d,0x7e,0x3b,0xcf,0xae,0xb1,0xa3,0xa8 -,0xc6,0xd0,0x3f,0x41,0x43,0x36,0x53,0xcb,0x44,0x47,0xda,0x2c,0x2e,0x2f,0x37,0xc9,0xde,0x49,0xdc,0xf0,0xbf,0xa8,0xa9,0xa7,0xa7,0xb8,0xbb,0xaf,0xb8,0xb5,0xbf,0x3d -,0x45,0x32,0x20,0x27,0x28,0x22,0x27,0x24,0x20,0x31,0x2d,0x55,0xab,0xaf,0xa4,0xa4,0xb0,0xa5,0x9e,0xa9,0xa6,0xb2,0x3c,0x41,0x2b,0x26,0x3a,0x36,0x3e,0xc2,0x35,0x2f -,0x3d,0x2c,0xee,0xac,0xa6,0xa9,0xab,0xe5,0x7b,0xdb,0x46,0xba,0xdd,0x38,0x35,0x2f,0x2f,0xcf,0xc6,0xc3,0xb4,0x51,0xbc,0xb5,0xd6,0xbb,0x5a,0x29,0x30,0x34,0x32,0x53 -,0x33,0x30,0xc8,0xca,0xc9,0xcb,0x38,0x31,0x46,0x4c,0xbd,0x64,0x2d,0xd6,0xae,0x9f,0x94,0x95,0x9f,0xa5,0xd1,0x3a,0xd6,0x52,0x38,0x2c,0x1a,0x18,0x21,0x25,0x3a,0x3b -,0x25,0x3e,0x46,0xd3,0xa7,0xb3,0xba,0xa6,0xa2,0xa1,0x9e,0xbd,0xc4,0x55,0x2b,0x37,0x3f,0x3b,0x6f,0x3a,0x20,0x2e,0x35,0x3f,0xd7,0x36,0x33,0x75,0xbc,0xa2,0x9e,0xb4 -,0xd6,0x4d,0x4a,0xad,0xb0,0xed,0x5d,0x38,0x2a,0x65,0xda,0xf8,0xb1,0x4c,0x43,0xd2,0xd1,0xaa,0xa9,0xca,0xe0,0x51,0x3c,0x4d,0x38,0x22,0x1f,0x19,0x29,0xb5,0xae,0xc1 -,0x3d,0x31,0xbf,0xa3,0xae,0xae,0xd7,0x43,0xae,0xa2,0xa2,0x9f,0xbf,0x4c,0xde,0x40,0x3b,0x32,0x1d,0x18,0x1d,0x1e,0x38,0xb5,0xd5,0x7b,0x4b,0x4b,0xa6,0xa2,0xa8,0xa9 -,0xc3,0xd1,0xa2,0x9e,0x9e,0xae,0x2c,0x22,0x2c,0x28,0x2a,0x35,0x1c,0x1c,0x29,0x39,0xb6,0x9f,0xa1,0xa8,0xea,0x39,0xcf,0xc0,0xbe,0xbf,0x32,0x34,0xbf,0xa7,0xa2,0xbc -,0x39,0x3e,0xbd,0xcc,0xcd,0x39,0x22,0x33,0xc8,0xba,0xb0,0xe9,0x39,0x3f,0x36,0x3c,0x58,0x4d,0x49,0x3d,0x2a,0x2a,0x40,0xcb,0xad,0xcb,0x28,0x35,0xce,0xa7,0x98,0x9d -,0xb6,0xab,0xaf,0xa9,0xa0,0xbd,0x48,0x30,0x1b,0x1c,0x28,0x25,0x2d,0x26,0x1f,0x36,0xc9,0xb6,0xa3,0xa7,0xb5,0xa8,0xab,0xb0,0xad,0x65,0x45,0x63,0xc0,0xaf,0xac,0x3e -,0x1e,0x23,0x31,0xce,0x66,0x1f,0x14,0x20,0xbb,0x9d,0x9c,0xa9,0x4b,0x2a,0x2e,0x5c,0xbe,0x9b,0x97,0xc8,0x1e,0x1d,0x2f,0xa7,0x9a,0xc3,0x30,0xcf,0xa3,0xaa,0x3b,0x17 -,0x1d,0xa8,0x91,0x9a,0x37,0x1c,0x18,0x2c,0xa3,0xa2,0x38,0x1b,0x19,0x11,0x2f,0x9a,0x92,0x9b,0x2f,0x0e,0x1b,0x9c,0x8c,0x8e,0xcc,0x16,0x27,0x95,0x8d,0xae,0x19,0x12 -,0x1b,0x4f,0xc0,0x1f,0x12,0x1b,0x5b,0x9a,0x97,0x9c,0xae,0xe7,0x1d,0x1c,0x9b,0x8a,0x90,0x1f,0x08,0x09,0xa8,0x82,0x86,0xb8,0x08,0x08,0x20,0x9f,0x9f,0x37,0x1b,0x1b -,0x2a,0xb2,0x96,0x9d,0xb0,0x30,0x10,0x1a,0xa3,0x91,0xa9,0x1b,0x0e,0x3f,0x8a,0x84,0xa8,0x0d,0x07,0x1d,0x8c,0x85,0xa2,0x0d,0x07,0x10,0xa4,0x87,0x8b,0xad,0x17,0x0c -,0x0d,0xf5,0x8e,0x90,0xde,0x0b,0x05,0x2d,0x87,0x88,0xa4,0x16,0x0d,0xd2,0x8b,0x8d,0x37,0x11,0x19,0xb7,0x8f,0x92,0xea,0x18,0x0e,0x0c,0x2a,0x99,0x96,0x6e,0x0d,0x02 -,0x11,0x8c,0x80,0x89,0x26,0x06,0x10,0x99,0x84,0x92,0x2e,0x0e,0x0e,0x28,0x96,0x92,0x9c,0xbe,0x1a,0x0e,0x1d,0xa9,0x9e,0xb3,0x1a,0x0f,0x4e,0x8b,0x8a,0xaf,0x13,0x0b -,0x36,0x8e,0x8e,0xd6,0x11,0x0e,0x1a,0x9f,0x8e,0x95,0xa2,0x26,0x0f,0x16,0xa1,0x8f,0x92,0x38,0x06,0x08,0x41,0x88,0x89,0xba,0x0c,0x08,0x2b,0x9a,0x9e,0x3c,0x29,0x1f -,0x5a,0x94,0x92,0x99,0xa7,0x2f,0x1e,0x3b,0x9d,0x9f,0x46,0x16,0x0f,0x29,0xa2,0x99,0xae,0x25,0x1b,0x2b,0xcc,0x4b,0x33,0x40,0xac,0xa1,0xad,0xaa,0xb4,0xcf,0x3d,0xce -,0xca,0xd0,0xd3,0x29,0x1e,0x2c,0xa0,0x98,0xa8,0x28,0x10,0x1c,0x78,0xaf,0xbe,0x40,0x23,0x27,0xae,0xa7,0xa2,0x9f,0xad,0x3f,0x25,0x2f,0xd5,0xa4,0x59,0x20,0x2f,0xa1 -,0x8e,0x9b,0x3d,0x14,0x18,0xa4,0x91,0xa0,0x1a,0x0a,0x0d,0x34,0x93,0x90,0x9c,0x3a,0x14,0x10,0x3a,0x93,0x8f,0x9e,0x17,0x08,0x18,0x95,0x86,0x8f,0x3f,0x0d,0x16,0xc2 -,0x9d,0xb2,0x2c,0x1b,0x1e,0x77,0xa1,0xa3,0xb7,0x3b,0x21,0x28,0xb6,0x9c,0xa6,0x2a,0x10,0x13,0xac,0x88,0x8b,0xa9,0x19,0x14,0x40,0x96,0x96,0xc2,0x1c,0x12,0x10,0x34 -,0x98,0x93,0x99,0x61,0x15,0x10,0x33,0xa9,0xa6,0x4e,0x1c,0x21,0xab,0x8e,0x9d,0x47,0x22,0x24,0xae,0x9f,0xb8,0x20,0x1a,0x1d,0x38,0x9e,0x94,0xa0,0x45,0x1c,0x16,0xd0 -,0x91,0x93,0xce,0x10,0x08,0x18,0x9d,0x8c,0x98,0x31,0x16,0x1d,0xb8,0x98,0xa2,0xc6,0x3c,0x2f,0xee,0x9f,0x9d,0x9f,0xb3,0x29,0x1a,0x2a,0xbe,0xfa,0x24,0x12,0x15,0x6a -,0x93,0x91,0xbc,0x1e,0x17,0x4a,0x94,0x94,0xae,0x23,0x17,0x17,0xe5,0x9a,0x94,0x9b,0x30,0x10,0x13,0xb1,0x97,0x9e,0x26,0x0d,0x18,0xaf,0x8e,0x93,0xdb,0x1c,0x1e,0xbe -,0x9c,0xb1,0x2c,0x1e,0x1d,0x73,0xa1,0x99,0x9c,0xcf,0x1e,0x1a,0x62,0x93,0x8f,0xb0,0x16,0x09,0x1a,0x99,0x89,0x96,0x2c,0x0f,0x0f,0x63,0x9b,0x9e,0x3b,0x17,0x14,0x21 -,0xac,0x9a,0x98,0xa9,0x29,0x21,0xf3,0x9d,0x9b,0xeb,0x1c,0x18,0x2a,0xa1,0x97,0xbe,0x1f,0x18,0x2e,0xa7,0x9c,0xa7,0x2c,0x12,0x17,0x45,0x94,0x8b,0x9e,0x26,0x0f,0x1d -,0xaa,0x8d,0x8f,0x29,0x10,0x16,0xe5,0x91,0x8d,0xb3,0x19,0x1b,0x36,0xc6,0xa9,0xba,0x1a,0x12,0x24,0xbb,0xa8,0x9b,0xa3,0x2d,0x2f,0xb7,0x9d,0xa6,0x4f,0x1a,0x0f,0x2e -,0x9c,0x91,0xb0,0x20,0x17,0x1e,0xba,0x9c,0x9b,0x2b,0x18,0x1b,0x23,0xac,0x90,0x8e,0xbe,0x1c,0x16,0x37,0x97,0x96,0xd7,0x11,0x0c,0x21,0x99,0x8d,0x9b,0x37,0x1e,0x25 -,0x9b,0x8b,0xa9,0x20,0x1c,0x12,0x21,0x8d,0x8b,0x1e,0x0d,0x2a,0x26,0xa6,0x8b,0xb7,0x0d,0x0f,0x3c,0xec,0x9a,0x8f,0x49,0x1a,0x41,0x5e,0x35,0x9c,0x93,0x38,0x0e,0x17 -,0xc3,0xb8,0xb3,0xa2,0xa6,0x19,0x0e,0x96,0x8b,0xcc,0x25,0x2a,0x13,0x20,0x89,0x89,0x22,0x0d,0x1e,0x42,0x99,0x8a,0xbe,0x07,0x0b,0xab,0x91,0x9d,0x9f,0xb1,0x0f,0x0c -,0x95,0x86,0xce,0x20,0xc8,0x15,0x0c,0x97,0x88,0x2c,0x1e,0xbc,0x18,0x18,0x9a,0x96,0x24,0x2a,0x3a,0x18,0x32,0x8f,0x8f,0x1f,0x0f,0x2e,0xa2,0xb2,0x9f,0x91,0x1f,0x04 -,0x2c,0x86,0x98,0x3b,0x9c,0x1f,0x06,0xbf,0x85,0xa1,0x1c,0x2e,0x12,0x14,0x99,0x8c,0x2c,0x0f,0x2f,0xbb,0xc9,0xad,0x97,0x5d,0x0c,0x2f,0x8b,0x9b,0x1b,0xc9,0xae,0x10 -,0x63,0x86,0xa4,0x10,0x46,0x55,0x16,0xa5,0x8b,0xe3,0x1a,0x4f,0x25,0x14,0xa2,0x8c,0xa7,0x16,0x18,0x2d,0x31,0xd6,0x99,0xa4,0x0c,0x08,0xaa,0x95,0x48,0xaa,0xa1,0x0d -,0x13,0x8c,0x8f,0x41,0xdd,0xd6,0x19,0xaa,0x85,0x9f,0x14,0x1c,0x40,0x73,0x9f,0x92,0xaa,0x11,0x0c,0xb3,0x90,0xc1,0x3d,0x9f,0x1c,0x0a,0xa6,0x8d,0x30,0x33,0x9e,0x1a -,0x13,0x98,0x9e,0x19,0xd2,0xa0,0x16,0x1d,0x95,0x9f,0x1d,0x1e,0xd1,0x4e,0x3d,0xa8,0x9d,0x2c,0x09,0x30,0x8d,0xa6,0x30,0xa0,0x2e,0x0a,0xa5,0x85,0xae,0x25,0xac,0x1c -,0x0f,0x91,0x8a,0x26,0x15,0xd9,0x31,0x38,0x97,0x96,0x2b,0x11,0x34,0x96,0xa0,0x2c,0xbc,0xc8,0x0e,0x23,0x8b,0xa4,0x12,0x37,0x33,0x0a,0x48,0x87,0xad,0x1b,0xad,0x3e -,0x12,0xa1,0x88,0xa9,0x1a,0x23,0x27,0x1c,0x50,0x92,0x99,0x15,0x0c,0xbe,0xa0,0x1f,0xb0,0x96,0x16,0x12,0x8f,0x8e,0x1f,0xc1,0x9e,0x1d,0x4d,0x89,0x9c,0x13,0x1f,0xbe -,0x4b,0xb4,0x91,0xb8,0x0e,0x0e,0xbb,0x98,0xce,0x43,0xad,0x1c,0x09,0xaf,0x8c,0xdf,0x2b,0x9d,0x2e,0x10,0x9f,0x92,0x34,0x2a,0xb9,0x25,0x1e,0x9b,0x9c,0x27,0x28,0xed -,0x3d,0x2f,0xae,0x9e,0x2b,0x0d,0x2b,0x97,0xb8,0x3d,0x9f,0xcb,0x0f,0x3a,0x8c,0xa1,0x2d,0xc3,0x35,0x1b,0xa5,0x8f,0xba,0x2e,0xcf,0x2f,0x33,0x9c,0x9d,0x1f,0x0f,0x2b -,0xac,0xb6,0xd6,0xb4,0xd7,0x15,0x29,0x93,0x98,0x2e,0x29,0x2c,0x10,0x2e,0x92,0x9b,0x48,0xc5,0x38,0x1d,0xb9,0x93,0xb3,0x21,0x41,0x2d,0x1a,0xd9,0x96,0xa9,0x1b,0x16 -,0x3f,0xae,0xb4,0xa1,0xb5,0x1a,0x1b,0xaa,0x98,0xc4,0xc3,0xe9,0x20,0xcd,0x8f,0x9e,0x25,0x21,0x24,0x1e,0xa6,0x88,0xa1,0x13,0x14,0x48,0xd7,0xd9,0xa1,0xb8,0x17,0x19 -,0xa9,0x9c,0xb0,0xbb,0xc8,0x20,0x1c,0xa2,0x98,0xc8,0xbe,0x64,0x18,0x21,0xa1,0xa0,0x34,0xdd,0xaf,0x27,0x21,0xa6,0xa2,0x1c,0x0f,0x23,0xe8,0xbf,0x9e,0x9d,0x35,0x17 -,0x42,0x9f,0xa9,0xb5,0xba,0x24,0x1c,0xa0,0x94,0xad,0x2d,0x27,0x22,0xd8,0x8b,0x8d,0x25,0x0c,0x1c,0x35,0x52,0x9f,0x98,0x49,0x1c,0x53,0xa3,0xad,0xbd,0xb9,0x1e,0x0d -,0x24,0x97,0x92,0xa5,0x6b,0x1e,0x1a,0x42,0xa0,0xac,0xc5,0xb6,0x2e,0x1f,0xd9,0x97,0xa7,0x20,0x1c,0x25,0x2b,0xb0,0x97,0x42,0x0d,0x0e,0x43,0x9d,0x9b,0x9e,0xdc,0x29 -,0x58,0x98,0x95,0xab,0x26,0x0f,0x17,0xaa,0x8c,0x9a,0x2c,0x1c,0x1c,0x20,0xc0,0x94,0xa2,0x1a,0x15,0x2f,0xb0,0x9e,0x99,0xaf,0x1c,0x18,0xb4,0x92,0x91,0x9f,0x28,0x12 -,0x1c,0x6c,0xa8,0x9a,0x9d,0x66,0x13,0x1e,0xa1,0x99,0xe1,0x1a,0x16,0x15,0x4f,0x90,0x93,0x2f,0x0f,0x19,0x43,0xa0,0x97,0xac,0x1e,0x19,0xc3,0x9a,0x95,0xa4,0x1f,0x0c -,0x20,0x93,0x8f,0xb8,0x1f,0x15,0x0f,0x20,0x97,0x8b,0xaa,0x23,0x20,0x2c,0xcd,0x9a,0x9a,0x21,0x0e,0x1f,0xa6,0x95,0x94,0x9f,0x29,0x1e,0x2f,0x57,0xb6,0x98,0xa0,0x1d -,0x10,0x34,0x94,0x9a,0xc9,0x1f,0x0f,0x17,0x9f,0x8d,0xb6,0x10,0x0c,0x23,0xae,0x97,0x8d,0xae,0x1e,0x25,0xb4,0x9b,0x92,0xa5,0x11,0x0a,0x32,0x90,0x91,0xa9,0x29,0x0f -,0x0c,0x44,0x8d,0x95,0x2a,0x18,0x23,0x39,0xb7,0x9d,0xa8,0x1b,0x16,0xc9,0xab,0x9f,0x9d,0xad,0x22,0x16,0x27,0x71,0x95,0x8e,0xaa,0x10,0x15,0xa8,0x95,0xaa,0x28,0x18 -,0x11,0x3d,0x93,0x8f,0x54,0x15,0x1e,0x22,0x3e,0x9a,0x94,0x42,0x16,0x1f,0xac,0x8d,0x8a,0xc1,0x0a,0x10,0xa3,0x8c,0x96,0x6e,0x17,0x09,0x19,0x96,0x8d,0xb0,0x1e,0x1e -,0x24,0x2b,0xa8,0x91,0xc6,0x12,0x15,0x2c,0xa9,0x8f,0x8f,0x46,0x16,0x18,0x28,0xa3,0x8b,0x92,0x1d,0x0d,0x2b,0x9e,0x9e,0xab,0x2c,0x13,0x0f,0x39,0x93,0x99,0x31,0x13 -,0x10,0x11,0xa7,0x86,0x92,0x24,0x10,0x20,0x9e,0x86,0x8a,0x1c,0x07,0x2a,0x91,0x94,0x9d,0xbf,0x12,0x0a,0x23,0x9a,0x99,0xbd,0x39,0x21,0x0e,0x27,0x8c,0x8a,0x2e,0x0f -,0x18,0x20,0x9e,0x88,0x94,0x1a,0x12,0x1f,0x24,0x98,0x86,0x95,0x15,0x0c,0x23,0xcc,0xa1,0x98,0xe5,0x0a,0x08,0x7e,0x8b,0x96,0x53,0x1a,0x0a,0x12,0x94,0x84,0xac,0x19 -,0x19,0x27,0x9b,0x86,0x94,0x12,0x16,0xc3,0xad,0xab,0x9c,0xbd,0x0c,0x09,0x2b,0x92,0x91,0xa0,0xd5,0x11,0x08,0xcf,0x85,0x94,0x18,0x15,0x18,0x1f,0x92,0x87,0x9f,0x24 -,0x1f,0x15,0x1c,0x8f,0x83,0xa2,0x0c,0x0b,0x26,0xa2,0x8e,0x97,0x1e,0x04,0x0e,0x90,0x88,0xaa,0x1e,0x12,0x07,0x26,0x87,0x89,0x44,0x18,0x19,0x25,0x8e,0x83,0x9a,0x10 -,0x0f,0x26,0xc3,0x96,0x91,0x33,0x07,0x06,0x2c,0x8e,0x8f,0x9e,0x36,0x0a,0x0d,0x98,0x87,0xa9,0x27,0x1f,0x10,0x29,0x8d,0x89,0xad,0x23,0x10,0x0c,0xb4,0x84,0x88,0x27 -,0x08,0x0c,0x4a,0x8f,0x8c,0xa5,0x0c,0x03,0x28,0x8b,0x8e,0xa9,0x31,0x0d,0x08,0xb3,0x86,0x92,0xba,0x1d,0x0d,0x1e,0x8c,0x88,0xd6,0x16,0x1a,0x2d,0xa7,0x8d,0x96,0x1c -,0x06,0x0c,0xaf,0x91,0x93,0xa8,0x13,0x05,0x1c,0x8b,0x89,0x9e,0x31,0x0e,0x08,0xad,0x86,0x90,0x45,0x16,0x09,0x0f,0x90,0x80,0x8e,0x19,0x0c,0x18,0xbb,0x8f,0x8f,0x54 -,0x08,0x0c,0xc4,0x9f,0xab,0xa2,0x39,0x09,0x14,0x92,0x89,0x9d,0xb4,0x1b,0x0a,0xbb,0x87,0x8d,0x23,0x12,0x15,0x1f,0x9b,0x87,0x90,0x13,0x04,0x0f,0xab,0x91,0x8e,0xac -,0x09,0x03,0x34,0x89,0x8c,0x9b,0x33,0x0a,0x13,0x8f,0x86,0x9b,0x1f,0x0c,0x08,0x22,0x8a,0x87,0xb7,0x0e,0x14,0x69,0x99,0x8f,0x96,0x1f,0x06,0x13,0xaa,0x9f,0xa0,0xab -,0x15,0x08,0x26,0x8d,0x8b,0x93,0xb9,0x0f,0x0b,0xa9,0x88,0x94,0x2e,0x16,0x13,0x25,0x96,0x89,0x9e,0x12,0x09,0x21,0xa5,0x95,0x91,0x28,0x04,0x09,0xa3,0x87,0x8c,0xaf -,0x12,0x07,0x2b,0x88,0x89,0xa8,0x18,0x09,0x0d,0xac,0x86,0x8b,0x38,0x0d,0x10,0x35,0x9b,0x8f,0x9b,0x1a,0x0c,0x23,0xa9,0x9e,0x9c,0xcc,0x0d,0x0c,0xeb,0x91,0x96,0xa3 -,0x2c,0x11,0x2d,0x8f,0x8a,0xa3,0x2c,0x13,0x10,0x3b,0x93,0x8e,0x53,0x0e,0x0c,0x25,0x9a,0x89,0x8e,0x18,0x03,0x0e,0x9c,0x8a,0x8e,0xbc,0x0d,0x0a,0x40,0x8d,0x8e,0xa1 -,0x1d,0x0a,0x11,0x9f,0x88,0x96,0x25,0x0e,0x13,0xc1,0x8f,0x8c,0xaf,0x0b,0x0c,0x55,0x98,0x92,0xa2,0x1e,0x09,0x0f,0xa7,0x8f,0x93,0xaa,0x1a,0x0e,0x44,0x8e,0x8d,0xa4 -,0x25,0x18,0x18,0xc0,0x90,0x94,0x42,0x0d,0x10,0x31,0x9d,0x8e,0xa6,0x0f,0x07,0x1d,0x97,0x8b,0x90,0x4c,0x0c,0x0f,0xb8,0x8e,0x93,0xaf,0x12,0x07,0x1e,0x91,0x84,0x90 -,0x22,0x0b,0x0f,0xb4,0x8d,0x90,0x2e,0x0b,0x0f,0x3a,0x98,0x91,0x9e,0x1d,0x0d,0x1a,0xb9,0x98,0x9a,0xeb,0x16,0x21,0x98,0x8d,0x91,0xad,0x1b,0x0e,0x1b,0x9d,0x91,0x9f -,0x25,0x0e,0x16,0xcc,0x91,0x90,0x51,0x0d,0x08,0x1c,0x9d,0x8b,0x91,0x2d,0x0f,0x1e,0xa9,0x98,0x90,0xaf,0x0f,0x0a,0x35,0x94,0x93,0xad,0x22,0x16,0x23,0xa4,0x96,0xa0 -,0x30,0x1b,0x2b,0xc5,0xa1,0x9f,0x3b,0x13,0x13,0x33,0xb5,0x9a,0x95,0xef,0x18,0x45,0x9b,0x9c,0xa1,0xe4,0x19,0x13,0x29,0x9f,0x96,0x9e,0x3b,0x19,0x1d,0x3c,0x9f,0x9b -,0x39,0x16,0x1d,0x41,0xa1,0x92,0xa1,0x1a,0x16,0x41,0xab,0x9c,0x9b,0x2c,0x10,0x1f,0xa5,0x93,0x9c,0x4e,0x16,0x16,0x25,0xac,0x94,0x9f,0x2c,0x1d,0x2d,0x59,0xa1,0x9c -,0x42,0x19,0x21,0x44,0xbe,0x9c,0xa9,0x24,0x22,0xb6,0xa0,0xa9,0xaa,0x51,0x20,0x21,0x5e,0x9c,0x9a,0xe5,0x19,0x12,0x1e,0xe4,0x9a,0x9f,0x2a,0x1e,0x2f,0xbb,0x96,0x90 -,0xbe,0x15,0x1a,0x32,0xcf,0x99,0x93,0xc6,0x1e,0x2d,0x7c,0xa4,0xa2,0xf6,0x1f,0x18,0x29,0xed,0x9f,0xaa,0x3a,0x32,0x2e,0x3d,0xb1,0xae,0x27,0x27,0x5a,0xc5,0xa6,0x97 -,0xa6,0x24,0x26,0x30,0x44,0xa8,0x9d,0xbd,0x28,0x2a,0x3c,0xaf,0xa2,0x5d,0x24,0x1f,0x1f,0x38,0xb1,0xb2,0x45,0x7b,0xca,0x6a,0xa7,0xa0,0xdb,0x35,0x43,0x38,0xff,0xa1 -,0xa2,0x56,0x2f,0x48,0xfb,0xc0,0xbe,0x35,0x2f,0x2c,0x37,0xbd,0xa9,0xb8,0x46,0x52,0x33,0x3c,0xdb,0xcc,0x3e,0x47,0xec,0x3d,0xba,0xa2,0xbd,0x2b,0x38,0xcb,0xbf,0xbc -,0xef,0x3e,0x32,0xd0,0xb8,0xb3,0xc7,0x2f,0x2c,0x3c,0x58,0xd0,0xb4,0x61,0x37,0x38,0x3f,0x79,0xa5,0x9d,0x5f,0x2f,0x58,0x3e,0x3c,0xbd,0xae,0xd5,0xcc,0xbf,0x54,0x39 -,0x39,0x38,0x44,0xd4,0xde,0xbe,0xbb,0xc9,0x43,0x42,0x54,0xc8,0xa4,0xb9,0x2f,0x31,0x43,0x3d,0xc9,0xa6,0xe6,0x2d,0x49,0xbf,0x54,0xe0,0x6d,0x34,0x32,0x36,0x49,0xc4 -,0xab,0xbd,0x58,0x47,0x3c,0x4d,0xba,0xee,0x4b,0xbe,0xca,0x6e,0xbb,0xc4,0x28,0x3f,0xae,0xbc,0xda,0xc2,0xce,0x30,0x34,0x44,0x56,0xb7,0xb2,0x54,0x33,0x3a,0x39,0xbc -,0xaa,0xbf,0x46,0x3a,0x4d,0xbd,0xa5,0xb9,0x3f,0xc8,0x4f,0x26,0x3d,0xb5,0xbb,0xbe,0xba,0x4a,0x35,0x58,0x66,0x32,0x34,0x3c,0x70,0xb4,0xba,0x3d,0x2a,0x36,0x49,0xbf -,0xb2,0xce,0x7d,0xcd,0x3c,0x4d,0xaf,0xb4,0xde,0xdb,0xd9,0x2e,0x4c,0xae,0xb7,0x42,0x35,0x48,0xf4,0xae,0xb9,0x49,0x34,0x35,0x2f,0x3a,0xd0,0xc8,0xb1,0xb4,0xcc,0xbc -,0xbc,0xd8,0xd9,0xe6,0x2c,0x2a,0xaf,0xa4,0xb7,0x3f,0x43,0x48,0x50,0xbd,0xf5,0x30,0x31,0x3a,0x44,0xce,0xc2,0xce,0x51,0x3e,0x2e,0x34,0x47,0xb9,0xac,0xd1,0x3c,0xe0 -,0xa9,0xcb,0x41,0x4d,0x4c,0x4f,0xbb,0xa9,0xde,0x3d,0x3e,0x70,0xcd,0xbf,0xb9,0x48,0x3c,0x33,0x2d,0x3b,0xbe,0xac,0xcc,0x37,0x3c,0xd9,0xcd,0xb9,0xae,0xbc,0x4d,0x5f -,0xb2,0xc3,0x3a,0x48,0xed,0xed,0xd6,0xcf,0xde,0x3d,0x4b,0x40,0x3d,0xbc,0xb4,0x5d,0x2c,0x2f,0x3e,0xd8,0xaf,0xad,0xd8,0x23,0x2b,0xe0,0xba,0xdc,0x46,0xd4,0xed,0xc2 -,0xc9,0xc8,0xe1,0xcf,0xd1,0x2f,0x37,0xd7,0xb3,0xc6,0xc4,0xc5,0x4c,0xc6,0xac,0xd7,0x25,0x26,0x39,0xcc,0xc6,0xbb,0xbb,0xd9,0xde,0xbc,0xb0,0xc2,0xce,0x3d,0x26,0x25 -,0x4a,0xb5,0xaf,0xae,0xbf,0x67,0x63,0xaf,0xbb,0x2c,0x24,0x2b,0x4b,0xbf,0xa9,0xb5,0x55,0x3d,0x3d,0x3b,0x49,0xdd,0xdd,0x66,0x36,0x57,0xbe,0xb3,0xab,0x73,0x29,0x20 -,0x2e,0xb3,0xab,0xb0,0xbb,0xc5,0xc8,0xb4,0xbd,0x3c,0x28,0x2b,0x3f,0xe9,0xb9,0xac,0xb3,0x75,0x45,0x3f,0xf8,0xf2,0xf3,0x30,0x2a,0x49,0xae,0x9d,0xaa,0x5d,0x23,0x27 -,0x38,0xc8,0xad,0xd4,0xca,0x67,0xdf,0xc1,0xb6,0xb4,0x55,0x29,0x1e,0x25,0x47,0xa7,0xaa,0xe5,0x67,0xdd,0xb4,0xc6,0x39,0x1f,0x1f,0x3a,0xc7,0xa5,0xa7,0xbe,0x5c,0xcd -,0xbd,0xb1,0xb0,0x46,0x2e,0x2b,0x2f,0xdd,0xa4,0x9e,0xba,0x2b,0x22,0x34,0xaf,0xa9,0xc9,0x36,0x2b,0x42,0xbf,0xb0,0xba,0x3d,0x2d,0x38,0xe6,0xbc,0xb2,0xca,0x4e,0x3b -,0x3d,0xb7,0xa9,0xbb,0x2b,0x23,0x32,0xca,0xa7,0xb3,0x38,0x28,0x3e,0xbe,0xb0,0xbc,0x3e,0x29,0x26,0x39,0xd4,0xaf,0xac,0xb4,0xde,0x2d,0x2d,0xbf,0xa9,0xb2,0xc6,0xe9 -,0xd7,0xb7,0xac,0xd8,0x25,0x1f,0x2d,0xd2,0xa7,0xa4,0xbe,0x56,0x6d,0xbd,0xba,0xd5,0x44,0x23,0x1d,0x2c,0xb5,0x9f,0xa1,0xaf,0x44,0x32,0x2f,0xec,0xcb,0x3c,0x2e,0x34 -,0x4c,0xd2,0xa5,0xab,0xbf,0xd8,0x3d,0x2c,0x2f,0xd3,0xc9,0x3d,0x2c,0x2f,0xe1,0xaf,0xa7,0xcf,0x2a,0x24,0x45,0xa7,0xaa,0xdf,0x3d,0x4a,0xbf,0xaf,0xbb,0x46,0x1f,0x1c -,0x2f,0xcf,0xa7,0x97,0x98,0xab,0xca,0x4d,0x49,0xe9,0x2a,0x1d,0x26,0xab,0x92,0x96,0x44,0x19,0x17,0x1b,0x3b,0x41,0xc8,0x2d,0x28,0xae,0x94,0x90,0x98,0xc1,0x17,0x21 -,0x3b,0x2c,0x1d,0x27,0xad,0x93,0x90,0xaa,0x24,0x1b,0x26,0x43,0x37,0x1e,0x1d,0x23,0xb4,0x93,0x94,0x9e,0xbc,0x56,0x2d,0x2d,0x27,0x27,0x33,0xca,0x9b,0x8e,0x9d,0x1f -,0x19,0x1e,0x4a,0xb2,0x2e,0x0d,0x1f,0x8e,0x88,0x98,0x4d,0x26,0x2d,0x44,0x24,0x16,0x18,0x28,0x9b,0x8c,0x93,0xb6,0x3f,0x2e,0x18,0x2b,0x5e,0x2c,0x1b,0x17,0xa9,0x8a -,0x8e,0xad,0x43,0xc5,0xad,0x3d,0x12,0x0e,0x18,0xa8,0x8e,0x97,0xbe,0x38,0x31,0x1b,0x26,0xbf,0xb6,0x22,0x1f,0xbd,0x91,0x8f,0xae,0x68,0x49,0xc0,0x26,0x1a,0x0e,0x12 -,0x96,0x83,0x8f,0x1f,0x1a,0x21,0x25,0x3b,0x29,0x18,0x19,0x34,0x93,0x8a,0x91,0x9b,0x9b,0xbe,0x16,0x19,0x27,0x17,0x0e,0xcb,0x92,0x93,0xcd,0x1e,0x21,0x43,0xa2,0xb3 -,0x22,0x0d,0x1e,0x95,0x86,0x91,0xad,0xe6,0x2d,0x27,0x18,0x1b,0x14,0x17,0xa9,0x98,0x9f,0xc2,0xda,0xbf,0x4b,0xf9,0xd1,0x47,0x1e,0x23,0x97,0x8d,0xa6,0x48,0xb9,0xbb -,0x2d,0x28,0x20,0x1b,0x27,0xb5,0x97,0x9b,0xbd,0x3e,0xc1,0x50,0x22,0x39,0x3f,0x19,0x1d,0xb4,0xa6,0xc5,0xc8,0xbd,0x4a,0x58,0x3a,0x35,0x24,0x25,0xb9,0x96,0x91,0xc2 -,0x62,0xb6,0xaf,0x4c,0x30,0x3e,0x36,0x3c,0x4d,0x59,0x32,0x3b,0x6e,0x2d,0x1b,0x1e,0x4e,0x95,0x91,0x9a,0x96,0x9c,0x22,0x17,0x34,0x31,0x1e,0x2b,0xaa,0xab,0xbc,0x5d -,0x2f,0x20,0x4e,0xb6,0xb4,0x26,0x11,0x3f,0x8f,0x8e,0xb6,0xbc,0x63,0x2e,0x23,0x21,0x32,0x28,0xc8,0x9f,0xbe,0x37,0x3c,0x64,0x44,0x32,0x44,0xd1,0x5a,0x27,0xb0,0x8e -,0x9a,0x5a,0xdf,0xb1,0x45,0x2f,0x46,0x25,0x1f,0x46,0xa6,0x95,0x9f,0x42,0x42,0xb8,0x30,0x20,0x51,0x25,0x11,0x2b,0x9f,0xa2,0xb2,0xa9,0x4f,0x28,0x2e,0x24,0x2a,0x20 -,0x28,0xad,0x98,0x9e,0xd7,0xa0,0x9e,0xd6,0x2f,0x2f,0x24,0x1f,0xdd,0xa2,0xa6,0xa9,0xa5,0xab,0x43,0x14,0x14,0x25,0x5c,0x3f,0xbf,0x9b,0xaa,0x65,0xcf,0xad,0xe3,0xe4 -,0xe4,0x1f,0x14,0x3f,0x97,0x90,0x98,0xcb,0xdc,0xba,0x2c,0x1a,0x2f,0x2b,0x27,0xdf,0xc8,0x6e,0x4d,0xa5,0xb0,0x30,0x29,0x22,0x29,0x40,0x3d,0xc0,0xa0,0xac,0xbe,0xb0 -,0xc8,0x2e,0x4e,0xfe,0x3a,0xe0,0xaf,0xa5,0xac,0xb5,0xad,0xb7,0xef,0x28,0x20,0x26,0x2f,0x53,0xb8,0xa3,0xba,0x51,0x6c,0x4c,0x29,0x21,0x3e,0x3a,0x31,0xf0,0xba,0xb5 -,0xbe,0xd7,0xb9,0xa4,0xb3,0x3e,0x37,0x38,0x53,0xab,0xa8,0xb6,0xb7,0xae,0x5c,0x24,0x2e,0x32,0x30,0x2c,0x20,0x2f,0xbf,0xb7,0x52,0x39,0x49,0xcc,0xaf,0xb7,0x2f,0x52 -,0x9f,0x9e,0xa2,0xab,0xbf,0xc3,0x6c,0x20,0x23,0x44,0x72,0x44,0x3a,0x39,0x5c,0xb2,0xb9,0xd3,0x3b,0x31,0x55,0x43,0x3a,0xb9,0xaf,0xb6,0x6d,0x31,0x3a,0xdb,0xb7,0xb7 -,0xc3,0x3e,0x2d,0x4c,0xb7,0xc0,0xc0,0xba,0xc6,0x48,0x56,0x52,0x35,0x6c,0x69,0xbb,0xae,0xe7,0x37,0x31,0x2e,0x35,0xbf,0xd4,0x51,0x7c,0xd8,0x63,0xbf,0xb1,0xaf,0xb0 -,0x36,0x25,0x35,0xc5,0xbc,0xbc,0x5e,0xc8,0xb0,0xba,0xde,0x3a,0x39,0xe3,0xc2,0x3a,0x2a,0x38,0xb2,0xab,0x7b,0x2d,0x40,0xc3,0xbd,0x44,0x2f,0xfd,0xb0,0xbf,0x3c,0x37 -,0xbf,0xab,0xce,0x35,0x30,0xdc,0xc5,0x4c,0x2a,0x32,0xac,0xa5,0xb9,0x3e,0x2e,0x3e,0xbc,0xbd,0xf5,0xda,0xca,0xb1,0xb6,0xdf,0x3e,0x3b,0x3e,0x49,0x5e,0xdc,0x5a,0x2e -,0x2e,0x4b,0xb3,0xa7,0xaa,0xca,0x44,0x3a,0x4e,0xcd,0xbc,0xb6,0xd6,0x3a,0x2f,0x39,0xfe,0xbe,0xbc,0x3e,0x2c,0x2f,0x36,0xe2,0xb4,0xb4,0xc5,0x6f,0x38,0x57,0xac,0xae -,0xb2,0x68,0x25,0x38,0xbb,0xaf,0xcd,0x33,0x38,0xbf,0xc9,0x3a,0x31,0x3c,0xc9,0xb2,0xba,0x5d,0xc4,0xaf,0xc7,0x32,0x37,0xdc,0xad,0xbd,0x2d,0x22,0x2f,0xac,0xa6,0xb4 -,0x58,0x3a,0x4c,0x6a,0x31,0x36,0xdb,0xbf,0xbf,0x54,0x5f,0xb7,0xb3,0x4d,0x39,0x41,0xf5,0xc7,0x50,0x3b,0x5e,0xee,0xc5,0xbe,0xde,0x47,0x56,0x47,0x35,0x63,0xd1,0xc1 -,0xb3,0xb2,0xdb,0x53,0x5d,0xca,0xbb,0x57,0x43,0x2f,0x38,0xc9,0xb7,0xb7,0x58,0x2a,0x3d,0xe5,0x49,0xd1,0x4e,0x58,0xba,0xbc,0x66,0xc5,0xad,0xbb,0xb8,0x56,0x2c,0x4f -,0x49,0x42,0x4a,0x3d,0xea,0xbc,0x54,0x2e,0x38,0x6f,0xb0,0xbd,0x61,0x41,0x4c,0xb9,0xb7,0x7a,0x65,0xc6,0xb2,0xcd,0x3c,0x40,0x66,0xc0,0x59,0x35,0x2b,0x3f,0xb2,0xbd -,0x47,0x56,0xfa,0xcd,0xba,0xbc,0xbf,0xb8,0x5a,0x2e,0x4d,0x4f,0x5e,0xc3,0x4a,0x3b,0x49,0x4e,0x51,0xd8,0xcc,0xe4,0xd3,0xb4,0xaf,0xd3,0x4f,0x47,0x34,0x3b,0x70,0xd6 -,0x67,0x72,0xd9,0x61,0xff,0x43,0xc8,0xc9,0x3e,0x3e,0x39,0x3e,0xb9,0xae,0xb9,0xbc,0xd5,0xba,0xb9,0x5b,0x37,0x34,0x2a,0x44,0xba,0xd3,0x6a,0xdf,0xd2,0xb3,0xbd,0xe2 -,0xec,0x47,0x4d,0x35,0x38,0x5a,0xb0,0xb6,0xe1,0x48,0x40,0xe0,0xf6,0xdd,0x64,0x59,0xd4,0xd0,0x4c,0xe9,0xa5,0xac,0x31,0x1e,0x1e,0x2d,0xbc,0xaf,0xb7,0xbd,0x5b,0xee -,0xbe,0xcd,0xd6,0xcc,0x3a,0x2a,0x32,0x3d,0xbf,0xab,0xa4,0xa3,0x59,0x34,0x2f,0x32,0x3d,0xf7,0x3a,0x3b,0x69,0xcb,0xa8,0xaa,0xaf,0xbd,0xc4,0x43,0x37,0x33,0x3e,0x58 -,0x42,0x4c,0xbd,0xcc,0x4c,0x3d,0x35,0x56,0xcd,0x5e,0xba,0xaa,0xbd,0xbd,0xb3,0xc8,0x5d,0x60,0x2a,0x25,0x1f,0x2c,0xc5,0xa8,0x9d,0xa9,0x59,0x29,0x2e,0x6a,0xc6,0x3b -,0x31,0x55,0xce,0xb3,0xa9,0xa8,0xbb,0xbc,0x45,0x26,0x2a,0x34,0x53,0xe3,0xfe,0x51,0xc9,0x4c,0xed,0xbb,0xba,0xb1,0x4a,0x2b,0x43,0xc4,0xb5,0xa7,0xb5,0x40,0x35,0x24 -,0x29,0x58,0x71,0x5b,0x59,0x5c,0xbb,0x9f,0xa1,0xae,0x46,0x35,0x30,0x24,0x27,0x45,0xb6,0xae,0xb1,0x56,0xc7,0xb2,0xdb,0x3b,0x2f,0x2f,0x40,0x4c,0x4d,0xb6,0xa2,0xa8 -,0xc4,0x41,0x35,0x3c,0x56,0x5f,0x57,0x54,0x5f,0xbc,0xce,0xcf,0x65,0x40,0x4b,0xdd,0x4b,0x3b,0x40,0x35,0xb9,0xa8,0xa6,0xab,0x4c,0x28,0x23,0x2f,0x4f,0xbc,0xdc,0xe8 -,0xc9,0xc5,0xa8,0xa0,0xc3,0x2d,0x2a,0x22,0x27,0x30,0x4d,0xb2,0xa8,0xab,0xb1,0x65,0x39,0x3e,0xd7,0xe6,0x7e,0x41,0x3b,0x5d,0xbe,0xa2,0xa3,0xc3,0x2a,0x25,0x26,0x37 -,0x36,0xe1,0xa7,0xa1,0xb1,0x62,0x3b,0x4e,0xc4,0xcc,0x56,0x2e,0x34,0x32,0x54,0xad,0x9d,0x9e,0x4d,0x1f,0x1f,0x35,0xde,0x4a,0x3f,0x57,0xaf,0xab,0x9e,0xab,0x75,0x3d -,0x2e,0x2e,0x26,0x26,0x3a,0xae,0xa9,0xa5,0xb3,0x69,0x38,0x33,0x53,0x3d,0x32,0x3a,0xcd,0xb5,0xa6,0x9e,0xae,0x49,0x32,0x37,0x30,0x3b,0x28,0x20,0x33,0xae,0x98,0xa0 -,0x4a,0x2a,0x3c,0xc8,0x66,0x3e,0x2c,0x3c,0xc2,0xaa,0x9f,0xab,0xbb,0x2f,0x25,0x29,0x47,0x39,0x3a,0x4b,0xc0,0x9f,0x9f,0xae,0x33,0x32,0x41,0x39,0x1f,0x1f,0x3c,0xa6 -,0x98,0x9e,0xae,0x6b,0x39,0x2f,0x3a,0x49,0x2a,0x2a,0x33,0x53,0xa7,0x9d,0xad,0x53,0xec,0xc3,0xf8,0x29,0x1c,0x22,0xb3,0x9c,0x9e,0xbe,0x2f,0x2d,0x46,0xaf,0xbd,0x2e -,0x1e,0x1f,0xec,0x9f,0x99,0xa6,0x49,0x2a,0x2a,0x4f,0x53,0x32,0x2e,0xc5,0xad,0x9f,0x9f,0xb9,0x2e,0x28,0x45,0x37,0x1f,0x1b,0x31,0xad,0x9b,0x9f,0xad,0xd4,0x52,0xb7 -,0xca,0x2b,0x1b,0x25,0xbd,0xa8,0x9d,0xad,0x3b,0x22,0x3b,0xaf,0xb8,0x2f,0x18,0x1c,0xcc,0x9a,0x9b,0xb4,0x2f,0x46,0xa5,0xa7,0x32,0x19,0x26,0xbd,0xa3,0xa4,0xb7,0x44 -,0x29,0x2d,0x5c,0xb8,0x2d,0x1c,0x24,0xbd,0x9c,0x98,0x9f,0x75,0x44,0xcc,0xce,0x24,0x15,0x1f,0xb6,0x9d,0xa6,0xcb,0x3c,0xdc,0xb2,0xbc,0x3d,0x22,0x20,0x3f,0xae,0xad -,0xb4,0xdf,0x4e,0xc9,0xa3,0xa6,0x34,0x16,0x14,0x37,0x9d,0x98,0xaa,0x39,0x25,0x3f,0xa0,0xa9,0x20,0x14,0x29,0xab,0xa3,0xa8,0xb9,0xbd,0xc4,0xc6,0xba,0x3f,0x1f,0x1c -,0x37,0xbc,0xad,0xa3,0xb4,0x28,0x30,0xb3,0xf6,0x25,0x2d,0x4b,0xb3,0x9e,0xcd,0xc7,0x97,0x8c,0x93,0x20,0x05,0x00,0xbd,0x8c,0x9b,0x98,0x9c,0x29,0x0e,0x1c,0x1f,0xb0 -,0xa0,0xa3,0xa9,0x1f,0x0e,0x18,0x24,0x0d,0x2b,0x89,0x80,0x86,0x29,0x0a,0x1e,0x9c,0x89,0x8f,0xbd,0x14,0x25,0x28,0x0d,0x12,0x1b,0x3e,0x2f,0x1e,0x1b,0x6d,0x99,0xb3 -,0xb3,0xae,0x29,0x2d,0x8e,0x92,0xa4,0x91,0x99,0xa2,0x9d,0xb8,0x23,0x1c,0x0c,0x02,0x0d,0xd7,0x3d,0xad,0xd1,0x37,0xa5,0x9f,0xab,0x5e,0xbc,0x2c,0xca,0x8d,0x8a,0xa4 -,0x1b,0x0c,0x13,0xa0,0x8f,0x99,0x35,0x25,0xd0,0x2b,0x1d,0x13,0x2d,0x98,0x99,0x9d,0x31,0x0f,0x0b,0x0b,0x1e,0xc1,0x95,0x84,0x83,0xa1,0x17,0x29,0xb4,0xa7,0xaa,0xbd -,0x5a,0xad,0x1c,0x0a,0x37,0xaa,0xba,0x24,0x0c,0x07,0x1c,0x97,0x96,0xc4,0x58,0x49,0x9f,0x8d,0x97,0x9d,0x97,0xa6,0xad,0xa0,0x38,0x14,0x1d,0x2e,0x0e,0x0c,0x20,0x26 -,0x25,0x20,0x9f,0x89,0x9a,0x2e,0x28,0xdf,0xb6,0x9f,0x8e,0x8f,0xcd,0x19,0x12,0x1a,0x2c,0xa2,0x8b,0x9a,0x2b,0x28,0x17,0x0e,0x17,0xb2,0x8d,0x99,0x77,0x26,0x37,0x27 -,0x11,0x1d,0x3b,0x3b,0x9b,0x87,0x8f,0x38,0x2c,0xa5,0x9a,0xa1,0xcc,0xdb,0xf9,0x16,0x0d,0x47,0xcc,0x20,0x21,0x1d,0x17,0x2b,0x99,0x9f,0x20,0x25,0xaa,0x99,0xa4,0xad -,0x92,0x8c,0x97,0xaa,0xb9,0x27,0x12,0x25,0xcc,0x19,0x0a,0x15,0x3d,0x39,0x1d,0xbe,0x8e,0x99,0xcc,0x2b,0x2f,0x55,0xac,0x8e,0x89,0x99,0x21,0x0e,0x0d,0x0d,0x4b,0x88 -,0x89,0xaa,0x23,0x1a,0x16,0x1f,0xb4,0x98,0xc6,0x1e,0x23,0xb4,0x38,0x0d,0x1e,0xbb,0x6b,0xb0,0x91,0x95,0xbf,0xb9,0x98,0x9c,0x67,0x36,0xbe,0xae,0x27,0x19,0x4f,0x4a -,0x1d,0x1d,0x1f,0x18,0x24,0xa0,0x98,0x37,0x17,0x34,0xac,0xb5,0xa0,0x89,0x87,0x98,0x46,0x27,0x30,0x2f,0x45,0x6c,0x19,0x0a,0x16,0xbd,0xcd,0x20,0x51,0x91,0x8f,0xa2 -,0x34,0x1b,0x1a,0x31,0x99,0x8e,0xa1,0x22,0x1a,0x13,0x0a,0x26,0x8c,0x89,0x9e,0x57,0x25,0x16,0x1b,0xae,0x95,0xb1,0x2d,0xde,0xab,0x50,0x28,0x4a,0xfb,0x1d,0x1e,0xa5 -,0x93,0x9b,0xb5,0xe9,0x30,0x29,0xc5,0x9f,0xba,0x1d,0x1d,0xdd,0xb9,0x28,0x17,0x12,0x14,0x45,0x8d,0x8b,0xbf,0x1a,0x27,0xbf,0xa9,0x91,0x87,0x8b,0xa2,0x35,0x22,0x1c -,0x1d,0x37,0x3a,0x12,0x07,0x0c,0x21,0x2d,0x3a,0xa1,0x8f,0x95,0xa2,0xb2,0x44,0x2e,0xbd,0x96,0x91,0x97,0xa2,0xb3,0x1a,0x0a,0x19,0x9a,0x8e,0x9e,0x3c,0x18,0x10,0x19 -,0xd9,0xc9,0x1e,0x15,0x2c,0xb2,0xb6,0xd9,0x59,0x2e,0x26,0xcc,0x95,0x8e,0x90,0x9b,0xab,0x4e,0x3e,0xad,0x9d,0xa8,0x77,0x3e,0x33,0x1a,0x0f,0x0e,0x0d,0x0f,0x22,0xac -,0xa0,0x49,0x23,0x2e,0x3a,0xbe,0x93,0x87,0x87,0x90,0xa9,0xd1,0xf6,0xa8,0x9d,0x6f,0x0f,0x07,0x0d,0x1f,0x2a,0x2c,0xcd,0xa4,0x9d,0xa3,0xbb,0x23,0x17,0x26,0xba,0x9f -,0x9d,0x9c,0xa5,0x34,0x1f,0x32,0xa6,0x99,0x9c,0xaf,0x34,0x21,0x28,0x48,0x4b,0x2c,0x2e,0xda,0xde,0x37,0x28,0x2f,0x23,0x18,0x27,0xb3,0x98,0x8f,0x93,0xa4,0x31,0x20 -,0x3b,0xaf,0xb0,0xb3,0xa8,0xa8,0xc0,0x27,0x18,0x0e,0x0d,0x1f,0xaa,0x9c,0xaf,0x36,0x2d,0x3c,0xaf,0x93,0x8c,0x93,0xad,0x47,0x35,0x37,0xce,0xad,0xcb,0x1e,0x10,0x15 -,0x1b,0x1e,0x2b,0xc9,0xa5,0x9f,0x9b,0x9b,0xb5,0x46,0x38,0x66,0xc7,0xb0,0xa7,0xb2,0x29,0x16,0x25,0xb4,0x99,0x99,0xa8,0x2c,0x17,0x1b,0x2c,0x35,0x2a,0x34,0xdd,0xad -,0xac,0xad,0xba,0x30,0x1b,0x1a,0x2a,0xc5,0x98,0x8d,0x8f,0xa2,0x45,0x35,0x3a,0x42,0xcd,0xab,0xa9,0x48,0x24,0x1a,0x18,0x18,0x24,0x52,0x4f,0x3a,0x3a,0x3f,0x36,0xbc -,0x99,0x8c,0x8e,0x95,0x9d,0xca,0x4c,0x5d,0xcd,0x3b,0x1b,0x17,0x1c,0x1e,0x1e,0x29,0x41,0xd5,0xbf,0xae,0xb6,0x39,0x32,0x5a,0xb6,0xaa,0xa9,0xa4,0xb0,0x47,0x2d,0x3a -,0xb8,0xb2,0xa5,0xa3,0xbb,0x5d,0x45,0x36,0x20,0x18,0x1a,0x21,0x33,0xb7,0x9f,0x9e,0xb6,0x23,0x1c,0x24,0x4a,0xa0,0x95,0x98,0xb2,0xcc,0xb5,0xac,0xa8,0xab,0xa7,0xb2 -,0x35,0x20,0x1c,0x15,0x15,0x1e,0x29,0x36,0x49,0xb9,0x63,0x33,0x43,0xaa,0x99,0x98,0x93,0x98,0x9f,0xb0,0xbc,0xec,0x28,0x1c,0x18,0x15,0x12,0x19,0x29,0xe5,0xb6,0xab -,0x9e,0xa9,0xbf,0xee,0x58,0x42,0xf4,0xac,0x9f,0x9f,0xb0,0x4b,0x3d,0x3e,0x3c,0x4a,0xdf,0x42,0xf1,0xaf,0xbc,0x36,0x22,0x26,0x2b,0x6f,0xba,0xae,0xb7,0x45,0x2c,0x33 -,0x38,0x32,0xbb,0xa1,0x9f,0xa6,0xac,0xf0,0x68,0xb9,0xa3,0x9b,0xa5,0xc6,0x32,0x21,0x14,0x10,0x13,0x14,0x1b,0x4f,0xaa,0xb2,0x6c,0x56,0xa9,0x99,0x94,0x99,0xa6,0xd4 -,0xb7,0xa8,0xa8,0xcc,0x26,0x1c,0x1b,0x1c,0x1e,0x28,0x32,0x39,0xb9,0x9c,0x9d,0xb0,0xc2,0x50,0x29,0x2e,0x4d,0xc4,0xb8,0xb8,0xae,0xa6,0xae,0xde,0xbd,0xd9,0x37,0x5d -,0xce,0x38,0x2b,0x3b,0x34,0x28,0x29,0xbb,0xa5,0xaa,0xc5,0x29,0x1b,0x17,0x2a,0xad,0x9d,0x9e,0xa1,0xaa,0xbe,0xc9,0xbb,0xae,0xae,0xb1,0xb2,0xba,0x35,0x1c,0x1a,0x17 -,0x12,0x13,0x1a,0x35,0xc0,0xc0,0xad,0x9d,0x98,0x90,0x8e,0x96,0xaf,0xce,0xc0,0xd0,0x6b,0x47,0x31,0x1e,0x17,0x1f,0x2c,0x25,0x1a,0x1e,0x36,0xb5,0x9f,0x9c,0xa7,0xdd -,0xb7,0xae,0xcb,0xd5,0xbe,0x5f,0x46,0xc8,0xb3,0xad,0xbf,0xcf,0xbb,0xc2,0x34,0x22,0x19,0x1a,0x2b,0xc0,0xa1,0xa8,0xb0,0xbc,0x45,0x1f,0x1a,0x1b,0x20,0x41,0xb6,0x9d -,0x97,0x9b,0x9c,0x9c,0x9f,0xaa,0xc0,0xd9,0x6e,0x31,0x26,0x20,0x14,0x16,0x27,0x30,0x2a,0x22,0x24,0x33,0xb6,0x9d,0x8f,0x8d,0x98,0x9f,0xa1,0xb1,0x4b,0x3a,0x2f,0x24 -,0x1e,0x28,0x38,0x45,0x5f,0x4f,0x2e,0x20,0x28,0x49,0xcf,0x3d,0x4c,0xb9,0xad,0xa9,0xa1,0x9f,0xbc,0x39,0x2f,0x3b,0x4d,0xce,0xb3,0xad,0xae,0xab,0xb8,0x31,0x1a,0x18 -,0x1e,0x2f,0xc1,0xae,0xaa,0xb8,0x46,0x3c,0x55,0x3d,0x2f,0x32,0x4e,0xbc,0xac,0xa0,0x9b,0x9d,0x9a,0x98,0xa3,0x50,0x20,0x19,0x18,0x16,0x1a,0x28,0x29,0x2c,0x74,0xc1 -,0xe2,0x44,0x42,0xc0,0xa7,0x9c,0x97,0x99,0x9c,0x9a,0x9e,0xc2,0x21,0x16,0x14,0x19,0x1e,0x29,0x37,0x32,0x53,0xb4,0xa5,0xac,0x3b,0x1d,0x23,0xdd,0xa3,0x9b,0xa4,0xaf -,0xb5,0xaa,0xad,0x52,0x2f,0x2d,0x31,0x40,0xd4,0xb6,0xb5,0xbb,0xb8,0xd5,0x3c,0x29,0x2a,0x2f,0x2f,0x2a,0x2c,0x38,0x4f,0xb9,0xa7,0xab,0xe1,0x5e,0x7b,0xb6,0xa3,0x9b -,0x99,0x9c,0x9e,0xab,0xc4,0x21,0x10,0x0b,0x0e,0x17,0x1c,0x25,0x31,0xd0,0xa1,0x98,0x9d,0xa7,0xb5,0xbb,0xac,0xa4,0x9e,0x9f,0xb3,0xd1,0x5e,0x47,0x2c,0x19,0x16,0x1b -,0x2c,0x51,0xc6,0xd1,0xbd,0xad,0xa9,0xbd,0x38,0x2b,0x34,0x47,0xca,0xa5,0xa0,0xa7,0xaa,0xa5,0xa0,0xb8,0x28,0x1a,0x1d,0x26,0x34,0x38,0x30,0xcc,0x9d,0x97,0xa8,0x2d -,0x15,0x16,0x25,0x53,0xc7,0x54,0x3a,0xd6,0xa3,0x96,0x99,0xc2,0x34,0x41,0xb0,0x9d,0x9d,0xae,0x4e,0x28,0x23,0x1f,0x14,0x0f,0x12,0x1e,0x38,0xb6,0xab,0xa0,0x98,0x92 -,0x90,0x9d,0xbf,0x40,0x3e,0x4d,0xc4,0xcc,0x70,0x78,0x4f,0x6b,0x67,0x2a,0x18,0x16,0x1b,0x2d,0x4e,0x5b,0x73,0xad,0x96,0x91,0x9e,0x48,0x25,0x2d,0x7a,0xb9,0x59,0x42 -,0xcb,0xb5,0xa6,0xaa,0x53,0x24,0x20,0x20,0x3e,0xb3,0xae,0xb0,0x79,0x78,0xdc,0x2b,0x16,0x10,0x18,0x37,0xb5,0xa9,0x9f,0x98,0x92,0x8d,0x8e,0x9f,0xcb,0x35,0x28,0x26 -,0x22,0x1b,0x1f,0x28,0x2f,0x46,0x2d,0x1e,0x1c,0x2a,0xc9,0xaf,0xbc,0xae,0x9f,0x93,0x8a,0x8e,0xad,0x25,0x1e,0x2d,0xc1,0x4f,0x22,0x1e,0x23,0x29,0x36,0xc9,0xbe,0x3e -,0x1b,0x12,0x1f,0xa2,0x94,0x9c,0xa5,0xa3,0xa1,0x7a,0x1d,0x27,0xa2,0x90,0xaa,0x0f,0x06,0x1b,0x8d,0x88,0x9c,0x2b,0x27,0x3c,0x23,0x22,0x6a,0xa3,0xbd,0x18,0x08,0x0f -,0x9c,0x8a,0x98,0xba,0xbf,0xae,0xc6,0x28,0x44,0x8f,0x83,0x97,0x0e,0x02,0x10,0x94,0x90,0x38,0x12,0x16,0x22,0x14,0x19,0xae,0x8c,0x8c,0x4c,0x0b,0x13,0x93,0x84,0x8d -,0xa0,0xc4,0x42,0x1b,0x0b,0x14,0x9d,0x86,0x9f,0x08,0x00,0x0d,0x8f,0x83,0x8f,0x2e,0x15,0x23,0x1d,0x1c,0xa4,0x86,0x84,0xb6,0x05,0x06,0xd7,0x89,0x8f,0x9e,0xad,0x56 -,0x13,0x07,0x18,0x95,0x82,0x90,0x0e,0x00,0x0a,0x9e,0x89,0x9c,0x29,0x1b,0x2c,0x1d,0x1a,0xa3,0x84,0x82,0xa1,0x0b,0x05,0xdc,0x8b,0x8c,0xa4,0x3b,0x1c,0x09,0x01,0x16 -,0x8c,0x80,0x98,0x08,0x00,0x12,0x8c,0x85,0x8f,0xa0,0xb9,0x2f,0x0e,0x11,0xa1,0x83,0x86,0x4f,0x05,0x05,0x2b,0x90,0x9e,0xb2,0x54,0x2d,0x10,0x04,0x1a,0x8d,0x80,0x93 -,0x0c,0x01,0x32,0x87,0x8a,0xa0,0xcc,0x4e,0x2d,0x0b,0x09,0xc6,0x84,0x85,0x28,0x03,0x08,0xb1,0x8d,0x90,0x98,0xba,0x18,0x08,0x03,0x1c,0x89,0x80,0x9f,0x09,0x04,0x40 -,0x85,0x86,0x93,0xaf,0x66,0x1f,0x0c,0x0a,0x53,0x84,0x8e,0x0e,0x00,0x0c,0x9c,0x8b,0x96,0xa7,0x5f,0x1f,0x0b,0x15,0x95,0x81,0x84,0x36,0x01,0x0d,0xa0,0x8a,0x92,0xaf -,0x3b,0x1c,0x0b,0x05,0x1c,0x8e,0x84,0xb2,0x08,0x04,0xec,0x8c,0x90,0x96,0x96,0xb7,0x18,0x08,0x0e,0x93,0x80,0x8d,0x0e,0x00,0x0e,0x8e,0x88,0x9f,0xd7,0x4d,0x24,0x0d -,0x08,0x24,0x86,0x82,0x35,0x00,0x08,0xaf,0x8a,0x92,0x9f,0xa7,0xd3,0x12,0x0a,0x3b,0x88,0x80,0x9d,0x07,0x01,0x25,0x90,0x8e,0xa1,0x20,0x14,0x10,0x09,0x12,0xa2,0x83 -,0x87,0x35,0x05,0x0e,0x92,0x86,0x8c,0x9f,0xed,0x27,0x0b,0x05,0x23,0x88,0x83,0x40,0x04,0x03,0x45,0x89,0x8e,0x9c,0x4f,0x2c,0x0e,0x0a,0x1f,0x92,0x82,0x94,0x14,0x07 -,0x1b,0x96,0x87,0x8e,0xa8,0x3c,0x14,0x06,0x0e,0xac,0x85,0x8a,0x1d,0x03,0x07,0xbc,0x89,0x8c,0xa7,0x2b,0x26,0x12,0x0a,0x2d,0x8b,0x83,0x99,0x10,0x08,0x3f,0x91,0x8c -,0x95,0xad,0x39,0x0c,0x04,0x0e,0x9c,0x87,0x96,0x1a,0x09,0x12,0xa2,0x8b,0x8d,0x9b,0xc1,0x29,0x0e,0x0f,0x39,0x8b,0x88,0xbc,0x0d,0x0a,0x3d,0x94,0x90,0xa5,0xc8,0x2e -,0x0e,0x05,0x12,0x92,0x83,0x9c,0x14,0x0d,0x39,0x9e,0x95,0x92,0x9e,0xae,0x18,0x08,0x0e,0xb4,0x8b,0x93,0x34,0x11,0x1d,0xbc,0x9e,0x8f,0x9b,0xec,0x28,0x12,0x0d,0x18 -,0x9b,0x92,0xb4,0x1f,0x12,0x44,0x96,0x8f,0x96,0xa5,0xb6,0x28,0x10,0x13,0xb8,0x91,0xc3,0x19,0x1a,0x2f,0xc7,0xae,0x9d,0x9f,0xab,0x27,0x0e,0x17,0xc6,0x94,0x9a,0xd8 -,0x4a,0x4d,0x48,0xb8,0x9e,0xa2,0xcf,0x2a,0x19,0x16,0x21,0xb7,0xab,0x74,0x38,0xf6,0xb0,0xab,0xa2,0xd6,0x6d,0xaf,0x59,0x21,0x1f,0xbf,0x9f,0xdf,0x38,0x39,0xa6,0x9e -,0xb4,0xba,0x3e,0x38,0x20,0x1f,0x2a,0x64,0xc3,0x20,0x25,0xb9,0xa8,0x9d,0xa9,0xb7,0x35,0x3d,0xbd,0xd9,0xb9,0x49,0xbd,0x6f,0x2e,0x66,0xb4,0x97,0x9d,0x36,0x15,0x13 -,0x34,0x75,0x5c,0x7a,0xd0,0x3b,0x16,0x25,0x9f,0x8a,0x8b,0xbd,0x26,0x26,0x3e,0xc1,0x4c,0xad,0xaa,0x2b,0x10,0x0e,0x5d,0x92,0x8b,0xa1,0x1f,0x0f,0x12,0xf4,0x9e,0x9d -,0xba,0x36,0x1c,0x11,0x33,0x92,0x87,0x8e,0x42,0x0f,0x0e,0x2a,0x9d,0x96,0xa2,0xcf,0x1f,0x09,0x0e,0x99,0x83,0x8a,0x5c,0x0c,0x08,0x19,0xbd,0x9d,0x9d,0xa7,0x2d,0x0d -,0x0e,0xaf,0x86,0x83,0x90,0x25,0x0b,0x0d,0x21,0xa9,0x95,0x98,0x47,0x0a,0x02,0x19,0x8a,0x81,0x8d,0x25,0x0a,0x0f,0x31,0x9e,0x94,0x95,0x9e,0x1e,0x06,0x0c,0x9f,0x84 -,0x87,0xa7,0x0e,0x09,0x0c,0x2a,0x97,0x8c,0x90,0x24,0x03,0x08,0xb0,0x84,0x82,0x93,0x14,0x07,0x10,0x3a,0x9f,0x96,0x94,0xae,0x15,0x07,0x18,0x91,0x84,0x8c,0x56,0x0b -,0x09,0x0d,0x34,0x91,0x88,0x9b,0x0c,0x02,0x12,0x8f,0x80,0x88,0xb6,0x0e,0x0c,0x1d,0xc2,0x99,0x90,0x9a,0x2e,0x09,0x07,0x25,0x8a,0x84,0x93,0x1d,0x07,0x0b,0x13,0xaa -,0x8b,0x8d,0xc4,0x0a,0x04,0x2c,0x85,0x80,0x8e,0x19,0x08,0x16,0x25,0x41,0x9f,0x99,0xaa,0x13,0x07,0x0f,0x9f,0x83,0x8b,0x9e,0x13,0x08,0x0d,0x3c,0x8c,0x88,0x96,0x16 -,0x03,0x07,0xab,0x82,0x84,0x9d,0x14,0x0c,0x16,0x2d,0x9d,0x93,0x96,0xc8,0x09,0x05,0x1e,0x8d,0x84,0x8f,0x2e,0x09,0x0c,0x13,0xcd,0x8a,0x84,0x9c,0x0a,0x01,0x1c,0x88 -,0x80,0x8d,0x49,0x09,0x07,0x14,0x3b,0x9b,0x91,0x98,0x1f,0x07,0x09,0x5f,0x85,0x84,0x91,0x1e,0x0a,0x0d,0x19,0x9e,0x89,0x88,0x42,0x05,0x03,0x22,0x85,0x82,0x97,0x15 -,0x08,0x13,0x22,0xc7,0x96,0x8b,0xa5,0x0d,0x05,0x15,0x8f,0x82,0x8b,0xab,0x0c,0x09,0x0e,0x50,0x8b,0x86,0x92,0x12,0x02,0x07,0xa7,0x81,0x88,0xb2,0x0a,0x0a,0x18,0x28 -,0xac,0x8f,0x8c,0x50,0x0a,0x0c,0x3a,0x87,0x85,0x97,0x1a,0x0b,0x13,0x1b,0x9f,0x8b,0x8c,0x52,0x07,0x03,0x1f,0x89,0x82,0x96,0x16,0x09,0x0f,0x1e,0xab,0x8e,0x8e,0xa3 -,0x1a,0x0e,0x17,0x9c,0x84,0x8a,0xb6,0x0c,0x08,0x0f,0x2a,0x9e,0x94,0x9c,0x24,0x09,0x11,0x98,0x84,0x8a,0xb5,0x10,0x0c,0x18,0x36,0x9e,0x97,0xa1,0x23,0x0e,0x15,0xad -,0x86,0x87,0x99,0x26,0x0d,0x0a,0x19,0xaa,0x92,0x93,0x5e,0x0e,0x0c,0x2c,0x91,0x89,0x8f,0x48,0x0c,0x10,0x2e,0xaf,0xa1,0xa5,0xb1,0x26,0x13,0x23,0x91,0x89,0x92,0x74 -,0x10,0x0b,0x15,0x4d,0xa2,0x97,0xae,0x1c,0x0b,0x1b,0x93,0x84,0x8a,0xa5,0x14,0x0b,0x16,0x45,0xa0,0xa2,0xa8,0x32,0x19,0x19,0xbd,0x8f,0x8f,0xa1,0x22,0x0d,0x15,0xd7 -,0xa2,0xac,0xba,0xdb,0x1d,0x12,0x4d,0x8b,0x8a,0xa2,0x20,0x0e,0x14,0xf8,0x9d,0x9d,0xbb,0x2b,0x1a,0x13,0x4c,0x8f,0x8d,0x97,0x69,0x11,0x0f,0x1e,0xd8,0xa1,0xa2,0xcf -,0x22,0x1b,0x58,0x93,0x91,0x9a,0xe7,0x1a,0x1a,0x20,0xc7,0x9d,0xa8,0x2c,0x16,0x18,0x48,0x9b,0x90,0x98,0xdb,0x17,0x15,0x25,0x5b,0xa0,0x98,0xaf,0x1b,0x1a,0x4a,0xa1 -,0x97,0x97,0xb4,0x1c,0x16,0x1f,0x31,0xc8,0xa4,0xbf,0x24,0x22,0x3e,0xa0,0x94,0x95,0xad,0x15,0x13,0x37,0xd3,0xb9,0xc2,0x58,0x2d,0x25,0xc3,0x9d,0x98,0x93,0xa9,0x18 -,0x13,0x25,0x4d,0xba,0x5d,0x2e,0x3f,0x48,0xc7,0xac,0xa6,0x9f,0xaf,0x32,0x1b,0x24,0xf9,0xb9,0x4f,0x26,0x3a,0xb3,0xa6,0xad,0xb2,0xa9,0xa9,0x40,0x26,0x25,0x24,0x3a -,0x4c,0x50,0xb7,0xaf,0xcc,0x4d,0x45,0xcf,0xa4,0x9c,0xbb,0x25,0x15,0x1d,0x70,0xa3,0x9e,0xbc,0x45,0x2f,0x2f,0xc8,0xa5,0xa6,0xac,0x2f,0x15,0x1b,0xe3,0x9a,0x99,0xbb -,0x1d,0x1a,0x2d,0xa8,0x95,0x9f,0x4d,0x1d,0x13,0x1b,0xc3,0x94,0x8d,0xa7,0x12,0x0e,0x2b,0x98,0x8e,0xa9,0x2d,0x16,0x19,0x3a,0x9e,0x93,0x9a,0x54,0x0f,0x10,0x39,0x93 -,0x92,0xb6,0x1f,0x15,0x25,0xb9,0x96,0x8e,0x9f,0x19,0x0a,0x15,0xa8,0x92,0x9c,0x3a,0x1f,0x1e,0x31,0xb1,0x92,0x90,0x31,0x0f,0x18,0xa5,0x99,0xbe,0x22,0x1f,0x2f,0xc9 -,0xa6,0x9c,0x9b,0x39,0x13,0x17,0xae,0x91,0xaa,0x1d,0x1b,0x30,0xa9,0x9f,0xa6,0x9f,0x42,0x0c,0x0f,0xb4,0x8c,0x96,0x23,0x15,0x1c,0x51,0x9d,0x8d,0x8b,0x5a,0x06,0x04 -,0x28,0x8b,0x8a,0xad,0x14,0x0f,0x20,0xa1,0x8d,0x87,0x98,0x0b,0x00,0x0f,0x91,0x87,0x9d,0x18,0x10,0x1d,0xd1,0x8f,0x88,0x89,0x26,0x02,0x06,0xe8,0x8a,0x8f,0xc3,0x16 -,0x11,0x1a,0xa3,0x88,0x84,0xb4,0x06,0x04,0x1e,0x92,0x8d,0xab,0x1b,0x12,0x18,0xa2,0x89,0x85,0x9f,0x09,0x04,0x1a,0x95,0x91,0xaa,0x1c,0x12,0x24,0xb2,0x8f,0x88,0x9c -,0x0f,0x06,0x18,0x9d,0x9a,0xbc,0x23,0x1a,0x21,0x62,0x91,0x87,0x89,0x1e,0x03,0x0b,0xb1,0x89,0x8f,0x2c,0x09,0x0f,0x30,0x96,0x87,0x87,0x2a,0x03,0x06,0x6c,0x86,0x8c -,0x67,0x0b,0x0b,0x20,0x99,0x89,0x84,0x9f,0x06,0x02,0x1d,0x8e,0x8b,0xae,0x19,0x16,0x18,0x3c,0x8f,0x83,0x8a,0x14,0x02,0x09,0xbd,0x8e,0x9d,0x31,0x1d,0x20,0x1e,0x9c -,0x84,0x82,0x2d,0x01,0x06,0xdb,0x8a,0x98,0x1f,0x0f,0x1b,0x1f,0xa4,0x89,0x85,0xba,0x07,0x0d,0xb8,0x92,0xa4,0x24,0x14,0x20,0x26,0x4d,0x8d,0x84,0xad,0x08,0x0d,0xd6 -,0x90,0x9b,0x40,0x1c,0x1a,0x18,0x1f,0x8f,0x81,0x97,0x08,0x02,0x29,0x8d,0x91,0xac,0x2f,0x1c,0x11,0x1e,0x8f,0x80,0x8a,0x0c,0x00,0x11,0x8f,0x89,0xae,0x25,0x12,0x15 -,0x19,0xa2,0x84,0x87,0x37,0x06,0x0c,0xc1,0x96,0xa9,0x3e,0x2d,0x1f,0x1a,0xcd,0x90,0x87,0x9b,0x11,0x0b,0x1e,0xa3,0x9f,0xac,0x4d,0x18,0x15,0x35,0x93,0x8b,0xa5,0x1b -,0x16,0x34,0xba,0xb8,0x63,0x34,0x2f,0x2d,0xdd,0x92,0x8d,0xb3,0x15,0x12,0xc2,0x9a,0xaa,0x20,0x19,0x27,0x40,0xb9,0xa2,0x96,0x96,0x30,0x0f,0x21,0xae,0xa0,0x42,0x22 -,0x26,0x3b,0x3d,0xb8,0x91,0x8d,0xac,0x0d,0x0d,0x41,0x99,0x97,0xb4,0x1a,0x0d,0x15,0xc0,0x93,0x8b,0x98,0x1d,0x12,0x31,0xa8,0xbd,0xb6,0xac,0x37,0x12,0x1c,0xa4,0x8f -,0x96,0x55,0x22,0x2d,0x3e,0x1e,0x2d,0xa1,0x9c,0x2a,0x0e,0x23,0x96,0x92,0x9c,0xaf,0x3e,0x1f,0x12,0x1d,0xa8,0x99,0xb9,0x23,0x22,0xc3,0xa4,0xa6,0xb8,0xa3,0xbb,0x2b -,0x1b,0x1d,0x48,0xf7,0xba,0xc6,0xc1,0x30,0x26,0xbc,0x93,0x8f,0xcb,0x13,0x13,0x3a,0x9d,0x9e,0xb9,0x63,0x24,0x1d,0x32,0x9f,0x98,0xa8,0x2d,0x16,0x18,0x2a,0xb2,0x98 -,0x9c,0xb8,0x27,0x1b,0x33,0xa5,0x94,0x9e,0x4e,0x15,0x0f,0x20,0xab,0x92,0x97,0xd9,0x18,0x1a,0x7d,0x97,0x99,0xd9,0x1b,0x18,0x1c,0x2d,0xb2,0x99,0x9b,0xc0,0x35,0x33 -,0xbf,0xb1,0xb9,0x3b,0x6a,0xba,0x2f,0x1c,0x25,0xb0,0x9d,0xa2,0xa7,0x45,0x27,0x28,0x37,0x69,0xb0,0xa4,0xc6,0x26,0x12,0x1d,0xce,0x8f,0x87,0x9f,0x0e,0x09,0x1e,0xa1 -,0x96,0x99,0xa8,0x22,0x0d,0x0d,0xaf,0x88,0x83,0xb9,0x04,0x04,0x1f,0x93,0x8f,0x94,0xa2,0x25,0x08,0x0d,0x98,0x82,0x86,0x3b,0x04,0x05,0x1b,0x9a,0x8c,0x92,0xd2,0x15 -,0x0c,0x1a,0x96,0x86,0x8c,0xd6,0x0a,0x06,0x19,0x96,0x8b,0x9e,0x22,0x19,0x2c,0x44,0xad,0x9a,0x94,0xa7,0x1b,0x09,0x11,0x9f,0x8e,0xa9,0x2b,0x52,0xdb,0x3a,0x24,0x3b -,0x9f,0x98,0xc2,0x14,0x11,0x40,0x97,0x9e,0xae,0xa8,0x9f,0x49,0x13,0x12,0x33,0x91,0x8c,0xbf,0x09,0x0a,0x2c,0x97,0x8c,0x97,0xbc,0x23,0x0f,0x0d,0x40,0x8d,0x84,0xa5 -,0x09,0x04,0x23,0x8f,0x8b,0x91,0xc1,0x1b,0x0d,0x0c,0x3b,0x8a,0x82,0x9f,0x0a,0x00,0x0d,0x9a,0x84,0x8a,0xd3,0x0d,0x0a,0x12,0xaf,0x89,0x85,0x95,0x12,0x04,0x0c,0x9a -,0x85,0x8f,0x30,0x0e,0x15,0x1b,0x54,0x9f,0x8d,0x8e,0x5d,0x0c,0x07,0x42,0x8b,0x8e,0x7a,0x14,0x0f,0x1e,0x4f,0x9f,0x97,0x90,0x9f,0x1b,0x0e,0x20,0x95,0x96,0xa6,0x26 -,0x1c,0x2c,0x22,0x22,0x37,0x92,0x8b,0xa8,0x0f,0x0a,0x2c,0x90,0x8f,0xa0,0x31,0x1f,0x1f,0x18,0xcc,0x90,0x88,0xa7,0x0f,0x05,0x14,0x9b,0x92,0x9b,0x3b,0x2d,0x27,0x1b -,0x28,0x9b,0x86,0x8d,0x1c,0x03,0x08,0xc9,0x89,0x8e,0xa9,0x1d,0x14,0x13,0x4e,0x91,0x89,0x8e,0x20,0x08,0x07,0x54,0x8e,0x90,0xbe,0x1b,0x1c,0x1e,0x39,0xad,0x95,0x8a -,0x95,0x15,0x05,0x12,0x94,0x88,0x9a,0x1d,0x0d,0x1f,0x44,0xae,0x9f,0x8f,0xa3,0x18,0x09,0x0f,0x99,0x8b,0x9e,0x1e,0x1a,0x4f,0x4c,0x48,0xb5,0x93,0x8f,0x54,0x0e,0x0a -,0x29,0x8e,0x8e,0xb1,0x1c,0x1d,0x26,0x3b,0xa5,0x9d,0x9d,0x28,0x1a,0x14,0x1c,0x99,0x91,0xa9,0x1f,0x1f,0xcd,0xaa,0xac,0xe4,0xae,0x98,0xb1,0x12,0x07,0x29,0x8b,0x8e -,0x31,0x0d,0x2a,0xb3,0xa0,0xa2,0xb2,0x9e,0x5b,0x13,0x0b,0x29,0x92,0x94,0x42,0x14,0x30,0xa7,0xc7,0x44,0xb3,0x97,0x9b,0x3e,0x12,0x0e,0xb7,0x8c,0x97,0x26,0x0d,0x16 -,0x3a,0x9b,0x96,0xab,0x7a,0x34,0x2c,0x1b,0x68,0x8e,0x8c,0x3e,0x0c,0x14,0x4c,0x9f,0xaf,0x73,0xb8,0xa7,0x46,0x0e,0x0f,0x96,0x86,0xa0,0x0f,0x0b,0x3e,0x9c,0x97,0xa9 -,0xf9,0x33,0x29,0x1e,0x23,0xa1,0x90,0xa8,0x16,0x0f,0x30,0x9e,0x94,0xa2,0xc6,0x35,0x3f,0x34,0x17,0x27,0x9d,0x96,0xb5,0x13,0x0d,0xd8,0x8f,0x8f,0xaa,0x38,0x37,0xc6 -,0x2e,0x1c,0xc5,0x98,0xae,0x10,0x0e,0x46,0x9c,0x9d,0xb7,0x5e,0xb6,0xad,0x47,0x14,0x28,0x94,0x95,0x2a,0x0c,0x19,0xb7,0x96,0x97,0xad,0x45,0xe9,0x43,0x1c,0x24,0x9d -,0x93,0x49,0x0f,0x13,0x2d,0xb8,0x9b,0x9e,0xb7,0xc5,0x38,0x1e,0x1e,0xab,0x8d,0x94,0x22,0x0a,0x17,0xa8,0x8f,0x94,0xdf,0x18,0x1c,0x2e,0x24,0x47,0x8f,0x8e,0x3e,0x0a -,0x0e,0xaa,0x8d,0x90,0xbd,0x1c,0x17,0x21,0x1f,0x33,0x97,0x8b,0xb2,0x0a,0x09,0xd1,0x8c,0x87,0x97,0x26,0x10,0x18,0x2f,0x4b,0xa4,0x99,0xb9,0x12,0x0c,0x39,0x91,0x8c -,0x94,0x59,0x12,0x15,0xb5,0xaa,0xb4,0xa0,0xa9,0x1f,0x08,0x12,0xa2,0x8d,0x8d,0xb7,0x0d,0x0f,0x54,0x9d,0x9f,0x9d,0xa0,0x2f,0x11,0x12,0x5e,0x9a,0x94,0xa6,0x22,0x17 -,0x23,0xac,0xae,0xb7,0xa1,0xb6,0x1f,0x0f,0x25,0x9c,0x8f,0x9d,0x2b,0x10,0x1c,0xb9,0x9b,0xa7,0xc7,0xb0,0x2e,0x15,0x1e,0xa4,0x95,0x9b,0xaf,0x27,0x17,0x21,0xca,0xb2 -,0xa4,0xa5,0x4a,0x15,0x0e,0x45,0x96,0x8f,0x9c,0x40,0x12,0x1b,0xa6,0x9e,0xbc,0x4e,0x46,0x29,0x19,0x2b,0xa6,0x98,0x97,0xb9,0x29,0x1e,0x3a,0xb8,0xf2,0xb6,0xbb,0x20 -,0x0e,0x14,0xad,0x8e,0x8e,0xa4,0x25,0x19,0x34,0x9b,0xa0,0xdc,0x5c,0x33,0x22,0x19,0x2e,0xb5,0x9d,0x97,0xc6,0x24,0x2e,0x53,0x4e,0xbd,0x9b,0x9a,0x2b,0x0b,0x10,0xae -,0x91,0x96,0x4c,0x17,0x1b,0x52,0xa3,0xad,0xb2,0xb1,0x31,0x26,0x26,0x59,0x9c,0x95,0xa4,0x2a,0x12,0x16,0xdd,0xae,0xa0,0x9a,0xad,0x1c,0x0e,0x1f,0x9a,0x88,0x8f,0x1d -,0x0a,0x1f,0xa5,0x9b,0x44,0x2e,0x7b,0x3a,0x23,0x33,0xb4,0x9d,0xa0,0x4e,0x28,0x33,0xf6,0xce,0xb9,0xa7,0xad,0x30,0x1f,0x1a,0x3a,0x9f,0x98,0xa6,0x1b,0x12,0x57,0x9b -,0xa9,0x30,0x3a,0xa0,0xab,0x24,0x12,0x22,0xa5,0x9a,0xa6,0x49,0x3e,0x4d,0x33,0x3b,0x9b,0x8d,0xac,0x13,0x0c,0x1f,0xa6,0x95,0x9f,0x28,0x18,0x1f,0xba,0x9b,0xa5,0xa9 -,0xad,0x39,0x17,0x13,0x27,0x9a,0x8e,0xab,0x14,0x13,0x3c,0xac,0x9e,0x98,0x97,0x3a,0x0c,0x0e,0xb0,0x8f,0x8f,0x40,0x0f,0x1a,0x3d,0xc0,0xae,0xac,0xaa,0xce,0x2a,0x2b -,0x38,0xa8,0x9f,0xa2,0xba,0x35,0x22,0x26,0x3c,0xab,0xa1,0xee,0x28,0x16,0x1a,0xaa,0x91,0x9c,0x3c,0x1e,0xc3,0xa9,0xc7,0x41,0x63,0xac,0xbc,0x1f,0x11,0x23,0x9c,0x91 -,0xae,0x2c,0x2b,0x29,0x28,0xec,0x9b,0x93,0xb2,0x15,0x0c,0x21,0x9a,0x91,0xa5,0x28,0x1f,0x44,0xc1,0xb7,0xab,0xa3,0xb3,0x39,0x1c,0x1d,0xb1,0x98,0x9f,0x3a,0x12,0x1a -,0x46,0xca,0xa0,0x9a,0xb0,0x2a,0x19,0x1b,0xaa,0x8d,0x99,0x26,0x15,0x2d,0xcd,0xcb,0xb4,0xa9,0xa5,0xd6,0x23,0x1b,0x2e,0x9e,0x99,0xf3,0x1f,0x22,0x28,0x38,0xc6,0xa6 -,0x9d,0xc2,0x21,0x1a,0x38,0x98,0x8e,0xaa,0x1c,0x1c,0x46,0x6c,0x4c,0xb2,0x9f,0xa4,0x2b,0x10,0x1a,0xa4,0x90,0x9c,0x35,0x1a,0x29,0x38,0x3d,0xa9,0x99,0xa2,0x24,0x0e -,0x18,0xa4,0x8d,0x99,0x28,0x18,0x24,0x2f,0xd0,0xa6,0x9d,0x9a,0xfe,0x17,0x13,0x2d,0x91,0x8c,0x3c,0x11,0x14,0x26,0xc3,0xa6,0x9a,0x9e,0xcc,0x1a,0x12,0xd9,0x8c,0x8c -,0xb4,0x12,0x13,0x4a,0x4f,0x2c,0x45,0xa8,0x98,0x4b,0x0b,0x14,0x98,0x86,0x93,0x27,0x16,0x29,0x43,0x40,0xb6,0xa4,0xb5,0x30,0x16,0x12,0xc0,0x8f,0x9a,0x3b,0x2d,0xf7 -,0xbc,0xd1,0x2f,0xaf,0xa6,0x32,0x1a,0x1a,0x2e,0xa2,0x93,0xb1,0x4a,0xc9,0xb9,0x28,0x21,0xb7,0x9c,0xaa,0x18,0x1d,0xb0,0x9d,0xa5,0x38,0x28,0x32,0x71,0x44,0x2e,0x2b -,0xce,0x96,0xa3,0x26,0x2c,0xa8,0xa7,0x3c,0x2e,0x51,0xf3,0x42,0x2f,0x34,0xaa,0x99,0x9d,0xce,0x13,0x18,0xbd,0xb9,0x2d,0x5c,0x9e,0xd6,0x4a,0x41,0x48,0xc7,0x43,0xc5 -,0xb8,0xf0,0x20,0x36,0xc9,0x9c,0x97,0xbd,0x2a,0x13,0x36,0xa3,0xaf,0x28,0x2a,0xbf,0xae,0xac,0xcc,0x38,0x3a,0xe4,0xc3,0xbe,0x2d,0x2a,0xb6,0x9c,0xae,0x3b,0xb5,0xc4 -,0x18,0x1e,0xb5,0xa1,0xbd,0x24,0x20,0x44,0x9b,0x99,0xa3,0x25,0x10,0x25,0xb1,0xcc,0x2d,0xa4,0x9d,0xb4,0xe0,0x49,0x25,0x23,0xa1,0xa6,0x2c,0x1d,0x2d,0xa7,0x9f,0xbd -,0x4e,0xd3,0x2c,0x1d,0xcb,0xaf,0x2f,0x69,0xaa,0xa8,0xa7,0xc6,0x3f,0x25,0x24,0xd6,0xb3,0xc5,0x2c,0x1f,0xc3,0x9b,0x9c,0xa4,0xb2,0x18,0x0d,0x3b,0x9a,0x9b,0xcf,0x35 -,0x1b,0x32,0xa3,0x98,0xa9,0x1d,0x21,0x2f,0x5a,0x25,0xea,0x8f,0x94,0x37,0x21,0x2b,0x24,0x45,0xab,0xde,0x1b,0x4e,0xa7,0xa2,0xa7,0xad,0xb9,0x45,0x1d,0x1a,0xc6,0xbf -,0x34,0xfe,0xae,0x5d,0xb6,0xa1,0xd4,0x13,0x19,0xa9,0x9c,0xb7,0x1f,0x22,0xb0,0x8e,0x9a,0xc6,0x24,0x0e,0x1f,0xb3,0xad,0xbb,0xb9,0xb7,0x3a,0x49,0xa6,0x9e,0xc5,0x1d -,0x1e,0x27,0x3b,0x4f,0xd4,0xa1,0x9c,0xc5,0x4d,0xe4,0x2b,0x3e,0xa3,0x52,0x19,0x28,0x46,0xa3,0xa6,0xb9,0xae,0xb3,0x4c,0x1f,0x29,0x2d,0x1d,0x43,0x95,0x9e,0x3a,0xf0 -,0xad,0xb7,0xfd,0xca,0x33,0x12,0x13,0x47,0x93,0x98,0xb6,0xb3,0x4b,0x21,0x2f,0xa2,0xa8,0x20,0x19,0xed,0xaa,0xaf,0xae,0xab,0x34,0x36,0xad,0x4b,0x1c,0x26,0xcd,0xac -,0xa2,0x43,0xd8,0xad,0x3c,0x3f,0xae,0x2f,0x17,0xd4,0x9a,0xd3,0x28,0xe8,0xaf,0x9d,0xb4,0x22,0x16,0x27,0x79,0xba,0x98,0xb6,0x2c,0x53,0xcf,0xaa,0x9e,0xb6,0x1f,0x0d -,0x19,0xae,0x8f,0x9a,0x43,0x25,0x23,0xe5,0xaf,0xaf,0x2b,0x1c,0x2f,0x9c,0x99,0xb0,0xaf,0xc9,0x24,0x20,0xcc,0x44,0x20,0x5a,0xa2,0xd1,0xd2,0x3b,0xd6,0x99,0xac,0x3a -,0x1a,0x13,0x24,0x9f,0x93,0xc3,0x38,0xaa,0xb6,0xb7,0xc4,0x21,0x1b,0x1e,0x46,0xa6,0x9a,0xae,0x32,0x66,0xba,0xae,0xa8,0x58,0x0f,0x0e,0x34,0x99,0x90,0xab,0x34,0x22 -,0x39,0xae,0xb0,0xd4,0x1d,0x1d,0xbf,0xab,0xaa,0x9e,0xa4,0xae,0x1f,0x16,0x1f,0x27,0xcc,0xa0,0xa2,0x34,0xd5,0xaf,0xce,0xbc,0xb9,0x7a,0x26,0x14,0x1d,0x9b,0x95,0xce -,0x3b,0xac,0xae,0xd5,0xcf,0x24,0x15,0x34,0xc4,0xaf,0xa2,0xa2,0xba,0x27,0x37,0xbd,0xae,0x2c,0x10,0x1f,0x9d,0x9b,0xa1,0xb8,0x25,0x2b,0x4c,0xad,0x4c,0x2a,0x1e,0x2c -,0xa1,0xa7,0xab,0xa4,0xaf,0x3d,0x2e,0x26,0x37,0x3c,0x39,0xa9,0xda,0x4e,0xa8,0xa6,0x44,0x21,0x4b,0x31,0x1b,0x48,0x9f,0x9a,0xaf,0x33,0x3a,0xf8,0xb6,0xae,0xc1,0x1d -,0x0e,0x3c,0x97,0xa3,0xa4,0xb2,0x32,0x4f,0xc0,0xb3,0x38,0x1c,0x18,0x3e,0x9d,0xa0,0xa1,0xb7,0x22,0x1d,0xbc,0xb9,0x2a,0x2c,0x56,0xab,0xc9,0xd2,0xa6,0x9b,0xcd,0x1e -,0x2a,0x2d,0x5a,0xae,0xbb,0x41,0x2f,0xd8,0xaa,0xbe,0xdb,0x38,0x28,0x1a,0x19,0xad,0x8f,0x98,0xb5,0x28,0x1f,0x43,0xb4,0xa3,0x39,0x19,0x1b,0xb4,0x99,0xac,0x9f,0xbc -,0x1e,0x19,0xaf,0x9d,0xcd,0x2c,0x27,0xf6,0x50,0xa1,0x9e,0xb7,0x22,0x1c,0xb8,0x3f,0x2e,0xc8,0xb9,0xbf,0xac,0x9f,0xc8,0x32,0x33,0x32,0x37,0x30,0x3a,0xac,0xa4,0x52 -,0x46,0xd7,0x3c,0x32,0xc4,0xaa,0x35,0x19,0x1a,0xa7,0x91,0xa0,0xa8,0x2f,0x19,0x1f,0x9e,0x9f,0x1f,0x1f,0x43,0xa3,0xb4,0xa0,0xb3,0x28,0x17,0x29,0x9c,0xc1,0x53,0x4b -,0x6b,0x37,0xbe,0x99,0xd1,0x20,0x1b,0x54,0xa8,0x47,0x2f,0xb8,0xa7,0xd1,0xb3,0xac,0xfa,0x22,0x45,0xa7,0x2c,0x38,0xb5,0x9e,0xc9,0x27,0xcc,0x4e,0x2f,0x2f,0xa9,0x45 -,0x1a,0x49,0x9d,0x9c,0xea,0xb6,0x3f,0x1f,0x1e,0xbf,0x97,0xd9,0x26,0x24,0xcc,0xc9,0xaf,0x9a,0xc8,0x1a,0x13,0xc6,0x9d,0xb6,0xec,0xbc,0x3d,0x1f,0xb5,0x9a,0xc8,0x14 -,0x2c,0xb0,0xdc,0xca,0xae,0xa5,0x25,0x21,0xaa,0xb1,0x3b,0x40,0xaa,0x33,0x1d,0xab,0x9a,0xa1,0x3d,0x3e,0x39,0x28,0x21,0xbd,0x98,0xdc,0x37,0x29,0xc5,0xce,0xa9,0x9e -,0x2f,0x14,0x13,0xa8,0x92,0xa5,0x2c,0x34,0x39,0x39,0x9f,0x9e,0x32,0x11,0x33,0xa6,0xbc,0xbb,0xa5,0xa1,0x1d,0x1e,0xba,0xbf,0x3e,0x37,0xab,0x3f,0x29,0x4e,0xaa,0xaf -,0x38,0xbc,0xe6,0x28,0x1a,0xb9,0x9a,0xb8,0x4c,0xdf,0xb7,0x28,0x4f,0xae,0xdd,0x23,0x23,0xb1,0xbe,0x45,0xc3,0xa3,0xe0,0x29,0xc2,0xa9,0x2b,0x1a,0xa1,0x9e,0xc2,0x58 -,0x40,0xb0,0x37,0x4c,0xc6,0x5a,0x28,0x22,0xad,0xab,0xbd,0xb1,0xae,0x34,0x20,0x34,0xaa,0xaa,0x2a,0x38,0x60,0x3f,0xbc,0xa4,0xb5,0x1a,0x1c,0xcc,0xad,0xd1,0x3b,0xac -,0xae,0x36,0xae,0x99,0x39,0x1f,0x3f,0xbb,0x2e,0x1e,0xb1,0xb6,0x4f,0x39,0xc4,0xa8,0x58,0x38,0xf1,0x45,0x24,0x57,0xa4,0xa6,0xb4,0xae,0x37,0x1d,0x24,0xbb,0x97,0xa9 -,0x27,0x21,0x2b,0x5e,0x9e,0x99,0xac,0x1d,0x16,0x39,0xaf,0xbd,0xbb,0xad,0x5b,0x2b,0x4e,0xaf,0x55,0x42,0x4b,0xc4,0x39,0x27,0xb3,0xa9,0xb4,0x57,0xdf,0xb5,0x4a,0x3c -,0xe1,0x32,0x26,0x3f,0xa0,0xb4,0x2a,0x57,0xcf,0xea,0xed,0xdf,0xc3,0x52,0x20,0xc0,0xaa,0x57,0xca,0xae,0xcf,0x1c,0x20,0x5e,0xbc,0xb2,0xac,0xe8,0xd1,0xe5,0xf5,0xe9 -,0x3a,0xb8,0xb4,0xce,0x28,0x36,0xa4,0xb7,0x5f,0x53,0x46,0xcf,0x4d,0x28,0x2f,0x3d,0xd7,0xaa,0xa3,0xb4,0x2c,0x2f,0xbf,0xb2,0x55,0x3a,0xd3,0xd1,0x3c,0xc0,0xaf,0x3e -,0x3d,0xd7,0xc7,0x2f,0x29,0x61,0xda,0x37,0x5d,0xaa,0xa8,0xaa,0xbb,0x37,0x1a,0x35,0xae,0xab,0x36,0x31,0xa5,0xcf,0xf5,0xda,0x62,0x3d,0x46,0x2c,0x31,0x4d,0xce,0xa2 -,0xad,0xcf,0x3e,0xbe,0xc8,0xe0,0x79,0x26,0x29,0xe5,0xc6,0xbe,0x6b,0x54,0xc0,0xb4,0xa1,0x59,0x2c,0x46,0xdd,0xc3,0xf1,0x2d,0xc2,0xb3,0x39,0x41,0x28,0xdc,0xb0,0xad -,0x39,0x1f,0xbe,0xab,0xa9,0xb5,0x7c,0x38,0x3b,0x2c,0x2f,0x46,0xe9,0xa7,0xbc,0x36,0x4c,0xa6,0xb5,0x31,0x5c,0x3b,0x3f,0xbc,0xbf,0xce,0x26,0x29,0xa1,0xa0,0x4f,0x28 -,0x28,0x36,0xbf,0xba,0xc7,0x45,0x5c,0xb1,0x55,0x5d,0xba,0xa6,0xb9,0xce,0x2b,0x26,0xb9,0xad,0x9f,0xe1,0x1a,0x1c,0xcc,0xbc,0xdf,0x40,0x31,0xce,0xb0,0xaa,0xc0,0xab -,0xc1,0x2f,0x5d,0x3e,0x2b,0x32,0xd5,0xb8,0x5e,0x49,0xc7,0xb0,0xcc,0x25,0x38,0xb8,0xb2,0xde,0x3a,0x41,0xbc,0xb3,0xbd,0xed,0x2c,0xbc,0xcf,0x4e,0x2f,0x30,0xb4,0xfe -,0x36,0x2a,0x3f,0xb1,0x9c,0xbb,0x23,0x1d,0x2b,0x9d,0x9b,0xb4,0x38,0x31,0x3e,0xb3,0xa4,0x60,0x2e,0x2b,0x4d,0x43,0x3b,0xbf,0xaf,0xa3,0x9f,0x3b,0x1d,0x3e,0xc4,0xb3 -,0xbe,0x2d,0x2d,0xf6,0xcf,0xb9,0x3f,0x2f,0xbe,0xa6,0xc0,0x3e,0xd8,0x51,0x3d,0x4d,0xa4,0xae,0x2e,0x1d,0x1e,0x3f,0xac,0x9f,0xaf,0x2a,0x17,0x3d,0xa1,0x98,0x9a,0x2a -,0x1e,0x4b,0xd4,0x4b,0x42,0xee,0xba,0xb7,0x59,0x1f,0x20,0xbc,0xa4,0xaf,0x5c,0x21,0x39,0xa7,0xa2,0xac,0x47,0x2a,0x48,0x9b,0xe2,0x21,0x40,0x54,0x65,0x5e,0xba,0xcf -,0x2f,0x1f,0x6d,0xa3,0x9e,0xa8,0x3e,0x3c,0x33,0xcb,0xa6,0xd9,0x22,0x20,0x46,0xb3,0xa9,0xe4,0x24,0x21,0x2e,0xa9,0x9f,0xbc,0x41,0xd8,0xb5,0xb2,0xe7,0x39,0xe5,0x46 -,0x39,0x2d,0x33,0xb5,0xa5,0xa6,0x3c,0x1d,0x28,0xea,0xa7,0xae,0x47,0x24,0x34,0x3f,0xb7,0x9f,0xbe,0x4e,0x6f,0xca,0x2c,0x3f,0xde,0xd2,0xd8,0xbb,0xa2,0xc4,0x2b,0x25 -,0x4e,0xc9,0xb2,0xa1,0xba,0x1a,0x1c,0xa9,0x9a,0xa6,0x2c,0x1d,0x34,0x54,0xd2,0x41,0x39,0xab,0x97,0xa7,0x3b,0x30,0x25,0x3b,0xe8,0x45,0x3e,0x3b,0x5b,0xcc,0xa3,0xa6 -,0xe7,0x3d,0x31,0x28,0x17,0x1d,0xb5,0x8c,0x9c,0xe1,0x8d,0x8d,0x1a,0x09,0x1f,0xde,0x9b,0x1c,0x0b,0x17,0x29,0xb0,0x95,0x18,0x03,0x9d,0x80,0x85,0xba,0x18,0x14,0x6b -,0xa5,0x96,0x8d,0xb0,0x0f,0x2f,0xa8,0x0d,0x06,0x13,0x15,0x14,0x90,0x88,0x8b,0x91,0xb8,0xa5,0xb5,0x11,0x20,0x8b,0x97,0x1a,0x25,0xc0,0x18,0x13,0x1e,0x16,0x34,0xae -,0xa6,0x9c,0x3a,0x38,0x8a,0x95,0x07,0x11,0x88,0x86,0xbf,0x13,0x19,0xbe,0x96,0xd1,0x0d,0x00,0x04,0x94,0x80,0x9c,0x14,0xae,0x8e,0xb9,0xc9,0x57,0x36,0x2d,0x1c,0xb2 -,0xb3,0x12,0x14,0xaa,0x18,0x11,0x90,0x85,0x97,0x42,0xc4,0x5a,0xd3,0x1c,0x2c,0x93,0x94,0xb4,0x9b,0x51,0x06,0x11,0x57,0x18,0x09,0x2a,0x97,0x88,0x8d,0xa3,0xc7,0x1c -,0x0b,0xab,0x81,0x9f,0x0c,0x13,0xba,0xb6,0xb1,0x28,0x0e,0x0c,0x4e,0x87,0x8d,0x14,0x09,0x95,0x8c,0x2d,0x1d,0xa9,0x9d,0xb7,0xba,0xbe,0x3d,0x1d,0x28,0x20,0x07,0x07 -,0x97,0x84,0xa8,0xd9,0x8f,0x8f,0x3e,0x20,0x49,0xab,0xe6,0x1f,0x2d,0x29,0x0e,0xf2,0x92,0x17,0x08,0xab,0x89,0x8f,0x9b,0x5e,0x36,0x23,0x24,0x9f,0x90,0xd2,0x20,0x96 -,0xad,0x0e,0x0c,0x18,0x0e,0x0e,0xa8,0x8c,0x8e,0xad,0xa8,0x91,0xb3,0x0e,0x38,0x8f,0xa8,0x2f,0x5c,0x3e,0x1e,0x21,0x3a,0x25,0x0d,0x1c,0x91,0x90,0x1e,0x25,0x9b,0x9d -,0xc5,0xb3,0xae,0xd5,0xbf,0xc3,0xae,0x2a,0x23,0xb2,0x4c,0x09,0x09,0x99,0x8e,0xb1,0xae,0x99,0x9f,0xdc,0x58,0xde,0xb0,0x35,0x23,0xb1,0x33,0x0b,0x28,0x9e,0x1d,0x15 -,0xab,0x91,0x94,0x9b,0xa6,0xc3,0x1e,0x0e,0x39,0xa0,0x5b,0xa9,0x8d,0x9a,0x1c,0x0f,0x15,0x0d,0x0c,0xc5,0x8e,0x9b,0xa9,0xa1,0x99,0xac,0x22,0xc2,0xb9,0x39,0x76,0xac -,0x3b,0x17,0x24,0xd5,0xd4,0x17,0x1f,0x97,0x9c,0x21,0x3b,0xb2,0xb9,0xa6,0xa8,0xac,0xb6,0xb5,0xa9,0xa6,0x23,0x0e,0x2b,0xb4,0x11,0x0c,0xba,0x95,0x9e,0x9e,0x99,0x9e -,0xba,0x3d,0xe2,0x51,0x27,0x22,0xa8,0xbd,0x14,0x2b,0x63,0x17,0x0f,0xb6,0x98,0xa2,0x9c,0x98,0xa3,0x2d,0x1e,0x4b,0xae,0xd2,0x96,0x91,0xce,0x16,0x0f,0x1a,0x0e,0x0b -,0x33,0x92,0x9b,0xae,0x9b,0x99,0xa7,0xe4,0x5f,0x35,0x4a,0xa2,0x9a,0xb2,0x19,0x0e,0x26,0xba,0x1f,0x17,0xa8,0x9c,0xbd,0xa8,0xbe,0xca,0xb2,0xd8,0x5f,0x61,0xdd,0xaa -,0xa0,0x67,0x1b,0x20,0x5c,0x1e,0x19,0x2f,0x4c,0xd6,0x9b,0x91,0x9b,0xa2,0xab,0xb2,0x29,0x1b,0x2a,0x4c,0x54,0x2a,0x2d,0x27,0x1b,0x1e,0xb3,0x96,0x9b,0xa3,0xa2,0xa9 -,0x59,0x1f,0x24,0xed,0xb1,0x98,0x9f,0xb1,0x40,0x15,0x12,0x16,0x0e,0x1e,0x9c,0x95,0x9e,0xa0,0x9c,0xa8,0xb9,0x22,0x1d,0x3e,0x9c,0x92,0xa5,0x2e,0x12,0x21,0x41,0x2d -,0x1c,0x2c,0x60,0xc7,0xa8,0xca,0xbe,0xa4,0x9f,0xa9,0xd5,0xc3,0xa4,0xb1,0x5c,0x1f,0x17,0x1f,0x20,0x22,0x29,0x49,0xcf,0xa1,0x97,0x99,0x9b,0xa5,0x67,0x2b,0x2c,0x42 -,0xb5,0xb9,0x36,0x12,0x12,0x28,0x38,0x52,0xa7,0x9f,0xaa,0x9c,0x9a,0xa4,0x25,0x11,0x20,0xb1,0x98,0x9e,0x9f,0xac,0x2f,0x1e,0x19,0x11,0x12,0x2f,0xad,0xa6,0x9d,0xa2 -,0xb2,0xab,0xc5,0x32,0x56,0x9c,0x9c,0xcc,0x27,0x1d,0x1a,0x1f,0x36,0x3d,0x57,0x6e,0xaf,0xbe,0x68,0xb0,0x9e,0xad,0x45,0x4b,0xb1,0x99,0x9b,0xa5,0x1a,0x08,0x0f,0x33 -,0x4e,0x26,0x4f,0xb1,0xa7,0x99,0x93,0x9b,0xbb,0x4d,0x2e,0x2c,0x3c,0x32,0xc7,0xae,0x3e,0x22,0x24,0x2a,0x1e,0x25,0xe5,0x9f,0x9b,0x9d,0x9e,0xb7,0x27,0x1d,0xb7,0x9e -,0xa2,0xa4,0xb3,0x2e,0x19,0x1f,0x22,0x20,0x24,0x2e,0x2b,0xe7,0x9c,0x95,0x9b,0xd3,0x45,0xe0,0xa5,0x97,0x9e,0x49,0x19,0x14,0x14,0x1b,0x26,0x2f,0xa9,0x9b,0xa1,0xb9 -,0xbd,0xbd,0x3e,0x3d,0xc2,0x9f,0xb9,0xf9,0xa7,0xbc,0x1d,0x19,0x5e,0x44,0x1f,0x19,0x22,0xcb,0xa2,0x8f,0x8f,0x9a,0xbe,0x2b,0x2d,0x55,0xc9,0x4a,0x2c,0x1d,0x24,0x43 -,0xb6,0xbc,0x31,0x1f,0x26,0xad,0x9d,0x9a,0xac,0x25,0x2c,0xbb,0x9d,0x9e,0xa9,0xb9,0x27,0x1a,0x20,0x3e,0x20,0x16,0x21,0x38,0xd5,0x9f,0x8c,0x8f,0xaa,0x2a,0x23,0xd1 -,0xa6,0x95,0x98,0x52,0x12,0x0c,0x19,0x2c,0x2c,0x36,0xdc,0xce,0xb0,0xa0,0x9d,0xb9,0x41,0xda,0x9f,0x9d,0x32,0x3b,0x4d,0x26,0x45,0xb8,0xb4,0x27,0x15,0x16,0x25,0xb7 -,0xa2,0x9b,0xa0,0xa1,0xa4,0xb5,0xca,0xd4,0xcd,0x2b,0x1a,0x18,0x26,0x6f,0xe2,0xba,0xda,0x3c,0x30,0x51,0x98,0x96,0xbe,0x39,0x38,0x42,0x69,0xa9,0x93,0xa7,0x2f,0x3b -,0x36,0x18,0x06,0x0d,0x2b,0xbd,0x96,0x8f,0x94,0xa8,0x5b,0x34,0xbc,0x9d,0x9d,0xab,0x29,0x16,0x18,0x26,0x3d,0x48,0x78,0x3a,0x28,0x3b,0xb4,0x9c,0xa0,0xa2,0xaf,0xc2 -,0xb7,0x3b,0xd0,0xcd,0x1f,0x22,0x69,0x45,0x2d,0x28,0x26,0x1f,0x42,0x99,0x94,0xa5,0xc5,0xa1,0xa8,0xcf,0xe7,0x5b,0x4e,0x21,0x24,0xcf,0xc7,0x24,0x16,0x22,0x2d,0x39 -,0xad,0x99,0x99,0xad,0xc3,0xbf,0xbb,0x7e,0xc8,0x9d,0xa7,0x4a,0x3e,0x3f,0x1a,0x0b,0x13,0x24,0x2e,0xac,0x94,0x9a,0xb7,0xc1,0xc1,0xc8,0x9b,0x94,0xa7,0x27,0x14,0x30 -,0x4d,0x26,0x2b,0x2a,0x2e,0x1b,0x23,0x9e,0x92,0x9b,0xa7,0xa8,0xbe,0xc4,0x3e,0x2b,0x46,0x33,0x52,0xa1,0xa5,0x21,0x12,0x1e,0x1e,0x2c,0xac,0x9a,0xae,0x3b,0xab,0xa2 -,0xa4,0x9e,0x9f,0xb5,0x1d,0x13,0x2b,0x33,0x24,0x1c,0x2b,0x33,0x30,0x95,0x90,0xa9,0xb6,0xac,0x4f,0x18,0x1c,0xb6,0x94,0x96,0x9f,0xb6,0x32,0x1e,0x15,0x0f,0x12,0x11 -,0x27,0x95,0x95,0xa0,0x93,0x93,0xb1,0xaf,0xae,0xc7,0x27,0x0d,0x1f,0xbb,0xbb,0xbb,0x5a,0x46,0x15,0x0d,0x4e,0x9b,0xb8,0xcf,0x97,0x99,0xa8,0xa1,0xad,0xaf,0x5f,0x21 -,0x2d,0x13,0x0a,0x18,0x68,0xb2,0xa9,0x94,0x93,0xae,0x2a,0xb2,0xc1,0x1c,0x39,0xa0,0xaa,0xcb,0xa8,0xac,0x38,0x1e,0x19,0x18,0x18,0x15,0xcb,0x97,0xa3,0x9f,0x92,0x93 -,0x30,0x16,0x2c,0xb9,0xb4,0xc6,0xa4,0x9d,0xaa,0x68,0x15,0x13,0x12,0x14,0xdb,0x33,0x17,0xb7,0x8b,0x8e,0x8d,0x89,0x90,0x51,0x0d,0x13,0x1e,0x11,0x15,0x40,0x62,0x3d -,0x4f,0x9c,0x91,0xb6,0x36,0xaa,0x33,0x0f,0x41,0xa0,0x9b,0x93,0x98,0xac,0x19,0x0c,0x19,0x1d,0x14,0x1d,0xb1,0x90,0x93,0x9d,0x97,0x9e,0x22,0x26,0xb0,0x1d,0x0e,0x3b -,0x96,0x93,0x92,0x9a,0x3e,0x10,0x05,0x0d,0x33,0x35,0x25,0xa6,0x8e,0x97,0x9e,0x8f,0x8a,0x9b,0x45,0x1c,0x0e,0x09,0x12,0x1f,0x38,0xb0,0xaa,0xa5,0x37,0x1a,0xae,0x8f -,0xdd,0x1e,0xa3,0x8b,0x91,0xa8,0xb0,0x50,0x10,0x11,0x1e,0x0c,0x09,0x1b,0x9c,0x8c,0x8e,0x99,0x98,0xc0,0x17,0x31,0x52,0x22,0x1f,0xac,0x91,0x96,0xa5,0xb0,0x2d,0x15 -,0x13,0x14,0x15,0x13,0x1b,0x9d,0x86,0x8c,0x93,0x98,0xfe,0x20,0xca,0xbf,0x1a,0x12,0x29,0xad,0xc7,0x23,0x2c,0xa9,0xbc,0x2f,0x32,0x2d,0x1b,0x28,0x93,0x89,0x8b,0x93 -,0xa4,0x32,0x14,0x1d,0x15,0x08,0x09,0x36,0x92,0x92,0xa7,0xac,0x9b,0xaf,0x2c,0x25,0x29,0x1f,0x26,0xa0,0x8f,0x95,0x9b,0xaf,0x1b,0x12,0x18,0x17,0x1a,0x22,0x4a,0x90 -,0x89,0x9e,0xd7,0x9f,0xa1,0xcd,0x1e,0x0e,0x0e,0x24,0x9f,0x9e,0xa9,0x44,0xe3,0xba,0x30,0x26,0x2c,0x40,0x2a,0xb3,0x8e,0x8e,0xa4,0xaa,0xa0,0xf8,0x20,0x17,0x0d,0x07 -,0x0c,0xe1,0x8e,0x8d,0x9f,0xc7,0xb1,0xb7,0x43,0x27,0x25,0xe0,0x9d,0x8c,0x8e,0xc4,0x2d,0x2a,0x1b,0x14,0x0d,0x0a,0x0e,0x1e,0xaf,0x8c,0x84,0x91,0xa3,0x97,0xa0,0xf2 -,0x20,0x11,0x12,0xdf,0xa4,0x3f,0x18,0x1d,0xaf,0x9f,0x48,0x14,0x22,0xd4,0xc4,0xa4,0x8f,0x90,0x99,0xa3,0xca,0x48,0x2b,0x1d,0x0e,0x0f,0x28,0x9e,0x9b,0x37,0x1e,0x5f -,0x9a,0xa4,0x20,0x12,0x1e,0xa2,0x8f,0x8d,0x8e,0xa3,0xa9,0xcb,0x18,0x0c,0x09,0x0c,0x23,0xb3,0xbb,0xa7,0x9c,0xa3,0xa7,0x98,0x9d,0x3e,0x24,0x19,0x27,0xa5,0x9b,0xc2 -,0x37,0x46,0xd0,0xdc,0x1d,0x0f,0x1b,0xac,0x9f,0x97,0x9a,0x55,0xbb,0x9a,0xa8,0x26,0x15,0x11,0x11,0x23,0xaa,0x95,0x90,0x9f,0xbe,0xab,0xb8,0x28,0x0e,0x0a,0x27,0x92 -,0x95,0xcd,0xf8,0x9f,0x95,0xa5,0x1e,0x0c,0x0e,0x14,0x3a,0xc0,0xae,0x97,0x8c,0x94,0xa6,0xad,0x3e,0x1f,0x19,0x26,0xf2,0x9b,0xba,0x0f,0x17,0xaf,0x9e,0x75,0x13,0x0c -,0x1d,0x9d,0x93,0x95,0x90,0x93,0x8d,0x8e,0x40,0x0d,0x09,0x0b,0x15,0x36,0xcc,0x37,0x3c,0xaa,0xa4,0x97,0x9a,0x2c,0x18,0x1d,0xc2,0x94,0x96,0xaa,0xa5,0x98,0x9f,0x28 -,0x0a,0x07,0x0d,0x3a,0xa4,0xb7,0x2f,0x39,0x93,0x8e,0x98,0xa9,0x2e,0x19,0x17,0x39,0x9f,0x8e,0x99,0x39,0x5a,0xad,0x28,0x0c,0x07,0x0a,0x45,0x98,0xaa,0xb6,0xa4,0x8e -,0x85,0x88,0x6d,0x0a,0x0f,0x14,0x15,0x20,0x55,0xbd,0x99,0x92,0xa9,0xd9,0x2d,0x15,0x0f,0x3a,0x9b,0x8f,0xa9,0x24,0xa7,0x90,0x9b,0x28,0x0d,0x0b,0x0f,0x2d,0xa5,0xa4 -,0xb1,0x98,0x8a,0x90,0xbc,0x15,0x0b,0x0f,0x29,0xc3,0xb6,0xaf,0x75,0xb3,0x9a,0x91,0xaf,0x1c,0x13,0x0d,0x26,0xab,0xae,0xac,0x8f,0x8c,0x95,0xbd,0x13,0x0e,0x1f,0x35 -,0x20,0x29,0x31,0x23,0xa4,0x97,0x9e,0xa7,0x67,0x1c,0x1a,0xc0,0x9b,0x90,0x9e,0xa5,0x9b,0xa2,0x1c,0x05,0x08,0x11,0x47,0x9c,0xb6,0x19,0x1e,0x92,0x84,0x8e,0xcd,0x19 -,0x1c,0x27,0x61,0xa6,0xa7,0xad,0xac,0xb1,0xe5,0x22,0x0d,0x0e,0x12,0x20,0xb6,0x99,0x9f,0xa0,0x90,0x93,0x94,0xa6,0x27,0x0f,0x1a,0x2f,0x5d,0xa5,0xad,0xa8,0x9e,0xa5 -,0x1c,0x0f,0x1a,0x1f,0x3c,0xa9,0xa0,0xa5,0xa5,0x9c,0x99,0xae,0x17,0x09,0x11,0x1b,0x1f,0x47,0xbf,0xbe,0x9b,0x91,0x9e,0x4b,0x27,0x3d,0xc7,0xa6,0x9e,0xa1,0xc9,0x40 -,0xbc,0xb2,0xc0,0x30,0x1c,0x0e,0x0c,0x18,0xac,0x93,0x9a,0x97,0x98,0x9d,0xdf,0x1d,0x17,0x1b,0x3f,0x5f,0x2f,0x36,0xd5,0xa0,0x94,0xa2,0x3a,0x26,0x2c,0x29,0x3b,0xac -,0xaa,0x9d,0x92,0x9a,0x3e,0x1c,0x16,0x19,0x1c,0x1c,0x22,0x47,0xe5,0x52,0xa7,0x94,0x9d,0x66,0x35,0x2a,0x34,0xbe,0x9f,0xa0,0xb3,0xb6,0xb0,0xb3,0x38,0x1f,0x1d,0x1d -,0x23,0x4d,0xbe,0xc2,0xae,0x99,0x96,0xa2,0xc6,0x3c,0x28,0x1a,0x1a,0x25,0x45,0xb6,0xa7,0xba,0x32,0x1e,0x1e,0xf1,0xa9,0xaa,0xbe,0xbd,0xad,0x9f,0x97,0xa2,0xc3,0xd6 -,0x33,0x1f,0x1f,0x24,0x48,0xb9,0x5e,0x3d,0xc2,0xbd,0x3c,0x21,0x1d,0x2d,0xbd,0xa5,0xac,0xe7,0x49,0xaf,0xa2,0xa9,0x6b,0x2f,0x31,0x2f,0x2e,0x50,0xa9,0xa1,0xac,0x5e -,0x4d,0xba,0xaf,0xc1,0x2e,0x24,0x2d,0x46,0x42,0x45,0xea,0x4c,0x6f,0xe1,0x39,0x2f,0x3a,0x5e,0xaa,0x99,0x9e,0xb1,0xc6,0x51,0x3f,0x39,0x35,0x30,0x37,0x3a,0x31,0x34 -,0x4f,0xc2,0xab,0xa1,0xbd,0x2d,0x2a,0x48,0xaf,0xa7,0xc6,0x68,0xbf,0x45,0x3d,0x65,0x4c,0x3b,0x35,0x29,0x2a,0xe4,0xae,0xac,0xaf,0xc4,0xad,0x9d,0xaf,0x3c,0x23,0x28 -,0xcd,0xb0,0xe4,0x2f,0x38,0x74,0xce,0x3c,0x25,0x34,0xbe,0xc1,0x33,0x37,0xad,0x9a,0x9e,0xce,0x2d,0x32,0x5d,0x40,0x31,0x35,0x36,0xde,0xc5,0x3c,0xdf,0xab,0xaf,0xc1 -,0xcd,0x6c,0x5f,0x4e,0x41,0x4a,0xc2,0xba,0xb1,0xac,0xe9,0x2a,0x1f,0x28,0x48,0xb4,0xab,0xbe,0x41,0x3a,0xc8,0xa6,0xaa,0x62,0x33,0x2c,0x2d,0x38,0xe3,0xb0,0xaa,0xb8 -,0x67,0x3d,0x3e,0x4c,0x50,0x5a,0xd6,0xba,0xc9,0x41,0x3b,0x5d,0xc4,0xb4,0xcf,0x2c,0x29,0x3d,0x74,0xbd,0xba,0x48,0xbe,0xa8,0xb7,0xdd,0x3e,0x48,0xae,0xb8,0x2c,0x26 -,0x3a,0xbe,0xac,0xba,0x38,0x2f,0x33,0x31,0x3c,0xd4,0xc4,0xbc,0xb3,0xb6,0xb1,0xab,0xbb,0x31,0x2d,0x52,0xc0,0xbe,0x43,0x2d,0x3c,0xf1,0xc8,0xc9,0x6e,0x41,0x53,0x4f -,0x3d,0x5d,0xb9,0xb2,0xad,0xb8,0x3f,0x3f,0x3f,0x3c,0xc4,0xb9,0x31,0x23,0x2e,0xdc,0xa7,0xaa,0x4d,0x47,0xfc,0xe8,0xc8,0x5d,0x3b,0xf1,0xb6,0xbd,0xc8,0xce,0xca,0x3e -,0x43,0x4e,0x2e,0x34,0x33,0x42,0xb4,0xa8,0xae,0xab,0xd0,0x2f,0x3d,0x54,0x78,0xcb,0x6c,0x35,0x5e,0xc8,0x6d,0xe8,0xdb,0x6a,0xc9,0xea,0x3b,0x3b,0x72,0xb7,0xb8,0x52 -,0x3c,0x56,0xbe,0xd8,0x35,0x33,0x33,0xe3,0xb6,0xbd,0xc5,0xc2,0xc4,0xd5,0xd6,0x6f,0x63,0x42,0x2b,0x37,0xc0,0xb8,0xbe,0xc8,0xce,0xda,0xca,0x43,0x2b,0x3c,0x3f,0x3c -,0xd0,0xb2,0xad,0xad,0xc6,0x7d,0xc7,0x4a,0x2f,0x34,0x48,0x60,0xc3,0xbe,0x4a,0x49,0xba,0xc6,0x33,0x39,0x55,0xc8,0xb5,0xce,0x3d,0x46,0xd2,0xc7,0xaf,0xce,0x30,0x2e -,0x26,0x35,0xeb,0xc1,0xb3,0xb2,0xb4,0xb6,0xc0,0x4a,0x5b,0x52,0x4a,0x45,0x32,0x4b,0xb4,0xaa,0xae,0xad,0xbd,0x2e,0x1f,0x22,0x31,0x5f,0xb9,0xca,0x6b,0xb5,0xa6,0xac -,0xc6,0xe9,0x44,0x3f,0x2d,0x27,0x44,0xaf,0xb3,0xc3,0xcb,0x35,0x31,0x3f,0x5f,0xd3,0xc7,0x3b,0x30,0x78,0xb4,0xa7,0xae,0x5f,0x2f,0x32,0x3f,0x4c,0x3b,0x4e,0xb7,0xad -,0xad,0xb4,0xc3,0xc9,0x43,0x28,0x2c,0x35,0x4b,0xcd,0xbd,0xb5,0xaa,0xb1,0xd0,0x4c,0x34,0x3a,0x35,0x2b,0x3c,0xc4,0xb5,0xa7,0xae,0xda,0x5a,0x41,0x3c,0xed,0xf2,0x38 -,0x35,0x4c,0xb2,0xa9,0xb3,0x7a,0x4d,0x2f,0x25,0x2e,0xec,0xae,0xbd,0x63,0xef,0xbe,0xaf,0xb4,0x39,0x28,0x33,0x46,0x4e,0x40,0xdd,0xab,0xa2,0xb5,0xd5,0xc8,0x41,0x2f -,0x29,0x24,0x3b,0xbd,0xbc,0xb3,0xac,0xaa,0xab,0x4c,0x25,0x28,0x34,0x4a,0x41,0x3b,0xbb,0xa3,0xaf,0xc9,0xde,0x5a,0x4d,0x36,0x2e,0x42,0xfe,0xd0,0xb6,0xae,0xad,0xb9 -,0x3b,0x2c,0x30,0x37,0x52,0x3b,0x3e,0xbb,0xae,0xb6,0xad,0xb7,0x4b,0x3f,0x2c,0x2a,0x3d,0x7b,0xba,0xa4,0xaa,0xc1,0xef,0x40,0x3b,0x3d,0x38,0x33,0x30,0x3e,0xbc,0xac -,0xa8,0xab,0xb3,0xeb,0x2f,0x25,0x2d,0x46,0x39,0x5b,0xae,0xa5,0xae,0x76,0x35,0x3d,0x64,0x5c,0x3c,0x27,0x2a,0xbb,0x9f,0xa2,0xad,0x5c,0x32,0x2f,0x29,0x36,0xc3,0xeb -,0x52,0xcf,0xb7,0xac,0xad,0x4f,0x2c,0x37,0x4e,0x56,0x2b,0x2c,0xd8,0xa2,0x9d,0xa4,0xbe,0x3b,0x28,0x22,0x32,0x4d,0x36,0x64,0xaf,0xab,0xaa,0xb9,0xd4,0xcc,0x48,0x2b -,0x2b,0x27,0x29,0xd8,0x9f,0x9d,0xa8,0xe4,0x3d,0x40,0x4d,0xc9,0x45,0x23,0x21,0x5d,0xa7,0x9e,0xa7,0x56,0x2e,0x2f,0x47,0x5f,0x4d,0x43,0x53,0xc9,0xb5,0xb0,0xb0,0xce -,0x33,0x36,0xd7,0x5c,0x29,0x2d,0x58,0xab,0x9e,0xad,0x42,0x38,0x3f,0x52,0x48,0x28,0x23,0x62,0xab,0xae,0xac,0xa8,0xae,0x52,0x2c,0x2c,0x2d,0x2f,0x35,0x48,0xb0,0xa8 -,0xb8,0x3e,0x44,0xc6,0xa8,0xaf,0x2a,0x1f,0x2c,0xb4,0xa3,0xa4,0xc5,0x33,0x35,0x63,0xe1,0x3b,0x29,0x2a,0x44,0xaf,0x9d,0xa4,0xdc,0x29,0x2b,0xc6,0xa6,0xdd,0x23,0x2a -,0x4f,0xb1,0x9e,0xa5,0xcc,0x4b,0x40,0x33,0x20,0x1d,0x26,0xb3,0xa1,0xac,0xcc,0x78,0xb8,0xab,0xa8,0x6e,0x22,0x1d,0x22,0x4a,0xa2,0x9d,0xbc,0x2d,0x2c,0xbe,0xa2,0xbc -,0x1f,0x18,0x29,0xae,0x9d,0xa8,0x6c,0x34,0x6f,0xab,0xae,0x37,0x23,0x2c,0x48,0xc2,0xab,0xac,0xdf,0x34,0x47,0xba,0xc5,0x29,0x1d,0x3c,0xad,0x9e,0xab,0x40,0x36,0xba -,0x9e,0xb4,0x22,0x17,0x1f,0xe3,0xab,0xb4,0xc1,0xb4,0xb6,0xba,0xb6,0x4c,0x1e,0x1e,0x39,0xb2,0xa4,0xb3,0x2d,0x2e,0xb5,0x99,0x9a,0x36,0x12,0x19,0xde,0xa1,0xa6,0x68 -,0x2a,0x38,0xaa,0xa1,0xdc,0x22,0x1e,0x36,0xc2,0xae,0xae,0xbe,0xda,0x7b,0xb7,0xae,0xd8,0x28,0x22,0x3e,0xc4,0xbf,0xe2,0x4a,0x5b,0xa7,0x9f,0x45,0x19,0x1d,0x39,0xb9 -,0xac,0xce,0x4e,0xb2,0x9f,0xa3,0xc2,0x25,0x23,0x27,0x2e,0xb6,0x9e,0xce,0x2d,0x37,0xce,0xa7,0xc8,0x2d,0x23,0x2d,0x36,0xaa,0xa8,0xdf,0xb1,0xa0,0xac,0x24,0x28,0x56 -,0xb2,0x32,0x1f,0xec,0xab,0xad,0x53,0x42,0x4f,0x51,0xba,0xb7,0x34,0x1e,0xd5,0x9d,0xbe,0x47,0xb1,0xa9,0x3d,0x1f,0x2d,0x3a,0x46,0xb6,0xe9,0x40,0xb4,0xa1,0x9c,0xbe -,0x20,0x25,0x59,0x40,0x26,0xb9,0xab,0x5c,0xce,0xe0,0x45,0x2d,0x68,0xc8,0xcc,0x49,0x30,0x40,0xb4,0x9b,0xa8,0xaf,0x2d,0x22,0xbc,0xc0,0x29,0x21,0x4b,0xde,0xad,0xa8 -,0x6f,0x25,0x39,0xba,0xad,0xb3,0x36,0x46,0x78,0xcb,0xb6,0xb2,0xa0,0x4a,0x16,0x1e,0xc3,0xaa,0x41,0x3a,0x2b,0xca,0x9f,0xa2,0xb8,0x2d,0x25,0x2d,0xad,0x3f,0x30,0xb2 -,0xa0,0xab,0xd0,0x35,0x16,0x3d,0x9d,0xce,0x21,0x3a,0xcb,0xac,0xac,0xc3,0xb8,0xba,0x27,0x1e,0xbf,0xc8,0x35,0xc7,0xc1,0xc0,0xb2,0xd8,0x5f,0x20,0x2e,0xb5,0xb3,0xb8 -,0x2e,0x24,0xe1,0x9c,0x9a,0xa7,0x36,0x18,0x1c,0xb8,0x9c,0xb9,0x45,0x21,0x1a,0x68,0xa0,0x9b,0xc5,0x31,0x39,0x2d,0x40,0x33,0xae,0x8f,0x9c,0x23,0x1d,0x28,0x29,0x3b -,0xb0,0x58,0x27,0xb1,0xb3,0xb3,0xa1,0xac,0xb2,0x54,0x1b,0x1f,0xcd,0x61,0x3f,0xbf,0xe6,0x42,0xab,0xad,0x1f,0x14,0x3a,0x98,0x95,0x3a,0x17,0x2b,0x98,0x8e,0xa5,0x42 -,0x1a,0x13,0x2d,0xb0,0xa3,0xd6,0x48,0xbf,0x2e,0x38,0xb2,0x9d,0xaf,0x35,0x1f,0x23,0xdd,0xa5,0xb2,0xc8,0xb7,0x2c,0x3d,0x2d,0x30,0xa0,0x9b,0x37,0x34,0x4b,0x2a,0x72 -,0xed,0x3d,0x40,0xad,0xbf,0x3c,0xc7,0xce,0x77,0xb5,0xcf,0x2e,0x23,0x1f,0xbc,0x9d,0xa1,0xaa,0x2d,0x27,0x2d,0xd6,0x9c,0xa6,0xdf,0x1e,0x1b,0x30,0xac,0x96,0x94,0xc4 -,0x18,0x15,0x24,0xb4,0xa8,0xea,0x27,0xb9,0xa3,0x6d,0x5e,0xb5,0xb1,0xa6,0x34,0x12,0x21,0xd9,0xa5,0xa6,0x56,0x2a,0xce,0xb8,0x3a,0x25,0x40,0x4f,0xb4,0x99,0xba,0x24 -,0x36,0x99,0x9c,0xd8,0x23,0x16,0x1d,0x23,0xbf,0x98,0x9d,0xa9,0x32,0x1e,0x2d,0xa4,0x95,0xbd,0x1b,0x11,0x2d,0xa7,0x93,0x95,0xbb,0x19,0x1e,0xc8,0x3a,0x21,0x27,0xd0 -,0xad,0xa2,0xdd,0xbc,0x9b,0xa1,0x2f,0x1c,0x19,0x13,0xc5,0x96,0x9b,0xc0,0x1c,0x2f,0xa0,0xa1,0x4e,0x1e,0x33,0x2f,0x51,0xae,0xc1,0xb2,0x9d,0xad,0x1e,0x2b,0xcb,0x38 -,0x18,0x23,0xa4,0x9a,0xaa,0xdd,0x2e,0x35,0xa7,0x95,0xad,0x0f,0x09,0x2d,0x8d,0x92,0xb3,0x3d,0x2c,0x29,0xee,0x4e,0xd9,0x45,0x5b,0xdd,0x25,0x6a,0xa9,0x8f,0x9d,0x3b -,0x14,0x11,0x1f,0x42,0x8f,0x97,0xd0,0x32,0x49,0x39,0x39,0xc3,0xb7,0x3c,0x1a,0x1c,0xb9,0x90,0x99,0xcf,0x48,0x25,0x27,0xb0,0xb2,0x21,0x17,0x47,0x9e,0xa4,0x63,0x31 -,0x2d,0xbe,0x9d,0xa7,0x27,0x0c,0x29,0x95,0x94,0xb6,0x51,0xaa,0x29,0x1d,0x6b,0xbd,0x44,0x30,0xc0,0x3b,0x39,0xa6,0x96,0xab,0x27,0x1f,0x31,0x5b,0x26,0x5b,0xa3,0xa6 -,0xcd,0x4e,0x2d,0x36,0x9e,0x9f,0x2a,0x0b,0x16,0xa0,0x8e,0x95,0xba,0x26,0x1a,0x32,0xab,0x9a,0xd0,0x0d,0x1e,0x9e,0x9d,0x59,0x48,0xbb,0x29,0x66,0xb6,0xd5,0x2c,0x24 -,0xab,0x9f,0xb9,0x4d,0xaf,0x4e,0x21,0x33,0xac,0x58,0x1e,0x3e,0xcf,0xba,0xaf,0x97,0xac,0x21,0x2a,0x5d,0x41,0x1f,0x34,0x9f,0x93,0x55,0x21,0x37,0x45,0xa9,0x9b,0xae -,0x0f,0x0b,0xb9,0x8d,0x93,0xc3,0x2d,0x28,0x21,0xcc,0xa9,0xcd,0x2f,0x25,0xd0,0xbe,0xbc,0xa6,0xa4,0x34,0x12,0x26,0xa2,0xaa,0x2b,0x6e,0xae,0xb8,0xdc,0xcb,0xda,0x2a -,0x28,0xd0,0x9d,0x38,0x19,0xd1,0xa0,0xdb,0xbf,0xa7,0x2a,0x1f,0x53,0xaa,0x39,0x25,0xaa,0x9e,0xb4,0x34,0xe1,0x70,0x22,0xc8,0xae,0x59,0x1c,0x25,0x9c,0x9f,0xb2,0xb4 -,0xb6,0x20,0x1a,0xb4,0x9c,0xdb,0x1b,0x27,0xcc,0x9d,0xa4,0xbb,0x29,0x11,0x23,0xa7,0x96,0xcd,0x22,0xda,0xaa,0xad,0xa9,0xd8,0x1c,0x23,0xb5,0xa3,0x3b,0x22,0xd5,0xad -,0xaa,0x2c,0x3a,0xbc,0x27,0x38,0xb7,0xa5,0x26,0x2f,0x9e,0xac,0x5a,0x36,0xcd,0x2d,0x2d,0xc1,0xa8,0x39,0x1c,0x75,0x9f,0x9f,0xdf,0x62,0x2a,0x1b,0xe4,0x99,0x9f,0x21 -,0x23,0xbb,0xad,0xab,0xac,0x3f,0x17,0x1d,0xec,0x9d,0xa5,0x60,0x42,0xbb,0xd4,0x27,0xb4,0xac,0x3e,0x2b,0x2c,0xbc,0xc5,0xb2,0xa7,0xcb,0x33,0x1b,0x49,0xca,0x3b,0xbb -,0xa0,0xaf,0x27,0x3a,0xfb,0xbc,0x59,0xaa,0xd8,0x16,0x1f,0xb1,0x94,0xbf,0x2c,0x48,0xd9,0x4e,0xcc,0xb5,0x45,0x23,0x56,0x99,0xbf,0x24,0x2d,0xb4,0xad,0x62,0xbe,0x38 -,0x1f,0x26,0x74,0x9a,0xa5,0x49,0x32,0x71,0x4f,0x4f,0xa4,0x37,0x20,0x2d,0x9f,0x9d,0xc7,0x69,0x26,0x58,0x57,0xe1,0x41,0x27,0x25,0xab,0x8f,0xbf,0x19,0x2f,0xa8,0xd5 -,0x3c,0xc7,0x4f,0x28,0xbc,0x9b,0xb1,0x2a,0x24,0xa9,0xb5,0x26,0x3c,0x4f,0x35,0x39,0xa3,0x9a,0x33,0x1f,0x30,0xb9,0xb7,0xbe,0xaf,0x24,0x1a,0x35,0x9f,0x9e,0xa8,0x55 -,0x26,0x39,0x22,0xca,0xa7,0xb5,0x32,0x39,0xac,0xc2,0xc9,0xb6,0xae,0x3a,0x1f,0x1d,0xc6,0xbb,0xba,0x9d,0xad,0x38,0x1e,0xbc,0xbf,0x2d,0x5d,0xb3,0x64,0x2f,0xb6,0xaf -,0x58,0x2e,0xcd,0xb4,0x2d,0x26,0xb6,0xae,0x37,0x2f,0xac,0x9c,0xb6,0x5e,0x2d,0x2e,0x2f,0xad,0xa6,0x39,0x1e,0x24,0xb5,0xae,0xc6,0x62,0xbf,0x38,0x37,0x69,0xbd,0xc7 -,0xb9,0xb0,0xdd,0xc1,0x37,0x68,0x2d,0x3b,0xc3,0xc3,0x5c,0x2a,0xbb,0xa9,0xc2,0x2f,0x3b,0xc5,0xfc,0x2e,0xc4,0xad,0x45,0x4f,0xaa,0xb3,0x46,0x29,0x2f,0xae,0x5e,0xbc -,0xb5,0x41,0x25,0x50,0x9c,0xb3,0x34,0x3a,0x32,0x29,0xc2,0xb1,0xc7,0x2f,0x5b,0xab,0xac,0xd7,0x2c,0xcb,0x3f,0x39,0xc5,0x40,0x36,0xaf,0xa8,0x55,0x2f,0x30,0xbf,0xb6 -,0x59,0x2f,0x29,0x5b,0xaf,0xb4,0xac,0xac,0xdc,0x2d,0x27,0x3b,0xea,0xab,0xcb,0x30,0x31,0xbe,0x9c,0xdf,0x21,0x2f,0xbc,0xca,0xc9,0xbd,0xef,0x26,0x40,0xa6,0xac,0xae -,0x34,0x45,0x33,0x3b,0xbb,0xce,0x45,0x4f,0xc0,0x39,0x3e,0x74,0xb9,0xd8,0x57,0x3f,0x44,0xe5,0xbe,0xa4,0xb4,0x2b,0x35,0xc4,0xbc,0x54,0x3a,0xba,0x36,0x67,0xcc,0xf9 -,0xae,0x50,0x38,0x79,0x2c,0x25,0xb6,0xbe,0xd1,0x40,0x42,0xaf,0xa1,0xab,0x2a,0x2b,0xe3,0xaf,0xb9,0x34,0x37,0x38,0x3e,0x4f,0x3b,0xb8,0xa7,0xc5,0x2e,0x29,0xd5,0x9d -,0xaf,0x4a,0x3f,0x37,0xac,0xaa,0xd9,0x20,0x1d,0xbc,0xd1,0x3d,0xbc,0xaf,0x70,0x34,0xc2,0xb6,0xc1,0x56,0xe8,0x3e,0x23,0x31,0xab,0xa9,0xba,0xae,0x29,0x2b,0x50,0xa9 -,0x9f,0x2d,0x1e,0x2a,0xf9,0xab,0xa8,0x42,0x2d,0x2f,0x66,0xb4,0xcb,0xb5,0xc9,0x3d,0x5f,0x5d,0xc4,0xae,0xbd,0x3a,0x44,0xec,0x29,0xc9,0xde,0x3a,0x39,0x34,0xa4,0x9f -,0x43,0x26,0xe9,0x5d,0x58,0x3a,0xb2,0xa4,0xcf,0x51,0x27,0x4a,0xac,0xa5,0xcd,0x21,0x1d,0x67,0x9e,0xb7,0x2b,0x2e,0xd2,0xb4,0xc3,0xca,0x43,0x3f,0xde,0xc8,0x47,0x74 -,0xa3,0xb5,0x7b,0x22,0x29,0xaf,0xc9,0xbe,0xca,0x25,0x1d,0x58,0x9c,0x9c,0x58,0x1e,0x29,0x40,0xb0,0xaa,0x4d,0x35,0x44,0xb7,0xad,0x9f,0xc7,0x31,0x2b,0x23,0x31,0x46 -,0xa6,0xec,0x22,0x3c,0xa3,0xa4,0xb6,0x44,0x2c,0xc8,0x4c,0xa4,0x99,0x49,0x26,0x36,0x38,0x2c,0x47,0xaf,0xc9,0x48,0x2c,0x26,0x4d,0x9e,0x93,0xb3,0x1f,0x16,0x5e,0xa0 -,0xa7,0x4b,0x30,0x32,0x43,0xb3,0xc5,0xb5,0x31,0x4c,0xbb,0xd7,0x6a,0xc0,0xda,0x2e,0x26,0x2a,0x9f,0xa7,0x33,0x2b,0x34,0x53,0xb9,0xaa,0xae,0x47,0x2d,0x73,0xa8,0xba -,0x52,0x46,0x36,0x42,0x3a,0xd9,0xcd,0x51,0x5d,0x51,0x2b,0x2d,0xa4,0x98,0xaf,0x25,0x37,0xba,0xb5,0xb7,0x38,0x33,0x2b,0xbe,0x9e,0xad,0x27,0x1c,0x4d,0x3e,0x49,0x5b -,0xa8,0xbd,0x46,0xca,0xbc,0xaf,0xb8,0xa4,0x3b,0x22,0x1f,0x3b,0xb2,0xee,0x4e,0xc3,0xac,0xbc,0x38,0x28,0x42,0x3a,0xc4,0xac,0x30,0x2d,0xab,0xa2,0xe9,0x27,0x31,0xa2 -,0x9c,0x5f,0x24,0x28,0x2d,0xb7,0xa1,0xb5,0x26,0x23,0x56,0xcf,0xbc,0x71,0xc1,0x48,0x38,0xbd,0xa9,0xb4,0xd8,0xb0,0xd8,0x44,0x26,0x3d,0xaf,0x6c,0x3c,0xbe,0xb9,0x29 -,0x21,0x37,0xb9,0xab,0xab,0xcd,0x32,0x35,0xa8,0x9c,0xcc,0x1f,0x1d,0xdd,0x9f,0xce,0x27,0x2e,0x3d,0x9a,0x97,0xd9,0x1d,0x1a,0x2c,0xc0,0xae,0x73,0xbd,0x5a,0xcb,0xdb -,0xba,0xbf,0x29,0x4d,0xbb,0x4c,0x26,0xc5,0xb4,0x63,0x48,0xb2,0x9e,0xb8,0x26,0x1c,0x3e,0x4b,0x59,0x44,0x3e,0xca,0x9b,0x97,0x65,0x27,0x37,0x9e,0x9e,0x2f,0x1b,0x1e -,0x3d,0x9a,0x9d,0x25,0x12,0x19,0xe2,0x94,0x9a,0x2c,0x32,0x35,0xfd,0xa0,0x9d,0xc6,0x3b,0x48,0x58,0xc5,0x37,0xdc,0x58,0x2d,0x28,0x2a,0xd8,0xab,0x38,0x29,0xb4,0xad -,0x9c,0xa5,0x34,0x1e,0x2b,0x41,0x31,0x37,0xd4,0x9b,0x9a,0x37,0x1a,0x34,0x9e,0x99,0xce,0x1e,0x11,0x1b,0x9e,0x8e,0xc9,0x19,0x28,0xad,0x99,0xa6,0x47,0x1f,0x23,0x63 -,0xad,0x9f,0xaf,0x4a,0x5d,0x2f,0x2d,0x6f,0xb7,0xc8,0x1e,0x1d,0x44,0xa1,0x91,0xa5,0x21,0x20,0x4b,0xb0,0xa0,0xb2,0x24,0x44,0xaf,0x24,0x22,0xbd,0xac,0xc3,0x26,0x20 -,0x3c,0xb7,0x9d,0x9e,0x4f,0x1e,0x2b,0xae,0x9d,0x2e,0x1a,0x2c,0xc1,0x9b,0x95,0xb8,0x18,0x1e,0x3d,0xbd,0xbb,0xd7,0x4e,0x57,0x2b,0x2d,0xca,0x9a,0x93,0x3b,0x18,0x16 -,0x2f,0x9b,0x97,0x3e,0x23,0xcb,0x95,0x96,0xaf,0x23,0x16,0x1f,0x1c,0x25,0xc8,0xa9,0xc8,0xaf,0xba,0xb2,0xa1,0x9b,0xae,0x16,0x14,0x2d,0x9b,0x91,0xb4,0x19,0x18,0x32 -,0xad,0xac,0x4d,0x12,0x21,0xad,0x3e,0xcb,0x99,0x95,0xa8,0x2f,0x19,0x3a,0xf6,0xa4,0xe4,0x19,0x20,0x69,0x97,0x9a,0x38,0x16,0x30,0xa8,0x9d,0xa0,0x3c,0x1c,0x2d,0x4c -,0xb5,0x97,0xad,0x26,0x24,0x1c,0x3c,0xa7,0x92,0x92,0x2c,0x1a,0x31,0xbf,0xa2,0xa9,0x14,0x0b,0x30,0x98,0x9a,0xb6,0x2b,0x2d,0xb7,0x2e,0x4c,0xa9,0xb9,0xc1,0xde,0x3c -,0xc5,0xa9,0x9f,0x42,0x10,0x13,0x2e,0xa2,0x9d,0xdf,0x1a,0x35,0x9f,0x9f,0xab,0xad,0x1e,0x21,0xba,0x3d,0xba,0xaf,0xb0,0xbd,0x26,0x1d,0xcf,0xa5,0xaa,0x4b,0x20,0x31 -,0xb9,0xa0,0xad,0x28,0x17,0x68,0x9b,0xbb,0xd5,0x4a,0x23,0xe5,0xbc,0xa8,0x98,0xc0,0x26,0x1d,0x1f,0xbe,0x9c,0x9e,0xb7,0x14,0x13,0x42,0xb0,0xa1,0xaa,0x2d,0x1c,0xb1 -,0x96,0x98,0xa3,0x2e,0x28,0x39,0x20,0x1e,0x28,0x4e,0xc3,0xc3,0xbd,0xbc,0xc8,0xb7,0x5e,0x28,0x30,0xbf,0x99,0x9d,0x4f,0x1e,0x3d,0xa2,0xc6,0x2f,0x37,0x1e,0x1a,0xdb -,0xab,0x9d,0x97,0x9e,0x3b,0x17,0x1f,0xb9,0xa8,0xb6,0x3e,0x20,0x1d,0xb2,0x97,0xaf,0x36,0x1c,0x59,0xac,0xed,0xad,0xa7,0xc3,0xe5,0x53,0x35,0x4c,0x23,0x1a,0x1d,0x48 -,0xa6,0xaa,0xa1,0xa4,0x5e,0x3e,0x9f,0xac,0x29,0x22,0x2f,0x36,0xd7,0xa4,0xa8,0xc2,0x25,0x26,0x2c,0x29,0x39,0xb9,0xa0,0xa6,0xb6,0xad,0xcf,0xd1,0xad,0x38,0x19,0x11 -,0x2e,0xa1,0x97,0x9f,0x40,0x2f,0x49,0xb8,0xe3,0x71,0x22,0x18,0x36,0xa7,0x9c,0xa4,0xba,0x24,0x26,0x7e,0xa8,0xab,0x38,0x24,0x41,0xaa,0xa2,0xb9,0x2c,0x37,0x35,0xbd -,0xaf,0x2d,0x1e,0x27,0xad,0x9f,0xaf,0x4f,0x58,0xb1,0xc2,0x3c,0x3f,0x38,0x40,0xbf,0xa9,0x59,0x27,0x46,0x70,0xaf,0xb2,0x48,0x1c,0x1e,0xab,0x96,0x9c,0x56,0x1f,0x15 -,0x3e,0x97,0x99,0x46,0x1b,0x21,0xaf,0x9c,0xa4,0xd7,0x1e,0x1e,0x30,0xa7,0x9d,0xb0,0x2b,0x1e,0xcc,0xa8,0xc1,0x27,0x32,0xab,0xf5,0xde,0xc7,0x29,0x37,0xa8,0x96,0xcb -,0x1d,0x26,0x45,0xb2,0xb9,0xb7,0x31,0x25,0x38,0xd1,0xb4,0x4b,0x43,0xbe,0xa2,0xa6,0x52,0x1e,0x1e,0xbb,0x97,0x9a,0xb3,0x19,0x0d,0x2d,0x9b,0x8f,0xae,0x22,0x15,0x18 -,0xae,0x9b,0xaa,0x37,0x2f,0x4b,0x54,0xae,0xad,0xc3,0xd6,0xca,0xc1,0x1f,0x1a,0x2e,0xa1,0x90,0x9e,0xce,0x15,0x11,0x2a,0xb2,0xa1,0xcf,0x64,0x62,0xb3,0xae,0x50,0x2b -,0xea,0x9c,0xb5,0x26,0x22,0x24,0x3a,0x9c,0x8e,0x9c,0x1a,0x0b,0x17,0xaa,0x8f,0x9f,0x33,0x13,0x1a,0xbc,0x99,0x91,0xe9,0x1e,0x1f,0x2d,0xb3,0x4f,0x57,0xb0,0xa8,0xae -,0xbc,0xc7,0x1d,0x20,0xbe,0xab,0x5b,0x24,0x4a,0xba,0xa5,0x9e,0xdd,0x1d,0x27,0xad,0xa9,0x42,0x1e,0x21,0xba,0x9a,0x96,0x9d,0x23,0x0e,0x1a,0xa9,0xa4,0x29,0x38,0xb4 -,0x9f,0xa2,0xc2,0x39,0x12,0x1d,0xa8,0x94,0xa0,0x1b,0x1e,0x7a,0xaa,0x9c,0x9a,0x53,0x0e,0x18,0xbc,0xaf,0x3b,0x2f,0xad,0x9e,0xae,0x57,0x4f,0x45,0x45,0xb4,0xb3,0x2a -,0x11,0x27,0x92,0x8e,0x9a,0x54,0x0f,0x0c,0x1c,0x9e,0x94,0x44,0x2a,0x7d,0xa0,0xb2,0x39,0xee,0x25,0x2f,0xa0,0x99,0x2b,0x0d,0x36,0x96,0x97,0x9d,0xba,0x18,0x09,0x1a -,0x97,0x8d,0xbd,0x1e,0x4d,0xaa,0x5b,0x2d,0xb3,0xc8,0x2a,0xc6,0xaa,0x4e,0x1a,0x22,0x9d,0x97,0xb1,0x39,0x20,0x2c,0x42,0xa9,0xa7,0x1c,0x1a,0xbb,0x96,0xad,0xf0,0xbc -,0x1d,0x2b,0xac,0xa7,0x39,0x19,0x3b,0x9d,0x99,0xb6,0x37,0x28,0x21,0x35,0x9c,0x9c,0x1a,0x10,0xdf,0x99,0xa8,0xdc,0xb3,0xce,0x2d,0x41,0xa9,0xb8,0x18,0x15,0xae,0x9c -,0xb2,0xaa,0xa3,0x3f,0x17,0x3c,0xc8,0x18,0x26,0xa2,0x9a,0xf7,0x43,0xae,0xef,0xae,0xad,0xfa,0x1f,0x0f,0x1c,0x9a,0x8b,0x9b,0xc3,0x26,0x1b,0x2a,0xd6,0x35,0x1d,0x35 -,0xa1,0x98,0xa8,0x38,0x32,0x6f,0x54,0x59,0xab,0xc5,0x0f,0x12,0x97,0x8c,0xae,0xc2,0xbd,0x25,0x13,0x31,0xa8,0x2d,0x1e,0x38,0x97,0xa2,0xdf,0xa2,0xa3,0xcc,0x1f,0x30 -,0x24,0x11,0x1e,0x97,0x8c,0x9e,0xbd,0x1d,0x20,0xad,0xad,0x24,0x19,0x23,0xbf,0x96,0x99,0xaa,0xca,0x36,0x1e,0x24,0x5d,0x4e,0x19,0x26,0x97,0x94,0x9c,0xba,0x27,0x36 -,0x27,0x1f,0xc6,0xcc,0x1c,0x2c,0x90,0x92,0xc2,0x31,0x3d,0x58,0x28,0xcf,0x41,0x16,0x18,0xa6,0x8c,0x99,0xae,0xc9,0xc4,0x23,0x17,0x25,0x26,0x28,0xb5,0x95,0xa1,0x6d -,0xd6,0xe7,0x33,0xda,0x49,0x1e,0x1d,0x53,0x9b,0x96,0x98,0xdc,0x21,0x25,0x21,0x1d,0x2f,0xbf,0xde,0xa9,0x96,0x9d,0x9d,0xee,0x13,0x1d,0x2c,0x52,0x52,0x20,0x18,0x9f -,0x87,0x95,0xe6,0x2f,0xcb,0x1d,0x11,0x2c,0x5e,0x3c,0xda,0x9c,0x9c,0xb9,0x48,0xae,0xab,0x2e,0x18,0x1d,0x20,0x2c,0xad,0x94,0x8e,0xa6,0x2f,0x1b,0x19,0x44,0xc7,0x25 -,0x1f,0xbe,0x9a,0x94,0x91,0xa8,0x22,0x1e,0x26,0x3d,0x29,0x19,0x1c,0x9b,0x88,0x9e,0xe7,0x2c,0x2a,0x2a,0x1e,0x20,0x49,0xbf,0x43,0xa2,0x91,0x97,0xf7,0x3e,0xbb,0x29 -,0x15,0x1d,0x1f,0x21,0xb5,0x9a,0x9b,0xb3,0xb7,0xc5,0x3f,0x36,0x4b,0x3f,0x1d,0x2e,0x9c,0x91,0x9c,0x3f,0x1c,0x1f,0x25,0xbd,0x38,0x15,0x23,0x9b,0x8c,0x94,0xa1,0x27 -,0x1f,0x36,0x3d,0x18,0x14,0x36,0xbc,0x99,0x91,0x9c,0xb5,0x47,0x1e,0x1b,0x30,0x5c,0x2a,0x25,0x7b,0x97,0x8e,0xa9,0x2f,0x37,0x1f,0x1a,0x32,0xc4,0x2c,0x2e,0x9a,0x8f -,0x97,0x2a,0x24,0xac,0x9f,0x3c,0x0e,0x0d,0x1b,0xa0,0x91,0x95,0xa5,0x25,0x2b,0x3d,0x44,0x3b,0x19,0x1a,0xba,0x8f,0x8f,0x9d,0xb7,0x2f,0x22,0x29,0x27,0x16,0x15,0x2d -,0xa7,0x93,0x8f,0xa9,0xc7,0xca,0x2c,0x21,0x1d,0x2b,0x34,0x3f,0xa9,0x90,0x8e,0xc1,0x23,0x47,0xae,0x2d,0x0c,0x0d,0x1f,0x9e,0x8d,0x9f,0x22,0x2f,0x96,0x9c,0xd8,0x1b -,0x12,0x2a,0xd1,0x9c,0x96,0xa5,0x64,0x5f,0xcf,0x3e,0x1e,0x13,0x10,0x1d,0xa6,0x91,0x8f,0xa7,0xdb,0x62,0x53,0xb5,0x2d,0x13,0x1c,0xaf,0x97,0x93,0xa8,0x26,0x36,0xe7 -,0x3d,0x1d,0x13,0x1a,0x2a,0x9f,0x94,0x97,0xb5,0x46,0x9d,0x9d,0x32,0x0d,0x0f,0x28,0xbc,0x9b,0x9a,0xbb,0x2e,0xcc,0x9f,0x9f,0x2f,0x0f,0x14,0x67,0x9e,0xab,0xb7,0xc1 -,0xaa,0xbd,0x37,0x3a,0x29,0x26,0x20,0xd4,0x94,0x8e,0xa1,0x2f,0x35,0x40,0xbd,0x23,0x0a,0x0a,0x27,0x97,0x8e,0x97,0xf0,0xc8,0x96,0x9b,0x24,0x0b,0x19,0xb6,0xa3,0xa3 -,0xba,0x32,0x2e,0x9d,0x8f,0x9f,0x14,0x05,0x00,0x2a,0x83,0x84,0x8b,0x2a,0x3c,0x90,0x96,0x35,0x0b,0x06,0x3e,0x86,0x2b,0x04,0x2c,0xa8,0x87,0x88,0xa8,0x1f,0x0b,0x0a -,0x2a,0x88,0x82,0xbd,0x04,0x02,0x8f,0x83,0x26,0x0a,0x00,0x2d,0x8a,0x86,0x93,0x9f,0x91,0x8f,0x8f,0x12,0x00,0x08,0x17,0x8e,0x8b,0x3e,0x0e,0x0e,0x96,0x83,0x89,0xb6 -,0x0f,0x08,0x02,0xac,0x80,0x8b,0x25,0x06,0x53,0x89,0x96,0x17,0x07,0x0d,0xaa,0x88,0xdb,0x06,0xa2,0x84,0x83,0x98,0x09,0x01,0x02,0x5e,0x87,0x8a,0xac,0x1d,0x1f,0x39 -,0x8d,0x85,0xbe,0x1a,0x09,0x0f,0x9b,0x8f,0x1c,0x0f,0x9f,0x81,0x99,0x04,0x00,0x1a,0x88,0x85,0x8c,0xaa,0x2e,0x9f,0x92,0x92,0x8f,0x1b,0x01,0x00,0x09,0x8c,0x86,0xd9 -,0x20,0xae,0x8b,0x8a,0x5f,0x0b,0x25,0xd5,0xa0,0x94,0x0e,0x00,0xa8,0x80,0x85,0xc4,0x05,0x01,0x0f,0xab,0x90,0x8c,0xa2,0xb0,0xa8,0xd5,0x93,0xbb,0x09,0x06,0x14,0xa6 -,0x92,0xc4,0x0b,0xbf,0x87,0x82,0x90,0x06,0x01,0x2e,0x91,0x8e,0x9b,0x0e,0x09,0x9b,0x80,0x92,0x12,0x02,0x0b,0x10,0x1e,0x8b,0x8d,0xa2,0x9c,0x9d,0x92,0x8d,0x1c,0x02 -,0x0f,0xa7,0x93,0xde,0x01,0x09,0x89,0x80,0x8f,0x14,0x0d,0x1f,0x7c,0xad,0xa5,0xaa,0x1c,0x2c,0xa8,0x9b,0x98,0x1c,0x0b,0x15,0x37,0x91,0x8a,0xc7,0x20,0x99,0x8c,0x93 -,0x16,0x00,0x04,0x9c,0x81,0x8d,0x1e,0x08,0x42,0x86,0x81,0x98,0x1e,0x0f,0x17,0x0c,0x2a,0x91,0xc8,0x1d,0xb6,0x92,0x9f,0x1c,0x07,0x0b,0xde,0x94,0x8d,0x96,0x16,0x35 -,0x8a,0x85,0x9c,0x0b,0x04,0x0b,0xa4,0x8e,0xae,0x20,0x2c,0x97,0x93,0xa6,0x3e,0x16,0x31,0x39,0x2f,0xa5,0xb3,0x19,0x20,0x8e,0x8b,0xcc,0x08,0x00,0x0c,0x94,0x85,0x8d -,0xc8,0x28,0xbe,0x8f,0x8d,0x38,0x0e,0x0e,0x35,0x2f,0x24,0xe7,0xb6,0x99,0x8f,0x8f,0x9b,0x32,0x19,0x14,0x26,0xa3,0x9a,0x32,0x08,0x1d,0x8d,0x8b,0x39,0x06,0x0a,0x1f -,0x9b,0x8e,0x9d,0x9f,0x99,0x94,0xaf,0x3a,0x1d,0x0d,0x2d,0xbb,0x3e,0x2c,0x25,0x2d,0xa6,0x8b,0x93,0xbf,0x17,0x05,0x0d,0xab,0x8f,0x99,0x34,0x21,0xa8,0x8b,0x98,0x1c -,0x0e,0x1b,0xf8,0xfc,0x3d,0xb7,0xa5,0x9d,0x9f,0xa6,0xe8,0x15,0x12,0x34,0xa1,0xa0,0xc5,0x20,0x1a,0xbb,0x8e,0x8e,0xb3,0x19,0x13,0x1c,0xf9,0xa8,0x37,0x29,0xad,0x9f -,0x2c,0x0f,0x16,0x3a,0x97,0x8f,0xa1,0xb4,0xae,0xb1,0xa1,0x95,0x9e,0x25,0x09,0x07,0x21,0x98,0x9b,0x5b,0x25,0x25,0x61,0x9b,0x9e,0x2a,0x1e,0x34,0xcf,0xf5,0x2f,0x26 -,0xb9,0x93,0x95,0xbd,0x1d,0x15,0x36,0xa0,0x9a,0x9a,0xa9,0x2b,0x16,0x26,0xa9,0xa6,0x2d,0x15,0x19,0x4d,0xa7,0xb1,0xdf,0xb7,0x9c,0x9b,0xde,0x1e,0x20,0x4a,0xa1,0x97 -,0xbb,0x1d,0x1b,0x2d,0xaf,0x9b,0xb0,0x1e,0x0f,0x0e,0x37,0x90,0x8c,0x9a,0xbc,0x38,0xca,0xa3,0x47,0x18,0x21,0xc6,0xb7,0x27,0x14,0x1e,0xb5,0x95,0x97,0xb0,0x3e,0x23 -,0x2b,0xb0,0x9e,0xa1,0xcd,0x23,0x1d,0x49,0xa6,0xa7,0xd5,0x26,0x21,0xd2,0xa9,0xac,0xab,0xbb,0xc3,0x67,0x17,0x0c,0x18,0x65,0x99,0x96,0xd7,0x2c,0xdf,0xa7,0x9d,0x9e -,0xae,0x70,0x20,0x14,0x22,0xd0,0xc1,0xde,0x3c,0x3b,0xc4,0xb9,0xe6,0x30,0x35,0xad,0xa0,0xb8,0xec,0xec,0xad,0x9e,0xb6,0x2b,0x22,0x22,0x2f,0xc6,0xbb,0xb2,0xc1,0x21 -,0x19,0x2d,0xae,0x97,0x9a,0x48,0x25,0x36,0x4c,0xdd,0xb3,0xa7,0xa2,0xca,0x1a,0x14,0x28,0xad,0x9b,0xa0,0xbf,0x38,0x36,0x47,0x76,0x5a,0x3f,0x2c,0x1d,0x1d,0x4b,0xa0 -,0x9a,0xa1,0xb7,0xd0,0xba,0xa4,0xa4,0xbf,0x67,0x47,0x1f,0x14,0x14,0x1e,0xbc,0x9e,0xaf,0x3e,0x28,0x2e,0xae,0x9e,0x9b,0x95,0x9f,0x37,0x1e,0x1d,0x22,0xcb,0xa5,0xb9 -,0x3a,0x2d,0x2e,0x3a,0xe0,0xb1,0xaa,0xbe,0x2d,0x1f,0x34,0xab,0xa2,0xba,0x3d,0x46,0xb6,0xad,0xbe,0x7d,0x6a,0x4c,0x2b,0x22,0x2c,0xc4,0xab,0xb4,0xd4,0x49,0x33,0x2b -,0x2f,0x4b,0xaa,0x9d,0xb5,0x29,0x22,0x4c,0xa5,0x9a,0x9f,0xb0,0xda,0x3a,0x32,0x21,0x24,0x3e,0x51,0x2e,0x24,0x2d,0x40,0xc3,0xab,0xa4,0xa5,0xa0,0xa1,0xad,0xb1,0xb6 -,0x58,0x22,0x14,0x18,0x3e,0xb5,0xc5,0x49,0x2a,0x2b,0xbd,0xa4,0xa2,0xaa,0xbe,0x3e,0x39,0x2d,0x28,0x37,0xc7,0xa6,0xa8,0xbf,0x58,0x56,0xce,0xb3,0xaa,0xb2,0x43,0x22 -,0x1c,0x27,0x54,0xdb,0x34,0x2d,0x43,0xb2,0xa5,0xaf,0xb9,0xb3,0xb9,0x61,0x5f,0xbf,0xb1,0xaa,0xaa,0x5d,0x1f,0x1e,0x26,0x37,0xcc,0xbc,0x67,0x28,0x1b,0x28,0xab,0x9a -,0x9c,0xa1,0xb7,0xbd,0xba,0x6b,0x2e,0x3b,0xd5,0x3f,0x29,0x1b,0x1a,0x21,0x53,0xa9,0xa5,0xa5,0xac,0xb6,0xb1,0xa9,0xad,0xc6,0x31,0x25,0x2a,0x2f,0x55,0xb9,0xb6,0xb3 -,0xb5,0xbd,0xe0,0x4b,0x4f,0xe7,0x3e,0x27,0x21,0x1f,0x2d,0xab,0x97,0x9f,0xb5,0xd1,0x56,0xc4,0xb8,0xbe,0xc8,0xc0,0x45,0x2e,0x24,0x1e,0x26,0x36,0x45,0x5f,0x56,0x39 -,0x44,0xbb,0xa1,0x9f,0xae,0xcf,0x3f,0x4f,0xb9,0xb7,0x5b,0x41,0x58,0xce,0xbb,0xd7,0x3f,0x30,0x24,0x21,0x2e,0x57,0xbb,0xb0,0xb3,0xaa,0xa1,0xac,0xbd,0x5b,0x45,0x7c -,0x36,0x24,0x28,0x48,0xb9,0xaf,0xb8,0xd7,0xcd,0xbb,0xb9,0xc6,0x3d,0x22,0x1e,0x29,0x51,0xb8,0xb3,0xbf,0x3e,0x43,0xb8,0xa3,0x9b,0x9e,0xb3,0x7d,0x5a,0x2f,0x28,0x20 -,0x15,0x17,0x2b,0x70,0xcf,0xc6,0xb5,0x9f,0x98,0x9c,0x9f,0xb0,0x4d,0x3e,0x2e,0x20,0x2a,0x3d,0x4d,0x78,0x61,0xcf,0x75,0x36,0x32,0x4a,0x63,0x58,0xfc,0xff,0xb7,0xa8 -,0xa7,0xb8,0x54,0x6c,0xcd,0xe4,0x4c,0x51,0x45,0x60,0x65,0x4e,0xbf,0xce,0x2e,0x2e,0x4c,0x58,0x43,0x30,0x36,0xba,0xa8,0xb2,0xc0,0x54,0x3e,0x5f,0xd3,0xca,0xb0,0xa7 -,0xa4,0xa7,0xc7,0x3b,0x26,0x1e,0x21,0x28,0x2a,0x2b,0x2e,0x37,0xc0,0xa0,0x97,0x96,0xa1,0xb5,0xc5,0x40,0x2c,0x2a,0x29,0x35,0x4d,0x45,0x48,0x35,0x2a,0x68,0xb0,0xb3 -,0xc6,0x3a,0x36,0xb1,0xa5,0xb5,0xe0,0x2e,0x2a,0x47,0xcc,0xcf,0xc2,0xc7,0xbd,0xad,0xb5,0xc9,0x3e,0x2d,0x2b,0x2e,0x39,0x2f,0x23,0x29,0xbc,0x9d,0x97,0x9c,0xbf,0x39 -,0x3b,0x47,0xc3,0xb1,0xcf,0xf7,0xd8,0x64,0x4f,0x31,0x28,0x37,0x40,0x2f,0x22,0x1d,0x2c,0xab,0x97,0x97,0x9c,0xac,0xb8,0xb7,0xbf,0x47,0x2f,0x24,0x25,0x3c,0x3f,0x3f -,0x3b,0x36,0x32,0x47,0xbd,0xbf,0x66,0xc2,0xa3,0x9f,0xa6,0xce,0x2f,0x2f,0x35,0x38,0x49,0x38,0x26,0x3e,0xa7,0x9d,0x9e,0xaf,0x3c,0x34,0x35,0x2b,0x1f,0x1c,0x22,0x51 -,0xad,0xa8,0xac,0xaa,0xa7,0xac,0xb8,0x53,0x32,0x34,0xd5,0xb5,0xce,0x5c,0x33,0x2b,0x32,0x60,0xcc,0x37,0x21,0x24,0xc2,0x9e,0x9c,0xad,0xca,0xba,0xb3,0xbb,0x4c,0x25 -,0x1e,0x4f,0xa4,0xa0,0xb1,0x2a,0x19,0x23,0xfb,0xb2,0xc8,0x2e,0x24,0xd2,0x9e,0x9b,0x9d,0xa8,0xbf,0x40,0x2e,0x1c,0x18,0x25,0xcd,0xa9,0xa8,0xb0,0xfc,0xdb,0xaf,0xaa -,0xb9,0x2e,0x17,0x15,0x29,0xcb,0xa4,0xa1,0xbb,0xf2,0xb8,0xa8,0xaf,0x44,0x2d,0x7b,0xab,0xb1,0x3f,0x23,0x22,0x3a,0xca,0xd2,0x2a,0x19,0x1f,0xaf,0x97,0x98,0xa0,0xc4 -,0x58,0xbc,0xb8,0x45,0x24,0x1b,0x1f,0xdc,0xa0,0x9f,0xc2,0x3c,0x41,0xc1,0xb3,0x39,0x1f,0x24,0x41,0xfb,0xd7,0xc8,0xb2,0x9f,0x9f,0xb5,0x36,0x1f,0x1e,0x4b,0xa5,0xa3 -,0xb4,0x40,0x2c,0xcc,0x9c,0x9d,0x31,0x10,0x10,0x30,0xa8,0xae,0x3c,0x32,0xb9,0x9d,0x9c,0xbf,0x29,0x2c,0xbd,0xa1,0xa2,0xb2,0x31,0x23,0x2b,0xe4,0xbe,0x2b,0x17,0x15 -,0x2c,0xae,0x9f,0xa4,0xaa,0x9f,0x99,0xa0,0x4c,0x1c,0x1a,0x2e,0x6a,0x4b,0x3f,0x49,0xbf,0xa5,0xa7,0x69,0x29,0x28,0x34,0xd9,0xd8,0x31,0x2c,0x5a,0xac,0x9d,0x9d,0xb9 -,0x3e,0x35,0x56,0xc2,0xf1,0x36,0x35,0x4a,0x6c,0x3c,0x20,0x1c,0x34,0xa6,0x98,0x9e,0xcf,0x28,0x21,0x4d,0x9f,0x9a,0xa2,0xc2,0x34,0x27,0x2d,0xfb,0xaf,0xac,0xbb,0x7b -,0x33,0x1d,0x18,0x1c,0x2f,0xcd,0xb5,0xbc,0xb7,0xa6,0x9f,0x9e,0x9f,0xaa,0xc1,0x3f,0x2f,0x29,0x26,0x27,0x2a,0x2f,0x2f,0x35,0xbc,0x9e,0x9a,0xa3,0xfd,0x26,0x21,0x2d -,0x38,0x41,0x54,0xd9,0xc2,0xbe,0xba,0xb3,0xb2,0xc4,0xdc,0xc7,0xb4,0xaf,0x5b,0x20,0x1b,0x20,0x31,0x4b,0xca,0xab,0xa1,0xa2,0xa7,0xb5,0x4c,0x2e,0x37,0xd8,0xb9,0xc4 -,0x3c,0x20,0x1a,0x28,0xb0,0x9c,0xa1,0xca,0x35,0x38,0x48,0x38,0x2a,0x30,0xbf,0xa1,0x9d,0x9f,0xaa,0xd1,0x32,0x2c,0x3a,0x55,0x4f,0x35,0x2a,0x2b,0x32,0x35,0x2e,0x33 -,0xbe,0x9c,0x95,0x9a,0xae,0x36,0x26,0x2a,0x30,0x3c,0x50,0xcc,0xbb,0xc4,0xea,0x6b,0xea,0xcc,0xb6,0xb4,0xd2,0x3a,0x2b,0x20,0x1d,0x2c,0xbf,0xaf,0xb4,0xad,0xa0,0x9f -,0xb4,0x43,0x35,0x44,0x67,0x41,0x37,0x4a,0xcf,0x74,0x2e,0x28,0x39,0xbf,0xaf,0xbb,0xcd,0xbf,0xb7,0xce,0x3e,0x43,0xca,0xc0,0x4a,0x37,0xc9,0xaa,0xb3,0x38,0x25,0x2d -,0xe4,0xb0,0xac,0xad,0xba,0x53,0x2a,0x1c,0x1d,0x38,0xb1,0xa4,0xa5,0xb2,0x45,0x2b,0x2c,0x36,0xcd,0xac,0xa9,0xba,0x48,0x37,0x3e,0xf8,0xeb,0x51,0xcf,0xbb,0xc7,0x50 -,0xed,0xb2,0xad,0xb6,0x49,0x3b,0xc9,0xbd,0x45,0x2b,0x2e,0x5c,0xb6,0xb2,0xc9,0x61,0x45,0x2b,0x1f,0x22,0x36,0x78,0xca,0xb3,0xaa,0xa7,0xac,0xc3,0x43,0x36,0x45,0x5c -,0x50,0x3b,0x43,0xb9,0xaf,0xe9,0x2e,0x2b,0x35,0xdd,0xad,0xa9,0xad,0xba,0x7e,0x36,0x2a,0x34,0xc5,0xab,0xa7,0xab,0xb0,0xbd,0x57,0x43,0x67,0xbc,0xbd,0x4a,0x2c,0x24 -,0x2d,0x33,0x2f,0x37,0xf7,0xb2,0xb5,0xbf,0x57,0x41,0x50,0x41,0x3d,0x3d,0x5f,0xd7,0xd2,0x7d,0x41,0x69,0xbd,0xbb,0xbf,0xb9,0xb2,0xb8,0xea,0x41,0xe5,0xa9,0xa5,0xbb -,0x4d,0x3b,0x46,0x5e,0xf7,0x4b,0x35,0x31,0x26,0x1c,0x1c,0x2b,0xbf,0xa7,0xaa,0xc1,0x5e,0x46,0x34,0x3a,0xc6,0xa6,0x9f,0xa8,0xc2,0x67,0xbf,0xb9,0xc5,0xc4,0xbd,0xb7 -,0xbd,0x59,0x3b,0x38,0x2f,0x26,0x1e,0x21,0x35,0xc6,0xaf,0xb0,0xb2,0xb9,0xdd,0x36,0x2d,0x3f,0xca,0xbc,0x74,0x3d,0x47,0xbd,0xaf,0xb9,0xdf,0xdd,0xaf,0xab,0xaf,0xc4 -,0x7e,0xd3,0xf2,0x2c,0x23,0x41,0xbd,0xbf,0xec,0x40,0x3d,0x45,0x37,0x2f,0x37,0x59,0xec,0x39,0x27,0x28,0xf4,0xad,0xa5,0xa5,0xaa,0xb5,0xcd,0xd4,0x4f,0x46,0x5b,0xee -,0x58,0x46,0xce,0xae,0xaa,0xaf,0xc5,0x3a,0x2f,0x32,0x2f,0x2b,0x3f,0xc0,0x60,0x35,0x33,0xfb,0xaf,0xac,0xb2,0xbb,0xb1,0xb4,0x3f,0x25,0x2a,0x53,0xd5,0x43,0x47,0xc1 -,0xad,0xb8,0xd8,0xcc,0xbc,0xad,0xaa,0xc7,0x2f,0x24,0x20,0x1d,0x1f,0x44,0xaa,0x9e,0xa1,0xb1,0x47,0x37,0x5b,0x5f,0x47,0x4e,0xc6,0xd6,0x39,0x26,0x26,0x64,0xa5,0x9d -,0xa6,0xbf,0xe2,0xe1,0x2f,0x22,0x23,0x2f,0x4e,0xee,0xc1,0xb9,0xae,0xb5,0x7c,0x3e,0xe4,0xae,0xb0,0x5a,0x3b,0x43,0x4e,0x5a,0xe7,0xb4,0xac,0xa6,0xae,0x42,0x33,0x3c -,0x3f,0x2f,0x28,0x2a,0x2d,0x29,0x23,0x2c,0xcf,0xa8,0x9c,0x9b,0xa1,0xa3,0xa7,0xbf,0x32,0x27,0x2d,0x45,0xea,0xe1,0xd7,0xb6,0xaa,0xbf,0x2e,0x2d,0xd9,0xba,0x55,0x29 -,0x23,0x23,0x24,0x27,0x2f,0xd0,0xa4,0x9c,0xa5,0xb2,0xb9,0xbe,0xd4,0x48,0x3c,0x4c,0x66,0x40,0x2f,0x31,0xcc,0xaa,0xab,0xbf,0xcf,0xb8,0xcb,0x33,0x23,0x24,0x35,0x59 -,0x4e,0x42,0x70,0xb9,0xab,0xae,0xb2,0xab,0xa7,0xb8,0x38,0x2a,0x35,0x4e,0x4d,0x48,0xeb,0xb7,0xae,0xc2,0x4a,0x4e,0xcd,0xc7,0x4b,0x2d,0x28,0x29,0x2a,0x2d,0x34,0xf6 -,0xa7,0x9d,0xa7,0xba,0xb9,0xb4,0xcb,0x3a,0x32,0x48,0xec,0x62,0x3f,0x3d,0x54,0xbd,0xad,0xae,0xb4,0xc4,0x3b,0x23,0x19,0x18,0x25,0x59,0xc9,0xc3,0xb1,0xa2,0x9f,0xaa -,0xad,0xa4,0xa2,0xae,0x4e,0x2a,0x23,0x26,0x29,0x2c,0x39,0x4c,0x69,0x5a,0xed,0xbd,0xb8,0xcd,0x41,0x2b,0x29,0x3c,0x57,0x77,0xc9,0xad,0x9f,0xa2,0xb4,0xba,0xb5,0xac -,0xab,0xcc,0x38,0x2b,0x26,0x24,0x29,0x3c,0xc1,0xab,0xad,0xbf,0xc4,0xbc,0xc9,0x33,0x1c,0x1c,0x2d,0x46,0x53,0xd9,0xbd,0xb3,0xb0,0xae,0xa7,0xa7,0xac,0xba,0x46,0x28 -,0x22,0x2b,0x33,0x3c,0xfa,0xac,0xa0,0xab,0xf8,0x40,0x3d,0x3d,0x34,0x2a,0x28,0x2d,0x3e,0x4b,0x53,0xc3,0xb1,0xab,0x9f,0x9c,0x9e,0xa9,0xcf,0x2d,0x1f,0x22,0x33,0x32 -,0x2e,0x41,0xc4,0xb1,0xb4,0xb2,0xb6,0xd1,0xe8,0x46,0x30,0x32,0x30,0x26,0x27,0x44,0xb2,0xa2,0x9a,0x96,0x9c,0xb6,0x4b,0x3b,0x2c,0x23,0x29,0x2d,0x25,0x23,0x29,0x3c -,0xba,0x9f,0x97,0x9c,0xb3,0x45,0x29,0x24,0x2e,0x3d,0x3a,0x35,0x40,0xd7,0xb1,0xa3,0x9f,0xa7,0xae,0xbb,0xef,0x31,0x26,0x25,0x1f,0x1e,0x35,0xbf,0xb4,0xaf,0xab,0xa6 -,0xad,0xf0,0x31,0x21,0x1e,0x2e,0x4a,0x41,0x3e,0x3f,0xec,0xa9,0x99,0x94,0x97,0xa0,0xaf,0x4e,0x24,0x1e,0x1d,0x1a,0x1b,0x2c,0x5e,0xb9,0xae,0xab,0xa1,0xa1,0xab,0xb7 -,0x4c,0x2d,0x28,0x25,0x27,0x2f,0x49,0xc5,0xa7,0x9a,0x97,0x9c,0xb3,0x37,0x24,0x1e,0x23,0x23,0x1e,0x23,0x38,0x52,0xc6,0xa8,0x9e,0x9c,0x9e,0xa6,0xb4,0x3a,0x21,0x1c -,0x18,0x1a,0x2d,0xb8,0xa2,0x9e,0xa1,0xa7,0xad,0xc2,0xc7,0xd7,0x3f,0x30,0x1f,0x16,0x1b,0x2f,0xc4,0xa5,0x9d,0x9c,0xa2,0xb3,0xcd,0x47,0x2d,0x2d,0x2c,0x24,0x22,0x2b -,0xde,0xaa,0x9f,0x9d,0x9d,0x9e,0xa8,0xc6,0x3c,0x2a,0x1d,0x13,0x11,0x1c,0x3d,0xb3,0x9d,0x95,0x97,0x9a,0xa2,0xbc,0x34,0x21,0x23,0x20,0x1b,0x1e,0x2c,0x43,0xb9,0x9f -,0x97,0x96,0x9d,0xbf,0x3c,0x2c,0x24,0x22,0x1c,0x1b,0x22,0x37,0xb3,0x9d,0x98,0x99,0x9c,0xa3,0xba,0x38,0x27,0x24,0x1d,0x19,0x1b,0x21,0x32,0xca,0xa4,0x9b,0x9a,0x9e -,0xb4,0x45,0x2f,0x2f,0x3a,0x31,0x27,0x29,0x37,0xc2,0xa2,0x9a,0x9a,0x9d,0xad,0x37,0x22,0x1f,0x23,0x1d,0x19,0x1e,0x32,0xd4,0xa5,0x96,0x90,0x8f,0x95,0xa5,0x4a,0x1e -,0x17,0x18,0x18,0x1d,0x27,0x36,0xc6,0xaa,0x9e,0x98,0x97,0x9e,0xb8,0x3c,0x26,0x1e,0x18,0x18,0x1e,0x2e,0xc7,0xa1,0x99,0x9b,0xa2,0xa7,0xbc,0x3b,0x32,0x2f,0x24,0x1a -,0x1a,0x24,0x3e,0xb4,0x9f,0x9a,0x98,0x98,0xa1,0xd5,0x2d,0x20,0x1e,0x1d,0x1a,0x1b,0x20,0x37,0xb4,0x9d,0x96,0x94,0x9b,0xb0,0x56,0x43,0x4d,0x2f,0x1c,0x1a,0x1f,0x3d -,0xa8,0x9c,0x9a,0x9b,0xa0,0xae,0x4a,0x29,0x20,0x1b,0x16,0x15,0x19,0x22,0x6a,0xa1,0x92,0x8d,0x8d,0x96,0xb4,0x2f,0x26,0x2a,0x27,0x1b,0x17,0x1a,0x27,0xd4,0xa6,0x9c -,0x9b,0x9d,0xa6,0xbb,0x4c,0x2d,0x20,0x1a,0x1a,0x1f,0x2a,0xd3,0xa5,0x9d,0x99,0x99,0xa2,0xd3,0x37,0x37,0x41,0x36,0x25,0x1b,0x18,0x1e,0xe9,0x9f,0x96,0x90,0x94,0xa7 -,0x36,0x1f,0x21,0x23,0x1c,0x19,0x1a,0x1e,0x3f,0xa8,0x97,0x8e,0x8c,0x92,0xa6,0xdb,0x3f,0x2c,0x1d,0x18,0x18,0x1c,0x2b,0x6e,0xb4,0x9f,0x99,0x9b,0xab,0x59,0x2d,0x2a -,0x29,0x21,0x1a,0x17,0x1f,0xe3,0x9e,0x92,0x8e,0x91,0x9f,0xbc,0x4f,0x41,0x34,0x20,0x19,0x18,0x1a,0x27,0x5c,0xbb,0xab,0x9c,0x99,0xa3,0xcf,0x3a,0x36,0x37,0x2c,0x1e -,0x18,0x1b,0x3b,0xa4,0x93,0x8d,0x90,0x9f,0xf8,0x29,0x22,0x26,0x20,0x16,0x11,0x17,0x2d,0xba,0xa4,0x96,0x8d,0x8f,0x9a,0xaa,0x51,0x2a,0x1f,0x1b,0x16,0x12,0x1a,0x3c -,0xac,0x97,0x8e,0x8e,0x97,0xa8,0xcb,0x3b,0x2f,0x23,0x16,0x0f,0x11,0x1e,0x55,0xad,0x9e,0x98,0x9a,0xa4,0xb6,0xc9,0xc4,0x4f,0x22,0x16,0x13,0x1c,0x40,0xab,0x9a,0x96 -,0x98,0x9e,0xaa,0x51,0x2f,0x47,0x24,0x1d,0x26,0x26,0x1f,0x34,0x52,0xac,0x9e,0xbc,0x7b,0xbf,0xc2,0x55,0xa4,0xae,0xd3,0xb7,0xbd,0x1c,0x11,0x2e,0xa5,0x98,0xc8,0x5e -,0xa0,0xa3,0x4d,0x2e,0x32,0x1e,0x1e,0x5a,0x2f,0x1d,0x28,0x9f,0x8f,0x9f,0xaa,0xa7,0xd8,0x15,0x1d,0xbb,0x3e,0x3d,0x5c,0x38,0xee,0xa2,0x9c,0x9f,0x3e,0x1d,0x60,0xca -,0x22,0x21,0xa7,0xa9,0x57,0xce,0x6b,0x2a,0x24,0x3d,0xc7,0xa6,0x2e,0x29,0xbf,0xa7,0xa5,0x9f,0xa6,0x1b,0x2a,0xad,0x3c,0x20,0x2b,0xcd,0x9d,0xa2,0x63,0x3a,0x31,0x2b -,0x4b,0xa4,0xbd,0x2a,0x51,0xa8,0xae,0xb9,0xb2,0xb4,0x23,0x13,0x28,0xa4,0xbd,0x20,0xd8,0xbb,0xaf,0x9a,0x9d,0x27,0x16,0x20,0xbe,0xab,0x20,0x5c,0x9a,0x9f,0xfe,0xc1 -,0x3d,0x17,0xcd,0xa4,0x2d,0x1e,0x37,0xae,0xa4,0xc2,0xe8,0xa9,0xc0,0x1a,0x1f,0xbe,0x30,0x57,0x9a,0xa0,0xa4,0xbe,0x21,0x1c,0x20,0x53,0xaf,0xaf,0x2c,0x1a,0xb7,0x99 -,0x99,0x95,0xa1,0x1c,0x0e,0x1c,0xab,0x95,0xf4,0x36,0x33,0x38,0xd2,0xa9,0xb6,0x19,0x2b,0xbf,0xe2,0x2b,0x2c,0x9c,0x8f,0xa3,0x6d,0x37,0x1a,0x16,0x2f,0xaa,0x2d,0x72 -,0x91,0xa8,0x4c,0xca,0xba,0xaf,0x32,0x17,0x29,0x3d,0x21,0xeb,0x97,0xaf,0xbc,0x9b,0x4d,0x0d,0x12,0xd1,0x9a,0xa6,0x21,0x26,0xac,0x8e,0x96,0xb1,0x2b,0x0c,0x1d,0xb3 -,0xbf,0xbe,0xbf,0xb3,0xb6,0xbc,0xb5,0xab,0x43,0x17,0x23,0x63,0x41,0x43,0xa5,0xa7,0xa7,0x5f,0x3d,0xbd,0x20,0x1f,0xb7,0xa2,0xcc,0xc5,0xbc,0x4a,0x2c,0xf3,0xb9,0x32 -,0x26,0x1e,0x43,0x9f,0xa6,0xa1,0x9f,0x21,0x0f,0x3f,0x9e,0xa7,0x59,0xee,0xdc,0x24,0xe3,0xa4,0x99,0x33,0x15,0x3b,0x36,0x34,0x3f,0xa2,0x9f,0xba,0xba,0xcc,0x1f,0x1f -,0xda,0xad,0x3d,0x26,0x9d,0x9f,0x2d,0xd7,0xac,0xe3,0x3a,0x1f,0x3c,0x48,0x2a,0xce,0x94,0x9b,0x2d,0xb7,0xa7,0x1d,0x12,0x61,0xab,0xaf,0x21,0x19,0x62,0x94,0x8c,0xac -,0x2c,0x0d,0x19,0x9b,0xa1,0x37,0x2f,0xbb,0xa9,0xa0,0xaa,0xc5,0x1f,0x10,0x20,0x49,0x40,0x3d,0x9b,0x93,0xb3,0x4d,0xe9,0xa5,0x34,0x14,0x27,0x24,0x1b,0x43,0x8f,0x8e -,0xb7,0xb2,0xa9,0x1e,0x13,0x20,0x4c,0xac,0x3a,0x70,0xa9,0xb6,0x9d,0x9b,0x3d,0x09,0x16,0x96,0xad,0x1e,0x22,0xbd,0x97,0x91,0xa2,0x3a,0x12,0x16,0xbd,0xa6,0xc9,0x1f -,0xae,0x94,0xa9,0xa6,0xa3,0xc6,0x1b,0x0b,0x16,0x21,0xba,0x93,0x99,0xba,0x22,0xca,0x95,0x55,0x13,0x32,0xce,0xf2,0x1d,0xd3,0x94,0xa0,0xa3,0xb5,0x27,0x09,0x1f,0x98 -,0xa7,0x1f,0x1f,0xab,0x91,0x95,0xe5,0x3d,0x0f,0x0f,0xbc,0x9c,0x39,0x18,0xac,0x9d,0xb3,0xa3,0xb2,0x27,0x16,0x2a,0xa4,0x39,0x2b,0x9e,0x95,0xae,0x29,0xaf,0x92,0x2d -,0x0d,0x1d,0x65,0xb9,0x66,0xa1,0xaf,0x3d,0xac,0xac,0xe3,0x15,0x1b,0xae,0xb1,0x24,0x39,0x9b,0x8f,0xa1,0x1e,0x1c,0x10,0x3d,0x8f,0x9b,0x17,0x0c,0x9f,0x8c,0x9f,0xbe -,0xbd,0x28,0x10,0x19,0xb4,0xaf,0x2b,0xb2,0x9a,0xc4,0x1d,0xb1,0x94,0x1e,0x10,0x3a,0xc1,0xb5,0xaf,0xa6,0x77,0x33,0xbf,0xa5,0xc5,0x10,0x1b,0xac,0xc5,0x2b,0xa7,0x99 -,0xae,0x5b,0xd3,0xb9,0x16,0x1d,0xa6,0x9e,0x1e,0x19,0x95,0x8d,0x9d,0x36,0x25,0x1f,0x21,0x40,0x9f,0xee,0x1c,0xc6,0x9d,0xa3,0x55,0xa6,0xad,0x12,0x0e,0x32,0x9c,0x9e -,0xc8,0xc6,0x29,0x1e,0xaa,0x94,0xcf,0x07,0x12,0x95,0x9b,0x3d,0xa6,0x97,0xf8,0x29,0xe0,0xda,0x17,0x1c,0xa8,0x9d,0x27,0x19,0x9c,0x98,0x57,0x34,0x34,0x1c,0x1c,0xa8 -,0x9f,0x3b,0x29,0xa4,0x93,0xa3,0x3c,0xe4,0x3f,0x14,0x20,0xa6,0x99,0xe1,0x2e,0xae,0xbf,0x42,0xeb,0x9f,0x4f,0x08,0x1f,0x95,0x9d,0x41,0x58,0xb4,0x3f,0xc6,0xae,0x77 -,0x12,0x13,0xb1,0x93,0xbf,0x38,0x93,0xad,0x21,0x28,0xc2,0x36,0x2d,0xa8,0xaf,0x26,0x19,0xa8,0x8f,0xb8,0x14,0x2f,0xb9,0x1e,0x24,0xac,0x9e,0x3f,0x62,0x9b,0x5c,0x28 -,0x3d,0xca,0x29,0x15,0xc0,0x9c,0xa3,0x47,0xca,0xbe,0x43,0xab,0xa1,0xdb,0x10,0x1a,0xa7,0x91,0xad,0x4b,0xb5,0x29,0x21,0x2e,0xa5,0x4a,0x1d,0x3f,0xa8,0x9e,0x41,0xac -,0x9b,0x35,0x11,0x4a,0x9f,0x2d,0x32,0xac,0xad,0x26,0xbd,0xa0,0x5d,0x2c,0x23,0xc4,0x28,0x15,0xae,0x8f,0x9d,0x2a,0x37,0x3a,0x23,0xa4,0x99,0x55,0x0f,0x19,0xa9,0x93 -,0xb2,0x39,0xbf,0x29,0x2d,0x30,0xaf,0x38,0x24,0xb2,0xa1,0xaa,0x2d,0xd9,0xaa,0x58,0x1e,0x5f,0xc2,0x2c,0x72,0xaa,0xa7,0xf6,0xc1,0xaf,0xd9,0x2b,0x1e,0xb4,0x7b,0x1e -,0xaa,0x96,0xa3,0x27,0x77,0x49,0x24,0x3b,0xc2,0xaf,0x27,0x32,0xaa,0x95,0x2c,0x1e,0xa7,0xbf,0x2c,0x33,0xad,0x24,0x32,0xa1,0xa7,0xc7,0x2d,0xc1,0xc5,0x2b,0x23,0xc9 -,0xae,0x2e,0x37,0xa9,0xa9,0x3b,0xab,0xb6,0x1f,0x1b,0x1f,0xa2,0xaa,0x2b,0x2e,0xc7,0xa4,0xc9,0xad,0xb7,0x26,0x1d,0x54,0x9c,0xa7,0xc9,0xae,0x9b,0x2e,0x29,0xbb,0x44 -,0x26,0x2a,0xab,0x29,0x25,0xbc,0xa2,0xa3,0x44,0x44,0xca,0x22,0x21,0x97,0x9f,0x2c,0x2d,0xb3,0xc7,0x2f,0xa6,0xc8,0x22,0x21,0x2c,0xa5,0xa2,0x36,0x2c,0xb6,0xaa,0xbc -,0xac,0x4c,0x1c,0x26,0x4c,0xfe,0xc1,0xb3,0xaf,0xaa,0x2a,0x20,0x2f,0xc4,0xb7,0x42,0xba,0x2a,0x1f,0xbf,0x99,0x9f,0xe8,0x30,0x32,0x2c,0x35,0xa6,0xae,0x7e,0x34,0xb9 -,0xbc,0x2c,0x4b,0xbb,0xaf,0x41,0x36,0xb1,0xe5,0x34,0xb7,0xb8,0x58,0x33,0xc1,0xc8,0x2b,0x43,0xb7,0xc2,0xc5,0xba,0xb4,0xab,0x1f,0x3c,0xad,0x3a,0x2e,0x2e,0xc9,0x29 -,0x35,0xa6,0xa8,0xb0,0x45,0x1f,0x2d,0xbd,0xbd,0xcc,0xdb,0xb9,0xb8,0xb2,0x4e,0x24,0x60,0xf7,0x3a,0x48,0x2a,0xbe,0xaa,0x37,0x37,0xc3,0xb0,0xd2,0x5f,0x3e,0x24,0x37 -,0x9d,0x9d,0xdf,0xc7,0xbd,0xf3,0x28,0x3f,0xa5,0x54,0x37,0x34,0xba,0x4b,0x36,0xa7,0xb8,0xdf,0x3d,0xfa,0x3e,0x34,0xc8,0xcf,0x2f,0xd3,0xa8,0xaa,0xe5,0x39,0xc6,0x2c -,0x26,0x3c,0xdd,0xbe,0xc6,0x32,0x4a,0xc6,0xb6,0xaa,0xb4,0x3e,0x29,0xfa,0xad,0xa9,0xc9,0x3e,0x20,0x2e,0x38,0xba,0xc0,0x28,0x2c,0x3a,0x9f,0xca,0x4e,0xa4,0xc2,0x46 -,0x68,0x2e,0x55,0xbb,0x40,0x43,0x40,0xc9,0xa7,0xa4,0x5b,0x2a,0xb3,0xa0,0x46,0x2d,0x37,0x56,0x3e,0x36,0x66,0xbb,0xac,0xaf,0x41,0x1b,0x2d,0xaf,0xa1,0x4c,0x3d,0xac -,0xb1,0xda,0x32,0xbe,0x3c,0x27,0xb7,0xd3,0x39,0x45,0x5f,0xdb,0x67,0xc6,0xd7,0xf4,0x36,0x3f,0x65,0x53,0xba,0xbb,0xb2,0xb5,0x56,0x32,0xc6,0xbd,0xbc,0x34,0x1d,0x27 -,0x33,0xcb,0xa5,0xaa,0x3c,0x3a,0x5c,0xb1,0xa5,0xa8,0xf9,0x1f,0x2a,0xac,0xd4,0x66,0xba,0xb3,0x3e,0x25,0x4c,0x6e,0xb5,0x37,0x64,0xb1,0xba,0xc7,0x4f,0x53,0x39,0xcf -,0xcd,0xf6,0x58,0xa9,0xa9,0x41,0x1d,0x20,0xa1,0x9b,0x69,0x1c,0x22,0x44,0xba,0xc2,0x40,0x40,0x49,0xa1,0xa9,0x5a,0xbc,0xe1,0x62,0x34,0x37,0xd3,0xcd,0x43,0x48,0x46 -,0x3d,0xb5,0xbf,0x2d,0x3f,0x59,0x3c,0xb5,0xb2,0xb3,0xc1,0x59,0x2a,0x29,0x5b,0xb3,0xbc,0x3e,0xf0,0xe9,0xb4,0xaa,0x9f,0xb0,0x2d,0x1c,0x5b,0xb0,0x46,0x66,0x4a,0xf8 -,0x2d,0x58,0xd4,0xbb,0x56,0x52,0xba,0xba,0xa4,0x3d,0x25,0x3a,0xdc,0xcc,0xb7,0xb5,0xd8,0x32,0x2e,0x21,0x29,0xa5,0x99,0xbb,0x22,0x1d,0x3d,0x99,0x9b,0xb4,0x2f,0x22 -,0x3c,0xae,0xca,0x52,0xc7,0x3f,0x29,0x19,0xd7,0xaa,0x5b,0x2a,0x40,0xb1,0xa9,0xa1,0x39,0x5f,0xbc,0xbe,0xa2,0xbd,0x20,0x28,0xbf,0x78,0x49,0x47,0x58,0xde,0xf3,0xb7 -,0xae,0x5e,0x39,0xce,0xc0,0x36,0x26,0x4a,0xb5,0xa6,0x9f,0xae,0x29,0x1b,0x28,0xba,0xb1,0xbd,0xb8,0x34,0x49,0xae,0xa6,0x41,0x26,0x1e,0x36,0xa3,0xc1,0x4b,0x2c,0xda -,0xcf,0xaa,0x9d,0xaf,0x29,0x1b,0x31,0x32,0xad,0xb0,0x6d,0x3b,0x4a,0xae,0xa1,0x3e,0x17,0xf8,0xa7,0xb8,0x22,0x1b,0xe2,0xa1,0xa1,0xad,0x45,0x3f,0xad,0xc3,0x34,0x40 -,0x2b,0x36,0xa9,0xb8,0xba,0xcf,0x3e,0x23,0x56,0xa7,0xbd,0x3f,0x23,0x3d,0xb9,0x92,0x99,0x33,0x14,0x1b,0xbf,0xa7,0xa1,0x43,0x3a,0x40,0x3d,0x3c,0xe8,0x48,0x2c,0xb6 -,0xae,0x46,0x29,0x33,0xb7,0x92,0x99,0x43,0x38,0x2f,0x29,0xcf,0xbb,0x3b,0x1c,0x21,0xae,0xad,0xc1,0x2d,0x1d,0x23,0x9f,0x9e,0x5f,0x36,0x2b,0xa2,0x99,0x98,0xbe,0x2d -,0x1e,0x1f,0x3c,0x5e,0xbc,0x2d,0x35,0xba,0x99,0x90,0xa9,0x1b,0x1a,0x65,0xcb,0xae,0x2a,0x18,0xc6,0x93,0xa0,0x26,0x27,0x2a,0xb9,0xa1,0x6a,0x28,0x29,0xb4,0x9e,0xb5 -,0x2d,0x22,0x5e,0xaa,0x9e,0xbb,0x2a,0x17,0x10,0xbd,0x8e,0x97,0x3f,0x27,0x19,0x5d,0x9b,0xa9,0xbf,0x1e,0x19,0x59,0x9c,0xc3,0x26,0x1c,0x39,0xa5,0xa2,0xa5,0x29,0x1e -,0xc2,0x9c,0xab,0xb5,0xd5,0x23,0x56,0xa4,0x5d,0x47,0x3c,0x4a,0xa8,0xcb,0x1a,0x14,0xd4,0x99,0x9c,0xd5,0x2e,0x21,0xb9,0x93,0x9b,0x3b,0x0f,0x17,0xbc,0x99,0xaf,0x5c -,0xc1,0x2e,0x19,0xbd,0x9a,0xc0,0x2c,0x1c,0x27,0xae,0x96,0xad,0x17,0x17,0xb4,0x95,0x9b,0xee,0x1f,0x1c,0x70,0xac,0x68,0xbc,0x38,0x2f,0xb5,0x2b,0x21,0xbe,0xa9,0xae -,0xb6,0x32,0x37,0xab,0xa8,0xbb,0x3f,0x38,0x20,0x3d,0x9c,0xa5,0x2e,0x20,0x5a,0x43,0xbc,0xa4,0x3b,0x1f,0x2c,0xc5,0x98,0x96,0xab,0xc8,0x28,0x1e,0x26,0xb7,0xab,0x21 -,0x1c,0x38,0xaf,0x95,0x98,0xb6,0x1b,0x18,0x36,0xbc,0xb2,0x45,0x28,0x5b,0xad,0x3e,0xb5,0xaa,0xc0,0x4e,0x1f,0x19,0x5c,0x92,0x9a,0x20,0x1b,0xc4,0x94,0x96,0x48,0x17 -,0x0d,0x20,0x30,0xce,0x9c,0xa9,0x4f,0xa5,0xbf,0x2a,0xa8,0xa1,0xa4,0x2b,0x18,0x36,0x96,0xa2,0x2d,0x2e,0x28,0x2e,0x3b,0xb2,0x4a,0x21,0x37,0xa3,0x9b,0x9c,0xa1,0x27 -,0x1a,0x3b,0x42,0xba,0xae,0xb4,0x2f,0x1b,0x2d,0xaf,0x94,0xb9,0x1e,0x18,0x25,0xad,0x92,0x96,0x45,0x14,0x1c,0xa8,0xa3,0xae,0x2e,0x1c,0x3c,0xc6,0x2d,0xb4,0x98,0xaf -,0x37,0x33,0x22,0x39,0xae,0xb8,0x2c,0x19,0x36,0x96,0x8f,0xd7,0x24,0x1e,0xc8,0xa9,0xda,0xab,0x3d,0x37,0xb5,0x40,0x24,0xaf,0xa4,0x32,0x21,0x1f,0xec,0x98,0x9c,0xdf -,0x25,0x2b,0xac,0x9d,0x68,0x1d,0x1b,0x7d,0x9e,0xb0,0xdf,0x3a,0x1f,0x22,0xb7,0xab,0xa0,0xa3,0x5e,0x33,0x1f,0x2e,0xbb,0x9c,0xbb,0x12,0x10,0x3e,0x99,0x93,0x9c,0xdb -,0x1b,0x2b,0xb5,0xa3,0xad,0x27,0x20,0x37,0xcd,0x31,0xbb,0xa5,0x68,0x2e,0x33,0x2b,0x68,0x9e,0xba,0x4d,0x71,0x9e,0x9b,0xb9,0x35,0x2d,0x1d,0x1f,0x50,0x33,0x6e,0x5c -,0xb0,0x9e,0x34,0x1f,0xaf,0x9e,0x6b,0x25,0x2d,0xb9,0x90,0x98,0x35,0x1f,0x25,0xd3,0x3a,0x2e,0x20,0x18,0x61,0x8e,0x90,0xbc,0x35,0x1f,0x28,0x59,0xad,0xa7,0x58,0x1e -,0x27,0xfd,0xad,0x9c,0xaa,0x29,0x10,0x27,0xa5,0x9f,0x9e,0x9f,0xc0,0x1d,0x2c,0x4f,0x2f,0x59,0xda,0x3d,0x25,0x2b,0xbd,0x9b,0x8e,0x99,0x37,0x19,0x14,0x55,0xa0,0xaf -,0x2d,0x1e,0x62,0xa4,0xa0,0xd2,0x2c,0x21,0x4f,0xdf,0x37,0x61,0x46,0x4d,0x9d,0x91,0xb9,0x2e,0x1d,0x17,0x1d,0xb8,0x98,0x9c,0xdb,0x1d,0x55,0x9f,0x98,0x48,0x12,0x16 -,0x1e,0xb7,0x9b,0xac,0xb5,0xa2,0xac,0x2e,0x29,0x3a,0x33,0xb2,0xa2,0xfa,0x1d,0x25,0xa4,0x97,0xa4,0x27,0x16,0x18,0x35,0x9f,0x97,0xc0,0x1b,0x25,0xad,0x9c,0xa4,0xcb -,0x23,0x2b,0xc9,0xb7,0x47,0x4c,0x55,0x22,0xb8,0x99,0xae,0x1a,0x14,0x35,0xb4,0x9a,0x9e,0xe0,0x27,0x3c,0x9c,0xa5,0x3f,0x1c,0x1a,0x4c,0xbe,0xab,0xac,0x51,0x65,0xaf -,0xd5,0x20,0x28,0x4a,0xb2,0xa7,0xc1,0x25,0x22,0xb7,0x9c,0xa9,0x3f,0x22,0x16,0x45,0x95,0x94,0xb6,0x28,0x19,0x1f,0xa2,0x9a,0xa8,0x25,0x19,0x44,0xb7,0xaf,0x36,0x2d -,0x39,0xbe,0x97,0x9f,0x2a,0x16,0x33,0xa0,0xa2,0xbd,0x26,0x1c,0x41,0x9d,0x94,0xae,0x1d,0x0c,0x1d,0xa4,0xa0,0xcc,0x55,0xb6,0xcb,0x47,0x2b,0x2d,0xb6,0x9b,0x9c,0xc1 -,0x20,0x15,0x1c,0xad,0x8d,0x9a,0x37,0x0f,0x16,0xa6,0x94,0x9c,0x2c,0x17,0x11,0x2e,0x93,0x93,0xa7,0x31,0x39,0xf6,0x33,0x25,0x1c,0x50,0x9b,0x97,0xa3,0x46,0x15,0x12 -,0xaf,0x99,0xae,0x2d,0x1c,0x28,0xbd,0x97,0x9b,0xca,0x41,0x2d,0x2a,0x2d,0x2d,0xd5,0xa8,0x9e,0xa9,0x3b,0x22,0x17,0x54,0x92,0x9b,0x2d,0x11,0x1e,0xb2,0x93,0x97,0x44 -,0x25,0x1a,0x3e,0x99,0x9a,0x2a,0x0e,0x1c,0x61,0x99,0x92,0xa5,0x22,0x1b,0xa9,0xc3,0x1c,0x18,0x2b,0x9b,0x98,0x9f,0xb5,0x36,0x1b,0x27,0x9d,0xae,0x19,0x18,0xb1,0x90 -,0x96,0xa5,0x40,0x12,0x16,0x3c,0xac,0xc6,0x1b,0x3c,0x9a,0x9a,0x3e,0x27,0x44,0x6b,0x9f,0x9f,0x35,0x0d,0x13,0xa7,0x8d,0x8a,0xae,0x15,0x0c,0x17,0xa1,0x98,0xbd,0x17 -,0x1d,0x9e,0xa2,0xb3,0xc5,0xb9,0xd8,0x3b,0xb4,0x3c,0x15,0x14,0xac,0x88,0x8f,0x32,0x1e,0x1e,0x1e,0x46,0xa9,0x41,0x1a,0xc3,0x8f,0x96,0x31,0x2e,0x35,0x27,0x3c,0x3b -,0xf9,0x25,0x36,0x94,0x8b,0x9d,0x14,0x11,0x1f,0x37,0x99,0x9a,0x2f,0x0f,0x24,0x96,0x93,0xa5,0x2c,0x29,0x3a,0x42,0xaf,0xb6,0x25,0x14,0xc2,0x8d,0x99,0x30,0x1e,0x22 -,0x2d,0xb2,0xa6,0x28,0x18,0x3f,0x9a,0x92,0x65,0x31,0xc8,0x53,0x2a,0x32,0xaa,0x1d,0x12,0xa6,0x88,0x95,0x1c,0x28,0x47,0x2e,0x2b,0x33,0xda,0x2c,0xd0,0x8f,0x96,0x2b -,0x13,0x2f,0xb0,0xbd,0xa8,0xbe,0x14,0x0e,0xac,0x8a,0x8d,0xb1,0x1d,0x19,0x26,0x3e,0xcd,0x48,0x24,0x31,0xa1,0x99,0x49,0x45,0xbc,0xc3,0x28,0x25,0xb7,0x25,0x20,0xab -,0x89,0x8f,0x1e,0x1b,0x4c,0x22,0x11,0x3f,0x9c,0x4e,0x2e,0x94,0x8f,0x3a,0x1a,0xc1,0xbb,0x20,0x2c,0x53,0x1e,0x1e,0x94,0x84,0x91,0x1a,0x0c,0x1a,0x25,0x2e,0xaa,0xa6 -,0x2c,0x2a,0x9d,0x8e,0x9e,0x3d,0x1b,0x26,0x3a,0x2f,0x35,0x22,0x2e,0xb2,0x8b,0x8b,0x2c,0x1d,0x3a,0x22,0x13,0x37,0xa5,0xd4,0xea,0x9e,0x91,0xa9,0x21,0x2c,0x2d,0x12 -,0x29,0x9f,0xca,0x1d,0xaf,0x86,0x8e,0x1c,0x17,0x2d,0x15,0x18,0x47,0xac,0xbd,0x67,0x96,0x8a,0xab,0x18,0x18,0x2d,0x2d,0x2d,0x3a,0x2c,0x57,0xae,0x8d,0x8f,0xe7,0x33 -,0x17,0x0e,0x21,0xb0,0xa4,0xb2,0x4b,0xad,0x96,0xa6,0x29,0x2d,0x3a,0x18,0x1b,0xce,0xc5,0x46,0xa1,0x8b,0x93,0x2e,0x1c,0x1c,0x13,0x13,0x3c,0x92,0x99,0x35,0x9b,0x88 -,0x60,0x0a,0x15,0x4a,0x2e,0x2f,0x3f,0x2c,0xcd,0x96,0x85,0x8f,0x23,0x1b,0x11,0x0b,0x16,0xbe,0x96,0x9f,0x47,0xa5,0x95,0xb5,0xcd,0x39,0x18,0x1a,0x3f,0x3e,0x41,0xdf -,0xa5,0x8d,0x92,0x7c,0x1d,0x0f,0x12,0x24,0x2d,0xa0,0xab,0x64,0x8e,0x8b,0x47,0x1d,0x2b,0x38,0x20,0x12,0x27,0xc6,0xd9,0xb4,0x89,0x89,0x3b,0x16,0x19,0x1b,0x14,0x5a -,0x99,0xbc,0x34,0x9d,0x90,0x9f,0xc0,0x2e,0x1d,0x10,0x13,0x3b,0xad,0xba,0xaa,0x94,0x99,0xb4,0xc3,0x19,0x0d,0x1e,0xa0,0x9a,0x2e,0x25,0x99,0x8f,0x4f,0x1f,0x1c,0x3b -,0x42,0x27,0x27,0x49,0xb2,0x9d,0x88,0x92,0x3f,0x1e,0x17,0x1a,0x1a,0x2d,0xb3,0x74,0x36,0xa0,0x8e,0x9b,0x34,0x19,0x28,0x22,0x21,0x9f,0xa0,0x2a,0x47,0x8d,0x8e,0xbf -,0x1a,0x0e,0x0d,0x1a,0xc5,0xad,0xda,0xdb,0x96,0x92,0xa7,0x69,0x43,0x3c,0x1c,0x1f,0x4b,0x34,0xd0,0x9a,0x8d,0xa4,0x22,0x26,0x1d,0x22,0x1f,0x38,0x40,0x58,0xb6,0x95 -,0x8e,0xb3,0x2a,0x2f,0xd0,0x20,0x19,0x2c,0x4e,0x2e,0xb0,0x8e,0x8b,0x97,0x20,0x0c,0x11,0x21,0x2e,0xc2,0x3a,0x44,0x93,0x91,0xa5,0x3d,0x33,0xb9,0x37,0x23,0x1e,0x29 -,0xcf,0x9a,0x8d,0xa8,0x2c,0x34,0xe9,0x31,0x10,0x18,0x3c,0x62,0xbf,0x9c,0x94,0xae,0x4d,0xd0,0xd3,0x2c,0x2a,0x25,0x22,0x4f,0xa1,0x93,0x97,0xcc,0x1b,0x1d,0x2b,0x4e -,0x35,0x3a,0x2a,0x28,0x9a,0x90,0xa1,0x6a,0x2d,0x37,0x42,0x2b,0x1c,0x50,0xaf,0x9f,0x8d,0x98,0xce,0x1b,0x21,0x28,0x15,0x13,0x1e,0xbc,0x99,0x9b,0x3e,0x14,0x9b,0x89 -,0xa2,0x2d,0x33,0x94,0x3f,0x0e,0x19,0xab,0x87,0x8a,0x9d,0x0f,0x00,0x04,0x02,0xad,0x89,0x89,0xad,0x10,0x8a,0x86,0x3e,0x1e,0x9f,0xa1,0x04,0x26,0x90,0xaf,0xd8,0x15 -,0x8e,0x91,0x2c,0x15,0x03,0x1e,0xa9,0x9c,0x0d,0x0a,0x9a,0x8b,0x82,0x8d,0xc1,0x0d,0x00,0xe0,0x8d,0x9c,0xb2,0xac,0x98,0xb6,0xa4,0x21,0x0b,0x1a,0x08,0x3a,0xac,0x98 -,0xaf,0x08,0xa2,0x81,0x8d,0x0f,0x0e,0x8f,0x91,0xf9,0x0e,0x25,0x95,0x39,0x96,0x8d,0xa2,0x1d,0x02,0x00,0x09,0x8b,0x87,0x48,0xd1,0x92,0x82,0x39,0x0a,0x57,0x9f,0x97 -,0x96,0x4a,0x07,0x05,0xa8,0x83,0x89,0x3d,0x0d,0x06,0x06,0xb0,0xa5,0xac,0x8d,0xa4,0x25,0x4b,0x8c,0x91,0x26,0x0e,0x21,0xad,0x1e,0x29,0x9c,0x90,0x86,0x97,0x0f,0x02 -,0x05,0x13,0xb8,0x8d,0x8f,0xd7,0x06,0x1a,0x81,0x85,0xa7,0x39,0xa7,0x32,0x09,0x0d,0x24,0xa1,0x90,0x8f,0x8f,0x1d,0x03,0x02,0x0e,0x92,0x89,0x95,0x1d,0x1b,0x8d,0x83 -,0x9d,0x1d,0xbd,0x14,0x07,0x3c,0xb1,0xba,0xc5,0xfd,0xae,0xa7,0x9d,0x27,0x0f,0x14,0x37,0xa5,0x29,0x31,0xe6,0x90,0x81,0x88,0x29,0x01,0x05,0xad,0x8f,0xfd,0x1a,0x6f -,0x95,0x96,0x97,0x32,0x1e,0x22,0x1f,0x15,0x20,0x98,0xdf,0x14,0xb8,0x89,0x89,0xb8,0x16,0x20,0xba,0xb9,0x19,0x1c,0x21,0xbb,0x89,0x87,0x9c,0x0d,0x03,0x01,0x16,0x89 -,0x8a,0xb5,0xc4,0x9e,0xa1,0xbf,0xaa,0xcb,0xde,0xae,0x42,0x19,0x07,0x0b,0x9f,0x86,0x87,0xa0,0x0c,0x01,0x0f,0x95,0x90,0xab,0xb8,0xc1,0x56,0xaf,0x8c,0x99,0x1e,0x10 -,0x1d,0x1e,0x26,0xb5,0xc7,0x9a,0x94,0xa8,0x34,0x0d,0x09,0x1d,0x93,0x83,0x98,0x0e,0x00,0x23,0x86,0x80,0x9b,0x0c,0x15,0x1a,0x1b,0x48,0xb0,0x99,0x89,0x99,0x21,0x17 -,0x0e,0x0d,0x1a,0x4f,0x96,0x8f,0x31,0x2b,0x9c,0x8a,0x99,0xc9,0x1b,0x07,0x11,0xac,0xa0,0x28,0x26,0xae,0xa0,0x95,0x91,0x20,0x11,0x1e,0x3b,0x32,0x26,0x35,0xb8,0x93 -,0x8c,0x8f,0x1e,0x03,0x0c,0xa6,0x8a,0x8c,0x38,0x14,0xdd,0x97,0x8e,0xa3,0x26,0x19,0x16,0x13,0xb9,0x95,0x3f,0x1e,0x71,0xb4,0xd6,0x2a,0x25,0x2f,0xc6,0xde,0x2b,0x2b -,0x31,0x9e,0x8f,0x8e,0xa3,0x17,0x07,0x02,0x26,0x86,0x8c,0x30,0x2c,0x9d,0x97,0x9c,0xb7,0x5d,0xa9,0xa1,0x3a,0x0e,0x06,0x0f,0x9e,0x8b,0x92,0xaf,0x1b,0x0d,0x1a,0x6b -,0x9d,0x9c,0xda,0x2c,0x3e,0x98,0x8c,0x9d,0x1d,0x10,0x1b,0x33,0x41,0x23,0x20,0x9f,0x8b,0x9d,0x2b,0x1d,0x2a,0x2c,0xc5,0xa5,0xf6,0x19,0x12,0x47,0x92,0x8c,0xa2,0x2b -,0x27,0x28,0x37,0xe0,0x2d,0x3a,0x97,0x93,0xac,0x4a,0x1b,0x13,0x2a,0xaa,0xa1,0x3f,0x16,0x23,0x9c,0x93,0xbd,0x2b,0x2c,0x2e,0xb3,0x9a,0xa1,0x3f,0x1b,0x1a,0x3e,0x9b -,0x9f,0x3c,0x1c,0x1a,0x2d,0xac,0x9f,0xbd,0x57,0x9d,0x92,0xaf,0x19,0x10,0x26,0xa2,0x99,0xb9,0x28,0x2a,0xad,0x9f,0x54,0x3b,0x5c,0x3a,0x26,0x16,0x26,0xad,0xbf,0x33 -,0xbd,0xa4,0xbb,0x3c,0x37,0xa9,0x90,0x9b,0x29,0x11,0x15,0xb5,0x8d,0x8f,0xbb,0x1d,0x13,0x0f,0x21,0xb1,0x9d,0xa6,0xca,0x48,0x2b,0x2e,0xf4,0xb3,0x9f,0x99,0xa9,0x34 -,0x18,0x15,0x44,0x9a,0x96,0xb4,0x25,0x1f,0x32,0x35,0x38,0xba,0xaa,0xb2,0xc5,0x56,0x36,0xd5,0xb4,0xc1,0x3e,0x1f,0x1f,0x35,0xcc,0xa6,0xa1,0xbc,0xf0,0x6e,0x45,0x6f -,0xad,0xa2,0xbf,0x1f,0x1a,0x38,0xa9,0xab,0x43,0xea,0x9f,0xab,0x28,0x1c,0x2b,0xb0,0x9c,0xab,0x52,0x5f,0x3f,0x23,0x1d,0x23,0x43,0xab,0xac,0xfa,0x59,0xce,0xb5,0xbd -,0x5a,0xd4,0xa7,0xac,0x3a,0x21,0x26,0xe3,0xba,0xd2,0xd6,0xae,0xa1,0xbb,0x1d,0x10,0x1f,0xc0,0xa8,0x9d,0x9d,0xb3,0x35,0x24,0x5e,0xa1,0x9e,0xbd,0x21,0x19,0x2d,0xba -,0xb5,0xb7,0xdb,0x57,0xc8,0x5f,0x2c,0x28,0x39,0xab,0xa1,0x58,0x1d,0x28,0xaf,0x99,0x99,0xdd,0x23,0x1f,0x28,0xdd,0xa3,0x9a,0x9f,0x3c,0x18,0x16,0x23,0x4c,0xd9,0xbb -,0xa0,0xa0,0x4c,0x1d,0x1d,0xb5,0x8b,0x8a,0xaa,0x12,0x0b,0x1a,0xbc,0x9f,0xa4,0xd2,0x3f,0x39,0x2a,0x27,0x5c,0xb2,0xcf,0x5f,0xdc,0xd2,0x7b,0x41,0xdb,0xa2,0x9b,0xb6 -,0x20,0x19,0x39,0x9c,0x9d,0x58,0x23,0x28,0x4f,0xcd,0xb7,0xb6,0x41,0x2c,0x29,0x2e,0x3f,0xb7,0xa3,0xa5,0xa6,0xcb,0x29,0x25,0x2b,0x4c,0xa6,0x9d,0xaf,0x36,0x26,0x37 -,0xb7,0xbe,0x2d,0x1d,0x27,0xd3,0xb6,0xc0,0x42,0x3d,0xb1,0x9b,0x9a,0xa1,0xb6,0x2e,0x1e,0x22,0x38,0xbe,0xad,0xbc,0x56,0x27,0x26,0x3d,0x3a,0x3b,0xb6,0x9e,0xa7,0x39 -,0x22,0x48,0xa4,0x9d,0xa8,0x34,0x22,0x40,0xe7,0x3f,0x5e,0xba,0xc3,0x7e,0x2e,0x26,0x3b,0x4f,0x4c,0x39,0x45,0xcf,0xd5,0xc7,0xa9,0x98,0x9a,0xba,0x27,0x1b,0x2f,0xbb -,0xae,0xaa,0xca,0x2f,0x2e,0x28,0x29,0xd4,0xb4,0xc3,0x4d,0x2c,0x24,0x37,0xb5,0x9f,0x9a,0x9b,0xa6,0x3b,0x1f,0x23,0x40,0xb9,0xaf,0xcf,0x36,0x3d,0x2f,0x2d,0x4f,0x4b -,0xe5,0xdb,0x3f,0x40,0x4d,0xc5,0xa9,0x9e,0xa8,0x48,0x28,0x3f,0xd1,0x38,0x33,0x75,0xdc,0x54,0xed,0xea,0xad,0xa5,0xec,0x29,0x1f,0x25,0x3e,0xd5,0xdc,0xae,0x9d,0xa4 -,0xb0,0xcc,0x4a,0xf1,0xb6,0xb0,0x61,0x31,0x2f,0x2d,0x2c,0x44,0xbb,0xcd,0x76,0x2f,0x1f,0x3a,0xb9,0xbd,0xb1,0xa1,0x9f,0xa9,0x6c,0x2f,0x35,0x4c,0x4b,0x6a,0x43,0x28 -,0x29,0x31,0xcf,0xfb,0x41,0x3f,0x2f,0x3d,0xbb,0xaf,0xbe,0xac,0xa9,0xa8,0xa2,0xaf,0xca,0x51,0x3e,0x36,0x2e,0x2c,0x2b,0x4b,0xbc,0xb1,0xb8,0x3e,0x25,0x24,0x59,0xb5 -,0xce,0x7e,0xbe,0xb0,0xa7,0xa2,0xae,0xc6,0x4c,0x2b,0x28,0x48,0xdd,0x4c,0x2f,0x2b,0x4c,0xbf,0xbf,0x56,0x3d,0x3a,0x3c,0x39,0x2f,0xba,0x9a,0x92,0x9c,0x34,0x21,0x32 -,0xdd,0xdb,0x48,0x2f,0x35,0x49,0x32,0x40,0xbb,0xb6,0xce,0x3c,0x44,0x46,0x38,0x3b,0xcc,0xa7,0x9e,0xa1,0xb5,0xec,0x3c,0x4a,0x6a,0x37,0x28,0x2c,0x37,0x39,0xcc,0xb9 -,0xbc,0xcf,0x6c,0x34,0x28,0x35,0xe7,0xaa,0x9f,0x9e,0xb1,0x32,0x36,0xb5,0xa7,0xba,0x3c,0x25,0x1f,0x27,0x43,0xb9,0xb7,0x46,0x2d,0x32,0x35,0x31,0x35,0xda,0x9c,0x95 -,0x9e,0xb8,0xed,0xbf,0xcb,0xbf,0xc4,0x3b,0x20,0x1d,0x27,0x39,0xae,0xac,0xe7,0x2e,0x28,0x57,0xb3,0xbf,0x3e,0x51,0xb4,0xa4,0xa5,0xc6,0xcb,0xa6,0xad,0x2b,0x1a,0x1c -,0x32,0xd8,0xbb,0xb8,0xe7,0x38,0x30,0x36,0x44,0xd6,0xc2,0x4e,0x45,0xc4,0xa9,0xa6,0xad,0xad,0xb5,0xc9,0x38,0x28,0x21,0x27,0x67,0xb7,0xb7,0x45,0x34,0x3e,0xde,0xad -,0xac,0x33,0x1c,0x2b,0xb4,0x9d,0x9a,0xa8,0xd6,0x55,0x71,0xd4,0xf6,0x39,0x29,0x2b,0x2d,0x2f,0x36,0x59,0xb0,0xa6,0xb0,0x31,0x20,0x27,0xca,0x9f,0x96,0x9e,0xe1,0x3f -,0xdb,0xc0,0x77,0x43,0x2d,0x26,0x25,0x39,0xbd,0xce,0x45,0x37,0x41,0xb7,0xb4,0x32,0x1e,0x61,0x9c,0x98,0xac,0x3a,0x5e,0xab,0xa0,0xad,0x45,0x1b,0x16,0x22,0x34,0x7b -,0xc3,0xd8,0x3f,0x3e,0xe2,0xc2,0xdb,0x47,0xfd,0xac,0x9f,0xa8,0xce,0xd7,0xaf,0xab,0xbf,0x32,0x1c,0x1b,0x26,0x3f,0xbf,0xcb,0x5b,0x4d,0xbe,0xad,0xb4,0x41,0x24,0x37 -,0xb3,0x9f,0xaa,0x68,0x4f,0xba,0xa1,0xa5,0x41,0x1a,0x1a,0x34,0xbc,0xbc,0x35,0x24,0x2f,0xb9,0x9d,0x9e,0xc5,0x23,0x1e,0x34,0xaf,0xa2,0xa5,0xaf,0xca,0xc9,0xbc,0xcf -,0x2f,0x26,0x24,0x35,0xe9,0x3b,0x2c,0x3c,0xac,0x9e,0xaf,0x29,0x1e,0x41,0xa6,0x9e,0xaf,0x38,0x37,0xb1,0x9b,0x9f,0x50,0x1b,0x15,0x1e,0x48,0xad,0xbe,0x2e,0x24,0x49 -,0x9e,0x9a,0xc6,0x24,0x2e,0xb6,0xa9,0xbd,0x4c,0x58,0xbb,0xa4,0x9f,0xb5,0x29,0x1c,0x21,0x36,0x4c,0x3d,0x2f,0x28,0x32,0xba,0xa4,0xaa,0xbd,0xb8,0xa9,0xa8,0xe8,0x2c -,0x3a,0xb8,0xab,0xcd,0x2b,0x21,0x28,0x30,0xdf,0xac,0xa9,0xb3,0xd8,0x35,0x23,0x24,0x3d,0xbb,0xa2,0x9b,0xa2,0x4b,0x1f,0x2d,0xab,0x9b,0xa5,0x48,0x28,0x26,0x2e,0x33 -,0x28,0x21,0x27,0x5f,0xab,0xa1,0xa5,0xba,0x56,0x54,0xdc,0xc3,0xb1,0xac,0xba,0x56,0x39,0x2c,0x26,0x29,0xda,0x9e,0x98,0xa8,0x2e,0x18,0x16,0x1e,0x42,0xb8,0xb6,0xd3 -,0x52,0xc0,0xa3,0x9c,0x9f,0xb0,0x4f,0x2a,0x2b,0xe7,0xaf,0xc9,0x2a,0x1f,0x23,0x2f,0x7e,0xac,0xa0,0xa7,0xc8,0x34,0x27,0x28,0x39,0xb5,0xa2,0xa2,0xae,0x47,0x26,0x26 -,0xef,0xa8,0xa7,0xbd,0x32,0x29,0x2d,0x32,0x33,0x31,0x3d,0xc7,0xa9,0x9e,0x9e,0xa5,0xc7,0x33,0x24,0x24,0x3d,0xbf,0xb5,0xea,0x2e,0x26,0x26,0x2d,0xfa,0xa0,0x95,0x97 -,0xac,0x29,0x19,0x1c,0x2c,0xe0,0xae,0xa7,0xa8,0xb3,0xef,0x46,0x4b,0x64,0xcd,0xe5,0x3d,0x2e,0x32,0x42,0x31,0x2c,0x4c,0xbb,0xb8,0xb8,0xa9,0xa3,0xad,0x44,0x25,0x2b -,0x5a,0xbc,0xb9,0xb4,0xae,0xbf,0x37,0x27,0x2a,0xee,0xb0,0xb7,0x4c,0x31,0x30,0x2f,0x35,0x41,0xbb,0xa7,0xae,0xff,0x64,0xad,0xa4,0xb0,0x3f,0x28,0x2f,0xda,0xbd,0xc3 -,0xcc,0xd6,0x52,0x2b,0x1e,0x28,0xd1,0xaf,0xac,0xad,0xc4,0x44,0x2e,0x28,0x2f,0xba,0xa2,0xaa,0xc4,0xe5,0xce,0xc1,0xc9,0x64,0x39,0x33,0x33,0x2c,0x36,0xe0,0xbb,0xbc -,0xde,0xd9,0xae,0xa0,0xaa,0xe2,0x30,0x22,0x1f,0x29,0x41,0xde,0xaf,0xa4,0xc3,0x29,0x23,0x35,0xbb,0xa4,0xa2,0xae,0xbc,0x4f,0x22,0x1e,0x3e,0xa5,0x9b,0xa5,0xb4,0xb7 -,0xb9,0x3b,0x23,0x29,0x36,0x66,0x5f,0x40,0x3b,0x3c,0x4b,0x33,0x2d,0x40,0xc0,0xad,0xb6,0x5f,0x33,0x37,0x49,0x57,0xbc,0xa9,0xa4,0xad,0x56,0x40,0xce,0xaa,0xa7,0xba -,0x53,0x2a,0x26,0x26,0x2e,0xd3,0xa3,0x9b,0xb5,0x33,0x2d,0x3a,0x65,0x7e,0x5f,0x37,0x28,0x1d,0x16,0x1d,0x55,0xa1,0x9a,0xa5,0xbc,0x7c,0xd1,0xcc,0xd9,0xc7,0xcf,0xb6 -,0xb6,0xfb,0x3d,0xd6,0xa9,0xbd,0x69,0xc5,0xae,0xae,0xd1,0x3a,0x2c,0x36,0x33,0x28,0x2e,0x5e,0xb7,0xb9,0x67,0x4e,0xd1,0xbc,0x69,0x30,0x29,0x25,0x37,0x5a,0x73,0xb5 -,0xa0,0xa2,0x5d,0x2c,0x3b,0xbc,0xa6,0xa8,0xb0,0xc4,0x45,0x29,0x1d,0x28,0xb8,0x9d,0x9f,0xc8,0x3d,0x2f,0x33,0x37,0x30,0x33,0x3c,0x52,0x2e,0x28,0x3b,0xb7,0xa3,0xa9 -,0xb3,0xb9,0xbb,0xbc,0xc0,0x6f,0x3c,0x4b,0xea,0x38,0x35,0xbf,0xa3,0xa7,0x7c,0x2f,0x31,0x47,0x3f,0x2e,0x2b,0x3b,0xe5,0x48,0x37,0x5e,0xb0,0xac,0xb2,0xbb,0xbb,0xb2 -,0xb4,0xe2,0x3c,0x36,0x39,0x3a,0x35,0x58,0xad,0xa2,0xb6,0x36,0x2b,0x2f,0xd1,0xae,0xc4,0x40,0x37,0x38,0x2b,0x2d,0xd2,0xa7,0x9e,0xa9,0xd6,0x35,0x35,0x71,0xef,0x48 -,0x53,0xbc,0xd4,0x33,0x2f,0x64,0xac,0xa9,0xc4,0x38,0x36,0x44,0x48,0x30,0x26,0x27,0x35,0x36,0x41,0xb5,0xa4,0x9f,0xa8,0xb9,0x46,0x47,0xeb,0x58,0xfe,0xb5,0xaa,0xb0 -,0xc4,0x78,0xd7,0xc6,0xd6,0x57,0x47,0x53,0x64,0x3d,0x23,0x1e,0x27,0x39,0xf1,0xbc,0xb7,0xaf,0xb0,0xd3,0x35,0x3e,0xad,0x9e,0xa1,0xcf,0x2e,0x2a,0x29,0x2e,0x77,0xa4 -,0x9a,0xa5,0x38,0x1a,0x1c,0x2c,0x3b,0x4d,0xd6,0xb8,0xca,0x34,0x24,0x2d,0xb6,0x9d,0x9a,0xa4,0xb8,0x59,0x33,0x2a,0x27,0x3e,0xbc,0xb2,0xb3,0xb7,0xb6,0xc4,0x50,0x3d -,0x3c,0x6b,0xbe,0xd8,0x2b,0x1e,0x29,0x3c,0x5c,0xd1,0xb8,0xa9,0xa6,0xb5,0x42,0x38,0x4d,0xcd,0xd0,0x6d,0xe0,0x5b,0x40,0x39,0x5d,0xad,0xa5,0xab,0x6e,0x31,0x3a,0x4b -,0x3e,0x2c,0x2d,0x43,0xf6,0x5c,0x35,0x38,0xb6,0x9f,0xa5,0xb5,0xbd,0xc4,0xd6,0x42,0x38,0x4c,0xd7,0xbe,0xbe,0xd4,0xca,0xbd,0xc9,0x40,0x37,0x42,0x3b,0x29,0x1d,0x1e -,0x2f,0x5f,0x5b,0x6b,0xb0,0xa2,0xa4,0xac,0xb8,0xbf,0xc0,0x5e,0x3c,0x34,0x37,0x7a,0xca,0xce,0xcf,0xe9,0x76,0xdd,0xf7,0xcf,0xba,0xd2,0x32,0x20,0x1f,0x2f,0xfc,0xb6 -,0xaa,0xa6,0xa6,0xab,0xbd,0x4a,0x3e,0xe9,0xbd,0xc1,0x4d,0x34,0x30,0x3b,0x66,0xd2,0xbc,0xad,0xbb,0x3d,0x31,0x44,0x64,0x32,0x1f,0x22,0x31,0x46,0xcf,0xbd,0xb1,0xa8 -,0xa5,0xa9,0xb3,0xb4,0xb1,0xe4,0x38,0x2e,0x33,0x47,0x54,0x64,0xc7,0xb0,0xac,0xb9,0xe3,0x5f,0x4b,0x31,0x24,0x1f,0x1e,0x24,0x46,0xb3,0xab,0xaf,0xb7,0xc0,0x68,0x65 -,0xb3,0xa4,0xa9,0xdf,0x2e,0x29,0x2d,0x3a,0xdb,0xb3,0xaa,0xa8,0xb4,0x59,0x2d,0x2a,0x30,0x35,0x45,0x5e,0x4a,0x41,0x47,0xe7,0xb8,0xa6,0x9c,0x9e,0xac,0xb9,0xde,0x35 -,0x23,0x1d,0x28,0x3e,0xdd,0xca,0xe6,0xef,0xc4,0xc5,0xcd,0xbd,0xdc,0x2e,0x24,0x2b,0x3b,0x4e,0x4c,0x42,0x48,0xb7,0x9d,0x9a,0xa2,0xae,0xb6,0x4e,0x2b,0x2c,0x38,0x34 -,0x32,0x63,0xc1,0xde,0x56,0x4f,0x55,0xed,0xc6,0xd8,0x30,0x21,0x20,0x29,0x4c,0xaf,0xa5,0xa6,0xa5,0xa2,0xa3,0xab,0xbd,0x5a,0x31,0x2f,0x30,0x29,0x27,0x2a,0x36,0x3e -,0x5e,0xb0,0xa6,0xa6,0xa9,0xb5,0x4d,0x2f,0x29,0x29,0x2f,0x65,0xb4,0xb7,0xd6,0xbb,0xaa,0xa8,0xaa,0xa8,0xad,0x3f,0x1e,0x18,0x1b,0x28,0x48,0xbe,0xba,0xbf,0xbe,0xbb -,0xb2,0xa9,0xa6,0xb9,0x32,0x22,0x1f,0x25,0x2d,0x3e,0xc5,0xa7,0x9e,0xa5,0xb5,0xc1,0xbc,0xc7,0x53,0x39,0x26,0x1a,0x1c,0x2e,0xc6,0xaa,0xa2,0xa0,0xa9,0xb9,0xd1,0x42 -,0x2b,0x2a,0x34,0x3b,0x39,0x31,0x31,0x43,0xb8,0x9d,0x97,0x9d,0xaf,0xd6,0x3f,0x37,0x31,0x27,0x1f,0x1f,0x2a,0x3e,0xcb,0xaa,0x9f,0x9e,0x9f,0xa8,0xba,0x45,0x29,0x22 -,0x21,0x29,0x2f,0x2f,0x51,0xae,0x9f,0x9b,0x9e,0xa7,0xbe,0x30,0x25,0x22,0x1f,0x24,0x3b,0x5a,0x6f,0xd5,0xb6,0xa4,0xa2,0xa6,0xac,0xda,0x2f,0x27,0x25,0x25,0x29,0x29 -,0x2f,0xcf,0xa9,0x9e,0x9e,0xab,0xc0,0x5d,0x33,0x29,0x28,0x2c,0x3c,0xd3,0xc9,0xef,0xe7,0xb7,0xa2,0x9a,0x99,0xa9,0x30,0x19,0x18,0x20,0x30,0x5e,0xcd,0x74,0xdf,0xb7 -,0xa6,0x9e,0x9e,0xa0,0xac,0x5b,0x2b,0x1b,0x14,0x18,0x2b,0x5c,0xed,0xdc,0xbd,0xad,0xa3,0x9e,0x9d,0xaa,0x54,0x29,0x1e,0x1f,0x2d,0x45,0xc8,0xaf,0xac,0xb0,0xc1,0xde -,0x77,0x56,0x4d,0x57,0x3a,0x26,0x23,0x29,0x3c,0xb9,0xa0,0x99,0x99,0x9f,0xbb,0x36,0x25,0x27,0x2f,0x28,0x27,0x2f,0x36,0x35,0x4e,0xb5,0xa8,0xa1,0x9e,0xa0,0xb2,0x38 -,0x23,0x1e,0x1f,0x30,0x5b,0x4d,0x6a,0xb3,0xa0,0x9b,0x9c,0xa6,0xc6,0x3b,0x36,0x38,0x29,0x1f,0x1d,0x1d,0x25,0x6c,0xa6,0x9d,0x9c,0x9b,0x9d,0xae,0x48,0x27,0x1b,0x1c -,0x2e,0x40,0x3d,0x4a,0xce,0xb6,0xa9,0xa3,0xa9,0xc7,0x3c,0x3d,0x42,0x2f,0x29,0x2b,0x28,0x36,0xb1,0x9f,0x9c,0x9e,0xa7,0xca,0x2c,0x21,0x25,0x28,0x29,0x34,0x40,0x36 -,0x3a,0x79,0xb2,0x9b,0x93,0x95,0xa4,0x4e,0x24,0x18,0x16,0x20,0x33,0x35,0x3b,0x4f,0xc8,0xa5,0x98,0x95,0x9c,0xab,0xd4,0x2e,0x1b,0x18,0x1f,0x27,0x32,0xd8,0xbb,0xb1 -,0xa9,0xa6,0xa3,0xa4,0xa6,0xbb,0x29,0x1b,0x1e,0x27,0x2b,0x42,0xc5,0xb0,0xa4,0x9f,0xa3,0xb4,0xec,0x40,0x2c,0x27,0x29,0x27,0x1f,0x21,0x32,0xbb,0x9c,0x94,0x99,0xac -,0xca,0xef,0x3c,0x29,0x24,0x2a,0x27,0x24,0x2f,0x42,0xe5,0xa8,0x9a,0x99,0x9e,0xac,0x4e,0x20,0x1a,0x1e,0x26,0x27,0x2c,0x3e,0xda,0xa1,0x92,0x92,0x98,0xa2,0xaf,0xe4 -,0x2e,0x22,0x1d,0x19,0x1a,0x1f,0x2a,0xec,0xa7,0xa4,0xa7,0xa1,0x9e,0xa6,0x5d,0x28,0x25,0x23,0x23,0x2c,0x37,0xd8,0xa4,0x9b,0x9f,0xaf,0xc0,0xde,0x3f,0x3e,0x48,0x2d -,0x1f,0x1d,0x1e,0x2a,0xb4,0x97,0x94,0x9e,0xad,0xc5,0x36,0x23,0x25,0x2e,0x2c,0x25,0x22,0x29,0x50,0xa4,0x97,0x98,0x9b,0x9e,0xaf,0x3f,0x27,0x1f,0x1f,0x20,0x22,0x23 -,0x21,0x53,0xad,0xaf,0x9f,0x95,0x9e,0xb9,0xcd,0x3c,0x46,0x27,0x1e,0x2a,0x61,0x3f,0xcb,0xab,0xce,0xa1,0x94,0xa7,0x1e,0x1c,0x30,0xd6,0x5b,0x28,0xce,0xa4,0xb4,0x3d -,0x4b,0x40,0x2c,0xaf,0xad,0x3c,0x22,0x34,0xb0,0xb4,0xbd,0xb8,0xb0,0x21,0x13,0x3c,0xaa,0xae,0x9f,0xad,0x30,0xdd,0xa9,0xae,0x37,0x15,0x22,0xcc,0x46,0x24,0xdf,0xa0 -,0xb6,0xa3,0xa5,0x4b,0x1d,0x1e,0x3b,0xb4,0xaf,0x39,0xe1,0xb4,0xa3,0xa8,0xab,0x22,0x18,0xa2,0xa9,0x22,0x1f,0xd5,0xa1,0x9f,0xdd,0x2e,0x2c,0x2b,0x3b,0xae,0xae,0x2c -,0x48,0x9e,0xa8,0xc5,0xb0,0xad,0x31,0x13,0x1e,0xbb,0x9e,0x34,0x28,0xd3,0xbb,0x9c,0x97,0x48,0x0d,0x19,0xd5,0x9e,0x3f,0x30,0x9f,0x9c,0xb3,0x4f,0xca,0x19,0x1f,0x9e -,0xab,0x1f,0x23,0xcb,0xa0,0xa5,0x6e,0xcc,0xef,0x1f,0x20,0xc9,0x3d,0x2c,0xa0,0x94,0xa6,0xb9,0x2d,0x1c,0x1c,0x28,0xa7,0xa6,0x38,0x1c,0x6c,0x9b,0xa6,0xa0,0x95,0x56 -,0x0c,0x13,0xc1,0x91,0xb7,0x2c,0x50,0x2c,0xc8,0xac,0xa9,0x21,0x18,0xc1,0xac,0x2c,0x22,0xa6,0x90,0x9d,0x4c,0x64,0x1f,0x15,0x26,0xaf,0x51,0x29,0x9c,0x94,0x51,0x30 -,0xad,0xa9,0x64,0x13,0x23,0xc3,0x2b,0x2f,0xa5,0x9f,0x62,0xbb,0xa4,0x1e,0x0c,0x2d,0xa3,0x9a,0x2f,0x20,0xb7,0x99,0x8f,0x9e,0x69,0x0d,0x0e,0xaf,0x98,0xd8,0x3d,0xbf -,0xc0,0x44,0xbb,0x99,0xb8,0x11,0x18,0xba,0xb2,0x2f,0x42,0x9b,0xa3,0xbc,0x2f,0x38,0x3c,0x20,0xaf,0x9e,0x24,0x2a,0xa9,0xa0,0xad,0x34,0x2c,0x1c,0x1d,0xb7,0x94,0x97 -,0x44,0x19,0x4d,0xae,0x43,0x4b,0xd1,0x2a,0x1d,0x50,0x94,0xa8,0x2f,0xc2,0xaa,0xb2,0x17,0x24,0x6f,0x43,0xb6,0xa1,0x96,0xca,0x19,0x2d,0xb6,0x54,0x34,0xce,0x3f,0x14 -,0x3f,0x90,0x9f,0x2e,0xba,0xac,0xd7,0x1d,0x19,0xc6,0xc6,0x5c,0xa2,0x96,0x1f,0x13,0xa0,0x8e,0x3e,0x14,0x1e,0x29,0xdd,0xa8,0x92,0x9f,0x44,0x1b,0x40,0xa4,0x29,0x2b -,0x37,0x15,0x17,0x9e,0x88,0x9a,0x2b,0xd0,0xa6,0x2b,0x17,0x48,0xbf,0x36,0x45,0x9a,0x99,0x41,0x27,0xad,0xa3,0x18,0x14,0x29,0x2e,0x2f,0x98,0x8a,0x3d,0x0f,0xae,0x93 -,0xf3,0x1d,0x16,0x2e,0xcb,0xd4,0x9e,0xae,0x25,0x6e,0x91,0xa3,0x0c,0x18,0xc8,0x32,0x5d,0x93,0x8b,0xc3,0x1d,0x28,0xbd,0xb9,0x37,0x26,0x1d,0x0e,0x2a,0x8a,0x8b,0xcf -,0x29,0xb6,0xef,0x20,0x2d,0x62,0x3b,0xc8,0xaa,0xa9,0x32,0x2c,0x95,0x8f,0x24,0x0b,0x1c,0xab,0xac,0x4f,0x95,0xa0,0x1f,0x19,0xa8,0xb1,0x17,0xe4,0x41,0x2a,0x2e,0xb2 -,0x93,0xa9,0x1c,0xda,0x9b,0x36,0x16,0x2f,0xb8,0x1a,0xd8,0x8b,0x9a,0x2f,0x2f,0xc5,0x47,0x38,0x67,0x2c,0x18,0x1f,0xa0,0x8c,0xaf,0x18,0xc7,0x9e,0x23,0x1d,0xcc,0xaa -,0x3b,0x7d,0xaa,0x4a,0xc2,0xc7,0xa0,0xd0,0x0d,0x1a,0xac,0xa6,0xcb,0xb7,0x9a,0xaf,0x1c,0x5d,0x9f,0x3e,0x1e,0x35,0x2e,0x17,0xa5,0x88,0x96,0x1d,0x10,0xc6,0xa2,0xf3 -,0x2d,0x30,0x25,0x1e,0xa5,0x8d,0x74,0x19,0x9a,0xa2,0x19,0x20,0x4d,0xf7,0x24,0x3a,0xa4,0xa4,0xbe,0x3d,0xad,0x34,0x10,0x39,0x9d,0xb3,0x3e,0xa6,0xa1,0x43,0x44,0x9b -,0xb3,0x1b,0x12,0x23,0xa9,0x66,0xa5,0x9b,0xab,0x20,0x1e,0xa7,0x9e,0x43,0x1e,0x29,0x15,0x44,0x8f,0x8a,0xd1,0x0e,0x2e,0xaf,0xc8,0x42,0xcb,0xd4,0x2e,0x3d,0x9d,0x9e -,0xe1,0x3c,0xaa,0x1f,0x0c,0xb3,0x95,0x72,0x1b,0x4a,0xbb,0xdc,0xbe,0xa8,0x44,0x1f,0x23,0xfe,0xaa,0x28,0xbf,0x92,0xa0,0x20,0x2c,0xab,0xb9,0x46,0x25,0x1e,0x28,0xaa -,0x98,0x99,0x2f,0x13,0x42,0xa6,0xb3,0x39,0x3a,0x48,0x23,0xfd,0x98,0x9f,0x41,0x23,0x5e,0x2a,0x22,0xa9,0xa4,0x38,0x20,0xae,0x98,0xa1,0x47,0x59,0x42,0x1d,0x3a,0x9f -,0x9d,0x1c,0x2a,0xaf,0xe9,0x3e,0xe2,0xb2,0x2e,0x2d,0x3c,0xc9,0xfa,0xe9,0xa8,0xa4,0x29,0x1b,0xab,0xa7,0x38,0x24,0x38,0x67,0x4b,0x9f,0x9d,0x35,0x23,0x35,0xa8,0x5b -,0x28,0x3c,0xbe,0xb9,0x3e,0xb1,0xa5,0xac,0x2d,0x2f,0x27,0x30,0xad,0xa1,0xaf,0x17,0x29,0xab,0x99,0xa8,0x3b,0x31,0x1b,0x2c,0xaa,0x96,0xb9,0x1f,0x42,0xbe,0x26,0x2c -,0x98,0xaa,0x1b,0x1b,0xea,0xa7,0xa5,0x9b,0xbc,0x25,0x21,0x52,0x9d,0xbc,0x38,0x38,0x29,0x2a,0x51,0xa2,0xa6,0xaa,0x3b,0x1a,0x1a,0x64,0x9d,0x9d,0xba,0x17,0x2b,0xbe -,0x9d,0xa9,0x28,0x29,0x1d,0x5d,0xa3,0x9c,0xda,0x1f,0xef,0xa5,0x3f,0x35,0xad,0xed,0x30,0x2e,0xc7,0xa9,0xb1,0xaa,0x44,0x1e,0x1d,0x4b,0x9a,0x6e,0x31,0x46,0x3f,0x64 -,0xb5,0xa6,0xef,0xd2,0x49,0xba,0x3e,0x5d,0xa5,0x9e,0xbd,0x15,0x42,0xab,0xaa,0x66,0x29,0x25,0x1f,0xb1,0xad,0xda,0x4e,0xd9,0xa9,0xbf,0x2f,0x27,0x4c,0x63,0x49,0x76 -,0xbb,0xbe,0xbf,0xaa,0x28,0x27,0x34,0xcc,0xa4,0x28,0x25,0xc6,0x95,0x9c,0x4a,0x2e,0x20,0x2d,0x6d,0xa6,0xb7,0x28,0x1e,0xb1,0xa1,0x58,0xaa,0x5c,0x29,0x2b,0x47,0xc7 -,0x4d,0xa6,0xb6,0x3b,0x30,0x4f,0xa7,0xb3,0x39,0xbc,0x5c,0x1c,0x50,0xa7,0xa4,0x6a,0xd6,0xb0,0x35,0x6f,0xe3,0x6d,0x4e,0x1f,0x20,0xbf,0x9a,0x9d,0xca,0x20,0x15,0x39 -,0x9f,0x9d,0xc0,0x1c,0x1d,0xba,0x9b,0xa7,0xb2,0x31,0x22,0x26,0x2e,0x4c,0x45,0xb1,0xad,0x49,0x20,0x48,0xa0,0xa2,0xda,0x46,0x38,0x42,0xb4,0xa8,0xb6,0x23,0x2f,0xbe -,0xbe,0x5e,0x2d,0x46,0x52,0x34,0xba,0xb0,0xae,0xd8,0xd6,0xc0,0x20,0x46,0xa6,0xae,0x2f,0x27,0x38,0xa6,0xa2,0xb4,0xa6,0x29,0x18,0x25,0xb2,0xb0,0xc8,0xb0,0xbf,0x4c -,0x49,0x3f,0x66,0xaf,0xd8,0x2e,0x28,0xc5,0xac,0xad,0x45,0x19,0x35,0xa8,0xb6,0x63,0x1c,0x1e,0xb9,0x9f,0x9d,0xb8,0x39,0x2b,0xc2,0xb9,0x32,0x4b,0xac,0xa3,0x2c,0x19 -,0xfb,0xa7,0xa9,0xc2,0x49,0x26,0x25,0xd6,0xad,0xd7,0x27,0xc8,0xb1,0xad,0xc4,0xcb,0xc9,0x28,0x35,0x50,0x2d,0x58,0x9c,0x9f,0xc7,0x23,0xb9,0xa4,0xc4,0x41,0x1e,0x2b -,0xce,0xa6,0xc4,0x54,0x29,0x27,0xc0,0xb6,0x3a,0xcc,0xb5,0xdd,0x4e,0x2c,0xc0,0xaf,0xad,0xb6,0x2f,0x17,0x2d,0xaf,0x9e,0xbc,0x18,0x3d,0xa9,0xa9,0xaf,0x44,0x20,0x3b -,0xb9,0xae,0x4e,0x2d,0x4e,0xa6,0xa4,0x36,0xc4,0xaa,0xc7,0x1d,0x14,0x2a,0xcc,0xa8,0xb1,0x44,0xd6,0xb2,0xa7,0xcf,0x28,0x60,0xa6,0xb3,0x53,0x55,0x4e,0xe5,0x30,0x51 -,0x57,0x1d,0x39,0xa3,0xb3,0x36,0x41,0xb2,0x9d,0xa6,0x41,0x26,0x21,0x59,0xa4,0xd0,0x1f,0x21,0x36,0x9f,0x9c,0x4c,0xb7,0xec,0x32,0x6e,0x24,0x29,0xe1,0xce,0x56,0x4b -,0x36,0xac,0x9a,0xab,0x3c,0x28,0x56,0x41,0x45,0xad,0xb0,0x2d,0x30,0xb7,0xb9,0x34,0x2e,0x3d,0xb4,0xbc,0x4e,0xa7,0xac,0xd6,0x28,0x20,0x31,0xbc,0xa5,0xb7,0x1d,0x2a -,0xa4,0xa5,0xb6,0x2b,0xb1,0x9c,0xb9,0x2e,0x27,0x2e,0x3f,0xec,0x38,0x3e,0x31,0xb9,0x98,0xb5,0x2c,0x3a,0xbb,0xb4,0xfe,0x2c,0x28,0x35,0xbc,0x9c,0xb8,0x23,0x1d,0x1d -,0xc4,0x9f,0xe7,0x49,0xc2,0xbd,0xa9,0xb5,0x33,0x3a,0x77,0xba,0xb9,0x34,0x76,0xab,0xb4,0x44,0x53,0xda,0x33,0x1b,0x24,0xa9,0xba,0x3c,0x3c,0xcf,0xcc,0xbb,0xaf,0xb6 -,0xcd,0xbb,0x9b,0xb9,0x2a,0x19,0x18,0xde,0x99,0x9e,0x4b,0x1c,0x1e,0xb6,0x96,0xa0,0x24,0x29,0xb9,0xb3,0x56,0x6d,0x37,0xdd,0x4f,0x2f,0x48,0x39,0x33,0xc0,0xa5,0x49 -,0xb9,0xae,0xc3,0x23,0x23,0xb1,0xa9,0x42,0x2e,0xbd,0x4f,0xf3,0x43,0x4f,0xaf,0xca,0xb8,0xa7,0x3b,0x26,0x4d,0xd1,0x30,0x3b,0xbb,0xc0,0x5d,0xce,0xa2,0xd4,0x25,0x28 -,0xc5,0xc2,0x2d,0x31,0xb5,0x9d,0xaa,0xb7,0x4f,0x27,0x2b,0xc7,0xa5,0xe2,0x78,0xe3,0x3c,0x4b,0x3f,0x54,0x56,0x7b,0x35,0xba,0xdf,0x26,0x3a,0xa1,0x99,0xb8,0xae,0xc9 -,0x2b,0x1a,0x2e,0xc1,0xce,0x3f,0x34,0x3f,0x3d,0xee,0xa2,0xa3,0x29,0x3f,0xaa,0xbc,0x1d,0x19,0x6c,0x94,0x9b,0xae,0xd0,0x2b,0x3a,0x47,0x41,0x2c,0x3d,0x43,0xb7,0xe9 -,0x3f,0xcb,0xbd,0x4f,0x2f,0xa5,0xbe,0x29,0x2a,0xa8,0x9b,0xa0,0xc8,0x1d,0x1e,0x24,0xb9,0x9f,0xb8,0x1f,0x24,0xba,0xa5,0xa9,0xac,0xbe,0x34,0x56,0xaa,0xba,0x1c,0x14 -,0x2c,0x9b,0x96,0xce,0x24,0x21,0x1f,0xcd,0x99,0xbc,0x29,0x2a,0xb7,0xaa,0xcb,0x4c,0x3c,0x37,0xf9,0xa3,0x3c,0x1a,0x1c,0xa7,0x8f,0x97,0xaa,0x28,0x1f,0x1d,0x2e,0xc4 -,0xb8,0x3d,0x3e,0xad,0xa9,0xa9,0x4d,0x1b,0x1d,0xb2,0xa2,0xb9,0x1c,0x11,0xba,0x89,0x8b,0x4d,0x1f,0x27,0x39,0xa7,0x9d,0x40,0x19,0x17,0x45,0xa5,0xb1,0x40,0xd4,0xc0 -,0x33,0xb2,0xbe,0x2c,0x1f,0xb0,0x95,0x9f,0x36,0x1e,0x2a,0x24,0xbf,0xc8,0x3f,0x2f,0x33,0xc3,0xae,0xe2,0x38,0xbd,0xab,0xa2,0xb9,0x3a,0x18,0x1a,0xa5,0x92,0xa1,0x25 -,0x1a,0x24,0x4f,0x9d,0xa0,0x3d,0x1c,0x26,0xa3,0x9b,0x39,0x12,0x28,0xa0,0x9a,0x9b,0xae,0x21,0x1c,0xb0,0xa2,0xb4,0x29,0x1c,0xca,0xc4,0x2f,0x6a,0x9f,0xad,0x2e,0x47 -,0xbb,0x4c,0x48,0xb3,0xc6,0x68,0xc8,0x56,0x22,0x2f,0xa7,0x9c,0xbe,0x18,0x1d,0x4d,0xb7,0xa8,0xd2,0x34,0x38,0xd9,0x9f,0xd1,0x18,0x1c,0xc9,0x9e,0x9c,0xa7,0x29,0x1e -,0x27,0xb5,0x9d,0x9f,0x2a,0x18,0xd7,0xb6,0xb8,0xb4,0x9d,0xd8,0x1e,0x2a,0x2c,0x2b,0x33,0xc7,0xa7,0xab,0x5f,0xa5,0xa4,0x38,0x27,0x42,0xb6,0x49,0xba,0xa2,0x3e,0x37 -,0xcf,0x55,0x40,0xd0,0xbe,0x27,0x14,0x18,0xaf,0x8e,0x8e,0xab,0x2a,0x25,0xe7,0x98,0xb0,0x18,0x0b,0x1e,0xa4,0xbc,0xd1,0xbf,0xaa,0xab,0x2c,0x2c,0x2d,0x44,0x38,0x47 -,0xa8,0x9b,0xab,0xa3,0xad,0x15,0x1e,0x3f,0xad,0x6f,0x27,0x2b,0x6e,0xad,0xb1,0x98,0x9d,0x42,0x1a,0x1d,0x24,0x32,0x9f,0x92,0xaf,0x26,0x51,0x4f,0x3d,0x9f,0x49,0x1c -,0x1e,0xca,0x90,0xa4,0x30,0x21,0xc7,0xb5,0xaa,0xac,0x2c,0x13,0x17,0xa6,0x9b,0xa2,0xba,0xae,0x31,0x1a,0x22,0x2f,0x9f,0xa4,0x28,0x23,0x76,0xa2,0x9e,0xa9,0x35,0x18 -,0x23,0xbc,0xc2,0x2f,0x6b,0xa4,0x9d,0x39,0x30,0xfa,0xd0,0xbf,0x23,0x6e,0xc4,0xb8,0x99,0xb7,0x14,0x1f,0x9f,0xa9,0xe1,0x24,0x1b,0x23,0xb0,0x95,0xa2,0x6c,0x25,0x6e -,0xde,0x40,0xb1,0xaa,0xa3,0x2f,0x1a,0x36,0xbb,0xc1,0xa5,0x4b,0x19,0x22,0xf3,0x98,0xa3,0x31,0x1c,0x3d,0xa3,0xac,0xaf,0xbd,0x2e,0x24,0x5b,0x9c,0xac,0x2f,0x2c,0x1b -,0x1b,0x2e,0xaf,0x9d,0x9e,0x30,0x32,0xac,0xa0,0xa1,0x4f,0x26,0x1a,0xc1,0xad,0x35,0x26,0xb6,0x97,0xbd,0x1e,0x1f,0x2d,0x36,0xa2,0xad,0xb0,0xb4,0xab,0x97,0x3f,0x0d -,0x14,0xae,0x9e,0xd9,0x2a,0x20,0x3d,0x9a,0x96,0x9a,0xc8,0x1c,0x16,0x1f,0xd6,0xa3,0xa5,0xa8,0xba,0x19,0x28,0xc5,0x51,0x2f,0x2f,0xeb,0x44,0xb0,0xa1,0xa6,0xc6,0xe2 -,0xb9,0x64,0x19,0x1e,0xb2,0xb3,0xba,0xdb,0xac,0xaf,0xb5,0xab,0x23,0x0f,0x1b,0xac,0x9c,0xa8,0x42,0x28,0x75,0x98,0x96,0xcf,0x14,0x0d,0x2b,0x9d,0x9e,0xf6,0x55,0xca -,0xbf,0x6e,0xb9,0x3f,0x1e,0x1b,0x24,0xa1,0x95,0x99,0xa7,0xc3,0x29,0x1d,0x39,0xd3,0x24,0x1c,0x4a,0xab,0x9f,0xb1,0xac,0xa8,0xbb,0x32,0x16,0x19,0x3d,0x9e,0x98,0xc7 -,0x21,0x34,0xa4,0x9e,0xc4,0x3c,0x1e,0x19,0xcf,0x9b,0xba,0x2a,0x34,0xb9,0x9f,0xab,0x48,0x1d,0x1a,0x2f,0xa8,0x98,0xa7,0x3f,0x27,0x3a,0xc9,0xaf,0xb7,0x41,0x23,0x1f -,0x3c,0xa4,0x93,0xa7,0x5a,0x63,0x35,0x1e,0x20,0xdf,0xd8,0xb7,0xa8,0x4b,0x20,0x30,0x9f,0x9d,0x63,0x21,0x20,0xbc,0x9e,0xa4,0x48,0x1c,0x23,0xac,0x97,0xa9,0x20,0x10 -,0x1f,0xaa,0x97,0xa5,0x30,0x22,0x23,0xfd,0x9e,0x98,0xcc,0x21,0x2a,0x50,0xb7,0xae,0xcd,0x25,0x4b,0xa3,0xa7,0x3a,0x1f,0x26,0x27,0xba,0x9f,0xa7,0x5f,0x2c,0xc8,0xaa -,0xb5,0x33,0x33,0xca,0xe5,0x32,0x24,0x30,0xbd,0xa1,0x9b,0xb4,0x21,0x11,0x26,0x93,0x8f,0x54,0x1b,0x1c,0x2a,0xac,0x9a,0x9c,0x6e,0x37,0x3f,0x25,0x2e,0x3f,0x40,0x39 -,0xad,0x99,0x9e,0x42,0x17,0x27,0xc8,0xb5,0x4b,0x4c,0x4f,0x30,0xb5,0xa3,0x9d,0xdd,0x24,0x2d,0x2f,0x36,0x23,0xbe,0x94,0x9a,0xb9,0x2a,0x1a,0x1d,0xb1,0x92,0xa6,0x18 -,0x0e,0x1d,0xac,0x8f,0x91,0xb5,0x1b,0x19,0x53,0xa2,0x6d,0x18,0x32,0x9e,0x97,0x9e,0xb1,0x23,0x0e,0x1f,0x9c,0x97,0x2b,0x16,0x1c,0xd8,0xa0,0x9e,0x92,0xb3,0x1d,0x21 -,0x33,0x28,0x1c,0xd0,0x97,0x93,0x97,0xc2,0x14,0x0e,0x2d,0xa5,0xa9,0x35,0x29,0xcf,0x9f,0x9e,0xae,0xb0,0x2e,0x1c,0x32,0xb8,0x42,0x18,0x41,0x92,0x93,0xc8,0x21,0x1e -,0x21,0x2e,0xa3,0x99,0x1e,0x13,0x44,0x99,0x95,0xa4,0x9d,0x3d,0x13,0x1d,0x33,0x2b,0x2d,0xaa,0x96,0x96,0xbb,0x23,0x1e,0x21,0x3b,0xa2,0x9f,0x29,0x18,0x74,0x9c,0xa6 -,0x76,0xa7,0xc7,0x1f,0x2b,0x2b,0x2d,0x20,0xcf,0x89,0x8a,0x37,0x0f,0x15,0x23,0xbb,0x98,0x9c,0x1b,0x14,0x4e,0xa2,0xa6,0xb3,0xaa,0x3d,0x23,0x2b,0xbb,0xb4,0x1d,0x26 -,0x99,0x91,0xc2,0x2b,0x53,0xd3,0x36,0x56,0xb1,0x1d,0x13,0x2e,0xa1,0x95,0xb1,0xa5,0x9f,0x2a,0x17,0x25,0xe5,0x22,0x2f,0x92,0x95,0x30,0x2b,0xc6,0x59,0x5a,0xae,0x5c -,0x14,0x17,0x30,0xa2,0x98,0xa5,0x98,0xaf,0x1d,0x22,0xd1,0x3f,0x17,0x24,0x97,0x92,0xbe,0x38,0x28,0x4f,0xc9,0x37,0xb7,0x61,0x12,0x14,0xa3,0x8e,0xa0,0x9d,0x99,0x2b -,0x17,0x1d,0x27,0x1a,0x27,0x95,0x8e,0xaf,0x2b,0xf6,0xb9,0x2b,0x21,0xc0,0x29,0x12,0x2a,0x98,0x92,0x9f,0x95,0xb2,0x18,0x1e,0xc2,0x2a,0x0f,0x16,0xa2,0x8c,0x99,0xad -,0x6a,0x48,0x2c,0x2e,0xaa,0x4e,0x0e,0x19,0xa2,0x9a,0x9d,0x96,0xae,0x1a,0x18,0x1d,0x3c,0x33,0x1e,0xa4,0x8d,0x9b,0xdd,0xc9,0xb3,0x24,0x1a,0xbc,0x3d,0x0d,0x15,0xa1 -,0x8c,0x8d,0x9b,0xb7,0x29,0x0f,0x11,0x2f,0x29,0x25,0x9c,0x8d,0xa4,0xaf,0xa1,0xcf,0x18,0x1b,0xa3,0x36,0x0c,0x1f,0xa8,0x9c,0x99,0x93,0x9f,0x2c,0x18,0x17,0x29,0x28 -,0x31,0x94,0x93,0xd8,0x4e,0xa7,0xd0,0x19,0x15,0x3c,0xb4,0x2e,0x1d,0xdd,0x8c,0x8a,0x9f,0xce,0x3c,0x0c,0x0b,0x2b,0x28,0x2a,0x92,0x89,0xa5,0xbe,0xc1,0xba,0x3b,0x17 -,0x22,0x1e,0x0d,0x1d,0x9e,0x8b,0x8d,0x92,0x9b,0x1f,0x0b,0x19,0xbf,0x1e,0x1d,0xac,0xa2,0x9f,0x9a,0xa8,0x2e,0x1a,0x1d,0xb4,0xde,0x19,0x1d,0x9f,0x8b,0x92,0xa2,0x9f -,0x35,0x09,0x0d,0x1e,0x1e,0x3f,0xa4,0x9a,0x9a,0x97,0xa4,0xaf,0x52,0x16,0x2d,0x2b,0x0d,0x0e,0xa6,0x86,0x8b,0x99,0xbf,0x25,0x19,0x19,0x1c,0x1d,0x21,0x42,0xa9,0x90 -,0x93,0x99,0xa5,0x17,0x13,0xae,0xad,0x0e,0x0e,0xc3,0x96,0x91,0x97,0xa6,0x23,0x12,0x31,0x6f,0x1f,0x2e,0xb0,0x95,0x9a,0xad,0xcf,0xcb,0x21,0x14,0x2e,0x1b,0x18,0x28 -,0xa8,0x8d,0x8c,0x91,0xad,0x2c,0x1c,0x1c,0x28,0x29,0x1b,0x1a,0xa9,0x8e,0x9e,0xac,0xb7,0x25,0x43,0xab,0x1e,0x0a,0x18,0x9d,0x8b,0x8c,0x9e,0xac,0x38,0x0f,0x17,0x2d -,0x2b,0x1c,0x3d,0x9f,0xa1,0x96,0x9a,0x41,0x18,0x27,0xa7,0x2f,0x18,0x1d,0xbf,0x8e,0x90,0xa1,0xac,0xc7,0x1a,0x12,0x14,0x14,0x21,0xc9,0x9c,0x93,0x9b,0x99,0xaa,0x2d -,0xdc,0x3b,0x1c,0x0f,0x0f,0x4d,0x8a,0x85,0x9b,0x3e,0x25,0x27,0x48,0x1c,0x0d,0x12,0x3a,0x9f,0x9d,0x97,0x99,0x9a,0xb4,0x34,0x22,0x1c,0x1e,0x13,0xd4,0x92,0x9c,0xa3 -,0xa6,0x31,0x14,0x25,0x51,0x27,0x1e,0x44,0x9e,0x8f,0x9e,0x50,0x5a,0xb1,0xa6,0x3a,0x0f,0x0b,0x21,0xaf,0x91,0x92,0xaa,0xad,0xe8,0x3f,0x30,0x17,0x17,0x22,0x2b,0xbc -,0x91,0x8f,0xbc,0x44,0x45,0xbb,0xb9,0x1d,0x0e,0x12,0xa0,0x8e,0x9d,0xc0,0xbd,0xae,0xbc,0x2d,0x12,0x19,0x29,0x32,0xc5,0xa0,0xa1,0x9a,0xb1,0x2a,0x4e,0xb7,0x69,0x19 -,0x1d,0xbe,0x90,0x90,0xc4,0x1e,0x1e,0xf2,0x2c,0x0e,0x0e,0x21,0x9b,0x8f,0x99,0xb9,0xb3,0x96,0x9a,0xac,0x25,0x0f,0x0f,0x19,0x2b,0xbc,0x93,0x89,0x99,0x11,0x0b,0x27 -,0x5b,0x1d,0x00,0x35,0x80,0x89,0xa0,0x8a,0x84,0xad,0x1a,0x0e,0x10,0x1d,0x21,0x14,0x01,0x0a,0x85,0x81,0x30,0x08,0x10,0x2c,0x9a,0x88,0x90,0xbd,0x9c,0x84,0xab,0x00 -,0x0e,0x89,0x36,0x0d,0xe4,0xa7,0xb8,0xee,0xb4,0xbb,0x97,0x8b,0x29,0x00,0x01,0x95,0x8a,0x29,0xc2,0x8f,0x85,0x83,0x9d,0x11,0x0f,0x55,0x95,0x14,0x00,0x19,0x84,0x94 -,0xd9,0xa7,0x4b,0x2a,0x1d,0x0d,0x0f,0x93,0x83,0x96,0x04,0x16,0x82,0x82,0x57,0x0c,0x12,0x5a,0xdf,0x0f,0x0f,0x37,0x91,0x83,0xb0,0x00,0x1c,0x94,0x1b,0x0f,0x9e,0x8a -,0x92,0xa0,0xaa,0xc4,0xc4,0x96,0x56,0x00,0x0a,0x90,0x95,0x18,0x2c,0x9f,0x8a,0x8b,0x29,0x07,0x08,0x22,0x9e,0x19,0x01,0xa1,0x80,0x8a,0x98,0x8b,0x8c,0x34,0x0d,0x0a -,0x0c,0x30,0xa3,0x2b,0x05,0x1b,0x87,0x8f,0x22,0x0c,0x18,0x97,0x8c,0xb3,0x3c,0xa1,0x8b,0x83,0xcd,0x02,0x1c,0x95,0x2a,0x04,0x0e,0x4b,0xa0,0xba,0x9f,0x9e,0xa3,0x9b -,0x19,0x00,0x11,0x88,0x86,0xa4,0x4c,0x9d,0x8d,0x96,0x2a,0x0e,0x0c,0x5a,0xa1,0x0e,0x00,0x29,0x84,0x8a,0x9a,0x95,0xa2,0x10,0x0e,0x1f,0x1d,0xa9,0x89,0xbe,0x0b,0xac -,0x84,0x8e,0x1c,0x0b,0x1f,0xaa,0xb1,0x1b,0x20,0xe4,0x93,0x98,0x0c,0x02,0x23,0x91,0x94,0xb8,0x9f,0x91,0x97,0xc3,0xb8,0xa6,0x91,0xab,0x08,0x00,0x08,0xb7,0x93,0xb5 -,0xd1,0x90,0x89,0xaa,0x0e,0x09,0x1f,0x8f,0x8e,0x17,0x06,0xba,0x80,0x89,0x47,0x28,0x24,0x16,0x34,0x3b,0x1c,0x38,0x9d,0x3d,0x11,0x4d,0x8f,0x93,0x1c,0x0b,0x28,0x9e -,0x98,0x9a,0x94,0x90,0x88,0x8e,0x11,0x00,0x11,0x9e,0xae,0x22,0x2a,0x2d,0x3e,0x5c,0x20,0x1a,0x48,0x5c,0x1e,0x17,0x31,0x96,0x8b,0x99,0x96,0x8c,0x97,0xca,0x0e,0x0b -,0x21,0xf3,0x1d,0x06,0x0e,0x93,0x80,0x8a,0x47,0x1a,0x1c,0x2e,0xa3,0xab,0xd0,0xac,0x9e,0x25,0x0f,0x1e,0x9c,0x9d,0x1e,0x1a,0x46,0xaf,0x52,0x34,0xab,0x99,0x8d,0x9a -,0x0b,0x01,0x1d,0x95,0xb8,0x31,0xc5,0x9f,0x8a,0x8b,0xb1,0x1b,0x21,0x36,0x22,0x0f,0x19,0xbd,0x9f,0xca,0x47,0x3c,0x2f,0x48,0x3a,0x59,0xb2,0xa4,0x4f,0x17,0x45,0x8b -,0x82,0x8e,0x37,0x12,0x10,0x35,0xc5,0x27,0x17,0x27,0xad,0xbb,0x23,0x22,0x4f,0x4f,0x3e,0xad,0x9a,0x99,0xa2,0xc2,0xb4,0x58,0x3a,0x2b,0x0d,0x11,0xa4,0x92,0xba,0x29 -,0x3b,0xa5,0x91,0x97,0x2e,0x17,0x2a,0x41,0x1b,0x0e,0x29,0x8e,0x86,0x94,0xbb,0x2e,0x1d,0x21,0x2d,0x3c,0xc3,0xb4,0x21,0x0a,0x14,0xa8,0x94,0xae,0x2c,0x26,0xc0,0x8f -,0x93,0xbd,0x4d,0x9c,0x8e,0xa6,0x17,0x12,0x23,0x37,0x28,0x1d,0x25,0xcd,0xab,0xb5,0xb5,0x57,0x3e,0x2e,0x18,0x21,0x9e,0x8f,0x96,0x9c,0xa3,0xbb,0x4d,0x2a,0x1f,0x29 -,0x5b,0xe1,0x24,0x13,0x1e,0xa9,0x97,0xa3,0xd2,0x5e,0x51,0x2e,0x26,0x26,0x2f,0xaf,0xab,0x4e,0xac,0x96,0xa1,0x43,0x29,0x41,0xa1,0x9a,0xb9,0x21,0x1e,0x31,0x34,0x17 -,0x0d,0x21,0xa4,0x9b,0xac,0xc0,0x9e,0x90,0x93,0xa0,0x63,0x30,0xfe,0x26,0x0b,0x0c,0x28,0xaf,0xac,0x4c,0x3b,0xb3,0xa9,0xe2,0x29,0x2f,0xab,0x9f,0x70,0x2d,0xc1,0x95 -,0x91,0xef,0x1a,0x24,0x61,0xab,0xaf,0x2d,0x1f,0x2c,0x2e,0x2a,0x5a,0xac,0xad,0xdc,0x34,0x4b,0xbe,0xb3,0xa9,0xae,0xa5,0x9e,0xc5,0x1e,0x15,0x21,0xb2,0xa4,0xc5,0xc9 -,0xb6,0xcf,0x3e,0x1f,0x14,0x1d,0x4c,0xc9,0xda,0xce,0xb5,0xa5,0x9d,0x94,0x90,0x9e,0x4a,0x20,0x1a,0x24,0x30,0x1f,0x15,0x17,0x48,0x9c,0x9f,0x3f,0x32,0xad,0x9b,0x9b -,0xc0,0x2a,0xd1,0x9b,0x9e,0x35,0x14,0x15,0x22,0x58,0xa7,0x9d,0xa5,0xb8,0x36,0x1f,0x32,0xba,0xba,0x38,0x1d,0x1f,0x65,0xce,0x52,0xa2,0x90,0x8e,0x99,0x31,0x16,0x22 -,0xbf,0xb9,0x29,0x1f,0x34,0xeb,0xba,0xb8,0x3f,0x26,0x29,0x2e,0x4e,0xac,0xb0,0xfd,0x4f,0xcc,0x9e,0x9a,0xb6,0x74,0xb4,0xae,0xd2,0x27,0x16,0x19,0x35,0xc5,0xf6,0x27 -,0x24,0x3a,0xe8,0xaf,0x9b,0x95,0x9d,0x9f,0xad,0xda,0xfa,0x2c,0x1c,0x17,0x1b,0x3d,0xac,0xb0,0xc0,0xb7,0xaf,0xaf,0xd0,0x2e,0x37,0xbe,0xbf,0x29,0x14,0x19,0xbe,0x98 -,0x92,0x99,0xc0,0x4e,0xe2,0x3c,0x2c,0x3c,0x6e,0xe4,0x29,0x19,0x23,0x34,0x42,0x4f,0xbb,0xa2,0x9a,0xa3,0x5f,0xde,0xa4,0x9a,0xb7,0x1c,0x1c,0x32,0xe7,0xef,0x3c,0x35 -,0x79,0xc3,0x3a,0x42,0xc8,0xda,0x38,0x27,0x28,0x65,0xa6,0x9c,0x97,0x98,0xa0,0x4f,0x1d,0x1c,0x30,0xcf,0xda,0x27,0x1e,0x3a,0xde,0x69,0xb6,0xad,0xb0,0xb3,0xd7,0x2c -,0x2b,0x34,0x2e,0x55,0x4a,0xe1,0xb2,0xb0,0xab,0xb2,0xb5,0xab,0xaa,0xb1,0xb0,0x6d,0x25,0x1b,0x11,0x0f,0x1c,0x3d,0xab,0x9d,0x9c,0x9c,0x98,0x9a,0xa2,0xa8,0xcb,0x33 -,0x22,0x17,0x13,0x24,0xb7,0xa7,0x5c,0x2d,0x4e,0xb3,0xa9,0xc6,0x37,0x30,0x4a,0x4c,0xc7,0xa8,0xa8,0xb4,0x3e,0x26,0x25,0x3b,0xc6,0xad,0xaa,0xcb,0x39,0x24,0x1e,0x2e -,0xbe,0xa9,0xc4,0x31,0x47,0xb7,0xa6,0xa2,0xa8,0xb7,0xbd,0x45,0x25,0x2a,0x2c,0x35,0x6f,0xb2,0xa3,0x9f,0xb4,0x63,0x47,0x30,0x2b,0x1d,0x19,0x1f,0x41,0xb8,0x9d,0x9b -,0xa0,0xa1,0xad,0xb1,0xb2,0xcc,0x37,0x2b,0x1f,0x1b,0x21,0x28,0x45,0xba,0xbd,0x4a,0x40,0xc2,0xa4,0x9d,0xa3,0xad,0xbc,0xdc,0x2c,0x19,0x1d,0x38,0x6d,0x64,0xcf,0xab -,0x9c,0x9c,0xb5,0x51,0x3b,0x2b,0x22,0x1a,0x1d,0x40,0xbc,0xce,0xc4,0xb4,0x9f,0x99,0xa3,0xb7,0x5c,0x2f,0x27,0x1f,0x21,0xbb,0x9d,0xa9,0x53,0x2a,0x28,0x2d,0x38,0x57 -,0xba,0xca,0x4b,0x4f,0xce,0xa4,0x9c,0xa7,0xbc,0x4b,0x2f,0x31,0x3f,0xbd,0xb0,0x4a,0x22,0x20,0x1d,0x21,0x7a,0xb8,0xbb,0xc2,0xb3,0xa2,0x98,0x98,0x9b,0xa7,0x3a,0x1c -,0x14,0x14,0x1c,0x39,0xb3,0xa5,0xaf,0xc8,0xc4,0xb0,0xa6,0xad,0xce,0x37,0x1e,0x15,0x1b,0x4f,0x9f,0x99,0xad,0x3a,0x7e,0xb2,0xac,0xb1,0xd8,0x59,0x4e,0x32,0x2d,0x33 -,0x2a,0x30,0x33,0x26,0x2e,0xdf,0xae,0xa0,0x9c,0x9d,0xa6,0xe7,0x2a,0x2a,0x39,0xca,0xce,0x3a,0x42,0xc3,0xb2,0xb3,0xcb,0x46,0x37,0x28,0x24,0x29,0x26,0x27,0xb8,0x99 -,0x95,0x99,0xae,0x5f,0x5a,0x4e,0x49,0x2e,0x1d,0x1d,0x31,0xbf,0xa8,0xa6,0xbf,0x6e,0x4c,0xe6,0xbe,0x52,0x33,0x2e,0x3b,0x56,0xbe,0xbe,0xc3,0xb1,0xb0,0xc1,0x3d,0x3e -,0xb9,0xa8,0xaa,0xb3,0x4f,0x27,0x19,0x17,0x21,0x44,0x42,0x37,0xcf,0xa2,0x96,0x97,0xa9,0xba,0xb1,0xc6,0x38,0x1c,0x13,0x1a,0xe6,0xa9,0xb7,0xdb,0xe1,0xc7,0xcb,0xba -,0xca,0x2e,0x1f,0x21,0x4c,0xa1,0x99,0xa5,0xe0,0x3f,0x59,0xae,0xc1,0x30,0x32,0x57,0xcb,0xc4,0x6d,0x30,0x2e,0x3a,0xfa,0x52,0x36,0x37,0x4f,0xbe,0xac,0xa9,0xac,0xae -,0xbd,0x4a,0x3d,0x2c,0x21,0x3c,0x9f,0x93,0x9d,0x5f,0x1f,0x1f,0x2d,0x59,0x38,0x19,0x11,0x1b,0xad,0x97,0x98,0x9b,0x9d,0xa4,0xa9,0xaa,0x5d,0x26,0x1c,0x1b,0x23,0x7b -,0xb5,0x5e,0x32,0x36,0xd4,0xb2,0x4c,0x2b,0x42,0xac,0xa4,0xb0,0xcf,0x4d,0xd5,0xb7,0xb9,0x3a,0x28,0x37,0xc2,0xad,0xb0,0xcc,0x4b,0x3c,0x2f,0x42,0x4a,0x25,0x19,0x25 -,0xaf,0x9c,0x9e,0xb5,0xbe,0xa6,0x9e,0xa6,0x36,0x19,0x1a,0x42,0xa7,0xb1,0x46,0x2f,0x32,0x3c,0xb8,0xab,0x3a,0x1b,0x1a,0x27,0xc8,0x9e,0x9a,0x9f,0xa8,0xa8,0xa4,0xb0 -,0x2f,0x26,0x3b,0x4a,0x2f,0x2c,0x2b,0x2e,0x3f,0xd9,0x4c,0x2c,0x39,0xb1,0xa1,0xaf,0xd9,0xde,0xaa,0x9d,0xa5,0xc8,0x27,0x1c,0x1f,0x5f,0xab,0xb6,0x5d,0x3c,0x4e,0xc7 -,0xaf,0xca,0x1e,0x11,0x1b,0xdd,0xa7,0xab,0xb5,0xad,0x9f,0x9c,0x9c,0xac,0x3b,0x28,0x2b,0x31,0x2c,0x30,0x37,0x33,0x34,0x5b,0xbc,0xba,0xd4,0x47,0x39,0x3d,0xc1,0xab -,0xb0,0xe7,0x32,0x29,0x3a,0xa9,0x9a,0x9a,0xa7,0x50,0x23,0x19,0x21,0x55,0xb7,0xb6,0xe1,0x33,0x2a,0x3d,0xb4,0xa6,0xa9,0xb2,0xb7,0xc5,0x3c,0x2b,0x28,0x2c,0x61,0xae -,0xad,0xbc,0x7c,0x3c,0x3a,0xd9,0xbe,0xcf,0x51,0x4b,0x58,0x3e,0x35,0x35,0x3f,0x4c,0xeb,0xae,0x9d,0x95,0x9c,0x4e,0x1a,0x15,0x1f,0x37,0x72,0xc9,0xda,0x39,0x2d,0x44 -,0xbe,0xaa,0xa3,0xa6,0xb2,0xbf,0xb7,0xbe,0x3a,0x2e,0x36,0x3f,0x49,0xef,0xc7,0x63,0x49,0x4e,0x4d,0x39,0x2c,0x37,0xc5,0xaa,0xa5,0xaf,0x3b,0x1f,0x2b,0xb6,0x9e,0x9b -,0xaa,0x41,0x24,0x20,0x26,0x2f,0xd9,0xaa,0xa0,0xa7,0xbc,0x45,0x24,0x1f,0x2a,0x40,0xc4,0xae,0xaf,0xd1,0x39,0x34,0x36,0x3f,0xd2,0xa9,0x9b,0x9a,0xa0,0xca,0x20,0x14 -,0x18,0x29,0xcf,0xac,0xb0,0xc9,0x50,0x38,0x3d,0xd2,0xa9,0x9d,0x9f,0xbb,0x2a,0x1c,0x1d,0x26,0x69,0xa9,0xa2,0xac,0xd2,0x4a,0x36,0x2c,0x2c,0x4a,0xaf,0xa7,0xad,0xbb -,0xbd,0xd3,0x35,0x28,0x2b,0x4c,0xb4,0xad,0xbb,0x45,0x2e,0x2a,0x2c,0x4f,0xaa,0x9d,0xa8,0x52,0x2a,0x29,0x39,0x4e,0xd4,0xc2,0xc7,0xb7,0xae,0xb4,0xba,0xb7,0xb8,0xf4 -,0x32,0x27,0x26,0x28,0x26,0x36,0xd6,0xcd,0x53,0x40,0x76,0xaf,0xa0,0xa6,0xbd,0x63,0x4a,0x45,0x60,0xb8,0xac,0xbf,0x3e,0x2a,0x24,0x34,0xca,0xba,0xc9,0x5f,0x59,0xcb -,0xcc,0x4f,0x4d,0x63,0x55,0x5f,0xc9,0xba,0xb0,0xa9,0xc9,0x24,0x1a,0x1e,0x36,0xb2,0x9a,0x95,0x9c,0xb2,0x2a,0x14,0x14,0x2b,0xb2,0xa7,0xa9,0xad,0xc4,0x4e,0x3b,0xff -,0xb3,0xae,0xac,0xc0,0x3b,0x25,0x1f,0x21,0x23,0x2d,0x42,0x4e,0x51,0xfd,0x68,0xe8,0xb6,0xa8,0xa0,0x9f,0xa3,0xb2,0x41,0x29,0x2d,0x4b,0xba,0xa9,0xa4,0xac,0x57,0x29 -,0x1f,0x27,0x53,0xad,0xab,0x7e,0x3a,0x38,0x33,0x33,0x48,0xc9,0xc8,0x4e,0x2f,0x2b,0x3e,0xc3,0xb1,0xba,0x4b,0x3c,0x3e,0x5f,0xbf,0xb1,0xab,0xb0,0xbb,0xdb,0x3e,0x38 -,0xdf,0xb7,0xcf,0xca,0xb3,0xae,0xab,0xa8,0xb4,0xec,0x3e,0x2b,0x23,0x23,0x28,0x2e,0x33,0x32,0x3f,0x7c,0x6e,0x57,0x6a,0xfb,0x6a,0xce,0xcb,0xbd,0xa7,0xa8,0xe3,0x27 -,0x24,0x38,0xd6,0xad,0xa5,0x9e,0xa5,0x6a,0x2d,0x27,0x36,0xcb,0xb1,0xb7,0x50,0x3c,0x3d,0xfa,0xc6,0xd5,0xd3,0xdc,0x3e,0x28,0x27,0x3e,0xb4,0xad,0xca,0x3e,0x3d,0x45 -,0x6f,0xba,0xb6,0xb4,0xb2,0xbe,0x4a,0x3e,0x5c,0xdd,0x54,0x35,0x39,0xfe,0xbd,0xb4,0xaf,0xb5,0xd5,0x38,0x29,0x29,0x35,0x45,0x68,0xbb,0xb4,0xb6,0xb5,0xb9,0xb8,0xb7 -,0xdf,0x35,0x2f,0x2e,0x32,0x61,0xdf,0x39,0x2f,0x37,0x4f,0xbc,0xb6,0xb6,0xb1,0xbf,0x4c,0x3b,0x55,0xba,0xaa,0xae,0x53,0x34,0x36,0xf8,0xb4,0xaf,0xaf,0xb1,0xc0,0x38 -,0x24,0x20,0x29,0x3b,0x3b,0x2a,0x30,0xd6,0xbd,0xbc,0xb9,0xca,0x55,0x46,0x38,0x40,0xc1,0xa9,0xa4,0xaf,0x6d,0x46,0xc7,0xb8,0xb0,0xa9,0xac,0xbc,0xf0,0x3a,0x2b,0x2f -,0x3e,0x3f,0x52,0xc9,0xbc,0xca,0x43,0x30,0x2e,0x2f,0x38,0x4a,0x51,0x50,0xd2,0xe4,0x34,0x2f,0xc9,0xa0,0x9b,0x9f,0xbd,0x36,0x2a,0x2a,0x39,0xd1,0xaa,0xa8,0x4b,0x1f -,0x1a,0x25,0x47,0xb6,0xa5,0xa3,0xa7,0xc2,0x2c,0x1e,0x25,0xce,0xa9,0xab,0xb8,0xbf,0xb2,0xb2,0xd7,0x45,0xe7,0xb9,0xc7,0x52,0x38,0x36,0x39,0x2c,0x2c,0x39,0xce,0xb3 -,0xb7,0xfa,0x45,0x64,0xfe,0xd9,0xdc,0xc9,0xaf,0xb7,0x3e,0x2d,0x43,0xb8,0xad,0xb0,0xbd,0xcf,0x6e,0x39,0x2a,0x2b,0x41,0xdd,0x58,0x3b,0x36,0x5c,0xbd,0xbb,0xca,0xce -,0xbd,0xc3,0x4e,0x30,0x3a,0xbb,0xb5,0xd3,0xda,0xbe,0xaf,0xb4,0xd8,0x7d,0xc3,0xba,0xcb,0x42,0x2d,0x2e,0x3a,0x35,0x2a,0x28,0x3a,0xd8,0xe9,0x3f,0x52,0xb3,0xaf,0xe2 -,0x41,0x5b,0xbf,0xcd,0x6d,0xc8,0xb2,0xac,0xb8,0xc4,0xc5,0xb8,0xaf,0xce,0x35,0x26,0x22,0x2b,0x34,0x3c,0xc5,0xa8,0xa9,0xcf,0x38,0x37,0xdc,0xb7,0xba,0xc4,0xcf,0xc9 -,0x7e,0x3c,0x42,0xcb,0xb4,0xb0,0xbd,0x4f,0x46,0xfd,0x4f,0x31,0x29,0x2d,0x3f,0x2f,0x28,0x36,0xc9,0xad,0xbc,0x44,0x59,0xb5,0xac,0xae,0xc9,0xe0,0xcd,0x5c,0x3f,0x4c -,0xc0,0xad,0xae,0xcc,0x50,0xc5,0xaf,0xcf,0x2e,0x2a,0x39,0x42,0x2f,0x2f,0x58,0xc9,0xc3,0xf9,0x39,0x37,0xdd,0xb0,0xac,0xbd,0x54,0x39,0x2d,0x2b,0x45,0xa8,0x9d,0xa3 -,0xbe,0x41,0x48,0xf1,0x4a,0x38,0x36,0x4c,0xe8,0x41,0x2c,0x2c,0x3b,0xf8,0xb6,0xae,0xad,0xa9,0xaa,0xbd,0x59,0x54,0x6e,0x5e,0x4a,0xee,0xbd,0xd8,0x4e,0x34,0x2e,0xd5 -,0xae,0xc5,0x2e,0x24,0x2c,0x33,0x2e,0x37,0x64,0x5e,0x4a,0xc0,0xab,0xa9,0xa8,0xaf,0x6d,0x31,0x3e,0xc0,0xb9,0xd6,0xbd,0xaf,0xdb,0x40,0x5a,0xbb,0xac,0xb6,0x49,0x26 -,0x1d,0x1f,0x28,0x2e,0x47,0xbe,0xc5,0xdf,0xb8,0xa9,0xa4,0x9f,0xa4,0xc8,0x35,0x35,0x3a,0x39,0x4d,0xcc,0x60,0x36,0x4f,0xc1,0xbc,0xb8,0xbb,0x3b,0x1c,0x1e,0x45,0xc3 -,0xc0,0xb8,0xc4,0x42,0x45,0xbd,0xa9,0xa1,0x9d,0xa2,0x56,0x24,0x29,0x37,0x34,0x34,0x75,0x5b,0x2c,0x28,0x3f,0xae,0xa0,0xa5,0xea,0x22,0x20,0x2d,0x38,0x6b,0xb6,0xb2 -,0xbd,0xba,0xae,0xa7,0xa4,0xaa,0xd9,0x2d,0x2a,0x2e,0x27,0x26,0x3b,0xcb,0xd3,0xea,0xbc,0xaf,0xad,0xa9,0xaf,0x55,0x2c,0x32,0x4d,0x3f,0x33,0x32,0x2f,0x31,0xc1,0x9f -,0x9d,0xa2,0xb1,0x4f,0x2b,0x2b,0x48,0x50,0x38,0x3b,0x3f,0x48,0xc7,0xb3,0xae,0xaa,0xae,0xdd,0x2c,0x27,0x3d,0xee,0x3f,0x30,0x2d,0x38,0xc9,0xaa,0xa4,0xa3,0xa3,0xb8 -,0x31,0x26,0x34,0x45,0x32,0x2d,0x32,0x35,0x44,0xb6,0xa7,0xa4,0x9e,0xa3,0x5e,0x24,0x20,0x30,0x3f,0x2d,0x2c,0x35,0x72,0xb0,0xa0,0x9d,0x9f,0xae,0x35,0x23,0x27,0x39 -,0x5e,0x3f,0x30,0x2a,0x28,0x3a,0xb3,0x9e,0x9a,0x99,0xa2,0x4e,0x23,0x22,0x38,0xdc,0xcc,0x62,0x2f,0x2a,0x3f,0xb6,0xa6,0xa1,0xa5,0xcf,0x2b,0x29,0x3e,0xc9,0xd8,0x4d -,0x3a,0x32,0x48,0xbb,0xb0,0xba,0xb4,0xbd,0x2f,0x1d,0x21,0x3e,0xee,0x55,0x45,0x48,0xc5,0xa8,0xa0,0xa0,0xa1,0xaa,0x5c,0x2a,0x24,0x2b,0x30,0x28,0x20,0x22,0x33,0xaf -,0x9a,0x96,0x98,0x9f,0xcd,0x27,0x23,0x34,0xd8,0xd3,0x43,0x28,0x1e,0x29,0xc9,0xa5,0xa1,0xa2,0xa8,0x66,0x28,0x25,0x2c,0x36,0x3f,0x3e,0x36,0x3e,0xcd,0xaf,0xaa,0xa9 -,0xa6,0xae,0xd5,0xdd,0xc4,0xb6,0xca,0x2e,0x1c,0x1a,0x2c,0xaf,0x9f,0xa3,0xaf,0x56,0x29,0x24,0x2e,0x4b,0xcd,0xe4,0x40,0x32,0x55,0xac,0xa5,0xa4,0x9f,0xa5,0xd1,0x2f -,0x29,0x27,0x27,0x25,0x1b,0x16,0x1d,0xcb,0x98,0x90,0x93,0x9b,0xb3,0x35,0x35,0x67,0xc8,0xc5,0x3c,0x1f,0x18,0x1c,0x36,0xad,0x9c,0x99,0x9e,0xbd,0x3c,0x35,0x2e,0x39 -,0x4e,0x31,0x21,0x24,0x48,0xb6,0xac,0xa7,0xa4,0xad,0xcc,0xcb,0xce,0x6b,0xd1,0x4d,0x28,0x1e,0x24,0x52,0xae,0xa6,0xa3,0xad,0x5e,0x3c,0x42,0x3e,0x48,0x3a,0x21,0x1c -,0x2a,0xb3,0x9c,0x98,0x9c,0xa6,0xc9,0x3a,0x35,0x2f,0x34,0x48,0x2f,0x1c,0x17,0x1e,0x3d,0xaa,0x97,0x93,0x9c,0xb9,0x37,0x2c,0x3d,0xb9,0xc0,0x2b,0x1c,0x1e,0x31,0xba -,0xa0,0x9d,0x9e,0xac,0xca,0x5d,0x38,0x36,0x3d,0x2e,0x22,0x1f,0x25,0x3b,0xb7,0xa4,0xa1,0xa3,0xac,0xba,0xce,0xc9,0xaf,0xc2,0x2b,0x1d,0x1d,0x2f,0xb0,0x9d,0x9f,0xaa -,0xc8,0x3a,0x2b,0x29,0x3f,0x46,0x23,0x1b,0x1d,0x2e,0xb6,0x9b,0x96,0x9a,0xa4,0xba,0xe1,0x50,0xdf,0xc9,0x30,0x18,0x0f,0x12,0x25,0xad,0x95,0x92,0x97,0xa6,0x4d,0x2e -,0x40,0xb9,0xb9,0x37,0x1c,0x16,0x19,0x2a,0xc0,0x9e,0x96,0x99,0xaa,0xbd,0xbd,0xb4,0xbb,0x32,0x1b,0x17,0x1d,0x35,0xba,0xa5,0xa7,0xb4,0xd7,0x5a,0x5f,0xea,0xac,0xdf -,0x2a,0x38,0x69,0x3e,0xb8,0xa9,0xad,0xb6,0x25,0x18,0x22,0x53,0x56,0xa4,0xa8,0xc7,0xa7,0xa1,0xe6,0x22,0x40,0xab,0xa4,0x26,0x17,0x6d,0xab,0xb7,0x34,0x2c,0x35,0x41 -,0xb6,0xb4,0x58,0x27,0xac,0x98,0xd5,0x2c,0xcf,0xb4,0x24,0x1d,0x36,0x4e,0xb2,0xa3,0xcb,0xe9,0xa6,0x9d,0xa1,0x23,0x11,0x34,0xc9,0x38,0x2a,0xb7,0xb7,0xc6,0xb1,0x53 -,0x4c,0x27,0x4b,0xaa,0xb1,0x28,0x2b,0xba,0x9f,0x94,0xbd,0x36,0x1c,0x29,0xa8,0xda,0x1e,0x1f,0xb7,0x9f,0xa9,0x64,0x27,0x2d,0xd6,0xb4,0xae,0x5a,0x29,0xc9,0x9f,0xaf -,0x3c,0xb8,0x9d,0x1e,0x0f,0x2f,0xa4,0xa0,0x32,0x26,0x37,0xa7,0x9e,0xa1,0x46,0x11,0x1b,0xd0,0xb0,0x25,0x6e,0x9b,0x9b,0xa3,0x4c,0x1f,0x12,0xaf,0x95,0x33,0x17,0x25 -,0xa1,0x93,0xb3,0x2b,0xe3,0x53,0x28,0x2f,0xe0,0x2a,0x2f,0xa4,0xa0,0x9e,0xbb,0x3c,0x31,0x1c,0x2f,0xaf,0xaf,0xe3,0x1f,0x2a,0xa5,0x96,0x9a,0xa4,0x1f,0x0a,0x24,0x9b -,0x96,0x50,0x3e,0x22,0x27,0xaa,0xa8,0xa9,0x23,0x26,0x41,0x68,0x21,0x2b,0x8f,0x89,0xbc,0x1d,0x25,0x1b,0x30,0xe0,0xce,0x1e,0x30,0x9b,0x9d,0xac,0xbe,0xab,0xb3,0x24 -,0x13,0x2d,0xd9,0x36,0x65,0xa5,0xbd,0xd6,0xa3,0xb5,0x14,0x0d,0xb9,0x92,0x9d,0x1a,0x18,0xca,0x8c,0x8a,0xad,0x27,0x0a,0x0f,0xb6,0x9e,0xbe,0x49,0xac,0xcb,0x2f,0xc9 -,0x9d,0xa6,0x2c,0x1c,0x1f,0x36,0xcc,0xb7,0xa9,0xa1,0x46,0x31,0xc4,0x2a,0x28,0x9e,0x9d,0x34,0xe8,0x52,0xdb,0xcd,0x31,0x49,0x36,0x23,0x1d,0xd6,0x9b,0xa6,0xbd,0xb4 -,0x39,0x16,0x29,0x9e,0x9a,0xc7,0x49,0xc9,0x31,0x65,0xb1,0x9f,0xc6,0x18,0x27,0x38,0x2c,0x2b,0xaa,0x92,0xa6,0x27,0x3d,0x44,0x2e,0x4f,0xab,0x3d,0x16,0xbd,0x9f,0xa8 -,0xad,0xac,0xd9,0x35,0x1e,0x2b,0xa8,0x38,0x27,0xac,0x9c,0x77,0x6b,0xaf,0x31,0x14,0x7e,0x9c,0xba,0x1d,0x0f,0x4d,0x8f,0x87,0xa1,0x25,0x11,0x0f,0xb1,0x98,0xae,0x2a -,0x2f,0xb4,0xc4,0xb3,0xab,0x73,0x1d,0x13,0x1e,0x34,0xad,0x9f,0x9b,0x9c,0xbd,0x35,0xc5,0x45,0x1e,0x41,0xd2,0x18,0x10,0xa6,0x8b,0x94,0xb8,0xdc,0x1e,0x1a,0x26,0x4d -,0x9e,0x46,0x1b,0xf5,0x9e,0x9a,0x9e,0xcb,0x11,0x0d,0xa2,0x99,0x38,0x1f,0x26,0xaa,0x96,0x97,0xc7,0x22,0x18,0x1e,0xae,0xa8,0x3a,0x3d,0xac,0xa6,0xa9,0x97,0x9e,0x2a -,0x0d,0x0f,0x25,0xce,0x9d,0xa6,0xa8,0xce,0x32,0xcb,0xf4,0x27,0x54,0xaf,0xbb,0x19,0x12,0x9f,0x8d,0x8f,0xad,0x26,0x09,0x13,0x9c,0x9b,0xbc,0x1c,0x1f,0xa3,0x98,0xa7 -,0xa9,0x35,0x0e,0x0f,0xa7,0x9f,0x2f,0x41,0xb9,0xb7,0x9d,0x9c,0x2b,0x1c,0x21,0xc4,0xad,0xdc,0x49,0xb6,0xa0,0xcf,0xf3,0x98,0xb8,0x16,0x1a,0x1d,0x33,0x6c,0xa7,0xa2 -,0xa3,0xa3,0x4a,0x3a,0x29,0x21,0xb4,0xa8,0x2a,0x1b,0x2f,0x90,0x91,0x69,0x26,0x17,0x17,0xb8,0x95,0xaf,0x22,0x22,0xb4,0x9f,0x9a,0xa5,0x3c,0x1b,0x0e,0x26,0xa2,0xaf -,0x4d,0xb7,0xb5,0x2f,0xbb,0x96,0x38,0x17,0x2d,0x3b,0xc0,0xb6,0xc4,0xb7,0xaf,0xc3,0x3c,0xb6,0x35,0x1f,0x54,0x3e,0x29,0xb7,0x9d,0xb3,0xb6,0xc3,0x60,0x23,0x22,0x4f -,0xa7,0xbd,0x1e,0x31,0x9d,0x8e,0x94,0xd8,0x12,0x0e,0x1f,0x99,0x97,0xe9,0x24,0x1d,0xbd,0xa5,0x9a,0x9e,0x23,0x0d,0x13,0x48,0x94,0x9b,0xbf,0x2e,0x26,0x73,0xa3,0x9d -,0x19,0x12,0xcc,0xab,0x5c,0xa8,0x9d,0xbc,0x51,0x39,0x58,0x21,0x2b,0xbe,0xab,0x54,0x17,0x46,0xa0,0xaa,0xa4,0xf7,0x1a,0x1a,0x64,0x9c,0xa4,0xb9,0x2e,0x2d,0xa7,0x9a -,0x9e,0x62,0x0f,0x0c,0x51,0x93,0x96,0xbd,0x30,0x22,0x2f,0xab,0x9a,0xa0,0x18,0x12,0x29,0xc1,0xa7,0x9a,0xa4,0x22,0x28,0xdc,0xa6,0x2d,0x1e,0x36,0xcb,0xab,0xcc,0x9d -,0xb3,0x49,0xcb,0xec,0x2b,0x1e,0xb0,0xa8,0x75,0x2e,0x2d,0xb5,0xbc,0x3e,0xb6,0xbe,0x1b,0x18,0xbc,0x9c,0xa8,0xe2,0xbc,0x29,0x27,0xaa,0x9e,0xf0,0x0f,0x1f,0xc1,0x9e -,0x9f,0x9e,0x4f,0x17,0x56,0x9f,0x9d,0x1e,0x1e,0x31,0xb8,0xa0,0xaa,0xa0,0x21,0x1c,0x3c,0xa5,0xae,0x25,0x38,0x45,0xba,0xbc,0xa9,0x9e,0x3b,0x1d,0x37,0xb5,0x27,0x2d -,0x9f,0xa1,0x2d,0x2d,0xae,0x4b,0x3a,0xd2,0xaf,0x22,0x13,0xc0,0x9c,0x9e,0xbe,0xbb,0x26,0x12,0xab,0x91,0xa6,0x1a,0x16,0x28,0xa3,0x98,0xa4,0xad,0x17,0x19,0x31,0x9e -,0xa8,0x26,0x40,0x36,0xbe,0xb4,0xa2,0xa1,0x2c,0x16,0x2e,0xad,0x4e,0xc6,0xa5,0xc3,0x21,0xcf,0x97,0xbe,0x2e,0x2d,0xcb,0x2a,0x1c,0x9f,0x99,0xa5,0x39,0x5b,0x29,0x18 -,0xe2,0x9e,0x9e,0x1a,0x1b,0x52,0x9c,0x9f,0xaf,0xa8,0x19,0x15,0x38,0x96,0xab,0x2e,0xdc,0x30,0x43,0xd0,0x9b,0xae,0x1a,0x19,0x50,0xa5,0x3b,0x6a,0xa9,0xcc,0x24,0xa6 -,0x99,0x20,0x1b,0x1e,0xad,0xac,0x67,0xce,0x3f,0xcf,0x42,0xa0,0xa6,0x26,0x1f,0x4b,0xa9,0xba,0xb3,0xa9,0xa3,0x66,0x4c,0xb6,0x1f,0x1c,0x3b,0x9d,0x52,0x1a,0xdb,0xb7 -,0xa8,0xbe,0xa7,0x43,0x13,0x1f,0x9c,0x9c,0x33,0xdb,0xff,0x63,0x2a,0xa4,0xa0,0x2b,0x1b,0x1e,0xa5,0xa9,0xbf,0x54,0x3c,0x3f,0xb7,0x9a,0xba,0x1a,0x1b,0x2b,0xd0,0xac -,0xa5,0xa2,0xed,0x1e,0x22,0xc2,0xba,0xc0,0xc2,0xbe,0x1e,0x18,0xae,0x96,0x9c,0x6c,0x35,0x29,0x1e,0x3e,0xa6,0xaa,0x49,0x3c,0xbe,0xc9,0x2b,0xba,0xa4,0xdc,0x32,0x2a -,0xac,0xbf,0xd1,0xb3,0x56,0x39,0x2b,0xaa,0xb1,0x23,0x24,0xc5,0xb4,0xb1,0xae,0xb7,0xbd,0x1e,0x4d,0xa0,0x4d,0x25,0x32,0xdf,0x2c,0x39,0xa5,0xa3,0xb2,0x3f,0x1b,0x23 -,0xd9,0xb0,0xaa,0x58,0x41,0xb5,0xa7,0xca,0x26,0x5a,0x50,0x38,0x44,0x2f,0xc0,0xc4,0x40,0xce,0xb0,0xc5,0x5c,0xc7,0x39,0x1d,0x26,0xa6,0x98,0xab,0x76,0xdc,0xe2,0x37 -,0x61,0xab,0x36,0x2c,0xda,0xb3,0xee,0x30,0xbb,0xb0,0xbc,0x39,0x47,0x3b,0x34,0xc6,0xc9,0x2a,0x4b,0x9f,0x9f,0xbb,0x1e,0xcc,0x49,0x25,0x3a,0x65,0xbb,0xcb,0x52,0x45 -,0xb8,0xcf,0xae,0xb0,0x49,0x20,0x38,0xac,0xac,0xa6,0x46,0x20,0x28,0x4b,0xba,0xf4,0x1e,0x27,0xd2,0x9f,0xae,0x4b,0xb3,0xbf,0xbf,0xbf,0x2d,0x30,0x5d,0x2c,0xdb,0x61 -,0xc8,0xa5,0xa3,0xd0,0x1f,0xc3,0xa1,0xb3,0x39,0x2c,0x2a,0xf1,0xbe,0xbb,0xb9,0x31,0xd6,0xbe,0x26,0x22,0xbd,0xac,0xcf,0xbf,0xb6,0xc4,0xbf,0xdf,0xb7,0x35,0x17,0xd3 -,0x9c,0xbe,0x25,0x24,0xce,0x9f,0xa6,0x66,0x20,0x1c,0x54,0xc1,0xd0,0xd5,0xb3,0xb3,0xb3,0xd2,0x30,0xb6,0xbb,0xbd,0x39,0x18,0x1d,0xce,0xac,0xb9,0xbb,0x31,0xf7,0xb4 -,0xad,0x67,0xc7,0xb4,0x29,0x53,0xac,0xc2,0x35,0x44,0xbf,0xc6,0x26,0x2e,0xbb,0xb2,0x3c,0x2d,0xaa,0x9c,0xb2,0x2f,0x26,0x2a,0xc1,0xae,0xb0,0x32,0x5e,0xad,0xbe,0x4a -,0x27,0xb0,0xb0,0x60,0x2d,0x22,0x25,0xb2,0xac,0x47,0x4a,0x2d,0x9d,0x98,0xcc,0x23,0x26,0x5d,0xaa,0x9f,0x42,0x19,0x1f,0xba,0xaa,0xbe,0x4d,0x30,0x2e,0xc2,0x56,0x2e -,0xab,0x9d,0xb4,0x4f,0x29,0x24,0xe0,0x57,0x5d,0x42,0x36,0xb8,0x9e,0xaa,0x3b,0xae,0xa9,0x55,0x23,0x50,0xb2,0x39,0x2c,0x3a,0xb8,0xc0,0xae,0xce,0x2c,0x1c,0x3b,0x9f -,0x9f,0x9f,0x26,0x11,0x3a,0x9e,0x9f,0xc9,0x28,0x3a,0xc7,0xe6,0x28,0x26,0xb0,0x9d,0xb2,0x3b,0x1e,0x1f,0xa6,0x9f,0xad,0xf2,0x2a,0x3b,0x9c,0xae,0x16,0x2f,0xc7,0xc0 -,0x3c,0x2e,0x2a,0x26,0x2e,0xaf,0x97,0xa4,0xaf,0x2a,0x29,0xc1,0xb0,0x97,0xa4,0x20,0x18,0x30,0xb9,0xad,0xba,0x21,0x24,0xe6,0x96,0x98,0x2b,0x1c,0x34,0xac,0xae,0xe1 -,0x28,0x39,0xbc,0xad,0xab,0x44,0x36,0x3c,0x43,0x2d,0x26,0xac,0xa3,0xa8,0xaf,0x38,0x1e,0x32,0xb8,0xde,0xa2,0x42,0x23,0x36,0xba,0xbb,0xb6,0x9e,0xc6,0x34,0x17,0x2b -,0x4f,0x44,0xe5,0xc9,0xa7,0xae,0xb0,0xb5,0x28,0x11,0xc9,0x95,0xac,0x24,0x11,0x25,0x9e,0x96,0x9f,0x43,0x2e,0xc8,0xc5,0x29,0x2b,0x53,0xd8,0x9e,0xa7,0xcb,0x2e,0x29 -,0x2e,0xcc,0xa3,0xcc,0x2c,0x2c,0xc3,0xbe,0xa0,0x9f,0xf5,0x29,0x18,0x2e,0xaf,0xce,0x42,0xb7,0xaa,0xc4,0xc1,0x3a,0x19,0x1b,0xb3,0x94,0xa9,0x22,0x17,0x3f,0x94,0x8d -,0xad,0x2a,0x26,0x20,0xbc,0x51,0x1b,0x23,0xe0,0x9c,0xa9,0x30,0x19,0x1b,0x2f,0xa5,0x96,0xba,0x2e,0x2d,0x9f,0x9a,0xa4,0xae,0x2d,0x23,0x23,0x31,0x28,0x30,0x31,0xb8 -,0x97,0x95,0x94,0x51,0x0f,0x17,0xab,0x9a,0xa7,0x1e,0x12,0xe7,0x98,0x9f,0x2d,0x28,0x2a,0x42,0xac,0x71,0x1c,0x26,0x9d,0x8c,0xa1,0x1b,0x11,0x42,0xa3,0x9c,0x9b,0x27 -,0x0f,0x1a,0x9f,0x97,0xaa,0x24,0x1f,0x31,0xc5,0x9f,0x3a,0x22,0x29,0xb5,0x9d,0x9f,0x34,0x16,0x17,0x3a,0x99,0x97,0xa5,0x18,0x16,0xb3,0x98,0x9e,0x3e,0x2e,0x3e,0xce -,0xa6,0xb4,0x2c,0x28,0xb2,0x99,0xc5,0x15,0x0f,0x44,0x9d,0x9f,0xad,0x4c,0x2b,0xb6,0x93,0xbd,0x1b,0x12,0x33,0x94,0x9f,0x2e,0x1d,0x38,0xd6,0xaa,0x9b,0xba,0x18,0x18 -,0x33,0xae,0x99,0x9b,0xbb,0x15,0x17,0xb3,0x94,0xa7,0x26,0x24,0x39,0xbc,0xbb,0x46,0x2c,0x30,0x4c,0xa7,0x3f,0x1b,0x35,0xb4,0xaf,0xa8,0xa4,0xa9,0xb8,0x3b,0xd5,0x2b -,0x25,0x1e,0xac,0x8f,0x4f,0x13,0x1d,0xa7,0xa5,0xa4,0xb5,0x26,0x12,0x33,0x97,0x92,0xab,0x42,0xa9,0xc5,0x26,0x1e,0x3d,0x31,0x1f,0x2f,0xa6,0xb6,0xab,0x9d,0x5a,0x1f -,0x21,0xaf,0xaf,0x32,0x1f,0x44,0xb4,0x9f,0xac,0xa5,0xb8,0x1c,0x2d,0x1e,0x20,0x3a,0x97,0x97,0x21,0x17,0xbb,0x8c,0x9b,0x2c,0x17,0x16,0x22,0x31,0xba,0xa5,0xbd,0x4c -,0x97,0x9c,0x21,0x30,0x5c,0x3c,0x36,0xbf,0x9a,0xa2,0x27,0x2b,0xb4,0xbf,0x2b,0x33,0xb2,0x2e,0x14,0x39,0x96,0x96,0x9e,0x9c,0x2c,0x0e,0x30,0xcd,0xad,0x3f,0x3d,0xb1 -,0x3d,0x2f,0x4d,0x9b,0xcb,0x1e,0x1c,0x65,0xbc,0xac,0x97,0xbe,0x1a,0x27,0x94,0x9a,0x33,0x18,0x18,0x43,0xb3,0x5d,0xa8,0xb4,0x27,0x2d,0xad,0xed,0x21,0xc1,0xa5,0x35 -,0x16,0xdb,0x93,0x90,0x49,0x2d,0x37,0x64,0xee,0x21,0xb0,0x45,0x2f,0xa2,0xa9,0x1c,0x2e,0x9f,0x4b,0x28,0x4f,0xa3,0xa6,0x64,0x53,0xbe,0xe8,0x73,0xa7,0xdc,0x1c,0x15 -,0x35,0x98,0xb9,0x3f,0xb4,0x28,0x17,0xba,0x9a,0xa1,0xb0,0x42,0xd7,0x2e,0x2a,0x48,0xaa,0xb1,0x1b,0x17,0xfa,0x9f,0xae,0xa4,0x9f,0x21,0x1c,0xb9,0xa4,0xba,0x1c,0x1f -,0xcd,0xae,0xbb,0xb7,0xb7,0x38,0x23,0xd3,0xb4,0x24,0xbf,0xa0,0x56,0x23,0xab,0x95,0xab,0x41,0x28,0x25,0x23,0x38,0x4e,0xbb,0xc9,0xb9,0x9e,0xf4,0x18,0x28,0x9d,0xac -,0x21,0x34,0xb0,0x9b,0x9b,0xd6,0xcd,0x2f,0x33,0x36,0x23,0x20,0x17,0x32,0x8f,0x8f,0xd7,0xe0,0x3b,0x21,0x2d,0xa5,0x9c,0xc0,0x23,0x1d,0x4a,0xe4,0xab,0xa5,0xed,0x16 -,0x14,0xc3,0x9a,0xa6,0xb2,0xa0,0x35,0x24,0xc8,0xfc,0x3c,0x3c,0x5a,0x52,0x32,0xbf,0xa9,0x9f,0xa4,0x32,0x32,0x29,0x21,0x6b,0xa5,0x49,0x19,0x43,0x9d,0x98,0xa7,0x32 -,0x23,0x3c,0xd8,0xf0,0x5a,0x49,0x28,0x2b,0x9c,0x9d,0x39,0x3a,0x3c,0x1c,0x23,0xa3,0x94,0xa1,0x28,0x35,0xbd,0xa8,0xbe,0x1c,0x1a,0x1b,0x3e,0x9c,0xa0,0xf6,0xb5,0x9f -,0xcc,0x2f,0xe8,0x3f,0x44,0xbf,0x37,0x1c,0x24,0xa6,0x9d,0xaa,0xe1,0x2b,0x2e,0xcd,0xbf,0xae,0xbb,0x25,0x1f,0x47,0xa4,0x9f,0xab,0x38,0x2c,0x2d,0xdd,0xbe,0xdc,0xc4 -,0x1c,0x2d,0x9b,0x99,0x41,0x24,0x2d,0x1e,0x3c,0xa0,0x9c,0xbb,0x31,0xc2,0xaa,0xaf,0xc9,0x20,0x23,0x2a,0x2b,0xba,0xab,0xc1,0xc1,0xba,0x3d,0x3e,0xe4,0xb3,0xb7,0x4d -,0x25,0x26,0xb3,0x9d,0xb3,0x37,0x39,0x20,0x3d,0xa2,0xa3,0xdd,0x30,0x23,0x1c,0xb3,0x98,0x98,0xc3,0x1f,0x23,0x30,0xb2,0xbb,0x49,0x3a,0x31,0xb7,0x9c,0xac,0x2a,0x2a -,0x54,0x37,0x2d,0x56,0xb7,0xb0,0xab,0xa5,0xa8,0xed,0x1a,0x1a,0x3d,0xfa,0x3d,0xbc,0x9d,0xba,0x2f,0x26,0x3b,0xb6,0x9e,0xa1,0x60,0x28,0x1b,0x1f,0xc7,0x93,0xa1,0x5f -,0x2e,0x1f,0x41,0xb3,0xa4,0xbc,0x2f,0x1a,0x1c,0xb1,0x93,0x97,0xc6,0x2b,0x25,0x2b,0x37,0x3d,0xd7,0xc8,0xd2,0xac,0x9c,0xbb,0x1a,0x27,0x49,0x3b,0x6b,0xaf,0xab,0x38 -,0x3d,0xc4,0xa6,0x9b,0xad,0x2a,0x15,0x12,0x29,0x9f,0x95,0x9c,0x34,0x24,0x29,0x33,0xa9,0xa8,0xce,0x27,0x2b,0xbb,0x9f,0xaf,0x36,0x45,0x3d,0x4e,0xab,0x9f,0x3d,0x18 -,0x1b,0x25,0xb5,0x96,0x91,0xbe,0x1a,0x3e,0x4f,0x2e,0x3e,0xf3,0xce,0x2f,0x6d,0x9f,0x9b,0xad,0x2f,0x26,0x1d,0x17,0x29,0x98,0x8c,0x9f,0x29,0x2a,0x3f,0x2e,0x42,0xb7 -,0xba,0x21,0x22,0xae,0xa7,0x4f,0x38,0xb3,0xab,0xb2,0xce,0x35,0x19,0x1c,0x5d,0xa4,0x91,0x9a,0xeb,0x1d,0x17,0x3e,0xba,0xaf,0xb0,0x38,0x2f,0x23,0x35,0xa9,0x9a,0x9c -,0x56,0x2b,0x2c,0x26,0x27,0x64,0xa3,0xa9,0x47,0xb1,0xa8,0x34,0x2a,0x2e,0x24,0x20,0xb0,0x92,0xa8,0x26,0xd8,0xa6,0xc6,0x4f,0x27,0x20,0x1d,0x42,0x97,0x9b,0xa5,0x2b -,0x1f,0x2d,0x28,0xa9,0xa0,0xaa,0x35,0x16,0x1c,0xed,0x99,0x9a,0xa0,0xa3,0x3f,0x23,0x29,0x27,0x20,0x2f,0xac,0xa1,0xb1,0xaf,0xe6,0x24,0x4c,0xb5,0x37,0x2c,0xd6,0xb3 -,0x3b,0x26,0xa3,0x8f,0xa3,0x2f,0x1b,0x1b,0x14,0x1e,0x9d,0x8f,0x9d,0x3f,0xb7,0xb8,0x2c,0x29,0x1d,0x37,0xed,0x4b,0xa4,0xa4,0xb0,0xdb,0xcd,0xc8,0x27,0x3b,0xe6,0x24 -,0x1c,0x60,0xa7,0x9f,0x98,0xa0,0x31,0x23,0x3a,0x67,0x3d,0x26,0x34,0x41,0x44,0x5d,0x9b,0x91,0xad,0x25,0x15,0x1b,0x1f,0xae,0x96,0xa0,0xb3,0x31,0xc3,0xa9,0x37,0x1d -,0x1e,0x3c,0x3e,0xcf,0x98,0xab,0x2f,0xcd,0x9a,0xaf,0x1b,0x2e,0x2f,0x16,0x1d,0x9c,0x89,0x97,0xb2,0x2c,0x15,0x15,0x21,0xa8,0x9f,0x32,0x2d,0x7a,0xd8,0xa8,0x94,0xa6 -,0x3f,0xdc,0x34,0x18,0x0f,0x31,0x9f,0xa4,0x9d,0xce,0xb0,0xa1,0x27,0x16,0x26,0x3e,0x25,0xa8,0x97,0xcc,0xd7,0xaa,0x99,0xbb,0x0e,0x1f,0xd7,0x1f,0x1b,0xbd,0x8a,0x8f -,0xcc,0x42,0x3c,0x10,0x15,0xae,0x6a,0x26,0xbf,0x9d,0x9b,0xa3,0x9d,0xa4,0x26,0x13,0x16,0x1c,0x16,0x2f,0x9c,0x8e,0x9a,0x49,0x99,0xa5,0x15,0x19,0xe1,0x6a,0x2c,0x68 -,0xd1,0x49,0xab,0xa5,0x9a,0xa4,0x15,0x17,0x21,0x1e,0x26,0x9e,0x8e,0x98,0xa8,0xac,0x3c,0x0d,0x10,0x71,0xcc,0x4a,0xbc,0x9c,0x8c,0xa4,0x1d,0x3e,0x7e,0x15,0x1d,0x2d -,0x0e,0x1c,0x96,0x83,0x89,0xc8,0xaa,0xd2,0x0a,0x0a,0x1b,0xc9,0xaf,0x47,0x42,0xa2,0xa1,0x9d,0x8d,0xbd,0x0f,0x23,0x28,0x0f,0x1d,0x9c,0x8b,0x9a,0xad,0xac,0x28,0x0f -,0x1a,0x36,0x56,0x2e,0x20,0x98,0x89,0x9f,0xc9,0xa8,0x4a,0x13,0x11,0x16,0x13,0x2b,0x99,0x87,0x84,0x9d,0x5c,0x24,0x0d,0x08,0x19,0xbe,0x4b,0x2d,0xa5,0x8e,0x97,0x95 -,0x8d,0xc6,0x0a,0x0c,0x11,0x17,0x26,0xaf,0x8d,0x8f,0xac,0xac,0xb5,0x19,0x18,0xbb,0xa3,0x1e,0x0f,0xa1,0x8b,0xac,0xda,0xc9,0x33,0x29,0x1c,0x0f,0x15,0xe7,0x99,0x86 -,0x8a,0xa6,0xa3,0x3e,0x0c,0x08,0x1c,0x4b,0x18,0x1b,0x9c,0x89,0x8d,0x99,0xb8,0x3a,0x19,0x0e,0x1e,0x32,0x18,0x3e,0x88,0x85,0x9d,0x50,0x2e,0x11,0x13,0x2c,0x30,0x1d -,0x17,0xaa,0x8d,0x96,0xa4,0xae,0xc1,0x2d,0x1b,0x26,0x2b,0x24,0xa8,0x87,0x8f,0x3c,0x49,0x1e,0x0e,0x12,0x25,0x27,0x1e,0x2c,0x99,0x84,0x8c,0xa0,0xd0,0xba,0x1f,0x0b -,0x10,0x1b,0x17,0x6e,0x8a,0x87,0x8b,0xaa,0x12,0x0c,0x16,0x18,0x20,0x1d,0x23,0x92,0x84,0x8e,0xbc,0xb9,0x9d,0x41,0x0e,0x0a,0x0f,0x23,0xa8,0x8c,0x90,0xa1,0xea,0x2d -,0x26,0x19,0x22,0x32,0x2f,0x1f,0xa8,0x88,0x8c,0xa2,0xf2,0xfa,0x26,0x19,0x0e,0x0a,0x1c,0x9b,0x8a,0x8b,0x99,0x3a,0x24,0x34,0x2b,0x13,0x19,0x1d,0x20,0x9a,0x89,0x8f -,0xa0,0xb5,0x4c,0x4f,0x19,0x07,0x10,0x2f,0xbd,0x8d,0x84,0x94,0x24,0x1d,0x39,0x22,0x1b,0x12,0x19,0x58,0x95,0x98,0x98,0x91,0xf4,0x25,0xaa,0x9f,0x1d,0x0b,0x0d,0x20 -,0x61,0x96,0x88,0x9f,0x18,0x1a,0x22,0x26,0x39,0x0c,0x07,0x92,0x81,0x87,0x82,0x8f,0xb4,0xcc,0x0f,0x00,0x14,0x90,0x9e,0x23,0xa1,0x84,0x4a,0x00,0x0c,0x98,0x9f,0x38 -,0x26,0x00,0x24,0x80,0x81,0x89,0x88,0x83,0x44,0x00,0x05,0x0c,0x06,0xaf,0x85,0x1f,0x1c,0x89,0xc6,0x00,0x1d,0x95,0xa8,0x1c,0x0f,0x9b,0x84,0x81,0x84,0x18,0x02,0x95 -,0x9c,0x02,0x07,0xb5,0xa0,0x53,0x20,0xc4,0x85,0x8d,0x77,0x1c,0x0b,0x08,0x0d,0x07,0xac,0x80,0x81,0x83,0xa0,0x08,0x17,0xcb,0x0f,0x12,0x6f,0x46,0x21,0xa7,0x8d,0xc2 -,0x0f,0x46,0x9e,0x09,0x0c,0xbe,0x16,0x9d,0x80,0x9c,0xc6,0x84,0x89,0x2b,0x0b,0x0f,0x10,0x04,0x11,0x8a,0x8d,0x99,0x88,0x24,0x00,0x14,0xa9,0x1a,0x1e,0x9e,0x8a,0x8f -,0x9e,0x93,0x9f,0xb5,0x8a,0xc0,0x00,0x02,0x26,0xab,0x30,0xa2,0x8b,0x85,0xa8,0x08,0x0d,0xe4,0xa0,0x18,0x03,0xc2,0x81,0x84,0x8f,0x9b,0xb9,0xab,0x13,0x00,0x08,0x9b -,0x89,0x8f,0x99,0x1f,0x1d,0x3c,0x38,0xf3,0x2f,0x1f,0x3a,0x08,0x0f,0x8a,0x80,0x83,0x82,0x9e,0x06,0x06,0x0d,0x06,0x06,0xac,0x83,0x99,0x22,0xa0,0x9c,0x41,0x9c,0xbf -,0x0a,0x0b,0xc4,0x9a,0xa1,0x8e,0x89,0x9f,0x1d,0x1c,0x12,0x09,0x1e,0xcd,0x2b,0x2c,0x95,0x88,0x86,0x8f,0x28,0x18,0x0a,0x03,0x05,0x13,0x90,0x80,0x89,0x43,0xb4,0x8b -,0xa5,0x0f,0x08,0x19,0xb6,0x29,0x0d,0xb1,0x87,0x8f,0xbb,0x1a,0x12,0x1b,0xc9,0x22,0x0b,0xb0,0x88,0x93,0xb3,0x8c,0x8a,0x9f,0x20,0x08,0x01,0x06,0x93,0x84,0x9b,0xc6 -,0x94,0xa2,0x09,0x03,0x12,0x98,0x8b,0xac,0x16,0x20,0x8e,0x85,0x8d,0xa1,0xda,0x14,0x02,0x01,0x10,0x9b,0x89,0x86,0x9a,0x2a,0xa3,0xa0,0x1d,0x14,0x1f,0x0e,0x13,0x45 -,0x9b,0x8c,0x86,0x89,0x9f,0x1d,0x03,0x05,0x21,0xa5,0x9f,0x97,0x91,0x44,0x19,0x2c,0xef,0xac,0xbb,0x27,0x09,0x08,0x58,0x8c,0x86,0x86,0x83,0xa5,0x06,0x00,0x10,0x49 -,0xd8,0x9d,0x9c,0x9e,0x90,0x8d,0xa1,0x17,0x15,0x2b,0x1e,0x11,0x1b,0x6d,0x91,0x86,0x9b,0x16,0x1f,0xad,0x19,0x0b,0x14,0x2d,0xac,0xde,0xbd,0x94,0x85,0x8a,0x5a,0x09 -,0x05,0x11,0x1a,0x15,0xd4,0x87,0x83,0x8d,0x9c,0xb6,0x32,0x31,0xf0,0x26,0x0e,0x19,0xca,0x9b,0x9c,0x2e,0x1f,0x1c,0x0e,0x16,0x3d,0x39,0x21,0xdd,0x97,0x8d,0x84,0x82 -,0x8b,0x48,0x10,0x0c,0x05,0x07,0x2b,0x94,0x8d,0x8f,0xad,0x1a,0x16,0x1e,0x2a,0xb5,0xb9,0x2a,0x1a,0x30,0xa4,0x96,0x8e,0x91,0xab,0x13,0x0a,0x10,0x1c,0x2c,0xae,0x8d -,0x8d,0xaf,0x38,0x2b,0x55,0x9a,0xa1,0x14,0x05,0x1b,0x94,0x87,0x89,0x9a,0x53,0x19,0x09,0x0b,0x3a,0x99,0x98,0xaa,0x2c,0x19,0x1c,0x3e,0xbb,0xc4,0xb2,0xb2,0x1e,0x0d -,0x15,0x9f,0x86,0x82,0x88,0xb9,0x16,0x0f,0x18,0x1d,0x26,0xc8,0xab,0xac,0x44,0x26,0x38,0xb9,0xad,0xdd,0x21,0x17,0x1d,0x4b,0x9d,0x8f,0xa6,0x1c,0x1f,0xc2,0xab,0x9f -,0xa7,0x29,0x1b,0x2d,0xa7,0x93,0x96,0xa2,0xcf,0x27,0x15,0x0f,0x0f,0x24,0xab,0x99,0x95,0x9d,0xb5,0xdf,0x35,0x2d,0xbf,0xb0,0x3f,0x1b,0x1d,0xb9,0xa3,0x4d,0x1f,0x25 -,0xc0,0x9f,0xb4,0x24,0x23,0x63,0xa8,0x9d,0x9d,0x99,0x8f,0x90,0x51,0x0a,0x03,0x0c,0xdf,0x9d,0xa0,0xb0,0x27,0x19,0x20,0x6a,0x9f,0x90,0x95,0x4b,0x1a,0x2e,0xaa,0x9d -,0x9d,0xa6,0xc1,0x4d,0x28,0x14,0x16,0x2c,0xae,0x9d,0xab,0x75,0x57,0xd4,0xaf,0xb3,0x26,0x10,0x12,0x1d,0x59,0x96,0x8d,0x91,0xa2,0x3d,0x1d,0x26,0x6e,0xb0,0xa5,0xb5 -,0x29,0x11,0x0d,0x22,0x99,0x8b,0x95,0x3d,0x10,0x0c,0x1a,0xcc,0x90,0x85,0x8a,0xb0,0x19,0x18,0x2b,0x6d,0x65,0x26,0x1c,0x36,0xc2,0x3e,0x3d,0xba,0xa2,0x9e,0xc7,0x1d -,0x1b,0x5f,0x9d,0x99,0xb9,0x32,0x62,0xbb,0xb9,0xad,0xca,0x28,0x1b,0x16,0x1e,0xb2,0x94,0x94,0xa6,0x3f,0x1e,0x17,0x19,0x20,0x6b,0xa3,0x9c,0xa5,0x75,0x41,0xa7,0x93 -,0x96,0xb5,0x1f,0x13,0x23,0xd9,0x3c,0x27,0x27,0x2d,0x49,0xb4,0xb6,0x50,0x37,0x31,0x52,0x9f,0x95,0x99,0x9b,0xa2,0xb8,0x33,0x10,0x0b,0x1d,0xc7,0xa3,0xab,0x2b,0x22 -,0xda,0xad,0xad,0xa1,0x9e,0xca,0x23,0x19,0x1f,0xc8,0x98,0x95,0xb0,0x48,0x36,0x21,0x1f,0x2a,0x52,0xa9,0xbb,0x25,0x26,0xbb,0x94,0x93,0x32,0x0e,0x14,0x2b,0xb3,0x9d -,0xa3,0xb1,0xab,0xbb,0x53,0xbc,0xa9,0xa5,0xb5,0x2c,0x1a,0x18,0x1a,0x2f,0xab,0xa1,0xaf,0x4b,0x1f,0x19,0x2f,0xad,0x96,0x90,0x9a,0xad,0xba,0xbb,0x55,0x2f,0x2b,0x1e -,0x1b,0x1f,0x22,0x2d,0xaf,0xa5,0xad,0xac,0x5e,0x36,0xce,0xbb,0x7d,0xd6,0x3f,0x30,0xc7,0xae,0x9e,0x9b,0xcd,0x24,0x24,0x2b,0x3c,0x4e,0x6f,0xaf,0xa5,0xb8,0x28,0x18 -,0x1f,0x44,0xbd,0xda,0xed,0xb1,0xab,0xab,0xa5,0x9b,0x99,0xa1,0x36,0x16,0x19,0x28,0x2a,0x27,0x35,0x4f,0xb3,0xaf,0x41,0x42,0xcf,0xc3,0xce,0x44,0xd3,0xa0,0x95,0x9e -,0xb8,0xeb,0x26,0x1a,0x22,0x27,0x22,0x2b,0x28,0x2a,0x56,0xa8,0x9c,0x9a,0x9d,0xae,0x76,0x35,0x28,0x37,0xbc,0xbd,0xc7,0xbb,0xce,0xe1,0xd0,0x3c,0x34,0x4c,0x46,0x46 -,0xc3,0xb7,0xb5,0xca,0x33,0x34,0x2b,0x29,0x33,0x45,0xb8,0xa4,0xad,0xc1,0xa4,0x9c,0x9d,0xac,0x40,0x27,0x1a,0x14,0x17,0x29,0x54,0x43,0x33,0x71,0xb8,0xbc,0xb8,0xef -,0x44,0xa6,0x9a,0xab,0xbb,0xb3,0xad,0xab,0x5c,0x23,0x22,0x28,0x27,0x2a,0x2e,0x33,0xc7,0xb3,0xbd,0xac,0xa6,0xb2,0x50,0x3c,0x42,0xcb,0xb2,0xb0,0xbb,0xb3,0xa3,0xb9 -,0x2e,0x1f,0x1d,0x27,0x6c,0xc9,0x5e,0x4f,0x3d,0x4b,0xb7,0xaf,0xba,0x48,0x26,0x2c,0x70,0xbe,0xa4,0x9b,0x9d,0xa4,0xe3,0x3b,0xda,0x37,0x1d,0x18,0x16,0x1d,0x36,0x46 -,0xc7,0x9f,0xa2,0xbb,0xce,0xaf,0x9f,0xa0,0xaa,0xbd,0x76,0x55,0x53,0x32,0x35,0x39,0x26,0x1e,0x1a,0x21,0xca,0xa7,0xb9,0xb4,0xa9,0xa4,0xa2,0xb7,0x32,0x2e,0x3c,0x37 -,0x4f,0xbd,0xa9,0xa7,0xd3,0x31,0x48,0xe5,0xff,0x37,0x28,0x36,0x69,0x54,0x3b,0x3d,0x43,0xc8,0xbd,0xe1,0x50,0x45,0x50,0xb1,0xa0,0x9e,0x9d,0xa6,0xbf,0x2f,0x25,0x2f -,0x2f,0x26,0x27,0x22,0x1f,0x3f,0xb0,0xae,0xb5,0xbe,0xae,0xa9,0xc0,0xc9,0xab,0xa2,0xaa,0xb5,0x32,0x23,0x35,0x35,0x29,0x20,0x24,0x27,0x25,0x3d,0xa6,0x98,0x98,0xa7 -,0x3f,0x2d,0x3e,0x67,0xef,0x48,0x7a,0xb4,0xbb,0x40,0x3c,0xcb,0xb2,0xb2,0x4a,0x25,0x20,0x25,0x2d,0xe1,0xae,0xab,0xbf,0x39,0x5a,0xae,0xae,0xbf,0xd8,0x4f,0xc4,0xa5 -,0xa6,0xb4,0xd9,0x3f,0x3d,0x27,0x1c,0x1a,0x21,0x42,0xdd,0xdd,0xd2,0xb8,0xb6,0xa4,0xa0,0xad,0xaf,0xbd,0x58,0xe8,0xc2,0xcc,0xc6,0xde,0x33,0x2a,0x25,0x1e,0x1e,0x25 -,0xd0,0x9f,0xa8,0xde,0x3e,0xd6,0x9d,0x9a,0xb5,0x28,0x1f,0x2e,0xbf,0xac,0xb8,0xb3,0x65,0x36,0x76,0xbc,0xc4,0x35,0x21,0x1c,0x24,0x41,0xbf,0xd3,0x48,0xaf,0xa0,0xb6 -,0x41,0x2e,0xba,0x97,0x98,0xb0,0x49,0x37,0x2f,0x42,0x3b,0x28,0x1e,0x19,0x1a,0x2f,0xbd,0xa5,0xa4,0xab,0xa4,0x9b,0x9e,0x5f,0x2b,0x3e,0xad,0xae,0x5e,0x2c,0x1e,0x3a -,0xa8,0xb3,0x2d,0x1c,0x1b,0x25,0xd8,0xab,0xa8,0xad,0xbe,0xa7,0x9d,0xa2,0xc0,0x2b,0x21,0x2f,0xcd,0xb8,0xd1,0x27,0x2a,0xb2,0x9f,0xb6,0x29,0x19,0x21,0x6a,0xd5,0x71 -,0x5a,0xbe,0xab,0xab,0xce,0x4a,0xc5,0xb9,0xbb,0xca,0xc4,0xce,0x4d,0xb8,0xa8,0xbf,0x28,0x13,0x0f,0x1b,0xba,0xa1,0xc7,0x21,0x24,0x9e,0x8b,0x8f,0xa7,0x37,0x2a,0x33 -,0x4d,0xeb,0xd9,0x34,0x27,0x42,0xb4,0xb2,0x44,0x22,0x1e,0x2f,0xbf,0xae,0x48,0x2e,0xdc,0xa2,0x9f,0xac,0xba,0xbe,0xaf,0xbf,0x31,0x22,0x29,0x3d,0xec,0xbd,0xbe,0x3c -,0x1e,0x1f,0xc7,0x9c,0x9a,0xb4,0x23,0x17,0x24,0xac,0x9b,0x9f,0xae,0xbe,0xc5,0x4e,0x3f,0x53,0xcc,0xcc,0xed,0xe1,0x57,0x29,0x1a,0x19,0x22,0x38,0xcd,0xb2,0xab,0xa1 -,0x9b,0x9a,0xa1,0xc5,0x39,0x3d,0xcd,0xd2,0x36,0x22,0x1d,0x21,0x24,0x36,0xa7,0x95,0x95,0xaa,0x2d,0x18,0x16,0x25,0xe5,0xac,0xa2,0xa1,0xaf,0x48,0x32,0x54,0xaf,0xa9 -,0xbe,0x42,0x37,0x41,0x37,0x28,0x2c,0x4a,0xcf,0x4f,0x48,0xbe,0xa4,0xa1,0xb8,0x3c,0x2d,0x33,0xd4,0xab,0xa7,0xb3,0x4d,0x22,0x18,0x23,0xbc,0x9e,0x9f,0xc3,0x2e,0x27 -,0x24,0x1f,0x27,0xc5,0x9c,0x94,0x97,0xa1,0xbe,0x42,0x3e,0x3a,0x2b,0x27,0x2a,0x2e,0x31,0x30,0x30,0x2e,0x2e,0x3d,0xaa,0x91,0x8d,0x97,0x68,0x1b,0x16,0x1e,0x49,0xad -,0xa5,0xaa,0xb3,0x52,0x23,0x1e,0x33,0xb3,0xa2,0xa7,0xce,0x29,0x1d,0x1e,0x28,0xdb,0xa7,0xa7,0xc2,0xcc,0xa5,0x9e,0xac,0x38,0x25,0x31,0xe4,0xc1,0xc8,0xce,0x5b,0x2f -,0x23,0x23,0x3e,0xaf,0xa6,0xae,0x6f,0x34,0x30,0x30,0x3a,0xba,0x9e,0x9d,0xb6,0x30,0x2f,0xc1,0xae,0xcb,0x2e,0x29,0x43,0xdf,0xe1,0xc7,0xb5,0xbf,0x33,0x1f,0x1e,0x3e -,0xaf,0xab,0xac,0xaa,0xb0,0x47,0x24,0x25,0x4a,0xb1,0xb1,0xdf,0x3c,0x3e,0xc9,0xae,0xad,0xc4,0x44,0x42,0x2f,0x29,0x46,0xba,0xb6,0xd9,0x47,0xc9,0xa0,0x9b,0xa8,0x5b -,0x27,0x1e,0x1c,0x1e,0x2f,0xb1,0x9e,0xb2,0x2b,0x1c,0x24,0xbe,0x9b,0x96,0x9b,0xa7,0xcf,0x1f,0x17,0x27,0xbd,0xa5,0xa6,0xb6,0x5d,0x4b,0x4a,0x2a,0x28,0x35,0xd8,0xc1 -,0x52,0x43,0x38,0x3f,0x3d,0x29,0x24,0x3f,0xa5,0x9b,0xa3,0xca,0x4d,0x4d,0x2e,0x2e,0xbe,0xa5,0xac,0xe1,0x3f,0xde,0xaa,0xa1,0xa9,0xbb,0x59,0x31,0x26,0x22,0x37,0xaf -,0x9e,0xa8,0x46,0x28,0x28,0x41,0xda,0x65,0x33,0x2b,0x28,0x19,0x18,0x30,0xab,0x9e,0xa2,0xae,0xb5,0xae,0xa7,0xb2,0xca,0xca,0xb0,0xb3,0x3c,0x2b,0x2f,0x51,0x48,0x39 -,0x4e,0xb7,0x9e,0x9d,0xb0,0x34,0x2d,0x2d,0x1f,0x21,0x3e,0xd1,0xeb,0x53,0x4c,0x4e,0xcd,0xba,0x56,0x2d,0x29,0x3d,0x6c,0x52,0xb4,0xa0,0xa3,0xd9,0x28,0x29,0xd2,0x9e -,0x99,0x9f,0xaa,0xfb,0x27,0x1b,0x1f,0xd9,0xaa,0xa8,0xc0,0x38,0x29,0x2e,0x5a,0x3f,0x38,0x43,0xe5,0x42,0x2b,0x34,0xc7,0xa5,0xa5,0xb6,0xc7,0xaf,0xa2,0xa3,0xc0,0x36 -,0x2b,0x26,0x24,0x2d,0xec,0xbc,0xaf,0xbe,0x3f,0x33,0x49,0xcc,0xe0,0x3e,0x33,0x4a,0x4c,0x3d,0x59,0xc8,0xc1,0xbb,0xbc,0xcb,0xb8,0xa8,0xad,0xdd,0x2f,0x20,0x21,0x2e -,0x64,0xb4,0xab,0xac,0xf2,0x2e,0x2b,0xc6,0xa5,0xb0,0xc4,0xd5,0x3d,0x26,0x27,0x3a,0xbe,0xa4,0xa7,0xe6,0x3e,0xf9,0xb0,0xaf,0xc8,0x52,0x44,0x3f,0x3d,0x4d,0x52,0xc5 -,0xb1,0x4c,0x29,0x39,0xd7,0xe1,0x43,0x2f,0x29,0x28,0x29,0x35,0xc0,0xa5,0x99,0x9b,0xad,0xc4,0xc6,0xc7,0xf3,0xe0,0x5b,0x48,0xe7,0xbd,0xbe,0x5a,0x40,0x3c,0x33,0x35 -,0xd0,0xb2,0xca,0x36,0x23,0x1a,0x1c,0x30,0xc2,0xab,0xa3,0xa2,0xbd,0x34,0x39,0xaf,0x9d,0x9e,0xb4,0x2d,0x1e,0x1f,0x2a,0x40,0xb7,0xa1,0xad,0x34,0x27,0x2d,0x45,0xca -,0xb7,0xbd,0xfc,0x4f,0x39,0x39,0x43,0xc9,0xa6,0xa5,0xb2,0xc0,0xbd,0xb9,0xcf,0x34,0x26,0x35,0xce,0xba,0xbb,0xd6,0xd2,0xda,0x45,0x4a,0xc8,0xb5,0xcf,0x32,0x22,0x20 -,0x2b,0x46,0xbb,0xb0,0xad,0xad,0xcd,0x3b,0x5e,0xb3,0xad,0xbc,0x44,0x29,0x26,0x32,0x58,0xba,0xab,0xab,0xc9,0x34,0x2f,0x3e,0x5f,0xd7,0xfb,0x3c,0x30,0x2e,0x2e,0x31 -,0x3f,0xb3,0x9e,0xa3,0xad,0xa7,0xa4,0xad,0xd4,0x3b,0x38,0x3c,0x47,0x48,0x3c,0x3d,0x4b,0x4f,0x3f,0x46,0xe9,0xd7,0x4c,0x2d,0x26,0x2c,0x3c,0x4c,0xef,0xb7,0xa5,0xa0 -,0xa8,0xaf,0xad,0xae,0xe0,0x34,0x2d,0x30,0x45,0xf9,0xe7,0xf0,0x47,0x38,0x3e,0x44,0xc4,0xa6,0xaa,0xda,0x30,0x25,0x23,0x31,0xe8,0xb7,0xaa,0xa7,0xaa,0xc4,0x56,0xc9 -,0xbc,0xe4,0x4b,0x39,0x2f,0x34,0x35,0x31,0x38,0x4d,0xc3,0xb9,0xde,0x74,0xbc,0xba,0x59,0x27,0x1f,0x26,0x30,0x5d,0xb8,0xad,0xa5,0xa4,0xac,0xae,0xab,0xa8,0xb4,0x5a -,0x30,0x34,0x4d,0x67,0x3b,0x2d,0x3a,0xe6,0xc6,0xbe,0xb0,0xad,0xc5,0x2e,0x1e,0x1c,0x21,0x2f,0xcb,0xa9,0xa9,0xb7,0xd3,0x46,0x53,0xa8,0x98,0x9e,0xb9,0x3b,0x26,0x20 -,0x22,0x2d,0x46,0xd9,0xbe,0xbc,0xc9,0xeb,0x59,0x3e,0x38,0x47,0x56,0x6c,0xcf,0xc1,0xb9,0xb1,0xb1,0xb0,0xb1,0xb3,0xaf,0xbe,0x3e,0x2f,0x26,0x28,0x34,0x32,0x2b,0x2b -,0x3d,0xc6,0xb1,0xad,0xad,0xc1,0x34,0x27,0x30,0x4f,0xc8,0xc2,0x6e,0x45,0x50,0xbd,0xa5,0x9a,0x96,0x97,0xab,0x2e,0x1e,0x1e,0x29,0x30,0x2b,0x2c,0x34,0x4a,0xcc,0xbc -,0xb2,0xae,0xbd,0x48,0x33,0x34,0x49,0xc5,0xbc,0xce,0xd5,0xbd,0xb5,0xb1,0xaa,0xa8,0xba,0x2c,0x1e,0x29,0x36,0x4b,0x48,0x2c,0x20,0x23,0x47,0xa9,0x9b,0x9a,0xa4,0x77 -,0x31,0x35,0x3c,0x5b,0xc4,0xc6,0x44,0x2e,0x36,0xd4,0xa7,0x9f,0xa3,0xae,0x3e,0x1f,0x19,0x1d,0x3f,0xcf,0x40,0x2d,0x30,0xde,0xac,0x9f,0x9a,0x9a,0xac,0x3f,0x29,0x28 -,0x37,0x4e,0x3b,0x2a,0x34,0xbe,0xae,0xad,0xac,0xa7,0xac,0x4c,0x2f,0x30,0x31,0x38,0x35,0x2d,0x30,0xd9,0xa7,0x9f,0xa5,0xb3,0x65,0x2c,0x26,0x32,0xe9,0xb7,0xd0,0x29 -,0x1f,0x2f,0xbd,0xa5,0x9c,0x9d,0xa7,0xd7,0x39,0x2f,0x28,0x2c,0x39,0x2e,0x20,0x21,0x46,0xab,0x9e,0x9c,0xa1,0xb3,0xd3,0x3f,0x2e,0x2e,0x39,0x3d,0x29,0x26,0x40,0xaf -,0x9f,0x9e,0xa5,0xaf,0xc9,0x3e,0x2a,0x26,0x33,0x53,0x37,0x29,0x2e,0xd1,0xa3,0xa1,0xac,0xb9,0xba,0xc9,0x45,0x3f,0x49,0x3d,0x26,0x1d,0x2b,0xca,0xa5,0x9d,0xa2,0xbb -,0x3e,0x2f,0x2e,0x2f,0x3a,0xd9,0xb8,0x70,0x2d,0x2c,0xcc,0xa0,0x9b,0x9c,0xac,0x3e,0x24,0x20,0x2a,0x43,0xcd,0xda,0x34,0x2d,0x43,0xaf,0x9f,0x9f,0xaa,0xc0,0xed,0x37 -,0x23,0x1d,0x24,0x32,0x31,0x2d,0x34,0xd8,0xa6,0x9c,0x9f,0xab,0xac,0xae,0x6b,0x2b,0x2a,0x30,0x2c,0x29,0x32,0x5d,0xaf,0xa6,0xb7,0x45,0x44,0xbe,0xb5,0xc6,0xcf,0xc0 -,0x76,0x2c,0x2a,0x59,0xaa,0x9c,0x9d,0xb7,0x2d,0x22,0x27,0x2a,0x31,0x49,0xdf,0x5b,0x33,0x2f,0x47,0xb9,0xa4,0x9f,0xab,0xbe,0xde,0x34,0x27,0x2c,0x46,0xda,0x6c,0x53 -,0x70,0xba,0xa0,0x9e,0xbb,0x32,0x3d,0xd1,0x4f,0x32,0x2f,0x27,0x1d,0x1d,0x2b,0xea,0xa3,0x98,0x9b,0xa6,0xac,0xaa,0xc5,0x2d,0x28,0x31,0x2c,0x24,0x23,0x27,0x43,0xae -,0xa8,0xc4,0x4d,0xcf,0xb0,0xae,0xb1,0xba,0x5f,0x2e,0x2c,0x42,0xb9,0x9e,0x9c,0xaf,0x38,0x28,0x2a,0x2d,0x39,0xd4,0xce,0x4e,0x3d,0x31,0x2c,0x4e,0xa4,0x9c,0xa5,0xb9 -,0x61,0x2f,0x23,0x29,0x47,0x63,0x49,0x46,0x3d,0x49,0xad,0x9d,0xa2,0xb0,0xbe,0xce,0x46,0x2f,0x29,0x25,0x26,0x2c,0x2e,0x31,0xc2,0xa2,0xa8,0xb9,0xb7,0xac,0xaa,0xb7 -,0xc7,0x4f,0x2f,0x28,0x23,0x1f,0x34,0xac,0xa4,0xb1,0xcd,0x4d,0x3b,0x37,0x79,0xb6,0xca,0x4a,0x34,0x25,0x2c,0xad,0x9a,0x9c,0xaf,0x6a,0x3d,0x30,0x36,0xde,0xbe,0xd5 -,0x4f,0x36,0x28,0x2c,0xde,0xaf,0xae,0xb1,0xb9,0x55,0x2e,0x2d,0x31,0x3b,0xfc,0xec,0x3e,0x3e,0xaf,0x9c,0x9e,0xa7,0xb4,0xf8,0x5d,0xd0,0xf2,0x30,0x24,0x22,0x1c,0x18 -,0x28,0xb9,0xaf,0xb7,0xad,0xac,0xae,0xac,0xaf,0xbf,0x76,0x48,0x34,0x21,0x27,0xc3,0xac,0xb0,0xc5,0x3c,0x2f,0x37,0xd9,0xaf,0xb4,0xcd,0x3e,0x25,0x26,0xd1,0xa4,0x9f -,0xa3,0xbc,0x3a,0x2e,0x2b,0x38,0xd9,0xbb,0xc2,0x43,0x2e,0x3b,0xbc,0xaa,0xa8,0xad,0xc6,0x46,0x35,0x32,0x33,0x37,0x43,0x47,0x3d,0x3f,0xcb,0xb2,0xbc,0xce,0xdd,0x4b -,0x39,0x3e,0x53,0x52,0x58,0xc8,0xb4,0xb6,0xbc,0xba,0xc5,0xd7,0x78,0x37,0x28,0x26,0x2f,0x5f,0xb8,0xa8,0xa4,0xa9,0xb5,0xc9,0x4d,0x3c,0x3d,0x33,0x28,0x26,0x2b,0x3b -,0xca,0xae,0xa6,0xa8,0xad,0xb1,0xbc,0xce,0xea,0x49,0x30,0x2a,0x28,0x2c,0x3f,0xd8,0xbf,0xb9,0xbb,0xc6,0xc7,0xc8,0xea,0x53,0x55,0x64,0x6a,0x51,0x5f,0xea,0x6b,0x79 -,0xdb,0xe6,0xef,0xd0,0xdc,0x55,0x64,0xda,0x77,0x4c,0x51,0xec,0x7c,0x6c,0xee,0x59,0x55,0xd7,0xce,0xf6,0xe4,0xca,0xd4,0x7b,0x67,0x60,0x5b,0x6e,0xdc,0x71,0x51,0x76 -,0xe5,0x4e,0x47,0x62,0xea,0xdb,0xcd,0xd7,0x7e,0xf1,0xe0,0x6f,0x59,0x72,0xd5,0xd8,0x6e,0x57,0x54,0x61,0xed,0xeb,0xf4,0xde,0xd6,0xfb,0x53,0x49,0x54,0xdf,0xd9,0xe9 -,0xfe,0xe3,0xd6,0xed,0x59,0x66,0xed,0xe0,0xd9,0xde,0xee,0xdd,0xe0,0x57,0x4a,0x58,0xf9,0x6a,0x56,0x54,0x60,0x79,0xdc,0xe2,0x73,0xcf,0xbf,0xd2,0x54,0x58,0x72,0x66 -,0x5c,0x63,0x6a,0xf6,0xdc,0x70,0x4a,0x58,0xd4,0xe3,0x58,0xf1,0xce,0xdc,0x77,0x6b,0x5e,0x62,0xe3,0xd2,0xeb,0x5e,0x7a,0xf9,0x5d,0x61,0x7d,0xfb,0xdf,0xd2,0xe6,0x5e -,0x56,0x59,0x5d,0x5e,0xe2,0xce,0xdd,0x61,0x5b,0x60,0xf0,0xd5,0xdb,0xec,0xea,0xe2,0xe8,0x68,0x53,0x59,0xf4,0xf0,0x69,0x5d,0x5a,0x67,0xf2,0xf6,0x7c,0xea,0xcf,0xcd -,0xdb,0xe2,0xd7,0xe6,0x51,0x49,0x5a,0xec,0xe6,0x7e,0x5a,0x54,0xfe,0xde,0x66,0x5c,0xdc,0xc9,0xd3,0x6f,0x5d,0x68,0xe0,0xd2,0xe7,0x59,0x61,0xf3,0x5f,0x54,0x68,0xdf -,0xda,0xf1,0x6c,0xec,0xdc,0xef,0x5b,0x4e,0x5e,0xd8,0xdb,0x71,0x6f,0xec,0xdc,0xdd,0x6e,0x64,0xe3,0xd5,0xdd,0x70,0x56,0x5e,0x7d,0x60,0x61,0xfb,0x7d,0x6e,0x5c,0x57 -,0x7a,0xd7,0xd9,0xea,0xed,0xdd,0xcf,0xd9,0x66,0x64,0x6e,0x6d,0x66,0x55,0x56,0x77,0xe9,0xf3,0x63,0x55,0x69,0xd5,0xdb,0xee,0xdf,0xdd,0xe3,0xed,0x6c,0x6b,0xf3,0x78 -,0x5d,0x53,0x5a,0xdf,0xdc,0x6b,0x76,0xe5,0xe9,0xe9,0x6f,0x56,0x69,0xe1,0xfc,0x5c,0x5a,0xee,0xd1,0xdf,0x75,0xfe,0xfe,0xe4,0xda,0x68,0x5c,0xdc,0xdb,0x5e,0x53,0x5a -,0x7a,0xf0,0x62,0x57,0x59,0x7e,0xd9,0xe6,0xed,0xca,0xc6,0xeb,0x56,0x59,0x72,0xdc,0xec,0x5a,0x59,0x67,0x79,0x6c,0x5f,0xef,0xd9,0xf7,0x5b,0x53,0x5d,0xd8,0xca,0xd3 -,0xef,0x6b,0x6d,0xef,0xfd,0x65,0xef,0xdf,0x79,0x57,0x50,0x79,0xce,0xd4,0x72,0x5b,0x5e,0x6d,0x62,0x58,0x77,0xd3,0xd6,0x6c,0x55,0x6c,0xd3,0xcf,0xdd,0xfa,0x5e,0x5f -,0xf6,0xfa,0x7a,0xe5,0xe4,0x73,0x4f,0x48,0x56,0xea,0xdd,0xe5,0xf5,0xeb,0xd9,0xdd,0xf4,0xdf,0xd3,0xde,0x5c,0x48,0x54,0xd7,0xd7,0x61,0x58,0x68,0x7c,0x67,0x5b,0xfc -,0xd1,0xd6,0x6d,0x57,0x67,0xdc,0xd8,0xe5,0xe6,0xee,0x5c,0x59,0x5e,0x6d,0xdd,0xd5,0xe7,0x66,0x59,0x5d,0xf7,0xdb,0xdf,0x64,0x52,0x5b,0x78,0x6c,0xef,0xcf,0xd2,0xf5 -,0x65,0x61,0x7d,0xdd,0xdc,0xed,0xfe,0x72,0x64,0x5d,0x74,0xe4,0x6a,0x4f,0x54,0x5f,0x62,0xe8,0xcf,0xcf,0xd9,0xe8,0x6d,0xfe,0xdd,0xdb,0xf8,0x75,0x7b,0x54,0x46,0x55 -,0xd8,0xd8,0x7d,0x74,0x72,0x67,0x69,0x7d,0xdd,0xce,0xce,0xf3,0x51,0x59,0xe5,0xf1,0x66,0xf2,0xe2,0x70,0x5f,0x65,0xec,0xd8,0xd9,0xf9,0x5b,0x58,0x6a,0x77,0x6f,0xeb -,0xe8,0x72,0x76,0xef,0xf5,0xe4,0xd7,0xdc,0x6c,0x56,0x63,0xe2,0xe2,0xf1,0xf4,0x76,0x5f,0x4f,0x4b,0x63,0xd4,0xd7,0xf4,0xff,0xfd,0xf2,0xea,0xeb,0xdd,0xd4,0xdc,0x63 -,0x53,0x5f,0xf8,0x65,0x5f,0xe7,0xed,0x58,0x5c,0xfa,0xea,0xee,0xfb,0xf6,0xee,0xe8,0xdf,0xde,0xdf,0xe1,0x66,0x4b,0x50,0xed,0xe6,0xea,0xde,0xe4,0x6c,0x5d,0x66,0x7d -,0xf8,0xe7,0xe3,0x69,0x55,0x56,0x5b,0x79,0xd0,0xcf,0xdc,0xe9,0x71,0x60,0x6b,0xe8,0xd5,0xda,0x69,0x58,0x5a,0x59,0x58,0x5c,0x7d,0xdb,0xf9,0x59,0x78,0xda,0xd9,0xd6 -,0xd9,0xed,0x74,0x6d,0x6e,0xed,0xe0,0xfd,0x4f,0x49,0x61,0xde,0xfe,0xfa,0xde,0xf3,0x5f,0x62,0x70,0xe5,0xd4,0xd4,0xdd,0xee,0x65,0x58,0x53,0x6d,0xcf,0xd4,0x73,0x59 -,0x52,0x55,0x7b,0xde,0xe5,0xf1,0xef,0x7c,0x67,0x65,0xff,0xf2,0xf1,0xdf,0xee,0x63,0x78,0xe2,0xf8,0x7a,0xe1,0xe8,0x61,0x65,0xe8,0xe0,0x6c,0x53,0x4c,0x4f,0xfa,0xd9 -,0xdf,0xe3,0xe1,0x6f,0x5b,0xfc,0xd1,0xce,0xd4,0xdd,0x7c,0x55,0x4e,0x4d,0x50,0xe9,0xcd,0xe0,0x56,0x58,0x70,0xf8,0xea,0xdb,0xdb,0xec,0x71,0x6e,0x68,0xfb,0xde,0xf9 -,0x5d,0x6a,0xe9,0xe6,0xef,0x75,0x73,0x7e,0x6b,0x59,0x5c,0xec,0xd1,0xdf,0x5a,0x53,0x5d,0x6c,0xdf,0xd2,0xd4,0xd9,0xf0,0x56,0x52,0xff,0xd5,0xdb,0x6b,0x61,0x62,0x5a -,0x55,0x60,0xed,0xd7,0xd7,0xf9,0x60,0x63,0x6d,0xeb,0xdd,0xdb,0xda,0xdf,0xf4,0x68,0x6d,0xf9,0x75,0x59,0x53,0x5d,0x71,0xee,0xdf,0xe8,0xfe,0x79,0xf9,0xea,0xdd,0xd5 -,0xdd,0x6b,0x59,0x5b,0x5e,0x6f,0xdc,0xd3,0xde,0x71,0x57,0x54,0x66,0xe2,0xdd,0xdc,0xdb,0xf1,0x57,0x4e,0x5d,0x7e,0xfa,0xf2,0xea,0xe4,0xe1,0xe6,0xed,0xea,0xde,0xe6 -,0x6b,0x5e,0x66,0x6b,0x64,0x5f,0x63,0x69,0x76,0xf3,0xe4,0xdf,0xe8,0x71,0x5f,0x65,0xf0,0xdc,0xd1,0xd1,0xe6,0x60,0x58,0x59,0x61,0x79,0xf0,0xed,0x74,0x61,0x5e,0x62 -,0x73,0xe3,0xda,0xd9,0xdc,0xf8,0x5a,0x5b,0x78,0xdf,0xde,0xef,0xfb,0x6c,0x5a,0x5d,0x77,0xee,0xea,0xf1,0xfe,0xed,0xe0,0x7e,0x60,0x63,0x70,0x7a,0x66,0x6b,0xe5,0xdf -,0xe5,0xe7,0xea,0xeb,0xe9,0xf1,0xf8,0xee,0x6a,0x54,0x4d,0x53,0x76,0xde,0xe0,0xe5,0xe8,0xf4,0xf3,0xf1,0xf3,0xe6,0xdf,0xde,0xdf,0xfe,0x5b,0x57,0x5e,0x6a,0x79,0xf5 -,0xf2,0x6e,0x61,0xff,0xe1,0xea,0xf1,0xea,0xf2,0xec,0xe8,0x6a,0x57,0x61,0xe4,0xdd,0xe1,0xda,0xdf,0x61,0x55,0x5b,0x60,0x68,0xed,0xdc,0xd9,0xdc,0x7a,0x51,0x4f,0x6d -,0xdc,0xe1,0xef,0xf9,0x62,0x5e,0xed,0xd4,0xd3,0xdb,0xed,0x6d,0x60,0x62,0x5f,0x5a,0x68,0xe1,0xe4,0x6f,0x6a,0x6b,0x67,0xfb,0xe3,0xe1,0xeb,0xf2,0xe0,0xd8,0xda,0xef -,0x5c,0x50,0x56,0x68,0xf3,0xe4,0x79,0x5d,0x69,0xf0,0xe8,0xdf,0xdd,0xe2,0xea,0x73,0x5b,0x58,0x67,0xe3,0xdb,0xdd,0xd7,0xe6,0x57,0x52,0x67,0xf4,0xec,0xef,0x6f,0x6e -,0xf0,0xf4,0x6d,0x6c,0xf7,0xed,0x7c,0xe6,0xda,0xfb,0x60,0x6e,0xf1,0xe6,0xe0,0xec,0x72,0x6c,0x6d,0x64,0x5c,0x61,0xfe,0xec,0xe1,0xda,0xea,0x5c,0x5c,0x76,0xe9,0xe5 -,0xe5,0xe0,0xe3,0xea,0xed,0x7b,0x66,0x61,0x5d,0x62,0xfd,0xef,0x6c,0x5f,0x6d,0xec,0xe0,0xde,0xe2,0xed,0xfd,0x76,0x69,0x62,0x69,0x75,0xdf,0xcf,0xd9,0x69,0x52,0x53 -,0x6b,0xe5,0xe2,0xee,0x7c,0x6a,0x60,0x63,0xfa,0xe7,0xfb,0xff,0xe0,0xe3,0x77,0x6f,0x6c,0x7e,0xdd,0xd9,0xe8,0x61,0x5c,0x72,0x79,0x64,0x63,0x5d,0x5e,0xdf,0xcd,0xde -,0x68,0x69,0x6e,0x68,0x6f,0xdd,0xd7,0xee,0x7d,0x77,0x5f,0x6f,0xe6,0x6e,0x67,0xde,0xe6,0x56,0x4d,0x60,0xe2,0xdd,0xdb,0xdf,0x6d,0x6b,0xdf,0xed,0x5f,0x6e,0xf3,0xf2 -,0xe3,0xe0,0xf0,0x63,0x5a,0x5e,0x61,0x66,0xea,0xde,0xfb,0x70,0xf6,0xea,0xfd,0x5e,0x74,0xd3,0xd5,0x7d,0x5c,0x52,0x5c,0xda,0xce,0xda,0x79,0x68,0x66,0x57,0x54,0x74 -,0xec,0xfa,0xe2,0xe2,0x6c,0x6f,0xe7,0xeb,0x6c,0x6e,0xdf,0xe7,0x5c,0x67,0xdc,0xe0,0xf2,0x6e,0x56,0x5f,0xd4,0xd3,0x63,0x4e,0x5c,0x71,0x64,0xee,0xcf,0xd4,0xea,0x7b -,0x58,0x52,0xf7,0xdb,0xe9,0xe9,0xdf,0xe4,0x64,0x54,0x5c,0xf2,0xdf,0xe8,0x5e,0x4f,0x5f,0xde,0xd9,0xea,0x73,0xec,0xd7,0xeb,0x5e,0x6b,0xea,0xfa,0x6b,0x6c,0xf7,0xe5 -,0xe1,0xf6,0x5f,0x5e,0x6e,0x5d,0x4f,0x6e,0xce,0xce,0xe6,0x6e,0x5f,0x5f,0xeb,0xd6,0xe6,0x63,0x6e,0xed,0x69,0x5e,0x7b,0xe4,0xde,0xdf,0x69,0x4d,0x51,0x78,0xf2,0x76 -,0xdd,0xd0,0xdc,0x79,0x75,0xf9,0xf6,0x75,0x5d,0x5b,0xea,0xcf,0xd7,0x62,0x57,0x65,0xfe,0xf6,0x6e,0x5e,0x5f,0x79,0xee,0xf6,0xfd,0xe2,0xcf,0xcf,0xf2,0x5c,0x5c,0x5e -,0x5c,0x69,0xdf,0xd5,0xdf,0x73,0x5f,0x66,0xee,0xee,0x57,0x4f,0xf7,0xd1,0xdb,0x70,0x70,0xe5,0xdd,0xe4,0x72,0x5b,0x5d,0xf1,0xe5,0x78,0x71,0xf5,0xf7,0xf3,0xe1,0xe3 -,0x6e,0x57,0x4e,0x4f,0x7d,0xca,0xc8,0xe2,0x66,0x79,0xfd,0x61,0x5b,0x61,0xf9,0xd8,0xd9,0x6a,0x56,0x6f,0xdb,0xdb,0xeb,0x6d,0x57,0x4f,0x56,0x74,0xde,0xd5,0xd7,0xe2 -,0xec,0xeb,0xec,0x73,0x5b,0x53,0x62,0xdb,0xd7,0x79,0x61,0xfc,0xe3,0xf1,0x61,0x54,0x58,0xf0,0xda,0xe2,0xf6,0xed,0xee,0x76,0xee,0xdd,0xf8,0x5a,0x55,0x5a,0x6b,0xde -,0xdb,0xed,0xeb,0xdf,0xef,0x5c,0x54,0x57,0x5f,0xee,0xd3,0xdb,0x6b,0x76,0xdd,0xdf,0x7c,0x5d,0x57,0x5e,0xf9,0xe2,0xe3,0xfb,0x6e,0x7a,0xf7,0xe1,0xdd,0x6b,0x50,0x51 -,0x63,0xe3,0xdd,0xe6,0xe5,0xdd,0xe3,0xf6,0x5f,0x52,0x5d,0xe4,0xd2,0xda,0x68,0x5a,0x73,0xe1,0xdf,0x7c,0x58,0x52,0x63,0x7d,0xea,0xda,0xd6,0xe5,0x70,0xf2,0xdb,0xf5 -,0x55,0x55,0x6e,0xe1,0xdf,0x67,0x54,0xfd,0xcd,0xcf,0x6a,0x4d,0x4e,0x5c,0xeb,0xd3,0xd6,0xeb,0xfe,0x73,0x6e,0xf3,0xee,0x63,0x5a,0x70,0xe4,0xe7,0x70,0x61,0x71,0xdc -,0xd2,0xe8,0x53,0x4b,0x5a,0xdf,0xd1,0xde,0x75,0x7e,0xe8,0xe8,0xee,0x72,0x5b,0x58,0x6a,0xe5,0xde,0xeb,0x7a,0x70,0xf3,0xe2,0xfb,0x5a,0x56,0x66,0xea,0xd8,0xdc,0x7a -,0x6e,0xec,0xda,0xda,0x6f,0x50,0x4e,0x67,0xdc,0xdd,0x6f,0x65,0xf3,0xe5,0xe9,0xf7,0x6a,0x5f,0x65,0xf2,0xdd,0xde,0xea,0xf5,0xff,0xfe,0xee,0x70,0x54,0x53,0xff,0xd8 -,0xd9,0xfd,0x5e,0x65,0xe7,0xd8,0xe0,0x67,0x59,0x5f,0x6f,0xed,0xe3,0xe7,0xe9,0xeb,0xfe,0x6e,0x73,0x6c,0x60,0x73,0xdd,0xdb,0x72,0x58,0x63,0xe2,0xda,0xec,0x65,0x5a -,0x5c,0x6d,0xe5,0xd8,0xdd,0xf2,0xfa,0xf0,0xf3,0xfc,0x6b,0x5e,0x71,0xde,0xec,0x5a,0x56,0x75,0xde,0xdf,0xe4,0xfa,0x59,0x53,0x7b,0xd5,0xd3,0xdd,0xf7,0x63,0x65,0x78 -,0xfb,0x72,0x6c,0x79,0x7c,0x69,0x6b,0x70,0x7e,0xdc,0xd3,0xe9,0x5b,0x56,0x65,0xe7,0xdb,0xe1,0xf9,0x64,0x60,0x7e,0xe2,0xdc,0xec,0x5f,0x5a,0x6d,0xf3,0xf5,0x7d,0xfc -,0xe5,0xe7,0x68,0x5a,0x60,0x7e,0xe5,0xde,0xe2,0x7b,0x5d,0x5f,0xea,0xd7,0xdd,0x75,0x5b,0x5c,0xff,0xf2,0x73,0x78,0xf3,0xef,0xfd,0x7a,0x7c,0x71,0x6e,0xf9,0xea,0xf5 -,0xff,0x79,0xfd,0xe3,0xe1,0x73,0x5a,0x5b,0x68,0xed,0xdc,0xe4,0x67,0x5c,0x75,0xe1,0xe0,0xe6,0xef,0x6f,0x5f,0x5f,0x63,0x7c,0xdc,0xdc,0x77,0x66,0x70,0x6f,0x69,0x7e -,0xdd,0xdb,0x7d,0x58,0x58,0x7d,0xd9,0xd8,0xef,0x65,0x62,0x62,0x6f,0xed,0xe6,0xe8,0xf1,0x72,0x68,0x75,0xf0,0xe9,0xec,0x71,0x66,0x60,0x5f,0x6f,0xed,0xe0,0xdd,0xf4 -,0x5d,0x5e,0x78,0xe5,0xdb,0xe6,0x6f,0x69,0x6b,0x73,0xfe,0xf3,0xe8,0xf0,0x64,0x5b,0x5f,0x6f,0xe8,0xdc,0xe3,0xee,0x7a,0x69,0x72,0xed,0xe5,0xed,0x6d,0x60,0x66,0x71 -,0xf1,0xde,0xe3,0x6f,0x60,0x61,0x6e,0xee,0xea,0xed,0xec,0xef,0x73,0x64,0x69,0xe9,0xde,0xf7,0x66,0x5e,0x62,0xf6,0xdf,0xdc,0xde,0xee,0x64,0x5c,0x63,0x74,0xf1,0xee -,0xf7,0x76,0x69,0x77,0xea,0xf1,0xfc,0xeb,0xeb,0x6c,0x5e,0x68,0xe9,0xda,0xdf,0x7e,0x63,0x64,0x7e,0xfc,0x6c,0x74,0x79,0x6a,0x73,0xea,0xe2,0xe3,0xf1,0x7d,0xff,0x6d -,0x6a,0x79,0xf2,0xe9,0xf2,0x6e,0x6c,0x6f,0x6e,0xf3,0xdf,0xea,0x71,0x5e,0x5e,0xf0,0xde,0xe3,0xf0,0x76,0x71,0x73,0x67,0x68,0xf5,0xee,0xeb,0xe9,0x7c,0x6f,0x78,0x76 -,0xfb,0xf2,0x6f,0x65,0x66,0x6c,0xf4,0xed,0xed,0xed,0x6f,0x6c,0xe7,0xe3,0xfd,0x6a,0x64,0x78,0xe9,0xf5,0x79,0xf3,0xf1,0xfc,0x6d,0x5e,0x60,0x6f,0xf4,0xe6,0xe8,0xf3 -,0xfd,0x6e,0x79,0xe4,0xe6,0x75,0x6e,0x6c,0x6c,0x76,0x79,0xfe,0xfc,0x7b,0xf6,0xee,0x79,0x68,0x66,0x71,0xe6,0xdf,0xf8,0x73,0x7b,0xf6,0xfe,0x67,0x61,0x6e,0xfd,0xef -,0xe5,0xe3,0xed,0x7b,0x6e,0x7c,0xef,0xfe,0x6a,0x64,0x68,0x7a,0xfe,0x6f,0x78,0xea,0xe2,0xe4,0xee,0x70,0x67,0x6c,0xf4,0xe6,0xed,0xf7,0xf1,0x7c,0x6b,0x6a,0x67,0x63 -,0x6e,0xed,0xe3,0xe5,0xef,0x73,0x67,0x7b,0xdf,0xe9,0x68,0x6c,0xf2,0xfd,0x71,0xfc,0xef,0xea,0xe8,0xef,0x76,0x68,0x62,0x5f,0x66,0xee,0xde,0xe5,0xfa,0xfe,0xf3,0xf5 -,0x6e,0x61,0x6a,0xf6,0xeb,0xe9,0xec,0xfc,0x7b,0xfd,0xfa,0xff,0x76,0x6f,0x6e,0x6e,0x6f,0x6e,0x6c,0x7c,0xeb,0xe5,0xe5,0xef,0x6d,0x64,0x6e,0xec,0xdf,0xe5,0xfa,0x77 -,0x6f,0x68,0x67,0x65,0x65,0x6f,0xef,0xe7,0xeb,0xf0,0xf2,0xfa,0xf7,0xeb,0xf5,0x66,0x65,0x76,0x79,0x71,0x7a,0xf2,0xf0,0xef,0xe6,0xe7,0x77,0x63,0x64,0x6b,0x7e,0xec -,0xed,0xf7,0xfc,0xfd,0x77,0x6c,0x6e,0xf8,0xe8,0xe6,0xe9,0xf4,0x73,0x6e,0x79,0xed,0xec,0x73,0x65,0x67,0x6d,0x7b,0xf3,0xf5,0xf7,0xec,0xeb,0xfb,0x77,0x7b,0x7a,0x7b -,0xef,0xe9,0xef,0xfd,0xfd,0x78,0x71,0x7e,0x77,0x5f,0x61,0xf5,0xe5,0xec,0xfb,0x78,0x77,0xf7,0xeb,0xed,0xf5,0xeb,0xe9,0x72,0x61,0x6b,0xfd,0xf3,0xec,0xec,0xf6,0x74 -,0x64,0x60,0x73,0xe4,0xdf,0xee,0x6d,0x6b,0x77,0x7e,0xff,0xfe,0xf4,0xea,0xea,0xfa,0x75,0x7e,0xef,0xef,0xfd,0x6e,0x68,0x68,0x71,0x7b,0x7a,0xf7,0xef,0x7e,0x77,0xed -,0xdf,0xe3,0xf7,0x6a,0x64,0x73,0xea,0xeb,0xfc,0xf7,0xf4,0x6a,0x5e,0x61,0x6f,0xee,0xe3,0xec,0x70,0x6c,0x7a,0xfd,0xfa,0xed,0xe9,0xf1,0x7d,0x6f,0x68,0x7b,0xe5,0xe8 -,0x75,0x6c,0x7a,0x7a,0x6a,0x64,0x72,0xee,0xea,0xf9,0x6e,0x7e,0xe5,0xe8,0x72,0x68,0x71,0xf4,0xea,0xee,0xf7,0xee,0xee,0x74,0x64,0x67,0xf9,0xea,0xf4,0x6c,0x5f,0x65 -,0xff,0xef,0xf8,0xe9,0xdd,0xe6,0x70,0x5f,0x6c,0xe2,0xdb,0xe8,0x73,0x71,0x78,0x6d,0x5f,0x61,0x7c,0xef,0xf8,0x6f,0x6f,0xec,0xdf,0xeb,0x73,0x6d,0xfd,0xea,0xed,0x78 -,0x7e,0xec,0xef,0x74,0x67,0x6e,0xea,0xe5,0x76,0x5d,0x5e,0x79,0xec,0xf7,0xf6,0xe3,0xe6,0x72,0x5e,0x5f,0xf2,0xdd,0xe1,0xf7,0x73,0x74,0x7c,0x79,0x6f,0x7e,0xef,0xfb -,0x6a,0x5f,0x67,0xf4,0xe5,0xec,0x70,0x68,0x7b,0xeb,0xf5,0x7a,0xf4,0xe9,0xec,0x7e,0x73,0xed,0xde,0xe8,0x63,0x57,0x5c,0x69,0x6e,0x79,0xe9,0xe0,0xe9,0x77,0x65,0x6d -,0xe7,0xdc,0xe2,0xf9,0x73,0x70,0x71,0x75,0xff,0xef,0xec,0xf5,0x69,0x5c,0x61,0xfb,0xe7,0xec,0xf7,0xfb,0xf9,0x7e,0x6e,0x6c,0xfc,0xe9,0xef,0x73,0x7e,0xe5,0xe0,0xee -,0x76,0x6a,0x69,0x6f,0x78,0x71,0x75,0xfa,0xfd,0x72,0x6e,0x7a,0xeb,0xe2,0xed,0x72,0x6f,0xfb,0xf4,0xfd,0xf0,0xe3,0xdf,0xe7,0x6c,0x58,0x5d,0x7e,0x79,0x68,0x7b,0xe8 -,0xed,0xfe,0x7c,0x7e,0xf8,0xee,0xf4,0x76,0xf1,0xdf,0xec,0x6c,0x6e,0x7d,0x79,0x7b,0x78,0x6c,0x6e,0x7e,0x79,0x6b,0x76,0xe2,0xdd,0xed,0x71,0x6a,0x63,0x68,0x77,0xfb -,0xea,0xdf,0xe5,0xfd,0x6f,0x7e,0xf4,0x77,0x6c,0x71,0x79,0x76,0x71,0x6d,0x75,0xf2,0xf2,0x7d,0x7a,0x7a,0xfc,0xed,0xee,0xfc,0xfc,0xee,0xeb,0xec,0xf3,0x79,0x68,0x60 -,0x65,0x66,0x6b,0xee,0xe5,0xf4,0x78,0xff,0x77,0x77,0xfa,0xf5,0xee,0xe7,0xec,0x70,0x65,0x78,0xea,0xef,0x7c,0x77,0x6b,0x66,0x6f,0x76,0x7a,0xed,0xe6,0xed,0xfe,0x7b -,0x7e,0x6f,0x6a,0x72,0xf9,0xf0,0xeb,0xee,0x7d,0xf8,0xed,0xf9,0x6e,0x6e,0xfe,0xf5,0xf6,0x73,0x6a,0x6c,0x77,0xfd,0xff,0xf3,0xee,0x7d,0x72,0x7c,0xee,0xe3,0xdf,0xea -,0xfa,0xfa,0x7b,0x69,0x64,0x68,0x6e,0x78,0xf9,0x7e,0x75,0xf8,0xeb,0xf3,0x7a,0xfc,0xf0,0xf4,0xef,0xec,0xf4,0x7c,0x7b,0x79,0x6d,0x75,0xf7,0x7b,0x6b,0x6d,0x76,0x74 -,0x7c,0xee,0xe9,0xee,0xf7,0x78,0x65,0x64,0xfb,0xe8,0xe7,0xeb,0xfd,0x73,0xfe,0xf0,0xf2,0xf8,0xf7,0xfc,0x70,0x67,0x6c,0x7e,0xf9,0xfc,0x78,0x7c,0xf6,0x7d,0x70,0xf3 -,0xe4,0xe9,0xf1,0x7e,0xfe,0xea,0xe8,0x7e,0x67,0x64,0x6c,0x6d,0x6b,0xfb,0xec,0xf9,0x7d,0xfe,0x74,0x7e,0xe9,0xe6,0xeb,0xee,0xf4,0x75,0x6a,0x73,0xee,0xec,0xf8,0x75 -,0x62,0x62,0xf8,0xec,0xfa,0xfc,0xf9,0xf9,0xfd,0x7e,0xf9,0xfb,0x7d,0xf7,0xfb,0x79,0xf9,0xf7,0xf8,0xeb,0xec,0x77,0x6c,0x74,0xf7,0xf1,0xf8,0x79,0x6e,0x67,0x6c,0x7e -,0xef,0xe7,0xee,0x71,0x74,0xf7,0xf8,0xf3,0xeb,0xe7,0xe4,0xf0,0x68,0x60,0x6b,0xf9,0xf7,0x74,0x71,0x6f,0x67,0x6d,0xf5,0xe9,0xe4,0xe9,0x7e,0x75,0xee,0xe9,0xf8,0x71 -,0x76,0xfc,0x7c,0x74,0x70,0x6f,0x7c,0xf1,0x7c,0x66,0x6d,0xed,0xe6,0xeb,0xf1,0xfc,0x70,0x6c,0x6f,0x7d,0xe7,0xdf,0xfa,0x61,0x6a,0xed,0xea,0xfb,0xfb,0xf2,0xf9,0x6e -,0x62,0x63,0xfd,0xe6,0xf2,0x75,0x76,0x79,0x7a,0xfc,0xee,0xeb,0xeb,0xf6,0x7a,0xff,0xef,0xee,0x76,0x67,0x67,0x69,0x6f,0xfe,0x7e,0x74,0xfe,0xf6,0xfe,0x7d,0xf0,0xe5 -,0xe4,0xef,0x78,0x6c,0x6d,0xfe,0xf4,0xed,0xea,0x7d,0x5e,0x5c,0x6c,0xf8,0xef,0xef,0xf9,0xfb,0xf7,0xfc,0x79,0xfb,0xed,0xf5,0x6e,0x71,0xf7,0x78,0x71,0xee,0xe5,0xf3 -,0x6f,0x6c,0x7b,0xf2,0xf1,0x78,0x69,0x6b,0x79,0x7a,0x7c,0xea,0xe7,0xff,0x6c,0x73,0xf8,0xeb,0xe6,0xe9,0xec,0xf7,0x71,0x66,0x64,0x70,0xf1,0xf4,0x74,0x68,0x64,0x71 -,0xec,0xe6,0xea,0xf8,0x79,0x74,0x71,0x77,0xf0,0xed,0x7c,0x71,0x7d,0xf8,0x78,0x6f,0x76,0xfc,0x7b,0x6e,0x6f,0x79,0xee,0xe5,0xed,0x76,0x72,0x7b,0x75,0x73,0xf0,0xe4 -,0xf7,0x69,0x73,0xf0,0xf1,0xfe,0x7e,0x7e,0xfb,0xfa,0x6e,0x63,0x6f,0xec,0xef,0x74,0x6c,0x74,0x7c,0xfd,0xf3,0xed,0xed,0xef,0xf2,0xf1,0xed,0xee,0x79,0x69,0x66,0x6a -,0x6f,0x75,0x7a,0x7c,0xff,0xfc,0xf7,0xfb,0xfa,0xec,0xe9,0xf2,0x7e,0x76,0x77,0xfe,0xf7,0xf1,0xf8,0x6e,0x68,0x6d,0x7a,0xfd,0xfa,0xf9,0xf7,0xf9,0xf7,0xf9,0x7a,0xfe -,0xf6,0x7a,0x6f,0xfd,0xf3,0x7a,0x7c,0xec,0xea,0xfe,0x6a,0x6b,0x7e,0xed,0xf0,0x6e,0x66,0x79,0xec,0xf5,0x7a,0xfe,0xfa,0xfd,0x78,0x73,0x7c,0xef,0xe8,0xee,0xf1,0xed -,0xf6,0x6c,0x64,0x6e,0xfb,0xfc,0x71,0x68,0x6d,0xf3,0xea,0xf5,0x75,0x7a,0xef,0xea,0xf9,0x71,0x79,0xf3,0xee,0xf9,0x7c,0x7c,0x77,0x6f,0x6d,0x72,0x7c,0x7d,0x77,0x78 -,0xef,0xe5,0xed,0x76,0x6c,0x76,0xf8,0xf7,0xfe,0x7c,0x7c,0xfa,0xec,0xee,0xfe,0x78,0x7b,0x7b,0x77,0x73,0x70,0x70,0x79,0xfc,0xfc,0xfd,0xf8,0xf9,0x79,0x79,0xfc,0x7d -,0x7a,0x7d,0xef,0xe5,0xe8,0xfe,0x69,0x65,0x6d,0xfd,0x7d,0x6f,0x71,0x7d,0xf6,0xf6,0x7d,0x7a,0xfc,0xf2,0xf4,0x7e,0x78,0xff,0xfa,0xfc,0xf1,0xeb,0xf7,0x71,0x68,0x6a -,0xfe,0xf2,0x7b,0x6d,0x78,0xec,0xe5,0xef,0x75,0x6e,0x73,0x7c,0x7b,0x79,0xf8,0xee,0xf3,0xf6,0xf2,0xfc,0x76,0x77,0x7b,0xfe,0x7c,0x6c,0x67,0x6e,0xf4,0xe8,0xef,0x74 -,0x6d,0x6f,0x77,0xf7,0xef,0xf5,0xf5,0xf1,0xee,0xef,0x7e,0x72,0x6e,0x6e,0x6f,0x6f,0x6d,0x72,0xf7,0xee,0xf2,0xfc,0x76,0x72,0x7d,0xf7,0xf6,0xfc,0xff,0xfd,0xfe,0xf8 -,0xed,0xee,0x7b,0x6e,0x6b,0x6b,0x6f,0x74,0x7e,0xf2,0xeb,0xf0,0x79,0x6d,0x6f,0xff,0xf7,0xfa,0xfc,0xfe,0xfe,0xfb,0xf0,0xe9,0xf0,0x73,0x6c,0x72,0x77,0x77,0x78,0x79 -,0xfe,0xf4,0xf4,0x79,0x6f,0x7b,0xfc,0x7c,0xff,0xf8,0xfc,0xfe,0xed,0xe7,0xed,0xf9,0x73,0x68,0x68,0x7d,0xf4,0x75,0x71,0xf9,0xf4,0xfd,0xfd,0x7d,0x7a,0xf3,0xed,0x7d -,0x6d,0x7a,0xef,0xf5,0xf5,0xeb,0xf5,0x6f,0x6b,0x6f,0x79,0xfa,0x7e,0x72,0x78,0xee,0xea,0xf9,0x70,0x75,0xfe,0x7a,0x77,0x7a,0xfb,0xef,0xed,0xf3,0xf6,0xfc,0x75,0x77 -,0x7b,0xfc,0xfc,0x75,0x6e,0x74,0xf5,0xe9,0xed,0x79,0x6f,0x72,0x75,0xfb,0xf4,0xfa,0xf7,0xec,0xeb,0xf8,0x77,0x75,0x73,0x70,0x79,0x7c,0x6f,0x6e,0xfa,0xee,0xed,0xef -,0x7c,0x6d,0x72,0xf8,0xf4,0xfb,0xfb,0xfd,0x7c,0xfa,0xec,0xef,0x74,0x6b,0x6c,0x72,0x7b,0x7b,0x75,0xfc,0xe7,0xe5,0xfc,0x6d,0x6e,0x78,0x7e,0xfa,0xf8,0xfd,0x7a,0x7c -,0x7d,0xf9,0xf0,0xfa,0x6f,0x6e,0x7a,0x7d,0x7a,0x74,0x78,0xf0,0xe7,0xf4,0x6c,0x6a,0x77,0xf8,0xf8,0xfe,0x7d,0xfc,0xec,0xec,0xfd,0x7c,0xfc,0x71,0x68,0x6f,0x7e,0xfe -,0xfc,0xfb,0xfa,0xf0,0xef,0x79,0x6c,0x7a,0xee,0xfa,0x71,0x76,0xfd,0xf2,0xe8,0xec,0x78,0x6f,0x73,0x72,0x6e,0x78,0xf7,0xf7,0xf5,0xef,0xf3,0x7e,0xfe,0xfc,0x74,0x70 -,0x7e,0xf9,0xfe,0x7b,0xf7,0xec,0xee,0xf9,0x75,0x6f,0x7a,0xf8,0xfe,0x78,0x7d,0xfa,0xf4,0xf4,0xff,0x77,0x71,0x74,0x75,0x75,0x78,0xfc,0xf1,0xec,0xeb,0xf3,0xff,0x74 -,0x6c,0x6d,0x7d,0xf7,0x7e,0x72,0x71,0xfd,0xee,0xf0,0x7a,0x75,0xfb,0xf9,0x73,0x6d,0x7e,0xf0,0xef,0xef,0xf9,0x7d,0x79,0x72,0x6f,0x70,0x7c,0xfa,0xfc,0xfd,0xee,0xed -,0xf9,0x76,0x6f,0x75,0x7b,0xfc,0xfd,0x79,0x76,0xfb,0xf0,0xf6,0xfd,0xfc,0xfe,0x7c,0x74,0x6c,0x72,0xf8,0xf2,0xf1,0xf1,0xf2,0x7e,0x6d,0x6b,0x72,0xfb,0xee,0xf0,0x7c -,0xf8,0xec,0xf0,0x7e,0x74,0x6f,0x71,0x7c,0x7c,0x70,0x6f,0xfe,0xee,0xf3,0xfe,0x7b,0x7d,0xf9,0xf8,0x72,0x6f,0xf9,0xf0,0xf5,0xf3,0xeb,0xed,0x7a,0x65,0x65,0x72,0xf4 -,0xef,0xfd,0xf9,0xe9,0xed,0x75,0x6c,0x77,0xf3,0xef,0x7e,0x73,0x76,0xfc,0xf2,0xf6,0xf2,0xec,0xef,0x79,0x6e,0x6d,0x71,0xfa,0xf2,0xfa,0xf7,0xef,0xf4,0x7b,0x6d,0x6d -,0x79,0xff,0xfb,0x7e,0xfe,0xed,0xe9,0xf5,0x7c,0x7b,0x77,0x76,0x74,0x73,0x7b,0xfd,0x7d,0x75,0x7b,0xf2,0xed,0xf7,0x7d,0x7d,0x73,0x77,0xf8,0xfa,0xf8,0xec,0xec,0xfd -,0x6e,0x6a,0x6e,0x7b,0xf8,0xfa,0x79,0x7e,0xed,0xf0,0x79,0x7b,0xf9,0xfb,0x75,0x6e,0x74,0xfa,0xf8,0x7b,0x78,0xf6,0xeb,0xf1,0x75,0x73,0x7b,0x7d,0x79,0x78,0x7c,0xf2 -,0xe9,0xf3,0x74,0x6f,0x71,0x75,0x7c,0xfa,0xf5,0xf5,0xf8,0xfa,0x7c,0xfc,0xf4,0xf9,0x74,0x6f,0x75,0x7a,0x7b,0x7a,0xfc,0xef,0xec,0xfa,0x6f,0x72,0xfa,0xf2,0xf9,0x7a -,0x7a,0xfe,0xf3,0xf2,0xf7,0xfa,0x7a,0x6e,0x6a,0x74,0xf8,0xf2,0xf5,0xf7,0xfa,0xfb,0xfb,0xfa,0xfc,0xfd,0xf8,0xfd,0x77,0x74,0x78,0xf8,0xec,0xed,0xfe,0x71,0x71,0x77 -,0x7a,0x7a,0xfa,0xf0,0xf5,0x7a,0x73,0x79,0xf8,0xf5,0x79,0x73,0x7a,0xfd,0xfb,0xfe,0xfd,0xf1,0xed,0xfd,0x6f,0x70,0x7e,0xfd,0x79,0x71,0x74,0xfe,0xf4,0xf2,0xfc,0xf7 -,0xee,0xf9,0x70,0x73,0xfe,0xf8,0xf6,0xfd,0x7e,0xf9,0xfb,0x7d,0x75,0x74,0xff,0xfb,0x77,0x75,0xfd,0xf1,0xee,0xf8,0xff,0xf8,0xfd,0x72,0x72,0x7a,0xfd,0xf9,0x7e,0x79 -,0xfe,0xf2,0xf2,0xf8,0x7a,0x74,0x79,0x77,0x7e,0xf5,0xf5,0xf7,0xfb,0x79,0x76,0x78,0x7c,0xfa,0xf9,0x7d,0x7b,0xff,0xf6,0xee,0xf2,0xfc,0x7d,0x75,0x6e,0x73,0x7b,0xfd -,0xf0,0xee,0xf7,0xfb,0xfa,0xfa,0xfb,0xfc,0xf9,0x7d,0x75,0x77,0xfd,0xf1,0xed,0xf0,0x7e,0x73,0x73,0x7a,0xf7,0xf5,0xf7,0xfb,0x7e,0x7b,0x7c,0xf9,0xee,0xef,0xff,0x70 -,0x70,0x7c,0xfb,0xf7,0xf1,0xed,0xf5,0x75,0x70,0x77,0xfe,0xfc,0xff,0x7a,0x79,0x7c,0x7d,0xf7,0xef,0xef,0xf9,0x75,0x71,0x77,0x7d,0xff,0xfa,0xf4,0xf1,0xf9,0x7d,0x7c -,0x7e,0xff,0xfe,0x76,0x6d,0x72,0xfd,0xf1,0xee,0xf1,0xf9,0x7c,0x7b,0x7d,0xfe,0xfb,0xfa,0xfb,0x78,0x7a,0xfc,0xfb,0xfe,0xfe,0xff,0x78,0x70,0x70,0x7e,0xf1,0xee,0xf1 -,0xfe,0x7b,0x7d,0x7a,0x77,0x7d,0xfc,0x7e,0x7a,0x7c,0xf4,0xee,0xf4,0x7d,0x7d,0x77,0x6f,0x72,0x7d,0xf1,0xf0,0xfb,0xff,0xfe,0x7c,0xfe,0xf4,0xf6,0xfe,0x78,0x6f,0x71 -,0xfb,0xed,0xeb,0xee,0xfd,0x74,0x6f,0x73,0x7a,0xfa,0xf5,0xf3,0xf6,0x7c,0x7a,0x7d,0xff,0xfe,0xfd,0x7d,0x7d,0xf9,0xfb,0xfd,0xf1,0xec,0xf7,0x6f,0x6e,0x7b,0xf6,0xf8 -,0xff,0x7b,0x7e,0x7e,0xfe,0xf4,0xed,0xed,0xf6,0x70,0x6a,0x71,0x79,0x7e,0xf3,0xef,0xef,0xf6,0x77,0x6f,0x78,0x7e,0x7b,0x7d,0x7c,0x76,0x74,0xfc,0xee,0xef,0xfb,0x7e -,0x7e,0x76,0x79,0xfd,0xfd,0x7c,0xfa,0xf3,0xfa,0x7c,0x78,0x75,0x78,0x7d,0x78,0x73,0x7a,0xf5,0xec,0xee,0xfb,0x76,0x75,0x75,0x7a,0xf7,0xf6,0xff,0x76,0x74,0x78,0x7d -,0x76,0x7d,0xf1,0xf9,0x70,0x6f,0x79,0xfb,0xf4,0xf5,0xf5,0xf0,0xf8,0x78,0x6e,0x73,0xfc,0xfc,0x75,0x73,0xf8,0xec,0xee,0xfc,0x73,0x72,0x75,0x74,0x7d,0xef,0xed,0xf5 -,0xfe,0x78,0x72,0x78,0xfc,0xf9,0xfd,0xfc,0x7e,0x76,0x77,0xf6,0xeb,0xea,0xf9,0x6e,0x6b,0x73,0x7c,0x7e,0xfd,0xf8,0xf1,0xf6,0xfe,0x7e,0xfd,0xf7,0xf7,0x7a,0x74,0x7e -,0xfa,0x7d,0xfc,0xef,0xf0,0x7a,0x6e,0x76,0xfd,0xfa,0xf7,0xfd,0x71,0x74,0xf9,0xed,0xee,0xf2,0xfd,0x70,0x6c,0x6e,0x78,0xf9,0xef,0xee,0xf7,0x76,0x6e,0x70,0x7c,0xfa -,0xfa,0xfa,0xfb,0x7d,0x7c,0xf9,0xf1,0xf1,0xfe,0x70,0x71,0x77,0xfc,0xf6,0xfb,0xfd,0xfd,0xfb,0xfc,0xfe,0x7b,0x7d,0xfe,0x77,0x70,0x76,0xfa,0xf0,0xed,0xee,0xf4,0x74 -,0x6b,0x6e,0x78,0xfb,0xf7,0xfb,0x73,0x71,0xfe,0xf7,0xf9,0xfe,0xff,0x78,0x70,0x72,0x7c,0xf4,0xee,0xef,0xf9,0x7b,0x75,0x74,0x79,0x7e,0x7c,0x7e,0x7d,0x78,0x7e,0xf6 -,0xf0,0xfa,0x78,0x71,0x70,0x74,0xfe,0xf0,0xf3,0xfb,0x7e,0x78,0x76,0x7c,0xfd,0xff,0xff,0x7e,0x79,0x74,0x79,0xf9,0xed,0xed,0xf6,0x75,0x6d,0x75,0xfc,0xf7,0xf8,0xfd -,0x7d,0x79,0xfd,0xf7,0xf7,0xfa,0x7e,0x77,0x72,0x78,0xf6,0xf1,0xf2,0xf4,0xff,0x77,0x71,0x75,0x7d,0xf8,0xf5,0xfb,0x7d,0x79,0xfc,0xf2,0xf0,0xfa,0x74,0x6e,0x6e,0x73 -,0x7e,0xf3,0xef,0xf7,0x7e,0x78,0x76,0x7b,0xff,0xfc,0xfb,0xfd,0x7d,0x7b,0xfe,0xf9,0xf2,0xf1,0xfd,0x71,0x6d,0x75,0xfc,0xf8,0xf9,0xfd,0x7c,0x7e,0xfb,0xfa,0xfe,0x7c -,0x7c,0x74,0x71,0x7b,0xf2,0xf0,0xf9,0xfd,0x7d,0x7a,0x75,0x75,0x7c,0xf7,0xf3,0xfc,0x76,0x78,0xf6,0xef,0xf6,0x7b,0x75,0x73,0x78,0x7c,0xfd,0xf4,0xf0,0xf5,0xff,0x7d -,0x7d,0x7c,0x7c,0x7b,0x7d,0x7e,0xfd,0xff,0xfe,0xfd,0xf7,0xf8,0x7d,0x76,0x77,0xfd,0xf9,0xf9,0x7e,0x7e,0x7e,0x7e,0xfb,0xf4,0xf3,0xfe,0x74,0x6e,0x77,0xf8,0xef,0xf3 -,0xf9,0xf8,0xfd,0x77,0x6f,0x76,0xfc,0xf7,0xfa,0x7c,0x7c,0xfe,0xf6,0xf3,0xf9,0x7b,0x74,0x75,0xfe,0xf5,0xf9,0xfe,0xfb,0xf9,0xff,0x7e,0x7c,0x7a,0x7b,0x7a,0x7c,0x7c -,0xfc,0xfa,0xfb,0xfb,0xf3,0xf8,0x76,0x6e,0x75,0xfd,0xf6,0xf7,0xfe,0x7c,0x78,0x79,0x7d,0xfb,0xf9,0xfb,0x7a,0x76,0x77,0x7c,0xf8,0xf6,0xf8,0xf8,0xfc,0x78,0x70,0x71 -,0x7a,0xfb,0xf7,0x7e,0x7d,0xfb,0xf2,0xf1,0x7a,0x70,0x74,0x78,0x7e,0xff,0x7e,0xfe,0xfc,0x7e,0x77,0x78,0x7c,0x7c,0x7b,0xfe,0xfa,0xfe,0x74,0x77,0x7d,0xf8,0xf1,0xfa -,0x77,0x6f,0x73,0x7e,0xfa,0xfa,0xfb,0x7e,0x7b,0x7c,0x7b,0x7b,0xfc,0xfa,0xff,0x7a,0x77,0x7a,0xfc,0xf9,0xff,0x7c,0x79,0x7c,0x7b,0x79,0xff,0xf9,0xfa,0xfd,0x7e,0x7e -,0xf8,0xf3,0xf9,0x7a,0x74,0x74,0x78,0x7b,0xfd,0xf5,0xf2,0xf7,0x7c,0x72,0x73,0x7a,0x7e,0xfa,0xf5,0xf8,0x7c,0x75,0x76,0xfa,0xf0,0xf0,0xfa,0x74,0x71,0x7c,0xfb,0xfa -,0xfc,0xfe,0x79,0x77,0x77,0x7b,0xfb,0xfb,0xfd,0x78,0x71,0x79,0xf7,0xf0,0xf2,0xfb,0x79,0x75,0x74,0x7a,0xfe,0xf9,0xf7,0xfb,0x78,0x73,0x79,0xfb,0xf6,0xf9,0x7b,0x74 -,0x76,0x75,0x7c,0xfa,0xf2,0xf0,0xfd,0x74,0x72,0x7a,0xfc,0xf8,0xf8,0xfb,0xfe,0x79,0x75,0x78,0xfb,0xfa,0xfe,0x71,0x72,0xfe,0xf4,0xf1,0xfc,0x7d,0x7a,0x79,0x78,0xff -,0xf7,0xf4,0xf7,0x78,0x6e,0x74,0xf8,0xef,0xf3,0x7d,0x77,0x74,0x71,0x72,0x7e,0xf4,0xf0,0xf6,0x7a,0x78,0x7a,0xfb,0xf8,0xfb,0xfe,0x7d,0x76,0x71,0x7d,0xf2,0xee,0xf8 -,0x74,0x6f,0x74,0x7d,0xfb,0xf6,0xfc,0x7e,0x7b,0x79,0x7c,0xfa,0xf1,0xf1,0xff,0x6f,0x71,0x79,0xf5,0xef,0xf5,0xfe,0x74,0x73,0x73,0x7d,0xf5,0xef,0xf4,0x79,0x72,0x79 -,0xfe,0xf5,0xf5,0xf9,0xfb,0x79,0x76,0x77,0x7d,0xf9,0xf9,0x7d,0x78,0x7a,0x7b,0xfe,0xf7,0xf9,0x7c,0x79,0x76,0x7a,0xfc,0xf4,0xef,0xf8,0x79,0x73,0x75,0x7d,0xf7,0xf7 -,0xfe,0x7b,0x78,0x73,0x76,0x7e,0xf5,0xf3,0xfb,0x73,0x71,0x7b,0xf6,0xf3,0xf9,0xfb,0x7a,0x75,0x79,0x7c,0x7b,0xfe,0xfc,0x79,0x75,0x7c,0xfc,0xfb,0x7e,0x7e,0x79,0x70 -,0x73,0x7d,0xfa,0xf6,0xf6,0x7c,0x74,0x7a,0xfa,0xf7,0xf6,0xfc,0x7c,0x76,0x72,0x76,0xfe,0xf5,0xf5,0x7e,0x74,0x70,0x72,0x79,0xfb,0xf9,0xfd,0xfe,0x7d,0x7b,0x7e,0xfc -,0xf9,0xfe,0x7b,0x7a,0x7b,0xfe,0xf5,0xf5,0xfe,0x79,0x78,0x77,0x7b,0xf8,0xf7,0xfe,0x7b,0x79,0x7c,0xfd,0xf8,0xf5,0xf9,0xfc,0x7b,0x71,0x73,0x7e,0xf7,0xf7,0xf9,0xfb -,0x79,0x77,0x7e,0xfb,0xfc,0xff,0x7d,0x78,0x7a,0xfd,0xfc,0xfd,0xfa,0xfc,0x7b,0x79,0xff,0xfd,0xfe,0xfe,0x7c,0x7b,0x7b,0x7d,0xff,0x7e,0xfd,0x7c,0x76,0x78,0xfb,0xf6 -,0xf4,0xf3,0xf8,0x7c,0x74,0x77,0x7b,0x7d,0xfe,0xfe,0x7c,0x7a,0x7c,0xfc,0xfd,0xfe,0xfd,0xfd,0x7d,0x7a,0x79,0x7b,0xfd,0xf5,0xf8,0x79,0x75,0x7a,0xfc,0xfc,0x7d,0x7a -,0x79,0x79,0x7d,0xfb,0xf8,0xfa,0x7c,0x78,0x78,0x7a,0xff,0xfe,0xfd,0xfb,0xfd,0x7c,0x77,0x7c,0xfb,0xf8,0xf6,0xf9,0x7e,0x77,0x7c,0xf9,0xf6,0xf7,0xfc,0x7a,0x73,0x75 -,0x7a,0x7b,0xfb,0xf9,0x7e,0xfe,0xfa,0xf8,0xfa,0xfd,0xfe,0xff,0x7c,0x79,0x78,0x7d,0xf9,0xf6,0xfa,0x7c,0x7a,0x7b,0xfb,0xf5,0xf7,0x7e,0x7c,0x7b,0xfe,0xfa,0xfb,0xfc -,0xfd,0xfc,0x7e,0x78,0x79,0xfb,0xf7,0xf4,0xf2,0xf7,0x7c,0x77,0x79,0xfe,0xfa,0xfe,0x76,0x75,0x7c,0xf8,0xf3,0xf7,0xfc,0xfd,0x7d,0x7c,0xfe,0xfd,0xf8,0xf8,0xfe,0x7e -,0xfe,0xfe,0xfe,0xfc,0xfc,0x7e,0x79,0x78,0x7b,0xfc,0xf5,0xef,0xf7,0x7c,0x79,0x7a,0xfd,0xf9,0xfb,0x7b,0x78,0x7b,0x7d,0xfc,0xfa,0xfa,0xfb,0xfd,0xfc,0xfe,0x7a,0xff -,0xff,0x7d,0xfd,0x7e,0x74,0x74,0x7c,0xfa,0xf9,0xfd,0x7c,0x77,0x7d,0xf6,0xf3,0xf8,0x7e,0x79,0x76,0x75,0x7b,0x7c,0xfd,0xf8,0xfc,0x7b,0x7a,0x7e,0xfb,0xf8,0xf9,0xfd -,0x7b,0x79,0x79,0x7b,0xfc,0xf5,0xfd,0x75,0x72,0x75,0x7a,0xfd,0xf8,0xf9,0xfd,0x7d,0x7c,0xfc,0xf8,0xf6,0xf9,0x7d,0x77,0x74,0x77,0x7e,0xfb,0xfc,0xfd,0xfe,0x77,0x77 -,0x7e,0xf8,0xf5,0xfa,0x7a,0x76,0x7c,0xf6,0xf4,0xfd,0x7c,0x7d,0x7b,0x78,0x7b,0xfe,0xfb,0xfb,0xfb,0xfe,0xff,0xff,0x7c,0x7e,0xfe,0x7e,0x78,0x74,0x79,0xff,0xff,0xfb -,0xff,0x7c,0x7e,0xfd,0xfa,0xfc,0xfb,0xfd,0x7d,0x7b,0x79,0x77,0x78,0x7d,0xfa,0x7d,0x78,0x77,0x7c,0xf9,0xf4,0xf3,0xf9,0x7e,0x76,0x75,0x7d,0xf8,0xf7,0xfc,0x7b,0x78 -,0x7a,0xfb,0xf6,0xfc,0x7b,0x78,0x77,0x76,0x7b,0xfd,0xfa,0xfb,0xfc,0x7d,0x77,0x7a,0xfb,0xf9,0xfd,0x7a,0x79,0x79,0x7e,0xf7,0xf5,0xfc,0x79,0x75,0x77,0x7c,0xfe,0x7d -,0x7a,0x7c,0xfc,0xfb,0x7e,0x7c,0x7b,0xfe,0xf9,0xfa,0x7e,0x7a,0x7e,0xfd,0xfd,0xfd,0x7d,0x7b,0x7a,0x7c,0x7e,0x7e,0xfe,0xfe,0xfe,0xfa,0xfa,0xfa,0xfb,0xfb,0xfd,0xff -,0x7d,0x7a,0x7b,0xfc,0xf8,0xfb,0x7e,0x79,0x74,0x75,0xfd,0xf4,0xf6,0x7e,0x7a,0x7a,0xfe,0xf7,0xf7,0x7e,0x78,0x78,0x7c,0xfd,0xf7,0xf6,0xfc,0x7e,0xfd,0xfa,0xfd,0x7c -,0x7a,0x7c,0xff,0x7b,0x79,0x7b,0xfc,0xf6,0xf7,0x7e,0x77,0x77,0x7b,0xfa,0xf7,0xfb,0xff,0x7c,0x7d,0xfb,0xfb,0xfe,0xff,0xfe,0x7d,0x79,0x78,0x79,0x7b,0xfe,0xf8,0xf5 -,0xfa,0x7e,0x79,0x7b,0xfa,0xf6,0xf8,0xff,0x7c,0x7b,0x78,0x7a,0x7e,0xfe,0x7b,0x77,0x7a,0x7d,0xfc,0xfb,0xfc,0xfc,0xfc,0x7d,0x77,0x79,0x7e,0xfd,0xfd,0x7d,0x7d,0x7d -,0xfe,0xf7,0xf4,0xf9,0x78,0x71,0x76,0xfe,0xf9,0xfe,0x7b,0x7a,0x7c,0xfe,0xff,0xfe,0xfb,0xfb,0xfe,0x7c,0x7c,0x7e,0xff,0xfb,0xf7,0xf8,0x7e,0x7b,0x7e,0x7e,0xfd,0x7e -,0xff,0x7e,0xff,0xfd,0xfc,0xfc,0x7e,0x7e,0xfe,0xfe,0xfc,0x7e,0x7e,0xfc,0xfb,0xfc,0x7d,0x7c,0x7e,0xfe,0xfe,0xfe,0xfa,0xf9,0xfc,0x7e,0xfd,0xf7,0xf6,0xfc,0x7c,0x77 -,0x79,0x7e,0xfc,0xfc,0xfd,0xfe,0x7e,0xfc,0xfc,0xfe,0x7d,0x7d,0x7d,0x7a,0x78,0x7a,0xff,0xfa,0xfa,0xfd,0x7b,0x7a,0xfe,0xfc,0xfc,0xfc,0xfd,0x7c,0x7a,0xff,0xfc,0x7e -,0x79,0x77,0x79,0x79,0x7a,0x7b,0xfe,0xf9,0xf5,0xf8,0xfe,0x7b,0x7b,0xfe,0xfe,0x7c,0x7b,0x7c,0x7e,0x7d,0x7e,0xfe,0xfe,0xfe,0x7e,0x7c,0x7b,0x7e,0xfb,0xfd,0x7e,0xfe -,0xfd,0xfe,0x7c,0x7c,0xfe,0xfd,0xfc,0xfe,0x7d,0x7e,0xfb,0xf8,0xfa,0xfb,0x7e,0x7b,0x7b,0x7d,0x7e,0xfd,0xfc,0xfc,0xfe,0xfd,0xfd,0x7e,0x7a,0x7d,0xfa,0xf9,0xf9,0xfd -,0xfd,0xf9,0xf7,0xf9,0x7e,0x78,0x78,0x7b,0xfe,0x7d,0xff,0xfb,0xf9,0xf9,0xfc,0xfb,0xfc,0x7e,0xfc,0xfc,0x7d,0x7b,0x7d,0xfd,0xfd,0xfb,0xfa,0xfb,0xff,0xfd,0xfc,0xfe -,0xfd,0xfa,0xfc,0xfe,0xfb,0xfb,0xfe,0x7d,0x7d,0x7e,0x7e,0x7c,0xff,0xfb,0xf9,0xfa,0xfd,0xfd,0xfc,0xfd,0x7b,0x7a,0x7d,0xfe,0xfd,0x7e,0xff,0xfb,0xfa,0xfa,0xfe,0x7c -,0xfe,0xfb,0xfd,0xff,0x7e,0xfe,0xfb,0xfc,0xfd,0x7e,0x7c,0x7c,0xff,0xfe,0x7e,0x7c,0xfc,0xfb,0xfb,0xf9,0xf9,0xfd,0x78,0x79,0x7e,0x7e,0xfe,0xfe,0x7d,0x7c,0x7d,0xfe -,0x7d,0x7e,0xfd,0xfd,0x79,0x76,0x7e,0xfa,0xf9,0xfa,0x7e,0x7c,0x7d,0xfe,0x7e,0x7c,0xfe,0xfe,0xff,0x7d,0x7d,0xff,0xf8,0xf6,0xfe,0x77,0x78,0x7b,0x7d,0x7e,0x7e,0x7d -,0xff,0xfd,0xfe,0xfd,0xfe,0xfd,0xfd,0xfe,0xfb,0xfa,0xfc,0xfd,0x7e,0xfe,0xfa,0xfc,0x7c,0x79,0xfe,0xfb,0xfe,0x7d,0x7c,0x7d,0xfd,0xfa,0xfe,0x7d,0xfc,0xf6,0xfc,0x7c -,0x7d,0xfc,0xf9,0xf9,0xff,0x7b,0x7b,0x7e,0x7d,0x7d,0xff,0xfa,0xf9,0x7d,0x7c,0x7e,0xfb,0xfa,0xff,0x7d,0x7e,0xfd,0xfc,0x7e,0xfe,0xfc,0xfc,0xfd,0xfe,0xfd,0xfd,0xfd -,0x7e,0x79,0x7b,0xff,0xfe,0xfe,0xfe,0xfc,0xfd,0xff,0x7c,0xff,0xf9,0xf5,0xfa,0x7b,0x79,0x7d,0xfc,0xfc,0x7d,0x79,0x7c,0xfd,0xfb,0x7d,0x7c,0xfe,0xfe,0xfe,0xfe,0x7e -,0x7d,0xfb,0xf9,0xff,0x7b,0x7e,0x7d,0x7d,0xfe,0xfb,0xfd,0x7e,0x7c,0x79,0x7b,0xfe,0xfd,0xff,0xff,0xfc,0xfd,0x7c,0x7e,0x7e,0xfb,0xfa,0xfe,0x7c,0x7b,0x7e,0x7e,0x7d -,0xff,0xfb,0xfb,0xfe,0x7d,0x7c,0x7e,0xfd,0xfd,0x7d,0x7b,0x7e,0xfc,0xfb,0xfc,0xfe,0x7e,0xfd,0xfc,0xfe,0xfe,0xfb,0xfb,0xfd,0x7e,0x7e,0xff,0xfe,0xfc,0xff,0x7e,0x7b -,0x7c,0x7c,0xfc,0xf6,0xf4,0xfa,0xfc,0xfd,0xfc,0xfd,0x7e,0xfe,0x7e,0xfc,0xfc,0xfe,0x7d,0xfd,0xfb,0xfe,0x7c,0x7b,0x7e,0xfc,0xfe,0xff,0x7c,0x7e,0xfe,0x7e,0xfe,0xff -,0xfb,0xfe,0x7a,0x7b,0x7d,0xfe,0xfb,0xfc,0xfd,0xfe,0x7d,0x7b,0x7c,0xfe,0xfe,0x7e,0x7e,0xfd,0xfd,0xfe,0xff,0xff,0xfc,0xf9,0xfb,0x7e,0x7d,0x7d,0xff,0xf9,0xfc,0x7a -,0x7b,0x7b,0x7c,0x7c,0x7a,0x77,0x7a,0xfe,0xfe,0xfd,0xfe,0xfb,0xfa,0x7e,0x7d,0x7a,0x7a,0x7d,0x7e,0xfd,0x7e,0x7d,0x7d,0xfd,0xfe,0xfe,0xff,0x7d,0x7d,0x7e,0x7d,0x7c -,0xff,0xff,0xfc,0xfc,0xfd,0xff,0xfe,0xfe,0xfd,0xfd,0x7e,0xff,0xfe,0xfb,0xfb,0xfd,0x7e,0x7d,0xff,0xff,0x7d,0x7d,0xfc,0xfa,0xfb,0xfd,0xfb,0xfc,0xfa,0xfb,0xfe,0x7e -,0x7d,0xfe,0xff,0xfe,0x7d,0xfd,0xfe,0x7d,0xff,0x7d,0xff,0x7e,0xfc,0xfd,0xfc,0xfc,0xfb,0xfb,0xfe,0xfc,0xfc,0x7d,0x7b,0xfe,0xfd,0xff,0x7c,0x7d,0xfe,0xfb,0xf9,0xfe -,0x7c,0xff,0xfd,0xfe,0x7e,0xfe,0xfe,0xfc,0xf9,0xfd,0x7d,0x7d,0xff,0x7e,0x7e,0xfe,0xfe,0xff,0xfd,0xfd,0xfd,0xfe,0xfe,0x7e,0x7c,0x7b,0xff,0x7e,0xfe,0xfb,0xfc,0xfc -,0xfb,0xfd,0xfc,0xf8,0xfd,0x7d,0x7e,0x7e,0x7c,0x7c,0x7e,0xfe,0xfe,0xfd,0xfe,0x7c,0x7d,0xfd,0xfb,0xfc,0xfb,0x7e,0xff,0xfc,0xfb,0xfc,0x7c,0x7b,0x7e,0xfd,0x7b,0x7c -,0x7e,0xfc,0xfa,0xfc,0x7d,0x7b,0xff,0xfc,0xfc,0xff,0xfe,0xff,0x7d,0xfe,0xfb,0xfc,0xfd,0xfc,0x7e,0x7d,0xfd,0xfb,0xfd,0xfc,0xf9,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff -,0x7d,0xfe,0xfd,0xfa,0xfa,0xfa,0xfa,0xfa,0xfc,0x7e,0x7e,0xfe,0xfc,0xfe,0x7e,0x7c,0xff,0xfa,0xf8,0xfb,0xfc,0xfd,0xfc,0xfa,0xfc,0xfb,0xfa,0xfa,0xfc,0xfd,0xfe,0x7d -,0x7d,0xff,0xfe,0xfe,0x7e,0x7c,0xff,0xf9,0xf8,0xfb,0xff,0x7e,0x7d,0xfe,0xfe,0x7e,0xfe,0xfe,0xfd,0xfe,0xfe,0xfe,0xfd,0xfd,0x7e,0x7d,0x7c,0x7c,0x7d,0xfc,0xfa,0xfd -,0x7d,0x7b,0x7c,0xfe,0xfd,0xfe,0x7e,0xfd,0xf9,0xfb,0x7c,0x7e,0xfc,0xfd,0x7c,0x77,0x78,0x7b,0x7d,0x7c,0x7b,0x7c,0xfe,0xfe,0x7c,0x7c,0x7d,0xfc,0xfe,0xfe,0x7e,0xfe -,0xfe,0xfe,0xfb,0xfe,0x7e,0x7b,0x79,0x7b,0xff,0xfc,0x7e,0x7d,0x7e,0xfc,0xfd,0xfd,0x7d,0x7e,0xff,0x7e,0x7d,0x7a,0xff,0xfc,0xf8,0xfa,0xfe,0xff,0xfe,0x7e,0xfe,0x7e -,0x7d,0xfe,0xfe,0xff,0x7e,0xff,0xfe,0xfd,0x7d,0x7c,0x7d,0xff,0x7e,0xfd,0xfd,0xfe,0xfc,0xfc,0xfe,0x7e,0xfe,0xfd,0x7e,0x7e,0x7e,0x7d,0x7e,0xfd,0xfc,0xfe,0x7d,0x79 -,0x7c,0x7e,0xfd,0xfd,0xfe,0x7d,0x7d,0xfc,0xfe,0x7e,0x7e,0x7d,0x7c,0x7d,0x7d,0x7d,0x7d,0xfd,0xf9,0xfa,0xfd,0x7e,0x7d,0xfe,0xfc,0xfd,0xfe,0x7e,0xfe,0xfd,0xfd,0xfd -,0xfe,0xfe,0x7e,0x7d,0x7d,0x7e,0x7e,0xfd,0xfe,0xfe,0x7b,0x7b,0x7c,0x7e,0xfe,0xfd,0x7e,0x7b,0x7c,0x7c,0x7e,0xff,0xfa,0xfb,0xfe,0x7d,0x7c,0x7c,0x7c,0xfe,0xfe,0xff -,0x7c,0xfe,0xfc,0x7e,0xff,0xfd,0xfc,0xfc,0xfd,0xfe,0x7e,0xff,0xfb,0xfc,0xff,0x7c,0x7b,0x7e,0xfe,0xfd,0xfe,0x7c,0x7b,0x7e,0xfd,0xfc,0x7e,0xfe,0xfd,0xfe,0xfe,0x7e -,0x7e,0xfe,0xfc,0xfa,0xfa,0xff,0xff,0xfe,0xfd,0xfb,0xfd,0xfd,0xfe,0xfe,0xfb,0xfe,0xfe,0x7d,0x7e,0xff,0x7c,0x7e,0x7d,0x7e,0xff,0xfd,0xfc,0xfd,0xfc,0xfc,0xfc,0xfd -,0x7e,0x7e,0x7d,0xff,0xfe,0xfe,0xfc,0xfc,0x7e,0x7c,0x7e,0xfe,0xfb,0xfa,0xfc,0x7e,0x7e,0x7d,0x7d,0x7e,0xfe,0xfc,0x7e,0x7e,0x7e,0x7d,0x7d,0xfe,0xfc,0xfb,0xfd,0x7e -,0xff,0xff,0xfd,0xfe,0x7c,0x7d,0x7e,0x7d,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xff,0x7c,0x7e,0xfc,0xf9,0xfe,0x7a,0x77,0x7a,0x7d,0x7d,0x7b,0x7b,0x7b,0x7d,0xfe,0x7e -,0xfd,0x7e,0xfe,0x7c,0x7b,0x7e,0x7b,0x7d,0x7c,0x7d,0x7e,0x7e,0xff,0x7c,0x7c,0x7e,0xfe,0xfe,0x7e,0xff,0xfe,0x7d,0xff,0x7e,0x7e,0xfe,0x7c,0x7c,0x7d,0x7e,0x7e,0x7c -,0x7c,0xff,0xfe,0xfd,0xfe,0xff,0xfe,0xfd,0x7c,0x7c,0x7e,0x7e,0xfe,0xfe,0xfc,0x7e,0x7e,0x7e,0xfe,0xfc,0xfe,0x7e,0x7e,0xfe,0xfc,0xfe,0xff,0x7e,0xfd,0xfb,0xfe,0xfe -,0x7e,0xfd,0xfc,0xfa,0xfb,0xfe,0xfe,0xfd,0xfc,0xfc,0x7e,0x7c,0x7e,0x7d,0x7c,0x7d,0xfe,0xfe,0x7d,0x7e,0xfe,0xfe,0xfe,0xff,0xfe,0xfd,0xfe,0xff,0xff,0x7e,0x7e,0xff -,0x7d,0x7d,0xff,0x7e,0x7b,0x7e,0xfc,0xfb,0xfc,0xfe,0x7c,0x7d,0xfd,0xfd,0x7e,0x7c,0x7e,0xff,0xfe,0xfe,0xfd,0xfd,0xfe,0xff,0xfe,0xfd,0x7d,0x7c,0x7e,0x7e,0x7d,0x7d -,0x7c,0x7d,0x7e,0xfe,0xfe,0xfd,0x7d,0x7d,0xfe,0xfc,0xfb,0xfd,0x7d,0x7e,0x7e,0xff,0x7c,0x7c,0xfe,0xfe,0x7e,0x7e,0xfd,0xfd,0xfd,0xfd,0xfe,0xfd,0xfe,0xff,0xfd,0x7d -,0x7e,0xfe,0xfd,0x7e,0x7d,0xfd,0xfc,0xfd,0xfd,0x7e,0x7d,0x7e,0xfd,0xfd,0xff,0xfd,0xfd,0xfd,0x7e,0x7e,0x7e,0xfe,0xfd,0xff,0xfc,0xfc,0xfe,0x7e,0xff,0xfd,0x7e,0x7d -,0x7d,0x7c,0xfc,0xfb,0xfe,0x7e,0x7e,0xfd,0xfb,0xfa,0xfe,0xfe,0xfc,0xfb,0xfc,0xfc,0xfe,0x7e,0xfd,0xfe,0x7d,0x7d,0x7e,0x7e,0x7e,0xfe,0xfd,0xfd,0xfc,0xfd,0x7e,0xfd -,0xfd,0xfe,0xfd,0xfe,0x7e,0xfe,0xfd,0xff,0x7e,0x7d,0x7e,0x7e,0x7c,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0x7d,0xfe,0xfe,0xfd,0xfd,0xff,0xfe,0xfe,0xfd,0xfc,0xf7,0xfb -,0x7c,0x7b,0x7e,0x7e,0x7b,0x7b,0x7d,0xfe,0xfd,0xfe,0xfe,0x7d,0xfe,0xfc,0x7e,0x7d,0x7d,0xfd,0xff,0xff,0xfe,0xfd,0xfe,0xfd,0xfd,0x7e,0x7e,0x7d,0x7c,0x7c,0x7e,0xfe -,0xfd,0xfe,0x7e,0xff,0xfe,0xfe,0x7c,0xff,0xfe,0xfe,0xfd,0xfe,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0x7e,0x7d,0xfc,0xf8,0xfa,0xff,0x7c,0x7e,0xfd,0xfd,0xfe,0x7e -,0xff,0xfd,0xf9,0xfa,0xff,0xfe,0xfe,0xfb,0xfd,0xff,0x7e,0x7d,0xff,0xfd,0xfb,0xfd,0x7e,0xfe,0xfc,0xfc,0xfd,0xff,0x7d,0x7d,0x7e,0x7e,0x7e,0xff,0xfe,0xfd,0xfc,0xfd -,0x7d,0x7d,0xfc,0xfd,0xfd,0xfe,0xff,0xfd,0xfc,0xfa,0xfd,0xff,0xfe,0xfe,0xfe,0xfe,0xfc,0xfd,0xfb,0xfe,0xfe,0xfd,0x7e,0xfe,0x7e,0x7d,0x7d,0xfe,0xfc,0xfc,0xff,0x7e -,0xfd,0xfc,0xfd,0xfc,0xfe,0x7c,0x7e,0xff,0xfd,0x7e,0x7e,0x7c,0x7e,0xfc,0xfd,0xfe,0x7d,0x7e,0xfd,0xfc,0xfd,0x7e,0xff,0xfb,0xfa,0xfc,0x7d,0xfe,0xfe,0xfd,0xfc,0xfe -,0xfe,0xfe,0xfe,0xfe,0xfe,0x7d,0x7e,0xfc,0xfd,0xfe,0xfe,0xff,0xfe,0xfd,0xfc,0xfe,0x7e,0xfe,0xfd,0xfb,0xfd,0xfe,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xfd,0xfe,0xff,0xfe -,0xff,0xfc,0xfb,0xfc,0xfe,0xfe,0xfd,0xfc,0xfb,0xfc,0x7e,0xff,0xfe,0xfc,0xfc,0x7e,0xfc,0xfa,0xfa,0xfc,0xfd,0xfe,0xfe,0xfd,0xfc,0xfd,0x7e,0xfb,0xf9,0xfb,0xff,0x7d -,0x7c,0x7b,0x7e,0xfd,0xff,0x7e,0xff,0xfe,0xff,0x7e,0x7e,0x7d,0x7e,0xfe,0xfc,0xfe,0x7d,0x7e,0xfe,0xfc,0xfa,0xfe,0x7e,0xfe,0xfd,0xff,0xff,0xfe,0xfe,0xfe,0x7e,0x7e -,0x7b,0x7d,0xff,0xfd,0xff,0x7d,0x7e,0xfe,0xfc,0xfb,0xfd,0xfe,0x7c,0x7a,0x7c,0x7d,0xff,0xfe,0xfc,0xfe,0x7d,0xff,0xfe,0xfe,0xff,0x7d,0x7e,0x7e,0xfe,0xfc,0xfc,0x7e -,0xfe,0xfb,0xfc,0xfd,0xff,0x7d,0x7d,0xfe,0xfc,0xfe,0x7e,0x7d,0x7e,0xfe,0xff,0x7e,0x7d,0xff,0xfc,0xfc,0xfe,0x7e,0xff,0xfe,0xfc,0xfc,0x7e,0x7e,0xfe,0xfd,0xfd,0xfd -,0xfd,0xfd,0xfd,0xfe,0xfd,0xfe,0x7d,0xfd,0xfd,0xfc,0xfc,0xfd,0xfe,0xfe,0xfd,0xfd,0xfd,0xfe,0xfe,0xfd,0xfe,0xff,0xfd,0xfb,0xf9,0xfb,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe -,0x7e,0xfd,0xfb,0xff,0x7a,0x7a,0x7d,0x7e,0xff,0x7d,0x7d,0x7e,0xfe,0xfc,0xfd,0x7e,0x7d,0xff,0xfe,0xfe,0xfe,0x7d,0x7e,0xfd,0xfd,0xfe,0x7e,0x7d,0x7e,0xfd,0xfd,0x7d -,0x7c,0x7c,0xfe,0xfd,0xfe,0xfe,0xff,0xff,0xfd,0xfd,0xff,0x7e,0xff,0xfd,0xfc,0xfd,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7b,0x7c,0x7e,0x7e,0xff,0xfe,0xfc,0xfc,0xff,0x7e -,0xfe,0xfd,0xfd,0x7e,0x7e,0x7d,0xff,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfe,0xfe,0xfd,0xfd,0xfe,0xfb,0xfb,0xff,0x7e,0x7e,0xfe,0xfc,0xfd,0xff,0x7d,0xfe,0xfc,0xfa,0xfc -,0xff,0xfc,0xfc,0xfb,0xfd,0x7e,0xff,0xfd,0xfc,0xfd,0xfe,0xff,0xff,0xfd,0xfd,0xfd,0xfd,0xfe,0xfc,0xfd,0xfd,0xfd,0xfb,0xfb,0xfd,0xfe,0x7e,0xfe,0xfd,0xfd,0xfb,0xfb -,0xfb,0xfb,0xfb,0xfd,0xff,0xfe,0xff,0x7e,0xfe,0xff,0x7e,0xfe,0xfd,0xfd,0xfe,0x7e,0xfe,0xfc,0xfd,0xfc,0xfc,0x7d,0x7e,0xfc,0xfb,0xfe,0x7e,0x7d,0xfe,0xfd,0xff,0x7e -,0x7d,0xfe,0xfb,0xfa,0xfe,0x7e,0xfe,0xfc,0xfd,0xfd,0x7e,0xfe,0xfd,0xfe,0xfe,0xfe,0xfd,0xfe,0xfd,0xfe,0xfd,0xff,0x7e,0x7e,0xff,0x7e,0x7e,0x7d,0x7e,0xfe,0xfd,0xfd -,0xff,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0xfd,0xff,0x7e,0x7d,0x7d,0xff,0xfe,0xff,0x7e,0x7e,0x7e,0xfd,0xfe,0x7e,0x7e,0xfe,0xfd,0xfc,0xfd,0x7d,0x7e,0xfd,0xfc,0xfe,0x7e -,0x7e,0xfe,0xfd,0xfd,0xfe,0x7e,0x7e,0xfd,0xfd,0xfe,0xfe,0xfd,0xfd,0xfe,0xff,0xff,0xfe,0xfd,0xfd,0xfd,0xfd,0x7e,0x7d,0x7e,0x7e,0xfe,0x7e,0x7d,0x7e,0xfe,0xfd,0xfd -,0xfd,0xfc,0xfb,0xfc,0xfe,0xfe,0xfe,0xfd,0xfd,0xfe,0x7e,0x7e,0xfd,0xfe,0x7e,0x7c,0x7d,0xfd,0xfc,0xfd,0xfe,0x7e,0xfc,0xfc,0xfe,0x7e,0x7d,0x7e,0xfe,0xfc,0xfd,0x7e -,0x7e,0xfe,0xfd,0xfe,0xfe,0xff,0x7e,0x7e,0xff,0x7e,0x7d,0x7c,0xff,0xff,0xfe,0x7d,0x7d,0xfe,0xfe,0xfb,0xfc,0xfe,0xff,0xfe,0xfc,0xfd,0xff,0x7c,0x7c,0x7d,0x7c,0x7b -,0x7c,0x7e,0xfd,0xfe,0xfd,0xff,0xff,0xfd,0xfe,0xfd,0x7e,0x7e,0x7e,0x7e,0xff,0xff,0xfc,0xfd,0xff,0x7d,0x7b,0x7c,0x7e,0xff,0xfe,0x7e,0xfe,0x7e,0xfe,0xfe,0xfe,0xfd -,0x7e,0xfe,0xfe,0xff,0x7e,0x7e,0xfe,0xfd,0xfe,0xfe,0x7e,0xfe,0xfe,0xfd,0xfc,0x7e,0x7e,0xfe,0xfb,0xfd,0xff,0x7e,0x7e,0xfd,0xff,0x7e,0x7e,0xff,0xfd,0xfc,0xfe,0x7e -,0x7c,0xff,0xff,0xfe,0x7e,0x7d,0xff,0xff,0xfd,0xfe,0xfc,0xfc,0xfc,0xfd,0xfd,0xfe,0xfd,0xfd,0xfc,0xfd,0x7e,0x7d,0x7e,0xfe,0x7e,0xff,0x7d,0x7d,0xff,0xfd,0xfd,0x7e -,0x7e,0xff,0xfe,0xfe,0x7d,0x7c,0x7e,0xfd,0xfd,0x7e,0x7e,0x7e,0xff,0xfe,0xff,0x7e,0x7d,0x7d,0xff,0x7e,0x7c,0x7b,0x7d,0xfe,0xfe,0x7e,0x7d,0x7e,0xff,0xfe,0xfe,0xff -,0x7d,0x7c,0x7d,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x7d,0x7e,0x7e,0xff,0x7e,0xff,0x7e,0x7d,0x7e,0xff,0x7e,0x7d,0x7b,0x7d,0xfe,0xfe,0xfe,0x7d,0x7e,0x7e,0xfe,0x7e,0x7d -,0x7c,0x7d,0xff,0x7e,0x7d,0x7c,0x7d,0x7e,0x7e,0x7d,0x7d,0x7e,0xfe,0xfe,0x7e,0x7d,0x7e,0x7e,0x7e,0xff,0x7d,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0xfd,0xfd,0xfe,0x7e -,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e,0x7c,0x7b,0x7d,0x7e,0xfe,0xfe,0xff,0x7e,0xff,0xfd,0xfe,0xff,0xff,0xfe,0xfe,0x7e,0x7c,0x7a,0x7c,0xfe,0xfc,0xfe,0x7e -,0x7e,0x7e,0xff,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7c,0x7c,0x7d,0xff,0xfe,0x7e,0x7d,0x7c,0x7d,0x7e,0xff,0xfe,0x7d,0x7e,0xfe,0xff,0xfe,0x7d,0x7d,0x7e,0xfe,0xff,0x7d -,0x7d,0x7d,0xff,0xfe,0xfd,0xfe,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0xfe,0xff,0x7e,0x7e,0x7e,0xff,0xfe,0xfd,0xff,0x7e,0xff,0xff,0x7e,0x7e,0x7d,0xff,0x7e,0xfe,0xff,0x7d -,0x7e,0xfe,0xfd,0xfe,0x7e,0x7e,0x7e,0xfe,0x7e,0x7e,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0xfd,0xfe,0xff,0x7e,0xff,0xff,0xfe,0xfd,0xfe,0xfe,0xfe,0xfd,0xfb,0xfb,0xfe -,0x7d,0x7c,0x7d,0x7e,0x7e,0x7e,0xfe,0xfe,0xfc,0xfc,0xff,0x7d,0x7e,0xfd,0xfd,0xff,0xfe,0xfd,0xfc,0xfb,0xfb,0xfd,0x7e,0xfe,0xff,0x7e,0x7e,0x7e,0xfd,0xfd,0xfe,0xfe -,0xff,0xfe,0xfd,0xfe,0x7e,0x7e,0x7e,0xff,0xfe,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7e,0xff,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0xfe,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7c -,0x7d,0x7e,0x7e,0xfe,0xfe,0x7d,0x7d,0xff,0xfe,0xfd,0xfd,0xfe,0x7e,0x7d,0x7c,0x7b,0x7a,0x7b,0x7d,0x7d,0x7c,0x7c,0x7c,0x7e,0xfe,0xfe,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e -,0x7e,0x7d,0xff,0xfe,0xff,0x7e,0xfe,0xfe,0x7e,0x7d,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7e,0xff,0xff,0x7d,0x7d,0xfe,0x7e,0x7d,0x7e,0xfe,0xfe,0xfd,0xfc,0xfc,0xfd -,0xff,0xfe,0xfe,0x7e,0xff,0xfd,0xff,0x7e,0xfd,0xfe,0x7d,0x7d,0xff,0xff,0xfe,0x7e,0x7e,0xfe,0xfd,0xfc,0xfe,0x7e,0x7e,0xfe,0xfb,0xfc,0x7e,0xff,0xfc,0xfb,0xfc,0xff -,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0xfe,0xfe,0xff,0x7d,0x7e,0xff,0xfe,0xff,0xfd,0xfb,0xfe,0x7d,0xfe,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xfd,0xfe,0x7e,0x7e,0xfe,0xfd -,0xfd,0xfd,0xfa,0xfc,0x7e,0x7d,0xfd,0xfd,0xfd,0xfc,0xfe,0x7e,0xff,0xfb,0xfc,0xfd,0xfe,0xfe,0xfe,0x7d,0x7b,0x7d,0xfd,0xfd,0xfe,0xff,0xfe,0xfd,0xfd,0xfc,0xfd,0xfe -,0xfd,0xfc,0xfc,0xff,0x7d,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfd,0xfd,0xff,0x7d,0xff,0x7e,0x7e,0xff,0xfd,0xfe,0x7d,0x7e,0xfd,0xfc,0xfd,0xfe,0xfd,0xfe,0xfe,0xfd -,0xfd,0xfd,0xfd,0xfc,0xfb,0xfd,0xfe,0xfb,0xfc,0xff,0xfd,0xfd,0xfd,0xfc,0xff,0xfc,0xfa,0xfc,0xfd,0xfe,0x7e,0x7e,0xfd,0xfd,0xfb,0xfd,0xfe,0xfc,0xfd,0xfc,0xfa,0xfb -,0xfc,0xfe,0xfd,0xfc,0xfc,0xfe,0xfe,0xfd,0xfe,0xfe,0x7e,0x7d,0x7e,0xfe,0xfb,0xfe,0x7d,0xfe,0xfe,0xfe,0xff,0xfe,0xfe,0xfd,0xfd,0xfe,0xfe,0xff,0xfd,0xfc,0xfd,0xff -,0x7e,0xfd,0xfd,0x7d,0x7d,0x7e,0xff,0xfd,0xfd,0xfe,0xfd,0xfe,0x7d,0xfe,0x7e,0xff,0xfd,0xfc,0xfb,0xfc,0xfc,0xfb,0xff,0x7c,0x7b,0x7b,0x7a,0x7b,0x7c,0x7e,0xfe,0x7e -,0xfe,0xfd,0xfe,0xfd,0xff,0x7d,0x7d,0xfd,0xfc,0x7e,0x7d,0xff,0xfc,0xfd,0xff,0x7e,0x7c,0xff,0xfc,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0xff,0xfd,0xff,0x7e,0xff,0xfd -,0xfe,0x7e,0x7e,0xfe,0xfc,0xfd,0xfe,0xfc,0xfe,0xfe,0xfc,0xfb,0xfc,0xfd,0xfe,0xfe,0x7d,0x7d,0xff,0x7e,0x7c,0x7c,0xfe,0xfb,0xfb,0xfd,0x7e,0x7c,0x7d,0xfe,0xff,0x7e -,0x7e,0xff,0xfd,0xff,0x7e,0x7e,0x7e,0xfe,0xfe,0xfe,0x7d,0x7e,0xfd,0xfe,0x7d,0x7d,0xff,0xff,0xfe,0x7d,0x7b,0xff,0x7e,0x7e,0xfd,0xfe,0xfe,0xfd,0xfd,0xfc,0xfd,0xfe -,0x7e,0xff,0x7e,0xff,0xfc,0xfd,0xfe,0x7e,0xfd,0xfd,0x7d,0x7d,0x7e,0x7e,0x7d,0x7d,0xfe,0xfd,0xfa,0xfd,0xfe,0x7e,0x7d,0xfd,0xfe,0xfd,0xfd,0xfe,0xfe,0x7d,0x7b,0x7c -,0x7d,0x7d,0x7d,0xff,0x7d,0xff,0x7e,0xfe,0xff,0x7e,0xfe,0x7e,0xfe,0xfd,0xff,0xfe,0x7e,0x7e,0xfe,0xfc,0x7e,0x7e,0xfe,0xfe,0xfc,0xfe,0x7d,0x7d,0x7c,0xfe,0xfc,0xfc -,0xff,0x7d,0xfd,0xfe,0x7e,0x7d,0x7e,0xff,0x7e,0xfd,0xfe,0xfd,0xfc,0xfc,0xfc,0xfe,0xff,0xfd,0xfc,0xfc,0xfe,0xff,0xfe,0xfc,0xfc,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd -,0xfe,0xfd,0xfd,0xfd,0xfc,0xfe,0xfe,0xfc,0xfc,0xfc,0xfd,0xfd,0xfb,0xfb,0xfd,0xfe,0xfd,0xfc,0xfd,0xfe,0x7d,0x7c,0x7d,0xfc,0xfa,0xfc,0xfe,0xfe,0xfc,0xfd,0x7e,0x7e -,0x7e,0xfe,0xfe,0xfe,0xfd,0xfe,0xfd,0xfe,0xff,0x7e,0xff,0xfe,0xfd,0xfc,0x7e,0xff,0x7e,0xff,0xff,0xfe,0xfe,0xff,0xff,0xfd,0xfd,0xfd,0xfe,0x7e,0xfd,0xfc,0xfb,0xfb -,0xfc,0xfe,0x7e,0x7d,0x7d,0x7d,0x7e,0x7d,0x7d,0x7e,0xfe,0xfe,0xfd,0xfc,0xfd,0xfe,0x7e,0xfe,0xfc,0xfd,0xfe,0x7e,0xfe,0xfe,0xff,0xfe,0xfd,0xfe,0xfe,0xfd,0xfc,0xfd -,0xfe,0x7e,0xff,0x7e,0x7d,0xfe,0x7e,0xfe,0xff,0xfe,0xfe,0x7e,0xff,0xff,0xfe,0xff,0x7d,0xff,0xfb,0xfc,0xfd,0x7e,0xff,0xff,0xfc,0xfe,0xfd,0xff,0x7e,0xff,0xfe,0xff -,0xfe,0xfe,0xfd,0xfe,0xff,0xff,0xfe,0xfc,0xfd,0xfe,0x7e,0xfe,0xfd,0xfd,0xfe,0xfe,0xfe,0xfd,0xfd,0xfc,0xfd,0xfe,0xfe,0xfe,0xfe,0x7e,0xff,0x7e,0xfe,0xff,0xfe,0xff -,0xff,0xfe,0xfe,0xfe,0xfe,0x7e,0xff,0x7e,0xfe,0xfe,0xff,0xff,0xfd,0xfd,0xfe,0x7e,0x7e,0xfe,0xfc,0xfd,0xfe,0x7e,0x7d,0xff,0xfe,0xfe,0x7e,0x7e,0x7e,0x7e,0x7e,0xff -,0xfe,0xfd,0xfe,0xfe,0xfe,0xfc,0xfc,0xfd,0xfe,0x7d,0x7c,0x7b,0x7c,0x7c,0x7e,0x7e,0x7e,0xff,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfc,0xfd,0x7e,0x7e,0xfd,0xfd,0xfe -,0x7e,0x7e,0xff,0xff,0xfe,0xfe,0xfd,0xfd,0xfc,0xfd,0xfd,0xfe,0xfd,0xfc,0xfd,0xff,0x7e,0xff,0xfc,0xfd,0xfe,0x7e,0x7e,0xfe,0xfd,0xfc,0xfc,0xfc,0xfd,0xfe,0xfe,0x7e -,0xfe,0xff,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xfd,0xfe,0xff,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0xfe,0xfe,0xfc,0xfc,0xfd,0xfb,0xfb,0xfb,0xfe,0x7d,0x7e,0x7e,0xfd,0xfe,0x7e -,0xfe,0x7d,0xff,0x7e,0xff,0x7e,0xff,0xfe,0x7e,0x7d,0x7d,0xfe,0xfd,0xfd,0xfe,0x7e,0x7e,0x7e,0x7d,0xfe,0x7e,0xff,0xfe,0xfe,0xfe,0xff,0xfe,0x7e,0x7e,0xff,0xfe,0xfe -,0xfe,0xfe,0xfd,0xfe,0xfe,0x7e,0x7e,0xff,0xfe,0xff,0x7e,0x7e,0x7d,0x7e,0x7c,0x7c,0x7d,0x7d,0xff,0xff,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0xff,0xfe,0xfe -,0xfe,0xfe,0xfe,0xfe,0x7d,0xfe,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0xfe,0xff,0x7d,0x7d,0x7c,0x7d,0xff,0xff,0x7d,0x7d,0x7e,0xff,0x7e,0x7d,0x7e,0x7e,0xff,0x7e,0xfe -,0xff,0xfe,0xfc,0xfc,0xfd,0xfe,0xfe,0xfd,0xfe,0x7d,0x7d,0x7e,0x7e,0xff,0x7e,0x7d,0x7e,0x7d,0xff,0xfe,0x7e,0x7d,0x7d,0x7e,0xff,0x7e,0x7e,0xfe,0xff,0xfe,0xff,0xfd -,0xfd,0xff,0x7e,0x7d,0x7c,0x7b,0x7c,0xfe,0xfe,0x7e,0x7d,0x7d,0x7e,0xfe,0xfe,0xff,0xff,0xfd,0xfe,0xfe,0x7d,0x7d,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0x7e,0xff,0x7c,0x7d -,0x7e,0xff,0xfe,0x7c,0x7d,0x7d,0x7d,0xfe,0xfd,0x7e,0x7c,0x7c,0x7e,0xff,0x7e,0x7e,0xfe,0x7e,0x7d,0x7d,0x7b,0x7b,0x7b,0x7c,0x7d,0xff,0x7e,0xfe,0xfd,0xfe,0x7e,0x7e -,0x7e,0xfe,0xfe,0x7e,0xff,0x7e,0x7e,0xff,0xfe,0x7e,0x7e,0xff,0xfe,0xfd,0xfe,0x7e,0x7e,0x7d,0x7e,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0xfe,0xfe,0xfe,0xfe,0xfe,0xff -,0x7e,0xfd,0xfc,0xfe,0xff,0xfe,0xfd,0xfe,0xfd,0xfd,0xfd,0xfe,0xfe,0xfb,0xfd,0xfe,0xfd,0xfd,0xfd,0xff,0xff,0xfe,0xfe,0xfe,0xfd,0xff,0x7e,0x7e,0xfd,0xfd,0xfd,0xfe -,0xfd,0xfb,0xfb,0xfc,0xfd,0xfe,0xff,0xff,0x7e,0x7d,0x7d,0x7c,0x7d,0xfe,0x7e,0x7e,0xff,0xfe,0xfd,0xfe,0x7e,0xff,0xff,0xfe,0xfd,0xfe,0xfe,0xff,0xfe,0xff,0x7e,0x7d -,0xff,0xfd,0xfc,0xfc,0xff,0x7d,0x7e,0xfe,0xfe,0xff,0xff,0xff,0x7e,0xfe,0xfe,0xff,0x7e,0xff,0xfd,0xfe,0xff,0xfe,0xfe,0x7e,0x7d,0x7a,0x79,0x79,0x7a,0x7c,0x7d,0x7c -,0x7c,0x7e,0xfe,0xfe,0x7e,0x7d,0x7e,0x7e,0xff,0xff,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0x7e,0x7d,0xfd,0xfe,0x7e,0xff,0xff,0xfe,0xfe,0x7e,0xff,0xff,0xfe,0xff,0x7e,0x7e -,0x7d,0xfe,0xfe,0xfc,0xfc,0xfd,0xfd,0xfc,0xfc,0xfe,0xff,0xfe,0xfe,0xfd,0xfe,0xfe,0xff,0x7d,0xfe,0xfe,0x7e,0x7d,0xff,0xfc,0xfd,0xfe,0x7e,0xfe,0xff,0x7e,0xff,0x7d -,0x7c,0x7e,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xfc,0xfe,0xfe,0xfe,0xfd,0xfd,0x7d,0x7c,0x7b,0x7d,0xff,0x7d,0xff,0x7e,0xff,0xfe,0xff,0xfe,0xff,0xfd,0xfe,0xfd,0xfd,0xff -,0x7e,0xff,0xfd,0xfd,0xff,0x7e,0x7e,0xfe,0xfe,0xfe,0xff,0x7e,0xfd,0xfe,0x7e,0x7e,0xff,0xfd,0xfd,0xfe,0xfe,0xfd,0xff,0xfe,0xfd,0xfe,0x7e,0xfd,0xfd,0xff,0x7e,0x7c -,0x7d,0x7e,0xff,0x7d,0x7c,0x7b,0x7b,0x7e,0x7d,0x7e,0x7e,0x7e,0x7e,0xff,0xfc,0xfd,0xfe,0x7e,0xfe,0xfe,0x7e,0xff,0xff,0xfd,0xfe,0x7e,0x7e,0x7e,0xfd,0xfd,0x7e,0x7c -,0x7e,0xfd,0xfd,0xff,0xff,0x7e,0x7d,0x7e,0xff,0x7e,0x7d,0xff,0xfe,0xfe,0xfe,0x7e,0xfe,0xfd,0xfd,0xfe,0xff,0x7e,0x7d,0xfd,0x7e,0x7d,0x7e,0x7e,0xfe,0xfe,0xfd,0x7e -,0x7d,0x7d,0x7e,0xfe,0x7e,0x7e,0x7e,0x7e,0xfe,0xff,0xfe,0x7e,0xff,0xfe,0x7e,0x7e,0xff,0xfc,0xfd,0x7d,0x7b,0x7b,0x7c,0x7e,0x7e,0x7d,0x7c,0x7d,0xff,0xfe,0xfd,0x7e -,0x7e,0xff,0x7e,0x7e,0x7e,0x7e,0x7d,0xfe,0xff,0x7c,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7d,0x7d,0x7e,0x7e,0x7d,0x7c,0x7d,0x7e,0x7e,0x7e -,0x7d,0xff,0xff,0x7b,0x79,0x78,0x79,0x7b,0x7b,0x7a,0x7a,0x7c,0x7d,0x7e,0x7d,0x7b,0x7c,0x7c,0x7c,0xff,0x7e,0x7c,0x7c,0x7d,0x7e,0x7d,0x7e,0x7d,0x7d,0x7d,0x7c,0x7d -,0x7d,0xff,0xff,0x7d,0x7c,0x7b,0x7c,0x7d,0x7e,0x7e,0x7d,0x7d,0x7e,0xfe,0xfe,0x7d,0x7d,0x7e,0xfe,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0x7d,0x7c,0x7d,0xfe,0xfe,0x7e,0x7d -,0x7c,0x7d,0x7c,0x7d,0x7e,0x7c,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0xfe,0xff,0x7e,0x7e,0xfe,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0xfd,0xff,0x7d -,0x7b,0x7c,0x7e,0xff,0xff,0x7d,0x7e,0xfe,0xfe,0xfe,0x7d,0x7d,0x7e,0xfe,0xff,0xff,0xff,0x7e,0x7d,0x7c,0x7d,0x7c,0x7e,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0xfd,0xfe,0x7e -,0x7e,0x7d,0xff,0xfe,0xff,0x7e,0xfd,0xfd,0x7e,0x7e,0x7c,0x7b,0x7d,0x7d,0x7d,0x7d,0x7c,0x7d,0xfe,0xfd,0xff,0x7e,0xff,0xff,0xfd,0xff,0x7d,0x7e,0xff,0xfe,0x7e,0x7d -,0x7e,0xfe,0xfe,0x7e,0x7e,0x7e,0x7e,0xfe,0xff,0xff,0xff,0xff,0xfe,0xff,0x7d,0x7c,0x7d,0x7e,0xfe,0xfd,0xff,0xfe,0xfe,0xfd,0xfe,0xfd,0xfe,0xfe,0xfe,0x7e,0x7e,0x7e -,0x7d,0x7e,0xfd,0xfc,0xfe,0x7e,0xff,0x7e,0xfe,0xff,0x7e,0x7e,0xfe,0xfe,0xfe,0xff,0xff,0x7e,0xfe,0xff,0x7e,0xfe,0x7e,0xfe,0xfd,0xfe,0xfd,0xfd,0xfd,0xfe,0x7e,0x7d -,0x7c,0x7e,0xff,0xfd,0xfe,0x7e,0x7d,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xff,0xfe,0xfd,0xff,0x7d,0x7d,0x7d,0x7e,0xfd,0xfe,0x7e,0x7d,0x7e,0xff,0x7e,0x7d -,0x7d,0x7e,0xfe,0xfe,0x7e,0x7d,0x7e,0xfd,0xfd,0xfe,0x7d,0xfe,0xfe,0x7e,0x7d,0x7c,0x7a,0x79,0x7c,0x7c,0x7b,0x7c,0x7c,0x7e,0xff,0xff,0x7d,0x7d,0x7e,0x7e,0xff,0x7c -,0x7b,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0x7c,0x7d,0x7d,0x7e,0xfd,0x7e,0x7d,0x7e,0x7e,0x7e,0x7c,0x7e,0xfe,0xfe,0xfd,0xff,0x7e -,0x7d,0xff,0xfe,0x7e,0x7e,0x7d,0x7d,0xff,0xfe,0xfd,0xff,0x7e,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0x7d,0x7e,0x7e,0xff,0xfe,0xfc,0xfe,0x7e,0xfd,0xfe,0xfe,0xfc,0xfe -,0x7d,0xfe,0xfd,0xfd,0xff,0x7e,0x7d,0x7e,0x7e,0x7e,0xff,0x7e,0x7e,0xfe,0x7e,0x7e,0x7e,0xfe,0xfd,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfe,0x7d,0x7e,0xfd,0xff,0x7e,0x7e -,0x7d,0x7e,0xff,0xfd,0x7d,0x7b,0x7d,0x7e,0x7e,0xff,0xff,0xff,0x7e,0xfe,0x7e,0x7d,0x7e,0xfe,0xfd,0x7d,0x7b,0x7a,0x7b,0x7d,0x7d,0x7d,0x7c,0x7d,0xff,0xfe,0xff,0x7e -,0x7d,0x7e,0x7d,0x7e,0xfe,0x7e,0xff,0xfc,0xfe,0x7d,0xff,0x7e,0xff,0x7e,0xfe,0x7d,0x7e,0xfe,0xfe,0xfe,0xff,0x7d,0x7e,0xfe,0xff,0xff,0xfe,0xfe,0xfd,0xfd,0xfd,0xfe -,0xfe,0xfc,0xfd,0xfe,0xfe,0xfe,0x7e,0xfd,0xfc,0xfd,0xfe,0xfe,0xfe,0xfe,0xfd,0xfe,0x7e,0xff,0xfd,0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xfd,0xfd,0xfe -,0xff,0xfd,0xfb,0xfc,0xfc,0xff,0xfe,0xfd,0xfe,0xff,0x7e,0x7e,0xfe,0xfd,0xfe,0xff,0xfd,0xfe,0xfe,0xfc,0xfe,0x7d,0xfe,0xfe,0xfd,0xfd,0x7e,0x7e,0xfd,0xfd,0xff,0x7e -,0xfe,0xfe,0xfd,0xfd,0xff,0xff,0xfe,0xfd,0xfe,0xff,0xfe,0xfe,0xfd,0xfc,0xfe,0x7e,0x7d,0xff,0xfe,0xfd,0xfd,0xfe,0xfc,0xfc,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e -,0x7d,0xff,0xff,0xff,0x7e,0x7e,0x7d,0xfe,0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0x7e,0x7d,0xff,0xff,0xfe,0xfe,0xff,0x7e,0x7e,0x7d,0x7e,0xfe,0x7e,0x7d,0xfd,0xfd,0xfe,0x7e -,0x7e,0x7e,0xfe,0x7e,0xff,0x7e,0xff,0xfe,0xfd,0xfe,0x7e,0x7e,0xfe,0xfe,0xfd,0xfe,0xff,0xff,0xfe,0xfd,0xff,0x7d,0xff,0xfd,0xfc,0xfd,0xfe,0x7e,0xfd,0xfe,0xfe,0xfe -,0xff,0xfe,0xfb,0xfc,0xfc,0xfe,0xfd,0xfc,0xfc,0xfd,0xfe,0x7e,0xfd,0xfd,0xfd,0xff,0x7e,0xff,0xfd,0xfd,0x7e,0x7e,0xfe,0xfd,0xfd,0xfd,0xfd,0xfe,0xfc,0xfc,0xfe,0xff -,0x7e,0xfe,0xfc,0xff,0x7d,0x7e,0xfe,0xfc,0xfc,0xfd,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0xfe,0xfd,0xfc,0xfc,0xfd,0xfe,0xfd,0xfc,0xfb,0xfd,0xfe,0xfd,0xfb,0xfd,0xfe,0x7e -,0x7c,0x7d,0x7c,0x7c,0x7d,0x7e,0xfe,0xfd,0xfd,0xfe,0xff,0xfe,0xfd,0xfd,0xfe,0xfe,0x7e,0xfe,0xfc,0xfd,0xfd,0xfe,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfd,0xff,0xff,0xfe -,0x7e,0x7e,0xfd,0xfd,0xfe,0xfe,0x7e,0xfe,0xfd,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfe,0x7e,0xff,0xfe,0xfe,0xff,0xfe,0xff,0xfe,0xfd,0xfe,0xff,0xff,0xfd,0xfc,0xfd,0xfe -,0x7e,0xfe,0xfd,0xfe,0xfe,0xfe,0xfe,0xfc,0xfc,0xfe,0xfe,0xfe,0xfe,0xfc,0xfb,0xfc,0xfe,0xfd,0xfe,0xfe,0xff,0x7d,0x7e,0xfe,0xfe,0xff,0x7e,0xff,0xfc,0xfc,0xfd,0xfd -,0x7e,0xff,0xfc,0xfd,0xfd,0xff,0x7e,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xfe,0xff,0x7e,0xfe,0xfc,0xfe,0xff,0x7e,0xfe,0xfd,0xfe,0xfd,0xfe,0xff,0xff,0xfe,0xff,0xfe -,0xfd,0xfb,0xfb,0xff,0x7b,0x7a,0x7b,0x7e,0x7e,0x7c,0x7c,0x7d,0x7e,0xfe,0xfe,0x7e,0x7e,0xff,0xff,0x7d,0x7d,0x7d,0x7e,0xff,0x7e,0x7d,0x7c,0x7c,0xfe,0xfe,0x7e,0x7c -,0x7c,0xff,0x7e,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7d,0x7e,0x7d,0x7d,0x7e,0xfe,0xfe,0x7e,0xff,0x7d,0x7d,0xfd,0xfd,0xfe,0xfd,0xfd,0xfe,0xff,0x7e,0xfe -,0xfe,0xfd,0xfd,0xfd,0xff,0xfe,0x7e,0xfe,0xfd,0xfe,0x7e,0xfe,0xfd,0xfd,0xfe,0x7e,0xfe,0xfe,0xfe,0xfe,0xfe,0x7e,0xff,0xfe,0xfe,0xff,0x7e,0x7d,0x7e,0xfe,0xfe,0xff -,0x7d,0x7d,0x7e,0x7e,0x7d,0xff,0x7e,0xfd,0xff,0xff,0xff,0xfe,0xff,0xfe,0xfe,0x7d,0x7d,0x7d,0xff,0xff,0xff,0x7d,0x7c,0x7c,0x7e,0x7e,0x7e,0xfe,0xfd,0x7e,0x7d,0x7e -,0x7e,0x7d,0x7e,0x7e,0x7d,0x7d,0x7e,0xfc,0x7e,0x7e,0x7d,0x7b,0x7c,0x7d,0x7d,0x7c,0x7d,0xff,0xfd,0xfe,0x7e,0x7d,0x7c,0x7e,0xfe,0x7e,0xff,0x7e,0x7e,0xfe,0xfe,0xff -,0x7d,0x7e,0xfe,0xfe,0x7e,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7e,0xff,0xfe,0xfd,0xff,0x7c,0x7d,0xff,0xfe,0xff,0xfe,0xff,0xfe,0xff,0xfd,0xfd,0xff,0xfc,0xfc,0xff,0x7e -,0xff,0xfd,0xfd,0xfc,0xfe,0x7e,0x7e,0xff,0xfd,0xfe,0xff,0xfe,0xfe,0xfd,0xfe,0x7e,0xff,0xfd,0xfc,0xfd,0xfe,0xfe,0xfd,0xfb,0xfb,0xfa,0xfd,0xff,0xfd,0xfd,0xfe,0x7d -,0x7e,0x7e,0xff,0xfe,0xff,0x7e,0x7e,0xfe,0xfd,0x7e,0x7e,0x7e,0xfe,0xfc,0xfe,0xff,0x7e,0xfe,0xff,0xfd,0xfe,0x7e,0xfe,0xfd,0xff,0xfe,0x7d,0xff,0xfe,0xfd,0xff,0x7c -,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0xfd,0xfd,0xfe,0xfe,0xfe,0xfc,0xfe,0x7d,0x7c,0x7a,0x7b,0x7a,0x7c,0x7b,0x7b,0x7d,0xfd,0xfc,0xfe,0xfe,0xfe,0xfe,0xfd,0xfe,0x7d -,0xff,0x7e,0xfe,0xfe,0xff,0x7d,0x7e,0xff,0xfe,0x7e,0x7d,0x7e,0xfe,0xfe,0xfd,0xff,0x7e,0xfe,0x7e,0xfe,0x7e,0x7d,0x7e,0xfe,0xfe,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e -,0x7d,0x7e,0xfe,0xff,0x7e,0x7e,0xfe,0xfd,0xfe,0x7e,0x7e,0xff,0xff,0xfd,0xfe,0x7e,0xff,0xfe,0xfe,0xfd,0xff,0xff,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xfe,0xfd,0xfc,0xfe -,0x7e,0xfe,0xfe,0x7e,0x7d,0x7d,0x7e,0xff,0xff,0xfe,0xfe,0xfe,0x7e,0xfe,0x7e,0x7c,0x7c,0x7c,0x7e,0xff,0x7e,0x7e,0x7d,0x7d,0xff,0x7e,0x7d,0x7e,0xff,0xff,0x7e,0x7d -,0x7e,0x7e,0x7e,0xfe,0x7e,0xff,0xff,0xff,0xfe,0xfe,0xff,0x7e,0x7e,0xfd,0xff,0x7e,0x7e,0xfd,0xfd,0x7e,0x7d,0x7d,0x7c,0x7c,0x7e,0x7e,0x7e,0x7e,0xff,0xfd,0xfd,0xff -,0x7e,0x7e,0xff,0x7e,0x7d,0x7e,0x7e,0xfe,0xfd,0xff,0x7e,0x7e,0x7e,0xfe,0xfe,0xff,0x7e,0x7e,0x7e,0xff,0xff,0x7e,0x7e,0xfe,0xfd,0xfe,0xfe,0xff,0xfe,0xfd,0xff,0xff -,0xfe,0xfd,0xfc,0xfd,0xfd,0xff,0x7d,0x7e,0xfe,0xff,0xff,0xfe,0xfd,0xfd,0xfd,0xff,0xff,0xff,0xfd,0xfd,0xfe,0xfd,0xfd,0xfd,0xfc,0xfe,0x7e,0x7e,0xfe,0xfb,0xfe,0xfe -,0xfe,0xfe,0xfd,0xfc,0xfe,0xff,0x7e,0xfe,0xfd,0x7e,0x7e,0x7e,0xfd,0xfc,0xfd,0xfe,0xfe,0xff,0xfd,0xff,0xfe,0xfe,0xfe,0xfe,0xfd,0xff,0x7d,0x7e,0x7e,0xfe,0xff,0x7d -,0x7d,0x7e,0xfe,0xfe,0x7d,0x7e,0x7e,0xfe,0xfd,0xff,0xff,0x7e,0x7e,0xff,0x7e,0x7e,0x7d,0x7d,0xfe,0x7e,0x7e,0x7d,0xff,0xfc,0xfd,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c -,0x7c,0x7b,0x7e,0xff,0x7d,0x7c,0x7c,0x7e,0x7e,0x7d,0x7d,0x7e,0xfd,0xfd,0x7e,0x7d,0x7e,0xff,0xfe,0xfe,0xff,0x7e,0x7e,0xff,0xfd,0xff,0xff,0x7e,0x7e,0xfe,0xff,0x7e -,0x7d,0x7e,0xfd,0xff,0x7e,0xff,0xff,0xfc,0xfe,0xfe,0xfd,0xfe,0xfd,0xfc,0xfd,0xfd,0xff,0xfe,0xfc,0xfd,0x7e,0x7d,0x7e,0xfe,0xff,0x7e,0xfe,0xff,0xfe,0xfe,0xfe,0xfe -,0xff,0xfe,0xfd,0xfd,0x7e,0x7e,0xff,0xfd,0xfc,0xfd,0xfd,0xfe,0xfd,0xfc,0xfe,0x7d,0x7b,0x7c,0xff,0x7e,0x7e,0x7e,0xff,0xfe,0xff,0xfe,0xfe,0x7e,0xfd,0xfd,0xfd,0xfe -,0x7e,0xfe,0xfd,0xfd,0xfe,0xff,0xfd,0xfc,0xfc,0xfe,0xff,0x7e,0x7e,0xfe,0x7e,0x7e,0xff,0xfe,0xfc,0xfd,0xfe,0xff,0xff,0xff,0xfd,0xfd,0xfe,0xfe,0xfb,0xfb,0xfd,0x7e -,0x7d,0x7e,0x7d,0x7b,0x7c,0x7e,0x7e,0xfe,0xfd,0xfd,0xfe,0x7d,0xfe,0xfd,0xfe,0xff,0x7e,0xfe,0x7e,0xfd,0xfe,0x7e,0xfd,0xfd,0xfe,0xfe,0xff,0xff,0xfe,0xfd,0xfd,0xff -,0xff,0xfd,0xfc,0xfe,0xfe,0xfe,0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,0xfd,0xfc,0xfc,0xfc,0xfd,0xfe,0xfe,0xfd,0xfc,0xfd,0xff,0xff,0xfc,0xfc,0xfc,0xfd -,0xfe,0xfe,0xfd,0xff,0xfe,0x7e,0xfe,0xfc,0xfa,0xfc,0xfe,0xfd,0xfc,0xfc,0xfc,0xfc,0xfd,0xfe,0xfe,0xfd,0x7e,0x7e,0x7d,0xfe,0xfe,0xfe,0xff,0x7e,0xfd,0xfd,0xfe,0xff -,0xff,0xfe,0xfd,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xff,0x7e,0xfe,0xfd,0xfd,0xfd,0x7e,0x7e,0xfd,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xfe,0x7d,0xff,0xfe,0xfe,0x7e,0xfe -,0xff,0xfe,0xfa,0xfc,0x7d,0x7c,0x7e,0x7e,0x7d,0x7d,0x7d,0x7c,0x7e,0xfe,0xfe,0x7e,0x7e,0xff,0xff,0x7e,0x7e,0x7d,0x7e,0xff,0x7e,0x7e,0x7c,0x7d,0xfe,0xff,0x7d,0xff -,0xff,0x7e,0xff,0xfd,0x7e,0x7d,0x7e,0x7d,0x7d,0x7c,0x7d,0x7e,0x7e,0xfe,0xff,0x7d,0x7e,0xff,0xfe,0xfd,0xfe,0xfe,0xfd,0xfb,0xfc,0xfd,0xfe,0xff,0xfe,0xfd,0xfd,0xfe -,0x7e,0xfe,0xfd,0xff,0xff,0x7e,0x7e,0x7e,0xfe,0xff,0x7d,0x7e,0x7e,0xfe,0xfe,0xff,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0x7d,0x7e,0xfd,0xfe,0xfe -,0xfe,0xfe,0xfd,0xfe,0xfe,0x7e,0xff,0xfe,0xfd,0x7e,0xff,0xff,0xff,0xfe,0xfe,0x7e,0x7e,0xfd,0xfd,0xfd,0xfe,0xff,0xfd,0xfd,0xfd,0xfe,0x7c,0x7d,0x7e,0xfd,0xfd,0xfe -,0xfe,0xfd,0xfc,0xfc,0xfd,0xfd,0xfd,0xfc,0xfb,0x7e,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0xfc,0xfc,0xff,0x7e,0xfe,0xfe,0xff,0xfd,0xfe,0x7e,0xfd,0xfd,0xfe,0xfe -,0xfe,0xfd,0xfe,0xfd,0x7e,0xfe,0xfe,0xfd,0xfd,0xfe,0xfe,0xfe,0xfd,0xfc,0xfd,0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0x7e,0xfd,0xfd,0xfc,0xfe,0xfd,0xfd,0xfc,0xfb,0xfc,0xfc -,0xfd,0xfd,0xfd,0xfd,0xff,0xfe,0xfe,0xfc,0xfc,0xfc,0xfe,0xfe,0xfe,0xfd,0xfd,0xfe,0xfe,0xfd,0xfd,0xfc,0xfc,0xfe,0xfd,0xfd,0xfb,0xfc,0xfb,0xfc,0xfb,0xfc,0xfd,0xfe -,0x7e,0x7d,0xfe,0xfe,0x7d,0xff,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0xff,0xfe,0xff,0xfe,0xff,0x7d,0xff,0xfd,0xfc,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xff -,0x7e,0xfe,0xfc,0xfe,0x7e,0xff,0xfd,0xfd,0xfd,0xfc,0x7e,0xfe,0xfd,0xfb,0xfc,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0xff,0xfd,0x7e,0x7e,0x7e,0xff,0xfe,0x7e,0x7e -,0x7c,0x7e,0xff,0x7e,0x7c,0x7c,0x7d,0x7d,0xff,0x7e,0x7d,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0xff,0xfd,0xfd,0x7e,0x7e,0xfd,0xfd,0xfe,0xff,0x7e,0x7c,0xff,0xfe,0xff,0x7d -,0xfe,0xfe,0xfe,0xfe,0x7e,0x7e,0xff,0xfd,0xfc,0xfe,0x7e,0x7d,0x7e,0xfd,0xfe,0x7e,0x7e,0xff,0xfe,0xff,0xfe,0x7e,0xfe,0xfe,0xfd,0xfe,0x7e,0xff,0xff,0x7e,0x7e,0x7e -,0x7e,0xfe,0xfd,0xfc,0xff,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0x7e,0xff,0xff,0xfe,0x7e,0x7e,0xfe,0xff,0xff,0x7e,0xfe,0xff,0xfd,0xfd,0xfe,0x7e,0xff,0xfe,0xfd,0x7e,0x7d -,0x7c,0x7c,0xfe,0x7e,0x7d,0x7d,0x7d,0x7e,0xfe,0xff,0x7d,0x7e,0x7e,0x7e,0xff,0x7d,0xff,0xff,0xfc,0xfc,0xff,0x7e,0x7d,0x7d,0x7d,0x7c,0x7c,0x7d,0xff,0xfd,0xfe,0xff -,0x7e,0xff,0xff,0xfe,0xff,0x7e,0xfe,0xfd,0xfc,0xfe,0xfe,0xff,0xff,0xfe,0xff,0x7d,0x7e,0xff,0xfe,0xfe,0x7e,0xfe,0x7e,0xfd,0xfd,0xff,0x7e,0xfe,0xfd,0xfd,0xfe,0x7e -,0xff,0x7e,0xfd,0xfc,0xfd,0xfe,0xfe,0xfc,0xfc,0x7e,0xfd,0xfe,0xfe,0xfc,0xfe,0x7e,0x7e,0xfe,0xfd,0xfe,0xff,0x7e,0x7e,0xfe,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xff,0x7e -,0x7e,0xfe,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0xfe,0x7d,0x7e,0xfe,0xfd,0xfe,0xfe,0xfe,0xfe,0xff,0xfe,0xfe,0x7e,0xfe,0xfd,0xfe,0x7d -,0x7e,0x7e,0xfd,0xfd,0xfe,0xff,0x7e,0xfd,0xfe,0x7e,0x7e,0xff,0xfe,0xfd,0xfe,0xff,0xff,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xfd,0xfc,0x7e,0x7d,0x7c,0x7d,0x7d,0x7c,0x7d -,0x7c,0x7d,0xfe,0xfe,0xfe,0x7e,0x7e,0xff,0xfe,0x7e,0x7d,0x7e,0xfe,0xfe,0xff,0x7e,0x7d,0x7e,0xff,0xfe,0x7d,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0x7c,0xff,0xff,0xff,0x7d -,0x7d,0xfe,0xfe,0x7e,0x7d,0x7c,0x7d,0x7e,0xff,0x7e,0x7e,0xfe,0xfd,0xfc,0xfe,0xff,0xff,0xff,0xfc,0xfc,0xfe,0x7e,0x7e,0xff,0x7d,0x7e,0x7e,0xff,0xfd,0xfe,0xfe,0x7e -,0xfe,0xfd,0xfd,0xfc,0xfe,0xfe,0xfe,0xfc,0xfb,0xfe,0xfc,0xfd,0xfc,0xfb,0xfd,0xfe,0x7d,0xfe,0xfe,0xfe,0xfd,0xff,0x7e,0xfe,0xfd,0xff,0x7e,0xff,0xfc,0xfd,0xfe,0x7e -,0x7e,0xfe,0xfd,0xfd,0xff,0xff,0x7e,0xfe,0xfd,0xfe,0x7e,0xff,0xfd,0xfe,0xfe,0xff,0x7e,0xfd,0xfd,0xfd,0xfe,0xfe,0xfd,0xfc,0xfd,0xfd,0xfe,0xfe,0xfd,0xfb,0xfc,0x7e -,0x7e,0xff,0xfe,0x7e,0xff,0x7e,0x7e,0xff,0xfd,0xfc,0xfd,0xff,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,0xfc,0xfb,0xfd,0xfd,0xfb,0xfa,0xfb,0xfe,0xfd,0xfd,0xfc,0xfb,0xfc,0xfe -,0x7e,0xfd,0xfc,0xfc,0xfd,0xfd,0xfc,0xfb,0xfc,0xfe,0xff,0xfe,0xfc,0xfd,0xfd,0xfe,0xfd,0xfd,0xfc,0xfc,0xfd,0xfd,0xfe,0xfc,0xfd,0xfe,0xfe,0xfe,0xfd,0xfe,0xfd,0xfd -,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfc,0xfd,0xfd,0xfc,0xfa,0xf9,0xfb,0xfc,0xfd,0xfc,0xfb,0xfb,0xfd,0xfe,0x7e,0xfd,0xfe,0xfd,0xfe,0xfe,0xfd,0xfd,0xfd,0x7e -,0xfe,0xfd,0xfb,0xfb,0xfd,0xfd,0xfd,0xfe,0xfe,0x7e,0xfe,0x7e,0xfe,0xfd,0xfd,0xfe,0xfe,0xfd,0xfd,0xfd,0xfe,0xfe,0xfd,0xfc,0xfc,0xfc,0xfe,0xfe,0xfe,0xfd,0xfd,0xfe -,0xff,0xff,0xfc,0xfc,0xfe,0x7e,0x7c,0x7d,0x7e,0x7d,0x7d,0x7e,0xfe,0xfd,0xfc,0xfd,0xfe,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xfe,0x7e,0xff,0xfe,0xfd,0xff,0x7e -,0x7e,0xfe,0xfd,0xfe,0xfe,0xff,0xff,0xfd,0xfd,0xff,0x7d,0xff,0xfd,0xfd,0xfd,0x7e,0x7e,0x7e,0xfe,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0x7e,0x7e,0xff,0xfd,0xfd,0xff -,0x7e,0xfe,0xfe,0xff,0xff,0x7e,0xff,0xfe,0xfe,0xff,0x7d,0x7e,0xff,0xfd,0xff,0x7e,0x7e,0x7e,0xfd,0xfd,0xfe,0xff,0xfd,0xfb,0xfd,0xfe,0x7d,0x7e,0x7e,0xfe,0xfe,0x7e -,0x7d,0x7e,0xfe,0xfe,0x7e,0x7e,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfe,0xfe,0xff,0x7e,0xfe,0xff,0xff,0x7d,0x7e,0xfe,0xfd,0xfe,0x7e,0xff,0xff,0xfd,0xfe,0xff -,0xff,0xff,0xfc,0xfc,0xfe,0x7e,0xfe,0xfd,0xfc,0xfe,0x7e,0x7c,0x7d,0xff,0x7e,0x7c,0x7d,0xff,0xff,0xff,0x7e,0x7e,0x7e,0xff,0x7e,0x7e,0x7d,0xff,0xfd,0xfd,0xff,0xfe -,0xff,0xff,0xfd,0xfe,0xff,0x7d,0x7e,0xff,0xfe,0x7e,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0x7d,0x7e,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xfe,0xfd,0xff,0xfe,0xfd,0xfb,0xfc,0xfd -,0xfe,0xfe,0xfd,0xfd,0xfe,0x7e,0x7e,0xfe,0xfd,0xfe,0xff,0xfe,0xfd,0xfc,0xfd,0xfd,0xfe,0xfd,0xfb,0xfc,0xfc,0xfe,0xfc,0xfc,0xfb,0xfc,0xfc,0xfc,0xfd,0xfc,0xff,0x7e -,0x7d,0xfe,0xfd,0xfd,0xfd,0x7e,0x7e,0x7e,0xfd,0xfd,0xfd,0xff,0xfb,0xfc,0xfd,0xfd,0xff,0x7e,0x7e,0xfe,0x7e,0x7e,0x7d,0xfe,0xfd,0x7e,0xff,0x7e,0xff,0xfe,0xfd,0xff -,0x7d,0xff,0xfd,0xfe,0x7e,0xff,0xff,0xfe,0xfd,0xfd,0xfe,0xfe,0xfd,0xfc,0xfd,0x7e,0x7c,0x7c,0x7c,0x7c,0x7c,0x7b,0x7c,0xff,0xfd,0xfe,0xfe,0xff,0xfe,0xfe,0xfe,0xfe -,0x7e,0x7e,0xff,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xff,0x7e,0x7d,0x7e,0xff,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0xff,0xff,0x7e,0xfd,0xfe,0xfd,0x7e,0xfe,0xfd,0xfd,0xfd,0xfe -,0xfe,0xff,0xfd,0xfe,0xfe,0x7e,0xff,0xfc,0xfd,0xfe,0xff,0xff,0x7e,0xfe,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0xff,0x7e,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xfe -,0xff,0xfe,0xff,0xfe,0x7e,0x7d,0x7d,0xfe,0xfe,0x7e,0x7e,0x7d,0xfe,0x7e,0x7e,0x7c,0x7c,0x7d,0xfe,0xfd,0x7e,0xff,0x7e,0xfe,0xfe,0xfe,0xff,0x7e,0xff,0xff,0xfe,0x7d -,0x7e,0x7e,0xff,0x7e,0x7d,0x7d,0x7c,0x7e,0xff,0xfe,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0xfd,0xfc,0xfe,0x7d,0x7c,0x7b,0x7b,0x7a,0x7b,0x7c,0x7d,0xff,0xfe,0x7d -,0x7d,0x7d,0xfe,0x7e,0x7e,0x7d,0x7e,0xff,0xfe,0xff,0x7d,0x7d,0xff,0xfe,0x7e,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7e,0x7d,0x7e,0x7c,0x7e,0x7d,0x7d,0x7c,0x7d -,0x7c,0x7d,0xfe,0xff,0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xfd,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0xfe,0x7e,0xff,0x7e,0xfd,0xfe,0x7e,0x7d,0xff,0xfe,0xff,0xff -,0x7d,0x7e,0xff,0xfe,0xfe,0xff,0xfe,0xfc,0xfe,0xff,0x7d,0x7c,0x7c,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0xfe,0x7e,0x7e,0x7d,0xfe,0xfd,0xfe,0xfe -,0xfe,0xfe,0xff,0xfe,0xff,0x7e,0xff,0xff,0xff,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0xfe,0xff,0xfe,0xfd,0xfe,0xff,0xff,0xfe,0xfc,0xfd,0xfd,0x7e,0x7c,0x7d,0x7c,0x7c,0x7b -,0x7b,0x7c,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0xfe,0x7d,0x7c,0x7d,0x7e,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xff,0x7e,0x7d,0xff,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xfe,0xff -,0x7e,0xfe,0x7e,0x7e,0x7d,0x7e,0xff,0xfe,0xfe,0x7e,0xff,0x7e,0xfe,0xff,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0xfd,0xff,0xff,0xfe,0xfe,0xfe,0x7e,0xff,0xfe,0xfe,0xff,0x7e -,0x7e,0x7e,0xff,0xfe,0x7e,0x7e,0x7e,0xfe,0xff,0xfe,0xfe,0xfe,0xfd,0xfc,0xfd,0xff,0x7e,0xfe,0xff,0xfe,0x7e,0x7e,0xff,0x7e,0xff,0x7e,0x7e,0x7d,0xfe,0xff,0xff,0x7e -,0x7e,0x7e,0xff,0xfe,0x7e,0x7e,0x7e,0xfe,0xff,0xfe,0x7e,0x7e,0x7e,0x7e,0xff,0xff,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0xfd,0xfe,0x7e,0x7d,0xfe,0xfd,0xfd,0xfe -,0x7d,0x7c,0x7c,0x7a,0x79,0x79,0x7b,0xff,0xfd,0xfe,0x7d,0x7e,0xff,0xfe,0xff,0x7d,0x7d,0x7e,0xfe,0x7e,0x7d,0x7c,0x7e,0xfe,0xfe,0x7e,0x7d,0x7e,0xff,0xfe,0xff,0x7c -,0x7d,0x7e,0x7e,0x7d,0x7c,0x7c,0x7d,0xfe,0xfe,0x7e,0x7e,0x7e,0xff,0xff,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0xfe,0x7e,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfc,0xfd,0xff -,0x7e,0xff,0xfe,0xfe,0x7d,0x7e,0xfe,0xfe,0xfe,0xff,0x7e,0x7d,0xfe,0xfe,0xff,0x7e,0xfe,0xfd,0xfd,0xfd,0xff,0x7d,0x7e,0xfe,0xfe,0xff,0xff,0xff,0xff,0xfe,0xfe,0xff -,0x7e,0xfe,0xfe,0xfe,0x7d,0x7d,0x7e,0xff,0xfe,0x7e,0x7e,0x7e,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0x7e,0x7d,0x7d,0x7d,0x7e,0xfe,0xfd,0xfe,0x7e,0xff,0xfe,0xfe,0xff -,0x7d,0x7e,0xfe,0xfd,0xff,0x7c,0x7c,0x7c,0x7c,0x7c,0x7b,0x7c,0x7e,0xfd,0xfe,0x7e,0x7d,0xff,0xfe,0xfe,0x7e,0x7e,0xff,0xfd,0xfc,0xfe,0x7e,0x7d,0x7e,0x7e,0xff,0x7e -,0x7e,0x7e,0x7e,0xfe,0x7e,0x7c,0x7d,0xff,0xfe,0xff,0x7e,0x7e,0xfd,0xfc,0xfe,0x7e,0x7e,0xff,0xfd,0xfd,0xfd,0x7e,0xfd,0xfd,0xfd,0xfd,0xfe,0x7e,0x7e,0xfe,0xfe,0x7e -,0x7d,0x7e,0xff,0xfe,0xff,0xff,0x7e,0xfe,0xfe,0x7e,0x7c,0x7d,0xfe,0xfc,0xfe,0xff,0x7e,0x7e,0xfd,0xfe,0xfe,0xff,0xfd,0xfd,0xfd,0xff,0x7e,0xff,0x7e,0x7e,0xff,0x7e -,0x7e,0xfe,0xfe,0x7e,0x7d,0x7e,0x7e,0xfd,0xfd,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0xfe,0xfe,0x7e,0xff,0xfe,0x7d,0x7c,0x7d,0x7c,0x7b,0x7d,0xff -,0x7d,0x7e,0xfd,0xfd,0xfe,0xff,0x7e,0xfd,0xfd,0xfc,0x7e,0x7c,0x7d,0xff,0x7e,0x7c,0x7d,0x7e,0xfe,0xfd,0xfd,0xff,0xfe,0xfc,0xfc,0xfe,0xff,0x7e,0xfe,0xff,0xff,0xff -,0x7e,0x7d,0x7e,0xfe,0xff,0x7e,0xfe,0xfd,0xfd,0xfd,0xff,0x7e,0xff,0xfd,0xfc,0xfe,0x7e,0xfe,0xfd,0xfd,0xff,0xff,0xfe,0xfd,0xfd,0xfd,0xfe,0xfe,0xfb,0xfd,0xfe,0xfe -,0xfd,0xff,0xfe,0xfc,0xfe,0xff,0x7e,0xfe,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0x7e,0x7d,0x7e,0xfe,0xfe,0xff,0x7e,0xff,0xff,0xfd,0xfe,0xfe,0xfe,0xfc,0xfd,0xfd,0xff -,0xfe,0xfe,0xfe,0xfd,0xff,0xff,0x7d,0xfe,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfd,0x7e,0xff,0xfe,0xfd,0xfe,0x7e,0xff,0xfe,0xfe,0xff,0x7e,0x7e,0xfe,0xfe,0xfe,0x7d -,0x7e,0xfe,0xfe,0xff,0xfe,0xff,0xff,0xfe,0xfd,0xfe,0xff,0xff,0xfe,0xfe,0xfd,0xfe,0x7e,0x7e,0x7e,0x7d,0x7b,0x7c,0x7d,0xff,0xfd,0x7e,0x7d,0x7d,0xfe,0xfe,0xff,0xfe -,0x7d,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xfe,0xff,0xff,0x7e,0x7e,0x7e,0xff,0xff,0x7d,0x7d,0x7d,0xff,0x7e,0x7e,0x7e,0x7d,0x7e,0xfe,0xff,0x7e,0x7e,0xfc,0xfd,0xfd,0xfe -,0xfe,0xfe,0xfe,0xfe,0x7d,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xfd,0xff,0xff,0x7e,0x7e,0xff,0x7e,0xff,0x7e,0xfe,0xfe,0xfe,0xfd,0xff,0x7d,0xfe,0xfd,0xfe,0xff -,0xfd,0xfd,0xfe,0xfd,0xff,0x7e,0x7d,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xfe,0x7e,0xff,0x7e,0xff,0xfd,0xff,0x7e,0x7c,0x7e,0x7e,0xff,0xfe,0xfe,0x7e,0xfd,0xfd,0x7e,0x7d -,0x7e,0xff,0xff,0xfe,0xff,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0x7e,0x7e,0x7e,0xff,0xfe,0xfd,0xfe,0xff,0xfe,0xfe,0x7e,0x7d,0x7d,0x7d,0xff,0xfd,0xfd,0x7e -,0x7d,0x7e,0x7e,0x7e,0xfe,0xff,0xff,0xfe,0xfd,0xfd,0xfe,0xfe,0xfc,0xfc,0xfe,0xff,0xfe,0xfd,0xfd,0xfd,0xff,0x7e,0x7e,0xfe,0xfe,0x7e,0xff,0x7e,0xff,0xfe,0xfd,0xfe -,0xff,0xfd,0xfd,0x7e,0xff,0x7e,0xfe,0xfe,0xfd,0xfd,0xfe,0xfd,0xfc,0xfc,0xfd,0xff,0xff,0x7e,0xff,0xfe,0xfe,0xff,0x7e,0xfe,0xfd,0xff,0x7e,0xff,0xfe,0xfd,0xfe,0xfd -,0xfe,0xfd,0xfc,0xfd,0xfe,0xfe,0xfd,0xfd,0xfc,0xfd,0xfe,0x7e,0xff,0xfd,0xfe,0x7e,0xfe,0xfe,0xfd,0xfe,0xfe,0xff,0xff,0xfe,0xfd,0xfd,0x7e,0xfe,0xfd,0xfd,0xfe,0xff -,0xfe,0xfe,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0x7d,0x7d,0x7e,0xfe,0xfe,0xff,0xff,0xfd,0xfe,0xfe,0x7e,0x7d,0x7e,0xfe,0xfd,0xfd,0x7e,0x7d,0x7d,0x7d,0x7b,0x78 -,0x7a,0x7b,0x7c,0x7d,0x7e,0x7d,0x7e,0xfe,0xfe,0x7d,0x7e,0x7e,0xfe,0xfe,0x7e,0x7d,0x7d,0x7e,0xff,0xff,0x7e,0x7d,0x7e,0xfe,0xfe,0xff,0x7e,0x7e,0xff,0xff,0x7e,0xff -,0xff,0xff,0xfe,0xff,0x7e,0x7d,0xff,0xfe,0xfd,0xfe,0x7e,0x7e,0xfe,0xfe,0x7e,0x7e,0x7e,0x7e,0xfd,0xfd,0xfe,0x7e,0x7e,0xfe,0xfd,0xff,0xff,0x7e,0xfe,0xfd,0xfe,0xfe -,0xff,0xfe,0xfe,0xff,0x7e,0x7e,0xfe,0xfe,0xfd,0xfd,0x7e,0xfd,0xfc,0xfc,0xfe,0x7e,0x7d,0x7c,0x7e,0xfe,0x7e,0x7e,0xff,0xfe,0xfd,0x7e,0x7e,0x7e,0xfe,0xff,0x7e,0x7d -,0x7c,0x7c,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0xff,0x7d,0xff,0xfd,0xfd,0xfd,0xff,0x7e,0xfe,0xfd,0xfe,0xfe,0x7e,0x7e,0xfd,0xfc,0xfd,0x7e,0xff,0xfd,0xfd,0xfc,0xfc -,0xfd,0xfe,0xfe,0x7e,0x7c,0x7d,0x7e,0xfd,0xfd,0xfe,0xfe,0x7e,0xfe,0xfd,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xfe,0xfe,0xfe,0xfd,0xfb,0xfc,0xfe,0xfd,0xfd,0xfd,0xfe,0xfe -,0xfe,0xfe,0xfe,0xfe,0x7e,0x7e,0x7e,0xfd,0xfd,0x7e,0x7e,0xfe,0xfe,0xfd,0xfc,0xfd,0xfe,0xfd,0xfb,0xfb,0xfc,0xfd,0xfc,0xfc,0xfc,0xfd,0x7e,0x7e,0xff,0xfd,0xfe,0x7e -,0xfe,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,0xfb,0xfb,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xff,0xfe,0xfd,0xfb,0xfb,0xfe,0xfe,0x7e,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfe,0x7e -,0x7e,0xfd,0xfc,0xfc,0xfd,0xfe,0xff,0xfe,0xfc,0xff,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0xfe,0x7e,0xfe,0xfc,0x7e,0x7e,0xfe,0xfe,0xfe,0xff,0xfe,0xff,0xfe,0xfd,0xfc,0xfe -,0x7e,0xfd,0xfe,0xfd,0xfe,0xff,0x7e,0x7c,0x7d,0x7b,0x7a,0x7b,0x7c,0x7e,0x7e,0x7d,0x7d,0x7e,0xfe,0xfe,0xfe,0x7d,0x7d,0xff,0x7e,0xfe,0xfe,0xff,0xfe,0xfe,0xff,0xff -,0x7d,0x7d,0xfd,0xfd,0x7e,0x7e,0x7e,0xff,0xfe,0xff,0x7e,0x7d,0x7e,0xfc,0xff,0x7e,0xff,0xff,0xfd,0xfd,0xfd,0xfe,0x7e,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xfd,0xfd,0xff -,0x7e,0x7e,0xfd,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0x7e,0x7d,0x7e,0xfe,0xfe,0x7e,0x7e,0xff,0xff,0xfd,0xff,0xff,0xfe,0xfe,0xfe,0xfe,0x7e,0x7d,0xfe,0xfd,0xff,0xfe -,0x7e,0x7e,0xfd,0xfe,0xfe,0xff,0xff,0xfd,0xfc,0xfe,0xfe,0x7e,0xfe,0xfe,0xfe,0xff,0xff,0xfe,0xfd,0xfe,0xfe,0xff,0x7e,0xfe,0xfe,0x7e,0x7e,0x7e,0xff,0xfe,0x7e,0x7e -,0x7e,0xff,0xfc,0xfd,0x7e,0x7e,0xfe,0xff,0xfd,0xfc,0xfe,0xfe,0x7e,0x7e,0x7d,0x7b,0x7d,0x7d,0xff,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfe,0xff,0xff,0xfe,0xfc,0xfd,0xfe -,0xfe,0xfe,0xfd,0xfe,0x7e,0xff,0x7e,0xfe,0xfe,0xfe,0xfe,0x7e,0xfe,0xfe,0xfd,0xff,0xff,0xff,0xfe,0x7e,0xfe,0x7e,0x7d,0x7d,0x7e,0x7e,0x7d,0x7e,0xfd,0xfd,0xfe,0xfd -,0xfe,0xfe,0xfc,0xfc,0xfe,0xff,0xff,0xfe,0xfe,0x7e,0xfe,0xff,0xfe,0xfd,0xfe,0xfe,0xff,0xfe,0xfd,0xfd,0xfd,0xfd,0xfe,0xfd,0xfa,0xfd,0xfc,0xfd,0xfc,0xf9,0xfc,0xfe -,0xfe,0x7e,0xfe,0xfe,0x7e,0x7e,0xff,0xfd,0xfd,0xff,0x7e,0x7e,0xff,0x7e,0xfe,0xfe,0xff,0xff,0xfd,0x7e,0x7d,0x7e,0xfe,0x7e,0xfe,0xfe,0x7e,0x7e,0xff,0xfd,0xfe,0x7e -,0x7d,0x7e,0x7e,0x7e,0xff,0x7d,0x7d,0xfe,0xfe,0xff,0x7d,0x7e,0xff,0xfe,0xfe,0xfe,0xfe,0x7e,0xff,0x7c,0x7b,0x7b,0x7b,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0xfe,0xfe,0xff -,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0x7b,0x7e,0x7e,0x7e,0x7c,0x7c,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0xff,0x7d,0x7d,0x7d,0x7d,0xfe,0x7e,0x7c,0x7d,0x7d,0x7e,0x7e,0xfd,0x7e -,0x7d,0x7e,0x7d,0x7e,0x7d,0x7d,0x7e,0x7e,0xfe,0xff,0x7e,0x7c,0x7d,0x7e,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7e,0xff,0x7e,0xfe,0x7d,0x7b,0x7b,0x7b,0x7d,0x7d,0x7e -,0xff,0xff,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0x7e,0xfe,0xfe,0x7e,0x7e,0xfe,0x7e,0x7e,0x7e,0xff,0xfe,0xff,0xff,0x7d,0x7e,0xff,0xff,0x7e,0x7d,0x7e,0x7e,0xff,0xff,0x7e -,0xff,0xfe,0xfd,0xfe,0xfe,0x7e,0xff,0xfe,0xff,0xfe,0x7e,0xfe,0xfe,0xfe,0xff,0x7e,0x7e,0x7e,0xfe,0xfd,0xfe,0xfe,0x7d,0x7e,0x7e,0x7c,0x7d,0x7c,0xff,0xfd,0xfe,0x7e -,0xff,0x7e,0xff,0x7e,0x7e,0xff,0xff,0xfe,0xfe,0x7e,0xff,0x7e,0xff,0xfe,0x7e,0xff,0x7d,0x7e,0x7e,0x7e,0x7d,0x7e,0x7d,0xff,0xff,0x7e,0x7e,0x7d,0x7e,0xfe,0xfe,0x7e -,0x7e,0xfe,0xff,0xfe,0x7e,0x7e,0xfe,0xfd,0xfc,0xfe,0xfe,0xfd,0xfd,0xfd,0xff,0xfe,0xff,0xfe,0xfd,0xfe,0xfd,0xfe,0x7e,0xff,0xfe,0xfe,0xff,0xfe,0xff,0xfd,0xfe,0xff -,0xfe,0x7e,0xfe,0xfe,0xfe,0xfe,0xfe,0xfc,0xfc,0xfe,0xff,0x7e,0xfe,0xfe,0xff,0xfe,0x7e,0xfe,0xfd,0xfe,0xfe,0xff,0x7e,0xfe,0xfe,0x7e,0xfe,0x7e,0x7e,0xff,0x7e,0x7e -,0xff,0x7e,0xff,0xfe,0x7e,0x7e,0x7e,0x7e,0xfe,0x7e,0x7d,0x7d,0x7e,0x7e,0xff,0x7e,0x7e,0xfd,0xfe,0xfc,0x7e,0xfe,0xfe,0xfe,0xfc,0xfe,0xfc,0xfd,0x7e,0x7e,0x7c,0x7b -,0x7c,0x7c,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0xfe,0x7e,0x7e,0x7d,0xff,0x7e,0x7e,0x7d,0x7e,0x7e,0xfe,0xff,0x7e,0x7e,0x7d,0xff,0xff,0xff,0x7e,0x7e,0x7e,0x7e,0x7d,0x7e -,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0xff,0x7e,0xfd,0xfd,0xff,0xff,0x7e,0xfe,0xfe,0xff,0x7e,0xfe,0xfe,0xfd,0xfe,0xff,0xfe,0xff,0xfe,0xfe,0xff,0x7e,0xfe,0xfe,0x7e,0x7e -,0xff,0xff,0xfe,0x7e,0x7d,0x7c,0x7c,0x7e,0xfe,0x7e,0xfe,0x7e,0xff,0xfe,0xff,0xfd,0x7d,0xff,0xfe,0xff,0xfe,0x7e,0x7e,0xff,0xfe,0xff,0xfe,0x7e,0xfe,0xfd,0x7e,0xff -,0xff,0xfe,0xfd,0xff,0x7e,0xff,0x7e,0x7e,0xfe,0xff,0xff,0xff,0xfe,0xfe,0x7e,0xff,0x7e,0x7e,0xff,0xfd,0xff,0x7e,0x7e,0xfe,0xfd,0xfe,0xff,0x7e,0x7d,0xfc,0xfe,0xfe -,0xfd,0xfe,0xff,0x7d,0x7c,0x7b,0x7b,0x7e,0x7d,0xff,0x7e,0xfe,0xfe,0xfe,0xfe,0x7d,0x7e,0xff,0xfe,0xfe,0xfe,0xff,0x7e,0xfd,0xfe,0x7e,0x7e,0x7e,0x7d,0xfe,0x7e,0xff -,0x7e,0x7e,0xfd,0x7e,0xff,0x7d,0x7d,0xff,0xfe,0xfe,0x7d,0x7e,0x7e,0xfe,0xfe,0x7e,0xff,0x7e,0xfe,0xff,0xff,0xfd,0xfe,0xfd,0xfc,0xff,0x7e,0xfe,0x7e,0xfe,0xff,0xfe -,0xfe,0x7e,0xfe,0xfe,0x7e,0x7d,0xff,0xff,0xfd,0xff,0x7d,0x7e,0x7e,0xfe,0xfd,0xff,0xfe,0xfe,0xfd,0xfd,0xfe,0xfe,0x7e,0x7e,0x7e,0xff,0x7e,0x7e,0xfe,0xff,0xff,0x7e -,0x7e,0xfe,0xfe,0xfe,0x7e,0xfe,0x7e,0xfe,0xff,0x7e,0x7e,0xfe,0xfd,0xff,0xfe,0x7e,0x7d,0x7e,0xfe,0xfe,0x7e,0x7e,0x7d,0x7d,0xff,0xff,0x7e,0x7e,0xfe,0xfd,0xfe,0x7e -,0xff,0x7e,0xfd,0xfe,0xff,0xff,0x7e,0x7d,0x7b,0x7c,0x7a,0x7a,0x7d,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0xfe,0x7e,0x7d,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0xfe,0x7e,0x7e -,0x7c,0x7d,0x7e,0x7d,0xff,0x7d,0x7e,0xff,0x7d,0x7e,0x7e,0x7c,0x7e,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0x7e,0x7e,0x7d,0xfe,0xfe,0x7e,0xfd,0xff,0xff,0xfe,0x7e,0xfe -,0x7e,0xff,0xfe,0x7e,0xff,0xff,0x7e,0x7e,0xff,0x7e,0x7e,0x7d,0xff,0xfd,0xfe,0x7d,0x7d,0x7d,0x7e,0xff,0xff,0xfe,0x7e,0xfe,0xfe,0xff,0xff,0x7e,0x7e,0x7e,0xff,0xfe -,0xff,0x7e,0xff,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0x7e,0xff,0xfe,0xfe,0xff,0xff,0xfe,0xfd,0xff,0xff,0xfe,0x7d,0xff,0xfe,0xff,0x7e,0x7e,0xfe,0xfc,0xfd,0xfe -,0xff,0x7e,0xfe,0xfe,0xff,0x7e,0x7d,0x7e,0xfe,0xfe,0xfe,0xfc,0xfe,0x7e,0x7e,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0xfe,0xfe,0x7e,0xfe,0xfe,0x7e,0x7d,0x7e,0xfe,0x7e,0x7e -,0xff,0xfe,0xfd,0xfd,0xfd,0xff,0xfd,0xfd,0xfd,0xfd,0xff,0xfe,0xfe,0xfd,0xfd,0xfc,0xfe,0xfe,0xfe,0xfe,0xff,0x7e,0x7d,0xff,0xff,0xff,0xfe,0x7e,0xfe,0xfe,0xfe,0xfe -,0x7e,0xfd,0xfd,0xff,0xfe,0xff,0xff,0xfe,0xfd,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0xff,0x7e,0x7d,0xfd,0xfe,0xfe,0xff,0xff,0xfd,0xfd,0xfc,0xfd -,0xff,0x7e,0xfe,0xff,0xff,0x7e,0xff,0xff,0xfe,0xfe,0x7e,0xfe,0xfd,0xfd,0xfe,0x7e,0x7e,0xff,0xfd,0xfe,0xfe,0x7e,0xfe,0xfd,0xff,0xfe,0xff,0xff,0xfe,0xfe,0xfe,0x7e -,0xff,0xff,0xfe,0xfe,0xff,0x7d,0x7e,0xfd,0xfe,0xfe,0xfe,0x7e,0x7d,0xfe,0xfe,0xfe,0xfe,0xfd,0x7e,0x7c,0x7b,0x7a,0x7a,0x7c,0x7e,0x7e,0x7d,0x7e,0x7e,0xfe,0xff,0x7d -,0x7e,0x7d,0xfe,0xff,0x7d,0x7d,0x7e,0xff,0xff,0x7d,0x7d,0x7c,0x7e,0x7e,0x7e,0x7e,0x7d,0xff,0x7e,0xff,0x7d,0x7d,0x7e,0x7e,0xff,0x7e,0x7d,0x7d,0xff,0xfd,0xff,0x7d -,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xff,0x7d,0xff,0xfe,0xfe,0xfe,0x7e,0x7d,0x7e,0xff,0xfe,0x7e,0x7e,0xfe,0xfd,0xfe,0xff,0x7e,0x7d,0x7e,0xfe,0xff,0x7e -,0xfe,0xfe,0xfe,0xff,0xff,0x7d,0x7e,0xfd,0xfe,0xff,0x7d,0x7e,0x7e,0xfe,0xfe,0xff,0x7e,0xff,0xff,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0x7d,0x7e,0xff,0x7e,0x7e,0x7e -,0x7d,0x7e,0xfc,0xfe,0x7e,0x7e,0x7e,0x7e,0xff,0xfe,0x7d,0x7e,0xfe,0xfe,0x7d,0x7e,0x7e,0x7e,0x7e,0xff,0x7e,0x7e,0x7e,0xff,0x7d,0x7c,0x7b,0x7b,0x7e,0x7e,0x7e,0x7d -,0x7e,0x7e,0xfe,0xfe,0x7e,0x7d,0xff,0xfd,0xfe,0xfd,0xfe,0xfe,0xfe,0xfe,0xff,0x7e,0x7e,0xfd,0xfd,0xfd,0xfe,0xff,0xfe,0xfe,0xfe,0xff,0x7d,0x7e,0xfd,0xfe,0xfe,0xfe -,0xfe,0xfd,0xfd,0xfe,0xfe,0xff,0xfe,0xfd,0xfe,0xfe,0x7e,0xfe,0xfd,0xfc,0xfb,0xfd,0xfe,0xfd,0xfd,0xfe,0x7e,0xfe,0xfe,0xfd,0xfc,0xfe,0xfe,0xfe,0xfc,0xfd,0xfd,0xfe -,0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfb,0xfc,0x7e,0xfd,0xfe,0xfe,0xff,0x7e,0x7e,0x7e,0xfc,0xfd,0xfe,0xfe,0xfd,0xfc,0xfd,0xfe,0xfe,0xff,0xfd,0xfd,0xfd,0xfe -,0x7e,0xfe,0xff,0xff,0x7e,0x7d,0x7e,0xfe,0xfe,0x7d,0x7d,0x7e,0xff,0xfe,0xff,0x7e,0x7e,0xff,0xfd,0xfd,0xff,0xfe,0x7e,0xfd,0xfd,0xff,0xfe,0xfd,0xfd,0x7e,0x7d,0x7a -,0x7a,0x7b,0x7d,0x7e,0x7d,0x7e,0x7e,0xfe,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0x7e,0xff,0xff,0x7e,0xff,0x7d,0x7e,0xfe,0x7e,0x7d,0x7d,0x7e,0x7e,0xfe,0xff,0x7e -,0x7d,0x7d,0xfe,0xfe,0x7e,0xfe,0xff,0xfd,0xff,0xff,0x7e,0xff,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xfd,0xfd,0x7e,0x7e,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe -,0x7e,0xff,0xfe,0xfd,0xfe,0x7e,0xfd,0xfe,0xff,0x7e,0xff,0xfe,0xfe,0xfd,0xfd,0xff,0x7e,0xfe,0xfd,0xfe,0xff,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfd,0xfe -,0xfe,0xfe,0xfd,0xfd,0xfe,0xfe,0xfe,0xfd,0xfe,0xff,0x7e,0x7e,0xff,0xfe,0xfe,0xfe,0xff,0x7e,0xfd,0xff,0x7d,0x7e,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xfe,0xfd,0xfe,0xff -,0xff,0xfc,0xfe,0xfe,0x7e,0x7d,0x7d,0x7d,0xff,0x7e,0x7d,0xff,0x7e,0xfe,0xff,0xff,0xff,0xfe,0xfd,0xfe,0xff,0x7e,0xfe,0xfe,0xff,0xfd,0xfe,0xfe,0xfd,0xfd,0xfe,0x7e -,0x7e,0xfe,0xfe,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0xfe,0xff,0xfe,0xfe,0xfd,0xfd,0xfd,0xfe,0xfe,0xfd,0xfd,0xfc,0xfe,0xfd,0xfe,0x7e,0xfe,0xfe,0x7e -,0x7d,0x7e,0xfe,0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0xfd,0xff,0xff,0xfd,0xfd,0xfc,0xff,0xfd,0xfc,0xfc,0xfc,0xfd,0xfd,0xff,0xfd,0xfd,0xfd,0xff,0xff,0xfe,0xfe,0xff,0xff -,0x7e,0x7e,0xff,0x7e,0x7e,0x7e,0x7e,0xfe,0xfe,0xff,0x7d,0x7d,0xff,0xfe,0xfe,0xfe,0xfe,0xff,0xfe,0xfe,0xff,0xff,0xff,0xfe,0xfd,0xfe,0xff,0xfe,0xfd,0xfd,0xff,0x7e -,0xff,0xff,0xfe,0xfe,0xfe,0x7e,0xfe,0xfe,0x7e,0x7d,0x7c,0x7d,0x7c,0x7e,0x7d,0x7d,0x7d,0x7e,0xfe,0xff,0xff,0x7e,0xff,0xfe,0xfe,0xfe,0x7e,0x7e,0xff,0xff,0x7e,0x7e -,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xfd,0x7e,0x7d,0x7c,0x7d,0x7e,0x7d,0xff,0x7e,0x7e,0x7d,0x7e,0x7d,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0x7e,0xff,0xfd,0xfe,0xff -,0xff,0x7e,0x7e,0xff,0xff,0x7e,0x7e,0xfe,0xfd,0x7e,0x7e,0xff,0xfe,0xff,0x7e,0x7e,0x7d,0xff,0xff,0xfd,0xff,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0x7e,0x7e,0x7e,0xfe,0x7e -,0x7e,0xff,0xfe,0x7e,0x7c,0x7d,0x7d,0xff,0xff,0xfe,0xff,0x7e,0xfe,0xfe,0xfe,0x7e,0xfd,0xfe,0xfe,0xfe,0xff,0x7e,0x7e,0xfd,0xfd,0x7e,0x7d,0x7d,0x7e,0x7e,0xff,0x7e -,0xff,0xff,0xfe,0xff,0x7e,0x7d,0x7d,0xff,0x7e,0x7e,0xfe,0xfe,0xfd,0xfe,0x7e,0x7b,0x7c,0x7d,0x7e,0xff,0xff,0xfe,0xff,0xfe,0xff,0x7e,0x7e,0xfe,0xfe,0xff,0xff,0xfe -,0x7e,0xfe,0xfd,0xfc,0xff,0x7e,0xff,0xfe,0xff,0xfe,0xfe,0xfd,0xfe,0xfd,0xfe,0xff,0x7e,0xff,0xfd,0xff,0xfe,0xff,0xfd,0xfd,0xfd,0xfd,0xfe,0xfd,0xfd,0xfb,0xfd,0xff -,0xfe,0xfe,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0x7e,0xff,0xfe,0xfd,0xfd,0xfe,0xff,0xff,0x7e,0xfe,0xff,0xff,0x7e,0xfe,0xfe,0xfc,0xfc,0xfc,0xfb,0xfa,0xf9,0xfb,0xfc -,0xfe,0xff,0xff,0xfe,0xff,0xfe,0xfe,0xfd,0xfd,0xff,0x7e,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfe,0x7e,0xfd,0xfd,0xfc,0xfe,0xfc,0xfe,0xff,0xfd,0xfd,0xfe -,0x7e,0xfd,0xfd,0xff,0x7e,0x7e,0xfe,0xfd,0xfe,0xfd,0xff,0xfe,0xfe,0xfd,0xfd,0xff,0xfd,0xfc,0xfc,0xfe,0x7d,0x7c,0x7b,0x7b,0x7e,0x7d,0x7e,0x7e,0xfe,0xff,0x7e,0x7e -,0x7e,0xff,0xfe,0xfd,0x7e,0xff,0xff,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xff,0x7e,0x7e,0x7d,0x7e,0x7e,0xff,0x7e,0xff,0xfe,0xfe,0x7e,0xff,0x7d,0xff,0x7e,0x7e,0x7e -,0x7e,0xfe,0xfe,0xfd,0xff,0xff,0xfe,0xfd,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0xff,0x7e,0xff,0xfe,0x7e,0x7e,0x7e,0xfe,0xff,0xfd,0xfe,0x7e,0x7e,0xff,0xfe,0xff,0x7e -,0x7e,0xff,0xfe,0xfd,0xfe,0xfe,0xff,0xfd,0xfe,0xfd,0xff,0xfe,0xfd,0xfe,0x7e,0xff,0xfe,0xfe,0xfe,0xfd,0xfe,0x7e,0xfd,0xfe,0xff,0x7e,0xff,0xff,0xff,0xfd,0xff,0x7e -,0xfe,0xff,0xff,0xfe,0x7d,0x7e,0x7e,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0xfd,0xfe,0xff,0x7e,0x7e,0xff,0xfe,0xff,0xff,0xfd,0xfd,0xfd,0x7e,0x7e,0x7d,0x7e,0x7e,0xff,0x7e -,0x7d,0xfe,0xff,0xff,0x7e,0x7e,0xfe,0xfe,0xfd,0xfe,0x7e,0x7e,0x7e,0xfe,0x7e,0x7d,0x7e,0x7e,0x7e,0xff,0xfe,0x7e,0xff,0xfd,0xfe,0x7e,0x7d,0x7d,0xff,0xff,0xfe,0x7e -,0x7d,0x7e,0xff,0xfd,0xfe,0x7e,0xfe,0xff,0xfe,0xfe,0xfe,0x7e,0xff,0xfe,0xfe,0xfe,0xfd,0xfe,0xfe,0xfe,0x7d,0x7d,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xff,0xfe,0xfe -,0xfe,0xff,0xff,0xfe,0x7d,0x7e,0x7e,0xfe,0xfd,0xfd,0xfd,0xfe,0xfe,0xff,0x7e,0x7e,0x7e,0xff,0xff,0x7e,0x7e,0x7e,0xfe,0xff,0xfe,0x7e,0x7e,0xfe,0xfe,0x7e,0x7e,0x7d -,0x7d,0x7e,0xff,0xff,0x7e,0x7e,0xff,0xfe,0xff,0x7e,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0xfe,0xff,0x7d,0x7e,0xff,0xfe,0xfe,0xfe,0xfe,0xff,0xfc,0xfd,0x7d,0x7c -,0x7a,0x7b,0x7d,0x7d,0x7d,0x7c,0x7e,0xff,0xff,0x7e,0x7c,0x7c,0x7e,0x7d,0x7e,0x7d,0x7d,0x7c,0x7e,0x7e,0x7c,0x7d,0x7e,0x7e,0xff,0x7e,0x7d,0x7d,0x7d,0x7e,0x7d,0x7d -,0x7b,0x7d,0x7e,0x7d,0x7d,0x7d,0x7c,0x7e,0xfe,0x7e,0x7e,0x7e,0x7e,0x7e,0xff,0x7e,0x7e,0xff,0xfe,0xff,0xfe,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0xff,0xff,0xfe,0xff,0x7e -,0x7d,0xff,0xfe,0xfe,0xff,0xfe,0xfe,0xff,0xfd,0xfe,0xfe,0xff,0xfc,0xfd,0xfd,0xfd,0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfd,0xfe,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e -,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0xff,0xfe,0xfd,0x7e,0xff,0x7e,0xff,0xfe,0x7e,0x7e,0x7e,0xfd,0xfe,0xfe,0xfd,0xfe,0xfe,0xfd,0xfc,0xfe,0x7e,0xff,0x7e,0xfe,0xfe,0x7e -,0xfe,0xfd,0xfe,0xff,0x7e,0x7c,0x7c,0x7e,0xff,0x7e,0x7e,0x7e,0xfe,0xfe,0xfe,0xff,0x7e,0xfe,0xfe,0xfe,0xff,0x7e,0xff,0x7e,0xfd,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff -,0x7e,0xfe,0xff,0xfe,0x7e,0x7d,0x7d,0x7e,0xfe,0x7e,0x7d,0x7e,0xfe,0xff,0xfe,0x7e,0x7e,0xff,0xfd,0xfe,0xfe,0xff,0x7e,0xfe,0xff,0xff,0xfe,0x7e,0xfe,0xff,0x7e,0x7e -,0x7d,0xff,0x7e,0xfe,0xfe,0x7e,0xfe,0xfe,0xff,0xff,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0xfe,0x7e,0xfd,0xfd,0xfe,0xff,0x7e,0xfd,0xff,0x7e,0x7e,0xff,0xfe,0xff,0xff,0xfe -,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfe,0xfe,0xff,0x7e,0xfe,0xfd,0xfe,0x7e,0xff,0x7e,0xfe,0xfe,0xff,0x7d,0x7c,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0x7e -,0x7e,0x7e,0xfd,0xfd,0x7e,0x7e,0x7e,0xfe,0x7d,0x7c,0x7c,0x79,0x7b,0x7d,0x7c,0x7c,0x7c,0x7c,0x7e,0x7e,0xff,0x7d,0x7d,0xff,0x7d,0x7d,0x7d,0x7d,0x7e,0xfe,0xff,0x7d -,0x7d,0x7d,0x7d,0x7d,0x7d,0x7b,0x7c,0x7e,0x7e,0x7e,0x7c,0x7d,0x7c,0x7e,0xfe,0x7d,0x7d,0x7e,0xfe,0xff,0x7c,0x7e,0xff,0xff,0xfd,0xfe,0xfe,0xff,0xff,0xfd,0x7e,0x7c -,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0xff,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0xff,0xff,0x7d,0xff,0xfd,0xfe,0xff,0x7e,0xfe,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xff -,0x7e,0xfe,0x7e,0xff,0x7d,0x7d,0x7e,0x7c,0x7e,0x7d,0x7c,0x7d,0xfe,0xfe,0x7d,0x7e,0x7e,0xfe,0xfe,0xfd,0x7e,0x7d,0x7e,0x7e,0xfd,0xfe,0x7d,0xff,0xff,0xfe,0x7e,0x7d -,0x7e,0x7e,0xfe,0xff,0x7c,0x7e,0x7e,0x7e,0xfe,0xfe,0xfe,0x7d,0xfc,0xfd,0x7e,0x7d,0x7c,0x7d,0x7c,0xfe,0xfe,0x7d,0xff,0xfd,0xfc,0xfe,0xfe,0xfe,0xfd,0xfe,0xfe,0x7e -,0x7e,0xff,0xfe,0xfd,0xff,0xff,0xfe,0xfe,0xfd,0xfe,0x7e,0x7e,0xfe,0xfd,0xfe,0x7e,0x7d,0x7e,0x7c,0xfe,0x7e,0x7e,0xfe,0xfe,0xfd,0x7d,0x7e,0x7e,0xff,0xfd,0xfe,0xfd -,0xfe,0xfd,0xfb,0xfc,0xfd,0x7e,0xff,0xfd,0xff,0xff,0x7e,0x7e,0x7e,0x7e,0xfe,0xff,0x7e,0xfe,0xfe,0xfd,0x7e,0x7e,0xff,0xfd,0xfd,0xfe,0xff,0xff,0xfc,0xfc,0xfe,0xff -,0xff,0xfe,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xff,0x7e,0xfd,0xfe,0xfe,0xfd,0xff,0x7e,0xfe,0xfc,0xfe,0xfe,0xfe,0xfe,0xfc,0xfd,0xfe,0xff,0x7e,0xff,0xfe,0xfe,0x7e -,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0xfe,0xfd,0xfc,0xfe,0x7e,0xfd,0xfd,0xfc,0xfd,0xfc,0xfe,0xfd,0xfb,0xfe,0x7c,0x7c,0x7a,0x7c,0x7c,0x7b,0x7b,0x7e,0xff,0xfe,0xfe,0xff -,0x7e,0x7e,0xfe,0x7e,0x7e,0x7d,0x7e,0x7e,0xff,0x7e,0x7d,0x7d,0x7d,0xfe,0x7e,0x7c,0x7e,0x7e,0xff,0x7e,0x7e,0x7e,0x7e,0xfe,0xfe,0xff,0x7e,0xfe,0xff,0xfd,0xfe,0xfe -,0x7e,0xff,0xfc,0xfd,0xff,0xfe,0xfe,0xfd,0xfe,0xff,0x7e,0x7d,0xfd,0xfd,0xfe,0x7e,0xfe,0xfe,0xfd,0xfd,0xfe,0xfe,0xfe,0xfd,0xfd,0xff,0x7e,0xfe,0xfd,0xfd,0xfe,0xfe -,0x7e,0xfe,0xff,0xff,0xff,0x7d,0xff,0xff,0xfe,0xff,0xff,0x7e,0xfd,0xfc,0xfd,0xfe,0xfe,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xff,0xfe,0xfe,0xfe,0xfe,0xfd,0xff -,0xfe,0xfd,0xfe,0xfc,0xfe,0x7e,0xff,0xfe,0xfd,0x7e,0x7e,0xfe,0xfe,0xfc,0xfe,0xfe,0x7e,0xfe,0xfc,0xfd,0xff,0xfe,0xfd,0xfb,0xfc,0x7e,0xfe,0x7e,0xfe,0xfd,0xfe,0x7d -,0xfe,0xfe,0xff,0xfe,0xfe,0xfe,0x7e,0xfd,0xfc,0xfe,0x7e,0x7e,0xfd,0xfd,0xfe,0xfd,0xff,0xff,0xfd,0xfc,0xfd,0x7e,0xfe,0xfd,0xfe,0xff,0x7e,0x7e,0x7e,0xfe,0xfc,0xfe -,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfb,0xfd,0xfc,0xfd,0xfb,0xfc,0xfd,0xfc,0xfe,0xfd,0xfd,0xfc,0xfd,0xfe,0xff,0xfd,0xfb,0xfe,0xfc,0xfd,0x7e,0xfc,0xfd,0xff -,0xff,0xfd,0xfc,0xfd,0xfe,0x7e,0xfd,0xfc,0xfd,0xfc,0xfe,0xff,0x7e,0xfe,0xfc,0x7e,0xfe,0xfd,0xfe,0xfd,0xfe,0xff,0xfd,0xfd,0xfd,0xff,0x7e,0x7e,0xfe,0xff,0xff,0x7e -,0x7e,0x7d,0xfe,0xfd,0xfd,0xff,0x7e,0xfe,0xfe,0xff,0xff,0x7e,0x7e,0xfd,0xff,0x7e,0x7e,0xfe,0xff,0xfe,0x7e,0x7d,0xfe,0x7e,0xfd,0x7e,0xff,0xff,0xfd,0xfa,0xff,0x7c -,0x7a,0x7b,0x7c,0x7d,0x7c,0x79,0x7b,0x7d,0xfd,0x7e,0xfe,0xfe,0xfd,0xfe,0xfe,0xff,0x7e,0xfe,0xfe,0xfd,0x7e,0x7d,0x7e,0xfe,0xfe,0x7e,0x7d,0x7d,0x7d,0xff,0xff,0x7d -,0x7c,0x7e,0x7e,0x7e,0xfe,0x7d,0x7c,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xfe,0x7e,0xff,0x7e,0xff,0xfe,0xfe,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0x7d -,0x7d,0xff,0xfe,0xfe,0x7d,0x7d,0x7d,0xfe,0xfe,0xfe,0x7e,0xff,0xfd,0xfd,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0xfd,0xfb,0xfd,0x7e,0xfe,0xfe,0xfd,0xfd,0xff,0xfe -,0xfe,0xfd,0xfd,0xff,0x7e,0xff,0x7d,0xfe,0xfd,0xfd,0xff,0xff,0xfe,0xfc,0xfe,0x7e,0xfd,0xfe,0xfd,0xfc,0xfe,0x7e,0x7e,0xfd,0xfd,0xfe,0x7e,0x7e,0xfd,0xfe,0xfe,0xff -,0x7e,0xfd,0xfb,0xfd,0x7d,0x7b,0x7d,0x7e,0x7d,0x7d,0x7e,0xff,0xfd,0xfb,0xfd,0xff,0xfe,0xfd,0xfb,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0x7e,0x7e,0xfe,0xfe,0xfe,0xff,0x7e -,0xfe,0x7e,0xfe,0xfe,0x7e,0x7d,0xfe,0xff,0xfe,0xfe,0xff,0xfe,0xfe,0xfd,0xff,0x7e,0x7e,0xfe,0xfe,0xfd,0xff,0xfd,0xfd,0xfc,0xfc,0xfd,0xfd,0xfe,0xfe,0xfd,0xfe,0xff -,0xfd,0xfe,0xfe,0xfd,0xfe,0x7e,0xfe,0xfd,0xfd,0xfe,0xff,0xfe,0xfd,0xfd,0xfe,0xfd,0xfe,0xfc,0xfb,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,0xfd,0xfe,0x7e,0x7e -,0xff,0xfe,0xfc,0xfd,0xfd,0xfc,0xfe,0xfd,0xfd,0xfd,0x7e,0xfe,0xfd,0xfd,0xfe,0xff,0xff,0xfe,0xfd,0xfe,0xfe,0xff,0xfe,0xfe,0xfd,0xfe,0xfe,0xff,0xfe,0xfd,0xfe,0xfe -,0x7e,0xfe,0xfd,0xfd,0xfd,0xfe,0xfe,0xfb,0xfd,0xfe,0x7b,0x7d,0x7c,0x7d,0x7c,0x7b,0x7c,0x7d,0xfe,0xff,0xff,0x7e,0xff,0xfd,0xfd,0x7e,0x7e,0x7e,0xfd,0xfd,0xfe,0x7e -,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0x7e,0xfd,0xfe,0xff,0x7e,0x7e,0x7e,0xfe,0x7e,0x7e,0xff,0xfe,0xfd,0xff,0x7e,0x7e,0xfe,0xfe,0xfd,0xff,0x7e,0x7e,0x7e,0x7e,0xff,0xff -,0xfe,0xff,0xfe,0xfe,0x7e,0xff,0xfe,0xfd,0xfe,0xfd,0xfe,0xff,0xfe,0xfd,0xfd,0xfe,0xff,0x7e,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xfd,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfe -,0xfd,0xfd,0xfe,0xfd,0x7e,0xfe,0xff,0xfe,0xfe,0x7e,0xff,0x7e,0xff,0xfe,0xfe,0x7e,0x7d,0xff,0xfe,0xfe,0x7e,0x7e,0xff,0xfe,0xff,0xfe,0xfe,0xff,0xff,0xfe,0xff,0x7e -,0x7e,0xff,0xff,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0xfd,0xfc,0xfe,0x7d,0x7c,0x7c,0x7c,0x7e,0x7d,0x7d,0xff,0xfe,0xff,0x7e,0x7d,0x7c,0x7d,0x7e,0x7e,0x7e -,0x7d,0xfe,0xfe,0x7e,0x7d,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0xff,0xff,0xfd,0xfe,0xff,0x7e,0x7e,0xfd,0xfd,0xfd,0xfe,0xfe,0xfd,0xfd,0xfc,0xfd -,0xfe,0xfc,0xfc,0xfb,0xfd,0xff,0xfe,0xfd,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xfe,0xff,0xfe,0xfe,0xfd,0xfd,0x7e,0xfe,0xfe,0xfd,0xff,0x7e -,0xfe,0x7e,0xff,0xfd,0xfe,0xfe,0xfe,0xfc,0xfe,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xff,0xff,0x7e,0xfe,0xfe,0xfd,0xff,0x7e,0x7d,0x7e,0xff,0x7e,0x7e -,0x7e,0x7e,0xfe,0xfd,0xff,0x7e,0x7d,0xff,0xfe,0xfe,0x7e,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xfd,0xfd,0xfd,0x7d,0x7b,0x7b,0x7c,0x7c,0x7b,0x7c,0x7c,0x7d,0xff,0x7e,0x7d -,0x7c,0x7e,0xff,0x7e,0x7e,0x7d,0x7e,0x7e,0xfe,0x7d,0x7c,0x7d,0x7d,0x7d,0x7c,0x7b,0x7b,0x7c,0xff,0x7e,0x7d,0x7c,0x7c,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0xff,0x7e,0x7e -,0x7d,0xfe,0xfe,0xfe,0x7e,0x7d,0x7d,0x7e,0xfe,0xff,0x7e,0x7e,0x7e,0xff,0x7e,0x7d,0x7d,0x7e,0xff,0x7e,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0x7d,0x7d,0xfe,0xfe,0xfe,0xff -,0x7e,0x7e,0xfe,0xfe,0x7e,0x7e,0x7e,0xff,0xff,0x7e,0xff,0xfe,0xfc,0xfc,0xfe,0x7d,0x7d,0xff,0xff,0xff,0xff,0x7d,0x7d,0x7d,0x7e,0x7c,0x7c,0x7d,0x7e,0xfe,0xff,0x7e -,0x7d,0x7e,0xff,0x7e,0x7e,0x7e,0xff,0xfe,0xff,0xff,0x7e,0x7e,0xff,0xff,0x7e,0x7d,0x7d,0x7e,0x7e,0xff,0x7d,0x7d,0xff,0xfe,0xfd,0x7e,0x7c,0x7b,0x7d,0x7e,0x7d,0x7d -,0x7d,0x7e,0xfe,0xff,0x7e,0x7c,0x7d,0x7e,0xff,0x7e,0x7e,0x7e,0x7e,0xff,0xff,0xff,0x7e,0x7e,0xfe,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7e,0xff,0xff,0xff -,0x7e,0xfe,0xff,0x7e,0xff,0x7d,0x7e,0xff,0xfd,0xfe,0x7e,0xfe,0xfe,0xfe,0x7e,0xff,0xff,0x7e,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xff,0xff,0x7d,0x7d,0xff,0xfd,0xfe,0x7e -,0x7d,0x7e,0xff,0xff,0x7e,0x7e,0xff,0xff,0xfe,0x7e,0x7e,0x7e,0xff,0xfe,0xff,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0x7d,0x7d,0x7e,0xff,0x7e,0x7d,0xfe,0x7e,0xff,0xfe,0x7e -,0x7e,0xff,0xfd,0xfd,0x7d,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xfe,0xfe,0x7d,0x7e,0xfe,0xfe,0x7e,0x7e,0xff,0xfd,0xfc,0xfe,0x7c -,0x7a,0x7a,0x7b,0x7b,0x7a,0x79,0x7b,0x7c,0x7d,0x7d,0x7b,0x7c,0x7e,0xff,0xfe,0x7e,0x7d,0x7e,0xfe,0xff,0xff,0x7e,0x7d,0x7d,0x7e,0x7d,0x7d,0x7c,0x7d,0xff,0x7d,0x7c -,0x7b,0x7b,0x7c,0x7e,0x7e,0x7d,0xfe,0xff,0x7e,0x7e,0x7d,0xfe,0xfd,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xff,0x7e,0xfe,0x7e,0x7e,0xfe,0x7e,0x7d,0x7e,0xff,0xfe,0x7e,0x7d -,0x7e,0xfe,0xfd,0xfe,0x7e,0x7c,0x7e,0xfe,0xff,0x7e,0x7d,0x7e,0xfd,0xfe,0xfe,0xff,0x7d,0x7d,0x7d,0x7d,0x7e,0x7d,0xff,0xfe,0xff,0x7e,0x7e,0x7e,0xfe,0xfd,0xfe,0x7d -,0x7e,0xfe,0xfe,0xfe,0x7e,0x7d,0x7e,0xfe,0xfe,0x7e,0x7d,0x7e,0xfd,0xfd,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0xfe,0xff,0xfe,0xfd,0xfe,0xfe,0x7d,0xff,0xfe,0xfe,0xfe,0x7d -,0x7d,0xfe,0xfc,0xfb,0xff,0x7d,0x7d,0x7e,0xfe,0x7e,0x7d,0x7d,0xff,0xfc,0xfd,0xff,0xfe,0xfe,0xfe,0xfe,0xfd,0xff,0xff,0xfe,0xfe,0xfe,0xff,0xff,0xfe,0xff,0xfe,0xff -,0x7e,0x7e,0xfe,0xfe,0xff,0xff,0x7e,0xfe,0xfd,0xfe,0x7e,0x7e,0x7e,0x7e,0xff,0x7e,0xff,0xfc,0xfe,0xfe,0xff,0xfe,0xfd,0xfd,0xfd,0xfe,0xff,0x7e,0xfd,0xfc,0xfd,0xfe -,0xfe,0x7e,0xfd,0xfd,0x7e,0x7e,0x7e,0xfe,0xfd,0xff,0x7e,0xff,0xfe,0xfe,0xfe,0x7e,0x7c,0xfe,0xfd,0xfe,0xfe,0xff,0xfd,0xfd,0xfd,0xfe,0xff,0x7e,0xfe,0xfd,0xff,0x7e -,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xfc,0xfe,0x7d,0x7e,0xfe,0xfe,0xfe,0xff,0x7e,0xfe,0xfd,0xfe,0x7e,0x7e,0xfe,0xfd,0xfe,0x7e,0x7e,0x7c,0xff,0xfe,0x7e,0x7e -,0x7d,0xff,0xff,0xfe,0xff,0x7e,0xfe,0xfe,0xfc,0x7e,0x7b,0x7c,0x7b,0x7c,0x7b,0x7b,0x7a,0x7b,0x7d,0x7e,0x7c,0x7d,0x7e,0xfe,0xff,0xff,0xff,0x7d,0x7d,0x7e,0x7e,0x7e -,0x7e,0x7e,0xff,0xff,0x7d,0x7d,0x7d,0x7e,0x7e,0x7d,0x7c,0x7d,0x7e,0xff,0x7e,0x7e,0x7d,0xfe,0xff,0xfe,0xfe,0xff,0xfd,0xfe,0xfe,0xff,0x7e,0xfe,0xfd,0xfe,0xfe,0x7e -,0x7e,0x7e,0xfe,0xff,0x7d,0x7d,0x7d,0xfe,0xff,0x7e,0x7d,0x7d,0x7e,0xff,0xff,0x7d,0x7d,0xfe,0xfd,0xfe,0xff,0x7e,0x7e,0xfe,0xfe,0x7e,0x7d,0x7c,0xff,0xff,0x7d,0x7e -,0x7e,0x7e,0xff,0xfe,0xfe,0xff,0x7e,0xfd,0xfe,0x7e,0x7e,0x7e,0xff,0xfe,0xfe,0x7c,0x7d,0x7e,0xfe,0xff,0x7d,0xff,0x7e,0xff,0xfe,0x7e,0x7d,0x7e,0xfe,0xfd,0xfe,0xfd -,0xff,0xfe,0xfe,0xfd,0x7e,0x7e,0xff,0x7e,0xfe,0x7e,0x7d,0x7d,0xff,0xfe,0xfc,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7d,0xff,0xfe,0xfd,0xfe,0xff,0xfd,0xfd,0xff,0xff -,0x7d,0xfe,0xfe,0xfe,0xff,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0xfe,0xfe,0xff,0x7e,0x7d,0x7e,0xfe,0xfd,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xff,0xfe -,0xfe,0xfe,0xfc,0xfc,0xfe,0xfe,0xfd,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xff,0x7e,0xfe,0xfe,0xff,0xfd,0x7e,0x7e,0xff,0xfe,0xfd,0x7d,0xff,0xff,0xff,0xfd,0xfe,0x7e -,0x7e,0x7e,0xfe,0xfe,0xff,0x7e,0xfe,0xfe,0x7e,0x7e,0x7c,0x7d,0x7e,0xfe,0xfe,0x7e,0xfe,0xfd,0xff,0xfe,0x7e,0x7d,0xff,0xfe,0xfc,0xfe,0x7e,0xff,0xfe,0xfe,0xfe,0xfe -,0x7d,0xff,0xfe,0xff,0xff,0x7e,0xff,0xff,0x7e,0xff,0x7d,0x7e,0xff,0xfe,0xfe,0x7d,0xff,0xfe,0xfc,0xfe,0xfe,0x7d,0x7c,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d -,0x7c,0xfe,0xfe,0xff,0xff,0x7e,0x7e,0x7e,0xfd,0xff,0x7d,0xfe,0xfe,0xfe,0x7e,0x7e,0x7e,0x7d,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0x7e,0x7e,0xff,0xfd,0xfd,0xff -,0xff,0xff,0xfe,0xff,0xff,0x7e,0xff,0xfd,0xfc,0xfe,0xff,0xfe,0xfd,0xff,0xfe,0xfd,0x7e,0xff,0xfd,0xfb,0xfe,0x7e,0xfe,0xfe,0xfe,0xfe,0x7e,0xff,0x7e,0xfc,0xfd,0x7e -,0xfe,0xff,0xfd,0x7e,0xff,0x7e,0xff,0xfe,0xfd,0xfd,0xff,0x7e,0xfc,0xfc,0x7e,0xfe,0x7e,0xfe,0xfd,0xfb,0xfe,0xfe,0xfd,0xfd,0xfe,0xfe,0x7e,0xfe,0xfe,0xfd,0xfb,0xff -,0xfe,0xff,0xfe,0xfe,0xfe,0xff,0x7e,0xfd,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xff,0x7e,0xfe,0xfe,0xfd,0xfd,0xff,0xff,0x7e,0xfd,0xfa,0xfb,0xfe,0xff,0xfe,0xfe,0xfe,0x7e -,0xfe,0xfd,0xfd,0xfd,0xfe,0x7e,0xfd,0xfc,0xfd,0xfd,0xfe,0xfe,0xfd,0xfb,0xfc,0xff,0xff,0xfd,0xfc,0xfd,0xfd,0xfe,0xfe,0xfc,0xfb,0xfe,0x7e,0xff,0xfd,0xfd,0xfd,0xfd -,0xfe,0xfe,0xfc,0xfd,0xfe,0xfe,0xfe,0xfa,0xfb,0xfd,0xfd,0xfe,0xfb,0xfb,0xfc,0xfd,0xfe,0xfd,0xfc,0xfc,0xfe,0xfe,0xff,0xfd,0xfc,0xfe,0xff,0xfd,0xfe,0xfb,0xfd,0xfd -,0xfd,0xfe,0xfb,0xfc,0xfe,0x7e,0xfe,0xfc,0xfb,0xfe,0xfc,0xfe,0xff,0xfd,0xfd,0xfc,0xfd,0xfc,0xfa,0xfb,0xff,0xfe,0xfe,0xfd,0xfe,0xfd,0xfe,0xfe,0xfd,0xfc,0xfd,0xfe -,0xfd,0xfd,0xfd,0xfe,0xfd,0xfe,0xfe,0xfc,0xfc,0xfe,0x7d,0xff,0xfe,0xfd,0xfe,0x7e,0xff,0xff,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xff,0x7d,0x7e,0xfd,0xfc,0xfc -,0x7c,0x7c,0x7d,0x7e,0x7c,0x7c,0x7d,0x7e,0xfe,0xff,0x7e,0x7e,0xfe,0xfd,0xfe,0x7e,0x7e,0xff,0xfd,0xfe,0xfe,0x7e,0xfe,0xfe,0xfc,0xfe,0x7e,0xfe,0xff,0xfd,0x7e,0x7d -,0xff,0x7d,0xfe,0xff,0x7d,0x7d,0xff,0xfc,0xfd,0xff,0x7e,0x7d,0x7d,0xfd,0xfe,0xfe,0xfe,0xfc,0xfb,0xfd,0xfd,0xfd,0xfe,0xfd,0xfd,0xfe,0x7d,0xff,0xfe,0xfe,0xff,0xff -,0xfe,0xff,0xfd,0xfe,0xff,0x7e,0xff,0xfd,0xfe,0x7e,0xfe,0xfe,0xfd,0xfc,0xfe,0xfe,0xff,0xfe,0xff,0xfe,0xfe,0xfe,0xfd,0xfd,0xfc,0xfd,0x7e,0xff,0xff,0xfd,0xfd,0x7e -,0xfe,0xff,0xfe,0x7e,0x7e,0x7d,0x7e,0xff,0xff,0xfe,0x7e,0xff,0xff,0xfe,0xfd,0xfd,0xfd,0xfe,0xfe,0xfd,0xfe,0x7e,0xfe,0xfd,0xfd,0xfe,0x7e,0xfe,0xfe,0xfe,0xfe,0xfe -,0xfe,0xfe,0xfd,0xfc,0xfb,0xfe,0x7d,0x7e,0xff,0x7d,0x7e,0x7d,0xfe,0xfc,0xfd,0xfe,0xfe,0xfe,0xfb,0xfc,0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfe,0x7d,0xfe,0xfd,0xfe,0x7e -,0x7d,0xfe,0xfd,0xfd,0xff,0xff,0xfe,0xfd,0xfc,0xfe,0xfe,0xfd,0xfc,0xfc,0xfe,0xff,0xff,0xfe,0xfa,0xfa,0xfc,0xfe,0xfe,0xfc,0xfb,0xfd,0xfd,0xfd,0xfc,0xfb,0xfd,0x7e -,0x7e,0xfe,0xfc,0xfc,0xfe,0xfd,0xfd,0xfc,0xfd,0xfd,0xfe,0x7e,0xfe,0xfc,0xfd,0xff,0xfe,0xfd,0xfe,0xfe,0xfd,0xfe,0xfe,0xfe,0xfb,0xfc,0xfe,0xfd,0xfd,0xfc,0xfd,0xfd -,0xfe,0xfe,0xfc,0xfe,0x7e,0x7e,0x7d,0xfe,0xfe,0xfd,0xfe,0x7d,0xff,0xfd,0xfd,0x7e,0xff,0xfd,0xfd,0xfc,0xfd,0xfe,0xff,0xff,0xfd,0xfe,0xfd,0xfe,0xff,0xfc,0xff,0xfe -,0xff,0xfd,0xfb,0xfc,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfd,0x7e,0x7e,0x7d,0xfe,0x7e,0x7d,0x7e,0xfd,0xfd,0xff,0x7e,0xfe,0xfd,0xfe,0x7e,0xff,0xfe,0x7e,0xfd,0xfe,0xfe -,0xff,0x7e,0xfd,0xfe,0xfe,0x7e,0xff,0xfe,0xfc,0xff,0x7d,0x7e,0x7e,0xff,0xfe,0xfe,0xff,0x7e,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0xfe,0xff,0xff,0xfe,0xfc,0xfc,0xfe -,0xfe,0xfe,0xfe,0xfd,0xff,0x7d,0x7e,0xff,0xfd,0xfe,0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xfe,0xfe,0xff,0x7e,0xff,0xfd,0xfd,0xfe,0x7e,0x7e,0x7e,0xfd,0xff,0xff -,0xfd,0xfe,0xfc,0xfc,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0xff,0xfd,0xfe,0x7e,0x7d,0x7b,0x7d,0xff,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0x7e,0x7e,0xfe,0xfe,0xfc,0xfe,0xfe -,0xfe,0x7e,0xfc,0xfd,0x7e,0x7e,0xfe,0xfd,0xfd,0xfd,0xfe,0xfe,0xfc,0xfc,0xfd,0xfd,0xfe,0xff,0x7e,0x7e,0x7d,0x7c,0x7c,0xfe,0xfc,0x7e,0xfe,0xfe,0xfe,0xfe,0xff,0x7e -,0xff,0xfe,0xfd,0xfd,0xfd,0xfe,0xff,0xfe,0xff,0xfe,0x7e,0x7d,0xfe,0xfc,0xfe,0xfe,0x7e,0x7e,0xfe,0xff,0x7e,0xfe,0xfe,0xfe,0xfc,0xfe,0xfe,0x7e,0xfd,0xfc,0xfd,0xfe -,0xfd,0xfc,0xfb,0xfb,0xfc,0xfe,0xff,0xfe,0xfd,0xfd,0x7e,0x7e,0xfe,0xfe,0xff,0xfe,0xfe,0xfe,0xfc,0xfd,0xff,0xfe,0x7e,0xff,0xfe,0x7e,0xff,0x7e,0xfe,0xfe,0xff,0x7e -,0x7e,0xff,0xfe,0xfe,0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0x7e,0x7e,0xff,0xfd,0xfe,0xff,0x7e,0x7e,0xfe,0xfe,0x7e,0xff,0xff,0xff,0xfe,0x7d,0x7e,0x7d,0xff,0xff,0x7e,0x7e -,0x7d,0x7e,0x7e,0xfe,0xff,0x7e,0x7e,0x7e,0xfe,0xff,0x7e,0xff,0xfe,0xff,0x7d,0x7e,0x7e,0xff,0xfe,0xff,0xfe,0x7e,0x7d,0x7c,0x7d,0x7b,0x7c,0x7c,0x7d,0xff,0xfe,0x7e -,0x7e,0xfe,0xfe,0xff,0x7d,0x7e,0x7e,0x7e,0x7e,0xff,0xff,0x7d,0x7e,0x7e,0x7e,0x7e,0xfe,0xff,0xff,0x7e,0x7d,0x7d,0x7d,0x7e,0xfe,0x7e,0xff,0x7e,0x7e,0x7e,0x7d,0x7d -,0x7c,0x7e,0x7e,0x7e,0xff,0x7e,0x7e,0xfe,0xff,0xfe,0xfe,0xfd,0xff,0xfd,0xfd,0xff,0xff,0x7d,0xfe,0xff,0x7e,0xff,0xfe,0xfd,0xfe,0xff,0xfe,0x7e,0xfe,0xff,0xfe,0xff -,0x7e,0xfe,0xff,0xfe,0xfe,0x7d,0x7e,0x7d,0x7e,0x7d,0x7e,0xff,0x7e,0xfd,0xff,0x7d,0x7e,0xfe,0xfe,0xfe,0xfe,0xff,0xfe,0xfd,0xfe,0xfd,0xff,0x7e,0x7e,0xff,0x7e,0x7d -,0x7d,0x7e,0x7e,0xff,0xff,0x7e,0x7d,0x7e,0xff,0x7e,0x7d,0x7e,0xff,0xfe,0x7e,0x7d,0x7e,0x7e,0x7e,0xfe,0x7e,0x7e,0x7e,0xfd,0xfe,0xfe,0xfe,0x7d,0x7c,0x7e,0x7e,0x7d -,0x7e,0x7e,0xff,0xfe,0xfe,0x7e,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfc,0xfc,0xfe,0xfe,0xff,0x7e,0xff,0xff,0xfe,0xfd,0xfe,0xfd,0xfe,0xfe,0xff,0x7e,0x7e,0xfd,0xfe,0x7e -,0xff,0xfe,0xfd,0xfd,0xfe,0xff,0xfe,0xfe,0xfe,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfe,0x7e,0x7e,0xff,0x7e,0x7e,0x7e,0xff,0xfd,0xff,0xfe,0xfe,0xff,0xff,0xff,0x7e -,0x7d,0x7e,0x7e,0x7e,0xfe,0xff,0xfe,0xff,0xfe,0xfd,0xff,0xff,0x7e,0xfe,0xfe,0xff,0xfd,0xfe,0xfd,0xfd,0xff,0xfe,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xff,0x7e -,0x7e,0x7e,0x7e,0x7e,0xff,0x7e,0x7e,0xff,0xfd,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e,0x7d,0x7e,0xfd,0xfe,0xfe,0xfe,0xff,0xff,0xfe,0xff,0x7e,0x7e,0x7e,0x7e,0xfe,0xff -,0x7e,0x7c,0x7d,0x7c,0x7b,0x7c,0x7b,0x7c,0x7d,0x7d,0x7d,0x7e,0x7d,0xff,0x7e,0x7e,0x7d,0xfe,0xfe,0x7e,0xff,0x7e,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e,0xff,0xfe,0xff -,0x7e,0x7e,0xff,0x7d,0x7c,0x7d,0x7e,0x7e,0x7e,0x7c,0x7b,0x7e,0x7e,0xff,0xfe,0xfe,0xfe,0xfe,0xfd,0xff,0xff,0x7e,0x7e,0xfe,0xfe,0x7e,0xff,0x7e,0x7d,0x7e,0xff,0xff -,0x7e,0xfe,0xfe,0x7e,0xff,0xff,0x7e,0x7e,0x7e,0x7e,0x7e,0xff,0x7e,0x7e,0xff,0xff,0xfe,0x7e,0x7e,0x7c,0x7d,0x7e,0xff,0xfe,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe -,0x7e,0x7e,0xfe,0xfe,0xfe,0xfd,0xfe,0xfd,0xfe,0xfe,0x7e,0xfe,0x7e,0xfd,0xff,0xff,0xff,0x7e,0xfd,0xfe,0xff,0x7e,0x7e,0x7e,0xfd,0xfe,0xff,0x7e,0xfe,0xfe,0xfd,0x7e -,0xff,0x7e,0xfe,0xfe,0xfd,0xfc,0xfe,0xff,0xff,0x7e,0x7d,0x7e,0x7e,0xfe,0x7e,0x7e,0x7d,0x7e,0xfd,0xfe,0x7e,0xff,0xfe,0xfd,0xfd,0xfd,0xff,0xfe,0xfd,0xfe,0xff,0xff -,0xfe,0xfe,0xfe,0xfe,0xff,0x7e,0x7e,0xfe,0xfd,0x7e,0x7e,0xff,0xfc,0xfd,0xfe,0xff,0xff,0xfd,0xfb,0xfc,0xfd,0xfc,0xfe,0xfd,0xfd,0xfe,0xff,0xfe,0xfd,0xfd,0xfe,0xfd -,0xff,0xff,0xfd,0xfe,0x7e,0xfe,0xfd,0xfd,0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfd,0xfd,0xfe,0xfd,0xfe,0xfe,0xfd,0x7e,0xfd,0xfc,0xfb,0xfc,0xfd,0xfe -,0xfe,0xfd,0xfc,0xfd,0xfe,0xfe,0xfd,0xff,0xfd,0xff,0x7e,0x7e,0xfe,0xfe,0xff,0xff,0xff,0xfe,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xfd,0xff,0xfe,0x7e,0xff,0xfe,0xfd,0xfe -,0x7e,0xfe,0xfe,0xfd,0xfd,0xfe,0xff,0xff,0xfd,0xfe,0xfd,0xfe,0x7e,0x7c,0x7b,0x7b,0x7a,0x7b,0x7d,0x7d,0x7d,0x7c,0x7e,0x7e,0xff,0x7d,0x7d,0x7c,0x7e,0xfe,0xff,0x7e -,0x7e,0xfe,0xfe,0xfe,0xff,0x7e,0x7d,0xfe,0xfe,0x7d,0xff,0x7e,0xff,0xfd,0xfe,0x7e,0x7c,0x7e,0xfd,0xfe,0xff,0xff,0xfe,0xfc,0xfb,0xfd,0xfd,0xfe,0xfe,0xfd,0xfe,0x7e -,0xfe,0x7e,0xfe,0xfe,0x7e,0x7e,0x7e,0xff,0xfe,0x7e,0xff,0xff,0x7e,0xfd,0xfe,0x7e,0x7e,0xfe,0xff,0xfe,0xfe,0xff,0xff,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0xff,0x7e -,0xfe,0xfd,0xfd,0xff,0xff,0x7e,0x7e,0x7e,0xff,0xfe,0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xfe,0xfe,0x7e,0x7d,0xfe,0xfe,0xff,0x7e,0x7e,0xff,0xff,0xfe,0xfe,0xfe -,0x7e,0x7e,0xfe,0xff,0xff,0x7e,0xff,0xfe,0xfe,0xfe,0xff,0x7e,0xfe,0xfd,0xff,0xfd,0xfc,0x7e,0xff,0x7e,0x7c,0x7d,0x7d,0xfe,0x7e,0xfe,0xfe,0x7e,0x7e,0xfe,0x7d,0x7d -,0x7d,0x7c,0x7e,0x7e,0x7d,0x7c,0x7d,0xff,0xff,0x7e,0x7c,0x7c,0x7d,0xfe,0x7d,0x7b,0x7c,0x7d,0xfe,0x7e,0x7d,0x7d,0x7d,0xff,0xfe,0xff,0x7e,0x7d,0xfe,0xfd,0xfe,0xff -,0x7e,0x7d,0xfd,0xfc,0xfe,0x7e,0xff,0xfd,0xfe,0xfe,0xfe,0x7e,0x7e,0xfd,0x7e,0x7e,0x7e,0xfe,0xfe,0xff,0xff,0x7e,0x7e,0xff,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0xff,0xfe -,0x7e,0x7d,0x7e,0xff,0x7c,0x7d,0xff,0xfd,0xfe,0xff,0x7e,0x7d,0xfe,0xfe,0xfd,0xff,0x7d,0x7e,0x7e,0xfe,0xff,0x7d,0x7e,0x7d,0xff,0x7e,0x7e,0x7d,0xff,0xff,0x7e,0x7e -,0x7e,0xfe,0xfe,0xff,0xff,0x7c,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7e,0xfd,0xfe,0xfe,0xfd,0xfe,0xfd,0xfd,0x7e,0xfd,0xfe,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7c,0x7d -,0x7e,0xff,0x7e,0xfe,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7c,0x7c,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7e,0xff,0x7e,0x7d,0x7d,0x7d,0x7d,0xff,0xfe,0xfe -,0xff,0xfe,0xfd,0x7e,0x7e,0x7e,0xff,0xfe,0xff,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0xfe,0x7c,0x7c,0x7e,0xfe,0xfd,0x7d,0x7d,0x7d,0x7d,0xfe,0x7d,0x7c -,0x7d,0xff,0xff,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7d,0xff,0xff,0xfe,0xfe,0xfe,0xfe,0x7e,0xff,0xfe,0x7e,0xff,0xff,0x7e,0xff,0xfd,0xfe,0xff,0xff,0xff,0xfd,0xff,0x7e -,0x7d,0x7e,0xfe,0x7e,0x7e,0x7e,0x7e,0xfd,0xfe,0x7e,0xff,0x7e,0x7e,0xff,0xfe,0x7e,0x7d,0xff,0xfd,0xfd,0x7e,0x7e,0xff,0x7e,0xfe,0x7e,0xfe,0xfe,0x7c,0x7e,0x7d,0x7c -,0x7c,0x7e,0xff,0x7d,0x7d,0x7d,0x7c,0x7d,0xff,0x7e,0x7e,0xfe,0x7e,0xfd,0xfe,0x7e,0xff,0xfe,0xfc,0xfd,0xff,0xfd,0xfe,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0x7e,0x7e -,0xff,0xfe,0xfd,0xfe,0xfe,0xff,0xfe,0xfe,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,0x7e,0xfd,0xfc,0xfc,0xfd,0xfe,0xfe,0xfc,0xfd,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfe -,0xff,0xfe,0xfd,0xfd,0xfe,0xfd,0xfd,0xfd,0xfb,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfc,0xfc,0xfc,0xfc,0xfe,0xff,0xfd,0xfd,0xfc,0xfe,0xfe,0xfd,0xfd,0xfe,0xff,0x7e -,0x7e,0x7e,0xfd,0xfd,0x7e,0x7e,0xfe,0xfd,0xfe,0xfe,0xff,0x7d,0xfe,0xfd,0xfe,0xff,0xfe,0xfe,0x7e,0x7e,0xff,0x7e,0x7e,0xff,0xfe,0xfe,0x7e,0x7d,0x7e,0xfe,0x7e,0xff -,0xff,0xff,0x7d,0x7c,0x7b,0x7a,0x7b,0x7c,0x7d,0x7d,0x7e,0xff,0xfe,0xfd,0xff,0x7d,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0x7e,0x7e,0xfe,0xff,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e -,0xff,0xff,0x7e,0xff,0x7d,0x7d,0x7d,0xff,0xfe,0xff,0xfe,0xfd,0xfd,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xff,0xff,0xfe,0xff,0xff,0x7e,0x7d,0x7d,0x7e,0xfe,0xfe,0x7d -,0x7e,0xfe,0xfe,0xfe,0xff,0x7e,0x7e,0xfe,0xfd,0xfe,0x7d,0xfe,0x7e,0xfe,0xfe,0xff,0x7e,0x7e,0x7e,0xfe,0xff,0xff,0xfe,0xfd,0xfe,0x7e,0x7e,0xfe,0xfe,0xfd,0xfd,0x7e -,0xff,0xff,0xfe,0x7e,0x7e,0x7e,0xff,0xfe,0xfd,0xff,0x7d,0x7e,0x7e,0xff,0x7e,0x7e,0x7e,0xff,0xff,0xfe,0x7e,0x7e,0x7e,0xff,0xff,0x7e,0x7e,0xff,0xff,0xfe,0xfe,0x7e -,0x7d,0x7e,0xfe,0xfe,0xfe,0xfd,0xfe,0x7d,0x7d,0x7c,0x7b,0x7c,0x7d,0x7d,0x7c,0x7b,0x7c,0x7e,0xfe,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xfe,0xfd,0xfe,0xfe,0xfe -,0xfe,0xff,0xfd,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfc,0xfd,0xff,0xff,0xfd,0xfe,0xfe,0xfe,0xfd,0xfd,0xfc,0xfc,0xfd,0xfe,0xfe,0xfd,0xfd,0xfe,0xff -,0xfe,0x7e,0xfe,0xfe,0xfe,0xff,0xfd,0xfc,0xfd,0xfe,0x7e,0xfe,0xfe,0xfd,0xfc,0xfe,0xfe,0xfe,0xfc,0xfe,0xfd,0xff,0xff,0x7d,0xff,0xfe,0xfe,0xfd,0xfd,0xfc,0xfe,0x7e -,0xfe,0xfd,0xfd,0xfd,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfe,0xfd,0xff,0x7e,0x7e,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0xff,0x7e,0xff,0xfe,0xfe,0x7e -,0x7e,0xfe,0xfe,0xfd,0xfd,0xff,0xff,0xfe,0xfd,0xfd,0xff,0xfc,0xfd,0xfe,0x7e,0x7d,0x7c,0x7d,0x7e,0xff,0x7e,0x7d,0x7e,0xfe,0xfe,0xff,0x7e,0x7e,0xfe,0xfd,0xfe,0xfe -,0x7e,0xfe,0xfe,0xfd,0xfe,0xff,0xfe,0xff,0xfe,0xfd,0x7e,0xff,0xfe,0xfe,0xfe,0x7e,0xff,0xfe,0xff,0xfe,0xff,0x7e,0xfe,0xfd,0xfd,0xfd,0x7e,0xff,0xfd,0xfd,0xfd,0xff -,0x7e,0xfe,0xfd,0xfd,0xfe,0xfe,0xfd,0xfd,0xfd,0xfe,0xff,0xfe,0xfd,0xfb,0xfb,0xfd,0xfe,0xfe,0xfe,0xfd,0xfe,0xfe,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe -,0xfe,0xfc,0xfc,0xfc,0xfe,0x7e,0xfe,0xfd,0xfc,0xfe,0xfe,0xfe,0xfe,0xfd,0xfe,0xfe,0x7e,0xfe,0xfd,0xfd,0x7e,0x7d,0x7e,0xfe,0xfd,0xfe,0xff,0x7e,0xfe,0xfe,0xfe,0xff -,0xff,0xfe,0xfd,0xfe,0xff,0x7e,0x7d,0x7e,0xfe,0x7e,0xff,0x7d,0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0x7e,0x7d,0x7e,0xfe,0xfe,0xfe,0xff,0xff,0xfd,0xfc,0xfd,0xfe -,0x7d,0x7e,0xfc,0xfe,0xff,0xff,0x7e,0xfe,0xfd,0xfd,0xfe,0xff,0xfe,0xfd,0xfd,0xff,0x7e,0xfe,0xfd,0xfd,0xfd,0xff,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfe,0xfd -,0xfe,0xfc,0xfb,0xfb,0xfd,0xfe,0xfd,0xfc,0xfe,0xfe,0xff,0xfe,0xfd,0xfd,0xfd,0x7d,0x7e,0xfe,0xfe,0xfd,0xfe,0xfe,0xfd,0xfc,0xfa,0xfc,0xfe,0xfe,0xfe,0xfe,0xfe,0xff -,0xfe,0x7e,0xff,0xfe,0xfe,0xfd,0xfd,0xfc,0xfc,0xfe,0xff,0xfe,0xfe,0xfc,0xfd,0x7e,0xff,0xff,0xfd,0xfe,0x7e,0xff,0xfe,0xfe,0xfe,0xff,0x7e,0x7e,0xfe,0xfc,0xfd,0xff -,0xff,0xfd,0xfc,0xfc,0xfd,0xfe,0xfe,0xfc,0xfc,0xfe,0xff,0x7e,0xfe,0xfd,0xfe,0xfe,0x7e,0xff,0xfd,0xfe,0x7e,0xfd,0xfc,0xfd,0x7e,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7c -,0x7d,0xfe,0xfc,0xfd,0xfd,0xfe,0xfe,0xfb,0xfc,0xff,0x7d,0x7e,0xff,0xfe,0xfe,0xfe,0x7e,0x7d,0x7e,0xfe,0x7d,0x7c,0x7e,0xfe,0x7d,0x7d,0x7d,0x7d,0x7e,0x7d,0x7e,0x7e -,0x7e,0xff,0xfe,0x7d,0xfe,0xfe,0xfe,0xfd,0xfd,0xfe,0x7d,0xff,0xfd,0xfd,0xfd,0x7e,0xfe,0xfc,0x7e,0xfd,0xfe,0x7e,0xff,0xfd,0xfd,0xff,0x7d,0x7d,0x7e,0xff,0xff,0x7d -,0x7d,0xfe,0xfe,0xfe,0x7e,0xff,0xfe,0x7e,0xff,0xfe,0xff,0xff,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xff,0x7e,0x7e,0x7d,0x7e,0x7e,0x7d,0x7d,0x7e,0xff,0x7e,0x7e,0x7d -,0x7c,0xfe,0xfd,0x7e,0x7d,0x7d,0x7e,0xff,0x7e,0x7d,0x7d,0x7d,0x7c,0xff,0x7e,0x7a,0x7b,0x7b,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0xfd,0xfb,0xff,0x7c,0x7d -,0x7b,0x7c,0x7e,0xfe,0x7e,0x7d,0xfe,0xfe,0xff,0x7c,0x7e,0xff,0xfe,0xfe,0xfd,0xff,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0x7e,0x7d,0x7e -,0x7e,0x7d,0x7d,0x7e,0xfe,0x7d,0x7d,0xfe,0xff,0xfe,0xff,0x7e,0xfe,0xfd,0xfc,0xfe,0xff,0xfe,0xfc,0xfe,0xfe,0x7e,0x7e,0xfd,0xfe,0xff,0x7e,0xff,0xfe,0xfd,0xfe,0x7e -,0x7e,0x7e,0xff,0xfe,0x7e,0x7e,0x7d,0xfe,0xfe,0xff,0xff,0x7e,0x7e,0x7d,0x7e,0xff,0xff,0x7e,0xfe,0xfd,0xfe,0xff,0xfe,0xfd,0xfd,0x7e,0xfe,0x7e,0x7e,0xfe,0x7e,0x7d -,0xfe,0xfc,0xfd,0x7e,0x7d,0x7e,0x7d,0xfe,0xfe,0x7e,0x7d,0x7e,0xff,0xfe,0x7e,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0x7e,0xfe,0x7e,0x7d -,0x7e,0x7e,0x7d,0x7a,0x7a,0x79,0x79,0x79,0x79,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7d,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7e,0xfe,0x7d -,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7e,0xfe,0x7e,0x7e,0x7e,0xfe,0x7e,0xff,0xff,0x7e,0xfe,0xff,0x7e,0x7e,0x7e,0xfe,0x7e,0xfd,0x7e,0x7d,0xff,0x7e,0x7e,0x7e,0x7e -,0x7c,0x7e,0x7d,0x7e,0x7e,0x7c,0x7c,0x7d,0xfe,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7c,0x7d,0x7d,0x7e,0x7e,0x7c,0x7d,0xff,0xfc,0xfe,0x7e,0x7e,0x7b,0x7d,0xff,0x7e,0x7e -,0x7d,0xff,0xfe,0x7e,0x7d,0xff,0x7e,0xfe,0x7e,0x7e,0x7e,0x7d,0x7e,0xff,0x7d,0x7c,0x7d,0x7b,0x7d,0x7d,0x7e,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0xff,0xff,0x7d -,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0xfd,0xfe,0x7d,0x7c,0x7c,0x7b,0x7a,0x7d,0x7b,0x7b,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0xff,0xfe,0xff,0x7d,0x7b,0x7c,0x7e,0xff,0x7e,0x7b -,0x7c,0x7e,0x7e,0x7e,0x7c,0x7b,0x7d,0x7d,0xff,0x7c,0x7c,0x7d,0x7d,0xfe,0x7d,0x7d,0x7c,0x7e,0x7e,0x7d,0xff,0x7e,0x7d,0x7e,0xfe,0xff,0x7e,0x7e,0xfd,0xfe,0xfe,0x7d -,0xfe,0xfe,0xfe,0xff,0x7e,0x7e,0xfe,0xfe,0x7e,0xfe,0x7d,0x7d,0xff,0xfe,0xfd,0xfd,0x7e,0xfd,0xfd,0xfe,0x7d,0x7d,0x7d,0x7c,0x7d,0x7e,0x7e,0xfe,0xfd,0xfd,0xfd,0xfe -,0xfc,0xfc,0xfb,0xfd,0xff,0xff,0xfe,0xfe,0xfe,0x7d,0x7d,0x7e,0xfe,0xfd,0xfe,0xfe,0xfe,0x7e,0xfe,0xfd,0x7e,0x7e,0x7e,0xfe,0x7e,0xfe,0x7e,0x7e,0xfe,0xfe,0x7e,0xff -,0x7e,0x7e,0xfe,0xfe,0xfd,0xff,0xfe,0xfe,0xfe,0xfe,0xff,0xfe,0xfe,0x7e,0x7c,0x7c,0x7b,0x7e,0x7d,0x7e,0x7c,0x7c,0x7e,0x7e,0xfe,0xff,0x7e,0x7d,0xff,0x7e,0x7e,0x7d -,0x7e,0xff,0xfe,0xfe,0x7e,0x7e,0xff,0x7d,0x7e,0xff,0x7d,0x7e,0xff,0xfd,0xff,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfe,0xfd,0xff,0xff,0xfe -,0xfe,0xfd,0xfc,0xfc,0xff,0xff,0xfe,0xfd,0xfd,0xfe,0xff,0x7e,0xfe,0xfe,0xff,0xff,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0xfe,0xfe,0xfe,0xfd,0xff,0xfe,0xfe,0x7e,0x7e,0x7e -,0xff,0xfe,0xfd,0xfd,0xff,0xff,0xff,0xfe,0xfe,0xfe,0x7e,0xfe,0xfc,0xfe,0xfd,0xff,0xfe,0xfe,0xfd,0xfe,0x7d,0x7d,0x7e,0xfe,0xfc,0xff,0x7e,0x7d,0x7e,0xff,0x7e,0xff -,0xff,0xff,0xfd,0xff,0xff,0xfe,0xff,0xfe,0xfe,0xfe,0xff,0xfe,0xfe,0xfd,0xfe,0xfd,0xfd,0xfc,0xfc,0xff,0x7e,0x7d,0x7d,0x7e,0xfe,0x7e,0xff,0xfe,0xfd,0xfc,0xfc,0xfd -,0xfe,0xfd,0xfe,0xfd,0xfe,0xfe,0xfd,0xfd,0xfc,0xfc,0xfe,0xfe,0xfe,0xfe,0xfe,0x7e,0x7e,0xff,0xfd,0xfd,0xff,0x7e,0xfe,0xfd,0xfc,0xfd,0xfe,0xfd,0xfe,0xfc,0xfc,0xfd -,0xfd,0xfc,0xfb,0xfc,0xfd,0xfe,0xfd,0xfc,0xfa,0xfd,0xfd,0xfc,0xfd,0xfd,0xff,0xfe,0x7e,0xfe,0xfe,0xfd,0xfd,0x7e,0xff,0xfd,0xfe,0xff,0x7e,0xff,0xfe,0xfe,0xfd,0xfe -,0xff,0xfe,0xff,0x7e,0xff,0xfe,0xfe,0xfc,0xfa,0xfc,0xfe,0xfe,0xfc,0xfd,0xfd,0xfe,0x7e,0xfe,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xfc,0xfe,0x7d,0x7e,0x7d,0xfe,0xfe,0xfe -,0xfe,0xfe,0xfc,0xfc,0xfe,0xff,0xff,0xfe,0xfd,0xfd,0xff,0xff,0xfe,0xfd,0xfd,0x7e,0xfe,0xfe,0xfd,0xff,0xff,0xfd,0xfd,0xfa,0xfd,0x7e,0x7c,0x7e,0x7d,0xff,0x7d,0x7d -,0x7d,0xff,0xfe,0xfd,0xff,0x7c,0x7e,0xfe,0xfe,0x7e,0x7e,0x7d,0xfe,0xfd,0xfd,0xfe,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e,0x7d,0x7e,0xfe,0x7e,0xff,0xff -,0xfe,0xfe,0xfd,0xfd,0xfe,0xfe,0xff,0xfd,0xfb,0xfe,0xfe,0xfe,0xff,0xfd,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0x7e,0x7d,0xfe,0xfd,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfe,0x7e -,0xfe,0xfe,0xfe,0xfd,0xfe,0x7e,0xff,0xff,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xfe,0xfd,0xff,0xfe,0xfe,0x7e,0xff,0xfe,0xfe,0xfd,0xfd,0xfe,0xff,0xff,0xfe,0xfd,0xfc,0x7e -,0xfe,0xfe,0xfe,0xfd,0xff,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0x7e,0xfe,0xfe,0xfe,0xff,0xff,0x7e,0xfe,0xfc,0xff,0xfe,0x7e,0xfc,0xfd,0x7e,0xfe,0xfe,0xf9,0xfc,0x7e,0x7e -,0xff,0xff,0xff,0xfe,0xfe,0xff,0x7e,0xfe,0xfc,0xfd,0xfd,0xfe,0xfd,0xfc,0xfc,0xfd,0xfc,0xfd,0xfc,0xfa,0xfe,0xfd,0xfe,0xfc,0xfc,0xff,0xff,0xfe,0xfd,0xfc,0xfd,0xfd -,0xfd,0xfe,0xfb,0xfc,0xfe,0xff,0xfd,0xfb,0xfd,0xfc,0xfd,0xfb,0xf9,0xf9,0xfc,0xfe,0xfd,0xfc,0xfb,0xfb,0xfd,0xfd,0xfe,0xfc,0xfc,0xfe,0xfd,0xfe,0xfc,0xfc,0xfb,0xfd -,0x7e,0xfd,0xfd,0xfb,0xfe,0xfe,0xfb,0xfc,0xfa,0xfc,0xff,0xfc,0xfd,0xfd,0xfd,0xfd,0xfc,0xfb,0xfa,0xfd,0xfd,0xff,0xfd,0xfa,0xfb,0xfb,0xfe,0x7e,0xfe,0xfc,0xfe,0xfe -,0xfe,0xfd,0xfc,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xfe,0xff,0xfe,0xfd,0xfd,0xfd,0xfd,0xff,0xfe,0xfd,0xfb,0xfe,0xff,0xfe,0xfd,0xfc,0xfe,0xfe,0xfe,0xfd,0xfc,0xfe,0x7e -,0xff,0xfe,0xfc,0x7e,0x7b,0x7c,0x7e,0xfe,0xff,0x7d,0x7d,0x7e,0xfe,0xfd,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0x7e,0xff,0xfe,0xfd,0x7e,0x7d,0xff,0xfe,0xfe,0xff,0x7e -,0xfe,0xfe,0xfd,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xfc,0xfd,0xff,0xff,0x7e,0xfe,0xfd,0xfe,0xfe,0xfe,0xfe,0xfb,0xfe,0xfe,0xff,0xfe,0xfe,0xfe,0xff -,0x7e,0xfe,0xfd,0xff,0xff,0x7e,0x7e,0xfe,0xfe,0xfe,0x7d,0x7e,0x7e,0xfb,0xfe,0x7d,0x7e,0x7e,0xfe,0x7e,0x7c,0x7e,0xff,0xfd,0xfc,0xfb,0xfd,0xfe,0xfd,0xfc,0xfe,0x7d -,0x7e,0x7e,0x7e,0xfd,0x7e,0x7e,0x7e,0xfe,0xff,0x7e,0xff,0xff,0x7e,0xff,0x7e,0x7e,0x7e,0xfe,0xfe,0xff,0xfe,0x7e,0x7d,0xff,0xfd,0xff,0x7e,0x7e,0x7e,0xff,0x7e,0x7e -,0xff,0x7e,0xff,0x7d,0xfe,0x7e,0x7d,0xfc,0xfe,0x7d,0x7c,0x7e,0x7c,0x7d,0xff,0x7c,0x7d,0x7e,0xfd,0xfe,0xfe,0x7e,0xff,0xfd,0xff,0x7e,0xfe,0x7e,0xfe,0xfd,0xfe,0xff -,0x7e,0xfd,0xfe,0xfe,0x7e,0xff,0x7e,0xff,0xfd,0xff,0x7e,0x7e,0xff,0xfd,0xfe,0xff,0xfe,0x7e,0xfd,0xfd,0xfe,0xff,0xfd,0xfd,0xfb,0xfe,0xfc,0xfd,0xff,0xfc,0xfe,0xff -,0x7e,0xfe,0xfe,0xfe,0x7e,0x7e,0xfd,0xfd,0xfd,0xfd,0xfe,0xfd,0xfd,0xfb,0xfd,0xff,0xfe,0xfe,0xfd,0xfa,0xfb,0xfd,0xfd,0xfb,0xfd,0xff,0xfe,0xfe,0xfd,0xfa,0xfb,0xfc -,0xfe,0xfd,0xfb,0xfb,0xfd,0xfd,0xfe,0xfe,0xfb,0xfe,0xff,0xff,0xfe,0xfd,0xfd,0xfe,0xfe,0xfc,0xfb,0xfd,0xfd,0xfe,0x7d,0xfd,0xfd,0xfe,0xff,0xff,0xfe,0xfc,0xfc,0xfe -,0xfe,0xfe,0xfc,0xfd,0xfe,0xfe,0x7e,0xfd,0xfc,0xfe,0xfe,0x7e,0xfd,0xfa,0xff,0x7d,0x7a,0x7c,0x7e,0x7d,0x7d,0x7d,0xfe,0x7e,0xfd,0xfb,0xff,0xff,0xfe,0xfe,0xfe,0x7e -,0x7e,0x7e,0xfe,0xfe,0x7e,0x7d,0x7e,0xfe,0xfd,0x7d,0x7d,0x7e,0xfe,0xfe,0xff,0xff,0x7d,0xff,0xfd,0xfd,0xff,0x7e,0xfe,0xfe,0x7e,0x7e,0xff,0xff,0xfe,0xfc,0xfe,0xfe -,0xfe,0xfc,0xfb,0xfd,0xfd,0xfe,0x7e,0xfd,0xfd,0xff,0x7e,0xff,0xfd,0xfe,0x7e,0xfe,0xff,0x7e,0xfe,0xfc,0x7e,0x7c,0x7e,0xfe,0xfc,0xfe,0x7e,0xfe,0xfe,0xfe,0xfe,0x7e -,0xff,0xfc,0xfc,0xfd,0xfd,0xfc,0xfd,0xfe,0xfd,0xff,0x7e,0x7e,0xfe,0xfe,0xff,0xff,0xfc,0xff,0xfd,0xfd,0xff,0xff,0x7e,0xfc,0xfe,0x7e,0x7e,0xfe,0xfd,0xfd,0xfe,0xff -,0x7e,0xfe,0xfe,0xff,0xff,0xfe,0xff,0xfe,0xfd,0xfd,0xff,0x7e,0xfd,0xfd,0xfd,0xfe,0xfe,0xfd,0xf9,0xfe,0x7e,0x7e,0x7e,0xfe,0x7e,0x7d,0x7d,0x7e,0xfe,0xfd,0xfd,0xfd -,0xfe,0xfe,0xfc,0xfd,0xfe,0x7e,0xff,0xfe,0xfb,0xfd,0x7e,0xfe,0xfe,0xfd,0xfd,0xff,0xff,0xfe,0xfd,0xff,0x7e,0x7e,0xfe,0xfe,0xfd,0xfd,0xff,0xff,0xfe,0xfc,0xfd,0xfd -,0xfd,0xfc,0xfc,0xfb,0xfc,0xfe,0xfe,0xfd,0xfe,0x7e,0x7d,0x7e,0xfd,0xfe,0xfd,0xfd,0xff,0xfe,0xfe,0xfe,0xff,0xfe,0xfe,0xfc,0xfc,0xfe,0xfd,0xfd,0xfc,0xfb,0xfc,0xff -,0xfd,0xfe,0xfe,0xfe,0x7e,0xff,0xfe,0xfd,0xfc,0xfd,0xfd,0xfc,0xfc,0xfb,0xfa,0xfd,0xfe,0xff,0xfd,0xfd,0xfe,0xff,0x7e,0xfe,0xff,0xfd,0xfe,0xfe,0xfe,0xfe,0xfd,0xfe -,0xfe,0xfe,0xfd,0xfe,0xfe,0xff,0xfe,0xfd,0xfc,0xff,0x7d,0xff,0xff,0xfe,0xfe,0xfe,0x7e,0x7e,0xfd,0xfd,0xfe,0x7e,0xfe,0xfb,0xfc,0x7d,0x7a,0x7c,0x7d,0x7d,0x7d,0x7b -,0x7c,0xfe,0xfe,0xfd,0x7e,0x7d,0x7e,0xfe,0xff,0x7d,0x7d,0xff,0xfe,0xfd,0x7d,0x7e,0xfe,0x7e,0xff,0xfd,0xfe,0x7c,0x7d,0x7e,0xfe,0xff,0x7d,0x7e,0x7d,0xfe,0x7e,0x7d -,0x7e,0x7e,0x7e,0x7d,0x7e,0xfe,0x7e,0xfe,0xfe,0xfe,0xfb,0xfd,0xfe,0xfd,0xfd,0x7e,0xff,0xfd,0xfe,0xfe,0x7e,0xfe,0xfe,0xff,0xfc,0xfe,0xff,0x7e,0x7e,0xfe,0xff,0x7e -,0x7e,0x7e,0xfd,0xfe,0x7e,0x7e,0x7e,0xfd,0xfe,0xfe,0x7e,0x7d,0xff,0xfd,0xfe,0x7e,0xff,0xfe,0xfd,0xfc,0xff,0xfe,0xfe,0xfe,0xfc,0x7e,0x7e,0x7e,0xfe,0xfd,0xfe,0xfe -,0x7e,0xfe,0xfe,0xfe,0xfe,0xff,0xfe,0xfd,0xfc,0xfe,0x7d,0xff,0xfe,0xfe,0x7e,0x7e,0xfd,0xff,0xfd,0xfe,0xfe,0xfe,0xff,0xfd,0xfe,0xfd,0xfe,0xff,0xfc,0xf9,0xfe,0xff -,0xff,0xff,0xfe,0xff,0x7e,0x7d,0xfe,0xff,0xfb,0xfe,0x7e,0x7e,0xfe,0xfd,0xff,0x7e,0xfe,0x7e,0xfe,0xfe,0x7e,0xff,0xfe,0xfe,0xfd,0xfd,0x7e,0x7e,0xff,0xfe,0xfe,0x7e -,0x7e,0xff,0xfe,0xfe,0xfe,0xff,0x7e,0xfe,0xfd,0xfe,0xfe,0xff,0xfd,0xfc,0xfd,0xfd,0x7e,0xff,0xfe,0xfd,0xfd,0xff,0xfe,0xfc,0xfc,0xfe,0xfe,0xfc,0xfc,0xfb,0xfd,0xfe -,0xfe,0xff,0xfd,0xfd,0xff,0xff,0x7e,0xfe,0xfd,0xfe,0xfe,0xfe,0xfd,0xfe,0xfe,0xff,0xff,0xfd,0xfd,0xfc,0xfd,0xff,0xfe,0xfc,0xfc,0xfc,0xff,0xfe,0xfd,0xfc,0xfe,0xff -,0xfe,0x7e,0xfd,0xfe,0xff,0x7e,0x7e,0xfd,0xfe,0x7e,0xfe,0x7e,0xfd,0xfd,0xfd,0xff,0x7e,0xfd,0xfd,0xfd,0xff,0xfe,0xff,0xfe,0xfc,0xfd,0xfe,0xff,0xfd,0xfc,0xfd,0xfe -,0xff,0xff,0xfc,0xfe,0x7e,0x7c,0x7d,0x7c,0x7c,0x7d,0x7b,0x7c,0x7c,0x7e,0xff,0x7e,0x7e,0xfe,0xfe,0xfe,0x7e,0x7d,0x7e,0xfe,0x7d,0x7d,0x7e,0x7c,0x7e,0xfe,0x7e,0x7c -,0x7c,0xff,0xff,0x7e,0x7d,0x7e,0x7e,0x7e,0xfe,0x7e,0x7d,0x7e,0x7e,0xfe,0x7e,0x7e,0xff,0xfe,0xfc,0xfc,0xfd,0xfe,0xfe,0xfd,0xff,0xff,0x7e,0x7d,0xff,0xfe,0xfd,0x7e -,0xff,0xfe,0xfe,0xfe,0xff,0xff,0x7e,0xff,0xfe,0x7e,0x7d,0x7e,0x7d,0xfe,0xff,0x7d,0x7e,0xfe,0xfe,0xff,0xfe,0xff,0xff,0xfd,0xfc,0xfd,0xfe,0xfe,0xfc,0xfd,0xfd,0xff -,0xff,0xfe,0xfd,0xfc,0xfe,0xfd,0xff,0xfd,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfe,0xfe,0xfe,0xfd,0xfd,0xfe,0xfe,0xff,0xff,0xfe,0xfc,0xfe,0x7e,0xff,0xfd,0xfc,0xff,0xfe -,0x7e,0x7e,0xfe,0xfd,0xfe,0xfe,0xfe,0xfd,0xfc,0xfe,0x7d,0x7d,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0xfd,0xfe,0x7e,0x7e,0x7e,0xff,0xfe,0x7e,0x7d,0x7d,0xfe,0xfd,0xff,0xfe -,0xfe,0x7e,0xfe,0xfd,0x7e,0x7e,0x7e,0xfe,0xfd,0x7e,0x7e,0xff,0x7e,0xff,0x7e,0x7e,0x7d,0x7e,0xfd,0xfe,0xff,0x7e,0xff,0xfd,0xfe,0xfe,0xfe,0xff,0xfe,0xfc,0xfe,0xff -,0xff,0x7e,0xfd,0xfe,0x7e,0x7d,0x7d,0xff,0xfe,0x7e,0x7e,0xff,0xfe,0xfe,0xfe,0xff,0xfe,0xff,0xfe,0xfd,0xfe,0x7e,0xff,0xfd,0xfe,0x7d,0x7e,0x7e,0xff,0xfc,0xfe,0x7e -,0x7e,0xfe,0xfd,0xff,0x7e,0x7e,0x7d,0xff,0xfe,0xfe,0x7e,0xff,0xfe,0xff,0x7d,0x7c,0x7d,0x7e,0xff,0x7e,0x7e,0x7e,0x7d,0xfe,0xfe,0xff,0x7e,0x7e,0x7e,0xff,0x7e,0x7e -,0x7e,0x7e,0xfe,0xff,0x7d,0x7e,0x7d,0x7e,0x7e,0xff,0xff,0xfe,0xfe,0xfd,0xfe,0x7c,0x7c,0x7c,0x7d,0x7c,0x7b,0x7d,0x7d,0x7e,0xfe,0x7e,0x7d,0x7d,0xff,0xff,0x7e,0x7d -,0x7d,0x7e,0xfe,0xfe,0x7d,0x7e,0x7e,0x7e,0xff,0x7d,0x7d,0x7d,0x7e,0xfe,0x7e,0x7d,0x7d,0x7e,0xff,0xff,0x7d,0x7e,0xff,0xfe,0xfd,0xfd,0xff,0xff,0xfd,0xfc,0xfe,0xfe -,0xff,0xff,0xff,0xfe,0x7e,0x7d,0x7d,0x7e,0xff,0x7d,0x7e,0x7e,0x7e,0xfe,0xff,0x7e,0x7d,0xff,0xfd,0xfe,0x7e,0x7e,0xfe,0xfe,0xfd,0xfd,0x7e,0x7e,0xfe,0xfd,0xfe,0x7e -,0xff,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfc,0xfc,0xfe,0xff,0xfe,0xfe,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfe,0xff,0xfd,0xfd,0xff,0xfe,0x7e,0xfe,0xfe,0xfd,0xfc,0xfe -,0xff,0xff,0xfd,0xfe,0xfe,0xfe,0x7e,0xfe,0xfd,0xfe,0xff,0xfe,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xfd,0xfb,0x7e,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b,0x7c,0x7e,0x7e,0xfe,0xff -,0x7e,0xff,0xfe,0xfe,0x7d,0x7d,0x7e,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0x7e,0xfe,0xfe,0xff,0xfe,0x7e,0x7e,0xff,0xfe,0xfd,0xff,0x7e,0x7e,0x7e,0xff,0xff,0xfe -,0xff,0xfe,0xfe,0xfd,0xfe,0xfe,0xfd,0xfc,0xfb,0xfd,0xfe,0xfe,0xfe,0xfc,0xfd,0xff,0x7e,0x7e,0xfe,0xfe,0x7e,0x7e,0xff,0xfd,0xfd,0xff,0x7c,0x7d,0xff,0xfe,0xfe,0x7e -,0x7e,0xff,0xfe,0xff,0x7d,0x7c,0xff,0xfd,0xfd,0x7e,0x7e,0xfe,0xfe,0xfe,0xff,0x7e,0xff,0xfe,0xfc,0xfe,0xff,0x7e,0x7e,0xff,0x7e,0xfe,0x7d,0xff,0xff,0xfe,0xfe,0x7e -,0xff,0xff,0xfe,0x7e,0xfe,0x7d,0x7e,0xfe,0xfd,0xfe,0x7e,0xff,0xfe,0xfd,0xfe,0xfe,0xff,0xfe,0xfe,0xff,0x7d,0x7c,0x7e,0xfe,0xfd,0xfe,0x7c,0x7c,0x7c,0x7d,0x7d,0x7b -,0x7d,0x7e,0xff,0xfe,0x7e,0x7e,0x7e,0xfe,0xfe,0xff,0x7e,0x7d,0xfe,0x7e,0x7d,0x7c,0x7c,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0xfe,0x7e,0x7e,0x7e,0x7e,0xfe,0x7e,0x7d -,0x7c,0x7e,0xfe,0xfe,0xff,0x7e,0x7e,0xff,0x7e,0xff,0x7e,0xff,0xfe,0xfe,0x7e,0x7d,0x7d,0xfe,0xfd,0xff,0xff,0x7d,0x7e,0xff,0xfe,0xfe,0xff,0xfe,0xfe,0xfd,0xff,0x7d -,0x7d,0xff,0xfe,0xfe,0x7e,0x7c,0x7d,0xfe,0x7d,0x7d,0x7d,0x7e,0xfe,0xfe,0xfe,0x7e,0xfe,0xfd,0xfc,0xfe,0x7e,0x7e,0xff,0xfe,0xff,0xfe,0x7e,0xff,0xfe,0xfe,0xfe,0x7d -,0x7e,0x7e,0xff,0xfe,0x7e,0x7d,0x7e,0xff,0xff,0xff,0x7d,0x7d,0xff,0x7e,0x7e,0x7d,0x7b,0x7d,0xff,0x7d,0x7e,0x7e,0xff,0xfd,0xfe,0xfe,0x7d,0x7e,0x7e,0xfe,0xfd,0x7c -,0x7c,0x7c,0x7d,0x7d,0x7c,0x7b,0x7b,0x7e,0x7d,0x7e,0x7e,0x7d,0xfd,0xfe,0xfe,0x7e,0x7e,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfe,0xfe,0xff,0x7e,0xfe,0xfe,0xfe,0x7d -,0x7e,0x7d,0xfe,0xfe,0x7e,0x7d,0xff,0xfe,0xff,0xfe,0x7e,0xfe,0xfc,0xfd,0xfe,0xfd,0xff,0xfc,0xfd,0xfe,0x7e,0xff,0xff,0xfe,0xfe,0x7e,0xfe,0xfe,0xfd,0xff,0xfe,0x7e -,0xfe,0xfd,0xfd,0xfd,0xff,0xff,0xfe,0xfd,0xfd,0xfe,0xff,0xff,0xfe,0x7e,0xff,0x7e,0xff,0xfe,0xfc,0xfe,0xfd,0xfd,0xfd,0xfb,0xfd,0xfd,0xfe,0xff,0xfe,0xfe,0xfe,0x7e -,0x7e,0xfe,0xfe,0xfc,0xfe,0x7e,0x7e,0x7e,0xfe,0x7e,0x7e,0x7d,0xfe,0xfe,0xff,0x7e,0x7d,0x7e,0xff,0xff,0x7e,0x7d,0x7e,0xff,0xfe,0xfe,0xff,0xff,0xfe,0xfe,0xfe,0xff -,0x7e,0x7e,0xfe,0xfd,0x7e,0x7d,0x7d,0x7d,0x7e,0x7b,0x7b,0x7a,0x7e,0xff,0xfe,0x7e,0x7d,0x7e,0xfe,0x7e,0x7e,0x7e,0x7e,0xff,0x7d,0x7d,0x7c,0x7e,0x7e,0x7e,0x7e,0x7c -,0x7c,0x7e,0xff,0xfe,0x7e,0x7d,0x7e,0xfe,0x7e,0x7e,0x7e,0x7e,0xfe,0xfd,0xff,0xff,0x7e,0xfd,0xfe,0xff,0xfe,0x7e,0xfd,0xfe,0xff,0x7d,0xff,0xff,0xfd,0xfe,0x7d,0x7e -,0x7e,0xfe,0xff,0xff,0x7e,0x7e,0x7e,0xfe,0xff,0xff,0x7d,0x7e,0xff,0xff,0x7e,0x7e,0x7d,0xff,0xfe,0x7d,0x7d,0x7d,0x7e,0xfe,0xff,0x7e,0xff,0x7e,0xfe,0xfe,0xff,0xfe -,0x7e,0xff,0xff,0xff,0x7e,0x7e,0x7d,0xff,0xfe,0x7e,0x7c,0x7c,0x7d,0xfe,0xff,0xff,0x7d,0x7d,0x7e,0x7d,0x7e,0x7d,0x7e,0xfe,0xfe,0x7e,0x7d,0x7c,0x7d,0x7e,0x7e,0x7e -,0x7d,0x7e,0x7e,0xfe,0x7e,0x7e,0x7e,0xff,0xfe,0xfe,0x7d,0x7c,0x7c,0x7e,0x7c,0x7b,0x7b,0x7b,0x7d,0x7e,0x7d,0x7d,0x7e,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfe,0x7e -,0x7e,0x7e,0xfe,0x7e,0x7e,0x7e,0x7e,0xfe,0xfe,0x7e,0x7d,0x7e,0xff,0xff,0x7e,0x7e,0x7d,0x7e,0xfe,0x7e,0x7d,0x7e,0xfe,0xfd,0xfc,0xfd,0xfe,0xfd,0xfc,0xfd,0xfe,0xff -,0xfe,0xfe,0xfe,0xfe,0x7e,0x7e,0xfe,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xfe,0xff,0x7e,0xfe,0xfe,0xfe,0xff,0x7e,0x7e,0xff,0xfe,0xff,0xff,0xfe,0xfe,0xfe,0xff,0xfe,0x7e -,0xff,0x7e,0x7e,0xff,0x7e,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xfe,0xff,0xff,0x7e,0xff,0xff,0xff,0x7e,0x7e,0xff,0xff,0xff,0xfe,0x7e,0x7e,0x7e,0x7e,0xff -,0xff,0xff,0xff,0xff,0xfe,0xfe,0x7e,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xfe,0xfe,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0x7e,0xff,0xff,0xff,0x7e,0x7e,0xff,0xff,0xff -,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xfe,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff -,0xff,0xff,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xfe,0x7e,0xff,0x7e,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xfe -,0x7e,0xff,0xfe,0xff,0xfe,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e -,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff -,0x7e,0xff,0xff,0xff,0xff,0xfe,0x7e,0xff,0x7e,0xff,0x7e,0x7e,0x7e,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0x7e,0xff,0xff,0x7e,0x7e,0xff,0xff,0xff,0xff,0xff -,0xff,0xfe,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0xfe,0x7e,0xfe,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xfe,0x7e,0xff,0xfe -,0xff,0xff,0x7e,0xff,0x7e,0xff,0xff,0xff,0xfe,0xff,0x7e,0xff,0x7e,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xfe,0xfe,0xff,0x7e,0xff -,0xff,0xff,0xfe,0xff,0xfe,0xfe,0xfe,0xff,0xff,0xff,0x7e,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0x7e,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff -,0x7e,0xfe,0x7e,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xfe,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xff,0xfe,0xfe,0xff,0xff,0xff,0xfe,0xff -,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0x7e,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0x7e,0xfe,0xff,0xff,0xff,0xff,0xff,0xff -,0xff,0xfe,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0x7e -,0xff,0x7e,0xff,0xfe,0xff,0xff,0xff,0xfe,0xff,0x7e,0xff,0xff,0xfe,0x7e,0x7e,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0x7e,0xff,0x7e,0xff,0xff -,0xff,0x7e,0x7e,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x7e,0xfe,0xff,0xff,0xfe,0x00}; - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/media/muxer/mp4_encap.h b/Firmware/RTLGDB/USDK/component/common/media/muxer/mp4_encap.h deleted file mode 100644 index 6f4b788..0000000 --- a/Firmware/RTLGDB/USDK/component/common/media/muxer/mp4_encap.h +++ /dev/null @@ -1,110 +0,0 @@ -#ifndef _MP4_ENCAP_H_ -#define _MP4_ENCAP_H_ - -#include "basic_types.h" -#include "osdep_service.h" - -#define MAX_BOX_CHILD 8 -#define RBUF_SIZE 1024 - -typedef struct _mp4root{ - unsigned int video_len; - unsigned int audio_len; - unsigned int total; - unsigned int keyindex; -}MP4root,*PMP4root; - -#define STORAGE_IDLE 0 -#define STORAGE_START 1 -#define STORAGE_WRITE_ALL 2 -#define STORAGE_WRITE_VIDEO 3 -#define STORAGE_WRITE_AUDIO 4 -#define STORAGE_STOP 5 -#define STORAGE_END 6 - - -#define STORAGE_ALL 0 -#define STORAGE_VIDEO 1 -#define STORAGE_AUDIO 2 - -typedef struct _mp4_payload{ - unsigned char *addr; - unsigned int len; -}mp4_payload,pmp4_payload; - -typedef struct _mp4_write_info{ - int mp4_start_position; - int mp4_end_position; - int mp4_occupy_size; - int mp4_empty_size; - int mp4_write_start_position; - int mp4_write_end_position; - int mp4_write_occupy_size; - int mp4_write_empty_size; - int mp4_write_length; -}mp4_winfo,*pmp4_winfo; - -typedef struct _mp4_context{ - FATFS m_fs; - int drv_num; - char _drv[4]; - FIL m_file; - char filename[32]; - int Fatfs_ok; - int filecount; - int width; - int height; - int sample_rate; - int channel_count; - int frame_rate; - u32 start_time;//rtw_get_current_time() - u32 file_name_index; - u32 storage_state; - MP4root root; - MP4root root_reserve; - int period_time; - int file_total; - int sps_start; - int type; - int sps_len; - int pps_len; - int sps_pps_mark; - unsigned int *video_buffer_index; - unsigned int *video_buffer_size; - int video_size; - unsigned int *audio_buffer_index; - unsigned int *audio_buffer_size; - int audio_size; - unsigned char *moov_box; - int moov_box_size; - unsigned char *h264_buf; - int H264_LENGTH; - mp4_payload payload; - mp4_payload reserved_payload; - int reserved_start_index; - int iframe; - int reserved_type; - _sema start_fatfs_write; - int write_status; - int audio_write_status; - int video_write_status; - int buffer_write_status;//0: real write 1: virtual write - mp4_winfo winfo; - int nal_len; - int h264_extra_len; - int mp4_muxer_enable; -}mp4_context,*pmp4_context; -#define IDLE 0 -#define FATFS_WRITING 1 -#define FATFS_DONE 2 - -void mp4_handle(pmp4_context mp4_ctx,unsigned char *buf,unsigned int size,int type); -void set_mp4_audio_buffer(pmp4_context mp4_ctx,unsigned int *audio_index,unsigned int *audio_size,int size); -void set_mp4_video_buffer(pmp4_context mp4_ctx,unsigned int *video_index,unsigned int *video_size,int size); -void set_mp4_moov_buffer(pmp4_context mp4_ctx,unsigned char *moov,int size); -int mp4_set_record(pmp4_context mp4_ctx,int num); -void mp4_muxer_init(pmp4_context mp4_ctx); -void mp4_muxer_close(pmp4_context mp4_ctx); -int mp4_set_start_status(pmp4_context mp4_ctx); - -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/network/dhcp/dhcps.c b/Firmware/RTLGDB/USDK/component/common/network/dhcp/dhcps.c deleted file mode 100644 index ad5be28..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/dhcp/dhcps.c +++ /dev/null @@ -1,580 +0,0 @@ - -#include "dhcp.h" -#include "dhcps.h" -#include "tcpip.h" - -//static struct dhcp_server_state dhcp_server_state_machine; -static uint8_t dhcp_server_state_machine = DHCP_SERVER_STATE_IDLE; -/* recorded the client MAC addr(default sudo mac) */ -//static uint8_t dhcps_record_first_client_mac[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; -/* recorded transaction ID (default sudo id)*/ -static uint8_t dhcp_recorded_xid[4] = {0xff, 0xff, 0xff, 0xff}; - -/* UDP Protocol Control Block(PCB) */ -static struct udp_pcb *dhcps_pcb; - -static struct ip_addr dhcps_send_broadcast_address; -static struct ip_addr dhcps_local_address; -static struct ip_addr dhcps_local_mask; -static struct ip_addr dhcps_local_gateway; -static struct ip_addr dhcps_network_id; -static struct ip_addr dhcps_subnet_broadcast; -static struct ip_addr dhcps_allocated_client_address; -uint8_t dhcps_ip4addr_pool_start, dhcps_ip4addr_pool_end; -#if 0 -static struct ip_addr dhcps_owned_first_ip; -static struct ip_addr dhcps_owned_last_ip; -static uint8_t dhcps_num_of_available_ips; -#endif -static struct dhcps_msg *dhcp_message_repository; -static int dhcp_message_total_options_lenth; - -/* allocated IP range */ -static struct table ip_table; -#define check_bit_ip_in_table(a) (ip_table.ip_range[(uint8_t)a >> 5] & (1 << ((uint8_t)a & ((1 << 5) - 1)))) -#define set_bit_ip_in_table(a) (ip_table.ip_range[(uint8_t)a >> 5] |= (1 << ((uint8_t)a & ((1 << 5) - 1)))) -static struct ip_addr client_request_ip; - -static uint8_t dhcp_client_ethernet_address[16]; -static uint8_t bound_client_ethernet_address[16]; - -static xSemaphoreHandle dhcps_ip_table_semaphore; - -static struct netif * dhcps_netif = NULL; -/** - * @brief latch the specific ip in the ip table. - * @param d the specific index - * @retval None. - */ -#if (!IS_USE_FIXED_IP) -static void mark_ip_in_table(uint8_t d) -{ - xSemaphoreTake(dhcps_ip_table_semaphore, portMAX_DELAY); - set_bit_ip_in_table(d); - xSemaphoreGive(dhcps_ip_table_semaphore); -} - -/** - * @brief get one usable ip from the ip table of dhcp server. - * @param: None - * @retval the usable index which represent the ip4_addr(ip) of allocated ip addr. - */ -static uint8_t search_next_ip(void) -{ - uint8_t count; - xSemaphoreTake(dhcps_ip_table_semaphore, portMAX_DELAY); - for(count = dhcps_ip4addr_pool_start; count <= dhcps_ip4addr_pool_end; count++) { - if(check_bit_ip_in_table(count) == 0) { - xSemaphoreGive(dhcps_ip_table_semaphore); - return count; - } - } - xSemaphoreGive(dhcps_ip_table_semaphore); - return 0; -} -#endif - -/** - * @brief fill in the option field with message type of a dhcp message. - * @param msg_option_base_addr: the addr be filled start. - * message_type: the type code you want to fill in - * @retval the start addr of the next dhcp option. - */ -static uint8_t *add_msg_type(uint8_t *msg_option_base_addr, uint8_t message_type) -{ - uint8_t *option_start; - msg_option_base_addr[0] = DHCP_OPTION_CODE_MSG_TYPE; - msg_option_base_addr[1] = DHCP_OPTION_LENGTH_ONE; - msg_option_base_addr[2] = message_type; - option_start = msg_option_base_addr + 3; - if (DHCP_MESSAGE_TYPE_NAK == message_type) - *option_start++ = DHCP_OPTION_CODE_END; - return option_start; -} - - -static uint8_t *fill_one_option_content(uint8_t *option_base_addr, - uint8_t option_code, uint8_t option_length, void *copy_info) -{ - uint8_t *option_data_base_address; - uint8_t *next_option_start_address = NULL; - option_base_addr[0] = option_code; - option_base_addr[1] = option_length; - option_data_base_address = option_base_addr + 2; - switch (option_length) { - case DHCP_OPTION_LENGTH_FOUR: - memcpy(option_data_base_address, copy_info, DHCP_OPTION_LENGTH_FOUR); - next_option_start_address = option_data_base_address + 4; - break; - case DHCP_OPTION_LENGTH_TWO: - memcpy(option_data_base_address, copy_info, DHCP_OPTION_LENGTH_TWO); - next_option_start_address = option_data_base_address + 2; - break; - case DHCP_OPTION_LENGTH_ONE: - memcpy(option_data_base_address, copy_info, DHCP_OPTION_LENGTH_ONE); - next_option_start_address = option_data_base_address + 1; - break; - } - - return next_option_start_address; -} - -/** - * @brief fill in the needed content of the dhcp offer message. - * @param optptr the addr which the tail of dhcp magic field. - * @retval the addr represent to add the end of option. - */ -static void add_offer_options(uint8_t *option_start_address) -{ - uint8_t *temp_option_addr; - /* add DHCP options 1. - The subnet mask option specifies the client's subnet mask */ - temp_option_addr = fill_one_option_content(option_start_address, - DHCP_OPTION_CODE_SUBNET_MASK, DHCP_OPTION_LENGTH_FOUR, - (void *)&dhcps_local_mask); - - /* add DHCP options 3 (i.e router(gateway)). The time server option - specifies a list of RFC 868 [6] time servers available to the client. */ - temp_option_addr = fill_one_option_content(temp_option_addr, - DHCP_OPTION_CODE_ROUTER, DHCP_OPTION_LENGTH_FOUR, - (void *)&dhcps_local_address); - - /* add DHCP options 6 (i.e DNS). - The option specifies a list of DNS servers available to the client. */ - temp_option_addr = fill_one_option_content(temp_option_addr, - DHCP_OPTION_CODE_DNS_SERVER, DHCP_OPTION_LENGTH_FOUR, - (void *)&dhcps_local_address); - /* add DHCP options 51. - This option is used to request a lease time for the IP address. */ - temp_option_addr = fill_one_option_content(temp_option_addr, - DHCP_OPTION_CODE_LEASE_TIME, DHCP_OPTION_LENGTH_FOUR, - (void *)&dhcp_option_lease_time_one_day); - /* add DHCP options 54. - The identifier is the IP address of the selected server. */ - temp_option_addr = fill_one_option_content(temp_option_addr, - DHCP_OPTION_CODE_SERVER_ID, DHCP_OPTION_LENGTH_FOUR, - (void *)&dhcps_local_address); - /* add DHCP options 28. - This option specifies the broadcast address in use on client's subnet.*/ - temp_option_addr = fill_one_option_content(temp_option_addr, - DHCP_OPTION_CODE_BROADCAST_ADDRESS, DHCP_OPTION_LENGTH_FOUR, - (void *)&dhcps_subnet_broadcast); - /* add DHCP options 26. - This option specifies the Maximum transmission unit to use */ - temp_option_addr = fill_one_option_content(temp_option_addr, - DHCP_OPTION_CODE_INTERFACE_MTU, DHCP_OPTION_LENGTH_TWO, - (void *) &dhcp_option_interface_mtu); - /* add DHCP options 31. - This option specifies whether or not the client should solicit routers */ - temp_option_addr = fill_one_option_content(temp_option_addr, - DHCP_OPTION_CODE_PERFORM_ROUTER_DISCOVERY, DHCP_OPTION_LENGTH_ONE, - NULL); -#if LWIP_NETIF_HOSTNAME - /* add DHCP options 12 HostName */ - const char *p = dhcps_netif->hostname; - uint8_t len; - if(p && (len = strlen(p)) != 0) { - *temp_option_addr++ = DHCP_OPTION_HOSTNAME; - *temp_option_addr++ = len; - while(len--) { - *temp_option_addr++ = *p++; - } - } -#endif - *temp_option_addr = DHCP_OPTION_CODE_END; - -} - - -/** - * @brief fill in common content of a dhcp message. - * @param m the pointer which point to the dhcp message store in. - * @retval None. - */ -static void dhcps_initialize_message(struct dhcps_msg *dhcp_message_repository, struct ip_addr yiaddr) -{ - - dhcp_message_repository->op = DHCP_MESSAGE_OP_REPLY; - dhcp_message_repository->htype = DHCP_MESSAGE_HTYPE; - dhcp_message_repository->hlen = DHCP_MESSAGE_HLEN; - dhcp_message_repository->hops = 0; - memcpy((char *)dhcp_recorded_xid, (char *) dhcp_message_repository->xid, - sizeof(dhcp_message_repository->xid)); - dhcp_message_repository->secs = 0; - dhcp_message_repository->flags = htons(BOOTP_BROADCAST); - - memcpy((char *)dhcp_message_repository->yiaddr, - (char *)&yiaddr, - sizeof(dhcp_message_repository->yiaddr)); - - memset((char *)dhcp_message_repository->ciaddr, 0, - sizeof(dhcp_message_repository->ciaddr)); - memset((char *)dhcp_message_repository->siaddr, 0, - sizeof(dhcp_message_repository->siaddr)); - memset((char *)dhcp_message_repository->giaddr, 0, - sizeof(dhcp_message_repository->giaddr)); - memcpy((char *)dhcp_message_repository->chaddr, &dhcp_client_ethernet_address, - sizeof(dhcp_message_repository->chaddr)); - memset((char *)dhcp_message_repository->sname, 0, - sizeof(dhcp_message_repository->sname)); - memset((char *)dhcp_message_repository->file, 0, - sizeof(dhcp_message_repository->file)); - memset((char *)dhcp_message_repository->options, 0, - dhcp_message_total_options_lenth); - memcpy((char *)dhcp_message_repository->options, (char *)dhcp_magic_cookie, - sizeof(dhcp_magic_cookie)); -} - -/** - * @brief init and fill in the needed content of dhcp offer message. - * @param packet_buffer packet buffer for UDP. - * @retval None. - */ -static void dhcps_send_offer(struct pbuf *packet_buffer) -{ - uint8_t temp_ip = 0; - dhcp_message_repository = (struct dhcps_msg *)packet_buffer->payload; -#if (!IS_USE_FIXED_IP) - if ((ip4_addr4(&dhcps_allocated_client_address) != 0) && - (memcmp((void *)&dhcps_allocated_client_address, (void *)&client_request_ip, 4) == 0) && - (memcmp((void *)&bound_client_ethernet_address, (void *)&dhcp_client_ethernet_address, 16) == 0)) { - temp_ip = (uint8_t) ip4_addr4(&client_request_ip); - } else if ((ip4_addr1(&client_request_ip) == ip4_addr1(&dhcps_network_id)) && - (ip4_addr2(&client_request_ip) == ip4_addr2(&dhcps_network_id)) && - (ip4_addr3(&client_request_ip) == ip4_addr3(&dhcps_network_id))) { - uint8_t request_ip4 = (uint8_t) ip4_addr4(&client_request_ip); - if ((request_ip4 != 0) - && check_bit_ip_in_table(request_ip4) == 0) { - temp_ip = request_ip4; - } - } - - /* create new client ip */ - if(temp_ip == 0) temp_ip = search_next_ip(); -#if (debug_dhcps) - printf(" temp_ip = %d\n",temp_ip); -#endif - if (temp_ip == 0) { -#if 0 - memset(&ip_table, 0, sizeof(struct table)); - mark_ip_in_table((uint8_t)ip4_addr4(&dhcps_local_address)); - printf("reset ip table!"); -#endif - printf("No useable ip!"); - } - - IP4_ADDR(&dhcps_allocated_client_address, (ip4_addr1(&dhcps_network_id)), - ip4_addr2(&dhcps_network_id), ip4_addr3(&dhcps_network_id), temp_ip); - memcpy(bound_client_ethernet_address, dhcp_client_ethernet_address, sizeof(bound_client_ethernet_address)); -#endif - dhcps_initialize_message(dhcp_message_repository, dhcps_allocated_client_address); - add_offer_options(add_msg_type(&dhcp_message_repository->options[4], - DHCP_MESSAGE_TYPE_OFFER)); - udp_sendto_if(dhcps_pcb, packet_buffer, - &dhcps_send_broadcast_address, DHCP_CLIENT_PORT, dhcps_netif); -} - -/** - * @brief init and fill in the needed content of dhcp nak message. - * @param packet buffer packet buffer for UDP. - * @retval None. - */ -static void dhcps_send_nak(struct pbuf *packet_buffer) -{ - struct ip_addr zero_address; - IP4_ADDR(&zero_address, 0, 0, 0, 0); - - dhcp_message_repository = (struct dhcps_msg *)packet_buffer->payload; - dhcps_initialize_message(dhcp_message_repository, zero_address); - add_msg_type(&dhcp_message_repository->options[4], DHCP_MESSAGE_TYPE_NAK); - udp_sendto_if(dhcps_pcb, packet_buffer, - &dhcps_send_broadcast_address, DHCP_CLIENT_PORT, dhcps_netif); -} - -/** - * @brief init and fill in the needed content of dhcp ack message. - * @param packet buffer packet buffer for UDP. - * @retval None. - */ -static void dhcps_send_ack(struct pbuf *packet_buffer) -{ - dhcp_message_repository = (struct dhcps_msg *)packet_buffer->payload; - dhcps_initialize_message(dhcp_message_repository, dhcps_allocated_client_address); - add_offer_options(add_msg_type(&dhcp_message_repository->options[4], - DHCP_MESSAGE_TYPE_ACK)); - udp_sendto_if(dhcps_pcb, packet_buffer, - &dhcps_send_broadcast_address, DHCP_CLIENT_PORT, dhcps_netif); -} - -/** - * @brief according by the input message type to reflect the correspond state. - * @param option_message_type the input server state - * @retval the server state which already transfer to. - */ -uint8_t dhcps_handle_state_machine_change(uint8_t option_message_type) -{ - switch (option_message_type) { - case DHCP_MESSAGE_TYPE_DECLINE: - dhcp_server_state_machine = DHCP_SERVER_STATE_IDLE; - break; - case DHCP_MESSAGE_TYPE_DISCOVER: - if (dhcp_server_state_machine == DHCP_SERVER_STATE_IDLE) { - dhcp_server_state_machine = DHCP_SERVER_STATE_OFFER; - } - break; - case DHCP_MESSAGE_TYPE_REQUEST: - -#if (!IS_USE_FIXED_IP) - if (dhcp_server_state_machine == DHCP_SERVER_STATE_OFFER) { - if (ip4_addr4(&dhcps_allocated_client_address) != 0) { - if (memcmp((void *)&dhcps_allocated_client_address, (void *)&client_request_ip, 4) == 0) { - dhcp_server_state_machine = DHCP_SERVER_STATE_ACK; - } else { - dhcp_server_state_machine = DHCP_SERVER_STATE_NAK; - } - } else { - dhcp_server_state_machine = DHCP_SERVER_STATE_NAK; - } - } else if (dhcp_server_state_machine == DHCP_SERVER_STATE_IDLE) { - if ((ip4_addr4(&dhcps_allocated_client_address) != 0) && - (memcmp((void *)&dhcps_allocated_client_address, (void *)&client_request_ip, 4) == 0) && - (memcmp((void *)&bound_client_ethernet_address, (void *)&dhcp_client_ethernet_address, 16) == 0)) { - dhcp_server_state_machine = DHCP_SERVER_STATE_ACK; - } else if ((ip4_addr1(&client_request_ip) == ip4_addr1(&dhcps_network_id)) && - (ip4_addr2(&client_request_ip) == ip4_addr2(&dhcps_network_id)) && - (ip4_addr3(&client_request_ip) == ip4_addr3(&dhcps_network_id))) { - uint8_t request_ip4 = (uint8_t) ip4_addr4(&client_request_ip); - if ((request_ip4 != 0) - && check_bit_ip_in_table(request_ip4) == 0) { - IP4_ADDR(&dhcps_allocated_client_address, (ip4_addr1(&dhcps_network_id)), - ip4_addr2(&dhcps_network_id), ip4_addr3(&dhcps_network_id), request_ip4); - memcpy(bound_client_ethernet_address, dhcp_client_ethernet_address, sizeof(bound_client_ethernet_address)); - dhcp_server_state_machine = DHCP_SERVER_STATE_ACK; - } else { - dhcp_server_state_machine = DHCP_SERVER_STATE_NAK; - } - } else { - dhcp_server_state_machine = DHCP_SERVER_STATE_NAK; - } - } else { - dhcp_server_state_machine = DHCP_SERVER_STATE_NAK; - } -#else - if (!(dhcp_server_state_machine == DHCP_SERVER_STATE_ACK || - dhcp_server_state_machine == DHCP_SERVER_STATE_NAK)) { - dhcp_server_state_machine = DHCP_SERVER_STATE_NAK; - } -#endif - break; - case DHCP_MESSAGE_TYPE_RELEASE: - dhcp_server_state_machine = DHCP_SERVER_STATE_IDLE; - break; - } - - return dhcp_server_state_machine; -} -/** - * @brief parse the dhcp message option part. - * @param optptr: the addr of the first option field. - * len: the total length of all option fields. - * @retval dhcp server state. - */ -static uint8_t dhcps_handle_msg_options(uint8_t *option_start, int16_t total_option_length) -{ - - int16_t option_message_type = 0; - uint8_t *option_end = option_start + total_option_length; - //dhcp_server_state_machine = DHCP_SERVER_STATE_IDLE; - - /* begin process the dhcp option info */ - while (option_start < option_end) { - switch ((uint8_t)*option_start) { - case DHCP_OPTION_CODE_MSG_TYPE: - option_message_type = *(option_start + 2); // 2 => code(1)+lenth(1) - break; - case DHCP_OPTION_CODE_REQUEST_IP_ADDRESS : -#if IS_USE_FIXED_IP - if (memcmp((char *)&dhcps_allocated_client_address, - (char *)option_start + 2, 4) == 0) - dhcp_server_state_machine = DHCP_SERVER_STATE_ACK; - else - dhcp_server_state_machine = DHCP_SERVER_STATE_NAK; -#else - memcpy((char *)&client_request_ip, (char *)option_start + 2, 4); -#endif - break; - } - // calculate the options offset to get next option's base addr - option_start += option_start[1] + 2; // optptr[1]: length value + (code(1)+ Len(1)) - } - return dhcps_handle_state_machine_change(option_message_type); -} - -/** - * @brief get message from buffer then check whether it is dhcp related or not. - * if yes , parse it more to undersatnd the client's request. - * @param same as recv callback function definition - * @retval if message is dhcp related then return dhcp server state, - * otherwise return 0 - */ -static uint8_t dhcps_check_msg_and_handle_options(struct pbuf *packet_buffer) -{ - int dhcp_message_option_offset; - dhcp_message_repository = (struct dhcps_msg *)packet_buffer->payload; - memcpy(dhcp_client_ethernet_address, dhcp_message_repository->chaddr, sizeof(dhcp_client_ethernet_address)); - dhcp_message_option_offset = ((int)dhcp_message_repository->options - - (int)packet_buffer->payload); - dhcp_message_total_options_lenth = (packet_buffer->len - - dhcp_message_option_offset); - /* check the magic number,if correct parse the content of options */ - if (memcmp((char *)dhcp_message_repository->options, - (char *)dhcp_magic_cookie, sizeof(dhcp_magic_cookie)) == 0) { - return dhcps_handle_msg_options(&dhcp_message_repository->options[4], - (dhcp_message_total_options_lenth - 4)); - } - - return 0; -} - - -/** - * @brief handle imcoming dhcp message and response message to client - * @param same as recv callback function definition - * @retval None - */ -static void dhcps_receive_udp_packet_handler(void *arg, struct udp_pcb *udp_pcb, -struct pbuf *udp_packet_buffer, struct ip_addr *sender_addr, uint16_t sender_port) -{ - int16_t total_length_of_packet_buffer; - struct pbuf *merged_packet_buffer = NULL; - - dhcp_message_repository = (struct dhcps_msg *)udp_packet_buffer->payload; - if (udp_packet_buffer == NULL) { - printf("Error! System doesn't allocate any buffer\n"); - return; - } - if (sender_port == DHCP_CLIENT_PORT) { - total_length_of_packet_buffer = udp_packet_buffer->tot_len; - if (udp_packet_buffer->next != NULL) { - merged_packet_buffer = pbuf_coalesce(udp_packet_buffer, - PBUF_TRANSPORT); - if (merged_packet_buffer->tot_len != - total_length_of_packet_buffer) { - pbuf_free(udp_packet_buffer); - return; - } - } - switch (dhcps_check_msg_and_handle_options(udp_packet_buffer)) { - case DHCP_SERVER_STATE_OFFER: - dhcps_send_offer(udp_packet_buffer); - break; - case DHCP_SERVER_STATE_ACK: - dhcps_send_ack(udp_packet_buffer); -#if (!IS_USE_FIXED_IP) - mark_ip_in_table((uint8_t)ip4_addr4(&dhcps_allocated_client_address)); -#endif - dhcp_server_state_machine = DHCP_SERVER_STATE_IDLE; - break; - case DHCP_SERVER_STATE_NAK: - dhcps_send_nak(udp_packet_buffer); - dhcp_server_state_machine = DHCP_SERVER_STATE_IDLE; - break; - case DHCP_OPTION_CODE_END: - break; - } - } - - /* free the UDP connection, so we can accept new clients */ - udp_disconnect(udp_pcb); - - /* Free the packet buffer */ - if (merged_packet_buffer != NULL) - pbuf_free(merged_packet_buffer); - else - pbuf_free(udp_packet_buffer); -} - -void dhcps_set_addr_pool(int addr_pool_set, struct ip_addr * addr_pool_start, struct ip_addr *addr_pool_end) -{ - dhcps_ip4addr_pool_start = ip4_addr4(addr_pool_start); - dhcps_ip4addr_pool_end = ip4_addr4(addr_pool_end); -} - -/** - * @brief Initialize dhcp server. - * @param None. - * @retval None. - * Note, for now,we assume the server latch ip 192.168.1.1 and support dynamic - * or fixed IP allocation. - */ -void dhcps_init(struct netif * pnetif) -{ -// printf("dhcps_init,wlan:%c\n\r",pnetif->name[1]); - dhcps_netif = pnetif; - dhcps_deinit(); - dhcps_pcb = udp_new(); - if (dhcps_pcb == NULL) { - printf("Error! upd_new error\n"); - return; - } - IP4_ADDR(&dhcps_send_broadcast_address, 255, 255, 255, 255); - - memset(&ip_table, 0, sizeof(struct table)); - if((dhcps_ip4addr_pool_end | dhcps_ip4addr_pool_start) == 0) { - dhcps_ip4addr_pool_start = 2; - dhcps_ip4addr_pool_end = 255; - } - - /* get net info from net interface */ - - memcpy(&dhcps_local_address, &pnetif->ip_addr, - sizeof(struct ip_addr)); - memcpy(&dhcps_local_mask, &pnetif->netmask, - sizeof(struct ip_addr)); - memcpy(&dhcps_local_gateway, &pnetif->gw, - sizeof(struct ip_addr)); - /* calculate the usable network ip range */ - dhcps_network_id.addr = ((pnetif->ip_addr.addr) & - (pnetif->netmask.addr)); - - dhcps_subnet_broadcast.addr = ((dhcps_network_id.addr | - ~(pnetif->netmask.addr))); -#if 0 - dhcps_owned_first_ip.addr = htonl((ntohl(dhcps_network_id.addr) + 1)); - dhcps_owned_last_ip.addr = htonl(ntohl(dhcps_subnet_broadcast.addr) - 1); - dhcps_num_of_available_ips = ((ntohl(dhcps_owned_last_ip.addr) - - ntohl(dhcps_owned_first_ip.addr)) + 1); -#endif - -#if IS_USE_FIXED_IP - IP4_ADDR(&dhcps_allocated_client_address, ip4_addr1(&dhcps_local_address) - , ip4_addr2(&dhcps_local_address), ip4_addr3(&dhcps_local_address), - (ip4_addr4(&dhcps_local_address)) + 1 ); -#else - dhcps_ip_table_semaphore = xSemaphoreCreateMutex(); - - memset(&dhcps_allocated_client_address, 0, sizeof(struct ip_addr)); - memset(bound_client_ethernet_address, 0, sizeof(bound_client_ethernet_address)); - mark_ip_in_table((uint8_t)ip4_addr4(&dhcps_local_address)); - mark_ip_in_table((uint8_t)ip4_addr4(&dhcps_local_gateway)); -#if 0 - for (i = 1; i < ip4_addr4(&dhcps_local_address); i++) { - mark_ip_in_table(i); - } -#endif -#endif - udp_bind(dhcps_pcb, IP_ADDR_ANY, DHCP_SERVER_PORT); - udp_recv(dhcps_pcb, dhcps_receive_udp_packet_handler, NULL); -} - -void dhcps_deinit(void) -{ - if (dhcps_pcb != NULL) { - udp_remove(dhcps_pcb); - dhcps_pcb = NULL; - } - if (dhcps_ip_table_semaphore != NULL) { - vSemaphoreDelete(dhcps_ip_table_semaphore); - dhcps_ip_table_semaphore = NULL; - } -} diff --git a/Firmware/RTLGDB/USDK/component/common/network/dhcp/dhcps.h b/Firmware/RTLGDB/USDK/component/common/network/dhcp/dhcps.h deleted file mode 100644 index ec584d2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/dhcp/dhcps.h +++ /dev/null @@ -1,120 +0,0 @@ - -#ifndef __DHCPS_H__ -#define __DHCPS_H__ - -#include "lwip/arch.h" -#include "lwip/netif.h" -#include "lwip/udp.h" -#include "lwip/stats.h" -#include "lwip/sys.h" - -#include - - -#define IS_USE_FIXED_IP 0 -#define debug_dhcps 0 - -/* dhcp server states */ -#define DHCP_SERVER_STATE_OFFER (1) -#define DHCP_SERVER_STATE_DECLINE (2) -#define DHCP_SERVER_STATE_ACK (3) -#define DHCP_SERVER_STATE_NAK (4) -#define DHCP_SERVER_STATE_IDLE (5) - - -#define BOOTP_BROADCAST (0x8000) - -#define DHCP_MESSAGE_OP_REQUEST (1) -#define DHCP_MESSAGE_OP_REPLY (2) - -#define DHCP_MESSAGE_HTYPE (1) -#define DHCP_MESSAGE_HLEN (6) - -//#define DHCP_SERVER_PORT (67) // in dhcp.h -//#define DHCP_CLIENT_PORT (68) // in dhcp.h - -#define DHCP_MESSAGE_TYPE_DISCOVER (1) -#define DHCP_MESSAGE_TYPE_OFFER (2) -#define DHCP_MESSAGE_TYPE_REQUEST (3) -#define DHCP_MESSAGE_TYPE_DECLINE (4) -#define DHCP_MESSAGE_TYPE_ACK (5) -#define DHCP_MESSAGE_TYPE_NAK (6) -#define DHCP_MESSAGE_TYPE_RELEASE (7) - -#define DHCP_OPTION_LENGTH_ONE (1) -#define DHCP_OPTION_LENGTH_TWO (2) -#define DHCP_OPTION_LENGTH_THREE (3) -#define DHCP_OPTION_LENGTH_FOUR (4) - -#define DHCP_OPTION_CODE_SUBNET_MASK (1) -#define DHCP_OPTION_CODE_ROUTER (3) -#define DHCP_OPTION_CODE_DNS_SERVER (6) -#define DHCP_OPTION_CODE_INTERFACE_MTU (26) -#define DHCP_OPTION_CODE_BROADCAST_ADDRESS (28) -#define DHCP_OPTION_CODE_PERFORM_ROUTER_DISCOVERY (31) -#define DHCP_OPTION_CODE_REQUEST_IP_ADDRESS (50) -#define DHCP_OPTION_CODE_LEASE_TIME (51) -#define DHCP_OPTION_CODE_MSG_TYPE (53) -#define DHCP_OPTION_CODE_SERVER_ID (54) -#define DHCP_OPTION_CODE_REQ_LIST (55) -#define DHCP_OPTION_CODE_END (255) - -#define IP_FREE_TO_USE (1) -#define IP_ALREADY_IN_USE (0) - -#define HW_ADDRESS_LENGTH (6) - -/* Reference by RFC 2131 */ -struct dhcps_msg { - uint8_t op; /* Message op code/message type. 1 = BOOTREQUEST, 2 = BOOTREPLY */ - uint8_t htype; /* Hardware address type */ - uint8_t hlen; /* Hardware address length */ - uint8_t hops; /* Client sets to zero, optionally used by relay agents - when booting via a relay agent */ - uint8_t xid[4]; /* Transaction ID, a random number chosen by the client, - used by the client and server to associate messages and - responses between a client and a server */ - uint16_t secs; /* Filled in by client, seconds elapsed since client began address - acquisition or renewal process.*/ - uint16_t flags; /* bit 0: Broadcast flag, bit 1~15:MBZ must 0*/ - uint8_t ciaddr[4]; /* Client IP address; only filled in if client is in BOUND, - RENEW or REBINDING state and can respond to ARP requests. */ - uint8_t yiaddr[4]; /* 'your' (client) IP address */ - uint8_t siaddr[4]; /* IP address of next server to use in bootstrap; - returned in DHCPOFFER, DHCPACK by server. */ - uint8_t giaddr[4]; /* Relay agent IP address, used in booting via a relay agent.*/ - uint8_t chaddr[16]; /* Client hardware address */ - uint8_t sname[64]; /* Optional server host name, null terminated string.*/ - uint8_t file[128]; /* Boot file name, null terminated string; "generic" name or - null in DHCPDISCOVER, fully qualified directory-path name in DHCPOFFER.*/ - uint8_t options[312]; /* Optional parameters field. reference the RFC 2132 */ -}; - -/* use this to check whether the message is dhcp related or not */ -static const uint8_t dhcp_magic_cookie[4] = {99, 130, 83, 99}; -static const uint8_t dhcp_option_lease_time_one_day[] = {0x00, 0x01, 0x51, 0x80}; - -#ifdef CLASS_B_NET -static const uint8_t dhcp_option_interface_mtu[] = {0x05, 0xDC}; // 1500 -#else -static const uint8_t dhcp_option_interface_mtu[] = {0x02, 0x40}; // 576 -#endif - -struct table { - uint32_t ip_range[8]; -}; - -struct address_pool{ - uint32_t start; - uint32_t end; -}; - -/* expose API */ - -extern uint8_t dhcps_ip4addr_pool_start, dhcps_ip4addr_pool_end; -void dhcps_init(struct netif * pnetif); -void dhcps_deinit(void); - -extern struct netif *netif_default; - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/network/httpc/httpc.h b/Firmware/RTLGDB/USDK/component/common/network/httpc/httpc.h deleted file mode 100644 index 7934707..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/httpc/httpc.h +++ /dev/null @@ -1,216 +0,0 @@ - /** - ****************************************************************************** - * @file httpc.h - * @author - * @version - * @brief This file provides user interface for HTTP/HTTPS client. - ****************************************************************************** - * @attention - * - * This module is a confidential and proprietary property of RealTek and possession or use of this module requires written permission of RealTek. - * - * Copyright(c) 2016, Realtek Semiconductor Corporation. All rights reserved. - ****************************************************************************** - */ -#ifndef _HTTPC_H_ -#define _HTTPC_H_ - -/** @addtogroup httpc HTTPC - * @ingroup network - * @brief HTTP/HTTPS client functions - * @{ - */ - -#include "platform_stdlib.h" -#include "platform_opts.h" - -#define HTTPC_SECURE_NONE 0 /*!< Running with HTTP client */ -#define HTTPC_SECURE_TLS 1 /*!< Running with HTTPS client */ - -#define HTTPC_DEBUG_OFF 0 /*!< Disable httpc debug log */ -#define HTTPC_DEBUG_ON 1 /*!< Enable httpc debug log */ -#define HTTPC_DEBUG_VERBOSE 2 /*!< Enable httpc verbose debug log */ - -#define HTTPC_TLS_POLARSSL 0 /*!< Use PolarSSL for TLS when HTTPS */ -#define HTTPC_TLS_MBEDTLS 1 /*!< Use mbedTLS for TLS when HTTPS */ - -#if CONFIG_USE_POLARSSL -#define HTTPC_USE_TLS HTTPC_TLS_POLARSSL -#elif CONFIG_USE_MBEDTLS -#define HTTPC_USE_TLS HTTPC_TLS_MBEDTLS -#endif - -/** - * @brief The structure is the context used for HTTP response header parsing. - * @note Only header string includes string terminator. - */ -struct http_response { - uint8_t *header; /*!< HTTP header string parsed in HTTP response */ - size_t header_len; /*!< HTTP header string length */ - uint8_t *version; /*!< Pointer to HTTP version in the parsed HTTP header string */ - size_t version_len; /*!< HTTP version data length */ - uint8_t *status; /*!< Pointer to HTTP status code in the parsed HTTP header string */ - size_t status_len; /*!< HTTP status code data length */ - uint8_t *content_type; /*!< Pointer to Content-Type header field in the parsed HTTP header string */ - size_t content_type_len; /*!< Content-Type header field data length */ - size_t content_len; /*!< Value of Content-Length header field parsed in HTTP header string */ -}; - -/** - * @brief The structure is the context used for connection. - */ -struct httpc_conn { - int sock; /*!< Client socket descriptor for connection */ - struct http_response response; /*!< Context for HTTP response */ - void *tls; /*!< Context for TLS connection */ - uint8_t *request_header; /*!< Pointer to transmission buffer of HTTP request header */ - char *host; /*!< String of server host name or IP */ - uint16_t port; /*!< Service port */ - char *user_password; /*!< Base64 string for HTTP basic authorization */ -}; - -/** - * @brief This function is used to generate connection context for an HTTP/HTTPS client. - * @param[in] secure: security mode for HTTP or HTTPS. Must be HTTPD_SECURE_NONE, HTTPD_SECURE_TLS. - * @param[in] client_cert: string of client certificate if required to be verified by server. - * @param[in] client_key: string of client private key if required to be verified by server. - * @param[in] ca_certs: string including certificates in CA trusted chain if want to verify server certificate. - * @return pointer to the generated connection context - */ -struct httpc_conn *httpc_conn_new(uint8_t secure, char *client_cert, char *client_key, char *ca_certs); - -/** - * @brief This function is used to deallocate a connection context. - * @param[in] conn: pointer to connection context - * @return None - */ -void httpc_conn_free(struct httpc_conn *conn); - -/** - * @brief This function is used to connect to a server. - * @param[in] conn: pointer to connection context - * @param[in] host: string of server host name or IP - * @param[in] port: service port - * @param[in] timeout: connection timeout in seconds - * @return 0 : if successful - * @return -1 : if error occurred - */ -int httpc_conn_connect(struct httpc_conn *conn, char *host, uint16_t port, uint32_t timeout); - -/** - * @brief This function is used to close connection from a server. - * @param[in] conn: pointer to connection context - * @return None - */ -void httpc_conn_close(struct httpc_conn *conn); - -/** - * @brief This function is used to setup authorization for connection. - * @param[in] conn: pointer to connection context - * @param[in] user: string of user name for authorization - * @param[in] password: string of password for authorization - * @return 0 : if successful - * @return -1 : if error occurred - * @note Must be used before httpc_conn_connect() if basic authorization is used - */ -int httpc_conn_setup_user_password(struct httpc_conn *conn, char *user, char *password); - -/** - * @brief This function is used to setup httpc debug. - * @param[in] debug: flag to enable/disable httpc debug. Must be HTTPC_DEBUG_OFF, HTTPC_DEBUG_ON, HTTPC_DEBUG_VERBOSE. - * @return None - */ -void httpc_setup_debug(uint8_t debug); - -/** - * @brief This function is used to free memory allocated by httpc API, such as httpc_response_get_header_field(). - * @param[in] ptr: pointer to memory to be deallocated - * @return None - */ -void httpc_free(void *ptr); - -/** - * @brief This function is used to dump the parsed HTTP header of response in connection context. - * @param[in] conn: pointer to connection context - * @return None - */ -void httpc_conn_dump_header(struct httpc_conn *conn); - -/** - * @brief This function is used to start a HTTP request in connection. - * @param[in] conn: pointer to connection context - * @param[in] method: string of HTTP method in HTTP request - * @param[in] resource: string including path and query string to identify a resource - * @param[in] content_type: string of Content-Type header field written to HTTP request. No Content-Type in HTTP request if NULL. - * @param[in] content_len: value of Content-Length header field written to HTTP request. No Content-Length in HTTP request if NULL. - * @return 0 : if successful - * @return -1 : if error occurred - */ -int httpc_request_write_header_start(struct httpc_conn *conn, char *method, char *resource, char *content_type, size_t content_len); - -/** - * @brief This function is used to add an HTTP header field to HTTP request. - * @param[in] conn: pointer to connection context - * @param[in] name: HTTP header field name string - * @param[in] value: HTTP header field value - * @return 0 : if successful - * @return -1 : if error occurred - */ -int httpc_request_write_header(struct httpc_conn *conn, char *name, char *value); - -/** - * @brief This function is used to write HTTP request header data to connection. - * @param[in] conn: pointer to connection context - * @return return value of lwip socket write() for HTTP and PolarSSL ssl_write() for HTTPS - */ -int httpc_request_write_header_finish(struct httpc_conn *conn); - -/** - * @brief This function is used to write HTTP request body data to connection. - * @param[in] conn: pointer to connection context - * @param[in] data: data to be written - * @param[in] data_len: data length - * @return return value of lwip socket write() for HTTP and PolarSSL ssl_write() for HTTPS - */ -int httpc_request_write_data(struct httpc_conn *conn, uint8_t *data, size_t data_len); - -/** - * @brief This function is used to check HTTP status of response in connection context. - * @param[in] conn: pointer to connection context - * @param[in] status: HTTP status string to compare with - * @return 0 : if different - * @return 1 : if matched - */ -int httpc_response_is_status(struct httpc_conn *conn, char *status); - -/** - * @brief This function is used to read HTTP header from client socket descriptor and parse content to connection context. - * @param[in] conn: pointer to connection context - * @return 0 : if successful - * @return -1 : if error occurred - */ -int httpc_response_read_header(struct httpc_conn *conn); - -/** - * @brief This function is used to read data from HTTP/HTTPS connection. - * @param[in] conn: pointer to connection context - * @param[out] data: buffer for data read - * @param[in] data_len: buffer length - * @return return value of lwip socket read() for HTTP and PolarSSL ssl_read() for HTTPS - */ -int httpc_response_read_data(struct httpc_conn *conn, uint8_t *data, size_t data_len); - -/** - * @brief This function is used to get a header field from HTTP header of connection context. - * @param[in] conn: pointer to connection context - * @param[in] field: header field string to search - * @param[out] value: search result stored in memory allocated - * @return 0 : if found - * @return -1 : if not found - * @note The search result memory should be free by httpc_free(). - */ -int httpc_response_get_header_field(struct httpc_conn *conn, char *field, char **value); - -/*\@}*/ - -#endif /* _HTTPC_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/httpc/httpc_tls.c b/Firmware/RTLGDB/USDK/component/common/network/httpc/httpc_tls.c deleted file mode 100644 index b3df0e7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/httpc/httpc_tls.c +++ /dev/null @@ -1,355 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include "platform_stdlib.h" - -#include "httpc.h" - -#if (HTTPC_USE_TLS == HTTPC_TLS_POLARSSL) -#include "polarssl/ssl.h" -#include "polarssl/memory.h" -#include "polarssl/base64.h" - -struct httpc_tls { - ssl_context ctx; /*!< Context for PolarSSL */ - x509_crt ca; /*!< CA certificates */ - x509_crt cert; /*!< Certificate */ - pk_context key; /*!< Private key */ -}; - -static int _verify_func(void *data, x509_crt *crt, int depth, int *flags) -{ - char buf[1024]; - x509_crt_info(buf, sizeof(buf) - 1, "", crt); - - if(*flags) - printf("\n[HTTPC] ERROR: certificate verify\n%s\n", buf); - else - printf("\n[HTTPC] Certificate verified\n%s\n", buf); - - return 0; -} - -#elif (HTTPC_USE_TLS == HTTPC_TLS_MBEDTLS) -#include "mbedtls/ssl.h" -#include "mbedtls/platform.h" -#include "mbedtls/net_sockets.h" -#include "mbedtls/base64.h" - -struct httpc_tls { - mbedtls_ssl_context ctx; /*!< Context for mbedTLS */ - mbedtls_ssl_config conf; /*!< Configuration for mbedTLS */ - mbedtls_x509_crt ca; /*!< CA certificates */ - mbedtls_x509_crt cert; /*!< Certificate */ - mbedtls_pk_context key; /*!< Private key */ -}; - -static int _verify_func(void *data, mbedtls_x509_crt *crt, int depth, uint32_t *flags) -{ - char buf[1024]; - mbedtls_x509_crt_info(buf, sizeof(buf) - 1, "", crt); - - if(*flags) - printf("\n[HTTPC] ERROR: certificate verify\n%s\n", buf); - else - printf("\n[HTTPC] Certificate verified\n%s\n", buf); - - return 0; -} - -static void* _calloc_func(size_t nmemb, size_t size) -{ - size_t mem_size; - void *ptr = NULL; - - mem_size = nmemb * size; - ptr = pvPortMalloc(mem_size); - - if(ptr) - memset(ptr, 0, mem_size); - - return ptr; -} -#endif /* HTTPC_USE_POLARSSL */ - -static int _random_func(void *p_rng, unsigned char *output, size_t output_len) -{ - rtw_get_random_bytes(output, output_len); - return 0; -} - -void *httpc_tls_new(int *sock, char *client_cert, char *client_key, char *ca_certs) -{ -#if (HTTPC_USE_TLS == HTTPC_TLS_POLARSSL) - int ret = 0; - struct httpc_tls *tls = NULL; - - memory_set_own(pvPortMalloc, vPortFree); - tls = (struct httpc_tls *) malloc(sizeof(struct httpc_tls)); - - if(tls) { - ssl_context *ssl = &tls->ctx; - - memset(tls, 0, sizeof(struct httpc_tls)); - x509_crt_init(&tls->ca); - x509_crt_init(&tls->cert); - pk_init(&tls->key); - ssl_init(ssl); - ssl_set_endpoint(ssl, SSL_IS_CLIENT); - ssl_set_authmode(ssl, SSL_VERIFY_NONE); - ssl_set_rng(ssl, _random_func, NULL); - ssl_set_bio(ssl, net_recv, sock, net_send, sock); - - if(client_cert && client_key) { - if((ret = x509_crt_parse(&tls->cert, (const unsigned char *) client_cert, strlen(client_cert))) != 0) { - printf("\n[HTTPC] ERROR: x509_crt_parse %d\n", ret); - ret = -1; - goto exit; - } - - if((ret = pk_parse_key(&tls->key, (const unsigned char *) client_key, strlen(client_key), NULL, 0)) != 0) { - printf("\n[HTTPC] ERROR: pk_parse_key %d\n", ret); - ret = -1; - goto exit; - } - - if((ret = ssl_set_own_cert(ssl, &tls->cert, &tls->key)) != 0) { - printf("\n[HTTPC] ERROR: ssl_set_own_cert %d\n", ret); - ret = -1; - goto exit; - } - } - - if(ca_certs) { - // set trusted ca certificates next to client certificate - if((ret = x509_crt_parse(&tls->ca, (const unsigned char *) ca_certs, strlen(ca_certs))) != 0) { - printf("\n[HTTPC] ERROR: x509_crt_parse %d\n", ret); - ret = -1; - goto exit; - } - - ssl_set_ca_chain(ssl, &tls->ca, NULL, NULL); - ssl_set_authmode(ssl, SSL_VERIFY_REQUIRED); - ssl_set_verify(ssl, _verify_func, NULL); - } - } - else { - printf("\n[HTTPC] ERROR: malloc\n"); - ret = -1; - goto exit; - } - -exit: - if(ret && tls) { - ssl_free(&tls->ctx); - x509_crt_free(&tls->ca); - x509_crt_free(&tls->cert); - pk_free(&tls->key); - free(tls); - tls = NULL; - } - - return (void *) tls; -#elif (HTTPC_USE_TLS == HTTPC_TLS_MBEDTLS) - int ret = 0; - struct httpc_tls *tls = NULL; - - mbedtls_platform_set_calloc_free(_calloc_func, vPortFree); - tls = (struct httpc_tls *) malloc(sizeof(struct httpc_tls)); - - if(tls) { - mbedtls_ssl_context *ssl = &tls->ctx; - mbedtls_ssl_config *conf = &tls->conf; - - memset(tls, 0, sizeof(struct httpc_tls)); - mbedtls_x509_crt_init(&tls->ca); - mbedtls_x509_crt_init(&tls->cert); - mbedtls_pk_init(&tls->key); - mbedtls_ssl_init(ssl); - mbedtls_ssl_config_init(conf); - - if((ret = mbedtls_ssl_config_defaults(conf, - MBEDTLS_SSL_IS_CLIENT, - MBEDTLS_SSL_TRANSPORT_STREAM, - MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { - - printf("\n[HTTPC] ERROR: mbedtls_ssl_config_defaults %d\n", ret); - ret = -1; - goto exit; - } - - mbedtls_ssl_conf_authmode(conf, MBEDTLS_SSL_VERIFY_NONE); - mbedtls_ssl_conf_rng(conf, _random_func, NULL); - - if(client_cert && client_key) { - if((ret = mbedtls_x509_crt_parse(&tls->cert, (const unsigned char *) client_cert, strlen(client_cert) + 1)) != 0) { - printf("\n[HTTPC] ERROR: mbedtls_x509_crt_parse %d\n", ret); - ret = -1; - goto exit; - } - - if((ret = mbedtls_pk_parse_key(&tls->key, (const unsigned char *) client_key, strlen(client_key) + 1, NULL, 0)) != 0) { - printf("\n[HTTPC] ERROR: mbedtls_pk_parse_key %d\n", ret); - ret = -1; - goto exit; - } - - if((ret = mbedtls_ssl_conf_own_cert(conf, &tls->cert, &tls->key)) != 0) { - printf("\n[HTTPC] ERROR: mbedtls_ssl_conf_own_cert %d\n", ret); - ret = -1; - goto exit; - } - } - - if(ca_certs) { - // set trusted ca certificates next to client certificate - if((ret = mbedtls_x509_crt_parse(&tls->ca, (const unsigned char *) ca_certs, strlen(ca_certs) + 1)) != 0) { - printf("\n[HTTPC] ERROR: mbedtls_x509_crt_parse %d\n", ret); - ret = -1; - goto exit; - } - - mbedtls_ssl_conf_ca_chain(conf, &tls->ca, NULL); - mbedtls_ssl_conf_authmode(conf, MBEDTLS_SSL_VERIFY_REQUIRED); - mbedtls_ssl_conf_verify(conf, _verify_func, NULL); - } - - if((ret = mbedtls_ssl_setup(ssl, conf)) != 0) { - printf("\n[HTTPC] ERROR: mbedtls_ssl_setup %d\n", ret); - ret = -1; - goto exit; - } - - mbedtls_ssl_set_bio(ssl, sock, mbedtls_net_send, mbedtls_net_recv, NULL); - } - else { - printf("\n[HTTPC] ERROR: malloc\n"); - ret = -1; - goto exit; - } - -exit: - if(ret && tls) { - mbedtls_ssl_free(&tls->ctx); - mbedtls_ssl_config_free(&tls->conf); - mbedtls_x509_crt_free(&tls->ca); - mbedtls_x509_crt_free(&tls->cert); - mbedtls_pk_free(&tls->key); - free(tls); - tls = NULL; - } - - return (void *) tls; -#endif -} - -void httpc_tls_free(void *tls_in) -{ - struct httpc_tls *tls = (struct httpc_tls *) tls_in; - -#if (HTTPC_USE_TLS == HTTPC_TLS_POLARSSL) - ssl_free(&tls->ctx); - x509_crt_free(&tls->ca); - x509_crt_free(&tls->cert); - pk_free(&tls->key); - free(tls); -#elif (HTTPC_USE_TLS == HTTPC_TLS_MBEDTLS) - mbedtls_ssl_free(&tls->ctx); - mbedtls_ssl_config_free(&tls->conf); - mbedtls_x509_crt_free(&tls->ca); - mbedtls_x509_crt_free(&tls->cert); - mbedtls_pk_free(&tls->key); - free(tls); -#endif -} - -int httpc_tls_handshake(void *tls_in, char *host) -{ - struct httpc_tls *tls = (struct httpc_tls *) tls_in; - -#if (HTTPC_USE_TLS == HTTPC_TLS_POLARSSL) - int ret = 0; - - ssl_set_hostname(&tls->ctx, host); - - if((ret = ssl_handshake(&tls->ctx)) != 0) { - printf("\n[HTTPC] ERROR: ssl_handshake %d\n", ret); - ret = -1; - } - else { - printf("\n[HTTPC] Use ciphersuite %s\n", ssl_get_ciphersuite(&tls->ctx)); - } - - return ret; -#elif (HTTPC_USE_TLS == HTTPC_TLS_MBEDTLS) - int ret = 0; - - mbedtls_ssl_set_hostname(&tls->ctx, host); - - if((ret = mbedtls_ssl_handshake(&tls->ctx)) != 0) { - printf("\n[HTTPC] ERROR: mbedtls_ssl_handshake %d\n", ret); - ret = -1; - } - else { - printf("\n[HTTPC] Use ciphersuite %s\n", mbedtls_ssl_get_ciphersuite(&tls->ctx)); - } - - return ret; -#endif -} - -void httpc_tls_close(void *tls_in) -{ - struct httpc_tls *tls = (struct httpc_tls *) tls_in; - -#if (HTTPC_USE_TLS == HTTPC_TLS_POLARSSL) - ssl_close_notify(&tls->ctx); -#elif (HTTPC_USE_TLS == HTTPC_TLS_MBEDTLS) - mbedtls_ssl_close_notify(&tls->ctx); -#endif -} - -int httpc_tls_read(void *tls_in, uint8_t *buf, size_t buf_len) -{ - struct httpc_tls *tls = (struct httpc_tls *) tls_in; - -#if (HTTPC_USE_TLS == HTTPC_TLS_POLARSSL) - return ssl_read(&tls->ctx, buf, buf_len); -#elif (HTTPC_USE_TLS == HTTPC_TLS_MBEDTLS) - return mbedtls_ssl_read(&tls->ctx, buf, buf_len); -#endif -} - -int httpc_tls_write(void *tls_in, uint8_t *buf, size_t buf_len) -{ - struct httpc_tls *tls = (struct httpc_tls *) tls_in; - -#if (HTTPC_USE_TLS == HTTPC_TLS_POLARSSL) - return ssl_write(&tls->ctx, buf, buf_len); -#elif (HTTPC_USE_TLS == HTTPC_TLS_MBEDTLS) - return mbedtls_ssl_write(&tls->ctx, buf, buf_len); -#endif -} - -int httpc_base64_encode(uint8_t *data, size_t data_len, char *base64_buf, size_t buf_len) -{ -#if (HTTPC_USE_TLS == HTTPC_TLS_POLARSSL) - int ret = 0; - - if((ret = base64_encode(base64_buf, &buf_len, data, data_len)) != 0) { - printf("\n[HTTPC] ERROR: base64_encode %d\n", ret); - ret = -1; - } - - return ret; -#elif (HTTPC_USE_TLS == HTTPC_TLS_MBEDTLS) - int ret = 0; - size_t output_len = 0; - - if((ret = mbedtls_base64_encode(base64_buf, buf_len, &output_len, data, data_len)) != 0) { - printf("\n[HTTPC] ERROR: mbedtls_base64_encode %d\n", ret); - ret = -1; - } - - return ret; -#endif -} diff --git a/Firmware/RTLGDB/USDK/component/common/network/httpd/httpd.h b/Firmware/RTLGDB/USDK/component/common/network/httpd/httpd.h deleted file mode 100644 index 15d6ed6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/httpd/httpd.h +++ /dev/null @@ -1,299 +0,0 @@ -/** - ****************************************************************************** - * @file httpd.h - * @author - * @version - * @brief This file provides user interface for HTTP/HTTPS server. - ****************************************************************************** - * @attention - * - * This module is a confidential and proprietary property of RealTek and possession or use of this module requires written permission of RealTek. - * - * Copyright(c) 2016, Realtek Semiconductor Corporation. All rights reserved. - ****************************************************************************** - */ -#ifndef _HTTPD_H_ -#define _HTTPD_H_ - -/** @addtogroup httpd HTTPD - * @ingroup network - * @brief HTTP/HTTPS server functions - * @{ - */ - -#include "platform_stdlib.h" -#include "platform_opts.h" - -#define HTTPD_SECURE_NONE 0 /*!< Running with HTTP server */ -#define HTTPD_SECURE_TLS 1 /*!< Running with HTTPS server */ -#define HTTPD_SECURE_TLS_VERIFY 2 /*!< Running with HTTPS server and verify client */ - -#define HTTPD_THREAD_SINGLE 0 /*!< Multi-thread mode for request handling */ -#define HTTPD_THREAD_MULTIPLE 1 /*!< Single-thread mode for request handling */ - -#define HTTPD_DEBUG_OFF 0 /*!< Disable httpd debug log */ -#define HTTPD_DEBUG_ON 1 /*!< Enable httpd debug log */ -#define HTTPD_DEBUG_VERBOSE 2 /*!< Enable httpd verbose debug log */ - -#define HTTPD_TLS_POLARSSL 0 /*!< Use PolarSSL for TLS when HTTPS */ -#define HTTPD_TLS_MBEDTLS 1 /*!< Use mbedTLS for TLS when HTTPS */ - -#if CONFIG_USE_POLARSSL -#define HTTPD_USE_TLS HTTPD_TLS_POLARSSL -#elif CONFIG_USE_MBEDTLS -#define HTTPD_USE_TLS HTTPD_TLS_MBEDTLS -#endif - -/** - * @brief The structure is the context used for HTTP request header parsing. - * @note Only header string includes string terminator. - */ -struct http_request { - uint8_t *header; /*!< HTTP header string parsed in HTTP request */ - size_t header_len; /*!< HTTP header string length */ - uint8_t *method; /*!< Pointer to HTTP method in the parsed HTTP header string */ - size_t method_len; /*!< HTTP method data length */ - uint8_t *path; /*!< Pointer to resource path in the parsed HTTP header string */ - size_t path_len; /*!< Resource path data length */ - uint8_t *query; /*!< Pointer to query string in the parsed HTTP header string */ - size_t query_len; /*!< Query string data length */ - uint8_t *version; /*!< Pointer to HTTP version in the parsed HTTP header string */ - size_t version_len; /*!< HTTP version data length */ - uint8_t *host; /*!< Pointer to Host header field in the parsed HTTP header string */ - size_t host_len; /*!< Host header field data length */ - uint8_t *content_type; /*!< Pointer to Content-Type header field in the parsed HTTP header string */ - size_t content_type_len; /*!< Content-Type header field data length */ - size_t content_len; /*!< Value of Content-Length header field parsed in HTTP header string */ -}; - -/** - * @brief The structure is the context used for client connection. - */ -struct httpd_conn { - int sock; /*!< Client socket descriptor for connection */ - struct http_request request; /*!< Context for HTTP request */ - void *tls; /*!< Context for TLS connection */ - uint8_t *response_header; /*!< Pointer to transmission buffer of HTTP response header */ -}; - -/** - * @brief This function is used to start an HTTP or HTTPS server. - * @param[in] port: service port - * @param[in] max_conn: max client connections allowed - * @param[in] stack_bytes: thread stack size in bytes - * @param[in] thread_mode: server running thread mode. Must be HTTPD_THREAD_SINGLE, HTTPD_THREAD_MULTIPLE. - * @param[in] secure: security mode for HTTP or HTTPS. Must be HTTPD_SECURE_NONE, HTTPD_SECURE_TLS, HTTPD_SECURE_TLS_VERIFY. - * @return 0 : if successful - * @return -1 : if error occurred - */ -int httpd_start(uint16_t port, uint8_t max_conn, uint32_t stack_bytes, uint8_t thread_mode, uint8_t secure); - -/** - * @brief This function is used to stop a running server - * @return None - */ -void httpd_stop(void); - -/** - * @brief This function is used to register a callback function for a Web page request handling. - * @param[in] path: resource path for a page - * @param[in] callback: callback function to handle the request to page - * @return 0 : if successful - * @return -1 : if error occurred - */ -int httpd_reg_page_callback(char *path, void (*callback)(struct httpd_conn *conn)); - -/** - * @brief This function is used to clear all registered page callback functions. - * @return None - * @note All page callback will be cleared automatically if httpd_stop(). - */ -void httpd_clear_page_callbacks(void); - -/** - * @brief This function is used to setup httpd debug. - * @param[in] debug: flag to enable/disable httpd debug. Must be HTTPD_DEBUG_OFF, HTTPD_DEBUG_ON, HTTPD_DEBUG_VERBOSE. - * @return None - */ -void httpd_setup_debug(uint8_t debug); - -/** - * @brief This function is used to setup certificate and key for server before starting with HTTPS. - * @param[in] server_cert: string of server certificate - * @param[in] server_key: string of server private key - * @param[in] ca_certs: string including certificates in CA trusted chain - * @return 0 : if successful - * @return -1 : if error occurred - * @note Must be used before httpd_start() if staring HTTPS server - */ -int httpd_setup_cert(const char *server_cert, const char *server_key, const char *ca_certs); - -/** - * @brief This function is used to setup authorization for server. - * @param[in] user: string of user name for authorization - * @param[in] password: string of password for authorization - * @return 0 : if successful - * @return -1 : if error occurred - * @note Must be used before httpd_start() if basic authorization is used - */ -int httpd_setup_user_password(char *user, char *password); - -/** - * @brief This function is used to free memory allocated by httpd API, such as httpd_request_get_header_field() and httpd_request_get_query_key(). - * @param[in] ptr: pointer to memory to be deallocated - * @return None - */ -void httpd_free(void *ptr); - -/** - * @brief This function is used to close a client connection and release context resource. - * @param[in] conn: pointer to connection context - * @return None - * @note Multiple requests/response can be handled in a connection before connection closed. All connections will be closed automatically if httpd_stop(). - */ -void httpd_conn_close(struct httpd_conn *conn); - -/** - * @brief This function is used to dump the parsed HTTP header of request in connection context. - * @param[in] conn: pointer to connection context - * @return None - */ -void httpd_conn_dump_header(struct httpd_conn *conn); - -/** - * @brief This function is used to check HTTP method of request in connection context. - * @param[in] conn: pointer to connection context - * @param[in] method: HTTP method string to compare with - * @return 0 : if different - * @return 1 : if matched - */ -int httpd_request_is_method(struct httpd_conn *conn, char *method); - -/** - * @brief This function is used to read HTTP header from client socket descriptor and parse content to connection context. - * @param[in] conn: pointer to connection context - * @return 0 : if successful - * @return -1 : if error occurred - * @note httpd_request_read_header() is automatically invoked by httpd server to parse request before executing page callback - */ -int httpd_request_read_header(struct httpd_conn *conn); - -/** - * @brief This function is used to read data from HTTP/HTTPS connection. - * @param[in] conn: pointer to connection context - * @param[out] data: buffer for data read - * @param[in] data_len: buffer length - * @return return value of lwip socket read() for HTTP and PolarSSL ssl_read() for HTTPS - */ -int httpd_request_read_data(struct httpd_conn *conn, uint8_t *data, size_t data_len); - -/** - * @brief This function is used to get a header field from HTTP header of connection context. - * @param[in] conn: pointer to connection context - * @param[in] field: header field string to search - * @param[out] value: search result stored in memory allocated - * @return 0 : if found - * @return -1 : if not found - * @note The search result memory should be free by httpd_free(). - */ -int httpd_request_get_header_field(struct httpd_conn *conn, char *field, char **value); - -/** - * @brief This function is used to get a key value from query string in HTTP header of connection context. - * @param[in] conn: pointer to connection context - * @param[in] key: key name string to search - * @param[out] value: search result stored in memory allocated - * @return 0 : if found - * @return -1 : if not found - * @note The search result memory should be free by httpd_free(). - */ -int httpd_request_get_query_key(struct httpd_conn *conn, char *key, char **value); - -/** - * @brief This function is used to start a HTTP response in connection. - * @param[in] conn: pointer to connection context - * @param[in] status: string of status code in HTTP response - * @param[in] content_type: string of Content-Type header field written to HTTP response. No Content-Type in HTTP response if NULL. - * @param[in] content_len: value of Content-Length header field written to HTTP response. No Content-Length in HTTP response if NULL. - * @return 0 : if successful - * @return -1 : if error occurred - */ -int httpd_response_write_header_start(struct httpd_conn *conn, char *status, char *content_type, size_t content_len); - -/** - * @brief This function is used to add an HTTP header field to HTTP response. - * @param[in] conn: pointer to connection context - * @param[in] name: HTTP header field name string - * @param[in] value: HTTP header field value - * @return 0 : if successful - * @return -1 : if error occurred - */ -int httpd_response_write_header(struct httpd_conn *conn, char *name, char *value); - -/** - * @brief This function is used to write HTTP response header data to connection. - * @param[in] conn: pointer to connection context - * @return return value of lwip socket write() for HTTP and PolarSSL ssl_write() for HTTPS - */ -int httpd_response_write_header_finish(struct httpd_conn *conn); - -/** - * @brief This function is used to write HTTP response body data to connection. - * @param[in] conn: pointer to connection context - * @param[in] data: data to be written - * @param[in] data_len: data length - * @return return value of lwip socket write() for HTTP and PolarSSL ssl_write() for HTTPS - */ -int httpd_response_write_data(struct httpd_conn *conn, uint8_t *data, size_t data_len); - -/** - * @brief This function is used to write a default HTTP response for error of 400 Bad Request. - * @param[in] conn: pointer to connection context - * @param[in] msg: message write to HTTP response body. A default message will be used if NULL. - * @return None - */ -void httpd_response_bad_request(struct httpd_conn *conn, char *msg); - -/** - * @brief This function is used to write a default HTTP response for error of 401 Unauthorized. - * @param[in] conn: pointer to connection context - * @param[in] msg: message write to HTTP response body. A default message will be used if NULL. - * @return None - */ -void httpd_response_unauthorized(struct httpd_conn *conn, char *msg); - -/** - * @brief This function is used to write a default HTTP response for error of 404 Not Found. - * @param[in] conn: pointer to connection context - * @param[in] msg: message write to HTTP response body. A default message will be used if NULL. - * @return None - */ -void httpd_response_not_found(struct httpd_conn *conn, char *msg); - -/** - * @brief This function is used to write a default HTTP response for error of 405 Method Not Allowed. - * @param[in] conn: pointer to connection context - * @param[in] msg: message write to HTTP response body. A default message will be used if NULL. - * @return None - */ -void httpd_response_method_not_allowed(struct httpd_conn *conn, char *msg); - -/** - * @brief This function is used to write a default HTTP response for error of 429 Too Many Requests. - * @param[in] conn: pointer to connection context - * @param[in] msg: message write to HTTP response body. A default message will be used if NULL. - * @return None - */ -void httpd_response_too_many_requests(struct httpd_conn *conn, char *msg); - -/** - * @brief This function is used to write a default HTTP response for error of 500 Internal Server Error. - * @param[in] conn: pointer to connection context - * @param[in] msg: message write to HTTP response body. A default message will be used if NULL. - * @return None - */ -void httpd_response_internal_server_error(struct httpd_conn *conn, char *msg); - -/*\@}*/ - -#endif /* _HTTPD_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/httpd/httpd_tls.c b/Firmware/RTLGDB/USDK/component/common/network/httpd/httpd_tls.c deleted file mode 100644 index afbd662..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/httpd/httpd_tls.c +++ /dev/null @@ -1,372 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include "platform_stdlib.h" - -#include "httpd.h" - -#if (HTTPD_USE_TLS == HTTPD_TLS_POLARSSL) -#include "polarssl/ssl.h" -#include "polarssl/memory.h" -#include "polarssl/base64.h" - -struct httpd_tls { - ssl_context ctx; /*!< Context for PolarSSL */ -}; - -static x509_crt httpd_certs; /*!< Certificates of server and CA */ -static pk_context httpd_key; /*!< Private key of server */ - -static int _verify_func(void *data, x509_crt *crt, int depth, int *flags) -{ - char buf[1024]; - x509_crt_info(buf, sizeof(buf) - 1, "", crt); - - if(*flags) - printf("\n[HTTPD] ERROR: certificate verify\n%s\n", buf); - else - printf("\n[HTTPD] Certificate verified\n%s\n", buf); - - return 0; -} - -#elif (HTTPD_USE_TLS == HTTPD_TLS_MBEDTLS) -#include "mbedtls/ssl.h" -#include "mbedtls/platform.h" -#include "mbedtls/net_sockets.h" -#include "mbedtls/base64.h" - -struct httpd_tls { - mbedtls_ssl_context ctx; /*!< Context for mbedTLS */ - mbedtls_ssl_config conf; /*!< Configuration for mbedTLS */ -}; - -static mbedtls_x509_crt httpd_certs; /*!< Certificates of server and CA */ -static mbedtls_pk_context httpd_key; /*!< Private key of server */ - -static int _verify_func(void *data, mbedtls_x509_crt *crt, int depth, uint32_t *flags) -{ - char buf[1024]; - mbedtls_x509_crt_info(buf, sizeof(buf) - 1, "", crt); - - if(*flags) - printf("\n[HTTPD] ERROR: certificate verify\n%s\n", buf); - else - printf("\n[HTTPD] Certificate verified\n%s\n", buf); - - return 0; -} - -static void* _calloc_func(size_t nmemb, size_t size) -{ - size_t mem_size; - void *ptr = NULL; - - mem_size = nmemb * size; - ptr = pvPortMalloc(mem_size); - - if(ptr) - memset(ptr, 0, mem_size); - - return ptr; -} -#endif /* HTTPC_USE_POLARSSL */ - -static int _random_func(void *p_rng, unsigned char *output, size_t output_len) -{ - rtw_get_random_bytes(output, output_len); - return 0; -} - -int httpd_tls_setup_init(const char *server_cert, const char *server_key, const char *ca_certs) -{ -#if (HTTPD_USE_TLS == HTTPD_TLS_POLARSSL) - int ret = 0; - - memory_set_own(pvPortMalloc, vPortFree); - memset(&httpd_certs, 0, sizeof(x509_crt)); - memset(&httpd_key, 0, sizeof(pk_context)); - x509_crt_init(&httpd_certs); - pk_init(&httpd_key); - - // set server certificate for the first certificate - if((ret = x509_crt_parse(&httpd_certs, (const unsigned char *) server_cert, strlen(server_cert))) != 0) { - printf("\n[HTTPD] ERROR: x509_crt_parse %d\n", ret); - ret = -1; - goto exit; - } - - // set trusted ca certificates next to server certificate - if((ret = x509_crt_parse(&httpd_certs, (const unsigned char *) ca_certs, strlen(ca_certs))) != 0) { - printf("\n[HTTPD] ERROR: x509_crt_parse %d\n", ret); - ret = -1; - goto exit; - } - - if((ret = pk_parse_key(&httpd_key, (const unsigned char *) server_key, strlen(server_key), NULL, 0)) != 0) { - printf("\n[HTTPD] ERROR: pk_parse_key %d\n", ret); - ret = -1; - goto exit; - } - -exit: - if(ret) { - x509_crt_free(&httpd_certs); - pk_free(&httpd_key); - } - - return ret; -#elif (HTTPD_USE_TLS == HTTPD_TLS_MBEDTLS) - int ret = 0; - - mbedtls_platform_set_calloc_free(_calloc_func, vPortFree); - memset(&httpd_certs, 0, sizeof(mbedtls_x509_crt)); - memset(&httpd_key, 0, sizeof(mbedtls_pk_context)); - mbedtls_x509_crt_init(&httpd_certs); - mbedtls_pk_init(&httpd_key); - - // set server certificate for the first certificate - if((ret = mbedtls_x509_crt_parse(&httpd_certs, (const unsigned char *) server_cert, strlen(server_cert) + 1)) != 0) { - printf("\n[HTTPD] ERROR: mbedtls_x509_crt_parse %d\n", ret); - ret = -1; - goto exit; - } - - // set trusted ca certificates next to server certificate - if((ret = mbedtls_x509_crt_parse(&httpd_certs, (const unsigned char *) ca_certs, strlen(ca_certs) + 1)) != 0) { - printf("\n[HTTPD] ERROR: mbedtls_x509_crt_parse %d\n", ret); - ret = -1; - goto exit; - } - - if((ret = mbedtls_pk_parse_key(&httpd_key, (const unsigned char *) server_key, strlen(server_key) + 1, NULL, 0)) != 0) { - printf("\n[HTTPD] ERROR: mbedtls_pk_parse_key %d\n", ret); - ret = -1; - goto exit; - } - -exit: - if(ret) { - mbedtls_x509_crt_free(&httpd_certs); - mbedtls_pk_free(&httpd_key); - } - - return ret; -#endif -} - -void httpd_tls_setup_free(void) -{ -#if (HTTPD_USE_TLS == HTTPD_TLS_POLARSSL) - x509_crt_free(&httpd_certs); - pk_free(&httpd_key); -#elif (HTTPD_USE_TLS == HTTPD_TLS_MBEDTLS) - mbedtls_x509_crt_free(&httpd_certs); - mbedtls_pk_free(&httpd_key); -#endif -} - -void *httpd_tls_new_handshake(int *sock, uint8_t secure) -{ -#if (HTTPD_USE_TLS == HTTPD_TLS_POLARSSL) - int ret = 0; - struct httpd_tls *tls = NULL; - ssl_context *ssl = NULL; - - if((tls = (struct httpd_tls *) malloc(sizeof(struct httpd_tls))) != NULL) { - memset(tls, 0, sizeof(struct httpd_tls)); - ssl = &tls->ctx; - - if((ret = ssl_init(ssl)) != 0) { - printf("\n[HTTPD] ERROR: ssl_init %d\n", ret); - ret = -1; - goto exit; - } - - ssl_set_endpoint(ssl, SSL_IS_SERVER); - ssl_set_authmode(ssl, SSL_VERIFY_NONE); - ssl_set_rng(ssl, _random_func, NULL); - ssl_set_bio(ssl, net_recv, sock, net_send, sock); - ssl_set_ca_chain(ssl, httpd_certs.next, NULL, NULL); - - if(secure == HTTPD_SECURE_TLS_VERIFY) { - ssl_set_authmode(ssl, SSL_VERIFY_REQUIRED); - ssl_set_verify(ssl, _verify_func, NULL); - } - - if((ret = ssl_set_own_cert(ssl, &httpd_certs, &httpd_key)) != 0) { - printf("\n[HTTPD] ERROR: ssl_set_own_cert %d\n", ret); - ret = -1; - goto exit; - } - - if((ret = ssl_handshake(ssl)) != 0) { - printf("\n[HTTPD] ERROR: ssl_handshake %d\n", ret); - ret = -1; - goto exit; - } - else { - printf("\n[HTTPD] Use ciphersuite %s\n", ssl_get_ciphersuite(ssl)); - } - - } - else { - printf("\n[HTTPD] ERROR: httpd_malloc\n"); - ret = -1; - goto exit; - } - -exit: - if(ret && tls) { - ssl_close_notify(ssl); - ssl_free(ssl); - free(tls); - tls = NULL; - } - - return (void *) tls; -#elif (HTTPD_USE_TLS == HTTPD_TLS_MBEDTLS) - int ret = 0; - struct httpd_tls *tls = NULL; - mbedtls_ssl_context *ssl; - mbedtls_ssl_config *conf; - - if((tls = (struct httpd_tls *) malloc(sizeof(struct httpd_tls))) != NULL) { - memset(tls, 0, sizeof(struct httpd_tls)); - ssl = &tls->ctx; - conf = &tls->conf; - - mbedtls_ssl_init(ssl); - mbedtls_ssl_config_init(conf); - - if((ret = mbedtls_ssl_config_defaults(conf, - MBEDTLS_SSL_IS_SERVER, - MBEDTLS_SSL_TRANSPORT_STREAM, - MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { - - printf("\n[HTTPD] ERROR: mbedtls_ssl_config_defaults %d\n", ret); - ret = -1; - goto exit; - } - - mbedtls_ssl_conf_authmode(conf, MBEDTLS_SSL_VERIFY_NONE); - mbedtls_ssl_conf_rng(conf, _random_func, NULL); - mbedtls_ssl_conf_ca_chain(conf, httpd_certs.next, NULL); - - if(secure == HTTPD_SECURE_TLS_VERIFY) { - mbedtls_ssl_conf_authmode(conf, MBEDTLS_SSL_VERIFY_REQUIRED); - mbedtls_ssl_conf_verify(conf, _verify_func, NULL); - } - - if((ret = mbedtls_ssl_conf_own_cert(conf, &httpd_certs, &httpd_key)) != 0) { - printf("\n[HTTPD] ERROR: mbedtls_ssl_conf_own_cert %d\n", ret); - ret = -1; - goto exit; - } - - if((ret = mbedtls_ssl_setup(ssl, conf)) != 0) { - printf("\n[HTTPD] ERROR: mbedtls_ssl_setup %d\n", ret); - ret = -1; - goto exit; - } - - mbedtls_ssl_set_bio(ssl, sock, mbedtls_net_send, mbedtls_net_recv, NULL); - - if((ret = mbedtls_ssl_handshake(ssl)) != 0) { - printf("\n[HTTPD] ERROR: mbedtls_ssl_handshake %d\n", ret); - ret = -1; - goto exit; - } - else { - printf("\n[HTTPD] Use ciphersuite %s\n", mbedtls_ssl_get_ciphersuite(ssl)); - } - - } - else { - printf("\n[HTTPD] ERROR: httpd_malloc\n"); - ret = -1; - goto exit; - } - -exit: - if(ret && tls) { - mbedtls_ssl_close_notify(ssl); - mbedtls_ssl_free(ssl); - mbedtls_ssl_config_free(conf); - free(tls); - tls = NULL; - } - - return (void *) tls; -#endif -} - -void httpd_tls_free(void *tls_in) -{ - struct httpd_tls *tls = (struct httpd_tls *) tls_in; - -#if (HTTPD_USE_TLS == HTTPD_TLS_POLARSSL) - ssl_free(&tls->ctx); - free(tls); -#elif (HTTPD_USE_TLS == HTTPD_TLS_MBEDTLS) - mbedtls_ssl_free(&tls->ctx); - mbedtls_ssl_config_free(&tls->conf); - free(tls); -#endif -} - -void httpd_tls_close(void *tls_in) -{ - struct httpd_tls *tls = (struct httpd_tls *) tls_in; - -#if (HTTPD_USE_TLS == HTTPD_TLS_POLARSSL) - ssl_close_notify(&tls->ctx); -#elif (HTTPD_USE_TLS == HTTPD_TLS_MBEDTLS) - mbedtls_ssl_close_notify(&tls->ctx); -#endif -} - -int httpd_tls_read(void *tls_in, uint8_t *buf, size_t buf_len) -{ - struct httpd_tls *tls = (struct httpd_tls *) tls_in; - -#if (HTTPD_USE_TLS == HTTPD_TLS_POLARSSL) - return ssl_read(&tls->ctx, buf, buf_len); -#elif (HTTPD_USE_TLS == HTTPD_TLS_MBEDTLS) - return mbedtls_ssl_read(&tls->ctx, buf, buf_len); -#endif -} - -int httpd_tls_write(void *tls_in, uint8_t *buf, size_t buf_len) -{ - struct httpd_tls *tls = (struct httpd_tls *) tls_in; - -#if (HTTPD_USE_TLS == HTTPD_TLS_POLARSSL) - return ssl_write(&tls->ctx, buf, buf_len); -#elif (HTTPD_USE_TLS == HTTPD_TLS_MBEDTLS) - return mbedtls_ssl_write(&tls->ctx, buf, buf_len); -#endif -} - -int httpd_base64_encode(uint8_t *data, size_t data_len, char *base64_buf, size_t buf_len) -{ -#if (HTTPD_USE_TLS == HTTPD_TLS_POLARSSL) - int ret = 0; - - if((ret = base64_encode(base64_buf, &buf_len, data, data_len)) != 0) { - printf("\n[HTTPD] ERROR: base64_encode %d\n", ret); - ret = -1; - } - - return ret; -#elif (HTTPD_USE_TLS == HTTPD_TLS_MBEDTLS) - int ret = 0; - size_t output_len = 0; - - if((ret = mbedtls_base64_encode(base64_buf, buf_len, &output_len, data, data_len)) != 0) { - printf("\n[HTTPD] ERROR: mbedtls_base64_encode %d\n", ret); - ret = -1; - } - - return ret; -#endif -} diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/bpstruct.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/bpstruct.h deleted file mode 100644 index 177758c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/bpstruct.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#if defined(__IAR_SYSTEMS_ICC__) -#pragma pack(1) -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/cc.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/cc.h deleted file mode 100644 index be882d9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/cc.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __CC_H__ -#define __CC_H__ - -#include "cpu.h" - -typedef unsigned char u8_t; -typedef signed char s8_t; -typedef unsigned short u16_t; -typedef signed short s16_t; -typedef unsigned int u32_t; -typedef signed long s32_t; -typedef u32_t mem_ptr_t; -typedef int sys_prot_t; - -#define U16_F "d" -#define S16_F "d" -#define X16_F "x" -#define U32_F "d" -#define S32_F "d" -#define X32_F "x" -#define SZT_F "uz" - -/* define compiler specific symbols */ -#if defined (__ICCARM__) -#if !defined (__IARSTDLIB__) -#define _STRING -#ifndef memcmp -#define memcmp(dst, src, sz) _memcmp(dst, src, sz) -#endif -#ifndef memset -#define memset(dst, val, sz) _memset(dst, val, sz) -#endif -#ifndef memcpy -#define memcpy(dst, src, sz) _memcpy(dst, src, sz) -#endif -#endif // __IARSTDLIB__ - -#define PACK_STRUCT_BEGIN -#define PACK_STRUCT_STRUCT -#define PACK_STRUCT_END -#define PACK_STRUCT_FIELD(x) x -#define PACK_STRUCT_USE_INCLUDES - -#elif defined (__CC_ARM) - -#define PACK_STRUCT_BEGIN __packed -#define PACK_STRUCT_STRUCT -#define PACK_STRUCT_END -#define PACK_STRUCT_FIELD(x) x - -#elif defined (__GNUC__) - -#define PACK_STRUCT_BEGIN -#define PACK_STRUCT_STRUCT __attribute__ ((__packed__)) -#define PACK_STRUCT_END -#define PACK_STRUCT_FIELD(x) x - -#elif defined (__TASKING__) - -#define PACK_STRUCT_BEGIN -#define PACK_STRUCT_STRUCT -#define PACK_STRUCT_END -#define PACK_STRUCT_FIELD(x) x - -#endif - -#define LWIP_PLATFORM_ASSERT(x) //do { if(!(x)) while(1); } while(0) - -#endif /* __CC_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/cpu.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/cpu.h deleted file mode 100644 index 06c2345..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/cpu.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __CPU_H__ -#define __CPU_H__ - #ifndef BYTE_ORDER - #define BYTE_ORDER LITTLE_ENDIAN - #endif -#endif /* __CPU_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/epstruct.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/epstruct.h deleted file mode 100644 index 1e1a049..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/epstruct.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#if defined(__IAR_SYSTEMS_ICC__) -#pragma pack() -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/init.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/init.h deleted file mode 100644 index e622c73..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/init.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __ARCH_INIT_H__ -#define __ARCH_INIT_H__ - -#define TCPIP_INIT_DONE(arg) tcpip_init_done(arg) - -void tcpip_init_done(void *); -int wait_for_tcpip_init(void); - -#endif /* __ARCH_INIT_H__ */ - - - - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/lib.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/lib.h deleted file mode 100644 index 378f25b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/lib.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LIB_H__ -#define __LIB_H__ - -#include - - -#endif /* __LIB_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/perf.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/perf.h deleted file mode 100644 index 334d42a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/perf.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __PERF_H__ -#define __PERF_H__ - -#define PERF_START /* null definition */ -#define PERF_STOP(x) /* null definition */ - -#endif /* __PERF_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/sys_arch.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/sys_arch.h deleted file mode 100644 index 83d0c08..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/arch/sys_arch.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __SYS_RTXC_H__ -#define __SYS_RTXC_H__ - -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" -#include "semphr.h" - -#define SYS_MBOX_NULL (xQueueHandle)0 -#define SYS_SEM_NULL (xSemaphoreHandle)0 -#define SYS_DEFAULT_THREAD_STACK_DEPTH configMINIMAL_STACK_SIZE - -typedef xSemaphoreHandle sys_sem_t; -typedef xQueueHandle sys_mbox_t; -typedef xTaskHandle sys_thread_t; - -typedef struct _sys_arch_state_t -{ - // Task creation data. - char cTaskName[configMAX_TASK_NAME_LEN]; - unsigned short nStackDepth; - unsigned short nTaskCount; -} sys_arch_state_t; - - - -//extern sys_arch_state_t s_sys_arch_state; - -//void sys_set_default_state(); -//void sys_set_state(signed char *pTaskName, unsigned short nStackSize); - -/* Message queue constants. */ -#define archMESG_QUEUE_LENGTH ( 6 ) -#endif /* __SYS_RTXC_H__ */ - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/freertos/ethernetif.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/freertos/ethernetif.c deleted file mode 100644 index 71e6f18..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/freertos/ethernetif.c +++ /dev/null @@ -1,388 +0,0 @@ -/** - * @file - * Ethernet Interface Skeleton - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -/* - * This file is a skeleton for developing Ethernet network interface - * drivers for lwIP. Add code to the low_level functions and do a - * search-and-replace for the word "ethernetif" to replace it with - * something that better describes your network interface. - */ - -#include "lwip/opt.h" -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/pbuf.h" -#include "lwip/sys.h" -#include "lwip/tcpip.h" -#include "lwip/icmp.h" -#include "lwip/lwip_timers.h" -#include "netif/etharp.h" -#include "err.h" -#include "ethernetif.h" -#include "queue.h" -#include "lwip_netconf.h" - -//#include "lwip/ethip6.h" //Add for ipv6 - -#include -#include "platform_opts.h" - -#if CONFIG_ETHERNET -#include "ethernet_mii/ethernet_mii.h" -#endif - -#if CONFIG_WLAN -#include -#endif - -#if CONFIG_INIC_HOST -#include "freertos/inic_intf.h" -#endif - -#define netifMTU (1500) -#define netifINTERFACE_TASK_STACK_SIZE ( 350 ) -#define netifINTERFACE_TASK_PRIORITY ( configMAX_PRIORITIES - 1 ) -#define netifGUARD_BLOCK_TIME ( 250 ) -/* The time to block waiting for input. */ -#define emacBLOCK_TIME_WAITING_FOR_INPUT ( ( portTickType ) 100 ) - - -#ifdef CONFIG_CONCURRENT_MODE -#define IF2NAME0 'r' -#define IF2NAME1 '2' -#endif - -static void arp_timer(void *arg); - -#if LWIP_NETIF_HOSTNAME -char lwip_host_name[NET_IF_NUM][LWIP_NETIF_HOSTNAME_SIZE] = { - { DEF_HOSTNAME "0" }, - { DEF_HOSTNAME "1" } -#if NET_IF_NUM > 2 - ,{ DEF_HOSTNAME "2" } -#endif -}; -#endif - -/** - * In this function, the hardware should be initialized. - * Called from ethernetif_init(). - * - * @param netif the already initialized lwip network interface structure - * for this ethernetif - */ - -static void low_level_init(struct netif *netif) -{ - - /* set netif MAC hardware address length */ - netif->hwaddr_len = ETHARP_HWADDR_LEN; - - /* set netif maximum transfer unit */ - netif->mtu = 1500; - - /* Accept broadcast address and ARP traffic */ - netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP; - - /* Wlan interface is initialized later */ -} - - -/** - * This function should do the actual transmission of the packet. The packet is - * contained in the pbuf that is passed to the function. This pbuf - * might be chained. - * - * @param netif the lwip network interface structure for this ethernetif - * @param p the MAC packet to send (e.g. IP packet including MAC addresses and type) - * @return ERR_OK if the packet could be sent - * an err_t value if the packet couldn't be sent - * - * @note Returning ERR_MEM here if a DMA queue of your MAC is full can lead to - * strange results. You might consider waiting for space in the DMA queue - * to become availale since the stack doesn't retry to send a packet - * dropped because of memory failure (except for the TCP timers). - */ - -static err_t low_level_output(struct netif *netif, struct pbuf *p) -{ - /* Refer to eCos lwip eth_drv_send() */ - struct eth_drv_sg sg_list[MAX_ETH_DRV_SG]; - int sg_len = 0; - struct pbuf *q; -#if CONFIG_WLAN - if(!rltk_wlan_running(netif_get_idx(netif))) - return ERR_IF; -#endif - for (q = p; q != NULL && sg_len < MAX_ETH_DRV_SG; q = q->next) { - sg_list[sg_len].buf = (unsigned int) q->payload; - sg_list[sg_len++].len = q->len; - } - - if (sg_len) { -#if CONFIG_WLAN - if (rltk_wlan_send(netif_get_idx(netif), sg_list, sg_len, p->tot_len) == 0) -#elif CONFIG_INIC_HOST - if(rltk_inic_send( sg_list, sg_len, p->tot_len) == 0) -#else - if(1) -#endif - return ERR_OK; - else - return ERR_BUF; // return a non-fatal error - } - return ERR_OK; -} - -#if CONFIG_ETHERNET -/*for ethernet mii interface*/ -static err_t low_level_output_mii(struct netif *netif, struct pbuf *p) -{ - struct eth_drv_sg sg_list[MAX_ETH_DRV_SG]; - int sg_len = 0; - struct pbuf *q; - for (q = p; q != NULL && sg_len < MAX_ETH_DRV_SG; q = q->next) { - sg_list[sg_len].buf = (unsigned int) q->payload; - sg_list[sg_len++].len = q->len; - } - if (sg_len) { - if(rltk_mii_send(sg_list, sg_len, p->tot_len) == 0) - return ERR_OK; - else - return ERR_BUF; // return a non-fatal error - } - return ERR_OK; -} -#endif - -/** - * Should allocate a pbuf and transfer the bytes of the incoming - * packet from the interface into the pbuf. - * - * @param netif the lwip network interface structure for this ethernetif - * @return a pbuf filled with the received packet (including MAC header) - * NULL on memory error - */ -//static struct pbuf * low_level_input(struct netif *netif){} - - -/** - * This function is the ethernetif_input task, it is processed when a packet - * is ready to be read from the interface. It uses the function low_level_input() - * that should handle the actual reception of bytes from the network - * interface. Then the type of the received packet is determined and - * the appropriate input function is called. - * - * @param netif the lwip network interface structure for this ethernetif - */ -//void ethernetif_input( void * pvParameters ) - - -/* Refer to eCos eth_drv_recv to do similarly in ethernetif_input */ -void ethernetif_recv(struct netif *netif, int total_len) -{ - struct eth_drv_sg sg_list[MAX_ETH_DRV_SG]; - struct pbuf *p, *q; - int sg_len = 0; -#if CONFIG_WLAN - if(!rltk_wlan_running(netif_get_idx(netif))) - return; -#endif - if ((total_len > MAX_ETH_MSG) || (total_len < 0)) - total_len = MAX_ETH_MSG; - - // Allocate buffer to store received packet - p = pbuf_alloc(PBUF_RAW, total_len, PBUF_POOL); - if (p == NULL) { - printf("\n\rCannot allocate pbuf to receive packet"); - return; - } - - // Create scatter list - for (q = p; q != NULL && sg_len < MAX_ETH_DRV_SG; q = q->next) { - sg_list[sg_len].buf = (unsigned int) q->payload; - sg_list[sg_len++].len = q->len; - } - - // Copy received packet to scatter list from wrapper rx skb - //printf("\n\rwlan:%c: Recv sg_len: %d, tot_len:%d", netif->name[1],sg_len, total_len); -#if CONFIG_WLAN - rltk_wlan_recv(netif_get_idx(netif), sg_list, sg_len); -#elif CONFIG_INIC_HOST - rltk_inic_recv(sg_list, sg_len); -#endif - // Pass received packet to the interface - if (ERR_OK != netif->input(p, netif)) - pbuf_free(p); - -} - -#if CONFIG_ETHERNET -void ethernetif_mii_recv(struct netif *netif, int total_len) -{ - struct eth_drv_sg sg_list[MAX_ETH_DRV_SG]; - struct pbuf *p, *q; - int sg_len = 0; - - if ((total_len > MAX_ETH_MSG) || (total_len < 0)) - total_len = MAX_ETH_MSG; - - // Allocate buffer to store received packet - p = pbuf_alloc(PBUF_RAW, total_len, PBUF_POOL); - if (p == NULL) { - printf("Cannot allocate pbuf to receive packet\n"); - return; - } - - // Create scatter list - for (q = p; q != NULL && sg_len < MAX_ETH_DRV_SG; q = q->next) { - sg_list[sg_len].buf = (unsigned int) q->payload; - sg_list[sg_len++].len = q->len; - } - rltk_mii_recv(sg_list, sg_len); - - // Pass received packet to the interface - if (ERR_OK != netif->input(p, netif)) - pbuf_free(p); - -} -#endif -/** - * Should be called at the beginning of the program to set up the - * network interface. It calls the function low_level_init() to do the - * actual setup of the hardware. - * - * This function should be passed as a parameter to netif_add(). - * - * @param netif the lwip network interface structure for this ethernetif - * @return ERR_OK if the loopif is initialized - * ERR_MEM if private data couldn't be allocated - * any other err_t on error - */ -err_t ethernetif_init(struct netif *netif) -{ - LWIP_ASSERT("netif != NULL", (netif != NULL)); - -#if LWIP_NETIF_HOSTNAME - /* Initialize interface hostname */ - if(netif->name[1] == '0') - netif->hostname = lwip_host_name[0]; - else if(netif->name[1] == '1') - netif->hostname = lwip_host_name[1]; -#endif /* LWIP_NETIF_HOSTNAME */ - - netif->output = etharp_output; -//#if LWIP_IPV6 -// netif->output_ip6 = ethip6_output; -//#endif - netif->linkoutput = low_level_output; - - /* initialize the hardware */ - low_level_init(netif); - - etharp_init(); - - return ERR_OK; -} - -#if CONFIG_ETHERNET -err_t ethernetif_mii_init(struct netif *netif) -{ - LWIP_ASSERT("netif != NULL", (netif != NULL)); - -#if LWIP_NETIF_HOSTNAME - netif->hostname = lwip_host_name[2]; -#endif /* LWIP_NETIF_HOSTNAME */ - - netif->output = etharp_output; -//#if LWIP_IPV6 -// netif->output_ip6 = ethip6_output; -//#endif - netif->linkoutput = low_level_output_mii; - - /* initialize the hardware */ - low_level_init(netif); - - etharp_init(); - - return ERR_OK; -} -#endif - -static void arp_timer(void *arg) -{ - etharp_tmr(); - sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL); -} - -/* - * For FreeRTOS tickless - */ -int lwip_tickless_used = 0; - -int arp_timeout_exist(void) -{ - struct sys_timeouts *timeouts; - struct sys_timeo *t; - - timeouts = sys_arch_timeouts(); - - for(t = timeouts->next; t != NULL;t = t->next) - if(t->h == arp_timer) - return 1; - - return 0; -} - -//Called by rltk_wlan_PRE_SLEEP_PROCESSING() -void lwip_PRE_SLEEP_PROCESSING(void) -{ - if(arp_timeout_exist()) { - tcpip_untimeout(arp_timer, NULL); - } - lwip_tickless_used = 1; -} - -//Called in ips_leave() path, support tickless when wifi power wakeup due to ioctl or deinit -void lwip_POST_SLEEP_PROCESSING(void) -{ - if(lwip_tickless_used) { - tcpip_timeout(ARP_TMR_INTERVAL, arp_timer, NULL); - } -} - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/freertos/ethernetif.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/freertos/ethernetif.h deleted file mode 100644 index 67f1401..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/freertos/ethernetif.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef __ETHERNETIF_H__ -#define __ETHERNETIF_H__ - - -#include "autoconf.h" -#include "lwip/err.h" -#include "lwip/netif.h" - -#if LWIP_NETIF_HOSTNAME -#ifndef LWIP_NETIF_HOSTNAME_SIZE -#define LWIP_NETIF_HOSTNAME_SIZE 16 -#endif -extern char lwip_host_name[NET_IF_NUM][LWIP_NETIF_HOSTNAME_SIZE]; -#endif - -//----- ------------------------------------------------------------------ -// Ethernet Buffer -//----- ------------------------------------------------------------------ -struct eth_drv_sg { - unsigned int buf; - unsigned int len; -}; - -#define MAX_ETH_DRV_SG 32 -#define MAX_ETH_MSG 1540 - -void ethernetif_recv(struct netif *netif, int total_len); -err_t ethernetif_init(struct netif *netif); -err_t ethernetif_mii_init(struct netif *netif); -void ethernetif_mii_recv(struct netif *netif, int total_len); - -void lwip_PRE_SLEEP_PROCESSING(void); -void lwip_POST_SLEEP_PROCESSING(void); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/freertos/sys_arch.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/freertos/sys_arch.c deleted file mode 100644 index 5e5b3b2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/freertos/sys_arch.c +++ /dev/null @@ -1,632 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -/* lwIP includes. */ -#include "lwip/debug.h" -#include "lwip/def.h" -#include "lwip/sys.h" -#include "lwip/mem.h" -#include "lwip/stats.h" -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" -#include "lwip/lwip_timers.h" -#include "autoconf.h" -#include "tcm_heap.h" - -xTaskHandle xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION; -extern void * vTaskGetCurrentTCB( void ); -struct timeoutlist -{ - struct sys_timeouts timeouts; - xTaskHandle pid; -}; - -/* This is the number of threads that can be started with sys_thread_new() */ -#define SYS_THREAD_MAX 6 - -static struct timeoutlist s_timeoutlist[SYS_THREAD_MAX]; -static uint16_t s_nextthread = 0; - - -/*-----------------------------------------------------------------------------------*/ -// Creates an empty mailbox. -err_t sys_mbox_new(sys_mbox_t *mbox, int size) -{ - (void ) size; - - *mbox = xQueueCreate( size, sizeof( void * ) ); - -#if SYS_STATS - ++lwip_stats.sys.mbox.used; - if (lwip_stats.sys.mbox.max < lwip_stats.sys.mbox.used) { - lwip_stats.sys.mbox.max = lwip_stats.sys.mbox.used; - } -#endif /* SYS_STATS */ - if (*mbox == NULL) - return ERR_MEM; - - return ERR_OK; -} - -/*-----------------------------------------------------------------------------------*/ -/* - Deallocates a mailbox. If there are messages still present in the - mailbox when the mailbox is deallocated, it is an indication of a - programming error in lwIP and the developer should be notified. -*/ -void sys_mbox_free(sys_mbox_t *mbox) -{ - if( uxQueueMessagesWaiting( *mbox ) ) - { - /* Line for breakpoint. Should never break here! */ - portNOP(); -#if SYS_STATS - lwip_stats.sys.mbox.err++; -#endif /* SYS_STATS */ - - // TODO notify the user of failure. - } - - vQueueDelete( *mbox ); - -#if SYS_STATS - --lwip_stats.sys.mbox.used; -#endif /* SYS_STATS */ -} - -/*-----------------------------------------------------------------------------------*/ -// Posts the "msg" to the mailbox. -void sys_mbox_post(sys_mbox_t *mbox, void *data) -{ - while ( xQueueSendToBack(*mbox, &data, portMAX_DELAY ) != pdTRUE ){} -} - - -/*-----------------------------------------------------------------------------------*/ -// Try to post the "msg" to the mailbox. -err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg) -{ -err_t result; - - if ( xQueueSend( *mbox, &msg, 0 ) == pdPASS ) - { - result = ERR_OK; - } - else { - // could not post, queue must be full - result = ERR_MEM; - -#if SYS_STATS - lwip_stats.sys.mbox.err++; -#endif /* SYS_STATS */ - - } - - return result; -} - -/*-----------------------------------------------------------------------------------*/ -/* - Blocks the thread until a message arrives in the mailbox, but does - not block the thread longer than "timeout" milliseconds (similar to - the sys_arch_sem_wait() function). The "msg" argument is a result - parameter that is set by the function (i.e., by doing "*msg = - ptr"). The "msg" parameter maybe NULL to indicate that the message - should be dropped. - - The return values are the same as for the sys_arch_sem_wait() function: - Number of milliseconds spent waiting or SYS_ARCH_TIMEOUT if there was a - timeout. - - Note that a function with a similar name, sys_mbox_fetch(), is - implemented by lwIP. -*/ -uint32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, uint32_t timeout) -{ -void *dummyptr; -portTickType StartTime, EndTime, Elapsed; - - StartTime = xTaskGetTickCount(); - - if ( msg == NULL ) - { - msg = &dummyptr; - } - - if ( timeout != 0 ) - { - if ( pdTRUE == xQueueReceive( *mbox, &(*msg), timeout / portTICK_RATE_MS ) ) - { - EndTime = xTaskGetTickCount(); - Elapsed = (EndTime - StartTime) * portTICK_RATE_MS; - - return ( Elapsed ); - } - else // timed out blocking for message - { - *msg = NULL; - - return SYS_ARCH_TIMEOUT; - } - } - else // block forever for a message. - { - while( pdTRUE != xQueueReceive( *mbox, &(*msg), portMAX_DELAY ) ){} // time is arbitrary - EndTime = xTaskGetTickCount(); - Elapsed = (EndTime - StartTime) * portTICK_RATE_MS; - - return ( Elapsed ); // return time blocked TODO test - } -} - -/*-----------------------------------------------------------------------------------*/ -/* - Similar to sys_arch_mbox_fetch, but if message is not ready immediately, we'll - return with SYS_MBOX_EMPTY. On success, 0 is returned. -*/ -uint32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg) -{ -void *dummyptr; - - if ( msg == NULL ) - { - msg = &dummyptr; - } - - if ( pdTRUE == xQueueReceive( *mbox, &(*msg), 0 ) ) - { - return ERR_OK; - } - else - { - return SYS_MBOX_EMPTY; - } -} -/*----------------------------------------------------------------------------------*/ -int sys_mbox_valid(sys_mbox_t *mbox) -{ - if (*mbox == SYS_MBOX_NULL) - return 0; - else - return 1; -} -/*-----------------------------------------------------------------------------------*/ -void sys_mbox_set_invalid(sys_mbox_t *mbox) -{ - *mbox = SYS_MBOX_NULL; -} - -/*-----------------------------------------------------------------------------------*/ -// Creates a new semaphore. The "count" argument specifies -// the initial state of the semaphore. -err_t sys_sem_new(sys_sem_t *sem, uint8_t count) -{ - vSemaphoreCreateBinary(*sem ); - if(*sem == NULL) - { - -#if SYS_STATS - ++lwip_stats.sys.sem.err; -#endif /* SYS_STATS */ - return ERR_MEM; - } - - if(count == 0) // Means it can't be taken - { - xSemaphoreTake(*sem,1); - } - -#if SYS_STATS - ++lwip_stats.sys.sem.used; - if (lwip_stats.sys.sem.max < lwip_stats.sys.sem.used) { - lwip_stats.sys.sem.max = lwip_stats.sys.sem.used; - } -#endif /* SYS_STATS */ - - return ERR_OK; -} - -/*-----------------------------------------------------------------------------------*/ -/* - Blocks the thread while waiting for the semaphore to be - signaled. If the "timeout" argument is non-zero, the thread should - only be blocked for the specified time (measured in - milliseconds). - - If the timeout argument is non-zero, the return value is the number of - milliseconds spent waiting for the semaphore to be signaled. If the - semaphore wasn't signaled within the specified time, the return value is - SYS_ARCH_TIMEOUT. If the thread didn't have to wait for the semaphore - (i.e., it was already signaled), the function may return zero. - - Notice that lwIP implements a function with a similar name, - sys_sem_wait(), that uses the sys_arch_sem_wait() function. -*/ -uint32_t sys_arch_sem_wait(sys_sem_t *sem, uint32_t timeout) -{ -portTickType StartTime, EndTime, Elapsed; - - StartTime = xTaskGetTickCount(); - - if( timeout != 0) - { - if( xSemaphoreTake( *sem, timeout / portTICK_RATE_MS ) == pdTRUE ) - { - EndTime = xTaskGetTickCount(); - Elapsed = (EndTime - StartTime) * portTICK_RATE_MS; - - return (Elapsed); // return time blocked TODO test - } - else - { - return SYS_ARCH_TIMEOUT; - } - } - else // must block without a timeout - { - while( xSemaphoreTake(*sem, portMAX_DELAY) != pdTRUE){} - EndTime = xTaskGetTickCount(); - Elapsed = (EndTime - StartTime) * portTICK_RATE_MS; - - return ( Elapsed ); // return time blocked - - } -} - -/*-----------------------------------------------------------------------------------*/ -// Signals a semaphore -void sys_sem_signal(sys_sem_t *sem) -{ - xSemaphoreGive(*sem); -} - -/*-----------------------------------------------------------------------------------*/ -// Deallocates a semaphore -void sys_sem_free(sys_sem_t *sem) -{ -#if SYS_STATS - --lwip_stats.sys.sem.used; -#endif /* SYS_STATS */ - - vQueueDelete(*sem); -} -/*-----------------------------------------------------------------------------------*/ -int sys_sem_valid(sys_sem_t *sem) -{ - if (*sem == SYS_SEM_NULL) - return 0; - else - return 1; -} - -/*-----------------------------------------------------------------------------------*/ -void sys_sem_set_invalid(sys_sem_t *sem) -{ - *sem = SYS_SEM_NULL; -} - -/*-----------------------------------------------------------------------------------*/ -// Initialize sys arch -void sys_init(void) -{ - int i; - - // Initialize the the per-thread sys_timeouts structures - // make sure there are no valid pids in the list - for(i = 0; i < SYS_THREAD_MAX; i++) - { - s_timeoutlist[i].pid = 0; - s_timeoutlist[i].timeouts.next = NULL; - } - - // keep track of how many threads have been created - s_nextthread = 0; -} - -/*-----------------------------------------------------------------------------------*/ -/* - Returns a pointer to the per-thread sys_timeouts structure. In lwIP, - each thread has a list of timeouts which is represented as a linked - list of sys_timeout structures. The sys_timeouts structure holds a - pointer to a linked list of timeouts. This function is called by - the lwIP timeout scheduler and must not return a NULL value. - - In a single threaded sys_arch implementation, this function will - simply return a pointer to a global sys_timeouts variable stored in - the sys_arch module. -*/ -struct sys_timeouts *sys_arch_timeouts(void) -{ -int i; -xTaskHandle pid; -struct timeoutlist *tl; - - pid = xTaskGetCurrentTaskHandle(); - - for(i = 0; i < s_nextthread; i++) - { - tl = &(s_timeoutlist[i]); - if(tl->pid == pid) - { - return &(tl->timeouts); - } - } - // Error - return NULL; -} -/*-----------------------------------------------------------------------------------*/ - /* Mutexes*/ -/*-----------------------------------------------------------------------------------*/ -/*-----------------------------------------------------------------------------------*/ -#if LWIP_COMPAT_MUTEX == 0 -/* Create a new mutex*/ -err_t sys_mutex_new(sys_mutex_t *mutex) { - - *mutex = xSemaphoreCreateMutex(); - if(*mutex == NULL) - { -#if SYS_STATS - ++lwip_stats.sys.mutex.err; -#endif /* SYS_STATS */ - return ERR_MEM; - } - -#if SYS_STATS - ++lwip_stats.sys.mutex.used; - if (lwip_stats.sys.mutex.max < lwip_stats.sys.mutex.used) { - lwip_stats.sys.mutex.max = lwip_stats.sys.mutex.used; - } -#endif /* SYS_STATS */ - return ERR_OK; -} -/*-----------------------------------------------------------------------------------*/ -/* Deallocate a mutex*/ -void sys_mutex_free(sys_mutex_t *mutex) -{ -#if SYS_STATS - --lwip_stats.sys.mutex.used; -#endif /* SYS_STATS */ - - vQueueDelete(*mutex); -} -/*-----------------------------------------------------------------------------------*/ -/* Lock a mutex*/ -void sys_mutex_lock(sys_mutex_t *mutex) -{ - sys_arch_sem_wait(*mutex, 0); -} - -/*-----------------------------------------------------------------------------------*/ -/* Unlock a mutex*/ -void sys_mutex_unlock(sys_mutex_t *mutex) -{ - xSemaphoreGive(*mutex); -} -#endif /*LWIP_COMPAT_MUTEX*/ - -/*-----------------------------------------------------------------------------------*/ -// TODO -/*-----------------------------------------------------------------------------------*/ -/* - Starts a new thread with priority "prio" that will begin its execution in the - function "thread()". The "arg" argument will be passed as an argument to the - thread() function. The id of the new thread is returned. Both the id and - the priority are system dependent. -*/ -#if 0 -sys_thread_t sys_thread_new_tcm(const char *name, lwip_thread_fn thread , void *arg, int stacksize, int prio) -{ -xTaskHandle CreatedTask; -int result; - - if ( s_nextthread < SYS_THREAD_MAX ) - { - vPortEnterCritical(); -#if CONFIG_USE_TCM_HEAP - { - void *stack_addr = tcm_heap_malloc(stacksize * sizeof(int)); - - result = xTaskGenericCreate( - thread, - ( signed portCHAR * ) name, - stacksize, - arg, - prio, - &CreatedTask, - stack_addr, - NULL); - } -#else - result = xTaskCreate( thread, ( signed portCHAR * ) name, stacksize, arg, prio, &CreatedTask ); -#endif - - // For each task created, store the task handle (pid) in the timers array. - // This scheme doesn't allow for threads to be deleted - s_timeoutlist[s_nextthread++].pid = CreatedTask; - vPortExitCritical(); - - if(result == pdPASS) - { - return CreatedTask; - } - else - { - return NULL; - } - } - else - { - return NULL; - } -} -#endif -/*-----------------------------------------------------------------------------------*/ -// TODO -/*-----------------------------------------------------------------------------------*/ -/* - Starts a new thread with priority "prio" that will begin its execution in the - function "thread()". The "arg" argument will be passed as an argument to the - thread() function. The id of the new thread is returned. Both the id and - the priority are system dependent. -*/ -sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread , void *arg, int stacksize, int prio) -{ -xTaskHandle CreatedTask; -int result; - - if ( s_nextthread < SYS_THREAD_MAX ) - { - vPortEnterCritical(); - result = xTaskCreate( thread, ( signed portCHAR * ) name, stacksize, arg, prio, &CreatedTask ); - - // For each task created, store the task handle (pid) in the timers array. - // This scheme doesn't allow for threads to be deleted - s_timeoutlist[s_nextthread++].pid = CreatedTask; - vPortExitCritical(); - - if(result == pdPASS) - { - return CreatedTask; - } - else - { - return NULL; - } - } - else - { - return NULL; - } -} - -int sys_thread_delete(xTaskHandle pid) -{ - int i, isFind = 0; - struct timeoutlist *tl, *tend = NULL; - - pid = (( pid == NULL)?(xTaskHandle) vTaskGetCurrentTCB() : pid); - - if (s_nextthread) - { - vPortEnterCritical(); - - tend = &(s_timeoutlist[s_nextthread-1]);//the last one - for(i = 0; i < s_nextthread; i++) - { - tl = &(s_timeoutlist[i]); - if(tl->pid == pid) - {//find the task, exchange with the last one - memcpy(tl, tend, sizeof(struct timeoutlist)); - memset(tend, 0, sizeof(struct timeoutlist)); - s_nextthread --; - isFind = 1; - break; - } - } - - if (isFind) { - vTaskDelete( pid); - } - - vPortExitCritical(); - - if (isFind) - { - return pdPASS; - } - else - { - return pdFAIL; - } - } - else - { - return pdFAIL; - } -} - -/* - This optional function does a "fast" critical region protection and returns - the previous protection level. This function is only called during very short - critical regions. An embedded system which supports ISR-based drivers might - want to implement this function by disabling interrupts. Task-based systems - might want to implement this by using a mutex or disabling tasking. This - function should support recursive calls from the same task or interrupt. In - other words, sys_arch_protect() could be called while already protected. In - that case the return value indicates that it is already protected. - - sys_arch_protect() is only required if your port is supporting an operating - system. -*/ -sys_prot_t sys_arch_protect(void) -{ - vPortEnterCritical(); - return 1; -} - -/* - This optional function does a "fast" set of critical region protection to the - value specified by pval. See the documentation for sys_arch_protect() for - more information. This function is only required if your port is supporting - an operating system. -*/ -void sys_arch_unprotect(sys_prot_t pval) -{ - ( void ) pval; - vPortExitCritical(); -} - -/* - * Prints an assertion messages and aborts execution. - */ -void sys_assert( const char *msg ) -{ - ( void ) msg; - /*FSL:only needed for debugging - printf(msg); - printf("\n\r"); - */ - vPortEnterCritical( ); - for(;;) - ; -} - -uint32_t sys_now(void) -{ - return xTaskGetTickCount(); -} - -uint32_t sys_jiffies(void) -{ - return xTaskGetTickCount(); -} diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/freertos/sys_arch.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/freertos/sys_arch.h deleted file mode 100644 index 83d0c08..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/realtek/freertos/sys_arch.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __SYS_RTXC_H__ -#define __SYS_RTXC_H__ - -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" -#include "semphr.h" - -#define SYS_MBOX_NULL (xQueueHandle)0 -#define SYS_SEM_NULL (xSemaphoreHandle)0 -#define SYS_DEFAULT_THREAD_STACK_DEPTH configMINIMAL_STACK_SIZE - -typedef xSemaphoreHandle sys_sem_t; -typedef xQueueHandle sys_mbox_t; -typedef xTaskHandle sys_thread_t; - -typedef struct _sys_arch_state_t -{ - // Task creation data. - char cTaskName[configMAX_TASK_NAME_LEN]; - unsigned short nStackDepth; - unsigned short nTaskCount; -} sys_arch_state_t; - - - -//extern sys_arch_state_t s_sys_arch_state; - -//void sys_set_default_state(); -//void sys_set_state(signed char *pTaskName, unsigned short nStackSize); - -/* Message queue constants. */ -#define archMESG_QUEUE_LENGTH ( 6 ) -#endif /* __SYS_RTXC_H__ */ - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/bpstruct.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/bpstruct.h deleted file mode 100644 index 177758c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/bpstruct.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#if defined(__IAR_SYSTEMS_ICC__) -#pragma pack(1) -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/cc.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/cc.h deleted file mode 100644 index 1d6a5fa..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/cc.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __CC_H__ -#define __CC_H__ - -#include "cpu.h" - -typedef unsigned char u8_t; -typedef signed char s8_t; -typedef unsigned short u16_t; -typedef signed short s16_t; -typedef unsigned int u32_t; -typedef signed int s32_t; -typedef u32_t mem_ptr_t; -typedef int sys_prot_t; - - -#define U16_F "hu" -#define S16_F "d" -#define X16_F "hx" -#define U32_F "u" -#define S32_F "d" -#define X32_F "x" -#define SZT_F "uz" - - - - - -/* define compiler specific symbols */ -#if defined (__ICCARM__) - -#define PACK_STRUCT_BEGIN -#define PACK_STRUCT_STRUCT -#define PACK_STRUCT_END -#define PACK_STRUCT_FIELD(x) x -#define PACK_STRUCT_USE_INCLUDES - -#elif defined (__CC_ARM) - -#define PACK_STRUCT_BEGIN __packed -#define PACK_STRUCT_STRUCT -#define PACK_STRUCT_END -#define PACK_STRUCT_FIELD(x) x - -#elif defined (__GNUC__) - -#define PACK_STRUCT_BEGIN -#define PACK_STRUCT_STRUCT __attribute__ ((__packed__)) -#define PACK_STRUCT_END -#define PACK_STRUCT_FIELD(x) x - -#elif defined (__TASKING__) - -#define PACK_STRUCT_BEGIN -#define PACK_STRUCT_STRUCT -#define PACK_STRUCT_END -#define PACK_STRUCT_FIELD(x) x - -#endif - -#define LWIP_PLATFORM_ASSERT(x) //do { if(!(x)) while(1); } while(0) - -#endif /* __CC_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/cpu.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/cpu.h deleted file mode 100644 index a02f86d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/cpu.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __CPU_H__ -#define __CPU_H__ - -#define BYTE_ORDER LITTLE_ENDIAN - -#endif /* __CPU_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/epstruct.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/epstruct.h deleted file mode 100644 index 1e1a049..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/epstruct.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#if defined(__IAR_SYSTEMS_ICC__) -#pragma pack() -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/init.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/init.h deleted file mode 100644 index e622c73..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/init.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __ARCH_INIT_H__ -#define __ARCH_INIT_H__ - -#define TCPIP_INIT_DONE(arg) tcpip_init_done(arg) - -void tcpip_init_done(void *); -int wait_for_tcpip_init(void); - -#endif /* __ARCH_INIT_H__ */ - - - - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/lib.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/lib.h deleted file mode 100644 index 378f25b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/lib.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LIB_H__ -#define __LIB_H__ - -#include - - -#endif /* __LIB_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/perf.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/perf.h deleted file mode 100644 index 334d42a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/perf.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __PERF_H__ -#define __PERF_H__ - -#define PERF_START /* null definition */ -#define PERF_STOP(x) /* null definition */ - -#endif /* __PERF_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/sys_arch.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/sys_arch.h deleted file mode 100644 index 2e841bd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/arch/sys_arch.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __SYS_RTXC_H__ -#define __SYS_RTXC_H__ - -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" -#include "semphr.h" - -#define SYS_MBOX_NULL (xQueueHandle)0 -#define SYS_SEM_NULL (xSemaphoreHandle)0 -#define SYS_DEFAULT_THREAD_STACK_DEPTH configMINIMAL_STACK_SIZE - -typedef xSemaphoreHandle sys_sem_t; -typedef xSemaphoreHandle sys_mutex_t; -typedef xQueueHandle sys_mbox_t; -typedef xTaskHandle sys_thread_t; - -typedef struct _sys_arch_state_t -{ - // Task creation data. - char cTaskName[configMAX_TASK_NAME_LEN]; - unsigned short nStackDepth; - unsigned short nTaskCount; -} sys_arch_state_t; - - - -//extern sys_arch_state_t s_sys_arch_state; - -//void sys_set_default_state(); -//void sys_set_state(signed char *pTaskName, unsigned short nStackSize); - -/* Message queue constants. */ -#define archMESG_QUEUE_LENGTH ( 6 ) -#endif /* __SYS_RTXC_H__ */ - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/MFC6A0B.tmp b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/MFC6A0B.tmp deleted file mode 100644 index 5097f29..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/MFC6A0B.tmp +++ /dev/null @@ -1,489 +0,0 @@ -/** -* @file -* Ethernet Interface Skeleton -* -*/ - -/* -* Copyright (c) 2001-2004 Swedish Institute of Computer Science. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, -* are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, -* this list of conditions and the following disclaimer. -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* 3. The name of the author may not be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY -* OF SUCH DAMAGE. -* -* This file is part of the lwIP TCP/IP stack. -* -* Author: Adam Dunkels -* -*/ - -/* -* This file is a skeleton for developing Ethernet network interface -* drivers for lwIP. Add code to the low_level functions and do a -* search-and-replace for the word "ethernetif" to replace it with -* something that better describes your network interface. -*/ - -#include "lwip/opt.h" -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/pbuf.h" -//#include "lwip/sys.h" -//#include "lwip/tcpip.h" -//#include "lwip/icmp.h" -#include "lwip/lwip_timers.h" -#include "netif/etharp.h" -#include "err.h" -#include "ethernetif.h" -//#include "queue.h" - -#include "main.h" // for the definition of CONFIG_WLAN - -#if !CONFIG_WLAN -#include "stm32f2x7_eth.h" -#else -#include -#endif -#include - -#include - - -#define netifMTU (1500) -#define netifINTERFACE_TASK_STACK_SIZE ( 350 ) -#define netifINTERFACE_TASK_PRIORITY ( configMAX_PRIORITIES - 1 ) -#define netifGUARD_BLOCK_TIME ( 250 ) -/* The time to block waiting for input. */ -#define emacBLOCK_TIME_WAITING_FOR_INPUT ( ( portTickType ) 100 ) - -#if !CONFIG_WLAN -/* Define those to better describe your network interface. */ -#define IFNAME0 's' -#define IFNAME1 't' - -static struct netif *s_pxNetIf = NULL; -xSemaphoreHandle s_xSemaphore = NULL; - - -/* Ethernet Rx & Tx DMA Descriptors */ -extern ETH_DMADESCTypeDef DMARxDscrTab[ETH_RXBUFNB], DMATxDscrTab[ETH_TXBUFNB]; - -/* Ethernet Receive buffers */ -extern uint8_t Rx_Buff[ETH_RXBUFNB][ETH_RX_BUF_SIZE]; - -/* Ethernet Transmit buffers */ -extern uint8_t Tx_Buff[ETH_TXBUFNB][ETH_TX_BUF_SIZE]; - -/* Global pointers to track current transmit and receive descriptors */ -extern ETH_DMADESCTypeDef *DMATxDescToSet; -extern ETH_DMADESCTypeDef *DMARxDescToGet; - -/* Global pointer for last received frame infos */ -extern ETH_DMA_Rx_Frame_infos *DMA_RX_FRAME_infos; - - -static void ethernetif_input( void * pvParameters ); -#endif - -static void arp_timer(void *arg); - - -/** -* In this function, the hardware should be initialized. -* Called from ethernetif_init(). -* -* @param netif the already initialized lwip network interface structure -* for this ethernetif -*/ -static void low_level_init(struct netif *netif) -{ - uint32_t i; - - /* set netif MAC hardware address length */ - netif->hwaddr_len = ETHARP_HWADDR_LEN; - -#if !CONFIG_WLAN - /* set netif MAC hardware address */ - netif->hwaddr[0] = MAC_ADDR0; - netif->hwaddr[1] = MAC_ADDR1; - netif->hwaddr[2] = MAC_ADDR2; - netif->hwaddr[3] = MAC_ADDR3; - netif->hwaddr[4] = MAC_ADDR4; - netif->hwaddr[5] = MAC_ADDR5; -#endif - - /* set netif maximum transfer unit */ - netif->mtu = 1500; - - /* Accept broadcast address and ARP traffic */ - netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP; - -#if !CONFIG_WLAN - s_pxNetIf =netif; - - /* create binary semaphore used for informing ethernetif of frame reception */ - if (s_xSemaphore == NULL) - { - vSemaphoreCreateBinary(s_xSemaphore); - xSemaphoreTake( s_xSemaphore, 0); - } - - /* initialize MAC address in ethernet MAC */ - ETH_MACAddressConfig(ETH_MAC_Address0, netif->hwaddr); - - /* Initialize Tx Descriptors list: Chain Mode */ - ETH_DMATxDescChainInit(DMATxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB); - /* Initialize Rx Descriptors list: Chain Mode */ - ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB); - - /* Enable Ethernet Rx interrrupt */ - { - for(i=0; iBuffer1Addr); - bufferoffset = 0; - - for(q = p; q != NULL; q = q->next) - { - if((DmaTxDesc->Status & ETH_DMATxDesc_OWN) != (u32)RESET) - { - goto error; - } - - /* Get bytes in current lwIP buffer */ - byteslefttocopy = q->len; - payloadoffset = 0; - - /* Check if the length of data to copy is bigger than Tx buffer size*/ - while( (byteslefttocopy + bufferoffset) > ETH_TX_BUF_SIZE ) - { - /* Copy data to Tx buffer*/ - memcpy( (u8_t*)((u8_t*)buffer + bufferoffset), (u8_t*)((u8_t*)q->payload + payloadoffset), (ETH_TX_BUF_SIZE - bufferoffset) ); - - /* Point to next descriptor */ - DmaTxDesc = (ETH_DMADESCTypeDef *)(DmaTxDesc->Buffer2NextDescAddr); - - /* Check if the buffer is available */ - if((DmaTxDesc->Status & ETH_DMATxDesc_OWN) != (u32)RESET) - { - goto error; - } - - buffer = (u8 *)(DmaTxDesc->Buffer1Addr); - - byteslefttocopy = byteslefttocopy - (ETH_TX_BUF_SIZE - bufferoffset); - payloadoffset = payloadoffset + (ETH_TX_BUF_SIZE - bufferoffset); - framelength = framelength + (ETH_TX_BUF_SIZE - bufferoffset); - bufferoffset = 0; - } - - /* Copy the remaining bytes */ - memcpy( (u8_t*)((u8_t*)buffer + bufferoffset), (u8_t*)((u8_t*)q->payload + payloadoffset), byteslefttocopy ); - bufferoffset = bufferoffset + byteslefttocopy; - framelength = framelength + byteslefttocopy; - } - - /* Prepare transmit descriptors to give to DMA*/ - ETH_Prepare_Transmit_Descriptors(framelength); - - /* Give semaphore and exit */ - error: - - xSemaphoreGive(xTxSemaphore); - } -#endif // #if !CONFIG_WLAN - - return ERR_OK; -} - - -#if !CONFIG_WLAN -/** -* Should allocate a pbuf and transfer the bytes of the incoming -* packet from the interface into the pbuf. -* -* @param netif the lwip network interface structure for this ethernetif -* @return a pbuf filled with the received packet (including MAC header) -* NULL on memory error -*/ -static struct pbuf * low_level_input(struct netif *netif) -{ - struct pbuf *p= NULL, *q; - u32_t len; - FrameTypeDef frame; - u8 *buffer; - __IO ETH_DMADESCTypeDef *DMARxDesc; - uint32_t bufferoffset = 0; - uint32_t payloadoffset = 0; - uint32_t byteslefttocopy = 0; - uint32_t i=0; - - /* get received frame */ - frame = ETH_Get_Received_Frame_interrupt(); - - /* Obtain the size of the packet and put it into the "len" variable. */ - len = frame.length; - buffer = (u8 *)frame.buffer; - - if (len > 0) - { - /* We allocate a pbuf chain of pbufs from the Lwip buffer pool */ - p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL); - } - - if (p != NULL) - { - DMARxDesc = frame.descriptor; - bufferoffset = 0; - for(q = p; q != NULL; q = q->next) - { - byteslefttocopy = q->len; - payloadoffset = 0; - - /* Check if the length of bytes to copy in current pbuf is bigger than Rx buffer size*/ - while( (byteslefttocopy + bufferoffset) > ETH_RX_BUF_SIZE ) - { - /* Copy data to pbuf*/ - memcpy( (u8_t*)((u8_t*)q->payload + payloadoffset), (u8_t*)((u8_t*)buffer + bufferoffset), (ETH_RX_BUF_SIZE - bufferoffset)); - - /* Point to next descriptor */ - DMARxDesc = (ETH_DMADESCTypeDef *)(DMARxDesc->Buffer2NextDescAddr); - buffer = (unsigned char *)(DMARxDesc->Buffer1Addr); - - byteslefttocopy = byteslefttocopy - (ETH_RX_BUF_SIZE - bufferoffset); - payloadoffset = payloadoffset + (ETH_RX_BUF_SIZE - bufferoffset); - bufferoffset = 0; - } - - /* Copy remaining data in pbuf */ - memcpy( (u8_t*)((u8_t*)q->payload + payloadoffset), (u8_t*)((u8_t*)buffer + bufferoffset), byteslefttocopy); - bufferoffset = bufferoffset + byteslefttocopy; - } - - /* Release descriptors to DMA */ - DMARxDesc =frame.descriptor; - - /* Set Own bit in Rx descriptors: gives the buffers back to DMA */ - for (i=0; iSeg_Count; i++) - { - DMARxDesc->Status = ETH_DMARxDesc_OWN; - DMARxDesc = (ETH_DMADESCTypeDef *)(DMARxDesc->Buffer2NextDescAddr); - } - - /* Clear Segment_Count */ - DMA_RX_FRAME_infos->Seg_Count =0; - /* added for test*/ - } - - /* When Rx Buffer unavailable flag is set: clear it and resume reception */ - if ((ETH->DMASR & ETH_DMASR_RBUS) != (u32)RESET) - { - /* Clear RBUS ETHERNET DMA flag */ - ETH->DMASR = ETH_DMASR_RBUS; - /* Resume DMA reception */ - ETH->DMARPDR = 0; - } - return p; -} - - -/** -* This function is the ethernetif_input task, it is processed when a packet -* is ready to be read from the interface. It uses the function low_level_input() -* that should handle the actual reception of bytes from the network -* interface. Then the type of the received packet is determined and -* the appropriate input function is called. -* -* @param netif the lwip network interface structure for this ethernetif -*/ -void ethernetif_input( void * pvParameters ) -{ - struct pbuf *p; - - for( ;; ) - { - if (xSemaphoreTake( s_xSemaphore, emacBLOCK_TIME_WAITING_FOR_INPUT)==pdTRUE) - { -TRY_GET_NEXT_FRAME: - p = low_level_input( s_pxNetIf ); - if (p != NULL) - { - if (ERR_OK != s_pxNetIf->input( p, s_pxNetIf)) - { - pbuf_free(p); - } - else - { - goto TRY_GET_NEXT_FRAME; - } - } - - } - } -} -#endif -/** -* Should be called at the beginning of the program to set up the -* network interface. It calls the function low_level_init() to do the -* actual setup of the hardware. -* -* This function should be passed as a parameter to netif_add(). -* -* @param netif the lwip network interface structure for this ethernetif -* @return ERR_OK if the loopif is initialized -* ERR_MEM if private data couldn't be allocated -* any other err_t on error -*/ -err_t ethernetif_init(struct netif *netif) -{ - LWIP_ASSERT("netif != NULL", (netif != NULL)); - -#if !CONFIG_WLAN - /* ethernet */ - netif->name[0] = IFNAME0; - netif->name[1] = IFNAME1; -#else - /* wlan interface*/ -#if LWIP_NETIF_HOSTNAME - /* Initialize interface hostname */ - netif->hostname = "lwip"; -#endif /* LWIP_NETIF_HOSTNAME */ -#endif // WLAN - - netif->output = etharp_output; - netif->linkoutput = low_level_output; - - /* initialize the hardware */ - low_level_init(netif); - - etharp_init(); - sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL); - - return ERR_OK; -} - - -static void arp_timer(void *arg) -{ - etharp_tmr(); - sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL); -} - -/* - * For FreeRTOS tickless - */ -int lwip_tickless_used = 0; - -/* -int arp_timeout_exist(void) -{ - struct sys_timeouts *timeouts; - struct sys_timeo *t; - - timeouts = sys_arch_timeouts(); - - for(t = timeouts->next; t != NULL;t = t->next) - if(t->h == arp_timer) - return 1; - - return 0; -} -*/ -//Called by rltk_wlan_PRE_SLEEP_PROCESSING() -void lwip_PRE_SLEEP_PROCESSING(void) -{ - if(arp_timeout_exist()) { - tcpip_untimeout(arp_timer, NULL); - } - lwip_tickless_used = 1; -} - -//Called in ips_leave() path, support tickless when wifi power wakeup due to ioctl or deinit -void lwip_POST_SLEEP_PROCESSING(void) -{ - if(lwip_tickless_used) { - tcpip_timeout(ARP_TMR_INTERVAL, arp_timer, NULL); - } -} - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/ethernetif.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/ethernetif.c deleted file mode 100644 index 0f67357..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/ethernetif.c +++ /dev/null @@ -1,653 +0,0 @@ -/** -* @file -* Ethernet Interface Skeleton -* -*/ - -/* -* Copyright (c) 2001-2004 Swedish Institute of Computer Science. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, -* are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, -* this list of conditions and the following disclaimer. -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* 3. The name of the author may not be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY -* OF SUCH DAMAGE. -* -* This file is part of the lwIP TCP/IP stack. -* -* Author: Adam Dunkels -* -*/ - -/* -* This file is a skeleton for developing Ethernet network interface -* drivers for lwIP. Add code to the low_level functions and do a -* search-and-replace for the word "ethernetif" to replace it with -* something that better describes your network interface. -*/ - -#include "lwip/opt.h" -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/pbuf.h" -#include "lwip/sys.h" -#include "lwip/tcpip.h" -#include "lwip/icmp.h" -#include "lwip/lwip_timers.h" -#include "netif/etharp.h" -#include "err.h" -#include "ethernetif.h" -#include "queue.h" - -#include "main.h" // for the definition of CONFIG_WLAN - - -#if !CONFIG_WLAN -#include "stm32f2x7_eth.h" -#else -#include -#endif -#include - -#include - -#ifdef CONFIG_DONT_CARE_TP -#define netifMTU (576) -#else -#define netifMTU (1500) -#endif -#define netifINTERFACE_TASK_STACK_SIZE ( 350 ) -#define netifINTERFACE_TASK_PRIORITY ( configMAX_PRIORITIES - 1 ) -#define netifGUARD_BLOCK_TIME ( 250 ) -/* The time to block waiting for input. */ -#define emacBLOCK_TIME_WAITING_FOR_INPUT ( ( portTickType ) 100 ) -#define FAKE_PING_REPLY 0 - -#if !CONFIG_WLAN -/* Define those to better describe your network interface. */ -#define IFNAME0 's' -#define IFNAME1 't' - -static struct netif *s_pxNetIf = NULL; -xSemaphoreHandle s_xSemaphore = NULL; - - -/* Ethernet Rx & Tx DMA Descriptors */ -extern ETH_DMADESCTypeDef DMARxDscrTab[ETH_RXBUFNB], DMATxDscrTab[ETH_TXBUFNB]; - -/* Ethernet Receive buffers */ -extern uint8_t Rx_Buff[ETH_RXBUFNB][ETH_RX_BUF_SIZE]; - -/* Ethernet Transmit buffers */ -extern uint8_t Tx_Buff[ETH_TXBUFNB][ETH_TX_BUF_SIZE]; - -/* Global pointers to track current transmit and receive descriptors */ -extern ETH_DMADESCTypeDef *DMATxDescToSet; -extern ETH_DMADESCTypeDef *DMARxDescToGet; - -/* Global pointer for last received frame infos */ -extern ETH_DMA_Rx_Frame_infos *DMA_RX_FRAME_infos; - -static void ethernetif_input( void * pvParameters ); -#endif - -static void arp_timer(void *arg); - - -/** -* In this function, the hardware should be initialized. -* Called from ethernetif_init(). -* -* @param netif the already initialized lwip network interface structure -* for this ethernetif -*/ -static void low_level_init(struct netif *netif) -{ - uint32_t i; - - /* set netif MAC hardware address length */ - netif->hwaddr_len = ETHARP_HWADDR_LEN; - -#if !CONFIG_WLAN - /* set netif MAC hardware address */ - netif->hwaddr[0] = MAC_ADDR0; - netif->hwaddr[1] = MAC_ADDR1; - netif->hwaddr[2] = MAC_ADDR2; - netif->hwaddr[3] = MAC_ADDR3; - netif->hwaddr[4] = MAC_ADDR4; - netif->hwaddr[5] = MAC_ADDR5; -#endif - - /* set netif maximum transfer unit */ - netif->mtu = netifMTU; - - /* Accept broadcast address and ARP traffic */ - netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP; - -#if !CONFIG_WLAN - s_pxNetIf =netif; - - /* create binary semaphore used for informing ethernetif of frame reception */ - if (s_xSemaphore == NULL) - { - s_xSemaphore= xSemaphoreCreateCounting(20,0); - } - - /* initialize MAC address in ethernet MAC */ - ETH_MACAddressConfig(ETH_MAC_Address0, netif->hwaddr); - - /* Initialize Tx Descriptors list: Chain Mode */ - ETH_DMATxDescChainInit(DMATxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB); - /* Initialize Rx Descriptors list: Chain Mode */ - ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB); - - /* Enable Ethernet Rx interrrupt */ - { - for(i=0; itot_len, PBUF_POOL); - if (p == NULL) { - printf("\n\rCannot allocate pbuf to receive packet"); - return; - } - for (tq = q, tp = p, q_len = tq->len; tp != NULL ; tp = tp->next) - { - p_len = tp->len; - while(p_len) - { - if(q_len > p_len) { - memcpy((char*)tq->payload + (tq->len - q_len), (char*)tp->payload + (tp->len - p_len), p_len); - q_len -= p_len; - p_len = 0; - }else{ - memcpy((char*)tq->payload + (tq->len - q_len), (char*)tp->payload + (tp->len - p_len), q_len); - p_len -= q_len; - tq = tq->next; - q_len = tq->len; - } - } - } - p_eth = (struct eth_hdr *)p->payload; - q_eth = (struct eth_hdr *)q->payload; - p_arp = (struct etharp_hdr *)((char*)(p->payload) + sizeof(struct eth_hdr)); - q_arp = (struct etharp_hdr *)((char*)(q->payload) + sizeof(struct eth_hdr)); - - q_eth->dest = p_eth->src; - q_eth->src = fake_src_mac; - q_arp->opcode = htons(ARP_REPLY); - q_arp->shwaddr = fake_src_mac; - q_arp->sipaddr = p_arp->dipaddr; - q_arp->dhwaddr = p_eth->src; - q_arp->dipaddr = p_arp->sipaddr; - - if(0){ - int i; - char *buf = q->payload; - printf("\n\r"); - for(i=0;itot_len;i++) - printf("0x%02x, ", buf[i]); - printf("\n\r"); - } - if (ERR_OK != netif->input(q, netif)){ - printf("\n\rfake_arp_reply input error"); - pbuf_free(q); - }else - printf("\n\rfake arp reply \n\r"); -} - -void fake_echo_reply(struct netif *netif, struct pbuf *p) -{ - struct pbuf *q, *tq, *tp; - int q_len, p_len; - struct eth_hdr *p_eth, *q_eth; - struct ip_hdr *p_ip, *q_ip; - struct icmp_echo_hdr *p_echo, *q_echo; - - // Allocate buffer to store received packet - q = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_POOL); - if (p == NULL) { - printf("\n\rCannot allocate pbuf to receive packet"); - return; - } - for (tq = q, tp = p, q_len = tq->len; tp != NULL ; tp = tp->next) - { - p_len = tp->len; - while(p_len) - { - if(q_len > p_len) { - memcpy((char*)tq->payload + (tq->len - q_len), (char*)tp->payload + (tp->len - p_len), p_len); - q_len -= p_len; - p_len = 0; - }else{ - memcpy((char*)tq->payload + (tq->len - q_len), (char*)tp->payload + (tp->len - p_len), q_len); - p_len -= q_len; - tq = tq->next; - q_len = tq->len; - } - } - } - p_eth = (struct eth_hdr *)p->payload; - q_eth = (struct eth_hdr *)q->payload; - p_ip = (struct ip_hdr *)((char*)(p->payload) + sizeof(struct eth_hdr)); - q_ip = (struct ip_hdr *)((char*)(q->payload) + sizeof(struct eth_hdr)); - p_echo = (struct icmp_echo_hdr *)((char*)(p->payload) + sizeof(struct eth_hdr) + sizeof(struct ip_hdr)); - q_echo = (struct icmp_echo_hdr *)((char*)(q->payload) + sizeof(struct eth_hdr) + sizeof(struct ip_hdr)); - - q_eth->dest = p_eth->src; - q_eth->src = p_eth->dest; - q_ip->src.addr = p_ip->dest.addr; - q_ip->dest.addr = p_ip->src.addr; - q_ip->_chksum = 0; - q_ip->_chksum = inet_chksum(q_ip, sizeof(struct ip_hdr)); - q_echo->type = ICMP_ER; - q_echo->code = 0; - q_echo->chksum = 0; - q_echo->chksum = inet_chksum(q_echo, q->tot_len - sizeof(struct eth_hdr) - sizeof(struct ip_hdr)); - - if(0){ - int i; - char *buf = q->payload; - printf("\n\r"); - for(i=0;itot_len;i++) - printf("0x%02x, ", buf[i]); - printf("\n\r"); - } - if (ERR_OK != netif->input(q, netif)){ - printf("\n\rfake_echo_reply input error"); - pbuf_free(q); - }else - printf("\n\rfake echo reply \n\r"); -} -#endif // #if FAKE_PING_REPLY - -/** -* This function should do the actual transmission of the packet. The packet is -* contained in the pbuf that is passed to the function. This pbuf -* might be chained. -* -* @param netif the lwip network interface structure for this ethernetif -* @param p the MAC packet to send (e.g. IP packet including MAC addresses and type) -* @return ERR_OK if the packet could be sent -* an err_t value if the packet couldn't be sent -* -* @note Returning ERR_MEM here if a DMA queue of your MAC is full can lead to -* strange results. You might consider waiting for space in the DMA queue -* to become availale since the stack doesn't retry to send a packet -* dropped because of memory failure (except for the TCP timers). -*/ - -static err_t low_level_output(struct netif *netif, struct pbuf *p) -{ -#if !CONFIG_WLAN - static xSemaphoreHandle xTxSemaphore = NULL; - struct pbuf *q; - uint32_t l = 0; - u8 *buffer ; - - if (xTxSemaphore == NULL) - { - vSemaphoreCreateBinary (xTxSemaphore); - } - - if (xSemaphoreTake(xTxSemaphore, netifGUARD_BLOCK_TIME)) - { - buffer = (u8 *)(DMATxDescToSet->Buffer1Addr); - for(q = p; q != NULL; q = q->next) - { - memcpy((u8_t*)&buffer[l], q->payload, q->len); - l = l + q->len; - } - ETH_Prepare_Transmit_Descriptors(l); - xSemaphoreGive(xTxSemaphore); - } -#else - /* Refer to eCos lwip eth_drv_send() */ - struct eth_drv_sg sg_list[MAX_ETH_DRV_SG]; - int sg_len = 0; - struct pbuf *q; - - if(!rltk_wlan_running(netif_get_idx(netif))) - return ERR_IF; - - for (q = p; q != NULL && sg_len < MAX_ETH_DRV_SG; q = q->next) { - sg_list[sg_len].buf = (unsigned int) q->payload; - sg_list[sg_len++].len = q->len; - } - -#if FAKE_PING_REPLY - { - char *header = p->payload; - if(header[12] == 0x08 && header[13] == 0x06) - { // arp packet - if(header[21] == 0x01) - { // arp request packet - printf("\n\rfake_ping: arp request packet."); - if(0) - { - int i; - printf("\n\r"); - for (q = p; q != NULL; q = q->next) - { - char *buf = q->payload; - for(i=0;ilen;i++) - printf("0x%02x, ", buf[i]); - } - printf("\n\r"); - } - fake_arp_reply(netif, p); - return ERR_OK; - } - }else if(header[12] == 0x08 && header[13] == 0x00) - { // ip packet - if(header[15] == 0x00 && header[23] == 0x01) - { // icmp packet - printf("\n\rfake_ping: icmp packet."); - if(0){ - int i; - printf("\n\r"); - for (q = p; q != NULL; q = q->next) - { - char *buf = q->payload; - for(i=0;ilen;i++) - printf("0x%02x, ", buf[i]); - } - printf("\n\r"); - } - fake_echo_reply(netif, p); - return ERR_OK; - } - } - } -#endif // #if FAKE_PING_REPLY - if (sg_len) - rltk_wlan_send(netif_get_idx(netif), sg_list, sg_len, p->tot_len); -#endif // #if !CONFIG_WLAN - - return ERR_OK; -} - - -#if !CONFIG_WLAN -/** -* Should allocate a pbuf and transfer the bytes of the incoming -* packet from the interface into the pbuf. -* -* @param netif the lwip network interface structure for this ethernetif -* @return a pbuf filled with the received packet (including MAC header) -* NULL on memory error -*/ -static struct pbuf * low_level_input(struct netif *netif) -{ - struct pbuf *p, *q; - u16_t len; - uint32_t l=0,i =0; - FrameTypeDef frame; - u8 *buffer; - __IO ETH_DMADESCTypeDef *DMARxNextDesc; - - p = NULL; - - /* Get received frame */ - frame = ETH_Get_Received_Frame_interrupt(); - - /* check that frame has no error */ - if ((frame.descriptor->Status & ETH_DMARxDesc_ES) == (uint32_t)RESET) - { - - /* Obtain the size of the packet and put it into the "len" variable. */ - len = frame.length; - buffer = (u8 *)frame.buffer; - - /* We allocate a pbuf chain of pbufs from the pool. */ - p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL); - - /* Copy received frame from ethernet driver buffer to stack buffer */ - if (p != NULL) - { - for (q = p; q != NULL; q = q->next) - { - memcpy((u8_t*)q->payload, (u8_t*)&buffer[l], q->len); - l = l + q->len; - } - } - } - - /* Release descriptors to DMA */ - /* Check if received frame with multiple DMA buffer segments */ - if (DMA_RX_FRAME_infos->Seg_Count > 1) - { - DMARxNextDesc = DMA_RX_FRAME_infos->FS_Rx_Desc; - } - else - { - DMARxNextDesc = frame.descriptor; - } - - /* Set Own bit in Rx descriptors: gives the buffers back to DMA */ - for (i=0; iSeg_Count; i++) - { - DMARxNextDesc->Status = ETH_DMARxDesc_OWN; - DMARxNextDesc = (ETH_DMADESCTypeDef *)(DMARxNextDesc->Buffer2NextDescAddr); - } - - /* Clear Segment_Count */ - DMA_RX_FRAME_infos->Seg_Count =0; - - - /* When Rx Buffer unavailable flag is set: clear it and resume reception */ - if ((ETH->DMASR & ETH_DMASR_RBUS) != (u32)RESET) - { - /* Clear RBUS ETHERNET DMA flag */ - ETH->DMASR = ETH_DMASR_RBUS; - - /* Resume DMA reception */ - ETH->DMARPDR = 0; - } - return p; -} - - -/** -* This function is the ethernetif_input task, it is processed when a packet -* is ready to be read from the interface. It uses the function low_level_input() -* that should handle the actual reception of bytes from the network -* interface. Then the type of the received packet is determined and -* the appropriate input function is called. -* -* @param netif the lwip network interface structure for this ethernetif -*/ -void ethernetif_input( void * pvParameters ) -{ - struct pbuf *p; - - for( ;; ) - { - if (xSemaphoreTake( s_xSemaphore, emacBLOCK_TIME_WAITING_FOR_INPUT)==pdTRUE) - { - p = low_level_input( s_pxNetIf ); - if (ERR_OK != s_pxNetIf->input( p, s_pxNetIf)) - { - pbuf_free(p); - p=NULL; - } - } - } -} -#endif - -/* Refer to eCos eth_drv_recv to do similarly in ethernetif_input */ -void ethernetif_recv(struct netif *netif, int total_len) -{ -#if CONFIG_WLAN - struct eth_drv_sg sg_list[MAX_ETH_DRV_SG]; - struct pbuf *p, *q; - int sg_len = 0; - - if(!rltk_wlan_running(netif_get_idx(netif))) - return; - - if ((total_len > MAX_ETH_MSG) || (total_len < 0)) - total_len = MAX_ETH_MSG; - - // Allocate buffer to store received packet - p = pbuf_alloc(PBUF_RAW, total_len, PBUF_POOL); - if (p == NULL) { - printf("\n\rCannot allocate pbuf to receive packet"); - return; - } - - // Create scatter list - for (q = p; q != NULL && sg_len < MAX_ETH_DRV_SG; q = q->next) { - sg_list[sg_len].buf = (unsigned int) q->payload; - sg_list[sg_len++].len = q->len; - } - - // Copy received packet to scatter list from wrapper rx skb - //printf("\n\rwlan:%c: Recv sg_len: %d, tot_len:%d", netif->name[1],sg_len, total_len); - rltk_wlan_recv(netif_get_idx(netif), sg_list, sg_len); - - // Pass received packet to the interface - if (ERR_OK != netif->input(p, netif)) - pbuf_free(p); -#endif -} - -/** -* Should be called at the beginning of the program to set up the -* network interface. It calls the function low_level_init() to do the -* actual setup of the hardware. -* -* This function should be passed as a parameter to netif_add(). -* -* @param netif the lwip network interface structure for this ethernetif -* @return ERR_OK if the loopif is initialized -* ERR_MEM if private data couldn't be allocated -* any other err_t on error -*/ -err_t ethernetif_init(struct netif *netif) -{ - LWIP_ASSERT("netif != NULL", (netif != NULL)); - -#if !CONFIG_WLAN - /* ethernet */ - netif->name[0] = IFNAME0; - netif->name[1] = IFNAME1; -#else - /* wlan interface*/ -#if LWIP_NETIF_HOSTNAME - /* Initialize interface hostname */ - if(netif->name[1] == '0') - netif->hostname = "lwip0"; - else if(netif->name[1] == '1') - netif->hostname = "lwip1"; -#endif /* LWIP_NETIF_HOSTNAME */ - -#endif // WLAN - - netif->output = etharp_output; - netif->linkoutput = low_level_output; - - /* initialize the hardware */ - low_level_init(netif); - - etharp_init(); - sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL); - - return ERR_OK; -} - - -static void arp_timer(void *arg) -{ - etharp_tmr(); - sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL); -} - -/* - * For FreeRTOS tickless - */ -int lwip_tickless_used = 0; - - -int arp_timeout_exist(void) -{ - struct sys_timeouts *timeouts; - struct sys_timeo *t; - - timeouts = sys_arch_timeouts(); - - for(t = timeouts->next; t != NULL;t = t->next) - if(t->h == arp_timer) - return 1; - - return 0; -} - -//Called by rltk_wlan_PRE_SLEEP_PROCESSING() -void lwip_PRE_SLEEP_PROCESSING(void) -{ - if(arp_timeout_exist()) { - tcpip_untimeout(arp_timer, NULL); - } - lwip_tickless_used = 1; -} - -//Called in ips_leave() path, support tickless when wifi power wakeup due to ioctl or deinit -void lwip_POST_SLEEP_PROCESSING(void) -{ - if(lwip_tickless_used) { - tcpip_timeout(ARP_TMR_INTERVAL, arp_timer, NULL); - } -} diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/ethernetif.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/ethernetif.h deleted file mode 100644 index 7a436d2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/ethernetif.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef __ETHERNETIF_H__ -#define __ETHERNETIF_H__ - - -#include "lwip/err.h" -#include "lwip/netif.h" -//----- ------------------------------------------------------------------ -// Ethernet Buffer -//----- ------------------------------------------------------------------ -struct eth_drv_sg { - unsigned int buf; - unsigned int len; -}; - -#define MAX_ETH_DRV_SG 32 -#define MAX_ETH_MSG 1540 - -void ethernetif_recv(struct netif *netif, int total_len); -err_t ethernetif_init(struct netif *netif); -void lwip_PRE_SLEEP_PROCESSING(void); -void lwip_POST_SLEEP_PROCESSING(void); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/sys_arch.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/sys_arch.c deleted file mode 100644 index 3d111c6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/sys_arch.c +++ /dev/null @@ -1,515 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -/* lwIP includes. */ -#include "lwip/debug.h" -#include "lwip/def.h" -#include "lwip/sys.h" -#include "lwip/mem.h" -#include "lwip/stats.h" -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" -#include "lwip/lwip_timers.h" - -xTaskHandle xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION; - -struct timeoutlist -{ - struct sys_timeouts timeouts; - xTaskHandle pid; -}; - -/* This is the number of threads that can be started with sys_thread_new() */ -#define SYS_THREAD_MAX 6 - -static struct timeoutlist s_timeoutlist[SYS_THREAD_MAX]; -static u16_t s_nextthread = 0; - - -/*-----------------------------------------------------------------------------------*/ -// Creates an empty mailbox. -err_t sys_mbox_new(sys_mbox_t *mbox, int size) -{ - (void ) size; - - *mbox = xQueueCreate( archMESG_QUEUE_LENGTH, sizeof( void * ) ); - -#if SYS_STATS - ++lwip_stats.sys.mbox.used; - if (lwip_stats.sys.mbox.max < lwip_stats.sys.mbox.used) { - lwip_stats.sys.mbox.max = lwip_stats.sys.mbox.used; - } -#endif /* SYS_STATS */ - if (*mbox == NULL) - return ERR_MEM; - - return ERR_OK; -} - -/*-----------------------------------------------------------------------------------*/ -/* - Deallocates a mailbox. If there are messages still present in the - mailbox when the mailbox is deallocated, it is an indication of a - programming error in lwIP and the developer should be notified. -*/ -void sys_mbox_free(sys_mbox_t *mbox) -{ - if( uxQueueMessagesWaiting( *mbox ) ) - { - /* Line for breakpoint. Should never break here! */ - portNOP(); -#if SYS_STATS - lwip_stats.sys.mbox.err++; -#endif /* SYS_STATS */ - - // TODO notify the user of failure. - } - - vQueueDelete( *mbox ); - -#if SYS_STATS - --lwip_stats.sys.mbox.used; -#endif /* SYS_STATS */ -} - -/*-----------------------------------------------------------------------------------*/ -// Posts the "msg" to the mailbox. -void sys_mbox_post(sys_mbox_t *mbox, void *data) -{ - while ( xQueueSendToBack(*mbox, &data, portMAX_DELAY ) != pdTRUE ){} -} - - -/*-----------------------------------------------------------------------------------*/ -// Try to post the "msg" to the mailbox. -err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg) -{ -err_t result; - - if ( xQueueSend( *mbox, &msg, 0 ) == pdPASS ) - { - result = ERR_OK; - } - else { - // could not post, queue must be full - result = ERR_MEM; - -#if SYS_STATS - lwip_stats.sys.mbox.err++; -#endif /* SYS_STATS */ - - } - - return result; -} - -/*-----------------------------------------------------------------------------------*/ -/* - Blocks the thread until a message arrives in the mailbox, but does - not block the thread longer than "timeout" milliseconds (similar to - the sys_arch_sem_wait() function). The "msg" argument is a result - parameter that is set by the function (i.e., by doing "*msg = - ptr"). The "msg" parameter maybe NULL to indicate that the message - should be dropped. - - The return values are the same as for the sys_arch_sem_wait() function: - Number of milliseconds spent waiting or SYS_ARCH_TIMEOUT if there was a - timeout. - - Note that a function with a similar name, sys_mbox_fetch(), is - implemented by lwIP. -*/ -u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout) -{ -void *dummyptr; -portTickType StartTime, EndTime, Elapsed; - - StartTime = xTaskGetTickCount(); - - if ( msg == NULL ) - { - msg = &dummyptr; - } - - if ( timeout != 0 ) - { - if ( pdTRUE == xQueueReceive( *mbox, &(*msg), timeout / portTICK_RATE_MS ) ) - { - EndTime = xTaskGetTickCount(); - Elapsed = (EndTime - StartTime) * portTICK_RATE_MS; - - return ( Elapsed ); - } - else // timed out blocking for message - { - *msg = NULL; - - return SYS_ARCH_TIMEOUT; - } - } - else // block forever for a message. - { - while( pdTRUE != xQueueReceive( *mbox, &(*msg), portMAX_DELAY ) ){} // time is arbitrary - EndTime = xTaskGetTickCount(); - Elapsed = (EndTime - StartTime) * portTICK_RATE_MS; - - return ( Elapsed ); // return time blocked TODO test - } -} - -/*-----------------------------------------------------------------------------------*/ -/* - Similar to sys_arch_mbox_fetch, but if message is not ready immediately, we'll - return with SYS_MBOX_EMPTY. On success, 0 is returned. -*/ -u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg) -{ -void *dummyptr; - - if ( msg == NULL ) - { - msg = &dummyptr; - } - - if ( pdTRUE == xQueueReceive( *mbox, &(*msg), 0 ) ) - { - return ERR_OK; - } - else - { - return SYS_MBOX_EMPTY; - } -} -/*----------------------------------------------------------------------------------*/ -int sys_mbox_valid(sys_mbox_t *mbox) -{ - if (*mbox == SYS_MBOX_NULL) - return 0; - else - return 1; -} -/*-----------------------------------------------------------------------------------*/ -void sys_mbox_set_invalid(sys_mbox_t *mbox) -{ - *mbox = SYS_MBOX_NULL; -} - -/*-----------------------------------------------------------------------------------*/ -// Creates a new semaphore. The "count" argument specifies -// the initial state of the semaphore. -err_t sys_sem_new(sys_sem_t *sem, u8_t count) -{ - vSemaphoreCreateBinary(*sem ); - if(*sem == NULL) - { -#if SYS_STATS - ++lwip_stats.sys.sem.err; -#endif /* SYS_STATS */ - return ERR_MEM; - } - - if(count == 0) // Means it can't be taken - { - xSemaphoreTake(*sem,1); - } - -#if SYS_STATS - ++lwip_stats.sys.sem.used; - if (lwip_stats.sys.sem.max < lwip_stats.sys.sem.used) { - lwip_stats.sys.sem.max = lwip_stats.sys.sem.used; - } -#endif /* SYS_STATS */ - - return ERR_OK; -} - -/*-----------------------------------------------------------------------------------*/ -/* - Blocks the thread while waiting for the semaphore to be - signaled. If the "timeout" argument is non-zero, the thread should - only be blocked for the specified time (measured in - milliseconds). - - If the timeout argument is non-zero, the return value is the number of - milliseconds spent waiting for the semaphore to be signaled. If the - semaphore wasn't signaled within the specified time, the return value is - SYS_ARCH_TIMEOUT. If the thread didn't have to wait for the semaphore - (i.e., it was already signaled), the function may return zero. - - Notice that lwIP implements a function with a similar name, - sys_sem_wait(), that uses the sys_arch_sem_wait() function. -*/ -u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout) -{ -portTickType StartTime, EndTime, Elapsed; - - StartTime = xTaskGetTickCount(); - - if( timeout != 0) - { - if( xSemaphoreTake( *sem, timeout / portTICK_RATE_MS ) == pdTRUE ) - { - EndTime = xTaskGetTickCount(); - Elapsed = (EndTime - StartTime) * portTICK_RATE_MS; - - return (Elapsed); // return time blocked TODO test - } - else - { - return SYS_ARCH_TIMEOUT; - } - } - else // must block without a timeout - { - while( xSemaphoreTake(*sem, portMAX_DELAY) != pdTRUE){} - EndTime = xTaskGetTickCount(); - Elapsed = (EndTime - StartTime) * portTICK_RATE_MS; - - return ( Elapsed ); // return time blocked - - } -} - -/*-----------------------------------------------------------------------------------*/ -// Signals a semaphore -void sys_sem_signal(sys_sem_t *sem) -{ - xSemaphoreGive(*sem); -} - -/*-----------------------------------------------------------------------------------*/ -// Deallocates a semaphore -void sys_sem_free(sys_sem_t *sem) -{ -#if SYS_STATS - --lwip_stats.sys.sem.used; -#endif /* SYS_STATS */ - - vQueueDelete(*sem); -} -/*-----------------------------------------------------------------------------------*/ -int sys_sem_valid(sys_sem_t *sem) -{ - if (*sem == SYS_SEM_NULL) - return 0; - else - return 1; -} - -/*-----------------------------------------------------------------------------------*/ -void sys_sem_set_invalid(sys_sem_t *sem) -{ - *sem = SYS_SEM_NULL; -} - -/*-----------------------------------------------------------------------------------*/ -// Initialize sys arch -void sys_init(void) -{ - int i; - - // Initialize the the per-thread sys_timeouts structures - // make sure there are no valid pids in the list - for(i = 0; i < SYS_THREAD_MAX; i++) - { - s_timeoutlist[i].pid = 0; - s_timeoutlist[i].timeouts.next = NULL; - } - - // keep track of how many threads have been created - s_nextthread = 0; -} - -/* - Returns a pointer to the per-thread sys_timeouts structure. In lwIP, - each thread has a list of timeouts which is represented as a linked - list of sys_timeout structures. The sys_timeouts structure holds a - pointer to a linked list of timeouts. This function is called by - the lwIP timeout scheduler and must not return a NULL value. - - In a single threaded sys_arch implementation, this function will - simply return a pointer to a global sys_timeouts variable stored in - the sys_arch module. -*/ -struct sys_timeouts* sys_arch_timeouts(void) -{ -int i; -xTaskHandle pid; -struct timeoutlist *tl; - - pid = xTaskGetCurrentTaskHandle(); - - for(i = 0; i < s_nextthread; i++) - { - tl = &(s_timeoutlist[i]); - if(tl->pid == pid) - { - return &(tl->timeouts); - } - } - // Error - return NULL; -} -/*-----------------------------------------------------------------------------------*/ - /* Mutexes*/ -/*-----------------------------------------------------------------------------------*/ -/*-----------------------------------------------------------------------------------*/ -#if LWIP_COMPAT_MUTEX == 0 -/* Create a new mutex*/ -err_t sys_mutex_new(sys_mutex_t *mutex) { - - *mutex = xSemaphoreCreateMutex(); - if(*mutex == NULL) - { -#if SYS_STATS - ++lwip_stats.sys.mutex.err; -#endif /* SYS_STATS */ - return ERR_MEM; - } - -#if SYS_STATS - ++lwip_stats.sys.mutex.used; - if (lwip_stats.sys.mutex.max < lwip_stats.sys.mutex.used) { - lwip_stats.sys.mutex.max = lwip_stats.sys.mutex.used; - } -#endif /* SYS_STATS */ - return ERR_OK; -} -/*-----------------------------------------------------------------------------------*/ -/* Deallocate a mutex*/ -void sys_mutex_free(sys_mutex_t *mutex) -{ -#if SYS_STATS - --lwip_stats.sys.mutex.used; -#endif /* SYS_STATS */ - - vQueueDelete(*mutex); -} -/*-----------------------------------------------------------------------------------*/ -/* Lock a mutex*/ -void sys_mutex_lock(sys_mutex_t *mutex) -{ - sys_arch_sem_wait(*mutex, 0); -} - -/*-----------------------------------------------------------------------------------*/ -/* Unlock a mutex*/ -void sys_mutex_unlock(sys_mutex_t *mutex) -{ - xSemaphoreGive(*mutex); -} -#endif /*LWIP_COMPAT_MUTEX*/ -/*-----------------------------------------------------------------------------------*/ -// TODO -/*-----------------------------------------------------------------------------------*/ -/* - Starts a new thread with priority "prio" that will begin its execution in the - function "thread()". The "arg" argument will be passed as an argument to the - thread() function. The id of the new thread is returned. Both the id and - the priority are system dependent. -*/ -sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread , void *arg, int stacksize, int prio) -{ -xTaskHandle CreatedTask; -int result; - - if ( s_nextthread < SYS_THREAD_MAX ) - { - vPortEnterCritical(); - result = xTaskCreate( thread, ( signed portCHAR * ) name, stacksize, arg, prio, &CreatedTask ); - - // For each task created, store the task handle (pid) in the timers array. - // This scheme doesn't allow for threads to be deleted - s_timeoutlist[s_nextthread++].pid = CreatedTask; - vPortExitCritical(); - - if(result == pdPASS) - { - return CreatedTask; - } - else - { - return NULL; - } - } - else - { - return NULL; - } -} - -/* - This optional function does a "fast" critical region protection and returns - the previous protection level. This function is only called during very short - critical regions. An embedded system which supports ISR-based drivers might - want to implement this function by disabling interrupts. Task-based systems - might want to implement this by using a mutex or disabling tasking. This - function should support recursive calls from the same task or interrupt. In - other words, sys_arch_protect() could be called while already protected. In - that case the return value indicates that it is already protected. - - sys_arch_protect() is only required if your port is supporting an operating - system. -*/ -sys_prot_t sys_arch_protect(void) -{ - vPortEnterCritical(); - return 1; -} - -/* - This optional function does a "fast" set of critical region protection to the - value specified by pval. See the documentation for sys_arch_protect() for - more information. This function is only required if your port is supporting - an operating system. -*/ -void sys_arch_unprotect(sys_prot_t pval) -{ - ( void ) pval; - vPortExitCritical(); -} - -/* - * Prints an assertion messages and aborts execution. - */ -void sys_assert( const char *msg ) -{ - ( void ) msg; - /*FSL:only needed for debugging - printf(msg); - printf("\n\r"); - */ - vPortEnterCritical( ); - for(;;) - ; -} diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/sys_arch.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/sys_arch.h deleted file mode 100644 index 83d0c08..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/freertos/sys_arch.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __SYS_RTXC_H__ -#define __SYS_RTXC_H__ - -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" -#include "semphr.h" - -#define SYS_MBOX_NULL (xQueueHandle)0 -#define SYS_SEM_NULL (xSemaphoreHandle)0 -#define SYS_DEFAULT_THREAD_STACK_DEPTH configMINIMAL_STACK_SIZE - -typedef xSemaphoreHandle sys_sem_t; -typedef xQueueHandle sys_mbox_t; -typedef xTaskHandle sys_thread_t; - -typedef struct _sys_arch_state_t -{ - // Task creation data. - char cTaskName[configMAX_TASK_NAME_LEN]; - unsigned short nStackDepth; - unsigned short nTaskCount; -} sys_arch_state_t; - - - -//extern sys_arch_state_t s_sys_arch_state; - -//void sys_set_default_state(); -//void sys_set_state(signed char *pTaskName, unsigned short nStackSize); - -/* Message queue constants. */ -#define archMESG_QUEUE_LENGTH ( 6 ) -#endif /* __SYS_RTXC_H__ */ - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/standalone/ethernetif.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/standalone/ethernetif.c deleted file mode 100644 index f3b74ee..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/standalone/ethernetif.c +++ /dev/null @@ -1,366 +0,0 @@ -/** - * @file - * Ethernet Interface for standalone applications (without RTOS) - works only for - * ethernet polling mode (polling for ethernet frame reception) - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" -#include "lwip/mem.h" -#include "netif/etharp.h" -#include "ethernetif.h" -#include "stm32f2x7_eth.h" -#include "main.h" -#include - -/* Network interface name */ -#define IFNAME0 's' -#define IFNAME1 't' - - -/* Ethernet Rx & Tx DMA Descriptors */ -extern ETH_DMADESCTypeDef DMARxDscrTab[ETH_RXBUFNB], DMATxDscrTab[ETH_TXBUFNB]; - -/* Ethernet Driver Receive buffers */ -extern uint8_t Rx_Buff[ETH_RXBUFNB][ETH_RX_BUF_SIZE]; - -/* Ethernet Driver Transmit buffers */ -extern uint8_t Tx_Buff[ETH_TXBUFNB][ETH_TX_BUF_SIZE]; - -/* Global pointers to track current transmit and receive descriptors */ -extern ETH_DMADESCTypeDef *DMATxDescToSet; -extern ETH_DMADESCTypeDef *DMARxDescToGet; - -/* Global pointer for last received frame infos */ -extern ETH_DMA_Rx_Frame_infos *DMA_RX_FRAME_infos; - -/** - * In this function, the hardware should be initialized. - * Called from ethernetif_init(). - * - * @param netif the already initialized lwip network interface structure - * for this ethernetif - */ -static void low_level_init(struct netif *netif) -{ -#ifdef CHECKSUM_BY_HARDWARE - int i; -#endif - /* set MAC hardware address length */ - netif->hwaddr_len = ETHARP_HWADDR_LEN; - - /* set MAC hardware address */ - netif->hwaddr[0] = MAC_ADDR0; - netif->hwaddr[1] = MAC_ADDR1; - netif->hwaddr[2] = MAC_ADDR2; - netif->hwaddr[3] = MAC_ADDR3; - netif->hwaddr[4] = MAC_ADDR4; - netif->hwaddr[5] = MAC_ADDR5; - - /* initialize MAC address in ethernet MAC */ - ETH_MACAddressConfig(ETH_MAC_Address0, netif->hwaddr); - - /* maximum transfer unit */ - netif->mtu = 1500; - - /* device capabilities */ - /* don't set NETIF_FLAG_ETHARP if this device is not an ethernet one */ - netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP; - - /* Initialize Tx Descriptors list: Chain Mode */ - ETH_DMATxDescChainInit(DMATxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB); - /* Initialize Rx Descriptors list: Chain Mode */ - ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB); - -#ifdef CHECKSUM_BY_HARDWARE - /* Enable the TCP, UDP and ICMP checksum insertion for the Tx frames */ - for(i=0; iBuffer1Addr); - __IO ETH_DMADESCTypeDef *DmaTxDesc; - uint16_t framelength = 0; - uint32_t bufferoffset = 0; - uint32_t byteslefttocopy = 0; - uint32_t payloadoffset = 0; - - DmaTxDesc = DMATxDescToSet; - bufferoffset = 0; - - /* copy frame from pbufs to driver buffers */ - for(q = p; q != NULL; q = q->next) - { - /* Is this buffer available? If not, goto error */ - if((DmaTxDesc->Status & ETH_DMATxDesc_OWN) != (u32)RESET) - { - errval = ERR_BUF; - goto error; - } - - /* Get bytes in current lwIP buffer */ - byteslefttocopy = q->len; - payloadoffset = 0; - - /* Check if the length of data to copy is bigger than Tx buffer size*/ - while( (byteslefttocopy + bufferoffset) > ETH_TX_BUF_SIZE ) - { - /* Copy data to Tx buffer*/ - memcpy( (u8_t*)((u8_t*)buffer + bufferoffset), (u8_t*)((u8_t*)q->payload + payloadoffset), (ETH_TX_BUF_SIZE - bufferoffset) ); - - /* Point to next descriptor */ - DmaTxDesc = (ETH_DMADESCTypeDef *)(DmaTxDesc->Buffer2NextDescAddr); - - /* Check if the buffer is available */ - if((DmaTxDesc->Status & ETH_DMATxDesc_OWN) != (u32)RESET) - { - errval = ERR_USE; - goto error; - } - - buffer = (u8 *)(DmaTxDesc->Buffer1Addr); - - byteslefttocopy = byteslefttocopy - (ETH_TX_BUF_SIZE - bufferoffset); - payloadoffset = payloadoffset + (ETH_TX_BUF_SIZE - bufferoffset); - framelength = framelength + (ETH_TX_BUF_SIZE - bufferoffset); - bufferoffset = 0; - } - - /* Copy the remaining bytes */ - memcpy( (u8_t*)((u8_t*)buffer + bufferoffset), (u8_t*)((u8_t*)q->payload + payloadoffset), byteslefttocopy ); - bufferoffset = bufferoffset + byteslefttocopy; - framelength = framelength + byteslefttocopy; - } - - /* Note: padding and CRC for transmitted frame - are automatically inserted by DMA */ - - /* Prepare transmit descriptors to give to DMA*/ - ETH_Prepare_Transmit_Descriptors(framelength); - - errval = ERR_OK; - -error: - - /* When Transmit Underflow flag is set, clear it and issue a Transmit Poll Demand to resume transmission */ - if ((ETH->DMASR & ETH_DMASR_TUS) != (uint32_t)RESET) - { - /* Clear TUS ETHERNET DMA flag */ - ETH->DMASR = ETH_DMASR_TUS; - - /* Resume DMA transmission*/ - ETH->DMATPDR = 0; - } - return errval; -} - -/** - * Should allocate a pbuf and transfer the bytes of the incoming - * packet from the interface into the pbuf. - * - * @param netif the lwip network interface structure for this ethernetif - * @return a pbuf filled with the received packet (including MAC header) - * NULL on memory error - */ -static struct pbuf * low_level_input(struct netif *netif) -{ - struct pbuf *p, *q; - uint32_t len; - FrameTypeDef frame; - u8 *buffer; - __IO ETH_DMADESCTypeDef *DMARxDesc; - uint32_t bufferoffset = 0; - uint32_t payloadoffset = 0; - uint32_t byteslefttocopy = 0; - uint32_t i=0; - - /* get received frame */ - frame = ETH_Get_Received_Frame(); - - /* Obtain the size of the packet and put it into the "len" variable. */ - len = frame.length; - buffer = (u8 *)frame.buffer; - - /* We allocate a pbuf chain of pbufs from the Lwip buffer pool */ - p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL); - - if (p != NULL) - { - DMARxDesc = frame.descriptor; - bufferoffset = 0; - for(q = p; q != NULL; q = q->next) - { - byteslefttocopy = q->len; - payloadoffset = 0; - - /* Check if the length of bytes to copy in current pbuf is bigger than Rx buffer size*/ - while( (byteslefttocopy + bufferoffset) > ETH_RX_BUF_SIZE ) - { - /* Copy data to pbuf*/ - memcpy( (u8_t*)((u8_t*)q->payload + payloadoffset), (u8_t*)((u8_t*)buffer + bufferoffset), (ETH_RX_BUF_SIZE - bufferoffset)); - - /* Point to next descriptor */ - DMARxDesc = (ETH_DMADESCTypeDef *)(DMARxDesc->Buffer2NextDescAddr); - buffer = (unsigned char *)(DMARxDesc->Buffer1Addr); - - byteslefttocopy = byteslefttocopy - (ETH_RX_BUF_SIZE - bufferoffset); - payloadoffset = payloadoffset + (ETH_RX_BUF_SIZE - bufferoffset); - bufferoffset = 0; - } - /* Copy remaining data in pbuf */ - memcpy( (u8_t*)((u8_t*)q->payload + payloadoffset), (u8_t*)((u8_t*)buffer + bufferoffset), byteslefttocopy); - bufferoffset = bufferoffset + byteslefttocopy; - } - } - - /* Release descriptors to DMA */ - DMARxDesc =frame.descriptor; - - /* Set Own bit in Rx descriptors: gives the buffers back to DMA */ - for (i=0; iSeg_Count; i++) - { - DMARxDesc->Status = ETH_DMARxDesc_OWN; - DMARxDesc = (ETH_DMADESCTypeDef *)(DMARxDesc->Buffer2NextDescAddr); - } - - /* Clear Segment_Count */ - DMA_RX_FRAME_infos->Seg_Count =0; - - /* When Rx Buffer unavailable flag is set: clear it and resume reception */ - if ((ETH->DMASR & ETH_DMASR_RBUS) != (u32)RESET) - { - /* Clear RBUS ETHERNET DMA flag */ - ETH->DMASR = ETH_DMASR_RBUS; - /* Resume DMA reception */ - ETH->DMARPDR = 0; - } - return p; -} - -/** - * This function should be called when a packet is ready to be read - * from the interface. It uses the function low_level_input() that - * should handle the actual reception of bytes from the network - * interface. Then the type of the received packet is determined and - * the appropriate input function is called. - * - * @param netif the lwip network interface structure for this ethernetif - */ -err_t ethernetif_input(struct netif *netif) -{ - err_t err; - struct pbuf *p; - - /* move received packet into a new pbuf */ - p = low_level_input(netif); - - /* no packet could be read, silently ignore this */ - if (p == NULL) return ERR_MEM; - - /* entry point to the LwIP stack */ - err = netif->input(p, netif); - - if (err != ERR_OK) - { - LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n")); - pbuf_free(p); - } - return err; -} - -/** - * Should be called at the beginning of the program to set up the - * network interface. It calls the function low_level_init() to do the - * actual setup of the hardware. - * - * This function should be passed as a parameter to netif_add(). - * - * @param netif the lwip network interface structure for this ethernetif - * @return ERR_OK if the loopif is initialized - * ERR_MEM if private data couldn't be allocated - * any other err_t on error - */ -err_t ethernetif_init(struct netif *netif) -{ - LWIP_ASSERT("netif != NULL", (netif != NULL)); - -#if LWIP_NETIF_HOSTNAME - /* Initialize interface hostname */ - netif->hostname = "lwip"; -#endif /* LWIP_NETIF_HOSTNAME */ - - netif->name[0] = IFNAME0; - netif->name[1] = IFNAME1; - /* We directly use etharp_output() here to save a function call. - * You can instead declare your own function an call etharp_output() - * from it if you have to do some checks before sending (e.g. if link - * is available...) */ - netif->output = etharp_output; - netif->linkoutput = low_level_output; - - /* initialize the hardware */ - low_level_init(netif); - - return ERR_OK; -} \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/standalone/ethernetif.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/standalone/ethernetif.h deleted file mode 100644 index 9ff1408..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/port/stm32f2x7/standalone/ethernetif.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __ETHERNETIF_H__ -#define __ETHERNETIF_H__ - - -#include "lwip/err.h" -#include "lwip/netif.h" - -err_t ethernetif_init(struct netif *netif); -err_t ethernetif_input(struct netif *netif); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/api_lib.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/api_lib.c deleted file mode 100644 index b7ff3c9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/api_lib.c +++ /dev/null @@ -1,792 +0,0 @@ -/** - * @file - * Sequential API External module - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -/* This is the part of the API that is linked with - the application */ - -#include "lwip/opt.h" - -#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/api.h" -#include "lwip/tcpip.h" -#include "lwip/memp.h" - -#include "lwip/ip.h" -#include "lwip/raw.h" -#include "lwip/udp.h" -#include "lwip/tcp.h" - -#include - -/** - * Create a new netconn (of a specific type) that has a callback function. - * The corresponding pcb is also created. - * - * @param t the type of 'connection' to create (@see enum netconn_type) - * @param proto the IP protocol for RAW IP pcbs - * @param callback a function to call on status changes (RX available, TX'ed) - * @return a newly allocated struct netconn or - * NULL on memory error - */ -struct netconn* -netconn_new_with_proto_and_callback(enum netconn_type t, uint8_t proto, netconn_callback callback) -{ - struct netconn *conn; - struct api_msg msg; - - conn = netconn_alloc(t, callback); - if (conn != NULL) { - msg.function = do_newconn; - msg.msg.msg.n.proto = proto; - msg.msg.conn = conn; - if (TCPIP_APIMSG(&msg) != ERR_OK) { - LWIP_ASSERT("freeing conn without freeing pcb", conn->pcb.tcp == NULL); - LWIP_ASSERT("conn has no op_completed", sys_sem_valid(&conn->op_completed)); - LWIP_ASSERT("conn has no recvmbox", sys_mbox_valid(&conn->recvmbox)); -#if LWIP_TCP - LWIP_ASSERT("conn->acceptmbox shouldn't exist", !sys_mbox_valid(&conn->acceptmbox)); -#endif /* LWIP_TCP */ - sys_sem_free(&conn->op_completed); - sys_mbox_free(&conn->recvmbox); - memp_free(MEMP_NETCONN, conn); - return NULL; - } - } - return conn; -} - -/** - * Close a netconn 'connection' and free its resources. - * UDP and RAW connection are completely closed, TCP pcbs might still be in a waitstate - * after this returns. - * - * @param conn the netconn to delete - * @return ERR_OK if the connection was deleted - */ -err_t -netconn_delete(struct netconn *conn) -{ - struct api_msg msg; - - /* No ASSERT here because possible to get a (conn == NULL) if we got an accept error */ - if (conn == NULL) { - return ERR_OK; - } - - msg.function = do_delconn; - msg.msg.conn = conn; - tcpip_apimsg(&msg); - - netconn_free(conn); - - /* don't care for return value of do_delconn since it only calls void functions */ - - return ERR_OK; -} - -/** - * Get the local or remote IP address and port of a netconn. - * For RAW netconns, this returns the protocol instead of a port! - * - * @param conn the netconn to query - * @param addr a pointer to which to save the IP address - * @param port a pointer to which to save the port (or protocol for RAW) - * @param local 1 to get the local IP address, 0 to get the remote one - * @return ERR_CONN for invalid connections - * ERR_OK if the information was retrieved - */ -err_t -netconn_getaddr(struct netconn *conn, ip_addr_t *addr, uint16_t *port, uint8_t local) -{ - struct api_msg msg; - err_t err; - - LWIP_ERROR("netconn_getaddr: invalid conn", (conn != NULL), return ERR_ARG;); - LWIP_ERROR("netconn_getaddr: invalid addr", (addr != NULL), return ERR_ARG;); - LWIP_ERROR("netconn_getaddr: invalid port", (port != NULL), return ERR_ARG;); - - msg.function = do_getaddr; - msg.msg.conn = conn; - msg.msg.msg.ad.ipaddr = addr; - msg.msg.msg.ad.port = port; - msg.msg.msg.ad.local = local; - err = TCPIP_APIMSG(&msg); - - NETCONN_SET_SAFE_ERR(conn, err); - return err; -} - -/** - * Bind a netconn to a specific local IP address and port. - * Binding one netconn twice might not always be checked correctly! - * - * @param conn the netconn to bind - * @param addr the local IP address to bind the netconn to (use IP_ADDR_ANY - * to bind to all addresses) - * @param port the local port to bind the netconn to (not used for RAW) - * @return ERR_OK if bound, any other err_t on failure - */ -err_t -netconn_bind(struct netconn *conn, ip_addr_t *addr, uint16_t port) -{ - struct api_msg msg; - err_t err; - - LWIP_ERROR("netconn_bind: invalid conn", (conn != NULL), return ERR_ARG;); - - msg.function = do_bind; - msg.msg.conn = conn; - msg.msg.msg.bc.ipaddr = addr; - msg.msg.msg.bc.port = port; - err = TCPIP_APIMSG(&msg); - - NETCONN_SET_SAFE_ERR(conn, err); - return err; -} - -/** - * Connect a netconn to a specific remote IP address and port. - * - * @param conn the netconn to connect - * @param addr the remote IP address to connect to - * @param port the remote port to connect to (no used for RAW) - * @return ERR_OK if connected, return value of tcp_/udp_/raw_connect otherwise - */ -err_t -netconn_connect(struct netconn *conn, ip_addr_t *addr, uint16_t port) -{ - struct api_msg msg; - err_t err; - - LWIP_ERROR("netconn_connect: invalid conn", (conn != NULL), return ERR_ARG;); - - msg.function = do_connect; - msg.msg.conn = conn; - msg.msg.msg.bc.ipaddr = addr; - msg.msg.msg.bc.port = port; - /* This is the only function which need to not block tcpip_thread */ - err = tcpip_apimsg(&msg); - - NETCONN_SET_SAFE_ERR(conn, err); - return err; -} - -/** - * Disconnect a netconn from its current peer (only valid for UDP netconns). - * - * @param conn the netconn to disconnect - * @return TODO: return value is not set here... - */ -err_t -netconn_disconnect(struct netconn *conn) -{ - struct api_msg msg; - err_t err; - - LWIP_ERROR("netconn_disconnect: invalid conn", (conn != NULL), return ERR_ARG;); - - msg.function = do_disconnect; - msg.msg.conn = conn; - err = TCPIP_APIMSG(&msg); - - NETCONN_SET_SAFE_ERR(conn, err); - return err; -} - -/** - * Set a TCP netconn into listen mode - * - * @param conn the tcp netconn to set to listen mode - * @param backlog the listen backlog, only used if TCP_LISTEN_BACKLOG==1 - * @return ERR_OK if the netconn was set to listen (UDP and RAW netconns - * don't return any error (yet?)) - */ -err_t -netconn_listen_with_backlog(struct netconn *conn, uint8_t backlog) -{ -#if LWIP_TCP - struct api_msg msg; - err_t err; - - /* This does no harm. If TCP_LISTEN_BACKLOG is off, backlog is unused. */ - LWIP_UNUSED_ARG(backlog); - - LWIP_ERROR("netconn_listen: invalid conn", (conn != NULL), return ERR_ARG;); - - msg.function = do_listen; - msg.msg.conn = conn; -#if TCP_LISTEN_BACKLOG - msg.msg.msg.lb.backlog = backlog; -#endif /* TCP_LISTEN_BACKLOG */ - err = TCPIP_APIMSG(&msg); - - NETCONN_SET_SAFE_ERR(conn, err); - return err; -#else /* LWIP_TCP */ - LWIP_UNUSED_ARG(conn); - LWIP_UNUSED_ARG(backlog); - return ERR_ARG; -#endif /* LWIP_TCP */ -} - -/** - * Accept a new connection on a TCP listening netconn. - * - * @param conn the TCP listen netconn - * @param new_conn pointer where the new connection is stored - * @return ERR_OK if a new connection has been received or an error - * code otherwise - */ -err_t -netconn_accept(struct netconn *conn, struct netconn **new_conn) -{ -#if LWIP_TCP - struct netconn *newconn; - err_t err; -#if TCP_LISTEN_BACKLOG - struct api_msg msg; -#endif /* TCP_LISTEN_BACKLOG */ - - LWIP_ERROR("netconn_accept: invalid pointer", (new_conn != NULL), return ERR_ARG;); - *new_conn = NULL; - LWIP_ERROR("netconn_accept: invalid conn", (conn != NULL), return ERR_ARG;); - LWIP_ERROR("netconn_accept: invalid acceptmbox", sys_mbox_valid(&conn->acceptmbox), return ERR_ARG;); - - err = conn->last_err; - if (ERR_IS_FATAL(err)) { - /* don't recv on fatal errors: this might block the application task - waiting on acceptmbox forever! */ - return err; - } - -#if LWIP_SO_RCVTIMEO - if (sys_arch_mbox_fetch(&conn->acceptmbox, (void **)&newconn, conn->recv_timeout) == SYS_ARCH_TIMEOUT) { - NETCONN_SET_SAFE_ERR(conn, ERR_TIMEOUT); - return ERR_TIMEOUT; - } -#else - sys_arch_mbox_fetch(&conn->acceptmbox, (void **)&newconn, 0); -#endif /* LWIP_SO_RCVTIMEO*/ - /* Register event with callback */ - API_EVENT(conn, NETCONN_EVT_RCVMINUS, 0); - - if (newconn == NULL) { - /* connection has been aborted */ - NETCONN_SET_SAFE_ERR(conn, ERR_ABRT); - return ERR_ABRT; - } -#if TCP_LISTEN_BACKLOG - /* Let the stack know that we have accepted the connection. */ - msg.function = do_recv; - msg.msg.conn = conn; - /* don't care for the return value of do_recv */ - TCPIP_APIMSG(&msg); -#endif /* TCP_LISTEN_BACKLOG */ - - *new_conn = newconn; - /* don't set conn->last_err: it's only ERR_OK, anyway */ - return ERR_OK; -#else /* LWIP_TCP */ - LWIP_UNUSED_ARG(conn); - LWIP_UNUSED_ARG(new_conn); - return ERR_ARG; -#endif /* LWIP_TCP */ -} - -/** - * Receive data: actual implementation that doesn't care whether pbuf or netbuf - * is received - * - * @param conn the netconn from which to receive data - * @param new_buf pointer where a new pbuf/netbuf is stored when received data - * @return ERR_OK if data has been received, an error code otherwise (timeout, - * memory error or another error) - */ -static err_t -netconn_recv_data(struct netconn *conn, void **new_buf) -{ - void *buf = NULL; - uint16_t len; - err_t err; -#if LWIP_TCP - struct api_msg msg; -#endif /* LWIP_TCP */ - - LWIP_ERROR("netconn_recv: invalid pointer", (new_buf != NULL), return ERR_ARG;); - *new_buf = NULL; - LWIP_ERROR("netconn_recv: invalid conn", (conn != NULL), return ERR_ARG;); - LWIP_ERROR("netconn_accept: invalid recvmbox", sys_mbox_valid(&conn->recvmbox), return ERR_CONN;); - - err = conn->last_err; - if (ERR_IS_FATAL(err)) { - /* don't recv on fatal errors: this might block the application task - waiting on recvmbox forever! */ - /* @todo: this does not allow us to fetch data that has been put into recvmbox - before the fatal error occurred - is that a problem? */ - return err; - } - -#if LWIP_SO_RCVTIMEO - if (sys_arch_mbox_fetch(&conn->recvmbox, &buf, conn->recv_timeout) == SYS_ARCH_TIMEOUT) { - NETCONN_SET_SAFE_ERR(conn, ERR_TIMEOUT); - return ERR_TIMEOUT; - } -#else - sys_arch_mbox_fetch(&conn->recvmbox, &buf, 0); -#endif /* LWIP_SO_RCVTIMEO*/ - -#if LWIP_TCP -#if (LWIP_UDP || LWIP_RAW) - if (conn->type == NETCONN_TCP) -#endif /* (LWIP_UDP || LWIP_RAW) */ - { - if (!netconn_get_noautorecved(conn) || (buf == NULL)) { - /* Let the stack know that we have taken the data. */ - /* TODO: Speedup: Don't block and wait for the answer here - (to prevent multiple thread-switches). */ - msg.function = do_recv; - msg.msg.conn = conn; - if (buf != NULL) { - msg.msg.msg.r.len = ((struct pbuf *)buf)->tot_len; - } else { - msg.msg.msg.r.len = 1; - } - /* don't care for the return value of do_recv */ - TCPIP_APIMSG(&msg); - } - - /* If we are closed, we indicate that we no longer wish to use the socket */ - if (buf == NULL) { - API_EVENT(conn, NETCONN_EVT_RCVMINUS, 0); - /* Avoid to lose any previous error code */ - NETCONN_SET_SAFE_ERR(conn, ERR_CLSD); - return ERR_CLSD; - } - len = ((struct pbuf *)buf)->tot_len; - } -#endif /* LWIP_TCP */ -#if LWIP_TCP && (LWIP_UDP || LWIP_RAW) - else -#endif /* LWIP_TCP && (LWIP_UDP || LWIP_RAW) */ -#if (LWIP_UDP || LWIP_RAW) - { - LWIP_ASSERT("buf != NULL", buf != NULL); - len = netbuf_len((struct netbuf *)buf); - } -#endif /* (LWIP_UDP || LWIP_RAW) */ - -#if LWIP_SO_RCVBUF - SYS_ARCH_DEC(conn->recv_avail, len); -#endif /* LWIP_SO_RCVBUF */ - /* Register event with callback */ - API_EVENT(conn, NETCONN_EVT_RCVMINUS, len); - - LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_recv_data: received %p, len=%"U16_F"\n", buf, len)); - - *new_buf = buf; - /* don't set conn->last_err: it's only ERR_OK, anyway */ - return ERR_OK; -} - -/** - * Receive data (in form of a pbuf) from a TCP netconn - * - * @param conn the netconn from which to receive data - * @param new_buf pointer where a new pbuf is stored when received data - * @return ERR_OK if data has been received, an error code otherwise (timeout, - * memory error or another error) - * ERR_ARG if conn is not a TCP netconn - */ -err_t -netconn_recv_tcp_pbuf(struct netconn *conn, struct pbuf **new_buf) -{ - LWIP_ERROR("netconn_recv: invalid conn", (conn != NULL) && - netconn_type(conn) == NETCONN_TCP, return ERR_ARG;); - - return netconn_recv_data(conn, (void **)new_buf); -} - -/** - * Receive data (in form of a netbuf containing a packet buffer) from a netconn - * - * @param conn the netconn from which to receive data - * @param new_buf pointer where a new netbuf is stored when received data - * @return ERR_OK if data has been received, an error code otherwise (timeout, - * memory error or another error) - */ -err_t -netconn_recv(struct netconn *conn, struct netbuf **new_buf) -{ -#if LWIP_TCP - struct netbuf *buf = NULL; - err_t err; -#endif /* LWIP_TCP */ - - LWIP_ERROR("netconn_recv: invalid pointer", (new_buf != NULL), return ERR_ARG;); - *new_buf = NULL; - LWIP_ERROR("netconn_recv: invalid conn", (conn != NULL), return ERR_ARG;); - LWIP_ERROR("netconn_accept: invalid recvmbox", sys_mbox_valid(&conn->recvmbox), return ERR_CONN;); - -#if LWIP_TCP -#if (LWIP_UDP || LWIP_RAW) - if (conn->type == NETCONN_TCP) -#endif /* (LWIP_UDP || LWIP_RAW) */ - { - struct pbuf *p = NULL; - /* This is not a listening netconn, since recvmbox is set */ - - buf = (struct netbuf *)memp_malloc(MEMP_NETBUF); - if (buf == NULL) { - NETCONN_SET_SAFE_ERR(conn, ERR_MEM); - return ERR_MEM; - } - - err = netconn_recv_data(conn, (void **)&p); - if (err != ERR_OK) { - memp_free(MEMP_NETBUF, buf); - return err; - } - LWIP_ASSERT("p != NULL", p != NULL); - - buf->p = p; - buf->ptr = p; - buf->port = 0; - ip_addr_set_any(&buf->addr); - *new_buf = buf; - /* don't set conn->last_err: it's only ERR_OK, anyway */ - return ERR_OK; - } -#endif /* LWIP_TCP */ -#if LWIP_TCP && (LWIP_UDP || LWIP_RAW) - else -#endif /* LWIP_TCP && (LWIP_UDP || LWIP_RAW) */ - { -#if (LWIP_UDP || LWIP_RAW) - return netconn_recv_data(conn, (void **)new_buf); -#endif /* (LWIP_UDP || LWIP_RAW) */ - } -} - -/** - * TCP: update the receive window: by calling this, the application - * tells the stack that it has processed data and is able to accept - * new data. - * ATTENTION: use with care, this is mainly used for sockets! - * Can only be used when calling netconn_set_noautorecved(conn, 1) before. - * - * @param conn the netconn for which to update the receive window - * @param length amount of data processed (ATTENTION: this must be accurate!) - */ -void -netconn_recved(struct netconn *conn, uint32_t length) -{ -#if LWIP_TCP - if ((conn != NULL) && (conn->type == NETCONN_TCP) && - (netconn_get_noautorecved(conn))) { - struct api_msg msg; - /* Let the stack know that we have taken the data. */ - /* TODO: Speedup: Don't block and wait for the answer here - (to prevent multiple thread-switches). */ - msg.function = do_recv; - msg.msg.conn = conn; - msg.msg.msg.r.len = length; - /* don't care for the return value of do_recv */ - TCPIP_APIMSG(&msg); - } -#else /* LWIP_TCP */ - LWIP_UNUSED_ARG(conn); - LWIP_UNUSED_ARG(length); -#endif /* LWIP_TCP */ -} - -/** - * Send data (in form of a netbuf) to a specific remote IP address and port. - * Only to be used for UDP and RAW netconns (not TCP). - * - * @param conn the netconn over which to send data - * @param buf a netbuf containing the data to send - * @param addr the remote IP address to which to send the data - * @param port the remote port to which to send the data - * @return ERR_OK if data was sent, any other err_t on error - */ -err_t -netconn_sendto(struct netconn *conn, struct netbuf *buf, ip_addr_t *addr, uint16_t port) -{ - if (buf != NULL) { - ip_addr_set(&buf->addr, addr); - buf->port = port; - return netconn_send(conn, buf); - } - return ERR_VAL; -} - -/** - * Send data over a UDP or RAW netconn (that is already connected). - * - * @param conn the UDP or RAW netconn over which to send data - * @param buf a netbuf containing the data to send - * @return ERR_OK if data was sent, any other err_t on error - */ -err_t -netconn_send(struct netconn *conn, struct netbuf *buf) -{ - struct api_msg msg; - err_t err; - - LWIP_ERROR("netconn_send: invalid conn", (conn != NULL), return ERR_ARG;); - - LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_send: sending %"U16_F" bytes\n", buf->p->tot_len)); - msg.function = do_send; - msg.msg.conn = conn; - msg.msg.msg.b = buf; - err = TCPIP_APIMSG(&msg); - - NETCONN_SET_SAFE_ERR(conn, err); - return err; -} - -/** - * Send data over a TCP netconn. - * - * @param conn the TCP netconn over which to send data - * @param dataptr pointer to the application buffer that contains the data to send - * @param size size of the application data to send - * @param apiflags combination of following flags : - * - NETCONN_COPY: data will be copied into memory belonging to the stack - * - NETCONN_MORE: for TCP connection, PSH flag will be set on last segment sent - * - NETCONN_DONTBLOCK: only write the data if all dat can be written at once - * @param bytes_written pointer to a location that receives the number of written bytes - * @return ERR_OK if data was sent, any other err_t on error - */ -err_t -netconn_write_partly(struct netconn *conn, const void *dataptr, size_t size, - uint8_t apiflags, size_t *bytes_written) -{ - struct api_msg msg; - err_t err; - uint8_t dontblock; - - LWIP_ERROR("netconn_write: invalid conn", (conn != NULL), return ERR_ARG;); - LWIP_ERROR("netconn_write: invalid conn->type", (conn->type == NETCONN_TCP), return ERR_VAL;); - if (size == 0) { - return ERR_OK; - } - dontblock = netconn_is_nonblocking(conn) || (apiflags & NETCONN_DONTBLOCK); - if (dontblock && !bytes_written) { - /* This implies netconn_write() cannot be used for non-blocking send, since - it has no way to return the number of bytes written. */ - return ERR_VAL; - } - - /* non-blocking write sends as much */ - msg.function = do_write; - msg.msg.conn = conn; - msg.msg.msg.w.dataptr = dataptr; - msg.msg.msg.w.apiflags = apiflags; - msg.msg.msg.w.len = size; -#if LWIP_SO_SNDTIMEO - if (conn->send_timeout != 0) { - /* get the time we started, which is later compared to - sys_now() + conn->send_timeout */ - msg.msg.msg.w.time_started = sys_now(); - } else { - msg.msg.msg.w.time_started = 0; - } -#endif /* LWIP_SO_SNDTIMEO */ - - /* For locking the core: this _can_ be delayed on low memory/low send buffer, - but if it is, this is done inside api_msg.c:do_write(), so we can use the - non-blocking version here. */ - err = TCPIP_APIMSG(&msg); - if ((err == ERR_OK) && (bytes_written != NULL)) { - if (dontblock -#if LWIP_SO_SNDTIMEO - || (conn->send_timeout != 0) -#endif /* LWIP_SO_SNDTIMEO */ - ) { - /* nonblocking write: maybe the data has been sent partly */ - *bytes_written = msg.msg.msg.w.len; - } else { - /* blocking call succeeded: all data has been sent if it */ - *bytes_written = size; - } - } - - NETCONN_SET_SAFE_ERR(conn, err); - return err; -} - -/** - * Close ot shutdown a TCP netconn (doesn't delete it). - * - * @param conn the TCP netconn to close or shutdown - * @param how fully close or only shutdown one side? - * @return ERR_OK if the netconn was closed, any other err_t on error - */ -static err_t -netconn_close_shutdown(struct netconn *conn, uint8_t how) -{ - struct api_msg msg; - err_t err; - - LWIP_ERROR("netconn_close: invalid conn", (conn != NULL), return ERR_ARG;); - - msg.function = do_close; - msg.msg.conn = conn; - /* shutting down both ends is the same as closing */ - msg.msg.msg.sd.shut = how; - /* because of the LWIP_TCPIP_CORE_LOCKING implementation of do_close, - don't use TCPIP_APIMSG here */ - err = tcpip_apimsg(&msg); - - NETCONN_SET_SAFE_ERR(conn, err); - return err; -} - -/** - * Close a TCP netconn (doesn't delete it). - * - * @param conn the TCP netconn to close - * @return ERR_OK if the netconn was closed, any other err_t on error - */ -err_t -netconn_close(struct netconn *conn) -{ - /* shutting down both ends is the same as closing */ - return netconn_close_shutdown(conn, NETCONN_SHUT_RDWR); -} - -/** - * Shut down one or both sides of a TCP netconn (doesn't delete it). - * - * @param conn the TCP netconn to shut down - * @return ERR_OK if the netconn was closed, any other err_t on error - */ -err_t -netconn_shutdown(struct netconn *conn, uint8_t shut_rx, uint8_t shut_tx) -{ - return netconn_close_shutdown(conn, (shut_rx ? NETCONN_SHUT_RD : 0) | (shut_tx ? NETCONN_SHUT_WR : 0)); -} - -#if LWIP_IGMP -/** - * Join multicast groups for UDP netconns. - * - * @param conn the UDP netconn for which to change multicast addresses - * @param multiaddr IP address of the multicast group to join or leave - * @param netif_addr the IP address of the network interface on which to send - * the igmp message - * @param join_or_leave flag whether to send a join- or leave-message - * @return ERR_OK if the action was taken, any err_t on error - */ -err_t -netconn_join_leave_group(struct netconn *conn, - ip_addr_t *multiaddr, - ip_addr_t *netif_addr, - enum netconn_igmp join_or_leave) -{ - struct api_msg msg; - err_t err; - - LWIP_ERROR("netconn_join_leave_group: invalid conn", (conn != NULL), return ERR_ARG;); - - msg.function = do_join_leave_group; - msg.msg.conn = conn; - msg.msg.msg.jl.multiaddr = multiaddr; - msg.msg.msg.jl.netif_addr = netif_addr; - msg.msg.msg.jl.join_or_leave = join_or_leave; - err = TCPIP_APIMSG(&msg); - - NETCONN_SET_SAFE_ERR(conn, err); - return err; -} -#endif /* LWIP_IGMP */ - -#if LWIP_DNS -/** - * Execute a DNS query, only one IP address is returned - * - * @param name a string representation of the DNS host name to query - * @param addr a preallocated ip_addr_t where to store the resolved IP address - * @return ERR_OK: resolving succeeded - * ERR_MEM: memory error, try again later - * ERR_ARG: dns client not initialized or invalid hostname - * ERR_VAL: dns server response was invalid - */ -err_t -netconn_gethostbyname(const char *name, ip_addr_t *addr) -{ - struct dns_api_msg msg; - err_t err; - sys_sem_t sem; - - LWIP_ERROR("netconn_gethostbyname: invalid name", (name != NULL), return ERR_ARG;); - LWIP_ERROR("netconn_gethostbyname: invalid addr", (addr != NULL), return ERR_ARG;); - - err = sys_sem_new(&sem, 0); - if (err != ERR_OK) { - return err; - } - - msg.name = name; - msg.addr = addr; - msg.err = &err; - msg.sem = &sem; - - tcpip_callback(do_gethostbyname, &msg); - sys_sem_wait(&sem); - sys_sem_free(&sem); - - return err; -} -#endif /* LWIP_DNS*/ - -//Realtek add -err_t netconn_abort(struct netconn *conn) -{ - if (conn->acceptmbox != SYS_MBOX_NULL) { - /* Register event with callback */ - API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0); - sys_mbox_post(&conn->acceptmbox, NULL); - } - return ERR_OK; -} -//Realtek add end - -#endif /* LWIP_NETCONN */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/api_msg.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/api_msg.c deleted file mode 100644 index d5b47d8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/api_msg.c +++ /dev/null @@ -1,1565 +0,0 @@ -/** - * @file - * Sequential API Internal module - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/api_msg.h" - -#include "lwip/ip.h" -#include "lwip/udp.h" -#include "lwip/tcp.h" -#include "lwip/raw.h" - -#include "lwip/memp.h" -#include "lwip/tcpip.h" -#include "lwip/igmp.h" -#include "lwip/dns.h" - -#include - -#define SET_NONBLOCKING_CONNECT(conn, val) do { if(val) { \ - (conn)->flags |= NETCONN_FLAG_IN_NONBLOCKING_CONNECT; \ -} else { \ - (conn)->flags &= ~ NETCONN_FLAG_IN_NONBLOCKING_CONNECT; }} while(0) -#define IN_NONBLOCKING_CONNECT(conn) (((conn)->flags & NETCONN_FLAG_IN_NONBLOCKING_CONNECT) != 0) - -/* forward declarations */ -#if LWIP_TCP -static err_t do_writemore(struct netconn *conn); -static void do_close_internal(struct netconn *conn); -#endif - -#if LWIP_RAW -/** - * Receive callback function for RAW netconns. - * Doesn't 'eat' the packet, only references it and sends it to - * conn->recvmbox - * - * @see raw.h (struct raw_pcb.recv) for parameters and return value - */ -static uint8_t -recv_raw(void *arg, struct raw_pcb *pcb, struct pbuf *p, - ip_addr_t *addr) -{ - struct pbuf *q; - struct netbuf *buf; - struct netconn *conn; - - LWIP_UNUSED_ARG(addr); - conn = (struct netconn *)arg; - - if ((conn != NULL) && sys_mbox_valid(&conn->recvmbox)) { -#if LWIP_SO_RCVBUF - int recv_avail; - SYS_ARCH_GET(conn->recv_avail, recv_avail); - if ((recv_avail + (int)(p->tot_len)) > conn->recv_bufsize) { - return 0; - } -#endif /* LWIP_SO_RCVBUF */ - /* copy the whole packet into new pbufs */ - q = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM); - if(q != NULL) { - if (pbuf_copy(q, p) != ERR_OK) { - pbuf_free(q); - q = NULL; - } - } - - if (q != NULL) { - uint16_t len; - buf = (struct netbuf *)memp_malloc(MEMP_NETBUF); - if (buf == NULL) { - pbuf_free(q); - return 0; - } - - buf->p = q; - buf->ptr = q; - ip_addr_copy(buf->addr, *ip_current_src_addr()); - buf->port = pcb->protocol; - - len = q->tot_len; - if (sys_mbox_trypost(&conn->recvmbox, buf) != ERR_OK) { - netbuf_delete(buf); - return 0; - } else { -#if LWIP_SO_RCVBUF - SYS_ARCH_INC(conn->recv_avail, len); -#endif /* LWIP_SO_RCVBUF */ - /* Register event with callback */ - API_EVENT(conn, NETCONN_EVT_RCVPLUS, len); - } - } - } - - return 0; /* do not eat the packet */ -} -#endif /* LWIP_RAW*/ - -#if LWIP_UDP -/** - * Receive callback function for UDP netconns. - * Posts the packet to conn->recvmbox or deletes it on memory error. - * - * @see udp.h (struct udp_pcb.recv) for parameters - */ -static void -recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p, - ip_addr_t *addr, uint16_t port) -{ - struct netbuf *buf; - struct netconn *conn; - uint16_t len; -#if LWIP_SO_RCVBUF - int recv_avail; -#endif /* LWIP_SO_RCVBUF */ - - LWIP_UNUSED_ARG(pcb); /* only used for asserts... */ - LWIP_ASSERT("recv_udp must have a pcb argument", pcb != NULL); - LWIP_ASSERT("recv_udp must have an argument", arg != NULL); - conn = (struct netconn *)arg; - LWIP_ASSERT("recv_udp: recv for wrong pcb!", conn->pcb.udp == pcb); - -#if LWIP_SO_RCVBUF - SYS_ARCH_GET(conn->recv_avail, recv_avail); - if ((conn == NULL) || !sys_mbox_valid(&conn->recvmbox) || - ((recv_avail + (int)(p->tot_len)) > conn->recv_bufsize)) { -#else /* LWIP_SO_RCVBUF */ - if ((conn == NULL) || !sys_mbox_valid(&conn->recvmbox)) { -#endif /* LWIP_SO_RCVBUF */ - pbuf_free(p); - return; - } - - buf = (struct netbuf *)memp_malloc(MEMP_NETBUF); - if (buf == NULL) { - pbuf_free(p); - return; - } else { - buf->p = p; - buf->ptr = p; - ip_addr_set(&buf->addr, addr); - buf->port = port; -#if LWIP_NETBUF_RECVINFO - { - const struct ip_hdr* iphdr = ip_current_header(); - /* get the UDP header - always in the first pbuf, ensured by udp_input */ - const struct udp_hdr* udphdr = (void*)(((char*)iphdr) + IPH_LEN(iphdr)); -#if LWIP_CHECKSUM_ON_COPY - buf->flags = NETBUF_FLAG_DESTADDR; -#endif /* LWIP_CHECKSUM_ON_COPY */ - ip_addr_set(&buf->toaddr, ip_current_dest_addr()); - buf->toport_chksum = udphdr->dest; - } -#endif /* LWIP_NETBUF_RECVINFO */ - } - - len = p->tot_len; - if (sys_mbox_trypost(&conn->recvmbox, buf) != ERR_OK) { - netbuf_delete(buf); - return; - } else { -#if LWIP_SO_RCVBUF - SYS_ARCH_INC(conn->recv_avail, len); -#endif /* LWIP_SO_RCVBUF */ - /* Register event with callback */ - API_EVENT(conn, NETCONN_EVT_RCVPLUS, len); - } -} -#endif /* LWIP_UDP */ - -#if LWIP_TCP -/** - * Receive callback function for TCP netconns. - * Posts the packet to conn->recvmbox, but doesn't delete it on errors. - * - * @see tcp.h (struct tcp_pcb.recv) for parameters and return value - */ -static err_t -recv_tcp(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) -{ - struct netconn *conn; - uint16_t len; - - LWIP_UNUSED_ARG(pcb); - LWIP_ASSERT("recv_tcp must have a pcb argument", pcb != NULL); - LWIP_ASSERT("recv_tcp must have an argument", arg != NULL); - conn = (struct netconn *)arg; - LWIP_ASSERT("recv_tcp: recv for wrong pcb!", conn->pcb.tcp == pcb); - - if (conn == NULL) { - return ERR_VAL; - } - if (!sys_mbox_valid(&conn->recvmbox)) { - /* recvmbox already deleted */ - if (p != NULL) { - tcp_recved(pcb, p->tot_len); - pbuf_free(p); - } - return ERR_OK; - } - /* Unlike for UDP or RAW pcbs, don't check for available space - using recv_avail since that could break the connection - (data is already ACKed) */ - - /* don't overwrite fatal errors! */ - NETCONN_SET_SAFE_ERR(conn, err); - - if (p != NULL) { - len = p->tot_len; - } else { - len = 0; - } - - if (sys_mbox_trypost(&conn->recvmbox, p) != ERR_OK) { - /* don't deallocate p: it is presented to us later again from tcp_fasttmr! */ - return ERR_MEM; - } else { -#if LWIP_SO_RCVBUF - SYS_ARCH_INC(conn->recv_avail, len); -#endif /* LWIP_SO_RCVBUF */ - /* Register event with callback */ - API_EVENT(conn, NETCONN_EVT_RCVPLUS, len); - } - - return ERR_OK; -} - -/** - * Poll callback function for TCP netconns. - * Wakes up an application thread that waits for a connection to close - * or data to be sent. The application thread then takes the - * appropriate action to go on. - * - * Signals the conn->sem. - * netconn_close waits for conn->sem if closing failed. - * - * @see tcp.h (struct tcp_pcb.poll) for parameters and return value - */ -static err_t -poll_tcp(void *arg, struct tcp_pcb *pcb) -{ - struct netconn *conn = (struct netconn *)arg; - - LWIP_UNUSED_ARG(pcb); - LWIP_ASSERT("conn != NULL", (conn != NULL)); - - if (conn->state == NETCONN_WRITE) { - do_writemore(conn); - } else if (conn->state == NETCONN_CLOSE) { - do_close_internal(conn); - } - /* @todo: implement connect timeout here? */ - - /* Did a nonblocking write fail before? Then check available write-space. */ - if (conn->flags & NETCONN_FLAG_CHECK_WRITESPACE) { - /* If the queued byte- or pbuf-count drops below the configured low-water limit, - let select mark this pcb as writable again. */ - if ((conn->pcb.tcp != NULL) && (tcp_sndbuf(conn->pcb.tcp) > TCP_SNDLOWAT) && - (tcp_sndqueuelen(conn->pcb.tcp) < TCP_SNDQUEUELOWAT)) { - conn->flags &= ~NETCONN_FLAG_CHECK_WRITESPACE; - API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0); - } - } - - return ERR_OK; -} - -/** - * Sent callback function for TCP netconns. - * Signals the conn->sem and calls API_EVENT. - * netconn_write waits for conn->sem if send buffer is low. - * - * @see tcp.h (struct tcp_pcb.sent) for parameters and return value - */ -static err_t -sent_tcp(void *arg, struct tcp_pcb *pcb, uint16_t len) -{ - struct netconn *conn = (struct netconn *)arg; - - LWIP_UNUSED_ARG(pcb); - LWIP_ASSERT("conn != NULL", (conn != NULL)); - - if (conn->state == NETCONN_WRITE) { - do_writemore(conn); - } else if (conn->state == NETCONN_CLOSE) { - do_close_internal(conn); - } - - if (conn) { - /* If the queued byte- or pbuf-count drops below the configured low-water limit, - let select mark this pcb as writable again. */ - if ((conn->pcb.tcp != NULL) && (tcp_sndbuf(conn->pcb.tcp) > TCP_SNDLOWAT) && - (tcp_sndqueuelen(conn->pcb.tcp) < TCP_SNDQUEUELOWAT)) { - conn->flags &= ~NETCONN_FLAG_CHECK_WRITESPACE; - API_EVENT(conn, NETCONN_EVT_SENDPLUS, len); - } - } - - return ERR_OK; -} - -/** - * Error callback function for TCP netconns. - * Signals conn->sem, posts to all conn mboxes and calls API_EVENT. - * The application thread has then to decide what to do. - * - * @see tcp.h (struct tcp_pcb.err) for parameters - */ -static void -err_tcp(void *arg, err_t err) -{ - struct netconn *conn; - enum netconn_state old_state; - SYS_ARCH_DECL_PROTECT(lev); - - conn = (struct netconn *)arg; - LWIP_ASSERT("conn != NULL", (conn != NULL)); - - conn->pcb.tcp = NULL; - - /* no check since this is always fatal! */ - SYS_ARCH_PROTECT(lev); - conn->last_err = err; - SYS_ARCH_UNPROTECT(lev); - - /* reset conn->state now before waking up other threads */ - old_state = conn->state; - conn->state = NETCONN_NONE; - - /* Notify the user layer about a connection error. Used to signal - select. */ - API_EVENT(conn, NETCONN_EVT_ERROR, 0); - /* Try to release selects pending on 'read' or 'write', too. - They will get an error if they actually try to read or write. */ - API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0); - API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0); - - /* pass NULL-message to recvmbox to wake up pending recv */ - if (sys_mbox_valid(&conn->recvmbox)) { - /* use trypost to prevent deadlock */ - sys_mbox_trypost(&conn->recvmbox, NULL); - } - /* pass NULL-message to acceptmbox to wake up pending accept */ - if (sys_mbox_valid(&conn->acceptmbox)) { - /* use trypost to preven deadlock */ - sys_mbox_trypost(&conn->acceptmbox, NULL); - } - - if ((old_state == NETCONN_WRITE) || (old_state == NETCONN_CLOSE) || - (old_state == NETCONN_CONNECT)) { - /* calling do_writemore/do_close_internal is not necessary - since the pcb has already been deleted! */ - int was_nonblocking_connect = IN_NONBLOCKING_CONNECT(conn); - SET_NONBLOCKING_CONNECT(conn, 0); - - if (!was_nonblocking_connect) { - /* set error return code */ - LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL); - conn->current_msg->err = err; - conn->current_msg = NULL; - /* wake up the waiting task */ - sys_sem_signal(&conn->op_completed); - } - } else { - LWIP_ASSERT("conn->current_msg == NULL", conn->current_msg == NULL); - } -} - -/** - * Setup a tcp_pcb with the correct callback function pointers - * and their arguments. - * - * @param conn the TCP netconn to setup - */ -static void -setup_tcp(struct netconn *conn) -{ - struct tcp_pcb *pcb; - - pcb = conn->pcb.tcp; - tcp_arg(pcb, conn); - tcp_recv(pcb, recv_tcp); - tcp_sent(pcb, sent_tcp); - tcp_poll(pcb, poll_tcp, 4); - tcp_err(pcb, err_tcp); -} - -/** - * Accept callback function for TCP netconns. - * Allocates a new netconn and posts that to conn->acceptmbox. - * - * @see tcp.h (struct tcp_pcb_listen.accept) for parameters and return value - */ -static err_t -accept_function(void *arg, struct tcp_pcb *newpcb, err_t err) -{ - struct netconn *newconn; - struct netconn *conn = (struct netconn *)arg; - - LWIP_DEBUGF(API_MSG_DEBUG, ("accept_function: newpcb->tate: %s\n", tcp_debug_state_str(newpcb->state))); - - if (!sys_mbox_valid(&conn->acceptmbox)) { - LWIP_DEBUGF(API_MSG_DEBUG, ("accept_function: acceptmbox already deleted\n")); - return ERR_VAL; - } - - /* We have to set the callback here even though - * the new socket is unknown. conn->socket is marked as -1. */ - newconn = netconn_alloc(conn->type, conn->callback); - if (newconn == NULL) { - return ERR_MEM; - } - newconn->pcb.tcp = newpcb; - setup_tcp(newconn); - /* no protection: when creating the pcb, the netconn is not yet known - to the application thread */ - newconn->last_err = err; - - if (sys_mbox_trypost(&conn->acceptmbox, newconn) != ERR_OK) { - /* When returning != ERR_OK, the pcb is aborted in tcp_process(), - so do nothing here! */ - /* remove all references to this netconn from the pcb */ - struct tcp_pcb* pcb = newconn->pcb.tcp; - tcp_arg(pcb, NULL); - tcp_recv(pcb, NULL); - tcp_sent(pcb, NULL); - tcp_poll(pcb, NULL, 4); - tcp_err(pcb, NULL); - /* remove reference from to the pcb from this netconn */ - newconn->pcb.tcp = NULL; - /* no need to drain since we know the recvmbox is empty. */ - sys_mbox_free(&newconn->recvmbox); - sys_mbox_set_invalid(&newconn->recvmbox); - netconn_free(newconn); - return ERR_MEM; - } else { - /* Register event with callback */ - API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0); - } - - return ERR_OK; -} -#endif /* LWIP_TCP */ - -/** - * Create a new pcb of a specific type. - * Called from do_newconn(). - * - * @param msg the api_msg_msg describing the connection type - * @return msg->conn->err, but the return value is currently ignored - */ -static void -pcb_new(struct api_msg_msg *msg) -{ - LWIP_ASSERT("pcb_new: pcb already allocated", msg->conn->pcb.tcp == NULL); - - /* Allocate a PCB for this connection */ - switch(NETCONNTYPE_GROUP(msg->conn->type)) { -#if LWIP_RAW - case NETCONN_RAW: - msg->conn->pcb.raw = raw_new(msg->msg.n.proto); - if(msg->conn->pcb.raw == NULL) { - msg->err = ERR_MEM; - break; - } - raw_recv(msg->conn->pcb.raw, recv_raw, msg->conn); - break; -#endif /* LWIP_RAW */ -#if LWIP_UDP - case NETCONN_UDP: - msg->conn->pcb.udp = udp_new(); - if(msg->conn->pcb.udp == NULL) { - msg->err = ERR_MEM; - break; - } -#if LWIP_UDPLITE - if (msg->conn->type==NETCONN_UDPLITE) { - udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_UDPLITE); - } -#endif /* LWIP_UDPLITE */ - if (msg->conn->type==NETCONN_UDPNOCHKSUM) { - udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_NOCHKSUM); - } - udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn); - break; -#endif /* LWIP_UDP */ -#if LWIP_TCP - case NETCONN_TCP: - msg->conn->pcb.tcp = tcp_new(); - if(msg->conn->pcb.tcp == NULL) { - msg->err = ERR_MEM; - break; - } - setup_tcp(msg->conn); - break; -#endif /* LWIP_TCP */ - default: - /* Unsupported netconn type, e.g. protocol disabled */ - msg->err = ERR_VAL; - break; - } -} - -/** - * Create a new pcb of a specific type inside a netconn. - * Called from netconn_new_with_proto_and_callback. - * - * @param msg the api_msg_msg describing the connection type - */ -void -do_newconn(struct api_msg_msg *msg) -{ - msg->err = ERR_OK; - if(msg->conn->pcb.tcp == NULL) { - pcb_new(msg); - } - /* Else? This "new" connection already has a PCB allocated. */ - /* Is this an error condition? Should it be deleted? */ - /* We currently just are happy and return. */ - - TCPIP_APIMSG_ACK(msg); -} - -/** - * Create a new netconn (of a specific type) that has a callback function. - * The corresponding pcb is NOT created! - * - * @param t the type of 'connection' to create (@see enum netconn_type) - * @param proto the IP protocol for RAW IP pcbs - * @param callback a function to call on status changes (RX available, TX'ed) - * @return a newly allocated struct netconn or - * NULL on memory error - */ -struct netconn* -netconn_alloc(enum netconn_type t, netconn_callback callback) -{ - struct netconn *conn; - int size = 0; - - conn = (struct netconn *)memp_malloc(MEMP_NETCONN); - if (conn == NULL) { - return NULL; - } - - conn->last_err = ERR_OK; - conn->type = t; - conn->pcb.tcp = NULL; - -#if (DEFAULT_RAW_RECVMBOX_SIZE == DEFAULT_UDP_RECVMBOX_SIZE) && \ - (DEFAULT_RAW_RECVMBOX_SIZE == DEFAULT_TCP_RECVMBOX_SIZE) - size = DEFAULT_RAW_RECVMBOX_SIZE; -#else - switch(NETCONNTYPE_GROUP(t)) { -#if LWIP_RAW - case NETCONN_RAW: - size = DEFAULT_RAW_RECVMBOX_SIZE; - break; -#endif /* LWIP_RAW */ -#if LWIP_UDP - case NETCONN_UDP: - size = DEFAULT_UDP_RECVMBOX_SIZE; - break; -#endif /* LWIP_UDP */ -#if LWIP_TCP - case NETCONN_TCP: - size = DEFAULT_TCP_RECVMBOX_SIZE; - break; -#endif /* LWIP_TCP */ - default: - LWIP_ASSERT("netconn_alloc: undefined netconn_type", 0); - goto free_and_return; - } -#endif - - if (sys_sem_new(&conn->op_completed, 0) != ERR_OK) { - goto free_and_return; - } - if (sys_mbox_new(&conn->recvmbox, size) != ERR_OK) { - sys_sem_free(&conn->op_completed); - goto free_and_return; - } - -#if LWIP_TCP - sys_mbox_set_invalid(&conn->acceptmbox); -#endif - conn->state = NETCONN_NONE; -#if LWIP_SOCKET - /* initialize socket to -1 since 0 is a valid socket */ - conn->socket = -1; -#endif /* LWIP_SOCKET */ - conn->callback = callback; -#if LWIP_TCP - conn->current_msg = NULL; - conn->write_offset = 0; -#endif /* LWIP_TCP */ -#if LWIP_SO_SNDTIMEO - conn->send_timeout = 0; -#endif /* LWIP_SO_SNDTIMEO */ -#if LWIP_SO_RCVTIMEO - conn->recv_timeout = 0; -#endif /* LWIP_SO_RCVTIMEO */ -#if LWIP_SO_RCVBUF - conn->recv_bufsize = RECV_BUFSIZE_DEFAULT; - conn->recv_avail = 0; -#endif /* LWIP_SO_RCVBUF */ - conn->flags = 0; - return conn; -free_and_return: - memp_free(MEMP_NETCONN, conn); - return NULL; -} - -/** - * Delete a netconn and all its resources. - * The pcb is NOT freed (since we might not be in the right thread context do this). - * - * @param conn the netconn to free - */ -void -netconn_free(struct netconn *conn) -{ - LWIP_ASSERT("PCB must be deallocated outside this function", conn->pcb.tcp == NULL); - LWIP_ASSERT("recvmbox must be deallocated before calling this function", - !sys_mbox_valid(&conn->recvmbox)); -#if LWIP_TCP - LWIP_ASSERT("acceptmbox must be deallocated before calling this function", - !sys_mbox_valid(&conn->acceptmbox)); -#endif /* LWIP_TCP */ - - sys_sem_free(&conn->op_completed); - sys_sem_set_invalid(&conn->op_completed); - - memp_free(MEMP_NETCONN, conn); -} - -/** - * Delete rcvmbox and acceptmbox of a netconn and free the left-over data in - * these mboxes - * - * @param conn the netconn to free - * @bytes_drained bytes drained from recvmbox - * @accepts_drained pending connections drained from acceptmbox - */ -static void -netconn_drain(struct netconn *conn) -{ - void *mem; -#if LWIP_TCP - struct pbuf *p; -#endif /* LWIP_TCP */ - - /* This runs in tcpip_thread, so we don't need to lock against rx packets */ - - /* Delete and drain the recvmbox. */ - if (sys_mbox_valid(&conn->recvmbox)) { - while (sys_mbox_tryfetch(&conn->recvmbox, &mem) != SYS_MBOX_EMPTY) { -#if LWIP_TCP - if (conn->type == NETCONN_TCP) { - if(mem != NULL) { - p = (struct pbuf*)mem; - /* pcb might be set to NULL already by err_tcp() */ - if (conn->pcb.tcp != NULL) { - tcp_recved(conn->pcb.tcp, p->tot_len); - } - pbuf_free(p); - } - } else -#endif /* LWIP_TCP */ - { - netbuf_delete((struct netbuf *)mem); - } - } - sys_mbox_free(&conn->recvmbox); - sys_mbox_set_invalid(&conn->recvmbox); - } - - /* Delete and drain the acceptmbox. */ -#if LWIP_TCP - if (sys_mbox_valid(&conn->acceptmbox)) { - while (sys_mbox_tryfetch(&conn->acceptmbox, &mem) != SYS_MBOX_EMPTY) { - struct netconn *newconn = (struct netconn *)mem; - /* Only tcp pcbs have an acceptmbox, so no need to check conn->type */ - /* pcb might be set to NULL already by err_tcp() */ - if (conn->pcb.tcp != NULL) { - tcp_accepted(conn->pcb.tcp); - } - /* drain recvmbox */ - netconn_drain(newconn); - if (newconn->pcb.tcp != NULL) { - tcp_abort(newconn->pcb.tcp); - newconn->pcb.tcp = NULL; - } - netconn_free(newconn); - } - sys_mbox_free(&conn->acceptmbox); - sys_mbox_set_invalid(&conn->acceptmbox); - } -#endif /* LWIP_TCP */ -} - -#if LWIP_TCP -/** - * Internal helper function to close a TCP netconn: since this sometimes - * doesn't work at the first attempt, this function is called from multiple - * places. - * - * @param conn the TCP netconn to close - */ -static void -do_close_internal(struct netconn *conn) -{ - err_t err; - uint8_t shut, shut_rx, shut_tx, close; - - LWIP_ASSERT("invalid conn", (conn != NULL)); - LWIP_ASSERT("this is for tcp netconns only", (conn->type == NETCONN_TCP)); - LWIP_ASSERT("conn must be in state NETCONN_CLOSE", (conn->state == NETCONN_CLOSE)); - LWIP_ASSERT("pcb already closed", (conn->pcb.tcp != NULL)); - LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL); - - shut = conn->current_msg->msg.sd.shut; - shut_rx = shut & NETCONN_SHUT_RD; - shut_tx = shut & NETCONN_SHUT_WR; - /* shutting down both ends is the same as closing */ - close = shut == NETCONN_SHUT_RDWR; - - /* Set back some callback pointers */ - if (close) { - tcp_arg(conn->pcb.tcp, NULL); - } - if (conn->pcb.tcp->state == LISTEN) { - tcp_accept(conn->pcb.tcp, NULL); - } else { - /* some callbacks have to be reset if tcp_close is not successful */ - if (shut_rx) { - tcp_recv(conn->pcb.tcp, NULL); - tcp_accept(conn->pcb.tcp, NULL); - } - if (shut_tx) { - tcp_sent(conn->pcb.tcp, NULL); - } - if (close) { - tcp_poll(conn->pcb.tcp, NULL, 4); - tcp_err(conn->pcb.tcp, NULL); - } - } - /* Try to close the connection */ - if (close) { - err = tcp_close(conn->pcb.tcp); - } else { - err = tcp_shutdown(conn->pcb.tcp, shut_rx, shut_tx); - } - if (err == ERR_OK) { - /* Closing succeeded */ - conn->current_msg->err = ERR_OK; - conn->current_msg = NULL; - conn->state = NETCONN_NONE; - if (close) { - /* Set back some callback pointers as conn is going away */ - conn->pcb.tcp = NULL; - /* Trigger select() in socket layer. Make sure everybody notices activity - on the connection, error first! */ - API_EVENT(conn, NETCONN_EVT_ERROR, 0); - } - if (shut_rx) { - API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0); - } - if (shut_tx) { - API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0); - } - /* wake up the application task */ - sys_sem_signal(&conn->op_completed); - } else { - /* Closing failed, restore some of the callbacks */ - /* Closing of listen pcb will never fail! */ - LWIP_ASSERT("Closing a listen pcb may not fail!", (conn->pcb.tcp->state != LISTEN)); - tcp_sent(conn->pcb.tcp, sent_tcp); - tcp_poll(conn->pcb.tcp, poll_tcp, 4); - tcp_err(conn->pcb.tcp, err_tcp); - tcp_arg(conn->pcb.tcp, conn); - /* don't restore recv callback: we don't want to receive any more data */ - } - /* If closing didn't succeed, we get called again either - from poll_tcp or from sent_tcp */ -} -#endif /* LWIP_TCP */ - -/** - * Delete the pcb inside a netconn. - * Called from netconn_delete. - * - * @param msg the api_msg_msg pointing to the connection - */ -void -do_delconn(struct api_msg_msg *msg) -{ - /* @todo TCP: abort running write/connect? */ - if ((msg->conn->state != NETCONN_NONE) && - (msg->conn->state != NETCONN_LISTEN) && - (msg->conn->state != NETCONN_CONNECT)) { - /* this only happens for TCP netconns */ - LWIP_ASSERT("msg->conn->type == NETCONN_TCP", msg->conn->type == NETCONN_TCP); - msg->err = ERR_INPROGRESS; - } else { - LWIP_ASSERT("blocking connect in progress", - (msg->conn->state != NETCONN_CONNECT) || IN_NONBLOCKING_CONNECT(msg->conn)); - /* Drain and delete mboxes */ - netconn_drain(msg->conn); - - if (msg->conn->pcb.tcp != NULL) { - - switch (NETCONNTYPE_GROUP(msg->conn->type)) { -#if LWIP_RAW - case NETCONN_RAW: - raw_remove(msg->conn->pcb.raw); - break; -#endif /* LWIP_RAW */ -#if LWIP_UDP - case NETCONN_UDP: - msg->conn->pcb.udp->recv_arg = NULL; - udp_remove(msg->conn->pcb.udp); - break; -#endif /* LWIP_UDP */ -#if LWIP_TCP - case NETCONN_TCP: - LWIP_ASSERT("already writing or closing", msg->conn->current_msg == NULL && - msg->conn->write_offset == 0); - msg->conn->state = NETCONN_CLOSE; - msg->msg.sd.shut = NETCONN_SHUT_RDWR; - msg->conn->current_msg = msg; - do_close_internal(msg->conn); - /* API_EVENT is called inside do_close_internal, before releasing - the application thread, so we can return at this point! */ - return; -#endif /* LWIP_TCP */ - default: - break; - } - msg->conn->pcb.tcp = NULL; - } - /* tcp netconns don't come here! */ - - /* @todo: this lets select make the socket readable and writable, - which is wrong! errfd instead? */ - API_EVENT(msg->conn, NETCONN_EVT_RCVPLUS, 0); - API_EVENT(msg->conn, NETCONN_EVT_SENDPLUS, 0); - } - if (sys_sem_valid(&msg->conn->op_completed)) { - sys_sem_signal(&msg->conn->op_completed); - } -} - -/** - * Bind a pcb contained in a netconn - * Called from netconn_bind. - * - * @param msg the api_msg_msg pointing to the connection and containing - * the IP address and port to bind to - */ -void -do_bind(struct api_msg_msg *msg) -{ - if (ERR_IS_FATAL(msg->conn->last_err)) { - msg->err = msg->conn->last_err; - } else { - msg->err = ERR_VAL; - if (msg->conn->pcb.tcp != NULL) { - switch (NETCONNTYPE_GROUP(msg->conn->type)) { -#if LWIP_RAW - case NETCONN_RAW: - msg->err = raw_bind(msg->conn->pcb.raw, msg->msg.bc.ipaddr); - break; -#endif /* LWIP_RAW */ -#if LWIP_UDP - case NETCONN_UDP: - msg->err = udp_bind(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port); - break; -#endif /* LWIP_UDP */ -#if LWIP_TCP - case NETCONN_TCP: - msg->err = tcp_bind(msg->conn->pcb.tcp, msg->msg.bc.ipaddr, msg->msg.bc.port); - break; -#endif /* LWIP_TCP */ - default: - break; - } - } - } - TCPIP_APIMSG_ACK(msg); -} - -#if LWIP_TCP -/** - * TCP callback function if a connection (opened by tcp_connect/do_connect) has - * been established (or reset by the remote host). - * - * @see tcp.h (struct tcp_pcb.connected) for parameters and return values - */ -static err_t -do_connected(void *arg, struct tcp_pcb *pcb, err_t err) -{ - struct netconn *conn; - int was_blocking; - - LWIP_UNUSED_ARG(pcb); - - conn = (struct netconn *)arg; - - if (conn == NULL) { - return ERR_VAL; - } - - LWIP_ASSERT("conn->state == NETCONN_CONNECT", conn->state == NETCONN_CONNECT); - LWIP_ASSERT("(conn->current_msg != NULL) || conn->in_non_blocking_connect", - (conn->current_msg != NULL) || IN_NONBLOCKING_CONNECT(conn)); - - if (conn->current_msg != NULL) { - conn->current_msg->err = err; - } - if ((conn->type == NETCONN_TCP) && (err == ERR_OK)) { - setup_tcp(conn); - } - was_blocking = !IN_NONBLOCKING_CONNECT(conn); - SET_NONBLOCKING_CONNECT(conn, 0); - conn->current_msg = NULL; - conn->state = NETCONN_NONE; - if (!was_blocking) { - NETCONN_SET_SAFE_ERR(conn, ERR_OK); - } - API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0); - - if (was_blocking) { - sys_sem_signal(&conn->op_completed); - } - return ERR_OK; -} -#endif /* LWIP_TCP */ - -/** - * Connect a pcb contained inside a netconn - * Called from netconn_connect. - * - * @param msg the api_msg_msg pointing to the connection and containing - * the IP address and port to connect to - */ -void -do_connect(struct api_msg_msg *msg) -{ - if (msg->conn->pcb.tcp == NULL) { - /* This may happen when calling netconn_connect() a second time */ - msg->err = ERR_CLSD; - } else { - switch (NETCONNTYPE_GROUP(msg->conn->type)) { -#if LWIP_RAW - case NETCONN_RAW: - msg->err = raw_connect(msg->conn->pcb.raw, msg->msg.bc.ipaddr); - break; -#endif /* LWIP_RAW */ -#if LWIP_UDP - case NETCONN_UDP: - msg->err = udp_connect(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port); - break; -#endif /* LWIP_UDP */ -#if LWIP_TCP - case NETCONN_TCP: - /* Prevent connect while doing any other action. */ - if (msg->conn->state != NETCONN_NONE) { - msg->err = ERR_ISCONN; - } else { - setup_tcp(msg->conn); - msg->err = tcp_connect(msg->conn->pcb.tcp, msg->msg.bc.ipaddr, - msg->msg.bc.port, do_connected); - if (msg->err == ERR_OK) { - uint8_t non_blocking = netconn_is_nonblocking(msg->conn); - msg->conn->state = NETCONN_CONNECT; - SET_NONBLOCKING_CONNECT(msg->conn, non_blocking); - if (non_blocking) { - msg->err = ERR_INPROGRESS; - } else { - msg->conn->current_msg = msg; - /* sys_sem_signal() is called from do_connected (or err_tcp()), - * when the connection is established! */ - return; - } - } - } - break; -#endif /* LWIP_TCP */ - default: - LWIP_ERROR("Invalid netconn type", 0, do{ msg->err = ERR_VAL; }while(0)); - break; - } - } - sys_sem_signal(&msg->conn->op_completed); -} - -/** - * Connect a pcb contained inside a netconn - * Only used for UDP netconns. - * Called from netconn_disconnect. - * - * @param msg the api_msg_msg pointing to the connection to disconnect - */ -void -do_disconnect(struct api_msg_msg *msg) -{ -#if LWIP_UDP - if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_UDP) { - udp_disconnect(msg->conn->pcb.udp); - msg->err = ERR_OK; - } else -#endif /* LWIP_UDP */ - { - msg->err = ERR_VAL; - } - TCPIP_APIMSG_ACK(msg); -} - -#if LWIP_TCP -/** - * Set a TCP pcb contained in a netconn into listen mode - * Called from netconn_listen. - * - * @param msg the api_msg_msg pointing to the connection - */ -void -do_listen(struct api_msg_msg *msg) -{ - if (ERR_IS_FATAL(msg->conn->last_err)) { - msg->err = msg->conn->last_err; - } else { - msg->err = ERR_CONN; - if (msg->conn->pcb.tcp != NULL) { - if (msg->conn->type == NETCONN_TCP) { - if (msg->conn->state == NETCONN_NONE) { -#if TCP_LISTEN_BACKLOG - struct tcp_pcb* lpcb = tcp_listen_with_backlog(msg->conn->pcb.tcp, msg->msg.lb.backlog); -#else /* TCP_LISTEN_BACKLOG */ - struct tcp_pcb* lpcb = tcp_listen(msg->conn->pcb.tcp); -#endif /* TCP_LISTEN_BACKLOG */ - if (lpcb == NULL) { - /* in this case, the old pcb is still allocated */ - msg->err = ERR_MEM; - } else { - /* delete the recvmbox and allocate the acceptmbox */ - if (sys_mbox_valid(&msg->conn->recvmbox)) { - /** @todo: should we drain the recvmbox here? */ - sys_mbox_free(&msg->conn->recvmbox); - sys_mbox_set_invalid(&msg->conn->recvmbox); - } - msg->err = ERR_OK; - if (!sys_mbox_valid(&msg->conn->acceptmbox)) { - msg->err = sys_mbox_new(&msg->conn->acceptmbox, DEFAULT_ACCEPTMBOX_SIZE); - } - if (msg->err == ERR_OK) { - msg->conn->state = NETCONN_LISTEN; - msg->conn->pcb.tcp = lpcb; - tcp_arg(msg->conn->pcb.tcp, msg->conn); - tcp_accept(msg->conn->pcb.tcp, accept_function); - } else { - /* since the old pcb is already deallocated, free lpcb now */ - tcp_close(lpcb); - msg->conn->pcb.tcp = NULL; - } - } - } - } else { - msg->err = ERR_ARG; - } - } - } - TCPIP_APIMSG_ACK(msg); -} -#endif /* LWIP_TCP */ - -/** - * Send some data on a RAW or UDP pcb contained in a netconn - * Called from netconn_send - * - * @param msg the api_msg_msg pointing to the connection - */ -void -do_send(struct api_msg_msg *msg) -{ - if (ERR_IS_FATAL(msg->conn->last_err)) { - msg->err = msg->conn->last_err; - } else { - msg->err = ERR_CONN; - if (msg->conn->pcb.tcp != NULL) { - switch (NETCONNTYPE_GROUP(msg->conn->type)) { -#if LWIP_RAW - case NETCONN_RAW: - if (ip_addr_isany(&msg->msg.b->addr)) { - msg->err = raw_send(msg->conn->pcb.raw, msg->msg.b->p); - } else { - msg->err = raw_sendto(msg->conn->pcb.raw, msg->msg.b->p, &msg->msg.b->addr); - } - break; -#endif -#if LWIP_UDP - case NETCONN_UDP: -#if LWIP_CHECKSUM_ON_COPY - if (ip_addr_isany(&msg->msg.b->addr)) { - msg->err = udp_send_chksum(msg->conn->pcb.udp, msg->msg.b->p, - msg->msg.b->flags & NETBUF_FLAG_CHKSUM, msg->msg.b->toport_chksum); - } else { - msg->err = udp_sendto_chksum(msg->conn->pcb.udp, msg->msg.b->p, - &msg->msg.b->addr, msg->msg.b->port, - msg->msg.b->flags & NETBUF_FLAG_CHKSUM, msg->msg.b->toport_chksum); - } -#else /* LWIP_CHECKSUM_ON_COPY */ - if (ip_addr_isany(&msg->msg.b->addr)) { - msg->err = udp_send(msg->conn->pcb.udp, msg->msg.b->p); - } else { - msg->err = udp_sendto(msg->conn->pcb.udp, msg->msg.b->p, &msg->msg.b->addr, msg->msg.b->port); - } -#endif /* LWIP_CHECKSUM_ON_COPY */ - break; -#endif /* LWIP_UDP */ - default: - break; - } - } - } - TCPIP_APIMSG_ACK(msg); -} - -#if LWIP_TCP -/** - * Indicate data has been received from a TCP pcb contained in a netconn - * Called from netconn_recv - * - * @param msg the api_msg_msg pointing to the connection - */ -void -do_recv(struct api_msg_msg *msg) -{ - msg->err = ERR_OK; - if (msg->conn->pcb.tcp != NULL) { - if (msg->conn->type == NETCONN_TCP) { -#if TCP_LISTEN_BACKLOG - if (msg->conn->pcb.tcp->state == LISTEN) { - tcp_accepted(msg->conn->pcb.tcp); - } else -#endif /* TCP_LISTEN_BACKLOG */ - { - uint32_t remaining = msg->msg.r.len; - do { - uint16_t recved = (remaining > 0xffff) ? 0xffff : (uint16_t)remaining; - tcp_recved(msg->conn->pcb.tcp, recved); - remaining -= recved; - }while(remaining != 0); - } - } - } - TCPIP_APIMSG_ACK(msg); -} - -/** - * See if more data needs to be written from a previous call to netconn_write. - * Called initially from do_write. If the first call can't send all data - * (because of low memory or empty send-buffer), this function is called again - * from sent_tcp() or poll_tcp() to send more data. If all data is sent, the - * blocking application thread (waiting in netconn_write) is released. - * - * @param conn netconn (that is currently in state NETCONN_WRITE) to process - * @return ERR_OK - * ERR_MEM if LWIP_TCPIP_CORE_LOCKING=1 and sending hasn't yet finished - */ -static err_t -do_writemore(struct netconn *conn) -{ - err_t err; - void *dataptr; - uint16_t len, available; - uint8_t write_finished = 0; - size_t diff; - uint8_t dontblock = netconn_is_nonblocking(conn) || - (conn->current_msg->msg.w.apiflags & NETCONN_DONTBLOCK); - uint8_t apiflags = conn->current_msg->msg.w.apiflags; - - LWIP_ASSERT("conn != NULL", conn != NULL); - LWIP_ASSERT("conn->state == NETCONN_WRITE", (conn->state == NETCONN_WRITE)); - LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL); - LWIP_ASSERT("conn->pcb.tcp != NULL", conn->pcb.tcp != NULL); - LWIP_ASSERT("conn->write_offset < conn->current_msg->msg.w.len", - conn->write_offset < conn->current_msg->msg.w.len); - -#if LWIP_SO_SNDTIMEO - if ((conn->send_timeout != 0) && - ((int32_t)(sys_now() - conn->current_msg->msg.w.time_started) >= conn->send_timeout)) { - write_finished = 1; - if (conn->write_offset == 0) { - /* nothing has been written */ - err = ERR_WOULDBLOCK; - conn->current_msg->msg.w.len = 0; - } else { - /* partial write */ - err = ERR_OK; - conn->current_msg->msg.w.len = conn->write_offset; - } - } else -#endif /* LWIP_SO_SNDTIMEO */ - { - dataptr = (uint8_t*)conn->current_msg->msg.w.dataptr + conn->write_offset; - diff = conn->current_msg->msg.w.len - conn->write_offset; - if (diff > 0xffffUL) { /* max_u16_t */ - len = 0xffff; -#if LWIP_TCPIP_CORE_LOCKING - conn->flags |= NETCONN_FLAG_WRITE_DELAYED; -#endif - apiflags |= TCP_WRITE_FLAG_MORE; - } else { - len = (uint16_t)diff; - } - available = tcp_sndbuf(conn->pcb.tcp); - if (available < len) { - /* don't try to write more than sendbuf */ - len = available; - if (dontblock){ - if (!len) { - err = ERR_WOULDBLOCK; - goto err_mem; - } - } else { -#if LWIP_TCPIP_CORE_LOCKING - conn->flags |= NETCONN_FLAG_WRITE_DELAYED; -#endif - apiflags |= TCP_WRITE_FLAG_MORE; - } - } - LWIP_ASSERT("do_writemore: invalid length!", ((conn->write_offset + len) <= conn->current_msg->msg.w.len)); - err = tcp_write(conn->pcb.tcp, dataptr, len, apiflags); - /* if OK or memory error, check available space */ - if ((err == ERR_OK) || (err == ERR_MEM)) { -err_mem: - if (dontblock && (len < conn->current_msg->msg.w.len)) { - /* non-blocking write did not write everything: mark the pcb non-writable - and let poll_tcp check writable space to mark the pcb writable again */ - API_EVENT(conn, NETCONN_EVT_SENDMINUS, len); - conn->flags |= NETCONN_FLAG_CHECK_WRITESPACE; - } else if ((tcp_sndbuf(conn->pcb.tcp) <= TCP_SNDLOWAT) || - (tcp_sndqueuelen(conn->pcb.tcp) >= TCP_SNDQUEUELOWAT)) { - /* The queued byte- or pbuf-count exceeds the configured low-water limit, - let select mark this pcb as non-writable. */ - API_EVENT(conn, NETCONN_EVT_SENDMINUS, len); - } - } - - if (err == ERR_OK) { - conn->write_offset += len; - if ((conn->write_offset == conn->current_msg->msg.w.len) || dontblock) { - /* return sent length */ - conn->current_msg->msg.w.len = conn->write_offset; - /* everything was written */ - write_finished = 1; - conn->write_offset = 0; - } - tcp_output(conn->pcb.tcp); - } else if ((err == ERR_MEM) && !dontblock) { - /* If ERR_MEM, we wait for sent_tcp or poll_tcp to be called - we do NOT return to the application thread, since ERR_MEM is - only a temporary error! */ - - /* tcp_write returned ERR_MEM, try tcp_output anyway */ - tcp_output(conn->pcb.tcp); - -#if LWIP_TCPIP_CORE_LOCKING - conn->flags |= NETCONN_FLAG_WRITE_DELAYED; -#endif - } else { - /* On errors != ERR_MEM, we don't try writing any more but return - the error to the application thread. */ - write_finished = 1; - conn->current_msg->msg.w.len = 0; - } - } - if (write_finished) { - /* everything was written: set back connection state - and back to application task */ - conn->current_msg->err = err; - conn->current_msg = NULL; - conn->state = NETCONN_NONE; -#if LWIP_TCPIP_CORE_LOCKING - if ((conn->flags & NETCONN_FLAG_WRITE_DELAYED) != 0) -#endif - { - sys_sem_signal(&conn->op_completed); - } - } -#if LWIP_TCPIP_CORE_LOCKING - else - return ERR_MEM; -#endif - return ERR_OK; -} -#endif /* LWIP_TCP */ - -/** - * Send some data on a TCP pcb contained in a netconn - * Called from netconn_write - * - * @param msg the api_msg_msg pointing to the connection - */ -void -do_write(struct api_msg_msg *msg) -{ - if (ERR_IS_FATAL(msg->conn->last_err)) { - msg->err = msg->conn->last_err; - } else { - if (msg->conn->type == NETCONN_TCP) { -#if LWIP_TCP - if (msg->conn->state != NETCONN_NONE) { - /* netconn is connecting, closing or in blocking write */ - msg->err = ERR_INPROGRESS; - } else if (msg->conn->pcb.tcp != NULL) { - msg->conn->state = NETCONN_WRITE; - /* set all the variables used by do_writemore */ - LWIP_ASSERT("already writing or closing", msg->conn->current_msg == NULL && - msg->conn->write_offset == 0); - LWIP_ASSERT("msg->msg.w.len != 0", msg->msg.w.len != 0); - msg->conn->current_msg = msg; - msg->conn->write_offset = 0; -#if LWIP_TCPIP_CORE_LOCKING - msg->conn->flags &= ~NETCONN_FLAG_WRITE_DELAYED; - if (do_writemore(msg->conn) != ERR_OK) { - LWIP_ASSERT("state!", msg->conn->state == NETCONN_WRITE); - UNLOCK_TCPIP_CORE(); - sys_arch_sem_wait(&msg->conn->op_completed, 0); - LOCK_TCPIP_CORE(); - LWIP_ASSERT("state!", msg->conn->state == NETCONN_NONE); - } -#else /* LWIP_TCPIP_CORE_LOCKING */ - do_writemore(msg->conn); -#endif /* LWIP_TCPIP_CORE_LOCKING */ - /* for both cases: if do_writemore was called, don't ACK the APIMSG - since do_writemore ACKs it! */ - return; - } else { - msg->err = ERR_CONN; - } -#else /* LWIP_TCP */ - msg->err = ERR_VAL; -#endif /* LWIP_TCP */ -#if (LWIP_UDP || LWIP_RAW) - } else { - msg->err = ERR_VAL; -#endif /* (LWIP_UDP || LWIP_RAW) */ - } - } - TCPIP_APIMSG_ACK(msg); -} - -/** - * Return a connection's local or remote address - * Called from netconn_getaddr - * - * @param msg the api_msg_msg pointing to the connection - */ -void -do_getaddr(struct api_msg_msg *msg) -{ - if (msg->conn->pcb.ip != NULL) { - *(msg->msg.ad.ipaddr) = (msg->msg.ad.local ? msg->conn->pcb.ip->local_ip : - msg->conn->pcb.ip->remote_ip); - - msg->err = ERR_OK; - switch (NETCONNTYPE_GROUP(msg->conn->type)) { -#if LWIP_RAW - case NETCONN_RAW: - if (msg->msg.ad.local) { - *(msg->msg.ad.port) = msg->conn->pcb.raw->protocol; - } else { - /* return an error as connecting is only a helper for upper layers */ - msg->err = ERR_CONN; - } - break; -#endif /* LWIP_RAW */ -#if LWIP_UDP - case NETCONN_UDP: - if (msg->msg.ad.local) { - *(msg->msg.ad.port) = msg->conn->pcb.udp->local_port; - } else { - if ((msg->conn->pcb.udp->flags & UDP_FLAGS_CONNECTED) == 0) { - msg->err = ERR_CONN; - } else { - *(msg->msg.ad.port) = msg->conn->pcb.udp->remote_port; - } - } - break; -#endif /* LWIP_UDP */ -#if LWIP_TCP - case NETCONN_TCP: - *(msg->msg.ad.port) = (msg->msg.ad.local?msg->conn->pcb.tcp->local_port:msg->conn->pcb.tcp->remote_port); - break; -#endif /* LWIP_TCP */ - default: - LWIP_ASSERT("invalid netconn_type", 0); - break; - } - } else { - msg->err = ERR_CONN; - } - TCPIP_APIMSG_ACK(msg); -} - -/** - * Close a TCP pcb contained in a netconn - * Called from netconn_close - * - * @param msg the api_msg_msg pointing to the connection - */ -void -do_close(struct api_msg_msg *msg) -{ -#if LWIP_TCP - /* @todo: abort running write/connect? */ - if ((msg->conn->state != NETCONN_NONE) && (msg->conn->state != NETCONN_LISTEN)) { - /* this only happens for TCP netconns */ - LWIP_ASSERT("msg->conn->type == NETCONN_TCP", msg->conn->type == NETCONN_TCP); - msg->err = ERR_INPROGRESS; - } else if ((msg->conn->pcb.tcp != NULL) && (msg->conn->type == NETCONN_TCP)) { - if ((msg->msg.sd.shut != NETCONN_SHUT_RDWR) && (msg->conn->state == NETCONN_LISTEN)) { - /* LISTEN doesn't support half shutdown */ - msg->err = ERR_CONN; - } else { - if (msg->msg.sd.shut & NETCONN_SHUT_RD) { - /* Drain and delete mboxes */ - netconn_drain(msg->conn); - } - LWIP_ASSERT("already writing or closing", msg->conn->current_msg == NULL && - msg->conn->write_offset == 0); - msg->conn->state = NETCONN_CLOSE; - msg->conn->current_msg = msg; - do_close_internal(msg->conn); - /* for tcp netconns, do_close_internal ACKs the message */ - return; - } - } else -#endif /* LWIP_TCP */ - { - msg->err = ERR_VAL; - } - sys_sem_signal(&msg->conn->op_completed); -} - -#if LWIP_IGMP -/** - * Join multicast groups for UDP netconns. - * Called from netconn_join_leave_group - * - * @param msg the api_msg_msg pointing to the connection - */ -void -do_join_leave_group(struct api_msg_msg *msg) -{ - if (ERR_IS_FATAL(msg->conn->last_err)) { - msg->err = msg->conn->last_err; - } else { - if (msg->conn->pcb.tcp != NULL) { - if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_UDP) { -#if LWIP_UDP - if (msg->msg.jl.join_or_leave == NETCONN_JOIN) { - msg->err = igmp_joingroup(msg->msg.jl.netif_addr, msg->msg.jl.multiaddr); - } else { - msg->err = igmp_leavegroup(msg->msg.jl.netif_addr, msg->msg.jl.multiaddr); - } -#endif /* LWIP_UDP */ -#if (LWIP_TCP || LWIP_RAW) - } else { - msg->err = ERR_VAL; -#endif /* (LWIP_TCP || LWIP_RAW) */ - } - } else { - msg->err = ERR_CONN; - } - } - TCPIP_APIMSG_ACK(msg); -} -#endif /* LWIP_IGMP */ - -#if LWIP_DNS -/** - * Callback function that is called when DNS name is resolved - * (or on timeout). A waiting application thread is waked up by - * signaling the semaphore. - */ -static void -do_dns_found(const char *name, ip_addr_t *ipaddr, void *arg) -{ - struct dns_api_msg *msg = (struct dns_api_msg*)arg; - - LWIP_ASSERT("DNS response for wrong host name", strcmp(msg->name, name) == 0); - LWIP_UNUSED_ARG(name); - - if (ipaddr == NULL) { - /* timeout or memory error */ - *msg->err = ERR_VAL; - } else { - /* address was resolved */ - *msg->err = ERR_OK; - *msg->addr = *ipaddr; - } - /* wake up the application task waiting in netconn_gethostbyname */ - sys_sem_signal(msg->sem); -} - -/** - * Execute a DNS query - * Called from netconn_gethostbyname - * - * @param arg the dns_api_msg pointing to the query - */ -void -do_gethostbyname(void *arg) -{ - struct dns_api_msg *msg = (struct dns_api_msg*)arg; - - *msg->err = dns_gethostbyname(msg->name, msg->addr, do_dns_found, msg); - if (*msg->err != ERR_INPROGRESS) { - /* on error or immediate success, wake up the application - * task waiting in netconn_gethostbyname */ - sys_sem_signal(msg->sem); - } -} -#endif /* LWIP_DNS */ - -#endif /* LWIP_NETCONN */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/err.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/err.c deleted file mode 100644 index 51b32ea..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/err.c +++ /dev/null @@ -1,75 +0,0 @@ -/** - * @file - * Error Management module - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/err.h" - -#ifdef LWIP_DEBUG - -static const char *err_strerr[] = { - "Ok", /* ERR_OK 0 */ - "Out of memory error", /* ERR_MEM -1 */ - "Buffer error", /* ERR_BUF -2 */ - "Timeout", /* ERR_TIMEOUT -3 */ - "Routing problem", /* ERR_RTE -4 */ - "Operation in progress", /* ERR_INPROGRESS -5 */ - "Illegal value", /* ERR_VAL -6 */ - "Operation would block", /* ERR_WOULDBLOCK -7 */ - "Address in use", /* ERR_USE -8 */ - "Already connected", /* ERR_ISCONN -9 */ - "Connection aborted", /* ERR_ABRT -10 */ - "Connection reset", /* ERR_RST -11 */ - "Connection closed", /* ERR_CLSD -12 */ - "Not connected", /* ERR_CONN -13 */ - "Illegal argument", /* ERR_ARG -14 */ - "Low-level netif error", /* ERR_IF -15 */ -}; - -/** - * Convert an lwip internal error to a string representation. - * - * @param err an lwip internal err_t - * @return a string representation for err - */ -const char * -lwip_strerr(err_t err) -{ - return err_strerr[-err]; - -} - -#endif /* LWIP_DEBUG */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/netbuf.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/netbuf.c deleted file mode 100644 index 1e1e344..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/netbuf.c +++ /dev/null @@ -1,245 +0,0 @@ -/** - * @file - * Network buffer management - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/netbuf.h" -#include "lwip/memp.h" - -#include - -/** - * Create (allocate) and initialize a new netbuf. - * The netbuf doesn't yet contain a packet buffer! - * - * @return a pointer to a new netbuf - * NULL on lack of memory - */ -struct -netbuf *netbuf_new(void) -{ - struct netbuf *buf; - - buf = (struct netbuf *)memp_malloc(MEMP_NETBUF); - if (buf != NULL) { - buf->p = NULL; - buf->ptr = NULL; - ip_addr_set_any(&buf->addr); - buf->port = 0; -#if LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY -#if LWIP_CHECKSUM_ON_COPY - buf->flags = 0; -#endif /* LWIP_CHECKSUM_ON_COPY */ - buf->toport_chksum = 0; -#if LWIP_NETBUF_RECVINFO - ip_addr_set_any(&buf->toaddr); -#endif /* LWIP_NETBUF_RECVINFO */ -#endif /* LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY */ - return buf; - } else { - return NULL; - } -} - -/** - * Deallocate a netbuf allocated by netbuf_new(). - * - * @param buf pointer to a netbuf allocated by netbuf_new() - */ -void -netbuf_delete(struct netbuf *buf) -{ - if (buf != NULL) { - if (buf->p != NULL) { - pbuf_free(buf->p); - buf->p = buf->ptr = NULL; - } - memp_free(MEMP_NETBUF, buf); - } -} - -/** - * Allocate memory for a packet buffer for a given netbuf. - * - * @param buf the netbuf for which to allocate a packet buffer - * @param size the size of the packet buffer to allocate - * @return pointer to the allocated memory - * NULL if no memory could be allocated - */ -void * -netbuf_alloc(struct netbuf *buf, uint16_t size) -{ - LWIP_ERROR("netbuf_alloc: invalid buf", (buf != NULL), return NULL;); - - /* Deallocate any previously allocated memory. */ - if (buf->p != NULL) { - pbuf_free(buf->p); - } - buf->p = pbuf_alloc(PBUF_TRANSPORT, size, PBUF_RAM); - if (buf->p == NULL) { - return NULL; - } - LWIP_ASSERT("check that first pbuf can hold size", - (buf->p->len >= size)); - buf->ptr = buf->p; - return buf->p->payload; -} - -/** - * Free the packet buffer included in a netbuf - * - * @param buf pointer to the netbuf which contains the packet buffer to free - */ -void -netbuf_free(struct netbuf *buf) -{ - LWIP_ERROR("netbuf_free: invalid buf", (buf != NULL), return;); - if (buf->p != NULL) { - pbuf_free(buf->p); - } - buf->p = buf->ptr = NULL; -} - -/** - * Let a netbuf reference existing (non-volatile) data. - * - * @param buf netbuf which should reference the data - * @param dataptr pointer to the data to reference - * @param size size of the data - * @return ERR_OK if data is referenced - * ERR_MEM if data couldn't be referenced due to lack of memory - */ -err_t -netbuf_ref(struct netbuf *buf, const void *dataptr, uint16_t size) -{ - LWIP_ERROR("netbuf_ref: invalid buf", (buf != NULL), return ERR_ARG;); - if (buf->p != NULL) { - pbuf_free(buf->p); - } - buf->p = pbuf_alloc(PBUF_TRANSPORT, 0, PBUF_REF); - if (buf->p == NULL) { - buf->ptr = NULL; - return ERR_MEM; - } - buf->p->payload = (void*)dataptr; - buf->p->len = buf->p->tot_len = size; - buf->ptr = buf->p; - return ERR_OK; -} - -/** - * Chain one netbuf to another (@see pbuf_chain) - * - * @param head the first netbuf - * @param tail netbuf to chain after head, freed by this function, may not be reference after returning - */ -void -netbuf_chain(struct netbuf *head, struct netbuf *tail) -{ - LWIP_ERROR("netbuf_ref: invalid head", (head != NULL), return;); - LWIP_ERROR("netbuf_chain: invalid tail", (tail != NULL), return;); - pbuf_cat(head->p, tail->p); - head->ptr = head->p; - memp_free(MEMP_NETBUF, tail); -} - -/** - * Get the data pointer and length of the data inside a netbuf. - * - * @param buf netbuf to get the data from - * @param dataptr pointer to a void pointer where to store the data pointer - * @param len pointer to an uint16_t where the length of the data is stored - * @return ERR_OK if the information was retreived, - * ERR_BUF on error. - */ -err_t -netbuf_data(struct netbuf *buf, void **dataptr, uint16_t *len) -{ - LWIP_ERROR("netbuf_data: invalid buf", (buf != NULL), return ERR_ARG;); - LWIP_ERROR("netbuf_data: invalid dataptr", (dataptr != NULL), return ERR_ARG;); - LWIP_ERROR("netbuf_data: invalid len", (len != NULL), return ERR_ARG;); - - if (buf->ptr == NULL) { - return ERR_BUF; - } - *dataptr = buf->ptr->payload; - *len = buf->ptr->len; - return ERR_OK; -} - -/** - * Move the current data pointer of a packet buffer contained in a netbuf - * to the next part. - * The packet buffer itself is not modified. - * - * @param buf the netbuf to modify - * @return -1 if there is no next part - * 1 if moved to the next part but now there is no next part - * 0 if moved to the next part and there are still more parts - */ -int8_t -netbuf_next(struct netbuf *buf) -{ - LWIP_ERROR("netbuf_free: invalid buf", (buf != NULL), return -1;); - if (buf->ptr->next == NULL) { - return -1; - } - buf->ptr = buf->ptr->next; - if (buf->ptr->next == NULL) { - return 1; - } - return 0; -} - -/** - * Move the current data pointer of a packet buffer contained in a netbuf - * to the beginning of the packet. - * The packet buffer itself is not modified. - * - * @param buf the netbuf to modify - */ -void -netbuf_first(struct netbuf *buf) -{ - LWIP_ERROR("netbuf_free: invalid buf", (buf != NULL), return;); - buf->ptr = buf->p; -} - -#endif /* LWIP_NETCONN */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/netdb.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/netdb.c deleted file mode 100644 index 125c9c3..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/netdb.c +++ /dev/null @@ -1,353 +0,0 @@ -/** - * @file - * API functions for name resolving - * - */ - -/* - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Simon Goldschmidt - * - */ - -#include "lwip/netdb.h" - -#if LWIP_DNS && LWIP_SOCKET - -#include "lwip/err.h" -#include "lwip/mem.h" -#include "lwip/memp.h" -#include "lwip/ip_addr.h" -#include "lwip/api.h" -#include "lwip/dns.h" - -#include -#include - -/** helper struct for gethostbyname_r to access the char* buffer */ -struct gethostbyname_r_helper { - ip_addr_t *addr_list[2]; - ip_addr_t addr; - char *aliases; -}; - -/** h_errno is exported in netdb.h for access by applications. */ -#if LWIP_DNS_API_DECLARE_H_ERRNO -int h_errno; -#endif /* LWIP_DNS_API_DECLARE_H_ERRNO */ - -/** define "hostent" variables storage: 0 if we use a static (but unprotected) - * set of variables for lwip_gethostbyname, 1 if we use a local storage */ -#ifndef LWIP_DNS_API_HOSTENT_STORAGE -#define LWIP_DNS_API_HOSTENT_STORAGE 0 -#endif - -/** define "hostent" variables storage */ -#if LWIP_DNS_API_HOSTENT_STORAGE -#define HOSTENT_STORAGE -#else -#define HOSTENT_STORAGE static -#endif /* LWIP_DNS_API_STATIC_HOSTENT */ - -/** - * Returns an entry containing addresses of address family AF_INET - * for the host with name name. - * Due to dns_gethostbyname limitations, only one address is returned. - * - * @param name the hostname to resolve - * @return an entry containing addresses of address family AF_INET - * for the host with name name - */ -struct hostent* -lwip_gethostbyname(const char *name) -{ - err_t err; - ip_addr_t addr; - - /* buffer variables for lwip_gethostbyname() */ - HOSTENT_STORAGE struct hostent s_hostent; - HOSTENT_STORAGE char *s_aliases; - HOSTENT_STORAGE ip_addr_t s_hostent_addr; - HOSTENT_STORAGE ip_addr_t *s_phostent_addr[2]; - - /* query host IP address */ - err = netconn_gethostbyname(name, &addr); - if (err != ERR_OK) { - LWIP_DEBUGF(DNS_DEBUG, ("lwip_gethostbyname(%s) failed, err=%d\n", name, err)); - h_errno = HOST_NOT_FOUND; - return NULL; - } - - /* fill hostent */ - s_hostent_addr = addr; - s_phostent_addr[0] = &s_hostent_addr; - s_phostent_addr[1] = NULL; - s_hostent.h_name = (char*)name; - s_hostent.h_aliases = &s_aliases; - s_hostent.h_addrtype = AF_INET; - s_hostent.h_length = sizeof(ip_addr_t); - s_hostent.h_addr_list = (char**)&s_phostent_addr; - -#if DNS_DEBUG - /* dump hostent */ - LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_name == %s\n", s_hostent.h_name)); - LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_aliases == %p\n", s_hostent.h_aliases)); - if (s_hostent.h_aliases != NULL) { - uint8_t idx; - for ( idx=0; s_hostent.h_aliases[idx]; idx++) { - LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_aliases[%i]-> == %p\n", idx, s_hostent.h_aliases[idx])); - LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_aliases[%i]-> == %s\n", idx, s_hostent.h_aliases[idx])); - } - } - LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addrtype == %d\n", s_hostent.h_addrtype)); - LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_length == %d\n", s_hostent.h_length)); - LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addr_list == %p\n", s_hostent.h_addr_list)); - if (s_hostent.h_addr_list != NULL) { - uint8_t idx; - for ( idx=0; s_hostent.h_addr_list[idx]; idx++) { - LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addr_list[%i] == %p\n", idx, s_hostent.h_addr_list[idx])); - LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addr_list[%i]-> == %s\n", idx, ip_ntoa((ip_addr_t*)s_hostent.h_addr_list[idx]))); - } - } -#endif /* DNS_DEBUG */ - -#if LWIP_DNS_API_HOSTENT_STORAGE - /* this function should return the "per-thread" hostent after copy from s_hostent */ - return sys_thread_hostent(&s_hostent); -#else - return &s_hostent; -#endif /* LWIP_DNS_API_HOSTENT_STORAGE */ -} - -/** - * Thread-safe variant of lwip_gethostbyname: instead of using a static - * buffer, this function takes buffer and errno pointers as arguments - * and uses these for the result. - * - * @param name the hostname to resolve - * @param ret pre-allocated struct where to store the result - * @param buf pre-allocated buffer where to store additional data - * @param buflen the size of buf - * @param result pointer to a hostent pointer that is set to ret on success - * and set to zero on error - * @param h_errnop pointer to an int where to store errors (instead of modifying - * the global h_errno) - * @return 0 on success, non-zero on error, additional error information - * is stored in *h_errnop instead of h_errno to be thread-safe - */ -int -lwip_gethostbyname_r(const char *name, struct hostent *ret, char *buf, - size_t buflen, struct hostent **result, int *h_errnop) -{ - err_t err; - struct gethostbyname_r_helper *h; - char *hostname; - size_t namelen; - int lh_errno; - - if (h_errnop == NULL) { - /* ensure h_errnop is never NULL */ - h_errnop = &lh_errno; - } - - if (result == NULL) { - /* not all arguments given */ - *h_errnop = EINVAL; - return -1; - } - /* first thing to do: set *result to nothing */ - *result = NULL; - if ((name == NULL) || (ret == NULL) || (buf == NULL)) { - /* not all arguments given */ - *h_errnop = EINVAL; - return -1; - } - - namelen = strlen(name); - if (buflen < (sizeof(struct gethostbyname_r_helper) + namelen + 1 + (MEM_ALIGNMENT - 1))) { - /* buf can't hold the data needed + a copy of name */ - *h_errnop = ERANGE; - return -1; - } - - h = (struct gethostbyname_r_helper*)LWIP_MEM_ALIGN(buf); - hostname = ((char*)h) + sizeof(struct gethostbyname_r_helper); - - /* query host IP address */ - err = netconn_gethostbyname(name, &h->addr); - if (err != ERR_OK) { - LWIP_DEBUGF(DNS_DEBUG, ("lwip_gethostbyname(%s) failed, err=%d\n", name, err)); - *h_errnop = HOST_NOT_FOUND; - return -1; - } - - /* copy the hostname into buf */ - MEMCPY(hostname, name, namelen); - hostname[namelen] = 0; - - /* fill hostent */ - h->addr_list[0] = &h->addr; - h->addr_list[1] = NULL; - h->aliases = NULL; - ret->h_name = hostname; - ret->h_aliases = &h->aliases; - ret->h_addrtype = AF_INET; - ret->h_length = sizeof(ip_addr_t); - ret->h_addr_list = (char**)&h->addr_list; - - /* set result != NULL */ - *result = ret; - - /* return success */ - return 0; -} - -/** - * Frees one or more addrinfo structures returned by getaddrinfo(), along with - * any additional storage associated with those structures. If the ai_next field - * of the structure is not null, the entire list of structures is freed. - * - * @param ai struct addrinfo to free - */ -void -lwip_freeaddrinfo(struct addrinfo *ai) -{ - struct addrinfo *next; - - while (ai != NULL) { - next = ai->ai_next; - memp_free(MEMP_NETDB, ai); - ai = next; - } -} - -/** - * Translates the name of a service location (for example, a host name) and/or - * a service name and returns a set of socket addresses and associated - * information to be used in creating a socket with which to address the - * specified service. - * Memory for the result is allocated internally and must be freed by calling - * lwip_freeaddrinfo()! - * - * Due to a limitation in dns_gethostbyname, only the first address of a - * host is returned. - * Also, service names are not supported (only port numbers)! - * - * @param nodename descriptive name or address string of the host - * (may be NULL -> local address) - * @param servname port number as string of NULL - * @param hints structure containing input values that set socktype and protocol - * @param res pointer to a pointer where to store the result (set to NULL on failure) - * @return 0 on success, non-zero on failure - */ -int -lwip_getaddrinfo(const char *nodename, const char *servname, - const struct addrinfo *hints, struct addrinfo **res) -{ - err_t err; - ip_addr_t addr; - struct addrinfo *ai; - struct sockaddr_in *sa = NULL; - int port_nr = 0; - size_t total_size; - size_t namelen = 0; - - if (res == NULL) { - return EAI_FAIL; - } - *res = NULL; - if ((nodename == NULL) && (servname == NULL)) { - return EAI_NONAME; - } - - if (servname != NULL) { - /* service name specified: convert to port number - * @todo?: currently, only ASCII integers (port numbers) are supported! */ - port_nr = atoi(servname); - if ((port_nr <= 0) || (port_nr > 0xffff)) { - return EAI_SERVICE; - } - } - - if (nodename != NULL) { - /* service location specified, try to resolve */ - err = netconn_gethostbyname(nodename, &addr); - if (err != ERR_OK) { - return EAI_FAIL; - } - } else { - /* service location specified, use loopback address */ - ip_addr_set_loopback(&addr); - } - - total_size = sizeof(struct addrinfo) + sizeof(struct sockaddr_in); - if (nodename != NULL) { - namelen = strlen(nodename); - LWIP_ASSERT("namelen is too long", (namelen + 1) <= (mem_size_t)-1); - total_size += namelen + 1; - } - /* If this fails, please report to lwip-devel! :-) */ - LWIP_ASSERT("total_size <= NETDB_ELEM_SIZE: please report this!", - total_size <= NETDB_ELEM_SIZE); - ai = (struct addrinfo *)memp_malloc(MEMP_NETDB); - if (ai == NULL) { - goto memerr; - } - memset(ai, 0, total_size); - sa = (struct sockaddr_in*)((uint8_t*)ai + sizeof(struct addrinfo)); - /* set up sockaddr */ - inet_addr_from_ipaddr(&sa->sin_addr, &addr); - sa->sin_family = AF_INET; - sa->sin_len = sizeof(struct sockaddr_in); - sa->sin_port = htons((uint16_t)port_nr); - - /* set up addrinfo */ - ai->ai_family = AF_INET; - if (hints != NULL) { - /* copy socktype & protocol from hints if specified */ - ai->ai_socktype = hints->ai_socktype; - ai->ai_protocol = hints->ai_protocol; - } - if (nodename != NULL) { - /* copy nodename to canonname if specified */ - ai->ai_canonname = ((char*)ai + sizeof(struct addrinfo) + sizeof(struct sockaddr_in)); - MEMCPY(ai->ai_canonname, nodename, namelen); - ai->ai_canonname[namelen] = 0; - } - ai->ai_addrlen = sizeof(struct sockaddr_in); - ai->ai_addr = (struct sockaddr*)sa; - - *res = ai; - - return 0; -memerr: - if (ai != NULL) { - memp_free(MEMP_NETDB, ai); - } - return EAI_MEMORY; -} - -#endif /* LWIP_DNS && LWIP_SOCKET */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/netifapi.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/netifapi.c deleted file mode 100644 index 43e4720..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/netifapi.c +++ /dev/null @@ -1,160 +0,0 @@ -/** - * @file - * Network Interface Sequential API module - * - */ - -/* - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - */ - -#include "lwip/opt.h" - -#if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/netifapi.h" -#include "lwip/tcpip.h" - -/** - * Call netif_add() inside the tcpip_thread context. - */ -void -do_netifapi_netif_add(struct netifapi_msg_msg *msg) -{ - if (!netif_add( msg->netif, - msg->msg.add.ipaddr, - msg->msg.add.netmask, - msg->msg.add.gw, - msg->msg.add.state, - msg->msg.add.init, - msg->msg.add.input)) { - msg->err = ERR_IF; - } else { - msg->err = ERR_OK; - } - TCPIP_NETIFAPI_ACK(msg); -} - -/** - * Call netif_set_addr() inside the tcpip_thread context. - */ -void -do_netifapi_netif_set_addr(struct netifapi_msg_msg *msg) -{ - netif_set_addr( msg->netif, - msg->msg.add.ipaddr, - msg->msg.add.netmask, - msg->msg.add.gw); - msg->err = ERR_OK; - TCPIP_NETIFAPI_ACK(msg); -} - -/** - * Call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) inside the - * tcpip_thread context. - */ -void -do_netifapi_netif_common(struct netifapi_msg_msg *msg) -{ - if (msg->msg.common.errtfunc != NULL) { - msg->err = msg->msg.common.errtfunc(msg->netif); - } else { - msg->err = ERR_OK; - msg->msg.common.voidfunc(msg->netif); - } - TCPIP_NETIFAPI_ACK(msg); -} - -/** - * Call netif_add() in a thread-safe way by running that function inside the - * tcpip_thread context. - * - * @note for params @see netif_add() - */ -err_t -netifapi_netif_add(struct netif *netif, - ip_addr_t *ipaddr, - ip_addr_t *netmask, - ip_addr_t *gw, - void *state, - netif_init_fn init, - netif_input_fn input) -{ - struct netifapi_msg msg; - msg.function = do_netifapi_netif_add; - msg.msg.netif = netif; - msg.msg.msg.add.ipaddr = ipaddr; - msg.msg.msg.add.netmask = netmask; - msg.msg.msg.add.gw = gw; - msg.msg.msg.add.state = state; - msg.msg.msg.add.init = init; - msg.msg.msg.add.input = input; - TCPIP_NETIFAPI(&msg); - return msg.msg.err; -} - -/** - * Call netif_set_addr() in a thread-safe way by running that function inside the - * tcpip_thread context. - * - * @note for params @see netif_set_addr() - */ -err_t -netifapi_netif_set_addr(struct netif *netif, - ip_addr_t *ipaddr, - ip_addr_t *netmask, - ip_addr_t *gw) -{ - struct netifapi_msg msg; - msg.function = do_netifapi_netif_set_addr; - msg.msg.netif = netif; - msg.msg.msg.add.ipaddr = ipaddr; - msg.msg.msg.add.netmask = netmask; - msg.msg.msg.add.gw = gw; - TCPIP_NETIFAPI(&msg); - return msg.msg.err; -} - -/** - * call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) in a thread-safe - * way by running that function inside the tcpip_thread context. - * - * @note use only for functions where there is only "netif" parameter. - */ -err_t -netifapi_netif_common(struct netif *netif, netifapi_void_fn voidfunc, - netifapi_errt_fn errtfunc) -{ - struct netifapi_msg msg; - msg.function = do_netifapi_netif_common; - msg.msg.netif = netif; - msg.msg.msg.common.voidfunc = voidfunc; - msg.msg.msg.common.errtfunc = errtfunc; - TCPIP_NETIFAPI(&msg); - return msg.msg.err; -} - -#endif /* LWIP_NETIF_API */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/sockets.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/sockets.c deleted file mode 100644 index ada60a9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/sockets.c +++ /dev/null @@ -1,2452 +0,0 @@ -/** - * @file - * Sockets BSD-Like API module - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - * Improved by Marc Boucher and David Haas - * - */ - -#include "lwip/opt.h" - -#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/sockets.h" -#include "lwip/api.h" -#include "lwip/sys.h" -#include "lwip/igmp.h" -#include "lwip/inet.h" -#include "lwip/tcp.h" -#include "lwip/raw.h" -#include "lwip/udp.h" -#include "lwip/tcpip.h" -#include "lwip/pbuf.h" -#if LWIP_CHECKSUM_ON_COPY -#include "lwip/inet_chksum.h" -#endif - -#include - -#define NUM_SOCKETS MEMP_NUM_NETCONN - -/** Contains all internal pointers and states used for a socket */ -struct lwip_sock { - /** sockets currently are built on netconns, each socket has one netconn */ - struct netconn *conn; - /** data that was left from the previous read */ - void *lastdata; - /** offset in the data that was left from the previous read */ - uint16_t lastoffset; - /** number of times data was received, set by event_callback(), - tested by the receive and select functions */ - int16_t rcvevent; - /** number of times data was ACKed (free send buffer), set by event_callback(), - tested by select */ - uint16_t sendevent; - /** error happened for this socket, set by event_callback(), tested by select */ - uint16_t errevent; - /** last error that occurred on this socket */ - int err; - /** counter of how many threads are waiting for this socket using select */ - int select_waiting; -}; - -/** Description for a task waiting in select */ -struct lwip_select_cb { - /** Pointer to the next waiting task */ - struct lwip_select_cb *next; - /** Pointer to the previous waiting task */ - struct lwip_select_cb *prev; - /** readset passed to select */ - fd_set *readset; - /** writeset passed to select */ - fd_set *writeset; - /** unimplemented: exceptset passed to select */ - fd_set *exceptset; - /** don't signal the same semaphore twice: set to 1 when signalled */ - int sem_signalled; - /** semaphore to wake up a task waiting for select */ - sys_sem_t sem; -}; - -/** This struct is used to pass data to the set/getsockopt_internal - * functions running in tcpip_thread context (only a void* is allowed) */ -struct lwip_setgetsockopt_data { - /** socket struct for which to change options */ - struct lwip_sock *sock; -#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) - /** socket index for which to change options */ - int s; -#endif /* LWIP_DEBUG */ - /** level of the option to process */ - int level; - /** name of the option to process */ - int optname; - /** set: value to set the option to - * get: value of the option is stored here */ - void *optval; - /** size of *optval */ - socklen_t *optlen; - /** if an error occures, it is temporarily stored here */ - err_t err; -}; - -/** The global array of available sockets */ -static struct lwip_sock sockets[NUM_SOCKETS]; -/** The global list of tasks waiting for select */ -static struct lwip_select_cb *select_cb_list; -/** This counter is increased from lwip_select when the list is chagned - and checked in event_callback to see if it has changed. */ -static volatile int select_cb_ctr; - -/** Table to quickly map an lwIP error (err_t) to a socket error - * by using -err as an index */ -static const int err_to_errno_table[] = { - 0, /* ERR_OK 0 No error, everything OK. */ - ENOMEM, /* ERR_MEM -1 Out of memory error. */ - ENOBUFS, /* ERR_BUF -2 Buffer error. */ - EWOULDBLOCK, /* ERR_TIMEOUT -3 Timeout */ - EHOSTUNREACH, /* ERR_RTE -4 Routing problem. */ - EINPROGRESS, /* ERR_INPROGRESS -5 Operation in progress */ - EINVAL, /* ERR_VAL -6 Illegal value. */ - EWOULDBLOCK, /* ERR_WOULDBLOCK -7 Operation would block. */ - EADDRINUSE, /* ERR_USE -8 Address in use. */ - EALREADY, /* ERR_ISCONN -9 Already connected. */ - ECONNABORTED, /* ERR_ABRT -10 Connection aborted. */ - ECONNRESET, /* ERR_RST -11 Connection reset. */ - ENOTCONN, /* ERR_CLSD -12 Connection closed. */ - ENOTCONN, /* ERR_CONN -13 Not connected. */ - EIO, /* ERR_ARG -14 Illegal argument. */ - -1, /* ERR_IF -15 Low-level netif error */ -}; - -#define ERR_TO_ERRNO_TABLE_SIZE \ - (sizeof(err_to_errno_table)/sizeof(err_to_errno_table[0])) - -#define err_to_errno(err) \ - ((unsigned)(-(err)) < ERR_TO_ERRNO_TABLE_SIZE ? \ - err_to_errno_table[-(err)] : EIO) - -#ifdef ERRNO -#ifndef set_errno -#define set_errno(err) errno = (err) -#endif -#else /* ERRNO */ -#define set_errno(err) -#endif /* ERRNO */ - -#define sock_set_errno(sk, e) do { \ - sk->err = (e); \ - set_errno(sk->err); \ -} while (0) - -/* Forward delcaration of some functions */ -static void event_callback(struct netconn *conn, enum netconn_evt evt, uint16_t len); -static void lwip_getsockopt_internal(void *arg); -static void lwip_setsockopt_internal(void *arg); - -/** - * Initialize this module. This function has to be called before any other - * functions in this module! - */ -void -lwip_socket_init(void) -{ -} -/** - * Map a externally used socket index to the internal socket representation. - * - * @param s externally used socket index - * @return struct lwip_sock for the socket or NULL if not found - */ -static struct lwip_sock * -get_socket(int s) -{ - struct lwip_sock *sock; - - if ((s < 0) || (s >= NUM_SOCKETS)) { - LWIP_DEBUGF(SOCKETS_DEBUG, ("get_socket(%d): invalid\n", s)); - set_errno(EBADF); - return NULL; - } - - sock = &sockets[s]; - - if (!sock->conn) { - LWIP_DEBUGF(SOCKETS_DEBUG, ("get_socket(%d): not active\n", s)); - set_errno(EBADF); - return NULL; - } - - return sock; -} - -/* - * pvvx: errno - */ -int lwip_last_err_socket(int s) { - struct lwip_sock * sc = get_socket(s); - if(sc) return sc->err; - else return EBADF; -} -/** - * Same as get_socket but doesn't set errno - * - * @param s externally used socket index - * @return struct lwip_sock for the socket or NULL if not found - */ -static struct lwip_sock * -tryget_socket(int s) -{ - if ((s < 0) || (s >= NUM_SOCKETS)) { - return NULL; - } - if (!sockets[s].conn) { - return NULL; - } - return &sockets[s]; -} - -/** - * Allocate a new socket for a given netconn. - * - * @param newconn the netconn for which to allocate a socket - * @param accepted 1 if socket has been created by accept(), - * 0 if socket has been created by socket() - * @return the index of the new socket; -1 on error - */ -static int -alloc_socket(struct netconn *newconn, int accepted) -{ - int i; - SYS_ARCH_DECL_PROTECT(lev); - - /* allocate a new socket identifier */ - for (i = 0; i < NUM_SOCKETS; ++i) { - /* Protect socket array */ - SYS_ARCH_PROTECT(lev); - if (!sockets[i].conn) { - sockets[i].conn = newconn; - /* The socket is not yet known to anyone, so no need to protect - after having marked it as used. */ - SYS_ARCH_UNPROTECT(lev); - sockets[i].lastdata = NULL; - sockets[i].lastoffset = 0; - sockets[i].rcvevent = 0; - /* TCP sendbuf is empty, but the socket is not yet writable until connected - * (unless it has been created by accept()). */ - sockets[i].sendevent = (newconn->type == NETCONN_TCP ? (accepted != 0) : 1); - sockets[i].errevent = 0; - sockets[i].err = 0; - sockets[i].select_waiting = 0; - return i; - } - SYS_ARCH_UNPROTECT(lev); - } - return -1; -} - -/** Free a socket. The socket's netconn must have been - * delete before! - * - * @param sock the socket to free - * @param is_tcp != 0 for TCP sockets, used to free lastdata - */ -static void -free_socket(struct lwip_sock *sock, int is_tcp) -{ - void *lastdata; - SYS_ARCH_DECL_PROTECT(lev); - - lastdata = sock->lastdata; - sock->lastdata = NULL; - sock->lastoffset = 0; - sock->err = 0; - - /* Protect socket array */ - SYS_ARCH_PROTECT(lev); - sock->conn = NULL; - SYS_ARCH_UNPROTECT(lev); - /* don't use 'sock' after this line, as another task might have allocated it */ - - if (lastdata != NULL) { - if (is_tcp) { - pbuf_free((struct pbuf *)lastdata); - } else { - netbuf_delete((struct netbuf *)lastdata); - } - } -} - -/* Below this, the well-known socket functions are implemented. - * Use google.com or opengroup.org to get a good description :-) - * - * Exceptions are documented! - */ - -int -lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen) -{ - struct lwip_sock *sock, *nsock; - struct netconn *newconn; - ip_addr_t naddr; - uint16_t port; - int newsock; - struct sockaddr_in sin; - err_t err; - SYS_ARCH_DECL_PROTECT(lev); - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d)...\n", s)); - sock = get_socket(s); - if (!sock) { - return -1; - } - - if (netconn_is_nonblocking(sock->conn) && (sock->rcvevent <= 0)) { - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d): returning EWOULDBLOCK\n", s)); - sock_set_errno(sock, EWOULDBLOCK); - return -1; - } - - /* wait for a new connection */ - err = netconn_accept(sock->conn, &newconn); - if (err != ERR_OK) { - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d): netconn_acept failed, err=%d\n", s, err)); - if (netconn_type(sock->conn) != NETCONN_TCP) { - sock_set_errno(sock, EOPNOTSUPP); - return EOPNOTSUPP; - } - sock_set_errno(sock, err_to_errno(err)); - return -1; - } - LWIP_ASSERT("newconn != NULL", newconn != NULL); - /* Prevent automatic window updates, we do this on our own! */ - netconn_set_noautorecved(newconn, 1); - - /* get the IP address and port of the remote host */ - err = netconn_peer(newconn, &naddr, &port); - if (err != ERR_OK) { - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d): netconn_peer failed, err=%d\n", s, err)); - netconn_delete(newconn); - sock_set_errno(sock, err_to_errno(err)); - return -1; - } - - /* Note that POSIX only requires us to check addr is non-NULL. addrlen must - * not be NULL if addr is valid. - */ - if (NULL != addr) { - LWIP_ASSERT("addr valid but addrlen NULL", addrlen != NULL); - memset(&sin, 0, sizeof(sin)); - sin.sin_len = sizeof(sin); - sin.sin_family = AF_INET; - sin.sin_port = htons(port); - inet_addr_from_ipaddr(&sin.sin_addr, &naddr); - - if (*addrlen > sizeof(sin)) - *addrlen = sizeof(sin); - - MEMCPY(addr, &sin, *addrlen); - } - - newsock = alloc_socket(newconn, 1); - if (newsock == -1) { - netconn_delete(newconn); - sock_set_errno(sock, ENFILE); - return -1; - } - LWIP_ASSERT("invalid socket index", (newsock >= 0) && (newsock < NUM_SOCKETS)); - LWIP_ASSERT("newconn->callback == event_callback", newconn->callback == event_callback); - nsock = &sockets[newsock]; - - /* See event_callback: If data comes in right away after an accept, even - * though the server task might not have created a new socket yet. - * In that case, newconn->socket is counted down (newconn->socket--), - * so nsock->rcvevent is >= 1 here! - */ - SYS_ARCH_PROTECT(lev); - nsock->rcvevent += (int16_t)(-1 - newconn->socket); - newconn->socket = newsock; - SYS_ARCH_UNPROTECT(lev); - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d) returning new sock=%d addr=", s, newsock)); - ip_addr_debug_print(SOCKETS_DEBUG, &naddr); - LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F"\n", port)); - - sock_set_errno(sock, 0); - return newsock; -} - -int -lwip_bind(int s, const struct sockaddr *name, socklen_t namelen) -{ - struct lwip_sock *sock; - ip_addr_t local_addr; - uint16_t local_port; - err_t err; - const struct sockaddr_in *name_in; - - sock = get_socket(s); - if (!sock) { - return -1; - } - - /* check size, familiy and alignment of 'name' */ - LWIP_ERROR("lwip_bind: invalid address", ((namelen == sizeof(struct sockaddr_in)) && - ((name->sa_family) == AF_INET) && ((((mem_ptr_t)name) % 4) == 0)), - sock_set_errno(sock, err_to_errno(ERR_ARG)); return -1;); - name_in = (const struct sockaddr_in *)(void*)name; - - inet_addr_to_ipaddr(&local_addr, &name_in->sin_addr); - local_port = name_in->sin_port; - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_bind(%d, addr=", s)); - ip_addr_debug_print(SOCKETS_DEBUG, &local_addr); - LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F")\n", ntohs(local_port))); - - err = netconn_bind(sock->conn, &local_addr, ntohs(local_port)); - - if (err != ERR_OK) { - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_bind(%d) failed, err=%d\n", s, err)); - sock_set_errno(sock, err_to_errno(err)); - return -1; - } - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_bind(%d) succeeded\n", s)); - sock_set_errno(sock, 0); - return 0; -} - -int -lwip_close(int s) -{ - struct lwip_sock *sock; - int is_tcp = 0; - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_close(%d)\n", s)); - - sock = get_socket(s); - if (!sock) { - return -1; - } - - if(sock->conn != NULL) { - is_tcp = netconn_type(sock->conn) == NETCONN_TCP; - } else { - LWIP_ASSERT("sock->lastdata == NULL", sock->lastdata == NULL); - } - - netconn_delete(sock->conn); - - free_socket(sock, is_tcp); - set_errno(0); - return 0; -} - -int -lwip_connect(int s, const struct sockaddr *name, socklen_t namelen) -{ - struct lwip_sock *sock; - err_t err; - const struct sockaddr_in *name_in; - - sock = get_socket(s); - if (!sock) { - return -1; - } - - /* check size, familiy and alignment of 'name' */ - LWIP_ERROR("lwip_connect: invalid address", ((namelen == sizeof(struct sockaddr_in)) && - ((name->sa_family) == AF_INET) && ((((mem_ptr_t)name) % 4) == 0)), - sock_set_errno(sock, err_to_errno(ERR_ARG)); return -1;); - name_in = (const struct sockaddr_in *)(void*)name; - - if (name_in->sin_family == AF_UNSPEC) { - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_connect(%d, AF_UNSPEC)\n", s)); - err = netconn_disconnect(sock->conn); - } else { - ip_addr_t remote_addr; - uint16_t remote_port; - - inet_addr_to_ipaddr(&remote_addr, &name_in->sin_addr); - remote_port = name_in->sin_port; - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_connect(%d, addr=", s)); - ip_addr_debug_print(SOCKETS_DEBUG, &remote_addr); - LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F")\n", ntohs(remote_port))); - - err = netconn_connect(sock->conn, &remote_addr, ntohs(remote_port)); - } - - if (err != ERR_OK) { - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_connect(%d) failed, err=%d\n", s, err)); - sock_set_errno(sock, err_to_errno(err)); - return -1; - } - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_connect(%d) succeeded\n", s)); - sock_set_errno(sock, 0); - return 0; -} - -/** - * Set a socket into listen mode. - * The socket may not have been used for another connection previously. - * - * @param s the socket to set to listening mode - * @param backlog (ATTENTION: needs TCP_LISTEN_BACKLOG=1) - * @return 0 on success, non-zero on failure - */ -int -lwip_listen(int s, int backlog) -{ - struct lwip_sock *sock; - err_t err; - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_listen(%d, backlog=%d)\n", s, backlog)); - - sock = get_socket(s); - if (!sock) { - return -1; - } - - /* limit the "backlog" parameter to fit in an uint8_t */ - backlog = LWIP_MIN(LWIP_MAX(backlog, 0), 0xff); - - err = netconn_listen_with_backlog(sock->conn, (uint8_t)backlog); - - if (err != ERR_OK) { - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_listen(%d) failed, err=%d\n", s, err)); - if (netconn_type(sock->conn) != NETCONN_TCP) { - sock_set_errno(sock, EOPNOTSUPP); - return EOPNOTSUPP; - } - sock_set_errno(sock, err_to_errno(err)); - return -1; - } - - sock_set_errno(sock, 0); - return 0; -} - -int -lwip_recvfrom(int s, void *mem, size_t len, int flags, - struct sockaddr *from, socklen_t *fromlen) -{ - struct lwip_sock *sock; - void *buf = NULL; - struct pbuf *p; - uint16_t buflen, copylen; - int off = 0; - ip_addr_t *addr; - uint16_t port; - uint8_t done = 0; - err_t err; - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom(%d, %p, %"SZT_F", 0x%x, ..)\n", s, mem, len, flags)); - sock = get_socket(s); - if (!sock) { - return -1; - } - - do { - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom: top while sock->lastdata=%p\n", sock->lastdata)); - /* Check if there is data left from the last recv operation. */ - if (sock->lastdata) { - buf = sock->lastdata; - } else { - /* If this is non-blocking call, then check first */ - if (((flags & MSG_DONTWAIT) || netconn_is_nonblocking(sock->conn)) && - (sock->rcvevent <= 0)) { - if (off > 0) { - /* update receive window */ - netconn_recved(sock->conn, (uint32_t)off); - /* already received data, return that */ - sock_set_errno(sock, 0); - return off; - } - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom(%d): returning EWOULDBLOCK\n", s)); - sock_set_errno(sock, EWOULDBLOCK); - return -1; - } - - /* No data was left from the previous operation, so we try to get - some from the network. */ - if (netconn_type(sock->conn) == NETCONN_TCP) { - err = netconn_recv_tcp_pbuf(sock->conn, (struct pbuf **)&buf); - } else { - err = netconn_recv(sock->conn, (struct netbuf **)&buf); - } - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom: netconn_recv err=%d, netbuf=%p\n", - err, buf)); - - if (err != ERR_OK) { - if (off > 0) { - /* update receive window */ - netconn_recved(sock->conn, (uint32_t)off); - /* already received data, return that */ - sock_set_errno(sock, 0); - return off; - } - /* We should really do some error checking here. */ - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom(%d): buf == NULL, error is \"%s\"!\n", - s, lwip_strerr(err))); - sock_set_errno(sock, err_to_errno(err)); - if (err == ERR_CLSD) { - return 0; - } else { - return -1; - } - } - LWIP_ASSERT("buf != NULL", buf != NULL); - sock->lastdata = buf; - } - - if (netconn_type(sock->conn) == NETCONN_TCP) { - p = (struct pbuf *)buf; - } else { - p = ((struct netbuf *)buf)->p; - } - buflen = p->tot_len; - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom: buflen=%"U16_F" len=%"SZT_F" off=%d sock->lastoffset=%"U16_F"\n", - buflen, len, off, sock->lastoffset)); - - buflen -= sock->lastoffset; - - if (len > buflen) { - copylen = buflen; - } else { - copylen = (uint16_t)len; - } - - /* copy the contents of the received buffer into - the supplied memory pointer mem */ - pbuf_copy_partial(p, (uint8_t*)mem + off, copylen, sock->lastoffset); - - off += copylen; - - if (netconn_type(sock->conn) == NETCONN_TCP) { - LWIP_ASSERT("invalid copylen, len would underflow", len >= copylen); - len -= copylen; - if ( (len <= 0) || - (p->flags & PBUF_FLAG_PUSH) || - (sock->rcvevent <= 0) || - ((flags & MSG_PEEK)!=0)) { - done = 1; - } - } else { - done = 1; - } - - /* Check to see from where the data was.*/ - if (done) { - ip_addr_t fromaddr; - if (from && fromlen) { - struct sockaddr_in sin; - - if (netconn_type(sock->conn) == NETCONN_TCP) { - addr = &fromaddr; - netconn_getaddr(sock->conn, addr, &port, 0); - } else { - addr = netbuf_fromaddr((struct netbuf *)buf); - port = netbuf_fromport((struct netbuf *)buf); - } - - memset(&sin, 0, sizeof(sin)); - sin.sin_len = sizeof(sin); - sin.sin_family = AF_INET; - sin.sin_port = htons(port); - inet_addr_from_ipaddr(&sin.sin_addr, addr); - - if (*fromlen > sizeof(sin)) { - *fromlen = sizeof(sin); - } - - MEMCPY(from, &sin, *fromlen); - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom(%d): addr=", s)); - ip_addr_debug_print(SOCKETS_DEBUG, addr); - LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F" len=%d\n", port, off)); - } else { -#if SOCKETS_DEBUG - if (netconn_type(sock->conn) == NETCONN_TCP) { - addr = &fromaddr; - netconn_getaddr(sock->conn, addr, &port, 0); - } else { - addr = netbuf_fromaddr((struct netbuf *)buf); - port = netbuf_fromport((struct netbuf *)buf); - } - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom(%d): addr=", s)); - ip_addr_debug_print(SOCKETS_DEBUG, addr); - LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F" len=%d\n", port, off)); -#endif /* SOCKETS_DEBUG */ - } - } - - /* If we don't peek the incoming message... */ - if ((flags & MSG_PEEK) == 0) { - /* If this is a TCP socket, check if there is data left in the - buffer. If so, it should be saved in the sock structure for next - time around. */ - if ((netconn_type(sock->conn) == NETCONN_TCP) && (buflen - copylen > 0)) { - sock->lastdata = buf; - sock->lastoffset += copylen; - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom: lastdata now netbuf=%p\n", buf)); - } else { - sock->lastdata = NULL; - sock->lastoffset = 0; - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom: deleting netbuf=%p\n", buf)); - if (netconn_type(sock->conn) == NETCONN_TCP) { - pbuf_free((struct pbuf *)buf); - } else { - netbuf_delete((struct netbuf *)buf); - } - } - } - } while (!done); - - if (off > 0) { - /* update receive window */ - netconn_recved(sock->conn, (uint32_t)off); - } - sock_set_errno(sock, 0); - return off; -} - -int -lwip_read(int s, void *mem, size_t len) -{ - return lwip_recvfrom(s, mem, len, 0, NULL, NULL); -} - -int -lwip_recv(int s, void *mem, size_t len, int flags) -{ - return lwip_recvfrom(s, mem, len, flags, NULL, NULL); -} - -int -lwip_send(int s, const void *data, size_t size, int flags) -{ - struct lwip_sock *sock; - err_t err; - uint8_t write_flags; - size_t written; - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_send(%d, data=%p, size=%"SZT_F", flags=0x%x)\n", - s, data, size, flags)); - - sock = get_socket(s); - if (!sock) { - return -1; - } - - if (sock->conn->type != NETCONN_TCP) { -#if (LWIP_UDP || LWIP_RAW) - return lwip_sendto(s, data, size, flags, NULL, 0); -#else /* (LWIP_UDP || LWIP_RAW) */ - sock_set_errno(sock, err_to_errno(ERR_ARG)); - return -1; -#endif /* (LWIP_UDP || LWIP_RAW) */ - } - - write_flags = NETCONN_COPY | - ((flags & MSG_MORE) ? NETCONN_MORE : 0) | - ((flags & MSG_DONTWAIT) ? NETCONN_DONTBLOCK : 0); - written = 0; - err = netconn_write_partly(sock->conn, data, size, write_flags, &written); - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_send(%d) err=%d written=%"SZT_F"\n", s, err, written)); - sock_set_errno(sock, err_to_errno(err)); - return (err == ERR_OK ? (int)written : -1); -} - -int -lwip_sendto(int s, const void *data, size_t size, int flags, - const struct sockaddr *to, socklen_t tolen) -{ - struct lwip_sock *sock; - err_t err; - uint16_t short_size; - const struct sockaddr_in *to_in; - uint16_t remote_port; -#if !LWIP_TCPIP_CORE_LOCKING - struct netbuf buf; -#endif - - sock = get_socket(s); - if (!sock) { - return -1; - } - - if (sock->conn->type == NETCONN_TCP) { -#if LWIP_TCP - return lwip_send(s, data, size, flags); -#else /* LWIP_TCP */ - LWIP_UNUSED_ARG(flags); - sock_set_errno(sock, err_to_errno(ERR_ARG)); - return -1; -#endif /* LWIP_TCP */ - } - - /* @todo: split into multiple sendto's? */ - LWIP_ASSERT("lwip_sendto: size must fit in uint16_t", size <= 0xffff); - short_size = (uint16_t)size; - LWIP_ERROR("lwip_sendto: invalid address", (((to == NULL) && (tolen == 0)) || - ((tolen == sizeof(struct sockaddr_in)) && - ((to->sa_family) == AF_INET) && ((((mem_ptr_t)to) % 4) == 0))), - sock_set_errno(sock, err_to_errno(ERR_ARG)); return -1;); - to_in = (const struct sockaddr_in *)(void*)to; - -#if LWIP_TCPIP_CORE_LOCKING - /* Should only be consider like a sample or a simple way to experiment this option (no check of "to" field...) */ - { - struct pbuf* p; - ip_addr_t *remote_addr; - -#if LWIP_NETIF_TX_SINGLE_PBUF - p = pbuf_alloc(PBUF_TRANSPORT, short_size, PBUF_RAM); - if (p != NULL) { -#if LWIP_CHECKSUM_ON_COPY - uint16_t chksum = 0; - if (sock->conn->type != NETCONN_RAW) { - chksum = LWIP_CHKSUM_COPY(p->payload, data, short_size); - } else -#endif /* LWIP_CHECKSUM_ON_COPY */ - MEMCPY(p->payload, data, size); -#else /* LWIP_NETIF_TX_SINGLE_PBUF */ - p = pbuf_alloc(PBUF_TRANSPORT, short_size, PBUF_REF); - if (p != NULL) { - p->payload = (void*)data; -#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ - - if (to_in != NULL) { - inet_addr_to_ipaddr_p(remote_addr, &to_in->sin_addr); - remote_port = ntohs(to_in->sin_port); - } else { - remote_addr = &sock->conn->pcb.ip->remote_ip; -#if LWIP_UDP - if (NETCONNTYPE_GROUP(sock->conn->type) == NETCONN_UDP) { - remote_port = sock->conn->pcb.udp->remote_port; - } else -#endif /* LWIP_UDP */ - { - remote_port = 0; - } - } - - LOCK_TCPIP_CORE(); - if (netconn_type(sock->conn) == NETCONN_RAW) { -#if LWIP_RAW - err = sock->conn->last_err = raw_sendto(sock->conn->pcb.raw, p, remote_addr); -#else /* LWIP_RAW */ - err = ERR_ARG; -#endif /* LWIP_RAW */ - } -#if LWIP_UDP && LWIP_RAW - else -#endif /* LWIP_UDP && LWIP_RAW */ - { -#if LWIP_UDP -#if LWIP_CHECKSUM_ON_COPY && LWIP_NETIF_TX_SINGLE_PBUF - err = sock->conn->last_err = udp_sendto_chksum(sock->conn->pcb.udp, p, - remote_addr, remote_port, 1, chksum); -#else /* LWIP_CHECKSUM_ON_COPY && LWIP_NETIF_TX_SINGLE_PBUF */ - err = sock->conn->last_err = udp_sendto(sock->conn->pcb.udp, p, - remote_addr, remote_port); -#endif /* LWIP_CHECKSUM_ON_COPY && LWIP_NETIF_TX_SINGLE_PBUF */ -#else /* LWIP_UDP */ - err = ERR_ARG; -#endif /* LWIP_UDP */ - } - UNLOCK_TCPIP_CORE(); - - pbuf_free(p); - } else { - err = ERR_MEM; - } - } -#else /* LWIP_TCPIP_CORE_LOCKING */ - /* initialize a buffer */ - buf.p = buf.ptr = NULL; -#if LWIP_CHECKSUM_ON_COPY - buf.flags = 0; -#endif /* LWIP_CHECKSUM_ON_COPY */ - if (to) { - inet_addr_to_ipaddr(&buf.addr, &to_in->sin_addr); - remote_port = ntohs(to_in->sin_port); - netbuf_fromport(&buf) = remote_port; - } else { - remote_port = 0; - ip_addr_set_any(&buf.addr); - netbuf_fromport(&buf) = 0; - } - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_sendto(%d, data=%p, short_size=%"U16_F", flags=0x%x to=", - s, data, short_size, flags)); - ip_addr_debug_print(SOCKETS_DEBUG, &buf.addr); - LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F"\n", remote_port)); - - /* make the buffer point to the data that should be sent */ -#if LWIP_NETIF_TX_SINGLE_PBUF - /* Allocate a new netbuf and copy the data into it. */ - if (netbuf_alloc(&buf, short_size) == NULL) { - err = ERR_MEM; - } else { -#if LWIP_CHECKSUM_ON_COPY - if (sock->conn->type != NETCONN_RAW) { - uint16_t chksum = LWIP_CHKSUM_COPY(buf.p->payload, data, short_size); - netbuf_set_chksum(&buf, chksum); - err = ERR_OK; - } else -#endif /* LWIP_CHECKSUM_ON_COPY */ - { - err = netbuf_take(&buf, data, short_size); - } - } -#else /* LWIP_NETIF_TX_SINGLE_PBUF */ - err = netbuf_ref(&buf, data, short_size); -#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ - if (err == ERR_OK) { - /* send the data */ - err = netconn_send(sock->conn, &buf); - } - - /* deallocated the buffer */ - netbuf_free(&buf); -#endif /* LWIP_TCPIP_CORE_LOCKING */ - sock_set_errno(sock, err_to_errno(err)); - return (err == ERR_OK ? short_size : -1); -} - -int -lwip_socket(int domain, int type, int protocol) -{ - struct netconn *conn; - int i; - - LWIP_UNUSED_ARG(domain); - - /* create a netconn */ - switch (type) { - case SOCK_RAW: - conn = netconn_new_with_proto_and_callback(NETCONN_RAW, (uint8_t)protocol, event_callback); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%s, SOCK_RAW, %d) = ", - domain == PF_INET ? "PF_INET" : "UNKNOWN", protocol)); - break; - case SOCK_DGRAM: - conn = netconn_new_with_callback( (protocol == IPPROTO_UDPLITE) ? - NETCONN_UDPLITE : NETCONN_UDP, event_callback); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%s, SOCK_DGRAM, %d) = ", - domain == PF_INET ? "PF_INET" : "UNKNOWN", protocol)); - break; - case SOCK_STREAM: - conn = netconn_new_with_callback(NETCONN_TCP, event_callback); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%s, SOCK_STREAM, %d) = ", - domain == PF_INET ? "PF_INET" : "UNKNOWN", protocol)); - if (conn != NULL) { - /* Prevent automatic window updates, we do this on our own! */ - netconn_set_noautorecved(conn, 1); - } - break; - default: - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%d, %d/UNKNOWN, %d) = -1\n", - domain, type, protocol)); - set_errno(EINVAL); - return -1; - } - - if (!conn) { - LWIP_DEBUGF(SOCKETS_DEBUG, ("-1 / ENOBUFS (could not create netconn)\n")); - set_errno(ENOBUFS); - return -1; - } - - i = alloc_socket(conn, 0); - - if (i == -1) { - netconn_delete(conn); - set_errno(ENFILE); - return -1; - } - conn->socket = i; - LWIP_DEBUGF(SOCKETS_DEBUG, ("%d\n", i)); - set_errno(0); - return i; -} - -int -lwip_write(int s, const void *data, size_t size) -{ - return lwip_send(s, data, size, 0); -} - -/** - * Go through the readset and writeset lists and see which socket of the sockets - * set in the sets has events. On return, readset, writeset and exceptset have - * the sockets enabled that had events. - * - * exceptset is not used for now! - * - * @param maxfdp1 the highest socket index in the sets - * @param readset_in: set of sockets to check for read events - * @param writeset_in: set of sockets to check for write events - * @param exceptset_in: set of sockets to check for error events - * @param readset_out: set of sockets that had read events - * @param writeset_out: set of sockets that had write events - * @param exceptset_out: set os sockets that had error events - * @return number of sockets that had events (read/write/exception) (>= 0) - */ -static int -lwip_selscan(int maxfdp1, fd_set *readset_in, fd_set *writeset_in, fd_set *exceptset_in, - fd_set *readset_out, fd_set *writeset_out, fd_set *exceptset_out) -{ - int i, nready = 0; - fd_set lreadset, lwriteset, lexceptset; - struct lwip_sock *sock; - SYS_ARCH_DECL_PROTECT(lev); - - FD_ZERO(&lreadset); - FD_ZERO(&lwriteset); - FD_ZERO(&lexceptset); - - /* Go through each socket in each list to count number of sockets which - currently match */ - for(i = 0; i < maxfdp1; i++) { - void* lastdata = NULL; - int16_t rcvevent = 0; - uint16_t sendevent = 0; - uint16_t errevent = 0; - /* First get the socket's status (protected)... */ - SYS_ARCH_PROTECT(lev); - sock = tryget_socket(i); - if (sock != NULL) { - lastdata = sock->lastdata; - rcvevent = sock->rcvevent; - sendevent = sock->sendevent; - errevent = sock->errevent; - } - SYS_ARCH_UNPROTECT(lev); - /* ... then examine it: */ - /* See if netconn of this socket is ready for read */ - if (readset_in && FD_ISSET(i, readset_in) && ((lastdata != NULL) || (rcvevent > 0))) { - FD_SET(i, &lreadset); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_selscan: fd=%d ready for reading\n", i)); - nready++; - } - /* See if netconn of this socket is ready for write */ - if (writeset_in && FD_ISSET(i, writeset_in) && (sendevent != 0)) { - FD_SET(i, &lwriteset); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_selscan: fd=%d ready for writing\n", i)); - nready++; - } - /* See if netconn of this socket had an error */ - if (exceptset_in && FD_ISSET(i, exceptset_in) && (errevent != 0)) { - FD_SET(i, &lexceptset); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_selscan: fd=%d ready for exception\n", i)); - nready++; - } - } - /* copy local sets to the ones provided as arguments */ - *readset_out = lreadset; - *writeset_out = lwriteset; - *exceptset_out = lexceptset; - - LWIP_ASSERT("nready >= 0", nready >= 0); - return nready; -} - -/** - * Processing exceptset is not yet implemented. - */ -int -lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, - struct timeval *timeout) -{ - uint32_t waitres = 0; - int nready; - fd_set lreadset, lwriteset, lexceptset; - uint32_t msectimeout; - struct lwip_select_cb select_cb; - err_t err; - int i; - SYS_ARCH_DECL_PROTECT(lev); - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_select(%d, %p, %p, %p, tvsec=%"S32_F" tvusec=%"S32_F")\n", - maxfdp1, (void *)readset, (void *) writeset, (void *) exceptset, - timeout ? (int32_t)timeout->tv_sec : (int32_t)-1, - timeout ? (int32_t)timeout->tv_usec : (int32_t)-1)); - - /* Go through each socket in each list to count number of sockets which - currently match */ - nready = lwip_selscan(maxfdp1, readset, writeset, exceptset, &lreadset, &lwriteset, &lexceptset); - - /* If we don't have any current events, then suspend if we are supposed to */ - if (!nready) { - if (timeout && timeout->tv_sec == 0 && timeout->tv_usec == 0) { - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_select: no timeout, returning 0\n")); - /* This is OK as the local fdsets are empty and nready is zero, - or we would have returned earlier. */ - goto return_copy_fdsets; - } - - /* None ready: add our semaphore to list: - We don't actually need any dynamic memory. Our entry on the - list is only valid while we are in this function, so it's ok - to use local variables. */ - - select_cb.next = NULL; - select_cb.prev = NULL; - select_cb.readset = readset; - select_cb.writeset = writeset; - select_cb.exceptset = exceptset; - select_cb.sem_signalled = 0; - err = sys_sem_new(&select_cb.sem, 0); - if (err != ERR_OK) { - /* failed to create semaphore */ - set_errno(ENOMEM); - return -1; - } - - /* Protect the select_cb_list */ - SYS_ARCH_PROTECT(lev); - - /* Put this select_cb on top of list */ - select_cb.next = select_cb_list; - if (select_cb_list != NULL) { - select_cb_list->prev = &select_cb; - } - select_cb_list = &select_cb; - /* Increasing this counter tells even_callback that the list has changed. */ - select_cb_ctr++; - - /* Now we can safely unprotect */ - SYS_ARCH_UNPROTECT(lev); - - /* Increase select_waiting for each socket we are interested in */ - for(i = 0; i < maxfdp1; i++) { - if ((readset && FD_ISSET(i, readset)) || - (writeset && FD_ISSET(i, writeset)) || - (exceptset && FD_ISSET(i, exceptset))) { - struct lwip_sock *sock = tryget_socket(i); - LWIP_ASSERT("sock != NULL", sock != NULL); - SYS_ARCH_PROTECT(lev); - sock->select_waiting++; - LWIP_ASSERT("sock->select_waiting > 0", sock->select_waiting > 0); - SYS_ARCH_UNPROTECT(lev); - } - } - - /* Call lwip_selscan again: there could have been events between - the last scan (whithout us on the list) and putting us on the list! */ - nready = lwip_selscan(maxfdp1, readset, writeset, exceptset, &lreadset, &lwriteset, &lexceptset); - if (!nready) { - /* Still none ready, just wait to be woken */ - if (timeout == 0) { - /* Wait forever */ - msectimeout = 0; - } else { - msectimeout = ((timeout->tv_sec * 1000) + ((timeout->tv_usec + 500)/1000)); - if (msectimeout == 0) { - /* Wait 1ms at least (0 means wait forever) */ - msectimeout = 1; - } - } - - waitres = sys_arch_sem_wait(&select_cb.sem, msectimeout); - } - /* Increase select_waiting for each socket we are interested in */ - for(i = 0; i < maxfdp1; i++) { - if ((readset && FD_ISSET(i, readset)) || - (writeset && FD_ISSET(i, writeset)) || - (exceptset && FD_ISSET(i, exceptset))) { - struct lwip_sock *sock = tryget_socket(i); - LWIP_ASSERT("sock != NULL", sock != NULL); - SYS_ARCH_PROTECT(lev); - sock->select_waiting--; - LWIP_ASSERT("sock->select_waiting >= 0", sock->select_waiting >= 0); - SYS_ARCH_UNPROTECT(lev); - } - } - /* Take us off the list */ - SYS_ARCH_PROTECT(lev); - if (select_cb.next != NULL) { - select_cb.next->prev = select_cb.prev; - } - if (select_cb_list == &select_cb) { - LWIP_ASSERT("select_cb.prev == NULL", select_cb.prev == NULL); - select_cb_list = select_cb.next; - } else { - LWIP_ASSERT("select_cb.prev != NULL", select_cb.prev != NULL); - select_cb.prev->next = select_cb.next; - } - /* Increasing this counter tells even_callback that the list has changed. */ - select_cb_ctr++; - SYS_ARCH_UNPROTECT(lev); - - sys_sem_free(&select_cb.sem); - if (waitres == SYS_ARCH_TIMEOUT) { - /* Timeout */ - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_select: timeout expired\n")); - /* This is OK as the local fdsets are empty and nready is zero, - or we would have returned earlier. */ - goto return_copy_fdsets; - } - - /* See what's set */ - nready = lwip_selscan(maxfdp1, readset, writeset, exceptset, &lreadset, &lwriteset, &lexceptset); - } - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_select: nready=%d\n", nready)); -return_copy_fdsets: - set_errno(0); - if (readset) { - *readset = lreadset; - } - if (writeset) { - *writeset = lwriteset; - } - if (exceptset) { - *exceptset = lexceptset; - } - - - return nready; -} - -/** - * Callback registered in the netconn layer for each socket-netconn. - * Processes recvevent (data available) and wakes up tasks waiting for select. - */ -static void -event_callback(struct netconn *conn, enum netconn_evt evt, uint16_t len) -{ - int s; - struct lwip_sock *sock; - struct lwip_select_cb *scb; - int last_select_cb_ctr; - SYS_ARCH_DECL_PROTECT(lev); - - LWIP_UNUSED_ARG(len); - - /* Get socket */ - if (conn) { - s = conn->socket; - if (s < 0) { - /* Data comes in right away after an accept, even though - * the server task might not have created a new socket yet. - * Just count down (or up) if that's the case and we - * will use the data later. Note that only receive events - * can happen before the new socket is set up. */ - SYS_ARCH_PROTECT(lev); - if (conn->socket < 0) { - if (evt == NETCONN_EVT_RCVPLUS) { - conn->socket--; - } - SYS_ARCH_UNPROTECT(lev); - return; - } - s = conn->socket; - SYS_ARCH_UNPROTECT(lev); - } - - sock = get_socket(s); - if (!sock) { - return; - } - } else { - return; - } - - SYS_ARCH_PROTECT(lev); - /* Set event as required */ - switch (evt) { - case NETCONN_EVT_RCVPLUS: - sock->rcvevent++; - break; - case NETCONN_EVT_RCVMINUS: - sock->rcvevent--; - break; - case NETCONN_EVT_SENDPLUS: - sock->sendevent = 1; - break; - case NETCONN_EVT_SENDMINUS: - sock->sendevent = 0; - break; - case NETCONN_EVT_ERROR: - sock->errevent = 1; - break; - default: - LWIP_ASSERT("unknown event", 0); - break; - } - - if (sock->select_waiting == 0) { - /* noone is waiting for this socket, no need to check select_cb_list */ - SYS_ARCH_UNPROTECT(lev); - return; - } - - /* Now decide if anyone is waiting for this socket */ - /* NOTE: This code goes through the select_cb_list list multiple times - ONLY IF a select was actually waiting. We go through the list the number - of waiting select calls + 1. This list is expected to be small. */ - - /* At this point, SYS_ARCH is still protected! */ -again: - for (scb = select_cb_list; scb != NULL; scb = scb->next) { - if (scb->sem_signalled == 0) { - /* semaphore not signalled yet */ - int do_signal = 0; - /* Test this select call for our socket */ - if (sock->rcvevent > 0) { - if (scb->readset && FD_ISSET(s, scb->readset)) { - do_signal = 1; - } - } - if (sock->sendevent != 0) { - if (!do_signal && scb->writeset && FD_ISSET(s, scb->writeset)) { - do_signal = 1; - } - } - if (sock->errevent != 0) { - if (!do_signal && scb->exceptset && FD_ISSET(s, scb->exceptset)) { - do_signal = 1; - } - } - if (do_signal) { - scb->sem_signalled = 1; - /* Don't call SYS_ARCH_UNPROTECT() before signaling the semaphore, as this might - lead to the select thread taking itself off the list, invalidagin the semaphore. */ - sys_sem_signal(&scb->sem); - } - } - /* unlock interrupts with each step */ - last_select_cb_ctr = select_cb_ctr; - SYS_ARCH_UNPROTECT(lev); - /* this makes sure interrupt protection time is short */ - SYS_ARCH_PROTECT(lev); - if (last_select_cb_ctr != select_cb_ctr) { - /* someone has changed select_cb_list, restart at the beginning */ - goto again; - } - } - SYS_ARCH_UNPROTECT(lev); -} - -/** - * Unimplemented: Close one end of a full-duplex connection. - * Currently, the full connection is closed. - */ -int -lwip_shutdown(int s, int how) -{ - struct lwip_sock *sock; - err_t err; - uint8_t shut_rx = 0, shut_tx = 0; - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_shutdown(%d, how=%d)\n", s, how)); - - sock = get_socket(s); - if (!sock) { - return -1; - } - - if (sock->conn != NULL) { - if (netconn_type(sock->conn) != NETCONN_TCP) { - sock_set_errno(sock, EOPNOTSUPP); - return EOPNOTSUPP; - } - } else { - sock_set_errno(sock, ENOTCONN); - return ENOTCONN; - } - - if (how == SHUT_RD) { - shut_rx = 1; - } else if (how == SHUT_WR) { - shut_tx = 1; - } else if(how == SHUT_RDWR) { - shut_rx = 1; - shut_tx = 1; - } else { - sock_set_errno(sock, EINVAL); - return EINVAL; - } - err = netconn_shutdown(sock->conn, shut_rx, shut_tx); - - sock_set_errno(sock, err_to_errno(err)); - return (err == ERR_OK ? 0 : -1); -} - -static int -lwip_getaddrname(int s, struct sockaddr *name, socklen_t *namelen, uint8_t local) -{ - struct lwip_sock *sock; - struct sockaddr_in sin; - ip_addr_t naddr; - - sock = get_socket(s); - if (!sock) { - return -1; - } - - memset(&sin, 0, sizeof(sin)); - sin.sin_len = sizeof(sin); - sin.sin_family = AF_INET; - - /* get the IP address and port */ - netconn_getaddr(sock->conn, &naddr, &sin.sin_port, local); - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getaddrname(%d, addr=", s)); - ip_addr_debug_print(SOCKETS_DEBUG, &naddr); - LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F")\n", sin.sin_port)); - - sin.sin_port = htons(sin.sin_port); - inet_addr_from_ipaddr(&sin.sin_addr, &naddr); - - if (*namelen > sizeof(sin)) { - *namelen = sizeof(sin); - } - - MEMCPY(name, &sin, *namelen); - sock_set_errno(sock, 0); - return 0; -} - -int -lwip_getpeername(int s, struct sockaddr *name, socklen_t *namelen) -{ - return lwip_getaddrname(s, name, namelen, 0); -} - -int -lwip_getsockname(int s, struct sockaddr *name, socklen_t *namelen) -{ - return lwip_getaddrname(s, name, namelen, 1); -} - -int -lwip_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen) -{ - err_t err = ERR_OK; - struct lwip_sock *sock = get_socket(s); - struct lwip_setgetsockopt_data data; - - if (!sock) { - return -1; - } - - if ((NULL == optval) || (NULL == optlen)) { - sock_set_errno(sock, EFAULT); - return -1; - } - - /* Do length and type checks for the various options first, to keep it readable. */ - switch (level) { - -/* Level: SOL_SOCKET */ - case SOL_SOCKET: - switch (optname) { - - case SO_ACCEPTCONN: - case SO_BROADCAST: - /* UNIMPL case SO_DEBUG: */ - /* UNIMPL case SO_DONTROUTE: */ - case SO_ERROR: - case SO_KEEPALIVE: - /* UNIMPL case SO_CONTIMEO: */ -#if LWIP_SO_SNDTIMEO - case SO_SNDTIMEO: -#endif /* LWIP_SO_SNDTIMEO */ -#if LWIP_SO_RCVTIMEO - case SO_RCVTIMEO: -#endif /* LWIP_SO_RCVTIMEO */ -#if LWIP_SO_RCVBUF - case SO_RCVBUF: -#endif /* LWIP_SO_RCVBUF */ - /* UNIMPL case SO_OOBINLINE: */ - /* UNIMPL case SO_SNDBUF: */ - /* UNIMPL case SO_RCVLOWAT: */ - /* UNIMPL case SO_SNDLOWAT: */ -#if SO_REUSE - case SO_REUSEADDR: - case SO_REUSEPORT: -#endif /* SO_REUSE */ - case SO_TYPE: - /* UNIMPL case SO_USELOOPBACK: */ - if (*optlen < sizeof(int)) { - err = EINVAL; - } - break; - - case SO_NO_CHECK: - if (*optlen < sizeof(int)) { - err = EINVAL; - } -#if LWIP_UDP - if ((sock->conn->type != NETCONN_UDP) || - ((udp_flags(sock->conn->pcb.udp) & UDP_FLAGS_UDPLITE) != 0)) { - /* this flag is only available for UDP, not for UDP lite */ - err = EAFNOSUPPORT; - } -#endif /* LWIP_UDP */ - break; - - default: - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, UNIMPL: optname=0x%x, ..)\n", - s, optname)); - err = ENOPROTOOPT; - } /* switch (optname) */ - break; - -/* Level: IPPROTO_IP */ - case IPPROTO_IP: - switch (optname) { - /* UNIMPL case IP_HDRINCL: */ - /* UNIMPL case IP_RCVDSTADDR: */ - /* UNIMPL case IP_RCVIF: */ - case IP_TTL: - case IP_TOS: - if (*optlen < sizeof(int)) { - err = EINVAL; - } - break; -#if LWIP_IGMP - case IP_MULTICAST_TTL: - if (*optlen < sizeof(uint8_t)) { - err = EINVAL; - } - break; - case IP_MULTICAST_IF: - if (*optlen < sizeof(struct in_addr)) { - err = EINVAL; - } - break; - case IP_MULTICAST_LOOP: - if (*optlen < sizeof(uint8_t)) { - err = EINVAL; - } - if (NETCONNTYPE_GROUP(sock->conn->type) != NETCONN_UDP) { - err = EAFNOSUPPORT; - } - break; -#endif /* LWIP_IGMP */ - - default: - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, UNIMPL: optname=0x%x, ..)\n", - s, optname)); - err = ENOPROTOOPT; - } /* switch (optname) */ - break; - -#if LWIP_TCP -/* Level: IPPROTO_TCP */ - case IPPROTO_TCP: - if (*optlen < sizeof(int)) { - err = EINVAL; - break; - } - - /* If this is no TCP socket, ignore any options. */ - if (sock->conn->type != NETCONN_TCP) - return 0; - - switch (optname) { - case TCP_NODELAY: - case TCP_KEEPALIVE: -#if LWIP_TCP_KEEPALIVE - case TCP_KEEPIDLE: - case TCP_KEEPINTVL: - case TCP_KEEPCNT: -#endif /* LWIP_TCP_KEEPALIVE */ - break; - - default: - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_TCP, UNIMPL: optname=0x%x, ..)\n", - s, optname)); - err = ENOPROTOOPT; - } /* switch (optname) */ - break; -#endif /* LWIP_TCP */ -#if LWIP_UDP && LWIP_UDPLITE -/* Level: IPPROTO_UDPLITE */ - case IPPROTO_UDPLITE: - if (*optlen < sizeof(int)) { - err = EINVAL; - break; - } - - /* If this is no UDP lite socket, ignore any options. */ - if (sock->conn->type != NETCONN_UDPLITE) { - return 0; - } - - switch (optname) { - case UDPLITE_SEND_CSCOV: - case UDPLITE_RECV_CSCOV: - break; - - default: - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_UDPLITE, UNIMPL: optname=0x%x, ..)\n", - s, optname)); - err = ENOPROTOOPT; - } /* switch (optname) */ - break; -#endif /* LWIP_UDP && LWIP_UDPLITE*/ -/* UNDEFINED LEVEL */ - default: - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, level=0x%x, UNIMPL: optname=0x%x, ..)\n", - s, level, optname)); - err = ENOPROTOOPT; - } /* switch */ - - - if (err != ERR_OK) { - sock_set_errno(sock, err); - return -1; - } - - /* Now do the actual option processing */ - data.sock = sock; -#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) - data.s = s; -#endif /* LWIP_DEBUG */ - data.level = level; - data.optname = optname; - data.optval = optval; - data.optlen = optlen; - data.err = err; - tcpip_callback(lwip_getsockopt_internal, &data); - sys_arch_sem_wait(&sock->conn->op_completed, 0); - /* maybe lwip_getsockopt_internal has changed err */ - err = data.err; - - sock_set_errno(sock, err); - return err ? -1 : 0; -} - -static void -lwip_getsockopt_internal(void *arg) -{ - struct lwip_sock *sock; - int level, optname; - void *optval; - struct lwip_setgetsockopt_data *data; - - LWIP_ASSERT("arg != NULL", arg != NULL); - - data = (struct lwip_setgetsockopt_data*)arg; - sock = data->sock; -#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) - int s = data->s; -#endif /* LWIP_DEBUG */ - level = data->level; - optname = data->optname; - optval = data->optval; - - switch (level) { - -/* Level: SOL_SOCKET */ - case SOL_SOCKET: - switch (optname) { - - /* The option flags */ - case SO_ACCEPTCONN: - case SO_BROADCAST: - /* UNIMPL case SO_DEBUG: */ - /* UNIMPL case SO_DONTROUTE: */ - case SO_KEEPALIVE: - /* UNIMPL case SO_OOBINCLUDE: */ -#if SO_REUSE - case SO_REUSEADDR: - case SO_REUSEPORT: -#endif /* SO_REUSE */ - /*case SO_USELOOPBACK: UNIMPL */ - *(int*)optval = ip_get_option(sock->conn->pcb.ip, optname); -#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, optname=0x%x, ..) = %s\n", - s, optname, (*(int*)optval?"on":"off"))); -#endif /* LWIP_DEBUG */ - break; - - case SO_TYPE: - switch (NETCONNTYPE_GROUP(sock->conn->type)) { - case NETCONN_RAW: - *(int*)optval = SOCK_RAW; - break; - case NETCONN_TCP: - *(int*)optval = SOCK_STREAM; - break; - case NETCONN_UDP: - *(int*)optval = SOCK_DGRAM; - break; - default: /* unrecognized socket type */ - *(int*)optval = sock->conn->type; - LWIP_DEBUGF(SOCKETS_DEBUG, - ("lwip_getsockopt(%d, SOL_SOCKET, SO_TYPE): unrecognized socket type %d\n", - s, *(int *)optval)); - } /* switch (sock->conn->type) */ - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, SO_TYPE) = %d\n", - s, *(int *)optval)); - break; - - case SO_ERROR: - /* only overwrite ERR_OK or tempoary errors */ - if ((sock->err == 0) || (sock->err == EINPROGRESS)) { - sock_set_errno(sock, err_to_errno(sock->conn->last_err)); - } - *(int *)optval = sock->err; - sock->err = 0; - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, SO_ERROR) = %d\n", - s, *(int *)optval)); - break; - -#if LWIP_SO_SNDTIMEO - case SO_SNDTIMEO: - *(int *)optval = netconn_get_sendtimeout(sock->conn); - break; -#endif /* LWIP_SO_SNDTIMEO */ -#if LWIP_SO_RCVTIMEO - case SO_RCVTIMEO: - *(int *)optval = netconn_get_recvtimeout(sock->conn); - break; -#endif /* LWIP_SO_RCVTIMEO */ -#if LWIP_SO_RCVBUF - case SO_RCVBUF: - *(int *)optval = netconn_get_recvbufsize(sock->conn); - break; -#endif /* LWIP_SO_RCVBUF */ -#if LWIP_UDP - case SO_NO_CHECK: - *(int*)optval = (udp_flags(sock->conn->pcb.udp) & UDP_FLAGS_NOCHKSUM) ? 1 : 0; - break; -#endif /* LWIP_UDP*/ - default: - LWIP_ASSERT("unhandled optname", 0); - break; - } /* switch (optname) */ - break; - -/* Level: IPPROTO_IP */ - case IPPROTO_IP: - switch (optname) { - case IP_TTL: - *(int*)optval = sock->conn->pcb.ip->ttl; - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_TTL) = %d\n", - s, *(int *)optval)); - break; - case IP_TOS: - *(int*)optval = sock->conn->pcb.ip->tos; - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_TOS) = %d\n", - s, *(int *)optval)); - break; -#if LWIP_IGMP - case IP_MULTICAST_TTL: - *(uint8_t*)optval = sock->conn->pcb.ip->ttl; - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_MULTICAST_TTL) = %d\n", - s, *(int *)optval)); - break; - case IP_MULTICAST_IF: - inet_addr_from_ipaddr((struct in_addr*)optval, &sock->conn->pcb.udp->multicast_ip); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_MULTICAST_IF) = 0x%"X32_F"\n", - s, *(uint32_t *)optval)); - break; - case IP_MULTICAST_LOOP: - if ((sock->conn->pcb.udp->flags & UDP_FLAGS_MULTICAST_LOOP) != 0) { - *(uint8_t*)optval = 1; - } else { - *(uint8_t*)optval = 0; - } - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_MULTICAST_LOOP) = %d\n", - s, *(int *)optval)); - break; -#endif /* LWIP_IGMP */ - default: - LWIP_ASSERT("unhandled optname", 0); - break; - } /* switch (optname) */ - break; - -#if LWIP_TCP -/* Level: IPPROTO_TCP */ - case IPPROTO_TCP: - switch (optname) { - case TCP_NODELAY: - *(int*)optval = tcp_nagle_disabled(sock->conn->pcb.tcp); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_TCP, TCP_NODELAY) = %s\n", - s, (*(int*)optval)?"on":"off") ); - break; - case TCP_KEEPALIVE: - *(int*)optval = (int)sock->conn->pcb.tcp->keep_idle; - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, TCP_KEEPALIVE) = %d\n", - s, *(int *)optval)); - break; - -#if LWIP_TCP_KEEPALIVE - case TCP_KEEPIDLE: - *(int*)optval = (int)(sock->conn->pcb.tcp->keep_idle/1000); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, TCP_KEEPIDLE) = %d\n", - s, *(int *)optval)); - break; - case TCP_KEEPINTVL: - *(int*)optval = (int)(sock->conn->pcb.tcp->keep_intvl/1000); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, TCP_KEEPINTVL) = %d\n", - s, *(int *)optval)); - break; - case TCP_KEEPCNT: - *(int*)optval = (int)sock->conn->pcb.tcp->keep_cnt; - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, TCP_KEEPCNT) = %d\n", - s, *(int *)optval)); - break; -#endif /* LWIP_TCP_KEEPALIVE */ - default: - LWIP_ASSERT("unhandled optname", 0); - break; - } /* switch (optname) */ - break; -#endif /* LWIP_TCP */ -#if LWIP_UDP && LWIP_UDPLITE - /* Level: IPPROTO_UDPLITE */ - case IPPROTO_UDPLITE: - switch (optname) { - case UDPLITE_SEND_CSCOV: - *(int*)optval = sock->conn->pcb.udp->chksum_len_tx; - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_UDPLITE, UDPLITE_SEND_CSCOV) = %d\n", - s, (*(int*)optval)) ); - break; - case UDPLITE_RECV_CSCOV: - *(int*)optval = sock->conn->pcb.udp->chksum_len_rx; - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_UDPLITE, UDPLITE_RECV_CSCOV) = %d\n", - s, (*(int*)optval)) ); - break; - default: - LWIP_ASSERT("unhandled optname", 0); - break; - } /* switch (optname) */ - break; -#endif /* LWIP_UDP */ - default: - LWIP_ASSERT("unhandled level", 0); - break; - } /* switch (level) */ - sys_sem_signal(&sock->conn->op_completed); -} - -int -lwip_setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen) -{ - struct lwip_sock *sock = get_socket(s); - err_t err = ERR_OK; - struct lwip_setgetsockopt_data data; - - if (!sock) { - return -1; - } - - if (NULL == optval) { - sock_set_errno(sock, EFAULT); - return -1; - } - - /* Do length and type checks for the various options first, to keep it readable. */ - switch (level) { - -/* Level: SOL_SOCKET */ - case SOL_SOCKET: - switch (optname) { - - case SO_BROADCAST: - /* UNIMPL case SO_DEBUG: */ - /* UNIMPL case SO_DONTROUTE: */ - case SO_KEEPALIVE: - /* UNIMPL case case SO_CONTIMEO: */ -#if LWIP_SO_SNDTIMEO - case SO_SNDTIMEO: -#endif /* LWIP_SO_SNDTIMEO */ -#if LWIP_SO_RCVTIMEO - case SO_RCVTIMEO: -#endif /* LWIP_SO_RCVTIMEO */ -#if LWIP_SO_RCVBUF - case SO_RCVBUF: -#endif /* LWIP_SO_RCVBUF */ - /* UNIMPL case SO_OOBINLINE: */ - /* UNIMPL case SO_SNDBUF: */ - /* UNIMPL case SO_RCVLOWAT: */ - /* UNIMPL case SO_SNDLOWAT: */ -#if SO_REUSE - case SO_REUSEADDR: - case SO_REUSEPORT: -#endif /* SO_REUSE */ - /* UNIMPL case SO_USELOOPBACK: */ - if (optlen < sizeof(int)) { - err = EINVAL; - } - break; - case SO_NO_CHECK: - if (optlen < sizeof(int)) { - err = EINVAL; - } -#if LWIP_UDP - if ((sock->conn->type != NETCONN_UDP) || - ((udp_flags(sock->conn->pcb.udp) & UDP_FLAGS_UDPLITE) != 0)) { - /* this flag is only available for UDP, not for UDP lite */ - err = EAFNOSUPPORT; - } -#endif /* LWIP_UDP */ - break; - default: - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, SOL_SOCKET, UNIMPL: optname=0x%x, ..)\n", - s, optname)); - err = ENOPROTOOPT; - } /* switch (optname) */ - break; - -/* Level: IPPROTO_IP */ - case IPPROTO_IP: - switch (optname) { - /* UNIMPL case IP_HDRINCL: */ - /* UNIMPL case IP_RCVDSTADDR: */ - /* UNIMPL case IP_RCVIF: */ - case IP_TTL: - case IP_TOS: - if (optlen < sizeof(uint8_t)) { - err = EINVAL; - } - sock->conn->pcb.udp->tos = *(uint8_t*)optval; - break; -#if LWIP_IGMP - case IP_MULTICAST_TTL: - if (optlen < sizeof(uint8_t)) { - err = EINVAL; - } - if (NETCONNTYPE_GROUP(sock->conn->type) != NETCONN_UDP) { - err = EAFNOSUPPORT; - } - break; - case IP_MULTICAST_IF: - if (optlen < sizeof(struct in_addr)) { - err = EINVAL; - } - if (NETCONNTYPE_GROUP(sock->conn->type) != NETCONN_UDP) { - err = EAFNOSUPPORT; - } - break; - case IP_MULTICAST_LOOP: - if (optlen < sizeof(uint8_t)) { - err = EINVAL; - } - if (NETCONNTYPE_GROUP(sock->conn->type) != NETCONN_UDP) { - err = EAFNOSUPPORT; - } - break; - case IP_ADD_MEMBERSHIP: - case IP_DROP_MEMBERSHIP: - if (optlen < sizeof(struct ip_mreq)) { - err = EINVAL; - } - if (NETCONNTYPE_GROUP(sock->conn->type) != NETCONN_UDP) { - err = EAFNOSUPPORT; - } - break; -#endif /* LWIP_IGMP */ - default: - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_IP, UNIMPL: optname=0x%x, ..)\n", - s, optname)); - err = ENOPROTOOPT; - } /* switch (optname) */ - break; - -#if LWIP_TCP -/* Level: IPPROTO_TCP */ - case IPPROTO_TCP: - if (optlen < sizeof(int)) { - err = EINVAL; - break; - } - - /* If this is no TCP socket, ignore any options. */ - if (sock->conn->type != NETCONN_TCP) - return 0; - - switch (optname) { - case TCP_NODELAY: - case TCP_KEEPALIVE: -#if LWIP_TCP_KEEPALIVE - case TCP_KEEPIDLE: - case TCP_KEEPINTVL: - case TCP_KEEPCNT: -#endif /* LWIP_TCP_KEEPALIVE */ - break; - - default: - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, UNIMPL: optname=0x%x, ..)\n", - s, optname)); - err = ENOPROTOOPT; - } /* switch (optname) */ - break; -#endif /* LWIP_TCP */ -#if LWIP_UDP && LWIP_UDPLITE -/* Level: IPPROTO_UDPLITE */ - case IPPROTO_UDPLITE: - if (optlen < sizeof(int)) { - err = EINVAL; - break; - } - - /* If this is no UDP lite socket, ignore any options. */ - if (sock->conn->type != NETCONN_UDPLITE) - return 0; - - switch (optname) { - case UDPLITE_SEND_CSCOV: - case UDPLITE_RECV_CSCOV: - break; - - default: - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_UDPLITE, UNIMPL: optname=0x%x, ..)\n", - s, optname)); - err = ENOPROTOOPT; - } /* switch (optname) */ - break; -#endif /* LWIP_UDP && LWIP_UDPLITE */ -/* UNDEFINED LEVEL */ - default: - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, level=0x%x, UNIMPL: optname=0x%x, ..)\n", - s, level, optname)); - err = ENOPROTOOPT; - } /* switch (level) */ - - - if (err != ERR_OK) { - sock_set_errno(sock, err); - return -1; - } - - - /* Now do the actual option processing */ - data.sock = sock; -#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) - data.s = s; -#endif /* LWIP_DEBUG */ - data.level = level; - data.optname = optname; - data.optval = (void*)optval; - data.optlen = &optlen; - data.err = err; - tcpip_callback(lwip_setsockopt_internal, &data); - sys_arch_sem_wait(&sock->conn->op_completed, 0); - /* maybe lwip_setsockopt_internal has changed err */ - err = data.err; - - sock_set_errno(sock, err); - return err ? -1 : 0; -} - -static void -lwip_setsockopt_internal(void *arg) -{ - struct lwip_sock *sock; -#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) - int s; -#endif /* LWIP_DEBUG */ - int level, optname; - const void *optval; - struct lwip_setgetsockopt_data *data; - - LWIP_ASSERT("arg != NULL", arg != NULL); - - data = (struct lwip_setgetsockopt_data*)arg; - sock = data->sock; -#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) - s = data->s; -#endif /* LWIP_DEBUG */ - level = data->level; - optname = data->optname; - optval = data->optval; - - switch (level) { - -/* Level: SOL_SOCKET */ - case SOL_SOCKET: - switch (optname) { - - /* The option flags */ - case SO_BROADCAST: - /* UNIMPL case SO_DEBUG: */ - /* UNIMPL case SO_DONTROUTE: */ - case SO_KEEPALIVE: - /* UNIMPL case SO_OOBINCLUDE: */ -#if SO_REUSE - case SO_REUSEADDR: - case SO_REUSEPORT: -#endif /* SO_REUSE */ - /* UNIMPL case SO_USELOOPBACK: */ - if (*(int*)optval) { - ip_set_option(sock->conn->pcb.ip, optname); - } else { - ip_reset_option(sock->conn->pcb.ip, optname); - } - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, SOL_SOCKET, optname=0x%x, ..) -> %s\n", - s, optname, (*(int*)optval?"on":"off"))); - break; -#if LWIP_SO_SNDTIMEO - case SO_SNDTIMEO: - netconn_set_sendtimeout(sock->conn, (int32_t)*(int*)optval); - break; -#endif /* LWIP_SO_SNDTIMEO */ -#if LWIP_SO_RCVTIMEO - case SO_RCVTIMEO: - netconn_set_recvtimeout(sock->conn, *(int*)optval); - break; -#endif /* LWIP_SO_RCVTIMEO */ -#if LWIP_SO_RCVBUF - case SO_RCVBUF: - netconn_set_recvbufsize(sock->conn, *(int*)optval); - break; -#endif /* LWIP_SO_RCVBUF */ -#if LWIP_UDP - case SO_NO_CHECK: - if (*(int*)optval) { - udp_setflags(sock->conn->pcb.udp, udp_flags(sock->conn->pcb.udp) | UDP_FLAGS_NOCHKSUM); - } else { - udp_setflags(sock->conn->pcb.udp, udp_flags(sock->conn->pcb.udp) & ~UDP_FLAGS_NOCHKSUM); - } - break; -#endif /* LWIP_UDP */ - default: - LWIP_ASSERT("unhandled optname", 0); - break; - } /* switch (optname) */ - break; - -/* Level: IPPROTO_IP */ - case IPPROTO_IP: - switch (optname) { - case IP_TTL: - sock->conn->pcb.ip->ttl = (uint8_t)(*(int*)optval); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_IP, IP_TTL, ..) -> %d\n", - s, sock->conn->pcb.ip->ttl)); - break; - case IP_TOS: - sock->conn->pcb.ip->tos = (uint8_t)(*(int*)optval); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_IP, IP_TOS, ..)-> %d\n", - s, sock->conn->pcb.ip->tos)); - break; -#if LWIP_IGMP - case IP_MULTICAST_TTL: - sock->conn->pcb.udp->ttl = (uint8_t)(*(uint8_t*)optval); - break; - case IP_MULTICAST_IF: - inet_addr_to_ipaddr(&sock->conn->pcb.udp->multicast_ip, (struct in_addr*)optval); - break; - case IP_MULTICAST_LOOP: - if (*(uint8_t*)optval) { - udp_setflags(sock->conn->pcb.udp, udp_flags(sock->conn->pcb.udp) | UDP_FLAGS_MULTICAST_LOOP); - } else { - udp_setflags(sock->conn->pcb.udp, udp_flags(sock->conn->pcb.udp) & ~UDP_FLAGS_MULTICAST_LOOP); - } - break; - case IP_ADD_MEMBERSHIP: - case IP_DROP_MEMBERSHIP: - { - /* If this is a TCP or a RAW socket, ignore these options. */ - struct ip_mreq *imr = (struct ip_mreq *)optval; - ip_addr_t if_addr; - ip_addr_t multi_addr; - inet_addr_to_ipaddr(&if_addr, &imr->imr_interface); - inet_addr_to_ipaddr(&multi_addr, &imr->imr_multiaddr); - if(optname == IP_ADD_MEMBERSHIP){ - data->err = igmp_joingroup(&if_addr, &multi_addr); - } else { - data->err = igmp_leavegroup(&if_addr, &multi_addr); - } - if(data->err != ERR_OK) { - data->err = EADDRNOTAVAIL; - } - } - break; -#endif /* LWIP_IGMP */ - default: - LWIP_ASSERT("unhandled optname", 0); - break; - } /* switch (optname) */ - break; - -#if LWIP_TCP -/* Level: IPPROTO_TCP */ - case IPPROTO_TCP: - switch (optname) { - case TCP_NODELAY: - if (*(int*)optval) { - tcp_nagle_disable(sock->conn->pcb.tcp); - } else { - tcp_nagle_enable(sock->conn->pcb.tcp); - } - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_NODELAY) -> %s\n", - s, (*(int *)optval)?"on":"off") ); - break; - case TCP_KEEPALIVE: - sock->conn->pcb.tcp->keep_idle = (uint32_t)(*(int*)optval); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_KEEPALIVE) -> %"U32_F"\n", - s, sock->conn->pcb.tcp->keep_idle)); - break; - -#if LWIP_TCP_KEEPALIVE - case TCP_KEEPIDLE: - sock->conn->pcb.tcp->keep_idle = 1000*(uint32_t)(*(int*)optval); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_KEEPIDLE) -> %"U32_F"\n", - s, sock->conn->pcb.tcp->keep_idle)); - break; - case TCP_KEEPINTVL: - sock->conn->pcb.tcp->keep_intvl = 1000*(uint32_t)(*(int*)optval); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_KEEPINTVL) -> %"U32_F"\n", - s, sock->conn->pcb.tcp->keep_intvl)); - break; - case TCP_KEEPCNT: - sock->conn->pcb.tcp->keep_cnt = (uint32_t)(*(int*)optval); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_KEEPCNT) -> %"U32_F"\n", - s, sock->conn->pcb.tcp->keep_cnt)); - break; -#endif /* LWIP_TCP_KEEPALIVE */ - default: - LWIP_ASSERT("unhandled optname", 0); - break; - } /* switch (optname) */ - break; -#endif /* LWIP_TCP*/ -#if LWIP_UDP && LWIP_UDPLITE - /* Level: IPPROTO_UDPLITE */ - case IPPROTO_UDPLITE: - switch (optname) { - case UDPLITE_SEND_CSCOV: - if ((*(int*)optval != 0) && ((*(int*)optval < 8) || (*(int*)optval > 0xffff))) { - /* don't allow illegal values! */ - sock->conn->pcb.udp->chksum_len_tx = 8; - } else { - sock->conn->pcb.udp->chksum_len_tx = (uint16_t)*(int*)optval; - } - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_UDPLITE, UDPLITE_SEND_CSCOV) -> %d\n", - s, (*(int*)optval)) ); - break; - case UDPLITE_RECV_CSCOV: - if ((*(int*)optval != 0) && ((*(int*)optval < 8) || (*(int*)optval > 0xffff))) { - /* don't allow illegal values! */ - sock->conn->pcb.udp->chksum_len_rx = 8; - } else { - sock->conn->pcb.udp->chksum_len_rx = (uint16_t)*(int*)optval; - } - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_UDPLITE, UDPLITE_RECV_CSCOV) -> %d\n", - s, (*(int*)optval)) ); - break; - default: - LWIP_ASSERT("unhandled optname", 0); - break; - } /* switch (optname) */ - break; -#endif /* LWIP_UDP */ - default: - LWIP_ASSERT("unhandled level", 0); - break; - } /* switch (level) */ - sys_sem_signal(&sock->conn->op_completed); -} - -int -lwip_ioctl(int s, long cmd, void *argp) -{ - struct lwip_sock *sock = get_socket(s); - uint8_t val; -#if LWIP_SO_RCVBUF - uint16_t buflen = 0; - int16_t recv_avail; -#endif /* LWIP_SO_RCVBUF */ - - if (!sock) { - return -1; - } - - switch (cmd) { -#if LWIP_SO_RCVBUF - case FIONREAD: - if (!argp) { - sock_set_errno(sock, EINVAL); - return -1; - } - - SYS_ARCH_GET(sock->conn->recv_avail, recv_avail); - if (recv_avail < 0) { - recv_avail = 0; - } - *((uint16_t*)argp) = (uint16_t)recv_avail; - - /* Check if there is data left from the last recv operation. /maq 041215 */ - if (sock->lastdata) { - struct pbuf *p = (struct pbuf *)sock->lastdata; - if (netconn_type(sock->conn) != NETCONN_TCP) { - p = ((struct netbuf *)p)->p; - } - buflen = p->tot_len; - buflen -= sock->lastoffset; - - *((uint16_t*)argp) += buflen; - } - - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_ioctl(%d, FIONREAD, %p) = %"U16_F"\n", s, argp, *((uint16_t*)argp))); - sock_set_errno(sock, 0); - return 0; -#endif /* LWIP_SO_RCVBUF */ - - case FIONBIO: - val = 0; - if (argp && *(uint32_t*)argp) { - val = 1; - } - netconn_set_nonblocking(sock->conn, val); - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_ioctl(%d, FIONBIO, %d)\n", s, val)); - sock_set_errno(sock, 0); - return 0; - - default: - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_ioctl(%d, UNIMPL: 0x%lx, %p)\n", s, cmd, argp)); - sock_set_errno(sock, ENOSYS); /* not yet implemented */ - return -1; - } /* switch (cmd) */ -} - -/** A minimal implementation of fcntl. - * Currently only the commands F_GETFL and F_SETFL are implemented. - * Only the flag O_NONBLOCK is implemented. - */ -int -lwip_fcntl(int s, int cmd, int val) -{ - struct lwip_sock *sock = get_socket(s); - int ret = -1; - - if (!sock || !sock->conn) { - return -1; - } - - switch (cmd) { - case F_GETFL: - ret = netconn_is_nonblocking(sock->conn) ? O_NONBLOCK : 0; - break; - case F_SETFL: - if ((val & ~O_NONBLOCK) == 0) { - /* only O_NONBLOCK, all other bits are zero */ - netconn_set_nonblocking(sock->conn, val & O_NONBLOCK); - ret = 0; - } - break; - default: - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_fcntl(%d, UNIMPL: %d, %d)\n", s, cmd, val)); - break; - } - return ret; -} - -/************************************************************** -* Added by Realtek Begin * -**************************************************************/ -int lwip_allocsocketsd() -{ - struct netconn *conn; - int i; - - /*new a netconn due to avoid some socket->conn check*/ - conn = netconn_new_with_proto_and_callback(NETCONN_RAW, 0, NULL); - if (!conn) { - printf("\r\n could not create netconn"); - return -1; - } - - /*alloc a socket*/ - i = alloc_socket(conn, 1); - if (i == -1) { - netconn_delete(conn); - printf("\r\n alloc socket fail!"); - return -1; - } - - conn->socket = i; - return i; -} -void lwip_setsockrcvevent(int fd, int rcvevent) -{ - struct lwip_sock *sock = get_socket(fd); - - if(sock){ - if(rcvevent) - sock->rcvevent = 1; - else - sock->rcvevent = 0; - } -} -void lwip_selectevindicate(int fd) -{ - struct lwip_select_cb *scb; - struct lwip_sock *sock; - - sock = get_socket(fd); - SYS_ARCH_DECL_PROTECT(lev); - while (1) { - SYS_ARCH_PROTECT(lev); - for (scb = select_cb_list; scb; scb = scb->next) { - if (scb->sem_signalled == 0) { - /* Test this select call for our socket */ - if (scb->readset && FD_ISSET(fd, scb->readset)) - if (sock->rcvevent > 0) - break; - if (scb->writeset && FD_ISSET(fd, scb->writeset)) - if (sock->sendevent) - break; - } - } - if (scb) { - scb->sem_signalled = 1; - sys_sem_signal(&scb->sem); - SYS_ARCH_UNPROTECT(lev); - } else { - SYS_ARCH_UNPROTECT(lev); - break; - } - } -} -/************************************************************** -* Added by Realtek end * -**************************************************************/ - -#endif /* LWIP_SOCKET */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/tcpip.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/tcpip.c deleted file mode 100644 index 0bcced9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/api/tcpip.c +++ /dev/null @@ -1,520 +0,0 @@ -/** - * @file - * Sequential API Main thread module - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#if !NO_SYS /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/sys.h" -#include "lwip/memp.h" -#include "lwip/mem.h" -#include "lwip/pbuf.h" -#include "lwip/tcpip.h" -#include "lwip/init.h" -#include "netif/etharp.h" -#include "netif/ppp_oe.h" - -#include "osdep_service.h" - -/* global variables */ -static tcpip_init_done_fn tcpip_init_done; -static void *tcpip_init_done_arg; -static sys_mbox_t mbox; - -#if LWIP_TCPIP_CORE_LOCKING -/** The global semaphore to lock the stack. */ -sys_mutex_t lock_tcpip_core; -#endif /* LWIP_TCPIP_CORE_LOCKING */ - - -/** - * The main lwIP thread. This thread has exclusive access to lwIP core functions - * (unless access to them is not locked). Other threads communicate with this - * thread using message boxes. - * - * It also starts all the timers to make sure they are running in the right - * thread context. - * - * @param arg unused argument - */ -static void -tcpip_thread(void *arg) -{ - struct tcpip_msg *msg; - LWIP_UNUSED_ARG(arg); - - if (tcpip_init_done != NULL) { - tcpip_init_done(tcpip_init_done_arg); - } - - LOCK_TCPIP_CORE(); - while (1) { /* MAIN Loop */ - UNLOCK_TCPIP_CORE(); - LWIP_TCPIP_THREAD_ALIVE(); - /* wait for a message, timeouts are processed while waiting */ - sys_timeouts_mbox_fetch(&mbox, (void **)&msg); - LOCK_TCPIP_CORE(); - switch (msg->type) { -#if LWIP_NETCONN - case TCPIP_MSG_API: - LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: API message %p\n", (void *)msg)); - msg->msg.apimsg->function(&(msg->msg.apimsg->msg)); - break; -#endif /* LWIP_NETCONN */ - -#if !LWIP_TCPIP_CORE_LOCKING_INPUT - case TCPIP_MSG_INPKT: - LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: PACKET %p\n", (void *)msg)); -#if LWIP_ETHERNET - if (msg->msg.inp.netif->flags & (NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET)) { - ethernet_input(msg->msg.inp.p, msg->msg.inp.netif); - } else -#endif /* LWIP_ETHERNET */ - { - ip_input(msg->msg.inp.p, msg->msg.inp.netif); - } - memp_free(MEMP_TCPIP_MSG_INPKT, msg); - break; -#endif /* LWIP_TCPIP_CORE_LOCKING_INPUT */ - -#if LWIP_NETIF_API - case TCPIP_MSG_NETIFAPI: - LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: Netif API message %p\n", (void *)msg)); - msg->msg.netifapimsg->function(&(msg->msg.netifapimsg->msg)); - break; -#endif /* LWIP_NETIF_API */ - -#if LWIP_TCPIP_TIMEOUT - case TCPIP_MSG_TIMEOUT: - LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: TIMEOUT %p\n", (void *)msg)); - sys_timeout(msg->msg.tmo.msecs, msg->msg.tmo.h, msg->msg.tmo.arg); - memp_free(MEMP_TCPIP_MSG_API, msg); - break; - case TCPIP_MSG_UNTIMEOUT: - LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: UNTIMEOUT %p\n", (void *)msg)); - sys_untimeout(msg->msg.tmo.h, msg->msg.tmo.arg); - memp_free(MEMP_TCPIP_MSG_API, msg); - break; -#endif /* LWIP_TCPIP_TIMEOUT */ - - case TCPIP_MSG_CALLBACK: - LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: CALLBACK %p\n", (void *)msg)); - msg->msg.cb.function(msg->msg.cb.ctx); - memp_free(MEMP_TCPIP_MSG_API, msg); - break; - - case TCPIP_MSG_CALLBACK_STATIC: - LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: CALLBACK_STATIC %p\n", (void *)msg)); - msg->msg.cb.function(msg->msg.cb.ctx); - break; - - default: - LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: invalid message: %d\n", msg->type)); - LWIP_ASSERT("tcpip_thread: invalid message", 0); - break; - } - } -} - -/** - * Pass a received packet to tcpip_thread for input processing - * - * @param p the received packet, p->payload pointing to the Ethernet header or - * to an IP header (if inp doesn't have NETIF_FLAG_ETHARP or - * NETIF_FLAG_ETHERNET flags) - * @param inp the network interface on which the packet was received - */ -err_t -tcpip_input(struct pbuf *p, struct netif *inp) -{ -#if LWIP_TCPIP_CORE_LOCKING_INPUT - err_t ret; - LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_input: PACKET %p/%p\n", (void *)p, (void *)inp)); - LOCK_TCPIP_CORE(); -#if LWIP_ETHERNET - if (inp->flags & (NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET)) { - ret = ethernet_input(p, inp); - } else -#endif /* LWIP_ETHERNET */ - { - ret = ip_input(p, inp); - } - UNLOCK_TCPIP_CORE(); - return ret; -#else /* LWIP_TCPIP_CORE_LOCKING_INPUT */ - struct tcpip_msg *msg; - - if (!sys_mbox_valid(&mbox)) { - return ERR_VAL; - } - msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_INPKT); - if (msg == NULL) { - return ERR_MEM; - } - - msg->type = TCPIP_MSG_INPKT; - msg->msg.inp.p = p; - msg->msg.inp.netif = inp; - if (sys_mbox_trypost(&mbox, msg) != ERR_OK) { - memp_free(MEMP_TCPIP_MSG_INPKT, msg); - return ERR_MEM; - } - return ERR_OK; -#endif /* LWIP_TCPIP_CORE_LOCKING_INPUT */ -} - -/** - * Call a specific function in the thread context of - * tcpip_thread for easy access synchronization. - * A function called in that way may access lwIP core code - * without fearing concurrent access. - * - * @param f the function to call - * @param ctx parameter passed to f - * @param block 1 to block until the request is posted, 0 to non-blocking mode - * @return ERR_OK if the function was called, another err_t if not - */ -err_t -tcpip_callback_with_block(tcpip_callback_fn function, void *ctx, uint8_t block) -{ - struct tcpip_msg *msg; - - if (sys_mbox_valid(&mbox)) { - msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API); - if (msg == NULL) { - return ERR_MEM; - } - - msg->type = TCPIP_MSG_CALLBACK; - msg->msg.cb.function = function; - msg->msg.cb.ctx = ctx; - if (block) { - sys_mbox_post(&mbox, msg); - } else { - if (sys_mbox_trypost(&mbox, msg) != ERR_OK) { - memp_free(MEMP_TCPIP_MSG_API, msg); - return ERR_MEM; - } - } - return ERR_OK; - } - return ERR_VAL; -} - -#if LWIP_TCPIP_TIMEOUT -/** - * call sys_timeout in tcpip_thread - * - * @param msec time in milliseconds for timeout - * @param h function to be called on timeout - * @param arg argument to pass to timeout function h - * @return ERR_MEM on memory error, ERR_OK otherwise - */ -err_t -tcpip_timeout(uint32_t msecs, sys_timeout_handler h, void *arg) -{ - struct tcpip_msg *msg; - - if (sys_mbox_valid(&mbox)) { - msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API); - if (msg == NULL) { - return ERR_MEM; - } - - msg->type = TCPIP_MSG_TIMEOUT; - msg->msg.tmo.msecs = msecs; - msg->msg.tmo.h = h; - msg->msg.tmo.arg = arg; - sys_mbox_post(&mbox, msg); - return ERR_OK; - } - return ERR_VAL; -} - -/** - * call sys_untimeout in tcpip_thread - * - * @param msec time in milliseconds for timeout - * @param h function to be called on timeout - * @param arg argument to pass to timeout function h - * @return ERR_MEM on memory error, ERR_OK otherwise - */ -err_t -tcpip_untimeout(sys_timeout_handler h, void *arg) -{ - struct tcpip_msg *msg; - - if (sys_mbox_valid(&mbox)) { - msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API); - if (msg == NULL) { - return ERR_MEM; - } - - msg->type = TCPIP_MSG_UNTIMEOUT; - msg->msg.tmo.h = h; - msg->msg.tmo.arg = arg; - sys_mbox_post(&mbox, msg); - return ERR_OK; - } - return ERR_VAL; -} -#endif /* LWIP_TCPIP_TIMEOUT */ - -#if LWIP_NETCONN -/** - * Call the lower part of a netconn_* function - * This function is then running in the thread context - * of tcpip_thread and has exclusive access to lwIP core code. - * - * @param apimsg a struct containing the function to call and its parameters - * @return ERR_OK if the function was called, another err_t if not - */ -err_t -tcpip_apimsg(struct api_msg *apimsg) -{ - struct tcpip_msg msg; -#ifdef LWIP_DEBUG - /* catch functions that don't set err */ - apimsg->msg.err = ERR_VAL; -#endif - - if (sys_mbox_valid(&mbox)) { - UBaseType_t prio = uxTaskPriorityGet(NULL); // add to prevent switch to tcpip thread between mbox post and sem wait - if((TCPIP_THREAD_PRIO + 1) > prio) - vTaskPrioritySet(NULL, TCPIP_THREAD_PRIO + 1); // set priority higher than tcpip thread - msg.type = TCPIP_MSG_API; - msg.msg.apimsg = apimsg; - sys_mbox_post(&mbox, &msg); - sys_arch_sem_wait(&apimsg->msg.conn->op_completed, 0); - vTaskPrioritySet(NULL, prio); // restore to original priority - return apimsg->msg.err; - } - return ERR_VAL; -} - -#if LWIP_TCPIP_CORE_LOCKING -/** - * Call the lower part of a netconn_* function - * This function has exclusive access to lwIP core code by locking it - * before the function is called. - * - * @param apimsg a struct containing the function to call and its parameters - * @return ERR_OK (only for compatibility fo tcpip_apimsg()) - */ -err_t -tcpip_apimsg_lock(struct api_msg *apimsg) -{ -#ifdef LWIP_DEBUG - /* catch functions that don't set err */ - apimsg->msg.err = ERR_VAL; -#endif - - LOCK_TCPIP_CORE(); - apimsg->function(&(apimsg->msg)); - UNLOCK_TCPIP_CORE(); - return apimsg->msg.err; - -} -#endif /* LWIP_TCPIP_CORE_LOCKING */ -#endif /* LWIP_NETCONN */ - -#if LWIP_NETIF_API -#if !LWIP_TCPIP_CORE_LOCKING -/** - * Much like tcpip_apimsg, but calls the lower part of a netifapi_* - * function. - * - * @param netifapimsg a struct containing the function to call and its parameters - * @return error code given back by the function that was called - */ -err_t -tcpip_netifapi(struct netifapi_msg* netifapimsg) -{ - struct tcpip_msg msg; - - if (sys_mbox_valid(&mbox)) { - err_t err = sys_sem_new(&netifapimsg->msg.sem, 0); - if (err != ERR_OK) { - netifapimsg->msg.err = err; - return err; - } - - msg.type = TCPIP_MSG_NETIFAPI; - msg.msg.netifapimsg = netifapimsg; - sys_mbox_post(&mbox, &msg); - sys_sem_wait(&netifapimsg->msg.sem); - sys_sem_free(&netifapimsg->msg.sem); - return netifapimsg->msg.err; - } - return ERR_VAL; -} -#else /* !LWIP_TCPIP_CORE_LOCKING */ -/** - * Call the lower part of a netifapi_* function - * This function has exclusive access to lwIP core code by locking it - * before the function is called. - * - * @param netifapimsg a struct containing the function to call and its parameters - * @return ERR_OK (only for compatibility fo tcpip_netifapi()) - */ -err_t -tcpip_netifapi_lock(struct netifapi_msg* netifapimsg) -{ - LOCK_TCPIP_CORE(); - netifapimsg->function(&(netifapimsg->msg)); - UNLOCK_TCPIP_CORE(); - return netifapimsg->msg.err; -} -#endif /* !LWIP_TCPIP_CORE_LOCKING */ -#endif /* LWIP_NETIF_API */ - -/** - * Allocate a structure for a static callback message and initialize it. - * This is intended to be used to send "static" messages from interrupt context. - * - * @param function the function to call - * @param ctx parameter passed to function - * @return a struct pointer to pass to tcpip_trycallback(). - */ -struct tcpip_callback_msg* tcpip_callbackmsg_new(tcpip_callback_fn function, void *ctx) -{ - struct tcpip_msg *msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API); - if (msg == NULL) { - return NULL; - } - msg->type = TCPIP_MSG_CALLBACK_STATIC; - msg->msg.cb.function = function; - msg->msg.cb.ctx = ctx; - return (struct tcpip_callback_msg*)msg; -} - -/** - * Free a callback message allocated by tcpip_callbackmsg_new(). - * - * @param msg the message to free - */ -void tcpip_callbackmsg_delete(struct tcpip_callback_msg* msg) -{ - memp_free(MEMP_TCPIP_MSG_API, msg); -} - -/** - * Try to post a callback-message to the tcpip_thread mbox - * This is intended to be used to send "static" messages from interrupt context. - * - * @param msg pointer to the message to post - * @return sys_mbox_trypost() return code - */ -err_t -tcpip_trycallback(struct tcpip_callback_msg* msg) -{ - if (!sys_mbox_valid(&mbox)) { - return ERR_VAL; - } - return sys_mbox_trypost(&mbox, msg); -} - -/** - * Initialize this module: - * - initialize all sub modules - * - start the tcpip_thread - * - * @param initfunc a function to call when tcpip_thread is running and finished initializing - * @param arg argument to pass to initfunc - */ -void -tcpip_init(tcpip_init_done_fn initfunc, void *arg) -{ - lwip_init(); - - tcpip_init_done = initfunc; - tcpip_init_done_arg = arg; - if(sys_mbox_new(&mbox, TCPIP_MBOX_SIZE) != ERR_OK) { - LWIP_ASSERT("failed to create tcpip_thread mbox", 0); - } -#if LWIP_TCPIP_CORE_LOCKING - if(sys_mutex_new(&lock_tcpip_core) != ERR_OK) { - LWIP_ASSERT("failed to create lock_tcpip_core", 0); - } -#endif /* LWIP_TCPIP_CORE_LOCKING */ -#if 0 // CONFIG_USE_TCM_HEAP - sys_thread_new_tcm(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO); -#else - sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO); -#endif -} - -/** - * Simple callback function used with tcpip_callback to free a pbuf - * (pbuf_free has a wrong signature for tcpip_callback) - * - * @param p The pbuf (chain) to be dereferenced. - */ -static void -pbuf_free_int(void *p) -{ - struct pbuf *q = (struct pbuf *)p; - pbuf_free(q); -} - -/** - * A simple wrapper function that allows you to free a pbuf from interrupt context. - * - * @param p The pbuf (chain) to be dereferenced. - * @return ERR_OK if callback could be enqueued, an err_t if not - */ -err_t -pbuf_free_callback(struct pbuf *p) -{ - return tcpip_callback_with_block(pbuf_free_int, p, 0); -} - -/** - * A simple wrapper function that allows you to free heap memory from - * interrupt context. - * - * @param m the heap memory to free - * @return ERR_OK if callback could be enqueued, an err_t if not - */ -err_t -mem_free_callback(void *m) -{ - return tcpip_callback_with_block(mem_free, m, 0); -} - -#endif /* !NO_SYS */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/def.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/def.c deleted file mode 100644 index 5f5bc5e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/def.c +++ /dev/null @@ -1,108 +0,0 @@ -/** - * @file - * Common functions used throughout the stack. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Simon Goldschmidt - * - */ - -#include "lwip/opt.h" -#include "lwip/def.h" - -/** - * These are reference implementations of the byte swapping functions. - * Again with the aim of being simple, correct and fully portable. - * Byte swapping is the second thing you would want to optimize. You will - * need to port it to your architecture and in your cc.h: - * - * #define LWIP_PLATFORM_BYTESWAP 1 - * #define LWIP_PLATFORM_HTONS(x) - * #define LWIP_PLATFORM_HTONL(x) - * - * Note ntohs() and ntohl() are merely references to the htonx counterparts. - */ - -#if (LWIP_PLATFORM_BYTESWAP == 0) && (BYTE_ORDER == LITTLE_ENDIAN) - -/** - * Convert an uint16_t from host- to network byte order. - * - * @param n uint16_t in host byte order - * @return n in network byte order - */ -uint16_t -lwip_htons(uint16_t n) -{ - return ((n & 0xff) << 8) | ((n & 0xff00) >> 8); -} - -/** - * Convert an uint16_t from network- to host byte order. - * - * @param n uint16_t in network byte order - * @return n in host byte order - */ -uint16_t -lwip_ntohs(uint16_t n) -{ - return lwip_htons(n); -} - -/** - * Convert an uint32_t from host- to network byte order. - * - * @param n uint32_t in host byte order - * @return n in network byte order - */ -uint32_t -lwip_htonl(uint32_t n) -{ - return ((n & 0xff) << 24) | - ((n & 0xff00) << 8) | - ((n & 0xff0000UL) >> 8) | - ((n & 0xff000000UL) >> 24); -} - -/** - * Convert an uint32_t from network- to host byte order. - * - * @param n uint32_t in network byte order - * @return n in host byte order - */ -uint32_t -lwip_ntohl(uint32_t n) -{ - return lwip_htonl(n); -} - -#endif /* (LWIP_PLATFORM_BYTESWAP == 0) && (BYTE_ORDER == LITTLE_ENDIAN) */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/dhcp.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/dhcp.c deleted file mode 100644 index b08aa31..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/dhcp.c +++ /dev/null @@ -1,1851 +0,0 @@ -/** - * @file - * Dynamic Host Configuration Protocol client - * - */ - -/* - * - * Copyright (c) 2001-2004 Leon Woestenberg - * Copyright (c) 2001-2004 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is a contribution to the lwIP TCP/IP stack. - * The Swedish Institute of Computer Science and Adam Dunkels - * are specifically granted permission to redistribute this - * source code. - * - * Author: Leon Woestenberg - * - * This is a DHCP client for the lwIP TCP/IP stack. It aims to conform - * with RFC 2131 and RFC 2132. - * - * TODO: - * - Support for interfaces other than Ethernet (SLIP, PPP, ...) - * - * Please coordinate changes and requests with Leon Woestenberg - * - * - * Integration with your code: - * - * In lwip/dhcp.h - * #define DHCP_COARSE_TIMER_SECS (recommended 60 which is a minute) - * #define DHCP_FINE_TIMER_MSECS (recommended 500 which equals TCP coarse timer) - * - * Then have your application call dhcp_coarse_tmr() and - * dhcp_fine_tmr() on the defined intervals. - * - * dhcp_start(struct netif *netif); - * starts a DHCP client instance which configures the interface by - * obtaining an IP address lease and maintaining it. - * - * Use dhcp_release(netif) to end the lease and use dhcp_stop(netif) - * to remove the DHCP client. - * - */ - -#include "lwip/opt.h" - -#if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/stats.h" -#include "lwip/mem.h" -#include "lwip/udp.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/def.h" -#include "lwip/sys.h" -#include "lwip/dhcp.h" -#include "lwip/autoip.h" -#include "lwip/dns.h" -#include "netif/etharp.h" - -#include - -/** DHCP_CREATE_RAND_XID: if this is set to 1, the xid is created using - * LWIP_RAND() (this overrides DHCP_GLOBAL_XID) - */ -#ifndef DHCP_CREATE_RAND_XID -#define DHCP_CREATE_RAND_XID 1 -#endif - -/** Default for DHCP_GLOBAL_XID is 0xABCD0000 - * This can be changed by defining DHCP_GLOBAL_XID and DHCP_GLOBAL_XID_HEADER, e.g. - * #define DHCP_GLOBAL_XID_HEADER "stdlib.h" - * #define DHCP_GLOBAL_XID rand() - */ -#ifdef DHCP_GLOBAL_XID_HEADER -#include DHCP_GLOBAL_XID_HEADER /* include optional starting XID generation prototypes */ -#endif - -/** DHCP_OPTION_MAX_MSG_SIZE is set to the MTU - * MTU is checked to be big enough in dhcp_start */ -#define DHCP_MAX_MSG_LEN(netif) (netif->mtu) -#define DHCP_MAX_MSG_LEN_MIN_REQUIRED 576 -/** Minimum length for reply before packet is parsed */ -#define DHCP_MIN_REPLY_LEN 44 - -#define REBOOT_TRIES 2 - -/** Option handling: options are parsed in dhcp_parse_reply - * and saved in an array where other functions can load them from. - * This might be moved into the struct dhcp (not necessarily since - * lwIP is single-threaded and the array is only used while in recv - * callback). */ -#define DHCP_OPTION_IDX_OVERLOAD 0 -#define DHCP_OPTION_IDX_MSG_TYPE 1 -#define DHCP_OPTION_IDX_SERVER_ID 2 -#define DHCP_OPTION_IDX_LEASE_TIME 3 -#define DHCP_OPTION_IDX_T1 4 -#define DHCP_OPTION_IDX_T2 5 -#define DHCP_OPTION_IDX_SUBNET_MASK 6 -#define DHCP_OPTION_IDX_ROUTER 7 -#define DHCP_OPTION_IDX_DNS_SERVER 8 -#define DHCP_OPTION_IDX_MAX (DHCP_OPTION_IDX_DNS_SERVER + DNS_MAX_SERVERS) - -/** Holds the decoded option values, only valid while in dhcp_recv. - @todo: move this into struct dhcp? */ -uint32_t dhcp_rx_options_val[DHCP_OPTION_IDX_MAX]; -/** Holds a flag which option was received and is contained in dhcp_rx_options_val, - only valid while in dhcp_recv. - @todo: move this into struct dhcp? */ -uint8_t dhcp_rx_options_given[DHCP_OPTION_IDX_MAX]; - -#ifdef DHCP_GLOBAL_XID -static uint32_t xid; -static uint8_t xid_initialised; -#endif /* DHCP_GLOBAL_XID */ - -#define dhcp_option_given(dhcp, idx) (dhcp_rx_options_given[idx] != 0) -#define dhcp_got_option(dhcp, idx) (dhcp_rx_options_given[idx] = 1) -#define dhcp_clear_option(dhcp, idx) (dhcp_rx_options_given[idx] = 0) -#define dhcp_clear_all_options(dhcp) (memset(dhcp_rx_options_given, 0, sizeof(dhcp_rx_options_given))) -#define dhcp_get_option_value(dhcp, idx) (dhcp_rx_options_val[idx]) -#define dhcp_set_option_value(dhcp, idx, val) (dhcp_rx_options_val[idx] = (val)) - - -/* DHCP client state machine functions */ -static err_t dhcp_discover(struct netif *netif); -static err_t dhcp_select(struct netif *netif); -static void dhcp_bind(struct netif *netif); -#if DHCP_DOES_ARP_CHECK -static err_t dhcp_decline(struct netif *netif); -#endif /* DHCP_DOES_ARP_CHECK */ -static err_t dhcp_rebind(struct netif *netif); -static err_t dhcp_reboot(struct netif *netif); -static void dhcp_set_state(struct dhcp *dhcp, uint8_t new_state); - -/* receive, unfold, parse and free incoming messages */ -static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, uint16_t port); - -/* set the DHCP timers */ -static void dhcp_timeout(struct netif *netif); -static void dhcp_t1_timeout(struct netif *netif); -static void dhcp_t2_timeout(struct netif *netif); - -/* build outgoing messages */ -/* create a DHCP message, fill in common headers */ -static err_t dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, uint8_t message_type); -/* free a DHCP request */ -static void dhcp_delete_msg(struct dhcp *dhcp); -/* add a DHCP option (type, then length in bytes) */ -static void dhcp_option(struct dhcp *dhcp, uint8_t option_type, uint8_t option_len); -/* add option values */ -static void dhcp_option_byte(struct dhcp *dhcp, uint8_t value); -static void dhcp_option_short(struct dhcp *dhcp, uint16_t value); -static void dhcp_option_long(struct dhcp *dhcp, uint32_t value); -#if LWIP_NETIF_HOSTNAME -static void dhcp_option_hostname(struct dhcp *dhcp, struct netif *netif); -#endif /* LWIP_NETIF_HOSTNAME */ -/* always add the DHCP options trailer to end and pad */ -static void dhcp_option_trailer(struct dhcp *dhcp); - -/** - * Back-off the DHCP client (because of a received NAK response). - * - * Back-off the DHCP client because of a received NAK. Receiving a - * NAK means the client asked for something non-sensible, for - * example when it tries to renew a lease obtained on another network. - * - * We clear any existing set IP address and restart DHCP negotiation - * afresh (as per RFC2131 3.2.3). - * - * @param netif the netif under DHCP control - */ -static void -dhcp_handle_nak(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_nak(netif=%p) %c%c%"U16_F"\n", - (void*)netif, netif->name[0], netif->name[1], (uint16_t)netif->num)); - /* Set the interface down since the address must no longer be used, as per RFC2131 */ - netif_set_down(netif); - /* remove IP address from interface */ - netif_set_ipaddr(netif, IP_ADDR_ANY); - netif_set_gw(netif, IP_ADDR_ANY); - netif_set_netmask(netif, IP_ADDR_ANY); - /* Change to a defined state */ - dhcp_set_state(dhcp, DHCP_BACKING_OFF); - /* We can immediately restart discovery */ - dhcp_discover(netif); -} - -#if DHCP_DOES_ARP_CHECK -/** - * Checks if the offered IP address is already in use. - * - * It does so by sending an ARP request for the offered address and - * entering CHECKING state. If no ARP reply is received within a small - * interval, the address is assumed to be free for use by us. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_check(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result; - uint16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_check(netif=%p) %c%c\n", (void *)netif, (int16_t)netif->name[0], - (int16_t)netif->name[1])); - dhcp_set_state(dhcp, DHCP_CHECKING); - /* create an ARP query for the offered IP address, expecting that no host - responds, as the IP address should not be in use. */ - result = etharp_query(netif, &dhcp->offered_ip_addr, NULL); - if (result != ERR_OK) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_check: could not perform ARP query\n")); - } - dhcp->tries++; - msecs = 500; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_check(): set request timeout %"U16_F" msecs\n", msecs)); -} -#endif /* DHCP_DOES_ARP_CHECK */ - -/** - * Remember the configuration offered by a DHCP server. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_handle_offer(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n", - (void*)netif, netif->name[0], netif->name[1], (uint16_t)netif->num)); - /* obtain the server address */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SERVER_ID)) { - ip4_addr_set_u32(&dhcp->server_ip_addr, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SERVER_ID))); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): server 0x%08"X32_F"\n", - ip4_addr_get_u32(&dhcp->server_ip_addr))); - /* remember offered address */ - ip_addr_copy(dhcp->offered_ip_addr, dhcp->msg_in->yiaddr); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): offer for 0x%08"X32_F"\n", - ip4_addr_get_u32(&dhcp->offered_ip_addr))); - - dhcp_select(netif); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("dhcp_handle_offer(netif=%p) did not get server ID!\n", (void*)netif)); - } -} - -/** - * Select a DHCP server offer out of all offers. - * - * Simply select the first offer received. - * - * @param netif the netif under DHCP control - * @return lwIP specific error (see error.h) - */ -static err_t -dhcp_select(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result; - uint16_t msecs; - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_select(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (uint16_t)netif->num)); - dhcp_set_state(dhcp, DHCP_REQUESTING); - - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST); - if (result == ERR_OK) { - dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); - - /* MUST request the offered IP address */ - dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); - dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); - - dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); - dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->server_ip_addr))); - - dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/); - dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK); - dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER); - dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST); - dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER); - -#if LWIP_NETIF_HOSTNAME - dhcp_option_hostname(dhcp, netif); -#endif /* LWIP_NETIF_HOSTNAME */ - - dhcp_option_trailer(dhcp); - /* shrink the pbuf to the actual content length */ - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - /* send broadcast to any DHCP server */ - udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(dhcp); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_select: REQUESTING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_select: could not allocate DHCP request\n")); - } - dhcp->tries++; - msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_select(): set request timeout %"U16_F" msecs\n", msecs)); - return result; -} - -/** - * The DHCP timer that checks for lease renewal/rebind timeouts. - */ -void -dhcp_coarse_tmr() -{ - struct netif *netif = netif_list; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_coarse_tmr()\n")); - /* iterate through all network interfaces */ - while (netif != NULL) { - /* only act on DHCP configured interfaces */ - if (netif->dhcp != NULL) { - /* timer is active (non zero), and triggers (zeroes) now? */ - if (++netif->dhcp->lease_used == netif->dhcp->t0_timeout) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t0 timeout\n")); - /* this clients' lease time has expired */ - dhcp_release(netif); - dhcp_discover(netif); - }else if (netif->dhcp->t2_rebind_time-- == 1) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t2 timeout\n")); - /* this clients' rebind timeout triggered */ - dhcp_t2_timeout(netif); - /* timer is active (non zero), and triggers (zeroes) now */ - } else if (netif->dhcp->t1_renew_time-- == 1) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t1 timeout\n")); - /* this clients' renewal timeout triggered */ - dhcp_t1_timeout(netif); - } - } - /* proceed to next netif */ - netif = netif->next; - } -} - -/** - * DHCP transaction timeout handling - * - * A DHCP server is expected to respond within a short period of time. - * This timer checks whether an outstanding DHCP request is timed out. - */ -void -dhcp_fine_tmr() -{ - struct netif *netif = netif_list; - /* loop through netif's */ - while (netif != NULL) { - /* only act on DHCP configured interfaces */ - if (netif->dhcp != NULL) { - /* timer is active (non zero), and is about to trigger now */ - if (netif->dhcp->request_timeout > 1) { - netif->dhcp->request_timeout--; - } - else if (netif->dhcp->request_timeout == 1) { - netif->dhcp->request_timeout--; - /* { netif->dhcp->request_timeout == 0 } */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_fine_tmr(): request timeout\n")); - /* this client's request timeout triggered */ - dhcp_timeout(netif); - } - } - /* proceed to next network interface */ - netif = netif->next; - } -} - -/** - * A DHCP negotiation transaction, or ARP request, has timed out. - * - * The timer that was started with the DHCP or ARP request has - * timed out, indicating no response was received in time. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_timeout(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout()\n")); - /* back-off period has passed, or server selection timed out */ - if ((dhcp->state == DHCP_BACKING_OFF) || (dhcp->state == DHCP_SELECTING)) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout(): restarting discovery\n")); - dhcp_discover(netif); - /* receiving the requested lease timed out */ - } else if (dhcp->state == DHCP_REQUESTING) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, DHCP request timed out\n")); - if (dhcp->tries <= 5) { - dhcp_select(netif); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, releasing, restarting\n")); - dhcp_release(netif); - dhcp_discover(netif); - } -#if DHCP_DOES_ARP_CHECK - /* received no ARP reply for the offered address (which is good) */ - } else if (dhcp->state == DHCP_CHECKING) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): CHECKING, ARP request timed out\n")); - if (dhcp->tries <= 1) { - dhcp_check(netif); - /* no ARP replies on the offered address, - looks like the IP address is indeed free */ - } else { - /* bind the interface to the offered address */ - dhcp_bind(netif); - } -#endif /* DHCP_DOES_ARP_CHECK */ - } - /* did not get response to renew request? */ - else if (dhcp->state == DHCP_RENEWING) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RENEWING, DHCP request timed out\n")); - /* just retry renewal */ - /* note that the rebind timer will eventually time-out if renew does not work */ - dhcp_renew(netif); - /* did not get response to rebind request? */ - } else if (dhcp->state == DHCP_REBINDING) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REBINDING, DHCP request timed out\n")); - if (dhcp->tries <= 8) { - dhcp_rebind(netif); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RELEASING, DISCOVERING\n")); - dhcp_release(netif); - dhcp_discover(netif); - } - } else if (dhcp->state == DHCP_REBOOTING) { - if (dhcp->tries < REBOOT_TRIES) { - dhcp_reboot(netif); - } else { - dhcp_discover(netif); - } - } -} - -/** - * The renewal period has timed out. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_t1_timeout(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_t1_timeout()\n")); - if ((dhcp->state == DHCP_REQUESTING) || (dhcp->state == DHCP_BOUND) || - (dhcp->state == DHCP_RENEWING)) { - /* just retry to renew - note that the rebind timer (t2) will - * eventually time-out if renew tries fail. */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("dhcp_t1_timeout(): must renew\n")); - /* This slightly different to RFC2131: DHCPREQUEST will be sent from state - DHCP_RENEWING, not DHCP_BOUND */ - dhcp_renew(netif); - } -} - -/** - * The rebind period has timed out. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_t2_timeout(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t2_timeout()\n")); - if ((dhcp->state == DHCP_REQUESTING) || (dhcp->state == DHCP_BOUND) || - (dhcp->state == DHCP_RENEWING) || (dhcp->state == DHCP_REBINDING)) { - /* just retry to rebind */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("dhcp_t2_timeout(): must rebind\n")); - /* This slightly different to RFC2131: DHCPREQUEST will be sent from state - DHCP_REBINDING, not DHCP_BOUND */ - dhcp_rebind(netif); - /* Calculate next timeout */ - if (((netif->dhcp->t0_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS)) - { - netif->dhcp->t2_rebind_time = ((netif->dhcp->t0_timeout - dhcp->lease_used) / 2); - } - } -} - -/** - * Handle a DHCP ACK packet - * - * @param netif the netif under DHCP control - */ -static void -dhcp_handle_ack(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; -#if LWIP_DNS - uint8_t n; -#endif /* LWIP_DNS */ - - /* clear options we might not get from the ACK */ - ip_addr_set_zero(&dhcp->offered_sn_mask); - ip_addr_set_zero(&dhcp->offered_gw_addr); -#if LWIP_DHCP_BOOTP_FILE - ip_addr_set_zero(&dhcp->offered_si_addr); -#endif /* LWIP_DHCP_BOOTP_FILE */ - - /* lease time given? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_LEASE_TIME)) { - /* remember offered lease time */ - dhcp->offered_t0_lease = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_LEASE_TIME); - } - /* renewal period given? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T1)) { - /* remember given renewal period */ - dhcp->offered_t1_renew = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T1); - } else { - /* calculate safe periods for renewal */ - dhcp->offered_t1_renew = dhcp->offered_t0_lease / 2; - } - - /* renewal period given? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T2)) { - /* remember given rebind period */ - dhcp->offered_t2_rebind = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T2); - } else { - /* calculate safe periods for rebinding */ - dhcp->offered_t2_rebind = dhcp->offered_t0_lease/2 + dhcp->offered_t0_lease /4 + dhcp->offered_t0_lease/8; // (uint32_t)(dhcp->offered_t0_lease * 0.875); - } - - /* (y)our internet address */ - ip_addr_copy(dhcp->offered_ip_addr, dhcp->msg_in->yiaddr); - -#if LWIP_DHCP_BOOTP_FILE - /* copy boot server address, - boot file name copied in dhcp_parse_reply if not overloaded */ - ip_addr_copy(dhcp->offered_si_addr, dhcp->msg_in->siaddr); -#endif /* LWIP_DHCP_BOOTP_FILE */ - - /* subnet mask given? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SUBNET_MASK)) { - /* remember given subnet mask */ - ip4_addr_set_u32(&dhcp->offered_sn_mask, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SUBNET_MASK))); - dhcp->subnet_mask_given = 1; - } else { - dhcp->subnet_mask_given = 0; - } - - /* gateway router */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_ROUTER)) { - ip4_addr_set_u32(&dhcp->offered_gw_addr, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_ROUTER))); - } - -#if LWIP_DNS - /* DNS servers */ - n = 0; - while(dhcp_option_given(dhcp, DHCP_OPTION_IDX_DNS_SERVER + n) && (n < DNS_MAX_SERVERS)) { - ip_addr_t dns_addr; - ip4_addr_set_u32(&dns_addr, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_DNS_SERVER + n))); - dns_setserver(n, &dns_addr); - n++; - } -#endif /* LWIP_DNS */ -} - -/** Set a statically allocated struct dhcp to work with. - * Using this prevents dhcp_start to allocate it using mem_malloc. - * - * @param netif the netif for which to set the struct dhcp - * @param dhcp (uninitialised) dhcp struct allocated by the application - */ -void -dhcp_set_struct(struct netif *netif, struct dhcp *dhcp) -{ - LWIP_ASSERT("netif != NULL", netif != NULL); - LWIP_ASSERT("dhcp != NULL", dhcp != NULL); - LWIP_ASSERT("netif already has a struct dhcp set", netif->dhcp == NULL); - - /* clear data structure */ - memset(dhcp, 0, sizeof(struct dhcp)); - /* dhcp_set_state(&dhcp, DHCP_OFF); */ - netif->dhcp = dhcp; -} - -/** Removes a struct dhcp from a netif. - * - * ATTENTION: Only use this when not using dhcp_set_struct() to allocate the - * struct dhcp since the memory is passed back to the heap. - * - * @param netif the netif from which to remove the struct dhcp - */ -void dhcp_cleanup(struct netif *netif) -{ - LWIP_ASSERT("netif != NULL", netif != NULL); - - if (netif->dhcp != NULL) { - mem_free(netif->dhcp); - netif->dhcp = NULL; - } -} - -/** - * Start DHCP negotiation for a network interface. - * - * If no DHCP client instance was attached to this interface, - * a new client is created first. If a DHCP client instance - * was already present, it restarts negotiation. - * - * @param netif The lwIP network interface - * @return lwIP error code - * - ERR_OK - No error - * - ERR_MEM - Out of memory - */ -err_t -dhcp_start(struct netif *netif) -{ - struct dhcp *dhcp; - err_t result = ERR_OK; - - LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;); - dhcp = netif->dhcp; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (uint16_t)netif->num)); - /* Remove the flag that says this netif is handled by DHCP, - it is set when we succeeded starting. */ - netif->flags &= ~NETIF_FLAG_DHCP; - - /* check hwtype of the netif */ - if ((netif->flags & NETIF_FLAG_ETHARP) == 0) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): No ETHARP netif\n")); - return ERR_ARG; - } - - /* check MTU of the netif */ - if (netif->mtu < DHCP_MAX_MSG_LEN_MIN_REQUIRED) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): Cannot use this netif with DHCP: MTU is too small\n")); - return ERR_MEM; - } - - /* no DHCP client attached yet? */ - if (dhcp == NULL) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting new DHCP client\n")); - dhcp = (struct dhcp *)mem_malloc(sizeof(struct dhcp)); - if (dhcp == NULL) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not allocate dhcp\n")); - return ERR_MEM; - } - /* store this dhcp client in the netif */ - netif->dhcp = dhcp; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): allocated dhcp")); - /* already has DHCP client attached */ - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(): restarting DHCP configuration\n")); - if (dhcp->pcb != NULL) { - udp_remove(dhcp->pcb); - } - LWIP_ASSERT("pbuf p_out wasn't freed", dhcp->p_out == NULL); - LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL ); - } - - /* clear data structure */ - memset(dhcp, 0, sizeof(struct dhcp)); - /* dhcp_set_state(&dhcp, DHCP_OFF); */ - /* allocate UDP PCB */ - dhcp->pcb = udp_new(); - if (dhcp->pcb == NULL) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not obtain pcb\n")); - return ERR_MEM; - } - ip_set_option(dhcp->pcb, SOF_BROADCAST); - /* set up local and remote port for the pcb */ - udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); - udp_connect(dhcp->pcb, IP_ADDR_ANY, DHCP_SERVER_PORT); - /* set up the recv callback and argument */ - udp_recv(dhcp->pcb, dhcp_recv, netif); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting DHCP configuration\n")); - /* (re)start the DHCP negotiation */ - result = dhcp_discover(netif); - if (result != ERR_OK) { - /* free resources allocated above */ - dhcp_stop(netif); - return ERR_MEM; - } - /* Set the flag that says this netif is handled by DHCP. */ - netif->flags |= NETIF_FLAG_DHCP; - return result; -} - -/** - * Inform a DHCP server of our manual configuration. - * - * This informs DHCP servers of our fixed IP address configuration - * by sending an INFORM message. It does not involve DHCP address - * configuration, it is just here to be nice to the network. - * - * @param netif The lwIP network interface - */ -void -dhcp_inform(struct netif *netif) -{ - struct dhcp dhcp; - err_t result = ERR_OK; - struct udp_pcb *pcb; - - LWIP_ERROR("netif != NULL", (netif != NULL), return;); - - memset(&dhcp, 0, sizeof(struct dhcp)); - dhcp_set_state(&dhcp, DHCP_INFORM); - - if ((netif->dhcp != NULL) && (netif->dhcp->pcb != NULL)) { - /* re-use existing pcb */ - pcb = netif->dhcp->pcb; - } else { - pcb = udp_new(); - if (pcb == NULL) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform(): could not obtain pcb")); - return; - } - dhcp.pcb = pcb; - ip_set_option(dhcp.pcb, SOF_BROADCAST); - udp_bind(dhcp.pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_inform(): created new udp pcb\n")); - } - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, &dhcp, DHCP_INFORM); - if (result == ERR_OK) { - dhcp_option(&dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - dhcp_option_short(&dhcp, DHCP_MAX_MSG_LEN(netif)); - - dhcp_option_trailer(&dhcp); - - pbuf_realloc(dhcp.p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp.options_out_len); - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_inform: INFORMING\n")); - udp_sendto_if(pcb, dhcp.p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(&dhcp); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform: could not allocate DHCP request\n")); - } - - if (dhcp.pcb != NULL) { - /* otherwise, the existing pcb was used */ - udp_remove(dhcp.pcb); - } -} - -/** Handle a possible change in the network configuration. - * - * This enters the REBOOTING state to verify that the currently bound - * address is still valid. - */ -void -dhcp_network_changed(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - if (!dhcp) - return; - switch (dhcp->state) { - case DHCP_REBINDING: - case DHCP_RENEWING: - case DHCP_BOUND: - case DHCP_REBOOTING: - netif_set_down(netif); - dhcp->tries = 0; - dhcp_reboot(netif); - break; - case DHCP_OFF: - /* stay off */ - break; - default: - dhcp->tries = 0; -#if LWIP_DHCP_AUTOIP_COOP - if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { - autoip_stop(netif); - dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; - } -#endif /* LWIP_DHCP_AUTOIP_COOP */ - dhcp_discover(netif); - break; - } -} - -#if DHCP_DOES_ARP_CHECK -/** - * Match an ARP reply with the offered IP address. - * - * @param netif the network interface on which the reply was received - * @param addr The IP address we received a reply from - */ -void dhcp_arp_reply(struct netif *netif, ip_addr_t *addr) -{ - LWIP_ERROR("netif != NULL", (netif != NULL), return;); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_arp_reply()\n")); - /* is a DHCP client doing an ARP check? */ - if ((netif->dhcp != NULL) && (netif->dhcp->state == DHCP_CHECKING)) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_arp_reply(): CHECKING, arp reply for 0x%08"X32_F"\n", - ip4_addr_get_u32(addr))); - /* did a host respond with the address we - were offered by the DHCP server? */ - if (ip_addr_cmp(addr, &netif->dhcp->offered_ip_addr)) { - /* we will not accept the offered address */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, - ("dhcp_arp_reply(): arp reply matched with offered address, declining\n")); - dhcp_decline(netif); - } - } -} - -/** - * Decline an offered lease. - * - * Tell the DHCP server we do not accept the offered address. - * One reason to decline the lease is when we find out the address - * is already in use by another host (through ARP). - * - * @param netif the netif under DHCP control - */ -static err_t -dhcp_decline(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result = ERR_OK; - uint16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline()\n")); - dhcp_set_state(dhcp, DHCP_BACKING_OFF); - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, dhcp, DHCP_DECLINE); - if (result == ERR_OK) { - dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); - dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); - - dhcp_option_trailer(dhcp); - /* resize pbuf to reflect true size of options */ - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - /* per section 4.4.4, broadcast DECLINE messages */ - udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(dhcp); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_decline: BACKING OFF\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("dhcp_decline: could not allocate DHCP request\n")); - } - dhcp->tries++; - msecs = 10*1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline(): set request timeout %"U16_F" msecs\n", msecs)); - return result; -} -#endif /* DHCP_DOES_ARP_CHECK */ - - -/** - * Start the DHCP process, discover a DHCP server. - * - * @param netif the netif under DHCP control - */ -static err_t -dhcp_discover(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result = ERR_OK; - uint16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover()\n")); - ip_addr_set_any(&dhcp->offered_ip_addr); - dhcp_set_state(dhcp, DHCP_SELECTING); - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, dhcp, DHCP_DISCOVER); - if (result == ERR_OK) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: making request\n")); - - dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); - - dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/); - dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK); - dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER); - dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST); - dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER); - - dhcp_option_trailer(dhcp); - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: realloc()ing\n")); - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: sendto(DISCOVER, IP_ADDR_BROADCAST, DHCP_SERVER_PORT)\n")); - udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: deleting()ing\n")); - dhcp_delete_msg(dhcp); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover: SELECTING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_discover: could not allocate DHCP request\n")); - } - dhcp->tries++; -#if LWIP_DHCP_AUTOIP_COOP - if(dhcp->tries >= LWIP_DHCP_AUTOIP_COOP_TRIES && dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_OFF) { - dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_ON; - autoip_start(netif); - } -#endif /* LWIP_DHCP_AUTOIP_COOP */ - msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs)); - return result; -} - - -/** - * Bind the interface to the offered IP address. - * - * @param netif network interface to bind to the offered address - */ -static void -dhcp_bind(struct netif *netif) -{ - uint32_t timeout; - struct dhcp *dhcp; - ip_addr_t sn_mask, gw_addr; - LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;); - dhcp = netif->dhcp; - LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (uint16_t)netif->num)); - - /* reset time used of lease */ - dhcp->lease_used = 0; - - if( dhcp->offered_t0_lease != 0xffffffffUL) { - /* set renewal period timer */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t0 renewal timer %"U32_F" secs\n", dhcp->offered_t0_lease)); - timeout = (dhcp->offered_t0_lease + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; - if(timeout > 0xffff) { - timeout = 0xffff; - } - dhcp->t0_timeout = (uint16_t)timeout; - if (dhcp->t0_timeout == 0) { - dhcp->t0_timeout = 1; - } - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t0_lease*1000)); - } - /* temporary DHCP lease? */ - if (dhcp->offered_t1_renew != 0xffffffffUL) { - /* set renewal period timer */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t1 renewal timer %"U32_F" secs\n", dhcp->offered_t1_renew)); - timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; - if(timeout > 0xffff) { - timeout = 0xffff; - } - dhcp->t1_timeout = (uint16_t)timeout; - if (dhcp->t1_timeout == 0) { - dhcp->t1_timeout = 1; - } - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t1_renew*1000)); - dhcp->t1_renew_time = dhcp->t1_timeout; - } - /* set renewal period timer */ - if (dhcp->offered_t2_rebind != 0xffffffffUL) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t2 rebind timer %"U32_F" secs\n", dhcp->offered_t2_rebind)); - timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; - if(timeout > 0xffff) { - timeout = 0xffff; - } - dhcp->t2_timeout = (uint16_t)timeout; - if (dhcp->t2_timeout == 0) { - dhcp->t2_timeout = 1; - } - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t2_rebind*1000)); - dhcp->t2_rebind_time = dhcp->t2_timeout; - } - - if (dhcp->subnet_mask_given) { - /* copy offered network mask */ - ip_addr_copy(sn_mask, dhcp->offered_sn_mask); - } else { - /* subnet mask not given, choose a safe subnet mask given the network class */ - uint8_t first_octet = ip4_addr1(&dhcp->offered_ip_addr); - if (first_octet <= 127) { - ip4_addr_set_u32(&sn_mask, PP_HTONL(0xff000000UL)); - } else if (first_octet >= 192) { - ip4_addr_set_u32(&sn_mask, PP_HTONL(0xffffff00UL)); - } else { - ip4_addr_set_u32(&sn_mask, PP_HTONL(0xffff0000UL)); - } - } - - ip_addr_copy(gw_addr, dhcp->offered_gw_addr); - /* gateway address not given? */ - if (gw_addr.addr == IPADDR_ANY) { - /* copy network address */ - ip_addr_get_network(&gw_addr, &dhcp->offered_ip_addr, &sn_mask); - /* use first host address on network as gateway */ - ip4_addr_set_u32(&gw_addr, ip4_addr_get_u32(&gw_addr) | PP_HTONL(0x00000001UL)); - } - -#if LWIP_DHCP_AUTOIP_COOP - if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { - autoip_stop(netif); - dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; - } -#endif /* LWIP_DHCP_AUTOIP_COOP */ - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): IP: 0x%08"X32_F"\n", - ip4_addr_get_u32(&dhcp->offered_ip_addr))); - netif_set_ipaddr(netif, &dhcp->offered_ip_addr); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): SN: 0x%08"X32_F"\n", - ip4_addr_get_u32(&sn_mask))); - netif_set_netmask(netif, &sn_mask); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): GW: 0x%08"X32_F"\n", - ip4_addr_get_u32(&gw_addr))); - netif_set_gw(netif, &gw_addr); - /* bring the interface up */ - netif_set_up(netif); - /* netif is now bound to DHCP leased address */ - dhcp_set_state(dhcp, DHCP_BOUND); -} - -/** - * Renew an existing DHCP lease at the involved DHCP server. - * - * @param netif network interface which must renew its lease - */ -err_t -dhcp_renew(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result; - uint16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_renew()\n")); - dhcp_set_state(dhcp, DHCP_RENEWING); - - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST); - if (result == ERR_OK) { - dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); - -#if 0 - dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); - dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); -#endif - -#if 0 - dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); - dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); -#endif - -#if LWIP_NETIF_HOSTNAME - dhcp_option_hostname(dhcp, netif); -#endif /* LWIP_NETIF_HOSTNAME */ - - /* append DHCP message trailer */ - dhcp_option_trailer(dhcp); - - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(dhcp); - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew: RENEWING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_renew: could not allocate DHCP request\n")); - } - dhcp->tries++; - /* back-off on retries, but to a maximum of 20 seconds */ - msecs = dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew(): set request timeout %"U16_F" msecs\n", msecs)); - return result; -} - -/** - * Rebind with a DHCP server for an existing DHCP lease. - * - * @param netif network interface which must rebind with a DHCP server - */ -static err_t -dhcp_rebind(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result; - uint16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind()\n")); - dhcp_set_state(dhcp, DHCP_REBINDING); - - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST); - if (result == ERR_OK) { - dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); - -#if LWIP_NETIF_HOSTNAME - dhcp_option_hostname(dhcp, netif); -#endif /* LWIP_NETIF_HOSTNAME */ - -#if 0 - dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); - dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); - - dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); - dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); -#endif - - dhcp_option_trailer(dhcp); - - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - /* broadcast to server */ - udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(dhcp); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind: REBINDING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_rebind: could not allocate DHCP request\n")); - } - dhcp->tries++; - msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind(): set request timeout %"U16_F" msecs\n", msecs)); - return result; -} - -/** - * Enter REBOOTING state to verify an existing lease - * - * @param netif network interface which must reboot - */ -static err_t -dhcp_reboot(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result; - uint16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot()\n")); - dhcp_set_state(dhcp, DHCP_REBOOTING); - - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST); - if (result == ERR_OK) { - dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - dhcp_option_short(dhcp, 576); - - dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); - dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); - - dhcp_option_trailer(dhcp); - - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - /* broadcast to server */ - udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(dhcp); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot: REBOOTING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_reboot: could not allocate DHCP request\n")); - } - dhcp->tries++; - msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot(): set request timeout %"U16_F" msecs\n", msecs)); - return result; -} - - -/** - * Release a DHCP lease. - * - * @param netif network interface which must release its lease - */ -err_t -dhcp_release(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result; - uint16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_release()\n")); - - /* idle DHCP client */ - dhcp_set_state(dhcp, DHCP_OFF); - /* clean old DHCP offer */ - ip_addr_set_zero(&dhcp->server_ip_addr); - ip_addr_set_zero(&dhcp->offered_ip_addr); - ip_addr_set_zero(&dhcp->offered_sn_mask); - ip_addr_set_zero(&dhcp->offered_gw_addr); -#if LWIP_DHCP_BOOTP_FILE - ip_addr_set_zero(&dhcp->offered_si_addr); -#endif /* LWIP_DHCP_BOOTP_FILE */ - dhcp->offered_t0_lease = dhcp->offered_t1_renew = dhcp->offered_t2_rebind = 0; - - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, dhcp, DHCP_RELEASE); - if (result == ERR_OK) { - dhcp_option_trailer(dhcp); - - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(dhcp); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release: RELEASED, DHCP_OFF\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_release: could not allocate DHCP request\n")); - } - dhcp->tries++; - msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release(): set request timeout %"U16_F" msecs\n", msecs)); - /* bring the interface down */ - netif_set_down(netif); - /* remove IP address from interface */ - netif_set_ipaddr(netif, IP_ADDR_ANY); - netif_set_gw(netif, IP_ADDR_ANY); - netif_set_netmask(netif, IP_ADDR_ANY); - - /* TODO: netif_down(netif); */ - return result; -} - -/** - * Release a DHCP lease. - * - * @param netif network interface which must release its lease - */ -err_t -dhcp_release_unicast(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result; - uint16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_release()\n")); - - /* idle DHCP client */ - dhcp_set_state(dhcp, DHCP_RELEASING); - /* clean old DHCP offer *//* - dhcp->server_ip_addr.addr = 0; - dhcp->offered_ip_addr.addr = dhcp->offered_sn_mask.addr = 0; - dhcp->offered_gw_addr.addr = dhcp->offered_bc_addr.addr = 0; - dhcp->offered_t0_lease = dhcp->offered_t1_renew = dhcp->offered_t2_rebind = 0; - dhcp->dns_count = 0;*/ - - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif,netif->dhcp,DHCP_REQUEST); - if (result == ERR_OK) { - dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); - dhcp_option_byte(dhcp, DHCP_RELEASE); - - dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); - dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); - - dhcp_option_trailer(dhcp); - - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(netif->dhcp); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release: RELEASED, DHCP_OFF\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_release: could not allocate DHCP request\n")); - } - dhcp->tries++; - msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release(): set request timeout %"U16_F" msecs\n", msecs)); - /* bring the interface down */ - netif_set_down(netif); - /* remove IP address from interface */ - netif_set_ipaddr(netif, IP_ADDR_ANY); - netif_set_gw(netif, IP_ADDR_ANY); - netif_set_netmask(netif, IP_ADDR_ANY); - - /* TODO: netif_down(netif); */ - return result; -} - -/** - * Remove the DHCP client from the interface. - * - * @param netif The network interface to stop DHCP on - */ -void -dhcp_stop(struct netif *netif) -{ - struct dhcp *dhcp; - LWIP_ERROR("dhcp_stop: netif != NULL", (netif != NULL), return;); - dhcp = netif->dhcp; - /* Remove the flag that says this netif is handled by DHCP. */ - netif->flags &= ~NETIF_FLAG_DHCP; - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_stop()\n")); - /* netif is DHCP configured? */ - if (dhcp != NULL) { -#if LWIP_DHCP_AUTOIP_COOP - if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { - autoip_stop(netif); - dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; - } -#endif /* LWIP_DHCP_AUTOIP_COOP */ - - if (dhcp->pcb != NULL) { - udp_remove(dhcp->pcb); - dhcp->pcb = NULL; - } - LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL); - dhcp_set_state(dhcp, DHCP_OFF); - } -} - -/* - * Set the DHCP state of a DHCP client. - * - * If the state changed, reset the number of tries. - */ -static void -dhcp_set_state(struct dhcp *dhcp, uint8_t new_state) -{ - if (new_state != dhcp->state) { - dhcp->state = new_state; - dhcp->tries = 0; - dhcp->request_timeout = 0; - } -} - -/* - * Concatenate an option type and length field to the outgoing - * DHCP message. - * - */ -static void -dhcp_option(struct dhcp *dhcp, uint8_t option_type, uint8_t option_len) -{ - LWIP_ASSERT("dhcp_option: dhcp->options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN); - dhcp->msg_out->options[dhcp->options_out_len++] = option_type; - dhcp->msg_out->options[dhcp->options_out_len++] = option_len; -} -/* - * Concatenate a single byte to the outgoing DHCP message. - * - */ -static void -dhcp_option_byte(struct dhcp *dhcp, uint8_t value) -{ - LWIP_ASSERT("dhcp_option_byte: dhcp->options_out_len < DHCP_OPTIONS_LEN", dhcp->options_out_len < DHCP_OPTIONS_LEN); - dhcp->msg_out->options[dhcp->options_out_len++] = value; -} - -static void -dhcp_option_short(struct dhcp *dhcp, uint16_t value) -{ - LWIP_ASSERT("dhcp_option_short: dhcp->options_out_len + 2 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U <= DHCP_OPTIONS_LEN); - dhcp->msg_out->options[dhcp->options_out_len++] = (uint8_t)((value & 0xff00U) >> 8); - dhcp->msg_out->options[dhcp->options_out_len++] = (uint8_t) (value & 0x00ffU); -} - -static void -dhcp_option_long(struct dhcp *dhcp, uint32_t value) -{ - LWIP_ASSERT("dhcp_option_long: dhcp->options_out_len + 4 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 4U <= DHCP_OPTIONS_LEN); - dhcp->msg_out->options[dhcp->options_out_len++] = (uint8_t)((value & 0xff000000UL) >> 24); - dhcp->msg_out->options[dhcp->options_out_len++] = (uint8_t)((value & 0x00ff0000UL) >> 16); - dhcp->msg_out->options[dhcp->options_out_len++] = (uint8_t)((value & 0x0000ff00UL) >> 8); - dhcp->msg_out->options[dhcp->options_out_len++] = (uint8_t)((value & 0x000000ffUL)); -} - -#if LWIP_NETIF_HOSTNAME -static void -dhcp_option_hostname(struct dhcp *dhcp, struct netif *netif) -{ - if (netif->hostname != NULL) { - size_t namelen = strlen(netif->hostname); - if (namelen > 0) { - uint8_t len; - const char *p = netif->hostname; - /* Shrink len to available bytes (need 2 bytes for OPTION_HOSTNAME - and 1 byte for trailer) */ - size_t available = DHCP_OPTIONS_LEN - dhcp->options_out_len - 3; - LWIP_ASSERT("DHCP: hostname is too long!", namelen <= available); - len = LWIP_MIN(namelen, available); - dhcp_option(dhcp, DHCP_OPTION_HOSTNAME, len); - while (len--) { - dhcp_option_byte(dhcp, *p++); - } - } - } -} -#endif /* LWIP_NETIF_HOSTNAME */ - -/** - * Extract the DHCP message and the DHCP options. - * - * Extract the DHCP message and the DHCP options, each into a contiguous - * piece of memory. As a DHCP message is variable sized by its options, - * and also allows overriding some fields for options, the easy approach - * is to first unfold the options into a conitguous piece of memory, and - * use that further on. - * - */ -static err_t -dhcp_parse_reply(struct dhcp *dhcp, struct pbuf *p) -{ - uint8_t *options; - uint16_t offset; - uint16_t offset_max; - uint16_t options_idx; - uint16_t options_idx_max; - struct pbuf *q; - int parse_file_as_options = 0; - int parse_sname_as_options = 0; - - /* clear received options */ - dhcp_clear_all_options(dhcp); - /* check that beginning of dhcp_msg (up to and including chaddr) is in first pbuf */ - if (p->len < DHCP_SNAME_OFS) { - return ERR_BUF; - } - dhcp->msg_in = (struct dhcp_msg *)p->payload; -#if LWIP_DHCP_BOOTP_FILE - /* clear boot file name */ - dhcp->boot_file_name[0] = 0; -#endif /* LWIP_DHCP_BOOTP_FILE */ - - /* parse options */ - - /* start with options field */ - options_idx = DHCP_OPTIONS_OFS; - /* parse options to the end of the received packet */ - options_idx_max = p->tot_len; -again: - q = p; - while((q != NULL) && (options_idx >= q->len)) { - options_idx -= q->len; - options_idx_max -= q->len; - q = q->next; - } - if (q == NULL) { - return ERR_BUF; - } - offset = options_idx; - offset_max = options_idx_max; - options = (uint8_t*)q->payload; - /* at least 1 byte to read and no end marker, then at least 3 bytes to read? */ - while((q != NULL) && (options[offset] != DHCP_OPTION_END) && (offset < offset_max)) { - uint8_t op = options[offset]; - uint8_t len; - uint8_t decode_len = 0; - int decode_idx = -1; - uint16_t val_offset = offset + 2; - /* len byte might be in the next pbuf */ - if (offset + 1 < q->len) { - len = options[offset + 1]; - } else { - len = (q->next != NULL ? ((uint8_t*)q->next->payload)[0] : 0); - } - /* LWIP_DEBUGF(DHCP_DEBUG, ("msg_offset=%"U16_F", q->len=%"U16_F, msg_offset, q->len)); */ - decode_len = len; - switch(op) { - /* case(DHCP_OPTION_END): handled above */ - case(DHCP_OPTION_PAD): - /* special option: no len encoded */ - decode_len = len = 0; - /* will be increased below */ - offset--; - break; - case(DHCP_OPTION_SUBNET_MASK): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_SUBNET_MASK; - break; - case(DHCP_OPTION_ROUTER): - decode_len = 4; /* only copy the first given router */ - LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_ROUTER; - break; - case(DHCP_OPTION_DNS_SERVER): - /* special case: there might be more than one server */ - LWIP_ERROR("len % 4 == 0", len % 4 == 0, return ERR_VAL;); - /* limit number of DNS servers */ - decode_len = LWIP_MIN(len, 4 * DNS_MAX_SERVERS); - LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_DNS_SERVER; - break; - case(DHCP_OPTION_LEASE_TIME): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_LEASE_TIME; - break; - case(DHCP_OPTION_OVERLOAD): - LWIP_ERROR("len == 1", len == 1, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_OVERLOAD; - break; - case(DHCP_OPTION_MESSAGE_TYPE): - LWIP_ERROR("len == 1", len == 1, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_MSG_TYPE; - break; - case(DHCP_OPTION_SERVER_ID): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_SERVER_ID; - break; - case(DHCP_OPTION_T1): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_T1; - break; - case(DHCP_OPTION_T2): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_T2; - break; - default: - decode_len = 0; - LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", op)); - break; - } - offset += len + 2; - if (decode_len > 0) { - uint32_t value = 0; - uint16_t copy_len; -decode_next: - LWIP_ASSERT("check decode_idx", decode_idx >= 0 && decode_idx < DHCP_OPTION_IDX_MAX); - if (!dhcp_option_given(dhcp, decode_idx)) { - copy_len = LWIP_MIN(decode_len, 4); - pbuf_copy_partial(q, &value, copy_len, val_offset); - if (decode_len > 4) { - /* decode more than one uint32_t */ - LWIP_ERROR("decode_len % 4 == 0", decode_len % 4 == 0, return ERR_VAL;); - dhcp_got_option(dhcp, decode_idx); - dhcp_set_option_value(dhcp, decode_idx, htonl(value)); - decode_len -= 4; - val_offset += 4; - decode_idx++; - goto decode_next; - } else if (decode_len == 4) { - value = ntohl(value); - } else { - LWIP_ERROR("invalid decode_len", decode_len == 1, return ERR_VAL;); - value = ((uint8_t*)&value)[0]; - } - dhcp_got_option(dhcp, decode_idx); - dhcp_set_option_value(dhcp, decode_idx, value); - } - } - if (offset >= q->len) { - offset -= q->len; - offset_max -= q->len; - if ((offset < offset_max) && offset_max) { - q = q->next; - LWIP_ASSERT("next pbuf was null", q); - options = (uint8_t*)q->payload; - } else { - // We've run out of bytes, probably no end marker. Don't proceed. - break; - } - } - } - /* is this an overloaded message? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_OVERLOAD)) { - uint32_t overload = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_OVERLOAD); - dhcp_clear_option(dhcp, DHCP_OPTION_IDX_OVERLOAD); - if (overload == DHCP_OVERLOAD_FILE) { - parse_file_as_options = 1; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded file field\n")); - } else if (overload == DHCP_OVERLOAD_SNAME) { - parse_sname_as_options = 1; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname field\n")); - } else if (overload == DHCP_OVERLOAD_SNAME_FILE) { - parse_sname_as_options = 1; - parse_file_as_options = 1; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname and file field\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("invalid overload option: %d\n", (int)overload)); - } -#if LWIP_DHCP_BOOTP_FILE - if (!parse_file_as_options) { - /* only do this for ACK messages */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE) && - (dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE) == DHCP_ACK)) - /* copy bootp file name, don't care for sname (server hostname) */ - pbuf_copy_partial(p, dhcp->boot_file_name, DHCP_FILE_LEN-1, DHCP_FILE_OFS); - /* make sure the string is really NULL-terminated */ - dhcp->boot_file_name[DHCP_FILE_LEN-1] = 0; - } -#endif /* LWIP_DHCP_BOOTP_FILE */ - } - if (parse_file_as_options) { - /* if both are overloaded, parse file first and then sname (RFC 2131 ch. 4.1) */ - parse_file_as_options = 0; - options_idx = DHCP_FILE_OFS; - options_idx_max = DHCP_FILE_OFS + DHCP_FILE_LEN; - goto again; - } else if (parse_sname_as_options) { - parse_sname_as_options = 0; - options_idx = DHCP_SNAME_OFS; - options_idx_max = DHCP_SNAME_OFS + DHCP_SNAME_LEN; - goto again; - } - return ERR_OK; -} - -/** - * If an incoming DHCP message is in response to us, then trigger the state machine - */ -static void -dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, uint16_t port) -{ - struct netif *netif = (struct netif *)arg; - struct dhcp *dhcp = netif->dhcp; - struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload; - uint8_t msg_type; - uint8_t i; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_recv(pbuf = %p) from DHCP server %"U16_F".%"U16_F".%"U16_F".%"U16_F" port %"U16_F"\n", (void*)p, - ip4_addr1_16(addr), ip4_addr2_16(addr), ip4_addr3_16(addr), ip4_addr4_16(addr), port)); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->len = %"U16_F"\n", p->len)); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->tot_len = %"U16_F"\n", p->tot_len)); - /* prevent warnings about unused arguments */ - LWIP_UNUSED_ARG(pcb); - LWIP_UNUSED_ARG(addr); - LWIP_UNUSED_ARG(port); - - LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL); - - if (p->len < DHCP_MIN_REPLY_LEN) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP reply message or pbuf too short\n")); - goto free_pbuf_and_return; - } - - if (reply_msg->op != DHCP_BOOTREPLY) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("not a DHCP reply message, but type %"U16_F"\n", (uint16_t)reply_msg->op)); - goto free_pbuf_and_return; - } - /* iterate through hardware address and match against DHCP message */ - for (i = 0; i < netif->hwaddr_len; i++) { - if (netif->hwaddr[i] != reply_msg->chaddr[i]) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, - ("netif->hwaddr[%"U16_F"]==%02"X16_F" != reply_msg->chaddr[%"U16_F"]==%02"X16_F"\n", - (uint16_t)i, (uint16_t)netif->hwaddr[i], (uint16_t)i, (uint16_t)reply_msg->chaddr[i])); - goto free_pbuf_and_return; - } - } - /* match transaction ID against what we expected */ - if (ntohl(reply_msg->xid) != dhcp->xid) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, - ("transaction id mismatch reply_msg->xid(%"X32_F")!=dhcp->xid(%"X32_F")\n",ntohl(reply_msg->xid),dhcp->xid)); - goto free_pbuf_and_return; - } - /* option fields could be unfold? */ - if (dhcp_parse_reply(dhcp, p) != ERR_OK) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("problem unfolding DHCP message - too short on memory?\n")); - goto free_pbuf_and_return; - } - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("searching DHCP_OPTION_MESSAGE_TYPE\n")); - /* obtain pointer to DHCP message type */ - if (!dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE)) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP_OPTION_MESSAGE_TYPE option not found\n")); - goto free_pbuf_and_return; - } - - /* read DHCP message type */ - msg_type = (uint8_t)dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE); - /* message type is DHCP ACK? */ - if (msg_type == DHCP_ACK) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_ACK received\n")); - /* in requesting state? */ - if (dhcp->state == DHCP_REQUESTING) { - dhcp_handle_ack(netif); -#if DHCP_DOES_ARP_CHECK - /* check if the acknowledged lease address is already in use */ - dhcp_check(netif); -#else - /* bind interface to the acknowledged lease address */ - dhcp_bind(netif); -#endif - } - /* already bound to the given lease address? */ - else if ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING)) { - dhcp_bind(netif); - } - } - /* received a DHCP_NAK in appropriate state? */ - else if ((msg_type == DHCP_NAK) && - ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REQUESTING) || - (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING ))) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_NAK received\n")); - dhcp_handle_nak(netif); - } - /* received a DHCP_OFFER in DHCP_SELECTING state? */ - else if ((msg_type == DHCP_OFFER) && (dhcp->state == DHCP_SELECTING)) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_OFFER received in DHCP_SELECTING state\n")); - dhcp->request_timeout = 0; - /* remember offered lease */ - dhcp_handle_offer(netif); - } -free_pbuf_and_return: - dhcp->msg_in = NULL; - pbuf_free(p); -} - -/** - * Create a DHCP request, fill in common headers - * - * @param netif the netif under DHCP control - * @param dhcp dhcp control struct - * @param message_type message type of the request - */ -static err_t -dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, uint8_t message_type) -{ - uint16_t i; -#ifndef DHCP_GLOBAL_XID - /** default global transaction identifier starting value (easy to match - * with a packet analyser). We simply increment for each new request. - * Predefine DHCP_GLOBAL_XID to a better value or a function call to generate one - * at runtime, any supporting function prototypes can be defined in DHCP_GLOBAL_XID_HEADER */ -#if DHCP_CREATE_RAND_XID && defined(LWIP_RAND) - static uint32_t xid; -#else /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ - static uint32_t xid = 0xABCD0000; -#endif /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ -#else - if (!xid_initialised) { - xid = DHCP_GLOBAL_XID; - xid_initialised = !xid_initialised; - } -#endif - LWIP_ERROR("dhcp_create_msg: netif != NULL", (netif != NULL), return ERR_ARG;); - LWIP_ERROR("dhcp_create_msg: dhcp != NULL", (dhcp != NULL), return ERR_VAL;); - LWIP_ASSERT("dhcp_create_msg: dhcp->p_out == NULL", dhcp->p_out == NULL); - LWIP_ASSERT("dhcp_create_msg: dhcp->msg_out == NULL", dhcp->msg_out == NULL); - dhcp->p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp_msg), PBUF_RAM); - if (dhcp->p_out == NULL) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("dhcp_create_msg(): could not allocate pbuf\n")); - return ERR_MEM; - } - LWIP_ASSERT("dhcp_create_msg: check that first pbuf can hold struct dhcp_msg", - (dhcp->p_out->len >= sizeof(struct dhcp_msg))); - - /* reuse transaction identifier in retransmissions */ - if (dhcp->tries == 0) { -#if DHCP_CREATE_RAND_XID && defined(LWIP_RAND) - xid = LWIP_RAND(); -#else /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ - xid++; -#endif /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ - } - dhcp->xid = xid; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, - ("transaction id xid(%"X32_F")\n", xid)); - - dhcp->msg_out = (struct dhcp_msg *)dhcp->p_out->payload; - - dhcp->msg_out->op = DHCP_BOOTREQUEST; - /* TODO: make link layer independent */ - dhcp->msg_out->htype = DHCP_HTYPE_ETH; - dhcp->msg_out->hlen = netif->hwaddr_len; - dhcp->msg_out->hops = 0; - dhcp->msg_out->xid = htonl(dhcp->xid); - dhcp->msg_out->secs = 0; - /* we don't need the broadcast flag since we can receive unicast traffic - before being fully configured! */ - dhcp->msg_out->flags = 0; - ip_addr_set_zero(&dhcp->msg_out->ciaddr); - /* set ciaddr to netif->ip_addr based on message_type and state */ - if ((message_type == DHCP_INFORM) || (message_type == DHCP_DECLINE) || - ((message_type == DHCP_REQUEST) && /* DHCP_BOUND not used for sending! */ - ((dhcp->state==DHCP_RENEWING) || dhcp->state==DHCP_REBINDING))) { - ip_addr_copy(dhcp->msg_out->ciaddr, netif->ip_addr); - } - ip_addr_set_zero(&dhcp->msg_out->yiaddr); - ip_addr_set_zero(&dhcp->msg_out->siaddr); - ip_addr_set_zero(&dhcp->msg_out->giaddr); - for (i = 0; i < DHCP_CHADDR_LEN; i++) { - /* copy netif hardware address, pad with zeroes */ - dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/; - } - for (i = 0; i < DHCP_SNAME_LEN; i++) { - dhcp->msg_out->sname[i] = 0; - } - for (i = 0; i < DHCP_FILE_LEN; i++) { - dhcp->msg_out->file[i] = 0; - } - dhcp->msg_out->cookie = PP_HTONL(DHCP_MAGIC_COOKIE); - dhcp->options_out_len = 0; - /* fill options field with an incrementing array (for debugging purposes) */ - for (i = 0; i < DHCP_OPTIONS_LEN; i++) { - dhcp->msg_out->options[i] = (uint8_t)i; /* for debugging only, no matter if truncated */ - } - /* Add option MESSAGE_TYPE */ - dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); - dhcp_option_byte(dhcp, message_type); - return ERR_OK; -} - -/** - * Free previously allocated memory used to send a DHCP request. - * - * @param dhcp the dhcp struct to free the request from - */ -static void -dhcp_delete_msg(struct dhcp *dhcp) -{ - LWIP_ERROR("dhcp_delete_msg: dhcp != NULL", (dhcp != NULL), return;); - LWIP_ASSERT("dhcp_delete_msg: dhcp->p_out != NULL", dhcp->p_out != NULL); - LWIP_ASSERT("dhcp_delete_msg: dhcp->msg_out != NULL", dhcp->msg_out != NULL); - if (dhcp->p_out != NULL) { - pbuf_free(dhcp->p_out); - } - dhcp->p_out = NULL; - dhcp->msg_out = NULL; -} - -/** - * Add a DHCP message trailer - * - * Adds the END option to the DHCP message, and if - * necessary, up to three padding bytes. - * - * @param dhcp DHCP state structure - */ -static void -dhcp_option_trailer(struct dhcp *dhcp) -{ - LWIP_ERROR("dhcp_option_trailer: dhcp != NULL", (dhcp != NULL), return;); - LWIP_ASSERT("dhcp_option_trailer: dhcp->msg_out != NULL\n", dhcp->msg_out != NULL); - LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN); - dhcp->msg_out->options[dhcp->options_out_len++] = DHCP_OPTION_END; - /* packet is too small, or not 4 byte aligned? */ - while (((dhcp->options_out_len < DHCP_MIN_OPTIONS_LEN) || (dhcp->options_out_len & 3)) && - (dhcp->options_out_len < DHCP_OPTIONS_LEN)) { - /* add a fill/padding byte */ - dhcp->msg_out->options[dhcp->options_out_len++] = 0; - } -} - -#endif /* LWIP_DHCP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/dns.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/dns.c deleted file mode 100644 index 62b1d1e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/dns.c +++ /dev/null @@ -1,931 +0,0 @@ -/** - * @file - * DNS - host name to IP address resolver. - * - */ - -/** - - * This file implements a DNS host name to IP address resolver. - - * Port to lwIP from uIP - * by Jim Pettinato April 2007 - - * uIP version Copyright (c) 2002-2003, Adam Dunkels. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * - * DNS.C - * - * The lwIP DNS resolver functions are used to lookup a host name and - * map it to a numerical IP address. It maintains a list of resolved - * hostnames that can be queried with the dns_lookup() function. - * New hostnames can be resolved using the dns_query() function. - * - * The lwIP version of the resolver also adds a non-blocking version of - * gethostbyname() that will work with a raw API application. This function - * checks for an IP address string first and converts it if it is valid. - * gethostbyname() then does a dns_lookup() to see if the name is - * already in the table. If so, the IP is returned. If not, a query is - * issued and the function returns with a ERR_INPROGRESS status. The app - * using the dns client must then go into a waiting state. - * - * Once a hostname has been resolved (or found to be non-existent), - * the resolver code calls a specified callback function (which - * must be implemented by the module that uses the resolver). - */ - -/*----------------------------------------------------------------------------- - * RFC 1035 - Domain names - implementation and specification - * RFC 2181 - Clarifications to the DNS Specification - *----------------------------------------------------------------------------*/ - -/** @todo: define good default values (rfc compliance) */ -/** @todo: improve answer parsing, more checkings... */ -/** @todo: check RFC1035 - 7.3. Processing responses */ - -/*----------------------------------------------------------------------------- - * Includes - *----------------------------------------------------------------------------*/ - -#include "lwip/opt.h" - -#if LWIP_DNS /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/udp.h" -#include "lwip/mem.h" -#include "lwip/memp.h" -#include "lwip/dns.h" - -#include - -/** DNS server IP address */ -#ifndef DNS_SERVER_ADDRESS -#define DNS_SERVER_ADDRESS(ipaddr) (ip4_addr_set_u32(ipaddr, ipaddr_addr("208.67.222.222"))) /* resolver1.opendns.com */ -#endif - -/** DNS server port address */ -#ifndef DNS_SERVER_PORT -#define DNS_SERVER_PORT 53 -#endif - -/** DNS maximum number of retries when asking for a name, before "timeout". */ -#ifndef DNS_MAX_RETRIES -#define DNS_MAX_RETRIES 4 -#endif - -/** DNS resource record max. TTL (one week as default) */ -#ifndef DNS_MAX_TTL -#define DNS_MAX_TTL 604800 -#endif - -/** DNS query message structure. - No packing needed: only used locally on the stack. */ -struct dns_query { - /* DNS query record starts with either a domain name or a pointer - to a name already present somewhere in the packet. */ - uint16_t type; - uint16_t cls; -}; -#define SIZEOF_DNS_QUERY 4 - -/** DNS answer message structure. - No packing needed: only used locally on the stack. */ -struct dns_answer { - /* DNS answer record starts with either a domain name or a pointer - to a name already present somewhere in the packet. */ - uint16_t type; - uint16_t cls; - uint32_t ttl; - uint16_t len; -}; -#define SIZEOF_DNS_ANSWER 10 - -/** DNS table entry */ -struct dns_table_entry { - uint8_t state; - uint8_t numdns; - uint8_t tmr; - uint8_t retries; - uint8_t seqno; - uint8_t err; - uint32_t ttl; - char name[DNS_MAX_NAME_LENGTH]; - ip_addr_t ipaddr; - /* pointer to callback on DNS query done */ - dns_found_callback found; - void *arg; -}; - -#if DNS_LOCAL_HOSTLIST - -#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC -/** Local host-list. For hostnames in this list, no - * external name resolution is performed */ -static struct local_hostlist_entry *local_hostlist_dynamic; -#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ - -/** Defining this allows the local_hostlist_static to be placed in a different - * linker section (e.g. FLASH) */ -#ifndef DNS_LOCAL_HOSTLIST_STORAGE_PRE -#define DNS_LOCAL_HOSTLIST_STORAGE_PRE static -#endif /* DNS_LOCAL_HOSTLIST_STORAGE_PRE */ -/** Defining this allows the local_hostlist_static to be placed in a different - * linker section (e.g. FLASH) */ -#ifndef DNS_LOCAL_HOSTLIST_STORAGE_POST -#define DNS_LOCAL_HOSTLIST_STORAGE_POST -#endif /* DNS_LOCAL_HOSTLIST_STORAGE_POST */ -DNS_LOCAL_HOSTLIST_STORAGE_PRE struct local_hostlist_entry local_hostlist_static[] - DNS_LOCAL_HOSTLIST_STORAGE_POST = DNS_LOCAL_HOSTLIST_INIT; - -#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ - -static void dns_init_local(); -#endif /* DNS_LOCAL_HOSTLIST */ - - -/* forward declarations */ -static void dns_recv(void *s, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, uint16_t port); -static void dns_check_entries(void); - -/*----------------------------------------------------------------------------- - * Globales - *----------------------------------------------------------------------------*/ - -/* DNS variables */ -static struct udp_pcb *dns_pcb; -static uint8_t dns_seqno; -static struct dns_table_entry dns_table[DNS_TABLE_SIZE]; -static ip_addr_t dns_servers[DNS_MAX_SERVERS]; -/** Contiguous buffer for processing responses */ -static uint8_t dns_payload_buffer[LWIP_MEM_ALIGN_BUFFER(DNS_MSG_SIZE)]; -static uint8_t* dns_payload; - -/** - * Initialize the resolver: set up the UDP pcb and configure the default server - * (DNS_SERVER_ADDRESS). - */ -void -dns_init() -{ - ip_addr_t dnsserver; - - dns_payload = (uint8_t *)LWIP_MEM_ALIGN(dns_payload_buffer); - - /* initialize default DNS server address */ - DNS_SERVER_ADDRESS(&dnsserver); - - LWIP_DEBUGF(DNS_DEBUG, ("dns_init: initializing\n")); - - /* if dns client not yet initialized... */ - if (dns_pcb == NULL) { - dns_pcb = udp_new(); - - if (dns_pcb != NULL) { - /* initialize DNS table not needed (initialized to zero since it is a - * global variable) */ - LWIP_ASSERT("For implicit initialization to work, DNS_STATE_UNUSED needs to be 0", - DNS_STATE_UNUSED == 0); - - /* initialize DNS client */ - udp_bind(dns_pcb, IP_ADDR_ANY, 0); - udp_recv(dns_pcb, dns_recv, NULL); - - /* initialize default DNS primary server */ - dns_setserver(0, &dnsserver); - } - } -#if DNS_LOCAL_HOSTLIST - dns_init_local(); -#endif -} - -/** - * Initialize one of the DNS servers. - * - * @param numdns the index of the DNS server to set must be < DNS_MAX_SERVERS - * @param dnsserver IP address of the DNS server to set - */ -void -dns_setserver(uint8_t numdns, ip_addr_t *dnsserver) -{ - if ((numdns < DNS_MAX_SERVERS) && (dns_pcb != NULL) && - (dnsserver != NULL) && !ip_addr_isany(dnsserver)) { - dns_servers[numdns] = (*dnsserver); - } -} - -/** - * Obtain one of the currently configured DNS server. - * - * @param numdns the index of the DNS server - * @return IP address of the indexed DNS server or "ip_addr_any" if the DNS - * server has not been configured. - */ -ip_addr_t -dns_getserver(uint8_t numdns) -{ - if (numdns < DNS_MAX_SERVERS) { - return dns_servers[numdns]; - } else { - return *IP_ADDR_ANY; - } -} - -/** - * The DNS resolver client timer - handle retries and timeouts and should - * be called every DNS_TMR_INTERVAL milliseconds (every second by default). - */ -void -dns_tmr(void) -{ - if (dns_pcb != NULL) { - LWIP_DEBUGF(DNS_DEBUG, ("dns_tmr: dns_check_entries\n")); - dns_check_entries(); - } -} - -#if DNS_LOCAL_HOSTLIST -static void -dns_init_local() -{ -#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC && defined(DNS_LOCAL_HOSTLIST_INIT) - int i; - struct local_hostlist_entry *entry; - /* Dynamic: copy entries from DNS_LOCAL_HOSTLIST_INIT to list */ - struct local_hostlist_entry local_hostlist_init[] = DNS_LOCAL_HOSTLIST_INIT; - size_t namelen; - for (i = 0; i < sizeof(local_hostlist_init) / sizeof(struct local_hostlist_entry); i++) { - struct local_hostlist_entry *init_entry = &local_hostlist_init[i]; - LWIP_ASSERT("invalid host name (NULL)", init_entry->name != NULL); - namelen = strlen(init_entry->name); - LWIP_ASSERT("namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN", namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN); - entry = (struct local_hostlist_entry *)memp_malloc(MEMP_LOCALHOSTLIST); - LWIP_ASSERT("mem-error in dns_init_local", entry != NULL); - if (entry != NULL) { - entry->name = (char*)entry + sizeof(struct local_hostlist_entry); - MEMCPY((char*)entry->name, init_entry->name, namelen); - ((char*)entry->name)[namelen] = 0; - entry->addr = init_entry->addr; - entry->next = local_hostlist_dynamic; - local_hostlist_dynamic = entry; - } - } -#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC && defined(DNS_LOCAL_HOSTLIST_INIT) */ -} - -/** - * Scans the local host-list for a hostname. - * - * @param hostname Hostname to look for in the local host-list - * @return The first IP address for the hostname in the local host-list or - * IPADDR_NONE if not found. - */ -static uint32_t -dns_lookup_local(const char *hostname) -{ -#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC - struct local_hostlist_entry *entry = local_hostlist_dynamic; - while(entry != NULL) { - if(strcmp(entry->name, hostname) == 0) { - return ip4_addr_get_u32(&entry->addr); - } - entry = entry->next; - } -#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ - int i; - for (i = 0; i < sizeof(local_hostlist_static) / sizeof(struct local_hostlist_entry); i++) { - if(strcmp(local_hostlist_static[i].name, hostname) == 0) { - return ip4_addr_get_u32(&local_hostlist_static[i].addr); - } - } -#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ - return IPADDR_NONE; -} - -#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC -/** Remove all entries from the local host-list for a specific hostname - * and/or IP addess - * - * @param hostname hostname for which entries shall be removed from the local - * host-list - * @param addr address for which entries shall be removed from the local host-list - * @return the number of removed entries - */ -int -dns_local_removehost(const char *hostname, const ip_addr_t *addr) -{ - int removed = 0; - struct local_hostlist_entry *entry = local_hostlist_dynamic; - struct local_hostlist_entry *last_entry = NULL; - while (entry != NULL) { - if (((hostname == NULL) || !strcmp(entry->name, hostname)) && - ((addr == NULL) || ip_addr_cmp(&entry->addr, addr))) { - struct local_hostlist_entry *free_entry; - if (last_entry != NULL) { - last_entry->next = entry->next; - } else { - local_hostlist_dynamic = entry->next; - } - free_entry = entry; - entry = entry->next; - memp_free(MEMP_LOCALHOSTLIST, free_entry); - removed++; - } else { - last_entry = entry; - entry = entry->next; - } - } - return removed; -} - -/** - * Add a hostname/IP address pair to the local host-list. - * Duplicates are not checked. - * - * @param hostname hostname of the new entry - * @param addr IP address of the new entry - * @return ERR_OK if succeeded or ERR_MEM on memory error - */ -err_t -dns_local_addhost(const char *hostname, const ip_addr_t *addr) -{ - struct local_hostlist_entry *entry; - size_t namelen; - LWIP_ASSERT("invalid host name (NULL)", hostname != NULL); - namelen = strlen(hostname); - LWIP_ASSERT("namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN", namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN); - entry = (struct local_hostlist_entry *)memp_malloc(MEMP_LOCALHOSTLIST); - if (entry == NULL) { - return ERR_MEM; - } - entry->name = (char*)entry + sizeof(struct local_hostlist_entry); - MEMCPY((char*)entry->name, hostname, namelen); - ((char*)entry->name)[namelen] = 0; - ip_addr_copy(entry->addr, *addr); - entry->next = local_hostlist_dynamic; - local_hostlist_dynamic = entry; - return ERR_OK; -} -#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC*/ -#endif /* DNS_LOCAL_HOSTLIST */ - -/** - * Look up a hostname in the array of known hostnames. - * - * @note This function only looks in the internal array of known - * hostnames, it does not send out a query for the hostname if none - * was found. The function dns_enqueue() can be used to send a query - * for a hostname. - * - * @param name the hostname to look up - * @return the hostname's IP address, as uint32_t (instead of ip_addr_t to - * better check for failure: != IPADDR_NONE) or IPADDR_NONE if the hostname - * was not found in the cached dns_table. - */ -static uint32_t -dns_lookup(const char *name) -{ - uint8_t i; -#if DNS_LOCAL_HOSTLIST || defined(DNS_LOOKUP_LOCAL_EXTERN) - uint32_t addr; -#endif /* DNS_LOCAL_HOSTLIST || defined(DNS_LOOKUP_LOCAL_EXTERN) */ -#if DNS_LOCAL_HOSTLIST - if ((addr = dns_lookup_local(name)) != IPADDR_NONE) { - return addr; - } -#endif /* DNS_LOCAL_HOSTLIST */ -#ifdef DNS_LOOKUP_LOCAL_EXTERN - if((addr = DNS_LOOKUP_LOCAL_EXTERN(name)) != IPADDR_NONE) { - return addr; - } -#endif /* DNS_LOOKUP_LOCAL_EXTERN */ - - /* Walk through name list, return entry if found. If not, return NULL. */ - for (i = 0; i < DNS_TABLE_SIZE; ++i) { - if ((dns_table[i].state == DNS_STATE_DONE) && - (strcmp(name, dns_table[i].name) == 0)) { - LWIP_DEBUGF(DNS_DEBUG, ("dns_lookup: \"%s\": found = ", name)); - ip_addr_debug_print(DNS_DEBUG, &(dns_table[i].ipaddr)); - LWIP_DEBUGF(DNS_DEBUG, ("\n")); - return ip4_addr_get_u32(&dns_table[i].ipaddr); - } - } - - return IPADDR_NONE; -} - -#if DNS_DOES_NAME_CHECK -/** - * Compare the "dotted" name "query" with the encoded name "response" - * to make sure an answer from the DNS server matches the current dns_table - * entry (otherwise, answers might arrive late for hostname not on the list - * any more). - * - * @param query hostname (not encoded) from the dns_table - * @param response encoded hostname in the DNS response - * @return 0: names equal; 1: names differ - */ -static uint8_t -dns_compare_name(unsigned char *query, unsigned char *response) -{ - unsigned char n; - - do { - n = *response++; - /** @see RFC 1035 - 4.1.4. Message compression */ - if ((n & 0xc0) == 0xc0) { - /* Compressed name */ - break; - } else { - /* Not compressed name */ - while (n > 0) { - if ((*query) != (*response)) { - return 1; - } - ++response; - ++query; - --n; - }; - ++query; - } - } while (*response != 0); - - return 0; -} -#endif /* DNS_DOES_NAME_CHECK */ - -/** - * Walk through a compact encoded DNS name and return the end of the name. - * - * @param query encoded DNS name in the DNS server response - * @return end of the name - */ -static unsigned char * -dns_parse_name(unsigned char *query) -{ - unsigned char n; - - do { - n = *query++; - /** @see RFC 1035 - 4.1.4. Message compression */ - if ((n & 0xc0) == 0xc0) { - /* Compressed name */ - break; - } else { - /* Not compressed name */ - while (n > 0) { - ++query; - --n; - }; - } - } while (*query != 0); - - return query + 1; -} - -/** - * Send a DNS query packet. - * - * @param numdns index of the DNS server in the dns_servers table - * @param name hostname to query - * @param id index of the hostname in dns_table, used as transaction ID in the - * DNS query packet - * @return ERR_OK if packet is sent; an err_t indicating the problem otherwise - */ -static err_t -dns_send(uint8_t numdns, const char* name, uint8_t id) -{ - err_t err; - struct dns_hdr *hdr; - struct dns_query qry; - struct pbuf *p; - char *query, *nptr; - const char *pHostname; - uint8_t n; - - LWIP_DEBUGF(DNS_DEBUG, ("dns_send: dns_servers[%"U16_F"] \"%s\": request\n", - (uint16_t)(numdns), name)); - LWIP_ASSERT("dns server out of array", numdns < DNS_MAX_SERVERS); - LWIP_ASSERT("dns server has no IP address set", !ip_addr_isany(&dns_servers[numdns])); - - /* if here, we have either a new query or a retry on a previous query to process */ - p = pbuf_alloc(PBUF_TRANSPORT, SIZEOF_DNS_HDR + DNS_MAX_NAME_LENGTH + - SIZEOF_DNS_QUERY, PBUF_RAM); - if (p != NULL) { - LWIP_ASSERT("pbuf must be in one piece", p->next == NULL); - /* fill dns header */ - hdr = (struct dns_hdr*)p->payload; - memset(hdr, 0, SIZEOF_DNS_HDR); - hdr->id = htons(id); - hdr->flags1 = DNS_FLAG1_RD; - hdr->numquestions = PP_HTONS(1); - query = (char*)hdr + SIZEOF_DNS_HDR; - pHostname = name; - --pHostname; - - /* convert hostname into suitable query format. */ - do { - ++pHostname; - nptr = query; - ++query; - for(n = 0; *pHostname != '.' && *pHostname != 0; ++pHostname) { - *query = *pHostname; - ++query; - ++n; - } - *nptr = n; - } while(*pHostname != 0); - *query++='\0'; - - /* fill dns query */ - qry.type = PP_HTONS(DNS_RRTYPE_A); - qry.cls = PP_HTONS(DNS_RRCLASS_IN); - SMEMCPY(query, &qry, SIZEOF_DNS_QUERY); - - /* resize pbuf to the exact dns query */ - pbuf_realloc(p, (uint16_t)((query + SIZEOF_DNS_QUERY) - ((char*)(p->payload)))); - - /* connect to the server for faster receiving */ - udp_connect(dns_pcb, &dns_servers[numdns], DNS_SERVER_PORT); - /* send dns packet */ - err = udp_sendto(dns_pcb, p, &dns_servers[numdns], DNS_SERVER_PORT); - - /* free pbuf */ - pbuf_free(p); - } else { - err = ERR_MEM; - } - - return err; -} - -/** - * dns_check_entry() - see if pEntry has not yet been queried and, if so, sends out a query. - * Check an entry in the dns_table: - * - send out query for new entries - * - retry old pending entries on timeout (also with different servers) - * - remove completed entries from the table if their TTL has expired - * - * @param i index of the dns_table entry to check - */ -static void -dns_check_entry(uint8_t i) -{ - err_t err; - struct dns_table_entry *pEntry = &dns_table[i]; - - LWIP_ASSERT("array index out of bounds", i < DNS_TABLE_SIZE); - - switch(pEntry->state) { - - case DNS_STATE_NEW: { - /* initialize new entry */ - pEntry->state = DNS_STATE_ASKING; - pEntry->numdns = 0; - pEntry->tmr = 1; - pEntry->retries = 0; - - /* send DNS packet for this entry */ - err = dns_send(pEntry->numdns, pEntry->name, i); - if (err != ERR_OK) { - LWIP_DEBUGF(DNS_DEBUG | LWIP_DBG_LEVEL_WARNING, - ("dns_send returned error: %s\n", lwip_strerr(err))); - } - break; - } - - case DNS_STATE_ASKING: { - if (--pEntry->tmr == 0) { - if (++pEntry->retries == DNS_MAX_RETRIES) { - if ((pEntry->numdns+1numdns+1])) { - /* change of server */ - pEntry->numdns++; - pEntry->tmr = 1; - pEntry->retries = 0; - break; - } else { - LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": timeout\n", pEntry->name)); - /* call specified callback function if provided */ - if (pEntry->found) - (*pEntry->found)(pEntry->name, NULL, pEntry->arg); - /* flush this entry */ - pEntry->state = DNS_STATE_UNUSED; - pEntry->found = NULL; - break; - } - } - - /* wait longer for the next retry */ - pEntry->tmr = pEntry->retries; - - /* send DNS packet for this entry */ - err = dns_send(pEntry->numdns, pEntry->name, i); - if (err != ERR_OK) { - LWIP_DEBUGF(DNS_DEBUG | LWIP_DBG_LEVEL_WARNING, - ("dns_send returned error: %s\n", lwip_strerr(err))); - } - } - break; - } - - case DNS_STATE_DONE: { - /* if the time to live is nul */ - if (--pEntry->ttl == 0) { - LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": flush\n", pEntry->name)); - /* flush this entry */ - pEntry->state = DNS_STATE_UNUSED; - pEntry->found = NULL; - } - break; - } - case DNS_STATE_UNUSED: - /* nothing to do */ - break; - default: - LWIP_ASSERT("unknown dns_table entry state:", 0); - break; - } -} - -/** - * Call dns_check_entry for each entry in dns_table - check all entries. - */ -static void -dns_check_entries(void) -{ - uint8_t i; - - for (i = 0; i < DNS_TABLE_SIZE; ++i) { - dns_check_entry(i); - } -} - -/** - * Receive input function for DNS response packets arriving for the dns UDP pcb. - * - * @params see udp.h - */ -static void -dns_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, uint16_t port) -{ - uint16_t i; - char *pHostname; - struct dns_hdr *hdr; - struct dns_answer ans; - struct dns_table_entry *pEntry; - uint16_t nquestions, nanswers; - - LWIP_UNUSED_ARG(arg); - LWIP_UNUSED_ARG(pcb); - LWIP_UNUSED_ARG(addr); - LWIP_UNUSED_ARG(port); - - /* is the dns message too big ? */ - if (p->tot_len > DNS_MSG_SIZE) { - LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: pbuf too big\n")); - /* free pbuf and return */ - goto memerr; - } - - /* is the dns message big enough ? */ - if (p->tot_len < (SIZEOF_DNS_HDR + SIZEOF_DNS_QUERY + SIZEOF_DNS_ANSWER)) { - LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: pbuf too small\n")); - /* free pbuf and return */ - goto memerr; - } - - /* copy dns payload inside static buffer for processing */ - if (pbuf_copy_partial(p, dns_payload, p->tot_len, 0) == p->tot_len) { - /* The ID in the DNS header should be our entry into the name table. */ - hdr = (struct dns_hdr*)dns_payload; - i = htons(hdr->id); - if (i < DNS_TABLE_SIZE) { - pEntry = &dns_table[i]; - if(pEntry->state == DNS_STATE_ASKING) { - /* This entry is now completed. */ - pEntry->state = DNS_STATE_DONE; - pEntry->err = hdr->flags2 & DNS_FLAG2_ERR_MASK; - - /* We only care about the question(s) and the answers. The authrr - and the extrarr are simply discarded. */ - nquestions = htons(hdr->numquestions); - nanswers = htons(hdr->numanswers); - - /* Check for error. If so, call callback to inform. */ - if (((hdr->flags1 & DNS_FLAG1_RESPONSE) == 0) || (pEntry->err != 0) || (nquestions != 1)) { - LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": error in flags\n", pEntry->name)); - /* call callback to indicate error, clean up memory and return */ - goto responseerr; - } - -#if DNS_DOES_NAME_CHECK - /* Check if the name in the "question" part match with the name in the entry. */ - if (dns_compare_name((unsigned char *)(pEntry->name), (unsigned char *)dns_payload + SIZEOF_DNS_HDR) != 0) { - LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response not match to query\n", pEntry->name)); - /* call callback to indicate error, clean up memory and return */ - goto responseerr; - } -#endif /* DNS_DOES_NAME_CHECK */ - - /* Skip the name in the "question" part */ - pHostname = (char *) dns_parse_name((unsigned char *)dns_payload + SIZEOF_DNS_HDR) + SIZEOF_DNS_QUERY; - - while (nanswers > 0) { - /* skip answer resource record's host name */ - pHostname = (char *) dns_parse_name((unsigned char *)pHostname); - - /* Check for IP address type and Internet class. Others are discarded. */ - SMEMCPY(&ans, pHostname, SIZEOF_DNS_ANSWER); - if((ans.type == PP_HTONS(DNS_RRTYPE_A)) && (ans.cls == PP_HTONS(DNS_RRCLASS_IN)) && - (ans.len == PP_HTONS(sizeof(ip_addr_t))) ) { - /* read the answer resource record's TTL, and maximize it if needed */ - pEntry->ttl = ntohl(ans.ttl); - if (pEntry->ttl > DNS_MAX_TTL) { - pEntry->ttl = DNS_MAX_TTL; - } - /* read the IP address after answer resource record's header */ - SMEMCPY(&(pEntry->ipaddr), (pHostname+SIZEOF_DNS_ANSWER), sizeof(ip_addr_t)); - LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response = ", pEntry->name)); - ip_addr_debug_print(DNS_DEBUG, (&(pEntry->ipaddr))); - LWIP_DEBUGF(DNS_DEBUG, ("\n")); - /* call specified callback function if provided */ - if (pEntry->found) { - (*pEntry->found)(pEntry->name, &pEntry->ipaddr, pEntry->arg); - } - /* deallocate memory and return */ - goto memerr; - } else { - pHostname = pHostname + SIZEOF_DNS_ANSWER + htons(ans.len); - } - --nanswers; - } - LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": error in response\n", pEntry->name)); - /* call callback to indicate error, clean up memory and return */ - goto responseerr; - } - } - } - - /* deallocate memory and return */ - goto memerr; - -responseerr: - /* ERROR: call specified callback function with NULL as name to indicate an error */ - if (pEntry->found) { - (*pEntry->found)(pEntry->name, NULL, pEntry->arg); - } - /* flush this entry */ - pEntry->state = DNS_STATE_UNUSED; - pEntry->found = NULL; - -memerr: - /* free pbuf */ - pbuf_free(p); - return; -} - -/** - * Queues a new hostname to resolve and sends out a DNS query for that hostname - * - * @param name the hostname that is to be queried - * @param found a callback founction to be called on success, failure or timeout - * @param callback_arg argument to pass to the callback function - * @return @return a err_t return code. - */ -static err_t -dns_enqueue(const char *name, dns_found_callback found, void *callback_arg) -{ - uint8_t i; - uint8_t lseq, lseqi; - struct dns_table_entry *pEntry = NULL; - size_t namelen; - - /* search an unused entry, or the oldest one */ - lseq = lseqi = 0; - for (i = 0; i < DNS_TABLE_SIZE; ++i) { - pEntry = &dns_table[i]; - /* is it an unused entry ? */ - if (pEntry->state == DNS_STATE_UNUSED) - break; - - /* check if this is the oldest completed entry */ - if (pEntry->state == DNS_STATE_DONE) { - if ((dns_seqno - pEntry->seqno) > lseq) { - lseq = dns_seqno - pEntry->seqno; - lseqi = i; - } - } - } - - /* if we don't have found an unused entry, use the oldest completed one */ - if (i == DNS_TABLE_SIZE) { - if ((lseqi >= DNS_TABLE_SIZE) || (dns_table[lseqi].state != DNS_STATE_DONE)) { - /* no entry can't be used now, table is full */ - LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": DNS entries table is full\n", name)); - return ERR_MEM; - } else { - /* use the oldest completed one */ - i = lseqi; - pEntry = &dns_table[i]; - } - } - - /* use this entry */ - LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": use DNS entry %"U16_F"\n", name, (uint16_t)(i))); - - /* fill the entry */ - pEntry->state = DNS_STATE_NEW; - pEntry->seqno = dns_seqno++; - pEntry->found = found; - pEntry->arg = callback_arg; - namelen = LWIP_MIN(strlen(name), DNS_MAX_NAME_LENGTH-1); - MEMCPY(pEntry->name, name, namelen); - pEntry->name[namelen] = 0; - - /* force to send query without waiting timer */ - dns_check_entry(i); - - /* dns query is enqueued */ - return ERR_INPROGRESS; -} - -/** - * Resolve a hostname (string) into an IP address. - * NON-BLOCKING callback version for use with raw API! - * - * Returns immediately with one of err_t return codes: - * - ERR_OK if hostname is a valid IP address string or the host - * name is already in the local names table. - * - ERR_INPROGRESS enqueue a request to be sent to the DNS server - * for resolution if no errors are present. - * - ERR_ARG: dns client not initialized or invalid hostname - * - * @param hostname the hostname that is to be queried - * @param addr pointer to a ip_addr_t where to store the address if it is already - * cached in the dns_table (only valid if ERR_OK is returned!) - * @param found a callback function to be called on success, failure or timeout (only if - * ERR_INPROGRESS is returned!) - * @param callback_arg argument to pass to the callback function - * @return a err_t return code. - */ -err_t -dns_gethostbyname(const char *hostname, ip_addr_t *addr, dns_found_callback found, - void *callback_arg) -{ - uint32_t ipaddr; - /* not initialized or no valid server yet, or invalid addr pointer - * or invalid hostname or invalid hostname length */ - if ((dns_pcb == NULL) || (addr == NULL) || - (!hostname) || (!hostname[0]) || - (strlen(hostname) >= DNS_MAX_NAME_LENGTH)) { - return ERR_ARG; - } - -#if LWIP_HAVE_LOOPIF - if (strcmp(hostname, "localhost")==0) { - ip_addr_set_loopback(addr); - return ERR_OK; - } -#endif /* LWIP_HAVE_LOOPIF */ - - /* host name already in octet notation? set ip addr and return ERR_OK */ - ipaddr = ipaddr_addr(hostname); - if (ipaddr == IPADDR_NONE) { - /* already have this address cached? */ - ipaddr = dns_lookup(hostname); - } - if (ipaddr != IPADDR_NONE) { - ip4_addr_set_u32(addr, ipaddr); - return ERR_OK; - } - - /* queue query with specified callback */ - return dns_enqueue(hostname, found, callback_arg); -} - -#endif /* LWIP_DNS */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/init.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/init.c deleted file mode 100644 index 583a924..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/init.c +++ /dev/null @@ -1,332 +0,0 @@ -/** - * @file - * Modules initialization - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#include "lwip/init.h" -#include "lwip/stats.h" -#include "lwip/sys.h" -#include "lwip/mem.h" -#include "lwip/memp.h" -#include "lwip/pbuf.h" -#include "lwip/netif.h" -#include "lwip/sockets.h" -#include "lwip/ip.h" -#include "lwip/raw.h" -#include "lwip/udp.h" -#include "lwip/tcp_impl.h" -#include "lwip/snmp_msg.h" -#include "lwip/autoip.h" -#include "lwip/igmp.h" -#include "lwip/dns.h" -#include "lwip/lwip_timers.h" -#include "netif/etharp.h" -#include "lwip/api.h" - -/* Compile-time sanity checks for configuration errors. - * These can be done independently of LWIP_DEBUG, without penalty. - */ -#ifndef BYTE_ORDER - #error "BYTE_ORDER is not defined, you have to define it in your cc.h" -#endif -#if (!IP_SOF_BROADCAST && IP_SOF_BROADCAST_RECV) - #error "If you want to use broadcast filter per pcb on recv operations, you have to define IP_SOF_BROADCAST=1 in your lwipopts.h" -#endif -#if (!LWIP_UDP && LWIP_UDPLITE) - #error "If you want to use UDP Lite, you have to define LWIP_UDP=1 in your lwipopts.h" -#endif -#if (!LWIP_UDP && LWIP_SNMP) - #error "If you want to use SNMP, you have to define LWIP_UDP=1 in your lwipopts.h" -#endif -#if (!LWIP_UDP && LWIP_DHCP) - #error "If you want to use DHCP, you have to define LWIP_UDP=1 in your lwipopts.h" -#endif -#if (!LWIP_UDP && LWIP_IGMP) - #error "If you want to use IGMP, you have to define LWIP_UDP=1 in your lwipopts.h" -#endif -#if (!LWIP_UDP && LWIP_SNMP) - #error "If you want to use SNMP, you have to define LWIP_UDP=1 in your lwipopts.h" -#endif -#if (!LWIP_UDP && LWIP_DNS) - #error "If you want to use DNS, you have to define LWIP_UDP=1 in your lwipopts.h" -#endif -#if !MEMP_MEM_MALLOC /* MEMP_NUM_* checks are disabled when not using the pool allocator */ -#if (LWIP_ARP && ARP_QUEUEING && (MEMP_NUM_ARP_QUEUE<=0)) - #error "If you want to use ARP Queueing, you have to define MEMP_NUM_ARP_QUEUE>=1 in your lwipopts.h" -#endif -#if (LWIP_RAW && (MEMP_NUM_RAW_PCB<=0)) - #error "If you want to use RAW, you have to define MEMP_NUM_RAW_PCB>=1 in your lwipopts.h" -#endif -#if (LWIP_UDP && (MEMP_NUM_UDP_PCB<=0)) - #error "If you want to use UDP, you have to define MEMP_NUM_UDP_PCB>=1 in your lwipopts.h" -#endif -#if (LWIP_TCP && (MEMP_NUM_TCP_PCB<=0)) - #error "If you want to use TCP, you have to define MEMP_NUM_TCP_PCB>=1 in your lwipopts.h" -#endif -#if (LWIP_IGMP && (MEMP_NUM_IGMP_GROUP<=1)) - #error "If you want to use IGMP, you have to define MEMP_NUM_IGMP_GROUP>1 in your lwipopts.h" -#endif -#if ((LWIP_NETCONN || LWIP_SOCKET) && (MEMP_NUM_TCPIP_MSG_API<=0)) - #error "If you want to use Sequential API, you have to define MEMP_NUM_TCPIP_MSG_API>=1 in your lwipopts.h" -#endif -/* There must be sufficient timeouts, taking into account requirements of the subsystems. */ -#if LWIP_TIMERS && (MEMP_NUM_SYS_TIMEOUT < (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_SUPPORT)) - #error "MEMP_NUM_SYS_TIMEOUT is too low to accomodate all required timeouts" -#endif -#if (IP_REASSEMBLY && (MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS)) - #error "MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS doesn't make sense since each struct ip_reassdata must hold 2 pbufs at least!" -#endif -#endif /* !MEMP_MEM_MALLOC */ -#if (LWIP_TCP && (TCP_WND > 0xffff)) - #error "If you want to use TCP, TCP_WND must fit in an uint16_t, so, you have to reduce it in your lwipopts.h" -#endif -#if (LWIP_TCP && (TCP_SND_QUEUELEN > 0xffff)) - #error "If you want to use TCP, TCP_SND_QUEUELEN must fit in an uint16_t, so, you have to reduce it in your lwipopts.h" -#endif -#if (LWIP_TCP && (TCP_SND_QUEUELEN < 2)) - #error "TCP_SND_QUEUELEN must be at least 2 for no-copy TCP writes to work" -#endif -#if (LWIP_TCP && ((TCP_MAXRTX > 12) || (TCP_SYNMAXRTX > 12))) - #error "If you want to use TCP, TCP_MAXRTX and TCP_SYNMAXRTX must less or equal to 12 (due to tcp_backoff table), so, you have to reduce them in your lwipopts.h" -#endif -#if (LWIP_TCP && TCP_LISTEN_BACKLOG && (TCP_DEFAULT_LISTEN_BACKLOG < 0) || (TCP_DEFAULT_LISTEN_BACKLOG > 0xff)) - #error "If you want to use TCP backlog, TCP_DEFAULT_LISTEN_BACKLOG must fit into an uint8_t" -#endif -#if (LWIP_NETIF_API && (NO_SYS==1)) - #error "If you want to use NETIF API, you have to define NO_SYS=0 in your lwipopts.h" -#endif -#if ((LWIP_SOCKET || LWIP_NETCONN) && (NO_SYS==1)) - #error "If you want to use Sequential API, you have to define NO_SYS=0 in your lwipopts.h" -#endif -#if (!LWIP_NETCONN && LWIP_SOCKET) - #error "If you want to use Socket API, you have to define LWIP_NETCONN=1 in your lwipopts.h" -#endif -#if (((!LWIP_DHCP) || (!LWIP_AUTOIP)) && LWIP_DHCP_AUTOIP_COOP) - #error "If you want to use DHCP/AUTOIP cooperation mode, you have to define LWIP_DHCP=1 and LWIP_AUTOIP=1 in your lwipopts.h" -#endif -#if (((!LWIP_DHCP) || (!LWIP_ARP)) && DHCP_DOES_ARP_CHECK) - #error "If you want to use DHCP ARP checking, you have to define LWIP_DHCP=1 and LWIP_ARP=1 in your lwipopts.h" -#endif -#if (!LWIP_ARP && LWIP_AUTOIP) - #error "If you want to use AUTOIP, you have to define LWIP_ARP=1 in your lwipopts.h" -#endif -#if (LWIP_SNMP && (SNMP_CONCURRENT_REQUESTS<=0)) - #error "If you want to use SNMP, you have to define SNMP_CONCURRENT_REQUESTS>=1 in your lwipopts.h" -#endif -#if (LWIP_SNMP && (SNMP_TRAP_DESTINATIONS<=0)) - #error "If you want to use SNMP, you have to define SNMP_TRAP_DESTINATIONS>=1 in your lwipopts.h" -#endif -#if (LWIP_TCP && ((LWIP_EVENT_API && LWIP_CALLBACK_API) || (!LWIP_EVENT_API && !LWIP_CALLBACK_API))) - #error "One and exactly one of LWIP_EVENT_API and LWIP_CALLBACK_API has to be enabled in your lwipopts.h" -#endif -#if (MEM_LIBC_MALLOC && MEM_USE_POOLS) - #error "MEM_LIBC_MALLOC and MEM_USE_POOLS may not both be simultaneously enabled in your lwipopts.h" -#endif -#if (MEM_USE_POOLS && !MEMP_USE_CUSTOM_POOLS) - #error "MEM_USE_POOLS requires custom pools (MEMP_USE_CUSTOM_POOLS) to be enabled in your lwipopts.h" -#endif -#if (PBUF_POOL_BUFSIZE <= MEM_ALIGNMENT) - #error "PBUF_POOL_BUFSIZE must be greater than MEM_ALIGNMENT or the offset may take the full first pbuf" -#endif -#if (DNS_LOCAL_HOSTLIST && !DNS_LOCAL_HOSTLIST_IS_DYNAMIC && !(defined(DNS_LOCAL_HOSTLIST_INIT))) - #error "you have to define define DNS_LOCAL_HOSTLIST_INIT {{'host1', 0x123}, {'host2', 0x234}} to initialize DNS_LOCAL_HOSTLIST" -#endif -#if PPP_SUPPORT && !PPPOS_SUPPORT & !PPPOE_SUPPORT - #error "PPP_SUPPORT needs either PPPOS_SUPPORT or PPPOE_SUPPORT turned on" -#endif -#if !LWIP_ETHERNET && (LWIP_ARP || PPPOE_SUPPORT) - #error "LWIP_ETHERNET needs to be turned on for LWIP_ARP or PPPOE_SUPPORT" -#endif -#if LWIP_IGMP && !defined(LWIP_RAND) - #error "When using IGMP, LWIP_RAND() needs to be defined to a random-function returning an uint32_t random value" -#endif -#if LWIP_TCPIP_CORE_LOCKING_INPUT && !LWIP_TCPIP_CORE_LOCKING - #error "When using LWIP_TCPIP_CORE_LOCKING_INPUT, LWIP_TCPIP_CORE_LOCKING must be enabled, too" -#endif -#if LWIP_TCP && LWIP_NETIF_TX_SINGLE_PBUF && !TCP_OVERSIZE - #error "LWIP_NETIF_TX_SINGLE_PBUF needs TCP_OVERSIZE enabled to create single-pbuf TCP packets" -#endif -#if IP_FRAG && IP_FRAG_USES_STATIC_BUF && LWIP_NETIF_TX_SINGLE_PBUF - #error "LWIP_NETIF_TX_SINGLE_PBUF does not work with IP_FRAG_USES_STATIC_BUF==1 as that creates pbuf queues" -#endif -#if LWIP_NETCONN && LWIP_TCP -#if NETCONN_COPY != TCP_WRITE_FLAG_COPY - #error "NETCONN_COPY != TCP_WRITE_FLAG_COPY" -#endif -#if NETCONN_MORE != TCP_WRITE_FLAG_MORE - #error "NETCONN_MORE != TCP_WRITE_FLAG_MORE" -#endif -#endif /* LWIP_NETCONN && LWIP_TCP */ -#if LWIP_SOCKET -/* Check that the SO_* socket options and SOF_* lwIP-internal flags match */ -#if SO_ACCEPTCONN != SOF_ACCEPTCONN - #error "SO_ACCEPTCONN != SOF_ACCEPTCONN" -#endif -#if SO_REUSEADDR != SOF_REUSEADDR - #error "WARNING: SO_REUSEADDR != SOF_REUSEADDR" -#endif -#if SO_KEEPALIVE != SOF_KEEPALIVE - #error "WARNING: SO_KEEPALIVE != SOF_KEEPALIVE" -#endif -#if SO_BROADCAST != SOF_BROADCAST - #error "WARNING: SO_BROADCAST != SOF_BROADCAST" -#endif -#if SO_LINGER != SOF_LINGER - #error "WARNING: SO_LINGER != SOF_LINGER" -#endif -#endif /* LWIP_SOCKET */ - - -/* Compile-time checks for deprecated options. - */ -#ifdef MEMP_NUM_TCPIP_MSG - #error "MEMP_NUM_TCPIP_MSG option is deprecated. Remove it from your lwipopts.h." -#endif -#ifdef MEMP_NUM_API_MSG - #error "MEMP_NUM_API_MSG option is deprecated. Remove it from your lwipopts.h." -#endif -#ifdef TCP_REXMIT_DEBUG - #error "TCP_REXMIT_DEBUG option is deprecated. Remove it from your lwipopts.h." -#endif -#ifdef RAW_STATS - #error "RAW_STATS option is deprecated. Remove it from your lwipopts.h." -#endif -#ifdef ETHARP_QUEUE_FIRST - #error "ETHARP_QUEUE_FIRST option is deprecated. Remove it from your lwipopts.h." -#endif -#ifdef ETHARP_ALWAYS_INSERT - #error "ETHARP_ALWAYS_INSERT option is deprecated. Remove it from your lwipopts.h." -#endif - -#ifndef LWIP_DISABLE_TCP_SANITY_CHECKS -#define LWIP_DISABLE_TCP_SANITY_CHECKS 0 -#endif -#ifndef LWIP_DISABLE_MEMP_SANITY_CHECKS -#define LWIP_DISABLE_MEMP_SANITY_CHECKS 0 -#endif - -/* MEMP sanity checks */ -#if !LWIP_DISABLE_MEMP_SANITY_CHECKS -#if LWIP_NETCONN -#if MEMP_MEM_MALLOC -#if !MEMP_NUM_NETCONN && LWIP_SOCKET -#error "lwip_sanity_check: WARNING: MEMP_NUM_NETCONN cannot be 0 when using sockets!" -#endif -#else /* MEMP_MEM_MALLOC */ -#if MEMP_NUM_NETCONN > (MEMP_NUM_TCP_PCB+MEMP_NUM_TCP_PCB_LISTEN+MEMP_NUM_UDP_PCB+MEMP_NUM_RAW_PCB) -#error "lwip_sanity_check: WARNING: MEMP_NUM_NETCONN should be less than the sum of MEMP_NUM_{TCP,RAW,UDP}_PCB+MEMP_NUM_TCP_PCB_LISTEN. If you know what you are doing, define LWIP_DISABLE_MEMP_SANITY_CHECKS to 1 to disable this error." -#endif -#endif /* MEMP_MEM_MALLOC */ -#endif /* LWIP_NETCONN */ -#endif /* !LWIP_DISABLE_MEMP_SANITY_CHECKS */ - -/* TCP sanity checks */ -#if !LWIP_DISABLE_TCP_SANITY_CHECKS -#if LWIP_TCP -#if !MEMP_MEM_MALLOC && (MEMP_NUM_TCP_SEG < TCP_SND_QUEUELEN) - #error "lwip_sanity_check: WARNING: MEMP_NUM_TCP_SEG should be at least as big as TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." -#endif -#if TCP_SND_BUF < (2 * TCP_MSS) - #error "lwip_sanity_check: WARNING: TCP_SND_BUF must be at least as much as (2 * TCP_MSS) for things to work smoothly. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." -#endif -#if TCP_SND_QUEUELEN < (2 * (TCP_SND_BUF / TCP_MSS)) - #error "lwip_sanity_check: WARNING: TCP_SND_QUEUELEN must be at least as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." -#endif -#if TCP_SNDLOWAT >= TCP_SND_BUF - #error "lwip_sanity_check: WARNING: TCP_SNDLOWAT must be less than TCP_SND_BUF. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." -#endif -#if TCP_SNDQUEUELOWAT >= TCP_SND_QUEUELEN - #error "lwip_sanity_check: WARNING: TCP_SNDQUEUELOWAT must be less than TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." -#endif -#if !MEMP_MEM_MALLOC && (TCP_WND > (PBUF_POOL_SIZE * (PBUF_POOL_BUFSIZE - (PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN)))) - #error "lwip_sanity_check: WARNING: TCP_WND is larger than space provided by PBUF_POOL_SIZE * (PBUF_POOL_BUFSIZE - protocol headers). If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." -#endif -#if TCP_WND < TCP_MSS - #error "lwip_sanity_check: WARNING: TCP_WND is smaller than MSS. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." -#endif -#endif /* LWIP_TCP */ -#endif /* !LWIP_DISABLE_TCP_SANITY_CHECKS */ - -/** - * Perform Sanity check of user-configurable values, and initialize all modules. - */ -void -lwip_init(void) -{ - /* Modules initialization */ - stats_init(); -#if !NO_SYS - sys_init(); -#endif /* !NO_SYS */ - mem_init(); - memp_init(); - pbuf_init(); - netif_init(); -#if LWIP_SOCKET - lwip_socket_init(); -#endif /* LWIP_SOCKET */ - ip_init(); -#if LWIP_ARP - etharp_init(); -#endif /* LWIP_ARP */ -#if LWIP_RAW - raw_init(); -#endif /* LWIP_RAW */ -#if LWIP_UDP - udp_init(); -#endif /* LWIP_UDP */ -#if LWIP_TCP - tcp_init(); -#endif /* LWIP_TCP */ -#if LWIP_SNMP - snmp_init(); -#endif /* LWIP_SNMP */ -#if LWIP_AUTOIP - autoip_init(); -#endif /* LWIP_AUTOIP */ -#if LWIP_IGMP - igmp_init(); -#endif /* LWIP_IGMP */ -#if LWIP_DNS - dns_init(); -#endif /* LWIP_DNS */ - -#if LWIP_TIMERS - sys_timeouts_init(); -#endif /* LWIP_TIMERS */ -} diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/autoip.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/autoip.c deleted file mode 100644 index 8fd6277..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/autoip.c +++ /dev/null @@ -1,528 +0,0 @@ -/** - * @file - * AutoIP Automatic LinkLocal IP Configuration - * - */ - -/* - * - * Copyright (c) 2007 Dominik Spies - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Dominik Spies - * - * This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform - * with RFC 3927. - * - * - * Please coordinate changes and requests with Dominik Spies - * - */ - -/******************************************************************************* - * USAGE: - * - * define LWIP_AUTOIP 1 in your lwipopts.h - * - * If you don't use tcpip.c (so, don't call, you don't call tcpip_init): - * - First, call autoip_init(). - * - call autoip_tmr() all AUTOIP_TMR_INTERVAL msces, - * that should be defined in autoip.h. - * I recommend a value of 100. The value must divide 1000 with a remainder almost 0. - * Possible values are 1000, 500, 333, 250, 200, 166, 142, 125, 111, 100 .... - * - * Without DHCP: - * - Call autoip_start() after netif_add(). - * - * With DHCP: - * - define LWIP_DHCP_AUTOIP_COOP 1 in your lwipopts.h. - * - Configure your DHCP Client. - * - */ - -#include "lwip/opt.h" - -#if LWIP_AUTOIP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/mem.h" -#include "lwip/udp.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/autoip.h" -#include "netif/etharp.h" - -#include -#include - -/* 169.254.0.0 */ -#define AUTOIP_NET 0xA9FE0000 -/* 169.254.1.0 */ -#define AUTOIP_RANGE_START (AUTOIP_NET | 0x0100) -/* 169.254.254.255 */ -#define AUTOIP_RANGE_END (AUTOIP_NET | 0xFEFF) - - -/** Pseudo random macro based on netif informations. - * You could use "rand()" from the C Library if you define LWIP_AUTOIP_RAND in lwipopts.h */ -#ifndef LWIP_AUTOIP_RAND -#define LWIP_AUTOIP_RAND(netif) ( (((uint32_t)((netif->hwaddr[5]) & 0xff) << 24) | \ - ((uint32_t)((netif->hwaddr[3]) & 0xff) << 16) | \ - ((uint32_t)((netif->hwaddr[2]) & 0xff) << 8) | \ - ((uint32_t)((netif->hwaddr[4]) & 0xff))) + \ - (netif->autoip?netif->autoip->tried_llipaddr:0)) -#endif /* LWIP_AUTOIP_RAND */ - -/** - * Macro that generates the initial IP address to be tried by AUTOIP. - * If you want to override this, define it to something else in lwipopts.h. - */ -#ifndef LWIP_AUTOIP_CREATE_SEED_ADDR -#define LWIP_AUTOIP_CREATE_SEED_ADDR(netif) \ - htonl(AUTOIP_RANGE_START + ((uint32_t)(((uint8_t)(netif->hwaddr[4])) | \ - ((uint32_t)((uint8_t)(netif->hwaddr[5]))) << 8))) -#endif /* LWIP_AUTOIP_CREATE_SEED_ADDR */ - -/* static functions */ -static void autoip_handle_arp_conflict(struct netif *netif); - -/* creates a pseudo random LL IP-Address for a network interface */ -static void autoip_create_addr(struct netif *netif, ip_addr_t *ipaddr); - -/* sends an ARP probe */ -static err_t autoip_arp_probe(struct netif *netif); - -/* sends an ARP announce */ -static err_t autoip_arp_announce(struct netif *netif); - -/* configure interface for use with current LL IP-Address */ -static err_t autoip_bind(struct netif *netif); - -/* start sending probes for llipaddr */ -static void autoip_start_probing(struct netif *netif); - - -/** Set a statically allocated struct autoip to work with. - * Using this prevents autoip_start to allocate it using mem_malloc. - * - * @param netif the netif for which to set the struct autoip - * @param dhcp (uninitialised) dhcp struct allocated by the application - */ -void -autoip_set_struct(struct netif *netif, struct autoip *autoip) -{ - LWIP_ASSERT("netif != NULL", netif != NULL); - LWIP_ASSERT("autoip != NULL", autoip != NULL); - LWIP_ASSERT("netif already has a struct autoip set", netif->autoip == NULL); - - /* clear data structure */ - memset(autoip, 0, sizeof(struct autoip)); - /* autoip->state = AUTOIP_STATE_OFF; */ - netif->autoip = autoip; -} - -/** Restart AutoIP client and check the next address (conflict detected) - * - * @param netif The netif under AutoIP control - */ -static void -autoip_restart(struct netif *netif) -{ - netif->autoip->tried_llipaddr++; - autoip_start(netif); -} - -/** - * Handle a IP address conflict after an ARP conflict detection - */ -static void -autoip_handle_arp_conflict(struct netif *netif) -{ - /* Somehow detect if we are defending or retreating */ - unsigned char defend = 1; /* tbd */ - - if (defend) { - if (netif->autoip->lastconflict > 0) { - /* retreat, there was a conflicting ARP in the last - * DEFEND_INTERVAL seconds - */ - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("autoip_handle_arp_conflict(): we are defending, but in DEFEND_INTERVAL, retreating\n")); - - /* TODO: close all TCP sessions */ - autoip_restart(netif); - } else { - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("autoip_handle_arp_conflict(): we are defend, send ARP Announce\n")); - autoip_arp_announce(netif); - netif->autoip->lastconflict = DEFEND_INTERVAL * AUTOIP_TICKS_PER_SECOND; - } - } else { - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("autoip_handle_arp_conflict(): we do not defend, retreating\n")); - /* TODO: close all TCP sessions */ - autoip_restart(netif); - } -} - -/** - * Create an IP-Address out of range 169.254.1.0 to 169.254.254.255 - * - * @param netif network interface on which create the IP-Address - * @param ipaddr ip address to initialize - */ -static void -autoip_create_addr(struct netif *netif, ip_addr_t *ipaddr) -{ - /* Here we create an IP-Address out of range 169.254.1.0 to 169.254.254.255 - * compliant to RFC 3927 Section 2.1 - * We have 254 * 256 possibilities */ - - uint32_t addr = ntohl(LWIP_AUTOIP_CREATE_SEED_ADDR(netif)); - addr += netif->autoip->tried_llipaddr; - addr = AUTOIP_NET | (addr & 0xffff); - /* Now, 169.254.0.0 <= addr <= 169.254.255.255 */ - - if (addr < AUTOIP_RANGE_START) { - addr += AUTOIP_RANGE_END - AUTOIP_RANGE_START + 1; - } - if (addr > AUTOIP_RANGE_END) { - addr -= AUTOIP_RANGE_END - AUTOIP_RANGE_START + 1; - } - LWIP_ASSERT("AUTOIP address not in range", (addr >= AUTOIP_RANGE_START) && - (addr <= AUTOIP_RANGE_END)); - ip4_addr_set_u32(ipaddr, htonl(addr)); - - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("autoip_create_addr(): tried_llipaddr=%"U16_F", %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - (uint16_t)(netif->autoip->tried_llipaddr), ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), - ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr))); -} - -/** - * Sends an ARP probe from a network interface - * - * @param netif network interface used to send the probe - */ -static err_t -autoip_arp_probe(struct netif *netif) -{ - return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast, - (struct eth_addr *)netif->hwaddr, IP_ADDR_ANY, ðzero, - &netif->autoip->llipaddr, ARP_REQUEST); -} - -/** - * Sends an ARP announce from a network interface - * - * @param netif network interface used to send the announce - */ -static err_t -autoip_arp_announce(struct netif *netif) -{ - return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast, - (struct eth_addr *)netif->hwaddr, &netif->autoip->llipaddr, ðzero, - &netif->autoip->llipaddr, ARP_REQUEST); -} - -/** - * Configure interface for use with current LL IP-Address - * - * @param netif network interface to configure with current LL IP-Address - */ -static err_t -autoip_bind(struct netif *netif) -{ - struct autoip *autoip = netif->autoip; - ip_addr_t sn_mask, gw_addr; - - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, - ("autoip_bind(netif=%p) %c%c%"U16_F" %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - (void*)netif, netif->name[0], netif->name[1], (uint16_t)netif->num, - ip4_addr1_16(&autoip->llipaddr), ip4_addr2_16(&autoip->llipaddr), - ip4_addr3_16(&autoip->llipaddr), ip4_addr4_16(&autoip->llipaddr))); - - IP4_ADDR(&sn_mask, 255, 255, 0, 0); - IP4_ADDR(&gw_addr, 0, 0, 0, 0); - - netif_set_ipaddr(netif, &autoip->llipaddr); - netif_set_netmask(netif, &sn_mask); - netif_set_gw(netif, &gw_addr); - - /* bring the interface up */ - netif_set_up(netif); - - return ERR_OK; -} - -/** - * Start AutoIP client - * - * @param netif network interface on which start the AutoIP client - */ -err_t -autoip_start(struct netif *netif) -{ - struct autoip *autoip = netif->autoip; - err_t result = ERR_OK; - - if (netif_is_up(netif)) { - netif_set_down(netif); - } - - /* Set IP-Address, Netmask and Gateway to 0 to make sure that - * ARP Packets are formed correctly - */ - ip_addr_set_zero(&netif->ip_addr); - ip_addr_set_zero(&netif->netmask); - ip_addr_set_zero(&netif->gw); - - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("autoip_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], - netif->name[1], (uint16_t)netif->num)); - if (autoip == NULL) { - /* no AutoIP client attached yet? */ - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, - ("autoip_start(): starting new AUTOIP client\n")); - autoip = (struct autoip *)mem_malloc(sizeof(struct autoip)); - if (autoip == NULL) { - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, - ("autoip_start(): could not allocate autoip\n")); - return ERR_MEM; - } - memset(autoip, 0, sizeof(struct autoip)); - /* store this AutoIP client in the netif */ - netif->autoip = autoip; - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_start(): allocated autoip")); - } else { - autoip->state = AUTOIP_STATE_OFF; - autoip->ttw = 0; - autoip->sent_num = 0; - ip_addr_set_zero(&autoip->llipaddr); - autoip->lastconflict = 0; - } - - autoip_create_addr(netif, &(autoip->llipaddr)); - autoip_start_probing(netif); - - return result; -} - -static void -autoip_start_probing(struct netif *netif) -{ - struct autoip *autoip = netif->autoip; - - autoip->state = AUTOIP_STATE_PROBING; - autoip->sent_num = 0; - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("autoip_start_probing(): changing state to PROBING: %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - ip4_addr1_16(&netif->autoip->llipaddr), ip4_addr2_16(&netif->autoip->llipaddr), - ip4_addr3_16(&netif->autoip->llipaddr), ip4_addr4_16(&netif->autoip->llipaddr))); - - /* time to wait to first probe, this is randomly - * choosen out of 0 to PROBE_WAIT seconds. - * compliant to RFC 3927 Section 2.2.1 - */ - autoip->ttw = (uint16_t)(LWIP_AUTOIP_RAND(netif) % (PROBE_WAIT * AUTOIP_TICKS_PER_SECOND)); - - /* - * if we tried more then MAX_CONFLICTS we must limit our rate for - * accquiring and probing address - * compliant to RFC 3927 Section 2.2.1 - */ - if (autoip->tried_llipaddr > MAX_CONFLICTS) { - autoip->ttw = RATE_LIMIT_INTERVAL * AUTOIP_TICKS_PER_SECOND; - } -} - -/** - * Handle a possible change in the network configuration. - * - * If there is an AutoIP address configured, take the interface down - * and begin probing with the same address. - */ -void -autoip_network_changed(struct netif *netif) -{ - if (netif->autoip && netif->autoip->state != AUTOIP_STATE_OFF) { - netif_set_down(netif); - autoip_start_probing(netif); - } -} - -/** - * Stop AutoIP client - * - * @param netif network interface on which stop the AutoIP client - */ -err_t -autoip_stop(struct netif *netif) -{ - netif->autoip->state = AUTOIP_STATE_OFF; - netif_set_down(netif); - return ERR_OK; -} - -/** - * Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds - */ -void -autoip_tmr() -{ - struct netif *netif = netif_list; - /* loop through netif's */ - while (netif != NULL) { - /* only act on AutoIP configured interfaces */ - if (netif->autoip != NULL) { - if (netif->autoip->lastconflict > 0) { - netif->autoip->lastconflict--; - } - - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, - ("autoip_tmr() AutoIP-State: %"U16_F", ttw=%"U16_F"\n", - (uint16_t)(netif->autoip->state), netif->autoip->ttw)); - - switch(netif->autoip->state) { - case AUTOIP_STATE_PROBING: - if (netif->autoip->ttw > 0) { - netif->autoip->ttw--; - } else { - if (netif->autoip->sent_num >= PROBE_NUM) { - netif->autoip->state = AUTOIP_STATE_ANNOUNCING; - netif->autoip->sent_num = 0; - netif->autoip->ttw = ANNOUNCE_WAIT * AUTOIP_TICKS_PER_SECOND; - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("autoip_tmr(): changing state to ANNOUNCING: %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - ip4_addr1_16(&netif->autoip->llipaddr), ip4_addr2_16(&netif->autoip->llipaddr), - ip4_addr3_16(&netif->autoip->llipaddr), ip4_addr4_16(&netif->autoip->llipaddr))); - } else { - autoip_arp_probe(netif); - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, - ("autoip_tmr() PROBING Sent Probe\n")); - netif->autoip->sent_num++; - /* calculate time to wait to next probe */ - netif->autoip->ttw = (uint16_t)((LWIP_AUTOIP_RAND(netif) % - ((PROBE_MAX - PROBE_MIN) * AUTOIP_TICKS_PER_SECOND) ) + - PROBE_MIN * AUTOIP_TICKS_PER_SECOND); - } - } - break; - - case AUTOIP_STATE_ANNOUNCING: - if (netif->autoip->ttw > 0) { - netif->autoip->ttw--; - } else { - if (netif->autoip->sent_num == 0) { - /* We are here the first time, so we waited ANNOUNCE_WAIT seconds - * Now we can bind to an IP address and use it. - * - * autoip_bind calls netif_set_up. This triggers a gratuitous ARP - * which counts as an announcement. - */ - autoip_bind(netif); - } else { - autoip_arp_announce(netif); - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, - ("autoip_tmr() ANNOUNCING Sent Announce\n")); - } - netif->autoip->ttw = ANNOUNCE_INTERVAL * AUTOIP_TICKS_PER_SECOND; - netif->autoip->sent_num++; - - if (netif->autoip->sent_num >= ANNOUNCE_NUM) { - netif->autoip->state = AUTOIP_STATE_BOUND; - netif->autoip->sent_num = 0; - netif->autoip->ttw = 0; - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("autoip_tmr(): changing state to BOUND: %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - ip4_addr1_16(&netif->autoip->llipaddr), ip4_addr2_16(&netif->autoip->llipaddr), - ip4_addr3_16(&netif->autoip->llipaddr), ip4_addr4_16(&netif->autoip->llipaddr))); - } - } - break; - } - } - /* proceed to next network interface */ - netif = netif->next; - } -} - -/** - * Handles every incoming ARP Packet, called by etharp_arp_input. - * - * @param netif network interface to use for autoip processing - * @param hdr Incoming ARP packet - */ -void -autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr) -{ - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_arp_reply()\n")); - if ((netif->autoip != NULL) && (netif->autoip->state != AUTOIP_STATE_OFF)) { - /* when ip.src == llipaddr && hw.src != netif->hwaddr - * - * when probing ip.dst == llipaddr && hw.src != netif->hwaddr - * we have a conflict and must solve it - */ - ip_addr_t sipaddr, dipaddr; - struct eth_addr netifaddr; - ETHADDR16_COPY(netifaddr.addr, netif->hwaddr); - - /* Copy struct ip_addr2 to aligned ip_addr, to support compilers without - * structure packing (not using structure copy which breaks strict-aliasing rules). - */ - IPADDR2_COPY(&sipaddr, &hdr->sipaddr); - IPADDR2_COPY(&dipaddr, &hdr->dipaddr); - - if ((netif->autoip->state == AUTOIP_STATE_PROBING) || - ((netif->autoip->state == AUTOIP_STATE_ANNOUNCING) && - (netif->autoip->sent_num == 0))) { - /* RFC 3927 Section 2.2.1: - * from beginning to after ANNOUNCE_WAIT - * seconds we have a conflict if - * ip.src == llipaddr OR - * ip.dst == llipaddr && hw.src != own hwaddr - */ - if ((ip_addr_cmp(&sipaddr, &netif->autoip->llipaddr)) || - (ip_addr_cmp(&dipaddr, &netif->autoip->llipaddr) && - !eth_addr_cmp(&netifaddr, &hdr->shwaddr))) { - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, - ("autoip_arp_reply(): Probe Conflict detected\n")); - autoip_restart(netif); - } - } else { - /* RFC 3927 Section 2.5: - * in any state we have a conflict if - * ip.src == llipaddr && hw.src != own hwaddr - */ - if (ip_addr_cmp(&sipaddr, &netif->autoip->llipaddr) && - !eth_addr_cmp(&netifaddr, &hdr->shwaddr)) { - LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, - ("autoip_arp_reply(): Conflicting ARP-Packet detected\n")); - autoip_handle_arp_conflict(netif); - } - } - } -} - -#endif /* LWIP_AUTOIP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/icmp.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/icmp.c deleted file mode 100644 index 556ffb7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/icmp.c +++ /dev/null @@ -1,336 +0,0 @@ -/** - * @file - * ICMP - Internet Control Message Protocol - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -/* Some ICMP messages should be passed to the transport protocols. This - is not implemented. */ - -#include "lwip/opt.h" - -#if LWIP_ICMP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/icmp.h" -#include "lwip/inet_chksum.h" -#include "lwip/ip.h" -#include "lwip/def.h" -#include "lwip/stats.h" -#include "lwip/snmp.h" - -#include - -/** Small optimization: set to 0 if incoming PBUF_POOL pbuf always can be - * used to modify and send a response packet (and to 1 if this is not the case, - * e.g. when link header is stripped of when receiving) */ -#ifndef LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN -#define LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN 1 -#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ - -/* The amount of data from the original packet to return in a dest-unreachable */ -#define ICMP_DEST_UNREACH_DATASIZE 8 - -static void icmp_send_response(struct pbuf *p, uint8_t type, uint8_t code); - -/** - * Processes ICMP input packets, called from ip_input(). - * - * Currently only processes icmp echo requests and sends - * out the echo response. - * - * @param p the icmp echo request packet, p->payload pointing to the ip header - * @param inp the netif on which this packet was received - */ -void -icmp_input(struct pbuf *p, struct netif *inp) -{ - uint8_t type; - struct icmp_echo_hdr *iecho; - struct ip_hdr *iphdr; - int16_t hlen; - - ICMP_STATS_INC(icmp.recv); - snmp_inc_icmpinmsgs(); - - - iphdr = (struct ip_hdr *)p->payload; - hlen = IPH_HL(iphdr) * 4; - if (pbuf_header(p, -hlen) || (p->tot_len < sizeof(uint16_t)*2)) { - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: short ICMP (%"U16_F" bytes) received\n", p->tot_len)); - goto lenerr; - } - - type = *((uint8_t *)p->payload); -#if defined(LWIP_DEBUG) && (LWIP_DEBUG != 0) - uint8_t code = *(((uint8_t *)p->payload)+1); -#endif /* LWIP_DEBUG */ - switch (type) { - case ICMP_ER: - /* This is OK, echo reply might have been parsed by a raw PCB - (as obviously, an echo request has been sent, too). */ - break; - case ICMP_ECHO: -#if !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING - { - int accepted = 1; -#if !LWIP_MULTICAST_PING - /* multicast destination address? */ - if (ip_addr_ismulticast(¤t_iphdr_dest)) { - accepted = 0; - } -#endif /* LWIP_MULTICAST_PING */ -#if !LWIP_BROADCAST_PING - /* broadcast destination address? */ - if (ip_addr_isbroadcast(¤t_iphdr_dest, inp)) { - accepted = 0; - } -#endif /* LWIP_BROADCAST_PING */ - /* broadcast or multicast destination address not acceptd? */ - if (!accepted) { - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: Not echoing to multicast or broadcast pings\n")); - ICMP_STATS_INC(icmp.err); - pbuf_free(p); - return; - } - } -#endif /* !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING */ - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ping\n")); - if (p->tot_len < sizeof(struct icmp_echo_hdr)) { - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: bad ICMP echo received\n")); - goto lenerr; - } - if (inet_chksum_pbuf(p) != 0) { - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: checksum failed for received ICMP echo\n")); - pbuf_free(p); - ICMP_STATS_INC(icmp.chkerr); - snmp_inc_icmpinerrors(); - return; - } -#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN - if (pbuf_header(p, (PBUF_IP_HLEN + PBUF_LINK_HLEN))) { - /* p is not big enough to contain link headers - * allocate a new one and copy p into it - */ - struct pbuf *r; - /* switch p->payload to ip header */ - if (pbuf_header(p, hlen)) { - LWIP_ASSERT("icmp_input: moving p->payload to ip header failed\n", 0); - goto memerr; - } - /* allocate new packet buffer with space for link headers */ - r = pbuf_alloc(PBUF_LINK, p->tot_len, PBUF_RAM); - if (r == NULL) { - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: allocating new pbuf failed\n")); - goto memerr; - } - LWIP_ASSERT("check that first pbuf can hold struct the ICMP header", - (r->len >= hlen + sizeof(struct icmp_echo_hdr))); - /* copy the whole packet including ip header */ - if (pbuf_copy(r, p) != ERR_OK) { - LWIP_ASSERT("icmp_input: copying to new pbuf failed\n", 0); - goto memerr; - } - iphdr = (struct ip_hdr *)r->payload; - /* switch r->payload back to icmp header */ - if (pbuf_header(r, -hlen)) { - LWIP_ASSERT("icmp_input: restoring original p->payload failed\n", 0); - goto memerr; - } - /* free the original p */ - pbuf_free(p); - /* we now have an identical copy of p that has room for link headers */ - p = r; - } else { - /* restore p->payload to point to icmp header */ - if (pbuf_header(p, -(int16_t)(PBUF_IP_HLEN + PBUF_LINK_HLEN))) { - LWIP_ASSERT("icmp_input: restoring original p->payload failed\n", 0); - goto memerr; - } - } -#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ - /* At this point, all checks are OK. */ - /* We generate an answer by switching the dest and src ip addresses, - * setting the icmp type to ECHO_RESPONSE and updating the checksum. */ - iecho = (struct icmp_echo_hdr *)p->payload; - ip_addr_copy(iphdr->src, *ip_current_dest_addr()); - ip_addr_copy(iphdr->dest, *ip_current_src_addr()); - ICMPH_TYPE_SET(iecho, ICMP_ER); -#if CHECKSUM_GEN_ICMP - /* adjust the checksum */ - if (iecho->chksum >= PP_HTONS(0xffffU - (ICMP_ECHO << 8))) { - iecho->chksum += PP_HTONS(ICMP_ECHO << 8) + 1; - } else { - iecho->chksum += PP_HTONS(ICMP_ECHO << 8); - } -#else /* CHECKSUM_GEN_ICMP */ - iecho->chksum = 0; -#endif /* CHECKSUM_GEN_ICMP */ - - /* Set the correct TTL and recalculate the header checksum. */ - IPH_TTL_SET(iphdr, ICMP_TTL); - IPH_CHKSUM_SET(iphdr, 0); -#if CHECKSUM_GEN_IP - IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN)); -#endif /* CHECKSUM_GEN_IP */ - - ICMP_STATS_INC(icmp.xmit); - /* increase number of messages attempted to send */ - snmp_inc_icmpoutmsgs(); - /* increase number of echo replies attempted to send */ - snmp_inc_icmpoutechoreps(); - - if(pbuf_header(p, hlen)) { - LWIP_ASSERT("Can't move over header in packet", 0); - } else { - err_t ret; - /* send an ICMP packet, src addr is the dest addr of the curren packet */ - ret = ip_output_if(p, ip_current_dest_addr(), IP_HDRINCL, - ICMP_TTL, 0, IP_PROTO_ICMP, inp); - if (ret != ERR_OK) { - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ip_output_if returned an error: %c.\n", ret)); - } - } - break; - default: - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ICMP type %"S16_F" code %"S16_F" not supported.\n", - (int16_t)type, (int16_t)code)); - ICMP_STATS_INC(icmp.proterr); - ICMP_STATS_INC(icmp.drop); - } - pbuf_free(p); - return; -lenerr: - pbuf_free(p); - ICMP_STATS_INC(icmp.lenerr); - snmp_inc_icmpinerrors(); - return; -#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN -memerr: - pbuf_free(p); - ICMP_STATS_INC(icmp.err); - snmp_inc_icmpinerrors(); - return; -#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ -} - -/** - * Send an icmp 'destination unreachable' packet, called from ip_input() if - * the transport layer protocol is unknown and from udp_input() if the local - * port is not bound. - * - * @param p the input packet for which the 'unreachable' should be sent, - * p->payload pointing to the IP header - * @param t type of the 'unreachable' packet - */ -void -icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t) -{ - icmp_send_response(p, ICMP_DUR, t); -} - -#if IP_FORWARD || IP_REASSEMBLY -/** - * Send a 'time exceeded' packet, called from ip_forward() if TTL is 0. - * - * @param p the input packet for which the 'time exceeded' should be sent, - * p->payload pointing to the IP header - * @param t type of the 'time exceeded' packet - */ -void -icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t) -{ - icmp_send_response(p, ICMP_TE, t); -} - -#endif /* IP_FORWARD || IP_REASSEMBLY */ - -/** - * Send an icmp packet in response to an incoming packet. - * - * @param p the input packet for which the 'unreachable' should be sent, - * p->payload pointing to the IP header - * @param type Type of the ICMP header - * @param code Code of the ICMP header - */ -static void -icmp_send_response(struct pbuf *p, uint8_t type, uint8_t code) -{ - struct pbuf *q; - struct ip_hdr *iphdr; - /* we can use the echo header here */ - struct icmp_echo_hdr *icmphdr; - ip_addr_t iphdr_src; - - /* ICMP header + IP header + 8 bytes of data */ - q = pbuf_alloc(PBUF_IP, sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE, - PBUF_RAM); - if (q == NULL) { - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded: failed to allocate pbuf for ICMP packet.\n")); - return; - } - LWIP_ASSERT("check that first pbuf can hold icmp message", - (q->len >= (sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE))); - - iphdr = (struct ip_hdr *)p->payload; - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded from ")); - ip_addr_debug_print(ICMP_DEBUG, &(iphdr->src)); - LWIP_DEBUGF(ICMP_DEBUG, (" to ")); - ip_addr_debug_print(ICMP_DEBUG, &(iphdr->dest)); - LWIP_DEBUGF(ICMP_DEBUG, ("\n")); - - icmphdr = (struct icmp_echo_hdr *)q->payload; - icmphdr->type = type; - icmphdr->code = code; - icmphdr->id = 0; - icmphdr->seqno = 0; - - /* copy fields from original packet */ - SMEMCPY((uint8_t *)q->payload + sizeof(struct icmp_echo_hdr), (uint8_t *)p->payload, - IP_HLEN + ICMP_DEST_UNREACH_DATASIZE); - - /* calculate checksum */ - icmphdr->chksum = 0; - icmphdr->chksum = inet_chksum(icmphdr, q->len); - ICMP_STATS_INC(icmp.xmit); - /* increase number of messages attempted to send */ - snmp_inc_icmpoutmsgs(); - /* increase number of destination unreachable messages attempted to send */ - snmp_inc_icmpouttimeexcds(); - ip_addr_copy(iphdr_src, iphdr->src); - ip_output(q, NULL, &iphdr_src, ICMP_TTL, 0, IP_PROTO_ICMP); - pbuf_free(q); -} - -#endif /* LWIP_ICMP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/igmp.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/igmp.c deleted file mode 100644 index 5a12d6e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/igmp.c +++ /dev/null @@ -1,805 +0,0 @@ -/** - * @file - * IGMP - Internet Group Management Protocol - * - */ - -/* - * Copyright (c) 2002 CITEL Technologies Ltd. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of CITEL Technologies Ltd nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY CITEL TECHNOLOGIES AND CONTRIBUTORS ``AS IS'' - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL CITEL TECHNOLOGIES OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is a contribution to the lwIP TCP/IP stack. - * The Swedish Institute of Computer Science and Adam Dunkels - * are specifically granted permission to redistribute this - * source code. -*/ - -/*------------------------------------------------------------- -Note 1) -Although the rfc requires V1 AND V2 capability -we will only support v2 since now V1 is very old (August 1989) -V1 can be added if required - -a debug print and statistic have been implemented to -show this up. -------------------------------------------------------------- -------------------------------------------------------------- -Note 2) -A query for a specific group address (as opposed to ALLHOSTS) -has now been implemented as I am unsure if it is required - -a debug print and statistic have been implemented to -show this up. -------------------------------------------------------------- -------------------------------------------------------------- -Note 3) -The router alert rfc 2113 is implemented in outgoing packets -but not checked rigorously incoming -------------------------------------------------------------- -Steve Reynolds -------------------------------------------------------------*/ - -/*----------------------------------------------------------------------------- - * RFC 988 - Host extensions for IP multicasting - V0 - * RFC 1054 - Host extensions for IP multicasting - - * RFC 1112 - Host extensions for IP multicasting - V1 - * RFC 2236 - Internet Group Management Protocol, Version 2 - V2 <- this code is based on this RFC (it's the "de facto" standard) - * RFC 3376 - Internet Group Management Protocol, Version 3 - V3 - * RFC 4604 - Using Internet Group Management Protocol Version 3... - V3+ - * RFC 2113 - IP Router Alert Option - - *----------------------------------------------------------------------------*/ - -/*----------------------------------------------------------------------------- - * Includes - *----------------------------------------------------------------------------*/ - -#include "lwip/opt.h" - -#if LWIP_IGMP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/igmp.h" -#include "lwip/debug.h" -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/ip.h" -#include "lwip/inet_chksum.h" -#include "lwip/netif.h" -#include "lwip/icmp.h" -#include "lwip/udp.h" -#include "lwip/tcp.h" -#include "lwip/stats.h" - -#include "string.h" - -/* - * IGMP constants - */ -#define IGMP_TTL 1 -#define IGMP_MINLEN 8 -#define ROUTER_ALERT 0x9404U -#define ROUTER_ALERTLEN 4 - -/* - * IGMP message types, including version number. - */ -#define IGMP_MEMB_QUERY 0x11 /* Membership query */ -#define IGMP_V1_MEMB_REPORT 0x12 /* Ver. 1 membership report */ -#define IGMP_V2_MEMB_REPORT 0x16 /* Ver. 2 membership report */ -#define IGMP_LEAVE_GROUP 0x17 /* Leave-group message */ - -/* Group membership states */ -#define IGMP_GROUP_NON_MEMBER 0 -#define IGMP_GROUP_DELAYING_MEMBER 1 -#define IGMP_GROUP_IDLE_MEMBER 2 - -/** - * IGMP packet format. - */ -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct igmp_msg { - PACK_STRUCT_FIELD(uint8_t igmp_msgtype); - PACK_STRUCT_FIELD(uint8_t igmp_maxresp); - PACK_STRUCT_FIELD(uint16_t igmp_checksum); - PACK_STRUCT_FIELD(ip_addr_p_t igmp_group_address); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - - -static struct igmp_group *igmp_lookup_group(struct netif *ifp, ip_addr_t *addr); -static err_t igmp_remove_group(struct igmp_group *group); -static void igmp_timeout( struct igmp_group *group); -static void igmp_start_timer(struct igmp_group *group, uint8_t max_time); -static void igmp_delaying_member(struct igmp_group *group, uint8_t maxresp); -static err_t igmp_ip_output_if(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, struct netif *netif); -static void igmp_send(struct igmp_group *group, uint8_t type); - - -static struct igmp_group* igmp_group_list; -static ip_addr_t allsystems; -static ip_addr_t allrouters; - - -/** - * Initialize the IGMP module - */ -void -igmp_init(void) -{ - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_init: initializing\n")); - - IP4_ADDR(&allsystems, 224, 0, 0, 1); - IP4_ADDR(&allrouters, 224, 0, 0, 2); -} - -#ifdef LWIP_DEBUG -/** - * Dump global IGMP groups list - */ -void -igmp_dump_group_list() -{ - struct igmp_group *group = igmp_group_list; - - while (group != NULL) { - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_dump_group_list: [%"U32_F"] ", (uint32_t)(group->group_state))); - ip_addr_debug_print(IGMP_DEBUG, &group->group_address); - LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", group->netif)); - group = group->next; - } - LWIP_DEBUGF(IGMP_DEBUG, ("\n")); -} -#else -#define igmp_dump_group_list() -#endif /* LWIP_DEBUG */ - -/** - * Start IGMP processing on interface - * - * @param netif network interface on which start IGMP processing - */ -err_t -igmp_start(struct netif *netif) -{ - struct igmp_group* group; - - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_start: starting IGMP processing on if %p\n", netif)); - - group = igmp_lookup_group(netif, &allsystems); - - if (group != NULL) { - group->group_state = IGMP_GROUP_IDLE_MEMBER; - group->use++; - - /* Allow the igmp messages at the MAC level */ - if (netif->igmp_mac_filter != NULL) { - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_start: igmp_mac_filter(ADD ")); - ip_addr_debug_print(IGMP_DEBUG, &allsystems); - LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); - netif->igmp_mac_filter(netif, &allsystems, IGMP_ADD_MAC_FILTER); - } - - return ERR_OK; - } - - return ERR_MEM; -} - -/** - * Stop IGMP processing on interface - * - * @param netif network interface on which stop IGMP processing - */ -err_t -igmp_stop(struct netif *netif) -{ - struct igmp_group *group = igmp_group_list; - struct igmp_group *prev = NULL; - struct igmp_group *next; - - /* look for groups joined on this interface further down the list */ - while (group != NULL) { - next = group->next; - /* is it a group joined on this interface? */ - if (group->netif == netif) { - /* is it the first group of the list? */ - if (group == igmp_group_list) { - igmp_group_list = next; - } - /* is there a "previous" group defined? */ - if (prev != NULL) { - prev->next = next; - } - /* disable the group at the MAC level */ - if (netif->igmp_mac_filter != NULL) { - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_stop: igmp_mac_filter(DEL ")); - ip_addr_debug_print(IGMP_DEBUG, &group->group_address); - LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); - netif->igmp_mac_filter(netif, &(group->group_address), IGMP_DEL_MAC_FILTER); - } - /* free group */ - memp_free(MEMP_IGMP_GROUP, group); - } else { - /* change the "previous" */ - prev = group; - } - /* move to "next" */ - group = next; - } - return ERR_OK; -} - -/** - * Report IGMP memberships for this interface - * - * @param netif network interface on which report IGMP memberships - */ -void -igmp_report_groups(struct netif *netif) -{ - struct igmp_group *group = igmp_group_list; - - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_report_groups: sending IGMP reports on if %p\n", netif)); - - while (group != NULL) { - if (group->netif == netif) { - igmp_delaying_member(group, IGMP_JOIN_DELAYING_MEMBER_TMR); - } - group = group->next; - } -} - -/** - * Search for a group in the global igmp_group_list - * - * @param ifp the network interface for which to look - * @param addr the group ip address to search for - * @return a struct igmp_group* if the group has been found, - * NULL if the group wasn't found. - */ -struct igmp_group * -igmp_lookfor_group(struct netif *ifp, ip_addr_t *addr) -{ - struct igmp_group *group = igmp_group_list; - - while (group != NULL) { - if ((group->netif == ifp) && (ip_addr_cmp(&(group->group_address), addr))) { - return group; - } - group = group->next; - } - - /* to be clearer, we return NULL here instead of - * 'group' (which is also NULL at this point). - */ - return NULL; -} - -/** - * Search for a specific igmp group and create a new one if not found- - * - * @param ifp the network interface for which to look - * @param addr the group ip address to search - * @return a struct igmp_group*, - * NULL on memory error. - */ -struct igmp_group * -igmp_lookup_group(struct netif *ifp, ip_addr_t *addr) -{ - struct igmp_group *group = igmp_group_list; - - /* Search if the group already exists */ - group = igmp_lookfor_group(ifp, addr); - if (group != NULL) { - /* Group already exists. */ - return group; - } - - /* Group doesn't exist yet, create a new one */ - group = (struct igmp_group *)memp_malloc(MEMP_IGMP_GROUP); - if (group != NULL) { - group->netif = ifp; - ip_addr_set(&(group->group_address), addr); - group->timer = 0; /* Not running */ - group->group_state = IGMP_GROUP_NON_MEMBER; - group->last_reporter_flag = 0; - group->use = 0; - group->next = igmp_group_list; - - igmp_group_list = group; - } - - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_lookup_group: %sallocated a new group with address ", (group?"":"impossible to "))); - ip_addr_debug_print(IGMP_DEBUG, addr); - LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", ifp)); - - return group; -} - -/** - * Remove a group in the global igmp_group_list - * - * @param group the group to remove from the global igmp_group_list - * @return ERR_OK if group was removed from the list, an err_t otherwise - */ -static err_t -igmp_remove_group(struct igmp_group *group) -{ - err_t err = ERR_OK; - - /* Is it the first group? */ - if (igmp_group_list == group) { - igmp_group_list = group->next; - } else { - /* look for group further down the list */ - struct igmp_group *tmpGroup; - for (tmpGroup = igmp_group_list; tmpGroup != NULL; tmpGroup = tmpGroup->next) { - if (tmpGroup->next == group) { - tmpGroup->next = group->next; - break; - } - } - /* Group not found in the global igmp_group_list */ - if (tmpGroup == NULL) - err = ERR_ARG; - } - /* free group */ - memp_free(MEMP_IGMP_GROUP, group); - - return err; -} - -/** - * Called from ip_input() if a new IGMP packet is received. - * - * @param p received igmp packet, p->payload pointing to the ip header - * @param inp network interface on which the packet was received - * @param dest destination ip address of the igmp packet - */ -void -igmp_input(struct pbuf *p, struct netif *inp, ip_addr_t *dest) -{ - struct ip_hdr * iphdr; - struct igmp_msg* igmp; - struct igmp_group* group; - struct igmp_group* groupref; - - IGMP_STATS_INC(igmp.recv); - - /* Note that the length CAN be greater than 8 but only 8 are used - All are included in the checksum */ - iphdr = (struct ip_hdr *)p->payload; - if (pbuf_header(p, -(int16_t)(IPH_HL(iphdr) * 4)) || (p->len < IGMP_MINLEN)) { - pbuf_free(p); - IGMP_STATS_INC(igmp.lenerr); - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: length error\n")); - return; - } - - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: message from ")); - ip_addr_debug_print(IGMP_DEBUG, &(iphdr->src)); - LWIP_DEBUGF(IGMP_DEBUG, (" to address ")); - ip_addr_debug_print(IGMP_DEBUG, &(iphdr->dest)); - LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", inp)); - - /* Now calculate and check the checksum */ - igmp = (struct igmp_msg *)p->payload; - if (inet_chksum(igmp, p->len)) { - pbuf_free(p); - IGMP_STATS_INC(igmp.chkerr); - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: checksum error\n")); - return; - } - - /* Packet is ok so find an existing group */ - group = igmp_lookfor_group(inp, dest); /* use the destination IP address of incoming packet */ - - /* If group can be found or create... */ - if (!group) { - pbuf_free(p); - IGMP_STATS_INC(igmp.drop); - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP frame not for us\n")); - return; - } - - /* NOW ACT ON THE INCOMING MESSAGE TYPE... */ - switch (igmp->igmp_msgtype) { - case IGMP_MEMB_QUERY: { - /* IGMP_MEMB_QUERY to the "all systems" address ? */ - if ((ip_addr_cmp(dest, &allsystems)) && ip_addr_isany(&igmp->igmp_group_address)) { - /* THIS IS THE GENERAL QUERY */ - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: General IGMP_MEMB_QUERY on \"ALL SYSTEMS\" address (224.0.0.1) [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); - - if (igmp->igmp_maxresp == 0) { - IGMP_STATS_INC(igmp.rx_v1); - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: got an all hosts query with time== 0 - this is V1 and not implemented - treat as v2\n")); - igmp->igmp_maxresp = IGMP_V1_DELAYING_MEMBER_TMR; - } else { - IGMP_STATS_INC(igmp.rx_general); - } - - groupref = igmp_group_list; - while (groupref) { - /* Do not send messages on the all systems group address! */ - if ((groupref->netif == inp) && (!(ip_addr_cmp(&(groupref->group_address), &allsystems)))) { - igmp_delaying_member(groupref, igmp->igmp_maxresp); - } - groupref = groupref->next; - } - } else { - /* IGMP_MEMB_QUERY to a specific group ? */ - if (!ip_addr_isany(&igmp->igmp_group_address)) { - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP_MEMB_QUERY to a specific group ")); - ip_addr_debug_print(IGMP_DEBUG, &igmp->igmp_group_address); - if (ip_addr_cmp(dest, &allsystems)) { - ip_addr_t groupaddr; - LWIP_DEBUGF(IGMP_DEBUG, (" using \"ALL SYSTEMS\" address (224.0.0.1) [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); - /* we first need to re-look for the group since we used dest last time */ - ip_addr_copy(groupaddr, igmp->igmp_group_address); - group = igmp_lookfor_group(inp, &groupaddr); - } else { - LWIP_DEBUGF(IGMP_DEBUG, (" with the group address as destination [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); - } - - if (group != NULL) { - IGMP_STATS_INC(igmp.rx_group); - igmp_delaying_member(group, igmp->igmp_maxresp); - } else { - IGMP_STATS_INC(igmp.drop); - } - } else { - IGMP_STATS_INC(igmp.proterr); - } - } - break; - } - case IGMP_V2_MEMB_REPORT: { - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP_V2_MEMB_REPORT\n")); - IGMP_STATS_INC(igmp.rx_report); - if (group->group_state == IGMP_GROUP_DELAYING_MEMBER) { - /* This is on a specific group we have already looked up */ - group->timer = 0; /* stopped */ - group->group_state = IGMP_GROUP_IDLE_MEMBER; - group->last_reporter_flag = 0; - } - break; - } - default: { - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: unexpected msg %d in state %d on group %p on if %p\n", - igmp->igmp_msgtype, group->group_state, &group, group->netif)); - IGMP_STATS_INC(igmp.proterr); - break; - } - } - - pbuf_free(p); - return; -} - -/** - * Join a group on one network interface. - * - * @param ifaddr ip address of the network interface which should join a new group - * @param groupaddr the ip address of the group which to join - * @return ERR_OK if group was joined on the netif(s), an err_t otherwise - */ -err_t -igmp_joingroup(ip_addr_t *ifaddr, ip_addr_t *groupaddr) -{ - err_t err = ERR_VAL; /* no matching interface */ - struct igmp_group *group; - struct netif *netif; - - /* make sure it is multicast address */ - LWIP_ERROR("igmp_joingroup: attempt to join non-multicast address", ip_addr_ismulticast(groupaddr), return ERR_VAL;); - LWIP_ERROR("igmp_joingroup: attempt to join allsystems address", (!ip_addr_cmp(groupaddr, &allsystems)), return ERR_VAL;); - - /* loop through netif's */ - netif = netif_list; - while (netif != NULL) { - /* Should we join this interface ? */ - if ((netif->flags & NETIF_FLAG_IGMP) && ((ip_addr_isany(ifaddr) || ip_addr_cmp(&(netif->ip_addr), ifaddr)))) { - /* find group or create a new one if not found */ - group = igmp_lookup_group(netif, groupaddr); - - if (group != NULL) { - /* This should create a new group, check the state to make sure */ - if (group->group_state != IGMP_GROUP_NON_MEMBER) { - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: join to group not in state IGMP_GROUP_NON_MEMBER\n")); - } else { - /* OK - it was new group */ - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: join to new group: ")); - ip_addr_debug_print(IGMP_DEBUG, groupaddr); - LWIP_DEBUGF(IGMP_DEBUG, ("\n")); - - /* If first use of the group, allow the group at the MAC level */ - if ((group->use==0) && (netif->igmp_mac_filter != NULL)) { - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: igmp_mac_filter(ADD ")); - ip_addr_debug_print(IGMP_DEBUG, groupaddr); - LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); - netif->igmp_mac_filter(netif, groupaddr, IGMP_ADD_MAC_FILTER); - } - - IGMP_STATS_INC(igmp.tx_join); - igmp_send(group, IGMP_V2_MEMB_REPORT); - - igmp_start_timer(group, IGMP_JOIN_DELAYING_MEMBER_TMR); - - /* Need to work out where this timer comes from */ - group->group_state = IGMP_GROUP_DELAYING_MEMBER; - } - /* Increment group use */ - group->use++; - /* Join on this interface */ - err = ERR_OK; - } else { - /* Return an error even if some network interfaces are joined */ - /** @todo undo any other netif already joined */ - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: Not enought memory to join to group\n")); - return ERR_MEM; - } - } - /* proceed to next network interface */ - netif = netif->next; - } - - return err; -} - -/** - * Leave a group on one network interface. - * - * @param ifaddr ip address of the network interface which should leave a group - * @param groupaddr the ip address of the group which to leave - * @return ERR_OK if group was left on the netif(s), an err_t otherwise - */ -err_t -igmp_leavegroup(ip_addr_t *ifaddr, ip_addr_t *groupaddr) -{ - err_t err = ERR_VAL; /* no matching interface */ - struct igmp_group *group; - struct netif *netif; - - /* make sure it is multicast address */ - LWIP_ERROR("igmp_leavegroup: attempt to leave non-multicast address", ip_addr_ismulticast(groupaddr), return ERR_VAL;); - LWIP_ERROR("igmp_leavegroup: attempt to leave allsystems address", (!ip_addr_cmp(groupaddr, &allsystems)), return ERR_VAL;); - - /* loop through netif's */ - netif = netif_list; - while (netif != NULL) { - /* Should we leave this interface ? */ - if ((netif->flags & NETIF_FLAG_IGMP) && ((ip_addr_isany(ifaddr) || ip_addr_cmp(&(netif->ip_addr), ifaddr)))) { - /* find group */ - group = igmp_lookfor_group(netif, groupaddr); - - if (group != NULL) { - /* Only send a leave if the flag is set according to the state diagram */ - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: Leaving group: ")); - ip_addr_debug_print(IGMP_DEBUG, groupaddr); - LWIP_DEBUGF(IGMP_DEBUG, ("\n")); - - /* If there is no other use of the group */ - if (group->use <= 1) { - /* If we are the last reporter for this group */ - if (group->last_reporter_flag) { - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: sending leaving group\n")); - IGMP_STATS_INC(igmp.tx_leave); - igmp_send(group, IGMP_LEAVE_GROUP); - } - - /* Disable the group at the MAC level */ - if (netif->igmp_mac_filter != NULL) { - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: igmp_mac_filter(DEL ")); - ip_addr_debug_print(IGMP_DEBUG, groupaddr); - LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); - netif->igmp_mac_filter(netif, groupaddr, IGMP_DEL_MAC_FILTER); - } - - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: remove group: ")); - ip_addr_debug_print(IGMP_DEBUG, groupaddr); - LWIP_DEBUGF(IGMP_DEBUG, ("\n")); - - /* Free the group */ - igmp_remove_group(group); - } else { - /* Decrement group use */ - group->use--; - } - /* Leave on this interface */ - err = ERR_OK; - } else { - /* It's not a fatal error on "leavegroup" */ - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: not member of group\n")); - } - } - /* proceed to next network interface */ - netif = netif->next; - } - - return err; -} - -/** - * The igmp timer function (both for NO_SYS=1 and =0) - * Should be called every IGMP_TMR_INTERVAL milliseconds (100 ms is default). - */ -void -igmp_tmr(void) -{ - struct igmp_group *group = igmp_group_list; - - while (group != NULL) { - if (group->timer > 0) { - group->timer--; - if (group->timer == 0) { - igmp_timeout(group); - } - } - group = group->next; - } -} - -/** - * Called if a timeout for one group is reached. - * Sends a report for this group. - * - * @param group an igmp_group for which a timeout is reached - */ -static void -igmp_timeout(struct igmp_group *group) -{ - /* If the state is IGMP_GROUP_DELAYING_MEMBER then we send a report for this group */ - if (group->group_state == IGMP_GROUP_DELAYING_MEMBER) { - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_timeout: report membership for group with address ")); - ip_addr_debug_print(IGMP_DEBUG, &(group->group_address)); - LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", group->netif)); - - IGMP_STATS_INC(igmp.tx_report); - igmp_send(group, IGMP_V2_MEMB_REPORT); - } -} - -/** - * Start a timer for an igmp group - * - * @param group the igmp_group for which to start a timer - * @param max_time the time in multiples of IGMP_TMR_INTERVAL (decrease with - * every call to igmp_tmr()) - */ -static void -igmp_start_timer(struct igmp_group *group, uint8_t max_time) -{ - /* ensure the input value is > 0 */ - if (max_time == 0) { - max_time = 1; - } - /* ensure the random value is > 0 */ - group->timer = (LWIP_RAND() % (max_time - 1)) + 1; -} - -/** - * Delaying membership report for a group if necessary - * - * @param group the igmp_group for which "delaying" membership report - * @param maxresp query delay - */ -static void -igmp_delaying_member(struct igmp_group *group, uint8_t maxresp) -{ - if ((group->group_state == IGMP_GROUP_IDLE_MEMBER) || - ((group->group_state == IGMP_GROUP_DELAYING_MEMBER) && - ((group->timer == 0) || (maxresp < group->timer)))) { - igmp_start_timer(group, maxresp); - group->group_state = IGMP_GROUP_DELAYING_MEMBER; - } -} - - -/** - * Sends an IP packet on a network interface. This function constructs the IP header - * and calculates the IP header checksum. If the source IP address is NULL, - * the IP address of the outgoing network interface is filled in as source address. - * - * @param p the packet to send (p->payload points to the data, e.g. next - protocol header; if dest == IP_HDRINCL, p already includes an IP - header and p->payload points to that IP header) - * @param src the source IP address to send from (if src == IP_ADDR_ANY, the - * IP address of the netif used to send is used as source address) - * @param dest the destination IP address to send the packet to - * @param ttl the TTL value to be set in the IP header - * @param proto the PROTOCOL to be set in the IP header - * @param netif the netif on which to send this packet - * @return ERR_OK if the packet was sent OK - * ERR_BUF if p doesn't have enough space for IP/LINK headers - * returns errors returned by netif->output - */ -static err_t -igmp_ip_output_if(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, struct netif *netif) -{ - /* This is the "router alert" option */ - uint16_t ra[2]; - ra[0] = PP_HTONS(ROUTER_ALERT); - ra[1] = 0x0000; /* Router shall examine packet */ - IGMP_STATS_INC(igmp.xmit); - return ip_output_if_opt(p, src, dest, IGMP_TTL, 0, IP_PROTO_IGMP, netif, ra, ROUTER_ALERTLEN); -} - -/** - * Send an igmp packet to a specific group. - * - * @param group the group to which to send the packet - * @param type the type of igmp packet to send - */ -static void -igmp_send(struct igmp_group *group, uint8_t type) -{ - struct pbuf* p = NULL; - struct igmp_msg* igmp = NULL; - ip_addr_t src = *IP_ADDR_ANY; - ip_addr_t* dest = NULL; - - /* IP header + "router alert" option + IGMP header */ - p = pbuf_alloc(PBUF_TRANSPORT, IGMP_MINLEN, PBUF_RAM); - - if (p) { - igmp = (struct igmp_msg *)p->payload; - LWIP_ASSERT("igmp_send: check that first pbuf can hold struct igmp_msg", - (p->len >= sizeof(struct igmp_msg))); - ip_addr_copy(src, group->netif->ip_addr); - - if (type == IGMP_V2_MEMB_REPORT) { - dest = &(group->group_address); - ip_addr_copy(igmp->igmp_group_address, group->group_address); - group->last_reporter_flag = 1; /* Remember we were the last to report */ - } else { - if (type == IGMP_LEAVE_GROUP) { - dest = &allrouters; - ip_addr_copy(igmp->igmp_group_address, group->group_address); - } - } - - if ((type == IGMP_V2_MEMB_REPORT) || (type == IGMP_LEAVE_GROUP)) { - igmp->igmp_msgtype = type; - igmp->igmp_maxresp = 0; - igmp->igmp_checksum = 0; - igmp->igmp_checksum = inet_chksum(igmp, IGMP_MINLEN); - - igmp_ip_output_if(p, &src, dest, group->netif); - } - - pbuf_free(p); - } else { - LWIP_DEBUGF(IGMP_DEBUG, ("igmp_send: not enough memory for igmp_send\n")); - IGMP_STATS_INC(igmp.memerr); - } -} - -#endif /* LWIP_IGMP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/inet.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/inet.c deleted file mode 100644 index e283a57..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/inet.c +++ /dev/null @@ -1,42 +0,0 @@ -/** - * @file - * Functions common to all TCP/IPv4 modules, such as the byte order functions. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#include "lwip/inet.h" - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/inet_chksum.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/inet_chksum.c deleted file mode 100644 index 87bdd10..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/inet_chksum.c +++ /dev/null @@ -1,450 +0,0 @@ -/** - * @file - * Incluse internet checksum functions. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#include "lwip/inet_chksum.h" -#include "lwip/def.h" - -#include -#include - -/* These are some reference implementations of the checksum algorithm, with the - * aim of being simple, correct and fully portable. Checksumming is the - * first thing you would want to optimize for your platform. If you create - * your own version, link it in and in your cc.h put: - * - * #define LWIP_CHKSUM - * - * Or you can select from the implementations below by defining - * LWIP_CHKSUM_ALGORITHM to 1, 2 or 3. - */ - -#ifndef LWIP_CHKSUM -# define LWIP_CHKSUM lwip_standard_chksum -# ifndef LWIP_CHKSUM_ALGORITHM -# define LWIP_CHKSUM_ALGORITHM 2 -# endif -#endif -/* If none set: */ -#ifndef LWIP_CHKSUM_ALGORITHM -# define LWIP_CHKSUM_ALGORITHM 0 -#endif - -#if (LWIP_CHKSUM_ALGORITHM == 1) /* Version #1 */ -/** - * lwip checksum - * - * @param dataptr points to start of data to be summed at any boundary - * @param len length of data to be summed - * @return host order (!) lwip checksum (non-inverted Internet sum) - * - * @note accumulator size limits summable length to 64k - * @note host endianess is irrelevant (p3 RFC1071) - */ -static uint16_t -lwip_standard_chksum(void *dataptr, uint16_t len) -{ - uint32_t acc; - uint16_t src; - uint8_t *octetptr; - - acc = 0; - /* dataptr may be at odd or even addresses */ - octetptr = (uint8_t*)dataptr; - while (len > 1) { - /* declare first octet as most significant - thus assume network order, ignoring host order */ - src = (*octetptr) << 8; - octetptr++; - /* declare second octet as least significant */ - src |= (*octetptr); - octetptr++; - acc += src; - len -= 2; - } - if (len > 0) { - /* accumulate remaining octet */ - src = (*octetptr) << 8; - acc += src; - } - /* add deferred carry bits */ - acc = (acc >> 16) + (acc & 0x0000ffffUL); - if ((acc & 0xffff0000UL) != 0) { - acc = (acc >> 16) + (acc & 0x0000ffffUL); - } - /* This maybe a little confusing: reorder sum using htons() - instead of ntohs() since it has a little less call overhead. - The caller must invert bits for Internet sum ! */ - return htons((uint16_t)acc); -} -#endif - -#if (LWIP_CHKSUM_ALGORITHM == 2) /* Alternative version #2 */ -/* - * Curt McDowell - * Broadcom Corp. - * csm@broadcom.com - * - * IP checksum two bytes at a time with support for - * unaligned buffer. - * Works for len up to and including 0x20000. - * by Curt McDowell, Broadcom Corp. 12/08/2005 - * - * @param dataptr points to start of data to be summed at any boundary - * @param len length of data to be summed - * @return host order (!) lwip checksum (non-inverted Internet sum) - */ - -static uint16_t -lwip_standard_chksum(void *dataptr, int len) -{ - uint8_t *pb = (uint8_t *)dataptr; - uint16_t *ps, t = 0; - uint32_t sum = 0; - int odd = ((mem_ptr_t)pb & 1); - - /* Get aligned to uint16_t */ - if (odd && len > 0) { - ((uint8_t *)&t)[1] = *pb++; - len--; - } - - /* Add the bulk of the data */ - ps = (uint16_t *)(void *)pb; - while (len > 1) { - sum += *ps++; - len -= 2; - } - - /* Consume left-over byte, if any */ - if (len > 0) { - ((uint8_t *)&t)[0] = *(uint8_t *)ps; - } - - /* Add end bytes */ - sum += t; - - /* Fold 32-bit sum to 16 bits - calling this twice is propably faster than if statements... */ - sum = FOLD_U32T(sum); - sum = FOLD_U32T(sum); - - /* Swap if alignment was odd */ - if (odd) { - sum = SWAP_BYTES_IN_WORD(sum); - } - - return (uint16_t)sum; -} -#endif - -#if (LWIP_CHKSUM_ALGORITHM == 3) /* Alternative version #3 */ -/** - * An optimized checksum routine. Basically, it uses loop-unrolling on - * the checksum loop, treating the head and tail bytes specially, whereas - * the inner loop acts on 8 bytes at a time. - * - * @arg start of buffer to be checksummed. May be an odd byte address. - * @len number of bytes in the buffer to be checksummed. - * @return host order (!) lwip checksum (non-inverted Internet sum) - * - * by Curt McDowell, Broadcom Corp. December 8th, 2005 - */ - -static uint16_t -lwip_standard_chksum(void *dataptr, int len) -{ - uint8_t *pb = (uint8_t *)dataptr; - uint16_t *ps, t = 0; - uint32_t *pl; - uint32_t sum = 0, tmp; - /* starts at odd byte address? */ - int odd = ((mem_ptr_t)pb & 1); - - if (odd && len > 0) { - ((uint8_t *)&t)[1] = *pb++; - len--; - } - - ps = (uint16_t *)pb; - - if (((mem_ptr_t)ps & 3) && len > 1) { - sum += *ps++; - len -= 2; - } - - pl = (uint32_t *)ps; - - while (len > 7) { - tmp = sum + *pl++; /* ping */ - if (tmp < sum) { - tmp++; /* add back carry */ - } - - sum = tmp + *pl++; /* pong */ - if (sum < tmp) { - sum++; /* add back carry */ - } - - len -= 8; - } - - /* make room in upper bits */ - sum = FOLD_U32T(sum); - - ps = (uint16_t *)pl; - - /* 16-bit aligned word remaining? */ - while (len > 1) { - sum += *ps++; - len -= 2; - } - - /* dangling tail byte remaining? */ - if (len > 0) { /* include odd byte */ - ((uint8_t *)&t)[0] = *(uint8_t *)ps; - } - - sum += t; /* add end bytes */ - - /* Fold 32-bit sum to 16 bits - calling this twice is propably faster than if statements... */ - sum = FOLD_U32T(sum); - sum = FOLD_U32T(sum); - - if (odd) { - sum = SWAP_BYTES_IN_WORD(sum); - } - - return (uint16_t)sum; -} -#endif - -/* inet_chksum_pseudo: - * - * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain. - * IP addresses are expected to be in network byte order. - * - * @param p chain of pbufs over that a checksum should be calculated (ip data part) - * @param src source ip address (used for checksum of pseudo header) - * @param dst destination ip address (used for checksum of pseudo header) - * @param proto ip protocol (used for checksum of pseudo header) - * @param proto_len length of the ip data part (used for checksum of pseudo header) - * @return checksum (as uint16_t) to be saved directly in the protocol header - */ -uint16_t -inet_chksum_pseudo(struct pbuf *p, - ip_addr_t *src, ip_addr_t *dest, - uint8_t proto, uint16_t proto_len) -{ - uint32_t acc; - uint32_t addr; - struct pbuf *q; - uint8_t swapped; - - acc = 0; - swapped = 0; - /* iterate through all pbuf in chain */ - for(q = p; q != NULL; q = q->next) { - LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", - (void *)q, (void *)q->next)); - acc += LWIP_CHKSUM(q->payload, q->len); - /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ - /* just executing this next line is probably faster that the if statement needed - to check whether we really need to execute it, and does no harm */ - acc = FOLD_U32T(acc); - if (q->len % 2 != 0) { - swapped = 1 - swapped; - acc = SWAP_BYTES_IN_WORD(acc); - } - /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ - } - - if (swapped) { - acc = SWAP_BYTES_IN_WORD(acc); - } - addr = ip4_addr_get_u32(src); - acc += (addr & 0xffffUL); - acc += ((addr >> 16) & 0xffffUL); - addr = ip4_addr_get_u32(dest); - acc += (addr & 0xffffUL); - acc += ((addr >> 16) & 0xffffUL); - acc += (uint32_t)htons((uint16_t)proto); - acc += (uint32_t)htons(proto_len); - - /* Fold 32-bit sum to 16 bits - calling this twice is propably faster than if statements... */ - acc = FOLD_U32T(acc); - acc = FOLD_U32T(acc); - LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); - return (uint16_t)~(acc & 0xffffUL); -} - -/* inet_chksum_pseudo: - * - * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain. - * IP addresses are expected to be in network byte order. - * - * @param p chain of pbufs over that a checksum should be calculated (ip data part) - * @param src source ip address (used for checksum of pseudo header) - * @param dst destination ip address (used for checksum of pseudo header) - * @param proto ip protocol (used for checksum of pseudo header) - * @param proto_len length of the ip data part (used for checksum of pseudo header) - * @return checksum (as uint16_t) to be saved directly in the protocol header - */ -uint16_t -inet_chksum_pseudo_partial(struct pbuf *p, - ip_addr_t *src, ip_addr_t *dest, - uint8_t proto, uint16_t proto_len, uint16_t chksum_len) -{ - uint32_t acc; - uint32_t addr; - struct pbuf *q; - uint8_t swapped; - uint16_t chklen; - - acc = 0; - swapped = 0; - /* iterate through all pbuf in chain */ - for(q = p; (q != NULL) && (chksum_len > 0); q = q->next) { - LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", - (void *)q, (void *)q->next)); - chklen = q->len; - if (chklen > chksum_len) { - chklen = chksum_len; - } - acc += LWIP_CHKSUM(q->payload, chklen); - chksum_len -= chklen; - LWIP_ASSERT("delete me", chksum_len < 0x7fff); - /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ - /* fold the upper bit down */ - acc = FOLD_U32T(acc); - if (q->len % 2 != 0) { - swapped = 1 - swapped; - acc = SWAP_BYTES_IN_WORD(acc); - } - /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ - } - - if (swapped) { - acc = SWAP_BYTES_IN_WORD(acc); - } - addr = ip4_addr_get_u32(src); - acc += (addr & 0xffffUL); - acc += ((addr >> 16) & 0xffffUL); - addr = ip4_addr_get_u32(dest); - acc += (addr & 0xffffUL); - acc += ((addr >> 16) & 0xffffUL); - acc += (uint32_t)htons((uint16_t)proto); - acc += (uint32_t)htons(proto_len); - - /* Fold 32-bit sum to 16 bits - calling this twice is propably faster than if statements... */ - acc = FOLD_U32T(acc); - acc = FOLD_U32T(acc); - LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); - return (uint16_t)~(acc & 0xffffUL); -} - -/* inet_chksum: - * - * Calculates the Internet checksum over a portion of memory. Used primarily for IP - * and ICMP. - * - * @param dataptr start of the buffer to calculate the checksum (no alignment needed) - * @param len length of the buffer to calculate the checksum - * @return checksum (as uint16_t) to be saved directly in the protocol header - */ - -uint16_t -inet_chksum(void *dataptr, uint16_t len) -{ - return ~LWIP_CHKSUM(dataptr, len); -} - -/** - * Calculate a checksum over a chain of pbufs (without pseudo-header, much like - * inet_chksum only pbufs are used). - * - * @param p pbuf chain over that the checksum should be calculated - * @return checksum (as uint16_t) to be saved directly in the protocol header - */ -uint16_t -inet_chksum_pbuf(struct pbuf *p) -{ - uint32_t acc; - struct pbuf *q; - uint8_t swapped; - - acc = 0; - swapped = 0; - for(q = p; q != NULL; q = q->next) { - acc += LWIP_CHKSUM(q->payload, q->len); - acc = FOLD_U32T(acc); - if (q->len % 2 != 0) { - swapped = 1 - swapped; - acc = SWAP_BYTES_IN_WORD(acc); - } - } - - if (swapped) { - acc = SWAP_BYTES_IN_WORD(acc); - } - return (uint16_t)~(acc & 0xffffUL); -} - -/* These are some implementations for LWIP_CHKSUM_COPY, which copies data - * like MEMCPY but generates a checksum at the same time. Since this is a - * performance-sensitive function, you might want to create your own version - * in assembly targeted at your hardware by defining it in lwipopts.h: - * #define LWIP_CHKSUM_COPY(dst, src, len) your_chksum_copy(dst, src, len) - */ - -#if (LWIP_CHKSUM_COPY_ALGORITHM == 1) /* Version #1 */ -/** Safe but slow: first call MEMCPY, then call LWIP_CHKSUM. - * For architectures with big caches, data might still be in cache when - * generating the checksum after copying. - */ -uint16_t -lwip_chksum_copy(void *dst, const void *src, uint16_t len) -{ - MEMCPY(dst, src, len); - return LWIP_CHKSUM(dst, len); -} -#endif /* (LWIP_CHKSUM_COPY_ALGORITHM == 1) */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/ip.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/ip.c deleted file mode 100644 index 76e0779..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/ip.c +++ /dev/null @@ -1,959 +0,0 @@ -/** - * @file - * This is the IPv4 layer implementation for incoming and outgoing IP traffic. - * - * @see ip_frag.c - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" -#include "lwip/ip.h" -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/ip_frag.h" -#include "lwip/inet_chksum.h" -#include "lwip/netif.h" -#include "lwip/icmp.h" -#include "lwip/igmp.h" -#include "lwip/raw.h" -#include "lwip/udp.h" -#include "lwip/tcp_impl.h" -#include "lwip/snmp.h" -#include "lwip/dhcp.h" -#include "lwip/autoip.h" -#include "lwip/stats.h" -#include "arch/perf.h" -#include "platform_opts.h" - -#include - -/** Set this to 0 in the rare case of wanting to call an extra function to - * generate the IP checksum (in contrast to calculating it on-the-fly). */ -#ifndef LWIP_INLINE_IP_CHKSUM -#define LWIP_INLINE_IP_CHKSUM 1 -#endif -#if LWIP_INLINE_IP_CHKSUM && CHECKSUM_GEN_IP -#define CHECKSUM_GEN_IP_INLINE 1 -#else -#define CHECKSUM_GEN_IP_INLINE 0 -#endif - -#if LWIP_DHCP || defined(LWIP_IP_ACCEPT_UDP_PORT) -#define IP_ACCEPT_LINK_LAYER_ADDRESSING 1 - -/** Some defines for DHCP to let link-layer-addressed packets through while the - * netif is down. - * To use this in your own application/protocol, define LWIP_IP_ACCEPT_UDP_PORT - * to return 1 if the port is accepted and 0 if the port is not accepted. - */ -#if LWIP_DHCP && defined(LWIP_IP_ACCEPT_UDP_PORT) -/* accept DHCP client port and custom port */ -#define IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(port) (((port) == PP_NTOHS(DHCP_CLIENT_PORT)) \ - || (LWIP_IP_ACCEPT_UDP_PORT(port))) -#elif defined(LWIP_IP_ACCEPT_UDP_PORT) /* LWIP_DHCP && defined(LWIP_IP_ACCEPT_UDP_PORT) */ -/* accept custom port only */ -#define IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(port) (LWIP_IP_ACCEPT_UDP_PORT(port)) -#else /* LWIP_DHCP && defined(LWIP_IP_ACCEPT_UDP_PORT) */ -/* accept DHCP client port only */ -#define IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(port) ((port) == PP_NTOHS(DHCP_CLIENT_PORT)) -#endif /* LWIP_DHCP && defined(LWIP_IP_ACCEPT_UDP_PORT) */ - -#else /* LWIP_DHCP */ -#define IP_ACCEPT_LINK_LAYER_ADDRESSING 0 -#endif /* LWIP_DHCP */ - -/** - * The interface that provided the packet for the current callback - * invocation. - */ -struct netif *current_netif; - -/** - * Header of the input packet currently being processed. - */ -const struct ip_hdr *current_header; -/** Source IP address of current_header */ -ip_addr_t current_iphdr_src; -/** Destination IP address of current_header */ -ip_addr_t current_iphdr_dest; - -/** The IP header ID of the next outgoing IP packet */ -static uint16_t ip_id; - -/** The flag indicating whether the ethernet/mii is the default interface */ -extern int ethernet_if_default; - -/** - * Finds the appropriate network interface for a given IP address. It - * searches the list of network interfaces linearly. A match is found - * if the masked IP address of the network interface equals the masked - * IP address given to the function. - * - * @param dest the destination IP address for which to find the route - * @return the netif on which to send to reach dest - */ -struct netif * -ip_route(ip_addr_t *dest) -{ - struct netif *netif; -#if CONFIG_ETHERNET - struct netif *last_netif = NULL; -#endif - -#ifdef LWIP_HOOK_IP4_ROUTE - netif = LWIP_HOOK_IP4_ROUTE(dest); - if (netif != NULL) { - return netif; - } -#endif - - /* iterate through netifs */ - for (netif = netif_list; netif != NULL; netif = netif->next) { - /* network mask matches? */ - if (netif_is_up(netif)) { - if (ip_addr_netcmp(dest, &(netif->ip_addr), &(netif->netmask))) { - /* return netif on which to forward IP packet */ -#if CONFIG_ETHERNET - if(ethernet_if_default == 1) - last_netif = netif; - else - return netif; -#else - return netif; -#endif - } - } - } - -#if CONFIG_ETHERNET - if(ethernet_if_default == 1 && last_netif != NULL) - return last_netif; -#endif - - if ((netif_default == NULL) || (!netif_is_up(netif_default))) { - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_route: No route to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - ip4_addr1_16(dest), ip4_addr2_16(dest), ip4_addr3_16(dest), ip4_addr4_16(dest))); - IP_STATS_INC(ip.rterr); - snmp_inc_ipoutnoroutes(); - return NULL; - } - /* no matching netif found, use default netif */ - return netif_default; -} - -#if IP_FORWARD -/** - * Determine whether an IP address is in a reserved set of addresses - * that may not be forwarded, or whether datagrams to that destination - * may be forwarded. - * @param p the packet to forward - * @param dest the destination IP address - * @return 1: can forward 0: discard - */ -static int -ip_canforward(struct pbuf *p) -{ - uint32_t addr = ip4_addr_get_u32(ip_current_dest_addr()); - - if (p->flags & PBUF_FLAG_LLBCAST) { - /* don't route link-layer broadcasts */ - return 0; - } - if ((p->flags & PBUF_FLAG_LLMCAST) && !IP_MULTICAST(addr)) { - /* don't route link-layer multicasts unless the destination address is an IP - multicast address */ - return 0; - } - if (IP_EXPERIMENTAL(addr)) { - return 0; - } - if (IP_CLASSA(addr)) { - uint32_t net = addr & IP_CLASSA_NET; - if ((net == 0) || (net == (IP_LOOPBACKNET << IP_CLASSA_NSHIFT))) { - /* don't route loopback packets */ - return 0; - } - } - return 1; -} - -/** - * Forwards an IP packet. It finds an appropriate route for the - * packet, decrements the TTL value of the packet, adjusts the - * checksum and outputs the packet on the appropriate interface. - * - * @param p the packet to forward (p->payload points to IP header) - * @param iphdr the IP header of the input packet - * @param inp the netif on which this packet was received - */ -static void -ip_forward(struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp) -{ - struct netif *netif; - - PERF_START; - - if (!ip_canforward(p)) { - goto return_noroute; - } - - /* RFC3927 2.7: do not forward link-local addresses */ - if (ip_addr_islinklocal(¤t_iphdr_dest)) { - LWIP_DEBUGF(IP_DEBUG, ("ip_forward: not forwarding LLA %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - ip4_addr1_16(¤t_iphdr_dest), ip4_addr2_16(¤t_iphdr_dest), - ip4_addr3_16(¤t_iphdr_dest), ip4_addr4_16(¤t_iphdr_dest))); - goto return_noroute; - } - - /* Find network interface where to forward this IP packet to. */ - netif = ip_route(¤t_iphdr_dest); - if (netif == NULL) { - LWIP_DEBUGF(IP_DEBUG, ("ip_forward: no forwarding route for %"U16_F".%"U16_F".%"U16_F".%"U16_F" found\n", - ip4_addr1_16(¤t_iphdr_dest), ip4_addr2_16(¤t_iphdr_dest), - ip4_addr3_16(¤t_iphdr_dest), ip4_addr4_16(¤t_iphdr_dest))); - /* @todo: send ICMP_DUR_NET? */ - goto return_noroute; - } -#ifdef CONFIG_DONT_CARE_TP - /* Do not forward packets onto the same network interface on which - * they arrived. */ - if((netif->flags & NETIF_FLAG_IPSWITCH) == 0) - { -#endif -#if !IP_FORWARD_ALLOW_TX_ON_RX_NETIF - if (netif == inp) { - LWIP_DEBUGF(IP_DEBUG, ("ip_forward: not bouncing packets back on incoming interface.\n")); - goto return_noroute; - } -#endif /* IP_FORWARD_ALLOW_TX_ON_RX_NETIF */ -#ifdef CONFIG_DONT_CARE_TP - } -#endif - /* decrement TTL */ - IPH_TTL_SET(iphdr, IPH_TTL(iphdr) - 1); - /* send ICMP if TTL == 0 */ - if (IPH_TTL(iphdr) == 0) { - snmp_inc_ipinhdrerrors(); -#if LWIP_ICMP - /* Don't send ICMP messages in response to ICMP messages */ - if (IPH_PROTO(iphdr) != IP_PROTO_ICMP) { - icmp_time_exceeded(p, ICMP_TE_TTL); - } -#endif /* LWIP_ICMP */ - return; - } - - /* Incrementally update the IP checksum. */ - if (IPH_CHKSUM(iphdr) >= PP_HTONS(0xffffU - 0x100)) { - IPH_CHKSUM_SET(iphdr, IPH_CHKSUM(iphdr) + PP_HTONS(0x100) + 1); - } else { - IPH_CHKSUM_SET(iphdr, IPH_CHKSUM(iphdr) + PP_HTONS(0x100)); - } - - LWIP_DEBUGF(IP_DEBUG, ("ip_forward: forwarding packet to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - ip4_addr1_16(¤t_iphdr_dest), ip4_addr2_16(¤t_iphdr_dest), - ip4_addr3_16(¤t_iphdr_dest), ip4_addr4_16(¤t_iphdr_dest))); - - IP_STATS_INC(ip.fw); - IP_STATS_INC(ip.xmit); - snmp_inc_ipforwdatagrams(); - - PERF_STOP("ip_forward"); - /* don't fragment if interface has mtu set to 0 [loopif] */ -#ifdef CONFIG_DONT_CARE_TP - if ((netif->flags & NETIF_FLAG_IPSWITCH) &&(netif->mtu && (p->tot_len > netif->mtu)) ){ -#else - if (netif->mtu && (p->tot_len > netif->mtu)) { -#endif - if ((IPH_OFFSET(iphdr) & PP_NTOHS(IP_DF)) == 0) { -#if IP_FRAG - ip_frag(p, netif, ip_current_dest_addr()); -#else /* IP_FRAG */ - /* @todo: send ICMP Destination Unreacheable code 13 "Communication administratively prohibited"? */ -#endif /* IP_FRAG */ - } else { - /* send ICMP Destination Unreacheable code 4: "Fragmentation Needed and DF Set" */ - icmp_dest_unreach(p, ICMP_DUR_FRAG); - } - return; - } - /* transmit pbuf on chosen interface */ - netif->output(netif, p, ¤t_iphdr_dest); - return; -return_noroute: - snmp_inc_ipoutnoroutes(); -} -#endif /* IP_FORWARD */ - -/** - * This function is called by the network interface device driver when - * an IP packet is received. The function does the basic checks of the - * IP header such as packet size being at least larger than the header - * size etc. If the packet was not destined for us, the packet is - * forwarded (using ip_forward). The IP checksum is always checked. - * - * Finally, the packet is sent to the upper layer protocol input function. - * - * @param p the received IP packet (p->payload points to IP header) - * @param inp the netif on which this packet was received - * @return ERR_OK if the packet was processed (could return ERR_* if it wasn't - * processed, but currently always returns ERR_OK) - */ -err_t -ip_input(struct pbuf *p, struct netif *inp) -{ - struct ip_hdr *iphdr; - struct netif *netif; - uint16_t iphdr_hlen; - uint16_t iphdr_len; -#if IP_ACCEPT_LINK_LAYER_ADDRESSING - int check_ip_src=1; -#endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */ - - IP_STATS_INC(ip.recv); - snmp_inc_ipinreceives(); - - /* identify the IP header */ - iphdr = (struct ip_hdr *)p->payload; - if (IPH_V(iphdr) != 4) { - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_WARNING, ("IP packet dropped due to bad version number %"U16_F"\n", IPH_V(iphdr))); - ip_debug_print(p); - pbuf_free(p); - IP_STATS_INC(ip.err); - IP_STATS_INC(ip.drop); - snmp_inc_ipinhdrerrors(); - return ERR_OK; - } - -#ifdef LWIP_HOOK_IP4_INPUT - if (LWIP_HOOK_IP4_INPUT(p, inp)) { - /* the packet has been eaten */ - return ERR_OK; - } -#endif - - /* obtain IP header length in number of 32-bit words */ - iphdr_hlen = IPH_HL(iphdr); - /* calculate IP header length in bytes */ - iphdr_hlen *= 4; - /* obtain ip length in bytes */ - iphdr_len = ntohs(IPH_LEN(iphdr)); - - /* header length exceeds first pbuf length, or ip length exceeds total pbuf length? */ - if ((iphdr_hlen > p->len) || (iphdr_len > p->tot_len)) { - if (iphdr_hlen > p->len) { - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, - ("IP header (len %"U16_F") does not fit in first pbuf (len %"U16_F"), IP packet dropped.\n", - iphdr_hlen, p->len)); - } - if (iphdr_len > p->tot_len) { - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, - ("IP (len %"U16_F") is longer than pbuf (len %"U16_F"), IP packet dropped.\n", - iphdr_len, p->tot_len)); - } - /* free (drop) packet pbufs */ - pbuf_free(p); - IP_STATS_INC(ip.lenerr); - IP_STATS_INC(ip.drop); - snmp_inc_ipindiscards(); - return ERR_OK; - } - - /* verify checksum */ -#if CHECKSUM_CHECK_IP - if (inet_chksum(iphdr, iphdr_hlen) != 0) { - - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, - ("Checksum (0x%"X16_F") failed, IP packet dropped.\n", inet_chksum(iphdr, iphdr_hlen))); - ip_debug_print(p); - pbuf_free(p); - IP_STATS_INC(ip.chkerr); - IP_STATS_INC(ip.drop); - snmp_inc_ipinhdrerrors(); - return ERR_OK; - } -#endif - - /* Trim pbuf. This should have been done at the netif layer, - * but we'll do it anyway just to be sure that its done. */ - pbuf_realloc(p, iphdr_len); - - /* copy IP addresses to aligned ip_addr_t */ - ip_addr_copy(current_iphdr_dest, iphdr->dest); - ip_addr_copy(current_iphdr_src, iphdr->src); - - /* match packet against an interface, i.e. is this packet for us? */ -#if LWIP_IGMP - if (ip_addr_ismulticast(¤t_iphdr_dest)) { - if ((inp->flags & NETIF_FLAG_IGMP) && (igmp_lookfor_group(inp, ¤t_iphdr_dest))) { - netif = inp; - } else { - netif = NULL; - } - } else -#endif /* LWIP_IGMP */ - { - /* start trying with inp. if that's not acceptable, start walking the - list of configured netifs. - 'first' is used as a boolean to mark whether we started walking the list */ - int first = 1; - netif = inp; - do { - LWIP_DEBUGF(IP_DEBUG, ("ip_input: iphdr->dest 0x%"X32_F" netif->ip_addr 0x%"X32_F" (0x%"X32_F", 0x%"X32_F", 0x%"X32_F")\n", - ip4_addr_get_u32(&iphdr->dest), ip4_addr_get_u32(&netif->ip_addr), - ip4_addr_get_u32(&iphdr->dest) & ip4_addr_get_u32(&netif->netmask), - ip4_addr_get_u32(&netif->ip_addr) & ip4_addr_get_u32(&netif->netmask), - ip4_addr_get_u32(&iphdr->dest) & ~ip4_addr_get_u32(&netif->netmask))); - - /* interface is up and configured? */ - if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr)))) { - /* unicast to this interface address? */ - if (ip_addr_cmp(¤t_iphdr_dest, &(netif->ip_addr)) || - /* or broadcast on this interface network address? */ - ip_addr_isbroadcast(¤t_iphdr_dest, netif)) { - LWIP_DEBUGF(IP_DEBUG, ("ip_input: packet accepted on interface %c%c\n", - netif->name[0], netif->name[1])); - /* break out of for loop */ - break; - } -#if LWIP_AUTOIP - /* connections to link-local addresses must persist after changing - the netif's address (RFC3927 ch. 1.9) */ - if ((netif->autoip != NULL) && - ip_addr_cmp(¤t_iphdr_dest, &(netif->autoip->llipaddr))) { - LWIP_DEBUGF(IP_DEBUG, ("ip_input: LLA packet accepted on interface %c%c\n", - netif->name[0], netif->name[1])); - /* break out of for loop */ - break; - } -#endif /* LWIP_AUTOIP */ - } - if (first) { - first = 0; - netif = netif_list; - } else { - netif = netif->next; - } - if (netif == inp) { - netif = netif->next; - } - } while(netif != NULL); - } - -#if IP_ACCEPT_LINK_LAYER_ADDRESSING - /* Pass DHCP messages regardless of destination address. DHCP traffic is addressed - * using link layer addressing (such as Ethernet MAC) so we must not filter on IP. - * According to RFC 1542 section 3.1.1, referred by RFC 2131). - * - * If you want to accept private broadcast communication while a netif is down, - * define LWIP_IP_ACCEPT_UDP_PORT(dst_port), e.g.: - * - * #define LWIP_IP_ACCEPT_UDP_PORT(dst_port) ((dst_port) == PP_NTOHS(12345)) - */ - if (netif == NULL) { - /* remote port is DHCP server? */ - if (IPH_PROTO(iphdr) == IP_PROTO_UDP) { - struct udp_hdr *udphdr = (struct udp_hdr *)((uint8_t *)iphdr + iphdr_hlen); - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: UDP packet to DHCP client port %"U16_F"\n", - ntohs(udphdr->dest))); - if (IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(udphdr->dest)) { - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: DHCP packet accepted.\n")); - netif = inp; - check_ip_src = 0; - } - } - } -#endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */ - - /* broadcast or multicast packet source address? Compliant with RFC 1122: 3.2.1.3 */ -#if IP_ACCEPT_LINK_LAYER_ADDRESSING - /* DHCP servers need 0.0.0.0 to be allowed as source address (RFC 1.1.2.2: 3.2.1.3/a) */ - if (check_ip_src && current_iphdr_src.addr != IPADDR_ANY) // !ip_addr_isany(¤t_iphdr_src)) -#endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */ - { if ((ip_addr_isbroadcast(¤t_iphdr_src, inp)) || - (ip_addr_ismulticast(¤t_iphdr_src))) { - /* packet source is not valid */ - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("ip_input: packet source is not valid.\n")); - /* free (drop) packet pbufs */ - pbuf_free(p); - IP_STATS_INC(ip.drop); - snmp_inc_ipinaddrerrors(); - snmp_inc_ipindiscards(); - return ERR_OK; - } - } - - /* packet not for us? */ - if (netif == NULL) { - /* packet not for us, route or discard */ - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: packet not for us.\n")); -#if IP_FORWARD - /* non-broadcast packet? */ -#ifdef CONFIG_DONT_CARE_TP - if(inp->flags & NETIF_FLAG_IPSWITCH) -#else - if (!ip_addr_isbroadcast(¤t_iphdr_dest, inp)) -#endif -{ - /* try to forward IP packet on (other) interfaces */ - ip_forward(p, iphdr, inp); - } else -#endif /* IP_FORWARD */ - { - snmp_inc_ipinaddrerrors(); - snmp_inc_ipindiscards(); - } - pbuf_free(p); - return ERR_OK; - } - /* packet consists of multiple fragments? */ - if ((IPH_OFFSET(iphdr) & PP_HTONS(IP_OFFMASK | IP_MF)) != 0) { -#if IP_REASSEMBLY /* packet fragment reassembly code present? */ - LWIP_DEBUGF(IP_DEBUG, ("IP packet is a fragment (id=0x%04"X16_F" tot_len=%"U16_F" len=%"U16_F" MF=%"U16_F" offset=%"U16_F"), calling ip_reass()\n", - ntohs(IPH_ID(iphdr)), p->tot_len, ntohs(IPH_LEN(iphdr)), !!(IPH_OFFSET(iphdr) & PP_HTONS(IP_MF)), (ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK)*8)); - /* reassemble the packet*/ - p = ip_reass(p); - /* packet not fully reassembled yet? */ - if (p == NULL) { - return ERR_OK; - } - iphdr = (struct ip_hdr *)p->payload; -#else /* IP_REASSEMBLY == 0, no packet fragment reassembly code present */ - pbuf_free(p); - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("IP packet dropped since it was fragmented (0x%"X16_F") (while IP_REASSEMBLY == 0).\n", - ntohs(IPH_OFFSET(iphdr)))); - IP_STATS_INC(ip.opterr); - IP_STATS_INC(ip.drop); - /* unsupported protocol feature */ - snmp_inc_ipinunknownprotos(); - return ERR_OK; -#endif /* IP_REASSEMBLY */ - } - -#if IP_OPTIONS_ALLOWED == 0 /* no support for IP options in the IP header? */ - -#if LWIP_IGMP - /* there is an extra "router alert" option in IGMP messages which we allow for but do not police */ - if((iphdr_hlen > IP_HLEN) && (IPH_PROTO(iphdr) != IP_PROTO_IGMP)) { -#else - if (iphdr_hlen > IP_HLEN) { -#endif /* LWIP_IGMP */ - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("IP packet dropped since there were IP options (while IP_OPTIONS_ALLOWED == 0).\n")); - pbuf_free(p); - IP_STATS_INC(ip.opterr); - IP_STATS_INC(ip.drop); - /* unsupported protocol feature */ - snmp_inc_ipinunknownprotos(); - return ERR_OK; - } -#endif /* IP_OPTIONS_ALLOWED == 0 */ - - /* send to upper layers */ - LWIP_DEBUGF(IP_DEBUG, ("ip_input: \n")); - ip_debug_print(p); - LWIP_DEBUGF(IP_DEBUG, ("ip_input: p->len %"U16_F" p->tot_len %"U16_F"\n", p->len, p->tot_len)); - - current_netif = inp; - current_header = iphdr; - -#if LWIP_RAW - /* raw input did not eat the packet? */ - if (raw_input(p, inp) == 0) -#endif /* LWIP_RAW */ - { - switch (IPH_PROTO(iphdr)) { -#if LWIP_UDP - case IP_PROTO_UDP: -#if LWIP_UDPLITE - case IP_PROTO_UDPLITE: -#endif /* LWIP_UDPLITE */ - snmp_inc_ipindelivers(); - udp_input(p, inp); - break; -#endif /* LWIP_UDP */ -#if LWIP_TCP - case IP_PROTO_TCP: - snmp_inc_ipindelivers(); - tcp_input(p, inp); - break; -#endif /* LWIP_TCP */ -#if LWIP_ICMP - case IP_PROTO_ICMP: - snmp_inc_ipindelivers(); - icmp_input(p, inp); - break; -#endif /* LWIP_ICMP */ -#if LWIP_IGMP - case IP_PROTO_IGMP: - igmp_input(p, inp, ¤t_iphdr_dest); - break; -#endif /* LWIP_IGMP */ - default: -#if LWIP_ICMP - /* send ICMP destination protocol unreachable unless is was a broadcast */ - if (!ip_addr_isbroadcast(¤t_iphdr_dest, inp) && - !ip_addr_ismulticast(¤t_iphdr_dest)) { - p->payload = iphdr; - icmp_dest_unreach(p, ICMP_DUR_PROTO); - } -#endif /* LWIP_ICMP */ - pbuf_free(p); - - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("Unsupported transport protocol %"U16_F"\n", IPH_PROTO(iphdr))); - - IP_STATS_INC(ip.proterr); - IP_STATS_INC(ip.drop); - snmp_inc_ipinunknownprotos(); - } - } - - current_netif = NULL; - current_header = NULL; - ip_addr_set_any(¤t_iphdr_src); - ip_addr_set_any(¤t_iphdr_dest); - - return ERR_OK; -} - -/** - * Sends an IP packet on a network interface. This function constructs - * the IP header and calculates the IP header checksum. If the source - * IP address is NULL, the IP address of the outgoing network - * interface is filled in as source address. - * If the destination IP address is IP_HDRINCL, p is assumed to already - * include an IP header and p->payload points to it instead of the data. - * - * @param p the packet to send (p->payload points to the data, e.g. next - protocol header; if dest == IP_HDRINCL, p already includes an IP - header and p->payload points to that IP header) - * @param src the source IP address to send from (if src == IP_ADDR_ANY, the - * IP address of the netif used to send is used as source address) - * @param dest the destination IP address to send the packet to - * @param ttl the TTL value to be set in the IP header - * @param tos the TOS value to be set in the IP header - * @param proto the PROTOCOL to be set in the IP header - * @param netif the netif on which to send this packet - * @return ERR_OK if the packet was sent OK - * ERR_BUF if p doesn't have enough space for IP/LINK headers - * returns errors returned by netif->output - * - * @note ip_id: RFC791 "some host may be able to simply use - * unique identifiers independent of destination" - */ -err_t -ip_output_if(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, - uint8_t ttl, uint8_t tos, - uint8_t proto, struct netif *netif) -{ -#if IP_OPTIONS_SEND - return ip_output_if_opt(p, src, dest, ttl, tos, proto, netif, NULL, 0); -} - -/** - * Same as ip_output_if() but with the possibility to include IP options: - * - * @ param ip_options pointer to the IP options, copied into the IP header - * @ param optlen length of ip_options - */ -err_t ip_output_if_opt(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, - uint8_t ttl, uint8_t tos, uint8_t proto, struct netif *netif, void *ip_options, - uint16_t optlen) -{ -#endif /* IP_OPTIONS_SEND */ - struct ip_hdr *iphdr; - ip_addr_t dest_addr; -#if CHECKSUM_GEN_IP_INLINE - uint32_t chk_sum = 0; -#endif /* CHECKSUM_GEN_IP_INLINE */ - - /* pbufs passed to IP must have a ref-count of 1 as their payload pointer - gets altered as the packet is passed down the stack */ - LWIP_ASSERT("p->ref == 1", p->ref == 1); - - snmp_inc_ipoutrequests(); - - /* Should the IP header be generated or is it already included in p? */ - if (dest != IP_HDRINCL) { - uint16_t ip_hlen = IP_HLEN; -#if IP_OPTIONS_SEND - uint16_t optlen_aligned = 0; - if (optlen != 0) { -#if CHECKSUM_GEN_IP_INLINE - int i; -#endif /* CHECKSUM_GEN_IP_INLINE */ - /* round up to a multiple of 4 */ - optlen_aligned = ((optlen + 3) & ~3); - ip_hlen += optlen_aligned; - /* First write in the IP options */ - if (pbuf_header(p, optlen_aligned)) { - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_output_if_opt: not enough room for IP options in pbuf\n")); - IP_STATS_INC(ip.err); - snmp_inc_ipoutdiscards(); - return ERR_BUF; - } - MEMCPY(p->payload, ip_options, optlen); - if (optlen < optlen_aligned) { - /* zero the remaining bytes */ - memset(((char*)p->payload) + optlen, 0, optlen_aligned - optlen); - } -#if CHECKSUM_GEN_IP_INLINE - for (i = 0; i < optlen_aligned/2; i++) { - chk_sum += ((uint16_t*)p->payload)[i]; - } -#endif /* CHECKSUM_GEN_IP_INLINE */ - } -#endif /* IP_OPTIONS_SEND */ - /* generate IP header */ - if (pbuf_header(p, IP_HLEN)) { - LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_output: not enough room for IP header in pbuf\n")); - - IP_STATS_INC(ip.err); - snmp_inc_ipoutdiscards(); - return ERR_BUF; - } - - iphdr = (struct ip_hdr *)p->payload; - LWIP_ASSERT("check that first pbuf can hold struct ip_hdr", - (p->len >= sizeof(struct ip_hdr))); - - IPH_TTL_SET(iphdr, ttl); - IPH_PROTO_SET(iphdr, proto); -#if CHECKSUM_GEN_IP_INLINE - chk_sum += LWIP_MAKE_U16(proto, ttl); -#endif /* CHECKSUM_GEN_IP_INLINE */ - - /* dest cannot be NULL here */ - ip_addr_copy(iphdr->dest, *dest); -#if CHECKSUM_GEN_IP_INLINE - chk_sum += ip4_addr_get_u32(&iphdr->dest) & 0xFFFF; - chk_sum += ip4_addr_get_u32(&iphdr->dest) >> 16; -#endif /* CHECKSUM_GEN_IP_INLINE */ - - IPH_VHL_SET(iphdr, 4, ip_hlen / 4); - IPH_TOS_SET(iphdr, tos); -#if CHECKSUM_GEN_IP_INLINE - chk_sum += LWIP_MAKE_U16(tos, iphdr->_v_hl); -#endif /* CHECKSUM_GEN_IP_INLINE */ - IPH_LEN_SET(iphdr, htons(p->tot_len)); -#if CHECKSUM_GEN_IP_INLINE - chk_sum += iphdr->_len; -#endif /* CHECKSUM_GEN_IP_INLINE */ - IPH_OFFSET_SET(iphdr, 0); - IPH_ID_SET(iphdr, htons(ip_id)); -#if CHECKSUM_GEN_IP_INLINE - chk_sum += iphdr->_id; -#endif /* CHECKSUM_GEN_IP_INLINE */ - ++ip_id; - - if (ip_addr_isany(src)) { - ip_addr_copy(iphdr->src, netif->ip_addr); - } else { - /* src cannot be NULL here */ - ip_addr_copy(iphdr->src, *src); - } - -#if CHECKSUM_GEN_IP_INLINE - chk_sum += ip4_addr_get_u32(&iphdr->src) & 0xFFFF; - chk_sum += ip4_addr_get_u32(&iphdr->src) >> 16; - chk_sum = (chk_sum >> 16) + (chk_sum & 0xFFFF); - chk_sum = (chk_sum >> 16) + chk_sum; - chk_sum = ~chk_sum; - iphdr->_chksum = chk_sum; /* network order */ -#else /* CHECKSUM_GEN_IP_INLINE */ - IPH_CHKSUM_SET(iphdr, 0); -#if CHECKSUM_GEN_IP - IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, ip_hlen)); -#endif -#endif /* CHECKSUM_GEN_IP_INLINE */ - } else { - /* IP header already included in p */ - iphdr = (struct ip_hdr *)p->payload; - ip_addr_copy(dest_addr, iphdr->dest); - dest = &dest_addr; - } - - IP_STATS_INC(ip.xmit); - - LWIP_DEBUGF(IP_DEBUG, ("ip_output_if: %c%c%"U16_F"\n", netif->name[0], netif->name[1], netif->num)); - ip_debug_print(p); - -#if ENABLE_LOOPBACK - if (ip_addr_cmp(dest, &netif->ip_addr)) { - /* Packet to self, enqueue it for loopback */ - LWIP_DEBUGF(IP_DEBUG, ("netif_loop_output()")); - return netif_loop_output(netif, p, dest); - } -#if LWIP_IGMP - if ((p->flags & PBUF_FLAG_MCASTLOOP) != 0) { - netif_loop_output(netif, p, dest); - } -#endif /* LWIP_IGMP */ -#endif /* ENABLE_LOOPBACK */ -#if IP_FRAG - /* don't fragment if interface has mtu set to 0 [loopif] */ - if (netif->mtu && (p->tot_len > netif->mtu)) { - return ip_frag(p, netif, dest); - } -#endif /* IP_FRAG */ - - LWIP_DEBUGF(IP_DEBUG, ("netif->output()")); - return netif->output(netif, p, dest); -} - -/** - * Simple interface to ip_output_if. It finds the outgoing network - * interface and calls upon ip_output_if to do the actual work. - * - * @param p the packet to send (p->payload points to the data, e.g. next - protocol header; if dest == IP_HDRINCL, p already includes an IP - header and p->payload points to that IP header) - * @param src the source IP address to send from (if src == IP_ADDR_ANY, the - * IP address of the netif used to send is used as source address) - * @param dest the destination IP address to send the packet to - * @param ttl the TTL value to be set in the IP header - * @param tos the TOS value to be set in the IP header - * @param proto the PROTOCOL to be set in the IP header - * - * @return ERR_RTE if no route is found - * see ip_output_if() for more return values - */ -err_t -ip_output(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, - uint8_t ttl, uint8_t tos, uint8_t proto) -{ - struct netif *netif; - - /* pbufs passed to IP must have a ref-count of 1 as their payload pointer - gets altered as the packet is passed down the stack */ - LWIP_ASSERT("p->ref == 1", p->ref == 1); - - if ((netif = ip_route(dest)) == NULL) { - LWIP_DEBUGF(IP_DEBUG, ("ip_output: No route to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - ip4_addr1_16(dest), ip4_addr2_16(dest), ip4_addr3_16(dest), ip4_addr4_16(dest))); - IP_STATS_INC(ip.rterr); - return ERR_RTE; - } - - return ip_output_if(p, src, dest, ttl, tos, proto, netif); -} - -#if LWIP_NETIF_HWADDRHINT -/** Like ip_output, but takes and addr_hint pointer that is passed on to netif->addr_hint - * before calling ip_output_if. - * - * @param p the packet to send (p->payload points to the data, e.g. next - protocol header; if dest == IP_HDRINCL, p already includes an IP - header and p->payload points to that IP header) - * @param src the source IP address to send from (if src == IP_ADDR_ANY, the - * IP address of the netif used to send is used as source address) - * @param dest the destination IP address to send the packet to - * @param ttl the TTL value to be set in the IP header - * @param tos the TOS value to be set in the IP header - * @param proto the PROTOCOL to be set in the IP header - * @param addr_hint address hint pointer set to netif->addr_hint before - * calling ip_output_if() - * - * @return ERR_RTE if no route is found - * see ip_output_if() for more return values - */ -err_t -ip_output_hinted(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, - uint8_t ttl, uint8_t tos, uint8_t proto, uint8_t *addr_hint) -{ - struct netif *netif; - err_t err; - - /* pbufs passed to IP must have a ref-count of 1 as their payload pointer - gets altered as the packet is passed down the stack */ - LWIP_ASSERT("p->ref == 1", p->ref == 1); - - if ((netif = ip_route(dest)) == NULL) { - LWIP_DEBUGF(IP_DEBUG, ("ip_output: No route to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - ip4_addr1_16(dest), ip4_addr2_16(dest), ip4_addr3_16(dest), ip4_addr4_16(dest))); - IP_STATS_INC(ip.rterr); - return ERR_RTE; - } - - NETIF_SET_HWADDRHINT(netif, addr_hint); - err = ip_output_if(p, src, dest, ttl, tos, proto, netif); - NETIF_SET_HWADDRHINT(netif, NULL); - - return err; -} -#endif /* LWIP_NETIF_HWADDRHINT*/ - -#if IP_DEBUG -/* Print an IP header by using LWIP_DEBUGF - * @param p an IP packet, p->payload pointing to the IP header - */ -void -ip_debug_print(struct pbuf *p) -{ - struct ip_hdr *iphdr = (struct ip_hdr *)p->payload; - - LWIP_DEBUGF(IP_DEBUG, ("IP header:\n")); - LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(IP_DEBUG, ("|%2"S16_F" |%2"S16_F" | 0x%02"X16_F" | %5"U16_F" | (v, hl, tos, len)\n", - IPH_V(iphdr), - IPH_HL(iphdr), - IPH_TOS(iphdr), - ntohs(IPH_LEN(iphdr)))); - LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(IP_DEBUG, ("| %5"U16_F" |%"U16_F"%"U16_F"%"U16_F"| %4"U16_F" | (id, flags, offset)\n", - ntohs(IPH_ID(iphdr)), - ntohs(IPH_OFFSET(iphdr)) >> 15 & 1, - ntohs(IPH_OFFSET(iphdr)) >> 14 & 1, - ntohs(IPH_OFFSET(iphdr)) >> 13 & 1, - ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK)); - LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | 0x%04"X16_F" | (ttl, proto, chksum)\n", - IPH_TTL(iphdr), - IPH_PROTO(iphdr), - ntohs(IPH_CHKSUM(iphdr)))); - LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | %3"U16_F" | %3"U16_F" | (src)\n", - ip4_addr1_16(&iphdr->src), - ip4_addr2_16(&iphdr->src), - ip4_addr3_16(&iphdr->src), - ip4_addr4_16(&iphdr->src))); - LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | %3"U16_F" | %3"U16_F" | (dest)\n", - ip4_addr1_16(&iphdr->dest), - ip4_addr2_16(&iphdr->dest), - ip4_addr3_16(&iphdr->dest), - ip4_addr4_16(&iphdr->dest))); - LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); -} -#endif /* IP_DEBUG */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/ip_addr.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/ip_addr.c deleted file mode 100644 index f3369fd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/ip_addr.c +++ /dev/null @@ -1,312 +0,0 @@ -/** - * @file - * This is the IPv4 address tools implementation. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" - -/* used by IP_ADDR_ANY and IP_ADDR_BROADCAST in ip_addr.h */ -const ip_addr_t ip_addr_any = { IPADDR_ANY }; -const ip_addr_t ip_addr_broadcast = { IPADDR_BROADCAST }; - -/** - * Determine if an address is a broadcast address on a network interface - * - * @param addr address to be checked - * @param netif the network interface against which the address is checked - * @return returns non-zero if the address is a broadcast address - */ -uint8_t -ip4_addr_isbroadcast(uint32_t addr, const struct netif *netif) -{ - ip_addr_t ipaddr; - ip4_addr_set_u32(&ipaddr, addr); - - /* all ones (broadcast) or all zeroes (old skool broadcast) */ - if ((~addr == IPADDR_ANY) || - (addr == IPADDR_ANY)) { - return 1; - /* no broadcast support on this network interface? */ - } else if ((netif->flags & NETIF_FLAG_BROADCAST) == 0) { - /* the given address cannot be a broadcast address - * nor can we check against any broadcast addresses */ - return 0; - /* address matches network interface address exactly? => no broadcast */ - } else if (addr == ip4_addr_get_u32(&netif->ip_addr)) { - return 0; - /* on the same (sub) network... */ - } else if (ip_addr_netcmp(&ipaddr, &(netif->ip_addr), &(netif->netmask)) - /* ...and host identifier bits are all ones? =>... */ - && ((addr & ~ip4_addr_get_u32(&netif->netmask)) == - (IPADDR_BROADCAST & ~ip4_addr_get_u32(&netif->netmask)))) { - /* => network broadcast address */ - return 1; - } else { - return 0; - } -} - -/** Checks if a netmask is valid (starting with ones, then only zeros) - * - * @param netmask the IPv4 netmask to check (in network byte order!) - * @return 1 if the netmask is valid, 0 if it is not - */ -uint8_t -ip4_addr_netmask_valid(uint32_t netmask) -{ - uint32_t mask; - uint32_t nm_hostorder = lwip_htonl(netmask); - - /* first, check for the first zero */ - for (mask = 1UL << 31 ; mask != 0; mask >>= 1) { - if ((nm_hostorder & mask) == 0) { - break; - } - } - /* then check that there is no one */ - for (; mask != 0; mask >>= 1) { - if ((nm_hostorder & mask) != 0) { - /* there is a one after the first zero -> invalid */ - return 0; - } - } - /* no one after the first zero -> valid */ - return 1; -} - -/* Here for now until needed in other places in lwIP */ -#ifndef isprint -#define in_range(c, lo, up) ((uint8_t)c >= lo && (uint8_t)c <= up) -#define isprint(c) in_range(c, 0x20, 0x7f) -#define isdigit(c) in_range(c, '0', '9') -#define isxdigit(c) (isdigit(c) || in_range(c, 'a', 'f') || in_range(c, 'A', 'F')) -#define islower(c) in_range(c, 'a', 'z') -#define isspace(c) (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v') -#endif - -/** - * Ascii internet address interpretation routine. - * The value returned is in network order. - * - * @param cp IP address in ascii represenation (e.g. "127.0.0.1") - * @return ip address in network order - */ -uint32_t -ipaddr_addr(const char *cp) -{ - ip_addr_t val; - - if (ipaddr_aton(cp, &val)) { - return ip4_addr_get_u32(&val); - } - return (IPADDR_NONE); -} - -/** - * Check whether "cp" is a valid ascii representation - * of an Internet address and convert to a binary address. - * Returns 1 if the address is valid, 0 if not. - * This replaces inet_addr, the return value from which - * cannot distinguish between failure and a local broadcast address. - * - * @param cp IP address in ascii represenation (e.g. "127.0.0.1") - * @param addr pointer to which to save the ip address in network order - * @return 1 if cp could be converted to addr, 0 on failure - */ -int -ipaddr_aton(const char *cp, ip_addr_t *addr) -{ - uint32_t val; - uint8_t base; - char c; - uint32_t parts[4]; - uint32_t *pp = parts; - - c = *cp; - for (;;) { - /* - * Collect number up to ``.''. - * Values are specified as for C: - * 0x=hex, 0=octal, 1-9=decimal. - */ - if (!isdigit(c)) - return (0); - val = 0; - base = 10; - if (c == '0') { - c = *++cp; - if (c == 'x' || c == 'X') { - base = 16; - c = *++cp; - } else - base = 8; - } - for (;;) { - if (isdigit(c)) { - val = (val * base) + (int)(c - '0'); - c = *++cp; - } else if (base == 16 && isxdigit(c)) { - val = (val << 4) | (int)(c + 10 - (islower(c) ? 'a' : 'A')); - c = *++cp; - } else - break; - } - if (c == '.') { - /* - * Internet format: - * a.b.c.d - * a.b.c (with c treated as 16 bits) - * a.b (with b treated as 24 bits) - */ - if (pp >= parts + 3) { - return (0); - } - *pp++ = val; - c = *++cp; - } else - break; - } - /* - * Check for trailing characters. - */ - if (c != '\0' && !isspace(c)) { - return (0); - } - /* - * Concoct the address according to - * the number of parts specified. - */ - switch (pp - parts + 1) { - - case 0: - return (0); /* initial nondigit */ - - case 1: /* a -- 32 bits */ - break; - - case 2: /* a.b -- 8.24 bits */ - if (val > 0xffffffUL) { - return (0); - } - val |= parts[0] << 24; - break; - - case 3: /* a.b.c -- 8.8.16 bits */ - if (val > 0xffff) { - return (0); - } - val |= (parts[0] << 24) | (parts[1] << 16); - break; - - case 4: /* a.b.c.d -- 8.8.8.8 bits */ - if (val > 0xff) { - return (0); - } - val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); - break; - default: - LWIP_ASSERT("unhandled", 0); - break; - } - if (addr) { - ip4_addr_set_u32(addr, htonl(val)); - } - return (1); -} - -/** - * Convert numeric IP address into decimal dotted ASCII representation. - * returns ptr to static buffer; not reentrant! - * - * @param addr ip address in network order to convert - * @return pointer to a global static (!) buffer that holds the ASCII - * represenation of addr - */ -char * -ipaddr_ntoa(const ip_addr_t *addr) -{ - static char str[16]; - return ipaddr_ntoa_r(addr, str, 16); -} - -/** - * Same as ipaddr_ntoa, but reentrant since a user-supplied buffer is used. - * - * @param addr ip address in network order to convert - * @param buf target buffer where the string is stored - * @param buflen length of buf - * @return either pointer to buf which now holds the ASCII - * representation of addr or NULL if buf was too small - */ -char *ipaddr_ntoa_r(const ip_addr_t *addr, char *buf, int buflen) -{ - uint32_t s_addr; - char inv[3]; - char *rp; - uint8_t *ap; - uint8_t rem; - uint8_t n; - uint8_t i; - int len = 0; - - s_addr = ip4_addr_get_u32(addr); - - rp = buf; - ap = (uint8_t *)&s_addr; - for(n = 0; n < 4; n++) { - i = 0; - do { - rem = *ap % (uint8_t)10; - *ap /= (uint8_t)10; - inv[i++] = '0' + rem; - } while(*ap); - while(i--) { - if (len++ >= buflen) { - return NULL; - } - *rp++ = inv[i]; - } - if (len++ >= buflen) { - return NULL; - } - *rp++ = '.'; - ap++; - } - *--rp = 0; - return buf; -} diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/ip_frag.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/ip_frag.c deleted file mode 100644 index e2a623c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv4/ip_frag.c +++ /dev/null @@ -1,863 +0,0 @@ -/** - * @file - * This is the IPv4 packet segmentation and reassembly implementation. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Jani Monoses - * Simon Goldschmidt - * original reassembly code by Adam Dunkels - * - */ - -#include "lwip/opt.h" -#include "lwip/ip_frag.h" -#include "lwip/def.h" -#include "lwip/inet_chksum.h" -#include "lwip/netif.h" -#include "lwip/snmp.h" -#include "lwip/stats.h" -#include "lwip/icmp.h" - -#include - -#if IP_REASSEMBLY -/** - * The IP reassembly code currently has the following limitations: - * - IP header options are not supported - * - fragments must not overlap (e.g. due to different routes), - * currently, overlapping or duplicate fragments are thrown away - * if IP_REASS_CHECK_OVERLAP=1 (the default)! - * - * @todo: work with IP header options - */ - -/** Setting this to 0, you can turn off checking the fragments for overlapping - * regions. The code gets a little smaller. Only use this if you know that - * overlapping won't occur on your network! */ -#ifndef IP_REASS_CHECK_OVERLAP -#define IP_REASS_CHECK_OVERLAP 1 -#endif /* IP_REASS_CHECK_OVERLAP */ - -/** Set to 0 to prevent freeing the oldest datagram when the reassembly buffer is - * full (IP_REASS_MAX_PBUFS pbufs are enqueued). The code gets a little smaller. - * Datagrams will be freed by timeout only. Especially useful when MEMP_NUM_REASSDATA - * is set to 1, so one datagram can be reassembled at a time, only. */ -#ifndef IP_REASS_FREE_OLDEST -#define IP_REASS_FREE_OLDEST 1 -#endif /* IP_REASS_FREE_OLDEST */ - -#define IP_REASS_FLAG_LASTFRAG 0x01 - -/** This is a helper struct which holds the starting - * offset and the ending offset of this fragment to - * easily chain the fragments. - * It has the same packing requirements as the IP header, since it replaces - * the IP header in memory in incoming fragments (after copying it) to keep - * track of the various fragments. (-> If the IP header doesn't need packing, - * this struct doesn't need packing, too.) - */ -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct ip_reass_helper { - PACK_STRUCT_FIELD(struct pbuf *next_pbuf); - PACK_STRUCT_FIELD(uint16_t start); - PACK_STRUCT_FIELD(uint16_t end); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -#define IP_ADDRESSES_AND_ID_MATCH(iphdrA, iphdrB) \ - (ip_addr_cmp(&(iphdrA)->src, &(iphdrB)->src) && \ - ip_addr_cmp(&(iphdrA)->dest, &(iphdrB)->dest) && \ - IPH_ID(iphdrA) == IPH_ID(iphdrB)) ? 1 : 0 - -/* global variables */ -static struct ip_reassdata *reassdatagrams; -static uint16_t ip_reass_pbufcount; - -/* function prototypes */ -static void ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev); -static int ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev); - -/** - * Reassembly timer base function - * for both NO_SYS == 0 and 1 (!). - * - * Should be called every 1000 msec (defined by IP_TMR_INTERVAL). - */ -void -ip_reass_tmr(void) -{ - struct ip_reassdata *r, *prev = NULL; - - r = reassdatagrams; - while (r != NULL) { - /* Decrement the timer. Once it reaches 0, - * clean up the incomplete fragment assembly */ - if (r->timer > 0) { - r->timer--; - LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer dec %"U16_F"\n",(uint16_t)r->timer)); - prev = r; - r = r->next; - } else { - /* reassembly timed out */ - struct ip_reassdata *tmp; - LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer timed out\n")); - tmp = r; - /* get the next pointer before freeing */ - r = r->next; - /* free the helper struct and all enqueued pbufs */ - ip_reass_free_complete_datagram(tmp, prev); - } - } -} - -/** - * Free a datagram (struct ip_reassdata) and all its pbufs. - * Updates the total count of enqueued pbufs (ip_reass_pbufcount), - * SNMP counters and sends an ICMP time exceeded packet. - * - * @param ipr datagram to free - * @param prev the previous datagram in the linked list - * @return the number of pbufs freed - */ -static int -ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev) -{ - uint16_t pbufs_freed = 0; - uint8_t clen; - struct pbuf *p; - struct ip_reass_helper *iprh; - - LWIP_ASSERT("prev != ipr", prev != ipr); - if (prev != NULL) { - LWIP_ASSERT("prev->next == ipr", prev->next == ipr); - } - - snmp_inc_ipreasmfails(); -#if LWIP_ICMP - iprh = (struct ip_reass_helper *)ipr->p->payload; - if (iprh->start == 0) { - /* The first fragment was received, send ICMP time exceeded. */ - /* First, de-queue the first pbuf from r->p. */ - p = ipr->p; - ipr->p = iprh->next_pbuf; - /* Then, copy the original header into it. */ - SMEMCPY(p->payload, &ipr->iphdr, IP_HLEN); - icmp_time_exceeded(p, ICMP_TE_FRAG); - clen = pbuf_clen(p); - LWIP_ASSERT("pbufs_freed + clen <= 0xffff", pbufs_freed + clen <= 0xffff); - pbufs_freed += clen; - pbuf_free(p); - } -#endif /* LWIP_ICMP */ - - /* First, free all received pbufs. The individual pbufs need to be released - separately as they have not yet been chained */ - p = ipr->p; - while (p != NULL) { - struct pbuf *pcur; - iprh = (struct ip_reass_helper *)p->payload; - pcur = p; - /* get the next pointer before freeing */ - p = iprh->next_pbuf; - clen = pbuf_clen(pcur); - LWIP_ASSERT("pbufs_freed + clen <= 0xffff", pbufs_freed + clen <= 0xffff); - pbufs_freed += clen; - pbuf_free(pcur); - } - /* Then, unchain the struct ip_reassdata from the list and free it. */ - ip_reass_dequeue_datagram(ipr, prev); - LWIP_ASSERT("ip_reass_pbufcount >= clen", ip_reass_pbufcount >= pbufs_freed); - ip_reass_pbufcount -= pbufs_freed; - - return pbufs_freed; -} - -#if IP_REASS_FREE_OLDEST -/** - * Free the oldest datagram to make room for enqueueing new fragments. - * The datagram 'fraghdr' belongs to is not freed! - * - * @param fraghdr IP header of the current fragment - * @param pbufs_needed number of pbufs needed to enqueue - * (used for freeing other datagrams if not enough space) - * @return the number of pbufs freed - */ -static int -ip_reass_remove_oldest_datagram(struct ip_hdr *fraghdr, int pbufs_needed) -{ - /* @todo Can't we simply remove the last datagram in the - * linked list behind reassdatagrams? - */ - struct ip_reassdata *r, *oldest, *prev; - int pbufs_freed = 0, pbufs_freed_current; - int other_datagrams; - - /* Free datagrams until being allowed to enqueue 'pbufs_needed' pbufs, - * but don't free the datagram that 'fraghdr' belongs to! */ - do { - oldest = NULL; - prev = NULL; - other_datagrams = 0; - r = reassdatagrams; - while (r != NULL) { - if (!IP_ADDRESSES_AND_ID_MATCH(&r->iphdr, fraghdr)) { - /* Not the same datagram as fraghdr */ - other_datagrams++; - if (oldest == NULL) { - oldest = r; - } else if (r->timer <= oldest->timer) { - /* older than the previous oldest */ - oldest = r; - } - } - if (r->next != NULL) { - prev = r; - } - r = r->next; - } - if (oldest != NULL) { - pbufs_freed_current = ip_reass_free_complete_datagram(oldest, prev); - pbufs_freed += pbufs_freed_current; - } - } while ((pbufs_freed < pbufs_needed) && (other_datagrams > 1)); - return pbufs_freed; -} -#endif /* IP_REASS_FREE_OLDEST */ - -/** - * Enqueues a new fragment into the fragment queue - * @param fraghdr points to the new fragments IP hdr - * @param clen number of pbufs needed to enqueue (used for freeing other datagrams if not enough space) - * @return A pointer to the queue location into which the fragment was enqueued - */ -static struct ip_reassdata* -ip_reass_enqueue_new_datagram(struct ip_hdr *fraghdr, int clen) -{ - struct ip_reassdata* ipr; - /* No matching previous fragment found, allocate a new reassdata struct */ - ipr = (struct ip_reassdata *)memp_malloc(MEMP_REASSDATA); - if (ipr == NULL) { -#if IP_REASS_FREE_OLDEST - if (ip_reass_remove_oldest_datagram(fraghdr, clen) >= clen) { - ipr = (struct ip_reassdata *)memp_malloc(MEMP_REASSDATA); - } - if (ipr == NULL) -#endif /* IP_REASS_FREE_OLDEST */ - { - IPFRAG_STATS_INC(ip_frag.memerr); - LWIP_DEBUGF(IP_REASS_DEBUG,("Failed to alloc reassdata struct\n")); - return NULL; - } - } - memset(ipr, 0, sizeof(struct ip_reassdata)); - ipr->timer = IP_REASS_MAXAGE; - - /* enqueue the new structure to the front of the list */ - ipr->next = reassdatagrams; - reassdatagrams = ipr; - /* copy the ip header for later tests and input */ - /* @todo: no ip options supported? */ - SMEMCPY(&(ipr->iphdr), fraghdr, IP_HLEN); - return ipr; -} - -/** - * Dequeues a datagram from the datagram queue. Doesn't deallocate the pbufs. - * @param ipr points to the queue entry to dequeue - */ -static void -ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev) -{ - - /* dequeue the reass struct */ - if (reassdatagrams == ipr) { - /* it was the first in the list */ - reassdatagrams = ipr->next; - } else { - /* it wasn't the first, so it must have a valid 'prev' */ - LWIP_ASSERT("sanity check linked list", prev != NULL); - prev->next = ipr->next; - } - - /* now we can free the ip_reass struct */ - memp_free(MEMP_REASSDATA, ipr); -} - -/** - * Chain a new pbuf into the pbuf list that composes the datagram. The pbuf list - * will grow over time as new pbufs are rx. - * Also checks that the datagram passes basic continuity checks (if the last - * fragment was received at least once). - * @param root_p points to the 'root' pbuf for the current datagram being assembled. - * @param new_p points to the pbuf for the current fragment - * @return 0 if invalid, >0 otherwise - */ -static int -ip_reass_chain_frag_into_datagram_and_validate(struct ip_reassdata *ipr, struct pbuf *new_p) -{ - struct ip_reass_helper *iprh, *iprh_tmp, *iprh_prev=NULL; - struct pbuf *q; - uint16_t offset,len; - struct ip_hdr *fraghdr; - int valid = 1; - - /* Extract length and fragment offset from current fragment */ - fraghdr = (struct ip_hdr*)new_p->payload; - len = ntohs(IPH_LEN(fraghdr)) - IPH_HL(fraghdr) * 4; - offset = (ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) * 8; - - /* overwrite the fragment's ip header from the pbuf with our helper struct, - * and setup the embedded helper structure. */ - /* make sure the struct ip_reass_helper fits into the IP header */ - LWIP_ASSERT("sizeof(struct ip_reass_helper) <= IP_HLEN", - sizeof(struct ip_reass_helper) <= IP_HLEN); - iprh = (struct ip_reass_helper*)new_p->payload; - iprh->next_pbuf = NULL; - iprh->start = offset; - iprh->end = offset + len; - - /* Iterate through until we either get to the end of the list (append), - * or we find on with a larger offset (insert). */ - for (q = ipr->p; q != NULL;) { - iprh_tmp = (struct ip_reass_helper*)q->payload; - if (iprh->start < iprh_tmp->start) { - /* the new pbuf should be inserted before this */ - iprh->next_pbuf = q; - if (iprh_prev != NULL) { - /* not the fragment with the lowest offset */ -#if IP_REASS_CHECK_OVERLAP - if ((iprh->start < iprh_prev->end) || (iprh->end > iprh_tmp->start)) { - /* fragment overlaps with previous or following, throw away */ - goto freepbuf; - } -#endif /* IP_REASS_CHECK_OVERLAP */ - iprh_prev->next_pbuf = new_p; - } else { - /* fragment with the lowest offset */ - ipr->p = new_p; - } - break; - } else if(iprh->start == iprh_tmp->start) { - /* received the same datagram twice: no need to keep the datagram */ - goto freepbuf; -#if IP_REASS_CHECK_OVERLAP - } else if(iprh->start < iprh_tmp->end) { - /* overlap: no need to keep the new datagram */ - goto freepbuf; -#endif /* IP_REASS_CHECK_OVERLAP */ - } else { - /* Check if the fragments received so far have no wholes. */ - if (iprh_prev != NULL) { - if (iprh_prev->end != iprh_tmp->start) { - /* There is a fragment missing between the current - * and the previous fragment */ - valid = 0; - } - } - } - q = iprh_tmp->next_pbuf; - iprh_prev = iprh_tmp; - } - - /* If q is NULL, then we made it to the end of the list. Determine what to do now */ - if (q == NULL) { - if (iprh_prev != NULL) { - /* this is (for now), the fragment with the highest offset: - * chain it to the last fragment */ -#if IP_REASS_CHECK_OVERLAP - LWIP_ASSERT("check fragments don't overlap", iprh_prev->end <= iprh->start); -#endif /* IP_REASS_CHECK_OVERLAP */ - iprh_prev->next_pbuf = new_p; - if (iprh_prev->end != iprh->start) { - valid = 0; - } - } else { -#if IP_REASS_CHECK_OVERLAP - LWIP_ASSERT("no previous fragment, this must be the first fragment!", - ipr->p == NULL); -#endif /* IP_REASS_CHECK_OVERLAP */ - /* this is the first fragment we ever received for this ip datagram */ - ipr->p = new_p; - } - } - - /* At this point, the validation part begins: */ - /* If we already received the last fragment */ - if ((ipr->flags & IP_REASS_FLAG_LASTFRAG) != 0) { - /* and had no wholes so far */ - if (valid) { - /* then check if the rest of the fragments is here */ - /* Check if the queue starts with the first datagram */ - if (((struct ip_reass_helper*)ipr->p->payload)->start != 0) { - valid = 0; - } else { - /* and check that there are no wholes after this datagram */ - iprh_prev = iprh; - q = iprh->next_pbuf; - while (q != NULL) { - iprh = (struct ip_reass_helper*)q->payload; - if (iprh_prev->end != iprh->start) { - valid = 0; - break; - } - iprh_prev = iprh; - q = iprh->next_pbuf; - } - /* if still valid, all fragments are received - * (because to the MF==0 already arrived */ - if (valid) { - LWIP_ASSERT("sanity check", ipr->p != NULL); - LWIP_ASSERT("sanity check", - ((struct ip_reass_helper*)ipr->p->payload) != iprh); - LWIP_ASSERT("validate_datagram:next_pbuf!=NULL", - iprh->next_pbuf == NULL); - LWIP_ASSERT("validate_datagram:datagram end!=datagram len", - iprh->end == ipr->datagram_len); - } - } - } - /* If valid is 0 here, there are some fragments missing in the middle - * (since MF == 0 has already arrived). Such datagrams simply time out if - * no more fragments are received... */ - return valid; - } - /* If we come here, not all fragments were received, yet! */ - return 0; /* not yet valid! */ -#if IP_REASS_CHECK_OVERLAP -freepbuf: - ip_reass_pbufcount -= pbuf_clen(new_p); - pbuf_free(new_p); - return 0; -#endif /* IP_REASS_CHECK_OVERLAP */ -} - -/** - * Reassembles incoming IP fragments into an IP datagram. - * - * @param p points to a pbuf chain of the fragment - * @return NULL if reassembly is incomplete, ? otherwise - */ -struct pbuf * -ip_reass(struct pbuf *p) -{ - struct pbuf *r; - struct ip_hdr *fraghdr; - struct ip_reassdata *ipr; - struct ip_reass_helper *iprh; - uint16_t offset, len; - uint8_t clen; - struct ip_reassdata *ipr_prev = NULL; - - IPFRAG_STATS_INC(ip_frag.recv); - snmp_inc_ipreasmreqds(); - - fraghdr = (struct ip_hdr*)p->payload; - - if ((IPH_HL(fraghdr) * 4) != IP_HLEN) { - LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass: IP options currently not supported!\n")); - IPFRAG_STATS_INC(ip_frag.err); - goto nullreturn; - } - - offset = (ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) * 8; - len = ntohs(IPH_LEN(fraghdr)) - IPH_HL(fraghdr) * 4; - - /* Check if we are allowed to enqueue more datagrams. */ - clen = pbuf_clen(p); - if ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS) { -#if IP_REASS_FREE_OLDEST - if (!ip_reass_remove_oldest_datagram(fraghdr, clen) || - ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS)) -#endif /* IP_REASS_FREE_OLDEST */ - { - /* No datagram could be freed and still too many pbufs enqueued */ - LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass: Overflow condition: pbufct=%d, clen=%d, MAX=%d\n", - ip_reass_pbufcount, clen, IP_REASS_MAX_PBUFS)); - IPFRAG_STATS_INC(ip_frag.memerr); - /* @todo: send ICMP time exceeded here? */ - /* drop this pbuf */ - goto nullreturn; - } - } - - /* Look for the datagram the fragment belongs to in the current datagram queue, - * remembering the previous in the queue for later dequeueing. */ - for (ipr = reassdatagrams; ipr != NULL; ipr = ipr->next) { - /* Check if the incoming fragment matches the one currently present - in the reassembly buffer. If so, we proceed with copying the - fragment into the buffer. */ - if (IP_ADDRESSES_AND_ID_MATCH(&ipr->iphdr, fraghdr)) { - LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass: matching previous fragment ID=%"X16_F"\n", - ntohs(IPH_ID(fraghdr)))); - IPFRAG_STATS_INC(ip_frag.cachehit); - break; - } - ipr_prev = ipr; - } - - if (ipr == NULL) { - /* Enqueue a new datagram into the datagram queue */ - ipr = ip_reass_enqueue_new_datagram(fraghdr, clen); - /* Bail if unable to enqueue */ - if(ipr == NULL) { - goto nullreturn; - } - } else { - if (((ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) == 0) && - ((ntohs(IPH_OFFSET(&ipr->iphdr)) & IP_OFFMASK) != 0)) { - /* ipr->iphdr is not the header from the first fragment, but fraghdr is - * -> copy fraghdr into ipr->iphdr since we want to have the header - * of the first fragment (for ICMP time exceeded and later, for copying - * all options, if supported)*/ - SMEMCPY(&ipr->iphdr, fraghdr, IP_HLEN); - } - } - /* Track the current number of pbufs current 'in-flight', in order to limit - the number of fragments that may be enqueued at any one time */ - ip_reass_pbufcount += clen; - - /* At this point, we have either created a new entry or pointing - * to an existing one */ - - /* check for 'no more fragments', and update queue entry*/ - if ((IPH_OFFSET(fraghdr) & PP_NTOHS(IP_MF)) == 0) { - ipr->flags |= IP_REASS_FLAG_LASTFRAG; - ipr->datagram_len = offset + len; - LWIP_DEBUGF(IP_REASS_DEBUG, - ("ip_reass: last fragment seen, total len %"S16_F"\n", - ipr->datagram_len)); - } - /* find the right place to insert this pbuf */ - /* @todo: trim pbufs if fragments are overlapping */ - if (ip_reass_chain_frag_into_datagram_and_validate(ipr, p)) { - /* the totally last fragment (flag more fragments = 0) was received at least - * once AND all fragments are received */ - ipr->datagram_len += IP_HLEN; - - /* save the second pbuf before copying the header over the pointer */ - r = ((struct ip_reass_helper*)ipr->p->payload)->next_pbuf; - - /* copy the original ip header back to the first pbuf */ - fraghdr = (struct ip_hdr*)(ipr->p->payload); - SMEMCPY(fraghdr, &ipr->iphdr, IP_HLEN); - IPH_LEN_SET(fraghdr, htons(ipr->datagram_len)); - IPH_OFFSET_SET(fraghdr, 0); - IPH_CHKSUM_SET(fraghdr, 0); - /* @todo: do we need to set calculate the correct checksum? */ - IPH_CHKSUM_SET(fraghdr, inet_chksum(fraghdr, IP_HLEN)); - - p = ipr->p; - - /* chain together the pbufs contained within the reass_data list. */ - while(r != NULL) { - iprh = (struct ip_reass_helper*)r->payload; - - /* hide the ip header for every succeding fragment */ - pbuf_header(r, -IP_HLEN); - pbuf_cat(p, r); - r = iprh->next_pbuf; - } - /* release the sources allocate for the fragment queue entry */ - ip_reass_dequeue_datagram(ipr, ipr_prev); - - /* and adjust the number of pbufs currently queued for reassembly. */ - ip_reass_pbufcount -= pbuf_clen(p); - - /* Return the pbuf chain */ - return p; - } - /* the datagram is not (yet?) reassembled completely */ - LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass_pbufcount: %d out\n", ip_reass_pbufcount)); - return NULL; - -nullreturn: - LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass: nullreturn\n")); - IPFRAG_STATS_INC(ip_frag.drop); - pbuf_free(p); - return NULL; -} -#endif /* IP_REASSEMBLY */ - -#if IP_FRAG -#if IP_FRAG_USES_STATIC_BUF -static uint8_t buf[LWIP_MEM_ALIGN_SIZE(IP_FRAG_MAX_MTU + MEM_ALIGNMENT - 1)]; -#else /* IP_FRAG_USES_STATIC_BUF */ - -#if !LWIP_NETIF_TX_SINGLE_PBUF -/** Allocate a new struct pbuf_custom_ref */ -static struct pbuf_custom_ref* -ip_frag_alloc_pbuf_custom_ref(void) -{ - return (struct pbuf_custom_ref*)memp_malloc(MEMP_FRAG_PBUF); -} - -/** Free a struct pbuf_custom_ref */ -static void -ip_frag_free_pbuf_custom_ref(struct pbuf_custom_ref* p) -{ - LWIP_ASSERT("p != NULL", p != NULL); - memp_free(MEMP_FRAG_PBUF, p); -} - -/** Free-callback function to free a 'struct pbuf_custom_ref', called by - * pbuf_free. */ -static void -ipfrag_free_pbuf_custom(struct pbuf *p) -{ - struct pbuf_custom_ref *pcr = (struct pbuf_custom_ref*)p; - LWIP_ASSERT("pcr != NULL", pcr != NULL); - LWIP_ASSERT("pcr == p", (void*)pcr == (void*)p); - if (pcr->original != NULL) { - pbuf_free(pcr->original); - } - ip_frag_free_pbuf_custom_ref(pcr); -} -#endif /* !LWIP_NETIF_TX_SINGLE_PBUF */ -#endif /* IP_FRAG_USES_STATIC_BUF */ - -/** - * Fragment an IP datagram if too large for the netif. - * - * Chop the datagram in MTU sized chunks and send them in order - * by using a fixed size static memory buffer (PBUF_REF) or - * point PBUF_REFs into p (depending on IP_FRAG_USES_STATIC_BUF). - * - * @param p ip packet to send - * @param netif the netif on which to send - * @param dest destination ip address to which to send - * - * @return ERR_OK if sent successfully, err_t otherwise - */ -err_t -ip_frag(struct pbuf *p, struct netif *netif, ip_addr_t *dest) -{ - struct pbuf *rambuf; -#if IP_FRAG_USES_STATIC_BUF - struct pbuf *header; -#else -#if !LWIP_NETIF_TX_SINGLE_PBUF - struct pbuf *newpbuf; -#endif - struct ip_hdr *original_iphdr; -#endif - struct ip_hdr *iphdr; - uint16_t nfb; - uint16_t left, cop; - uint16_t mtu = netif->mtu; - uint16_t ofo, omf; - uint16_t last; - uint16_t poff = IP_HLEN; - uint16_t tmp; -#if !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF - uint16_t newpbuflen = 0; - uint16_t left_to_copy; -#endif - - /* Get a RAM based MTU sized pbuf */ -#if IP_FRAG_USES_STATIC_BUF - /* When using a static buffer, we use a PBUF_REF, which we will - * use to reference the packet (without link header). - * Layer and length is irrelevant. - */ - rambuf = pbuf_alloc(PBUF_LINK, 0, PBUF_REF); - if (rambuf == NULL) { - LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_frag: pbuf_alloc(PBUF_LINK, 0, PBUF_REF) failed\n")); - return ERR_MEM; - } - rambuf->tot_len = rambuf->len = mtu; - rambuf->payload = LWIP_MEM_ALIGN((void *)buf); - - /* Copy the IP header in it */ - iphdr = (struct ip_hdr *)rambuf->payload; - SMEMCPY(iphdr, p->payload, IP_HLEN); -#else /* IP_FRAG_USES_STATIC_BUF */ - original_iphdr = (struct ip_hdr *)p->payload; - iphdr = original_iphdr; -#endif /* IP_FRAG_USES_STATIC_BUF */ - - /* Save original offset */ - tmp = ntohs(IPH_OFFSET(iphdr)); - ofo = tmp & IP_OFFMASK; - omf = tmp & IP_MF; - - left = p->tot_len - IP_HLEN; - - nfb = (mtu - IP_HLEN) / 8; - - while (left) { - last = (left <= mtu - IP_HLEN); - - /* Set new offset and MF flag */ - tmp = omf | (IP_OFFMASK & (ofo)); - if (!last) { - tmp = tmp | IP_MF; - } - - /* Fill this fragment */ - cop = last ? left : nfb * 8; - -#if IP_FRAG_USES_STATIC_BUF - poff += pbuf_copy_partial(p, (uint8_t*)iphdr + IP_HLEN, cop, poff); -#else /* IP_FRAG_USES_STATIC_BUF */ -#if LWIP_NETIF_TX_SINGLE_PBUF - rambuf = pbuf_alloc(PBUF_IP, cop, PBUF_RAM); - if (rambuf == NULL) { - return ERR_MEM; - } - LWIP_ASSERT("this needs a pbuf in one piece!", - (rambuf->len == rambuf->tot_len) && (rambuf->next == NULL)); - poff += pbuf_copy_partial(p, rambuf->payload, cop, poff); - /* make room for the IP header */ - if(pbuf_header(rambuf, IP_HLEN)) { - pbuf_free(rambuf); - return ERR_MEM; - } - /* fill in the IP header */ - SMEMCPY(rambuf->payload, original_iphdr, IP_HLEN); - iphdr = rambuf->payload; -#else /* LWIP_NETIF_TX_SINGLE_PBUF */ - /* When not using a static buffer, create a chain of pbufs. - * The first will be a PBUF_RAM holding the link and IP header. - * The rest will be PBUF_REFs mirroring the pbuf chain to be fragged, - * but limited to the size of an mtu. - */ - rambuf = pbuf_alloc(PBUF_LINK, IP_HLEN, PBUF_RAM); - if (rambuf == NULL) { - return ERR_MEM; - } - LWIP_ASSERT("this needs a pbuf in one piece!", - (p->len >= (IP_HLEN))); - SMEMCPY(rambuf->payload, original_iphdr, IP_HLEN); - iphdr = (struct ip_hdr *)rambuf->payload; - - /* Can just adjust p directly for needed offset. */ - p->payload = (uint8_t *)p->payload + poff; - p->len -= poff; - - left_to_copy = cop; - while (left_to_copy) { - struct pbuf_custom_ref *pcr; - newpbuflen = (left_to_copy < p->len) ? left_to_copy : p->len; - /* Is this pbuf already empty? */ - if (!newpbuflen) { - p = p->next; - continue; - } - pcr = ip_frag_alloc_pbuf_custom_ref(); - if (pcr == NULL) { - pbuf_free(rambuf); - return ERR_MEM; - } - /* Mirror this pbuf, although we might not need all of it. */ - newpbuf = pbuf_alloced_custom(PBUF_RAW, newpbuflen, PBUF_REF, &pcr->pc, p->payload, newpbuflen); - if (newpbuf == NULL) { - ip_frag_free_pbuf_custom_ref(pcr); - pbuf_free(rambuf); - return ERR_MEM; - } - pbuf_ref(p); - pcr->original = p; - pcr->pc.custom_free_function = ipfrag_free_pbuf_custom; - - /* Add it to end of rambuf's chain, but using pbuf_cat, not pbuf_chain - * so that it is removed when pbuf_dechain is later called on rambuf. - */ - pbuf_cat(rambuf, newpbuf); - left_to_copy -= newpbuflen; - if (left_to_copy) { - p = p->next; - } - } - poff = newpbuflen; -#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ -#endif /* IP_FRAG_USES_STATIC_BUF */ - - /* Correct header */ - IPH_OFFSET_SET(iphdr, htons(tmp)); - IPH_LEN_SET(iphdr, htons(cop + IP_HLEN)); - IPH_CHKSUM_SET(iphdr, 0); - IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN)); - -#if IP_FRAG_USES_STATIC_BUF - if (last) { - pbuf_realloc(rambuf, left + IP_HLEN); - } - - /* This part is ugly: we alloc a RAM based pbuf for - * the link level header for each chunk and then - * free it.A PBUF_ROM style pbuf for which pbuf_header - * worked would make things simpler. - */ - header = pbuf_alloc(PBUF_LINK, 0, PBUF_RAM); - if (header != NULL) { - pbuf_chain(header, rambuf); - netif->output(netif, header, dest); - IPFRAG_STATS_INC(ip_frag.xmit); - snmp_inc_ipfragcreates(); - pbuf_free(header); - } else { - LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_frag: pbuf_alloc() for header failed\n")); - pbuf_free(rambuf); - return ERR_MEM; - } -#else /* IP_FRAG_USES_STATIC_BUF */ - /* No need for separate header pbuf - we allowed room for it in rambuf - * when allocated. - */ - netif->output(netif, rambuf, dest); - IPFRAG_STATS_INC(ip_frag.xmit); - - /* Unfortunately we can't reuse rambuf - the hardware may still be - * using the buffer. Instead we free it (and the ensuing chain) and - * recreate it next time round the loop. If we're lucky the hardware - * will have already sent the packet, the free will really free, and - * there will be zero memory penalty. - */ - - pbuf_free(rambuf); -#endif /* IP_FRAG_USES_STATIC_BUF */ - left -= cop; - ofo += nfb; - } -#if IP_FRAG_USES_STATIC_BUF - pbuf_free(rambuf); -#endif /* IP_FRAG_USES_STATIC_BUF */ - snmp_inc_ipfragoks(); - return ERR_OK; -} -#endif /* IP_FRAG */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/README b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/README deleted file mode 100644 index 3620004..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/README +++ /dev/null @@ -1 +0,0 @@ -IPv6 support in lwIP is very experimental. diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/icmp6.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/icmp6.c deleted file mode 100644 index 4fcc895..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/icmp6.c +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -/* Some ICMP messages should be passed to the transport protocols. This - is not implemented. */ - -#include "lwip/opt.h" - -#if LWIP_ICMP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/icmp.h" -#include "lwip/inet.h" -#include "lwip/ip.h" -#include "lwip/def.h" -#include "lwip/stats.h" - -void -icmp_input(struct pbuf *p, struct netif *inp) -{ - u8_t type; - struct icmp_echo_hdr *iecho; - struct ip_hdr *iphdr; - struct ip_addr tmpaddr; - - ICMP_STATS_INC(icmp.recv); - - /* TODO: check length before accessing payload! */ - - type = ((u8_t *)p->payload)[0]; - - switch (type) { - case ICMP6_ECHO: - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ping\n")); - - if (p->tot_len < sizeof(struct icmp_echo_hdr)) { - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: bad ICMP echo received\n")); - - pbuf_free(p); - ICMP_STATS_INC(icmp.lenerr); - return; - } - iecho = p->payload; - iphdr = (struct ip_hdr *)((u8_t *)p->payload - IP_HLEN); - if (inet_chksum_pbuf(p) != 0) { - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: checksum failed for received ICMP echo (%"X16_F")\n", inet_chksum_pseudo(p, &(iphdr->src), &(iphdr->dest), IP_PROTO_ICMP, p->tot_len))); - ICMP_STATS_INC(icmp.chkerr); - /* return;*/ - } - LWIP_DEBUGF(ICMP_DEBUG, ("icmp: p->len %"S16_F" p->tot_len %"S16_F"\n", p->len, p->tot_len)); - ip_addr_set(&tmpaddr, &(iphdr->src)); - ip_addr_set(&(iphdr->src), &(iphdr->dest)); - ip_addr_set(&(iphdr->dest), &tmpaddr); - iecho->type = ICMP6_ER; - /* adjust the checksum */ - if (iecho->chksum >= htons(0xffff - (ICMP6_ECHO << 8))) { - iecho->chksum += htons(ICMP6_ECHO << 8) + 1; - } else { - iecho->chksum += htons(ICMP6_ECHO << 8); - } - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: checksum failed for received ICMP echo (%"X16_F")\n", inet_chksum_pseudo(p, &(iphdr->src), &(iphdr->dest), IP_PROTO_ICMP, p->tot_len))); - ICMP_STATS_INC(icmp.xmit); - - /* LWIP_DEBUGF("icmp: p->len %"U16_F" p->tot_len %"U16_F"\n", p->len, p->tot_len);*/ - ip_output_if (p, &(iphdr->src), IP_HDRINCL, - iphdr->hoplim, IP_PROTO_ICMP, inp); - break; - default: - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ICMP type %"S16_F" not supported.\n", (s16_t)type)); - ICMP_STATS_INC(icmp.proterr); - ICMP_STATS_INC(icmp.drop); - } - - pbuf_free(p); -} - -void -icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t) -{ - struct pbuf *q; - struct ip_hdr *iphdr; - struct icmp_dur_hdr *idur; - - /* @todo: can this be PBUF_LINK instead of PBUF_IP? */ - q = pbuf_alloc(PBUF_IP, 8 + IP_HLEN + 8, PBUF_RAM); - /* ICMP header + IP header + 8 bytes of data */ - if (q == NULL) { - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_dest_unreach: failed to allocate pbuf for ICMP packet.\n")); - pbuf_free(p); - return; - } - LWIP_ASSERT("check that first pbuf can hold icmp message", - (q->len >= (8 + IP_HLEN + 8))); - - iphdr = p->payload; - - idur = q->payload; - idur->type = (u8_t)ICMP6_DUR; - idur->icode = (u8_t)t; - - SMEMCPY((u8_t *)q->payload + 8, p->payload, IP_HLEN + 8); - - /* calculate checksum */ - idur->chksum = 0; - idur->chksum = inet_chksum(idur, q->len); - ICMP_STATS_INC(icmp.xmit); - - ip_output(q, NULL, - (struct ip_addr *)&(iphdr->src), ICMP_TTL, IP_PROTO_ICMP); - pbuf_free(q); -} - -void -icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t) -{ - struct pbuf *q; - struct ip_hdr *iphdr; - struct icmp_te_hdr *tehdr; - - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded\n")); - - /* @todo: can this be PBUF_LINK instead of PBUF_IP? */ - q = pbuf_alloc(PBUF_IP, 8 + IP_HLEN + 8, PBUF_RAM); - /* ICMP header + IP header + 8 bytes of data */ - if (q == NULL) { - LWIP_DEBUGF(ICMP_DEBUG, ("icmp_dest_unreach: failed to allocate pbuf for ICMP packet.\n")); - pbuf_free(p); - return; - } - LWIP_ASSERT("check that first pbuf can hold icmp message", - (q->len >= (8 + IP_HLEN + 8))); - - iphdr = p->payload; - - tehdr = q->payload; - tehdr->type = (u8_t)ICMP6_TE; - tehdr->icode = (u8_t)t; - - /* copy fields from original packet */ - SMEMCPY((u8_t *)q->payload + 8, (u8_t *)p->payload, IP_HLEN + 8); - - /* calculate checksum */ - tehdr->chksum = 0; - tehdr->chksum = inet_chksum(tehdr, q->len); - ICMP_STATS_INC(icmp.xmit); - ip_output(q, NULL, - (struct ip_addr *)&(iphdr->src), ICMP_TTL, IP_PROTO_ICMP); - pbuf_free(q); -} - -#endif /* LWIP_ICMP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/inet6.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/inet6.c deleted file mode 100644 index c3de85c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/inet6.c +++ /dev/null @@ -1,163 +0,0 @@ -/** - * @file - * Functions common to all TCP/IPv6 modules, such as the Internet checksum and the - * byte order functions. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#include "lwip/def.h" -#include "lwip/inet.h" - -/* chksum: - * - * Sums up all 16 bit words in a memory portion. Also includes any odd byte. - * This function is used by the other checksum functions. - * - * For now, this is not optimized. Must be optimized for the particular processor - * arcitecture on which it is to run. Preferebly coded in assembler. - */ - -static u32_t -chksum(void *dataptr, u16_t len) -{ - u16_t *sdataptr = dataptr; - u32_t acc; - - - for(acc = 0; len > 1; len -= 2) { - acc += *sdataptr++; - } - - /* add up any odd byte */ - if (len == 1) { - acc += htons((u16_t)(*(u8_t *)dataptr) << 8); - } - - return acc; - -} - -/* inet_chksum_pseudo: - * - * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain. - */ - -u16_t -inet_chksum_pseudo(struct pbuf *p, - struct ip_addr *src, struct ip_addr *dest, - u8_t proto, u32_t proto_len) -{ - u32_t acc; - struct pbuf *q; - u8_t swapped, i; - - acc = 0; - swapped = 0; - for(q = p; q != NULL; q = q->next) { - acc += chksum(q->payload, q->len); - while (acc >> 16) { - acc = (acc & 0xffff) + (acc >> 16); - } - if (q->len % 2 != 0) { - swapped = 1 - swapped; - acc = ((acc & 0xff) << 8) | ((acc & 0xff00) >> 8); - } - } - - if (swapped) { - acc = ((acc & 0xff) << 8) | ((acc & 0xff00) >> 8); - } - - for(i = 0; i < 8; i++) { - acc += ((u16_t *)src->addr)[i] & 0xffff; - acc += ((u16_t *)dest->addr)[i] & 0xffff; - while (acc >> 16) { - acc = (acc & 0xffff) + (acc >> 16); - } - } - acc += (u16_t)htons((u16_t)proto); - acc += ((u16_t *)&proto_len)[0] & 0xffff; - acc += ((u16_t *)&proto_len)[1] & 0xffff; - - while (acc >> 16) { - acc = (acc & 0xffff) + (acc >> 16); - } - return ~(acc & 0xffff); -} - -/* inet_chksum: - * - * Calculates the Internet checksum over a portion of memory. Used primarely for IP - * and ICMP. - */ - -u16_t -inet_chksum(void *dataptr, u16_t len) -{ - u32_t acc, sum; - - acc = chksum(dataptr, len); - sum = (acc & 0xffff) + (acc >> 16); - sum += (sum >> 16); - return ~(sum & 0xffff); -} - -u16_t -inet_chksum_pbuf(struct pbuf *p) -{ - u32_t acc; - struct pbuf *q; - u8_t swapped; - - acc = 0; - swapped = 0; - for(q = p; q != NULL; q = q->next) { - acc += chksum(q->payload, q->len); - while (acc >> 16) { - acc = (acc & 0xffff) + (acc >> 16); - } - if (q->len % 2 != 0) { - swapped = 1 - swapped; - acc = (acc & 0xff << 8) | (acc & 0xff00 >> 8); - } - } - - if (swapped) { - acc = ((acc & 0xff) << 8) | ((acc & 0xff00) >> 8); - } - return ~(acc & 0xffff); -} diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/ip6.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/ip6.c deleted file mode 100644 index ad59b72..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/ip6.c +++ /dev/null @@ -1,397 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - - - -/* ip.c - * - * This is the code for the IP layer for IPv6. - * - */ - - -#include "lwip/opt.h" - -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/ip.h" -#include "lwip/inet.h" -#include "lwip/netif.h" -#include "lwip/icmp.h" -#include "lwip/udp.h" -#include "lwip/tcp_impl.h" - -#include "lwip/stats.h" - -#include "arch/perf.h" - -/* ip_init: - * - * Initializes the IP layer. - */ - -void -ip_init(void) -{ -} - -/* ip_route: - * - * Finds the appropriate network interface for a given IP address. It searches the - * list of network interfaces linearly. A match is found if the masked IP address of - * the network interface equals the masked IP address given to the function. - */ - -struct netif * -ip_route(struct ip_addr *dest) -{ - struct netif *netif; - - for(netif = netif_list; netif != NULL; netif = netif->next) { - if (ip_addr_netcmp(dest, &(netif->ip_addr), &(netif->netmask))) { - return netif; - } - } - - return netif_default; -} - -/* ip_forward: - * - * Forwards an IP packet. It finds an appropriate route for the packet, decrements - * the TTL value of the packet, adjusts the checksum and outputs the packet on the - * appropriate interface. - */ - -static void -ip_forward(struct pbuf *p, struct ip_hdr *iphdr) -{ - struct netif *netif; - - PERF_START; - - if ((netif = ip_route((struct ip_addr *)&(iphdr->dest))) == NULL) { - - LWIP_DEBUGF(IP_DEBUG, ("ip_input: no forwarding route found for ")); -#if IP_DEBUG - ip_addr_debug_print(IP_DEBUG, ((struct ip_addr *)&(iphdr->dest))); -#endif /* IP_DEBUG */ - LWIP_DEBUGF(IP_DEBUG, ("\n")); - pbuf_free(p); - return; - } - /* Decrement TTL and send ICMP if ttl == 0. */ - if (--iphdr->hoplim == 0) { -#if LWIP_ICMP - /* Don't send ICMP messages in response to ICMP messages */ - if (iphdr->nexthdr != IP_PROTO_ICMP) { - icmp_time_exceeded(p, ICMP_TE_TTL); - } -#endif /* LWIP_ICMP */ - pbuf_free(p); - return; - } - - /* Incremental update of the IP checksum. */ - /* if (iphdr->chksum >= htons(0xffff - 0x100)) { - iphdr->chksum += htons(0x100) + 1; - } else { - iphdr->chksum += htons(0x100); - }*/ - - - LWIP_DEBUGF(IP_DEBUG, ("ip_forward: forwarding packet to ")); -#if IP_DEBUG - ip_addr_debug_print(IP_DEBUG, ((struct ip_addr *)&(iphdr->dest))); -#endif /* IP_DEBUG */ - LWIP_DEBUGF(IP_DEBUG, ("\n")); - - IP_STATS_INC(ip.fw); - IP_STATS_INC(ip.xmit); - - PERF_STOP("ip_forward"); - - netif->output(netif, p, (struct ip_addr *)&(iphdr->dest)); -} - -/* ip_input: - * - * This function is called by the network interface device driver when an IP packet is - * received. The function does the basic checks of the IP header such as packet size - * being at least larger than the header size etc. If the packet was not destined for - * us, the packet is forwarded (using ip_forward). The IP checksum is always checked. - * - * Finally, the packet is sent to the upper layer protocol input function. - */ - -void -ip_input(struct pbuf *p, struct netif *inp) { - struct ip_hdr *iphdr; - struct netif *netif; - - - PERF_START; - -#if IP_DEBUG - ip_debug_print(p); -#endif /* IP_DEBUG */ - - - IP_STATS_INC(ip.recv); - - /* identify the IP header */ - iphdr = p->payload; - - - if (iphdr->v != 6) { - LWIP_DEBUGF(IP_DEBUG, ("IP packet dropped due to bad version number\n")); -#if IP_DEBUG - ip_debug_print(p); -#endif /* IP_DEBUG */ - pbuf_free(p); - IP_STATS_INC(ip.err); - IP_STATS_INC(ip.drop); - return; - } - - /* is this packet for us? */ - for(netif = netif_list; netif != NULL; netif = netif->next) { -#if IP_DEBUG - LWIP_DEBUGF(IP_DEBUG, ("ip_input: iphdr->dest ")); - ip_addr_debug_print(IP_DEBUG, ((struct ip_addr *)&(iphdr->dest))); - LWIP_DEBUGF(IP_DEBUG, ("netif->ip_addr ")); - ip_addr_debug_print(IP_DEBUG, ((struct ip_addr *)&(iphdr->dest))); - LWIP_DEBUGF(IP_DEBUG, ("\n")); -#endif /* IP_DEBUG */ - if (ip_addr_cmp(&(iphdr->dest), &(netif->ip_addr))) { - break; - } - } - - - if (netif == NULL) { - /* packet not for us, route or discard */ -#if IP_FORWARD - ip_forward(p, iphdr); -#endif - pbuf_free(p); - return; - } - - pbuf_realloc(p, IP_HLEN + ntohs(iphdr->len)); - - /* send to upper layers */ -#if IP_DEBUG - /* LWIP_DEBUGF("ip_input: \n"); - ip_debug_print(p); - LWIP_DEBUGF("ip_input: p->len %"U16_F" p->tot_len %"U16_F"\n", p->len, p->tot_len);*/ -#endif /* IP_DEBUG */ - - if(pbuf_header(p, -IP_HLEN)) { - LWIP_ASSERT("Can't move over header in packet", 0); - return; - } - - switch (iphdr->nexthdr) { - case IP_PROTO_UDP: - udp_input(p, inp); - break; - case IP_PROTO_TCP: - tcp_input(p, inp); - break; -#if LWIP_ICMP - case IP_PROTO_ICMP: - icmp_input(p, inp); - break; -#endif /* LWIP_ICMP */ - default: -#if LWIP_ICMP - /* send ICMP destination protocol unreachable */ - icmp_dest_unreach(p, ICMP_DUR_PROTO); -#endif /* LWIP_ICMP */ - pbuf_free(p); - LWIP_DEBUGF(IP_DEBUG, ("Unsupported transport protocol %"U16_F"\n", - iphdr->nexthdr)); - - IP_STATS_INC(ip.proterr); - IP_STATS_INC(ip.drop); - } - PERF_STOP("ip_input"); -} - - -/* ip_output_if: - * - * Sends an IP packet on a network interface. This function constructs the IP header - * and calculates the IP header checksum. If the source IP address is NULL, - * the IP address of the outgoing network interface is filled in as source address. - */ - -err_t -ip_output_if (struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, - u8_t ttl, - u8_t proto, struct netif *netif) -{ - struct ip_hdr *iphdr; - - PERF_START; - - LWIP_DEBUGF(IP_DEBUG, ("len %"U16_F" tot_len %"U16_F"\n", p->len, p->tot_len)); - if (pbuf_header(p, IP_HLEN)) { - LWIP_DEBUGF(IP_DEBUG, ("ip_output: not enough room for IP header in pbuf\n")); - IP_STATS_INC(ip.err); - - return ERR_BUF; - } - LWIP_DEBUGF(IP_DEBUG, ("len %"U16_F" tot_len %"U16_F"\n", p->len, p->tot_len)); - - iphdr = p->payload; - - - if (dest != IP_HDRINCL) { - LWIP_DEBUGF(IP_DEBUG, ("!IP_HDRLINCL\n")); - iphdr->hoplim = ttl; - iphdr->nexthdr = proto; - iphdr->len = htons(p->tot_len - IP_HLEN); - ip_addr_set(&(iphdr->dest), dest); - - iphdr->v = 6; - - if (ip_addr_isany(src)) { - ip_addr_set(&(iphdr->src), &(netif->ip_addr)); - } else { - ip_addr_set(&(iphdr->src), src); - } - - } else { - dest = &(iphdr->dest); - } - - IP_STATS_INC(ip.xmit); - - LWIP_DEBUGF(IP_DEBUG, ("ip_output_if: %c%c (len %"U16_F")\n", netif->name[0], netif->name[1], p->tot_len)); -#if IP_DEBUG - ip_debug_print(p); -#endif /* IP_DEBUG */ - - PERF_STOP("ip_output_if"); - return netif->output(netif, p, dest); -} - -/* ip_output: - * - * Simple interface to ip_output_if. It finds the outgoing network interface and - * calls upon ip_output_if to do the actual work. - */ - -err_t -ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, - u8_t ttl, u8_t proto) -{ - struct netif *netif; - if ((netif = ip_route(dest)) == NULL) { - LWIP_DEBUGF(IP_DEBUG, ("ip_output: No route to 0x%"X32_F"\n", dest->addr)); - IP_STATS_INC(ip.rterr); - return ERR_RTE; - } - - return ip_output_if (p, src, dest, ttl, proto, netif); -} - -#if LWIP_NETIF_HWADDRHINT -err_t -ip_output_hinted(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, - u8_t ttl, u8_t tos, u8_t proto, u8_t *addr_hint) -{ - struct netif *netif; - err_t err; - - if ((netif = ip_route(dest)) == NULL) { - LWIP_DEBUGF(IP_DEBUG, ("ip_output: No route to 0x%"X32_F"\n", dest->addr)); - IP_STATS_INC(ip.rterr); - return ERR_RTE; - } - - LWIP_NETIF_HWADDRHINT(netif, addr_hint); - err = ip_output_if(p, src, dest, ttl, tos, proto, netif); - LWIP_NETIF_HWADDRHINT(netif, NULL); - - return err; -} -#endif /* LWIP_NETIF_HWADDRHINT*/ - -#if IP_DEBUG -void -ip_debug_print(struct pbuf *p) -{ - struct ip_hdr *iphdr = p->payload; - - LWIP_DEBUGF(IP_DEBUG, ("IP header:\n")); - LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(IP_DEBUG, ("|%2"S16_F" | %"X16_F"%"X16_F" | %"X16_F"%"X16_F" | (v, traffic class, flow label)\n", - iphdr->v, - iphdr->tclass1, iphdr->tclass2, - iphdr->flow1, iphdr->flow2)); - LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(IP_DEBUG, ("| %5"U16_F" | %2"U16_F" | %2"U16_F" | (len, nexthdr, hoplim)\n", - ntohs(iphdr->len), - iphdr->nexthdr, - iphdr->hoplim)); - LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(IP_DEBUG, ("| %4"X32_F" | %4"X32_F" | (src)\n", - (ntohl(iphdr->src.addr[0]) >> 16) & 0xffff, - ntohl(iphdr->src.addr[0]) & 0xffff)); - LWIP_DEBUGF(IP_DEBUG, ("| %4"X32_F" | %4"X32_F" | (src)\n", - (ntohl(iphdr->src.addr[1]) >> 16) & 0xffff, - ntohl(iphdr->src.addr[1]) & 0xffff)); - LWIP_DEBUGF(IP_DEBUG, ("| %4"X32_F" | %4"X32_F" | (src)\n", - (ntohl(iphdr->src.addr[2]) >> 16) & 0xffff, - ntohl(iphdr->src.addr[2]) & 0xffff)); - LWIP_DEBUGF(IP_DEBUG, ("| %4"X32_F" | %4"X32_F" | (src)\n", - (ntohl(iphdr->src.addr[3]) >> 16) & 0xffff, - ntohl(iphdr->src.addr[3]) & 0xffff)); - LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(IP_DEBUG, ("| %4"X32_F" | %4"X32_F" | (dest)\n", - (ntohl(iphdr->dest.addr[0]) >> 16) & 0xffff, - ntohl(iphdr->dest.addr[0]) & 0xffff)); - LWIP_DEBUGF(IP_DEBUG, ("| %4"X32_F" | %4"X32_F" | (dest)\n", - (ntohl(iphdr->dest.addr[1]) >> 16) & 0xffff, - ntohl(iphdr->dest.addr[1]) & 0xffff)); - LWIP_DEBUGF(IP_DEBUG, ("| %4"X32_F" | %4"X32_F" | (dest)\n", - (ntohl(iphdr->dest.addr[2]) >> 16) & 0xffff, - ntohl(iphdr->dest.addr[2]) & 0xffff)); - LWIP_DEBUGF(IP_DEBUG, ("| %4"X32_F" | %4"X32_F" | (dest)\n", - (ntohl(iphdr->dest.addr[3]) >> 16) & 0xffff, - ntohl(iphdr->dest.addr[3]) & 0xffff)); - LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); -} -#endif /* IP_DEBUG */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/ip6_addr.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/ip6_addr.c deleted file mode 100644 index 2da6cea..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/ipv6/ip6_addr.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" -#include "lwip/ip_addr.h" -#include "lwip/inet.h" - -u8_t -ip_addr_netcmp(struct ip_addr *addr1, struct ip_addr *addr2, - struct ip_addr *mask) -{ - return((addr1->addr[0] & mask->addr[0]) == (addr2->addr[0] & mask->addr[0]) && - (addr1->addr[1] & mask->addr[1]) == (addr2->addr[1] & mask->addr[1]) && - (addr1->addr[2] & mask->addr[2]) == (addr2->addr[2] & mask->addr[2]) && - (addr1->addr[3] & mask->addr[3]) == (addr2->addr[3] & mask->addr[3])); - -} - -u8_t -ip_addr_cmp(struct ip_addr *addr1, struct ip_addr *addr2) -{ - return(addr1->addr[0] == addr2->addr[0] && - addr1->addr[1] == addr2->addr[1] && - addr1->addr[2] == addr2->addr[2] && - addr1->addr[3] == addr2->addr[3]); -} - -void -ip_addr_set(struct ip_addr *dest, struct ip_addr *src) -{ - SMEMCPY(dest, src, sizeof(struct ip_addr)); - /* dest->addr[0] = src->addr[0]; - dest->addr[1] = src->addr[1]; - dest->addr[2] = src->addr[2]; - dest->addr[3] = src->addr[3];*/ -} - -u8_t -ip_addr_isany(struct ip_addr *addr) -{ - if (addr == NULL) return 1; - return((addr->addr[0] | addr->addr[1] | addr->addr[2] | addr->addr[3]) == 0); -} diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/lwip_timers.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/lwip_timers.c deleted file mode 100644 index 5d9f0f2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/lwip_timers.c +++ /dev/null @@ -1,487 +0,0 @@ -/** - * @file - * Stack-internal timers implementation. - * This file includes timer callbacks for stack-internal timers as well as - * functions to set up or stop timers and check for expired timers. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * Simon Goldschmidt - * - */ - -#include "lwip/opt.h" - -#include "lwip/lwip_timers.h" -#include "lwip/tcp_impl.h" - -#if LWIP_TIMERS - -#include "lwip/def.h" -#include "lwip/memp.h" -#include "lwip/tcpip.h" - -#include "lwip/ip_frag.h" -#include "netif/etharp.h" -#include "lwip/dhcp.h" -#include "lwip/autoip.h" -#include "lwip/igmp.h" -#include "lwip/dns.h" -#include "lwip/sys.h" -#include "lwip/pbuf.h" - - -/** The one and only timeout list */ -static struct sys_timeo *next_timeout; -#if NO_SYS -static uint32_t timeouts_last_time; -#endif /* NO_SYS */ - -#if LWIP_TCP -/** global variable that shows if the tcp timer is currently scheduled or not */ -static int tcpip_tcp_timer_active; - -/** - * Timer callback function that calls tcp_tmr() and reschedules itself. - * - * @param arg unused argument - */ -static void -tcpip_tcp_timer(void *arg) -{ - LWIP_UNUSED_ARG(arg); - - /* call TCP timer handler */ - tcp_tmr(); - /* timer still needed? */ - if (tcp_active_pcbs || tcp_tw_pcbs) { - /* restart timer */ - sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL); - } else { - /* disable timer */ - tcpip_tcp_timer_active = 0; - } -} - -/** - * Called from TCP_REG when registering a new PCB: - * the reason is to have the TCP timer only running when - * there are active (or time-wait) PCBs. - */ -void -tcp_timer_needed(void) -{ - /* timer is off but needed again? */ - if (!tcpip_tcp_timer_active && (tcp_active_pcbs || tcp_tw_pcbs)) { - /* enable and start timer */ - tcpip_tcp_timer_active = 1; - sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL); - } -} -#endif /* LWIP_TCP */ - -#if IP_REASSEMBLY -/** - * Timer callback function that calls ip_reass_tmr() and reschedules itself. - * - * @param arg unused argument - */ -static void -ip_reass_timer(void *arg) -{ - LWIP_UNUSED_ARG(arg); - LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: ip_reass_tmr()\n")); - ip_reass_tmr(); - sys_timeout(IP_TMR_INTERVAL, ip_reass_timer, NULL); -} -#endif /* IP_REASSEMBLY */ - -#if LWIP_ARP -/** - * Timer callback function that calls etharp_tmr() and reschedules itself. - * - * @param arg unused argument - */ -static void -arp_timer(void *arg) -{ - LWIP_UNUSED_ARG(arg); - LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: etharp_tmr()\n")); - etharp_tmr(); - sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL); -} -#endif /* LWIP_ARP */ - -#if LWIP_DHCP -/** - * Timer callback function that calls dhcp_coarse_tmr() and reschedules itself. - * - * @param arg unused argument - */ -static void -dhcp_timer_coarse(void *arg) -{ - LWIP_UNUSED_ARG(arg); - LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: dhcp_coarse_tmr()\n")); - dhcp_coarse_tmr(); - sys_timeout(DHCP_COARSE_TIMER_MSECS, dhcp_timer_coarse, NULL); -} - -/** - * Timer callback function that calls dhcp_fine_tmr() and reschedules itself. - * - * @param arg unused argument - */ -static void -dhcp_timer_fine(void *arg) -{ - LWIP_UNUSED_ARG(arg); - LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: dhcp_fine_tmr()\n")); - dhcp_fine_tmr(); - sys_timeout(DHCP_FINE_TIMER_MSECS, dhcp_timer_fine, NULL); -} -#endif /* LWIP_DHCP */ - -#if LWIP_AUTOIP -/** - * Timer callback function that calls autoip_tmr() and reschedules itself. - * - * @param arg unused argument - */ -static void -autoip_timer(void *arg) -{ - LWIP_UNUSED_ARG(arg); - LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: autoip_tmr()\n")); - autoip_tmr(); - sys_timeout(AUTOIP_TMR_INTERVAL, autoip_timer, NULL); -} -#endif /* LWIP_AUTOIP */ - -#if LWIP_IGMP -/** - * Timer callback function that calls igmp_tmr() and reschedules itself. - * - * @param arg unused argument - */ -static void -igmp_timer(void *arg) -{ - LWIP_UNUSED_ARG(arg); - LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: igmp_tmr()\n")); - igmp_tmr(); - sys_timeout(IGMP_TMR_INTERVAL, igmp_timer, NULL); -} -#endif /* LWIP_IGMP */ - -#if LWIP_DNS -/** - * Timer callback function that calls dns_tmr() and reschedules itself. - * - * @param arg unused argument - */ -static void -dns_timer(void *arg) -{ - LWIP_UNUSED_ARG(arg); - LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: dns_tmr()\n")); - dns_tmr(); - sys_timeout(DNS_TMR_INTERVAL, dns_timer, NULL); -} -#endif /* LWIP_DNS */ - -/** Initialize this module */ -void sys_timeouts_init(void) -{ -#if IP_REASSEMBLY - sys_timeout(IP_TMR_INTERVAL, ip_reass_timer, NULL); -#endif /* IP_REASSEMBLY */ -#if LWIP_ARP - sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL); -#endif /* LWIP_ARP */ -#if LWIP_DHCP - sys_timeout(DHCP_COARSE_TIMER_MSECS, dhcp_timer_coarse, NULL); - sys_timeout(DHCP_FINE_TIMER_MSECS, dhcp_timer_fine, NULL); -#endif /* LWIP_DHCP */ -#if LWIP_AUTOIP - sys_timeout(AUTOIP_TMR_INTERVAL, autoip_timer, NULL); -#endif /* LWIP_AUTOIP */ -#if LWIP_IGMP - sys_timeout(IGMP_TMR_INTERVAL, igmp_timer, NULL); -#endif /* LWIP_IGMP */ -#if LWIP_DNS - sys_timeout(DNS_TMR_INTERVAL, dns_timer, NULL); -#endif /* LWIP_DNS */ - -#if NO_SYS - /* Initialise timestamp for sys_check_timeouts */ - timeouts_last_time = sys_now(); -#endif -} - -/** - * Create a one-shot timer (aka timeout). Timeouts are processed in the - * following cases: - * - while waiting for a message using sys_timeouts_mbox_fetch() - * - by calling sys_check_timeouts() (NO_SYS==1 only) - * - * @param msecs time in milliseconds after that the timer should expire - * @param handler callback function to call when msecs have elapsed - * @param arg argument to pass to the callback function - */ -#if LWIP_DEBUG_TIMERNAMES -void -sys_timeout_debug(uint32_t msecs, sys_timeout_handler handler, void *arg, const char* handler_name) -#else /* LWIP_DEBUG_TIMERNAMES */ -void -sys_timeout(uint32_t msecs, sys_timeout_handler handler, void *arg) -#endif /* LWIP_DEBUG_TIMERNAMES */ -{ - struct sys_timeo *timeout, *t; - - timeout = (struct sys_timeo *)memp_malloc(MEMP_SYS_TIMEOUT); - if (timeout == NULL) { - LWIP_ASSERT("sys_timeout: timeout != NULL, pool MEMP_SYS_TIMEOUT is empty", timeout != NULL); - return; - } - timeout->next = NULL; - timeout->h = handler; - timeout->arg = arg; - timeout->time = msecs; -#if LWIP_DEBUG_TIMERNAMES - timeout->handler_name = handler_name; - LWIP_DEBUGF(TIMERS_DEBUG, ("sys_timeout: %p msecs=%"U32_F" handler=%s arg=%p\n", - (void *)timeout, msecs, handler_name, (void *)arg)); -#endif /* LWIP_DEBUG_TIMERNAMES */ - - if (next_timeout == NULL) { - next_timeout = timeout; - return; - } - - if (next_timeout->time > msecs) { - next_timeout->time -= msecs; - timeout->next = next_timeout; - next_timeout = timeout; - } else { - for(t = next_timeout; t != NULL; t = t->next) { - timeout->time -= t->time; - if (t->next == NULL || t->next->time > timeout->time) { - if (t->next != NULL) { - t->next->time -= timeout->time; - } - timeout->next = t->next; - t->next = timeout; - break; - } - } - } -} - -/** - * Go through timeout list (for this task only) and remove the first matching - * entry, even though the timeout has not triggered yet. - * - * @note This function only works as expected if there is only one timeout - * calling 'handler' in the list of timeouts. - * - * @param handler callback function that would be called by the timeout - * @param arg callback argument that would be passed to handler -*/ -void -sys_untimeout(sys_timeout_handler handler, void *arg) -{ - struct sys_timeo *prev_t, *t; - - if (next_timeout == NULL) { - return; - } - - for (t = next_timeout, prev_t = NULL; t != NULL; prev_t = t, t = t->next) { - if ((t->h == handler) && (t->arg == arg)) { - /* We have a match */ - /* Unlink from previous in list */ - if (prev_t == NULL) { - next_timeout = t->next; - } else { - prev_t->next = t->next; - } - /* If not the last one, add time of this one back to next */ - if (t->next != NULL) { - t->next->time += t->time; - } - memp_free(MEMP_SYS_TIMEOUT, t); - return; - } - } - return; -} - -#if NO_SYS - -/** Handle timeouts for NO_SYS==1 (i.e. without using - * tcpip_thread/sys_timeouts_mbox_fetch(). Uses sys_now() to call timeout - * handler functions when timeouts expire. - * - * Must be called periodically from your main loop. - */ -void -sys_check_timeouts(void) -{ - if (next_timeout) { - struct sys_timeo *tmptimeout; - uint32_t diff; - sys_timeout_handler handler; - void *arg; - uint8_t had_one; - uint32_t now; - - now = sys_now(); - /* this cares for wraparounds */ - diff = now - timeouts_last_time; - do - { -#if PBUF_POOL_FREE_OOSEQ - PBUF_CHECK_FREE_OOSEQ(); -#endif /* PBUF_POOL_FREE_OOSEQ */ - had_one = 0; - tmptimeout = next_timeout; - if (tmptimeout && (tmptimeout->time <= diff)) { - /* timeout has expired */ - had_one = 1; - timeouts_last_time = now; - diff -= tmptimeout->time; - next_timeout = tmptimeout->next; - handler = tmptimeout->h; - arg = tmptimeout->arg; -#if LWIP_DEBUG_TIMERNAMES - if (handler != NULL) { - LWIP_DEBUGF(TIMERS_DEBUG, ("sct calling h=%s arg=%p\n", - tmptimeout->handler_name, arg)); - } -#endif /* LWIP_DEBUG_TIMERNAMES */ - memp_free(MEMP_SYS_TIMEOUT, tmptimeout); - if (handler != NULL) { - handler(arg); - } - } - /* repeat until all expired timers have been called */ - }while(had_one); - } -} - -/** Set back the timestamp of the last call to sys_check_timeouts() - * This is necessary if sys_check_timeouts() hasn't been called for a long - * time (e.g. while saving energy) to prevent all timer functions of that - * period being called. - */ -void -sys_restart_timeouts(void) -{ - timeouts_last_time = sys_now(); -} - -#else /* NO_SYS */ - -/** - * Wait (forever) for a message to arrive in an mbox. - * While waiting, timeouts are processed. - * - * @param mbox the mbox to fetch the message from - * @param msg the place to store the message - */ -void -sys_timeouts_mbox_fetch(sys_mbox_t *mbox, void **msg) -{ - uint32_t time_needed; - struct sys_timeo *tmptimeout; - sys_timeout_handler handler; - void *arg; - - again: - if (!next_timeout) { - time_needed = sys_arch_mbox_fetch(mbox, msg, 0); - } else { - if (next_timeout->time > 0) { - time_needed = sys_arch_mbox_fetch(mbox, msg, next_timeout->time); - } else { - time_needed = SYS_ARCH_TIMEOUT; - } - - if (time_needed == SYS_ARCH_TIMEOUT) { - /* If time == SYS_ARCH_TIMEOUT, a timeout occured before a message - could be fetched. We should now call the timeout handler and - deallocate the memory allocated for the timeout. */ - tmptimeout = next_timeout; - next_timeout = tmptimeout->next; - handler = tmptimeout->h; - arg = tmptimeout->arg; -#if LWIP_DEBUG_TIMERNAMES - if (handler != NULL) { - LWIP_DEBUGF(TIMERS_DEBUG, ("stmf calling h=%s arg=%p\n", - tmptimeout->handler_name, arg)); - } -#endif /* LWIP_DEBUG_TIMERNAMES */ - memp_free(MEMP_SYS_TIMEOUT, tmptimeout); - if (handler != NULL) { - /* For LWIP_TCPIP_CORE_LOCKING, lock the core before calling the - timeout handler function. */ - LOCK_TCPIP_CORE(); - handler(arg); - UNLOCK_TCPIP_CORE(); - } - LWIP_TCPIP_THREAD_ALIVE(); - - /* We try again to fetch a message from the mbox. */ - goto again; - } else { - /* If time != SYS_ARCH_TIMEOUT, a message was received before the timeout - occured. The time variable is set to the number of - milliseconds we waited for the message. */ - if (time_needed < next_timeout->time) { - next_timeout->time -= time_needed; - } else { - next_timeout->time = 0; - } - } - } -} - -#endif /* NO_SYS */ - -#else /* LWIP_TIMERS */ -/* Satisfy the TCP code which calls this function */ -void -tcp_timer_needed(void) -{ -} -#endif /* LWIP_TIMERS */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/mem.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/mem.c deleted file mode 100644 index c642321..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/mem.c +++ /dev/null @@ -1,662 +0,0 @@ -/** - * @file - * Dynamic memory manager - * - * This is a lightweight replacement for the standard C library malloc(). - * - * If you want to use the standard C library malloc() instead, define - * MEM_LIBC_MALLOC to 1 in your lwipopts.h - * - * To let mem_malloc() use pools (prevents fragmentation and is much faster than - * a heap but might waste some memory), define MEM_USE_POOLS to 1, define - * MEM_USE_CUSTOM_POOLS to 1 and create a file "lwippools.h" that includes a list - * of pools like this (more pools can be added between _START and _END): - * - * Define three pools with sizes 256, 512, and 1512 bytes - * LWIP_MALLOC_MEMPOOL_START - * LWIP_MALLOC_MEMPOOL(20, 256) - * LWIP_MALLOC_MEMPOOL(10, 512) - * LWIP_MALLOC_MEMPOOL(5, 1512) - * LWIP_MALLOC_MEMPOOL_END - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * Simon Goldschmidt - * - */ - -#include "lwip/opt.h" - -#if !MEM_LIBC_MALLOC /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/sys.h" -#include "lwip/stats.h" -#include "lwip/err.h" - -#include - -#if MEM_USE_POOLS -/* lwIP head implemented with different sized pools */ - -/** - * Allocate memory: determine the smallest pool that is big enough - * to contain an element of 'size' and get an element from that pool. - * - * @param size the size in bytes of the memory needed - * @return a pointer to the allocated memory or NULL if the pool is empty - */ -void * -mem_malloc(mem_size_t size) -{ - void *ret; - struct memp_malloc_helper *element; - memp_t poolnr; - mem_size_t required_size = size + LWIP_MEM_ALIGN_SIZE(sizeof(struct memp_malloc_helper)); - - for (poolnr = MEMP_POOL_FIRST; poolnr <= MEMP_POOL_LAST; poolnr = (memp_t)(poolnr + 1)) { -#if MEM_USE_POOLS_TRY_BIGGER_POOL -again: -#endif /* MEM_USE_POOLS_TRY_BIGGER_POOL */ - /* is this pool big enough to hold an element of the required size - plus a struct memp_malloc_helper that saves the pool this element came from? */ - if (required_size <= memp_sizes[poolnr]) { - break; - } - } - if (poolnr > MEMP_POOL_LAST) { - LWIP_ASSERT("mem_malloc(): no pool is that big!", 0); - return NULL; - } - element = (struct memp_malloc_helper*)memp_malloc(poolnr); - if (element == NULL) { - /* No need to DEBUGF or ASSERT: This error is already - taken care of in memp.c */ -#if MEM_USE_POOLS_TRY_BIGGER_POOL - /** Try a bigger pool if this one is empty! */ - if (poolnr < MEMP_POOL_LAST) { - poolnr++; - goto again; - } -#endif /* MEM_USE_POOLS_TRY_BIGGER_POOL */ - return NULL; - } - - /* save the pool number this element came from */ - element->poolnr = poolnr; - /* and return a pointer to the memory directly after the struct memp_malloc_helper */ - ret = (uint8_t*)element + LWIP_MEM_ALIGN_SIZE(sizeof(struct memp_malloc_helper)); - - return ret; -} - -/** - * Free memory previously allocated by mem_malloc. Loads the pool number - * and calls memp_free with that pool number to put the element back into - * its pool - * - * @param rmem the memory element to free - */ -void -mem_free(void *rmem) -{ - struct memp_malloc_helper *hmem; - - LWIP_ASSERT("rmem != NULL", (rmem != NULL)); - LWIP_ASSERT("rmem == MEM_ALIGN(rmem)", (rmem == LWIP_MEM_ALIGN(rmem))); - - /* get the original struct memp_malloc_helper */ - hmem = (struct memp_malloc_helper*)(void*)((uint8_t*)rmem - LWIP_MEM_ALIGN_SIZE(sizeof(struct memp_malloc_helper))); - - LWIP_ASSERT("hmem != NULL", (hmem != NULL)); - LWIP_ASSERT("hmem == MEM_ALIGN(hmem)", (hmem == LWIP_MEM_ALIGN(hmem))); - LWIP_ASSERT("hmem->poolnr < MEMP_MAX", (hmem->poolnr < MEMP_MAX)); - - /* and put it in the pool we saved earlier */ - memp_free(hmem->poolnr, hmem); -} - -#else /* MEM_USE_POOLS */ -/* lwIP replacement for your libc malloc() */ - -/** - * The heap is made up as a list of structs of this type. - * This does not have to be aligned since for getting its size, - * we only use the macro SIZEOF_STRUCT_MEM, which automatically alignes. - */ -struct mem { - /** index (-> ram[next]) of the next struct */ - mem_size_t next; - /** index (-> ram[prev]) of the previous struct */ - mem_size_t prev; - /** 1: this area is used; 0: this area is unused */ - uint8_t used; -}; - -/** All allocated blocks will be MIN_SIZE bytes big, at least! - * MIN_SIZE can be overridden to suit your needs. Smaller values save space, - * larger values could prevent too small blocks to fragment the RAM too much. */ -#ifndef MIN_SIZE -#define MIN_SIZE 12 -#endif /* MIN_SIZE */ -/* some alignment macros: we define them here for better source code layout */ -#define MIN_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MIN_SIZE) -#define SIZEOF_STRUCT_MEM LWIP_MEM_ALIGN_SIZE(sizeof(struct mem)) -#define MEM_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEM_SIZE) - -/** If you want to relocate the heap to external memory, simply define - * LWIP_RAM_HEAP_POINTER as a void-pointer to that location. - * If so, make sure the memory at that location is big enough (see below on - * how that space is calculated). */ -#ifndef LWIP_RAM_HEAP_POINTER -/** the heap. we need one struct mem at the end and some room for alignment */ -uint8_t ram_heap[MEM_SIZE_ALIGNED + (2*SIZEOF_STRUCT_MEM) + MEM_ALIGNMENT]; -#define LWIP_RAM_HEAP_POINTER ram_heap -#endif /* LWIP_RAM_HEAP_POINTER */ - -/** pointer to the heap (ram_heap): for alignment, ram is now a pointer instead of an array */ -static uint8_t *ram; -/** the last entry, always unused! */ -static struct mem *ram_end; -/** pointer to the lowest free block, this is used for faster search */ -static struct mem *lfree; - -/** concurrent access protection */ -#if !NO_SYS -static sys_mutex_t mem_mutex; -#endif - -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT - -static volatile uint8_t mem_free_count; - -/* Allow mem_free from other (e.g. interrupt) context */ -#define LWIP_MEM_FREE_DECL_PROTECT() SYS_ARCH_DECL_PROTECT(lev_free) -#define LWIP_MEM_FREE_PROTECT() SYS_ARCH_PROTECT(lev_free) -#define LWIP_MEM_FREE_UNPROTECT() SYS_ARCH_UNPROTECT(lev_free) -#define LWIP_MEM_ALLOC_DECL_PROTECT() SYS_ARCH_DECL_PROTECT(lev_alloc) -#define LWIP_MEM_ALLOC_PROTECT() SYS_ARCH_PROTECT(lev_alloc) -#define LWIP_MEM_ALLOC_UNPROTECT() SYS_ARCH_UNPROTECT(lev_alloc) - -#else /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - -/* Protect the heap only by using a semaphore */ -#define LWIP_MEM_FREE_DECL_PROTECT() -#define LWIP_MEM_FREE_PROTECT() sys_mutex_lock(&mem_mutex) -#define LWIP_MEM_FREE_UNPROTECT() sys_mutex_unlock(&mem_mutex) -/* mem_malloc is protected using semaphore AND LWIP_MEM_ALLOC_PROTECT */ -#define LWIP_MEM_ALLOC_DECL_PROTECT() -#define LWIP_MEM_ALLOC_PROTECT() -#define LWIP_MEM_ALLOC_UNPROTECT() - -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - - -/** - * "Plug holes" by combining adjacent empty struct mems. - * After this function is through, there should not exist - * one empty struct mem pointing to another empty struct mem. - * - * @param mem this points to a struct mem which just has been freed - * @internal this function is only called by mem_free() and mem_trim() - * - * This assumes access to the heap is protected by the calling function - * already. - */ -static void -plug_holes(struct mem *mem) -{ - struct mem *nmem; - struct mem *pmem; - - LWIP_ASSERT("plug_holes: mem >= ram", (uint8_t *)mem >= ram); - LWIP_ASSERT("plug_holes: mem < ram_end", (uint8_t *)mem < (uint8_t *)ram_end); - LWIP_ASSERT("plug_holes: mem->used == 0", mem->used == 0); - - /* plug hole forward */ - LWIP_ASSERT("plug_holes: mem->next <= MEM_SIZE_ALIGNED", mem->next <= MEM_SIZE_ALIGNED); - - nmem = (struct mem *)(void *)&ram[mem->next]; - if (mem != nmem && nmem->used == 0 && (uint8_t *)nmem != (uint8_t *)ram_end) { - /* if mem->next is unused and not end of ram, combine mem and mem->next */ - if (lfree == nmem) { - lfree = mem; - } - mem->next = nmem->next; - ((struct mem *)(void *)&ram[nmem->next])->prev = (mem_size_t)((uint8_t *)mem - ram); - } - - /* plug hole backward */ - pmem = (struct mem *)(void *)&ram[mem->prev]; - if (pmem != mem && pmem->used == 0) { - /* if mem->prev is unused, combine mem and mem->prev */ - if (lfree == mem) { - lfree = pmem; - } - pmem->next = mem->next; - ((struct mem *)(void *)&ram[mem->next])->prev = (mem_size_t)((uint8_t *)pmem - ram); - } -} - -/** - * Zero the heap and initialize start, end and lowest-free - */ -void -mem_init(void) -{ - struct mem *mem; - LWIP_ASSERT("Sanity check alignment", - (SIZEOF_STRUCT_MEM & (MEM_ALIGNMENT-1)) == 0); - - /* align the heap */ - ram = (uint8_t *)LWIP_MEM_ALIGN(LWIP_RAM_HEAP_POINTER); - /* initialize the start of the heap */ - mem = (struct mem *)(void *)ram; - mem->next = MEM_SIZE_ALIGNED; - mem->prev = 0; - mem->used = 0; - /* initialize the end of the heap */ - ram_end = (struct mem *)(void *)&ram[MEM_SIZE_ALIGNED]; - ram_end->used = 1; - ram_end->next = MEM_SIZE_ALIGNED; - ram_end->prev = MEM_SIZE_ALIGNED; - - /* initialize the lowest-free pointer to the start of the heap */ - lfree = (struct mem *)(void *)ram; - - MEM_STATS_AVAIL(avail, MEM_SIZE_ALIGNED); - - if(sys_mutex_new(&mem_mutex) != ERR_OK) { - LWIP_ASSERT("failed to create mem_mutex", 0); - } -} - -/** - * Put a struct mem back on the heap - * - * @param rmem is the data portion of a struct mem as returned by a previous - * call to mem_malloc() - */ -void -mem_free(void *rmem) -{ - struct mem *mem; - LWIP_MEM_FREE_DECL_PROTECT(); - - if (rmem == NULL) { - LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("mem_free(p == NULL) was called.\n")); - return; - } - LWIP_ASSERT("mem_free: sanity check alignment", (((mem_ptr_t)rmem) & (MEM_ALIGNMENT-1)) == 0); - - LWIP_ASSERT("mem_free: legal memory", (uint8_t *)rmem >= (uint8_t *)ram && - (uint8_t *)rmem < (uint8_t *)ram_end); - - if ((uint8_t *)rmem < (uint8_t *)ram || (uint8_t *)rmem >= (uint8_t *)ram_end) { - SYS_ARCH_DECL_PROTECT(lev); - LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: illegal memory\n")); - /* protect mem stats from concurrent access */ -#if MEM_STATS - SYS_ARCH_PROTECT(lev); - MEM_STATS_INC(illegal); - SYS_ARCH_UNPROTECT(lev); -#endif - return; - } - /* protect the heap from concurrent access */ - LWIP_MEM_FREE_PROTECT(); - /* Get the corresponding struct mem ... */ - mem = (struct mem *)(void *)((uint8_t *)rmem - SIZEOF_STRUCT_MEM); - /* ... which has to be in a used state ... */ - LWIP_ASSERT("mem_free: mem->used", mem->used); - /* ... and is now unused. */ - mem->used = 0; - - if (mem < lfree) { - /* the newly freed struct is now the lowest */ - lfree = mem; - } - - MEM_STATS_DEC_USED(used, mem->next - (mem_size_t)(((uint8_t *)mem - ram))); - - /* finally, see if prev or next are free also */ - plug_holes(mem); -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT - mem_free_count = 1; -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - LWIP_MEM_FREE_UNPROTECT(); -} - -/** - * Shrink memory returned by mem_malloc(). - * - * @param rmem pointer to memory allocated by mem_malloc the is to be shrinked - * @param newsize required size after shrinking (needs to be smaller than or - * equal to the previous size) - * @return for compatibility reasons: is always == rmem, at the moment - * or NULL if newsize is > old size, in which case rmem is NOT touched - * or freed! - */ -void * -mem_trim(void *rmem, mem_size_t newsize) -{ - mem_size_t size; - mem_size_t ptr, ptr2; - struct mem *mem, *mem2; - /* use the FREE_PROTECT here: it protects with sem OR SYS_ARCH_PROTECT */ - LWIP_MEM_FREE_DECL_PROTECT(); - - /* Expand the size of the allocated memory region so that we can - adjust for alignment. */ - newsize = LWIP_MEM_ALIGN_SIZE(newsize); - - if(newsize < MIN_SIZE_ALIGNED) { - /* every data block must be at least MIN_SIZE_ALIGNED long */ - newsize = MIN_SIZE_ALIGNED; - } - - if (newsize > MEM_SIZE_ALIGNED) { - return NULL; - } - - LWIP_ASSERT("mem_trim: legal memory", (uint8_t *)rmem >= (uint8_t *)ram && - (uint8_t *)rmem < (uint8_t *)ram_end); - - if ((uint8_t *)rmem < (uint8_t *)ram || (uint8_t *)rmem >= (uint8_t *)ram_end) { - SYS_ARCH_DECL_PROTECT(lev); - LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_trim: illegal memory\n")); - /* protect mem stats from concurrent access */ -#if MEM_STATS - SYS_ARCH_PROTECT(lev); - MEM_STATS_INC(illegal); - SYS_ARCH_UNPROTECT(lev); -#endif - return rmem; - } - /* Get the corresponding struct mem ... */ - mem = (struct mem *)(void *)((uint8_t *)rmem - SIZEOF_STRUCT_MEM); - /* ... and its offset pointer */ - ptr = (mem_size_t)((uint8_t *)mem - ram); - - size = mem->next - ptr - SIZEOF_STRUCT_MEM; - LWIP_ASSERT("mem_trim can only shrink memory", newsize <= size); - if (newsize > size) { - /* not supported */ - return NULL; - } - if (newsize == size) { - /* No change in size, simply return */ - return rmem; - } - - /* protect the heap from concurrent access */ - LWIP_MEM_FREE_PROTECT(); - - mem2 = (struct mem *)(void *)&ram[mem->next]; - if(mem2->used == 0) { - /* The next struct is unused, we can simply move it at little */ - mem_size_t next; - /* remember the old next pointer */ - next = mem2->next; - /* create new struct mem which is moved directly after the shrinked mem */ - ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize; - if (lfree == mem2) { - lfree = (struct mem *)(void *)&ram[ptr2]; - } - mem2 = (struct mem *)(void *)&ram[ptr2]; - mem2->used = 0; - /* restore the next pointer */ - mem2->next = next; - /* link it back to mem */ - mem2->prev = ptr; - /* link mem to it */ - mem->next = ptr2; - /* last thing to restore linked list: as we have moved mem2, - * let 'mem2->next->prev' point to mem2 again. but only if mem2->next is not - * the end of the heap */ - if (mem2->next != MEM_SIZE_ALIGNED) { - ((struct mem *)(void *)&ram[mem2->next])->prev = ptr2; - } - MEM_STATS_DEC_USED(used, (size - newsize)); - /* no need to plug holes, we've already done that */ - } else if (newsize + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED <= size) { - /* Next struct is used but there's room for another struct mem with - * at least MIN_SIZE_ALIGNED of data. - * Old size ('size') must be big enough to contain at least 'newsize' plus a struct mem - * ('SIZEOF_STRUCT_MEM') with some data ('MIN_SIZE_ALIGNED'). - * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty - * region that couldn't hold data, but when mem->next gets freed, - * the 2 regions would be combined, resulting in more free memory */ - ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize; - mem2 = (struct mem *)(void *)&ram[ptr2]; - if (mem2 < lfree) { - lfree = mem2; - } - mem2->used = 0; - mem2->next = mem->next; - mem2->prev = ptr; - mem->next = ptr2; - if (mem2->next != MEM_SIZE_ALIGNED) { - ((struct mem *)(void *)&ram[mem2->next])->prev = ptr2; - } - MEM_STATS_DEC_USED(used, (size - newsize)); - /* the original mem->next is used, so no need to plug holes! */ - } - /* else { - next struct mem is used but size between mem and mem2 is not big enough - to create another struct mem - -> don't do anyhting. - -> the remaining space stays unused since it is too small - } */ -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT - mem_free_count = 1; -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - LWIP_MEM_FREE_UNPROTECT(); - return rmem; -} - -/** - * Adam's mem_malloc() plus solution for bug #17922 - * Allocate a block of memory with a minimum of 'size' bytes. - * - * @param size is the minimum size of the requested block in bytes. - * @return pointer to allocated memory or NULL if no free memory was found. - * - * Note that the returned value will always be aligned (as defined by MEM_ALIGNMENT). - */ -void * -mem_malloc(mem_size_t size) -{ - mem_size_t ptr, ptr2; - struct mem *mem, *mem2; -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT - uint8_t local_mem_free_count = 0; -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - LWIP_MEM_ALLOC_DECL_PROTECT(); - - if (size == 0) { - return NULL; - } - - /* Expand the size of the allocated memory region so that we can - adjust for alignment. */ - size = LWIP_MEM_ALIGN_SIZE(size); - - if(size < MIN_SIZE_ALIGNED) { - /* every data block must be at least MIN_SIZE_ALIGNED long */ - size = MIN_SIZE_ALIGNED; - } - - if (size > MEM_SIZE_ALIGNED) { - return NULL; - } - - /* protect the heap from concurrent access */ - sys_mutex_lock(&mem_mutex); - LWIP_MEM_ALLOC_PROTECT(); -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT - /* run as long as a mem_free disturbed mem_malloc or mem_trim */ - do { - local_mem_free_count = 0; -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - - /* Scan through the heap searching for a free block that is big enough, - * beginning with the lowest free block. - */ - for (ptr = (mem_size_t)((uint8_t *)lfree - ram); ptr < MEM_SIZE_ALIGNED - size; - ptr = ((struct mem *)(void *)&ram[ptr])->next) { - mem = (struct mem *)(void *)&ram[ptr]; -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT - mem_free_count = 0; - LWIP_MEM_ALLOC_UNPROTECT(); - /* allow mem_free or mem_trim to run */ - LWIP_MEM_ALLOC_PROTECT(); - if (mem_free_count != 0) { - /* If mem_free or mem_trim have run, we have to restart since they - could have altered our current struct mem. */ - local_mem_free_count = 1; - break; - } -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - - if ((!mem->used) && - (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) { - /* mem is not used and at least perfect fit is possible: - * mem->next - (ptr + SIZEOF_STRUCT_MEM) gives us the 'user data size' of mem */ - - if (mem->next - (ptr + SIZEOF_STRUCT_MEM) >= (size + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED)) { - /* (in addition to the above, we test if another struct mem (SIZEOF_STRUCT_MEM) containing - * at least MIN_SIZE_ALIGNED of data also fits in the 'user data space' of 'mem') - * -> split large block, create empty remainder, - * remainder must be large enough to contain MIN_SIZE_ALIGNED data: if - * mem->next - (ptr + (2*SIZEOF_STRUCT_MEM)) == size, - * struct mem would fit in but no data between mem2 and mem2->next - * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty - * region that couldn't hold data, but when mem->next gets freed, - * the 2 regions would be combined, resulting in more free memory - */ - ptr2 = ptr + SIZEOF_STRUCT_MEM + size; - /* create mem2 struct */ - mem2 = (struct mem *)(void *)&ram[ptr2]; - mem2->used = 0; - mem2->next = mem->next; - mem2->prev = ptr; - /* and insert it between mem and mem->next */ - mem->next = ptr2; - mem->used = 1; - - if (mem2->next != MEM_SIZE_ALIGNED) { - ((struct mem *)(void *)&ram[mem2->next])->prev = ptr2; - } - MEM_STATS_INC_USED(used, (size + SIZEOF_STRUCT_MEM)); - } else { - /* (a mem2 struct does no fit into the user data space of mem and mem->next will always - * be used at this point: if not we have 2 unused structs in a row, plug_holes should have - * take care of this). - * -> near fit or excact fit: do not split, no mem2 creation - * also can't move mem->next directly behind mem, since mem->next - * will always be used at this point! - */ - mem->used = 1; - MEM_STATS_INC_USED(used, mem->next - (mem_size_t)((uint8_t *)mem - ram)); - } -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT -mem_malloc_adjust_lfree: -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - if (mem == lfree) { - struct mem *cur = lfree; - /* Find next free block after mem and update lowest free pointer */ - while (cur->used && cur != ram_end) { -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT - mem_free_count = 0; - LWIP_MEM_ALLOC_UNPROTECT(); - /* prevent high interrupt latency... */ - LWIP_MEM_ALLOC_PROTECT(); - if (mem_free_count != 0) { - /* If mem_free or mem_trim have run, we have to restart since they - could have altered our current struct mem or lfree. */ - goto mem_malloc_adjust_lfree; - } -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - cur = (struct mem *)(void *)&ram[cur->next]; - } - lfree = cur; - LWIP_ASSERT("mem_malloc: !lfree->used", ((lfree == ram_end) || (!lfree->used))); - } - LWIP_MEM_ALLOC_UNPROTECT(); - sys_mutex_unlock(&mem_mutex); - LWIP_ASSERT("mem_malloc: allocated memory not above ram_end.", - (mem_ptr_t)mem + SIZEOF_STRUCT_MEM + size <= (mem_ptr_t)ram_end); - LWIP_ASSERT("mem_malloc: allocated memory properly aligned.", - ((mem_ptr_t)mem + SIZEOF_STRUCT_MEM) % MEM_ALIGNMENT == 0); - LWIP_ASSERT("mem_malloc: sanity check alignment", - (((mem_ptr_t)mem) & (MEM_ALIGNMENT-1)) == 0); - - return (uint8_t *)mem + SIZEOF_STRUCT_MEM; - } - } -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT - /* if we got interrupted by a mem_free, try again */ - } while(local_mem_free_count != 0); -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("mem_malloc: could not allocate %"S16_F" bytes\n", (int16_t)size)); - MEM_STATS_INC(err); - LWIP_MEM_ALLOC_UNPROTECT(); - sys_mutex_unlock(&mem_mutex); - return NULL; -} - -#endif /* MEM_USE_POOLS */ -/** - * Contiguously allocates enough space for count objects that are size bytes - * of memory each and returns a pointer to the allocated memory. - * - * The allocated memory is filled with bytes of value zero. - * - * @param count number of objects to allocate - * @param size size of the objects to allocate - * @return pointer to allocated memory / NULL pointer if there is an error - */ -void *mem_calloc(mem_size_t count, mem_size_t size) -{ - void *p; - - /* allocate 'count' objects of size 'size' */ - p = mem_malloc(count * size); - if (p) { - /* zero the memory */ - memset(p, 0, count * size); - } - return p; -} - -#endif /* !MEM_LIBC_MALLOC */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/memp.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/memp.c deleted file mode 100644 index 4c755e6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/memp.c +++ /dev/null @@ -1,470 +0,0 @@ -/** - * @file - * Dynamic pool memory manager - * - * lwIP has dedicated pools for many structures (netconn, protocol control blocks, - * packet buffers, ...). All these pools are managed here. - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#include "lwip/memp.h" -#include "lwip/pbuf.h" -#include "lwip/udp.h" -#include "lwip/raw.h" -#include "lwip/tcp_impl.h" -#include "lwip/igmp.h" -#include "lwip/api.h" -#include "lwip/api_msg.h" -#include "lwip/tcpip.h" -#include "lwip/sys.h" -#include "lwip/lwip_timers.h" -#include "lwip/stats.h" -#include "netif/etharp.h" -#include "lwip/ip_frag.h" -#include "lwip/snmp_structs.h" -#include "lwip/snmp_msg.h" -#include "lwip/dns.h" -#include "netif/ppp_oe.h" - -#include - -#if !MEMP_MEM_MALLOC /* don't build if not configured for use in lwipopts.h */ - -struct memp { - struct memp *next; -#if MEMP_OVERFLOW_CHECK - const char *file; - int line; -#endif /* MEMP_OVERFLOW_CHECK */ -}; - -#if MEMP_OVERFLOW_CHECK -/* if MEMP_OVERFLOW_CHECK is turned on, we reserve some bytes at the beginning - * and at the end of each element, initialize them as 0xcd and check - * them later. */ -/* If MEMP_OVERFLOW_CHECK is >= 2, on every call to memp_malloc or memp_free, - * every single element in each pool is checked! - * This is VERY SLOW but also very helpful. */ -/* MEMP_SANITY_REGION_BEFORE and MEMP_SANITY_REGION_AFTER can be overridden in - * lwipopts.h to change the amount reserved for checking. */ -#ifndef MEMP_SANITY_REGION_BEFORE -#define MEMP_SANITY_REGION_BEFORE 16 -#endif /* MEMP_SANITY_REGION_BEFORE*/ -#if MEMP_SANITY_REGION_BEFORE > 0 -#define MEMP_SANITY_REGION_BEFORE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEMP_SANITY_REGION_BEFORE) -#else -#define MEMP_SANITY_REGION_BEFORE_ALIGNED 0 -#endif /* MEMP_SANITY_REGION_BEFORE*/ -#ifndef MEMP_SANITY_REGION_AFTER -#define MEMP_SANITY_REGION_AFTER 16 -#endif /* MEMP_SANITY_REGION_AFTER*/ -#if MEMP_SANITY_REGION_AFTER > 0 -#define MEMP_SANITY_REGION_AFTER_ALIGNED LWIP_MEM_ALIGN_SIZE(MEMP_SANITY_REGION_AFTER) -#else -#define MEMP_SANITY_REGION_AFTER_ALIGNED 0 -#endif /* MEMP_SANITY_REGION_AFTER*/ - -/* MEMP_SIZE: save space for struct memp and for sanity check */ -#define MEMP_SIZE (LWIP_MEM_ALIGN_SIZE(sizeof(struct memp)) + MEMP_SANITY_REGION_BEFORE_ALIGNED) -#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x) + MEMP_SANITY_REGION_AFTER_ALIGNED) - -#else /* MEMP_OVERFLOW_CHECK */ - -/* No sanity checks - * We don't need to preserve the struct memp while not allocated, so we - * can save a little space and set MEMP_SIZE to 0. - */ -#define MEMP_SIZE 0 -#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x)) - -#endif /* MEMP_OVERFLOW_CHECK */ - -/** This array holds the first free element of each pool. - * Elements form a linked list. */ -static struct memp *memp_tab[MEMP_MAX]; - -#else /* MEMP_MEM_MALLOC */ - -#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x)) - -#endif /* MEMP_MEM_MALLOC */ - -/** This array holds the element sizes of each pool. */ -#if !MEM_USE_POOLS && !MEMP_MEM_MALLOC -static -#endif -const uint16_t memp_sizes[MEMP_MAX] = { -#define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEM_ALIGN_SIZE(size), -#include "lwip/memp_std.h" -}; - -#if !MEMP_MEM_MALLOC /* don't build if not configured for use in lwipopts.h */ - -/** This array holds the number of elements in each pool. */ -static const uint16_t memp_num[MEMP_MAX] = { -#define LWIP_MEMPOOL(name,num,size,desc) (num), -#include "lwip/memp_std.h" -}; - -/** This array holds a textual description of each pool. */ -#ifdef LWIP_DEBUG -static const char *memp_desc[MEMP_MAX] = { -#define LWIP_MEMPOOL(name,num,size,desc) (desc), -#include "lwip/memp_std.h" -}; -#endif /* LWIP_DEBUG */ - -#if MEMP_SEPARATE_POOLS - -/** This creates each memory pool. These are named memp_memory_XXX_base (where - * XXX is the name of the pool defined in memp_std.h). - * To relocate a pool, declare it as extern in cc.h. Example for GCC: - * extern uint8_t __attribute__((section(".onchip_mem"))) memp_memory_UDP_PCB_base[]; - */ -#define LWIP_MEMPOOL(name,num,size,desc) uint8_t memp_memory_ ## name ## _base \ - [((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))]; -#include "lwip/memp_std.h" - -/** This array holds the base of each memory pool. */ -static uint8_t *const memp_bases[] = { -#define LWIP_MEMPOOL(name,num,size,desc) memp_memory_ ## name ## _base, -#include "lwip/memp_std.h" -}; - -#else /* MEMP_SEPARATE_POOLS */ - -/** This is the actual memory used by the pools (all pools in one big block). */ -static uint8_t memp_memory[MEM_ALIGNMENT - 1 -#define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) ) -#include "lwip/memp_std.h" -]; - -#endif /* MEMP_SEPARATE_POOLS */ - -#if MEMP_SANITY_CHECK -/** - * Check that memp-lists don't form a circle, using "Floyd's cycle-finding algorithm". - */ -static int -memp_sanity(void) -{ - int16_t i; - struct memp *t, *h; - - for (i = 0; i < MEMP_MAX; i++) { - t = memp_tab[i]; - if(t != NULL) { - for (h = t->next; (t != NULL) && (h != NULL); t = t->next, - h = (((h->next != NULL) && (h->next->next != NULL)) ? h->next->next : NULL)) { - if (t == h) { - return 0; - } - } - } - } - return 1; -} -#endif /* MEMP_SANITY_CHECK*/ -#if MEMP_OVERFLOW_CHECK -#if defined(LWIP_DEBUG) && MEMP_STATS -static const char * memp_overflow_names[] = { -#define LWIP_MEMPOOL(name,num,size,desc) "/"desc, -#include "lwip/memp_std.h" - }; -#endif - -/** - * Check if a memp element was victim of an overflow - * (e.g. the restricted area after it has been altered) - * - * @param p the memp element to check - * @param memp_type the pool p comes from - */ -static void -memp_overflow_check_element_overflow(struct memp *p, uint16_t memp_type) -{ - uint16_t k; - uint8_t *m; -#if MEMP_SANITY_REGION_AFTER_ALIGNED > 0 - m = (uint8_t*)p + MEMP_SIZE + memp_sizes[memp_type]; - for (k = 0; k < MEMP_SANITY_REGION_AFTER_ALIGNED; k++) { - if (m[k] != 0xcd) { - char errstr[128] = "detected memp overflow in pool "; - char digit[] = "0"; - if(memp_type >= 10) { - digit[0] = '0' + (memp_type/10); - strcat(errstr, digit); - } - digit[0] = '0' + (memp_type%10); - strcat(errstr, digit); -#if defined(LWIP_DEBUG) && MEMP_STATS - strcat(errstr, memp_overflow_names[memp_type]); -#endif - LWIP_ASSERT(errstr, 0); - } - } -#endif -} - -/** - * Check if a memp element was victim of an underflow - * (e.g. the restricted area before it has been altered) - * - * @param p the memp element to check - * @param memp_type the pool p comes from - */ -static void -memp_overflow_check_element_underflow(struct memp *p, uint16_t memp_type) -{ - uint16_t k; - uint8_t *m; -#if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0 - m = (uint8_t*)p + MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED; - for (k = 0; k < MEMP_SANITY_REGION_BEFORE_ALIGNED; k++) { - if (m[k] != 0xcd) { - char errstr[128] = "detected memp underflow in pool "; - char digit[] = "0"; - if(memp_type >= 10) { - digit[0] = '0' + (memp_type/10); - strcat(errstr, digit); - } - digit[0] = '0' + (memp_type%10); - strcat(errstr, digit); -#if defined(LWIP_DEBUG) && MEMP_STATS - strcat(errstr, memp_overflow_names[memp_type]); -#endif - LWIP_ASSERT(errstr, 0); - } - } -#endif -} - -/** - * Do an overflow check for all elements in every pool. - * - * @see memp_overflow_check_element for a description of the check - */ -static void -memp_overflow_check_all(void) -{ - uint16_t i, j; - struct memp *p; - - p = (struct memp *)LWIP_MEM_ALIGN(memp_memory); - for (i = 0; i < MEMP_MAX; ++i) { - p = p; - for (j = 0; j < memp_num[i]; ++j) { - memp_overflow_check_element_overflow(p, i); - p = (struct memp*)((uint8_t*)p + MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED); - } - } - p = (struct memp *)LWIP_MEM_ALIGN(memp_memory); - for (i = 0; i < MEMP_MAX; ++i) { - p = p; - for (j = 0; j < memp_num[i]; ++j) { - memp_overflow_check_element_underflow(p, i); - p = (struct memp*)((uint8_t*)p + MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED); - } - } -} - -/** - * Initialize the restricted areas of all memp elements in every pool. - */ -static void -memp_overflow_init(void) -{ - uint16_t i, j; - struct memp *p; - uint8_t *m; - - p = (struct memp *)LWIP_MEM_ALIGN(memp_memory); - for (i = 0; i < MEMP_MAX; ++i) { - p = p; - for (j = 0; j < memp_num[i]; ++j) { -#if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0 - m = (uint8_t*)p + MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED; - memset(m, 0xcd, MEMP_SANITY_REGION_BEFORE_ALIGNED); -#endif -#if MEMP_SANITY_REGION_AFTER_ALIGNED > 0 - m = (uint8_t*)p + MEMP_SIZE + memp_sizes[i]; - memset(m, 0xcd, MEMP_SANITY_REGION_AFTER_ALIGNED); -#endif - p = (struct memp*)((uint8_t*)p + MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED); - } - } -} -#endif /* MEMP_OVERFLOW_CHECK */ - -/** - * Initialize this module. - * - * Carves out memp_memory into linked lists for each pool-type. - */ -void -memp_init(void) -{ - struct memp *memp; - uint16_t i, j; - - for (i = 0; i < MEMP_MAX; ++i) { - MEMP_STATS_AVAIL(used, i, 0); - MEMP_STATS_AVAIL(max, i, 0); - MEMP_STATS_AVAIL(err, i, 0); - MEMP_STATS_AVAIL(avail, i, memp_num[i]); - } - -#if !MEMP_SEPARATE_POOLS - memp = (struct memp *)LWIP_MEM_ALIGN(memp_memory); -#endif /* !MEMP_SEPARATE_POOLS */ - /* for every pool: */ - for (i = 0; i < MEMP_MAX; ++i) { - memp_tab[i] = NULL; -#if MEMP_SEPARATE_POOLS - memp = (struct memp*)memp_bases[i]; -#endif /* MEMP_SEPARATE_POOLS */ - /* create a linked list of memp elements */ - for (j = 0; j < memp_num[i]; ++j) { - memp->next = memp_tab[i]; - memp_tab[i] = memp; - memp = (struct memp *)(void *)((uint8_t *)memp + MEMP_SIZE + memp_sizes[i] -#if MEMP_OVERFLOW_CHECK - + MEMP_SANITY_REGION_AFTER_ALIGNED -#endif - ); - } - } -#if MEMP_OVERFLOW_CHECK - memp_overflow_init(); - /* check everything a first time to see if it worked */ - memp_overflow_check_all(); -#endif /* MEMP_OVERFLOW_CHECK */ -} - -/** - * Get an element from a specific pool. - * - * @param type the pool to get an element from - * - * the debug version has two more parameters: - * @param file file name calling this function - * @param line number of line where this function is called - * - * @return a pointer to the allocated memory or a NULL pointer on error - */ -void * -#if !MEMP_OVERFLOW_CHECK -memp_malloc(memp_t type) -#else -memp_malloc_fn(memp_t type, const char* file, const int line) -#endif -{ - struct memp *memp; - SYS_ARCH_DECL_PROTECT(old_level); - - LWIP_ERROR("memp_malloc: type < MEMP_MAX", (type < MEMP_MAX), return NULL;); - - SYS_ARCH_PROTECT(old_level); -#if MEMP_OVERFLOW_CHECK >= 2 - memp_overflow_check_all(); -#endif /* MEMP_OVERFLOW_CHECK >= 2 */ - - memp = memp_tab[type]; - - if (memp != NULL) { - memp_tab[type] = memp->next; -#if MEMP_OVERFLOW_CHECK - memp->next = NULL; - memp->file = file; - memp->line = line; -#endif /* MEMP_OVERFLOW_CHECK */ - MEMP_STATS_INC_USED(used, type); - LWIP_ASSERT("memp_malloc: memp properly aligned", - ((mem_ptr_t)memp % MEM_ALIGNMENT) == 0); - memp = (struct memp*)(void *)((uint8_t*)memp + MEMP_SIZE); - } else { - LWIP_DEBUGF(MEMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("memp_malloc: out of memory in pool %s\n", memp_desc[type])); - MEMP_STATS_INC(err, type); - } - - SYS_ARCH_UNPROTECT(old_level); - - return memp; -} - -/** - * Put an element back into its pool. - * - * @param type the pool where to put mem - * @param mem the memp element to free - */ -void -memp_free(memp_t type, void *mem) -{ - struct memp *memp; - SYS_ARCH_DECL_PROTECT(old_level); - - if (mem == NULL) { - return; - } - LWIP_ASSERT("memp_free: mem properly aligned", - ((mem_ptr_t)mem % MEM_ALIGNMENT) == 0); - - memp = (struct memp *)(void *)((uint8_t*)mem - MEMP_SIZE); - - SYS_ARCH_PROTECT(old_level); -#if MEMP_OVERFLOW_CHECK -#if MEMP_OVERFLOW_CHECK >= 2 - memp_overflow_check_all(); -#else - memp_overflow_check_element_overflow(memp, type); - memp_overflow_check_element_underflow(memp, type); -#endif /* MEMP_OVERFLOW_CHECK >= 2 */ -#endif /* MEMP_OVERFLOW_CHECK */ - - MEMP_STATS_DEC(used, type); - - memp->next = memp_tab[type]; - memp_tab[type] = memp; - -#if MEMP_SANITY_CHECK - LWIP_ASSERT("memp sanity", memp_sanity()); -#endif /* MEMP_SANITY_CHECK */ - - SYS_ARCH_UNPROTECT(old_level); -} - -#endif /* MEMP_MEM_MALLOC */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/netif.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/netif.c deleted file mode 100644 index 3787c92..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/netif.c +++ /dev/null @@ -1,774 +0,0 @@ -/** - * @file - * lwIP network interface abstraction - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#include "lwip/def.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/tcp_impl.h" -#include "lwip/snmp.h" -#include "lwip/igmp.h" -#include "netif/etharp.h" -#include "lwip/stats.h" -#if ENABLE_LOOPBACK -#include "lwip/sys.h" -#if LWIP_NETIF_LOOPBACK_MULTITHREADING -#include "lwip/tcpip.h" -#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */ -#endif /* ENABLE_LOOPBACK */ - -#if LWIP_AUTOIP -#include "lwip/autoip.h" -#endif /* LWIP_AUTOIP */ -#if LWIP_DHCP -#include "lwip/dhcp.h" -#endif /* LWIP_DHCP */ - -#if LWIP_NETIF_STATUS_CALLBACK -#define NETIF_STATUS_CALLBACK(n) do{ if (n->status_callback) { (n->status_callback)(n); }}while(0) -#else -#define NETIF_STATUS_CALLBACK(n) -#endif /* LWIP_NETIF_STATUS_CALLBACK */ - -#if LWIP_NETIF_LINK_CALLBACK -#define NETIF_LINK_CALLBACK(n) do{ if (n->link_callback) { (n->link_callback)(n); }}while(0) -#else -#define NETIF_LINK_CALLBACK(n) -#endif /* LWIP_NETIF_LINK_CALLBACK */ - -struct netif *netif_list; -struct netif *netif_default; - -static uint8_t netif_num; - -#if LWIP_HAVE_LOOPIF -static struct netif loop_netif; - -/** - * Initialize a lwip network interface structure for a loopback interface - * - * @param netif the lwip network interface structure for this loopif - * @return ERR_OK if the loopif is initialized - * ERR_MEM if private data couldn't be allocated - */ -static err_t -netif_loopif_init(struct netif *netif) -{ - /* initialize the snmp variables and counters inside the struct netif - * ifSpeed: no assumption can be made! - */ - NETIF_INIT_SNMP(netif, snmp_ifType_softwareLoopback, 0); - - netif->name[0] = 'l'; - netif->name[1] = 'o'; - netif->output = netif_loop_output; - return ERR_OK; -} -#endif /* LWIP_HAVE_LOOPIF */ - -void -netif_init(void) -{ -#if LWIP_HAVE_LOOPIF - ip_addr_t loop_ipaddr, loop_netmask, loop_gw; - IP4_ADDR(&loop_gw, 127,0,0,1); - IP4_ADDR(&loop_ipaddr, 127,0,0,1); - IP4_ADDR(&loop_netmask, 255,0,0,0); - -#if NO_SYS - netif_add(&loop_netif, &loop_ipaddr, &loop_netmask, &loop_gw, NULL, netif_loopif_init, ip_input); -#else /* NO_SYS */ - netif_add(&loop_netif, &loop_ipaddr, &loop_netmask, &loop_gw, NULL, netif_loopif_init, tcpip_input); -#endif /* NO_SYS */ - netif_set_up(&loop_netif); - -#endif /* LWIP_HAVE_LOOPIF */ -} - -/** - * Add a network interface to the list of lwIP netifs. - * - * @param netif a pre-allocated netif structure - * @param ipaddr IP address for the new netif - * @param netmask network mask for the new netif - * @param gw default gateway IP address for the new netif - * @param state opaque data passed to the new netif - * @param init callback function that initializes the interface - * @param input callback function that is called to pass - * ingress packets up in the protocol layer stack. - * - * @return netif, or NULL if failed. - */ -struct netif * -netif_add(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask, - ip_addr_t *gw, void *state, netif_init_fn init, netif_input_fn input) -{ - - LWIP_ASSERT("No init function given", init != NULL); - - /* reset new interface configuration state */ - ip_addr_set_zero(&netif->ip_addr); - ip_addr_set_zero(&netif->netmask); - ip_addr_set_zero(&netif->gw); - netif->flags = 0; -#if LWIP_DHCP - /* netif not under DHCP control by default */ - netif->dhcp = NULL; -#endif /* LWIP_DHCP */ -#if LWIP_AUTOIP - /* netif not under AutoIP control by default */ - netif->autoip = NULL; -#endif /* LWIP_AUTOIP */ -#if LWIP_NETIF_STATUS_CALLBACK - netif->status_callback = NULL; -#endif /* LWIP_NETIF_STATUS_CALLBACK */ -#if LWIP_NETIF_LINK_CALLBACK - netif->link_callback = NULL; -#endif /* LWIP_NETIF_LINK_CALLBACK */ -#if LWIP_IGMP - netif->igmp_mac_filter = NULL; -#endif /* LWIP_IGMP */ -#if ENABLE_LOOPBACK - netif->loop_first = NULL; - netif->loop_last = NULL; -#endif /* ENABLE_LOOPBACK */ - - /* remember netif specific state information data */ - netif->state = state; - netif->num = netif_num++; - netif->input = input; - NETIF_SET_HWADDRHINT(netif, NULL); -#if ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS - netif->loop_cnt_current = 0; -#endif /* ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS */ - - netif_set_addr(netif, ipaddr, netmask, gw); - - /* call user specified initialization function for netif */ - if (init(netif) != ERR_OK) { - return NULL; - } - - /* add this netif to the list */ - netif->next = netif_list; - netif_list = netif; - snmp_inc_iflist(); - -#if LWIP_IGMP - /* start IGMP processing */ - if (netif->flags & NETIF_FLAG_IGMP) { - igmp_start(netif); - } -#endif /* LWIP_IGMP */ - - LWIP_DEBUGF(NETIF_DEBUG, ("netif: added interface %c%c IP addr ", - netif->name[0], netif->name[1])); - ip_addr_debug_print(NETIF_DEBUG, ipaddr); - LWIP_DEBUGF(NETIF_DEBUG, (" netmask ")); - ip_addr_debug_print(NETIF_DEBUG, netmask); - LWIP_DEBUGF(NETIF_DEBUG, (" gw ")); - ip_addr_debug_print(NETIF_DEBUG, gw); - LWIP_DEBUGF(NETIF_DEBUG, ("\n")); - return netif; -} - -/** - * Change IP address configuration for a network interface (including netmask - * and default gateway). - * - * @param netif the network interface to change - * @param ipaddr the new IP address - * @param netmask the new netmask - * @param gw the new default gateway - */ -void -netif_set_addr(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask, - ip_addr_t *gw) -{ - netif_set_ipaddr(netif, ipaddr); - netif_set_netmask(netif, netmask); - netif_set_gw(netif, gw); -} - -/** - * Remove a network interface from the list of lwIP netifs. - * - * @param netif the network interface to remove - */ -void -netif_remove(struct netif *netif) -{ - if (netif == NULL) { - return; - } - -#if LWIP_IGMP - /* stop IGMP processing */ - if (netif->flags & NETIF_FLAG_IGMP) { - igmp_stop(netif); - } -#endif /* LWIP_IGMP */ - if (netif_is_up(netif)) { - /* set netif down before removing (call callback function) */ - netif_set_down(netif); - } - - snmp_delete_ipaddridx_tree(netif); - - /* is it the first netif? */ - if (netif_list == netif) { - netif_list = netif->next; - } else { - /* look for netif further down the list */ - struct netif * tmpNetif; - for (tmpNetif = netif_list; tmpNetif != NULL; tmpNetif = tmpNetif->next) { - if (tmpNetif->next == netif) { - tmpNetif->next = netif->next; - break; - } - } - if (tmpNetif == NULL) - return; /* we didn't find any netif today */ - } - snmp_dec_iflist(); - /* this netif is default? */ - if (netif_default == netif) { - /* reset default netif */ - netif_set_default(NULL); - } -#if LWIP_NETIF_REMOVE_CALLBACK - if (netif->remove_callback) { - netif->remove_callback(netif); - } -#endif /* LWIP_NETIF_REMOVE_CALLBACK */ - LWIP_DEBUGF( NETIF_DEBUG, ("netif_remove: removed netif\n") ); -} - -/** - * Find a network interface by searching for its name - * - * @param name the name of the netif (like netif->name) plus concatenated number - * in ascii representation (e.g. 'en0') - */ -struct netif * -netif_find(char *name) -{ - struct netif *netif; - uint8_t num; - - if (name == NULL) { - return NULL; - } - - num = name[2] - '0'; - - for(netif = netif_list; netif != NULL; netif = netif->next) { - if (num == netif->num && - name[0] == netif->name[0] && - name[1] == netif->name[1]) { - LWIP_DEBUGF(NETIF_DEBUG, ("netif_find: found %c%c\n", name[0], name[1])); - return netif; - } - } - LWIP_DEBUGF(NETIF_DEBUG, ("netif_find: didn't find %c%c\n", name[0], name[1])); - return NULL; -} - -/** - * Change the IP address of a network interface - * - * @param netif the network interface to change - * @param ipaddr the new IP address - * - * @note call netif_set_addr() if you also want to change netmask and - * default gateway - */ -void -netif_set_ipaddr(struct netif *netif, ip_addr_t *ipaddr) -{ - /* TODO: Handling of obsolete pcbs */ - /* See: http://mail.gnu.org/archive/html/lwip-users/2003-03/msg00118.html */ -#if LWIP_TCP - struct tcp_pcb *pcb; - struct tcp_pcb_listen *lpcb; - - /* address is actually being changed? */ - if (ipaddr && (ip_addr_cmp(ipaddr, &(netif->ip_addr))) == 0) { - /* extern struct tcp_pcb *tcp_active_pcbs; defined by tcp.h */ - LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: netif address being changed\n")); - pcb = tcp_active_pcbs; - while (pcb != NULL) { - /* PCB bound to current local interface address? */ - if (ip_addr_cmp(&(pcb->local_ip), &(netif->ip_addr)) -#if LWIP_AUTOIP - /* connections to link-local addresses must persist (RFC3927 ch. 1.9) */ - && !ip_addr_islinklocal(&(pcb->local_ip)) -#endif /* LWIP_AUTOIP */ - ) { - /* this connection must be aborted */ - struct tcp_pcb *next = pcb->next; - LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: aborting TCP pcb %p\n", (void *)pcb)); - tcp_abort(pcb); - pcb = next; - } else { - pcb = pcb->next; - } - } - for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { - /* PCB bound to current local interface address? */ - if ((!(ip_addr_isany(&(lpcb->local_ip)))) && - (ip_addr_cmp(&(lpcb->local_ip), &(netif->ip_addr)))) { - /* The PCB is listening to the old ipaddr and - * is set to listen to the new one instead */ - ip_addr_set(&(lpcb->local_ip), ipaddr); - } - } - } -#endif - snmp_delete_ipaddridx_tree(netif); - snmp_delete_iprteidx_tree(0,netif); - /* set new IP address to netif */ - ip_addr_set(&(netif->ip_addr), ipaddr); - snmp_insert_ipaddridx_tree(netif); - snmp_insert_iprteidx_tree(0,netif); - - LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: IP address of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - netif->name[0], netif->name[1], - ip4_addr1_16(&netif->ip_addr), - ip4_addr2_16(&netif->ip_addr), - ip4_addr3_16(&netif->ip_addr), - ip4_addr4_16(&netif->ip_addr))); -} - -/** - * Change the default gateway for a network interface - * - * @param netif the network interface to change - * @param gw the new default gateway - * - * @note call netif_set_addr() if you also want to change ip address and netmask - */ -void -netif_set_gw(struct netif *netif, ip_addr_t *gw) -{ - ip_addr_set(&(netif->gw), gw); - LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: GW address of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - netif->name[0], netif->name[1], - ip4_addr1_16(&netif->gw), - ip4_addr2_16(&netif->gw), - ip4_addr3_16(&netif->gw), - ip4_addr4_16(&netif->gw))); -} - -/** - * Change the netmask of a network interface - * - * @param netif the network interface to change - * @param netmask the new netmask - * - * @note call netif_set_addr() if you also want to change ip address and - * default gateway - */ -void -netif_set_netmask(struct netif *netif, ip_addr_t *netmask) -{ - snmp_delete_iprteidx_tree(0, netif); - /* set new netmask to netif */ - ip_addr_set(&(netif->netmask), netmask); - snmp_insert_iprteidx_tree(0, netif); - LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: netmask of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - netif->name[0], netif->name[1], - ip4_addr1_16(&netif->netmask), - ip4_addr2_16(&netif->netmask), - ip4_addr3_16(&netif->netmask), - ip4_addr4_16(&netif->netmask))); -} - -/** - * Set a network interface as the default network interface - * (used to output all packets for which no specific route is found) - * - * @param netif the default network interface - */ -void -netif_set_default(struct netif *netif) -{ - if (netif == NULL) { - /* remove default route */ - snmp_delete_iprteidx_tree(1, netif); - } else { - /* install default route */ - snmp_insert_iprteidx_tree(1, netif); - } - netif_default = netif; - LWIP_DEBUGF(NETIF_DEBUG, ("netif: setting default interface %c%c\n", - netif ? netif->name[0] : '\'', netif ? netif->name[1] : '\'')); -} - -/** - * Bring an interface up, available for processing - * traffic. - * - * @note: Enabling DHCP on a down interface will make it come - * up once configured. - * - * @see dhcp_start() - */ -void netif_set_up(struct netif *netif) -{ - if (!(netif->flags & NETIF_FLAG_UP)) { - netif->flags |= NETIF_FLAG_UP; - -#if LWIP_SNMP - snmp_get_sysuptime(&netif->ts); -#endif /* LWIP_SNMP */ - - NETIF_STATUS_CALLBACK(netif); - - if (netif->flags & NETIF_FLAG_LINK_UP) { -#if LWIP_ARP - /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */ - if (netif->flags & (NETIF_FLAG_ETHARP)) { - etharp_gratuitous(netif); - } -#endif /* LWIP_ARP */ - -#if LWIP_IGMP - /* resend IGMP memberships */ - if (netif->flags & NETIF_FLAG_IGMP) { - igmp_report_groups( netif); - } -#endif /* LWIP_IGMP */ - } - } -} - -/** - * Bring an interface down, disabling any traffic processing. - * - * @note: Enabling DHCP on a down interface will make it come - * up once configured. - * - * @see dhcp_start() - */ -void netif_set_down(struct netif *netif) -{ - if (netif->flags & NETIF_FLAG_UP) { - netif->flags &= ~NETIF_FLAG_UP; -#if LWIP_SNMP - snmp_get_sysuptime(&netif->ts); -#endif - -#if LWIP_ARP - if (netif->flags & NETIF_FLAG_ETHARP) { - etharp_cleanup_netif(netif); - } -#endif /* LWIP_ARP */ - NETIF_STATUS_CALLBACK(netif); - } -} - -#if LWIP_NETIF_STATUS_CALLBACK -/** - * Set callback to be called when interface is brought up/down - */ -void netif_set_status_callback(struct netif *netif, netif_status_callback_fn status_callback) -{ - if (netif) { - netif->status_callback = status_callback; - } -} -#endif /* LWIP_NETIF_STATUS_CALLBACK */ - -#if LWIP_NETIF_REMOVE_CALLBACK -/** - * Set callback to be called when the interface has been removed - */ -void -netif_set_remove_callback(struct netif *netif, netif_status_callback_fn remove_callback) -{ - if (netif) { - netif->remove_callback = remove_callback; - } -} -#endif /* LWIP_NETIF_REMOVE_CALLBACK */ - -/** - * Called by a driver when its link goes up - */ -void netif_set_link_up(struct netif *netif ) -{ - if (!(netif->flags & NETIF_FLAG_LINK_UP)) { - netif->flags |= NETIF_FLAG_LINK_UP; - -#if LWIP_DHCP - if (netif->dhcp) { - dhcp_network_changed(netif); - } -#endif /* LWIP_DHCP */ - -#if LWIP_AUTOIP - if (netif->autoip) { - autoip_network_changed(netif); - } -#endif /* LWIP_AUTOIP */ - - if (netif->flags & NETIF_FLAG_UP) { -#if LWIP_ARP - /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */ - if (netif->flags & NETIF_FLAG_ETHARP) { - etharp_gratuitous(netif); - } -#endif /* LWIP_ARP */ - -#if LWIP_IGMP - /* resend IGMP memberships */ - if (netif->flags & NETIF_FLAG_IGMP) { - igmp_report_groups( netif); - } -#endif /* LWIP_IGMP */ - } - NETIF_LINK_CALLBACK(netif); - } -} - -/** - * Called by a driver when its link goes down - */ -void netif_set_link_down(struct netif *netif ) -{ - if (netif->flags & NETIF_FLAG_LINK_UP) { - netif->flags &= ~NETIF_FLAG_LINK_UP; - NETIF_LINK_CALLBACK(netif); - } -} - -#if LWIP_NETIF_LINK_CALLBACK -/** - * Set callback to be called when link is brought up/down - */ -void netif_set_link_callback(struct netif *netif, netif_status_callback_fn link_callback) -{ - if (netif) { - netif->link_callback = link_callback; - } -} -#endif /* LWIP_NETIF_LINK_CALLBACK */ - -#if ENABLE_LOOPBACK -/** - * Send an IP packet to be received on the same netif (loopif-like). - * The pbuf is simply copied and handed back to netif->input. - * In multithreaded mode, this is done directly since netif->input must put - * the packet on a queue. - * In callback mode, the packet is put on an internal queue and is fed to - * netif->input by netif_poll(). - * - * @param netif the lwip network interface structure - * @param p the (IP) packet to 'send' - * @param ipaddr the ip address to send the packet to (not used) - * @return ERR_OK if the packet has been sent - * ERR_MEM if the pbuf used to copy the packet couldn't be allocated - */ -err_t -netif_loop_output(struct netif *netif, struct pbuf *p, - ip_addr_t *ipaddr) -{ - struct pbuf *r; - err_t err; - struct pbuf *last; -#if LWIP_LOOPBACK_MAX_PBUFS - uint8_t clen = 0; -#endif /* LWIP_LOOPBACK_MAX_PBUFS */ - /* If we have a loopif, SNMP counters are adjusted for it, - * if not they are adjusted for 'netif'. */ -#if LWIP_SNMP -#if LWIP_HAVE_LOOPIF - struct netif *stats_if = &loop_netif; -#else /* LWIP_HAVE_LOOPIF */ - struct netif *stats_if = netif; -#endif /* LWIP_HAVE_LOOPIF */ -#endif /* LWIP_SNMP */ - SYS_ARCH_DECL_PROTECT(lev); - LWIP_UNUSED_ARG(ipaddr); - - /* Allocate a new pbuf */ - r = pbuf_alloc(PBUF_LINK, p->tot_len, PBUF_RAM); - if (r == NULL) { - LINK_STATS_INC(link.memerr); - LINK_STATS_INC(link.drop); - snmp_inc_ifoutdiscards(stats_if); - return ERR_MEM; - } -#if LWIP_LOOPBACK_MAX_PBUFS - clen = pbuf_clen(r); - /* check for overflow or too many pbuf on queue */ - if(((netif->loop_cnt_current + clen) < netif->loop_cnt_current) || - ((netif->loop_cnt_current + clen) > LWIP_LOOPBACK_MAX_PBUFS)) { - pbuf_free(r); - LINK_STATS_INC(link.memerr); - LINK_STATS_INC(link.drop); - snmp_inc_ifoutdiscards(stats_if); - return ERR_MEM; - } - netif->loop_cnt_current += clen; -#endif /* LWIP_LOOPBACK_MAX_PBUFS */ - - /* Copy the whole pbuf queue p into the single pbuf r */ - if ((err = pbuf_copy(r, p)) != ERR_OK) { - pbuf_free(r); - LINK_STATS_INC(link.memerr); - LINK_STATS_INC(link.drop); - snmp_inc_ifoutdiscards(stats_if); - return err; - } - - /* Put the packet on a linked list which gets emptied through calling - netif_poll(). */ - - /* let last point to the last pbuf in chain r */ - for (last = r; last->next != NULL; last = last->next); - - SYS_ARCH_PROTECT(lev); - if(netif->loop_first != NULL) { - LWIP_ASSERT("if first != NULL, last must also be != NULL", netif->loop_last != NULL); - netif->loop_last->next = r; - netif->loop_last = last; - } else { - netif->loop_first = r; - netif->loop_last = last; - } - SYS_ARCH_UNPROTECT(lev); - - LINK_STATS_INC(link.xmit); - snmp_add_ifoutoctets(stats_if, p->tot_len); - snmp_inc_ifoutucastpkts(stats_if); - -#if LWIP_NETIF_LOOPBACK_MULTITHREADING - /* For multithreading environment, schedule a call to netif_poll */ - tcpip_callback((tcpip_callback_fn)netif_poll, netif); -#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */ - - return ERR_OK; -} - -/** - * Call netif_poll() in the main loop of your application. This is to prevent - * reentering non-reentrant functions like tcp_input(). Packets passed to - * netif_loop_output() are put on a list that is passed to netif->input() by - * netif_poll(). - */ -void -netif_poll(struct netif *netif) -{ - struct pbuf *in; - /* If we have a loopif, SNMP counters are adjusted for it, - * if not they are adjusted for 'netif'. */ -#if LWIP_SNMP -#if LWIP_HAVE_LOOPIF - struct netif *stats_if = &loop_netif; -#else /* LWIP_HAVE_LOOPIF */ - struct netif *stats_if = netif; -#endif /* LWIP_HAVE_LOOPIF */ -#endif /* LWIP_SNMP */ - SYS_ARCH_DECL_PROTECT(lev); - - do { - /* Get a packet from the list. With SYS_LIGHTWEIGHT_PROT=1, this is protected */ - SYS_ARCH_PROTECT(lev); - in = netif->loop_first; - if (in != NULL) { - struct pbuf *in_end = in; -#if LWIP_LOOPBACK_MAX_PBUFS - uint8_t clen = pbuf_clen(in); - /* adjust the number of pbufs on queue */ - LWIP_ASSERT("netif->loop_cnt_current underflow", - ((netif->loop_cnt_current - clen) < netif->loop_cnt_current)); - netif->loop_cnt_current -= clen; -#endif /* LWIP_LOOPBACK_MAX_PBUFS */ - while (in_end->len != in_end->tot_len) { - LWIP_ASSERT("bogus pbuf: len != tot_len but next == NULL!", in_end->next != NULL); - in_end = in_end->next; - } - /* 'in_end' now points to the last pbuf from 'in' */ - if (in_end == netif->loop_last) { - /* this was the last pbuf in the list */ - netif->loop_first = netif->loop_last = NULL; - } else { - /* pop the pbuf off the list */ - netif->loop_first = in_end->next; - LWIP_ASSERT("should not be null since first != last!", netif->loop_first != NULL); - } - /* De-queue the pbuf from its successors on the 'loop_' list. */ - in_end->next = NULL; - } - SYS_ARCH_UNPROTECT(lev); - - if (in != NULL) { - LINK_STATS_INC(link.recv); - snmp_add_ifinoctets(stats_if, in->tot_len); - snmp_inc_ifinucastpkts(stats_if); - /* loopback packets are always IP packets! */ - if (ip_input(in, netif) != ERR_OK) { - pbuf_free(in); - } - /* Don't reference the packet any more! */ - in = NULL; - } - /* go on while there is a packet on the list */ - } while (netif->loop_first != NULL); -} - -#if !LWIP_NETIF_LOOPBACK_MULTITHREADING -/** - * Calls netif_poll() for every netif on the netif_list. - */ -void -netif_poll_all(void) -{ - struct netif *netif = netif_list; - /* loop through netifs */ - while (netif != NULL) { - netif_poll(netif); - /* proceed to next network interface */ - netif = netif->next; - } -} -#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ -#endif /* ENABLE_LOOPBACK */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/pbuf.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/pbuf.c deleted file mode 100644 index d90a851..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/pbuf.c +++ /dev/null @@ -1,1179 +0,0 @@ -/** - * @file - * Packet buffer management - * - * Packets are built from the pbuf data structure. It supports dynamic - * memory allocation for packet contents or can reference externally - * managed packet contents both in RAM and ROM. Quick allocation for - * incoming packets is provided through pools with fixed sized pbufs. - * - * A packet may span over multiple pbufs, chained as a singly linked - * list. This is called a "pbuf chain". - * - * Multiple packets may be queued, also using this singly linked list. - * This is called a "packet queue". - * - * So, a packet queue consists of one or more pbuf chains, each of - * which consist of one or more pbufs. CURRENTLY, PACKET QUEUES ARE - * NOT SUPPORTED! Use helper structs to queue multiple packets. - * - * The differences between a pbuf chain and a packet queue are very - * precise but subtle. - * - * The last pbuf of a packet has a ->tot_len field that equals the - * ->len field. It can be found by traversing the list. If the last - * pbuf of a packet has a ->next field other than NULL, more packets - * are on the queue. - * - * Therefore, looping through a pbuf of a single packet, has an - * loop end condition (tot_len == p->len), NOT (next == NULL). - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#include "lwip/stats.h" -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/memp.h" -#include "lwip/pbuf.h" -#include "lwip/sys.h" -#include "arch/perf.h" -#if LWIP_TCP && TCP_QUEUE_OOSEQ -#include "lwip/tcp_impl.h" -#endif -#if LWIP_CHECKSUM_ON_COPY -#include "lwip/inet_chksum.h" -#endif - -#include - -#define SIZEOF_STRUCT_PBUF LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) -/* Since the pool is created in memp, PBUF_POOL_BUFSIZE will be automatically - aligned there. Therefore, PBUF_POOL_BUFSIZE_ALIGNED can be used here. */ -#define PBUF_POOL_BUFSIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(PBUF_POOL_BUFSIZE) - -#if !LWIP_TCP || !TCP_QUEUE_OOSEQ || !PBUF_POOL_FREE_OOSEQ -#define PBUF_POOL_IS_EMPTY() -#else /* !LWIP_TCP || !TCP_QUEUE_OOSEQ || !PBUF_POOL_FREE_OOSEQ */ - -#if !NO_SYS -#ifndef PBUF_POOL_FREE_OOSEQ_QUEUE_CALL -#include "lwip/tcpip.h" -#define PBUF_POOL_FREE_OOSEQ_QUEUE_CALL() do { \ - if(tcpip_callback_with_block(pbuf_free_ooseq_callback, NULL, 0) != ERR_OK) { \ - SYS_ARCH_PROTECT(old_level); \ - pbuf_free_ooseq_pending = 0; \ - SYS_ARCH_UNPROTECT(old_level); \ - } } while(0) -#endif /* PBUF_POOL_FREE_OOSEQ_QUEUE_CALL */ -#endif /* !NO_SYS */ - -volatile uint8_t pbuf_free_ooseq_pending; -#define PBUF_POOL_IS_EMPTY() pbuf_pool_is_empty() - -/** - * Attempt to reclaim some memory from queued out-of-sequence TCP segments - * if we run out of pool pbufs. It's better to give priority to new packets - * if we're running out. - * - * This must be done in the correct thread context therefore this function - * can only be used with NO_SYS=0 and through tcpip_callback. - */ -#if !NO_SYS -static -#endif /* !NO_SYS */ -void -pbuf_free_ooseq(void) -{ - struct tcp_pcb* pcb; - SYS_ARCH_DECL_PROTECT(old_level); - - SYS_ARCH_PROTECT(old_level); - pbuf_free_ooseq_pending = 0; - SYS_ARCH_UNPROTECT(old_level); - - for (pcb = tcp_active_pcbs; NULL != pcb; pcb = pcb->next) { - if (NULL != pcb->ooseq) { - /** Free the ooseq pbufs of one PCB only */ - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free_ooseq: freeing out-of-sequence pbufs\n")); - tcp_segs_free(pcb->ooseq); - pcb->ooseq = NULL; - return; - } - } -} - -#if !NO_SYS -/** - * Just a callback function for tcpip_timeout() that calls pbuf_free_ooseq(). - */ -static void -pbuf_free_ooseq_callback(void *arg) -{ - LWIP_UNUSED_ARG(arg); - pbuf_free_ooseq(); -} -#endif /* !NO_SYS */ - -/** Queue a call to pbuf_free_ooseq if not already queued. */ -static void -pbuf_pool_is_empty(void) -{ -#ifndef PBUF_POOL_FREE_OOSEQ_QUEUE_CALL - SYS_ARCH_DECL_PROTECT(old_level); - SYS_ARCH_PROTECT(old_level); - pbuf_free_ooseq_pending = 1; - SYS_ARCH_UNPROTECT(old_level); -#else /* PBUF_POOL_FREE_OOSEQ_QUEUE_CALL */ - uint8_t queued; - SYS_ARCH_DECL_PROTECT(old_level); - SYS_ARCH_PROTECT(old_level); - queued = pbuf_free_ooseq_pending; - pbuf_free_ooseq_pending = 1; - SYS_ARCH_UNPROTECT(old_level); - - if(!queued) { - /* queue a call to pbuf_free_ooseq if not already queued */ - PBUF_POOL_FREE_OOSEQ_QUEUE_CALL(); - } -#endif /* PBUF_POOL_FREE_OOSEQ_QUEUE_CALL */ -} -#endif /* !LWIP_TCP || !TCP_QUEUE_OOSEQ || !PBUF_POOL_FREE_OOSEQ */ - -/** - * Allocates a pbuf of the given type (possibly a chain for PBUF_POOL type). - * - * The actual memory allocated for the pbuf is determined by the - * layer at which the pbuf is allocated and the requested size - * (from the size parameter). - * - * @param layer flag to define header size - * @param length size of the pbuf's payload - * @param type this parameter decides how and where the pbuf - * should be allocated as follows: - * - * - PBUF_RAM: buffer memory for pbuf is allocated as one large - * chunk. This includes protocol headers as well. - * - PBUF_ROM: no buffer memory is allocated for the pbuf, even for - * protocol headers. Additional headers must be prepended - * by allocating another pbuf and chain in to the front of - * the ROM pbuf. It is assumed that the memory used is really - * similar to ROM in that it is immutable and will not be - * changed. Memory which is dynamic should generally not - * be attached to PBUF_ROM pbufs. Use PBUF_REF instead. - * - PBUF_REF: no buffer memory is allocated for the pbuf, even for - * protocol headers. It is assumed that the pbuf is only - * being used in a single thread. If the pbuf gets queued, - * then pbuf_take should be called to copy the buffer. - * - PBUF_POOL: the pbuf is allocated as a pbuf chain, with pbufs from - * the pbuf pool that is allocated during pbuf_init(). - * - * @return the allocated pbuf. If multiple pbufs where allocated, this - * is the first pbuf of a pbuf chain. - */ -struct pbuf * -pbuf_alloc(pbuf_layer layer, uint16_t length, pbuf_type type) -{ - struct pbuf *p, *q, *r; - uint16_t offset; - int32_t rem_len; /* remaining length */ - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F")\n", length)); - - /* determine header offset */ - switch (layer) { - case PBUF_TRANSPORT: - /* add room for transport (often TCP) layer header */ - offset = PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN; - break; - case PBUF_IP: - /* add room for IP layer header */ - offset = PBUF_LINK_HLEN + PBUF_IP_HLEN; - break; - case PBUF_LINK: - /* add room for link layer header */ - offset = PBUF_LINK_HLEN; - break; - case PBUF_RAW: - offset = 0; - break; - default: - LWIP_ASSERT("pbuf_alloc: bad pbuf layer", 0); - return NULL; - } - - switch (type) { - case PBUF_POOL: - /* allocate head of pbuf chain into p */ - p = (struct pbuf *)memp_malloc(MEMP_PBUF_POOL); - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc: allocated pbuf %p\n", (void *)p)); - if (p == NULL) { - PBUF_POOL_IS_EMPTY(); - return NULL; - } - p->type = type; - p->next = NULL; - - /* make the payload pointer point 'offset' bytes into pbuf data memory */ - p->payload = LWIP_MEM_ALIGN((void *)((uint8_t *)p + (SIZEOF_STRUCT_PBUF + offset))); - LWIP_ASSERT("pbuf_alloc: pbuf p->payload properly aligned", - ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0); - /* the total length of the pbuf chain is the requested size */ - p->tot_len = length; - /* set the length of the first pbuf in the chain */ - p->len = LWIP_MIN(length, PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset)); - LWIP_ASSERT("check p->payload + p->len does not overflow pbuf", - ((uint8_t*)p->payload + p->len <= - (uint8_t*)p + SIZEOF_STRUCT_PBUF + PBUF_POOL_BUFSIZE_ALIGNED)); - LWIP_ASSERT("PBUF_POOL_BUFSIZE must be bigger than MEM_ALIGNMENT", - (PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset)) > 0 ); - /* set reference count (needed here in case we fail) */ - p->ref = 1; - - /* now allocate the tail of the pbuf chain */ - - /* remember first pbuf for linkage in next iteration */ - r = p; - /* remaining length to be allocated */ - rem_len = length - p->len; - /* any remaining pbufs to be allocated? */ - while (rem_len > 0) { - q = (struct pbuf *)memp_malloc(MEMP_PBUF_POOL); - if (q == NULL) { - PBUF_POOL_IS_EMPTY(); - /* free chain so far allocated */ - pbuf_free(p); - /* bail out unsuccesfully */ - return NULL; - } - q->type = type; - q->flags = 0; - q->next = NULL; - /* make previous pbuf point to this pbuf */ - r->next = q; - /* set total length of this pbuf and next in chain */ - LWIP_ASSERT("rem_len < max_u16_t", rem_len < 0xffff); - q->tot_len = (uint16_t)rem_len; - /* this pbuf length is pool size, unless smaller sized tail */ - q->len = LWIP_MIN((uint16_t)rem_len, PBUF_POOL_BUFSIZE_ALIGNED); - q->payload = (void *)((uint8_t *)q + SIZEOF_STRUCT_PBUF); - LWIP_ASSERT("pbuf_alloc: pbuf q->payload properly aligned", - ((mem_ptr_t)q->payload % MEM_ALIGNMENT) == 0); - LWIP_ASSERT("check p->payload + p->len does not overflow pbuf", - ((uint8_t*)p->payload + p->len <= - (uint8_t*)p + SIZEOF_STRUCT_PBUF + PBUF_POOL_BUFSIZE_ALIGNED)); - q->ref = 1; - /* calculate remaining length to be allocated */ - rem_len -= q->len; - /* remember this pbuf for linkage in next iteration */ - r = q; - } - /* end of chain */ - /*r->next = NULL;*/ - - break; - case PBUF_RAM: - /* If pbuf is to be allocated in RAM, allocate memory for it. */ - p = (struct pbuf*)mem_malloc(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF + offset) + LWIP_MEM_ALIGN_SIZE(length)); - if (p == NULL) { - return NULL; - } - /* Set up internal structure of the pbuf. */ - p->payload = LWIP_MEM_ALIGN((void *)((uint8_t *)p + SIZEOF_STRUCT_PBUF + offset)); - p->len = p->tot_len = length; - p->next = NULL; - p->type = type; - - LWIP_ASSERT("pbuf_alloc: pbuf->payload properly aligned", - ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0); - break; - /* pbuf references existing (non-volatile static constant) ROM payload? */ - case PBUF_ROM: - /* pbuf references existing (externally allocated) RAM payload? */ - case PBUF_REF: - /* only allocate memory for the pbuf structure */ - p = (struct pbuf *)memp_malloc(MEMP_PBUF); - if (p == NULL) { - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, - ("pbuf_alloc: Could not allocate MEMP_PBUF for PBUF_%s.\n", - (type == PBUF_ROM) ? "ROM" : "REF")); - return NULL; - } - /* caller must set this field properly, afterwards */ - p->payload = NULL; - p->len = p->tot_len = length; - p->next = NULL; - p->type = type; - break; - default: - LWIP_ASSERT("pbuf_alloc: erroneous type", 0); - return NULL; - } - /* set reference count */ - p->ref = 1; - /* set flags */ - p->flags = 0; - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F") == %p\n", length, (void *)p)); - return p; -} - -#if LWIP_SUPPORT_CUSTOM_PBUF -/** Initialize a custom pbuf (already allocated). - * - * @param layer flag to define header size - * @param length size of the pbuf's payload - * @param type type of the pbuf (only used to treat the pbuf accordingly, as - * this function allocates no memory) - * @param p pointer to the custom pbuf to initialize (already allocated) - * @param payload_mem pointer to the buffer that is used for payload and headers, - * must be at least big enough to hold 'length' plus the header size, - * may be NULL if set later. - * ATTENTION: The caller is responsible for correct alignment of this buffer! - * @param payload_mem_len the size of the 'payload_mem' buffer, must be at least - * big enough to hold 'length' plus the header size - */ -struct pbuf* -pbuf_alloced_custom(pbuf_layer l, uint16_t length, pbuf_type type, struct pbuf_custom *p, - void *payload_mem, uint16_t payload_mem_len) -{ - uint16_t offset; - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloced_custom(length=%"U16_F")\n", length)); - - /* determine header offset */ - switch (l) { - case PBUF_TRANSPORT: - /* add room for transport (often TCP) layer header */ - offset = PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN; - break; - case PBUF_IP: - /* add room for IP layer header */ - offset = PBUF_LINK_HLEN + PBUF_IP_HLEN; - break; - case PBUF_LINK: - /* add room for link layer header */ - offset = PBUF_LINK_HLEN; - break; - case PBUF_RAW: - offset = 0; - break; - default: - LWIP_ASSERT("pbuf_alloced_custom: bad pbuf layer", 0); - return NULL; - } - - if (LWIP_MEM_ALIGN_SIZE(offset) + length > payload_mem_len) { - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_WARNING, ("pbuf_alloced_custom(length=%"U16_F") buffer too short\n", length)); - return NULL; - } - - p->pbuf.next = NULL; - if (payload_mem != NULL) { - p->pbuf.payload = (uint8_t *)payload_mem + LWIP_MEM_ALIGN_SIZE(offset); - } else { - p->pbuf.payload = NULL; - } - p->pbuf.flags = PBUF_FLAG_IS_CUSTOM; - p->pbuf.len = p->pbuf.tot_len = length; - p->pbuf.type = type; - p->pbuf.ref = 1; - return &p->pbuf; -} -#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ - -/** - * Shrink a pbuf chain to a desired length. - * - * @param p pbuf to shrink. - * @param new_len desired new length of pbuf chain - * - * Depending on the desired length, the first few pbufs in a chain might - * be skipped and left unchanged. The new last pbuf in the chain will be - * resized, and any remaining pbufs will be freed. - * - * @note If the pbuf is ROM/REF, only the ->tot_len and ->len fields are adjusted. - * @note May not be called on a packet queue. - * - * @note Despite its name, pbuf_realloc cannot grow the size of a pbuf (chain). - */ -void -pbuf_realloc(struct pbuf *p, uint16_t new_len) -{ - struct pbuf *q; - uint16_t rem_len; /* remaining length */ - int32_t grow; - - LWIP_ASSERT("pbuf_realloc: p != NULL", p != NULL); - LWIP_ASSERT("pbuf_realloc: sane p->type", p->type == PBUF_POOL || - p->type == PBUF_ROM || - p->type == PBUF_RAM || - p->type == PBUF_REF); - - /* desired length larger than current length? */ - if (new_len >= p->tot_len) { - /* enlarging not yet supported */ - return; - } - - /* the pbuf chain grows by (new_len - p->tot_len) bytes - * (which may be negative in case of shrinking) */ - grow = new_len - p->tot_len; - - /* first, step over any pbufs that should remain in the chain */ - rem_len = new_len; - q = p; - /* should this pbuf be kept? */ - while (rem_len > q->len) { - /* decrease remaining length by pbuf length */ - rem_len -= q->len; - /* decrease total length indicator */ - LWIP_ASSERT("grow < max_u16_t", grow < 0xffff); - q->tot_len += (uint16_t)grow; - /* proceed to next pbuf in chain */ - q = q->next; - LWIP_ASSERT("pbuf_realloc: q != NULL", q != NULL); - } - /* we have now reached the new last pbuf (in q) */ - /* rem_len == desired length for pbuf q */ - - /* shrink allocated memory for PBUF_RAM */ - /* (other types merely adjust their length fields */ - if ((q->type == PBUF_RAM) && (rem_len != q->len)) { - /* reallocate and adjust the length of the pbuf that will be split */ - q = (struct pbuf *)mem_trim(q, (uint16_t)((uint8_t *)q->payload - (uint8_t *)q) + rem_len); - LWIP_ASSERT("mem_trim returned q == NULL", q != NULL); - } - /* adjust length fields for new last pbuf */ - q->len = rem_len; - q->tot_len = q->len; - - /* any remaining pbufs in chain? */ - if (q->next != NULL) { - /* free remaining pbufs in chain */ - pbuf_free(q->next); - } - /* q is last packet in chain */ - q->next = NULL; - -} - -/** - * Adjusts the payload pointer to hide or reveal headers in the payload. - * - * Adjusts the ->payload pointer so that space for a header - * (dis)appears in the pbuf payload. - * - * The ->payload, ->tot_len and ->len fields are adjusted. - * - * @param p pbuf to change the header size. - * @param header_size_increment Number of bytes to increment header size which - * increases the size of the pbuf. New space is on the front. - * (Using a negative value decreases the header size.) - * If hdr_size_inc is 0, this function does nothing and returns succesful. - * - * PBUF_ROM and PBUF_REF type buffers cannot have their sizes increased, so - * the call will fail. A check is made that the increase in header size does - * not move the payload pointer in front of the start of the buffer. - * @return non-zero on failure, zero on success. - * - */ -uint8_t -pbuf_header(struct pbuf *p, int16_t header_size_increment) -{ - uint16_t type; - void *payload; - uint16_t increment_magnitude; - - LWIP_ASSERT("p != NULL", p != NULL); - if ((header_size_increment == 0) || (p == NULL)) { - return 0; - } - - if (header_size_increment < 0){ - increment_magnitude = -header_size_increment; - /* Check that we aren't going to move off the end of the pbuf */ - LWIP_ERROR("increment_magnitude <= p->len", (increment_magnitude <= p->len), return 1;); - } else { - increment_magnitude = header_size_increment; -#if 0 - /* Can't assert these as some callers speculatively call - pbuf_header() to see if it's OK. Will return 1 below instead. */ - /* Check that we've got the correct type of pbuf to work with */ - LWIP_ASSERT("p->type == PBUF_RAM || p->type == PBUF_POOL", - p->type == PBUF_RAM || p->type == PBUF_POOL); - /* Check that we aren't going to move off the beginning of the pbuf */ - LWIP_ASSERT("p->payload - increment_magnitude >= p + SIZEOF_STRUCT_PBUF", - (uint8_t *)p->payload - increment_magnitude >= (uint8_t *)p + SIZEOF_STRUCT_PBUF); -#endif - } - - type = p->type; - /* remember current payload pointer */ - payload = p->payload; - - /* pbuf types containing payloads? */ - if (type == PBUF_RAM || type == PBUF_POOL) { - /* set new payload pointer */ - p->payload = (uint8_t *)p->payload - header_size_increment; - /* boundary check fails? */ - if ((uint8_t *)p->payload < (uint8_t *)p + SIZEOF_STRUCT_PBUF) { - LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, - ("pbuf_header: failed as %p < %p (not enough space for new header size)\n", - (void *)p->payload, (void *)(p + 1))); - /* restore old payload pointer */ - p->payload = payload; - /* bail out unsuccesfully */ - return 1; - } - /* pbuf types refering to external payloads? */ - } else if (type == PBUF_REF || type == PBUF_ROM) { - /* hide a header in the payload? */ - if ((header_size_increment < 0) && (increment_magnitude <= p->len)) { - /* increase payload pointer */ - p->payload = (uint8_t *)p->payload - header_size_increment; - } else { - /* cannot expand payload to front (yet!) - * bail out unsuccesfully */ - return 1; - } - } else { - /* Unknown type */ - LWIP_ASSERT("bad pbuf type", 0); - return 1; - } - /* modify pbuf length fields */ - p->len += header_size_increment; - p->tot_len += header_size_increment; - - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_header: old %p new %p (%"S16_F")\n", - (void *)payload, (void *)p->payload, header_size_increment)); - - return 0; -} - -/** - * Dereference a pbuf chain or queue and deallocate any no-longer-used - * pbufs at the head of this chain or queue. - * - * Decrements the pbuf reference count. If it reaches zero, the pbuf is - * deallocated. - * - * For a pbuf chain, this is repeated for each pbuf in the chain, - * up to the first pbuf which has a non-zero reference count after - * decrementing. So, when all reference counts are one, the whole - * chain is free'd. - * - * @param p The pbuf (chain) to be dereferenced. - * - * @return the number of pbufs that were de-allocated - * from the head of the chain. - * - * @note MUST NOT be called on a packet queue (Not verified to work yet). - * @note the reference counter of a pbuf equals the number of pointers - * that refer to the pbuf (or into the pbuf). - * - * @internal examples: - * - * Assuming existing chains a->b->c with the following reference - * counts, calling pbuf_free(a) results in: - * - * 1->2->3 becomes ...1->3 - * 3->3->3 becomes 2->3->3 - * 1->1->2 becomes ......1 - * 2->1->1 becomes 1->1->1 - * 1->1->1 becomes ....... - * - */ -uint8_t -pbuf_free(struct pbuf *p) -{ - uint16_t type; - struct pbuf *q; - uint8_t count; - - if (p == NULL) { - LWIP_ASSERT("p != NULL", p != NULL); - /* if assertions are disabled, proceed with debug output */ - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, - ("pbuf_free(p == NULL) was called.\n")); - return 0; - } - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free(%p)\n", (void *)p)); - - PERF_START; - - LWIP_ASSERT("pbuf_free: sane type", - p->type == PBUF_RAM || p->type == PBUF_ROM || - p->type == PBUF_REF || p->type == PBUF_POOL); - - count = 0; - /* de-allocate all consecutive pbufs from the head of the chain that - * obtain a zero reference count after decrementing*/ - while (p != NULL) { - uint16_t ref; - SYS_ARCH_DECL_PROTECT(old_level); - /* Since decrementing ref cannot be guaranteed to be a single machine operation - * we must protect it. We put the new ref into a local variable to prevent - * further protection. */ - SYS_ARCH_PROTECT(old_level); - /* all pbufs in a chain are referenced at least once */ - LWIP_ASSERT("pbuf_free: p->ref > 0", p->ref > 0); - /* decrease reference count (number of pointers to pbuf) */ - ref = --(p->ref); - SYS_ARCH_UNPROTECT(old_level); - /* this pbuf is no longer referenced to? */ - if (ref == 0) { - /* remember next pbuf in chain for next iteration */ - q = p->next; - LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free: deallocating %p\n", (void *)p)); - type = p->type; -#if LWIP_SUPPORT_CUSTOM_PBUF - /* is this a custom pbuf? */ - if ((p->flags & PBUF_FLAG_IS_CUSTOM) != 0) { - struct pbuf_custom *pc = (struct pbuf_custom*)p; - LWIP_ASSERT("pc->custom_free_function != NULL", pc->custom_free_function != NULL); - pc->custom_free_function(p); - } else -#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ - { - /* is this a pbuf from the pool? */ - if (type == PBUF_POOL) { - memp_free(MEMP_PBUF_POOL, p); - /* is this a ROM or RAM referencing pbuf? */ - } else if (type == PBUF_ROM || type == PBUF_REF) { - memp_free(MEMP_PBUF, p); - /* type == PBUF_RAM */ - } else { - mem_free(p); - } - } - count++; - /* proceed to next pbuf */ - p = q; - /* p->ref > 0, this pbuf is still referenced to */ - /* (and so the remaining pbufs in chain as well) */ - } else { - LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free: %p has ref %"U16_F", ending here.\n", (void *)p, ref)); - /* stop walking through the chain */ - p = NULL; - } - } - PERF_STOP("pbuf_free"); - /* return number of de-allocated pbufs */ - return count; -} - -/** - * Count number of pbufs in a chain - * - * @param p first pbuf of chain - * @return the number of pbufs in a chain - */ - -uint8_t -pbuf_clen(struct pbuf *p) -{ - uint8_t len; - - len = 0; - while (p != NULL) { - ++len; - p = p->next; - } - return len; -} - -/** - * Increment the reference count of the pbuf. - * - * @param p pbuf to increase reference counter of - * - */ -void -pbuf_ref(struct pbuf *p) -{ - SYS_ARCH_DECL_PROTECT(old_level); - /* pbuf given? */ - if (p != NULL) { - SYS_ARCH_PROTECT(old_level); - ++(p->ref); - SYS_ARCH_UNPROTECT(old_level); - } -} - -/** - * Concatenate two pbufs (each may be a pbuf chain) and take over - * the caller's reference of the tail pbuf. - * - * @note The caller MAY NOT reference the tail pbuf afterwards. - * Use pbuf_chain() for that purpose. - * - * @see pbuf_chain() - */ - -void -pbuf_cat(struct pbuf *h, struct pbuf *t) -{ - struct pbuf *p; - - LWIP_ERROR("(h != NULL) && (t != NULL) (programmer violates API)", - ((h != NULL) && (t != NULL)), return;); - - /* proceed to last pbuf of chain */ - for (p = h; p->next != NULL; p = p->next) { - /* add total length of second chain to all totals of first chain */ - p->tot_len += t->tot_len; - } - /* { p is last pbuf of first h chain, p->next == NULL } */ - LWIP_ASSERT("p->tot_len == p->len (of last pbuf in chain)", p->tot_len == p->len); - LWIP_ASSERT("p->next == NULL", p->next == NULL); - /* add total length of second chain to last pbuf total of first chain */ - p->tot_len += t->tot_len; - /* chain last pbuf of head (p) with first of tail (t) */ - p->next = t; - /* p->next now references t, but the caller will drop its reference to t, - * so netto there is no change to the reference count of t. - */ -} - -/** - * Chain two pbufs (or pbuf chains) together. - * - * The caller MUST call pbuf_free(t) once it has stopped - * using it. Use pbuf_cat() instead if you no longer use t. - * - * @param h head pbuf (chain) - * @param t tail pbuf (chain) - * @note The pbufs MUST belong to the same packet. - * @note MAY NOT be called on a packet queue. - * - * The ->tot_len fields of all pbufs of the head chain are adjusted. - * The ->next field of the last pbuf of the head chain is adjusted. - * The ->ref field of the first pbuf of the tail chain is adjusted. - * - */ -void -pbuf_chain(struct pbuf *h, struct pbuf *t) -{ - pbuf_cat(h, t); - /* t is now referenced by h */ - pbuf_ref(t); - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_chain: %p references %p\n", (void *)h, (void *)t)); -} - -/** - * Dechains the first pbuf from its succeeding pbufs in the chain. - * - * Makes p->tot_len field equal to p->len. - * @param p pbuf to dechain - * @return remainder of the pbuf chain, or NULL if it was de-allocated. - * @note May not be called on a packet queue. - */ -struct pbuf * -pbuf_dechain(struct pbuf *p) -{ - struct pbuf *q; - uint8_t tail_gone = 1; - /* tail */ - q = p->next; - /* pbuf has successor in chain? */ - if (q != NULL) { - /* assert tot_len invariant: (p->tot_len == p->len + (p->next? p->next->tot_len: 0) */ - LWIP_ASSERT("p->tot_len == p->len + q->tot_len", q->tot_len == p->tot_len - p->len); - /* enforce invariant if assertion is disabled */ - q->tot_len = p->tot_len - p->len; - /* decouple pbuf from remainder */ - p->next = NULL; - /* total length of pbuf p is its own length only */ - p->tot_len = p->len; - /* q is no longer referenced by p, free it */ - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_dechain: unreferencing %p\n", (void *)q)); - tail_gone = pbuf_free(q); - if (tail_gone > 0) { - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, - ("pbuf_dechain: deallocated %p (as it is no longer referenced)\n", (void *)q)); - } - /* return remaining tail or NULL if deallocated */ - } - /* assert tot_len invariant: (p->tot_len == p->len + (p->next? p->next->tot_len: 0) */ - LWIP_ASSERT("p->tot_len == p->len", p->tot_len == p->len); - return ((tail_gone > 0) ? NULL : q); -} - -/** - * - * Create PBUF_RAM copies of pbufs. - * - * Used to queue packets on behalf of the lwIP stack, such as - * ARP based queueing. - * - * @note You MUST explicitly use p = pbuf_take(p); - * - * @note Only one packet is copied, no packet queue! - * - * @param p_to pbuf destination of the copy - * @param p_from pbuf source of the copy - * - * @return ERR_OK if pbuf was copied - * ERR_ARG if one of the pbufs is NULL or p_to is not big - * enough to hold p_from - */ -err_t -pbuf_copy(struct pbuf *p_to, struct pbuf *p_from) -{ - uint16_t offset_to=0, offset_from=0, len; - - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy(%p, %p)\n", - (void*)p_to, (void*)p_from)); - - /* is the target big enough to hold the source? */ - LWIP_ERROR("pbuf_copy: target not big enough to hold source", ((p_to != NULL) && - (p_from != NULL) && (p_to->tot_len >= p_from->tot_len)), return ERR_ARG;); - - /* iterate through pbuf chain */ - do - { - /* copy one part of the original chain */ - if ((p_to->len - offset_to) >= (p_from->len - offset_from)) { - /* complete current p_from fits into current p_to */ - len = p_from->len - offset_from; - } else { - /* current p_from does not fit into current p_to */ - len = p_to->len - offset_to; - } - MEMCPY((uint8_t*)p_to->payload + offset_to, (uint8_t*)p_from->payload + offset_from, len); - offset_to += len; - offset_from += len; - LWIP_ASSERT("offset_to <= p_to->len", offset_to <= p_to->len); - LWIP_ASSERT("offset_from <= p_from->len", offset_from <= p_from->len); - if (offset_from >= p_from->len) { - /* on to next p_from (if any) */ - offset_from = 0; - p_from = p_from->next; - } - if (offset_to == p_to->len) { - /* on to next p_to (if any) */ - offset_to = 0; - p_to = p_to->next; - LWIP_ERROR("p_to != NULL", (p_to != NULL) || (p_from == NULL) , return ERR_ARG;); - } - - if((p_from != NULL) && (p_from->len == p_from->tot_len)) { - /* don't copy more than one packet! */ - LWIP_ERROR("pbuf_copy() does not allow packet queues!\n", - (p_from->next == NULL), return ERR_VAL;); - } - if((p_to != NULL) && (p_to->len == p_to->tot_len)) { - /* don't copy more than one packet! */ - LWIP_ERROR("pbuf_copy() does not allow packet queues!\n", - (p_to->next == NULL), return ERR_VAL;); - } - } while (p_from); - LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy: end of chain reached.\n")); - return ERR_OK; -} - -/** - * Copy (part of) the contents of a packet buffer - * to an application supplied buffer. - * - * @param buf the pbuf from which to copy data - * @param dataptr the application supplied buffer - * @param len length of data to copy (dataptr must be big enough). No more - * than buf->tot_len will be copied, irrespective of len - * @param offset offset into the packet buffer from where to begin copying len bytes - * @return the number of bytes copied, or 0 on failure - */ -uint16_t -pbuf_copy_partial(struct pbuf *buf, void *dataptr, uint16_t len, uint16_t offset) -{ - struct pbuf *p; - uint16_t left; - uint16_t buf_copy_len; - uint16_t copied_total = 0; - - LWIP_ERROR("pbuf_copy_partial: invalid buf", (buf != NULL), return 0;); - LWIP_ERROR("pbuf_copy_partial: invalid dataptr", (dataptr != NULL), return 0;); - - left = 0; - - if((buf == NULL) || (dataptr == NULL)) { - return 0; - } - - /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */ - for(p = buf; len != 0 && p != NULL; p = p->next) { - if ((offset != 0) && (offset >= p->len)) { - /* don't copy from this buffer -> on to the next */ - offset -= p->len; - } else { - /* copy from this buffer. maybe only partially. */ - buf_copy_len = p->len - offset; - if (buf_copy_len > len) - buf_copy_len = len; - /* copy the necessary parts of the buffer */ - MEMCPY(&((char*)dataptr)[left], &((char*)p->payload)[offset], buf_copy_len); - copied_total += buf_copy_len; - left += buf_copy_len; - len -= buf_copy_len; - offset = 0; - } - } - return copied_total; -} - -/** - * Copy application supplied data into a pbuf. - * This function can only be used to copy the equivalent of buf->tot_len data. - * - * @param buf pbuf to fill with data - * @param dataptr application supplied data buffer - * @param len length of the application supplied data buffer - * - * @return ERR_OK if successful, ERR_MEM if the pbuf is not big enough - */ -err_t -pbuf_take(struct pbuf *buf, const void *dataptr, uint16_t len) -{ - struct pbuf *p; - uint16_t buf_copy_len; - uint16_t total_copy_len = len; - uint16_t copied_total = 0; - - LWIP_ERROR("pbuf_take: invalid buf", (buf != NULL), return 0;); - LWIP_ERROR("pbuf_take: invalid dataptr", (dataptr != NULL), return 0;); - - if ((buf == NULL) || (dataptr == NULL) || (buf->tot_len < len)) { - return ERR_ARG; - } - - /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */ - for(p = buf; total_copy_len != 0; p = p->next) { - LWIP_ASSERT("pbuf_take: invalid pbuf", p != NULL); - buf_copy_len = total_copy_len; - if (buf_copy_len > p->len) { - /* this pbuf cannot hold all remaining data */ - buf_copy_len = p->len; - } - /* copy the necessary parts of the buffer */ - MEMCPY(p->payload, &((char*)dataptr)[copied_total], buf_copy_len); - total_copy_len -= buf_copy_len; - copied_total += buf_copy_len; - } - LWIP_ASSERT("did not copy all data", total_copy_len == 0 && copied_total == len); - return ERR_OK; -} - -/** - * Creates a single pbuf out of a queue of pbufs. - * - * @remark: Either the source pbuf 'p' is freed by this function or the original - * pbuf 'p' is returned, therefore the caller has to check the result! - * - * @param p the source pbuf - * @param layer pbuf_layer of the new pbuf - * - * @return a new, single pbuf (p->next is NULL) - * or the old pbuf if allocation fails - */ -struct pbuf* -pbuf_coalesce(struct pbuf *p, pbuf_layer layer) -{ - struct pbuf *q; - err_t err; - if (p->next == NULL) { - return p; - } - q = pbuf_alloc(layer, p->tot_len, PBUF_RAM); - if (q == NULL) { - /* @todo: what do we do now? */ - return p; - } - err = pbuf_copy(q, p); - LWIP_ASSERT("pbuf_copy failed", err == ERR_OK); - pbuf_free(p); - return q; -} - -#if LWIP_CHECKSUM_ON_COPY -/** - * Copies data into a single pbuf (*not* into a pbuf queue!) and updates - * the checksum while copying - * - * @param p the pbuf to copy data into - * @param start_offset offset of p->payload where to copy the data to - * @param dataptr data to copy into the pbuf - * @param len length of data to copy into the pbuf - * @param chksum pointer to the checksum which is updated - * @return ERR_OK if successful, another error if the data does not fit - * within the (first) pbuf (no pbuf queues!) - */ -err_t -pbuf_fill_chksum(struct pbuf *p, uint16_t start_offset, const void *dataptr, - uint16_t len, uint16_t *chksum) -{ - uint32_t acc; - uint16_t copy_chksum; - char *dst_ptr; - LWIP_ASSERT("p != NULL", p != NULL); - LWIP_ASSERT("dataptr != NULL", dataptr != NULL); - LWIP_ASSERT("chksum != NULL", chksum != NULL); - LWIP_ASSERT("len != 0", len != 0); - - if ((start_offset >= p->len) || (start_offset + len > p->len)) { - return ERR_ARG; - } - - dst_ptr = ((char*)p->payload) + start_offset; - copy_chksum = LWIP_CHKSUM_COPY(dst_ptr, dataptr, len); - if ((start_offset & 1) != 0) { - copy_chksum = SWAP_BYTES_IN_WORD(copy_chksum); - } - acc = *chksum; - acc += copy_chksum; - *chksum = FOLD_U32T(acc); - return ERR_OK; -} -#endif /* LWIP_CHECKSUM_ON_COPY */ - - /** Get one byte from the specified position in a pbuf - * WARNING: returns zero for offset >= p->tot_len - * - * @param p pbuf to parse - * @param offset offset into p of the byte to return - * @return byte at an offset into p OR ZERO IF 'offset' >= p->tot_len - */ -uint8_t -pbuf_get_at(struct pbuf* p, uint16_t offset) -{ - uint16_t copy_from = offset; - struct pbuf* q = p; - - /* get the correct pbuf */ - while ((q != NULL) && (q->len <= copy_from)) { - copy_from -= q->len; - q = q->next; - } - /* return requested data if pbuf is OK */ - if ((q != NULL) && (q->len > copy_from)) { - return ((uint8_t*)q->payload)[copy_from]; - } - return 0; -} - -/** Compare pbuf contents at specified offset with memory s2, both of length n - * - * @param p pbuf to compare - * @param offset offset into p at wich to start comparing - * @param s2 buffer to compare - * @param n length of buffer to compare - * @return zero if equal, nonzero otherwise - * (0xffff if p is too short, diffoffset+1 otherwise) - */ -uint16_t -pbuf_memcmp(struct pbuf* p, uint16_t offset, const void* s2, uint16_t n) -{ - uint16_t start = offset; - struct pbuf* q = p; - - /* get the correct pbuf */ - while ((q != NULL) && (q->len <= start)) { - start -= q->len; - q = q->next; - } - /* return requested data if pbuf is OK */ - if ((q != NULL) && (q->len > start)) { - uint16_t i; - for(i = 0; i < n; i++) { - uint8_t a = pbuf_get_at(q, start + i); - uint8_t b = ((uint8_t*)s2)[i]; - if (a != b) { - return i+1; - } - } - return 0; - } - return 0xffff; -} - -/** Find occurrence of mem (with length mem_len) in pbuf p, starting at offset - * start_offset. - * - * @param p pbuf to search, maximum length is 0xFFFE since 0xFFFF is used as - * return value 'not found' - * @param mem search for the contents of this buffer - * @param mem_len length of 'mem' - * @param start_offset offset into p at which to start searching - * @return 0xFFFF if substr was not found in p or the index where it was found - */ -uint16_t -pbuf_memfind(struct pbuf* p, const void* mem, uint16_t mem_len, uint16_t start_offset) -{ - uint16_t i; - uint16_t max = p->tot_len - mem_len; - if (p->tot_len >= mem_len + start_offset) { - for(i = start_offset; i <= max; ) { - uint16_t plus = pbuf_memcmp(p, i, mem, mem_len); - if (plus == 0) { - return i; - } else { - i += plus; - } - } - } - return 0xFFFF; -} - -/** Find occurrence of substr with length substr_len in pbuf p, start at offset - * start_offset - * WARNING: in contrast to strstr(), this one does not stop at the first \0 in - * the pbuf/source string! - * - * @param p pbuf to search, maximum length is 0xFFFE since 0xFFFF is used as - * return value 'not found' - * @param substr string to search for in p, maximum length is 0xFFFE - * @return 0xFFFF if substr was not found in p or the index where it was found - */ -uint16_t -pbuf_strstr(struct pbuf* p, const char* substr) -{ - size_t substr_len; - if ((substr == NULL) || (substr[0] == 0) || (p->tot_len == 0xFFFF)) { - return 0xFFFF; - } - substr_len = strlen(substr); - if (substr_len >= 0xFFFF) { - return 0xFFFF; - } - return pbuf_memfind(p, substr, (uint16_t)substr_len, 0); -} diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/raw.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/raw.c deleted file mode 100644 index c90cf88..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/raw.c +++ /dev/null @@ -1,350 +0,0 @@ -/** - * @file - * Implementation of raw protocol PCBs for low-level handling of - * different types of protocols besides (or overriding) those - * already available in lwIP. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/def.h" -#include "lwip/memp.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/raw.h" -#include "lwip/stats.h" -#include "arch/perf.h" - -#include - -/** The list of RAW PCBs */ -static struct raw_pcb *raw_pcbs; - -/** - * Determine if in incoming IP packet is covered by a RAW PCB - * and if so, pass it to a user-provided receive callback function. - * - * Given an incoming IP datagram (as a chain of pbufs) this function - * finds a corresponding RAW PCB and calls the corresponding receive - * callback function. - * - * @param p pbuf to be demultiplexed to a RAW PCB. - * @param inp network interface on which the datagram was received. - * @return - 1 if the packet has been eaten by a RAW PCB receive - * callback function. The caller MAY NOT not reference the - * packet any longer, and MAY NOT call pbuf_free(). - * @return - 0 if packet is not eaten (pbuf is still referenced by the - * caller). - * - */ -uint8_t -raw_input(struct pbuf *p, struct netif *inp) -{ - struct raw_pcb *pcb, *prev; - struct ip_hdr *iphdr; - int16_t proto; - uint8_t eaten = 0; - - LWIP_UNUSED_ARG(inp); - - iphdr = (struct ip_hdr *)p->payload; - proto = IPH_PROTO(iphdr); - - prev = NULL; - pcb = raw_pcbs; - /* loop through all raw pcbs until the packet is eaten by one */ - /* this allows multiple pcbs to match against the packet by design */ - while ((eaten == 0) && (pcb != NULL)) { - if ((pcb->protocol == proto) && - (ip_addr_isany(&pcb->local_ip) || - ip_addr_cmp(&(pcb->local_ip), ¤t_iphdr_dest))) { -#if IP_SOF_BROADCAST_RECV - /* broadcast filter? */ - if (ip_get_option(pcb, SOF_BROADCAST) || !ip_addr_isbroadcast(¤t_iphdr_dest, inp)) -#endif /* IP_SOF_BROADCAST_RECV */ - { - /* receive callback function available? */ - if (pcb->recv != NULL) { - /* the receive callback function did not eat the packet? */ - if (pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr()) != 0) { - /* receive function ate the packet */ - p = NULL; - eaten = 1; - if (prev != NULL) { - /* move the pcb to the front of raw_pcbs so that is - found faster next time */ - prev->next = pcb->next; - pcb->next = raw_pcbs; - raw_pcbs = pcb; - } - } - } - /* no receive callback function was set for this raw PCB */ - } - /* drop the packet */ - } - prev = pcb; - pcb = pcb->next; - } - return eaten; -} - -/** - * Bind a RAW PCB. - * - * @param pcb RAW PCB to be bound with a local address ipaddr. - * @param ipaddr local IP address to bind with. Use IP_ADDR_ANY to - * bind to all local interfaces. - * - * @return lwIP error code. - * - ERR_OK. Successful. No error occured. - * - ERR_USE. The specified IP address is already bound to by - * another RAW PCB. - * - * @see raw_disconnect() - */ -err_t -raw_bind(struct raw_pcb *pcb, ip_addr_t *ipaddr) -{ - ip_addr_set(&pcb->local_ip, ipaddr); - return ERR_OK; -} - -/** - * Connect an RAW PCB. This function is required by upper layers - * of lwip. Using the raw api you could use raw_sendto() instead - * - * This will associate the RAW PCB with the remote address. - * - * @param pcb RAW PCB to be connected with remote address ipaddr and port. - * @param ipaddr remote IP address to connect with. - * - * @return lwIP error code - * - * @see raw_disconnect() and raw_sendto() - */ -err_t -raw_connect(struct raw_pcb *pcb, ip_addr_t *ipaddr) -{ - ip_addr_set(&pcb->remote_ip, ipaddr); - return ERR_OK; -} - - -/** - * Set the callback function for received packets that match the - * raw PCB's protocol and binding. - * - * The callback function MUST either - * - eat the packet by calling pbuf_free() and returning non-zero. The - * packet will not be passed to other raw PCBs or other protocol layers. - * - not free the packet, and return zero. The packet will be matched - * against further PCBs and/or forwarded to another protocol layers. - * - * @return non-zero if the packet was free()d, zero if the packet remains - * available for others. - */ -void -raw_recv(struct raw_pcb *pcb, raw_recv_fn recv, void *recv_arg) -{ - /* remember recv() callback and user data */ - pcb->recv = recv; - pcb->recv_arg = recv_arg; -} - -/** - * Send the raw IP packet to the given address. Note that actually you cannot - * modify the IP headers (this is inconsistent with the receive callback where - * you actually get the IP headers), you can only specify the IP payload here. - * It requires some more changes in lwIP. (there will be a raw_send() function - * then.) - * - * @param pcb the raw pcb which to send - * @param p the IP payload to send - * @param ipaddr the destination address of the IP packet - * - */ -err_t -raw_sendto(struct raw_pcb *pcb, struct pbuf *p, ip_addr_t *ipaddr) -{ - err_t err; - struct netif *netif; - ip_addr_t *src_ip; - struct pbuf *q; /* q will be sent down the stack */ - - LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE, ("raw_sendto\n")); - - /* not enough space to add an IP header to first pbuf in given p chain? */ - if (pbuf_header(p, IP_HLEN)) { - /* allocate header in new pbuf */ - q = pbuf_alloc(PBUF_IP, 0, PBUF_RAM); - /* new header pbuf could not be allocated? */ - if (q == NULL) { - LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("raw_sendto: could not allocate header\n")); - return ERR_MEM; - } - if (p->tot_len != 0) { - /* chain header q in front of given pbuf p */ - pbuf_chain(q, p); - } - /* { first pbuf q points to header pbuf } */ - LWIP_DEBUGF(RAW_DEBUG, ("raw_sendto: added header pbuf %p before given pbuf %p\n", (void *)q, (void *)p)); - } else { - /* first pbuf q equals given pbuf */ - q = p; - if(pbuf_header(q, -IP_HLEN)) { - LWIP_ASSERT("Can't restore header we just removed!", 0); - return ERR_MEM; - } - } - - if ((netif = ip_route(ipaddr)) == NULL) { - LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_LEVEL_WARNING, ("raw_sendto: No route to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr))); - /* free any temporary header pbuf allocated by pbuf_header() */ - if (q != p) { - pbuf_free(q); - } - return ERR_RTE; - } - -#if IP_SOF_BROADCAST - /* broadcast filter? */ - if (!ip_get_option(pcb, SOF_BROADCAST) && ip_addr_isbroadcast(ipaddr, netif)) { - LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_LEVEL_WARNING, ("raw_sendto: SOF_BROADCAST not enabled on pcb %p\n", (void *)pcb)); - /* free any temporary header pbuf allocated by pbuf_header() */ - if (q != p) { - pbuf_free(q); - } - return ERR_VAL; - } -#endif /* IP_SOF_BROADCAST */ - - if (ip_addr_isany(&pcb->local_ip)) { - /* use outgoing network interface IP address as source address */ - src_ip = &(netif->ip_addr); - } else { - /* use RAW PCB local IP address as source address */ - src_ip = &(pcb->local_ip); - } - - NETIF_SET_HWADDRHINT(netif, &pcb->addr_hint); - err = ip_output_if (q, src_ip, ipaddr, pcb->ttl, pcb->tos, pcb->protocol, netif); - NETIF_SET_HWADDRHINT(netif, NULL); - - /* did we chain a header earlier? */ - if (q != p) { - /* free the header */ - pbuf_free(q); - } - return err; -} - -/** - * Send the raw IP packet to the address given by raw_connect() - * - * @param pcb the raw pcb which to send - * @param p the IP payload to send - * - */ -err_t -raw_send(struct raw_pcb *pcb, struct pbuf *p) -{ - return raw_sendto(pcb, p, &pcb->remote_ip); -} - -/** - * Remove an RAW PCB. - * - * @param pcb RAW PCB to be removed. The PCB is removed from the list of - * RAW PCB's and the data structure is freed from memory. - * - * @see raw_new() - */ -void -raw_remove(struct raw_pcb *pcb) -{ - struct raw_pcb *pcb2; - /* pcb to be removed is first in list? */ - if (raw_pcbs == pcb) { - /* make list start at 2nd pcb */ - raw_pcbs = raw_pcbs->next; - /* pcb not 1st in list */ - } else { - for(pcb2 = raw_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { - /* find pcb in raw_pcbs list */ - if (pcb2->next != NULL && pcb2->next == pcb) { - /* remove pcb from list */ - pcb2->next = pcb->next; - } - } - } - memp_free(MEMP_RAW_PCB, pcb); -} - -/** - * Create a RAW PCB. - * - * @return The RAW PCB which was created. NULL if the PCB data structure - * could not be allocated. - * - * @param proto the protocol number of the IPs payload (e.g. IP_PROTO_ICMP) - * - * @see raw_remove() - */ -struct raw_pcb * -raw_new(uint8_t proto) -{ - struct raw_pcb *pcb; - - LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE, ("raw_new\n")); - - pcb = (struct raw_pcb *)memp_malloc(MEMP_RAW_PCB); - /* could allocate RAW PCB? */ - if (pcb != NULL) { - /* initialize PCB to all zeroes */ - memset(pcb, 0, sizeof(struct raw_pcb)); - pcb->protocol = proto; - pcb->ttl = RAW_TTL; - pcb->next = raw_pcbs; - raw_pcbs = pcb; - } - return pcb; -} - -#endif /* LWIP_RAW */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/asn1_dec.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/asn1_dec.c deleted file mode 100644 index 1c1e69f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/asn1_dec.c +++ /dev/null @@ -1,657 +0,0 @@ -/** - * @file - * Abstract Syntax Notation One (ISO 8824, 8825) decoding - * - * @todo not optimised (yet), favor correctness over speed, favor speed over size - */ - -/* - * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Christiaan Simons - */ - -#include "lwip/opt.h" - -#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/snmp_asn1.h" - -/** - * Retrieves type field from incoming pbuf chain. - * - * @param p points to a pbuf holding an ASN1 coded type field - * @param ofs points to the offset within the pbuf chain of the ASN1 coded type field - * @param type return ASN1 type - * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) decode - */ -err_t -snmp_asn1_dec_type(struct pbuf *p, uint16_t ofs, uint8_t *type) -{ - uint16_t plen, base; - uint8_t *msg_ptr; - - plen = 0; - while (p != NULL) - { - base = plen; - plen += p->len; - if (ofs < plen) - { - msg_ptr = (uint8_t*)p->payload; - msg_ptr += ofs - base; - *type = *msg_ptr; - return ERR_OK; - } - p = p->next; - } - /* p == NULL, ofs >= plen */ - return ERR_ARG; -} - -/** - * Decodes length field from incoming pbuf chain into host length. - * - * @param p points to a pbuf holding an ASN1 coded length - * @param ofs points to the offset within the pbuf chain of the ASN1 coded length - * @param octets_used returns number of octets used by the length code - * @param length return host order length, upto 64k - * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) decode - */ -err_t -snmp_asn1_dec_length(struct pbuf *p, uint16_t ofs, uint8_t *octets_used, uint16_t *length) -{ - uint16_t plen, base; - uint8_t *msg_ptr; - - plen = 0; - while (p != NULL) - { - base = plen; - plen += p->len; - if (ofs < plen) - { - msg_ptr = (uint8_t*)p->payload; - msg_ptr += ofs - base; - - if (*msg_ptr < 0x80) - { - /* primitive definite length format */ - *octets_used = 1; - *length = *msg_ptr; - return ERR_OK; - } - else if (*msg_ptr == 0x80) - { - /* constructed indefinite length format, termination with two zero octets */ - uint8_t zeros; - uint8_t i; - - *length = 0; - zeros = 0; - while (zeros != 2) - { - i = 2; - while (i > 0) - { - i--; - (*length) += 1; - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - if (*msg_ptr == 0) - { - zeros++; - if (zeros == 2) - { - /* stop while (i > 0) */ - i = 0; - } - } - else - { - zeros = 0; - } - } - } - *octets_used = 1; - return ERR_OK; - } - else if (*msg_ptr == 0x81) - { - /* constructed definite length format, one octet */ - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - *length = *msg_ptr; - *octets_used = 2; - return ERR_OK; - } - else if (*msg_ptr == 0x82) - { - uint8_t i; - - /* constructed definite length format, two octets */ - i = 2; - while (i > 0) - { - i--; - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - if (i == 0) - { - /* least significant length octet */ - *length |= *msg_ptr; - } - else - { - /* most significant length octet */ - *length = (*msg_ptr) << 8; - } - } - *octets_used = 3; - return ERR_OK; - } - else - { - /* constructed definite length format 3..127 octets, this is too big (>64k) */ - /** @todo: do we need to accept inefficient codings with many leading zero's? */ - *octets_used = 1 + ((*msg_ptr) & 0x7f); - return ERR_ARG; - } - } - p = p->next; - } - - /* p == NULL, ofs >= plen */ - return ERR_ARG; -} - -/** - * Decodes positive integer (counter, gauge, timeticks) into uint32_t. - * - * @param p points to a pbuf holding an ASN1 coded integer - * @param ofs points to the offset within the pbuf chain of the ASN1 coded integer - * @param len length of the coded integer field - * @param value return host order integer - * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) decode - * - * @note ASN coded integers are _always_ signed. E.g. +0xFFFF is coded - * as 0x00,0xFF,0xFF. Note the leading sign octet. A positive value - * of 0xFFFFFFFF is preceded with 0x00 and the length is 5 octets!! - */ -err_t -snmp_asn1_dec_u32t(struct pbuf *p, uint16_t ofs, uint16_t len, uint32_t *value) -{ - uint16_t plen, base; - uint8_t *msg_ptr; - - plen = 0; - while (p != NULL) - { - base = plen; - plen += p->len; - if (ofs < plen) - { - msg_ptr = (uint8_t*)p->payload; - msg_ptr += ofs - base; - if ((len > 0) && (len < 6)) - { - /* start from zero */ - *value = 0; - if (*msg_ptr & 0x80) - { - /* negative, expecting zero sign bit! */ - return ERR_ARG; - } - else - { - /* positive */ - if ((len > 1) && (*msg_ptr == 0)) - { - /* skip leading "sign byte" octet 0x00 */ - len--; - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - } - } - /* OR octets with value */ - while (len > 1) - { - len--; - *value |= *msg_ptr; - *value <<= 8; - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - } - *value |= *msg_ptr; - return ERR_OK; - } - else - { - return ERR_ARG; - } - } - p = p->next; - } - /* p == NULL, ofs >= plen */ - return ERR_ARG; -} - -/** - * Decodes integer into int32_t. - * - * @param p points to a pbuf holding an ASN1 coded integer - * @param ofs points to the offset within the pbuf chain of the ASN1 coded integer - * @param len length of the coded integer field - * @param value return host order integer - * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) decode - * - * @note ASN coded integers are _always_ signed! - */ -err_t -snmp_asn1_dec_s32t(struct pbuf *p, uint16_t ofs, uint16_t len, int32_t *value) -{ - uint16_t plen, base; - uint8_t *msg_ptr; -#if BYTE_ORDER == LITTLE_ENDIAN - uint8_t *lsb_ptr = (uint8_t*)value; -#endif -#if BYTE_ORDER == BIG_ENDIAN - uint8_t *lsb_ptr = (uint8_t*)value + sizeof(int32_t) - 1; -#endif - uint8_t sign; - - plen = 0; - while (p != NULL) - { - base = plen; - plen += p->len; - if (ofs < plen) - { - msg_ptr = (uint8_t*)p->payload; - msg_ptr += ofs - base; - if ((len > 0) && (len < 5)) - { - if (*msg_ptr & 0x80) - { - /* negative, start from -1 */ - *value = -1; - sign = 1; - } - else - { - /* positive, start from 0 */ - *value = 0; - sign = 0; - } - /* OR/AND octets with value */ - while (len > 1) - { - len--; - if (sign) - { - *lsb_ptr &= *msg_ptr; - *value <<= 8; - *lsb_ptr |= 255; - } - else - { - *lsb_ptr |= *msg_ptr; - *value <<= 8; - } - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - } - if (sign) - { - *lsb_ptr &= *msg_ptr; - } - else - { - *lsb_ptr |= *msg_ptr; - } - return ERR_OK; - } - else - { - return ERR_ARG; - } - } - p = p->next; - } - /* p == NULL, ofs >= plen */ - return ERR_ARG; -} - -/** - * Decodes object identifier from incoming message into array of int32_t. - * - * @param p points to a pbuf holding an ASN1 coded object identifier - * @param ofs points to the offset within the pbuf chain of the ASN1 coded object identifier - * @param len length of the coded object identifier - * @param oid return object identifier struct - * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) decode - */ -err_t -snmp_asn1_dec_oid(struct pbuf *p, uint16_t ofs, uint16_t len, struct snmp_obj_id *oid) -{ - uint16_t plen, base; - uint8_t *msg_ptr; - int32_t *oid_ptr; - - plen = 0; - while (p != NULL) - { - base = plen; - plen += p->len; - if (ofs < plen) - { - msg_ptr = (uint8_t*)p->payload; - msg_ptr += ofs - base; - - oid->len = 0; - oid_ptr = &oid->id[0]; - if (len > 0) - { - /* first compressed octet */ - if (*msg_ptr == 0x2B) - { - /* (most) common case 1.3 (iso.org) */ - *oid_ptr = 1; - oid_ptr++; - *oid_ptr = 3; - oid_ptr++; - } - else if (*msg_ptr < 40) - { - *oid_ptr = 0; - oid_ptr++; - *oid_ptr = *msg_ptr; - oid_ptr++; - } - else if (*msg_ptr < 80) - { - *oid_ptr = 1; - oid_ptr++; - *oid_ptr = (*msg_ptr) - 40; - oid_ptr++; - } - else - { - *oid_ptr = 2; - oid_ptr++; - *oid_ptr = (*msg_ptr) - 80; - oid_ptr++; - } - oid->len = 2; - } - else - { - /* accepting zero length identifiers e.g. for - getnext operation. uncommon but valid */ - return ERR_OK; - } - len--; - if (len > 0) - { - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - } - while ((len > 0) && (oid->len < LWIP_SNMP_OBJ_ID_LEN)) - { - /* sub-identifier uses multiple octets */ - if (*msg_ptr & 0x80) - { - int32_t sub_id = 0; - - while ((*msg_ptr & 0x80) && (len > 1)) - { - len--; - sub_id = (sub_id << 7) + (*msg_ptr & ~0x80); - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - } - if (!(*msg_ptr & 0x80) && (len > 0)) - { - /* last octet sub-identifier */ - len--; - sub_id = (sub_id << 7) + *msg_ptr; - *oid_ptr = sub_id; - } - } - else - { - /* !(*msg_ptr & 0x80) sub-identifier uses single octet */ - len--; - *oid_ptr = *msg_ptr; - } - if (len > 0) - { - /* remaining oid bytes available ... */ - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - } - oid_ptr++; - oid->len++; - } - if (len == 0) - { - /* len == 0, end of oid */ - return ERR_OK; - } - else - { - /* len > 0, oid->len == LWIP_SNMP_OBJ_ID_LEN or malformed encoding */ - return ERR_ARG; - } - - } - p = p->next; - } - /* p == NULL, ofs >= plen */ - return ERR_ARG; -} - -/** - * Decodes (copies) raw data (ip-addresses, octet strings, opaque encoding) - * from incoming message into array. - * - * @param p points to a pbuf holding an ASN1 coded raw data - * @param ofs points to the offset within the pbuf chain of the ASN1 coded raw data - * @param len length of the coded raw data (zero is valid, e.g. empty string!) - * @param raw_len length of the raw return value - * @param raw return raw bytes - * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) decode - */ -err_t -snmp_asn1_dec_raw(struct pbuf *p, uint16_t ofs, uint16_t len, uint16_t raw_len, uint8_t *raw) -{ - uint16_t plen, base; - uint8_t *msg_ptr; - - if (len > 0) - { - plen = 0; - while (p != NULL) - { - base = plen; - plen += p->len; - if (ofs < plen) - { - msg_ptr = (uint8_t*)p->payload; - msg_ptr += ofs - base; - if (raw_len >= len) - { - while (len > 1) - { - /* copy len - 1 octets */ - len--; - *raw = *msg_ptr; - raw++; - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - } - /* copy last octet */ - *raw = *msg_ptr; - return ERR_OK; - } - else - { - /* raw_len < len, not enough dst space */ - return ERR_ARG; - } - } - p = p->next; - } - /* p == NULL, ofs >= plen */ - return ERR_ARG; - } - else - { - /* len == 0, empty string */ - return ERR_OK; - } -} - -#endif /* LWIP_SNMP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/asn1_enc.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/asn1_enc.c deleted file mode 100644 index 9e6fdf1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/asn1_enc.c +++ /dev/null @@ -1,611 +0,0 @@ -/** - * @file - * Abstract Syntax Notation One (ISO 8824, 8825) encoding - * - * @todo not optimised (yet), favor correctness over speed, favor speed over size - */ - -/* - * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Christiaan Simons - */ - -#include "lwip/opt.h" - -#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/snmp_asn1.h" - -/** - * Returns octet count for length. - * - * @param length - * @param octets_needed points to the return value - */ -void -snmp_asn1_enc_length_cnt(uint16_t length, uint8_t *octets_needed) -{ - if (length < 0x80U) - { - *octets_needed = 1; - } - else if (length < 0x100U) - { - *octets_needed = 2; - } - else - { - *octets_needed = 3; - } -} - -/** - * Returns octet count for an uint32_t. - * - * @param value - * @param octets_needed points to the return value - * - * @note ASN coded integers are _always_ signed. E.g. +0xFFFF is coded - * as 0x00,0xFF,0xFF. Note the leading sign octet. A positive value - * of 0xFFFFFFFF is preceded with 0x00 and the length is 5 octets!! - */ -void -snmp_asn1_enc_u32t_cnt(uint32_t value, uint16_t *octets_needed) -{ - if (value < 0x80UL) - { - *octets_needed = 1; - } - else if (value < 0x8000UL) - { - *octets_needed = 2; - } - else if (value < 0x800000UL) - { - *octets_needed = 3; - } - else if (value < 0x80000000UL) - { - *octets_needed = 4; - } - else - { - *octets_needed = 5; - } -} - -/** - * Returns octet count for an int32_t. - * - * @param value - * @param octets_needed points to the return value - * - * @note ASN coded integers are _always_ signed. - */ -void -snmp_asn1_enc_s32t_cnt(int32_t value, uint16_t *octets_needed) -{ - if (value < 0) - { - value = ~value; - } - if (value < 0x80L) - { - *octets_needed = 1; - } - else if (value < 0x8000L) - { - *octets_needed = 2; - } - else if (value < 0x800000L) - { - *octets_needed = 3; - } - else - { - *octets_needed = 4; - } -} - -/** - * Returns octet count for an object identifier. - * - * @param ident_len object identifier array length - * @param ident points to object identifier array - * @param octets_needed points to the return value - */ -void -snmp_asn1_enc_oid_cnt(uint8_t ident_len, int32_t *ident, uint16_t *octets_needed) -{ - int32_t sub_id; - uint8_t cnt; - - cnt = 0; - if (ident_len > 1) - { - /* compressed prefix in one octet */ - cnt++; - ident_len -= 2; - ident += 2; - } - while(ident_len > 0) - { - ident_len--; - sub_id = *ident; - - sub_id >>= 7; - cnt++; - while(sub_id > 0) - { - sub_id >>= 7; - cnt++; - } - ident++; - } - *octets_needed = cnt; -} - -/** - * Encodes ASN type field into a pbuf chained ASN1 msg. - * - * @param p points to output pbuf to encode value into - * @param ofs points to the offset within the pbuf chain - * @param type input ASN1 type - * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode - */ -err_t -snmp_asn1_enc_type(struct pbuf *p, uint16_t ofs, uint8_t type) -{ - uint16_t plen, base; - uint8_t *msg_ptr; - - plen = 0; - while (p != NULL) - { - base = plen; - plen += p->len; - if (ofs < plen) - { - msg_ptr = (uint8_t*)p->payload; - msg_ptr += ofs - base; - *msg_ptr = type; - return ERR_OK; - } - p = p->next; - } - /* p == NULL, ofs >= plen */ - return ERR_ARG; -} - -/** - * Encodes host order length field into a pbuf chained ASN1 msg. - * - * @param p points to output pbuf to encode length into - * @param ofs points to the offset within the pbuf chain - * @param length is the host order length to be encoded - * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode - */ -err_t -snmp_asn1_enc_length(struct pbuf *p, uint16_t ofs, uint16_t length) -{ - uint16_t plen, base; - uint8_t *msg_ptr; - - plen = 0; - while (p != NULL) - { - base = plen; - plen += p->len; - if (ofs < plen) - { - msg_ptr = (uint8_t*)p->payload; - msg_ptr += ofs - base; - - if (length < 0x80) - { - *msg_ptr = (uint8_t)length; - return ERR_OK; - } - else if (length < 0x100) - { - *msg_ptr = 0x81; - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - *msg_ptr = (uint8_t)length; - return ERR_OK; - } - else - { - uint8_t i; - - /* length >= 0x100 && length <= 0xFFFF */ - *msg_ptr = 0x82; - i = 2; - while (i > 0) - { - i--; - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - if (i == 0) - { - /* least significant length octet */ - *msg_ptr = (uint8_t)length; - } - else - { - /* most significant length octet */ - *msg_ptr = (uint8_t)(length >> 8); - } - } - return ERR_OK; - } - } - p = p->next; - } - /* p == NULL, ofs >= plen */ - return ERR_ARG; -} - -/** - * Encodes uint32_t (counter, gauge, timeticks) into a pbuf chained ASN1 msg. - * - * @param p points to output pbuf to encode value into - * @param ofs points to the offset within the pbuf chain - * @param octets_needed encoding length (from snmp_asn1_enc_u32t_cnt()) - * @param value is the host order uint32_t value to be encoded - * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode - * - * @see snmp_asn1_enc_u32t_cnt() - */ -err_t -snmp_asn1_enc_u32t(struct pbuf *p, uint16_t ofs, uint16_t octets_needed, uint32_t value) -{ - uint16_t plen, base; - uint8_t *msg_ptr; - - plen = 0; - while (p != NULL) - { - base = plen; - plen += p->len; - if (ofs < plen) - { - msg_ptr = (uint8_t*)p->payload; - msg_ptr += ofs - base; - - if (octets_needed == 5) - { - /* not enough bits in 'value' add leading 0x00 */ - octets_needed--; - *msg_ptr = 0x00; - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - } - while (octets_needed > 1) - { - octets_needed--; - *msg_ptr = (uint8_t)(value >> (octets_needed << 3)); - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - } - /* (only) one least significant octet */ - *msg_ptr = (uint8_t)value; - return ERR_OK; - } - p = p->next; - } - /* p == NULL, ofs >= plen */ - return ERR_ARG; -} - -/** - * Encodes int32_t integer into a pbuf chained ASN1 msg. - * - * @param p points to output pbuf to encode value into - * @param ofs points to the offset within the pbuf chain - * @param octets_needed encoding length (from snmp_asn1_enc_s32t_cnt()) - * @param value is the host order int32_t value to be encoded - * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode - * - * @see snmp_asn1_enc_s32t_cnt() - */ -err_t -snmp_asn1_enc_s32t(struct pbuf *p, uint16_t ofs, uint16_t octets_needed, int32_t value) -{ - uint16_t plen, base; - uint8_t *msg_ptr; - - plen = 0; - while (p != NULL) - { - base = plen; - plen += p->len; - if (ofs < plen) - { - msg_ptr = (uint8_t*)p->payload; - msg_ptr += ofs - base; - - while (octets_needed > 1) - { - octets_needed--; - *msg_ptr = (uint8_t)(value >> (octets_needed << 3)); - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - } - /* (only) one least significant octet */ - *msg_ptr = (uint8_t)value; - return ERR_OK; - } - p = p->next; - } - /* p == NULL, ofs >= plen */ - return ERR_ARG; -} - -/** - * Encodes object identifier into a pbuf chained ASN1 msg. - * - * @param p points to output pbuf to encode oid into - * @param ofs points to the offset within the pbuf chain - * @param ident_len object identifier array length - * @param ident points to object identifier array - * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode - */ -err_t -snmp_asn1_enc_oid(struct pbuf *p, uint16_t ofs, uint8_t ident_len, int32_t *ident) -{ - uint16_t plen, base; - uint8_t *msg_ptr; - - plen = 0; - while (p != NULL) - { - base = plen; - plen += p->len; - if (ofs < plen) - { - msg_ptr = (uint8_t*)p->payload; - msg_ptr += ofs - base; - - if (ident_len > 1) - { - if ((ident[0] == 1) && (ident[1] == 3)) - { - /* compressed (most common) prefix .iso.org */ - *msg_ptr = 0x2b; - } - else - { - /* calculate prefix */ - *msg_ptr = (uint8_t)((ident[0] * 40) + ident[1]); - } - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - ident_len -= 2; - ident += 2; - } - else - { -/* @bug: allow empty varbinds for symmetry (we must decode them for getnext), allow partial compression?? */ - /* ident_len <= 1, at least we need zeroDotZero (0.0) (ident_len == 2) */ - return ERR_ARG; - } - while (ident_len > 0) - { - int32_t sub_id; - uint8_t shift, tail; - - ident_len--; - sub_id = *ident; - tail = 0; - shift = 28; - while(shift > 0) - { - uint8_t code; - - code = (uint8_t)(sub_id >> shift); - if ((code != 0) || (tail != 0)) - { - tail = 1; - *msg_ptr = code | 0x80; - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - } - shift -= 7; - } - *msg_ptr = (uint8_t)sub_id & 0x7F; - if (ident_len > 0) - { - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - } - /* proceed to next sub-identifier */ - ident++; - } - return ERR_OK; - } - p = p->next; - } - /* p == NULL, ofs >= plen */ - return ERR_ARG; -} - -/** - * Encodes raw data (octet string, opaque) into a pbuf chained ASN1 msg. - * - * @param p points to output pbuf to encode raw data into - * @param ofs points to the offset within the pbuf chain - * @param raw_len raw data length - * @param raw points raw data - * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode - */ -err_t -snmp_asn1_enc_raw(struct pbuf *p, uint16_t ofs, uint16_t raw_len, uint8_t *raw) -{ - uint16_t plen, base; - uint8_t *msg_ptr; - - plen = 0; - while (p != NULL) - { - base = plen; - plen += p->len; - if (ofs < plen) - { - msg_ptr = (uint8_t*)p->payload; - msg_ptr += ofs - base; - - while (raw_len > 1) - { - /* copy raw_len - 1 octets */ - raw_len--; - *msg_ptr = *raw; - raw++; - ofs += 1; - if (ofs >= plen) - { - /* next octet in next pbuf */ - p = p->next; - if (p == NULL) { return ERR_ARG; } - msg_ptr = (uint8_t*)p->payload; - plen += p->len; - } - else - { - /* next octet in same pbuf */ - msg_ptr++; - } - } - if (raw_len > 0) - { - /* copy last or single octet */ - *msg_ptr = *raw; - } - return ERR_OK; - } - p = p->next; - } - /* p == NULL, ofs >= plen */ - return ERR_ARG; -} - -#endif /* LWIP_SNMP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/mib2.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/mib2.c deleted file mode 100644 index dd2f005..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/mib2.c +++ /dev/null @@ -1,4146 +0,0 @@ -/** - * @file - * Management Information Base II (RFC1213) objects and functions. - * - * @note the object identifiers for this MIB-2 and private MIB tree - * must be kept in sorted ascending order. This to ensure correct getnext operation. - */ - -/* - * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Christiaan Simons - */ - -#include "lwip/opt.h" - -#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/snmp.h" -#include "lwip/netif.h" -#include "lwip/ip.h" -#include "lwip/ip_frag.h" -#include "lwip/mem.h" -#include "lwip/tcp_impl.h" -#include "lwip/udp.h" -#include "lwip/snmp_asn1.h" -#include "lwip/snmp_structs.h" -#include "lwip/sys.h" -#include "netif/etharp.h" - -/** - * IANA assigned enterprise ID for lwIP is 26381 - * @see http://www.iana.org/assignments/enterprise-numbers - * - * @note this enterprise ID is assigned to the lwIP project, - * all object identifiers living under this ID are assigned - * by the lwIP maintainers (contact Christiaan Simons)! - * @note don't change this define, use snmp_set_sysobjid() - * - * If you need to create your own private MIB you'll need - * to apply for your own enterprise ID with IANA: - * http://www.iana.org/numbers.html - */ -#define SNMP_ENTERPRISE_ID 26381 -#define SNMP_SYSOBJID_LEN 7 -#define SNMP_SYSOBJID {1, 3, 6, 1, 4, 1, SNMP_ENTERPRISE_ID} - -#ifndef SNMP_SYSSERVICES -#define SNMP_SYSSERVICES ((1 << 6) | (1 << 3) | ((IP_FORWARD) << 2)) -#endif - -#ifndef SNMP_GET_SYSUPTIME -#define SNMP_GET_SYSUPTIME(sysuptime) (sysuptime = (sys_now() / 10)) -#endif - -static void system_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -static void system_get_value(struct obj_def *od, uint16_t len, void *value); -static uint8_t system_set_test(struct obj_def *od, uint16_t len, void *value); -static void system_set_value(struct obj_def *od, uint16_t len, void *value); -static void interfaces_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -static void interfaces_get_value(struct obj_def *od, uint16_t len, void *value); -static void ifentry_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -static void ifentry_get_value(struct obj_def *od, uint16_t len, void *value); -#if !SNMP_SAFE_REQUESTS -static uint8_t ifentry_set_test (struct obj_def *od, uint16_t len, void *value); -static void ifentry_set_value (struct obj_def *od, uint16_t len, void *value); -#endif /* SNMP_SAFE_REQUESTS */ -static void atentry_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -static void atentry_get_value(struct obj_def *od, uint16_t len, void *value); -static void ip_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -static void ip_get_value(struct obj_def *od, uint16_t len, void *value); -static uint8_t ip_set_test(struct obj_def *od, uint16_t len, void *value); -static void ip_addrentry_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -static void ip_addrentry_get_value(struct obj_def *od, uint16_t len, void *value); -static void ip_rteentry_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -static void ip_rteentry_get_value(struct obj_def *od, uint16_t len, void *value); -static void ip_ntomentry_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -static void ip_ntomentry_get_value(struct obj_def *od, uint16_t len, void *value); -static void icmp_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -static void icmp_get_value(struct obj_def *od, uint16_t len, void *value); -#if LWIP_TCP -static void tcp_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -static void tcp_get_value(struct obj_def *od, uint16_t len, void *value); -#ifdef THIS_SEEMS_UNUSED -static void tcpconnentry_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -static void tcpconnentry_get_value(struct obj_def *od, uint16_t len, void *value); -#endif -#endif -static void udp_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -static void udp_get_value(struct obj_def *od, uint16_t len, void *value); -static void udpentry_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -static void udpentry_get_value(struct obj_def *od, uint16_t len, void *value); -static void snmp_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -static void snmp_get_value(struct obj_def *od, uint16_t len, void *value); -static uint8_t snmp_set_test(struct obj_def *od, uint16_t len, void *value); -static void snmp_set_value(struct obj_def *od, uint16_t len, void *value); - - -/* snmp .1.3.6.1.2.1.11 */ -const mib_scalar_node snmp_scalar = { - &snmp_get_object_def, - &snmp_get_value, - &snmp_set_test, - &snmp_set_value, - MIB_NODE_SC, - 0 -}; -const int32_t snmp_ids[28] = { - 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30 -}; -struct mib_node* const snmp_nodes[28] = { - (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar, - (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar, - (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar, - (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar, - (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar, - (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar, - (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar, - (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar, - (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar, - (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar, - (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar, - (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar, - (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar, - (struct mib_node*)&snmp_scalar, (struct mib_node*)&snmp_scalar -}; -const struct mib_array_node snmp = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 28, - snmp_ids, - snmp_nodes -}; - -/* dot3 and EtherLike MIB not planned. (transmission .1.3.6.1.2.1.10) */ -/* historical (some say hysterical). (cmot .1.3.6.1.2.1.9) */ -/* lwIP has no EGP, thus may not implement it. (egp .1.3.6.1.2.1.8) */ - -/* udp .1.3.6.1.2.1.7 */ -/** index root node for udpTable */ -struct mib_list_rootnode udp_root = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_LR, - 0, - NULL, - NULL, - 0 -}; -const int32_t udpentry_ids[2] = { 1, 2 }; -struct mib_node* const udpentry_nodes[2] = { - (struct mib_node*)&udp_root, (struct mib_node*)&udp_root, -}; -const struct mib_array_node udpentry = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 2, - udpentry_ids, - udpentry_nodes -}; - -int32_t udptable_id = 1; -struct mib_node* udptable_node = (struct mib_node*)&udpentry; -struct mib_ram_array_node udptable = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_RA, - 0, - &udptable_id, - &udptable_node -}; - -const mib_scalar_node udp_scalar = { - &udp_get_object_def, - &udp_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_SC, - 0 -}; -const int32_t udp_ids[5] = { 1, 2, 3, 4, 5 }; -struct mib_node* const udp_nodes[5] = { - (struct mib_node*)&udp_scalar, (struct mib_node*)&udp_scalar, - (struct mib_node*)&udp_scalar, (struct mib_node*)&udp_scalar, - (struct mib_node*)&udptable -}; -const struct mib_array_node udp = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 5, - udp_ids, - udp_nodes -}; - -/* tcp .1.3.6.1.2.1.6 */ -#if LWIP_TCP -/* only if the TCP protocol is available may implement this group */ -/** index root node for tcpConnTable */ -struct mib_list_rootnode tcpconntree_root = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_LR, - 0, - NULL, - NULL, - 0 -}; -const int32_t tcpconnentry_ids[5] = { 1, 2, 3, 4, 5 }; -struct mib_node* const tcpconnentry_nodes[5] = { - (struct mib_node*)&tcpconntree_root, (struct mib_node*)&tcpconntree_root, - (struct mib_node*)&tcpconntree_root, (struct mib_node*)&tcpconntree_root, - (struct mib_node*)&tcpconntree_root -}; -const struct mib_array_node tcpconnentry = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 5, - tcpconnentry_ids, - tcpconnentry_nodes -}; - -int32_t tcpconntable_id = 1; -struct mib_node* tcpconntable_node = (struct mib_node*)&tcpconnentry; -struct mib_ram_array_node tcpconntable = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_RA, -/** @todo update maxlength when inserting / deleting from table - 0 when table is empty, 1 when more than one entry */ - 0, - &tcpconntable_id, - &tcpconntable_node -}; - -const mib_scalar_node tcp_scalar = { - &tcp_get_object_def, - &tcp_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_SC, - 0 -}; -const int32_t tcp_ids[15] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; -struct mib_node* const tcp_nodes[15] = { - (struct mib_node*)&tcp_scalar, (struct mib_node*)&tcp_scalar, - (struct mib_node*)&tcp_scalar, (struct mib_node*)&tcp_scalar, - (struct mib_node*)&tcp_scalar, (struct mib_node*)&tcp_scalar, - (struct mib_node*)&tcp_scalar, (struct mib_node*)&tcp_scalar, - (struct mib_node*)&tcp_scalar, (struct mib_node*)&tcp_scalar, - (struct mib_node*)&tcp_scalar, (struct mib_node*)&tcp_scalar, - (struct mib_node*)&tcpconntable, (struct mib_node*)&tcp_scalar, - (struct mib_node*)&tcp_scalar -}; -const struct mib_array_node tcp = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 15, - tcp_ids, - tcp_nodes -}; -#endif - -/* icmp .1.3.6.1.2.1.5 */ -const mib_scalar_node icmp_scalar = { - &icmp_get_object_def, - &icmp_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_SC, - 0 -}; -const int32_t icmp_ids[26] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 }; -struct mib_node* const icmp_nodes[26] = { - (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar, - (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar, - (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar, - (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar, - (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar, - (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar, - (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar, - (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar, - (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar, - (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar, - (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar, - (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar, - (struct mib_node*)&icmp_scalar, (struct mib_node*)&icmp_scalar -}; -const struct mib_array_node icmp = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 26, - icmp_ids, - icmp_nodes -}; - -/** index root node for ipNetToMediaTable */ -struct mib_list_rootnode ipntomtree_root = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_LR, - 0, - NULL, - NULL, - 0 -}; -const int32_t ipntomentry_ids[4] = { 1, 2, 3, 4 }; -struct mib_node* const ipntomentry_nodes[4] = { - (struct mib_node*)&ipntomtree_root, (struct mib_node*)&ipntomtree_root, - (struct mib_node*)&ipntomtree_root, (struct mib_node*)&ipntomtree_root -}; -const struct mib_array_node ipntomentry = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 4, - ipntomentry_ids, - ipntomentry_nodes -}; - -int32_t ipntomtable_id = 1; -struct mib_node* ipntomtable_node = (struct mib_node*)&ipntomentry; -struct mib_ram_array_node ipntomtable = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_RA, - 0, - &ipntomtable_id, - &ipntomtable_node -}; - -/** index root node for ipRouteTable */ -struct mib_list_rootnode iprtetree_root = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_LR, - 0, - NULL, - NULL, - 0 -}; -const int32_t iprteentry_ids[13] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; -struct mib_node* const iprteentry_nodes[13] = { - (struct mib_node*)&iprtetree_root, (struct mib_node*)&iprtetree_root, - (struct mib_node*)&iprtetree_root, (struct mib_node*)&iprtetree_root, - (struct mib_node*)&iprtetree_root, (struct mib_node*)&iprtetree_root, - (struct mib_node*)&iprtetree_root, (struct mib_node*)&iprtetree_root, - (struct mib_node*)&iprtetree_root, (struct mib_node*)&iprtetree_root, - (struct mib_node*)&iprtetree_root, (struct mib_node*)&iprtetree_root, - (struct mib_node*)&iprtetree_root -}; -const struct mib_array_node iprteentry = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 13, - iprteentry_ids, - iprteentry_nodes -}; - -int32_t iprtetable_id = 1; -struct mib_node* iprtetable_node = (struct mib_node*)&iprteentry; -struct mib_ram_array_node iprtetable = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_RA, - 0, - &iprtetable_id, - &iprtetable_node -}; - -/** index root node for ipAddrTable */ -struct mib_list_rootnode ipaddrtree_root = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_LR, - 0, - NULL, - NULL, - 0 -}; -const int32_t ipaddrentry_ids[5] = { 1, 2, 3, 4, 5 }; -struct mib_node* const ipaddrentry_nodes[5] = { - (struct mib_node*)&ipaddrtree_root, - (struct mib_node*)&ipaddrtree_root, - (struct mib_node*)&ipaddrtree_root, - (struct mib_node*)&ipaddrtree_root, - (struct mib_node*)&ipaddrtree_root -}; -const struct mib_array_node ipaddrentry = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 5, - ipaddrentry_ids, - ipaddrentry_nodes -}; - -int32_t ipaddrtable_id = 1; -struct mib_node* ipaddrtable_node = (struct mib_node*)&ipaddrentry; -struct mib_ram_array_node ipaddrtable = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_RA, - 0, - &ipaddrtable_id, - &ipaddrtable_node -}; - -/* ip .1.3.6.1.2.1.4 */ -const mib_scalar_node ip_scalar = { - &ip_get_object_def, - &ip_get_value, - &ip_set_test, - &noleafs_set_value, - MIB_NODE_SC, - 0 -}; -const int32_t ip_ids[23] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }; -struct mib_node* const ip_nodes[23] = { - (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar, - (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar, - (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar, - (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar, - (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar, - (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar, - (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar, - (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar, - (struct mib_node*)&ip_scalar, (struct mib_node*)&ip_scalar, - (struct mib_node*)&ip_scalar, (struct mib_node*)&ipaddrtable, - (struct mib_node*)&iprtetable, (struct mib_node*)&ipntomtable, - (struct mib_node*)&ip_scalar -}; -const struct mib_array_node mib2_ip = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 23, - ip_ids, - ip_nodes -}; - -/** index root node for atTable */ -struct mib_list_rootnode arptree_root = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_LR, - 0, - NULL, - NULL, - 0 -}; -const int32_t atentry_ids[3] = { 1, 2, 3 }; -struct mib_node* const atentry_nodes[3] = { - (struct mib_node*)&arptree_root, - (struct mib_node*)&arptree_root, - (struct mib_node*)&arptree_root -}; -const struct mib_array_node atentry = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 3, - atentry_ids, - atentry_nodes -}; - -const int32_t attable_id = 1; -struct mib_node* const attable_node = (struct mib_node*)&atentry; -const struct mib_array_node attable = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 1, - &attable_id, - &attable_node -}; - -/* at .1.3.6.1.2.1.3 */ -int32_t at_id = 1; -struct mib_node* mib2_at_node = (struct mib_node*)&attable; -struct mib_ram_array_node at = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_RA, - 0, - &at_id, - &mib2_at_node -}; - -/** index root node for ifTable */ -struct mib_list_rootnode iflist_root = { - &ifentry_get_object_def, - &ifentry_get_value, -#if SNMP_SAFE_REQUESTS - &noleafs_set_test, - &noleafs_set_value, -#else /* SNMP_SAFE_REQUESTS */ - &ifentry_set_test, - &ifentry_set_value, -#endif /* SNMP_SAFE_REQUESTS */ - MIB_NODE_LR, - 0, - NULL, - NULL, - 0 -}; -const int32_t ifentry_ids[22] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 }; -struct mib_node* const ifentry_nodes[22] = { - (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root, - (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root, - (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root, - (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root, - (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root, - (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root, - (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root, - (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root, - (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root, - (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root, - (struct mib_node*)&iflist_root, (struct mib_node*)&iflist_root -}; -const struct mib_array_node ifentry = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 22, - ifentry_ids, - ifentry_nodes -}; - -int32_t iftable_id = 1; -struct mib_node* iftable_node = (struct mib_node*)&ifentry; -struct mib_ram_array_node iftable = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_RA, - 0, - &iftable_id, - &iftable_node -}; - -/* interfaces .1.3.6.1.2.1.2 */ -const mib_scalar_node interfaces_scalar = { - &interfaces_get_object_def, - &interfaces_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_SC, - 0 -}; -const int32_t interfaces_ids[2] = { 1, 2 }; -struct mib_node* const interfaces_nodes[2] = { - (struct mib_node*)&interfaces_scalar, (struct mib_node*)&iftable -}; -const struct mib_array_node interfaces = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 2, - interfaces_ids, - interfaces_nodes -}; - - -/* 0 1 2 3 4 5 6 */ -/* system .1.3.6.1.2.1.1 */ -const mib_scalar_node sys_tem_scalar = { - &system_get_object_def, - &system_get_value, - &system_set_test, - &system_set_value, - MIB_NODE_SC, - 0 -}; -const int32_t sys_tem_ids[7] = { 1, 2, 3, 4, 5, 6, 7 }; -struct mib_node* const sys_tem_nodes[7] = { - (struct mib_node*)&sys_tem_scalar, (struct mib_node*)&sys_tem_scalar, - (struct mib_node*)&sys_tem_scalar, (struct mib_node*)&sys_tem_scalar, - (struct mib_node*)&sys_tem_scalar, (struct mib_node*)&sys_tem_scalar, - (struct mib_node*)&sys_tem_scalar -}; -/* work around name issue with 'sys_tem', some compiler(s?) seem to reserve 'system' */ -const struct mib_array_node sys_tem = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 7, - sys_tem_ids, - sys_tem_nodes -}; - -/* mib-2 .1.3.6.1.2.1 */ -#if LWIP_TCP -#define MIB2_GROUPS 8 -#else -#define MIB2_GROUPS 7 -#endif -const int32_t mib2_ids[MIB2_GROUPS] = -{ - 1, - 2, - 3, - 4, - 5, -#if LWIP_TCP - 6, -#endif - 7, - 11 -}; -struct mib_node* const mib2_nodes[MIB2_GROUPS] = { - (struct mib_node*)&sys_tem, - (struct mib_node*)&interfaces, - (struct mib_node*)&at, - (struct mib_node*)&mib2_ip, - (struct mib_node*)&icmp, -#if LWIP_TCP - (struct mib_node*)&tcp, -#endif - (struct mib_node*)&udp, - (struct mib_node*)&snmp -}; - -const struct mib_array_node mib2 = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - MIB2_GROUPS, - mib2_ids, - mib2_nodes -}; - -/* mgmt .1.3.6.1.2 */ -const int32_t mgmt_ids[1] = { 1 }; -struct mib_node* const mgmt_nodes[1] = { (struct mib_node*)&mib2 }; -const struct mib_array_node mgmt = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 1, - mgmt_ids, - mgmt_nodes -}; - -/* internet .1.3.6.1 */ -#if SNMP_PRIVATE_MIB -/* When using a private MIB, you have to create a file 'private_mib.h' that contains - * a 'struct mib_array_node mib_private' which contains your MIB. */ -int32_t internet_ids[2] = { 2, 4 }; -struct mib_node* const internet_nodes[2] = { (struct mib_node*)&mgmt, (struct mib_node*)&mib_private }; -const struct mib_array_node internet = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 2, - internet_ids, - internet_nodes -}; -#else -const int32_t internet_ids[1] = { 2 }; -struct mib_node* const internet_nodes[1] = { (struct mib_node*)&mgmt }; -const struct mib_array_node internet = { - &noleafs_get_object_def, - &noleafs_get_value, - &noleafs_set_test, - &noleafs_set_value, - MIB_NODE_AR, - 1, - internet_ids, - internet_nodes -}; -#endif - -/** mib-2.system.sysObjectID */ -static struct snmp_obj_id sysobjid = {SNMP_SYSOBJID_LEN, SNMP_SYSOBJID}; -/** enterprise ID for generic TRAPs, .iso.org.dod.internet.mgmt.mib-2.snmp */ -static struct snmp_obj_id snmpgrp_id = {7,{1,3,6,1,2,1,11}}; -/** mib-2.system.sysServices */ -static const int32_t sysservices = SNMP_SYSSERVICES; - -/** mib-2.system.sysDescr */ -static const uint8_t sysdescr_len_default = 4; -static const uint8_t sysdescr_default[] = "lwIP"; -static uint8_t* sysdescr_len_ptr = (uint8_t*)&sysdescr_len_default; -static uint8_t* sysdescr_ptr = (uint8_t*)&sysdescr_default[0]; -/** mib-2.system.sysContact */ -static const uint8_t syscontact_len_default = 0; -static const uint8_t syscontact_default[] = ""; -static uint8_t* syscontact_len_ptr = (uint8_t*)&syscontact_len_default; -static uint8_t* syscontact_ptr = (uint8_t*)&syscontact_default[0]; -/** mib-2.system.sysName */ -static const uint8_t sysname_len_default = 8; -static const uint8_t sysname_default[] = "FQDN-unk"; -static uint8_t* sysname_len_ptr = (uint8_t*)&sysname_len_default; -static uint8_t* sysname_ptr = (uint8_t*)&sysname_default[0]; -/** mib-2.system.sysLocation */ -static const uint8_t syslocation_len_default = 0; -static const uint8_t syslocation_default[] = ""; -static uint8_t* syslocation_len_ptr = (uint8_t*)&syslocation_len_default; -static uint8_t* syslocation_ptr = (uint8_t*)&syslocation_default[0]; -/** mib-2.snmp.snmpEnableAuthenTraps */ -static const uint8_t snmpenableauthentraps_default = 2; /* disabled */ -static uint8_t* snmpenableauthentraps_ptr = (uint8_t*)&snmpenableauthentraps_default; - -/** mib-2.interfaces.ifTable.ifEntry.ifSpecific (zeroDotZero) */ -static const struct snmp_obj_id ifspecific = {2, {0, 0}}; -/** mib-2.ip.ipRouteTable.ipRouteEntry.ipRouteInfo (zeroDotZero) */ -static const struct snmp_obj_id iprouteinfo = {2, {0, 0}}; - - - -/* mib-2.system counter(s) */ -static uint32_t sysuptime = 0; - -/* mib-2.ip counter(s) */ -static uint32_t ipinreceives = 0, - ipinhdrerrors = 0, - ipinaddrerrors = 0, - ipforwdatagrams = 0, - ipinunknownprotos = 0, - ipindiscards = 0, - ipindelivers = 0, - ipoutrequests = 0, - ipoutdiscards = 0, - ipoutnoroutes = 0, - ipreasmreqds = 0, - ipreasmoks = 0, - ipreasmfails = 0, - ipfragoks = 0, - ipfragfails = 0, - ipfragcreates = 0, - iproutingdiscards = 0; -/* mib-2.icmp counter(s) */ -static uint32_t icmpinmsgs = 0, - icmpinerrors = 0, - icmpindestunreachs = 0, - icmpintimeexcds = 0, - icmpinparmprobs = 0, - icmpinsrcquenchs = 0, - icmpinredirects = 0, - icmpinechos = 0, - icmpinechoreps = 0, - icmpintimestamps = 0, - icmpintimestampreps = 0, - icmpinaddrmasks = 0, - icmpinaddrmaskreps = 0, - icmpoutmsgs = 0, - icmpouterrors = 0, - icmpoutdestunreachs = 0, - icmpouttimeexcds = 0, - icmpoutparmprobs = 0, - icmpoutsrcquenchs = 0, - icmpoutredirects = 0, - icmpoutechos = 0, - icmpoutechoreps = 0, - icmpouttimestamps = 0, - icmpouttimestampreps = 0, - icmpoutaddrmasks = 0, - icmpoutaddrmaskreps = 0; -/* mib-2.tcp counter(s) */ -static uint32_t tcpactiveopens = 0, - tcppassiveopens = 0, - tcpattemptfails = 0, - tcpestabresets = 0, - tcpinsegs = 0, - tcpoutsegs = 0, - tcpretranssegs = 0, - tcpinerrs = 0, - tcpoutrsts = 0; -/* mib-2.udp counter(s) */ -static uint32_t udpindatagrams = 0, - udpnoports = 0, - udpinerrors = 0, - udpoutdatagrams = 0; -/* mib-2.snmp counter(s) */ -static uint32_t snmpinpkts = 0, - snmpoutpkts = 0, - snmpinbadversions = 0, - snmpinbadcommunitynames = 0, - snmpinbadcommunityuses = 0, - snmpinasnparseerrs = 0, - snmpintoobigs = 0, - snmpinnosuchnames = 0, - snmpinbadvalues = 0, - snmpinreadonlys = 0, - snmpingenerrs = 0, - snmpintotalreqvars = 0, - snmpintotalsetvars = 0, - snmpingetrequests = 0, - snmpingetnexts = 0, - snmpinsetrequests = 0, - snmpingetresponses = 0, - snmpintraps = 0, - snmpouttoobigs = 0, - snmpoutnosuchnames = 0, - snmpoutbadvalues = 0, - snmpoutgenerrs = 0, - snmpoutgetrequests = 0, - snmpoutgetnexts = 0, - snmpoutsetrequests = 0, - snmpoutgetresponses = 0, - snmpouttraps = 0; - - - -/* prototypes of the following functions are in lwip/src/include/lwip/snmp.h */ -/** - * Copy octet string. - * - * @param dst points to destination - * @param src points to source - * @param n number of octets to copy. - */ -static void ocstrncpy(uint8_t *dst, uint8_t *src, uint16_t n) -{ - uint16_t i = n; - while (i > 0) { - i--; - *dst++ = *src++; - } -} - -/** - * Copy object identifier (int32_t) array. - * - * @param dst points to destination - * @param src points to source - * @param n number of sub identifiers to copy. - */ -void objectidncpy(int32_t *dst, int32_t *src, uint8_t n) -{ - uint8_t i = n; - while(i > 0) { - i--; - *dst++ = *src++; - } -} - -/** - * Initializes sysDescr pointers. - * - * @param str if non-NULL then copy str pointer - * @param len points to string length, excluding zero terminator - */ -void snmp_set_sysdesr(uint8_t *str, uint8_t *len) -{ - if (str != NULL) - { - sysdescr_ptr = str; - sysdescr_len_ptr = len; - } -} - -void snmp_get_sysobjid_ptr(struct snmp_obj_id **oid) -{ - *oid = &sysobjid; -} - -/** - * Initializes sysObjectID value. - * - * @param oid points to stuct snmp_obj_id to copy - */ -void snmp_set_sysobjid(struct snmp_obj_id *oid) -{ - sysobjid = *oid; -} - -/** - * Must be called at regular 10 msec interval from a timer interrupt - * or signal handler depending on your runtime environment. - */ -void snmp_inc_sysuptime(void) -{ - sysuptime++; -} - -void snmp_add_sysuptime(uint32_t value) -{ - sysuptime+=value; -} - -void snmp_get_sysuptime(uint32_t *value) -{ - SNMP_GET_SYSUPTIME(sysuptime); - *value = sysuptime; -} - -/** - * Initializes sysContact pointers, - * e.g. ptrs to non-volatile memory external to lwIP. - * - * @param ocstr if non-NULL then copy str pointer - * @param ocstrlen points to string length, excluding zero terminator - */ -void snmp_set_syscontact(uint8_t *ocstr, uint8_t *ocstrlen) -{ - if (ocstr != NULL) - { - syscontact_ptr = ocstr; - syscontact_len_ptr = ocstrlen; - } -} - -/** - * Initializes sysName pointers, - * e.g. ptrs to non-volatile memory external to lwIP. - * - * @param ocstr if non-NULL then copy str pointer - * @param ocstrlen points to string length, excluding zero terminator - */ -void snmp_set_sysname(uint8_t *ocstr, uint8_t *ocstrlen) -{ - if (ocstr != NULL) - { - sysname_ptr = ocstr; - sysname_len_ptr = ocstrlen; - } -} - -/** - * Initializes sysLocation pointers, - * e.g. ptrs to non-volatile memory external to lwIP. - * - * @param ocstr if non-NULL then copy str pointer - * @param ocstrlen points to string length, excluding zero terminator - */ -void snmp_set_syslocation(uint8_t *ocstr, uint8_t *ocstrlen) -{ - if (ocstr != NULL) - { - syslocation_ptr = ocstr; - syslocation_len_ptr = ocstrlen; - } -} - - -void snmp_add_ifinoctets(struct netif *ni, uint32_t value) -{ - ni->ifinoctets += value; -} - -void snmp_inc_ifinucastpkts(struct netif *ni) -{ - (ni->ifinucastpkts)++; -} - -void snmp_inc_ifinnucastpkts(struct netif *ni) -{ - (ni->ifinnucastpkts)++; -} - -void snmp_inc_ifindiscards(struct netif *ni) -{ - (ni->ifindiscards)++; -} - -void snmp_add_ifoutoctets(struct netif *ni, uint32_t value) -{ - ni->ifoutoctets += value; -} - -void snmp_inc_ifoutucastpkts(struct netif *ni) -{ - (ni->ifoutucastpkts)++; -} - -void snmp_inc_ifoutnucastpkts(struct netif *ni) -{ - (ni->ifoutnucastpkts)++; -} - -void snmp_inc_ifoutdiscards(struct netif *ni) -{ - (ni->ifoutdiscards)++; -} - -void snmp_inc_iflist(void) -{ - struct mib_list_node *if_node = NULL; - - snmp_mib_node_insert(&iflist_root, iflist_root.count + 1, &if_node); - /* enable getnext traversal on filled table */ - iftable.maxlength = 1; -} - -void snmp_dec_iflist(void) -{ - snmp_mib_node_delete(&iflist_root, iflist_root.tail); - /* disable getnext traversal on empty table */ - if(iflist_root.count == 0) iftable.maxlength = 0; -} - -/** - * Inserts ARP table indexes (.xIfIndex.xNetAddress) - * into arp table index trees (both atTable and ipNetToMediaTable). - */ -void snmp_insert_arpidx_tree(struct netif *ni, ip_addr_t *ip) -{ - struct mib_list_rootnode *at_rn; - struct mib_list_node *at_node; - int32_t arpidx[5]; - uint8_t level, tree; - - LWIP_ASSERT("ni != NULL", ni != NULL); - snmp_netiftoifindex(ni, &arpidx[0]); - snmp_iptooid(ip, &arpidx[1]); - - for (tree = 0; tree < 2; tree++) - { - if (tree == 0) - { - at_rn = &arptree_root; - } - else - { - at_rn = &ipntomtree_root; - } - for (level = 0; level < 5; level++) - { - at_node = NULL; - snmp_mib_node_insert(at_rn, arpidx[level], &at_node); - if ((level != 4) && (at_node != NULL)) - { - if (at_node->nptr == NULL) - { - at_rn = snmp_mib_lrn_alloc(); - at_node->nptr = (struct mib_node*)at_rn; - if (at_rn != NULL) - { - if (level == 3) - { - if (tree == 0) - { - at_rn->get_object_def = atentry_get_object_def; - at_rn->get_value = atentry_get_value; - } - else - { - at_rn->get_object_def = ip_ntomentry_get_object_def; - at_rn->get_value = ip_ntomentry_get_value; - } - at_rn->set_test = noleafs_set_test; - at_rn->set_value = noleafs_set_value; - } - } - else - { - /* at_rn == NULL, malloc failure */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_arpidx_tree() insert failed, mem full")); - break; - } - } - else - { - at_rn = (struct mib_list_rootnode*)at_node->nptr; - } - } - } - } - /* enable getnext traversal on filled tables */ - at.maxlength = 1; - ipntomtable.maxlength = 1; -} - -/** - * Removes ARP table indexes (.xIfIndex.xNetAddress) - * from arp table index trees. - */ -void snmp_delete_arpidx_tree(struct netif *ni, ip_addr_t *ip) -{ - struct mib_list_rootnode *at_rn, *next, *del_rn[5]; - struct mib_list_node *at_n, *del_n[5]; - int32_t arpidx[5]; - uint8_t fc, tree, level, del_cnt; - - snmp_netiftoifindex(ni, &arpidx[0]); - snmp_iptooid(ip, &arpidx[1]); - - for (tree = 0; tree < 2; tree++) - { - /* mark nodes for deletion */ - if (tree == 0) - { - at_rn = &arptree_root; - } - else - { - at_rn = &ipntomtree_root; - } - level = 0; - del_cnt = 0; - while ((level < 5) && (at_rn != NULL)) - { - fc = snmp_mib_node_find(at_rn, arpidx[level], &at_n); - if (fc == 0) - { - /* arpidx[level] does not exist */ - del_cnt = 0; - at_rn = NULL; - } - else if (fc == 1) - { - del_rn[del_cnt] = at_rn; - del_n[del_cnt] = at_n; - del_cnt++; - at_rn = (struct mib_list_rootnode*)(at_n->nptr); - } - else if (fc == 2) - { - /* reset delete (2 or more childs) */ - del_cnt = 0; - at_rn = (struct mib_list_rootnode*)(at_n->nptr); - } - level++; - } - /* delete marked index nodes */ - while (del_cnt > 0) - { - del_cnt--; - - at_rn = del_rn[del_cnt]; - at_n = del_n[del_cnt]; - - next = snmp_mib_node_delete(at_rn, at_n); - if (next != NULL) - { - LWIP_ASSERT("next_count == 0",next->count == 0); - snmp_mib_lrn_free(next); - } - } - } - /* disable getnext traversal on empty tables */ - if(arptree_root.count == 0) at.maxlength = 0; - if(ipntomtree_root.count == 0) ipntomtable.maxlength = 0; -} - -void snmp_inc_ipinreceives(void) -{ - ipinreceives++; -} - -void snmp_inc_ipinhdrerrors(void) -{ - ipinhdrerrors++; -} - -void snmp_inc_ipinaddrerrors(void) -{ - ipinaddrerrors++; -} - -void snmp_inc_ipforwdatagrams(void) -{ - ipforwdatagrams++; -} - -void snmp_inc_ipinunknownprotos(void) -{ - ipinunknownprotos++; -} - -void snmp_inc_ipindiscards(void) -{ - ipindiscards++; -} - -void snmp_inc_ipindelivers(void) -{ - ipindelivers++; -} - -void snmp_inc_ipoutrequests(void) -{ - ipoutrequests++; -} - -void snmp_inc_ipoutdiscards(void) -{ - ipoutdiscards++; -} - -void snmp_inc_ipoutnoroutes(void) -{ - ipoutnoroutes++; -} - -void snmp_inc_ipreasmreqds(void) -{ - ipreasmreqds++; -} - -void snmp_inc_ipreasmoks(void) -{ - ipreasmoks++; -} - -void snmp_inc_ipreasmfails(void) -{ - ipreasmfails++; -} - -void snmp_inc_ipfragoks(void) -{ - ipfragoks++; -} - -void snmp_inc_ipfragfails(void) -{ - ipfragfails++; -} - -void snmp_inc_ipfragcreates(void) -{ - ipfragcreates++; -} - -void snmp_inc_iproutingdiscards(void) -{ - iproutingdiscards++; -} - -/** - * Inserts ipAddrTable indexes (.ipAdEntAddr) - * into index tree. - */ -void snmp_insert_ipaddridx_tree(struct netif *ni) -{ - struct mib_list_rootnode *ipa_rn; - struct mib_list_node *ipa_node; - int32_t ipaddridx[4]; - uint8_t level; - - LWIP_ASSERT("ni != NULL", ni != NULL); - snmp_iptooid(&ni->ip_addr, &ipaddridx[0]); - - level = 0; - ipa_rn = &ipaddrtree_root; - while (level < 4) - { - ipa_node = NULL; - snmp_mib_node_insert(ipa_rn, ipaddridx[level], &ipa_node); - if ((level != 3) && (ipa_node != NULL)) - { - if (ipa_node->nptr == NULL) - { - ipa_rn = snmp_mib_lrn_alloc(); - ipa_node->nptr = (struct mib_node*)ipa_rn; - if (ipa_rn != NULL) - { - if (level == 2) - { - ipa_rn->get_object_def = ip_addrentry_get_object_def; - ipa_rn->get_value = ip_addrentry_get_value; - ipa_rn->set_test = noleafs_set_test; - ipa_rn->set_value = noleafs_set_value; - } - } - else - { - /* ipa_rn == NULL, malloc failure */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_ipaddridx_tree() insert failed, mem full")); - break; - } - } - else - { - ipa_rn = (struct mib_list_rootnode*)ipa_node->nptr; - } - } - level++; - } - /* enable getnext traversal on filled table */ - ipaddrtable.maxlength = 1; -} - -/** - * Removes ipAddrTable indexes (.ipAdEntAddr) - * from index tree. - */ -void snmp_delete_ipaddridx_tree(struct netif *ni) -{ - struct mib_list_rootnode *ipa_rn, *next, *del_rn[4]; - struct mib_list_node *ipa_n, *del_n[4]; - int32_t ipaddridx[4]; - uint8_t fc, level, del_cnt; - - LWIP_ASSERT("ni != NULL", ni != NULL); - snmp_iptooid(&ni->ip_addr, &ipaddridx[0]); - - /* mark nodes for deletion */ - level = 0; - del_cnt = 0; - ipa_rn = &ipaddrtree_root; - while ((level < 4) && (ipa_rn != NULL)) - { - fc = snmp_mib_node_find(ipa_rn, ipaddridx[level], &ipa_n); - if (fc == 0) - { - /* ipaddridx[level] does not exist */ - del_cnt = 0; - ipa_rn = NULL; - } - else if (fc == 1) - { - del_rn[del_cnt] = ipa_rn; - del_n[del_cnt] = ipa_n; - del_cnt++; - ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr); - } - else if (fc == 2) - { - /* reset delete (2 or more childs) */ - del_cnt = 0; - ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr); - } - level++; - } - /* delete marked index nodes */ - while (del_cnt > 0) - { - del_cnt--; - - ipa_rn = del_rn[del_cnt]; - ipa_n = del_n[del_cnt]; - - next = snmp_mib_node_delete(ipa_rn, ipa_n); - if (next != NULL) - { - LWIP_ASSERT("next_count == 0",next->count == 0); - snmp_mib_lrn_free(next); - } - } - /* disable getnext traversal on empty table */ - if (ipaddrtree_root.count == 0) ipaddrtable.maxlength = 0; -} - -/** - * Inserts ipRouteTable indexes (.ipRouteDest) - * into index tree. - * - * @param dflt non-zero for the default rte, zero for network rte - * @param ni points to network interface for this rte - * - * @todo record sysuptime for _this_ route when it is installed - * (needed for ipRouteAge) in the netif. - */ -void snmp_insert_iprteidx_tree(uint8_t dflt, struct netif *ni) -{ - uint8_t insert = 0; - ip_addr_t dst; - - if (dflt != 0) - { - /* the default route 0.0.0.0 */ - ip_addr_set_any(&dst); - insert = 1; - } - else - { - /* route to the network address */ - ip_addr_get_network(&dst, &ni->ip_addr, &ni->netmask); - /* exclude 0.0.0.0 network (reserved for default rte) */ - if (!ip_addr_isany(&dst)) { - insert = 1; - } - } - if (insert) - { - struct mib_list_rootnode *iprte_rn; - struct mib_list_node *iprte_node; - int32_t iprteidx[4]; - uint8_t level; - - snmp_iptooid(&dst, &iprteidx[0]); - level = 0; - iprte_rn = &iprtetree_root; - while (level < 4) - { - iprte_node = NULL; - snmp_mib_node_insert(iprte_rn, iprteidx[level], &iprte_node); - if ((level != 3) && (iprte_node != NULL)) - { - if (iprte_node->nptr == NULL) - { - iprte_rn = snmp_mib_lrn_alloc(); - iprte_node->nptr = (struct mib_node*)iprte_rn; - if (iprte_rn != NULL) - { - if (level == 2) - { - iprte_rn->get_object_def = ip_rteentry_get_object_def; - iprte_rn->get_value = ip_rteentry_get_value; - iprte_rn->set_test = noleafs_set_test; - iprte_rn->set_value = noleafs_set_value; - } - } - else - { - /* iprte_rn == NULL, malloc failure */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_iprteidx_tree() insert failed, mem full")); - break; - } - } - else - { - iprte_rn = (struct mib_list_rootnode*)iprte_node->nptr; - } - } - level++; - } - } - /* enable getnext traversal on filled table */ - iprtetable.maxlength = 1; -} - -/** - * Removes ipRouteTable indexes (.ipRouteDest) - * from index tree. - * - * @param dflt non-zero for the default rte, zero for network rte - * @param ni points to network interface for this rte or NULL - * for default route to be removed. - */ -void snmp_delete_iprteidx_tree(uint8_t dflt, struct netif *ni) -{ - uint8_t del = 0; - ip_addr_t dst; - - if (dflt != 0) - { - /* the default route 0.0.0.0 */ - ip_addr_set_any(&dst); - del = 1; - } - else - { - /* route to the network address */ - ip_addr_get_network(&dst, &ni->ip_addr, &ni->netmask); - /* exclude 0.0.0.0 network (reserved for default rte) */ - if (!ip_addr_isany(&dst)) { - del = 1; - } - } - if (del) - { - struct mib_list_rootnode *iprte_rn, *next, *del_rn[4]; - struct mib_list_node *iprte_n, *del_n[4]; - int32_t iprteidx[4]; - uint8_t fc, level, del_cnt; - - snmp_iptooid(&dst, &iprteidx[0]); - /* mark nodes for deletion */ - level = 0; - del_cnt = 0; - iprte_rn = &iprtetree_root; - while ((level < 4) && (iprte_rn != NULL)) - { - fc = snmp_mib_node_find(iprte_rn, iprteidx[level], &iprte_n); - if (fc == 0) - { - /* iprteidx[level] does not exist */ - del_cnt = 0; - iprte_rn = NULL; - } - else if (fc == 1) - { - del_rn[del_cnt] = iprte_rn; - del_n[del_cnt] = iprte_n; - del_cnt++; - iprte_rn = (struct mib_list_rootnode*)(iprte_n->nptr); - } - else if (fc == 2) - { - /* reset delete (2 or more childs) */ - del_cnt = 0; - iprte_rn = (struct mib_list_rootnode*)(iprte_n->nptr); - } - level++; - } - /* delete marked index nodes */ - while (del_cnt > 0) - { - del_cnt--; - - iprte_rn = del_rn[del_cnt]; - iprte_n = del_n[del_cnt]; - - next = snmp_mib_node_delete(iprte_rn, iprte_n); - if (next != NULL) - { - LWIP_ASSERT("next_count == 0",next->count == 0); - snmp_mib_lrn_free(next); - } - } - } - /* disable getnext traversal on empty table */ - if (iprtetree_root.count == 0) iprtetable.maxlength = 0; -} - - -void snmp_inc_icmpinmsgs(void) -{ - icmpinmsgs++; -} - -void snmp_inc_icmpinerrors(void) -{ - icmpinerrors++; -} - -void snmp_inc_icmpindestunreachs(void) -{ - icmpindestunreachs++; -} - -void snmp_inc_icmpintimeexcds(void) -{ - icmpintimeexcds++; -} - -void snmp_inc_icmpinparmprobs(void) -{ - icmpinparmprobs++; -} - -void snmp_inc_icmpinsrcquenchs(void) -{ - icmpinsrcquenchs++; -} - -void snmp_inc_icmpinredirects(void) -{ - icmpinredirects++; -} - -void snmp_inc_icmpinechos(void) -{ - icmpinechos++; -} - -void snmp_inc_icmpinechoreps(void) -{ - icmpinechoreps++; -} - -void snmp_inc_icmpintimestamps(void) -{ - icmpintimestamps++; -} - -void snmp_inc_icmpintimestampreps(void) -{ - icmpintimestampreps++; -} - -void snmp_inc_icmpinaddrmasks(void) -{ - icmpinaddrmasks++; -} - -void snmp_inc_icmpinaddrmaskreps(void) -{ - icmpinaddrmaskreps++; -} - -void snmp_inc_icmpoutmsgs(void) -{ - icmpoutmsgs++; -} - -void snmp_inc_icmpouterrors(void) -{ - icmpouterrors++; -} - -void snmp_inc_icmpoutdestunreachs(void) -{ - icmpoutdestunreachs++; -} - -void snmp_inc_icmpouttimeexcds(void) -{ - icmpouttimeexcds++; -} - -void snmp_inc_icmpoutparmprobs(void) -{ - icmpoutparmprobs++; -} - -void snmp_inc_icmpoutsrcquenchs(void) -{ - icmpoutsrcquenchs++; -} - -void snmp_inc_icmpoutredirects(void) -{ - icmpoutredirects++; -} - -void snmp_inc_icmpoutechos(void) -{ - icmpoutechos++; -} - -void snmp_inc_icmpoutechoreps(void) -{ - icmpoutechoreps++; -} - -void snmp_inc_icmpouttimestamps(void) -{ - icmpouttimestamps++; -} - -void snmp_inc_icmpouttimestampreps(void) -{ - icmpouttimestampreps++; -} - -void snmp_inc_icmpoutaddrmasks(void) -{ - icmpoutaddrmasks++; -} - -void snmp_inc_icmpoutaddrmaskreps(void) -{ - icmpoutaddrmaskreps++; -} - -void snmp_inc_tcpactiveopens(void) -{ - tcpactiveopens++; -} - -void snmp_inc_tcppassiveopens(void) -{ - tcppassiveopens++; -} - -void snmp_inc_tcpattemptfails(void) -{ - tcpattemptfails++; -} - -void snmp_inc_tcpestabresets(void) -{ - tcpestabresets++; -} - -void snmp_inc_tcpinsegs(void) -{ - tcpinsegs++; -} - -void snmp_inc_tcpoutsegs(void) -{ - tcpoutsegs++; -} - -void snmp_inc_tcpretranssegs(void) -{ - tcpretranssegs++; -} - -void snmp_inc_tcpinerrs(void) -{ - tcpinerrs++; -} - -void snmp_inc_tcpoutrsts(void) -{ - tcpoutrsts++; -} - -void snmp_inc_udpindatagrams(void) -{ - udpindatagrams++; -} - -void snmp_inc_udpnoports(void) -{ - udpnoports++; -} - -void snmp_inc_udpinerrors(void) -{ - udpinerrors++; -} - -void snmp_inc_udpoutdatagrams(void) -{ - udpoutdatagrams++; -} - -/** - * Inserts udpTable indexes (.udpLocalAddress.udpLocalPort) - * into index tree. - */ -void snmp_insert_udpidx_tree(struct udp_pcb *pcb) -{ - struct mib_list_rootnode *udp_rn; - struct mib_list_node *udp_node; - int32_t udpidx[5]; - uint8_t level; - - LWIP_ASSERT("pcb != NULL", pcb != NULL); - snmp_iptooid(&pcb->local_ip, &udpidx[0]); - udpidx[4] = pcb->local_port; - - udp_rn = &udp_root; - for (level = 0; level < 5; level++) - { - udp_node = NULL; - snmp_mib_node_insert(udp_rn, udpidx[level], &udp_node); - if ((level != 4) && (udp_node != NULL)) - { - if (udp_node->nptr == NULL) - { - udp_rn = snmp_mib_lrn_alloc(); - udp_node->nptr = (struct mib_node*)udp_rn; - if (udp_rn != NULL) - { - if (level == 3) - { - udp_rn->get_object_def = udpentry_get_object_def; - udp_rn->get_value = udpentry_get_value; - udp_rn->set_test = noleafs_set_test; - udp_rn->set_value = noleafs_set_value; - } - } - else - { - /* udp_rn == NULL, malloc failure */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_udpidx_tree() insert failed, mem full")); - break; - } - } - else - { - udp_rn = (struct mib_list_rootnode*)udp_node->nptr; - } - } - } - udptable.maxlength = 1; -} - -/** - * Removes udpTable indexes (.udpLocalAddress.udpLocalPort) - * from index tree. - */ -void snmp_delete_udpidx_tree(struct udp_pcb *pcb) -{ - struct udp_pcb *npcb; - struct mib_list_rootnode *udp_rn, *next, *del_rn[5]; - struct mib_list_node *udp_n, *del_n[5]; - int32_t udpidx[5]; - uint8_t bindings, fc, level, del_cnt; - - LWIP_ASSERT("pcb != NULL", pcb != NULL); - snmp_iptooid(&pcb->local_ip, &udpidx[0]); - udpidx[4] = pcb->local_port; - - /* count PCBs for a given binding - (e.g. when reusing ports or for temp output PCBs) */ - bindings = 0; - npcb = udp_pcbs; - while ((npcb != NULL)) - { - if (ip_addr_cmp(&npcb->local_ip, &pcb->local_ip) && - (npcb->local_port == udpidx[4])) - { - bindings++; - } - npcb = npcb->next; - } - if (bindings == 1) - { - /* selectively remove */ - /* mark nodes for deletion */ - level = 0; - del_cnt = 0; - udp_rn = &udp_root; - while ((level < 5) && (udp_rn != NULL)) - { - fc = snmp_mib_node_find(udp_rn, udpidx[level], &udp_n); - if (fc == 0) - { - /* udpidx[level] does not exist */ - del_cnt = 0; - udp_rn = NULL; - } - else if (fc == 1) - { - del_rn[del_cnt] = udp_rn; - del_n[del_cnt] = udp_n; - del_cnt++; - udp_rn = (struct mib_list_rootnode*)(udp_n->nptr); - } - else if (fc == 2) - { - /* reset delete (2 or more childs) */ - del_cnt = 0; - udp_rn = (struct mib_list_rootnode*)(udp_n->nptr); - } - level++; - } - /* delete marked index nodes */ - while (del_cnt > 0) - { - del_cnt--; - - udp_rn = del_rn[del_cnt]; - udp_n = del_n[del_cnt]; - - next = snmp_mib_node_delete(udp_rn, udp_n); - if (next != NULL) - { - LWIP_ASSERT("next_count == 0",next->count == 0); - snmp_mib_lrn_free(next); - } - } - } - /* disable getnext traversal on empty table */ - if (udp_root.count == 0) udptable.maxlength = 0; -} - - -void snmp_inc_snmpinpkts(void) -{ - snmpinpkts++; -} - -void snmp_inc_snmpoutpkts(void) -{ - snmpoutpkts++; -} - -void snmp_inc_snmpinbadversions(void) -{ - snmpinbadversions++; -} - -void snmp_inc_snmpinbadcommunitynames(void) -{ - snmpinbadcommunitynames++; -} - -void snmp_inc_snmpinbadcommunityuses(void) -{ - snmpinbadcommunityuses++; -} - -void snmp_inc_snmpinasnparseerrs(void) -{ - snmpinasnparseerrs++; -} - -void snmp_inc_snmpintoobigs(void) -{ - snmpintoobigs++; -} - -void snmp_inc_snmpinnosuchnames(void) -{ - snmpinnosuchnames++; -} - -void snmp_inc_snmpinbadvalues(void) -{ - snmpinbadvalues++; -} - -void snmp_inc_snmpinreadonlys(void) -{ - snmpinreadonlys++; -} - -void snmp_inc_snmpingenerrs(void) -{ - snmpingenerrs++; -} - -void snmp_add_snmpintotalreqvars(uint8_t value) -{ - snmpintotalreqvars += value; -} - -void snmp_add_snmpintotalsetvars(uint8_t value) -{ - snmpintotalsetvars += value; -} - -void snmp_inc_snmpingetrequests(void) -{ - snmpingetrequests++; -} - -void snmp_inc_snmpingetnexts(void) -{ - snmpingetnexts++; -} - -void snmp_inc_snmpinsetrequests(void) -{ - snmpinsetrequests++; -} - -void snmp_inc_snmpingetresponses(void) -{ - snmpingetresponses++; -} - -void snmp_inc_snmpintraps(void) -{ - snmpintraps++; -} - -void snmp_inc_snmpouttoobigs(void) -{ - snmpouttoobigs++; -} - -void snmp_inc_snmpoutnosuchnames(void) -{ - snmpoutnosuchnames++; -} - -void snmp_inc_snmpoutbadvalues(void) -{ - snmpoutbadvalues++; -} - -void snmp_inc_snmpoutgenerrs(void) -{ - snmpoutgenerrs++; -} - -void snmp_inc_snmpoutgetrequests(void) -{ - snmpoutgetrequests++; -} - -void snmp_inc_snmpoutgetnexts(void) -{ - snmpoutgetnexts++; -} - -void snmp_inc_snmpoutsetrequests(void) -{ - snmpoutsetrequests++; -} - -void snmp_inc_snmpoutgetresponses(void) -{ - snmpoutgetresponses++; -} - -void snmp_inc_snmpouttraps(void) -{ - snmpouttraps++; -} - -void snmp_get_snmpgrpid_ptr(struct snmp_obj_id **oid) -{ - *oid = &snmpgrp_id; -} - -void snmp_set_snmpenableauthentraps(uint8_t *value) -{ - if (value != NULL) - { - snmpenableauthentraps_ptr = value; - } -} - -void snmp_get_snmpenableauthentraps(uint8_t *value) -{ - *value = *snmpenableauthentraps_ptr; -} - -void -noleafs_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - LWIP_UNUSED_ARG(ident_len); - LWIP_UNUSED_ARG(ident); - od->instance = MIB_OBJECT_NONE; -} - -void -noleafs_get_value(struct obj_def *od, uint16_t len, void *value) -{ - LWIP_UNUSED_ARG(od); - LWIP_UNUSED_ARG(len); - LWIP_UNUSED_ARG(value); -} - -uint8_t -noleafs_set_test(struct obj_def *od, uint16_t len, void *value) -{ - LWIP_UNUSED_ARG(od); - LWIP_UNUSED_ARG(len); - LWIP_UNUSED_ARG(value); - /* can't set */ - return 0; -} - -void -noleafs_set_value(struct obj_def *od, uint16_t len, void *value) -{ - LWIP_UNUSED_ARG(od); - LWIP_UNUSED_ARG(len); - LWIP_UNUSED_ARG(value); -} - - -/** - * Returns systems object definitions. - * - * @param ident_len the address length (2) - * @param ident points to objectname.0 (object id trailer) - * @param od points to object definition. - */ -static void -system_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - uint8_t id; - - /* return to object name, adding index depth (1) */ - ident_len += 1; - ident -= 1; - if (ident_len == 2) - { - od->id_inst_len = ident_len; - od->id_inst_ptr = ident; - - LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff)); - id = (uint8_t)ident[0]; - LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def system.%"U16_F".0\n",(uint16_t)id)); - switch (id) - { - case 1: /* sysDescr */ - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR); - od->v_len = *sysdescr_len_ptr; - break; - case 2: /* sysObjectID */ - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID); - od->v_len = sysobjid.len * sizeof(int32_t); - break; - case 3: /* sysUpTime */ - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS); - od->v_len = sizeof(uint32_t); - break; - case 4: /* sysContact */ - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR); - od->v_len = *syscontact_len_ptr; - break; - case 5: /* sysName */ - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR); - od->v_len = *sysname_len_ptr; - break; - case 6: /* sysLocation */ - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR); - od->v_len = *syslocation_len_ptr; - break; - case 7: /* sysServices */ - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - default: - LWIP_DEBUGF(SNMP_MIB_DEBUG,("system_get_object_def: no such object\n")); - od->instance = MIB_OBJECT_NONE; - break; - }; - } - else - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("system_get_object_def: no scalar\n")); - od->instance = MIB_OBJECT_NONE; - } -} - -/** - * Returns system object value. - * - * @param ident_len the address length (2) - * @param ident points to objectname.0 (object id trailer) - * @param len return value space (in bytes) - * @param value points to (varbind) space to copy value into. - */ -static void -system_get_value(struct obj_def *od, uint16_t len, void *value) -{ - uint8_t id; - - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 1: /* sysDescr */ - ocstrncpy((uint8_t*)value, sysdescr_ptr, len); - break; - case 2: /* sysObjectID */ - objectidncpy((int32_t*)value, (int32_t*)sysobjid.id, (uint8_t)(len / sizeof(int32_t))); - break; - case 3: /* sysUpTime */ - { - snmp_get_sysuptime((uint32_t*)value); - } - break; - case 4: /* sysContact */ - ocstrncpy((uint8_t*)value, syscontact_ptr, len); - break; - case 5: /* sysName */ - ocstrncpy((uint8_t*)value, sysname_ptr, len); - break; - case 6: /* sysLocation */ - ocstrncpy((uint8_t*)value, syslocation_ptr, len); - break; - case 7: /* sysServices */ - { - int32_t *sint_ptr = (int32_t*)value; - *sint_ptr = sysservices; - } - break; - }; -} - -static uint8_t -system_set_test(struct obj_def *od, uint16_t len, void *value) -{ - uint8_t id, set_ok; - - LWIP_UNUSED_ARG(value); - set_ok = 0; - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 4: /* sysContact */ - if ((syscontact_ptr != syscontact_default) && - (len <= 255)) - { - set_ok = 1; - } - break; - case 5: /* sysName */ - if ((sysname_ptr != sysname_default) && - (len <= 255)) - { - set_ok = 1; - } - break; - case 6: /* sysLocation */ - if ((syslocation_ptr != syslocation_default) && - (len <= 255)) - { - set_ok = 1; - } - break; - }; - return set_ok; -} - -static void -system_set_value(struct obj_def *od, uint16_t len, void *value) -{ - uint8_t id; - - LWIP_ASSERT("invalid len", len <= 0xff); - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 4: /* sysContact */ - ocstrncpy(syscontact_ptr, (uint8_t*)value, len); - *syscontact_len_ptr = (uint8_t)len; - break; - case 5: /* sysName */ - ocstrncpy(sysname_ptr, (uint8_t*)value, len); - *sysname_len_ptr = (uint8_t)len; - break; - case 6: /* sysLocation */ - ocstrncpy(syslocation_ptr, (uint8_t*)value, len); - *syslocation_len_ptr = (uint8_t)len; - break; - }; -} - -/** - * Returns interfaces.ifnumber object definition. - * - * @param ident_len the address length (2) - * @param ident points to objectname.index - * @param od points to object definition. - */ -static void -interfaces_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - /* return to object name, adding index depth (1) */ - ident_len += 1; - ident -= 1; - if (ident_len == 2) - { - od->id_inst_len = ident_len; - od->id_inst_ptr = ident; - - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - } - else - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("interfaces_get_object_def: no scalar\n")); - od->instance = MIB_OBJECT_NONE; - } -} - -/** - * Returns interfaces.ifnumber object value. - * - * @param ident_len the address length (2) - * @param ident points to objectname.0 (object id trailer) - * @param len return value space (in bytes) - * @param value points to (varbind) space to copy value into. - */ -static void -interfaces_get_value(struct obj_def *od, uint16_t len, void *value) -{ - LWIP_UNUSED_ARG(len); - if (od->id_inst_ptr[0] == 1) - { - int32_t *sint_ptr = (int32_t*)value; - *sint_ptr = iflist_root.count; - } -} - -/** - * Returns ifentry object definitions. - * - * @param ident_len the address length (2) - * @param ident points to objectname.index - * @param od points to object definition. - */ -static void -ifentry_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - uint8_t id; - - /* return to object name, adding index depth (1) */ - ident_len += 1; - ident -= 1; - if (ident_len == 2) - { - od->id_inst_len = ident_len; - od->id_inst_ptr = ident; - - LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff)); - id = (uint8_t)ident[0]; - LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def ifentry.%"U16_F"\n",(uint16_t)id)); - switch (id) - { - case 1: /* ifIndex */ - case 3: /* ifType */ - case 4: /* ifMtu */ - case 8: /* ifOperStatus */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - case 2: /* ifDescr */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR); - /** @todo this should be some sort of sizeof(struct netif.name) */ - od->v_len = 2; - break; - case 5: /* ifSpeed */ - case 21: /* ifOutQLen */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE); - od->v_len = sizeof(uint32_t); - break; - case 6: /* ifPhysAddress */ - { - struct netif *netif; - - snmp_ifindextonetif(ident[1], &netif); - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR); - od->v_len = netif->hwaddr_len; - } - break; - case 7: /* ifAdminStatus */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - case 9: /* ifLastChange */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS); - od->v_len = sizeof(uint32_t); - break; - case 10: /* ifInOctets */ - case 11: /* ifInUcastPkts */ - case 12: /* ifInNUcastPkts */ - case 13: /* ifInDiscarts */ - case 14: /* ifInErrors */ - case 15: /* ifInUnkownProtos */ - case 16: /* ifOutOctets */ - case 17: /* ifOutUcastPkts */ - case 18: /* ifOutNUcastPkts */ - case 19: /* ifOutDiscarts */ - case 20: /* ifOutErrors */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER); - od->v_len = sizeof(uint32_t); - break; - case 22: /* ifSpecific */ - /** @note returning zeroDotZero (0.0) no media specific MIB support */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID); - od->v_len = ifspecific.len * sizeof(int32_t); - break; - default: - LWIP_DEBUGF(SNMP_MIB_DEBUG,("ifentry_get_object_def: no such object\n")); - od->instance = MIB_OBJECT_NONE; - break; - }; - } - else - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("ifentry_get_object_def: no scalar\n")); - od->instance = MIB_OBJECT_NONE; - } -} - -/** - * Returns ifentry object value. - * - * @param ident_len the address length (2) - * @param ident points to objectname.0 (object id trailer) - * @param len return value space (in bytes) - * @param value points to (varbind) space to copy value into. - */ -static void -ifentry_get_value(struct obj_def *od, uint16_t len, void *value) -{ - struct netif *netif; - uint8_t id; - - snmp_ifindextonetif(od->id_inst_ptr[1], &netif); - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 1: /* ifIndex */ - { - int32_t *sint_ptr = (int32_t*)value; - *sint_ptr = od->id_inst_ptr[1]; - } - break; - case 2: /* ifDescr */ - ocstrncpy((uint8_t*)value, (uint8_t*)netif->name, len); - break; - case 3: /* ifType */ - { - int32_t *sint_ptr = (int32_t*)value; - *sint_ptr = netif->link_type; - } - break; - case 4: /* ifMtu */ - { - int32_t *sint_ptr = (int32_t*)value; - *sint_ptr = netif->mtu; - } - break; - case 5: /* ifSpeed */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = netif->link_speed; - } - break; - case 6: /* ifPhysAddress */ - ocstrncpy((uint8_t*)value, netif->hwaddr, len); - break; - case 7: /* ifAdminStatus */ - { - int32_t *sint_ptr = (int32_t*)value; - if (netif_is_up(netif)) - { - if (netif_is_link_up(netif)) - { - *sint_ptr = 1; /* up */ - } - else - { - *sint_ptr = 7; /* lowerLayerDown */ - } - } - else - { - *sint_ptr = 2; /* down */ - } - } - break; - case 8: /* ifOperStatus */ - { - int32_t *sint_ptr = (int32_t*)value; - if (netif_is_up(netif)) - { - *sint_ptr = 1; - } - else - { - *sint_ptr = 2; - } - } - break; - case 9: /* ifLastChange */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = netif->ts; - } - break; - case 10: /* ifInOctets */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = netif->ifinoctets; - } - break; - case 11: /* ifInUcastPkts */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = netif->ifinucastpkts; - } - break; - case 12: /* ifInNUcastPkts */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = netif->ifinnucastpkts; - } - break; - case 13: /* ifInDiscarts */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = netif->ifindiscards; - } - break; - case 14: /* ifInErrors */ - case 15: /* ifInUnkownProtos */ - /** @todo add these counters! */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = 0; - } - break; - case 16: /* ifOutOctets */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = netif->ifoutoctets; - } - break; - case 17: /* ifOutUcastPkts */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = netif->ifoutucastpkts; - } - break; - case 18: /* ifOutNUcastPkts */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = netif->ifoutnucastpkts; - } - break; - case 19: /* ifOutDiscarts */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = netif->ifoutdiscards; - } - break; - case 20: /* ifOutErrors */ - /** @todo add this counter! */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = 0; - } - break; - case 21: /* ifOutQLen */ - /** @todo figure out if this must be 0 (no queue) or 1? */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = 0; - } - break; - case 22: /* ifSpecific */ - objectidncpy((int32_t*)value, (int32_t*)ifspecific.id, (uint8_t)(len / sizeof(int32_t))); - break; - }; -} - -#if !SNMP_SAFE_REQUESTS -static uint8_t -ifentry_set_test(struct obj_def *od, uint16_t len, void *value) -{ - struct netif *netif; - uint8_t id, set_ok; - LWIP_UNUSED_ARG(len); - - set_ok = 0; - snmp_ifindextonetif(od->id_inst_ptr[1], &netif); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 7: /* ifAdminStatus */ - { - int32_t *sint_ptr = (int32_t*)value; - if (*sint_ptr == 1 || *sint_ptr == 2) - set_ok = 1; - } - break; - } - return set_ok; -} - -static void -ifentry_set_value(struct obj_def *od, uint16_t len, void *value) -{ - struct netif *netif; - uint8_t id; - LWIP_UNUSED_ARG(len); - - snmp_ifindextonetif(od->id_inst_ptr[1], &netif); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 7: /* ifAdminStatus */ - { - int32_t *sint_ptr = (int32_t*)value; - if (*sint_ptr == 1) - { - netif_set_up(netif); - } - else if (*sint_ptr == 2) - { - netif_set_down(netif); - } - } - break; - } -} -#endif /* SNMP_SAFE_REQUESTS */ - -/** - * Returns atentry object definitions. - * - * @param ident_len the address length (6) - * @param ident points to objectname.atifindex.atnetaddress - * @param od points to object definition. - */ -static void -atentry_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - /* return to object name, adding index depth (5) */ - ident_len += 5; - ident -= 5; - - if (ident_len == 6) - { - od->id_inst_len = ident_len; - od->id_inst_ptr = ident; - - switch (ident[0]) - { - case 1: /* atIfIndex */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - case 2: /* atPhysAddress */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR); - od->v_len = 6; /** @todo try to use netif::hwaddr_len */ - break; - case 3: /* atNetAddress */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR); - od->v_len = 4; - break; - default: - LWIP_DEBUGF(SNMP_MIB_DEBUG,("atentry_get_object_def: no such object\n")); - od->instance = MIB_OBJECT_NONE; - break; - } - } - else - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("atentry_get_object_def: no scalar\n")); - od->instance = MIB_OBJECT_NONE; - } -} - -static void -atentry_get_value(struct obj_def *od, uint16_t len, void *value) -{ -#if LWIP_ARP - uint8_t id; - struct eth_addr* ethaddr_ret; - ip_addr_t* ipaddr_ret; -#endif /* LWIP_ARP */ - ip_addr_t ip; - struct netif *netif; - - LWIP_UNUSED_ARG(len); - LWIP_UNUSED_ARG(value);/* if !LWIP_ARP */ - - snmp_ifindextonetif(od->id_inst_ptr[1], &netif); - snmp_oidtoip(&od->id_inst_ptr[2], &ip); - -#if LWIP_ARP /** @todo implement a netif_find_addr */ - if (etharp_find_addr(netif, &ip, ðaddr_ret, &ipaddr_ret) > -1) - { - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 1: /* atIfIndex */ - { - int32_t *sint_ptr = (int32_t*)value; - *sint_ptr = od->id_inst_ptr[1]; - } - break; - case 2: /* atPhysAddress */ - { - struct eth_addr *dst = (struct eth_addr*)value; - - *dst = *ethaddr_ret; - } - break; - case 3: /* atNetAddress */ - { - ip_addr_t *dst = (ip_addr_t*)value; - - *dst = *ipaddr_ret; - } - break; - } - } -#endif /* LWIP_ARP */ -} - -static void -ip_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - uint8_t id; - - /* return to object name, adding index depth (1) */ - ident_len += 1; - ident -= 1; - if (ident_len == 2) - { - od->id_inst_len = ident_len; - od->id_inst_ptr = ident; - - LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff)); - id = (uint8_t)ident[0]; - LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def ip.%"U16_F".0\n",(uint16_t)id)); - switch (id) - { - case 1: /* ipForwarding */ - case 2: /* ipDefaultTTL */ - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - case 3: /* ipInReceives */ - case 4: /* ipInHdrErrors */ - case 5: /* ipInAddrErrors */ - case 6: /* ipForwDatagrams */ - case 7: /* ipInUnknownProtos */ - case 8: /* ipInDiscards */ - case 9: /* ipInDelivers */ - case 10: /* ipOutRequests */ - case 11: /* ipOutDiscards */ - case 12: /* ipOutNoRoutes */ - case 14: /* ipReasmReqds */ - case 15: /* ipReasmOKs */ - case 16: /* ipReasmFails */ - case 17: /* ipFragOKs */ - case 18: /* ipFragFails */ - case 19: /* ipFragCreates */ - case 23: /* ipRoutingDiscards */ - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER); - od->v_len = sizeof(uint32_t); - break; - case 13: /* ipReasmTimeout */ - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - default: - LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_get_object_def: no such object\n")); - od->instance = MIB_OBJECT_NONE; - break; - }; - } - else - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_get_object_def: no scalar\n")); - od->instance = MIB_OBJECT_NONE; - } -} - -static void -ip_get_value(struct obj_def *od, uint16_t len, void *value) -{ - uint8_t id; - - LWIP_UNUSED_ARG(len); - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 1: /* ipForwarding */ - { - int32_t *sint_ptr = (int32_t*)value; -#if IP_FORWARD - /* forwarding */ - *sint_ptr = 1; -#else - /* not-forwarding */ - *sint_ptr = 2; -#endif - } - break; - case 2: /* ipDefaultTTL */ - { - int32_t *sint_ptr = (int32_t*)value; - *sint_ptr = IP_DEFAULT_TTL; - } - break; - case 3: /* ipInReceives */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipinreceives; - } - break; - case 4: /* ipInHdrErrors */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipinhdrerrors; - } - break; - case 5: /* ipInAddrErrors */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipinaddrerrors; - } - break; - case 6: /* ipForwDatagrams */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipforwdatagrams; - } - break; - case 7: /* ipInUnknownProtos */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipinunknownprotos; - } - break; - case 8: /* ipInDiscards */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipindiscards; - } - break; - case 9: /* ipInDelivers */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipindelivers; - } - break; - case 10: /* ipOutRequests */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipoutrequests; - } - break; - case 11: /* ipOutDiscards */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipoutdiscards; - } - break; - case 12: /* ipOutNoRoutes */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipoutnoroutes; - } - break; - case 13: /* ipReasmTimeout */ - { - int32_t *sint_ptr = (int32_t*)value; -#if IP_REASSEMBLY - *sint_ptr = IP_REASS_MAXAGE; -#else - *sint_ptr = 0; -#endif - } - break; - case 14: /* ipReasmReqds */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipreasmreqds; - } - break; - case 15: /* ipReasmOKs */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipreasmoks; - } - break; - case 16: /* ipReasmFails */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipreasmfails; - } - break; - case 17: /* ipFragOKs */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipfragoks; - } - break; - case 18: /* ipFragFails */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipfragfails; - } - break; - case 19: /* ipFragCreates */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = ipfragcreates; - } - break; - case 23: /* ipRoutingDiscards */ - /** @todo can lwIP discard routes at all?? hardwire this to 0?? */ - { - uint32_t *uint_ptr = (uint32_t*)value; - *uint_ptr = iproutingdiscards; - } - break; - }; -} - -/** - * Test ip object value before setting. - * - * @param od is the object definition - * @param len return value space (in bytes) - * @param value points to (varbind) space to copy value from. - * - * @note we allow set if the value matches the hardwired value, - * otherwise return badvalue. - */ -static uint8_t -ip_set_test(struct obj_def *od, uint16_t len, void *value) -{ - uint8_t id, set_ok; - int32_t *sint_ptr = (int32_t*)value; - - LWIP_UNUSED_ARG(len); - set_ok = 0; - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 1: /* ipForwarding */ -#if IP_FORWARD - /* forwarding */ - if (*sint_ptr == 1) -#else - /* not-forwarding */ - if (*sint_ptr == 2) -#endif - { - set_ok = 1; - } - break; - case 2: /* ipDefaultTTL */ - if (*sint_ptr == IP_DEFAULT_TTL) - { - set_ok = 1; - } - break; - }; - return set_ok; -} - -static void -ip_addrentry_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - /* return to object name, adding index depth (4) */ - ident_len += 4; - ident -= 4; - - if (ident_len == 5) - { - uint8_t id; - - od->id_inst_len = ident_len; - od->id_inst_ptr = ident; - - LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff)); - id = (uint8_t)ident[0]; - switch (id) - { - case 1: /* ipAdEntAddr */ - case 3: /* ipAdEntNetMask */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR); - od->v_len = 4; - break; - case 2: /* ipAdEntIfIndex */ - case 4: /* ipAdEntBcastAddr */ - case 5: /* ipAdEntReasmMaxSize */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - default: - LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_addrentry_get_object_def: no such object\n")); - od->instance = MIB_OBJECT_NONE; - break; - } - } - else - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_addrentry_get_object_def: no scalar\n")); - od->instance = MIB_OBJECT_NONE; - } -} - -static void -ip_addrentry_get_value(struct obj_def *od, uint16_t len, void *value) -{ - uint8_t id; - uint16_t ifidx; - ip_addr_t ip; - struct netif *netif = netif_list; - - LWIP_UNUSED_ARG(len); - snmp_oidtoip(&od->id_inst_ptr[1], &ip); - ifidx = 0; - while ((netif != NULL) && !ip_addr_cmp(&ip, &netif->ip_addr)) - { - netif = netif->next; - ifidx++; - } - - if (netif != NULL) - { - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 1: /* ipAdEntAddr */ - { - ip_addr_t *dst = (ip_addr_t*)value; - *dst = netif->ip_addr; - } - break; - case 2: /* ipAdEntIfIndex */ - { - int32_t *sint_ptr = (int32_t*)value; - *sint_ptr = ifidx + 1; - } - break; - case 3: /* ipAdEntNetMask */ - { - ip_addr_t *dst = (ip_addr_t*)value; - *dst = netif->netmask; - } - break; - case 4: /* ipAdEntBcastAddr */ - { - int32_t *sint_ptr = (int32_t*)value; - - /* lwIP oddity, there's no broadcast - address in the netif we can rely on */ - *sint_ptr = IPADDR_BROADCAST & 1; - } - break; - case 5: /* ipAdEntReasmMaxSize */ - { - int32_t *sint_ptr = (int32_t*)value; -#if IP_REASSEMBLY - /* @todo The theoretical maximum is IP_REASS_MAX_PBUFS * size of the pbufs, - * but only if receiving one fragmented packet at a time. - * The current solution is to calculate for 2 simultaneous packets... - */ - *sint_ptr = (IP_HLEN + ((IP_REASS_MAX_PBUFS/2) * - (PBUF_POOL_BUFSIZE - PBUF_LINK_HLEN - IP_HLEN))); -#else - /** @todo returning MTU would be a bad thing and - returning a wild guess like '576' isn't good either */ - *sint_ptr = 0; -#endif - } - break; - } - } -} - -/** - * @note - * lwIP IP routing is currently using the network addresses in netif_list. - * if no suitable network IP is found in netif_list, the default_netif is used. - */ -static void -ip_rteentry_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - uint8_t id; - - /* return to object name, adding index depth (4) */ - ident_len += 4; - ident -= 4; - - if (ident_len == 5) - { - od->id_inst_len = ident_len; - od->id_inst_ptr = ident; - - LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff)); - id = (uint8_t)ident[0]; - switch (id) - { - case 1: /* ipRouteDest */ - case 7: /* ipRouteNextHop */ - case 11: /* ipRouteMask */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR); - od->v_len = 4; - break; - case 2: /* ipRouteIfIndex */ - case 3: /* ipRouteMetric1 */ - case 4: /* ipRouteMetric2 */ - case 5: /* ipRouteMetric3 */ - case 6: /* ipRouteMetric4 */ - case 8: /* ipRouteType */ - case 10: /* ipRouteAge */ - case 12: /* ipRouteMetric5 */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - case 9: /* ipRouteProto */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - case 13: /* ipRouteInfo */ - /** @note returning zeroDotZero (0.0) no routing protocol specific MIB */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID); - od->v_len = iprouteinfo.len * sizeof(int32_t); - break; - default: - LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_rteentry_get_object_def: no such object\n")); - od->instance = MIB_OBJECT_NONE; - break; - } - } - else - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_rteentry_get_object_def: no scalar\n")); - od->instance = MIB_OBJECT_NONE; - } -} - -static void -ip_rteentry_get_value(struct obj_def *od, uint16_t len, void *value) -{ - struct netif *netif; - ip_addr_t dest; - int32_t *ident; - uint8_t id; - - ident = od->id_inst_ptr; - snmp_oidtoip(&ident[1], &dest); - - if (ip_addr_isany(&dest)) - { - /* ip_route() uses default netif for default route */ - netif = netif_default; - } - else - { - /* not using ip_route(), need exact match! */ - netif = netif_list; - while ((netif != NULL) && - !ip_addr_netcmp(&dest, &(netif->ip_addr), &(netif->netmask)) ) - { - netif = netif->next; - } - } - if (netif != NULL) - { - LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff)); - id = (uint8_t)ident[0]; - switch (id) - { - case 1: /* ipRouteDest */ - { - ip_addr_t *dst = (ip_addr_t*)value; - - if (ip_addr_isany(&dest)) - { - /* default rte has 0.0.0.0 dest */ - ip_addr_set_zero(dst); - } - else - { - /* netifs have netaddress dest */ - ip_addr_get_network(dst, &netif->ip_addr, &netif->netmask); - } - } - break; - case 2: /* ipRouteIfIndex */ - { - int32_t *sint_ptr = (int32_t*)value; - - snmp_netiftoifindex(netif, sint_ptr); - } - break; - case 3: /* ipRouteMetric1 */ - { - int32_t *sint_ptr = (int32_t*)value; - - if (ip_addr_isany(&dest)) - { - /* default rte has metric 1 */ - *sint_ptr = 1; - } - else - { - /* other rtes have metric 0 */ - *sint_ptr = 0; - } - } - break; - case 4: /* ipRouteMetric2 */ - case 5: /* ipRouteMetric3 */ - case 6: /* ipRouteMetric4 */ - case 12: /* ipRouteMetric5 */ - { - int32_t *sint_ptr = (int32_t*)value; - /* not used */ - *sint_ptr = -1; - } - break; - case 7: /* ipRouteNextHop */ - { - ip_addr_t *dst = (ip_addr_t*)value; - - if (ip_addr_isany(&dest)) - { - /* default rte: gateway */ - *dst = netif->gw; - } - else - { - /* other rtes: netif ip_addr */ - *dst = netif->ip_addr; - } - } - break; - case 8: /* ipRouteType */ - { - int32_t *sint_ptr = (int32_t*)value; - - if (ip_addr_isany(&dest)) - { - /* default rte is indirect */ - *sint_ptr = 4; - } - else - { - /* other rtes are direct */ - *sint_ptr = 3; - } - } - break; - case 9: /* ipRouteProto */ - { - int32_t *sint_ptr = (int32_t*)value; - /* locally defined routes */ - *sint_ptr = 2; - } - break; - case 10: /* ipRouteAge */ - { - int32_t *sint_ptr = (int32_t*)value; - /** @todo (sysuptime - timestamp last change) / 100 - @see snmp_insert_iprteidx_tree() */ - *sint_ptr = 0; - } - break; - case 11: /* ipRouteMask */ - { - ip_addr_t *dst = (ip_addr_t*)value; - - if (ip_addr_isany(&dest)) - { - /* default rte use 0.0.0.0 mask */ - ip_addr_set_zero(dst); - } - else - { - /* other rtes use netmask */ - *dst = netif->netmask; - } - } - break; - case 13: /* ipRouteInfo */ - objectidncpy((int32_t*)value, (int32_t*)iprouteinfo.id, (uint8_t)(len / sizeof(int32_t))); - break; - } - } -} - -static void -ip_ntomentry_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - /* return to object name, adding index depth (5) */ - ident_len += 5; - ident -= 5; - - if (ident_len == 6) - { - uint8_t id; - - od->id_inst_len = ident_len; - od->id_inst_ptr = ident; - - LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff)); - id = (uint8_t)ident[0]; - switch (id) - { - case 1: /* ipNetToMediaIfIndex */ - case 4: /* ipNetToMediaType */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - case 2: /* ipNetToMediaPhysAddress */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR); - od->v_len = 6; /** @todo try to use netif::hwaddr_len */ - break; - case 3: /* ipNetToMediaNetAddress */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR); - od->v_len = 4; - break; - default: - LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_ntomentry_get_object_def: no such object\n")); - od->instance = MIB_OBJECT_NONE; - break; - } - } - else - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_ntomentry_get_object_def: no scalar\n")); - od->instance = MIB_OBJECT_NONE; - } -} - -static void -ip_ntomentry_get_value(struct obj_def *od, uint16_t len, void *value) -{ -#if LWIP_ARP - uint8_t id; - struct eth_addr* ethaddr_ret; - ip_addr_t* ipaddr_ret; -#endif /* LWIP_ARP */ - ip_addr_t ip; - struct netif *netif; - - LWIP_UNUSED_ARG(len); - LWIP_UNUSED_ARG(value);/* if !LWIP_ARP */ - - snmp_ifindextonetif(od->id_inst_ptr[1], &netif); - snmp_oidtoip(&od->id_inst_ptr[2], &ip); - -#if LWIP_ARP /** @todo implement a netif_find_addr */ - if (etharp_find_addr(netif, &ip, ðaddr_ret, &ipaddr_ret) > -1) - { - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 1: /* ipNetToMediaIfIndex */ - { - int32_t *sint_ptr = (int32_t*)value; - *sint_ptr = od->id_inst_ptr[1]; - } - break; - case 2: /* ipNetToMediaPhysAddress */ - { - struct eth_addr *dst = (struct eth_addr*)value; - - *dst = *ethaddr_ret; - } - break; - case 3: /* ipNetToMediaNetAddress */ - { - ip_addr_t *dst = (ip_addr_t*)value; - - *dst = *ipaddr_ret; - } - break; - case 4: /* ipNetToMediaType */ - { - int32_t *sint_ptr = (int32_t*)value; - /* dynamic (?) */ - *sint_ptr = 3; - } - break; - } - } -#endif /* LWIP_ARP */ -} - -static void -icmp_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - /* return to object name, adding index depth (1) */ - ident_len += 1; - ident -= 1; - if ((ident_len == 2) && - (ident[0] > 0) && (ident[0] < 27)) - { - od->id_inst_len = ident_len; - od->id_inst_ptr = ident; - - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER); - od->v_len = sizeof(uint32_t); - } - else - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("icmp_get_object_def: no scalar\n")); - od->instance = MIB_OBJECT_NONE; - } -} - -static void -icmp_get_value(struct obj_def *od, uint16_t len, void *value) -{ - uint32_t *uint_ptr = (uint32_t*)value; - uint8_t id; - - LWIP_UNUSED_ARG(len); - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 1: /* icmpInMsgs */ - *uint_ptr = icmpinmsgs; - break; - case 2: /* icmpInErrors */ - *uint_ptr = icmpinerrors; - break; - case 3: /* icmpInDestUnreachs */ - *uint_ptr = icmpindestunreachs; - break; - case 4: /* icmpInTimeExcds */ - *uint_ptr = icmpintimeexcds; - break; - case 5: /* icmpInParmProbs */ - *uint_ptr = icmpinparmprobs; - break; - case 6: /* icmpInSrcQuenchs */ - *uint_ptr = icmpinsrcquenchs; - break; - case 7: /* icmpInRedirects */ - *uint_ptr = icmpinredirects; - break; - case 8: /* icmpInEchos */ - *uint_ptr = icmpinechos; - break; - case 9: /* icmpInEchoReps */ - *uint_ptr = icmpinechoreps; - break; - case 10: /* icmpInTimestamps */ - *uint_ptr = icmpintimestamps; - break; - case 11: /* icmpInTimestampReps */ - *uint_ptr = icmpintimestampreps; - break; - case 12: /* icmpInAddrMasks */ - *uint_ptr = icmpinaddrmasks; - break; - case 13: /* icmpInAddrMaskReps */ - *uint_ptr = icmpinaddrmaskreps; - break; - case 14: /* icmpOutMsgs */ - *uint_ptr = icmpoutmsgs; - break; - case 15: /* icmpOutErrors */ - *uint_ptr = icmpouterrors; - break; - case 16: /* icmpOutDestUnreachs */ - *uint_ptr = icmpoutdestunreachs; - break; - case 17: /* icmpOutTimeExcds */ - *uint_ptr = icmpouttimeexcds; - break; - case 18: /* icmpOutParmProbs */ - *uint_ptr = icmpoutparmprobs; - break; - case 19: /* icmpOutSrcQuenchs */ - *uint_ptr = icmpoutsrcquenchs; - break; - case 20: /* icmpOutRedirects */ - *uint_ptr = icmpoutredirects; - break; - case 21: /* icmpOutEchos */ - *uint_ptr = icmpoutechos; - break; - case 22: /* icmpOutEchoReps */ - *uint_ptr = icmpoutechoreps; - break; - case 23: /* icmpOutTimestamps */ - *uint_ptr = icmpouttimestamps; - break; - case 24: /* icmpOutTimestampReps */ - *uint_ptr = icmpouttimestampreps; - break; - case 25: /* icmpOutAddrMasks */ - *uint_ptr = icmpoutaddrmasks; - break; - case 26: /* icmpOutAddrMaskReps */ - *uint_ptr = icmpoutaddrmaskreps; - break; - } -} - -#if LWIP_TCP -/** @todo tcp grp */ -static void -tcp_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - uint8_t id; - - /* return to object name, adding index depth (1) */ - ident_len += 1; - ident -= 1; - if (ident_len == 2) - { - od->id_inst_len = ident_len; - od->id_inst_ptr = ident; - - LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff)); - id = (uint8_t)ident[0]; - LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def tcp.%"U16_F".0\n",(uint16_t)id)); - - switch (id) - { - case 1: /* tcpRtoAlgorithm */ - case 2: /* tcpRtoMin */ - case 3: /* tcpRtoMax */ - case 4: /* tcpMaxConn */ - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - case 5: /* tcpActiveOpens */ - case 6: /* tcpPassiveOpens */ - case 7: /* tcpAttemptFails */ - case 8: /* tcpEstabResets */ - case 10: /* tcpInSegs */ - case 11: /* tcpOutSegs */ - case 12: /* tcpRetransSegs */ - case 14: /* tcpInErrs */ - case 15: /* tcpOutRsts */ - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER); - od->v_len = sizeof(uint32_t); - break; - case 9: /* tcpCurrEstab */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE); - od->v_len = sizeof(uint32_t); - break; - default: - LWIP_DEBUGF(SNMP_MIB_DEBUG,("tcp_get_object_def: no such object\n")); - od->instance = MIB_OBJECT_NONE; - break; - }; - } - else - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("tcp_get_object_def: no scalar\n")); - od->instance = MIB_OBJECT_NONE; - } -} - -static void -tcp_get_value(struct obj_def *od, uint16_t len, void *value) -{ - uint32_t *uint_ptr = (uint32_t*)value; - int32_t *sint_ptr = (int32_t*)value; - uint8_t id; - - LWIP_UNUSED_ARG(len); - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 1: /* tcpRtoAlgorithm, vanj(4) */ - *sint_ptr = 4; - break; - case 2: /* tcpRtoMin */ - /* @todo not the actual value, a guess, - needs to be calculated */ - *sint_ptr = 1000; - break; - case 3: /* tcpRtoMax */ - /* @todo not the actual value, a guess, - needs to be calculated */ - *sint_ptr = 60000; - break; - case 4: /* tcpMaxConn */ - *sint_ptr = MEMP_NUM_TCP_PCB; - break; - case 5: /* tcpActiveOpens */ - *uint_ptr = tcpactiveopens; - break; - case 6: /* tcpPassiveOpens */ - *uint_ptr = tcppassiveopens; - break; - case 7: /* tcpAttemptFails */ - *uint_ptr = tcpattemptfails; - break; - case 8: /* tcpEstabResets */ - *uint_ptr = tcpestabresets; - break; - case 9: /* tcpCurrEstab */ - { - uint16_t tcpcurrestab = 0; - struct tcp_pcb *pcb = tcp_active_pcbs; - while (pcb != NULL) - { - if ((pcb->state == ESTABLISHED) || - (pcb->state == CLOSE_WAIT)) - { - tcpcurrestab++; - } - pcb = pcb->next; - } - *uint_ptr = tcpcurrestab; - } - break; - case 10: /* tcpInSegs */ - *uint_ptr = tcpinsegs; - break; - case 11: /* tcpOutSegs */ - *uint_ptr = tcpoutsegs; - break; - case 12: /* tcpRetransSegs */ - *uint_ptr = tcpretranssegs; - break; - case 14: /* tcpInErrs */ - *uint_ptr = tcpinerrs; - break; - case 15: /* tcpOutRsts */ - *uint_ptr = tcpoutrsts; - break; - } -} -#ifdef THIS_SEEMS_UNUSED -static void -tcpconnentry_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - /* return to object name, adding index depth (10) */ - ident_len += 10; - ident -= 10; - - if (ident_len == 11) - { - uint8_t id; - - od->id_inst_len = ident_len; - od->id_inst_ptr = ident; - - id = ident[0]; - LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def tcp.%"U16_F".0\n",(uint16_t)id)); - - switch (id) - { - case 1: /* tcpConnState */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - case 2: /* tcpConnLocalAddress */ - case 4: /* tcpConnRemAddress */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR); - od->v_len = 4; - break; - case 3: /* tcpConnLocalPort */ - case 5: /* tcpConnRemPort */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - default: - LWIP_DEBUGF(SNMP_MIB_DEBUG,("tcpconnentry_get_object_def: no such object\n")); - od->instance = MIB_OBJECT_NONE; - break; - }; - } - else - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("tcpconnentry_get_object_def: no such object\n")); - od->instance = MIB_OBJECT_NONE; - } -} - -static void -tcpconnentry_get_value(struct obj_def *od, uint16_t len, void *value) -{ - ip_addr_t lip, rip; - uint16_t lport, rport; - int32_t *ident; - - ident = od->id_inst_ptr; - snmp_oidtoip(&ident[1], &lip); - lport = ident[5]; - snmp_oidtoip(&ident[6], &rip); - rport = ident[10]; - - /** @todo find matching PCB */ -} -#endif /* if 0 */ -#endif - -static void -udp_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - /* return to object name, adding index depth (1) */ - ident_len += 1; - ident -= 1; - if ((ident_len == 2) && - (ident[0] > 0) && (ident[0] < 6)) - { - od->id_inst_len = ident_len; - od->id_inst_ptr = ident; - - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER); - od->v_len = sizeof(uint32_t); - } - else - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("udp_get_object_def: no scalar\n")); - od->instance = MIB_OBJECT_NONE; - } -} - -static void -udp_get_value(struct obj_def *od, uint16_t len, void *value) -{ - uint32_t *uint_ptr = (uint32_t*)value; - uint8_t id; - - LWIP_UNUSED_ARG(len); - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 1: /* udpInDatagrams */ - *uint_ptr = udpindatagrams; - break; - case 2: /* udpNoPorts */ - *uint_ptr = udpnoports; - break; - case 3: /* udpInErrors */ - *uint_ptr = udpinerrors; - break; - case 4: /* udpOutDatagrams */ - *uint_ptr = udpoutdatagrams; - break; - } -} - -static void -udpentry_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - /* return to object name, adding index depth (5) */ - ident_len += 5; - ident -= 5; - - if (ident_len == 6) - { - od->id_inst_len = ident_len; - od->id_inst_ptr = ident; - - switch (ident[0]) - { - case 1: /* udpLocalAddress */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR); - od->v_len = 4; - break; - case 2: /* udpLocalPort */ - od->instance = MIB_OBJECT_TAB; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - default: - LWIP_DEBUGF(SNMP_MIB_DEBUG,("udpentry_get_object_def: no such object\n")); - od->instance = MIB_OBJECT_NONE; - break; - } - } - else - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("udpentry_get_object_def: no scalar\n")); - od->instance = MIB_OBJECT_NONE; - } -} - -static void -udpentry_get_value(struct obj_def *od, uint16_t len, void *value) -{ - uint8_t id; - struct udp_pcb *pcb; - ip_addr_t ip; - uint16_t port; - - LWIP_UNUSED_ARG(len); - snmp_oidtoip(&od->id_inst_ptr[1], &ip); - LWIP_ASSERT("invalid port", (od->id_inst_ptr[5] >= 0) && (od->id_inst_ptr[5] <= 0xffff)); - port = (uint16_t)od->id_inst_ptr[5]; - - pcb = udp_pcbs; - while ((pcb != NULL) && - !(ip_addr_cmp(&pcb->local_ip, &ip) && - (pcb->local_port == port))) - { - pcb = pcb->next; - } - - if (pcb != NULL) - { - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 1: /* udpLocalAddress */ - { - ip_addr_t *dst = (ip_addr_t*)value; - *dst = pcb->local_ip; - } - break; - case 2: /* udpLocalPort */ - { - int32_t *sint_ptr = (int32_t*)value; - *sint_ptr = pcb->local_port; - } - break; - } - } -} - -static void -snmp_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od) -{ - /* return to object name, adding index depth (1) */ - ident_len += 1; - ident -= 1; - if (ident_len == 2) - { - uint8_t id; - - od->id_inst_len = ident_len; - od->id_inst_ptr = ident; - - LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff)); - id = (uint8_t)ident[0]; - switch (id) - { - case 1: /* snmpInPkts */ - case 2: /* snmpOutPkts */ - case 3: /* snmpInBadVersions */ - case 4: /* snmpInBadCommunityNames */ - case 5: /* snmpInBadCommunityUses */ - case 6: /* snmpInASNParseErrs */ - case 8: /* snmpInTooBigs */ - case 9: /* snmpInNoSuchNames */ - case 10: /* snmpInBadValues */ - case 11: /* snmpInReadOnlys */ - case 12: /* snmpInGenErrs */ - case 13: /* snmpInTotalReqVars */ - case 14: /* snmpInTotalSetVars */ - case 15: /* snmpInGetRequests */ - case 16: /* snmpInGetNexts */ - case 17: /* snmpInSetRequests */ - case 18: /* snmpInGetResponses */ - case 19: /* snmpInTraps */ - case 20: /* snmpOutTooBigs */ - case 21: /* snmpOutNoSuchNames */ - case 22: /* snmpOutBadValues */ - case 24: /* snmpOutGenErrs */ - case 25: /* snmpOutGetRequests */ - case 26: /* snmpOutGetNexts */ - case 27: /* snmpOutSetRequests */ - case 28: /* snmpOutGetResponses */ - case 29: /* snmpOutTraps */ - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_ONLY; - od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER); - od->v_len = sizeof(uint32_t); - break; - case 30: /* snmpEnableAuthenTraps */ - od->instance = MIB_OBJECT_SCALAR; - od->access = MIB_OBJECT_READ_WRITE; - od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG); - od->v_len = sizeof(int32_t); - break; - default: - LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_get_object_def: no such object\n")); - od->instance = MIB_OBJECT_NONE; - break; - }; - } - else - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_get_object_def: no scalar\n")); - od->instance = MIB_OBJECT_NONE; - } -} - -static void -snmp_get_value(struct obj_def *od, uint16_t len, void *value) -{ - uint32_t *uint_ptr = (uint32_t*)value; - uint8_t id; - - LWIP_UNUSED_ARG(len); - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - switch (id) - { - case 1: /* snmpInPkts */ - *uint_ptr = snmpinpkts; - break; - case 2: /* snmpOutPkts */ - *uint_ptr = snmpoutpkts; - break; - case 3: /* snmpInBadVersions */ - *uint_ptr = snmpinbadversions; - break; - case 4: /* snmpInBadCommunityNames */ - *uint_ptr = snmpinbadcommunitynames; - break; - case 5: /* snmpInBadCommunityUses */ - *uint_ptr = snmpinbadcommunityuses; - break; - case 6: /* snmpInASNParseErrs */ - *uint_ptr = snmpinasnparseerrs; - break; - case 8: /* snmpInTooBigs */ - *uint_ptr = snmpintoobigs; - break; - case 9: /* snmpInNoSuchNames */ - *uint_ptr = snmpinnosuchnames; - break; - case 10: /* snmpInBadValues */ - *uint_ptr = snmpinbadvalues; - break; - case 11: /* snmpInReadOnlys */ - *uint_ptr = snmpinreadonlys; - break; - case 12: /* snmpInGenErrs */ - *uint_ptr = snmpingenerrs; - break; - case 13: /* snmpInTotalReqVars */ - *uint_ptr = snmpintotalreqvars; - break; - case 14: /* snmpInTotalSetVars */ - *uint_ptr = snmpintotalsetvars; - break; - case 15: /* snmpInGetRequests */ - *uint_ptr = snmpingetrequests; - break; - case 16: /* snmpInGetNexts */ - *uint_ptr = snmpingetnexts; - break; - case 17: /* snmpInSetRequests */ - *uint_ptr = snmpinsetrequests; - break; - case 18: /* snmpInGetResponses */ - *uint_ptr = snmpingetresponses; - break; - case 19: /* snmpInTraps */ - *uint_ptr = snmpintraps; - break; - case 20: /* snmpOutTooBigs */ - *uint_ptr = snmpouttoobigs; - break; - case 21: /* snmpOutNoSuchNames */ - *uint_ptr = snmpoutnosuchnames; - break; - case 22: /* snmpOutBadValues */ - *uint_ptr = snmpoutbadvalues; - break; - case 24: /* snmpOutGenErrs */ - *uint_ptr = snmpoutgenerrs; - break; - case 25: /* snmpOutGetRequests */ - *uint_ptr = snmpoutgetrequests; - break; - case 26: /* snmpOutGetNexts */ - *uint_ptr = snmpoutgetnexts; - break; - case 27: /* snmpOutSetRequests */ - *uint_ptr = snmpoutsetrequests; - break; - case 28: /* snmpOutGetResponses */ - *uint_ptr = snmpoutgetresponses; - break; - case 29: /* snmpOutTraps */ - *uint_ptr = snmpouttraps; - break; - case 30: /* snmpEnableAuthenTraps */ - *uint_ptr = *snmpenableauthentraps_ptr; - break; - }; -} - -/** - * Test snmp object value before setting. - * - * @param od is the object definition - * @param len return value space (in bytes) - * @param value points to (varbind) space to copy value from. - */ -static uint8_t -snmp_set_test(struct obj_def *od, uint16_t len, void *value) -{ - uint8_t id, set_ok; - - LWIP_UNUSED_ARG(len); - set_ok = 0; - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - if (id == 30) - { - /* snmpEnableAuthenTraps */ - int32_t *sint_ptr = (int32_t*)value; - - if (snmpenableauthentraps_ptr != &snmpenableauthentraps_default) - { - /* we should have writable non-volatile mem here */ - if ((*sint_ptr == 1) || (*sint_ptr == 2)) - { - set_ok = 1; - } - } - else - { - /* const or hardwired value */ - if (*sint_ptr == snmpenableauthentraps_default) - { - set_ok = 1; - } - } - } - return set_ok; -} - -static void -snmp_set_value(struct obj_def *od, uint16_t len, void *value) -{ - uint8_t id; - - LWIP_UNUSED_ARG(len); - LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff)); - id = (uint8_t)od->id_inst_ptr[0]; - if (id == 30) - { - /* snmpEnableAuthenTraps */ - /* @todo @fixme: which kind of pointer is 'value'? int32_t or uint8_t??? */ - uint8_t *ptr = (uint8_t*)value; - *snmpenableauthentraps_ptr = *ptr; - } -} - -#endif /* LWIP_SNMP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/mib_structs.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/mib_structs.c deleted file mode 100644 index acffb28..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/mib_structs.c +++ /dev/null @@ -1,1174 +0,0 @@ -/** - * @file - * MIB tree access/construction functions. - */ - -/* - * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Christiaan Simons - */ - -#include "lwip/opt.h" - -#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/snmp_structs.h" -#include "lwip/memp.h" -#include "lwip/netif.h" - -/** .iso.org.dod.internet address prefix, @see snmp_iso_*() */ -const int32_t prefix[4] = {1, 3, 6, 1}; - -#define NODE_STACK_SIZE (LWIP_SNMP_OBJ_ID_LEN) -/** node stack entry (old news?) */ -struct nse -{ - /** right child */ - struct mib_node* r_ptr; - /** right child identifier */ - int32_t r_id; - /** right child next level */ - uint8_t r_nl; -}; -static uint8_t node_stack_cnt; -static struct nse node_stack[NODE_STACK_SIZE]; - -/** - * Pushes nse struct onto stack. - */ -static void -push_node(struct nse* node) -{ - LWIP_ASSERT("node_stack_cnt < NODE_STACK_SIZE",node_stack_cnt < NODE_STACK_SIZE); - LWIP_DEBUGF(SNMP_MIB_DEBUG,("push_node() node=%p id=%"S32_F"\n",(void*)(node->r_ptr),node->r_id)); - if (node_stack_cnt < NODE_STACK_SIZE) - { - node_stack[node_stack_cnt] = *node; - node_stack_cnt++; - } -} - -/** - * Pops nse struct from stack. - */ -static void -pop_node(struct nse* node) -{ - if (node_stack_cnt > 0) - { - node_stack_cnt--; - *node = node_stack[node_stack_cnt]; - } - LWIP_DEBUGF(SNMP_MIB_DEBUG,("pop_node() node=%p id=%"S32_F"\n",(void *)(node->r_ptr),node->r_id)); -} - -/** - * Conversion from ifIndex to lwIP netif - * @param ifindex is a int32_t object sub-identifier - * @param netif points to returned netif struct pointer - */ -void -snmp_ifindextonetif(int32_t ifindex, struct netif **netif) -{ - struct netif *nif = netif_list; - int32_t i, ifidx; - - ifidx = ifindex - 1; - i = 0; - while ((nif != NULL) && (i < ifidx)) - { - nif = nif->next; - i++; - } - *netif = nif; -} - -/** - * Conversion from lwIP netif to ifIndex - * @param netif points to a netif struct - * @param ifidx points to int32_t object sub-identifier - */ -void -snmp_netiftoifindex(struct netif *netif, int32_t *ifidx) -{ - struct netif *nif = netif_list; - uint16_t i; - - i = 0; - while ((nif != NULL) && (nif != netif)) - { - nif = nif->next; - i++; - } - *ifidx = i+1; -} - -/** - * Conversion from oid to lwIP ip_addr - * @param ident points to int32_t ident[4] input - * @param ip points to output struct - */ -void -snmp_oidtoip(int32_t *ident, ip_addr_t *ip) -{ - IP4_ADDR(ip, ident[0], ident[1], ident[2], ident[3]); -} - -/** - * Conversion from lwIP ip_addr to oid - * @param ip points to input struct - * @param ident points to int32_t ident[4] output - */ -void -snmp_iptooid(ip_addr_t *ip, int32_t *ident) -{ - ident[0] = ip4_addr1(ip); - ident[1] = ip4_addr2(ip); - ident[2] = ip4_addr3(ip); - ident[3] = ip4_addr4(ip); -} - -struct mib_list_node * -snmp_mib_ln_alloc(int32_t id) -{ - struct mib_list_node *ln; - - ln = (struct mib_list_node *)memp_malloc(MEMP_SNMP_NODE); - if (ln != NULL) - { - ln->prev = NULL; - ln->next = NULL; - ln->objid = id; - ln->nptr = NULL; - } - return ln; -} - -void -snmp_mib_ln_free(struct mib_list_node *ln) -{ - memp_free(MEMP_SNMP_NODE, ln); -} - -struct mib_list_rootnode * -snmp_mib_lrn_alloc(void) -{ - struct mib_list_rootnode *lrn; - - lrn = (struct mib_list_rootnode*)memp_malloc(MEMP_SNMP_ROOTNODE); - if (lrn != NULL) - { - lrn->get_object_def = noleafs_get_object_def; - lrn->get_value = noleafs_get_value; - lrn->set_test = noleafs_set_test; - lrn->set_value = noleafs_set_value; - lrn->node_type = MIB_NODE_LR; - lrn->maxlength = 0; - lrn->head = NULL; - lrn->tail = NULL; - lrn->count = 0; - } - return lrn; -} - -void -snmp_mib_lrn_free(struct mib_list_rootnode *lrn) -{ - memp_free(MEMP_SNMP_ROOTNODE, lrn); -} - -/** - * Inserts node in idx list in a sorted - * (ascending order) fashion and - * allocates the node if needed. - * - * @param rn points to the root node - * @param objid is the object sub identifier - * @param insn points to a pointer to the inserted node - * used for constructing the tree. - * @return -1 if failed, 1 if inserted, 2 if present. - */ -int8_t -snmp_mib_node_insert(struct mib_list_rootnode *rn, int32_t objid, struct mib_list_node **insn) -{ - struct mib_list_node *nn; - int8_t insert; - - LWIP_ASSERT("rn != NULL",rn != NULL); - - /* -1 = malloc failure, 0 = not inserted, 1 = inserted, 2 = was present */ - insert = 0; - if (rn->head == NULL) - { - /* empty list, add first node */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("alloc empty list objid==%"S32_F"\n",objid)); - nn = snmp_mib_ln_alloc(objid); - if (nn != NULL) - { - rn->head = nn; - rn->tail = nn; - *insn = nn; - insert = 1; - } - else - { - insert = -1; - } - } - else - { - struct mib_list_node *n; - /* at least one node is present */ - n = rn->head; - while ((n != NULL) && (insert == 0)) - { - if (n->objid == objid) - { - /* node is already there */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("node already there objid==%"S32_F"\n",objid)); - *insn = n; - insert = 2; - } - else if (n->objid < objid) - { - if (n->next == NULL) - { - /* alloc and insert at the tail */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("alloc ins tail objid==%"S32_F"\n",objid)); - nn = snmp_mib_ln_alloc(objid); - if (nn != NULL) - { - nn->next = NULL; - nn->prev = n; - n->next = nn; - rn->tail = nn; - *insn = nn; - insert = 1; - } - else - { - /* insertion failure */ - insert = -1; - } - } - else - { - /* there's more to explore: traverse list */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("traverse list\n")); - n = n->next; - } - } - else - { - /* n->objid > objid */ - /* alloc and insert between n->prev and n */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("alloc ins n->prev, objid==%"S32_F", n\n",objid)); - nn = snmp_mib_ln_alloc(objid); - if (nn != NULL) - { - if (n->prev == NULL) - { - /* insert at the head */ - nn->next = n; - nn->prev = NULL; - rn->head = nn; - n->prev = nn; - } - else - { - /* insert in the middle */ - nn->next = n; - nn->prev = n->prev; - n->prev->next = nn; - n->prev = nn; - } - *insn = nn; - insert = 1; - } - else - { - /* insertion failure */ - insert = -1; - } - } - } - } - if (insert == 1) - { - rn->count += 1; - } - LWIP_ASSERT("insert != 0",insert != 0); - return insert; -} - -/** - * Finds node in idx list and returns deletion mark. - * - * @param rn points to the root node - * @param objid is the object sub identifier - * @param fn returns pointer to found node - * @return 0 if not found, 1 if deletable, - * 2 can't delete (2 or more children), 3 not a list_node - */ -int8_t -snmp_mib_node_find(struct mib_list_rootnode *rn, int32_t objid, struct mib_list_node **fn) -{ - int8_t fc; - struct mib_list_node *n; - - LWIP_ASSERT("rn != NULL",rn != NULL); - n = rn->head; - while ((n != NULL) && (n->objid != objid)) - { - n = n->next; - } - if (n == NULL) - { - fc = 0; - } - else if (n->nptr == NULL) - { - /* leaf, can delete node */ - fc = 1; - } - else - { - struct mib_list_rootnode *r; - - if (n->nptr->node_type == MIB_NODE_LR) - { - r = (struct mib_list_rootnode *)n->nptr; - if (r->count > 1) - { - /* can't delete node */ - fc = 2; - } - else - { - /* count <= 1, can delete node */ - fc = 1; - } - } - else - { - /* other node type */ - fc = 3; - } - } - *fn = n; - return fc; -} - -/** - * Removes node from idx list - * if it has a single child left. - * - * @param rn points to the root node - * @param n points to the node to delete - * @return the nptr to be freed by caller - */ -struct mib_list_rootnode * -snmp_mib_node_delete(struct mib_list_rootnode *rn, struct mib_list_node *n) -{ - struct mib_list_rootnode *next; - - LWIP_ASSERT("rn != NULL",rn != NULL); - LWIP_ASSERT("n != NULL",n != NULL); - - /* caller must remove this sub-tree */ - next = (struct mib_list_rootnode*)(n->nptr); - rn->count -= 1; - - if (n == rn->head) - { - rn->head = n->next; - if (n->next != NULL) - { - /* not last node, new list begin */ - n->next->prev = NULL; - } - } - else if (n == rn->tail) - { - rn->tail = n->prev; - if (n->prev != NULL) - { - /* not last node, new list end */ - n->prev->next = NULL; - } - } - else - { - /* node must be in the middle */ - n->prev->next = n->next; - n->next->prev = n->prev; - } - LWIP_DEBUGF(SNMP_MIB_DEBUG,("free list objid==%"S32_F"\n",n->objid)); - snmp_mib_ln_free(n); - if (rn->count == 0) - { - rn->head = NULL; - rn->tail = NULL; - } - return next; -} - - - -/** - * Searches tree for the supplied (scalar?) object identifier. - * - * @param node points to the root of the tree ('.internet') - * @param ident_len the length of the supplied object identifier - * @param ident points to the array of sub identifiers - * @param np points to the found object instance (return) - * @return pointer to the requested parent (!) node if success, NULL otherwise - */ -struct mib_node * -snmp_search_tree(struct mib_node *node, uint8_t ident_len, int32_t *ident, struct snmp_name_ptr *np) -{ - uint8_t node_type, ext_level; - - ext_level = 0; - LWIP_DEBUGF(SNMP_MIB_DEBUG,("node==%p *ident==%"S32_F"\n",(void*)node,*ident)); - while (node != NULL) - { - node_type = node->node_type; - if ((node_type == MIB_NODE_AR) || (node_type == MIB_NODE_RA)) - { - struct mib_array_node *an; - uint16_t i; - - if (ident_len > 0) - { - /* array node (internal ROM or RAM, fixed length) */ - an = (struct mib_array_node *)node; - i = 0; - while ((i < an->maxlength) && (an->objid[i] != *ident)) - { - i++; - } - if (i < an->maxlength) - { - /* found it, if available proceed to child, otherwise inspect leaf */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("an->objid[%"U16_F"]==%"S32_F" *ident==%"S32_F"\n",i,an->objid[i],*ident)); - if (an->nptr[i] == NULL) - { - /* a scalar leaf OR table, - inspect remaining instance number / table index */ - np->ident_len = ident_len; - np->ident = ident; - return (struct mib_node*)an; - } - else - { - /* follow next child pointer */ - ident++; - ident_len--; - node = an->nptr[i]; - } - } - else - { - /* search failed, identifier mismatch (nosuchname) */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("an search failed *ident==%"S32_F"\n",*ident)); - return NULL; - } - } - else - { - /* search failed, short object identifier (nosuchname) */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("an search failed, short object identifier\n")); - return NULL; - } - } - else if(node_type == MIB_NODE_LR) - { - struct mib_list_rootnode *lrn; - struct mib_list_node *ln; - - if (ident_len > 0) - { - /* list root node (internal 'RAM', variable length) */ - lrn = (struct mib_list_rootnode *)node; - ln = lrn->head; - /* iterate over list, head to tail */ - while ((ln != NULL) && (ln->objid != *ident)) - { - ln = ln->next; - } - if (ln != NULL) - { - /* found it, proceed to child */; - LWIP_DEBUGF(SNMP_MIB_DEBUG,("ln->objid==%"S32_F" *ident==%"S32_F"\n",ln->objid,*ident)); - if (ln->nptr == NULL) - { - np->ident_len = ident_len; - np->ident = ident; - return (struct mib_node*)lrn; - } - else - { - /* follow next child pointer */ - ident_len--; - ident++; - node = ln->nptr; - } - } - else - { - /* search failed */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("ln search failed *ident==%"S32_F"\n",*ident)); - return NULL; - } - } - else - { - /* search failed, short object identifier (nosuchname) */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("ln search failed, short object identifier\n")); - return NULL; - } - } - else if(node_type == MIB_NODE_EX) - { - struct mib_external_node *en; - uint16_t i, len; - - if (ident_len > 0) - { - /* external node (addressing and access via functions) */ - en = (struct mib_external_node *)node; - - i = 0; - len = en->level_length(en->addr_inf,ext_level); - while ((i < len) && (en->ident_cmp(en->addr_inf,ext_level,i,*ident) != 0)) - { - i++; - } - if (i < len) - { - int32_t debug_id; - - en->get_objid(en->addr_inf,ext_level,i,&debug_id); - LWIP_DEBUGF(SNMP_MIB_DEBUG,("en->objid==%"S32_F" *ident==%"S32_F"\n",debug_id,*ident)); - if ((ext_level + 1) == en->tree_levels) - { - np->ident_len = ident_len; - np->ident = ident; - return (struct mib_node*)en; - } - else - { - /* found it, proceed to child */ - ident_len--; - ident++; - ext_level++; - } - } - else - { - /* search failed */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("en search failed *ident==%"S32_F"\n",*ident)); - return NULL; - } - } - else - { - /* search failed, short object identifier (nosuchname) */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("en search failed, short object identifier\n")); - return NULL; - } - } - else if (node_type == MIB_NODE_SC) - { - mib_scalar_node *sn; - - sn = (mib_scalar_node *)node; - if ((ident_len == 1) && (*ident == 0)) - { - np->ident_len = ident_len; - np->ident = ident; - return (struct mib_node*)sn; - } - else - { - /* search failed, short object identifier (nosuchname) */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("search failed, invalid object identifier length\n")); - return NULL; - } - } - else - { - /* unknown node_type */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("search failed node_type %"U16_F" unkown\n",(uint16_t)node_type)); - return NULL; - } - } - /* done, found nothing */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("search failed node==%p\n",(void*)node)); - return NULL; -} - -/** - * Test table for presence of at least one table entry. - */ -static uint8_t -empty_table(struct mib_node *node) -{ - uint8_t node_type; - uint8_t empty = 0; - - if (node != NULL) - { - node_type = node->node_type; - if (node_type == MIB_NODE_LR) - { - struct mib_list_rootnode *lrn; - lrn = (struct mib_list_rootnode *)node; - if ((lrn->count == 0) || (lrn->head == NULL)) - { - empty = 1; - } - } - else if ((node_type == MIB_NODE_AR) || (node_type == MIB_NODE_RA)) - { - struct mib_array_node *an; - an = (struct mib_array_node *)node; - if ((an->maxlength == 0) || (an->nptr == NULL)) - { - empty = 1; - } - } - else if (node_type == MIB_NODE_EX) - { - struct mib_external_node *en; - en = (struct mib_external_node *)node; - if (en->tree_levels == 0) - { - empty = 1; - } - } - } - return empty; -} - -/** - * Tree expansion. - */ -struct mib_node * -snmp_expand_tree(struct mib_node *node, uint8_t ident_len, int32_t *ident, struct snmp_obj_id *oidret) -{ - uint8_t node_type, ext_level, climb_tree; - - ext_level = 0; - /* reset node stack */ - node_stack_cnt = 0; - while (node != NULL) - { - climb_tree = 0; - node_type = node->node_type; - if ((node_type == MIB_NODE_AR) || (node_type == MIB_NODE_RA)) - { - struct mib_array_node *an; - uint16_t i; - - /* array node (internal ROM or RAM, fixed length) */ - an = (struct mib_array_node *)node; - if (ident_len > 0) - { - i = 0; - while ((i < an->maxlength) && (an->objid[i] < *ident)) - { - i++; - } - if (i < an->maxlength) - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("an->objid[%"U16_F"]==%"S32_F" *ident==%"S32_F"\n",i,an->objid[i],*ident)); - /* add identifier to oidret */ - oidret->id[oidret->len] = an->objid[i]; - (oidret->len)++; - - if (an->nptr[i] == NULL) - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("leaf node\n")); - /* leaf node (e.g. in a fixed size table) */ - if (an->objid[i] > *ident) - { - return (struct mib_node*)an; - } - else if ((i + 1) < an->maxlength) - { - /* an->objid[i] == *ident */ - (oidret->len)--; - oidret->id[oidret->len] = an->objid[i + 1]; - (oidret->len)++; - return (struct mib_node*)an; - } - else - { - /* (i + 1) == an->maxlength */ - (oidret->len)--; - climb_tree = 1; - } - } - else - { - uint8_t j; - struct nse cur_node; - - LWIP_DEBUGF(SNMP_MIB_DEBUG,("non-leaf node\n")); - /* non-leaf, store right child ptr and id */ - LWIP_ASSERT("i < 0xff", i < 0xff); - j = (uint8_t)i + 1; - while ((j < an->maxlength) && (empty_table(an->nptr[j]))) - { - j++; - } - if (j < an->maxlength) - { - cur_node.r_ptr = an->nptr[j]; - cur_node.r_id = an->objid[j]; - cur_node.r_nl = 0; - } - else - { - cur_node.r_ptr = NULL; - } - push_node(&cur_node); - if (an->objid[i] == *ident) - { - ident_len--; - ident++; - } - else - { - /* an->objid[i] < *ident */ - ident_len = 0; - } - /* follow next child pointer */ - node = an->nptr[i]; - } - } - else - { - /* i == an->maxlength */ - climb_tree = 1; - } - } - else - { - uint8_t j; - /* ident_len == 0, complete with leftmost '.thing' */ - j = 0; - while ((j < an->maxlength) && empty_table(an->nptr[j])) - { - j++; - } - if (j < an->maxlength) - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("left an->objid[j]==%"S32_F"\n",an->objid[j])); - oidret->id[oidret->len] = an->objid[j]; - (oidret->len)++; - if (an->nptr[j] == NULL) - { - /* leaf node */ - return (struct mib_node*)an; - } - else - { - /* no leaf, continue */ - node = an->nptr[j]; - } - } - else - { - /* j == an->maxlength */ - climb_tree = 1; - } - } - } - else if(node_type == MIB_NODE_LR) - { - struct mib_list_rootnode *lrn; - struct mib_list_node *ln; - - /* list root node (internal 'RAM', variable length) */ - lrn = (struct mib_list_rootnode *)node; - if (ident_len > 0) - { - ln = lrn->head; - /* iterate over list, head to tail */ - while ((ln != NULL) && (ln->objid < *ident)) - { - ln = ln->next; - } - if (ln != NULL) - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("ln->objid==%"S32_F" *ident==%"S32_F"\n",ln->objid,*ident)); - oidret->id[oidret->len] = ln->objid; - (oidret->len)++; - if (ln->nptr == NULL) - { - /* leaf node */ - if (ln->objid > *ident) - { - return (struct mib_node*)lrn; - } - else if (ln->next != NULL) - { - /* ln->objid == *ident */ - (oidret->len)--; - oidret->id[oidret->len] = ln->next->objid; - (oidret->len)++; - return (struct mib_node*)lrn; - } - else - { - /* ln->next == NULL */ - (oidret->len)--; - climb_tree = 1; - } - } - else - { - struct mib_list_node *jn; - struct nse cur_node; - - /* non-leaf, store right child ptr and id */ - jn = ln->next; - while ((jn != NULL) && empty_table(jn->nptr)) - { - jn = jn->next; - } - if (jn != NULL) - { - cur_node.r_ptr = jn->nptr; - cur_node.r_id = jn->objid; - cur_node.r_nl = 0; - } - else - { - cur_node.r_ptr = NULL; - } - push_node(&cur_node); - if (ln->objid == *ident) - { - ident_len--; - ident++; - } - else - { - /* ln->objid < *ident */ - ident_len = 0; - } - /* follow next child pointer */ - node = ln->nptr; - } - - } - else - { - /* ln == NULL */ - climb_tree = 1; - } - } - else - { - struct mib_list_node *jn; - /* ident_len == 0, complete with leftmost '.thing' */ - jn = lrn->head; - while ((jn != NULL) && empty_table(jn->nptr)) - { - jn = jn->next; - } - if (jn != NULL) - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("left jn->objid==%"S32_F"\n",jn->objid)); - oidret->id[oidret->len] = jn->objid; - (oidret->len)++; - if (jn->nptr == NULL) - { - /* leaf node */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("jn->nptr == NULL\n")); - return (struct mib_node*)lrn; - } - else - { - /* no leaf, continue */ - node = jn->nptr; - } - } - else - { - /* jn == NULL */ - climb_tree = 1; - } - } - } - else if(node_type == MIB_NODE_EX) - { - struct mib_external_node *en; - int32_t ex_id; - - /* external node (addressing and access via functions) */ - en = (struct mib_external_node *)node; - if (ident_len > 0) - { - uint16_t i, len; - - i = 0; - len = en->level_length(en->addr_inf,ext_level); - while ((i < len) && (en->ident_cmp(en->addr_inf,ext_level,i,*ident) < 0)) - { - i++; - } - if (i < len) - { - /* add identifier to oidret */ - en->get_objid(en->addr_inf,ext_level,i,&ex_id); - LWIP_DEBUGF(SNMP_MIB_DEBUG,("en->objid[%"U16_F"]==%"S32_F" *ident==%"S32_F"\n",i,ex_id,*ident)); - oidret->id[oidret->len] = ex_id; - (oidret->len)++; - - if ((ext_level + 1) == en->tree_levels) - { - LWIP_DEBUGF(SNMP_MIB_DEBUG,("leaf node\n")); - /* leaf node */ - if (ex_id > *ident) - { - return (struct mib_node*)en; - } - else if ((i + 1) < len) - { - /* ex_id == *ident */ - en->get_objid(en->addr_inf,ext_level,i + 1,&ex_id); - (oidret->len)--; - oidret->id[oidret->len] = ex_id; - (oidret->len)++; - return (struct mib_node*)en; - } - else - { - /* (i + 1) == len */ - (oidret->len)--; - climb_tree = 1; - } - } - else - { - uint8_t j; - struct nse cur_node; - - LWIP_DEBUGF(SNMP_MIB_DEBUG,("non-leaf node\n")); - /* non-leaf, store right child ptr and id */ - LWIP_ASSERT("i < 0xff", i < 0xff); - j = (uint8_t)i + 1; - if (j < len) - { - /* right node is the current external node */ - cur_node.r_ptr = node; - en->get_objid(en->addr_inf,ext_level,j,&cur_node.r_id); - cur_node.r_nl = ext_level + 1; - } - else - { - cur_node.r_ptr = NULL; - } - push_node(&cur_node); - if (en->ident_cmp(en->addr_inf,ext_level,i,*ident) == 0) - { - ident_len--; - ident++; - } - else - { - /* external id < *ident */ - ident_len = 0; - } - /* proceed to child */ - ext_level++; - } - } - else - { - /* i == len (en->level_len()) */ - climb_tree = 1; - } - } - else - { - /* ident_len == 0, complete with leftmost '.thing' */ - en->get_objid(en->addr_inf,ext_level,0,&ex_id); - LWIP_DEBUGF(SNMP_MIB_DEBUG,("left en->objid==%"S32_F"\n",ex_id)); - oidret->id[oidret->len] = ex_id; - (oidret->len)++; - if ((ext_level + 1) == en->tree_levels) - { - /* leaf node */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("(ext_level + 1) == en->tree_levels\n")); - return (struct mib_node*)en; - } - else - { - /* no leaf, proceed to child */ - ext_level++; - } - } - } - else if(node_type == MIB_NODE_SC) - { - mib_scalar_node *sn; - - /* scalar node */ - sn = (mib_scalar_node *)node; - if (ident_len > 0) - { - /* at .0 */ - climb_tree = 1; - } - else - { - /* ident_len == 0, complete object identifier */ - oidret->id[oidret->len] = 0; - (oidret->len)++; - /* leaf node */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("completed scalar leaf\n")); - return (struct mib_node*)sn; - } - } - else - { - /* unknown/unhandled node_type */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("expand failed node_type %"U16_F" unkown\n",(uint16_t)node_type)); - return NULL; - } - - if (climb_tree) - { - struct nse child; - - /* find right child ptr */ - child.r_ptr = NULL; - child.r_id = 0; - child.r_nl = 0; - while ((node_stack_cnt > 0) && (child.r_ptr == NULL)) - { - pop_node(&child); - /* trim returned oid */ - (oidret->len)--; - } - if (child.r_ptr != NULL) - { - /* incoming ident is useless beyond this point */ - ident_len = 0; - oidret->id[oidret->len] = child.r_id; - oidret->len++; - node = child.r_ptr; - ext_level = child.r_nl; - } - else - { - /* tree ends here ... */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("expand failed, tree ends here\n")); - return NULL; - } - } - } - /* done, found nothing */ - LWIP_DEBUGF(SNMP_MIB_DEBUG,("expand failed node==%p\n",(void*)node)); - return NULL; -} - -/** - * Test object identifier for the iso.org.dod.internet prefix. - * - * @param ident_len the length of the supplied object identifier - * @param ident points to the array of sub identifiers - * @return 1 if it matches, 0 otherwise - */ -uint8_t -snmp_iso_prefix_tst(uint8_t ident_len, int32_t *ident) -{ - if ((ident_len > 3) && - (ident[0] == 1) && (ident[1] == 3) && - (ident[2] == 6) && (ident[3] == 1)) - { - return 1; - } - else - { - return 0; - } -} - -/** - * Expands object identifier to the iso.org.dod.internet - * prefix for use in getnext operation. - * - * @param ident_len the length of the supplied object identifier - * @param ident points to the array of sub identifiers - * @param oidret points to returned expanded object identifier - * @return 1 if it matches, 0 otherwise - * - * @note ident_len 0 is allowed, expanding to the first known object id!! - */ -uint8_t -snmp_iso_prefix_expand(uint8_t ident_len, int32_t *ident, struct snmp_obj_id *oidret) -{ - const int32_t *prefix_ptr; - int32_t *ret_ptr; - uint8_t i; - - i = 0; - prefix_ptr = &prefix[0]; - ret_ptr = &oidret->id[0]; - ident_len = ((ident_len < 4)?ident_len:4); - while ((i < ident_len) && ((*ident) <= (*prefix_ptr))) - { - *ret_ptr++ = *prefix_ptr++; - ident++; - i++; - } - if (i == ident_len) - { - /* match, complete missing bits */ - while (i < 4) - { - *ret_ptr++ = *prefix_ptr++; - i++; - } - oidret->len = i; - return 1; - } - else - { - /* i != ident_len */ - return 0; - } -} - -#endif /* LWIP_SNMP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/msg_in.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/msg_in.c deleted file mode 100644 index cb1f589..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/msg_in.c +++ /dev/null @@ -1,1453 +0,0 @@ -/** - * @file - * SNMP input message processing (RFC1157). - */ - -/* - * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Christiaan Simons - */ - -#include "lwip/opt.h" - -#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/snmp.h" -#include "lwip/snmp_asn1.h" -#include "lwip/snmp_msg.h" -#include "lwip/snmp_structs.h" -#include "lwip/ip_addr.h" -#include "lwip/memp.h" -#include "lwip/udp.h" -#include "lwip/stats.h" - -#include - -/* public (non-static) constants */ -/** SNMP v1 == 0 */ -const int32_t snmp_version = 0; -/** default SNMP community string */ -const char snmp_publiccommunity[7] = "public"; - -/* statically allocated buffers for SNMP_CONCURRENT_REQUESTS */ -struct snmp_msg_pstat msg_input_list[SNMP_CONCURRENT_REQUESTS]; -/* UDP Protocol Control Block */ -struct udp_pcb *snmp1_pcb; - -static void snmp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, uint16_t port); -static err_t snmp_pdu_header_check(struct pbuf *p, uint16_t ofs, uint16_t pdu_len, uint16_t *ofs_ret, struct snmp_msg_pstat *m_stat); -static err_t snmp_pdu_dec_varbindlist(struct pbuf *p, uint16_t ofs, uint16_t *ofs_ret, struct snmp_msg_pstat *m_stat); - - -/** - * Starts SNMP Agent. - * Allocates UDP pcb and binds it to IP_ADDR_ANY port 161. - */ -void -snmp_init(void) -{ - struct snmp_msg_pstat *msg_ps; - uint8_t i; - - snmp1_pcb = udp_new(); - if (snmp1_pcb != NULL) - { - udp_recv(snmp1_pcb, snmp_recv, (void *)SNMP_IN_PORT); - udp_bind(snmp1_pcb, IP_ADDR_ANY, SNMP_IN_PORT); - } - msg_ps = &msg_input_list[0]; - for (i=0; istate = SNMP_MSG_EMPTY; - msg_ps->error_index = 0; - msg_ps->error_status = SNMP_ES_NOERROR; - msg_ps++; - } - trap_msg.pcb = snmp1_pcb; - -#ifdef SNMP_PRIVATE_MIB_INIT - /* If defined, this must be a function-like define to initialize the - * private MIB after the stack has been initialized. - * The private MIB can also be initialized in tcpip_callback (or after - * the stack is initialized), this define is only for convenience. */ - SNMP_PRIVATE_MIB_INIT(); -#endif /* SNMP_PRIVATE_MIB_INIT */ - - /* The coldstart trap will only be output - if our outgoing interface is up & configured */ - snmp_coldstart_trap(); -} - -static void -snmp_error_response(struct snmp_msg_pstat *msg_ps, uint8_t error) -{ - /* move names back from outvb to invb */ - int v; - struct snmp_varbind *vbi = msg_ps->invb.head; - struct snmp_varbind *vbo = msg_ps->outvb.head; - for (v=0; vvb_idx; v++) { - vbi->ident_len = vbo->ident_len; - vbo->ident_len = 0; - vbi->ident = vbo->ident; - vbo->ident = NULL; - vbi = vbi->next; - vbo = vbo->next; - } - /* free outvb */ - snmp_varbind_list_free(&msg_ps->outvb); - /* we send invb back */ - msg_ps->outvb = msg_ps->invb; - msg_ps->invb.head = NULL; - msg_ps->invb.tail = NULL; - msg_ps->invb.count = 0; - msg_ps->error_status = error; - /* error index must be 0 for error too big */ - msg_ps->error_index = (error != SNMP_ES_TOOBIG) ? (1 + msg_ps->vb_idx) : 0; - snmp_send_response(msg_ps); - snmp_varbind_list_free(&msg_ps->outvb); - msg_ps->state = SNMP_MSG_EMPTY; -} - -static void -snmp_ok_response(struct snmp_msg_pstat *msg_ps) -{ - err_t err_ret; - - err_ret = snmp_send_response(msg_ps); - if (err_ret == ERR_MEM) - { - /* serious memory problem, can't return tooBig */ - } - else - { - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event = %"S32_F"\n",msg_ps->error_status)); - } - /* free varbinds (if available) */ - snmp_varbind_list_free(&msg_ps->invb); - snmp_varbind_list_free(&msg_ps->outvb); - msg_ps->state = SNMP_MSG_EMPTY; -} - -/** - * Service an internal or external event for SNMP GET. - * - * @param request_id identifies requests from 0 to (SNMP_CONCURRENT_REQUESTS-1) - * @param msg_ps points to the assosicated message process state - */ -static void -snmp_msg_get_event(uint8_t request_id, struct snmp_msg_pstat *msg_ps) -{ - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_get_event: msg_ps->state==%"U16_F"\n",(uint16_t)msg_ps->state)); - - if (msg_ps->state == SNMP_MSG_EXTERNAL_GET_OBJDEF) - { - struct mib_external_node *en; - struct snmp_name_ptr np; - - /* get_object_def() answer*/ - en = msg_ps->ext_mib_node; - np = msg_ps->ext_name_ptr; - - /* translate answer into a known lifeform */ - en->get_object_def_a(request_id, np.ident_len, np.ident, &msg_ps->ext_object_def); - if ((msg_ps->ext_object_def.instance != MIB_OBJECT_NONE) && - (msg_ps->ext_object_def.access & MIB_ACCESS_READ)) - { - msg_ps->state = SNMP_MSG_EXTERNAL_GET_VALUE; - en->get_value_q(request_id, &msg_ps->ext_object_def); - } - else - { - en->get_object_def_pc(request_id, np.ident_len, np.ident); - /* search failed, object id points to unknown object (nosuchname) */ - snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME); - } - } - else if (msg_ps->state == SNMP_MSG_EXTERNAL_GET_VALUE) - { - struct mib_external_node *en; - struct snmp_varbind *vb; - - /* get_value() answer */ - en = msg_ps->ext_mib_node; - - /* allocate output varbind */ - vb = (struct snmp_varbind *)memp_malloc(MEMP_SNMP_VARBIND); - if (vb != NULL) - { - vb->next = NULL; - vb->prev = NULL; - - /* move name from invb to outvb */ - vb->ident = msg_ps->vb_ptr->ident; - vb->ident_len = msg_ps->vb_ptr->ident_len; - /* ensure this memory is refereced once only */ - msg_ps->vb_ptr->ident = NULL; - msg_ps->vb_ptr->ident_len = 0; - - vb->value_type = msg_ps->ext_object_def.asn_type; - LWIP_ASSERT("invalid length", msg_ps->ext_object_def.v_len <= 0xff); - vb->value_len = (uint8_t)msg_ps->ext_object_def.v_len; - if (vb->value_len > 0) - { - LWIP_ASSERT("SNMP_MAX_OCTET_STRING_LEN is configured too low", vb->value_len <= SNMP_MAX_VALUE_SIZE); - vb->value = memp_malloc(MEMP_SNMP_VALUE); - if (vb->value != NULL) - { - en->get_value_a(request_id, &msg_ps->ext_object_def, vb->value_len, vb->value); - snmp_varbind_tail_add(&msg_ps->outvb, vb); - /* search again (if vb_idx < msg_ps->invb.count) */ - msg_ps->state = SNMP_MSG_SEARCH_OBJ; - msg_ps->vb_idx += 1; - } - else - { - en->get_value_pc(request_id, &msg_ps->ext_object_def); - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event: no variable space\n")); - msg_ps->vb_ptr->ident = vb->ident; - msg_ps->vb_ptr->ident_len = vb->ident_len; - memp_free(MEMP_SNMP_VARBIND, vb); - snmp_error_response(msg_ps,SNMP_ES_TOOBIG); - } - } - else - { - /* vb->value_len == 0, empty value (e.g. empty string) */ - en->get_value_a(request_id, &msg_ps->ext_object_def, 0, NULL); - vb->value = NULL; - snmp_varbind_tail_add(&msg_ps->outvb, vb); - /* search again (if vb_idx < msg_ps->invb.count) */ - msg_ps->state = SNMP_MSG_SEARCH_OBJ; - msg_ps->vb_idx += 1; - } - } - else - { - en->get_value_pc(request_id, &msg_ps->ext_object_def); - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event: no outvb space\n")); - snmp_error_response(msg_ps,SNMP_ES_TOOBIG); - } - } - - while ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) && - (msg_ps->vb_idx < msg_ps->invb.count)) - { - struct mib_node *mn; - struct snmp_name_ptr np; - - if (msg_ps->vb_idx == 0) - { - msg_ps->vb_ptr = msg_ps->invb.head; - } - else - { - msg_ps->vb_ptr = msg_ps->vb_ptr->next; - } - /** test object identifier for .iso.org.dod.internet prefix */ - if (snmp_iso_prefix_tst(msg_ps->vb_ptr->ident_len, msg_ps->vb_ptr->ident)) - { - mn = snmp_search_tree((struct mib_node*)&internet, msg_ps->vb_ptr->ident_len - 4, - msg_ps->vb_ptr->ident + 4, &np); - if (mn != NULL) - { - if (mn->node_type == MIB_NODE_EX) - { - /* external object */ - struct mib_external_node *en = (struct mib_external_node*)mn; - - msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF; - /* save en && args in msg_ps!! */ - msg_ps->ext_mib_node = en; - msg_ps->ext_name_ptr = np; - - en->get_object_def_q(en->addr_inf, request_id, np.ident_len, np.ident); - } - else - { - /* internal object */ - struct obj_def object_def; - - msg_ps->state = SNMP_MSG_INTERNAL_GET_OBJDEF; - mn->get_object_def(np.ident_len, np.ident, &object_def); - if ((object_def.instance != MIB_OBJECT_NONE) && - (object_def.access & MIB_ACCESS_READ)) - { - mn = mn; - } - else - { - /* search failed, object id points to unknown object (nosuchname) */ - mn = NULL; - } - if (mn != NULL) - { - struct snmp_varbind *vb; - - msg_ps->state = SNMP_MSG_INTERNAL_GET_VALUE; - /* allocate output varbind */ - vb = (struct snmp_varbind *)memp_malloc(MEMP_SNMP_VARBIND); - if (vb != NULL) - { - vb->next = NULL; - vb->prev = NULL; - - /* move name from invb to outvb */ - vb->ident = msg_ps->vb_ptr->ident; - vb->ident_len = msg_ps->vb_ptr->ident_len; - /* ensure this memory is refereced once only */ - msg_ps->vb_ptr->ident = NULL; - msg_ps->vb_ptr->ident_len = 0; - - vb->value_type = object_def.asn_type; - LWIP_ASSERT("invalid length", object_def.v_len <= 0xff); - vb->value_len = (uint8_t)object_def.v_len; - if (vb->value_len > 0) - { - LWIP_ASSERT("SNMP_MAX_OCTET_STRING_LEN is configured too low", - vb->value_len <= SNMP_MAX_VALUE_SIZE); - vb->value = memp_malloc(MEMP_SNMP_VALUE); - if (vb->value != NULL) - { - mn->get_value(&object_def, vb->value_len, vb->value); - snmp_varbind_tail_add(&msg_ps->outvb, vb); - msg_ps->state = SNMP_MSG_SEARCH_OBJ; - msg_ps->vb_idx += 1; - } - else - { - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event: couldn't allocate variable space\n")); - msg_ps->vb_ptr->ident = vb->ident; - msg_ps->vb_ptr->ident_len = vb->ident_len; - vb->ident = NULL; - vb->ident_len = 0; - memp_free(MEMP_SNMP_VARBIND, vb); - snmp_error_response(msg_ps,SNMP_ES_TOOBIG); - } - } - else - { - /* vb->value_len == 0, empty value (e.g. empty string) */ - vb->value = NULL; - snmp_varbind_tail_add(&msg_ps->outvb, vb); - msg_ps->state = SNMP_MSG_SEARCH_OBJ; - msg_ps->vb_idx += 1; - } - } - else - { - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event: couldn't allocate outvb space\n")); - snmp_error_response(msg_ps,SNMP_ES_TOOBIG); - } - } - } - } - } - else - { - mn = NULL; - } - if (mn == NULL) - { - /* mn == NULL, noSuchName */ - snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME); - } - } - if ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) && - (msg_ps->vb_idx == msg_ps->invb.count)) - { - snmp_ok_response(msg_ps); - } -} - -/** - * Service an internal or external event for SNMP GETNEXT. - * - * @param request_id identifies requests from 0 to (SNMP_CONCURRENT_REQUESTS-1) - * @param msg_ps points to the assosicated message process state - */ -static void -snmp_msg_getnext_event(uint8_t request_id, struct snmp_msg_pstat *msg_ps) -{ - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_getnext_event: msg_ps->state==%"U16_F"\n",(uint16_t)msg_ps->state)); - - if (msg_ps->state == SNMP_MSG_EXTERNAL_GET_OBJDEF) - { - struct mib_external_node *en; - - /* get_object_def() answer*/ - en = msg_ps->ext_mib_node; - - /* translate answer into a known lifeform */ - en->get_object_def_a(request_id, 1, &msg_ps->ext_oid.id[msg_ps->ext_oid.len - 1], &msg_ps->ext_object_def); - if (msg_ps->ext_object_def.instance != MIB_OBJECT_NONE) - { - msg_ps->state = SNMP_MSG_EXTERNAL_GET_VALUE; - en->get_value_q(request_id, &msg_ps->ext_object_def); - } - else - { - en->get_object_def_pc(request_id, 1, &msg_ps->ext_oid.id[msg_ps->ext_oid.len - 1]); - /* search failed, object id points to unknown object (nosuchname) */ - snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME); - } - } - else if (msg_ps->state == SNMP_MSG_EXTERNAL_GET_VALUE) - { - struct mib_external_node *en; - struct snmp_varbind *vb; - - /* get_value() answer */ - en = msg_ps->ext_mib_node; - - LWIP_ASSERT("invalid length", msg_ps->ext_object_def.v_len <= 0xff); - vb = snmp_varbind_alloc(&msg_ps->ext_oid, - msg_ps->ext_object_def.asn_type, - (uint8_t)msg_ps->ext_object_def.v_len); - if (vb != NULL) - { - en->get_value_a(request_id, &msg_ps->ext_object_def, vb->value_len, vb->value); - snmp_varbind_tail_add(&msg_ps->outvb, vb); - msg_ps->state = SNMP_MSG_SEARCH_OBJ; - msg_ps->vb_idx += 1; - } - else - { - en->get_value_pc(request_id, &msg_ps->ext_object_def); - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_getnext_event: couldn't allocate outvb space\n")); - snmp_error_response(msg_ps,SNMP_ES_TOOBIG); - } - } - - while ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) && - (msg_ps->vb_idx < msg_ps->invb.count)) - { - struct mib_node *mn; - struct snmp_obj_id oid; - - if (msg_ps->vb_idx == 0) - { - msg_ps->vb_ptr = msg_ps->invb.head; - } - else - { - msg_ps->vb_ptr = msg_ps->vb_ptr->next; - } - if (snmp_iso_prefix_expand(msg_ps->vb_ptr->ident_len, msg_ps->vb_ptr->ident, &oid)) - { - if (msg_ps->vb_ptr->ident_len > 3) - { - /* can offset ident_len and ident */ - mn = snmp_expand_tree((struct mib_node*)&internet, - msg_ps->vb_ptr->ident_len - 4, - msg_ps->vb_ptr->ident + 4, &oid); - } - else - { - /* can't offset ident_len -4, ident + 4 */ - mn = snmp_expand_tree((struct mib_node*)&internet, 0, NULL, &oid); - } - } - else - { - mn = NULL; - } - if (mn != NULL) - { - if (mn->node_type == MIB_NODE_EX) - { - /* external object */ - struct mib_external_node *en = (struct mib_external_node*)mn; - - msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF; - /* save en && args in msg_ps!! */ - msg_ps->ext_mib_node = en; - msg_ps->ext_oid = oid; - - en->get_object_def_q(en->addr_inf, request_id, 1, &oid.id[oid.len - 1]); - } - else - { - /* internal object */ - struct obj_def object_def; - struct snmp_varbind *vb; - - msg_ps->state = SNMP_MSG_INTERNAL_GET_OBJDEF; - mn->get_object_def(1, &oid.id[oid.len - 1], &object_def); - - LWIP_ASSERT("invalid length", object_def.v_len <= 0xff); - vb = snmp_varbind_alloc(&oid, object_def.asn_type, (uint8_t)object_def.v_len); - if (vb != NULL) - { - msg_ps->state = SNMP_MSG_INTERNAL_GET_VALUE; - mn->get_value(&object_def, object_def.v_len, vb->value); - snmp_varbind_tail_add(&msg_ps->outvb, vb); - msg_ps->state = SNMP_MSG_SEARCH_OBJ; - msg_ps->vb_idx += 1; - } - else - { - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_recv couldn't allocate outvb space\n")); - snmp_error_response(msg_ps,SNMP_ES_TOOBIG); - } - } - } - if (mn == NULL) - { - /* mn == NULL, noSuchName */ - snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME); - } - } - if ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) && - (msg_ps->vb_idx == msg_ps->invb.count)) - { - snmp_ok_response(msg_ps); - } -} - -/** - * Service an internal or external event for SNMP SET. - * - * @param request_id identifies requests from 0 to (SNMP_CONCURRENT_REQUESTS-1) - * @param msg_ps points to the assosicated message process state - */ -static void -snmp_msg_set_event(uint8_t request_id, struct snmp_msg_pstat *msg_ps) -{ - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_set_event: msg_ps->state==%"U16_F"\n",(uint16_t)msg_ps->state)); - - if (msg_ps->state == SNMP_MSG_EXTERNAL_GET_OBJDEF) - { - struct mib_external_node *en; - struct snmp_name_ptr np; - - /* get_object_def() answer*/ - en = msg_ps->ext_mib_node; - np = msg_ps->ext_name_ptr; - - /* translate answer into a known lifeform */ - en->get_object_def_a(request_id, np.ident_len, np.ident, &msg_ps->ext_object_def); - if (msg_ps->ext_object_def.instance != MIB_OBJECT_NONE) - { - msg_ps->state = SNMP_MSG_EXTERNAL_SET_TEST; - en->set_test_q(request_id, &msg_ps->ext_object_def); - } - else - { - en->get_object_def_pc(request_id, np.ident_len, np.ident); - /* search failed, object id points to unknown object (nosuchname) */ - snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME); - } - } - else if (msg_ps->state == SNMP_MSG_EXTERNAL_SET_TEST) - { - struct mib_external_node *en; - - /* set_test() answer*/ - en = msg_ps->ext_mib_node; - - if (msg_ps->ext_object_def.access & MIB_ACCESS_WRITE) - { - if ((msg_ps->ext_object_def.asn_type == msg_ps->vb_ptr->value_type) && - (en->set_test_a(request_id,&msg_ps->ext_object_def, - msg_ps->vb_ptr->value_len,msg_ps->vb_ptr->value) != 0)) - { - msg_ps->state = SNMP_MSG_SEARCH_OBJ; - msg_ps->vb_idx += 1; - } - else - { - en->set_test_pc(request_id,&msg_ps->ext_object_def); - /* bad value */ - snmp_error_response(msg_ps,SNMP_ES_BADVALUE); - } - } - else - { - en->set_test_pc(request_id,&msg_ps->ext_object_def); - /* object not available for set */ - snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME); - } - } - else if (msg_ps->state == SNMP_MSG_EXTERNAL_GET_OBJDEF_S) - { - struct mib_external_node *en; - struct snmp_name_ptr np; - - /* get_object_def() answer*/ - en = msg_ps->ext_mib_node; - np = msg_ps->ext_name_ptr; - - /* translate answer into a known lifeform */ - en->get_object_def_a(request_id, np.ident_len, np.ident, &msg_ps->ext_object_def); - if (msg_ps->ext_object_def.instance != MIB_OBJECT_NONE) - { - msg_ps->state = SNMP_MSG_EXTERNAL_SET_VALUE; - en->set_value_q(request_id, &msg_ps->ext_object_def, - msg_ps->vb_ptr->value_len,msg_ps->vb_ptr->value); - } - else - { - en->get_object_def_pc(request_id, np.ident_len, np.ident); - /* set_value failed, object has disappeared for some odd reason?? */ - snmp_error_response(msg_ps,SNMP_ES_GENERROR); - } - } - else if (msg_ps->state == SNMP_MSG_EXTERNAL_SET_VALUE) - { - struct mib_external_node *en; - - /** set_value_a() */ - en = msg_ps->ext_mib_node; - en->set_value_a(request_id, &msg_ps->ext_object_def, - msg_ps->vb_ptr->value_len, msg_ps->vb_ptr->value); - - /** @todo use set_value_pc() if toobig */ - msg_ps->state = SNMP_MSG_INTERNAL_SET_VALUE; - msg_ps->vb_idx += 1; - } - - /* test all values before setting */ - while ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) && - (msg_ps->vb_idx < msg_ps->invb.count)) - { - struct mib_node *mn; - struct snmp_name_ptr np; - - if (msg_ps->vb_idx == 0) - { - msg_ps->vb_ptr = msg_ps->invb.head; - } - else - { - msg_ps->vb_ptr = msg_ps->vb_ptr->next; - } - /** test object identifier for .iso.org.dod.internet prefix */ - if (snmp_iso_prefix_tst(msg_ps->vb_ptr->ident_len, msg_ps->vb_ptr->ident)) - { - mn = snmp_search_tree((struct mib_node*)&internet, msg_ps->vb_ptr->ident_len - 4, - msg_ps->vb_ptr->ident + 4, &np); - if (mn != NULL) - { - if (mn->node_type == MIB_NODE_EX) - { - /* external object */ - struct mib_external_node *en = (struct mib_external_node*)mn; - - msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF; - /* save en && args in msg_ps!! */ - msg_ps->ext_mib_node = en; - msg_ps->ext_name_ptr = np; - - en->get_object_def_q(en->addr_inf, request_id, np.ident_len, np.ident); - } - else - { - /* internal object */ - struct obj_def object_def; - - msg_ps->state = SNMP_MSG_INTERNAL_GET_OBJDEF; - mn->get_object_def(np.ident_len, np.ident, &object_def); - if (object_def.instance != MIB_OBJECT_NONE) - { - mn = mn; - } - else - { - /* search failed, object id points to unknown object (nosuchname) */ - mn = NULL; - } - if (mn != NULL) - { - msg_ps->state = SNMP_MSG_INTERNAL_SET_TEST; - - if (object_def.access & MIB_ACCESS_WRITE) - { - if ((object_def.asn_type == msg_ps->vb_ptr->value_type) && - (mn->set_test(&object_def,msg_ps->vb_ptr->value_len,msg_ps->vb_ptr->value) != 0)) - { - msg_ps->state = SNMP_MSG_SEARCH_OBJ; - msg_ps->vb_idx += 1; - } - else - { - /* bad value */ - snmp_error_response(msg_ps,SNMP_ES_BADVALUE); - } - } - else - { - /* object not available for set */ - snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME); - } - } - } - } - } - else - { - mn = NULL; - } - if (mn == NULL) - { - /* mn == NULL, noSuchName */ - snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME); - } - } - - if ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) && - (msg_ps->vb_idx == msg_ps->invb.count)) - { - msg_ps->vb_idx = 0; - msg_ps->state = SNMP_MSG_INTERNAL_SET_VALUE; - } - - /* set all values "atomically" (be as "atomic" as possible) */ - while ((msg_ps->state == SNMP_MSG_INTERNAL_SET_VALUE) && - (msg_ps->vb_idx < msg_ps->invb.count)) - { - struct mib_node *mn; - struct snmp_name_ptr np; - - if (msg_ps->vb_idx == 0) - { - msg_ps->vb_ptr = msg_ps->invb.head; - } - else - { - msg_ps->vb_ptr = msg_ps->vb_ptr->next; - } - /* skip iso prefix test, was done previously while settesting() */ - mn = snmp_search_tree((struct mib_node*)&internet, msg_ps->vb_ptr->ident_len - 4, - msg_ps->vb_ptr->ident + 4, &np); - /* check if object is still available - (e.g. external hot-plug thingy present?) */ - if (mn != NULL) - { - if (mn->node_type == MIB_NODE_EX) - { - /* external object */ - struct mib_external_node *en = (struct mib_external_node*)mn; - - msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF_S; - /* save en && args in msg_ps!! */ - msg_ps->ext_mib_node = en; - msg_ps->ext_name_ptr = np; - - en->get_object_def_q(en->addr_inf, request_id, np.ident_len, np.ident); - } - else - { - /* internal object */ - struct obj_def object_def; - - msg_ps->state = SNMP_MSG_INTERNAL_GET_OBJDEF_S; - mn->get_object_def(np.ident_len, np.ident, &object_def); - msg_ps->state = SNMP_MSG_INTERNAL_SET_VALUE; - mn->set_value(&object_def,msg_ps->vb_ptr->value_len,msg_ps->vb_ptr->value); - msg_ps->vb_idx += 1; - } - } - } - if ((msg_ps->state == SNMP_MSG_INTERNAL_SET_VALUE) && - (msg_ps->vb_idx == msg_ps->invb.count)) - { - /* simply echo the input if we can set it - @todo do we need to return the actual value? - e.g. if value is silently modified or behaves sticky? */ - msg_ps->outvb = msg_ps->invb; - msg_ps->invb.head = NULL; - msg_ps->invb.tail = NULL; - msg_ps->invb.count = 0; - snmp_ok_response(msg_ps); - } -} - - -/** - * Handle one internal or external event. - * Called for one async event. (recv external/private answer) - * - * @param request_id identifies requests from 0 to (SNMP_CONCURRENT_REQUESTS-1) - */ -void -snmp_msg_event(uint8_t request_id) -{ - struct snmp_msg_pstat *msg_ps; - - if (request_id < SNMP_CONCURRENT_REQUESTS) - { - msg_ps = &msg_input_list[request_id]; - if (msg_ps->rt == SNMP_ASN1_PDU_GET_NEXT_REQ) - { - snmp_msg_getnext_event(request_id, msg_ps); - } - else if (msg_ps->rt == SNMP_ASN1_PDU_GET_REQ) - { - snmp_msg_get_event(request_id, msg_ps); - } - else if(msg_ps->rt == SNMP_ASN1_PDU_SET_REQ) - { - snmp_msg_set_event(request_id, msg_ps); - } - } -} - - -/* lwIP UDP receive callback function */ -static void -snmp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, uint16_t port) -{ - struct snmp_msg_pstat *msg_ps; - uint8_t req_idx; - err_t err_ret; - uint16_t payload_len = p->tot_len; - uint16_t payload_ofs = 0; - uint16_t varbind_ofs = 0; - - /* suppress unused argument warning */ - LWIP_UNUSED_ARG(arg); - - /* traverse input message process list, look for SNMP_MSG_EMPTY */ - msg_ps = &msg_input_list[0]; - req_idx = 0; - while ((req_idx < SNMP_CONCURRENT_REQUESTS) && (msg_ps->state != SNMP_MSG_EMPTY)) - { - req_idx++; - msg_ps++; - } - if (req_idx == SNMP_CONCURRENT_REQUESTS) - { - /* exceeding number of concurrent requests */ - pbuf_free(p); - return; - } - - /* accepting request */ - snmp_inc_snmpinpkts(); - /* record used 'protocol control block' */ - msg_ps->pcb = pcb; - /* source address (network order) */ - msg_ps->sip = *addr; - /* source port (host order (lwIP oddity)) */ - msg_ps->sp = port; - - /* check total length, version, community, pdu type */ - err_ret = snmp_pdu_header_check(p, payload_ofs, payload_len, &varbind_ofs, msg_ps); - /* Only accept requests and requests without error (be robust) */ - /* Reject response and trap headers or error requests as input! */ - if ((err_ret != ERR_OK) || - ((msg_ps->rt != SNMP_ASN1_PDU_GET_REQ) && - (msg_ps->rt != SNMP_ASN1_PDU_GET_NEXT_REQ) && - (msg_ps->rt != SNMP_ASN1_PDU_SET_REQ)) || - ((msg_ps->error_status != SNMP_ES_NOERROR) || - (msg_ps->error_index != 0)) ) - { - /* header check failed drop request silently, do not return error! */ - pbuf_free(p); - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_pdu_header_check() failed\n")); - return; - } - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_recv ok, community %s\n", msg_ps->community)); - - /* Builds a list of variable bindings. Copy the varbinds from the pbuf - chain to glue them when these are divided over two or more pbuf's. */ - err_ret = snmp_pdu_dec_varbindlist(p, varbind_ofs, &varbind_ofs, msg_ps); - /* we've decoded the incoming message, release input msg now */ - pbuf_free(p); - if ((err_ret != ERR_OK) || (msg_ps->invb.count == 0)) - { - /* varbind-list decode failed, or varbind list empty. - drop request silently, do not return error! - (errors are only returned for a specific varbind failure) */ - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_pdu_dec_varbindlist() failed\n")); - return; - } - - msg_ps->error_status = SNMP_ES_NOERROR; - msg_ps->error_index = 0; - /* find object for each variable binding */ - msg_ps->state = SNMP_MSG_SEARCH_OBJ; - /* first variable binding from list to inspect */ - msg_ps->vb_idx = 0; - - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_recv varbind cnt=%"U16_F"\n",(uint16_t)msg_ps->invb.count)); - - /* handle input event and as much objects as possible in one go */ - snmp_msg_event(req_idx); -} - -/** - * Checks and decodes incoming SNMP message header, logs header errors. - * - * @param p points to pbuf chain of SNMP message (UDP payload) - * @param ofs points to first octet of SNMP message - * @param pdu_len the length of the UDP payload - * @param ofs_ret returns the ofset of the variable bindings - * @param m_stat points to the current message request state return - * @return - * - ERR_OK SNMP header is sane and accepted - * - ERR_ARG SNMP header is either malformed or rejected - */ -static err_t -snmp_pdu_header_check(struct pbuf *p, uint16_t ofs, uint16_t pdu_len, uint16_t *ofs_ret, struct snmp_msg_pstat *m_stat) -{ - err_t derr; - uint16_t len, ofs_base; - uint8_t len_octets; - uint8_t type; - int32_t version; - - ofs_base = ofs; - snmp_asn1_dec_type(p, ofs, &type); - derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len); - if ((derr != ERR_OK) || - (pdu_len != (1 + len_octets + len)) || - (type != (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ))) - { - snmp_inc_snmpinasnparseerrs(); - return ERR_ARG; - } - ofs += (1 + len_octets); - snmp_asn1_dec_type(p, ofs, &type); - derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len); - if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG))) - { - /* can't decode or no integer (version) */ - snmp_inc_snmpinasnparseerrs(); - return ERR_ARG; - } - derr = snmp_asn1_dec_s32t(p, ofs + 1 + len_octets, len, &version); - if (derr != ERR_OK) - { - /* can't decode */ - snmp_inc_snmpinasnparseerrs(); - return ERR_ARG; - } - if (version != 0) - { - /* not version 1 */ - snmp_inc_snmpinbadversions(); - return ERR_ARG; - } - ofs += (1 + len_octets + len); - snmp_asn1_dec_type(p, ofs, &type); - derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len); - if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR))) - { - /* can't decode or no octet string (community) */ - snmp_inc_snmpinasnparseerrs(); - return ERR_ARG; - } - derr = snmp_asn1_dec_raw(p, ofs + 1 + len_octets, len, SNMP_COMMUNITY_STR_LEN, m_stat->community); - if (derr != ERR_OK) - { - snmp_inc_snmpinasnparseerrs(); - return ERR_ARG; - } - /* add zero terminator */ - len = ((len < (SNMP_COMMUNITY_STR_LEN))?(len):(SNMP_COMMUNITY_STR_LEN)); - m_stat->community[len] = 0; - m_stat->com_strlen = (uint8_t)len; - if (strncmp(snmp_publiccommunity, (const char*)m_stat->community, SNMP_COMMUNITY_STR_LEN) != 0) - { - /** @todo: move this if we need to check more names */ - snmp_inc_snmpinbadcommunitynames(); - snmp_authfail_trap(); - return ERR_ARG; - } - ofs += (1 + len_octets + len); - snmp_asn1_dec_type(p, ofs, &type); - derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len); - if (derr != ERR_OK) - { - snmp_inc_snmpinasnparseerrs(); - return ERR_ARG; - } - switch(type) - { - case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_REQ): - /* GetRequest PDU */ - snmp_inc_snmpingetrequests(); - derr = ERR_OK; - break; - case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_NEXT_REQ): - /* GetNextRequest PDU */ - snmp_inc_snmpingetnexts(); - derr = ERR_OK; - break; - case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_RESP): - /* GetResponse PDU */ - snmp_inc_snmpingetresponses(); - derr = ERR_ARG; - break; - case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_SET_REQ): - /* SetRequest PDU */ - snmp_inc_snmpinsetrequests(); - derr = ERR_OK; - break; - case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_TRAP): - /* Trap PDU */ - snmp_inc_snmpintraps(); - derr = ERR_ARG; - break; - default: - snmp_inc_snmpinasnparseerrs(); - derr = ERR_ARG; - break; - } - if (derr != ERR_OK) - { - /* unsupported input PDU for this agent (no parse error) */ - return ERR_ARG; - } - m_stat->rt = type & 0x1F; - ofs += (1 + len_octets); - if (len != (pdu_len - (ofs - ofs_base))) - { - /* decoded PDU length does not equal actual payload length */ - snmp_inc_snmpinasnparseerrs(); - return ERR_ARG; - } - snmp_asn1_dec_type(p, ofs, &type); - derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len); - if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG))) - { - /* can't decode or no integer (request ID) */ - snmp_inc_snmpinasnparseerrs(); - return ERR_ARG; - } - derr = snmp_asn1_dec_s32t(p, ofs + 1 + len_octets, len, &m_stat->rid); - if (derr != ERR_OK) - { - /* can't decode */ - snmp_inc_snmpinasnparseerrs(); - return ERR_ARG; - } - ofs += (1 + len_octets + len); - snmp_asn1_dec_type(p, ofs, &type); - derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len); - if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG))) - { - /* can't decode or no integer (error-status) */ - snmp_inc_snmpinasnparseerrs(); - return ERR_ARG; - } - /* must be noError (0) for incoming requests. - log errors for mib-2 completeness and for debug purposes */ - derr = snmp_asn1_dec_s32t(p, ofs + 1 + len_octets, len, &m_stat->error_status); - if (derr != ERR_OK) - { - /* can't decode */ - snmp_inc_snmpinasnparseerrs(); - return ERR_ARG; - } - switch (m_stat->error_status) - { - case SNMP_ES_TOOBIG: - snmp_inc_snmpintoobigs(); - break; - case SNMP_ES_NOSUCHNAME: - snmp_inc_snmpinnosuchnames(); - break; - case SNMP_ES_BADVALUE: - snmp_inc_snmpinbadvalues(); - break; - case SNMP_ES_READONLY: - snmp_inc_snmpinreadonlys(); - break; - case SNMP_ES_GENERROR: - snmp_inc_snmpingenerrs(); - break; - } - ofs += (1 + len_octets + len); - snmp_asn1_dec_type(p, ofs, &type); - derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len); - if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG))) - { - /* can't decode or no integer (error-index) */ - snmp_inc_snmpinasnparseerrs(); - return ERR_ARG; - } - /* must be 0 for incoming requests. - decode anyway to catch bad integers (and dirty tricks) */ - derr = snmp_asn1_dec_s32t(p, ofs + 1 + len_octets, len, &m_stat->error_index); - if (derr != ERR_OK) - { - /* can't decode */ - snmp_inc_snmpinasnparseerrs(); - return ERR_ARG; - } - ofs += (1 + len_octets + len); - *ofs_ret = ofs; - return ERR_OK; -} - -static err_t -snmp_pdu_dec_varbindlist(struct pbuf *p, uint16_t ofs, uint16_t *ofs_ret, struct snmp_msg_pstat *m_stat) -{ - err_t derr; - uint16_t len, vb_len; - uint8_t len_octets; - uint8_t type; - - /* variable binding list */ - snmp_asn1_dec_type(p, ofs, &type); - derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &vb_len); - if ((derr != ERR_OK) || - (type != (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ))) - { - snmp_inc_snmpinasnparseerrs(); - return ERR_ARG; - } - ofs += (1 + len_octets); - - /* start with empty list */ - m_stat->invb.count = 0; - m_stat->invb.head = NULL; - m_stat->invb.tail = NULL; - - while (vb_len > 0) - { - struct snmp_obj_id oid, oid_value; - struct snmp_varbind *vb; - - snmp_asn1_dec_type(p, ofs, &type); - derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len); - if ((derr != ERR_OK) || - (type != (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ)) || - (len == 0) || (len > vb_len)) - { - snmp_inc_snmpinasnparseerrs(); - /* free varbinds (if available) */ - snmp_varbind_list_free(&m_stat->invb); - return ERR_ARG; - } - ofs += (1 + len_octets); - vb_len -= (1 + len_octets); - - snmp_asn1_dec_type(p, ofs, &type); - derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len); - if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID))) - { - /* can't decode object name length */ - snmp_inc_snmpinasnparseerrs(); - /* free varbinds (if available) */ - snmp_varbind_list_free(&m_stat->invb); - return ERR_ARG; - } - derr = snmp_asn1_dec_oid(p, ofs + 1 + len_octets, len, &oid); - if (derr != ERR_OK) - { - /* can't decode object name */ - snmp_inc_snmpinasnparseerrs(); - /* free varbinds (if available) */ - snmp_varbind_list_free(&m_stat->invb); - return ERR_ARG; - } - ofs += (1 + len_octets + len); - vb_len -= (1 + len_octets + len); - - snmp_asn1_dec_type(p, ofs, &type); - derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len); - if (derr != ERR_OK) - { - /* can't decode object value length */ - snmp_inc_snmpinasnparseerrs(); - /* free varbinds (if available) */ - snmp_varbind_list_free(&m_stat->invb); - return ERR_ARG; - } - - switch (type) - { - case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG): - vb = snmp_varbind_alloc(&oid, type, sizeof(int32_t)); - if (vb != NULL) - { - int32_t *vptr = (int32_t*)vb->value; - - derr = snmp_asn1_dec_s32t(p, ofs + 1 + len_octets, len, vptr); - snmp_varbind_tail_add(&m_stat->invb, vb); - } - else - { - derr = ERR_ARG; - } - break; - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER): - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE): - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS): - vb = snmp_varbind_alloc(&oid, type, sizeof(uint32_t)); - if (vb != NULL) - { - uint32_t *vptr = (uint32_t*)vb->value; - - derr = snmp_asn1_dec_u32t(p, ofs + 1 + len_octets, len, vptr); - snmp_varbind_tail_add(&m_stat->invb, vb); - } - else - { - derr = ERR_ARG; - } - break; - case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR): - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_OPAQUE): - LWIP_ASSERT("invalid length", len <= 0xff); - vb = snmp_varbind_alloc(&oid, type, (uint8_t)len); - if (vb != NULL) - { - derr = snmp_asn1_dec_raw(p, ofs + 1 + len_octets, len, vb->value_len, (uint8_t*)vb->value); - snmp_varbind_tail_add(&m_stat->invb, vb); - } - else - { - derr = ERR_ARG; - } - break; - case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_NUL): - vb = snmp_varbind_alloc(&oid, type, 0); - if (vb != NULL) - { - snmp_varbind_tail_add(&m_stat->invb, vb); - derr = ERR_OK; - } - else - { - derr = ERR_ARG; - } - break; - case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID): - derr = snmp_asn1_dec_oid(p, ofs + 1 + len_octets, len, &oid_value); - if (derr == ERR_OK) - { - vb = snmp_varbind_alloc(&oid, type, oid_value.len * sizeof(int32_t)); - if (vb != NULL) - { - uint8_t i = oid_value.len; - int32_t *vptr = (int32_t*)vb->value; - - while(i > 0) - { - i--; - vptr[i] = oid_value.id[i]; - } - snmp_varbind_tail_add(&m_stat->invb, vb); - derr = ERR_OK; - } - else - { - derr = ERR_ARG; - } - } - break; - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR): - if (len == 4) - { - /* must be exactly 4 octets! */ - vb = snmp_varbind_alloc(&oid, type, 4); - if (vb != NULL) - { - derr = snmp_asn1_dec_raw(p, ofs + 1 + len_octets, len, vb->value_len, (uint8_t*)vb->value); - snmp_varbind_tail_add(&m_stat->invb, vb); - } - else - { - derr = ERR_ARG; - } - } - else - { - derr = ERR_ARG; - } - break; - default: - derr = ERR_ARG; - break; - } - if (derr != ERR_OK) - { - snmp_inc_snmpinasnparseerrs(); - /* free varbinds (if available) */ - snmp_varbind_list_free(&m_stat->invb); - return ERR_ARG; - } - ofs += (1 + len_octets + len); - vb_len -= (1 + len_octets + len); - } - - if (m_stat->rt == SNMP_ASN1_PDU_SET_REQ) - { - snmp_add_snmpintotalsetvars(m_stat->invb.count); - } - else - { - snmp_add_snmpintotalreqvars(m_stat->invb.count); - } - - *ofs_ret = ofs; - return ERR_OK; -} - -struct snmp_varbind* -snmp_varbind_alloc(struct snmp_obj_id *oid, uint8_t type, uint8_t len) -{ - struct snmp_varbind *vb; - - vb = (struct snmp_varbind *)memp_malloc(MEMP_SNMP_VARBIND); - if (vb != NULL) - { - uint8_t i; - - vb->next = NULL; - vb->prev = NULL; - i = oid->len; - vb->ident_len = i; - if (i > 0) - { - LWIP_ASSERT("SNMP_MAX_TREE_DEPTH is configured too low", i <= SNMP_MAX_TREE_DEPTH); - /* allocate array of int32_t for our object identifier */ - vb->ident = (int32_t*)memp_malloc(MEMP_SNMP_VALUE); - if (vb->ident == NULL) - { - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_varbind_alloc: couldn't allocate ident value space\n")); - memp_free(MEMP_SNMP_VARBIND, vb); - return NULL; - } - while(i > 0) - { - i--; - vb->ident[i] = oid->id[i]; - } - } - else - { - /* i == 0, pass zero length object identifier */ - vb->ident = NULL; - } - vb->value_type = type; - vb->value_len = len; - if (len > 0) - { - LWIP_ASSERT("SNMP_MAX_OCTET_STRING_LEN is configured too low", vb->value_len <= SNMP_MAX_VALUE_SIZE); - /* allocate raw bytes for our object value */ - vb->value = memp_malloc(MEMP_SNMP_VALUE); - if (vb->value == NULL) - { - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_varbind_alloc: couldn't allocate value space\n")); - if (vb->ident != NULL) - { - memp_free(MEMP_SNMP_VALUE, vb->ident); - } - memp_free(MEMP_SNMP_VARBIND, vb); - return NULL; - } - } - else - { - /* ASN1_NUL type, or zero length ASN1_OC_STR */ - vb->value = NULL; - } - } - else - { - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_varbind_alloc: couldn't allocate varbind space\n")); - } - return vb; -} - -void -snmp_varbind_free(struct snmp_varbind *vb) -{ - if (vb->value != NULL ) - { - memp_free(MEMP_SNMP_VALUE, vb->value); - } - if (vb->ident != NULL ) - { - memp_free(MEMP_SNMP_VALUE, vb->ident); - } - memp_free(MEMP_SNMP_VARBIND, vb); -} - -void -snmp_varbind_list_free(struct snmp_varbind_root *root) -{ - struct snmp_varbind *vb, *prev; - - vb = root->tail; - while ( vb != NULL ) - { - prev = vb->prev; - snmp_varbind_free(vb); - vb = prev; - } - root->count = 0; - root->head = NULL; - root->tail = NULL; -} - -void -snmp_varbind_tail_add(struct snmp_varbind_root *root, struct snmp_varbind *vb) -{ - if (root->count == 0) - { - /* add first varbind to list */ - root->head = vb; - root->tail = vb; - } - else - { - /* add nth varbind to list tail */ - root->tail->next = vb; - vb->prev = root->tail; - root->tail = vb; - } - root->count += 1; -} - -struct snmp_varbind* -snmp_varbind_tail_remove(struct snmp_varbind_root *root) -{ - struct snmp_varbind* vb; - - if (root->count > 0) - { - /* remove tail varbind */ - vb = root->tail; - root->tail = vb->prev; - vb->prev->next = NULL; - root->count -= 1; - } - else - { - /* nothing to remove */ - vb = NULL; - } - return vb; -} - -#endif /* LWIP_SNMP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/msg_out.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/msg_out.c deleted file mode 100644 index 6ae9e68..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/snmp/msg_out.c +++ /dev/null @@ -1,674 +0,0 @@ -/** - * @file - * SNMP output message processing (RFC1157). - * - * Output responses and traps are build in two passes: - * - * Pass 0: iterate over the output message backwards to determine encoding lengths - * Pass 1: the actual forward encoding of internal form into ASN1 - * - * The single-pass encoding method described by Comer & Stevens - * requires extra buffer space and copying for reversal of the packet. - * The buffer requirement can be prohibitively large for big payloads - * (>= 484) therefore we use the two encoding passes. - */ - -/* - * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Christiaan Simons - */ - -#include "lwip/opt.h" - -#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/udp.h" -#include "lwip/netif.h" -#include "lwip/snmp.h" -#include "lwip/snmp_asn1.h" -#include "lwip/snmp_msg.h" - -struct snmp_trap_dst -{ - /* destination IP address in network order */ - ip_addr_t dip; - /* set to 0 when disabled, >0 when enabled */ - uint8_t enable; -}; -struct snmp_trap_dst trap_dst[SNMP_TRAP_DESTINATIONS]; - -/** TRAP message structure */ -struct snmp_msg_trap trap_msg; - -static uint16_t snmp_resp_header_sum(struct snmp_msg_pstat *m_stat, uint16_t vb_len); -static uint16_t snmp_trap_header_sum(struct snmp_msg_trap *m_trap, uint16_t vb_len); -static uint16_t snmp_varbind_list_sum(struct snmp_varbind_root *root); - -static uint16_t snmp_resp_header_enc(struct snmp_msg_pstat *m_stat, struct pbuf *p); -static uint16_t snmp_trap_header_enc(struct snmp_msg_trap *m_trap, struct pbuf *p); -static uint16_t snmp_varbind_list_enc(struct snmp_varbind_root *root, struct pbuf *p, uint16_t ofs); - -/** - * Sets enable switch for this trap destination. - * @param dst_idx index in 0 .. SNMP_TRAP_DESTINATIONS-1 - * @param enable switch if 0 destination is disabled >0 enabled. - */ -void -snmp_trap_dst_enable(uint8_t dst_idx, uint8_t enable) -{ - if (dst_idx < SNMP_TRAP_DESTINATIONS) - { - trap_dst[dst_idx].enable = enable; - } -} - -/** - * Sets IPv4 address for this trap destination. - * @param dst_idx index in 0 .. SNMP_TRAP_DESTINATIONS-1 - * @param dst IPv4 address in host order. - */ -void -snmp_trap_dst_ip_set(uint8_t dst_idx, ip_addr_t *dst) -{ - if (dst_idx < SNMP_TRAP_DESTINATIONS) - { - ip_addr_set(&trap_dst[dst_idx].dip, dst); - } -} - -/** - * Sends a 'getresponse' message to the request originator. - * - * @param m_stat points to the current message request state source - * @return ERR_OK when success, ERR_MEM if we're out of memory - * - * @note the caller is responsible for filling in outvb in the m_stat - * and provide error-status and index (except for tooBig errors) ... - */ -err_t -snmp_send_response(struct snmp_msg_pstat *m_stat) -{ - struct snmp_varbind_root emptyvb = {NULL, NULL, 0, 0, 0}; - struct pbuf *p; - uint16_t tot_len; - err_t err; - - /* pass 0, calculate length fields */ - tot_len = snmp_varbind_list_sum(&m_stat->outvb); - tot_len = snmp_resp_header_sum(m_stat, tot_len); - - /* try allocating pbuf(s) for complete response */ - p = pbuf_alloc(PBUF_TRANSPORT, tot_len, PBUF_POOL); - if (p == NULL) - { - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_snd_response() tooBig\n")); - - /* can't construct reply, return error-status tooBig */ - m_stat->error_status = SNMP_ES_TOOBIG; - m_stat->error_index = 0; - /* pass 0, recalculate lengths, for empty varbind-list */ - tot_len = snmp_varbind_list_sum(&emptyvb); - tot_len = snmp_resp_header_sum(m_stat, tot_len); - /* retry allocation once for header and empty varbind-list */ - p = pbuf_alloc(PBUF_TRANSPORT, tot_len, PBUF_POOL); - } - if (p != NULL) - { - /* first pbuf alloc try or retry alloc success */ - uint16_t ofs; - - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_snd_response() p != NULL\n")); - - /* pass 1, size error, encode packet ino the pbuf(s) */ - ofs = snmp_resp_header_enc(m_stat, p); - snmp_varbind_list_enc(&m_stat->outvb, p, ofs); - - switch (m_stat->error_status) - { - case SNMP_ES_TOOBIG: - snmp_inc_snmpouttoobigs(); - break; - case SNMP_ES_NOSUCHNAME: - snmp_inc_snmpoutnosuchnames(); - break; - case SNMP_ES_BADVALUE: - snmp_inc_snmpoutbadvalues(); - break; - case SNMP_ES_GENERROR: - snmp_inc_snmpoutgenerrs(); - break; - } - snmp_inc_snmpoutgetresponses(); - snmp_inc_snmpoutpkts(); - - /** @todo do we need separate rx and tx pcbs for threaded case? */ - /** connect to the originating source */ - udp_connect(m_stat->pcb, &m_stat->sip, m_stat->sp); - err = udp_send(m_stat->pcb, p); - if (err == ERR_MEM) - { - /** @todo release some memory, retry and return tooBig? tooMuchHassle? */ - err = ERR_MEM; - } - else - { - err = ERR_OK; - } - /** disassociate remote address and port with this pcb */ - udp_disconnect(m_stat->pcb); - - pbuf_free(p); - LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_snd_response() done\n")); - return err; - } - else - { - /* first pbuf alloc try or retry alloc failed - very low on memory, couldn't return tooBig */ - return ERR_MEM; - } -} - - -/** - * Sends an generic or enterprise specific trap message. - * - * @param generic_trap is the trap code - * @param eoid points to enterprise object identifier - * @param specific_trap used for enterprise traps when generic_trap == 6 - * @return ERR_OK when success, ERR_MEM if we're out of memory - * - * @note the caller is responsible for filling in outvb in the trap_msg - * @note the use of the enterpise identifier field - * is per RFC1215. - * Use .iso.org.dod.internet.mgmt.mib-2.snmp for generic traps - * and .iso.org.dod.internet.private.enterprises.yourenterprise - * (sysObjectID) for specific traps. - */ -err_t -snmp_send_trap(int8_t generic_trap, struct snmp_obj_id *eoid, int32_t specific_trap) -{ - struct snmp_trap_dst *td; - struct netif *dst_if; - ip_addr_t dst_ip; - struct pbuf *p; - uint16_t i,tot_len; - - for (i=0, td = &trap_dst[0]; ienable != 0) && !ip_addr_isany(&td->dip)) - { - /* network order trap destination */ - ip_addr_copy(trap_msg.dip, td->dip); - /* lookup current source address for this dst */ - dst_if = ip_route(&td->dip); - ip_addr_copy(dst_ip, dst_if->ip_addr); - /* @todo: what about IPv6? */ - trap_msg.sip_raw[0] = ip4_addr1(&dst_ip); - trap_msg.sip_raw[1] = ip4_addr2(&dst_ip); - trap_msg.sip_raw[2] = ip4_addr3(&dst_ip); - trap_msg.sip_raw[3] = ip4_addr4(&dst_ip); - trap_msg.gen_trap = generic_trap; - trap_msg.spc_trap = specific_trap; - if (generic_trap == SNMP_GENTRAP_ENTERPRISESPC) - { - /* enterprise-Specific trap */ - trap_msg.enterprise = eoid; - } - else - { - /* generic (MIB-II) trap */ - snmp_get_snmpgrpid_ptr(&trap_msg.enterprise); - } - snmp_get_sysuptime(&trap_msg.ts); - - /* pass 0, calculate length fields */ - tot_len = snmp_varbind_list_sum(&trap_msg.outvb); - tot_len = snmp_trap_header_sum(&trap_msg, tot_len); - - /* allocate pbuf(s) */ - p = pbuf_alloc(PBUF_TRANSPORT, tot_len, PBUF_POOL); - if (p != NULL) - { - uint16_t ofs; - - /* pass 1, encode packet ino the pbuf(s) */ - ofs = snmp_trap_header_enc(&trap_msg, p); - snmp_varbind_list_enc(&trap_msg.outvb, p, ofs); - - snmp_inc_snmpouttraps(); - snmp_inc_snmpoutpkts(); - - /** send to the TRAP destination */ - udp_sendto(trap_msg.pcb, p, &trap_msg.dip, SNMP_TRAP_PORT); - - pbuf_free(p); - } - else - { - return ERR_MEM; - } - } - } - return ERR_OK; -} - -void -snmp_coldstart_trap(void) -{ - trap_msg.outvb.head = NULL; - trap_msg.outvb.tail = NULL; - trap_msg.outvb.count = 0; - snmp_send_trap(SNMP_GENTRAP_COLDSTART, NULL, 0); -} - -void -snmp_authfail_trap(void) -{ - uint8_t enable; - snmp_get_snmpenableauthentraps(&enable); - if (enable == 1) - { - trap_msg.outvb.head = NULL; - trap_msg.outvb.tail = NULL; - trap_msg.outvb.count = 0; - snmp_send_trap(SNMP_GENTRAP_AUTHFAIL, NULL, 0); - } -} - -/** - * Sums response header field lengths from tail to head and - * returns resp_header_lengths for second encoding pass. - * - * @param vb_len varbind-list length - * @param rhl points to returned header lengths - * @return the required lenght for encoding the response header - */ -static uint16_t -snmp_resp_header_sum(struct snmp_msg_pstat *m_stat, uint16_t vb_len) -{ - uint16_t tot_len; - struct snmp_resp_header_lengths *rhl; - - rhl = &m_stat->rhl; - tot_len = vb_len; - snmp_asn1_enc_s32t_cnt(m_stat->error_index, &rhl->erridxlen); - snmp_asn1_enc_length_cnt(rhl->erridxlen, &rhl->erridxlenlen); - tot_len += 1 + rhl->erridxlenlen + rhl->erridxlen; - - snmp_asn1_enc_s32t_cnt(m_stat->error_status, &rhl->errstatlen); - snmp_asn1_enc_length_cnt(rhl->errstatlen, &rhl->errstatlenlen); - tot_len += 1 + rhl->errstatlenlen + rhl->errstatlen; - - snmp_asn1_enc_s32t_cnt(m_stat->rid, &rhl->ridlen); - snmp_asn1_enc_length_cnt(rhl->ridlen, &rhl->ridlenlen); - tot_len += 1 + rhl->ridlenlen + rhl->ridlen; - - rhl->pdulen = tot_len; - snmp_asn1_enc_length_cnt(rhl->pdulen, &rhl->pdulenlen); - tot_len += 1 + rhl->pdulenlen; - - rhl->comlen = m_stat->com_strlen; - snmp_asn1_enc_length_cnt(rhl->comlen, &rhl->comlenlen); - tot_len += 1 + rhl->comlenlen + rhl->comlen; - - snmp_asn1_enc_s32t_cnt(snmp_version, &rhl->verlen); - snmp_asn1_enc_length_cnt(rhl->verlen, &rhl->verlenlen); - tot_len += 1 + rhl->verlen + rhl->verlenlen; - - rhl->seqlen = tot_len; - snmp_asn1_enc_length_cnt(rhl->seqlen, &rhl->seqlenlen); - tot_len += 1 + rhl->seqlenlen; - - return tot_len; -} - -/** - * Sums trap header field lengths from tail to head and - * returns trap_header_lengths for second encoding pass. - * - * @param vb_len varbind-list length - * @param thl points to returned header lengths - * @return the required lenght for encoding the trap header - */ -static uint16_t -snmp_trap_header_sum(struct snmp_msg_trap *m_trap, uint16_t vb_len) -{ - uint16_t tot_len; - struct snmp_trap_header_lengths *thl; - - thl = &m_trap->thl; - tot_len = vb_len; - - snmp_asn1_enc_u32t_cnt(m_trap->ts, &thl->tslen); - snmp_asn1_enc_length_cnt(thl->tslen, &thl->tslenlen); - tot_len += 1 + thl->tslen + thl->tslenlen; - - snmp_asn1_enc_s32t_cnt(m_trap->spc_trap, &thl->strplen); - snmp_asn1_enc_length_cnt(thl->strplen, &thl->strplenlen); - tot_len += 1 + thl->strplen + thl->strplenlen; - - snmp_asn1_enc_s32t_cnt(m_trap->gen_trap, &thl->gtrplen); - snmp_asn1_enc_length_cnt(thl->gtrplen, &thl->gtrplenlen); - tot_len += 1 + thl->gtrplen + thl->gtrplenlen; - - thl->aaddrlen = 4; - snmp_asn1_enc_length_cnt(thl->aaddrlen, &thl->aaddrlenlen); - tot_len += 1 + thl->aaddrlen + thl->aaddrlenlen; - - snmp_asn1_enc_oid_cnt(m_trap->enterprise->len, &m_trap->enterprise->id[0], &thl->eidlen); - snmp_asn1_enc_length_cnt(thl->eidlen, &thl->eidlenlen); - tot_len += 1 + thl->eidlen + thl->eidlenlen; - - thl->pdulen = tot_len; - snmp_asn1_enc_length_cnt(thl->pdulen, &thl->pdulenlen); - tot_len += 1 + thl->pdulenlen; - - thl->comlen = sizeof(snmp_publiccommunity) - 1; - snmp_asn1_enc_length_cnt(thl->comlen, &thl->comlenlen); - tot_len += 1 + thl->comlenlen + thl->comlen; - - snmp_asn1_enc_s32t_cnt(snmp_version, &thl->verlen); - snmp_asn1_enc_length_cnt(thl->verlen, &thl->verlenlen); - tot_len += 1 + thl->verlen + thl->verlenlen; - - thl->seqlen = tot_len; - snmp_asn1_enc_length_cnt(thl->seqlen, &thl->seqlenlen); - tot_len += 1 + thl->seqlenlen; - - return tot_len; -} - -/** - * Sums varbind lengths from tail to head and - * annotates lengths in varbind for second encoding pass. - * - * @param root points to the root of the variable binding list - * @return the required lenght for encoding the variable bindings - */ -static uint16_t -snmp_varbind_list_sum(struct snmp_varbind_root *root) -{ - struct snmp_varbind *vb; - uint32_t *uint_ptr; - int32_t *sint_ptr; - uint16_t tot_len; - - tot_len = 0; - vb = root->tail; - while ( vb != NULL ) - { - /* encoded value lenght depends on type */ - switch (vb->value_type) - { - case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG): - sint_ptr = (int32_t*)vb->value; - snmp_asn1_enc_s32t_cnt(*sint_ptr, &vb->vlen); - break; - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER): - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE): - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS): - uint_ptr = (uint32_t*)vb->value; - snmp_asn1_enc_u32t_cnt(*uint_ptr, &vb->vlen); - break; - case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR): - case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_NUL): - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR): - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_OPAQUE): - vb->vlen = vb->value_len; - break; - case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID): - sint_ptr = (int32_t*)vb->value; - snmp_asn1_enc_oid_cnt(vb->value_len / sizeof(int32_t), sint_ptr, &vb->vlen); - break; - default: - /* unsupported type */ - vb->vlen = 0; - break; - }; - /* encoding length of value length field */ - snmp_asn1_enc_length_cnt(vb->vlen, &vb->vlenlen); - snmp_asn1_enc_oid_cnt(vb->ident_len, vb->ident, &vb->olen); - snmp_asn1_enc_length_cnt(vb->olen, &vb->olenlen); - - vb->seqlen = 1 + vb->vlenlen + vb->vlen; - vb->seqlen += 1 + vb->olenlen + vb->olen; - snmp_asn1_enc_length_cnt(vb->seqlen, &vb->seqlenlen); - - /* varbind seq */ - tot_len += 1 + vb->seqlenlen + vb->seqlen; - - vb = vb->prev; - } - - /* varbind-list seq */ - root->seqlen = tot_len; - snmp_asn1_enc_length_cnt(root->seqlen, &root->seqlenlen); - tot_len += 1 + root->seqlenlen; - - return tot_len; -} - -/** - * Encodes response header from head to tail. - */ -static uint16_t -snmp_resp_header_enc(struct snmp_msg_pstat *m_stat, struct pbuf *p) -{ - uint16_t ofs; - - ofs = 0; - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_stat->rhl.seqlen); - ofs += m_stat->rhl.seqlenlen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_stat->rhl.verlen); - ofs += m_stat->rhl.verlenlen; - snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.verlen, snmp_version); - ofs += m_stat->rhl.verlen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_stat->rhl.comlen); - ofs += m_stat->rhl.comlenlen; - snmp_asn1_enc_raw(p, ofs, m_stat->rhl.comlen, m_stat->community); - ofs += m_stat->rhl.comlen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_RESP)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_stat->rhl.pdulen); - ofs += m_stat->rhl.pdulenlen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_stat->rhl.ridlen); - ofs += m_stat->rhl.ridlenlen; - snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.ridlen, m_stat->rid); - ofs += m_stat->rhl.ridlen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_stat->rhl.errstatlen); - ofs += m_stat->rhl.errstatlenlen; - snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.errstatlen, m_stat->error_status); - ofs += m_stat->rhl.errstatlen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_stat->rhl.erridxlen); - ofs += m_stat->rhl.erridxlenlen; - snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.erridxlen, m_stat->error_index); - ofs += m_stat->rhl.erridxlen; - - return ofs; -} - -/** - * Encodes trap header from head to tail. - */ -static uint16_t -snmp_trap_header_enc(struct snmp_msg_trap *m_trap, struct pbuf *p) -{ - uint16_t ofs; - - ofs = 0; - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_trap->thl.seqlen); - ofs += m_trap->thl.seqlenlen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_trap->thl.verlen); - ofs += m_trap->thl.verlenlen; - snmp_asn1_enc_s32t(p, ofs, m_trap->thl.verlen, snmp_version); - ofs += m_trap->thl.verlen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_trap->thl.comlen); - ofs += m_trap->thl.comlenlen; - snmp_asn1_enc_raw(p, ofs, m_trap->thl.comlen, (uint8_t *)&snmp_publiccommunity[0]); - ofs += m_trap->thl.comlen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_TRAP)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_trap->thl.pdulen); - ofs += m_trap->thl.pdulenlen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_trap->thl.eidlen); - ofs += m_trap->thl.eidlenlen; - snmp_asn1_enc_oid(p, ofs, m_trap->enterprise->len, &m_trap->enterprise->id[0]); - ofs += m_trap->thl.eidlen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_trap->thl.aaddrlen); - ofs += m_trap->thl.aaddrlenlen; - snmp_asn1_enc_raw(p, ofs, m_trap->thl.aaddrlen, &m_trap->sip_raw[0]); - ofs += m_trap->thl.aaddrlen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_trap->thl.gtrplen); - ofs += m_trap->thl.gtrplenlen; - snmp_asn1_enc_u32t(p, ofs, m_trap->thl.gtrplen, m_trap->gen_trap); - ofs += m_trap->thl.gtrplen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_trap->thl.strplen); - ofs += m_trap->thl.strplenlen; - snmp_asn1_enc_u32t(p, ofs, m_trap->thl.strplen, m_trap->spc_trap); - ofs += m_trap->thl.strplen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, m_trap->thl.tslen); - ofs += m_trap->thl.tslenlen; - snmp_asn1_enc_u32t(p, ofs, m_trap->thl.tslen, m_trap->ts); - ofs += m_trap->thl.tslen; - - return ofs; -} - -/** - * Encodes varbind list from head to tail. - */ -static uint16_t -snmp_varbind_list_enc(struct snmp_varbind_root *root, struct pbuf *p, uint16_t ofs) -{ - struct snmp_varbind *vb; - int32_t *sint_ptr; - uint32_t *uint_ptr; - uint8_t *raw_ptr; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, root->seqlen); - ofs += root->seqlenlen; - - vb = root->head; - while ( vb != NULL ) - { - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, vb->seqlen); - ofs += vb->seqlenlen; - - snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID)); - ofs += 1; - snmp_asn1_enc_length(p, ofs, vb->olen); - ofs += vb->olenlen; - snmp_asn1_enc_oid(p, ofs, vb->ident_len, &vb->ident[0]); - ofs += vb->olen; - - snmp_asn1_enc_type(p, ofs, vb->value_type); - ofs += 1; - snmp_asn1_enc_length(p, ofs, vb->vlen); - ofs += vb->vlenlen; - - switch (vb->value_type) - { - case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG): - sint_ptr = (int32_t*)vb->value; - snmp_asn1_enc_s32t(p, ofs, vb->vlen, *sint_ptr); - break; - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER): - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE): - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS): - uint_ptr = (uint32_t*)vb->value; - snmp_asn1_enc_u32t(p, ofs, vb->vlen, *uint_ptr); - break; - case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR): - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR): - case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_OPAQUE): - raw_ptr = (uint8_t*)vb->value; - snmp_asn1_enc_raw(p, ofs, vb->vlen, raw_ptr); - break; - case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_NUL): - break; - case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID): - sint_ptr = (int32_t*)vb->value; - snmp_asn1_enc_oid(p, ofs, vb->value_len / sizeof(int32_t), sint_ptr); - break; - default: - /* unsupported type */ - break; - }; - ofs += vb->vlen; - vb = vb->next; - } - return ofs; -} - -#endif /* LWIP_SNMP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/stats.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/stats.c deleted file mode 100644 index b685f3f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/stats.c +++ /dev/null @@ -1,176 +0,0 @@ -/** - * @file - * Statistics module - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#if LWIP_STATS /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/def.h" -#include "lwip/stats.h" -#include "lwip/mem.h" - -#include - -struct stats_ lwip_stats; - -void stats_init(void) -{ -#ifdef LWIP_DEBUG -#if MEMP_STATS - const char * memp_names[] = { -#define LWIP_MEMPOOL(name,num,size,desc) desc, -#include "lwip/memp_std.h" - }; - int i; - for (i = 0; i < MEMP_MAX; i++) { - lwip_stats.memp[i].name = memp_names[i]; - } -#endif /* MEMP_STATS */ -#if MEM_STATS - lwip_stats.mem.name = "MEM"; -#endif /* MEM_STATS */ -#endif /* LWIP_DEBUG */ -} - -#if LWIP_STATS_DISPLAY -void -stats_display_proto(struct stats_proto *proto, const char *name) -{ - LWIP_PLATFORM_DIAG(("\n%s\n\t", name)); - LWIP_PLATFORM_DIAG(("xmit: %"STAT_COUNTER_F"\n\t", proto->xmit)); - LWIP_PLATFORM_DIAG(("recv: %"STAT_COUNTER_F"\n\t", proto->recv)); - LWIP_PLATFORM_DIAG(("fw: %"STAT_COUNTER_F"\n\t", proto->fw)); - LWIP_PLATFORM_DIAG(("drop: %"STAT_COUNTER_F"\n\t", proto->drop)); - LWIP_PLATFORM_DIAG(("chkerr: %"STAT_COUNTER_F"\n\t", proto->chkerr)); - LWIP_PLATFORM_DIAG(("lenerr: %"STAT_COUNTER_F"\n\t", proto->lenerr)); - LWIP_PLATFORM_DIAG(("memerr: %"STAT_COUNTER_F"\n\t", proto->memerr)); - LWIP_PLATFORM_DIAG(("rterr: %"STAT_COUNTER_F"\n\t", proto->rterr)); - LWIP_PLATFORM_DIAG(("proterr: %"STAT_COUNTER_F"\n\t", proto->proterr)); - LWIP_PLATFORM_DIAG(("opterr: %"STAT_COUNTER_F"\n\t", proto->opterr)); - LWIP_PLATFORM_DIAG(("err: %"STAT_COUNTER_F"\n\t", proto->err)); - LWIP_PLATFORM_DIAG(("cachehit: %"STAT_COUNTER_F"\n", proto->cachehit)); -} - -#if IGMP_STATS -void -stats_display_igmp(struct stats_igmp *igmp) -{ - LWIP_PLATFORM_DIAG(("\nIGMP\n\t")); - LWIP_PLATFORM_DIAG(("xmit: %"STAT_COUNTER_F"\n\t", igmp->xmit)); - LWIP_PLATFORM_DIAG(("recv: %"STAT_COUNTER_F"\n\t", igmp->recv)); - LWIP_PLATFORM_DIAG(("drop: %"STAT_COUNTER_F"\n\t", igmp->drop)); - LWIP_PLATFORM_DIAG(("chkerr: %"STAT_COUNTER_F"\n\t", igmp->chkerr)); - LWIP_PLATFORM_DIAG(("lenerr: %"STAT_COUNTER_F"\n\t", igmp->lenerr)); - LWIP_PLATFORM_DIAG(("memerr: %"STAT_COUNTER_F"\n\t", igmp->memerr)); - LWIP_PLATFORM_DIAG(("proterr: %"STAT_COUNTER_F"\n\t", igmp->proterr)); - LWIP_PLATFORM_DIAG(("rx_v1: %"STAT_COUNTER_F"\n\t", igmp->rx_v1)); - LWIP_PLATFORM_DIAG(("rx_group: %"STAT_COUNTER_F"\n", igmp->rx_group)); - LWIP_PLATFORM_DIAG(("rx_general: %"STAT_COUNTER_F"\n", igmp->rx_general)); - LWIP_PLATFORM_DIAG(("rx_report: %"STAT_COUNTER_F"\n\t", igmp->rx_report)); - LWIP_PLATFORM_DIAG(("tx_join: %"STAT_COUNTER_F"\n\t", igmp->tx_join)); - LWIP_PLATFORM_DIAG(("tx_leave: %"STAT_COUNTER_F"\n\t", igmp->tx_leave)); - LWIP_PLATFORM_DIAG(("tx_report: %"STAT_COUNTER_F"\n\t", igmp->tx_report)); -} -#endif /* IGMP_STATS */ - -#if MEM_STATS || MEMP_STATS -void -stats_display_mem(struct stats_mem *mem, const char *name) -{ - LWIP_PLATFORM_DIAG(("\nMEM %s\n\t", name)); - LWIP_PLATFORM_DIAG(("avail: %"U32_F"\n\t", (uint32_t)mem->avail)); - LWIP_PLATFORM_DIAG(("used: %"U32_F"\n\t", (uint32_t)mem->used)); - LWIP_PLATFORM_DIAG(("max: %"U32_F"\n\t", (uint32_t)mem->max)); - LWIP_PLATFORM_DIAG(("err: %"U32_F"\n", (uint32_t)mem->err)); -} - -#if MEMP_STATS -void -stats_display_memp(struct stats_mem *mem, int index) -{ - char * memp_names[] = { -#define LWIP_MEMPOOL(name,num,size,desc) desc, -#include "lwip/memp_std.h" - }; - if(index < MEMP_MAX) { - stats_display_mem(mem, memp_names[index]); - } -} -#endif /* MEMP_STATS */ -#endif /* MEM_STATS || MEMP_STATS */ - -#if SYS_STATS -void -stats_display_sys(struct stats_sys *sys) -{ - LWIP_PLATFORM_DIAG(("\nSYS\n\t")); - LWIP_PLATFORM_DIAG(("sem.used: %"U32_F"\n\t", (uint32_t)sys->sem.used)); - LWIP_PLATFORM_DIAG(("sem.max: %"U32_F"\n\t", (uint32_t)sys->sem.max)); - LWIP_PLATFORM_DIAG(("sem.err: %"U32_F"\n\t", (uint32_t)sys->sem.err)); - LWIP_PLATFORM_DIAG(("mutex.used: %"U32_F"\n\t", (uint32_t)sys->mutex.used)); - LWIP_PLATFORM_DIAG(("mutex.max: %"U32_F"\n\t", (uint32_t)sys->mutex.max)); - LWIP_PLATFORM_DIAG(("mutex.err: %"U32_F"\n\t", (uint32_t)sys->mutex.err)); - LWIP_PLATFORM_DIAG(("mbox.used: %"U32_F"\n\t", (uint32_t)sys->mbox.used)); - LWIP_PLATFORM_DIAG(("mbox.max: %"U32_F"\n\t", (uint32_t)sys->mbox.max)); - LWIP_PLATFORM_DIAG(("mbox.err: %"U32_F"\n\t", (uint32_t)sys->mbox.err)); -} -#endif /* SYS_STATS */ - -void -stats_display(void) -{ - int16_t i; - - LINK_STATS_DISPLAY(); - ETHARP_STATS_DISPLAY(); - IPFRAG_STATS_DISPLAY(); - IP_STATS_DISPLAY(); - IGMP_STATS_DISPLAY(); - ICMP_STATS_DISPLAY(); - UDP_STATS_DISPLAY(); - TCP_STATS_DISPLAY(); - MEM_STATS_DISPLAY(); - for (i = 0; i < MEMP_MAX; i++) { - MEMP_STATS_DISPLAY(i); - } - SYS_STATS_DISPLAY(); -} -#endif /* LWIP_STATS_DISPLAY */ - -#endif /* LWIP_STATS */ - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/sys.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/sys.c deleted file mode 100644 index 62ca97f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/sys.c +++ /dev/null @@ -1,68 +0,0 @@ -/** - * @file - * lwIP Operating System abstraction - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#include "lwip/sys.h" - -/* Most of the functions defined in sys.h must be implemented in the - * architecture-dependent file sys_arch.c */ - -#if !NO_SYS - -#ifndef sys_msleep -/** - * Sleep for some ms. Timeouts are NOT processed while sleeping. - * - * @param ms number of milliseconds to sleep - */ -void -sys_msleep(uint32_t ms) -{ - if (ms > 0) { - sys_sem_t delaysem; - err_t err = sys_sem_new(&delaysem, 0); - if (err == ERR_OK) { - sys_arch_sem_wait(&delaysem, ms); - sys_sem_free(&delaysem); - } - } -} -#endif /* sys_msleep */ - -#endif /* !NO_SYS */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/tcp.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/tcp.c deleted file mode 100644 index 1149f36..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/tcp.c +++ /dev/null @@ -1,1741 +0,0 @@ -/** - * @file - * Transmission Control Protocol for IP - * - * This file contains common functions for the TCP implementation, such as functinos - * for manipulating the data structures and the TCP timer functions. TCP functions - * related to input and output is found in tcp_in.c and tcp_out.c respectively. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/memp.h" -#include "lwip/snmp.h" -#include "lwip/tcp.h" -#include "lwip/tcp_impl.h" -#include "lwip/debug.h" -#include "lwip/stats.h" - -#include - -#ifndef TCP_LOCAL_PORT_RANGE_START -/* From http://www.iana.org/assignments/port-numbers: - "The Dynamic and/or Private Ports are those from 49152 through 65535" */ -#define TCP_LOCAL_PORT_RANGE_START 0xc000 -#define TCP_LOCAL_PORT_RANGE_END 0xffff -#define TCP_ENSURE_LOCAL_PORT_RANGE(port) (((port) & ~TCP_LOCAL_PORT_RANGE_START) + TCP_LOCAL_PORT_RANGE_START) -#endif - -#if LWIP_TCP_KEEPALIVE -#define TCP_KEEP_DUR(pcb) ((pcb)->keep_cnt * (pcb)->keep_intvl) -#define TCP_KEEP_INTVL(pcb) ((pcb)->keep_intvl) -#else /* LWIP_TCP_KEEPALIVE */ -#define TCP_KEEP_DUR(pcb) TCP_MAXIDLE -#define TCP_KEEP_INTVL(pcb) TCP_KEEPINTVL_DEFAULT -#endif /* LWIP_TCP_KEEPALIVE */ - -const char * const tcp_state_str[] = { - "CLOSED", - "LISTEN", - "SYN_SENT", - "SYN_RCVD", - "ESTABLISHED", - "FIN_WAIT_1", - "FIN_WAIT_2", - "CLOSE_WAIT", - "CLOSING", - "LAST_ACK", - "TIME_WAIT" -}; - -/* last local TCP port */ -static uint16_t tcp_port = TCP_LOCAL_PORT_RANGE_START; - -/* Incremented every coarse grained timer shot (typically every 500 ms). */ -uint32_t tcp_ticks; -const uint8_t tcp_backoff[13] = - { 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7}; - /* Times per slowtmr hits */ -const uint8_t tcp_persist_backoff[7] = { 3, 6, 12, 24, 48, 96, 120 }; - -/* The TCP PCB lists. */ - -/** List of all TCP PCBs bound but not yet (connected || listening) */ -struct tcp_pcb *tcp_bound_pcbs; -/** List of all TCP PCBs in LISTEN state */ -union tcp_listen_pcbs_t tcp_listen_pcbs; -/** List of all TCP PCBs that are in a state in which - * they accept or send data. */ -struct tcp_pcb *tcp_active_pcbs; -/** List of all TCP PCBs in TIME-WAIT state */ -struct tcp_pcb *tcp_tw_pcbs; - -#define NUM_TCP_PCB_LISTS 4 -#define NUM_TCP_PCB_LISTS_NO_TIME_WAIT 3 -/** An array with all (non-temporary) PCB lists, mainly used for smaller code size */ -struct tcp_pcb ** const tcp_pcb_lists[] = {&tcp_listen_pcbs.pcbs, &tcp_bound_pcbs, - &tcp_active_pcbs, &tcp_tw_pcbs}; - -/** Only used for temporary storage. */ -struct tcp_pcb *tcp_tmp_pcb; - -uint8_t tcp_active_pcbs_changed; - -/** Timer counter to handle calling slow-timer from tcp_tmr() */ -static uint8_t tcp_timer; -static uint8_t tcp_timer_ctr; -static uint16_t tcp_new_port(void); - -/** - * Initialize this module. - */ -void -tcp_init(void) -{ -#if LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS && defined(LWIP_RAND) - tcp_port = TCP_ENSURE_LOCAL_PORT_RANGE(LWIP_RAND()); -#endif /* LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS && defined(LWIP_RAND) */ -} - -/** - * Called periodically to dispatch TCP timers. - */ -void -tcp_tmr(void) -{ - /* Call tcp_fasttmr() every 250 ms */ - tcp_fasttmr(); - - if (++tcp_timer & 1) { - /* Call tcp_tmr() every 500 ms, i.e., every other timer - tcp_tmr() is called. */ - tcp_slowtmr(); - } -} - -/** - * Closes the TX side of a connection held by the PCB. - * For tcp_close(), a RST is sent if the application didn't receive all data - * (tcp_recved() not called for all data passed to recv callback). - * - * Listening pcbs are freed and may not be referenced any more. - * Connection pcbs are freed if not yet connected and may not be referenced - * any more. If a connection is established (at least SYN received or in - * a closing state), the connection is closed, and put in a closing state. - * The pcb is then automatically freed in tcp_slowtmr(). It is therefore - * unsafe to reference it. - * - * @param pcb the tcp_pcb to close - * @return ERR_OK if connection has been closed - * another err_t if closing failed and pcb is not freed - */ -static err_t -tcp_close_shutdown(struct tcp_pcb *pcb, uint8_t rst_on_unacked_data) -{ - err_t err; - - if (rst_on_unacked_data && ((pcb->state == ESTABLISHED) || (pcb->state == CLOSE_WAIT))) { - if ((pcb->refused_data != NULL) || (pcb->rcv_wnd != TCP_WND)) { - /* Not all data received by application, send RST to tell the remote - side about this. */ - LWIP_ASSERT("pcb->flags & TF_RXCLOSED", pcb->flags & TF_RXCLOSED); - - /* don't call tcp_abort here: we must not deallocate the pcb since - that might not be expected when calling tcp_close */ - tcp_rst(pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip, - pcb->local_port, pcb->remote_port); - - tcp_pcb_purge(pcb); - TCP_RMV_ACTIVE(pcb); - if (pcb->state == ESTABLISHED) { - /* move to TIME_WAIT since we close actively */ - pcb->state = TIME_WAIT; - TCP_REG(&tcp_tw_pcbs, pcb); - } else { - /* CLOSE_WAIT: deallocate the pcb since we already sent a RST for it */ - memp_free(MEMP_TCP_PCB, pcb); - } - return ERR_OK; - } - } - - switch (pcb->state) { - case CLOSED: - /* Closing a pcb in the CLOSED state might seem erroneous, - * however, it is in this state once allocated and as yet unused - * and the user needs some way to free it should the need arise. - * Calling tcp_close() with a pcb that has already been closed, (i.e. twice) - * or for a pcb that has been used and then entered the CLOSED state - * is erroneous, but this should never happen as the pcb has in those cases - * been freed, and so any remaining handles are bogus. */ - err = ERR_OK; - if (pcb->local_port != 0) { - TCP_RMV(&tcp_bound_pcbs, pcb); - } - memp_free(MEMP_TCP_PCB, pcb); - pcb = NULL; - break; - case LISTEN: - err = ERR_OK; - tcp_pcb_remove(&tcp_listen_pcbs.pcbs, pcb); - memp_free(MEMP_TCP_PCB_LISTEN, pcb); - pcb = NULL; - break; - case SYN_SENT: - err = ERR_OK; - TCP_PCB_REMOVE_ACTIVE(pcb); - memp_free(MEMP_TCP_PCB, pcb); - pcb = NULL; - snmp_inc_tcpattemptfails(); - break; - case SYN_RCVD: - err = tcp_send_fin(pcb); - if (err == ERR_OK) { - snmp_inc_tcpattemptfails(); - pcb->state = FIN_WAIT_1; - } - break; - case ESTABLISHED: - err = tcp_send_fin(pcb); - if (err == ERR_OK) { - snmp_inc_tcpestabresets(); - pcb->state = FIN_WAIT_1; - } - break; - case CLOSE_WAIT: - err = tcp_send_fin(pcb); - if (err == ERR_OK) { - snmp_inc_tcpestabresets(); - pcb->state = LAST_ACK; - } - break; - default: - /* Has already been closed, do nothing. */ - err = ERR_OK; - pcb = NULL; - break; - } - - if (pcb != NULL && err == ERR_OK) { - /* To ensure all data has been sent when tcp_close returns, we have - to make sure tcp_output doesn't fail. - Since we don't really have to ensure all data has been sent when tcp_close - returns (unsent data is sent from tcp timer functions, also), we don't care - for the return value of tcp_output for now. */ - /* @todo: When implementing SO_LINGER, this must be changed somehow: - If SOF_LINGER is set, the data should be sent and acked before close returns. - This can only be valid for sequential APIs, not for the raw API. */ - tcp_output(pcb); - } - return err; -} - -/** - * Closes the connection held by the PCB. - * - * Listening pcbs are freed and may not be referenced any more. - * Connection pcbs are freed if not yet connected and may not be referenced - * any more. If a connection is established (at least SYN received or in - * a closing state), the connection is closed, and put in a closing state. - * The pcb is then automatically freed in tcp_slowtmr(). It is therefore - * unsafe to reference it (unless an error is returned). - * - * @param pcb the tcp_pcb to close - * @return ERR_OK if connection has been closed - * another err_t if closing failed and pcb is not freed - */ -err_t -tcp_close(struct tcp_pcb *pcb) -{ -#if TCP_DEBUG - LWIP_DEBUGF(TCP_DEBUG, ("tcp_close: closing in ")); - tcp_debug_print_state(pcb->state); -#endif /* TCP_DEBUG */ - - if (pcb->state != LISTEN) { - /* Set a flag not to receive any more data... */ - pcb->flags |= TF_RXCLOSED; - } - /* ... and close */ - return tcp_close_shutdown(pcb, 1); -} - -/** - * Causes all or part of a full-duplex connection of this PCB to be shut down. - * This doesn't deallocate the PCB unless shutting down both sides! - * Shutting down both sides is the same as calling tcp_close, so if it succeds, - * the PCB should not be referenced any more. - * - * @param pcb PCB to shutdown - * @param shut_rx shut down receive side if this is != 0 - * @param shut_tx shut down send side if this is != 0 - * @return ERR_OK if shutdown succeeded (or the PCB has already been shut down) - * another err_t on error. - */ -err_t -tcp_shutdown(struct tcp_pcb *pcb, int shut_rx, int shut_tx) -{ - if (pcb->state == LISTEN) { - return ERR_CONN; - } - if (shut_rx) { - /* shut down the receive side: set a flag not to receive any more data... */ - pcb->flags |= TF_RXCLOSED; - if (shut_tx) { - /* shutting down the tx AND rx side is the same as closing for the raw API */ - return tcp_close_shutdown(pcb, 1); - } - /* ... and free buffered data */ - if (pcb->refused_data != NULL) { - pbuf_free(pcb->refused_data); - pcb->refused_data = NULL; - } - } - if (shut_tx) { - /* This can't happen twice since if it succeeds, the pcb's state is changed. - Only close in these states as the others directly deallocate the PCB */ - switch (pcb->state) { - case SYN_RCVD: - case ESTABLISHED: - case CLOSE_WAIT: - return tcp_close_shutdown(pcb, shut_rx); - default: - /* Not (yet?) connected, cannot shutdown the TX side as that would bring us - into CLOSED state, where the PCB is deallocated. */ - return ERR_CONN; - } - } - return ERR_OK; -} - -/** - * Abandons a connection and optionally sends a RST to the remote - * host. Deletes the local protocol control block. This is done when - * a connection is killed because of shortage of memory. - * - * @param pcb the tcp_pcb to abort - * @param reset boolean to indicate whether a reset should be sent - */ -void -tcp_abandon(struct tcp_pcb *pcb, int reset) -{ - uint32_t seqno, ackno; -#if LWIP_CALLBACK_API - tcp_err_fn errf; -#endif /* LWIP_CALLBACK_API */ - void *errf_arg; - - /* pcb->state LISTEN not allowed here */ - LWIP_ASSERT("don't call tcp_abort/tcp_abandon for listen-pcbs", - pcb->state != LISTEN); - /* Figure out on which TCP PCB list we are, and remove us. If we - are in an active state, call the receive function associated with - the PCB with a NULL argument, and send an RST to the remote end. */ - if (pcb->state == TIME_WAIT) { - tcp_pcb_remove(&tcp_tw_pcbs, pcb); - memp_free(MEMP_TCP_PCB, pcb); - } else { - seqno = pcb->snd_nxt; - ackno = pcb->rcv_nxt; -#if LWIP_CALLBACK_API - errf = pcb->errf; -#endif /* LWIP_CALLBACK_API */ - errf_arg = pcb->callback_arg; - TCP_PCB_REMOVE_ACTIVE(pcb); - if (pcb->unacked != NULL) { - tcp_segs_free(pcb->unacked); - } - if (pcb->unsent != NULL) { - tcp_segs_free(pcb->unsent); - } -#if TCP_QUEUE_OOSEQ - if (pcb->ooseq != NULL) { - tcp_segs_free(pcb->ooseq); - } -#endif /* TCP_QUEUE_OOSEQ */ - if (reset) { - LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_abandon: sending RST\n")); - tcp_rst(seqno, ackno, &pcb->local_ip, &pcb->remote_ip, pcb->local_port, pcb->remote_port); - } - memp_free(MEMP_TCP_PCB, pcb); - TCP_EVENT_ERR(errf, errf_arg, ERR_ABRT); - } -} - -/** - * Aborts the connection by sending a RST (reset) segment to the remote - * host. The pcb is deallocated. This function never fails. - * - * ATTENTION: When calling this from one of the TCP callbacks, make - * sure you always return ERR_ABRT (and never return ERR_ABRT otherwise - * or you will risk accessing deallocated memory or memory leaks! - * - * @param pcb the tcp pcb to abort - */ -void -tcp_abort(struct tcp_pcb *pcb) -{ - tcp_abandon(pcb, 1); -} - -/** - * Binds the connection to a local portnumber and IP address. If the - * IP address is not given (i.e., ipaddr == NULL), the IP address of - * the outgoing network interface is used instead. - * - * @param pcb the tcp_pcb to bind (no check is done whether this pcb is - * already bound!) - * @param ipaddr the local ip address to bind to (use IP_ADDR_ANY to bind - * to any local address - * @param port the local port to bind to - * @return ERR_USE if the port is already in use - * ERR_VAL if bind failed because the PCB is not in a valid state - * ERR_OK if bound - */ -err_t -tcp_bind(struct tcp_pcb *pcb, ip_addr_t *ipaddr, uint16_t port) -{ - int i; - int max_pcb_list = NUM_TCP_PCB_LISTS; - struct tcp_pcb *cpcb; - - LWIP_ERROR("tcp_bind: can only bind in state CLOSED", pcb->state == CLOSED, return ERR_VAL); - -#if SO_REUSE - /* Unless the REUSEADDR flag is set, - we have to check the pcbs in TIME-WAIT state, also. - We do not dump TIME_WAIT pcb's; they can still be matched by incoming - packets using both local and remote IP addresses and ports to distinguish. - */ - if (ip_get_option(pcb, SOF_REUSEADDR)) { - max_pcb_list = NUM_TCP_PCB_LISTS_NO_TIME_WAIT; - } -#endif /* SO_REUSE */ - - if (port == 0) { - port = tcp_new_port(); - if (port == 0) { - return ERR_BUF; - } - } - - /* Check if the address already is in use (on all lists) */ - for (i = 0; i < max_pcb_list; i++) { - for(cpcb = *tcp_pcb_lists[i]; cpcb != NULL; cpcb = cpcb->next) { - if (cpcb->local_port == port) { -#if SO_REUSE - /* Omit checking for the same port if both pcbs have REUSEADDR set. - For SO_REUSEADDR, the duplicate-check for a 5-tuple is done in - tcp_connect. */ - if (!ip_get_option(pcb, SOF_REUSEADDR) || - !ip_get_option(cpcb, SOF_REUSEADDR)) -#endif /* SO_REUSE */ - { - if (ip_addr_isany(&(cpcb->local_ip)) || - ip_addr_isany(ipaddr) || - ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { - return ERR_USE; - } - } - } - } - } - - if (!ip_addr_isany(ipaddr)) { - pcb->local_ip = *ipaddr; - } - pcb->local_port = port; - TCP_REG(&tcp_bound_pcbs, pcb); - LWIP_DEBUGF(TCP_DEBUG, ("tcp_bind: bind to port %"U16_F"\n", port)); - return ERR_OK; -} -#if LWIP_CALLBACK_API -/** - * Default accept callback if no accept callback is specified by the user. - */ -static err_t -tcp_accept_null(void *arg, struct tcp_pcb *pcb, err_t err) -{ - LWIP_UNUSED_ARG(arg); - LWIP_UNUSED_ARG(pcb); - LWIP_UNUSED_ARG(err); - - return ERR_ABRT; -} -#endif /* LWIP_CALLBACK_API */ - -/** - * Set the state of the connection to be LISTEN, which means that it - * is able to accept incoming connections. The protocol control block - * is reallocated in order to consume less memory. Setting the - * connection to LISTEN is an irreversible process. - * - * @param pcb the original tcp_pcb - * @param backlog the incoming connections queue limit - * @return tcp_pcb used for listening, consumes less memory. - * - * @note The original tcp_pcb is freed. This function therefore has to be - * called like this: - * tpcb = tcp_listen(tpcb); - */ -struct tcp_pcb * -tcp_listen_with_backlog(struct tcp_pcb *pcb, uint8_t backlog) -{ - struct tcp_pcb_listen *lpcb; - - LWIP_UNUSED_ARG(backlog); - LWIP_ERROR("tcp_listen: pcb already connected", pcb->state == CLOSED, return NULL); - - /* already listening? */ - if (pcb->state == LISTEN) { - return pcb; - } -#if SO_REUSE - if (ip_get_option(pcb, SOF_REUSEADDR)) { - /* Since SOF_REUSEADDR allows reusing a local address before the pcb's usage - is declared (listen-/connection-pcb), we have to make sure now that - this port is only used once for every local IP. */ - for(lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { - if (lpcb->local_port == pcb->local_port) { - if (ip_addr_cmp(&lpcb->local_ip, &pcb->local_ip)) { - /* this address/port is already used */ - return NULL; - } - } - } - } -#endif /* SO_REUSE */ - lpcb = (struct tcp_pcb_listen *)memp_malloc(MEMP_TCP_PCB_LISTEN); - if (lpcb == NULL) { - return NULL; - } - lpcb->callback_arg = pcb->callback_arg; - lpcb->local_port = pcb->local_port; - lpcb->state = LISTEN; - lpcb->prio = pcb->prio; - lpcb->so_options = pcb->so_options; - ip_set_option(lpcb, SOF_ACCEPTCONN); - lpcb->ttl = pcb->ttl; - lpcb->tos = pcb->tos; - ip_addr_copy(lpcb->local_ip, pcb->local_ip); - if (pcb->local_port != 0) { - TCP_RMV(&tcp_bound_pcbs, pcb); - } - memp_free(MEMP_TCP_PCB, pcb); -#if LWIP_CALLBACK_API - lpcb->accept = tcp_accept_null; -#endif /* LWIP_CALLBACK_API */ -#if TCP_LISTEN_BACKLOG - lpcb->accepts_pending = 0; - lpcb->backlog = (backlog ? backlog : 1); -#endif /* TCP_LISTEN_BACKLOG */ - TCP_REG(&tcp_listen_pcbs.pcbs, (struct tcp_pcb *)lpcb); - return (struct tcp_pcb *)lpcb; -} - -/** - * Update the state that tracks the available window space to advertise. - * - * Returns how much extra window would be advertised if we sent an - * update now. - */ -uint32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb) -{ - uint32_t new_right_edge = pcb->rcv_nxt + pcb->rcv_wnd; - - if (TCP_SEQ_GEQ(new_right_edge, pcb->rcv_ann_right_edge + LWIP_MIN((TCP_WND / 2), pcb->mss))) { - /* we can advertise more window */ - pcb->rcv_ann_wnd = pcb->rcv_wnd; - return new_right_edge - pcb->rcv_ann_right_edge; - } else { - if (TCP_SEQ_GT(pcb->rcv_nxt, pcb->rcv_ann_right_edge)) { - /* Can happen due to other end sending out of advertised window, - * but within actual available (but not yet advertised) window */ - pcb->rcv_ann_wnd = 0; - } else { - /* keep the right edge of window constant */ - uint32_t new_rcv_ann_wnd = pcb->rcv_ann_right_edge - pcb->rcv_nxt; - LWIP_ASSERT("new_rcv_ann_wnd <= 0xffff", new_rcv_ann_wnd <= 0xffff); - pcb->rcv_ann_wnd = (uint16_t)new_rcv_ann_wnd; - } - return 0; - } -} - -/** - * This function should be called by the application when it has - * processed the data. The purpose is to advertise a larger window - * when the data has been processed. - * - * @param pcb the tcp_pcb for which data is read - * @param len the amount of bytes that have been read by the application - */ -void -tcp_recved(struct tcp_pcb *pcb, uint16_t len) -{ - int wnd_inflation; - - /* pcb->state LISTEN not allowed here */ - LWIP_ASSERT("don't call tcp_recved for listen-pcbs", - pcb->state != LISTEN); - LWIP_ASSERT("tcp_recved: len would wrap rcv_wnd\n", - len <= 0xffff - pcb->rcv_wnd ); - - pcb->rcv_wnd += len; - if (pcb->rcv_wnd > TCP_WND) { - pcb->rcv_wnd = TCP_WND; - } - - wnd_inflation = tcp_update_rcv_ann_wnd(pcb); - - /* If the change in the right edge of window is significant (default - * watermark is TCP_WND/4), then send an explicit update now. - * Otherwise wait for a packet to be sent in the normal course of - * events (or more window to be available later) */ - if (wnd_inflation >= TCP_WND_UPDATE_THRESHOLD) { - tcp_ack_now(pcb); - tcp_output(pcb); - } - - LWIP_DEBUGF(TCP_DEBUG, ("tcp_recved: recveived %"U16_F" bytes, wnd %"U16_F" (%"U16_F").\n", - len, pcb->rcv_wnd, TCP_WND - pcb->rcv_wnd)); -} - -/** - * Allocate a new local TCP port. - * - * @return a new (free) local TCP port number - */ -static uint16_t -tcp_new_port(void) -{ - uint8_t i; - uint16_t n = 0; - struct tcp_pcb *pcb; - -again: - if (tcp_port++ == TCP_LOCAL_PORT_RANGE_END) { - tcp_port = TCP_LOCAL_PORT_RANGE_START; - } - /* Check all PCB lists. */ - for (i = 0; i < NUM_TCP_PCB_LISTS; i++) { - for(pcb = *tcp_pcb_lists[i]; pcb != NULL; pcb = pcb->next) { - if (pcb->local_port == tcp_port) { - if (++n > (TCP_LOCAL_PORT_RANGE_END - TCP_LOCAL_PORT_RANGE_START)) { - return 0; - } - goto again; - } - } - } - return tcp_port; -} - -/** - * Connects to another host. The function given as the "connected" - * argument will be called when the connection has been established. - * - * @param pcb the tcp_pcb used to establish the connection - * @param ipaddr the remote ip address to connect to - * @param port the remote tcp port to connect to - * @param connected callback function to call when connected (or on error) - * @return ERR_VAL if invalid arguments are given - * ERR_OK if connect request has been sent - * other err_t values if connect request couldn't be sent - */ -err_t -tcp_connect(struct tcp_pcb *pcb, ip_addr_t *ipaddr, uint16_t port, - tcp_connected_fn connected) -{ - err_t ret; - uint32_t iss; - uint16_t old_local_port; - - LWIP_ERROR("tcp_connect: can only connect from state CLOSED", pcb->state == CLOSED, return ERR_ISCONN); - - LWIP_DEBUGF(TCP_DEBUG, ("tcp_connect to port %"U16_F"\n", port)); - if (ipaddr != NULL) { - pcb->remote_ip = *ipaddr; - } else { - return ERR_VAL; - } - pcb->remote_port = port; - - /* check if we have a route to the remote host */ - if (ip_addr_isany(&(pcb->local_ip))) { - /* no local IP address set, yet. */ - struct netif *netif = ip_route(&(pcb->remote_ip)); - if (netif == NULL) { - /* Don't even try to send a SYN packet if we have no route - since that will fail. */ - return ERR_RTE; - } - /* Use the netif's IP address as local address. */ - ip_addr_copy(pcb->local_ip, netif->ip_addr); - } - - old_local_port = pcb->local_port; - if (pcb->local_port == 0) { - pcb->local_port = tcp_new_port(); - if (pcb->local_port == 0) { - return ERR_BUF; - } - } -#if SO_REUSE - if (ip_get_option(pcb, SOF_REUSEADDR)) { - /* Since SOF_REUSEADDR allows reusing a local address, we have to make sure - now that the 5-tuple is unique. */ - struct tcp_pcb *cpcb; - int i; - /* Don't check listen- and bound-PCBs, check active- and TIME-WAIT PCBs. */ - for (i = 2; i < NUM_TCP_PCB_LISTS; i++) { - for(cpcb = *tcp_pcb_lists[i]; cpcb != NULL; cpcb = cpcb->next) { - if ((cpcb->local_port == pcb->local_port) && - (cpcb->remote_port == port) && - ip_addr_cmp(&cpcb->local_ip, &pcb->local_ip) && - ip_addr_cmp(&cpcb->remote_ip, ipaddr)) { - /* linux returns EISCONN here, but ERR_USE should be OK for us */ - return ERR_USE; - } - } - } - } -#endif /* SO_REUSE */ - iss = tcp_next_iss(); - pcb->rcv_nxt = 0; - pcb->snd_nxt = iss; - pcb->lastack = iss - 1; - pcb->snd_lbb = iss - 1; - pcb->rcv_wnd = TCP_WND; - pcb->rcv_ann_wnd = TCP_WND; - pcb->rcv_ann_right_edge = pcb->rcv_nxt; - pcb->snd_wnd = TCP_WND; - /* As initial send MSS, we use TCP_MSS but limit it to 536. - The send MSS is updated when an MSS option is received. */ - pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS; -#if TCP_CALCULATE_EFF_SEND_MSS - pcb->mss = tcp_eff_send_mss(pcb->mss, ipaddr); -#endif /* TCP_CALCULATE_EFF_SEND_MSS */ - pcb->cwnd = 1; - pcb->ssthresh = pcb->mss * 10; -#if LWIP_CALLBACK_API - pcb->connected = connected; -#else /* LWIP_CALLBACK_API */ - LWIP_UNUSED_ARG(connected); -#endif /* LWIP_CALLBACK_API */ - - /* Send a SYN together with the MSS option. */ - ret = tcp_enqueue_flags(pcb, TCP_SYN); - if (ret == ERR_OK) { - /* SYN segment was enqueued, changed the pcbs state now */ - pcb->state = SYN_SENT; - if (old_local_port != 0) { - TCP_RMV(&tcp_bound_pcbs, pcb); - } - TCP_REG_ACTIVE(pcb); - snmp_inc_tcpactiveopens(); - - tcp_output(pcb); - } - return ret; -} - -/** - * Called every 500 ms and implements the retransmission timer and the timer that - * removes PCBs that have been in TIME-WAIT for enough time. It also increments - * various timers such as the inactivity timer in each PCB. - * - * Automatically called from tcp_tmr(). - */ -void -tcp_slowtmr(void) -{ - struct tcp_pcb *pcb, *prev; - uint16_t eff_wnd; - uint8_t pcb_remove; /* flag if a PCB should be removed */ - uint8_t pcb_reset; /* flag if a RST should be sent when removing */ - err_t err; - - err = ERR_OK; - - ++tcp_ticks; - ++tcp_timer_ctr; - -tcp_slowtmr_start: - /* Steps through all of the active PCBs. */ - prev = NULL; - pcb = tcp_active_pcbs; - if (pcb == NULL) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: no active pcbs\n")); - } - while (pcb != NULL) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: processing active pcb\n")); - LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSED\n", pcb->state != CLOSED); - LWIP_ASSERT("tcp_slowtmr: active pcb->state != LISTEN\n", pcb->state != LISTEN); - LWIP_ASSERT("tcp_slowtmr: active pcb->state != TIME-WAIT\n", pcb->state != TIME_WAIT); - if (pcb->last_timer == tcp_timer_ctr) { - /* skip this pcb, we have already processed it */ - pcb = pcb->next; - continue; - } - pcb->last_timer = tcp_timer_ctr; - - pcb_remove = 0; - pcb_reset = 0; - - if (pcb->state == SYN_SENT && pcb->nrtx == TCP_SYNMAXRTX) { - ++pcb_remove; - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max SYN retries reached\n")); - } - else if (pcb->nrtx == TCP_MAXRTX) { - ++pcb_remove; - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max DATA retries reached\n")); - } else { - if (pcb->persist_backoff > 0) { - /* If snd_wnd is zero, use persist timer to send 1 byte probes - * instead of using the standard retransmission mechanism. */ - pcb->persist_cnt++; - if (pcb->persist_cnt >= tcp_persist_backoff[pcb->persist_backoff-1]) { - pcb->persist_cnt = 0; - if (pcb->persist_backoff < sizeof(tcp_persist_backoff)) { - pcb->persist_backoff++; - } - tcp_zero_window_probe(pcb); - } - } else { - /* Increase the retransmission timer if it is running */ - if(pcb->rtime >= 0) { - ++pcb->rtime; - } - - if (pcb->unacked != NULL && pcb->rtime >= pcb->rto) { - /* Time for a retransmission. */ - LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_slowtmr: rtime %"S16_F - " pcb->rto %"S16_F"\n", - pcb->rtime, pcb->rto)); - - /* Double retransmission time-out unless we are trying to - * connect to somebody (i.e., we are in SYN_SENT). */ - if (pcb->state != SYN_SENT) { - pcb->rto = ((pcb->sa >> 3) + pcb->sv) << tcp_backoff[pcb->nrtx]; - } - - /* Reset the retransmission timer. */ - pcb->rtime = 0; - - /* Reduce congestion window and ssthresh. */ - eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd); - pcb->ssthresh = eff_wnd >> 1; - if (pcb->ssthresh < (pcb->mss << 1)) { - pcb->ssthresh = (pcb->mss << 1); - } - pcb->cwnd = pcb->mss; - LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: cwnd %"U16_F - " ssthresh %"U16_F"\n", - pcb->cwnd, pcb->ssthresh)); - - /* The following needs to be called AFTER cwnd is set to one - mss - STJ */ - tcp_rexmit_rto(pcb); - } - } - } - /* Check if this PCB has stayed too long in FIN-WAIT-2 */ - if (pcb->state == FIN_WAIT_2) { - /* If this PCB is in FIN_WAIT_2 because of SHUT_WR don't let it time out. */ - if (pcb->flags & TF_RXCLOSED) { - /* PCB was fully closed (either through close() or SHUT_RDWR): - normal FIN-WAIT timeout handling. */ - if ((uint32_t)(tcp_ticks - pcb->tmr) > - TCP_FIN_WAIT_TIMEOUT / TCP_SLOW_INTERVAL) { - ++pcb_remove; - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in FIN-WAIT-2\n")); - } - } - } - - /* Check if KEEPALIVE should be sent */ - if(ip_get_option(pcb, SOF_KEEPALIVE) && - ((pcb->state == ESTABLISHED) || - (pcb->state == FIN_WAIT_1) || //modified by realtek - (pcb->state == CLOSE_WAIT))) { - if((uint32_t)(tcp_ticks - pcb->tmr) > - (pcb->keep_idle + TCP_KEEP_DUR(pcb)) / TCP_SLOW_INTERVAL) - { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: KEEPALIVE timeout. Aborting connection to %"U16_F".%"U16_F".%"U16_F".%"U16_F".\n", - ip4_addr1_16(&pcb->remote_ip), ip4_addr2_16(&pcb->remote_ip), - ip4_addr3_16(&pcb->remote_ip), ip4_addr4_16(&pcb->remote_ip))); - - ++pcb_remove; - ++pcb_reset; - } - else if((uint32_t)(tcp_ticks - pcb->tmr) > - (pcb->keep_idle + pcb->keep_cnt_sent * TCP_KEEP_INTVL(pcb)) - / TCP_SLOW_INTERVAL) - { - tcp_keepalive(pcb); - pcb->keep_cnt_sent++; - } - } - - /* If this PCB has queued out of sequence data, but has been - inactive for too long, will drop the data (it will eventually - be retransmitted). */ -#if TCP_QUEUE_OOSEQ - if (pcb->ooseq != NULL && - (uint32_t)tcp_ticks - pcb->tmr >= pcb->rto * TCP_OOSEQ_TIMEOUT) { - tcp_segs_free(pcb->ooseq); - pcb->ooseq = NULL; - LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: dropping OOSEQ queued data\n")); - } -#endif /* TCP_QUEUE_OOSEQ */ - - /* Check if this PCB has stayed too long in SYN-RCVD */ - if (pcb->state == SYN_RCVD) { - if ((uint32_t)(tcp_ticks - pcb->tmr) > - TCP_SYN_RCVD_TIMEOUT / TCP_SLOW_INTERVAL) { - ++pcb_remove; - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in SYN-RCVD\n")); - } - } - - /* Check if this PCB has stayed too long in LAST-ACK */ - if (pcb->state == LAST_ACK) { - if ((uint32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { - ++pcb_remove; - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in LAST-ACK\n")); - } - } - - /* If the PCB should be removed, do it. */ - if (pcb_remove) { - struct tcp_pcb *pcb2; - tcp_err_fn err_fn; - void *err_arg; - tcp_pcb_purge(pcb); - /* Remove PCB from tcp_active_pcbs list. */ - if (prev != NULL) { - LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_active_pcbs", pcb != tcp_active_pcbs); - prev->next = pcb->next; - } else { - /* This PCB was the first. */ - LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_active_pcbs", tcp_active_pcbs == pcb); - tcp_active_pcbs = pcb->next; - } - - if (pcb_reset) { - tcp_rst(pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip, - pcb->local_port, pcb->remote_port); - } - - err_fn = pcb->errf; - err_arg = pcb->callback_arg; - pcb2 = pcb; - pcb = pcb->next; - memp_free(MEMP_TCP_PCB, pcb2); - - tcp_active_pcbs_changed = 0; - TCP_EVENT_ERR(err_fn, err_arg, ERR_ABRT); - if (tcp_active_pcbs_changed) { - goto tcp_slowtmr_start; - } - } else { - /* get the 'next' element now and work with 'prev' below (in case of abort) */ - prev = pcb; - pcb = pcb->next; - - /* We check if we should poll the connection. */ - ++prev->polltmr; - if (prev->polltmr >= prev->pollinterval) { - prev->polltmr = 0; - LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: polling application\n")); - tcp_active_pcbs_changed = 0; - TCP_EVENT_POLL(prev, err); - if (tcp_active_pcbs_changed) { - goto tcp_slowtmr_start; - } - /* if err == ERR_ABRT, 'prev' is already deallocated */ - if (err == ERR_OK) { - tcp_output(prev); - } - } - } - } - - - /* Steps through all of the TIME-WAIT PCBs. */ - prev = NULL; - pcb = tcp_tw_pcbs; - while (pcb != NULL) { - LWIP_ASSERT("tcp_slowtmr: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); - pcb_remove = 0; - - /* Check if this PCB has stayed long enough in TIME-WAIT */ - if ((uint32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { - ++pcb_remove; - } - - /* If the PCB should be removed, do it. */ - if (pcb_remove) { - struct tcp_pcb *pcb2; - tcp_pcb_purge(pcb); - /* Remove PCB from tcp_tw_pcbs list. */ - if (prev != NULL) { - LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_tw_pcbs", pcb != tcp_tw_pcbs); - prev->next = pcb->next; - } else { - /* This PCB was the first. */ - LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_tw_pcbs", tcp_tw_pcbs == pcb); - tcp_tw_pcbs = pcb->next; - } - pcb2 = pcb; - pcb = pcb->next; - memp_free(MEMP_TCP_PCB, pcb2); - } else { - prev = pcb; - pcb = pcb->next; - } - } -} - -/** - * Is called every TCP_FAST_INTERVAL (250 ms) and process data previously - * "refused" by upper layer (application) and sends delayed ACKs. - * - * Automatically called from tcp_tmr(). - */ -void -tcp_fasttmr(void) -{ - struct tcp_pcb *pcb; - - ++tcp_timer_ctr; - -tcp_fasttmr_start: - pcb = tcp_active_pcbs; - - while(pcb != NULL) { - if (pcb->last_timer != tcp_timer_ctr) { - struct tcp_pcb *next; - pcb->last_timer = tcp_timer_ctr; - /* send delayed ACKs */ - if (pcb->flags & TF_ACK_DELAY) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_fasttmr: delayed ACK\n")); - tcp_ack_now(pcb); - tcp_output(pcb); - pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); - } - - next = pcb->next; - - /* If there is data which was previously "refused" by upper layer */ - if (pcb->refused_data != NULL) { - tcp_active_pcbs_changed = 0; - tcp_process_refused_data(pcb); - if (tcp_active_pcbs_changed) { - /* application callback has changed the pcb list: restart the loop */ - goto tcp_fasttmr_start; - } - } - pcb = next; - } - } -} - -/** Pass pcb->refused_data to the recv callback */ -err_t -tcp_process_refused_data(struct tcp_pcb *pcb) -{ - err_t err; - uint8_t refused_flags = pcb->refused_data->flags; - /* set pcb->refused_data to NULL in case the callback frees it and then - closes the pcb */ - struct pbuf *refused_data = pcb->refused_data; - pcb->refused_data = NULL; - /* Notify again application with data previously received. */ - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: notify kept packet\n")); - TCP_EVENT_RECV(pcb, refused_data, ERR_OK, err); - if (err == ERR_OK) { - /* did refused_data include a FIN? */ - if (refused_flags & PBUF_FLAG_TCP_FIN) { - /* correct rcv_wnd as the application won't call tcp_recved() - for the FIN's seqno */ - if (pcb->rcv_wnd != TCP_WND) { - pcb->rcv_wnd++; - } - TCP_EVENT_CLOSED(pcb, err); - if (err == ERR_ABRT) { - return ERR_ABRT; - } - } - } else if (err == ERR_ABRT) { - /* if err == ERR_ABRT, 'pcb' is already deallocated */ - /* Drop incoming packets because pcb is "full" (only if the incoming - segment contains data). */ - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: drop incoming packets, because pcb is \"full\"\n")); - return ERR_ABRT; - } else { - /* data is still refused, pbuf is still valid (go on for ACK-only packets) */ - pcb->refused_data = refused_data; - } - return ERR_OK; -} - -/** - * Deallocates a list of TCP segments (tcp_seg structures). - * - * @param seg tcp_seg list of TCP segments to free - */ -void -tcp_segs_free(struct tcp_seg *seg) -{ - while (seg != NULL) { - struct tcp_seg *next = seg->next; - tcp_seg_free(seg); - seg = next; - } -} - -/** - * Frees a TCP segment (tcp_seg structure). - * - * @param seg single tcp_seg to free - */ -void -tcp_seg_free(struct tcp_seg *seg) -{ - if (seg != NULL) { - if (seg->p != NULL) { - pbuf_free(seg->p); -#if TCP_DEBUG - seg->p = NULL; -#endif /* TCP_DEBUG */ - } - memp_free(MEMP_TCP_SEG, seg); - } -} - -/** - * Sets the priority of a connection. - * - * @param pcb the tcp_pcb to manipulate - * @param prio new priority - */ -void -tcp_setprio(struct tcp_pcb *pcb, uint8_t prio) -{ - pcb->prio = prio; -} - -#if TCP_QUEUE_OOSEQ -/** - * Returns a copy of the given TCP segment. - * The pbuf and data are not copied, only the pointers - * - * @param seg the old tcp_seg - * @return a copy of seg - */ -struct tcp_seg * -tcp_seg_copy(struct tcp_seg *seg) -{ - struct tcp_seg *cseg; - - cseg = (struct tcp_seg *)memp_malloc(MEMP_TCP_SEG); - if (cseg == NULL) { - return NULL; - } - SMEMCPY((uint8_t *)cseg, (const uint8_t *)seg, sizeof(struct tcp_seg)); - pbuf_ref(cseg->p); - return cseg; -} -#endif /* TCP_QUEUE_OOSEQ */ - -#if LWIP_CALLBACK_API -/** - * Default receive callback that is called if the user didn't register - * a recv callback for the pcb. - */ -err_t -tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) -{ - LWIP_UNUSED_ARG(arg); - if (p != NULL) { - tcp_recved(pcb, p->tot_len); - pbuf_free(p); - } else if (err == ERR_OK) { - return tcp_close(pcb); - } - return ERR_OK; -} -#endif /* LWIP_CALLBACK_API */ - -/** - * Kills the oldest active connection that has the same or lower priority than - * 'prio'. - * - * @param prio minimum priority - */ -static void -tcp_kill_prio(uint8_t prio) -{ - struct tcp_pcb *pcb, *inactive; - uint32_t inactivity; - uint8_t mprio; - - - mprio = TCP_PRIO_MAX; - - /* We kill the oldest active connection that has lower priority than prio. */ - inactivity = 0; - inactive = NULL; - for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { - if (pcb->prio <= prio && - pcb->prio <= mprio && - (uint32_t)(tcp_ticks - pcb->tmr) >= inactivity) { - inactivity = tcp_ticks - pcb->tmr; - inactive = pcb; - mprio = pcb->prio; - } - } - if (inactive != NULL) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_prio: killing oldest PCB %p (%"S32_F")\n", - (void *)inactive, inactivity)); - tcp_abort(inactive); - } -} - -/** - * Kills the oldest connection that is in TIME_WAIT state. - * Called from tcp_alloc() if no more connections are available. - */ -static void -tcp_kill_timewait(void) -{ - struct tcp_pcb *pcb, *inactive; - uint32_t inactivity; - - inactivity = 0; - inactive = NULL; - /* Go through the list of TIME_WAIT pcbs and get the oldest pcb. */ - for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { - if ((uint32_t)(tcp_ticks - pcb->tmr) >= inactivity) { - inactivity = tcp_ticks - pcb->tmr; - inactive = pcb; - } - } - if (inactive != NULL) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_timewait: killing oldest TIME-WAIT PCB %p (%"S32_F")\n", - (void *)inactive, inactivity)); - tcp_abort(inactive); - } -} - -/** - * Allocate a new tcp_pcb structure. - * - * @param prio priority for the new pcb - * @return a new tcp_pcb that initially is in state CLOSED - */ -struct tcp_pcb * -tcp_alloc(uint8_t prio) -{ - struct tcp_pcb *pcb; - uint32_t iss; - - pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); - if (pcb == NULL) { - /* Try killing oldest connection in TIME-WAIT. */ - LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest TIME-WAIT connection\n")); - tcp_kill_timewait(); - /* Try to allocate a tcp_pcb again. */ - pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); - if (pcb == NULL) { - /* Try killing active connections with lower priority than the new one. */ - LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing connection with prio lower than %d\n", prio)); - tcp_kill_prio(prio); - /* Try to allocate a tcp_pcb again. */ - pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); - if (pcb != NULL) { - /* adjust err stats: memp_malloc failed twice before */ - MEMP_STATS_DEC(err, MEMP_TCP_PCB); - } - } - if (pcb != NULL) { - /* adjust err stats: timewait PCB was freed above */ - MEMP_STATS_DEC(err, MEMP_TCP_PCB); - } - } - if (pcb != NULL) { - memset(pcb, 0, sizeof(struct tcp_pcb)); - pcb->prio = prio; - pcb->snd_buf = TCP_SND_BUF; - pcb->snd_queuelen = 0; - pcb->rcv_wnd = TCP_WND; - pcb->rcv_ann_wnd = TCP_WND; - pcb->tos = 0; - pcb->ttl = TCP_TTL; - /* As initial send MSS, we use TCP_MSS but limit it to 536. - The send MSS is updated when an MSS option is received. */ - pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS; - pcb->rto = 3000 / TCP_SLOW_INTERVAL; - pcb->sa = 0; - pcb->sv = 3000 / TCP_SLOW_INTERVAL; - pcb->rtime = -1; - pcb->cwnd = 1; - iss = tcp_next_iss(); - pcb->snd_wl2 = iss; - pcb->snd_nxt = iss; - pcb->lastack = iss; - pcb->snd_lbb = iss; - pcb->tmr = tcp_ticks; - pcb->last_timer = tcp_timer_ctr; - - pcb->polltmr = 0; - -#if LWIP_CALLBACK_API - pcb->recv = tcp_recv_null; -#endif /* LWIP_CALLBACK_API */ - - /* Init KEEPALIVE timer */ - pcb->keep_idle = TCP_KEEPIDLE_DEFAULT; - -#if LWIP_TCP_KEEPALIVE - pcb->keep_intvl = TCP_KEEPINTVL_DEFAULT; - pcb->keep_cnt = TCP_KEEPCNT_DEFAULT; -#endif /* LWIP_TCP_KEEPALIVE */ - - pcb->keep_cnt_sent = 0; - } - return pcb; -} - -/** - * Creates a new TCP protocol control block but doesn't place it on - * any of the TCP PCB lists. - * The pcb is not put on any list until binding using tcp_bind(). - * - * @internal: Maybe there should be a idle TCP PCB list where these - * PCBs are put on. Port reservation using tcp_bind() is implemented but - * allocated pcbs that are not bound can't be killed automatically if wanting - * to allocate a pcb with higher prio (@see tcp_kill_prio()) - * - * @return a new tcp_pcb that initially is in state CLOSED - */ -struct tcp_pcb * -tcp_new(void) -{ - return tcp_alloc(TCP_PRIO_NORMAL); -} - -/** - * Used to specify the argument that should be passed callback - * functions. - * - * @param pcb tcp_pcb to set the callback argument - * @param arg void pointer argument to pass to callback functions - */ -void -tcp_arg(struct tcp_pcb *pcb, void *arg) -{ - /* This function is allowed to be called for both listen pcbs and - connection pcbs. */ - pcb->callback_arg = arg; -} -#if LWIP_CALLBACK_API - -/** - * Used to specify the function that should be called when a TCP - * connection receives data. - * - * @param pcb tcp_pcb to set the recv callback - * @param recv callback function to call for this pcb when data is received - */ -void -tcp_recv(struct tcp_pcb *pcb, tcp_recv_fn recv) -{ - LWIP_ASSERT("invalid socket state for recv callback", pcb->state != LISTEN); - pcb->recv = recv; -} - -/** - * Used to specify the function that should be called when TCP data - * has been successfully delivered to the remote host. - * - * @param pcb tcp_pcb to set the sent callback - * @param sent callback function to call for this pcb when data is successfully sent - */ -void -tcp_sent(struct tcp_pcb *pcb, tcp_sent_fn sent) -{ - LWIP_ASSERT("invalid socket state for sent callback", pcb->state != LISTEN); - pcb->sent = sent; -} - -/** - * Used to specify the function that should be called when a fatal error - * has occured on the connection. - * - * @param pcb tcp_pcb to set the err callback - * @param err callback function to call for this pcb when a fatal error - * has occured on the connection - */ -void -tcp_err(struct tcp_pcb *pcb, tcp_err_fn err) -{ - LWIP_ASSERT("invalid socket state for err callback", pcb->state != LISTEN); - pcb->errf = err; -} - -/** - * Used for specifying the function that should be called when a - * LISTENing connection has been connected to another host. - * - * @param pcb tcp_pcb to set the accept callback - * @param accept callback function to call for this pcb when LISTENing - * connection has been connected to another host - */ -void -tcp_accept(struct tcp_pcb *pcb, tcp_accept_fn accept) -{ - /* This function is allowed to be called for both listen pcbs and - connection pcbs. */ - pcb->accept = accept; -} -#endif /* LWIP_CALLBACK_API */ - - -/** - * Used to specify the function that should be called periodically - * from TCP. The interval is specified in terms of the TCP coarse - * timer interval, which is called twice a second. - * - */ -void -tcp_poll(struct tcp_pcb *pcb, tcp_poll_fn poll, uint8_t interval) -{ - LWIP_ASSERT("invalid socket state for poll", pcb->state != LISTEN); -#if LWIP_CALLBACK_API - pcb->poll = poll; -#else /* LWIP_CALLBACK_API */ - LWIP_UNUSED_ARG(poll); -#endif /* LWIP_CALLBACK_API */ - pcb->pollinterval = interval; -} - -/** - * Purges a TCP PCB. Removes any buffered data and frees the buffer memory - * (pcb->ooseq, pcb->unsent and pcb->unacked are freed). - * - * @param pcb tcp_pcb to purge. The pcb itself is not deallocated! - */ -void -tcp_pcb_purge(struct tcp_pcb *pcb) -{ - if (pcb->state != CLOSED && - pcb->state != TIME_WAIT && - pcb->state != LISTEN) { - - LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge\n")); - -#if TCP_LISTEN_BACKLOG - if (pcb->state == SYN_RCVD) { - /* Need to find the corresponding listen_pcb and decrease its accepts_pending */ - struct tcp_pcb_listen *lpcb; - LWIP_ASSERT("tcp_pcb_purge: pcb->state == SYN_RCVD but tcp_listen_pcbs is NULL", - tcp_listen_pcbs.listen_pcbs != NULL); - for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { - if ((lpcb->local_port == pcb->local_port) && - (ip_addr_isany(&lpcb->local_ip) || - ip_addr_cmp(&pcb->local_ip, &lpcb->local_ip))) { - /* port and address of the listen pcb match the timed-out pcb */ - LWIP_ASSERT("tcp_pcb_purge: listen pcb does not have accepts pending", - lpcb->accepts_pending > 0); - lpcb->accepts_pending--; - break; - } - } - } -#endif /* TCP_LISTEN_BACKLOG */ - - - if (pcb->refused_data != NULL) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->refused_data\n")); - pbuf_free(pcb->refused_data); - pcb->refused_data = NULL; - } - if (pcb->unsent != NULL) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: not all data sent\n")); - } - if (pcb->unacked != NULL) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->unacked\n")); - } -#if TCP_QUEUE_OOSEQ - if (pcb->ooseq != NULL) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->ooseq\n")); - } - tcp_segs_free(pcb->ooseq); - pcb->ooseq = NULL; -#endif /* TCP_QUEUE_OOSEQ */ - - /* Stop the retransmission timer as it will expect data on unacked - queue if it fires */ - pcb->rtime = -1; - - tcp_segs_free(pcb->unsent); - tcp_segs_free(pcb->unacked); - pcb->unacked = pcb->unsent = NULL; -#if TCP_OVERSIZE - pcb->unsent_oversize = 0; -#endif /* TCP_OVERSIZE */ - } -} - -/** - * Purges the PCB and removes it from a PCB list. Any delayed ACKs are sent first. - * - * @param pcblist PCB list to purge. - * @param pcb tcp_pcb to purge. The pcb itself is NOT deallocated! - */ -void -tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb) -{ - TCP_RMV(pcblist, pcb); - - tcp_pcb_purge(pcb); - - /* if there is an outstanding delayed ACKs, send it */ - if (pcb->state != TIME_WAIT && - pcb->state != LISTEN && - pcb->flags & TF_ACK_DELAY) { - pcb->flags |= TF_ACK_NOW; - tcp_output(pcb); - } - - if (pcb->state != LISTEN) { - LWIP_ASSERT("unsent segments leaking", pcb->unsent == NULL); - LWIP_ASSERT("unacked segments leaking", pcb->unacked == NULL); -#if TCP_QUEUE_OOSEQ - LWIP_ASSERT("ooseq segments leaking", pcb->ooseq == NULL); -#endif /* TCP_QUEUE_OOSEQ */ - } - - pcb->state = CLOSED; - - LWIP_ASSERT("tcp_pcb_remove: tcp_pcbs_sane()", tcp_pcbs_sane()); -} - -/** - * Calculates a new initial sequence number for new connections. - * - * @return uint32_t pseudo random sequence number - */ -uint32_t -tcp_next_iss(void) -{ - static uint32_t iss = 6510; - - iss += tcp_ticks; /* XXX */ - return iss; -} - -#if TCP_CALCULATE_EFF_SEND_MSS -/** - * Calcluates the effective send mss that can be used for a specific IP address - * by using ip_route to determin the netif used to send to the address and - * calculating the minimum of TCP_MSS and that netif's mtu (if set). - */ -uint16_t -tcp_eff_send_mss(uint16_t sendmss, ip_addr_t *addr) -{ - uint16_t mss_s; - struct netif *outif; - - outif = ip_route(addr); - if ((outif != NULL) && (outif->mtu != 0)) { - mss_s = outif->mtu - IP_HLEN - TCP_HLEN; - /* RFC 1122, chap 4.2.2.6: - * Eff.snd.MSS = min(SendMSS+20, MMS_S) - TCPhdrsize - IPoptionsize - * We correct for TCP options in tcp_write(), and don't support IP options. - */ - sendmss = LWIP_MIN(sendmss, mss_s); - } - return sendmss; -} -#endif /* TCP_CALCULATE_EFF_SEND_MSS */ - -const char* -tcp_debug_state_str(enum tcp_state s) -{ - return tcp_state_str[s]; -} - -#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG -/** - * Print a tcp header for debugging purposes. - * - * @param tcphdr pointer to a struct tcp_hdr - */ -void -tcp_debug_print(struct tcp_hdr *tcphdr) -{ - LWIP_DEBUGF(TCP_DEBUG, ("TCP header:\n")); - LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(TCP_DEBUG, ("| %5"U16_F" | %5"U16_F" | (src port, dest port)\n", - ntohs(tcphdr->src), ntohs(tcphdr->dest))); - LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(TCP_DEBUG, ("| %010"U32_F" | (seq no)\n", - ntohl(tcphdr->seqno))); - LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(TCP_DEBUG, ("| %010"U32_F" | (ack no)\n", - ntohl(tcphdr->ackno))); - LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(TCP_DEBUG, ("| %2"U16_F" | |%"U16_F"%"U16_F"%"U16_F"%"U16_F"%"U16_F"%"U16_F"| %5"U16_F" | (hdrlen, flags (", - TCPH_HDRLEN(tcphdr), - TCPH_FLAGS(tcphdr) >> 5 & 1, - TCPH_FLAGS(tcphdr) >> 4 & 1, - TCPH_FLAGS(tcphdr) >> 3 & 1, - TCPH_FLAGS(tcphdr) >> 2 & 1, - TCPH_FLAGS(tcphdr) >> 1 & 1, - TCPH_FLAGS(tcphdr) & 1, - ntohs(tcphdr->wnd))); - tcp_debug_print_flags(TCPH_FLAGS(tcphdr)); - LWIP_DEBUGF(TCP_DEBUG, ("), win)\n")); - LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(TCP_DEBUG, ("| 0x%04"X16_F" | %5"U16_F" | (chksum, urgp)\n", - ntohs(tcphdr->chksum), ntohs(tcphdr->urgp))); - LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); -} - -/** - * Print a tcp state for debugging purposes. - * - * @param s enum tcp_state to print - */ -void -tcp_debug_print_state(enum tcp_state s) -{ - LWIP_DEBUGF(TCP_DEBUG, ("State: %s\n", tcp_state_str[s])); -} - -/** - * Print tcp flags for debugging purposes. - * - * @param flags tcp flags, all active flags are printed - */ -void -tcp_debug_print_flags(uint8_t flags) -{ - if (flags & TCP_FIN) { - LWIP_DEBUGF(TCP_DEBUG, ("FIN ")); - } - if (flags & TCP_SYN) { - LWIP_DEBUGF(TCP_DEBUG, ("SYN ")); - } - if (flags & TCP_RST) { - LWIP_DEBUGF(TCP_DEBUG, ("RST ")); - } - if (flags & TCP_PSH) { - LWIP_DEBUGF(TCP_DEBUG, ("PSH ")); - } - if (flags & TCP_ACK) { - LWIP_DEBUGF(TCP_DEBUG, ("ACK ")); - } - if (flags & TCP_URG) { - LWIP_DEBUGF(TCP_DEBUG, ("URG ")); - } - if (flags & TCP_ECE) { - LWIP_DEBUGF(TCP_DEBUG, ("ECE ")); - } - if (flags & TCP_CWR) { - LWIP_DEBUGF(TCP_DEBUG, ("CWR ")); - } - LWIP_DEBUGF(TCP_DEBUG, ("\n")); -} - -/** - * Print all tcp_pcbs in every list for debugging purposes. - */ -void -tcp_debug_print_pcbs(void) -{ - struct tcp_pcb *pcb; - LWIP_DEBUGF(TCP_DEBUG, ("Active PCB states:\n")); - for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { - LWIP_DEBUGF(TCP_DEBUG, ("Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", - pcb->local_port, pcb->remote_port, - pcb->snd_nxt, pcb->rcv_nxt)); - tcp_debug_print_state(pcb->state); - } - LWIP_DEBUGF(TCP_DEBUG, ("Listen PCB states:\n")); - for(pcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; pcb != NULL; pcb = pcb->next) { - LWIP_DEBUGF(TCP_DEBUG, ("Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", - pcb->local_port, pcb->remote_port, - pcb->snd_nxt, pcb->rcv_nxt)); - tcp_debug_print_state(pcb->state); - } - LWIP_DEBUGF(TCP_DEBUG, ("TIME-WAIT PCB states:\n")); - for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { - LWIP_DEBUGF(TCP_DEBUG, ("Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", - pcb->local_port, pcb->remote_port, - pcb->snd_nxt, pcb->rcv_nxt)); - tcp_debug_print_state(pcb->state); - } -} - -/** - * Check state consistency of the tcp_pcb lists. - */ -int16_t -tcp_pcbs_sane(void) -{ - struct tcp_pcb *pcb; - for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { - LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != CLOSED", pcb->state != CLOSED); - LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != LISTEN", pcb->state != LISTEN); - LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); - } - for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { - LWIP_ASSERT("tcp_pcbs_sane: tw pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); - } - return 1; -} -#endif /* TCP_DEBUG */ - -#endif /* LWIP_TCP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/tcp_in.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/tcp_in.c deleted file mode 100644 index acc330c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/tcp_in.c +++ /dev/null @@ -1,1619 +0,0 @@ -/** - * @file - * Transmission Control Protocol, incoming traffic - * - * The input processing functions of the TCP layer. - * - * These functions are generally called in the order (ip_input() ->) - * tcp_input() -> * tcp_process() -> tcp_receive() (-> application). - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/tcp_impl.h" -#include "lwip/def.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/mem.h" -#include "lwip/memp.h" -#include "lwip/inet_chksum.h" -#include "lwip/stats.h" -#include "lwip/snmp.h" -#include "arch/perf.h" - -/* These variables are global to all functions involved in the input - processing of TCP segments. They are set by the tcp_input() - function. */ -static struct tcp_seg inseg; -static struct tcp_hdr *tcphdr; -static struct ip_hdr *iphdr; -static uint32_t seqno, ackno; -static uint8_t flags; -static uint16_t tcplen; - -static uint8_t recv_flags; -static struct pbuf *recv_data; - -struct tcp_pcb *tcp_input_pcb; - -/* Forward declarations. */ -static err_t tcp_process(struct tcp_pcb *pcb); -static void tcp_receive(struct tcp_pcb *pcb); -static void tcp_parseopt(struct tcp_pcb *pcb); - -static err_t tcp_listen_input(struct tcp_pcb_listen *pcb); -static err_t tcp_timewait_input(struct tcp_pcb *pcb); - -/** - * The initial input processing of TCP. It verifies the TCP header, demultiplexes - * the segment between the PCBs and passes it on to tcp_process(), which implements - * the TCP finite state machine. This function is called by the IP layer (in - * ip_input()). - * - * @param p received TCP segment to process (p->payload pointing to the IP header) - * @param inp network interface on which this segment was received - */ -void -tcp_input(struct pbuf *p, struct netif *inp) -{ - struct tcp_pcb *pcb, *prev; - struct tcp_pcb_listen *lpcb; -#if SO_REUSE - struct tcp_pcb *lpcb_prev = NULL; - struct tcp_pcb_listen *lpcb_any = NULL; -#endif /* SO_REUSE */ - uint8_t hdrlen; - err_t err; - - PERF_START; - - TCP_STATS_INC(tcp.recv); - snmp_inc_tcpinsegs(); - - iphdr = (struct ip_hdr *)p->payload; - tcphdr = (struct tcp_hdr *)((uint8_t *)p->payload + IPH_HL(iphdr) * 4); - -#if TCP_INPUT_DEBUG - tcp_debug_print(tcphdr); -#endif - - /* remove header from payload */ - if (pbuf_header(p, -((int16_t)(IPH_HL(iphdr) * 4))) || (p->tot_len < sizeof(struct tcp_hdr))) { - /* drop short packets */ - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: short packet (%"U16_F" bytes) discarded\n", p->tot_len)); - TCP_STATS_INC(tcp.lenerr); - goto dropped; - } - - /* Don't even process incoming broadcasts/multicasts. */ - if (ip_addr_isbroadcast(¤t_iphdr_dest, inp) || - ip_addr_ismulticast(¤t_iphdr_dest)) { - TCP_STATS_INC(tcp.proterr); - goto dropped; - } - -#if CHECKSUM_CHECK_TCP - /* Verify TCP checksum. */ - if (inet_chksum_pseudo(p, ip_current_src_addr(), ip_current_dest_addr(), - IP_PROTO_TCP, p->tot_len) != 0) { - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packet discarded due to failing checksum 0x%04"X16_F"\n", - inet_chksum_pseudo(p, ip_current_src_addr(), ip_current_dest_addr(), - IP_PROTO_TCP, p->tot_len))); -#if TCP_DEBUG - tcp_debug_print(tcphdr); -#endif /* TCP_DEBUG */ - TCP_STATS_INC(tcp.chkerr); - goto dropped; - } -#endif - - /* Move the payload pointer in the pbuf so that it points to the - TCP data instead of the TCP header. */ - hdrlen = TCPH_HDRLEN(tcphdr); - if(pbuf_header(p, -(hdrlen * 4))){ - /* drop short packets */ - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: short packet\n")); - TCP_STATS_INC(tcp.lenerr); - goto dropped; - } - - /* Convert fields in TCP header to host byte order. */ - tcphdr->src = ntohs(tcphdr->src); - tcphdr->dest = ntohs(tcphdr->dest); - seqno = tcphdr->seqno = ntohl(tcphdr->seqno); - ackno = tcphdr->ackno = ntohl(tcphdr->ackno); - tcphdr->wnd = ntohs(tcphdr->wnd); - - flags = TCPH_FLAGS(tcphdr); - tcplen = p->tot_len + ((flags & (TCP_FIN | TCP_SYN)) ? 1 : 0); - - /* Demultiplex an incoming segment. First, we check if it is destined - for an active connection. */ - prev = NULL; - - - for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { - LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED); - LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); - LWIP_ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN); - if (pcb->remote_port == tcphdr->src && - pcb->local_port == tcphdr->dest && - ip_addr_cmp(&(pcb->remote_ip), ¤t_iphdr_src) && - ip_addr_cmp(&(pcb->local_ip), ¤t_iphdr_dest)) { - - /* Move this PCB to the front of the list so that subsequent - lookups will be faster (we exploit locality in TCP segment - arrivals). */ - LWIP_ASSERT("tcp_input: pcb->next != pcb (before cache)", pcb->next != pcb); - if (prev != NULL) { - prev->next = pcb->next; - pcb->next = tcp_active_pcbs; - tcp_active_pcbs = pcb; - } - LWIP_ASSERT("tcp_input: pcb->next != pcb (after cache)", pcb->next != pcb); - break; - } - prev = pcb; - } - - if (pcb == NULL) { - /* If it did not go to an active connection, we check the connections - in the TIME-WAIT state. */ - for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { - LWIP_ASSERT("tcp_input: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); - if (pcb->remote_port == tcphdr->src && - pcb->local_port == tcphdr->dest && - ip_addr_cmp(&(pcb->remote_ip), ¤t_iphdr_src) && - ip_addr_cmp(&(pcb->local_ip), ¤t_iphdr_dest)) { - /* We don't really care enough to move this PCB to the front - of the list since we are not very likely to receive that - many segments for connections in TIME-WAIT. */ - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packed for TIME_WAITing connection.\n")); - tcp_timewait_input(pcb); - pbuf_free(p); - return; - } - } - - /* Finally, if we still did not get a match, we check all PCBs that - are LISTENing for incoming connections. */ - prev = NULL; - for(lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { - if (lpcb->local_port == tcphdr->dest) { -#if SO_REUSE - if (ip_addr_cmp(&(lpcb->local_ip), ¤t_iphdr_dest)) { - /* found an exact match */ - break; - } else if(ip_addr_isany(&(lpcb->local_ip))) { - /* found an ANY-match */ - lpcb_any = lpcb; - lpcb_prev = prev; - } -#else /* SO_REUSE */ - if (ip_addr_cmp(&(lpcb->local_ip), ¤t_iphdr_dest) || - ip_addr_isany(&(lpcb->local_ip))) { - /* found a match */ - break; - } -#endif /* SO_REUSE */ - } - prev = (struct tcp_pcb *)lpcb; - } -#if SO_REUSE - /* first try specific local IP */ - if (lpcb == NULL) { - /* only pass to ANY if no specific local IP has been found */ - lpcb = lpcb_any; - prev = lpcb_prev; - } -#endif /* SO_REUSE */ - if (lpcb != NULL) { - /* Move this PCB to the front of the list so that subsequent - lookups will be faster (we exploit locality in TCP segment - arrivals). */ - if (prev != NULL) { - ((struct tcp_pcb_listen *)prev)->next = lpcb->next; - /* our successor is the remainder of the listening list */ - lpcb->next = tcp_listen_pcbs.listen_pcbs; - /* put this listening pcb at the head of the listening list */ - tcp_listen_pcbs.listen_pcbs = lpcb; - } - - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packed for LISTENing connection.\n")); - tcp_listen_input(lpcb); - pbuf_free(p); - return; - } - } - -#if TCP_INPUT_DEBUG - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags ")); - tcp_debug_print_flags(TCPH_FLAGS(tcphdr)); - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n")); -#endif /* TCP_INPUT_DEBUG */ - - - if (pcb != NULL) { - /* The incoming segment belongs to a connection. */ -#if TCP_INPUT_DEBUG -#if TCP_DEBUG - tcp_debug_print_state(pcb->state); -#endif /* TCP_DEBUG */ -#endif /* TCP_INPUT_DEBUG */ - - /* Set up a tcp_seg structure. */ - inseg.next = NULL; - inseg.len = p->tot_len; - inseg.p = p; - inseg.tcphdr = tcphdr; - - recv_data = NULL; - recv_flags = 0; - - if (flags & TCP_PSH) { - p->flags |= PBUF_FLAG_PUSH; - } - - /* If there is data which was previously "refused" by upper layer */ - if (pcb->refused_data != NULL) { - if ((tcp_process_refused_data(pcb) == ERR_ABRT) || - ((pcb->refused_data != NULL) && (tcplen > 0))) { - /* pcb has been aborted or refused data is still refused and the new - segment contains data */ - TCP_STATS_INC(tcp.drop); - snmp_inc_tcpinerrs(); - goto aborted; - } - } - tcp_input_pcb = pcb; - err = tcp_process(pcb); - /* A return value of ERR_ABRT means that tcp_abort() was called - and that the pcb has been freed. If so, we don't do anything. */ - if (err != ERR_ABRT) { - if (recv_flags & TF_RESET) { - /* TF_RESET means that the connection was reset by the other - end. We then call the error callback to inform the - application that the connection is dead before we - deallocate the PCB. */ - TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_RST); - tcp_pcb_remove(&tcp_active_pcbs, pcb); - memp_free(MEMP_TCP_PCB, pcb); - } else if (recv_flags & TF_CLOSED) { - /* The connection has been closed and we will deallocate the - PCB. */ - if (!(pcb->flags & TF_RXCLOSED)) { - /* Connection closed although the application has only shut down the - tx side: call the PCB's err callback and indicate the closure to - ensure the application doesn't continue using the PCB. */ - TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_CLSD); - } - tcp_pcb_remove(&tcp_active_pcbs, pcb); - memp_free(MEMP_TCP_PCB, pcb); - } else { - err = ERR_OK; - /* If the application has registered a "sent" function to be - called when new send buffer space is available, we call it - now. */ - if (pcb->acked > 0) { - TCP_EVENT_SENT(pcb, pcb->acked, err); - if (err == ERR_ABRT) { - goto aborted; - } - } - - if (recv_data != NULL) { - LWIP_ASSERT("pcb->refused_data == NULL", pcb->refused_data == NULL); - if (pcb->flags & TF_RXCLOSED) { - /* received data although already closed -> abort (send RST) to - notify the remote host that not all data has been processed */ - pbuf_free(recv_data); - tcp_abort(pcb); - goto aborted; - } - - /* Notify application that data has been received. */ - TCP_EVENT_RECV(pcb, recv_data, ERR_OK, err); - if (err == ERR_ABRT) { - goto aborted; - } - - /* If the upper layer can't receive this data, store it */ - if (err != ERR_OK) { - pcb->refused_data = recv_data; - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: keep incoming packet, because pcb is \"full\"\n")); - } - } - - /* If a FIN segment was received, we call the callback - function with a NULL buffer to indicate EOF. */ - if (recv_flags & TF_GOT_FIN) { - if (pcb->refused_data != NULL) { - /* Delay this if we have refused data. */ - pcb->refused_data->flags |= PBUF_FLAG_TCP_FIN; - } else { - /* correct rcv_wnd as the application won't call tcp_recved() - for the FIN's seqno */ - if (pcb->rcv_wnd != TCP_WND) { - pcb->rcv_wnd++; - } - TCP_EVENT_CLOSED(pcb, err); - if (err == ERR_ABRT) { - goto aborted; - } - } - } - - tcp_input_pcb = NULL; - /* Try to send something out. */ - tcp_output(pcb); -#if TCP_INPUT_DEBUG -#if TCP_DEBUG - tcp_debug_print_state(pcb->state); -#endif /* TCP_DEBUG */ -#endif /* TCP_INPUT_DEBUG */ - } - } - /* Jump target if pcb has been aborted in a callback (by calling tcp_abort()). - Below this line, 'pcb' may not be dereferenced! */ -aborted: - tcp_input_pcb = NULL; - recv_data = NULL; - - /* give up our reference to inseg.p */ - if (inseg.p != NULL) - { - pbuf_free(inseg.p); - inseg.p = NULL; - } - } else { - - /* If no matching PCB was found, send a TCP RST (reset) to the - sender. */ - LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_input: no PCB match found, resetting.\n")); - if (!(TCPH_FLAGS(tcphdr) & TCP_RST)) { - TCP_STATS_INC(tcp.proterr); - TCP_STATS_INC(tcp.drop); - tcp_rst(ackno, seqno + tcplen, - ip_current_dest_addr(), ip_current_src_addr(), - tcphdr->dest, tcphdr->src); - } - pbuf_free(p); - } - - LWIP_ASSERT("tcp_input: tcp_pcbs_sane()", tcp_pcbs_sane()); - PERF_STOP("tcp_input"); - return; -dropped: - TCP_STATS_INC(tcp.drop); - snmp_inc_tcpinerrs(); - pbuf_free(p); -} - -/** - * Called by tcp_input() when a segment arrives for a listening - * connection (from tcp_input()). - * - * @param pcb the tcp_pcb_listen for which a segment arrived - * @return ERR_OK if the segment was processed - * another err_t on error - * - * @note the return value is not (yet?) used in tcp_input() - * @note the segment which arrived is saved in global variables, therefore only the pcb - * involved is passed as a parameter to this function - */ -static err_t -tcp_listen_input(struct tcp_pcb_listen *pcb) -{ - struct tcp_pcb *npcb; - err_t rc; - - if (flags & TCP_RST) { - /* An incoming RST should be ignored. Return. */ - return ERR_OK; - } - - /* In the LISTEN state, we check for incoming SYN segments, - creates a new PCB, and responds with a SYN|ACK. */ - if (flags & TCP_ACK) { - /* For incoming segments with the ACK flag set, respond with a - RST. */ - LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_listen_input: ACK in LISTEN, sending reset\n")); - tcp_rst(ackno, seqno + tcplen, ip_current_dest_addr(), - ip_current_src_addr(), tcphdr->dest, tcphdr->src); - } else if (flags & TCP_SYN) { - LWIP_DEBUGF(TCP_DEBUG, ("TCP connection request %"U16_F" -> %"U16_F".\n", tcphdr->src, tcphdr->dest)); -#if TCP_LISTEN_BACKLOG - if (pcb->accepts_pending >= pcb->backlog) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_listen_input: listen backlog exceeded for port %"U16_F"\n", tcphdr->dest)); - return ERR_ABRT; - } -#endif /* TCP_LISTEN_BACKLOG */ - npcb = tcp_alloc(pcb->prio); - /* If a new PCB could not be created (probably due to lack of memory), - we don't do anything, but rely on the sender will retransmit the - SYN at a time when we have more memory available. */ - if (npcb == NULL) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_listen_input: could not allocate PCB\n")); - TCP_STATS_INC(tcp.memerr); - return ERR_MEM; - } -#if TCP_LISTEN_BACKLOG - pcb->accepts_pending++; -#endif /* TCP_LISTEN_BACKLOG */ - /* Set up the new PCB. */ - ip_addr_copy(npcb->local_ip, current_iphdr_dest); - npcb->local_port = pcb->local_port; - ip_addr_copy(npcb->remote_ip, current_iphdr_src); - npcb->remote_port = tcphdr->src; - npcb->state = SYN_RCVD; - npcb->rcv_nxt = seqno + 1; - npcb->rcv_ann_right_edge = npcb->rcv_nxt; - npcb->snd_wnd = tcphdr->wnd; - npcb->snd_wnd_max = tcphdr->wnd; - npcb->ssthresh = npcb->snd_wnd; - npcb->snd_wl1 = seqno - 1;/* initialise to seqno-1 to force window update */ - npcb->callback_arg = pcb->callback_arg; -#if LWIP_CALLBACK_API - npcb->accept = pcb->accept; -#endif /* LWIP_CALLBACK_API */ - /* inherit socket options */ - npcb->so_options = pcb->so_options & SOF_INHERITED; - /* Register the new PCB so that we can begin receiving segments - for it. */ - TCP_REG_ACTIVE(npcb); - - /* Parse any options in the SYN. */ - tcp_parseopt(npcb); -#if TCP_CALCULATE_EFF_SEND_MSS - npcb->mss = tcp_eff_send_mss(npcb->mss, &(npcb->remote_ip)); -#endif /* TCP_CALCULATE_EFF_SEND_MSS */ - - snmp_inc_tcppassiveopens(); - - /* Send a SYN|ACK together with the MSS option. */ - rc = tcp_enqueue_flags(npcb, TCP_SYN | TCP_ACK); - if (rc != ERR_OK) { - tcp_abandon(npcb, 0); - return rc; - } - return tcp_output(npcb); - } - return ERR_OK; -} - -/** - * Called by tcp_input() when a segment arrives for a connection in - * TIME_WAIT. - * - * @param pcb the tcp_pcb for which a segment arrived - * - * @note the segment which arrived is saved in global variables, therefore only the pcb - * involved is passed as a parameter to this function - */ -static err_t -tcp_timewait_input(struct tcp_pcb *pcb) -{ - /* RFC 1337: in TIME_WAIT, ignore RST and ACK FINs + any 'acceptable' segments */ - /* RFC 793 3.9 Event Processing - Segment Arrives: - * - first check sequence number - we skip that one in TIME_WAIT (always - * acceptable since we only send ACKs) - * - second check the RST bit (... return) */ - if (flags & TCP_RST) { - return ERR_OK; - } - /* - fourth, check the SYN bit, */ - if (flags & TCP_SYN) { - /* If an incoming segment is not acceptable, an acknowledgment - should be sent in reply */ - if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt+pcb->rcv_wnd)) { - /* If the SYN is in the window it is an error, send a reset */ - tcp_rst(ackno, seqno + tcplen, ip_current_dest_addr(), ip_current_src_addr(), - tcphdr->dest, tcphdr->src); - return ERR_OK; - } - } else if (flags & TCP_FIN) { - /* - eighth, check the FIN bit: Remain in the TIME-WAIT state. - Restart the 2 MSL time-wait timeout.*/ - pcb->tmr = tcp_ticks; - } - - if ((tcplen > 0)) { - /* Acknowledge data, FIN or out-of-window SYN */ - pcb->flags |= TF_ACK_NOW; - return tcp_output(pcb); - } - return ERR_OK; -} - -/** - * Implements the TCP state machine. Called by tcp_input. In some - * states tcp_receive() is called to receive data. The tcp_seg - * argument will be freed by the caller (tcp_input()) unless the - * recv_data pointer in the pcb is set. - * - * @param pcb the tcp_pcb for which a segment arrived - * - * @note the segment which arrived is saved in global variables, therefore only the pcb - * involved is passed as a parameter to this function - */ -static err_t -tcp_process(struct tcp_pcb *pcb) -{ - struct tcp_seg *rseg; - uint8_t acceptable = 0; - err_t err; - - err = ERR_OK; - - /* Process incoming RST segments. */ - if (flags & TCP_RST) { - /* First, determine if the reset is acceptable. */ - if (pcb->state == SYN_SENT) { - if (ackno == pcb->snd_nxt) { - acceptable = 1; - } - } else { - if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, - pcb->rcv_nxt+pcb->rcv_wnd)) { - acceptable = 1; - } - } - - if (acceptable) { - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: Connection RESET\n")); - LWIP_ASSERT("tcp_input: pcb->state != CLOSED", pcb->state != CLOSED); - recv_flags |= TF_RESET; - pcb->flags &= ~TF_ACK_DELAY; - return ERR_RST; - } else { - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: unacceptable reset seqno %"U32_F" rcv_nxt %"U32_F"\n", - seqno, pcb->rcv_nxt)); - LWIP_DEBUGF(TCP_DEBUG, ("tcp_process: unacceptable reset seqno %"U32_F" rcv_nxt %"U32_F"\n", - seqno, pcb->rcv_nxt)); - return ERR_OK; - } - } - - if ((flags & TCP_SYN) && (pcb->state != SYN_SENT && pcb->state != SYN_RCVD)) { - /* Cope with new connection attempt after remote end crashed */ - tcp_ack_now(pcb); - return ERR_OK; - } - - if ((pcb->flags & TF_RXCLOSED) == 0) { - /* Update the PCB (in)activity timer unless rx is closed (see tcp_shutdown) */ - pcb->tmr = tcp_ticks; - } - pcb->keep_cnt_sent = 0; - - tcp_parseopt(pcb); - - /* Do different things depending on the TCP state. */ - switch (pcb->state) { - case SYN_SENT: - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("SYN-SENT: ackno %"U32_F" pcb->snd_nxt %"U32_F" unacked %"U32_F"\n", ackno, - pcb->snd_nxt, ntohl(pcb->unacked->tcphdr->seqno))); - /* received SYN ACK with expected sequence number? */ - if ((flags & TCP_ACK) && (flags & TCP_SYN) - && ackno == ntohl(pcb->unacked->tcphdr->seqno) + 1) { - pcb->snd_buf++; - pcb->rcv_nxt = seqno + 1; - pcb->rcv_ann_right_edge = pcb->rcv_nxt; - pcb->lastack = ackno; - pcb->snd_wnd = tcphdr->wnd; - pcb->snd_wnd_max = tcphdr->wnd; - pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */ - pcb->state = ESTABLISHED; - -#if TCP_CALCULATE_EFF_SEND_MSS - pcb->mss = tcp_eff_send_mss(pcb->mss, &(pcb->remote_ip)); -#endif /* TCP_CALCULATE_EFF_SEND_MSS */ - - /* Set ssthresh again after changing pcb->mss (already set in tcp_connect - * but for the default value of pcb->mss) */ - pcb->ssthresh = pcb->mss * 10; - - pcb->cwnd = ((pcb->cwnd == 1) ? (pcb->mss * 2) : pcb->mss); - LWIP_ASSERT("pcb->snd_queuelen > 0", (pcb->snd_queuelen > 0)); - --pcb->snd_queuelen; - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_process: SYN-SENT --queuelen %"U16_F"\n", (uint16_t)pcb->snd_queuelen)); - rseg = pcb->unacked; - pcb->unacked = rseg->next; - tcp_seg_free(rseg); - - /* If there's nothing left to acknowledge, stop the retransmit - timer, otherwise reset it to start again */ - if(pcb->unacked == NULL) - pcb->rtime = -1; - else { - pcb->rtime = 0; - pcb->nrtx = 0; - } - - /* Call the user specified function to call when sucessfully - * connected. */ - TCP_EVENT_CONNECTED(pcb, ERR_OK, err); - if (err == ERR_ABRT) { - return ERR_ABRT; - } - tcp_ack_now(pcb); - } - /* received ACK? possibly a half-open connection */ - else if (flags & TCP_ACK) { - /* send a RST to bring the other side in a non-synchronized state. */ - tcp_rst(ackno, seqno + tcplen, ip_current_dest_addr(), ip_current_src_addr(), - tcphdr->dest, tcphdr->src); - } - break; - case SYN_RCVD: - if (flags & TCP_ACK) { - /* expected ACK number? */ - if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)) { - uint16_t old_cwnd; - pcb->state = ESTABLISHED; - LWIP_DEBUGF(TCP_DEBUG, ("TCP connection established %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); -#if LWIP_CALLBACK_API - LWIP_ASSERT("pcb->accept != NULL", pcb->accept != NULL); -#endif - /* Call the accept function. */ - TCP_EVENT_ACCEPT(pcb, ERR_OK, err); - if (err != ERR_OK) { - /* If the accept function returns with an error, we abort - * the connection. */ - /* Already aborted? */ - if (err != ERR_ABRT) { - tcp_abort(pcb); - } - return ERR_ABRT; - } - old_cwnd = pcb->cwnd; - /* If there was any data contained within this ACK, - * we'd better pass it on to the application as well. */ - tcp_receive(pcb); - - /* Prevent ACK for SYN to generate a sent event */ - if (pcb->acked != 0) { - pcb->acked--; - } - - pcb->cwnd = ((old_cwnd == 1) ? (pcb->mss * 2) : pcb->mss); - - if (recv_flags & TF_GOT_FIN) { - tcp_ack_now(pcb); - pcb->state = CLOSE_WAIT; - } - } else { - /* incorrect ACK number, send RST */ - tcp_rst(ackno, seqno + tcplen, ip_current_dest_addr(), ip_current_src_addr(), - tcphdr->dest, tcphdr->src); - } - } else if ((flags & TCP_SYN) && (seqno == pcb->rcv_nxt - 1)) { - /* Looks like another copy of the SYN - retransmit our SYN-ACK */ - tcp_rexmit(pcb); - } - break; - case CLOSE_WAIT: - /* FALLTHROUGH */ - case ESTABLISHED: - tcp_receive(pcb); - if (recv_flags & TF_GOT_FIN) { /* passive close */ - tcp_ack_now(pcb); - pcb->state = CLOSE_WAIT; - } - break; - case FIN_WAIT_1: - tcp_receive(pcb); - if (recv_flags & TF_GOT_FIN) { - if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) { - LWIP_DEBUGF(TCP_DEBUG, - ("TCP connection closed: FIN_WAIT_1 %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); - tcp_ack_now(pcb); - tcp_pcb_purge(pcb); - TCP_RMV_ACTIVE(pcb); - pcb->state = TIME_WAIT; - TCP_REG(&tcp_tw_pcbs, pcb); - } else { - tcp_ack_now(pcb); - pcb->state = CLOSING; - } - } else if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) { - pcb->state = FIN_WAIT_2; - } - break; - case FIN_WAIT_2: - tcp_receive(pcb); - if (recv_flags & TF_GOT_FIN) { - LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: FIN_WAIT_2 %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); - tcp_ack_now(pcb); - tcp_pcb_purge(pcb); - TCP_RMV_ACTIVE(pcb); - pcb->state = TIME_WAIT; - TCP_REG(&tcp_tw_pcbs, pcb); - } - break; - case CLOSING: - tcp_receive(pcb); - if (flags & TCP_ACK && ackno == pcb->snd_nxt) { - LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: CLOSING %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); - tcp_pcb_purge(pcb); - TCP_RMV_ACTIVE(pcb); - pcb->state = TIME_WAIT; - TCP_REG(&tcp_tw_pcbs, pcb); - } - break; - case LAST_ACK: - tcp_receive(pcb); - if (flags & TCP_ACK && ackno == pcb->snd_nxt) { - LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: LAST_ACK %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); - /* bugfix #21699: don't set pcb->state to CLOSED here or we risk leaking segments */ - recv_flags |= TF_CLOSED; - } - break; - default: - break; - } - return ERR_OK; -} - -#if TCP_QUEUE_OOSEQ -/** - * Insert segment into the list (segments covered with new one will be deleted) - * - * Called from tcp_receive() - */ -static void -tcp_oos_insert_segment(struct tcp_seg *cseg, struct tcp_seg *next) -{ - struct tcp_seg *old_seg; - - if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { - /* received segment overlaps all following segments */ - tcp_segs_free(next); - next = NULL; - } - else { - /* delete some following segments - oos queue may have segments with FIN flag */ - while (next && - TCP_SEQ_GEQ((seqno + cseg->len), - (next->tcphdr->seqno + next->len))) { - /* cseg with FIN already processed */ - if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) { - TCPH_SET_FLAG(cseg->tcphdr, TCP_FIN); - } - old_seg = next; - next = next->next; - tcp_seg_free(old_seg); - } - if (next && - TCP_SEQ_GT(seqno + cseg->len, next->tcphdr->seqno)) { - /* We need to trim the incoming segment. */ - cseg->len = (uint16_t)(next->tcphdr->seqno - seqno); - pbuf_realloc(cseg->p, cseg->len); - } - } - cseg->next = next; -} -#endif /* TCP_QUEUE_OOSEQ */ - -/** - * Called by tcp_process. Checks if the given segment is an ACK for outstanding - * data, and if so frees the memory of the buffered data. Next, is places the - * segment on any of the receive queues (pcb->recved or pcb->ooseq). If the segment - * is buffered, the pbuf is referenced by pbuf_ref so that it will not be freed until - * it has been removed from the buffer. - * - * If the incoming segment constitutes an ACK for a segment that was used for RTT - * estimation, the RTT is estimated here as well. - * - * Called from tcp_process(). - */ -static void -tcp_receive(struct tcp_pcb *pcb) -{ - struct tcp_seg *next; -#if TCP_QUEUE_OOSEQ - struct tcp_seg *prev, *cseg; -#endif /* TCP_QUEUE_OOSEQ */ - struct pbuf *p; - int32_t off; - int16_t m; - uint32_t right_wnd_edge; - uint16_t new_tot_len; - int found_dupack = 0; -#if TCP_OOSEQ_MAX_BYTES || TCP_OOSEQ_MAX_PBUFS - uint32_t ooseq_blen; - uint16_t ooseq_qlen; -#endif /* TCP_OOSEQ_MAX_BYTES || TCP_OOSEQ_MAX_PBUFS */ - - LWIP_ASSERT("tcp_receive: wrong state", pcb->state >= ESTABLISHED); - - if (flags & TCP_ACK) { - right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2; - - /* Update window. */ - if (TCP_SEQ_LT(pcb->snd_wl1, seqno) || - (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) || - (pcb->snd_wl2 == ackno && tcphdr->wnd > pcb->snd_wnd)) { - pcb->snd_wnd = tcphdr->wnd; - /* keep track of the biggest window announced by the remote host to calculate - the maximum segment size */ - if (pcb->snd_wnd_max < tcphdr->wnd) { - pcb->snd_wnd_max = tcphdr->wnd; - } - pcb->snd_wl1 = seqno; - pcb->snd_wl2 = ackno; - if (pcb->snd_wnd == 0) { - if (pcb->persist_backoff == 0) { - /* start persist timer */ - pcb->persist_cnt = 0; - pcb->persist_backoff = 1; - } - } else if (pcb->persist_backoff > 0) { - /* stop persist timer */ - pcb->persist_backoff = 0; - } - LWIP_DEBUGF(TCP_WND_DEBUG, ("tcp_receive: window update %"U16_F"\n", pcb->snd_wnd)); -#if TCP_WND_DEBUG - } else { - if (pcb->snd_wnd != tcphdr->wnd) { - LWIP_DEBUGF(TCP_WND_DEBUG, - ("tcp_receive: no window update lastack %"U32_F" ackno %" - U32_F" wl1 %"U32_F" seqno %"U32_F" wl2 %"U32_F"\n", - pcb->lastack, ackno, pcb->snd_wl1, seqno, pcb->snd_wl2)); - } -#endif /* TCP_WND_DEBUG */ - } - - /* (From Stevens TCP/IP Illustrated Vol II, p970.) Its only a - * duplicate ack if: - * 1) It doesn't ACK new data - * 2) length of received packet is zero (i.e. no payload) - * 3) the advertised window hasn't changed - * 4) There is outstanding unacknowledged data (retransmission timer running) - * 5) The ACK is == biggest ACK sequence number so far seen (snd_una) - * - * If it passes all five, should process as a dupack: - * a) dupacks < 3: do nothing - * b) dupacks == 3: fast retransmit - * c) dupacks > 3: increase cwnd - * - * If it only passes 1-3, should reset dupack counter (and add to - * stats, which we don't do in lwIP) - * - * If it only passes 1, should reset dupack counter - * - */ - - /* Clause 1 */ - if (TCP_SEQ_LEQ(ackno, pcb->lastack)) { - pcb->acked = 0; - /* Clause 2 */ - if (tcplen == 0) { - /* Clause 3 */ - if (pcb->snd_wl2 + pcb->snd_wnd == right_wnd_edge){ - /* Clause 4 */ - if (pcb->rtime >= 0) { - /* Clause 5 */ - if (pcb->lastack == ackno) { - found_dupack = 1; - if ((uint8_t)(pcb->dupacks + 1) > pcb->dupacks) { - ++pcb->dupacks; - } - if (pcb->dupacks > 3) { - /* Inflate the congestion window, but not if it means that - the value overflows. */ - if ((uint16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) { - pcb->cwnd += pcb->mss; - } - } else if (pcb->dupacks == 3) { - /* Do fast retransmit */ - tcp_rexmit_fast(pcb); - } - } - } - } - } - /* If Clause (1) or more is true, but not a duplicate ack, reset - * count of consecutive duplicate acks */ - if (!found_dupack) { - pcb->dupacks = 0; - } - } else if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)){ - /* We come here when the ACK acknowledges new data. */ - - /* Reset the "IN Fast Retransmit" flag, since we are no longer - in fast retransmit. Also reset the congestion window to the - slow start threshold. */ - if (pcb->flags & TF_INFR) { - pcb->flags &= ~TF_INFR; - pcb->cwnd = pcb->ssthresh; - } - - /* Reset the number of retransmissions. */ - pcb->nrtx = 0; - - /* Reset the retransmission time-out. */ - pcb->rto = (pcb->sa >> 3) + pcb->sv; - - /* Update the send buffer space. Diff between the two can never exceed 64K? */ - pcb->acked = (uint16_t)(ackno - pcb->lastack); - - pcb->snd_buf += pcb->acked; - - /* Reset the fast retransmit variables. */ - pcb->dupacks = 0; - pcb->lastack = ackno; - - /* Update the congestion control variables (cwnd and - ssthresh). */ - if (pcb->state >= ESTABLISHED) { - if (pcb->cwnd < pcb->ssthresh) { - if ((uint16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) { - pcb->cwnd += pcb->mss; - } - LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: slow start cwnd %"U16_F"\n", pcb->cwnd)); - } else { - uint16_t new_cwnd = (pcb->cwnd + pcb->mss * pcb->mss / pcb->cwnd); - if (new_cwnd > pcb->cwnd) { - pcb->cwnd = new_cwnd; - } - LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: congestion avoidance cwnd %"U16_F"\n", pcb->cwnd)); - } - } - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: ACK for %"U32_F", unacked->seqno %"U32_F":%"U32_F"\n", - ackno, - pcb->unacked != NULL? - ntohl(pcb->unacked->tcphdr->seqno): 0, - pcb->unacked != NULL? - ntohl(pcb->unacked->tcphdr->seqno) + TCP_TCPLEN(pcb->unacked): 0)); - - /* Remove segment from the unacknowledged list if the incoming - ACK acknowlegdes them. */ - while (pcb->unacked != NULL && - TCP_SEQ_LEQ(ntohl(pcb->unacked->tcphdr->seqno) + - TCP_TCPLEN(pcb->unacked), ackno)) { - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: removing %"U32_F":%"U32_F" from pcb->unacked\n", - ntohl(pcb->unacked->tcphdr->seqno), - ntohl(pcb->unacked->tcphdr->seqno) + - TCP_TCPLEN(pcb->unacked))); - - next = pcb->unacked; - pcb->unacked = pcb->unacked->next; - - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (uint16_t)pcb->snd_queuelen)); - LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= pbuf_clen(next->p))); - /* Prevent ACK for FIN to generate a sent event */ - if ((pcb->acked != 0) && ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0)) { - pcb->acked--; - } - - pcb->snd_queuelen -= pbuf_clen(next->p); - tcp_seg_free(next); - - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("%"U16_F" (after freeing unacked)\n", (uint16_t)pcb->snd_queuelen)); - if (pcb->snd_queuelen != 0) { - LWIP_ASSERT("tcp_receive: valid queue length", pcb->unacked != NULL || - pcb->unsent != NULL); - } - } - - /* If there's nothing left to acknowledge, stop the retransmit - timer, otherwise reset it to start again */ - if(pcb->unacked == NULL) - pcb->rtime = -1; - else - pcb->rtime = 0; - - pcb->polltmr = 0; - } else { - /* Fix bug bug #21582: out of sequence ACK, didn't really ack anything */ - pcb->acked = 0; - } - - /* We go through the ->unsent list to see if any of the segments - on the list are acknowledged by the ACK. This may seem - strange since an "unsent" segment shouldn't be acked. The - rationale is that lwIP puts all outstanding segments on the - ->unsent list after a retransmission, so these segments may - in fact have been sent once. */ - while (pcb->unsent != NULL && - TCP_SEQ_BETWEEN(ackno, ntohl(pcb->unsent->tcphdr->seqno) + - TCP_TCPLEN(pcb->unsent), pcb->snd_nxt)) { - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: removing %"U32_F":%"U32_F" from pcb->unsent\n", - ntohl(pcb->unsent->tcphdr->seqno), ntohl(pcb->unsent->tcphdr->seqno) + - TCP_TCPLEN(pcb->unsent))); - - next = pcb->unsent; - pcb->unsent = pcb->unsent->next; -#if TCP_OVERSIZE - if (pcb->unsent == NULL) { - pcb->unsent_oversize = 0; - } -#endif /* TCP_OVERSIZE */ - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (uint16_t)pcb->snd_queuelen)); - LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= pbuf_clen(next->p))); - /* Prevent ACK for FIN to generate a sent event */ - if ((pcb->acked != 0) && ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0)) { - pcb->acked--; - } - pcb->snd_queuelen -= pbuf_clen(next->p); - tcp_seg_free(next); - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("%"U16_F" (after freeing unsent)\n", (uint16_t)pcb->snd_queuelen)); - if (pcb->snd_queuelen != 0) { - LWIP_ASSERT("tcp_receive: valid queue length", - pcb->unacked != NULL || pcb->unsent != NULL); - } - } - /* End of ACK for new data processing. */ - - LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: pcb->rttest %"U32_F" rtseq %"U32_F" ackno %"U32_F"\n", - pcb->rttest, pcb->rtseq, ackno)); - - /* RTT estimation calculations. This is done by checking if the - incoming segment acknowledges the segment we use to take a - round-trip time measurement. */ - if (pcb->rttest && TCP_SEQ_LT(pcb->rtseq, ackno)) { - /* diff between this shouldn't exceed 32K since this are tcp timer ticks - and a round-trip shouldn't be that long... */ - m = (int16_t)(tcp_ticks - pcb->rttest); - - LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: experienced rtt %"U16_F" ticks (%"U16_F" msec).\n", - m, m * TCP_SLOW_INTERVAL)); - - /* This is taken directly from VJs original code in his paper */ - m = m - (pcb->sa >> 3); - pcb->sa += m; - if (m < 0) { - m = -m; - } - m = m - (pcb->sv >> 2); - pcb->sv += m; - pcb->rto = (pcb->sa >> 3) + pcb->sv; - - LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: RTO %"U16_F" (%"U16_F" milliseconds)\n", - pcb->rto, pcb->rto * TCP_SLOW_INTERVAL)); - - pcb->rttest = 0; - } - } - - /* If the incoming segment contains data, we must process it - further unless the pcb already received a FIN. - (RFC 793, chapeter 3.9, "SEGMENT ARRIVES" in states CLOSE-WAIT, CLOSING, - LAST-ACK and TIME-WAIT: "Ignore the segment text.") */ - if ((tcplen > 0) && (pcb->state < CLOSE_WAIT)) { - /* This code basically does three things: - - +) If the incoming segment contains data that is the next - in-sequence data, this data is passed to the application. This - might involve trimming the first edge of the data. The rcv_nxt - variable and the advertised window are adjusted. - - +) If the incoming segment has data that is above the next - sequence number expected (->rcv_nxt), the segment is placed on - the ->ooseq queue. This is done by finding the appropriate - place in the ->ooseq queue (which is ordered by sequence - number) and trim the segment in both ends if needed. An - immediate ACK is sent to indicate that we received an - out-of-sequence segment. - - +) Finally, we check if the first segment on the ->ooseq queue - now is in sequence (i.e., if rcv_nxt >= ooseq->seqno). If - rcv_nxt > ooseq->seqno, we must trim the first edge of the - segment on ->ooseq before we adjust rcv_nxt. The data in the - segments that are now on sequence are chained onto the - incoming segment so that we only need to call the application - once. - */ - - /* First, we check if we must trim the first edge. We have to do - this if the sequence number of the incoming segment is less - than rcv_nxt, and the sequence number plus the length of the - segment is larger than rcv_nxt. */ - /* if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)){ - if (TCP_SEQ_LT(pcb->rcv_nxt, seqno + tcplen)) {*/ - if (TCP_SEQ_BETWEEN(pcb->rcv_nxt, seqno + 1, seqno + tcplen - 1)){ - /* Trimming the first edge is done by pushing the payload - pointer in the pbuf downwards. This is somewhat tricky since - we do not want to discard the full contents of the pbuf up to - the new starting point of the data since we have to keep the - TCP header which is present in the first pbuf in the chain. - - What is done is really quite a nasty hack: the first pbuf in - the pbuf chain is pointed to by inseg.p. Since we need to be - able to deallocate the whole pbuf, we cannot change this - inseg.p pointer to point to any of the later pbufs in the - chain. Instead, we point the ->payload pointer in the first - pbuf to data in one of the later pbufs. We also set the - inseg.data pointer to point to the right place. This way, the - ->p pointer will still point to the first pbuf, but the - ->p->payload pointer will point to data in another pbuf. - - After we are done with adjusting the pbuf pointers we must - adjust the ->data pointer in the seg and the segment - length.*/ - - off = pcb->rcv_nxt - seqno; - p = inseg.p; - LWIP_ASSERT("inseg.p != NULL", inseg.p); - LWIP_ASSERT("insane offset!", (off < 0x7fff)); - if (inseg.p->len < off) { - LWIP_ASSERT("pbuf too short!", (((int32_t)inseg.p->tot_len) >= off)); - new_tot_len = (uint16_t)(inseg.p->tot_len - off); - while (p->len < off) { - off -= p->len; - /* KJM following line changed (with addition of new_tot_len var) - to fix bug #9076 - inseg.p->tot_len -= p->len; */ - p->tot_len = new_tot_len; - p->len = 0; - p = p->next; - } - if(pbuf_header(p, (int16_t)-off)) { - /* Do we need to cope with this failing? Assert for now */ - LWIP_ASSERT("pbuf_header failed", 0); - } - } else { - if(pbuf_header(inseg.p, (int16_t)-off)) { - /* Do we need to cope with this failing? Assert for now */ - LWIP_ASSERT("pbuf_header failed", 0); - } - } - inseg.len -= (uint16_t)(pcb->rcv_nxt - seqno); - inseg.tcphdr->seqno = seqno = pcb->rcv_nxt; - } - else { - if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)){ - /* the whole segment is < rcv_nxt */ - /* must be a duplicate of a packet that has already been correctly handled */ - - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: duplicate seqno %"U32_F"\n", seqno)); - tcp_ack_now(pcb); - } - } - - /* The sequence number must be within the window (above rcv_nxt - and below rcv_nxt + rcv_wnd) in order to be further - processed. */ - if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, - pcb->rcv_nxt + pcb->rcv_wnd - 1)){ - if (pcb->rcv_nxt == seqno) { - /* The incoming segment is the next in sequence. We check if - we have to trim the end of the segment and update rcv_nxt - and pass the data to the application. */ - tcplen = TCP_TCPLEN(&inseg); - - if (tcplen > pcb->rcv_wnd) { - LWIP_DEBUGF(TCP_INPUT_DEBUG, - ("tcp_receive: other end overran receive window" - "seqno %"U32_F" len %"U16_F" right edge %"U32_F"\n", - seqno, tcplen, pcb->rcv_nxt + pcb->rcv_wnd)); - if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { - /* Must remove the FIN from the header as we're trimming - * that byte of sequence-space from the packet */ - TCPH_FLAGS_SET(inseg.tcphdr, TCPH_FLAGS(inseg.tcphdr) &~ TCP_FIN); - } - /* Adjust length of segment to fit in the window. */ - inseg.len = pcb->rcv_wnd; - if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { - inseg.len -= 1; - } - pbuf_realloc(inseg.p, inseg.len); - tcplen = TCP_TCPLEN(&inseg); - LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", - (seqno + tcplen) == (pcb->rcv_nxt + pcb->rcv_wnd)); - } -#if TCP_QUEUE_OOSEQ - /* Received in-sequence data, adjust ooseq data if: - - FIN has been received or - - inseq overlaps with ooseq */ - if (pcb->ooseq != NULL) { - if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { - LWIP_DEBUGF(TCP_INPUT_DEBUG, - ("tcp_receive: received in-order FIN, binning ooseq queue\n")); - /* Received in-order FIN means anything that was received - * out of order must now have been received in-order, so - * bin the ooseq queue */ - while (pcb->ooseq != NULL) { - struct tcp_seg *old_ooseq = pcb->ooseq; - pcb->ooseq = pcb->ooseq->next; - tcp_seg_free(old_ooseq); - } - } else { - next = pcb->ooseq; - /* Remove all segments on ooseq that are covered by inseg already. - * FIN is copied from ooseq to inseg if present. */ - while (next && - TCP_SEQ_GEQ(seqno + tcplen, - next->tcphdr->seqno + next->len)) { - /* inseg cannot have FIN here (already processed above) */ - if (TCPH_FLAGS(next->tcphdr) & TCP_FIN && - (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) == 0) { - TCPH_SET_FLAG(inseg.tcphdr, TCP_FIN); - tcplen = TCP_TCPLEN(&inseg); - } - prev = next; - next = next->next; - tcp_seg_free(prev); - } - /* Now trim right side of inseg if it overlaps with the first - * segment on ooseq */ - if (next && - TCP_SEQ_GT(seqno + tcplen, - next->tcphdr->seqno)) { - /* inseg cannot have FIN here (already processed above) */ - inseg.len = (uint16_t)(next->tcphdr->seqno - seqno); - if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { - inseg.len -= 1; - } - pbuf_realloc(inseg.p, inseg.len); - tcplen = TCP_TCPLEN(&inseg); - LWIP_ASSERT("tcp_receive: segment not trimmed correctly to ooseq queue\n", - (seqno + tcplen) == next->tcphdr->seqno); - } - pcb->ooseq = next; - } - } -#endif /* TCP_QUEUE_OOSEQ */ - - pcb->rcv_nxt = seqno + tcplen; - - /* Update the receiver's (our) window. */ - LWIP_ASSERT("tcp_receive: tcplen > rcv_wnd\n", pcb->rcv_wnd >= tcplen); - pcb->rcv_wnd -= tcplen; - - tcp_update_rcv_ann_wnd(pcb); - - /* If there is data in the segment, we make preparations to - pass this up to the application. The ->recv_data variable - is used for holding the pbuf that goes to the - application. The code for reassembling out-of-sequence data - chains its data on this pbuf as well. - - If the segment was a FIN, we set the TF_GOT_FIN flag that will - be used to indicate to the application that the remote side has - closed its end of the connection. */ - if (inseg.p->tot_len > 0) { - recv_data = inseg.p; - /* Since this pbuf now is the responsibility of the - application, we delete our reference to it so that we won't - (mistakingly) deallocate it. */ - inseg.p = NULL; - } - if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: received FIN.\n")); - recv_flags |= TF_GOT_FIN; - } - -#if TCP_QUEUE_OOSEQ - /* We now check if we have segments on the ->ooseq queue that - are now in sequence. */ - while (pcb->ooseq != NULL && - pcb->ooseq->tcphdr->seqno == pcb->rcv_nxt) { - - cseg = pcb->ooseq; - seqno = pcb->ooseq->tcphdr->seqno; - - pcb->rcv_nxt += TCP_TCPLEN(cseg); - LWIP_ASSERT("tcp_receive: ooseq tcplen > rcv_wnd\n", - pcb->rcv_wnd >= TCP_TCPLEN(cseg)); - pcb->rcv_wnd -= TCP_TCPLEN(cseg); - - tcp_update_rcv_ann_wnd(pcb); - - if (cseg->p->tot_len > 0) { - /* Chain this pbuf onto the pbuf that we will pass to - the application. */ - if (recv_data) { - pbuf_cat(recv_data, cseg->p); - } else { - recv_data = cseg->p; - } - cseg->p = NULL; - } - if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: dequeued FIN.\n")); - recv_flags |= TF_GOT_FIN; - if (pcb->state == ESTABLISHED) { /* force passive close or we can move to active close */ - pcb->state = CLOSE_WAIT; - } - } - - pcb->ooseq = cseg->next; - tcp_seg_free(cseg); - } -#endif /* TCP_QUEUE_OOSEQ */ - - - /* Acknowledge the segment(s). */ - tcp_ack(pcb); - - } else { - /* We get here if the incoming segment is out-of-sequence. */ - tcp_send_empty_ack(pcb); -#if TCP_QUEUE_OOSEQ - /* We queue the segment on the ->ooseq queue. */ - if (pcb->ooseq == NULL) { - pcb->ooseq = tcp_seg_copy(&inseg); - } else { - /* If the queue is not empty, we walk through the queue and - try to find a place where the sequence number of the - incoming segment is between the sequence numbers of the - previous and the next segment on the ->ooseq queue. That is - the place where we put the incoming segment. If needed, we - trim the second edges of the previous and the incoming - segment so that it will fit into the sequence. - - If the incoming segment has the same sequence number as a - segment on the ->ooseq queue, we discard the segment that - contains less data. */ - - prev = NULL; - for(next = pcb->ooseq; next != NULL; next = next->next) { - if (seqno == next->tcphdr->seqno) { - /* The sequence number of the incoming segment is the - same as the sequence number of the segment on - ->ooseq. We check the lengths to see which one to - discard. */ - if (inseg.len > next->len) { - /* The incoming segment is larger than the old - segment. We replace some segments with the new - one. */ - cseg = tcp_seg_copy(&inseg); - if (cseg != NULL) { - if (prev != NULL) { - prev->next = cseg; - } else { - pcb->ooseq = cseg; - } - tcp_oos_insert_segment(cseg, next); - } - break; - } else { - /* Either the lenghts are the same or the incoming - segment was smaller than the old one; in either - case, we ditch the incoming segment. */ - break; - } - } else { - if (prev == NULL) { - if (TCP_SEQ_LT(seqno, next->tcphdr->seqno)) { - /* The sequence number of the incoming segment is lower - than the sequence number of the first segment on the - queue. We put the incoming segment first on the - queue. */ - cseg = tcp_seg_copy(&inseg); - if (cseg != NULL) { - pcb->ooseq = cseg; - tcp_oos_insert_segment(cseg, next); - } - break; - } - } else { - /*if (TCP_SEQ_LT(prev->tcphdr->seqno, seqno) && - TCP_SEQ_LT(seqno, next->tcphdr->seqno)) {*/ - if (TCP_SEQ_BETWEEN(seqno, prev->tcphdr->seqno+1, next->tcphdr->seqno-1)) { - /* The sequence number of the incoming segment is in - between the sequence numbers of the previous and - the next segment on ->ooseq. We trim trim the previous - segment, delete next segments that included in received segment - and trim received, if needed. */ - cseg = tcp_seg_copy(&inseg); - if (cseg != NULL) { - if (TCP_SEQ_GT(prev->tcphdr->seqno + prev->len, seqno)) { - /* We need to trim the prev segment. */ - prev->len = (uint16_t)(seqno - prev->tcphdr->seqno); - pbuf_realloc(prev->p, prev->len); - } - prev->next = cseg; - tcp_oos_insert_segment(cseg, next); - } - break; - } - } - /* If the "next" segment is the last segment on the - ooseq queue, we add the incoming segment to the end - of the list. */ - if (next->next == NULL && - TCP_SEQ_GT(seqno, next->tcphdr->seqno)) { - if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) { - /* segment "next" already contains all data */ - break; - } - next->next = tcp_seg_copy(&inseg); - if (next->next != NULL) { - if (TCP_SEQ_GT(next->tcphdr->seqno + next->len, seqno)) { - /* We need to trim the last segment. */ - next->len = (uint16_t)(seqno - next->tcphdr->seqno); - pbuf_realloc(next->p, next->len); - } - /* check if the remote side overruns our receive window */ - if ((uint32_t)tcplen + seqno > pcb->rcv_nxt + (uint32_t)pcb->rcv_wnd) { - LWIP_DEBUGF(TCP_INPUT_DEBUG, - ("tcp_receive: other end overran receive window" - "seqno %"U32_F" len %"U16_F" right edge %"U32_F"\n", - seqno, tcplen, pcb->rcv_nxt + pcb->rcv_wnd)); - if (TCPH_FLAGS(next->next->tcphdr) & TCP_FIN) { - /* Must remove the FIN from the header as we're trimming - * that byte of sequence-space from the packet */ - TCPH_FLAGS_SET(next->next->tcphdr, TCPH_FLAGS(next->next->tcphdr) &~ TCP_FIN); - } - /* Adjust length of segment to fit in the window. */ - next->next->len = pcb->rcv_nxt + pcb->rcv_wnd - seqno; - pbuf_realloc(next->next->p, next->next->len); - tcplen = TCP_TCPLEN(next->next); - LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", - (seqno + tcplen) == (pcb->rcv_nxt + pcb->rcv_wnd)); - } - } - break; - } - } - prev = next; - } - } -#if TCP_OOSEQ_MAX_BYTES || TCP_OOSEQ_MAX_PBUFS - /* Check that the data on ooseq doesn't exceed one of the limits - and throw away everything above that limit. */ - ooseq_blen = 0; - ooseq_qlen = 0; - prev = NULL; - for(next = pcb->ooseq; next != NULL; prev = next, next = next->next) { - struct pbuf *p = next->p; - ooseq_blen += p->tot_len; - ooseq_qlen += pbuf_clen(p); - if ((ooseq_blen > TCP_OOSEQ_MAX_BYTES) || - (ooseq_qlen > TCP_OOSEQ_MAX_PBUFS)) { - /* too much ooseq data, dump this and everything after it */ - tcp_segs_free(next); - if (prev == NULL) { - /* first ooseq segment is too much, dump the whole queue */ - pcb->ooseq = NULL; - } else { - /* just dump 'next' and everything after it */ - prev->next = NULL; - } - break; - } - } -#endif /* TCP_OOSEQ_MAX_BYTES || TCP_OOSEQ_MAX_PBUFS */ -#endif /* TCP_QUEUE_OOSEQ */ - } - } else { - /* The incoming segment is not withing the window. */ - tcp_send_empty_ack(pcb); - } - } else { - /* Segments with length 0 is taken care of here. Segments that - fall out of the window are ACKed. */ - /*if (TCP_SEQ_GT(pcb->rcv_nxt, seqno) || - TCP_SEQ_GEQ(seqno, pcb->rcv_nxt + pcb->rcv_wnd)) {*/ - if(!TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd-1)){ - tcp_ack_now(pcb); - } - } -} - -/** - * Parses the options contained in the incoming segment. - * - * Called from tcp_listen_input() and tcp_process(). - * Currently, only the MSS option is supported! - * - * @param pcb the tcp_pcb for which a segment arrived - */ -static void -tcp_parseopt(struct tcp_pcb *pcb) -{ - uint16_t c, max_c; - uint16_t mss; - uint8_t *opts, opt; -#if LWIP_TCP_TIMESTAMPS - uint32_t tsval; -#endif - - opts = (uint8_t *)tcphdr + TCP_HLEN; - - /* Parse the TCP MSS option, if present. */ - if(TCPH_HDRLEN(tcphdr) > 0x5) { - max_c = (TCPH_HDRLEN(tcphdr) - 5) << 2; - for (c = 0; c < max_c; ) { - opt = opts[c]; - switch (opt) { - case 0x00: - /* End of options. */ - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: EOL\n")); - return; - case 0x01: - /* NOP option. */ - ++c; - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: NOP\n")); - break; - case 0x02: - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: MSS\n")); - if (opts[c + 1] != 0x04 || c + 0x04 > max_c) { - /* Bad length */ - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); - return; - } - /* An MSS option with the right option length. */ - mss = (opts[c + 2] << 8) | opts[c + 3]; - /* Limit the mss to the configured TCP_MSS and prevent division by zero */ - pcb->mss = ((mss > TCP_MSS) || (mss == 0)) ? TCP_MSS : mss; - /* Advance to next option */ - c += 0x04; - break; -#if LWIP_TCP_TIMESTAMPS - case 0x08: - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: TS\n")); - if (opts[c + 1] != 0x0A || c + 0x0A > max_c) { - /* Bad length */ - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); - return; - } - /* TCP timestamp option with valid length */ - tsval = (opts[c+2]) | (opts[c+3] << 8) | - (opts[c+4] << 16) | (opts[c+5] << 24); - if (flags & TCP_SYN) { - pcb->ts_recent = ntohl(tsval); - pcb->flags |= TF_TIMESTAMP; - } else if (TCP_SEQ_BETWEEN(pcb->ts_lastacksent, seqno, seqno+tcplen)) { - pcb->ts_recent = ntohl(tsval); - } - /* Advance to next option */ - c += 0x0A; - break; -#endif - default: - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: other\n")); - if (opts[c + 1] == 0) { - LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); - /* If the length field is zero, the options are malformed - and we don't process them further. */ - return; - } - /* All other options have a length field, so that we easily - can skip past them. */ - c += opts[c + 1]; - } - } - } -} - -#endif /* LWIP_TCP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/tcp_out.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/tcp_out.c deleted file mode 100644 index f517b37..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/tcp_out.c +++ /dev/null @@ -1,1489 +0,0 @@ -/** - * @file - * Transmission Control Protocol, outgoing traffic - * - * The output functions of TCP. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/opt.h" - -#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/tcp_impl.h" -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/memp.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/inet_chksum.h" -#include "lwip/stats.h" -#include "lwip/snmp.h" -#if LWIP_TCP_TIMESTAMPS -#include "lwip/sys.h" -#endif - -#include - -/* Define some copy-macros for checksum-on-copy so that the code looks - nicer by preventing too many ifdef's. */ -#if TCP_CHECKSUM_ON_COPY -#define TCP_DATA_COPY(dst, src, len, seg) do { \ - tcp_seg_add_chksum(LWIP_CHKSUM_COPY(dst, src, len), \ - len, &seg->chksum, &seg->chksum_swapped); \ - seg->flags |= TF_SEG_DATA_CHECKSUMMED; } while(0) -#define TCP_DATA_COPY2(dst, src, len, chksum, chksum_swapped) \ - tcp_seg_add_chksum(LWIP_CHKSUM_COPY(dst, src, len), len, chksum, chksum_swapped); -#else /* TCP_CHECKSUM_ON_COPY*/ -#define TCP_DATA_COPY(dst, src, len, seg) MEMCPY(dst, src, len) -#define TCP_DATA_COPY2(dst, src, len, chksum, chksum_swapped) MEMCPY(dst, src, len) -#endif /* TCP_CHECKSUM_ON_COPY*/ - -/** Define this to 1 for an extra check that the output checksum is valid - * (usefule when the checksum is generated by the application, not the stack) */ -#ifndef TCP_CHECKSUM_ON_COPY_SANITY_CHECK -#define TCP_CHECKSUM_ON_COPY_SANITY_CHECK 0 -#endif - -/* Forward declarations.*/ -static void tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb); - -/** Allocate a pbuf and create a tcphdr at p->payload, used for output - * functions other than the default tcp_output -> tcp_output_segment - * (e.g. tcp_send_empty_ack, etc.) - * - * @param pcb tcp pcb for which to send a packet (used to initialize tcp_hdr) - * @param optlen length of header-options - * @param datalen length of tcp data to reserve in pbuf - * @param seqno_be seqno in network byte order (big-endian) - * @return pbuf with p->payload being the tcp_hdr - */ -static struct pbuf * -tcp_output_alloc_header(struct tcp_pcb *pcb, uint16_t optlen, uint16_t datalen, - uint32_t seqno_be /* already in network byte order */) -{ - struct tcp_hdr *tcphdr; - struct pbuf *p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen + datalen, PBUF_RAM); - if (p == NULL) { - p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen + datalen, PBUF_POOL); - } - - if (p != NULL) { - LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", - (p->len >= TCP_HLEN + optlen)); - tcphdr = (struct tcp_hdr *)p->payload; - tcphdr->src = htons(pcb->local_port); - tcphdr->dest = htons(pcb->remote_port); - tcphdr->seqno = seqno_be; - tcphdr->ackno = htonl(pcb->rcv_nxt); - TCPH_HDRLEN_FLAGS_SET(tcphdr, (5 + optlen / 4), TCP_ACK); - tcphdr->wnd = htons(pcb->rcv_ann_wnd); - tcphdr->chksum = 0; - tcphdr->urgp = 0; - - /* If we're sending a packet, update the announced right window edge */ - pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; - } - return p; -} - -/** - * Called by tcp_close() to send a segment including FIN flag but not data. - * - * @param pcb the tcp_pcb over which to send a segment - * @return ERR_OK if sent, another err_t otherwise - */ -err_t -tcp_send_fin(struct tcp_pcb *pcb) -{ - /* first, try to add the fin to the last unsent segment */ - if (pcb->unsent != NULL) { - struct tcp_seg *last_unsent; - for (last_unsent = pcb->unsent; last_unsent->next != NULL; - last_unsent = last_unsent->next); - - if ((TCPH_FLAGS(last_unsent->tcphdr) & (TCP_SYN | TCP_FIN | TCP_RST)) == 0) { - /* no SYN/FIN/RST flag in the header, we can add the FIN flag */ - TCPH_SET_FLAG(last_unsent->tcphdr, TCP_FIN); - pcb->flags |= TF_FIN; - return ERR_OK; - } - } - /* no data, no length, flags, copy=1, no optdata */ - return tcp_enqueue_flags(pcb, TCP_FIN); -} - -/** - * Create a TCP segment with prefilled header. - * - * Called by tcp_write and tcp_enqueue_flags. - * - * @param pcb Protocol control block for the TCP connection. - * @param p pbuf that is used to hold the TCP header. - * @param flags TCP flags for header. - * @param seqno TCP sequence number of this packet - * @param optflags options to include in TCP header - * @return a new tcp_seg pointing to p, or NULL. - * The TCP header is filled in except ackno and wnd. - * p is freed on failure. - */ -static struct tcp_seg * -tcp_create_segment(struct tcp_pcb *pcb, struct pbuf *p, uint8_t flags, uint32_t seqno, uint8_t optflags) -{ - struct tcp_seg *seg; - uint8_t optlen = LWIP_TCP_OPT_LENGTH(optflags); - - if ((seg = (struct tcp_seg *)memp_malloc(MEMP_TCP_SEG)) == NULL) { - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_create_segment: no memory.\n")); - pbuf_free(p); - return NULL; - } - seg->flags = optflags; - seg->next = NULL; - seg->p = p; - seg->len = p->tot_len - optlen; -#if TCP_OVERSIZE_DBGCHECK - seg->oversize_left = 0; -#endif /* TCP_OVERSIZE_DBGCHECK */ -#if TCP_CHECKSUM_ON_COPY - seg->chksum = 0; - seg->chksum_swapped = 0; - /* check optflags */ - LWIP_ASSERT("invalid optflags passed: TF_SEG_DATA_CHECKSUMMED", - (optflags & TF_SEG_DATA_CHECKSUMMED) == 0); -#endif /* TCP_CHECKSUM_ON_COPY */ - - /* build TCP header */ - if (pbuf_header(p, TCP_HLEN)) { - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_create_segment: no room for TCP header in pbuf.\n")); - TCP_STATS_INC(tcp.err); - tcp_seg_free(seg); - return NULL; - } - seg->tcphdr = (struct tcp_hdr *)seg->p->payload; - seg->tcphdr->src = htons(pcb->local_port); - seg->tcphdr->dest = htons(pcb->remote_port); - seg->tcphdr->seqno = htonl(seqno); - /* ackno is set in tcp_output */ - TCPH_HDRLEN_FLAGS_SET(seg->tcphdr, (5 + optlen / 4), flags); - /* wnd and chksum are set in tcp_output */ - seg->tcphdr->urgp = 0; - return seg; -} - -/** - * Allocate a PBUF_RAM pbuf, perhaps with extra space at the end. - * - * This function is like pbuf_alloc(layer, length, PBUF_RAM) except - * there may be extra bytes available at the end. - * - * @param layer flag to define header size. - * @param length size of the pbuf's payload. - * @param max_length maximum usable size of payload+oversize. - * @param oversize pointer to a uint16_t that will receive the number of usable tail bytes. - * @param pcb The TCP connection that willo enqueue the pbuf. - * @param apiflags API flags given to tcp_write. - * @param first_seg true when this pbuf will be used in the first enqueued segment. - * @param - */ -#if TCP_OVERSIZE -static struct pbuf * -tcp_pbuf_prealloc(pbuf_layer layer, uint16_t length, uint16_t max_length, - uint16_t *oversize, struct tcp_pcb *pcb, uint8_t apiflags, - uint8_t first_seg) -{ - struct pbuf *p; - uint16_t alloc = length; - -#if LWIP_NETIF_TX_SINGLE_PBUF - LWIP_UNUSED_ARG(max_length); - LWIP_UNUSED_ARG(pcb); - LWIP_UNUSED_ARG(apiflags); - LWIP_UNUSED_ARG(first_seg); - /* always create MSS-sized pbufs */ - alloc = max_length; -#else /* LWIP_NETIF_TX_SINGLE_PBUF */ - if (length < max_length) { - /* Should we allocate an oversized pbuf, or just the minimum - * length required? If tcp_write is going to be called again - * before this segment is transmitted, we want the oversized - * buffer. If the segment will be transmitted immediately, we can - * save memory by allocating only length. We use a simple - * heuristic based on the following information: - * - * Did the user set TCP_WRITE_FLAG_MORE? - * - * Will the Nagle algorithm defer transmission of this segment? - */ - if ((apiflags & TCP_WRITE_FLAG_MORE) || - (!(pcb->flags & TF_NODELAY) && - (!first_seg || - pcb->unsent != NULL || - pcb->unacked != NULL))) { - alloc = LWIP_MIN(max_length, LWIP_MEM_ALIGN_SIZE(length + TCP_OVERSIZE)); - } - } -#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ - p = pbuf_alloc(layer, alloc, PBUF_RAM); - if (p == NULL) { - return NULL; - } - LWIP_ASSERT("need unchained pbuf", p->next == NULL); - *oversize = p->len - length; - /* trim p->len to the currently used size */ - p->len = p->tot_len = length; - return p; -} -#else /* TCP_OVERSIZE */ -#define tcp_pbuf_prealloc(layer, length, mx, os, pcb, api, fst) pbuf_alloc((layer), (length), PBUF_RAM) -#endif /* TCP_OVERSIZE */ - -#if TCP_CHECKSUM_ON_COPY -/** Add a checksum of newly added data to the segment */ -static void -tcp_seg_add_chksum(uint16_t chksum, uint16_t len, uint16_t *seg_chksum, - uint8_t *seg_chksum_swapped) -{ - uint32_t helper; - /* add chksum to old chksum and fold to uint16_t */ - helper = chksum + *seg_chksum; - chksum = FOLD_U32T(helper); - if ((len & 1) != 0) { - *seg_chksum_swapped = 1 - *seg_chksum_swapped; - chksum = SWAP_BYTES_IN_WORD(chksum); - } - *seg_chksum = chksum; -} -#endif /* TCP_CHECKSUM_ON_COPY */ - -/** Checks if tcp_write is allowed or not (checks state, snd_buf and snd_queuelen). - * - * @param pcb the tcp pcb to check for - * @param len length of data to send (checked agains snd_buf) - * @return ERR_OK if tcp_write is allowed to proceed, another err_t otherwise - */ -static err_t -tcp_write_checks(struct tcp_pcb *pcb, uint16_t len) -{ - /* connection is in invalid state for data transmission? */ - if ((pcb->state != ESTABLISHED) && - (pcb->state != CLOSE_WAIT) && - (pcb->state != SYN_SENT) && - (pcb->state != SYN_RCVD)) { - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_STATE | LWIP_DBG_LEVEL_SEVERE, ("tcp_write() called in invalid state\n")); - return ERR_CONN; - } else if (len == 0) { - return ERR_OK; - } - - /* fail on too much data */ - if (len > pcb->snd_buf) { - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 3, ("tcp_write: too much data (len=%"U16_F" > snd_buf=%"U16_F")\n", - len, pcb->snd_buf)); - pcb->flags |= TF_NAGLEMEMERR; - return ERR_MEM; - } - - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_write: queuelen: %"U16_F"\n", (uint16_t)pcb->snd_queuelen)); - - /* If total number of pbufs on the unsent/unacked queues exceeds the - * configured maximum, return an error */ - /* check for configured max queuelen and possible overflow */ - if ((pcb->snd_queuelen >= TCP_SND_QUEUELEN) || (pcb->snd_queuelen > TCP_SNDQUEUELEN_OVERFLOW)) { - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 3, ("tcp_write: too long queue %"U16_F" (max %"U16_F")\n", - pcb->snd_queuelen, TCP_SND_QUEUELEN)); - TCP_STATS_INC(tcp.memerr); - pcb->flags |= TF_NAGLEMEMERR; - return ERR_MEM; - } - if (pcb->snd_queuelen != 0) { - LWIP_ASSERT("tcp_write: pbufs on queue => at least one queue non-empty", - pcb->unacked != NULL || pcb->unsent != NULL); - } else { - LWIP_ASSERT("tcp_write: no pbufs on queue => both queues empty", - pcb->unacked == NULL && pcb->unsent == NULL); - } - return ERR_OK; -} - -/** - * Write data for sending (but does not send it immediately). - * - * It waits in the expectation of more data being sent soon (as - * it can send them more efficiently by combining them together). - * To prompt the system to send data now, call tcp_output() after - * calling tcp_write(). - * - * @param pcb Protocol control block for the TCP connection to enqueue data for. - * @param arg Pointer to the data to be enqueued for sending. - * @param len Data length in bytes - * @param apiflags combination of following flags : - * - TCP_WRITE_FLAG_COPY (0x01) data will be copied into memory belonging to the stack - * - TCP_WRITE_FLAG_MORE (0x02) for TCP connection, PSH flag will be set on last segment sent, - * @return ERR_OK if enqueued, another err_t on error - */ -err_t -tcp_write(struct tcp_pcb *pcb, const void *arg, uint16_t len, uint8_t apiflags) -{ - struct pbuf *concat_p = NULL; - struct tcp_seg *last_unsent = NULL, *seg = NULL, *prev_seg = NULL, *queue = NULL; - uint16_t pos = 0; /* position in 'arg' data */ - uint16_t queuelen; - uint8_t optlen = 0; - uint8_t optflags = 0; -#if TCP_OVERSIZE - uint16_t oversize = 0; - uint16_t oversize_used = 0; -#endif /* TCP_OVERSIZE */ -#if TCP_CHECKSUM_ON_COPY - uint16_t concat_chksum = 0; - uint8_t concat_chksum_swapped = 0; - uint16_t concat_chksummed = 0; -#endif /* TCP_CHECKSUM_ON_COPY */ - err_t err; - /* don't allocate segments bigger than half the maximum window we ever received */ - uint16_t mss_local = LWIP_MIN(pcb->mss, pcb->snd_wnd_max/2); - -#if LWIP_NETIF_TX_SINGLE_PBUF - /* Always copy to try to create single pbufs for TX */ - apiflags |= TCP_WRITE_FLAG_COPY; -#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ - - LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_write(pcb=%p, data=%p, len=%"U16_F", apiflags=%"U16_F")\n", - (void *)pcb, arg, len, (uint16_t)apiflags)); - LWIP_ERROR("tcp_write: arg == NULL (programmer violates API)", - arg != NULL, return ERR_ARG;); - - err = tcp_write_checks(pcb, len); - if (err != ERR_OK) { - return err; - } - queuelen = pcb->snd_queuelen; - -#if LWIP_TCP_TIMESTAMPS - if ((pcb->flags & TF_TIMESTAMP)) { - optflags = TF_SEG_OPTS_TS; - optlen = LWIP_TCP_OPT_LENGTH(TF_SEG_OPTS_TS); - } -#endif /* LWIP_TCP_TIMESTAMPS */ - - - /* - * TCP segmentation is done in three phases with increasing complexity: - * - * 1. Copy data directly into an oversized pbuf. - * 2. Chain a new pbuf to the end of pcb->unsent. - * 3. Create new segments. - * - * We may run out of memory at any point. In that case we must - * return ERR_MEM and not change anything in pcb. Therefore, all - * changes are recorded in local variables and committed at the end - * of the function. Some pcb fields are maintained in local copies: - * - * queuelen = pcb->snd_queuelen - * oversize = pcb->unsent_oversize - * - * These variables are set consistently by the phases: - * - * seg points to the last segment tampered with. - * - * pos records progress as data is segmented. - */ - - /* Find the tail of the unsent queue. */ - if (pcb->unsent != NULL) { - uint16_t space; - uint16_t unsent_optlen; - - /* @todo: this could be sped up by keeping last_unsent in the pcb */ - for (last_unsent = pcb->unsent; last_unsent->next != NULL; - last_unsent = last_unsent->next); - - /* Usable space at the end of the last unsent segment */ - unsent_optlen = LWIP_TCP_OPT_LENGTH(last_unsent->flags); - space = mss_local - (last_unsent->len + unsent_optlen); - - /* - * Phase 1: Copy data directly into an oversized pbuf. - * - * The number of bytes copied is recorded in the oversize_used - * variable. The actual copying is done at the bottom of the - * function. - */ -#if TCP_OVERSIZE -#if TCP_OVERSIZE_DBGCHECK - /* check that pcb->unsent_oversize matches last_unsent->unsent_oversize */ - LWIP_ASSERT("unsent_oversize mismatch (pcb vs. last_unsent)", - pcb->unsent_oversize == last_unsent->oversize_left); -#endif /* TCP_OVERSIZE_DBGCHECK */ - oversize = pcb->unsent_oversize; - if (oversize > 0) { - LWIP_ASSERT("inconsistent oversize vs. space", oversize_used <= space); - seg = last_unsent; - oversize_used = oversize < len ? oversize : len; - pos += oversize_used; - oversize -= oversize_used; - space -= oversize_used; - } - /* now we are either finished or oversize is zero */ - LWIP_ASSERT("inconsistend oversize vs. len", (oversize == 0) || (pos == len)); -#endif /* TCP_OVERSIZE */ - - /* - * Phase 2: Chain a new pbuf to the end of pcb->unsent. - * - * We don't extend segments containing SYN/FIN flags or options - * (len==0). The new pbuf is kept in concat_p and pbuf_cat'ed at - * the end. - */ - if ((pos < len) && (space > 0) && (last_unsent->len > 0)) { - uint16_t seglen = space < len - pos ? space : len - pos; - seg = last_unsent; - - /* Create a pbuf with a copy or reference to seglen bytes. We - * can use PBUF_RAW here since the data appears in the middle of - * a segment. A header will never be prepended. */ - if (apiflags & TCP_WRITE_FLAG_COPY) { - /* Data is copied */ - if ((concat_p = tcp_pbuf_prealloc(PBUF_RAW, seglen, space, &oversize, pcb, apiflags, 1)) == NULL) { - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, - ("tcp_write : could not allocate memory for pbuf copy size %"U16_F"\n", - seglen)); - goto memerr; - } -#if TCP_OVERSIZE_DBGCHECK - last_unsent->oversize_left += oversize; -#endif /* TCP_OVERSIZE_DBGCHECK */ - TCP_DATA_COPY2(concat_p->payload, (uint8_t*)arg + pos, seglen, &concat_chksum, &concat_chksum_swapped); -#if TCP_CHECKSUM_ON_COPY - concat_chksummed += seglen; -#endif /* TCP_CHECKSUM_ON_COPY */ - } else { - /* Data is not copied */ - if ((concat_p = pbuf_alloc(PBUF_RAW, seglen, PBUF_ROM)) == NULL) { - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, - ("tcp_write: could not allocate memory for zero-copy pbuf\n")); - goto memerr; - } -#if TCP_CHECKSUM_ON_COPY - /* calculate the checksum of nocopy-data */ - tcp_seg_add_chksum(~inet_chksum((uint8_t*)arg + pos, seglen), seglen, - &concat_chksum, &concat_chksum_swapped); - concat_chksummed += seglen; -#endif /* TCP_CHECKSUM_ON_COPY */ - /* reference the non-volatile payload data */ - concat_p->payload = (uint8_t*)arg + pos; - } - - pos += seglen; - queuelen += pbuf_clen(concat_p); - } - } else { -#if TCP_OVERSIZE - LWIP_ASSERT("unsent_oversize mismatch (pcb->unsent is NULL)", - pcb->unsent_oversize == 0); -#endif /* TCP_OVERSIZE */ - } - - /* - * Phase 3: Create new segments. - * - * The new segments are chained together in the local 'queue' - * variable, ready to be appended to pcb->unsent. - */ - while (pos < len) { - struct pbuf *p; - uint16_t left = len - pos; - uint16_t max_len = mss_local - optlen; - uint16_t seglen = left > max_len ? max_len : left; -#if TCP_CHECKSUM_ON_COPY - uint16_t chksum = 0; - uint8_t chksum_swapped = 0; -#endif /* TCP_CHECKSUM_ON_COPY */ - - if (apiflags & TCP_WRITE_FLAG_COPY) { - /* If copy is set, memory should be allocated and data copied - * into pbuf */ - if ((p = tcp_pbuf_prealloc(PBUF_TRANSPORT, seglen + optlen, mss_local, &oversize, pcb, apiflags, queue == NULL)) == NULL) { - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_write : could not allocate memory for pbuf copy size %"U16_F"\n", seglen)); - goto memerr; - } - LWIP_ASSERT("tcp_write: check that first pbuf can hold the complete seglen", - (p->len >= seglen)); - TCP_DATA_COPY2((char *)p->payload + optlen, (uint8_t*)arg + pos, seglen, &chksum, &chksum_swapped); - } else { - /* Copy is not set: First allocate a pbuf for holding the data. - * Since the referenced data is available at least until it is - * sent out on the link (as it has to be ACKed by the remote - * party) we can safely use PBUF_ROM instead of PBUF_REF here. - */ - struct pbuf *p2; -#if TCP_OVERSIZE - LWIP_ASSERT("oversize == 0", oversize == 0); -#endif /* TCP_OVERSIZE */ - if ((p2 = pbuf_alloc(PBUF_TRANSPORT, seglen, PBUF_ROM)) == NULL) { - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_write: could not allocate memory for zero-copy pbuf\n")); - goto memerr; - } -#if TCP_CHECKSUM_ON_COPY - /* calculate the checksum of nocopy-data */ - chksum = ~inet_chksum((uint8_t*)arg + pos, seglen); -#endif /* TCP_CHECKSUM_ON_COPY */ - /* reference the non-volatile payload data */ - p2->payload = (uint8_t*)arg + pos; - - /* Second, allocate a pbuf for the headers. */ - if ((p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) { - /* If allocation fails, we have to deallocate the data pbuf as - * well. */ - pbuf_free(p2); - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_write: could not allocate memory for header pbuf\n")); - goto memerr; - } - /* Concatenate the headers and data pbufs together. */ - pbuf_cat(p/*header*/, p2/*data*/); - } - - queuelen += pbuf_clen(p); - - /* Now that there are more segments queued, we check again if the - * length of the queue exceeds the configured maximum or - * overflows. */ - if ((queuelen > TCP_SND_QUEUELEN) || (queuelen > TCP_SNDQUEUELEN_OVERFLOW)) { - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_write: queue too long %"U16_F" (%"U16_F")\n", queuelen, TCP_SND_QUEUELEN)); - pbuf_free(p); - goto memerr; - } - - if ((seg = tcp_create_segment(pcb, p, 0, pcb->snd_lbb + pos, optflags)) == NULL) { - goto memerr; - } -#if TCP_OVERSIZE_DBGCHECK - seg->oversize_left = oversize; -#endif /* TCP_OVERSIZE_DBGCHECK */ -#if TCP_CHECKSUM_ON_COPY - seg->chksum = chksum; - seg->chksum_swapped = chksum_swapped; - seg->flags |= TF_SEG_DATA_CHECKSUMMED; -#endif /* TCP_CHECKSUM_ON_COPY */ - - /* first segment of to-be-queued data? */ - if (queue == NULL) { - queue = seg; - } else { - /* Attach the segment to the end of the queued segments */ - LWIP_ASSERT("prev_seg != NULL", prev_seg != NULL); - prev_seg->next = seg; - } - /* remember last segment of to-be-queued data for next iteration */ - prev_seg = seg; - - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE, ("tcp_write: queueing %"U32_F":%"U32_F"\n", - ntohl(seg->tcphdr->seqno), - ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg))); - - pos += seglen; - } - - /* - * All three segmentation phases were successful. We can commit the - * transaction. - */ - - /* - * Phase 1: If data has been added to the preallocated tail of - * last_unsent, we update the length fields of the pbuf chain. - */ -#if TCP_OVERSIZE - if (oversize_used > 0) { - struct pbuf *p; - /* Bump tot_len of whole chain, len of tail */ - for (p = last_unsent->p; p; p = p->next) { - p->tot_len += oversize_used; - if (p->next == NULL) { - TCP_DATA_COPY((char *)p->payload + p->len, arg, oversize_used, last_unsent); - p->len += oversize_used; - } - } - last_unsent->len += oversize_used; -#if TCP_OVERSIZE_DBGCHECK - LWIP_ASSERT("last_unsent->oversize_left >= oversize_used", - last_unsent->oversize_left >= oversize_used); - last_unsent->oversize_left -= oversize_used; -#endif /* TCP_OVERSIZE_DBGCHECK */ - } - pcb->unsent_oversize = oversize; -#endif /* TCP_OVERSIZE */ - - /* - * Phase 2: concat_p can be concatenated onto last_unsent->p - */ - if (concat_p != NULL) { - LWIP_ASSERT("tcp_write: cannot concatenate when pcb->unsent is empty", - (last_unsent != NULL)); - pbuf_cat(last_unsent->p, concat_p); - last_unsent->len += concat_p->tot_len; -#if TCP_CHECKSUM_ON_COPY - if (concat_chksummed) { - tcp_seg_add_chksum(concat_chksum, concat_chksummed, &last_unsent->chksum, - &last_unsent->chksum_swapped); - last_unsent->flags |= TF_SEG_DATA_CHECKSUMMED; - } -#endif /* TCP_CHECKSUM_ON_COPY */ - } - - /* - * Phase 3: Append queue to pcb->unsent. Queue may be NULL, but that - * is harmless - */ - if (last_unsent == NULL) { - pcb->unsent = queue; - } else { - last_unsent->next = queue; - } - - /* - * Finally update the pcb state. - */ - pcb->snd_lbb += len; - pcb->snd_buf -= len; - pcb->snd_queuelen = queuelen; - - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_write: %"S16_F" (after enqueued)\n", - pcb->snd_queuelen)); - if (pcb->snd_queuelen != 0) { - LWIP_ASSERT("tcp_write: valid queue length", - pcb->unacked != NULL || pcb->unsent != NULL); - } - - /* Set the PSH flag in the last segment that we enqueued. */ - if (seg != NULL && seg->tcphdr != NULL && ((apiflags & TCP_WRITE_FLAG_MORE)==0)) { - TCPH_SET_FLAG(seg->tcphdr, TCP_PSH); - } - - return ERR_OK; -memerr: - pcb->flags |= TF_NAGLEMEMERR; - TCP_STATS_INC(tcp.memerr); - - if (concat_p != NULL) { - pbuf_free(concat_p); - } - if (queue != NULL) { - tcp_segs_free(queue); - } - if (pcb->snd_queuelen != 0) { - LWIP_ASSERT("tcp_write: valid queue length", pcb->unacked != NULL || - pcb->unsent != NULL); - } - LWIP_DEBUGF(TCP_QLEN_DEBUG | LWIP_DBG_STATE, ("tcp_write: %"S16_F" (with mem err)\n", pcb->snd_queuelen)); - return ERR_MEM; -} - -/** - * Enqueue TCP options for transmission. - * - * Called by tcp_connect(), tcp_listen_input(), and tcp_send_ctrl(). - * - * @param pcb Protocol control block for the TCP connection. - * @param flags TCP header flags to set in the outgoing segment. - * @param optdata pointer to TCP options, or NULL. - * @param optlen length of TCP options in bytes. - */ -err_t -tcp_enqueue_flags(struct tcp_pcb *pcb, uint8_t flags) -{ - struct pbuf *p; - struct tcp_seg *seg; - uint8_t optflags = 0; - uint8_t optlen = 0; - - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue_flags: queuelen: %"U16_F"\n", (uint16_t)pcb->snd_queuelen)); - - LWIP_ASSERT("tcp_enqueue_flags: need either TCP_SYN or TCP_FIN in flags (programmer violates API)", - (flags & (TCP_SYN | TCP_FIN)) != 0); - - /* check for configured max queuelen and possible overflow */ - if ((pcb->snd_queuelen >= TCP_SND_QUEUELEN) || (pcb->snd_queuelen > TCP_SNDQUEUELEN_OVERFLOW)) { - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 3, ("tcp_enqueue_flags: too long queue %"U16_F" (max %"U16_F")\n", - pcb->snd_queuelen, TCP_SND_QUEUELEN)); - TCP_STATS_INC(tcp.memerr); - pcb->flags |= TF_NAGLEMEMERR; - return ERR_MEM; - } - - if (flags & TCP_SYN) { - optflags = TF_SEG_OPTS_MSS; - } -#if LWIP_TCP_TIMESTAMPS - if ((pcb->flags & TF_TIMESTAMP)) { - optflags |= TF_SEG_OPTS_TS; - } -#endif /* LWIP_TCP_TIMESTAMPS */ - optlen = LWIP_TCP_OPT_LENGTH(optflags); - - /* tcp_enqueue_flags is always called with either SYN or FIN in flags. - * We need one available snd_buf byte to do that. - * This means we can't send FIN while snd_buf==0. A better fix would be to - * not include SYN and FIN sequence numbers in the snd_buf count. */ - if (pcb->snd_buf == 0) { - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 3, ("tcp_enqueue_flags: no send buffer available\n")); - TCP_STATS_INC(tcp.memerr); - return ERR_MEM; - } - - /* Allocate pbuf with room for TCP header + options */ - if ((p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) { - pcb->flags |= TF_NAGLEMEMERR; - TCP_STATS_INC(tcp.memerr); - return ERR_MEM; - } - LWIP_ASSERT("tcp_enqueue_flags: check that first pbuf can hold optlen", - (p->len >= optlen)); - - /* Allocate memory for tcp_seg, and fill in fields. */ - if ((seg = tcp_create_segment(pcb, p, flags, pcb->snd_lbb, optflags)) == NULL) { - pcb->flags |= TF_NAGLEMEMERR; - TCP_STATS_INC(tcp.memerr); - return ERR_MEM; - } - LWIP_ASSERT("seg->tcphdr not aligned", ((mem_ptr_t)seg->tcphdr % MEM_ALIGNMENT) == 0); - LWIP_ASSERT("tcp_enqueue_flags: invalid segment length", seg->len == 0); - - LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE, - ("tcp_enqueue_flags: queueing %"U32_F":%"U32_F" (0x%"X16_F")\n", - ntohl(seg->tcphdr->seqno), - ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg), - (uint16_t)flags)); - - /* Now append seg to pcb->unsent queue */ - if (pcb->unsent == NULL) { - pcb->unsent = seg; - } else { - struct tcp_seg *useg; - for (useg = pcb->unsent; useg->next != NULL; useg = useg->next); - useg->next = seg; - } -#if TCP_OVERSIZE - /* The new unsent tail has no space */ - pcb->unsent_oversize = 0; -#endif /* TCP_OVERSIZE */ - - /* SYN and FIN bump the sequence number */ - if ((flags & TCP_SYN) || (flags & TCP_FIN)) { - pcb->snd_lbb++; - /* optlen does not influence snd_buf */ - pcb->snd_buf--; - } - if (flags & TCP_FIN) { - pcb->flags |= TF_FIN; - } - - /* update number of segments on the queues */ - pcb->snd_queuelen += pbuf_clen(seg->p); - LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue_flags: %"S16_F" (after enqueued)\n", pcb->snd_queuelen)); - if (pcb->snd_queuelen != 0) { - LWIP_ASSERT("tcp_enqueue_flags: invalid queue length", - pcb->unacked != NULL || pcb->unsent != NULL); - } - - return ERR_OK; -} - -#if LWIP_TCP_TIMESTAMPS -/* Build a timestamp option (12 bytes long) at the specified options pointer) - * - * @param pcb tcp_pcb - * @param opts option pointer where to store the timestamp option - */ -static void -tcp_build_timestamp_option(struct tcp_pcb *pcb, uint32_t *opts) -{ - /* Pad with two NOP options to make everything nicely aligned */ - opts[0] = PP_HTONL(0x0101080A); - opts[1] = htonl(sys_now()); - opts[2] = htonl(pcb->ts_recent); -} -#endif - -/** Send an ACK without data. - * - * @param pcb Protocol control block for the TCP connection to send the ACK - */ -err_t -tcp_send_empty_ack(struct tcp_pcb *pcb) -{ - struct pbuf *p; - struct tcp_hdr *tcphdr; - uint8_t optlen = 0; - -#if LWIP_TCP_TIMESTAMPS - if (pcb->flags & TF_TIMESTAMP) { - optlen = LWIP_TCP_OPT_LENGTH(TF_SEG_OPTS_TS); - } -#endif - - p = tcp_output_alloc_header(pcb, optlen, 0, htonl(pcb->snd_nxt)); - if (p == NULL) { - LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: (ACK) could not allocate pbuf\n")); - return ERR_BUF; - } - tcphdr = (struct tcp_hdr *)p->payload; - LWIP_DEBUGF(TCP_OUTPUT_DEBUG, - ("tcp_output: sending ACK for %"U32_F"\n", pcb->rcv_nxt)); - /* remove ACK flags from the PCB, as we send an empty ACK now */ - pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); - - /* NB. MSS option is only sent on SYNs, so ignore it here */ -#if LWIP_TCP_TIMESTAMPS - pcb->ts_lastacksent = pcb->rcv_nxt; - - if (pcb->flags & TF_TIMESTAMP) { - tcp_build_timestamp_option(pcb, (uint32_t *)(tcphdr + 1)); - } -#endif - -#if CHECKSUM_GEN_TCP - tcphdr->chksum = inet_chksum_pseudo(p, &(pcb->local_ip), &(pcb->remote_ip), - IP_PROTO_TCP, p->tot_len); -#endif -#if LWIP_NETIF_HWADDRHINT - ip_output_hinted(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, - IP_PROTO_TCP, &(pcb->addr_hint)); -#else /* LWIP_NETIF_HWADDRHINT*/ - ip_output(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, - IP_PROTO_TCP); -#endif /* LWIP_NETIF_HWADDRHINT*/ - pbuf_free(p); - - return ERR_OK; -} - -/** - * Find out what we can send and send it - * - * @param pcb Protocol control block for the TCP connection to send data - * @return ERR_OK if data has been sent or nothing to send - * another err_t on error - */ -err_t -tcp_output(struct tcp_pcb *pcb) -{ - struct tcp_seg *seg, *useg; - uint32_t wnd, snd_nxt; -#if TCP_CWND_DEBUG - int16_t i = 0; -#endif /* TCP_CWND_DEBUG */ - - /* pcb->state LISTEN not allowed here */ - LWIP_ASSERT("don't call tcp_output for listen-pcbs", - pcb->state != LISTEN); - - /* First, check if we are invoked by the TCP input processing - code. If so, we do not output anything. Instead, we rely on the - input processing code to call us when input processing is done - with. */ - if (tcp_input_pcb == pcb) { - return ERR_OK; - } - - wnd = LWIP_MIN(pcb->snd_wnd, pcb->cwnd); - - seg = pcb->unsent; - - /* If the TF_ACK_NOW flag is set and no data will be sent (either - * because the ->unsent queue is empty or because the window does - * not allow it), construct an empty ACK segment and send it. - * - * If data is to be sent, we will just piggyback the ACK (see below). - */ - if (pcb->flags & TF_ACK_NOW && - (seg == NULL || - ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd)) { - return tcp_send_empty_ack(pcb); - } - - /* useg should point to last segment on unacked queue */ - useg = pcb->unacked; - if (useg != NULL) { - for (; useg->next != NULL; useg = useg->next); - } - -#if TCP_OUTPUT_DEBUG - if (seg == NULL) { - LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: nothing to send (%p)\n", - (void*)pcb->unsent)); - } -#endif /* TCP_OUTPUT_DEBUG */ -#if TCP_CWND_DEBUG - if (seg == NULL) { - LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %"U16_F - ", cwnd %"U16_F", wnd %"U32_F - ", seg == NULL, ack %"U32_F"\n", - pcb->snd_wnd, pcb->cwnd, wnd, pcb->lastack)); - } else { - LWIP_DEBUGF(TCP_CWND_DEBUG, - ("tcp_output: snd_wnd %"U16_F", cwnd %"U16_F", wnd %"U32_F - ", effwnd %"U32_F", seq %"U32_F", ack %"U32_F"\n", - pcb->snd_wnd, pcb->cwnd, wnd, - ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len, - ntohl(seg->tcphdr->seqno), pcb->lastack)); - } -#endif /* TCP_CWND_DEBUG */ - /* data available and window allows it to be sent? */ - while (seg != NULL && - ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) { - LWIP_ASSERT("RST not expected here!", - (TCPH_FLAGS(seg->tcphdr) & TCP_RST) == 0); - /* Stop sending if the nagle algorithm would prevent it - * Don't stop: - * - if tcp_write had a memory error before (prevent delayed ACK timeout) or - * - if FIN was already enqueued for this PCB (SYN is always alone in a segment - - * either seg->next != NULL or pcb->unacked == NULL; - * RST is no sent using tcp_write/tcp_output. - */ - if((tcp_do_output_nagle(pcb) == 0) && - ((pcb->flags & (TF_NAGLEMEMERR | TF_FIN)) == 0)){ - break; - } -#if TCP_CWND_DEBUG - LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %"U16_F", cwnd %"U16_F", wnd %"U32_F", effwnd %"U32_F", seq %"U32_F", ack %"U32_F", i %"S16_F"\n", - pcb->snd_wnd, pcb->cwnd, wnd, - ntohl(seg->tcphdr->seqno) + seg->len - - pcb->lastack, - ntohl(seg->tcphdr->seqno), pcb->lastack, i)); - ++i; -#endif /* TCP_CWND_DEBUG */ - - pcb->unsent = seg->next; - - if (pcb->state != SYN_SENT) { - TCPH_SET_FLAG(seg->tcphdr, TCP_ACK); - pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); - } - - tcp_output_segment(seg, pcb); - snd_nxt = ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg); - if (TCP_SEQ_LT(pcb->snd_nxt, snd_nxt)) { - pcb->snd_nxt = snd_nxt; - } - /* put segment on unacknowledged list if length > 0 */ - if (TCP_TCPLEN(seg) > 0) { - seg->next = NULL; - /* unacked list is empty? */ - if (pcb->unacked == NULL) { - pcb->unacked = seg; - useg = seg; - /* unacked list is not empty? */ - } else { - /* In the case of fast retransmit, the packet should not go to the tail - * of the unacked queue, but rather somewhere before it. We need to check for - * this case. -STJ Jul 27, 2004 */ - if (TCP_SEQ_LT(ntohl(seg->tcphdr->seqno), ntohl(useg->tcphdr->seqno))) { - /* add segment to before tail of unacked list, keeping the list sorted */ - struct tcp_seg **cur_seg = &(pcb->unacked); - while (*cur_seg && - TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) { - cur_seg = &((*cur_seg)->next ); - } - seg->next = (*cur_seg); - (*cur_seg) = seg; - } else { - /* add segment to tail of unacked list */ - useg->next = seg; - useg = useg->next; - } - } - /* do not queue empty segments on the unacked list */ - } else { - tcp_seg_free(seg); - } - seg = pcb->unsent; - } -#if TCP_OVERSIZE - if (pcb->unsent == NULL) { - /* last unsent has been removed, reset unsent_oversize */ - pcb->unsent_oversize = 0; - } -#endif /* TCP_OVERSIZE */ - - pcb->flags &= ~TF_NAGLEMEMERR; - return ERR_OK; -} - -/** - * Called by tcp_output() to actually send a TCP segment over IP. - * - * @param seg the tcp_seg to send - * @param pcb the tcp_pcb for the TCP connection used to send the segment - */ -static void -tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb) -{ - uint16_t len; - struct netif *netif; - uint32_t *opts; - - /** @bug Exclude retransmitted segments from this count. */ - snmp_inc_tcpoutsegs(); - - /* The TCP header has already been constructed, but the ackno and - wnd fields remain. */ - seg->tcphdr->ackno = htonl(pcb->rcv_nxt); - - /* advertise our receive window size in this TCP segment */ - seg->tcphdr->wnd = htons(pcb->rcv_ann_wnd); - - pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; - - /* Add any requested options. NB MSS option is only set on SYN - packets, so ignore it here */ - opts = (uint32_t *)(void *)(seg->tcphdr + 1); - if (seg->flags & TF_SEG_OPTS_MSS) { - uint16_t mss; -#if TCP_CALCULATE_EFF_SEND_MSS - mss = tcp_eff_send_mss(TCP_MSS, &pcb->remote_ip); -#else /* TCP_CALCULATE_EFF_SEND_MSS */ - mss = TCP_MSS; -#endif /* TCP_CALCULATE_EFF_SEND_MSS */ - *opts = TCP_BUILD_MSS_OPTION(mss); - opts += 1; - } -#if LWIP_TCP_TIMESTAMPS - pcb->ts_lastacksent = pcb->rcv_nxt; - - if (seg->flags & TF_SEG_OPTS_TS) { - tcp_build_timestamp_option(pcb, opts); - opts += 3; - } -#endif - - /* Set retransmission timer running if it is not currently enabled - This must be set before checking the route. */ - if (pcb->rtime == -1) { - pcb->rtime = 0; - } - - /* If we don't have a local IP address, we get one by - calling ip_route(). */ - if (ip_addr_isany(&(pcb->local_ip))) { - netif = ip_route(&(pcb->remote_ip)); - if (netif == NULL) { - return; - } - ip_addr_copy(pcb->local_ip, netif->ip_addr); - } - - if (pcb->rttest == 0) { - pcb->rttest = tcp_ticks; - pcb->rtseq = ntohl(seg->tcphdr->seqno); - - LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_output_segment: rtseq %"U32_F"\n", pcb->rtseq)); - } - LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output_segment: %"U32_F":%"U32_F"\n", - htonl(seg->tcphdr->seqno), htonl(seg->tcphdr->seqno) + - seg->len)); - - len = (uint16_t)((uint8_t *)seg->tcphdr - (uint8_t *)seg->p->payload); - - seg->p->len -= len; - seg->p->tot_len -= len; - - seg->p->payload = seg->tcphdr; - - seg->tcphdr->chksum = 0; -#if CHECKSUM_GEN_TCP -#if TCP_CHECKSUM_ON_COPY - { - uint32_t acc; -#if TCP_CHECKSUM_ON_COPY_SANITY_CHECK - uint16_t chksum_slow = inet_chksum_pseudo(seg->p, &(pcb->local_ip), - &(pcb->remote_ip), - IP_PROTO_TCP, seg->p->tot_len); -#endif /* TCP_CHECKSUM_ON_COPY_SANITY_CHECK */ - if ((seg->flags & TF_SEG_DATA_CHECKSUMMED) == 0) { - LWIP_ASSERT("data included but not checksummed", - seg->p->tot_len == (TCPH_HDRLEN(seg->tcphdr) * 4)); - } - - /* rebuild TCP header checksum (TCP header changes for retransmissions!) */ - acc = inet_chksum_pseudo_partial(seg->p, &(pcb->local_ip), - &(pcb->remote_ip), - IP_PROTO_TCP, seg->p->tot_len, TCPH_HDRLEN(seg->tcphdr) * 4); - /* add payload checksum */ - if (seg->chksum_swapped) { - seg->chksum = SWAP_BYTES_IN_WORD(seg->chksum); - seg->chksum_swapped = 0; - } - acc += (uint16_t)~(seg->chksum); - seg->tcphdr->chksum = FOLD_U32T(acc); -#if TCP_CHECKSUM_ON_COPY_SANITY_CHECK - if (chksum_slow != seg->tcphdr->chksum) { - LWIP_DEBUGF(TCP_DEBUG | LWIP_DBG_LEVEL_WARNING, - ("tcp_output_segment: calculated checksum is %"X16_F" instead of %"X16_F"\n", - seg->tcphdr->chksum, chksum_slow)); - seg->tcphdr->chksum = chksum_slow; - } -#endif /* TCP_CHECKSUM_ON_COPY_SANITY_CHECK */ - } -#else /* TCP_CHECKSUM_ON_COPY */ - seg->tcphdr->chksum = inet_chksum_pseudo(seg->p, &(pcb->local_ip), - &(pcb->remote_ip), - IP_PROTO_TCP, seg->p->tot_len); -#endif /* TCP_CHECKSUM_ON_COPY */ -#endif /* CHECKSUM_GEN_TCP */ - TCP_STATS_INC(tcp.xmit); - -#if LWIP_NETIF_HWADDRHINT - ip_output_hinted(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, - IP_PROTO_TCP, &(pcb->addr_hint)); -#else /* LWIP_NETIF_HWADDRHINT*/ - ip_output(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, - IP_PROTO_TCP); -#endif /* LWIP_NETIF_HWADDRHINT*/ -} - -/** - * Send a TCP RESET packet (empty segment with RST flag set) either to - * abort a connection or to show that there is no matching local connection - * for a received segment. - * - * Called by tcp_abort() (to abort a local connection), tcp_input() (if no - * matching local pcb was found), tcp_listen_input() (if incoming segment - * has ACK flag set) and tcp_process() (received segment in the wrong state) - * - * Since a RST segment is in most cases not sent for an active connection, - * tcp_rst() has a number of arguments that are taken from a tcp_pcb for - * most other segment output functions. - * - * @param seqno the sequence number to use for the outgoing segment - * @param ackno the acknowledge number to use for the outgoing segment - * @param local_ip the local IP address to send the segment from - * @param remote_ip the remote IP address to send the segment to - * @param local_port the local TCP port to send the segment from - * @param remote_port the remote TCP port to send the segment to - */ -void -tcp_rst(uint32_t seqno, uint32_t ackno, - ip_addr_t *local_ip, ip_addr_t *remote_ip, - uint16_t local_port, uint16_t remote_port) -{ - struct pbuf *p; - struct tcp_hdr *tcphdr; - p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM); - if (p == NULL) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_rst: could not allocate memory for pbuf\n")); - return; - } - LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", - (p->len >= sizeof(struct tcp_hdr))); - - tcphdr = (struct tcp_hdr *)p->payload; - tcphdr->src = htons(local_port); - tcphdr->dest = htons(remote_port); - tcphdr->seqno = htonl(seqno); - tcphdr->ackno = htonl(ackno); - TCPH_HDRLEN_FLAGS_SET(tcphdr, TCP_HLEN/4, TCP_RST | TCP_ACK); - tcphdr->wnd = PP_HTONS(TCP_WND); - tcphdr->chksum = 0; - tcphdr->urgp = 0; - -#if CHECKSUM_GEN_TCP - tcphdr->chksum = inet_chksum_pseudo(p, local_ip, remote_ip, - IP_PROTO_TCP, p->tot_len); -#endif - TCP_STATS_INC(tcp.xmit); - snmp_inc_tcpoutrsts(); - /* Send output with hardcoded TTL since we have no access to the pcb */ - ip_output(p, local_ip, remote_ip, TCP_TTL, 0, IP_PROTO_TCP); - pbuf_free(p); - LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_rst: seqno %"U32_F" ackno %"U32_F".\n", seqno, ackno)); -} - -/** - * Requeue all unacked segments for retransmission - * - * Called by tcp_slowtmr() for slow retransmission. - * - * @param pcb the tcp_pcb for which to re-enqueue all unacked segments - */ -void -tcp_rexmit_rto(struct tcp_pcb *pcb) -{ - struct tcp_seg *seg; - - if (pcb->unacked == NULL) { - return; - } - - /* Move all unacked segments to the head of the unsent queue */ - for (seg = pcb->unacked; seg->next != NULL; seg = seg->next); - /* concatenate unsent queue after unacked queue */ - seg->next = pcb->unsent; - /* unsent queue is the concatenated queue (of unacked, unsent) */ - pcb->unsent = pcb->unacked; - /* unacked queue is now empty */ - pcb->unacked = NULL; - /* last unsent hasn't changed, no need to reset unsent_oversize */ - - /* increment number of retransmissions */ - ++pcb->nrtx; - - /* Don't take any RTT measurements after retransmitting. */ - pcb->rttest = 0; - - /* Do the actual retransmission */ - tcp_output(pcb); -} - -/** - * Requeue the first unacked segment for retransmission - * - * Called by tcp_receive() for fast retramsmit. - * - * @param pcb the tcp_pcb for which to retransmit the first unacked segment - */ -void -tcp_rexmit(struct tcp_pcb *pcb) -{ - struct tcp_seg *seg; - struct tcp_seg **cur_seg; - - if (pcb->unacked == NULL) { - return; - } - - /* Move the first unacked segment to the unsent queue */ - /* Keep the unsent queue sorted. */ - seg = pcb->unacked; - pcb->unacked = seg->next; - - cur_seg = &(pcb->unsent); - while (*cur_seg && - TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) { - cur_seg = &((*cur_seg)->next ); - } - seg->next = *cur_seg; - *cur_seg = seg; -#if TCP_OVERSIZE - if (seg->next == NULL) { - /* the retransmitted segment is last in unsent, so reset unsent_oversize */ - pcb->unsent_oversize = 0; - } -#endif /* TCP_OVERSIZE */ - - ++pcb->nrtx; - - /* Don't take any rtt measurements after retransmitting. */ - pcb->rttest = 0; - - /* Do the actual retransmission. */ - snmp_inc_tcpretranssegs(); - /* No need to call tcp_output: we are always called from tcp_input() - and thus tcp_output directly returns. */ -} - - -/** - * Handle retransmission after three dupacks received - * - * @param pcb the tcp_pcb for which to retransmit the first unacked segment - */ -void -tcp_rexmit_fast(struct tcp_pcb *pcb) -{ - if (pcb->unacked != NULL && !(pcb->flags & TF_INFR)) { - /* This is fast retransmit. Retransmit the first unacked segment. */ - LWIP_DEBUGF(TCP_FR_DEBUG, - ("tcp_receive: dupacks %"U16_F" (%"U32_F - "), fast retransmit %"U32_F"\n", - (uint16_t)pcb->dupacks, pcb->lastack, - ntohl(pcb->unacked->tcphdr->seqno))); - tcp_rexmit(pcb); - - /* Set ssthresh to half of the minimum of the current - * cwnd and the advertised window */ - if (pcb->cwnd > pcb->snd_wnd) { - pcb->ssthresh = pcb->snd_wnd / 2; - } else { - pcb->ssthresh = pcb->cwnd / 2; - } - - /* The minimum value for ssthresh should be 2 MSS */ - if (pcb->ssthresh < 2*pcb->mss) { - LWIP_DEBUGF(TCP_FR_DEBUG, - ("tcp_receive: The minimum value for ssthresh %"U16_F - " should be min 2 mss %"U16_F"...\n", - pcb->ssthresh, 2*pcb->mss)); - pcb->ssthresh = 2*pcb->mss; - } - - pcb->cwnd = pcb->ssthresh + 3 * pcb->mss; - pcb->flags |= TF_INFR; - } -} - - -/** - * Send keepalive packets to keep a connection active although - * no data is sent over it. - * - * Called by tcp_slowtmr() - * - * @param pcb the tcp_pcb for which to send a keepalive packet - */ -void -tcp_keepalive(struct tcp_pcb *pcb) -{ - struct pbuf *p; - struct tcp_hdr *tcphdr; - - LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: sending KEEPALIVE probe to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - ip4_addr1_16(&pcb->remote_ip), ip4_addr2_16(&pcb->remote_ip), - ip4_addr3_16(&pcb->remote_ip), ip4_addr4_16(&pcb->remote_ip))); - - LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: tcp_ticks %"U32_F" pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n", - tcp_ticks, pcb->tmr, pcb->keep_cnt_sent)); - - p = tcp_output_alloc_header(pcb, 0, 0, htonl(pcb->snd_nxt - 1)); - if(p == NULL) { - LWIP_DEBUGF(TCP_DEBUG, - ("tcp_keepalive: could not allocate memory for pbuf\n")); - return; - } - tcphdr = (struct tcp_hdr *)p->payload; - -#if CHECKSUM_GEN_TCP - tcphdr->chksum = inet_chksum_pseudo(p, &pcb->local_ip, &pcb->remote_ip, - IP_PROTO_TCP, p->tot_len); -#endif - TCP_STATS_INC(tcp.xmit); - - /* Send output to IP */ -#if LWIP_NETIF_HWADDRHINT - ip_output_hinted(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP, - &(pcb->addr_hint)); -#else /* LWIP_NETIF_HWADDRHINT*/ - ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP); -#endif /* LWIP_NETIF_HWADDRHINT*/ - - pbuf_free(p); - - LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: seqno %"U32_F" ackno %"U32_F".\n", - pcb->snd_nxt - 1, pcb->rcv_nxt)); -} - - -/** - * Send persist timer zero-window probes to keep a connection active - * when a window update is lost. - * - * Called by tcp_slowtmr() - * - * @param pcb the tcp_pcb for which to send a zero-window probe packet - */ -void -tcp_zero_window_probe(struct tcp_pcb *pcb) -{ - struct pbuf *p; - struct tcp_hdr *tcphdr; - struct tcp_seg *seg; - uint16_t len; - uint8_t is_fin; - - LWIP_DEBUGF(TCP_DEBUG, - ("tcp_zero_window_probe: sending ZERO WINDOW probe to %" - U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - ip4_addr1_16(&pcb->remote_ip), ip4_addr2_16(&pcb->remote_ip), - ip4_addr3_16(&pcb->remote_ip), ip4_addr4_16(&pcb->remote_ip))); - - LWIP_DEBUGF(TCP_DEBUG, - ("tcp_zero_window_probe: tcp_ticks %"U32_F - " pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n", - tcp_ticks, pcb->tmr, pcb->keep_cnt_sent)); - - seg = pcb->unacked; - - if(seg == NULL) { - seg = pcb->unsent; - } - if(seg == NULL) { - return; - } - - is_fin = ((TCPH_FLAGS(seg->tcphdr) & TCP_FIN) != 0) && (seg->len == 0); - /* we want to send one seqno: either FIN or data (no options) */ - len = is_fin ? 0 : 1; - - p = tcp_output_alloc_header(pcb, 0, len, seg->tcphdr->seqno); - if(p == NULL) { - LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: no memory for pbuf\n")); - return; - } - tcphdr = (struct tcp_hdr *)p->payload; - - if (is_fin) { - /* FIN segment, no data */ - TCPH_FLAGS_SET(tcphdr, TCP_ACK | TCP_FIN); - } else { - /* Data segment, copy in one byte from the head of the unacked queue */ - char *d = ((char *)p->payload + TCP_HLEN); - /* Depending on whether the segment has already been sent (unacked) or not - (unsent), seg->p->payload points to the IP header or TCP header. - Ensure we copy the first TCP data byte: */ - pbuf_copy_partial(seg->p, d, 1, seg->p->tot_len - seg->len); - } - -#if CHECKSUM_GEN_TCP - tcphdr->chksum = inet_chksum_pseudo(p, &pcb->local_ip, &pcb->remote_ip, - IP_PROTO_TCP, p->tot_len); -#endif - TCP_STATS_INC(tcp.xmit); - - /* Send output to IP */ -#if LWIP_NETIF_HWADDRHINT - ip_output_hinted(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP, - &(pcb->addr_hint)); -#else /* LWIP_NETIF_HWADDRHINT*/ - ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP); -#endif /* LWIP_NETIF_HWADDRHINT*/ - - pbuf_free(p); - - LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: seqno %"U32_F - " ackno %"U32_F".\n", - pcb->snd_nxt - 1, pcb->rcv_nxt)); -} -#endif /* LWIP_TCP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/udp.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/udp.c deleted file mode 100644 index bcefc03..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/core/udp.c +++ /dev/null @@ -1,1013 +0,0 @@ -/** - * @file - * User Datagram Protocol module - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - - -/* udp.c - * - * The code for the User Datagram Protocol UDP & UDPLite (RFC 3828). - * - */ - -/* @todo Check the use of '(struct udp_pcb).chksum_len_rx'! - */ - -#include "lwip/opt.h" - -#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/udp.h" -#include "lwip/def.h" -#include "lwip/memp.h" -#include "lwip/inet_chksum.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/icmp.h" -#include "lwip/stats.h" -#include "lwip/snmp.h" -#include "arch/perf.h" -#include "lwip/dhcp.h" - -#include - -#ifndef UDP_LOCAL_PORT_RANGE_START -/* From http://www.iana.org/assignments/port-numbers: - "The Dynamic and/or Private Ports are those from 49152 through 65535" */ -#define UDP_LOCAL_PORT_RANGE_START 0xc000 -#define UDP_LOCAL_PORT_RANGE_END 0xffff -#define UDP_ENSURE_LOCAL_PORT_RANGE(port) (((port) & ~UDP_LOCAL_PORT_RANGE_START) + UDP_LOCAL_PORT_RANGE_START) -#endif - -/* last local UDP port */ -static uint16_t udp_port = UDP_LOCAL_PORT_RANGE_START; - -/* The list of UDP PCBs */ -/* exported in udp.h (was static) */ -struct udp_pcb *udp_pcbs; - -/** - * Initialize this module. - */ -void -udp_init(void) -{ -#if LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS && defined(LWIP_RAND) - udp_port = UDP_ENSURE_LOCAL_PORT_RANGE(LWIP_RAND()); -#endif /* LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS && defined(LWIP_RAND) */ -} - -/** - * Allocate a new local UDP port. - * - * @return a new (free) local UDP port number - */ -static uint16_t -udp_new_port(void) -{ - uint16_t n = 0; - struct udp_pcb *pcb; - -again: - if (udp_port++ == UDP_LOCAL_PORT_RANGE_END) { - udp_port = UDP_LOCAL_PORT_RANGE_START; - } - /* Check all PCBs. */ - for(pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { - if (pcb->local_port == udp_port) { - if (++n > (UDP_LOCAL_PORT_RANGE_END - UDP_LOCAL_PORT_RANGE_START)) { - return 0; - } - goto again; - } - } - return udp_port; -#if 0 - struct udp_pcb *ipcb = udp_pcbs; - while ((ipcb != NULL) && (udp_port != UDP_LOCAL_PORT_RANGE_END)) { - if (ipcb->local_port == udp_port) { - /* port is already used by another udp_pcb */ - udp_port++; - /* restart scanning all udp pcbs */ - ipcb = udp_pcbs; - } else { - /* go on with next udp pcb */ - ipcb = ipcb->next; - } - } - if (ipcb != NULL) { - return 0; - } - return udp_port; -#endif -} - -/** - * Process an incoming UDP datagram. - * - * Given an incoming UDP datagram (as a chain of pbufs) this function - * finds a corresponding UDP PCB and hands over the pbuf to the pcbs - * recv function. If no pcb is found or the datagram is incorrect, the - * pbuf is freed. - * - * @param p pbuf to be demultiplexed to a UDP PCB. - * @param inp network interface on which the datagram was received. - * - */ -void -udp_input(struct pbuf *p, struct netif *inp) -{ - struct udp_hdr *udphdr; - struct udp_pcb *pcb, *prev; - struct udp_pcb *uncon_pcb; - struct ip_hdr *iphdr; - uint16_t src, dest; - uint8_t local_match; - uint8_t broadcast; - - PERF_START; - - UDP_STATS_INC(udp.recv); - - iphdr = (struct ip_hdr *)p->payload; - - /* Check minimum length (IP header + UDP header) - * and move payload pointer to UDP header */ - if (p->tot_len < (IPH_HL(iphdr) * 4 + UDP_HLEN) || pbuf_header(p, -(int16_t)(IPH_HL(iphdr) * 4))) { - /* drop short packets */ - LWIP_DEBUGF(UDP_DEBUG, - ("udp_input: short UDP datagram (%"U16_F" bytes) discarded\n", p->tot_len)); - UDP_STATS_INC(udp.lenerr); - UDP_STATS_INC(udp.drop); - snmp_inc_udpinerrors(); - pbuf_free(p); - goto end; - } - - udphdr = (struct udp_hdr *)p->payload; - - /* is broadcast packet ? */ - broadcast = ip_addr_isbroadcast(¤t_iphdr_dest, inp); - - LWIP_DEBUGF(UDP_DEBUG, ("udp_input: received datagram of length %"U16_F"\n", p->tot_len)); - - /* convert src and dest ports to host byte order */ - src = ntohs(udphdr->src); - dest = ntohs(udphdr->dest); - - udp_debug_print(udphdr); - - /* print the UDP source and destination */ - LWIP_DEBUGF(UDP_DEBUG, - ("udp (%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F") <-- " - "(%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F")\n", - ip4_addr1_16(&iphdr->dest), ip4_addr2_16(&iphdr->dest), - ip4_addr3_16(&iphdr->dest), ip4_addr4_16(&iphdr->dest), ntohs(udphdr->dest), - ip4_addr1_16(&iphdr->src), ip4_addr2_16(&iphdr->src), - ip4_addr3_16(&iphdr->src), ip4_addr4_16(&iphdr->src), ntohs(udphdr->src))); - -#if LWIP_DHCP - pcb = NULL; - /* when LWIP_DHCP is active, packets to DHCP_CLIENT_PORT may only be processed by - the dhcp module, no other UDP pcb may use the local UDP port DHCP_CLIENT_PORT */ - if (dest == DHCP_CLIENT_PORT) { - /* all packets for DHCP_CLIENT_PORT not coming from DHCP_SERVER_PORT are dropped! */ - if (src == DHCP_SERVER_PORT) { - if ((inp->dhcp != NULL) && (inp->dhcp->pcb != NULL)) { - /* accept the packe if - (- broadcast or directed to us) -> DHCP is link-layer-addressed, local ip is always ANY! - - inp->dhcp->pcb->remote == ANY or iphdr->src */ - if ((ip_addr_isany(&inp->dhcp->pcb->remote_ip) || - ip_addr_cmp(&(inp->dhcp->pcb->remote_ip), ¤t_iphdr_src))) { - pcb = inp->dhcp->pcb; - } - } - } - } else -#endif /* LWIP_DHCP */ - { - prev = NULL; - local_match = 0; - uncon_pcb = NULL; - /* Iterate through the UDP pcb list for a matching pcb. - * 'Perfect match' pcbs (connected to the remote port & ip address) are - * preferred. If no perfect match is found, the first unconnected pcb that - * matches the local port and ip address gets the datagram. */ - for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { - local_match = 0; - /* print the PCB local and remote address */ - LWIP_DEBUGF(UDP_DEBUG, - ("pcb (%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F") --- " - "(%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F")\n", - ip4_addr1_16(&pcb->local_ip), ip4_addr2_16(&pcb->local_ip), - ip4_addr3_16(&pcb->local_ip), ip4_addr4_16(&pcb->local_ip), pcb->local_port, - ip4_addr1_16(&pcb->remote_ip), ip4_addr2_16(&pcb->remote_ip), - ip4_addr3_16(&pcb->remote_ip), ip4_addr4_16(&pcb->remote_ip), pcb->remote_port)); - - /* compare PCB local addr+port to UDP destination addr+port */ - if (pcb->local_port == dest) { - if ( - (!broadcast && ip_addr_isany(&pcb->local_ip)) || - ip_addr_cmp(&(pcb->local_ip), ¤t_iphdr_dest) || -#if LWIP_IGMP - ip_addr_ismulticast(¤t_iphdr_dest) || -#endif /* LWIP_IGMP */ -#if IP_SOF_BROADCAST_RECV - (broadcast && ip_get_option(pcb, SOF_BROADCAST) && - (ip_addr_isany(&pcb->local_ip) || - ip_addr_netcmp(&pcb->local_ip, ip_current_dest_addr(), &inp->netmask)))) { -#else /* IP_SOF_BROADCAST_RECV */ - (broadcast && - (ip_addr_isany(&pcb->local_ip) || - ip_addr_netcmp(&pcb->local_ip, ip_current_dest_addr(), &inp->netmask)))) { -#endif /* IP_SOF_BROADCAST_RECV */ - local_match = 1; - if ((uncon_pcb == NULL) && - ((pcb->flags & UDP_FLAGS_CONNECTED) == 0)) { - /* the first unconnected matching PCB */ - uncon_pcb = pcb; - } - } - } - /* compare PCB remote addr+port to UDP source addr+port */ - if ((local_match != 0) && - (pcb->remote_port == src) && - (ip_addr_isany(&pcb->remote_ip) || - ip_addr_cmp(&(pcb->remote_ip), ¤t_iphdr_src))) { - /* the first fully matching PCB */ - if (prev != NULL) { - /* move the pcb to the front of udp_pcbs so that is - found faster next time */ - prev->next = pcb->next; - pcb->next = udp_pcbs; - udp_pcbs = pcb; - } else { - UDP_STATS_INC(udp.cachehit); - } - break; - } - prev = pcb; - } - /* no fully matching pcb found? then look for an unconnected pcb */ - if (pcb == NULL) { - pcb = uncon_pcb; - } - } - - /* Check checksum if this is a match or if it was directed at us. */ - if (pcb != NULL || ip_addr_cmp(&inp->ip_addr, ¤t_iphdr_dest)) { - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_input: calculating checksum\n")); -#if LWIP_UDPLITE - if (IPH_PROTO(iphdr) == IP_PROTO_UDPLITE) { - /* Do the UDP Lite checksum */ -#if CHECKSUM_CHECK_UDP - uint16_t chklen = ntohs(udphdr->len); - if (chklen < sizeof(struct udp_hdr)) { - if (chklen == 0) { - /* For UDP-Lite, checksum length of 0 means checksum - over the complete packet (See RFC 3828 chap. 3.1) */ - chklen = p->tot_len; - } else { - /* At least the UDP-Lite header must be covered by the - checksum! (Again, see RFC 3828 chap. 3.1) */ - UDP_STATS_INC(udp.chkerr); - UDP_STATS_INC(udp.drop); - snmp_inc_udpinerrors(); - pbuf_free(p); - goto end; - } - } - if (inet_chksum_pseudo_partial(p, ¤t_iphdr_src, ¤t_iphdr_dest, - IP_PROTO_UDPLITE, p->tot_len, chklen) != 0) { - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, - ("udp_input: UDP Lite datagram discarded due to failing checksum\n")); - UDP_STATS_INC(udp.chkerr); - UDP_STATS_INC(udp.drop); - snmp_inc_udpinerrors(); - pbuf_free(p); - goto end; - } -#endif /* CHECKSUM_CHECK_UDP */ - } else -#endif /* LWIP_UDPLITE */ - { -#if CHECKSUM_CHECK_UDP - if (udphdr->chksum != 0) { - if (inet_chksum_pseudo(p, ip_current_src_addr(), ip_current_dest_addr(), - IP_PROTO_UDP, p->tot_len) != 0) { - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, - ("udp_input: UDP datagram discarded due to failing checksum\n")); - UDP_STATS_INC(udp.chkerr); - UDP_STATS_INC(udp.drop); - snmp_inc_udpinerrors(); - pbuf_free(p); - goto end; - } - } -#endif /* CHECKSUM_CHECK_UDP */ - } - if(pbuf_header(p, -UDP_HLEN)) { - /* Can we cope with this failing? Just assert for now */ - LWIP_ASSERT("pbuf_header failed\n", 0); - UDP_STATS_INC(udp.drop); - snmp_inc_udpinerrors(); - pbuf_free(p); - goto end; - } - if (pcb != NULL) { - snmp_inc_udpindatagrams(); -#if SO_REUSE && SO_REUSE_RXTOALL - if ((broadcast || ip_addr_ismulticast(¤t_iphdr_dest)) && - ip_get_option(pcb, SOF_REUSEADDR)) { - /* pass broadcast- or multicast packets to all multicast pcbs - if SOF_REUSEADDR is set on the first match */ - struct udp_pcb *mpcb; - uint8_t p_header_changed = 0; - for (mpcb = udp_pcbs; mpcb != NULL; mpcb = mpcb->next) { - if (mpcb != pcb) { - /* compare PCB local addr+port to UDP destination addr+port */ - if ((mpcb->local_port == dest) && - ((!broadcast && ip_addr_isany(&mpcb->local_ip)) || - ip_addr_cmp(&(mpcb->local_ip), ¤t_iphdr_dest) || -#if LWIP_IGMP - ip_addr_ismulticast(¤t_iphdr_dest) || -#endif /* LWIP_IGMP */ -#if IP_SOF_BROADCAST_RECV - (broadcast && ip_get_option(mpcb, SOF_BROADCAST)))) { -#else /* IP_SOF_BROADCAST_RECV */ - (broadcast))) { -#endif /* IP_SOF_BROADCAST_RECV */ - /* pass a copy of the packet to all local matches */ - if (mpcb->recv != NULL) { - struct pbuf *q; - /* for that, move payload to IP header again */ - if (p_header_changed == 0) { - pbuf_header(p, (int16_t)((IPH_HL(iphdr) * 4) + UDP_HLEN)); - p_header_changed = 1; - } - q = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM); - if (q != NULL) { - err_t err = pbuf_copy(q, p); - if (err == ERR_OK) { - /* move payload to UDP data */ - pbuf_header(q, -(int16_t)((IPH_HL(iphdr) * 4) + UDP_HLEN)); - mpcb->recv(mpcb->recv_arg, mpcb, q, ip_current_src_addr(), src); - } - } - } - } - } - } - if (p_header_changed) { - /* and move payload to UDP data again */ - pbuf_header(p, -(int16_t)((IPH_HL(iphdr) * 4) + UDP_HLEN)); - } - } -#endif /* SO_REUSE && SO_REUSE_RXTOALL */ - /* callback */ - if (pcb->recv != NULL) { - /* now the recv function is responsible for freeing p */ - pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr(), src); - } else { - /* no recv function registered? then we have to free the pbuf! */ - pbuf_free(p); - goto end; - } - } else { - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_input: not for us.\n")); - -#if LWIP_ICMP - /* No match was found, send ICMP destination port unreachable unless - destination address was broadcast/multicast. */ - if (!broadcast && - !ip_addr_ismulticast(¤t_iphdr_dest)) { - /* move payload pointer back to ip header */ - pbuf_header(p, (IPH_HL(iphdr) * 4) + UDP_HLEN); - LWIP_ASSERT("p->payload == iphdr", (p->payload == iphdr)); - icmp_dest_unreach(p, ICMP_DUR_PORT); - } -#endif /* LWIP_ICMP */ - UDP_STATS_INC(udp.proterr); - UDP_STATS_INC(udp.drop); - snmp_inc_udpnoports(); - pbuf_free(p); - } - } else { - pbuf_free(p); - } -end: - PERF_STOP("udp_input"); -} - -/** - * Send data using UDP. - * - * @param pcb UDP PCB used to send the data. - * @param p chain of pbuf's to be sent. - * - * The datagram will be sent to the current remote_ip & remote_port - * stored in pcb. If the pcb is not bound to a port, it will - * automatically be bound to a random port. - * - * @return lwIP error code. - * - ERR_OK. Successful. No error occured. - * - ERR_MEM. Out of memory. - * - ERR_RTE. Could not find route to destination address. - * - More errors could be returned by lower protocol layers. - * - * @see udp_disconnect() udp_sendto() - */ -err_t -udp_send(struct udp_pcb *pcb, struct pbuf *p) -{ - /* send to the packet using remote ip and port stored in the pcb */ - return udp_sendto(pcb, p, &pcb->remote_ip, pcb->remote_port); -} - -#if LWIP_CHECKSUM_ON_COPY -/** Same as udp_send() but with checksum - */ -err_t -udp_send_chksum(struct udp_pcb *pcb, struct pbuf *p, - uint8_t have_chksum, uint16_t chksum) -{ - /* send to the packet using remote ip and port stored in the pcb */ - return udp_sendto_chksum(pcb, p, &pcb->remote_ip, pcb->remote_port, - have_chksum, chksum); -} -#endif /* LWIP_CHECKSUM_ON_COPY */ - -/** - * Send data to a specified address using UDP. - * - * @param pcb UDP PCB used to send the data. - * @param p chain of pbuf's to be sent. - * @param dst_ip Destination IP address. - * @param dst_port Destination UDP port. - * - * dst_ip & dst_port are expected to be in the same byte order as in the pcb. - * - * If the PCB already has a remote address association, it will - * be restored after the data is sent. - * - * @return lwIP error code (@see udp_send for possible error codes) - * - * @see udp_disconnect() udp_send() - */ -err_t -udp_sendto(struct udp_pcb *pcb, struct pbuf *p, - ip_addr_t *dst_ip, uint16_t dst_port) -{ -#if LWIP_CHECKSUM_ON_COPY - return udp_sendto_chksum(pcb, p, dst_ip, dst_port, 0, 0); -} - -/** Same as udp_sendto(), but with checksum */ -err_t -udp_sendto_chksum(struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *dst_ip, - uint16_t dst_port, uint8_t have_chksum, uint16_t chksum) -{ -#endif /* LWIP_CHECKSUM_ON_COPY */ - struct netif *netif; - - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_send\n")); - - /* find the outgoing network interface for this packet */ -#if LWIP_IGMP - netif = ip_route((ip_addr_ismulticast(dst_ip))?(&(pcb->multicast_ip)):(dst_ip)); -#else - netif = ip_route(dst_ip); -#endif /* LWIP_IGMP */ - - /* no outgoing network interface could be found? */ - if (netif == NULL) { - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: No route to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - ip4_addr1_16(dst_ip), ip4_addr2_16(dst_ip), ip4_addr3_16(dst_ip), ip4_addr4_16(dst_ip))); - UDP_STATS_INC(udp.rterr); - return ERR_RTE; - } -#if LWIP_CHECKSUM_ON_COPY - return udp_sendto_if_chksum(pcb, p, dst_ip, dst_port, netif, have_chksum, chksum); -#else /* LWIP_CHECKSUM_ON_COPY */ - return udp_sendto_if(pcb, p, dst_ip, dst_port, netif); -#endif /* LWIP_CHECKSUM_ON_COPY */ -} - -/** - * Send data to a specified address using UDP. - * The netif used for sending can be specified. - * - * This function exists mainly for DHCP, to be able to send UDP packets - * on a netif that is still down. - * - * @param pcb UDP PCB used to send the data. - * @param p chain of pbuf's to be sent. - * @param dst_ip Destination IP address. - * @param dst_port Destination UDP port. - * @param netif the netif used for sending. - * - * dst_ip & dst_port are expected to be in the same byte order as in the pcb. - * - * @return lwIP error code (@see udp_send for possible error codes) - * - * @see udp_disconnect() udp_send() - */ -err_t -udp_sendto_if(struct udp_pcb *pcb, struct pbuf *p, - ip_addr_t *dst_ip, uint16_t dst_port, struct netif *netif) -{ -#if LWIP_CHECKSUM_ON_COPY - return udp_sendto_if_chksum(pcb, p, dst_ip, dst_port, netif, 0, 0); -} - -/** Same as udp_sendto_if(), but with checksum */ -err_t -udp_sendto_if_chksum(struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *dst_ip, - uint16_t dst_port, struct netif *netif, uint8_t have_chksum, - uint16_t chksum) -{ -#endif /* LWIP_CHECKSUM_ON_COPY */ - struct udp_hdr *udphdr; - ip_addr_t *src_ip; - err_t err; - struct pbuf *q; /* q will be sent down the stack */ - -#if IP_SOF_BROADCAST - /* broadcast filter? */ - if (!ip_get_option(pcb, SOF_BROADCAST) && ip_addr_isbroadcast(dst_ip, netif)) { - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, - ("udp_sendto_if: SOF_BROADCAST not enabled on pcb %p\n", (void *)pcb)); - return ERR_VAL; - } -#endif /* IP_SOF_BROADCAST */ - - /* if the PCB is not yet bound to a port, bind it here */ - if (pcb->local_port == 0) { - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_send: not yet bound to a port, binding now\n")); - err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); - if (err != ERR_OK) { - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: forced port bind failed\n")); - return err; - } - } - - /* not enough space to add an UDP header to first pbuf in given p chain? */ - if (pbuf_header(p, UDP_HLEN)) { - /* allocate header in a separate new pbuf */ - q = pbuf_alloc(PBUF_IP, UDP_HLEN, PBUF_RAM); - /* new header pbuf could not be allocated? */ - if (q == NULL) { - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: could not allocate header\n")); - return ERR_MEM; - } - if (p->tot_len != 0) { - /* chain header q in front of given pbuf p (only if p contains data) */ - pbuf_chain(q, p); - } - /* first pbuf q points to header pbuf */ - LWIP_DEBUGF(UDP_DEBUG, - ("udp_send: added header pbuf %p before given pbuf %p\n", (void *)q, (void *)p)); - } else { - /* adding space for header within p succeeded */ - /* first pbuf q equals given pbuf */ - q = p; - LWIP_DEBUGF(UDP_DEBUG, ("udp_send: added header in given pbuf %p\n", (void *)p)); - } - LWIP_ASSERT("check that first pbuf can hold struct udp_hdr", - (q->len >= sizeof(struct udp_hdr))); - /* q now represents the packet to be sent */ - udphdr = (struct udp_hdr *)q->payload; - udphdr->src = htons(pcb->local_port); - udphdr->dest = htons(dst_port); - /* in UDP, 0 checksum means 'no checksum' */ - udphdr->chksum = 0x0000; - - /* Multicast Loop? */ -#if LWIP_IGMP - if (ip_addr_ismulticast(dst_ip) && ((pcb->flags & UDP_FLAGS_MULTICAST_LOOP) != 0)) { - q->flags |= PBUF_FLAG_MCASTLOOP; - } -#endif /* LWIP_IGMP */ - - - /* PCB local address is IP_ANY_ADDR? */ - if (ip_addr_isany(&pcb->local_ip)) { - /* use outgoing network interface IP address as source address */ - src_ip = &(netif->ip_addr); - } else { - /* check if UDP PCB local IP address is correct - * this could be an old address if netif->ip_addr has changed */ - if (!ip_addr_cmp(&(pcb->local_ip), &(netif->ip_addr))) { - /* local_ip doesn't match, drop the packet */ - if (q != p) { - /* free the header pbuf */ - pbuf_free(q); - q = NULL; - /* p is still referenced by the caller, and will live on */ - } - return ERR_VAL; - } - /* use UDP PCB local IP address as source address */ - src_ip = &(pcb->local_ip); - } - - LWIP_DEBUGF(UDP_DEBUG, ("udp_send: sending datagram of length %"U16_F"\n", q->tot_len)); - -#if LWIP_UDPLITE - /* UDP Lite protocol? */ - if (pcb->flags & UDP_FLAGS_UDPLITE) { - uint16_t chklen, chklen_hdr; - LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP LITE packet length %"U16_F"\n", q->tot_len)); - /* set UDP message length in UDP header */ - chklen_hdr = chklen = pcb->chksum_len_tx; - if ((chklen < sizeof(struct udp_hdr)) || (chklen > q->tot_len)) { - if (chklen != 0) { - LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP LITE pcb->chksum_len is illegal: %"U16_F"\n", chklen)); - } - /* For UDP-Lite, checksum length of 0 means checksum - over the complete packet. (See RFC 3828 chap. 3.1) - At least the UDP-Lite header must be covered by the - checksum, therefore, if chksum_len has an illegal - value, we generate the checksum over the complete - packet to be safe. */ - chklen_hdr = 0; - chklen = q->tot_len; - } - udphdr->len = htons(chklen_hdr); - /* calculate checksum */ -#if CHECKSUM_GEN_UDP - udphdr->chksum = inet_chksum_pseudo_partial(q, src_ip, dst_ip, - IP_PROTO_UDPLITE, q->tot_len, -#if !LWIP_CHECKSUM_ON_COPY - chklen); -#else /* !LWIP_CHECKSUM_ON_COPY */ - (have_chksum ? UDP_HLEN : chklen)); - if (have_chksum) { - uint32_t acc; - acc = udphdr->chksum + (uint16_t)~(chksum); - udphdr->chksum = FOLD_U32T(acc); - } -#endif /* !LWIP_CHECKSUM_ON_COPY */ - - /* chksum zero must become 0xffff, as zero means 'no checksum' */ - if (udphdr->chksum == 0x0000) { - udphdr->chksum = 0xffff; - } -#endif /* CHECKSUM_GEN_UDP */ - /* output to IP */ - LWIP_DEBUGF(UDP_DEBUG, ("udp_send: ip_output_if (,,,,IP_PROTO_UDPLITE,)\n")); - NETIF_SET_HWADDRHINT(netif, &pcb->addr_hint); - err = ip_output_if(q, src_ip, dst_ip, pcb->ttl, pcb->tos, IP_PROTO_UDPLITE, netif); - NETIF_SET_HWADDRHINT(netif, NULL); - } else -#endif /* LWIP_UDPLITE */ - { /* UDP */ - LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP packet length %"U16_F"\n", q->tot_len)); - udphdr->len = htons(q->tot_len); - /* calculate checksum */ -#if CHECKSUM_GEN_UDP - if ((pcb->flags & UDP_FLAGS_NOCHKSUM) == 0) { - uint16_t udpchksum; -#if LWIP_CHECKSUM_ON_COPY - if (have_chksum) { - uint32_t acc; - udpchksum = inet_chksum_pseudo_partial(q, src_ip, dst_ip, IP_PROTO_UDP, - q->tot_len, UDP_HLEN); - acc = udpchksum + (uint16_t)~(chksum); - udpchksum = FOLD_U32T(acc); - } else -#endif /* LWIP_CHECKSUM_ON_COPY */ - { - udpchksum = inet_chksum_pseudo(q, src_ip, dst_ip, IP_PROTO_UDP, q->tot_len); - } - - /* chksum zero must become 0xffff, as zero means 'no checksum' */ - if (udpchksum == 0x0000) { - udpchksum = 0xffff; - } - udphdr->chksum = udpchksum; - } -#endif /* CHECKSUM_GEN_UDP */ - LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP checksum 0x%04"X16_F"\n", udphdr->chksum)); - LWIP_DEBUGF(UDP_DEBUG, ("udp_send: ip_output_if (,,,,IP_PROTO_UDP,)\n")); - /* output to IP */ - NETIF_SET_HWADDRHINT(netif, &pcb->addr_hint); - err = ip_output_if(q, src_ip, dst_ip, pcb->ttl, pcb->tos, IP_PROTO_UDP, netif); - NETIF_SET_HWADDRHINT(netif, NULL); - } - /* TODO: must this be increased even if error occured? */ - snmp_inc_udpoutdatagrams(); - - /* did we chain a separate header pbuf earlier? */ - if (q != p) { - /* free the header pbuf */ - pbuf_free(q); - q = NULL; - /* p is still referenced by the caller, and will live on */ - } - - UDP_STATS_INC(udp.xmit); - return err; -} - -/** - * Bind an UDP PCB. - * - * @param pcb UDP PCB to be bound with a local address ipaddr and port. - * @param ipaddr local IP address to bind with. Use IP_ADDR_ANY to - * bind to all local interfaces. - * @param port local UDP port to bind with. Use 0 to automatically bind - * to a random port between UDP_LOCAL_PORT_RANGE_START and - * UDP_LOCAL_PORT_RANGE_END. - * - * ipaddr & port are expected to be in the same byte order as in the pcb. - * - * @return lwIP error code. - * - ERR_OK. Successful. No error occured. - * - ERR_USE. The specified ipaddr and port are already bound to by - * another UDP PCB. - * - * @see udp_disconnect() - */ -err_t -udp_bind(struct udp_pcb *pcb, ip_addr_t *ipaddr, uint16_t port) -{ - struct udp_pcb *ipcb; - uint8_t rebind; - - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_bind(ipaddr = ")); - ip_addr_debug_print(UDP_DEBUG, ipaddr); - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (", port = %"U16_F")\n", port)); - - rebind = 0; - /* Check for double bind and rebind of the same pcb */ - for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { - /* is this UDP PCB already on active list? */ - if (pcb == ipcb) { - /* pcb may occur at most once in active list */ - LWIP_ASSERT("rebind == 0", rebind == 0); - /* pcb already in list, just rebind */ - rebind = 1; - } - - /* By default, we don't allow to bind to a port that any other udp - PCB is alread bound to, unless *all* PCBs with that port have tha - REUSEADDR flag set. */ -#if SO_REUSE - else if (!ip_get_option(pcb, SOF_REUSEADDR) && - !ip_get_option(ipcb, SOF_REUSEADDR)) { -#else /* SO_REUSE */ - /* port matches that of PCB in list and REUSEADDR not set -> reject */ - else { -#endif /* SO_REUSE */ - if ((ipcb->local_port == port) && - /* IP address matches, or one is IP_ADDR_ANY? */ - (ip_addr_isany(&(ipcb->local_ip)) || - ip_addr_isany(ipaddr) || - ip_addr_cmp(&(ipcb->local_ip), ipaddr))) { - /* other PCB already binds to this local IP and port */ - LWIP_DEBUGF(UDP_DEBUG, - ("udp_bind: local port %"U16_F" already bound by another pcb\n", port)); - return ERR_USE; - } - } - } - - ip_addr_set(&pcb->local_ip, ipaddr); - - /* no port specified? */ - if (port == 0) { - port = udp_new_port(); - if (port == 0) { - /* no more ports available in local range */ - LWIP_DEBUGF(UDP_DEBUG, ("udp_bind: out of free UDP ports\n")); - return ERR_USE; - } - } - pcb->local_port = port; - snmp_insert_udpidx_tree(pcb); - /* pcb not active yet? */ - if (rebind == 0) { - /* place the PCB on the active list if not already there */ - pcb->next = udp_pcbs; - udp_pcbs = pcb; - } - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("udp_bind: bound to %"U16_F".%"U16_F".%"U16_F".%"U16_F", port %"U16_F"\n", - ip4_addr1_16(&pcb->local_ip), ip4_addr2_16(&pcb->local_ip), - ip4_addr3_16(&pcb->local_ip), ip4_addr4_16(&pcb->local_ip), - pcb->local_port)); - return ERR_OK; -} -/** - * Connect an UDP PCB. - * - * This will associate the UDP PCB with the remote address. - * - * @param pcb UDP PCB to be connected with remote address ipaddr and port. - * @param ipaddr remote IP address to connect with. - * @param port remote UDP port to connect with. - * - * @return lwIP error code - * - * ipaddr & port are expected to be in the same byte order as in the pcb. - * - * The udp pcb is bound to a random local port if not already bound. - * - * @see udp_disconnect() - */ -err_t -udp_connect(struct udp_pcb *pcb, ip_addr_t *ipaddr, uint16_t port) -{ - struct udp_pcb *ipcb; - - if (pcb->local_port == 0) { - err_t err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); - if (err != ERR_OK) { - return err; - } - } - - ip_addr_set(&pcb->remote_ip, ipaddr); - pcb->remote_port = port; - pcb->flags |= UDP_FLAGS_CONNECTED; -/** TODO: this functionality belongs in upper layers */ -#ifdef LWIP_UDP_TODO - /* Nail down local IP for netconn_addr()/getsockname() */ - if (ip_addr_isany(&pcb->local_ip) && !ip_addr_isany(&pcb->remote_ip)) { - struct netif *netif; - - if ((netif = ip_route(&(pcb->remote_ip))) == NULL) { - LWIP_DEBUGF(UDP_DEBUG, ("udp_connect: No route to 0x%lx\n", pcb->remote_ip.addr)); - UDP_STATS_INC(udp.rterr); - return ERR_RTE; - } - /** TODO: this will bind the udp pcb locally, to the interface which - is used to route output packets to the remote address. However, we - might want to accept incoming packets on any interface! */ - pcb->local_ip = netif->ip_addr; - } else if (ip_addr_isany(&pcb->remote_ip)) { - pcb->local_ip.addr = 0; - } -#endif - LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("udp_connect: connected to %"U16_F".%"U16_F".%"U16_F".%"U16_F",port %"U16_F"\n", - ip4_addr1_16(&pcb->local_ip), ip4_addr2_16(&pcb->local_ip), - ip4_addr3_16(&pcb->local_ip), ip4_addr4_16(&pcb->local_ip), - pcb->local_port)); - - /* Insert UDP PCB into the list of active UDP PCBs. */ - for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { - if (pcb == ipcb) { - /* already on the list, just return */ - return ERR_OK; - } - } - /* PCB not yet on the list, add PCB now */ - pcb->next = udp_pcbs; - udp_pcbs = pcb; - return ERR_OK; -} - -/** - * Disconnect a UDP PCB - * - * @param pcb the udp pcb to disconnect. - */ -void -udp_disconnect(struct udp_pcb *pcb) -{ - /* reset remote address association */ - ip_addr_set_any(&pcb->remote_ip); - pcb->remote_port = 0; - /* mark PCB as unconnected */ - pcb->flags &= ~UDP_FLAGS_CONNECTED; -} - -/** - * Set a receive callback for a UDP PCB - * - * This callback will be called when receiving a datagram for the pcb. - * - * @param pcb the pcb for wich to set the recv callback - * @param recv function pointer of the callback function - * @param recv_arg additional argument to pass to the callback function - */ -void -udp_recv(struct udp_pcb *pcb, udp_recv_fn recv, void *recv_arg) -{ - /* remember recv() callback and user data */ - pcb->recv = recv; - pcb->recv_arg = recv_arg; -} - -/** - * Remove an UDP PCB. - * - * @param pcb UDP PCB to be removed. The PCB is removed from the list of - * UDP PCB's and the data structure is freed from memory. - * - * @see udp_new() - */ -void -udp_remove(struct udp_pcb *pcb) -{ - struct udp_pcb *pcb2; - - snmp_delete_udpidx_tree(pcb); - /* pcb to be removed is first in list? */ - if (udp_pcbs == pcb) { - /* make list start at 2nd pcb */ - udp_pcbs = udp_pcbs->next; - /* pcb not 1st in list */ - } else { - for (pcb2 = udp_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { - /* find pcb in udp_pcbs list */ - if (pcb2->next != NULL && pcb2->next == pcb) { - /* remove pcb from list */ - pcb2->next = pcb->next; - } - } - } - memp_free(MEMP_UDP_PCB, pcb); -} - -/** - * Create a UDP PCB. - * - * @return The UDP PCB which was created. NULL if the PCB data structure - * could not be allocated. - * - * @see udp_remove() - */ -struct udp_pcb * -udp_new(void) -{ - struct udp_pcb *pcb; - pcb = (struct udp_pcb *)memp_malloc(MEMP_UDP_PCB); - /* could allocate UDP PCB? */ - if (pcb != NULL) { - /* UDP Lite: by initializing to all zeroes, chksum_len is set to 0 - * which means checksum is generated over the whole datagram per default - * (recommended as default by RFC 3828). */ - /* initialize PCB to all zeroes */ - memset(pcb, 0, sizeof(struct udp_pcb)); - pcb->ttl = UDP_TTL; - } - return pcb; -} - -#if UDP_DEBUG -/** - * Print UDP header information for debug purposes. - * - * @param udphdr pointer to the udp header in memory. - */ -void -udp_debug_print(struct udp_hdr *udphdr) -{ - LWIP_DEBUGF(UDP_DEBUG, ("UDP header:\n")); - LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(UDP_DEBUG, ("| %5"U16_F" | %5"U16_F" | (src port, dest port)\n", - ntohs(udphdr->src), ntohs(udphdr->dest))); - LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); - LWIP_DEBUGF(UDP_DEBUG, ("| %5"U16_F" | 0x%04"X16_F" | (len, chksum)\n", - ntohs(udphdr->len), ntohs(udphdr->chksum))); - LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); -} -#endif /* UDP_DEBUG */ - -#endif /* LWIP_UDP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/autoip.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/autoip.h deleted file mode 100644 index f0ea0cc..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/autoip.h +++ /dev/null @@ -1,118 +0,0 @@ -/** - * @file - * - * AutoIP Automatic LinkLocal IP Configuration - */ - -/* - * - * Copyright (c) 2007 Dominik Spies - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Dominik Spies - * - * This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform - * with RFC 3927. - * - * - * Please coordinate changes and requests with Dominik Spies - * - */ - -#ifndef __LWIP_AUTOIP_H__ -#define __LWIP_AUTOIP_H__ - -#include "lwip/opt.h" - -#if LWIP_AUTOIP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/netif.h" -#include "lwip/udp.h" -#include "netif/etharp.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* AutoIP Timing */ -#define AUTOIP_TMR_INTERVAL 100 -#define AUTOIP_TICKS_PER_SECOND (1000 / AUTOIP_TMR_INTERVAL) - -/* RFC 3927 Constants */ -#define PROBE_WAIT 1 /* second (initial random delay) */ -#define PROBE_MIN 1 /* second (minimum delay till repeated probe) */ -#define PROBE_MAX 2 /* seconds (maximum delay till repeated probe) */ -#define PROBE_NUM 3 /* (number of probe packets) */ -#define ANNOUNCE_NUM 2 /* (number of announcement packets) */ -#define ANNOUNCE_INTERVAL 2 /* seconds (time between announcement packets) */ -#define ANNOUNCE_WAIT 2 /* seconds (delay before announcing) */ -#define MAX_CONFLICTS 10 /* (max conflicts before rate limiting) */ -#define RATE_LIMIT_INTERVAL 60 /* seconds (delay between successive attempts) */ -#define DEFEND_INTERVAL 10 /* seconds (min. wait between defensive ARPs) */ - -/* AutoIP client states */ -#define AUTOIP_STATE_OFF 0 -#define AUTOIP_STATE_PROBING 1 -#define AUTOIP_STATE_ANNOUNCING 2 -#define AUTOIP_STATE_BOUND 3 - -struct autoip -{ - ip_addr_t llipaddr; /* the currently selected, probed, announced or used LL IP-Address */ - uint8_t state; /* current AutoIP state machine state */ - uint8_t sent_num; /* sent number of probes or announces, dependent on state */ - uint16_t ttw; /* ticks to wait, tick is AUTOIP_TMR_INTERVAL long */ - uint8_t lastconflict; /* ticks until a conflict can be solved by defending */ - uint8_t tried_llipaddr; /* total number of probed/used Link Local IP-Addresses */ -}; - - -#define autoip_init() /* Compatibility define, no init needed. */ - -/** Set a struct autoip allocated by the application to work with */ -void autoip_set_struct(struct netif *netif, struct autoip *autoip); - -/** Start AutoIP client */ -err_t autoip_start(struct netif *netif); - -/** Stop AutoIP client */ -err_t autoip_stop(struct netif *netif); - -/** Handles every incoming ARP Packet, called by etharp_arp_input */ -void autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr); - -/** Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds */ -void autoip_tmr(void); - -/** Handle a possible change in the network configuration */ -void autoip_network_changed(struct netif *netif); - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_AUTOIP */ - -#endif /* __LWIP_AUTOIP_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/icmp.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/icmp.h deleted file mode 100644 index 44353ea..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/icmp.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_ICMP_H__ -#define __LWIP_ICMP_H__ - -#include "lwip/opt.h" -#include "lwip/pbuf.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define ICMP_ER 0 /* echo reply */ -#define ICMP_DUR 3 /* destination unreachable */ -#define ICMP_SQ 4 /* source quench */ -#define ICMP_RD 5 /* redirect */ -#define ICMP_ECHO 8 /* echo */ -#define ICMP_TE 11 /* time exceeded */ -#define ICMP_PP 12 /* parameter problem */ -#define ICMP_TS 13 /* timestamp */ -#define ICMP_TSR 14 /* timestamp reply */ -#define ICMP_IRQ 15 /* information request */ -#define ICMP_IR 16 /* information reply */ - -enum icmp_dur_type { - ICMP_DUR_NET = 0, /* net unreachable */ - ICMP_DUR_HOST = 1, /* host unreachable */ - ICMP_DUR_PROTO = 2, /* protocol unreachable */ - ICMP_DUR_PORT = 3, /* port unreachable */ - ICMP_DUR_FRAG = 4, /* fragmentation needed and DF set */ - ICMP_DUR_SR = 5 /* source route failed */ -}; - -enum icmp_te_type { - ICMP_TE_TTL = 0, /* time to live exceeded in transit */ - ICMP_TE_FRAG = 1 /* fragment reassembly time exceeded */ -}; - -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -/** This is the standard ICMP header only that the uint32_t data - * is splitted to two uint16_t like ICMP echo needs it. - * This header is also used for other ICMP types that do not - * use the data part. - */ -PACK_STRUCT_BEGIN -struct icmp_echo_hdr { - PACK_STRUCT_FIELD(uint8_t type); - PACK_STRUCT_FIELD(uint8_t code); - PACK_STRUCT_FIELD(uint16_t chksum); - PACK_STRUCT_FIELD(uint16_t id); - PACK_STRUCT_FIELD(uint16_t seqno); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -#define ICMPH_TYPE(hdr) ((hdr)->type) -#define ICMPH_CODE(hdr) ((hdr)->code) - -/** Combines type and code to an uint16_t */ -#define ICMPH_TYPE_SET(hdr, t) ((hdr)->type = (t)) -#define ICMPH_CODE_SET(hdr, c) ((hdr)->code = (c)) - - -#if LWIP_ICMP /* don't build if not configured for use in lwipopts.h */ - -void icmp_input(struct pbuf *p, struct netif *inp); -void icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t); -void icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t); - -#endif /* LWIP_ICMP */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_ICMP_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/igmp.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/igmp.h deleted file mode 100644 index f8b7364..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/igmp.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2002 CITEL Technologies Ltd. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of CITEL Technologies Ltd nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY CITEL TECHNOLOGIES AND CONTRIBUTORS ``AS IS'' - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL CITEL TECHNOLOGIES OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is a contribution to the lwIP TCP/IP stack. - * The Swedish Institute of Computer Science and Adam Dunkels - * are specifically granted permission to redistribute this - * source code. -*/ - -#ifndef __LWIP_IGMP_H__ -#define __LWIP_IGMP_H__ - -#include "lwip/opt.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/pbuf.h" - -#if LWIP_IGMP /* don't build if not configured for use in lwipopts.h */ - -#ifdef __cplusplus -extern "C" { -#endif - - -/* IGMP timer */ -#define IGMP_TMR_INTERVAL 100 /* Milliseconds */ -#define IGMP_V1_DELAYING_MEMBER_TMR (1000/IGMP_TMR_INTERVAL) -#define IGMP_JOIN_DELAYING_MEMBER_TMR (500 /IGMP_TMR_INTERVAL) - -/* MAC Filter Actions, these are passed to a netif's - * igmp_mac_filter callback function. */ -#define IGMP_DEL_MAC_FILTER 0 -#define IGMP_ADD_MAC_FILTER 1 - - -/** - * igmp group structure - there is - * a list of groups for each interface - * these should really be linked from the interface, but - * if we keep them separate we will not affect the lwip original code - * too much - * - * There will be a group for the all systems group address but this - * will not run the state machine as it is used to kick off reports - * from all the other groups - */ -struct igmp_group { - /** next link */ - struct igmp_group *next; - /** interface on which the group is active */ - struct netif *netif; - /** multicast address */ - ip_addr_t group_address; - /** signifies we were the last person to report */ - uint8_t last_reporter_flag; - /** current state of the group */ - uint8_t group_state; - /** timer for reporting, negative is OFF */ - uint16_t timer; - /** counter of simultaneous uses */ - uint8_t use; -}; - -/* Prototypes */ -void igmp_init(void); -err_t igmp_start(struct netif *netif); -err_t igmp_stop(struct netif *netif); -void igmp_report_groups(struct netif *netif); -struct igmp_group *igmp_lookfor_group(struct netif *ifp, ip_addr_t *addr); -void igmp_input(struct pbuf *p, struct netif *inp, ip_addr_t *dest); -err_t igmp_joingroup(ip_addr_t *ifaddr, ip_addr_t *groupaddr); -err_t igmp_leavegroup(ip_addr_t *ifaddr, ip_addr_t *groupaddr); -void igmp_tmr(void); - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_IGMP */ - -#endif /* __LWIP_IGMP_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/inet.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/inet.h deleted file mode 100644 index 1f88c7b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/inet.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_INET_H__ -#define __LWIP_INET_H__ - -#include "lwip/opt.h" -#include "lwip/def.h" -#include "lwip/ip_addr.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** For compatibility with BSD code */ -struct in_addr { - uint32_t s_addr; -}; - -/** 255.255.255.255 */ -#define INADDR_NONE IPADDR_NONE -/** 127.0.0.1 */ -#define INADDR_LOOPBACK IPADDR_LOOPBACK -/** 0.0.0.0 */ -#define INADDR_ANY IPADDR_ANY -/** 255.255.255.255 */ -#define INADDR_BROADCAST IPADDR_BROADCAST - -/* Definitions of the bits in an Internet address integer. - - On subnets, host and network parts are found according to - the subnet mask, not these masks. */ -#define IN_CLASSA(a) IP_CLASSA(a) -#define IN_CLASSA_NET IP_CLASSA_NET -#define IN_CLASSA_NSHIFT IP_CLASSA_NSHIFT -#define IN_CLASSA_HOST IP_CLASSA_HOST -#define IN_CLASSA_MAX IP_CLASSA_MAX - -#define IN_CLASSB(b) IP_CLASSB(b) -#define IN_CLASSB_NET IP_CLASSB_NET -#define IN_CLASSB_NSHIFT IP_CLASSB_NSHIFT -#define IN_CLASSB_HOST IP_CLASSB_HOST -#define IN_CLASSB_MAX IP_CLASSB_MAX - -#define IN_CLASSC(c) IP_CLASSC(c) -#define IN_CLASSC_NET IP_CLASSC_NET -#define IN_CLASSC_NSHIFT IP_CLASSC_NSHIFT -#define IN_CLASSC_HOST IP_CLASSC_HOST -#define IN_CLASSC_MAX IP_CLASSC_MAX - -#define IN_CLASSD(d) IP_CLASSD(d) -#define IN_CLASSD_NET IP_CLASSD_NET /* These ones aren't really */ -#define IN_CLASSD_NSHIFT IP_CLASSD_NSHIFT /* net and host fields, but */ -#define IN_CLASSD_HOST IP_CLASSD_HOST /* routing needn't know. */ -#define IN_CLASSD_MAX IP_CLASSD_MAX - -#define IN_MULTICAST(a) IP_MULTICAST(a) - -#define IN_EXPERIMENTAL(a) IP_EXPERIMENTAL(a) -#define IN_BADCLASS(a) IP_BADCLASS(a) - -#define IN_LOOPBACKNET IP_LOOPBACKNET - -#define inet_addr_from_ipaddr(target_inaddr, source_ipaddr) ((target_inaddr)->s_addr = ip4_addr_get_u32(source_ipaddr)) -#define inet_addr_to_ipaddr(target_ipaddr, source_inaddr) (ip4_addr_set_u32(target_ipaddr, (source_inaddr)->s_addr)) -/* ATTENTION: the next define only works because both s_addr and ip_addr_t are an uint32_t effectively! */ -#define inet_addr_to_ipaddr_p(target_ipaddr_p, source_inaddr) ((target_ipaddr_p) = (ip_addr_t*)&((source_inaddr)->s_addr)) - -/* directly map this to the lwip internal functions */ -#define inet_addr(cp) ipaddr_addr(cp) -#define inet_aton(cp, addr) ipaddr_aton(cp, (ip_addr_t*)addr) -#define inet_ntoa(addr) ipaddr_ntoa((ip_addr_t*)&(addr)) -#define inet_ntoa_r(addr, buf, buflen) ipaddr_ntoa_r((ip_addr_t*)&(addr), buf, buflen) - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_INET_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/inet_chksum.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/inet_chksum.h deleted file mode 100644 index 4f7d55d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/inet_chksum.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_INET_CHKSUM_H__ -#define __LWIP_INET_CHKSUM_H__ - -#include "lwip/opt.h" - -#include "lwip/pbuf.h" -#include "lwip/ip_addr.h" - -/** Swap the bytes in an uint16_t: much like htons() for little-endian */ -#ifndef SWAP_BYTES_IN_WORD -#if LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN) -/* little endian and PLATFORM_BYTESWAP defined */ -#define SWAP_BYTES_IN_WORD(w) LWIP_PLATFORM_HTONS(w) -#else /* LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN) */ -/* can't use htons on big endian (or PLATFORM_BYTESWAP not defined)... */ -#define SWAP_BYTES_IN_WORD(w) (((w) & 0xff) << 8) | (((w) & 0xff00) >> 8) -#endif /* LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN)*/ -#endif /* SWAP_BYTES_IN_WORD */ - -/** Split an uint32_t in two u16_ts and add them up */ -#ifndef FOLD_U32T -#define FOLD_U32T(u) (((u) >> 16) + ((u) & 0x0000ffffUL)) -#endif - -#if LWIP_CHECKSUM_ON_COPY -/** Function-like macro: same as MEMCPY but returns the checksum of copied data - as uint16_t */ -#ifndef LWIP_CHKSUM_COPY -#define LWIP_CHKSUM_COPY(dst, src, len) lwip_chksum_copy(dst, src, len) -#ifndef LWIP_CHKSUM_COPY_ALGORITHM -#define LWIP_CHKSUM_COPY_ALGORITHM 1 -#endif /* LWIP_CHKSUM_COPY_ALGORITHM */ -#endif /* LWIP_CHKSUM_COPY */ -#else /* LWIP_CHECKSUM_ON_COPY */ -#define LWIP_CHKSUM_COPY_ALGORITHM 0 -#endif /* LWIP_CHECKSUM_ON_COPY */ - -#ifdef __cplusplus -extern "C" { -#endif - -uint16_t inet_chksum(void *dataptr, uint16_t len); -uint16_t inet_chksum_pbuf(struct pbuf *p); -uint16_t inet_chksum_pseudo(struct pbuf *p, - ip_addr_t *src, ip_addr_t *dest, - uint8_t proto, uint16_t proto_len); -uint16_t inet_chksum_pseudo_partial(struct pbuf *p, - ip_addr_t *src, ip_addr_t *dest, - uint8_t proto, uint16_t proto_len, uint16_t chksum_len); -#if LWIP_CHKSUM_COPY_ALGORITHM -uint16_t lwip_chksum_copy(void *dst, const void *src, uint16_t len); -#endif /* LWIP_CHKSUM_COPY_ALGORITHM */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_INET_H__ */ - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/ip.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/ip.h deleted file mode 100644 index 2787ba9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/ip.h +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_IP_H__ -#define __LWIP_IP_H__ - -#include "lwip/opt.h" - -#include "lwip/def.h" -#include "lwip/pbuf.h" -#include "lwip/ip_addr.h" -#include "lwip/err.h" -#include "lwip/netif.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** Currently, the function ip_output_if_opt() is only used with IGMP */ -#define IP_OPTIONS_SEND LWIP_IGMP - -#define IP_HLEN 20 - -#define IP_PROTO_ICMP 1 -#define IP_PROTO_IGMP 2 -#define IP_PROTO_UDP 17 -#define IP_PROTO_UDPLITE 136 -#define IP_PROTO_TCP 6 - -/* This is passed as the destination address to ip_output_if (not - to ip_output), meaning that an IP header already is constructed - in the pbuf. This is used when TCP retransmits. */ -#ifdef IP_HDRINCL -#undef IP_HDRINCL -#endif /* IP_HDRINCL */ -#define IP_HDRINCL NULL - -#if LWIP_NETIF_HWADDRHINT -#define IP_PCB_ADDRHINT ;uint8_t addr_hint -#else -#define IP_PCB_ADDRHINT -#endif /* LWIP_NETIF_HWADDRHINT */ - -/* This is the common part of all PCB types. It needs to be at the - beginning of a PCB type definition. It is located here so that - changes to this common part are made in one location instead of - having to change all PCB structs. */ -#define IP_PCB \ - /* ip addresses in network byte order */ \ - ip_addr_t local_ip; \ - ip_addr_t remote_ip; \ - /* Socket options */ \ - uint8_t so_options; \ - /* Type Of Service */ \ - uint8_t tos; \ - /* Time To Live */ \ - uint8_t ttl \ - /* link layer address resolution hint */ \ - IP_PCB_ADDRHINT - -struct ip_pcb { -/* Common members of all PCB types */ - IP_PCB; -}; - -/* - * Option flags per-socket. These are the same like SO_XXX. - */ -/*#define SOF_DEBUG 0x01U Unimplemented: turn on debugging info recording */ -#define SOF_ACCEPTCONN 0x02U /* socket has had listen() */ -#define SOF_REUSEADDR 0x04U /* allow local address reuse */ -#define SOF_KEEPALIVE 0x08U /* keep connections alive */ -/*#define SOF_DONTROUTE 0x10U Unimplemented: just use interface addresses */ -#define SOF_BROADCAST 0x20U /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */ -/*#define SOF_USELOOPBACK 0x40U Unimplemented: bypass hardware when possible */ -#define SOF_LINGER 0x80U /* linger on close if data present */ -/*#define SOF_OOBINLINE 0x0100U Unimplemented: leave received OOB data in line */ -/*#define SOF_REUSEPORT 0x0200U Unimplemented: allow local address & port reuse */ - -/* These flags are inherited (e.g. from a listen-pcb to a connection-pcb): */ -#define SOF_INHERITED (SOF_REUSEADDR|SOF_KEEPALIVE|SOF_LINGER/*|SOF_DEBUG|SOF_DONTROUTE|SOF_OOBINLINE*/) - - -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct ip_hdr { - /* version / header length */ - PACK_STRUCT_FIELD(uint8_t _v_hl); - /* type of service */ - PACK_STRUCT_FIELD(uint8_t _tos); - /* total length */ - PACK_STRUCT_FIELD(uint16_t _len); - /* identification */ - PACK_STRUCT_FIELD(uint16_t _id); - /* fragment offset field */ - PACK_STRUCT_FIELD(uint16_t _offset); -#define IP_RF 0x8000U /* reserved fragment flag */ -#define IP_DF 0x4000U /* dont fragment flag */ -#define IP_MF 0x2000U /* more fragments flag */ -#define IP_OFFMASK 0x1fffU /* mask for fragmenting bits */ - /* time to live */ - PACK_STRUCT_FIELD(uint8_t _ttl); - /* protocol*/ - PACK_STRUCT_FIELD(uint8_t _proto); - /* checksum */ - PACK_STRUCT_FIELD(uint16_t _chksum); - /* source and destination IP addresses */ - PACK_STRUCT_FIELD(ip_addr_p_t src); - PACK_STRUCT_FIELD(ip_addr_p_t dest); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -#define IPH_V(hdr) ((hdr)->_v_hl >> 4) -#define IPH_HL(hdr) ((hdr)->_v_hl & 0x0f) -#define IPH_TOS(hdr) ((hdr)->_tos) -#define IPH_LEN(hdr) ((hdr)->_len) -#define IPH_ID(hdr) ((hdr)->_id) -#define IPH_OFFSET(hdr) ((hdr)->_offset) -#define IPH_TTL(hdr) ((hdr)->_ttl) -#define IPH_PROTO(hdr) ((hdr)->_proto) -#define IPH_CHKSUM(hdr) ((hdr)->_chksum) - -#define IPH_VHL_SET(hdr, v, hl) (hdr)->_v_hl = (((v) << 4) | (hl)) -#define IPH_TOS_SET(hdr, tos) (hdr)->_tos = (tos) -#define IPH_LEN_SET(hdr, len) (hdr)->_len = (len) -#define IPH_ID_SET(hdr, id) (hdr)->_id = (id) -#define IPH_OFFSET_SET(hdr, off) (hdr)->_offset = (off) -#define IPH_TTL_SET(hdr, ttl) (hdr)->_ttl = (uint8_t)(ttl) -#define IPH_PROTO_SET(hdr, proto) (hdr)->_proto = (uint8_t)(proto) -#define IPH_CHKSUM_SET(hdr, chksum) (hdr)->_chksum = (chksum) - -/** The interface that provided the packet for the current callback invocation. */ -extern struct netif *current_netif; -/** Header of the input packet currently being processed. */ -extern const struct ip_hdr *current_header; -/** Source IP address of current_header */ -extern ip_addr_t current_iphdr_src; -/** Destination IP address of current_header */ -extern ip_addr_t current_iphdr_dest; - -#define ip_init() /* Compatibility define, not init needed. */ -struct netif *ip_route(ip_addr_t *dest); -err_t ip_input(struct pbuf *p, struct netif *inp); -err_t ip_output(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, - uint8_t ttl, uint8_t tos, uint8_t proto); -err_t ip_output_if(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, - uint8_t ttl, uint8_t tos, uint8_t proto, - struct netif *netif); -#if LWIP_NETIF_HWADDRHINT -err_t ip_output_hinted(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, - uint8_t ttl, uint8_t tos, uint8_t proto, uint8_t *addr_hint); -#endif /* LWIP_NETIF_HWADDRHINT */ -#if IP_OPTIONS_SEND -err_t ip_output_if_opt(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, - uint8_t ttl, uint8_t tos, uint8_t proto, struct netif *netif, void *ip_options, - uint16_t optlen); -#endif /* IP_OPTIONS_SEND */ -/** Get the interface that received the current packet. - * This function must only be called from a receive callback (udp_recv, - * raw_recv, tcp_accept). It will return NULL otherwise. */ -#define ip_current_netif() (current_netif) -/** Get the IP header of the current packet. - * This function must only be called from a receive callback (udp_recv, - * raw_recv, tcp_accept). It will return NULL otherwise. */ -#define ip_current_header() (current_header) -/** Source IP address of current_header */ -#define ip_current_src_addr() (¤t_iphdr_src) -/** Destination IP address of current_header */ -#define ip_current_dest_addr() (¤t_iphdr_dest) - -/** Gets an IP pcb option (SOF_* flags) */ -#define ip_get_option(pcb, opt) ((pcb)->so_options & (opt)) -/** Sets an IP pcb option (SOF_* flags) */ -#define ip_set_option(pcb, opt) ((pcb)->so_options |= (opt)) -/** Resets an IP pcb option (SOF_* flags) */ -#define ip_reset_option(pcb, opt) ((pcb)->so_options &= ~(opt)) - -#if IP_DEBUG -void ip_debug_print(struct pbuf *p); -#else -#define ip_debug_print(p) -#endif /* IP_DEBUG */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_IP_H__ */ - - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/ip_addr.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/ip_addr.h deleted file mode 100644 index 87047f4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/ip_addr.h +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_IP_ADDR_H__ -#define __LWIP_IP_ADDR_H__ - -#include "lwip/opt.h" -#include "lwip/def.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* This is the aligned version of ip_addr_t, - used as local variable, on the stack, etc. */ -struct ip_addr { - uint32_t addr; -}; - -/* This is the packed version of ip_addr_t, - used in network headers that are itself packed */ -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct ip_addr_packed { - PACK_STRUCT_FIELD(uint32_t addr); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -/** ip_addr_t uses a struct for convenience only, so that the same defines can - * operate both on ip_addr_t as well as on ip_addr_p_t. */ -typedef struct ip_addr ip_addr_t; -typedef struct ip_addr_packed ip_addr_p_t; - -/* - * struct ipaddr2 is used in the definition of the ARP packet format in - * order to support compilers that don't have structure packing. - */ -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct ip_addr2 { - PACK_STRUCT_FIELD(uint16_t addrw[2]); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -/* Forward declaration to not include netif.h */ -struct netif; - -extern const ip_addr_t ip_addr_any; -extern const ip_addr_t ip_addr_broadcast; - -/** IP_ADDR_ can be used as a fixed IP address - * for the wildcard and the broadcast address - */ -#define IP_ADDR_ANY ((ip_addr_t *)&ip_addr_any) -#define IP_ADDR_BROADCAST ((ip_addr_t *)&ip_addr_broadcast) - -/** 255.255.255.255 */ -#define IPADDR_NONE ((uint32_t)0xffffffffUL) -/** 127.0.0.1 */ -#define IPADDR_LOOPBACK ((uint32_t)0x7f000001UL) -/** 0.0.0.0 */ -#define IPADDR_ANY ((uint32_t)0x00000000UL) -/** 255.255.255.255 */ -#define IPADDR_BROADCAST ((uint32_t)0xffffffffUL) - -/* Definitions of the bits in an Internet address integer. - - On subnets, host and network parts are found according to - the subnet mask, not these masks. */ -#define IP_CLASSA(a) ((((uint32_t)(a)) & 0x80000000UL) == 0) -#define IP_CLASSA_NET 0xff000000 -#define IP_CLASSA_NSHIFT 24 -#define IP_CLASSA_HOST (0xffffffff & ~IP_CLASSA_NET) -#define IP_CLASSA_MAX 128 - -#define IP_CLASSB(a) ((((uint32_t)(a)) & 0xc0000000UL) == 0x80000000UL) -#define IP_CLASSB_NET 0xffff0000 -#define IP_CLASSB_NSHIFT 16 -#define IP_CLASSB_HOST (0xffffffff & ~IP_CLASSB_NET) -#define IP_CLASSB_MAX 65536 - -#define IP_CLASSC(a) ((((uint32_t)(a)) & 0xe0000000UL) == 0xc0000000UL) -#define IP_CLASSC_NET 0xffffff00 -#define IP_CLASSC_NSHIFT 8 -#define IP_CLASSC_HOST (0xffffffff & ~IP_CLASSC_NET) - -#define IP_CLASSD(a) (((uint32_t)(a) & 0xf0000000UL) == 0xe0000000UL) -#define IP_CLASSD_NET 0xf0000000 /* These ones aren't really */ -#define IP_CLASSD_NSHIFT 28 /* net and host fields, but */ -#define IP_CLASSD_HOST 0x0fffffff /* routing needn't know. */ -#define IP_MULTICAST(a) IP_CLASSD(a) - -#define IP_EXPERIMENTAL(a) (((uint32_t)(a) & 0xf0000000UL) == 0xf0000000UL) -#define IP_BADCLASS(a) (((uint32_t)(a) & 0xf0000000UL) == 0xf0000000UL) - -#define IP_LOOPBACKNET 127 /* official! */ - - -#if BYTE_ORDER == BIG_ENDIAN -/** Set an IP address given by the four byte-parts */ -#define IP4_ADDR(ipaddr, a,b,c,d) \ - (ipaddr)->addr = ((uint32_t)((a) & 0xff) << 24) | \ - ((uint32_t)((b) & 0xff) << 16) | \ - ((uint32_t)((c) & 0xff) << 8) | \ - (uint32_t)((d) & 0xff) -#else -/** Set an IP address given by the four byte-parts. - Little-endian version that prevents the use of htonl. */ -#define IP4_ADDR(ipaddr, a,b,c,d) \ - (ipaddr)->addr = ((uint32_t)((d) & 0xff) << 24) | \ - ((uint32_t)((c) & 0xff) << 16) | \ - ((uint32_t)((b) & 0xff) << 8) | \ - (uint32_t)((a) & 0xff) -#endif - -/** MEMCPY-like copying of IP addresses where addresses are known to be - * 16-bit-aligned if the port is correctly configured (so a port could define - * this to copying 2 uint16_t's) - no NULL-pointer-checking needed. */ -#ifndef IPADDR2_COPY -#define IPADDR2_COPY(dest, src) SMEMCPY(dest, src, sizeof(ip_addr_t)) -#endif - -/** Copy IP address - faster than ip_addr_set: no NULL check */ -#define ip_addr_copy(dest, src) ((dest).addr = (src).addr) -/** Safely copy one IP address to another (src may be NULL) */ -#define ip_addr_set(dest, src) ((dest)->addr = \ - ((src) == NULL ? 0 : \ - (src)->addr)) -/** Set complete address to zero */ -#define ip_addr_set_zero(ipaddr) ((ipaddr)->addr = 0) -/** Set address to IPADDR_ANY (no need for htonl()) */ -#define ip_addr_set_any(ipaddr) ((ipaddr)->addr = IPADDR_ANY) -/** Set address to loopback address */ -#define ip_addr_set_loopback(ipaddr) ((ipaddr)->addr = PP_HTONL(IPADDR_LOOPBACK)) -/** Safely copy one IP address to another and change byte order - * from host- to network-order. */ -#define ip_addr_set_hton(dest, src) ((dest)->addr = \ - ((src) == NULL ? 0:\ - htonl((src)->addr))) -/** IPv4 only: set the IP address given as an uint32_t */ -#define ip4_addr_set_u32(dest_ipaddr, src_u32) ((dest_ipaddr)->addr = (src_u32)) -/** IPv4 only: get the IP address as an uint32_t */ -#define ip4_addr_get_u32(src_ipaddr) ((src_ipaddr)->addr) - -/** Get the network address by combining host address with netmask */ -#define ip_addr_get_network(target, host, netmask) ((target)->addr = ((host)->addr) & ((netmask)->addr)) - -/** - * Determine if two address are on the same network. - * - * @arg addr1 IP address 1 - * @arg addr2 IP address 2 - * @arg mask network identifier mask - * @return !0 if the network identifiers of both address match - */ -#define ip_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \ - (mask)->addr) == \ - ((addr2)->addr & \ - (mask)->addr)) -#define ip_addr_cmp(addr1, addr2) ((addr1)->addr == (addr2)->addr) - -#define ip_addr_isany(addr1) ((addr1) == NULL || (addr1)->addr == IPADDR_ANY) - -#define ip_addr_isbroadcast(ipaddr, netif) ip4_addr_isbroadcast((ipaddr)->addr, (netif)) -uint8_t ip4_addr_isbroadcast(uint32_t addr, const struct netif *netif); - -#define ip_addr_netmask_valid(netmask) ip4_addr_netmask_valid((netmask)->addr) -uint8_t ip4_addr_netmask_valid(uint32_t netmask); - -#define ip_addr_ismulticast(addr1) (((addr1)->addr & PP_HTONL(0xf0000000UL)) == PP_HTONL(0xe0000000UL)) - -#define ip_addr_islinklocal(addr1) (((addr1)->addr & PP_HTONL(0xffff0000UL)) == PP_HTONL(0xa9fe0000UL)) - -#define ip_addr_debug_print(debug, ipaddr) \ - LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F, \ - ipaddr != NULL ? ip4_addr1_16(ipaddr) : 0, \ - ipaddr != NULL ? ip4_addr2_16(ipaddr) : 0, \ - ipaddr != NULL ? ip4_addr3_16(ipaddr) : 0, \ - ipaddr != NULL ? ip4_addr4_16(ipaddr) : 0)) - -/* Get one byte from the 4-byte address */ -#ifndef ip4_addr1 -#define ip4_addr1(ipaddr) (((uint8_t*)(ipaddr))[0]) -#define ip4_addr2(ipaddr) (((uint8_t*)(ipaddr))[1]) -#define ip4_addr3(ipaddr) (((uint8_t*)(ipaddr))[2]) -#define ip4_addr4(ipaddr) (((uint8_t*)(ipaddr))[3]) -#endif -/* These are cast to uint16_t, with the intent that they are often arguments - * to printf using the U16_F format from cc.h. */ -#define ip4_addr1_16(ipaddr) ((uint16_t)ip4_addr1(ipaddr)) -#define ip4_addr2_16(ipaddr) ((uint16_t)ip4_addr2(ipaddr)) -#define ip4_addr3_16(ipaddr) ((uint16_t)ip4_addr3(ipaddr)) -#define ip4_addr4_16(ipaddr) ((uint16_t)ip4_addr4(ipaddr)) - -/** For backwards compatibility */ -#define ip_ntoa(ipaddr) ipaddr_ntoa(ipaddr) - -uint32_t ipaddr_addr(const char *cp); -int ipaddr_aton(const char *cp, ip_addr_t *addr); -/** returns ptr to static buffer; not reentrant! */ -char *ipaddr_ntoa(const ip_addr_t *addr); -char *ipaddr_ntoa_r(const ip_addr_t *addr, char *buf, int buflen); - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_IP_ADDR_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/ip_frag.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/ip_frag.h deleted file mode 100644 index 5b648ea..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv4/lwip/ip_frag.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Jani Monoses - * - */ - -#ifndef __LWIP_IP_FRAG_H__ -#define __LWIP_IP_FRAG_H__ - -#include "lwip/opt.h" -#include "lwip/err.h" -#include "lwip/pbuf.h" -#include "lwip/netif.h" -#include "lwip/ip_addr.h" -#include "lwip/ip.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if IP_REASSEMBLY -/* The IP reassembly timer interval in milliseconds. */ -#define IP_TMR_INTERVAL 1000 - -/* IP reassembly helper struct. - * This is exported because memp needs to know the size. - */ -struct ip_reassdata { - struct ip_reassdata *next; - struct pbuf *p; - struct ip_hdr iphdr; - uint16_t datagram_len; - uint8_t flags; - uint8_t timer; -}; - -void ip_reass_init(void); -void ip_reass_tmr(void); -struct pbuf * ip_reass(struct pbuf *p); -#endif /* IP_REASSEMBLY */ - -#if IP_FRAG -#if !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF -/** A custom pbuf that holds a reference to another pbuf, which is freed - * when this custom pbuf is freed. This is used to create a custom PBUF_REF - * that points into the original pbuf. */ -struct pbuf_custom_ref { - /** 'base class' */ - struct pbuf_custom pc; - /** pointer to the original pbuf that is referenced */ - struct pbuf *original; -}; -#endif /* !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF */ - -err_t ip_frag(struct pbuf *p, struct netif *netif, ip_addr_t *dest); -#endif /* IP_FRAG */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_IP_FRAG_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv6/lwip/icmp.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv6/lwip/icmp.h deleted file mode 100644 index 87e9ffd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv6/lwip/icmp.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_ICMP_H__ -#define __LWIP_ICMP_H__ - -#include "lwip/opt.h" - -#if LWIP_ICMP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/pbuf.h" -#include "lwip/netif.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define ICMP6_DUR 1 -#define ICMP6_TE 3 -#define ICMP6_ECHO 128 /* echo */ -#define ICMP6_ER 129 /* echo reply */ - - -enum icmp_dur_type { - ICMP_DUR_NET = 0, /* net unreachable */ - ICMP_DUR_HOST = 1, /* host unreachable */ - ICMP_DUR_PROTO = 2, /* protocol unreachable */ - ICMP_DUR_PORT = 3, /* port unreachable */ - ICMP_DUR_FRAG = 4, /* fragmentation needed and DF set */ - ICMP_DUR_SR = 5 /* source route failed */ -}; - -enum icmp_te_type { - ICMP_TE_TTL = 0, /* time to live exceeded in transit */ - ICMP_TE_FRAG = 1 /* fragment reassembly time exceeded */ -}; - -void icmp_input(struct pbuf *p, struct netif *inp); - -void icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t); -void icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t); - -struct icmp_echo_hdr { - u8_t type; - u8_t icode; - u16_t chksum; - u16_t id; - u16_t seqno; -}; - -struct icmp_dur_hdr { - u8_t type; - u8_t icode; - u16_t chksum; - u32_t unused; -}; - -struct icmp_te_hdr { - u8_t type; - u8_t icode; - u16_t chksum; - u32_t unused; -}; - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_ICMP */ - -#endif /* __LWIP_ICMP_H__ */ - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv6/lwip/inet.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv6/lwip/inet.h deleted file mode 100644 index de1a0b6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv6/lwip/inet.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_INET_H__ -#define __LWIP_INET_H__ - -#include "lwip/opt.h" -#include "lwip/pbuf.h" -#include "lwip/ip_addr.h" - -#ifdef __cplusplus -extern "C" { -#endif - -u16_t inet_chksum(void *data, u16_t len); -u16_t inet_chksum_pbuf(struct pbuf *p); -u16_t inet_chksum_pseudo(struct pbuf *p, - struct ip_addr *src, struct ip_addr *dest, - u8_t proto, u32_t proto_len); - -u32_t inet_addr(const char *cp); -s8_t inet_aton(const char *cp, struct in_addr *addr); - -#ifndef _MACHINE_ENDIAN_H_ -#ifndef _NETINET_IN_H -#ifndef _LINUX_BYTEORDER_GENERIC_H -u16_t htons(u16_t n); -u16_t ntohs(u16_t n); -u32_t htonl(u32_t n); -u32_t ntohl(u32_t n); -#endif /* _LINUX_BYTEORDER_GENERIC_H */ -#endif /* _NETINET_IN_H */ -#endif /* _MACHINE_ENDIAN_H_ */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_INET_H__ */ - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv6/lwip/ip.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv6/lwip/ip.h deleted file mode 100644 index a01cfc6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv6/lwip/ip.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_IP_H__ -#define __LWIP_IP_H__ - -#include "lwip/opt.h" -#include "lwip/def.h" -#include "lwip/pbuf.h" -#include "lwip/ip_addr.h" - -#include "lwip/err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define IP_HLEN 40 - -#define IP_PROTO_ICMP 58 -#define IP_PROTO_UDP 17 -#define IP_PROTO_UDPLITE 136 -#define IP_PROTO_TCP 6 - -/* This is passed as the destination address to ip_output_if (not - to ip_output), meaning that an IP header already is constructed - in the pbuf. This is used when TCP retransmits. */ -#ifdef IP_HDRINCL -#undef IP_HDRINCL -#endif /* IP_HDRINCL */ -#define IP_HDRINCL NULL - -#if LWIP_NETIF_HWADDRHINT -#define IP_PCB_ADDRHINT ;u8_t addr_hint -#else -#define IP_PCB_ADDRHINT -#endif /* LWIP_NETIF_HWADDRHINT */ - -/* This is the common part of all PCB types. It needs to be at the - beginning of a PCB type definition. It is located here so that - changes to this common part are made in one location instead of - having to change all PCB structs. */ -#define IP_PCB struct ip_addr local_ip; \ - struct ip_addr remote_ip; \ - /* Socket options */ \ - u16_t so_options; \ - /* Type Of Service */ \ - u8_t tos; \ - /* Time To Live */ \ - u8_t ttl; \ - /* link layer address resolution hint */ \ - IP_PCB_ADDRHINT - - -/* The IPv6 header. */ -struct ip_hdr { -#if BYTE_ORDER == LITTLE_ENDIAN - u8_t tclass1:4, v:4; - u8_t flow1:4, tclass2:4; -#else - u8_t v:4, tclass1:4; - u8_t tclass2:8, flow1:4; -#endif - u16_t flow2; - u16_t len; /* payload length */ - u8_t nexthdr; /* next header */ - u8_t hoplim; /* hop limit (TTL) */ - struct ip_addr src, dest; /* source and destination IP addresses */ -}; - -#define IPH_PROTO(hdr) (iphdr->nexthdr) - -void ip_init(void); - -#include "lwip/netif.h" - -struct netif *ip_route(struct ip_addr *dest); - -void ip_input(struct pbuf *p, struct netif *inp); - -/* source and destination addresses in network byte order, please */ -err_t ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, - u8_t ttl, u8_t proto); - -err_t ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, - u8_t ttl, u8_t proto, - struct netif *netif); - -#define ip_current_netif() NULL -#define ip_current_header() NULL - -#if IP_DEBUG -void ip_debug_print(struct pbuf *p); -#endif /* IP_DEBUG */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_IP_H__ */ - - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv6/lwip/ip_addr.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv6/lwip/ip_addr.h deleted file mode 100644 index b2d8ae5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/ipv6/lwip/ip_addr.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_IP_ADDR_H__ -#define __LWIP_IP_ADDR_H__ - -#include "lwip/opt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define IP_ADDR_ANY 0 - -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN - struct ip_addr { - PACK_STRUCT_FIELD(u32_t addr[4]); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -/* - * struct ipaddr2 is used in the definition of the ARP packet format in - * order to support compilers that don't have structure packing. - */ -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct ip_addr2 { - PACK_STRUCT_FIELD(u16_t addrw[2]); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -#define IP6_ADDR(ipaddr, a,b,c,d,e,f,g,h) do { (ipaddr)->addr[0] = htonl((u32_t)((a & 0xffff) << 16) | (b & 0xffff)); \ - (ipaddr)->addr[1] = htonl(((c & 0xffff) << 16) | (d & 0xffff)); \ - (ipaddr)->addr[2] = htonl(((e & 0xffff) << 16) | (f & 0xffff)); \ - (ipaddr)->addr[3] = htonl(((g & 0xffff) << 16) | (h & 0xffff)); } while(0) - -u8_t ip_addr_netcmp(struct ip_addr *addr1, struct ip_addr *addr2, - struct ip_addr *mask); -u8_t ip_addr_cmp(struct ip_addr *addr1, struct ip_addr *addr2); -void ip_addr_set(struct ip_addr *dest, struct ip_addr *src); -u8_t ip_addr_isany(struct ip_addr *addr); - -#define ip_addr_debug_print(debug, ipaddr) \ - LWIP_DEBUGF(debug, ("%"X32_F":%"X32_F":%"X32_F":%"X32_F":%"X32_F":%"X32_F":%"X32_F":%"X32_F"\n", \ - (ntohl(ipaddr->addr[0]) >> 16) & 0xffff, \ - ntohl(ipaddr->addr[0]) & 0xffff, \ - (ntohl(ipaddr->addr[1]) >> 16) & 0xffff, \ - ntohl(ipaddr->addr[1]) & 0xffff, \ - (ntohl(ipaddr->addr[2]) >> 16) & 0xffff, \ - ntohl(ipaddr->addr[2]) & 0xffff, \ - (ntohl(ipaddr->addr[3]) >> 16) & 0xffff, \ - ntohl(ipaddr->addr[3]) & 0xffff)); - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_IP_ADDR_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/api.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/api.h deleted file mode 100644 index b31a9cb..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/api.h +++ /dev/null @@ -1,303 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_API_H__ -#define __LWIP_API_H__ - -#include "lwip/opt.h" - -#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ - -#include /* for size_t */ - -#include "lwip/netbuf.h" -#include "lwip/sys.h" -#include "lwip/ip_addr.h" -#include "lwip/err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define port_netconn_recv(conn , buf, ret) do{ret = netconn_recv(conn, &buf);}while(0); -#define port_netconn_accept(conn , newconn, ret) do{ret = netconn_accept(conn, &newconn);}while(0); - -/* Throughout this file, IP addresses and port numbers are expected to be in - * the same byte order as in the corresponding pcb. - */ - -/* Flags for netconn_write (uint8_t) */ -#define NETCONN_NOFLAG 0x00 -#define NETCONN_NOCOPY 0x00 /* Only for source code compatibility */ -#define NETCONN_COPY 0x01 -#define NETCONN_MORE 0x02 -#define NETCONN_DONTBLOCK 0x04 - -/* Flags for struct netconn.flags (uint8_t) */ -/** TCP: when data passed to netconn_write doesn't fit into the send buffer, - this temporarily stores whether to wake up the original application task - if data couldn't be sent in the first try. */ -#define NETCONN_FLAG_WRITE_DELAYED 0x01 -/** Should this netconn avoid blocking? */ -#define NETCONN_FLAG_NON_BLOCKING 0x02 -/** Was the last connect action a non-blocking one? */ -#define NETCONN_FLAG_IN_NONBLOCKING_CONNECT 0x04 -/** If this is set, a TCP netconn must call netconn_recved() to update - the TCP receive window (done automatically if not set). */ -#define NETCONN_FLAG_NO_AUTO_RECVED 0x08 -/** If a nonblocking write has been rejected before, poll_tcp needs to - check if the netconn is writable again */ -#define NETCONN_FLAG_CHECK_WRITESPACE 0x10 - - -/* Helpers to process several netconn_types by the same code */ -#define NETCONNTYPE_GROUP(t) (t&0xF0) -#define NETCONNTYPE_DATAGRAM(t) (t&0xE0) - -/** Protocol family and type of the netconn */ -enum netconn_type { - NETCONN_INVALID = 0, - /* NETCONN_TCP Group */ - NETCONN_TCP = 0x10, - /* NETCONN_UDP Group */ - NETCONN_UDP = 0x20, - NETCONN_UDPLITE = 0x21, - NETCONN_UDPNOCHKSUM= 0x22, - /* NETCONN_RAW Group */ - NETCONN_RAW = 0x40 -}; - -/** Current state of the netconn. Non-TCP netconns are always - * in state NETCONN_NONE! */ -enum netconn_state { - NETCONN_NONE, - NETCONN_WRITE, - NETCONN_LISTEN, - NETCONN_CONNECT, - NETCONN_CLOSE -}; - -/** Use to inform the callback function about changes */ -enum netconn_evt { - NETCONN_EVT_RCVPLUS, - NETCONN_EVT_RCVMINUS, - NETCONN_EVT_SENDPLUS, - NETCONN_EVT_SENDMINUS, - NETCONN_EVT_ERROR -}; - -#if LWIP_IGMP -/** Used for netconn_join_leave_group() */ -enum netconn_igmp { - NETCONN_JOIN, - NETCONN_LEAVE -}; -#endif /* LWIP_IGMP */ - -/* forward-declare some structs to avoid to include their headers */ -struct ip_pcb; -struct tcp_pcb; -struct udp_pcb; -struct raw_pcb; -struct netconn; -struct api_msg_msg; - -/** A callback prototype to inform about events for a netconn */ -typedef void (* netconn_callback)(struct netconn *, enum netconn_evt, uint16_t len); - -/** A netconn descriptor */ -struct netconn { - /** type of the netconn (TCP, UDP or RAW) */ - enum netconn_type type; - /** current state of the netconn */ - enum netconn_state state; - /** the lwIP internal protocol control block */ - union { - struct ip_pcb *ip; - struct tcp_pcb *tcp; - struct udp_pcb *udp; - struct raw_pcb *raw; - } pcb; - /** the last error this netconn had */ - err_t last_err; - /** sem that is used to synchroneously execute functions in the core context */ - sys_sem_t op_completed; - /** mbox where received packets are stored until they are fetched - by the netconn application thread (can grow quite big) */ - sys_mbox_t recvmbox; -#if LWIP_TCP - /** mbox where new connections are stored until processed - by the application thread */ - sys_mbox_t acceptmbox; -#endif /* LWIP_TCP */ - /** only used for socket layer */ -#if LWIP_SOCKET - int socket; -#endif /* LWIP_SOCKET */ -#if LWIP_SO_SNDTIMEO - /** timeout to wait for sending data (which means enqueueing data for sending - in internal buffers) */ - int32_t send_timeout; -#endif /* LWIP_SO_RCVTIMEO */ -#if LWIP_SO_RCVTIMEO - /** timeout to wait for new data to be received - (or connections to arrive for listening netconns) */ - int recv_timeout; -#endif /* LWIP_SO_RCVTIMEO */ -#if LWIP_SO_RCVBUF - /** maximum amount of bytes queued in recvmbox - not used for TCP: adjust TCP_WND instead! */ - int recv_bufsize; - /** number of bytes currently in recvmbox to be received, - tested against recv_bufsize to limit bytes on recvmbox - for UDP and RAW, used for FIONREAD */ - int16_t recv_avail; -#endif /* LWIP_SO_RCVBUF */ - /** flags holding more netconn-internal state, see NETCONN_FLAG_* defines */ - uint8_t flags; -#if LWIP_TCP - /** TCP: when data passed to netconn_write doesn't fit into the send buffer, - this temporarily stores how much is already sent. */ - size_t write_offset; - /** TCP: when data passed to netconn_write doesn't fit into the send buffer, - this temporarily stores the message. - Also used during connect and close. */ - struct api_msg_msg *current_msg; -#endif /* LWIP_TCP */ - /** A callback function that is informed about events for this netconn */ - netconn_callback callback; -}; - -/** Register an Network connection event */ -#define API_EVENT(c,e,l) if (c->callback) { \ - (*c->callback)(c, e, l); \ - } - -/** Set conn->last_err to err but don't overwrite fatal errors */ -#define NETCONN_SET_SAFE_ERR(conn, err) do { \ - SYS_ARCH_DECL_PROTECT(lev); \ - SYS_ARCH_PROTECT(lev); \ - if (!ERR_IS_FATAL((conn)->last_err)) { \ - (conn)->last_err = err; \ - } \ - SYS_ARCH_UNPROTECT(lev); \ -} while(0); - - -/* Network connection functions: */ -#define netconn_new(t) netconn_new_with_proto_and_callback(t, 0, NULL) -#define netconn_new_with_callback(t, c) netconn_new_with_proto_and_callback(t, 0, c) -struct -netconn *netconn_new_with_proto_and_callback(enum netconn_type t, uint8_t proto, - netconn_callback callback); -err_t netconn_delete(struct netconn *conn); -/** Get the type of a netconn (as enum netconn_type). */ -#define netconn_type(conn) (conn->type) - -err_t netconn_getaddr(struct netconn *conn, ip_addr_t *addr, - uint16_t *port, uint8_t local); -#define netconn_peer(c,i,p) netconn_getaddr(c,i,p,0) -#define netconn_addr(c,i,p) netconn_getaddr(c,i,p,1) - -err_t netconn_bind(struct netconn *conn, ip_addr_t *addr, uint16_t port); -err_t netconn_connect(struct netconn *conn, ip_addr_t *addr, uint16_t port); -err_t netconn_disconnect (struct netconn *conn); -err_t netconn_listen_with_backlog(struct netconn *conn, uint8_t backlog); -#define netconn_listen(conn) netconn_listen_with_backlog(conn, TCP_DEFAULT_LISTEN_BACKLOG) -err_t netconn_accept(struct netconn *conn, struct netconn **new_conn); -err_t netconn_recv(struct netconn *conn, struct netbuf **new_buf); -err_t netconn_recv_tcp_pbuf(struct netconn *conn, struct pbuf **new_buf); -void netconn_recved(struct netconn *conn, uint32_t length); -err_t netconn_sendto(struct netconn *conn, struct netbuf *buf, - ip_addr_t *addr, uint16_t port); -err_t netconn_send(struct netconn *conn, struct netbuf *buf); -err_t netconn_write_partly(struct netconn *conn, const void *dataptr, size_t size, - uint8_t apiflags, size_t *bytes_written); -#define netconn_write(conn, dataptr, size, apiflags) \ - netconn_write_partly(conn, dataptr, size, apiflags, NULL) -err_t netconn_close(struct netconn *conn); -err_t netconn_shutdown(struct netconn *conn, uint8_t shut_rx, uint8_t shut_tx); - -err_t netconn_abort(struct netconn *conn);//Realtek add - -#if LWIP_IGMP -err_t netconn_join_leave_group(struct netconn *conn, ip_addr_t *multiaddr, - ip_addr_t *netif_addr, enum netconn_igmp join_or_leave); -#endif /* LWIP_IGMP */ -#if LWIP_DNS -err_t netconn_gethostbyname(const char *name, ip_addr_t *addr); -#endif /* LWIP_DNS */ - -#define netconn_err(conn) ((conn)->last_err) -#define netconn_recv_bufsize(conn) ((conn)->recv_bufsize) - -/** Set the blocking status of netconn calls (@todo: write/send is missing) */ -#define netconn_set_nonblocking(conn, val) do { if(val) { \ - (conn)->flags |= NETCONN_FLAG_NON_BLOCKING; \ -} else { \ - (conn)->flags &= ~ NETCONN_FLAG_NON_BLOCKING; }} while(0) -/** Get the blocking status of netconn calls (@todo: write/send is missing) */ -#define netconn_is_nonblocking(conn) (((conn)->flags & NETCONN_FLAG_NON_BLOCKING) != 0) - -/** TCP: Set the no-auto-recved status of netconn calls (see NETCONN_FLAG_NO_AUTO_RECVED) */ -#define netconn_set_noautorecved(conn, val) do { if(val) { \ - (conn)->flags |= NETCONN_FLAG_NO_AUTO_RECVED; \ -} else { \ - (conn)->flags &= ~ NETCONN_FLAG_NO_AUTO_RECVED; }} while(0) -/** TCP: Get the no-auto-recved status of netconn calls (see NETCONN_FLAG_NO_AUTO_RECVED) */ -#define netconn_get_noautorecved(conn) (((conn)->flags & NETCONN_FLAG_NO_AUTO_RECVED) != 0) - -#if LWIP_SO_SNDTIMEO -/** Set the send timeout in milliseconds */ -#define netconn_set_sendtimeout(conn, timeout) ((conn)->send_timeout = (timeout)) -/** Get the send timeout in milliseconds */ -#define netconn_get_sendtimeout(conn) ((conn)->send_timeout) -#endif /* LWIP_SO_SNDTIMEO */ -#if LWIP_SO_RCVTIMEO -/** Set the receive timeout in milliseconds */ -#define netconn_set_recvtimeout(conn, timeout) ((conn)->recv_timeout = (timeout)) -/** Get the receive timeout in milliseconds */ -#define netconn_get_recvtimeout(conn) ((conn)->recv_timeout) -#endif /* LWIP_SO_RCVTIMEO */ -#if LWIP_SO_RCVBUF -/** Set the receive buffer in bytes */ -#define netconn_set_recvbufsize(conn, recvbufsize) ((conn)->recv_bufsize = (recvbufsize)) -/** Get the receive buffer in bytes */ -#define netconn_get_recvbufsize(conn) ((conn)->recv_bufsize) -#endif /* LWIP_SO_RCVBUF*/ - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_NETCONN */ - -#endif /* __LWIP_API_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/api_msg.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/api_msg.h deleted file mode 100644 index 26b60ab..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/api_msg.h +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_API_MSG_H__ -#define __LWIP_API_MSG_H__ - -#include "lwip/opt.h" - -#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ - -#include /* for size_t */ - -#include "lwip/ip_addr.h" -#include "lwip/err.h" -#include "lwip/sys.h" -#include "lwip/igmp.h" -#include "lwip/api.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* For the netconn API, these values are use as a bitmask! */ -#define NETCONN_SHUT_RD 1 -#define NETCONN_SHUT_WR 2 -#define NETCONN_SHUT_RDWR (NETCONN_SHUT_RD | NETCONN_SHUT_WR) - -/* IP addresses and port numbers are expected to be in - * the same byte order as in the corresponding pcb. - */ -/** This struct includes everything that is necessary to execute a function - for a netconn in another thread context (mainly used to process netconns - in the tcpip_thread context to be thread safe). */ -struct api_msg_msg { - /** The netconn which to process - always needed: it includes the semaphore - which is used to block the application thread until the function finished. */ - struct netconn *conn; - /** The return value of the function executed in tcpip_thread. */ - err_t err; - /** Depending on the executed function, one of these union members is used */ - union { - /** used for do_send */ - struct netbuf *b; - /** used for do_newconn */ - struct { - uint8_t proto; - } n; - /** used for do_bind and do_connect */ - struct { - ip_addr_t *ipaddr; - uint16_t port; - } bc; - /** used for do_getaddr */ - struct { - ip_addr_t *ipaddr; - uint16_t *port; - uint8_t local; - } ad; - /** used for do_write */ - struct { - const void *dataptr; - size_t len; - uint8_t apiflags; -#if LWIP_SO_SNDTIMEO - uint32_t time_started; -#endif /* LWIP_SO_SNDTIMEO */ - } w; - /** used for do_recv */ - struct { - uint32_t len; - } r; - /** used for do_close (/shutdown) */ - struct { - uint8_t shut; - } sd; -#if LWIP_IGMP - /** used for do_join_leave_group */ - struct { - ip_addr_t *multiaddr; - ip_addr_t *netif_addr; - enum netconn_igmp join_or_leave; - } jl; -#endif /* LWIP_IGMP */ -#if TCP_LISTEN_BACKLOG - struct { - uint8_t backlog; - } lb; -#endif /* TCP_LISTEN_BACKLOG */ - } msg; -}; - -/** This struct contains a function to execute in another thread context and - a struct api_msg_msg that serves as an argument for this function. - This is passed to tcpip_apimsg to execute functions in tcpip_thread context. */ -struct api_msg { - /** function to execute in tcpip_thread context */ - void (* function)(struct api_msg_msg *msg); - /** arguments for this function */ - struct api_msg_msg msg; -}; - -#if LWIP_DNS -/** As do_gethostbyname requires more arguments but doesn't require a netconn, - it has its own struct (to avoid struct api_msg getting bigger than necessary). - do_gethostbyname must be called using tcpip_callback instead of tcpip_apimsg - (see netconn_gethostbyname). */ -struct dns_api_msg { - /** Hostname to query or dotted IP address string */ - const char *name; - /** Rhe resolved address is stored here */ - ip_addr_t *addr; - /** This semaphore is posted when the name is resolved, the application thread - should wait on it. */ - sys_sem_t *sem; - /** Errors are given back here */ - err_t *err; -}; -#endif /* LWIP_DNS */ - -void do_newconn ( struct api_msg_msg *msg); -void do_delconn ( struct api_msg_msg *msg); -void do_bind ( struct api_msg_msg *msg); -void do_connect ( struct api_msg_msg *msg); -void do_disconnect ( struct api_msg_msg *msg); -void do_listen ( struct api_msg_msg *msg); -void do_send ( struct api_msg_msg *msg); -void do_recv ( struct api_msg_msg *msg); -void do_write ( struct api_msg_msg *msg); -void do_getaddr ( struct api_msg_msg *msg); -void do_close ( struct api_msg_msg *msg); -void do_shutdown ( struct api_msg_msg *msg); -#if LWIP_IGMP -void do_join_leave_group( struct api_msg_msg *msg); -#endif /* LWIP_IGMP */ - -#if LWIP_DNS -void do_gethostbyname(void *arg); -#endif /* LWIP_DNS */ - -struct netconn* netconn_alloc(enum netconn_type t, netconn_callback callback); -void netconn_free(struct netconn *conn); - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_NETCONN */ - -#endif /* __LWIP_API_MSG_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/arch.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/arch.h deleted file mode 100644 index e8dd2bf..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/arch.h +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_ARCH_H__ -#define __LWIP_ARCH_H__ - -#ifndef LITTLE_ENDIAN -#define LITTLE_ENDIAN 1234 -#endif - -#ifndef BIG_ENDIAN -#define BIG_ENDIAN 4321 -#endif - -#include "arch/cc.h" - -/** Temporary: define format string for size_t if not defined in cc.h */ -#ifndef SZT_F -#define SZT_F U32_F -#endif /* SZT_F */ -/** Temporary upgrade helper: define format string for uint8_t as hex if not - defined in cc.h */ -#ifndef X8_F -#define X8_F "02x" -#endif /* X8_F */ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef PACK_STRUCT_BEGIN -#define PACK_STRUCT_BEGIN -#endif /* PACK_STRUCT_BEGIN */ - -#ifndef PACK_STRUCT_END -#define PACK_STRUCT_END -#endif /* PACK_STRUCT_END */ - -#ifndef PACK_STRUCT_FIELD -#define PACK_STRUCT_FIELD(x) x -#endif /* PACK_STRUCT_FIELD */ - - -#ifndef LWIP_UNUSED_ARG -#define LWIP_UNUSED_ARG(x) (void)x -#endif /* LWIP_UNUSED_ARG */ - - -#ifdef LWIP_PROVIDE_ERRNO - -#define EPERM 1 /* Operation not permitted */ -#define ENOENT 2 /* No such file or directory */ -#define ESRCH 3 /* No such process */ -#define EINTR 4 /* Interrupted system call */ -#define EIO 5 /* I/O error */ -#define ENXIO 6 /* No such device or address */ -#define E2BIG 7 /* Arg list too long */ -#define ENOEXEC 8 /* Exec format error */ -#define EBADF 9 /* Bad file number */ -#define ECHILD 10 /* No child processes */ -#define EAGAIN 11 /* Try again */ -#define ENOMEM 12 /* Out of memory */ -#define EACCES 13 /* Permission denied */ -#define EFAULT 14 /* Bad address */ -#define ENOTBLK 15 /* Block device required */ -#define EBUSY 16 /* Device or resource busy */ -#define EEXIST 17 /* File exists */ -#define EXDEV 18 /* Cross-device link */ -#define ENODEV 19 /* No such device */ -#define ENOTDIR 20 /* Not a directory */ -#define EISDIR 21 /* Is a directory */ -#define EINVAL 22 /* Invalid argument */ -#define ENFILE 23 /* File table overflow */ -#define EMFILE 24 /* Too many open files */ -#define ENOTTY 25 /* Not a typewriter */ -#define ETXTBSY 26 /* Text file busy */ -#define EFBIG 27 /* File too large */ -#define ENOSPC 28 /* No space left on device */ -#define ESPIPE 29 /* Illegal seek */ -#define EROFS 30 /* Read-only file system */ -#define EMLINK 31 /* Too many links */ -#define EPIPE 32 /* Broken pipe */ -#define EDOM 33 /* Math argument out of domain of func */ -#define ERANGE 34 /* Math result not representable */ -#define EDEADLK 35 /* Resource deadlock would occur */ -#define ENAMETOOLONG 36 /* File name too long */ -#define ENOLCK 37 /* No record locks available */ -#define ENOSYS 38 /* Function not implemented */ -#define ENOTEMPTY 39 /* Directory not empty */ -#define ELOOP 40 /* Too many symbolic links encountered */ -#define EWOULDBLOCK EAGAIN /* Operation would block */ -#define ENOMSG 42 /* No message of desired type */ -#define EIDRM 43 /* Identifier removed */ -#define ECHRNG 44 /* Channel number out of range */ -#define EL2NSYNC 45 /* Level 2 not synchronized */ -#define EL3HLT 46 /* Level 3 halted */ -#define EL3RST 47 /* Level 3 reset */ -#define ELNRNG 48 /* Link number out of range */ -#define EUNATCH 49 /* Protocol driver not attached */ -#define ENOCSI 50 /* No CSI structure available */ -#define EL2HLT 51 /* Level 2 halted */ -#define EBADE 52 /* Invalid exchange */ -#define EBADR 53 /* Invalid request descriptor */ -#define EXFULL 54 /* Exchange full */ -#define ENOANO 55 /* No anode */ -#define EBADRQC 56 /* Invalid request code */ -#define EBADSLT 57 /* Invalid slot */ - -#define EDEADLOCK EDEADLK - -#define EBFONT 59 /* Bad font file format */ -#define ENOSTR 60 /* Device not a stream */ -#define ENODATA 61 /* No data available */ -#define ETIME 62 /* Timer expired */ -#define ENOSR 63 /* Out of streams resources */ -#define ENONET 64 /* Machine is not on the network */ -#define ENOPKG 65 /* Package not installed */ -#define EREMOTE 66 /* Object is remote */ -#define ENOLINK 67 /* Link has been severed */ -#define EADV 68 /* Advertise error */ -#define ESRMNT 69 /* Srmount error */ -#define ECOMM 70 /* Communication error on send */ -#define EPROTO 71 /* Protocol error */ -#define EMULTIHOP 72 /* Multihop attempted */ -#define EDOTDOT 73 /* RFS specific error */ -#define EBADMSG 74 /* Not a data message */ -#define EOVERFLOW 75 /* Value too large for defined data type */ -#define ENOTUNIQ 76 /* Name not unique on network */ -#define EBADFD 77 /* File descriptor in bad state */ -#define EREMCHG 78 /* Remote address changed */ -#define ELIBACC 79 /* Can not access a needed shared library */ -#define ELIBBAD 80 /* Accessing a corrupted shared library */ -#define ELIBSCN 81 /* .lib section in a.out corrupted */ -#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ -#define ELIBEXEC 83 /* Cannot exec a shared library directly */ -#define EILSEQ 84 /* Illegal byte sequence */ -#define ERESTART 85 /* Interrupted system call should be restarted */ -#define ESTRPIPE 86 /* Streams pipe error */ -#define EUSERS 87 /* Too many users */ -#define ENOTSOCK 88 /* Socket operation on non-socket */ -#define EDESTADDRREQ 89 /* Destination address required */ -#define EMSGSIZE 90 /* Message too long */ -#define EPROTOTYPE 91 /* Protocol wrong type for socket */ -#define ENOPROTOOPT 92 /* Protocol not available */ -#define EPROTONOSUPPORT 93 /* Protocol not supported */ -#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ -#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ -#define EPFNOSUPPORT 96 /* Protocol family not supported */ -#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ -#define EADDRINUSE 98 /* Address already in use */ -#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ -#define ENETDOWN 100 /* Network is down */ -#define ENETUNREACH 101 /* Network is unreachable */ -#define ENETRESET 102 /* Network dropped connection because of reset */ -#define ECONNABORTED 103 /* Software caused connection abort */ -#define ECONNRESET 104 /* Connection reset by peer */ -#define ENOBUFS 105 /* No buffer space available */ -#define EISCONN 106 /* Transport endpoint is already connected */ -#define ENOTCONN 107 /* Transport endpoint is not connected */ -#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ -#define ETOOMANYREFS 109 /* Too many references: cannot splice */ -#define ETIMEDOUT 110 /* Connection timed out */ -#define ECONNREFUSED 111 /* Connection refused */ -#define EHOSTDOWN 112 /* Host is down */ -#define EHOSTUNREACH 113 /* No route to host */ -#define EALREADY 114 /* Operation already in progress */ -#define EINPROGRESS 115 /* Operation now in progress */ -#define ESTALE 116 /* Stale NFS file handle */ -#define EUCLEAN 117 /* Structure needs cleaning */ -#define ENOTNAM 118 /* Not a XENIX named type file */ -#define ENAVAIL 119 /* No XENIX semaphores available */ -#define EISNAM 120 /* Is a named type file */ -#define EREMOTEIO 121 /* Remote I/O error */ -#define EDQUOT 122 /* Quota exceeded */ - -#define ENOMEDIUM 123 /* No medium found */ -#define EMEDIUMTYPE 124 /* Wrong medium type */ - -#ifndef errno -extern int errno; -#endif - -#endif /* LWIP_PROVIDE_ERRNO */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_ARCH_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/debug.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/debug.h deleted file mode 100644 index c605fec..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/debug.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_DEBUG_H__ -#define __LWIP_DEBUG_H__ - -#include "lwip/arch.h" -#include "lwip/opt.h" -#include //Realtek add -/** lower two bits indicate debug level - * - 0 all - * - 1 warning - * - 2 serious - * - 3 severe - */ -#define LWIP_DBG_LEVEL_ALL 0x00 -#define LWIP_DBG_LEVEL_OFF LWIP_DBG_LEVEL_ALL /* compatibility define only */ -#define LWIP_DBG_LEVEL_WARNING 0x01 /* bad checksums, dropped packets, ... */ -#define LWIP_DBG_LEVEL_SERIOUS 0x02 /* memory allocation failures, ... */ -#define LWIP_DBG_LEVEL_SEVERE 0x03 -#define LWIP_DBG_MASK_LEVEL 0x03 - -/** flag for LWIP_DEBUGF to enable that debug message */ -#define LWIP_DBG_ON 0x80U -/** flag for LWIP_DEBUGF to disable that debug message */ -#define LWIP_DBG_OFF 0x00U - -/** flag for LWIP_DEBUGF indicating a tracing message (to follow program flow) */ -#define LWIP_DBG_TRACE 0x40U -/** flag for LWIP_DEBUGF indicating a state debug message (to follow module states) */ -#define LWIP_DBG_STATE 0x20U -/** flag for LWIP_DEBUGF indicating newly added code, not thoroughly tested yet */ -#define LWIP_DBG_FRESH 0x10U -/** flag for LWIP_DEBUGF to halt after printing this debug message */ -#define LWIP_DBG_HALT 0x08U - -#ifndef LWIP_NOASSERT -#define LWIP_ASSERT(message, assertion) do { if(!(assertion)) \ - LWIP_PLATFORM_ASSERT(message); } while(0) -#else /* LWIP_NOASSERT */ -#define LWIP_ASSERT(message, assertion) -#endif /* LWIP_NOASSERT */ - -/** if "expression" isn't true, then print "message" and execute "handler" expression */ -#ifndef LWIP_ERROR -#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \ - LWIP_PLATFORM_ASSERT(message); handler;}} while(0) -#endif /* LWIP_ERROR */ - -#if LWIP_DEBUG -//#ifdef LWIP_DEBUG -/** print debug message only if debug message type is enabled... - * AND is of correct type AND is at least LWIP_DBG_LEVEL - */ - - -#define LWIP_PLATFORM_DIAG printf //Realtek add -#define LWIP_DEBUGF(debug, message) do { \ - if ( \ - ((debug) & LWIP_DBG_ON) && \ - ((debug) & LWIP_DBG_TYPES_ON) && \ - ((int16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \ - LWIP_PLATFORM_DIAG message; \ - if ((debug) & LWIP_DBG_HALT) { \ - while(1); \ - } \ - } \ - } while(0) - -#else /* LWIP_DEBUG */ -#define LWIP_DEBUGF(debug, message) -#endif /* LWIP_DEBUG */ - -#endif /* __LWIP_DEBUG_H__ */ - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/def.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/def.h deleted file mode 100644 index 958c90c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/def.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_DEF_H__ -#define __LWIP_DEF_H__ - -/* arch.h might define NULL already */ -#include "lwip/arch.h" -#include "lwip/opt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define LWIP_MAX(x , y) (((x) > (y)) ? (x) : (y)) -#define LWIP_MIN(x , y) (((x) < (y)) ? (x) : (y)) - -#ifndef NULL -#define NULL ((void *)0) -#endif - -/* Endianess-optimized shifting of two uint8_t to create one uint16_t */ -#if BYTE_ORDER == LITTLE_ENDIAN -#define LWIP_MAKE_U16(a, b) ((a << 8) | b) -#else -#define LWIP_MAKE_U16(a, b) ((b << 8) | a) -#endif - -#ifndef LWIP_PLATFORM_BYTESWAP -#define LWIP_PLATFORM_BYTESWAP 0 -#endif - -#ifndef LWIP_PREFIX_BYTEORDER_FUNCS -/* workaround for naming collisions on some platforms */ - -#ifdef htons -#undef htons -#endif /* htons */ -#ifdef htonl -#undef htonl -#endif /* htonl */ -#ifdef ntohs -#undef ntohs -#endif /* ntohs */ -#ifdef ntohl -#undef ntohl -#endif /* ntohl */ - -#define htons(x) lwip_htons(x) -#define ntohs(x) lwip_ntohs(x) -#define htonl(x) lwip_htonl(x) -#define ntohl(x) lwip_ntohl(x) -#endif /* LWIP_PREFIX_BYTEORDER_FUNCS */ - -#if BYTE_ORDER == BIG_ENDIAN -#define lwip_htons(x) (x) -#define lwip_ntohs(x) (x) -#define lwip_htonl(x) (x) -#define lwip_ntohl(x) (x) -#define PP_HTONS(x) (x) -#define PP_NTOHS(x) (x) -#define PP_HTONL(x) (x) -#define PP_NTOHL(x) (x) -#else /* BYTE_ORDER != BIG_ENDIAN */ -#if LWIP_PLATFORM_BYTESWAP -#define lwip_htons(x) LWIP_PLATFORM_HTONS(x) -#define lwip_ntohs(x) LWIP_PLATFORM_HTONS(x) -#define lwip_htonl(x) LWIP_PLATFORM_HTONL(x) -#define lwip_ntohl(x) LWIP_PLATFORM_HTONL(x) -#else /* LWIP_PLATFORM_BYTESWAP */ -uint16_t lwip_htons(uint16_t x); -uint16_t lwip_ntohs(uint16_t x); -uint32_t lwip_htonl(uint32_t x); -uint32_t lwip_ntohl(uint32_t x); -#endif /* LWIP_PLATFORM_BYTESWAP */ - -/* These macros should be calculated by the preprocessor and are used - with compile-time constants only (so that there is no little-endian - overhead at runtime). */ -#define PP_HTONS(x) ((((x) & 0xff) << 8) | (((x) & 0xff00) >> 8)) -#define PP_NTOHS(x) PP_HTONS(x) -#define PP_HTONL(x) ((((x) & 0xff) << 24) | \ - (((x) & 0xff00) << 8) | \ - (((x) & 0xff0000UL) >> 8) | \ - (((x) & 0xff000000UL) >> 24)) -#define PP_NTOHL(x) PP_HTONL(x) - -#endif /* BYTE_ORDER == BIG_ENDIAN */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_DEF_H__ */ - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/dhcp.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/dhcp.h deleted file mode 100644 index 68a5500..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/dhcp.h +++ /dev/null @@ -1,249 +0,0 @@ -/** @file - */ - -#ifndef __LWIP_DHCP_H__ -#define __LWIP_DHCP_H__ - -#include "lwip/opt.h" - -#if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/netif.h" -#include "lwip/udp.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** period (in seconds) of the application calling dhcp_coarse_tmr() */ -#define DHCP_COARSE_TIMER_SECS 60 -/** period (in milliseconds) of the application calling dhcp_coarse_tmr() */ -#define DHCP_COARSE_TIMER_MSECS (DHCP_COARSE_TIMER_SECS * 1000UL) -/** period (in milliseconds) of the application calling dhcp_fine_tmr() */ -#define DHCP_FINE_TIMER_MSECS 500 - -#define DHCP_CHADDR_LEN 16U -#define DHCP_SNAME_LEN 64U -#define DHCP_FILE_LEN 128U - -struct dhcp -{ - /** transaction identifier of last sent request */ - uint32_t xid; - /** our connection to the DHCP server */ - struct udp_pcb *pcb; - /** incoming msg */ - struct dhcp_msg *msg_in; - /** current DHCP state machine state */ - uint8_t state; - /** retries of current request */ - uint8_t tries; -#if LWIP_DHCP_AUTOIP_COOP - uint8_t autoip_coop_state; -#endif - uint8_t subnet_mask_given; - - struct pbuf *p_out; /* pbuf of outcoming msg */ - struct dhcp_msg *msg_out; /* outgoing msg */ - uint16_t options_out_len; /* outgoing msg options length */ - uint16_t request_timeout; /* #ticks with period DHCP_FINE_TIMER_SECS for request timeout */ - uint16_t t1_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for renewal time */ - uint16_t t2_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for rebind time */ - uint16_t t1_renew_time; /* #ticks with period DHCP_COARSE_TIMER_SECS until next renew try */ - uint16_t t2_rebind_time; /* #ticks with period DHCP_COARSE_TIMER_SECS until next rebind try */ - uint16_t lease_used; /* #ticks with period DHCP_COARSE_TIMER_SECS since last received DHCP ack */ - uint16_t t0_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for lease time */ - ip_addr_t server_ip_addr; /* dhcp server address that offered this lease */ - ip_addr_t offered_ip_addr; - ip_addr_t offered_sn_mask; - ip_addr_t offered_gw_addr; - ip_addr_t offered_bc_addr; - - uint32_t offered_t0_lease; /* lease period (in seconds) */ - uint32_t offered_t1_renew; /* recommended renew time (usually 50% of lease period) */ - uint32_t offered_t2_rebind; /* recommended rebind time (usually 87.5% of lease period) */ - /* @todo: LWIP_DHCP_BOOTP_FILE configuration option? - integrate with possible TFTP-client for booting? */ -#if LWIP_DHCP_BOOTP_FILE - ip_addr_t offered_si_addr; - char boot_file_name[DHCP_FILE_LEN]; -#endif /* LWIP_DHCP_BOOTPFILE */ -}; - -/* MUST be compiled with "pack structs" or equivalent! */ -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -/** minimum set of fields of any DHCP message */ -struct dhcp_msg -{ - PACK_STRUCT_FIELD(uint8_t op); - PACK_STRUCT_FIELD(uint8_t htype); - PACK_STRUCT_FIELD(uint8_t hlen); - PACK_STRUCT_FIELD(uint8_t hops); - PACK_STRUCT_FIELD(uint32_t xid); - PACK_STRUCT_FIELD(uint16_t secs); - PACK_STRUCT_FIELD(uint16_t flags); - PACK_STRUCT_FIELD(ip_addr_p_t ciaddr); - PACK_STRUCT_FIELD(ip_addr_p_t yiaddr); - PACK_STRUCT_FIELD(ip_addr_p_t siaddr); - PACK_STRUCT_FIELD(ip_addr_p_t giaddr); - PACK_STRUCT_FIELD(uint8_t chaddr[DHCP_CHADDR_LEN]); - PACK_STRUCT_FIELD(uint8_t sname[DHCP_SNAME_LEN]); - PACK_STRUCT_FIELD(uint8_t file[DHCP_FILE_LEN]); - PACK_STRUCT_FIELD(uint32_t cookie); -#define DHCP_MIN_OPTIONS_LEN 68U -/** make sure user does not configure this too small */ -#if ((defined(DHCP_OPTIONS_LEN)) && (DHCP_OPTIONS_LEN < DHCP_MIN_OPTIONS_LEN)) -# undef DHCP_OPTIONS_LEN -#endif -/** allow this to be configured in lwipopts.h, but not too small */ -#if (!defined(DHCP_OPTIONS_LEN)) -/** set this to be sufficient for your options in outgoing DHCP msgs */ -# define DHCP_OPTIONS_LEN DHCP_MIN_OPTIONS_LEN -#endif - PACK_STRUCT_FIELD(uint8_t options[DHCP_OPTIONS_LEN]); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -void dhcp_set_struct(struct netif *netif, struct dhcp *dhcp); -/** Remove a struct dhcp previously set to the netif using dhcp_set_struct() */ -#define dhcp_remove_struct(netif) do { (netif)->dhcp = NULL; } while(0) -void dhcp_cleanup(struct netif *netif); -/** start DHCP configuration */ -err_t dhcp_start(struct netif *netif); -/** enforce early lease renewal (not needed normally)*/ -err_t dhcp_renew(struct netif *netif); -/** release the DHCP lease, usually called before dhcp_stop()*/ -err_t dhcp_release(struct netif *netif); -/** stop DHCP configuration */ -void dhcp_stop(struct netif *netif); -/** inform server of our manual IP address */ -void dhcp_inform(struct netif *netif); -/** Handle a possible change in the network configuration */ -void dhcp_network_changed(struct netif *netif); - -/** if enabled, check whether the offered IP address is not in use, using ARP */ -#if DHCP_DOES_ARP_CHECK -void dhcp_arp_reply(struct netif *netif, ip_addr_t *addr); -#endif - -/** to be called every minute */ -void dhcp_coarse_tmr(void); -/** to be called every half second */ -void dhcp_fine_tmr(void); - -err_t dhcp_release_unicast(struct netif *netif); - -/** DHCP message item offsets and length */ -#define DHCP_OP_OFS 0 -#define DHCP_HTYPE_OFS 1 -#define DHCP_HLEN_OFS 2 -#define DHCP_HOPS_OFS 3 -#define DHCP_XID_OFS 4 -#define DHCP_SECS_OFS 8 -#define DHCP_FLAGS_OFS 10 -#define DHCP_CIADDR_OFS 12 -#define DHCP_YIADDR_OFS 16 -#define DHCP_SIADDR_OFS 20 -#define DHCP_GIADDR_OFS 24 -#define DHCP_CHADDR_OFS 28 -#define DHCP_SNAME_OFS 44 -#define DHCP_FILE_OFS 108 -#define DHCP_MSG_LEN 236 - -#define DHCP_COOKIE_OFS DHCP_MSG_LEN -#define DHCP_OPTIONS_OFS (DHCP_MSG_LEN + 4) - -#define DHCP_CLIENT_PORT 68 -#define DHCP_SERVER_PORT 67 - -/** DHCP client states */ -#define DHCP_OFF 0 -#define DHCP_REQUESTING 1 -#define DHCP_INIT 2 -#define DHCP_REBOOTING 3 -#define DHCP_REBINDING 4 -#define DHCP_RENEWING 5 -#define DHCP_SELECTING 6 -#define DHCP_INFORMING 7 -#define DHCP_CHECKING 8 -#define DHCP_PERMANENT 9 -#define DHCP_BOUND 10 -#define DHCP_RELEASING 11 //Realtek modified -#define DHCP_BACKING_OFF 12 - -/** AUTOIP cooperatation flags */ -#define DHCP_AUTOIP_COOP_STATE_OFF 0 -#define DHCP_AUTOIP_COOP_STATE_ON 1 - -#define DHCP_BOOTREQUEST 1 -#define DHCP_BOOTREPLY 2 - -/** DHCP message types */ -#define DHCP_DISCOVER 1 -#define DHCP_OFFER 2 -#define DHCP_REQUEST 3 -#define DHCP_DECLINE 4 -#define DHCP_ACK 5 -#define DHCP_NAK 6 -#define DHCP_RELEASE 7 -#define DHCP_INFORM 8 - -/** DHCP hardware type, currently only ethernet is supported */ -#define DHCP_HTYPE_ETH 1 - -#define DHCP_MAGIC_COOKIE 0x63825363UL - -/* This is a list of options for BOOTP and DHCP, see RFC 2132 for descriptions */ - -/** BootP options */ -#define DHCP_OPTION_PAD 0 -#define DHCP_OPTION_SUBNET_MASK 1 /* RFC 2132 3.3 */ -#define DHCP_OPTION_ROUTER 3 -#define DHCP_OPTION_DNS_SERVER 6 -#define DHCP_OPTION_HOSTNAME 12 -#define DHCP_OPTION_IP_TTL 23 -#define DHCP_OPTION_MTU 26 -#define DHCP_OPTION_BROADCAST 28 -#define DHCP_OPTION_TCP_TTL 37 -#define DHCP_OPTION_END 255 - -/** DHCP options */ -#define DHCP_OPTION_REQUESTED_IP 50 /* RFC 2132 9.1, requested IP address */ -#define DHCP_OPTION_LEASE_TIME 51 /* RFC 2132 9.2, time in seconds, in 4 bytes */ -#define DHCP_OPTION_OVERLOAD 52 /* RFC2132 9.3, use file and/or sname field for options */ - -#define DHCP_OPTION_MESSAGE_TYPE 53 /* RFC 2132 9.6, important for DHCP */ -#define DHCP_OPTION_MESSAGE_TYPE_LEN 1 - -#define DHCP_OPTION_SERVER_ID 54 /* RFC 2132 9.7, server IP address */ -#define DHCP_OPTION_PARAMETER_REQUEST_LIST 55 /* RFC 2132 9.8, requested option types */ - -#define DHCP_OPTION_MAX_MSG_SIZE 57 /* RFC 2132 9.10, message size accepted >= 576 */ -#define DHCP_OPTION_MAX_MSG_SIZE_LEN 2 - -#define DHCP_OPTION_T1 58 /* T1 renewal time */ -#define DHCP_OPTION_T2 59 /* T2 rebinding time */ -#define DHCP_OPTION_US 60 -#define DHCP_OPTION_CLIENT_ID 61 -#define DHCP_OPTION_TFTP_SERVERNAME 66 -#define DHCP_OPTION_BOOTFILE 67 - -/** possible combinations of overloading the file and sname fields with options */ -#define DHCP_OVERLOAD_NONE 0 -#define DHCP_OVERLOAD_FILE 1 -#define DHCP_OVERLOAD_SNAME 2 -#define DHCP_OVERLOAD_SNAME_FILE 3 - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_DHCP */ - -#endif /*__LWIP_DHCP_H__*/ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/dns.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/dns.h deleted file mode 100644 index 6d79fb0..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/dns.h +++ /dev/null @@ -1,163 +0,0 @@ -/** - * lwip DNS resolver header file. - - * Author: Jim Pettinato - * April 2007 - - * ported from uIP resolv.c Copyright (c) 2002-2003, Adam Dunkels. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __LWIP_DNS_H__ -#define __LWIP_DNS_H__ - -#include "lwip/opt.h" - -#if LWIP_DNS /* don't build if not configured for use in lwipopts.h */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** DNS timer period */ -#define DNS_TMR_INTERVAL 1000 - -/** DNS field TYPE used for "Resource Records" */ -#define DNS_RRTYPE_A 1 /* a host address */ -#define DNS_RRTYPE_NS 2 /* an authoritative name server */ -#define DNS_RRTYPE_MD 3 /* a mail destination (Obsolete - use MX) */ -#define DNS_RRTYPE_MF 4 /* a mail forwarder (Obsolete - use MX) */ -#define DNS_RRTYPE_CNAME 5 /* the canonical name for an alias */ -#define DNS_RRTYPE_SOA 6 /* marks the start of a zone of authority */ -#define DNS_RRTYPE_MB 7 /* a mailbox domain name (EXPERIMENTAL) */ -#define DNS_RRTYPE_MG 8 /* a mail group member (EXPERIMENTAL) */ -#define DNS_RRTYPE_MR 9 /* a mail rename domain name (EXPERIMENTAL) */ -#define DNS_RRTYPE_NULL 10 /* a null RR (EXPERIMENTAL) */ -#define DNS_RRTYPE_WKS 11 /* a well known service description */ -#define DNS_RRTYPE_PTR 12 /* a domain name pointer */ -#define DNS_RRTYPE_HINFO 13 /* host information */ -#define DNS_RRTYPE_MINFO 14 /* mailbox or mail list information */ -#define DNS_RRTYPE_MX 15 /* mail exchange */ -#define DNS_RRTYPE_TXT 16 /* text strings */ - -/** DNS field CLASS used for "Resource Records" */ -#define DNS_RRCLASS_IN 1 /* the Internet */ -#define DNS_RRCLASS_CS 2 /* the CSNET class (Obsolete - used only for examples in some obsolete RFCs) */ -#define DNS_RRCLASS_CH 3 /* the CHAOS class */ -#define DNS_RRCLASS_HS 4 /* Hesiod [Dyer 87] */ -#define DNS_RRCLASS_FLUSH 0x800 /* Flush bit */ - -/* DNS protocol flags */ -#define DNS_FLAG1_RESPONSE 0x80 -#define DNS_FLAG1_OPCODE_STATUS 0x10 -#define DNS_FLAG1_OPCODE_INVERSE 0x08 -#define DNS_FLAG1_OPCODE_STANDARD 0x00 -#define DNS_FLAG1_AUTHORATIVE 0x04 -#define DNS_FLAG1_TRUNC 0x02 -#define DNS_FLAG1_RD 0x01 -#define DNS_FLAG2_RA 0x80 -#define DNS_FLAG2_ERR_MASK 0x0f -#define DNS_FLAG2_ERR_NONE 0x00 -#define DNS_FLAG2_ERR_NAME 0x03 - -/* DNS protocol states */ -#define DNS_STATE_UNUSED 0 -#define DNS_STATE_NEW 1 -#define DNS_STATE_ASKING 2 -#define DNS_STATE_DONE 3 - -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -/** DNS message header */ -struct dns_hdr { - PACK_STRUCT_FIELD(uint16_t id); - PACK_STRUCT_FIELD(uint8_t flags1); - PACK_STRUCT_FIELD(uint8_t flags2); - PACK_STRUCT_FIELD(uint16_t numquestions); - PACK_STRUCT_FIELD(uint16_t numanswers); - PACK_STRUCT_FIELD(uint16_t numauthrr); - PACK_STRUCT_FIELD(uint16_t numextrarr); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif -#define SIZEOF_DNS_HDR 12 - -/* The size used for the next line is rather a hack, but it prevents including socket.h in all files - that include memp.h, and that would possibly break portability (since socket.h defines some types - and constants possibly already define by the OS). - Calculation rule: - sizeof(struct addrinfo) + sizeof(struct sockaddr_in) + DNS_MAX_NAME_LENGTH + 1 byte zero-termination */ -#define NETDB_ELEM_SIZE (32 + 16 + DNS_MAX_NAME_LENGTH + 1) - -#if DNS_LOCAL_HOSTLIST -/** struct used for local host-list */ -struct local_hostlist_entry { - /** static hostname */ - const char *name; - /** static host address in network byteorder */ - ip_addr_t addr; - struct local_hostlist_entry *next; -}; -#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC -#ifndef DNS_LOCAL_HOSTLIST_MAX_NAMELEN -#define DNS_LOCAL_HOSTLIST_MAX_NAMELEN DNS_MAX_NAME_LENGTH -#endif -#define LOCALHOSTLIST_ELEM_SIZE ((sizeof(struct local_hostlist_entry) + DNS_LOCAL_HOSTLIST_MAX_NAMELEN + 1)) -#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ -#endif /* DNS_LOCAL_HOSTLIST */ - -/** Callback which is invoked when a hostname is found. - * A function of this type must be implemented by the application using the DNS resolver. - * @param name pointer to the name that was looked up. - * @param ipaddr pointer to an ip_addr_t containing the IP address of the hostname, - * or NULL if the name could not be found (or on any other error). - * @param callback_arg a user-specified callback argument passed to dns_gethostbyname -*/ -typedef void (*dns_found_callback)(const char *name, ip_addr_t *ipaddr, void *callback_arg); - -void dns_init(void); -void dns_tmr(void); -void dns_setserver(uint8_t numdns, ip_addr_t *dnsserver); -ip_addr_t dns_getserver(uint8_t numdns); -err_t dns_gethostbyname(const char *hostname, ip_addr_t *addr, - dns_found_callback found, void *callback_arg); - -#if DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC -int dns_local_removehost(const char *hostname, const ip_addr_t *addr); -err_t dns_local_addhost(const char *hostname, const ip_addr_t *addr); -#endif /* DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_DNS */ - -#endif /* __LWIP_DNS_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/err.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/err.h deleted file mode 100644 index 6102045..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/err.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_ERR_H__ -#define __LWIP_ERR_H__ - -#include "lwip/opt.h" -#include "lwip/arch.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** Define LWIP_ERR_T in cc.h if you want to use - * a different type for your platform (must be signed). */ -#ifdef LWIP_ERR_T -typedef LWIP_ERR_T err_t; -#else /* LWIP_ERR_T */ -//typedef int8_t err_t; -typedef int8_t err_t; -#endif /* LWIP_ERR_T*/ - -/* Definitions for error constants. */ - -#define ERR_OK 0 /* No error, everything OK. */ -#define ERR_MEM -1 /* Out of memory error. */ -#define ERR_BUF -2 /* Buffer error. */ -#define ERR_TIMEOUT -3 /* Timeout. */ -#define ERR_RTE -4 /* Routing problem. */ -#define ERR_INPROGRESS -5 /* Operation in progress */ -#define ERR_VAL -6 /* Illegal value. */ -#define ERR_WOULDBLOCK -7 /* Operation would block. */ -#define ERR_USE -8 /* Address in use. */ -#define ERR_ISCONN -9 /* Already connected. */ - -#define ERR_IS_FATAL(e) ((e) < ERR_ISCONN) - -#define ERR_ABRT -10 /* Connection aborted. */ -#define ERR_RST -11 /* Connection reset. */ -#define ERR_CLSD -12 /* Connection closed. */ -#define ERR_CONN -13 /* Not connected. */ - -#define ERR_ARG -14 /* Illegal argument. */ - -#define ERR_IF -15 /* Low-level netif error */ - - -#ifdef LWIP_DEBUG -extern const char *lwip_strerr(err_t err); -#else -#define lwip_strerr(x) "" -#endif /* LWIP_DEBUG */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_ERR_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/init.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/init.h deleted file mode 100644 index 3238534..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/init.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_INIT_H__ -#define __LWIP_INIT_H__ - -#include "lwip/opt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** X.x.x: Major version of the stack */ -#define LWIP_VERSION_MAJOR 1U -/** x.X.x: Minor version of the stack */ -#define LWIP_VERSION_MINOR 4U -/** x.x.X: Revision of the stack */ -#define LWIP_VERSION_REVISION 1U -/** For release candidates, this is set to 1..254 - * For official releases, this is set to 255 (LWIP_RC_RELEASE) - * For development versions (CVS), this is set to 0 (LWIP_RC_DEVELOPMENT) */ -#define LWIP_VERSION_RC 255U - -/** LWIP_VERSION_RC is set to LWIP_RC_RELEASE for official releases */ -#define LWIP_RC_RELEASE 255U -/** LWIP_VERSION_RC is set to LWIP_RC_DEVELOPMENT for CVS versions */ -#define LWIP_RC_DEVELOPMENT 0U - -#define LWIP_VERSION_IS_RELEASE (LWIP_VERSION_RC == LWIP_RC_RELEASE) -#define LWIP_VERSION_IS_DEVELOPMENT (LWIP_VERSION_RC == LWIP_RC_DEVELOPMENT) -#define LWIP_VERSION_IS_RC ((LWIP_VERSION_RC != LWIP_RC_RELEASE) && (LWIP_VERSION_RC != LWIP_RC_DEVELOPMENT)) - -/** Provides the version of the stack */ -#define LWIP_VERSION (LWIP_VERSION_MAJOR << 24 | LWIP_VERSION_MINOR << 16 | \ - LWIP_VERSION_REVISION << 8 | LWIP_VERSION_RC) - -/* Modules initialization */ -void lwip_init(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_INIT_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/lwip_timers.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/lwip_timers.h deleted file mode 100644 index e1faa8f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/lwip_timers.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * Simon Goldschmidt - * - */ -#ifndef __LWIP_TIMERS_H__ -#define __LWIP_TIMERS_H__ - -#include "lwip/opt.h" - -/* Timers are not supported when NO_SYS==1 and NO_SYS_NO_TIMERS==1 */ -#define LWIP_TIMERS (!NO_SYS || (NO_SYS && !NO_SYS_NO_TIMERS)) - -#if LWIP_TIMERS - -#include "lwip/err.h" -#if !NO_SYS -#include "lwip/sys.h" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef LWIP_DEBUG_TIMERNAMES -#ifdef LWIP_DEBUG -#define LWIP_DEBUG_TIMERNAMES SYS_DEBUG -#else /* LWIP_DEBUG */ -#define LWIP_DEBUG_TIMERNAMES 0 -#endif /* LWIP_DEBUG*/ -#endif - -/** Function prototype for a timeout callback function. Register such a function - * using sys_timeout(). - * - * @param arg Additional argument to pass to the function - set up by sys_timeout() - */ -typedef void (* sys_timeout_handler)(void *arg); - -struct sys_timeo { - struct sys_timeo *next; - uint32_t time; - sys_timeout_handler h; - void *arg; -#if LWIP_DEBUG_TIMERNAMES - const char* handler_name; -#endif /* LWIP_DEBUG_TIMERNAMES */ -}; - -void sys_timeouts_init(void); - -//Realtek add -struct sys_timeouts { - struct sys_timeo *next; -}; - -struct sys_timeouts *sys_arch_timeouts(void); -//Realtek add end - -#if LWIP_DEBUG_TIMERNAMES -void sys_timeout_debug(uint32_t msecs, sys_timeout_handler handler, void *arg, const char* handler_name); -#define sys_timeout(msecs, handler, arg) sys_timeout_debug(msecs, handler, arg, #handler) -#else /* LWIP_DEBUG_TIMERNAMES */ -void sys_timeout(uint32_t msecs, sys_timeout_handler handler, void *arg); -#endif /* LWIP_DEBUG_TIMERNAMES */ - -void sys_untimeout(sys_timeout_handler handler, void *arg); -#if NO_SYS -void sys_check_timeouts(void); -void sys_restart_timeouts(void); -#else /* NO_SYS */ -void sys_timeouts_mbox_fetch(sys_mbox_t *mbox, void **msg); -#endif /* NO_SYS */ - - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_TIMERS */ -#endif /* __LWIP_TIMERS_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/mem.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/mem.h deleted file mode 100644 index 508a0cb..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/mem.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_MEM_H__ -#define __LWIP_MEM_H__ - -#include "lwip/opt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if MEM_LIBC_MALLOC - -#include /* for size_t */ - -typedef size_t mem_size_t; -#define MEM_SIZE_F SZT_F - -/* aliases for C library malloc() */ -#define mem_init() -/* in case C library malloc() needs extra protection, - * allow these defines to be overridden. - */ -#ifndef mem_free -#define mem_free free -#endif -#ifndef mem_malloc -#define mem_malloc malloc -#endif -#ifndef mem_calloc -#define mem_calloc calloc -#endif -/* Since there is no C library allocation function to shrink memory without - moving it, define this to nothing. */ -#ifndef mem_trim -#define mem_trim(mem, size) (mem) -#endif -#else /* MEM_LIBC_MALLOC */ - -/* MEM_SIZE would have to be aligned, but using 64000 here instead of - * 65535 leaves some room for alignment... - */ -#if MEM_SIZE > 64000L -typedef uint32_t mem_size_t; -#define MEM_SIZE_F U32_F -#else -typedef uint16_t mem_size_t; -#define MEM_SIZE_F U16_F -#endif /* MEM_SIZE > 64000 */ - -#if MEM_USE_POOLS -/** mem_init is not used when using pools instead of a heap */ -#define mem_init() -/** mem_trim is not used when using pools instead of a heap: - we can't free part of a pool element and don't want to copy the rest */ -#define mem_trim(mem, size) (mem) -#else /* MEM_USE_POOLS */ -/* lwIP alternative malloc */ -void mem_init(void); -void *mem_trim(void *mem, mem_size_t size); -#endif /* MEM_USE_POOLS */ -void *mem_malloc(mem_size_t size); -void *mem_calloc(mem_size_t count, mem_size_t size); -void mem_free(void *mem); -#endif /* MEM_LIBC_MALLOC */ - -/** Calculate memory size for an aligned buffer - returns the next highest - * multiple of MEM_ALIGNMENT (e.g. LWIP_MEM_ALIGN_SIZE(3) and - * LWIP_MEM_ALIGN_SIZE(4) will both yield 4 for MEM_ALIGNMENT == 4). - */ -#ifndef LWIP_MEM_ALIGN_SIZE -#define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1) & ~(MEM_ALIGNMENT-1)) -#endif - -/** Calculate safe memory size for an aligned buffer when using an unaligned - * type as storage. This includes a safety-margin on (MEM_ALIGNMENT - 1) at the - * start (e.g. if buffer is uint8_t[] and actual data will be uint32_t*) - */ -#ifndef LWIP_MEM_ALIGN_BUFFER -#define LWIP_MEM_ALIGN_BUFFER(size) (((size) + MEM_ALIGNMENT - 1)) -#endif - -/** Align a memory pointer to the alignment defined by MEM_ALIGNMENT - * so that ADDR % MEM_ALIGNMENT == 0 - */ -#ifndef LWIP_MEM_ALIGN -#define LWIP_MEM_ALIGN(addr) ((void *)(((mem_ptr_t)(addr) + MEM_ALIGNMENT - 1) & ~(mem_ptr_t)(MEM_ALIGNMENT-1))) -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_MEM_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/memp.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/memp.h deleted file mode 100644 index b12b5e5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/memp.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#ifndef __LWIP_MEMP_H__ -#define __LWIP_MEMP_H__ - -#include "lwip/opt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Create the list of all memory pools managed by memp. MEMP_MAX represents a NULL pool at the end */ -typedef enum { -#define LWIP_MEMPOOL(name,num,size,desc) MEMP_##name, -#include "lwip/memp_std.h" - MEMP_MAX -} memp_t; - -#if MEM_USE_POOLS -/* Use a helper type to get the start and end of the user "memory pools" for mem_malloc */ -typedef enum { - /* Get the first (via: - MEMP_POOL_HELPER_START = ((uint8_t) 1*MEMP_POOL_A + 0*MEMP_POOL_B + 0*MEMP_POOL_C + 0)*/ - MEMP_POOL_HELPER_FIRST = ((uint8_t) -#define LWIP_MEMPOOL(name,num,size,desc) -#define LWIP_MALLOC_MEMPOOL_START 1 -#define LWIP_MALLOC_MEMPOOL(num, size) * MEMP_POOL_##size + 0 -#define LWIP_MALLOC_MEMPOOL_END -#include "lwip/memp_std.h" - ) , - /* Get the last (via: - MEMP_POOL_HELPER_END = ((uint8_t) 0 + MEMP_POOL_A*0 + MEMP_POOL_B*0 + MEMP_POOL_C*1) */ - MEMP_POOL_HELPER_LAST = ((uint8_t) -#define LWIP_MEMPOOL(name,num,size,desc) -#define LWIP_MALLOC_MEMPOOL_START -#define LWIP_MALLOC_MEMPOOL(num, size) 0 + MEMP_POOL_##size * -#define LWIP_MALLOC_MEMPOOL_END 1 -#include "lwip/memp_std.h" - ) -} memp_pool_helper_t; - -/* The actual start and stop values are here (cast them over) - We use this helper type and these defines so we can avoid using const memp_t values */ -#define MEMP_POOL_FIRST ((memp_t) MEMP_POOL_HELPER_FIRST) -#define MEMP_POOL_LAST ((memp_t) MEMP_POOL_HELPER_LAST) -#endif /* MEM_USE_POOLS */ - -#if MEMP_MEM_MALLOC || MEM_USE_POOLS -extern const uint16_t memp_sizes[MEMP_MAX]; -#endif /* MEMP_MEM_MALLOC || MEM_USE_POOLS */ - -#if MEMP_MEM_MALLOC - -#include "mem.h" - -#define memp_init() -#define memp_malloc(type) mem_malloc(memp_sizes[type]) -#define memp_free(type, mem) mem_free(mem) - -#else /* MEMP_MEM_MALLOC */ - -#if MEM_USE_POOLS -/** This structure is used to save the pool one element came from. */ -struct memp_malloc_helper -{ - memp_t poolnr; -}; -#endif /* MEM_USE_POOLS */ - -void memp_init(void); - -#if MEMP_OVERFLOW_CHECK -void *memp_malloc_fn(memp_t type, const char* file, const int line); -#define memp_malloc(t) memp_malloc_fn((t), __FILE__, __LINE__) -#else -void *memp_malloc(memp_t type); -#endif -void memp_free(memp_t type, void *mem); - -#endif /* MEMP_MEM_MALLOC */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_MEMP_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/memp_std.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/memp_std.h deleted file mode 100644 index 461ed1a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/memp_std.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * SETUP: Make sure we define everything we will need. - * - * We have create three types of pools: - * 1) MEMPOOL - standard pools - * 2) MALLOC_MEMPOOL - to be used by mem_malloc in mem.c - * 3) PBUF_MEMPOOL - a mempool of pbuf's, so include space for the pbuf struct - * - * If the include'r doesn't require any special treatment of each of the types - * above, then will declare #2 & #3 to be just standard mempools. - */ -#ifndef LWIP_MALLOC_MEMPOOL -/* This treats "malloc pools" just like any other pool. - The pools are a little bigger to provide 'size' as the amount of user data. */ -#define LWIP_MALLOC_MEMPOOL(num, size) LWIP_MEMPOOL(POOL_##size, num, (size + sizeof(struct memp_malloc_helper)), "MALLOC_"#size) -#define LWIP_MALLOC_MEMPOOL_START -#define LWIP_MALLOC_MEMPOOL_END -#endif /* LWIP_MALLOC_MEMPOOL */ - -#ifndef LWIP_PBUF_MEMPOOL -/* This treats "pbuf pools" just like any other pool. - * Allocates buffers for a pbuf struct AND a payload size */ -#define LWIP_PBUF_MEMPOOL(name, num, payload, desc) LWIP_MEMPOOL(name, num, (MEMP_ALIGN_SIZE(sizeof(struct pbuf)) + MEMP_ALIGN_SIZE(payload)), desc) -#endif /* LWIP_PBUF_MEMPOOL */ - - -/* - * A list of internal pools used by LWIP. - * - * LWIP_MEMPOOL(pool_name, number_elements, element_size, pool_description) - * creates a pool name MEMP_pool_name. description is used in stats.c - */ -#if LWIP_RAW -LWIP_MEMPOOL(RAW_PCB, MEMP_NUM_RAW_PCB, sizeof(struct raw_pcb), "RAW_PCB") -#endif /* LWIP_RAW */ - -#if LWIP_UDP -LWIP_MEMPOOL(UDP_PCB, MEMP_NUM_UDP_PCB, sizeof(struct udp_pcb), "UDP_PCB") -#endif /* LWIP_UDP */ - -#if LWIP_TCP -LWIP_MEMPOOL(TCP_PCB, MEMP_NUM_TCP_PCB, sizeof(struct tcp_pcb), "TCP_PCB") -LWIP_MEMPOOL(TCP_PCB_LISTEN, MEMP_NUM_TCP_PCB_LISTEN, sizeof(struct tcp_pcb_listen), "TCP_PCB_LISTEN") -LWIP_MEMPOOL(TCP_SEG, MEMP_NUM_TCP_SEG, sizeof(struct tcp_seg), "TCP_SEG") -#endif /* LWIP_TCP */ - -#if IP_REASSEMBLY -LWIP_MEMPOOL(REASSDATA, MEMP_NUM_REASSDATA, sizeof(struct ip_reassdata), "REASSDATA") -#endif /* IP_REASSEMBLY */ -#if IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF -LWIP_MEMPOOL(FRAG_PBUF, MEMP_NUM_FRAG_PBUF, sizeof(struct pbuf_custom_ref),"FRAG_PBUF") -#endif /* IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF */ - -#if LWIP_NETCONN -LWIP_MEMPOOL(NETBUF, MEMP_NUM_NETBUF, sizeof(struct netbuf), "NETBUF") -LWIP_MEMPOOL(NETCONN, MEMP_NUM_NETCONN, sizeof(struct netconn), "NETCONN") -#endif /* LWIP_NETCONN */ - -#if NO_SYS==0 -LWIP_MEMPOOL(TCPIP_MSG_API, MEMP_NUM_TCPIP_MSG_API, sizeof(struct tcpip_msg), "TCPIP_MSG_API") -#if !LWIP_TCPIP_CORE_LOCKING_INPUT -LWIP_MEMPOOL(TCPIP_MSG_INPKT,MEMP_NUM_TCPIP_MSG_INPKT, sizeof(struct tcpip_msg), "TCPIP_MSG_INPKT") -#endif /* !LWIP_TCPIP_CORE_LOCKING_INPUT */ -#endif /* NO_SYS==0 */ - -#if LWIP_ARP && ARP_QUEUEING -LWIP_MEMPOOL(ARP_QUEUE, MEMP_NUM_ARP_QUEUE, sizeof(struct etharp_q_entry), "ARP_QUEUE") -#endif /* LWIP_ARP && ARP_QUEUEING */ - -#if LWIP_IGMP -LWIP_MEMPOOL(IGMP_GROUP, MEMP_NUM_IGMP_GROUP, sizeof(struct igmp_group), "IGMP_GROUP") -#endif /* LWIP_IGMP */ - -#if (!NO_SYS || (NO_SYS && !NO_SYS_NO_TIMERS)) /* LWIP_TIMERS */ -LWIP_MEMPOOL(SYS_TIMEOUT, MEMP_NUM_SYS_TIMEOUT, sizeof(struct sys_timeo), "SYS_TIMEOUT") -#endif /* LWIP_TIMERS */ - -#if LWIP_SNMP -LWIP_MEMPOOL(SNMP_ROOTNODE, MEMP_NUM_SNMP_ROOTNODE, sizeof(struct mib_list_rootnode), "SNMP_ROOTNODE") -LWIP_MEMPOOL(SNMP_NODE, MEMP_NUM_SNMP_NODE, sizeof(struct mib_list_node), "SNMP_NODE") -LWIP_MEMPOOL(SNMP_VARBIND, MEMP_NUM_SNMP_VARBIND, sizeof(struct snmp_varbind), "SNMP_VARBIND") -LWIP_MEMPOOL(SNMP_VALUE, MEMP_NUM_SNMP_VALUE, SNMP_MAX_VALUE_SIZE, "SNMP_VALUE") -#endif /* LWIP_SNMP */ -#if LWIP_DNS && LWIP_SOCKET -LWIP_MEMPOOL(NETDB, MEMP_NUM_NETDB, NETDB_ELEM_SIZE, "NETDB") -#endif /* LWIP_DNS && LWIP_SOCKET */ -#if LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC -LWIP_MEMPOOL(LOCALHOSTLIST, MEMP_NUM_LOCALHOSTLIST, LOCALHOSTLIST_ELEM_SIZE, "LOCALHOSTLIST") -#endif /* LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ -#if PPP_SUPPORT && PPPOE_SUPPORT -LWIP_MEMPOOL(PPPOE_IF, MEMP_NUM_PPPOE_INTERFACES, sizeof(struct pppoe_softc), "PPPOE_IF") -#endif /* PPP_SUPPORT && PPPOE_SUPPORT */ - -/* - * A list of pools of pbuf's used by LWIP. - * - * LWIP_PBUF_MEMPOOL(pool_name, number_elements, pbuf_payload_size, pool_description) - * creates a pool name MEMP_pool_name. description is used in stats.c - * This allocates enough space for the pbuf struct and a payload. - * (Example: pbuf_payload_size=0 allocates only size for the struct) - */ -LWIP_PBUF_MEMPOOL(PBUF, MEMP_NUM_PBUF, 0, "PBUF_REF/ROM") -LWIP_PBUF_MEMPOOL(PBUF_POOL, PBUF_POOL_SIZE, PBUF_POOL_BUFSIZE, "PBUF_POOL") - - -/* - * Allow for user-defined pools; this must be explicitly set in lwipopts.h - * since the default is to NOT look for lwippools.h - */ -#if MEMP_USE_CUSTOM_POOLS -#include "lwippools.h" -#endif /* MEMP_USE_CUSTOM_POOLS */ - -/* - * REQUIRED CLEANUP: Clear up so we don't get "multiply defined" error later - * (#undef is ignored for something that is not defined) - */ -#undef LWIP_MEMPOOL -#undef LWIP_MALLOC_MEMPOOL -#undef LWIP_MALLOC_MEMPOOL_START -#undef LWIP_MALLOC_MEMPOOL_END -#undef LWIP_PBUF_MEMPOOL diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/netbuf.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/netbuf.h deleted file mode 100644 index c20773b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/netbuf.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_NETBUF_H__ -#define __LWIP_NETBUF_H__ - -#include "lwip/opt.h" -#include "lwip/pbuf.h" -#include "lwip/ip_addr.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** This netbuf has dest-addr/port set */ -#define NETBUF_FLAG_DESTADDR 0x01 -/** This netbuf includes a checksum */ -#define NETBUF_FLAG_CHKSUM 0x02 - -struct netbuf { - struct pbuf *p, *ptr; - ip_addr_t addr; - uint16_t port; -#if LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY -#if LWIP_CHECKSUM_ON_COPY - uint8_t flags; -#endif /* LWIP_CHECKSUM_ON_COPY */ - uint16_t toport_chksum; -#if LWIP_NETBUF_RECVINFO - ip_addr_t toaddr; -#endif /* LWIP_NETBUF_RECVINFO */ -#endif /* LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY */ -}; - -/* Network buffer functions: */ -struct netbuf * netbuf_new (void); -void netbuf_delete (struct netbuf *buf); -void * netbuf_alloc (struct netbuf *buf, uint16_t size); -void netbuf_free (struct netbuf *buf); -err_t netbuf_ref (struct netbuf *buf, - const void *dataptr, uint16_t size); -void netbuf_chain (struct netbuf *head, - struct netbuf *tail); - -err_t netbuf_data (struct netbuf *buf, - void **dataptr, uint16_t *len); -int8_t netbuf_next (struct netbuf *buf); -void netbuf_first (struct netbuf *buf); - - -#define netbuf_copy_partial(buf, dataptr, len, offset) \ - pbuf_copy_partial((buf)->p, (dataptr), (len), (offset)) -#define netbuf_copy(buf,dataptr,len) netbuf_copy_partial(buf, dataptr, len, 0) -#define netbuf_take(buf, dataptr, len) pbuf_take((buf)->p, dataptr, len) -#define netbuf_len(buf) ((buf)->p->tot_len) -#define netbuf_fromaddr(buf) (&((buf)->addr)) -#define netbuf_set_fromaddr(buf, fromaddr) ip_addr_set((&(buf)->addr), fromaddr) -#define netbuf_fromport(buf) ((buf)->port) -#if LWIP_NETBUF_RECVINFO -#define netbuf_destaddr(buf) (&((buf)->toaddr)) -#define netbuf_set_destaddr(buf, destaddr) ip_addr_set((&(buf)->addr), destaddr) -#define netbuf_destport(buf) (((buf)->flags & NETBUF_FLAG_DESTADDR) ? (buf)->toport_chksum : 0) -#endif /* LWIP_NETBUF_RECVINFO */ -#if LWIP_CHECKSUM_ON_COPY -#define netbuf_set_chksum(buf, chksum) do { (buf)->flags = NETBUF_FLAG_CHKSUM; \ - (buf)->toport_chksum = chksum; } while(0) -#endif /* LWIP_CHECKSUM_ON_COPY */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_NETBUF_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/netdb.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/netdb.h deleted file mode 100644 index 7587e2f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/netdb.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Simon Goldschmidt - * - */ -#ifndef __LWIP_NETDB_H__ -#define __LWIP_NETDB_H__ - -#include "lwip/opt.h" - -#if LWIP_DNS && LWIP_SOCKET - -#include /* for size_t */ - -#include "lwip/inet.h" -#include "lwip/sockets.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* some rarely used options */ -#ifndef LWIP_DNS_API_DECLARE_H_ERRNO -#define LWIP_DNS_API_DECLARE_H_ERRNO 1 -#endif - -#ifndef LWIP_DNS_API_DEFINE_ERRORS -#define LWIP_DNS_API_DEFINE_ERRORS 1 -#endif - -#ifndef LWIP_DNS_API_DECLARE_STRUCTS -#define LWIP_DNS_API_DECLARE_STRUCTS 1 -#endif - -#if LWIP_DNS_API_DEFINE_ERRORS -/** Errors used by the DNS API functions, h_errno can be one of them */ -#define EAI_NONAME 200 -#define EAI_SERVICE 201 -#define EAI_FAIL 202 -#define EAI_MEMORY 203 - -#define HOST_NOT_FOUND 210 -#define NO_DATA 211 -#define NO_RECOVERY 212 -#define TRY_AGAIN 213 -#endif /* LWIP_DNS_API_DEFINE_ERRORS */ - -#if LWIP_DNS_API_DECLARE_STRUCTS -struct hostent { - char *h_name; /* Official name of the host. */ - char **h_aliases; /* A pointer to an array of pointers to alternative host names, - terminated by a null pointer. */ - int h_addrtype; /* Address type. */ - int h_length; /* The length, in bytes, of the address. */ - char **h_addr_list; /* A pointer to an array of pointers to network addresses (in - network byte order) for the host, terminated by a null pointer. */ -#define h_addr h_addr_list[0] /* for backward compatibility */ -}; - -struct addrinfo { - int ai_flags; /* Input flags. */ - int ai_family; /* Address family of socket. */ - int ai_socktype; /* Socket type. */ - int ai_protocol; /* Protocol of socket. */ - socklen_t ai_addrlen; /* Length of socket address. */ - struct sockaddr *ai_addr; /* Socket address of socket. */ - char *ai_canonname; /* Canonical name of service location. */ - struct addrinfo *ai_next; /* Pointer to next in list. */ -}; -#endif /* LWIP_DNS_API_DECLARE_STRUCTS */ - -#if LWIP_DNS_API_DECLARE_H_ERRNO -/* application accessable error code set by the DNS API functions */ -extern int h_errno; -#endif /* LWIP_DNS_API_DECLARE_H_ERRNO*/ - -struct hostent *lwip_gethostbyname(const char *name); -int lwip_gethostbyname_r(const char *name, struct hostent *ret, char *buf, - size_t buflen, struct hostent **result, int *h_errnop); -void lwip_freeaddrinfo(struct addrinfo *ai); -int lwip_getaddrinfo(const char *nodename, - const char *servname, - const struct addrinfo *hints, - struct addrinfo **res); - -#if LWIP_COMPAT_SOCKETS -#define gethostbyname(name) lwip_gethostbyname(name) -#define gethostbyname_r(name, ret, buf, buflen, result, h_errnop) \ - lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errnop) -#define freeaddrinfo(addrinfo) lwip_freeaddrinfo(addrinfo) -#define getaddrinfo(nodname, servname, hints, res) \ - lwip_getaddrinfo(nodname, servname, hints, res) -#endif /* LWIP_COMPAT_SOCKETS */ - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_DNS && LWIP_SOCKET */ - -#endif /* __LWIP_NETDB_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/netif.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/netif.h deleted file mode 100644 index 76baf05..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/netif.h +++ /dev/null @@ -1,331 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_NETIF_H__ -#define __LWIP_NETIF_H__ - -#include "lwip/opt.h" - -#define ENABLE_LOOPBACK (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF) - -#include "lwip/err.h" - -#include "lwip/ip_addr.h" - -#include "lwip/def.h" -#include "lwip/pbuf.h" -#if LWIP_DHCP -struct dhcp; -#endif -#if LWIP_AUTOIP -struct autoip; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* Throughout this file, IP addresses are expected to be in - * the same byte order as in IP_PCB. */ - -/** must be the maximum of all used hardware address lengths - across all types of interfaces in use */ -#define NETIF_MAX_HWADDR_LEN 6U - -/** Whether the network interface is 'up'. This is - * a software flag used to control whether this network - * interface is enabled and processes traffic. - * It is set by the startup code (for static IP configuration) or - * by dhcp/autoip when an address has been assigned. - */ -#define NETIF_FLAG_UP 0x01U -/** If set, the netif has broadcast capability. - * Set by the netif driver in its init function. */ -#define NETIF_FLAG_BROADCAST 0x02U -/** If set, the netif is one end of a point-to-point connection. - * Set by the netif driver in its init function. */ -#define NETIF_FLAG_POINTTOPOINT 0x04U -/** If set, the interface is configured using DHCP. - * Set by the DHCP code when starting or stopping DHCP. */ -#define NETIF_FLAG_DHCP 0x08U -/** If set, the interface has an active link - * (set by the network interface driver). - * Either set by the netif driver in its init function (if the link - * is up at that time) or at a later point once the link comes up - * (if link detection is supported by the hardware). */ -#define NETIF_FLAG_LINK_UP 0x10U -/** If set, the netif is an ethernet device using ARP. - * Set by the netif driver in its init function. - * Used to check input packet types and use of DHCP. */ -#define NETIF_FLAG_ETHARP 0x20U -/** If set, the netif is an ethernet device. It might not use - * ARP or TCP/IP if it is used for PPPoE only. - */ -#define NETIF_FLAG_ETHERNET 0x40U -/** If set, the netif has IGMP capability. - * Set by the netif driver in its init function. */ -#define NETIF_FLAG_IGMP 0x80U - -#ifdef CONFIG_DONT_CARE_TP -#define NETIF_FLAG_IPSWITCH 0x100U -#endif -/** Function prototype for netif init functions. Set up flags and output/linkoutput - * callback functions in this function. - * - * @param netif The netif to initialize - */ -typedef err_t (*netif_init_fn)(struct netif *netif); -/** Function prototype for netif->input functions. This function is saved as 'input' - * callback function in the netif struct. Call it when a packet has been received. - * - * @param p The received packet, copied into a pbuf - * @param inp The netif which received the packet - */ -typedef err_t (*netif_input_fn)(struct pbuf *p, struct netif *inp); -/** Function prototype for netif->output functions. Called by lwIP when a packet - * shall be sent. For ethernet netif, set this to 'etharp_output' and set - * 'linkoutput'. - * - * @param netif The netif which shall send a packet - * @param p The packet to send (p->payload points to IP header) - * @param ipaddr The IP address to which the packet shall be sent - */ -typedef err_t (*netif_output_fn)(struct netif *netif, struct pbuf *p, - ip_addr_t *ipaddr); -/** Function prototype for netif->linkoutput functions. Only used for ethernet - * netifs. This function is called by ARP when a packet shall be sent. - * - * @param netif The netif which shall send a packet - * @param p The packet to send (raw ethernet packet) - */ -typedef err_t (*netif_linkoutput_fn)(struct netif *netif, struct pbuf *p); -/** Function prototype for netif status- or link-callback functions. */ -typedef void (*netif_status_callback_fn)(struct netif *netif); -/** Function prototype for netif igmp_mac_filter functions */ -typedef err_t (*netif_igmp_mac_filter_fn)(struct netif *netif, - ip_addr_t *group, uint8_t action); - -/** Generic data structure used for all lwIP network interfaces. - * The following fields should be filled in by the initialization - * function for the device driver: hwaddr_len, hwaddr[], mtu, flags */ -struct netif { - /** pointer to next in linked list */ - struct netif *next; - - /** IP address configuration in network byte order */ - ip_addr_t ip_addr; - ip_addr_t netmask; - ip_addr_t gw; - - /** This function is called by the network device driver - * to pass a packet up the TCP/IP stack. */ - netif_input_fn input; - /** This function is called by the IP module when it wants - * to send a packet on the interface. This function typically - * first resolves the hardware address, then sends the packet. */ - netif_output_fn output; - /** This function is called by the ARP module when it wants - * to send a packet on the interface. This function outputs - * the pbuf as-is on the link medium. */ - netif_linkoutput_fn linkoutput; -#if LWIP_NETIF_STATUS_CALLBACK - /** This function is called when the netif state is set to up or down - */ - netif_status_callback_fn status_callback; -#endif /* LWIP_NETIF_STATUS_CALLBACK */ -#if LWIP_NETIF_LINK_CALLBACK - /** This function is called when the netif link is set to up or down - */ - netif_status_callback_fn link_callback; -#endif /* LWIP_NETIF_LINK_CALLBACK */ -#if LWIP_NETIF_REMOVE_CALLBACK - /** This function is called when the netif has been removed */ - netif_status_callback_fn remove_callback; -#endif /* LWIP_NETIF_REMOVE_CALLBACK */ - /** This field can be set by the device driver and could point - * to state information for the device. */ - void *state; -#if LWIP_DHCP - /** the DHCP client state information for this netif */ - struct dhcp *dhcp; -#endif /* LWIP_DHCP */ -#if LWIP_AUTOIP - /** the AutoIP client state information for this netif */ - struct autoip *autoip; -#endif -#if LWIP_NETIF_HOSTNAME - /* the hostname for this netif, NULL is a valid value */ - char* hostname; -#endif /* LWIP_NETIF_HOSTNAME */ - /** maximum transfer unit (in bytes) */ - uint16_t mtu; - /** number of bytes used in hwaddr */ - uint8_t hwaddr_len; - /** link level hardware address of this interface */ - uint8_t hwaddr[NETIF_MAX_HWADDR_LEN]; - /** flags (see NETIF_FLAG_ above) */ - uint8_t flags; - /** descriptive abbreviation */ - char name[2]; - /** number of this interface */ - uint8_t num; -#if LWIP_SNMP - /** link type (from "snmp_ifType" enum from snmp.h) */ - uint8_t link_type; - /** (estimate) link speed */ - uint32_t link_speed; - /** timestamp at last change made (up/down) */ - uint32_t ts; - /** counters */ - uint32_t ifinoctets; - uint32_t ifinucastpkts; - uint32_t ifinnucastpkts; - uint32_t ifindiscards; - uint32_t ifoutoctets; - uint32_t ifoutucastpkts; - uint32_t ifoutnucastpkts; - uint32_t ifoutdiscards; -#endif /* LWIP_SNMP */ -#if LWIP_IGMP - /** This function could be called to add or delete a entry in the multicast - filter table of the ethernet MAC.*/ - netif_igmp_mac_filter_fn igmp_mac_filter; -#endif /* LWIP_IGMP */ -#if LWIP_NETIF_HWADDRHINT - uint8_t *addr_hint; -#endif /* LWIP_NETIF_HWADDRHINT */ -#if ENABLE_LOOPBACK - /* List of packets to be queued for ourselves. */ - struct pbuf *loop_first; - struct pbuf *loop_last; -#if LWIP_LOOPBACK_MAX_PBUFS - uint16_t loop_cnt_current; -#endif /* LWIP_LOOPBACK_MAX_PBUFS */ -#endif /* ENABLE_LOOPBACK */ -}; - -#if LWIP_SNMP -#define NETIF_INIT_SNMP(netif, type, speed) \ - /* use "snmp_ifType" enum from snmp.h for "type", snmp_ifType_ethernet_csmacd by example */ \ - (netif)->link_type = (type); \ - /* your link speed here (units: bits per second) */ \ - (netif)->link_speed = (speed); \ - (netif)->ts = 0; \ - (netif)->ifinoctets = 0; \ - (netif)->ifinucastpkts = 0; \ - (netif)->ifinnucastpkts = 0; \ - (netif)->ifindiscards = 0; \ - (netif)->ifoutoctets = 0; \ - (netif)->ifoutucastpkts = 0; \ - (netif)->ifoutnucastpkts = 0; \ - (netif)->ifoutdiscards = 0 -#else /* LWIP_SNMP */ -#define NETIF_INIT_SNMP(netif, type, speed) -#endif /* LWIP_SNMP */ - - -/** The list of network interfaces. */ -extern struct netif *netif_list; -/** The default network interface. */ -extern struct netif *netif_default; - -void netif_init(void); - -struct netif *netif_add(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask, - ip_addr_t *gw, void *state, netif_init_fn init, netif_input_fn input); - -void -netif_set_addr(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask, - ip_addr_t *gw); -void netif_remove(struct netif * netif); - -/* Returns a network interface given its name. The name is of the form - "et0", where the first two letters are the "name" field in the - netif structure, and the digit is in the num field in the same - structure. */ -struct netif *netif_find(char *name); - -void netif_set_default(struct netif *netif); - -void netif_set_ipaddr(struct netif *netif, ip_addr_t *ipaddr); -void netif_set_netmask(struct netif *netif, ip_addr_t *netmask); -void netif_set_gw(struct netif *netif, ip_addr_t *gw); - -void netif_set_up(struct netif *netif); -void netif_set_down(struct netif *netif); -/** Ask if an interface is up */ -#define netif_is_up(netif) (((netif)->flags & NETIF_FLAG_UP) ? (uint8_t)1 : (uint8_t)0) - -#if LWIP_NETIF_STATUS_CALLBACK -void netif_set_status_callback(struct netif *netif, netif_status_callback_fn status_callback); -#endif /* LWIP_NETIF_STATUS_CALLBACK */ -#if LWIP_NETIF_REMOVE_CALLBACK -void netif_set_remove_callback(struct netif *netif, netif_status_callback_fn remove_callback); -#endif /* LWIP_NETIF_REMOVE_CALLBACK */ - -void netif_set_link_up(struct netif *netif); -void netif_set_link_down(struct netif *netif); -/** Ask if a link is up */ -#define netif_is_link_up(netif) (((netif)->flags & NETIF_FLAG_LINK_UP) ? (uint8_t)1 : (uint8_t)0) - -#if LWIP_NETIF_LINK_CALLBACK -void netif_set_link_callback(struct netif *netif, netif_status_callback_fn link_callback); -#endif /* LWIP_NETIF_LINK_CALLBACK */ - -#if LWIP_NETIF_HOSTNAME -#define netif_set_hostname(netif, name) do { if((netif) != NULL) { (netif)->hostname = name; }}while(0) -#define netif_get_hostname(netif) (((netif) != NULL) ? ((netif)->hostname) : NULL) -#endif /* LWIP_NETIF_HOSTNAME */ - -#if LWIP_IGMP -#define netif_set_igmp_mac_filter(netif, function) do { if((netif) != NULL) { (netif)->igmp_mac_filter = function; }}while(0) -#define netif_get_igmp_mac_filter(netif) (((netif) != NULL) ? ((netif)->igmp_mac_filter) : NULL) -#endif /* LWIP_IGMP */ - -#if ENABLE_LOOPBACK -err_t netif_loop_output(struct netif *netif, struct pbuf *p, ip_addr_t *dest_ip); -void netif_poll(struct netif *netif); -#if !LWIP_NETIF_LOOPBACK_MULTITHREADING -void netif_poll_all(void); -#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ -#endif /* ENABLE_LOOPBACK */ - -#if LWIP_NETIF_HWADDRHINT -#define NETIF_SET_HWADDRHINT(netif, hint) ((netif)->addr_hint = (hint)) -#else /* LWIP_NETIF_HWADDRHINT */ -#define NETIF_SET_HWADDRHINT(netif, hint) -#endif /* LWIP_NETIF_HWADDRHINT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_NETIF_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/netifapi.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/netifapi.h deleted file mode 100644 index 33318ef..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/netifapi.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - */ - -#ifndef __LWIP_NETIFAPI_H__ -#define __LWIP_NETIFAPI_H__ - -#include "lwip/opt.h" - -#if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/sys.h" -#include "lwip/netif.h" -#include "lwip/dhcp.h" -#include "lwip/autoip.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (*netifapi_void_fn)(struct netif *netif); -typedef err_t (*netifapi_errt_fn)(struct netif *netif); - -struct netifapi_msg_msg { -#if !LWIP_TCPIP_CORE_LOCKING - sys_sem_t sem; -#endif /* !LWIP_TCPIP_CORE_LOCKING */ - err_t err; - struct netif *netif; - union { - struct { - ip_addr_t *ipaddr; - ip_addr_t *netmask; - ip_addr_t *gw; - void *state; - netif_init_fn init; - netif_input_fn input; - } add; - struct { - netifapi_void_fn voidfunc; - netifapi_errt_fn errtfunc; - } common; - } msg; -}; - -struct netifapi_msg { - void (* function)(struct netifapi_msg_msg *msg); - struct netifapi_msg_msg msg; -}; - - -/* API for application */ -err_t netifapi_netif_add ( struct netif *netif, - ip_addr_t *ipaddr, - ip_addr_t *netmask, - ip_addr_t *gw, - void *state, - netif_init_fn init, - netif_input_fn input); - -err_t netifapi_netif_set_addr ( struct netif *netif, - ip_addr_t *ipaddr, - ip_addr_t *netmask, - ip_addr_t *gw ); - -err_t netifapi_netif_common ( struct netif *netif, - netifapi_void_fn voidfunc, - netifapi_errt_fn errtfunc); - -#define netifapi_netif_remove(n) netifapi_netif_common(n, netif_remove, NULL) -#define netifapi_netif_set_up(n) netifapi_netif_common(n, netif_set_up, NULL) -#define netifapi_netif_set_down(n) netifapi_netif_common(n, netif_set_down, NULL) -#define netifapi_netif_set_default(n) netifapi_netif_common(n, netif_set_default, NULL) -#define netifapi_dhcp_start(n) netifapi_netif_common(n, NULL, dhcp_start) -#define netifapi_dhcp_stop(n) netifapi_netif_common(n, dhcp_stop, NULL) -#define netifapi_autoip_start(n) netifapi_netif_common(n, NULL, autoip_start) -#define netifapi_autoip_stop(n) netifapi_netif_common(n, NULL, autoip_stop) - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_NETIF_API */ - -#endif /* __LWIP_NETIFAPI_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/opt.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/opt.h deleted file mode 100644 index cba1b0e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/opt.h +++ /dev/null @@ -1,2134 +0,0 @@ -/** - * @file - * - * lwIP Options Configuration - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_OPT_H__ -#define __LWIP_OPT_H__ - -/* - * Include user defined options first. Anything not defined in these files - * will be set to standard values. Override anything you dont like! - */ -#include "lwipopts.h" -#include "lwip/debug.h" - -/* - ----------------------------------------------- - ---------- Platform specific locking ---------- - ----------------------------------------------- -*/ - -/** - * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain - * critical regions during buffer allocation, deallocation and memory - * allocation and deallocation. - */ -#ifndef SYS_LIGHTWEIGHT_PROT -#define SYS_LIGHTWEIGHT_PROT 0 -#endif - -/** - * NO_SYS==1: Provides VERY minimal functionality. Otherwise, - * use lwIP facilities. - */ -#ifndef NO_SYS -#define NO_SYS 0 -#endif - -/** - * NO_SYS_NO_TIMERS==1: Drop support for sys_timeout when NO_SYS==1 - * Mainly for compatibility to old versions. - */ -#ifndef NO_SYS_NO_TIMERS -#define NO_SYS_NO_TIMERS 0 -#endif - -/** - * MEMCPY: override this if you have a faster implementation at hand than the - * one included in your C library - */ -#ifndef MEMCPY -#define MEMCPY(dst,src,len) memcpy(dst,src,len) -#endif - -/** - * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a - * call to memcpy() if the length is known at compile time and is small. - */ -#ifndef SMEMCPY -#define SMEMCPY(dst,src,len) memcpy(dst,src,len) -#endif - -/* - ------------------------------------ - ---------- Memory options ---------- - ------------------------------------ -*/ -/** - * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library - * instead of the lwip internal allocator. Can save code size if you - * already use it. - */ -#ifndef MEM_LIBC_MALLOC -#define MEM_LIBC_MALLOC 0 -#endif - -/** -* MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator. -* Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution -* speed and usage from interrupts! -*/ -#ifndef MEMP_MEM_MALLOC -#define MEMP_MEM_MALLOC 0 -#endif - -/** - * MEM_ALIGNMENT: should be set to the alignment of the CPU - * 4 byte alignment -> #define MEM_ALIGNMENT 4 - * 2 byte alignment -> #define MEM_ALIGNMENT 2 - */ -#ifndef MEM_ALIGNMENT -#define MEM_ALIGNMENT 1 -#endif - -/** - * MEM_SIZE: the size of the heap memory. If the application will send - * a lot of data that needs to be copied, this should be set high. - */ -#ifndef MEM_SIZE -#define MEM_SIZE 1600 -#endif - -/** - * MEMP_SEPARATE_POOLS: if defined to 1, each pool is placed in its own array. - * This can be used to individually change the location of each pool. - * Default is one big array for all pools - */ -#ifndef MEMP_SEPARATE_POOLS -#define MEMP_SEPARATE_POOLS 0 -#endif - -/** - * MEMP_OVERFLOW_CHECK: memp overflow protection reserves a configurable - * amount of bytes before and after each memp element in every pool and fills - * it with a prominent default value. - * MEMP_OVERFLOW_CHECK == 0 no checking - * MEMP_OVERFLOW_CHECK == 1 checks each element when it is freed - * MEMP_OVERFLOW_CHECK >= 2 checks each element in every pool every time - * memp_malloc() or memp_free() is called (useful but slow!) - */ -#ifndef MEMP_OVERFLOW_CHECK -#define MEMP_OVERFLOW_CHECK 0 -#endif - -/** - * MEMP_SANITY_CHECK==1: run a sanity check after each memp_free() to make - * sure that there are no cycles in the linked lists. - */ -#ifndef MEMP_SANITY_CHECK -#define MEMP_SANITY_CHECK 0 -#endif - -/** - * MEM_USE_POOLS==1: Use an alternative to malloc() by allocating from a set - * of memory pools of various sizes. When mem_malloc is called, an element of - * the smallest pool that can provide the length needed is returned. - * To use this, MEMP_USE_CUSTOM_POOLS also has to be enabled. - */ -#ifndef MEM_USE_POOLS -#define MEM_USE_POOLS 0 -#endif - -/** - * MEM_USE_POOLS_TRY_BIGGER_POOL==1: if one malloc-pool is empty, try the next - * bigger pool - WARNING: THIS MIGHT WASTE MEMORY but it can make a system more - * reliable. */ -#ifndef MEM_USE_POOLS_TRY_BIGGER_POOL -#define MEM_USE_POOLS_TRY_BIGGER_POOL 0 -#endif - -/** - * MEMP_USE_CUSTOM_POOLS==1: whether to include a user file lwippools.h - * that defines additional pools beyond the "standard" ones required - * by lwIP. If you set this to 1, you must have lwippools.h in your - * inlude path somewhere. - */ -#ifndef MEMP_USE_CUSTOM_POOLS -#define MEMP_USE_CUSTOM_POOLS 0 -#endif - -/** - * Set this to 1 if you want to free PBUF_RAM pbufs (or call mem_free()) from - * interrupt context (or another context that doesn't allow waiting for a - * semaphore). - * If set to 1, mem_malloc will be protected by a semaphore and SYS_ARCH_PROTECT, - * while mem_free will only use SYS_ARCH_PROTECT. mem_malloc SYS_ARCH_UNPROTECTs - * with each loop so that mem_free can run. - * - * ATTENTION: As you can see from the above description, this leads to dis-/ - * enabling interrupts often, which can be slow! Also, on low memory, mem_malloc - * can need longer. - * - * If you don't want that, at least for NO_SYS=0, you can still use the following - * functions to enqueue a deallocation call which then runs in the tcpip_thread - * context: - * - pbuf_free_callback(p); - * - mem_free_callback(m); - */ -#ifndef LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT -#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 0 -#endif - -/* - ------------------------------------------------ - ---------- Internal Memory Pool Sizes ---------- - ------------------------------------------------ -*/ -/** - * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). - * If the application sends a lot of data out of ROM (or other static memory), - * this should be set high. - */ -#ifndef MEMP_NUM_PBUF -#define MEMP_NUM_PBUF 16 -#endif - -/** - * MEMP_NUM_RAW_PCB: Number of raw connection PCBs - * (requires the LWIP_RAW option) - */ -#ifndef MEMP_NUM_RAW_PCB -#define MEMP_NUM_RAW_PCB 4 -#endif - -/** - * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One - * per active UDP "connection". - * (requires the LWIP_UDP option) - */ -#ifndef MEMP_NUM_UDP_PCB -#define MEMP_NUM_UDP_PCB 4 -#endif - -/** - * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. - * (requires the LWIP_TCP option) - */ -#ifndef MEMP_NUM_TCP_PCB -#define MEMP_NUM_TCP_PCB 5 -#endif - -/** - * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. - * (requires the LWIP_TCP option) - */ -#ifndef MEMP_NUM_TCP_PCB_LISTEN -#define MEMP_NUM_TCP_PCB_LISTEN 8 -#endif - -/** - * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. - * (requires the LWIP_TCP option) - */ -#ifndef MEMP_NUM_TCP_SEG -#define MEMP_NUM_TCP_SEG 16 -#endif - -/** - * MEMP_NUM_REASSDATA: the number of IP packets simultaneously queued for - * reassembly (whole packets, not fragments!) - */ -#ifndef MEMP_NUM_REASSDATA -#define MEMP_NUM_REASSDATA 5 -#endif - -/** - * MEMP_NUM_FRAG_PBUF: the number of IP fragments simultaneously sent - * (fragments, not whole packets!). - * This is only used with IP_FRAG_USES_STATIC_BUF==0 and - * LWIP_NETIF_TX_SINGLE_PBUF==0 and only has to be > 1 with DMA-enabled MACs - * where the packet is not yet sent when netif->output returns. - */ -#ifndef MEMP_NUM_FRAG_PBUF -#define MEMP_NUM_FRAG_PBUF 15 -#endif - -/** - * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing - * packets (pbufs) that are waiting for an ARP request (to resolve - * their destination address) to finish. - * (requires the ARP_QUEUEING option) - */ -#ifndef MEMP_NUM_ARP_QUEUE -#define MEMP_NUM_ARP_QUEUE 30 -#endif - -/** - * MEMP_NUM_IGMP_GROUP: The number of multicast groups whose network interfaces - * can be members et the same time (one per netif - allsystems group -, plus one - * per netif membership). - * (requires the LWIP_IGMP option) - */ -#ifndef MEMP_NUM_IGMP_GROUP -#define MEMP_NUM_IGMP_GROUP 8 -#endif - -/** - * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. - * (requires NO_SYS==0) - * The default number of timeouts is calculated here for all enabled modules. - * The formula expects settings to be either '0' or '1'. - */ -#ifndef MEMP_NUM_SYS_TIMEOUT -#define MEMP_NUM_SYS_TIMEOUT (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_SUPPORT) -#endif - -/** - * MEMP_NUM_NETBUF: the number of struct netbufs. - * (only needed if you use the sequential API, like api_lib.c) - */ -#ifndef MEMP_NUM_NETBUF -#define MEMP_NUM_NETBUF 2 -#endif - -/** - * MEMP_NUM_NETCONN: the number of struct netconns. - * (only needed if you use the sequential API, like api_lib.c) - */ -#ifndef MEMP_NUM_NETCONN -#define MEMP_NUM_NETCONN 8 -#endif - -/** - * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used - * for callback/timeout API communication. - * (only needed if you use tcpip.c) - */ -#ifndef MEMP_NUM_TCPIP_MSG_API -#define MEMP_NUM_TCPIP_MSG_API 8 -#endif - -/** - * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used - * for incoming packets. - * (only needed if you use tcpip.c) - */ -#ifndef MEMP_NUM_TCPIP_MSG_INPKT -#define MEMP_NUM_TCPIP_MSG_INPKT 8 -#endif - -/** - * MEMP_NUM_SNMP_NODE: the number of leafs in the SNMP tree. - */ -#ifndef MEMP_NUM_SNMP_NODE -#define MEMP_NUM_SNMP_NODE 50 -#endif - -/** - * MEMP_NUM_SNMP_ROOTNODE: the number of branches in the SNMP tree. - * Every branch has one leaf (MEMP_NUM_SNMP_NODE) at least! - */ -#ifndef MEMP_NUM_SNMP_ROOTNODE -#define MEMP_NUM_SNMP_ROOTNODE 30 -#endif - -/** - * MEMP_NUM_SNMP_VARBIND: the number of concurrent requests (does not have to - * be changed normally) - 2 of these are used per request (1 for input, - * 1 for output) - */ -#ifndef MEMP_NUM_SNMP_VARBIND -#define MEMP_NUM_SNMP_VARBIND 2 -#endif - -/** - * MEMP_NUM_SNMP_VALUE: the number of OID or values concurrently used - * (does not have to be changed normally) - 3 of these are used per request - * (1 for the value read and 2 for OIDs - input and output) - */ -#ifndef MEMP_NUM_SNMP_VALUE -#define MEMP_NUM_SNMP_VALUE 3 -#endif - -/** - * MEMP_NUM_NETDB: the number of concurrently running lwip_addrinfo() calls - * (before freeing the corresponding memory using lwip_freeaddrinfo()). - */ -#ifndef MEMP_NUM_NETDB -#define MEMP_NUM_NETDB 1 -#endif - -/** - * MEMP_NUM_LOCALHOSTLIST: the number of host entries in the local host list - * if DNS_LOCAL_HOSTLIST_IS_DYNAMIC==1. - */ -#ifndef MEMP_NUM_LOCALHOSTLIST -#define MEMP_NUM_LOCALHOSTLIST 1 -#endif - -/** - * MEMP_NUM_PPPOE_INTERFACES: the number of concurrently active PPPoE - * interfaces (only used with PPPOE_SUPPORT==1) - */ -#ifndef MEMP_NUM_PPPOE_INTERFACES -#define MEMP_NUM_PPPOE_INTERFACES 1 -#endif - -/** - * PBUF_POOL_SIZE: the number of buffers in the pbuf pool. - */ -#ifndef PBUF_POOL_SIZE -#define PBUF_POOL_SIZE 16 -#endif - -/* - --------------------------------- - ---------- ARP options ---------- - --------------------------------- -*/ -/** - * LWIP_ARP==1: Enable ARP functionality. - */ -#ifndef LWIP_ARP -#define LWIP_ARP 1 -#endif - -/** - * ARP_TABLE_SIZE: Number of active MAC-IP address pairs cached. - */ -#ifndef ARP_TABLE_SIZE -#define ARP_TABLE_SIZE 10 -#endif - -/** - * ARP_QUEUEING==1: Multiple outgoing packets are queued during hardware address - * resolution. By default, only the most recent packet is queued per IP address. - * This is sufficient for most protocols and mainly reduces TCP connection - * startup time. Set this to 1 if you know your application sends more than one - * packet in a row to an IP address that is not in the ARP cache. - */ -#ifndef ARP_QUEUEING -#define ARP_QUEUEING 0 -#endif - -/** - * ETHARP_TRUST_IP_MAC==1: Incoming IP packets cause the ARP table to be - * updated with the source MAC and IP addresses supplied in the packet. - * You may want to disable this if you do not trust LAN peers to have the - * correct addresses, or as a limited approach to attempt to handle - * spoofing. If disabled, lwIP will need to make a new ARP request if - * the peer is not already in the ARP table, adding a little latency. - * The peer *is* in the ARP table if it requested our address before. - * Also notice that this slows down input processing of every IP packet! - */ -#ifndef ETHARP_TRUST_IP_MAC -#define ETHARP_TRUST_IP_MAC 0 -#endif - -/** - * ETHARP_SUPPORT_VLAN==1: support receiving ethernet packets with VLAN header. - * Additionally, you can define ETHARP_VLAN_CHECK to an uint16_t VLAN ID to check. - * If ETHARP_VLAN_CHECK is defined, only VLAN-traffic for this VLAN is accepted. - * If ETHARP_VLAN_CHECK is not defined, all traffic is accepted. - * Alternatively, define a function/define ETHARP_VLAN_CHECK_FN(eth_hdr, vlan) - * that returns 1 to accept a packet or 0 to drop a packet. - */ -#ifndef ETHARP_SUPPORT_VLAN -#define ETHARP_SUPPORT_VLAN 0 -#endif - -/** LWIP_ETHERNET==1: enable ethernet support for PPPoE even though ARP - * might be disabled - */ -#ifndef LWIP_ETHERNET -#define LWIP_ETHERNET (LWIP_ARP || PPPOE_SUPPORT) -#endif - -/** ETH_PAD_SIZE: number of bytes added before the ethernet header to ensure - * alignment of payload after that header. Since the header is 14 bytes long, - * without this padding e.g. addresses in the IP header will not be aligned - * on a 32-bit boundary, so setting this to 2 can speed up 32-bit-platforms. - */ -#ifndef ETH_PAD_SIZE -#define ETH_PAD_SIZE 0 -#endif - -/** ETHARP_SUPPORT_STATIC_ENTRIES==1: enable code to support static ARP table - * entries (using etharp_add_static_entry/etharp_remove_static_entry). - */ -#ifndef ETHARP_SUPPORT_STATIC_ENTRIES -#define ETHARP_SUPPORT_STATIC_ENTRIES 0 -#endif - - -/* - -------------------------------- - ---------- IP options ---------- - -------------------------------- -*/ -/** - * IP_FORWARD==1: Enables the ability to forward IP packets across network - * interfaces. If you are going to run lwIP on a device with only one network - * interface, define this to 0. - */ -#ifndef IP_FORWARD -#define IP_FORWARD 0 -#endif - -/** - * IP_OPTIONS_ALLOWED: Defines the behavior for IP options. - * IP_OPTIONS_ALLOWED==0: All packets with IP options are dropped. - * IP_OPTIONS_ALLOWED==1: IP options are allowed (but not parsed). - */ -#ifndef IP_OPTIONS_ALLOWED -#define IP_OPTIONS_ALLOWED 1 -#endif - -/** - * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that - * this option does not affect outgoing packet sizes, which can be controlled - * via IP_FRAG. - */ -#ifndef IP_REASSEMBLY -#define IP_REASSEMBLY 1 -#endif - -/** - * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note - * that this option does not affect incoming packet sizes, which can be - * controlled via IP_REASSEMBLY. - */ -#ifndef IP_FRAG -#define IP_FRAG 1 -#endif - -/** - * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) - * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived - * in this time, the whole packet is discarded. - */ -#ifndef IP_REASS_MAXAGE -#define IP_REASS_MAXAGE 3 -#endif - -/** - * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. - * Since the received pbufs are enqueued, be sure to configure - * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive - * packets even if the maximum amount of fragments is enqueued for reassembly! - */ -#ifndef IP_REASS_MAX_PBUFS -#define IP_REASS_MAX_PBUFS 10 -#endif - -/** - * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP - * fragmentation. Otherwise pbufs are allocated and reference the original - * packet data to be fragmented (or with LWIP_NETIF_TX_SINGLE_PBUF==1, - * new PBUF_RAM pbufs are used for fragments). - * ATTENTION: IP_FRAG_USES_STATIC_BUF==1 may not be used for DMA-enabled MACs! - */ -#ifndef IP_FRAG_USES_STATIC_BUF -#define IP_FRAG_USES_STATIC_BUF 0 -#endif - -/** - * IP_FRAG_MAX_MTU: Assumed max MTU on any interface for IP frag buffer - * (requires IP_FRAG_USES_STATIC_BUF==1) - */ -#if IP_FRAG_USES_STATIC_BUF && !defined(IP_FRAG_MAX_MTU) -#define IP_FRAG_MAX_MTU 1500 -#endif - -/** - * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers. - */ -#ifndef IP_DEFAULT_TTL -#define IP_DEFAULT_TTL 255 -#endif - -/** - * IP_SOF_BROADCAST=1: Use the SOF_BROADCAST field to enable broadcast - * filter per pcb on udp and raw send operations. To enable broadcast filter - * on recv operations, you also have to set IP_SOF_BROADCAST_RECV=1. - */ -#ifndef IP_SOF_BROADCAST -#define IP_SOF_BROADCAST 0 -#endif - -/** - * IP_SOF_BROADCAST_RECV (requires IP_SOF_BROADCAST=1) enable the broadcast - * filter on recv operations. - */ -#ifndef IP_SOF_BROADCAST_RECV -#define IP_SOF_BROADCAST_RECV 0 -#endif - -/** - * IP_FORWARD_ALLOW_TX_ON_RX_NETIF==1: allow ip_forward() to send packets back - * out on the netif where it was received. This should only be used for - * wireless networks. - * ATTENTION: When this is 1, make sure your netif driver correctly marks incoming - * link-layer-broadcast/multicast packets as such using the corresponding pbuf flags! - */ -#ifndef IP_FORWARD_ALLOW_TX_ON_RX_NETIF -#define IP_FORWARD_ALLOW_TX_ON_RX_NETIF 0 -#endif - -/** - * LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS==1: randomize the local port for the first - * local TCP/UDP pcb (default==0). This can prevent creating predictable port - * numbers after booting a device. - */ -#ifndef LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS -#define LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS 0 -#endif - -/* - ---------------------------------- - ---------- ICMP options ---------- - ---------------------------------- -*/ -/** - * LWIP_ICMP==1: Enable ICMP module inside the IP stack. - * Be careful, disable that make your product non-compliant to RFC1122 - */ -#ifndef LWIP_ICMP -#define LWIP_ICMP 1 -#endif - -/** - * ICMP_TTL: Default value for Time-To-Live used by ICMP packets. - */ -#ifndef ICMP_TTL -#define ICMP_TTL (IP_DEFAULT_TTL) -#endif - -/** - * LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only) - */ -#ifndef LWIP_BROADCAST_PING -#define LWIP_BROADCAST_PING 0 -#endif - -/** - * LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only) - */ -#ifndef LWIP_MULTICAST_PING -#define LWIP_MULTICAST_PING 0 -#endif - -/* - --------------------------------- - ---------- RAW options ---------- - --------------------------------- -*/ -/** - * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. - */ -#ifndef LWIP_RAW -#define LWIP_RAW 1 -#endif - -/** - * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. - */ -#ifndef RAW_TTL -#define RAW_TTL (IP_DEFAULT_TTL) -#endif - -/* - ---------------------------------- - ---------- DHCP options ---------- - ---------------------------------- -*/ -/** - * LWIP_DHCP==1: Enable DHCP module. - */ -#ifndef LWIP_DHCP -#define LWIP_DHCP 0 -#endif - -/** - * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address. - */ -#ifndef DHCP_DOES_ARP_CHECK -#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP)) -#endif - -/* - ------------------------------------ - ---------- AUTOIP options ---------- - ------------------------------------ -*/ -/** - * LWIP_AUTOIP==1: Enable AUTOIP module. - */ -#ifndef LWIP_AUTOIP -#define LWIP_AUTOIP 1 //Realtek modified (0->1) -#endif - -/** - * LWIP_DHCP_AUTOIP_COOP==1: Allow DHCP and AUTOIP to be both enabled on - * the same interface at the same time. - */ -#ifndef LWIP_DHCP_AUTOIP_COOP -#define LWIP_DHCP_AUTOIP_COOP 0 -#endif - -/** - * LWIP_DHCP_AUTOIP_COOP_TRIES: Set to the number of DHCP DISCOVER probes - * that should be sent before falling back on AUTOIP. This can be set - * as low as 1 to get an AutoIP address very quickly, but you should - * be prepared to handle a changing IP address when DHCP overrides - * AutoIP. - */ -#ifndef LWIP_DHCP_AUTOIP_COOP_TRIES -#define LWIP_DHCP_AUTOIP_COOP_TRIES 9 -#endif - -/* - ---------------------------------- - ---------- SNMP options ---------- - ---------------------------------- -*/ -/** - * LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP - * transport. - */ -#ifndef LWIP_SNMP -#define LWIP_SNMP 0 -#endif - -/** - * SNMP_CONCURRENT_REQUESTS: Number of concurrent requests the module will - * allow. At least one request buffer is required. - * Does not have to be changed unless external MIBs answer request asynchronously - */ -#ifndef SNMP_CONCURRENT_REQUESTS -#define SNMP_CONCURRENT_REQUESTS 1 -#endif - -/** - * SNMP_TRAP_DESTINATIONS: Number of trap destinations. At least one trap - * destination is required - */ -#ifndef SNMP_TRAP_DESTINATIONS -#define SNMP_TRAP_DESTINATIONS 1 -#endif - -/** - * SNMP_PRIVATE_MIB: - * When using a private MIB, you have to create a file 'private_mib.h' that contains - * a 'struct mib_array_node mib_private' which contains your MIB. - */ -#ifndef SNMP_PRIVATE_MIB -#define SNMP_PRIVATE_MIB 0 -#endif - -/** - * Only allow SNMP write actions that are 'safe' (e.g. disabeling netifs is not - * a safe action and disabled when SNMP_SAFE_REQUESTS = 1). - * Unsafe requests are disabled by default! - */ -#ifndef SNMP_SAFE_REQUESTS -#define SNMP_SAFE_REQUESTS 1 -#endif - -/** - * The maximum length of strings used. This affects the size of - * MEMP_SNMP_VALUE elements. - */ -#ifndef SNMP_MAX_OCTET_STRING_LEN -#define SNMP_MAX_OCTET_STRING_LEN 127 -#endif - -/** - * The maximum depth of the SNMP tree. - * With private MIBs enabled, this depends on your MIB! - * This affects the size of MEMP_SNMP_VALUE elements. - */ -#ifndef SNMP_MAX_TREE_DEPTH -#define SNMP_MAX_TREE_DEPTH 15 -#endif - -/** - * The size of the MEMP_SNMP_VALUE elements, normally calculated from - * SNMP_MAX_OCTET_STRING_LEN and SNMP_MAX_TREE_DEPTH. - */ -#ifndef SNMP_MAX_VALUE_SIZE -#define SNMP_MAX_VALUE_SIZE LWIP_MAX((SNMP_MAX_OCTET_STRING_LEN)+1, sizeof(int32_t)*(SNMP_MAX_TREE_DEPTH)) -#endif - -/* - ---------------------------------- - ---------- IGMP options ---------- - ---------------------------------- -*/ -/** - * LWIP_IGMP==1: Turn on IGMP module. - */ -#ifndef LWIP_IGMP -#define LWIP_IGMP 0 -#endif - -/* - ---------------------------------- - ---------- DNS options ----------- - ---------------------------------- -*/ -/** - * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS - * transport. - */ -#ifndef LWIP_DNS -#define LWIP_DNS 0 -#endif - -/** DNS maximum number of entries to maintain locally. */ -#ifndef DNS_TABLE_SIZE -#define DNS_TABLE_SIZE 4 -#endif - -/** DNS maximum host name length supported in the name table. */ -#ifndef DNS_MAX_NAME_LENGTH -#define DNS_MAX_NAME_LENGTH 256 -#endif - -/** The maximum of DNS servers */ -#ifndef DNS_MAX_SERVERS -#define DNS_MAX_SERVERS 2 -#endif - -/** DNS do a name checking between the query and the response. */ -#ifndef DNS_DOES_NAME_CHECK -#define DNS_DOES_NAME_CHECK 1 -#endif - -/** DNS message max. size. Default value is RFC compliant. */ -#ifndef DNS_MSG_SIZE -#define DNS_MSG_SIZE 512 -#endif - -/** DNS_LOCAL_HOSTLIST: Implements a local host-to-address list. If enabled, - * you have to define - * #define DNS_LOCAL_HOSTLIST_INIT {{"host1", 0x123}, {"host2", 0x234}} - * (an array of structs name/address, where address is an uint32_t in network - * byte order). - * - * Instead, you can also use an external function: - * #define DNS_LOOKUP_LOCAL_EXTERN(x) extern uint32_t my_lookup_function(const char *name) - * that returns the IP address or INADDR_NONE if not found. - */ -#ifndef DNS_LOCAL_HOSTLIST -#define DNS_LOCAL_HOSTLIST 0 -#endif /* DNS_LOCAL_HOSTLIST */ - -/** If this is turned on, the local host-list can be dynamically changed - * at runtime. */ -#ifndef DNS_LOCAL_HOSTLIST_IS_DYNAMIC -#define DNS_LOCAL_HOSTLIST_IS_DYNAMIC 0 -#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ - -/* - --------------------------------- - ---------- UDP options ---------- - --------------------------------- -*/ -/** - * LWIP_UDP==1: Turn on UDP. - */ -#ifndef LWIP_UDP -#define LWIP_UDP 1 -#endif - -/** - * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP) - */ -#ifndef LWIP_UDPLITE -#define LWIP_UDPLITE 0 -#endif - -/** - * UDP_TTL: Default Time-To-Live value. - */ -#ifndef UDP_TTL -#define UDP_TTL (IP_DEFAULT_TTL) -#endif - -/** - * LWIP_NETBUF_RECVINFO==1: append destination addr and port to every netbuf. - */ -#ifndef LWIP_NETBUF_RECVINFO -#define LWIP_NETBUF_RECVINFO 0 -#endif - -/* - --------------------------------- - ---------- TCP options ---------- - --------------------------------- -*/ -/** - * LWIP_TCP==1: Turn on TCP. - */ -#ifndef LWIP_TCP -#define LWIP_TCP 1 -#endif - -/** - * TCP_TTL: Default Time-To-Live value. - */ -#ifndef TCP_TTL -#define TCP_TTL (IP_DEFAULT_TTL) -#endif - -/** - * TCP_WND: The size of a TCP window. This must be at least - * (2 * TCP_MSS) for things to work well - */ -#ifndef TCP_WND -#define TCP_WND (4 * TCP_MSS) -#endif - -/** - * TCP_MAXRTX: Maximum number of retransmissions of data segments. - */ -#ifndef TCP_MAXRTX -#define TCP_MAXRTX 12 -#endif - -/** - * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments. - */ -#ifndef TCP_SYNMAXRTX -#define TCP_SYNMAXRTX 6 -#endif - -/** - * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order. - * Define to 0 if your device is low on memory. - */ -#ifndef TCP_QUEUE_OOSEQ -#define TCP_QUEUE_OOSEQ (LWIP_TCP) -#endif - -/** - * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default, - * you might want to increase this.) - * For the receive side, this MSS is advertised to the remote side - * when opening a connection. For the transmit size, this MSS sets - * an upper limit on the MSS advertised by the remote host. - */ -#ifndef TCP_MSS -#define TCP_MSS 536 -#endif - -/** - * TCP_CALCULATE_EFF_SEND_MSS: "The maximum size of a segment that TCP really - * sends, the 'effective send MSS,' MUST be the smaller of the send MSS (which - * reflects the available reassembly buffer size at the remote host) and the - * largest size permitted by the IP layer" (RFC 1122) - * Setting this to 1 enables code that checks TCP_MSS against the MTU of the - * netif used for a connection and limits the MSS if it would be too big otherwise. - */ -#ifndef TCP_CALCULATE_EFF_SEND_MSS -#define TCP_CALCULATE_EFF_SEND_MSS 1 -#endif - - -/** - * TCP_SND_BUF: TCP sender buffer space (bytes). - * To achieve good performance, this should be at least 2 * TCP_MSS. - */ -#ifndef TCP_SND_BUF -#define TCP_SND_BUF (2 * TCP_MSS) -#endif - -/** - * TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least - * as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. - */ -#ifndef TCP_SND_QUEUELEN -#define TCP_SND_QUEUELEN ((4 * (TCP_SND_BUF) + (TCP_MSS - 1))/(TCP_MSS)) -#endif - -/** - * TCP_SNDLOWAT: TCP writable space (bytes). This must be less than - * TCP_SND_BUF. It is the amount of space which must be available in the - * TCP snd_buf for select to return writable (combined with TCP_SNDQUEUELOWAT). - */ -#ifndef TCP_SNDLOWAT -#define TCP_SNDLOWAT LWIP_MIN(LWIP_MAX(((TCP_SND_BUF)/2), (2 * TCP_MSS) + 1), (TCP_SND_BUF) - 1) -#endif - -/** - * TCP_SNDQUEUELOWAT: TCP writable bufs (pbuf count). This must be less - * than TCP_SND_QUEUELEN. If the number of pbufs queued on a pcb drops below - * this number, select returns writable (combined with TCP_SNDLOWAT). - */ -#ifndef TCP_SNDQUEUELOWAT -#define TCP_SNDQUEUELOWAT LWIP_MAX(((TCP_SND_QUEUELEN)/2), 5) -#endif - -/** - * TCP_OOSEQ_MAX_BYTES: The maximum number of bytes queued on ooseq per pcb. - * Default is 0 (no limit). Only valid for TCP_QUEUE_OOSEQ==0. - */ -#ifndef TCP_OOSEQ_MAX_BYTES -#define TCP_OOSEQ_MAX_BYTES 0 -#endif - -/** - * TCP_OOSEQ_MAX_PBUFS: The maximum number of pbufs queued on ooseq per pcb. - * Default is 0 (no limit). Only valid for TCP_QUEUE_OOSEQ==0. - */ -#ifndef TCP_OOSEQ_MAX_PBUFS -#define TCP_OOSEQ_MAX_PBUFS 0 -#endif - -/** - * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb. - */ -#ifndef TCP_LISTEN_BACKLOG -#define TCP_LISTEN_BACKLOG 0 -#endif - -/** - * The maximum allowed backlog for TCP listen netconns. - * This backlog is used unless another is explicitly specified. - * 0xff is the maximum (uint8_t). - */ -#ifndef TCP_DEFAULT_LISTEN_BACKLOG -#define TCP_DEFAULT_LISTEN_BACKLOG 0xff -#endif - -/** - * TCP_OVERSIZE: The maximum number of bytes that tcp_write may - * allocate ahead of time in an attempt to create shorter pbuf chains - * for transmission. The meaningful range is 0 to TCP_MSS. Some - * suggested values are: - * - * 0: Disable oversized allocation. Each tcp_write() allocates a new - pbuf (old behaviour). - * 1: Allocate size-aligned pbufs with minimal excess. Use this if your - * scatter-gather DMA requires aligned fragments. - * 128: Limit the pbuf/memory overhead to 20%. - * TCP_MSS: Try to create unfragmented TCP packets. - * TCP_MSS/4: Try to create 4 fragments or less per TCP packet. - */ -#ifndef TCP_OVERSIZE -#define TCP_OVERSIZE TCP_MSS -#endif - -/** - * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option. - */ -#ifndef LWIP_TCP_TIMESTAMPS -#define LWIP_TCP_TIMESTAMPS 0 -#endif - -/** - * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an - * explicit window update - */ -#ifndef TCP_WND_UPDATE_THRESHOLD -#define TCP_WND_UPDATE_THRESHOLD (TCP_WND / 4) -#endif - -/** - * LWIP_EVENT_API and LWIP_CALLBACK_API: Only one of these should be set to 1. - * LWIP_EVENT_API==1: The user defines lwip_tcp_event() to receive all - * events (accept, sent, etc) that happen in the system. - * LWIP_CALLBACK_API==1: The PCB callback function is called directly - * for the event. This is the default. - */ -#if !defined(LWIP_EVENT_API) && !defined(LWIP_CALLBACK_API) -#define LWIP_EVENT_API 0 -#define LWIP_CALLBACK_API 1 -#endif - - -/* - ---------------------------------- - ---------- Pbuf options ---------- - ---------------------------------- -*/ -/** - * PBUF_LINK_HLEN: the number of bytes that should be allocated for a - * link level header. The default is 14, the standard value for - * Ethernet. - */ -#ifndef PBUF_LINK_HLEN -#define PBUF_LINK_HLEN (14 + ETH_PAD_SIZE) -#endif - -/** - * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is - * designed to accomodate single full size TCP frame in one pbuf, including - * TCP_MSS, IP header, and link header. - */ -#ifndef PBUF_POOL_BUFSIZE -#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN) -#endif - -/* - ------------------------------------------------ - ---------- Network Interfaces options ---------- - ------------------------------------------------ -*/ -/** - * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname - * field. - */ -#ifndef LWIP_NETIF_HOSTNAME -#define LWIP_NETIF_HOSTNAME 0 -#endif - -/** - * LWIP_NETIF_API==1: Support netif api (in netifapi.c) - */ -#ifndef LWIP_NETIF_API -#define LWIP_NETIF_API 0 -#endif - -/** - * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface - * changes its up/down status (i.e., due to DHCP IP acquistion) - */ -#ifndef LWIP_NETIF_STATUS_CALLBACK -#define LWIP_NETIF_STATUS_CALLBACK 0 -#endif - -/** - * LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface - * whenever the link changes (i.e., link down) - */ -#ifndef LWIP_NETIF_LINK_CALLBACK -#define LWIP_NETIF_LINK_CALLBACK 0 -#endif - -/** - * LWIP_NETIF_REMOVE_CALLBACK==1: Support a callback function that is called - * when a netif has been removed - */ -#ifndef LWIP_NETIF_REMOVE_CALLBACK -#define LWIP_NETIF_REMOVE_CALLBACK 0 -#endif - -/** - * LWIP_NETIF_HWADDRHINT==1: Cache link-layer-address hints (e.g. table - * indices) in struct netif. TCP and UDP can make use of this to prevent - * scanning the ARP table for every sent packet. While this is faster for big - * ARP tables or many concurrent connections, it might be counterproductive - * if you have a tiny ARP table or if there never are concurrent connections. - */ -#ifndef LWIP_NETIF_HWADDRHINT -#define LWIP_NETIF_HWADDRHINT 0 -#endif - -/** - * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP - * address equal to the netif IP address, looping them back up the stack. - */ -#ifndef LWIP_NETIF_LOOPBACK -#define LWIP_NETIF_LOOPBACK 0 -#endif - -/** - * LWIP_LOOPBACK_MAX_PBUFS: Maximum number of pbufs on queue for loopback - * sending for each netif (0 = disabled) - */ -#ifndef LWIP_LOOPBACK_MAX_PBUFS -#define LWIP_LOOPBACK_MAX_PBUFS 0 -#endif - -/** - * LWIP_NETIF_LOOPBACK_MULTITHREADING: Indicates whether threading is enabled in - * the system, as netifs must change how they behave depending on this setting - * for the LWIP_NETIF_LOOPBACK option to work. - * Setting this is needed to avoid reentering non-reentrant functions like - * tcp_input(). - * LWIP_NETIF_LOOPBACK_MULTITHREADING==1: Indicates that the user is using a - * multithreaded environment like tcpip.c. In this case, netif->input() - * is called directly. - * LWIP_NETIF_LOOPBACK_MULTITHREADING==0: Indicates a polling (or NO_SYS) setup. - * The packets are put on a list and netif_poll() must be called in - * the main application loop. - */ -#ifndef LWIP_NETIF_LOOPBACK_MULTITHREADING -#define LWIP_NETIF_LOOPBACK_MULTITHREADING (!NO_SYS) -#endif - -/** - * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data - * to be sent into one single pbuf. This is for compatibility with DMA-enabled - * MACs that do not support scatter-gather. - * Beware that this might involve CPU-memcpy before transmitting that would not - * be needed without this flag! Use this only if you need to! - * - * @todo: TCP and IP-frag do not work with this, yet: - */ -#ifndef LWIP_NETIF_TX_SINGLE_PBUF -#define LWIP_NETIF_TX_SINGLE_PBUF 0 -#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ - -/* - ------------------------------------ - ---------- LOOPIF options ---------- - ------------------------------------ -*/ -/** - * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c - */ -#ifndef LWIP_HAVE_LOOPIF -#define LWIP_HAVE_LOOPIF 0 -#endif - -/* - ------------------------------------ - ---------- SLIPIF options ---------- - ------------------------------------ -*/ -/** - * LWIP_HAVE_SLIPIF==1: Support slip interface and slipif.c - */ -#ifndef LWIP_HAVE_SLIPIF -#define LWIP_HAVE_SLIPIF 0 -#endif - -/* - ------------------------------------ - ---------- Thread options ---------- - ------------------------------------ -*/ -/** - * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread. - */ -#ifndef TCPIP_THREAD_NAME -#define TCPIP_THREAD_NAME "TCP_IP" //Realtek modified ("tcpip_thread"->"TCP_IP") -#endif - -/** - * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread. - * The stack size value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef TCPIP_THREAD_STACKSIZE -#define TCPIP_THREAD_STACKSIZE 0 -#endif - -/** - * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread. - * The priority value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef TCPIP_THREAD_PRIO -#define TCPIP_THREAD_PRIO 1 -#endif - -/** - * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages - * The queue size value itself is platform-dependent, but is passed to - * sys_mbox_new() when tcpip_init is called. - */ -#ifndef TCPIP_MBOX_SIZE -#define TCPIP_MBOX_SIZE 0 -#endif - -/** - * SLIPIF_THREAD_NAME: The name assigned to the slipif_loop thread. - */ -#ifndef SLIPIF_THREAD_NAME -#define SLIPIF_THREAD_NAME "slipif_loop" -#endif - -/** - * SLIP_THREAD_STACKSIZE: The stack size used by the slipif_loop thread. - * The stack size value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef SLIPIF_THREAD_STACKSIZE -#define SLIPIF_THREAD_STACKSIZE 0 -#endif - -/** - * SLIPIF_THREAD_PRIO: The priority assigned to the slipif_loop thread. - * The priority value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef SLIPIF_THREAD_PRIO -#define SLIPIF_THREAD_PRIO 1 -#endif - -/** - * PPP_THREAD_NAME: The name assigned to the pppInputThread. - */ -#ifndef PPP_THREAD_NAME -#define PPP_THREAD_NAME "pppInputThread" -#endif - -/** - * PPP_THREAD_STACKSIZE: The stack size used by the pppInputThread. - * The stack size value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef PPP_THREAD_STACKSIZE -#define PPP_THREAD_STACKSIZE 0 -#endif - -/** - * PPP_THREAD_PRIO: The priority assigned to the pppInputThread. - * The priority value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef PPP_THREAD_PRIO -#define PPP_THREAD_PRIO 1 -#endif - -/** - * DEFAULT_THREAD_NAME: The name assigned to any other lwIP thread. - */ -#ifndef DEFAULT_THREAD_NAME -#define DEFAULT_THREAD_NAME "lwIP" -#endif - -/** - * DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread. - * The stack size value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef DEFAULT_THREAD_STACKSIZE -#define DEFAULT_THREAD_STACKSIZE 0 -#endif - -/** - * DEFAULT_THREAD_PRIO: The priority assigned to any other lwIP thread. - * The priority value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef DEFAULT_THREAD_PRIO -#define DEFAULT_THREAD_PRIO 1 -#endif - -/** - * DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a - * NETCONN_RAW. The queue size value itself is platform-dependent, but is passed - * to sys_mbox_new() when the recvmbox is created. - */ -#ifndef DEFAULT_RAW_RECVMBOX_SIZE -#define DEFAULT_RAW_RECVMBOX_SIZE 0 -#endif - -/** - * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a - * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed - * to sys_mbox_new() when the recvmbox is created. - */ -#ifndef DEFAULT_UDP_RECVMBOX_SIZE -#define DEFAULT_UDP_RECVMBOX_SIZE 0 -#endif - -/** - * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a - * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed - * to sys_mbox_new() when the recvmbox is created. - */ -#ifndef DEFAULT_TCP_RECVMBOX_SIZE -#define DEFAULT_TCP_RECVMBOX_SIZE 0 -#endif - -/** - * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections. - * The queue size value itself is platform-dependent, but is passed to - * sys_mbox_new() when the acceptmbox is created. - */ -#ifndef DEFAULT_ACCEPTMBOX_SIZE -#define DEFAULT_ACCEPTMBOX_SIZE 0 -#endif - -/* - ---------------------------------------------- - ---------- Sequential layer options ---------- - ---------------------------------------------- -*/ -/** - * LWIP_TCPIP_CORE_LOCKING: (EXPERIMENTAL!) - * Don't use it if you're not an active lwIP project member - */ -#ifndef LWIP_TCPIP_CORE_LOCKING -#define LWIP_TCPIP_CORE_LOCKING 0 -#endif - -/** - * LWIP_TCPIP_CORE_LOCKING_INPUT: (EXPERIMENTAL!) - * Don't use it if you're not an active lwIP project member - */ -#ifndef LWIP_TCPIP_CORE_LOCKING_INPUT -#define LWIP_TCPIP_CORE_LOCKING_INPUT 0 -#endif - -/** - * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) - */ -#ifndef LWIP_NETCONN -#define LWIP_NETCONN 1 -#endif - -/** LWIP_TCPIP_TIMEOUT==1: Enable tcpip_timeout/tcpip_untimeout tod create - * timers running in tcpip_thread from another thread. - */ -#ifndef LWIP_TCPIP_TIMEOUT -#define LWIP_TCPIP_TIMEOUT 1 -#endif - -/* - ------------------------------------ - ---------- Socket options ---------- - ------------------------------------ -*/ -/** - * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c) - */ -#ifndef LWIP_SOCKET -#define LWIP_SOCKET 1 -#endif - -/** - * LWIP_COMPAT_SOCKETS==1: Enable BSD-style sockets functions names. - * (only used if you use sockets.c) - */ -#ifndef LWIP_COMPAT_SOCKETS -#define LWIP_COMPAT_SOCKETS 1 -#endif - -/** - * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names. - * Disable this option if you use a POSIX operating system that uses the same - * names (read, write & close). (only used if you use sockets.c) - */ -#ifndef LWIP_POSIX_SOCKETS_IO_NAMES -#define LWIP_POSIX_SOCKETS_IO_NAMES 1 -#endif - -/** - * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT - * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set - * in seconds. (does not require sockets.c, and will affect tcp.c) - */ -#ifndef LWIP_TCP_KEEPALIVE -#define LWIP_TCP_KEEPALIVE 0 -#endif - -/** - * LWIP_SO_SNDTIMEO==1: Enable send timeout for sockets/netconns and - * SO_SNDTIMEO processing. - */ -#ifndef LWIP_SO_SNDTIMEO -#define LWIP_SO_SNDTIMEO 0 -#endif - -/** - * LWIP_SO_RCVTIMEO==1: Enable receive timeout for sockets/netconns and - * SO_RCVTIMEO processing. - */ -#ifndef LWIP_SO_RCVTIMEO -#define LWIP_SO_RCVTIMEO 1 //Realtek modified(0->1) -#endif - -/** - * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. - */ -#ifndef LWIP_SO_RCVBUF -#define LWIP_SO_RCVBUF 0 -#endif - -/** - * If LWIP_SO_RCVBUF is used, this is the default value for recv_bufsize. - */ -#ifndef RECV_BUFSIZE_DEFAULT -#define RECV_BUFSIZE_DEFAULT INT_MAX -#endif - -/** - * SO_REUSE==1: Enable SO_REUSEADDR option. - */ -#ifndef SO_REUSE -#define SO_REUSE 1 -#endif - -/** - * SO_REUSE_RXTOALL==1: Pass a copy of incoming broadcast/multicast packets - * to all local matches if SO_REUSEADDR is turned on. - * WARNING: Adds a memcpy for every packet if passing to more than one pcb! - */ -#ifndef SO_REUSE_RXTOALL -#define SO_REUSE_RXTOALL 0 -#endif - -/* - ---------------------------------------- - ---------- Statistics options ---------- - ---------------------------------------- -*/ -/** - * LWIP_STATS==1: Enable statistics collection in lwip_stats. - */ -#ifndef LWIP_STATS -#define LWIP_STATS 1 -#endif - -#if LWIP_STATS - -/** - * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions. - */ -#ifndef LWIP_STATS_DISPLAY -#define LWIP_STATS_DISPLAY 0 -#endif - -/** - * LINK_STATS==1: Enable link stats. - */ -#ifndef LINK_STATS -#define LINK_STATS 1 -#endif - -/** - * ETHARP_STATS==1: Enable etharp stats. - */ -#ifndef ETHARP_STATS -#define ETHARP_STATS (LWIP_ARP) -#endif - -/** - * IP_STATS==1: Enable IP stats. - */ -#ifndef IP_STATS -#define IP_STATS 1 -#endif - -/** - * IPFRAG_STATS==1: Enable IP fragmentation stats. Default is - * on if using either frag or reass. - */ -#ifndef IPFRAG_STATS -#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG) -#endif - -/** - * ICMP_STATS==1: Enable ICMP stats. - */ -#ifndef ICMP_STATS -#define ICMP_STATS 1 -#endif - -/** - * IGMP_STATS==1: Enable IGMP stats. - */ -#ifndef IGMP_STATS -#define IGMP_STATS (LWIP_IGMP) -#endif - -/** - * UDP_STATS==1: Enable UDP stats. Default is on if - * UDP enabled, otherwise off. - */ -#ifndef UDP_STATS -#define UDP_STATS (LWIP_UDP) -#endif - -/** - * TCP_STATS==1: Enable TCP stats. Default is on if TCP - * enabled, otherwise off. - */ -#ifndef TCP_STATS -#define TCP_STATS (LWIP_TCP) -#endif - -/** - * MEM_STATS==1: Enable mem.c stats. - */ -#ifndef MEM_STATS -#define MEM_STATS ((MEM_LIBC_MALLOC == 0) && (MEM_USE_POOLS == 0)) -#endif - -/** - * MEMP_STATS==1: Enable memp.c pool stats. - */ -#ifndef MEMP_STATS -#define MEMP_STATS (MEMP_MEM_MALLOC == 0) -#endif - -/** - * SYS_STATS==1: Enable system stats (sem and mbox counts, etc). - */ -#ifndef SYS_STATS -#define SYS_STATS (NO_SYS == 0) -#endif - -#else - -#define LINK_STATS 0 -#define IP_STATS 0 -#define IPFRAG_STATS 0 -#define ICMP_STATS 0 -#define IGMP_STATS 0 -#define UDP_STATS 0 -#define TCP_STATS 0 -#define MEM_STATS 0 -#define MEMP_STATS 0 -#define SYS_STATS 0 -#define LWIP_STATS_DISPLAY 0 -#define ETHARP_STATS 0 //Realtek add - -#endif /* LWIP_STATS */ - -/* - --------------------------------- - ---------- PPP options ---------- - --------------------------------- -*/ -/** - * PPP_SUPPORT==1: Enable PPP. - */ -#ifndef PPP_SUPPORT -#define PPP_SUPPORT 0 -#endif - -/** - * PPPOE_SUPPORT==1: Enable PPP Over Ethernet - */ -#ifndef PPPOE_SUPPORT -#define PPPOE_SUPPORT 0 -#endif - -/** - * PPPOS_SUPPORT==1: Enable PPP Over Serial - */ -#ifndef PPPOS_SUPPORT -#define PPPOS_SUPPORT PPP_SUPPORT -#endif - -#if PPP_SUPPORT - -/** - * NUM_PPP: Max PPP sessions. - */ -#ifndef NUM_PPP -#define NUM_PPP 1 -#endif - -/** - * PAP_SUPPORT==1: Support PAP. - */ -#ifndef PAP_SUPPORT -#define PAP_SUPPORT 0 -#endif - -/** - * CHAP_SUPPORT==1: Support CHAP. - */ -#ifndef CHAP_SUPPORT -#define CHAP_SUPPORT 0 -#endif - -/** - * MSCHAP_SUPPORT==1: Support MSCHAP. CURRENTLY NOT SUPPORTED! DO NOT SET! - */ -#ifndef MSCHAP_SUPPORT -#define MSCHAP_SUPPORT 0 -#endif - -/** - * CBCP_SUPPORT==1: Support CBCP. CURRENTLY NOT SUPPORTED! DO NOT SET! - */ -#ifndef CBCP_SUPPORT -#define CBCP_SUPPORT 0 -#endif - -/** - * CCP_SUPPORT==1: Support CCP. CURRENTLY NOT SUPPORTED! DO NOT SET! - */ -#ifndef CCP_SUPPORT -#define CCP_SUPPORT 0 -#endif - -/** - * VJ_SUPPORT==1: Support VJ header compression. - */ -#ifndef VJ_SUPPORT -#define VJ_SUPPORT 0 -#endif - -/** - * MD5_SUPPORT==1: Support MD5 (see also CHAP). - */ -#ifndef MD5_SUPPORT -#define MD5_SUPPORT 0 -#endif - -/* - * Timeouts - */ -#ifndef FSM_DEFTIMEOUT -#define FSM_DEFTIMEOUT 6 /* Timeout time in seconds */ -#endif - -#ifndef FSM_DEFMAXTERMREQS -#define FSM_DEFMAXTERMREQS 2 /* Maximum Terminate-Request transmissions */ -#endif - -#ifndef FSM_DEFMAXCONFREQS -#define FSM_DEFMAXCONFREQS 10 /* Maximum Configure-Request transmissions */ -#endif - -#ifndef FSM_DEFMAXNAKLOOPS -#define FSM_DEFMAXNAKLOOPS 5 /* Maximum number of nak loops */ -#endif - -#ifndef UPAP_DEFTIMEOUT -#define UPAP_DEFTIMEOUT 6 /* Timeout (seconds) for retransmitting req */ -#endif - -#ifndef UPAP_DEFREQTIME -#define UPAP_DEFREQTIME 30 /* Time to wait for auth-req from peer */ -#endif - -#ifndef CHAP_DEFTIMEOUT -#define CHAP_DEFTIMEOUT 6 /* Timeout time in seconds */ -#endif - -#ifndef CHAP_DEFTRANSMITS -#define CHAP_DEFTRANSMITS 10 /* max # times to send challenge */ -#endif - -/* Interval in seconds between keepalive echo requests, 0 to disable. */ -#ifndef LCP_ECHOINTERVAL -#define LCP_ECHOINTERVAL 0 -#endif - -/* Number of unanswered echo requests before failure. */ -#ifndef LCP_MAXECHOFAILS -#define LCP_MAXECHOFAILS 3 -#endif - -/* Max Xmit idle time (in jiffies) before resend flag char. */ -#ifndef PPP_MAXIDLEFLAG -#define PPP_MAXIDLEFLAG 100 -#endif - -/* - * Packet sizes - * - * Note - lcp shouldn't be allowed to negotiate stuff outside these - * limits. See lcp.h in the pppd directory. - * (XXX - these constants should simply be shared by lcp.c instead - * of living in lcp.h) - */ -#define PPP_MTU 1500 /* Default MTU (size of Info field) */ -#ifndef PPP_MAXMTU -/* #define PPP_MAXMTU 65535 - (PPP_HDRLEN + PPP_FCSLEN) */ -#define PPP_MAXMTU 1500 /* Largest MTU we allow */ -#endif -#define PPP_MINMTU 64 -#define PPP_MRU 1500 /* default MRU = max length of info field */ -#define PPP_MAXMRU 1500 /* Largest MRU we allow */ -#ifndef PPP_DEFMRU -#define PPP_DEFMRU 296 /* Try for this */ -#endif -#define PPP_MINMRU 128 /* No MRUs below this */ - -#ifndef MAXNAMELEN -#define MAXNAMELEN 256 /* max length of hostname or name for auth */ -#endif -#ifndef MAXSECRETLEN -#define MAXSECRETLEN 256 /* max length of password or secret */ -#endif - -#endif /* PPP_SUPPORT */ - -/* - -------------------------------------- - ---------- Checksum options ---------- - -------------------------------------- -*/ -/** - * CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets. - */ -#ifndef CHECKSUM_GEN_IP -#define CHECKSUM_GEN_IP 1 -#endif - -/** - * CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets. - */ -#ifndef CHECKSUM_GEN_UDP -#define CHECKSUM_GEN_UDP 1 -#endif - -/** - * CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets. - */ -#ifndef CHECKSUM_GEN_TCP -#define CHECKSUM_GEN_TCP 1 -#endif - -/** - * CHECKSUM_GEN_ICMP==1: Generate checksums in software for outgoing ICMP packets. - */ -#ifndef CHECKSUM_GEN_ICMP -#define CHECKSUM_GEN_ICMP 1 -#endif - -/** - * CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets. - */ -#ifndef CHECKSUM_CHECK_IP -#define CHECKSUM_CHECK_IP 1 -#endif - -/** - * CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets. - */ -#ifndef CHECKSUM_CHECK_UDP -#define CHECKSUM_CHECK_UDP 1 -#endif - -/** - * CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets. - */ -#ifndef CHECKSUM_CHECK_TCP -#define CHECKSUM_CHECK_TCP 1 -#endif - -/** - * LWIP_CHECKSUM_ON_COPY==1: Calculate checksum when copying data from - * application buffers to pbufs. - */ -#ifndef LWIP_CHECKSUM_ON_COPY -#define LWIP_CHECKSUM_ON_COPY 0 -#endif - -/* - --------------------------------------- - ---------- Hook options --------------- - --------------------------------------- -*/ - -/* Hooks are undefined by default, define them to a function if you need them. */ - -/** - * LWIP_HOOK_IP4_INPUT(pbuf, input_netif): - * - called from ip_input() (IPv4) - * - pbuf: received struct pbuf passed to ip_input() - * - input_netif: struct netif on which the packet has been received - * Return values: - * - 0: Hook has not consumed the packet, packet is processed as normal - * - != 0: Hook has consumed the packet. - * If the hook consumed the packet, 'pbuf' is in the responsibility of the hook - * (i.e. free it when done). - */ - -/** - * LWIP_HOOK_IP4_ROUTE(dest): - * - called from ip_route() (IPv4) - * - dest: destination IPv4 address - * Returns the destination netif or NULL if no destination netif is found. In - * that case, ip_route() continues as normal. - */ - -/* - --------------------------------------- - ---------- Debugging options ---------- - --------------------------------------- -*/ -/** - * LWIP_DBG_MIN_LEVEL: After masking, the value of the debug is - * compared against this value. If it is smaller, then debugging - * messages are written. - */ -#ifndef LWIP_DBG_MIN_LEVEL -#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_ALL -#endif - -/** - * LWIP_DBG_TYPES_ON: A mask that can be used to globally enable/disable - * debug messages of certain types. - */ -#ifndef LWIP_DBG_TYPES_ON -#define LWIP_DBG_TYPES_ON LWIP_DBG_ON -#endif - -/** - * ETHARP_DEBUG: Enable debugging in etharp.c. - */ -#ifndef ETHARP_DEBUG -#define ETHARP_DEBUG LWIP_DBG_OFF -#endif - -/** - * NETIF_DEBUG: Enable debugging in netif.c. - */ -#ifndef NETIF_DEBUG -#define NETIF_DEBUG LWIP_DBG_OFF -#endif - -/** - * PBUF_DEBUG: Enable debugging in pbuf.c. - */ -#ifndef PBUF_DEBUG -#define PBUF_DEBUG LWIP_DBG_OFF -#endif - -/** - * API_LIB_DEBUG: Enable debugging in api_lib.c. - */ -#ifndef API_LIB_DEBUG -#define API_LIB_DEBUG LWIP_DBG_OFF -#endif - -/** - * API_MSG_DEBUG: Enable debugging in api_msg.c. - */ -#ifndef API_MSG_DEBUG -#define API_MSG_DEBUG LWIP_DBG_OFF -#endif - -/** - * SOCKETS_DEBUG: Enable debugging in sockets.c. - */ -#ifndef SOCKETS_DEBUG -#define SOCKETS_DEBUG LWIP_DBG_OFF -#endif - -/** - * ICMP_DEBUG: Enable debugging in icmp.c. - */ -#ifndef ICMP_DEBUG -#define ICMP_DEBUG LWIP_DBG_OFF -#endif - -/** - * IGMP_DEBUG: Enable debugging in igmp.c. - */ -#ifndef IGMP_DEBUG -#define IGMP_DEBUG LWIP_DBG_OFF -#endif - -/** - * INET_DEBUG: Enable debugging in inet.c. - */ -#ifndef INET_DEBUG -#define INET_DEBUG LWIP_DBG_OFF -#endif - -/** - * IP_DEBUG: Enable debugging for IP. - */ -#ifndef IP_DEBUG -#define IP_DEBUG LWIP_DBG_OFF -#endif - -/** - * IP_REASS_DEBUG: Enable debugging in ip_frag.c for both frag & reass. - */ -#ifndef IP_REASS_DEBUG -#define IP_REASS_DEBUG LWIP_DBG_OFF -#endif - -/** - * RAW_DEBUG: Enable debugging in raw.c. - */ -#ifndef RAW_DEBUG -#define RAW_DEBUG LWIP_DBG_OFF -#endif - -/** - * MEM_DEBUG: Enable debugging in mem.c. - */ -#ifndef MEM_DEBUG -#define MEM_DEBUG LWIP_DBG_OFF -#endif - -/** - * MEMP_DEBUG: Enable debugging in memp.c. - */ -#ifndef MEMP_DEBUG -#define MEMP_DEBUG LWIP_DBG_OFF -#endif - -/** - * SYS_DEBUG: Enable debugging in sys.c. - */ -#ifndef SYS_DEBUG -#define SYS_DEBUG LWIP_DBG_OFF -#endif - -/** - * TIMERS_DEBUG: Enable debugging in timers.c. - */ -#ifndef TIMERS_DEBUG -#define TIMERS_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_DEBUG: Enable debugging for TCP. - */ -#ifndef TCP_DEBUG -#define TCP_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug. - */ -#ifndef TCP_INPUT_DEBUG -#define TCP_INPUT_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_FR_DEBUG: Enable debugging in tcp_in.c for fast retransmit. - */ -#ifndef TCP_FR_DEBUG -#define TCP_FR_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_RTO_DEBUG: Enable debugging in TCP for retransmit - * timeout. - */ -#ifndef TCP_RTO_DEBUG -#define TCP_RTO_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_CWND_DEBUG: Enable debugging for TCP congestion window. - */ -#ifndef TCP_CWND_DEBUG -#define TCP_CWND_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_WND_DEBUG: Enable debugging in tcp_in.c for window updating. - */ -#ifndef TCP_WND_DEBUG -#define TCP_WND_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions. - */ -#ifndef TCP_OUTPUT_DEBUG -#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_RST_DEBUG: Enable debugging for TCP with the RST message. - */ -#ifndef TCP_RST_DEBUG -#define TCP_RST_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCP_QLEN_DEBUG: Enable debugging for TCP queue lengths. - */ -#ifndef TCP_QLEN_DEBUG -#define TCP_QLEN_DEBUG LWIP_DBG_OFF -#endif - -/** - * UDP_DEBUG: Enable debugging in UDP. - */ -#ifndef UDP_DEBUG -#define UDP_DEBUG LWIP_DBG_OFF -#endif - -/** - * TCPIP_DEBUG: Enable debugging in tcpip.c. - */ -#ifndef TCPIP_DEBUG -#define TCPIP_DEBUG LWIP_DBG_OFF -#endif - -/** - * PPP_DEBUG: Enable debugging for PPP. - */ -#ifndef PPP_DEBUG -#define PPP_DEBUG LWIP_DBG_OFF -#endif - -/** - * SLIP_DEBUG: Enable debugging in slipif.c. - */ -#ifndef SLIP_DEBUG -#define SLIP_DEBUG LWIP_DBG_OFF -#endif - -/** - * DHCP_DEBUG: Enable debugging in dhcp.c. - */ -#ifndef DHCP_DEBUG -#define DHCP_DEBUG LWIP_DBG_OFF -#endif - -/** - * AUTOIP_DEBUG: Enable debugging in autoip.c. - */ -#ifndef AUTOIP_DEBUG -#define AUTOIP_DEBUG LWIP_DBG_OFF -#endif - -/** - * SNMP_MSG_DEBUG: Enable debugging for SNMP messages. - */ -#ifndef SNMP_MSG_DEBUG -#define SNMP_MSG_DEBUG LWIP_DBG_OFF -#endif - -/** - * SNMP_MIB_DEBUG: Enable debugging for SNMP MIBs. - */ -#ifndef SNMP_MIB_DEBUG -#define SNMP_MIB_DEBUG LWIP_DBG_OFF -#endif - -/** - * DNS_DEBUG: Enable debugging for DNS. - */ -#ifndef DNS_DEBUG -#define DNS_DEBUG LWIP_DBG_OFF -#endif - -#endif /* __LWIP_OPT_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/pbuf.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/pbuf.h deleted file mode 100644 index 64db6fd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/pbuf.h +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#ifndef __LWIP_PBUF_H__ -#define __LWIP_PBUF_H__ - -#include "lwip/opt.h" -#include "lwip/err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** Currently, the pbuf_custom code is only needed for one specific configuration - * of IP_FRAG */ -#define LWIP_SUPPORT_CUSTOM_PBUF (IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF) - -#define PBUF_TRANSPORT_HLEN 20 -#define PBUF_IP_HLEN 20 - -typedef enum { - PBUF_TRANSPORT, - PBUF_IP, - PBUF_LINK, - PBUF_RAW -} pbuf_layer; - -typedef enum { - PBUF_RAM, /* pbuf data is stored in RAM */ - PBUF_ROM, /* pbuf data is stored in ROM */ - PBUF_REF, /* pbuf comes from the pbuf pool */ - PBUF_POOL /* pbuf payload refers to RAM */ -} pbuf_type; - - -/** indicates this packet's data should be immediately passed to the application */ -#define PBUF_FLAG_PUSH 0x01U -/** indicates this is a custom pbuf: pbuf_free and pbuf_header handle such a - a pbuf differently */ -#define PBUF_FLAG_IS_CUSTOM 0x02U -/** indicates this pbuf is UDP multicast to be looped back */ -#define PBUF_FLAG_MCASTLOOP 0x04U -/** indicates this pbuf was received as link-level broadcast */ -#define PBUF_FLAG_LLBCAST 0x08U -/** indicates this pbuf was received as link-level multicast */ -#define PBUF_FLAG_LLMCAST 0x10U -/** indicates this pbuf includes a TCP FIN flag */ -#define PBUF_FLAG_TCP_FIN 0x20U - -struct pbuf { - /** next pbuf in singly linked pbuf chain */ - struct pbuf *next; - - /** pointer to the actual data in the buffer */ - void *payload; - - /** - * total length of this buffer and all next buffers in chain - * belonging to the same packet. - * - * For non-queue packet chains this is the invariant: - * p->tot_len == p->len + (p->next? p->next->tot_len: 0) - */ - uint16_t tot_len; - - /** length of this buffer */ - uint16_t len; - - /** pbuf_type as uint8_t instead of enum to save space */ - uint8_t /*pbuf_type*/ type; - - /** misc flags */ - uint8_t flags; - - /** - * the reference count always equals the number of pointers - * that refer to this pbuf. This can be pointers from an application, - * the stack itself, or pbuf->next pointers from a chain. - */ - uint16_t ref; -}; - -#if LWIP_SUPPORT_CUSTOM_PBUF -/** Prototype for a function to free a custom pbuf */ -typedef void (*pbuf_free_custom_fn)(struct pbuf *p); - -/** A custom pbuf: like a pbuf, but following a function pointer to free it. */ -struct pbuf_custom { - /** The actual pbuf */ - struct pbuf pbuf; - /** This function is called when pbuf_free deallocates this pbuf(_custom) */ - pbuf_free_custom_fn custom_free_function; -}; -#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ - -#if LWIP_TCP && TCP_QUEUE_OOSEQ -/** Define this to 0 to prevent freeing ooseq pbufs when the PBUF_POOL is empty */ -#ifndef PBUF_POOL_FREE_OOSEQ -#define PBUF_POOL_FREE_OOSEQ 1 -#endif /* PBUF_POOL_FREE_OOSEQ */ -#if NO_SYS && PBUF_POOL_FREE_OOSEQ -extern volatile uint8_t pbuf_free_ooseq_pending; -void pbuf_free_ooseq(); -/** When not using sys_check_timeouts(), call PBUF_CHECK_FREE_OOSEQ() - at regular intervals from main level to check if ooseq pbufs need to be - freed! */ -#define PBUF_CHECK_FREE_OOSEQ() do { if(pbuf_free_ooseq_pending) { \ - /* pbuf_alloc() reported PBUF_POOL to be empty -> try to free some \ - ooseq queued pbufs now */ \ - pbuf_free_ooseq(); }}while(0) -#endif /* NO_SYS && PBUF_POOL_FREE_OOSEQ*/ -#endif /* LWIP_TCP && TCP_QUEUE_OOSEQ */ - -/* Initializes the pbuf module. This call is empty for now, but may not be in future. */ -#define pbuf_init() - -struct pbuf *pbuf_alloc(pbuf_layer l, uint16_t length, pbuf_type type); -#if LWIP_SUPPORT_CUSTOM_PBUF -struct pbuf *pbuf_alloced_custom(pbuf_layer l, uint16_t length, pbuf_type type, - struct pbuf_custom *p, void *payload_mem, - uint16_t payload_mem_len); -#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ -void pbuf_realloc(struct pbuf *p, uint16_t size); -uint8_t pbuf_header(struct pbuf *p, int16_t header_size); -void pbuf_ref(struct pbuf *p); -uint8_t pbuf_free(struct pbuf *p); -uint8_t pbuf_clen(struct pbuf *p); -void pbuf_cat(struct pbuf *head, struct pbuf *tail); -void pbuf_chain(struct pbuf *head, struct pbuf *tail); -struct pbuf *pbuf_dechain(struct pbuf *p); -err_t pbuf_copy(struct pbuf *p_to, struct pbuf *p_from); -uint16_t pbuf_copy_partial(struct pbuf *p, void *dataptr, uint16_t len, uint16_t offset); -err_t pbuf_take(struct pbuf *buf, const void *dataptr, uint16_t len); -struct pbuf *pbuf_coalesce(struct pbuf *p, pbuf_layer layer); -#if LWIP_CHECKSUM_ON_COPY -err_t pbuf_fill_chksum(struct pbuf *p, uint16_t start_offset, const void *dataptr, - uint16_t len, uint16_t *chksum); -#endif /* LWIP_CHECKSUM_ON_COPY */ - -uint8_t pbuf_get_at(struct pbuf* p, uint16_t offset); -uint16_t pbuf_memcmp(struct pbuf* p, uint16_t offset, const void* s2, uint16_t n); -uint16_t pbuf_memfind(struct pbuf* p, const void* mem, uint16_t mem_len, uint16_t start_offset); -uint16_t pbuf_strstr(struct pbuf* p, const char* substr); - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_PBUF_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/raw.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/raw.h deleted file mode 100644 index 9d44718..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/raw.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_RAW_H__ -#define __LWIP_RAW_H__ - -#include "lwip/opt.h" - -#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/pbuf.h" -#include "lwip/def.h" -#include "lwip/ip.h" -#include "lwip/ip_addr.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct raw_pcb; - -/** Function prototype for raw pcb receive callback functions. - * @param arg user supplied argument (raw_pcb.recv_arg) - * @param pcb the raw_pcb which received data - * @param p the packet buffer that was received - * @param addr the remote IP address from which the packet was received - * @return 1 if the packet was 'eaten' (aka. deleted), - * 0 if the packet lives on - * If returning 1, the callback is responsible for freeing the pbuf - * if it's not used any more. - */ -typedef uint8_t (*raw_recv_fn)(void *arg, struct raw_pcb *pcb, struct pbuf *p, - ip_addr_t *addr); - -struct raw_pcb { - /* Common members of all PCB types */ - IP_PCB; - - struct raw_pcb *next; - - uint8_t protocol; - - /** receive callback function */ - raw_recv_fn recv; - /* user-supplied argument for the recv callback */ - void *recv_arg; -}; - -/* The following functions is the application layer interface to the - RAW code. */ -struct raw_pcb * raw_new (uint8_t proto); -void raw_remove (struct raw_pcb *pcb); -err_t raw_bind (struct raw_pcb *pcb, ip_addr_t *ipaddr); -err_t raw_connect (struct raw_pcb *pcb, ip_addr_t *ipaddr); - -void raw_recv (struct raw_pcb *pcb, raw_recv_fn recv, void *recv_arg); -err_t raw_sendto (struct raw_pcb *pcb, struct pbuf *p, ip_addr_t *ipaddr); -err_t raw_send (struct raw_pcb *pcb, struct pbuf *p); - -/* The following functions are the lower layer interface to RAW. */ -uint8_t raw_input (struct pbuf *p, struct netif *inp); -#define raw_init() /* Compatibility define, not init needed. */ - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_RAW */ - -#endif /* __LWIP_RAW_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/sio.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/sio.h deleted file mode 100644 index 20d0c31..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/sio.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - */ - -/* - * This is the interface to the platform specific serial IO module - * It needs to be implemented by those platforms which need SLIP or PPP - */ - -#ifndef __SIO_H__ -#define __SIO_H__ - -#include "lwip/arch.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* If you want to define sio_fd_t elsewhere or differently, - define this in your cc.h file. */ -#ifndef __sio_fd_t_defined -typedef void * sio_fd_t; -#endif - -/* The following functions can be defined to something else in your cc.h file - or be implemented in your custom sio.c file. */ - -#ifndef sio_open -/** - * Opens a serial device for communication. - * - * @param devnum device number - * @return handle to serial device if successful, NULL otherwise - */ -sio_fd_t sio_open(uint8_t devnum); -#endif - -#ifndef sio_send -/** - * Sends a single character to the serial device. - * - * @param c character to send - * @param fd serial device handle - * - * @note This function will block until the character can be sent. - */ -void sio_send(uint8_t c, sio_fd_t fd); -#endif - -#ifndef sio_recv -/** - * Receives a single character from the serial device. - * - * @param fd serial device handle - * - * @note This function will block until a character is received. - */ -uint8_t sio_recv(sio_fd_t fd); -#endif - -#ifndef sio_read -/** - * Reads from the serial device. - * - * @param fd serial device handle - * @param data pointer to data buffer for receiving - * @param len maximum length (in bytes) of data to receive - * @return number of bytes actually received - may be 0 if aborted by sio_read_abort - * - * @note This function will block until data can be received. The blocking - * can be cancelled by calling sio_read_abort(). - */ -uint32_t sio_read(sio_fd_t fd, uint8_t *data, uint32_t len); -#endif - -#ifndef sio_tryread -/** - * Tries to read from the serial device. Same as sio_read but returns - * immediately if no data is available and never blocks. - * - * @param fd serial device handle - * @param data pointer to data buffer for receiving - * @param len maximum length (in bytes) of data to receive - * @return number of bytes actually received - */ -uint32_t sio_tryread(sio_fd_t fd, uint8_t *data, uint32_t len); -#endif - -#ifndef sio_write -/** - * Writes to the serial device. - * - * @param fd serial device handle - * @param data pointer to data to send - * @param len length (in bytes) of data to send - * @return number of bytes actually sent - * - * @note This function will block until all data can be sent. - */ -uint32_t sio_write(sio_fd_t fd, uint8_t *data, uint32_t len); -#endif - -#ifndef sio_read_abort -/** - * Aborts a blocking sio_read() call. - * - * @param fd serial device handle - */ -void sio_read_abort(sio_fd_t fd); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* __SIO_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/snmp.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/snmp.h deleted file mode 100644 index a483a2c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/snmp.h +++ /dev/null @@ -1,367 +0,0 @@ -/* - * Copyright (c) 2001, 2002 Leon Woestenberg - * Copyright (c) 2001, 2002 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Leon Woestenberg - * - */ -#ifndef __LWIP_SNMP_H__ -#define __LWIP_SNMP_H__ - -#include "lwip/opt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#include "lwip/ip_addr.h" - -struct udp_pcb; -struct netif; - -/** - * @see RFC1213, "MIB-II, 6. Definitions" - */ -enum snmp_ifType { - snmp_ifType_other=1, /* none of the following */ - snmp_ifType_regular1822, - snmp_ifType_hdh1822, - snmp_ifType_ddn_x25, - snmp_ifType_rfc877_x25, - snmp_ifType_ethernet_csmacd, - snmp_ifType_iso88023_csmacd, - snmp_ifType_iso88024_tokenBus, - snmp_ifType_iso88025_tokenRing, - snmp_ifType_iso88026_man, - snmp_ifType_starLan, - snmp_ifType_proteon_10Mbit, - snmp_ifType_proteon_80Mbit, - snmp_ifType_hyperchannel, - snmp_ifType_fddi, - snmp_ifType_lapb, - snmp_ifType_sdlc, - snmp_ifType_ds1, /* T-1 */ - snmp_ifType_e1, /* european equiv. of T-1 */ - snmp_ifType_basicISDN, - snmp_ifType_primaryISDN, /* proprietary serial */ - snmp_ifType_propPointToPointSerial, - snmp_ifType_ppp, - snmp_ifType_softwareLoopback, - snmp_ifType_eon, /* CLNP over IP [11] */ - snmp_ifType_ethernet_3Mbit, - snmp_ifType_nsip, /* XNS over IP */ - snmp_ifType_slip, /* generic SLIP */ - snmp_ifType_ultra, /* ULTRA technologies */ - snmp_ifType_ds3, /* T-3 */ - snmp_ifType_sip, /* SMDS */ - snmp_ifType_frame_relay -}; - -#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ - -/** SNMP "sysuptime" Interval */ -#define SNMP_SYSUPTIME_INTERVAL 10 - -/** fixed maximum length for object identifier type */ -#define LWIP_SNMP_OBJ_ID_LEN 32 - -/** internal object identifier representation */ -struct snmp_obj_id -{ - uint8_t len; - int32_t id[LWIP_SNMP_OBJ_ID_LEN]; -}; - -/* system */ -void snmp_set_sysdesr(uint8_t* str, uint8_t* len); -void snmp_set_sysobjid(struct snmp_obj_id *oid); -void snmp_get_sysobjid_ptr(struct snmp_obj_id **oid); -void snmp_inc_sysuptime(void); -void snmp_add_sysuptime(uint32_t value); -void snmp_get_sysuptime(uint32_t *value); -void snmp_set_syscontact(uint8_t *ocstr, uint8_t *ocstrlen); -void snmp_set_sysname(uint8_t *ocstr, uint8_t *ocstrlen); -void snmp_set_syslocation(uint8_t *ocstr, uint8_t *ocstrlen); - -/* network interface */ -void snmp_add_ifinoctets(struct netif *ni, uint32_t value); -void snmp_inc_ifinucastpkts(struct netif *ni); -void snmp_inc_ifinnucastpkts(struct netif *ni); -void snmp_inc_ifindiscards(struct netif *ni); -void snmp_add_ifoutoctets(struct netif *ni, uint32_t value); -void snmp_inc_ifoutucastpkts(struct netif *ni); -void snmp_inc_ifoutnucastpkts(struct netif *ni); -void snmp_inc_ifoutdiscards(struct netif *ni); -void snmp_inc_iflist(void); -void snmp_dec_iflist(void); - -/* ARP (for atTable and ipNetToMediaTable) */ -void snmp_insert_arpidx_tree(struct netif *ni, ip_addr_t *ip); -void snmp_delete_arpidx_tree(struct netif *ni, ip_addr_t *ip); - -/* IP */ -void snmp_inc_ipinreceives(void); -void snmp_inc_ipinhdrerrors(void); -void snmp_inc_ipinaddrerrors(void); -void snmp_inc_ipforwdatagrams(void); -void snmp_inc_ipinunknownprotos(void); -void snmp_inc_ipindiscards(void); -void snmp_inc_ipindelivers(void); -void snmp_inc_ipoutrequests(void); -void snmp_inc_ipoutdiscards(void); -void snmp_inc_ipoutnoroutes(void); -void snmp_inc_ipreasmreqds(void); -void snmp_inc_ipreasmoks(void); -void snmp_inc_ipreasmfails(void); -void snmp_inc_ipfragoks(void); -void snmp_inc_ipfragfails(void); -void snmp_inc_ipfragcreates(void); -void snmp_inc_iproutingdiscards(void); -void snmp_insert_ipaddridx_tree(struct netif *ni); -void snmp_delete_ipaddridx_tree(struct netif *ni); -void snmp_insert_iprteidx_tree(uint8_t dflt, struct netif *ni); -void snmp_delete_iprteidx_tree(uint8_t dflt, struct netif *ni); - -/* ICMP */ -void snmp_inc_icmpinmsgs(void); -void snmp_inc_icmpinerrors(void); -void snmp_inc_icmpindestunreachs(void); -void snmp_inc_icmpintimeexcds(void); -void snmp_inc_icmpinparmprobs(void); -void snmp_inc_icmpinsrcquenchs(void); -void snmp_inc_icmpinredirects(void); -void snmp_inc_icmpinechos(void); -void snmp_inc_icmpinechoreps(void); -void snmp_inc_icmpintimestamps(void); -void snmp_inc_icmpintimestampreps(void); -void snmp_inc_icmpinaddrmasks(void); -void snmp_inc_icmpinaddrmaskreps(void); -void snmp_inc_icmpoutmsgs(void); -void snmp_inc_icmpouterrors(void); -void snmp_inc_icmpoutdestunreachs(void); -void snmp_inc_icmpouttimeexcds(void); -void snmp_inc_icmpoutparmprobs(void); -void snmp_inc_icmpoutsrcquenchs(void); -void snmp_inc_icmpoutredirects(void); -void snmp_inc_icmpoutechos(void); -void snmp_inc_icmpoutechoreps(void); -void snmp_inc_icmpouttimestamps(void); -void snmp_inc_icmpouttimestampreps(void); -void snmp_inc_icmpoutaddrmasks(void); -void snmp_inc_icmpoutaddrmaskreps(void); - -/* TCP */ -void snmp_inc_tcpactiveopens(void); -void snmp_inc_tcppassiveopens(void); -void snmp_inc_tcpattemptfails(void); -void snmp_inc_tcpestabresets(void); -void snmp_inc_tcpinsegs(void); -void snmp_inc_tcpoutsegs(void); -void snmp_inc_tcpretranssegs(void); -void snmp_inc_tcpinerrs(void); -void snmp_inc_tcpoutrsts(void); - -/* UDP */ -void snmp_inc_udpindatagrams(void); -void snmp_inc_udpnoports(void); -void snmp_inc_udpinerrors(void); -void snmp_inc_udpoutdatagrams(void); -void snmp_insert_udpidx_tree(struct udp_pcb *pcb); -void snmp_delete_udpidx_tree(struct udp_pcb *pcb); - -/* SNMP */ -void snmp_inc_snmpinpkts(void); -void snmp_inc_snmpoutpkts(void); -void snmp_inc_snmpinbadversions(void); -void snmp_inc_snmpinbadcommunitynames(void); -void snmp_inc_snmpinbadcommunityuses(void); -void snmp_inc_snmpinasnparseerrs(void); -void snmp_inc_snmpintoobigs(void); -void snmp_inc_snmpinnosuchnames(void); -void snmp_inc_snmpinbadvalues(void); -void snmp_inc_snmpinreadonlys(void); -void snmp_inc_snmpingenerrs(void); -void snmp_add_snmpintotalreqvars(uint8_t value); -void snmp_add_snmpintotalsetvars(uint8_t value); -void snmp_inc_snmpingetrequests(void); -void snmp_inc_snmpingetnexts(void); -void snmp_inc_snmpinsetrequests(void); -void snmp_inc_snmpingetresponses(void); -void snmp_inc_snmpintraps(void); -void snmp_inc_snmpouttoobigs(void); -void snmp_inc_snmpoutnosuchnames(void); -void snmp_inc_snmpoutbadvalues(void); -void snmp_inc_snmpoutgenerrs(void); -void snmp_inc_snmpoutgetrequests(void); -void snmp_inc_snmpoutgetnexts(void); -void snmp_inc_snmpoutsetrequests(void); -void snmp_inc_snmpoutgetresponses(void); -void snmp_inc_snmpouttraps(void); -void snmp_get_snmpgrpid_ptr(struct snmp_obj_id **oid); -void snmp_set_snmpenableauthentraps(uint8_t *value); -void snmp_get_snmpenableauthentraps(uint8_t *value); - -/* LWIP_SNMP support not available */ -/* define everything to be empty */ -#else - -/* system */ -#define snmp_set_sysdesr(str, len) -#define snmp_set_sysobjid(oid); -#define snmp_get_sysobjid_ptr(oid) -#define snmp_inc_sysuptime() -#define snmp_add_sysuptime(value) -#define snmp_get_sysuptime(value) -#define snmp_set_syscontact(ocstr, ocstrlen); -#define snmp_set_sysname(ocstr, ocstrlen); -#define snmp_set_syslocation(ocstr, ocstrlen); - -/* network interface */ -#define snmp_add_ifinoctets(ni,value) -#define snmp_inc_ifinucastpkts(ni) -#define snmp_inc_ifinnucastpkts(ni) -#define snmp_inc_ifindiscards(ni) -#define snmp_add_ifoutoctets(ni,value) -#define snmp_inc_ifoutucastpkts(ni) -#define snmp_inc_ifoutnucastpkts(ni) -#define snmp_inc_ifoutdiscards(ni) -#define snmp_inc_iflist() -#define snmp_dec_iflist() - -/* ARP */ -#define snmp_insert_arpidx_tree(ni,ip) -#define snmp_delete_arpidx_tree(ni,ip) - -/* IP */ -#define snmp_inc_ipinreceives() -#define snmp_inc_ipinhdrerrors() -#define snmp_inc_ipinaddrerrors() -#define snmp_inc_ipforwdatagrams() -#define snmp_inc_ipinunknownprotos() -#define snmp_inc_ipindiscards() -#define snmp_inc_ipindelivers() -#define snmp_inc_ipoutrequests() -#define snmp_inc_ipoutdiscards() -#define snmp_inc_ipoutnoroutes() -#define snmp_inc_ipreasmreqds() -#define snmp_inc_ipreasmoks() -#define snmp_inc_ipreasmfails() -#define snmp_inc_ipfragoks() -#define snmp_inc_ipfragfails() -#define snmp_inc_ipfragcreates() -#define snmp_inc_iproutingdiscards() -#define snmp_insert_ipaddridx_tree(ni) -#define snmp_delete_ipaddridx_tree(ni) -#define snmp_insert_iprteidx_tree(dflt, ni) -#define snmp_delete_iprteidx_tree(dflt, ni) - -/* ICMP */ -#define snmp_inc_icmpinmsgs() -#define snmp_inc_icmpinerrors() -#define snmp_inc_icmpindestunreachs() -#define snmp_inc_icmpintimeexcds() -#define snmp_inc_icmpinparmprobs() -#define snmp_inc_icmpinsrcquenchs() -#define snmp_inc_icmpinredirects() -#define snmp_inc_icmpinechos() -#define snmp_inc_icmpinechoreps() -#define snmp_inc_icmpintimestamps() -#define snmp_inc_icmpintimestampreps() -#define snmp_inc_icmpinaddrmasks() -#define snmp_inc_icmpinaddrmaskreps() -#define snmp_inc_icmpoutmsgs() -#define snmp_inc_icmpouterrors() -#define snmp_inc_icmpoutdestunreachs() -#define snmp_inc_icmpouttimeexcds() -#define snmp_inc_icmpoutparmprobs() -#define snmp_inc_icmpoutsrcquenchs() -#define snmp_inc_icmpoutredirects() -#define snmp_inc_icmpoutechos() -#define snmp_inc_icmpoutechoreps() -#define snmp_inc_icmpouttimestamps() -#define snmp_inc_icmpouttimestampreps() -#define snmp_inc_icmpoutaddrmasks() -#define snmp_inc_icmpoutaddrmaskreps() -/* TCP */ -#define snmp_inc_tcpactiveopens() -#define snmp_inc_tcppassiveopens() -#define snmp_inc_tcpattemptfails() -#define snmp_inc_tcpestabresets() -#define snmp_inc_tcpinsegs() -#define snmp_inc_tcpoutsegs() -#define snmp_inc_tcpretranssegs() -#define snmp_inc_tcpinerrs() -#define snmp_inc_tcpoutrsts() - -/* UDP */ -#define snmp_inc_udpindatagrams() -#define snmp_inc_udpnoports() -#define snmp_inc_udpinerrors() -#define snmp_inc_udpoutdatagrams() -#define snmp_insert_udpidx_tree(pcb) -#define snmp_delete_udpidx_tree(pcb) - -/* SNMP */ -#define snmp_inc_snmpinpkts() -#define snmp_inc_snmpoutpkts() -#define snmp_inc_snmpinbadversions() -#define snmp_inc_snmpinbadcommunitynames() -#define snmp_inc_snmpinbadcommunityuses() -#define snmp_inc_snmpinasnparseerrs() -#define snmp_inc_snmpintoobigs() -#define snmp_inc_snmpinnosuchnames() -#define snmp_inc_snmpinbadvalues() -#define snmp_inc_snmpinreadonlys() -#define snmp_inc_snmpingenerrs() -#define snmp_add_snmpintotalreqvars(value) -#define snmp_add_snmpintotalsetvars(value) -#define snmp_inc_snmpingetrequests() -#define snmp_inc_snmpingetnexts() -#define snmp_inc_snmpinsetrequests() -#define snmp_inc_snmpingetresponses() -#define snmp_inc_snmpintraps() -#define snmp_inc_snmpouttoobigs() -#define snmp_inc_snmpoutnosuchnames() -#define snmp_inc_snmpoutbadvalues() -#define snmp_inc_snmpoutgenerrs() -#define snmp_inc_snmpoutgetrequests() -#define snmp_inc_snmpoutgetnexts() -#define snmp_inc_snmpoutsetrequests() -#define snmp_inc_snmpoutgetresponses() -#define snmp_inc_snmpouttraps() -#define snmp_get_snmpgrpid_ptr(oid) -#define snmp_set_snmpenableauthentraps(value) -#define snmp_get_snmpenableauthentraps(value) - -#endif /* LWIP_SNMP */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_SNMP_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/snmp_asn1.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/snmp_asn1.h deleted file mode 100644 index e8d64ff..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/snmp_asn1.h +++ /dev/null @@ -1,101 +0,0 @@ -/** - * @file - * Abstract Syntax Notation One (ISO 8824, 8825) codec. - */ - -/* - * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Christiaan Simons - */ - -#ifndef __LWIP_SNMP_ASN1_H__ -#define __LWIP_SNMP_ASN1_H__ - -#include "lwip/opt.h" -#include "lwip/err.h" -#include "lwip/pbuf.h" -#include "lwip/snmp.h" - -#if LWIP_SNMP - -#ifdef __cplusplus -extern "C" { -#endif - -#define SNMP_ASN1_UNIV (0) /* (!0x80 | !0x40) */ -#define SNMP_ASN1_APPLIC (0x40) /* (!0x80 | 0x40) */ -#define SNMP_ASN1_CONTXT (0x80) /* ( 0x80 | !0x40) */ - -#define SNMP_ASN1_CONSTR (0x20) /* ( 0x20) */ -#define SNMP_ASN1_PRIMIT (0) /* (!0x20) */ - -/* universal tags */ -#define SNMP_ASN1_INTEG 2 -#define SNMP_ASN1_OC_STR 4 -#define SNMP_ASN1_NUL 5 -#define SNMP_ASN1_OBJ_ID 6 -#define SNMP_ASN1_SEQ 16 - -/* application specific (SNMP) tags */ -#define SNMP_ASN1_IPADDR 0 /* octet string size(4) */ -#define SNMP_ASN1_COUNTER 1 /* uint32_t */ -#define SNMP_ASN1_GAUGE 2 /* uint32_t */ -#define SNMP_ASN1_TIMETICKS 3 /* uint32_t */ -#define SNMP_ASN1_OPAQUE 4 /* octet string */ - -/* context specific (SNMP) tags */ -#define SNMP_ASN1_PDU_GET_REQ 0 -#define SNMP_ASN1_PDU_GET_NEXT_REQ 1 -#define SNMP_ASN1_PDU_GET_RESP 2 -#define SNMP_ASN1_PDU_SET_REQ 3 -#define SNMP_ASN1_PDU_TRAP 4 - -err_t snmp_asn1_dec_type(struct pbuf *p, uint16_t ofs, uint8_t *type); -err_t snmp_asn1_dec_length(struct pbuf *p, uint16_t ofs, uint8_t *octets_used, uint16_t *length); -err_t snmp_asn1_dec_u32t(struct pbuf *p, uint16_t ofs, uint16_t len, uint32_t *value); -err_t snmp_asn1_dec_s32t(struct pbuf *p, uint16_t ofs, uint16_t len, int32_t *value); -err_t snmp_asn1_dec_oid(struct pbuf *p, uint16_t ofs, uint16_t len, struct snmp_obj_id *oid); -err_t snmp_asn1_dec_raw(struct pbuf *p, uint16_t ofs, uint16_t len, uint16_t raw_len, uint8_t *raw); - -void snmp_asn1_enc_length_cnt(uint16_t length, uint8_t *octets_needed); -void snmp_asn1_enc_u32t_cnt(uint32_t value, uint16_t *octets_needed); -void snmp_asn1_enc_s32t_cnt(int32_t value, uint16_t *octets_needed); -void snmp_asn1_enc_oid_cnt(uint8_t ident_len, int32_t *ident, uint16_t *octets_needed); -err_t snmp_asn1_enc_type(struct pbuf *p, uint16_t ofs, uint8_t type); -err_t snmp_asn1_enc_length(struct pbuf *p, uint16_t ofs, uint16_t length); -err_t snmp_asn1_enc_u32t(struct pbuf *p, uint16_t ofs, uint16_t octets_needed, uint32_t value); -err_t snmp_asn1_enc_s32t(struct pbuf *p, uint16_t ofs, uint16_t octets_needed, int32_t value); -err_t snmp_asn1_enc_oid(struct pbuf *p, uint16_t ofs, uint8_t ident_len, int32_t *ident); -err_t snmp_asn1_enc_raw(struct pbuf *p, uint16_t ofs, uint16_t raw_len, uint8_t *raw); - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_SNMP */ - -#endif /* __LWIP_SNMP_ASN1_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/snmp_msg.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/snmp_msg.h deleted file mode 100644 index 10d2add..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/snmp_msg.h +++ /dev/null @@ -1,315 +0,0 @@ -/** - * @file - * SNMP Agent message handling structures. - */ - -/* - * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Christiaan Simons - */ - -#ifndef __LWIP_SNMP_MSG_H__ -#define __LWIP_SNMP_MSG_H__ - -#include "lwip/opt.h" -#include "lwip/snmp.h" -#include "lwip/snmp_structs.h" -#include "lwip/ip_addr.h" -#include "lwip/err.h" - -#if LWIP_SNMP - -#if SNMP_PRIVATE_MIB -/* When using a private MIB, you have to create a file 'private_mib.h' that contains - * a 'struct mib_array_node mib_private' which contains your MIB. */ -#include "private_mib.h" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* The listen port of the SNMP agent. Clients have to make their requests to - this port. Most standard clients won't work if you change this! */ -#ifndef SNMP_IN_PORT -#define SNMP_IN_PORT 161 -#endif -/* The remote port the SNMP agent sends traps to. Most standard trap sinks won't - work if you change this! */ -#ifndef SNMP_TRAP_PORT -#define SNMP_TRAP_PORT 162 -#endif - -#define SNMP_ES_NOERROR 0 -#define SNMP_ES_TOOBIG 1 -#define SNMP_ES_NOSUCHNAME 2 -#define SNMP_ES_BADVALUE 3 -#define SNMP_ES_READONLY 4 -#define SNMP_ES_GENERROR 5 - -#define SNMP_GENTRAP_COLDSTART 0 -#define SNMP_GENTRAP_WARMSTART 1 -#define SNMP_GENTRAP_AUTHFAIL 4 -#define SNMP_GENTRAP_ENTERPRISESPC 6 - -struct snmp_varbind -{ - /* next pointer, NULL for last in list */ - struct snmp_varbind *next; - /* previous pointer, NULL for first in list */ - struct snmp_varbind *prev; - - /* object identifier length (in int32_t) */ - uint8_t ident_len; - /* object identifier array */ - int32_t *ident; - - /* object value ASN1 type */ - uint8_t value_type; - /* object value length (in uint8_t) */ - uint8_t value_len; - /* object value */ - void *value; - - /* encoding varbind seq length length */ - uint8_t seqlenlen; - /* encoding object identifier length length */ - uint8_t olenlen; - /* encoding object value length length */ - uint8_t vlenlen; - /* encoding varbind seq length */ - uint16_t seqlen; - /* encoding object identifier length */ - uint16_t olen; - /* encoding object value length */ - uint16_t vlen; -}; - -struct snmp_varbind_root -{ - struct snmp_varbind *head; - struct snmp_varbind *tail; - /* number of variable bindings in list */ - uint8_t count; - /* encoding varbind-list seq length length */ - uint8_t seqlenlen; - /* encoding varbind-list seq length */ - uint16_t seqlen; -}; - -/** output response message header length fields */ -struct snmp_resp_header_lengths -{ - /* encoding error-index length length */ - uint8_t erridxlenlen; - /* encoding error-status length length */ - uint8_t errstatlenlen; - /* encoding request id length length */ - uint8_t ridlenlen; - /* encoding pdu length length */ - uint8_t pdulenlen; - /* encoding community length length */ - uint8_t comlenlen; - /* encoding version length length */ - uint8_t verlenlen; - /* encoding sequence length length */ - uint8_t seqlenlen; - - /* encoding error-index length */ - uint16_t erridxlen; - /* encoding error-status length */ - uint16_t errstatlen; - /* encoding request id length */ - uint16_t ridlen; - /* encoding pdu length */ - uint16_t pdulen; - /* encoding community length */ - uint16_t comlen; - /* encoding version length */ - uint16_t verlen; - /* encoding sequence length */ - uint16_t seqlen; -}; - -/** output response message header length fields */ -struct snmp_trap_header_lengths -{ - /* encoding timestamp length length */ - uint8_t tslenlen; - /* encoding specific-trap length length */ - uint8_t strplenlen; - /* encoding generic-trap length length */ - uint8_t gtrplenlen; - /* encoding agent-addr length length */ - uint8_t aaddrlenlen; - /* encoding enterprise-id length length */ - uint8_t eidlenlen; - /* encoding pdu length length */ - uint8_t pdulenlen; - /* encoding community length length */ - uint8_t comlenlen; - /* encoding version length length */ - uint8_t verlenlen; - /* encoding sequence length length */ - uint8_t seqlenlen; - - /* encoding timestamp length */ - uint16_t tslen; - /* encoding specific-trap length */ - uint16_t strplen; - /* encoding generic-trap length */ - uint16_t gtrplen; - /* encoding agent-addr length */ - uint16_t aaddrlen; - /* encoding enterprise-id length */ - uint16_t eidlen; - /* encoding pdu length */ - uint16_t pdulen; - /* encoding community length */ - uint16_t comlen; - /* encoding version length */ - uint16_t verlen; - /* encoding sequence length */ - uint16_t seqlen; -}; - -/* Accepting new SNMP messages. */ -#define SNMP_MSG_EMPTY 0 -/* Search for matching object for variable binding. */ -#define SNMP_MSG_SEARCH_OBJ 1 -/* Perform SNMP operation on in-memory object. - Pass-through states, for symmetry only. */ -#define SNMP_MSG_INTERNAL_GET_OBJDEF 2 -#define SNMP_MSG_INTERNAL_GET_VALUE 3 -#define SNMP_MSG_INTERNAL_SET_TEST 4 -#define SNMP_MSG_INTERNAL_GET_OBJDEF_S 5 -#define SNMP_MSG_INTERNAL_SET_VALUE 6 -/* Perform SNMP operation on object located externally. - In theory this could be used for building a proxy agent. - Practical use is for an enterprise spc. app. gateway. */ -#define SNMP_MSG_EXTERNAL_GET_OBJDEF 7 -#define SNMP_MSG_EXTERNAL_GET_VALUE 8 -#define SNMP_MSG_EXTERNAL_SET_TEST 9 -#define SNMP_MSG_EXTERNAL_GET_OBJDEF_S 10 -#define SNMP_MSG_EXTERNAL_SET_VALUE 11 - -#define SNMP_COMMUNITY_STR_LEN 64 -struct snmp_msg_pstat -{ - /* lwIP local port (161) binding */ - struct udp_pcb *pcb; - /* source IP address */ - ip_addr_t sip; - /* source UDP port */ - uint16_t sp; - /* request type */ - uint8_t rt; - /* request ID */ - int32_t rid; - /* error status */ - int32_t error_status; - /* error index */ - int32_t error_index; - /* community name (zero terminated) */ - uint8_t community[SNMP_COMMUNITY_STR_LEN + 1]; - /* community string length (exclusive zero term) */ - uint8_t com_strlen; - /* one out of MSG_EMPTY, MSG_DEMUX, MSG_INTERNAL, MSG_EXTERNAL_x */ - uint8_t state; - /* saved arguments for MSG_EXTERNAL_x */ - struct mib_external_node *ext_mib_node; - struct snmp_name_ptr ext_name_ptr; - struct obj_def ext_object_def; - struct snmp_obj_id ext_oid; - /* index into input variable binding list */ - uint8_t vb_idx; - /* ptr into input variable binding list */ - struct snmp_varbind *vb_ptr; - /* list of variable bindings from input */ - struct snmp_varbind_root invb; - /* list of variable bindings to output */ - struct snmp_varbind_root outvb; - /* output response lengths used in ASN encoding */ - struct snmp_resp_header_lengths rhl; -}; - -struct snmp_msg_trap -{ - /* lwIP local port (161) binding */ - struct udp_pcb *pcb; - /* destination IP address in network order */ - ip_addr_t dip; - - /* source enterprise ID (sysObjectID) */ - struct snmp_obj_id *enterprise; - /* source IP address, raw network order format */ - uint8_t sip_raw[4]; - /* generic trap code */ - uint32_t gen_trap; - /* specific trap code */ - uint32_t spc_trap; - /* timestamp */ - uint32_t ts; - /* list of variable bindings to output */ - struct snmp_varbind_root outvb; - /* output trap lengths used in ASN encoding */ - struct snmp_trap_header_lengths thl; -}; - -/** Agent Version constant, 0 = v1 oddity */ -extern const int32_t snmp_version; -/** Agent default "public" community string */ -extern const char snmp_publiccommunity[7]; - -extern struct snmp_msg_trap trap_msg; - -/** Agent setup, start listening to port 161. */ -void snmp_init(void); -void snmp_trap_dst_enable(uint8_t dst_idx, uint8_t enable); -void snmp_trap_dst_ip_set(uint8_t dst_idx, ip_addr_t *dst); - -/** Varbind-list functions. */ -struct snmp_varbind* snmp_varbind_alloc(struct snmp_obj_id *oid, uint8_t type, uint8_t len); -void snmp_varbind_free(struct snmp_varbind *vb); -void snmp_varbind_list_free(struct snmp_varbind_root *root); -void snmp_varbind_tail_add(struct snmp_varbind_root *root, struct snmp_varbind *vb); -struct snmp_varbind* snmp_varbind_tail_remove(struct snmp_varbind_root *root); - -/** Handle an internal (recv) or external (private response) event. */ -void snmp_msg_event(uint8_t request_id); -err_t snmp_send_response(struct snmp_msg_pstat *m_stat); -err_t snmp_send_trap(int8_t generic_trap, struct snmp_obj_id *eoid, int32_t specific_trap); -void snmp_coldstart_trap(void); -void snmp_authfail_trap(void); - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_SNMP */ - -#endif /* __LWIP_SNMP_MSG_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/snmp_structs.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/snmp_structs.h deleted file mode 100644 index 93facef..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/snmp_structs.h +++ /dev/null @@ -1,268 +0,0 @@ -/** - * @file - * Generic MIB tree structures. - * - * @todo namespace prefixes - */ - -/* - * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Christiaan Simons - */ - -#ifndef __LWIP_SNMP_STRUCTS_H__ -#define __LWIP_SNMP_STRUCTS_H__ - -#include "lwip/opt.h" - -#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/snmp.h" - -#if SNMP_PRIVATE_MIB -/* When using a private MIB, you have to create a file 'private_mib.h' that contains - * a 'struct mib_array_node mib_private' which contains your MIB. */ -#include "private_mib.h" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* MIB object instance */ -#define MIB_OBJECT_NONE 0 -#define MIB_OBJECT_SCALAR 1 -#define MIB_OBJECT_TAB 2 - -/* MIB access types */ -#define MIB_ACCESS_READ 1 -#define MIB_ACCESS_WRITE 2 - -/* MIB object access */ -#define MIB_OBJECT_READ_ONLY MIB_ACCESS_READ -#define MIB_OBJECT_READ_WRITE (MIB_ACCESS_READ | MIB_ACCESS_WRITE) -#define MIB_OBJECT_WRITE_ONLY MIB_ACCESS_WRITE -#define MIB_OBJECT_NOT_ACCESSIBLE 0 - -/** object definition returned by (get_object_def)() */ -struct obj_def -{ - /* MIB_OBJECT_NONE (0), MIB_OBJECT_SCALAR (1), MIB_OBJECT_TAB (2) */ - uint8_t instance; - /* 0 read-only, 1 read-write, 2 write-only, 3 not-accessible */ - uint8_t access; - /* ASN type for this object */ - uint8_t asn_type; - /* value length (host length) */ - uint16_t v_len; - /* length of instance part of supplied object identifier */ - uint8_t id_inst_len; - /* instance part of supplied object identifier */ - int32_t *id_inst_ptr; -}; - -struct snmp_name_ptr -{ - uint8_t ident_len; - int32_t *ident; -}; - -/** MIB const scalar (.0) node */ -#define MIB_NODE_SC 0x01 -/** MIB const array node */ -#define MIB_NODE_AR 0x02 -/** MIB array node (mem_malloced from RAM) */ -#define MIB_NODE_RA 0x03 -/** MIB list root node (mem_malloced from RAM) */ -#define MIB_NODE_LR 0x04 -/** MIB node for external objects */ -#define MIB_NODE_EX 0x05 - -/** node "base class" layout, the mandatory fields for a node */ -struct mib_node -{ - /** returns struct obj_def for the given object identifier */ - void (*get_object_def)(uint8_t ident_len, int32_t *ident, struct obj_def *od); - /** returns object value for the given object identifier, - @note the caller must allocate at least len bytes for the value */ - void (*get_value)(struct obj_def *od, uint16_t len, void *value); - /** tests length and/or range BEFORE setting */ - uint8_t (*set_test)(struct obj_def *od, uint16_t len, void *value); - /** sets object value, only to be called when set_test() */ - void (*set_value)(struct obj_def *od, uint16_t len, void *value); - /** One out of MIB_NODE_AR, MIB_NODE_LR or MIB_NODE_EX */ - uint8_t node_type; - /* array or max list length */ - uint16_t maxlength; -}; - -/** derived node for scalars .0 index */ -typedef struct mib_node mib_scalar_node; - -/** derived node, points to a fixed size const array - of sub-identifiers plus a 'child' pointer */ -struct mib_array_node -{ - /* inherited "base class" members */ - void (*get_object_def)(uint8_t ident_len, int32_t *ident, struct obj_def *od); - void (*get_value)(struct obj_def *od, uint16_t len, void *value); - uint8_t (*set_test)(struct obj_def *od, uint16_t len, void *value); - void (*set_value)(struct obj_def *od, uint16_t len, void *value); - - uint8_t node_type; - uint16_t maxlength; - - /* additional struct members */ - const int32_t *objid; - struct mib_node* const *nptr; -}; - -/** derived node, points to a fixed size mem_malloced array - of sub-identifiers plus a 'child' pointer */ -struct mib_ram_array_node -{ - /* inherited "base class" members */ - void (*get_object_def)(uint8_t ident_len, int32_t *ident, struct obj_def *od); - void (*get_value)(struct obj_def *od, uint16_t len, void *value); - uint8_t (*set_test)(struct obj_def *od, uint16_t len, void *value); - void (*set_value)(struct obj_def *od, uint16_t len, void *value); - - uint8_t node_type; - uint16_t maxlength; - - /* aditional struct members */ - int32_t *objid; - struct mib_node **nptr; -}; - -struct mib_list_node -{ - struct mib_list_node *prev; - struct mib_list_node *next; - int32_t objid; - struct mib_node *nptr; -}; - -/** derived node, points to a doubly linked list - of sub-identifiers plus a 'child' pointer */ -struct mib_list_rootnode -{ - /* inherited "base class" members */ - void (*get_object_def)(uint8_t ident_len, int32_t *ident, struct obj_def *od); - void (*get_value)(struct obj_def *od, uint16_t len, void *value); - uint8_t (*set_test)(struct obj_def *od, uint16_t len, void *value); - void (*set_value)(struct obj_def *od, uint16_t len, void *value); - - uint8_t node_type; - uint16_t maxlength; - - /* additional struct members */ - struct mib_list_node *head; - struct mib_list_node *tail; - /* counts list nodes in list */ - uint16_t count; -}; - -/** derived node, has access functions for mib object in external memory or device - using 'tree_level' and 'idx', with a range 0 .. (level_length() - 1) */ -struct mib_external_node -{ - /* inherited "base class" members */ - void (*get_object_def)(uint8_t ident_len, int32_t *ident, struct obj_def *od); - void (*get_value)(struct obj_def *od, uint16_t len, void *value); - uint8_t (*set_test)(struct obj_def *od, uint16_t len, void *value); - void (*set_value)(struct obj_def *od, uint16_t len, void *value); - - uint8_t node_type; - uint16_t maxlength; - - /* additional struct members */ - /** points to an external (in memory) record of some sort of addressing - information, passed to and interpreted by the funtions below */ - void* addr_inf; - /** tree levels under this node */ - uint8_t tree_levels; - /** number of objects at this level */ - uint16_t (*level_length)(void* addr_inf, uint8_t level); - /** compares object sub identifier with external id - return zero when equal, nonzero when unequal */ - int32_t (*ident_cmp)(void* addr_inf, uint8_t level, uint16_t idx, int32_t sub_id); - void (*get_objid)(void* addr_inf, uint8_t level, uint16_t idx, int32_t *sub_id); - - /** async Questions */ - void (*get_object_def_q)(void* addr_inf, uint8_t rid, uint8_t ident_len, int32_t *ident); - void (*get_value_q)(uint8_t rid, struct obj_def *od); - void (*set_test_q)(uint8_t rid, struct obj_def *od); - void (*set_value_q)(uint8_t rid, struct obj_def *od, uint16_t len, void *value); - /** async Answers */ - void (*get_object_def_a)(uint8_t rid, uint8_t ident_len, int32_t *ident, struct obj_def *od); - void (*get_value_a)(uint8_t rid, struct obj_def *od, uint16_t len, void *value); - uint8_t (*set_test_a)(uint8_t rid, struct obj_def *od, uint16_t len, void *value); - void (*set_value_a)(uint8_t rid, struct obj_def *od, uint16_t len, void *value); - /** async Panic Close (agent returns error reply, - e.g. used for external transaction cleanup) */ - void (*get_object_def_pc)(uint8_t rid, uint8_t ident_len, int32_t *ident); - void (*get_value_pc)(uint8_t rid, struct obj_def *od); - void (*set_test_pc)(uint8_t rid, struct obj_def *od); - void (*set_value_pc)(uint8_t rid, struct obj_def *od); -}; - -/** export MIB tree from mib2.c */ -extern const struct mib_array_node internet; - -/** dummy function pointers for non-leaf MIB nodes from mib2.c */ -void noleafs_get_object_def(uint8_t ident_len, int32_t *ident, struct obj_def *od); -void noleafs_get_value(struct obj_def *od, uint16_t len, void *value); -uint8_t noleafs_set_test(struct obj_def *od, uint16_t len, void *value); -void noleafs_set_value(struct obj_def *od, uint16_t len, void *value); - -void snmp_oidtoip(int32_t *ident, ip_addr_t *ip); -void snmp_iptooid(ip_addr_t *ip, int32_t *ident); -void snmp_ifindextonetif(int32_t ifindex, struct netif **netif); -void snmp_netiftoifindex(struct netif *netif, int32_t *ifidx); - -struct mib_list_node* snmp_mib_ln_alloc(int32_t id); -void snmp_mib_ln_free(struct mib_list_node *ln); -struct mib_list_rootnode* snmp_mib_lrn_alloc(void); -void snmp_mib_lrn_free(struct mib_list_rootnode *lrn); - -int8_t snmp_mib_node_insert(struct mib_list_rootnode *rn, int32_t objid, struct mib_list_node **insn); -int8_t snmp_mib_node_find(struct mib_list_rootnode *rn, int32_t objid, struct mib_list_node **fn); -struct mib_list_rootnode *snmp_mib_node_delete(struct mib_list_rootnode *rn, struct mib_list_node *n); - -struct mib_node* snmp_search_tree(struct mib_node *node, uint8_t ident_len, int32_t *ident, struct snmp_name_ptr *np); -struct mib_node* snmp_expand_tree(struct mib_node *node, uint8_t ident_len, int32_t *ident, struct snmp_obj_id *oidret); -uint8_t snmp_iso_prefix_tst(uint8_t ident_len, int32_t *ident); -uint8_t snmp_iso_prefix_expand(uint8_t ident_len, int32_t *ident, struct snmp_obj_id *oidret); - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_SNMP */ - -#endif /* __LWIP_SNMP_STRUCTS_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/sockets.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/sockets.h deleted file mode 100644 index 1b8b59d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/sockets.h +++ /dev/null @@ -1,382 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - - -#ifndef __LWIP_SOCKETS_H__ -#define __LWIP_SOCKETS_H__ - -#include "lwip/opt.h" - -#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ - -#include /* for size_t */ - -#include "lwip/ip_addr.h" -#include "lwip/inet.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* members are in network byte order */ -struct sockaddr_in { - uint8_t sin_len; - uint8_t sin_family; - uint16_t sin_port; - struct in_addr sin_addr; - char sin_zero[8]; -}; - -struct sockaddr { - uint8_t sa_len; - uint8_t sa_family; - char sa_data[14]; -}; - -/* If your port already typedef's socklen_t, define SOCKLEN_T_DEFINED - to prevent this code from redefining it. */ -#if !defined(socklen_t) && !defined(SOCKLEN_T_DEFINED) -typedef uint32_t socklen_t; -#endif - -/* Socket protocol types (TCP/UDP/RAW) */ -#define SOCK_STREAM 1 -#define SOCK_DGRAM 2 -#define SOCK_RAW 3 - -/* - * Option flags per-socket. These must match the SOF_ flags in ip.h (checked in init.c) - */ -#define SO_DEBUG 0x0001 /* Unimplemented: turn on debugging info recording */ -#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ -#define SO_REUSEADDR 0x0004 /* Allow local address reuse */ -#define SO_KEEPALIVE 0x0008 /* keep connections alive */ -#define SO_DONTROUTE 0x0010 /* Unimplemented: just use interface addresses */ -#define SO_BROADCAST 0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */ -#define SO_USELOOPBACK 0x0040 /* Unimplemented: bypass hardware when possible */ -#define SO_LINGER 0x0080 /* linger on close if data present */ -#define SO_OOBINLINE 0x0100 /* Unimplemented: leave received OOB data in line */ -#define SO_REUSEPORT 0x0200 /* Unimplemented: allow local address & port reuse */ - -#define SO_DONTLINGER ((int)(~SO_LINGER)) - -/* - * Additional options, not kept in so_options. - */ -#define SO_SNDBUF 0x1001 /* Unimplemented: send buffer size */ -#define SO_RCVBUF 0x1002 /* receive buffer size */ -#define SO_SNDLOWAT 0x1003 /* Unimplemented: send low-water mark */ -#define SO_RCVLOWAT 0x1004 /* Unimplemented: receive low-water mark */ -#define SO_SNDTIMEO 0x1005 /* Unimplemented: send timeout */ -#define SO_RCVTIMEO 0x1006 /* receive timeout */ -#define SO_ERROR 0x1007 /* get error status and clear */ -#define SO_TYPE 0x1008 /* get socket type */ -#define SO_CONTIMEO 0x1009 /* Unimplemented: connect timeout */ -#define SO_NO_CHECK 0x100a /* don't create UDP checksum */ - - -/* - * Structure used for manipulating linger option. - */ -struct linger { - int l_onoff; /* option on/off */ - int l_linger; /* linger time */ -}; - -/* - * Level number for (get/set)sockopt() to apply to socket itself. - */ -#define SOL_SOCKET 0xfff /* options for socket level */ - - -#define AF_UNSPEC 0 -#define AF_INET 2 -#define PF_INET AF_INET -#define PF_UNSPEC AF_UNSPEC - -#define IPPROTO_IP 0 -#define IPPROTO_TCP 6 -#define IPPROTO_UDP 17 -#define IPPROTO_UDPLITE 136 - -/* Flags we can use with send and recv. */ -#define MSG_PEEK 0x01 /* Peeks at an incoming message */ -#define MSG_WAITALL 0x02 /* Unimplemented: Requests that the function block until the full amount of data requested can be returned */ -#define MSG_OOB 0x04 /* Unimplemented: Requests out-of-band data. The significance and semantics of out-of-band data are protocol-specific */ -#define MSG_DONTWAIT 0x08 /* Nonblocking i/o for this operation only */ -#define MSG_MORE 0x10 /* Sender will send more */ - - -/* - * Options for level IPPROTO_IP - */ -#define IP_TOS 1 -#define IP_TTL 2 - -#if LWIP_TCP -/* - * Options for level IPPROTO_TCP - */ -#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */ -#define TCP_KEEPALIVE 0x02 /* send KEEPALIVE probes when idle for pcb->keep_idle milliseconds */ -#define TCP_KEEPIDLE 0x03 /* set pcb->keep_idle - Same as TCP_KEEPALIVE, but use seconds for get/setsockopt */ -#define TCP_KEEPINTVL 0x04 /* set pcb->keep_intvl - Use seconds for get/setsockopt */ -#define TCP_KEEPCNT 0x05 /* set pcb->keep_cnt - Use number of probes sent for get/setsockopt */ -#endif /* LWIP_TCP */ - -#if LWIP_UDP && LWIP_UDPLITE -/* - * Options for level IPPROTO_UDPLITE - */ -#define UDPLITE_SEND_CSCOV 0x01 /* sender checksum coverage */ -#define UDPLITE_RECV_CSCOV 0x02 /* minimal receiver checksum coverage */ -#endif /* LWIP_UDP && LWIP_UDPLITE*/ - - -#if LWIP_IGMP -/* - * Options and types for UDP multicast traffic handling - */ -#define IP_ADD_MEMBERSHIP 3 -#define IP_DROP_MEMBERSHIP 4 -#define IP_MULTICAST_TTL 5 -#define IP_MULTICAST_IF 6 -#define IP_MULTICAST_LOOP 7 - -typedef struct ip_mreq { - struct in_addr imr_multiaddr; /* IP multicast address of group */ - struct in_addr imr_interface; /* local IP address of interface */ -} ip_mreq; -#endif /* LWIP_IGMP */ - -/* - * The Type of Service provides an indication of the abstract - * parameters of the quality of service desired. These parameters are - * to be used to guide the selection of the actual service parameters - * when transmitting a datagram through a particular network. Several - * networks offer service precedence, which somehow treats high - * precedence traffic as more important than other traffic (generally - * by accepting only traffic above a certain precedence at time of high - * load). The major choice is a three way tradeoff between low-delay, - * high-reliability, and high-throughput. - * The use of the Delay, Throughput, and Reliability indications may - * increase the cost (in some sense) of the service. In many networks - * better performance for one of these parameters is coupled with worse - * performance on another. Except for very unusual cases at most two - * of these three indications should be set. - */ -#define IPTOS_TOS_MASK 0x1E -#define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK) -#define IPTOS_LOWDELAY 0x10 -#define IPTOS_THROUGHPUT 0x08 -#define IPTOS_RELIABILITY 0x04 -#define IPTOS_LOWCOST 0x02 -#define IPTOS_MINCOST IPTOS_LOWCOST - -/* - * The Network Control precedence designation is intended to be used - * within a network only. The actual use and control of that - * designation is up to each network. The Internetwork Control - * designation is intended for use by gateway control originators only. - * If the actual use of these precedence designations is of concern to - * a particular network, it is the responsibility of that network to - * control the access to, and use of, those precedence designations. - */ -#define IPTOS_PREC_MASK 0xe0 -#define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK) -#define IPTOS_PREC_NETCONTROL 0xe0 -#define IPTOS_PREC_INTERNETCONTROL 0xc0 -#define IPTOS_PREC_CRITIC_ECP 0xa0 -#define IPTOS_PREC_FLASHOVERRIDE 0x80 -#define IPTOS_PREC_FLASH 0x60 -#define IPTOS_PREC_IMMEDIATE 0x40 -#define IPTOS_PREC_PRIORITY 0x20 -#define IPTOS_PREC_ROUTINE 0x00 - - -/* - * Commands for ioctlsocket(), taken from the BSD file fcntl.h. - * lwip_ioctl only supports FIONREAD and FIONBIO, for now - * - * Ioctl's have the command encoded in the lower word, - * and the size of any in or out parameters in the upper - * word. The high 2 bits of the upper word are used - * to encode the in/out status of the parameter; for now - * we restrict parameters to at most 128 bytes. - */ -#if !defined(FIONREAD) || !defined(FIONBIO) -#define IOCPARM_MASK 0x7fU /* parameters must be < 128 bytes */ -#define IOC_VOID 0x20000000UL /* no parameters */ -#define IOC_OUT 0x40000000UL /* copy out parameters */ -#define IOC_IN 0x80000000UL /* copy in parameters */ -#define IOC_INOUT (IOC_IN|IOC_OUT) - /* 0x20000000 distinguishes new & - old ioctl's */ -#define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) - -#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) - -#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) -#endif /* !defined(FIONREAD) || !defined(FIONBIO) */ - -#ifndef FIONREAD -#define FIONREAD _IOR('f', 127, unsigned long) /* get # bytes to read */ -#endif -#ifndef FIONBIO -#define FIONBIO _IOW('f', 126, unsigned long) /* set/clear non-blocking i/o */ -#endif - -/* Socket I/O Controls: unimplemented */ -#ifndef SIOCSHIWAT -#define SIOCSHIWAT _IOW('s', 0, unsigned long) /* set high watermark */ -#define SIOCGHIWAT _IOR('s', 1, unsigned long) /* get high watermark */ -#define SIOCSLOWAT _IOW('s', 2, unsigned long) /* set low watermark */ -#define SIOCGLOWAT _IOR('s', 3, unsigned long) /* get low watermark */ -#define SIOCATMARK _IOR('s', 7, unsigned long) /* at oob mark? */ -#endif - -/* commands for fnctl */ -#ifndef F_GETFL -#define F_GETFL 3 -#endif -#ifndef F_SETFL -#define F_SETFL 4 -#endif - -/* File status flags and file access modes for fnctl, - these are bits in an int. */ -#ifndef O_NONBLOCK -#define O_NONBLOCK 1 /* nonblocking I/O */ -#endif -#ifndef O_NDELAY -#define O_NDELAY 1 /* same as O_NONBLOCK, for compatibility */ -#endif - -#ifndef SHUT_RD - #define SHUT_RD 0 - #define SHUT_WR 1 - #define SHUT_RDWR 2 -#endif - -/* FD_SET used for lwip_select */ -#ifndef FD_SET - #undef FD_SETSIZE - /* Make FD_SETSIZE match NUM_SOCKETS in socket.c */ - #define FD_SETSIZE MEMP_NUM_NETCONN - #define FD_SET(n, p) ((p)->fd_bits[(n)/8] |= (1 << ((n) & 7))) - #define FD_CLR(n, p) ((p)->fd_bits[(n)/8] &= ~(1 << ((n) & 7))) - #define FD_ISSET(n,p) ((p)->fd_bits[(n)/8] & (1 << ((n) & 7))) - #define FD_ZERO(p) memset((void*)(p),0,sizeof(*(p))) - - typedef struct fd_set { - unsigned char fd_bits [(FD_SETSIZE+7)/8]; - } fd_set; - -#endif /* FD_SET */ - -/** LWIP_TIMEVAL_PRIVATE: if you want to use the struct timeval provided - * by your system, set this to 0 and include in cc.h */ -#ifndef LWIP_TIMEVAL_PRIVATE -#define LWIP_TIMEVAL_PRIVATE 1 -#endif - -#if LWIP_TIMEVAL_PRIVATE -struct timeval { - long tv_sec; /* seconds */ - long tv_usec; /* and microseconds */ -}; -#endif /* LWIP_TIMEVAL_PRIVATE */ - -void lwip_socket_init(void); - -int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen); -int lwip_bind(int s, const struct sockaddr *name, socklen_t namelen); -int lwip_shutdown(int s, int how); -int lwip_getpeername (int s, struct sockaddr *name, socklen_t *namelen); -int lwip_getsockname (int s, struct sockaddr *name, socklen_t *namelen); -int lwip_getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen); -int lwip_setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen); -int lwip_close(int s); -int lwip_connect(int s, const struct sockaddr *name, socklen_t namelen); -int lwip_listen(int s, int backlog); -int lwip_recv(int s, void *mem, size_t len, int flags); -int lwip_read(int s, void *mem, size_t len); -int lwip_recvfrom(int s, void *mem, size_t len, int flags, - struct sockaddr *from, socklen_t *fromlen); -int lwip_send(int s, const void *dataptr, size_t size, int flags); -int lwip_sendto(int s, const void *dataptr, size_t size, int flags, - const struct sockaddr *to, socklen_t tolen); -int lwip_socket(int domain, int type, int protocol); -int lwip_write(int s, const void *dataptr, size_t size); -int lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, - struct timeval *timeout); -int lwip_ioctl(int s, long cmd, void *argp); -int lwip_fcntl(int s, int cmd, int val); - -int lwip_last_err_socket(int s); // errno - -#if LWIP_COMPAT_SOCKETS -#define accept(a,b,c) lwip_accept(a,b,c) -#define bind(a,b,c) lwip_bind(a,b,c) -#define shutdown(a,b) lwip_shutdown(a,b) -#define closesocket(s) lwip_close(s) -#define connect(a,b,c) lwip_connect(a,b,c) -#define getsockname(a,b,c) lwip_getsockname(a,b,c) -#define getpeername(a,b,c) lwip_getpeername(a,b,c) -#define setsockopt(a,b,c,d,e) lwip_setsockopt(a,b,c,d,e) -#define getsockopt(a,b,c,d,e) lwip_getsockopt(a,b,c,d,e) -#define listen(a,b) lwip_listen(a,b) -#define recv(a,b,c,d) lwip_recv(a,b,c,d) -#define recvfrom(a,b,c,d,e,f) lwip_recvfrom(a,b,c,d,e,f) -#define send(a,b,c,d) lwip_send(a,b,c,d) -#define sendto(a,b,c,d,e,f) lwip_sendto(a,b,c,d,e,f) -#define socket(a,b,c) lwip_socket(a,b,c) -#define select(a,b,c,d,e) lwip_select(a,b,c,d,e) -#define ioctlsocket(a,b,c) lwip_ioctl(a,b,c) - - -#if LWIP_POSIX_SOCKETS_IO_NAMES -#define read(a,b,c) lwip_read(a,b,c) -#define write(a,b,c) lwip_write(a,b,c) -#define close(s) lwip_close(s) -#define fcntl(a,b,c) lwip_fcntl(a,b,c) -#endif /* LWIP_POSIX_SOCKETS_IO_NAMES */ - -#endif /* LWIP_COMPAT_SOCKETS */ - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_SOCKET */ - -#endif /* __LWIP_SOCKETS_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/stats.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/stats.h deleted file mode 100644 index e5be44f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/stats.h +++ /dev/null @@ -1,292 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_STATS_H__ -#define __LWIP_STATS_H__ - -#include "lwip/opt.h" - -#include "lwip/mem.h" -#include "lwip/memp.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if LWIP_STATS - -#ifndef LWIP_STATS_LARGE -#define LWIP_STATS_LARGE 0 -#endif - -#if LWIP_STATS_LARGE -#define STAT_COUNTER uint32_t -#define STAT_COUNTER_F U32_F -#else -#define STAT_COUNTER uint16_t -#define STAT_COUNTER_F U16_F -#endif - -struct stats_proto { - STAT_COUNTER xmit; /* Transmitted packets. */ - STAT_COUNTER recv; /* Received packets. */ - STAT_COUNTER fw; /* Forwarded packets. */ - STAT_COUNTER drop; /* Dropped packets. */ - STAT_COUNTER chkerr; /* Checksum error. */ - STAT_COUNTER lenerr; /* Invalid length error. */ - STAT_COUNTER memerr; /* Out of memory error. */ - STAT_COUNTER rterr; /* Routing error. */ - STAT_COUNTER proterr; /* Protocol error. */ - STAT_COUNTER opterr; /* Error in options. */ - STAT_COUNTER err; /* Misc error. */ - STAT_COUNTER cachehit; -}; - -struct stats_igmp { - STAT_COUNTER xmit; /* Transmitted packets. */ - STAT_COUNTER recv; /* Received packets. */ - STAT_COUNTER drop; /* Dropped packets. */ - STAT_COUNTER chkerr; /* Checksum error. */ - STAT_COUNTER lenerr; /* Invalid length error. */ - STAT_COUNTER memerr; /* Out of memory error. */ - STAT_COUNTER proterr; /* Protocol error. */ - STAT_COUNTER rx_v1; /* Received v1 frames. */ - STAT_COUNTER rx_group; /* Received group-specific queries. */ - STAT_COUNTER rx_general; /* Received general queries. */ - STAT_COUNTER rx_report; /* Received reports. */ - STAT_COUNTER tx_join; /* Sent joins. */ - STAT_COUNTER tx_leave; /* Sent leaves. */ - STAT_COUNTER tx_report; /* Sent reports. */ -}; - -struct stats_mem { -#ifdef LWIP_DEBUG - const char *name; -#endif /* LWIP_DEBUG */ - mem_size_t avail; - mem_size_t used; - mem_size_t max; - STAT_COUNTER err; - STAT_COUNTER illegal; -}; - -struct stats_syselem { - STAT_COUNTER used; - STAT_COUNTER max; - STAT_COUNTER err; -}; - -struct stats_sys { - struct stats_syselem sem; - struct stats_syselem mutex; - struct stats_syselem mbox; -}; - -struct stats_ { -#if LINK_STATS - struct stats_proto link; -#endif -#if ETHARP_STATS - struct stats_proto etharp; -#endif -#if IPFRAG_STATS - struct stats_proto ip_frag; -#endif -#if IP_STATS - struct stats_proto ip; -#endif -#if ICMP_STATS - struct stats_proto icmp; -#endif -#if IGMP_STATS - struct stats_igmp igmp; -#endif -#if UDP_STATS - struct stats_proto udp; -#endif -#if TCP_STATS - struct stats_proto tcp; -#endif -#if MEM_STATS - struct stats_mem mem; -#endif -#if MEMP_STATS - struct stats_mem memp[MEMP_MAX]; -#endif -#if SYS_STATS - struct stats_sys sys; -#endif -}; - -extern struct stats_ lwip_stats; - -void stats_init(void); - -#define STATS_INC(x) ++lwip_stats.x -#define STATS_DEC(x) --lwip_stats.x -#define STATS_INC_USED(x, y) do { lwip_stats.x.used += y; \ - if (lwip_stats.x.max < lwip_stats.x.used) { \ - lwip_stats.x.max = lwip_stats.x.used; \ - } \ - } while(0) -#else /* LWIP_STATS */ -#define stats_init() -#define STATS_INC(x) -#define STATS_DEC(x) -#define STATS_INC_USED(x) -#endif /* LWIP_STATS */ - -#if TCP_STATS -#define TCP_STATS_INC(x) STATS_INC(x) -#define TCP_STATS_DISPLAY() stats_display_proto(&lwip_stats.tcp, "TCP") -#else -#define TCP_STATS_INC(x) -#define TCP_STATS_DISPLAY() -#endif - -#if UDP_STATS -#define UDP_STATS_INC(x) STATS_INC(x) -#define UDP_STATS_DISPLAY() stats_display_proto(&lwip_stats.udp, "UDP") -#else -#define UDP_STATS_INC(x) -#define UDP_STATS_DISPLAY() -#endif - -#if ICMP_STATS -#define ICMP_STATS_INC(x) STATS_INC(x) -#define ICMP_STATS_DISPLAY() stats_display_proto(&lwip_stats.icmp, "ICMP") -#else -#define ICMP_STATS_INC(x) -#define ICMP_STATS_DISPLAY() -#endif - -#if IGMP_STATS -#define IGMP_STATS_INC(x) STATS_INC(x) -#define IGMP_STATS_DISPLAY() stats_display_igmp(&lwip_stats.igmp) -#else -#define IGMP_STATS_INC(x) -#define IGMP_STATS_DISPLAY() -#endif - -#if IP_STATS -#define IP_STATS_INC(x) STATS_INC(x) -#define IP_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip, "IP") -#else -#define IP_STATS_INC(x) -#define IP_STATS_DISPLAY() -#endif - -#if IPFRAG_STATS -#define IPFRAG_STATS_INC(x) STATS_INC(x) -#define IPFRAG_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip_frag, "IP_FRAG") -#else -#define IPFRAG_STATS_INC(x) -#define IPFRAG_STATS_DISPLAY() -#endif - -#if ETHARP_STATS -#define ETHARP_STATS_INC(x) STATS_INC(x) -#define ETHARP_STATS_DISPLAY() stats_display_proto(&lwip_stats.etharp, "ETHARP") -#else -#define ETHARP_STATS_INC(x) -#define ETHARP_STATS_DISPLAY() -#endif - -#if LINK_STATS -#define LINK_STATS_INC(x) STATS_INC(x) -#define LINK_STATS_DISPLAY() stats_display_proto(&lwip_stats.link, "LINK") -#else -#define LINK_STATS_INC(x) -#define LINK_STATS_DISPLAY() -#endif - -#if MEM_STATS -#define MEM_STATS_AVAIL(x, y) lwip_stats.mem.x = y -#define MEM_STATS_INC(x) STATS_INC(mem.x) -#define MEM_STATS_INC_USED(x, y) STATS_INC_USED(mem, y) -#define MEM_STATS_DEC_USED(x, y) lwip_stats.mem.x -= y -#define MEM_STATS_DISPLAY() stats_display_mem(&lwip_stats.mem, "HEAP") -#else -#define MEM_STATS_AVAIL(x, y) -#define MEM_STATS_INC(x) -#define MEM_STATS_INC_USED(x, y) -#define MEM_STATS_DEC_USED(x, y) -#define MEM_STATS_DISPLAY() -#endif - -#if MEMP_STATS -#define MEMP_STATS_AVAIL(x, i, y) lwip_stats.memp[i].x = y -#define MEMP_STATS_INC(x, i) STATS_INC(memp[i].x) -#define MEMP_STATS_DEC(x, i) STATS_DEC(memp[i].x) -#define MEMP_STATS_INC_USED(x, i) STATS_INC_USED(memp[i], 1) -#define MEMP_STATS_DISPLAY(i) stats_display_memp(&lwip_stats.memp[i], i) -#else -#define MEMP_STATS_AVAIL(x, i, y) -#define MEMP_STATS_INC(x, i) -#define MEMP_STATS_DEC(x, i) -#define MEMP_STATS_INC_USED(x, i) -#define MEMP_STATS_DISPLAY(i) -#endif - -#if SYS_STATS -#define SYS_STATS_INC(x) STATS_INC(sys.x) -#define SYS_STATS_DEC(x) STATS_DEC(sys.x) -#define SYS_STATS_INC_USED(x) STATS_INC_USED(sys.x, 1) -#define SYS_STATS_DISPLAY() stats_display_sys(&lwip_stats.sys) -#else -#define SYS_STATS_INC(x) -#define SYS_STATS_DEC(x) -#define SYS_STATS_INC_USED(x) -#define SYS_STATS_DISPLAY() -#endif - -/* Display of statistics */ -#if LWIP_STATS_DISPLAY -void stats_display(void); -void stats_display_proto(struct stats_proto *proto, const char *name); -void stats_display_igmp(struct stats_igmp *igmp); -void stats_display_mem(struct stats_mem *mem, const char *name); -void stats_display_memp(struct stats_mem *mem, int index); -void stats_display_sys(struct stats_sys *sys); -#else /* LWIP_STATS_DISPLAY */ -#define stats_display() -#define stats_display_proto(proto, name) -#define stats_display_igmp(igmp) -#define stats_display_mem(mem, name) -#define stats_display_memp(mem, index) -#define stats_display_sys(sys) -#endif /* LWIP_STATS_DISPLAY */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_STATS_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/sys.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/sys.h deleted file mode 100644 index df18d10..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/sys.h +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_SYS_H__ -#define __LWIP_SYS_H__ - -#include "lwip/opt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if NO_SYS - -/* For a totally minimal and standalone system, we provide null - definitions of the sys_ functions. */ -typedef uint8_t sys_sem_t; -typedef uint8_t sys_mutex_t; -typedef uint8_t sys_mbox_t; - -#define sys_sem_new(s, c) ERR_OK -#define sys_sem_signal(s) -#define sys_sem_wait(s) -#define sys_arch_sem_wait(s,t) -#define sys_sem_free(s) -#define sys_sem_valid(s) 0 -#define sys_sem_set_invalid(s) -#define sys_mutex_new(mu) ERR_OK -#define sys_mutex_lock(mu) -#define sys_mutex_unlock(mu) -#define sys_mutex_free(mu) -#define sys_mutex_valid(mu) 0 -#define sys_mutex_set_invalid(mu) -#define sys_mbox_new(m, s) ERR_OK -#define sys_mbox_fetch(m,d) -#define sys_mbox_tryfetch(m,d) -#define sys_mbox_post(m,d) -#define sys_mbox_trypost(m,d) -#define sys_mbox_free(m) -#define sys_mbox_valid(m) -#define sys_mbox_set_invalid(m) - -#define sys_thread_new(n,t,a,s,p) - -#define sys_msleep(t) - -#else /* NO_SYS */ - -#ifdef _MSC_VER // IntelliSense -typedef void sys_sem_t; -typedef void sys_mutex_t; -typedef void sys_mbox_t; -#endif - -/** Return code for timeouts from sys_arch_mbox_fetch and sys_arch_sem_wait */ -#define SYS_ARCH_TIMEOUT 0xffffffffUL - -/** sys_mbox_tryfetch() returns SYS_MBOX_EMPTY if appropriate. - * For now we use the same magic value, but we allow this to change in future. - */ -#define SYS_MBOX_EMPTY SYS_ARCH_TIMEOUT - -#include "lwip/err.h" -#include "arch/sys_arch.h" - -/** Function prototype for thread functions */ -typedef void (*lwip_thread_fn)(void *arg); - -/* Function prototypes for functions to be implemented by platform ports - (in sys_arch.c) */ - -/* Mutex functions: */ - -/** Define LWIP_COMPAT_MUTEX if the port has no mutexes and binary semaphores - should be used instead */ -#if LWIP_COMPAT_MUTEX -/* for old ports that don't have mutexes: define them to binary semaphores */ -#define sys_mutex_t sys_sem_t -#define sys_mutex_new(mutex) sys_sem_new(mutex, 1) -#define sys_mutex_lock(mutex) sys_sem_wait(mutex) -#define sys_mutex_unlock(mutex) sys_sem_signal(mutex) -#define sys_mutex_free(mutex) sys_sem_free(mutex) -#define sys_mutex_valid(mutex) sys_sem_valid(mutex) -#define sys_mutex_set_invalid(mutex) sys_sem_set_invalid(mutex) - -#else /* LWIP_COMPAT_MUTEX */ - -/** Create a new mutex - * @param mutex pointer to the mutex to create - * @return a new mutex */ -err_t sys_mutex_new(sys_mutex_t *mutex); -/** Lock a mutex - * @param mutex the mutex to lock */ -void sys_mutex_lock(sys_mutex_t *mutex); -/** Unlock a mutex - * @param mutex the mutex to unlock */ -void sys_mutex_unlock(sys_mutex_t *mutex); -/** Delete a semaphore - * @param mutex the mutex to delete */ -void sys_mutex_free(sys_mutex_t *mutex); -#ifndef sys_mutex_valid -/** Check if a mutex is valid/allocated: return 1 for valid, 0 for invalid */ -int sys_mutex_valid(sys_mutex_t *mutex); -#endif -#ifndef sys_mutex_set_invalid -/** Set a mutex invalid so that sys_mutex_valid returns 0 */ -void sys_mutex_set_invalid(sys_mutex_t *mutex); -#endif -#endif /* LWIP_COMPAT_MUTEX */ - -/* Semaphore functions: */ - -/** Create a new semaphore - * @param sem pointer to the semaphore to create - * @param count initial count of the semaphore - * @return ERR_OK if successful, another err_t otherwise */ -err_t sys_sem_new(sys_sem_t *sem, uint8_t count); -/** Signals a semaphore - * @param sem the semaphore to signal */ -void sys_sem_signal(sys_sem_t *sem); -/** Wait for a semaphore for the specified timeout - * @param sem the semaphore to wait for - * @param timeout timeout in milliseconds to wait (0 = wait forever) - * @return time (in milliseconds) waited for the semaphore - * or SYS_ARCH_TIMEOUT on timeout */ -uint32_t sys_arch_sem_wait(sys_sem_t *sem, uint32_t timeout); -/** Delete a semaphore - * @param sem semaphore to delete */ -void sys_sem_free(sys_sem_t *sem); -/** Wait for a semaphore - forever/no timeout */ -#define sys_sem_wait(sem) sys_arch_sem_wait(sem, 0) -#ifndef sys_sem_valid -/** Check if a sempahore is valid/allocated: return 1 for valid, 0 for invalid */ -int sys_sem_valid(sys_sem_t *sem); -#endif -#ifndef sys_sem_set_invalid -/** Set a semaphore invalid so that sys_sem_valid returns 0 */ -void sys_sem_set_invalid(sys_sem_t *sem); -#endif - -/* Time functions. */ -#ifndef sys_msleep -void sys_msleep(uint32_t ms); /* only has a (close to) 1 jiffy resolution. */ -#endif - -/* Mailbox functions. */ - -/** Create a new mbox of specified size - * @param mbox pointer to the mbox to create - * @param size (miminum) number of messages in this mbox - * @return ERR_OK if successful, another err_t otherwise */ -err_t sys_mbox_new(sys_mbox_t *mbox, int size); -/** Post a message to an mbox - may not fail - * -> blocks if full, only used from tasks not from ISR - * @param mbox mbox to posts the message - * @param msg message to post (ATTENTION: can be NULL) */ -void sys_mbox_post(sys_mbox_t *mbox, void *msg); -/** Try to post a message to an mbox - may fail if full or ISR - * @param mbox mbox to posts the message - * @param msg message to post (ATTENTION: can be NULL) */ -err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg); -/** Wait for a new message to arrive in the mbox - * @param mbox mbox to get a message from - * @param msg pointer where the message is stored - * @param timeout maximum time (in milliseconds) to wait for a message - * @return time (in milliseconds) waited for a message, may be 0 if not waited - or SYS_ARCH_TIMEOUT on timeout - * The returned time has to be accurate to prevent timer jitter! */ -uint32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, uint32_t timeout); -/* Allow port to override with a macro, e.g. special timout for sys_arch_mbox_fetch() */ -#ifndef sys_arch_mbox_tryfetch -/** Wait for a new message to arrive in the mbox - * @param mbox mbox to get a message from - * @param msg pointer where the message is stored - * @param timeout maximum time (in milliseconds) to wait for a message - * @return 0 (milliseconds) if a message has been received - * or SYS_MBOX_EMPTY if the mailbox is empty */ -uint32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg); -#endif -/** For now, we map straight to sys_arch implementation. */ -#define sys_mbox_tryfetch(mbox, msg) sys_arch_mbox_tryfetch(mbox, msg) -/** Delete an mbox - * @param mbox mbox to delete */ -void sys_mbox_free(sys_mbox_t *mbox); -#define sys_mbox_fetch(mbox, msg) sys_arch_mbox_fetch(mbox, msg, 0) -#ifndef sys_mbox_valid -/** Check if an mbox is valid/allocated: return 1 for valid, 0 for invalid */ -int sys_mbox_valid(sys_mbox_t *mbox); -#endif -#ifndef sys_mbox_set_invalid -/** Set an mbox invalid so that sys_mbox_valid returns 0 */ -void sys_mbox_set_invalid(sys_mbox_t *mbox); -#endif - -/** The only thread function: - * Creates a new thread - * @param name human-readable name for the thread (used for debugging purposes) - * @param thread thread-function - * @param arg parameter passed to 'thread' - * @param stacksize stack size in bytes for the new thread (may be ignored by ports) - * @param prio priority of the new thread (may be ignored by ports) */ -sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio); -//sys_thread_t sys_thread_new_tcm(const char *name, lwip_thread_fn thread , void *arg, int stacksize, int prio); - -#endif /* NO_SYS */ - -/* sys_init() must be called before anthing else. */ -void sys_init(void); - -#ifndef sys_jiffies -/** Ticks/jiffies since power up. */ -uint32_t sys_jiffies(void); -#endif - -/** Returns the current time in milliseconds, - * may be the same as sys_jiffies or at least based on it. */ -uint32_t sys_now(void); - -/* Critical Region Protection */ -/* These functions must be implemented in the sys_arch.c file. - In some implementations they can provide a more light-weight protection - mechanism than using semaphores. Otherwise semaphores can be used for - implementation */ -#ifndef SYS_ARCH_PROTECT -/** SYS_LIGHTWEIGHT_PROT - * define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection - * for certain critical regions during buffer allocation, deallocation and memory - * allocation and deallocation. - */ -#if SYS_LIGHTWEIGHT_PROT - -/** SYS_ARCH_DECL_PROTECT - * declare a protection variable. This macro will default to defining a variable of - * type sys_prot_t. If a particular port needs a different implementation, then - * this macro may be defined in sys_arch.h. - */ -#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev -/** SYS_ARCH_PROTECT - * Perform a "fast" protect. This could be implemented by - * disabling interrupts for an embedded system or by using a semaphore or - * mutex. The implementation should allow calling SYS_ARCH_PROTECT when - * already protected. The old protection level is returned in the variable - * "lev". This macro will default to calling the sys_arch_protect() function - * which should be implemented in sys_arch.c. If a particular port needs a - * different implementation, then this macro may be defined in sys_arch.h - */ -#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect() -/** SYS_ARCH_UNPROTECT - * Perform a "fast" set of the protection level to "lev". This could be - * implemented by setting the interrupt level to "lev" within the MACRO or by - * using a semaphore or mutex. This macro will default to calling the - * sys_arch_unprotect() function which should be implemented in - * sys_arch.c. If a particular port needs a different implementation, then - * this macro may be defined in sys_arch.h - */ -#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev) -sys_prot_t sys_arch_protect(void); -void sys_arch_unprotect(sys_prot_t pval); - -#else - -#define SYS_ARCH_DECL_PROTECT(lev) -#define SYS_ARCH_PROTECT(lev) -#define SYS_ARCH_UNPROTECT(lev) - -#endif /* SYS_LIGHTWEIGHT_PROT */ - -#endif /* SYS_ARCH_PROTECT */ - -/* - * Macros to set/get and increase/decrease variables in a thread-safe way. - * Use these for accessing variable that are used from more than one thread. - */ - -#ifndef SYS_ARCH_INC -#define SYS_ARCH_INC(var, val) do { \ - SYS_ARCH_DECL_PROTECT(old_level); \ - SYS_ARCH_PROTECT(old_level); \ - var += val; \ - SYS_ARCH_UNPROTECT(old_level); \ - } while(0) -#endif /* SYS_ARCH_INC */ - -#ifndef SYS_ARCH_DEC -#define SYS_ARCH_DEC(var, val) do { \ - SYS_ARCH_DECL_PROTECT(old_level); \ - SYS_ARCH_PROTECT(old_level); \ - var -= val; \ - SYS_ARCH_UNPROTECT(old_level); \ - } while(0) -#endif /* SYS_ARCH_DEC */ - -#ifndef SYS_ARCH_GET -#define SYS_ARCH_GET(var, ret) do { \ - SYS_ARCH_DECL_PROTECT(old_level); \ - SYS_ARCH_PROTECT(old_level); \ - ret = var; \ - SYS_ARCH_UNPROTECT(old_level); \ - } while(0) -#endif /* SYS_ARCH_GET */ - -#ifndef SYS_ARCH_SET -#define SYS_ARCH_SET(var, val) do { \ - SYS_ARCH_DECL_PROTECT(old_level); \ - SYS_ARCH_PROTECT(old_level); \ - var = val; \ - SYS_ARCH_UNPROTECT(old_level); \ - } while(0) -#endif /* SYS_ARCH_SET */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_SYS_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/tcp.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/tcp.h deleted file mode 100644 index c449964..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/tcp.h +++ /dev/null @@ -1,381 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_TCP_H__ -#define __LWIP_TCP_H__ - -#include "lwip/opt.h" - -#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ -#include "lwip/sys.h" -#include "lwip/mem.h" -#include "lwip/pbuf.h" -#include "lwip/ip.h" -#include "lwip/icmp.h" -#include "lwip/err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct tcp_pcb; - -extern struct tcp_pcb *tcp_tw_pcbs; /* List of all TCP PCBs in TIME-WAIT. */ - -/** Function prototype for tcp accept callback functions. Called when a new - * connection can be accepted on a listening pcb. - * - * @param arg Additional argument to pass to the callback function (@see tcp_arg()) - * @param newpcb The new connection pcb - * @param err An error code if there has been an error accepting. - * Only return ERR_ABRT if you have called tcp_abort from within the - * callback function! - */ -typedef err_t (*tcp_accept_fn)(void *arg, struct tcp_pcb *newpcb, err_t err); - -/** Function prototype for tcp receive callback functions. Called when data has - * been received. - * - * @param arg Additional argument to pass to the callback function (@see tcp_arg()) - * @param tpcb The connection pcb which received data - * @param p The received data (or NULL when the connection has been closed!) - * @param err An error code if there has been an error receiving - * Only return ERR_ABRT if you have called tcp_abort from within the - * callback function! - */ -typedef err_t (*tcp_recv_fn)(void *arg, struct tcp_pcb *tpcb, - struct pbuf *p, err_t err); - -/** Function prototype for tcp sent callback functions. Called when sent data has - * been acknowledged by the remote side. Use it to free corresponding resources. - * This also means that the pcb has now space available to send new data. - * - * @param arg Additional argument to pass to the callback function (@see tcp_arg()) - * @param tpcb The connection pcb for which data has been acknowledged - * @param len The amount of bytes acknowledged - * @return ERR_OK: try to send some data by calling tcp_output - * Only return ERR_ABRT if you have called tcp_abort from within the - * callback function! - */ -typedef err_t (*tcp_sent_fn)(void *arg, struct tcp_pcb *tpcb, - uint16_t len); - -/** Function prototype for tcp poll callback functions. Called periodically as - * specified by @see tcp_poll. - * - * @param arg Additional argument to pass to the callback function (@see tcp_arg()) - * @param tpcb tcp pcb - * @return ERR_OK: try to send some data by calling tcp_output - * Only return ERR_ABRT if you have called tcp_abort from within the - * callback function! - */ -typedef err_t (*tcp_poll_fn)(void *arg, struct tcp_pcb *tpcb); - -/** Function prototype for tcp error callback functions. Called when the pcb - * receives a RST or is unexpectedly closed for any other reason. - * - * @note The corresponding pcb is already freed when this callback is called! - * - * @param arg Additional argument to pass to the callback function (@see tcp_arg()) - * @param err Error code to indicate why the pcb has been closed - * ERR_ABRT: aborted through tcp_abort or by a TCP timer - * ERR_RST: the connection was reset by the remote host - */ -typedef void (*tcp_err_fn)(void *arg, err_t err); - -/** Function prototype for tcp connected callback functions. Called when a pcb - * is connected to the remote side after initiating a connection attempt by - * calling tcp_connect(). - * - * @param arg Additional argument to pass to the callback function (@see tcp_arg()) - * @param tpcb The connection pcb which is connected - * @param err An unused error code, always ERR_OK currently ;-) TODO! - * Only return ERR_ABRT if you have called tcp_abort from within the - * callback function! - * - * @note When a connection attempt fails, the error callback is currently called! - */ -typedef err_t (*tcp_connected_fn)(void *arg, struct tcp_pcb *tpcb, err_t err); - -enum tcp_state { - CLOSED = 0, - LISTEN = 1, - SYN_SENT = 2, - SYN_RCVD = 3, - ESTABLISHED = 4, - FIN_WAIT_1 = 5, - FIN_WAIT_2 = 6, - CLOSE_WAIT = 7, - CLOSING = 8, - LAST_ACK = 9, - TIME_WAIT = 10 -}; - -#if LWIP_CALLBACK_API - /* Function to call when a listener has been connected. - * @param arg user-supplied argument (tcp_pcb.callback_arg) - * @param pcb a new tcp_pcb that now is connected - * @param err an error argument (TODO: that is current always ERR_OK?) - * @return ERR_OK: accept the new connection, - * any other err_t abortsthe new connection - */ -#define DEF_ACCEPT_CALLBACK tcp_accept_fn accept; -#else /* LWIP_CALLBACK_API */ -#define DEF_ACCEPT_CALLBACK -#endif /* LWIP_CALLBACK_API */ - -/** - * members common to struct tcp_pcb and struct tcp_listen_pcb - */ -#define TCP_PCB_COMMON(type) \ - type *next; /* for the linked list */ \ - void *callback_arg; \ - /* the accept callback for listen- and normal pcbs, if LWIP_CALLBACK_API */ \ - DEF_ACCEPT_CALLBACK \ - enum tcp_state state; /* TCP state */ \ - uint8_t prio; \ - /* ports are in host byte order */ \ - uint16_t local_port - - -/* the TCP protocol control block */ -struct tcp_pcb { -/** common PCB members */ - IP_PCB; -/** protocol specific PCB members */ - TCP_PCB_COMMON(struct tcp_pcb); - - /* ports are in host byte order */ - uint16_t remote_port; - - uint8_t flags; -#define TF_ACK_DELAY ((uint8_t)0x01U) /* Delayed ACK. */ -#define TF_ACK_NOW ((uint8_t)0x02U) /* Immediate ACK. */ -#define TF_INFR ((uint8_t)0x04U) /* In fast recovery. */ -#define TF_TIMESTAMP ((uint8_t)0x08U) /* Timestamp option enabled */ -#define TF_RXCLOSED ((uint8_t)0x10U) /* rx closed by tcp_shutdown */ -#define TF_FIN ((uint8_t)0x20U) /* Connection was closed locally (FIN segment enqueued). */ -#define TF_NODELAY ((uint8_t)0x40U) /* Disable Nagle algorithm */ -#define TF_NAGLEMEMERR ((uint8_t)0x80U) /* nagle enabled, memerr, try to output to prevent delayed ACK to happen */ - - /* the rest of the fields are in host byte order - as we have to do some math with them */ - - /* Timers */ - uint8_t polltmr, pollinterval; - uint8_t last_timer; - uint32_t tmr; - - /* receiver variables */ - uint32_t rcv_nxt; /* next seqno expected */ - uint16_t rcv_wnd; /* receiver window available */ - uint16_t rcv_ann_wnd; /* receiver window to announce */ - uint32_t rcv_ann_right_edge; /* announced right edge of window */ - - /* Retransmission timer. */ - int16_t rtime; - - uint16_t mss; /* maximum segment size */ - - /* RTT (round trip time) estimation variables */ - uint32_t rttest; /* RTT estimate in 500ms ticks */ - uint32_t rtseq; /* sequence number being timed */ - int16_t sa, sv; /* @todo document this */ - - int16_t rto; /* retransmission time-out */ - uint8_t nrtx; /* number of retransmissions */ - - /* fast retransmit/recovery */ - uint8_t dupacks; - uint32_t lastack; /* Highest acknowledged seqno. */ - - /* congestion avoidance/control variables */ - uint16_t cwnd; - uint16_t ssthresh; - - /* sender variables */ - uint32_t snd_nxt; /* next new seqno to be sent */ - uint32_t snd_wl1, snd_wl2; /* Sequence and acknowledgement numbers of last - window update. */ - uint32_t snd_lbb; /* Sequence number of next byte to be buffered. */ - uint16_t snd_wnd; /* sender window */ - uint16_t snd_wnd_max; /* the maximum sender window announced by the remote host */ - - uint16_t acked; - - uint16_t snd_buf; /* Available buffer space for sending (in bytes). */ -#define TCP_SNDQUEUELEN_OVERFLOW (0xffffU-3) - uint16_t snd_queuelen; /* Available buffer space for sending (in tcp_segs). */ - -#if TCP_OVERSIZE - /* Extra bytes available at the end of the last pbuf in unsent. */ - uint16_t unsent_oversize; -#endif /* TCP_OVERSIZE */ - - /* These are ordered by sequence number: */ - struct tcp_seg *unsent; /* Unsent (queued) segments. */ - struct tcp_seg *unacked; /* Sent but unacknowledged segments. */ -#if TCP_QUEUE_OOSEQ - struct tcp_seg *ooseq; /* Received out of sequence segments. */ -#endif /* TCP_QUEUE_OOSEQ */ - - struct pbuf *refused_data; /* Data previously received but not yet taken by upper layer */ - -#if LWIP_CALLBACK_API - /* Function to be called when more send buffer space is available. */ - tcp_sent_fn sent; - /* Function to be called when (in-sequence) data has arrived. */ - tcp_recv_fn recv; - /* Function to be called when a connection has been set up. */ - tcp_connected_fn connected; - /* Function which is called periodically. */ - tcp_poll_fn poll; - /* Function to be called whenever a fatal error occurs. */ - tcp_err_fn errf; -#endif /* LWIP_CALLBACK_API */ - -#if LWIP_TCP_TIMESTAMPS - uint32_t ts_lastacksent; - uint32_t ts_recent; -#endif /* LWIP_TCP_TIMESTAMPS */ - - /* idle time before KEEPALIVE is sent */ - uint32_t keep_idle; -#if LWIP_TCP_KEEPALIVE - uint32_t keep_intvl; - uint32_t keep_cnt; -#endif /* LWIP_TCP_KEEPALIVE */ - - /* Persist timer counter */ - uint8_t persist_cnt; - /* Persist timer back-off */ - uint8_t persist_backoff; - - /* KEEPALIVE counter */ - uint8_t keep_cnt_sent; -}; - -struct tcp_pcb_listen { -/* Common members of all PCB types */ - IP_PCB; -/* Protocol specific PCB members */ - TCP_PCB_COMMON(struct tcp_pcb_listen); - -#if TCP_LISTEN_BACKLOG - uint8_t backlog; - uint8_t accepts_pending; -#endif /* TCP_LISTEN_BACKLOG */ -}; - -#if LWIP_EVENT_API - -enum lwip_event { - LWIP_EVENT_ACCEPT, - LWIP_EVENT_SENT, - LWIP_EVENT_RECV, - LWIP_EVENT_CONNECTED, - LWIP_EVENT_POLL, - LWIP_EVENT_ERR -}; - -err_t lwip_tcp_event(void *arg, struct tcp_pcb *pcb, - enum lwip_event, - struct pbuf *p, - uint16_t size, - err_t err); - -#endif /* LWIP_EVENT_API */ - -/* Application program's interface: */ -struct tcp_pcb * tcp_new (void); - -void tcp_arg (struct tcp_pcb *pcb, void *arg); -void tcp_accept (struct tcp_pcb *pcb, tcp_accept_fn accept); -void tcp_recv (struct tcp_pcb *pcb, tcp_recv_fn recv); -void tcp_sent (struct tcp_pcb *pcb, tcp_sent_fn sent); -void tcp_poll (struct tcp_pcb *pcb, tcp_poll_fn poll, uint8_t interval); -void tcp_err (struct tcp_pcb *pcb, tcp_err_fn err); - -#define tcp_mss(pcb) (((pcb)->flags & TF_TIMESTAMP) ? ((pcb)->mss - 12) : (pcb)->mss) -#define tcp_sndbuf(pcb) ((pcb)->snd_buf) -#define tcp_sndqueuelen(pcb) ((pcb)->snd_queuelen) -#define tcp_nagle_disable(pcb) ((pcb)->flags |= TF_NODELAY) -#define tcp_nagle_enable(pcb) ((pcb)->flags &= ~TF_NODELAY) -#define tcp_nagle_disabled(pcb) (((pcb)->flags & TF_NODELAY) != 0) - -#if TCP_LISTEN_BACKLOG -#define tcp_accepted(pcb) do { \ - LWIP_ASSERT("pcb->state == LISTEN (called for wrong pcb?)", pcb->state == LISTEN); \ - (((struct tcp_pcb_listen *)(pcb))->accepts_pending--); } while(0) -#else /* TCP_LISTEN_BACKLOG */ -#define tcp_accepted(pcb) LWIP_ASSERT("pcb->state == LISTEN (called for wrong pcb?)", \ - (pcb)->state == LISTEN) -#endif /* TCP_LISTEN_BACKLOG */ - -void tcp_recved (struct tcp_pcb *pcb, uint16_t len); -err_t tcp_bind (struct tcp_pcb *pcb, ip_addr_t *ipaddr, - uint16_t port); -err_t tcp_connect (struct tcp_pcb *pcb, ip_addr_t *ipaddr, - uint16_t port, tcp_connected_fn connected); - -struct tcp_pcb * tcp_listen_with_backlog(struct tcp_pcb *pcb, uint8_t backlog); -#define tcp_listen(pcb) tcp_listen_with_backlog(pcb, TCP_DEFAULT_LISTEN_BACKLOG) - -void tcp_abort (struct tcp_pcb *pcb); -err_t tcp_close (struct tcp_pcb *pcb); -err_t tcp_shutdown(struct tcp_pcb *pcb, int shut_rx, int shut_tx); - -/* Flags for "apiflags" parameter in tcp_write */ -#define TCP_WRITE_FLAG_COPY 0x01 -#define TCP_WRITE_FLAG_MORE 0x02 - -err_t tcp_write (struct tcp_pcb *pcb, const void *dataptr, uint16_t len, - uint8_t apiflags); - -void tcp_setprio (struct tcp_pcb *pcb, uint8_t prio); - -#define TCP_PRIO_MIN 1 -#define TCP_PRIO_NORMAL 64 -#define TCP_PRIO_MAX 127 - -err_t tcp_output (struct tcp_pcb *pcb); - - -const char* tcp_debug_state_str(enum tcp_state s); - - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_TCP */ - -#endif /* __LWIP_TCP_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/tcp_impl.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/tcp_impl.h deleted file mode 100644 index e3d749d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/tcp_impl.h +++ /dev/null @@ -1,486 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_TCP_IMPL_H__ -#define __LWIP_TCP_IMPL_H__ - -#include "lwip/opt.h" - -#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/tcp.h" -#include "lwip/mem.h" -#include "lwip/pbuf.h" -#include "lwip/ip.h" -#include "lwip/icmp.h" -#include "lwip/err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Functions for interfacing with TCP: */ - -/* Lower layer interface to TCP: */ -void tcp_init (void); /* Initialize this module. */ -void tcp_tmr (void); /* Must be called every - TCP_TMR_INTERVAL - ms. (Typically 250 ms). */ -/* It is also possible to call these two functions at the right - intervals (instead of calling tcp_tmr()). */ -void tcp_slowtmr (void); -void tcp_fasttmr (void); - - -/* Only used by IP to pass a TCP segment to TCP: */ -void tcp_input (struct pbuf *p, struct netif *inp); -/* Used within the TCP code only: */ -struct tcp_pcb * tcp_alloc (uint8_t prio); -void tcp_abandon (struct tcp_pcb *pcb, int reset); -err_t tcp_send_empty_ack(struct tcp_pcb *pcb); -void tcp_rexmit (struct tcp_pcb *pcb); -void tcp_rexmit_rto (struct tcp_pcb *pcb); -void tcp_rexmit_fast (struct tcp_pcb *pcb); -uint32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb); -err_t tcp_process_refused_data(struct tcp_pcb *pcb); - -/** - * This is the Nagle algorithm: try to combine user data to send as few TCP - * segments as possible. Only send if - * - no previously transmitted data on the connection remains unacknowledged or - * - the TF_NODELAY flag is set (nagle algorithm turned off for this pcb) or - * - the only unsent segment is at least pcb->mss bytes long (or there is more - * than one unsent segment - with lwIP, this can happen although unsent->len < mss) - * - or if we are in fast-retransmit (TF_INFR) - */ -#define tcp_do_output_nagle(tpcb) ((((tpcb)->unacked == NULL) || \ - ((tpcb)->flags & (TF_NODELAY | TF_INFR)) || \ - (((tpcb)->unsent != NULL) && (((tpcb)->unsent->next != NULL) || \ - ((tpcb)->unsent->len >= (tpcb)->mss))) || \ - ((tcp_sndbuf(tpcb) == 0) || (tcp_sndqueuelen(tpcb) >= TCP_SND_QUEUELEN)) \ - ) ? 1 : 0) -#define tcp_output_nagle(tpcb) (tcp_do_output_nagle(tpcb) ? tcp_output(tpcb) : ERR_OK) - - -#define TCP_SEQ_LT(a,b) ((int32_t)((uint32_t)(a) - (uint32_t)(b)) < 0) -#define TCP_SEQ_LEQ(a,b) ((int32_t)((uint32_t)(a) - (uint32_t)(b)) <= 0) -#define TCP_SEQ_GT(a,b) ((int32_t)((uint32_t)(a) - (uint32_t)(b)) > 0) -#define TCP_SEQ_GEQ(a,b) ((int32_t)((uint32_t)(a) - (uint32_t)(b)) >= 0) -/* is b<=a<=c? */ -#if 0 /* see bug #10548 */ -#define TCP_SEQ_BETWEEN(a,b,c) ((c)-(b) >= (a)-(b)) -#endif -#define TCP_SEQ_BETWEEN(a,b,c) (TCP_SEQ_GEQ(a,b) && TCP_SEQ_LEQ(a,c)) -#define TCP_FIN 0x01U -#define TCP_SYN 0x02U -#define TCP_RST 0x04U -#define TCP_PSH 0x08U -#define TCP_ACK 0x10U -#define TCP_URG 0x20U -#define TCP_ECE 0x40U -#define TCP_CWR 0x80U - -#define TCP_FLAGS 0x3fU - -/* Length of the TCP header, excluding options. */ -#define TCP_HLEN 20 - -#ifndef TCP_TMR_INTERVAL -#define TCP_TMR_INTERVAL 250 /* The TCP timer interval in milliseconds. */ -#endif /* TCP_TMR_INTERVAL */ - -#ifndef TCP_FAST_INTERVAL -#define TCP_FAST_INTERVAL TCP_TMR_INTERVAL /* the fine grained timeout in milliseconds */ -#endif /* TCP_FAST_INTERVAL */ - -#ifndef TCP_SLOW_INTERVAL -#define TCP_SLOW_INTERVAL (2*TCP_TMR_INTERVAL) /* the coarse grained timeout in milliseconds */ -#endif /* TCP_SLOW_INTERVAL */ - -#define TCP_FIN_WAIT_TIMEOUT 20000 /* milliseconds */ -#define TCP_SYN_RCVD_TIMEOUT 20000 /* milliseconds */ - -#define TCP_OOSEQ_TIMEOUT 6U /* x RTO */ - -#ifndef TCP_MSL -#define TCP_MSL 60000UL /* The maximum segment lifetime in milliseconds */ -#endif - -/* Keepalive values, compliant with RFC 1122. Don't change this unless you know what you're doing */ -#ifndef TCP_KEEPIDLE_DEFAULT -#define TCP_KEEPIDLE_DEFAULT 7200000UL /* Default KEEPALIVE timer in milliseconds */ -#endif - -#ifndef TCP_KEEPINTVL_DEFAULT -#define TCP_KEEPINTVL_DEFAULT 75000UL /* Default Time between KEEPALIVE probes in milliseconds */ -#endif - -#ifndef TCP_KEEPCNT_DEFAULT -#define TCP_KEEPCNT_DEFAULT 9U /* Default Counter for KEEPALIVE probes */ -#endif - -#define TCP_MAXIDLE TCP_KEEPCNT_DEFAULT * TCP_KEEPINTVL_DEFAULT /* Maximum KEEPALIVE probe time */ - -/* Fields are (of course) in network byte order. - * Some fields are converted to host byte order in tcp_input(). - */ -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct tcp_hdr { - PACK_STRUCT_FIELD(uint16_t src); - PACK_STRUCT_FIELD(uint16_t dest); - PACK_STRUCT_FIELD(uint32_t seqno); - PACK_STRUCT_FIELD(uint32_t ackno); - PACK_STRUCT_FIELD(uint16_t _hdrlen_rsvd_flags); - PACK_STRUCT_FIELD(uint16_t wnd); - PACK_STRUCT_FIELD(uint16_t chksum); - PACK_STRUCT_FIELD(uint16_t urgp); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -#define TCPH_HDRLEN(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 12) -#define TCPH_FLAGS(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) & TCP_FLAGS) - -#define TCPH_HDRLEN_SET(phdr, len) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | TCPH_FLAGS(phdr)) -#define TCPH_FLAGS_SET(phdr, flags) (phdr)->_hdrlen_rsvd_flags = (((phdr)->_hdrlen_rsvd_flags & PP_HTONS((uint16_t)(~(uint16_t)(TCP_FLAGS)))) | htons(flags)) -#define TCPH_HDRLEN_FLAGS_SET(phdr, len, flags) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | (flags)) - -#define TCPH_SET_FLAG(phdr, flags ) (phdr)->_hdrlen_rsvd_flags = ((phdr)->_hdrlen_rsvd_flags | htons(flags)) -#define TCPH_UNSET_FLAG(phdr, flags) (phdr)->_hdrlen_rsvd_flags = htons(ntohs((phdr)->_hdrlen_rsvd_flags) | (TCPH_FLAGS(phdr) & ~(flags)) ) - -#define TCP_TCPLEN(seg) ((seg)->len + ((TCPH_FLAGS((seg)->tcphdr) & (TCP_FIN | TCP_SYN)) != 0)) - -/** Flags used on input processing, not on pcb->flags -*/ -#define TF_RESET (uint8_t)0x08U /* Connection was reset. */ -#define TF_CLOSED (uint8_t)0x10U /* Connection was sucessfully closed. */ -#define TF_GOT_FIN (uint8_t)0x20U /* Connection was closed by the remote end. */ - - -#if LWIP_EVENT_API - -#define TCP_EVENT_ACCEPT(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ - LWIP_EVENT_ACCEPT, NULL, 0, err) -#define TCP_EVENT_SENT(pcb,space,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ - LWIP_EVENT_SENT, NULL, space, ERR_OK) -#define TCP_EVENT_RECV(pcb,p,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ - LWIP_EVENT_RECV, (p), 0, (err)) -#define TCP_EVENT_CLOSED(pcb,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ - LWIP_EVENT_RECV, NULL, 0, ERR_OK) -#define TCP_EVENT_CONNECTED(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ - LWIP_EVENT_CONNECTED, NULL, 0, (err)) -#define TCP_EVENT_POLL(pcb,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ - LWIP_EVENT_POLL, NULL, 0, ERR_OK) -#define TCP_EVENT_ERR(errf,arg,err) lwip_tcp_event((arg), NULL, \ - LWIP_EVENT_ERR, NULL, 0, (err)) - -#else /* LWIP_EVENT_API */ - -#define TCP_EVENT_ACCEPT(pcb,err,ret) \ - do { \ - if((pcb)->accept != NULL) \ - (ret) = (pcb)->accept((pcb)->callback_arg,(pcb),(err)); \ - else (ret) = ERR_ARG; \ - } while (0) - -#define TCP_EVENT_SENT(pcb,space,ret) \ - do { \ - if((pcb)->sent != NULL) \ - (ret) = (pcb)->sent((pcb)->callback_arg,(pcb),(space)); \ - else (ret) = ERR_OK; \ - } while (0) - -#define TCP_EVENT_RECV(pcb,p,err,ret) \ - do { \ - if((pcb)->recv != NULL) { \ - (ret) = (pcb)->recv((pcb)->callback_arg,(pcb),(p),(err));\ - } else { \ - (ret) = tcp_recv_null(NULL, (pcb), (p), (err)); \ - } \ - } while (0) - -#define TCP_EVENT_CLOSED(pcb,ret) \ - do { \ - if(((pcb)->recv != NULL)) { \ - (ret) = (pcb)->recv((pcb)->callback_arg,(pcb),NULL,ERR_OK);\ - } else { \ - (ret) = ERR_OK; \ - } \ - } while (0) - -#define TCP_EVENT_CONNECTED(pcb,err,ret) \ - do { \ - if((pcb)->connected != NULL) \ - (ret) = (pcb)->connected((pcb)->callback_arg,(pcb),(err)); \ - else (ret) = ERR_OK; \ - } while (0) - -#define TCP_EVENT_POLL(pcb,ret) \ - do { \ - if((pcb)->poll != NULL) \ - (ret) = (pcb)->poll((pcb)->callback_arg,(pcb)); \ - else (ret) = ERR_OK; \ - } while (0) - -#define TCP_EVENT_ERR(errf,arg,err) \ - do { \ - if((errf) != NULL) \ - (errf)((arg),(err)); \ - } while (0) - -#endif /* LWIP_EVENT_API */ - -/** Enabled extra-check for TCP_OVERSIZE if LWIP_DEBUG is enabled */ -#if TCP_OVERSIZE && defined(LWIP_DEBUG) -#define TCP_OVERSIZE_DBGCHECK 1 -#else -#define TCP_OVERSIZE_DBGCHECK 0 -#endif - -/** Don't generate checksum on copy if CHECKSUM_GEN_TCP is disabled */ -#define TCP_CHECKSUM_ON_COPY (LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_TCP) - -/* This structure represents a TCP segment on the unsent, unacked and ooseq queues */ -struct tcp_seg { - struct tcp_seg *next; /* used when putting segements on a queue */ - struct pbuf *p; /* buffer containing data + TCP header */ - uint16_t len; /* the TCP length of this segment */ -#if TCP_OVERSIZE_DBGCHECK - uint16_t oversize_left; /* Extra bytes available at the end of the last - pbuf in unsent (used for asserting vs. - tcp_pcb.unsent_oversized only) */ -#endif /* TCP_OVERSIZE_DBGCHECK */ -#if TCP_CHECKSUM_ON_COPY - uint16_t chksum; - uint8_t chksum_swapped; -#endif /* TCP_CHECKSUM_ON_COPY */ - uint8_t flags; -#define TF_SEG_OPTS_MSS (uint8_t)0x01U /* Include MSS option. */ -#define TF_SEG_OPTS_TS (uint8_t)0x02U /* Include timestamp option. */ -#define TF_SEG_DATA_CHECKSUMMED (uint8_t)0x04U /* ALL data (not the header) is - checksummed into 'chksum' */ - struct tcp_hdr *tcphdr; /* the TCP header */ -}; - -#define LWIP_TCP_OPT_LENGTH(flags) \ - (flags & TF_SEG_OPTS_MSS ? 4 : 0) + \ - (flags & TF_SEG_OPTS_TS ? 12 : 0) - -/** This returns a TCP header option for MSS in an uint32_t */ -#define TCP_BUILD_MSS_OPTION(mss) htonl(0x02040000 | ((mss) & 0xFFFF)) - -/* Global variables: */ -extern struct tcp_pcb *tcp_input_pcb; -extern uint32_t tcp_ticks; -extern uint8_t tcp_active_pcbs_changed; - -/* The TCP PCB lists. */ -union tcp_listen_pcbs_t { /* List of all TCP PCBs in LISTEN state. */ - struct tcp_pcb_listen *listen_pcbs; - struct tcp_pcb *pcbs; -}; -extern struct tcp_pcb *tcp_bound_pcbs; -extern union tcp_listen_pcbs_t tcp_listen_pcbs; -extern struct tcp_pcb *tcp_active_pcbs; /* List of all TCP PCBs that are in a - state in which they accept or send - data. */ -extern struct tcp_pcb *tcp_tw_pcbs; /* List of all TCP PCBs in TIME-WAIT. */ - -extern struct tcp_pcb *tcp_tmp_pcb; /* Only used for temporary storage. */ - -/* Axioms about the above lists: - 1) Every TCP PCB that is not CLOSED is in one of the lists. - 2) A PCB is only in one of the lists. - 3) All PCBs in the tcp_listen_pcbs list is in LISTEN state. - 4) All PCBs in the tcp_tw_pcbs list is in TIME-WAIT state. -*/ -/* Define two macros, TCP_REG and TCP_RMV that registers a TCP PCB - with a PCB list or removes a PCB from a list, respectively. */ -#ifndef TCP_DEBUG_PCB_LISTS -#define TCP_DEBUG_PCB_LISTS 0 -#endif -#if TCP_DEBUG_PCB_LISTS -#define TCP_REG(pcbs, npcb) do {\ - LWIP_DEBUGF(TCP_DEBUG, ("TCP_REG %p local port %d\n", (npcb), (npcb)->local_port)); \ - for(tcp_tmp_pcb = *(pcbs); \ - tcp_tmp_pcb != NULL; \ - tcp_tmp_pcb = tcp_tmp_pcb->next) { \ - LWIP_ASSERT("TCP_REG: already registered\n", tcp_tmp_pcb != (npcb)); \ - } \ - LWIP_ASSERT("TCP_REG: pcb->state != CLOSED", ((pcbs) == &tcp_bound_pcbs) || ((npcb)->state != CLOSED)); \ - (npcb)->next = *(pcbs); \ - LWIP_ASSERT("TCP_REG: npcb->next != npcb", (npcb)->next != (npcb)); \ - *(pcbs) = (npcb); \ - LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \ - tcp_timer_needed(); \ - } while(0) -#define TCP_RMV(pcbs, npcb) do { \ - LWIP_ASSERT("TCP_RMV: pcbs != NULL", *(pcbs) != NULL); \ - LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removing %p from %p\n", (npcb), *(pcbs))); \ - if(*(pcbs) == (npcb)) { \ - *(pcbs) = (*pcbs)->next; \ - } else for(tcp_tmp_pcb = *(pcbs); tcp_tmp_pcb != NULL; tcp_tmp_pcb = tcp_tmp_pcb->next) { \ - if(tcp_tmp_pcb->next == (npcb)) { \ - tcp_tmp_pcb->next = (npcb)->next; \ - break; \ - } \ - } \ - (npcb)->next = NULL; \ - LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \ - LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removed %p from %p\n", (npcb), *(pcbs))); \ - } while(0) - -#else /* LWIP_DEBUG */ - -#define TCP_REG(pcbs, npcb) \ - do { \ - (npcb)->next = *pcbs; \ - *(pcbs) = (npcb); \ - tcp_timer_needed(); \ - } while (0) - -#define TCP_RMV(pcbs, npcb) \ - do { \ - if(*(pcbs) == (npcb)) { \ - (*(pcbs)) = (*pcbs)->next; \ - } \ - else { \ - for(tcp_tmp_pcb = *pcbs; \ - tcp_tmp_pcb != NULL; \ - tcp_tmp_pcb = tcp_tmp_pcb->next) { \ - if(tcp_tmp_pcb->next == (npcb)) { \ - tcp_tmp_pcb->next = (npcb)->next; \ - break; \ - } \ - } \ - } \ - (npcb)->next = NULL; \ - } while(0) - -#endif /* LWIP_DEBUG */ - -#define TCP_REG_ACTIVE(npcb) \ - do { \ - TCP_REG(&tcp_active_pcbs, npcb); \ - tcp_active_pcbs_changed = 1; \ - } while (0) - -#define TCP_RMV_ACTIVE(npcb) \ - do { \ - TCP_RMV(&tcp_active_pcbs, npcb); \ - tcp_active_pcbs_changed = 1; \ - } while (0) - -#define TCP_PCB_REMOVE_ACTIVE(pcb) \ - do { \ - tcp_pcb_remove(&tcp_active_pcbs, pcb); \ - tcp_active_pcbs_changed = 1; \ - } while (0) - - -/* Internal functions: */ -struct tcp_pcb *tcp_pcb_copy(struct tcp_pcb *pcb); -void tcp_pcb_purge(struct tcp_pcb *pcb); -void tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb); - -void tcp_segs_free(struct tcp_seg *seg); -void tcp_seg_free(struct tcp_seg *seg); -struct tcp_seg *tcp_seg_copy(struct tcp_seg *seg); - -#define tcp_ack(pcb) \ - do { \ - if((pcb)->flags & TF_ACK_DELAY) { \ - (pcb)->flags &= ~TF_ACK_DELAY; \ - (pcb)->flags |= TF_ACK_NOW; \ - } \ - else { \ - (pcb)->flags |= TF_ACK_DELAY; \ - } \ - } while (0) - -#define tcp_ack_now(pcb) \ - do { \ - (pcb)->flags |= TF_ACK_NOW; \ - } while (0) - -err_t tcp_send_fin(struct tcp_pcb *pcb); -err_t tcp_enqueue_flags(struct tcp_pcb *pcb, uint8_t flags); - -void tcp_rexmit_seg(struct tcp_pcb *pcb, struct tcp_seg *seg); - -void tcp_rst(uint32_t seqno, uint32_t ackno, - ip_addr_t *local_ip, ip_addr_t *remote_ip, - uint16_t local_port, uint16_t remote_port); - -uint32_t tcp_next_iss(void); - -void tcp_keepalive(struct tcp_pcb *pcb); -void tcp_zero_window_probe(struct tcp_pcb *pcb); - -#if TCP_CALCULATE_EFF_SEND_MSS -uint16_t tcp_eff_send_mss(uint16_t sendmss, ip_addr_t *addr); -#endif /* TCP_CALCULATE_EFF_SEND_MSS */ - -#if LWIP_CALLBACK_API -err_t tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err); -#endif /* LWIP_CALLBACK_API */ - -#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG -void tcp_debug_print(struct tcp_hdr *tcphdr); -void tcp_debug_print_flags(uint8_t flags); -void tcp_debug_print_state(enum tcp_state s); -void tcp_debug_print_pcbs(void); -int16_t tcp_pcbs_sane(void); -#else -# define tcp_debug_print(tcphdr) -# define tcp_debug_print_flags(flags) -# define tcp_debug_print_state(s) -# define tcp_debug_print_pcbs() -# define tcp_pcbs_sane() 1 -#endif /* TCP_DEBUG */ - -/** External function (implemented in timers.c), called when TCP detects - * that a timer is needed (i.e. active- or time-wait-pcb found). */ -void tcp_timer_needed(void); - - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_TCP */ - -#endif /* __LWIP_TCP_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/tcpip.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/tcpip.h deleted file mode 100644 index c3ff4a4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/tcpip.h +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_TCPIP_H__ -#define __LWIP_TCPIP_H__ - -#include "lwip/opt.h" - -#if !NO_SYS /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/api_msg.h" -#include "lwip/netifapi.h" -#include "lwip/pbuf.h" -#include "lwip/api.h" -#include "lwip/sys.h" -#include "lwip/lwip_timers.h" -#include "lwip/netif.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** Define this to something that triggers a watchdog. This is called from - * tcpip_thread after processing a message. */ -#ifndef LWIP_TCPIP_THREAD_ALIVE -#define LWIP_TCPIP_THREAD_ALIVE() -#endif - -#if LWIP_TCPIP_CORE_LOCKING -/** The global semaphore to lock the stack. */ -extern sys_mutex_t lock_tcpip_core; -#define LOCK_TCPIP_CORE() sys_mutex_lock(&lock_tcpip_core) -#define UNLOCK_TCPIP_CORE() sys_mutex_unlock(&lock_tcpip_core) -#define TCPIP_APIMSG(m) tcpip_apimsg_lock(m) -#define TCPIP_APIMSG_ACK(m) -#define TCPIP_NETIFAPI(m) tcpip_netifapi_lock(m) -#define TCPIP_NETIFAPI_ACK(m) -#else /* LWIP_TCPIP_CORE_LOCKING */ -#define LOCK_TCPIP_CORE() -#define UNLOCK_TCPIP_CORE() -#define TCPIP_APIMSG(m) tcpip_apimsg(m) -#define TCPIP_APIMSG_ACK(m) sys_sem_signal(&m->conn->op_completed) -#define TCPIP_NETIFAPI(m) tcpip_netifapi(m) -#define TCPIP_NETIFAPI_ACK(m) sys_sem_signal(&m->sem) -#endif /* LWIP_TCPIP_CORE_LOCKING */ - -/** Function prototype for the init_done function passed to tcpip_init */ -typedef void (*tcpip_init_done_fn)(void *arg); -/** Function prototype for functions passed to tcpip_callback() */ -typedef void (*tcpip_callback_fn)(void *ctx); - -/* Forward declarations */ -struct tcpip_callback_msg; - -void tcpip_init(tcpip_init_done_fn tcpip_init_done, void *arg); - -#if LWIP_NETCONN -err_t tcpip_apimsg(struct api_msg *apimsg); -#if LWIP_TCPIP_CORE_LOCKING -err_t tcpip_apimsg_lock(struct api_msg *apimsg); -#endif /* LWIP_TCPIP_CORE_LOCKING */ -#endif /* LWIP_NETCONN */ - -err_t tcpip_input(struct pbuf *p, struct netif *inp); - -#if LWIP_NETIF_API -err_t tcpip_netifapi(struct netifapi_msg *netifapimsg); -#if LWIP_TCPIP_CORE_LOCKING -err_t tcpip_netifapi_lock(struct netifapi_msg *netifapimsg); -#endif /* LWIP_TCPIP_CORE_LOCKING */ -#endif /* LWIP_NETIF_API */ - -err_t tcpip_callback_with_block(tcpip_callback_fn function, void *ctx, uint8_t block); -#define tcpip_callback(f, ctx) tcpip_callback_with_block(f, ctx, 1) - -struct tcpip_callback_msg* tcpip_callbackmsg_new(tcpip_callback_fn function, void *ctx); -void tcpip_callbackmsg_delete(struct tcpip_callback_msg* msg); -err_t tcpip_trycallback(struct tcpip_callback_msg* msg); - -/* free pbufs or heap memory from another context without blocking */ -err_t pbuf_free_callback(struct pbuf *p); -err_t mem_free_callback(void *m); - -#if LWIP_TCPIP_TIMEOUT -err_t tcpip_timeout(uint32_t msecs, sys_timeout_handler h, void *arg); -err_t tcpip_untimeout(sys_timeout_handler h, void *arg); -#endif /* LWIP_TCPIP_TIMEOUT */ - -enum tcpip_msg_type { -#if LWIP_NETCONN - TCPIP_MSG_API, -#endif /* LWIP_NETCONN */ - TCPIP_MSG_INPKT, -#if LWIP_NETIF_API - TCPIP_MSG_NETIFAPI, -#endif /* LWIP_NETIF_API */ -#if LWIP_TCPIP_TIMEOUT - TCPIP_MSG_TIMEOUT, - TCPIP_MSG_UNTIMEOUT, -#endif /* LWIP_TCPIP_TIMEOUT */ - TCPIP_MSG_CALLBACK, - TCPIP_MSG_CALLBACK_STATIC -}; - -struct tcpip_msg { - enum tcpip_msg_type type; - sys_sem_t *sem; - union { -#if LWIP_NETCONN - struct api_msg *apimsg; -#endif /* LWIP_NETCONN */ -#if LWIP_NETIF_API - struct netifapi_msg *netifapimsg; -#endif /* LWIP_NETIF_API */ - struct { - struct pbuf *p; - struct netif *netif; - } inp; - struct { - tcpip_callback_fn function; - void *ctx; - } cb; -#if LWIP_TCPIP_TIMEOUT - struct { - uint32_t msecs; - sys_timeout_handler h; - void *arg; - } tmo; -#endif /* LWIP_TCPIP_TIMEOUT */ - } msg; -}; - -#ifdef __cplusplus -} -#endif - -#endif /* !NO_SYS */ - -#endif /* __LWIP_TCPIP_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/udp.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/udp.h deleted file mode 100644 index 18738e7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/lwip/udp.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __LWIP_UDP_H__ -#define __LWIP_UDP_H__ - -#include "lwip/opt.h" - -#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/pbuf.h" -#include "lwip/netif.h" -#include "lwip/ip_addr.h" -#include "lwip/ip.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define UDP_HLEN 8 - -/* Fields are (of course) in network byte order. */ -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct udp_hdr { - PACK_STRUCT_FIELD(uint16_t src); - PACK_STRUCT_FIELD(uint16_t dest); /* src/dest UDP ports */ - PACK_STRUCT_FIELD(uint16_t len); - PACK_STRUCT_FIELD(uint16_t chksum); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -#define UDP_FLAGS_NOCHKSUM 0x01U -#define UDP_FLAGS_UDPLITE 0x02U -#define UDP_FLAGS_CONNECTED 0x04U -#define UDP_FLAGS_MULTICAST_LOOP 0x08U - -struct udp_pcb; - -/** Function prototype for udp pcb receive callback functions - * addr and port are in same byte order as in the pcb - * The callback is responsible for freeing the pbuf - * if it's not used any more. - * - * ATTENTION: Be aware that 'addr' points into the pbuf 'p' so freeing this pbuf - * makes 'addr' invalid, too. - * - * @param arg user supplied argument (udp_pcb.recv_arg) - * @param pcb the udp_pcb which received data - * @param p the packet buffer that was received - * @param addr the remote IP address from which the packet was received - * @param port the remote port from which the packet was received - */ -typedef void (*udp_recv_fn)(void *arg, struct udp_pcb *pcb, struct pbuf *p, - ip_addr_t *addr, uint16_t port); - - -struct udp_pcb { -/* Common members of all PCB types */ - IP_PCB; - -/* Protocol specific PCB members */ - - struct udp_pcb *next; - - uint8_t flags; - /** ports are in host byte order */ - uint16_t local_port, remote_port; - -#if LWIP_IGMP - /** outgoing network interface for multicast packets */ - ip_addr_t multicast_ip; -#endif /* LWIP_IGMP */ - -#if LWIP_UDPLITE - /** used for UDP_LITE only */ - uint16_t chksum_len_rx, chksum_len_tx; -#endif /* LWIP_UDPLITE */ - - /** receive callback function */ - udp_recv_fn recv; - /** user-supplied argument for the recv callback */ - void *recv_arg; -}; -/* udp_pcbs export for exernal reference (e.g. SNMP agent) */ -extern struct udp_pcb *udp_pcbs; - -/* The following functions is the application layer interface to the - UDP code. */ -struct udp_pcb * udp_new (void); -void udp_remove (struct udp_pcb *pcb); -err_t udp_bind (struct udp_pcb *pcb, ip_addr_t *ipaddr, - uint16_t port); -err_t udp_connect (struct udp_pcb *pcb, ip_addr_t *ipaddr, - uint16_t port); -void udp_disconnect (struct udp_pcb *pcb); -void udp_recv (struct udp_pcb *pcb, udp_recv_fn recv, - void *recv_arg); -err_t udp_sendto_if (struct udp_pcb *pcb, struct pbuf *p, - ip_addr_t *dst_ip, uint16_t dst_port, - struct netif *netif); -err_t udp_sendto (struct udp_pcb *pcb, struct pbuf *p, - ip_addr_t *dst_ip, uint16_t dst_port); -err_t udp_send (struct udp_pcb *pcb, struct pbuf *p); - -#if LWIP_CHECKSUM_ON_COPY -err_t udp_sendto_if_chksum(struct udp_pcb *pcb, struct pbuf *p, - ip_addr_t *dst_ip, uint16_t dst_port, - struct netif *netif, uint8_t have_chksum, - uint16_t chksum); -err_t udp_sendto_chksum(struct udp_pcb *pcb, struct pbuf *p, - ip_addr_t *dst_ip, uint16_t dst_port, - uint8_t have_chksum, uint16_t chksum); -err_t udp_send_chksum(struct udp_pcb *pcb, struct pbuf *p, - uint8_t have_chksum, uint16_t chksum); -#endif /* LWIP_CHECKSUM_ON_COPY */ - -#define udp_flags(pcb) ((pcb)->flags) -#define udp_setflags(pcb, f) ((pcb)->flags = (f)) - -/* The following functions are the lower layer interface to UDP. */ -void udp_input (struct pbuf *p, struct netif *inp); - -void udp_init (void); - -#if UDP_DEBUG -void udp_debug_print(struct udp_hdr *udphdr); -#else -#define udp_debug_print(udphdr) -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_UDP */ - -#endif /* __LWIP_UDP_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/netif/etharp.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/netif/etharp.h deleted file mode 100644 index 240e82f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/netif/etharp.h +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * Copyright (c) 2003-2004 Leon Woestenberg - * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#ifndef __NETIF_ETHARP_H__ -#define __NETIF_ETHARP_H__ - -#include "lwip/opt.h" - -#if LWIP_ARP || LWIP_ETHERNET /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/pbuf.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/ip.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef ETHARP_HWADDR_LEN -#define ETHARP_HWADDR_LEN 6 -#endif - -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct eth_addr { - PACK_STRUCT_FIELD(uint8_t addr[ETHARP_HWADDR_LEN]); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -/** Ethernet header */ -struct eth_hdr { -#if ETH_PAD_SIZE - PACK_STRUCT_FIELD(uint8_t padding[ETH_PAD_SIZE]); -#endif - PACK_STRUCT_FIELD(struct eth_addr dest); - PACK_STRUCT_FIELD(struct eth_addr src); - PACK_STRUCT_FIELD(uint16_t type); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -#define SIZEOF_ETH_HDR (14 + ETH_PAD_SIZE) - -#if ETHARP_SUPPORT_VLAN - -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -/** VLAN header inserted between ethernet header and payload - * if 'type' in ethernet header is ETHTYPE_VLAN. - * See IEEE802.Q */ -struct eth_vlan_hdr { - PACK_STRUCT_FIELD(uint16_t prio_vid); - PACK_STRUCT_FIELD(uint16_t tpid); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -#define SIZEOF_VLAN_HDR 4 -#define VLAN_ID(vlan_hdr) (htons((vlan_hdr)->prio_vid) & 0xFFF) - -#endif /* ETHARP_SUPPORT_VLAN */ - -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -/** the ARP message, see RFC 826 ("Packet format") */ -struct etharp_hdr { - PACK_STRUCT_FIELD(uint16_t hwtype); - PACK_STRUCT_FIELD(uint16_t proto); - PACK_STRUCT_FIELD(uint8_t hwlen); - PACK_STRUCT_FIELD(uint8_t protolen); - PACK_STRUCT_FIELD(uint16_t opcode); - PACK_STRUCT_FIELD(struct eth_addr shwaddr); - PACK_STRUCT_FIELD(struct ip_addr2 sipaddr); - PACK_STRUCT_FIELD(struct eth_addr dhwaddr); - PACK_STRUCT_FIELD(struct ip_addr2 dipaddr); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -#define SIZEOF_ETHARP_HDR 28 -#define SIZEOF_ETHARP_PACKET (SIZEOF_ETH_HDR + SIZEOF_ETHARP_HDR) - -/** 5 seconds period */ -#define ARP_TMR_INTERVAL 5000 - -#define ETHTYPE_ARP 0x0806U -#define ETHTYPE_IP 0x0800U -#define ETHTYPE_VLAN 0x8100U -#define ETHTYPE_PPPOEDISC 0x8863U /* PPP Over Ethernet Discovery Stage */ -#define ETHTYPE_PPPOE 0x8864U /* PPP Over Ethernet Session Stage */ - -/** MEMCPY-like macro to copy to/from struct eth_addr's that are local variables - * or known to be 32-bit aligned within the protocol header. */ -#ifndef ETHADDR32_COPY -#define ETHADDR32_COPY(src, dst) SMEMCPY(src, dst, ETHARP_HWADDR_LEN) -#endif - -/** MEMCPY-like macro to copy to/from struct eth_addr's that are no local - * variables and known to be 16-bit aligned within the protocol header. */ -#ifndef ETHADDR16_COPY -#define ETHADDR16_COPY(src, dst) SMEMCPY(src, dst, ETHARP_HWADDR_LEN) -#endif - -#if LWIP_ARP /* don't build if not configured for use in lwipopts.h */ - -/** ARP message types (opcodes) */ -#define ARP_REQUEST 1 -#define ARP_REPLY 2 - -/** Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type) - * to a filter function that returns the correct netif when using multiple - * netifs on one hardware interface where the netif's low-level receive - * routine cannot decide for the correct netif (e.g. when mapping multiple - * IP addresses to one hardware interface). - */ -#ifndef LWIP_ARP_FILTER_NETIF -#define LWIP_ARP_FILTER_NETIF 0 -#endif - -#if ARP_QUEUEING -/** struct for queueing outgoing packets for unknown address - * defined here to be accessed by memp.h - */ -struct etharp_q_entry { - struct etharp_q_entry *next; - struct pbuf *p; -}; -#endif /* ARP_QUEUEING */ - -#define etharp_init() /* Compatibility define, not init needed. */ -void etharp_tmr(void); -int8_t etharp_find_addr(struct netif *netif, ip_addr_t *ipaddr, - struct eth_addr **eth_ret, ip_addr_t **ip_ret); -err_t etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr); -err_t etharp_query(struct netif *netif, ip_addr_t *ipaddr, struct pbuf *q); -err_t etharp_request(struct netif *netif, ip_addr_t *ipaddr); -/** For Ethernet network interfaces, we might want to send "gratuitous ARP"; - * this is an ARP packet sent by a node in order to spontaneously cause other - * nodes to update an entry in their ARP cache. - * From RFC 3220 "IP Mobility Support for IPv4" section 4.6. */ -#define etharp_gratuitous(netif) etharp_request((netif), &(netif)->ip_addr) -void etharp_cleanup_netif(struct netif *netif); - -#if ETHARP_SUPPORT_STATIC_ENTRIES -err_t etharp_add_static_entry(ip_addr_t *ipaddr, struct eth_addr *ethaddr); -err_t etharp_remove_static_entry(ip_addr_t *ipaddr); -#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ - -#if LWIP_AUTOIP -err_t etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, - const struct eth_addr *ethdst_addr, - const struct eth_addr *hwsrc_addr, const ip_addr_t *ipsrc_addr, - const struct eth_addr *hwdst_addr, const ip_addr_t *ipdst_addr, - const uint16_t opcode); -#endif /* LWIP_AUTOIP */ - -#endif /* LWIP_ARP */ - -err_t ethernet_input(struct pbuf *p, struct netif *netif); - -#define eth_addr_cmp(addr1, addr2) (memcmp((addr1)->addr, (addr2)->addr, ETHARP_HWADDR_LEN) == 0) - -extern const struct eth_addr ethbroadcast, ethzero; - -#endif /* LWIP_ARP || LWIP_ETHERNET */ - -#ifdef __cplusplus -} -#endif - -#endif /* __NETIF_ARP_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/netif/loopif.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/netif/loopif.h deleted file mode 100644 index e69de29..0000000 diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/netif/ppp_oe.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/netif/ppp_oe.h deleted file mode 100644 index ed98ce9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/netif/ppp_oe.h +++ /dev/null @@ -1,190 +0,0 @@ -/***************************************************************************** -* ppp_oe.h - PPP Over Ethernet implementation for lwIP. -* -* Copyright (c) 2006 by Marc Boucher, Services Informatiques (MBSI) inc. -* -* The authors hereby grant permission to use, copy, modify, distribute, -* and license this software and its documentation for any purpose, provided -* that existing copyright notices are retained in all copies and that this -* notice and the following disclaimer are included verbatim in any -* distributions. No written agreement, license, or royalty fee is required -* for any of the authorized uses. -* -* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR -* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -****************************************************************************** -* REVISION HISTORY -* -* 06-01-01 Marc Boucher -* Ported to lwIP. -*****************************************************************************/ - - - -/* based on NetBSD: if_pppoe.c,v 1.64 2006/01/31 23:50:15 martin Exp */ - -/*- - * Copyright (c) 2002 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Martin Husemann . - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef PPP_OE_H -#define PPP_OE_H - -#include "lwip/opt.h" - -#if PPPOE_SUPPORT > 0 - -#include "netif/etharp.h" - -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct pppoehdr { - PACK_STRUCT_FIELD(uint8_t vertype); - PACK_STRUCT_FIELD(uint8_t code); - PACK_STRUCT_FIELD(uint16_t session); - PACK_STRUCT_FIELD(uint16_t plen); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct pppoetag { - PACK_STRUCT_FIELD(uint16_t tag); - PACK_STRUCT_FIELD(uint16_t len); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - - -#define PPPOE_STATE_INITIAL 0 -#define PPPOE_STATE_PADI_SENT 1 -#define PPPOE_STATE_PADR_SENT 2 -#define PPPOE_STATE_SESSION 3 -#define PPPOE_STATE_CLOSING 4 -/* passive */ -#define PPPOE_STATE_PADO_SENT 1 - -#define PPPOE_HEADERLEN sizeof(struct pppoehdr) -#define PPPOE_VERTYPE 0x11 /* VER=1, TYPE = 1 */ - -#define PPPOE_TAG_EOL 0x0000 /* end of list */ -#define PPPOE_TAG_SNAME 0x0101 /* service name */ -#define PPPOE_TAG_ACNAME 0x0102 /* access concentrator name */ -#define PPPOE_TAG_HUNIQUE 0x0103 /* host unique */ -#define PPPOE_TAG_ACCOOKIE 0x0104 /* AC cookie */ -#define PPPOE_TAG_VENDOR 0x0105 /* vendor specific */ -#define PPPOE_TAG_RELAYSID 0x0110 /* relay session id */ -#define PPPOE_TAG_SNAME_ERR 0x0201 /* service name error */ -#define PPPOE_TAG_ACSYS_ERR 0x0202 /* AC system error */ -#define PPPOE_TAG_GENERIC_ERR 0x0203 /* gerneric error */ - -#define PPPOE_CODE_PADI 0x09 /* Active Discovery Initiation */ -#define PPPOE_CODE_PADO 0x07 /* Active Discovery Offer */ -#define PPPOE_CODE_PADR 0x19 /* Active Discovery Request */ -#define PPPOE_CODE_PADS 0x65 /* Active Discovery Session confirmation */ -#define PPPOE_CODE_PADT 0xA7 /* Active Discovery Terminate */ - -#ifndef ETHERMTU -#define ETHERMTU 1500 -#endif - -/* two byte PPP protocol discriminator, then IP data */ -#define PPPOE_MAXMTU (ETHERMTU-PPPOE_HEADERLEN-2) - -#ifndef PPPOE_MAX_AC_COOKIE_LEN -#define PPPOE_MAX_AC_COOKIE_LEN 64 -#endif - -struct pppoe_softc { - struct pppoe_softc *next; - struct netif *sc_ethif; /* ethernet interface we are using */ - int sc_pd; /* ppp unit number */ - void (*sc_linkStatusCB)(int pd, int up); - - int sc_state; /* discovery phase or session connected */ - struct eth_addr sc_dest; /* hardware address of concentrator */ - uint16_t sc_session; /* PPPoE session id */ - -#ifdef PPPOE_TODO - char *sc_service_name; /* if != NULL: requested name of service */ - char *sc_concentrator_name; /* if != NULL: requested concentrator id */ -#endif /* PPPOE_TODO */ - uint8_t sc_ac_cookie[PPPOE_MAX_AC_COOKIE_LEN]; /* content of AC cookie we must echo back */ - size_t sc_ac_cookie_len; /* length of cookie data */ -#ifdef PPPOE_SERVER - uint8_t *sc_hunique; /* content of host unique we must echo back */ - size_t sc_hunique_len; /* length of host unique */ -#endif - int sc_padi_retried; /* number of PADI retries already done */ - int sc_padr_retried; /* number of PADR retries already done */ -}; - - -#define pppoe_init() /* compatibility define, no initialization needed */ - -err_t pppoe_create(struct netif *ethif, int pd, void (*linkStatusCB)(int pd, int up), struct pppoe_softc **scptr); -err_t pppoe_destroy(struct netif *ifp); - -int pppoe_connect(struct pppoe_softc *sc); -void pppoe_disconnect(struct pppoe_softc *sc); - -void pppoe_disc_input(struct netif *netif, struct pbuf *p); -void pppoe_data_input(struct netif *netif, struct pbuf *p); - -err_t pppoe_xmit(struct pppoe_softc *sc, struct pbuf *pb); - -/** used in ppp.c */ -#define PPPOE_HDRLEN (sizeof(struct eth_hdr) + PPPOE_HEADERLEN) - -#endif /* PPPOE_SUPPORT */ - -#endif /* PPP_OE_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/netif/slipif.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/netif/slipif.h deleted file mode 100644 index 0aa096f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/netif/slipif.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2001, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __NETIF_SLIPIF_H__ -#define __NETIF_SLIPIF_H__ - -#include "lwip/opt.h" -#include "lwip/netif.h" - -/** Set this to 1 to start a thread that blocks reading on the serial line - * (using sio_read()). - */ -#ifndef SLIP_USE_RX_THREAD -#define SLIP_USE_RX_THREAD !NO_SYS -#endif - -/** Set this to 1 to enable functions to pass in RX bytes from ISR context. - * If enabled, slipif_received_byte[s]() process incoming bytes and put assembled - * packets on a queue, which is fed into lwIP from slipif_poll(). - * If disabled, slipif_poll() polls the serila line (using sio_tryread()). - */ -#ifndef SLIP_RX_FROM_ISR -#define SLIP_RX_FROM_ISR 0 -#endif - -/** Set this to 1 (default for SLIP_RX_FROM_ISR) to queue incoming packets - * received by slipif_received_byte[s]() as long as PBUF_POOL pbufs are available. - * If disabled, packets will be dropped if more than one packet is received. - */ -#ifndef SLIP_RX_QUEUE -#define SLIP_RX_QUEUE SLIP_RX_FROM_ISR -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -err_t slipif_init(struct netif * netif); -void slipif_poll(struct netif *netif); -#if SLIP_RX_FROM_ISR -void slipif_process_rxqueue(struct netif *netif); -void slipif_received_byte(struct netif *netif, uint8_t data); -void slipif_received_bytes(struct netif *netif, uint8_t *data, uint8_t len); -#endif /* SLIP_RX_FROM_ISR */ - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/posix/netdb.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/posix/netdb.h deleted file mode 100644 index 7134032..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/posix/netdb.h +++ /dev/null @@ -1,33 +0,0 @@ -/** - * @file - * This file is a posix wrapper for lwip/netdb.h. - */ - -/* - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - */ - -#include "lwip/netdb.h" diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/posix/sys/socket.h b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/posix/sys/socket.h deleted file mode 100644 index f7c7066..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/include/posix/sys/socket.h +++ /dev/null @@ -1,33 +0,0 @@ -/** - * @file - * This file is a posix wrapper for lwip/sockets.h. - */ - -/* - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - */ - -#include "lwip/sockets.h" diff --git a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/netif/etharp.c b/Firmware/RTLGDB/USDK/component/common/network/lwip/src/netif/etharp.c deleted file mode 100644 index 39879f2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/lwip/src/netif/etharp.c +++ /dev/null @@ -1,1408 +0,0 @@ -/** - * @file - * Address Resolution Protocol module for IP over Ethernet - * - * Functionally, ARP is divided into two parts. The first maps an IP address - * to a physical address when sending a packet, and the second part answers - * requests from other machines for our physical address. - * - * This implementation complies with RFC 826 (Ethernet ARP). It supports - * Gratuitious ARP from RFC3220 (IP Mobility Support for IPv4) section 4.6 - * if an interface calls etharp_gratuitous(our_netif) upon address change. - */ - -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * Copyright (c) 2003-2004 Leon Woestenberg - * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - */ - -#include "lwip/opt.h" - -#if LWIP_ARP || LWIP_ETHERNET - -#include "lwip/ip_addr.h" -#include "lwip/def.h" -#include "lwip/ip.h" -#include "lwip/stats.h" -#include "lwip/snmp.h" -#include "lwip/dhcp.h" -#include "lwip/autoip.h" -#include "netif/etharp.h" - -#if PPPOE_SUPPORT -#include "netif/ppp_oe.h" -#endif /* PPPOE_SUPPORT */ - -#include - -const struct eth_addr ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}}; -const struct eth_addr ethzero = {{0,0,0,0,0,0}}; - -/** The 24-bit IANA multicast OUI is 01-00-5e: */ -#define LL_MULTICAST_ADDR_0 0x01 -#define LL_MULTICAST_ADDR_1 0x00 -#define LL_MULTICAST_ADDR_2 0x5e - -#if LWIP_ARP /* don't build if not configured for use in lwipopts.h */ - -/** the time an ARP entry stays valid after its last update, - * for ARP_TMR_INTERVAL = 5000, this is - * (240 * 5) seconds = 20 minutes. - */ -#define ARP_MAXAGE 240 -/** Re-request a used ARP entry 1 minute before it would expire to prevent - * breaking a steadily used connection because the ARP entry timed out. */ -#define ARP_AGE_REREQUEST_USED (ARP_MAXAGE - 12) - -/** the time an ARP entry stays pending after first request, - * for ARP_TMR_INTERVAL = 5000, this is - * (2 * 5) seconds = 10 seconds. - * - * @internal Keep this number at least 2, otherwise it might - * run out instantly if the timeout occurs directly after a request. - */ -#define ARP_MAXPENDING 2 - -#define HWTYPE_ETHERNET 1 - -enum etharp_state { - ETHARP_STATE_EMPTY = 0, - ETHARP_STATE_PENDING, - ETHARP_STATE_STABLE, - ETHARP_STATE_STABLE_REREQUESTING -#if ETHARP_SUPPORT_STATIC_ENTRIES - ,ETHARP_STATE_STATIC -#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ -}; - -struct etharp_entry { -#if ARP_QUEUEING - /** Pointer to queue of pending outgoing packets on this ARP entry. */ - struct etharp_q_entry *q; -#else /* ARP_QUEUEING */ - /** Pointer to a single pending outgoing packet on this ARP entry. */ - struct pbuf *q; -#endif /* ARP_QUEUEING */ - ip_addr_t ipaddr; - struct netif *netif; - struct eth_addr ethaddr; - uint8_t state; - uint8_t ctime; -}; - -static struct etharp_entry arp_table[ARP_TABLE_SIZE]; - -#if !LWIP_NETIF_HWADDRHINT -static uint8_t etharp_cached_entry; -#endif /* !LWIP_NETIF_HWADDRHINT */ - -/** Try hard to create a new entry - we want the IP address to appear in - the cache (even if this means removing an active entry or so). */ -#define ETHARP_FLAG_TRY_HARD 1 -#define ETHARP_FLAG_FIND_ONLY 2 -#if ETHARP_SUPPORT_STATIC_ENTRIES -#define ETHARP_FLAG_STATIC_ENTRY 4 -#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ - -#if LWIP_NETIF_HWADDRHINT -#define ETHARP_SET_HINT(netif, hint) if (((netif) != NULL) && ((netif)->addr_hint != NULL)) \ - *((netif)->addr_hint) = (hint); -#else /* LWIP_NETIF_HWADDRHINT */ -#define ETHARP_SET_HINT(netif, hint) (etharp_cached_entry = (hint)) -#endif /* LWIP_NETIF_HWADDRHINT */ - - -/* Some checks, instead of etharp_init(): */ -#if (LWIP_ARP && (ARP_TABLE_SIZE > 0x7f)) - #error "ARP_TABLE_SIZE must fit in an int8_t, you have to reduce it in your lwipopts.h" -#endif - - -#if ARP_QUEUEING -/** - * Free a complete queue of etharp entries - * - * @param q a qeueue of etharp_q_entry's to free - */ -static void -free_etharp_q(struct etharp_q_entry *q) -{ - struct etharp_q_entry *r; - LWIP_ASSERT("q != NULL", q != NULL); - LWIP_ASSERT("q->p != NULL", q->p != NULL); - while (q) { - r = q; - q = q->next; - LWIP_ASSERT("r->p != NULL", (r->p != NULL)); - pbuf_free(r->p); - memp_free(MEMP_ARP_QUEUE, r); - } -} -#else /* ARP_QUEUEING */ - -/** Compatibility define: free the queued pbuf */ -#define free_etharp_q(q) pbuf_free(q) - -#endif /* ARP_QUEUEING */ - -/** Clean up ARP table entries */ -static void -etharp_free_entry(int i) -{ - /* remove from SNMP ARP index tree */ - snmp_delete_arpidx_tree(arp_table[i].netif, &arp_table[i].ipaddr); - /* and empty packet queue */ - if (arp_table[i].q != NULL) { - /* remove all queued packets */ - LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_free_entry: freeing entry %"U16_F", packet queue %p.\n", (uint16_t)i, (void *)(arp_table[i].q))); - free_etharp_q(arp_table[i].q); - arp_table[i].q = NULL; - } - /* recycle entry for re-use */ - arp_table[i].state = ETHARP_STATE_EMPTY; -#ifdef LWIP_DEBUG - /* for debugging, clean out the complete entry */ - arp_table[i].ctime = 0; - arp_table[i].netif = NULL; - ip_addr_set_zero(&arp_table[i].ipaddr); - arp_table[i].ethaddr = ethzero; -#endif /* LWIP_DEBUG */ -} - -/** - * Clears expired entries in the ARP table. - * - * This function should be called every ETHARP_TMR_INTERVAL milliseconds (5 seconds), - * in order to expire entries in the ARP table. - */ -void -etharp_tmr(void) -{ - uint8_t i; - - LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer\n")); - /* remove expired entries from the ARP table */ - for (i = 0; i < ARP_TABLE_SIZE; ++i) { - uint8_t state = arp_table[i].state; - if (state != ETHARP_STATE_EMPTY -#if ETHARP_SUPPORT_STATIC_ENTRIES - && (state != ETHARP_STATE_STATIC) -#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ - ) { - arp_table[i].ctime++; - if ((arp_table[i].ctime >= ARP_MAXAGE) || - ((arp_table[i].state == ETHARP_STATE_PENDING) && - (arp_table[i].ctime >= ARP_MAXPENDING))) { - /* pending or stable entry has become old! */ - LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired %s entry %"U16_F".\n", - arp_table[i].state >= ETHARP_STATE_STABLE ? "stable" : "pending", (uint16_t)i)); - /* clean up entries that have just been expired */ - etharp_free_entry(i); - } - else if (arp_table[i].state == ETHARP_STATE_STABLE_REREQUESTING) { - /* Reset state to stable, so that the next transmitted packet will - re-send an ARP request. */ - arp_table[i].state = ETHARP_STATE_STABLE; - } -#if ARP_QUEUEING - /* still pending entry? (not expired) */ - if (arp_table[i].state == ETHARP_STATE_PENDING) { - /* resend an ARP query here? */ - } -#endif /* ARP_QUEUEING */ - } - } -} - -/** - * Search the ARP table for a matching or new entry. - * - * If an IP address is given, return a pending or stable ARP entry that matches - * the address. If no match is found, create a new entry with this address set, - * but in state ETHARP_EMPTY. The caller must check and possibly change the - * state of the returned entry. - * - * If ipaddr is NULL, return a initialized new entry in state ETHARP_EMPTY. - * - * In all cases, attempt to create new entries from an empty entry. If no - * empty entries are available and ETHARP_FLAG_TRY_HARD flag is set, recycle - * old entries. Heuristic choose the least important entry for recycling. - * - * @param ipaddr IP address to find in ARP cache, or to add if not found. - * @param flags @see definition of ETHARP_FLAG_* - * @param netif netif related to this address (used for NETIF_HWADDRHINT) - * - * @return The ARP entry index that matched or is created, ERR_MEM if no - * entry is found or could be recycled. - */ -static int8_t -etharp_find_entry(ip_addr_t *ipaddr, uint8_t flags) -{ - int8_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE; - int8_t empty = ARP_TABLE_SIZE; - uint8_t i = 0, age_pending = 0, age_stable = 0; - /* oldest entry with packets on queue */ - int8_t old_queue = ARP_TABLE_SIZE; - /* its age */ - uint8_t age_queue = 0; - - /** - * a) do a search through the cache, remember candidates - * b) select candidate entry - * c) create new entry - */ - - /* a) in a single search sweep, do all of this - * 1) remember the first empty entry (if any) - * 2) remember the oldest stable entry (if any) - * 3) remember the oldest pending entry without queued packets (if any) - * 4) remember the oldest pending entry with queued packets (if any) - * 5) search for a matching IP entry, either pending or stable - * until 5 matches, or all entries are searched for. - */ - - for (i = 0; i < ARP_TABLE_SIZE; ++i) { - uint8_t state = arp_table[i].state; - /* no empty entry found yet and now we do find one? */ - if ((empty == ARP_TABLE_SIZE) && (state == ETHARP_STATE_EMPTY)) { - LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_find_entry: found empty entry %"U16_F"\n", (uint16_t)i)); - /* remember first empty entry */ - empty = i; - } else if (state != ETHARP_STATE_EMPTY) { - LWIP_ASSERT("state == ETHARP_STATE_PENDING || state >= ETHARP_STATE_STABLE", - state == ETHARP_STATE_PENDING || state >= ETHARP_STATE_STABLE); - /* if given, does IP address match IP address in ARP entry? */ - if (ipaddr && ip_addr_cmp(ipaddr, &arp_table[i].ipaddr)) { - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: found matching entry %"U16_F"\n", (uint16_t)i)); - /* found exact IP address match, simply bail out */ - return i; - } - /* pending entry? */ - if (state == ETHARP_STATE_PENDING) { - /* pending with queued packets? */ - if (arp_table[i].q != NULL) { - if (arp_table[i].ctime >= age_queue) { - old_queue = i; - age_queue = arp_table[i].ctime; - } - } else - /* pending without queued packets? */ - { - if (arp_table[i].ctime >= age_pending) { - old_pending = i; - age_pending = arp_table[i].ctime; - } - } - /* stable entry? */ - } else if (state >= ETHARP_STATE_STABLE) { -#if ETHARP_SUPPORT_STATIC_ENTRIES - /* don't record old_stable for static entries since they never expire */ - if (state < ETHARP_STATE_STATIC) -#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ - { - /* remember entry with oldest stable entry in oldest, its age in maxtime */ - if (arp_table[i].ctime >= age_stable) { - old_stable = i; - age_stable = arp_table[i].ctime; - } - } - } - } - } - /* { we have no match } => try to create a new entry */ - - /* don't create new entry, only search? */ - if (((flags & ETHARP_FLAG_FIND_ONLY) != 0) || - /* or no empty entry found and not allowed to recycle? */ - ((empty == ARP_TABLE_SIZE) && ((flags & ETHARP_FLAG_TRY_HARD) == 0))) { - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: no empty entry found and not allowed to recycle\n")); - return (int8_t)ERR_MEM; - } - - /* b) choose the least destructive entry to recycle: - * 1) empty entry - * 2) oldest stable entry - * 3) oldest pending entry without queued packets - * 4) oldest pending entry with queued packets - * - * { ETHARP_FLAG_TRY_HARD is set at this point } - */ - - /* 1) empty entry available? */ - if (empty < ARP_TABLE_SIZE) { - i = empty; - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting empty entry %"U16_F"\n", (uint16_t)i)); - } else { - /* 2) found recyclable stable entry? */ - if (old_stable < ARP_TABLE_SIZE) { - /* recycle oldest stable*/ - i = old_stable; - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest stable entry %"U16_F"\n", (uint16_t)i)); - /* no queued packets should exist on stable entries */ - LWIP_ASSERT("arp_table[i].q == NULL", arp_table[i].q == NULL); - /* 3) found recyclable pending entry without queued packets? */ - } else if (old_pending < ARP_TABLE_SIZE) { - /* recycle oldest pending */ - i = old_pending; - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest pending entry %"U16_F" (without queue)\n", (uint16_t)i)); - /* 4) found recyclable pending entry with queued packets? */ - } else if (old_queue < ARP_TABLE_SIZE) { - /* recycle oldest pending (queued packets are free in etharp_free_entry) */ - i = old_queue; - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest pending entry %"U16_F", freeing packet queue %p\n", (uint16_t)i, (void *)(arp_table[i].q))); - /* no empty or recyclable entries found */ - } else { - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: no empty or recyclable entries found\n")); - return (int8_t)ERR_MEM; - } - - /* { empty or recyclable entry found } */ - LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE); - etharp_free_entry(i); - } - - LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE); - LWIP_ASSERT("arp_table[i].state == ETHARP_STATE_EMPTY", - arp_table[i].state == ETHARP_STATE_EMPTY); - - /* IP address given? */ - if (ipaddr != NULL) { - /* set IP address */ - ip_addr_copy(arp_table[i].ipaddr, *ipaddr); - } - arp_table[i].ctime = 0; - return (err_t)i; -} - -/** - * Send an IP packet on the network using netif->linkoutput - * The ethernet header is filled in before sending. - * - * @params netif the lwIP network interface on which to send the packet - * @params p the packet to send, p->payload pointing to the (uninitialized) ethernet header - * @params src the source MAC address to be copied into the ethernet header - * @params dst the destination MAC address to be copied into the ethernet header - * @return ERR_OK if the packet was sent, any other err_t on failure - */ -static err_t -etharp_send_ip(struct netif *netif, struct pbuf *p, struct eth_addr *src, struct eth_addr *dst) -{ - struct eth_hdr *ethhdr = (struct eth_hdr *)p->payload; - - LWIP_ASSERT("netif->hwaddr_len must be the same as ETHARP_HWADDR_LEN for etharp!", - (netif->hwaddr_len == ETHARP_HWADDR_LEN)); - ETHADDR32_COPY(ðhdr->dest, dst); - ETHADDR16_COPY(ðhdr->src, src); - ethhdr->type = PP_HTONS(ETHTYPE_IP); - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_send_ip: sending packet %p\n", (void *)p)); - /* send the packet */ - return netif->linkoutput(netif, p); -} - -/** - * Update (or insert) a IP/MAC address pair in the ARP cache. - * - * If a pending entry is resolved, any queued packets will be sent - * at this point. - * - * @param netif netif related to this entry (used for NETIF_ADDRHINT) - * @param ipaddr IP address of the inserted ARP entry. - * @param ethaddr Ethernet address of the inserted ARP entry. - * @param flags @see definition of ETHARP_FLAG_* - * - * @return - * - ERR_OK Succesfully updated ARP cache. - * - ERR_MEM If we could not add a new ARP entry when ETHARP_FLAG_TRY_HARD was set. - * - ERR_ARG Non-unicast address given, those will not appear in ARP cache. - * - * @see pbuf_free() - */ -static err_t -etharp_update_arp_entry(struct netif *netif, ip_addr_t *ipaddr, struct eth_addr *ethaddr, uint8_t flags) -{ - int8_t i; - LWIP_ASSERT("netif->hwaddr_len == ETHARP_HWADDR_LEN", netif->hwaddr_len == ETHARP_HWADDR_LEN); - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F" - %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F"\n", - ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr), - ethaddr->addr[0], ethaddr->addr[1], ethaddr->addr[2], - ethaddr->addr[3], ethaddr->addr[4], ethaddr->addr[5])); - /* non-unicast address? */ - if (ip_addr_isany(ipaddr) || - ip_addr_isbroadcast(ipaddr, netif) || - ip_addr_ismulticast(ipaddr)) { - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: will not add non-unicast IP address to ARP cache\n")); - return ERR_ARG; - } - /* find or create ARP entry */ - i = etharp_find_entry(ipaddr, flags); - /* bail out if no entry could be found */ - if (i < 0) { - return (err_t)i; - } - -#if ETHARP_SUPPORT_STATIC_ENTRIES - if (flags & ETHARP_FLAG_STATIC_ENTRY) { - /* record static type */ - arp_table[i].state = ETHARP_STATE_STATIC; - } else -#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ - { - /* mark it stable */ - arp_table[i].state = ETHARP_STATE_STABLE; - } - - /* record network interface */ - arp_table[i].netif = netif; - /* insert in SNMP ARP index tree */ - snmp_insert_arpidx_tree(netif, &arp_table[i].ipaddr); - - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: updating stable entry %"S16_F"\n", (int16_t)i)); - /* update address */ - ETHADDR32_COPY(&arp_table[i].ethaddr, ethaddr); - /* reset time stamp */ - arp_table[i].ctime = 0; - /* this is where we will send out queued packets! */ -#if ARP_QUEUEING - while (arp_table[i].q != NULL) { - struct pbuf *p; - /* remember remainder of queue */ - struct etharp_q_entry *q = arp_table[i].q; - /* pop first item off the queue */ - arp_table[i].q = q->next; - /* get the packet pointer */ - p = q->p; - /* now queue entry can be freed */ - memp_free(MEMP_ARP_QUEUE, q); -#else /* ARP_QUEUEING */ - if (arp_table[i].q != NULL) { - struct pbuf *p = arp_table[i].q; - arp_table[i].q = NULL; -#endif /* ARP_QUEUEING */ - /* send the queued IP packet */ - etharp_send_ip(netif, p, (struct eth_addr*)(netif->hwaddr), ethaddr); - /* free the queued IP packet */ - pbuf_free(p); - } - return ERR_OK; -} - -#if ETHARP_SUPPORT_STATIC_ENTRIES -/** Add a new static entry to the ARP table. If an entry exists for the - * specified IP address, this entry is overwritten. - * If packets are queued for the specified IP address, they are sent out. - * - * @param ipaddr IP address for the new static entry - * @param ethaddr ethernet address for the new static entry - * @return @see return values of etharp_add_static_entry - */ -err_t -etharp_add_static_entry(ip_addr_t *ipaddr, struct eth_addr *ethaddr) -{ - struct netif *netif; - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_add_static_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F" - %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F"\n", - ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr), - ethaddr->addr[0], ethaddr->addr[1], ethaddr->addr[2], - ethaddr->addr[3], ethaddr->addr[4], ethaddr->addr[5])); - - netif = ip_route(ipaddr); - if (netif == NULL) { - return ERR_RTE; - } - - return etharp_update_arp_entry(netif, ipaddr, ethaddr, ETHARP_FLAG_TRY_HARD | ETHARP_FLAG_STATIC_ENTRY); -} - -/** Remove a static entry from the ARP table previously added with a call to - * etharp_add_static_entry. - * - * @param ipaddr IP address of the static entry to remove - * @return ERR_OK: entry removed - * ERR_MEM: entry wasn't found - * ERR_ARG: entry wasn't a static entry but a dynamic one - */ -err_t -etharp_remove_static_entry(ip_addr_t *ipaddr) -{ - int8_t i; - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_remove_static_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", - ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr))); - - /* find or create ARP entry */ - i = etharp_find_entry(ipaddr, ETHARP_FLAG_FIND_ONLY); - /* bail out if no entry could be found */ - if (i < 0) { - return (err_t)i; - } - - if (arp_table[i].state != ETHARP_STATE_STATIC) { - /* entry wasn't a static entry, cannot remove it */ - return ERR_ARG; - } - /* entry found, free it */ - etharp_free_entry(i); - return ERR_OK; -} -#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ - -/** - * Remove all ARP table entries of the specified netif. - * - * @param netif points to a network interface - */ -void etharp_cleanup_netif(struct netif *netif) -{ - uint8_t i; - - for (i = 0; i < ARP_TABLE_SIZE; ++i) { - uint8_t state = arp_table[i].state; - if ((state != ETHARP_STATE_EMPTY) && (arp_table[i].netif == netif)) { - etharp_free_entry(i); - } - } -} - -/** - * Finds (stable) ethernet/IP address pair from ARP table - * using interface and IP address index. - * @note the addresses in the ARP table are in network order! - * - * @param netif points to interface index - * @param ipaddr points to the (network order) IP address index - * @param eth_ret points to return pointer - * @param ip_ret points to return pointer - * @return table index if found, -1 otherwise - */ -int8_t -etharp_find_addr(struct netif *netif, ip_addr_t *ipaddr, - struct eth_addr **eth_ret, ip_addr_t **ip_ret) -{ - int8_t i; - - LWIP_ASSERT("eth_ret != NULL && ip_ret != NULL", - eth_ret != NULL && ip_ret != NULL); - - LWIP_UNUSED_ARG(netif); - - i = etharp_find_entry(ipaddr, ETHARP_FLAG_FIND_ONLY); - if((i >= 0) && (arp_table[i].state >= ETHARP_STATE_STABLE)) { - *eth_ret = &arp_table[i].ethaddr; - *ip_ret = &arp_table[i].ipaddr; - return i; - } - return -1; -} - -#if ETHARP_TRUST_IP_MAC -/** - * Updates the ARP table using the given IP packet. - * - * Uses the incoming IP packet's source address to update the - * ARP cache for the local network. The function does not alter - * or free the packet. This function must be called before the - * packet p is passed to the IP layer. - * - * @param netif The lwIP network interface on which the IP packet pbuf arrived. - * @param p The IP packet that arrived on netif. - * - * @return NULL - * - * @see pbuf_free() - */ -static void -etharp_ip_input(struct netif *netif, struct pbuf *p) -{ - struct eth_hdr *ethhdr; - struct ip_hdr *iphdr; - ip_addr_t iphdr_src; - LWIP_ERROR("netif != NULL", (netif != NULL), return;); - - /* Only insert an entry if the source IP address of the - incoming IP packet comes from a host on the local network. */ - ethhdr = (struct eth_hdr *)p->payload; - iphdr = (struct ip_hdr *)((uint8_t*)ethhdr + SIZEOF_ETH_HDR); -#if ETHARP_SUPPORT_VLAN - if (ethhdr->type == PP_HTONS(ETHTYPE_VLAN)) { - iphdr = (struct ip_hdr *)((uint8_t*)ethhdr + SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR); - } -#endif /* ETHARP_SUPPORT_VLAN */ - - ip_addr_copy(iphdr_src, iphdr->src); - - /* source is not on the local network? */ - if (!ip_addr_netcmp(&iphdr_src, &(netif->ip_addr), &(netif->netmask))) { - /* do nothing */ - return; - } - - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_ip_input: updating ETHARP table.\n")); - /* update the source IP address in the cache, if present */ - /* @todo We could use ETHARP_FLAG_TRY_HARD if we think we are going to talk - * back soon (for example, if the destination IP address is ours. */ - etharp_update_arp_entry(netif, &iphdr_src, &(ethhdr->src), ETHARP_FLAG_FIND_ONLY); -} -#endif /* ETHARP_TRUST_IP_MAC */ - -/** - * Responds to ARP requests to us. Upon ARP replies to us, add entry to cache - * send out queued IP packets. Updates cache with snooped address pairs. - * - * Should be called for incoming ARP packets. The pbuf in the argument - * is freed by this function. - * - * @param netif The lwIP network interface on which the ARP packet pbuf arrived. - * @param ethaddr Ethernet address of netif. - * @param p The ARP packet that arrived on netif. Is freed by this function. - * - * @return NULL - * - * @see pbuf_free() - */ -static void -etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, struct pbuf *p) -{ - struct etharp_hdr *hdr; - struct eth_hdr *ethhdr; - /* these are aligned properly, whereas the ARP header fields might not be */ - ip_addr_t sipaddr, dipaddr; - uint8_t for_us; -#if LWIP_AUTOIP - const uint8_t * ethdst_hwaddr; -#endif /* LWIP_AUTOIP */ - - LWIP_ERROR("netif != NULL", (netif != NULL), return;); - - /* drop short ARP packets: we have to check for p->len instead of p->tot_len here - since a struct etharp_hdr is pointed to p->payload, so it musn't be chained! */ - if (p->len < SIZEOF_ETHARP_PACKET) { - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, - ("etharp_arp_input: packet dropped, too short (%"S16_F"/%"S16_F")\n", p->tot_len, - (int16_t)SIZEOF_ETHARP_PACKET)); - ETHARP_STATS_INC(etharp.lenerr); - ETHARP_STATS_INC(etharp.drop); - pbuf_free(p); - return; - } - - ethhdr = (struct eth_hdr *)p->payload; - hdr = (struct etharp_hdr *)((uint8_t*)ethhdr + SIZEOF_ETH_HDR); -#if ETHARP_SUPPORT_VLAN - if (ethhdr->type == PP_HTONS(ETHTYPE_VLAN)) { - hdr = (struct etharp_hdr *)(((uint8_t*)ethhdr) + SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR); - } -#endif /* ETHARP_SUPPORT_VLAN */ - - /* RFC 826 "Packet Reception": */ - if ((hdr->hwtype != PP_HTONS(HWTYPE_ETHERNET)) || - (hdr->hwlen != ETHARP_HWADDR_LEN) || - (hdr->protolen != sizeof(ip_addr_t)) || - (hdr->proto != PP_HTONS(ETHTYPE_IP))) { - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, - ("etharp_arp_input: packet dropped, wrong hw type, hwlen, proto, protolen or ethernet type (%"U16_F"/%"U16_F"/%"U16_F"/%"U16_F")\n", - hdr->hwtype, hdr->hwlen, hdr->proto, hdr->protolen)); - ETHARP_STATS_INC(etharp.proterr); - ETHARP_STATS_INC(etharp.drop); - pbuf_free(p); - return; - } - ETHARP_STATS_INC(etharp.recv); - -#if LWIP_AUTOIP - /* We have to check if a host already has configured our random - * created link local address and continously check if there is - * a host with this IP-address so we can detect collisions */ - autoip_arp_reply(netif, hdr); -#endif /* LWIP_AUTOIP */ - - /* Copy struct ip_addr2 to aligned ip_addr, to support compilers without - * structure packing (not using structure copy which breaks strict-aliasing rules). */ - IPADDR2_COPY(&sipaddr, &hdr->sipaddr); - IPADDR2_COPY(&dipaddr, &hdr->dipaddr); - - /* this interface is not configured? */ - if (ip_addr_isany(&netif->ip_addr)) { - for_us = 0; - } else { - /* ARP packet directed to us? */ - for_us = (uint8_t)ip_addr_cmp(&dipaddr, &(netif->ip_addr)); - } - - /* ARP message directed to us? - -> add IP address in ARP cache; assume requester wants to talk to us, - can result in directly sending the queued packets for this host. - ARP message not directed to us? - -> update the source IP address in the cache, if present */ - etharp_update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), - for_us ? ETHARP_FLAG_TRY_HARD : ETHARP_FLAG_FIND_ONLY); - - /* now act on the message itself */ - switch (hdr->opcode) { - /* ARP request? */ - case PP_HTONS(ARP_REQUEST): - /* ARP request. If it asked for our address, we send out a - * reply. In any case, we time-stamp any existing ARP entry, - * and possiby send out an IP packet that was queued on it. */ - - LWIP_DEBUGF (ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: incoming ARP request\n")); - /* ARP request for our address? */ - if (for_us) { - - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: replying to ARP request for our IP address\n")); - /* Re-use pbuf to send ARP reply. - Since we are re-using an existing pbuf, we can't call etharp_raw since - that would allocate a new pbuf. */ - hdr->opcode = htons(ARP_REPLY); - - IPADDR2_COPY(&hdr->dipaddr, &hdr->sipaddr); - IPADDR2_COPY(&hdr->sipaddr, &netif->ip_addr); - - LWIP_ASSERT("netif->hwaddr_len must be the same as ETHARP_HWADDR_LEN for etharp!", - (netif->hwaddr_len == ETHARP_HWADDR_LEN)); -#if LWIP_AUTOIP - /* If we are using Link-Local, all ARP packets that contain a Link-Local - * 'sender IP address' MUST be sent using link-layer broadcast instead of - * link-layer unicast. (See RFC3927 Section 2.5, last paragraph) */ - ethdst_hwaddr = ip_addr_islinklocal(&netif->ip_addr) ? (uint8_t*)(ethbroadcast.addr) : hdr->shwaddr.addr; -#endif /* LWIP_AUTOIP */ - - ETHADDR16_COPY(&hdr->dhwaddr, &hdr->shwaddr); -#if LWIP_AUTOIP - ETHADDR16_COPY(ðhdr->dest, ethdst_hwaddr); -#else /* LWIP_AUTOIP */ - ETHADDR16_COPY(ðhdr->dest, &hdr->shwaddr); -#endif /* LWIP_AUTOIP */ - ETHADDR16_COPY(&hdr->shwaddr, ethaddr); - ETHADDR16_COPY(ðhdr->src, ethaddr); - - /* hwtype, hwaddr_len, proto, protolen and the type in the ethernet header - are already correct, we tested that before */ - - /* return ARP reply */ - netif->linkoutput(netif, p); - /* we are not configured? */ - } else if (ip_addr_isany(&netif->ip_addr)) { - /* { for_us == 0 and netif->ip_addr.addr == 0 } */ - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: we are unconfigured, ARP request ignored.\n")); - /* request was not directed to us */ - } else { - #ifdef CONFIG_DONT_CARE_TP - if(netif->flags & NETIF_FLAG_IPSWITCH) - netif->linkoutput(netif, p); - else -#endif - /* { for_us == 0 and netif->ip_addr.addr != 0 } */ - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: ARP request was not for us.\n")); - } - break; - case PP_HTONS(ARP_REPLY): - /* ARP reply. We already updated the ARP cache earlier. */ - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: incoming ARP reply\n")); -#if (LWIP_DHCP && DHCP_DOES_ARP_CHECK) - /* DHCP wants to know about ARP replies from any host with an - * IP address also offered to us by the DHCP server. We do not - * want to take a duplicate IP address on a single network. - * @todo How should we handle redundant (fail-over) interfaces? */ - dhcp_arp_reply(netif, &sipaddr); -#endif /* (LWIP_DHCP && DHCP_DOES_ARP_CHECK) */ -#ifdef CONFIG_DONT_CARE_TP - if(netif->flags & NETIF_FLAG_IPSWITCH) - netif->linkoutput(netif, p); -#endif - break; - default: - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: ARP unknown opcode type %"S16_F"\n", htons(hdr->opcode))); - ETHARP_STATS_INC(etharp.err); - break; - } - /* free ARP packet */ - pbuf_free(p); -} - -/** Just a small helper function that sends a pbuf to an ethernet address - * in the arp_table specified by the index 'arp_idx'. - */ -static err_t -etharp_output_to_arp_index(struct netif *netif, struct pbuf *q, uint8_t arp_idx) -{ - LWIP_ASSERT("arp_table[arp_idx].state >= ETHARP_STATE_STABLE", - arp_table[arp_idx].state >= ETHARP_STATE_STABLE); - /* if arp table entry is about to expire: re-request it, - but only if its state is ETHARP_STATE_STABLE to prevent flooding the - network with ARP requests if this address is used frequently. */ - if ((arp_table[arp_idx].state == ETHARP_STATE_STABLE) && - (arp_table[arp_idx].ctime >= ARP_AGE_REREQUEST_USED)) { - if (etharp_request(netif, &arp_table[arp_idx].ipaddr) == ERR_OK) { - arp_table[arp_idx].state = ETHARP_STATE_STABLE_REREQUESTING; - } - } - - return etharp_send_ip(netif, q, (struct eth_addr*)(netif->hwaddr), - &arp_table[arp_idx].ethaddr); -} - -/** - * Resolve and fill-in Ethernet address header for outgoing IP packet. - * - * For IP multicast and broadcast, corresponding Ethernet addresses - * are selected and the packet is transmitted on the link. - * - * For unicast addresses, the packet is submitted to etharp_query(). In - * case the IP address is outside the local network, the IP address of - * the gateway is used. - * - * @param netif The lwIP network interface which the IP packet will be sent on. - * @param q The pbuf(s) containing the IP packet to be sent. - * @param ipaddr The IP address of the packet destination. - * - * @return - * - ERR_RTE No route to destination (no gateway to external networks), - * or the return type of either etharp_query() or etharp_send_ip(). - */ -err_t -etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr) -{ - struct eth_addr *dest; - struct eth_addr mcastaddr; - ip_addr_t *dst_addr = ipaddr; - - LWIP_ASSERT("netif != NULL", netif != NULL); - LWIP_ASSERT("q != NULL", q != NULL); - LWIP_ASSERT("ipaddr != NULL", ipaddr != NULL); - - /* make room for Ethernet header - should not fail */ - if (pbuf_header(q, sizeof(struct eth_hdr)) != 0) { - /* bail out */ - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("etharp_output: could not allocate room for header.\n")); - LINK_STATS_INC(link.lenerr); - return ERR_BUF; - } - - /* Determine on destination hardware address. Broadcasts and multicasts - * are special, other IP addresses are looked up in the ARP table. */ - - /* broadcast destination IP address? */ - if (ip_addr_isbroadcast(ipaddr, netif)) { - /* broadcast on Ethernet also */ - dest = (struct eth_addr *)ðbroadcast; - /* multicast destination IP address? */ - } else if (ip_addr_ismulticast(ipaddr)) { - /* Hash IP multicast address to MAC address.*/ - mcastaddr.addr[0] = LL_MULTICAST_ADDR_0; - mcastaddr.addr[1] = LL_MULTICAST_ADDR_1; - mcastaddr.addr[2] = LL_MULTICAST_ADDR_2; - mcastaddr.addr[3] = ip4_addr2(ipaddr) & 0x7f; - mcastaddr.addr[4] = ip4_addr3(ipaddr); - mcastaddr.addr[5] = ip4_addr4(ipaddr); - /* destination Ethernet address is multicast */ - dest = &mcastaddr; - /* unicast destination IP address? */ - } else { - int8_t i; - /* outside local network? if so, this can neither be a global broadcast nor - a subnet broadcast. */ - if (!ip_addr_netcmp(ipaddr, &(netif->ip_addr), &(netif->netmask)) && - !ip_addr_islinklocal(ipaddr)) { -#if LWIP_AUTOIP - struct ip_hdr *iphdr = (struct ip_hdr*)((uint8_t*)q->payload + - sizeof(struct eth_hdr)); - /* According to RFC 3297, chapter 2.6.2 (Forwarding Rules), a packet with - a link-local source address must always be "directly to its destination - on the same physical link. The host MUST NOT send the packet to any - router for forwarding". */ - if (!ip_addr_islinklocal(&iphdr->src)) -#endif /* LWIP_AUTOIP */ - { - /* interface has default gateway? */ - if (!ip_addr_isany(&netif->gw)) { - /* send to hardware address of default gateway IP address */ - dst_addr = &(netif->gw); - /* no default gateway available */ - } else { - /* no route to destination error (default gateway missing) */ - return ERR_RTE; - } - } - } -#if LWIP_NETIF_HWADDRHINT - if (netif->addr_hint != NULL) { - /* per-pcb cached entry was given */ - uint8_t etharp_cached_entry = *(netif->addr_hint); - if (etharp_cached_entry < ARP_TABLE_SIZE) { -#endif /* LWIP_NETIF_HWADDRHINT */ - if ((arp_table[etharp_cached_entry].state >= ETHARP_STATE_STABLE) && - (ip_addr_cmp(dst_addr, &arp_table[etharp_cached_entry].ipaddr))) { - /* the per-pcb-cached entry is stable and the right one! */ - ETHARP_STATS_INC(etharp.cachehit); - return etharp_output_to_arp_index(netif, q, etharp_cached_entry); - } -#if LWIP_NETIF_HWADDRHINT - } - } -#endif /* LWIP_NETIF_HWADDRHINT */ - - /* find stable entry: do this here since this is a critical path for - throughput and etharp_find_entry() is kind of slow */ - for (i = 0; i < ARP_TABLE_SIZE; i++) { - if ((arp_table[i].state >= ETHARP_STATE_STABLE) && - (ip_addr_cmp(dst_addr, &arp_table[i].ipaddr))) { - /* found an existing, stable entry */ - ETHARP_SET_HINT(netif, i); - return etharp_output_to_arp_index(netif, q, i); - } - } - /* no stable entry found, use the (slower) query function: - queue on destination Ethernet address belonging to ipaddr */ - return etharp_query(netif, dst_addr, q); - } - - /* continuation for multicast/broadcast destinations */ - /* obtain source Ethernet address of the given interface */ - /* send packet directly on the link */ - return etharp_send_ip(netif, q, (struct eth_addr*)(netif->hwaddr), dest); -} - -/** - * Send an ARP request for the given IP address and/or queue a packet. - * - * If the IP address was not yet in the cache, a pending ARP cache entry - * is added and an ARP request is sent for the given address. The packet - * is queued on this entry. - * - * If the IP address was already pending in the cache, a new ARP request - * is sent for the given address. The packet is queued on this entry. - * - * If the IP address was already stable in the cache, and a packet is - * given, it is directly sent and no ARP request is sent out. - * - * If the IP address was already stable in the cache, and no packet is - * given, an ARP request is sent out. - * - * @param netif The lwIP network interface on which ipaddr - * must be queried for. - * @param ipaddr The IP address to be resolved. - * @param q If non-NULL, a pbuf that must be delivered to the IP address. - * q is not freed by this function. - * - * @note q must only be ONE packet, not a packet queue! - * - * @return - * - ERR_BUF Could not make room for Ethernet header. - * - ERR_MEM Hardware address unknown, and no more ARP entries available - * to query for address or queue the packet. - * - ERR_MEM Could not queue packet due to memory shortage. - * - ERR_RTE No route to destination (no gateway to external networks). - * - ERR_ARG Non-unicast address given, those will not appear in ARP cache. - * - */ -err_t -etharp_query(struct netif *netif, ip_addr_t *ipaddr, struct pbuf *q) -{ - struct eth_addr * srcaddr = (struct eth_addr *)netif->hwaddr; - err_t result = ERR_MEM; - int8_t i; /* ARP entry index */ - - /* non-unicast address? */ - if (ip_addr_isbroadcast(ipaddr, netif) || - ip_addr_ismulticast(ipaddr) || - ip_addr_isany(ipaddr)) { - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: will not add non-unicast IP address to ARP cache\n")); - return ERR_ARG; - } - - /* find entry in ARP cache, ask to create entry if queueing packet */ - i = etharp_find_entry(ipaddr, ETHARP_FLAG_TRY_HARD); - - /* could not find or create entry? */ - if (i < 0) { - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not create ARP entry\n")); - if (q) { - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: packet dropped\n")); - ETHARP_STATS_INC(etharp.memerr); - } - return (err_t)i; - } - - /* mark a fresh entry as pending (we just sent a request) */ - if (arp_table[i].state == ETHARP_STATE_EMPTY) { - arp_table[i].state = ETHARP_STATE_PENDING; - } - - /* { i is either a STABLE or (new or existing) PENDING entry } */ - LWIP_ASSERT("arp_table[i].state == PENDING or STABLE", - ((arp_table[i].state == ETHARP_STATE_PENDING) || - (arp_table[i].state >= ETHARP_STATE_STABLE))); - - /* do we have a pending entry? or an implicit query request? */ - if ((arp_table[i].state == ETHARP_STATE_PENDING) || (q == NULL)) { - /* try to resolve it; send out ARP request */ - result = etharp_request(netif, ipaddr); - if (result != ERR_OK) { - /* ARP request couldn't be sent */ - /* We don't re-send arp request in etharp_tmr, but we still queue packets, - since this failure could be temporary, and the next packet calling - etharp_query again could lead to sending the queued packets. */ - } - if (q == NULL) { - return result; - } - } - - /* packet given? */ - LWIP_ASSERT("q != NULL", q != NULL); - /* stable entry? */ - if (arp_table[i].state >= ETHARP_STATE_STABLE) { - /* we have a valid IP->Ethernet address mapping */ - ETHARP_SET_HINT(netif, i); - /* send the packet */ - result = etharp_send_ip(netif, q, srcaddr, &(arp_table[i].ethaddr)); - /* pending entry? (either just created or already pending */ - } else if (arp_table[i].state == ETHARP_STATE_PENDING) { - /* entry is still pending, queue the given packet 'q' */ - struct pbuf *p; - int copy_needed = 0; - /* IF q includes a PBUF_REF, PBUF_POOL or PBUF_RAM, we have no choice but - * to copy the whole queue into a new PBUF_RAM (see bug #11400) - * PBUF_ROMs can be left as they are, since ROM must not get changed. */ - p = q; - while (p) { - LWIP_ASSERT("no packet queues allowed!", (p->len != p->tot_len) || (p->next == 0)); - if(p->type != PBUF_ROM) { - copy_needed = 1; - break; - } - p = p->next; - } - if(copy_needed) { - /* copy the whole packet into new pbufs */ - p = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM); - if(p != NULL) { - if (pbuf_copy(p, q) != ERR_OK) { - pbuf_free(p); - p = NULL; - } - } - } else { - /* referencing the old pbuf is enough */ - p = q; - pbuf_ref(p); - } - /* packet could be taken over? */ - if (p != NULL) { - /* queue packet ... */ -#if ARP_QUEUEING - struct etharp_q_entry *new_entry; - /* allocate a new arp queue entry */ - new_entry = (struct etharp_q_entry *)memp_malloc(MEMP_ARP_QUEUE); - if (new_entry != NULL) { - new_entry->next = 0; - new_entry->p = p; - if(arp_table[i].q != NULL) { - /* queue was already existent, append the new entry to the end */ - struct etharp_q_entry *r; - r = arp_table[i].q; - while (r->next != NULL) { - r = r->next; - } - r->next = new_entry; - } else { - /* queue did not exist, first item in queue */ - arp_table[i].q = new_entry; - } - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: queued packet %p on ARP entry %"S16_F"\n", (void *)q, (int16_t)i)); - result = ERR_OK; - } else { - /* the pool MEMP_ARP_QUEUE is empty */ - pbuf_free(p); - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q)); - result = ERR_MEM; - } -#else /* ARP_QUEUEING */ - /* always queue one packet per ARP request only, freeing a previously queued packet */ - if (arp_table[i].q != NULL) { - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: dropped previously queued packet %p for ARP entry %"S16_F"\n", (void *)q, (int16_t)i)); - pbuf_free(arp_table[i].q); - } - arp_table[i].q = p; - result = ERR_OK; - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: queued packet %p on ARP entry %"S16_F"\n", (void *)q, (int16_t)i)); -#endif /* ARP_QUEUEING */ - } else { - ETHARP_STATS_INC(etharp.memerr); - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q)); - result = ERR_MEM; - } - } - return result; -} - -/** - * Send a raw ARP packet (opcode and all addresses can be modified) - * - * @param netif the lwip network interface on which to send the ARP packet - * @param ethsrc_addr the source MAC address for the ethernet header - * @param ethdst_addr the destination MAC address for the ethernet header - * @param hwsrc_addr the source MAC address for the ARP protocol header - * @param ipsrc_addr the source IP address for the ARP protocol header - * @param hwdst_addr the destination MAC address for the ARP protocol header - * @param ipdst_addr the destination IP address for the ARP protocol header - * @param opcode the type of the ARP packet - * @return ERR_OK if the ARP packet has been sent - * ERR_MEM if the ARP packet couldn't be allocated - * any other err_t on failure - */ -#if !LWIP_AUTOIP -static -#endif /* LWIP_AUTOIP */ -err_t -etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, - const struct eth_addr *ethdst_addr, - const struct eth_addr *hwsrc_addr, const ip_addr_t *ipsrc_addr, - const struct eth_addr *hwdst_addr, const ip_addr_t *ipdst_addr, - const uint16_t opcode) -{ - struct pbuf *p; - err_t result = ERR_OK; - struct eth_hdr *ethhdr; - struct etharp_hdr *hdr; -#if LWIP_AUTOIP - const uint8_t * ethdst_hwaddr; -#endif /* LWIP_AUTOIP */ - - LWIP_ASSERT("netif != NULL", netif != NULL); - - /* allocate a pbuf for the outgoing ARP request packet */ - p = pbuf_alloc(PBUF_RAW, SIZEOF_ETHARP_PACKET, PBUF_RAM); - /* could allocate a pbuf for an ARP request? */ - if (p == NULL) { - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("etharp_raw: could not allocate pbuf for ARP request.\n")); - ETHARP_STATS_INC(etharp.memerr); - return ERR_MEM; - } - LWIP_ASSERT("check that first pbuf can hold struct etharp_hdr", - (p->len >= SIZEOF_ETHARP_PACKET)); - - ethhdr = (struct eth_hdr *)p->payload; - hdr = (struct etharp_hdr *)((uint8_t*)ethhdr + SIZEOF_ETH_HDR); - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_raw: sending raw ARP packet.\n")); - hdr->opcode = htons(opcode); - - LWIP_ASSERT("netif->hwaddr_len must be the same as ETHARP_HWADDR_LEN for etharp!", - (netif->hwaddr_len == ETHARP_HWADDR_LEN)); -#if LWIP_AUTOIP - /* If we are using Link-Local, all ARP packets that contain a Link-Local - * 'sender IP address' MUST be sent using link-layer broadcast instead of - * link-layer unicast. (See RFC3927 Section 2.5, last paragraph) */ - ethdst_hwaddr = ip_addr_islinklocal(ipsrc_addr) ? (uint8_t*)(ethbroadcast.addr) : ethdst_addr->addr; -#endif /* LWIP_AUTOIP */ - /* Write the ARP MAC-Addresses */ - ETHADDR16_COPY(&hdr->shwaddr, hwsrc_addr); - ETHADDR16_COPY(&hdr->dhwaddr, hwdst_addr); - /* Write the Ethernet MAC-Addresses */ -#if LWIP_AUTOIP - ETHADDR16_COPY(ðhdr->dest, ethdst_hwaddr); -#else /* LWIP_AUTOIP */ - ETHADDR16_COPY(ðhdr->dest, ethdst_addr); -#endif /* LWIP_AUTOIP */ - ETHADDR16_COPY(ðhdr->src, ethsrc_addr); - /* Copy struct ip_addr2 to aligned ip_addr, to support compilers without - * structure packing. */ - IPADDR2_COPY(&hdr->sipaddr, ipsrc_addr); - IPADDR2_COPY(&hdr->dipaddr, ipdst_addr); - - hdr->hwtype = PP_HTONS(HWTYPE_ETHERNET); - hdr->proto = PP_HTONS(ETHTYPE_IP); - /* set hwlen and protolen */ - hdr->hwlen = ETHARP_HWADDR_LEN; - hdr->protolen = sizeof(ip_addr_t); - - ethhdr->type = PP_HTONS(ETHTYPE_ARP); - /* send ARP query */ - result = netif->linkoutput(netif, p); - ETHARP_STATS_INC(etharp.xmit); - /* free ARP query packet */ - pbuf_free(p); - p = NULL; - /* could not allocate pbuf for ARP request */ - - return result; -} - -/** - * Send an ARP request packet asking for ipaddr. - * - * @param netif the lwip network interface on which to send the request - * @param ipaddr the IP address for which to ask - * @return ERR_OK if the request has been sent - * ERR_MEM if the ARP packet couldn't be allocated - * any other err_t on failure - */ -err_t -etharp_request(struct netif *netif, ip_addr_t *ipaddr) -{ - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_request: sending ARP request.\n")); - return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast, - (struct eth_addr *)netif->hwaddr, &netif->ip_addr, ðzero, - ipaddr, ARP_REQUEST); -} -#endif /* LWIP_ARP */ - -/** - * Process received ethernet frames. Using this function instead of directly - * calling ip_input and passing ARP frames through etharp in ethernetif_input, - * the ARP cache is protected from concurrent access. - * - * @param p the recevied packet, p->payload pointing to the ethernet header - * @param netif the network interface on which the packet was received - */ -err_t -ethernet_input(struct pbuf *p, struct netif *netif) -{ - struct eth_hdr* ethhdr; - uint16_t type; -#if LWIP_ARP || ETHARP_SUPPORT_VLAN - int16_t ip_hdr_offset = SIZEOF_ETH_HDR; -#endif /* LWIP_ARP || ETHARP_SUPPORT_VLAN */ - - if (p->len <= SIZEOF_ETH_HDR) { - /* a packet with only an ethernet header (or less) is not valid for us */ - ETHARP_STATS_INC(etharp.proterr); - ETHARP_STATS_INC(etharp.drop); - goto free_and_return; - } - - /* points to packet payload, which starts with an Ethernet header */ - ethhdr = (struct eth_hdr *)p->payload; - LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, - ("ethernet_input: dest:%"X8_F":%"X8_F":%"X8_F":%"X8_F":%"X8_F":%"X8_F", src:%"X8_F":%"X8_F":%"X8_F":%"X8_F":%"X8_F":%"X8_F", type:%"X16_F"\n", - (unsigned)ethhdr->dest.addr[0], (unsigned)ethhdr->dest.addr[1], (unsigned)ethhdr->dest.addr[2], - (unsigned)ethhdr->dest.addr[3], (unsigned)ethhdr->dest.addr[4], (unsigned)ethhdr->dest.addr[5], - (unsigned)ethhdr->src.addr[0], (unsigned)ethhdr->src.addr[1], (unsigned)ethhdr->src.addr[2], - (unsigned)ethhdr->src.addr[3], (unsigned)ethhdr->src.addr[4], (unsigned)ethhdr->src.addr[5], - (unsigned)htons(ethhdr->type))); - - type = ethhdr->type; -#if ETHARP_SUPPORT_VLAN - if (type == PP_HTONS(ETHTYPE_VLAN)) { - struct eth_vlan_hdr *vlan = (struct eth_vlan_hdr*)(((char*)ethhdr) + SIZEOF_ETH_HDR); - if (p->len <= SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR) { - /* a packet with only an ethernet/vlan header (or less) is not valid for us */ - ETHARP_STATS_INC(etharp.proterr); - ETHARP_STATS_INC(etharp.drop); - goto free_and_return; - } -#if defined(ETHARP_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK_FN) /* if not, allow all VLANs */ -#ifdef ETHARP_VLAN_CHECK_FN - if (!ETHARP_VLAN_CHECK_FN(ethhdr, vlan)) { -#elif defined(ETHARP_VLAN_CHECK) - if (VLAN_ID(vlan) != ETHARP_VLAN_CHECK) { -#endif - /* silently ignore this packet: not for our VLAN */ - pbuf_free(p); - return ERR_OK; - } -#endif /* defined(ETHARP_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK_FN) */ - type = vlan->tpid; - ip_hdr_offset = SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR; - } -#endif /* ETHARP_SUPPORT_VLAN */ - -#if LWIP_ARP_FILTER_NETIF - netif = LWIP_ARP_FILTER_NETIF_FN(p, netif, htons(type)); -#endif /* LWIP_ARP_FILTER_NETIF*/ - - if (ethhdr->dest.addr[0] & 1) { - /* this might be a multicast or broadcast packet */ - if (ethhdr->dest.addr[0] == LL_MULTICAST_ADDR_0) { - if ((ethhdr->dest.addr[1] == LL_MULTICAST_ADDR_1) && - (ethhdr->dest.addr[2] == LL_MULTICAST_ADDR_2)) { - /* mark the pbuf as link-layer multicast */ - p->flags |= PBUF_FLAG_LLMCAST; - } - } else if (eth_addr_cmp(ðhdr->dest, ðbroadcast)) { - /* mark the pbuf as link-layer broadcast */ - p->flags |= PBUF_FLAG_LLBCAST; - } - } - - switch (type) { -#if LWIP_ARP - /* IP packet? */ - case PP_HTONS(ETHTYPE_IP): - if (!(netif->flags & NETIF_FLAG_ETHARP)) { - goto free_and_return; - } -#if ETHARP_TRUST_IP_MAC - /* update ARP table */ - etharp_ip_input(netif, p); -#endif /* ETHARP_TRUST_IP_MAC */ - /* skip Ethernet header */ - if(pbuf_header(p, -ip_hdr_offset)) { - LWIP_ASSERT("Can't move over header in packet", 0); - goto free_and_return; - } else { - /* pass to IP layer */ - ip_input(p, netif); - } - break; - - case PP_HTONS(ETHTYPE_ARP): - if (!(netif->flags & NETIF_FLAG_ETHARP)) { - goto free_and_return; - } - /* pass p to ARP module */ - etharp_arp_input(netif, (struct eth_addr*)(netif->hwaddr), p); - break; -#endif /* LWIP_ARP */ -#if PPPOE_SUPPORT - case PP_HTONS(ETHTYPE_PPPOEDISC): /* PPP Over Ethernet Discovery Stage */ - pppoe_disc_input(netif, p); - break; - - case PP_HTONS(ETHTYPE_PPPOE): /* PPP Over Ethernet Session Stage */ - pppoe_data_input(netif, p); - break; -#endif /* PPPOE_SUPPORT */ - - default: - ETHARP_STATS_INC(etharp.proterr); - ETHARP_STATS_INC(etharp.drop); - goto free_and_return; - } - - /* This means the pbuf is freed or consumed, - so the caller doesn't have to free it again */ - return ERR_OK; - -free_and_return: - pbuf_free(p); - return ERR_OK; -} -#endif /* LWIP_ARP || LWIP_ETHERNET */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/mDNS/mDNS.h b/Firmware/RTLGDB/USDK/component/common/network/mDNS/mDNS.h deleted file mode 100644 index e9e9b17..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/mDNS/mDNS.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _MDNS_H -#define _MDNS_H - -#include - -/* Text Record */ -typedef struct _TXTRecordRef_t { - char PrivateData[16]; -} TXTRecordRef; - -extern void TXTRecordCreate(TXTRecordRef *txtRecord, uint16_t bufferLen, void *buffer); -extern int TXTRecordSetValue(TXTRecordRef *txtRecord, const char *key, uint8_t valueSize, const void *value); -extern void TXTRecordDeallocate(TXTRecordRef *txtRecord); - -/* mDNS */ -typedef void *DNSServiceRef; - -extern int mDNSResponderInit(void); -extern void mDNSResponderDeinit(void); -extern DNSServiceRef mDNSRegisterService(char *name, char *service_type, char *domain, unsigned short port, TXTRecordRef *txtRecord); -extern void mDNSDeregisterService(DNSServiceRef serviceRef); -extern void mDNSUpdateService(DNSServiceRef serviceRef, TXTRecordRef *txtRecord, unsigned int ttl); -extern void mDNSRegisterAllInterfaces(void); -extern void mDNSDeregisterAllInterfaces(void); - -#endif /* _MDNS_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/mDNS/mDNSPlatform.c b/Firmware/RTLGDB/USDK/component/common/network/mDNS/mDNSPlatform.c deleted file mode 100644 index 54fb774..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/mDNS/mDNSPlatform.c +++ /dev/null @@ -1,37 +0,0 @@ -#include -#include -extern struct netif xnetif[]; - -/*----------------------------------------------------------------------- - * Mandatory functions - *-----------------------------------------------------------------------*/ - -// Mandatory function for custom initialization -// called when mDNS initialization -void mDNSPlatformCustomInit(void) -{ - xnetif[0].flags |= NETIF_FLAG_IGMP; -} - -uint16_t mDNSPlatformHtons(uint16_t hostshort) -{ - return htons(hostshort); -} - -uint32_t mDNSPlatformInetAddr(char *cp) -{ - return inet_addr(cp); -} - -// Mandatory function to get hostname -// called when mDNS initialization -_WEAK char *mDNSPlatformHostname(void) -{ -#if LWIP_NETIF_HOSTNAME - return xnetif[0].hostname; -#else - return DEF_HOSTNAME; -#endif -} - -/*-----------------------------------------------------------------------*/ diff --git a/Firmware/RTLGDB/USDK/component/common/network/netbios/netbios.c b/Firmware/RTLGDB/USDK/component/common/network/netbios/netbios.c deleted file mode 100644 index e312b03..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/netbios/netbios.c +++ /dev/null @@ -1,389 +0,0 @@ -/** - * @file - * NetBIOS name service sample - * https://tools.ietf.org/html/rfc1002 - * Modified for RTL871x pvvx - */ - -#if 1 // def USE_NETBIOS - -/* - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - */ -#include "rtl8195a/rtl_common.h" -#include "rtl8195a.h" - -//#include "lwip/opt.h" -#include "netbios/netbios.h" - -#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */ - -#include - -#include "ipv4/lwip/ip.h" -#include "lwip/udp.h" -#include "lwip/netif.h" -#include "lwip_netconf.h" -#include "platform/esp_comp.h" - -#define NETBIOS_CODE_ATTR -#define NETBIOS_DATA_ATTR - -extern struct netif xnetif[NET_IF_NUM]; - -#define NBS_DEF_NAME DEF_HOSTNAME - -/** This is an example implementation of a NetBIOS name server. - * It responds to name queries for a configurable name. - * Name resolving is not supported. - * - * Note that the device doesn't broadcast it's own name so can't - * detect duplicate names! - */ - -/** Since there's no standard function for case-insensitive string comparision, - * we need another define here: - * define this to stricmp() for windows or strcasecmp() for linux. - * If not defined, comparision is case sensitive and NETBIOS_LWIP_NAME must be - * uppercase - */ -#ifndef NETBIOS_STRCMP -#define NETBIOS_STRCMP(str1, str2) os_strcmp(str1, str2) -#endif - -/** default port number for "NetBIOS Name service */ -//#define NETBIOS_PORT 137 -/** NetBIOS name of LWIP device - * This must be uppercase until NETBIOS_STRCMP() is defined to a string - * comparision function that is case insensitive. - * If you want to use the netif's hostname, use this (with LWIP_NETIF_HOSTNAME): - * (ip_current_netif() != NULL ? ip_current_netif()->hostname != NULL ? ip_current_netif()->hostname : "" : "") - */ - -/** size of a NetBIOS name */ -//#define NETBIOS_NAME_LEN 16 // in netbios.h -char netbios_name[NET_IF_NUM][NETBIOS_NAME_LEN + 1]; // default netifs: 0 - SoftAP, 1 - Station, 2 - Ethernet - -/** The Time-To-Live for NetBIOS name responds (in seconds) - * Default is 300000 seconds (3 days, 11 hours, 20 minutes) */ -#define NETBIOS_NAME_TTL 300000 - -/** NetBIOS header flags */ -#define NETB_HFLAG_RESPONSE 0x8000U -#define NETB_HFLAG_OPCODE 0x7800U -#define NETB_HFLAG_OPCODE_NAME_QUERY 0x0000U -#define NETB_HFLAG_AUTHORATIVE 0x0400U -#define NETB_HFLAG_TRUNCATED 0x0200U -#define NETB_HFLAG_RECURS_DESIRED 0x0100U -#define NETB_HFLAG_RECURS_AVAILABLE 0x0080U -#define NETB_HFLAG_BROADCAST 0x0010U -#define NETB_HFLAG_REPLYCODE 0x0008U -#define NETB_HFLAG_REPLYCODE_NOERROR 0x0000U - -/** NetBIOS name flags */ -#define NETB_NFLAG_UNIQUE 0x8000U -#define NETB_NFLAG_NODETYPE 0x6000U -#define NETB_NFLAG_NODETYPE_HNODE 0x6000U -#define NETB_NFLAG_NODETYPE_MNODE 0x4000U -#define NETB_NFLAG_NODETYPE_PNODE 0x2000U -#define NETB_NFLAG_NODETYPE_BNODE 0x0000U - -/** NetBIOS message header */ -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct netbios_hdr { - PACK_STRUCT_FIELD(u16_t trans_id); - PACK_STRUCT_FIELD(u16_t flags); - PACK_STRUCT_FIELD(u16_t questions); - PACK_STRUCT_FIELD(u16_t answerRRs); - PACK_STRUCT_FIELD(u16_t authorityRRs); - PACK_STRUCT_FIELD(u16_t additionalRRs); -}PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -/** NetBIOS message name part */ -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct netbios_name_hdr { - PACK_STRUCT_FIELD(u8_t nametype); - PACK_STRUCT_FIELD(u8_t encname[(NETBIOS_NAME_LEN*2)+1]); - PACK_STRUCT_FIELD(u16_t type); - PACK_STRUCT_FIELD(u16_t cls); - PACK_STRUCT_FIELD(u32_t ttl); - PACK_STRUCT_FIELD(u16_t datalen); - PACK_STRUCT_FIELD(u16_t flags); - PACK_STRUCT_FIELD(ip_addr_p_t addr); -}PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -/** NetBIOS message */ -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct netbios_resp { - struct netbios_hdr resp_hdr; - struct netbios_name_hdr resp_name; -}PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -//#define toupper(CH) (((CH) >= 'a' && (CH) <= 'z') ? ((CH) - 'a' + 'A') : (CH)) - -extern int toupper(int ch); - -/** NetBIOS decoding name */ -static int8_t NETBIOS_CODE_ATTR NBNS_decode(char *dst, char *src) -{ - uint8_t i, j; - char c; - - for(i=0, j=0; i<15; i++) - { - c = (src[j++]-'A')<<4; - c |= (src[j++]-'A')<<0; - if(c == ' ') - { - break; - } - dst[i] = toupper(c); - } - dst[i] = 0; - - return (((src[30]-'A')<<4)|(src[31]-'A')); // 0x00 = Workstation -} - -#if 0 -/** NetBIOS encoding name */ -static void NBNS_encode(char *dst, char *src, uint8_t type) -{ - uint8_t i, j; - char c; - - //encode name - for(i=0, j=0; (i<15) && src[i]; i++) - { - c = toupper(src[i]); - dst[j++] = 'A'+((c>>4)&0x0f); - dst[j++] = 'A'+((c>>0)&0x0f); - } - - //add spaces - for(; i<15; i++) - { - dst[j++] = 'A'+((' '>>4)&0x0f); - dst[j++] = 'A'+((' '>>0)&0x0f); - } - - //set type (0x00 = Workstation) - dst[j++] = 'A'+((type>>4)&0x0f); - dst[j++] = 'A'+((type>>0)&0x0f); -} -#endif - -/** NetBIOS Name service recv callback */ -static void NETBIOS_CODE_ATTR -netbios_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p, ip_addr_t *addr, - u16_t port) { - LWIP_UNUSED_ARG(arg); - /* if packet is valid */ - if (p != NULL && p->len >= sizeof(struct netbios_hdr) + sizeof(struct netbios_name_hdr) - 12) { - if (current_netif != NULL && current_netif->num < NET_IF_NUM) { - uint32 ip = current_netif->ip_addr.addr; - char *curbiosname = netbios_name[current_netif->num]; - if (curbiosname[0] != '\0' && ip != 0 - /* we only answer if we got a default interface */ - && (((ip ^ addr->addr) & current_netif->netmask.addr) == 0)) { // запрет ответа другой подсети -#if DEBUGSOO > 3 - os_printf("nbns: " IPSTR ",\t'%s'\n", IP2STR(&ip), curbiosname); -#endif - char netbiosname[NETBIOS_NAME_LEN + 1]; - os_memset(netbiosname, 0, sizeof(netbiosname)); - struct netbios_hdr* netbios_hdr = - (struct netbios_hdr*) p->payload; - struct netbios_name_hdr* netbios_name_hdr = - (struct netbios_name_hdr*) (netbios_hdr + 1); - /* @todo: do we need to check answerRRs/authorityRRs/additionalRRs? */ - /* if the packet is a NetBIOS name query question */ - if (((netbios_hdr->flags & PP_NTOHS(NETB_HFLAG_OPCODE)) - == PP_NTOHS(NETB_HFLAG_OPCODE_NAME_QUERY)) - && ((netbios_hdr->flags & PP_NTOHS(NETB_HFLAG_RESPONSE)) - == 0) - && (netbios_hdr->questions == PP_NTOHS(1)) - && (netbios_name_hdr->cls == PP_NTOHS(1)) - && (netbios_name_hdr->type == PP_NTOHS(0x20))) { - /* decode the NetBIOS name */ - int8_t ret = NBNS_decode(netbiosname, - (char*) (netbios_name_hdr->encname)); - /* if the packet is for us */ -#if DEBUGSOO > 2 - if (ret == 0) os_printf("nbns: get " IPSTR ", '%s'\n", IP2STR(addr), - netbiosname); -#endif - if (ret == 0 && NETBIOS_STRCMP(curbiosname, netbiosname) == 0) { // netbiosname[0] == '*' -#if DEBUGSOO > 1 - os_printf("nbns: out " IPSTR ", '%s'\n", IP2STR(&ip), - curbiosname); -#endif - struct pbuf *q; - struct netbios_resp *resp; - - q = pbuf_alloc(PBUF_TRANSPORT, - sizeof(struct netbios_resp), PBUF_RAM); - if (q != NULL) { - resp = (struct netbios_resp*) q->payload; - - /* prepare NetBIOS header response */ - resp->resp_hdr.trans_id = netbios_hdr->trans_id; - resp->resp_hdr.flags = - PP_HTONS( - NETB_HFLAG_RESPONSE | NETB_HFLAG_OPCODE_NAME_QUERY | NETB_HFLAG_AUTHORATIVE | NETB_HFLAG_RECURS_DESIRED); - resp->resp_hdr.questions = 0; - resp->resp_hdr.answerRRs = PP_HTONS(1); - resp->resp_hdr.authorityRRs = 0; - resp->resp_hdr.additionalRRs = 0; - - /* prepare NetBIOS header datas */ - MEMCPY(resp->resp_name.encname, - netbios_name_hdr->encname, - sizeof(netbios_name_hdr->encname)); - resp->resp_name.nametype = - netbios_name_hdr->nametype; - resp->resp_name.type = netbios_name_hdr->type; - resp->resp_name.cls = netbios_name_hdr->cls; - resp->resp_name.ttl = PP_HTONL(NETBIOS_NAME_TTL); - resp->resp_name.datalen = PP_HTONS( - sizeof(resp->resp_name.flags) - + sizeof(resp->resp_name.addr)); - resp->resp_name.flags = PP_HTONS( - NETB_NFLAG_NODETYPE_BNODE); - - resp->resp_name.addr.addr = ip; // netif_default->ip_addr.addr; - /* send the NetBIOS response */ - udp_sendto(upcb, q, addr, port); - /* free the "reference" pbuf */ - pbuf_free(q); - } - } - } - } - } - /* free the pbuf */ - pbuf_free(p); - } -} - -struct udp_pcb * NETBIOS_CODE_ATTR netbios_pcb(void) { - struct udp_pcb *pcb; - for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { - if (pcb->local_port == NETBIOS_PORT) - return pcb; - } - return NULL; -} - -/* default netifs/interfacenum: 0 - SoftAP, 1 - Station, 2 - Ethernet */ - -bool NETBIOS_CODE_ATTR netbios_set_name(unsigned char interfacenum, char * name) { - if (interfacenum >= NET_IF_NUM) - return false; - int i; - uint8 * pnbn = netbios_name[interfacenum]; - uint8 * pmane = name; - if (name != NULL) { - for (i = 0; i < NETBIOS_NAME_LEN; i++) { - if (*pmane < ' ') - break; - else if (*pmane == ' ') - *pnbn++ = '_'; - else - *pnbn++ = toupper(*pmane); - pmane++; - }; - }; - *pnbn = '\0'; - return true; -} - -bool NETBIOS_CODE_ATTR netbios_off(void) { - struct udp_pcb *pcb = netbios_pcb(); - if (pcb == NULL) - return false; - udp_remove(pcb); - return true; -} - -void NETBIOS_CODE_ATTR netbios_init(void) { - struct udp_pcb *pcb; - char buf[NETBIOS_NAME_LEN]; - if (netbios_pcb() != NULL) - return; - - for(int i = 0; i < NET_IF_NUM; i++) { - if (netbios_name[i][0] == 0) { -#if LWIP_NETIF_HOSTNAME - if(xnetif[i].hostname != 0) { - netbios_set_name(i, xnetif[i].hostname); - } - else -#endif - { - sprintf(buf, NBS_DEF_NAME "%d", i); - netbios_set_name(i, buf); - }; - }; - }; - -#if DEBUGSOO > 1 - os_printf("NetBIOS init, interface "); - for(int i = 0; i < NET_IF_NUM; i++) { - os_printf("%d: '%s' ", i, netbios_name[i]); - } - os_printf("\n"); -#endif - pcb = udp_new(); - if (pcb != NULL) { - /* we have to be allowed to send broadcast packets! */ - pcb->so_options |= SOF_BROADCAST; - udp_bind(pcb, IP_ADDR_ANY, NETBIOS_PORT); - udp_recv(pcb, netbios_recv, pcb); - } -} -#endif /* LWIP_UDP */ - -#endif // USE_NETBIOS diff --git a/Firmware/RTLGDB/USDK/component/common/network/netbios/netbios.h b/Firmware/RTLGDB/USDK/component/common/network/netbios/netbios.h deleted file mode 100644 index a843cc1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/netbios/netbios.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __NETBIOS_H__ -#define __NETBIOS_H__ - -#include "lwip/opt.h" - -/** default port number for "NetBIOS Name service */ -#define NETBIOS_PORT 137 - -/** size of a NetBIOS name */ -#define NETBIOS_NAME_LEN 16 - -#ifndef NET_IF_NUM -#define NET_IF_NUM 2 -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -//#if LWIP_NETIF_HOSTNAME -extern char netbios_name[NET_IF_NUM][NETBIOS_NAME_LEN + 1]; // default netifs/interfacenum: 0 - SoftAP, 1 - Station, 2 - Ethernet -//#endif - -// struct udp_pcb * netbios_pcb(void); -void netbios_init(void); -bool netbios_set_name(unsigned char interfacenum, char * name); // default netifs/interfacenum: 0 - SoftAP, 1 - Station, 2 - Ethernet -bool netbios_off(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __NETBIOS_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/rtsp/rtp_api.h b/Firmware/RTLGDB/USDK/component/common/network/rtsp/rtp_api.h deleted file mode 100644 index 80ead3d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/rtsp/rtp_api.h +++ /dev/null @@ -1,134 +0,0 @@ -#ifndef _RTP_API_H_ -#define _RTP_API_H_ - -#include "dlist.h" -#include "basic_types.h" -#include "osdep_service.h" -//#include "osdep_api.h" -#include "avcodec.h" -#include //for host network byte order convertion - -/* from error_base.h */ -#define EIO 5 /* I/O error */ -#define EAGAIN 11 /* Try again */ -#define ENOMEM 12 /* Out of memory */ -#define EINVAL 22 /* Invalid argument */ - -#define RTP_BIG_ENDIAN 0 -#define RTP_HDR_SZ 12 - -#define RTP_SERVER_PORT_BASE 55608 -#define RTP_PORT_BASE 50020 -#define RTP_CLIENT_PORT_BASE 51020 -/* - * RTP data header from RFC1889 - */ -/* - * - * - * The RTP header has the following format: - * - * 0 1 2 3 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * |V=2|P|X| CC |M| PT | sequence number | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | timestamp | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | synchronization source (SSRC) identifier | - * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ - * | contributing source (CSRC) identifiers | - * | .... | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * - * RTP data header - */ - -typedef struct { -#if RTP_BIG_ENDIAN - u16 version:2; /* protocol version */ - u16 p:1; /* padding flag */ - u16 x:1; /* header extension flag */ - u16 cc:4; /* CSRC count */ - u16 m:1; /* marker bit */ - u16 pt:7; /* payload type */ -#else /*RTP_LITTLE_ENDIAN*/ - u16 cc:4; /* CSRC count */ - u16 x:1; /* header extension flag */ - u16 p:1; /* padding flag */ - u16 version:2; /* protocol version */ - u16 pt:7; /* payload type */ - u16 m:1; /* marker bit */ -#endif - u16 seq; /* sequence number */ - u32 ts; /* timestamp */ - u32 ssrc; /* synchronization source */ - u32 *csrc; /* optional CSRC list, skip if cc is set to 0 here*/ -} rtp_hdr_t; - -/*sturcture to hold connect info*/ -struct connect_context -{ - int socket_id; - u8 *server_ip; - u16 server_port; - u8 *remote_ip; - u16 remote_port; -}; - -struct rtp_statistics -{ - u32 rtp_tick; - u32 rtp_tick_inc; - u32 base_timestamp; - /*for flow control*/ - u32 delay_threshold; //in ms - u32 timer1; //time before send - u32 timer2; //time after sent - u32 delta_timer; - u8 do_start_check; //indicate if start check need to be done - u32 sent_packet; - u32 drop_packet; -}; - -enum rtp_object_state -{ - RTP_OBJECT_IDLE = 0, - RTP_OBJECT_READY, - RTP_OBJECT_INUSE, - RTP_OBJECT_USED, -}; - -struct stream_context; -struct rtp_object; - -struct rtp_object -{ - struct list_head rtp_list; - _mutex list_lock; - rtp_hdr_t *rtphdr; - void *extra; //pointer to type specific structure - int index; //respective internal buffer index - u8 *data; // respective internal buffer data addr - int len; //one complete frame data length - u32 timestamp; //timestamp - u32 fs:1; //fragment start - u32 fe:1; //fragment end - u32 fk:1; //fragment keep indicator so that cannot avoid sending by flow control - u32 fd:29; //fragment data size (max size of 2^29-1) - enum rtp_object_state state; - struct connect_context connect_ctx; - int (*rtp_object_handler)(struct stream_context *stream_ctx, struct rtp_object *payload); -}; - -void rtp_object_init(struct rtp_object *payload); -void rtp_object_deinit(struct rtp_object *payload); -void rtp_object_set_fs(struct rtp_object *payload, int flag); -void rtp_object_set_fe(struct rtp_object *payload, int flag); -void rtp_object_set_fk(struct rtp_object *payload, int flag); -void rtp_object_set_fd(struct rtp_object *payload, int size); -void rtp_load_o_handler_by_codec_id(struct rtp_object *payload, int id); -void rtp_fill_header(rtp_hdr_t *rtphdr, int version, int padding, int extension, int cc, int marker, int pt, u16 seq, u32 ts, u32 ssrc); -int rtp_parse_header(u8 *src, rtp_hdr_t *rtphdr, int is_nbo); -void rtp_dump_header(rtp_hdr_t *rtphdr, int is_nbo); -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/network/rtsp/rtsp_api.h b/Firmware/RTLGDB/USDK/component/common/network/rtsp/rtsp_api.h deleted file mode 100644 index c8a4636..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/rtsp/rtsp_api.h +++ /dev/null @@ -1,337 +0,0 @@ -#ifndef _RTSP_H_ -#define _RTSP_H_ - -#include "dlist.h" -#include "osdep_api.h" -#include "avcodec.h" - -#define RTSP_DEBUG 0 - -#if RTSP_DEBUG -#define RTSP_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#define RTSP_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#else -#define RTSP_PRINTF(fmt, args...) -#define RTSP_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#endif - - -/*******************************************************general***************************************************************************/ - -struct stream_context -{ - struct list_head payload_entry; - _Mutex entry_lock; - _Sema sema; - void *protoCtx; // tranport layer protocol info.(eg.RTSP/HTTP) - int isProcess; - int allowStream; - int pt; //payload type - struct codec_info codec; - void *priv; // pointer to private data -}; - -/************************************************************** start of rtsp *************************************************************/ - -/*rtsp command list*/ -#define CMD_OPTIONS 1 -#define CMD_DESCRIBE 2 -#define CMD_SETUP 3 -#define CMD_TEARDOWN 4 -#define CMD_PLAY 5 -#define CMD_PAUSE 6 - -/*rtsp cast mode list*/ -#define UNICAST_UDP_MODE 1 -#define UNICAST_TCP_MODE 2 -#define MULTICAST_MODE 3 - -#define CRLF "\r\n" -#define BOUNDARY "amebaimagetest" -#define RTSP_RESPONSE_SIZE 512 //max size for request/response buffer -#define SERVER_PORT_RANGE_MIN 55608 -#define SERVER_PORT_RANGE_MAX 55625 -#define PORT_RANGE_MIN 50020 -#define PORT_RANGE_MAX 50036 - -#if (SERVER_PORT_RANGE_MIN >= SERVER_PORT_RANGE_MAX) || (PORT_RANGE_MIN >= PORT_RANGE_MAX) - #error "port range invalid" -#endif -#if ((SERVER_PORT_RANGE_MIN%2) != 0) || ((PORT_RANGE_MIN%2) != 0) - #error "minimal port value should be even" -#endif - -#define DEF_RTSP_PORT 554 -#define DEF_HTTP_PORT 5008 - -/************************************************************** end of rtsp *************************************************************/ - -/************************************************************** start of rtp **************************************************************/ - -#define DEF_RTP_PORT 27750 -#define RTP_BIG_ENDIAN 0 -#define RTP_HDR_SZ 12 -/*rtp payload type mapping and standard rtp payload type table*/ -#define RTP_PT_PCMU 0 -#define RTP_PT_GSM 3 -#define RTP_PT_G723 4 -#define RTP_PT_DVI4_R8000 5 -#define RTP_PT_DVI4_R16000 6 -#define RTP_PT_LPC 7 -#define RTP_PT_PCMA 8 -#define RTP_PT_G722 9 -#define RTP_PT_L16_C2 10 -#define RTP_PT_L16_C1 11 -#define RTP_PT_QCELP 12 -#define RTP_PT_CN 13 -#define RTP_PT_MPA 14 -#define RTP_PT_G728 15 -#define RTP_PT_DVI4_R11025 16 -#define RTP_PT_DVI4_R22050 17 -#define RTP_PT_G719 18 -#define RTP_PT_CELB 25 -#define RTP_PT_JPEG 26 -#define RTP_PT_NV 28 -#define RTP_PT_H261 31 -#define RTP_PT_MPV 32 -#define RTP_PT_MP2T 33 -#define RTP_PT_H263 34 -#define RTP_PT_RTCP_BASE 72 -#define RTP_PT_DYN_BASE 96 -#undef RTP_PT_UNKNOWN -#define RTP_PT_UNKNOWN -1 - -#include "section_config.h" -SDRAM_DATA_SECTION -static const struct { - int pt; //payload type - const char enc_name[6]; - int clock_rate; - int audio_channels; - } rtp_payload_types[] = { - //{0, "PCMU", 8000, 1}, - //{3, "GSM", 8000, 1}, - //{4, "G723", 8000, 1}, - //{5, "DVI4", 8000, 1}, - //{6, "DVI4", 16000, 1}, - //{7, "LPC", 8000, 1}, - //{8, "PCMA", 8000, 1}, - //{9, "G722", 8000, 1}, - //{10, "L16", 44100, 2}, - //{11, "L16", 44100, 1}, - //{12, "QCELP", 8000, 1}, - //{13, "CN", 8000, 1}, - //{14, "MPA", -1, -1}, - //{15, "G728", 8000, 1}, - //{16, "DVI4", 11025, 1}, - //{17, "DVI4", 22050, 1}, - //{18, "G729", 8000, 1}, - //{25, "CelB", 90000, -1}, - {26, "JPEG", 90000, -1}, - //{28, "nv", 90000, -1}, - //{31, "H261", 90000, -1}, - //{32, "MPV", 90000, -1}, - //{33, "MP2T", 90000, -1}, - //{34, "H263", 90000, -1}, - {-1, "", -1, -1} -}; - -#define RTP_STD_PT_SIZE /*25*/ 2 //length of rtp_payload_types - -/************************************************************** end of rtp **************************************************************/ - -/************************************************************** start of rtcp *************************************************************/ -#define RTP_SEQ_MOD (1<<16) -#define RTP_MAX_SDES 255 /* maximum text length for SDES */ - -typedef enum { - RTCP_SR = 200, - RTCP_RR = 201, - RTCP_SDES = 202, - RTCP_BYE = 203, - RTCP_APP = 204 -} rtcp_type_t; - -typedef enum { - RTCP_SDES_END = 0, - RTCP_SDES_CNAME = 1, - RTCP_SDES_NAME = 2, - RTCP_SDES_EMAIL = 3, - RTCP_SDES_PHONE = 4, - RTCP_SDES_LOC = 5, - RTCP_SDES_TOOL = 6, - RTCP_SDES_NOTE = 7, - RTCP_SDES_PRIV = 8 -} rtcp_sdes_type_t; - -/************************************************************** end of rtcp *************************************************************/ - -/************************************************************** start of rtsp *************************************************************/ - -typedef enum _rtsp_state rtsp_state; -enum _rtsp_state { - RTSP_INIT = 0, - RTSP_READY = 1, - RTSP_PLAYING = 2, -}; - -struct rtsp_session -{ - int id; - int version; - int start_time; - int end_time; - unsigned char *user; - unsigned char *name; -}; - -struct rtsp_transport -{ - int isRtp; //transport protocol - int isTcp; //lower transport protocol - int castMode; //unicast UDP(1) or unicast TCP(2) or multicast(3) - int port_min; - int port_max; - int clientport_min; - int clientport_max; - int serverport_min; - int serverport_max; - int ttl; //multicast time to live - //to be added if necessary -}; - -/*sturcture to hold connect info*/ -struct connect_context -{ - int socket_id; - u16 port; - unsigned char *server_ip; - unsigned char *remote_ip; -}; - - -struct rtsp_context -{ - rtsp_state state; //state for rtp streaming - int rtsp_cmd; //store request method type - int Cseq; - struct rtsp_transport transport; - struct rtsp_session session; - u8 *response; //enough to hold response - int content_len; - struct connect_context connect_ctx; //contain rtsp server info. - void *stream_ctx; //stream context it process - _Sema start_rtp_sema; //sema to start rtp processing - int is_rtp_start; - //to be added if necessary -}; - -/************************************************************** end of rtsp *************************************************************/ - -/************************************************************** start of rtp **************************************************************/ - - -/* - * RTP data header from RFC1889 - */ -/* - * - * - * The RTP header has the following format: - * - * 0 1 2 3 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * |V=2|P|X| CC |M| PT | sequence number | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | timestamp | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | synchronization source (SSRC) identifier | - * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ - * | contributing source (CSRC) identifiers | - * | .... | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * - * RTP data header - */ - -typedef struct { -#if RTP_BIG_ENDIAN - unsigned int version:2; /* protocol version */ - unsigned int p:1; /* padding flag */ - unsigned int x:1; /* header extension flag */ - unsigned int cc:4; /* CSRC count */ - unsigned int m:1; /* marker bit */ - unsigned int pt:7; /* payload type */ -#else /*RTP_LITTLE_ENDIAN*/ - unsigned int cc:4; /* CSRC count */ - unsigned int x:1; /* header extension flag */ - unsigned int p:1; /* padding flag */ - unsigned int version:2; /* protocol version */ - unsigned int pt:7; /* payload type */ - unsigned int m:1; /* marker bit */ -#endif - u16 seq; /* sequence number */ - u32 ts; /* timestamp */ - u32 ssrc; /* synchronization source */ -// u32 csrc[1]; /* optional CSRC list, skip because cc is set to 0 here*/ -} rtp_hdr_t; - -enum rtp_object_state -{ - RTP_OBJECT_IDLE = 1, - RTP_OBJECT_READY, - RTP_OBJECT_INUSE, - RTP_OBJECT_USED, -}; - -struct rtp_object -{ - struct list_head rtp_list; - _Mutex mutex; - rtp_hdr_t rtphdr; - u32 *extra; //pointer to type specific structure - int index; - unsigned char *data; - int len; - enum rtp_object_state state; //reserved for future use - struct connect_context connect_ctx; -}; - -/************************************************************** end of rtp **************************************************************/ - -/***************************************************************general******************************************************************/ -void stream_context_init(struct stream_context *stream_ctx); -void stream_context_free(struct stream_context *stream_ctx); - -/************************************************************** start of rtsp *************************************************************/ - -int rtsp_atoi(char * s); -int rtsp_context_init(struct rtsp_context *rtsp_ctx); -void rtsp_readheader(u8 *request_header); -u8 * rtsp_parsefield(u8 *buffer, char *field); //parse specific field line and return field data -u8 * rtsp_readline(struct rtsp_context *rtsp_ctx, u8 *ptr); //read line starting from ptr and store corresponding parameter in rtsp_ctx -void rtsp_getparam(struct rtsp_context *rtsp_ctx, u8 *rtsp_header); -void parse_rtsp_type(struct rtsp_context *rtsp_ctx, u8 *rtsp_header); -int rtp_tick_inc_to_fps(int tick_inc, int clock_rate); -int rtp_fps_to_tick_inc(int framerate, int clock_rate); -void gen_session_id(int *session_id); -void rtsp_formSdp(struct rtsp_context *rtsp_ctx, u8 *sdp_buffer, int size); -void rtsp_cmd_options(struct rtsp_context *rtsp_ctx); -void rtsp_cmd_describe(struct rtsp_context *rtsp_ctx); -void rtsp_cmd_setup(struct rtsp_context *rtsp_ctx); -void rtsp_cmd_play(struct rtsp_context *rtsp_ctx); -void rtsp_cmd_pause(struct rtsp_context *rtsp_ctx); -void rtsp_cmd_teardown(struct rtsp_context *rtsp_ctx); -void rtsp_cmd_error(struct rtsp_context *rtsp_ctx); -void rtsp_init(void *param); - -/************************************************************** end of rtsp *************************************************************/ - -/************************************************************** start of rtp **************************************************************/ - -void fillRtpHeader(rtp_hdr_t *rtphdr, int version, int padding, int extension, int cc, int marker, int pt, u16 seq, u32 ts, u32 ssrc); - -/************************************************************** end of rtp **************************************************************/ - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/network/rtsp/sdp.h b/Firmware/RTLGDB/USDK/component/common/network/rtsp/sdp.h deleted file mode 100644 index 7d6f9fc..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/rtsp/sdp.h +++ /dev/null @@ -1,45 +0,0 @@ - -#ifndef _SDP_H_ -#define _SDP_H_ - -/* select one codec profile, here we choose AV PROFILE*/ -#include "avcodec.h" - -#define MAX_SDP_SIZE 512 -#define SDP_LINE_LEN 128 - - -struct sdp_session_level { - int sdp_version; /**< protocol version (currently 0) */ - int id; /**< session ID */ - int version; /**< session version */ - int start_time; /**< session start time (NTP time, in seconds), or 0 in case of permanent session */ - int end_time; /**< session end time (NTP time, in seconds), or 0 if the session is not bounded */ - int ttl; /**< TTL, in case of multicast stream */ - const char *user; /**< username of the session's creator */ - const char *nettype; /**< type of network (initially "IN") */ - const char *src_addr; /**< IP address of the machine from which the session was created */ - const char *src_type; /**< address type of src_addr */ - const char *dst_addr; /**< destination IP address (can be multicast) */ - const char *dst_type; /**< destination IP address type */ - const char *name; /**< session name (can be an empty string) */ -}; - -struct sdp_media_level { - int media_type; - int payload_type; - int framerate; - struct codec_info *codec; -}; - -struct sdp_info { - struct sdp_session_level session; - struct sdp_media_level media; - void *extra; -}; - - -int form_sdp_header(unsigned char *buffer, struct sdp_info *sdp, int size); -int form_sdp_media(unsigned char *buffer, struct sdp_info *sdp, int size); - -#endif //_SDP_H_ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/network/rtsp/src2rtsp.h b/Firmware/RTLGDB/USDK/component/common/network/rtsp/src2rtsp.h deleted file mode 100644 index ccfa692..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/rtsp/src2rtsp.h +++ /dev/null @@ -1,100 +0,0 @@ -#ifndef _SRC2RTSP_H_ -#define _SRC2RTSP_H_ - -/* Add by Ian -- This file contains parts used for rtsp to access lower layer stream src information*/ - -#include "dlist.h" -#include "basic_types.h" -#include "osdep_service.h" -//#include "osdep_api.h" -#include "rtsp/rtp_api.h" -#include "avcodec.h" - -#define SRC_FROM_UVC -//#define SRC_FROM_UAC -//#define SRC_FROM_SPI -#define SRC_FROM_I2S -#define SRC_FROM_STA - -#define SRC_TYPE_NUL 0 -#define SRC_TYPE_UVC 1 -#define SRC_TYPE_SPI 2 -#define SRC_TYPE_UAC 3 -#define SRC_TYPE_I2S 4 -#define SRC_TYPE_STA 7 - -struct FormatInfo -{ - struct codec_info codec; - u8 framerate; - u32 bitrate; - u32 height; - u32 width; -}; - -struct stream_flow -{ - int id; - void *prot_hook; //transport protocol hook - void *src; - int src_type; - struct FormatInfo currentFormatInfo; - int (*src_handler) (void *src, struct rtp_object *payload); - struct list_head input_queue; - _mutex input_lock; - struct list_head output_queue; - _mutex output_lock; - u8 is_src2rtsp_init; - u8 is_src2rtsp_start; - _sema start_src2rtsp_sema; - struct stream_flow *next; -}; - - -#ifdef SRC_FROM_UVC -#include "v4l2_intf.h" -struct uvc_streaming; -struct uvcManager -{ - struct uvc_streaming *stream; - streaming_state state; - struct FormatInfo currentFormatInfo; -}; -#endif - -#ifdef SRC_FROM_SPI - -#endif - -#ifdef SRC_FROM_UAC - -#endif - -#ifdef SRC_FROM_I2S -struct i2sManager{ - struct FormatInfo currentFormatInfo; -}; - -#endif - -#ifdef SRC_FROM_STA -struct rtsp_static_source_manager -{ - struct FormatInfo currentFormatInfo; -}; -#endif - -struct stream_flow* rtsp_stream_flow_create(void); -void rtsp_stream_flow_free(struct stream_flow *stream); -void rtsp_register_src_handler(struct stream_flow *stream, int (*src_handler) (void *stream_src, struct rtp_object *payload)); -int rtsp_get_src_currentFormatInfo(struct stream_flow *stream); -int rtsp_set_src_FormatInfo(struct stream_flow *stream, int codec_id, u8 framerate, u32 height, u32 width, u32 bitrate); -extern int rtsp_set_src_extra(struct stream_flow, void *param); -int rtsp_stream_flow_set(struct stream_flow *stream, void *source, int src_type); -int rtsp_stream_flow_update(struct stream_flow *stream); -int rtsp_stream_flow_concat(struct stream_flow *stream, struct stream_flow *stream_next); -void rtp_object_in_src_queue(struct rtp_object *payload, struct stream_flow *stream); -struct rtp_object *rtp_object_out_src_queue(struct stream_flow *stream); - - -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/network/sntp/sntp.c b/Firmware/RTLGDB/USDK/component/common/network/sntp/sntp.c deleted file mode 100644 index 0a914b3..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/sntp/sntp.c +++ /dev/null @@ -1,660 +0,0 @@ -/** - * @file - * SNTP client module - * - * This is simple "SNTP" client for the lwIP raw API. - * It is a minimal implementation of SNTPv4 as specified in RFC 4330. - * - * For a list of some public NTP servers, see this link : - * http://support.ntp.org/bin/view/Servers/NTPPoolServers - * - * @todo: - * - set/change servers at runtime - * - complete SNTP_CHECK_RESPONSE checks 3 and 4 - * - support broadcast/multicast mode? - */ - -/* - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Simon Goldschmidt (lwIP raw API part) - */ - -#include "lwip/opt.h" - -#include "sntp.h" - -#include "lwip/lwip_timers.h" -#include "lwip/udp.h" -#include "lwip/dns.h" -#include "lwip/ip_addr.h" -#include "lwip/pbuf.h" - -#include -#include - -#if LWIP_UDP - -/** - * SNTP_DEBUG: Enable debugging for SNTP. - */ -#ifndef SNTP_DEBUG -#define SNTP_DEBUG LWIP_DBG_OFF -#endif - -/** SNTP server port */ -#ifndef SNTP_PORT -#define SNTP_PORT 123 -#endif - -/** Set this to 1 to allow SNTP_SERVER_ADDRESS to be a DNS name */ -#ifndef SNTP_SERVER_DNS -#define SNTP_SERVER_DNS 1 -#endif - -/** Set this to 1 to support more than one server */ -#ifndef SNTP_SUPPORT_MULTIPLE_SERVERS -#define SNTP_SUPPORT_MULTIPLE_SERVERS 0 -#endif - -/** \def SNTP_SERVER_ADDRESS - * \brief SNTP server address: - * - as IPv4 address in "u32_t" format - * - as a DNS name if SNTP_SERVER_DNS is set to 1 - * May contain multiple server names (e.g. "pool.ntp.org","second.time.server") - */ -#ifndef SNTP_SERVER_ADDRESS -#if SNTP_SERVER_DNS -#define SNTP_SERVER_ADDRESS "pool.ntp.org" -#else -#define SNTP_SERVER_ADDRESS "213.161.194.93" /* pool.ntp.org */ -#endif -#endif - -/** Sanity check: - * Define this to - * - 0 to turn off sanity checks (default; smaller code) - * - >= 1 to check address and port of the response packet to ensure the - * response comes from the server we sent the request to. - * - >= 2 to check returned Originate Timestamp against Transmit Timestamp - * sent to the server (to ensure response to older request). - * - >= 3 @todo: discard reply if any of the LI, Stratum, or Transmit Timestamp - * fields is 0 or the Mode field is not 4 (unicast) or 5 (broadcast). - * - >= 4 @todo: to check that the Root Delay and Root Dispersion fields are each - * greater than or equal to 0 and less than infinity, where infinity is - * currently a cozy number like one second. This check avoids using a - * server whose synchronization source has expired for a very long time. - */ -#ifndef SNTP_CHECK_RESPONSE -#define SNTP_CHECK_RESPONSE 0 -#endif - -/** According to the RFC, this shall be a random delay - * between 1 and 5 minutes (in milliseconds) to prevent load peaks. - * This can be defined to a random generation function, - * which must return the delay in milliseconds as u32_t. - * Turned off by default. - */ -#ifndef SNTP_STARTUP_DELAY -#define SNTP_STARTUP_DELAY 0 -#endif - -/** SNTP receive timeout - in milliseconds - * Also used as retry timeout - this shouldn't be too low. - * Default is 3 seconds. - */ -#ifndef SNTP_RECV_TIMEOUT -#define SNTP_RECV_TIMEOUT 3000 -#endif - -/** SNTP update delay - in milliseconds - * Default is 1 hour. - */ -#ifndef SNTP_UPDATE_DELAY -#define SNTP_UPDATE_DELAY 3600000 -#endif -#if (SNTP_UPDATE_DELAY < 15000) && !SNTP_SUPPRESS_DELAY_CHECK -#error "SNTPv4 RFC 4330 enforces a minimum update time of 15 seconds!" -#endif - -/* Realtek added for sntp update */ -static unsigned int sntp_update_tick = 0; -static time_t sntp_update_sec = 0; -static time_t sntp_update_usec = 0; - -#define SNTP_SET_SYSTEM_TIME_US(sec, usec) do { \ - sntp_update_tick = xTaskGetTickCount(); \ - sntp_update_sec = sec; \ - sntp_update_usec = usec; \ - } while(0) - -void sntp_get_lasttime(long *sec, long *usec, unsigned int *tick) -{ - *sec = sntp_update_sec; - *usec = sntp_update_usec; - *tick = sntp_update_tick; -} - -time_t sntp_gen_system_time(int timezone) -{ -// struct tm current_tm; - unsigned int update_tick; - long update_sec, update_usec, current_sec = 0; - - sntp_get_lasttime(&update_sec, &update_usec, &update_tick); - - unsigned int current_tick = xTaskGetTickCount(); - - if(update_tick) { - long tick_diff_sec, tick_diff_ms; - - tick_diff_sec = (current_tick - update_tick) / configTICK_RATE_HZ; - tick_diff_ms = (current_tick - update_tick) % configTICK_RATE_HZ / portTICK_RATE_MS; - update_sec += tick_diff_sec; - update_usec += (tick_diff_ms * 1000); - current_sec = update_sec + update_usec / 1000000 + timezone * 3600; - } - else { -// current_sec = current_tick / configTICK_RATE_HZ; - current_sec = update_usec; - } - return current_sec; -/* - current_tm = *(localtime(¤t_sec)); - current_tm.tm_year += 1900; - current_tm.tm_mon += 1; - - return current_tm; -*/ -} -/* End of Realtek added */ - -/** SNTP macro to change system time and/or the update the RTC clock */ -#ifndef SNTP_SET_SYSTEM_TIME -#define SNTP_SET_SYSTEM_TIME(sec) ((void)sec) -#endif - -/** SNTP macro to change system time including microseconds */ -#ifdef SNTP_SET_SYSTEM_TIME_US -#define SNTP_CALC_TIME_US 1 -#define SNTP_RECEIVE_TIME_SIZE 2 -#else -#define SNTP_SET_SYSTEM_TIME_US(sec, us) -#define SNTP_CALC_TIME_US 0 -#define SNTP_RECEIVE_TIME_SIZE 1 -#endif - -/** SNTP macro to get system time, used with SNTP_CHECK_RESPONSE >= 2 - * to send in request and compare in response. - */ -#ifndef SNTP_GET_SYSTEM_TIME -#define SNTP_GET_SYSTEM_TIME(sec, us) do { (sec) = 0; (us) = 0; } while(0) -#endif - -/** Default retry timeout (in milliseconds) if the response - * received is invalid. - * This is doubled with each retry until SNTP_RETRY_TIMEOUT_MAX is reached. - */ -#ifndef SNTP_RETRY_TIMEOUT -#define SNTP_RETRY_TIMEOUT SNTP_RECV_TIMEOUT -#endif - -/** Maximum retry timeout (in milliseconds). */ -#ifndef SNTP_RETRY_TIMEOUT_MAX -#define SNTP_RETRY_TIMEOUT_MAX (SNTP_RETRY_TIMEOUT * 10) -#endif - -/** Increase retry timeout with every retry sent - * Default is on to conform to RFC. - */ -#ifndef SNTP_RETRY_TIMEOUT_EXP -#define SNTP_RETRY_TIMEOUT_EXP 1 -#endif - -/* the various debug levels for this file */ -#define SNTP_DEBUG_TRACE (SNTP_DEBUG | LWIP_DBG_TRACE) -#define SNTP_DEBUG_STATE (SNTP_DEBUG | LWIP_DBG_STATE) -#define SNTP_DEBUG_WARN (SNTP_DEBUG | LWIP_DBG_LEVEL_WARNING) -#define SNTP_DEBUG_WARN_STATE (SNTP_DEBUG | LWIP_DBG_LEVEL_WARNING | LWIP_DBG_STATE) -#define SNTP_DEBUG_SERIOUS (SNTP_DEBUG | LWIP_DBG_LEVEL_SERIOUS) - -#define SNTP_ERR_KOD 1 - -/* SNTP protocol defines */ -#define SNTP_MSG_LEN 48 - -#define SNTP_OFFSET_LI_VN_MODE 0 -#define SNTP_LI_MASK 0xC0 -#define SNTP_LI_NO_WARNING 0x00 -#define SNTP_LI_LAST_MINUTE_61_SEC 0x01 -#define SNTP_LI_LAST_MINUTE_59_SEC 0x02 -#define SNTP_LI_ALARM_CONDITION 0x03 /* (clock not synchronized) */ - -#define SNTP_VERSION_MASK 0x38 -#define SNTP_VERSION (4/* NTP Version 4*/<<3) - -#define SNTP_MODE_MASK 0x07 -#define SNTP_MODE_CLIENT 0x03 -#define SNTP_MODE_SERVER 0x04 -#define SNTP_MODE_BROADCAST 0x05 - -#define SNTP_OFFSET_STRATUM 1 -#define SNTP_STRATUM_KOD 0x00 - -#define SNTP_OFFSET_ORIGINATE_TIME 24 -#define SNTP_OFFSET_RECEIVE_TIME 32 -#define SNTP_OFFSET_TRANSMIT_TIME 40 - -/* number of seconds between 1900 and 1970 */ -#define DIFF_SEC_1900_1970 (2208988800UL) - -/** - * SNTP packet format (without optional fields) - * Timestamps are coded as 64 bits: - * - 32 bits seconds since Jan 01, 1970, 00:00 - * - 32 bits seconds fraction (0-padded) - * For future use, if the MSB in the seconds part is set, seconds are based - * on Feb 07, 2036, 06:28:16. - */ -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct sntp_msg { - PACK_STRUCT_FIELD(u8_t li_vn_mode); - PACK_STRUCT_FIELD(u8_t stratum); - PACK_STRUCT_FIELD(u8_t poll); - PACK_STRUCT_FIELD(u8_t precision); - PACK_STRUCT_FIELD(u32_t root_delay); - PACK_STRUCT_FIELD(u32_t root_dispersion); - PACK_STRUCT_FIELD(u32_t reference_identifier); - PACK_STRUCT_FIELD(u32_t reference_timestamp[2]); - PACK_STRUCT_FIELD(u32_t originate_timestamp[2]); - PACK_STRUCT_FIELD(u32_t receive_timestamp[2]); - PACK_STRUCT_FIELD(u32_t transmit_timestamp[2]); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -/* function prototypes */ -static void sntp_request(void *arg); - -/** The UDP pcb used by the SNTP client */ -static struct udp_pcb* sntp_pcb; -/** Addresses of servers */ -static char* sntp_server_addresses[] = {SNTP_SERVER_ADDRESS}; -#if SNTP_SUPPORT_MULTIPLE_SERVERS -/** The currently used server (initialized to 0) */ -static u8_t sntp_current_server; -static u8_t sntp_num_servers = sizeof(sntp_server_addresses)/sizeof(char*); -#else /* SNTP_SUPPORT_MULTIPLE_SERVERS */ -#define sntp_current_server 0 -#endif /* SNTP_SUPPORT_MULTIPLE_SERVERS */ - -#if SNTP_RETRY_TIMEOUT_EXP -#define SNTP_RESET_RETRY_TIMEOUT() sntp_retry_timeout = SNTP_RETRY_TIMEOUT -/** Retry time, initialized with SNTP_RETRY_TIMEOUT and doubled with each retry. */ -static u32_t sntp_retry_timeout; -#else /* SNTP_RETRY_TIMEOUT_EXP */ -#define SNTP_RESET_RETRY_TIMEOUT() -#define sntp_retry_timeout SNTP_RETRY_TIMEOUT -#endif /* SNTP_RETRY_TIMEOUT_EXP */ - -#if SNTP_CHECK_RESPONSE >= 1 -/** Saves the last server address to compare with response */ -static ip_addr_t sntp_last_server_address; -#endif /* SNTP_CHECK_RESPONSE >= 1 */ - -#if SNTP_CHECK_RESPONSE >= 2 -/** Saves the last timestamp sent (which is sent back by the server) - * to compare against in response */ -static u32_t sntp_last_timestamp_sent[2]; -#endif /* SNTP_CHECK_RESPONSE >= 2 */ - -/** - * SNTP processing of received timestamp - */ -static void -sntp_process(u32_t *receive_timestamp) -{ - /* convert SNTP time (1900-based) to unix GMT time (1970-based) - * @todo: if MSB is 1, SNTP time is 2036-based! - */ - time_t t = (ntohl(receive_timestamp[0]) - DIFF_SEC_1900_1970); - -#if SNTP_CALC_TIME_US - u32_t us = ntohl(receive_timestamp[1]) / 4295; - SNTP_SET_SYSTEM_TIME_US(t, us); - /* display local time from GMT time */ - LWIP_DEBUGF(SNTP_DEBUG_TRACE, ("sntp_process: %s, %"U32_F" us", ctime(&t), us)); - -#else /* SNTP_CALC_TIME_US */ - - /* change system time and/or the update the RTC clock */ - SNTP_SET_SYSTEM_TIME(t); - /* display local time from GMT time */ - LWIP_DEBUGF(SNTP_DEBUG_TRACE, ("sntp_process: %s", ctime(&t))); -#endif /* SNTP_CALC_TIME_US */ -} - -/** - * Initialize request struct to be sent to server. - */ -static void -sntp_initialize_request(struct sntp_msg *req) -{ - memset(req, 0, SNTP_MSG_LEN); - req->li_vn_mode = SNTP_LI_NO_WARNING | SNTP_VERSION | SNTP_MODE_CLIENT; - -#if SNTP_CHECK_RESPONSE >= 2 - { - u32_t sntp_time_sec, sntp_time_us; - /* fill in transmit timestamp and save it in 'sntp_last_timestamp_sent' */ - SNTP_GET_SYSTEM_TIME(sntp_time_sec, sntp_time_us); - sntp_last_timestamp_sent[0] = htonl(sntp_time_sec + DIFF_SEC_1900_1970); - req->transmit_timestamp[0] = sntp_last_timestamp_sent[0]; - /* we send/save us instead of fraction to be faster... */ - sntp_last_timestamp_sent[1] = htonl(sntp_time_us); - req->transmit_timestamp[1] = sntp_last_timestamp_sent[1]; - } -#endif /* SNTP_CHECK_RESPONSE >= 2 */ -} - -/** - * Retry: send a new request (and increase retry timeout). - * - * @param arg is unused (only necessary to conform to sys_timeout) - */ -static void -sntp_retry(void* arg) -{ - LWIP_UNUSED_ARG(arg); - - LWIP_DEBUGF(SNTP_DEBUG_STATE, ("sntp_retry: Next request will be sent in %"U32_F" ms\n", - sntp_retry_timeout)); - - /* set up a timer to send a retry and increase the retry delay */ - sys_timeout(sntp_retry_timeout, sntp_request, NULL); - -#if SNTP_RETRY_TIMEOUT_EXP - { - u32_t new_retry_timeout; - /* increase the timeout for next retry */ - new_retry_timeout = sntp_retry_timeout << 1; - /* limit to maximum timeout and prevent overflow */ - if ((new_retry_timeout <= SNTP_RETRY_TIMEOUT_MAX) && - (new_retry_timeout > sntp_retry_timeout)) { - sntp_retry_timeout = new_retry_timeout; - } - } -#endif /* SNTP_RETRY_TIMEOUT_EXP */ -} - -#if SNTP_SUPPORT_MULTIPLE_SERVERS -/** - * If Kiss-of-Death is received (or another packet parsing error), - * try the next server or retry the current server and increase the retry - * timeout if only one server is available. - * - * @param arg is unused (only necessary to conform to sys_timeout) - */ -static void -sntp_try_next_server(void* arg) -{ - LWIP_UNUSED_ARG(arg); - - if (sntp_num_servers > 1) { - /* new server: reset retry timeout */ - SNTP_RESET_RETRY_TIMEOUT(); - sntp_current_server++; - if (sntp_current_server >= sntp_num_servers) { - sntp_current_server = 0; - } - LWIP_DEBUGF(SNTP_DEBUG_STATE, ("sntp_try_next_server: Sending request to server %"U16_F"\n", - (u16_t)sntp_current_server)); - /* instantly send a request to the next server */ - sntp_request(NULL); - } else { - sntp_retry(NULL); - } -} -#else /* SNTP_SUPPORT_MULTIPLE_SERVERS */ -/* Always retry on error if only one server is supported */ -#define sntp_try_next_server sntp_retry -#endif /* SNTP_SUPPORT_MULTIPLE_SERVERS */ - -/** UDP recv callback for the sntp pcb */ -static void -sntp_recv(void *arg, struct udp_pcb* pcb, struct pbuf *p, ip_addr_t *addr, u16_t port) -{ - u8_t mode; - u8_t stratum; - u32_t receive_timestamp[SNTP_RECEIVE_TIME_SIZE]; - err_t err; - - LWIP_UNUSED_ARG(arg); - LWIP_UNUSED_ARG(pcb); - - /* packet received: stop retry timeout */ - sys_untimeout(sntp_try_next_server, NULL); - sys_untimeout(sntp_request, NULL); - - err = ERR_ARG; -#if SNTP_CHECK_RESPONSE >= 1 - /* check server address and port */ - if (ip_addr_cmp(addr, &sntp_last_server_address) && - (port == SNTP_PORT)) -#else /* SNTP_CHECK_RESPONSE >= 1 */ - LWIP_UNUSED_ARG(addr); - LWIP_UNUSED_ARG(port); -#endif /* SNTP_CHECK_RESPONSE >= 1 */ - { - /* process the response */ - if (p->tot_len == SNTP_MSG_LEN) { - pbuf_copy_partial(p, &mode, 1, SNTP_OFFSET_LI_VN_MODE); - mode &= SNTP_MODE_MASK; - /* if this is a SNTP response... */ - if ((mode == SNTP_MODE_SERVER) || - (mode == SNTP_MODE_BROADCAST)) { - pbuf_copy_partial(p, &stratum, 1, SNTP_OFFSET_STRATUM); - if (stratum == SNTP_STRATUM_KOD) { - /* Kiss-of-death packet. Use another server or increase UPDATE_DELAY. */ - err = SNTP_ERR_KOD; - LWIP_DEBUGF(SNTP_DEBUG_STATE, ("sntp_recv: Received Kiss-of-Death\n")); - } else { -#if SNTP_CHECK_RESPONSE >= 2 - /* check originate_timetamp against sntp_last_timestamp_sent */ - u32_t originate_timestamp[2]; - pbuf_copy_partial(p, &originate_timestamp, 8, SNTP_OFFSET_ORIGINATE_TIME); - if ((originate_timestamp[0] != sntp_last_timestamp_sent[0]) || - (originate_timestamp[1] != sntp_last_timestamp_sent[1])) - { - LWIP_DEBUGF(SNTP_DEBUG_WARN, ("sntp_recv: Invalid originate timestamp in response\n")); - } else -#endif /* SNTP_CHECK_RESPONSE >= 2 */ - /* @todo: add code for SNTP_CHECK_RESPONSE >= 3 and >= 4 here */ - { - /* correct answer */ - err = ERR_OK; - pbuf_copy_partial(p, &receive_timestamp, SNTP_RECEIVE_TIME_SIZE * 4, SNTP_OFFSET_RECEIVE_TIME); - } - } - } else { - LWIP_DEBUGF(SNTP_DEBUG_WARN, ("sntp_recv: Invalid mode in response: %"U16_F"\n", (u16_t)mode)); - } - } else { - LWIP_DEBUGF(SNTP_DEBUG_WARN, ("sntp_recv: Invalid packet length: %"U16_F"\n", p->tot_len)); - } - } - pbuf_free(p); - if (err == ERR_OK) { - /* Correct response, reset retry timeout */ - SNTP_RESET_RETRY_TIMEOUT(); - - sntp_process(receive_timestamp); - - /* Set up timeout for next request */ - sys_timeout((u32_t)SNTP_UPDATE_DELAY, sntp_request, NULL); - LWIP_DEBUGF(SNTP_DEBUG_STATE, ("sntp_recv: Scheduled next time request: %"U32_F" ms\n", - (u32_t)SNTP_UPDATE_DELAY)); - } else if (err == SNTP_ERR_KOD) { - /* Kiss-of-death packet. Use another server or increase UPDATE_DELAY. */ - sntp_try_next_server(NULL); - } else { - /* another error, try the same server again */ - sntp_retry(NULL); - } -} - -/** Actually send an sntp request to a server. - * - * @param server_addr resolved IP address of the SNTP server - */ -static void -sntp_send_request(ip_addr_t *server_addr) -{ - struct pbuf* p; - p = pbuf_alloc(PBUF_TRANSPORT, SNTP_MSG_LEN, PBUF_RAM); - if (p != NULL) { - struct sntp_msg *sntpmsg = (struct sntp_msg *)p->payload; - LWIP_DEBUGF(SNTP_DEBUG_STATE, ("sntp_send_request: Sending request to server\n")); - /* initialize request message */ - sntp_initialize_request(sntpmsg); - /* send request */ - udp_sendto(sntp_pcb, p, server_addr, SNTP_PORT); - /* free the pbuf after sending it */ - pbuf_free(p); - /* set up receive timeout: try next server or retry on timeout */ - sys_timeout((u32_t)SNTP_RECV_TIMEOUT, sntp_try_next_server, NULL); -#if SNTP_CHECK_RESPONSE >= 1 - /* save server address to verify it in sntp_recv */ - ip_addr_set(&sntp_last_server_address, server_addr); -#endif /* SNTP_CHECK_RESPONSE >= 1 */ - } else { - LWIP_DEBUGF(SNTP_DEBUG_SERIOUS, ("sntp_send_request: Out of memory, trying again in %"U32_F" ms\n", - (u32_t)SNTP_RETRY_TIMEOUT)); - /* out of memory: set up a timer to send a retry */ - sys_timeout((u32_t)SNTP_RETRY_TIMEOUT, sntp_request, NULL); - } -} - -#if SNTP_SERVER_DNS -/** - * DNS found callback when using DNS names as server address. - */ -static void -sntp_dns_found(const char* hostname, ip_addr_t *ipaddr, void *arg) -{ - LWIP_UNUSED_ARG(hostname); - LWIP_UNUSED_ARG(arg); - - if (ipaddr != NULL) { - /* Address resolved, send request */ - LWIP_DEBUGF(SNTP_DEBUG_STATE, ("sntp_dns_found: Server address resolved, sending request\n")); - sntp_send_request(ipaddr); - } else { - /* DNS resolving failed -> try another server */ - LWIP_DEBUGF(SNTP_DEBUG_WARN_STATE, ("sntp_dns_found: Failed to resolve server address resolved, trying next server\n")); - sntp_try_next_server(NULL); - } -} -#endif /* SNTP_SERVER_DNS */ - -/** - * Send out an sntp request. - * - * @param arg is unused (only necessary to conform to sys_timeout) - */ -static void -sntp_request(void *arg) -{ - ip_addr_t sntp_server_address; - err_t err; - - LWIP_UNUSED_ARG(arg); - - /* initialize SNTP server address */ -#if SNTP_SERVER_DNS - err = dns_gethostbyname(sntp_server_addresses[sntp_current_server], &sntp_server_address, - sntp_dns_found, NULL); - if (err == ERR_INPROGRESS) { - /* DNS request sent, wait for sntp_dns_found being called */ - LWIP_DEBUGF(SNTP_DEBUG_STATE, ("sntp_request: Waiting for server address to be resolved.\n")); - return; - } -#else /* SNTP_SERVER_DNS */ - err = ipaddr_aton(sntp_server_addresses[sntp_current_server], &sntp_server_address) - ? ERR_OK : ERR_ARG; - -#endif /* SNTP_SERVER_DNS */ - - if (err == ERR_OK) { - sntp_send_request(&sntp_server_address); - } else { - /* address conversion failed, try another server */ - LWIP_DEBUGF(SNTP_DEBUG_WARN_STATE, ("sntp_request: Invalid server address, trying next server.\n")); - sys_timeout((u32_t)SNTP_RETRY_TIMEOUT, sntp_try_next_server, NULL); - } -} - -/** - * Initialize this module. - * Send out request instantly or after SNTP_STARTUP_DELAY. - */ -void -sntp_init(void) -{ - if (sntp_pcb == NULL) { - SNTP_RESET_RETRY_TIMEOUT(); - sntp_pcb = udp_new(); - LWIP_ASSERT("Failed to allocate udp pcb for sntp client", sntp_pcb != NULL); - if (sntp_pcb != NULL) { - udp_recv(sntp_pcb, sntp_recv, NULL); -#if SNTP_STARTUP_DELAY - sys_timeout((u32_t)SNTP_STARTUP_DELAY, sntp_request, NULL); -#else - sntp_request(NULL); -#endif - rtl_printf("SNTP start.\n"); - } - } -} - -/** - * Stop this module. - */ -void -sntp_stop(void) -{ - if (sntp_pcb != NULL) { - sys_untimeout(sntp_request, NULL); - udp_remove(sntp_pcb); - sntp_pcb = NULL; - rtl_printf("SNTP stop.\n"); - } -} -#endif /* LWIP_UDP */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/sntp/sntp.h b/Firmware/RTLGDB/USDK/component/common/network/sntp/sntp.h deleted file mode 100644 index 4122d63..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/sntp/sntp.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __SNTP_H__ -#define __SNTP_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -void sntp_init(void); -void sntp_stop(void); - -/* Realtek added */ -void sntp_get_lasttime(long *sec, long *usec, unsigned int *tick); -time_t sntp_gen_system_time(int timezone); - -#ifdef __cplusplus -} -#endif - -#endif /* __SNTP_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/Makefile b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/Makefile deleted file mode 100644 index 4e901ff..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/Makefile +++ /dev/null @@ -1,97 +0,0 @@ - -include $(MAKE_INCLUDE_GEN) - -.PHONY: all clean - -#*****************************************************************************# -# VARIABLES # -#*****************************************************************************# - - -MODULE_IFLAGS += -I../include - -#*****************************************************************************# -# Source FILE LIST # -#*****************************************************************************# - -CSRC = library/aesni.o \ - library/ccm.o \ - library/cipher.o \ - library/cipher_wrap.o \ - library/debug.o \ - library/ecp_ram.o \ - library/error.o \ - library/gcm.o \ - library/havege.o \ - library/memory_buffer_alloc.o \ - library/padlock.o \ - library/pbkdf2.o \ - library/pkcs5.o \ - library/pkcs11.o \ - library/pkcs12.o \ - library/pkparse.o \ - library/ssl_cache.o \ - library/ssl_cli.o \ - library/ssl_srv.o \ - library/ssl_ciphersuites.o \ - library/ssl_tls.o \ - library/threading.o \ - library/timing.o \ - library/version.o \ - library/version_features.o \ - library/x509.o \ - library/x509_create.o \ - library/x509_crl.o \ - library/x509_crt.o \ - library/x509_csr.o \ - library/x509write_crt.o \ - library/x509write_csr.o \ - ../ssl_ram_map/ssl_ram_map.o \ - ssl_self_test.o - -ROM_CSRC = - -ifeq ($(CONFIG_NORMAL_BUILD),y) #Normal - CSRC += $(ROM_CSRC) -else ifeq ($(CONFIG_RELEASE_BUILD),y) #CONFIG_RELEASE_BUILD - CSRC = -else - # Not change CSRC -endif - -#*****************************************************************************# -# Object FILE LIST # -#*****************************************************************************# -OBJS = $(CSRC) - -#*****************************************************************************# -# Include Dependency # -#*****************************************************************************# --include $(OBJS:.o=.d) - - -#*****************************************************************************# -# RULES TO GENERATE TARGETS # -#*****************************************************************************# -# Define the Rules to build the core targets -all: CORE_TARGETS COPY_RAM_OBJS - -#*****************************************************************************# -# GENERATE OBJECT FILE -#*****************************************************************************# -CORE_TARGETS: $(OBJS) - -#*****************************************************************************# -# CLEAN GENERATED FILES # -#*****************************************************************************# -clean: - $(REMOVE) library/*.o - $(REMOVE) library/*.i - $(REMOVE) library/*.s - $(REMOVE) library/*.d - $(REMOVE) ../ssl_ram_map/*.o - $(REMOVE) ../ssl_ram_map/*.i - $(REMOVE) ../ssl_ram_map/*.s - $(REMOVE) ../ssl_ram_map/*.d - --include $(DEPS) diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/aes.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/aes.h deleted file mode 100644 index d08073c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/aes.h +++ /dev/null @@ -1,264 +0,0 @@ -/** - * \file aes.h - * - * \brief AES block cipher - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_AES_H -#define POLARSSL_AES_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -// Rename to fix function conflict to ROM codes -#define aes_init polarssl_aes_init - -#include - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -/* padlock.c and aesni.c rely on these values! */ -#define AES_ENCRYPT 1 -#define AES_DECRYPT 0 - -#define POLARSSL_ERR_AES_INVALID_KEY_LENGTH -0x0020 /**< Invalid key length. */ -#define POLARSSL_ERR_AES_INVALID_INPUT_LENGTH -0x0022 /**< Invalid data input length. */ - -#if !defined(POLARSSL_AES_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief AES context structure - * - * \note buf is able to hold 32 extra bytes, which can be used: - * - for alignment purposes if VIA padlock is used, and/or - * - to simplify key expansion in the 256-bit case by - * generating an extra round key - */ -typedef struct -{ - int nr; /*!< number of rounds */ - uint32_t *rk; /*!< AES round keys */ - uint32_t buf[68]; /*!< unaligned data */ -#ifdef RTL_HW_CRYPTO - unsigned char enc_key[32]; - unsigned char dec_key[32]; -#endif -} -aes_context; - -/** - * \brief Initialize AES context - * - * \param ctx AES context to be initialized - */ -void aes_init( aes_context *ctx ); - -/** - * \brief Clear AES context - * - * \param ctx AES context to be cleared - */ -void aes_free( aes_context *ctx ); - -/** - * \brief AES key schedule (encryption) - * - * \param ctx AES context to be initialized - * \param key encryption key - * \param keysize must be 128, 192 or 256 - * - * \return 0 if successful, or POLARSSL_ERR_AES_INVALID_KEY_LENGTH - */ -int aes_setkey_enc( aes_context *ctx, const unsigned char *key, - unsigned int keysize ); - -/** - * \brief AES key schedule (decryption) - * - * \param ctx AES context to be initialized - * \param key decryption key - * \param keysize must be 128, 192 or 256 - * - * \return 0 if successful, or POLARSSL_ERR_AES_INVALID_KEY_LENGTH - */ -int aes_setkey_dec( aes_context *ctx, const unsigned char *key, - unsigned int keysize ); - -/** - * \brief AES-ECB block encryption/decryption - * - * \param ctx AES context - * \param mode AES_ENCRYPT or AES_DECRYPT - * \param input 16-byte input block - * \param output 16-byte output block - * - * \return 0 if successful - */ -int aes_crypt_ecb( aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ); - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/** - * \brief AES-CBC buffer encryption/decryption - * Length should be a multiple of the block - * size (16 bytes) - * - * \param ctx AES context - * \param mode AES_ENCRYPT or AES_DECRYPT - * \param length length of the input data - * \param iv initialization vector (updated after use) - * \param input buffer holding the input data - * \param output buffer holding the output data - * - * \return 0 if successful, or POLARSSL_ERR_AES_INVALID_INPUT_LENGTH - */ -int aes_crypt_cbc( aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ); -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) -/** - * \brief AES-CFB128 buffer encryption/decryption. - * - * Note: Due to the nature of CFB you should use the same key schedule for - * both encryption and decryption. So a context initialized with - * aes_setkey_enc() for both AES_ENCRYPT and AES_DECRYPT. - * - * \param ctx AES context - * \param mode AES_ENCRYPT or AES_DECRYPT - * \param length length of the input data - * \param iv_off offset in IV (updated after use) - * \param iv initialization vector (updated after use) - * \param input buffer holding the input data - * \param output buffer holding the output data - * - * \return 0 if successful - */ -int aes_crypt_cfb128( aes_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ); - -/** - * \brief AES-CFB8 buffer encryption/decryption. - * - * Note: Due to the nature of CFB you should use the same key schedule for - * both encryption and decryption. So a context initialized with - * aes_setkey_enc() for both AES_ENCRYPT and AES_DECRYPT. - * - * \param ctx AES context - * \param mode AES_ENCRYPT or AES_DECRYPT - * \param length length of the input data - * \param iv initialization vector (updated after use) - * \param input buffer holding the input data - * \param output buffer holding the output data - * - * \return 0 if successful - */ -int aes_crypt_cfb8( aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ); -#endif /*POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) -/** - * \brief AES-CTR buffer encryption/decryption - * - * Warning: You have to keep the maximum use of your counter in mind! - * - * Note: Due to the nature of CTR you should use the same key schedule for - * both encryption and decryption. So a context initialized with - * aes_setkey_enc() for both AES_ENCRYPT and AES_DECRYPT. - * - * \param ctx AES context - * \param length The length of the data - * \param nc_off The offset in the current stream_block (for resuming - * within current cipher stream). The offset pointer to - * should be 0 at the start of a stream. - * \param nonce_counter The 128-bit nonce and counter. - * \param stream_block The saved stream-block for resuming. Is overwritten - * by the function. - * \param input The input data stream - * \param output The output data stream - * - * \return 0 if successful - */ -int aes_crypt_ctr( aes_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[16], - unsigned char stream_block[16], - const unsigned char *input, - unsigned char *output ); -#endif /* POLARSSL_CIPHER_MODE_CTR */ - -#ifdef __cplusplus -} -#endif - -#else /* POLARSSL_AES_ALT */ -#include "aes_alt.h" -#endif /* POLARSSL_AES_ALT */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int aes_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* aes.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/aesni.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/aesni.h deleted file mode 100644 index 92b23cd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/aesni.h +++ /dev/null @@ -1,107 +0,0 @@ -/** - * \file aesni.h - * - * \brief AES-NI for hardware AES acceleration on some Intel processors - * - * Copyright (C) 2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_AESNI_H -#define POLARSSL_AESNI_H - -#include "aes.h" - -#define POLARSSL_AESNI_AES 0x02000000u -#define POLARSSL_AESNI_CLMUL 0x00000002u - -#if defined(POLARSSL_HAVE_ASM) && defined(__GNUC__) && \ - ( defined(__amd64__) || defined(__x86_64__) ) && \ - ! defined(POLARSSL_HAVE_X86_64) -#define POLARSSL_HAVE_X86_64 -#endif - -#if defined(POLARSSL_HAVE_X86_64) - -/** - * \brief AES-NI features detection routine - * - * \param what The feature to detect - * (POLARSSL_AESNI_AES or POLARSSL_AESNI_CLMUL) - * - * \return 1 if CPU has support for the feature, 0 otherwise - */ -int aesni_supports( unsigned int what ); - -/** - * \brief AES-NI AES-ECB block en(de)cryption - * - * \param ctx AES context - * \param mode AES_ENCRYPT or AES_DECRYPT - * \param input 16-byte input block - * \param output 16-byte output block - * - * \return 0 on success (cannot fail) - */ -int aesni_crypt_ecb( aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ); - -/** - * \brief GCM multiplication: c = a * b in GF(2^128) - * - * \param c Result - * \param a First operand - * \param b Second operand - * - * \note Both operands and result are bit strings interpreted as - * elements of GF(2^128) as per the GCM spec. - */ -void aesni_gcm_mult( unsigned char c[16], - const unsigned char a[16], - const unsigned char b[16] ); - -/** - * \brief Compute decryption round keys from encryption round keys - * - * \param invkey Round keys for the equivalent inverse cipher - * \param fwdkey Original round keys (for encryption) - * \param nr Number of rounds (that is, number of round keys minus one) - */ -void aesni_inverse_key( unsigned char *invkey, - const unsigned char *fwdkey, int nr ); - -/** - * \brief Perform key expansion (for encryption) - * - * \param rk Destination buffer where the round keys are written - * \param key Encryption key - * \param bits Key size in bits (must be 128, 192 or 256) - * - * \return 0 if successful, or POLARSSL_ERR_AES_INVALID_KEY_LENGTH - */ -int aesni_setkey_enc( unsigned char *rk, - const unsigned char *key, - size_t bits ); - -#endif /* POLARSSL_HAVE_X86_64 */ - -#endif /* POLARSSL_AESNI_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/arc4.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/arc4.h deleted file mode 100644 index 555f54f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/arc4.h +++ /dev/null @@ -1,117 +0,0 @@ -/** - * \file arc4.h - * - * \brief The ARCFOUR stream cipher - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_ARC4_H -#define POLARSSL_ARC4_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#if !defined(POLARSSL_ARC4_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief ARC4 context structure - */ -typedef struct -{ - int x; /*!< permutation index */ - int y; /*!< permutation index */ - unsigned char m[256]; /*!< permutation table */ -} -arc4_context; - -/** - * \brief Initialize ARC4 context - * - * \param ctx ARC4 context to be initialized - */ -void arc4_init( arc4_context *ctx ); - -/** - * \brief Clear ARC4 context - * - * \param ctx ARC4 context to be cleared - */ -void arc4_free( arc4_context *ctx ); - -/** - * \brief ARC4 key schedule - * - * \param ctx ARC4 context to be setup - * \param key the secret key - * \param keylen length of the key, in bytes - */ -void arc4_setup( arc4_context *ctx, const unsigned char *key, - unsigned int keylen ); - -/** - * \brief ARC4 cipher function - * - * \param ctx ARC4 context - * \param length length of the input data - * \param input buffer holding the input data - * \param output buffer for the output data - * - * \return 0 if successful - */ -int arc4_crypt( arc4_context *ctx, size_t length, const unsigned char *input, - unsigned char *output ); - -#ifdef __cplusplus -} -#endif - -#else /* POLARSSL_ARC4_ALT */ -#include "arc4_alt.h" -#endif /* POLARSSL_ARC4_ALT */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int arc4_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* arc4.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/asn1.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/asn1.h deleted file mode 100644 index eacdd08..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/asn1.h +++ /dev/null @@ -1,347 +0,0 @@ -/** - * \file asn1.h - * - * \brief Generic ASN.1 parsing - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_ASN1_H -#define POLARSSL_ASN1_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_BIGNUM_C) -#include "bignum.h" -#endif - -#include - -/** - * \addtogroup asn1_module - * \{ - */ - -/** - * \name ASN1 Error codes - * These error codes are OR'ed to X509 error codes for - * higher error granularity. - * ASN1 is a standard to specify data structures. - * \{ - */ -#define POLARSSL_ERR_ASN1_OUT_OF_DATA -0x0060 /**< Out of data when parsing an ASN1 data structure. */ -#define POLARSSL_ERR_ASN1_UNEXPECTED_TAG -0x0062 /**< ASN1 tag was of an unexpected value. */ -#define POLARSSL_ERR_ASN1_INVALID_LENGTH -0x0064 /**< Error when trying to determine the length or invalid length. */ -#define POLARSSL_ERR_ASN1_LENGTH_MISMATCH -0x0066 /**< Actual length differs from expected length. */ -#define POLARSSL_ERR_ASN1_INVALID_DATA -0x0068 /**< Data is invalid. (not used) */ -#define POLARSSL_ERR_ASN1_MALLOC_FAILED -0x006A /**< Memory allocation failed */ -#define POLARSSL_ERR_ASN1_BUF_TOO_SMALL -0x006C /**< Buffer too small when writing ASN.1 data structure. */ - -/* \} name */ - -/** - * \name DER constants - * These constants comply with DER encoded the ANS1 type tags. - * DER encoding uses hexadecimal representation. - * An example DER sequence is:\n - * - 0x02 -- tag indicating INTEGER - * - 0x01 -- length in octets - * - 0x05 -- value - * Such sequences are typically read into \c ::x509_buf. - * \{ - */ -#define ASN1_BOOLEAN 0x01 -#define ASN1_INTEGER 0x02 -#define ASN1_BIT_STRING 0x03 -#define ASN1_OCTET_STRING 0x04 -#define ASN1_NULL 0x05 -#define ASN1_OID 0x06 -#define ASN1_UTF8_STRING 0x0C -#define ASN1_SEQUENCE 0x10 -#define ASN1_SET 0x11 -#define ASN1_PRINTABLE_STRING 0x13 -#define ASN1_T61_STRING 0x14 -#define ASN1_IA5_STRING 0x16 -#define ASN1_UTC_TIME 0x17 -#define ASN1_GENERALIZED_TIME 0x18 -#define ASN1_UNIVERSAL_STRING 0x1C -#define ASN1_BMP_STRING 0x1E -#define ASN1_PRIMITIVE 0x00 -#define ASN1_CONSTRUCTED 0x20 -#define ASN1_CONTEXT_SPECIFIC 0x80 -/* \} name */ -/* \} addtogroup asn1_module */ - -/** Returns the size of the binary string, without the trailing \\0 */ -#define OID_SIZE(x) (sizeof(x) - 1) - -/** - * Compares an asn1_buf structure to a reference OID. - * - * Only works for 'defined' oid_str values (OID_HMAC_SHA1), you cannot use a - * 'unsigned char *oid' here! - * - * Warning: returns true when the OIDs are equal (unlike memcmp)! - */ -#define OID_CMP(oid_str, oid_buf) \ - ( ( OID_SIZE(oid_str) == (oid_buf)->len ) && \ - memcmp( (oid_str), (oid_buf)->p, (oid_buf)->len) == 0 ) - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \name Functions to parse ASN.1 data structures - * \{ - */ - -/** - * Type-length-value structure that allows for ASN1 using DER. - */ -typedef struct _asn1_buf -{ - int tag; /**< ASN1 type, e.g. ASN1_UTF8_STRING. */ - size_t len; /**< ASN1 length, e.g. in octets. */ - unsigned char *p; /**< ASN1 data, e.g. in ASCII. */ -} -asn1_buf; - -/** - * Container for ASN1 bit strings. - */ -typedef struct _asn1_bitstring -{ - size_t len; /**< ASN1 length, e.g. in octets. */ - unsigned char unused_bits; /**< Number of unused bits at the end of the string */ - unsigned char *p; /**< Raw ASN1 data for the bit string */ -} -asn1_bitstring; - -/** - * Container for a sequence of ASN.1 items - */ -typedef struct _asn1_sequence -{ - asn1_buf buf; /**< Buffer containing the given ASN.1 item. */ - struct _asn1_sequence *next; /**< The next entry in the sequence. */ -} -asn1_sequence; - -/** - * Container for a sequence or list of 'named' ASN.1 data items - */ -typedef struct _asn1_named_data -{ - asn1_buf oid; /**< The object identifier. */ - asn1_buf val; /**< The named value. */ - struct _asn1_named_data *next; /**< The next entry in the sequence. */ -} -asn1_named_data; - -/** - * \brief Get the length of an ASN.1 element. - * Updates the pointer to immediately behind the length. - * - * \param p The position in the ASN.1 data - * \param end End of data - * \param len The variable that will receive the value - * - * \return 0 if successful, POLARSSL_ERR_ASN1_OUT_OF_DATA on reaching - * end of data, POLARSSL_ERR_ASN1_INVALID_LENGTH if length is - * unparseable. - */ -int asn1_get_len( unsigned char **p, - const unsigned char *end, - size_t *len ); - -/** - * \brief Get the tag and length of the tag. Check for the requested tag. - * Updates the pointer to immediately behind the tag and length. - * - * \param p The position in the ASN.1 data - * \param end End of data - * \param len The variable that will receive the length - * \param tag The expected tag - * - * \return 0 if successful, POLARSSL_ERR_ASN1_UNEXPECTED_TAG if tag did - * not match requested tag, or another specific ASN.1 error code. - */ -int asn1_get_tag( unsigned char **p, - const unsigned char *end, - size_t *len, int tag ); - -/** - * \brief Retrieve a boolean ASN.1 tag and its value. - * Updates the pointer to immediately behind the full tag. - * - * \param p The position in the ASN.1 data - * \param end End of data - * \param val The variable that will receive the value - * - * \return 0 if successful or a specific ASN.1 error code. - */ -int asn1_get_bool( unsigned char **p, - const unsigned char *end, - int *val ); - -/** - * \brief Retrieve an integer ASN.1 tag and its value. - * Updates the pointer to immediately behind the full tag. - * - * \param p The position in the ASN.1 data - * \param end End of data - * \param val The variable that will receive the value - * - * \return 0 if successful or a specific ASN.1 error code. - */ -int asn1_get_int( unsigned char **p, - const unsigned char *end, - int *val ); - -/** - * \brief Retrieve a bitstring ASN.1 tag and its value. - * Updates the pointer to immediately behind the full tag. - * - * \param p The position in the ASN.1 data - * \param end End of data - * \param bs The variable that will receive the value - * - * \return 0 if successful or a specific ASN.1 error code. - */ -int asn1_get_bitstring( unsigned char **p, const unsigned char *end, - asn1_bitstring *bs); - -/** - * \brief Retrieve a bitstring ASN.1 tag without unused bits and its - * value. - * Updates the pointer to the beginning of the bit/octet string. - * - * \param p The position in the ASN.1 data - * \param end End of data - * \param len Length of the actual bit/octect string in bytes - * - * \return 0 if successful or a specific ASN.1 error code. - */ -int asn1_get_bitstring_null( unsigned char **p, const unsigned char *end, - size_t *len ); - -/** - * \brief Parses and splits an ASN.1 "SEQUENCE OF " - * Updated the pointer to immediately behind the full sequence tag. - * - * \param p The position in the ASN.1 data - * \param end End of data - * \param cur First variable in the chain to fill - * \param tag Type of sequence - * - * \return 0 if successful or a specific ASN.1 error code. - */ -int asn1_get_sequence_of( unsigned char **p, - const unsigned char *end, - asn1_sequence *cur, - int tag); - -#if defined(POLARSSL_BIGNUM_C) -/** - * \brief Retrieve a MPI value from an integer ASN.1 tag. - * Updates the pointer to immediately behind the full tag. - * - * \param p The position in the ASN.1 data - * \param end End of data - * \param X The MPI that will receive the value - * - * \return 0 if successful or a specific ASN.1 or MPI error code. - */ -int asn1_get_mpi( unsigned char **p, - const unsigned char *end, - mpi *X ); -#endif /* POLARSSL_BIGNUM_C */ - -/** - * \brief Retrieve an AlgorithmIdentifier ASN.1 sequence. - * Updates the pointer to immediately behind the full - * AlgorithmIdentifier. - * - * \param p The position in the ASN.1 data - * \param end End of data - * \param alg The buffer to receive the OID - * \param params The buffer to receive the params (if any) - * - * \return 0 if successful or a specific ASN.1 or MPI error code. - */ -int asn1_get_alg( unsigned char **p, - const unsigned char *end, - asn1_buf *alg, asn1_buf *params ); - -/** - * \brief Retrieve an AlgorithmIdentifier ASN.1 sequence with NULL or no - * params. - * Updates the pointer to immediately behind the full - * AlgorithmIdentifier. - * - * \param p The position in the ASN.1 data - * \param end End of data - * \param alg The buffer to receive the OID - * - * \return 0 if successful or a specific ASN.1 or MPI error code. - */ -int asn1_get_alg_null( unsigned char **p, - const unsigned char *end, - asn1_buf *alg ); - -/** - * \brief Find a specific named_data entry in a sequence or list based on - * the OID. - * - * \param list The list to seek through - * \param oid The OID to look for - * \param len Size of the OID - * - * \return NULL if not found, or a pointer to the existing entry. - */ -asn1_named_data *asn1_find_named_data( asn1_named_data *list, - const char *oid, size_t len ); - -/** - * \brief Free a asn1_named_data entry - * - * \param entry The named data entry to free - */ -void asn1_free_named_data( asn1_named_data *entry ); - -/** - * \brief Free all entries in a asn1_named_data list - * Head will be set to NULL - * - * \param head Pointer to the head of the list of named data entries to free - */ -void asn1_free_named_data_list( asn1_named_data **head ); - -#ifdef __cplusplus -} -#endif - -#endif /* asn1.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/asn1write.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/asn1write.h deleted file mode 100644 index 7a7fbf7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/asn1write.h +++ /dev/null @@ -1,243 +0,0 @@ -/** - * \file asn1write.h - * - * \brief ASN.1 buffer writing functionality - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_ASN1_WRITE_H -#define POLARSSL_ASN1_WRITE_H - -#include "asn1.h" - -#define ASN1_CHK_ADD(g, f) do { if( ( ret = f ) < 0 ) return( ret ); else \ - g += ret; } while( 0 ) - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Write a length field in ASN.1 format - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param len the length to write - * - * \return the length written or a negative error code - */ -int asn1_write_len( unsigned char **p, unsigned char *start, size_t len ); - -/** - * \brief Write a ASN.1 tag in ASN.1 format - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param tag the tag to write - * - * \return the length written or a negative error code - */ -int asn1_write_tag( unsigned char **p, unsigned char *start, - unsigned char tag ); - -/** - * \brief Write raw buffer data - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param buf data buffer to write - * \param size length of the data buffer - * - * \return the length written or a negative error code - */ -int asn1_write_raw_buffer( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t size ); - -#if defined(POLARSSL_BIGNUM_C) -/** - * \brief Write a big number (ASN1_INTEGER) in ASN.1 format - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param X the MPI to write - * - * \return the length written or a negative error code - */ -int asn1_write_mpi( unsigned char **p, unsigned char *start, mpi *X ); -#endif /* POLARSSL_BIGNUM_C */ - -/** - * \brief Write a NULL tag (ASN1_NULL) with zero data in ASN.1 format - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * - * \return the length written or a negative error code - */ -int asn1_write_null( unsigned char **p, unsigned char *start ); - -/** - * \brief Write an OID tag (ASN1_OID) and data in ASN.1 format - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param oid the OID to write - * \param oid_len length of the OID - * - * \return the length written or a negative error code - */ -int asn1_write_oid( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len ); - -/** - * \brief Write an AlgorithmIdentifier sequence in ASN.1 format - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param oid the OID of the algorithm - * \param oid_len length of the OID - * \param par_len length of parameters, which must be already written. - * If 0, NULL parameters are added - * - * \return the length written or a negative error code - */ -int asn1_write_algorithm_identifier( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len, - size_t par_len ); - -/** - * \brief Write a boolean tag (ASN1_BOOLEAN) and value in ASN.1 format - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param boolean 0 or 1 - * - * \return the length written or a negative error code - */ -int asn1_write_bool( unsigned char **p, unsigned char *start, int boolean ); - -/** - * \brief Write an int tag (ASN1_INTEGER) and value in ASN.1 format - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param val the integer value - * - * \return the length written or a negative error code - */ -int asn1_write_int( unsigned char **p, unsigned char *start, int val ); - -/** - * \brief Write a printable string tag (ASN1_PRINTABLE_STRING) and - * value in ASN.1 format - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param text the text to write - * \param text_len length of the text - * - * \return the length written or a negative error code - */ -int asn1_write_printable_string( unsigned char **p, unsigned char *start, - const char *text, size_t text_len ); - -/** - * \brief Write an IA5 string tag (ASN1_IA5_STRING) and - * value in ASN.1 format - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param text the text to write - * \param text_len length of the text - * - * \return the length written or a negative error code - */ -int asn1_write_ia5_string( unsigned char **p, unsigned char *start, - const char *text, size_t text_len ); - -/** - * \brief Write a bitstring tag (ASN1_BIT_STRING) and - * value in ASN.1 format - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param buf the bitstring - * \param bits the total number of bits in the bitstring - * - * \return the length written or a negative error code - */ -int asn1_write_bitstring( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t bits ); - -/** - * \brief Write an octet string tag (ASN1_OCTET_STRING) and - * value in ASN.1 format - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param buf data buffer to write - * \param size length of the data buffer - * - * \return the length written or a negative error code - */ -int asn1_write_octet_string( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t size ); - -/** - * \brief Create or find a specific named_data entry for writing in a - * sequence or list based on the OID. If not already in there, - * a new entry is added to the head of the list. - * Warning: Destructive behaviour for the val data! - * - * \param list Pointer to the location of the head of the list to seek - * through (will be updated in case of a new entry) - * \param oid The OID to look for - * \param oid_len Size of the OID - * \param val Data to store (can be NULL if you want to fill it by hand) - * \param val_len Minimum length of the data buffer needed - * - * \return NULL if if there was a memory allocation error, or a pointer - * to the new / existing entry. - */ -asn1_named_data *asn1_store_named_data( asn1_named_data **list, - const char *oid, size_t oid_len, - const unsigned char *val, - size_t val_len ); - -#ifdef __cplusplus -} -#endif - -#endif /* POLARSSL_ASN1_WRITE_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/base64.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/base64.h deleted file mode 100644 index d041493..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/base64.h +++ /dev/null @@ -1,87 +0,0 @@ -/** - * \file base64.h - * - * \brief RFC 1521 base64 encoding/decoding - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_BASE64_H -#define POLARSSL_BASE64_H - -#include - -#define POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL -0x002A /**< Output buffer too small. */ -#define POLARSSL_ERR_BASE64_INVALID_CHARACTER -0x002C /**< Invalid character in input. */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Encode a buffer into base64 format - * - * \param dst destination buffer - * \param dlen size of the buffer - * \param src source buffer - * \param slen amount of data to be encoded - * - * \return 0 if successful, or POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL. - * *dlen is always updated to reflect the amount - * of data that has (or would have) been written. - * - * \note Call this function with *dlen = 0 to obtain the - * required buffer size in *dlen - */ -int base64_encode( unsigned char *dst, size_t *dlen, - const unsigned char *src, size_t slen ); - -/** - * \brief Decode a base64-formatted buffer - * - * \param dst destination buffer (can be NULL for checking size) - * \param dlen size of the buffer - * \param src source buffer - * \param slen amount of data to be decoded - * - * \return 0 if successful, POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL, or - * POLARSSL_ERR_BASE64_INVALID_CHARACTER if the input data is - * not correct. *dlen is always updated to reflect the amount - * of data that has (or would have) been written. - * - * \note Call this function with *dst = NULL or *dlen = 0 to obtain - * the required buffer size in *dlen - */ -int base64_decode( unsigned char *dst, size_t *dlen, - const unsigned char *src, size_t slen ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int base64_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* base64.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/bignum.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/bignum.h deleted file mode 100644 index 1f4a1aa..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/bignum.h +++ /dev/null @@ -1,755 +0,0 @@ -/** - * \file bignum.h - * - * \brief Multi-precision integer library - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_BIGNUM_H -#define POLARSSL_BIGNUM_H - -#include -#include - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -#if (_MSC_VER <= 1200) -typedef signed short int16_t; -typedef unsigned short uint16_t; -#else -typedef INT16 int16_t; -typedef UINT16 uint16_t; -#endif -typedef INT32 int32_t; -typedef INT64 int64_t; -typedef UINT32 uint32_t; -typedef UINT64 uint64_t; -#else -#include -#endif /* _MSC_VER && !EFIX64 && !EFI32 */ - -#define POLARSSL_ERR_MPI_FILE_IO_ERROR -0x0002 /**< An error occurred while reading from or writing to a file. */ -#define POLARSSL_ERR_MPI_BAD_INPUT_DATA -0x0004 /**< Bad input parameters to function. */ -#define POLARSSL_ERR_MPI_INVALID_CHARACTER -0x0006 /**< There is an invalid character in the digit string. */ -#define POLARSSL_ERR_MPI_BUFFER_TOO_SMALL -0x0008 /**< The buffer is too small to write to. */ -#define POLARSSL_ERR_MPI_NEGATIVE_VALUE -0x000A /**< The input arguments are negative or result in illegal output. */ -#define POLARSSL_ERR_MPI_DIVISION_BY_ZERO -0x000C /**< The input argument for division is zero, which is not allowed. */ -#define POLARSSL_ERR_MPI_NOT_ACCEPTABLE -0x000E /**< The input arguments are not acceptable. */ -#define POLARSSL_ERR_MPI_MALLOC_FAILED -0x0010 /**< Memory allocation failed. */ - -#define MPI_CHK(f) do { if( ( ret = f ) != 0 ) goto cleanup; } while( 0 ) - -/* - * Maximum size MPIs are allowed to grow to in number of limbs. - */ -#define POLARSSL_MPI_MAX_LIMBS 10000 - -#if !defined(POLARSSL_MPI_WINDOW_SIZE) -/* - * Maximum window size used for modular exponentiation. Default: 6 - * Minimum value: 1. Maximum value: 6. - * - * Result is an array of ( 2 << POLARSSL_MPI_WINDOW_SIZE ) MPIs used - * for the sliding window calculation. (So 64 by default) - * - * Reduction in size, reduces speed. - */ -#define POLARSSL_MPI_WINDOW_SIZE 6 /**< Maximum windows size used. */ -#endif /* !POLARSSL_MPI_WINDOW_SIZE */ - -#if !defined(POLARSSL_MPI_MAX_SIZE) -/* - * Maximum size of MPIs allowed in bits and bytes for user-MPIs. - * ( Default: 512 bytes => 4096 bits, Maximum tested: 2048 bytes => 16384 bits ) - * - * Note: Calculations can results temporarily in larger MPIs. So the number - * of limbs required (POLARSSL_MPI_MAX_LIMBS) is higher. - */ -#define POLARSSL_MPI_MAX_SIZE 512 /**< Maximum number of bytes for usable MPIs. */ -#endif /* !POLARSSL_MPI_MAX_SIZE */ - -#define POLARSSL_MPI_MAX_BITS ( 8 * POLARSSL_MPI_MAX_SIZE ) /**< Maximum number of bits for usable MPIs. */ - -/* - * When reading from files with mpi_read_file() and writing to files with - * mpi_write_file() the buffer should have space - * for a (short) label, the MPI (in the provided radix), the newline - * characters and the '\0'. - * - * By default we assume at least a 10 char label, a minimum radix of 10 - * (decimal) and a maximum of 4096 bit numbers (1234 decimal chars). - * Autosized at compile time for at least a 10 char label, a minimum radix - * of 10 (decimal) for a number of POLARSSL_MPI_MAX_BITS size. - * - * This used to be statically sized to 1250 for a maximum of 4096 bit - * numbers (1234 decimal chars). - * - * Calculate using the formula: - * POLARSSL_MPI_RW_BUFFER_SIZE = ceil(POLARSSL_MPI_MAX_BITS / ln(10) * ln(2)) + - * LabelSize + 6 - */ -#define POLARSSL_MPI_MAX_BITS_SCALE100 ( 100 * POLARSSL_MPI_MAX_BITS ) -#define LN_2_DIV_LN_10_SCALE100 332 -#define POLARSSL_MPI_RW_BUFFER_SIZE ( ((POLARSSL_MPI_MAX_BITS_SCALE100 + LN_2_DIV_LN_10_SCALE100 - 1) / LN_2_DIV_LN_10_SCALE100) + 10 + 6 ) - -/* - * Define the base integer type, architecture-wise - */ -#if defined(POLARSSL_HAVE_INT8) -typedef signed char t_sint; -typedef unsigned char t_uint; -typedef uint16_t t_udbl; -#define POLARSSL_HAVE_UDBL -#else -#if defined(POLARSSL_HAVE_INT16) -typedef int16_t t_sint; -typedef uint16_t t_uint; -typedef uint32_t t_udbl; -#define POLARSSL_HAVE_UDBL -#else - /* - * 32-bit integers can be forced on 64-bit arches (eg. for testing purposes) - * by defining POLARSSL_HAVE_INT32 and undefining POLARSSL_HAVE_ASM - */ - #if ( ! defined(POLARSSL_HAVE_INT32) && \ - defined(_MSC_VER) && defined(_M_AMD64) ) - #define POLARSSL_HAVE_INT64 - typedef int64_t t_sint; - typedef uint64_t t_uint; - #else - #if ( ! defined(POLARSSL_HAVE_INT32) && \ - defined(__GNUC__) && ( \ - defined(__amd64__) || defined(__x86_64__) || \ - defined(__ppc64__) || defined(__powerpc64__) || \ - defined(__ia64__) || defined(__alpha__) || \ - (defined(__sparc__) && defined(__arch64__)) || \ - defined(__s390x__) ) ) - #define POLARSSL_HAVE_INT64 - typedef int64_t t_sint; - typedef uint64_t t_uint; - typedef unsigned int t_udbl __attribute__((mode(TI))); - #define POLARSSL_HAVE_UDBL - #else - #define POLARSSL_HAVE_INT32 - typedef int32_t t_sint; - typedef uint32_t t_uint; - #if ( defined(_MSC_VER) && defined(_M_IX86) ) - typedef uint64_t t_udbl; - #define POLARSSL_HAVE_UDBL - #else - #if defined( POLARSSL_HAVE_LONGLONG ) - typedef unsigned long long t_udbl; - #define POLARSSL_HAVE_UDBL - #endif - #endif - #endif /* !POLARSSL_HAVE_INT32 && __GNUC__ && 64-bit platform */ - #endif /* !POLARSSL_HAVE_INT32 && _MSC_VER && _M_AMD64 */ -#endif /* POLARSSL_HAVE_INT16 */ -#endif /* POLARSSL_HAVE_INT8 */ - -/* because Ameba have no __aeabi_uldivmod */ -#undef POLARSSL_HAVE_UDBL - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief MPI structure - */ -typedef struct -{ - int s; /*!< integer sign */ - size_t n; /*!< total # of limbs */ - t_uint *p; /*!< pointer to limbs */ -} -mpi; - -/** - * \brief Initialize one MPI - * - * \param X One MPI to initialize. - */ -void mpi_init( mpi *X ); - -/** - * \brief Unallocate one MPI - * - * \param X One MPI to unallocate. - */ -void mpi_free( mpi *X ); - -/** - * \brief Enlarge to the specified number of limbs - * - * \param X MPI to grow - * \param nblimbs The target number of limbs - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_grow( mpi *X, size_t nblimbs ); - -/** - * \brief Resize down, keeping at least the specified number of limbs - * - * \param X MPI to shrink - * \param nblimbs The minimum number of limbs to keep - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_shrink( mpi *X, size_t nblimbs ); - -/** - * \brief Copy the contents of Y into X - * - * \param X Destination MPI - * \param Y Source MPI - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_copy( mpi *X, const mpi *Y ); - -/** - * \brief Swap the contents of X and Y - * - * \param X First MPI value - * \param Y Second MPI value - */ -void mpi_swap( mpi *X, mpi *Y ); - -/** - * \brief Safe conditional assignement X = Y if assign is 1 - * - * \param X MPI to conditionally assign to - * \param Y Value to be assigned - * \param assign 1: perform the assignment, 0: keep X's original value - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, - * - * \note This function is equivalent to - * if( assign ) mpi_copy( X, Y ); - * except that it avoids leaking any information about whether - * the assignment was done or not (the above code may leak - * information through branch prediction and/or memory access - * patterns analysis). - */ -int mpi_safe_cond_assign( mpi *X, const mpi *Y, unsigned char assign ); - -/** - * \brief Safe conditional swap X <-> Y if swap is 1 - * - * \param X First mpi value - * \param Y Second mpi value - * \param assign 1: perform the swap, 0: keep X and Y's original values - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, - * - * \note This function is equivalent to - * if( assign ) mpi_swap( X, Y ); - * except that it avoids leaking any information about whether - * the assignment was done or not (the above code may leak - * information through branch prediction and/or memory access - * patterns analysis). - */ -int mpi_safe_cond_swap( mpi *X, mpi *Y, unsigned char assign ); - -/** - * \brief Set value from integer - * - * \param X MPI to set - * \param z Value to use - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_lset( mpi *X, t_sint z ); - -/** - * \brief Get a specific bit from X - * - * \param X MPI to use - * \param pos Zero-based index of the bit in X - * - * \return Either a 0 or a 1 - */ -int mpi_get_bit( const mpi *X, size_t pos ); - -/** - * \brief Set a bit of X to a specific value of 0 or 1 - * - * \note Will grow X if necessary to set a bit to 1 in a not yet - * existing limb. Will not grow if bit should be set to 0 - * - * \param X MPI to use - * \param pos Zero-based index of the bit in X - * \param val The value to set the bit to (0 or 1) - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, - * POLARSSL_ERR_MPI_BAD_INPUT_DATA if val is not 0 or 1 - */ -int mpi_set_bit( mpi *X, size_t pos, unsigned char val ); - -/** - * \brief Return the number of zero-bits before the least significant - * '1' bit - * - * Note: Thus also the zero-based index of the least significant '1' bit - * - * \param X MPI to use - */ -size_t mpi_lsb( const mpi *X ); - -/** - * \brief Return the number of bits up to and including the most - * significant '1' bit' - * - * Note: Thus also the one-based index of the most significant '1' bit - * - * \param X MPI to use - */ -size_t mpi_msb( const mpi *X ); - -/** - * \brief Return the total size in bytes - * - * \param X MPI to use - */ -size_t mpi_size( const mpi *X ); - -/** - * \brief Import from an ASCII string - * - * \param X Destination MPI - * \param radix Input numeric base - * \param s Null-terminated string buffer - * - * \return 0 if successful, or a POLARSSL_ERR_MPI_XXX error code - */ -int mpi_read_string( mpi *X, int radix, const char *s ); - -/** - * \brief Export into an ASCII string - * - * \param X Source MPI - * \param radix Output numeric base - * \param s String buffer - * \param slen String buffer size - * - * \return 0 if successful, or a POLARSSL_ERR_MPI_XXX error code. - * *slen is always updated to reflect the amount - * of data that has (or would have) been written. - * - * \note Call this function with *slen = 0 to obtain the - * minimum required buffer size in *slen. - */ -int mpi_write_string( const mpi *X, int radix, char *s, size_t *slen ); - -#if defined(POLARSSL_FS_IO) -/** - * \brief Read X from an opened file - * - * \param X Destination MPI - * \param radix Input numeric base - * \param fin Input file handle - * - * \return 0 if successful, POLARSSL_ERR_MPI_BUFFER_TOO_SMALL if - * the file read buffer is too small or a - * POLARSSL_ERR_MPI_XXX error code - */ -int mpi_read_file( mpi *X, int radix, FILE *fin ); - -/** - * \brief Write X into an opened file, or stdout if fout is NULL - * - * \param p Prefix, can be NULL - * \param X Source MPI - * \param radix Output numeric base - * \param fout Output file handle (can be NULL) - * - * \return 0 if successful, or a POLARSSL_ERR_MPI_XXX error code - * - * \note Set fout == NULL to print X on the console. - */ -int mpi_write_file( const char *p, const mpi *X, int radix, FILE *fout ); -#endif /* POLARSSL_FS_IO */ - -/** - * \brief Import X from unsigned binary data, big endian - * - * \param X Destination MPI - * \param buf Input buffer - * \param buflen Input buffer size - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_read_binary( mpi *X, const unsigned char *buf, size_t buflen ); - -/** - * \brief Export X into unsigned binary data, big endian. - * Always fills the whole buffer, which will start with zeros - * if the number is smaller. - * - * \param X Source MPI - * \param buf Output buffer - * \param buflen Output buffer size - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_BUFFER_TOO_SMALL if buf isn't large enough - */ -int mpi_write_binary( const mpi *X, unsigned char *buf, size_t buflen ); - -/** - * \brief Left-shift: X <<= count - * - * \param X MPI to shift - * \param count Amount to shift - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_shift_l( mpi *X, size_t count ); - -/** - * \brief Right-shift: X >>= count - * - * \param X MPI to shift - * \param count Amount to shift - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_shift_r( mpi *X, size_t count ); - -/** - * \brief Compare unsigned values - * - * \param X Left-hand MPI - * \param Y Right-hand MPI - * - * \return 1 if |X| is greater than |Y|, - * -1 if |X| is lesser than |Y| or - * 0 if |X| is equal to |Y| - */ -int mpi_cmp_abs( const mpi *X, const mpi *Y ); - -/** - * \brief Compare signed values - * - * \param X Left-hand MPI - * \param Y Right-hand MPI - * - * \return 1 if X is greater than Y, - * -1 if X is lesser than Y or - * 0 if X is equal to Y - */ -int mpi_cmp_mpi( const mpi *X, const mpi *Y ); - -/** - * \brief Compare signed values - * - * \param X Left-hand MPI - * \param z The integer value to compare to - * - * \return 1 if X is greater than z, - * -1 if X is lesser than z or - * 0 if X is equal to z - */ -int mpi_cmp_int( const mpi *X, t_sint z ); - -/** - * \brief Unsigned addition: X = |A| + |B| - * - * \param X Destination MPI - * \param A Left-hand MPI - * \param B Right-hand MPI - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_add_abs( mpi *X, const mpi *A, const mpi *B ); - -/** - * \brief Unsigned subtraction: X = |A| - |B| - * - * \param X Destination MPI - * \param A Left-hand MPI - * \param B Right-hand MPI - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_NEGATIVE_VALUE if B is greater than A - */ -int mpi_sub_abs( mpi *X, const mpi *A, const mpi *B ); - -/** - * \brief Signed addition: X = A + B - * - * \param X Destination MPI - * \param A Left-hand MPI - * \param B Right-hand MPI - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_add_mpi( mpi *X, const mpi *A, const mpi *B ); - -/** - * \brief Signed subtraction: X = A - B - * - * \param X Destination MPI - * \param A Left-hand MPI - * \param B Right-hand MPI - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_sub_mpi( mpi *X, const mpi *A, const mpi *B ); - -/** - * \brief Signed addition: X = A + b - * - * \param X Destination MPI - * \param A Left-hand MPI - * \param b The integer value to add - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_add_int( mpi *X, const mpi *A, t_sint b ); - -/** - * \brief Signed subtraction: X = A - b - * - * \param X Destination MPI - * \param A Left-hand MPI - * \param b The integer value to subtract - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_sub_int( mpi *X, const mpi *A, t_sint b ); - -/** - * \brief Baseline multiplication: X = A * B - * - * \param X Destination MPI - * \param A Left-hand MPI - * \param B Right-hand MPI - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_mul_mpi( mpi *X, const mpi *A, const mpi *B ); - -/** - * \brief Baseline multiplication: X = A * b - * Note: despite the functon signature, b is treated as a - * t_uint. Negative values of b are treated as large positive - * values. - * - * \param X Destination MPI - * \param A Left-hand MPI - * \param b The integer value to multiply with - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_mul_int( mpi *X, const mpi *A, t_sint b ); - -/** - * \brief Division by mpi: A = Q * B + R - * - * \param Q Destination MPI for the quotient - * \param R Destination MPI for the rest value - * \param A Left-hand MPI - * \param B Right-hand MPI - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, - * POLARSSL_ERR_MPI_DIVISION_BY_ZERO if B == 0 - * - * \note Either Q or R can be NULL. - */ -int mpi_div_mpi( mpi *Q, mpi *R, const mpi *A, const mpi *B ); - -/** - * \brief Division by int: A = Q * b + R - * - * \param Q Destination MPI for the quotient - * \param R Destination MPI for the rest value - * \param A Left-hand MPI - * \param b Integer to divide by - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, - * POLARSSL_ERR_MPI_DIVISION_BY_ZERO if b == 0 - * - * \note Either Q or R can be NULL. - */ -int mpi_div_int( mpi *Q, mpi *R, const mpi *A, t_sint b ); - -/** - * \brief Modulo: R = A mod B - * - * \param R Destination MPI for the rest value - * \param A Left-hand MPI - * \param B Right-hand MPI - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, - * POLARSSL_ERR_MPI_DIVISION_BY_ZERO if B == 0, - * POLARSSL_ERR_MPI_NEGATIVE_VALUE if B < 0 - */ -int mpi_mod_mpi( mpi *R, const mpi *A, const mpi *B ); - -/** - * \brief Modulo: r = A mod b - * - * \param r Destination t_uint - * \param A Left-hand MPI - * \param b Integer to divide by - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, - * POLARSSL_ERR_MPI_DIVISION_BY_ZERO if b == 0, - * POLARSSL_ERR_MPI_NEGATIVE_VALUE if b < 0 - */ -int mpi_mod_int( t_uint *r, const mpi *A, t_sint b ); - -/** - * \brief Sliding-window exponentiation: X = A^E mod N - * - * \param X Destination MPI - * \param A Left-hand MPI - * \param E Exponent MPI - * \param N Modular MPI - * \param _RR Speed-up MPI used for recalculations - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, - * POLARSSL_ERR_MPI_BAD_INPUT_DATA if N is negative or even or - * if E is negative - * - * \note _RR is used to avoid re-computing R*R mod N across - * multiple calls, which speeds up things a bit. It can - * be set to NULL if the extra performance is unneeded. - */ -int mpi_exp_mod( mpi *X, const mpi *A, const mpi *E, const mpi *N, mpi *_RR ); - -/** - * \brief Fill an MPI X with size bytes of random - * - * \param X Destination MPI - * \param size Size in bytes - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_fill_random( mpi *X, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Greatest common divisor: G = gcd(A, B) - * - * \param G Destination MPI - * \param A Left-hand MPI - * \param B Right-hand MPI - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int mpi_gcd( mpi *G, const mpi *A, const mpi *B ); - -/** - * \brief Modular inverse: X = A^-1 mod N - * - * \param X Destination MPI - * \param A Left-hand MPI - * \param N Right-hand MPI - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, - * POLARSSL_ERR_MPI_BAD_INPUT_DATA if N is negative or nil - POLARSSL_ERR_MPI_NOT_ACCEPTABLE if A has no inverse mod N - */ -int mpi_inv_mod( mpi *X, const mpi *A, const mpi *N ); - -/** - * \brief Miller-Rabin primality test - * - * \param X MPI to check - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \return 0 if successful (probably prime), - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, - * POLARSSL_ERR_MPI_NOT_ACCEPTABLE if X is not prime - */ -int mpi_is_prime( mpi *X, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Prime number generation - * - * \param X Destination MPI - * \param nbits Required size of X in bits - * ( 3 <= nbits <= POLARSSL_MPI_MAX_BITS ) - * \param dh_flag If 1, then (X-1)/2 will be prime too - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \return 0 if successful (probably prime), - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, - * POLARSSL_ERR_MPI_BAD_INPUT_DATA if nbits is < 3 - */ -int mpi_gen_prime( mpi *X, size_t nbits, int dh_flag, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int mpi_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* bignum.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/blowfish.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/blowfish.h deleted file mode 100644 index c652b46..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/blowfish.h +++ /dev/null @@ -1,197 +0,0 @@ -/** - * \file blowfish.h - * - * \brief Blowfish block cipher - * - * Copyright (C) 2012-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_BLOWFISH_H -#define POLARSSL_BLOWFISH_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#define BLOWFISH_ENCRYPT 1 -#define BLOWFISH_DECRYPT 0 -#define BLOWFISH_MAX_KEY 448 -#define BLOWFISH_MIN_KEY 32 -#define BLOWFISH_ROUNDS 16 /**< Rounds to use. When increasing this value, make sure to extend the initialisation vectors */ -#define BLOWFISH_BLOCKSIZE 8 /* Blowfish uses 64 bit blocks */ - -#define POLARSSL_ERR_BLOWFISH_INVALID_KEY_LENGTH -0x0016 /**< Invalid key length. */ -#define POLARSSL_ERR_BLOWFISH_INVALID_INPUT_LENGTH -0x0018 /**< Invalid data input length. */ - -#if !defined(POLARSSL_BLOWFISH_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Blowfish context structure - */ -typedef struct -{ - uint32_t P[BLOWFISH_ROUNDS + 2]; /*!< Blowfish round keys */ - uint32_t S[4][256]; /*!< key dependent S-boxes */ -} -blowfish_context; - -/** - * \brief Initialize Blowfish context - * - * \param ctx Blowfish context to be initialized - */ -void blowfish_init( blowfish_context *ctx ); - -/** - * \brief Clear Blowfish context - * - * \param ctx Blowfish context to be cleared - */ -void blowfish_free( blowfish_context *ctx ); - -/** - * \brief Blowfish key schedule - * - * \param ctx Blowfish context to be initialized - * \param key encryption key - * \param keysize must be between 32 and 448 bits - * - * \return 0 if successful, or POLARSSL_ERR_BLOWFISH_INVALID_KEY_LENGTH - */ -int blowfish_setkey( blowfish_context *ctx, const unsigned char *key, - unsigned int keysize ); - -/** - * \brief Blowfish-ECB block encryption/decryption - * - * \param ctx Blowfish context - * \param mode BLOWFISH_ENCRYPT or BLOWFISH_DECRYPT - * \param input 8-byte input block - * \param output 8-byte output block - * - * \return 0 if successful - */ -int blowfish_crypt_ecb( blowfish_context *ctx, - int mode, - const unsigned char input[BLOWFISH_BLOCKSIZE], - unsigned char output[BLOWFISH_BLOCKSIZE] ); - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/** - * \brief Blowfish-CBC buffer encryption/decryption - * Length should be a multiple of the block - * size (8 bytes) - * - * \param ctx Blowfish context - * \param mode BLOWFISH_ENCRYPT or BLOWFISH_DECRYPT - * \param length length of the input data - * \param iv initialization vector (updated after use) - * \param input buffer holding the input data - * \param output buffer holding the output data - * - * \return 0 if successful, or - * POLARSSL_ERR_BLOWFISH_INVALID_INPUT_LENGTH - */ -int blowfish_crypt_cbc( blowfish_context *ctx, - int mode, - size_t length, - unsigned char iv[BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ); -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) -/** - * \brief Blowfish CFB buffer encryption/decryption. - * - * \param ctx Blowfish context - * \param mode BLOWFISH_ENCRYPT or BLOWFISH_DECRYPT - * \param length length of the input data - * \param iv_off offset in IV (updated after use) - * \param iv initialization vector (updated after use) - * \param input buffer holding the input data - * \param output buffer holding the output data - * - * \return 0 if successful - */ -int blowfish_crypt_cfb64( blowfish_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ); -#endif /*POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) -/** - * \brief Blowfish-CTR buffer encryption/decryption - * - * Warning: You have to keep the maximum use of your counter in mind! - * - * \param ctx Blowfish context - * \param length The length of the data - * \param nc_off The offset in the current stream_block (for resuming - * within current cipher stream). The offset pointer to - * should be 0 at the start of a stream. - * \param nonce_counter The 64-bit nonce and counter. - * \param stream_block The saved stream-block for resuming. Is overwritten - * by the function. - * \param input The input data stream - * \param output The output data stream - * - * \return 0 if successful - */ -int blowfish_crypt_ctr( blowfish_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[BLOWFISH_BLOCKSIZE], - unsigned char stream_block[BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ); -#endif /* POLARSSL_CIPHER_MODE_CTR */ - -#ifdef __cplusplus -} -#endif - -#else /* POLARSSL_BLOWFISH_ALT */ -#include "blowfish_alt.h" -#endif /* POLARSSL_BLOWFISH_ALT */ - -#endif /* blowfish.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/bn_mul.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/bn_mul.h deleted file mode 100644 index 64b59ff..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/bn_mul.h +++ /dev/null @@ -1,873 +0,0 @@ -/** - * \file bn_mul.h - * - * \brief Multi-precision integer library - * - * Copyright (C) 2006-2010, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * Multiply source vector [s] with b, add result - * to destination vector [d] and set carry c. - * - * Currently supports: - * - * . IA-32 (386+) . AMD64 / EM64T - * . IA-32 (SSE2) . Motorola 68000 - * . PowerPC, 32-bit . MicroBlaze - * . PowerPC, 64-bit . TriCore - * . SPARC v8 . ARM v3+ - * . Alpha . MIPS32 - * . C, longlong . C, generic - */ -#ifndef POLARSSL_BN_MUL_H -#define POLARSSL_BN_MUL_H - -#include "bignum.h" - -#if defined(POLARSSL_HAVE_ASM) - -#if defined(__GNUC__) -#if defined(__i386__) - -#define MULADDC_INIT \ - asm( \ - "movl %%ebx, %0 \n\t" \ - "movl %5, %%esi \n\t" \ - "movl %6, %%edi \n\t" \ - "movl %7, %%ecx \n\t" \ - "movl %8, %%ebx \n\t" - -#define MULADDC_CORE \ - "lodsl \n\t" \ - "mull %%ebx \n\t" \ - "addl %%ecx, %%eax \n\t" \ - "adcl $0, %%edx \n\t" \ - "addl (%%edi), %%eax \n\t" \ - "adcl $0, %%edx \n\t" \ - "movl %%edx, %%ecx \n\t" \ - "stosl \n\t" - -#if defined(POLARSSL_HAVE_SSE2) - -#define MULADDC_HUIT \ - "movd %%ecx, %%mm1 \n\t" \ - "movd %%ebx, %%mm0 \n\t" \ - "movd (%%edi), %%mm3 \n\t" \ - "paddq %%mm3, %%mm1 \n\t" \ - "movd (%%esi), %%mm2 \n\t" \ - "pmuludq %%mm0, %%mm2 \n\t" \ - "movd 4(%%esi), %%mm4 \n\t" \ - "pmuludq %%mm0, %%mm4 \n\t" \ - "movd 8(%%esi), %%mm6 \n\t" \ - "pmuludq %%mm0, %%mm6 \n\t" \ - "movd 12(%%esi), %%mm7 \n\t" \ - "pmuludq %%mm0, %%mm7 \n\t" \ - "paddq %%mm2, %%mm1 \n\t" \ - "movd 4(%%edi), %%mm3 \n\t" \ - "paddq %%mm4, %%mm3 \n\t" \ - "movd 8(%%edi), %%mm5 \n\t" \ - "paddq %%mm6, %%mm5 \n\t" \ - "movd 12(%%edi), %%mm4 \n\t" \ - "paddq %%mm4, %%mm7 \n\t" \ - "movd %%mm1, (%%edi) \n\t" \ - "movd 16(%%esi), %%mm2 \n\t" \ - "pmuludq %%mm0, %%mm2 \n\t" \ - "psrlq $32, %%mm1 \n\t" \ - "movd 20(%%esi), %%mm4 \n\t" \ - "pmuludq %%mm0, %%mm4 \n\t" \ - "paddq %%mm3, %%mm1 \n\t" \ - "movd 24(%%esi), %%mm6 \n\t" \ - "pmuludq %%mm0, %%mm6 \n\t" \ - "movd %%mm1, 4(%%edi) \n\t" \ - "psrlq $32, %%mm1 \n\t" \ - "movd 28(%%esi), %%mm3 \n\t" \ - "pmuludq %%mm0, %%mm3 \n\t" \ - "paddq %%mm5, %%mm1 \n\t" \ - "movd 16(%%edi), %%mm5 \n\t" \ - "paddq %%mm5, %%mm2 \n\t" \ - "movd %%mm1, 8(%%edi) \n\t" \ - "psrlq $32, %%mm1 \n\t" \ - "paddq %%mm7, %%mm1 \n\t" \ - "movd 20(%%edi), %%mm5 \n\t" \ - "paddq %%mm5, %%mm4 \n\t" \ - "movd %%mm1, 12(%%edi) \n\t" \ - "psrlq $32, %%mm1 \n\t" \ - "paddq %%mm2, %%mm1 \n\t" \ - "movd 24(%%edi), %%mm5 \n\t" \ - "paddq %%mm5, %%mm6 \n\t" \ - "movd %%mm1, 16(%%edi) \n\t" \ - "psrlq $32, %%mm1 \n\t" \ - "paddq %%mm4, %%mm1 \n\t" \ - "movd 28(%%edi), %%mm5 \n\t" \ - "paddq %%mm5, %%mm3 \n\t" \ - "movd %%mm1, 20(%%edi) \n\t" \ - "psrlq $32, %%mm1 \n\t" \ - "paddq %%mm6, %%mm1 \n\t" \ - "movd %%mm1, 24(%%edi) \n\t" \ - "psrlq $32, %%mm1 \n\t" \ - "paddq %%mm3, %%mm1 \n\t" \ - "movd %%mm1, 28(%%edi) \n\t" \ - "addl $32, %%edi \n\t" \ - "addl $32, %%esi \n\t" \ - "psrlq $32, %%mm1 \n\t" \ - "movd %%mm1, %%ecx \n\t" - -#define MULADDC_STOP \ - "emms \n\t" \ - "movl %4, %%ebx \n\t" \ - "movl %%ecx, %1 \n\t" \ - "movl %%edi, %2 \n\t" \ - "movl %%esi, %3 \n\t" \ - : "=m" (t), "=m" (c), "=m" (d), "=m" (s) \ - : "m" (t), "m" (s), "m" (d), "m" (c), "m" (b) \ - : "eax", "ecx", "edx", "esi", "edi" \ - ); - -#else - -#define MULADDC_STOP \ - "movl %4, %%ebx \n\t" \ - "movl %%ecx, %1 \n\t" \ - "movl %%edi, %2 \n\t" \ - "movl %%esi, %3 \n\t" \ - : "=m" (t), "=m" (c), "=m" (d), "=m" (s) \ - : "m" (t), "m" (s), "m" (d), "m" (c), "m" (b) \ - : "eax", "ecx", "edx", "esi", "edi" \ - ); -#endif /* SSE2 */ -#endif /* i386 */ - -#if defined(__amd64__) || defined (__x86_64__) - -#define MULADDC_INIT \ - asm( \ - "movq %3, %%rsi \n\t" \ - "movq %4, %%rdi \n\t" \ - "movq %5, %%rcx \n\t" \ - "movq %6, %%rbx \n\t" \ - "xorq %%r8, %%r8 \n\t" - -#define MULADDC_CORE \ - "movq (%%rsi), %%rax \n\t" \ - "mulq %%rbx \n\t" \ - "addq $8, %%rsi \n\t" \ - "addq %%rcx, %%rax \n\t" \ - "movq %%r8, %%rcx \n\t" \ - "adcq $0, %%rdx \n\t" \ - "nop \n\t" \ - "addq %%rax, (%%rdi) \n\t" \ - "adcq %%rdx, %%rcx \n\t" \ - "addq $8, %%rdi \n\t" - -#define MULADDC_STOP \ - "movq %%rcx, %0 \n\t" \ - "movq %%rdi, %1 \n\t" \ - "movq %%rsi, %2 \n\t" \ - : "=m" (c), "=m" (d), "=m" (s) \ - : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "rax", "rcx", "rdx", "rbx", "rsi", "rdi", "r8" \ - ); - -#endif /* AMD64 */ - -#if defined(__mc68020__) || defined(__mcpu32__) - -#define MULADDC_INIT \ - asm( \ - "movl %3, %%a2 \n\t" \ - "movl %4, %%a3 \n\t" \ - "movl %5, %%d3 \n\t" \ - "movl %6, %%d2 \n\t" \ - "moveq #0, %%d0 \n\t" - -#define MULADDC_CORE \ - "movel %%a2@+, %%d1 \n\t" \ - "mulul %%d2, %%d4:%%d1 \n\t" \ - "addl %%d3, %%d1 \n\t" \ - "addxl %%d0, %%d4 \n\t" \ - "moveq #0, %%d3 \n\t" \ - "addl %%d1, %%a3@+ \n\t" \ - "addxl %%d4, %%d3 \n\t" - -#define MULADDC_STOP \ - "movl %%d3, %0 \n\t" \ - "movl %%a3, %1 \n\t" \ - "movl %%a2, %2 \n\t" \ - : "=m" (c), "=m" (d), "=m" (s) \ - : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "d0", "d1", "d2", "d3", "d4", "a2", "a3" \ - ); - -#define MULADDC_HUIT \ - "movel %%a2@+, %%d1 \n\t" \ - "mulul %%d2, %%d4:%%d1 \n\t" \ - "addxl %%d3, %%d1 \n\t" \ - "addxl %%d0, %%d4 \n\t" \ - "addl %%d1, %%a3@+ \n\t" \ - "movel %%a2@+, %%d1 \n\t" \ - "mulul %%d2, %%d3:%%d1 \n\t" \ - "addxl %%d4, %%d1 \n\t" \ - "addxl %%d0, %%d3 \n\t" \ - "addl %%d1, %%a3@+ \n\t" \ - "movel %%a2@+, %%d1 \n\t" \ - "mulul %%d2, %%d4:%%d1 \n\t" \ - "addxl %%d3, %%d1 \n\t" \ - "addxl %%d0, %%d4 \n\t" \ - "addl %%d1, %%a3@+ \n\t" \ - "movel %%a2@+, %%d1 \n\t" \ - "mulul %%d2, %%d3:%%d1 \n\t" \ - "addxl %%d4, %%d1 \n\t" \ - "addxl %%d0, %%d3 \n\t" \ - "addl %%d1, %%a3@+ \n\t" \ - "movel %%a2@+, %%d1 \n\t" \ - "mulul %%d2, %%d4:%%d1 \n\t" \ - "addxl %%d3, %%d1 \n\t" \ - "addxl %%d0, %%d4 \n\t" \ - "addl %%d1, %%a3@+ \n\t" \ - "movel %%a2@+, %%d1 \n\t" \ - "mulul %%d2, %%d3:%%d1 \n\t" \ - "addxl %%d4, %%d1 \n\t" \ - "addxl %%d0, %%d3 \n\t" \ - "addl %%d1, %%a3@+ \n\t" \ - "movel %%a2@+, %%d1 \n\t" \ - "mulul %%d2, %%d4:%%d1 \n\t" \ - "addxl %%d3, %%d1 \n\t" \ - "addxl %%d0, %%d4 \n\t" \ - "addl %%d1, %%a3@+ \n\t" \ - "movel %%a2@+, %%d1 \n\t" \ - "mulul %%d2, %%d3:%%d1 \n\t" \ - "addxl %%d4, %%d1 \n\t" \ - "addxl %%d0, %%d3 \n\t" \ - "addl %%d1, %%a3@+ \n\t" \ - "addxl %%d0, %%d3 \n\t" - -#endif /* MC68000 */ - -#if defined(__powerpc64__) || defined(__ppc64__) - -#if defined(__MACH__) && defined(__APPLE__) - -#define MULADDC_INIT \ - asm( \ - "ld r3, %3 \n\t" \ - "ld r4, %4 \n\t" \ - "ld r5, %5 \n\t" \ - "ld r6, %6 \n\t" \ - "addi r3, r3, -8 \n\t" \ - "addi r4, r4, -8 \n\t" \ - "addic r5, r5, 0 \n\t" - -#define MULADDC_CORE \ - "ldu r7, 8(r3) \n\t" \ - "mulld r8, r7, r6 \n\t" \ - "mulhdu r9, r7, r6 \n\t" \ - "adde r8, r8, r5 \n\t" \ - "ld r7, 8(r4) \n\t" \ - "addze r5, r9 \n\t" \ - "addc r8, r8, r7 \n\t" \ - "stdu r8, 8(r4) \n\t" - -#define MULADDC_STOP \ - "addze r5, r5 \n\t" \ - "addi r4, r4, 8 \n\t" \ - "addi r3, r3, 8 \n\t" \ - "std r5, %0 \n\t" \ - "std r4, %1 \n\t" \ - "std r3, %2 \n\t" \ - : "=m" (c), "=m" (d), "=m" (s) \ - : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "r3", "r4", "r5", "r6", "r7", "r8", "r9" \ - ); - - -#else /* __MACH__ && __APPLE__ */ - -#define MULADDC_INIT \ - asm( \ - "ld %%r3, %3 \n\t" \ - "ld %%r4, %4 \n\t" \ - "ld %%r5, %5 \n\t" \ - "ld %%r6, %6 \n\t" \ - "addi %%r3, %%r3, -8 \n\t" \ - "addi %%r4, %%r4, -8 \n\t" \ - "addic %%r5, %%r5, 0 \n\t" - -#define MULADDC_CORE \ - "ldu %%r7, 8(%%r3) \n\t" \ - "mulld %%r8, %%r7, %%r6 \n\t" \ - "mulhdu %%r9, %%r7, %%r6 \n\t" \ - "adde %%r8, %%r8, %%r5 \n\t" \ - "ld %%r7, 8(%%r4) \n\t" \ - "addze %%r5, %%r9 \n\t" \ - "addc %%r8, %%r8, %%r7 \n\t" \ - "stdu %%r8, 8(%%r4) \n\t" - -#define MULADDC_STOP \ - "addze %%r5, %%r5 \n\t" \ - "addi %%r4, %%r4, 8 \n\t" \ - "addi %%r3, %%r3, 8 \n\t" \ - "std %%r5, %0 \n\t" \ - "std %%r4, %1 \n\t" \ - "std %%r3, %2 \n\t" \ - : "=m" (c), "=m" (d), "=m" (s) \ - : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "r3", "r4", "r5", "r6", "r7", "r8", "r9" \ - ); - -#endif /* __MACH__ && __APPLE__ */ - -#elif defined(__powerpc__) || defined(__ppc__) /* end PPC64/begin PPC32 */ - -#if defined(__MACH__) && defined(__APPLE__) - -#define MULADDC_INIT \ - asm( \ - "lwz r3, %3 \n\t" \ - "lwz r4, %4 \n\t" \ - "lwz r5, %5 \n\t" \ - "lwz r6, %6 \n\t" \ - "addi r3, r3, -4 \n\t" \ - "addi r4, r4, -4 \n\t" \ - "addic r5, r5, 0 \n\t" - -#define MULADDC_CORE \ - "lwzu r7, 4(r3) \n\t" \ - "mullw r8, r7, r6 \n\t" \ - "mulhwu r9, r7, r6 \n\t" \ - "adde r8, r8, r5 \n\t" \ - "lwz r7, 4(r4) \n\t" \ - "addze r5, r9 \n\t" \ - "addc r8, r8, r7 \n\t" \ - "stwu r8, 4(r4) \n\t" - -#define MULADDC_STOP \ - "addze r5, r5 \n\t" \ - "addi r4, r4, 4 \n\t" \ - "addi r3, r3, 4 \n\t" \ - "stw r5, %0 \n\t" \ - "stw r4, %1 \n\t" \ - "stw r3, %2 \n\t" \ - : "=m" (c), "=m" (d), "=m" (s) \ - : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "r3", "r4", "r5", "r6", "r7", "r8", "r9" \ - ); - -#else /* __MACH__ && __APPLE__ */ - -#define MULADDC_INIT \ - asm( \ - "lwz %%r3, %3 \n\t" \ - "lwz %%r4, %4 \n\t" \ - "lwz %%r5, %5 \n\t" \ - "lwz %%r6, %6 \n\t" \ - "addi %%r3, %%r3, -4 \n\t" \ - "addi %%r4, %%r4, -4 \n\t" \ - "addic %%r5, %%r5, 0 \n\t" - -#define MULADDC_CORE \ - "lwzu %%r7, 4(%%r3) \n\t" \ - "mullw %%r8, %%r7, %%r6 \n\t" \ - "mulhwu %%r9, %%r7, %%r6 \n\t" \ - "adde %%r8, %%r8, %%r5 \n\t" \ - "lwz %%r7, 4(%%r4) \n\t" \ - "addze %%r5, %%r9 \n\t" \ - "addc %%r8, %%r8, %%r7 \n\t" \ - "stwu %%r8, 4(%%r4) \n\t" - -#define MULADDC_STOP \ - "addze %%r5, %%r5 \n\t" \ - "addi %%r4, %%r4, 4 \n\t" \ - "addi %%r3, %%r3, 4 \n\t" \ - "stw %%r5, %0 \n\t" \ - "stw %%r4, %1 \n\t" \ - "stw %%r3, %2 \n\t" \ - : "=m" (c), "=m" (d), "=m" (s) \ - : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "r3", "r4", "r5", "r6", "r7", "r8", "r9" \ - ); - -#endif /* __MACH__ && __APPLE__ */ - -#endif /* PPC32 */ - -/* - * The Sparc64 assembly is reported to be broken. - * Disable it for now, until we're able to fix it. - */ -#if 0 && defined(__sparc__) && defined(__sparc64__) - -#define MULADDC_INIT \ - asm( \ - "ldx %3, %%o0 \n\t" \ - "ldx %4, %%o1 \n\t" \ - "ld %5, %%o2 \n\t" \ - "ld %6, %%o3 \n\t" - -#define MULADDC_CORE \ - "ld [%%o0], %%o4 \n\t" \ - "inc 4, %%o0 \n\t" \ - "ld [%%o1], %%o5 \n\t" \ - "umul %%o3, %%o4, %%o4 \n\t" \ - "addcc %%o4, %%o2, %%o4 \n\t" \ - "rd %%y, %%g1 \n\t" \ - "addx %%g1, 0, %%g1 \n\t" \ - "addcc %%o4, %%o5, %%o4 \n\t" \ - "st %%o4, [%%o1] \n\t" \ - "addx %%g1, 0, %%o2 \n\t" \ - "inc 4, %%o1 \n\t" - - #define MULADDC_STOP \ - "st %%o2, %0 \n\t" \ - "stx %%o1, %1 \n\t" \ - "stx %%o0, %2 \n\t" \ - : "=m" (c), "=m" (d), "=m" (s) \ - : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "g1", "o0", "o1", "o2", "o3", "o4", \ - "o5" \ - ); -#endif /* SPARCv9 */ - -#if defined(__sparc__) && !defined(__sparc64__) - -#define MULADDC_INIT \ - asm( \ - "ld %3, %%o0 \n\t" \ - "ld %4, %%o1 \n\t" \ - "ld %5, %%o2 \n\t" \ - "ld %6, %%o3 \n\t" - -#define MULADDC_CORE \ - "ld [%%o0], %%o4 \n\t" \ - "inc 4, %%o0 \n\t" \ - "ld [%%o1], %%o5 \n\t" \ - "umul %%o3, %%o4, %%o4 \n\t" \ - "addcc %%o4, %%o2, %%o4 \n\t" \ - "rd %%y, %%g1 \n\t" \ - "addx %%g1, 0, %%g1 \n\t" \ - "addcc %%o4, %%o5, %%o4 \n\t" \ - "st %%o4, [%%o1] \n\t" \ - "addx %%g1, 0, %%o2 \n\t" \ - "inc 4, %%o1 \n\t" - -#define MULADDC_STOP \ - "st %%o2, %0 \n\t" \ - "st %%o1, %1 \n\t" \ - "st %%o0, %2 \n\t" \ - : "=m" (c), "=m" (d), "=m" (s) \ - : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "g1", "o0", "o1", "o2", "o3", "o4", \ - "o5" \ - ); - -#endif /* SPARCv8 */ - -#if defined(__microblaze__) || defined(microblaze) - -#define MULADDC_INIT \ - asm( \ - "lwi r3, %3 \n\t" \ - "lwi r4, %4 \n\t" \ - "lwi r5, %5 \n\t" \ - "lwi r6, %6 \n\t" \ - "andi r7, r6, 0xffff \n\t" \ - "bsrli r6, r6, 16 \n\t" - -#define MULADDC_CORE \ - "lhui r8, r3, 0 \n\t" \ - "addi r3, r3, 2 \n\t" \ - "lhui r9, r3, 0 \n\t" \ - "addi r3, r3, 2 \n\t" \ - "mul r10, r9, r6 \n\t" \ - "mul r11, r8, r7 \n\t" \ - "mul r12, r9, r7 \n\t" \ - "mul r13, r8, r6 \n\t" \ - "bsrli r8, r10, 16 \n\t" \ - "bsrli r9, r11, 16 \n\t" \ - "add r13, r13, r8 \n\t" \ - "add r13, r13, r9 \n\t" \ - "bslli r10, r10, 16 \n\t" \ - "bslli r11, r11, 16 \n\t" \ - "add r12, r12, r10 \n\t" \ - "addc r13, r13, r0 \n\t" \ - "add r12, r12, r11 \n\t" \ - "addc r13, r13, r0 \n\t" \ - "lwi r10, r4, 0 \n\t" \ - "add r12, r12, r10 \n\t" \ - "addc r13, r13, r0 \n\t" \ - "add r12, r12, r5 \n\t" \ - "addc r5, r13, r0 \n\t" \ - "swi r12, r4, 0 \n\t" \ - "addi r4, r4, 4 \n\t" - -#define MULADDC_STOP \ - "swi r5, %0 \n\t" \ - "swi r4, %1 \n\t" \ - "swi r3, %2 \n\t" \ - : "=m" (c), "=m" (d), "=m" (s) \ - : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "r3", "r4" "r5", "r6", "r7", "r8", \ - "r9", "r10", "r11", "r12", "r13" \ - ); - -#endif /* MicroBlaze */ - -#if defined(__tricore__) - -#define MULADDC_INIT \ - asm( \ - "ld.a %%a2, %3 \n\t" \ - "ld.a %%a3, %4 \n\t" \ - "ld.w %%d4, %5 \n\t" \ - "ld.w %%d1, %6 \n\t" \ - "xor %%d5, %%d5 \n\t" - -#define MULADDC_CORE \ - "ld.w %%d0, [%%a2+] \n\t" \ - "madd.u %%e2, %%e4, %%d0, %%d1 \n\t" \ - "ld.w %%d0, [%%a3] \n\t" \ - "addx %%d2, %%d2, %%d0 \n\t" \ - "addc %%d3, %%d3, 0 \n\t" \ - "mov %%d4, %%d3 \n\t" \ - "st.w [%%a3+], %%d2 \n\t" - -#define MULADDC_STOP \ - "st.w %0, %%d4 \n\t" \ - "st.a %1, %%a3 \n\t" \ - "st.a %2, %%a2 \n\t" \ - : "=m" (c), "=m" (d), "=m" (s) \ - : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "d0", "d1", "e2", "d4", "a2", "a3" \ - ); - -#endif /* TriCore */ - -#if defined(__arm__) - -#if defined(__thumb__) && !defined(__thumb2__) - -#define MULADDC_INIT \ - asm( \ - "ldr r0, %3 \n\t" \ - "ldr r1, %4 \n\t" \ - "ldr r2, %5 \n\t" \ - "ldr r3, %6 \n\t" \ - "lsr r7, r3, #16 \n\t" \ - "mov r9, r7 \n\t" \ - "lsl r7, r3, #16 \n\t" \ - "lsr r7, r7, #16 \n\t" \ - "mov r8, r7 \n\t" - -#define MULADDC_CORE \ - "ldmia r0!, {r6} \n\t" \ - "lsr r7, r6, #16 \n\t" \ - "lsl r6, r6, #16 \n\t" \ - "lsr r6, r6, #16 \n\t" \ - "mov r4, r8 \n\t" \ - "mul r4, r6 \n\t" \ - "mov r3, r9 \n\t" \ - "mul r6, r3 \n\t" \ - "mov r5, r9 \n\t" \ - "mul r5, r7 \n\t" \ - "mov r3, r8 \n\t" \ - "mul r7, r3 \n\t" \ - "lsr r3, r6, #16 \n\t" \ - "add r5, r5, r3 \n\t" \ - "lsr r3, r7, #16 \n\t" \ - "add r5, r5, r3 \n\t" \ - "add r4, r4, r2 \n\t" \ - "mov r2, #0 \n\t" \ - "adc r5, r2 \n\t" \ - "lsl r3, r6, #16 \n\t" \ - "add r4, r4, r3 \n\t" \ - "adc r5, r2 \n\t" \ - "lsl r3, r7, #16 \n\t" \ - "add r4, r4, r3 \n\t" \ - "adc r5, r2 \n\t" \ - "ldr r3, [r1] \n\t" \ - "add r4, r4, r3 \n\t" \ - "adc r2, r5 \n\t" \ - "stmia r1!, {r4} \n\t" - -#define MULADDC_STOP \ - "str r2, %0 \n\t" \ - "str r1, %1 \n\t" \ - "str r0, %2 \n\t" \ - : "=m" (c), "=m" (d), "=m" (s) \ - : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "r0", "r1", "r2", "r3", "r4", "r5", \ - "r6", "r7", "r8", "r9", "cc" \ - ); - -#else - -#define MULADDC_INIT \ - asm( \ - "ldr r0, %3 \n\t" \ - "ldr r1, %4 \n\t" \ - "ldr r2, %5 \n\t" \ - "ldr r3, %6 \n\t" - -#define MULADDC_CORE \ - "ldr r4, [r0], #4 \n\t" \ - "mov r5, #0 \n\t" \ - "ldr r6, [r1] \n\t" \ - "umlal r2, r5, r3, r4 \n\t" \ - "adds r7, r6, r2 \n\t" \ - "adc r2, r5, #0 \n\t" \ - "str r7, [r1], #4 \n\t" - -#define MULADDC_STOP \ - "str r2, %0 \n\t" \ - "str r1, %1 \n\t" \ - "str r0, %2 \n\t" \ - : "=m" (c), "=m" (d), "=m" (s) \ - : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "r0", "r1", "r2", "r3", "r4", "r5", \ - "r6", "r7", "cc" \ - ); - -#endif /* Thumb */ - -#endif /* ARMv3 */ - -#if defined(__alpha__) - -#define MULADDC_INIT \ - asm( \ - "ldq $1, %3 \n\t" \ - "ldq $2, %4 \n\t" \ - "ldq $3, %5 \n\t" \ - "ldq $4, %6 \n\t" - -#define MULADDC_CORE \ - "ldq $6, 0($1) \n\t" \ - "addq $1, 8, $1 \n\t" \ - "mulq $6, $4, $7 \n\t" \ - "umulh $6, $4, $6 \n\t" \ - "addq $7, $3, $7 \n\t" \ - "cmpult $7, $3, $3 \n\t" \ - "ldq $5, 0($2) \n\t" \ - "addq $7, $5, $7 \n\t" \ - "cmpult $7, $5, $5 \n\t" \ - "stq $7, 0($2) \n\t" \ - "addq $2, 8, $2 \n\t" \ - "addq $6, $3, $3 \n\t" \ - "addq $5, $3, $3 \n\t" - -#define MULADDC_STOP \ - "stq $3, %0 \n\t" \ - "stq $2, %1 \n\t" \ - "stq $1, %2 \n\t" \ - : "=m" (c), "=m" (d), "=m" (s) \ - : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "$1", "$2", "$3", "$4", "$5", "$6", "$7" \ - ); -#endif /* Alpha */ - -#if defined(__mips__) && !defined(__mips64__) - -#define MULADDC_INIT \ - asm( \ - "lw $10, %3 \n\t" \ - "lw $11, %4 \n\t" \ - "lw $12, %5 \n\t" \ - "lw $13, %6 \n\t" - -#define MULADDC_CORE \ - "lw $14, 0($10) \n\t" \ - "multu $13, $14 \n\t" \ - "addi $10, $10, 4 \n\t" \ - "mflo $14 \n\t" \ - "mfhi $9 \n\t" \ - "addu $14, $12, $14 \n\t" \ - "lw $15, 0($11) \n\t" \ - "sltu $12, $14, $12 \n\t" \ - "addu $15, $14, $15 \n\t" \ - "sltu $14, $15, $14 \n\t" \ - "addu $12, $12, $9 \n\t" \ - "sw $15, 0($11) \n\t" \ - "addu $12, $12, $14 \n\t" \ - "addi $11, $11, 4 \n\t" - -#define MULADDC_STOP \ - "sw $12, %0 \n\t" \ - "sw $11, %1 \n\t" \ - "sw $10, %2 \n\t" \ - : "=m" (c), "=m" (d), "=m" (s) \ - : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "$9", "$10", "$11", "$12", "$13", "$14", "$15" \ - ); - -#endif /* MIPS */ -#endif /* GNUC */ - -#if (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__) - -#define MULADDC_INIT \ - __asm mov esi, s \ - __asm mov edi, d \ - __asm mov ecx, c \ - __asm mov ebx, b - -#define MULADDC_CORE \ - __asm lodsd \ - __asm mul ebx \ - __asm add eax, ecx \ - __asm adc edx, 0 \ - __asm add eax, [edi] \ - __asm adc edx, 0 \ - __asm mov ecx, edx \ - __asm stosd - -#if defined(POLARSSL_HAVE_SSE2) - -#define EMIT __asm _emit - -#define MULADDC_HUIT \ - EMIT 0x0F EMIT 0x6E EMIT 0xC9 \ - EMIT 0x0F EMIT 0x6E EMIT 0xC3 \ - EMIT 0x0F EMIT 0x6E EMIT 0x1F \ - EMIT 0x0F EMIT 0xD4 EMIT 0xCB \ - EMIT 0x0F EMIT 0x6E EMIT 0x16 \ - EMIT 0x0F EMIT 0xF4 EMIT 0xD0 \ - EMIT 0x0F EMIT 0x6E EMIT 0x66 EMIT 0x04 \ - EMIT 0x0F EMIT 0xF4 EMIT 0xE0 \ - EMIT 0x0F EMIT 0x6E EMIT 0x76 EMIT 0x08 \ - EMIT 0x0F EMIT 0xF4 EMIT 0xF0 \ - EMIT 0x0F EMIT 0x6E EMIT 0x7E EMIT 0x0C \ - EMIT 0x0F EMIT 0xF4 EMIT 0xF8 \ - EMIT 0x0F EMIT 0xD4 EMIT 0xCA \ - EMIT 0x0F EMIT 0x6E EMIT 0x5F EMIT 0x04 \ - EMIT 0x0F EMIT 0xD4 EMIT 0xDC \ - EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x08 \ - EMIT 0x0F EMIT 0xD4 EMIT 0xEE \ - EMIT 0x0F EMIT 0x6E EMIT 0x67 EMIT 0x0C \ - EMIT 0x0F EMIT 0xD4 EMIT 0xFC \ - EMIT 0x0F EMIT 0x7E EMIT 0x0F \ - EMIT 0x0F EMIT 0x6E EMIT 0x56 EMIT 0x10 \ - EMIT 0x0F EMIT 0xF4 EMIT 0xD0 \ - EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ - EMIT 0x0F EMIT 0x6E EMIT 0x66 EMIT 0x14 \ - EMIT 0x0F EMIT 0xF4 EMIT 0xE0 \ - EMIT 0x0F EMIT 0xD4 EMIT 0xCB \ - EMIT 0x0F EMIT 0x6E EMIT 0x76 EMIT 0x18 \ - EMIT 0x0F EMIT 0xF4 EMIT 0xF0 \ - EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x04 \ - EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ - EMIT 0x0F EMIT 0x6E EMIT 0x5E EMIT 0x1C \ - EMIT 0x0F EMIT 0xF4 EMIT 0xD8 \ - EMIT 0x0F EMIT 0xD4 EMIT 0xCD \ - EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x10 \ - EMIT 0x0F EMIT 0xD4 EMIT 0xD5 \ - EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x08 \ - EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ - EMIT 0x0F EMIT 0xD4 EMIT 0xCF \ - EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x14 \ - EMIT 0x0F EMIT 0xD4 EMIT 0xE5 \ - EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x0C \ - EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ - EMIT 0x0F EMIT 0xD4 EMIT 0xCA \ - EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x18 \ - EMIT 0x0F EMIT 0xD4 EMIT 0xF5 \ - EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x10 \ - EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ - EMIT 0x0F EMIT 0xD4 EMIT 0xCC \ - EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x1C \ - EMIT 0x0F EMIT 0xD4 EMIT 0xDD \ - EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x14 \ - EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ - EMIT 0x0F EMIT 0xD4 EMIT 0xCE \ - EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x18 \ - EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ - EMIT 0x0F EMIT 0xD4 EMIT 0xCB \ - EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x1C \ - EMIT 0x83 EMIT 0xC7 EMIT 0x20 \ - EMIT 0x83 EMIT 0xC6 EMIT 0x20 \ - EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ - EMIT 0x0F EMIT 0x7E EMIT 0xC9 - -#define MULADDC_STOP \ - EMIT 0x0F EMIT 0x77 \ - __asm mov c, ecx \ - __asm mov d, edi \ - __asm mov s, esi \ - -#else - -#define MULADDC_STOP \ - __asm mov c, ecx \ - __asm mov d, edi \ - __asm mov s, esi \ - -#endif /* SSE2 */ -#endif /* MSVC */ - -#endif /* POLARSSL_HAVE_ASM */ - -#if !defined(MULADDC_CORE) -#if defined(POLARSSL_HAVE_UDBL) - -#define MULADDC_INIT \ -{ \ - t_udbl r; \ - t_uint r0, r1; - -#define MULADDC_CORE \ - r = *(s++) * (t_udbl) b; \ - r0 = r; \ - r1 = r >> biL; \ - r0 += c; r1 += (r0 < c); \ - r0 += *d; r1 += (r0 < *d); \ - c = r1; *(d++) = r0; - -#define MULADDC_STOP \ -} - -#else -#define MULADDC_INIT \ -{ \ - t_uint s0, s1, b0, b1; \ - t_uint r0, r1, rx, ry; \ - b0 = ( b << biH ) >> biH; \ - b1 = ( b >> biH ); - -#define MULADDC_CORE \ - s0 = ( *s << biH ) >> biH; \ - s1 = ( *s >> biH ); s++; \ - rx = s0 * b1; r0 = s0 * b0; \ - ry = s1 * b0; r1 = s1 * b1; \ - r1 += ( rx >> biH ); \ - r1 += ( ry >> biH ); \ - rx <<= biH; ry <<= biH; \ - r0 += rx; r1 += (r0 < rx); \ - r0 += ry; r1 += (r0 < ry); \ - r0 += c; r1 += (r0 < c); \ - r0 += *d; r1 += (r0 < *d); \ - c = r1; *(d++) = r0; - -#define MULADDC_STOP \ -} - -#endif /* C (generic) */ -#endif /* C (longlong) */ - -#endif /* bn_mul.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/camellia.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/camellia.h deleted file mode 100644 index 8488d1d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/camellia.h +++ /dev/null @@ -1,229 +0,0 @@ -/** - * \file camellia.h - * - * \brief Camellia block cipher - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_CAMELLIA_H -#define POLARSSL_CAMELLIA_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#define CAMELLIA_ENCRYPT 1 -#define CAMELLIA_DECRYPT 0 - -#define POLARSSL_ERR_CAMELLIA_INVALID_KEY_LENGTH -0x0024 /**< Invalid key length. */ -#define POLARSSL_ERR_CAMELLIA_INVALID_INPUT_LENGTH -0x0026 /**< Invalid data input length. */ - -#if !defined(POLARSSL_CAMELLIA_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief CAMELLIA context structure - */ -typedef struct -{ - int nr; /*!< number of rounds */ - uint32_t rk[68]; /*!< CAMELLIA round keys */ -} -camellia_context; - -/** - * \brief Initialize CAMELLIA context - * - * \param ctx CAMELLIA context to be initialized - */ -void camellia_init( camellia_context *ctx ); - -/** - * \brief Clear CAMELLIA context - * - * \param ctx CAMELLIA context to be cleared - */ -void camellia_free( camellia_context *ctx ); - -/** - * \brief CAMELLIA key schedule (encryption) - * - * \param ctx CAMELLIA context to be initialized - * \param key encryption key - * \param keysize must be 128, 192 or 256 - * - * \return 0 if successful, or POLARSSL_ERR_CAMELLIA_INVALID_KEY_LENGTH - */ -int camellia_setkey_enc( camellia_context *ctx, const unsigned char *key, - unsigned int keysize ); - -/** - * \brief CAMELLIA key schedule (decryption) - * - * \param ctx CAMELLIA context to be initialized - * \param key decryption key - * \param keysize must be 128, 192 or 256 - * - * \return 0 if successful, or POLARSSL_ERR_CAMELLIA_INVALID_KEY_LENGTH - */ -int camellia_setkey_dec( camellia_context *ctx, const unsigned char *key, - unsigned int keysize ); - -/** - * \brief CAMELLIA-ECB block encryption/decryption - * - * \param ctx CAMELLIA context - * \param mode CAMELLIA_ENCRYPT or CAMELLIA_DECRYPT - * \param input 16-byte input block - * \param output 16-byte output block - * - * \return 0 if successful - */ -int camellia_crypt_ecb( camellia_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ); - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/** - * \brief CAMELLIA-CBC buffer encryption/decryption - * Length should be a multiple of the block - * size (16 bytes) - * - * \param ctx CAMELLIA context - * \param mode CAMELLIA_ENCRYPT or CAMELLIA_DECRYPT - * \param length length of the input data - * \param iv initialization vector (updated after use) - * \param input buffer holding the input data - * \param output buffer holding the output data - * - * \return 0 if successful, or - * POLARSSL_ERR_CAMELLIA_INVALID_INPUT_LENGTH - */ -int camellia_crypt_cbc( camellia_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ); -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) -/** - * \brief CAMELLIA-CFB128 buffer encryption/decryption - * - * Note: Due to the nature of CFB you should use the same key schedule for - * both encryption and decryption. So a context initialized with - * camellia_setkey_enc() for both CAMELLIA_ENCRYPT and CAMELLIE_DECRYPT. - * - * \param ctx CAMELLIA context - * \param mode CAMELLIA_ENCRYPT or CAMELLIA_DECRYPT - * \param length length of the input data - * \param iv_off offset in IV (updated after use) - * \param iv initialization vector (updated after use) - * \param input buffer holding the input data - * \param output buffer holding the output data - * - * \return 0 if successful, or - * POLARSSL_ERR_CAMELLIA_INVALID_INPUT_LENGTH - */ -int camellia_crypt_cfb128( camellia_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ); -#endif /* POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) -/** - * \brief CAMELLIA-CTR buffer encryption/decryption - * - * Warning: You have to keep the maximum use of your counter in mind! - * - * Note: Due to the nature of CTR you should use the same key schedule for - * both encryption and decryption. So a context initialized with - * camellia_setkey_enc() for both CAMELLIA_ENCRYPT and CAMELLIA_DECRYPT. - * - * \param ctx CAMELLIA context - * \param length The length of the data - * \param nc_off The offset in the current stream_block (for resuming - * within current cipher stream). The offset pointer to - * should be 0 at the start of a stream. - * \param nonce_counter The 128-bit nonce and counter. - * \param stream_block The saved stream-block for resuming. Is overwritten - * by the function. - * \param input The input data stream - * \param output The output data stream - * - * \return 0 if successful - */ -int camellia_crypt_ctr( camellia_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[16], - unsigned char stream_block[16], - const unsigned char *input, - unsigned char *output ); -#endif /* POLARSSL_CIPHER_MODE_CTR */ - -#ifdef __cplusplus -} -#endif - -#else /* POLARSSL_CAMELLIA_ALT */ -#include "camellia_alt.h" -#endif /* POLARSSL_CAMELLIA_ALT */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int camellia_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* camellia.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ccm.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ccm.h deleted file mode 100644 index 439152f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ccm.h +++ /dev/null @@ -1,134 +0,0 @@ -/** - * \file ccm.h - * - * \brief Counter with CBC-MAC (CCM) for 128-bit block ciphers - * - * Copyright (C) 2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_CCM_H -#define POLARSSL_CCM_H - -#include "cipher.h" - -#define POLARSSL_ERR_CCM_BAD_INPUT -0x000D /**< Bad input parameters to function. */ -#define POLARSSL_ERR_CCM_AUTH_FAILED -0x000F /**< Authenticated decryption failed. */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief CCM context structure - */ -typedef struct { - cipher_context_t cipher_ctx; /*!< cipher context used */ -} -ccm_context; - -/** - * \brief CCM initialization (encryption and decryption) - * - * \param ctx CCM context to be initialized - * \param cipher cipher to use (a 128-bit block cipher) - * \param key encryption key - * \param keysize key size in bits (must be acceptable by the cipher) - * - * \return 0 if successful, or a cipher specific error code - */ -int ccm_init( ccm_context *ctx, cipher_id_t cipher, - const unsigned char *key, unsigned int keysize ); - -/** - * \brief Free a CCM context and underlying cipher sub-context - * - * \param ctx CCM context to free - */ -void ccm_free( ccm_context *ctx ); - -/** - * \brief CCM buffer encryption - * - * \param ctx CCM context - * \param length length of the input data in bytes - * \param iv nonce (initialization vector) - * \param iv_len length of IV in bytes - * must be 2, 3, 4, 5, 6, 7 or 8 - * \param add additional data - * \param add_len length of additional data in bytes - * must be less than 2^16 - 2^8 - * \param input buffer holding the input data - * \param output buffer for holding the output data - * must be at least 'length' bytes wide - * \param tag buffer for holding the tag - * \param tag_len length of the tag to generate in bytes - * must be 4, 6, 8, 10, 14 or 16 - * - * \note The tag is written to a separate buffer. To get the tag - * concatenated with the output as in the CCM spec, use - * tag = output + length and make sure the output buffer is - * at least length + tag_len wide. - * - * \return 0 if successful - */ -int ccm_encrypt_and_tag( ccm_context *ctx, size_t length, - const unsigned char *iv, size_t iv_len, - const unsigned char *add, size_t add_len, - const unsigned char *input, unsigned char *output, - unsigned char *tag, size_t tag_len ); - -/** - * \brief CCM buffer authenticated decryption - * - * \param ctx CCM context - * \param length length of the input data - * \param iv initialization vector - * \param iv_len length of IV - * \param add additional data - * \param add_len length of additional data - * \param input buffer holding the input data - * \param output buffer for holding the output data - * \param tag buffer holding the tag - * \param tag_len length of the tag - * - * \return 0 if successful and authenticated, - * POLARSSL_ERR_CCM_AUTH_FAILED if tag does not match - */ -int ccm_auth_decrypt( ccm_context *ctx, size_t length, - const unsigned char *iv, size_t iv_len, - const unsigned char *add, size_t add_len, - const unsigned char *input, unsigned char *output, - const unsigned char *tag, size_t tag_len ); - -#if defined(POLARSSL_SELF_TEST) && defined(POLARSSL_AES_C) -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int ccm_self_test( int verbose ); -#endif /* POLARSSL_SELF_TEST && POLARSSL_AES_C */ - -#ifdef __cplusplus -} -#endif - -#endif /* POLARSSL_CGM_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/certs.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/certs.h deleted file mode 100644 index ba7c028..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/certs.h +++ /dev/null @@ -1,77 +0,0 @@ -/** - * \file certs.h - * - * \brief Sample certificates and DHM parameters for testing - * - * Copyright (C) 2006-2010, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_CERTS_H -#define POLARSSL_CERTS_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Concatenation of all available CA certificates */ -extern const char test_ca_list[]; - -/* - * Convenience for users who just want a certificate: - * RSA by default, or ECDSA if RSA i not available - */ -extern const char *test_ca_crt; -extern const char *test_ca_key; -extern const char *test_ca_pwd; -extern const char *test_srv_crt; -extern const char *test_srv_key; -extern const char *test_cli_crt; -extern const char *test_cli_key; - -#if defined(POLARSSL_ECDSA_C) -extern const char test_ca_crt_ec[]; -extern const char test_ca_key_ec[]; -extern const char test_ca_pwd_ec[]; -extern const char test_srv_crt_ec[]; -extern const char test_srv_key_ec[]; -extern const char test_cli_crt_ec[]; -extern const char test_cli_key_ec[]; -#endif - -#if defined(POLARSSL_RSA_C) -extern const char test_ca_crt_rsa[]; -extern const char test_ca_key_rsa[]; -extern const char test_ca_pwd_rsa[]; -extern const char test_srv_crt_rsa[]; -extern const char test_srv_key_rsa[]; -extern const char test_cli_crt_rsa[]; -extern const char test_cli_key_rsa[]; -#endif - -#if defined(POLARSSL_DHM_C) -extern const char test_dhm_params[]; -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* certs.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/check_config.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/check_config.h deleted file mode 100644 index d0f5a9e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/check_config.h +++ /dev/null @@ -1,336 +0,0 @@ -/** - * \file check_config.h - * - * \brief Consistency checks for configuration options - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * It is recommended to include this file from your config.h - * in order to catch dependency issues early. - */ - -#ifndef POLARSSL_CHECK_CONFIG_H -#define POLARSSL_CHECK_CONFIG_H - -#if defined(POLARSSL_AESNI_C) && !defined(POLARSSL_HAVE_ASM) -#error "POLARSSL_AESNI_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_CERTS_C) && !defined(POLARSSL_PEM_PARSE_C) -#error "POLARSSL_CERTS_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_CTR_DRBG_C) && !defined(POLARSSL_AES_C) -#error "POLARSSL_CTR_DRBG_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_DHM_C) && !defined(POLARSSL_BIGNUM_C) -#error "POLARSSL_DHM_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_ECDH_C) && !defined(POLARSSL_ECP_C) -#error "POLARSSL_ECDH_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_ECDSA_C) && \ - ( !defined(POLARSSL_ECP_C) || \ - !defined(POLARSSL_ASN1_PARSE_C) || \ - !defined(POLARSSL_ASN1_WRITE_C) ) -#error "POLARSSL_ECDSA_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_ECDSA_DETERMINISTIC) && !defined(POLARSSL_HMAC_DRBG_C) -#error "POLARSSL_ECDSA_DETERMINISTIC defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_ECP_C) && ( !defined(POLARSSL_BIGNUM_C) || ( \ - !defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) && \ - !defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) && \ - !defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) && \ - !defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) && \ - !defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) && \ - !defined(POLARSSL_ECP_DP_BP256R1_ENABLED) && \ - !defined(POLARSSL_ECP_DP_BP384R1_ENABLED) && \ - !defined(POLARSSL_ECP_DP_BP512R1_ENABLED) && \ - !defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) && \ - !defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) && \ - !defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) ) ) -#error "POLARSSL_ECP_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_ENTROPY_C) && (!defined(POLARSSL_SHA512_C) && \ - !defined(POLARSSL_SHA256_C)) -#error "POLARSSL_ENTROPY_C defined, but not all prerequisites" -#endif -#if defined(POLARSSL_ENTROPY_C) && defined(POLARSSL_SHA512_C) && \ - defined(CTR_DRBG_ENTROPY_LEN) && (CTR_DRBG_ENTROPY_LEN > 64) -#error "CTR_DRBG_ENTROPY_LEN value too high" -#endif -#if defined(POLARSSL_ENTROPY_C) && \ - ( !defined(POLARSSL_SHA512_C) || defined(POLARSSL_ENTROPY_FORCE_SHA256) ) \ - && defined(CTR_DRBG_ENTROPY_LEN) && (CTR_DRBG_ENTROPY_LEN > 32) -#error "CTR_DRBG_ENTROPY_LEN value too high" -#endif -#if defined(POLARSSL_ENTROPY_C) && \ - defined(POLARSSL_ENTROPY_FORCE_SHA256) && !defined(POLARSSL_SHA256_C) -#error "POLARSSL_ENTROPY_FORCE_SHA256 defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_GCM_C) && ( \ - !defined(POLARSSL_AES_C) && !defined(POLARSSL_CAMELLIA_C) ) -#error "POLARSSL_GCM_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_HAVEGE_C) && !defined(POLARSSL_TIMING_C) -#error "POLARSSL_HAVEGE_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_HMAC_DRBG) && !defined(POLARSSL_MD_C) -#error "POLARSSL_HMAC_DRBG_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) && \ - ( !defined(POLARSSL_ECDH_C) || !defined(POLARSSL_X509_CRT_PARSE_C) ) -#error "POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED) && \ - ( !defined(POLARSSL_ECDH_C) || !defined(POLARSSL_X509_CRT_PARSE_C) ) -#error "POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) && !defined(POLARSSL_DHM_C) -#error "POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) && \ - !defined(POLARSSL_ECDH_C) -#error "POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) && \ - ( !defined(POLARSSL_DHM_C) || !defined(POLARSSL_RSA_C) || \ - !defined(POLARSSL_X509_CRT_PARSE_C) || !defined(POLARSSL_PKCS1_V15) ) -#error "POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) && \ - ( !defined(POLARSSL_ECDH_C) || !defined(POLARSSL_RSA_C) || \ - !defined(POLARSSL_X509_CRT_PARSE_C) || !defined(POLARSSL_PKCS1_V15) ) -#error "POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) && \ - ( !defined(POLARSSL_ECDH_C) || !defined(POLARSSL_ECDSA_C) || \ - !defined(POLARSSL_X509_CRT_PARSE_C) ) -#error "POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) && \ - ( !defined(POLARSSL_RSA_C) || !defined(POLARSSL_X509_CRT_PARSE_C) ||\ - !defined(POLARSSL_PKCS1_V15) ) -#error "POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) && \ - ( !defined(POLARSSL_RSA_C) || !defined(POLARSSL_X509_CRT_PARSE_C) ||\ - !defined(POLARSSL_PKCS1_V15) ) -#error "POLARSSL_KEY_EXCHANGE_RSA_ENABLED defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_MEMORY_BUFFER_ALLOC_C) && \ - ( !defined(POLARSSL_PLATFORM_C) || !defined(POLARSSL_PLATFORM_MEMORY) ) -#error "POLARSSL_MEMORY_BUFFER_ALLOC_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_PADLOCK_C) && !defined(POLARSSL_HAVE_ASM) -#error "POLARSSL_PADLOCK_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_PBKDF2_C) && !defined(POLARSSL_MD_C) -#error "POLARSSL_PBKDF2_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_PEM_PARSE_C) && !defined(POLARSSL_BASE64_C) -#error "POLARSSL_PEM_PARSE_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_PEM_WRITE_C) && !defined(POLARSSL_BASE64_C) -#error "POLARSSL_PEM_WRITE_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_PK_PARSE_C) && !defined(POLARSSL_PK_C) -#error "POLARSSL_PK_PARSE_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_PK_WRITE_C) && !defined(POLARSSL_PK_C) -#error "POLARSSL_PK_WRITE_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_PKCS11_C) && !defined(POLARSSL_PK_C) -#error "POLARSSL_PKCS11_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_RSA_C) && ( !defined(POLARSSL_BIGNUM_C) || \ - !defined(POLARSSL_OID_C) ) -#error "POLARSSL_RSA_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_X509_RSASSA_PSS_SUPPORT) && \ - ( !defined(POLARSSL_RSA_C) || !defined(POLARSSL_PKCS1_V21) ) -#error "POLARSSL_X509_RSASSA_PSS_SUPPORT defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_SSL_PROTO_SSL3) && ( !defined(POLARSSL_MD5_C) || \ - !defined(POLARSSL_SHA1_C) ) -#error "POLARSSL_SSL_PROTO_SSL3 defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_SSL_PROTO_TLS1) && ( !defined(POLARSSL_MD5_C) || \ - !defined(POLARSSL_SHA1_C) ) -#error "POLARSSL_SSL_PROTO_TLS1 defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_SSL_PROTO_TLS1_1) && ( !defined(POLARSSL_MD5_C) || \ - !defined(POLARSSL_SHA1_C) ) -#error "POLARSSL_SSL_PROTO_TLS1_1 defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_SSL_PROTO_TLS1_2) && ( !defined(POLARSSL_SHA1_C) && \ - !defined(POLARSSL_SHA256_C) && !defined(POLARSSL_SHA512_C) ) -#error "POLARSSL_SSL_PROTO_TLS1_2 defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_SSL_CLI_C) && !defined(POLARSSL_SSL_TLS_C) -#error "POLARSSL_SSL_CLI_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_SSL_TLS_C) && ( !defined(POLARSSL_CIPHER_C) || \ - !defined(POLARSSL_MD_C) ) -#error "POLARSSL_SSL_TLS_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_SSL_SRV_C) && !defined(POLARSSL_SSL_TLS_C) -#error "POLARSSL_SSL_SRV_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_SSL_TLS_C) && (!defined(POLARSSL_SSL_PROTO_SSL3) && \ - !defined(POLARSSL_SSL_PROTO_TLS1) && !defined(POLARSSL_SSL_PROTO_TLS1_1) && \ - !defined(POLARSSL_SSL_PROTO_TLS1_2)) -#error "POLARSSL_SSL_TLS_C defined, but no protocols are active" -#endif - -#if defined(POLARSSL_SSL_TLS_C) && (defined(POLARSSL_SSL_PROTO_SSL3) && \ - defined(POLARSSL_SSL_PROTO_TLS1_1) && !defined(POLARSSL_SSL_PROTO_TLS1)) -#error "Illegal protocol selection" -#endif - -#if defined(POLARSSL_SSL_TLS_C) && (defined(POLARSSL_SSL_PROTO_TLS1) && \ - defined(POLARSSL_SSL_PROTO_TLS1_2) && !defined(POLARSSL_SSL_PROTO_TLS1_1)) -#error "Illegal protocol selection" -#endif - -#if defined(POLARSSL_SSL_TLS_C) && (defined(POLARSSL_SSL_PROTO_SSL3) && \ - defined(POLARSSL_SSL_PROTO_TLS1_2) && (!defined(POLARSSL_SSL_PROTO_TLS1) || \ - !defined(POLARSSL_SSL_PROTO_TLS1_1))) -#error "Illegal protocol selection" -#endif - -#if defined(POLARSSL_SSL_SESSION_TICKETS) && defined(POLARSSL_SSL_TLS_C) && \ - ( !defined(POLARSSL_AES_C) || !defined(POLARSSL_SHA256_C) || \ - !defined(POLARSSL_CIPHER_MODE_CBC) ) -#error "POLARSSL_SSL_SESSION_TICKETS_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_SSL_SERVER_NAME_INDICATION) && \ - !defined(POLARSSL_X509_CRT_PARSE_C) -#error "POLARSSL_SSL_SERVER_NAME_INDICATION defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_THREADING_PTHREAD) -#if !defined(POLARSSL_THREADING_C) || defined(POLARSSL_THREADING_IMPL) -#error "POLARSSL_THREADING_PTHREAD defined, but not all prerequisites" -#endif -#define POLARSSL_THREADING_IMPL -#endif - -#if defined(POLARSSL_THREADING_ALT) -#if !defined(POLARSSL_THREADING_C) || defined(POLARSSL_THREADING_IMPL) -#error "POLARSSL_THREADING_ALT defined, but not all prerequisites" -#endif -#define POLARSSL_THREADING_IMPL -#endif - -#if defined(POLARSSL_THREADING_C) && !defined(POLARSSL_THREADING_IMPL) -#error "POLARSSL_THREADING_C defined, single threading implementation required" -#endif -#undef POLARSSL_THREADING_IMPL - -#if defined(POLARSSL_VERSION_FEATURES) && !defined(POLARSSL_VERSION_C) -#error "POLARSSL_VERSION_FEATURES defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_X509_USE_C) && ( !defined(POLARSSL_BIGNUM_C) || \ - !defined(POLARSSL_OID_C) || !defined(POLARSSL_ASN1_PARSE_C) || \ - !defined(POLARSSL_PK_PARSE_C) ) -#error "POLARSSL_X509_USE_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_X509_CREATE_C) && ( !defined(POLARSSL_BIGNUM_C) || \ - !defined(POLARSSL_OID_C) || !defined(POLARSSL_ASN1_WRITE_C) || \ - !defined(POLARSSL_PK_WRITE_C) ) -#error "POLARSSL_X509_CREATE_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_X509_CRT_PARSE_C) && ( !defined(POLARSSL_X509_USE_C) ) -#error "POLARSSL_X509_CRT_PARSE_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_X509_CRL_PARSE_C) && ( !defined(POLARSSL_X509_USE_C) ) -#error "POLARSSL_X509_CRL_PARSE_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_X509_CSR_PARSE_C) && ( !defined(POLARSSL_X509_USE_C) ) -#error "POLARSSL_X509_CSR_PARSE_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_X509_CRT_WRITE_C) && ( !defined(POLARSSL_X509_CREATE_C) ) -#error "POLARSSL_X509_CRT_WRITE_C defined, but not all prerequisites" -#endif - -#if defined(POLARSSL_X509_CSR_WRITE_C) && ( !defined(POLARSSL_X509_CREATE_C) ) -#error "POLARSSL_X509_CSR_WRITE_C defined, but not all prerequisites" -#endif -/* -#if defined(POLARSSL_AES_C) || defined(POLARSSL_DES_C) -#if !defined(RTL_HW_CRYPTO) -#error "POLARSSL_AES_C or POLARSSL_DES_C defined, RTL_HW_CRYPTO required" -#endif -#endif -*/ -#if defined(SUPPORT_HW_SW_CRYPTO) && !defined(RTL_HW_CRYPTO) -#error "SUPPORT_HW_SW_CRYPTO defined, RTL_HW_CRYPTO required" -#endif - -#endif /* POLARSSL_CHECK_CONFIG_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/cipher.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/cipher.h deleted file mode 100644 index 087e590..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/cipher.h +++ /dev/null @@ -1,760 +0,0 @@ -/** - * \file cipher.h - * - * \brief Generic cipher wrapper. - * - * \author Adriaan de Jong - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef POLARSSL_CIPHER_H -#define POLARSSL_CIPHER_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_GCM_C) || defined(POLARSSL_CCM_C) -#define POLARSSL_CIPHER_MODE_AEAD -#endif - -#if defined(POLARSSL_CIPHER_MODE_CBC) -#define POLARSSL_CIPHER_MODE_WITH_PADDING -#endif - -#include - -#if defined(_MSC_VER) && !defined(inline) -#define inline _inline -#else -#if defined(__ARMCC_VERSION) && !defined(inline) -#define inline __inline -#endif /* __ARMCC_VERSION */ -#endif /*_MSC_VER */ - -#define POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE -0x6080 /**< The selected feature is not available. */ -#define POLARSSL_ERR_CIPHER_BAD_INPUT_DATA -0x6100 /**< Bad input parameters to function. */ -#define POLARSSL_ERR_CIPHER_ALLOC_FAILED -0x6180 /**< Failed to allocate memory. */ -#define POLARSSL_ERR_CIPHER_INVALID_PADDING -0x6200 /**< Input data contains invalid padding and is rejected. */ -#define POLARSSL_ERR_CIPHER_FULL_BLOCK_EXPECTED -0x6280 /**< Decryption of block requires a full block. */ -#define POLARSSL_ERR_CIPHER_AUTH_FAILED -0x6300 /**< Authentication failed (for AEAD modes). */ - -#define POLARSSL_CIPHER_VARIABLE_IV_LEN 0x01 /**< Cipher accepts IVs of variable length */ -#define POLARSSL_CIPHER_VARIABLE_KEY_LEN 0x02 /**< Cipher accepts keys of variable length */ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - POLARSSL_CIPHER_ID_NONE = 0, - POLARSSL_CIPHER_ID_NULL, - POLARSSL_CIPHER_ID_AES, - POLARSSL_CIPHER_ID_DES, - POLARSSL_CIPHER_ID_3DES, - POLARSSL_CIPHER_ID_CAMELLIA, - POLARSSL_CIPHER_ID_BLOWFISH, - POLARSSL_CIPHER_ID_ARC4, -} cipher_id_t; - -typedef enum { - POLARSSL_CIPHER_NONE = 0, - POLARSSL_CIPHER_NULL, - POLARSSL_CIPHER_AES_128_ECB, - POLARSSL_CIPHER_AES_192_ECB, - POLARSSL_CIPHER_AES_256_ECB, - POLARSSL_CIPHER_AES_128_CBC, - POLARSSL_CIPHER_AES_192_CBC, - POLARSSL_CIPHER_AES_256_CBC, - POLARSSL_CIPHER_AES_128_CFB128, - POLARSSL_CIPHER_AES_192_CFB128, - POLARSSL_CIPHER_AES_256_CFB128, - POLARSSL_CIPHER_AES_128_CTR, - POLARSSL_CIPHER_AES_192_CTR, - POLARSSL_CIPHER_AES_256_CTR, - POLARSSL_CIPHER_AES_128_GCM, - POLARSSL_CIPHER_AES_192_GCM, - POLARSSL_CIPHER_AES_256_GCM, - POLARSSL_CIPHER_CAMELLIA_128_ECB, - POLARSSL_CIPHER_CAMELLIA_192_ECB, - POLARSSL_CIPHER_CAMELLIA_256_ECB, - POLARSSL_CIPHER_CAMELLIA_128_CBC, - POLARSSL_CIPHER_CAMELLIA_192_CBC, - POLARSSL_CIPHER_CAMELLIA_256_CBC, - POLARSSL_CIPHER_CAMELLIA_128_CFB128, - POLARSSL_CIPHER_CAMELLIA_192_CFB128, - POLARSSL_CIPHER_CAMELLIA_256_CFB128, - POLARSSL_CIPHER_CAMELLIA_128_CTR, - POLARSSL_CIPHER_CAMELLIA_192_CTR, - POLARSSL_CIPHER_CAMELLIA_256_CTR, - POLARSSL_CIPHER_CAMELLIA_128_GCM, - POLARSSL_CIPHER_CAMELLIA_192_GCM, - POLARSSL_CIPHER_CAMELLIA_256_GCM, - POLARSSL_CIPHER_DES_ECB, - POLARSSL_CIPHER_DES_CBC, - POLARSSL_CIPHER_DES_EDE_ECB, - POLARSSL_CIPHER_DES_EDE_CBC, - POLARSSL_CIPHER_DES_EDE3_ECB, - POLARSSL_CIPHER_DES_EDE3_CBC, - POLARSSL_CIPHER_BLOWFISH_ECB, - POLARSSL_CIPHER_BLOWFISH_CBC, - POLARSSL_CIPHER_BLOWFISH_CFB64, - POLARSSL_CIPHER_BLOWFISH_CTR, - POLARSSL_CIPHER_ARC4_128, - POLARSSL_CIPHER_AES_128_CCM, - POLARSSL_CIPHER_AES_192_CCM, - POLARSSL_CIPHER_AES_256_CCM, - POLARSSL_CIPHER_CAMELLIA_128_CCM, - POLARSSL_CIPHER_CAMELLIA_192_CCM, - POLARSSL_CIPHER_CAMELLIA_256_CCM, -} cipher_type_t; - -typedef enum { - POLARSSL_MODE_NONE = 0, - POLARSSL_MODE_ECB, - POLARSSL_MODE_CBC, - POLARSSL_MODE_CFB, - POLARSSL_MODE_OFB, /* Unused! */ - POLARSSL_MODE_CTR, - POLARSSL_MODE_GCM, - POLARSSL_MODE_STREAM, - POLARSSL_MODE_CCM, -} cipher_mode_t; - -typedef enum { - POLARSSL_PADDING_PKCS7 = 0, /**< PKCS7 padding (default) */ - POLARSSL_PADDING_ONE_AND_ZEROS, /**< ISO/IEC 7816-4 padding */ - POLARSSL_PADDING_ZEROS_AND_LEN, /**< ANSI X.923 padding */ - POLARSSL_PADDING_ZEROS, /**< zero padding (not reversible!) */ - POLARSSL_PADDING_NONE, /**< never pad (full blocks only) */ -} cipher_padding_t; - -typedef enum { - POLARSSL_OPERATION_NONE = -1, - POLARSSL_DECRYPT = 0, - POLARSSL_ENCRYPT, -} operation_t; - -enum { - /** Undefined key length */ - POLARSSL_KEY_LENGTH_NONE = 0, - /** Key length, in bits (including parity), for DES keys */ - POLARSSL_KEY_LENGTH_DES = 64, - /** Key length, in bits (including parity), for DES in two key EDE */ - POLARSSL_KEY_LENGTH_DES_EDE = 128, - /** Key length, in bits (including parity), for DES in three-key EDE */ - POLARSSL_KEY_LENGTH_DES_EDE3 = 192, -}; - -/** Maximum length of any IV, in bytes */ -#define POLARSSL_MAX_IV_LENGTH 16 -/** Maximum block size of any cipher, in bytes */ -#define POLARSSL_MAX_BLOCK_LENGTH 16 - -/** - * Base cipher information. The non-mode specific functions and values. - */ -typedef struct { - - /** Base Cipher type (e.g. POLARSSL_CIPHER_ID_AES) */ - cipher_id_t cipher; - - /** Encrypt using ECB */ - int (*ecb_func)( void *ctx, operation_t mode, - const unsigned char *input, unsigned char *output ); - - /** Encrypt using CBC */ - int (*cbc_func)( void *ctx, operation_t mode, size_t length, - unsigned char *iv, const unsigned char *input, - unsigned char *output ); - - /** Encrypt using CFB (Full length) */ - int (*cfb_func)( void *ctx, operation_t mode, size_t length, size_t *iv_off, - unsigned char *iv, const unsigned char *input, - unsigned char *output ); - - /** Encrypt using CTR */ - int (*ctr_func)( void *ctx, size_t length, size_t *nc_off, - unsigned char *nonce_counter, unsigned char *stream_block, - const unsigned char *input, unsigned char *output ); - - /** Encrypt using STREAM */ - int (*stream_func)( void *ctx, size_t length, - const unsigned char *input, unsigned char *output ); - - /** Set key for encryption purposes */ - int (*setkey_enc_func)( void *ctx, const unsigned char *key, - unsigned int key_length ); - - /** Set key for decryption purposes */ - int (*setkey_dec_func)( void *ctx, const unsigned char *key, - unsigned int key_length); - - /** Allocate a new context */ - void * (*ctx_alloc_func)( void ); - - /** Free the given context */ - void (*ctx_free_func)( void *ctx ); - -} cipher_base_t; - -/** - * Cipher information. Allows cipher functions to be called in a generic way. - */ -typedef struct { - /** Full cipher identifier (e.g. POLARSSL_CIPHER_AES_256_CBC) */ - cipher_type_t type; - - /** Cipher mode (e.g. POLARSSL_MODE_CBC) */ - cipher_mode_t mode; - - /** Cipher key length, in bits (default length for variable sized ciphers) - * (Includes parity bits for ciphers like DES) */ - unsigned int key_length; - - /** Name of the cipher */ - const char * name; - - /** IV/NONCE size, in bytes. - * For cipher that accept many sizes: recommended size */ - unsigned int iv_size; - - /** Flags for variable IV size, variable key size, etc. */ - int flags; - - /** block size, in bytes */ - unsigned int block_size; - - /** Base cipher information and functions */ - const cipher_base_t *base; - -} cipher_info_t; - -/** - * Generic cipher context. - */ -typedef struct { - /** Information about the associated cipher */ - const cipher_info_t *cipher_info; - - /** Key length to use */ - int key_length; - - /** Operation that the context's key has been initialised for */ - operation_t operation; - - /** Padding functions to use, if relevant for cipher mode */ - void (*add_padding)( unsigned char *output, size_t olen, size_t data_len ); - int (*get_padding)( unsigned char *input, size_t ilen, size_t *data_len ); - - /** Buffer for data that hasn't been encrypted yet */ - unsigned char unprocessed_data[POLARSSL_MAX_BLOCK_LENGTH]; - - /** Number of bytes that still need processing */ - size_t unprocessed_len; - - /** Current IV or NONCE_COUNTER for CTR-mode */ - unsigned char iv[POLARSSL_MAX_IV_LENGTH]; - - /** IV size in bytes (for ciphers with variable-length IVs) */ - size_t iv_size; - - /** Cipher-specific context */ - void *cipher_ctx; -} cipher_context_t; - -/** - * \brief Returns the list of ciphers supported by the generic cipher module. - * - * \return a statically allocated array of ciphers, the last entry - * is 0. - */ -const int *cipher_list( void ); - -/** - * \brief Returns the cipher information structure associated - * with the given cipher name. - * - * \param cipher_name Name of the cipher to search for. - * - * \return the cipher information structure associated with the - * given cipher_name, or NULL if not found. - */ -const cipher_info_t *cipher_info_from_string( const char *cipher_name ); - -/** - * \brief Returns the cipher information structure associated - * with the given cipher type. - * - * \param cipher_type Type of the cipher to search for. - * - * \return the cipher information structure associated with the - * given cipher_type, or NULL if not found. - */ -const cipher_info_t *cipher_info_from_type( const cipher_type_t cipher_type ); - -/** - * \brief Returns the cipher information structure associated - * with the given cipher id, key size and mode. - * - * \param cipher_id Id of the cipher to search for - * (e.g. POLARSSL_CIPHER_ID_AES) - * \param key_length Length of the key in bits - * \param mode Cipher mode (e.g. POLARSSL_MODE_CBC) - * - * \return the cipher information structure associated with the - * given cipher_type, or NULL if not found. - */ -const cipher_info_t *cipher_info_from_values( const cipher_id_t cipher_id, - int key_length, - const cipher_mode_t mode ); - -/** - * \brief Initialize a cipher_context (as NONE) - */ -void cipher_init( cipher_context_t *ctx ); - -/** - * \brief Free and clear the cipher-specific context of ctx. - * Freeing ctx itself remains the responsibility of the - * caller. - */ -void cipher_free( cipher_context_t *ctx ); - -/** - * \brief Initialises and fills the cipher context structure with - * the appropriate values. - * - * \note Currently also clears structure. In future versions you - * will be required to call cipher_init() on the structure - * first. - * - * \param ctx context to initialise. May not be NULL. - * \param cipher_info cipher to use. - * - * \return 0 on success, - * POLARSSL_ERR_CIPHER_BAD_INPUT_DATA on parameter failure, - * POLARSSL_ERR_CIPHER_ALLOC_FAILED if allocation of the - * cipher-specific context failed. - */ -int cipher_init_ctx( cipher_context_t *ctx, const cipher_info_t *cipher_info ); - -/** - * \brief Free the cipher-specific context of ctx. Freeing ctx - * itself remains the responsibility of the caller. - * - * \note Deprecated: Redirects to cipher_free() - * - * \param ctx Free the cipher-specific context - * - * \returns 0 - */ -int cipher_free_ctx( cipher_context_t *ctx ); - -/** - * \brief Returns the block size of the given cipher. - * - * \param ctx cipher's context. Must have been initialised. - * - * \return size of the cipher's blocks, or 0 if ctx has not been - * initialised. - */ -static inline unsigned int cipher_get_block_size( const cipher_context_t *ctx ) -{ - if( NULL == ctx || NULL == ctx->cipher_info ) - return 0; - - return ctx->cipher_info->block_size; -} - -/** - * \brief Returns the mode of operation for the cipher. - * (e.g. POLARSSL_MODE_CBC) - * - * \param ctx cipher's context. Must have been initialised. - * - * \return mode of operation, or POLARSSL_MODE_NONE if ctx - * has not been initialised. - */ -static inline cipher_mode_t cipher_get_cipher_mode( const cipher_context_t *ctx ) -{ - if( NULL == ctx || NULL == ctx->cipher_info ) - return POLARSSL_MODE_NONE; - - return ctx->cipher_info->mode; -} - -/** - * \brief Returns the size of the cipher's IV/NONCE in bytes. - * - * \param ctx cipher's context. Must have been initialised. - * - * \return If IV has not been set yet: (recommended) IV size - * (0 for ciphers not using IV/NONCE). - * If IV has already been set: actual size. - */ -static inline int cipher_get_iv_size( const cipher_context_t *ctx ) -{ - if( NULL == ctx || NULL == ctx->cipher_info ) - return 0; - - if( ctx->iv_size != 0 ) - return (int) ctx->iv_size; - - return ctx->cipher_info->iv_size; -} - -/** - * \brief Returns the type of the given cipher. - * - * \param ctx cipher's context. Must have been initialised. - * - * \return type of the cipher, or POLARSSL_CIPHER_NONE if ctx has - * not been initialised. - */ -static inline cipher_type_t cipher_get_type( const cipher_context_t *ctx ) -{ - if( NULL == ctx || NULL == ctx->cipher_info ) - return POLARSSL_CIPHER_NONE; - - return ctx->cipher_info->type; -} - -/** - * \brief Returns the name of the given cipher, as a string. - * - * \param ctx cipher's context. Must have been initialised. - * - * \return name of the cipher, or NULL if ctx was not initialised. - */ -static inline const char *cipher_get_name( const cipher_context_t *ctx ) -{ - if( NULL == ctx || NULL == ctx->cipher_info ) - return 0; - - return ctx->cipher_info->name; -} - -/** - * \brief Returns the key length of the cipher. - * - * \param ctx cipher's context. Must have been initialised. - * - * \return cipher's key length, in bits, or - * POLARSSL_KEY_LENGTH_NONE if ctx has not been - * initialised. - */ -static inline int cipher_get_key_size ( const cipher_context_t *ctx ) -{ - if( NULL == ctx || NULL == ctx->cipher_info ) - return POLARSSL_KEY_LENGTH_NONE; - - return ctx->cipher_info->key_length; -} - -/** - * \brief Returns the operation of the given cipher. - * - * \param ctx cipher's context. Must have been initialised. - * - * \return operation (POLARSSL_ENCRYPT or POLARSSL_DECRYPT), - * or POLARSSL_OPERATION_NONE if ctx has not been - * initialised. - */ -static inline operation_t cipher_get_operation( const cipher_context_t *ctx ) -{ - if( NULL == ctx || NULL == ctx->cipher_info ) - return POLARSSL_OPERATION_NONE; - - return ctx->operation; -} - -/** - * \brief Set the key to use with the given context. - * - * \param ctx generic cipher context. May not be NULL. Must have been - * initialised using cipher_context_from_type or - * cipher_context_from_string. - * \param key The key to use. - * \param key_length key length to use, in bits. - * \param operation Operation that the key will be used for, either - * POLARSSL_ENCRYPT or POLARSSL_DECRYPT. - * - * \returns 0 on success, POLARSSL_ERR_CIPHER_BAD_INPUT_DATA if - * parameter verification fails or a cipher specific - * error code. - */ -int cipher_setkey( cipher_context_t *ctx, const unsigned char *key, - int key_length, const operation_t operation ); - -#if defined(POLARSSL_CIPHER_MODE_WITH_PADDING) -/** - * \brief Set padding mode, for cipher modes that use padding. - * (Default: PKCS7 padding.) - * - * \param ctx generic cipher context - * \param mode padding mode - * - * \returns 0 on success, POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE - * if selected padding mode is not supported, or - * POLARSSL_ERR_CIPHER_BAD_INPUT_DATA if the cipher mode - * does not support padding. - */ -int cipher_set_padding_mode( cipher_context_t *ctx, cipher_padding_t mode ); -#endif /* POLARSSL_CIPHER_MODE_WITH_PADDING */ - -/** - * \brief Set the initialization vector (IV) or nonce - * - * \param ctx generic cipher context - * \param iv IV to use (or NONCE_COUNTER for CTR-mode ciphers) - * \param iv_len IV length for ciphers with variable-size IV; - * discarded by ciphers with fixed-size IV. - * - * \returns 0 on success, or POLARSSL_ERR_CIPHER_BAD_INPUT_DATA - * - * \note Some ciphers don't use IVs nor NONCE. For these - * ciphers, this function has no effect. - */ -int cipher_set_iv( cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len ); - -/** - * \brief Finish preparation of the given context - * - * \param ctx generic cipher context - * - * \returns 0 on success, POLARSSL_ERR_CIPHER_BAD_INPUT_DATA - * if parameter verification fails. - */ -int cipher_reset( cipher_context_t *ctx ); - -#if defined(POLARSSL_GCM_C) -/** - * \brief Add additional data (for AEAD ciphers). - * Currently only supported with GCM. - * Must be called exactly once, after cipher_reset(). - * - * \param ctx generic cipher context - * \param ad Additional data to use. - * \param ad_len Length of ad. - * - * \return 0 on success, or a specific error code. - */ -int cipher_update_ad( cipher_context_t *ctx, - const unsigned char *ad, size_t ad_len ); -#endif /* POLARSSL_GCM_C */ - -/** - * \brief Generic cipher update function. Encrypts/decrypts - * using the given cipher context. Writes as many block - * size'd blocks of data as possible to output. Any data - * that cannot be written immediately will either be added - * to the next block, or flushed when cipher_final is - * called. - * Exception: for POLARSSL_MODE_ECB, expects single block - * in size (e.g. 16 bytes for AES) - * - * \param ctx generic cipher context - * \param input buffer holding the input data - * \param ilen length of the input data - * \param output buffer for the output data. Should be able to hold at - * least ilen + block_size. Cannot be the same buffer as - * input! - * \param olen length of the output data, will be filled with the - * actual number of bytes written. - * - * \returns 0 on success, POLARSSL_ERR_CIPHER_BAD_INPUT_DATA if - * parameter verification fails, - * POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE on an - * unsupported mode for a cipher or a cipher specific - * error code. - * - * \note If the underlying cipher is GCM, all calls to this - * function, except the last one before cipher_finish(), - * must have ilen a multiple of the block size. - */ -int cipher_update( cipher_context_t *ctx, const unsigned char *input, - size_t ilen, unsigned char *output, size_t *olen ); - -/** - * \brief Generic cipher finalisation function. If data still - * needs to be flushed from an incomplete block, data - * contained within it will be padded with the size of - * the last block, and written to the output buffer. - * - * \param ctx Generic cipher context - * \param output buffer to write data to. Needs block_size available. - * \param olen length of the data written to the output buffer. - * - * \returns 0 on success, POLARSSL_ERR_CIPHER_BAD_INPUT_DATA if - * parameter verification fails, - * POLARSSL_ERR_CIPHER_FULL_BLOCK_EXPECTED if decryption - * expected a full block but was not provided one, - * POLARSSL_ERR_CIPHER_INVALID_PADDING on invalid padding - * while decrypting or a cipher specific error code. - */ -int cipher_finish( cipher_context_t *ctx, - unsigned char *output, size_t *olen ); - -#if defined(POLARSSL_GCM_C) -/** - * \brief Write tag for AEAD ciphers. - * Currently only supported with GCM. - * Must be called after cipher_finish(). - * - * \param ctx Generic cipher context - * \param tag buffer to write the tag - * \param tag_len Length of the tag to write - * - * \return 0 on success, or a specific error code. - */ -int cipher_write_tag( cipher_context_t *ctx, - unsigned char *tag, size_t tag_len ); - -/** - * \brief Check tag for AEAD ciphers. - * Currently only supported with GCM. - * Must be called after cipher_finish(). - * - * \param ctx Generic cipher context - * \param tag Buffer holding the tag - * \param tag_len Length of the tag to check - * - * \return 0 on success, or a specific error code. - */ -int cipher_check_tag( cipher_context_t *ctx, - const unsigned char *tag, size_t tag_len ); -#endif /* POLARSSL_GCM_C */ - -/** - * \brief Generic all-in-one encryption/decryption - * (for all ciphers except AEAD constructs). - * - * \param ctx generic cipher context - * \param iv IV to use (or NONCE_COUNTER for CTR-mode ciphers) - * \param iv_len IV length for ciphers with variable-size IV; - * discarded by ciphers with fixed-size IV. - * \param input buffer holding the input data - * \param ilen length of the input data - * \param output buffer for the output data. Should be able to hold at - * least ilen + block_size. Cannot be the same buffer as - * input! - * \param olen length of the output data, will be filled with the - * actual number of bytes written. - * - * \note Some ciphers don't use IVs nor NONCE. For these - * ciphers, use iv = NULL and iv_len = 0. - * - * \returns 0 on success, or - * POLARSSL_ERR_CIPHER_BAD_INPUT_DATA, or - * POLARSSL_ERR_CIPHER_FULL_BLOCK_EXPECTED if decryption - * expected a full block but was not provided one, or - * POLARSSL_ERR_CIPHER_INVALID_PADDING on invalid padding - * while decrypting, or - * a cipher specific error code. - */ -int cipher_crypt( cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen ); - -#if defined(POLARSSL_CIPHER_MODE_AEAD) -/** - * \brief Generic autenticated encryption (AEAD ciphers). - * - * \param ctx generic cipher context - * \param iv IV to use (or NONCE_COUNTER for CTR-mode ciphers) - * \param iv_len IV length for ciphers with variable-size IV; - * discarded by ciphers with fixed-size IV. - * \param ad Additional data to authenticate. - * \param ad_len Length of ad. - * \param input buffer holding the input data - * \param ilen length of the input data - * \param output buffer for the output data. - * Should be able to hold at least ilen. - * \param olen length of the output data, will be filled with the - * actual number of bytes written. - * \param tag buffer for the authentication tag - * \param tag_len desired tag length - * - * \returns 0 on success, or - * POLARSSL_ERR_CIPHER_BAD_INPUT_DATA, or - * a cipher specific error code. - */ -int cipher_auth_encrypt( cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *ad, size_t ad_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, - unsigned char *tag, size_t tag_len ); - -/** - * \brief Generic autenticated decryption (AEAD ciphers). - * - * \param ctx generic cipher context - * \param iv IV to use (or NONCE_COUNTER for CTR-mode ciphers) - * \param iv_len IV length for ciphers with variable-size IV; - * discarded by ciphers with fixed-size IV. - * \param ad Additional data to be authenticated. - * \param ad_len Length of ad. - * \param input buffer holding the input data - * \param ilen length of the input data - * \param output buffer for the output data. - * Should be able to hold at least ilen. - * \param olen length of the output data, will be filled with the - * actual number of bytes written. - * \param tag buffer holding the authentication tag - * \param tag_len length of the authentication tag - * - * \returns 0 on success, or - * POLARSSL_ERR_CIPHER_BAD_INPUT_DATA, or - * POLARSSL_ERR_CIPHER_AUTH_FAILED if data isn't authentic, - * or a cipher specific error code. - * - * \note If the data is not authentic, then the output buffer - * is zeroed out to prevent the unauthentic plaintext to - * be used by mistake, making this interface safer. - */ -int cipher_auth_decrypt( cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *ad, size_t ad_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, - const unsigned char *tag, size_t tag_len ); -#endif /* POLARSSL_CIPHER_MODE_AEAD */ - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int cipher_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* POLARSSL_CIPHER_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/cipher_wrap.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/cipher_wrap.h deleted file mode 100644 index 46bc757..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/cipher_wrap.h +++ /dev/null @@ -1,57 +0,0 @@ -/** - * \file cipher_wrap.h - * - * \brief Cipher wrappers. - * - * \author Adriaan de Jong - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_CIPHER_WRAP_H -#define POLARSSL_CIPHER_WRAP_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif -#include "cipher.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct -{ - cipher_type_t type; - const cipher_info_t *info; -} cipher_definition_t; - -extern const cipher_definition_t cipher_definitions[]; - -extern int supported_ciphers[]; - -#ifdef __cplusplus -} -#endif - -#endif /* POLARSSL_CIPHER_WRAP_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/compat-1.2.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/compat-1.2.h deleted file mode 100644 index 15b5aa1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/compat-1.2.h +++ /dev/null @@ -1,389 +0,0 @@ -/** - * \file compat-1.2.h - * - * \brief Backwards compatibility header for PolarSSL-1.2 from PolarSSL-1.3 - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_COMPAT_1_2_H -#define POLARSSL_COMPAT_1_2_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -// Comment out to disable prototype change warnings -#define SHOW_PROTOTYPE_CHANGE_WARNINGS - -#if defined(_MSC_VER) && !defined(inline) -#define inline _inline -#else -#if defined(__ARMCC_VERSION) && !defined(inline) -#define inline __inline -#endif /* __ARMCC_VERSION */ -#endif /* _MSC_VER */ - -#if defined(_MSC_VER) -// MSVC does not support #warning -#undef SHOW_PROTOTYPE_CHANGE_WARNINGS -#endif - -#if defined(SHOW_PROTOTYPE_CHANGE_WARNINGS) -#warning "You can disable these warnings by commenting SHOW_PROTOTYPE_CHANGE_WARNINGS in compat-1.2.h" -#endif - -#if defined(POLARSSL_SHA256_C) -#define POLARSSL_SHA2_C -#include "sha256.h" - -/* - * SHA-2 -> SHA-256 - */ -typedef sha256_context sha2_context; - -static inline void sha2_starts( sha256_context *ctx, int is224 ) { - sha256_starts( ctx, is224 ); -} -static inline void sha2_update( sha256_context *ctx, const unsigned char *input, - size_t ilen ) { - sha256_update( ctx, input, ilen ); -} -static inline void sha2_finish( sha256_context *ctx, unsigned char output[32] ) { - sha256_finish( ctx, output ); -} -static inline int sha2_file( const char *path, unsigned char output[32], int is224 ) { - return sha256_file( path, output, is224 ); -} -static inline void sha2( const unsigned char *input, size_t ilen, - unsigned char output[32], int is224 ) { - sha256( input, ilen, output, is224 ); -} -static inline void sha2_hmac_starts( sha256_context *ctx, const unsigned char *key, - size_t keylen, int is224 ) { - sha256_hmac_starts( ctx, key, keylen, is224 ); -} -static inline void sha2_hmac_update( sha256_context *ctx, const unsigned char *input, size_t ilen ) { - sha256_hmac_update( ctx, input, ilen ); -} -static inline void sha2_hmac_finish( sha256_context *ctx, unsigned char output[32] ) { - sha256_hmac_finish( ctx, output ); -} -static inline void sha2_hmac_reset( sha256_context *ctx ) { - sha256_hmac_reset( ctx ); -} -static inline void sha2_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[32], int is224 ) { - sha256_hmac( key, keylen, input, ilen, output, is224 ); -} -static inline int sha2_self_test( int verbose ) { - return sha256_self_test( verbose ); -} -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) -#define POLARSSL_SHA4_C -#include "sha512.h" - -/* - * SHA-4 -> SHA-512 - */ -typedef sha512_context sha4_context; - -static inline void sha4_starts( sha512_context *ctx, int is384 ) { - sha512_starts( ctx, is384 ); -} -static inline void sha4_update( sha512_context *ctx, const unsigned char *input, - size_t ilen ) { - sha512_update( ctx, input, ilen ); -} -static inline void sha4_finish( sha512_context *ctx, unsigned char output[64] ) { - sha512_finish( ctx, output ); -} -static inline int sha4_file( const char *path, unsigned char output[64], int is384 ) { - return sha512_file( path, output, is384 ); -} -static inline void sha4( const unsigned char *input, size_t ilen, - unsigned char output[32], int is384 ) { - sha512( input, ilen, output, is384 ); -} -static inline void sha4_hmac_starts( sha512_context *ctx, const unsigned char *key, - size_t keylen, int is384 ) { - sha512_hmac_starts( ctx, key, keylen, is384 ); -} -static inline void sha4_hmac_update( sha512_context *ctx, const unsigned char *input, size_t ilen ) { - sha512_hmac_update( ctx, input, ilen ); -} -static inline void sha4_hmac_finish( sha512_context *ctx, unsigned char output[64] ) { - sha512_hmac_finish( ctx, output ); -} -static inline void sha4_hmac_reset( sha512_context *ctx ) { - sha512_hmac_reset( ctx ); -} -static inline void sha4_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[64], int is384 ) { - sha512_hmac( key, keylen, input, ilen, output, is384 ); -} -static inline int sha4_self_test( int verbose ) { - return sha512_self_test( verbose ); -} -#endif /* POLARSSL_SHA512_C */ - -#if defined(POLARSSL_CIPHER_C) -#if defined(SHOW_PROTOTYPE_CHANGE_WARNINGS) -#warning "cipher_reset() prototype changed. Manual change required if used" -#endif -#endif - -#if defined(POLARSSL_RSA_C) -#define SIG_RSA_RAW POLARSSL_MD_NONE -#define SIG_RSA_MD2 POLARSSL_MD_MD2 -#define SIG_RSA_MD4 POLARSSL_MD_MD4 -#define SIG_RSA_MD5 POLARSSL_MD_MD5 -#define SIG_RSA_SHA1 POLARSSL_MD_SHA1 -#define SIG_RSA_SHA224 POLARSSL_MD_SHA224 -#define SIG_RSA_SHA256 POLARSSL_MD_SHA256 -#define SIG_RSA_SHA384 POLARSSL_MD_SHA384 -#define SIG_RSA_SHA512 POLARSSL_MD_SHA512 -#if defined(SHOW_PROTOTYPE_CHANGE_WARNINGS) -#warning "rsa_pkcs1_verify() prototype changed. Manual change required if used" -#warning "rsa_pkcs1_decrypt() prototype changed. Manual change required if used" -#endif -#endif /* POLARSSL_RSA_C */ - -#if defined(POLARSSL_DHM_C) -#if defined(SHOW_PROTOTYPE_CHANGE_WARNINGS) -#warning "dhm_calc_secret() prototype changed. Manual change required if used" -#endif -#endif - -#if defined(POLARSSL_GCM_C) -#if defined(SHOW_PROTOTYPE_CHANGE_WARNINGS) -#warning "gcm_init() prototype changed. Manual change required if used" -#endif -#endif - -#if defined(POLARSSL_SSL_CLI_C) -#if defined(SHOW_PROTOTYPE_CHANGE_WARNINGS) -#warning "ssl_set_own_cert() prototype changed. Change to ssl_set_own_cert_rsa(). Manual change required if used" -#endif -#endif - -#if defined(POLARSSL_X509_USE_C) || defined(POLARSSL_X509_CREATE_C) -#include "x509.h" - -#define POLARSSL_ERR_X509_CERT_INVALID_FORMAT POLARSSL_ERR_X509_INVALID_FORMAT -#define POLARSSL_ERR_X509_CERT_INVALID_VERSION POLARSSL_ERR_X509_INVALID_VERSION -#define POLARSSL_ERR_X509_CERT_INVALID_ALG POLARSSL_ERR_X509_INVALID_ALG -#define POLARSSL_ERR_X509_CERT_UNKNOWN_SIG_ALG POLARSSL_ERR_X509_UNKNOWN_SIG_ALG -#define POLARSSL_ERR_X509_CERT_INVALID_NAME POLARSSL_ERR_X509_INVALID_NAME -#define POLARSSL_ERR_X509_CERT_INVALID_DATE POLARSSL_ERR_X509_INVALID_DATE -#define POLARSSL_ERR_X509_CERT_INVALID_EXTENSIONS POLARSSL_ERR_X509_INVALID_EXTENSIONS -#define POLARSSL_ERR_X509_CERT_SIG_MISMATCH POLARSSL_ERR_X509_SIG_MISMATCH -#define POLARSSL_ERR_X509_CERT_INVALID_SIGNATURE POLARSSL_ERR_X509_INVALID_SIGNATURE -#define POLARSSL_ERR_X509_CERT_INVALID_SERIAL POLARSSL_ERR_X509_INVALID_SERIAL -#define POLARSSL_ERR_X509_CERT_UNKNOWN_VERSION POLARSSL_ERR_X509_UNKNOWN_VERSION - -static inline int x509parse_serial_gets( char *buf, size_t size, const x509_buf *serial ) { - return x509_serial_gets( buf, size, serial ); -} -static inline int x509parse_dn_gets( char *buf, size_t size, const x509_name *dn ) { - return x509_dn_gets( buf, size, dn ); -} -static inline int x509parse_time_expired( const x509_time *time ) { - return x509_time_expired( time ); -} -#endif /* POLARSSL_X509_USE_C || POLARSSL_X509_CREATE_C */ - -#if defined(POLARSSL_X509_CRT_PARSE_C) -#define POLARSSL_X509_PARSE_C -#include "x509_crt.h" -typedef x509_crt x509_cert; - -static inline int x509parse_crt_der( x509_cert *chain, const unsigned char *buf, - size_t buflen ) { - return x509_crt_parse_der( chain, buf, buflen ); -} -static inline int x509parse_crt( x509_cert *chain, const unsigned char *buf, size_t buflen ) { - return x509_crt_parse( chain, buf, buflen ); -} -static inline int x509parse_crtfile( x509_cert *chain, const char *path ) { - return x509_crt_parse_file( chain, path ); -} -static inline int x509parse_crtpath( x509_cert *chain, const char *path ) { - return x509_crt_parse_path( chain, path ); -} -static inline int x509parse_cert_info( char *buf, size_t size, const char *prefix, - const x509_cert *crt ) { - return x509_crt_info( buf, size, prefix, crt ); -} -static inline int x509parse_verify( x509_cert *crt, x509_cert *trust_ca, - x509_crl *ca_crl, const char *cn, int *flags, - int (*f_vrfy)(void *, x509_cert *, int, int *), - void *p_vrfy ) { - return x509_crt_verify( crt, trust_ca, ca_crl, cn, flags, f_vrfy, p_vrfy ); -} -static inline int x509parse_revoked( const x509_cert *crt, const x509_crl *crl ) { - return x509_crt_revoked( crt, crl ); -} -static inline void x509_free( x509_cert *crt ) { - x509_crt_free( crt ); -} -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -#if defined(POLARSSL_X509_CRL_PARSE_C) -#define POLARSSL_X509_PARSE_C -#include "x509_crl.h" -static inline int x509parse_crl( x509_crl *chain, const unsigned char *buf, size_t buflen ) { - return x509_crl_parse( chain, buf, buflen ); -} -static inline int x509parse_crlfile( x509_crl *chain, const char *path ) { - return x509_crl_parse_file( chain, path ); -} -static inline int x509parse_crl_info( char *buf, size_t size, const char *prefix, - const x509_crl *crl ) { - return x509_crl_info( buf, size, prefix, crl ); -} -#endif /* POLARSSL_X509_CRL_PARSE_C */ - -#if defined(POLARSSL_X509_CSR_PARSE_C) -#define POLARSSL_X509_PARSE_C -#include "x509_csr.h" -static inline int x509parse_csr( x509_csr *csr, const unsigned char *buf, size_t buflen ) { - return x509_csr_parse( csr, buf, buflen ); -} -static inline int x509parse_csrfile( x509_csr *csr, const char *path ) { - return x509_csr_parse_file( csr, path ); -} -static inline int x509parse_csr_info( char *buf, size_t size, const char *prefix, - const x509_csr *csr ) { - return x509_csr_info( buf, size, prefix, csr ); -} -#endif /* POLARSSL_X509_CSR_PARSE_C */ - -#if defined(POLARSSL_SSL_TLS_C) -#include "ssl_ciphersuites.h" - -#define ssl_default_ciphersuites ssl_list_ciphersuites() -#endif - -#if defined(POLARSSL_PK_PARSE_C) && defined(POLARSSL_RSA_C) -#include "rsa.h" -#include "pk.h" - -#define POLARSSL_ERR_X509_PASSWORD_MISMATCH POLARSSL_ERR_PK_PASSWORD_MISMATCH -#define POLARSSL_ERR_X509_KEY_INVALID_FORMAT POLARSSL_ERR_PK_KEY_INVALID_FORMAT -#define POLARSSL_ERR_X509_UNKNOWN_PK_ALG POLARSSL_ERR_PK_UNKNOWN_PK_ALG -#define POLARSSL_ERR_X509_CERT_INVALID_PUBKEY POLARSSL_ERR_PK_INVALID_PUBKEY - -#if defined(POLARSSL_FS_IO) -static inline int x509parse_keyfile( rsa_context *rsa, const char *path, - const char *pwd ) { - int ret; - pk_context pk; - pk_init( &pk ); - ret = pk_parse_keyfile( &pk, path, pwd ); - if( ret == 0 && ! pk_can_do( &pk, POLARSSL_PK_RSA ) ) - ret = POLARSSL_ERR_PK_TYPE_MISMATCH; - if( ret == 0 ) - rsa_copy( rsa, pk_rsa( pk ) ); - else - rsa_free( rsa ); - pk_free( &pk ); - return( ret ); -} -static inline int x509parse_public_keyfile( rsa_context *rsa, const char *path ) { - int ret; - pk_context pk; - pk_init( &pk ); - ret = pk_parse_public_keyfile( &pk, path ); - if( ret == 0 && ! pk_can_do( &pk, POLARSSL_PK_RSA ) ) - ret = POLARSSL_ERR_PK_TYPE_MISMATCH; - if( ret == 0 ) - rsa_copy( rsa, pk_rsa( pk ) ); - else - rsa_free( rsa ); - pk_free( &pk ); - return( ret ); -} -#endif /* POLARSSL_FS_IO */ - -static inline int x509parse_key( rsa_context *rsa, const unsigned char *key, - size_t keylen, - const unsigned char *pwd, size_t pwdlen ) { - int ret; - pk_context pk; - pk_init( &pk ); - ret = pk_parse_key( &pk, key, keylen, pwd, pwdlen ); - if( ret == 0 && ! pk_can_do( &pk, POLARSSL_PK_RSA ) ) - ret = POLARSSL_ERR_PK_TYPE_MISMATCH; - if( ret == 0 ) - rsa_copy( rsa, pk_rsa( pk ) ); - else - rsa_free( rsa ); - pk_free( &pk ); - return( ret ); -} - -static inline int x509parse_public_key( rsa_context *rsa, - const unsigned char *key, size_t keylen ) -{ - int ret; - pk_context pk; - pk_init( &pk ); - ret = pk_parse_public_key( &pk, key, keylen ); - if( ret == 0 && ! pk_can_do( &pk, POLARSSL_PK_RSA ) ) - ret = POLARSSL_ERR_PK_TYPE_MISMATCH; - if( ret == 0 ) - rsa_copy( rsa, pk_rsa( pk ) ); - else - rsa_free( rsa ); - pk_free( &pk ); - return( ret ); -} -#endif /* POLARSSL_PK_PARSE_C && POLARSSL_RSA_C */ - -#if defined(POLARSSL_PK_WRITE_C) && defined(POLARSSL_RSA_C) -#include "pk.h" -static inline int x509_write_pubkey_der( unsigned char *buf, size_t len, rsa_context *rsa ) { - int ret; - pk_context ctx; - if( ( ret = pk_init_ctx( &ctx, pk_info_from_type( POLARSSL_PK_RSA ) ) ) != 0 ) return( ret ); - if( ( ret = rsa_copy( pk_rsa( ctx ), rsa ) ) != 0 ) return( ret ); - ret = pk_write_pubkey_der( &ctx, buf, len ); - pk_free( &ctx ); - return( ret ); -} -static inline int x509_write_key_der( unsigned char *buf, size_t len, rsa_context *rsa ) { - int ret; - pk_context ctx; - if( ( ret = pk_init_ctx( &ctx, pk_info_from_type( POLARSSL_PK_RSA ) ) ) != 0 ) return( ret ); - if( ( ret = rsa_copy( pk_rsa( ctx ), rsa ) ) != 0 ) return( ret ); - ret = pk_write_key_der( &ctx, buf, len ); - pk_free( &ctx ); - return( ret ); -} -#endif /* POLARSSL_PK_WRITE_C && POLARSSL_RSA_C */ -#endif /* compat-1.2.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config.h deleted file mode 100644 index b29e3b8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config.h +++ /dev/null @@ -1,23 +0,0 @@ -#define CONFIG_PROJECT_CUSTOM 0 -#define CONFIG_SSL_RSA 1 - -#if (defined CONFIG_PLATFORM_8195A) || (defined CONFIG_PLATFORM_8711B) -#include "section_config.h" -#include "rom_ssl_ram_map.h" -#define RTL_HW_CRYPTO -#define SUPPORT_HW_SW_CRYPTO -#endif - -#if defined (CONFIG_SSL_ROM) //define in ROM makefile -#include "polarssl/ssl_rom_lib.h" -#include "polarssl/config_rom.h" -#elif CONFIG_PROJECT_CUSTOM -#include "platform_stdlib.h" -#include "ssl_config.h" -#elif CONFIG_SSL_RSA -#include "platform_stdlib.h" -#include "polarssl/config_rsa.h" -#else -#include "platform_stdlib.h" -#include "polarssl/config_all.h" -#endif /* CONFIG_SSL_ROM */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config_all.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config_all.h deleted file mode 100644 index 5376221..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config_all.h +++ /dev/null @@ -1,2184 +0,0 @@ -/** - * \file config.h - * - * \brief Configuration options (set of defines) - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * This set of compile-time options may be used to enable - * or disable features selectively, and reduce the global - * memory footprint. - */ -#ifndef POLARSSL_CONFIG_H -#define POLARSSL_CONFIG_H - -#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) -#define _CRT_SECURE_NO_DEPRECATE 1 -#endif - -/** - * \name SECTION: System support - * - * This section sets system specific settings. - * \{ - */ - -/** - * \def POLARSSL_HAVE_INT8 - * - * The system uses 8-bit wide native integers. - * - * Uncomment if native integers are 8-bit wide. - */ -//#define POLARSSL_HAVE_INT8 - -/** - * \def POLARSSL_HAVE_INT16 - * - * The system uses 16-bit wide native integers. - * - * Uncomment if native integers are 16-bit wide. - */ -//#define POLARSSL_HAVE_INT16 - -/** - * \def POLARSSL_HAVE_LONGLONG - * - * The compiler supports the 'long long' type. - * (Only used on 32-bit platforms) - */ -#define POLARSSL_HAVE_LONGLONG - -/** - * \def POLARSSL_HAVE_ASM - * - * The compiler has support for asm(). - * - * Requires support for asm() in compiler. - * - * Used in: - * library/timing.c - * library/padlock.c - * include/polarssl/bn_mul.h - * - * Comment to disable the use of assembly code. - */ -//#define POLARSSL_HAVE_ASM - -/** - * \def POLARSSL_HAVE_SSE2 - * - * CPU supports SSE2 instruction set. - * - * Uncomment if the CPU supports SSE2 (IA-32 specific). - */ -//#define POLARSSL_HAVE_SSE2 - -/** - * \def POLARSSL_HAVE_TIME - * - * System has time.h and time() / localtime() / gettimeofday(). - * - * Comment if your system does not support time functions - */ -//#define POLARSSL_HAVE_TIME - -/** - * \def POLARSSL_HAVE_IPV6 - * - * System supports the basic socket interface for IPv6 (RFC 3493), - * specifically getaddrinfo(), freeaddrinfo() and struct sockaddr_storage. - * - * Note: on Windows/MingW, XP or higher is required. - * - * Comment if your system does not support the IPv6 socket interface - */ -//#define POLARSSL_HAVE_IPV6 - -/** - * \def POLARSSL_PLATFORM_MEMORY - * - * Enable the memory allocation layer. - * - * By default PolarSSL uses the system-provided malloc() and free(). - * This allows different allocators (self-implemented or provided) to be - * provided to the platform abstraction layer. - * - * Enabling POLARSSL_PLATFORM_MEMORY will provide "platform_set_malloc_free()" - * to allow you to set an alternative malloc() and free() function pointer. - * - * Requires: POLARSSL_PLATFORM_C - * - * Enable this layer to allow use of alternative memory allocators. - */ -//#define POLARSSL_PLATFORM_MEMORY - -/** - * \def POLARSSL_PLATFORM_NO_STD_FUNCTIONS - * - * Do not assign standard functions in the platform layer (e.g. malloc() to - * POLARSSL_PLATFORM_STD_MALLOC and printf() to POLARSSL_PLATFORM_STD_PRINTF) - * - * This makes sure there are no linking errors on platforms that do not support - * these functions. You will HAVE to provide alternatives, either at runtime - * via the platform_set_xxx() functions or at compile time by setting - * the POLARSSL_PLATFORM_STD_XXX defines. - * - * Requires: POLARSSL_PLATFORM_C - * - * Uncomment to prevent default assignment of standard functions in the - * platform layer. - */ -//#define POLARSSL_PLATFORM_NO_STD_FUNCTIONS - -/** - * \def POLARSSL_PLATFORM_XXX_ALT - * - * Uncomment a macro to let PolarSSL support the function in the platform - * abstraction layer. - * - * Example: In case you uncomment POLARSSL_PLATFORM_PRINTF_ALT, PolarSSL will - * provide a function "platform_set_printf()" that allows you to set an - * alternative printf function pointer. - * - * All these define require POLARSSL_PLATFORM_C to be defined! - * - * Uncomment a macro to enable alternate implementation of specific base - * platform function - */ -//#define POLARSSL_PLATFORM_PRINTF_ALT -//#define POLARSSL_PLATFORM_FPRINTF_ALT -/* \} name SECTION: System support */ - -/** - * \name SECTION: PolarSSL feature support - * - * This section sets support for features that are or are not needed - * within the modules that are enabled. - * \{ - */ - -/** - * \def POLARSSL_TIMING_ALT - * - * Uncomment to provide your own alternate implementation for hardclock(), - * get_timer(), set_alarm() and m_sleep(). - * - * Only works if you have POLARSSL_TIMING_C enabled. - * - * You will need to provide a header "timing_alt.h" and an implementation at - * compile time. - */ -//#define POLARSSL_TIMING_ALT - -/** - * \def POLARSSL_XXX_ALT - * - * Uncomment a macro to let PolarSSL use your alternate core implementation of - * a symmetric or hash algorithm (e.g. platform specific assembly optimized - * implementations). Keep in mind that the function prototypes should remain - * the same. - * - * Example: In case you uncomment POLARSSL_AES_ALT, PolarSSL will no longer - * provide the "struct aes_context" definition and omit the base function - * declarations and implementations. "aes_alt.h" will be included from - * "aes.h" to include the new function definitions. - * - * Uncomment a macro to enable alternate implementation for core algorithm - * functions - */ -//#define POLARSSL_AES_ALT -//#define POLARSSL_ARC4_ALT -//#define POLARSSL_BLOWFISH_ALT -//#define POLARSSL_CAMELLIA_ALT -//#define POLARSSL_DES_ALT -//#define POLARSSL_XTEA_ALT -//#define POLARSSL_MD2_ALT -//#define POLARSSL_MD4_ALT -//#define POLARSSL_MD5_ALT -//#define POLARSSL_RIPEMD160_ALT -//#define POLARSSL_SHA1_ALT -//#define POLARSSL_SHA256_ALT -//#define POLARSSL_SHA512_ALT - -/** - * \def POLARSSL_AES_ROM_TABLES - * - * Store the AES tables in ROM. - * - * Uncomment this macro to store the AES tables in ROM. - * - */ -#define POLARSSL_AES_ROM_TABLES - -/** - * \def POLARSSL_CIPHER_MODE_CBC - * - * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. - */ -#define POLARSSL_CIPHER_MODE_CBC - -/** - * \def POLARSSL_CIPHER_MODE_CFB - * - * Enable Cipher Feedback mode (CFB) for symmetric ciphers. - */ -#define POLARSSL_CIPHER_MODE_CFB - -/** - * \def POLARSSL_CIPHER_MODE_CTR - * - * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. - */ -#define POLARSSL_CIPHER_MODE_CTR - -/** - * \def POLARSSL_CIPHER_NULL_CIPHER - * - * Enable NULL cipher. - * Warning: Only do so when you know what you are doing. This allows for - * encryption or channels without any security! - * - * Requires POLARSSL_ENABLE_WEAK_CIPHERSUITES as well to enable - * the following ciphersuites: - * TLS_ECDH_ECDSA_WITH_NULL_SHA - * TLS_ECDH_RSA_WITH_NULL_SHA - * TLS_ECDHE_ECDSA_WITH_NULL_SHA - * TLS_ECDHE_RSA_WITH_NULL_SHA - * TLS_ECDHE_PSK_WITH_NULL_SHA384 - * TLS_ECDHE_PSK_WITH_NULL_SHA256 - * TLS_ECDHE_PSK_WITH_NULL_SHA - * TLS_DHE_PSK_WITH_NULL_SHA384 - * TLS_DHE_PSK_WITH_NULL_SHA256 - * TLS_DHE_PSK_WITH_NULL_SHA - * TLS_RSA_WITH_NULL_SHA256 - * TLS_RSA_WITH_NULL_SHA - * TLS_RSA_WITH_NULL_MD5 - * TLS_RSA_PSK_WITH_NULL_SHA384 - * TLS_RSA_PSK_WITH_NULL_SHA256 - * TLS_RSA_PSK_WITH_NULL_SHA - * TLS_PSK_WITH_NULL_SHA384 - * TLS_PSK_WITH_NULL_SHA256 - * TLS_PSK_WITH_NULL_SHA - * - * Uncomment this macro to enable the NULL cipher and ciphersuites - */ -//#define POLARSSL_CIPHER_NULL_CIPHER - -/** - * \def POLARSSL_CIPHER_PADDING_XXX - * - * Uncomment or comment macros to add support for specific padding modes - * in the cipher layer with cipher modes that support padding (e.g. CBC) - * - * If you disable all padding modes, only full blocks can be used with CBC. - * - * Enable padding modes in the cipher layer. - */ -#define POLARSSL_CIPHER_PADDING_PKCS7 -#define POLARSSL_CIPHER_PADDING_ONE_AND_ZEROS -#define POLARSSL_CIPHER_PADDING_ZEROS_AND_LEN -#define POLARSSL_CIPHER_PADDING_ZEROS - -/** - * \def POLARSSL_ENABLE_WEAK_CIPHERSUITES - * - * Enable weak ciphersuites in SSL / TLS. - * Warning: Only do so when you know what you are doing. This allows for - * channels with virtually no security at all! - * - * This enables the following ciphersuites: - * TLS_RSA_WITH_DES_CBC_SHA - * TLS_DHE_RSA_WITH_DES_CBC_SHA - * - * Uncomment this macro to enable weak ciphersuites - */ -//#define POLARSSL_ENABLE_WEAK_CIPHERSUITES - -/** - * \def POLARSSL_REMOVE_ARC4_CIPHERSUITES - * - * Remove RC4 ciphersuites by default in SSL / TLS. - * This flag removes the ciphersuites based on RC4 from the default list as - * returned by ssl_list_ciphersuites(). However, it is still possible to - * enable (some of) them with ssl_set_ciphersuites() by including them - * explicitly. - * - * Uncomment this macro to remove RC4 ciphersuites by default. - */ -//#define POLARSSL_REMOVE_ARC4_CIPHERSUITES - -/** - * \def POLARSSL_ECP_XXXX_ENABLED - * - * Enables specific curves within the Elliptic Curve module. - * By default all supported curves are enabled. - * - * Comment macros to disable the curve and functions for it - */ -#define POLARSSL_ECP_DP_SECP192R1_ENABLED -#define POLARSSL_ECP_DP_SECP224R1_ENABLED -#define POLARSSL_ECP_DP_SECP256R1_ENABLED -#define POLARSSL_ECP_DP_SECP384R1_ENABLED -#define POLARSSL_ECP_DP_SECP521R1_ENABLED -#define POLARSSL_ECP_DP_SECP192K1_ENABLED -#define POLARSSL_ECP_DP_SECP224K1_ENABLED -#define POLARSSL_ECP_DP_SECP256K1_ENABLED -#define POLARSSL_ECP_DP_BP256R1_ENABLED -#define POLARSSL_ECP_DP_BP384R1_ENABLED -#define POLARSSL_ECP_DP_BP512R1_ENABLED -//#define POLARSSL_ECP_DP_M221_ENABLED // Not implemented yet! -#define POLARSSL_ECP_DP_M255_ENABLED -//#define POLARSSL_ECP_DP_M383_ENABLED // Not implemented yet! -//#define POLARSSL_ECP_DP_M511_ENABLED // Not implemented yet! - -/** - * \def POLARSSL_ECP_NIST_OPTIM - * - * Enable specific 'modulo p' routines for each NIST prime. - * Depending on the prime and architecture, makes operations 4 to 8 times - * faster on the corresponding curve. - * - * Comment this macro to disable NIST curves optimisation. - */ -#define POLARSSL_ECP_NIST_OPTIM - -/** - * \def POLARSSL_ECDSA_DETERMINISTIC - * - * Enable deterministic ECDSA (RFC 6979). - * Standard ECDSA is "fragile" in the sense that lack of entropy when signing - * may result in a compromise of the long-term signing key. This is avoided by - * the deterministic variant. - * - * Requires: POLARSSL_HMAC_DRBG_C - * - * Comment this macro to disable deterministic ECDSA. - */ -#define POLARSSL_ECDSA_DETERMINISTIC - -/** - * \def POLARSSL_KEY_EXCHANGE_PSK_ENABLED - * - * Enable the PSK based ciphersuite modes in SSL / TLS. - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_PSK_WITH_AES_256_GCM_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA - * TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_PSK_WITH_AES_128_GCM_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA - * TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_PSK_WITH_RC4_128_SHA - */ -#define POLARSSL_KEY_EXCHANGE_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED - * - * Enable the DHE-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_DHM_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA - * TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA - * TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_DHE_PSK_WITH_RC4_128_SHA - */ -#define POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED - * - * Enable the ECDHE-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA - * TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA - * TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_PSK_WITH_RC4_128_SHA - */ -#define POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED - * - * Enable the RSA-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA - * TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA - * TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_PSK_WITH_RC4_128_SHA - */ -#define POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_RSA_ENABLED - * - * Enable the RSA-only based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_RSA_WITH_AES_256_GCM_SHA384 - * TLS_RSA_WITH_AES_256_CBC_SHA256 - * TLS_RSA_WITH_AES_256_CBC_SHA - * TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_RSA_WITH_AES_128_GCM_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA - * TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_WITH_RC4_128_SHA - * TLS_RSA_WITH_RC4_128_MD5 - */ -#define POLARSSL_KEY_EXCHANGE_RSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED - * - * Enable the DHE-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_DHM_C, POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA - * TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA - * TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - */ -#define POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED - * - * Enable the ECDHE-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_RSA_WITH_RC4_128_SHA - */ -#define POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED - * - * Enable the ECDHE-ECDSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_ECDSA_C, POLARSSL_X509_CRT_PARSE_C, - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - */ -#define POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED - * - * Enable the ECDH-ECDSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_RC4_128_SHA - * TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - */ -#define POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED - * - * Enable the ECDH-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_RSA_WITH_RC4_128_SHA - * TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 - */ -#define POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED - -/** - * \def POLARSSL_PK_PARSE_EC_EXTENDED - * - * Enhance support for reading EC keys using variants of SEC1 not allowed by - * RFC 5915 and RFC 5480. - * - * Currently this means parsing the SpecifiedECDomain choice of EC - * parameters (only known groups are supported, not arbitrary domains, to - * avoid validation issues). - * - * Disable if you only need to support RFC 5915 + 5480 key formats. - */ -#define POLARSSL_PK_PARSE_EC_EXTENDED - -/** - * \def POLARSSL_ERROR_STRERROR_BC - * - * Make available the backward compatible error_strerror() next to the - * current polarssl_strerror(). - * - * For new code, it is recommended to use polarssl_strerror() instead and - * disable this. - * - * Disable if you run into name conflicts and want to really remove the - * error_strerror() - */ -#define POLARSSL_ERROR_STRERROR_BC - -/** - * \def POLARSSL_ERROR_STRERROR_DUMMY - * - * Enable a dummy error function to make use of polarssl_strerror() in - * third party libraries easier when POLARSSL_ERROR_C is disabled - * (no effect when POLARSSL_ERROR_C is enabled). - * - * You can safely disable this if POLARSSL_ERROR_C is enabled, or if you're - * not using polarssl_strerror() or error_strerror() in your application. - * - * Disable if you run into name conflicts and want to really remove the - * polarssl_strerror() - */ -#define POLARSSL_ERROR_STRERROR_DUMMY - -/** - * \def POLARSSL_GENPRIME - * - * Enable the prime-number generation code. - * - * Requires: POLARSSL_BIGNUM_C - */ -#define POLARSSL_GENPRIME - -/** - * \def POLARSSL_FS_IO - * - * Enable functions that use the filesystem. - */ -//#define POLARSSL_FS_IO - -/** - * \def POLARSSL_NO_DEFAULT_ENTROPY_SOURCES - * - * Do not add default entropy sources. These are the platform specific, - * hardclock and HAVEGE based poll functions. - * - * This is useful to have more control over the added entropy sources in an - * application. - * - * Uncomment this macro to prevent loading of default entropy functions. - */ -//#define POLARSSL_NO_DEFAULT_ENTROPY_SOURCES - -/** - * \def POLARSSL_NO_PLATFORM_ENTROPY - * - * Do not use built-in platform entropy functions. - * This is useful if your platform does not support - * standards like the /dev/urandom or Windows CryptoAPI. - * - * Uncomment this macro to disable the built-in platform entropy functions. - */ -//#define POLARSSL_NO_PLATFORM_ENTROPY - -/** - * \def POLARSSL_ENTROPY_FORCE_SHA256 - * - * Force the entropy accumulator to use a SHA-256 accumulator instead of the - * default SHA-512 based one (if both are available). - * - * Requires: POLARSSL_SHA256_C - * - * On 32-bit systems SHA-256 can be much faster than SHA-512. Use this option - * if you have performance concerns. - * - * This option is only useful if both POLARSSL_SHA256_C and - * POLARSSL_SHA512_C are defined. Otherwise the available hash module is used. - */ -//#define POLARSSL_ENTROPY_FORCE_SHA256 - -/** - * \def POLARSSL_MEMORY_DEBUG - * - * Enable debugging of buffer allocator memory issues. Automatically prints - * (to stderr) all (fatal) messages on memory allocation issues. Enables - * function for 'debug output' of allocated memory. - * - * Requires: POLARSSL_MEMORY_BUFFER_ALLOC_C - * - * Uncomment this macro to let the buffer allocator print out error messages. - */ -//#define POLARSSL_MEMORY_DEBUG - -/** - * \def POLARSSL_MEMORY_BACKTRACE - * - * Include backtrace information with each allocated block. - * - * Requires: POLARSSL_MEMORY_BUFFER_ALLOC_C - * GLIBC-compatible backtrace() an backtrace_symbols() support - * - * Uncomment this macro to include backtrace information - */ -//#define POLARSSL_MEMORY_BACKTRACE - -/** - * \def POLARSSL_PKCS1_V15 - * - * Enable support for PKCS#1 v1.5 encoding. - * - * Requires: POLARSSL_RSA_C - * - * This enables support for PKCS#1 v1.5 operations. - */ -#define POLARSSL_PKCS1_V15 - -/** - * \def POLARSSL_PKCS1_V21 - * - * Enable support for PKCS#1 v2.1 encoding. - * - * Requires: POLARSSL_MD_C, POLARSSL_RSA_C - * - * This enables support for RSAES-OAEP and RSASSA-PSS operations. - */ -#define POLARSSL_PKCS1_V21 - -/** - * \def POLARSSL_RSA_NO_CRT - * - * Do not use the Chinese Remainder Theorem for the RSA private operation. - * - * Uncomment this macro to disable the use of CRT in RSA. - * - */ -//#define POLARSSL_RSA_NO_CRT - -/** - * \def POLARSSL_SELF_TEST - * - * Enable the checkup functions (*_self_test). - */ -//#define POLARSSL_SELF_TEST - -/** - * \def POLARSSL_SSL_ALL_ALERT_MESSAGES - * - * Enable sending of alert messages in case of encountered errors as per RFC. - * If you choose not to send the alert messages, PolarSSL can still communicate - * with other servers, only debugging of failures is harder. - * - * The advantage of not sending alert messages, is that no information is given - * about reasons for failures thus preventing adversaries of gaining intel. - * - * Enable sending of all alert messages - */ -#define POLARSSL_SSL_ALERT_MESSAGES - -/** - * \def POLARSSL_SSL_DEBUG_ALL - * - * Enable the debug messages in SSL module for all issues. - * Debug messages have been disabled in some places to prevent timing - * attacks due to (unbalanced) debugging function calls. - * - * If you need all error reporting you should enable this during debugging, - * but remove this for production servers that should log as well. - * - * Uncomment this macro to report all debug messages on errors introducing - * a timing side-channel. - * - */ -//#define POLARSSL_SSL_DEBUG_ALL - -/** - * \def POLARSSL_SSL_HW_RECORD_ACCEL - * - * Enable hooking functions in SSL module for hardware acceleration of - * individual records. - * - * Uncomment this macro to enable hooking functions. - */ -//#define POLARSSL_SSL_HW_RECORD_ACCEL - -/** - * \def POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO - * - * Enable support for receiving and parsing SSLv2 Client Hello messages for the - * SSL Server module (POLARSSL_SSL_SRV_C). - * - * Comment this macro to disable support for SSLv2 Client Hello messages. - */ -#define POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO - -/** - * \def POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE - * - * Pick the ciphersuite according to the client's preferences rather than ours - * in the SSL Server module (POLARSSL_SSL_SRV_C). - * - * Uncomment this macro to respect client's ciphersuite order - */ -//#define POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE - -/** - * \def POLARSSL_SSL_MAX_FRAGMENT_LENGTH - * - * Enable support for RFC 6066 max_fragment_length extension in SSL. - * - * Comment this macro to disable support for the max_fragment_length extension - */ -#define POLARSSL_SSL_MAX_FRAGMENT_LENGTH - -/** - * \def POLARSSL_SSL_PROTO_SSL3 - * - * Enable support for SSL 3.0. - * - * Requires: POLARSSL_MD5_C - * POLARSSL_SHA1_C - * - * Comment this macro to disable support for SSL 3.0 - */ -#define POLARSSL_SSL_PROTO_SSL3 - -/** - * \def POLARSSL_SSL_PROTO_TLS1 - * - * Enable support for TLS 1.0. - * - * Requires: POLARSSL_MD5_C - * POLARSSL_SHA1_C - * - * Comment this macro to disable support for TLS 1.0 - */ -#define POLARSSL_SSL_PROTO_TLS1 - -/** - * \def POLARSSL_SSL_PROTO_TLS1_1 - * - * Enable support for TLS 1.1. - * - * Requires: POLARSSL_MD5_C - * POLARSSL_SHA1_C - * - * Comment this macro to disable support for TLS 1.1 - */ -#define POLARSSL_SSL_PROTO_TLS1_1 - -/** - * \def POLARSSL_SSL_PROTO_TLS1_2 - * - * Enable support for TLS 1.2. - * - * Requires: POLARSSL_SHA1_C or POLARSSL_SHA256_C or POLARSSL_SHA512_C - * (Depends on ciphersuites) - * - * Comment this macro to disable support for TLS 1.2 - */ -#define POLARSSL_SSL_PROTO_TLS1_2 - -/** - * \def POLARSSL_SSL_ALPN - * - * Enable support for Application Layer Protocol Negotiation. - * draft-ietf-tls-applayerprotoneg-05 - * - * Comment this macro to disable support for ALPN. - */ -#define POLARSSL_SSL_ALPN - -/** - * \def POLARSSL_SSL_SESSION_TICKETS - * - * Enable support for RFC 5077 session tickets in SSL. - * - * Requires: POLARSSL_AES_C - * POLARSSL_SHA256_C - * POLARSSL_CIPHER_MODE_CBC - * - * Comment this macro to disable support for SSL session tickets - */ -#define POLARSSL_SSL_SESSION_TICKETS - -/** - * \def POLARSSL_SSL_SERVER_NAME_INDICATION - * - * Enable support for RFC 6066 server name indication (SNI) in SSL. - * - * Comment this macro to disable support for server name indication in SSL - */ -#define POLARSSL_SSL_SERVER_NAME_INDICATION - -/** - * \def POLARSSL_SSL_TRUNCATED_HMAC - * - * Enable support for RFC 6066 truncated HMAC in SSL. - * - * Comment this macro to disable support for truncated HMAC in SSL - */ -#define POLARSSL_SSL_TRUNCATED_HMAC - -/** - * \def POLARSSL_SSL_SET_CURVES - * - * Enable ssl_set_curves(). - * - * This is disabled by default since it breaks binary compatibility with the - * 1.3.x line. If you choose to enable it, you will need to rebuild your - * application against the new header files, relinking will not be enough. - * It will be enabled by default, or no longer an option, in the 1.4 branch. - * - * Uncomment to make ssl_set_curves() available. - */ -//#define POLARSSL_SSL_SET_CURVES - -/** - * \def POLARSSL_THREADING_ALT - * - * Provide your own alternate threading implementation. - * - * Requires: POLARSSL_THREADING_C - * - * Uncomment this to allow your own alternate threading implementation. - */ -//#define POLARSSL_THREADING_ALT - -/** - * \def POLARSSL_THREADING_PTHREAD - * - * Enable the pthread wrapper layer for the threading layer. - * - * Requires: POLARSSL_THREADING_C - * - * Uncomment this to enable pthread mutexes. - */ -//#define POLARSSL_THREADING_PTHREAD - -/** - * \def POLARSSL_VERSION_FEATURES - * - * Allow run-time checking of compile-time enabled features. Thus allowing users - * to check at run-time if the library is for instance compiled with threading - * support via version_check_feature(). - * - * Requires: POLARSSL_VERSION_C - * - * Comment this to disable run-time checking and save ROM space - */ -#define POLARSSL_VERSION_FEATURES - -/** - * \def POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3 - * - * If set, the X509 parser will not break-off when parsing an X509 certificate - * and encountering an extension in a v1 or v2 certificate. - * - * Uncomment to prevent an error. - */ -//#define POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3 - -/** - * \def POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION - * - * If set, the X509 parser will not break-off when parsing an X509 certificate - * and encountering an unknown critical extension. - * - * Uncomment to prevent an error. - */ -//#define POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION - -/** - * \def POLARSSL_X509_CHECK_KEY_USAGE - * - * Enable verification of the keyUsage extension (CA and leaf certificates). - * - * Disabling this avoids problems with mis-issued and/or misused - * (intermediate) CA and leaf certificates. - * - * \warning Depending on your PKI use, disabling this can be a security risk! - * - * Comment to skip keyUsage checking for both CA and leaf certificates. - */ -#define POLARSSL_X509_CHECK_KEY_USAGE - -/** - * \def POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE - * - * Enable verification of the extendedKeyUsage extension (leaf certificates). - * - * Disabling this avoids problems with mis-issued and/or misused certificates. - * - * \warning Depending on your PKI use, disabling this can be a security risk! - * - * Comment to skip extendedKeyUsage checking for certificates. - */ -#define POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE - -/** - * \def POLARSSL_X509_RSASSA_PSS_SUPPORT - * - * Enable parsing and verification of X.509 certificates, CRLs and CSRS - * signed with RSASSA-PSS (aka PKCS#1 v2.1). - * - * Comment this macro to disallow using RSASSA-PSS in certificates. - */ -#define POLARSSL_X509_RSASSA_PSS_SUPPORT - -/** - * \def POLARSSL_ZLIB_SUPPORT - * - * If set, the SSL/TLS module uses ZLIB to support compression and - * decompression of packet data. - * - * \warning TLS-level compression MAY REDUCE SECURITY! See for example the - * CRIME attack. Before enabling this option, you should examine with care if - * CRIME or similar exploits may be a applicable to your use case. - * - * Used in: library/ssl_tls.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * This feature requires zlib library and headers to be present. - * - * Uncomment to enable use of ZLIB - */ -//#define POLARSSL_ZLIB_SUPPORT -/* \} name SECTION: PolarSSL feature support */ - -/** - * \name SECTION: PolarSSL modules - * - * This section enables or disables entire modules in PolarSSL - * \{ - */ - -/** - * \def POLARSSL_AESNI_C - * - * Enable AES-NI support on x86-64. - * - * Module: library/aesni.c - * Caller: library/aes.c - * - * Requires: POLARSSL_HAVE_ASM - * - * This modules adds support for the AES-NI instructions on x86-64 - */ -//#define POLARSSL_AESNI_C - -/** - * \def POLARSSL_AES_C - * - * Enable the AES block cipher. - * - * Module: library/aes.c - * Caller: library/ssl_tls.c - * library/pem.c - * library/ctr_drbg.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA - * TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA - * TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA - * TLS_RSA_WITH_AES_256_GCM_SHA384 - * TLS_RSA_WITH_AES_256_CBC_SHA256 - * TLS_RSA_WITH_AES_256_CBC_SHA - * TLS_RSA_WITH_AES_128_GCM_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA - * TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA - * TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA - * TLS_PSK_WITH_AES_256_GCM_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA - * TLS_PSK_WITH_AES_128_GCM_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA - * - * PEM_PARSE uses AES for decrypting encrypted keys. - */ -#define POLARSSL_AES_C - -/** - * \def POLARSSL_ARC4_C - * - * Enable the ARCFOUR stream cipher. - * - * Module: library/arc4.c - * Caller: library/ssl_tls.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_RC4_128_SHA - * TLS_ECDH_RSA_WITH_RC4_128_SHA - * TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - * TLS_ECDHE_RSA_WITH_RC4_128_SHA - * TLS_ECDHE_PSK_WITH_RC4_128_SHA - * TLS_DHE_PSK_WITH_RC4_128_SHA - * TLS_RSA_WITH_RC4_128_SHA - * TLS_RSA_WITH_RC4_128_MD5 - * TLS_RSA_PSK_WITH_RC4_128_SHA - * TLS_PSK_WITH_RC4_128_SHA - */ -#define POLARSSL_ARC4_C - -/** - * \def POLARSSL_ASN1_PARSE_C - * - * Enable the generic ASN1 parser. - * - * Module: library/asn1.c - * Caller: library/x509.c - * library/dhm.c - * library/pkcs12.c - * library/pkcs5.c - * library/pkparse.c - */ -#define POLARSSL_ASN1_PARSE_C - -/** - * \def POLARSSL_ASN1_WRITE_C - * - * Enable the generic ASN1 writer. - * - * Module: library/asn1write.c - * Caller: library/ecdsa.c - * library/pkwrite.c - * library/x509_create.c - * library/x509write_crt.c - * library/x509write_csr.c - */ -#define POLARSSL_ASN1_WRITE_C - -/** - * \def POLARSSL_BASE64_C - * - * Enable the Base64 module. - * - * Module: library/base64.c - * Caller: library/pem.c - * - * This module is required for PEM support (required by X.509). - */ -#define POLARSSL_BASE64_C - -/** - * \def POLARSSL_BIGNUM_C - * - * Enable the multi-precision integer library. - * - * Module: library/bignum.c - * Caller: library/dhm.c - * library/ecp.c - * library/ecdsa.c - * library/rsa.c - * library/ssl_tls.c - * - * This module is required for RSA, DHM and ECC (ECDH, ECDSA) support. - */ -#define POLARSSL_BIGNUM_C - -/** - * \def POLARSSL_BLOWFISH_C - * - * Enable the Blowfish block cipher. - * - * Module: library/blowfish.c - */ -#define POLARSSL_BLOWFISH_C - -/** - * \def POLARSSL_CAMELLIA_C - * - * Enable the Camellia block cipher. - * - * Module: library/camellia.c - * Caller: library/ssl_tls.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 - */ -#define POLARSSL_CAMELLIA_C - -/** - * \def POLARSSL_CCM_C - * - * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. - * - * Module: library/ccm.c - * - * Requires: POLARSSL_AES_C or POLARSSL_CAMELLIA_C - * - * This module enables the AES-CCM ciphersuites, if other requisites are - * enabled as well. - */ -#define POLARSSL_CCM_C - -/** - * \def POLARSSL_CERTS_C - * - * Enable the test certificates. - * - * Module: library/certs.c - * Caller: - * - * Requires: POLARSSL_PEM_PARSE_C - * - * This module is used for testing (ssl_client/server). - */ -#define POLARSSL_CERTS_C - -/** - * \def POLARSSL_CIPHER_C - * - * Enable the generic cipher layer. - * - * Module: library/cipher.c - * Caller: library/ssl_tls.c - * - * Uncomment to enable generic cipher wrappers. - */ -#define POLARSSL_CIPHER_C - -/** - * \def POLARSSL_CTR_DRBG_C - * - * Enable the CTR_DRBG AES-256-based random generator. - * - * Module: library/ctr_drbg.c - * Caller: - * - * Requires: POLARSSL_AES_C - * - * This module provides the CTR_DRBG AES-256 random number generator. - */ -#define POLARSSL_CTR_DRBG_C - -/** - * \def POLARSSL_DEBUG_C - * - * Enable the debug functions. - * - * Module: library/debug.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * This module provides debugging functions. - */ -//#define POLARSSL_DEBUG_C - -/** - * \def POLARSSL_DES_C - * - * Enable the DES block cipher. - * - * Module: library/des.c - * Caller: library/pem.c - * library/ssl_tls.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_PSK_WITH_3DES_EDE_CBC_SHA - * - * PEM_PARSE uses DES/3DES for decrypting encrypted keys. - */ -#define POLARSSL_DES_C - -/** - * \def POLARSSL_DHM_C - * - * Enable the Diffie-Hellman-Merkle module. - * - * Module: library/dhm.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * This module is used by the following key exchanges: - * DHE-RSA, DHE-PSK - */ -#define POLARSSL_DHM_C - -/** - * \def POLARSSL_ECDH_C - * - * Enable the elliptic curve Diffie-Hellman library. - * - * Module: library/ecdh.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * This module is used by the following key exchanges: - * ECDHE-ECDSA, ECDHE-RSA, DHE-PSK - * - * Requires: POLARSSL_ECP_C - */ -#define POLARSSL_ECDH_C - -/** - * \def POLARSSL_ECDSA_C - * - * Enable the elliptic curve DSA library. - * - * Module: library/ecdsa.c - * Caller: - * - * This module is used by the following key exchanges: - * ECDHE-ECDSA - * - * Requires: POLARSSL_ECP_C, POLARSSL_ASN1_WRITE_C, POLARSSL_ASN1_PARSE_C - */ -#define POLARSSL_ECDSA_C - -/** - * \def POLARSSL_ECP_C - * - * Enable the elliptic curve over GF(p) library. - * - * Module: library/ecp.c - * Caller: library/ecdh.c - * library/ecdsa.c - * - * Requires: POLARSSL_BIGNUM_C and at least one POLARSSL_ECP_DP_XXX_ENABLED - */ -#define POLARSSL_ECP_C - -/** - * \def POLARSSL_ENTROPY_C - * - * Enable the platform-specific entropy code. - * - * Module: library/entropy.c - * Caller: - * - * Requires: POLARSSL_SHA512_C or POLARSSL_SHA256_C - * - * This module provides a generic entropy pool - */ -//#define POLARSSL_ENTROPY_C - -/** - * \def POLARSSL_ERROR_C - * - * Enable error code to error string conversion. - * - * Module: library/error.c - * Caller: - * - * This module enables polarssl_strerror(). - */ -#define POLARSSL_ERROR_C - -/** - * \def POLARSSL_GCM_C - * - * Enable the Galois/Counter Mode (GCM) for AES. - * - * Module: library/gcm.c - * - * Requires: POLARSSL_AES_C or POLARSSL_CAMELLIA_C - * - * This module enables the AES-GCM and CAMELLIA-GCM ciphersuites, if other - * requisites are enabled as well. - */ -#define POLARSSL_GCM_C - -/** - * \def POLARSSL_HAVEGE_C - * - * Enable the HAVEGE random generator. - * - * Warning: the HAVEGE random generator is not suitable for virtualized - * environments - * - * Warning: the HAVEGE random generator is dependent on timing and specific - * processor traits. It is therefore not advised to use HAVEGE as - * your applications primary random generator or primary entropy pool - * input. As a secondary input to your entropy pool, it IS able add - * the (limited) extra entropy it provides. - * - * Module: library/havege.c - * Caller: - * - * Requires: POLARSSL_TIMING_C - * - * Uncomment to enable the HAVEGE random generator. - */ -//#define POLARSSL_HAVEGE_C - -/** - * \def POLARSSL_HMAC_DRBG_C - * - * Enable the HMAC_DRBG random generator. - * - * Module: library/hmac_drbg.c - * Caller: - * - * Requires: POLARSSL_MD_C - * - * Uncomment to enable the HMAC_DRBG random number geerator. - */ -#define POLARSSL_HMAC_DRBG_C - -/** - * \def POLARSSL_MD_C - * - * Enable the generic message digest layer. - * - * Module: library/md.c - * Caller: - * - * Uncomment to enable generic message digest wrappers. - */ -#define POLARSSL_MD_C - -/** - * \def POLARSSL_MD2_C - * - * Enable the MD2 hash algorithm. - * - * Module: library/md2.c - * Caller: - * - * Uncomment to enable support for (rare) MD2-signed X.509 certs. - */ -//#define POLARSSL_MD2_C - -/** - * \def POLARSSL_MD4_C - * - * Enable the MD4 hash algorithm. - * - * Module: library/md4.c - * Caller: - * - * Uncomment to enable support for (rare) MD4-signed X.509 certs. - */ -//#define POLARSSL_MD4_C - -/** - * \def POLARSSL_MD5_C - * - * Enable the MD5 hash algorithm. - * - * Module: library/md5.c - * Caller: library/md.c - * library/pem.c - * library/ssl_tls.c - * - * This module is required for SSL/TLS and X.509. - * PEM_PARSE uses MD5 for decrypting encrypted keys. - */ -#define POLARSSL_MD5_C - -/** - * \def POLARSSL_MEMORY_C - * Deprecated since 1.3.5. Please use POLARSSL_PLATFORM_MEMORY instead. - */ - #ifndef POLARSSL_PLATFORM_MEMORY -#define POLARSSL_MEMORY_C -#endif - -/** - * \def POLARSSL_MEMORY_BUFFER_ALLOC_C - * - * Enable the buffer allocator implementation that makes use of a (stack) - * based buffer to 'allocate' dynamic memory. (replaces malloc() and free() - * calls) - * - * Module: library/memory_buffer_alloc.c - * - * Requires: POLARSSL_PLATFORM_C - * POLARSSL_PLATFORM_MEMORY (to use it within PolarSSL) - * - * Enable this module to enable the buffer memory allocator. - */ -//#define POLARSSL_MEMORY_BUFFER_ALLOC_C - -/** - * \def POLARSSL_NET_C - * - * Enable the TCP/IP networking routines. - * - * Module: library/net.c - * - * This module provides TCP/IP networking routines. - */ -#define POLARSSL_NET_C - -/** - * \def POLARSSL_OID_C - * - * Enable the OID database. - * - * Module: library/oid.c - * Caller: library/asn1write.c - * library/pkcs5.c - * library/pkparse.c - * library/pkwrite.c - * library/rsa.c - * library/x509.c - * library/x509_create.c - * library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * library/x509write_crt.c - * library/x509write_csr.c - * - * This modules translates between OIDs and internal values. - */ -#define POLARSSL_OID_C - -/** - * \def POLARSSL_PADLOCK_C - * - * Enable VIA Padlock support on x86. - * - * Module: library/padlock.c - * Caller: library/aes.c - * - * Requires: POLARSSL_HAVE_ASM - * - * This modules adds support for the VIA PadLock on x86. - */ -//#define POLARSSL_PADLOCK_C - -/** - * \def POLARSSL_PBKDF2_C - * - * Enable PKCS#5 PBKDF2 key derivation function. - * DEPRECATED: Use POLARSSL_PKCS5_C instead - * - * Module: library/pbkdf2.c - * - * Requires: POLARSSL_PKCS5_C - * - * This module adds support for the PKCS#5 PBKDF2 key derivation function. - */ -#define POLARSSL_PBKDF2_C - -/** - * \def POLARSSL_PEM_PARSE_C - * - * Enable PEM decoding / parsing. - * - * Module: library/pem.c - * Caller: library/dhm.c - * library/pkparse.c - * library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * - * Requires: POLARSSL_BASE64_C - * - * This modules adds support for decoding / parsing PEM files. - */ -#define POLARSSL_PEM_PARSE_C - -/** - * \def POLARSSL_PEM_WRITE_C - * - * Enable PEM encoding / writing. - * - * Module: library/pem.c - * Caller: library/pkwrite.c - * library/x509write_crt.c - * library/x509write_csr.c - * - * Requires: POLARSSL_BASE64_C - * - * This modules adds support for encoding / writing PEM files. - */ -#define POLARSSL_PEM_WRITE_C - -/** - * \def POLARSSL_PK_C - * - * Enable the generic public (asymetric) key layer. - * - * Module: library/pk.c - * Caller: library/ssl_tls.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * Requires: POLARSSL_RSA_C or POLARSSL_ECP_C - * - * Uncomment to enable generic public key wrappers. - */ -#define POLARSSL_PK_C - -/** - * \def POLARSSL_PK_PARSE_C - * - * Enable the generic public (asymetric) key parser. - * - * Module: library/pkparse.c - * Caller: library/x509_crt.c - * library/x509_csr.c - * - * Requires: POLARSSL_PK_C - * - * Uncomment to enable generic public key parse functions. - */ -#define POLARSSL_PK_PARSE_C - -/** - * \def POLARSSL_PK_WRITE_C - * - * Enable the generic public (asymetric) key writer. - * - * Module: library/pkwrite.c - * Caller: library/x509write.c - * - * Requires: POLARSSL_PK_C - * - * Uncomment to enable generic public key write functions. - */ -#define POLARSSL_PK_WRITE_C - -/** - * \def POLARSSL_PKCS5_C - * - * Enable PKCS#5 functions. - * - * Module: library/pkcs5.c - * - * Requires: POLARSSL_MD_C - * - * This module adds support for the PKCS#5 functions. - */ -#define POLARSSL_PKCS5_C - -/** - * \def POLARSSL_PKCS11_C - * - * Enable wrapper for PKCS#11 smartcard support. - * - * Module: library/pkcs11.c - * Caller: library/pk.c - * - * Requires: POLARSSL_PK_C - * - * This module enables SSL/TLS PKCS #11 smartcard support. - * Requires the presence of the PKCS#11 helper library (libpkcs11-helper) - */ -//#define POLARSSL_PKCS11_C - -/** - * \def POLARSSL_PKCS12_C - * - * Enable PKCS#12 PBE functions. - * Adds algorithms for parsing PKCS#8 encrypted private keys - * - * Module: library/pkcs12.c - * Caller: library/pkparse.c - * - * Requires: POLARSSL_ASN1_PARSE_C, POLARSSL_CIPHER_C, POLARSSL_MD_C - * Can use: POLARSSL_ARC4_C - * - * This module enables PKCS#12 functions. - */ -#define POLARSSL_PKCS12_C - -/** - * \def POLARSSL_PLATFORM_C - * - * Enable the platform abstraction layer that allows you to re-assign - * functions like malloc(), free(), printf(), fprintf() - * - * Module: library/platform.c - * Caller: Most other .c files - * - * This module enables abstraction of common (libc) functions. - */ -#define POLARSSL_PLATFORM_C - -/** - * \def POLARSSL_RIPEMD160_C - * - * Enable the RIPEMD-160 hash algorithm. - * - * Module: library/ripemd160.c - * Caller: library/md.c - * - */ -#define POLARSSL_RIPEMD160_C - -/** - * \def POLARSSL_RSA_C - * - * Enable the RSA public-key cryptosystem. - * - * Module: library/rsa.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * library/x509.c - * - * This module is used by the following key exchanges: - * RSA, DHE-RSA, ECDHE-RSA, RSA-PSK - * - * Requires: POLARSSL_BIGNUM_C, POLARSSL_OID_C - */ -#define POLARSSL_RSA_C - -/** - * \def POLARSSL_SHA1_C - * - * Enable the SHA1 cryptographic hash algorithm. - * - * Module: library/sha1.c - * Caller: library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * library/x509write_crt.c - * - * This module is required for SSL/TLS and SHA1-signed certificates. - */ -#define POLARSSL_SHA1_C - -/** - * \def POLARSSL_SHA256_C - * - * Enable the SHA-224 and SHA-256 cryptographic hash algorithms. - * (Used to be POLARSSL_SHA2_C) - * - * Module: library/sha256.c - * Caller: library/entropy.c - * library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * This module adds support for SHA-224 and SHA-256. - * This module is required for the SSL/TLS 1.2 PRF function. - */ -#define POLARSSL_SHA256_C - -/** - * \def POLARSSL_SHA512_C - * - * Enable the SHA-384 and SHA-512 cryptographic hash algorithms. - * (Used to be POLARSSL_SHA4_C) - * - * Module: library/sha512.c - * Caller: library/entropy.c - * library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * This module adds support for SHA-384 and SHA-512. - */ -#define POLARSSL_SHA512_C - -/** - * \def POLARSSL_SSL_CACHE_C - * - * Enable simple SSL cache implementation. - * - * Module: library/ssl_cache.c - * Caller: - * - * Requires: POLARSSL_SSL_CACHE_C - */ -#define POLARSSL_SSL_CACHE_C - -/** - * \def POLARSSL_SSL_CLI_C - * - * Enable the SSL/TLS client code. - * - * Module: library/ssl_cli.c - * Caller: - * - * Requires: POLARSSL_SSL_TLS_C - * - * This module is required for SSL/TLS client support. - */ -#define POLARSSL_SSL_CLI_C - -/** - * \def POLARSSL_SSL_SRV_C - * - * Enable the SSL/TLS server code. - * - * Module: library/ssl_srv.c - * Caller: - * - * Requires: POLARSSL_SSL_TLS_C - * - * This module is required for SSL/TLS server support. - */ -//#define POLARSSL_SSL_SRV_C - -/** - * \def POLARSSL_SSL_TLS_C - * - * Enable the generic SSL/TLS code. - * - * Module: library/ssl_tls.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * Requires: POLARSSL_CIPHER_C, POLARSSL_MD_C - * and at least one of the POLARSSL_SSL_PROTO_* defines - * - * This module is required for SSL/TLS. - */ -#define POLARSSL_SSL_TLS_C - -/** - * \def POLARSSL_THREADING_C - * - * Enable the threading abstraction layer. - * By default PolarSSL assumes it is used in a non-threaded environment or that - * contexts are not shared between threads. If you do intend to use contexts - * between threads, you will need to enable this layer to prevent race - * conditions. - * - * Module: library/threading.c - * - * This allows different threading implementations (self-implemented or - * provided). - * - * You will have to enable either POLARSSL_THREADING_ALT or - * POLARSSL_THREADING_PTHREAD. - * - * Enable this layer to allow use of mutexes within PolarSSL - */ -//#define POLARSSL_THREADING_C - -/** - * \def POLARSSL_TIMING_C - * - * Enable the portable timing interface. - * - * Module: library/timing.c - * Caller: library/havege.c - * - * This module is used by the HAVEGE random number generator. - */ -//#define POLARSSL_TIMING_C - -/** - * \def POLARSSL_VERSION_C - * - * Enable run-time version information. - * - * Module: library/version.c - * - * This module provides run-time version information. - */ -#define POLARSSL_VERSION_C - -/** - * \def POLARSSL_X509_USE_C - * - * Enable X.509 core for using certificates. - * - * Module: library/x509.c - * Caller: library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * - * Requires: POLARSSL_ASN1_PARSE_C, POLARSSL_BIGNUM_C, POLARSSL_OID_C, - * POLARSSL_PK_PARSE_C - * - * This module is required for the X.509 parsing modules. - */ -#define POLARSSL_X509_USE_C - -/** - * \def POLARSSL_X509_CRT_PARSE_C - * - * Enable X.509 certificate parsing. - * - * Module: library/x509_crt.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * Requires: POLARSSL_X509_USE_C - * - * This module is required for X.509 certificate parsing. - */ -#define POLARSSL_X509_CRT_PARSE_C - -/** - * \def POLARSSL_X509_CRL_PARSE_C - * - * Enable X.509 CRL parsing. - * - * Module: library/x509_crl.c - * Caller: library/x509_crt.c - * - * Requires: POLARSSL_X509_USE_C - * - * This module is required for X.509 CRL parsing. - */ -#define POLARSSL_X509_CRL_PARSE_C - -/** - * \def POLARSSL_X509_CSR_PARSE_C - * - * Enable X.509 Certificate Signing Request (CSR) parsing. - * - * Module: library/x509_csr.c - * Caller: library/x509_crt_write.c - * - * Requires: POLARSSL_X509_USE_C - * - * This module is used for reading X.509 certificate request. - */ -#define POLARSSL_X509_CSR_PARSE_C - -/** - * \def POLARSSL_X509_CREATE_C - * - * Enable X.509 core for creating certificates. - * - * Module: library/x509_create.c - * - * Requires: POLARSSL_BIGNUM_C, POLARSSL_OID_C, POLARSSL_PK_WRITE_C - * - * This module is the basis for creating X.509 certificates and CSRs. - */ -#define POLARSSL_X509_CREATE_C - -/** - * \def POLARSSL_X509_CRT_WRITE_C - * - * Enable creating X.509 certificates. - * - * Module: library/x509_crt_write.c - * - * Requires: POLARSSL_CREATE_C - * - * This module is required for X.509 certificate creation. - */ -#define POLARSSL_X509_CRT_WRITE_C - -/** - * \def POLARSSL_X509_CSR_WRITE_C - * - * Enable creating X.509 Certificate Signing Requests (CSR). - * - * Module: library/x509_csr_write.c - * - * Requires: POLARSSL_CREATE_C - * - * This module is required for X.509 certificate request writing. - */ -#define POLARSSL_X509_CSR_WRITE_C - -/** - * \def POLARSSL_XTEA_C - * - * Enable the XTEA block cipher. - * - * Module: library/xtea.c - * Caller: - */ -#define POLARSSL_XTEA_C - -/* \} name SECTION: PolarSSL modules */ - -/** - * \name SECTION: Module configuration options - * - * This section allows for the setting of module specific sizes and - * configuration options. The default values are already present in the - * relevant header files and should suffice for the regular use cases. - * - * Our advice is to enable options and change their values here - * only if you have a good reason and know the consequences. - * - * Please check the respective header file for documentation on these - * parameters (to prevent duplicate documentation). - * \{ - */ - -/* MPI / BIGNUM options */ -//#define POLARSSL_MPI_WINDOW_SIZE 6 /**< Maximum windows size used. */ -//#define POLARSSL_MPI_MAX_SIZE 512 /**< Maximum number of bytes for usable MPIs. */ - -/* CTR_DRBG options */ -//#define CTR_DRBG_ENTROPY_LEN 48 /**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */ -//#define CTR_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ -//#define CTR_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ -//#define CTR_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ -//#define CTR_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ - -/* HMAC_DRBG options */ -//#define POLARSSL_HMAC_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ -//#define POLARSSL_HMAC_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ -//#define POLARSSL_HMAC_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ -//#define POLARSSL_HMAC_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ - -/* ECP options */ -//#define POLARSSL_ECP_MAX_BITS 521 /**< Maximum bit size of groups */ -//#define POLARSSL_ECP_WINDOW_SIZE 6 /**< Maximum window size used */ -//#define POLARSSL_ECP_FIXED_POINT_OPTIM 1 /**< Enable fixed-point speed-up */ - -/* Entropy options */ -//#define ENTROPY_MAX_SOURCES 20 /**< Maximum number of sources supported */ -//#define ENTROPY_MAX_GATHER 128 /**< Maximum amount requested from entropy sources */ - -/* Memory buffer allocator options */ -//#define POLARSSL_MEMORY_ALIGN_MULTIPLE 4 /**< Align on multiples of this value */ - -/* Platform options */ -//#define POLARSSL_PLATFORM_STD_MEM_HDR /**< Header to include if POLARSSL_PLATFORM_NO_STD_FUNCTIONS is defined. Don't define if no header is needed. */ -//#define POLARSSL_PLATFORM_STD_MALLOC malloc /**< Default allocator to use, can be undefined */ -//#define POLARSSL_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */ -//#define POLARSSL_PLATFORM_STD_PRINTF printf /**< Default printf to use, can be undefined */ -//#define POLARSSL_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use, can be undefined */ - -/* SSL Cache options */ -//#define SSL_CACHE_DEFAULT_TIMEOUT 86400 /**< 1 day */ -//#define SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /**< Maximum entries in cache */ - -/* SSL options */ -//#define SSL_MAX_CONTENT_LEN 16384 /**< Size of the input / output buffer */ -//#define SSL_DEFAULT_TICKET_LIFETIME 86400 /**< Lifetime of session tickets (if enabled) */ -//#define POLARSSL_PSK_MAX_LEN 32 /**< Max size of TLS pre-shared keys, in bytes (default 256 bits) */ - -#define RTL_CRYPTO_FRAGMENT 15360 /* 15*1024 < 16000 */ - -/** - * Complete list of ciphersuites to use, in order of preference. - * - * \warning No dependency checking is done on that field! This option can only - * be used to restrict the set of available ciphersuites. It is your - * responsibility to make sure the needed modules are active. - * - * Use this to save a few hundred bytes of ROM (default ordering of all - * available ciphersuites) and a few to a few hundred bytes of RAM. - * - * The value below is only an example, not the default. - */ -//#define SSL_CIPHERSUITES TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - -/* Debug options */ -//#define POLARSSL_DEBUG_DFL_MODE POLARSSL_DEBUG_LOG_FULL /**< Default log: Full or Raw */ - -/* \} name SECTION: Module configuration options */ - -#include "check_config.h" - -#endif /* POLARSSL_CONFIG_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config_arduino.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config_arduino.h deleted file mode 100644 index 96c7229..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config_arduino.h +++ /dev/null @@ -1,2189 +0,0 @@ -/** - * \file config.h - * - * \brief Configuration options (set of defines) - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * This set of compile-time options may be used to enable - * or disable features selectively, and reduce the global - * memory footprint. - */ -#ifndef POLARSSL_CONFIG_H -#define POLARSSL_CONFIG_H - -#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) -#define _CRT_SECURE_NO_DEPRECATE 1 -#endif - -/** - * \name SECTION: System support - * - * This section sets system specific settings. - * \{ - */ - -/** - * \def POLARSSL_HAVE_INT8 - * - * The system uses 8-bit wide native integers. - * - * Uncomment if native integers are 8-bit wide. - */ -//#define POLARSSL_HAVE_INT8 - -/** - * \def POLARSSL_HAVE_INT16 - * - * The system uses 16-bit wide native integers. - * - * Uncomment if native integers are 16-bit wide. - */ -//#define POLARSSL_HAVE_INT16 - -/** - * \def POLARSSL_HAVE_LONGLONG - * - * The compiler supports the 'long long' type. - * (Only used on 32-bit platforms) - */ -#define POLARSSL_HAVE_LONGLONG - -/** - * \def POLARSSL_HAVE_ASM - * - * The compiler has support for asm(). - * - * Requires support for asm() in compiler. - * - * Used in: - * library/timing.c - * library/padlock.c - * include/polarssl/bn_mul.h - * - * Comment to disable the use of assembly code. - */ -//#define POLARSSL_HAVE_ASM - -/** - * \def POLARSSL_HAVE_SSE2 - * - * CPU supports SSE2 instruction set. - * - * Uncomment if the CPU supports SSE2 (IA-32 specific). - */ -//#define POLARSSL_HAVE_SSE2 - -/** - * \def POLARSSL_HAVE_TIME - * - * System has time.h and time() / localtime() / gettimeofday(). - * - * Comment if your system does not support time functions - */ -//#define POLARSSL_HAVE_TIME - -/** - * \def POLARSSL_HAVE_IPV6 - * - * System supports the basic socket interface for IPv6 (RFC 3493), - * specifically getaddrinfo(), freeaddrinfo() and struct sockaddr_storage. - * - * Note: on Windows/MingW, XP or higher is required. - * - * Comment if your system does not support the IPv6 socket interface - */ -//#define POLARSSL_HAVE_IPV6 - -/** - * \def POLARSSL_PLATFORM_MEMORY - * - * Enable the memory allocation layer. - * - * By default PolarSSL uses the system-provided malloc() and free(). - * This allows different allocators (self-implemented or provided) to be - * provided to the platform abstraction layer. - * - * Enabling POLARSSL_PLATFORM_MEMORY will provide "platform_set_malloc_free()" - * to allow you to set an alternative malloc() and free() function pointer. - * - * Requires: POLARSSL_PLATFORM_C - * - * Enable this layer to allow use of alternative memory allocators. - */ -//#define POLARSSL_PLATFORM_MEMORY - -/** - * \def POLARSSL_PLATFORM_NO_STD_FUNCTIONS - * - * Do not assign standard functions in the platform layer (e.g. malloc() to - * POLARSSL_PLATFORM_STD_MALLOC and printf() to POLARSSL_PLATFORM_STD_PRINTF) - * - * This makes sure there are no linking errors on platforms that do not support - * these functions. You will HAVE to provide alternatives, either at runtime - * via the platform_set_xxx() functions or at compile time by setting - * the POLARSSL_PLATFORM_STD_XXX defines. - * - * Requires: POLARSSL_PLATFORM_C - * - * Uncomment to prevent default assignment of standard functions in the - * platform layer. - */ -#define POLARSSL_PLATFORM_NO_STD_FUNCTIONS - -/** - * \def POLARSSL_PLATFORM_XXX_ALT - * - * Uncomment a macro to let PolarSSL support the function in the platform - * abstraction layer. - * - * Example: In case you uncomment POLARSSL_PLATFORM_PRINTF_ALT, PolarSSL will - * provide a function "platform_set_printf()" that allows you to set an - * alternative printf function pointer. - * - * All these define require POLARSSL_PLATFORM_C to be defined! - * - * Uncomment a macro to enable alternate implementation of specific base - * platform function - */ -//#define POLARSSL_PLATFORM_PRINTF_ALT -//#define POLARSSL_PLATFORM_FPRINTF_ALT -/* \} name SECTION: System support */ - -/** - * \name SECTION: PolarSSL feature support - * - * This section sets support for features that are or are not needed - * within the modules that are enabled. - * \{ - */ - -/** - * \def POLARSSL_TIMING_ALT - * - * Uncomment to provide your own alternate implementation for hardclock(), - * get_timer(), set_alarm() and m_sleep(). - * - * Only works if you have POLARSSL_TIMING_C enabled. - * - * You will need to provide a header "timing_alt.h" and an implementation at - * compile time. - */ -//#define POLARSSL_TIMING_ALT - -/** - * \def POLARSSL_XXX_ALT - * - * Uncomment a macro to let PolarSSL use your alternate core implementation of - * a symmetric or hash algorithm (e.g. platform specific assembly optimized - * implementations). Keep in mind that the function prototypes should remain - * the same. - * - * Example: In case you uncomment POLARSSL_AES_ALT, PolarSSL will no longer - * provide the "struct aes_context" definition and omit the base function - * declarations and implementations. "aes_alt.h" will be included from - * "aes.h" to include the new function definitions. - * - * Uncomment a macro to enable alternate implementation for core algorithm - * functions - */ -//#define POLARSSL_AES_ALT -//#define POLARSSL_ARC4_ALT -//#define POLARSSL_BLOWFISH_ALT -//#define POLARSSL_CAMELLIA_ALT -//#define POLARSSL_DES_ALT -//#define POLARSSL_XTEA_ALT -//#define POLARSSL_MD2_ALT -//#define POLARSSL_MD4_ALT -//#define POLARSSL_MD5_ALT -//#define POLARSSL_RIPEMD160_ALT -//#define POLARSSL_SHA1_ALT -//#define POLARSSL_SHA256_ALT -//#define POLARSSL_SHA512_ALT - -/** - * \def POLARSSL_AES_ROM_TABLES - * - * Store the AES tables in ROM. - * - * Uncomment this macro to store the AES tables in ROM. - * - */ -#define POLARSSL_AES_ROM_TABLES - -/** - * \def POLARSSL_CIPHER_MODE_CBC - * - * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. - */ -#define POLARSSL_CIPHER_MODE_CBC - -/** - * \def POLARSSL_CIPHER_MODE_CFB - * - * Enable Cipher Feedback mode (CFB) for symmetric ciphers. - */ -#define POLARSSL_CIPHER_MODE_CFB - -/** - * \def POLARSSL_CIPHER_MODE_CTR - * - * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. - */ -#define POLARSSL_CIPHER_MODE_CTR - -/** - * \def POLARSSL_CIPHER_NULL_CIPHER - * - * Enable NULL cipher. - * Warning: Only do so when you know what you are doing. This allows for - * encryption or channels without any security! - * - * Requires POLARSSL_ENABLE_WEAK_CIPHERSUITES as well to enable - * the following ciphersuites: - * TLS_ECDH_ECDSA_WITH_NULL_SHA - * TLS_ECDH_RSA_WITH_NULL_SHA - * TLS_ECDHE_ECDSA_WITH_NULL_SHA - * TLS_ECDHE_RSA_WITH_NULL_SHA - * TLS_ECDHE_PSK_WITH_NULL_SHA384 - * TLS_ECDHE_PSK_WITH_NULL_SHA256 - * TLS_ECDHE_PSK_WITH_NULL_SHA - * TLS_DHE_PSK_WITH_NULL_SHA384 - * TLS_DHE_PSK_WITH_NULL_SHA256 - * TLS_DHE_PSK_WITH_NULL_SHA - * TLS_RSA_WITH_NULL_SHA256 - * TLS_RSA_WITH_NULL_SHA - * TLS_RSA_WITH_NULL_MD5 - * TLS_RSA_PSK_WITH_NULL_SHA384 - * TLS_RSA_PSK_WITH_NULL_SHA256 - * TLS_RSA_PSK_WITH_NULL_SHA - * TLS_PSK_WITH_NULL_SHA384 - * TLS_PSK_WITH_NULL_SHA256 - * TLS_PSK_WITH_NULL_SHA - * - * Uncomment this macro to enable the NULL cipher and ciphersuites - */ -//#define POLARSSL_CIPHER_NULL_CIPHER - -/** - * \def POLARSSL_CIPHER_PADDING_XXX - * - * Uncomment or comment macros to add support for specific padding modes - * in the cipher layer with cipher modes that support padding (e.g. CBC) - * - * If you disable all padding modes, only full blocks can be used with CBC. - * - * Enable padding modes in the cipher layer. - */ -#define POLARSSL_CIPHER_PADDING_PKCS7 -#define POLARSSL_CIPHER_PADDING_ONE_AND_ZEROS -#define POLARSSL_CIPHER_PADDING_ZEROS_AND_LEN -#define POLARSSL_CIPHER_PADDING_ZEROS - -/** - * \def POLARSSL_ENABLE_WEAK_CIPHERSUITES - * - * Enable weak ciphersuites in SSL / TLS. - * Warning: Only do so when you know what you are doing. This allows for - * channels with virtually no security at all! - * - * This enables the following ciphersuites: - * TLS_RSA_WITH_DES_CBC_SHA - * TLS_DHE_RSA_WITH_DES_CBC_SHA - * - * Uncomment this macro to enable weak ciphersuites - */ -//#define POLARSSL_ENABLE_WEAK_CIPHERSUITES - -/** - * \def POLARSSL_REMOVE_ARC4_CIPHERSUITES - * - * Remove RC4 ciphersuites by default in SSL / TLS. - * This flag removes the ciphersuites based on RC4 from the default list as - * returned by ssl_list_ciphersuites(). However, it is still possible to - * enable (some of) them with ssl_set_ciphersuites() by including them - * explicitly. - * - * Uncomment this macro to remove RC4 ciphersuites by default. - */ -//#define POLARSSL_REMOVE_ARC4_CIPHERSUITES - -/** - * \def POLARSSL_ECP_XXXX_ENABLED - * - * Enables specific curves within the Elliptic Curve module. - * By default all supported curves are enabled. - * - * Comment macros to disable the curve and functions for it - */ -#define POLARSSL_ECP_DP_SECP192R1_ENABLED -#define POLARSSL_ECP_DP_SECP224R1_ENABLED -#define POLARSSL_ECP_DP_SECP256R1_ENABLED -#define POLARSSL_ECP_DP_SECP384R1_ENABLED -#define POLARSSL_ECP_DP_SECP521R1_ENABLED -#define POLARSSL_ECP_DP_SECP192K1_ENABLED -#define POLARSSL_ECP_DP_SECP224K1_ENABLED -#define POLARSSL_ECP_DP_SECP256K1_ENABLED -#define POLARSSL_ECP_DP_BP256R1_ENABLED -#define POLARSSL_ECP_DP_BP384R1_ENABLED -#define POLARSSL_ECP_DP_BP512R1_ENABLED -//#define POLARSSL_ECP_DP_M221_ENABLED // Not implemented yet! -#define POLARSSL_ECP_DP_M255_ENABLED -//#define POLARSSL_ECP_DP_M383_ENABLED // Not implemented yet! -//#define POLARSSL_ECP_DP_M511_ENABLED // Not implemented yet! - -/** - * \def POLARSSL_ECP_NIST_OPTIM - * - * Enable specific 'modulo p' routines for each NIST prime. - * Depending on the prime and architecture, makes operations 4 to 8 times - * faster on the corresponding curve. - * - * Comment this macro to disable NIST curves optimisation. - */ -#define POLARSSL_ECP_NIST_OPTIM - -/** - * \def POLARSSL_ECDSA_DETERMINISTIC - * - * Enable deterministic ECDSA (RFC 6979). - * Standard ECDSA is "fragile" in the sense that lack of entropy when signing - * may result in a compromise of the long-term signing key. This is avoided by - * the deterministic variant. - * - * Requires: POLARSSL_HMAC_DRBG_C - * - * Comment this macro to disable deterministic ECDSA. - */ -//#define POLARSSL_ECDSA_DETERMINISTIC - -/** - * \def POLARSSL_KEY_EXCHANGE_PSK_ENABLED - * - * Enable the PSK based ciphersuite modes in SSL / TLS. - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_PSK_WITH_AES_256_GCM_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA - * TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_PSK_WITH_AES_128_GCM_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA - * TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_PSK_WITH_RC4_128_SHA - */ -//#define POLARSSL_KEY_EXCHANGE_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED - * - * Enable the DHE-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_DHM_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA - * TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA - * TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_DHE_PSK_WITH_RC4_128_SHA - */ -//#define POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED - * - * Enable the ECDHE-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA - * TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA - * TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_PSK_WITH_RC4_128_SHA - */ -//#define POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED - * - * Enable the RSA-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA - * TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA - * TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_PSK_WITH_RC4_128_SHA - */ -//#define POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_RSA_ENABLED - * - * Enable the RSA-only based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_RSA_WITH_AES_256_GCM_SHA384 - * TLS_RSA_WITH_AES_256_CBC_SHA256 - * TLS_RSA_WITH_AES_256_CBC_SHA - * TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_RSA_WITH_AES_128_GCM_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA - * TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_WITH_RC4_128_SHA - * TLS_RSA_WITH_RC4_128_MD5 - */ -#define POLARSSL_KEY_EXCHANGE_RSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED - * - * Enable the DHE-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_DHM_C, POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA - * TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA - * TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - */ -//#define POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED - * - * Enable the ECDHE-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_RSA_WITH_RC4_128_SHA - */ -//#define POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED - * - * Enable the ECDHE-ECDSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_ECDSA_C, POLARSSL_X509_CRT_PARSE_C, - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - */ -//#define POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED - * - * Enable the ECDH-ECDSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_RC4_128_SHA - * TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - */ -//#define POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED - * - * Enable the ECDH-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_RSA_WITH_RC4_128_SHA - * TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 - */ -//#define POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED - -/** - * \def POLARSSL_PK_PARSE_EC_EXTENDED - * - * Enhance support for reading EC keys using variants of SEC1 not allowed by - * RFC 5915 and RFC 5480. - * - * Currently this means parsing the SpecifiedECDomain choice of EC - * parameters (only known groups are supported, not arbitrary domains, to - * avoid validation issues). - * - * Disable if you only need to support RFC 5915 + 5480 key formats. - */ -//#define POLARSSL_PK_PARSE_EC_EXTENDED - -/** - * \def POLARSSL_ERROR_STRERROR_BC - * - * Make available the backward compatible error_strerror() next to the - * current polarssl_strerror(). - * - * For new code, it is recommended to use polarssl_strerror() instead and - * disable this. - * - * Disable if you run into name conflicts and want to really remove the - * error_strerror() - */ -#define POLARSSL_ERROR_STRERROR_BC - -/** - * \def POLARSSL_ERROR_STRERROR_DUMMY - * - * Enable a dummy error function to make use of polarssl_strerror() in - * third party libraries easier when POLARSSL_ERROR_C is disabled - * (no effect when POLARSSL_ERROR_C is enabled). - * - * You can safely disable this if POLARSSL_ERROR_C is enabled, or if you're - * not using polarssl_strerror() or error_strerror() in your application. - * - * Disable if you run into name conflicts and want to really remove the - * polarssl_strerror() - */ -#define POLARSSL_ERROR_STRERROR_DUMMY - -/** - * \def POLARSSL_GENPRIME - * - * Enable the prime-number generation code. - * - * Requires: POLARSSL_BIGNUM_C - */ -#define POLARSSL_GENPRIME - -/** - * \def POLARSSL_FS_IO - * - * Enable functions that use the filesystem. - */ -//#define POLARSSL_FS_IO - -/** - * \def POLARSSL_NO_DEFAULT_ENTROPY_SOURCES - * - * Do not add default entropy sources. These are the platform specific, - * hardclock and HAVEGE based poll functions. - * - * This is useful to have more control over the added entropy sources in an - * application. - * - * Uncomment this macro to prevent loading of default entropy functions. - */ -//#define POLARSSL_NO_DEFAULT_ENTROPY_SOURCES - -/** - * \def POLARSSL_NO_PLATFORM_ENTROPY - * - * Do not use built-in platform entropy functions. - * This is useful if your platform does not support - * standards like the /dev/urandom or Windows CryptoAPI. - * - * Uncomment this macro to disable the built-in platform entropy functions. - */ -//#define POLARSSL_NO_PLATFORM_ENTROPY - -/** - * \def POLARSSL_ENTROPY_FORCE_SHA256 - * - * Force the entropy accumulator to use a SHA-256 accumulator instead of the - * default SHA-512 based one (if both are available). - * - * Requires: POLARSSL_SHA256_C - * - * On 32-bit systems SHA-256 can be much faster than SHA-512. Use this option - * if you have performance concerns. - * - * This option is only useful if both POLARSSL_SHA256_C and - * POLARSSL_SHA512_C are defined. Otherwise the available hash module is used. - */ -//#define POLARSSL_ENTROPY_FORCE_SHA256 - -/** - * \def POLARSSL_MEMORY_DEBUG - * - * Enable debugging of buffer allocator memory issues. Automatically prints - * (to stderr) all (fatal) messages on memory allocation issues. Enables - * function for 'debug output' of allocated memory. - * - * Requires: POLARSSL_MEMORY_BUFFER_ALLOC_C - * - * Uncomment this macro to let the buffer allocator print out error messages. - */ -//#define POLARSSL_MEMORY_DEBUG - -/** - * \def POLARSSL_MEMORY_BACKTRACE - * - * Include backtrace information with each allocated block. - * - * Requires: POLARSSL_MEMORY_BUFFER_ALLOC_C - * GLIBC-compatible backtrace() an backtrace_symbols() support - * - * Uncomment this macro to include backtrace information - */ -//#define POLARSSL_MEMORY_BACKTRACE - -/** - * \def POLARSSL_PKCS1_V15 - * - * Enable support for PKCS#1 v1.5 encoding. - * - * Requires: POLARSSL_RSA_C - * - * This enables support for PKCS#1 v1.5 operations. - */ -#define POLARSSL_PKCS1_V15 - -/** - * \def POLARSSL_PKCS1_V21 - * - * Enable support for PKCS#1 v2.1 encoding. - * - * Requires: POLARSSL_MD_C, POLARSSL_RSA_C - * - * This enables support for RSAES-OAEP and RSASSA-PSS operations. - */ -//#define POLARSSL_PKCS1_V21 - -/** - * \def POLARSSL_RSA_NO_CRT - * - * Do not use the Chinese Remainder Theorem for the RSA private operation. - * - * Uncomment this macro to disable the use of CRT in RSA. - * - */ -//#define POLARSSL_RSA_NO_CRT - -/** - * \def POLARSSL_SELF_TEST - * - * Enable the checkup functions (*_self_test). - */ -//#define POLARSSL_SELF_TEST - -/** - * \def POLARSSL_SSL_ALL_ALERT_MESSAGES - * - * Enable sending of alert messages in case of encountered errors as per RFC. - * If you choose not to send the alert messages, PolarSSL can still communicate - * with other servers, only debugging of failures is harder. - * - * The advantage of not sending alert messages, is that no information is given - * about reasons for failures thus preventing adversaries of gaining intel. - * - * Enable sending of all alert messages - */ -#define POLARSSL_SSL_ALERT_MESSAGES - -/** - * \def POLARSSL_SSL_DEBUG_ALL - * - * Enable the debug messages in SSL module for all issues. - * Debug messages have been disabled in some places to prevent timing - * attacks due to (unbalanced) debugging function calls. - * - * If you need all error reporting you should enable this during debugging, - * but remove this for production servers that should log as well. - * - * Uncomment this macro to report all debug messages on errors introducing - * a timing side-channel. - * - */ -//#define POLARSSL_SSL_DEBUG_ALL - -/** - * \def POLARSSL_SSL_HW_RECORD_ACCEL - * - * Enable hooking functions in SSL module for hardware acceleration of - * individual records. - * - * Uncomment this macro to enable hooking functions. - */ -//#define POLARSSL_SSL_HW_RECORD_ACCEL - -/** - * \def POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO - * - * Enable support for receiving and parsing SSLv2 Client Hello messages for the - * SSL Server module (POLARSSL_SSL_SRV_C). - * - * Comment this macro to disable support for SSLv2 Client Hello messages. - */ -//#define POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO - -/** - * \def POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE - * - * Pick the ciphersuite according to the client's preferences rather than ours - * in the SSL Server module (POLARSSL_SSL_SRV_C). - * - * Uncomment this macro to respect client's ciphersuite order - */ -//#define POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE - -/** - * \def POLARSSL_SSL_MAX_FRAGMENT_LENGTH - * - * Enable support for RFC 6066 max_fragment_length extension in SSL. - * - * Comment this macro to disable support for the max_fragment_length extension - */ -#define POLARSSL_SSL_MAX_FRAGMENT_LENGTH - -/** - * \def POLARSSL_SSL_PROTO_SSL3 - * - * Enable support for SSL 3.0. - * - * Requires: POLARSSL_MD5_C - * POLARSSL_SHA1_C - * - * Comment this macro to disable support for SSL 3.0 - */ -#define POLARSSL_SSL_PROTO_SSL3 - -/** - * \def POLARSSL_SSL_PROTO_TLS1 - * - * Enable support for TLS 1.0. - * - * Requires: POLARSSL_MD5_C - * POLARSSL_SHA1_C - * - * Comment this macro to disable support for TLS 1.0 - */ -#define POLARSSL_SSL_PROTO_TLS1 - -/** - * \def POLARSSL_SSL_PROTO_TLS1_1 - * - * Enable support for TLS 1.1. - * - * Requires: POLARSSL_MD5_C - * POLARSSL_SHA1_C - * - * Comment this macro to disable support for TLS 1.1 - */ -#define POLARSSL_SSL_PROTO_TLS1_1 - -/** - * \def POLARSSL_SSL_PROTO_TLS1_2 - * - * Enable support for TLS 1.2. - * - * Requires: POLARSSL_SHA1_C or POLARSSL_SHA256_C or POLARSSL_SHA512_C - * (Depends on ciphersuites) - * - * Comment this macro to disable support for TLS 1.2 - */ -#define POLARSSL_SSL_PROTO_TLS1_2 - -/** - * \def POLARSSL_SSL_ALPN - * - * Enable support for Application Layer Protocol Negotiation. - * draft-ietf-tls-applayerprotoneg-05 - * - * Comment this macro to disable support for ALPN. - */ -//#define POLARSSL_SSL_ALPN - -/** - * \def POLARSSL_SSL_SESSION_TICKETS - * - * Enable support for RFC 5077 session tickets in SSL. - * - * Requires: POLARSSL_AES_C - * POLARSSL_SHA256_C - * POLARSSL_CIPHER_MODE_CBC - * - * Comment this macro to disable support for SSL session tickets - */ -#define POLARSSL_SSL_SESSION_TICKETS - -/** - * \def POLARSSL_SSL_SERVER_NAME_INDICATION - * - * Enable support for RFC 6066 server name indication (SNI) in SSL. - * - * Comment this macro to disable support for server name indication in SSL - */ -#define POLARSSL_SSL_SERVER_NAME_INDICATION - -/** - * \def POLARSSL_SSL_TRUNCATED_HMAC - * - * Enable support for RFC 6066 truncated HMAC in SSL. - * - * Comment this macro to disable support for truncated HMAC in SSL - */ -#define POLARSSL_SSL_TRUNCATED_HMAC - -/** - * \def POLARSSL_SSL_SET_CURVES - * - * Enable ssl_set_curves(). - * - * This is disabled by default since it breaks binary compatibility with the - * 1.3.x line. If you choose to enable it, you will need to rebuild your - * application against the new header files, relinking will not be enough. - * It will be enabled by default, or no longer an option, in the 1.4 branch. - * - * Uncomment to make ssl_set_curves() available. - */ -//#define POLARSSL_SSL_SET_CURVES - -/** - * \def POLARSSL_THREADING_ALT - * - * Provide your own alternate threading implementation. - * - * Requires: POLARSSL_THREADING_C - * - * Uncomment this to allow your own alternate threading implementation. - */ -//#define POLARSSL_THREADING_ALT - -/** - * \def POLARSSL_THREADING_PTHREAD - * - * Enable the pthread wrapper layer for the threading layer. - * - * Requires: POLARSSL_THREADING_C - * - * Uncomment this to enable pthread mutexes. - */ -//#define POLARSSL_THREADING_PTHREAD - -/** - * \def POLARSSL_VERSION_FEATURES - * - * Allow run-time checking of compile-time enabled features. Thus allowing users - * to check at run-time if the library is for instance compiled with threading - * support via version_check_feature(). - * - * Requires: POLARSSL_VERSION_C - * - * Comment this to disable run-time checking and save ROM space - */ -//#define POLARSSL_VERSION_FEATURES - -/** - * \def POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3 - * - * If set, the X509 parser will not break-off when parsing an X509 certificate - * and encountering an extension in a v1 or v2 certificate. - * - * Uncomment to prevent an error. - */ -//#define POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3 - -/** - * \def POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION - * - * If set, the X509 parser will not break-off when parsing an X509 certificate - * and encountering an unknown critical extension. - * - * Uncomment to prevent an error. - */ -//#define POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION - -/** - * \def POLARSSL_X509_CHECK_KEY_USAGE - * - * Enable verification of the keyUsage extension (CA and leaf certificates). - * - * Disabling this avoids problems with mis-issued and/or misused - * (intermediate) CA and leaf certificates. - * - * \warning Depending on your PKI use, disabling this can be a security risk! - * - * Comment to skip keyUsage checking for both CA and leaf certificates. - */ -//#define POLARSSL_X509_CHECK_KEY_USAGE - -/** - * \def POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE - * - * Enable verification of the extendedKeyUsage extension (leaf certificates). - * - * Disabling this avoids problems with mis-issued and/or misused certificates. - * - * \warning Depending on your PKI use, disabling this can be a security risk! - * - * Comment to skip extendedKeyUsage checking for certificates. - */ -//#define POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE - -/** - * \def POLARSSL_X509_RSASSA_PSS_SUPPORT - * - * Enable parsing and verification of X.509 certificates, CRLs and CSRS - * signed with RSASSA-PSS (aka PKCS#1 v2.1). - * - * Comment this macro to disallow using RSASSA-PSS in certificates. - */ -//#define POLARSSL_X509_RSASSA_PSS_SUPPORT - -/** - * \def POLARSSL_ZLIB_SUPPORT - * - * If set, the SSL/TLS module uses ZLIB to support compression and - * decompression of packet data. - * - * \warning TLS-level compression MAY REDUCE SECURITY! See for example the - * CRIME attack. Before enabling this option, you should examine with care if - * CRIME or similar exploits may be a applicable to your use case. - * - * Used in: library/ssl_tls.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * This feature requires zlib library and headers to be present. - * - * Uncomment to enable use of ZLIB - */ -//#define POLARSSL_ZLIB_SUPPORT -/* \} name SECTION: PolarSSL feature support */ - -/** - * \name SECTION: PolarSSL modules - * - * This section enables or disables entire modules in PolarSSL - * \{ - */ - -/** - * \def POLARSSL_AESNI_C - * - * Enable AES-NI support on x86-64. - * - * Module: library/aesni.c - * Caller: library/aes.c - * - * Requires: POLARSSL_HAVE_ASM - * - * This modules adds support for the AES-NI instructions on x86-64 - */ -//#define POLARSSL_AESNI_C - -/** - * \def POLARSSL_AES_C - * - * Enable the AES block cipher. - * - * Module: library/aes.c - * Caller: library/ssl_tls.c - * library/pem.c - * library/ctr_drbg.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA - * TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA - * TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA - * TLS_RSA_WITH_AES_256_GCM_SHA384 - * TLS_RSA_WITH_AES_256_CBC_SHA256 - * TLS_RSA_WITH_AES_256_CBC_SHA - * TLS_RSA_WITH_AES_128_GCM_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA - * TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA - * TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA - * TLS_PSK_WITH_AES_256_GCM_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA - * TLS_PSK_WITH_AES_128_GCM_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA - * - * PEM_PARSE uses AES for decrypting encrypted keys. - */ -#define POLARSSL_AES_C - -/** - * \def POLARSSL_ARC4_C - * - * Enable the ARCFOUR stream cipher. - * - * Module: library/arc4.c - * Caller: library/ssl_tls.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_RC4_128_SHA - * TLS_ECDH_RSA_WITH_RC4_128_SHA - * TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - * TLS_ECDHE_RSA_WITH_RC4_128_SHA - * TLS_ECDHE_PSK_WITH_RC4_128_SHA - * TLS_DHE_PSK_WITH_RC4_128_SHA - * TLS_RSA_WITH_RC4_128_SHA - * TLS_RSA_WITH_RC4_128_MD5 - * TLS_RSA_PSK_WITH_RC4_128_SHA - * TLS_PSK_WITH_RC4_128_SHA - */ -//#define POLARSSL_ARC4_C - -/** - * \def POLARSSL_ASN1_PARSE_C - * - * Enable the generic ASN1 parser. - * - * Module: library/asn1.c - * Caller: library/x509.c - * library/dhm.c - * library/pkcs12.c - * library/pkcs5.c - * library/pkparse.c - */ -#define POLARSSL_ASN1_PARSE_C - -/** - * \def POLARSSL_ASN1_WRITE_C - * - * Enable the generic ASN1 writer. - * - * Module: library/asn1write.c - * Caller: library/ecdsa.c - * library/pkwrite.c - * library/x509_create.c - * library/x509write_crt.c - * library/x509write_csr.c - */ -//#define POLARSSL_ASN1_WRITE_C - -/** - * \def POLARSSL_BASE64_C - * - * Enable the Base64 module. - * - * Module: library/base64.c - * Caller: library/pem.c - * - * This module is required for PEM support (required by X.509). - */ -#define POLARSSL_BASE64_C - -/** - * \def POLARSSL_BIGNUM_C - * - * Enable the multi-precision integer library. - * - * Module: library/bignum.c - * Caller: library/dhm.c - * library/ecp.c - * library/ecdsa.c - * library/rsa.c - * library/ssl_tls.c - * - * This module is required for RSA, DHM and ECC (ECDH, ECDSA) support. - */ -#define POLARSSL_BIGNUM_C - -/** - * \def POLARSSL_BLOWFISH_C - * - * Enable the Blowfish block cipher. - * - * Module: library/blowfish.c - */ -//#define POLARSSL_BLOWFISH_C - -/** - * \def POLARSSL_CAMELLIA_C - * - * Enable the Camellia block cipher. - * - * Module: library/camellia.c - * Caller: library/ssl_tls.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 - */ -//#define POLARSSL_CAMELLIA_C - -/** - * \def POLARSSL_CCM_C - * - * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. - * - * Module: library/ccm.c - * - * Requires: POLARSSL_AES_C or POLARSSL_CAMELLIA_C - * - * This module enables the AES-CCM ciphersuites, if other requisites are - * enabled as well. - */ -//#define POLARSSL_CCM_C - -/** - * \def POLARSSL_CERTS_C - * - * Enable the test certificates. - * - * Module: library/certs.c - * Caller: - * - * Requires: POLARSSL_PEM_PARSE_C - * - * This module is used for testing (ssl_client/server). - */ -//#define POLARSSL_CERTS_C - -/** - * \def POLARSSL_CIPHER_C - * - * Enable the generic cipher layer. - * - * Module: library/cipher.c - * Caller: library/ssl_tls.c - * - * Uncomment to enable generic cipher wrappers. - */ -#define POLARSSL_CIPHER_C - -/** - * \def POLARSSL_CTR_DRBG_C - * - * Enable the CTR_DRBG AES-256-based random generator. - * - * Module: library/ctr_drbg.c - * Caller: - * - * Requires: POLARSSL_AES_C - * - * This module provides the CTR_DRBG AES-256 random number generator. - */ -//#define POLARSSL_CTR_DRBG_C - -/** - * \def POLARSSL_DEBUG_C - * - * Enable the debug functions. - * - * Module: library/debug.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * This module provides debugging functions. - */ -//#define POLARSSL_DEBUG_C - -/** - * \def POLARSSL_DES_C - * - * Enable the DES block cipher. - * - * Module: library/des.c - * Caller: library/pem.c - * library/ssl_tls.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_PSK_WITH_3DES_EDE_CBC_SHA - * - * PEM_PARSE uses DES/3DES for decrypting encrypted keys. - */ -//#define POLARSSL_DES_C - -/** - * \def POLARSSL_DHM_C - * - * Enable the Diffie-Hellman-Merkle module. - * - * Module: library/dhm.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * This module is used by the following key exchanges: - * DHE-RSA, DHE-PSK - */ -//#define POLARSSL_DHM_C - -/** - * \def POLARSSL_ECDH_C - * - * Enable the elliptic curve Diffie-Hellman library. - * - * Module: library/ecdh.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * This module is used by the following key exchanges: - * ECDHE-ECDSA, ECDHE-RSA, DHE-PSK - * - * Requires: POLARSSL_ECP_C - */ -//#define POLARSSL_ECDH_C - -/** - * \def POLARSSL_ECDSA_C - * - * Enable the elliptic curve DSA library. - * - * Module: library/ecdsa.c - * Caller: - * - * This module is used by the following key exchanges: - * ECDHE-ECDSA - * - * Requires: POLARSSL_ECP_C, POLARSSL_ASN1_WRITE_C, POLARSSL_ASN1_PARSE_C - */ -//#define POLARSSL_ECDSA_C - -/** - * \def POLARSSL_ECP_C - * - * Enable the elliptic curve over GF(p) library. - * - * Module: library/ecp.c - * Caller: library/ecdh.c - * library/ecdsa.c - * - * Requires: POLARSSL_BIGNUM_C and at least one POLARSSL_ECP_DP_XXX_ENABLED - */ -//#define POLARSSL_ECP_C - -/** - * \def POLARSSL_ENTROPY_C - * - * Enable the platform-specific entropy code. - * - * Module: library/entropy.c - * Caller: - * - * Requires: POLARSSL_SHA512_C or POLARSSL_SHA256_C - * - * This module provides a generic entropy pool - */ -//#define POLARSSL_ENTROPY_C - -/** - * \def POLARSSL_ERROR_C - * - * Enable error code to error string conversion. - * - * Module: library/error.c - * Caller: - * - * This module enables polarssl_strerror(). - */ -#define POLARSSL_ERROR_C - -/** - * \def POLARSSL_GCM_C - * - * Enable the Galois/Counter Mode (GCM) for AES. - * - * Module: library/gcm.c - * - * Requires: POLARSSL_AES_C or POLARSSL_CAMELLIA_C - * - * This module enables the AES-GCM and CAMELLIA-GCM ciphersuites, if other - * requisites are enabled as well. - */ -//#define POLARSSL_GCM_C - -/** - * \def POLARSSL_HAVEGE_C - * - * Enable the HAVEGE random generator. - * - * Warning: the HAVEGE random generator is not suitable for virtualized - * environments - * - * Warning: the HAVEGE random generator is dependent on timing and specific - * processor traits. It is therefore not advised to use HAVEGE as - * your applications primary random generator or primary entropy pool - * input. As a secondary input to your entropy pool, it IS able add - * the (limited) extra entropy it provides. - * - * Module: library/havege.c - * Caller: - * - * Requires: POLARSSL_TIMING_C - * - * Uncomment to enable the HAVEGE random generator. - */ -//#define POLARSSL_HAVEGE_C - -/** - * \def POLARSSL_HMAC_DRBG_C - * - * Enable the HMAC_DRBG random generator. - * - * Module: library/hmac_drbg.c - * Caller: - * - * Requires: POLARSSL_MD_C - * - * Uncomment to enable the HMAC_DRBG random number geerator. - */ -//#define POLARSSL_HMAC_DRBG_C - -/** - * \def POLARSSL_MD_C - * - * Enable the generic message digest layer. - * - * Module: library/md.c - * Caller: - * - * Uncomment to enable generic message digest wrappers. - */ -#define POLARSSL_MD_C - -/** - * \def POLARSSL_MD2_C - * - * Enable the MD2 hash algorithm. - * - * Module: library/md2.c - * Caller: - * - * Uncomment to enable support for (rare) MD2-signed X.509 certs. - */ -//#define POLARSSL_MD2_C - -/** - * \def POLARSSL_MD4_C - * - * Enable the MD4 hash algorithm. - * - * Module: library/md4.c - * Caller: - * - * Uncomment to enable support for (rare) MD4-signed X.509 certs. - */ -//#define POLARSSL_MD4_C - -/** - * \def POLARSSL_MD5_C - * - * Enable the MD5 hash algorithm. - * - * Module: library/md5.c - * Caller: library/md.c - * library/pem.c - * library/ssl_tls.c - * - * This module is required for SSL/TLS and X.509. - * PEM_PARSE uses MD5 for decrypting encrypted keys. - */ -#define POLARSSL_MD5_C - -/** - * \def POLARSSL_MEMORY_C - * Deprecated since 1.3.5. Please use POLARSSL_PLATFORM_MEMORY instead. - */ -//#define POLARSSL_MEMORY_C - -/** - * \def POLARSSL_MEMORY_BUFFER_ALLOC_C - * - * Enable the buffer allocator implementation that makes use of a (stack) - * based buffer to 'allocate' dynamic memory. (replaces malloc() and free() - * calls) - * - * Module: library/memory_buffer_alloc.c - * - * Requires: POLARSSL_PLATFORM_C - * POLARSSL_PLATFORM_MEMORY (to use it within PolarSSL) - * - * Enable this module to enable the buffer memory allocator. - */ -//#define POLARSSL_MEMORY_BUFFER_ALLOC_C - -/** - * \def POLARSSL_NET_C - * - * Enable the TCP/IP networking routines. - * - * Module: library/net.c - * - * This module provides TCP/IP networking routines. - */ -#define POLARSSL_NET_C - -/** - * \def POLARSSL_OID_C - * - * Enable the OID database. - * - * Module: library/oid.c - * Caller: library/asn1write.c - * library/pkcs5.c - * library/pkparse.c - * library/pkwrite.c - * library/rsa.c - * library/x509.c - * library/x509_create.c - * library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * library/x509write_crt.c - * library/x509write_csr.c - * - * This modules translates between OIDs and internal values. - */ -#define POLARSSL_OID_C - -/** - * \def POLARSSL_PADLOCK_C - * - * Enable VIA Padlock support on x86. - * - * Module: library/padlock.c - * Caller: library/aes.c - * - * Requires: POLARSSL_HAVE_ASM - * - * This modules adds support for the VIA PadLock on x86. - */ -//#define POLARSSL_PADLOCK_C - -/** - * \def POLARSSL_PBKDF2_C - * - * Enable PKCS#5 PBKDF2 key derivation function. - * DEPRECATED: Use POLARSSL_PKCS5_C instead - * - * Module: library/pbkdf2.c - * - * Requires: POLARSSL_PKCS5_C - * - * This module adds support for the PKCS#5 PBKDF2 key derivation function. - */ -//#define POLARSSL_PBKDF2_C - -/** - * \def POLARSSL_PEM_PARSE_C - * - * Enable PEM decoding / parsing. - * - * Module: library/pem.c - * Caller: library/dhm.c - * library/pkparse.c - * library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * - * Requires: POLARSSL_BASE64_C - * - * This modules adds support for decoding / parsing PEM files. - */ -#define POLARSSL_PEM_PARSE_C - -/** - * \def POLARSSL_PEM_WRITE_C - * - * Enable PEM encoding / writing. - * - * Module: library/pem.c - * Caller: library/pkwrite.c - * library/x509write_crt.c - * library/x509write_csr.c - * - * Requires: POLARSSL_BASE64_C - * - * This modules adds support for encoding / writing PEM files. - */ -//#define POLARSSL_PEM_WRITE_C - -/** - * \def POLARSSL_PK_C - * - * Enable the generic public (asymetric) key layer. - * - * Module: library/pk.c - * Caller: library/ssl_tls.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * Requires: POLARSSL_RSA_C or POLARSSL_ECP_C - * - * Uncomment to enable generic public key wrappers. - */ -#define POLARSSL_PK_C - -/** - * \def POLARSSL_PK_PARSE_C - * - * Enable the generic public (asymetric) key parser. - * - * Module: library/pkparse.c - * Caller: library/x509_crt.c - * library/x509_csr.c - * - * Requires: POLARSSL_PK_C - * - * Uncomment to enable generic public key parse functions. - */ -#define POLARSSL_PK_PARSE_C - -/** - * \def POLARSSL_PK_WRITE_C - * - * Enable the generic public (asymetric) key writer. - * - * Module: library/pkwrite.c - * Caller: library/x509write.c - * - * Requires: POLARSSL_PK_C - * - * Uncomment to enable generic public key write functions. - */ -//#define POLARSSL_PK_WRITE_C - -/** - * \def POLARSSL_PKCS5_C - * - * Enable PKCS#5 functions. - * - * Module: library/pkcs5.c - * - * Requires: POLARSSL_MD_C - * - * This module adds support for the PKCS#5 functions. - */ -//#define POLARSSL_PKCS5_C - -/** - * \def POLARSSL_PKCS11_C - * - * Enable wrapper for PKCS#11 smartcard support. - * - * Module: library/pkcs11.c - * Caller: library/pk.c - * - * Requires: POLARSSL_PK_C - * - * This module enables SSL/TLS PKCS #11 smartcard support. - * Requires the presence of the PKCS#11 helper library (libpkcs11-helper) - */ -//#define POLARSSL_PKCS11_C - -/** - * \def POLARSSL_PKCS12_C - * - * Enable PKCS#12 PBE functions. - * Adds algorithms for parsing PKCS#8 encrypted private keys - * - * Module: library/pkcs12.c - * Caller: library/pkparse.c - * - * Requires: POLARSSL_ASN1_PARSE_C, POLARSSL_CIPHER_C, POLARSSL_MD_C - * Can use: POLARSSL_ARC4_C - * - * This module enables PKCS#12 functions. - */ -//#define POLARSSL_PKCS12_C - -/** - * \def POLARSSL_PLATFORM_C - * - * Enable the platform abstraction layer that allows you to re-assign - * functions like malloc(), free(), printf(), fprintf() - * - * Module: library/platform.c - * Caller: Most other .c files - * - * This module enables abstraction of common (libc) functions. - */ -#define POLARSSL_PLATFORM_C - -/** - * \def POLARSSL_RIPEMD160_C - * - * Enable the RIPEMD-160 hash algorithm. - * - * Module: library/ripemd160.c - * Caller: library/md.c - * - */ -//#define POLARSSL_RIPEMD160_C - -/** - * \def POLARSSL_RSA_C - * - * Enable the RSA public-key cryptosystem. - * - * Module: library/rsa.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * library/x509.c - * - * This module is used by the following key exchanges: - * RSA, DHE-RSA, ECDHE-RSA, RSA-PSK - * - * Requires: POLARSSL_BIGNUM_C, POLARSSL_OID_C - */ -#define POLARSSL_RSA_C - -/** - * \def POLARSSL_SHA1_C - * - * Enable the SHA1 cryptographic hash algorithm. - * - * Module: library/sha1.c - * Caller: library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * library/x509write_crt.c - * - * This module is required for SSL/TLS and SHA1-signed certificates. - */ -#define POLARSSL_SHA1_C - -/** - * \def POLARSSL_SHA256_C - * - * Enable the SHA-224 and SHA-256 cryptographic hash algorithms. - * (Used to be POLARSSL_SHA2_C) - * - * Module: library/sha256.c - * Caller: library/entropy.c - * library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * This module adds support for SHA-224 and SHA-256. - * This module is required for the SSL/TLS 1.2 PRF function. - */ -#define POLARSSL_SHA256_C - -/** - * \def POLARSSL_SHA512_C - * - * Enable the SHA-384 and SHA-512 cryptographic hash algorithms. - * (Used to be POLARSSL_SHA4_C) - * - * Module: library/sha512.c - * Caller: library/entropy.c - * library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * This module adds support for SHA-384 and SHA-512. - */ -#define POLARSSL_SHA512_C - -/** - * \def POLARSSL_SSL_CACHE_C - * - * Enable simple SSL cache implementation. - * - * Module: library/ssl_cache.c - * Caller: - * - * Requires: POLARSSL_SSL_CACHE_C - */ -#define POLARSSL_SSL_CACHE_C - -/** - * \def POLARSSL_SSL_CLI_C - * - * Enable the SSL/TLS client code. - * - * Module: library/ssl_cli.c - * Caller: - * - * Requires: POLARSSL_SSL_TLS_C - * - * This module is required for SSL/TLS client support. - */ -#define POLARSSL_SSL_CLI_C - -/** - * \def POLARSSL_SSL_SRV_C - * - * Enable the SSL/TLS server code. - * - * Module: library/ssl_srv.c - * Caller: - * - * Requires: POLARSSL_SSL_TLS_C - * - * This module is required for SSL/TLS server support. - */ -//#define POLARSSL_SSL_SRV_C - -/** - * \def POLARSSL_SSL_TLS_C - * - * Enable the generic SSL/TLS code. - * - * Module: library/ssl_tls.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * Requires: POLARSSL_CIPHER_C, POLARSSL_MD_C - * and at least one of the POLARSSL_SSL_PROTO_* defines - * - * This module is required for SSL/TLS. - */ -#define POLARSSL_SSL_TLS_C - -/** - * \def POLARSSL_THREADING_C - * - * Enable the threading abstraction layer. - * By default PolarSSL assumes it is used in a non-threaded environment or that - * contexts are not shared between threads. If you do intend to use contexts - * between threads, you will need to enable this layer to prevent race - * conditions. - * - * Module: library/threading.c - * - * This allows different threading implementations (self-implemented or - * provided). - * - * You will have to enable either POLARSSL_THREADING_ALT or - * POLARSSL_THREADING_PTHREAD. - * - * Enable this layer to allow use of mutexes within PolarSSL - */ -//#define POLARSSL_THREADING_C - -/** - * \def POLARSSL_TIMING_C - * - * Enable the portable timing interface. - * - * Module: library/timing.c - * Caller: library/havege.c - * - * This module is used by the HAVEGE random number generator. - */ -//#define POLARSSL_TIMING_C - -/** - * \def POLARSSL_VERSION_C - * - * Enable run-time version information. - * - * Module: library/version.c - * - * This module provides run-time version information. - */ -#define POLARSSL_VERSION_C - -/** - * \def POLARSSL_X509_USE_C - * - * Enable X.509 core for using certificates. - * - * Module: library/x509.c - * Caller: library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * - * Requires: POLARSSL_ASN1_PARSE_C, POLARSSL_BIGNUM_C, POLARSSL_OID_C, - * POLARSSL_PK_PARSE_C - * - * This module is required for the X.509 parsing modules. - */ -#define POLARSSL_X509_USE_C - -/** - * \def POLARSSL_X509_CRT_PARSE_C - * - * Enable X.509 certificate parsing. - * - * Module: library/x509_crt.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * Requires: POLARSSL_X509_USE_C - * - * This module is required for X.509 certificate parsing. - */ -#define POLARSSL_X509_CRT_PARSE_C - -/** - * \def POLARSSL_X509_CRL_PARSE_C - * - * Enable X.509 CRL parsing. - * - * Module: library/x509_crl.c - * Caller: library/x509_crt.c - * - * Requires: POLARSSL_X509_USE_C - * - * This module is required for X.509 CRL parsing. - */ -//#define POLARSSL_X509_CRL_PARSE_C - -/** - * \def POLARSSL_X509_CSR_PARSE_C - * - * Enable X.509 Certificate Signing Request (CSR) parsing. - * - * Module: library/x509_csr.c - * Caller: library/x509_crt_write.c - * - * Requires: POLARSSL_X509_USE_C - * - * This module is used for reading X.509 certificate request. - */ -//#define POLARSSL_X509_CSR_PARSE_C - -/** - * \def POLARSSL_X509_CREATE_C - * - * Enable X.509 core for creating certificates. - * - * Module: library/x509_create.c - * - * Requires: POLARSSL_BIGNUM_C, POLARSSL_OID_C, POLARSSL_PK_WRITE_C - * - * This module is the basis for creating X.509 certificates and CSRs. - */ -//#define POLARSSL_X509_CREATE_C - -/** - * \def POLARSSL_X509_CRT_WRITE_C - * - * Enable creating X.509 certificates. - * - * Module: library/x509_crt_write.c - * - * Requires: POLARSSL_CREATE_C - * - * This module is required for X.509 certificate creation. - */ -//#define POLARSSL_X509_CRT_WRITE_C - -/** - * \def POLARSSL_X509_CSR_WRITE_C - * - * Enable creating X.509 Certificate Signing Requests (CSR). - * - * Module: library/x509_csr_write.c - * - * Requires: POLARSSL_CREATE_C - * - * This module is required for X.509 certificate request writing. - */ -//#define POLARSSL_X509_CSR_WRITE_C - -/** - * \def POLARSSL_XTEA_C - * - * Enable the XTEA block cipher. - * - * Module: library/xtea.c - * Caller: - */ -//#define POLARSSL_XTEA_C - -/* \} name SECTION: PolarSSL modules */ - -/** - * \name SECTION: Module configuration options - * - * This section allows for the setting of module specific sizes and - * configuration options. The default values are already present in the - * relevant header files and should suffice for the regular use cases. - * - * Our advice is to enable options and change their values here - * only if you have a good reason and know the consequences. - * - * Please check the respective header file for documentation on these - * parameters (to prevent duplicate documentation). - * \{ - */ - -/* MPI / BIGNUM options */ -//#define POLARSSL_MPI_WINDOW_SIZE 6 /**< Maximum windows size used. */ -//#define POLARSSL_MPI_MAX_SIZE 512 /**< Maximum number of bytes for usable MPIs. */ - -/* CTR_DRBG options */ -//#define CTR_DRBG_ENTROPY_LEN 48 /**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */ -//#define CTR_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ -//#define CTR_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ -//#define CTR_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ -//#define CTR_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ - -/* HMAC_DRBG options */ -//#define POLARSSL_HMAC_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ -//#define POLARSSL_HMAC_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ -//#define POLARSSL_HMAC_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ -//#define POLARSSL_HMAC_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ - -/* ECP options */ -//#define POLARSSL_ECP_MAX_BITS 521 /**< Maximum bit size of groups */ -//#define POLARSSL_ECP_WINDOW_SIZE 6 /**< Maximum window size used */ -//#define POLARSSL_ECP_FIXED_POINT_OPTIM 1 /**< Enable fixed-point speed-up */ - -/* Entropy options */ -//#define ENTROPY_MAX_SOURCES 20 /**< Maximum number of sources supported */ -//#define ENTROPY_MAX_GATHER 128 /**< Maximum amount requested from entropy sources */ - -/* Memory buffer allocator options */ -//#define POLARSSL_MEMORY_ALIGN_MULTIPLE 4 /**< Align on multiples of this value */ - -/* Platform options */ -//#define POLARSSL_PLATFORM_STD_MEM_HDR /**< Header to include if POLARSSL_PLATFORM_NO_STD_FUNCTIONS is defined. Don't define if no header is needed. */ -//#define POLARSSL_PLATFORM_STD_MALLOC malloc /**< Default allocator to use, can be undefined */ -//#define POLARSSL_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */ -//#define POLARSSL_PLATFORM_STD_PRINTF printf /**< Default printf to use, can be undefined */ -//#define POLARSSL_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use, can be undefined */ - -/* SSL Cache options */ -//#define SSL_CACHE_DEFAULT_TIMEOUT 86400 /**< 1 day */ -//#define SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /**< Maximum entries in cache */ - -/* SSL options */ -/* if ssl_handshake returned -0x7200 -> -SSL_MAX_CONTENT_LEN to sufficient size (maximum value is 16384). */ -extern unsigned int mfl_code_to_length[]; -#define SSL_MAX_CONTENT_LEN mfl_code_to_length[0] // default = 4096 /**< Size of the input / output buffer */ -//#define SSL_MAX_CONTENT_LEN 4096 // mfl_code_to_length[5] // = 4096*3 // 4096 /**< Size of the input / output buffer */ -//#define SSL_DEFAULT_TICKET_LIFETIME 86400 /**< Lifetime of session tickets (if enabled) */ -//#define POLARSSL_PSK_MAX_LEN 32 /**< Max size of TLS pre-shared keys, in bytes (default 256 bits) */ - -/* Realteck Ameba HW Crypto */ -#define RTL_HW_CRYPTO -#define SUPPORT_HW_SW_CRYPTO -#define RTL_CRYPTO_FRAGMENT 15360 /* 15*1024 < 16000 */ - -/** - * Complete list of ciphersuites to use, in order of preference. - * - * \warning No dependency checking is done on that field! This option can only - * be used to restrict the set of available ciphersuites. It is your - * responsibility to make sure the needed modules are active. - * - * Use this to save a few hundred bytes of ROM (default ordering of all - * available ciphersuites) and a few to a few hundred bytes of RAM. - * - * The value below is only an example, not the default. - */ -//#define SSL_CIPHERSUITES TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - -/* Debug options */ -//#define POLARSSL_DEBUG_DFL_MODE POLARSSL_DEBUG_LOG_FULL /**< Default log: Full or Raw */ - -/* \} name SECTION: Module configuration options */ - -#include "check_config.h" - -#endif /* POLARSSL_CONFIG_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config_rom.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config_rom.h deleted file mode 100644 index 74968ba..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config_rom.h +++ /dev/null @@ -1,2188 +0,0 @@ -/** - * \file config.h - * - * \brief Configuration options (set of defines) - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * This set of compile-time options may be used to enable - * or disable features selectively, and reduce the global - * memory footprint. - */ -#ifndef POLARSSL_CONFIG_H -#define POLARSSL_CONFIG_H - -#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) -#define _CRT_SECURE_NO_DEPRECATE 1 -#endif - -/** - * \name SECTION: System support - * - * This section sets system specific settings. - * \{ - */ - -/** - * \def POLARSSL_HAVE_INT8 - * - * The system uses 8-bit wide native integers. - * - * Uncomment if native integers are 8-bit wide. - */ -//#define POLARSSL_HAVE_INT8 - -/** - * \def POLARSSL_HAVE_INT16 - * - * The system uses 16-bit wide native integers. - * - * Uncomment if native integers are 16-bit wide. - */ -//#define POLARSSL_HAVE_INT16 - -/** - * \def POLARSSL_HAVE_LONGLONG - * - * The compiler supports the 'long long' type. - * (Only used on 32-bit platforms) - */ -#define POLARSSL_HAVE_LONGLONG - -/** - * \def POLARSSL_HAVE_ASM - * - * The compiler has support for asm(). - * - * Requires support for asm() in compiler. - * - * Used in: - * library/timing.c - * library/padlock.c - * include/polarssl/bn_mul.h - * - * Comment to disable the use of assembly code. - */ -//#define POLARSSL_HAVE_ASM - -/** - * \def POLARSSL_HAVE_SSE2 - * - * CPU supports SSE2 instruction set. - * - * Uncomment if the CPU supports SSE2 (IA-32 specific). - */ -//#define POLARSSL_HAVE_SSE2 - -/** - * \def POLARSSL_HAVE_TIME - * - * System has time.h and time() / localtime() / gettimeofday(). - * - * Comment if your system does not support time functions - */ -//#define POLARSSL_HAVE_TIME - -/** - * \def POLARSSL_HAVE_IPV6 - * - * System supports the basic socket interface for IPv6 (RFC 3493), - * specifically getaddrinfo(), freeaddrinfo() and struct sockaddr_storage. - * - * Note: on Windows/MingW, XP or higher is required. - * - * Comment if your system does not support the IPv6 socket interface - */ -//#define POLARSSL_HAVE_IPV6 - -/** - * \def POLARSSL_PLATFORM_MEMORY - * - * Enable the memory allocation layer. - * - * By default PolarSSL uses the system-provided malloc() and free(). - * This allows different allocators (self-implemented or provided) to be - * provided to the platform abstraction layer. - * - * Enabling POLARSSL_PLATFORM_MEMORY will provide "platform_set_malloc_free()" - * to allow you to set an alternative malloc() and free() function pointer. - * - * Requires: POLARSSL_PLATFORM_C - * - * Enable this layer to allow use of alternative memory allocators. - */ -//#define POLARSSL_PLATFORM_MEMORY - -/** - * \def POLARSSL_PLATFORM_NO_STD_FUNCTIONS - * - * Do not assign standard functions in the platform layer (e.g. malloc() to - * POLARSSL_PLATFORM_STD_MALLOC and printf() to POLARSSL_PLATFORM_STD_PRINTF) - * - * This makes sure there are no linking errors on platforms that do not support - * these functions. You will HAVE to provide alternatives, either at runtime - * via the platform_set_xxx() functions or at compile time by setting - * the POLARSSL_PLATFORM_STD_XXX defines. - * - * Requires: POLARSSL_PLATFORM_C - * - * Uncomment to prevent default assignment of standard functions in the - * platform layer. - */ -#define POLARSSL_PLATFORM_NO_STD_FUNCTIONS - -/** - * \def POLARSSL_PLATFORM_XXX_ALT - * - * Uncomment a macro to let PolarSSL support the function in the platform - * abstraction layer. - * - * Example: In case you uncomment POLARSSL_PLATFORM_PRINTF_ALT, PolarSSL will - * provide a function "platform_set_printf()" that allows you to set an - * alternative printf function pointer. - * - * All these define require POLARSSL_PLATFORM_C to be defined! - * - * Uncomment a macro to enable alternate implementation of specific base - * platform function - */ -//#define POLARSSL_PLATFORM_PRINTF_ALT -//#define POLARSSL_PLATFORM_FPRINTF_ALT -/* \} name SECTION: System support */ - -/** - * \name SECTION: PolarSSL feature support - * - * This section sets support for features that are or are not needed - * within the modules that are enabled. - * \{ - */ - -/** - * \def POLARSSL_TIMING_ALT - * - * Uncomment to provide your own alternate implementation for hardclock(), - * get_timer(), set_alarm() and m_sleep(). - * - * Only works if you have POLARSSL_TIMING_C enabled. - * - * You will need to provide a header "timing_alt.h" and an implementation at - * compile time. - */ -//#define POLARSSL_TIMING_ALT - -/** - * \def POLARSSL_XXX_ALT - * - * Uncomment a macro to let PolarSSL use your alternate core implementation of - * a symmetric or hash algorithm (e.g. platform specific assembly optimized - * implementations). Keep in mind that the function prototypes should remain - * the same. - * - * Example: In case you uncomment POLARSSL_AES_ALT, PolarSSL will no longer - * provide the "struct aes_context" definition and omit the base function - * declarations and implementations. "aes_alt.h" will be included from - * "aes.h" to include the new function definitions. - * - * Uncomment a macro to enable alternate implementation for core algorithm - * functions - */ -//#define POLARSSL_AES_ALT -//#define POLARSSL_ARC4_ALT -//#define POLARSSL_BLOWFISH_ALT -//#define POLARSSL_CAMELLIA_ALT -//#define POLARSSL_DES_ALT -//#define POLARSSL_XTEA_ALT -//#define POLARSSL_MD2_ALT -//#define POLARSSL_MD4_ALT -//#define POLARSSL_MD5_ALT -//#define POLARSSL_RIPEMD160_ALT -//#define POLARSSL_SHA1_ALT -//#define POLARSSL_SHA256_ALT -//#define POLARSSL_SHA512_ALT - -/** - * \def POLARSSL_AES_ROM_TABLES - * - * Store the AES tables in ROM. - * - * Uncomment this macro to store the AES tables in ROM. - * - */ -#define POLARSSL_AES_ROM_TABLES - -/** - * \def POLARSSL_CIPHER_MODE_CBC - * - * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. - */ -#define POLARSSL_CIPHER_MODE_CBC - -/** - * \def POLARSSL_CIPHER_MODE_CFB - * - * Enable Cipher Feedback mode (CFB) for symmetric ciphers. - */ -#define POLARSSL_CIPHER_MODE_CFB - -/** - * \def POLARSSL_CIPHER_MODE_CTR - * - * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. - */ -#define POLARSSL_CIPHER_MODE_CTR - -/** - * \def POLARSSL_CIPHER_NULL_CIPHER - * - * Enable NULL cipher. - * Warning: Only do so when you know what you are doing. This allows for - * encryption or channels without any security! - * - * Requires POLARSSL_ENABLE_WEAK_CIPHERSUITES as well to enable - * the following ciphersuites: - * TLS_ECDH_ECDSA_WITH_NULL_SHA - * TLS_ECDH_RSA_WITH_NULL_SHA - * TLS_ECDHE_ECDSA_WITH_NULL_SHA - * TLS_ECDHE_RSA_WITH_NULL_SHA - * TLS_ECDHE_PSK_WITH_NULL_SHA384 - * TLS_ECDHE_PSK_WITH_NULL_SHA256 - * TLS_ECDHE_PSK_WITH_NULL_SHA - * TLS_DHE_PSK_WITH_NULL_SHA384 - * TLS_DHE_PSK_WITH_NULL_SHA256 - * TLS_DHE_PSK_WITH_NULL_SHA - * TLS_RSA_WITH_NULL_SHA256 - * TLS_RSA_WITH_NULL_SHA - * TLS_RSA_WITH_NULL_MD5 - * TLS_RSA_PSK_WITH_NULL_SHA384 - * TLS_RSA_PSK_WITH_NULL_SHA256 - * TLS_RSA_PSK_WITH_NULL_SHA - * TLS_PSK_WITH_NULL_SHA384 - * TLS_PSK_WITH_NULL_SHA256 - * TLS_PSK_WITH_NULL_SHA - * - * Uncomment this macro to enable the NULL cipher and ciphersuites - */ -//#define POLARSSL_CIPHER_NULL_CIPHER - -/** - * \def POLARSSL_CIPHER_PADDING_XXX - * - * Uncomment or comment macros to add support for specific padding modes - * in the cipher layer with cipher modes that support padding (e.g. CBC) - * - * If you disable all padding modes, only full blocks can be used with CBC. - * - * Enable padding modes in the cipher layer. - */ -#define POLARSSL_CIPHER_PADDING_PKCS7 -#define POLARSSL_CIPHER_PADDING_ONE_AND_ZEROS -#define POLARSSL_CIPHER_PADDING_ZEROS_AND_LEN -#define POLARSSL_CIPHER_PADDING_ZEROS - -/** - * \def POLARSSL_ENABLE_WEAK_CIPHERSUITES - * - * Enable weak ciphersuites in SSL / TLS. - * Warning: Only do so when you know what you are doing. This allows for - * channels with virtually no security at all! - * - * This enables the following ciphersuites: - * TLS_RSA_WITH_DES_CBC_SHA - * TLS_DHE_RSA_WITH_DES_CBC_SHA - * - * Uncomment this macro to enable weak ciphersuites - */ -//#define POLARSSL_ENABLE_WEAK_CIPHERSUITES - -/** - * \def POLARSSL_REMOVE_ARC4_CIPHERSUITES - * - * Remove RC4 ciphersuites by default in SSL / TLS. - * This flag removes the ciphersuites based on RC4 from the default list as - * returned by ssl_list_ciphersuites(). However, it is still possible to - * enable (some of) them with ssl_set_ciphersuites() by including them - * explicitly. - * - * Uncomment this macro to remove RC4 ciphersuites by default. - */ -//#define POLARSSL_REMOVE_ARC4_CIPHERSUITES - -/** - * \def POLARSSL_ECP_XXXX_ENABLED - * - * Enables specific curves within the Elliptic Curve module. - * By default all supported curves are enabled. - * - * Comment macros to disable the curve and functions for it - */ -#define POLARSSL_ECP_DP_SECP192R1_ENABLED -#define POLARSSL_ECP_DP_SECP224R1_ENABLED -#define POLARSSL_ECP_DP_SECP256R1_ENABLED -#define POLARSSL_ECP_DP_SECP384R1_ENABLED -#define POLARSSL_ECP_DP_SECP521R1_ENABLED -#define POLARSSL_ECP_DP_SECP192K1_ENABLED -#define POLARSSL_ECP_DP_SECP224K1_ENABLED -#define POLARSSL_ECP_DP_SECP256K1_ENABLED -#define POLARSSL_ECP_DP_BP256R1_ENABLED -#define POLARSSL_ECP_DP_BP384R1_ENABLED -#define POLARSSL_ECP_DP_BP512R1_ENABLED -//#define POLARSSL_ECP_DP_M221_ENABLED // Not implemented yet! -#define POLARSSL_ECP_DP_M255_ENABLED -//#define POLARSSL_ECP_DP_M383_ENABLED // Not implemented yet! -//#define POLARSSL_ECP_DP_M511_ENABLED // Not implemented yet! - -/** - * \def POLARSSL_ECP_NIST_OPTIM - * - * Enable specific 'modulo p' routines for each NIST prime. - * Depending on the prime and architecture, makes operations 4 to 8 times - * faster on the corresponding curve. - * - * Comment this macro to disable NIST curves optimisation. - */ -#define POLARSSL_ECP_NIST_OPTIM - -/** - * \def POLARSSL_ECDSA_DETERMINISTIC - * - * Enable deterministic ECDSA (RFC 6979). - * Standard ECDSA is "fragile" in the sense that lack of entropy when signing - * may result in a compromise of the long-term signing key. This is avoided by - * the deterministic variant. - * - * Requires: POLARSSL_HMAC_DRBG_C - * - * Comment this macro to disable deterministic ECDSA. - */ -#define POLARSSL_ECDSA_DETERMINISTIC - -/** - * \def POLARSSL_KEY_EXCHANGE_PSK_ENABLED - * - * Enable the PSK based ciphersuite modes in SSL / TLS. - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_PSK_WITH_AES_256_GCM_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA - * TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_PSK_WITH_AES_128_GCM_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA - * TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_PSK_WITH_RC4_128_SHA - */ -#define POLARSSL_KEY_EXCHANGE_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED - * - * Enable the DHE-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_DHM_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA - * TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA - * TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_DHE_PSK_WITH_RC4_128_SHA - */ -#define POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED - * - * Enable the ECDHE-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA - * TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA - * TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_PSK_WITH_RC4_128_SHA - */ -#define POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED - * - * Enable the RSA-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA - * TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA - * TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_PSK_WITH_RC4_128_SHA - */ -#define POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_RSA_ENABLED - * - * Enable the RSA-only based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_RSA_WITH_AES_256_GCM_SHA384 - * TLS_RSA_WITH_AES_256_CBC_SHA256 - * TLS_RSA_WITH_AES_256_CBC_SHA - * TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_RSA_WITH_AES_128_GCM_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA - * TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_WITH_RC4_128_SHA - * TLS_RSA_WITH_RC4_128_MD5 - */ -#define POLARSSL_KEY_EXCHANGE_RSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED - * - * Enable the DHE-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_DHM_C, POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA - * TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA - * TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - */ -#define POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED - * - * Enable the ECDHE-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_RSA_WITH_RC4_128_SHA - */ -#define POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED - * - * Enable the ECDHE-ECDSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_ECDSA_C, POLARSSL_X509_CRT_PARSE_C, - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - */ -#define POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED - * - * Enable the ECDH-ECDSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_RC4_128_SHA - * TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - */ -#define POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED - * - * Enable the ECDH-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_RSA_WITH_RC4_128_SHA - * TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 - */ -#define POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED - -/** - * \def POLARSSL_PK_PARSE_EC_EXTENDED - * - * Enhance support for reading EC keys using variants of SEC1 not allowed by - * RFC 5915 and RFC 5480. - * - * Currently this means parsing the SpecifiedECDomain choice of EC - * parameters (only known groups are supported, not arbitrary domains, to - * avoid validation issues). - * - * Disable if you only need to support RFC 5915 + 5480 key formats. - */ -#define POLARSSL_PK_PARSE_EC_EXTENDED - -/** - * \def POLARSSL_ERROR_STRERROR_BC - * - * Make available the backward compatible error_strerror() next to the - * current polarssl_strerror(). - * - * For new code, it is recommended to use polarssl_strerror() instead and - * disable this. - * - * Disable if you run into name conflicts and want to really remove the - * error_strerror() - */ -#define POLARSSL_ERROR_STRERROR_BC - -/** - * \def POLARSSL_ERROR_STRERROR_DUMMY - * - * Enable a dummy error function to make use of polarssl_strerror() in - * third party libraries easier when POLARSSL_ERROR_C is disabled - * (no effect when POLARSSL_ERROR_C is enabled). - * - * You can safely disable this if POLARSSL_ERROR_C is enabled, or if you're - * not using polarssl_strerror() or error_strerror() in your application. - * - * Disable if you run into name conflicts and want to really remove the - * polarssl_strerror() - */ -#define POLARSSL_ERROR_STRERROR_DUMMY - -/** - * \def POLARSSL_GENPRIME - * - * Enable the prime-number generation code. - * - * Requires: POLARSSL_BIGNUM_C - */ -#define POLARSSL_GENPRIME - -/** - * \def POLARSSL_FS_IO - * - * Enable functions that use the filesystem. - */ -//#define POLARSSL_FS_IO - -/** - * \def POLARSSL_NO_DEFAULT_ENTROPY_SOURCES - * - * Do not add default entropy sources. These are the platform specific, - * hardclock and HAVEGE based poll functions. - * - * This is useful to have more control over the added entropy sources in an - * application. - * - * Uncomment this macro to prevent loading of default entropy functions. - */ -//#define POLARSSL_NO_DEFAULT_ENTROPY_SOURCES - -/** - * \def POLARSSL_NO_PLATFORM_ENTROPY - * - * Do not use built-in platform entropy functions. - * This is useful if your platform does not support - * standards like the /dev/urandom or Windows CryptoAPI. - * - * Uncomment this macro to disable the built-in platform entropy functions. - */ -//#define POLARSSL_NO_PLATFORM_ENTROPY - -/** - * \def POLARSSL_ENTROPY_FORCE_SHA256 - * - * Force the entropy accumulator to use a SHA-256 accumulator instead of the - * default SHA-512 based one (if both are available). - * - * Requires: POLARSSL_SHA256_C - * - * On 32-bit systems SHA-256 can be much faster than SHA-512. Use this option - * if you have performance concerns. - * - * This option is only useful if both POLARSSL_SHA256_C and - * POLARSSL_SHA512_C are defined. Otherwise the available hash module is used. - */ -//#define POLARSSL_ENTROPY_FORCE_SHA256 - -/** - * \def POLARSSL_MEMORY_DEBUG - * - * Enable debugging of buffer allocator memory issues. Automatically prints - * (to stderr) all (fatal) messages on memory allocation issues. Enables - * function for 'debug output' of allocated memory. - * - * Requires: POLARSSL_MEMORY_BUFFER_ALLOC_C - * - * Uncomment this macro to let the buffer allocator print out error messages. - */ -//#define POLARSSL_MEMORY_DEBUG - -/** - * \def POLARSSL_MEMORY_BACKTRACE - * - * Include backtrace information with each allocated block. - * - * Requires: POLARSSL_MEMORY_BUFFER_ALLOC_C - * GLIBC-compatible backtrace() an backtrace_symbols() support - * - * Uncomment this macro to include backtrace information - */ -//#define POLARSSL_MEMORY_BACKTRACE - -/** - * \def POLARSSL_PKCS1_V15 - * - * Enable support for PKCS#1 v1.5 encoding. - * - * Requires: POLARSSL_RSA_C - * - * This enables support for PKCS#1 v1.5 operations. - */ -#define POLARSSL_PKCS1_V15 - -/** - * \def POLARSSL_PKCS1_V21 - * - * Enable support for PKCS#1 v2.1 encoding. - * - * Requires: POLARSSL_MD_C, POLARSSL_RSA_C - * - * This enables support for RSAES-OAEP and RSASSA-PSS operations. - */ -#define POLARSSL_PKCS1_V21 - -/** - * \def POLARSSL_RSA_NO_CRT - * - * Do not use the Chinese Remainder Theorem for the RSA private operation. - * - * Uncomment this macro to disable the use of CRT in RSA. - * - */ -//#define POLARSSL_RSA_NO_CRT - -/** - * \def POLARSSL_SELF_TEST - * - * Enable the checkup functions (*_self_test). - */ -//#define POLARSSL_SELF_TEST - -/** - * \def POLARSSL_SSL_ALL_ALERT_MESSAGES - * - * Enable sending of alert messages in case of encountered errors as per RFC. - * If you choose not to send the alert messages, PolarSSL can still communicate - * with other servers, only debugging of failures is harder. - * - * The advantage of not sending alert messages, is that no information is given - * about reasons for failures thus preventing adversaries of gaining intel. - * - * Enable sending of all alert messages - */ -#define POLARSSL_SSL_ALERT_MESSAGES - -/** - * \def POLARSSL_SSL_DEBUG_ALL - * - * Enable the debug messages in SSL module for all issues. - * Debug messages have been disabled in some places to prevent timing - * attacks due to (unbalanced) debugging function calls. - * - * If you need all error reporting you should enable this during debugging, - * but remove this for production servers that should log as well. - * - * Uncomment this macro to report all debug messages on errors introducing - * a timing side-channel. - * - */ -//#define POLARSSL_SSL_DEBUG_ALL - -/** - * \def POLARSSL_SSL_HW_RECORD_ACCEL - * - * Enable hooking functions in SSL module for hardware acceleration of - * individual records. - * - * Uncomment this macro to enable hooking functions. - */ -//#define POLARSSL_SSL_HW_RECORD_ACCEL - -/** - * \def POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO - * - * Enable support for receiving and parsing SSLv2 Client Hello messages for the - * SSL Server module (POLARSSL_SSL_SRV_C). - * - * Comment this macro to disable support for SSLv2 Client Hello messages. - */ -//#define POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO - -/** - * \def POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE - * - * Pick the ciphersuite according to the client's preferences rather than ours - * in the SSL Server module (POLARSSL_SSL_SRV_C). - * - * Uncomment this macro to respect client's ciphersuite order - */ -//#define POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE - -/** - * \def POLARSSL_SSL_MAX_FRAGMENT_LENGTH - * - * Enable support for RFC 6066 max_fragment_length extension in SSL. - * - * Comment this macro to disable support for the max_fragment_length extension - */ -#define POLARSSL_SSL_MAX_FRAGMENT_LENGTH - -/** - * \def POLARSSL_SSL_PROTO_SSL3 - * - * Enable support for SSL 3.0. - * - * Requires: POLARSSL_MD5_C - * POLARSSL_SHA1_C - * - * Comment this macro to disable support for SSL 3.0 - */ -#define POLARSSL_SSL_PROTO_SSL3 - -/** - * \def POLARSSL_SSL_PROTO_TLS1 - * - * Enable support for TLS 1.0. - * - * Requires: POLARSSL_MD5_C - * POLARSSL_SHA1_C - * - * Comment this macro to disable support for TLS 1.0 - */ -#define POLARSSL_SSL_PROTO_TLS1 - -/** - * \def POLARSSL_SSL_PROTO_TLS1_1 - * - * Enable support for TLS 1.1. - * - * Requires: POLARSSL_MD5_C - * POLARSSL_SHA1_C - * - * Comment this macro to disable support for TLS 1.1 - */ -#define POLARSSL_SSL_PROTO_TLS1_1 - -/** - * \def POLARSSL_SSL_PROTO_TLS1_2 - * - * Enable support for TLS 1.2. - * - * Requires: POLARSSL_SHA1_C or POLARSSL_SHA256_C or POLARSSL_SHA512_C - * (Depends on ciphersuites) - * - * Comment this macro to disable support for TLS 1.2 - */ -#define POLARSSL_SSL_PROTO_TLS1_2 - -/** - * \def POLARSSL_SSL_ALPN - * - * Enable support for Application Layer Protocol Negotiation. - * draft-ietf-tls-applayerprotoneg-05 - * - * Comment this macro to disable support for ALPN. - */ -#define POLARSSL_SSL_ALPN - -/** - * \def POLARSSL_SSL_SESSION_TICKETS - * - * Enable support for RFC 5077 session tickets in SSL. - * - * Requires: POLARSSL_AES_C - * POLARSSL_SHA256_C - * POLARSSL_CIPHER_MODE_CBC - * - * Comment this macro to disable support for SSL session tickets - */ -#define POLARSSL_SSL_SESSION_TICKETS - -/** - * \def POLARSSL_SSL_SERVER_NAME_INDICATION - * - * Enable support for RFC 6066 server name indication (SNI) in SSL. - * - * Comment this macro to disable support for server name indication in SSL - */ -#define POLARSSL_SSL_SERVER_NAME_INDICATION - -/** - * \def POLARSSL_SSL_TRUNCATED_HMAC - * - * Enable support for RFC 6066 truncated HMAC in SSL. - * - * Comment this macro to disable support for truncated HMAC in SSL - */ -#define POLARSSL_SSL_TRUNCATED_HMAC - -/** - * \def POLARSSL_SSL_SET_CURVES - * - * Enable ssl_set_curves(). - * - * This is disabled by default since it breaks binary compatibility with the - * 1.3.x line. If you choose to enable it, you will need to rebuild your - * application against the new header files, relinking will not be enough. - * It will be enabled by default, or no longer an option, in the 1.4 branch. - * - * Uncomment to make ssl_set_curves() available. - */ -//#define POLARSSL_SSL_SET_CURVES - -/** - * \def POLARSSL_THREADING_ALT - * - * Provide your own alternate threading implementation. - * - * Requires: POLARSSL_THREADING_C - * - * Uncomment this to allow your own alternate threading implementation. - */ -//#define POLARSSL_THREADING_ALT - -/** - * \def POLARSSL_THREADING_PTHREAD - * - * Enable the pthread wrapper layer for the threading layer. - * - * Requires: POLARSSL_THREADING_C - * - * Uncomment this to enable pthread mutexes. - */ -//#define POLARSSL_THREADING_PTHREAD - -/** - * \def POLARSSL_VERSION_FEATURES - * - * Allow run-time checking of compile-time enabled features. Thus allowing users - * to check at run-time if the library is for instance compiled with threading - * support via version_check_feature(). - * - * Requires: POLARSSL_VERSION_C - * - * Comment this to disable run-time checking and save ROM space - */ -//#define POLARSSL_VERSION_FEATURES - -/** - * \def POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3 - * - * If set, the X509 parser will not break-off when parsing an X509 certificate - * and encountering an extension in a v1 or v2 certificate. - * - * Uncomment to prevent an error. - */ -//#define POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3 - -/** - * \def POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION - * - * If set, the X509 parser will not break-off when parsing an X509 certificate - * and encountering an unknown critical extension. - * - * Uncomment to prevent an error. - */ -//#define POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION - -/** - * \def POLARSSL_X509_CHECK_KEY_USAGE - * - * Enable verification of the keyUsage extension (CA and leaf certificates). - * - * Disabling this avoids problems with mis-issued and/or misused - * (intermediate) CA and leaf certificates. - * - * \warning Depending on your PKI use, disabling this can be a security risk! - * - * Comment to skip keyUsage checking for both CA and leaf certificates. - */ -#define POLARSSL_X509_CHECK_KEY_USAGE - -/** - * \def POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE - * - * Enable verification of the extendedKeyUsage extension (leaf certificates). - * - * Disabling this avoids problems with mis-issued and/or misused certificates. - * - * \warning Depending on your PKI use, disabling this can be a security risk! - * - * Comment to skip extendedKeyUsage checking for certificates. - */ -#define POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE - -/** - * \def POLARSSL_X509_RSASSA_PSS_SUPPORT - * - * Enable parsing and verification of X.509 certificates, CRLs and CSRS - * signed with RSASSA-PSS (aka PKCS#1 v2.1). - * - * Comment this macro to disallow using RSASSA-PSS in certificates. - */ -#define POLARSSL_X509_RSASSA_PSS_SUPPORT - -/** - * \def POLARSSL_ZLIB_SUPPORT - * - * If set, the SSL/TLS module uses ZLIB to support compression and - * decompression of packet data. - * - * \warning TLS-level compression MAY REDUCE SECURITY! See for example the - * CRIME attack. Before enabling this option, you should examine with care if - * CRIME or similar exploits may be a applicable to your use case. - * - * Used in: library/ssl_tls.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * This feature requires zlib library and headers to be present. - * - * Uncomment to enable use of ZLIB - */ -//#define POLARSSL_ZLIB_SUPPORT -/* \} name SECTION: PolarSSL feature support */ - -/** - * \name SECTION: PolarSSL modules - * - * This section enables or disables entire modules in PolarSSL - * \{ - */ - -/** - * \def POLARSSL_AESNI_C - * - * Enable AES-NI support on x86-64. - * - * Module: library/aesni.c - * Caller: library/aes.c - * - * Requires: POLARSSL_HAVE_ASM - * - * This modules adds support for the AES-NI instructions on x86-64 - */ -//#define POLARSSL_AESNI_C - -/** - * \def POLARSSL_AES_C - * - * Enable the AES block cipher. - * - * Module: library/aes.c - * Caller: library/ssl_tls.c - * library/pem.c - * library/ctr_drbg.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA - * TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA - * TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA - * TLS_RSA_WITH_AES_256_GCM_SHA384 - * TLS_RSA_WITH_AES_256_CBC_SHA256 - * TLS_RSA_WITH_AES_256_CBC_SHA - * TLS_RSA_WITH_AES_128_GCM_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA - * TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA - * TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA - * TLS_PSK_WITH_AES_256_GCM_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA - * TLS_PSK_WITH_AES_128_GCM_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA - * - * PEM_PARSE uses AES for decrypting encrypted keys. - */ -#define POLARSSL_AES_C - -/** - * \def POLARSSL_ARC4_C - * - * Enable the ARCFOUR stream cipher. - * - * Module: library/arc4.c - * Caller: library/ssl_tls.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_RC4_128_SHA - * TLS_ECDH_RSA_WITH_RC4_128_SHA - * TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - * TLS_ECDHE_RSA_WITH_RC4_128_SHA - * TLS_ECDHE_PSK_WITH_RC4_128_SHA - * TLS_DHE_PSK_WITH_RC4_128_SHA - * TLS_RSA_WITH_RC4_128_SHA - * TLS_RSA_WITH_RC4_128_MD5 - * TLS_RSA_PSK_WITH_RC4_128_SHA - * TLS_PSK_WITH_RC4_128_SHA - */ -#define POLARSSL_ARC4_C - -/** - * \def POLARSSL_ASN1_PARSE_C - * - * Enable the generic ASN1 parser. - * - * Module: library/asn1.c - * Caller: library/x509.c - * library/dhm.c - * library/pkcs12.c - * library/pkcs5.c - * library/pkparse.c - */ -#define POLARSSL_ASN1_PARSE_C - -/** - * \def POLARSSL_ASN1_WRITE_C - * - * Enable the generic ASN1 writer. - * - * Module: library/asn1write.c - * Caller: library/ecdsa.c - * library/pkwrite.c - * library/x509_create.c - * library/x509write_crt.c - * library/x509write_csr.c - */ -#define POLARSSL_ASN1_WRITE_C - -/** - * \def POLARSSL_BASE64_C - * - * Enable the Base64 module. - * - * Module: library/base64.c - * Caller: library/pem.c - * - * This module is required for PEM support (required by X.509). - */ -#define POLARSSL_BASE64_C - -/** - * \def POLARSSL_BIGNUM_C - * - * Enable the multi-precision integer library. - * - * Module: library/bignum.c - * Caller: library/dhm.c - * library/ecp.c - * library/ecdsa.c - * library/rsa.c - * library/ssl_tls.c - * - * This module is required for RSA, DHM and ECC (ECDH, ECDSA) support. - */ -#define POLARSSL_BIGNUM_C - -/** - * \def POLARSSL_BLOWFISH_C - * - * Enable the Blowfish block cipher. - * - * Module: library/blowfish.c - */ -//#define POLARSSL_BLOWFISH_C - -/** - * \def POLARSSL_CAMELLIA_C - * - * Enable the Camellia block cipher. - * - * Module: library/camellia.c - * Caller: library/ssl_tls.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 - */ -//#define POLARSSL_CAMELLIA_C - -/** - * \def POLARSSL_CCM_C - * - * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. - * - * Module: library/ccm.c - * - * Requires: POLARSSL_AES_C or POLARSSL_CAMELLIA_C - * - * This module enables the AES-CCM ciphersuites, if other requisites are - * enabled as well. - */ -#define POLARSSL_CCM_C - -/** - * \def POLARSSL_CERTS_C - * - * Enable the test certificates. - * - * Module: library/certs.c - * Caller: - * - * Requires: POLARSSL_PEM_PARSE_C - * - * This module is used for testing (ssl_client/server). - */ -//#define POLARSSL_CERTS_C - -/** - * \def POLARSSL_CIPHER_C - * - * Enable the generic cipher layer. - * - * Module: library/cipher.c - * Caller: library/ssl_tls.c - * - * Uncomment to enable generic cipher wrappers. - */ -#define POLARSSL_CIPHER_C - -/** - * \def POLARSSL_CTR_DRBG_C - * - * Enable the CTR_DRBG AES-256-based random generator. - * - * Module: library/ctr_drbg.c - * Caller: - * - * Requires: POLARSSL_AES_C - * - * This module provides the CTR_DRBG AES-256 random number generator. - */ -#define POLARSSL_CTR_DRBG_C - -/** - * \def POLARSSL_DEBUG_C - * - * Enable the debug functions. - * - * Module: library/debug.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * This module provides debugging functions. - */ -//#define POLARSSL_DEBUG_C - -/** - * \def POLARSSL_DES_C - * - * Enable the DES block cipher. - * - * Module: library/des.c - * Caller: library/pem.c - * library/ssl_tls.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_PSK_WITH_3DES_EDE_CBC_SHA - * - * PEM_PARSE uses DES/3DES for decrypting encrypted keys. - */ -#define POLARSSL_DES_C - -/** - * \def POLARSSL_DHM_C - * - * Enable the Diffie-Hellman-Merkle module. - * - * Module: library/dhm.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * This module is used by the following key exchanges: - * DHE-RSA, DHE-PSK - */ -#define POLARSSL_DHM_C - -/** - * \def POLARSSL_ECDH_C - * - * Enable the elliptic curve Diffie-Hellman library. - * - * Module: library/ecdh.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * This module is used by the following key exchanges: - * ECDHE-ECDSA, ECDHE-RSA, DHE-PSK - * - * Requires: POLARSSL_ECP_C - */ -#define POLARSSL_ECDH_C - -/** - * \def POLARSSL_ECDSA_C - * - * Enable the elliptic curve DSA library. - * - * Module: library/ecdsa.c - * Caller: - * - * This module is used by the following key exchanges: - * ECDHE-ECDSA - * - * Requires: POLARSSL_ECP_C, POLARSSL_ASN1_WRITE_C, POLARSSL_ASN1_PARSE_C - */ -#define POLARSSL_ECDSA_C - -/** - * \def POLARSSL_ECP_C - * - * Enable the elliptic curve over GF(p) library. - * - * Module: library/ecp.c - * Caller: library/ecdh.c - * library/ecdsa.c - * - * Requires: POLARSSL_BIGNUM_C and at least one POLARSSL_ECP_DP_XXX_ENABLED - */ -#define POLARSSL_ECP_C - -/** - * \def POLARSSL_ENTROPY_C - * - * Enable the platform-specific entropy code. - * - * Module: library/entropy.c - * Caller: - * - * Requires: POLARSSL_SHA512_C or POLARSSL_SHA256_C - * - * This module provides a generic entropy pool - */ -//#define POLARSSL_ENTROPY_C - -/** - * \def POLARSSL_ERROR_C - * - * Enable error code to error string conversion. - * - * Module: library/error.c - * Caller: - * - * This module enables polarssl_strerror(). - */ -//#define POLARSSL_ERROR_C - -/** - * \def POLARSSL_GCM_C - * - * Enable the Galois/Counter Mode (GCM) for AES. - * - * Module: library/gcm.c - * - * Requires: POLARSSL_AES_C or POLARSSL_CAMELLIA_C - * - * This module enables the AES-GCM and CAMELLIA-GCM ciphersuites, if other - * requisites are enabled as well. - */ -#define POLARSSL_GCM_C - -/** - * \def POLARSSL_HAVEGE_C - * - * Enable the HAVEGE random generator. - * - * Warning: the HAVEGE random generator is not suitable for virtualized - * environments - * - * Warning: the HAVEGE random generator is dependent on timing and specific - * processor traits. It is therefore not advised to use HAVEGE as - * your applications primary random generator or primary entropy pool - * input. As a secondary input to your entropy pool, it IS able add - * the (limited) extra entropy it provides. - * - * Module: library/havege.c - * Caller: - * - * Requires: POLARSSL_TIMING_C - * - * Uncomment to enable the HAVEGE random generator. - */ -//#define POLARSSL_HAVEGE_C - -/** - * \def POLARSSL_HMAC_DRBG_C - * - * Enable the HMAC_DRBG random generator. - * - * Module: library/hmac_drbg.c - * Caller: - * - * Requires: POLARSSL_MD_C - * - * Uncomment to enable the HMAC_DRBG random number geerator. - */ -#define POLARSSL_HMAC_DRBG_C - -/** - * \def POLARSSL_MD_C - * - * Enable the generic message digest layer. - * - * Module: library/md.c - * Caller: - * - * Uncomment to enable generic message digest wrappers. - */ -#define POLARSSL_MD_C - -/** - * \def POLARSSL_MD2_C - * - * Enable the MD2 hash algorithm. - * - * Module: library/md2.c - * Caller: - * - * Uncomment to enable support for (rare) MD2-signed X.509 certs. - */ -//#define POLARSSL_MD2_C - -/** - * \def POLARSSL_MD4_C - * - * Enable the MD4 hash algorithm. - * - * Module: library/md4.c - * Caller: - * - * Uncomment to enable support for (rare) MD4-signed X.509 certs. - */ -//#define POLARSSL_MD4_C - -/** - * \def POLARSSL_MD5_C - * - * Enable the MD5 hash algorithm. - * - * Module: library/md5.c - * Caller: library/md.c - * library/pem.c - * library/ssl_tls.c - * - * This module is required for SSL/TLS and X.509. - * PEM_PARSE uses MD5 for decrypting encrypted keys. - */ -#define POLARSSL_MD5_C - -/** - * \def POLARSSL_MEMORY_C - * Deprecated since 1.3.5. Please use POLARSSL_PLATFORM_MEMORY instead. - */ -//#define POLARSSL_MEMORY_C - -/** - * \def POLARSSL_MEMORY_BUFFER_ALLOC_C - * - * Enable the buffer allocator implementation that makes use of a (stack) - * based buffer to 'allocate' dynamic memory. (replaces malloc() and free() - * calls) - * - * Module: library/memory_buffer_alloc.c - * - * Requires: POLARSSL_PLATFORM_C - * POLARSSL_PLATFORM_MEMORY (to use it within PolarSSL) - * - * Enable this module to enable the buffer memory allocator. - */ -//#define POLARSSL_MEMORY_BUFFER_ALLOC_C - -/** - * \def POLARSSL_NET_C - * - * Enable the TCP/IP networking routines. - * - * Module: library/net.c - * - * This module provides TCP/IP networking routines. - */ -#define POLARSSL_NET_C - -/** - * \def POLARSSL_OID_C - * - * Enable the OID database. - * - * Module: library/oid.c - * Caller: library/asn1write.c - * library/pkcs5.c - * library/pkparse.c - * library/pkwrite.c - * library/rsa.c - * library/x509.c - * library/x509_create.c - * library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * library/x509write_crt.c - * library/x509write_csr.c - * - * This modules translates between OIDs and internal values. - */ -#define POLARSSL_OID_C - -/** - * \def POLARSSL_PADLOCK_C - * - * Enable VIA Padlock support on x86. - * - * Module: library/padlock.c - * Caller: library/aes.c - * - * Requires: POLARSSL_HAVE_ASM - * - * This modules adds support for the VIA PadLock on x86. - */ -//#define POLARSSL_PADLOCK_C - -/** - * \def POLARSSL_PBKDF2_C - * - * Enable PKCS#5 PBKDF2 key derivation function. - * DEPRECATED: Use POLARSSL_PKCS5_C instead - * - * Module: library/pbkdf2.c - * - * Requires: POLARSSL_PKCS5_C - * - * This module adds support for the PKCS#5 PBKDF2 key derivation function. - */ -#define POLARSSL_PBKDF2_C - -/** - * \def POLARSSL_PEM_PARSE_C - * - * Enable PEM decoding / parsing. - * - * Module: library/pem.c - * Caller: library/dhm.c - * library/pkparse.c - * library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * - * Requires: POLARSSL_BASE64_C - * - * This modules adds support for decoding / parsing PEM files. - */ -#define POLARSSL_PEM_PARSE_C - -/** - * \def POLARSSL_PEM_WRITE_C - * - * Enable PEM encoding / writing. - * - * Module: library/pem.c - * Caller: library/pkwrite.c - * library/x509write_crt.c - * library/x509write_csr.c - * - * Requires: POLARSSL_BASE64_C - * - * This modules adds support for encoding / writing PEM files. - */ -#define POLARSSL_PEM_WRITE_C - -/** - * \def POLARSSL_PK_C - * - * Enable the generic public (asymetric) key layer. - * - * Module: library/pk.c - * Caller: library/ssl_tls.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * Requires: POLARSSL_RSA_C or POLARSSL_ECP_C - * - * Uncomment to enable generic public key wrappers. - */ -#define POLARSSL_PK_C - -/** - * \def POLARSSL_PK_PARSE_C - * - * Enable the generic public (asymetric) key parser. - * - * Module: library/pkparse.c - * Caller: library/x509_crt.c - * library/x509_csr.c - * - * Requires: POLARSSL_PK_C - * - * Uncomment to enable generic public key parse functions. - */ -#define POLARSSL_PK_PARSE_C - -/** - * \def POLARSSL_PK_WRITE_C - * - * Enable the generic public (asymetric) key writer. - * - * Module: library/pkwrite.c - * Caller: library/x509write.c - * - * Requires: POLARSSL_PK_C - * - * Uncomment to enable generic public key write functions. - */ -#define POLARSSL_PK_WRITE_C - -/** - * \def POLARSSL_PKCS5_C - * - * Enable PKCS#5 functions. - * - * Module: library/pkcs5.c - * - * Requires: POLARSSL_MD_C - * - * This module adds support for the PKCS#5 functions. - */ -#define POLARSSL_PKCS5_C - -/** - * \def POLARSSL_PKCS11_C - * - * Enable wrapper for PKCS#11 smartcard support. - * - * Module: library/pkcs11.c - * Caller: library/pk.c - * - * Requires: POLARSSL_PK_C - * - * This module enables SSL/TLS PKCS #11 smartcard support. - * Requires the presence of the PKCS#11 helper library (libpkcs11-helper) - */ -//#define POLARSSL_PKCS11_C - -/** - * \def POLARSSL_PKCS12_C - * - * Enable PKCS#12 PBE functions. - * Adds algorithms for parsing PKCS#8 encrypted private keys - * - * Module: library/pkcs12.c - * Caller: library/pkparse.c - * - * Requires: POLARSSL_ASN1_PARSE_C, POLARSSL_CIPHER_C, POLARSSL_MD_C - * Can use: POLARSSL_ARC4_C - * - * This module enables PKCS#12 functions. - */ -#define POLARSSL_PKCS12_C - -/** - * \def POLARSSL_PLATFORM_C - * - * Enable the platform abstraction layer that allows you to re-assign - * functions like malloc(), free(), printf(), fprintf() - * - * Module: library/platform.c - * Caller: Most other .c files - * - * This module enables abstraction of common (libc) functions. - */ -#define POLARSSL_PLATFORM_C - -/** - * \def POLARSSL_RIPEMD160_C - * - * Enable the RIPEMD-160 hash algorithm. - * - * Module: library/ripemd160.c - * Caller: library/md.c - * - */ -//#define POLARSSL_RIPEMD160_C - -/** - * \def POLARSSL_RSA_C - * - * Enable the RSA public-key cryptosystem. - * - * Module: library/rsa.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * library/x509.c - * - * This module is used by the following key exchanges: - * RSA, DHE-RSA, ECDHE-RSA, RSA-PSK - * - * Requires: POLARSSL_BIGNUM_C, POLARSSL_OID_C - */ -#define POLARSSL_RSA_C - -/** - * \def POLARSSL_SHA1_C - * - * Enable the SHA1 cryptographic hash algorithm. - * - * Module: library/sha1.c - * Caller: library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * library/x509write_crt.c - * - * This module is required for SSL/TLS and SHA1-signed certificates. - */ -#define POLARSSL_SHA1_C - -/** - * \def POLARSSL_SHA256_C - * - * Enable the SHA-224 and SHA-256 cryptographic hash algorithms. - * (Used to be POLARSSL_SHA2_C) - * - * Module: library/sha256.c - * Caller: library/entropy.c - * library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * This module adds support for SHA-224 and SHA-256. - * This module is required for the SSL/TLS 1.2 PRF function. - */ -#define POLARSSL_SHA256_C - -/** - * \def POLARSSL_SHA512_C - * - * Enable the SHA-384 and SHA-512 cryptographic hash algorithms. - * (Used to be POLARSSL_SHA4_C) - * - * Module: library/sha512.c - * Caller: library/entropy.c - * library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * This module adds support for SHA-384 and SHA-512. - */ -#define POLARSSL_SHA512_C - -/** - * \def POLARSSL_SSL_CACHE_C - * - * Enable simple SSL cache implementation. - * - * Module: library/ssl_cache.c - * Caller: - * - * Requires: POLARSSL_SSL_CACHE_C - */ -#define POLARSSL_SSL_CACHE_C - -/** - * \def POLARSSL_SSL_CLI_C - * - * Enable the SSL/TLS client code. - * - * Module: library/ssl_cli.c - * Caller: - * - * Requires: POLARSSL_SSL_TLS_C - * - * This module is required for SSL/TLS client support. - */ -#define POLARSSL_SSL_CLI_C - -/** - * \def POLARSSL_SSL_SRV_C - * - * Enable the SSL/TLS server code. - * - * Module: library/ssl_srv.c - * Caller: - * - * Requires: POLARSSL_SSL_TLS_C - * - * This module is required for SSL/TLS server support. - */ -//#define POLARSSL_SSL_SRV_C - -/** - * \def POLARSSL_SSL_TLS_C - * - * Enable the generic SSL/TLS code. - * - * Module: library/ssl_tls.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * Requires: POLARSSL_CIPHER_C, POLARSSL_MD_C - * and at least one of the POLARSSL_SSL_PROTO_* defines - * - * This module is required for SSL/TLS. - */ -#define POLARSSL_SSL_TLS_C - -/** - * \def POLARSSL_THREADING_C - * - * Enable the threading abstraction layer. - * By default PolarSSL assumes it is used in a non-threaded environment or that - * contexts are not shared between threads. If you do intend to use contexts - * between threads, you will need to enable this layer to prevent race - * conditions. - * - * Module: library/threading.c - * - * This allows different threading implementations (self-implemented or - * provided). - * - * You will have to enable either POLARSSL_THREADING_ALT or - * POLARSSL_THREADING_PTHREAD. - * - * Enable this layer to allow use of mutexes within PolarSSL - */ -//#define POLARSSL_THREADING_C - -/** - * \def POLARSSL_TIMING_C - * - * Enable the portable timing interface. - * - * Module: library/timing.c - * Caller: library/havege.c - * - * This module is used by the HAVEGE random number generator. - */ -//#define POLARSSL_TIMING_C - -/** - * \def POLARSSL_VERSION_C - * - * Enable run-time version information. - * - * Module: library/version.c - * - * This module provides run-time version information. - */ -#define POLARSSL_VERSION_C - -/** - * \def POLARSSL_X509_USE_C - * - * Enable X.509 core for using certificates. - * - * Module: library/x509.c - * Caller: library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * - * Requires: POLARSSL_ASN1_PARSE_C, POLARSSL_BIGNUM_C, POLARSSL_OID_C, - * POLARSSL_PK_PARSE_C - * - * This module is required for the X.509 parsing modules. - */ -#define POLARSSL_X509_USE_C - -/** - * \def POLARSSL_X509_CRT_PARSE_C - * - * Enable X.509 certificate parsing. - * - * Module: library/x509_crt.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * Requires: POLARSSL_X509_USE_C - * - * This module is required for X.509 certificate parsing. - */ -#define POLARSSL_X509_CRT_PARSE_C - -/** - * \def POLARSSL_X509_CRL_PARSE_C - * - * Enable X.509 CRL parsing. - * - * Module: library/x509_crl.c - * Caller: library/x509_crt.c - * - * Requires: POLARSSL_X509_USE_C - * - * This module is required for X.509 CRL parsing. - */ -#define POLARSSL_X509_CRL_PARSE_C - -/** - * \def POLARSSL_X509_CSR_PARSE_C - * - * Enable X.509 Certificate Signing Request (CSR) parsing. - * - * Module: library/x509_csr.c - * Caller: library/x509_crt_write.c - * - * Requires: POLARSSL_X509_USE_C - * - * This module is used for reading X.509 certificate request. - */ -#define POLARSSL_X509_CSR_PARSE_C - -/** - * \def POLARSSL_X509_CREATE_C - * - * Enable X.509 core for creating certificates. - * - * Module: library/x509_create.c - * - * Requires: POLARSSL_BIGNUM_C, POLARSSL_OID_C, POLARSSL_PK_WRITE_C - * - * This module is the basis for creating X.509 certificates and CSRs. - */ -#define POLARSSL_X509_CREATE_C - -/** - * \def POLARSSL_X509_CRT_WRITE_C - * - * Enable creating X.509 certificates. - * - * Module: library/x509_crt_write.c - * - * Requires: POLARSSL_CREATE_C - * - * This module is required for X.509 certificate creation. - */ -#define POLARSSL_X509_CRT_WRITE_C - -/** - * \def POLARSSL_X509_CSR_WRITE_C - * - * Enable creating X.509 Certificate Signing Requests (CSR). - * - * Module: library/x509_csr_write.c - * - * Requires: POLARSSL_CREATE_C - * - * This module is required for X.509 certificate request writing. - */ -#define POLARSSL_X509_CSR_WRITE_C - -/** - * \def POLARSSL_XTEA_C - * - * Enable the XTEA block cipher. - * - * Module: library/xtea.c - * Caller: - */ -//#define POLARSSL_XTEA_C - -/* \} name SECTION: PolarSSL modules */ - -/** - * \name SECTION: Module configuration options - * - * This section allows for the setting of module specific sizes and - * configuration options. The default values are already present in the - * relevant header files and should suffice for the regular use cases. - * - * Our advice is to enable options and change their values here - * only if you have a good reason and know the consequences. - * - * Please check the respective header file for documentation on these - * parameters (to prevent duplicate documentation). - * \{ - */ - -/* MPI / BIGNUM options */ -//#define POLARSSL_MPI_WINDOW_SIZE 6 /**< Maximum windows size used. */ -//#define POLARSSL_MPI_MAX_SIZE 512 /**< Maximum number of bytes for usable MPIs. */ - -/* CTR_DRBG options */ -//#define CTR_DRBG_ENTROPY_LEN 48 /**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */ -//#define CTR_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ -//#define CTR_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ -//#define CTR_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ -//#define CTR_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ - -/* HMAC_DRBG options */ -//#define POLARSSL_HMAC_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ -//#define POLARSSL_HMAC_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ -//#define POLARSSL_HMAC_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ -//#define POLARSSL_HMAC_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ - -/* ECP options */ -//#define POLARSSL_ECP_MAX_BITS 521 /**< Maximum bit size of groups */ -//#define POLARSSL_ECP_WINDOW_SIZE 6 /**< Maximum window size used */ -//#define POLARSSL_ECP_FIXED_POINT_OPTIM 1 /**< Enable fixed-point speed-up */ - -/* Entropy options */ -//#define ENTROPY_MAX_SOURCES 20 /**< Maximum number of sources supported */ -//#define ENTROPY_MAX_GATHER 128 /**< Maximum amount requested from entropy sources */ - -/* Memory buffer allocator options */ -//#define POLARSSL_MEMORY_ALIGN_MULTIPLE 4 /**< Align on multiples of this value */ - -/* Platform options */ -//#define POLARSSL_PLATFORM_STD_MEM_HDR /**< Header to include if POLARSSL_PLATFORM_NO_STD_FUNCTIONS is defined. Don't define if no header is needed. */ -//#define POLARSSL_PLATFORM_STD_MALLOC malloc /**< Default allocator to use, can be undefined */ -//#define POLARSSL_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */ -//#define POLARSSL_PLATFORM_STD_PRINTF printf /**< Default printf to use, can be undefined */ -//#define POLARSSL_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use, can be undefined */ - -/* SSL Cache options */ -//#define SSL_CACHE_DEFAULT_TIMEOUT 86400 /**< 1 day */ -//#define SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /**< Maximum entries in cache */ - -/* SSL options */ -//#define SSL_MAX_CONTENT_LEN 16384 /**< Size of the input / output buffer */ -//#define SSL_DEFAULT_TICKET_LIFETIME 86400 /**< Lifetime of session tickets (if enabled) */ -//#define POLARSSL_PSK_MAX_LEN 32 /**< Max size of TLS pre-shared keys, in bytes (default 256 bits) */ - -/* Realteck Ameba HW Crypto */ -#ifdef CONFIG_PLATFORM_8195A -#define RTL_HW_CRYPTO -#define SUPPORT_HW_SW_CRYPTO -#endif - -#define RTL_CRYPTO_FRAGMENT 15360 /* 15*1024 < 16000 */ - -/** - * Complete list of ciphersuites to use, in order of preference. - * - * \warning No dependency checking is done on that field! This option can only - * be used to restrict the set of available ciphersuites. It is your - * responsibility to make sure the needed modules are active. - * - * Use this to save a few hundred bytes of ROM (default ordering of all - * available ciphersuites) and a few to a few hundred bytes of RAM. - * - * The value below is only an example, not the default. - */ -//#define SSL_CIPHERSUITES TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - -/* Debug options */ -//#define POLARSSL_DEBUG_DFL_MODE POLARSSL_DEBUG_LOG_FULL /**< Default log: Full or Raw */ - -/* \} name SECTION: Module configuration options */ - -#include "check_config.h" - -#endif /* POLARSSL_CONFIG_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config_rsa.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config_rsa.h deleted file mode 100644 index cc7ba8e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/config_rsa.h +++ /dev/null @@ -1,2184 +0,0 @@ -/** - * \file config.h - * - * \brief Configuration options (set of defines) - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * This set of compile-time options may be used to enable - * or disable features selectively, and reduce the global - * memory footprint. - */ -#ifndef POLARSSL_CONFIG_H -#define POLARSSL_CONFIG_H - -#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) -#define _CRT_SECURE_NO_DEPRECATE 1 -#endif - -/** - * \name SECTION: System support - * - * This section sets system specific settings. - * \{ - */ - -/** - * \def POLARSSL_HAVE_INT8 - * - * The system uses 8-bit wide native integers. - * - * Uncomment if native integers are 8-bit wide. - */ -//#define POLARSSL_HAVE_INT8 - -/** - * \def POLARSSL_HAVE_INT16 - * - * The system uses 16-bit wide native integers. - * - * Uncomment if native integers are 16-bit wide. - */ -//#define POLARSSL_HAVE_INT16 - -/** - * \def POLARSSL_HAVE_LONGLONG - * - * The compiler supports the 'long long' type. - * (Only used on 32-bit platforms) - */ -#define POLARSSL_HAVE_LONGLONG - -/** - * \def POLARSSL_HAVE_ASM - * - * The compiler has support for asm(). - * - * Requires support for asm() in compiler. - * - * Used in: - * library/timing.c - * library/padlock.c - * include/polarssl/bn_mul.h - * - * Comment to disable the use of assembly code. - */ -//#define POLARSSL_HAVE_ASM - -/** - * \def POLARSSL_HAVE_SSE2 - * - * CPU supports SSE2 instruction set. - * - * Uncomment if the CPU supports SSE2 (IA-32 specific). - */ -//#define POLARSSL_HAVE_SSE2 - -/** - * \def POLARSSL_HAVE_TIME - * - * System has time.h and time() / localtime() / gettimeofday(). - * - * Comment if your system does not support time functions - */ -//#define POLARSSL_HAVE_TIME - -/** - * \def POLARSSL_HAVE_IPV6 - * - * System supports the basic socket interface for IPv6 (RFC 3493), - * specifically getaddrinfo(), freeaddrinfo() and struct sockaddr_storage. - * - * Note: on Windows/MingW, XP or higher is required. - * - * Comment if your system does not support the IPv6 socket interface - */ -//#define POLARSSL_HAVE_IPV6 - -/** - * \def POLARSSL_PLATFORM_MEMORY - * - * Enable the memory allocation layer. - * - * By default PolarSSL uses the system-provided malloc() and free(). - * This allows different allocators (self-implemented or provided) to be - * provided to the platform abstraction layer. - * - * Enabling POLARSSL_PLATFORM_MEMORY will provide "platform_set_malloc_free()" - * to allow you to set an alternative malloc() and free() function pointer. - * - * Requires: POLARSSL_PLATFORM_C - * - * Enable this layer to allow use of alternative memory allocators. - */ -#ifdef CONFIG_HARDWARE_8188F -#define POLARSSL_PLATFORM_MEMORY -#endif -/** - * \def POLARSSL_PLATFORM_NO_STD_FUNCTIONS - * - * Do not assign standard functions in the platform layer (e.g. malloc() to - * POLARSSL_PLATFORM_STD_MALLOC and printf() to POLARSSL_PLATFORM_STD_PRINTF) - * - * This makes sure there are no linking errors on platforms that do not support - * these functions. You will HAVE to provide alternatives, either at runtime - * via the platform_set_xxx() functions or at compile time by setting - * the POLARSSL_PLATFORM_STD_XXX defines. - * - * Requires: POLARSSL_PLATFORM_C - * - * Uncomment to prevent default assignment of standard functions in the - * platform layer. - */ -#define POLARSSL_PLATFORM_NO_STD_FUNCTIONS - -/** - * \def POLARSSL_PLATFORM_XXX_ALT - * - * Uncomment a macro to let PolarSSL support the function in the platform - * abstraction layer. - * - * Example: In case you uncomment POLARSSL_PLATFORM_PRINTF_ALT, PolarSSL will - * provide a function "platform_set_printf()" that allows you to set an - * alternative printf function pointer. - * - * All these define require POLARSSL_PLATFORM_C to be defined! - * - * Uncomment a macro to enable alternate implementation of specific base - * platform function - */ -//#define POLARSSL_PLATFORM_PRINTF_ALT -//#define POLARSSL_PLATFORM_FPRINTF_ALT -/* \} name SECTION: System support */ - -/** - * \name SECTION: PolarSSL feature support - * - * This section sets support for features that are or are not needed - * within the modules that are enabled. - * \{ - */ - -/** - * \def POLARSSL_TIMING_ALT - * - * Uncomment to provide your own alternate implementation for hardclock(), - * get_timer(), set_alarm() and m_sleep(). - * - * Only works if you have POLARSSL_TIMING_C enabled. - * - * You will need to provide a header "timing_alt.h" and an implementation at - * compile time. - */ -//#define POLARSSL_TIMING_ALT - -/** - * \def POLARSSL_XXX_ALT - * - * Uncomment a macro to let PolarSSL use your alternate core implementation of - * a symmetric or hash algorithm (e.g. platform specific assembly optimized - * implementations). Keep in mind that the function prototypes should remain - * the same. - * - * Example: In case you uncomment POLARSSL_AES_ALT, PolarSSL will no longer - * provide the "struct aes_context" definition and omit the base function - * declarations and implementations. "aes_alt.h" will be included from - * "aes.h" to include the new function definitions. - * - * Uncomment a macro to enable alternate implementation for core algorithm - * functions - */ -//#define POLARSSL_AES_ALT -//#define POLARSSL_ARC4_ALT -//#define POLARSSL_BLOWFISH_ALT -//#define POLARSSL_CAMELLIA_ALT -//#define POLARSSL_DES_ALT -//#define POLARSSL_XTEA_ALT -//#define POLARSSL_MD2_ALT -//#define POLARSSL_MD4_ALT -//#define POLARSSL_MD5_ALT -//#define POLARSSL_RIPEMD160_ALT -//#define POLARSSL_SHA1_ALT -//#define POLARSSL_SHA256_ALT -//#define POLARSSL_SHA512_ALT - -/** - * \def POLARSSL_AES_ROM_TABLES - * - * Store the AES tables in ROM. - * - * Uncomment this macro to store the AES tables in ROM. - * - */ -#define POLARSSL_AES_ROM_TABLES - -/** - * \def POLARSSL_CIPHER_MODE_CBC - * - * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. - */ -#define POLARSSL_CIPHER_MODE_CBC - -/** - * \def POLARSSL_CIPHER_MODE_CFB - * - * Enable Cipher Feedback mode (CFB) for symmetric ciphers. - */ -#define POLARSSL_CIPHER_MODE_CFB - -/** - * \def POLARSSL_CIPHER_MODE_CTR - * - * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. - */ -#define POLARSSL_CIPHER_MODE_CTR - -/** - * \def POLARSSL_CIPHER_NULL_CIPHER - * - * Enable NULL cipher. - * Warning: Only do so when you know what you are doing. This allows for - * encryption or channels without any security! - * - * Requires POLARSSL_ENABLE_WEAK_CIPHERSUITES as well to enable - * the following ciphersuites: - * TLS_ECDH_ECDSA_WITH_NULL_SHA - * TLS_ECDH_RSA_WITH_NULL_SHA - * TLS_ECDHE_ECDSA_WITH_NULL_SHA - * TLS_ECDHE_RSA_WITH_NULL_SHA - * TLS_ECDHE_PSK_WITH_NULL_SHA384 - * TLS_ECDHE_PSK_WITH_NULL_SHA256 - * TLS_ECDHE_PSK_WITH_NULL_SHA - * TLS_DHE_PSK_WITH_NULL_SHA384 - * TLS_DHE_PSK_WITH_NULL_SHA256 - * TLS_DHE_PSK_WITH_NULL_SHA - * TLS_RSA_WITH_NULL_SHA256 - * TLS_RSA_WITH_NULL_SHA - * TLS_RSA_WITH_NULL_MD5 - * TLS_RSA_PSK_WITH_NULL_SHA384 - * TLS_RSA_PSK_WITH_NULL_SHA256 - * TLS_RSA_PSK_WITH_NULL_SHA - * TLS_PSK_WITH_NULL_SHA384 - * TLS_PSK_WITH_NULL_SHA256 - * TLS_PSK_WITH_NULL_SHA - * - * Uncomment this macro to enable the NULL cipher and ciphersuites - */ -//#define POLARSSL_CIPHER_NULL_CIPHER - -/** - * \def POLARSSL_CIPHER_PADDING_XXX - * - * Uncomment or comment macros to add support for specific padding modes - * in the cipher layer with cipher modes that support padding (e.g. CBC) - * - * If you disable all padding modes, only full blocks can be used with CBC. - * - * Enable padding modes in the cipher layer. - */ -#define POLARSSL_CIPHER_PADDING_PKCS7 -#define POLARSSL_CIPHER_PADDING_ONE_AND_ZEROS -#define POLARSSL_CIPHER_PADDING_ZEROS_AND_LEN -#define POLARSSL_CIPHER_PADDING_ZEROS - -/** - * \def POLARSSL_ENABLE_WEAK_CIPHERSUITES - * - * Enable weak ciphersuites in SSL / TLS. - * Warning: Only do so when you know what you are doing. This allows for - * channels with virtually no security at all! - * - * This enables the following ciphersuites: - * TLS_RSA_WITH_DES_CBC_SHA - * TLS_DHE_RSA_WITH_DES_CBC_SHA - * - * Uncomment this macro to enable weak ciphersuites - */ -//#define POLARSSL_ENABLE_WEAK_CIPHERSUITES - -/** - * \def POLARSSL_REMOVE_ARC4_CIPHERSUITES - * - * Remove RC4 ciphersuites by default in SSL / TLS. - * This flag removes the ciphersuites based on RC4 from the default list as - * returned by ssl_list_ciphersuites(). However, it is still possible to - * enable (some of) them with ssl_set_ciphersuites() by including them - * explicitly. - * - * Uncomment this macro to remove RC4 ciphersuites by default. - */ -//#define POLARSSL_REMOVE_ARC4_CIPHERSUITES - -/** - * \def POLARSSL_ECP_XXXX_ENABLED - * - * Enables specific curves within the Elliptic Curve module. - * By default all supported curves are enabled. - * - * Comment macros to disable the curve and functions for it - */ -#define POLARSSL_ECP_DP_SECP192R1_ENABLED -#define POLARSSL_ECP_DP_SECP224R1_ENABLED -#define POLARSSL_ECP_DP_SECP256R1_ENABLED -#define POLARSSL_ECP_DP_SECP384R1_ENABLED -#define POLARSSL_ECP_DP_SECP521R1_ENABLED -#define POLARSSL_ECP_DP_SECP192K1_ENABLED -#define POLARSSL_ECP_DP_SECP224K1_ENABLED -#define POLARSSL_ECP_DP_SECP256K1_ENABLED -#define POLARSSL_ECP_DP_BP256R1_ENABLED -#define POLARSSL_ECP_DP_BP384R1_ENABLED -#define POLARSSL_ECP_DP_BP512R1_ENABLED -//#define POLARSSL_ECP_DP_M221_ENABLED // Not implemented yet! -#define POLARSSL_ECP_DP_M255_ENABLED -//#define POLARSSL_ECP_DP_M383_ENABLED // Not implemented yet! -//#define POLARSSL_ECP_DP_M511_ENABLED // Not implemented yet! - -/** - * \def POLARSSL_ECP_NIST_OPTIM - * - * Enable specific 'modulo p' routines for each NIST prime. - * Depending on the prime and architecture, makes operations 4 to 8 times - * faster on the corresponding curve. - * - * Comment this macro to disable NIST curves optimisation. - */ -#define POLARSSL_ECP_NIST_OPTIM - -/** - * \def POLARSSL_ECDSA_DETERMINISTIC - * - * Enable deterministic ECDSA (RFC 6979). - * Standard ECDSA is "fragile" in the sense that lack of entropy when signing - * may result in a compromise of the long-term signing key. This is avoided by - * the deterministic variant. - * - * Requires: POLARSSL_HMAC_DRBG_C - * - * Comment this macro to disable deterministic ECDSA. - */ -//#define POLARSSL_ECDSA_DETERMINISTIC - -/** - * \def POLARSSL_KEY_EXCHANGE_PSK_ENABLED - * - * Enable the PSK based ciphersuite modes in SSL / TLS. - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_PSK_WITH_AES_256_GCM_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA - * TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_PSK_WITH_AES_128_GCM_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA - * TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_PSK_WITH_RC4_128_SHA - */ -//#define POLARSSL_KEY_EXCHANGE_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED - * - * Enable the DHE-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_DHM_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA - * TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA - * TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_DHE_PSK_WITH_RC4_128_SHA - */ -//#define POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED - * - * Enable the ECDHE-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA - * TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA - * TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_PSK_WITH_RC4_128_SHA - */ -//#define POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED - * - * Enable the RSA-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA - * TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA - * TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_PSK_WITH_RC4_128_SHA - */ -//#define POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_RSA_ENABLED - * - * Enable the RSA-only based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_RSA_WITH_AES_256_GCM_SHA384 - * TLS_RSA_WITH_AES_256_CBC_SHA256 - * TLS_RSA_WITH_AES_256_CBC_SHA - * TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_RSA_WITH_AES_128_GCM_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA - * TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_WITH_RC4_128_SHA - * TLS_RSA_WITH_RC4_128_MD5 - */ -#define POLARSSL_KEY_EXCHANGE_RSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED - * - * Enable the DHE-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_DHM_C, POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA - * TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA - * TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - */ -//#define POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED - * - * Enable the ECDHE-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_RSA_C, POLARSSL_PKCS1_V15, - * POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_RSA_WITH_RC4_128_SHA - */ -//#define POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED - * - * Enable the ECDHE-ECDSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_ECDSA_C, POLARSSL_X509_CRT_PARSE_C, - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - */ -//#define POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED - * - * Enable the ECDH-ECDSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_RC4_128_SHA - * TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - */ -//#define POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED - -/** - * \def POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED - * - * Enable the ECDH-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: POLARSSL_ECDH_C, POLARSSL_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_RSA_WITH_RC4_128_SHA - * TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 - */ -//#define POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED - -/** - * \def POLARSSL_PK_PARSE_EC_EXTENDED - * - * Enhance support for reading EC keys using variants of SEC1 not allowed by - * RFC 5915 and RFC 5480. - * - * Currently this means parsing the SpecifiedECDomain choice of EC - * parameters (only known groups are supported, not arbitrary domains, to - * avoid validation issues). - * - * Disable if you only need to support RFC 5915 + 5480 key formats. - */ -//#define POLARSSL_PK_PARSE_EC_EXTENDED - -/** - * \def POLARSSL_ERROR_STRERROR_BC - * - * Make available the backward compatible error_strerror() next to the - * current polarssl_strerror(). - * - * For new code, it is recommended to use polarssl_strerror() instead and - * disable this. - * - * Disable if you run into name conflicts and want to really remove the - * error_strerror() - */ -#define POLARSSL_ERROR_STRERROR_BC - -/** - * \def POLARSSL_ERROR_STRERROR_DUMMY - * - * Enable a dummy error function to make use of polarssl_strerror() in - * third party libraries easier when POLARSSL_ERROR_C is disabled - * (no effect when POLARSSL_ERROR_C is enabled). - * - * You can safely disable this if POLARSSL_ERROR_C is enabled, or if you're - * not using polarssl_strerror() or error_strerror() in your application. - * - * Disable if you run into name conflicts and want to really remove the - * polarssl_strerror() - */ -#define POLARSSL_ERROR_STRERROR_DUMMY - -/** - * \def POLARSSL_GENPRIME - * - * Enable the prime-number generation code. - * - * Requires: POLARSSL_BIGNUM_C - */ -#define POLARSSL_GENPRIME - -/** - * \def POLARSSL_FS_IO - * - * Enable functions that use the filesystem. - */ -//#define POLARSSL_FS_IO - -/** - * \def POLARSSL_NO_DEFAULT_ENTROPY_SOURCES - * - * Do not add default entropy sources. These are the platform specific, - * hardclock and HAVEGE based poll functions. - * - * This is useful to have more control over the added entropy sources in an - * application. - * - * Uncomment this macro to prevent loading of default entropy functions. - */ -//#define POLARSSL_NO_DEFAULT_ENTROPY_SOURCES - -/** - * \def POLARSSL_NO_PLATFORM_ENTROPY - * - * Do not use built-in platform entropy functions. - * This is useful if your platform does not support - * standards like the /dev/urandom or Windows CryptoAPI. - * - * Uncomment this macro to disable the built-in platform entropy functions. - */ -//#define POLARSSL_NO_PLATFORM_ENTROPY - -/** - * \def POLARSSL_ENTROPY_FORCE_SHA256 - * - * Force the entropy accumulator to use a SHA-256 accumulator instead of the - * default SHA-512 based one (if both are available). - * - * Requires: POLARSSL_SHA256_C - * - * On 32-bit systems SHA-256 can be much faster than SHA-512. Use this option - * if you have performance concerns. - * - * This option is only useful if both POLARSSL_SHA256_C and - * POLARSSL_SHA512_C are defined. Otherwise the available hash module is used. - */ -//#define POLARSSL_ENTROPY_FORCE_SHA256 - -/** - * \def POLARSSL_MEMORY_DEBUG - * - * Enable debugging of buffer allocator memory issues. Automatically prints - * (to stderr) all (fatal) messages on memory allocation issues. Enables - * function for 'debug output' of allocated memory. - * - * Requires: POLARSSL_MEMORY_BUFFER_ALLOC_C - * - * Uncomment this macro to let the buffer allocator print out error messages. - */ -//#define POLARSSL_MEMORY_DEBUG - -/** - * \def POLARSSL_MEMORY_BACKTRACE - * - * Include backtrace information with each allocated block. - * - * Requires: POLARSSL_MEMORY_BUFFER_ALLOC_C - * GLIBC-compatible backtrace() an backtrace_symbols() support - * - * Uncomment this macro to include backtrace information - */ -//#define POLARSSL_MEMORY_BACKTRACE - -/** - * \def POLARSSL_PKCS1_V15 - * - * Enable support for PKCS#1 v1.5 encoding. - * - * Requires: POLARSSL_RSA_C - * - * This enables support for PKCS#1 v1.5 operations. - */ -#define POLARSSL_PKCS1_V15 - -/** - * \def POLARSSL_PKCS1_V21 - * - * Enable support for PKCS#1 v2.1 encoding. - * - * Requires: POLARSSL_MD_C, POLARSSL_RSA_C - * - * This enables support for RSAES-OAEP and RSASSA-PSS operations. - */ -//#define POLARSSL_PKCS1_V21 - -/** - * \def POLARSSL_RSA_NO_CRT - * - * Do not use the Chinese Remainder Theorem for the RSA private operation. - * - * Uncomment this macro to disable the use of CRT in RSA. - * - */ -//#define POLARSSL_RSA_NO_CRT - -/** - * \def POLARSSL_SELF_TEST - * - * Enable the checkup functions (*_self_test). - */ -//#define POLARSSL_SELF_TEST - -/** - * \def POLARSSL_SSL_ALL_ALERT_MESSAGES - * - * Enable sending of alert messages in case of encountered errors as per RFC. - * If you choose not to send the alert messages, PolarSSL can still communicate - * with other servers, only debugging of failures is harder. - * - * The advantage of not sending alert messages, is that no information is given - * about reasons for failures thus preventing adversaries of gaining intel. - * - * Enable sending of all alert messages - */ -#define POLARSSL_SSL_ALERT_MESSAGES - -/** - * \def POLARSSL_SSL_DEBUG_ALL - * - * Enable the debug messages in SSL module for all issues. - * Debug messages have been disabled in some places to prevent timing - * attacks due to (unbalanced) debugging function calls. - * - * If you need all error reporting you should enable this during debugging, - * but remove this for production servers that should log as well. - * - * Uncomment this macro to report all debug messages on errors introducing - * a timing side-channel. - * - */ -//#define POLARSSL_SSL_DEBUG_ALL - -/** - * \def POLARSSL_SSL_HW_RECORD_ACCEL - * - * Enable hooking functions in SSL module for hardware acceleration of - * individual records. - * - * Uncomment this macro to enable hooking functions. - */ -//#define POLARSSL_SSL_HW_RECORD_ACCEL - -/** - * \def POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO - * - * Enable support for receiving and parsing SSLv2 Client Hello messages for the - * SSL Server module (POLARSSL_SSL_SRV_C). - * - * Comment this macro to disable support for SSLv2 Client Hello messages. - */ -//#define POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO - -/** - * \def POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE - * - * Pick the ciphersuite according to the client's preferences rather than ours - * in the SSL Server module (POLARSSL_SSL_SRV_C). - * - * Uncomment this macro to respect client's ciphersuite order - */ -//#define POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE - -/** - * \def POLARSSL_SSL_MAX_FRAGMENT_LENGTH - * - * Enable support for RFC 6066 max_fragment_length extension in SSL. - * - * Comment this macro to disable support for the max_fragment_length extension - */ -#define POLARSSL_SSL_MAX_FRAGMENT_LENGTH - -/** - * \def POLARSSL_SSL_PROTO_SSL3 - * - * Enable support for SSL 3.0. - * - * Requires: POLARSSL_MD5_C - * POLARSSL_SHA1_C - * - * Comment this macro to disable support for SSL 3.0 - */ -#define POLARSSL_SSL_PROTO_SSL3 - -/** - * \def POLARSSL_SSL_PROTO_TLS1 - * - * Enable support for TLS 1.0. - * - * Requires: POLARSSL_MD5_C - * POLARSSL_SHA1_C - * - * Comment this macro to disable support for TLS 1.0 - */ -#define POLARSSL_SSL_PROTO_TLS1 - -/** - * \def POLARSSL_SSL_PROTO_TLS1_1 - * - * Enable support for TLS 1.1. - * - * Requires: POLARSSL_MD5_C - * POLARSSL_SHA1_C - * - * Comment this macro to disable support for TLS 1.1 - */ -#define POLARSSL_SSL_PROTO_TLS1_1 - -/** - * \def POLARSSL_SSL_PROTO_TLS1_2 - * - * Enable support for TLS 1.2. - * - * Requires: POLARSSL_SHA1_C or POLARSSL_SHA256_C or POLARSSL_SHA512_C - * (Depends on ciphersuites) - * - * Comment this macro to disable support for TLS 1.2 - */ -#define POLARSSL_SSL_PROTO_TLS1_2 - -/** - * \def POLARSSL_SSL_ALPN - * - * Enable support for Application Layer Protocol Negotiation. - * draft-ietf-tls-applayerprotoneg-05 - * - * Comment this macro to disable support for ALPN. - */ -//#define POLARSSL_SSL_ALPN - -/** - * \def POLARSSL_SSL_SESSION_TICKETS - * - * Enable support for RFC 5077 session tickets in SSL. - * - * Requires: POLARSSL_AES_C - * POLARSSL_SHA256_C - * POLARSSL_CIPHER_MODE_CBC - * - * Comment this macro to disable support for SSL session tickets - */ -#define POLARSSL_SSL_SESSION_TICKETS - -/** - * \def POLARSSL_SSL_SERVER_NAME_INDICATION - * - * Enable support for RFC 6066 server name indication (SNI) in SSL. - * - * Comment this macro to disable support for server name indication in SSL - */ -#define POLARSSL_SSL_SERVER_NAME_INDICATION - -/** - * \def POLARSSL_SSL_TRUNCATED_HMAC - * - * Enable support for RFC 6066 truncated HMAC in SSL. - * - * Comment this macro to disable support for truncated HMAC in SSL - */ -#define POLARSSL_SSL_TRUNCATED_HMAC - -/** - * \def POLARSSL_SSL_SET_CURVES - * - * Enable ssl_set_curves(). - * - * This is disabled by default since it breaks binary compatibility with the - * 1.3.x line. If you choose to enable it, you will need to rebuild your - * application against the new header files, relinking will not be enough. - * It will be enabled by default, or no longer an option, in the 1.4 branch. - * - * Uncomment to make ssl_set_curves() available. - */ -//#define POLARSSL_SSL_SET_CURVES - -/** - * \def POLARSSL_THREADING_ALT - * - * Provide your own alternate threading implementation. - * - * Requires: POLARSSL_THREADING_C - * - * Uncomment this to allow your own alternate threading implementation. - */ -//#define POLARSSL_THREADING_ALT - -/** - * \def POLARSSL_THREADING_PTHREAD - * - * Enable the pthread wrapper layer for the threading layer. - * - * Requires: POLARSSL_THREADING_C - * - * Uncomment this to enable pthread mutexes. - */ -//#define POLARSSL_THREADING_PTHREAD - -/** - * \def POLARSSL_VERSION_FEATURES - * - * Allow run-time checking of compile-time enabled features. Thus allowing users - * to check at run-time if the library is for instance compiled with threading - * support via version_check_feature(). - * - * Requires: POLARSSL_VERSION_C - * - * Comment this to disable run-time checking and save ROM space - */ -//#define POLARSSL_VERSION_FEATURES - -/** - * \def POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3 - * - * If set, the X509 parser will not break-off when parsing an X509 certificate - * and encountering an extension in a v1 or v2 certificate. - * - * Uncomment to prevent an error. - */ -//#define POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3 - -/** - * \def POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION - * - * If set, the X509 parser will not break-off when parsing an X509 certificate - * and encountering an unknown critical extension. - * - * Uncomment to prevent an error. - */ -//#define POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION - -/** - * \def POLARSSL_X509_CHECK_KEY_USAGE - * - * Enable verification of the keyUsage extension (CA and leaf certificates). - * - * Disabling this avoids problems with mis-issued and/or misused - * (intermediate) CA and leaf certificates. - * - * \warning Depending on your PKI use, disabling this can be a security risk! - * - * Comment to skip keyUsage checking for both CA and leaf certificates. - */ -//#define POLARSSL_X509_CHECK_KEY_USAGE - -/** - * \def POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE - * - * Enable verification of the extendedKeyUsage extension (leaf certificates). - * - * Disabling this avoids problems with mis-issued and/or misused certificates. - * - * \warning Depending on your PKI use, disabling this can be a security risk! - * - * Comment to skip extendedKeyUsage checking for certificates. - */ -//#define POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE - -/** - * \def POLARSSL_X509_RSASSA_PSS_SUPPORT - * - * Enable parsing and verification of X.509 certificates, CRLs and CSRS - * signed with RSASSA-PSS (aka PKCS#1 v2.1). - * - * Comment this macro to disallow using RSASSA-PSS in certificates. - */ -//#define POLARSSL_X509_RSASSA_PSS_SUPPORT - -/** - * \def POLARSSL_ZLIB_SUPPORT - * - * If set, the SSL/TLS module uses ZLIB to support compression and - * decompression of packet data. - * - * \warning TLS-level compression MAY REDUCE SECURITY! See for example the - * CRIME attack. Before enabling this option, you should examine with care if - * CRIME or similar exploits may be a applicable to your use case. - * - * Used in: library/ssl_tls.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * This feature requires zlib library and headers to be present. - * - * Uncomment to enable use of ZLIB - */ -//#define POLARSSL_ZLIB_SUPPORT -/* \} name SECTION: PolarSSL feature support */ - -/** - * \name SECTION: PolarSSL modules - * - * This section enables or disables entire modules in PolarSSL - * \{ - */ - -/** - * \def POLARSSL_AESNI_C - * - * Enable AES-NI support on x86-64. - * - * Module: library/aesni.c - * Caller: library/aes.c - * - * Requires: POLARSSL_HAVE_ASM - * - * This modules adds support for the AES-NI instructions on x86-64 - */ -//#define POLARSSL_AESNI_C - -/** - * \def POLARSSL_AES_C - * - * Enable the AES block cipher. - * - * Module: library/aes.c - * Caller: library/ssl_tls.c - * library/pem.c - * library/ctr_drbg.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - * TLS_DHE_RSA_WITH_AES_256_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - * TLS_DHE_RSA_WITH_AES_128_CBC_SHA - * TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 - * TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA - * TLS_DHE_PSK_WITH_AES_256_CBC_SHA - * TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA - * TLS_DHE_PSK_WITH_AES_128_CBC_SHA - * TLS_RSA_WITH_AES_256_GCM_SHA384 - * TLS_RSA_WITH_AES_256_CBC_SHA256 - * TLS_RSA_WITH_AES_256_CBC_SHA - * TLS_RSA_WITH_AES_128_GCM_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA256 - * TLS_RSA_WITH_AES_128_CBC_SHA - * TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_AES_256_CBC_SHA - * TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 - * TLS_RSA_PSK_WITH_AES_128_CBC_SHA - * TLS_PSK_WITH_AES_256_GCM_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA384 - * TLS_PSK_WITH_AES_256_CBC_SHA - * TLS_PSK_WITH_AES_128_GCM_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA256 - * TLS_PSK_WITH_AES_128_CBC_SHA - * - * PEM_PARSE uses AES for decrypting encrypted keys. - */ -#define POLARSSL_AES_C - -/** - * \def POLARSSL_ARC4_C - * - * Enable the ARCFOUR stream cipher. - * - * Module: library/arc4.c - * Caller: library/ssl_tls.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_RC4_128_SHA - * TLS_ECDH_RSA_WITH_RC4_128_SHA - * TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - * TLS_ECDHE_RSA_WITH_RC4_128_SHA - * TLS_ECDHE_PSK_WITH_RC4_128_SHA - * TLS_DHE_PSK_WITH_RC4_128_SHA - * TLS_RSA_WITH_RC4_128_SHA - * TLS_RSA_WITH_RC4_128_MD5 - * TLS_RSA_PSK_WITH_RC4_128_SHA - * TLS_PSK_WITH_RC4_128_SHA - */ -#define POLARSSL_ARC4_C - -/** - * \def POLARSSL_ASN1_PARSE_C - * - * Enable the generic ASN1 parser. - * - * Module: library/asn1.c - * Caller: library/x509.c - * library/dhm.c - * library/pkcs12.c - * library/pkcs5.c - * library/pkparse.c - */ -#define POLARSSL_ASN1_PARSE_C - -/** - * \def POLARSSL_ASN1_WRITE_C - * - * Enable the generic ASN1 writer. - * - * Module: library/asn1write.c - * Caller: library/ecdsa.c - * library/pkwrite.c - * library/x509_create.c - * library/x509write_crt.c - * library/x509write_csr.c - */ -//#define POLARSSL_ASN1_WRITE_C - -/** - * \def POLARSSL_BASE64_C - * - * Enable the Base64 module. - * - * Module: library/base64.c - * Caller: library/pem.c - * - * This module is required for PEM support (required by X.509). - */ -#define POLARSSL_BASE64_C - -/** - * \def POLARSSL_BIGNUM_C - * - * Enable the multi-precision integer library. - * - * Module: library/bignum.c - * Caller: library/dhm.c - * library/ecp.c - * library/ecdsa.c - * library/rsa.c - * library/ssl_tls.c - * - * This module is required for RSA, DHM and ECC (ECDH, ECDSA) support. - */ -#define POLARSSL_BIGNUM_C - -/** - * \def POLARSSL_BLOWFISH_C - * - * Enable the Blowfish block cipher. - * - * Module: library/blowfish.c - */ -//#define POLARSSL_BLOWFISH_C - -/** - * \def POLARSSL_CAMELLIA_C - * - * Enable the Camellia block cipher. - * - * Module: library/camellia.c - * Caller: library/ssl_tls.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - * TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - * TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 - */ -//#define POLARSSL_CAMELLIA_C - -/** - * \def POLARSSL_CCM_C - * - * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. - * - * Module: library/ccm.c - * - * Requires: POLARSSL_AES_C or POLARSSL_CAMELLIA_C - * - * This module enables the AES-CCM ciphersuites, if other requisites are - * enabled as well. - */ -//#define POLARSSL_CCM_C - -/** - * \def POLARSSL_CERTS_C - * - * Enable the test certificates. - * - * Module: library/certs.c - * Caller: - * - * Requires: POLARSSL_PEM_PARSE_C - * - * This module is used for testing (ssl_client/server). - */ -//#define POLARSSL_CERTS_C - -/** - * \def POLARSSL_CIPHER_C - * - * Enable the generic cipher layer. - * - * Module: library/cipher.c - * Caller: library/ssl_tls.c - * - * Uncomment to enable generic cipher wrappers. - */ -#define POLARSSL_CIPHER_C - -/** - * \def POLARSSL_CTR_DRBG_C - * - * Enable the CTR_DRBG AES-256-based random generator. - * - * Module: library/ctr_drbg.c - * Caller: - * - * Requires: POLARSSL_AES_C - * - * This module provides the CTR_DRBG AES-256 random number generator. - */ -//#define POLARSSL_CTR_DRBG_C - -/** - * \def POLARSSL_DEBUG_C - * - * Enable the debug functions. - * - * Module: library/debug.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * This module provides debugging functions. - */ -//#define POLARSSL_DEBUG_C - -/** - * \def POLARSSL_DES_C - * - * Enable the DES block cipher. - * - * Module: library/des.c - * Caller: library/pem.c - * library/ssl_tls.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_WITH_3DES_EDE_CBC_SHA - * TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA - * TLS_PSK_WITH_3DES_EDE_CBC_SHA - * - * PEM_PARSE uses DES/3DES for decrypting encrypted keys. - */ -//#define POLARSSL_DES_C - -/** - * \def POLARSSL_DHM_C - * - * Enable the Diffie-Hellman-Merkle module. - * - * Module: library/dhm.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * This module is used by the following key exchanges: - * DHE-RSA, DHE-PSK - */ -//#define POLARSSL_DHM_C - -/** - * \def POLARSSL_ECDH_C - * - * Enable the elliptic curve Diffie-Hellman library. - * - * Module: library/ecdh.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * This module is used by the following key exchanges: - * ECDHE-ECDSA, ECDHE-RSA, DHE-PSK - * - * Requires: POLARSSL_ECP_C - */ -//#define POLARSSL_ECDH_C - -/** - * \def POLARSSL_ECDSA_C - * - * Enable the elliptic curve DSA library. - * - * Module: library/ecdsa.c - * Caller: - * - * This module is used by the following key exchanges: - * ECDHE-ECDSA - * - * Requires: POLARSSL_ECP_C, POLARSSL_ASN1_WRITE_C, POLARSSL_ASN1_PARSE_C - */ -//#define POLARSSL_ECDSA_C - -/** - * \def POLARSSL_ECP_C - * - * Enable the elliptic curve over GF(p) library. - * - * Module: library/ecp.c - * Caller: library/ecdh.c - * library/ecdsa.c - * - * Requires: POLARSSL_BIGNUM_C and at least one POLARSSL_ECP_DP_XXX_ENABLED - */ -//#define POLARSSL_ECP_C - -/** - * \def POLARSSL_ENTROPY_C - * - * Enable the platform-specific entropy code. - * - * Module: library/entropy.c - * Caller: - * - * Requires: POLARSSL_SHA512_C or POLARSSL_SHA256_C - * - * This module provides a generic entropy pool - */ -//#define POLARSSL_ENTROPY_C - -/** - * \def POLARSSL_ERROR_C - * - * Enable error code to error string conversion. - * - * Module: library/error.c - * Caller: - * - * This module enables polarssl_strerror(). - */ -//#define POLARSSL_ERROR_C - -/** - * \def POLARSSL_GCM_C - * - * Enable the Galois/Counter Mode (GCM) for AES. - * - * Module: library/gcm.c - * - * Requires: POLARSSL_AES_C or POLARSSL_CAMELLIA_C - * - * This module enables the AES-GCM and CAMELLIA-GCM ciphersuites, if other - * requisites are enabled as well. - */ -//#define POLARSSL_GCM_C - -/** - * \def POLARSSL_HAVEGE_C - * - * Enable the HAVEGE random generator. - * - * Warning: the HAVEGE random generator is not suitable for virtualized - * environments - * - * Warning: the HAVEGE random generator is dependent on timing and specific - * processor traits. It is therefore not advised to use HAVEGE as - * your applications primary random generator or primary entropy pool - * input. As a secondary input to your entropy pool, it IS able add - * the (limited) extra entropy it provides. - * - * Module: library/havege.c - * Caller: - * - * Requires: POLARSSL_TIMING_C - * - * Uncomment to enable the HAVEGE random generator. - */ -//#define POLARSSL_HAVEGE_C - -/** - * \def POLARSSL_HMAC_DRBG_C - * - * Enable the HMAC_DRBG random generator. - * - * Module: library/hmac_drbg.c - * Caller: - * - * Requires: POLARSSL_MD_C - * - * Uncomment to enable the HMAC_DRBG random number geerator. - */ -//#define POLARSSL_HMAC_DRBG_C - -/** - * \def POLARSSL_MD_C - * - * Enable the generic message digest layer. - * - * Module: library/md.c - * Caller: - * - * Uncomment to enable generic message digest wrappers. - */ -#define POLARSSL_MD_C - -/** - * \def POLARSSL_MD2_C - * - * Enable the MD2 hash algorithm. - * - * Module: library/md2.c - * Caller: - * - * Uncomment to enable support for (rare) MD2-signed X.509 certs. - */ -//#define POLARSSL_MD2_C - -/** - * \def POLARSSL_MD4_C - * - * Enable the MD4 hash algorithm. - * - * Module: library/md4.c - * Caller: - * - * Uncomment to enable support for (rare) MD4-signed X.509 certs. - */ -//#define POLARSSL_MD4_C - -/** - * \def POLARSSL_MD5_C - * - * Enable the MD5 hash algorithm. - * - * Module: library/md5.c - * Caller: library/md.c - * library/pem.c - * library/ssl_tls.c - * - * This module is required for SSL/TLS and X.509. - * PEM_PARSE uses MD5 for decrypting encrypted keys. - */ -#define POLARSSL_MD5_C - -/** - * \def POLARSSL_MEMORY_C - * Deprecated since 1.3.5. Please use POLARSSL_PLATFORM_MEMORY instead. - */ -//#define POLARSSL_MEMORY_C - -/** - * \def POLARSSL_MEMORY_BUFFER_ALLOC_C - * - * Enable the buffer allocator implementation that makes use of a (stack) - * based buffer to 'allocate' dynamic memory. (replaces malloc() and free() - * calls) - * - * Module: library/memory_buffer_alloc.c - * - * Requires: POLARSSL_PLATFORM_C - * POLARSSL_PLATFORM_MEMORY (to use it within PolarSSL) - * - * Enable this module to enable the buffer memory allocator. - */ -//#define POLARSSL_MEMORY_BUFFER_ALLOC_C - -/** - * \def POLARSSL_NET_C - * - * Enable the TCP/IP networking routines. - * - * Module: library/net.c - * - * This module provides TCP/IP networking routines. - */ -#define POLARSSL_NET_C - -/** - * \def POLARSSL_OID_C - * - * Enable the OID database. - * - * Module: library/oid.c - * Caller: library/asn1write.c - * library/pkcs5.c - * library/pkparse.c - * library/pkwrite.c - * library/rsa.c - * library/x509.c - * library/x509_create.c - * library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * library/x509write_crt.c - * library/x509write_csr.c - * - * This modules translates between OIDs and internal values. - */ -#define POLARSSL_OID_C - -/** - * \def POLARSSL_PADLOCK_C - * - * Enable VIA Padlock support on x86. - * - * Module: library/padlock.c - * Caller: library/aes.c - * - * Requires: POLARSSL_HAVE_ASM - * - * This modules adds support for the VIA PadLock on x86. - */ -//#define POLARSSL_PADLOCK_C - -/** - * \def POLARSSL_PBKDF2_C - * - * Enable PKCS#5 PBKDF2 key derivation function. - * DEPRECATED: Use POLARSSL_PKCS5_C instead - * - * Module: library/pbkdf2.c - * - * Requires: POLARSSL_PKCS5_C - * - * This module adds support for the PKCS#5 PBKDF2 key derivation function. - */ -//#define POLARSSL_PBKDF2_C - -/** - * \def POLARSSL_PEM_PARSE_C - * - * Enable PEM decoding / parsing. - * - * Module: library/pem.c - * Caller: library/dhm.c - * library/pkparse.c - * library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * - * Requires: POLARSSL_BASE64_C - * - * This modules adds support for decoding / parsing PEM files. - */ -#define POLARSSL_PEM_PARSE_C - -/** - * \def POLARSSL_PEM_WRITE_C - * - * Enable PEM encoding / writing. - * - * Module: library/pem.c - * Caller: library/pkwrite.c - * library/x509write_crt.c - * library/x509write_csr.c - * - * Requires: POLARSSL_BASE64_C - * - * This modules adds support for encoding / writing PEM files. - */ -//#define POLARSSL_PEM_WRITE_C - -/** - * \def POLARSSL_PK_C - * - * Enable the generic public (asymetric) key layer. - * - * Module: library/pk.c - * Caller: library/ssl_tls.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * Requires: POLARSSL_RSA_C or POLARSSL_ECP_C - * - * Uncomment to enable generic public key wrappers. - */ -#define POLARSSL_PK_C - -/** - * \def POLARSSL_PK_PARSE_C - * - * Enable the generic public (asymetric) key parser. - * - * Module: library/pkparse.c - * Caller: library/x509_crt.c - * library/x509_csr.c - * - * Requires: POLARSSL_PK_C - * - * Uncomment to enable generic public key parse functions. - */ -#define POLARSSL_PK_PARSE_C - -/** - * \def POLARSSL_PK_WRITE_C - * - * Enable the generic public (asymetric) key writer. - * - * Module: library/pkwrite.c - * Caller: library/x509write.c - * - * Requires: POLARSSL_PK_C - * - * Uncomment to enable generic public key write functions. - */ -//#define POLARSSL_PK_WRITE_C - -/** - * \def POLARSSL_PKCS5_C - * - * Enable PKCS#5 functions. - * - * Module: library/pkcs5.c - * - * Requires: POLARSSL_MD_C - * - * This module adds support for the PKCS#5 functions. - */ -//#define POLARSSL_PKCS5_C - -/** - * \def POLARSSL_PKCS11_C - * - * Enable wrapper for PKCS#11 smartcard support. - * - * Module: library/pkcs11.c - * Caller: library/pk.c - * - * Requires: POLARSSL_PK_C - * - * This module enables SSL/TLS PKCS #11 smartcard support. - * Requires the presence of the PKCS#11 helper library (libpkcs11-helper) - */ -//#define POLARSSL_PKCS11_C - -/** - * \def POLARSSL_PKCS12_C - * - * Enable PKCS#12 PBE functions. - * Adds algorithms for parsing PKCS#8 encrypted private keys - * - * Module: library/pkcs12.c - * Caller: library/pkparse.c - * - * Requires: POLARSSL_ASN1_PARSE_C, POLARSSL_CIPHER_C, POLARSSL_MD_C - * Can use: POLARSSL_ARC4_C - * - * This module enables PKCS#12 functions. - */ -//#define POLARSSL_PKCS12_C - -/** - * \def POLARSSL_PLATFORM_C - * - * Enable the platform abstraction layer that allows you to re-assign - * functions like malloc(), free(), printf(), fprintf() - * - * Module: library/platform.c - * Caller: Most other .c files - * - * This module enables abstraction of common (libc) functions. - */ -#define POLARSSL_PLATFORM_C - -/** - * \def POLARSSL_RIPEMD160_C - * - * Enable the RIPEMD-160 hash algorithm. - * - * Module: library/ripemd160.c - * Caller: library/md.c - * - */ -//#define POLARSSL_RIPEMD160_C - -/** - * \def POLARSSL_RSA_C - * - * Enable the RSA public-key cryptosystem. - * - * Module: library/rsa.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * library/x509.c - * - * This module is used by the following key exchanges: - * RSA, DHE-RSA, ECDHE-RSA, RSA-PSK - * - * Requires: POLARSSL_BIGNUM_C, POLARSSL_OID_C - */ -#define POLARSSL_RSA_C - -/** - * \def POLARSSL_SHA1_C - * - * Enable the SHA1 cryptographic hash algorithm. - * - * Module: library/sha1.c - * Caller: library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * library/x509write_crt.c - * - * This module is required for SSL/TLS and SHA1-signed certificates. - */ -#define POLARSSL_SHA1_C - -/** - * \def POLARSSL_SHA256_C - * - * Enable the SHA-224 and SHA-256 cryptographic hash algorithms. - * (Used to be POLARSSL_SHA2_C) - * - * Module: library/sha256.c - * Caller: library/entropy.c - * library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * This module adds support for SHA-224 and SHA-256. - * This module is required for the SSL/TLS 1.2 PRF function. - */ -#define POLARSSL_SHA256_C - -/** - * \def POLARSSL_SHA512_C - * - * Enable the SHA-384 and SHA-512 cryptographic hash algorithms. - * (Used to be POLARSSL_SHA4_C) - * - * Module: library/sha512.c - * Caller: library/entropy.c - * library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * This module adds support for SHA-384 and SHA-512. - */ -#define POLARSSL_SHA512_C - -/** - * \def POLARSSL_SSL_CACHE_C - * - * Enable simple SSL cache implementation. - * - * Module: library/ssl_cache.c - * Caller: - * - * Requires: POLARSSL_SSL_CACHE_C - */ -#define POLARSSL_SSL_CACHE_C - -/** - * \def POLARSSL_SSL_CLI_C - * - * Enable the SSL/TLS client code. - * - * Module: library/ssl_cli.c - * Caller: - * - * Requires: POLARSSL_SSL_TLS_C - * - * This module is required for SSL/TLS client support. - */ -#define POLARSSL_SSL_CLI_C - -/** - * \def POLARSSL_SSL_SRV_C - * - * Enable the SSL/TLS server code. - * - * Module: library/ssl_srv.c - * Caller: - * - * Requires: POLARSSL_SSL_TLS_C - * - * This module is required for SSL/TLS server support. - */ -//#define POLARSSL_SSL_SRV_C - -/** - * \def POLARSSL_SSL_TLS_C - * - * Enable the generic SSL/TLS code. - * - * Module: library/ssl_tls.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * Requires: POLARSSL_CIPHER_C, POLARSSL_MD_C - * and at least one of the POLARSSL_SSL_PROTO_* defines - * - * This module is required for SSL/TLS. - */ -#define POLARSSL_SSL_TLS_C - -/** - * \def POLARSSL_THREADING_C - * - * Enable the threading abstraction layer. - * By default PolarSSL assumes it is used in a non-threaded environment or that - * contexts are not shared between threads. If you do intend to use contexts - * between threads, you will need to enable this layer to prevent race - * conditions. - * - * Module: library/threading.c - * - * This allows different threading implementations (self-implemented or - * provided). - * - * You will have to enable either POLARSSL_THREADING_ALT or - * POLARSSL_THREADING_PTHREAD. - * - * Enable this layer to allow use of mutexes within PolarSSL - */ -//#define POLARSSL_THREADING_C - -/** - * \def POLARSSL_TIMING_C - * - * Enable the portable timing interface. - * - * Module: library/timing.c - * Caller: library/havege.c - * - * This module is used by the HAVEGE random number generator. - */ -//#define POLARSSL_TIMING_C - -/** - * \def POLARSSL_VERSION_C - * - * Enable run-time version information. - * - * Module: library/version.c - * - * This module provides run-time version information. - */ -#define POLARSSL_VERSION_C - -/** - * \def POLARSSL_X509_USE_C - * - * Enable X.509 core for using certificates. - * - * Module: library/x509.c - * Caller: library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * - * Requires: POLARSSL_ASN1_PARSE_C, POLARSSL_BIGNUM_C, POLARSSL_OID_C, - * POLARSSL_PK_PARSE_C - * - * This module is required for the X.509 parsing modules. - */ -#define POLARSSL_X509_USE_C - -/** - * \def POLARSSL_X509_CRT_PARSE_C - * - * Enable X.509 certificate parsing. - * - * Module: library/x509_crt.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * Requires: POLARSSL_X509_USE_C - * - * This module is required for X.509 certificate parsing. - */ -#define POLARSSL_X509_CRT_PARSE_C - -/** - * \def POLARSSL_X509_CRL_PARSE_C - * - * Enable X.509 CRL parsing. - * - * Module: library/x509_crl.c - * Caller: library/x509_crt.c - * - * Requires: POLARSSL_X509_USE_C - * - * This module is required for X.509 CRL parsing. - */ -//#define POLARSSL_X509_CRL_PARSE_C - -/** - * \def POLARSSL_X509_CSR_PARSE_C - * - * Enable X.509 Certificate Signing Request (CSR) parsing. - * - * Module: library/x509_csr.c - * Caller: library/x509_crt_write.c - * - * Requires: POLARSSL_X509_USE_C - * - * This module is used for reading X.509 certificate request. - */ -//#define POLARSSL_X509_CSR_PARSE_C - -/** - * \def POLARSSL_X509_CREATE_C - * - * Enable X.509 core for creating certificates. - * - * Module: library/x509_create.c - * - * Requires: POLARSSL_BIGNUM_C, POLARSSL_OID_C, POLARSSL_PK_WRITE_C - * - * This module is the basis for creating X.509 certificates and CSRs. - */ -//#define POLARSSL_X509_CREATE_C - -/** - * \def POLARSSL_X509_CRT_WRITE_C - * - * Enable creating X.509 certificates. - * - * Module: library/x509_crt_write.c - * - * Requires: POLARSSL_CREATE_C - * - * This module is required for X.509 certificate creation. - */ -//#define POLARSSL_X509_CRT_WRITE_C - -/** - * \def POLARSSL_X509_CSR_WRITE_C - * - * Enable creating X.509 Certificate Signing Requests (CSR). - * - * Module: library/x509_csr_write.c - * - * Requires: POLARSSL_CREATE_C - * - * This module is required for X.509 certificate request writing. - */ -//#define POLARSSL_X509_CSR_WRITE_C - -/** - * \def POLARSSL_XTEA_C - * - * Enable the XTEA block cipher. - * - * Module: library/xtea.c - * Caller: - */ -//#define POLARSSL_XTEA_C - -/* \} name SECTION: PolarSSL modules */ - -/** - * \name SECTION: Module configuration options - * - * This section allows for the setting of module specific sizes and - * configuration options. The default values are already present in the - * relevant header files and should suffice for the regular use cases. - * - * Our advice is to enable options and change their values here - * only if you have a good reason and know the consequences. - * - * Please check the respective header file for documentation on these - * parameters (to prevent duplicate documentation). - * \{ - */ - -/* MPI / BIGNUM options */ -//#define POLARSSL_MPI_WINDOW_SIZE 6 /**< Maximum windows size used. */ -//#define POLARSSL_MPI_MAX_SIZE 512 /**< Maximum number of bytes for usable MPIs. */ - -/* CTR_DRBG options */ -//#define CTR_DRBG_ENTROPY_LEN 48 /**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */ -//#define CTR_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ -//#define CTR_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ -//#define CTR_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ -//#define CTR_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ - -/* HMAC_DRBG options */ -//#define POLARSSL_HMAC_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ -//#define POLARSSL_HMAC_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ -//#define POLARSSL_HMAC_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ -//#define POLARSSL_HMAC_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ - -/* ECP options */ -//#define POLARSSL_ECP_MAX_BITS 521 /**< Maximum bit size of groups */ -//#define POLARSSL_ECP_WINDOW_SIZE 6 /**< Maximum window size used */ -//#define POLARSSL_ECP_FIXED_POINT_OPTIM 1 /**< Enable fixed-point speed-up */ - -/* Entropy options */ -//#define ENTROPY_MAX_SOURCES 20 /**< Maximum number of sources supported */ -//#define ENTROPY_MAX_GATHER 128 /**< Maximum amount requested from entropy sources */ - -/* Memory buffer allocator options */ -//#define POLARSSL_MEMORY_ALIGN_MULTIPLE 4 /**< Align on multiples of this value */ - -/* Platform options */ -//#define POLARSSL_PLATFORM_STD_MEM_HDR /**< Header to include if POLARSSL_PLATFORM_NO_STD_FUNCTIONS is defined. Don't define if no header is needed. */ -//#define POLARSSL_PLATFORM_STD_MALLOC malloc /**< Default allocator to use, can be undefined */ -//#define POLARSSL_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */ -//#define POLARSSL_PLATFORM_STD_PRINTF printf /**< Default printf to use, can be undefined */ -//#define POLARSSL_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use, can be undefined */ - -/* SSL Cache options */ -//#define SSL_CACHE_DEFAULT_TIMEOUT 86400 /**< 1 day */ -//#define SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /**< Maximum entries in cache */ - -/* SSL options */ -//pvvx/#define SSL_MAX_CONTENT_LEN 4096 /**< Size of the input / output buffer */ -//#define SSL_DEFAULT_TICKET_LIFETIME 86400 /**< Lifetime of session tickets (if enabled) */ -//#define POLARSSL_PSK_MAX_LEN 32 /**< Max size of TLS pre-shared keys, in bytes (default 256 bits) */ - - -#define RTL_CRYPTO_FRAGMENT 15360 /* 15*1024 < 16000 */ - -/** - * Complete list of ciphersuites to use, in order of preference. - * - * \warning No dependency checking is done on that field! This option can only - * be used to restrict the set of available ciphersuites. It is your - * responsibility to make sure the needed modules are active. - * - * Use this to save a few hundred bytes of ROM (default ordering of all - * available ciphersuites) and a few to a few hundred bytes of RAM. - * - * The value below is only an example, not the default. - */ -//#define SSL_CIPHERSUITES TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - -/* Debug options */ -//#define POLARSSL_DEBUG_DFL_MODE POLARSSL_DEBUG_LOG_FULL /**< Default log: Full or Raw */ - -/* \} name SECTION: Module configuration options */ - -#include "check_config.h" - -#endif /* POLARSSL_CONFIG_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ctr_drbg.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ctr_drbg.h deleted file mode 100644 index bebbfe9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ctr_drbg.h +++ /dev/null @@ -1,274 +0,0 @@ -/** - * \file ctr_drbg.h - * - * \brief CTR_DRBG based on AES-256 (NIST SP 800-90) - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_CTR_DRBG_H -#define POLARSSL_CTR_DRBG_H - -#include - -#include "aes.h" - -#define POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED -0x0034 /**< The entropy source failed. */ -#define POLARSSL_ERR_CTR_DRBG_REQUEST_TOO_BIG -0x0036 /**< Too many random requested in single call. */ -#define POLARSSL_ERR_CTR_DRBG_INPUT_TOO_BIG -0x0038 /**< Input too large (Entropy + additional). */ -#define POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR -0x003A /**< Read/write error in file. */ - -#define CTR_DRBG_BLOCKSIZE 16 /**< Block size used by the cipher */ -#define CTR_DRBG_KEYSIZE 32 /**< Key size used by the cipher */ -#define CTR_DRBG_KEYBITS ( CTR_DRBG_KEYSIZE * 8 ) -#define CTR_DRBG_SEEDLEN ( CTR_DRBG_KEYSIZE + CTR_DRBG_BLOCKSIZE ) - /**< The seed length (counter + AES key) */ - -/** - * \name SECTION: Module settings - * - * The configuration options you can set for this module are in this section. - * Either change them in config.h or define them on the compiler command line. - * \{ - */ - -#if !defined(CTR_DRBG_ENTROPY_LEN) -#if defined(POLARSSL_SHA512_C) && !defined(POLARSSL_ENTROPY_FORCE_SHA256) -#define CTR_DRBG_ENTROPY_LEN 48 /**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */ -#else -#define CTR_DRBG_ENTROPY_LEN 32 /**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */ -#endif -#endif - -#if !defined(CTR_DRBG_RESEED_INTERVAL) -#define CTR_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ -#endif - -#if !defined(CTR_DRBG_MAX_INPUT) -#define CTR_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ -#endif - -#if !defined(CTR_DRBG_MAX_REQUEST) -#define CTR_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ -#endif - -#if !defined(CTR_DRBG_MAX_SEED_INPUT) -#define CTR_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ -#endif - -/* \} name SECTION: Module settings */ - -#define CTR_DRBG_PR_OFF 0 /**< No prediction resistance */ -#define CTR_DRBG_PR_ON 1 /**< Prediction resistance enabled */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief CTR_DRBG context structure - */ -typedef struct -{ - unsigned char counter[16]; /*!< counter (V) */ - int reseed_counter; /*!< reseed counter */ - int prediction_resistance; /*!< enable prediction resistance (Automatic - reseed before every random generation) */ - size_t entropy_len; /*!< amount of entropy grabbed on each - (re)seed */ - int reseed_interval; /*!< reseed interval */ - - aes_context aes_ctx; /*!< AES context */ - - /* - * Callbacks (Entropy) - */ - int (*f_entropy)(void *, unsigned char *, size_t); - - void *p_entropy; /*!< context for the entropy function */ -} -ctr_drbg_context; - -/** - * \brief CTR_DRBG initialization - * - * Note: Personalization data can be provided in addition to the more generic - * entropy source to make this instantiation as unique as possible. - * - * \param ctx CTR_DRBG context to be initialized - * \param f_entropy Entropy callback (p_entropy, buffer to fill, buffer - * length) - * \param p_entropy Entropy context - * \param custom Personalization data (Device specific identifiers) - * (Can be NULL) - * \param len Length of personalization data - * - * \return 0 if successful, or - * POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED - */ -int ctr_drbg_init( ctr_drbg_context *ctx, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len ); - -/** - * \brief Clear CTR_CRBG context data - * - * \param ctx CTR_DRBG context to clear - */ -void ctr_drbg_free( ctr_drbg_context *ctx ); - -/** - * \brief Enable / disable prediction resistance (Default: Off) - * - * Note: If enabled, entropy is used for ctx->entropy_len before each call! - * Only use this if you have ample supply of good entropy! - * - * \param ctx CTR_DRBG context - * \param resistance CTR_DRBG_PR_ON or CTR_DRBG_PR_OFF - */ -void ctr_drbg_set_prediction_resistance( ctr_drbg_context *ctx, - int resistance ); - -/** - * \brief Set the amount of entropy grabbed on each (re)seed - * (Default: CTR_DRBG_ENTROPY_LEN) - * - * \param ctx CTR_DRBG context - * \param len Amount of entropy to grab - */ -void ctr_drbg_set_entropy_len( ctr_drbg_context *ctx, - size_t len ); - -/** - * \brief Set the reseed interval - * (Default: CTR_DRBG_RESEED_INTERVAL) - * - * \param ctx CTR_DRBG context - * \param interval Reseed interval - */ -void ctr_drbg_set_reseed_interval( ctr_drbg_context *ctx, - int interval ); - -/** - * \brief CTR_DRBG reseeding (extracts data from entropy source) - * - * \param ctx CTR_DRBG context - * \param additional Additional data to add to state (Can be NULL) - * \param len Length of additional data - * - * \return 0 if successful, or - * POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED - */ -int ctr_drbg_reseed( ctr_drbg_context *ctx, - const unsigned char *additional, size_t len ); - -/** - * \brief CTR_DRBG update state - * - * \param ctx CTR_DRBG context - * \param additional Additional data to update state with - * \param add_len Length of additional data - */ -void ctr_drbg_update( ctr_drbg_context *ctx, - const unsigned char *additional, size_t add_len ); - -/** - * \brief CTR_DRBG generate random with additional update input - * - * Note: Automatically reseeds if reseed_counter is reached. - * - * \param p_rng CTR_DRBG context - * \param output Buffer to fill - * \param output_len Length of the buffer - * \param additional Additional data to update with (Can be NULL) - * \param add_len Length of additional data - * - * \return 0 if successful, or - * POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED, or - * POLARSSL_ERR_CTR_DRBG_REQUEST_TOO_BIG - */ -int ctr_drbg_random_with_add( void *p_rng, - unsigned char *output, size_t output_len, - const unsigned char *additional, size_t add_len ); - -/** - * \brief CTR_DRBG generate random - * - * Note: Automatically reseeds if reseed_counter is reached. - * - * \param p_rng CTR_DRBG context - * \param output Buffer to fill - * \param output_len Length of the buffer - * - * \return 0 if successful, or - * POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED, or - * POLARSSL_ERR_CTR_DRBG_REQUEST_TOO_BIG - */ -int ctr_drbg_random( void *p_rng, - unsigned char *output, size_t output_len ); - -#if defined(POLARSSL_FS_IO) -/** - * \brief Write a seed file - * - * \param ctx CTR_DRBG context - * \param path Name of the file - * - * \return 0 if successful, - * POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR on file error, or - * POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED - */ -int ctr_drbg_write_seed_file( ctr_drbg_context *ctx, const char *path ); - -/** - * \brief Read and update a seed file. Seed is added to this - * instance - * - * \param ctx CTR_DRBG context - * \param path Name of the file - * - * \return 0 if successful, - * POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR on file error, - * POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED or - * POLARSSL_ERR_CTR_DRBG_INPUT_TOO_BIG - */ -int ctr_drbg_update_seed_file( ctr_drbg_context *ctx, const char *path ); -#endif /* POLARSSL_FS_IO */ - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int ctr_drbg_self_test( int verbose ); - -/* Internal functions (do not call directly) */ -int ctr_drbg_init_entropy_len( ctr_drbg_context *, - int (*)(void *, unsigned char *, size_t), void *, - const unsigned char *, size_t, size_t ); - -#ifdef __cplusplus -} -#endif - -#endif /* ctr_drbg.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/debug.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/debug.h deleted file mode 100644 index 0dd79d5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/debug.h +++ /dev/null @@ -1,152 +0,0 @@ -/** - * \file debug.h - * - * \brief Debug functions - * - * Copyright (C) 2006-2011, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_DEBUG_H -#define POLARSSL_DEBUG_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif -#include "ssl.h" -#if defined(POLARSSL_ECP_C) -#include "ecp.h" -#endif - -#if defined(POLARSSL_DEBUG_C) - -#define POLARSSL_DEBUG_LOG_FULL 0 /**< Include file:line in log lines */ -#define POLARSSL_DEBUG_LOG_RAW 1 /**< Only log raw debug lines */ - -/** - * \name SECTION: Module settings - * - * The configuration options you can set for this module are in this section. - * Either change them in config.h or define them on the compiler command line. - * \{ - */ - -#if !defined(POLARSSL_DEBUG_DFL_MODE) -#define POLARSSL_DEBUG_DFL_MODE POLARSSL_DEBUG_LOG_FULL /**< Default log: Full or Raw */ -#endif - -/* \} name SECTION: Module settings */ - - -#define SSL_DEBUG_MSG( level, args ) \ - debug_print_msg( ssl, level, __FILE__, __LINE__, debug_fmt args ); - -#define SSL_DEBUG_RET( level, text, ret ) \ - debug_print_ret( ssl, level, __FILE__, __LINE__, text, ret ); - -#define SSL_DEBUG_BUF( level, text, buf, len ) \ - debug_print_buf( ssl, level, __FILE__, __LINE__, text, buf, len ); - -#if defined(POLARSSL_BIGNUM_C) -#define SSL_DEBUG_MPI( level, text, X ) \ - debug_print_mpi( ssl, level, __FILE__, __LINE__, text, X ); -#endif - -#if defined(POLARSSL_ECP_C) -#define SSL_DEBUG_ECP( level, text, X ) \ - debug_print_ecp( ssl, level, __FILE__, __LINE__, text, X ); -#endif - -#if defined(POLARSSL_X509_CRT_PARSE_C) -#define SSL_DEBUG_CRT( level, text, crt ) \ - debug_print_crt( ssl, level, __FILE__, __LINE__, text, crt ); -#endif - -#else /* POLARSSL_DEBUG_C */ - -#define SSL_DEBUG_MSG( level, args ) do { } while( 0 ) -#define SSL_DEBUG_RET( level, text, ret ) do { } while( 0 ) -#define SSL_DEBUG_BUF( level, text, buf, len ) do { } while( 0 ) -#define SSL_DEBUG_MPI( level, text, X ) do { } while( 0 ) -#define SSL_DEBUG_ECP( level, text, X ) do { } while( 0 ) -#define SSL_DEBUG_CRT( level, text, crt ) do { } while( 0 ) - -#endif /* POLARSSL_DEBUG_C */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Set the log mode for the debug functions globally - * (Default value: POLARSSL_DEBUG_DFL_MODE) - * - * \param log_mode The log mode to use (POLARSSL_DEBUG_LOG_FULL or - * POLARSSL_DEBUG_LOG_RAW) - */ -void debug_set_log_mode( int log_mode ); - -/** - * \brief Set the level threshold to handle globally. Messages that have a - * level over the threshold value are ignored. - * (Default value: 0 (No debug)) - * - * \param threshold maximum level of messages to pass on - */ -void debug_set_threshold( int threshold ); - -char *debug_fmt( const char *format, ... ); - -void debug_print_msg( const ssl_context *ssl, int level, - const char *file, int line, const char *text ); - -void debug_print_ret( const ssl_context *ssl, int level, - const char *file, int line, - const char *text, int ret ); - -void debug_print_buf( const ssl_context *ssl, int level, - const char *file, int line, const char *text, - unsigned char *buf, size_t len ); - -#if defined(POLARSSL_BIGNUM_C) -void debug_print_mpi( const ssl_context *ssl, int level, - const char *file, int line, - const char *text, const mpi *X ); -#endif - -#if defined(POLARSSL_ECP_C) -void debug_print_ecp( const ssl_context *ssl, int level, - const char *file, int line, - const char *text, const ecp_point *X ); -#endif - -#if defined(POLARSSL_X509_CRT_PARSE_C) -void debug_print_crt( const ssl_context *ssl, int level, - const char *file, int line, - const char *text, const x509_crt *crt ); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* debug.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/des.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/des.h deleted file mode 100644 index 8cf1a3b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/des.h +++ /dev/null @@ -1,300 +0,0 @@ -/** - * \file des.h - * - * \brief DES block cipher - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_DES_H -#define POLARSSL_DES_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#define DES_ENCRYPT 1 -#define DES_DECRYPT 0 - -#define POLARSSL_ERR_DES_INVALID_INPUT_LENGTH -0x0032 /**< The data input has an invalid length. */ - -#define DES_KEY_SIZE 8 - -#if !defined(POLARSSL_DES_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief DES context structure - */ -typedef struct -{ - int mode; /*!< encrypt/decrypt */ - uint32_t sk[32]; /*!< DES subkeys */ -#ifdef RTL_HW_CRYPTO - unsigned char enc_key[DES_KEY_SIZE]; - unsigned char dec_key[DES_KEY_SIZE]; -#endif -} -des_context; - -/** - * \brief Triple-DES context structure - */ -typedef struct -{ - int mode; /*!< encrypt/decrypt */ - uint32_t sk[96]; /*!< 3DES subkeys */ -#ifdef RTL_HW_CRYPTO - unsigned char enc_key[DES_KEY_SIZE * 3]; - unsigned char dec_key[DES_KEY_SIZE * 3]; -#endif -} -des3_context; - -/** - * \brief Initialize DES context - * - * \param ctx DES context to be initialized - */ -void des_init( des_context *ctx ); - -/** - * \brief Clear DES context - * - * \param ctx DES context to be cleared - */ -void des_free( des_context *ctx ); - -/** - * \brief Initialize Triple-DES context - * - * \param ctx DES3 context to be initialized - */ -void des3_init( des3_context *ctx ); - -/** - * \brief Clear Triple-DES context - * - * \param ctx DES3 context to be cleared - */ -void des3_free( des3_context *ctx ); - -/** - * \brief Set key parity on the given key to odd. - * - * DES keys are 56 bits long, but each byte is padded with - * a parity bit to allow verification. - * - * \param key 8-byte secret key - */ -void des_key_set_parity( unsigned char key[DES_KEY_SIZE] ); - -/** - * \brief Check that key parity on the given key is odd. - * - * DES keys are 56 bits long, but each byte is padded with - * a parity bit to allow verification. - * - * \param key 8-byte secret key - * - * \return 0 is parity was ok, 1 if parity was not correct. - */ -int des_key_check_key_parity( const unsigned char key[DES_KEY_SIZE] ); - -/** - * \brief Check that key is not a weak or semi-weak DES key - * - * \param key 8-byte secret key - * - * \return 0 if no weak key was found, 1 if a weak key was identified. - */ -int des_key_check_weak( const unsigned char key[DES_KEY_SIZE] ); - -/** - * \brief DES key schedule (56-bit, encryption) - * - * \param ctx DES context to be initialized - * \param key 8-byte secret key - * - * \return 0 - */ -int des_setkey_enc( des_context *ctx, const unsigned char key[DES_KEY_SIZE] ); - -/** - * \brief DES key schedule (56-bit, decryption) - * - * \param ctx DES context to be initialized - * \param key 8-byte secret key - * - * \return 0 - */ -int des_setkey_dec( des_context *ctx, const unsigned char key[DES_KEY_SIZE] ); - -/** - * \brief Triple-DES key schedule (112-bit, encryption) - * - * \param ctx 3DES context to be initialized - * \param key 16-byte secret key - * - * \return 0 - */ -int des3_set2key_enc( des3_context *ctx, - const unsigned char key[DES_KEY_SIZE * 2] ); - -/** - * \brief Triple-DES key schedule (112-bit, decryption) - * - * \param ctx 3DES context to be initialized - * \param key 16-byte secret key - * - * \return 0 - */ -int des3_set2key_dec( des3_context *ctx, - const unsigned char key[DES_KEY_SIZE * 2] ); - -/** - * \brief Triple-DES key schedule (168-bit, encryption) - * - * \param ctx 3DES context to be initialized - * \param key 24-byte secret key - * - * \return 0 - */ -int des3_set3key_enc( des3_context *ctx, - const unsigned char key[DES_KEY_SIZE * 3] ); - -/** - * \brief Triple-DES key schedule (168-bit, decryption) - * - * \param ctx 3DES context to be initialized - * \param key 24-byte secret key - * - * \return 0 - */ -int des3_set3key_dec( des3_context *ctx, - const unsigned char key[DES_KEY_SIZE * 3] ); - -/** - * \brief DES-ECB block encryption/decryption - * - * \param ctx DES context - * \param input 64-bit input block - * \param output 64-bit output block - * - * \return 0 if successful - */ -int des_crypt_ecb( des_context *ctx, - const unsigned char input[8], - unsigned char output[8] ); - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/** - * \brief DES-CBC buffer encryption/decryption - * - * \param ctx DES context - * \param mode DES_ENCRYPT or DES_DECRYPT - * \param length length of the input data - * \param iv initialization vector (updated after use) - * \param input buffer holding the input data - * \param output buffer holding the output data - */ -int des_crypt_cbc( des_context *ctx, - int mode, - size_t length, - unsigned char iv[8], - const unsigned char *input, - unsigned char *output ); -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -/** - * \brief 3DES-ECB block encryption/decryption - * - * \param ctx 3DES context - * \param input 64-bit input block - * \param output 64-bit output block - * - * \return 0 if successful - */ -int des3_crypt_ecb( des3_context *ctx, - const unsigned char input[8], - unsigned char output[8] ); - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/** - * \brief 3DES-CBC buffer encryption/decryption - * - * \param ctx 3DES context - * \param mode DES_ENCRYPT or DES_DECRYPT - * \param length length of the input data - * \param iv initialization vector (updated after use) - * \param input buffer holding the input data - * \param output buffer holding the output data - * - * \return 0 if successful, or POLARSSL_ERR_DES_INVALID_INPUT_LENGTH - */ -int des3_crypt_cbc( des3_context *ctx, - int mode, - size_t length, - unsigned char iv[8], - const unsigned char *input, - unsigned char *output ); -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#ifdef __cplusplus -} -#endif - -#else /* POLARSSL_DES_ALT */ -#include "des_alt.h" -#endif /* POLARSSL_DES_ALT */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int des_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* des.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/dhm.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/dhm.h deleted file mode 100644 index 064472f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/dhm.h +++ /dev/null @@ -1,311 +0,0 @@ -/** - * \file dhm.h - * - * \brief Diffie-Hellman-Merkle key exchange - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_DHM_H -#define POLARSSL_DHM_H - -#include "bignum.h" - -/* - * DHM Error codes - */ -#define POLARSSL_ERR_DHM_BAD_INPUT_DATA -0x3080 /**< Bad input parameters to function. */ -#define POLARSSL_ERR_DHM_READ_PARAMS_FAILED -0x3100 /**< Reading of the DHM parameters failed. */ -#define POLARSSL_ERR_DHM_MAKE_PARAMS_FAILED -0x3180 /**< Making of the DHM parameters failed. */ -#define POLARSSL_ERR_DHM_READ_PUBLIC_FAILED -0x3200 /**< Reading of the public values failed. */ -#define POLARSSL_ERR_DHM_MAKE_PUBLIC_FAILED -0x3280 /**< Making of the public value failed. */ -#define POLARSSL_ERR_DHM_CALC_SECRET_FAILED -0x3300 /**< Calculation of the DHM secret failed. */ -#define POLARSSL_ERR_DHM_INVALID_FORMAT -0x3380 /**< The ASN.1 data is not formatted correctly. */ -#define POLARSSL_ERR_DHM_MALLOC_FAILED -0x3400 /**< Allocation of memory failed. */ -#define POLARSSL_ERR_DHM_FILE_IO_ERROR -0x3480 /**< Read/write of file failed. */ - -/** - * RFC 2409 defines a number of standardized Diffie-Hellman groups - * that can be used. - * RFC 3526 defines a number of standardized Diffie-Hellman groups - * for IKE. - * RFC 5114 defines a number of standardized Diffie-Hellman groups - * that can be used. - * - * Some are included here for convenience. - * - * Included are: - * RFC 2409 6.2. 1024-bit MODP Group (Second Oakley Group) - * RFC 3526 3. 2048-bit MODP Group - * RFC 3526 4. 3072-bit MODP Group - * RFC 5114 2.1. 1024-bit MODP Group with 160-bit Prime Order Subgroup - * RFC 5114 2.2. 2048-bit MODP Group with 224-bit Prime Order Subgroup - */ -#define POLARSSL_DHM_RFC2409_MODP_1024_P \ - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" \ - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" \ - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" \ - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" \ - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381" \ - "FFFFFFFFFFFFFFFF" - -#define POLARSSL_DHM_RFC2409_MODP_1024_G "02" - -#define POLARSSL_DHM_RFC3526_MODP_2048_P \ - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" \ - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" \ - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" \ - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" \ - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" \ - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" \ - "83655D23DCA3AD961C62F356208552BB9ED529077096966D" \ - "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" \ - "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" \ - "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" \ - "15728E5A8AACAA68FFFFFFFFFFFFFFFF" - -#define POLARSSL_DHM_RFC3526_MODP_2048_G "02" - -#define POLARSSL_DHM_RFC3526_MODP_3072_P \ - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" \ - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" \ - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" \ - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" \ - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" \ - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" \ - "83655D23DCA3AD961C62F356208552BB9ED529077096966D" \ - "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" \ - "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" \ - "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" \ - "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" \ - "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" \ - "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" \ - "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" \ - "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" \ - "43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF" - -#define POLARSSL_DHM_RFC3526_MODP_3072_G "02" - -#define POLARSSL_DHM_RFC5114_MODP_1024_P \ - "B10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C6" \ - "9A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C0" \ - "13ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD70" \ - "98488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0" \ - "A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708" \ - "DF1FB2BC2E4A4371" - -#define POLARSSL_DHM_RFC5114_MODP_1024_G \ - "A4D1CBD5C3FD34126765A442EFB99905F8104DD258AC507F" \ - "D6406CFF14266D31266FEA1E5C41564B777E690F5504F213" \ - "160217B4B01B886A5E91547F9E2749F4D7FBD7D3B9A92EE1" \ - "909D0D2263F80A76A6A24C087A091F531DBF0A0169B6A28A" \ - "D662A4D18E73AFA32D779D5918D08BC8858F4DCEF97C2A24" \ - "855E6EEB22B3B2E5" - -#define POLARSSL_DHM_RFC5114_MODP_2048_P \ - "AD107E1E9123A9D0D660FAA79559C51FA20D64E5683B9FD1" \ - "B54B1597B61D0A75E6FA141DF95A56DBAF9A3C407BA1DF15" \ - "EB3D688A309C180E1DE6B85A1274A0A66D3F8152AD6AC212" \ - "9037C9EDEFDA4DF8D91E8FEF55B7394B7AD5B7D0B6C12207" \ - "C9F98D11ED34DBF6C6BA0B2C8BBC27BE6A00E0A0B9C49708" \ - "B3BF8A317091883681286130BC8985DB1602E714415D9330" \ - "278273C7DE31EFDC7310F7121FD5A07415987D9ADC0A486D" \ - "CDF93ACC44328387315D75E198C641A480CD86A1B9E587E8" \ - "BE60E69CC928B2B9C52172E413042E9B23F10B0E16E79763" \ - "C9B53DCF4BA80A29E3FB73C16B8E75B97EF363E2FFA31F71" \ - "CF9DE5384E71B81C0AC4DFFE0C10E64F" - -#define POLARSSL_DHM_RFC5114_MODP_2048_G \ - "AC4032EF4F2D9AE39DF30B5C8FFDAC506CDEBE7B89998CAF"\ - "74866A08CFE4FFE3A6824A4E10B9A6F0DD921F01A70C4AFA"\ - "AB739D7700C29F52C57DB17C620A8652BE5E9001A8D66AD7"\ - "C17669101999024AF4D027275AC1348BB8A762D0521BC98A"\ - "E247150422EA1ED409939D54DA7460CDB5F6C6B250717CBE"\ - "F180EB34118E98D119529A45D6F834566E3025E316A330EF"\ - "BB77A86F0C1AB15B051AE3D428C8F8ACB70A8137150B8EEB"\ - "10E183EDD19963DDD9E263E4770589EF6AA21E7F5F2FF381"\ - "B539CCE3409D13CD566AFBB48D6C019181E1BCFE94B30269"\ - "EDFE72FE9B6AA4BD7B5A0F1C71CFFF4C19C418E1F6EC0179"\ - "81BC087F2A7065B384B890D3191F2BFA" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief DHM context structure - */ -typedef struct -{ - size_t len; /*!< size(P) in chars */ - mpi P; /*!< prime modulus */ - mpi G; /*!< generator */ - mpi X; /*!< secret value */ - mpi GX; /*!< self = G^X mod P */ - mpi GY; /*!< peer = G^Y mod P */ - mpi K; /*!< key = GY^X mod P */ - mpi RP; /*!< cached R^2 mod P */ - mpi Vi; /*!< blinding value */ - mpi Vf; /*!< un-blinding value */ - mpi pX; /*!< previous X */ -} -dhm_context; - -/** - * \brief Initialize DHM context - * - * \param ctx DHM context to be initialized - */ -void dhm_init( dhm_context *ctx ); - -/** - * \brief Parse the ServerKeyExchange parameters - * - * \param ctx DHM context - * \param p &(start of input buffer) - * \param end end of buffer - * - * \return 0 if successful, or an POLARSSL_ERR_DHM_XXX error code - */ -int dhm_read_params( dhm_context *ctx, - unsigned char **p, - const unsigned char *end ); - -/** - * \brief Setup and write the ServerKeyExchange parameters - * - * \param ctx DHM context - * \param x_size private value size in bytes - * \param output destination buffer - * \param olen number of chars written - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \note This function assumes that ctx->P and ctx->G - * have already been properly set (for example - * using mpi_read_string or mpi_read_binary). - * - * \return 0 if successful, or an POLARSSL_ERR_DHM_XXX error code - */ -int dhm_make_params( dhm_context *ctx, int x_size, - unsigned char *output, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Import the peer's public value G^Y - * - * \param ctx DHM context - * \param input input buffer - * \param ilen size of buffer - * - * \return 0 if successful, or an POLARSSL_ERR_DHM_XXX error code - */ -int dhm_read_public( dhm_context *ctx, - const unsigned char *input, size_t ilen ); - -/** - * \brief Create own private value X and export G^X - * - * \param ctx DHM context - * \param x_size private value size in bytes - * \param output destination buffer - * \param olen must be equal to ctx->P.len - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \return 0 if successful, or an POLARSSL_ERR_DHM_XXX error code - */ -int dhm_make_public( dhm_context *ctx, int x_size, - unsigned char *output, size_t olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Derive and export the shared secret (G^Y)^X mod P - * - * \param ctx DHM context - * \param output destination buffer - * \param olen on entry, must hold the size of the destination buffer - * on exit, holds the actual number of bytes written - * \param f_rng RNG function, for blinding purposes - * \param p_rng RNG parameter - * - * \return 0 if successful, or an POLARSSL_ERR_DHM_XXX error code - * - * \note If non-NULL, f_rng is used to blind the input as - * countermeasure against timing attacks. Blinding is - * automatically used if and only if our secret value X is - * re-used and costs nothing otherwise, so it is recommended - * to always pass a non-NULL f_rng argument. - */ -int dhm_calc_secret( dhm_context *ctx, - unsigned char *output, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Free and clear the components of a DHM key - * - * \param ctx DHM context to free and clear - */ -void dhm_free( dhm_context *ctx ); - -#if defined(POLARSSL_ASN1_PARSE_C) -/** \ingroup x509_module */ -/** - * \brief Parse DHM parameters - * - * \param dhm DHM context to be initialized - * \param dhmin input buffer - * \param dhminlen size of the buffer - * - * \return 0 if successful, or a specific DHM or PEM error code - */ -int dhm_parse_dhm( dhm_context *dhm, const unsigned char *dhmin, - size_t dhminlen ); - -#if defined(POLARSSL_FS_IO) -/** \ingroup x509_module */ -/** - * \brief Load and parse DHM parameters - * - * \param dhm DHM context to be initialized - * \param path filename to read the DHM Parameters from - * - * \return 0 if successful, or a specific DHM or PEM error code - */ -int dhm_parse_dhmfile( dhm_context *dhm, const char *path ); -#endif /* POLARSSL_FS_IO */ -#endif /* POLARSSL_ASN1_PARSE_C */ - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int dhm_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* dhm.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ecdh.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ecdh.h deleted file mode 100644 index 525cade..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ecdh.h +++ /dev/null @@ -1,225 +0,0 @@ -/** - * \file ecdh.h - * - * \brief Elliptic curve Diffie-Hellman - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_ECDH_H -#define POLARSSL_ECDH_H - -#include "ecp.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * When importing from an EC key, select if it is our key or the peer's key - */ -typedef enum -{ - POLARSSL_ECDH_OURS, - POLARSSL_ECDH_THEIRS, -} ecdh_side; - -/** - * \brief ECDH context structure - */ -typedef struct -{ - ecp_group grp; /*!< elliptic curve used */ - mpi d; /*!< our secret value (private key) */ - ecp_point Q; /*!< our public value (public key) */ - ecp_point Qp; /*!< peer's public value (public key) */ - mpi z; /*!< shared secret */ - int point_format; /*!< format for point export in TLS messages */ - ecp_point Vi; /*!< blinding value (for later) */ - ecp_point Vf; /*!< un-blinding value (for later) */ - mpi _d; /*!< previous d (for later) */ -} -ecdh_context; - -/** - * \brief Generate a public key. - * Raw function that only does the core computation. - * - * \param grp ECP group - * \param d Destination MPI (secret exponent, aka private key) - * \param Q Destination point (public key) - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \return 0 if successful, - * or a POLARSSL_ERR_ECP_XXX or POLARSSL_MPI_XXX error code - */ -int ecdh_gen_public( ecp_group *grp, mpi *d, ecp_point *Q, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Compute shared secret - * Raw function that only does the core computation. - * - * \param grp ECP group - * \param z Destination MPI (shared secret) - * \param Q Public key from other party - * \param d Our secret exponent (private key) - * \param f_rng RNG function (see notes) - * \param p_rng RNG parameter - * - * \return 0 if successful, - * or a POLARSSL_ERR_ECP_XXX or POLARSSL_MPI_XXX error code - * - * \note If f_rng is not NULL, it is used to implement - * countermeasures against potential elaborate timing - * attacks, see \c ecp_mul() for details. - */ -int ecdh_compute_shared( ecp_group *grp, mpi *z, - const ecp_point *Q, const mpi *d, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Initialize context - * - * \param ctx Context to initialize - */ -void ecdh_init( ecdh_context *ctx ); - -/** - * \brief Free context - * - * \param ctx Context to free - */ -void ecdh_free( ecdh_context *ctx ); - -/** - * \brief Generate a public key and a TLS ServerKeyExchange payload. - * (First function used by a TLS server for ECDHE.) - * - * \param ctx ECDH context - * \param olen number of chars written - * \param buf destination buffer - * \param blen length of buffer - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \note This function assumes that ctx->grp has already been - * properly set (for example using ecp_use_known_dp). - * - * \return 0 if successful, or an POLARSSL_ERR_ECP_XXX error code - */ -int ecdh_make_params( ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Parse and procress a TLS ServerKeyExhange payload. - * (First function used by a TLS client for ECDHE.) - * - * \param ctx ECDH context - * \param buf pointer to start of input buffer - * \param end one past end of buffer - * - * \return 0 if successful, or an POLARSSL_ERR_ECP_XXX error code - */ -int ecdh_read_params( ecdh_context *ctx, - const unsigned char **buf, const unsigned char *end ); - -/** - * \brief Setup an ECDH context from an EC key. - * (Used by clients and servers in place of the - * ServerKeyEchange for static ECDH: import ECDH parameters - * from a certificate's EC key information.) - * - * \param ctx ECDH constext to set - * \param key EC key to use - * \param side Is it our key (1) or the peer's key (0) ? - * - * \return 0 if successful, or an POLARSSL_ERR_ECP_XXX error code - */ -int ecdh_get_params( ecdh_context *ctx, const ecp_keypair *key, - ecdh_side side ); - -/** - * \brief Generate a public key and a TLS ClientKeyExchange payload. - * (Second function used by a TLS client for ECDH(E).) - * - * \param ctx ECDH context - * \param olen number of bytes actually written - * \param buf destination buffer - * \param blen size of destination buffer - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \return 0 if successful, or an POLARSSL_ERR_ECP_XXX error code - */ -int ecdh_make_public( ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Parse and process a TLS ClientKeyExchange payload. - * (Second function used by a TLS server for ECDH(E).) - * - * \param ctx ECDH context - * \param buf start of input buffer - * \param blen length of input buffer - * - * \return 0 if successful, or an POLARSSL_ERR_ECP_XXX error code - */ -int ecdh_read_public( ecdh_context *ctx, - const unsigned char *buf, size_t blen ); - -/** - * \brief Derive and export the shared secret. - * (Last function used by both TLS client en servers.) - * - * \param ctx ECDH context - * \param olen number of bytes written - * \param buf destination buffer - * \param blen buffer length - * \param f_rng RNG function, see notes for \c ecdh_compute_shared() - * \param p_rng RNG parameter - * - * \return 0 if successful, or an POLARSSL_ERR_ECP_XXX error code - */ -int ecdh_calc_secret( ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int ecdh_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* ecdh.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ecdsa.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ecdsa.h deleted file mode 100644 index d99a17a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ecdsa.h +++ /dev/null @@ -1,236 +0,0 @@ -/** - * \file ecdsa.h - * - * \brief Elliptic curve DSA - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_ECDSA_H -#define POLARSSL_ECDSA_H - -#include "ecp.h" - -#if defined(POLARSSL_ECDSA_DETERMINISTIC) -#include "md.h" -#endif - -/** - * \brief ECDSA context structure - * - * \note Purposefully begins with the same members as struct ecp_keypair. - */ -typedef struct -{ - ecp_group grp; /*!< elliptic curve used */ - mpi d; /*!< secret signature key */ - ecp_point Q; /*!< public signature key */ - mpi r; /*!< first integer from signature */ - mpi s; /*!< second integer from signature */ -} -ecdsa_context; - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Compute ECDSA signature of a previously hashed message - * - * \param grp ECP group - * \param r First output integer - * \param s Second output integer - * \param d Private signing key - * \param buf Message hash - * \param blen Length of buf - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \return 0 if successful, - * or a POLARSSL_ERR_ECP_XXX or POLARSSL_MPI_XXX error code - */ -int ecdsa_sign( ecp_group *grp, mpi *r, mpi *s, - const mpi *d, const unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); - -#if defined(POLARSSL_ECDSA_DETERMINISTIC) -/** - * \brief Compute ECDSA signature of a previously hashed message - * (deterministic version) - * - * \param grp ECP group - * \param r First output integer - * \param s Second output integer - * \param d Private signing key - * \param buf Message hash - * \param blen Length of buf - * \param md_alg MD algorithm used to hash the message - * - * \return 0 if successful, - * or a POLARSSL_ERR_ECP_XXX or POLARSSL_MPI_XXX error code - */ -int ecdsa_sign_det( ecp_group *grp, mpi *r, mpi *s, - const mpi *d, const unsigned char *buf, size_t blen, - md_type_t md_alg ); -#endif /* POLARSSL_ECDSA_DETERMINISTIC */ - -/** - * \brief Verify ECDSA signature of a previously hashed message - * - * \param grp ECP group - * \param buf Message hash - * \param blen Length of buf - * \param Q Public key to use for verification - * \param r First integer of the signature - * \param s Second integer of the signature - * - * \return 0 if successful, - * POLARSSL_ERR_ECP_BAD_INPUT_DATA if signature is invalid - * or a POLARSSL_ERR_ECP_XXX or POLARSSL_MPI_XXX error code - */ -int ecdsa_verify( ecp_group *grp, - const unsigned char *buf, size_t blen, - const ecp_point *Q, const mpi *r, const mpi *s); - -/** - * \brief Compute ECDSA signature and write it to buffer, - * serialized as defined in RFC 4492 page 20. - * (Not thread-safe to use same context in multiple threads) - * - * \param ctx ECDSA context - * \param hash Message hash - * \param hlen Length of hash - * \param sig Buffer that will hold the signature - * \param slen Length of the signature written - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \note The "sig" buffer must be at least as large as twice the - * size of the curve used, plus 7 (eg. 71 bytes if a 256-bit - * curve is used). - * - * \return 0 if successful, - * or a POLARSSL_ERR_ECP, POLARSSL_ERR_MPI or - * POLARSSL_ERR_ASN1 error code - */ -int ecdsa_write_signature( ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - unsigned char *sig, size_t *slen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -#if defined(POLARSSL_ECDSA_DETERMINISTIC) -/** - * \brief Compute ECDSA signature and write it to buffer, - * serialized as defined in RFC 4492 page 20. - * Deterministic version, RFC 6979. - * (Not thread-safe to use same context in multiple threads) - * - * \param ctx ECDSA context - * \param hash Message hash - * \param hlen Length of hash - * \param sig Buffer that will hold the signature - * \param slen Length of the signature written - * \param md_alg MD algorithm used to hash the message - * - * \note The "sig" buffer must be at least as large as twice the - * size of the curve used, plus 7 (eg. 71 bytes if a 256-bit - * curve is used). - * - * \return 0 if successful, - * or a POLARSSL_ERR_ECP, POLARSSL_ERR_MPI or - * POLARSSL_ERR_ASN1 error code - */ -int ecdsa_write_signature_det( ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - unsigned char *sig, size_t *slen, - md_type_t md_alg ); -#endif /* POLARSSL_ECDSA_DETERMINISTIC */ - -/** - * \brief Read and verify an ECDSA signature - * - * \param ctx ECDSA context - * \param hash Message hash - * \param hlen Size of hash - * \param sig Signature to read and verify - * \param slen Size of sig - * - * \return 0 if successful, - * POLARSSL_ERR_ECP_BAD_INPUT_DATA if signature is invalid, - * POLARSSL_ERR_ECP_SIG_LEN_MISTMATCH if the signature is - * valid but its actual length is less than siglen, - * or a POLARSSL_ERR_ECP or POLARSSL_ERR_MPI error code - */ -int ecdsa_read_signature( ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - const unsigned char *sig, size_t slen ); - -/** - * \brief Generate an ECDSA keypair on the given curve - * - * \param ctx ECDSA context in which the keypair should be stored - * \param gid Group (elliptic curve) to use. One of the various - * POLARSSL_ECP_DP_XXX macros depending on configuration. - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \return 0 on success, or a POLARSSL_ERR_ECP code. - */ -int ecdsa_genkey( ecdsa_context *ctx, ecp_group_id gid, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); - -/** - * \brief Set an ECDSA context from an EC key pair - * - * \param ctx ECDSA context to set - * \param key EC key to use - * - * \return 0 on success, or a POLARSSL_ERR_ECP code. - */ -int ecdsa_from_keypair( ecdsa_context *ctx, const ecp_keypair *key ); - -/** - * \brief Initialize context - * - * \param ctx Context to initialize - */ -void ecdsa_init( ecdsa_context *ctx ); - -/** - * \brief Free context - * - * \param ctx Context to free - */ -void ecdsa_free( ecdsa_context *ctx ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int ecdsa_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* ecdsa.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ecp.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ecp.h deleted file mode 100644 index 7192f1e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ecp.h +++ /dev/null @@ -1,651 +0,0 @@ -/** - * \file ecp.h - * - * \brief Elliptic curves over GF(p) - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_ECP_H -#define POLARSSL_ECP_H - -#include "bignum.h" - -/* - * ECP error codes - */ -#define POLARSSL_ERR_ECP_BAD_INPUT_DATA -0x4F80 /**< Bad input parameters to function. */ -#define POLARSSL_ERR_ECP_BUFFER_TOO_SMALL -0x4F00 /**< The buffer is too small to write to. */ -#define POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE -0x4E80 /**< Requested curve not available. */ -#define POLARSSL_ERR_ECP_VERIFY_FAILED -0x4E00 /**< The signature is not valid. */ -#define POLARSSL_ERR_ECP_MALLOC_FAILED -0x4D80 /**< Memory allocation failed. */ -#define POLARSSL_ERR_ECP_RANDOM_FAILED -0x4D00 /**< Generation of random value, such as (ephemeral) key, failed. */ -#define POLARSSL_ERR_ECP_INVALID_KEY -0x4C80 /**< Invalid private or public key. */ -#define POLARSSL_ERR_ECP_SIG_LEN_MISMATCH -0x4C00 /**< Signature is valid but shorter than the user-supplied length. */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Domain parameters (curve, subgroup and generator) identifiers. - * - * Only curves over prime fields are supported. - * - * \warning This library does not support validation of arbitrary domain - * parameters. Therefore, only well-known domain parameters from trusted - * sources should be used. See ecp_use_known_dp(). - */ -typedef enum -{ - POLARSSL_ECP_DP_NONE = 0, - POLARSSL_ECP_DP_SECP192R1, /*!< 192-bits NIST curve */ - POLARSSL_ECP_DP_SECP224R1, /*!< 224-bits NIST curve */ - POLARSSL_ECP_DP_SECP256R1, /*!< 256-bits NIST curve */ - POLARSSL_ECP_DP_SECP384R1, /*!< 384-bits NIST curve */ - POLARSSL_ECP_DP_SECP521R1, /*!< 521-bits NIST curve */ - POLARSSL_ECP_DP_BP256R1, /*!< 256-bits Brainpool curve */ - POLARSSL_ECP_DP_BP384R1, /*!< 384-bits Brainpool curve */ - POLARSSL_ECP_DP_BP512R1, /*!< 512-bits Brainpool curve */ - POLARSSL_ECP_DP_M221, /*!< (not implemented yet) */ - POLARSSL_ECP_DP_M255, /*!< Curve25519 */ - POLARSSL_ECP_DP_M383, /*!< (not implemented yet) */ - POLARSSL_ECP_DP_M511, /*!< (not implemented yet) */ - POLARSSL_ECP_DP_SECP192K1, /*!< 192-bits "Koblitz" curve */ - POLARSSL_ECP_DP_SECP224K1, /*!< 224-bits "Koblitz" curve */ - POLARSSL_ECP_DP_SECP256K1, /*!< 256-bits "Koblitz" curve */ -} ecp_group_id; - -/** - * Number of supported curves (plus one for NONE). - * - * (Montgomery curves excluded for now.) - */ -#define POLARSSL_ECP_DP_MAX 12 - -/** - * Curve information for use by other modules - */ -typedef struct -{ - ecp_group_id grp_id; /*!< Internal identifier */ - uint16_t tls_id; /*!< TLS NamedCurve identifier */ - uint16_t size; /*!< Curve size in bits */ - const char *name; /*!< Human-friendly name */ -} ecp_curve_info; - -/** - * \brief ECP point structure (jacobian coordinates) - * - * \note All functions expect and return points satisfying - * the following condition: Z == 0 or Z == 1. (Other - * values of Z are used by internal functions only.) - * The point is zero, or "at infinity", if Z == 0. - * Otherwise, X and Y are its standard (affine) coordinates. - */ -typedef struct -{ - mpi X; /*!< the point's X coordinate */ - mpi Y; /*!< the point's Y coordinate */ - mpi Z; /*!< the point's Z coordinate */ -} -ecp_point; - -/** - * \brief ECP group structure - * - * We consider two types of curves equations: - * 1. Short Weierstrass y^2 = x^3 + A x + B mod P (SEC1 + RFC 4492) - * 2. Montgomery, y^2 = x^3 + A x^2 + x mod P (M255 + draft) - * In both cases, a generator G for a prime-order subgroup is fixed. In the - * short weierstrass, this subgroup is actually the whole curve, and its - * cardinal is denoted by N. - * - * In the case of Short Weierstrass curves, our code requires that N is an odd - * prime. (Use odd in ecp_mul() and prime in ecdsa_sign() for blinding.) - * - * In the case of Montgomery curves, we don't store A but (A + 2) / 4 which is - * the quantity actually used in the formulas. Also, nbits is not the size of N - * but the required size for private keys. - * - * If modp is NULL, reduction modulo P is done using a generic algorithm. - * Otherwise, it must point to a function that takes an mpi in the range - * 0..2^(2*pbits)-1 and transforms it in-place in an integer of little more - * than pbits, so that the integer may be efficiently brought in the 0..P-1 - * range by a few additions or substractions. It must return 0 on success and - * non-zero on failure. - */ -typedef struct -{ - ecp_group_id id; /*!< internal group identifier */ - mpi P; /*!< prime modulus of the base field */ - mpi A; /*!< 1. A in the equation, or 2. (A + 2) / 4 */ - mpi B; /*!< 1. B in the equation, or 2. unused */ - ecp_point G; /*!< generator of the (sub)group used */ - mpi N; /*!< 1. the order of G, or 2. unused */ - size_t pbits; /*!< number of bits in P */ - size_t nbits; /*!< number of bits in 1. P, or 2. private keys */ - unsigned int h; /*!< internal: 1 if the constants are static */ - int (*modp)(mpi *); /*!< function for fast reduction mod P */ - int (*t_pre)(ecp_point *, void *); /*!< unused */ - int (*t_post)(ecp_point *, void *); /*!< unused */ - void *t_data; /*!< unused */ - ecp_point *T; /*!< pre-computed points for ecp_mul_comb() */ - size_t T_size; /*!< number for pre-computed points */ -} -ecp_group; - -/** - * \brief ECP key pair structure - * - * A generic key pair that could be used for ECDSA, fixed ECDH, etc. - * - * \note Members purposefully in the same order as struc ecdsa_context. - */ -typedef struct -{ - ecp_group grp; /*!< Elliptic curve and base point */ - mpi d; /*!< our secret value */ - ecp_point Q; /*!< our public value */ -} -ecp_keypair; - -/** - * \name SECTION: Module settings - * - * The configuration options you can set for this module are in this section. - * Either change them in config.h or define them on the compiler command line. - * \{ - */ - -#if !defined(POLARSSL_ECP_MAX_BITS) -/** - * Maximum size of the groups (that is, of N and P) - */ -#define POLARSSL_ECP_MAX_BITS 521 /**< Maximum bit size of groups */ -#endif - -#define POLARSSL_ECP_MAX_BYTES ( ( POLARSSL_ECP_MAX_BITS + 7 ) / 8 ) -#define POLARSSL_ECP_MAX_PT_LEN ( 2 * POLARSSL_ECP_MAX_BYTES + 1 ) - -#if !defined(POLARSSL_ECP_WINDOW_SIZE) -/* - * Maximum "window" size used for point multiplication. - * Default: 6. - * Minimum value: 2. Maximum value: 7. - * - * Result is an array of at most ( 1 << ( POLARSSL_ECP_WINDOW_SIZE - 1 ) ) - * points used for point multiplication. This value is directly tied to EC - * peak memory usage, so decreasing it by one should roughly cut memory usage - * by two (if large curves are in use). - * - * Reduction in size may reduce speed, but larger curves are impacted first. - * Sample performances (in ECDHE handshakes/s, with FIXED_POINT_OPTIM = 1): - * w-size: 6 5 4 3 2 - * 521 145 141 135 120 97 - * 384 214 209 198 177 146 - * 256 320 320 303 262 226 - - * 224 475 475 453 398 342 - * 192 640 640 633 587 476 - */ -#define POLARSSL_ECP_WINDOW_SIZE 6 /**< Maximum window size used */ -#endif /* POLARSSL_ECP_WINDOW_SIZE */ - -#if !defined(POLARSSL_ECP_FIXED_POINT_OPTIM) -/* - * Trade memory for speed on fixed-point multiplication. - * - * This speeds up repeated multiplication of the generator (that is, the - * multiplication in ECDSA signatures, and half of the multiplications in - * ECDSA verification and ECDHE) by a factor roughly 3 to 4. - * - * The cost is increasing EC peak memory usage by a factor roughly 2. - * - * Change this value to 0 to reduce peak memory usage. - */ -#define POLARSSL_ECP_FIXED_POINT_OPTIM 1 /**< Enable fixed-point speed-up */ -#endif /* POLARSSL_ECP_FIXED_POINT_OPTIM */ - -/* \} name SECTION: Module settings */ - -/* - * Point formats, from RFC 4492's enum ECPointFormat - */ -#define POLARSSL_ECP_PF_UNCOMPRESSED 0 /**< Uncompressed point format */ -#define POLARSSL_ECP_PF_COMPRESSED 1 /**< Compressed point format */ - -/* - * Some other constants from RFC 4492 - */ -#define POLARSSL_ECP_TLS_NAMED_CURVE 3 /**< ECCurveType's named_curve */ - -/** - * \brief Get the list of supported curves in order of preferrence - * (full information) - * - * \return A statically allocated array, the last entry is 0. - */ -const ecp_curve_info *ecp_curve_list( void ); - -/** - * \brief Get the list of supported curves in order of preferrence - * (grp_id only) - * - * \return A statically allocated array, - * terminated with POLARSSL_ECP_DP_NONE. - */ -const ecp_group_id *ecp_grp_id_list( void ); - -/** - * \brief Get curve information from an internal group identifier - * - * \param grp_id A POLARSSL_ECP_DP_XXX value - * - * \return The associated curve information or NULL - */ -const ecp_curve_info *ecp_curve_info_from_grp_id( ecp_group_id grp_id ); - -/** - * \brief Get curve information from a TLS NamedCurve value - * - * \param tls_id A POLARSSL_ECP_DP_XXX value - * - * \return The associated curve information or NULL - */ -const ecp_curve_info *ecp_curve_info_from_tls_id( uint16_t tls_id ); - -/** - * \brief Get curve information from a human-readable name - * - * \param name The name - * - * \return The associated curve information or NULL - */ -const ecp_curve_info *ecp_curve_info_from_name( const char *name ); - -/** - * \brief Initialize a point (as zero) - */ -void ecp_point_init( ecp_point *pt ); - -/** - * \brief Initialize a group (to something meaningless) - */ -void ecp_group_init( ecp_group *grp ); - -/** - * \brief Initialize a key pair (as an invalid one) - */ -void ecp_keypair_init( ecp_keypair *key ); - -/** - * \brief Free the components of a point - */ -void ecp_point_free( ecp_point *pt ); - -/** - * \brief Free the components of an ECP group - */ -void ecp_group_free( ecp_group *grp ); - -/** - * \brief Free the components of a key pair - */ -void ecp_keypair_free( ecp_keypair *key ); - -/** - * \brief Copy the contents of point Q into P - * - * \param P Destination point - * \param Q Source point - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int ecp_copy( ecp_point *P, const ecp_point *Q ); - -/** - * \brief Copy the contents of a group object - * - * \param dst Destination group - * \param src Source group - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int ecp_group_copy( ecp_group *dst, const ecp_group *src ); - -/** - * \brief Set a point to zero - * - * \param pt Destination point - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - */ -int ecp_set_zero( ecp_point *pt ); - -/** - * \brief Tell if a point is zero - * - * \param pt Point to test - * - * \return 1 if point is zero, 0 otherwise - */ -int ecp_is_zero( ecp_point *pt ); - -/** - * \brief Import a non-zero point from two ASCII strings - * - * \param P Destination point - * \param radix Input numeric base - * \param x First affine coordinate as a null-terminated string - * \param y Second affine coordinate as a null-terminated string - * - * \return 0 if successful, or a POLARSSL_ERR_MPI_XXX error code - */ -int ecp_point_read_string( ecp_point *P, int radix, - const char *x, const char *y ); - -/** - * \brief Export a point into unsigned binary data - * - * \param grp Group to which the point should belong - * \param P Point to export - * \param format Point format, should be a POLARSSL_ECP_PF_XXX macro - * \param olen Length of the actual output - * \param buf Output buffer - * \param buflen Length of the output buffer - * - * \return 0 if successful, - * or POLARSSL_ERR_ECP_BAD_INPUT_DATA - * or POLARSSL_ERR_ECP_BUFFER_TOO_SMALL - */ -int ecp_point_write_binary( const ecp_group *grp, const ecp_point *P, - int format, size_t *olen, - unsigned char *buf, size_t buflen ); - -/** - * \brief Import a point from unsigned binary data - * - * \param grp Group to which the point should belong - * \param P Point to import - * \param buf Input buffer - * \param ilen Actual length of input - * - * \return 0 if successful, - * POLARSSL_ERR_ECP_BAD_INPUT_DATA if input is invalid, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed, - * POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE if the point format - * is not implemented. - * - * \note This function does NOT check that the point actually - * belongs to the given group, see ecp_check_pubkey() for - * that. - */ -int ecp_point_read_binary( const ecp_group *grp, ecp_point *P, - const unsigned char *buf, size_t ilen ); - -/** - * \brief Import a point from a TLS ECPoint record - * - * \param grp ECP group used - * \param pt Destination point - * \param buf $(Start of input buffer) - * \param len Buffer length - * - * \return O if successful, - * POLARSSL_ERR_MPI_XXX if initialization failed - * POLARSSL_ERR_ECP_BAD_INPUT_DATA if input is invalid - */ -int ecp_tls_read_point( const ecp_group *grp, ecp_point *pt, - const unsigned char **buf, size_t len ); - -/** - * \brief Export a point as a TLS ECPoint record - * - * \param grp ECP group used - * \param pt Point to export - * \param format Export format - * \param olen length of data written - * \param buf Buffer to write to - * \param blen Buffer length - * - * \return 0 if successful, - * or POLARSSL_ERR_ECP_BAD_INPUT_DATA - * or POLARSSL_ERR_ECP_BUFFER_TOO_SMALL - */ -int ecp_tls_write_point( const ecp_group *grp, const ecp_point *pt, - int format, size_t *olen, - unsigned char *buf, size_t blen ); - -/** - * \brief Import an ECP group from null-terminated ASCII strings - * - * \param grp Destination group - * \param radix Input numeric base - * \param p Prime modulus of the base field - * \param b Constant term in the equation - * \param gx The generator's X coordinate - * \param gy The generator's Y coordinate - * \param n The generator's order - * - * \return 0 if successful, or a POLARSSL_ERR_MPI_XXX error code - * - * \note Sets all fields except modp. - */ -int ecp_group_read_string( ecp_group *grp, int radix, - const char *p, const char *b, - const char *gx, const char *gy, const char *n); - -/** - * \brief Set a group using well-known domain parameters - * - * \param grp Destination group - * \param index Index in the list of well-known domain parameters - * - * \return O if successful, - * POLARSSL_ERR_MPI_XXX if initialization failed - * POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE for unkownn groups - * - * \note Index should be a value of RFC 4492's enum NamdeCurve, - * possibly in the form of a POLARSSL_ECP_DP_XXX macro. - */ -int ecp_use_known_dp( ecp_group *grp, ecp_group_id index ); - -/** - * \brief Set a group from a TLS ECParameters record - * - * \param grp Destination group - * \param buf &(Start of input buffer) - * \param len Buffer length - * - * \return O if successful, - * POLARSSL_ERR_MPI_XXX if initialization failed - * POLARSSL_ERR_ECP_BAD_INPUT_DATA if input is invalid - */ -int ecp_tls_read_group( ecp_group *grp, const unsigned char **buf, size_t len ); - -/** - * \brief Write the TLS ECParameters record for a group - * - * \param grp ECP group used - * \param olen Number of bytes actually written - * \param buf Buffer to write to - * \param blen Buffer length - * - * \return 0 if successful, - * or POLARSSL_ERR_ECP_BUFFER_TOO_SMALL - */ -int ecp_tls_write_group( const ecp_group *grp, size_t *olen, - unsigned char *buf, size_t blen ); - -/** - * \brief Addition: R = P + Q - * - * \param grp ECP group - * \param R Destination point - * \param P Left-hand point - * \param Q Right-hand point - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - * - * \note This function does not support Montgomery curves, such as - * Curve25519. - */ -int ecp_add( const ecp_group *grp, ecp_point *R, - const ecp_point *P, const ecp_point *Q ); - -/** - * \brief Subtraction: R = P - Q - * - * \param grp ECP group - * \param R Destination point - * \param P Left-hand point - * \param Q Right-hand point - * - * \return 0 if successful, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - * - * \note This function does not support Montgomery curves, such as - * Curve25519. - */ -int ecp_sub( const ecp_group *grp, ecp_point *R, - const ecp_point *P, const ecp_point *Q ); - -/** - * \brief Multiplication by an integer: R = m * P - * (Not thread-safe to use same group in multiple threads) - * - * \param grp ECP group - * \param R Destination point - * \param m Integer by which to multiply - * \param P Point to multiply - * \param f_rng RNG function (see notes) - * \param p_rng RNG parameter - * - * \return 0 if successful, - * POLARSSL_ERR_ECP_INVALID_KEY if m is not a valid privkey - * or P is not a valid pubkey, - * POLARSSL_ERR_MPI_MALLOC_FAILED if memory allocation failed - * - * \note In order to prevent timing attacks, this function - * executes the exact same sequence of (base field) - * operations for any valid m. It avoids any if-branch or - * array index depending on the value of m. - * - * \note If f_rng is not NULL, it is used to randomize intermediate - * results in order to prevent potential timing attacks - * targeting these results. It is recommended to always - * provide a non-NULL f_rng (the overhead is negligible). - */ -int ecp_mul( ecp_group *grp, ecp_point *R, - const mpi *m, const ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); - -/** - * \brief Check that a point is a valid public key on this curve - * - * \param grp Curve/group the point should belong to - * \param pt Point to check - * - * \return 0 if point is a valid public key, - * POLARSSL_ERR_ECP_INVALID_KEY otherwise. - * - * \note This function only checks the point is non-zero, has valid - * coordinates and lies on the curve, but not that it is - * indeed a multiple of G. This is additional check is more - * expensive, isn't required by standards, and shouldn't be - * necessary if the group used has a small cofactor. In - * particular, it is useless for the NIST groups which all - * have a cofactor of 1. - * - * \note Uses bare components rather than an ecp_keypair structure - * in order to ease use with other structures such as - * ecdh_context of ecdsa_context. - */ -int ecp_check_pubkey( const ecp_group *grp, const ecp_point *pt ); - -/** - * \brief Check that an mpi is a valid private key for this curve - * - * \param grp Group used - * \param d Integer to check - * - * \return 0 if point is a valid private key, - * POLARSSL_ERR_ECP_INVALID_KEY otherwise. - * - * \note Uses bare components rather than an ecp_keypair structure - * in order to ease use with other structures such as - * ecdh_context of ecdsa_context. - */ -int ecp_check_privkey( const ecp_group *grp, const mpi *d ); - -/** - * \brief Generate a keypair - * - * \param grp ECP group - * \param d Destination MPI (secret part) - * \param Q Destination point (public part) - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \return 0 if successful, - * or a POLARSSL_ERR_ECP_XXX or POLARSSL_MPI_XXX error code - * - * \note Uses bare components rather than an ecp_keypair structure - * in order to ease use with other structures such as - * ecdh_context of ecdsa_context. - */ -int ecp_gen_keypair( ecp_group *grp, mpi *d, ecp_point *Q, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Generate a keypair - * - * \param grp_id ECP group identifier - * \param key Destination keypair - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \return 0 if successful, - * or a POLARSSL_ERR_ECP_XXX or POLARSSL_MPI_XXX error code - */ -int ecp_gen_key( ecp_group_id grp_id, ecp_keypair *key, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); - -#if defined(POLARSSL_SELF_TEST) -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if a test failed - */ -int ecp_self_test( int verbose ); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* ecp.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/entropy.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/entropy.h deleted file mode 100644 index f5fa928..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/entropy.h +++ /dev/null @@ -1,246 +0,0 @@ -/** - * \file entropy.h - * - * \brief Entropy accumulator implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_ENTROPY_H -#define POLARSSL_ENTROPY_H - -#include - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_SHA512_C) && !defined(POLARSSL_ENTROPY_FORCE_SHA256) -#include "sha512.h" -#define POLARSSL_ENTROPY_SHA512_ACCUMULATOR -#else -#if defined(POLARSSL_SHA256_C) -#define POLARSSL_ENTROPY_SHA256_ACCUMULATOR -#include "sha256.h" -#endif -#endif - -#if defined(POLARSSL_THREADING_C) -#include "threading.h" -#endif - -#if defined(POLARSSL_HAVEGE_C) -#include "havege.h" -#endif - -#define POLARSSL_ERR_ENTROPY_SOURCE_FAILED -0x003C /**< Critical entropy source failure. */ -#define POLARSSL_ERR_ENTROPY_MAX_SOURCES -0x003E /**< No more sources can be added. */ -#define POLARSSL_ERR_ENTROPY_NO_SOURCES_DEFINED -0x0040 /**< No sources have been added to poll. */ -#define POLARSSL_ERR_ENTROPY_FILE_IO_ERROR -0x0058 /**< Read/write error in file. */ - -/** - * \name SECTION: Module settings - * - * The configuration options you can set for this module are in this section. - * Either change them in config.h or define them on the compiler command line. - * \{ - */ - -#if !defined(ENTROPY_MAX_SOURCES) -#define ENTROPY_MAX_SOURCES 20 /**< Maximum number of sources supported */ -#endif - -#if !defined(ENTROPY_MAX_GATHER) -#define ENTROPY_MAX_GATHER 128 /**< Maximum amount requested from entropy sources */ -#endif - -/* \} name SECTION: Module settings */ - -#if defined(POLARSSL_ENTROPY_SHA512_ACCUMULATOR) -#define ENTROPY_BLOCK_SIZE 64 /**< Block size of entropy accumulator (SHA-512) */ -#else -#define ENTROPY_BLOCK_SIZE 32 /**< Block size of entropy accumulator (SHA-256) */ -#endif - -#define ENTROPY_MAX_SEED_SIZE 1024 /**< Maximum size of seed we read from seed file */ -#define ENTROPY_SOURCE_MANUAL ENTROPY_MAX_SOURCES - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Entropy poll callback pointer - * - * \param data Callback-specific data pointer - * \param output Data to fill - * \param len Maximum size to provide - * \param olen The actual amount of bytes put into the buffer (Can be 0) - * - * \return 0 if no critical failures occurred, - * POLARSSL_ERR_ENTROPY_SOURCE_FAILED otherwise - */ -typedef int (*f_source_ptr)(void *data, unsigned char *output, size_t len, - size_t *olen); - -/** - * \brief Entropy source state - */ -typedef struct -{ - f_source_ptr f_source; /**< The entropy source callback */ - void * p_source; /**< The callback data pointer */ - size_t size; /**< Amount received */ - size_t threshold; /**< Minimum level required before release */ -} -source_state; - -/** - * \brief Entropy context structure - */ -typedef struct -{ -#if defined(POLARSSL_ENTROPY_SHA512_ACCUMULATOR) - sha512_context accumulator; -#else - sha256_context accumulator; -#endif - int source_count; - source_state source[ENTROPY_MAX_SOURCES]; -#if defined(POLARSSL_HAVEGE_C) - havege_state havege_data; -#endif -#if defined(POLARSSL_THREADING_C) - threading_mutex_t mutex; /*!< mutex */ -#endif -} -entropy_context; - -/** - * \brief Initialize the context - * - * \param ctx Entropy context to initialize - */ -void entropy_init( entropy_context *ctx ); - -/** - * \brief Free the data in the context - * - * \param ctx Entropy context to free - */ -void entropy_free( entropy_context *ctx ); - -/** - * \brief Adds an entropy source to poll - * (Thread-safe if POLARSSL_THREADING_C is enabled) - * - * \param ctx Entropy context - * \param f_source Entropy function - * \param p_source Function data - * \param threshold Minimum required from source before entropy is released - * ( with entropy_func() ) - * - * \return 0 if successful or POLARSSL_ERR_ENTROPY_MAX_SOURCES - */ -int entropy_add_source( entropy_context *ctx, - f_source_ptr f_source, void *p_source, - size_t threshold ); - -/** - * \brief Trigger an extra gather poll for the accumulator - * (Thread-safe if POLARSSL_THREADING_C is enabled) - * - * \param ctx Entropy context - * - * \return 0 if successful, or POLARSSL_ERR_ENTROPY_SOURCE_FAILED - */ -int entropy_gather( entropy_context *ctx ); - -/** - * \brief Retrieve entropy from the accumulator - * (Maximum length: ENTROPY_BLOCK_SIZE) - * (Thread-safe if POLARSSL_THREADING_C is enabled) - * - * \param data Entropy context - * \param output Buffer to fill - * \param len Number of bytes desired, must be at most ENTROPY_BLOCK_SIZE - * - * \return 0 if successful, or POLARSSL_ERR_ENTROPY_SOURCE_FAILED - */ -int entropy_func( void *data, unsigned char *output, size_t len ); - -/** - * \brief Add data to the accumulator manually - * (Thread-safe if POLARSSL_THREADING_C is enabled) - * - * \param ctx Entropy context - * \param data Data to add - * \param len Length of data - * - * \return 0 if successful - */ -int entropy_update_manual( entropy_context *ctx, - const unsigned char *data, size_t len ); - -#if defined(POLARSSL_FS_IO) -/** - * \brief Write a seed file - * - * \param ctx Entropy context - * \param path Name of the file - * - * \return 0 if successful, - * POLARSSL_ERR_ENTROPY_FILE_IO_ERROR on file error, or - * POLARSSL_ERR_ENTROPY_SOURCE_FAILED - */ -int entropy_write_seed_file( entropy_context *ctx, const char *path ); - -/** - * \brief Read and update a seed file. Seed is added to this - * instance. No more than ENTROPY_MAX_SEED_SIZE bytes are - * read from the seed file. The rest is ignored. - * - * \param ctx Entropy context - * \param path Name of the file - * - * \return 0 if successful, - * POLARSSL_ERR_ENTROPY_FILE_IO_ERROR on file error, - * POLARSSL_ERR_ENTROPY_SOURCE_FAILED - */ -int entropy_update_seed_file( entropy_context *ctx, const char *path ); -#endif /* POLARSSL_FS_IO */ - -#if defined(POLARSSL_SELF_TEST) -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if a test failed - */ -int entropy_self_test( int verbose ); -#endif /* POLARSSL_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* entropy.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/entropy_poll.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/entropy_poll.h deleted file mode 100644 index 92efa00..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/entropy_poll.h +++ /dev/null @@ -1,79 +0,0 @@ -/** - * \file entropy_poll.h - * - * \brief Platform-specific and custom entropy polling functions - * - * Copyright (C) 2006-2011, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_ENTROPY_POLL_H -#define POLARSSL_ENTROPY_POLL_H - -#include - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Default thresholds for built-in sources - */ -#define ENTROPY_MIN_PLATFORM 128 /**< Minimum for platform source */ -#define ENTROPY_MIN_HAVEGE 128 /**< Minimum for HAVEGE */ -#define ENTROPY_MIN_HARDCLOCK 32 /**< Minimum for hardclock() */ - -#if !defined(POLARSSL_NO_PLATFORM_ENTROPY) -/** - * \brief Platform-specific entropy poll callback - */ -int platform_entropy_poll( void *data, - unsigned char *output, size_t len, size_t *olen ); -#endif - -#if defined(POLARSSL_HAVEGE_C) -/** - * \brief HAVEGE based entropy poll callback - * - * Requires an HAVEGE state as its data pointer. - */ -int havege_poll( void *data, - unsigned char *output, size_t len, size_t *olen ); -#endif - -#if defined(POLARSSL_TIMING_C) -/** - * \brief hardclock-based entropy poll callback - */ -int hardclock_poll( void *data, - unsigned char *output, size_t len, size_t *olen ); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* entropy_poll.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/error.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/error.h deleted file mode 100644 index cdee952..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/error.h +++ /dev/null @@ -1,123 +0,0 @@ -/** - * \file error.h - * - * \brief Error to string translation - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_ERROR_H -#define POLARSSL_ERROR_H - -#include - -/** - * Error code layout. - * - * Currently we try to keep all error codes within the negative space of 16 - * bytes signed integers to support all platforms (-0x0000 - -0x8000). In - * addition we'd like to give two layers of information on the error if - * possible. - * - * For that purpose the error codes are segmented in the following manner: - * - * 16 bit error code bit-segmentation - * - * 1 bit - Sign bit - * 3 bits - High level module ID - * 5 bits - Module-dependent error code - * 7 bits - Low level module errors - * - * For historical reasons, low-level error codes are divided in even and odd, - * even codes were assigned first, and -1 is reserved for other errors. - * - * Low-level module errors (0x0002-0x007E, 0x0003-0x007F) - * - * Module Nr Codes assigned - * MPI 7 0x0002-0x0010 - * GCM 2 0x0012-0x0014 - * BLOWFISH 2 0x0016-0x0018 - * THREADING 3 0x001A-0x001E - * AES 2 0x0020-0x0022 - * CAMELLIA 2 0x0024-0x0026 - * XTEA 1 0x0028-0x0028 - * BASE64 2 0x002A-0x002C - * OID 1 0x002E-0x002E 0x000B-0x000B - * PADLOCK 1 0x0030-0x0030 - * DES 1 0x0032-0x0032 - * CTR_DBRG 4 0x0034-0x003A - * ENTROPY 3 0x003C-0x0040 - * NET 11 0x0042-0x0056 - * ENTROPY 1 0x0058-0x0058 - * ASN1 7 0x0060-0x006C - * MD2 1 0x0070-0x0070 - * MD4 1 0x0072-0x0072 - * MD5 1 0x0074-0x0074 - * SHA1 1 0x0076-0x0076 - * SHA256 1 0x0078-0x0078 - * SHA512 1 0x007A-0x007A - * PBKDF2 1 0x007C-0x007C - * RIPEMD160 1 0x007E-0x007E - * HMAC_DRBG 4 0x0003-0x0009 - * CCM 2 0x000D-0x000F - * - * High-level module nr (3 bits - 0x0...-0x7...) - * Name ID Nr of Errors - * PEM 1 9 - * PKCS#12 1 4 (Started from top) - * X509 2 18 - * PK 2 14 (Started from top, plus 0x2000) - * DHM 3 9 - * PKCS5 3 4 (Started from top) - * RSA 4 9 - * ECP 4 8 (Started from top) - * MD 5 4 - * CIPHER 6 6 - * SSL 6 9 (Started from top) - * SSL 7 31 - * - * Module dependent error code (5 bits 0x.00.-0x.F8.) - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Translate a PolarSSL error code into a string representation, - * Result is truncated if necessary and always includes a terminating - * null byte. - * - * \param errnum error code - * \param buffer buffer to place representation in - * \param buflen length of the buffer - */ -void polarssl_strerror( int errnum, char *buffer, size_t buflen ); - -#if defined(POLARSSL_ERROR_STRERROR_BC) -void error_strerror( int errnum, char *buffer, size_t buflen ); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* error.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/gcm.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/gcm.h deleted file mode 100644 index c2829a0..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/gcm.h +++ /dev/null @@ -1,219 +0,0 @@ -/** - * \file gcm.h - * - * \brief Galois/Counter mode for 128-bit block ciphers - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_GCM_H -#define POLARSSL_GCM_H - -#include "cipher.h" - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -typedef UINT64 uint64_t; -#else -#include -#endif - -#define GCM_ENCRYPT 1 -#define GCM_DECRYPT 0 - -#define POLARSSL_ERR_GCM_AUTH_FAILED -0x0012 /**< Authenticated decryption failed. */ -#define POLARSSL_ERR_GCM_BAD_INPUT -0x0014 /**< Bad input parameters to function. */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief GCM context structure - */ -typedef struct { - cipher_context_t cipher_ctx;/*!< cipher context used */ - uint64_t HL[16]; /*!< Precalculated HTable */ - uint64_t HH[16]; /*!< Precalculated HTable */ - uint64_t len; /*!< Total data length */ - uint64_t add_len; /*!< Total add length */ - unsigned char base_ectr[16];/*!< First ECTR for tag */ - unsigned char y[16]; /*!< Y working value */ - unsigned char buf[16]; /*!< buf working value */ - int mode; /*!< Encrypt or Decrypt */ -} -gcm_context; - -/** - * \brief GCM initialization (encryption) - * - * \param ctx GCM context to be initialized - * \param cipher cipher to use (a 128-bit block cipher) - * \param key encryption key - * \param keysize must be 128, 192 or 256 - * - * \return 0 if successful, or a cipher specific error code - */ -int gcm_init( gcm_context *ctx, cipher_id_t cipher, const unsigned char *key, - unsigned int keysize ); - -/** - * \brief GCM buffer encryption/decryption using a block cipher - * - * \note On encryption, the output buffer can be the same as the input buffer. - * On decryption, the output buffer cannot be the same as input buffer. - * If buffers overlap, the output buffer must trail at least 8 bytes - * behind the input buffer. - * - * \param ctx GCM context - * \param mode GCM_ENCRYPT or GCM_DECRYPT - * \param length length of the input data - * \param iv initialization vector - * \param iv_len length of IV - * \param add additional data - * \param add_len length of additional data - * \param input buffer holding the input data - * \param output buffer for holding the output data - * \param tag_len length of the tag to generate - * \param tag buffer for holding the tag - * - * \return 0 if successful - */ -int gcm_crypt_and_tag( gcm_context *ctx, - int mode, - size_t length, - const unsigned char *iv, - size_t iv_len, - const unsigned char *add, - size_t add_len, - const unsigned char *input, - unsigned char *output, - size_t tag_len, - unsigned char *tag ); - -/** - * \brief GCM buffer authenticated decryption using a block cipher - * - * \note On decryption, the output buffer cannot be the same as input buffer. - * If buffers overlap, the output buffer must trail at least 8 bytes - * behind the input buffer. - * - * \param ctx GCM context - * \param length length of the input data - * \param iv initialization vector - * \param iv_len length of IV - * \param add additional data - * \param add_len length of additional data - * \param tag buffer holding the tag - * \param tag_len length of the tag - * \param input buffer holding the input data - * \param output buffer for holding the output data - * - * \return 0 if successful and authenticated, - * POLARSSL_ERR_GCM_AUTH_FAILED if tag does not match - */ -int gcm_auth_decrypt( gcm_context *ctx, - size_t length, - const unsigned char *iv, - size_t iv_len, - const unsigned char *add, - size_t add_len, - const unsigned char *tag, - size_t tag_len, - const unsigned char *input, - unsigned char *output ); - -/** - * \brief Generic GCM stream start function - * - * \param ctx GCM context - * \param mode GCM_ENCRYPT or GCM_DECRYPT - * \param iv initialization vector - * \param iv_len length of IV - * \param add additional data (or NULL if length is 0) - * \param add_len length of additional data - * - * \return 0 if successful - */ -int gcm_starts( gcm_context *ctx, - int mode, - const unsigned char *iv, - size_t iv_len, - const unsigned char *add, - size_t add_len ); - -/** - * \brief Generic GCM update function. Encrypts/decrypts using the - * given GCM context. Expects input to be a multiple of 16 - * bytes! Only the last call before gcm_finish() can be less - * than 16 bytes! - * - * \note On decryption, the output buffer cannot be the same as input buffer. - * If buffers overlap, the output buffer must trail at least 8 bytes - * behind the input buffer. - * - * \param ctx GCM context - * \param length length of the input data - * \param input buffer holding the input data - * \param output buffer for holding the output data - * - * \return 0 if successful or POLARSSL_ERR_GCM_BAD_INPUT - */ -int gcm_update( gcm_context *ctx, - size_t length, - const unsigned char *input, - unsigned char *output ); - -/** - * \brief Generic GCM finalisation function. Wraps up the GCM stream - * and generates the tag. The tag can have a maximum length of - * 16 bytes. - * - * \param ctx GCM context - * \param tag buffer for holding the tag (may be NULL if tag_len is 0) - * \param tag_len length of the tag to generate - * - * \return 0 if successful or POLARSSL_ERR_GCM_BAD_INPUT - */ -int gcm_finish( gcm_context *ctx, - unsigned char *tag, - size_t tag_len ); - -/** - * \brief Free a GCM context and underlying cipher sub-context - * - * \param ctx GCM context to free - */ -void gcm_free( gcm_context *ctx ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int gcm_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* gcm.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/havege.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/havege.h deleted file mode 100644 index 536eb08..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/havege.h +++ /dev/null @@ -1,78 +0,0 @@ -/** - * \file havege.h - * - * \brief HAVEGE: HArdware Volatile Entropy Gathering and Expansion - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_HAVEGE_H -#define POLARSSL_HAVEGE_H - -#include - -#define COLLECT_SIZE 1024 - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief HAVEGE state structure - */ -typedef struct -{ - int PT1, PT2, offset[2]; - int pool[COLLECT_SIZE]; - int WALK[8192]; -} -havege_state; - -/** - * \brief HAVEGE initialization - * - * \param hs HAVEGE state to be initialized - */ -void havege_init( havege_state *hs ); - -/** - * \brief Clear HAVEGE state - * - * \param hs HAVEGE state to be cleared - */ -void havege_free( havege_state *hs ); - -/** - * \brief HAVEGE rand function - * - * \param p_rng A HAVEGE state - * \param output Buffer to fill - * \param len Length of buffer - * - * \return 0 - */ -int havege_random( void *p_rng, unsigned char *output, size_t len ); - -#ifdef __cplusplus -} -#endif - -#endif /* havege.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/hmac_drbg.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/hmac_drbg.h deleted file mode 100644 index 2d765d5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/hmac_drbg.h +++ /dev/null @@ -1,284 +0,0 @@ -/** - * \file hmac_drbg.h - * - * \brief HMAC_DRBG (NIST SP 800-90A) - * - * Copyright (C) 2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_HMAC_DRBG_H -#define POLARSSL_HMAC_DRBG_H - -#include "md.h" - -/* - * Error codes - */ -#define POLARSSL_ERR_HMAC_DRBG_REQUEST_TOO_BIG -0x0003 /**< Too many random requested in single call. */ -#define POLARSSL_ERR_HMAC_DRBG_INPUT_TOO_BIG -0x0005 /**< Input too large (Entropy + additional). */ -#define POLARSSL_ERR_HMAC_DRBG_FILE_IO_ERROR -0x0007 /**< Read/write error in file. */ -#define POLARSSL_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED -0x0009 /**< The entropy source failed. */ - -/** - * \name SECTION: Module settings - * - * The configuration options you can set for this module are in this section. - * Either change them in config.h or define them on the compiler command line. - * \{ - */ - -#if !defined(POLARSSL_HMAC_DRBG_RESEED_INTERVAL) -#define POLARSSL_HMAC_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ -#endif - -#if !defined(POLARSSL_HMAC_DRBG_MAX_INPUT) -#define POLARSSL_HMAC_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ -#endif - -#if !defined(POLARSSL_HMAC_DRBG_MAX_REQUEST) -#define POLARSSL_HMAC_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ -#endif - -#if !defined(POLARSSL_HMAC_DRBG_MAX_SEED_INPUT) -#define POLARSSL_HMAC_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ -#endif - -/* \} name SECTION: Module settings */ - -#define POLARSSL_HMAC_DRBG_PR_OFF 0 /**< No prediction resistance */ -#define POLARSSL_HMAC_DRBG_PR_ON 1 /**< Prediction resistance enabled */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * HMAC_DRBG context. - */ -typedef struct -{ - /* Working state: the key K is not stored explicitely, - * but is implied by the HMAC context */ - md_context_t md_ctx; /*!< HMAC context (inc. K) */ - unsigned char V[POLARSSL_MD_MAX_SIZE]; /*!< V in the spec */ - int reseed_counter; /*!< reseed counter */ - - /* Administrative state */ - size_t entropy_len; /*!< entropy bytes grabbed on each (re)seed */ - int prediction_resistance; /*!< enable prediction resistance (Automatic - reseed before every random generation) */ - int reseed_interval; /*!< reseed interval */ - - /* Callbacks */ - int (*f_entropy)(void *, unsigned char *, size_t); /*!< entropy function */ - void *p_entropy; /*!< context for the entropy function */ -} hmac_drbg_context; - -/** - * \brief HMAC_DRBG initialisation - * - * \param ctx HMAC_DRBG context to be initialised - * \param md_info MD algorithm to use for HMAC_DRBG - * \param f_entropy Entropy callback (p_entropy, buffer to fill, buffer - * length) - * \param p_entropy Entropy context - * \param custom Personalization data (Device specific identifiers) - * (Can be NULL) - * \param len Length of personalization data - * - * \note The "security strength" as defined by NIST is set to: - * 128 bits if md_alg is SHA-1, - * 192 bits if md_alg is SHA-224, - * 256 bits if md_alg is SHA-256 or higher. - * Note that SHA-256 is just as efficient as SHA-224. - * - * \return 0 if successful, or - * POLARSSL_ERR_MD_BAD_INPUT_DATA, or - * POLARSSL_ERR_MD_ALLOC_FAILED, or - * POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED. - */ -int hmac_drbg_init( hmac_drbg_context *ctx, - const md_info_t * md_info, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len ); - -/** - * \brief Initilisation of simpified HMAC_DRBG (never reseeds). - * (For use with deterministic ECDSA.) - * - * \param ctx HMAC_DRBG context to be initialised - * \param md_info MD algorithm to use for HMAC_DRBG - * \param data Concatenation of entropy string and additional data - * \param data_len Length of data in bytes - * - * \return 0 if successful, or - * POLARSSL_ERR_MD_BAD_INPUT_DATA, or - * POLARSSL_ERR_MD_ALLOC_FAILED. - */ -int hmac_drbg_init_buf( hmac_drbg_context *ctx, - const md_info_t * md_info, - const unsigned char *data, size_t data_len ); - -/** - * \brief Enable / disable prediction resistance (Default: Off) - * - * Note: If enabled, entropy is used for ctx->entropy_len before each call! - * Only use this if you have ample supply of good entropy! - * - * \param ctx HMAC_DRBG context - * \param resistance POLARSSL_HMAC_DRBG_PR_ON or POLARSSL_HMAC_DRBG_PR_OFF - */ -void hmac_drbg_set_prediction_resistance( hmac_drbg_context *ctx, - int resistance ); - -/** - * \brief Set the amount of entropy grabbed on each reseed - * (Default: given by the security strength, which - * depends on the hash used, see \c hmac_drbg_init() ) - * - * \param ctx HMAC_DRBG context - * \param len Amount of entropy to grab, in bytes - */ -void hmac_drbg_set_entropy_len( hmac_drbg_context *ctx, - size_t len ); - -/** - * \brief Set the reseed interval - * (Default: POLARSSL_HMAC_DRBG_RESEED_INTERVAL) - * - * \param ctx HMAC_DRBG context - * \param interval Reseed interval - */ -void hmac_drbg_set_reseed_interval( hmac_drbg_context *ctx, - int interval ); - -/** - * \brief HMAC_DRBG update state - * - * \param ctx HMAC_DRBG context - * \param additional Additional data to update state with, or NULL - * \param add_len Length of additional data, or 0 - * - * \note Additional data is optional, pass NULL and 0 as second - * third argument if no additional data is being used. - */ -void hmac_drbg_update( hmac_drbg_context *ctx, - const unsigned char *additional, size_t add_len ); - -/** - * \brief HMAC_DRBG reseeding (extracts data from entropy source) - * - * \param ctx HMAC_DRBG context - * \param additional Additional data to add to state (Can be NULL) - * \param len Length of additional data - * - * \return 0 if successful, or - * POLARSSL_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED - */ -int hmac_drbg_reseed( hmac_drbg_context *ctx, - const unsigned char *additional, size_t len ); - -/** - * \brief HMAC_DRBG generate random with additional update input - * - * Note: Automatically reseeds if reseed_counter is reached or PR is enabled. - * - * \param p_rng HMAC_DRBG context - * \param output Buffer to fill - * \param output_len Length of the buffer - * \param additional Additional data to update with (can be NULL) - * \param add_len Length of additional data (can be 0) - * - * \return 0 if successful, or - * POLARSSL_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED, or - * POLARSSL_ERR_HMAC_DRBG_REQUEST_TOO_BIG, or - * POLARSSL_ERR_HMAC_DRBG_INPUT_TOO_BIG. - */ -int hmac_drbg_random_with_add( void *p_rng, - unsigned char *output, size_t output_len, - const unsigned char *additional, - size_t add_len ); - -/** - * \brief HMAC_DRBG generate random - * - * Note: Automatically reseeds if reseed_counter is reached or PR is enabled. - * - * \param p_rng HMAC_DRBG context - * \param output Buffer to fill - * \param out_len Length of the buffer - * - * \return 0 if successful, or - * POLARSSL_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED, or - * POLARSSL_ERR_HMAC_DRBG_REQUEST_TOO_BIG - */ -int hmac_drbg_random( void *p_rng, unsigned char *output, size_t out_len ); - -/** - * \brief Free an HMAC_DRBG context - * - * \param ctx HMAC_DRBG context to free. - */ -void hmac_drbg_free( hmac_drbg_context *ctx ); - -#if defined(POLARSSL_FS_IO) -/** - * \brief Write a seed file - * - * \param ctx HMAC_DRBG context - * \param path Name of the file - * - * \return 0 if successful, 1 on file error, or - * POLARSSL_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED - */ -int hmac_drbg_write_seed_file( hmac_drbg_context *ctx, const char *path ); - -/** - * \brief Read and update a seed file. Seed is added to this - * instance - * - * \param ctx HMAC_DRBG context - * \param path Name of the file - * - * \return 0 if successful, 1 on file error, - * POLARSSL_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED or - * POLARSSL_ERR_HMAC_DRBG_INPUT_TOO_BIG - */ -int hmac_drbg_update_seed_file( hmac_drbg_context *ctx, const char *path ); -#endif /* POLARSSL_FS_IO */ - - -#if defined(POLARSSL_SELF_TEST) -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int hmac_drbg_self_test( int verbose ); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* hmac_drbg.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md.h deleted file mode 100644 index 81d8a2e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md.h +++ /dev/null @@ -1,395 +0,0 @@ -/** - * \file md.h - * - * \brief Generic message digest wrapper - * - * \author Adriaan de Jong - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_MD_H -#define POLARSSL_MD_H - -#include - -#if defined(_MSC_VER) && !defined(inline) -#define inline _inline -#else -#if defined(__ARMCC_VERSION) && !defined(inline) -#define inline __inline -#endif /* __ARMCC_VERSION */ -#endif /*_MSC_VER */ - -#define POLARSSL_ERR_MD_FEATURE_UNAVAILABLE -0x5080 /**< The selected feature is not available. */ -#define POLARSSL_ERR_MD_BAD_INPUT_DATA -0x5100 /**< Bad input parameters to function. */ -#define POLARSSL_ERR_MD_ALLOC_FAILED -0x5180 /**< Failed to allocate memory. */ -#define POLARSSL_ERR_MD_FILE_IO_ERROR -0x5200 /**< Opening or reading of file failed. */ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - POLARSSL_MD_NONE=0, - POLARSSL_MD_MD2, - POLARSSL_MD_MD4, - POLARSSL_MD_MD5, - POLARSSL_MD_SHA1, - POLARSSL_MD_SHA224, - POLARSSL_MD_SHA256, - POLARSSL_MD_SHA384, - POLARSSL_MD_SHA512, - POLARSSL_MD_RIPEMD160, -} md_type_t; - -#if defined(POLARSSL_SHA512_C) -#define POLARSSL_MD_MAX_SIZE 64 /* longest known is SHA512 */ -#else -#define POLARSSL_MD_MAX_SIZE 32 /* longest known is SHA256 or less */ -#endif - -/** - * Message digest information. Allows message digest functions to be called - * in a generic way. - */ -typedef struct { - /** Digest identifier */ - md_type_t type; - - /** Name of the message digest */ - const char * name; - - /** Output length of the digest function */ - int size; - - /** Digest initialisation function */ - void (*starts_func)( void *ctx ); - - /** Digest update function */ - void (*update_func)( void *ctx, const unsigned char *input, size_t ilen ); - - /** Digest finalisation function */ - void (*finish_func)( void *ctx, unsigned char *output ); - - /** Generic digest function */ - void (*digest_func)( const unsigned char *input, size_t ilen, - unsigned char *output ); - - /** Generic file digest function */ - int (*file_func)( const char *path, unsigned char *output ); - - /** HMAC Initialisation function */ - void (*hmac_starts_func)( void *ctx, const unsigned char *key, - size_t keylen ); - - /** HMAC update function */ - void (*hmac_update_func)( void *ctx, const unsigned char *input, - size_t ilen ); - - /** HMAC finalisation function */ - void (*hmac_finish_func)( void *ctx, unsigned char *output); - - /** HMAC context reset function */ - void (*hmac_reset_func)( void *ctx ); - - /** Generic HMAC function */ - void (*hmac_func)( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ); - - /** Allocate a new context */ - void * (*ctx_alloc_func)( void ); - - /** Free the given context */ - void (*ctx_free_func)( void *ctx ); - - /** Internal use only */ - void (*process_func)( void *ctx, const unsigned char *input ); -} md_info_t; - -/** - * Generic message digest context. - */ -typedef struct { - /** Information about the associated message digest */ - const md_info_t *md_info; - - /** Digest-specific context */ - void *md_ctx; -} md_context_t; - -#define MD_CONTEXT_T_INIT { \ - NULL, /* md_info */ \ - NULL, /* md_ctx */ \ -} - -/** - * \brief Returns the list of digests supported by the generic digest module. - * - * \return a statically allocated array of digests, the last entry - * is 0. - */ -const int *md_list( void ); - -/** - * \brief Returns the message digest information associated with the - * given digest name. - * - * \param md_name Name of the digest to search for. - * - * \return The message digest information associated with md_name or - * NULL if not found. - */ -const md_info_t *md_info_from_string( const char *md_name ); - -/** - * \brief Returns the message digest information associated with the - * given digest type. - * - * \param md_type type of digest to search for. - * - * \return The message digest information associated with md_type or - * NULL if not found. - */ -const md_info_t *md_info_from_type( md_type_t md_type ); - -/** - * \brief Initialize a md_context (as NONE) - */ -void md_init( md_context_t *ctx ); - -/** - * \brief Free and clear the message-specific context of ctx. - * Freeing ctx itself remains the responsibility of the - * caller. - */ -void md_free( md_context_t *ctx ); - -/** - * \brief Initialises and fills the message digest context structure - * with the appropriate values. - * - * \note Currently also clears structure. In future versions you - * will be required to call md_init() on the structure - * first. - * - * \param ctx context to initialise. May not be NULL. The - * digest-specific context (ctx->md_ctx) must be NULL. It will - * be allocated, and must be freed using md_free_ctx() later. - * \param md_info message digest to use. - * - * \returns \c 0 on success, \c POLARSSL_ERR_MD_BAD_INPUT_DATA on - * parameter failure, \c POLARSSL_ERR_MD_ALLOC_FAILED if - * allocation of the digest-specific context failed. - */ -int md_init_ctx( md_context_t *ctx, const md_info_t *md_info ); - -/** - * \brief Free the message-specific context of ctx. Freeing ctx itself - * remains the responsibility of the caller. - * - * \note Deprecated: Redirects to md_free() - * - * \param ctx Free the message-specific context - * - * \returns 0 - */ -int md_free_ctx( md_context_t *ctx ); - -/** - * \brief Returns the size of the message digest output. - * - * \param md_info message digest info - * - * \return size of the message digest output. - */ -static inline unsigned char md_get_size( const md_info_t *md_info ) -{ - if( md_info == NULL ) - return( 0 ); - - return md_info->size; -} - -/** - * \brief Returns the type of the message digest output. - * - * \param md_info message digest info - * - * \return type of the message digest output. - */ -static inline md_type_t md_get_type( const md_info_t *md_info ) -{ - if( md_info == NULL ) - return( POLARSSL_MD_NONE ); - - return md_info->type; -} - -/** - * \brief Returns the name of the message digest output. - * - * \param md_info message digest info - * - * \return name of the message digest output. - */ -static inline const char *md_get_name( const md_info_t *md_info ) -{ - if( md_info == NULL ) - return( NULL ); - - return md_info->name; -} - -/** - * \brief Set-up the given context for a new message digest - * - * \param ctx generic message digest context. - * - * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter - * verification fails. - */ -int md_starts( md_context_t *ctx ); - -/** - * \brief Generic message digest process buffer - * - * \param ctx Generic message digest context - * \param input buffer holding the datal - * \param ilen length of the input data - * - * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter - * verification fails. - */ -int md_update( md_context_t *ctx, const unsigned char *input, size_t ilen ); - -/** - * \brief Generic message digest final digest - * - * \param ctx Generic message digest context - * \param output Generic message digest checksum result - * - * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter - * verification fails. - */ -int md_finish( md_context_t *ctx, unsigned char *output ); - -/** - * \brief Output = message_digest( input buffer ) - * - * \param md_info message digest info - * \param input buffer holding the data - * \param ilen length of the input data - * \param output Generic message digest checksum result - * - * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter - * verification fails. - */ -int md( const md_info_t *md_info, const unsigned char *input, size_t ilen, - unsigned char *output ); - -/** - * \brief Output = message_digest( file contents ) - * - * \param md_info message digest info - * \param path input file name - * \param output generic message digest checksum result - * - * \return 0 if successful, POLARSSL_ERR_MD_FILE_OPEN_FAILED if fopen - * failed, POLARSSL_ERR_MD_FILE_READ_FAILED if fread failed, - * POLARSSL_ERR_MD_BAD_INPUT_DATA if md_info was NULL. - */ -int md_file( const md_info_t *md_info, const char *path, - unsigned char *output ); - -/** - * \brief Generic HMAC context setup - * - * \param ctx HMAC context to be initialized - * \param key HMAC secret key - * \param keylen length of the HMAC key - * - * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter - * verification fails. - */ -int md_hmac_starts( md_context_t *ctx, const unsigned char *key, - size_t keylen ); - -/** - * \brief Generic HMAC process buffer - * - * \param ctx HMAC context - * \param input buffer holding the data - * \param ilen length of the input data - * - * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter - * verification fails. - */ -int md_hmac_update( md_context_t *ctx, const unsigned char *input, - size_t ilen ); - -/** - * \brief Generic HMAC final digest - * - * \param ctx HMAC context - * \param output Generic HMAC checksum result - * - * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter - * verification fails. - */ -int md_hmac_finish( md_context_t *ctx, unsigned char *output); - -/** - * \brief Generic HMAC context reset - * - * \param ctx HMAC context to be reset - * - * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter - * verification fails. - */ -int md_hmac_reset( md_context_t *ctx ); - -/** - * \brief Output = Generic_HMAC( hmac key, input buffer ) - * - * \param md_info message digest info - * \param key HMAC secret key - * \param keylen length of the HMAC key - * \param input buffer holding the data - * \param ilen length of the input data - * \param output Generic HMAC-result - * - * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter - * verification fails. - */ -int md_hmac( const md_info_t *md_info, const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ); - -/* Internal use */ -int md_process( md_context_t *ctx, const unsigned char *data ); - -#ifdef __cplusplus -} -#endif - -#endif /* POLARSSL_MD_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md2.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md2.h deleted file mode 100644 index 952b0bf..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md2.h +++ /dev/null @@ -1,194 +0,0 @@ -/** - * \file md2.h - * - * \brief MD2 message digest algorithm (hash function) - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_MD2_H -#define POLARSSL_MD2_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#define POLARSSL_ERR_MD2_FILE_IO_ERROR -0x0070 /**< Read/write error in file. */ - -#if !defined(POLARSSL_MD2_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief MD2 context structure - */ -typedef struct -{ - unsigned char cksum[16]; /*!< checksum of the data block */ - unsigned char state[48]; /*!< intermediate digest state */ - unsigned char buffer[16]; /*!< data block being processed */ - - unsigned char ipad[16]; /*!< HMAC: inner padding */ - unsigned char opad[16]; /*!< HMAC: outer padding */ - size_t left; /*!< amount of data in buffer */ -} -md2_context; - -/** - * \brief Initialize MD2 context - * - * \param ctx MD2 context to be initialized - */ -void md2_init( md2_context *ctx ); - -/** - * \brief Clear MD2 context - * - * \param ctx MD2 context to be cleared - */ -void md2_free( md2_context *ctx ); - -/** - * \brief MD2 context setup - * - * \param ctx context to be initialized - */ -void md2_starts( md2_context *ctx ); - -/** - * \brief MD2 process buffer - * - * \param ctx MD2 context - * \param input buffer holding the data - * \param ilen length of the input data - */ -void md2_update( md2_context *ctx, const unsigned char *input, size_t ilen ); - -/** - * \brief MD2 final digest - * - * \param ctx MD2 context - * \param output MD2 checksum result - */ -void md2_finish( md2_context *ctx, unsigned char output[16] ); - -#ifdef __cplusplus -} -#endif - -#else /* POLARSSL_MD2_ALT */ -#include "md2_alt.h" -#endif /* POLARSSL_MD2_ALT */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Output = MD2( input buffer ) - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output MD2 checksum result - */ -void md2( const unsigned char *input, size_t ilen, unsigned char output[16] ); - -/** - * \brief Output = MD2( file contents ) - * - * \param path input file name - * \param output MD2 checksum result - * - * \return 0 if successful, or POLARSSL_ERR_MD2_FILE_IO_ERROR - */ -int md2_file( const char *path, unsigned char output[16] ); - -/** - * \brief MD2 HMAC context setup - * - * \param ctx HMAC context to be initialized - * \param key HMAC secret key - * \param keylen length of the HMAC key - */ -void md2_hmac_starts( md2_context *ctx, const unsigned char *key, - size_t keylen ); - -/** - * \brief MD2 HMAC process buffer - * - * \param ctx HMAC context - * \param input buffer holding the data - * \param ilen length of the input data - */ -void md2_hmac_update( md2_context *ctx, const unsigned char *input, - size_t ilen ); - -/** - * \brief MD2 HMAC final digest - * - * \param ctx HMAC context - * \param output MD2 HMAC checksum result - */ -void md2_hmac_finish( md2_context *ctx, unsigned char output[16] ); - -/** - * \brief MD2 HMAC context reset - * - * \param ctx HMAC context to be reset - */ -void md2_hmac_reset( md2_context *ctx ); - -/** - * \brief Output = HMAC-MD2( hmac key, input buffer ) - * - * \param key HMAC secret key - * \param keylen length of the HMAC key - * \param input buffer holding the data - * \param ilen length of the input data - * \param output HMAC-MD2 result - */ -void md2_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[16] ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int md2_self_test( int verbose ); - -/* Internal use */ -void md2_process( md2_context *ctx ); - -#ifdef __cplusplus -} -#endif - -#endif /* md2.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md4.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md4.h deleted file mode 100644 index fc5a5cd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md4.h +++ /dev/null @@ -1,200 +0,0 @@ -/** - * \file md4.h - * - * \brief MD4 message digest algorithm (hash function) - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_MD4_H -#define POLARSSL_MD4_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#define POLARSSL_ERR_MD4_FILE_IO_ERROR -0x0072 /**< Read/write error in file. */ - -#if !defined(POLARSSL_MD4_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief MD4 context structure - */ -typedef struct -{ - uint32_t total[2]; /*!< number of bytes processed */ - uint32_t state[4]; /*!< intermediate digest state */ - unsigned char buffer[64]; /*!< data block being processed */ - - unsigned char ipad[64]; /*!< HMAC: inner padding */ - unsigned char opad[64]; /*!< HMAC: outer padding */ -} -md4_context; - -/** - * \brief Initialize MD4 context - * - * \param ctx MD4 context to be initialized - */ -void md4_init( md4_context *ctx ); - -/** - * \brief Clear MD4 context - * - * \param ctx MD4 context to be cleared - */ -void md4_free( md4_context *ctx ); - -/** - * \brief MD4 context setup - * - * \param ctx context to be initialized - */ -void md4_starts( md4_context *ctx ); - -/** - * \brief MD4 process buffer - * - * \param ctx MD4 context - * \param input buffer holding the data - * \param ilen length of the input data - */ -void md4_update( md4_context *ctx, const unsigned char *input, size_t ilen ); - -/** - * \brief MD4 final digest - * - * \param ctx MD4 context - * \param output MD4 checksum result - */ -void md4_finish( md4_context *ctx, unsigned char output[16] ); - -#ifdef __cplusplus -} -#endif - -#else /* POLARSSL_MD4_ALT */ -#include "md4_alt.h" -#endif /* POLARSSL_MD4_ALT */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Output = MD4( input buffer ) - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output MD4 checksum result - */ -void md4( const unsigned char *input, size_t ilen, unsigned char output[16] ); - -/** - * \brief Output = MD4( file contents ) - * - * \param path input file name - * \param output MD4 checksum result - * - * \return 0 if successful, or POLARSSL_ERR_MD4_FILE_IO_ERROR - */ -int md4_file( const char *path, unsigned char output[16] ); - -/** - * \brief MD4 HMAC context setup - * - * \param ctx HMAC context to be initialized - * \param key HMAC secret key - * \param keylen length of the HMAC key - */ -void md4_hmac_starts( md4_context *ctx, const unsigned char *key, - size_t keylen ); - -/** - * \brief MD4 HMAC process buffer - * - * \param ctx HMAC context - * \param input buffer holding the data - * \param ilen length of the input data - */ -void md4_hmac_update( md4_context *ctx, const unsigned char *input, - size_t ilen ); - -/** - * \brief MD4 HMAC final digest - * - * \param ctx HMAC context - * \param output MD4 HMAC checksum result - */ -void md4_hmac_finish( md4_context *ctx, unsigned char output[16] ); - -/** - * \brief MD4 HMAC context reset - * - * \param ctx HMAC context to be reset - */ -void md4_hmac_reset( md4_context *ctx ); - -/** - * \brief Output = HMAC-MD4( hmac key, input buffer ) - * - * \param key HMAC secret key - * \param keylen length of the HMAC key - * \param input buffer holding the data - * \param ilen length of the input data - * \param output HMAC-MD4 result - */ -void md4_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[16] ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int md4_self_test( int verbose ); - -/* Internal use */ -void md4_process( md4_context *ctx, const unsigned char data[64] ); - -#ifdef __cplusplus -} -#endif - -#endif /* md4.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md5.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md5.h deleted file mode 100644 index 2f378f6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md5.h +++ /dev/null @@ -1,200 +0,0 @@ -/** - * \file md5.h - * - * \brief MD5 message digest algorithm (hash function) - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_MD5_H -#define POLARSSL_MD5_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#define POLARSSL_ERR_MD5_FILE_IO_ERROR -0x0074 /**< Read/write error in file. */ - -#if !defined(POLARSSL_MD5_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief MD5 context structure - */ -typedef struct -{ - uint32_t total[2]; /*!< number of bytes processed */ - uint32_t state[4]; /*!< intermediate digest state */ - unsigned char buffer[64]; /*!< data block being processed */ - - unsigned char ipad[64]; /*!< HMAC: inner padding */ - unsigned char opad[64]; /*!< HMAC: outer padding */ -} -md5_context; - -/** - * \brief Initialize MD5 context - * - * \param ctx MD5 context to be initialized - */ -void md5_init( md5_context *ctx ); - -/** - * \brief Clear MD5 context - * - * \param ctx MD5 context to be cleared - */ -void md5_free( md5_context *ctx ); - -/** - * \brief MD5 context setup - * - * \param ctx context to be initialized - */ -void md5_starts( md5_context *ctx ); - -/** - * \brief MD5 process buffer - * - * \param ctx MD5 context - * \param input buffer holding the data - * \param ilen length of the input data - */ -void md5_update( md5_context *ctx, const unsigned char *input, size_t ilen ); - -/** - * \brief MD5 final digest - * - * \param ctx MD5 context - * \param output MD5 checksum result - */ -void md5_finish( md5_context *ctx, unsigned char output[16] ); - -/* Internal use */ -void md5_process( md5_context *ctx, const unsigned char data[64] ); - -#ifdef __cplusplus -} -#endif - -#else /* POLARSSL_MD5_ALT */ -#include "md5_alt.h" -#endif /* POLARSSL_MD5_ALT */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Output = MD5( input buffer ) - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output MD5 checksum result - */ -void md5( const unsigned char *input, size_t ilen, unsigned char output[16] ); - -/** - * \brief Output = MD5( file contents ) - * - * \param path input file name - * \param output MD5 checksum result - * - * \return 0 if successful, or POLARSSL_ERR_MD5_FILE_IO_ERROR - */ -int md5_file( const char *path, unsigned char output[16] ); - -/** - * \brief MD5 HMAC context setup - * - * \param ctx HMAC context to be initialized - * \param key HMAC secret key - * \param keylen length of the HMAC key - */ -void md5_hmac_starts( md5_context *ctx, - const unsigned char *key, size_t keylen ); - -/** - * \brief MD5 HMAC process buffer - * - * \param ctx HMAC context - * \param input buffer holding the data - * \param ilen length of the input data - */ -void md5_hmac_update( md5_context *ctx, - const unsigned char *input, size_t ilen ); - -/** - * \brief MD5 HMAC final digest - * - * \param ctx HMAC context - * \param output MD5 HMAC checksum result - */ -void md5_hmac_finish( md5_context *ctx, unsigned char output[16] ); - -/** - * \brief MD5 HMAC context reset - * - * \param ctx HMAC context to be reset - */ -void md5_hmac_reset( md5_context *ctx ); - -/** - * \brief Output = HMAC-MD5( hmac key, input buffer ) - * - * \param key HMAC secret key - * \param keylen length of the HMAC key - * \param input buffer holding the data - * \param ilen length of the input data - * \param output HMAC-MD5 result - */ -void md5_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[16] ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int md5_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* md5.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md_wrap.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md_wrap.h deleted file mode 100644 index eb1db0f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/md_wrap.h +++ /dev/null @@ -1,71 +0,0 @@ -/** - * \file md_wrap.h - * - * \brief Message digest wrappers. - * - * \author Adriaan de Jong - * - * Copyright (C) 2006-2011, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_MD_WRAP_H -#define POLARSSL_MD_WRAP_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif -#include "md.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(POLARSSL_MD2_C) -extern const md_info_t md2_info; -#endif -#if defined(POLARSSL_MD4_C) -extern const md_info_t md4_info; -#endif -#if defined(POLARSSL_MD5_C) -extern const md_info_t md5_info; -#endif -#if defined(POLARSSL_RIPEMD160_C) -extern const md_info_t ripemd160_info; -#endif -#if defined(POLARSSL_SHA1_C) -extern const md_info_t sha1_info; -#endif -#if defined(POLARSSL_SHA256_C) -extern const md_info_t sha224_info; -extern const md_info_t sha256_info; -#endif -#if defined(POLARSSL_SHA512_C) -extern const md_info_t sha384_info; -extern const md_info_t sha512_info; -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* POLARSSL_MD_WRAP_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/memory.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/memory.h deleted file mode 100644 index 9b9cc62..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/memory.h +++ /dev/null @@ -1,54 +0,0 @@ -/** - * \file memory.h - * - * \brief Memory allocation layer (Deprecated to platform layer) - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_MEMORY_H -#define POLARSSL_MEMORY_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#if defined(POLARSSL_MEMORY_C) && !defined(POLARSSL_PLATFORM_MEMORY) -#define POLARSSL_PLATFORM_MEMORY -#endif - -#include "platform.h" -#include "memory_buffer_alloc.h" - -extern int platform_set_malloc_free( void * (*malloc_func)( size_t ), void (*free_func)( void * ) ); - -static int memory_set_own( void * (*malloc_func)( size_t ), - void (*free_func)( void * ) ) -{ - return platform_set_malloc_free( malloc_func, free_func ); -} - - -#endif /* memory.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/memory_buffer_alloc.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/memory_buffer_alloc.h deleted file mode 100644 index c449752..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/memory_buffer_alloc.h +++ /dev/null @@ -1,122 +0,0 @@ -/** - * \file memory_buffer_alloc.h - * - * \brief Buffer-based memory allocator - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_MEMORY_BUFFER_ALLOC_H -#define POLARSSL_MEMORY_BUFFER_ALLOC_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -/** - * \name SECTION: Module settings - * - * The configuration options you can set for this module are in this section. - * Either change them in config.h or define them on the compiler command line. - * \{ - */ - -#if !defined(POLARSSL_MEMORY_ALIGN_MULTIPLE) -#define POLARSSL_MEMORY_ALIGN_MULTIPLE 4 /**< Align on multiples of this value */ -#endif - -/* \} name SECTION: Module settings */ - -#define MEMORY_VERIFY_NONE 0 -#define MEMORY_VERIFY_ALLOC (1 << 0) -#define MEMORY_VERIFY_FREE (1 << 1) -#define MEMORY_VERIFY_ALWAYS (MEMORY_VERIFY_ALLOC | MEMORY_VERIFY_FREE) - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Initialize use of stack-based memory allocator. - * The stack-based allocator does memory management inside the - * presented buffer and does not call malloc() and free(). - * It sets the global polarssl_malloc() and polarssl_free() pointers - * to its own functions. - * (Provided polarssl_malloc() and polarssl_free() are thread-safe if - * POLARSSL_THREADING_C is defined) - * - * \note This code is not optimized and provides a straight-forward - * implementation of a stack-based memory allocator. - * - * \param buf buffer to use as heap - * \param len size of the buffer - * - * \return 0 if successful - */ -int memory_buffer_alloc_init( unsigned char *buf, size_t len ); - -/** - * \brief Free the mutex for thread-safety and clear remaining memory - */ -void memory_buffer_alloc_free( void ); - -/** - * \brief Determine when the allocator should automatically verify the state - * of the entire chain of headers / meta-data. - * (Default: MEMORY_VERIFY_NONE) - * - * \param verify One of MEMORY_VERIFY_NONE, MEMORY_VERIFY_ALLOC, - * MEMORY_VERIFY_FREE or MEMORY_VERIFY_ALWAYS - */ -void memory_buffer_set_verify( int verify ); - -#if defined(POLARSSL_MEMORY_DEBUG) -/** - * \brief Print out the status of the allocated memory (primarily for use - * after a program should have de-allocated all memory) - * Prints out a list of 'still allocated' blocks and their stack - * trace if POLARSSL_MEMORY_BACKTRACE is defined. - */ -void memory_buffer_alloc_status( void ); -#endif /* POLARSSL_MEMORY_DEBUG */ - -/** - * \brief Verifies that all headers in the memory buffer are correct - * and contain sane values. Helps debug buffer-overflow errors. - * - * Prints out first failure if POLARSSL_MEMORY_DEBUG is defined. - * Prints out full header information if POLARSSL_MEMORY_DEBUG_HEADERS - * is defined. (Includes stack trace information for each block if - * POLARSSL_MEMORY_BACKTRACE is defined as well). - * - * \returns 0 if verified, 1 otherwise - */ -int memory_buffer_alloc_verify( void ); - -#ifdef __cplusplus -} -#endif - -#endif /* memory_buffer_alloc.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/net.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/net.h deleted file mode 100644 index 22698b4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/net.h +++ /dev/null @@ -1,160 +0,0 @@ -/** - * \file net.h - * - * \brief Network communication functions - * - * Copyright (C) 2006-2011, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_NET_H -#define POLARSSL_NET_H - -#include - -#define POLARSSL_ERR_NET_UNKNOWN_HOST -0x0056 /**< Failed to get an IP address for the given hostname. */ -#define POLARSSL_ERR_NET_SOCKET_FAILED -0x0042 /**< Failed to open a socket. */ -#define POLARSSL_ERR_NET_CONNECT_FAILED -0x0044 /**< The connection to the given server / port failed. */ -#define POLARSSL_ERR_NET_BIND_FAILED -0x0046 /**< Binding of the socket failed. */ -#define POLARSSL_ERR_NET_LISTEN_FAILED -0x0048 /**< Could not listen on the socket. */ -#define POLARSSL_ERR_NET_ACCEPT_FAILED -0x004A /**< Could not accept the incoming connection. */ -#define POLARSSL_ERR_NET_RECV_FAILED -0x004C /**< Reading information from the socket failed. */ -#define POLARSSL_ERR_NET_SEND_FAILED -0x004E /**< Sending information through the socket failed. */ -#define POLARSSL_ERR_NET_CONN_RESET -0x0050 /**< Connection was reset by peer. */ -#define POLARSSL_ERR_NET_WANT_READ -0x0052 /**< Connection requires a read call. */ -#define POLARSSL_ERR_NET_WANT_WRITE -0x0054 /**< Connection requires a write call. */ - -#define POLARSSL_NET_LISTEN_BACKLOG 10 /**< The backlog that listen() should use. */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Initiate a TCP connection with host:port - * - * \param fd Socket to use - * \param host Host to connect to - * \param port Port to connect to - * - * \return 0 if successful, or one of: - * POLARSSL_ERR_NET_SOCKET_FAILED, - * POLARSSL_ERR_NET_UNKNOWN_HOST, - * POLARSSL_ERR_NET_CONNECT_FAILED - */ -int net_connect( int *fd, const char *host, int port ); - -/** - * \brief Create a listening socket on bind_ip:port. - * If bind_ip == NULL, all interfaces are binded. - * - * \param fd Socket to use - * \param bind_ip IP to bind to, can be NULL - * \param port Port number to use - * - * \return 0 if successful, or one of: - * POLARSSL_ERR_NET_SOCKET_FAILED, - * POLARSSL_ERR_NET_BIND_FAILED, - * POLARSSL_ERR_NET_LISTEN_FAILED - */ -int net_bind( int *fd, const char *bind_ip, int port ); - -/** - * \brief Accept a connection from a remote client - * - * \param bind_fd Relevant socket - * \param client_fd Will contain the connected client socket - * \param client_ip Will contain the client IP address - * Must be at least 4 bytes, or 16 if IPv6 is supported - * - * \return 0 if successful, POLARSSL_ERR_NET_ACCEPT_FAILED, or - * POLARSSL_ERR_NET_WANT_READ is bind_fd was set to - * non-blocking and accept() is blocking. - */ -int net_accept( int bind_fd, int *client_fd, void *client_ip ); - -/** - * \brief Set the socket blocking - * - * \param fd Socket to set - * - * \return 0 if successful, or a non-zero error code - */ -int net_set_block( int fd ); - -/** - * \brief Set the socket non-blocking - * - * \param fd Socket to set - * - * \return 0 if successful, or a non-zero error code - */ -int net_set_nonblock( int fd ); - -/** - * \brief Portable usleep helper - * - * \param usec Amount of microseconds to sleep - * - * \note Real amount of time slept will not be less than - * select()'s timeout granularity (typically, 10ms). - */ -void net_usleep( unsigned long usec ); - -/** - * \brief Read at most 'len' characters. If no error occurs, - * the actual amount read is returned. - * - * \param ctx Socket - * \param buf The buffer to write to - * \param len Maximum length of the buffer - * - * \return This function returns the number of bytes received, - * or a non-zero error code; POLARSSL_ERR_NET_WANT_READ - * indicates read() is blocking. - */ -int net_recv( void *ctx, unsigned char *buf, size_t len ); - -/** - * \brief Write at most 'len' characters. If no error occurs, - * the actual amount read is returned. - * - * \param ctx Socket - * \param buf The buffer to read from - * \param len The length of the buffer - * - * \return This function returns the number of bytes sent, - * or a non-zero error code; POLARSSL_ERR_NET_WANT_WRITE - * indicates write() is blocking. - */ -int net_send( void *ctx, const unsigned char *buf, size_t len ); - -/** - * \brief Gracefully shutdown the connection - * - * \param fd The socket to close - */ -void net_close( int fd ); - -#ifdef __cplusplus -} -#endif - -#endif /* net.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/oid.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/oid.h deleted file mode 100644 index c4d5c3f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/oid.h +++ /dev/null @@ -1,570 +0,0 @@ -/** - * \file oid.h - * - * \brief Object Identifier (OID) database - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_OID_H -#define POLARSSL_OID_H - -#include -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif -#include "asn1.h" -#include "pk.h" -#if defined(POLARSSL_CIPHER_C) -#include "cipher.h" -#endif - -#if defined(POLARSSL_MD_C) -#include "md.h" -#endif - -#if defined(POLARSSL_X509_USE_C) || defined(POLARSSL_X509_CREATE_C) -#include "x509.h" -#endif - -#define POLARSSL_ERR_OID_NOT_FOUND -0x002E /**< OID is not found. */ -#define POLARSSL_ERR_OID_BUF_TOO_SMALL -0x000B /**< output buffer is too small */ - -/* - * Top level OID tuples - */ -#define OID_ISO_MEMBER_BODIES "\x2a" /* {iso(1) member-body(2)} */ -#define OID_ISO_IDENTIFIED_ORG "\x2b" /* {iso(1) identified-organization(3)} */ -#define OID_ISO_CCITT_DS "\x55" /* {joint-iso-ccitt(2) ds(5)} */ -#define OID_ISO_ITU_COUNTRY "\x60" /* {joint-iso-itu-t(2) country(16)} */ - -/* - * ISO Member bodies OID parts - */ -#define OID_COUNTRY_US "\x86\x48" /* {us(840)} */ -#define OID_ORG_RSA_DATA_SECURITY "\x86\xf7\x0d" /* {rsadsi(113549)} */ -#define OID_RSA_COMPANY OID_ISO_MEMBER_BODIES OID_COUNTRY_US \ - OID_ORG_RSA_DATA_SECURITY /* {iso(1) member-body(2) us(840) rsadsi(113549)} */ -#define OID_ORG_ANSI_X9_62 "\xce\x3d" /* ansi-X9-62(10045) */ -#define OID_ANSI_X9_62 OID_ISO_MEMBER_BODIES OID_COUNTRY_US \ - OID_ORG_ANSI_X9_62 - -/* - * ISO Identified organization OID parts - */ -#define OID_ORG_DOD "\x06" /* {dod(6)} */ -#define OID_ORG_OIW "\x0e" -#define OID_OIW_SECSIG OID_ORG_OIW "\x03" -#define OID_OIW_SECSIG_ALG OID_OIW_SECSIG "\x02" -#define OID_OIW_SECSIG_SHA1 OID_OIW_SECSIG_ALG "\x1a" -#define OID_ORG_CERTICOM "\x81\x04" /* certicom(132) */ -#define OID_CERTICOM OID_ISO_IDENTIFIED_ORG OID_ORG_CERTICOM -#define OID_ORG_TELETRUST "\x24" /* teletrust(36) */ -#define OID_TELETRUST OID_ISO_IDENTIFIED_ORG OID_ORG_TELETRUST - -/* - * ISO ITU OID parts - */ -#define OID_ORGANIZATION "\x01" /* {organization(1)} */ -#define OID_ISO_ITU_US_ORG OID_ISO_ITU_COUNTRY OID_COUNTRY_US OID_ORGANIZATION /* {joint-iso-itu-t(2) country(16) us(840) organization(1)} */ - -#define OID_ORG_GOV "\x65" /* {gov(101)} */ -#define OID_GOV OID_ISO_ITU_US_ORG OID_ORG_GOV /* {joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101)} */ - -#define OID_ORG_NETSCAPE "\x86\xF8\x42" /* {netscape(113730)} */ -#define OID_NETSCAPE OID_ISO_ITU_US_ORG OID_ORG_NETSCAPE /* Netscape OID {joint-iso-itu-t(2) country(16) us(840) organization(1) netscape(113730)} */ - -/* ISO arc for standard certificate and CRL extensions */ -#define OID_ID_CE OID_ISO_CCITT_DS "\x1D" /**< id-ce OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 29} */ - -/** - * Private Internet Extensions - * { iso(1) identified-organization(3) dod(6) internet(1) - * security(5) mechanisms(5) pkix(7) } - */ -#define OID_PKIX OID_ISO_IDENTIFIED_ORG OID_ORG_DOD "\x01\x05\x05\x07" - -/* - * Arc for standard naming attributes - */ -#define OID_AT OID_ISO_CCITT_DS "\x04" /**< id-at OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 4} */ -#define OID_AT_CN OID_AT "\x03" /**< id-at-commonName AttributeType:= {id-at 3} */ -#define OID_AT_SUR_NAME OID_AT "\x04" /**< id-at-surName AttributeType:= {id-at 4} */ -#define OID_AT_SERIAL_NUMBER OID_AT "\x05" /**< id-at-serialNumber AttributeType:= {id-at 5} */ -#define OID_AT_COUNTRY OID_AT "\x06" /**< id-at-countryName AttributeType:= {id-at 6} */ -#define OID_AT_LOCALITY OID_AT "\x07" /**< id-at-locality AttributeType:= {id-at 7} */ -#define OID_AT_STATE OID_AT "\x08" /**< id-at-state AttributeType:= {id-at 8} */ -#define OID_AT_ORGANIZATION OID_AT "\x0A" /**< id-at-organizationName AttributeType:= {id-at 10} */ -#define OID_AT_ORG_UNIT OID_AT "\x0B" /**< id-at-organizationalUnitName AttributeType:= {id-at 11} */ -#define OID_AT_TITLE OID_AT "\x0C" /**< id-at-title AttributeType:= {id-at 12} */ -#define OID_AT_POSTAL_ADDRESS OID_AT "\x10" /**< id-at-postalAddress AttributeType:= {id-at 16} */ -#define OID_AT_POSTAL_CODE OID_AT "\x11" /**< id-at-postalCode AttributeType:= {id-at 17} */ -#define OID_AT_GIVEN_NAME OID_AT "\x2A" /**< id-at-givenName AttributeType:= {id-at 42} */ -#define OID_AT_INITIALS OID_AT "\x2B" /**< id-at-initials AttributeType:= {id-at 43} */ -#define OID_AT_GENERATION_QUALIFIER OID_AT "\x2C" /**< id-at-generationQualifier AttributeType:= {id-at 44} */ -#define OID_AT_DN_QUALIFIER OID_AT "\x2E" /**< id-at-dnQualifier AttributeType:= {id-at 46} */ -#define OID_AT_PSEUDONYM OID_AT "\x41" /**< id-at-pseudonym AttributeType:= {id-at 65} */ - -#define OID_DOMAIN_COMPONENT "\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x19" /** id-domainComponent AttributeType:= {itu-t(0) data(9) pss(2342) ucl(19200300) pilot(100) pilotAttributeType(1) domainComponent(25)} */ - -/* - * OIDs for standard certificate extensions - */ -#define OID_AUTHORITY_KEY_IDENTIFIER OID_ID_CE "\x23" /**< id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 } */ -#define OID_SUBJECT_KEY_IDENTIFIER OID_ID_CE "\x0E" /**< id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 } */ -#define OID_KEY_USAGE OID_ID_CE "\x0F" /**< id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 } */ -#define OID_CERTIFICATE_POLICIES OID_ID_CE "\x20" /**< id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 } */ -#define OID_POLICY_MAPPINGS OID_ID_CE "\x21" /**< id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 } */ -#define OID_SUBJECT_ALT_NAME OID_ID_CE "\x11" /**< id-ce-subjectAltName OBJECT IDENTIFIER ::= { id-ce 17 } */ -#define OID_ISSUER_ALT_NAME OID_ID_CE "\x12" /**< id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 } */ -#define OID_SUBJECT_DIRECTORY_ATTRS OID_ID_CE "\x09" /**< id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 } */ -#define OID_BASIC_CONSTRAINTS OID_ID_CE "\x13" /**< id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 } */ -#define OID_NAME_CONSTRAINTS OID_ID_CE "\x1E" /**< id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 } */ -#define OID_POLICY_CONSTRAINTS OID_ID_CE "\x24" /**< id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 } */ -#define OID_EXTENDED_KEY_USAGE OID_ID_CE "\x25" /**< id-ce-extKeyUsage OBJECT IDENTIFIER ::= { id-ce 37 } */ -#define OID_CRL_DISTRIBUTION_POINTS OID_ID_CE "\x1F" /**< id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= { id-ce 31 } */ -#define OID_INIHIBIT_ANYPOLICY OID_ID_CE "\x36" /**< id-ce-inhibitAnyPolicy OBJECT IDENTIFIER ::= { id-ce 54 } */ -#define OID_FRESHEST_CRL OID_ID_CE "\x2E" /**< id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 } */ - -/* - * Netscape certificate extensions - */ -#define OID_NS_CERT OID_NETSCAPE "\x01" -#define OID_NS_CERT_TYPE OID_NS_CERT "\x01" -#define OID_NS_BASE_URL OID_NS_CERT "\x02" -#define OID_NS_REVOCATION_URL OID_NS_CERT "\x03" -#define OID_NS_CA_REVOCATION_URL OID_NS_CERT "\x04" -#define OID_NS_RENEWAL_URL OID_NS_CERT "\x07" -#define OID_NS_CA_POLICY_URL OID_NS_CERT "\x08" -#define OID_NS_SSL_SERVER_NAME OID_NS_CERT "\x0C" -#define OID_NS_COMMENT OID_NS_CERT "\x0D" -#define OID_NS_DATA_TYPE OID_NETSCAPE "\x02" -#define OID_NS_CERT_SEQUENCE OID_NS_DATA_TYPE "\x05" - -/* - * OIDs for CRL extensions - */ -#define OID_PRIVATE_KEY_USAGE_PERIOD OID_ID_CE "\x10" -#define OID_CRL_NUMBER OID_ID_CE "\x14" /**< id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 } */ - -/* - * X.509 v3 Extended key usage OIDs - */ -#define OID_ANY_EXTENDED_KEY_USAGE OID_EXTENDED_KEY_USAGE "\x00" /**< anyExtendedKeyUsage OBJECT IDENTIFIER ::= { id-ce-extKeyUsage 0 } */ - -#define OID_KP OID_PKIX "\x03" /**< id-kp OBJECT IDENTIFIER ::= { id-pkix 3 } */ -#define OID_SERVER_AUTH OID_KP "\x01" /**< id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 } */ -#define OID_CLIENT_AUTH OID_KP "\x02" /**< id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 } */ -#define OID_CODE_SIGNING OID_KP "\x03" /**< id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 } */ -#define OID_EMAIL_PROTECTION OID_KP "\x04" /**< id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 } */ -#define OID_TIME_STAMPING OID_KP "\x08" /**< id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 } */ -#define OID_OCSP_SIGNING OID_KP "\x09" /**< id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 } */ - -/* - * PKCS definition OIDs - */ - -#define OID_PKCS OID_RSA_COMPANY "\x01" /**< pkcs OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) 1 } */ -#define OID_PKCS1 OID_PKCS "\x01" /**< pkcs-1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 } */ -#define OID_PKCS5 OID_PKCS "\x05" /**< pkcs-5 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 5 } */ -#define OID_PKCS9 OID_PKCS "\x09" /**< pkcs-9 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 } */ -#define OID_PKCS12 OID_PKCS "\x0c" /**< pkcs-12 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 12 } */ - -/* - * PKCS#1 OIDs - */ -#define OID_PKCS1_RSA OID_PKCS1 "\x01" /**< rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 } */ -#define OID_PKCS1_MD2 OID_PKCS1 "\x02" /**< md2WithRSAEncryption ::= { pkcs-1 2 } */ -#define OID_PKCS1_MD4 OID_PKCS1 "\x03" /**< md4WithRSAEncryption ::= { pkcs-1 3 } */ -#define OID_PKCS1_MD5 OID_PKCS1 "\x04" /**< md5WithRSAEncryption ::= { pkcs-1 4 } */ -#define OID_PKCS1_SHA1 OID_PKCS1 "\x05" /**< sha1WithRSAEncryption ::= { pkcs-1 5 } */ -#define OID_PKCS1_SHA224 OID_PKCS1 "\x0e" /**< sha224WithRSAEncryption ::= { pkcs-1 14 } */ -#define OID_PKCS1_SHA256 OID_PKCS1 "\x0b" /**< sha256WithRSAEncryption ::= { pkcs-1 11 } */ -#define OID_PKCS1_SHA384 OID_PKCS1 "\x0c" /**< sha384WithRSAEncryption ::= { pkcs-1 12 } */ -#define OID_PKCS1_SHA512 OID_PKCS1 "\x0d" /**< sha512WithRSAEncryption ::= { pkcs-1 13 } */ - -#define OID_RSA_SHA_OBS "\x2B\x0E\x03\x02\x1D" - -#define OID_PKCS9_EMAIL OID_PKCS9 "\x01" /**< emailAddress AttributeType ::= { pkcs-9 1 } */ - -/* RFC 4055 */ -#define OID_RSASSA_PSS OID_PKCS1 "\x0a" /**< id-RSASSA-PSS ::= { pkcs-1 10 } */ -#define OID_MGF1 OID_PKCS1 "\x08" /**< id-mgf1 ::= { pkcs-1 8 } */ - -/* - * Digest algorithms - */ -#define OID_DIGEST_ALG_MD2 OID_RSA_COMPANY "\x02\x02" /**< id-md2 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 2 } */ -#define OID_DIGEST_ALG_MD4 OID_RSA_COMPANY "\x02\x04" /**< id-md4 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 4 } */ -#define OID_DIGEST_ALG_MD5 OID_RSA_COMPANY "\x02\x05" /**< id-md5 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 5 } */ -#define OID_DIGEST_ALG_SHA1 OID_ISO_IDENTIFIED_ORG OID_OIW_SECSIG_SHA1 /**< id-sha1 OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 26 } */ -#define OID_DIGEST_ALG_SHA224 OID_GOV "\x03\x04\x02\x04" /**< id-sha224 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) hashalgs(2) 4 } */ -#define OID_DIGEST_ALG_SHA256 OID_GOV "\x03\x04\x02\x01" /**< id-sha256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) hashalgs(2) 1 } */ - -#define OID_DIGEST_ALG_SHA384 OID_GOV "\x03\x04\x02\x02" /**< id-sha384 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) hashalgs(2) 2 } */ - -#define OID_DIGEST_ALG_SHA512 OID_GOV "\x03\x04\x02\x03" /**< id-sha512 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) hashalgs(2) 3 } */ - -#define OID_HMAC_SHA1 OID_RSA_COMPANY "\x02\x07" /**< id-hmacWithSHA1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 7 } */ - -/* - * Encryption algorithms - */ -#define OID_DES_CBC OID_ISO_IDENTIFIED_ORG OID_OIW_SECSIG_ALG "\x07" /**< desCBC OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 7 } */ -#define OID_DES_EDE3_CBC OID_RSA_COMPANY "\x03\x07" /**< des-ede3-cbc OBJECT IDENTIFIER ::= { iso(1) member-body(2) -- us(840) rsadsi(113549) encryptionAlgorithm(3) 7 } */ - -/* - * PKCS#5 OIDs - */ -#define OID_PKCS5_PBKDF2 OID_PKCS5 "\x0c" /**< id-PBKDF2 OBJECT IDENTIFIER ::= {pkcs-5 12} */ -#define OID_PKCS5_PBES2 OID_PKCS5 "\x0d" /**< id-PBES2 OBJECT IDENTIFIER ::= {pkcs-5 13} */ -#define OID_PKCS5_PBMAC1 OID_PKCS5 "\x0e" /**< id-PBMAC1 OBJECT IDENTIFIER ::= {pkcs-5 14} */ - -/* - * PKCS#5 PBES1 algorithms - */ -#define OID_PKCS5_PBE_MD2_DES_CBC OID_PKCS5 "\x01" /**< pbeWithMD2AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 1} */ -#define OID_PKCS5_PBE_MD2_RC2_CBC OID_PKCS5 "\x04" /**< pbeWithMD2AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 4} */ -#define OID_PKCS5_PBE_MD5_DES_CBC OID_PKCS5 "\x03" /**< pbeWithMD5AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 3} */ -#define OID_PKCS5_PBE_MD5_RC2_CBC OID_PKCS5 "\x06" /**< pbeWithMD5AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 6} */ -#define OID_PKCS5_PBE_SHA1_DES_CBC OID_PKCS5 "\x0a" /**< pbeWithSHA1AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 10} */ -#define OID_PKCS5_PBE_SHA1_RC2_CBC OID_PKCS5 "\x0b" /**< pbeWithSHA1AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 11} */ - -/* - * PKCS#8 OIDs - */ -#define OID_PKCS9_CSR_EXT_REQ OID_PKCS9 "\x0e" /**< extensionRequest OBJECT IDENTIFIER ::= {pkcs-9 14} */ - -/* - * PKCS#12 PBE OIDs - */ -#define OID_PKCS12_PBE OID_PKCS12 "\x01" /**< pkcs-12PbeIds OBJECT IDENTIFIER ::= {pkcs-12 1} */ - -#define OID_PKCS12_PBE_SHA1_RC4_128 OID_PKCS12_PBE "\x01" /**< pbeWithSHAAnd128BitRC4 OBJECT IDENTIFIER ::= {pkcs-12PbeIds 1} */ -#define OID_PKCS12_PBE_SHA1_RC4_40 OID_PKCS12_PBE "\x02" /**< pbeWithSHAAnd40BitRC4 OBJECT IDENTIFIER ::= {pkcs-12PbeIds 2} */ -#define OID_PKCS12_PBE_SHA1_DES3_EDE_CBC OID_PKCS12_PBE "\x03" /**< pbeWithSHAAnd3-KeyTripleDES-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 3} */ -#define OID_PKCS12_PBE_SHA1_DES2_EDE_CBC OID_PKCS12_PBE "\x04" /**< pbeWithSHAAnd2-KeyTripleDES-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 4} */ -#define OID_PKCS12_PBE_SHA1_RC2_128_CBC OID_PKCS12_PBE "\x05" /**< pbeWithSHAAnd128BitRC2-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 5} */ -#define OID_PKCS12_PBE_SHA1_RC2_40_CBC OID_PKCS12_PBE "\x06" /**< pbeWithSHAAnd40BitRC2-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 6} */ - -/* - * EC key algorithms from RFC 5480 - */ - -/* id-ecPublicKey OBJECT IDENTIFIER ::= { - * iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 } */ -#define OID_EC_ALG_UNRESTRICTED OID_ANSI_X9_62 "\x02\01" - -/* id-ecDH OBJECT IDENTIFIER ::= { - * iso(1) identified-organization(3) certicom(132) - * schemes(1) ecdh(12) } */ -#define OID_EC_ALG_ECDH OID_CERTICOM "\x01\x0c" - -/* - * ECParameters namedCurve identifiers, from RFC 5480, RFC 5639, and SEC2 - */ - -/* secp192r1 OBJECT IDENTIFIER ::= { - * iso(1) member-body(2) us(840) ansi-X9-62(10045) curves(3) prime(1) 1 } */ -#define OID_EC_GRP_SECP192R1 OID_ANSI_X9_62 "\x03\x01\x01" - -/* secp224r1 OBJECT IDENTIFIER ::= { - * iso(1) identified-organization(3) certicom(132) curve(0) 33 } */ -#define OID_EC_GRP_SECP224R1 OID_CERTICOM "\x00\x21" - -/* secp256r1 OBJECT IDENTIFIER ::= { - * iso(1) member-body(2) us(840) ansi-X9-62(10045) curves(3) prime(1) 7 } */ -#define OID_EC_GRP_SECP256R1 OID_ANSI_X9_62 "\x03\x01\x07" - -/* secp384r1 OBJECT IDENTIFIER ::= { - * iso(1) identified-organization(3) certicom(132) curve(0) 34 } */ -#define OID_EC_GRP_SECP384R1 OID_CERTICOM "\x00\x22" - -/* secp521r1 OBJECT IDENTIFIER ::= { - * iso(1) identified-organization(3) certicom(132) curve(0) 35 } */ -#define OID_EC_GRP_SECP521R1 OID_CERTICOM "\x00\x23" - -/* secp192k1 OBJECT IDENTIFIER ::= { - * iso(1) identified-organization(3) certicom(132) curve(0) 31 } */ -#define OID_EC_GRP_SECP192K1 OID_CERTICOM "\x00\x1f" - -/* secp224k1 OBJECT IDENTIFIER ::= { - * iso(1) identified-organization(3) certicom(132) curve(0) 32 } */ -#define OID_EC_GRP_SECP224K1 OID_CERTICOM "\x00\x20" - -/* secp256k1 OBJECT IDENTIFIER ::= { - * iso(1) identified-organization(3) certicom(132) curve(0) 10 } */ -#define OID_EC_GRP_SECP256K1 OID_CERTICOM "\x00\x0a" - -/* RFC 5639 4.1 - * ecStdCurvesAndGeneration OBJECT IDENTIFIER::= {iso(1) - * identified-organization(3) teletrust(36) algorithm(3) signature- - * algorithm(3) ecSign(2) 8} - * ellipticCurve OBJECT IDENTIFIER ::= {ecStdCurvesAndGeneration 1} - * versionOne OBJECT IDENTIFIER ::= {ellipticCurve 1} */ -#define OID_EC_BRAINPOOL_V1 OID_TELETRUST "\x03\x03\x02\x08\x01\x01" - -/* brainpoolP256r1 OBJECT IDENTIFIER ::= {versionOne 7} */ -#define OID_EC_GRP_BP256R1 OID_EC_BRAINPOOL_V1 "\x07" - -/* brainpoolP384r1 OBJECT IDENTIFIER ::= {versionOne 11} */ -#define OID_EC_GRP_BP384R1 OID_EC_BRAINPOOL_V1 "\x0B" - -/* brainpoolP512r1 OBJECT IDENTIFIER ::= {versionOne 13} */ -#define OID_EC_GRP_BP512R1 OID_EC_BRAINPOOL_V1 "\x0D" - -/* - * SEC1 C.1 - * - * prime-field OBJECT IDENTIFIER ::= { id-fieldType 1 } - * id-fieldType OBJECT IDENTIFIER ::= { ansi-X9-62 fieldType(1)} - */ -#define OID_ANSI_X9_62_FIELD_TYPE OID_ANSI_X9_62 "\x01" -#define OID_ANSI_X9_62_PRIME_FIELD OID_ANSI_X9_62_FIELD_TYPE "\x01" - -/* - * ECDSA signature identifiers, from RFC 5480 - */ -#define OID_ANSI_X9_62_SIG OID_ANSI_X9_62 "\x04" /* signatures(4) */ -#define OID_ANSI_X9_62_SIG_SHA2 OID_ANSI_X9_62_SIG "\x03" /* ecdsa-with-SHA2(3) */ - -/* ecdsa-with-SHA1 OBJECT IDENTIFIER ::= { - * iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) 1 } */ -#define OID_ECDSA_SHA1 OID_ANSI_X9_62_SIG "\x01" - -/* ecdsa-with-SHA224 OBJECT IDENTIFIER ::= { - * iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) - * ecdsa-with-SHA2(3) 1 } */ -#define OID_ECDSA_SHA224 OID_ANSI_X9_62_SIG_SHA2 "\x01" - -/* ecdsa-with-SHA256 OBJECT IDENTIFIER ::= { - * iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) - * ecdsa-with-SHA2(3) 2 } */ -#define OID_ECDSA_SHA256 OID_ANSI_X9_62_SIG_SHA2 "\x02" - -/* ecdsa-with-SHA384 OBJECT IDENTIFIER ::= { - * iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) - * ecdsa-with-SHA2(3) 3 } */ -#define OID_ECDSA_SHA384 OID_ANSI_X9_62_SIG_SHA2 "\x03" - -/* ecdsa-with-SHA512 OBJECT IDENTIFIER ::= { - * iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) - * ecdsa-with-SHA2(3) 4 } */ -#define OID_ECDSA_SHA512 OID_ANSI_X9_62_SIG_SHA2 "\x04" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Base OID descriptor structure - */ -typedef struct { - const char *asn1; /*!< OID ASN.1 representation */ - size_t asn1_len; /*!< length of asn1 */ - const char *name; /*!< official name (e.g. from RFC) */ - const char *description; /*!< human friendly description */ -} oid_descriptor_t; - -/** - * \brief Translate an ASN.1 OID into its numeric representation - * (e.g. "\x2A\x86\x48\x86\xF7\x0D" into "1.2.840.113549") - * - * \param buf buffer to put representation in - * \param size size of the buffer - * \param oid OID to translate - * - * \return Length of the string written (excluding final NULL) or - * POLARSSL_ERR_OID_BUF_TO_SMALL in case of error - */ -int oid_get_numeric_string( char *buf, size_t size, const asn1_buf *oid ); - -#if defined(POLARSSL_X509_USE_C) || defined(POLARSSL_X509_CREATE_C) -/** - * \brief Translate an X.509 extension OID into local values - * - * \param oid OID to use - * \param ext_type place to store the extension type - * - * \return 0 if successful, or POLARSSL_ERR_OID_NOT_FOUND - */ -int oid_get_x509_ext_type( const asn1_buf *oid, int *ext_type ); -#endif - -/** - * \brief Translate an X.509 attribute type OID into the short name - * (e.g. the OID for an X520 Common Name into "CN") - * - * \param oid OID to use - * \param short_name place to store the string pointer - * - * \return 0 if successful, or POLARSSL_ERR_OID_NOT_FOUND - */ -int oid_get_attr_short_name( const asn1_buf *oid, const char **short_name ); - -/** - * \brief Translate PublicKeyAlgorithm OID into pk_type - * - * \param oid OID to use - * \param pk_alg place to store public key algorithm - * - * \return 0 if successful, or POLARSSL_ERR_OID_NOT_FOUND - */ -int oid_get_pk_alg( const asn1_buf *oid, pk_type_t *pk_alg ); - -/** - * \brief Translate pk_type into PublicKeyAlgorithm OID - * - * \param pk_alg Public key type to look for - * \param oid place to store ASN.1 OID string pointer - * \param olen length of the OID - * - * \return 0 if successful, or POLARSSL_ERR_OID_NOT_FOUND - */ -int oid_get_oid_by_pk_alg( pk_type_t pk_alg, - const char **oid, size_t *olen ); - -#if defined(POLARSSL_ECP_C) -/** - * \brief Translate NamedCurve OID into an EC group identifier - * - * \param oid OID to use - * \param grp_id place to store group id - * - * \return 0 if successful, or POLARSSL_ERR_OID_NOT_FOUND - */ -int oid_get_ec_grp( const asn1_buf *oid, ecp_group_id *grp_id ); - -/** - * \brief Translate EC group identifier into NamedCurve OID - * - * \param grp_id EC group identifier - * \param oid place to store ASN.1 OID string pointer - * \param olen length of the OID - * - * \return 0 if successful, or POLARSSL_ERR_OID_NOT_FOUND - */ -int oid_get_oid_by_ec_grp( ecp_group_id grp_id, - const char **oid, size_t *olen ); -#endif /* POLARSSL_ECP_C */ - -#if defined(POLARSSL_MD_C) -/** - * \brief Translate SignatureAlgorithm OID into md_type and pk_type - * - * \param oid OID to use - * \param md_alg place to store message digest algorithm - * \param pk_alg place to store public key algorithm - * - * \return 0 if successful, or POLARSSL_ERR_OID_NOT_FOUND - */ -int oid_get_sig_alg( const asn1_buf *oid, - md_type_t *md_alg, pk_type_t *pk_alg ); - -/** - * \brief Translate SignatureAlgorithm OID into description - * - * \param oid OID to use - * \param desc place to store string pointer - * - * \return 0 if successful, or POLARSSL_ERR_OID_NOT_FOUND - */ -int oid_get_sig_alg_desc( const asn1_buf *oid, const char **desc ); - -/** - * \brief Translate md_type and pk_type into SignatureAlgorithm OID - * - * \param md_alg message digest algorithm - * \param pk_alg public key algorithm - * \param oid place to store ASN.1 OID string pointer - * \param olen length of the OID - * - * \return 0 if successful, or POLARSSL_ERR_OID_NOT_FOUND - */ -int oid_get_oid_by_sig_alg( pk_type_t pk_alg, md_type_t md_alg, - const char **oid, size_t *olen ); - -/** - * \brief Translate hash algorithm OID into md_type - * - * \param oid OID to use - * \param md_alg place to store message digest algorithm - * - * \return 0 if successful, or POLARSSL_ERR_OID_NOT_FOUND - */ -int oid_get_md_alg( const asn1_buf *oid, md_type_t *md_alg ); -#endif /* POLARSSL_MD_C */ - -/** - * \brief Translate Extended Key Usage OID into description - * - * \param oid OID to use - * \param desc place to store string pointer - * - * \return 0 if successful, or POLARSSL_ERR_OID_NOT_FOUND - */ -int oid_get_extended_key_usage( const asn1_buf *oid, const char **desc ); - -/** - * \brief Translate md_type into hash algorithm OID - * - * \param md_alg message digest algorithm - * \param oid place to store ASN.1 OID string pointer - * \param olen length of the OID - * - * \return 0 if successful, or POLARSSL_ERR_OID_NOT_FOUND - */ -int oid_get_oid_by_md( md_type_t md_alg, const char **oid, size_t *olen ); - -#if defined(POLARSSL_CIPHER_C) -/** - * \brief Translate encryption algorithm OID into cipher_type - * - * \param oid OID to use - * \param cipher_alg place to store cipher algorithm - * - * \return 0 if successful, or POLARSSL_ERR_OID_NOT_FOUND - */ -int oid_get_cipher_alg( const asn1_buf *oid, cipher_type_t *cipher_alg ); -#endif /* POLARSSL_CIPHER_C */ - -#if defined(POLARSSL_PKCS12_C) -/** - * \brief Translate PKCS#12 PBE algorithm OID into md_type and - * cipher_type - * - * \param oid OID to use - * \param md_alg place to store message digest algorithm - * \param cipher_alg place to store cipher algorithm - * - * \return 0 if successful, or POLARSSL_ERR_OID_NOT_FOUND - */ -int oid_get_pkcs12_pbe_alg( const asn1_buf *oid, md_type_t *md_alg, - cipher_type_t *cipher_alg ); -#endif /* POLARSSL_PKCS12_C */ - -#ifdef __cplusplus -} -#endif - -#endif /* oid.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/openssl.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/openssl.h deleted file mode 100644 index b77e7da..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/openssl.h +++ /dev/null @@ -1,140 +0,0 @@ -/** - * \file openssl.h - * - * \brief OpenSSL wrapper (definitions, inline functions). - * - * Copyright (C) 2006-2010, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * OpenSSL wrapper contributed by David Barett - */ -#ifndef POLARSSL_OPENSSL_H -#define POLARSSL_OPENSSL_H - -#include "aes.h" -#include "md5.h" -#include "rsa.h" -#include "sha1.h" - -#define AES_SIZE 16 -#define AES_BLOCK_SIZE 16 -#define AES_KEY aes_context -#define MD5_CTX md5_context -#define SHA_CTX sha1_context - -#define SHA1_Init( CTX ) \ - sha1_starts( (CTX) ) -#define SHA1_Update( CTX, BUF, LEN ) \ - sha1_update( (CTX), (unsigned char *)(BUF), (LEN) ) -#define SHA1_Final( OUT, CTX ) \ - sha1_finish( (CTX), (OUT) ) - -#define MD5_Init( CTX ) \ - md5_starts( (CTX) ) -#define MD5_Update( CTX, BUF, LEN ) \ - md5_update( (CTX), (unsigned char *)(BUF), (LEN) ) -#define MD5_Final( OUT, CTX ) \ - md5_finish( (CTX), (OUT) ) - -#define AES_set_encrypt_key( KEY, KEYSIZE, CTX ) \ - aes_setkey_enc( (CTX), (KEY), (KEYSIZE) ) -#define AES_set_decrypt_key( KEY, KEYSIZE, CTX ) \ - aes_setkey_dec( (CTX), (KEY), (KEYSIZE) ) -#define AES_cbc_encrypt( INPUT, OUTPUT, LEN, CTX, IV, MODE ) \ - aes_crypt_cbc( (CTX), (MODE), (LEN), (IV), (INPUT), (OUTPUT) ) - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * RSA stuff follows. TODO: needs cleanup - */ -inline int __RSA_Passthrough( void *output, void *input, int size ) -{ - memcpy( output, input, size ); - return size; -} - -inline rsa_context* d2i_RSA_PUBKEY( void *ignore, unsigned char **bufptr, - int len ) -{ - unsigned char *buffer = *(unsigned char **) bufptr; - rsa_context *rsa; - - /* - * Not a general-purpose parser: only parses public key from *exactly* - * openssl genrsa -out privkey.pem 512 (or 1024) - * openssl rsa -in privkey.pem -out privatekey.der -outform der - * openssl rsa -in privkey.pem -out pubkey.der -outform der -pubout - * - * TODO: make a general-purpose parse - */ - if( ignore != 0 || ( len != 94 && len != 162 ) ) - return( 0 ); - - rsa = (rsa_context *) malloc( sizeof( rsa_rsa ) ); - if( rsa == NULL ) - return( 0 ); - - memset( rsa, 0, sizeof( rsa_context ) ); - - if( ( len == 94 && - mpi_read_binary( &rsa->N, &buffer[ 25], 64 ) == 0 && - mpi_read_binary( &rsa->E, &buffer[ 91], 3 ) == 0 ) || - ( len == 162 && - mpi_read_binary( &rsa->N, &buffer[ 29], 128 ) == 0 ) && - mpi_read_binary( &rsa->E, &buffer[159], 3 ) == 0 ) - { - /* - * key read successfully - */ - rsa->len = ( mpi_msb( &rsa->N ) + 7 ) >> 3; - return( rsa ); - } - else - { - memset( rsa, 0, sizeof( rsa_context ) ); - free( rsa ); - return( 0 ); - } -} - -#define RSA rsa_context -#define RSA_PKCS1_PADDING 1 /* ignored; always encrypt with this */ -#define RSA_size( CTX ) (CTX)->len -#define RSA_free( CTX ) rsa_free( CTX ) -#define ERR_get_error( ) "ERR_get_error() not supported" -#define RSA_blinding_off( IGNORE ) - -#define d2i_RSAPrivateKey( a, b, c ) new rsa_context /* TODO: C++ bleh */ - -inline int RSA_public_decrypt ( int size, unsigned char* input, unsigned char* output, RSA* key, int ignore ) { int outsize=size; if( !rsa_pkcs1_decrypt( key, RSA_PUBLIC, &outsize, input, output ) ) return outsize; else return -1; } -inline int RSA_private_decrypt( int size, unsigned char* input, unsigned char* output, RSA* key, int ignore ) { int outsize=size; if( !rsa_pkcs1_decrypt( key, RSA_PRIVATE, &outsize, input, output ) ) return outsize; else return -1; } -inline int RSA_public_encrypt ( int size, unsigned char* input, unsigned char* output, RSA* key, int ignore ) { if( !rsa_pkcs1_encrypt( key, RSA_PUBLIC, size, input, output ) ) return RSA_size(key); else return -1; } -inline int RSA_private_encrypt( int size, unsigned char* input, unsigned char* output, RSA* key, int ignore ) { if( !rsa_pkcs1_encrypt( key, RSA_PRIVATE, size, input, output ) ) return RSA_size(key); else return -1; } - -#ifdef __cplusplus -} -#endif - -#endif /* openssl.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/padlock.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/padlock.h deleted file mode 100644 index 3c5f725..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/padlock.h +++ /dev/null @@ -1,109 +0,0 @@ -/** - * \file padlock.h - * - * \brief VIA PadLock ACE for HW encryption/decryption supported by some - * processors - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_PADLOCK_H -#define POLARSSL_PADLOCK_H - -#include "aes.h" - -#define POLARSSL_ERR_PADLOCK_DATA_MISALIGNED -0x0030 /**< Input data should be aligned. */ - -#if defined(POLARSSL_HAVE_ASM) && defined(__GNUC__) && defined(__i386__) - -#ifndef POLARSSL_HAVE_X86 -#define POLARSSL_HAVE_X86 -#endif - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef INT32 int32_t; -#else -#include -#endif - - -#define PADLOCK_RNG 0x000C -#define PADLOCK_ACE 0x00C0 -#define PADLOCK_PHE 0x0C00 -#define PADLOCK_PMM 0x3000 - -#define PADLOCK_ALIGN16(x) (uint32_t *) (16 + ((int32_t) x & ~15)) - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief PadLock detection routine - * - * \param feature The feature to detect - * - * \return 1 if CPU has support for the feature, 0 otherwise - */ -int padlock_supports( int feature ); - -/** - * \brief PadLock AES-ECB block en(de)cryption - * - * \param ctx AES context - * \param mode AES_ENCRYPT or AES_DECRYPT - * \param input 16-byte input block - * \param output 16-byte output block - * - * \return 0 if success, 1 if operation failed - */ -int padlock_xcryptecb( aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ); - -/** - * \brief PadLock AES-CBC buffer en(de)cryption - * - * \param ctx AES context - * \param mode AES_ENCRYPT or AES_DECRYPT - * \param length length of the input data - * \param iv initialization vector (updated after use) - * \param input buffer holding the input data - * \param output buffer holding the output data - * - * \return 0 if success, 1 if operation failed - */ -int padlock_xcryptcbc( aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ); - -#ifdef __cplusplus -} -#endif - -#endif /* HAVE_X86 */ - -#endif /* padlock.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pbkdf2.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pbkdf2.h deleted file mode 100644 index 5ccb2fa..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pbkdf2.h +++ /dev/null @@ -1,82 +0,0 @@ -/** - * \file pbkdf2.h - * - * \brief Password-Based Key Derivation Function 2 (from PKCS#5) - * DEPRECATED: use pkcs5.h instead. - * - * \author Mathias Olsson - * - * Copyright (C) 2006-2012, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_PBKDF2_H -#define POLARSSL_PBKDF2_H - -#include - -#include "md.h" - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#define POLARSSL_ERR_PBKDF2_BAD_INPUT_DATA -0x007C /**< Bad input parameters to function. */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief PKCS#5 PBKDF2 using HMAC - * DEPRECATED: Use pkcs5_pbkdf2_hmac() instead! - * - * \param ctx Generic HMAC context - * \param password Password to use when generating key - * \param plen Length of password - * \param salt Salt to use when generating key - * \param slen Length of salt - * \param iteration_count Iteration count - * \param key_length Length of generated key - * \param output Generated key. Must be at least as big as key_length - * - * \returns 0 on success, or a PolarSSL error code if verification fails. - */ -int pbkdf2_hmac( md_context_t *ctx, const unsigned char *password, - size_t plen, const unsigned char *salt, size_t slen, - unsigned int iteration_count, - uint32_t key_length, unsigned char *output ); - -/** - * \brief Checkup routine - * DEPRECATED: Use pkcs5_self_test() instead! - * - * \return 0 if successful, or 1 if the test failed - */ -int pbkdf2_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* pbkdf2.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pem.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pem.h deleted file mode 100644 index e606cf0..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pem.h +++ /dev/null @@ -1,133 +0,0 @@ -/** - * \file pem.h - * - * \brief Privacy Enhanced Mail (PEM) decoding - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_PEM_H -#define POLARSSL_PEM_H - -#include - -/** - * \name PEM Error codes - * These error codes are returned in case of errors reading the - * PEM data. - * \{ - */ -#define POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT -0x1080 /**< No PEM header or footer found. */ -#define POLARSSL_ERR_PEM_INVALID_DATA -0x1100 /**< PEM string is not as expected. */ -#define POLARSSL_ERR_PEM_MALLOC_FAILED -0x1180 /**< Failed to allocate memory. */ -#define POLARSSL_ERR_PEM_INVALID_ENC_IV -0x1200 /**< RSA IV is not in hex-format. */ -#define POLARSSL_ERR_PEM_UNKNOWN_ENC_ALG -0x1280 /**< Unsupported key encryption algorithm. */ -#define POLARSSL_ERR_PEM_PASSWORD_REQUIRED -0x1300 /**< Private key password can't be empty. */ -#define POLARSSL_ERR_PEM_PASSWORD_MISMATCH -0x1380 /**< Given private key password does not allow for correct decryption. */ -#define POLARSSL_ERR_PEM_FEATURE_UNAVAILABLE -0x1400 /**< Unavailable feature, e.g. hashing/encryption combination. */ -#define POLARSSL_ERR_PEM_BAD_INPUT_DATA -0x1480 /**< Bad input parameters to function. */ -/* \} name */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(POLARSSL_PEM_PARSE_C) -/** - * \brief PEM context structure - */ -typedef struct -{ - unsigned char *buf; /*!< buffer for decoded data */ - size_t buflen; /*!< length of the buffer */ - unsigned char *info; /*!< buffer for extra header information */ -} -pem_context; - -/** - * \brief PEM context setup - * - * \param ctx context to be initialized - */ -void pem_init( pem_context *ctx ); - -/** - * \brief Read a buffer for PEM information and store the resulting - * data into the specified context buffers. - * - * \param ctx context to use - * \param header header string to seek and expect - * \param footer footer string to seek and expect - * \param data source data to look in - * \param pwd password for decryption (can be NULL) - * \param pwdlen length of password - * \param use_len destination for total length used (set after header is - * correctly read, so unless you get - * POLARSSL_ERR_PEM_BAD_INPUT_DATA or - * POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT, use_len is - * the length to skip) - * - * \note Attempts to check password correctness by verifying if - * the decrypted text starts with an ASN.1 sequence of - * appropriate length - * - * \return 0 on success, or a specific PEM error code - */ -int pem_read_buffer( pem_context *ctx, const char *header, const char *footer, - const unsigned char *data, - const unsigned char *pwd, - size_t pwdlen, size_t *use_len ); - -/** - * \brief PEM context memory freeing - * - * \param ctx context to be freed - */ -void pem_free( pem_context *ctx ); -#endif /* POLARSSL_PEM_PARSE_C */ - -#if defined(POLARSSL_PEM_WRITE_C) -/** - * \brief Write a buffer of PEM information from a DER encoded - * buffer. - * - * \param header header string to write - * \param footer footer string to write - * \param der_data DER data to write - * \param der_len length of the DER data - * \param buf buffer to write to - * \param buf_len length of output buffer - * \param olen total length written / required (if buf_len is not enough) - * - * \return 0 on success, or a specific PEM or BASE64 error code. On - * POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL olen is the required - * size. - */ -int pem_write_buffer( const char *header, const char *footer, - const unsigned char *der_data, size_t der_len, - unsigned char *buf, size_t buf_len, size_t *olen ); -#endif /* POLARSSL_PEM_WRITE_C */ - -#ifdef __cplusplus -} -#endif - -#endif /* pem.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pk.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pk.h deleted file mode 100644 index 754dda2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pk.h +++ /dev/null @@ -1,632 +0,0 @@ -/** - * \file pk.h - * - * \brief Public Key abstraction layer - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef POLARSSL_PK_H -#define POLARSSL_PK_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include "md.h" - -#if defined(POLARSSL_RSA_C) -#include "rsa.h" -#endif - -#if defined(POLARSSL_ECP_C) -#include "ecp.h" -#endif - -#if defined(POLARSSL_ECDSA_C) -#include "ecdsa.h" -#endif - -#define POLARSSL_ERR_PK_MALLOC_FAILED -0x2F80 /**< Memory alloation failed. */ -#define POLARSSL_ERR_PK_TYPE_MISMATCH -0x2F00 /**< Type mismatch, eg attempt to encrypt with an ECDSA key */ -#define POLARSSL_ERR_PK_BAD_INPUT_DATA -0x2E80 /**< Bad input parameters to function. */ -#define POLARSSL_ERR_PK_FILE_IO_ERROR -0x2E00 /**< Read/write of file failed. */ -#define POLARSSL_ERR_PK_KEY_INVALID_VERSION -0x2D80 /**< Unsupported key version */ -#define POLARSSL_ERR_PK_KEY_INVALID_FORMAT -0x2D00 /**< Invalid key tag or value. */ -#define POLARSSL_ERR_PK_UNKNOWN_PK_ALG -0x2C80 /**< Key algorithm is unsupported (only RSA and EC are supported). */ -#define POLARSSL_ERR_PK_PASSWORD_REQUIRED -0x2C00 /**< Private key password can't be empty. */ -#define POLARSSL_ERR_PK_PASSWORD_MISMATCH -0x2B80 /**< Given private key password does not allow for correct decryption. */ -#define POLARSSL_ERR_PK_INVALID_PUBKEY -0x2B00 /**< The pubkey tag or value is invalid (only RSA and EC are supported). */ -#define POLARSSL_ERR_PK_INVALID_ALG -0x2A80 /**< The algorithm tag or value is invalid. */ -#define POLARSSL_ERR_PK_UNKNOWN_NAMED_CURVE -0x2A00 /**< Elliptic curve is unsupported (only NIST curves are supported). */ -#define POLARSSL_ERR_PK_FEATURE_UNAVAILABLE -0x2980 /**< Unavailable feature, e.g. RSA disabled for RSA key. */ -#define POLARSSL_ERR_PK_SIG_LEN_MISMATCH -0x2000 /**< The signature is valid but its length is less than expected. */ - - -#if defined(POLARSSL_RSA_C) -/** - * Quick access to an RSA context inside a PK context. - * - * \warning You must make sure the PK context actually holds an RSA context - * before using this macro! - */ -#define pk_rsa( pk ) ( (rsa_context *) (pk).pk_ctx ) -#endif /* POLARSSL_RSA_C */ - -#if defined(POLARSSL_ECP_C) -/** - * Quick access to an EC context inside a PK context. - * - * \warning You must make sure the PK context actually holds an EC context - * before using this macro! - */ -#define pk_ec( pk ) ( (ecp_keypair *) (pk).pk_ctx ) -#endif /* POLARSSL_ECP_C */ - - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Public key types - */ -typedef enum { - POLARSSL_PK_NONE=0, - POLARSSL_PK_RSA, - POLARSSL_PK_ECKEY, - POLARSSL_PK_ECKEY_DH, - POLARSSL_PK_ECDSA, - POLARSSL_PK_RSA_ALT, - POLARSSL_PK_RSASSA_PSS, -} pk_type_t; - -/** - * \brief Options for RSASSA-PSS signature verification. - * See \c rsa_rsassa_pss_verify_ext() - */ -typedef struct -{ - md_type_t mgf1_hash_id; - int expected_salt_len; - -} pk_rsassa_pss_options; - -/** - * \brief Types for interfacing with the debug module - */ -typedef enum -{ - POLARSSL_PK_DEBUG_NONE = 0, - POLARSSL_PK_DEBUG_MPI, - POLARSSL_PK_DEBUG_ECP, -} pk_debug_type; - -/** - * \brief Item to send to the debug module - */ -typedef struct -{ - pk_debug_type type; - const char *name; - void *value; -} pk_debug_item; - -/** Maximum number of item send for debugging, plus 1 */ -#define POLARSSL_PK_DEBUG_MAX_ITEMS 3 - -/** - * \brief Public key information and operations - */ -typedef struct -{ - /** Public key type */ - pk_type_t type; - - /** Type name */ - const char *name; - - /** Get key size in bits */ - size_t (*get_size)( const void * ); - - /** Tell if the context implements this type (e.g. ECKEY can do ECDSA) */ - int (*can_do)( pk_type_t type ); - - /** Verify signature */ - int (*verify_func)( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ); - - /** Make signature */ - int (*sign_func)( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - - /** Decrypt message */ - int (*decrypt_func)( void *ctx, const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - - /** Encrypt message */ - int (*encrypt_func)( void *ctx, const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - - /** Allocate a new context */ - void * (*ctx_alloc_func)( void ); - - /** Free the given context */ - void (*ctx_free_func)( void *ctx ); - - /** Interface with the debug module */ - void (*debug_func)( const void *ctx, pk_debug_item *items ); - -} pk_info_t; - -/** - * \brief Public key container - */ -typedef struct -{ - const pk_info_t * pk_info; /**< Public key informations */ - void * pk_ctx; /**< Underlying public key context */ -} pk_context; - -/** - * \brief Types for RSA-alt abstraction - */ -typedef int (*pk_rsa_alt_decrypt_func)( void *ctx, int mode, size_t *olen, - const unsigned char *input, unsigned char *output, - size_t output_max_len ); -typedef int (*pk_rsa_alt_sign_func)( void *ctx, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, - int mode, md_type_t md_alg, unsigned int hashlen, - const unsigned char *hash, unsigned char *sig ); -typedef size_t (*pk_rsa_alt_key_len_func)( void *ctx ); - -/** - * \brief Return information associated with the given PK type - * - * \param pk_type PK type to search for. - * - * \return The PK info associated with the type or NULL if not found. - */ -const pk_info_t *pk_info_from_type( pk_type_t pk_type ); - -/** - * \brief Initialize a pk_context (as NONE) - */ -void pk_init( pk_context *ctx ); - -/** - * \brief Free a pk_context - */ -void pk_free( pk_context *ctx ); - -/** - * \brief Initialize a PK context with the information given - * and allocates the type-specific PK subcontext. - * - * \param ctx Context to initialize. Must be empty (type NONE). - * \param info Information to use - * - * \return 0 on success, - * POLARSSL_ERR_PK_BAD_INPUT_DATA on invalid input, - * POLARSSL_ERR_PK_MALLOC_FAILED on allocation failure. - * - * \note For contexts holding an RSA-alt key, use - * \c pk_init_ctx_rsa_alt() instead. - */ -int pk_init_ctx( pk_context *ctx, const pk_info_t *info ); - -/** - * \brief Initialize an RSA-alt context - * - * \param ctx Context to initialize. Must be empty (type NONE). - * \param key RSA key pointer - * \param decrypt_func Decryption function - * \param sign_func Signing function - * \param key_len_func Function returning key length in bytes - * - * \return 0 on success, or POLARSSL_ERR_PK_BAD_INPUT_DATA if the - * context wasn't already initialized as RSA_ALT. - * - * \note This function replaces \c pk_init_ctx() for RSA-alt. - */ -int pk_init_ctx_rsa_alt( pk_context *ctx, void * key, - pk_rsa_alt_decrypt_func decrypt_func, - pk_rsa_alt_sign_func sign_func, - pk_rsa_alt_key_len_func key_len_func ); - -/** - * \brief Get the size in bits of the underlying key - * - * \param ctx Context to use - * - * \return Key size in bits, or 0 on error - */ -size_t pk_get_size( const pk_context *ctx ); - -/** - * \brief Get the length in bytes of the underlying key - * \param ctx Context to use - * - * \return Key length in bytes, or 0 on error - */ -static inline size_t pk_get_len( const pk_context *ctx ) -{ - return( ( pk_get_size( ctx ) + 7 ) / 8 ); -} - -/** - * \brief Tell if a context can do the operation given by type - * - * \param ctx Context to test - * \param type Target type - * - * \return 0 if context can't do the operations, - * 1 otherwise. - */ -int pk_can_do( pk_context *ctx, pk_type_t type ); - -/** - * \brief Verify signature (including padding if relevant). - * - * \param ctx PK context to use - * \param md_alg Hash algorithm used (see notes) - * \param hash Hash of the message to sign - * \param hash_len Hash length or 0 (see notes) - * \param sig Signature to verify - * \param sig_len Signature length - * - * \return 0 on success (signature is valid), - * POLARSSL_ERR_PK_SIG_LEN_MISMATCH if the signature is - * valid but its actual length is less than sig_len, - * or a specific error code. - * - * \note For RSA keys, the default padding type is PKCS#1 v1.5. - * Use \c pk_verify_ext( POLARSSL_PK_RSASSA_PSS, ... ) - * to verify RSASSA_PSS signatures. - * - * \note If hash_len is 0, then the length associated with md_alg - * is used instead, or an error returned if it is invalid. - * - * \note md_alg may be POLARSSL_MD_NONE, only if hash_len != 0 - */ -int pk_verify( pk_context *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ); - -/** - * \brief Verify signature, with options. - * (Includes verification of the padding depending on type.) - * - * \param type Signature type (inc. possible padding type) to verify - * \param options Pointer to type-specific options, or NULL - * \param ctx PK context to use - * \param md_alg Hash algorithm used (see notes) - * \param hash Hash of the message to sign - * \param hash_len Hash length or 0 (see notes) - * \param sig Signature to verify - * \param sig_len Signature length - * - * \return 0 on success (signature is valid), - * POLARSSL_ERR_PK_TYPE_MISMATCH if the PK context can't be - * used for this type of signatures, - * POLARSSL_ERR_PK_SIG_LEN_MISMATCH if the signature is - * valid but its actual length is less than sig_len, - * or a specific error code. - * - * \note If hash_len is 0, then the length associated with md_alg - * is used instead, or an error returned if it is invalid. - * - * \note md_alg may be POLARSSL_MD_NONE, only if hash_len != 0 - * - * \note If type is POLARSSL_PK_RSASSA_PSS, then options must point - * to a pk_rsassa_pss_options structure, - * otherwise it must be NULL. - */ -int pk_verify_ext( pk_type_t type, const void *options, - pk_context *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ); - -/** - * \brief Make signature, including padding if relevant. - * - * \param ctx PK context to use - * \param md_alg Hash algorithm used (see notes) - * \param hash Hash of the message to sign - * \param hash_len Hash length or 0 (see notes) - * \param sig Place to write the signature - * \param sig_len Number of bytes written - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \return 0 on success, or a specific error code. - * - * \note For RSA keys, the default padding type is PKCS#1 v1.5. - * There is no interface in the PK module to make RSASSA-PSS - * signatures yet. - * - * \note If hash_len is 0, then the length associated with md_alg - * is used instead, or an error returned if it is invalid. - * - * \note md_alg may be POLARSSL_MD_NONE, only if hash_len != 0 - */ -int pk_sign( pk_context *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); - -/** - * \brief Decrypt message (including padding if relevant). - * - * \param ctx PK context to use - * \param input Input to decrypt - * \param ilen Input size - * \param output Decrypted output - * \param olen Decrypted message length - * \param osize Size of the output buffer - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \note For RSA keys, the default padding type is PKCS#1 v1.5. - * - * \return 0 on success, or a specific error code. - */ -int pk_decrypt( pk_context *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); - -/** - * \brief Encrypt message (including padding if relevant). - * - * \param ctx PK context to use - * \param input Message to encrypt - * \param ilen Message size - * \param output Encrypted output - * \param olen Encrypted output length - * \param osize Size of the output buffer - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \note For RSA keys, the default padding type is PKCS#1 v1.5. - * - * \return 0 on success, or a specific error code. - */ -int pk_encrypt( pk_context *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); - -/** - * \brief Export debug information - * - * \param ctx Context to use - * \param items Place to write debug items - * - * \return 0 on success or POLARSSL_ERR_PK_BAD_INPUT_DATA - */ -int pk_debug( const pk_context *ctx, pk_debug_item *items ); - -/** - * \brief Access the type name - * - * \param ctx Context to use - * - * \return Type name on success, or "invalid PK" - */ -const char * pk_get_name( const pk_context *ctx ); - -/** - * \brief Get the key type - * - * \param ctx Context to use - * - * \return Type on success, or POLARSSL_PK_NONE - */ -pk_type_t pk_get_type( const pk_context *ctx ); - -#if defined(POLARSSL_PK_PARSE_C) -/** \ingroup pk_module */ -/** - * \brief Parse a private key - * - * \param ctx key to be initialized - * \param key input buffer - * \param keylen size of the buffer - * \param pwd password for decryption (optional) - * \param pwdlen size of the password - * - * \note On entry, ctx must be empty, either freshly initialised - * with pk_init() or reset with pk_free(). If you need a - * specific key type, check the result with pk_can_do(). - * - * \note The key is also checked for correctness. - * - * \return 0 if successful, or a specific PK or PEM error code - */ -int pk_parse_key( pk_context *ctx, - const unsigned char *key, size_t keylen, - const unsigned char *pwd, size_t pwdlen ); - -/** \ingroup pk_module */ -/** - * \brief Parse a public key - * - * \param ctx key to be initialized - * \param key input buffer - * \param keylen size of the buffer - * - * \note On entry, ctx must be empty, either freshly initialised - * with pk_init() or reset with pk_free(). If you need a - * specific key type, check the result with pk_can_do(). - * - * \note The key is also checked for correctness. - * - * \return 0 if successful, or a specific PK or PEM error code - */ -int pk_parse_public_key( pk_context *ctx, - const unsigned char *key, size_t keylen ); - -#if defined(POLARSSL_FS_IO) -/** \ingroup pk_module */ -/** - * \brief Load and parse a private key - * - * \param ctx key to be initialized - * \param path filename to read the private key from - * \param password password to decrypt the file (can be NULL) - * - * \note On entry, ctx must be empty, either freshly initialised - * with pk_init() or reset with pk_free(). If you need a - * specific key type, check the result with pk_can_do(). - * - * \note The key is also checked for correctness. - * - * \return 0 if successful, or a specific PK or PEM error code - */ -int pk_parse_keyfile( pk_context *ctx, - const char *path, const char *password ); - -/** \ingroup pk_module */ -/** - * \brief Load and parse a public key - * - * \param ctx key to be initialized - * \param path filename to read the private key from - * - * \note On entry, ctx must be empty, either freshly initialised - * with pk_init() or reset with pk_free(). If you need a - * specific key type, check the result with pk_can_do(). - * - * \note The key is also checked for correctness. - * - * \return 0 if successful, or a specific PK or PEM error code - */ -int pk_parse_public_keyfile( pk_context *ctx, const char *path ); -#endif /* POLARSSL_FS_IO */ -#endif /* POLARSSL_PK_PARSE_C */ - -#if defined(POLARSSL_PK_WRITE_C) -/** - * \brief Write a private key to a PKCS#1 or SEC1 DER structure - * Note: data is written at the end of the buffer! Use the - * return value to determine where you should start - * using the buffer - * - * \param ctx private to write away - * \param buf buffer to write to - * \param size size of the buffer - * - * \return length of data written if successful, or a specific - * error code - */ -int pk_write_key_der( pk_context *ctx, unsigned char *buf, size_t size ); - -/** - * \brief Write a public key to a SubjectPublicKeyInfo DER structure - * Note: data is written at the end of the buffer! Use the - * return value to determine where you should start - * using the buffer - * - * \param ctx public key to write away - * \param buf buffer to write to - * \param size size of the buffer - * - * \return length of data written if successful, or a specific - * error code - */ -int pk_write_pubkey_der( pk_context *ctx, unsigned char *buf, size_t size ); - -#if defined(POLARSSL_PEM_WRITE_C) -/** - * \brief Write a public key to a PEM string - * - * \param ctx public key to write away - * \param buf buffer to write to - * \param size size of the buffer - * - * \return 0 successful, or a specific error code - */ -int pk_write_pubkey_pem( pk_context *ctx, unsigned char *buf, size_t size ); - -/** - * \brief Write a private key to a PKCS#1 or SEC1 PEM string - * - * \param ctx private to write away - * \param buf buffer to write to - * \param size size of the buffer - * - * \return 0 successful, or a specific error code - */ -int pk_write_key_pem( pk_context *ctx, unsigned char *buf, size_t size ); -#endif /* POLARSSL_PEM_WRITE_C */ -#endif /* POLARSSL_PK_WRITE_C */ - -/* - * WARNING: Low-level functions. You probably do not want to use these unless - * you are certain you do ;) - */ - -#if defined(POLARSSL_PK_PARSE_C) -/** - * \brief Parse a SubjectPublicKeyInfo DER structure - * - * \param p the position in the ASN.1 data - * \param end end of the buffer - * \param pk the key to fill - * - * \return 0 if successful, or a specific PK error code - */ -int pk_parse_subpubkey( unsigned char **p, const unsigned char *end, - pk_context *pk ); -#endif /* POLARSSL_PK_PARSE_C */ - -#if defined(POLARSSL_PK_WRITE_C) -/** - * \brief Write a subjectPublicKey to ASN.1 data - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param key public key to write away - * - * \return the length written or a negative error code - */ -int pk_write_pubkey( unsigned char **p, unsigned char *start, - const pk_context *key ); -#endif /* POLARSSL_PK_WRITE_C */ - -#ifdef __cplusplus -} -#endif - -#endif /* POLARSSL_PK_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pk_wrap.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pk_wrap.h deleted file mode 100644 index 7baafb9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pk_wrap.h +++ /dev/null @@ -1,63 +0,0 @@ -/** - * \file pk.h - * - * \brief Public Key abstraction layer: wrapper functions - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef POLARSSL_PK_WRAP_H -#define POLARSSL_PK_WRAP_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include "pk.h" - -/* Container for RSA-alt */ -typedef struct -{ - void *key; - pk_rsa_alt_decrypt_func decrypt_func; - pk_rsa_alt_sign_func sign_func; - pk_rsa_alt_key_len_func key_len_func; -} rsa_alt_context; - -#if defined(POLARSSL_RSA_C) -extern const pk_info_t rsa_info; -#endif - -#if defined(POLARSSL_ECP_C) -extern const pk_info_t eckey_info; -extern const pk_info_t eckeydh_info; -#endif - -#if defined(POLARSSL_ECDSA_C) -extern const pk_info_t ecdsa_info; -#endif - -extern const pk_info_t rsa_alt_info; - -#endif /* POLARSSL_PK_WRAP_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pkcs11.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pkcs11.h deleted file mode 100644 index 84f862d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pkcs11.h +++ /dev/null @@ -1,174 +0,0 @@ -/** - * \file pkcs11.h - * - * \brief Wrapper for PKCS#11 library libpkcs11-helper - * - * \author Adriaan de Jong - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_PKCS11_H -#define POLARSSL_PKCS11_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PKCS11_C) - -#include "x509_crt.h" - -#include - -#if defined(_MSC_VER) && !defined(inline) -#define inline _inline -#else -#if defined(__ARMCC_VERSION) && !defined(inline) -#define inline __inline -#endif /* __ARMCC_VERSION */ -#endif /*_MSC_VER */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Context for PKCS #11 private keys. - */ -typedef struct { - pkcs11h_certificate_t pkcs11h_cert; - int len; -} pkcs11_context; - -/** - * Fill in a PolarSSL certificate, based on the given PKCS11 helper certificate. - * - * \param cert X.509 certificate to fill - * \param pkcs11h_cert PKCS #11 helper certificate - * - * \return 0 on success. - */ -int pkcs11_x509_cert_init( x509_crt *cert, pkcs11h_certificate_t pkcs11h_cert ); - -/** - * Initialise a pkcs11_context, storing the given certificate. Note that the - * pkcs11_context will take over control of the certificate, freeing it when - * done. - * - * \param priv_key Private key structure to fill. - * \param pkcs11_cert PKCS #11 helper certificate - * - * \return 0 on success - */ -int pkcs11_priv_key_init( pkcs11_context *priv_key, - pkcs11h_certificate_t pkcs11_cert ); - -/** - * Free the contents of the given private key context. Note that the structure - * itself is not freed. - * - * \param priv_key Private key structure to cleanup - */ -void pkcs11_priv_key_free( pkcs11_context *priv_key ); - -/** - * \brief Do an RSA private key decrypt, then remove the message - * padding - * - * \param ctx PKCS #11 context - * \param mode must be RSA_PRIVATE, for compatibility with rsa.c's signature - * \param input buffer holding the encrypted data - * \param output buffer that will hold the plaintext - * \param olen will contain the plaintext length - * \param output_max_len maximum length of the output buffer - * - * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code - * - * \note The output buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise - * an error is thrown. - */ -int pkcs11_decrypt( pkcs11_context *ctx, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len ); - -/** - * \brief Do a private RSA to sign a message digest - * - * \param ctx PKCS #11 context - * \param mode must be RSA_PRIVATE, for compatibility with rsa.c's signature - * \param md_alg a POLARSSL_MD_* (use POLARSSL_MD_NONE for signing raw data) - * \param hashlen message digest length (for POLARSSL_MD_NONE only) - * \param hash buffer holding the message digest - * \param sig buffer that will hold the ciphertext - * - * \return 0 if the signing operation was successful, - * or an POLARSSL_ERR_RSA_XXX error code - * - * \note The "sig" buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used). - */ -int pkcs11_sign( pkcs11_context *ctx, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ); - -/** - * SSL/TLS wrappers for PKCS#11 functions - */ -static inline int ssl_pkcs11_decrypt( void *ctx, int mode, size_t *olen, - const unsigned char *input, unsigned char *output, - size_t output_max_len ) -{ - return pkcs11_decrypt( (pkcs11_context *) ctx, mode, olen, input, output, - output_max_len ); -} - -static inline int ssl_pkcs11_sign( void *ctx, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, - int mode, md_type_t md_alg, unsigned int hashlen, - const unsigned char *hash, unsigned char *sig ) -{ - ((void) f_rng); - ((void) p_rng); - return pkcs11_sign( (pkcs11_context *) ctx, mode, md_alg, - hashlen, hash, sig ); -} - -static inline size_t ssl_pkcs11_key_len( void *ctx ) -{ - return ( (pkcs11_context *) ctx )->len; -} - -#ifdef __cplusplus -} -#endif - -#endif /* POLARSSL_PKCS11_C */ - -#endif /* POLARSSL_PKCS11_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pkcs12.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pkcs12.h deleted file mode 100644 index 4bd5018..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pkcs12.h +++ /dev/null @@ -1,123 +0,0 @@ -/** - * \file pkcs12.h - * - * \brief PKCS#12 Personal Information Exchange Syntax - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_PKCS12_H -#define POLARSSL_PKCS12_H - -#include - -#include "md.h" -#include "cipher.h" -#include "asn1.h" - -#define POLARSSL_ERR_PKCS12_BAD_INPUT_DATA -0x1F80 /**< Bad input parameters to function. */ -#define POLARSSL_ERR_PKCS12_FEATURE_UNAVAILABLE -0x1F00 /**< Feature not available, e.g. unsupported encryption scheme. */ -#define POLARSSL_ERR_PKCS12_PBE_INVALID_FORMAT -0x1E80 /**< PBE ASN.1 data not as expected. */ -#define POLARSSL_ERR_PKCS12_PASSWORD_MISMATCH -0x1E00 /**< Given private key password does not allow for correct decryption. */ - -#define PKCS12_DERIVE_KEY 1 /**< encryption/decryption key */ -#define PKCS12_DERIVE_IV 2 /**< initialization vector */ -#define PKCS12_DERIVE_MAC_KEY 3 /**< integrity / MAC key */ - -#define PKCS12_PBE_DECRYPT 0 -#define PKCS12_PBE_ENCRYPT 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief PKCS12 Password Based function (encryption / decryption) - * for pbeWithSHAAnd128BitRC4 - * - * \param pbe_params an ASN1 buffer containing the pkcs-12PbeParams structure - * \param mode either PKCS12_PBE_ENCRYPT or PKCS12_PBE_DECRYPT - * \param pwd the password used (may be NULL if no password is used) - * \param pwdlen length of the password (may be 0) - * \param input the input data - * \param len data length - * \param output the output buffer - * - * \return 0 if successful, or a PolarSSL error code - */ -int pkcs12_pbe_sha1_rc4_128( asn1_buf *pbe_params, int mode, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *input, size_t len, - unsigned char *output ); - -/** - * \brief PKCS12 Password Based function (encryption / decryption) - * for cipher-based and md-based PBE's - * - * \param pbe_params an ASN1 buffer containing the pkcs-12PbeParams structure - * \param mode either PKCS12_PBE_ENCRYPT or PKCS12_PBE_DECRYPT - * \param cipher_type the cipher used - * \param md_type the md used - * \param pwd the password used (may be NULL if no password is used) - * \param pwdlen length of the password (may be 0) - * \param input the input data - * \param len data length - * \param output the output buffer - * - * \return 0 if successful, or a PolarSSL error code - */ -int pkcs12_pbe( asn1_buf *pbe_params, int mode, - cipher_type_t cipher_type, md_type_t md_type, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *input, size_t len, - unsigned char *output ); - -/** - * \brief The PKCS#12 derivation function uses a password and a salt - * to produce pseudo-random bits for a particular "purpose". - * - * Depending on the given id, this function can produce an - * encryption/decryption key, an nitialization vector or an - * integrity key. - * - * \param data buffer to store the derived data in - * \param datalen length to fill - * \param pwd password to use (may be NULL if no password is used) - * \param pwdlen length of the password (may be 0) - * \param salt salt buffer to use - * \param saltlen length of the salt - * \param md md type to use during the derivation - * \param id id that describes the purpose (can be PKCS12_DERIVE_KEY, - * PKCS12_DERIVE_IV or PKCS12_DERIVE_MAC_KEY) - * \param iterations number of iterations - * - * \return 0 if successful, or a MD, BIGNUM type error. - */ -int pkcs12_derivation( unsigned char *data, size_t datalen, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *salt, size_t saltlen, - md_type_t md, int id, int iterations ); - -#ifdef __cplusplus -} -#endif - -#endif /* pkcs12.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pkcs5.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pkcs5.h deleted file mode 100644 index 34e824b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/pkcs5.h +++ /dev/null @@ -1,104 +0,0 @@ -/** - * \file pkcs5.h - * - * \brief PKCS#5 functions - * - * \author Mathias Olsson - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_PKCS5_H -#define POLARSSL_PKCS5_H - -#include - -#include "asn1.h" -#include "md.h" - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#define POLARSSL_ERR_PKCS5_BAD_INPUT_DATA -0x3f80 /**< Bad input parameters to function. */ -#define POLARSSL_ERR_PKCS5_INVALID_FORMAT -0x3f00 /**< Unexpected ASN.1 data. */ -#define POLARSSL_ERR_PKCS5_FEATURE_UNAVAILABLE -0x3e80 /**< Requested encryption or digest alg not available. */ -#define POLARSSL_ERR_PKCS5_PASSWORD_MISMATCH -0x3e00 /**< Given private key password does not allow for correct decryption. */ - -#define PKCS5_DECRYPT 0 -#define PKCS5_ENCRYPT 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief PKCS#5 PBES2 function - * - * \param pbe_params the ASN.1 algorithm parameters - * \param mode either PKCS5_DECRYPT or PKCS5_ENCRYPT - * \param pwd password to use when generating key - * \param pwdlen length of password - * \param data data to process - * \param datalen length of data - * \param output output buffer - * - * \returns 0 on success, or a PolarSSL error code if verification fails. - */ -int pkcs5_pbes2( asn1_buf *pbe_params, int mode, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *data, size_t datalen, - unsigned char *output ); - -/** - * \brief PKCS#5 PBKDF2 using HMAC - * - * \param ctx Generic HMAC context - * \param password Password to use when generating key - * \param plen Length of password - * \param salt Salt to use when generating key - * \param slen Length of salt - * \param iteration_count Iteration count - * \param key_length Length of generated key - * \param output Generated key. Must be at least as big as key_length - * - * \returns 0 on success, or a PolarSSL error code if verification fails. - */ -int pkcs5_pbkdf2_hmac( md_context_t *ctx, const unsigned char *password, - size_t plen, const unsigned char *salt, size_t slen, - unsigned int iteration_count, - uint32_t key_length, unsigned char *output ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int pkcs5_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* pkcs5.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/platform.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/platform.h deleted file mode 100644 index 61734a0..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/platform.h +++ /dev/null @@ -1,130 +0,0 @@ -/** - * \file platform.h - * - * \brief PolarSSL Platform abstraction layer - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_PLATFORM_H -#define POLARSSL_PLATFORM_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#ifdef __cplusplus -extern "C" { -#endif -#ifdef CONFIG_PLATFORM_8195A -#include "rom_ssl_ram_map.h" -#endif -/** - * \name SECTION: Module settings - * - * The configuration options you can set for this module are in this section. - * Either change them in config.h or define them on the compiler command line. - * \{ - */ - -#if !defined(POLARSSL_PLATFORM_NO_STD_FUNCTIONS) -#include -#if !defined(POLARSSL_PLATFORM_STD_PRINTF) -#define POLARSSL_PLATFORM_STD_PRINTF printf /**< Default printf to use */ -#endif -#if !defined(POLARSSL_PLATFORM_STD_FPRINTF) -#define POLARSSL_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use */ -#endif -#if !defined(POLARSSL_PLATFORM_STD_MALLOC) -#define POLARSSL_PLATFORM_STD_MALLOC malloc /**< Default allocator to use */ -#endif -#if !defined(POLARSSL_PLATFORM_STD_FREE) -#define POLARSSL_PLATFORM_STD_FREE free /**< Default free to use */ -#endif -#else /* POLARSSL_PLATFORM_NO_STD_FUNCTIONS */ -#if defined(POLARSSL_PLATFORM_STD_MEM_HDR) -#include POLARSSL_PLATFORM_STD_MEM_HDR -#endif -#endif /* POLARSSL_PLATFORM_NO_STD_FUNCTIONS */ - -/* \} name SECTION: Module settings */ - -/* - * The function pointers for malloc and free - */ -#if defined(POLARSSL_PLATFORM_MEMORY) -extern void * (*polarssl_malloc)( size_t len ); -extern void (*polarssl_free)( void *ptr ); - -/** - * \brief Set your own memory implementation function pointers - * - * \param malloc_func the malloc function implementation - * \param free_func the free function implementation - * - * \return 0 if successful - */ -int platform_set_malloc_free( void * (*malloc_func)( size_t ), - void (*free_func)( void * ) ); -#else /* POLARSSL_PLATFORM_ENTROPY */ -#define polarssl_malloc rom_ssl_ram_map.ssl_malloc -#define polarssl_free rom_ssl_ram_map.ssl_free -#endif /* POLARSSL_PLATFORM_ENTROPY */ - -/* - * The function pointers for printf - */ -#if defined(POLARSSL_PLATFORM_PRINTF_ALT) -extern int (*polarssl_printf)( const char *format, ... ); - -/** - * \brief Set your own printf function pointer - * - * \param printf_func the printf function implementation - * - * \return 0 - */ -int platform_set_printf( int (*printf_func)( const char *, ... ) ); -#else /* POLARSSL_PLATFORM_PRINTF_ALT */ -#define polarssl_printf rom_ssl_ram_map.ssl_printf -#endif /* POLARSSL_PLATFORM_PRINTF_ALT */ - -/* - * The function pointers for fprintf - */ -#if defined(POLARSSL_PLATFORM_FPRINTF_ALT) -extern int (*polarssl_fprintf)( FILE *stream, const char *format, ... ); - -int platform_set_fprintf( int (*fprintf_func)( FILE *stream, const char *, - ... ) ); -#else -#define polarssl_fprintf fprintf -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* platform.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ripemd160.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ripemd160.h deleted file mode 100644 index e3b66c9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ripemd160.h +++ /dev/null @@ -1,204 +0,0 @@ -/** - * \file ripemd160.h - * - * \brief RIPE MD-160 message digest - * - * Copyright (C) 2014-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_RIPEMD160_H -#define POLARSSL_RIPEMD160_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#define POLARSSL_ERR_RIPEMD160_FILE_IO_ERROR -0x007E /**< Read/write error in file. */ - -#if !defined(POLARSSL_RIPEMD160_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief RIPEMD-160 context structure - */ -typedef struct -{ - uint32_t total[2]; /*!< number of bytes processed */ - uint32_t state[5]; /*!< intermediate digest state */ - unsigned char buffer[64]; /*!< data block being processed */ - - unsigned char ipad[64]; /*!< HMAC: inner padding */ - unsigned char opad[64]; /*!< HMAC: outer padding */ -} -ripemd160_context; - -/** - * \brief Initialize RIPEMD-160 context - * - * \param ctx RIPEMD-160 context to be initialized - */ -void ripemd160_init( ripemd160_context *ctx ); - -/** - * \brief Clear RIPEMD-160 context - * - * \param ctx RIPEMD-160 context to be cleared - */ -void ripemd160_free( ripemd160_context *ctx ); - -/** - * \brief RIPEMD-160 context setup - * - * \param ctx context to be initialized - */ -void ripemd160_starts( ripemd160_context *ctx ); - -/** - * \brief RIPEMD-160 process buffer - * - * \param ctx RIPEMD-160 context - * \param input buffer holding the data - * \param ilen length of the input data - */ -void ripemd160_update( ripemd160_context *ctx, - const unsigned char *input, size_t ilen ); - -/** - * \brief RIPEMD-160 final digest - * - * \param ctx RIPEMD-160 context - * \param output RIPEMD-160 checksum result - */ -void ripemd160_finish( ripemd160_context *ctx, unsigned char output[20] ); - -/* Internal use */ -void ripemd160_process( ripemd160_context *ctx, const unsigned char data[64] ); - -#ifdef __cplusplus -} -#endif - -#else /* POLARSSL_RIPEMD160_ALT */ -#include "ripemd160.h" -#endif /* POLARSSL_RIPEMD160_ALT */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Output = RIPEMD-160( input buffer ) - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output RIPEMD-160 checksum result - */ -void ripemd160( const unsigned char *input, size_t ilen, - unsigned char output[20] ); - -#if defined(POLARSSL_FS_IO) -/** - * \brief Output = RIPEMD-160( file contents ) - * - * \param path input file name - * \param output RIPEMD-160 checksum result - * - * \return 0 if successful, or POLARSSL_ERR_RIPEMD160_FILE_IO_ERROR - */ -int ripemd160_file( const char *path, unsigned char output[20] ); -#endif /* POLARSSL_FS_IO */ - -/** - * \brief RIPEMD-160 HMAC context setup - * - * \param ctx HMAC context to be initialized - * \param key HMAC secret key - * \param keylen length of the HMAC key - */ -void ripemd160_hmac_starts( ripemd160_context *ctx, - const unsigned char *key, size_t keylen ); - -/** - * \brief RIPEMD-160 HMAC process buffer - * - * \param ctx HMAC context - * \param input buffer holding the data - * \param ilen length of the input data - */ -void ripemd160_hmac_update( ripemd160_context *ctx, - const unsigned char *input, size_t ilen ); - -/** - * \brief RIPEMD-160 HMAC final digest - * - * \param ctx HMAC context - * \param output RIPEMD-160 HMAC checksum result - */ -void ripemd160_hmac_finish( ripemd160_context *ctx, unsigned char output[20] ); - -/** - * \brief RIPEMD-160 HMAC context reset - * - * \param ctx HMAC context to be reset - */ -void ripemd160_hmac_reset( ripemd160_context *ctx ); - -/** - * \brief Output = HMAC-RIPEMD-160( hmac key, input buffer ) - * - * \param key HMAC secret key - * \param keylen length of the HMAC key - * \param input buffer holding the data - * \param ilen length of the input data - * \param output HMAC-RIPEMD-160 result - */ -void ripemd160_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[20] ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int ripemd160_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* ripemd160.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/rsa.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/rsa.h deleted file mode 100644 index c06c7d5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/rsa.h +++ /dev/null @@ -1,647 +0,0 @@ -/** - * \file rsa.h - * - * \brief The RSA public-key cryptosystem - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_RSA_H -#define POLARSSL_RSA_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include "bignum.h" -#include "md.h" - -#if defined(POLARSSL_THREADING_C) -#include "threading.h" -#endif - -/* - * RSA Error codes - */ -#define POLARSSL_ERR_RSA_BAD_INPUT_DATA -0x4080 /**< Bad input parameters to function. */ -#define POLARSSL_ERR_RSA_INVALID_PADDING -0x4100 /**< Input data contains invalid padding and is rejected. */ -#define POLARSSL_ERR_RSA_KEY_GEN_FAILED -0x4180 /**< Something failed during generation of a key. */ -#define POLARSSL_ERR_RSA_KEY_CHECK_FAILED -0x4200 /**< Key failed to pass the libraries validity check. */ -#define POLARSSL_ERR_RSA_PUBLIC_FAILED -0x4280 /**< The public key operation failed. */ -#define POLARSSL_ERR_RSA_PRIVATE_FAILED -0x4300 /**< The private key operation failed. */ -#define POLARSSL_ERR_RSA_VERIFY_FAILED -0x4380 /**< The PKCS#1 verification failed. */ -#define POLARSSL_ERR_RSA_OUTPUT_TOO_LARGE -0x4400 /**< The output buffer for decryption is not large enough. */ -#define POLARSSL_ERR_RSA_RNG_FAILED -0x4480 /**< The random generator failed to generate non-zeros. */ - -/* - * RSA constants - */ -#define RSA_PUBLIC 0 -#define RSA_PRIVATE 1 - -#define RSA_PKCS_V15 0 -#define RSA_PKCS_V21 1 - -#define RSA_SIGN 1 -#define RSA_CRYPT 2 - -#define RSA_SALT_LEN_ANY -1 - -/* - * The above constants may be used even if the RSA module is compile out, - * eg for alternative (PKCS#11) RSA implemenations in the PK layers. - */ -#if defined(POLARSSL_RSA_C) - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief RSA context structure - */ -typedef struct -{ - int ver; /*!< always 0 */ - size_t len; /*!< size(N) in chars */ - - mpi N; /*!< public modulus */ - mpi E; /*!< public exponent */ - - mpi D; /*!< private exponent */ - mpi P; /*!< 1st prime factor */ - mpi Q; /*!< 2nd prime factor */ - mpi DP; /*!< D % (P - 1) */ - mpi DQ; /*!< D % (Q - 1) */ - mpi QP; /*!< 1 / (Q % P) */ - - mpi RN; /*!< cached R^2 mod N */ - mpi RP; /*!< cached R^2 mod P */ - mpi RQ; /*!< cached R^2 mod Q */ - -#if !defined(POLARSSL_RSA_NO_CRT) - mpi Vi; /*!< cached blinding value */ - mpi Vf; /*!< cached un-blinding value */ -#endif - - int padding; /*!< RSA_PKCS_V15 for 1.5 padding and - RSA_PKCS_v21 for OAEP/PSS */ - int hash_id; /*!< Hash identifier of md_type_t as - specified in the md.h header file - for the EME-OAEP and EMSA-PSS - encoding */ -#if defined(POLARSSL_THREADING_C) - threading_mutex_t mutex; /*!< Thread-safety mutex */ -#endif -} -rsa_context; - -/** - * \brief Initialize an RSA context - * - * Note: Set padding to RSA_PKCS_V21 for the RSAES-OAEP - * encryption scheme and the RSASSA-PSS signature scheme. - * - * \param ctx RSA context to be initialized - * \param padding RSA_PKCS_V15 or RSA_PKCS_V21 - * \param hash_id RSA_PKCS_V21 hash identifier - * - * \note The hash_id parameter is actually ignored - * when using RSA_PKCS_V15 padding. - * - * \note Choice of padding mode is strictly enforced for private key - * operations, since there might be security concerns in - * mixing padding modes. For public key operations it's merely - * a default value, which can be overriden by calling specific - * rsa_rsaes_xxx or rsa_rsassa_xxx functions. - * - * \note The chosen hash is always used for OEAP encryption. - * For PSS signatures, it's always used for making signatures, - * but can be overriden (and always is, if set to - * POLARSSL_MD_NONE) for verifying them. - */ -void rsa_init( rsa_context *ctx, - int padding, - int hash_id); - -/** - * \brief Set padding for an already initialized RSA context - * See \c rsa_init() for details. - * - * \param ctx RSA context to be set - * \param padding RSA_PKCS_V15 or RSA_PKCS_V21 - * \param hash_id RSA_PKCS_V21 hash identifier - */ -void rsa_set_padding( rsa_context *ctx, int padding, int hash_id); - -/** - * \brief Generate an RSA keypair - * - * \param ctx RSA context that will hold the key - * \param f_rng RNG function - * \param p_rng RNG parameter - * \param nbits size of the public key in bits - * \param exponent public exponent (e.g., 65537) - * - * \note rsa_init() must be called beforehand to setup - * the RSA context. - * - * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code - */ -int rsa_gen_key( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - unsigned int nbits, int exponent ); - -/** - * \brief Check a public RSA key - * - * \param ctx RSA context to be checked - * - * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code - */ -int rsa_check_pubkey( const rsa_context *ctx ); - -/** - * \brief Check a private RSA key - * - * \param ctx RSA context to be checked - * - * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code - */ -int rsa_check_privkey( const rsa_context *ctx ); - -/** - * \brief Do an RSA public key operation - * - * \param ctx RSA context - * \param input input buffer - * \param output output buffer - * - * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code - * - * \note This function does NOT take care of message - * padding. Also, be sure to set input[0] = 0 or assure that - * input is smaller than N. - * - * \note The input and output buffers must be large - * enough (eg. 128 bytes if RSA-1024 is used). - */ -int rsa_public( rsa_context *ctx, - const unsigned char *input, - unsigned char *output ); - -/** - * \brief Do an RSA private key operation - * - * \param ctx RSA context - * \param f_rng RNG function (Needed for blinding) - * \param p_rng RNG parameter - * \param input input buffer - * \param output output buffer - * - * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code - * - * \note The input and output buffers must be large - * enough (eg. 128 bytes if RSA-1024 is used). - */ -int rsa_private( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - const unsigned char *input, - unsigned char *output ); - -/** - * \brief Generic wrapper to perform a PKCS#1 encryption using the - * mode from the context. Add the message padding, then do an - * RSA operation. - * - * \param ctx RSA context - * \param f_rng RNG function (Needed for padding and PKCS#1 v2.1 encoding - * and RSA_PRIVATE) - * \param p_rng RNG parameter - * \param mode RSA_PUBLIC or RSA_PRIVATE - * \param ilen contains the plaintext length - * \param input buffer holding the data to be encrypted - * \param output buffer that will hold the ciphertext - * - * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code - * - * \note The output buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used). - */ -int rsa_pkcs1_encrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t ilen, - const unsigned char *input, - unsigned char *output ); - -/** - * \brief Perform a PKCS#1 v1.5 encryption (RSAES-PKCS1-v1_5-ENCRYPT) - * - * \param ctx RSA context - * \param f_rng RNG function (Needed for padding and RSA_PRIVATE) - * \param p_rng RNG parameter - * \param mode RSA_PUBLIC or RSA_PRIVATE - * \param ilen contains the plaintext length - * \param input buffer holding the data to be encrypted - * \param output buffer that will hold the ciphertext - * - * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code - * - * \note The output buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used). - */ -int rsa_rsaes_pkcs1_v15_encrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t ilen, - const unsigned char *input, - unsigned char *output ); - -/** - * \brief Perform a PKCS#1 v2.1 OAEP encryption (RSAES-OAEP-ENCRYPT) - * - * \param ctx RSA context - * \param f_rng RNG function (Needed for padding and PKCS#1 v2.1 encoding - * and RSA_PRIVATE) - * \param p_rng RNG parameter - * \param mode RSA_PUBLIC or RSA_PRIVATE - * \param label buffer holding the custom label to use - * \param label_len contains the label length - * \param ilen contains the plaintext length - * \param input buffer holding the data to be encrypted - * \param output buffer that will hold the ciphertext - * - * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code - * - * \note The output buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used). - */ -int rsa_rsaes_oaep_encrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - const unsigned char *label, size_t label_len, - size_t ilen, - const unsigned char *input, - unsigned char *output ); - -/** - * \brief Generic wrapper to perform a PKCS#1 decryption using the - * mode from the context. Do an RSA operation, then remove - * the message padding - * - * \param ctx RSA context - * \param f_rng RNG function (Only needed for RSA_PRIVATE) - * \param p_rng RNG parameter - * \param mode RSA_PUBLIC or RSA_PRIVATE - * \param olen will contain the plaintext length - * \param input buffer holding the encrypted data - * \param output buffer that will hold the plaintext - * \param output_max_len maximum length of the output buffer - * - * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code - * - * \note The output buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise - * an error is thrown. - */ -int rsa_pkcs1_decrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len ); - -/** - * \brief Perform a PKCS#1 v1.5 decryption (RSAES-PKCS1-v1_5-DECRYPT) - * - * \param ctx RSA context - * \param f_rng RNG function (Only needed for RSA_PRIVATE) - * \param p_rng RNG parameter - * \param mode RSA_PUBLIC or RSA_PRIVATE - * \param olen will contain the plaintext length - * \param input buffer holding the encrypted data - * \param output buffer that will hold the plaintext - * \param output_max_len maximum length of the output buffer - * - * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code - * - * \note The output buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise - * an error is thrown. - */ -int rsa_rsaes_pkcs1_v15_decrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len ); - -/** - * \brief Perform a PKCS#1 v2.1 OAEP decryption (RSAES-OAEP-DECRYPT) - * - * \param ctx RSA context - * \param f_rng RNG function (Only needed for RSA_PRIVATE) - * \param p_rng RNG parameter - * \param mode RSA_PUBLIC or RSA_PRIVATE - * \param label buffer holding the custom label to use - * \param label_len contains the label length - * \param olen will contain the plaintext length - * \param input buffer holding the encrypted data - * \param output buffer that will hold the plaintext - * \param output_max_len maximum length of the output buffer - * - * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code - * - * \note The output buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise - * an error is thrown. - */ -int rsa_rsaes_oaep_decrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - const unsigned char *label, size_t label_len, - size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len ); - -/** - * \brief Generic wrapper to perform a PKCS#1 signature using the - * mode from the context. Do a private RSA operation to sign - * a message digest - * - * \param ctx RSA context - * \param f_rng RNG function (Needed for PKCS#1 v2.1 encoding and for - * RSA_PRIVATE) - * \param p_rng RNG parameter - * \param mode RSA_PUBLIC or RSA_PRIVATE - * \param md_alg a POLARSSL_MD_* (use POLARSSL_MD_NONE for signing raw data) - * \param hashlen message digest length (for POLARSSL_MD_NONE only) - * \param hash buffer holding the message digest - * \param sig buffer that will hold the ciphertext - * - * \return 0 if the signing operation was successful, - * or an POLARSSL_ERR_RSA_XXX error code - * - * \note The "sig" buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used). - * - * \note In case of PKCS#1 v2.1 encoding, see comments on - * \note \c rsa_rsassa_pss_sign() for details on md_alg and hash_id. - */ -int rsa_pkcs1_sign( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ); - -/** - * \brief Perform a PKCS#1 v1.5 signature (RSASSA-PKCS1-v1_5-SIGN) - * - * \param ctx RSA context - * \param f_rng RNG function (Only needed for RSA_PRIVATE) - * \param p_rng RNG parameter - * \param mode RSA_PUBLIC or RSA_PRIVATE - * \param md_alg a POLARSSL_MD_* (use POLARSSL_MD_NONE for signing raw data) - * \param hashlen message digest length (for POLARSSL_MD_NONE only) - * \param hash buffer holding the message digest - * \param sig buffer that will hold the ciphertext - * - * \return 0 if the signing operation was successful, - * or an POLARSSL_ERR_RSA_XXX error code - * - * \note The "sig" buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used). - */ -int rsa_rsassa_pkcs1_v15_sign( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ); - -/** - * \brief Perform a PKCS#1 v2.1 PSS signature (RSASSA-PSS-SIGN) - * - * \param ctx RSA context - * \param f_rng RNG function (Needed for PKCS#1 v2.1 encoding and for - * RSA_PRIVATE) - * \param p_rng RNG parameter - * \param mode RSA_PUBLIC or RSA_PRIVATE - * \param md_alg a POLARSSL_MD_* (use POLARSSL_MD_NONE for signing raw data) - * \param hashlen message digest length (for POLARSSL_MD_NONE only) - * \param hash buffer holding the message digest - * \param sig buffer that will hold the ciphertext - * - * \return 0 if the signing operation was successful, - * or an POLARSSL_ERR_RSA_XXX error code - * - * \note The "sig" buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used). - * - * \note The hash_id in the RSA context is the one used for the - * encoding. md_alg in the function call is the type of hash - * that is encoded. According to RFC 3447 it is advised to - * keep both hashes the same. - */ -int rsa_rsassa_pss_sign( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ); - -/** - * \brief Generic wrapper to perform a PKCS#1 verification using the - * mode from the context. Do a public RSA operation and check - * the message digest - * - * \param ctx points to an RSA public key - * \param f_rng RNG function (Only needed for RSA_PRIVATE) - * \param p_rng RNG parameter - * \param mode RSA_PUBLIC or RSA_PRIVATE - * \param md_alg a POLARSSL_MD_* (use POLARSSL_MD_NONE for signing raw data) - * \param hashlen message digest length (for POLARSSL_MD_NONE only) - * \param hash buffer holding the message digest - * \param sig buffer holding the ciphertext - * - * \return 0 if the verify operation was successful, - * or an POLARSSL_ERR_RSA_XXX error code - * - * \note The "sig" buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used). - * - * \note In case of PKCS#1 v2.1 encoding, see comments on - * \c rsa_rsassa_pss_verify() about md_alg and hash_id. - */ -int rsa_pkcs1_verify( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ); - -/** - * \brief Perform a PKCS#1 v1.5 verification (RSASSA-PKCS1-v1_5-VERIFY) - * - * \param ctx points to an RSA public key - * \param f_rng RNG function (Only needed for RSA_PRIVATE) - * \param p_rng RNG parameter - * \param mode RSA_PUBLIC or RSA_PRIVATE - * \param md_alg a POLARSSL_MD_* (use POLARSSL_MD_NONE for signing raw data) - * \param hashlen message digest length (for POLARSSL_MD_NONE only) - * \param hash buffer holding the message digest - * \param sig buffer holding the ciphertext - * - * \return 0 if the verify operation was successful, - * or an POLARSSL_ERR_RSA_XXX error code - * - * \note The "sig" buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used). - */ -int rsa_rsassa_pkcs1_v15_verify( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ); - -/** - * \brief Perform a PKCS#1 v2.1 PSS verification (RSASSA-PSS-VERIFY) - * (This is the "simple" version.) - * - * \param ctx points to an RSA public key - * \param f_rng RNG function (Only needed for RSA_PRIVATE) - * \param p_rng RNG parameter - * \param mode RSA_PUBLIC or RSA_PRIVATE - * \param md_alg a POLARSSL_MD_* (use POLARSSL_MD_NONE for signing raw data) - * \param hashlen message digest length (for POLARSSL_MD_NONE only) - * \param hash buffer holding the message digest - * \param sig buffer holding the ciphertext - * - * \return 0 if the verify operation was successful, - * or an POLARSSL_ERR_RSA_XXX error code - * - * \note The "sig" buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used). - * - * \note The hash_id in the RSA context is the one used for the - * verification. md_alg in the function call is the type of - * hash that is verified. According to RFC 3447 it is advised to - * keep both hashes the same. If hash_id in the RSA context is - * unset, the md_alg from the function call is used. - */ -int rsa_rsassa_pss_verify( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ); - -/** - * \brief Perform a PKCS#1 v2.1 PSS verification (RSASSA-PSS-VERIFY) - * (This is the version with "full" options.) - * - * \param ctx points to an RSA public key - * \param f_rng RNG function (Only needed for RSA_PRIVATE) - * \param p_rng RNG parameter - * \param mode RSA_PUBLIC or RSA_PRIVATE - * \param md_alg a POLARSSL_MD_* (use POLARSSL_MD_NONE for signing raw data) - * \param hashlen message digest length (for POLARSSL_MD_NONE only) - * \param hash buffer holding the message digest - * \param mgf1_hash_id message digest used for mask generation - * \param expected_salt_len Length of the salt used in padding, use - * RSA_SALT_LEN_ANY to accept any salt length - * \param sig buffer holding the ciphertext - * - * \return 0 if the verify operation was successful, - * or an POLARSSL_ERR_RSA_XXX error code - * - * \note The "sig" buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used). - * - * \note The hash_id in the RSA context is ignored. - */ -int rsa_rsassa_pss_verify_ext( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - md_type_t mgf1_hash_id, - int expected_salt_len, - const unsigned char *sig ); - -/** - * \brief Copy the components of an RSA context - * - * \param dst Destination context - * \param src Source context - * - * \return O on success, - * POLARSSL_ERR_MPI_MALLOC_FAILED on memory allocation failure - */ -int rsa_copy( rsa_context *dst, const rsa_context *src ); - -/** - * \brief Free the components of an RSA key - * - * \param ctx RSA Context to free - */ -void rsa_free( rsa_context *ctx ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int rsa_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* POLARSSL_RSA_C */ - -#endif /* rsa.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/sha1.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/sha1.h deleted file mode 100644 index cb0c436..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/sha1.h +++ /dev/null @@ -1,200 +0,0 @@ -/** - * \file sha1.h - * - * \brief SHA-1 cryptographic hash function - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_SHA1_H -#define POLARSSL_SHA1_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#define POLARSSL_ERR_SHA1_FILE_IO_ERROR -0x0076 /**< Read/write error in file. */ - -#if !defined(POLARSSL_SHA1_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief SHA-1 context structure - */ -typedef struct -{ - uint32_t total[2]; /*!< number of bytes processed */ - uint32_t state[5]; /*!< intermediate digest state */ - unsigned char buffer[64]; /*!< data block being processed */ - - unsigned char ipad[64]; /*!< HMAC: inner padding */ - unsigned char opad[64]; /*!< HMAC: outer padding */ -} -sha1_context; - -/** - * \brief Initialize SHA-1 context - * - * \param ctx SHA-1 context to be initialized - */ -void sha1_init( sha1_context *ctx ); - -/** - * \brief Clear SHA-1 context - * - * \param ctx SHA-1 context to be cleared - */ -void sha1_free( sha1_context *ctx ); - -/** - * \brief SHA-1 context setup - * - * \param ctx context to be initialized - */ -void sha1_starts( sha1_context *ctx ); - -/** - * \brief SHA-1 process buffer - * - * \param ctx SHA-1 context - * \param input buffer holding the data - * \param ilen length of the input data - */ -void sha1_update( sha1_context *ctx, const unsigned char *input, size_t ilen ); - -/** - * \brief SHA-1 final digest - * - * \param ctx SHA-1 context - * \param output SHA-1 checksum result - */ -void sha1_finish( sha1_context *ctx, unsigned char output[20] ); - -/* Internal use */ -void sha1_process( sha1_context *ctx, const unsigned char data[64] ); - -#ifdef __cplusplus -} -#endif - -#else /* POLARSSL_SHA1_ALT */ -#include "sha1_alt.h" -#endif /* POLARSSL_SHA1_ALT */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Output = SHA-1( input buffer ) - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output SHA-1 checksum result - */ -void sha1( const unsigned char *input, size_t ilen, unsigned char output[20] ); - -/** - * \brief Output = SHA-1( file contents ) - * - * \param path input file name - * \param output SHA-1 checksum result - * - * \return 0 if successful, or POLARSSL_ERR_SHA1_FILE_IO_ERROR - */ -int sha1_file( const char *path, unsigned char output[20] ); - -/** - * \brief SHA-1 HMAC context setup - * - * \param ctx HMAC context to be initialized - * \param key HMAC secret key - * \param keylen length of the HMAC key - */ -void sha1_hmac_starts( sha1_context *ctx, const unsigned char *key, - size_t keylen ); - -/** - * \brief SHA-1 HMAC process buffer - * - * \param ctx HMAC context - * \param input buffer holding the data - * \param ilen length of the input data - */ -void sha1_hmac_update( sha1_context *ctx, const unsigned char *input, - size_t ilen ); - -/** - * \brief SHA-1 HMAC final digest - * - * \param ctx HMAC context - * \param output SHA-1 HMAC checksum result - */ -void sha1_hmac_finish( sha1_context *ctx, unsigned char output[20] ); - -/** - * \brief SHA-1 HMAC context reset - * - * \param ctx HMAC context to be reset - */ -void sha1_hmac_reset( sha1_context *ctx ); - -/** - * \brief Output = HMAC-SHA-1( hmac key, input buffer ) - * - * \param key HMAC secret key - * \param keylen length of the HMAC key - * \param input buffer holding the data - * \param ilen length of the input data - * \param output HMAC-SHA-1 result - */ -void sha1_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[20] ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int sha1_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* sha1.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/sha256.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/sha256.h deleted file mode 100644 index b143674..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/sha256.h +++ /dev/null @@ -1,208 +0,0 @@ -/** - * \file sha256.h - * - * \brief SHA-224 and SHA-256 cryptographic hash function - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_SHA256_H -#define POLARSSL_SHA256_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#define POLARSSL_ERR_SHA256_FILE_IO_ERROR -0x0078 /**< Read/write error in file. */ - -#if !defined(POLARSSL_SHA256_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief SHA-256 context structure - */ -typedef struct -{ - uint32_t total[2]; /*!< number of bytes processed */ - uint32_t state[8]; /*!< intermediate digest state */ - unsigned char buffer[64]; /*!< data block being processed */ - - unsigned char ipad[64]; /*!< HMAC: inner padding */ - unsigned char opad[64]; /*!< HMAC: outer padding */ - int is224; /*!< 0 => SHA-256, else SHA-224 */ -} -sha256_context; - -/** - * \brief Initialize SHA-256 context - * - * \param ctx SHA-256 context to be initialized - */ -void sha256_init( sha256_context *ctx ); - -/** - * \brief Clear SHA-256 context - * - * \param ctx SHA-256 context to be cleared - */ -void sha256_free( sha256_context *ctx ); - -/** - * \brief SHA-256 context setup - * - * \param ctx context to be initialized - * \param is224 0 = use SHA256, 1 = use SHA224 - */ -void sha256_starts( sha256_context *ctx, int is224 ); - -/** - * \brief SHA-256 process buffer - * - * \param ctx SHA-256 context - * \param input buffer holding the data - * \param ilen length of the input data - */ -void sha256_update( sha256_context *ctx, const unsigned char *input, - size_t ilen ); - -/** - * \brief SHA-256 final digest - * - * \param ctx SHA-256 context - * \param output SHA-224/256 checksum result - */ -void sha256_finish( sha256_context *ctx, unsigned char output[32] ); - -/* Internal use */ -void sha256_process( sha256_context *ctx, const unsigned char data[64] ); - -#ifdef __cplusplus -} -#endif - -#else /* POLARSSL_SHA256_ALT */ -#include "sha256_alt.h" -#endif /* POLARSSL_SHA256_ALT */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Output = SHA-256( input buffer ) - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output SHA-224/256 checksum result - * \param is224 0 = use SHA256, 1 = use SHA224 - */ -void sha256( const unsigned char *input, size_t ilen, - unsigned char output[32], int is224 ); - -/** - * \brief Output = SHA-256( file contents ) - * - * \param path input file name - * \param output SHA-224/256 checksum result - * \param is224 0 = use SHA256, 1 = use SHA224 - * - * \return 0 if successful, or POLARSSL_ERR_SHA256_FILE_IO_ERROR - */ -int sha256_file( const char *path, unsigned char output[32], int is224 ); - -/** - * \brief SHA-256 HMAC context setup - * - * \param ctx HMAC context to be initialized - * \param key HMAC secret key - * \param keylen length of the HMAC key - * \param is224 0 = use SHA256, 1 = use SHA224 - */ -void sha256_hmac_starts( sha256_context *ctx, const unsigned char *key, - size_t keylen, int is224 ); - -/** - * \brief SHA-256 HMAC process buffer - * - * \param ctx HMAC context - * \param input buffer holding the data - * \param ilen length of the input data - */ -void sha256_hmac_update( sha256_context *ctx, const unsigned char *input, - size_t ilen ); - -/** - * \brief SHA-256 HMAC final digest - * - * \param ctx HMAC context - * \param output SHA-224/256 HMAC checksum result - */ -void sha256_hmac_finish( sha256_context *ctx, unsigned char output[32] ); - -/** - * \brief SHA-256 HMAC context reset - * - * \param ctx HMAC context to be reset - */ -void sha256_hmac_reset( sha256_context *ctx ); - -/** - * \brief Output = HMAC-SHA-256( hmac key, input buffer ) - * - * \param key HMAC secret key - * \param keylen length of the HMAC key - * \param input buffer holding the data - * \param ilen length of the input data - * \param output HMAC-SHA-224/256 result - * \param is224 0 = use SHA256, 1 = use SHA224 - */ -void sha256_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[32], int is224 ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int sha256_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* sha256.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/sha512.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/sha512.h deleted file mode 100644 index dfbae4a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/sha512.h +++ /dev/null @@ -1,209 +0,0 @@ -/** - * \file sha512.h - * - * \brief SHA-384 and SHA-512 cryptographic hash function - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_SHA512_H -#define POLARSSL_SHA512_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#if defined(_MSC_VER) || defined(__WATCOMC__) - #define UL64(x) x##ui64 - typedef unsigned __int64 uint64_t; -#else - #include - #define UL64(x) x##ULL -#endif - -#define POLARSSL_ERR_SHA512_FILE_IO_ERROR -0x007A /**< Read/write error in file. */ - -#if !defined(POLARSSL_SHA512_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief SHA-512 context structure - */ -typedef struct -{ - uint64_t total[2]; /*!< number of bytes processed */ - uint64_t state[8]; /*!< intermediate digest state */ - unsigned char buffer[128]; /*!< data block being processed */ - - unsigned char ipad[128]; /*!< HMAC: inner padding */ - unsigned char opad[128]; /*!< HMAC: outer padding */ - int is384; /*!< 0 => SHA-512, else SHA-384 */ -} -sha512_context; - -/** - * \brief Initialize SHA-512 context - * - * \param ctx SHA-512 context to be initialized - */ -void sha512_init( sha512_context *ctx ); - -/** - * \brief Clear SHA-512 context - * - * \param ctx SHA-512 context to be cleared - */ -void sha512_free( sha512_context *ctx ); - -/** - * \brief SHA-512 context setup - * - * \param ctx context to be initialized - * \param is384 0 = use SHA512, 1 = use SHA384 - */ -void sha512_starts( sha512_context *ctx, int is384 ); - -/** - * \brief SHA-512 process buffer - * - * \param ctx SHA-512 context - * \param input buffer holding the data - * \param ilen length of the input data - */ -void sha512_update( sha512_context *ctx, const unsigned char *input, - size_t ilen ); - -/** - * \brief SHA-512 final digest - * - * \param ctx SHA-512 context - * \param output SHA-384/512 checksum result - */ -void sha512_finish( sha512_context *ctx, unsigned char output[64] ); - -#ifdef __cplusplus -} -#endif - -#else /* POLARSSL_SHA512_ALT */ -#include "sha512_alt.h" -#endif /* POLARSSL_SHA512_ALT */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Output = SHA-512( input buffer ) - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output SHA-384/512 checksum result - * \param is384 0 = use SHA512, 1 = use SHA384 - */ -void sha512( const unsigned char *input, size_t ilen, - unsigned char output[64], int is384 ); - -/** - * \brief Output = SHA-512( file contents ) - * - * \param path input file name - * \param output SHA-384/512 checksum result - * \param is384 0 = use SHA512, 1 = use SHA384 - * - * \return 0 if successful, or POLARSSL_ERR_SHA512_FILE_IO_ERROR - */ -int sha512_file( const char *path, unsigned char output[64], int is384 ); - -/** - * \brief SHA-512 HMAC context setup - * - * \param ctx HMAC context to be initialized - * \param is384 0 = use SHA512, 1 = use SHA384 - * \param key HMAC secret key - * \param keylen length of the HMAC key - */ -void sha512_hmac_starts( sha512_context *ctx, const unsigned char *key, - size_t keylen, int is384 ); - -/** - * \brief SHA-512 HMAC process buffer - * - * \param ctx HMAC context - * \param input buffer holding the data - * \param ilen length of the input data - */ -void sha512_hmac_update( sha512_context *ctx, const unsigned char *input, - size_t ilen ); - -/** - * \brief SHA-512 HMAC final digest - * - * \param ctx HMAC context - * \param output SHA-384/512 HMAC checksum result - */ -void sha512_hmac_finish( sha512_context *ctx, unsigned char output[64] ); - -/** - * \brief SHA-512 HMAC context reset - * - * \param ctx HMAC context to be reset - */ -void sha512_hmac_reset( sha512_context *ctx ); - -/** - * \brief Output = HMAC-SHA-512( hmac key, input buffer ) - * - * \param key HMAC secret key - * \param keylen length of the HMAC key - * \param input buffer holding the data - * \param ilen length of the input data - * \param output HMAC-SHA-384/512 result - * \param is384 0 = use SHA512, 1 = use SHA384 - */ -void sha512_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[64], int is384 ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int sha512_self_test( int verbose ); - -/* Internal use */ -void sha512_process( sha512_context *ctx, const unsigned char data[128] ); - -#ifdef __cplusplus -} -#endif - -#endif /* sha512.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ssl.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ssl.h deleted file mode 100644 index 39b8264..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ssl.h +++ /dev/null @@ -1,1816 +0,0 @@ -/** - * \file ssl.h - * - * \brief SSL/TLS functions. - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_SSL_H -#define POLARSSL_SSL_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif -#include "net.h" -#include "bignum.h" -#include "ecp.h" - -#include "ssl_ciphersuites.h" - -#if defined(POLARSSL_MD5_C) -#include "md5.h" -#endif - -#if defined(POLARSSL_SHA1_C) -#include "sha1.h" -#endif - -#if defined(POLARSSL_SHA256_C) -#include "sha256.h" -#endif - -#if defined(POLARSSL_SHA512_C) -#include "sha512.h" -#endif - -// for session tickets -#if defined(POLARSSL_AES_C) -#include "aes.h" -#endif - -#if defined(POLARSSL_X509_CRT_PARSE_C) -#include "x509_crt.h" -#include "x509_crl.h" -#endif - -#if defined(POLARSSL_DHM_C) -#include "dhm.h" -#endif - -#if defined(POLARSSL_ECDH_C) -#include "ecdh.h" -#endif - -#if defined(POLARSSL_ZLIB_SUPPORT) -#include "zlib.h" -#endif - -#if defined(POLARSSL_HAVE_TIME) -#include -#endif - -/* For convenience below and in programs */ -#if defined(POLARSSL_KEY_EXCHANGE_PSK_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) -#define POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED -#endif - -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) -#define POLARSSL_KEY_EXCHANGE__SOME__ECDHE_ENABLED -#endif - -#if defined(_MSC_VER) && !defined(inline) -#define inline _inline -#else -#if defined(__ARMCC_VERSION) && !defined(inline) -#define inline __inline -#endif /* __ARMCC_VERSION */ -#endif /*_MSC_VER */ - -/* - * SSL Error codes - */ -#define POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE -0x7080 /**< The requested feature is not available. */ -#define POLARSSL_ERR_SSL_BAD_INPUT_DATA -0x7100 /**< Bad input parameters to function. */ -#define POLARSSL_ERR_SSL_INVALID_MAC -0x7180 /**< Verification of the message MAC failed. */ -#define POLARSSL_ERR_SSL_INVALID_RECORD -0x7200 /**< An invalid SSL record was received. */ -#define POLARSSL_ERR_SSL_CONN_EOF -0x7280 /**< The connection indicated an EOF. */ -#define POLARSSL_ERR_SSL_UNKNOWN_CIPHER -0x7300 /**< An unknown cipher was received. */ -#define POLARSSL_ERR_SSL_NO_CIPHER_CHOSEN -0x7380 /**< The server has no ciphersuites in common with the client. */ -#define POLARSSL_ERR_SSL_NO_RNG -0x7400 /**< No RNG was provided to the SSL module. */ -#define POLARSSL_ERR_SSL_NO_CLIENT_CERTIFICATE -0x7480 /**< No client certification received from the client, but required by the authentication mode. */ -#define POLARSSL_ERR_SSL_CERTIFICATE_TOO_LARGE -0x7500 /**< Our own certificate(s) is/are too large to send in an SSL message.*/ -#define POLARSSL_ERR_SSL_CERTIFICATE_REQUIRED -0x7580 /**< The own certificate is not set, but needed by the server. */ -#define POLARSSL_ERR_SSL_PRIVATE_KEY_REQUIRED -0x7600 /**< The own private key or pre-shared key is not set, but needed. */ -#define POLARSSL_ERR_SSL_CA_CHAIN_REQUIRED -0x7680 /**< No CA Chain is set, but required to operate. */ -#define POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE -0x7700 /**< An unexpected message was received from our peer. */ -#define POLARSSL_ERR_SSL_FATAL_ALERT_MESSAGE -0x7780 /**< A fatal alert message was received from our peer. */ -#define POLARSSL_ERR_SSL_PEER_VERIFY_FAILED -0x7800 /**< Verification of our peer failed. */ -#define POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY -0x7880 /**< The peer notified us that the connection is going to be closed. */ -#define POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO -0x7900 /**< Processing of the ClientHello handshake message failed. */ -#define POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO -0x7980 /**< Processing of the ServerHello handshake message failed. */ -#define POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE -0x7A00 /**< Processing of the Certificate handshake message failed. */ -#define POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST -0x7A80 /**< Processing of the CertificateRequest handshake message failed. */ -#define POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE -0x7B00 /**< Processing of the ServerKeyExchange handshake message failed. */ -#define POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO_DONE -0x7B80 /**< Processing of the ServerHelloDone handshake message failed. */ -#define POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE -0x7C00 /**< Processing of the ClientKeyExchange handshake message failed. */ -#define POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP -0x7C80 /**< Processing of the ClientKeyExchange handshake message failed in DHM / ECDH Read Public. */ -#define POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS -0x7D00 /**< Processing of the ClientKeyExchange handshake message failed in DHM / ECDH Calculate Secret. */ -#define POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY -0x7D80 /**< Processing of the CertificateVerify handshake message failed. */ -#define POLARSSL_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC -0x7E00 /**< Processing of the ChangeCipherSpec handshake message failed. */ -#define POLARSSL_ERR_SSL_BAD_HS_FINISHED -0x7E80 /**< Processing of the Finished handshake message failed. */ -#define POLARSSL_ERR_SSL_MALLOC_FAILED -0x7F00 /**< Memory allocation failed */ -#define POLARSSL_ERR_SSL_HW_ACCEL_FAILED -0x7F80 /**< Hardware acceleration function returned with error */ -#define POLARSSL_ERR_SSL_HW_ACCEL_FALLTHROUGH -0x6F80 /**< Hardware acceleration function skipped / left alone data */ -#define POLARSSL_ERR_SSL_COMPRESSION_FAILED -0x6F00 /**< Processing of the compression / decompression failed */ -#define POLARSSL_ERR_SSL_BAD_HS_PROTOCOL_VERSION -0x6E80 /**< Handshake protocol not within min/max boundaries */ -#define POLARSSL_ERR_SSL_BAD_HS_NEW_SESSION_TICKET -0x6E00 /**< Processing of the NewSessionTicket handshake message failed. */ -#define POLARSSL_ERR_SSL_SESSION_TICKET_EXPIRED -0x6D80 /**< Session ticket has expired. */ -#define POLARSSL_ERR_SSL_PK_TYPE_MISMATCH -0x6D00 /**< Public key type mismatch (eg, asked for RSA key exchange and presented EC key) */ -#define POLARSSL_ERR_SSL_UNKNOWN_IDENTITY -0x6C80 /**< Unknown identity received (eg, PSK identity) */ -#define POLARSSL_ERR_SSL_INTERNAL_ERROR -0x6C00 /**< Internal error (eg, unexpected failure in lower-level module) */ -#define POLARSSL_ERR_SSL_COUNTER_WRAPPING -0x6B80 /**< A counter would wrap (eg, too many messages exchanged). */ - -/* - * Various constants - */ -#define SSL_MAJOR_VERSION_3 3 -#define SSL_MINOR_VERSION_0 0 /*!< SSL v3.0 */ -#define SSL_MINOR_VERSION_1 1 /*!< TLS v1.0 */ -#define SSL_MINOR_VERSION_2 2 /*!< TLS v1.1 */ -#define SSL_MINOR_VERSION_3 3 /*!< TLS v1.2 */ - -/* Determine minimum supported version */ -#define SSL_MIN_MAJOR_VERSION SSL_MAJOR_VERSION_3 - -#if defined(POLARSSL_SSL_PROTO_SSL3) -#define SSL_MIN_MINOR_VERSION SSL_MINOR_VERSION_0 -#else -#if defined(POLARSSL_SSL_PROTO_TLS1) -#define SSL_MIN_MINOR_VERSION SSL_MINOR_VERSION_1 -#else -#if defined(POLARSSL_SSL_PROTO_TLS1_1) -#define SSL_MIN_MINOR_VERSION SSL_MINOR_VERSION_2 -#else -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -#define SSL_MIN_MINOR_VERSION SSL_MINOR_VERSION_3 -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ -#endif /* POLARSSL_SSL_PROTO_TLS1_1 */ -#endif /* POLARSSL_SSL_PROTO_TLS1 */ -#endif /* POLARSSL_SSL_PROTO_SSL3 */ - -/* Determine maximum supported version */ -#define SSL_MAX_MAJOR_VERSION SSL_MAJOR_VERSION_3 - -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -#define SSL_MAX_MINOR_VERSION SSL_MINOR_VERSION_3 -#else -#if defined(POLARSSL_SSL_PROTO_TLS1_1) -#define SSL_MAX_MINOR_VERSION SSL_MINOR_VERSION_2 -#else -#if defined(POLARSSL_SSL_PROTO_TLS1) -#define SSL_MAX_MINOR_VERSION SSL_MINOR_VERSION_1 -#else -#if defined(POLARSSL_SSL_PROTO_SSL3) -#define SSL_MAX_MINOR_VERSION SSL_MINOR_VERSION_0 -#endif /* POLARSSL_SSL_PROTO_SSL3 */ -#endif /* POLARSSL_SSL_PROTO_TLS1 */ -#endif /* POLARSSL_SSL_PROTO_TLS1_1 */ -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - -/* RFC 6066 section 4, see also mfl_code_to_length in ssl_tls.c - * NONE must be zero so that memset()ing structure to zero works */ -#define SSL_MAX_FRAG_LEN_NONE 0 /*!< don't use this extension */ -#define SSL_MAX_FRAG_LEN_512 1 /*!< MaxFragmentLength 2^9 */ -#define SSL_MAX_FRAG_LEN_1024 2 /*!< MaxFragmentLength 2^10 */ -#define SSL_MAX_FRAG_LEN_2048 3 /*!< MaxFragmentLength 2^11 */ -#define SSL_MAX_FRAG_LEN_4096 4 /*!< MaxFragmentLength 2^12 */ -#define SSL_MAX_FRAG_LEN_INVALID 5 /*!< first invalid value */ - -#define SSL_IS_CLIENT 0 -#define SSL_IS_SERVER 1 -#define SSL_COMPRESS_NULL 0 -#define SSL_COMPRESS_DEFLATE 1 - -#define SSL_VERIFY_NONE 0 -#define SSL_VERIFY_OPTIONAL 1 -#define SSL_VERIFY_REQUIRED 2 - -#define SSL_INITIAL_HANDSHAKE 0 -#define SSL_RENEGOTIATION 1 /* In progress */ -#define SSL_RENEGOTIATION_DONE 2 /* Done */ -#define SSL_RENEGOTIATION_PENDING 3 /* Requested (server only) */ - -#define SSL_LEGACY_RENEGOTIATION 0 -#define SSL_SECURE_RENEGOTIATION 1 - -#define SSL_RENEGOTIATION_DISABLED 0 -#define SSL_RENEGOTIATION_ENABLED 1 - -#define SSL_RENEGOTIATION_NOT_ENFORCED -1 -#define SSL_RENEGO_MAX_RECORDS_DEFAULT 16 - -#define SSL_LEGACY_NO_RENEGOTIATION 0 -#define SSL_LEGACY_ALLOW_RENEGOTIATION 1 -#define SSL_LEGACY_BREAK_HANDSHAKE 2 - -#define SSL_TRUNC_HMAC_DISABLED 0 -#define SSL_TRUNC_HMAC_ENABLED 1 -#define SSL_TRUNCATED_HMAC_LEN 10 /* 80 bits, rfc 6066 section 7 */ - -#define SSL_SESSION_TICKETS_DISABLED 0 -#define SSL_SESSION_TICKETS_ENABLED 1 - -/** - * \name SECTION: Module settings - * - * The configuration options you can set for this module are in this section. - * Either change them in config.h or define them on the compiler command line. - * \{ - */ - -#if !defined(SSL_DEFAULT_TICKET_LIFETIME) -#define SSL_DEFAULT_TICKET_LIFETIME 86400 /**< Lifetime of session tickets (if enabled) */ -#endif - -/* - * Size of the input / output buffer. - * Note: the RFC defines the default size of SSL / TLS messages. If you - * change the value here, other clients / servers may not be able to - * communicate with you anymore. Only change this value if you control - * both sides of the connection and have it reduced at both sides, or - * if you're using the Max Fragment Length extension and you know all your - * peers are using it too! - */ -#if !defined(SSL_MAX_CONTENT_LEN) -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) -extern unsigned int mfl_code_to_length[]; // pvvx -#define SSL_MAX_CONTENT_LEN mfl_code_to_length[0] // default = 16384 (!) -#else -#define SSL_MAX_CONTENT_LEN 16384 /**< Size of the input / output buffer */ -#endif -#endif - -/* \} name SECTION: Module settings */ - -/* - * Allow extra bytes for record, authentication and encryption overhead: - * counter (8) + header (5) + IV(16) + MAC (16-48) + padding (0-256) - * and allow for a maximum of 1024 of compression expansion if - * enabled. - */ -#if defined(POLARSSL_ZLIB_SUPPORT) -#define SSL_COMPRESSION_ADD 1024 -#else -#define SSL_COMPRESSION_ADD 0 -#endif - -#if defined(POLARSSL_RC4_C) || defined(POLARSSL_CIPHER_MODE_CBC) -/* Ciphersuites using HMAC */ -#if defined(POLARSSL_SHA512_C) -#define SSL_MAC_ADD 48 /* SHA-384 used for HMAC */ -#elif defined(POLARSSL_SHA256_C) -#define SSL_MAC_ADD 32 /* SHA-256 used for HMAC */ -#else -#define SSL_MAC_ADD 20 /* SHA-1 used for HMAC */ -#endif -#else -/* AEAD ciphersuites: GCM and CCM use a 128 bits tag */ -#define SSL_MAC_ADD 16 -#endif - -#if defined(POLARSSL_CIPHER_MODE_CBC) -#define SSL_PADDING_ADD 256 -#else -#define SSL_PADDING_ADD 0 -#endif - -#define SSL_BUFFER_LEN (rom_ssl_ram_map.ssl_buffer_len) // pvvx -> int set_ssl_max_frag_len(int len) -/* - ( SSL_MAX_CONTENT_LEN \ - + SSL_COMPRESSION_ADD \ - + 29 // counter + header + IV \ - + SSL_MAC_ADD \ - + SSL_PADDING_ADD \ - ) -*/ -/* - * Signaling ciphersuite values (SCSV) - */ -#define SSL_EMPTY_RENEGOTIATION_INFO 0xFF /**< renegotiation info ext */ - -/* - * Supported Signature and Hash algorithms (For TLS 1.2) - * RFC 5246 section 7.4.1.4.1 - */ -#define SSL_HASH_NONE 0 -#define SSL_HASH_MD5 1 -#define SSL_HASH_SHA1 2 -#define SSL_HASH_SHA224 3 -#define SSL_HASH_SHA256 4 -#define SSL_HASH_SHA384 5 -#define SSL_HASH_SHA512 6 - -#define SSL_SIG_ANON 0 -#define SSL_SIG_RSA 1 -#define SSL_SIG_ECDSA 3 - -/* - * Client Certificate Types - * RFC 5246 section 7.4.4 plus RFC 4492 section 5.5 - */ -#define SSL_CERT_TYPE_RSA_SIGN 1 -#define SSL_CERT_TYPE_ECDSA_SIGN 64 - -/* - * Message, alert and handshake types - */ -#define SSL_MSG_CHANGE_CIPHER_SPEC 20 -#define SSL_MSG_ALERT 21 -#define SSL_MSG_HANDSHAKE 22 -#define SSL_MSG_APPLICATION_DATA 23 - -#define SSL_ALERT_LEVEL_WARNING 1 -#define SSL_ALERT_LEVEL_FATAL 2 - -#define SSL_ALERT_MSG_CLOSE_NOTIFY 0 /* 0x00 */ -#define SSL_ALERT_MSG_UNEXPECTED_MESSAGE 10 /* 0x0A */ -#define SSL_ALERT_MSG_BAD_RECORD_MAC 20 /* 0x14 */ -#define SSL_ALERT_MSG_DECRYPTION_FAILED 21 /* 0x15 */ -#define SSL_ALERT_MSG_RECORD_OVERFLOW 22 /* 0x16 */ -#define SSL_ALERT_MSG_DECOMPRESSION_FAILURE 30 /* 0x1E */ -#define SSL_ALERT_MSG_HANDSHAKE_FAILURE 40 /* 0x28 */ -#define SSL_ALERT_MSG_NO_CERT 41 /* 0x29 */ -#define SSL_ALERT_MSG_BAD_CERT 42 /* 0x2A */ -#define SSL_ALERT_MSG_UNSUPPORTED_CERT 43 /* 0x2B */ -#define SSL_ALERT_MSG_CERT_REVOKED 44 /* 0x2C */ -#define SSL_ALERT_MSG_CERT_EXPIRED 45 /* 0x2D */ -#define SSL_ALERT_MSG_CERT_UNKNOWN 46 /* 0x2E */ -#define SSL_ALERT_MSG_ILLEGAL_PARAMETER 47 /* 0x2F */ -#define SSL_ALERT_MSG_UNKNOWN_CA 48 /* 0x30 */ -#define SSL_ALERT_MSG_ACCESS_DENIED 49 /* 0x31 */ -#define SSL_ALERT_MSG_DECODE_ERROR 50 /* 0x32 */ -#define SSL_ALERT_MSG_DECRYPT_ERROR 51 /* 0x33 */ -#define SSL_ALERT_MSG_EXPORT_RESTRICTION 60 /* 0x3C */ -#define SSL_ALERT_MSG_PROTOCOL_VERSION 70 /* 0x46 */ -#define SSL_ALERT_MSG_INSUFFICIENT_SECURITY 71 /* 0x47 */ -#define SSL_ALERT_MSG_INTERNAL_ERROR 80 /* 0x50 */ -#define SSL_ALERT_MSG_USER_CANCELED 90 /* 0x5A */ -#define SSL_ALERT_MSG_NO_RENEGOTIATION 100 /* 0x64 */ -#define SSL_ALERT_MSG_UNSUPPORTED_EXT 110 /* 0x6E */ -#define SSL_ALERT_MSG_UNRECOGNIZED_NAME 112 /* 0x70 */ -#define SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY 115 /* 0x73 */ -#define SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL 120 /* 0x78 */ - -#define SSL_HS_HELLO_REQUEST 0 -#define SSL_HS_CLIENT_HELLO 1 -#define SSL_HS_SERVER_HELLO 2 -#define SSL_HS_NEW_SESSION_TICKET 4 -#define SSL_HS_CERTIFICATE 11 -#define SSL_HS_SERVER_KEY_EXCHANGE 12 -#define SSL_HS_CERTIFICATE_REQUEST 13 -#define SSL_HS_SERVER_HELLO_DONE 14 -#define SSL_HS_CERTIFICATE_VERIFY 15 -#define SSL_HS_CLIENT_KEY_EXCHANGE 16 -#define SSL_HS_FINISHED 20 - -/* - * TLS extensions - */ -#define TLS_EXT_SERVERNAME 0 -#define TLS_EXT_SERVERNAME_HOSTNAME 0 - -#define TLS_EXT_MAX_FRAGMENT_LENGTH 1 - -#define TLS_EXT_TRUNCATED_HMAC 4 - -#define TLS_EXT_SUPPORTED_ELLIPTIC_CURVES 10 -#define TLS_EXT_SUPPORTED_POINT_FORMATS 11 - -#define TLS_EXT_SIG_ALG 13 - -#define TLS_EXT_ALPN 16 - -#define TLS_EXT_SESSION_TICKET 35 - -#define TLS_EXT_RENEGOTIATION_INFO 0xFF01 - -/* - * TLS extension flags (for extensions with outgoing ServerHello content - * that need it (e.g. for RENEGOTIATION_INFO the server already knows because - * of state of the renegotiation flag, so no indicator is required) - */ -#define TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT (1 << 0) - -/* - * Size defines - */ -#if !defined(POLARSSL_PSK_MAX_LEN) -#define POLARSSL_PSK_MAX_LEN 32 /* 256 bits */ -#endif - -/* Dummy type used only for its size */ -union _ssl_premaster_secret -{ -#if defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) - unsigned char _pms_rsa[48]; /* RFC 5246 8.1.1 */ -#endif -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) - unsigned char _pms_dhm[POLARSSL_MPI_MAX_SIZE]; /* RFC 5246 8.1.2 */ -#endif -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - unsigned char _pms_ecdh[POLARSSL_ECP_MAX_BYTES]; /* RFC 4492 5.10 */ -#endif -#if defined(POLARSSL_KEY_EXCHANGE_PSK_ENABLED) - unsigned char _pms_psk[4 + 2 * POLARSSL_PSK_MAX_LEN]; /* RFC 4279 2 */ -#endif -#if defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) - unsigned char _pms_dhe_psk[4 + POLARSSL_MPI_MAX_SIZE - + POLARSSL_PSK_MAX_LEN]; /* RFC 4279 3 */ -#endif -#if defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) - unsigned char _pms_rsa_psk[52 + POLARSSL_PSK_MAX_LEN]; /* RFC 4279 4 */ -#endif -#if defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) - unsigned char _pms_ecdhe_psk[4 + POLARSSL_ECP_MAX_BYTES - + POLARSSL_PSK_MAX_LEN]; /* RFC 5489 2 */ -#endif -}; - -#define POLARSSL_PREMASTER_SIZE sizeof( union _ssl_premaster_secret ) - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Generic function pointers for allowing external RSA private key - * implementations. - */ -typedef int (*rsa_decrypt_func)( void *ctx, int mode, size_t *olen, - const unsigned char *input, unsigned char *output, - size_t output_max_len ); -typedef int (*rsa_sign_func)( void *ctx, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, - int mode, md_type_t md_alg, unsigned int hashlen, - const unsigned char *hash, unsigned char *sig ); -typedef size_t (*rsa_key_len_func)( void *ctx ); - -/* - * SSL state machine - */ -typedef enum -{ - SSL_HELLO_REQUEST, - SSL_CLIENT_HELLO, - SSL_SERVER_HELLO, - SSL_SERVER_CERTIFICATE, - SSL_SERVER_KEY_EXCHANGE, - SSL_CERTIFICATE_REQUEST, - SSL_SERVER_HELLO_DONE, - SSL_CLIENT_CERTIFICATE, - SSL_CLIENT_KEY_EXCHANGE, - SSL_CERTIFICATE_VERIFY, - SSL_CLIENT_CHANGE_CIPHER_SPEC, - SSL_CLIENT_FINISHED, - SSL_SERVER_CHANGE_CIPHER_SPEC, - SSL_SERVER_FINISHED, - SSL_FLUSH_BUFFERS, - SSL_HANDSHAKE_WRAPUP, - SSL_HANDSHAKE_OVER, - SSL_SERVER_NEW_SESSION_TICKET, -} -ssl_states; - -typedef struct _ssl_session ssl_session; -typedef struct _ssl_context ssl_context; -typedef struct _ssl_transform ssl_transform; -typedef struct _ssl_handshake_params ssl_handshake_params; -#if defined(POLARSSL_SSL_SESSION_TICKETS) -typedef struct _ssl_ticket_keys ssl_ticket_keys; -#endif -#if defined(POLARSSL_X509_CRT_PARSE_C) -typedef struct _ssl_key_cert ssl_key_cert; -#endif - -/* - * This structure is used for storing current session data. - */ -struct _ssl_session -{ -#if defined(POLARSSL_HAVE_TIME) - time_t start; /*!< starting time */ -#endif - int ciphersuite; /*!< chosen ciphersuite */ - int compression; /*!< chosen compression */ - size_t length; /*!< session id length */ - unsigned char id[32]; /*!< session identifier */ - unsigned char master[48]; /*!< the master secret */ - -#if defined(POLARSSL_X509_CRT_PARSE_C) - x509_crt *peer_cert; /*!< peer X.509 cert chain */ -#endif /* POLARSSL_X509_CRT_PARSE_C */ - int verify_result; /*!< verification result */ - -#if defined(POLARSSL_SSL_SESSION_TICKETS) - unsigned char *ticket; /*!< RFC 5077 session ticket */ - size_t ticket_len; /*!< session ticket length */ - uint32_t ticket_lifetime; /*!< ticket lifetime hint */ -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) - unsigned char mfl_code; /*!< MaxFragmentLength negotiated by peer */ -#endif /* POLARSSL_SSL_MAX_FRAGMENT_LENGTH */ - -#if defined(POLARSSL_SSL_TRUNCATED_HMAC) - int trunc_hmac; /*!< flag for truncated hmac activation */ -#endif /* POLARSSL_SSL_TRUNCATED_HMAC */ -}; - -/* - * This structure contains a full set of runtime transform parameters - * either in negotiation or active. - */ -struct _ssl_transform -{ - /* - * Session specific crypto layer - */ - const ssl_ciphersuite_t *ciphersuite_info; - /*!< Chosen cipersuite_info */ - unsigned int keylen; /*!< symmetric key length */ - size_t minlen; /*!< min. ciphertext length */ - size_t ivlen; /*!< IV length */ - size_t fixed_ivlen; /*!< Fixed part of IV (AEAD) */ - size_t maclen; /*!< MAC length */ - - unsigned char iv_enc[16]; /*!< IV (encryption) */ - unsigned char iv_dec[16]; /*!< IV (decryption) */ - -#if defined(POLARSSL_SSL_PROTO_SSL3) - /* Needed only for SSL v3.0 secret */ - unsigned char mac_enc[48]; /*!< SSL v3.0 secret (enc) */ - unsigned char mac_dec[48]; /*!< SSL v3.0 secret (dec) */ -#endif /* POLARSSL_SSL_PROTO_SSL3 */ - - md_context_t md_ctx_enc; /*!< MAC (encryption) */ - md_context_t md_ctx_dec; /*!< MAC (decryption) */ - - cipher_context_t cipher_ctx_enc; /*!< encryption context */ - cipher_context_t cipher_ctx_dec; /*!< decryption context */ - - /* - * Session specific compression layer - */ -#if defined(POLARSSL_ZLIB_SUPPORT) - z_stream ctx_deflate; /*!< compression context */ - z_stream ctx_inflate; /*!< decompression context */ -#endif -}; - -/* - * This structure contains the parameters only needed during handshake. - */ -struct _ssl_handshake_params -{ - /* - * Handshake specific crypto variables - */ - int sig_alg; /*!< Hash algorithm for signature */ - int cert_type; /*!< Requested cert type */ - int verify_sig_alg; /*!< Signature algorithm for verify */ -#if defined(POLARSSL_DHM_C) - dhm_context dhm_ctx; /*!< DHM key exchange */ -#endif -#if defined(POLARSSL_ECDH_C) - ecdh_context ecdh_ctx; /*!< ECDH key exchange */ -#endif -#if defined(POLARSSL_ECDH_C) || defined(POLARSSL_ECDSA_C) - const ecp_curve_info **curves; /*!< Supported elliptic curves */ -#endif -#if defined(POLARSSL_X509_CRT_PARSE_C) - /** - * Current key/cert or key/cert list. - * On client: pointer to ssl->key_cert, only the first entry used. - * On server: starts as a pointer to ssl->key_cert, then becomes - * a pointer to the chosen key from this list or the SNI list. - */ - ssl_key_cert *key_cert; -#if defined(POLARSSL_SSL_SERVER_NAME_INDICATION) - ssl_key_cert *sni_key_cert; /*!< key/cert list from SNI */ -#endif -#endif /* POLARSSL_X509_CRT_PARSE_C */ - - /* - * Checksum contexts - */ -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_1) - md5_context fin_md5; - sha1_context fin_sha1; -#endif -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -#if defined(POLARSSL_SHA256_C) - sha256_context fin_sha256; -#endif -#if defined(POLARSSL_SHA512_C) - sha512_context fin_sha512; -#endif -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - - void (*update_checksum)(ssl_context *, const unsigned char *, size_t); - void (*calc_verify)(ssl_context *, unsigned char *); - void (*calc_finished)(ssl_context *, unsigned char *, int); - int (*tls_prf)(const unsigned char *, size_t, const char *, - const unsigned char *, size_t, - unsigned char *, size_t); - - size_t pmslen; /*!< premaster length */ - - unsigned char randbytes[64]; /*!< random bytes */ - unsigned char premaster[POLARSSL_PREMASTER_SIZE]; - /*!< premaster secret */ - - int resume; /*!< session resume indicator*/ - int max_major_ver; /*!< max. major version client*/ - int max_minor_ver; /*!< max. minor version client*/ - int cli_exts; /*!< client extension presence*/ - -#if defined(POLARSSL_SSL_SESSION_TICKETS) - int new_session_ticket; /*!< use NewSessionTicket? */ -#endif /* POLARSSL_SSL_SESSION_TICKETS */ -}; - -#if defined(POLARSSL_SSL_SESSION_TICKETS) -/* - * Parameters needed to secure session tickets - */ -struct _ssl_ticket_keys -{ - unsigned char key_name[16]; /*!< name to quickly discard bad tickets */ - aes_context enc; /*!< encryption context */ - aes_context dec; /*!< decryption context */ - unsigned char mac_key[16]; /*!< authentication key */ -}; -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - -#if defined(POLARSSL_X509_CRT_PARSE_C) -/* - * List of certificate + private key pairs - */ -struct _ssl_key_cert -{ - x509_crt *cert; /*!< cert */ - pk_context *key; /*!< private key */ - int key_own_alloc; /*!< did we allocate key? */ - ssl_key_cert *next; /*!< next key/cert pair */ -}; -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -struct _ssl_context -{ - /* - * Miscellaneous - */ - int state; /*!< SSL handshake: current state */ - int renegotiation; /*!< Initial or renegotiation */ - int renego_records_seen; /*!< Records since renego request */ - - int major_ver; /*!< equal to SSL_MAJOR_VERSION_3 */ - int minor_ver; /*!< either 0 (SSL3) or 1 (TLS1.0) */ - - int max_major_ver; /*!< max. major version used */ - int max_minor_ver; /*!< max. minor version used */ - int min_major_ver; /*!< min. major version used */ - int min_minor_ver; /*!< min. minor version used */ - - /* - * Callbacks (RNG, debug, I/O, verification) - */ - int (*f_rng)(void *, unsigned char *, size_t); - void (*f_dbg)(void *, int, const char *); - int (*f_recv)(void *, unsigned char *, size_t); - int (*f_send)(void *, const unsigned char *, size_t); - int (*f_get_cache)(void *, ssl_session *); - int (*f_set_cache)(void *, const ssl_session *); - - void *p_rng; /*!< context for the RNG function */ - void *p_dbg; /*!< context for the debug function */ - void *p_recv; /*!< context for reading operations */ - void *p_send; /*!< context for writing operations */ - void *p_get_cache; /*!< context for cache retrieval */ - void *p_set_cache; /*!< context for cache store */ - void *p_hw_data; /*!< context for HW acceleration */ - -#if defined(POLARSSL_SSL_SERVER_NAME_INDICATION) - int (*f_sni)(void *, ssl_context *, const unsigned char *, size_t); - void *p_sni; /*!< context for SNI extension */ -#endif - -#if defined(POLARSSL_X509_CRT_PARSE_C) - int (*f_vrfy)(void *, x509_crt *, int, int *); - void *p_vrfy; /*!< context for verification */ -#endif - -#if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED) - int (*f_psk)(void *, ssl_context *, const unsigned char *, size_t); - void *p_psk; /*!< context for PSK retrieval */ -#endif - - /* - * Session layer - */ - ssl_session *session_in; /*!< current session data (in) */ - ssl_session *session_out; /*!< current session data (out) */ - ssl_session *session; /*!< negotiated session data */ - ssl_session *session_negotiate; /*!< session data in negotiation */ - - ssl_handshake_params *handshake; /*!< params required only during - the handshake process */ - - /* - * Record layer transformations - */ - ssl_transform *transform_in; /*!< current transform params (in) */ - ssl_transform *transform_out; /*!< current transform params (in) */ - ssl_transform *transform; /*!< negotiated transform params */ - ssl_transform *transform_negotiate; /*!< transform params in negotiation */ - - /* - * Record layer (incoming data) - */ - unsigned char *in_ctr; /*!< 64-bit incoming message counter */ - unsigned char *in_hdr; /*!< 5-byte record header (in_ctr+8) */ - unsigned char *in_iv; /*!< ivlen-byte IV (in_hdr+5) */ - unsigned char *in_msg; /*!< message contents (in_iv+ivlen) */ - unsigned char *in_offt; /*!< read offset in application data */ - - int in_msgtype; /*!< record header: message type */ - size_t in_msglen; /*!< record header: message length */ - size_t in_left; /*!< amount of data read so far */ - - size_t in_hslen; /*!< current handshake message length */ - int nb_zero; /*!< # of 0-length encrypted messages */ - int record_read; /*!< record is already present */ - - /* - * Record layer (outgoing data) - */ - unsigned char *out_ctr; /*!< 64-bit outgoing message counter */ - unsigned char *out_hdr; /*!< 5-byte record header (out_ctr+8) */ - unsigned char *out_iv; /*!< ivlen-byte IV (out_hdr+5) */ - unsigned char *out_msg; /*!< message contents (out_iv+ivlen) */ - - int out_msgtype; /*!< record header: message type */ - size_t out_msglen; /*!< record header: message length */ - size_t out_left; /*!< amount of data not yet written */ - -#if defined(POLARSSL_ZLIB_SUPPORT) - unsigned char *compress_buf; /*!< zlib data buffer */ -#endif -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) - unsigned char mfl_code; /*!< MaxFragmentLength chosen by us */ -#endif /* POLARSSL_SSL_MAX_FRAGMENT_LENGTH */ - - /* - * PKI layer - */ -#if defined(POLARSSL_X509_CRT_PARSE_C) - ssl_key_cert *key_cert; /*!< own certificate(s)/key(s) */ - - x509_crt *ca_chain; /*!< own trusted CA chain */ - x509_crl *ca_crl; /*!< trusted CA CRLs */ - const char *peer_cn; /*!< expected peer CN */ -#endif /* POLARSSL_X509_CRT_PARSE_C */ - - /* - * Support for generating and checking session tickets - */ -#if defined(POLARSSL_SSL_SESSION_TICKETS) - ssl_ticket_keys *ticket_keys; /*!< keys for ticket encryption */ -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - - /* - * User settings - */ - int endpoint; /*!< 0: client, 1: server */ - int authmode; /*!< verification mode */ - int client_auth; /*!< flag for client auth. */ - int verify_result; /*!< verification result */ - int disable_renegotiation; /*!< enable/disable renegotiation */ - int allow_legacy_renegotiation; /*!< allow legacy renegotiation */ - int renego_max_records; /*!< grace period for renegotiation */ - const int *ciphersuite_list[4]; /*!< allowed ciphersuites / version */ -#if defined(POLARSSL_SSL_SET_CURVES) - const ecp_group_id *curve_list; /*!< allowed curves */ -#endif -#if defined(POLARSSL_SSL_TRUNCATED_HMAC) - int trunc_hmac; /*!< negotiate truncated hmac? */ -#endif -#if defined(POLARSSL_SSL_SESSION_TICKETS) - int session_tickets; /*!< use session tickets? */ - int ticket_lifetime; /*!< session ticket lifetime */ -#endif - -#if defined(POLARSSL_DHM_C) - mpi dhm_P; /*!< prime modulus for DHM */ - mpi dhm_G; /*!< generator for DHM */ -#endif - -#if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED) - /* - * PSK values - */ - unsigned char *psk; - size_t psk_len; - unsigned char *psk_identity; - size_t psk_identity_len; -#endif - -#if defined(POLARSSL_SSL_SERVER_NAME_INDICATION) - /* - * SNI extension - */ - unsigned char *hostname; - size_t hostname_len; -#endif - -#if defined(POLARSSL_SSL_ALPN) - /* - * ALPN extension - */ - const char **alpn_list; /*!< ordered list of supported protocols */ - const char *alpn_chosen; /*!< negotiated protocol */ -#endif - - /* - * Secure renegotiation - */ - int secure_renegotiation; /*!< does peer support legacy or - secure renegotiation */ - size_t verify_data_len; /*!< length of verify data stored */ - char own_verify_data[36]; /*!< previous handshake verify data */ - char peer_verify_data[36]; /*!< previous handshake verify data */ -}; - -#if defined(POLARSSL_SSL_HW_RECORD_ACCEL) - -#define SSL_CHANNEL_OUTBOUND 0 -#define SSL_CHANNEL_INBOUND 1 - -extern int (*ssl_hw_record_init)(ssl_context *ssl, - const unsigned char *key_enc, const unsigned char *key_dec, - size_t keylen, - const unsigned char *iv_enc, const unsigned char *iv_dec, - size_t ivlen, - const unsigned char *mac_enc, const unsigned char *mac_dec, - size_t maclen); -extern int (*ssl_hw_record_activate)(ssl_context *ssl, int direction); -extern int (*ssl_hw_record_reset)(ssl_context *ssl); -extern int (*ssl_hw_record_write)(ssl_context *ssl); -extern int (*ssl_hw_record_read)(ssl_context *ssl); -extern int (*ssl_hw_record_finish)(ssl_context *ssl); -#endif /* POLARSSL_SSL_HW_RECORD_ACCEL */ - -/** - * \brief Returns the list of ciphersuites supported by the SSL/TLS module. - * - * \return a statically allocated array of ciphersuites, the last - * entry is 0. - */ -const int *ssl_list_ciphersuites( void ); - -/** - * \brief Return the name of the ciphersuite associated with the - * given ID - * - * \param ciphersuite_id SSL ciphersuite ID - * - * \return a string containing the ciphersuite name - */ -const char *ssl_get_ciphersuite_name( const int ciphersuite_id ); - -/** - * \brief Return the ID of the ciphersuite associated with the - * given name - * - * \param ciphersuite_name SSL ciphersuite name - * - * \return the ID with the ciphersuite or 0 if not found - */ -int ssl_get_ciphersuite_id( const char *ciphersuite_name ); - -/** - * \brief Initialize an SSL context - * (An individual SSL context is not thread-safe) - * - * \param ssl SSL context - * - * \return 0 if successful, or POLARSSL_ERR_SSL_MALLOC_FAILED if - * memory allocation failed - */ -int ssl_init( ssl_context *ssl ); - -/** - * \brief Reset an already initialized SSL context for re-use - * while retaining application-set variables, function - * pointers and data. - * - * \param ssl SSL context - * \return 0 if successful, or POLASSL_ERR_SSL_MALLOC_FAILED, - POLARSSL_ERR_SSL_HW_ACCEL_FAILED or - * POLARSSL_ERR_SSL_COMPRESSION_FAILED - */ -int ssl_session_reset( ssl_context *ssl ); - -/** - * \brief Set the current endpoint type - * - * \param ssl SSL context - * \param endpoint must be SSL_IS_CLIENT or SSL_IS_SERVER - * - * \note This function should be called right after ssl_init() since - * some other ssl_set_foo() functions depend on it. - */ -void ssl_set_endpoint( ssl_context *ssl, int endpoint ); - -/** - * \brief Set the certificate verification mode - * - * \param ssl SSL context - * \param authmode can be: - * - * SSL_VERIFY_NONE: peer certificate is not checked (default), - * this is insecure and SHOULD be avoided. - * - * SSL_VERIFY_OPTIONAL: peer certificate is checked, however the - * handshake continues even if verification failed; - * ssl_get_verify_result() can be called after the - * handshake is complete. - * - * SSL_VERIFY_REQUIRED: peer *must* present a valid certificate, - * handshake is aborted if verification failed. - * - * \note On client, SSL_VERIFY_REQUIRED is the recommended mode. - * With SSL_VERIFY_OPTIONAL, the user needs to call ssl_get_verify_result() at - * the right time(s), which may not be obvious, while REQUIRED always perform - * the verification as soon as possible. For example, REQUIRED was protecting - * against the "triple handshake" attack even before it was found. - */ -void ssl_set_authmode( ssl_context *ssl, int authmode ); - -#if defined(POLARSSL_X509_CRT_PARSE_C) -/** - * \brief Set the verification callback (Optional). - * - * If set, the verify callback is called for each - * certificate in the chain. For implementation - * information, please see \c x509parse_verify() - * - * \param ssl SSL context - * \param f_vrfy verification function - * \param p_vrfy verification parameter - */ -void ssl_set_verify( ssl_context *ssl, - int (*f_vrfy)(void *, x509_crt *, int, int *), - void *p_vrfy ); -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -/** - * \brief Set the random number generator callback - * - * \param ssl SSL context - * \param f_rng RNG function - * \param p_rng RNG parameter - */ -void ssl_set_rng( ssl_context *ssl, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Set the debug callback - * - * \param ssl SSL context - * \param f_dbg debug function - * \param p_dbg debug parameter - */ -void ssl_set_dbg( ssl_context *ssl, - void (*f_dbg)(void *, int, const char *), - void *p_dbg ); - -/** - * \brief Set the underlying BIO read and write callbacks - * - * \param ssl SSL context - * \param f_recv read callback - * \param p_recv read parameter - * \param f_send write callback - * \param p_send write parameter - */ -void ssl_set_bio( ssl_context *ssl, - int (*f_recv)(void *, unsigned char *, size_t), void *p_recv, - int (*f_send)(void *, const unsigned char *, size_t), void *p_send ); - -/** - * \brief Set the session cache callbacks (server-side only) - * If not set, no session resuming is done. - * - * The session cache has the responsibility to check for stale - * entries based on timeout. See RFC 5246 for recommendations. - * - * Warning: session.peer_cert is cleared by the SSL/TLS layer on - * connection shutdown, so do not cache the pointer! Either set - * it to NULL or make a full copy of the certificate. - * - * The get callback is called once during the initial handshake - * to enable session resuming. The get function has the - * following parameters: (void *parameter, ssl_session *session) - * If a valid entry is found, it should fill the master of - * the session object with the cached values and return 0, - * return 1 otherwise. Optionally peer_cert can be set as well - * if it is properly present in cache entry. - * - * The set callback is called once during the initial handshake - * to enable session resuming after the entire handshake has - * been finished. The set function has the following parameters: - * (void *parameter, const ssl_session *session). The function - * should create a cache entry for future retrieval based on - * the data in the session structure and should keep in mind - * that the ssl_session object presented (and all its referenced - * data) is cleared by the SSL/TLS layer when the connection is - * terminated. It is recommended to add metadata to determine if - * an entry is still valid in the future. Return 0 if - * successfully cached, return 1 otherwise. - * - * \param ssl SSL context - * \param f_get_cache session get callback - * \param p_get_cache session get parameter - * \param f_set_cache session set callback - * \param p_set_cache session set parameter - */ -void ssl_set_session_cache( ssl_context *ssl, - int (*f_get_cache)(void *, ssl_session *), void *p_get_cache, - int (*f_set_cache)(void *, const ssl_session *), void *p_set_cache ); - -/** - * \brief Request resumption of session (client-side only) - * Session data is copied from presented session structure. - * - * \param ssl SSL context - * \param session session context - * - * \return 0 if successful, - * POLARSSL_ERR_SSL_MALLOC_FAILED if memory allocation failed, - * POLARSSL_ERR_SSL_BAD_INPUT_DATA if used server-side or - * arguments are otherwise invalid - * - * \sa ssl_get_session() - */ -int ssl_set_session( ssl_context *ssl, const ssl_session *session ); - -/** - * \brief Set the list of allowed ciphersuites and the preference - * order. First in the list has the highest preference. - * (Overrides all version specific lists) - * - * Note: The PolarSSL SSL server uses its own preferences - * over the preference of the connection SSL client unless - * POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE is defined! - * - * \param ssl SSL context - * \param ciphersuites 0-terminated list of allowed ciphersuites - */ -void ssl_set_ciphersuites( ssl_context *ssl, const int *ciphersuites ); - -/** - * \brief Set the list of allowed ciphersuites and the - * preference order for a specific version of the protocol. - * (Only useful on the server side) - * - * \param ssl SSL context - * \param ciphersuites 0-terminated list of allowed ciphersuites - * \param major Major version number (only SSL_MAJOR_VERSION_3 - * supported) - * \param minor Minor version number (SSL_MINOR_VERSION_0, - * SSL_MINOR_VERSION_1 and SSL_MINOR_VERSION_2, - * SSL_MINOR_VERSION_3 supported) - */ -void ssl_set_ciphersuites_for_version( ssl_context *ssl, - const int *ciphersuites, - int major, int minor ); - -#if defined(POLARSSL_X509_CRT_PARSE_C) -/** - * \brief Set the data required to verify peer certificate - * - * \param ssl SSL context - * \param ca_chain trusted CA chain (meaning all fully trusted top-level CAs) - * \param ca_crl trusted CA CRLs - * \param peer_cn expected peer CommonName (or NULL) - */ -void ssl_set_ca_chain( ssl_context *ssl, x509_crt *ca_chain, - x509_crl *ca_crl, const char *peer_cn ); - -/** - * \brief Set own certificate chain and private key - * - * \note own_cert should contain in order from the bottom up your - * certificate chain. The top certificate (self-signed) - * can be omitted. - * - * \note This function may be called more than once if you want to - * support multiple certificates (eg, one using RSA and one - * using ECDSA). However, on client, currently only the first - * certificate is used (subsequent calls have no effect). - * - * \param ssl SSL context - * \param own_cert own public certificate chain - * \param pk_key own private key - * - * \return 0 on success or POLARSSL_ERR_SSL_MALLOC_FAILED - */ -int ssl_set_own_cert( ssl_context *ssl, x509_crt *own_cert, - pk_context *pk_key ); - -#if defined(POLARSSL_RSA_C) -/** - * \brief Set own certificate chain and private RSA key - * - * Note: own_cert should contain IN order from the bottom - * up your certificate chain. The top certificate (self-signed) - * can be omitted. - * - * \warning This backwards-compatibility function is deprecated! - * Please use \c ssl_set_own_cert() instead. - * - * \param ssl SSL context - * \param own_cert own public certificate chain - * \param rsa_key own private RSA key - * - * \return 0 on success, or a specific error code. - */ -int ssl_set_own_cert_rsa( ssl_context *ssl, x509_crt *own_cert, - rsa_context *rsa_key ); -#endif /* POLARSSL_RSA_C */ - -/** - * \brief Set own certificate and alternate non-PolarSSL RSA private - * key and handling callbacks, such as the PKCS#11 wrappers - * or any other external private key handler. - * (see the respective RSA functions in rsa.h for documentation - * of the callback parameters, with the only change being - * that the rsa_context * is a void * in the callbacks) - * - * Note: own_cert should contain IN order from the bottom - * up your certificate chain. The top certificate (self-signed) - * can be omitted. - * - * \warning This backwards-compatibility function is deprecated! - * Please use \c pk_init_ctx_rsa_alt() - * and \c ssl_set_own_cert() instead. - * - * \param ssl SSL context - * \param own_cert own public certificate chain - * \param rsa_key alternate implementation private RSA key - * \param rsa_decrypt alternate implementation of \c rsa_pkcs1_decrypt() - * \param rsa_sign alternate implementation of \c rsa_pkcs1_sign() - * \param rsa_key_len function returning length of RSA key in bytes - * - * \return 0 on success, or a specific error code. - */ -int ssl_set_own_cert_alt( ssl_context *ssl, x509_crt *own_cert, - void *rsa_key, - rsa_decrypt_func rsa_decrypt, - rsa_sign_func rsa_sign, - rsa_key_len_func rsa_key_len ); -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -#if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED) -/** - * \brief Set the Pre Shared Key (PSK) and the identity name connected - * to it. - * - * \param ssl SSL context - * \param psk pointer to the pre-shared key - * \param psk_len pre-shared key length - * \param psk_identity pointer to the pre-shared key identity - * \param psk_identity_len identity key length - * - * \return 0 if successful or POLARSSL_ERR_SSL_MALLOC_FAILED - */ -int ssl_set_psk( ssl_context *ssl, const unsigned char *psk, size_t psk_len, - const unsigned char *psk_identity, size_t psk_identity_len ); - -/** - * \brief Set the PSK callback (server-side only) (Optional). - * - * If set, the PSK callback is called for each - * handshake where a PSK ciphersuite was negotiated. - * The caller provides the identity received and wants to - * receive the actual PSK data and length. - * - * The callback has the following parameters: (void *parameter, - * ssl_context *ssl, const unsigned char *psk_identity, - * size_t identity_len) - * If a valid PSK identity is found, the callback should use - * ssl_set_psk() on the ssl context to set the correct PSK and - * identity and return 0. - * Any other return value will result in a denied PSK identity. - * - * \param ssl SSL context - * \param f_psk PSK identity function - * \param p_psk PSK identity parameter - */ -void ssl_set_psk_cb( ssl_context *ssl, - int (*f_psk)(void *, ssl_context *, const unsigned char *, - size_t), - void *p_psk ); -#endif /* POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED */ - -#if defined(POLARSSL_DHM_C) -/** - * \brief Set the Diffie-Hellman public P and G values, - * read as hexadecimal strings (server-side only) - * (Default: POLARSSL_DHM_RFC5114_MODP_1024_[PG]) - * - * \param ssl SSL context - * \param dhm_P Diffie-Hellman-Merkle modulus - * \param dhm_G Diffie-Hellman-Merkle generator - * - * \return 0 if successful - */ -int ssl_set_dh_param( ssl_context *ssl, const char *dhm_P, const char *dhm_G ); - -/** - * \brief Set the Diffie-Hellman public P and G values, - * read from existing context (server-side only) - * - * \param ssl SSL context - * \param dhm_ctx Diffie-Hellman-Merkle context - * - * \return 0 if successful - */ -int ssl_set_dh_param_ctx( ssl_context *ssl, dhm_context *dhm_ctx ); -#endif /* POLARSSL_DHM_C */ - -#if defined(POLARSSL_SSL_SET_CURVES) -/** - * \brief Set the allowed curves in order of preference. - * (Default: all defined curves.) - * - * On server: this only affects selection of the ECDHE curve; - * the curves used for ECDH and ECDSA are determined by the - * list of available certificates instead. - * - * On client: this affects the list of curves offered for any - * use. The server can override our preference order. - * - * Both sides: limits the set of curves used by peer to the - * listed curves for any use (ECDH(E), certificates). - * - * \param ssl SSL context - * \param curves Ordered list of allowed curves, - * terminated by POLARSSL_ECP_DP_NONE. - */ -void ssl_set_curves( ssl_context *ssl, const ecp_group_id *curves ); -#endif /* POLARSSL_SSL_SET_CURVES */ - -#if defined(POLARSSL_SSL_SERVER_NAME_INDICATION) -/** - * \brief Set hostname for ServerName TLS extension - * (client-side only) - * - * - * \param ssl SSL context - * \param hostname the server hostname - * - * \return 0 if successful or POLARSSL_ERR_SSL_MALLOC_FAILED - */ -int ssl_set_hostname( ssl_context *ssl, const char *hostname ); - -/** - * \brief Set server side ServerName TLS extension callback - * (optional, server-side only). - * - * If set, the ServerName callback is called whenever the - * server receives a ServerName TLS extension from the client - * during a handshake. The ServerName callback has the - * following parameters: (void *parameter, ssl_context *ssl, - * const unsigned char *hostname, size_t len). If a suitable - * certificate is found, the callback should set the - * certificate and key to use with ssl_set_own_cert() (and - * possibly adjust the CA chain as well) and return 0. The - * callback should return -1 to abort the handshake at this - * point. - * - * \param ssl SSL context - * \param f_sni verification function - * \param p_sni verification parameter - */ -void ssl_set_sni( ssl_context *ssl, - int (*f_sni)(void *, ssl_context *, const unsigned char *, - size_t), - void *p_sni ); -#endif /* POLARSSL_SSL_SERVER_NAME_INDICATION */ - -#if defined(POLARSSL_SSL_ALPN) -/** - * \brief Set the supported Application Layer Protocols. - * - * \param ssl SSL context - * \param protos NULL-terminated list of supported protocols, - * in decreasing preference order. - * - * \return 0 on success, or POLARSSL_ERR_SSL_BAD_INPUT_DATA. - */ -int ssl_set_alpn_protocols( ssl_context *ssl, const char **protos ); - -/** - * \brief Get the name of the negotiated Application Layer Protocol. - * This function should be called after the handshake is - * completed. - * - * \param ssl SSL context - * - * \return Protcol name, or NULL if no protocol was negotiated. - */ -const char *ssl_get_alpn_protocol( const ssl_context *ssl ); -#endif /* POLARSSL_SSL_ALPN */ - -/** - * \brief Set the maximum supported version sent from the client side - * and/or accepted at the server side - * (Default: SSL_MAX_MAJOR_VERSION, SSL_MAX_MINOR_VERSION) - * - * Note: This ignores ciphersuites from 'higher' versions. - * Note: Input outside of the SSL_MAX_XXXXX_VERSION and - * SSL_MIN_XXXXX_VERSION range is ignored. - * - * \param ssl SSL context - * \param major Major version number (only SSL_MAJOR_VERSION_3 supported) - * \param minor Minor version number (SSL_MINOR_VERSION_0, - * SSL_MINOR_VERSION_1 and SSL_MINOR_VERSION_2, - * SSL_MINOR_VERSION_3 supported) - */ -void ssl_set_max_version( ssl_context *ssl, int major, int minor ); - - -/** - * \brief Set the minimum accepted SSL/TLS protocol version - * (Default: SSL_MIN_MAJOR_VERSION, SSL_MIN_MINOR_VERSION) - * - * Note: Input outside of the SSL_MAX_XXXXX_VERSION and - * SSL_MIN_XXXXX_VERSION range is ignored. - * - * \param ssl SSL context - * \param major Major version number (only SSL_MAJOR_VERSION_3 supported) - * \param minor Minor version number (SSL_MINOR_VERSION_0, - * SSL_MINOR_VERSION_1 and SSL_MINOR_VERSION_2, - * SSL_MINOR_VERSION_3 supported) - */ -void ssl_set_min_version( ssl_context *ssl, int major, int minor ); - -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) -/** - * \brief Set the maximum fragment length to emit and/or negotiate - * (Default: SSL_MAX_CONTENT_LEN, usually 2^14 bytes) - * (Server: set maximum fragment length to emit, - * usually negotiated by the client during handshake - * (Client: set maximum fragment length to emit *and* - * negotiate with the server during handshake) - * - * \param ssl SSL context - * \param mfl_code Code for maximum fragment length (allowed values: - * SSL_MAX_FRAG_LEN_512, SSL_MAX_FRAG_LEN_1024, - * SSL_MAX_FRAG_LEN_2048, SSL_MAX_FRAG_LEN_4096) - * - * \return O if successful or POLARSSL_ERR_SSL_BAD_INPUT_DATA - */ -int ssl_set_max_frag_len( ssl_context *ssl, unsigned char mfl_code ); -#endif /* POLARSSL_SSL_MAX_FRAGMENT_LENGTH */ - -#if defined(POLARSSL_SSL_TRUNCATED_HMAC) -/** - * \brief Activate negotiation of truncated HMAC (Client only) - * (Default: SSL_TRUNC_HMAC_ENABLED) - * - * \param ssl SSL context - * \param truncate Enable or disable (SSL_TRUNC_HMAC_ENABLED or - * SSL_TRUNC_HMAC_DISABLED) - * - * \return O if successful, - * POLARSSL_ERR_SSL_BAD_INPUT_DATA if used server-side - */ -int ssl_set_truncated_hmac( ssl_context *ssl, int truncate ); -#endif /* POLARSSL_SSL_TRUNCATED_HMAC */ - -#if defined(POLARSSL_SSL_SESSION_TICKETS) -/** - * \brief Enable / Disable session tickets - * (Default: SSL_SESSION_TICKETS_ENABLED on client, - * SSL_SESSION_TICKETS_DISABLED on server) - * - * \note On server, ssl_set_rng() must be called before this function - * to allow generating the ticket encryption and - * authentication keys. - * - * \param ssl SSL context - * \param use_tickets Enable or disable (SSL_SESSION_TICKETS_ENABLED or - * SSL_SESSION_TICKETS_DISABLED) - * - * \return O if successful, - * or a specific error code (server only). - */ -int ssl_set_session_tickets( ssl_context *ssl, int use_tickets ); - -/** - * \brief Set session ticket lifetime (server only) - * (Default: SSL_DEFAULT_TICKET_LIFETIME (86400 secs / 1 day)) - * - * \param ssl SSL context - * \param lifetime session ticket lifetime - */ -void ssl_set_session_ticket_lifetime( ssl_context *ssl, int lifetime ); -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - -/** - * \brief Enable / Disable renegotiation support for connection when - * initiated by peer - * (Default: SSL_RENEGOTIATION_DISABLED) - * - * Note: A server with support enabled is more vulnerable for a - * resource DoS by a malicious client. You should enable this on - * a client to enable server-initiated renegotiation. - * - * \param ssl SSL context - * \param renegotiation Enable or disable (SSL_RENEGOTIATION_ENABLED or - * SSL_RENEGOTIATION_DISABLED) - */ -void ssl_set_renegotiation( ssl_context *ssl, int renegotiation ); - -/** - * \brief Prevent or allow legacy renegotiation. - * (Default: SSL_LEGACY_NO_RENEGOTIATION) - * - * SSL_LEGACY_NO_RENEGOTIATION allows connections to - * be established even if the peer does not support - * secure renegotiation, but does not allow renegotiation - * to take place if not secure. - * (Interoperable and secure option) - * - * SSL_LEGACY_ALLOW_RENEGOTIATION allows renegotiations - * with non-upgraded peers. Allowing legacy renegotiation - * makes the connection vulnerable to specific man in the - * middle attacks. (See RFC 5746) - * (Most interoperable and least secure option) - * - * SSL_LEGACY_BREAK_HANDSHAKE breaks off connections - * if peer does not support secure renegotiation. Results - * in interoperability issues with non-upgraded peers - * that do not support renegotiation altogether. - * (Most secure option, interoperability issues) - * - * \param ssl SSL context - * \param allow_legacy Prevent or allow (SSL_NO_LEGACY_RENEGOTIATION, - * SSL_ALLOW_LEGACY_RENEGOTIATION or - * SSL_LEGACY_BREAK_HANDSHAKE) - */ -void ssl_legacy_renegotiation( ssl_context *ssl, int allow_legacy ); - -/** - * \brief Enforce server-requested renegotiation. - * (Default: enforced, max_records = 16) - * (No effect on client.) - * - * When a server requests a renegotiation, the client can - * comply or ignore the request. This function allows the - * server to decide if it should enforce its renegotiation - * requests by closing the connection if the client doesn't - * initiate a renegotiation. - * - * However, records could already be in transit from the - * client to the server when the request is emitted. In order - * to increase reliability, the server can accept a number of - * records containing application data before the ClientHello - * that was requested. - * - * The optimal value is highly dependent on the specific usage - * scenario. - * - * \param ssl SSL context - * \param max_records Use SSL_RENEGOTIATION_NOT_ENFORCED if you don't want to - * enforce renegotiation, or a non-negative value to enforce - * it but allow for a grace period of max_records records. - */ -void ssl_set_renegotiation_enforced( ssl_context *ssl, int max_records ); - -/** - * \brief Return the number of data bytes available to read - * - * \param ssl SSL context - * - * \return how many bytes are available in the read buffer - */ -size_t ssl_get_bytes_avail( const ssl_context *ssl ); - -/** - * \brief Return the result of the certificate verification - * - * \param ssl SSL context - * - * \return 0 if successful, or a combination of: - * BADCERT_EXPIRED - * BADCERT_REVOKED - * BADCERT_CN_MISMATCH - * BADCERT_NOT_TRUSTED - */ -int ssl_get_verify_result( const ssl_context *ssl ); - -/** - * \brief Return the name of the current ciphersuite - * - * \param ssl SSL context - * - * \return a string containing the ciphersuite name - */ -const char *ssl_get_ciphersuite( const ssl_context *ssl ); - -/** - * \brief Return the current SSL version (SSLv3/TLSv1/etc) - * - * \param ssl SSL context - * - * \return a string containing the SSL version - */ -const char *ssl_get_version( const ssl_context *ssl ); - -#if defined(POLARSSL_X509_CRT_PARSE_C) -/** - * \brief Return the peer certificate from the current connection - * - * Note: Can be NULL in case no certificate was sent during - * the handshake. Different calls for the same connection can - * return the same or different pointers for the same - * certificate and even a different certificate altogether. - * The peer cert CAN change in a single connection if - * renegotiation is performed. - * - * \param ssl SSL context - * - * \return the current peer certificate - */ -const x509_crt *ssl_get_peer_cert( const ssl_context *ssl ); -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -/** - * \brief Save session in order to resume it later (client-side only) - * Session data is copied to presented session structure. - * - * \warning Currently, peer certificate is lost in the operation. - * - * \param ssl SSL context - * \param session session context - * - * \return 0 if successful, - * POLARSSL_ERR_SSL_MALLOC_FAILED if memory allocation failed, - * POLARSSL_ERR_SSL_BAD_INPUT_DATA if used server-side or - * arguments are otherwise invalid - * - * \sa ssl_set_session() - */ -int ssl_get_session( const ssl_context *ssl, ssl_session *session ); - -/** - * \brief Perform the SSL handshake - * - * \param ssl SSL context - * - * \return 0 if successful, POLARSSL_ERR_NET_WANT_READ, - * POLARSSL_ERR_NET_WANT_WRITE, or a specific SSL error code. - */ -int ssl_handshake( ssl_context *ssl ); - -/** - * \brief Perform a single step of the SSL handshake - * - * Note: the state of the context (ssl->state) will be at - * the following state after execution of this function. - * Do not call this function if state is SSL_HANDSHAKE_OVER. - * - * \param ssl SSL context - * - * \return 0 if successful, POLARSSL_ERR_NET_WANT_READ, - * POLARSSL_ERR_NET_WANT_WRITE, or a specific SSL error code. - */ -int ssl_handshake_step( ssl_context *ssl ); - -/** - * \brief Initiate an SSL renegotiation on the running connection. - * Client: perform the renegotiation right now. - * Server: request renegotiation, which will be performed - * during the next call to ssl_read() if honored by client. - * - * \param ssl SSL context - * - * \return 0 if successful, or any ssl_handshake() return value. - */ -int ssl_renegotiate( ssl_context *ssl ); - -/** - * \brief Read at most 'len' application data bytes - * - * \param ssl SSL context - * \param buf buffer that will hold the data - * \param len how many bytes must be read - * - * \return This function returns the number of bytes read, 0 for EOF, - * or a negative error code. - */ -int ssl_read( ssl_context *ssl, unsigned char *buf, size_t len ); - -/** - * \brief Write exactly 'len' application data bytes - * - * \param ssl SSL context - * \param buf buffer holding the data - * \param len how many bytes must be written - * - * \return This function returns the number of bytes written, - * or a negative error code. - * - * \note When this function returns POLARSSL_ERR_NET_WANT_WRITE, - * it must be called later with the *same* arguments, - * until it returns a positive value. - */ -int ssl_write( ssl_context *ssl, const unsigned char *buf, size_t len ); - -/** - * \brief Send an alert message - * - * \param ssl SSL context - * \param level The alert level of the message - * (SSL_ALERT_LEVEL_WARNING or SSL_ALERT_LEVEL_FATAL) - * \param message The alert message (SSL_ALERT_MSG_*) - * - * \return 0 if successful, or a specific SSL error code. - */ -int ssl_send_alert_message( ssl_context *ssl, - unsigned char level, - unsigned char message ); -/** - * \brief Notify the peer that the connection is being closed - * - * \param ssl SSL context - */ -int ssl_close_notify( ssl_context *ssl ); - -/** - * \brief Free referenced items in an SSL context and clear memory - * - * \param ssl SSL context - */ -void ssl_free( ssl_context *ssl ); - -/** - * \brief Initialize SSL session structure - * - * \param session SSL session - */ -void ssl_session_init( ssl_session *session ); - -/** - * \brief Free referenced items in an SSL session including the - * peer certificate and clear memory - * - * \param session SSL session - */ -void ssl_session_free( ssl_session *session ); - -/** - * \brief Free referenced items in an SSL transform context and clear - * memory - * - * \param transform SSL transform context - */ -void ssl_transform_free( ssl_transform *transform ); - -/** - * \brief Free referenced items in an SSL handshake context and clear - * memory - * - * \param handshake SSL handshake context - */ -void ssl_handshake_free( ssl_handshake_params *handshake ); - -/* - * Internal functions (do not call directly) - */ -int ssl_handshake_client_step( ssl_context *ssl ); -int ssl_handshake_server_step( ssl_context *ssl ); -void ssl_handshake_wrapup( ssl_context *ssl ); - -int ssl_send_fatal_handshake_failure( ssl_context *ssl ); - -int ssl_derive_keys( ssl_context *ssl ); - -int ssl_read_record( ssl_context *ssl ); -/** - * \return 0 if successful, POLARSSL_ERR_SSL_CONN_EOF on EOF or - * another negative error code. - */ -int ssl_fetch_input( ssl_context *ssl, size_t nb_want ); - -int ssl_write_record( ssl_context *ssl ); -int ssl_flush_output( ssl_context *ssl ); - -int ssl_parse_certificate( ssl_context *ssl ); -int ssl_write_certificate( ssl_context *ssl ); - -int ssl_parse_change_cipher_spec( ssl_context *ssl ); -int ssl_write_change_cipher_spec( ssl_context *ssl ); - -int ssl_parse_finished( ssl_context *ssl ); -int ssl_write_finished( ssl_context *ssl ); - -void ssl_optimize_checksum( ssl_context *ssl, - const ssl_ciphersuite_t *ciphersuite_info ); - -#if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED) -int ssl_psk_derive_premaster( ssl_context *ssl, key_exchange_type_t key_ex ); -#endif - -#if defined(POLARSSL_PK_C) -unsigned char ssl_sig_from_pk( pk_context *pk ); -pk_type_t ssl_pk_alg_from_sig( unsigned char sig ); -#endif - -md_type_t ssl_md_alg_from_hash( unsigned char hash ); - -#if defined(POLARSSL_SSL_SET_CURVES) -int ssl_curve_is_acceptable( const ssl_context *ssl, ecp_group_id grp_id ); -#endif - -#if defined(POLARSSL_X509_CRT_PARSE_C) -static inline pk_context *ssl_own_key( ssl_context *ssl ) -{ - return( ssl->handshake->key_cert == NULL ? NULL - : ssl->handshake->key_cert->key ); -} - -static inline x509_crt *ssl_own_cert( ssl_context *ssl ) -{ - return( ssl->handshake->key_cert == NULL ? NULL - : ssl->handshake->key_cert->cert ); -} - -/* - * Check usage of a certificate wrt extensions: - * keyUsage, extendedKeyUsage (later), and nSCertType (later). - * - * Warning: cert_endpoint is the endpoint of the cert (ie, of our peer when we - * check a cert we received from them)! - * - * Return 0 if everything is OK, -1 if not. - */ -int ssl_check_cert_usage( const x509_crt *cert, - const ssl_ciphersuite_t *ciphersuite, - int cert_endpoint ); -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -/* constant-time buffer comparison */ -static inline int safer_memcmp( const void *a, const void *b, size_t n ) -{ - size_t i; - const unsigned char *A = (const unsigned char *) a; - const unsigned char *B = (const unsigned char *) b; - unsigned char diff = 0; - - for( i = 0; i < n; i++ ) - diff |= A[i] ^ B[i]; - - return( diff ); -} - -#ifdef __cplusplus -} -#endif - -#endif /* ssl.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ssl_cache.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ssl_cache.h deleted file mode 100644 index 918fb60..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ssl_cache.h +++ /dev/null @@ -1,147 +0,0 @@ -/** - * \file ssl_cache.h - * - * \brief SSL session cache implementation - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_SSL_CACHE_H -#define POLARSSL_SSL_CACHE_H - -#include "ssl.h" - -#if defined(POLARSSL_THREADING_C) -#include "threading.h" -#endif - -/** - * \name SECTION: Module settings - * - * The configuration options you can set for this module are in this section. - * Either change them in config.h or define them on the compiler command line. - * \{ - */ - -#if !defined(SSL_CACHE_DEFAULT_TIMEOUT) -#define SSL_CACHE_DEFAULT_TIMEOUT 86400 /*!< 1 day */ -#endif - -#if !defined(SSL_CACHE_DEFAULT_MAX_ENTRIES) -#define SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /*!< Maximum entries in cache */ -#endif - -/* \} name SECTION: Module settings */ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct _ssl_cache_context ssl_cache_context; -typedef struct _ssl_cache_entry ssl_cache_entry; - -/** - * \brief This structure is used for storing cache entries - */ -struct _ssl_cache_entry -{ -#if defined(POLARSSL_HAVE_TIME) - time_t timestamp; /*!< entry timestamp */ -#endif - ssl_session session; /*!< entry session */ -#if defined(POLARSSL_X509_CRT_PARSE_C) - x509_buf peer_cert; /*!< entry peer_cert */ -#endif - ssl_cache_entry *next; /*!< chain pointer */ -}; - -/** - * \brief Cache context - */ -struct _ssl_cache_context -{ - ssl_cache_entry *chain; /*!< start of the chain */ - int timeout; /*!< cache entry timeout */ - int max_entries; /*!< maximum entries */ -#if defined(POLARSSL_THREADING_C) - threading_mutex_t mutex; /*!< mutex */ -#endif -}; - -/** - * \brief Initialize an SSL cache context - * - * \param cache SSL cache context - */ -void ssl_cache_init( ssl_cache_context *cache ); - -/** - * \brief Cache get callback implementation - * (Thread-safe if POLARSSL_THREADING_C is enabled) - * - * \param data SSL cache context - * \param session session to retrieve entry for - */ -int ssl_cache_get( void *data, ssl_session *session ); - -/** - * \brief Cache set callback implementation - * (Thread-safe if POLARSSL_THREADING_C is enabled) - * - * \param data SSL cache context - * \param session session to store entry for - */ -int ssl_cache_set( void *data, const ssl_session *session ); - -#if defined(POLARSSL_HAVE_TIME) -/** - * \brief Set the cache timeout - * (Default: SSL_CACHE_DEFAULT_TIMEOUT (1 day)) - * - * A timeout of 0 indicates no timeout. - * - * \param cache SSL cache context - * \param timeout cache entry timeout in seconds - */ -void ssl_cache_set_timeout( ssl_cache_context *cache, int timeout ); -#endif /* POLARSSL_HAVE_TIME */ - -/** - * \brief Set the cache timeout - * (Default: SSL_CACHE_DEFAULT_MAX_ENTRIES (50)) - * - * \param cache SSL cache context - * \param max cache entry maximum - */ -void ssl_cache_set_max_entries( ssl_cache_context *cache, int max ); - -/** - * \brief Free referenced items in a cache context and clear memory - * - * \param cache SSL cache context - */ -void ssl_cache_free( ssl_cache_context *cache ); - -#ifdef __cplusplus -} -#endif - -#endif /* ssl_cache.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ssl_ciphersuites.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ssl_ciphersuites.h deleted file mode 100644 index c4f1ffe..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ssl_ciphersuites.h +++ /dev/null @@ -1,293 +0,0 @@ -/** - * \file ssl_ciphersuites.h - * - * \brief SSL Ciphersuites for PolarSSL - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_SSL_CIPHERSUITES_H -#define POLARSSL_SSL_CIPHERSUITES_H - -#include "pk.h" -#include "cipher.h" -#include "md.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Supported ciphersuites (Official IANA names) - */ -#define TLS_RSA_WITH_NULL_MD5 0x01 /**< Weak! */ -#define TLS_RSA_WITH_NULL_SHA 0x02 /**< Weak! */ - -#define TLS_RSA_WITH_RC4_128_MD5 0x04 -#define TLS_RSA_WITH_RC4_128_SHA 0x05 -#define TLS_RSA_WITH_DES_CBC_SHA 0x09 /**< Weak! Not in TLS 1.2 */ - -#define TLS_RSA_WITH_3DES_EDE_CBC_SHA 0x0A - -#define TLS_DHE_RSA_WITH_DES_CBC_SHA 0x15 /**< Weak! Not in TLS 1.2 */ -#define TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA 0x16 - -#define TLS_PSK_WITH_NULL_SHA 0x2C /**< Weak! */ -#define TLS_DHE_PSK_WITH_NULL_SHA 0x2D /**< Weak! */ -#define TLS_RSA_PSK_WITH_NULL_SHA 0x2E /**< Weak! */ -#define TLS_RSA_WITH_AES_128_CBC_SHA 0x2F - -#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA 0x33 -#define TLS_RSA_WITH_AES_256_CBC_SHA 0x35 -#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA 0x39 - -#define TLS_RSA_WITH_NULL_SHA256 0x3B /**< Weak! */ -#define TLS_RSA_WITH_AES_128_CBC_SHA256 0x3C /**< TLS 1.2 */ -#define TLS_RSA_WITH_AES_256_CBC_SHA256 0x3D /**< TLS 1.2 */ - -#define TLS_RSA_WITH_CAMELLIA_128_CBC_SHA 0x41 -#define TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x45 - -#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 0x67 /**< TLS 1.2 */ -#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 0x6B /**< TLS 1.2 */ - -#define TLS_RSA_WITH_CAMELLIA_256_CBC_SHA 0x84 -#define TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x88 - -#define TLS_PSK_WITH_RC4_128_SHA 0x8A -#define TLS_PSK_WITH_3DES_EDE_CBC_SHA 0x8B -#define TLS_PSK_WITH_AES_128_CBC_SHA 0x8C -#define TLS_PSK_WITH_AES_256_CBC_SHA 0x8D - -#define TLS_DHE_PSK_WITH_RC4_128_SHA 0x8E -#define TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA 0x8F -#define TLS_DHE_PSK_WITH_AES_128_CBC_SHA 0x90 -#define TLS_DHE_PSK_WITH_AES_256_CBC_SHA 0x91 - -#define TLS_RSA_PSK_WITH_RC4_128_SHA 0x92 -#define TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA 0x93 -#define TLS_RSA_PSK_WITH_AES_128_CBC_SHA 0x94 -#define TLS_RSA_PSK_WITH_AES_256_CBC_SHA 0x95 - -#define TLS_RSA_WITH_AES_128_GCM_SHA256 0x9C /**< TLS 1.2 */ -#define TLS_RSA_WITH_AES_256_GCM_SHA384 0x9D /**< TLS 1.2 */ -#define TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 0x9E /**< TLS 1.2 */ -#define TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 0x9F /**< TLS 1.2 */ - -#define TLS_PSK_WITH_AES_128_GCM_SHA256 0xA8 /**< TLS 1.2 */ -#define TLS_PSK_WITH_AES_256_GCM_SHA384 0xA9 /**< TLS 1.2 */ -#define TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 0xAA /**< TLS 1.2 */ -#define TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 0xAB /**< TLS 1.2 */ -#define TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 0xAC /**< TLS 1.2 */ -#define TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 0xAD /**< TLS 1.2 */ - -#define TLS_PSK_WITH_AES_128_CBC_SHA256 0xAE -#define TLS_PSK_WITH_AES_256_CBC_SHA384 0xAF -#define TLS_PSK_WITH_NULL_SHA256 0xB0 /**< Weak! */ -#define TLS_PSK_WITH_NULL_SHA384 0xB1 /**< Weak! */ - -#define TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 0xB2 -#define TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 0xB3 -#define TLS_DHE_PSK_WITH_NULL_SHA256 0xB4 /**< Weak! */ -#define TLS_DHE_PSK_WITH_NULL_SHA384 0xB5 /**< Weak! */ - -#define TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 0xB6 -#define TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 0xB7 -#define TLS_RSA_PSK_WITH_NULL_SHA256 0xB8 /**< Weak! */ -#define TLS_RSA_PSK_WITH_NULL_SHA384 0xB9 /**< Weak! */ - -#define TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 0xBA /**< TLS 1.2 */ -#define TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0xBE /**< TLS 1.2 */ - -#define TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 0xC0 /**< TLS 1.2 */ -#define TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0xC4 /**< TLS 1.2 */ - -#define TLS_ECDH_ECDSA_WITH_NULL_SHA 0xC001 /**< Weak! */ -#define TLS_ECDH_ECDSA_WITH_RC4_128_SHA 0xC002 /**< Not in SSL3! */ -#define TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA 0xC003 /**< Not in SSL3! */ -#define TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0xC004 /**< Not in SSL3! */ -#define TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0xC005 /**< Not in SSL3! */ - -#define TLS_ECDHE_ECDSA_WITH_NULL_SHA 0xC006 /**< Weak! */ -#define TLS_ECDHE_ECDSA_WITH_RC4_128_SHA 0xC007 /**< Not in SSL3! */ -#define TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA 0xC008 /**< Not in SSL3! */ -#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0xC009 /**< Not in SSL3! */ -#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0xC00A /**< Not in SSL3! */ - -#define TLS_ECDH_RSA_WITH_NULL_SHA 0xC00B /**< Weak! */ -#define TLS_ECDH_RSA_WITH_RC4_128_SHA 0xC00C /**< Not in SSL3! */ -#define TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA 0xC00D /**< Not in SSL3! */ -#define TLS_ECDH_RSA_WITH_AES_128_CBC_SHA 0xC00E /**< Not in SSL3! */ -#define TLS_ECDH_RSA_WITH_AES_256_CBC_SHA 0xC00F /**< Not in SSL3! */ - -#define TLS_ECDHE_RSA_WITH_NULL_SHA 0xC010 /**< Weak! */ -#define TLS_ECDHE_RSA_WITH_RC4_128_SHA 0xC011 /**< Not in SSL3! */ -#define TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA 0xC012 /**< Not in SSL3! */ -#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 0xC013 /**< Not in SSL3! */ -#define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 0xC014 /**< Not in SSL3! */ - -#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 0xC023 /**< TLS 1.2 */ -#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 0xC024 /**< TLS 1.2 */ -#define TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 0xC025 /**< TLS 1.2 */ -#define TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 0xC026 /**< TLS 1.2 */ -#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 0xC027 /**< TLS 1.2 */ -#define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 0xC028 /**< TLS 1.2 */ -#define TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 0xC029 /**< TLS 1.2 */ -#define TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 0xC02A /**< TLS 1.2 */ - -#define TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0xC02B /**< TLS 1.2 */ -#define TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0xC02C /**< TLS 1.2 */ -#define TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0xC02D /**< TLS 1.2 */ -#define TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0xC02E /**< TLS 1.2 */ -#define TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0xC02F /**< TLS 1.2 */ -#define TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0xC030 /**< TLS 1.2 */ -#define TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 0xC031 /**< TLS 1.2 */ -#define TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 0xC032 /**< TLS 1.2 */ - -#define TLS_ECDHE_PSK_WITH_RC4_128_SHA 0xC033 /**< Not in SSL3! */ -#define TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA 0xC034 /**< Not in SSL3! */ -#define TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA 0xC035 /**< Not in SSL3! */ -#define TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA 0xC036 /**< Not in SSL3! */ -#define TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 0xC037 /**< Not in SSL3! */ -#define TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 0xC038 /**< Not in SSL3! */ -#define TLS_ECDHE_PSK_WITH_NULL_SHA 0xC039 /**< Weak! No SSL3! */ -#define TLS_ECDHE_PSK_WITH_NULL_SHA256 0xC03A /**< Weak! No SSL3! */ -#define TLS_ECDHE_PSK_WITH_NULL_SHA384 0xC03B /**< Weak! No SSL3! */ - -#define TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0xC072 /**< Not in SSL3! */ -#define TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0xC073 /**< Not in SSL3! */ -#define TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0xC074 /**< Not in SSL3! */ -#define TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0xC075 /**< Not in SSL3! */ -#define TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0xC076 /**< Not in SSL3! */ -#define TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 0xC077 /**< Not in SSL3! */ -#define TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0xC078 /**< Not in SSL3! */ -#define TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 0xC079 /**< Not in SSL3! */ - -#define TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 0xC07A /**< TLS 1.2 */ -#define TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 0xC07B /**< TLS 1.2 */ -#define TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 0xC07C /**< TLS 1.2 */ -#define TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 0xC07D /**< TLS 1.2 */ -#define TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 0xC086 /**< TLS 1.2 */ -#define TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 0xC087 /**< TLS 1.2 */ -#define TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 0xC088 /**< TLS 1.2 */ -#define TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 0xC089 /**< TLS 1.2 */ -#define TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 0xC08A /**< TLS 1.2 */ -#define TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 0xC08B /**< TLS 1.2 */ -#define TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 0xC08C /**< TLS 1.2 */ -#define TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 0xC08D /**< TLS 1.2 */ - -#define TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 0xC08E /**< TLS 1.2 */ -#define TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 0xC08F /**< TLS 1.2 */ -#define TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 0xC090 /**< TLS 1.2 */ -#define TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 0xC091 /**< TLS 1.2 */ -#define TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 0xC092 /**< TLS 1.2 */ -#define TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 0xC093 /**< TLS 1.2 */ - -#define TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 0xC094 -#define TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 0xC095 -#define TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0xC096 -#define TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0xC097 -#define TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 0xC098 -#define TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 0xC099 -#define TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0xC09A /**< Not in SSL3! */ -#define TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0xC09B /**< Not in SSL3! */ - -#define TLS_RSA_WITH_AES_128_CCM 0xC09C /**< TLS 1.2 */ -#define TLS_RSA_WITH_AES_256_CCM 0xC09D /**< TLS 1.2 */ -#define TLS_DHE_RSA_WITH_AES_128_CCM 0xC09E /**< TLS 1.2 */ -#define TLS_DHE_RSA_WITH_AES_256_CCM 0xC09F /**< TLS 1.2 */ -#define TLS_RSA_WITH_AES_128_CCM_8 0xC0A0 /**< TLS 1.2 */ -#define TLS_RSA_WITH_AES_256_CCM_8 0xC0A1 /**< TLS 1.2 */ -#define TLS_DHE_RSA_WITH_AES_128_CCM_8 0xC0A2 /**< TLS 1.2 */ -#define TLS_DHE_RSA_WITH_AES_256_CCM_8 0xC0A3 /**< TLS 1.2 */ -#define TLS_PSK_WITH_AES_128_CCM 0xC0A4 /**< TLS 1.2 */ -#define TLS_PSK_WITH_AES_256_CCM 0xC0A5 /**< TLS 1.2 */ -#define TLS_DHE_PSK_WITH_AES_128_CCM 0xC0A6 /**< TLS 1.2 */ -#define TLS_DHE_PSK_WITH_AES_256_CCM 0xC0A7 /**< TLS 1.2 */ -#define TLS_PSK_WITH_AES_128_CCM_8 0xC0A8 /**< TLS 1.2 */ -#define TLS_PSK_WITH_AES_256_CCM_8 0xC0A9 /**< TLS 1.2 */ -#define TLS_DHE_PSK_WITH_AES_128_CCM_8 0xC0AA /**< TLS 1.2 */ -#define TLS_DHE_PSK_WITH_AES_256_CCM_8 0xC0AB /**< TLS 1.2 */ -/* The last two are named with PSK_DHE in the RFC, which looks like a typo */ - -#define TLS_ECDHE_ECDSA_WITH_AES_128_CCM 0xC0AC /**< TLS 1.2 */ -#define TLS_ECDHE_ECDSA_WITH_AES_256_CCM 0xC0AD /**< TLS 1.2 */ -#define TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 0xC0AE /**< TLS 1.2 */ -#define TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 0xC0AF /**< TLS 1.2 */ - -/* Reminder: update _ssl_premaster_secret when adding a new key exchange */ -typedef enum { - POLARSSL_KEY_EXCHANGE_NONE = 0, - POLARSSL_KEY_EXCHANGE_RSA, - POLARSSL_KEY_EXCHANGE_DHE_RSA, - POLARSSL_KEY_EXCHANGE_ECDHE_RSA, - POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - POLARSSL_KEY_EXCHANGE_PSK, - POLARSSL_KEY_EXCHANGE_DHE_PSK, - POLARSSL_KEY_EXCHANGE_RSA_PSK, - POLARSSL_KEY_EXCHANGE_ECDHE_PSK, - POLARSSL_KEY_EXCHANGE_ECDH_RSA, - POLARSSL_KEY_EXCHANGE_ECDH_ECDSA, -} key_exchange_type_t; - -typedef struct _ssl_ciphersuite_t ssl_ciphersuite_t; - -#define POLARSSL_CIPHERSUITE_WEAK 0x01 /**< Weak ciphersuite flag */ -#define POLARSSL_CIPHERSUITE_SHORT_TAG 0x02 /**< Short authentication tag, - eg for CCM_8 */ - -/** - * \brief This structure is used for storing ciphersuite information - */ -struct _ssl_ciphersuite_t -{ - int id; - const char * name; - - cipher_type_t cipher; - md_type_t mac; - key_exchange_type_t key_exchange; - - int min_major_ver; - int min_minor_ver; - int max_major_ver; - int max_minor_ver; - - unsigned char flags; -}; - -const int *ssl_list_ciphersuites( void ); - -const ssl_ciphersuite_t *ssl_ciphersuite_from_string( const char *ciphersuite_name ); -const ssl_ciphersuite_t *ssl_ciphersuite_from_id( int ciphersuite_id ); - -#if defined(POLARSSL_PK_C) -pk_type_t ssl_get_ciphersuite_sig_pk_alg( const ssl_ciphersuite_t *info ); -#endif - -int ssl_ciphersuite_uses_ec( const ssl_ciphersuite_t *info ); -int ssl_ciphersuite_uses_psk( const ssl_ciphersuite_t *info ); - -#ifdef __cplusplus -} -#endif - -#endif /* ssl_ciphersuites.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ssl_rom_lib.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ssl_rom_lib.h deleted file mode 100644 index bfc84e0..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/ssl_rom_lib.h +++ /dev/null @@ -1,61 +0,0 @@ -#include -#define memcpy _memcpy -#define memcmp _memcmp -#define memset _memset -#define sscanf _sscanf -#define strncpy _strncpy -#define strnlen _strnlen -#define strlen _strlen -#define snprintf DiagSnPrintf - -#define strstr __rtl_strstr -#define vsnprintf __rtl_vfprintf_r -#define memmove __rtl_memmove - -/* these functions will be move to rom libc */ -#ifndef SSL_LIBC_ROM_PATCH -#define SSL_LIBC_ROM_PATCH - -SSL_ROM_TEXT_SECTION -static inline char __rtl_tolower_v1_00(const char c) -{ - return c | 0x20; -} - -SSL_ROM_TEXT_SECTION -static inline int __rtl_strcasecmp_v1_00(const char *s1, const char *s2) -{ - const unsigned char *ucs1 = (const unsigned char *) s1; - const unsigned char *ucs2 = (const unsigned char *) s2; - int d = 0; - for ( ; ; ) - { - const int c1 = __rtl_tolower_v1_00(*ucs1++); - const int c2 = __rtl_tolower_v1_00(*ucs2++); - if (((d = c1 - c2) != 0) || (c2 == '\0')) - break; - } - return d; -} - -SSL_ROM_TEXT_SECTION -static inline int __rtl_strncasecmp_v1_00(const char *s1, const char *s2, size_t n) -{ - const unsigned char *ucs1 = (const unsigned char *) s1; - const unsigned char *ucs2 = (const unsigned char *) s2; - int d = 0; - for ( ; n != 0; n--) - { - const int c1 = __rtl_tolower_v1_00(*ucs1++); - const int c2 = __rtl_tolower_v1_00(*ucs2++); - if (((d = c1 - c2) != 0) || (c2 == '\0')) - break; - } - return d; -} -#endif -#define strcasecmp __rtl_strcasecmp_v1_00 -#define strncasecmp __rtl_strncasecmp_v1_00 - -//#undef POLARSSL_HAVE_UDBL in bignum.h - diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/threading.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/threading.h deleted file mode 100644 index 1fc9f98..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/threading.h +++ /dev/null @@ -1,86 +0,0 @@ -/** - * \file threading.h - * - * \brief Threading abstraction layer - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_THREADING_H -#define POLARSSL_THREADING_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define POLARSSL_ERR_THREADING_FEATURE_UNAVAILABLE -0x001A /**< The selected feature is not available. */ -#define POLARSSL_ERR_THREADING_BAD_INPUT_DATA -0x001C /**< Bad input parameters to function. */ -#define POLARSSL_ERR_THREADING_MUTEX_ERROR -0x001E /**< Locking / unlocking / free failed with error code. */ - -#if defined(POLARSSL_THREADING_PTHREAD) -#include -typedef pthread_mutex_t threading_mutex_t; -#endif - -#if defined(POLARSSL_THREADING_ALT) -/* You should define the threading_mutex_t type in your header */ -#include "threading_alt.h" - -/** - * \brief Set your alternate threading implementation function - * pointers - * - * \param mutex_init the init function implementation - * \param mutex_free the free function implementation - * \param mutex_lock the lock function implementation - * \param mutex_unlock the unlock function implementation - * - * \return 0 if successful - */ -int threading_set_alt( int (*mutex_init)( threading_mutex_t * ), - int (*mutex_free)( threading_mutex_t * ), - int (*mutex_lock)( threading_mutex_t * ), - int (*mutex_unlock)( threading_mutex_t * ) ); -#endif /* POLARSSL_THREADING_ALT_C */ - -/* - * The function pointers for mutex_init, mutex_free, mutex_ and mutex_unlock - * - * All these functions are expected to work or the result will be undefined. - */ -extern int (*polarssl_mutex_init)( threading_mutex_t *mutex ); -extern int (*polarssl_mutex_free)( threading_mutex_t *mutex ); -extern int (*polarssl_mutex_lock)( threading_mutex_t *mutex ); -extern int (*polarssl_mutex_unlock)( threading_mutex_t *mutex ); - -#ifdef __cplusplus -} -#endif - -#endif /* threading.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/timing.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/timing.h deleted file mode 100644 index 383120e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/timing.h +++ /dev/null @@ -1,98 +0,0 @@ -/** - * \file timing.h - * - * \brief Portable interface to the CPU cycle counter - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_TIMING_H -#define POLARSSL_TIMING_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if !defined(POLARSSL_TIMING_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief timer structure - */ -struct hr_time -{ - unsigned char opaque[32]; -}; - -extern volatile int alarmed; - -/** - * \brief Return the CPU cycle counter value - */ -unsigned long hardclock( void ); - -/** - * \brief Return the elapsed time in milliseconds - * - * \param val points to a timer structure - * \param reset if set to 1, the timer is restarted - */ -unsigned long get_timer( struct hr_time *val, int reset ); - -/** - * \brief Setup an alarm clock - * - * \param seconds delay before the "alarmed" flag is set - */ -void set_alarm( int seconds ); - -/** - * \brief Sleep for a certain amount of time - * - * \param milliseconds delay in milliseconds - */ -void m_sleep( int milliseconds ); - -#if defined(POLARSSL_SELF_TEST) -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if a test failed - */ -int timing_self_test( int verbose ); -#endif - -#ifdef __cplusplus -} -#endif - -#else /* POLARSSL_TIMING_ALT */ -#include "timing_alt.h" -#endif /* POLARSSL_TIMING_ALT */ - -#endif /* timing.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/version.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/version.h deleted file mode 100644 index 1ee2a3b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/version.h +++ /dev/null @@ -1,114 +0,0 @@ -/** - * \file version.h - * - * \brief Run-time version information - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * This set of compile-time defines and run-time variables can be used to - * determine the version number of the PolarSSL library used. - */ -#ifndef POLARSSL_VERSION_H -#define POLARSSL_VERSION_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -/** - * The version number x.y.z is split into three parts. - * Major, Minor, Patchlevel - */ -#define POLARSSL_VERSION_MAJOR 1 -#define POLARSSL_VERSION_MINOR 3 -#define POLARSSL_VERSION_PATCH 8 - -/** - * The single version number has the following structure: - * MMNNPP00 - * Major version | Minor version | Patch version - */ -#define POLARSSL_VERSION_NUMBER 0x01030800 -#define POLARSSL_VERSION_STRING "1.3.8" -#define POLARSSL_VERSION_STRING_FULL "PolarSSL 1.3.8" - -#if defined(POLARSSL_VERSION_C) - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Get the version number. - * - * \return The constructed version number in the format - * MMNNPP00 (Major, Minor, Patch). - */ -unsigned int version_get_number( void ); - -/** - * Get the version string ("x.y.z"). - * - * \param string The string that will receive the value. - * (Should be at least 9 bytes in size) - */ -void version_get_string( char *string ); - -/** - * Get the full version string ("PolarSSL x.y.z"). - * - * \param string The string that will receive the value. The PolarSSL version - * string will use 18 bytes AT MOST including a terminating - * null byte. - * (So the buffer should be at least 18 bytes to receive this - * version string). - */ -void version_get_string_full( char *string ); - -/** - * \brief Check if support for a feature was compiled into this - * PolarSSL binary. This allows you to see at runtime if the - * library was for instance compiled with or without - * Multi-threading support. - * - * Note: only checks against defines in the sections "System - * support", "PolarSSL modules" and "PolarSSL feature - * support" in config.h - * - * \param feature The string for the define to check (e.g. "POLARSSL_AES_C") - * - * \return 0 if the feature is present, -1 if the feature is not - * present and -2 if support for feature checking as a whole - * was not compiled in. - */ -int version_check_feature( const char *feature ); - -#ifdef __cplusplus -} -#endif - -#endif /* POLARSSL_VERSION_C */ - -#endif /* version.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/x509.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/x509.h deleted file mode 100644 index 583cb83..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/x509.h +++ /dev/null @@ -1,317 +0,0 @@ -/** - * \file x509.h - * - * \brief X.509 generic defines and structures - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_X509_H -#define POLARSSL_X509_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include "asn1.h" -#include "pk.h" - -#if defined(POLARSSL_RSA_C) -#include "rsa.h" -#endif - -/** - * \addtogroup x509_module - * \{ - */ - -/** - * \name X509 Error codes - * \{ - */ -#define POLARSSL_ERR_X509_FEATURE_UNAVAILABLE -0x2080 /**< Unavailable feature, e.g. RSA hashing/encryption combination. */ -#define POLARSSL_ERR_X509_UNKNOWN_OID -0x2100 /**< Requested OID is unknown. */ -#define POLARSSL_ERR_X509_INVALID_FORMAT -0x2180 /**< The CRT/CRL/CSR format is invalid, e.g. different type expected. */ -#define POLARSSL_ERR_X509_INVALID_VERSION -0x2200 /**< The CRT/CRL/CSR version element is invalid. */ -#define POLARSSL_ERR_X509_INVALID_SERIAL -0x2280 /**< The serial tag or value is invalid. */ -#define POLARSSL_ERR_X509_INVALID_ALG -0x2300 /**< The algorithm tag or value is invalid. */ -#define POLARSSL_ERR_X509_INVALID_NAME -0x2380 /**< The name tag or value is invalid. */ -#define POLARSSL_ERR_X509_INVALID_DATE -0x2400 /**< The date tag or value is invalid. */ -#define POLARSSL_ERR_X509_INVALID_SIGNATURE -0x2480 /**< The signature tag or value invalid. */ -#define POLARSSL_ERR_X509_INVALID_EXTENSIONS -0x2500 /**< The extension tag or value is invalid. */ -#define POLARSSL_ERR_X509_UNKNOWN_VERSION -0x2580 /**< CRT/CRL/CSR has an unsupported version number. */ -#define POLARSSL_ERR_X509_UNKNOWN_SIG_ALG -0x2600 /**< Signature algorithm (oid) is unsupported. */ -#define POLARSSL_ERR_X509_SIG_MISMATCH -0x2680 /**< Signature algorithms do not match. (see \c ::x509_crt sig_oid) */ -#define POLARSSL_ERR_X509_CERT_VERIFY_FAILED -0x2700 /**< Certificate verification failed, e.g. CRL, CA or signature check failed. */ -#define POLARSSL_ERR_X509_CERT_UNKNOWN_FORMAT -0x2780 /**< Format not recognized as DER or PEM. */ -#define POLARSSL_ERR_X509_BAD_INPUT_DATA -0x2800 /**< Input invalid. */ -#define POLARSSL_ERR_X509_MALLOC_FAILED -0x2880 /**< Allocation of memory failed. */ -#define POLARSSL_ERR_X509_FILE_IO_ERROR -0x2900 /**< Read/write of file failed. */ -/* \} name */ - -/** - * \name X509 Verify codes - * \{ - */ -#define BADCERT_EXPIRED 0x01 /**< The certificate validity has expired. */ -#define BADCERT_REVOKED 0x02 /**< The certificate has been revoked (is on a CRL). */ -#define BADCERT_CN_MISMATCH 0x04 /**< The certificate Common Name (CN) does not match with the expected CN. */ -#define BADCERT_NOT_TRUSTED 0x08 /**< The certificate is not correctly signed by the trusted CA. */ -#define BADCRL_NOT_TRUSTED 0x10 /**< CRL is not correctly signed by the trusted CA. */ -#define BADCRL_EXPIRED 0x20 /**< CRL is expired. */ -#define BADCERT_MISSING 0x40 /**< Certificate was missing. */ -#define BADCERT_SKIP_VERIFY 0x80 /**< Certificate verification was skipped. */ -#define BADCERT_OTHER 0x0100 /**< Other reason (can be used by verify callback) */ -#define BADCERT_FUTURE 0x0200 /**< The certificate validity starts in the future. */ -#define BADCRL_FUTURE 0x0400 /**< The CRL is from the future */ -/* \} name */ -/* \} addtogroup x509_module */ - -/* - * X.509 v3 Key Usage Extension flags - */ -#define KU_DIGITAL_SIGNATURE (0x80) /* bit 0 */ -#define KU_NON_REPUDIATION (0x40) /* bit 1 */ -#define KU_KEY_ENCIPHERMENT (0x20) /* bit 2 */ -#define KU_DATA_ENCIPHERMENT (0x10) /* bit 3 */ -#define KU_KEY_AGREEMENT (0x08) /* bit 4 */ -#define KU_KEY_CERT_SIGN (0x04) /* bit 5 */ -#define KU_CRL_SIGN (0x02) /* bit 6 */ - -/* - * Netscape certificate types - * (http://www.mozilla.org/projects/security/pki/nss/tech-notes/tn3.html) - */ - -#define NS_CERT_TYPE_SSL_CLIENT (0x80) /* bit 0 */ -#define NS_CERT_TYPE_SSL_SERVER (0x40) /* bit 1 */ -#define NS_CERT_TYPE_EMAIL (0x20) /* bit 2 */ -#define NS_CERT_TYPE_OBJECT_SIGNING (0x10) /* bit 3 */ -#define NS_CERT_TYPE_RESERVED (0x08) /* bit 4 */ -#define NS_CERT_TYPE_SSL_CA (0x04) /* bit 5 */ -#define NS_CERT_TYPE_EMAIL_CA (0x02) /* bit 6 */ -#define NS_CERT_TYPE_OBJECT_SIGNING_CA (0x01) /* bit 7 */ - -/* - * X.509 extension types - * - * Comments refer to the status for using certificates. Status can be - * different for writing certificates or reading CRLs or CSRs. - */ -#define EXT_AUTHORITY_KEY_IDENTIFIER (1 << 0) -#define EXT_SUBJECT_KEY_IDENTIFIER (1 << 1) -#define EXT_KEY_USAGE (1 << 2) /* Parsed but not used */ -#define EXT_CERTIFICATE_POLICIES (1 << 3) -#define EXT_POLICY_MAPPINGS (1 << 4) -#define EXT_SUBJECT_ALT_NAME (1 << 5) /* Supported (DNS) */ -#define EXT_ISSUER_ALT_NAME (1 << 6) -#define EXT_SUBJECT_DIRECTORY_ATTRS (1 << 7) -#define EXT_BASIC_CONSTRAINTS (1 << 8) /* Supported */ -#define EXT_NAME_CONSTRAINTS (1 << 9) -#define EXT_POLICY_CONSTRAINTS (1 << 10) -#define EXT_EXTENDED_KEY_USAGE (1 << 11) /* Parsed but not used */ -#define EXT_CRL_DISTRIBUTION_POINTS (1 << 12) -#define EXT_INIHIBIT_ANYPOLICY (1 << 13) -#define EXT_FRESHEST_CRL (1 << 14) - -#define EXT_NS_CERT_TYPE (1 << 16) /* Parsed (and then ?) */ - -/* - * Storage format identifiers - * Recognized formats: PEM and DER - */ -#define X509_FORMAT_DER 1 -#define X509_FORMAT_PEM 2 - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \addtogroup x509_module - * \{ */ - -/** - * \name Structures for parsing X.509 certificates, CRLs and CSRs - * \{ - */ - -/** - * Type-length-value structure that allows for ASN1 using DER. - */ -typedef asn1_buf x509_buf; - -/** - * Container for ASN1 bit strings. - */ -typedef asn1_bitstring x509_bitstring; - -/** - * Container for ASN1 named information objects. - * It allows for Relative Distinguished Names (e.g. cn=polarssl,ou=code,etc.). - */ -typedef asn1_named_data x509_name; - -/** - * Container for a sequence of ASN.1 items - */ -typedef asn1_sequence x509_sequence; - -/** Container for date and time (precision in seconds). */ -typedef struct _x509_time -{ - int year, mon, day; /**< Date. */ - int hour, min, sec; /**< Time. */ -} -x509_time; - -/** \} name Structures for parsing X.509 certificates, CRLs and CSRs */ -/** \} addtogroup x509_module */ - -/** - * \brief Store the certificate DN in printable form into buf; - * no more than size characters will be written. - * - * \param buf Buffer to write to - * \param size Maximum size of buffer - * \param dn The X509 name to represent - * - * \return The amount of data written to the buffer, or -1 in - * case of an error. - */ -int x509_dn_gets( char *buf, size_t size, const x509_name *dn ); - -/** - * \brief Store the certificate serial in printable form into buf; - * no more than size characters will be written. - * - * \param buf Buffer to write to - * \param size Maximum size of buffer - * \param serial The X509 serial to represent - * - * \return The amount of data written to the buffer, or -1 in - * case of an error. - */ -int x509_serial_gets( char *buf, size_t size, const x509_buf *serial ); - -/** - * \brief Give an known OID, return its descriptive string. - * (Deprecated. Use oid_get_extended_key_usage() instead.) - * Warning: only works for extended_key_usage OIDs! - * - * \param oid buffer containing the oid - * - * \return Return a string if the OID is known, - * or NULL otherwise. - */ -const char *x509_oid_get_description( x509_buf *oid ); - -/** - * \brief Give an OID, return a string version of its OID number. - * (Deprecated. Use oid_get_numeric_string() instead) - * - * \param buf Buffer to write to - * \param size Maximum size of buffer - * \param oid Buffer containing the OID - * - * \return Length of the string written (excluding final NULL) or - * POLARSSL_ERR_OID_BUF_TO_SMALL in case of error - */ -int x509_oid_get_numeric_string( char *buf, size_t size, x509_buf *oid ); - -/** - * \brief Check a given x509_time against the system time and check - * if it is not expired. - * - * \param time x509_time to check - * - * \return 0 if the x509_time is still valid, - * 1 otherwise. - */ -int x509_time_expired( const x509_time *time ); - -/** - * \brief Check a given x509_time against the system time and check - * if it is not from the future. - * - * \param time x509_time to check - * - * \return 0 if the x509_time is already valid, - * 1 otherwise. - */ -int x509_time_future( const x509_time *time ); - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int x509_self_test( int verbose ); - -/* - * Internal module functions. You probably do not want to use these unless you - * know you do. - */ -int x509_get_name( unsigned char **p, const unsigned char *end, - x509_name *cur ); -int x509_get_alg_null( unsigned char **p, const unsigned char *end, - x509_buf *alg ); -int x509_get_alg( unsigned char **p, const unsigned char *end, - x509_buf *alg, x509_buf *params ); -#if defined(POLARSSL_X509_RSASSA_PSS_SUPPORT) -int x509_get_rsassa_pss_params( const x509_buf *params, - md_type_t *md_alg, md_type_t *mgf_md, - int *salt_len ); -#endif -int x509_get_sig( unsigned char **p, const unsigned char *end, x509_buf *sig ); -int x509_get_sig_alg( const x509_buf *sig_oid, const x509_buf *sig_params, - md_type_t *md_alg, pk_type_t *pk_alg, - void **sig_opts ); -int x509_get_time( unsigned char **p, const unsigned char *end, - x509_time *time ); -int x509_get_serial( unsigned char **p, const unsigned char *end, - x509_buf *serial ); -int x509_get_ext( unsigned char **p, const unsigned char *end, - x509_buf *ext, int tag ); -int x509_load_file( const char *path, unsigned char **buf, size_t *n ); -int x509_sig_alg_gets( char *buf, size_t size, const x509_buf *sig_oid, - pk_type_t pk_alg, md_type_t md_alg, - const void *sig_opts ); -int x509_key_size_helper( char *buf, size_t size, const char *name ); -int x509_string_to_names( asn1_named_data **head, const char *name ); -int x509_set_extension( asn1_named_data **head, const char *oid, size_t oid_len, - int critical, const unsigned char *val, - size_t val_len ); -int x509_write_extensions( unsigned char **p, unsigned char *start, - asn1_named_data *first ); -int x509_write_names( unsigned char **p, unsigned char *start, - asn1_named_data *first ); -int x509_write_sig( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len, - unsigned char *sig, size_t size ); - -#ifdef __cplusplus -} -#endif - -#endif /* x509.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/x509_crl.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/x509_crl.h deleted file mode 100644 index 9f597a8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/x509_crl.h +++ /dev/null @@ -1,162 +0,0 @@ -/** - * \file x509_crl.h - * - * \brief X.509 certificate revocation list parsing - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_X509_CRL_H -#define POLARSSL_X509_CRL_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include "x509.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \addtogroup x509_module - * \{ */ - -/** - * \name Structures and functions for parsing CRLs - * \{ - */ - -/** - * Certificate revocation list entry. - * Contains the CA-specific serial numbers and revocation dates. - */ -typedef struct _x509_crl_entry -{ - x509_buf raw; - - x509_buf serial; - - x509_time revocation_date; - - x509_buf entry_ext; - - struct _x509_crl_entry *next; -} -x509_crl_entry; - -/** - * Certificate revocation list structure. - * Every CRL may have multiple entries. - */ -typedef struct _x509_crl -{ - x509_buf raw; /**< The raw certificate data (DER). */ - x509_buf tbs; /**< The raw certificate body (DER). The part that is To Be Signed. */ - - int version; /**< CRL version (1=v1, 2=v2) */ - x509_buf sig_oid1; - - x509_buf issuer_raw; /**< The raw issuer data (DER). */ - - x509_name issuer; /**< The parsed issuer data (named information object). */ - - x509_time this_update; - x509_time next_update; - - x509_crl_entry entry; /**< The CRL entries containing the certificate revocation times for this CA. */ - - x509_buf crl_ext; - - x509_buf sig_oid2; - x509_buf sig; - md_type_t sig_md; /**< Internal representation of the MD algorithm of the signature algorithm, e.g. POLARSSL_MD_SHA256 */ - pk_type_t sig_pk; /**< Internal representation of the Public Key algorithm of the signature algorithm, e.g. POLARSSL_PK_RSA */ - void *sig_opts; /**< Signature options to be passed to pk_verify_ext(), e.g. for RSASSA-PSS */ - - struct _x509_crl *next; -} -x509_crl; - -/** - * \brief Parse one or more CRLs and add them - * to the chained list - * - * \param chain points to the start of the chain - * \param buf buffer holding the CRL data - * \param buflen size of the buffer - * - * \return 0 if successful, or a specific X509 or PEM error code - */ -int x509_crl_parse( x509_crl *chain, const unsigned char *buf, size_t buflen ); - -#if defined(POLARSSL_FS_IO) -/** - * \brief Load one or more CRLs and add them - * to the chained list - * - * \param chain points to the start of the chain - * \param path filename to read the CRLs from - * - * \return 0 if successful, or a specific X509 or PEM error code - */ -int x509_crl_parse_file( x509_crl *chain, const char *path ); -#endif /* POLARSSL_FS_IO */ - -/** - * \brief Returns an informational string about the CRL. - * - * \param buf Buffer to write to - * \param size Maximum size of buffer - * \param prefix A line prefix - * \param crl The X509 CRL to represent - * - * \return The amount of data written to the buffer, or -1 in - * case of an error. - */ -int x509_crl_info( char *buf, size_t size, const char *prefix, - const x509_crl *crl ); - -/** - * \brief Initialize a CRL (chain) - * - * \param crl CRL chain to initialize - */ -void x509_crl_init( x509_crl *crl ); - -/** - * \brief Unallocate all CRL data - * - * \param crl CRL chain to free - */ -void x509_crl_free( x509_crl *crl ); - -/* \} name */ -/* \} addtogroup x509_module */ - -#ifdef __cplusplus -} -#endif - -#endif /* x509_crl.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/x509_crt.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/x509_crt.h deleted file mode 100644 index 4bf8e56..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/x509_crt.h +++ /dev/null @@ -1,558 +0,0 @@ -/** - * \file x509_crt.h - * - * \brief X.509 certificate parsing and writing - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_X509_CRT_H -#define POLARSSL_X509_CRT_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include "x509.h" - -#include "x509_crl.h" - -/** - * \addtogroup x509_module - * \{ - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \name Structures and functions for parsing and writing X.509 certificates - * \{ - */ - -/** - * Container for an X.509 certificate. The certificate may be chained. - */ -typedef struct _x509_crt -{ - x509_buf raw; /**< The raw certificate data (DER). */ - x509_buf tbs; /**< The raw certificate body (DER). The part that is To Be Signed. */ - - int version; /**< The X.509 version. (1=v1, 2=v2, 3=v3) */ - x509_buf serial; /**< Unique id for certificate issued by a specific CA. */ - x509_buf sig_oid1; /**< Signature algorithm, e.g. sha1RSA */ - - x509_buf issuer_raw; /**< The raw issuer data (DER). Used for quick comparison. */ - x509_buf subject_raw; /**< The raw subject data (DER). Used for quick comparison. */ - - x509_name issuer; /**< The parsed issuer data (named information object). */ - x509_name subject; /**< The parsed subject data (named information object). */ - - x509_time valid_from; /**< Start time of certificate validity. */ - x509_time valid_to; /**< End time of certificate validity. */ - - pk_context pk; /**< Container for the public key context. */ - - x509_buf issuer_id; /**< Optional X.509 v2/v3 issuer unique identifier. */ - x509_buf subject_id; /**< Optional X.509 v2/v3 subject unique identifier. */ - x509_buf v3_ext; /**< Optional X.509 v3 extensions. */ - x509_sequence subject_alt_names; /**< Optional list of Subject Alternative Names (Only dNSName supported). */ - - int ext_types; /**< Bit string containing detected and parsed extensions */ - int ca_istrue; /**< Optional Basic Constraint extension value: 1 if this certificate belongs to a CA, 0 otherwise. */ - int max_pathlen; /**< Optional Basic Constraint extension value: The maximum path length to the root certificate. Path length is 1 higher than RFC 5280 'meaning', so 1+ */ - - unsigned char key_usage; /**< Optional key usage extension value: See the values in x509.h */ - - x509_sequence ext_key_usage; /**< Optional list of extended key usage OIDs. */ - - unsigned char ns_cert_type; /**< Optional Netscape certificate type extension value: See the values in x509.h */ - - x509_buf sig_oid2; /**< Signature algorithm. Must match sig_oid1. */ - x509_buf sig; /**< Signature: hash of the tbs part signed with the private key. */ - md_type_t sig_md; /**< Internal representation of the MD algorithm of the signature algorithm, e.g. POLARSSL_MD_SHA256 */ - pk_type_t sig_pk; /**< Internal representation of the Public Key algorithm of the signature algorithm, e.g. POLARSSL_PK_RSA */ - void *sig_opts; /**< Signature options to be passed to pk_verify_ext(), e.g. for RSASSA-PSS */ - - struct _x509_crt *next; /**< Next certificate in the CA-chain. */ -} -x509_crt; - -#define X509_CRT_VERSION_1 0 -#define X509_CRT_VERSION_2 1 -#define X509_CRT_VERSION_3 2 - -#define X509_RFC5280_MAX_SERIAL_LEN 32 -#define X509_RFC5280_UTC_TIME_LEN 15 - -/** - * Container for writing a certificate (CRT) - */ -typedef struct _x509write_cert -{ - int version; - mpi serial; - pk_context *subject_key; - pk_context *issuer_key; - asn1_named_data *subject; - asn1_named_data *issuer; - md_type_t md_alg; - char not_before[X509_RFC5280_UTC_TIME_LEN + 1]; - char not_after[X509_RFC5280_UTC_TIME_LEN + 1]; - asn1_named_data *extensions; -} -x509write_cert; - -#if defined(POLARSSL_X509_CRT_PARSE_C) -/** - * \brief Parse a single DER formatted certificate and add it - * to the chained list. - * - * \param chain points to the start of the chain - * \param buf buffer holding the certificate DER data - * \param buflen size of the buffer - * - * \return 0 if successful, or a specific X509 or PEM error code - */ -int x509_crt_parse_der( x509_crt *chain, const unsigned char *buf, - size_t buflen ); - -/** - * \brief Parse one or more certificates and add them - * to the chained list. Parses permissively. If some - * certificates can be parsed, the result is the number - * of failed certificates it encountered. If none complete - * correctly, the first error is returned. - * - * \param chain points to the start of the chain - * \param buf buffer holding the certificate data - * \param buflen size of the buffer - * - * \return 0 if all certificates parsed successfully, a positive number - * if partly successful or a specific X509 or PEM error code - */ -int x509_crt_parse( x509_crt *chain, const unsigned char *buf, size_t buflen ); - -#if defined(POLARSSL_FS_IO) -/** - * \brief Load one or more certificates and add them - * to the chained list. Parses permissively. If some - * certificates can be parsed, the result is the number - * of failed certificates it encountered. If none complete - * correctly, the first error is returned. - * - * \param chain points to the start of the chain - * \param path filename to read the certificates from - * - * \return 0 if all certificates parsed successfully, a positive number - * if partly successful or a specific X509 or PEM error code - */ -int x509_crt_parse_file( x509_crt *chain, const char *path ); - -/** - * \brief Load one or more certificate files from a path and add them - * to the chained list. Parses permissively. If some - * certificates can be parsed, the result is the number - * of failed certificates it encountered. If none complete - * correctly, the first error is returned. - * - * \warning This function is NOT thread-safe unless - * POLARSSL_THREADING_PTHREADS is defined. If you're using an - * alternative threading implementation, you should either use - * this function only in the main thread, or mutex it. - * - * \param chain points to the start of the chain - * \param path directory / folder to read the certificate files from - * - * \return 0 if all certificates parsed successfully, a positive number - * if partly successful or a specific X509 or PEM error code - */ -int x509_crt_parse_path( x509_crt *chain, const char *path ); -#endif /* POLARSSL_FS_IO */ - -/** - * \brief Returns an informational string about the - * certificate. - * - * \param buf Buffer to write to - * \param size Maximum size of buffer - * \param prefix A line prefix - * \param crt The X509 certificate to represent - * - * \return The amount of data written to the buffer, or -1 in - * case of an error. - */ -int x509_crt_info( char *buf, size_t size, const char *prefix, - const x509_crt *crt ); - -/** - * \brief Verify the certificate signature - * - * The verify callback is a user-supplied callback that - * can clear / modify / add flags for a certificate. If set, - * the verification callback is called for each - * certificate in the chain (from the trust-ca down to the - * presented crt). The parameters for the callback are: - * (void *parameter, x509_crt *crt, int certificate_depth, - * int *flags). With the flags representing current flags for - * that specific certificate and the certificate depth from - * the bottom (Peer cert depth = 0). - * - * All flags left after returning from the callback - * are also returned to the application. The function should - * return 0 for anything but a fatal error. - * - * \param crt a certificate to be verified - * \param trust_ca the trusted CA chain - * \param ca_crl the CRL chain for trusted CA's - * \param cn expected Common Name (can be set to - * NULL if the CN must not be verified) - * \param flags result of the verification - * \param f_vrfy verification function - * \param p_vrfy verification parameter - * - * \return 0 if successful or POLARSSL_ERR_X509_SIG_VERIFY_FAILED, - * in which case *flags will have one or more of - * the following values set: - * BADCERT_EXPIRED -- - * BADCERT_REVOKED -- - * BADCERT_CN_MISMATCH -- - * BADCERT_NOT_TRUSTED - * or another error in case of a fatal error encountered - * during the verification process. - */ -int x509_crt_verify( x509_crt *crt, - x509_crt *trust_ca, - x509_crl *ca_crl, - const char *cn, int *flags, - int (*f_vrfy)(void *, x509_crt *, int, int *), - void *p_vrfy ); - -#if defined(POLARSSL_X509_CHECK_KEY_USAGE) -/** - * \brief Check usage of certificate against keyUsage extension. - * - * \param crt Leaf certificate used. - * \param usage Intended usage(s) (eg KU_KEY_ENCIPHERMENT before using the - * certificate to perform an RSA key exchange). - * - * \return 0 is these uses of the certificate are allowed, - * POLARSSL_ERR_X509_BAD_INPUT_DATA if the keyUsage extension - * is present but does not contain all the bits set in the - * usage argument. - * - * \note You should only call this function on leaf certificates, on - * (intermediate) CAs the keyUsage extension is automatically - * checked by \c x509_crt_verify(). - */ -int x509_crt_check_key_usage( const x509_crt *crt, int usage ); -#endif /* POLARSSL_X509_CHECK_KEY_USAGE) */ - -#if defined(POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE) -/** - * \brief Check usage of certificate against extentedJeyUsage. - * - * \param crt Leaf certificate used. - * \param usage_oid Intended usage (eg OID_SERVER_AUTH or OID_CLIENT_AUTH). - * \param usage_len Length of usage_oid (eg given by OID_SIZE()). - * - * \return 0 is this use of the certificate is allowed, - * POLARSSL_ERR_X509_BAD_INPUT_DATA if not. - * - * \note Usually only makes sense on leaf certificates. - */ -int x509_crt_check_extended_key_usage( const x509_crt *crt, - const char *usage_oid, - size_t usage_len ); -#endif /* POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE) */ - -#if defined(POLARSSL_X509_CRL_PARSE_C) -/** - * \brief Verify the certificate revocation status - * - * \param crt a certificate to be verified - * \param crl the CRL to verify against - * - * \return 1 if the certificate is revoked, 0 otherwise - * - */ -int x509_crt_revoked( const x509_crt *crt, const x509_crl *crl ); -#endif /* POLARSSL_X509_CRL_PARSE_C */ - -/** - * \brief Initialize a certificate (chain) - * - * \param crt Certificate chain to initialize - */ -void x509_crt_init( x509_crt *crt ); - -/** - * \brief Unallocate all certificate data - * - * \param crt Certificate chain to free - */ -void x509_crt_free( x509_crt *crt ); -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -/* \} name */ -/* \} addtogroup x509_module */ - -#if defined(POLARSSL_X509_CRT_WRITE_C) -/** - * \brief Initialize a CRT writing context - * - * \param ctx CRT context to initialize - */ -void x509write_crt_init( x509write_cert *ctx ); - -/** - * \brief Set the verion for a Certificate - * Default: X509_CRT_VERSION_3 - * - * \param ctx CRT context to use - * \param version version to set (X509_CRT_VERSION_1, X509_CRT_VERSION_2 or - * X509_CRT_VERSION_3) - */ -void x509write_crt_set_version( x509write_cert *ctx, int version ); - -/** - * \brief Set the serial number for a Certificate. - * - * \param ctx CRT context to use - * \param serial serial number to set - * - * \return 0 if successful - */ -int x509write_crt_set_serial( x509write_cert *ctx, const mpi *serial ); - -/** - * \brief Set the validity period for a Certificate - * Timestamps should be in string format for UTC timezone - * i.e. "YYYYMMDDhhmmss" - * e.g. "20131231235959" for December 31st 2013 - * at 23:59:59 - * - * \param ctx CRT context to use - * \param not_before not_before timestamp - * \param not_after not_after timestamp - * - * \return 0 if timestamp was parsed successfully, or - * a specific error code - */ -int x509write_crt_set_validity( x509write_cert *ctx, const char *not_before, - const char *not_after ); - -/** - * \brief Set the issuer name for a Certificate - * Issuer names should contain a comma-separated list - * of OID types and values: - * e.g. "C=NL,O=Offspark,CN=PolarSSL CA" - * - * \param ctx CRT context to use - * \param issuer_name issuer name to set - * - * \return 0 if issuer name was parsed successfully, or - * a specific error code - */ -int x509write_crt_set_issuer_name( x509write_cert *ctx, - const char *issuer_name ); - -/** - * \brief Set the subject name for a Certificate - * Subject names should contain a comma-separated list - * of OID types and values: - * e.g. "C=NL,O=Offspark,CN=PolarSSL Server 1" - * - * \param ctx CRT context to use - * \param subject_name subject name to set - * - * \return 0 if subject name was parsed successfully, or - * a specific error code - */ -int x509write_crt_set_subject_name( x509write_cert *ctx, - const char *subject_name ); - -/** - * \brief Set the subject public key for the certificate - * - * \param ctx CRT context to use - * \param key public key to include - */ -void x509write_crt_set_subject_key( x509write_cert *ctx, pk_context *key ); - -/** - * \brief Set the issuer key used for signing the certificate - * - * \param ctx CRT context to use - * \param key private key to sign with - */ -void x509write_crt_set_issuer_key( x509write_cert *ctx, pk_context *key ); - -/** - * \brief Set the MD algorithm to use for the signature - * (e.g. POLARSSL_MD_SHA1) - * - * \param ctx CRT context to use - * \param md_alg MD algorithm to use - */ -void x509write_crt_set_md_alg( x509write_cert *ctx, md_type_t md_alg ); - -/** - * \brief Generic function to add to or replace an extension in the - * CRT - * - * \param ctx CRT context to use - * \param oid OID of the extension - * \param oid_len length of the OID - * \param critical if the extension is critical (per the RFC's definition) - * \param val value of the extension OCTET STRING - * \param val_len length of the value data - * - * \return 0 if successful, or a POLARSSL_ERR_X509WRITE_MALLOC_FAILED - */ -int x509write_crt_set_extension( x509write_cert *ctx, - const char *oid, size_t oid_len, - int critical, - const unsigned char *val, size_t val_len ); - -/** - * \brief Set the basicConstraints extension for a CRT - * - * \param ctx CRT context to use - * \param is_ca is this a CA certificate - * \param max_pathlen maximum length of certificate chains below this - * certificate (only for CA certificates, -1 is - * inlimited) - * - * \return 0 if successful, or a POLARSSL_ERR_X509WRITE_MALLOC_FAILED - */ -int x509write_crt_set_basic_constraints( x509write_cert *ctx, - int is_ca, int max_pathlen ); - -#if defined(POLARSSL_SHA1_C) -/** - * \brief Set the subjectKeyIdentifier extension for a CRT - * Requires that x509write_crt_set_subject_key() has been - * called before - * - * \param ctx CRT context to use - * - * \return 0 if successful, or a POLARSSL_ERR_X509WRITE_MALLOC_FAILED - */ -int x509write_crt_set_subject_key_identifier( x509write_cert *ctx ); - -/** - * \brief Set the authorityKeyIdentifier extension for a CRT - * Requires that x509write_crt_set_issuer_key() has been - * called before - * - * \param ctx CRT context to use - * - * \return 0 if successful, or a POLARSSL_ERR_X509WRITE_MALLOC_FAILED - */ -int x509write_crt_set_authority_key_identifier( x509write_cert *ctx ); -#endif /* POLARSSL_SHA1_C */ - -/** - * \brief Set the Key Usage Extension flags - * (e.g. KU_DIGITAL_SIGNATURE | KU_KEY_CERT_SIGN) - * - * \param ctx CRT context to use - * \param key_usage key usage flags to set - * - * \return 0 if successful, or POLARSSL_ERR_X509WRITE_MALLOC_FAILED - */ -int x509write_crt_set_key_usage( x509write_cert *ctx, unsigned char key_usage ); - -/** - * \brief Set the Netscape Cert Type flags - * (e.g. NS_CERT_TYPE_SSL_CLIENT | NS_CERT_TYPE_EMAIL) - * - * \param ctx CRT context to use - * \param ns_cert_type Netscape Cert Type flags to set - * - * \return 0 if successful, or POLARSSL_ERR_X509WRITE_MALLOC_FAILED - */ -int x509write_crt_set_ns_cert_type( x509write_cert *ctx, - unsigned char ns_cert_type ); - -/** - * \brief Free the contents of a CRT write context - * - * \param ctx CRT context to free - */ -void x509write_crt_free( x509write_cert *ctx ); - -/** - * \brief Write a built up certificate to a X509 DER structure - * Note: data is written at the end of the buffer! Use the - * return value to determine where you should start - * using the buffer - * - * \param ctx certificate to write away - * \param buf buffer to write to - * \param size size of the buffer - * \param f_rng RNG function (for signature, see note) - * \param p_rng RNG parameter - * - * \return length of data written if successful, or a specific - * error code - * - * \note f_rng may be NULL if RSA is used for signature and the - * signature is made offline (otherwise f_rng is desirable - * for countermeasures against timing attacks). - * ECDSA signatures always require a non-NULL f_rng. - */ -int x509write_crt_der( x509write_cert *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -#if defined(POLARSSL_PEM_WRITE_C) -/** - * \brief Write a built up certificate to a X509 PEM string - * - * \param ctx certificate to write away - * \param buf buffer to write to - * \param size size of the buffer - * \param f_rng RNG function (for signature, see note) - * \param p_rng RNG parameter - * - * \return 0 successful, or a specific error code - * - * \note f_rng may be NULL if RSA is used for signature and the - * signature is made offline (otherwise f_rng is desirable - * for countermeasures against timing attacks). - * ECDSA signatures always require a non-NULL f_rng. - */ -int x509write_crt_pem( x509write_cert *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); -#endif /* POLARSSL_PEM_WRITE_C */ -#endif /* POLARSSL_X509_CRT_WRITE_C */ - -#ifdef __cplusplus -} -#endif - -#endif /* x509_crt.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/x509_csr.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/x509_csr.h deleted file mode 100644 index 6591e38..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/x509_csr.h +++ /dev/null @@ -1,295 +0,0 @@ -/** - * \file x509_csr.h - * - * \brief X.509 certificate signing request parsing and writing - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_X509_CSR_H -#define POLARSSL_X509_CSR_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include "x509.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \addtogroup x509_module - * \{ */ - -/** - * \name Structures and functions for X.509 Certificate Signing Requests (CSR) - * \{ - */ - -/** - * Certificate Signing Request (CSR) structure. - */ -typedef struct _x509_csr -{ - x509_buf raw; /**< The raw CSR data (DER). */ - x509_buf cri; /**< The raw CertificateRequestInfo body (DER). */ - - int version; /**< CSR version (1=v1). */ - - x509_buf subject_raw; /**< The raw subject data (DER). */ - x509_name subject; /**< The parsed subject data (named information object). */ - - pk_context pk; /**< Container for the public key context. */ - - x509_buf sig_oid; - x509_buf sig; - md_type_t sig_md; /**< Internal representation of the MD algorithm of the signature algorithm, e.g. POLARSSL_MD_SHA256 */ - pk_type_t sig_pk; /**< Internal representation of the Public Key algorithm of the signature algorithm, e.g. POLARSSL_PK_RSA */ - void *sig_opts; /**< Signature options to be passed to pk_verify_ext(), e.g. for RSASSA-PSS */ -} -x509_csr; - -/** - * Container for writing a CSR - */ -typedef struct _x509write_csr -{ - pk_context *key; - asn1_named_data *subject; - md_type_t md_alg; - asn1_named_data *extensions; -} -x509write_csr; - -#if defined(POLARSSL_X509_CSR_PARSE_C) -/** - * \brief Load a Certificate Signing Request (CSR) in DER format - * - * \param csr CSR context to fill - * \param buf buffer holding the CRL data - * \param buflen size of the buffer - * - * \return 0 if successful, or a specific X509 error code - */ -int x509_csr_parse_der( x509_csr *csr, - const unsigned char *buf, size_t buflen ); - -/** - * \brief Load a Certificate Signing Request (CSR), DER or PEM format - * - * \param csr CSR context to fill - * \param buf buffer holding the CRL data - * \param buflen size of the buffer - * - * \return 0 if successful, or a specific X509 or PEM error code - */ -int x509_csr_parse( x509_csr *csr, const unsigned char *buf, size_t buflen ); - -#if defined(POLARSSL_FS_IO) -/** - * \brief Load a Certificate Signing Request (CSR) - * - * \param csr CSR context to fill - * \param path filename to read the CSR from - * - * \return 0 if successful, or a specific X509 or PEM error code - */ -int x509_csr_parse_file( x509_csr *csr, const char *path ); -#endif /* POLARSSL_FS_IO */ - -/** - * \brief Returns an informational string about the - * CSR. - * - * \param buf Buffer to write to - * \param size Maximum size of buffer - * \param prefix A line prefix - * \param csr The X509 CSR to represent - * - * \return The length of the string written (exluding the terminating - * null byte), or a negative value in case of an error. - */ -int x509_csr_info( char *buf, size_t size, const char *prefix, - const x509_csr *csr ); - -/** - * \brief Initialize a CSR - * - * \param csr CSR to initialize - */ -void x509_csr_init( x509_csr *csr ); - -/** - * \brief Unallocate all CSR data - * - * \param csr CSR to free - */ -void x509_csr_free( x509_csr *csr ); -#endif /* POLARSSL_X509_CSR_PARSE_C */ - -/* \} name */ -/* \} addtogroup x509_module */ - -#if defined(POLARSSL_X509_CSR_WRITE_C) -/** - * \brief Initialize a CSR context - * - * \param ctx CSR context to initialize - */ -void x509write_csr_init( x509write_csr *ctx ); - -/** - * \brief Set the subject name for a CSR - * Subject names should contain a comma-separated list - * of OID types and values: - * e.g. "C=NL,O=Offspark,CN=PolarSSL Server 1" - * - * \param ctx CSR context to use - * \param subject_name subject name to set - * - * \return 0 if subject name was parsed successfully, or - * a specific error code - */ -int x509write_csr_set_subject_name( x509write_csr *ctx, - const char *subject_name ); - -/** - * \brief Set the key for a CSR (public key will be included, - * private key used to sign the CSR when writing it) - * - * \param ctx CSR context to use - * \param key Asymetric key to include - */ -void x509write_csr_set_key( x509write_csr *ctx, pk_context *key ); - -/** - * \brief Set the MD algorithm to use for the signature - * (e.g. POLARSSL_MD_SHA1) - * - * \param ctx CSR context to use - * \param md_alg MD algorithm to use - */ -void x509write_csr_set_md_alg( x509write_csr *ctx, md_type_t md_alg ); - -/** - * \brief Set the Key Usage Extension flags - * (e.g. KU_DIGITAL_SIGNATURE | KU_KEY_CERT_SIGN) - * - * \param ctx CSR context to use - * \param key_usage key usage flags to set - * - * \return 0 if successful, or POLARSSL_ERR_X509WRITE_MALLOC_FAILED - */ -int x509write_csr_set_key_usage( x509write_csr *ctx, unsigned char key_usage ); - -/** - * \brief Set the Netscape Cert Type flags - * (e.g. NS_CERT_TYPE_SSL_CLIENT | NS_CERT_TYPE_EMAIL) - * - * \param ctx CSR context to use - * \param ns_cert_type Netscape Cert Type flags to set - * - * \return 0 if successful, or POLARSSL_ERR_X509WRITE_MALLOC_FAILED - */ -int x509write_csr_set_ns_cert_type( x509write_csr *ctx, - unsigned char ns_cert_type ); - -/** - * \brief Generic function to add to or replace an extension in the - * CSR - * - * \param ctx CSR context to use - * \param oid OID of the extension - * \param oid_len length of the OID - * \param val value of the extension OCTET STRING - * \param val_len length of the value data - * - * \return 0 if successful, or a POLARSSL_ERR_X509WRITE_MALLOC_FAILED - */ -int x509write_csr_set_extension( x509write_csr *ctx, - const char *oid, size_t oid_len, - const unsigned char *val, size_t val_len ); - -/** - * \brief Free the contents of a CSR context - * - * \param ctx CSR context to free - */ -void x509write_csr_free( x509write_csr *ctx ); - -/** - * \brief Write a CSR (Certificate Signing Request) to a - * DER structure - * Note: data is written at the end of the buffer! Use the - * return value to determine where you should start - * using the buffer - * - * \param ctx CSR to write away - * \param buf buffer to write to - * \param size size of the buffer - * \param f_rng RNG function (for signature, see note) - * \param p_rng RNG parameter - * - * \return length of data written if successful, or a specific - * error code - * - * \note f_rng may be NULL if RSA is used for signature and the - * signature is made offline (otherwise f_rng is desirable - * for countermeasures against timing attacks). - * ECDSA signatures always require a non-NULL f_rng. - */ -int x509write_csr_der( x509write_csr *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -#if defined(POLARSSL_PEM_WRITE_C) -/** - * \brief Write a CSR (Certificate Signing Request) to a - * PEM string - * - * \param ctx CSR to write away - * \param buf buffer to write to - * \param size size of the buffer - * \param f_rng RNG function (for signature, see note) - * \param p_rng RNG parameter - * - * \return 0 successful, or a specific error code - * - * \note f_rng may be NULL if RSA is used for signature and the - * signature is made offline (otherwise f_rng is desirable - * for couermeasures against timing attacks). - * ECDSA signatures always require a non-NULL f_rng. - */ -int x509write_csr_pem( x509write_csr *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); -#endif /* POLARSSL_PEM_WRITE_C */ -#endif /* POLARSSL_X509_CSR_WRITE_C */ - -#ifdef __cplusplus -} -#endif - -#endif /* x509_csr.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/xtea.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/xtea.h deleted file mode 100644 index 794c5ef..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/include/polarssl/xtea.h +++ /dev/null @@ -1,149 +0,0 @@ -/** - * \file xtea.h - * - * \brief XTEA block cipher (32-bit) - * - * Copyright (C) 2006-2013, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#ifndef POLARSSL_XTEA_H -#define POLARSSL_XTEA_H - -#if !defined(POLARSSL_CONFIG_FILE) -#include "config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#include - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#define XTEA_ENCRYPT 1 -#define XTEA_DECRYPT 0 - -#define POLARSSL_ERR_XTEA_INVALID_INPUT_LENGTH -0x0028 /**< The data input has an invalid length. */ - -#if !defined(POLARSSL_XTEA_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief XTEA context structure - */ -typedef struct -{ - uint32_t k[4]; /*!< key */ -} -xtea_context; - -/** - * \brief Initialize XTEA context - * - * \param ctx XTEA context to be initialized - */ -void xtea_init( xtea_context *ctx ); - -/** - * \brief Clear XTEA context - * - * \param ctx XTEA context to be cleared - */ -void xtea_free( xtea_context *ctx ); - -/** - * \brief XTEA key schedule - * - * \param ctx XTEA context to be initialized - * \param key the secret key - */ -void xtea_setup( xtea_context *ctx, const unsigned char key[16] ); - -/** - * \brief XTEA cipher function - * - * \param ctx XTEA context - * \param mode XTEA_ENCRYPT or XTEA_DECRYPT - * \param input 8-byte input block - * \param output 8-byte output block - * - * \return 0 if successful - */ -int xtea_crypt_ecb( xtea_context *ctx, - int mode, - const unsigned char input[8], - unsigned char output[8] ); - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/** - * \brief XTEA CBC cipher function - * - * \param ctx XTEA context - * \param mode XTEA_ENCRYPT or XTEA_DECRYPT - * \param length the length of input, multiple of 8 - * \param iv initialization vector for CBC mode - * \param input input block - * \param output output block - * - * \return 0 if successful, - * POLARSSL_ERR_XTEA_INVALID_INPUT_LENGTH if the length % 8 != 0 - */ -int xtea_crypt_cbc( xtea_context *ctx, - int mode, - size_t length, - unsigned char iv[8], - const unsigned char *input, - unsigned char *output); -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#ifdef __cplusplus -} -#endif - -#else /* POLARSSL_XTEA_ALT */ -#include "xtea_alt.h" -#endif /* POLARSSL_XTEA_ALT */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int xtea_self_test( int verbose ); - -#ifdef __cplusplus -} -#endif - -#endif /* xtea.h */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/.gitignore b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/.gitignore deleted file mode 100644 index 9d80fa4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.o -libpolarssl* diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/CMakeLists.txt b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/CMakeLists.txt deleted file mode 100644 index bc986ee..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/CMakeLists.txt +++ /dev/null @@ -1,136 +0,0 @@ -option(USE_STATIC_POLARSSL_LIBRARY "Build PolarSSL static library." ON) -option(USE_SHARED_POLARSSL_LIBRARY "Build PolarSSL shared library." OFF) -option(LINK_WITH_PTHREAD "Explicitly link PolarSSL library to pthread." OFF) - -set(src - aes.c - aesni.c - arc4.c - asn1parse.c - asn1write.c - base64.c - bignum.c - blowfish.c - camellia.c - ccm.c - certs.c - cipher.c - cipher_wrap.c - ctr_drbg.c - debug.c - des.c - dhm.c - ecp.c - ecp_curves.c - ecdh.c - ecdsa.c - entropy.c - entropy_poll.c - error.c - gcm.c - havege.c - hmac_drbg.c - md.c - md_wrap.c - md2.c - md4.c - md5.c - memory_buffer_alloc.c - net.c - oid.c - padlock.c - pbkdf2.c - pem.c - pkcs5.c - pkcs11.c - pkcs12.c - pk.c - pk_wrap.c - pkparse.c - pkwrite.c - platform.c - ripemd160.c - rsa.c - sha1.c - sha256.c - sha512.c - ssl_cache.c - ssl_ciphersuites.c - ssl_cli.c - ssl_srv.c - ssl_tls.c - threading.c - timing.c - version.c - version_features.c - x509.c - x509_crt.c - x509_crl.c - x509_csr.c - x509_create.c - x509write_crt.c - x509write_csr.c - xtea.c -) - -if(WIN32) -set(libs ws2_32) -endif(WIN32) - -if(CMAKE_COMPILER_IS_GNUCC) - set(CMAKE_C_FLAGS_CHECK "${CMAKE_C_FLAGS_CHECK} -Wmissing-declarations -Wmissing-prototypes") - set(CMAKE_C_FLAGS_CHECKFULL "${CMAKE_C_FLAGS_CHECK} -Wcast-qual") -endif(CMAKE_COMPILER_IS_GNUCC) - -if(CMAKE_COMPILER_IS_CLANG) - set(CMAKE_C_FLAGS_CHECK "${CMAKE_C_FLAGS_CHECK} -Wmissing-declarations -Wmissing-prototypes") -endif(CMAKE_COMPILER_IS_CLANG) - -if (NOT USE_STATIC_POLARSSL_LIBRARY AND NOT USE_SHARED_POLARSSL_LIBRARY) - message(FATAL_ERROR "Need to choose static or shared polarssl build!") -endif(NOT USE_STATIC_POLARSSL_LIBRARY AND NOT USE_SHARED_POLARSSL_LIBRARY) - -if(USE_STATIC_POLARSSL_LIBRARY AND USE_SHARED_POLARSSL_LIBRARY) - # if we build both static an shared, then let - # tests and programs link to the shared lib target - set(polarssl_static_target "polarssl_static") -elseif(USE_STATIC_POLARSSL_LIBRARY) - set(polarssl_static_target "polarssl") -endif() - -if(USE_STATIC_POLARSSL_LIBRARY) - add_library(${polarssl_static_target} STATIC ${src}) - set_target_properties(${polarssl_static_target} PROPERTIES OUTPUT_NAME polarssl) - target_link_libraries(${polarssl_static_target} ${libs}) - - if(ZLIB_FOUND) - target_link_libraries(${polarssl_static_target} ${ZLIB_LIBRARIES}) - endif(ZLIB_FOUND) - - if(LINK_WITH_PTHREAD) - target_link_libraries(${polarssl_static_target} pthread) - endif() - - install(TARGETS ${polarssl_static_target} - DESTINATION ${LIB_INSTALL_DIR} - PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) -endif() - -if(USE_SHARED_POLARSSL_LIBRARY) - add_library(polarssl SHARED ${src}) - set_target_properties(polarssl PROPERTIES VERSION 1.3.8 SOVERSION 7) - - target_link_libraries(polarssl ${libs}) - - if(ZLIB_FOUND) - target_link_libraries(polarssl ${ZLIB_LIBRARIES}) - endif(ZLIB_FOUND) - - if(LINK_WITH_PTHREAD) - target_link_libraries(polarssl pthread) - endif() - - install(TARGETS polarssl - DESTINATION ${LIB_INSTALL_DIR} - PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) -endif(USE_SHARED_POLARSSL_LIBRARY) diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/Makefile b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/Makefile deleted file mode 100644 index d637417..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/Makefile +++ /dev/null @@ -1,110 +0,0 @@ - -# Also see "include/polarssl/config.h" - -# To compile on MinGW: add "-lws2_32" to LDFLAGS or define WINDOWS in your -# environment -# -CFLAGS += -I../include -D_FILE_OFFSET_BITS=64 -Wall -W -Wdeclaration-after-statement -OFLAGS = -O2 - -ifdef DEBUG -CFLAGS += -g3 -endif - -# MicroBlaze specific options: -# CFLAGS += -mno-xl-soft-mul -mxl-barrel-shift - -# To compile on Plan9: -# CFLAGS += -D_BSD_EXTENSION - -# To compile as a shared library: -ifdef SHARED -CFLAGS += -fPIC -endif - -SONAME=libpolarssl.so.7 - -DLEXT=so.7 -# OSX shared library extension: -# DLEXT=dylib - -# Windows shared library extension: -ifdef WINDOWS -DLEXT=dll -LDFLAGS += -lws2_32 -endif - -OBJS= aes.o aesni.o arc4.o \ - asn1parse.o \ - asn1write.o base64.o bignum.o \ - blowfish.o camellia.o ccm.o \ - certs.o cipher.o cipher_wrap.o \ - ctr_drbg.o debug.o des.o \ - dhm.o ecdh.o ecdsa.o \ - ecp.o ecp_curves.o \ - entropy.o entropy_poll.o \ - error.o gcm.o havege.o \ - hmac_drbg.o \ - md.o md_wrap.o md2.o \ - md4.o md5.o \ - memory_buffer_alloc.o net.o \ - oid.o \ - padlock.o pbkdf2.o pem.o \ - pkcs5.o pkcs11.o pkcs12.o \ - pk.o pk_wrap.o pkparse.o \ - pkwrite.o platform.o ripemd160.o \ - rsa.o sha1.o sha256.o \ - sha512.o ssl_cache.o ssl_cli.o \ - ssl_srv.o ssl_ciphersuites.o \ - ssl_tls.o threading.o timing.o \ - version.o version_features.o \ - x509.o x509_create.o \ - x509_crl.o x509_crt.o x509_csr.o \ - x509write_crt.o x509write_csr.o \ - xtea.o - -.SILENT: - -ifndef SHARED -all: static -else -all: shared -endif - -static: libpolarssl.a - -shared: libpolarssl.$(DLEXT) libpolarssl.so - -libpolarssl.a: $(OBJS) - echo " AR $@" - $(AR) r $@ $(OBJS) - echo " RL $@" - $(AR) s $@ - -libpolarssl.${DLEXT}: libpolarssl.a - echo " LD $@" - $(CC) ${LDFLAGS} -shared -Wl,-soname,$(SONAME) -o $@ $(OBJS) - -libpolarssl.so: libpolarssl.${DLEXT} - echo " LN $@ -> libpolarssl.${DLEXT}" - ln -sf libpolarssl.${DLEXT} $@ - -libpolarssl.dylib: libpolarssl.a - echo " LD $@" - $(CC) ${LDFLAGS} -dynamiclib -o $@ $(OBJS) - -libpolarssl.dll: libpolarssl.a - echo " LD $@" - $(CC) -shared -Wl,-soname,$@ -o $@ $(OBJS) -lws2_32 -lwinmm -lgdi32 - -.c.o: - echo " CC $<" - $(CC) $(CFLAGS) $(OFLAGS) -c $< - -clean: -ifndef WINDOWS - rm -f *.o libpolarssl.* -endif -ifdef WINDOWS - del /Q /F *.o libpolarssl.* -endif diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/aes.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/aes.c deleted file mode 100644 index 512c8b4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/aes.c +++ /dev/null @@ -1,1603 +0,0 @@ -/* - * FIPS-197 compliant AES implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The AES block cipher was designed by Vincent Rijmen and Joan Daemen. - * - * http://csrc.nist.gov/encryption/aes/rijndael/Rijndael.pdf - * http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#ifdef RTL_HW_CRYPTO -#include -#endif - -#if defined(POLARSSL_AES_C) - -#include "polarssl/aes.h" -#if defined(POLARSSL_PADLOCK_C) -#include "polarssl/padlock.h" -#endif -#if defined(POLARSSL_AESNI_C) -#include "polarssl/aesni.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -#if !defined(POLARSSL_AES_ALT) - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#ifdef SUPPORT_HW_SW_CRYPTO - -/* - * 32-bit integer manipulation macros (little endian) - */ -#ifndef GET_UINT32_LE -#define GET_UINT32_LE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] ) \ - | ( (uint32_t) (b)[(i) + 1] << 8 ) \ - | ( (uint32_t) (b)[(i) + 2] << 16 ) \ - | ( (uint32_t) (b)[(i) + 3] << 24 ); \ -} -#endif - -#ifndef PUT_UINT32_LE -#define PUT_UINT32_LE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) >> 24 ); \ -} -#endif - -#if defined(POLARSSL_PADLOCK_C) && \ - ( defined(POLARSSL_HAVE_X86) || defined(PADLOCK_ALIGN16) ) -static int aes_padlock_ace = -1; -#endif - -#if defined(POLARSSL_AES_ROM_TABLES) -/* - * Forward S-box - */ -static const unsigned char FSb[256] = -{ - 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, - 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, - 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, - 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, - 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, - 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, - 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, - 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, - 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, - 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, - 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, - 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, - 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, - 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, - 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, - 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, - 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, - 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, - 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, - 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, - 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, - 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, - 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, - 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, - 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, - 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, - 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, - 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, - 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, - 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, - 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, - 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 -}; - -/* - * Forward tables - */ -#define FT \ -\ - V(A5,63,63,C6), V(84,7C,7C,F8), V(99,77,77,EE), V(8D,7B,7B,F6), \ - V(0D,F2,F2,FF), V(BD,6B,6B,D6), V(B1,6F,6F,DE), V(54,C5,C5,91), \ - V(50,30,30,60), V(03,01,01,02), V(A9,67,67,CE), V(7D,2B,2B,56), \ - V(19,FE,FE,E7), V(62,D7,D7,B5), V(E6,AB,AB,4D), V(9A,76,76,EC), \ - V(45,CA,CA,8F), V(9D,82,82,1F), V(40,C9,C9,89), V(87,7D,7D,FA), \ - V(15,FA,FA,EF), V(EB,59,59,B2), V(C9,47,47,8E), V(0B,F0,F0,FB), \ - V(EC,AD,AD,41), V(67,D4,D4,B3), V(FD,A2,A2,5F), V(EA,AF,AF,45), \ - V(BF,9C,9C,23), V(F7,A4,A4,53), V(96,72,72,E4), V(5B,C0,C0,9B), \ - V(C2,B7,B7,75), V(1C,FD,FD,E1), V(AE,93,93,3D), V(6A,26,26,4C), \ - V(5A,36,36,6C), V(41,3F,3F,7E), V(02,F7,F7,F5), V(4F,CC,CC,83), \ - V(5C,34,34,68), V(F4,A5,A5,51), V(34,E5,E5,D1), V(08,F1,F1,F9), \ - V(93,71,71,E2), V(73,D8,D8,AB), V(53,31,31,62), V(3F,15,15,2A), \ - V(0C,04,04,08), V(52,C7,C7,95), V(65,23,23,46), V(5E,C3,C3,9D), \ - V(28,18,18,30), V(A1,96,96,37), V(0F,05,05,0A), V(B5,9A,9A,2F), \ - V(09,07,07,0E), V(36,12,12,24), V(9B,80,80,1B), V(3D,E2,E2,DF), \ - V(26,EB,EB,CD), V(69,27,27,4E), V(CD,B2,B2,7F), V(9F,75,75,EA), \ - V(1B,09,09,12), V(9E,83,83,1D), V(74,2C,2C,58), V(2E,1A,1A,34), \ - V(2D,1B,1B,36), V(B2,6E,6E,DC), V(EE,5A,5A,B4), V(FB,A0,A0,5B), \ - V(F6,52,52,A4), V(4D,3B,3B,76), V(61,D6,D6,B7), V(CE,B3,B3,7D), \ - V(7B,29,29,52), V(3E,E3,E3,DD), V(71,2F,2F,5E), V(97,84,84,13), \ - V(F5,53,53,A6), V(68,D1,D1,B9), V(00,00,00,00), V(2C,ED,ED,C1), \ - V(60,20,20,40), V(1F,FC,FC,E3), V(C8,B1,B1,79), V(ED,5B,5B,B6), \ - V(BE,6A,6A,D4), V(46,CB,CB,8D), V(D9,BE,BE,67), V(4B,39,39,72), \ - V(DE,4A,4A,94), V(D4,4C,4C,98), V(E8,58,58,B0), V(4A,CF,CF,85), \ - V(6B,D0,D0,BB), V(2A,EF,EF,C5), V(E5,AA,AA,4F), V(16,FB,FB,ED), \ - V(C5,43,43,86), V(D7,4D,4D,9A), V(55,33,33,66), V(94,85,85,11), \ - V(CF,45,45,8A), V(10,F9,F9,E9), V(06,02,02,04), V(81,7F,7F,FE), \ - V(F0,50,50,A0), V(44,3C,3C,78), V(BA,9F,9F,25), V(E3,A8,A8,4B), \ - V(F3,51,51,A2), V(FE,A3,A3,5D), V(C0,40,40,80), V(8A,8F,8F,05), \ - V(AD,92,92,3F), V(BC,9D,9D,21), V(48,38,38,70), V(04,F5,F5,F1), \ - V(DF,BC,BC,63), V(C1,B6,B6,77), V(75,DA,DA,AF), V(63,21,21,42), \ - V(30,10,10,20), V(1A,FF,FF,E5), V(0E,F3,F3,FD), V(6D,D2,D2,BF), \ - V(4C,CD,CD,81), V(14,0C,0C,18), V(35,13,13,26), V(2F,EC,EC,C3), \ - V(E1,5F,5F,BE), V(A2,97,97,35), V(CC,44,44,88), V(39,17,17,2E), \ - V(57,C4,C4,93), V(F2,A7,A7,55), V(82,7E,7E,FC), V(47,3D,3D,7A), \ - V(AC,64,64,C8), V(E7,5D,5D,BA), V(2B,19,19,32), V(95,73,73,E6), \ - V(A0,60,60,C0), V(98,81,81,19), V(D1,4F,4F,9E), V(7F,DC,DC,A3), \ - V(66,22,22,44), V(7E,2A,2A,54), V(AB,90,90,3B), V(83,88,88,0B), \ - V(CA,46,46,8C), V(29,EE,EE,C7), V(D3,B8,B8,6B), V(3C,14,14,28), \ - V(79,DE,DE,A7), V(E2,5E,5E,BC), V(1D,0B,0B,16), V(76,DB,DB,AD), \ - V(3B,E0,E0,DB), V(56,32,32,64), V(4E,3A,3A,74), V(1E,0A,0A,14), \ - V(DB,49,49,92), V(0A,06,06,0C), V(6C,24,24,48), V(E4,5C,5C,B8), \ - V(5D,C2,C2,9F), V(6E,D3,D3,BD), V(EF,AC,AC,43), V(A6,62,62,C4), \ - V(A8,91,91,39), V(A4,95,95,31), V(37,E4,E4,D3), V(8B,79,79,F2), \ - V(32,E7,E7,D5), V(43,C8,C8,8B), V(59,37,37,6E), V(B7,6D,6D,DA), \ - V(8C,8D,8D,01), V(64,D5,D5,B1), V(D2,4E,4E,9C), V(E0,A9,A9,49), \ - V(B4,6C,6C,D8), V(FA,56,56,AC), V(07,F4,F4,F3), V(25,EA,EA,CF), \ - V(AF,65,65,CA), V(8E,7A,7A,F4), V(E9,AE,AE,47), V(18,08,08,10), \ - V(D5,BA,BA,6F), V(88,78,78,F0), V(6F,25,25,4A), V(72,2E,2E,5C), \ - V(24,1C,1C,38), V(F1,A6,A6,57), V(C7,B4,B4,73), V(51,C6,C6,97), \ - V(23,E8,E8,CB), V(7C,DD,DD,A1), V(9C,74,74,E8), V(21,1F,1F,3E), \ - V(DD,4B,4B,96), V(DC,BD,BD,61), V(86,8B,8B,0D), V(85,8A,8A,0F), \ - V(90,70,70,E0), V(42,3E,3E,7C), V(C4,B5,B5,71), V(AA,66,66,CC), \ - V(D8,48,48,90), V(05,03,03,06), V(01,F6,F6,F7), V(12,0E,0E,1C), \ - V(A3,61,61,C2), V(5F,35,35,6A), V(F9,57,57,AE), V(D0,B9,B9,69), \ - V(91,86,86,17), V(58,C1,C1,99), V(27,1D,1D,3A), V(B9,9E,9E,27), \ - V(38,E1,E1,D9), V(13,F8,F8,EB), V(B3,98,98,2B), V(33,11,11,22), \ - V(BB,69,69,D2), V(70,D9,D9,A9), V(89,8E,8E,07), V(A7,94,94,33), \ - V(B6,9B,9B,2D), V(22,1E,1E,3C), V(92,87,87,15), V(20,E9,E9,C9), \ - V(49,CE,CE,87), V(FF,55,55,AA), V(78,28,28,50), V(7A,DF,DF,A5), \ - V(8F,8C,8C,03), V(F8,A1,A1,59), V(80,89,89,09), V(17,0D,0D,1A), \ - V(DA,BF,BF,65), V(31,E6,E6,D7), V(C6,42,42,84), V(B8,68,68,D0), \ - V(C3,41,41,82), V(B0,99,99,29), V(77,2D,2D,5A), V(11,0F,0F,1E), \ - V(CB,B0,B0,7B), V(FC,54,54,A8), V(D6,BB,BB,6D), V(3A,16,16,2C) - -#define V(a,b,c,d) 0x##a##b##c##d -static const uint32_t FT0[256] = { FT }; -#undef V - -#define V(a,b,c,d) 0x##b##c##d##a -static const uint32_t FT1[256] = { FT }; -#undef V - -#define V(a,b,c,d) 0x##c##d##a##b -static const uint32_t FT2[256] = { FT }; -#undef V - -#define V(a,b,c,d) 0x##d##a##b##c -static const uint32_t FT3[256] = { FT }; -#undef V - -#undef FT - -/* - * Reverse S-box - */ -static const unsigned char RSb[256] = -{ - 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, - 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, - 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, - 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, - 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, - 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, - 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, - 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, - 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, - 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, - 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, - 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, - 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, - 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, - 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, - 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, - 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, - 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, - 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, - 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, - 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, - 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, - 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, - 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, - 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, - 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, - 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, - 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, - 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, - 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, - 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, - 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D -}; - -/* - * Reverse tables - */ -#define RT \ -\ - V(50,A7,F4,51), V(53,65,41,7E), V(C3,A4,17,1A), V(96,5E,27,3A), \ - V(CB,6B,AB,3B), V(F1,45,9D,1F), V(AB,58,FA,AC), V(93,03,E3,4B), \ - V(55,FA,30,20), V(F6,6D,76,AD), V(91,76,CC,88), V(25,4C,02,F5), \ - V(FC,D7,E5,4F), V(D7,CB,2A,C5), V(80,44,35,26), V(8F,A3,62,B5), \ - V(49,5A,B1,DE), V(67,1B,BA,25), V(98,0E,EA,45), V(E1,C0,FE,5D), \ - V(02,75,2F,C3), V(12,F0,4C,81), V(A3,97,46,8D), V(C6,F9,D3,6B), \ - V(E7,5F,8F,03), V(95,9C,92,15), V(EB,7A,6D,BF), V(DA,59,52,95), \ - V(2D,83,BE,D4), V(D3,21,74,58), V(29,69,E0,49), V(44,C8,C9,8E), \ - V(6A,89,C2,75), V(78,79,8E,F4), V(6B,3E,58,99), V(DD,71,B9,27), \ - V(B6,4F,E1,BE), V(17,AD,88,F0), V(66,AC,20,C9), V(B4,3A,CE,7D), \ - V(18,4A,DF,63), V(82,31,1A,E5), V(60,33,51,97), V(45,7F,53,62), \ - V(E0,77,64,B1), V(84,AE,6B,BB), V(1C,A0,81,FE), V(94,2B,08,F9), \ - V(58,68,48,70), V(19,FD,45,8F), V(87,6C,DE,94), V(B7,F8,7B,52), \ - V(23,D3,73,AB), V(E2,02,4B,72), V(57,8F,1F,E3), V(2A,AB,55,66), \ - V(07,28,EB,B2), V(03,C2,B5,2F), V(9A,7B,C5,86), V(A5,08,37,D3), \ - V(F2,87,28,30), V(B2,A5,BF,23), V(BA,6A,03,02), V(5C,82,16,ED), \ - V(2B,1C,CF,8A), V(92,B4,79,A7), V(F0,F2,07,F3), V(A1,E2,69,4E), \ - V(CD,F4,DA,65), V(D5,BE,05,06), V(1F,62,34,D1), V(8A,FE,A6,C4), \ - V(9D,53,2E,34), V(A0,55,F3,A2), V(32,E1,8A,05), V(75,EB,F6,A4), \ - V(39,EC,83,0B), V(AA,EF,60,40), V(06,9F,71,5E), V(51,10,6E,BD), \ - V(F9,8A,21,3E), V(3D,06,DD,96), V(AE,05,3E,DD), V(46,BD,E6,4D), \ - V(B5,8D,54,91), V(05,5D,C4,71), V(6F,D4,06,04), V(FF,15,50,60), \ - V(24,FB,98,19), V(97,E9,BD,D6), V(CC,43,40,89), V(77,9E,D9,67), \ - V(BD,42,E8,B0), V(88,8B,89,07), V(38,5B,19,E7), V(DB,EE,C8,79), \ - V(47,0A,7C,A1), V(E9,0F,42,7C), V(C9,1E,84,F8), V(00,00,00,00), \ - V(83,86,80,09), V(48,ED,2B,32), V(AC,70,11,1E), V(4E,72,5A,6C), \ - V(FB,FF,0E,FD), V(56,38,85,0F), V(1E,D5,AE,3D), V(27,39,2D,36), \ - V(64,D9,0F,0A), V(21,A6,5C,68), V(D1,54,5B,9B), V(3A,2E,36,24), \ - V(B1,67,0A,0C), V(0F,E7,57,93), V(D2,96,EE,B4), V(9E,91,9B,1B), \ - V(4F,C5,C0,80), V(A2,20,DC,61), V(69,4B,77,5A), V(16,1A,12,1C), \ - V(0A,BA,93,E2), V(E5,2A,A0,C0), V(43,E0,22,3C), V(1D,17,1B,12), \ - V(0B,0D,09,0E), V(AD,C7,8B,F2), V(B9,A8,B6,2D), V(C8,A9,1E,14), \ - V(85,19,F1,57), V(4C,07,75,AF), V(BB,DD,99,EE), V(FD,60,7F,A3), \ - V(9F,26,01,F7), V(BC,F5,72,5C), V(C5,3B,66,44), V(34,7E,FB,5B), \ - V(76,29,43,8B), V(DC,C6,23,CB), V(68,FC,ED,B6), V(63,F1,E4,B8), \ - V(CA,DC,31,D7), V(10,85,63,42), V(40,22,97,13), V(20,11,C6,84), \ - V(7D,24,4A,85), V(F8,3D,BB,D2), V(11,32,F9,AE), V(6D,A1,29,C7), \ - V(4B,2F,9E,1D), V(F3,30,B2,DC), V(EC,52,86,0D), V(D0,E3,C1,77), \ - V(6C,16,B3,2B), V(99,B9,70,A9), V(FA,48,94,11), V(22,64,E9,47), \ - V(C4,8C,FC,A8), V(1A,3F,F0,A0), V(D8,2C,7D,56), V(EF,90,33,22), \ - V(C7,4E,49,87), V(C1,D1,38,D9), V(FE,A2,CA,8C), V(36,0B,D4,98), \ - V(CF,81,F5,A6), V(28,DE,7A,A5), V(26,8E,B7,DA), V(A4,BF,AD,3F), \ - V(E4,9D,3A,2C), V(0D,92,78,50), V(9B,CC,5F,6A), V(62,46,7E,54), \ - V(C2,13,8D,F6), V(E8,B8,D8,90), V(5E,F7,39,2E), V(F5,AF,C3,82), \ - V(BE,80,5D,9F), V(7C,93,D0,69), V(A9,2D,D5,6F), V(B3,12,25,CF), \ - V(3B,99,AC,C8), V(A7,7D,18,10), V(6E,63,9C,E8), V(7B,BB,3B,DB), \ - V(09,78,26,CD), V(F4,18,59,6E), V(01,B7,9A,EC), V(A8,9A,4F,83), \ - V(65,6E,95,E6), V(7E,E6,FF,AA), V(08,CF,BC,21), V(E6,E8,15,EF), \ - V(D9,9B,E7,BA), V(CE,36,6F,4A), V(D4,09,9F,EA), V(D6,7C,B0,29), \ - V(AF,B2,A4,31), V(31,23,3F,2A), V(30,94,A5,C6), V(C0,66,A2,35), \ - V(37,BC,4E,74), V(A6,CA,82,FC), V(B0,D0,90,E0), V(15,D8,A7,33), \ - V(4A,98,04,F1), V(F7,DA,EC,41), V(0E,50,CD,7F), V(2F,F6,91,17), \ - V(8D,D6,4D,76), V(4D,B0,EF,43), V(54,4D,AA,CC), V(DF,04,96,E4), \ - V(E3,B5,D1,9E), V(1B,88,6A,4C), V(B8,1F,2C,C1), V(7F,51,65,46), \ - V(04,EA,5E,9D), V(5D,35,8C,01), V(73,74,87,FA), V(2E,41,0B,FB), \ - V(5A,1D,67,B3), V(52,D2,DB,92), V(33,56,10,E9), V(13,47,D6,6D), \ - V(8C,61,D7,9A), V(7A,0C,A1,37), V(8E,14,F8,59), V(89,3C,13,EB), \ - V(EE,27,A9,CE), V(35,C9,61,B7), V(ED,E5,1C,E1), V(3C,B1,47,7A), \ - V(59,DF,D2,9C), V(3F,73,F2,55), V(79,CE,14,18), V(BF,37,C7,73), \ - V(EA,CD,F7,53), V(5B,AA,FD,5F), V(14,6F,3D,DF), V(86,DB,44,78), \ - V(81,F3,AF,CA), V(3E,C4,68,B9), V(2C,34,24,38), V(5F,40,A3,C2), \ - V(72,C3,1D,16), V(0C,25,E2,BC), V(8B,49,3C,28), V(41,95,0D,FF), \ - V(71,01,A8,39), V(DE,B3,0C,08), V(9C,E4,B4,D8), V(90,C1,56,64), \ - V(61,84,CB,7B), V(70,B6,32,D5), V(74,5C,6C,48), V(42,57,B8,D0) - -#define V(a,b,c,d) 0x##a##b##c##d -static const uint32_t RT0[256] = { RT }; -#undef V - -#define V(a,b,c,d) 0x##b##c##d##a -static const uint32_t RT1[256] = { RT }; -#undef V - -#define V(a,b,c,d) 0x##c##d##a##b -static const uint32_t RT2[256] = { RT }; -#undef V - -#define V(a,b,c,d) 0x##d##a##b##c -static const uint32_t RT3[256] = { RT }; -#undef V - -#undef RT - -/* - * Round constants - */ -static const uint32_t RCON[10] = -{ - 0x00000001, 0x00000002, 0x00000004, 0x00000008, - 0x00000010, 0x00000020, 0x00000040, 0x00000080, - 0x0000001B, 0x00000036 -}; - -#else /* POLARSSL_AES_ROM_TABLES */ - -/* - * Forward S-box & tables - */ -static unsigned char FSb[256]; -static uint32_t FT0[256]; -static uint32_t FT1[256]; -static uint32_t FT2[256]; -static uint32_t FT3[256]; - -/* - * Reverse S-box & tables - */ -static unsigned char RSb[256]; -static uint32_t RT0[256]; -static uint32_t RT1[256]; -static uint32_t RT2[256]; -static uint32_t RT3[256]; - -/* - * Round constants - */ -static uint32_t RCON[10]; - -/* - * Tables generation code - */ -#define ROTL8(x) ( ( x << 8 ) & 0xFFFFFFFF ) | ( x >> 24 ) -#define XTIME(x) ( ( x << 1 ) ^ ( ( x & 0x80 ) ? 0x1B : 0x00 ) ) -#define MUL(x,y) ( ( x && y ) ? pow[(log[x]+log[y]) % 255] : 0 ) - -static int aes_init_done = 0; - -static void aes_gen_tables( void ) -{ - int i, x, y, z; - int pow[256]; - int log[256]; - - /* - * compute pow and log tables over GF(2^8) - */ - for( i = 0, x = 1; i < 256; i++ ) - { - pow[i] = x; - log[x] = i; - x = ( x ^ XTIME( x ) ) & 0xFF; - } - - /* - * calculate the round constants - */ - for( i = 0, x = 1; i < 10; i++ ) - { - RCON[i] = (uint32_t) x; - x = XTIME( x ) & 0xFF; - } - - /* - * generate the forward and reverse S-boxes - */ - FSb[0x00] = 0x63; - RSb[0x63] = 0x00; - - for( i = 1; i < 256; i++ ) - { - x = pow[255 - log[i]]; - - y = x; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y ^ 0x63; - - FSb[i] = (unsigned char) x; - RSb[x] = (unsigned char) i; - } - - /* - * generate the forward and reverse tables - */ - for( i = 0; i < 256; i++ ) - { - x = FSb[i]; - y = XTIME( x ) & 0xFF; - z = ( y ^ x ) & 0xFF; - - FT0[i] = ( (uint32_t) y ) ^ - ( (uint32_t) x << 8 ) ^ - ( (uint32_t) x << 16 ) ^ - ( (uint32_t) z << 24 ); - - FT1[i] = ROTL8( FT0[i] ); - FT2[i] = ROTL8( FT1[i] ); - FT3[i] = ROTL8( FT2[i] ); - - x = RSb[i]; - - RT0[i] = ( (uint32_t) MUL( 0x0E, x ) ) ^ - ( (uint32_t) MUL( 0x09, x ) << 8 ) ^ - ( (uint32_t) MUL( 0x0D, x ) << 16 ) ^ - ( (uint32_t) MUL( 0x0B, x ) << 24 ); - - RT1[i] = ROTL8( RT0[i] ); - RT2[i] = ROTL8( RT1[i] ); - RT3[i] = ROTL8( RT2[i] ); - } -} - -#endif /* POLARSSL_AES_ROM_TABLES */ -#endif /* SUPPORT_HW_SW_CRYPTO */ - -void aes_init( aes_context *ctx ) -{ - memset( ctx, 0, sizeof( aes_context ) ); -} - -void aes_free( aes_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( aes_context ) ); -} - -/* - * AES key schedule (encryption) - */ -int aes_setkey_enc( aes_context *ctx, const unsigned char *key, - unsigned int keysize ) -{ -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - switch(keysize) - { - case 128: ctx->nr = 10; break; - case 192: ctx->nr = 12; break; - case 256: ctx->nr = 14; break; - default : return(POLARSSL_ERR_AES_INVALID_KEY_LENGTH); - } - - memcpy(ctx->enc_key, key, (keysize / 8)); - return 0; - } -#endif /* RTL_HW_CRYPTO */ -#ifdef SUPPORT_HW_SW_CRYPTO - else - { - unsigned int i; - uint32_t *RK; - -#if !defined(POLARSSL_AES_ROM_TABLES) - if( aes_init_done == 0 ) - { - aes_gen_tables(); - aes_init_done = 1; - - } -#endif - - switch( keysize ) - { - case 128: ctx->nr = 10; break; - case 192: ctx->nr = 12; break; - case 256: ctx->nr = 14; break; - default : return( POLARSSL_ERR_AES_INVALID_KEY_LENGTH ); - } - -#if defined(POLARSSL_PADLOCK_C) && defined(PADLOCK_ALIGN16) - if( aes_padlock_ace == -1 ) - aes_padlock_ace = padlock_supports( PADLOCK_ACE ); - - if( aes_padlock_ace ) - ctx->rk = RK = PADLOCK_ALIGN16( ctx->buf ); - else -#endif - ctx->rk = RK = ctx->buf; - -#if defined(POLARSSL_AESNI_C) && defined(POLARSSL_HAVE_X86_64) - if( aesni_supports( POLARSSL_AESNI_AES ) ) - return( aesni_setkey_enc( (unsigned char *) ctx->rk, key, keysize ) ); -#endif - - for( i = 0; i < ( keysize >> 5 ); i++ ) - { - GET_UINT32_LE( RK[i], key, i << 2 ); - } - - switch( ctx->nr ) - { - case 10: - - for( i = 0; i < 10; i++, RK += 4 ) - { - RK[4] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[3] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[3] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[3] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[3] ) & 0xFF ] << 24 ); - - RK[5] = RK[1] ^ RK[4]; - RK[6] = RK[2] ^ RK[5]; - RK[7] = RK[3] ^ RK[6]; - } - break; - - case 12: - - for( i = 0; i < 8; i++, RK += 6 ) - { - RK[6] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[5] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[5] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[5] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[5] ) & 0xFF ] << 24 ); - - RK[7] = RK[1] ^ RK[6]; - RK[8] = RK[2] ^ RK[7]; - RK[9] = RK[3] ^ RK[8]; - RK[10] = RK[4] ^ RK[9]; - RK[11] = RK[5] ^ RK[10]; - } - break; - - case 14: - - for( i = 0; i < 7; i++, RK += 8 ) - { - RK[8] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[7] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[7] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[7] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[7] ) & 0xFF ] << 24 ); - - RK[9] = RK[1] ^ RK[8]; - RK[10] = RK[2] ^ RK[9]; - RK[11] = RK[3] ^ RK[10]; - - RK[12] = RK[4] ^ - ( (uint32_t) FSb[ ( RK[11] ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 24 ) & 0xFF ] << 24 ); - - RK[13] = RK[5] ^ RK[12]; - RK[14] = RK[6] ^ RK[13]; - RK[15] = RK[7] ^ RK[14]; - } - break; - } - - return( 0 ); - } -#endif /* SUPPORT_HW_SW_CRYPTO */ -} - -/* - * AES key schedule (decryption) - */ -int aes_setkey_dec( aes_context *ctx, const unsigned char *key, - unsigned int keysize ) -{ -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - switch(keysize) - { - case 128: ctx->nr = 10; break; - case 192: ctx->nr = 12; break; - case 256: ctx->nr = 14; break; - default : return(POLARSSL_ERR_AES_INVALID_KEY_LENGTH); - } - - memcpy(ctx->dec_key, key, (keysize / 8)); - return 0; - } -#endif /* RTL_HW_CRYPTO */ -#ifdef SUPPORT_HW_SW_CRYPTO - else - { - int i, j, ret; - aes_context cty; - uint32_t *RK; - uint32_t *SK; - - aes_init( &cty ); - -#if defined(POLARSSL_PADLOCK_C) && defined(PADLOCK_ALIGN16) - if( aes_padlock_ace == -1 ) - aes_padlock_ace = padlock_supports( PADLOCK_ACE ); - - if( aes_padlock_ace ) - ctx->rk = RK = PADLOCK_ALIGN16( ctx->buf ); - else -#endif - ctx->rk = RK = ctx->buf; - - /* Also checks keysize */ - if( ( ret = aes_setkey_enc( &cty, key, keysize ) ) != 0 ) - goto exit; - - ctx->nr = cty.nr; - -#if defined(POLARSSL_AESNI_C) && defined(POLARSSL_HAVE_X86_64) - if( aesni_supports( POLARSSL_AESNI_AES ) ) - { - aesni_inverse_key( (unsigned char *) ctx->rk, - (const unsigned char *) cty.rk, ctx->nr ); - goto exit; - } -#endif - - SK = cty.rk + cty.nr * 4; - - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - - for( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 ) - { - for( j = 0; j < 4; j++, SK++ ) - { - *RK++ = RT0[ FSb[ ( *SK ) & 0xFF ] ] ^ - RT1[ FSb[ ( *SK >> 8 ) & 0xFF ] ] ^ - RT2[ FSb[ ( *SK >> 16 ) & 0xFF ] ] ^ - RT3[ FSb[ ( *SK >> 24 ) & 0xFF ] ]; - } - } - - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - -exit: - aes_free( &cty ); - - return( ret ); - } -#endif /* SUPPORT_HW_SW_CRYPTO */ -} - -#define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ -{ \ - X0 = *RK++ ^ FT0[ ( Y0 ) & 0xFF ] ^ \ - FT1[ ( Y1 >> 8 ) & 0xFF ] ^ \ - FT2[ ( Y2 >> 16 ) & 0xFF ] ^ \ - FT3[ ( Y3 >> 24 ) & 0xFF ]; \ - \ - X1 = *RK++ ^ FT0[ ( Y1 ) & 0xFF ] ^ \ - FT1[ ( Y2 >> 8 ) & 0xFF ] ^ \ - FT2[ ( Y3 >> 16 ) & 0xFF ] ^ \ - FT3[ ( Y0 >> 24 ) & 0xFF ]; \ - \ - X2 = *RK++ ^ FT0[ ( Y2 ) & 0xFF ] ^ \ - FT1[ ( Y3 >> 8 ) & 0xFF ] ^ \ - FT2[ ( Y0 >> 16 ) & 0xFF ] ^ \ - FT3[ ( Y1 >> 24 ) & 0xFF ]; \ - \ - X3 = *RK++ ^ FT0[ ( Y3 ) & 0xFF ] ^ \ - FT1[ ( Y0 >> 8 ) & 0xFF ] ^ \ - FT2[ ( Y1 >> 16 ) & 0xFF ] ^ \ - FT3[ ( Y2 >> 24 ) & 0xFF ]; \ -} - -#define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ -{ \ - X0 = *RK++ ^ RT0[ ( Y0 ) & 0xFF ] ^ \ - RT1[ ( Y3 >> 8 ) & 0xFF ] ^ \ - RT2[ ( Y2 >> 16 ) & 0xFF ] ^ \ - RT3[ ( Y1 >> 24 ) & 0xFF ]; \ - \ - X1 = *RK++ ^ RT0[ ( Y1 ) & 0xFF ] ^ \ - RT1[ ( Y0 >> 8 ) & 0xFF ] ^ \ - RT2[ ( Y3 >> 16 ) & 0xFF ] ^ \ - RT3[ ( Y2 >> 24 ) & 0xFF ]; \ - \ - X2 = *RK++ ^ RT0[ ( Y2 ) & 0xFF ] ^ \ - RT1[ ( Y1 >> 8 ) & 0xFF ] ^ \ - RT2[ ( Y0 >> 16 ) & 0xFF ] ^ \ - RT3[ ( Y3 >> 24 ) & 0xFF ]; \ - \ - X3 = *RK++ ^ RT0[ ( Y3 ) & 0xFF ] ^ \ - RT1[ ( Y2 >> 8 ) & 0xFF ] ^ \ - RT2[ ( Y1 >> 16 ) & 0xFF ] ^ \ - RT3[ ( Y0 >> 24 ) & 0xFF ]; \ -} - -/* - * AES-ECB block encryption/decryption - */ -int aes_crypt_ecb( aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) -{ -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - unsigned char key_buf[32 + 4], *key_buf_aligned; - unsigned char *output_buf[16 + 4], *output_buf_aligned; - - key_buf_aligned = (unsigned char *) (((unsigned int) key_buf + 4) / 4 * 4); - output_buf_aligned = (unsigned char *) (((unsigned int) output_buf + 4) / 4 * 4); - memset(output_buf, 0, 16 + 4); - - if(mode == AES_DECRYPT) - { - memcpy(key_buf_aligned, ctx->dec_key, ((ctx->nr - 6) * 4)); - rom_ssl_ram_map.hw_crypto_aes_ecb_init(key_buf_aligned, ((ctx->nr - 6) * 4)); - rom_ssl_ram_map.hw_crypto_aes_ecb_decrypt(input, 16, NULL, 0, output_buf_aligned); - } - else - { - memcpy(key_buf_aligned, ctx->enc_key, ((ctx->nr - 6) * 4)); - rom_ssl_ram_map.hw_crypto_aes_ecb_init(key_buf_aligned,((ctx->nr - 6) * 4)); - rom_ssl_ram_map.hw_crypto_aes_ecb_encrypt(input, 16, NULL, 0, output_buf_aligned); - } - - memcpy(output, output_buf_aligned, 16); - - return 0; - } -#endif /* RTL_HW_CRYPTO */ -#ifdef SUPPORT_HW_SW_CRYPTO - else - { - int i; - uint32_t *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; - -#if defined(POLARSSL_AESNI_C) && defined(POLARSSL_HAVE_X86_64) - if( aesni_supports( POLARSSL_AESNI_AES ) ) - return( aesni_crypt_ecb( ctx, mode, input, output ) ); -#endif - -#if defined(POLARSSL_PADLOCK_C) && defined(POLARSSL_HAVE_X86) - if( aes_padlock_ace ) - { - if( padlock_xcryptecb( ctx, mode, input, output ) == 0 ) - return( 0 ); - - // If padlock data misaligned, we just fall back to - // unaccelerated mode - // - } -#endif - - RK = ctx->rk; - - GET_UINT32_LE( X0, input, 0 ); X0 ^= *RK++; - GET_UINT32_LE( X1, input, 4 ); X1 ^= *RK++; - GET_UINT32_LE( X2, input, 8 ); X2 ^= *RK++; - GET_UINT32_LE( X3, input, 12 ); X3 ^= *RK++; - - if( mode == AES_DECRYPT ) - { - for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) - { - AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); - } - - AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - - X0 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y0 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); - - X1 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y1 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); - - X2 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y2 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); - - X3 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y3 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); - } - else /* AES_ENCRYPT */ - { - for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) - { - AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); - } - - AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - - X0 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y0 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); - - X1 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y1 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); - - X2 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y2 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); - - X3 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y3 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); - } - - PUT_UINT32_LE( X0, output, 0 ); - PUT_UINT32_LE( X1, output, 4 ); - PUT_UINT32_LE( X2, output, 8 ); - PUT_UINT32_LE( X3, output, 12 ); - - return( 0 ); - } -#endif /* SUPPORT_HW_SW_CRYPTO */ -} - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/* - * AES-CBC buffer encryption/decryption - */ -int aes_crypt_cbc( aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) -{ -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - unsigned char key_buf[32 + 4], *key_buf_aligned; - unsigned char iv_buf[16 + 4], *iv_buf_aligned, iv_tmp[16]; - unsigned char *output_buf, *output_buf_aligned; - size_t length_done = 0; - - if(length % 16) - return(POLARSSL_ERR_AES_INVALID_INPUT_LENGTH); - - if(length > 0) - { - key_buf_aligned = (unsigned char *) (((unsigned int) key_buf + 4) / 4 * 4); - iv_buf_aligned = (unsigned char *) (((unsigned int) iv_buf + 4) / 4 * 4); - output_buf = polarssl_malloc(length + 4); - - if(output_buf == NULL) - return -1; - - output_buf_aligned = (unsigned char *) (((unsigned int) output_buf + 4) / 4 * 4); - memcpy(iv_buf_aligned, iv, 16); - memset(output_buf, 0, length + 4); - - if(mode == AES_DECRYPT) - { - memcpy(key_buf_aligned, ctx->dec_key, ((ctx->nr - 6) * 4)); - rom_ssl_ram_map.hw_crypto_aes_cbc_init(key_buf_aligned, ((ctx->nr - 6) * 4)); - - while((length - length_done) > RTL_CRYPTO_FRAGMENT) - { - memcpy(iv_tmp, (input + length_done + RTL_CRYPTO_FRAGMENT - 16), 16); - rom_ssl_ram_map.hw_crypto_aes_cbc_decrypt(input + length_done, RTL_CRYPTO_FRAGMENT, iv_buf_aligned, 16, output_buf_aligned + length_done); - memcpy(iv_buf_aligned, iv_tmp, 16); - length_done += RTL_CRYPTO_FRAGMENT; - } - - memcpy(iv_tmp, (input + length - 16), 16); - rom_ssl_ram_map.hw_crypto_aes_cbc_decrypt(input + length_done, length - length_done, iv_buf_aligned, 16, output_buf_aligned + length_done); - memcpy(iv, iv_tmp, 16); - } - else - { - memcpy(key_buf_aligned, ctx->enc_key, ((ctx->nr - 6) * 4)); - rom_ssl_ram_map.hw_crypto_aes_cbc_init(key_buf_aligned,((ctx->nr - 6) * 4)); - - while((length - length_done) > RTL_CRYPTO_FRAGMENT) - { - rom_ssl_ram_map.hw_crypto_aes_cbc_encrypt(input + length_done, RTL_CRYPTO_FRAGMENT, iv_buf_aligned, 16, output_buf_aligned + length_done); - memcpy(iv_buf_aligned, (output_buf_aligned + length_done + RTL_CRYPTO_FRAGMENT - 16), 16); - length_done += RTL_CRYPTO_FRAGMENT; - } - - rom_ssl_ram_map.hw_crypto_aes_cbc_encrypt(input + length_done, length - length_done, iv_buf_aligned, 16, output_buf_aligned + length_done); - memcpy(iv, (output_buf_aligned + length - 16), 16); - } - - memcpy(output, output_buf_aligned, length); - polarssl_free(output_buf); - } - - return 0; - } -#endif /* RTL_HW_CRYPTO */ -#ifdef SUPPORT_HW_SW_CRYPTO - else - { - int i; - unsigned char temp[16]; - - if( length % 16 ) - return( POLARSSL_ERR_AES_INVALID_INPUT_LENGTH ); - -#if defined(POLARSSL_PADLOCK_C) && defined(POLARSSL_HAVE_X86) - if( aes_padlock_ace ) - { - if( padlock_xcryptcbc( ctx, mode, length, iv, input, output ) == 0 ) - return( 0 ); - - // If padlock data misaligned, we just fall back to - // unaccelerated mode - // - } -#endif - - if( mode == AES_DECRYPT ) - { - while( length > 0 ) - { - memcpy( temp, input, 16 ); - aes_crypt_ecb( ctx, mode, input, output ); - - for( i = 0; i < 16; i++ ) - output[i] = (unsigned char)( output[i] ^ iv[i] ); - - memcpy( iv, temp, 16 ); - - input += 16; - output += 16; - length -= 16; - } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 16; i++ ) - output[i] = (unsigned char)( input[i] ^ iv[i] ); - - aes_crypt_ecb( ctx, mode, output, output ); - memcpy( iv, output, 16 ); - - input += 16; - output += 16; - length -= 16; - } - } - - return( 0 ); - } -#endif /* SUPPORT_HW_SW_CRYPTO */ -} -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) -/* - * AES-CFB128 buffer encryption/decryption - */ -int aes_crypt_cfb128( aes_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) -{ - int c; - size_t n = *iv_off; - - if( mode == AES_DECRYPT ) - { - while( length-- ) - { - if( n == 0 ) - aes_crypt_ecb( ctx, AES_ENCRYPT, iv, iv ); - - c = *input++; - *output++ = (unsigned char)( c ^ iv[n] ); - iv[n] = (unsigned char) c; - - n = ( n + 1 ) & 0x0F; - } - } - else - { - while( length-- ) - { - if( n == 0 ) - aes_crypt_ecb( ctx, AES_ENCRYPT, iv, iv ); - - iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); - - n = ( n + 1 ) & 0x0F; - } - } - - *iv_off = n; - - return( 0 ); -} - -/* - * AES-CFB8 buffer encryption/decryption - */ -#include -int aes_crypt_cfb8( aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) -{ - unsigned char c; - unsigned char ov[17]; - - while( length-- ) - { - memcpy( ov, iv, 16 ); - aes_crypt_ecb( ctx, AES_ENCRYPT, iv, iv ); - - if( mode == AES_DECRYPT ) - ov[16] = *input; - - c = *output++ = (unsigned char)( iv[0] ^ *input++ ); - - if( mode == AES_ENCRYPT ) - ov[16] = c; - - memcpy( iv, ov + 1, 16 ); - } - - return( 0 ); -} -#endif /*POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) -/* - * AES-CTR buffer encryption/decryption - */ -int aes_crypt_ctr( aes_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[16], - unsigned char stream_block[16], - const unsigned char *input, - unsigned char *output ) -{ - int c, i; - size_t n = *nc_off; - - while( length-- ) - { - if( n == 0 ) { - aes_crypt_ecb( ctx, AES_ENCRYPT, nonce_counter, stream_block ); - - for( i = 16; i > 0; i-- ) - if( ++nonce_counter[i - 1] != 0 ) - break; - } - c = *input++; - *output++ = (unsigned char)( c ^ stream_block[n] ); - - n = ( n + 1 ) & 0x0F; - } - - *nc_off = n; - - return( 0 ); -} -#endif /* POLARSSL_CIPHER_MODE_CTR */ - -#endif /* !POLARSSL_AES_ALT */ - -#if defined(POLARSSL_SELF_TEST) - -#include - -/* - * AES test vectors from: - * - * http://csrc.nist.gov/archive/aes/rijndael/rijndael-vals.zip - */ -static const unsigned char aes_test_ecb_dec[3][16] = -{ - { 0x44, 0x41, 0x6A, 0xC2, 0xD1, 0xF5, 0x3C, 0x58, - 0x33, 0x03, 0x91, 0x7E, 0x6B, 0xE9, 0xEB, 0xE0 }, - { 0x48, 0xE3, 0x1E, 0x9E, 0x25, 0x67, 0x18, 0xF2, - 0x92, 0x29, 0x31, 0x9C, 0x19, 0xF1, 0x5B, 0xA4 }, - { 0x05, 0x8C, 0xCF, 0xFD, 0xBB, 0xCB, 0x38, 0x2D, - 0x1F, 0x6F, 0x56, 0x58, 0x5D, 0x8A, 0x4A, 0xDE } -}; - -static const unsigned char aes_test_ecb_enc[3][16] = -{ - { 0xC3, 0x4C, 0x05, 0x2C, 0xC0, 0xDA, 0x8D, 0x73, - 0x45, 0x1A, 0xFE, 0x5F, 0x03, 0xBE, 0x29, 0x7F }, - { 0xF3, 0xF6, 0x75, 0x2A, 0xE8, 0xD7, 0x83, 0x11, - 0x38, 0xF0, 0x41, 0x56, 0x06, 0x31, 0xB1, 0x14 }, - { 0x8B, 0x79, 0xEE, 0xCC, 0x93, 0xA0, 0xEE, 0x5D, - 0xFF, 0x30, 0xB4, 0xEA, 0x21, 0x63, 0x6D, 0xA4 } -}; - -#if defined(POLARSSL_CIPHER_MODE_CBC) -static const unsigned char aes_test_cbc_dec[3][16] = -{ - { 0xFA, 0xCA, 0x37, 0xE0, 0xB0, 0xC8, 0x53, 0x73, - 0xDF, 0x70, 0x6E, 0x73, 0xF7, 0xC9, 0xAF, 0x86 }, - { 0x5D, 0xF6, 0x78, 0xDD, 0x17, 0xBA, 0x4E, 0x75, - 0xB6, 0x17, 0x68, 0xC6, 0xAD, 0xEF, 0x7C, 0x7B }, - { 0x48, 0x04, 0xE1, 0x81, 0x8F, 0xE6, 0x29, 0x75, - 0x19, 0xA3, 0xE8, 0x8C, 0x57, 0x31, 0x04, 0x13 } -}; - -static const unsigned char aes_test_cbc_enc[3][16] = -{ - { 0x8A, 0x05, 0xFC, 0x5E, 0x09, 0x5A, 0xF4, 0x84, - 0x8A, 0x08, 0xD3, 0x28, 0xD3, 0x68, 0x8E, 0x3D }, - { 0x7B, 0xD9, 0x66, 0xD5, 0x3A, 0xD8, 0xC1, 0xBB, - 0x85, 0xD2, 0xAD, 0xFA, 0xE8, 0x7B, 0xB1, 0x04 }, - { 0xFE, 0x3C, 0x53, 0x65, 0x3E, 0x2F, 0x45, 0xB5, - 0x6F, 0xCD, 0x88, 0xB2, 0xCC, 0x89, 0x8F, 0xF0 } -}; -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) -/* - * AES-CFB128 test vectors from: - * - * http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf - */ -static const unsigned char aes_test_cfb128_key[3][32] = -{ - { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, - 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C }, - { 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52, - 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5, - 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B }, - { 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, - 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, - 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, - 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 } -}; - -static const unsigned char aes_test_cfb128_iv[16] = -{ - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F -}; - -static const unsigned char aes_test_cfb128_pt[64] = -{ - 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, - 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A, - 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, - 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51, - 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11, - 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF, - 0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17, - 0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10 -}; - -static const unsigned char aes_test_cfb128_ct[3][64] = -{ - { 0x3B, 0x3F, 0xD9, 0x2E, 0xB7, 0x2D, 0xAD, 0x20, - 0x33, 0x34, 0x49, 0xF8, 0xE8, 0x3C, 0xFB, 0x4A, - 0xC8, 0xA6, 0x45, 0x37, 0xA0, 0xB3, 0xA9, 0x3F, - 0xCD, 0xE3, 0xCD, 0xAD, 0x9F, 0x1C, 0xE5, 0x8B, - 0x26, 0x75, 0x1F, 0x67, 0xA3, 0xCB, 0xB1, 0x40, - 0xB1, 0x80, 0x8C, 0xF1, 0x87, 0xA4, 0xF4, 0xDF, - 0xC0, 0x4B, 0x05, 0x35, 0x7C, 0x5D, 0x1C, 0x0E, - 0xEA, 0xC4, 0xC6, 0x6F, 0x9F, 0xF7, 0xF2, 0xE6 }, - { 0xCD, 0xC8, 0x0D, 0x6F, 0xDD, 0xF1, 0x8C, 0xAB, - 0x34, 0xC2, 0x59, 0x09, 0xC9, 0x9A, 0x41, 0x74, - 0x67, 0xCE, 0x7F, 0x7F, 0x81, 0x17, 0x36, 0x21, - 0x96, 0x1A, 0x2B, 0x70, 0x17, 0x1D, 0x3D, 0x7A, - 0x2E, 0x1E, 0x8A, 0x1D, 0xD5, 0x9B, 0x88, 0xB1, - 0xC8, 0xE6, 0x0F, 0xED, 0x1E, 0xFA, 0xC4, 0xC9, - 0xC0, 0x5F, 0x9F, 0x9C, 0xA9, 0x83, 0x4F, 0xA0, - 0x42, 0xAE, 0x8F, 0xBA, 0x58, 0x4B, 0x09, 0xFF }, - { 0xDC, 0x7E, 0x84, 0xBF, 0xDA, 0x79, 0x16, 0x4B, - 0x7E, 0xCD, 0x84, 0x86, 0x98, 0x5D, 0x38, 0x60, - 0x39, 0xFF, 0xED, 0x14, 0x3B, 0x28, 0xB1, 0xC8, - 0x32, 0x11, 0x3C, 0x63, 0x31, 0xE5, 0x40, 0x7B, - 0xDF, 0x10, 0x13, 0x24, 0x15, 0xE5, 0x4B, 0x92, - 0xA1, 0x3E, 0xD0, 0xA8, 0x26, 0x7A, 0xE2, 0xF9, - 0x75, 0xA3, 0x85, 0x74, 0x1A, 0xB9, 0xCE, 0xF8, - 0x20, 0x31, 0x62, 0x3D, 0x55, 0xB1, 0xE4, 0x71 } -}; -#endif /* POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) -/* - * AES-CTR test vectors from: - * - * http://www.faqs.org/rfcs/rfc3686.html - */ - -static const unsigned char aes_test_ctr_key[3][16] = -{ - { 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC, - 0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E }, - { 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7, - 0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 }, - { 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8, - 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC } -}; - -static const unsigned char aes_test_ctr_nonce_counter[3][16] = -{ - { 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59, - 0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F, - 0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 } -}; - -static const unsigned char aes_test_ctr_pt[3][48] = -{ - { 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62, - 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x22, 0x23 } -}; - -static const unsigned char aes_test_ctr_ct[3][48] = -{ - { 0xE4, 0x09, 0x5D, 0x4F, 0xB7, 0xA7, 0xB3, 0x79, - 0x2D, 0x61, 0x75, 0xA3, 0x26, 0x13, 0x11, 0xB8 }, - { 0x51, 0x04, 0xA1, 0x06, 0x16, 0x8A, 0x72, 0xD9, - 0x79, 0x0D, 0x41, 0xEE, 0x8E, 0xDA, 0xD3, 0x88, - 0xEB, 0x2E, 0x1E, 0xFC, 0x46, 0xDA, 0x57, 0xC8, - 0xFC, 0xE6, 0x30, 0xDF, 0x91, 0x41, 0xBE, 0x28 }, - { 0xC1, 0xCF, 0x48, 0xA8, 0x9F, 0x2F, 0xFD, 0xD9, - 0xCF, 0x46, 0x52, 0xE9, 0xEF, 0xDB, 0x72, 0xD7, - 0x45, 0x40, 0xA4, 0x2B, 0xDE, 0x6D, 0x78, 0x36, - 0xD5, 0x9A, 0x5C, 0xEA, 0xAE, 0xF3, 0x10, 0x53, - 0x25, 0xB2, 0x07, 0x2F } -}; - -static const int aes_test_ctr_len[3] = - { 16, 32, 36 }; -#endif /* POLARSSL_CIPHER_MODE_CTR */ - -/* - * Checkup routine - */ -int aes_self_test( int verbose ) -{ - int ret = 0, i, j, u, v; - unsigned char key[32]; - unsigned char buf[64]; - unsigned char iv[16]; -#if defined(POLARSSL_CIPHER_MODE_CBC) - unsigned char prv[16]; -#endif -#if defined(POLARSSL_CIPHER_MODE_CTR) || defined(POLARSSL_CIPHER_MODE_CFB) - size_t offset; -#endif -#if defined(POLARSSL_CIPHER_MODE_CTR) - int len; - unsigned char nonce_counter[16]; - unsigned char stream_block[16]; -#endif - aes_context ctx; - - memset( key, 0, 32 ); - aes_init( &ctx ); - - /* - * ECB mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " AES-ECB-%3d (%s): ", 128 + u * 64, - ( v == AES_DECRYPT ) ? "dec" : "enc" ); - - memset( buf, 0, 16 ); - - if( v == AES_DECRYPT ) - { - aes_setkey_dec( &ctx, key, 128 + u * 64 ); - - for( j = 0; j < 10000; j++ ) - aes_crypt_ecb( &ctx, v, buf, buf ); - - if( memcmp( buf, aes_test_ecb_dec[u], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - else - { - aes_setkey_enc( &ctx, key, 128 + u * 64 ); - - for( j = 0; j < 10000; j++ ) - aes_crypt_ecb( &ctx, v, buf, buf ); - - if( memcmp( buf, aes_test_ecb_enc[u], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -#if defined(POLARSSL_CIPHER_MODE_CBC) - /* - * CBC mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " AES-CBC-%3d (%s): ", 128 + u * 64, - ( v == AES_DECRYPT ) ? "dec" : "enc" ); - - memset( iv , 0, 16 ); - memset( prv, 0, 16 ); - memset( buf, 0, 16 ); - - if( v == AES_DECRYPT ) - { - aes_setkey_dec( &ctx, key, 128 + u * 64 ); - - for( j = 0; j < 10000; j++ ) - aes_crypt_cbc( &ctx, v, 16, iv, buf, buf ); - - if( memcmp( buf, aes_test_cbc_dec[u], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - else - { - aes_setkey_enc( &ctx, key, 128 + u * 64 ); - - for( j = 0; j < 10000; j++ ) - { - unsigned char tmp[16]; - - aes_crypt_cbc( &ctx, v, 16, iv, buf, buf ); - - memcpy( tmp, prv, 16 ); - memcpy( prv, buf, 16 ); - memcpy( buf, tmp, 16 ); - } - - if( memcmp( prv, aes_test_cbc_enc[u], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) - /* - * CFB128 mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " AES-CFB128-%3d (%s): ", 128 + u * 64, - ( v == AES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( iv, aes_test_cfb128_iv, 16 ); - memcpy( key, aes_test_cfb128_key[u], 16 + u * 8 ); - - offset = 0; - aes_setkey_enc( &ctx, key, 128 + u * 64 ); - - if( v == AES_DECRYPT ) - { - memcpy( buf, aes_test_cfb128_ct[u], 64 ); - aes_crypt_cfb128( &ctx, v, 64, &offset, iv, buf, buf ); - - if( memcmp( buf, aes_test_cfb128_pt, 64 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - else - { - memcpy( buf, aes_test_cfb128_pt, 64 ); - aes_crypt_cfb128( &ctx, v, 64, &offset, iv, buf, buf ); - - if( memcmp( buf, aes_test_cfb128_ct[u], 64 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); -#endif /* POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) - /* - * CTR mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " AES-CTR-128 (%s): ", - ( v == AES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( nonce_counter, aes_test_ctr_nonce_counter[u], 16 ); - memcpy( key, aes_test_ctr_key[u], 16 ); - - offset = 0; - aes_setkey_enc( &ctx, key, 128 ); - - if( v == AES_DECRYPT ) - { - len = aes_test_ctr_len[u]; - memcpy( buf, aes_test_ctr_ct[u], len ); - - aes_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); - - if( memcmp( buf, aes_test_ctr_pt[u], len ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - else - { - len = aes_test_ctr_len[u]; - memcpy( buf, aes_test_ctr_pt[u], len ); - - aes_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); - - if( memcmp( buf, aes_test_ctr_ct[u], len ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); -#endif /* POLARSSL_CIPHER_MODE_CTR */ - - ret = 0; - -exit: - aes_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_AES_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/aesni.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/aesni.c deleted file mode 100644 index 97f646e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/aesni.c +++ /dev/null @@ -1,463 +0,0 @@ -/* - * AES-NI support functions - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * [AES-WP] http://software.intel.com/en-us/articles/intel-advanced-encryption-standard-aes-instructions-set - * [CLMUL-WP] http://software.intel.com/en-us/articles/intel-carry-less-multiplication-instruction-and-its-usage-for-computing-the-gcm-mode/ - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_AESNI_C) - -#include "polarssl/aesni.h" -#include - -#if defined(POLARSSL_HAVE_X86_64) - -/* - * AES-NI support detection routine - */ -int aesni_supports( unsigned int what ) -{ - static int done = 0; - static unsigned int c = 0; - - if( ! done ) - { - asm( "movl $1, %%eax \n\t" - "cpuid \n\t" - : "=c" (c) - : - : "eax", "ebx", "edx" ); - done = 1; - } - - return( ( c & what ) != 0 ); -} - -/* - * Binutils needs to be at least 2.19 to support AES-NI instructions. - * Unfortunately, a lot of users have a lower version now (2014-04). - * Emit bytecode directly in order to support "old" version of gas. - * - * Opcodes from the Intel architecture reference manual, vol. 3. - * We always use registers, so we don't need prefixes for memory operands. - * Operand macros are in gas order (src, dst) as opposed to Intel order - * (dst, src) in order to blend better into the surrounding assembly code. - */ -#define AESDEC ".byte 0x66,0x0F,0x38,0xDE," -#define AESDECLAST ".byte 0x66,0x0F,0x38,0xDF," -#define AESENC ".byte 0x66,0x0F,0x38,0xDC," -#define AESENCLAST ".byte 0x66,0x0F,0x38,0xDD," -#define AESIMC ".byte 0x66,0x0F,0x38,0xDB," -#define AESKEYGENA ".byte 0x66,0x0F,0x3A,0xDF," -#define PCLMULQDQ ".byte 0x66,0x0F,0x3A,0x44," - -#define xmm0_xmm0 "0xC0" -#define xmm0_xmm1 "0xC8" -#define xmm0_xmm2 "0xD0" -#define xmm0_xmm3 "0xD8" -#define xmm0_xmm4 "0xE0" -#define xmm1_xmm0 "0xC1" -#define xmm1_xmm2 "0xD1" - -/* - * AES-NI AES-ECB block en(de)cryption - */ -int aesni_crypt_ecb( aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) -{ - asm( "movdqu (%3), %%xmm0 \n\t" // load input - "movdqu (%1), %%xmm1 \n\t" // load round key 0 - "pxor %%xmm1, %%xmm0 \n\t" // round 0 - "addq $16, %1 \n\t" // point to next round key - "subl $1, %0 \n\t" // normal rounds = nr - 1 - "test %2, %2 \n\t" // mode? - "jz 2f \n\t" // 0 = decrypt - - "1: \n\t" // encryption loop - "movdqu (%1), %%xmm1 \n\t" // load round key - AESENC xmm1_xmm0 "\n\t" // do round - "addq $16, %1 \n\t" // point to next round key - "subl $1, %0 \n\t" // loop - "jnz 1b \n\t" - "movdqu (%1), %%xmm1 \n\t" // load round key - AESENCLAST xmm1_xmm0 "\n\t" // last round - "jmp 3f \n\t" - - "2: \n\t" // decryption loop - "movdqu (%1), %%xmm1 \n\t" - AESDEC xmm1_xmm0 "\n\t" // do round - "addq $16, %1 \n\t" - "subl $1, %0 \n\t" - "jnz 2b \n\t" - "movdqu (%1), %%xmm1 \n\t" // load round key - AESDECLAST xmm1_xmm0 "\n\t" // last round - - "3: \n\t" - "movdqu %%xmm0, (%4) \n\t" // export output - : - : "r" (ctx->nr), "r" (ctx->rk), "r" (mode), "r" (input), "r" (output) - : "memory", "cc", "xmm0", "xmm1" ); - - - return( 0 ); -} - -/* - * GCM multiplication: c = a times b in GF(2^128) - * Based on [CLMUL-WP] algorithms 1 (with equation 27) and 5. - */ -void aesni_gcm_mult( unsigned char c[16], - const unsigned char a[16], - const unsigned char b[16] ) -{ - unsigned char aa[16], bb[16], cc[16]; - size_t i; - - /* The inputs are in big-endian order, so byte-reverse them */ - for( i = 0; i < 16; i++ ) - { - aa[i] = a[15 - i]; - bb[i] = b[15 - i]; - } - - asm( "movdqu (%0), %%xmm0 \n\t" // a1:a0 - "movdqu (%1), %%xmm1 \n\t" // b1:b0 - - /* - * Caryless multiplication xmm2:xmm1 = xmm0 * xmm1 - * using [CLMUL-WP] algorithm 1 (p. 13). - */ - "movdqa %%xmm1, %%xmm2 \n\t" // copy of b1:b0 - "movdqa %%xmm1, %%xmm3 \n\t" // same - "movdqa %%xmm1, %%xmm4 \n\t" // same - PCLMULQDQ xmm0_xmm1 ",0x00 \n\t" // a0*b0 = c1:c0 - PCLMULQDQ xmm0_xmm2 ",0x11 \n\t" // a1*b1 = d1:d0 - PCLMULQDQ xmm0_xmm3 ",0x10 \n\t" // a0*b1 = e1:e0 - PCLMULQDQ xmm0_xmm4 ",0x01 \n\t" // a1*b0 = f1:f0 - "pxor %%xmm3, %%xmm4 \n\t" // e1+f1:e0+f0 - "movdqa %%xmm4, %%xmm3 \n\t" // same - "psrldq $8, %%xmm4 \n\t" // 0:e1+f1 - "pslldq $8, %%xmm3 \n\t" // e0+f0:0 - "pxor %%xmm4, %%xmm2 \n\t" // d1:d0+e1+f1 - "pxor %%xmm3, %%xmm1 \n\t" // c1+e0+f1:c0 - - /* - * Now shift the result one bit to the left, - * taking advantage of [CLMUL-WP] eq 27 (p. 20) - */ - "movdqa %%xmm1, %%xmm3 \n\t" // r1:r0 - "movdqa %%xmm2, %%xmm4 \n\t" // r3:r2 - "psllq $1, %%xmm1 \n\t" // r1<<1:r0<<1 - "psllq $1, %%xmm2 \n\t" // r3<<1:r2<<1 - "psrlq $63, %%xmm3 \n\t" // r1>>63:r0>>63 - "psrlq $63, %%xmm4 \n\t" // r3>>63:r2>>63 - "movdqa %%xmm3, %%xmm5 \n\t" // r1>>63:r0>>63 - "pslldq $8, %%xmm3 \n\t" // r0>>63:0 - "pslldq $8, %%xmm4 \n\t" // r2>>63:0 - "psrldq $8, %%xmm5 \n\t" // 0:r1>>63 - "por %%xmm3, %%xmm1 \n\t" // r1<<1|r0>>63:r0<<1 - "por %%xmm4, %%xmm2 \n\t" // r3<<1|r2>>62:r2<<1 - "por %%xmm5, %%xmm2 \n\t" // r3<<1|r2>>62:r2<<1|r1>>63 - - /* - * Now reduce modulo the GCM polynomial x^128 + x^7 + x^2 + x + 1 - * using [CLMUL-WP] algorithm 5 (p. 20). - * Currently xmm2:xmm1 holds x3:x2:x1:x0 (already shifted). - */ - /* Step 2 (1) */ - "movdqa %%xmm1, %%xmm3 \n\t" // x1:x0 - "movdqa %%xmm1, %%xmm4 \n\t" // same - "movdqa %%xmm1, %%xmm5 \n\t" // same - "psllq $63, %%xmm3 \n\t" // x1<<63:x0<<63 = stuff:a - "psllq $62, %%xmm4 \n\t" // x1<<62:x0<<62 = stuff:b - "psllq $57, %%xmm5 \n\t" // x1<<57:x0<<57 = stuff:c - - /* Step 2 (2) */ - "pxor %%xmm4, %%xmm3 \n\t" // stuff:a+b - "pxor %%xmm5, %%xmm3 \n\t" // stuff:a+b+c - "pslldq $8, %%xmm3 \n\t" // a+b+c:0 - "pxor %%xmm3, %%xmm1 \n\t" // x1+a+b+c:x0 = d:x0 - - /* Steps 3 and 4 */ - "movdqa %%xmm1,%%xmm0 \n\t" // d:x0 - "movdqa %%xmm1,%%xmm4 \n\t" // same - "movdqa %%xmm1,%%xmm5 \n\t" // same - "psrlq $1, %%xmm0 \n\t" // e1:x0>>1 = e1:e0' - "psrlq $2, %%xmm4 \n\t" // f1:x0>>2 = f1:f0' - "psrlq $7, %%xmm5 \n\t" // g1:x0>>7 = g1:g0' - "pxor %%xmm4, %%xmm0 \n\t" // e1+f1:e0'+f0' - "pxor %%xmm5, %%xmm0 \n\t" // e1+f1+g1:e0'+f0'+g0' - // e0'+f0'+g0' is almost e0+f0+g0, ex\tcept for some missing - // bits carried from d. Now get those\t bits back in. - "movdqa %%xmm1,%%xmm3 \n\t" // d:x0 - "movdqa %%xmm1,%%xmm4 \n\t" // same - "movdqa %%xmm1,%%xmm5 \n\t" // same - "psllq $63, %%xmm3 \n\t" // d<<63:stuff - "psllq $62, %%xmm4 \n\t" // d<<62:stuff - "psllq $57, %%xmm5 \n\t" // d<<57:stuff - "pxor %%xmm4, %%xmm3 \n\t" // d<<63+d<<62:stuff - "pxor %%xmm5, %%xmm3 \n\t" // missing bits of d:stuff - "psrldq $8, %%xmm3 \n\t" // 0:missing bits of d - "pxor %%xmm3, %%xmm0 \n\t" // e1+f1+g1:e0+f0+g0 - "pxor %%xmm1, %%xmm0 \n\t" // h1:h0 - "pxor %%xmm2, %%xmm0 \n\t" // x3+h1:x2+h0 - - "movdqu %%xmm0, (%2) \n\t" // done - : - : "r" (aa), "r" (bb), "r" (cc) - : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5" ); - - /* Now byte-reverse the outputs */ - for( i = 0; i < 16; i++ ) - c[i] = cc[15 - i]; - - return; -} - -/* - * Compute decryption round keys from encryption round keys - */ -void aesni_inverse_key( unsigned char *invkey, - const unsigned char *fwdkey, int nr ) -{ - unsigned char *ik = invkey; - const unsigned char *fk = fwdkey + 16 * nr; - - memcpy( ik, fk, 16 ); - - for( fk -= 16, ik += 16; fk > fwdkey; fk -= 16, ik += 16 ) - asm( "movdqu (%0), %%xmm0 \n\t" - AESIMC xmm0_xmm0 "\n\t" - "movdqu %%xmm0, (%1) \n\t" - : - : "r" (fk), "r" (ik) - : "memory", "xmm0" ); - - memcpy( ik, fk, 16 ); -} - -/* - * Key expansion, 128-bit case - */ -static void aesni_setkey_enc_128( unsigned char *rk, - const unsigned char *key ) -{ - asm( "movdqu (%1), %%xmm0 \n\t" // copy the original key - "movdqu %%xmm0, (%0) \n\t" // as round key 0 - "jmp 2f \n\t" // skip auxiliary routine - - /* - * Finish generating the next round key. - * - * On entry xmm0 is r3:r2:r1:r0 and xmm1 is X:stuff:stuff:stuff - * with X = rot( sub( r3 ) ) ^ RCON. - * - * On exit, xmm0 is r7:r6:r5:r4 - * with r4 = X + r0, r5 = r4 + r1, r6 = r5 + r2, r7 = r6 + r3 - * and those are written to the round key buffer. - */ - "1: \n\t" - "pshufd $0xff, %%xmm1, %%xmm1 \n\t" // X:X:X:X - "pxor %%xmm0, %%xmm1 \n\t" // X+r3:X+r2:X+r1:r4 - "pslldq $4, %%xmm0 \n\t" // r2:r1:r0:0 - "pxor %%xmm0, %%xmm1 \n\t" // X+r3+r2:X+r2+r1:r5:r4 - "pslldq $4, %%xmm0 \n\t" // etc - "pxor %%xmm0, %%xmm1 \n\t" - "pslldq $4, %%xmm0 \n\t" - "pxor %%xmm1, %%xmm0 \n\t" // update xmm0 for next time! - "add $16, %0 \n\t" // point to next round key - "movdqu %%xmm0, (%0) \n\t" // write it - "ret \n\t" - - /* Main "loop" */ - "2: \n\t" - AESKEYGENA xmm0_xmm1 ",0x01 \n\tcall 1b \n\t" - AESKEYGENA xmm0_xmm1 ",0x02 \n\tcall 1b \n\t" - AESKEYGENA xmm0_xmm1 ",0x04 \n\tcall 1b \n\t" - AESKEYGENA xmm0_xmm1 ",0x08 \n\tcall 1b \n\t" - AESKEYGENA xmm0_xmm1 ",0x10 \n\tcall 1b \n\t" - AESKEYGENA xmm0_xmm1 ",0x20 \n\tcall 1b \n\t" - AESKEYGENA xmm0_xmm1 ",0x40 \n\tcall 1b \n\t" - AESKEYGENA xmm0_xmm1 ",0x80 \n\tcall 1b \n\t" - AESKEYGENA xmm0_xmm1 ",0x1B \n\tcall 1b \n\t" - AESKEYGENA xmm0_xmm1 ",0x36 \n\tcall 1b \n\t" - : - : "r" (rk), "r" (key) - : "memory", "cc", "0" ); -} - -/* - * Key expansion, 192-bit case - */ -static void aesni_setkey_enc_192( unsigned char *rk, - const unsigned char *key ) -{ - asm( "movdqu (%1), %%xmm0 \n\t" // copy original round key - "movdqu %%xmm0, (%0) \n\t" - "add $16, %0 \n\t" - "movq 16(%1), %%xmm1 \n\t" - "movq %%xmm1, (%0) \n\t" - "add $8, %0 \n\t" - "jmp 2f \n\t" // skip auxiliary routine - - /* - * Finish generating the next 6 quarter-keys. - * - * On entry xmm0 is r3:r2:r1:r0, xmm1 is stuff:stuff:r5:r4 - * and xmm2 is stuff:stuff:X:stuff with X = rot( sub( r3 ) ) ^ RCON. - * - * On exit, xmm0 is r9:r8:r7:r6 and xmm1 is stuff:stuff:r11:r10 - * and those are written to the round key buffer. - */ - "1: \n\t" - "pshufd $0x55, %%xmm2, %%xmm2 \n\t" // X:X:X:X - "pxor %%xmm0, %%xmm2 \n\t" // X+r3:X+r2:X+r1:r4 - "pslldq $4, %%xmm0 \n\t" // etc - "pxor %%xmm0, %%xmm2 \n\t" - "pslldq $4, %%xmm0 \n\t" - "pxor %%xmm0, %%xmm2 \n\t" - "pslldq $4, %%xmm0 \n\t" - "pxor %%xmm2, %%xmm0 \n\t" // update xmm0 = r9:r8:r7:r6 - "movdqu %%xmm0, (%0) \n\t" - "add $16, %0 \n\t" - "pshufd $0xff, %%xmm0, %%xmm2 \n\t" // r9:r9:r9:r9 - "pxor %%xmm1, %%xmm2 \n\t" // stuff:stuff:r9+r5:r10 - "pslldq $4, %%xmm1 \n\t" // r2:r1:r0:0 - "pxor %%xmm2, %%xmm1 \n\t" // xmm1 = stuff:stuff:r11:r10 - "movq %%xmm1, (%0) \n\t" - "add $8, %0 \n\t" - "ret \n\t" - - "2: \n\t" - AESKEYGENA xmm1_xmm2 ",0x01 \n\tcall 1b \n\t" - AESKEYGENA xmm1_xmm2 ",0x02 \n\tcall 1b \n\t" - AESKEYGENA xmm1_xmm2 ",0x04 \n\tcall 1b \n\t" - AESKEYGENA xmm1_xmm2 ",0x08 \n\tcall 1b \n\t" - AESKEYGENA xmm1_xmm2 ",0x10 \n\tcall 1b \n\t" - AESKEYGENA xmm1_xmm2 ",0x20 \n\tcall 1b \n\t" - AESKEYGENA xmm1_xmm2 ",0x40 \n\tcall 1b \n\t" - AESKEYGENA xmm1_xmm2 ",0x80 \n\tcall 1b \n\t" - - : - : "r" (rk), "r" (key) - : "memory", "cc", "0" ); -} - -/* - * Key expansion, 256-bit case - */ -static void aesni_setkey_enc_256( unsigned char *rk, - const unsigned char *key ) -{ - asm( "movdqu (%1), %%xmm0 \n\t" - "movdqu %%xmm0, (%0) \n\t" - "add $16, %0 \n\t" - "movdqu 16(%1), %%xmm1 \n\t" - "movdqu %%xmm1, (%0) \n\t" - "jmp 2f \n\t" // skip auxiliary routine - - /* - * Finish generating the next two round keys. - * - * On entry xmm0 is r3:r2:r1:r0, xmm1 is r7:r6:r5:r4 and - * xmm2 is X:stuff:stuff:stuff with X = rot( sub( r7 )) ^ RCON - * - * On exit, xmm0 is r11:r10:r9:r8 and xmm1 is r15:r14:r13:r12 - * and those have been written to the output buffer. - */ - "1: \n\t" - "pshufd $0xff, %%xmm2, %%xmm2 \n\t" - "pxor %%xmm0, %%xmm2 \n\t" - "pslldq $4, %%xmm0 \n\t" - "pxor %%xmm0, %%xmm2 \n\t" - "pslldq $4, %%xmm0 \n\t" - "pxor %%xmm0, %%xmm2 \n\t" - "pslldq $4, %%xmm0 \n\t" - "pxor %%xmm2, %%xmm0 \n\t" - "add $16, %0 \n\t" - "movdqu %%xmm0, (%0) \n\t" - - /* Set xmm2 to stuff:Y:stuff:stuff with Y = subword( r11 ) - * and proceed to generate next round key from there */ - AESKEYGENA xmm0_xmm2 ",0x00 \n\t" - "pshufd $0xaa, %%xmm2, %%xmm2 \n\t" - "pxor %%xmm1, %%xmm2 \n\t" - "pslldq $4, %%xmm1 \n\t" - "pxor %%xmm1, %%xmm2 \n\t" - "pslldq $4, %%xmm1 \n\t" - "pxor %%xmm1, %%xmm2 \n\t" - "pslldq $4, %%xmm1 \n\t" - "pxor %%xmm2, %%xmm1 \n\t" - "add $16, %0 \n\t" - "movdqu %%xmm1, (%0) \n\t" - "ret \n\t" - - /* - * Main "loop" - Generating one more key than necessary, - * see definition of aes_context.buf - */ - "2: \n\t" - AESKEYGENA xmm1_xmm2 ",0x01 \n\tcall 1b \n\t" - AESKEYGENA xmm1_xmm2 ",0x02 \n\tcall 1b \n\t" - AESKEYGENA xmm1_xmm2 ",0x04 \n\tcall 1b \n\t" - AESKEYGENA xmm1_xmm2 ",0x08 \n\tcall 1b \n\t" - AESKEYGENA xmm1_xmm2 ",0x10 \n\tcall 1b \n\t" - AESKEYGENA xmm1_xmm2 ",0x20 \n\tcall 1b \n\t" - AESKEYGENA xmm1_xmm2 ",0x40 \n\tcall 1b \n\t" - : - : "r" (rk), "r" (key) - : "memory", "cc", "0" ); -} - -/* - * Key expansion, wrapper - */ -int aesni_setkey_enc( unsigned char *rk, - const unsigned char *key, - size_t bits ) -{ - switch( bits ) - { - case 128: aesni_setkey_enc_128( rk, key ); break; - case 192: aesni_setkey_enc_192( rk, key ); break; - case 256: aesni_setkey_enc_256( rk, key ); break; - default : return( POLARSSL_ERR_AES_INVALID_KEY_LENGTH ); - } - - return( 0 ); -} - -#endif /* POLARSSL_HAVE_X86_64 */ - -#endif /* POLARSSL_AESNI_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/arc4.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/arc4.c deleted file mode 100644 index 54e89ea..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/arc4.c +++ /dev/null @@ -1,208 +0,0 @@ -/* - * An implementation of the ARCFOUR algorithm - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The ARCFOUR algorithm was publicly disclosed on 94/09. - * - * http://groups.google.com/group/sci.crypt/msg/10a300c9d21afca0 - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ARC4_C) - -#include "polarssl/arc4.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -#if !defined(POLARSSL_ARC4_ALT) - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -void arc4_init( arc4_context *ctx ) -{ - memset( ctx, 0, sizeof( arc4_context ) ); -} - -void arc4_free( arc4_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( arc4_context ) ); -} - -/* - * ARC4 key schedule - */ -void arc4_setup( arc4_context *ctx, const unsigned char *key, - unsigned int keylen ) -{ - int i, j, a; - unsigned int k; - unsigned char *m; - - ctx->x = 0; - ctx->y = 0; - m = ctx->m; - - for( i = 0; i < 256; i++ ) - m[i] = (unsigned char) i; - - j = k = 0; - - for( i = 0; i < 256; i++, k++ ) - { - if( k >= keylen ) k = 0; - - a = m[i]; - j = ( j + a + key[k] ) & 0xFF; - m[i] = m[j]; - m[j] = (unsigned char) a; - } -} - -/* - * ARC4 cipher function - */ -int arc4_crypt( arc4_context *ctx, size_t length, const unsigned char *input, - unsigned char *output ) -{ - int x, y, a, b; - size_t i; - unsigned char *m; - - x = ctx->x; - y = ctx->y; - m = ctx->m; - - for( i = 0; i < length; i++ ) - { - x = ( x + 1 ) & 0xFF; a = m[x]; - y = ( y + a ) & 0xFF; b = m[y]; - - m[x] = (unsigned char) b; - m[y] = (unsigned char) a; - - output[i] = (unsigned char) - ( input[i] ^ m[(unsigned char)( a + b )] ); - } - - ctx->x = x; - ctx->y = y; - - return( 0 ); -} - -#endif /* !POLARSSL_ARC4_ALT */ - -#if defined(POLARSSL_SELF_TEST) - -#include -#include - -/* - * ARC4 tests vectors as posted by Eric Rescorla in sep. 1994: - * - * http://groups.google.com/group/comp.security.misc/msg/10a300c9d21afca0 - */ -static const unsigned char arc4_test_key[3][8] = -{ - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}; - -static const unsigned char arc4_test_pt[3][8] = -{ - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}; - -static const unsigned char arc4_test_ct[3][8] = -{ - { 0x75, 0xB7, 0x87, 0x80, 0x99, 0xE0, 0xC5, 0x96 }, - { 0x74, 0x94, 0xC2, 0xE7, 0x10, 0x4B, 0x08, 0x79 }, - { 0xDE, 0x18, 0x89, 0x41, 0xA3, 0x37, 0x5D, 0x3A } -}; - -/* - * Checkup routine - */ -int arc4_self_test( int verbose ) -{ - int i, ret = 0; - unsigned char ibuf[8]; - unsigned char obuf[8]; - arc4_context ctx; - - arc4_init( &ctx ); - - for( i = 0; i < 3; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " ARC4 test #%d: ", i + 1 ); - - memcpy( ibuf, arc4_test_pt[i], 8 ); - - arc4_setup( &ctx, arc4_test_key[i], 8 ); - arc4_crypt( &ctx, 8, ibuf, obuf ); - - if( memcmp( obuf, arc4_test_ct[i], 8 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - arc4_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_ARC4_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/asn1parse.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/asn1parse.c deleted file mode 100644 index 9744352..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/asn1parse.c +++ /dev/null @@ -1,391 +0,0 @@ -/* - * Generic ASN.1 parsing - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ASN1_PARSE_C) - -#include "polarssl/asn1.h" - -#if defined(POLARSSL_BIGNUM_C) -#include "polarssl/bignum.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include -#include - -/* - * ASN.1 DER decoding routines - */ -int asn1_get_len( unsigned char **p, - const unsigned char *end, - size_t *len ) -{ - if( ( end - *p ) < 1 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - if( ( **p & 0x80 ) == 0 ) - *len = *(*p)++; - else - { - switch( **p & 0x7F ) - { - case 1: - if( ( end - *p ) < 2 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - *len = (*p)[1]; - (*p) += 2; - break; - - case 2: - if( ( end - *p ) < 3 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - *len = ( (*p)[1] << 8 ) | (*p)[2]; - (*p) += 3; - break; - - case 3: - if( ( end - *p ) < 4 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - *len = ( (*p)[1] << 16 ) | ( (*p)[2] << 8 ) | (*p)[3]; - (*p) += 4; - break; - - case 4: - if( ( end - *p ) < 5 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - *len = ( (*p)[1] << 24 ) | ( (*p)[2] << 16 ) | ( (*p)[3] << 8 ) | - (*p)[4]; - (*p) += 5; - break; - - default: - return( POLARSSL_ERR_ASN1_INVALID_LENGTH ); - } - } - - if( *len > (size_t) ( end - *p ) ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - return( 0 ); -} - -int asn1_get_tag( unsigned char **p, - const unsigned char *end, - size_t *len, int tag ) -{ - if( ( end - *p ) < 1 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - if( **p != tag ) - return( POLARSSL_ERR_ASN1_UNEXPECTED_TAG ); - - (*p)++; - - return( asn1_get_len( p, end, len ) ); -} - -int asn1_get_bool( unsigned char **p, - const unsigned char *end, - int *val ) -{ - int ret; - size_t len; - - if( ( ret = asn1_get_tag( p, end, &len, ASN1_BOOLEAN ) ) != 0 ) - return( ret ); - - if( len != 1 ) - return( POLARSSL_ERR_ASN1_INVALID_LENGTH ); - - *val = ( **p != 0 ) ? 1 : 0; - (*p)++; - - return( 0 ); -} - -int asn1_get_int( unsigned char **p, - const unsigned char *end, - int *val ) -{ - int ret; - size_t len; - - if( ( ret = asn1_get_tag( p, end, &len, ASN1_INTEGER ) ) != 0 ) - return( ret ); - - if( len > sizeof( int ) || ( **p & 0x80 ) != 0 ) - return( POLARSSL_ERR_ASN1_INVALID_LENGTH ); - - *val = 0; - - while( len-- > 0 ) - { - *val = ( *val << 8 ) | **p; - (*p)++; - } - - return( 0 ); -} - -#if defined(POLARSSL_BIGNUM_C) -int asn1_get_mpi( unsigned char **p, - const unsigned char *end, - mpi *X ) -{ - int ret; - size_t len; - - if( ( ret = asn1_get_tag( p, end, &len, ASN1_INTEGER ) ) != 0 ) - return( ret ); - - ret = mpi_read_binary( X, *p, len ); - - *p += len; - - return( ret ); -} -#endif /* POLARSSL_BIGNUM_C */ - -int asn1_get_bitstring( unsigned char **p, const unsigned char *end, - asn1_bitstring *bs) -{ - int ret; - - /* Certificate type is a single byte bitstring */ - if( ( ret = asn1_get_tag( p, end, &bs->len, ASN1_BIT_STRING ) ) != 0 ) - return( ret ); - - /* Check length, subtract one for actual bit string length */ - if( bs->len < 1 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - bs->len -= 1; - - /* Get number of unused bits, ensure unused bits <= 7 */ - bs->unused_bits = **p; - if( bs->unused_bits > 7 ) - return( POLARSSL_ERR_ASN1_INVALID_LENGTH ); - (*p)++; - - /* Get actual bitstring */ - bs->p = *p; - *p += bs->len; - - if( *p != end ) - return( POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -/* - * Get a bit string without unused bits - */ -int asn1_get_bitstring_null( unsigned char **p, const unsigned char *end, - size_t *len ) -{ - int ret; - - if( ( ret = asn1_get_tag( p, end, len, ASN1_BIT_STRING ) ) != 0 ) - return( ret ); - - if( (*len)-- < 2 || *(*p)++ != 0 ) - return( POLARSSL_ERR_ASN1_INVALID_DATA ); - - return( 0 ); -} - - - -/* - * Parses and splits an ASN.1 "SEQUENCE OF " - */ -int asn1_get_sequence_of( unsigned char **p, - const unsigned char *end, - asn1_sequence *cur, - int tag) -{ - int ret; - size_t len; - asn1_buf *buf; - - /* Get main sequence tag */ - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( ret ); - - if( *p + len != end ) - return( POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - while( *p < end ) - { - buf = &(cur->buf); - buf->tag = **p; - - if( ( ret = asn1_get_tag( p, end, &buf->len, tag ) ) != 0 ) - return( ret ); - - buf->p = *p; - *p += buf->len; - - /* Allocate and assign next pointer */ - if( *p < end ) - { - cur->next = (asn1_sequence *) polarssl_malloc( - sizeof( asn1_sequence ) ); - - if( cur->next == NULL ) - return( POLARSSL_ERR_ASN1_MALLOC_FAILED ); - - cur = cur->next; - } - } - - /* Set final sequence entry's next pointer to NULL */ - cur->next = NULL; - - if( *p != end ) - return( POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -int asn1_get_alg( unsigned char **p, - const unsigned char *end, - asn1_buf *alg, asn1_buf *params ) -{ - int ret; - size_t len; - - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( ret ); - - if( ( end - *p ) < 1 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - alg->tag = **p; - end = *p + len; - - if( ( ret = asn1_get_tag( p, end, &alg->len, ASN1_OID ) ) != 0 ) - return( ret ); - - alg->p = *p; - *p += alg->len; - - if( *p == end ) - { - memset( params, 0, sizeof(asn1_buf) ); - return( 0 ); - } - - params->tag = **p; - (*p)++; - - if( ( ret = asn1_get_len( p, end, ¶ms->len ) ) != 0 ) - return( ret ); - - params->p = *p; - *p += params->len; - - if( *p != end ) - return( POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -int asn1_get_alg_null( unsigned char **p, - const unsigned char *end, - asn1_buf *alg ) -{ - int ret; - asn1_buf params; - - memset( ¶ms, 0, sizeof(asn1_buf) ); - - if( ( ret = asn1_get_alg( p, end, alg, ¶ms ) ) != 0 ) - return( ret ); - - if( ( params.tag != ASN1_NULL && params.tag != 0 ) || params.len != 0 ) - return( POLARSSL_ERR_ASN1_INVALID_DATA ); - - return( 0 ); -} - -void asn1_free_named_data( asn1_named_data *cur ) -{ - if( cur == NULL ) - return; - - polarssl_free( cur->oid.p ); - polarssl_free( cur->val.p ); - - memset( cur, 0, sizeof( asn1_named_data ) ); -} - -void asn1_free_named_data_list( asn1_named_data **head ) -{ - asn1_named_data *cur; - - while( ( cur = *head ) != NULL ) - { - *head = cur->next; - asn1_free_named_data( cur ); - polarssl_free( cur ); - } -} - -asn1_named_data *asn1_find_named_data( asn1_named_data *list, - const char *oid, size_t len ) -{ - while( list != NULL ) - { - if( list->oid.len == len && - memcmp( list->oid.p, oid, len ) == 0 ) - { - break; - } - - list = list->next; - } - - return( list ); -} - -#endif /* POLARSSL_ASN1_PARSE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/asn1write.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/asn1write.c deleted file mode 100644 index ebc0e97..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/asn1write.c +++ /dev/null @@ -1,366 +0,0 @@ -/* - * ASN.1 buffer writing functionality - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ASN1_WRITE_C) - -#include "polarssl/asn1write.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#include -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -int asn1_write_len( unsigned char **p, unsigned char *start, size_t len ) -{ - if( len < 0x80 ) - { - if( *p - start < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - *--(*p) = (unsigned char) len; - return( 1 ); - } - - if( len <= 0xFF ) - { - if( *p - start < 2 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - *--(*p) = (unsigned char) len; - *--(*p) = 0x81; - return( 2 ); - } - - if( *p - start < 3 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - // We assume we never have lengths larger than 65535 bytes - // - *--(*p) = len % 256; - *--(*p) = ( len / 256 ) % 256; - *--(*p) = 0x82; - - return( 3 ); -} - -int asn1_write_tag( unsigned char **p, unsigned char *start, unsigned char tag ) -{ - if( *p - start < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - *--(*p) = tag; - - return( 1 ); -} - -int asn1_write_raw_buffer( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t size ) -{ - size_t len = 0; - - if( *p - start < (int) size ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - len = size; - (*p) -= len; - memcpy( *p, buf, len ); - - return( (int) len ); -} - -#if defined(POLARSSL_BIGNUM_C) -int asn1_write_mpi( unsigned char **p, unsigned char *start, mpi *X ) -{ - int ret; - size_t len = 0; - - // Write the MPI - // - len = mpi_size( X ); - - if( *p - start < (int) len ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - (*p) -= len; - MPI_CHK( mpi_write_binary( X, *p, len ) ); - - // DER format assumes 2s complement for numbers, so the leftmost bit - // should be 0 for positive numbers and 1 for negative numbers. - // - if( X->s ==1 && **p & 0x80 ) - { - if( *p - start < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - *--(*p) = 0x00; - len += 1; - } - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_INTEGER ) ); - - ret = (int) len; - -cleanup: - return( ret ); -} -#endif /* POLARSSL_BIGNUM_C */ - -int asn1_write_null( unsigned char **p, unsigned char *start ) -{ - int ret; - size_t len = 0; - - // Write NULL - // - ASN1_CHK_ADD( len, asn1_write_len( p, start, 0) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_NULL ) ); - - return( (int) len ); -} - -int asn1_write_oid( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len ) -{ - int ret; - size_t len = 0; - - ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, - (const unsigned char *) oid, oid_len ) ); - ASN1_CHK_ADD( len , asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len , asn1_write_tag( p, start, ASN1_OID ) ); - - return( (int) len ); -} - -int asn1_write_algorithm_identifier( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len, - size_t par_len ) -{ - int ret; - size_t len = 0; - - if( par_len == 0 ) - ASN1_CHK_ADD( len, asn1_write_null( p, start ) ); - else - len += par_len; - - ASN1_CHK_ADD( len, asn1_write_oid( p, start, oid, oid_len ) ); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ); - - return( (int) len ); -} - -int asn1_write_bool( unsigned char **p, unsigned char *start, int boolean ) -{ - int ret; - size_t len = 0; - - if( *p - start < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - *--(*p) = (boolean) ? 1 : 0; - len++; - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_BOOLEAN ) ); - - return( (int) len ); -} - -int asn1_write_int( unsigned char **p, unsigned char *start, int val ) -{ - int ret; - size_t len = 0; - - // TODO negative values and values larger than 128 - // DER format assumes 2s complement for numbers, so the leftmost bit - // should be 0 for positive numbers and 1 for negative numbers. - // - if( *p - start < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - len += 1; - *--(*p) = val; - - if( val > 0 && **p & 0x80 ) - { - if( *p - start < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - *--(*p) = 0x00; - len += 1; - } - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_INTEGER ) ); - - return( (int) len ); -} - -int asn1_write_printable_string( unsigned char **p, unsigned char *start, - const char *text, size_t text_len ) -{ - int ret; - size_t len = 0; - - ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, - (const unsigned char *) text, text_len ) ); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_PRINTABLE_STRING ) ); - - return( (int) len ); -} - -int asn1_write_ia5_string( unsigned char **p, unsigned char *start, - const char *text, size_t text_len ) -{ - int ret; - size_t len = 0; - - ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, - (const unsigned char *) text, text_len ) ); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_IA5_STRING ) ); - - return( (int) len ); -} - -int asn1_write_bitstring( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t bits ) -{ - int ret; - size_t len = 0, size; - - size = ( bits / 8 ) + ( ( bits % 8 ) ? 1 : 0 ); - - // Calculate byte length - // - if( *p - start < (int) size + 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - len = size + 1; - (*p) -= size; - memcpy( *p, buf, size ); - - // Write unused bits - // - *--(*p) = (unsigned char) (size * 8 - bits); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_BIT_STRING ) ); - - return( (int) len ); -} - -int asn1_write_octet_string( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t size ) -{ - int ret; - size_t len = 0; - - ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, buf, size ) ); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_OCTET_STRING ) ); - - return( (int) len ); -} - -asn1_named_data *asn1_store_named_data( asn1_named_data **head, - const char *oid, size_t oid_len, - const unsigned char *val, - size_t val_len ) -{ - asn1_named_data *cur; - - if( ( cur = asn1_find_named_data( *head, oid, oid_len ) ) == NULL ) - { - // Add new entry if not present yet based on OID - // - if( ( cur = polarssl_malloc( sizeof(asn1_named_data) ) ) == NULL ) - return( NULL ); - - memset( cur, 0, sizeof(asn1_named_data) ); - - cur->oid.len = oid_len; - cur->oid.p = polarssl_malloc( oid_len ); - if( cur->oid.p == NULL ) - { - polarssl_free( cur ); - return( NULL ); - } - - cur->val.len = val_len; - cur->val.p = polarssl_malloc( val_len ); - if( cur->val.p == NULL ) - { - polarssl_free( cur->oid.p ); - polarssl_free( cur ); - return( NULL ); - } - - memcpy( cur->oid.p, oid, oid_len ); - - cur->next = *head; - *head = cur; - } - else if( cur->val.len < val_len ) - { - // Enlarge existing value buffer if needed - // - polarssl_free( cur->val.p ); - cur->val.p = NULL; - - cur->val.len = val_len; - cur->val.p = polarssl_malloc( val_len ); - if( cur->val.p == NULL ) - { - polarssl_free( cur->oid.p ); - polarssl_free( cur ); - return( NULL ); - } - } - - if( val != NULL ) - memcpy( cur->val.p, val, val_len ); - - return( cur ); -} -#endif /* POLARSSL_ASN1_WRITE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/base64.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/base64.c deleted file mode 100644 index 39a8323..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/base64.c +++ /dev/null @@ -1,273 +0,0 @@ -/* - * RFC 1521 base64 encoding/decoding - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_BASE64_C) - -#include "polarssl/base64.h" - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -static const unsigned char base64_enc_map[64] = -{ - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', - 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', - 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', - 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', - 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', - 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', '+', '/' -}; - -static const unsigned char base64_dec_map[128] = -{ - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 62, 127, 127, 127, 63, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 127, 127, - 127, 64, 127, 127, 127, 0, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 127, 127, 127, 127, 127, 127, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 127, 127, 127, 127, 127 -}; - -/* - * Encode a buffer into base64 format - */ -int base64_encode( unsigned char *dst, size_t *dlen, - const unsigned char *src, size_t slen ) -{ - size_t i, n; - int C1, C2, C3; - unsigned char *p; - - if( slen == 0 ) - return( 0 ); - - n = ( slen << 3 ) / 6; - - switch( ( slen << 3 ) - ( n * 6 ) ) - { - case 2: n += 3; break; - case 4: n += 2; break; - default: break; - } - - if( *dlen < n + 1 ) - { - *dlen = n + 1; - return( POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL ); - } - - n = ( slen / 3 ) * 3; - - for( i = 0, p = dst; i < n; i += 3 ) - { - C1 = *src++; - C2 = *src++; - C3 = *src++; - - *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; - *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; - *p++ = base64_enc_map[(((C2 & 15) << 2) + (C3 >> 6)) & 0x3F]; - *p++ = base64_enc_map[C3 & 0x3F]; - } - - if( i < slen ) - { - C1 = *src++; - C2 = ( ( i + 1 ) < slen ) ? *src++ : 0; - - *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; - *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; - - if( ( i + 1 ) < slen ) - *p++ = base64_enc_map[((C2 & 15) << 2) & 0x3F]; - else *p++ = '='; - - *p++ = '='; - } - - *dlen = p - dst; - *p = 0; - - return( 0 ); -} - -/* - * Decode a base64-formatted buffer - */ -int base64_decode( unsigned char *dst, size_t *dlen, - const unsigned char *src, size_t slen ) -{ - size_t i, n; - uint32_t j, x; - unsigned char *p; - - for( i = n = j = 0; i < slen; i++ ) - { - if( ( slen - i ) >= 2 && - src[i] == '\r' && src[i + 1] == '\n' ) - continue; - - if( src[i] == '\n' ) - continue; - - if( src[i] == '=' && ++j > 2 ) - return( POLARSSL_ERR_BASE64_INVALID_CHARACTER ); - - if( src[i] > 127 || base64_dec_map[src[i]] == 127 ) - return( POLARSSL_ERR_BASE64_INVALID_CHARACTER ); - - if( base64_dec_map[src[i]] < 64 && j != 0 ) - return( POLARSSL_ERR_BASE64_INVALID_CHARACTER ); - - n++; - } - - if( n == 0 ) - return( 0 ); - - n = ( ( n * 6 ) + 7 ) >> 3; - n -= j; - - if( dst == NULL || *dlen < n ) - { - *dlen = n; - return( POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL ); - } - - for( j = 3, n = x = 0, p = dst; i > 0; i--, src++ ) - { - if( *src == '\r' || *src == '\n' ) - continue; - - j -= ( base64_dec_map[*src] == 64 ); - x = ( x << 6 ) | ( base64_dec_map[*src] & 0x3F ); - - if( ++n == 4 ) - { - n = 0; - if( j > 0 ) *p++ = (unsigned char)( x >> 16 ); - if( j > 1 ) *p++ = (unsigned char)( x >> 8 ); - if( j > 2 ) *p++ = (unsigned char)( x ); - } - } - - *dlen = p - dst; - - return( 0 ); -} - -#if defined(POLARSSL_SELF_TEST) - -#include -#include - -static const unsigned char base64_test_dec[64] = -{ - 0x24, 0x48, 0x6E, 0x56, 0x87, 0x62, 0x5A, 0xBD, - 0xBF, 0x17, 0xD9, 0xA2, 0xC4, 0x17, 0x1A, 0x01, - 0x94, 0xED, 0x8F, 0x1E, 0x11, 0xB3, 0xD7, 0x09, - 0x0C, 0xB6, 0xE9, 0x10, 0x6F, 0x22, 0xEE, 0x13, - 0xCA, 0xB3, 0x07, 0x05, 0x76, 0xC9, 0xFA, 0x31, - 0x6C, 0x08, 0x34, 0xFF, 0x8D, 0xC2, 0x6C, 0x38, - 0x00, 0x43, 0xE9, 0x54, 0x97, 0xAF, 0x50, 0x4B, - 0xD1, 0x41, 0xBA, 0x95, 0x31, 0x5A, 0x0B, 0x97 -}; - -static const unsigned char base64_test_enc[] = - "JEhuVodiWr2/F9mixBcaAZTtjx4Rs9cJDLbpEG8i7hPK" - "swcFdsn6MWwINP+Nwmw4AEPpVJevUEvRQbqVMVoLlw=="; - -/* - * Checkup routine - */ -int base64_self_test( int verbose ) -{ - size_t len; - const unsigned char *src; - unsigned char buffer[128]; - - if( verbose != 0 ) - polarssl_printf( " Base64 encoding test: " ); - - len = sizeof( buffer ); - src = base64_test_dec; - - if( base64_encode( buffer, &len, src, 64 ) != 0 || - memcmp( base64_test_enc, buffer, 88 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n Base64 decoding test: " ); - - len = sizeof( buffer ); - src = base64_test_enc; - - if( base64_decode( buffer, &len, src, 88 ) != 0 || - memcmp( base64_test_dec, buffer, 64 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n\n" ); - - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_BASE64_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/bignum.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/bignum.c deleted file mode 100644 index 80cf0f8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/bignum.c +++ /dev/null @@ -1,2344 +0,0 @@ -/* - * Multi-precision integer library - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * This MPI implementation is based on: - * - * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf - * http://www.stillhq.com/extracted/gnupg-api/mpi/ - * http://math.libtomcrypt.com/files/tommath.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_BIGNUM_C) - -#include "polarssl/bignum.h" -#include "polarssl/bn_mul.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#define ciL (sizeof(t_uint)) /* chars in limb */ -#define biL (ciL << 3) /* bits in limb */ -#define biH (ciL << 2) /* half limb size */ - -/* - * Convert between bits/chars and number of limbs - */ -#define BITS_TO_LIMBS(i) (((i) + biL - 1) / biL) -#define CHARS_TO_LIMBS(i) (((i) + ciL - 1) / ciL) - -/* - * Initialize one MPI - */ -void mpi_init( mpi *X ) -{ - if( X == NULL ) - return; - - X->s = 1; - X->n = 0; - X->p = NULL; -} - -/* - * Unallocate one MPI - */ -void mpi_free( mpi *X ) -{ - if( X == NULL ) - return; - - if( X->p != NULL ) - { - polarssl_zeroize( X->p, X->n * ciL ); - polarssl_free( X->p ); - } - - X->s = 1; - X->n = 0; - X->p = NULL; -} - -/* - * Enlarge to the specified number of limbs - */ -int mpi_grow( mpi *X, size_t nblimbs ) -{ - t_uint *p; - - if( nblimbs > POLARSSL_MPI_MAX_LIMBS ) - return( POLARSSL_ERR_MPI_MALLOC_FAILED ); - - if( X->n < nblimbs ) - { - if( ( p = (t_uint *) polarssl_malloc( nblimbs * ciL ) ) == NULL ) - return( POLARSSL_ERR_MPI_MALLOC_FAILED ); - - memset( p, 0, nblimbs * ciL ); - - if( X->p != NULL ) - { - memcpy( p, X->p, X->n * ciL ); - polarssl_zeroize( X->p, X->n * ciL ); - polarssl_free( X->p ); - } - - X->n = nblimbs; - X->p = p; - } - - return( 0 ); -} - -/* - * Resize down as much as possible, - * while keeping at least the specified number of limbs - */ -int mpi_shrink( mpi *X, size_t nblimbs ) -{ - t_uint *p; - size_t i; - - /* Actually resize up in this case */ - if( X->n <= nblimbs ) - return( mpi_grow( X, nblimbs ) ); - - for( i = X->n - 1; i > 0; i-- ) - if( X->p[i] != 0 ) - break; - i++; - - if( i < nblimbs ) - i = nblimbs; - - if( ( p = (t_uint *) polarssl_malloc( i * ciL ) ) == NULL ) - return( POLARSSL_ERR_MPI_MALLOC_FAILED ); - - memset( p, 0, i * ciL ); - - if( X->p != NULL ) - { - memcpy( p, X->p, i * ciL ); - polarssl_zeroize( X->p, X->n * ciL ); - polarssl_free( X->p ); - } - - X->n = i; - X->p = p; - - return( 0 ); -} - -/* - * Copy the contents of Y into X - */ -int mpi_copy( mpi *X, const mpi *Y ) -{ - int ret; - size_t i; - - if( X == Y ) - return( 0 ); - - if( Y->p == NULL ) - { - mpi_free( X ); - return( 0 ); - } - - for( i = Y->n - 1; i > 0; i-- ) - if( Y->p[i] != 0 ) - break; - i++; - - X->s = Y->s; - - MPI_CHK( mpi_grow( X, i ) ); - - memset( X->p, 0, X->n * ciL ); - memcpy( X->p, Y->p, i * ciL ); - -cleanup: - - return( ret ); -} - -/* - * Swap the contents of X and Y - */ -void mpi_swap( mpi *X, mpi *Y ) -{ - mpi T; - - memcpy( &T, X, sizeof( mpi ) ); - memcpy( X, Y, sizeof( mpi ) ); - memcpy( Y, &T, sizeof( mpi ) ); -} - -/* - * Conditionally assign X = Y, without leaking information - * about whether the assignment was made or not. - * (Leaking information about the respective sizes of X and Y is ok however.) - */ -int mpi_safe_cond_assign( mpi *X, const mpi *Y, unsigned char assign ) -{ - int ret = 0; - size_t i; - - /* make sure assign is 0 or 1 */ - assign = ( assign != 0 ); - - MPI_CHK( mpi_grow( X, Y->n ) ); - - X->s = X->s * ( 1 - assign ) + Y->s * assign; - - for( i = 0; i < Y->n; i++ ) - X->p[i] = X->p[i] * ( 1 - assign ) + Y->p[i] * assign; - - for( ; i < X->n; i++ ) - X->p[i] *= ( 1 - assign ); - -cleanup: - return( ret ); -} - -/* - * Conditionally swap X and Y, without leaking information - * about whether the swap was made or not. - * Here it is not ok to simply swap the pointers, which whould lead to - * different memory access patterns when X and Y are used afterwards. - */ -int mpi_safe_cond_swap( mpi *X, mpi *Y, unsigned char swap ) -{ - int ret, s; - size_t i; - t_uint tmp; - - if( X == Y ) - return( 0 ); - - /* make sure swap is 0 or 1 */ - swap = ( swap != 0 ); - - MPI_CHK( mpi_grow( X, Y->n ) ); - MPI_CHK( mpi_grow( Y, X->n ) ); - - s = X->s; - X->s = X->s * ( 1 - swap ) + Y->s * swap; - Y->s = Y->s * ( 1 - swap ) + s * swap; - - - for( i = 0; i < X->n; i++ ) - { - tmp = X->p[i]; - X->p[i] = X->p[i] * ( 1 - swap ) + Y->p[i] * swap; - Y->p[i] = Y->p[i] * ( 1 - swap ) + tmp * swap; - } - -cleanup: - return( ret ); -} - -/* - * Set value from integer - */ -int mpi_lset( mpi *X, t_sint z ) -{ - int ret; - - MPI_CHK( mpi_grow( X, 1 ) ); - memset( X->p, 0, X->n * ciL ); - - X->p[0] = ( z < 0 ) ? -z : z; - X->s = ( z < 0 ) ? -1 : 1; - -cleanup: - - return( ret ); -} - -/* - * Get a specific bit - */ -int mpi_get_bit( const mpi *X, size_t pos ) -{ - if( X->n * biL <= pos ) - return( 0 ); - - return( ( X->p[pos / biL] >> ( pos % biL ) ) & 0x01 ); -} - -/* - * Set a bit to a specific value of 0 or 1 - */ -int mpi_set_bit( mpi *X, size_t pos, unsigned char val ) -{ - int ret = 0; - size_t off = pos / biL; - size_t idx = pos % biL; - - if( val != 0 && val != 1 ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - if( X->n * biL <= pos ) - { - if( val == 0 ) - return( 0 ); - - MPI_CHK( mpi_grow( X, off + 1 ) ); - } - - X->p[off] &= ~( (t_uint) 0x01 << idx ); - X->p[off] |= (t_uint) val << idx; - -cleanup: - - return( ret ); -} - -/* - * Return the number of least significant bits - */ -size_t mpi_lsb( const mpi *X ) -{ - size_t i, j, count = 0; - - for( i = 0; i < X->n; i++ ) - for( j = 0; j < biL; j++, count++ ) - if( ( ( X->p[i] >> j ) & 1 ) != 0 ) - return( count ); - - return( 0 ); -} - -/* - * Return the number of most significant bits - */ -size_t mpi_msb( const mpi *X ) -{ - size_t i, j; - - for( i = X->n - 1; i > 0; i-- ) - if( X->p[i] != 0 ) - break; - - for( j = biL; j > 0; j-- ) - if( ( ( X->p[i] >> ( j - 1 ) ) & 1 ) != 0 ) - break; - - return( ( i * biL ) + j ); -} - -/* - * Return the total size in bytes - */ -size_t mpi_size( const mpi *X ) -{ - return( ( mpi_msb( X ) + 7 ) >> 3 ); -} - -/* - * Convert an ASCII character to digit value - */ -static int mpi_get_digit( t_uint *d, int radix, char c ) -{ - *d = 255; - - if( c >= 0x30 && c <= 0x39 ) *d = c - 0x30; - if( c >= 0x41 && c <= 0x46 ) *d = c - 0x37; - if( c >= 0x61 && c <= 0x66 ) *d = c - 0x57; - - if( *d >= (t_uint) radix ) - return( POLARSSL_ERR_MPI_INVALID_CHARACTER ); - - return( 0 ); -} - -/* - * Import from an ASCII string - */ -int mpi_read_string( mpi *X, int radix, const char *s ) -{ - int ret; - size_t i, j, slen, n; - t_uint d; - mpi T; - - if( radix < 2 || radix > 16 ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - mpi_init( &T ); - - slen = strlen( s ); - - if( radix == 16 ) - { - n = BITS_TO_LIMBS( slen << 2 ); - - MPI_CHK( mpi_grow( X, n ) ); - MPI_CHK( mpi_lset( X, 0 ) ); - - for( i = slen, j = 0; i > 0; i--, j++ ) - { - if( i == 1 && s[i - 1] == '-' ) - { - X->s = -1; - break; - } - - MPI_CHK( mpi_get_digit( &d, radix, s[i - 1] ) ); - X->p[j / ( 2 * ciL )] |= d << ( ( j % ( 2 * ciL ) ) << 2 ); - } - } - else - { - MPI_CHK( mpi_lset( X, 0 ) ); - - for( i = 0; i < slen; i++ ) - { - if( i == 0 && s[i] == '-' ) - { - X->s = -1; - continue; - } - - MPI_CHK( mpi_get_digit( &d, radix, s[i] ) ); - MPI_CHK( mpi_mul_int( &T, X, radix ) ); - - if( X->s == 1 ) - { - MPI_CHK( mpi_add_int( X, &T, d ) ); - } - else - { - MPI_CHK( mpi_sub_int( X, &T, d ) ); - } - } - } - -cleanup: - - mpi_free( &T ); - - return( ret ); -} - -/* - * Helper to write the digits high-order first - */ -static int mpi_write_hlp( mpi *X, int radix, char **p ) -{ - int ret; - t_uint r; - - if( radix < 2 || radix > 16 ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - MPI_CHK( mpi_mod_int( &r, X, radix ) ); - MPI_CHK( mpi_div_int( X, NULL, X, radix ) ); - - if( mpi_cmp_int( X, 0 ) != 0 ) - MPI_CHK( mpi_write_hlp( X, radix, p ) ); - - if( r < 10 ) - *(*p)++ = (char)( r + 0x30 ); - else - *(*p)++ = (char)( r + 0x37 ); - -cleanup: - - return( ret ); -} - -/* - * Export into an ASCII string - */ -int mpi_write_string( const mpi *X, int radix, char *s, size_t *slen ) -{ - int ret = 0; - size_t n; - char *p; - mpi T; - - if( radix < 2 || radix > 16 ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - n = mpi_msb( X ); - if( radix >= 4 ) n >>= 1; - if( radix >= 16 ) n >>= 1; - n += 3; - - if( *slen < n ) - { - *slen = n; - return( POLARSSL_ERR_MPI_BUFFER_TOO_SMALL ); - } - - p = s; - mpi_init( &T ); - - if( X->s == -1 ) - *p++ = '-'; - - if( radix == 16 ) - { - int c; - size_t i, j, k; - - for( i = X->n, k = 0; i > 0; i-- ) - { - for( j = ciL; j > 0; j-- ) - { - c = ( X->p[i - 1] >> ( ( j - 1 ) << 3) ) & 0xFF; - - if( c == 0 && k == 0 && ( i + j ) != 2 ) - continue; - - *(p++) = "0123456789ABCDEF" [c / 16]; - *(p++) = "0123456789ABCDEF" [c % 16]; - k = 1; - } - } - } - else - { - MPI_CHK( mpi_copy( &T, X ) ); - - if( T.s == -1 ) - T.s = 1; - - MPI_CHK( mpi_write_hlp( &T, radix, &p ) ); - } - - *p++ = '\0'; - *slen = p - s; - -cleanup: - - mpi_free( &T ); - - return( ret ); -} - -#if defined(POLARSSL_FS_IO) -/* - * Read X from an opened file - */ -int mpi_read_file( mpi *X, int radix, FILE *fin ) -{ - t_uint d; - size_t slen; - char *p; - /* - * Buffer should have space for (short) label and decimal formatted MPI, - * newline characters and '\0' - */ - char s[ POLARSSL_MPI_RW_BUFFER_SIZE ]; - - memset( s, 0, sizeof( s ) ); - if( fgets( s, sizeof( s ) - 1, fin ) == NULL ) - return( POLARSSL_ERR_MPI_FILE_IO_ERROR ); - - slen = strlen( s ); - if( slen == sizeof( s ) - 2 ) - return( POLARSSL_ERR_MPI_BUFFER_TOO_SMALL ); - - if( s[slen - 1] == '\n' ) { slen--; s[slen] = '\0'; } - if( s[slen - 1] == '\r' ) { slen--; s[slen] = '\0'; } - - p = s + slen; - while( --p >= s ) - if( mpi_get_digit( &d, radix, *p ) != 0 ) - break; - - return( mpi_read_string( X, radix, p + 1 ) ); -} - -/* - * Write X into an opened file (or stdout if fout == NULL) - */ -int mpi_write_file( const char *p, const mpi *X, int radix, FILE *fout ) -{ - int ret; - size_t n, slen, plen; - /* - * Buffer should have space for (short) label and decimal formatted MPI, - * newline characters and '\0' - */ - char s[ POLARSSL_MPI_RW_BUFFER_SIZE ]; - - n = sizeof( s ); - memset( s, 0, n ); - n -= 2; - - MPI_CHK( mpi_write_string( X, radix, s, (size_t *) &n ) ); - - if( p == NULL ) p = ""; - - plen = strlen( p ); - slen = strlen( s ); - s[slen++] = '\r'; - s[slen++] = '\n'; - - if( fout != NULL ) - { - if( fwrite( p, 1, plen, fout ) != plen || - fwrite( s, 1, slen, fout ) != slen ) - return( POLARSSL_ERR_MPI_FILE_IO_ERROR ); - } - else - polarssl_printf( "%s%s", p, s ); - -cleanup: - - return( ret ); -} -#endif /* POLARSSL_FS_IO */ - -/* - * Import X from unsigned binary data, big endian - */ -int mpi_read_binary( mpi *X, const unsigned char *buf, size_t buflen ) -{ - int ret; - size_t i, j, n; - - for( n = 0; n < buflen; n++ ) - if( buf[n] != 0 ) - break; - - MPI_CHK( mpi_grow( X, CHARS_TO_LIMBS( buflen - n ) ) ); - MPI_CHK( mpi_lset( X, 0 ) ); - - for( i = buflen, j = 0; i > n; i--, j++ ) - X->p[j / ciL] |= ((t_uint) buf[i - 1]) << ((j % ciL) << 3); - -cleanup: - - return( ret ); -} - -/* - * Export X into unsigned binary data, big endian - */ -int mpi_write_binary( const mpi *X, unsigned char *buf, size_t buflen ) -{ - size_t i, j, n; - - n = mpi_size( X ); - - if( buflen < n ) - return( POLARSSL_ERR_MPI_BUFFER_TOO_SMALL ); - - memset( buf, 0, buflen ); - - for( i = buflen - 1, j = 0; n > 0; i--, j++, n-- ) - buf[i] = (unsigned char)( X->p[j / ciL] >> ((j % ciL) << 3) ); - - return( 0 ); -} - -/* - * Left-shift: X <<= count - */ -int mpi_shift_l( mpi *X, size_t count ) -{ - int ret; - size_t i, v0, t1; - t_uint r0 = 0, r1; - - v0 = count / (biL ); - t1 = count & (biL - 1); - - i = mpi_msb( X ) + count; - - if( X->n * biL < i ) - MPI_CHK( mpi_grow( X, BITS_TO_LIMBS( i ) ) ); - - ret = 0; - - /* - * shift by count / limb_size - */ - if( v0 > 0 ) - { - for( i = X->n; i > v0; i-- ) - X->p[i - 1] = X->p[i - v0 - 1]; - - for( ; i > 0; i-- ) - X->p[i - 1] = 0; - } - - /* - * shift by count % limb_size - */ - if( t1 > 0 ) - { - for( i = v0; i < X->n; i++ ) - { - r1 = X->p[i] >> (biL - t1); - X->p[i] <<= t1; - X->p[i] |= r0; - r0 = r1; - } - } - -cleanup: - - return( ret ); -} - -/* - * Right-shift: X >>= count - */ -int mpi_shift_r( mpi *X, size_t count ) -{ - size_t i, v0, v1; - t_uint r0 = 0, r1; - - v0 = count / biL; - v1 = count & (biL - 1); - - if( v0 > X->n || ( v0 == X->n && v1 > 0 ) ) - return mpi_lset( X, 0 ); - - /* - * shift by count / limb_size - */ - if( v0 > 0 ) - { - for( i = 0; i < X->n - v0; i++ ) - X->p[i] = X->p[i + v0]; - - for( ; i < X->n; i++ ) - X->p[i] = 0; - } - - /* - * shift by count % limb_size - */ - if( v1 > 0 ) - { - for( i = X->n; i > 0; i-- ) - { - r1 = X->p[i - 1] << (biL - v1); - X->p[i - 1] >>= v1; - X->p[i - 1] |= r0; - r0 = r1; - } - } - - return( 0 ); -} - -/* - * Compare unsigned values - */ -int mpi_cmp_abs( const mpi *X, const mpi *Y ) -{ - size_t i, j; - - for( i = X->n; i > 0; i-- ) - if( X->p[i - 1] != 0 ) - break; - - for( j = Y->n; j > 0; j-- ) - if( Y->p[j - 1] != 0 ) - break; - - if( i == 0 && j == 0 ) - return( 0 ); - - if( i > j ) return( 1 ); - if( j > i ) return( -1 ); - - for( ; i > 0; i-- ) - { - if( X->p[i - 1] > Y->p[i - 1] ) return( 1 ); - if( X->p[i - 1] < Y->p[i - 1] ) return( -1 ); - } - - return( 0 ); -} - -/* - * Compare signed values - */ -int mpi_cmp_mpi( const mpi *X, const mpi *Y ) -{ - size_t i, j; - - for( i = X->n; i > 0; i-- ) - if( X->p[i - 1] != 0 ) - break; - - for( j = Y->n; j > 0; j-- ) - if( Y->p[j - 1] != 0 ) - break; - - if( i == 0 && j == 0 ) - return( 0 ); - - if( i > j ) return( X->s ); - if( j > i ) return( -Y->s ); - - if( X->s > 0 && Y->s < 0 ) return( 1 ); - if( Y->s > 0 && X->s < 0 ) return( -1 ); - - for( ; i > 0; i-- ) - { - if( X->p[i - 1] > Y->p[i - 1] ) return( X->s ); - if( X->p[i - 1] < Y->p[i - 1] ) return( -X->s ); - } - - return( 0 ); -} - -/* - * Compare signed values - */ -int mpi_cmp_int( const mpi *X, t_sint z ) -{ - mpi Y; - t_uint p[1]; - - *p = ( z < 0 ) ? -z : z; - Y.s = ( z < 0 ) ? -1 : 1; - Y.n = 1; - Y.p = p; - - return( mpi_cmp_mpi( X, &Y ) ); -} - -/* - * Unsigned addition: X = |A| + |B| (HAC 14.7) - */ -int mpi_add_abs( mpi *X, const mpi *A, const mpi *B ) -{ - int ret; - size_t i, j; - t_uint *o, *p, c; - - if( X == B ) - { - const mpi *T = A; A = X; B = T; - } - - if( X != A ) - MPI_CHK( mpi_copy( X, A ) ); - - /* - * X should always be positive as a result of unsigned additions. - */ - X->s = 1; - - for( j = B->n; j > 0; j-- ) - if( B->p[j - 1] != 0 ) - break; - - MPI_CHK( mpi_grow( X, j ) ); - - o = B->p; p = X->p; c = 0; - - for( i = 0; i < j; i++, o++, p++ ) - { - *p += c; c = ( *p < c ); - *p += *o; c += ( *p < *o ); - } - - while( c != 0 ) - { - if( i >= X->n ) - { - MPI_CHK( mpi_grow( X, i + 1 ) ); - p = X->p + i; - } - - *p += c; c = ( *p < c ); i++; p++; - } - -cleanup: - - return( ret ); -} - -/* - * Helper for mpi subtraction - */ -static void mpi_sub_hlp( size_t n, t_uint *s, t_uint *d ) -{ - size_t i; - t_uint c, z; - - for( i = c = 0; i < n; i++, s++, d++ ) - { - z = ( *d < c ); *d -= c; - c = ( *d < *s ) + z; *d -= *s; - } - - while( c != 0 ) - { - z = ( *d < c ); *d -= c; - c = z; i++; d++; - } -} - -/* - * Unsigned subtraction: X = |A| - |B| (HAC 14.9) - */ -int mpi_sub_abs( mpi *X, const mpi *A, const mpi *B ) -{ - mpi TB; - int ret; - size_t n; - - if( mpi_cmp_abs( A, B ) < 0 ) - return( POLARSSL_ERR_MPI_NEGATIVE_VALUE ); - - mpi_init( &TB ); - - if( X == B ) - { - MPI_CHK( mpi_copy( &TB, B ) ); - B = &TB; - } - - if( X != A ) - MPI_CHK( mpi_copy( X, A ) ); - - /* - * X should always be positive as a result of unsigned subtractions. - */ - X->s = 1; - - ret = 0; - - for( n = B->n; n > 0; n-- ) - if( B->p[n - 1] != 0 ) - break; - - mpi_sub_hlp( n, B->p, X->p ); - -cleanup: - - mpi_free( &TB ); - - return( ret ); -} - -/* - * Signed addition: X = A + B - */ -int mpi_add_mpi( mpi *X, const mpi *A, const mpi *B ) -{ - int ret, s = A->s; - - if( A->s * B->s < 0 ) - { - if( mpi_cmp_abs( A, B ) >= 0 ) - { - MPI_CHK( mpi_sub_abs( X, A, B ) ); - X->s = s; - } - else - { - MPI_CHK( mpi_sub_abs( X, B, A ) ); - X->s = -s; - } - } - else - { - MPI_CHK( mpi_add_abs( X, A, B ) ); - X->s = s; - } - -cleanup: - - return( ret ); -} - -/* - * Signed subtraction: X = A - B - */ -int mpi_sub_mpi( mpi *X, const mpi *A, const mpi *B ) -{ - int ret, s = A->s; - - if( A->s * B->s > 0 ) - { - if( mpi_cmp_abs( A, B ) >= 0 ) - { - MPI_CHK( mpi_sub_abs( X, A, B ) ); - X->s = s; - } - else - { - MPI_CHK( mpi_sub_abs( X, B, A ) ); - X->s = -s; - } - } - else - { - MPI_CHK( mpi_add_abs( X, A, B ) ); - X->s = s; - } - -cleanup: - - return( ret ); -} - -/* - * Signed addition: X = A + b - */ -int mpi_add_int( mpi *X, const mpi *A, t_sint b ) -{ - mpi _B; - t_uint p[1]; - - p[0] = ( b < 0 ) ? -b : b; - _B.s = ( b < 0 ) ? -1 : 1; - _B.n = 1; - _B.p = p; - - return( mpi_add_mpi( X, A, &_B ) ); -} - -/* - * Signed subtraction: X = A - b - */ -int mpi_sub_int( mpi *X, const mpi *A, t_sint b ) -{ - mpi _B; - t_uint p[1]; - - p[0] = ( b < 0 ) ? -b : b; - _B.s = ( b < 0 ) ? -1 : 1; - _B.n = 1; - _B.p = p; - - return( mpi_sub_mpi( X, A, &_B ) ); -} - -/* - * Helper for mpi multiplication - */ -static -#if defined(__APPLE__) && defined(__arm__) -/* - * Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn) - * appears to need this to prevent bad ARM code generation at -O3. - */ -__attribute__ ((noinline)) -#endif -void mpi_mul_hlp( size_t i, t_uint *s, t_uint *d, t_uint b ) -{ - t_uint c = 0, t = 0; - -#if defined(MULADDC_HUIT) - for( ; i >= 8; i -= 8 ) - { - MULADDC_INIT - MULADDC_HUIT - MULADDC_STOP - } - - for( ; i > 0; i-- ) - { - MULADDC_INIT - MULADDC_CORE - MULADDC_STOP - } -#else /* MULADDC_HUIT */ - for( ; i >= 16; i -= 16 ) - { - MULADDC_INIT - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - MULADDC_STOP - } - - for( ; i >= 8; i -= 8 ) - { - MULADDC_INIT - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - MULADDC_STOP - } - - for( ; i > 0; i-- ) - { - MULADDC_INIT - MULADDC_CORE - MULADDC_STOP - } -#endif /* MULADDC_HUIT */ - - t++; - - do { - *d += c; c = ( *d < c ); d++; - } - while( c != 0 ); -} - -/* - * Baseline multiplication: X = A * B (HAC 14.12) - */ -int mpi_mul_mpi( mpi *X, const mpi *A, const mpi *B ) -{ - int ret; - size_t i, j; - mpi TA, TB; - - mpi_init( &TA ); mpi_init( &TB ); - - if( X == A ) { MPI_CHK( mpi_copy( &TA, A ) ); A = &TA; } - if( X == B ) { MPI_CHK( mpi_copy( &TB, B ) ); B = &TB; } - - for( i = A->n; i > 0; i-- ) - if( A->p[i - 1] != 0 ) - break; - - for( j = B->n; j > 0; j-- ) - if( B->p[j - 1] != 0 ) - break; - - MPI_CHK( mpi_grow( X, i + j ) ); - MPI_CHK( mpi_lset( X, 0 ) ); - - for( i++; j > 0; j-- ) - mpi_mul_hlp( i - 1, A->p, X->p + j - 1, B->p[j - 1] ); - - X->s = A->s * B->s; - -cleanup: - - mpi_free( &TB ); mpi_free( &TA ); - - return( ret ); -} - -/* - * Baseline multiplication: X = A * b - */ -int mpi_mul_int( mpi *X, const mpi *A, t_sint b ) -{ - mpi _B; - t_uint p[1]; - - _B.s = 1; - _B.n = 1; - _B.p = p; - p[0] = b; - - return( mpi_mul_mpi( X, A, &_B ) ); -} - -/* - * Division by mpi: A = Q * B + R (HAC 14.20) - */ -int mpi_div_mpi( mpi *Q, mpi *R, const mpi *A, const mpi *B ) -{ - int ret; - size_t i, n, t, k; - mpi X, Y, Z, T1, T2; - - if( mpi_cmp_int( B, 0 ) == 0 ) - return( POLARSSL_ERR_MPI_DIVISION_BY_ZERO ); - - mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); - mpi_init( &T1 ); mpi_init( &T2 ); - - if( mpi_cmp_abs( A, B ) < 0 ) - { - if( Q != NULL ) MPI_CHK( mpi_lset( Q, 0 ) ); - if( R != NULL ) MPI_CHK( mpi_copy( R, A ) ); - return( 0 ); - } - - MPI_CHK( mpi_copy( &X, A ) ); - MPI_CHK( mpi_copy( &Y, B ) ); - X.s = Y.s = 1; - - MPI_CHK( mpi_grow( &Z, A->n + 2 ) ); - MPI_CHK( mpi_lset( &Z, 0 ) ); - MPI_CHK( mpi_grow( &T1, 2 ) ); - MPI_CHK( mpi_grow( &T2, 3 ) ); - - k = mpi_msb( &Y ) % biL; - if( k < biL - 1 ) - { - k = biL - 1 - k; - MPI_CHK( mpi_shift_l( &X, k ) ); - MPI_CHK( mpi_shift_l( &Y, k ) ); - } - else k = 0; - - n = X.n - 1; - t = Y.n - 1; - MPI_CHK( mpi_shift_l( &Y, biL * ( n - t ) ) ); - - while( mpi_cmp_mpi( &X, &Y ) >= 0 ) - { - Z.p[n - t]++; - MPI_CHK( mpi_sub_mpi( &X, &X, &Y ) ); - } - MPI_CHK( mpi_shift_r( &Y, biL * ( n - t ) ) ); - - for( i = n; i > t ; i-- ) - { - if( X.p[i] >= Y.p[t] ) - Z.p[i - t - 1] = ~0; - else - { - /* - * The version of Clang shipped by Apple with Mavericks around - * 2014-03 can't handle 128-bit division properly. Disable - * 128-bits division for this version. Let's be optimistic and - * assume it'll be fixed in the next minor version (next - * patchlevel is probably a bit too optimistic). - */ -#if defined(POLARSSL_HAVE_UDBL) && \ - ! ( defined(__x86_64__) && defined(__APPLE__) && \ - defined(__clang_major__) && __clang_major__ == 5 && \ - defined(__clang_minor__) && __clang_minor__ == 0 ) - t_udbl r; - - r = (t_udbl) X.p[i] << biL; - r |= (t_udbl) X.p[i - 1]; - r /= Y.p[t]; - if( r > ( (t_udbl) 1 << biL ) - 1 ) - r = ( (t_udbl) 1 << biL ) - 1; - - Z.p[i - t - 1] = (t_uint) r; -#else - /* - * __udiv_qrnnd_c, from gmp/longlong.h - */ - t_uint q0, q1, r0, r1; - t_uint d0, d1, d, m; - - d = Y.p[t]; - d0 = ( d << biH ) >> biH; - d1 = ( d >> biH ); - - q1 = X.p[i] / d1; - r1 = X.p[i] - d1 * q1; - r1 <<= biH; - r1 |= ( X.p[i - 1] >> biH ); - - m = q1 * d0; - if( r1 < m ) - { - q1--, r1 += d; - while( r1 >= d && r1 < m ) - q1--, r1 += d; - } - r1 -= m; - - q0 = r1 / d1; - r0 = r1 - d1 * q0; - r0 <<= biH; - r0 |= ( X.p[i - 1] << biH ) >> biH; - - m = q0 * d0; - if( r0 < m ) - { - q0--, r0 += d; - while( r0 >= d && r0 < m ) - q0--, r0 += d; - } - r0 -= m; - - Z.p[i - t - 1] = ( q1 << biH ) | q0; -#endif /* POLARSSL_HAVE_UDBL && !64-bit Apple with Clang 5.0 */ - } - - Z.p[i - t - 1]++; - do - { - Z.p[i - t - 1]--; - - MPI_CHK( mpi_lset( &T1, 0 ) ); - T1.p[0] = ( t < 1 ) ? 0 : Y.p[t - 1]; - T1.p[1] = Y.p[t]; - MPI_CHK( mpi_mul_int( &T1, &T1, Z.p[i - t - 1] ) ); - - MPI_CHK( mpi_lset( &T2, 0 ) ); - T2.p[0] = ( i < 2 ) ? 0 : X.p[i - 2]; - T2.p[1] = ( i < 1 ) ? 0 : X.p[i - 1]; - T2.p[2] = X.p[i]; - } - while( mpi_cmp_mpi( &T1, &T2 ) > 0 ); - - MPI_CHK( mpi_mul_int( &T1, &Y, Z.p[i - t - 1] ) ); - MPI_CHK( mpi_shift_l( &T1, biL * ( i - t - 1 ) ) ); - MPI_CHK( mpi_sub_mpi( &X, &X, &T1 ) ); - - if( mpi_cmp_int( &X, 0 ) < 0 ) - { - MPI_CHK( mpi_copy( &T1, &Y ) ); - MPI_CHK( mpi_shift_l( &T1, biL * ( i - t - 1 ) ) ); - MPI_CHK( mpi_add_mpi( &X, &X, &T1 ) ); - Z.p[i - t - 1]--; - } - } - - if( Q != NULL ) - { - MPI_CHK( mpi_copy( Q, &Z ) ); - Q->s = A->s * B->s; - } - - if( R != NULL ) - { - MPI_CHK( mpi_shift_r( &X, k ) ); - X.s = A->s; - MPI_CHK( mpi_copy( R, &X ) ); - - if( mpi_cmp_int( R, 0 ) == 0 ) - R->s = 1; - } - -cleanup: - - mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); - mpi_free( &T1 ); mpi_free( &T2 ); - - return( ret ); -} - -/* - * Division by int: A = Q * b + R - */ -int mpi_div_int( mpi *Q, mpi *R, const mpi *A, t_sint b ) -{ - mpi _B; - t_uint p[1]; - - p[0] = ( b < 0 ) ? -b : b; - _B.s = ( b < 0 ) ? -1 : 1; - _B.n = 1; - _B.p = p; - - return( mpi_div_mpi( Q, R, A, &_B ) ); -} - -/* - * Modulo: R = A mod B - */ -int mpi_mod_mpi( mpi *R, const mpi *A, const mpi *B ) -{ - int ret; - - if( mpi_cmp_int( B, 0 ) < 0 ) - return( POLARSSL_ERR_MPI_NEGATIVE_VALUE ); - - MPI_CHK( mpi_div_mpi( NULL, R, A, B ) ); - - while( mpi_cmp_int( R, 0 ) < 0 ) - MPI_CHK( mpi_add_mpi( R, R, B ) ); - - while( mpi_cmp_mpi( R, B ) >= 0 ) - MPI_CHK( mpi_sub_mpi( R, R, B ) ); - -cleanup: - - return( ret ); -} - -/* - * Modulo: r = A mod b - */ -int mpi_mod_int( t_uint *r, const mpi *A, t_sint b ) -{ - size_t i; - t_uint x, y, z; - - if( b == 0 ) - return( POLARSSL_ERR_MPI_DIVISION_BY_ZERO ); - - if( b < 0 ) - return( POLARSSL_ERR_MPI_NEGATIVE_VALUE ); - - /* - * handle trivial cases - */ - if( b == 1 ) - { - *r = 0; - return( 0 ); - } - - if( b == 2 ) - { - *r = A->p[0] & 1; - return( 0 ); - } - - /* - * general case - */ - for( i = A->n, y = 0; i > 0; i-- ) - { - x = A->p[i - 1]; - y = ( y << biH ) | ( x >> biH ); - z = y / b; - y -= z * b; - - x <<= biH; - y = ( y << biH ) | ( x >> biH ); - z = y / b; - y -= z * b; - } - - /* - * If A is negative, then the current y represents a negative value. - * Flipping it to the positive side. - */ - if( A->s < 0 && y != 0 ) - y = b - y; - - *r = y; - - return( 0 ); -} - -/* - * Fast Montgomery initialization (thanks to Tom St Denis) - */ -static void mpi_montg_init( t_uint *mm, const mpi *N ) -{ - t_uint x, m0 = N->p[0]; - unsigned int i; - - x = m0; - x += ( ( m0 + 2 ) & 4 ) << 1; - - for( i = biL; i >= 8; i /= 2 ) - x *= ( 2 - ( m0 * x ) ); - - *mm = ~x + 1; -} - -/* - * Montgomery multiplication: A = A * B * R^-1 mod N (HAC 14.36) - */ -static void mpi_montmul( mpi *A, const mpi *B, const mpi *N, t_uint mm, - const mpi *T ) -{ - size_t i, n, m; - t_uint u0, u1, *d; - - memset( T->p, 0, T->n * ciL ); - - d = T->p; - n = N->n; - m = ( B->n < n ) ? B->n : n; - - for( i = 0; i < n; i++ ) - { - /* - * T = (T + u0*B + u1*N) / 2^biL - */ - u0 = A->p[i]; - u1 = ( d[0] + u0 * B->p[0] ) * mm; - - mpi_mul_hlp( m, B->p, d, u0 ); - mpi_mul_hlp( n, N->p, d, u1 ); - - *d++ = u0; d[n + 1] = 0; - } - - memcpy( A->p, d, ( n + 1 ) * ciL ); - - if( mpi_cmp_abs( A, N ) >= 0 ) - mpi_sub_hlp( n, N->p, A->p ); - else - /* prevent timing attacks */ - mpi_sub_hlp( n, A->p, T->p ); -} - -/* - * Montgomery reduction: A = A * R^-1 mod N - */ -static void mpi_montred( mpi *A, const mpi *N, t_uint mm, const mpi *T ) -{ - t_uint z = 1; - mpi U; - - U.n = U.s = (int) z; - U.p = &z; - - mpi_montmul( A, &U, N, mm, T ); -} - -/* - * Sliding-window exponentiation: X = A^E mod N (HAC 14.85) - */ -int mpi_exp_mod( mpi *X, const mpi *A, const mpi *E, const mpi *N, mpi *_RR ) -{ - int ret; - size_t wbits, wsize, one = 1; - size_t i, j, nblimbs; - size_t bufsize, nbits; - t_uint ei, mm, state; - mpi RR, T, W[ 2 << POLARSSL_MPI_WINDOW_SIZE ], Apos; - int neg; - - if( mpi_cmp_int( N, 0 ) < 0 || ( N->p[0] & 1 ) == 0 ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - if( mpi_cmp_int( E, 0 ) < 0 ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - /* - * Init temps and window size - */ - mpi_montg_init( &mm, N ); - mpi_init( &RR ); mpi_init( &T ); - mpi_init( &Apos ); - memset( W, 0, sizeof( W ) ); - - i = mpi_msb( E ); - - wsize = ( i > 671 ) ? 6 : ( i > 239 ) ? 5 : - ( i > 79 ) ? 4 : ( i > 23 ) ? 3 : 1; - - if( wsize > POLARSSL_MPI_WINDOW_SIZE ) - wsize = POLARSSL_MPI_WINDOW_SIZE; - - j = N->n + 1; - MPI_CHK( mpi_grow( X, j ) ); - MPI_CHK( mpi_grow( &W[1], j ) ); - MPI_CHK( mpi_grow( &T, j * 2 ) ); - - /* - * Compensate for negative A (and correct at the end) - */ - neg = ( A->s == -1 ); - if( neg ) - { - MPI_CHK( mpi_copy( &Apos, A ) ); - Apos.s = 1; - A = &Apos; - } - - /* - * If 1st call, pre-compute R^2 mod N - */ - if( _RR == NULL || _RR->p == NULL ) - { - MPI_CHK( mpi_lset( &RR, 1 ) ); - MPI_CHK( mpi_shift_l( &RR, N->n * 2 * biL ) ); - MPI_CHK( mpi_mod_mpi( &RR, &RR, N ) ); - - if( _RR != NULL ) - memcpy( _RR, &RR, sizeof( mpi ) ); - } - else - memcpy( &RR, _RR, sizeof( mpi ) ); - - /* - * W[1] = A * R^2 * R^-1 mod N = A * R mod N - */ - if( mpi_cmp_mpi( A, N ) >= 0 ) - MPI_CHK( mpi_mod_mpi( &W[1], A, N ) ); - else - MPI_CHK( mpi_copy( &W[1], A ) ); - - mpi_montmul( &W[1], &RR, N, mm, &T ); - - /* - * X = R^2 * R^-1 mod N = R mod N - */ - MPI_CHK( mpi_copy( X, &RR ) ); - mpi_montred( X, N, mm, &T ); - - if( wsize > 1 ) - { - /* - * W[1 << (wsize - 1)] = W[1] ^ (wsize - 1) - */ - j = one << ( wsize - 1 ); - - MPI_CHK( mpi_grow( &W[j], N->n + 1 ) ); - MPI_CHK( mpi_copy( &W[j], &W[1] ) ); - - for( i = 0; i < wsize - 1; i++ ) - mpi_montmul( &W[j], &W[j], N, mm, &T ); - - /* - * W[i] = W[i - 1] * W[1] - */ - for( i = j + 1; i < ( one << wsize ); i++ ) - { - MPI_CHK( mpi_grow( &W[i], N->n + 1 ) ); - MPI_CHK( mpi_copy( &W[i], &W[i - 1] ) ); - - mpi_montmul( &W[i], &W[1], N, mm, &T ); - } - } - - nblimbs = E->n; - bufsize = 0; - nbits = 0; - wbits = 0; - state = 0; - - while( 1 ) - { - if( bufsize == 0 ) - { - if( nblimbs == 0 ) - break; - - nblimbs--; - - bufsize = sizeof( t_uint ) << 3; - } - - bufsize--; - - ei = (E->p[nblimbs] >> bufsize) & 1; - - /* - * skip leading 0s - */ - if( ei == 0 && state == 0 ) - continue; - - if( ei == 0 && state == 1 ) - { - /* - * out of window, square X - */ - mpi_montmul( X, X, N, mm, &T ); - continue; - } - - /* - * add ei to current window - */ - state = 2; - - nbits++; - wbits |= ( ei << ( wsize - nbits ) ); - - if( nbits == wsize ) - { - /* - * X = X^wsize R^-1 mod N - */ - for( i = 0; i < wsize; i++ ) - mpi_montmul( X, X, N, mm, &T ); - - /* - * X = X * W[wbits] R^-1 mod N - */ - mpi_montmul( X, &W[wbits], N, mm, &T ); - - state--; - nbits = 0; - wbits = 0; - } - } - - /* - * process the remaining bits - */ - for( i = 0; i < nbits; i++ ) - { - mpi_montmul( X, X, N, mm, &T ); - - wbits <<= 1; - - if( ( wbits & ( one << wsize ) ) != 0 ) - mpi_montmul( X, &W[1], N, mm, &T ); - } - - /* - * X = A^E * R * R^-1 mod N = A^E mod N - */ - mpi_montred( X, N, mm, &T ); - - if( neg ) - { - X->s = -1; - MPI_CHK( mpi_add_mpi( X, N, X ) ); - } - -cleanup: - - for( i = ( one << ( wsize - 1 ) ); i < ( one << wsize ); i++ ) - mpi_free( &W[i] ); - - mpi_free( &W[1] ); mpi_free( &T ); mpi_free( &Apos ); - - if( _RR == NULL || _RR->p == NULL ) - mpi_free( &RR ); - - return( ret ); -} - -/* - * Greatest common divisor: G = gcd(A, B) (HAC 14.54) - */ -int mpi_gcd( mpi *G, const mpi *A, const mpi *B ) -{ - int ret; - size_t lz, lzt; - mpi TG, TA, TB; - - mpi_init( &TG ); mpi_init( &TA ); mpi_init( &TB ); - - MPI_CHK( mpi_copy( &TA, A ) ); - MPI_CHK( mpi_copy( &TB, B ) ); - - lz = mpi_lsb( &TA ); - lzt = mpi_lsb( &TB ); - - if( lzt < lz ) - lz = lzt; - - MPI_CHK( mpi_shift_r( &TA, lz ) ); - MPI_CHK( mpi_shift_r( &TB, lz ) ); - - TA.s = TB.s = 1; - - while( mpi_cmp_int( &TA, 0 ) != 0 ) - { - MPI_CHK( mpi_shift_r( &TA, mpi_lsb( &TA ) ) ); - MPI_CHK( mpi_shift_r( &TB, mpi_lsb( &TB ) ) ); - - if( mpi_cmp_mpi( &TA, &TB ) >= 0 ) - { - MPI_CHK( mpi_sub_abs( &TA, &TA, &TB ) ); - MPI_CHK( mpi_shift_r( &TA, 1 ) ); - } - else - { - MPI_CHK( mpi_sub_abs( &TB, &TB, &TA ) ); - MPI_CHK( mpi_shift_r( &TB, 1 ) ); - } - } - - MPI_CHK( mpi_shift_l( &TB, lz ) ); - MPI_CHK( mpi_copy( G, &TB ) ); - -cleanup: - - mpi_free( &TG ); mpi_free( &TA ); mpi_free( &TB ); - - return( ret ); -} - -/* - * Fill X with size bytes of random. - * - * Use a temporary bytes representation to make sure the result is the same - * regardless of the platform endianness (useful when f_rng is actually - * deterministic, eg for tests). - */ -int mpi_fill_random( mpi *X, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - unsigned char buf[POLARSSL_MPI_MAX_SIZE]; - - if( size > POLARSSL_MPI_MAX_SIZE ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - MPI_CHK( f_rng( p_rng, buf, size ) ); - MPI_CHK( mpi_read_binary( X, buf, size ) ); - -cleanup: - return( ret ); -} - -/* - * Modular inverse: X = A^-1 mod N (HAC 14.61 / 14.64) - */ -int mpi_inv_mod( mpi *X, const mpi *A, const mpi *N ) -{ - int ret; - mpi G, TA, TU, U1, U2, TB, TV, V1, V2; - - if( mpi_cmp_int( N, 0 ) <= 0 ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - mpi_init( &TA ); mpi_init( &TU ); mpi_init( &U1 ); mpi_init( &U2 ); - mpi_init( &G ); mpi_init( &TB ); mpi_init( &TV ); - mpi_init( &V1 ); mpi_init( &V2 ); - - MPI_CHK( mpi_gcd( &G, A, N ) ); - - if( mpi_cmp_int( &G, 1 ) != 0 ) - { - ret = POLARSSL_ERR_MPI_NOT_ACCEPTABLE; - goto cleanup; - } - - MPI_CHK( mpi_mod_mpi( &TA, A, N ) ); - MPI_CHK( mpi_copy( &TU, &TA ) ); - MPI_CHK( mpi_copy( &TB, N ) ); - MPI_CHK( mpi_copy( &TV, N ) ); - - MPI_CHK( mpi_lset( &U1, 1 ) ); - MPI_CHK( mpi_lset( &U2, 0 ) ); - MPI_CHK( mpi_lset( &V1, 0 ) ); - MPI_CHK( mpi_lset( &V2, 1 ) ); - - do - { - while( ( TU.p[0] & 1 ) == 0 ) - { - MPI_CHK( mpi_shift_r( &TU, 1 ) ); - - if( ( U1.p[0] & 1 ) != 0 || ( U2.p[0] & 1 ) != 0 ) - { - MPI_CHK( mpi_add_mpi( &U1, &U1, &TB ) ); - MPI_CHK( mpi_sub_mpi( &U2, &U2, &TA ) ); - } - - MPI_CHK( mpi_shift_r( &U1, 1 ) ); - MPI_CHK( mpi_shift_r( &U2, 1 ) ); - } - - while( ( TV.p[0] & 1 ) == 0 ) - { - MPI_CHK( mpi_shift_r( &TV, 1 ) ); - - if( ( V1.p[0] & 1 ) != 0 || ( V2.p[0] & 1 ) != 0 ) - { - MPI_CHK( mpi_add_mpi( &V1, &V1, &TB ) ); - MPI_CHK( mpi_sub_mpi( &V2, &V2, &TA ) ); - } - - MPI_CHK( mpi_shift_r( &V1, 1 ) ); - MPI_CHK( mpi_shift_r( &V2, 1 ) ); - } - - if( mpi_cmp_mpi( &TU, &TV ) >= 0 ) - { - MPI_CHK( mpi_sub_mpi( &TU, &TU, &TV ) ); - MPI_CHK( mpi_sub_mpi( &U1, &U1, &V1 ) ); - MPI_CHK( mpi_sub_mpi( &U2, &U2, &V2 ) ); - } - else - { - MPI_CHK( mpi_sub_mpi( &TV, &TV, &TU ) ); - MPI_CHK( mpi_sub_mpi( &V1, &V1, &U1 ) ); - MPI_CHK( mpi_sub_mpi( &V2, &V2, &U2 ) ); - } - } - while( mpi_cmp_int( &TU, 0 ) != 0 ); - - while( mpi_cmp_int( &V1, 0 ) < 0 ) - MPI_CHK( mpi_add_mpi( &V1, &V1, N ) ); - - while( mpi_cmp_mpi( &V1, N ) >= 0 ) - MPI_CHK( mpi_sub_mpi( &V1, &V1, N ) ); - - MPI_CHK( mpi_copy( X, &V1 ) ); - -cleanup: - - mpi_free( &TA ); mpi_free( &TU ); mpi_free( &U1 ); mpi_free( &U2 ); - mpi_free( &G ); mpi_free( &TB ); mpi_free( &TV ); - mpi_free( &V1 ); mpi_free( &V2 ); - - return( ret ); -} - -#if defined(POLARSSL_GENPRIME) - -static const int small_prime[] = -{ - 3, 5, 7, 11, 13, 17, 19, 23, - 29, 31, 37, 41, 43, 47, 53, 59, - 61, 67, 71, 73, 79, 83, 89, 97, - 101, 103, 107, 109, 113, 127, 131, 137, - 139, 149, 151, 157, 163, 167, 173, 179, - 181, 191, 193, 197, 199, 211, 223, 227, - 229, 233, 239, 241, 251, 257, 263, 269, - 271, 277, 281, 283, 293, 307, 311, 313, - 317, 331, 337, 347, 349, 353, 359, 367, - 373, 379, 383, 389, 397, 401, 409, 419, - 421, 431, 433, 439, 443, 449, 457, 461, - 463, 467, 479, 487, 491, 499, 503, 509, - 521, 523, 541, 547, 557, 563, 569, 571, - 577, 587, 593, 599, 601, 607, 613, 617, - 619, 631, 641, 643, 647, 653, 659, 661, - 673, 677, 683, 691, 701, 709, 719, 727, - 733, 739, 743, 751, 757, 761, 769, 773, - 787, 797, 809, 811, 821, 823, 827, 829, - 839, 853, 857, 859, 863, 877, 881, 883, - 887, 907, 911, 919, 929, 937, 941, 947, - 953, 967, 971, 977, 983, 991, 997, -103 -}; - -/* - * Small divisors test (X must be positive) - * - * Return values: - * 0: no small factor (possible prime, more tests needed) - * 1: certain prime - * POLARSSL_ERR_MPI_NOT_ACCEPTABLE: certain non-prime - * other negative: error - */ -static int mpi_check_small_factors( const mpi *X ) -{ - int ret = 0; - size_t i; - t_uint r; - - if( ( X->p[0] & 1 ) == 0 ) - return( POLARSSL_ERR_MPI_NOT_ACCEPTABLE ); - - for( i = 0; small_prime[i] > 0; i++ ) - { - if( mpi_cmp_int( X, small_prime[i] ) <= 0 ) - return( 1 ); - - MPI_CHK( mpi_mod_int( &r, X, small_prime[i] ) ); - - if( r == 0 ) - return( POLARSSL_ERR_MPI_NOT_ACCEPTABLE ); - } - -cleanup: - return( ret ); -} - -/* - * Miller-Rabin pseudo-primality test (HAC 4.24) - */ -static int mpi_miller_rabin( const mpi *X, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - size_t i, j, n, s; - mpi W, R, T, A, RR; - - mpi_init( &W ); mpi_init( &R ); mpi_init( &T ); mpi_init( &A ); - mpi_init( &RR ); - - /* - * W = |X| - 1 - * R = W >> lsb( W ) - */ - MPI_CHK( mpi_sub_int( &W, X, 1 ) ); - s = mpi_lsb( &W ); - MPI_CHK( mpi_copy( &R, &W ) ); - MPI_CHK( mpi_shift_r( &R, s ) ); - - i = mpi_msb( X ); - /* - * HAC, table 4.4 - */ - n = ( ( i >= 1300 ) ? 2 : ( i >= 850 ) ? 3 : - ( i >= 650 ) ? 4 : ( i >= 350 ) ? 8 : - ( i >= 250 ) ? 12 : ( i >= 150 ) ? 18 : 27 ); - - for( i = 0; i < n; i++ ) - { - /* - * pick a random A, 1 < A < |X| - 1 - */ - MPI_CHK( mpi_fill_random( &A, X->n * ciL, f_rng, p_rng ) ); - - if( mpi_cmp_mpi( &A, &W ) >= 0 ) - { - j = mpi_msb( &A ) - mpi_msb( &W ); - MPI_CHK( mpi_shift_r( &A, j + 1 ) ); - } - A.p[0] |= 3; - - /* - * A = A^R mod |X| - */ - MPI_CHK( mpi_exp_mod( &A, &A, &R, X, &RR ) ); - - if( mpi_cmp_mpi( &A, &W ) == 0 || - mpi_cmp_int( &A, 1 ) == 0 ) - continue; - - j = 1; - while( j < s && mpi_cmp_mpi( &A, &W ) != 0 ) - { - /* - * A = A * A mod |X| - */ - MPI_CHK( mpi_mul_mpi( &T, &A, &A ) ); - MPI_CHK( mpi_mod_mpi( &A, &T, X ) ); - - if( mpi_cmp_int( &A, 1 ) == 0 ) - break; - - j++; - } - - /* - * not prime if A != |X| - 1 or A == 1 - */ - if( mpi_cmp_mpi( &A, &W ) != 0 || - mpi_cmp_int( &A, 1 ) == 0 ) - { - ret = POLARSSL_ERR_MPI_NOT_ACCEPTABLE; - break; - } - } - -cleanup: - mpi_free( &W ); mpi_free( &R ); mpi_free( &T ); mpi_free( &A ); - mpi_free( &RR ); - - return( ret ); -} - -/* - * Pseudo-primality test: small factors, then Miller-Rabin - */ -int mpi_is_prime( mpi *X, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - const mpi XX = { 1, X->n, X->p }; /* Abs(X) */ - - if( mpi_cmp_int( &XX, 0 ) == 0 || - mpi_cmp_int( &XX, 1 ) == 0 ) - return( POLARSSL_ERR_MPI_NOT_ACCEPTABLE ); - - if( mpi_cmp_int( &XX, 2 ) == 0 ) - return( 0 ); - - if( ( ret = mpi_check_small_factors( &XX ) ) != 0 ) - { - if( ret == 1 ) - return( 0 ); - - return( ret ); - } - - return( mpi_miller_rabin( &XX, f_rng, p_rng ) ); -} - -/* - * Prime number generation - */ -int mpi_gen_prime( mpi *X, size_t nbits, int dh_flag, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - size_t k, n; - t_uint r; - mpi Y; - - if( nbits < 3 || nbits > POLARSSL_MPI_MAX_BITS ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - mpi_init( &Y ); - - n = BITS_TO_LIMBS( nbits ); - - MPI_CHK( mpi_fill_random( X, n * ciL, f_rng, p_rng ) ); - - k = mpi_msb( X ); - if( k < nbits ) MPI_CHK( mpi_shift_l( X, nbits - k ) ); - if( k > nbits ) MPI_CHK( mpi_shift_r( X, k - nbits ) ); - - X->p[0] |= 3; - - if( dh_flag == 0 ) - { - while( ( ret = mpi_is_prime( X, f_rng, p_rng ) ) != 0 ) - { - if( ret != POLARSSL_ERR_MPI_NOT_ACCEPTABLE ) - goto cleanup; - - MPI_CHK( mpi_add_int( X, X, 2 ) ); - } - } - else - { - /* - * An necessary condition for Y and X = 2Y + 1 to be prime - * is X = 2 mod 3 (which is equivalent to Y = 2 mod 3). - * Make sure it is satisfied, while keeping X = 3 mod 4 - */ - MPI_CHK( mpi_mod_int( &r, X, 3 ) ); - if( r == 0 ) - MPI_CHK( mpi_add_int( X, X, 8 ) ); - else if( r == 1 ) - MPI_CHK( mpi_add_int( X, X, 4 ) ); - - /* Set Y = (X-1) / 2, which is X / 2 because X is odd */ - MPI_CHK( mpi_copy( &Y, X ) ); - MPI_CHK( mpi_shift_r( &Y, 1 ) ); - - while( 1 ) - { - /* - * First, check small factors for X and Y - * before doing Miller-Rabin on any of them - */ - if( ( ret = mpi_check_small_factors( X ) ) == 0 && - ( ret = mpi_check_small_factors( &Y ) ) == 0 && - ( ret = mpi_miller_rabin( X, f_rng, p_rng ) ) == 0 && - ( ret = mpi_miller_rabin( &Y, f_rng, p_rng ) ) == 0 ) - { - break; - } - - if( ret != POLARSSL_ERR_MPI_NOT_ACCEPTABLE ) - goto cleanup; - - /* - * Next candidates. We want to preserve Y = (X-1) / 2 and - * Y = 1 mod 2 and Y = 2 mod 3 (eq X = 3 mod 4 and X = 2 mod 3) - * so up Y by 6 and X by 12. - */ - MPI_CHK( mpi_add_int( X, X, 12 ) ); - MPI_CHK( mpi_add_int( &Y, &Y, 6 ) ); - } - } - -cleanup: - - mpi_free( &Y ); - - return( ret ); -} - -#endif /* POLARSSL_GENPRIME */ - -#if defined(POLARSSL_SELF_TEST) - -#define GCD_PAIR_COUNT 3 - -static const int gcd_pairs[GCD_PAIR_COUNT][3] = -{ - { 693, 609, 21 }, - { 1764, 868, 28 }, - { 768454923, 542167814, 1 } -}; - -/* - * Checkup routine - */ -int mpi_self_test( int verbose ) -{ - int ret, i; - mpi A, E, N, X, Y, U, V; - - mpi_init( &A ); mpi_init( &E ); mpi_init( &N ); mpi_init( &X ); - mpi_init( &Y ); mpi_init( &U ); mpi_init( &V ); - - MPI_CHK( mpi_read_string( &A, 16, - "EFE021C2645FD1DC586E69184AF4A31E" \ - "D5F53E93B5F123FA41680867BA110131" \ - "944FE7952E2517337780CB0DB80E61AA" \ - "E7C8DDC6C5C6AADEB34EB38A2F40D5E6" ) ); - - MPI_CHK( mpi_read_string( &E, 16, - "B2E7EFD37075B9F03FF989C7C5051C20" \ - "34D2A323810251127E7BF8625A4F49A5" \ - "F3E27F4DA8BD59C47D6DAABA4C8127BD" \ - "5B5C25763222FEFCCFC38B832366C29E" ) ); - - MPI_CHK( mpi_read_string( &N, 16, - "0066A198186C18C10B2F5ED9B522752A" \ - "9830B69916E535C8F047518A889A43A5" \ - "94B6BED27A168D31D4A52F88925AA8F5" ) ); - - MPI_CHK( mpi_mul_mpi( &X, &A, &N ) ); - - MPI_CHK( mpi_read_string( &U, 16, - "602AB7ECA597A3D6B56FF9829A5E8B85" \ - "9E857EA95A03512E2BAE7391688D264A" \ - "A5663B0341DB9CCFD2C4C5F421FEC814" \ - "8001B72E848A38CAE1C65F78E56ABDEF" \ - "E12D3C039B8A02D6BE593F0BBBDA56F1" \ - "ECF677152EF804370C1A305CAF3B5BF1" \ - "30879B56C61DE584A0F53A2447A51E" ) ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #1 (mul_mpi): " ); - - if( mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto cleanup; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - MPI_CHK( mpi_div_mpi( &X, &Y, &A, &N ) ); - - MPI_CHK( mpi_read_string( &U, 16, - "256567336059E52CAE22925474705F39A94" ) ); - - MPI_CHK( mpi_read_string( &V, 16, - "6613F26162223DF488E9CD48CC132C7A" \ - "0AC93C701B001B092E4E5B9F73BCD27B" \ - "9EE50D0657C77F374E903CDFA4C642" ) ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #2 (div_mpi): " ); - - if( mpi_cmp_mpi( &X, &U ) != 0 || - mpi_cmp_mpi( &Y, &V ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto cleanup; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - MPI_CHK( mpi_exp_mod( &X, &A, &E, &N, NULL ) ); - - MPI_CHK( mpi_read_string( &U, 16, - "36E139AEA55215609D2816998ED020BB" \ - "BD96C37890F65171D948E9BC7CBAA4D9" \ - "325D24D6A3C12710F10A09FA08AB87" ) ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #3 (exp_mod): " ); - - if( mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto cleanup; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - MPI_CHK( mpi_inv_mod( &X, &A, &N ) ); - - MPI_CHK( mpi_read_string( &U, 16, - "003A0AAEDD7E784FC07D8F9EC6E3BFD5" \ - "C3DBA76456363A10869622EAC2DD84EC" \ - "C5B8A74DAC4D09E03B5E0BE779F2DF61" ) ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #4 (inv_mod): " ); - - if( mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto cleanup; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #5 (simple gcd): " ); - - for( i = 0; i < GCD_PAIR_COUNT; i++ ) - { - MPI_CHK( mpi_lset( &X, gcd_pairs[i][0] ) ); - MPI_CHK( mpi_lset( &Y, gcd_pairs[i][1] ) ); - - MPI_CHK( mpi_gcd( &A, &X, &Y ) ); - - if( mpi_cmp_int( &A, gcd_pairs[i][2] ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed at %d\n", i ); - - ret = 1; - goto cleanup; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - -cleanup: - - if( ret != 0 && verbose != 0 ) - polarssl_printf( "Unexpected error, return code = %08X\n", ret ); - - mpi_free( &A ); mpi_free( &E ); mpi_free( &N ); mpi_free( &X ); - mpi_free( &Y ); mpi_free( &U ); mpi_free( &V ); - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_BIGNUM_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/blowfish.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/blowfish.c deleted file mode 100644 index 87396dc..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/blowfish.c +++ /dev/null @@ -1,658 +0,0 @@ -/* - * Blowfish implementation - * - * Copyright (C) 2012-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The Blowfish block cipher was designed by Bruce Schneier in 1993. - * http://www.schneier.com/blowfish.html - * http://en.wikipedia.org/wiki/Blowfish_%28cipher%29 - * - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_BLOWFISH_C) - -#include "polarssl/blowfish.h" - -#if !defined(POLARSSL_BLOWFISH_ALT) - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - -static const uint32_t P[BLOWFISH_ROUNDS + 2] = { - 0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L, - 0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L, - 0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL, - 0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L, - 0x9216D5D9L, 0x8979FB1BL -}; - -/* declarations of data at the end of this file */ -static const uint32_t S[4][256]; - -static uint32_t F( blowfish_context *ctx, uint32_t x ) -{ - unsigned short a, b, c, d; - uint32_t y; - - d = (unsigned short)(x & 0xFF); - x >>= 8; - c = (unsigned short)(x & 0xFF); - x >>= 8; - b = (unsigned short)(x & 0xFF); - x >>= 8; - a = (unsigned short)(x & 0xFF); - y = ctx->S[0][a] + ctx->S[1][b]; - y = y ^ ctx->S[2][c]; - y = y + ctx->S[3][d]; - - return( y ); -} - -static void blowfish_enc( blowfish_context *ctx, uint32_t *xl, uint32_t *xr ) -{ - uint32_t Xl, Xr, temp; - short i; - - Xl = *xl; - Xr = *xr; - - for( i = 0; i < BLOWFISH_ROUNDS; ++i ) - { - Xl = Xl ^ ctx->P[i]; - Xr = F( ctx, Xl ) ^ Xr; - - temp = Xl; - Xl = Xr; - Xr = temp; - } - - temp = Xl; - Xl = Xr; - Xr = temp; - - Xr = Xr ^ ctx->P[BLOWFISH_ROUNDS]; - Xl = Xl ^ ctx->P[BLOWFISH_ROUNDS + 1]; - - *xl = Xl; - *xr = Xr; -} - -static void blowfish_dec( blowfish_context *ctx, uint32_t *xl, uint32_t *xr ) -{ - uint32_t Xl, Xr, temp; - short i; - - Xl = *xl; - Xr = *xr; - - for( i = BLOWFISH_ROUNDS + 1; i > 1; --i ) - { - Xl = Xl ^ ctx->P[i]; - Xr = F( ctx, Xl ) ^ Xr; - - temp = Xl; - Xl = Xr; - Xr = temp; - } - - temp = Xl; - Xl = Xr; - Xr = temp; - - Xr = Xr ^ ctx->P[1]; - Xl = Xl ^ ctx->P[0]; - - *xl = Xl; - *xr = Xr; -} - -void blowfish_init( blowfish_context *ctx ) -{ - memset( ctx, 0, sizeof( blowfish_context ) ); -} - -void blowfish_free( blowfish_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( blowfish_context ) ); -} - -/* - * Blowfish key schedule - */ -int blowfish_setkey( blowfish_context *ctx, const unsigned char *key, - unsigned int keysize ) -{ - unsigned int i, j, k; - uint32_t data, datal, datar; - - if( keysize < BLOWFISH_MIN_KEY || keysize > BLOWFISH_MAX_KEY || - ( keysize % 8 ) ) - { - return( POLARSSL_ERR_BLOWFISH_INVALID_KEY_LENGTH ); - } - - keysize >>= 3; - - for( i = 0; i < 4; i++ ) - { - for( j = 0; j < 256; j++ ) - ctx->S[i][j] = S[i][j]; - } - - j = 0; - for( i = 0; i < BLOWFISH_ROUNDS + 2; ++i ) - { - data = 0x00000000; - for( k = 0; k < 4; ++k ) - { - data = ( data << 8 ) | key[j++]; - if( j >= keysize ) - j = 0; - } - ctx->P[i] = P[i] ^ data; - } - - datal = 0x00000000; - datar = 0x00000000; - - for( i = 0; i < BLOWFISH_ROUNDS + 2; i += 2 ) - { - blowfish_enc( ctx, &datal, &datar ); - ctx->P[i] = datal; - ctx->P[i + 1] = datar; - } - - for( i = 0; i < 4; i++ ) - { - for( j = 0; j < 256; j += 2 ) - { - blowfish_enc( ctx, &datal, &datar ); - ctx->S[i][j] = datal; - ctx->S[i][j + 1] = datar; - } - } - return( 0 ); -} - -/* - * Blowfish-ECB block encryption/decryption - */ -int blowfish_crypt_ecb( blowfish_context *ctx, - int mode, - const unsigned char input[BLOWFISH_BLOCKSIZE], - unsigned char output[BLOWFISH_BLOCKSIZE] ) -{ - uint32_t X0, X1; - - GET_UINT32_BE( X0, input, 0 ); - GET_UINT32_BE( X1, input, 4 ); - - if( mode == BLOWFISH_DECRYPT ) - { - blowfish_dec( ctx, &X0, &X1 ); - } - else /* BLOWFISH_ENCRYPT */ - { - blowfish_enc( ctx, &X0, &X1 ); - } - - PUT_UINT32_BE( X0, output, 0 ); - PUT_UINT32_BE( X1, output, 4 ); - - return( 0 ); -} - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/* - * Blowfish-CBC buffer encryption/decryption - */ -int blowfish_crypt_cbc( blowfish_context *ctx, - int mode, - size_t length, - unsigned char iv[BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) -{ - int i; - unsigned char temp[BLOWFISH_BLOCKSIZE]; - - if( length % BLOWFISH_BLOCKSIZE ) - return( POLARSSL_ERR_BLOWFISH_INVALID_INPUT_LENGTH ); - - if( mode == BLOWFISH_DECRYPT ) - { - while( length > 0 ) - { - memcpy( temp, input, BLOWFISH_BLOCKSIZE ); - blowfish_crypt_ecb( ctx, mode, input, output ); - - for( i = 0; i < BLOWFISH_BLOCKSIZE;i++ ) - output[i] = (unsigned char)( output[i] ^ iv[i] ); - - memcpy( iv, temp, BLOWFISH_BLOCKSIZE ); - - input += BLOWFISH_BLOCKSIZE; - output += BLOWFISH_BLOCKSIZE; - length -= BLOWFISH_BLOCKSIZE; - } - } - else - { - while( length > 0 ) - { - for( i = 0; i < BLOWFISH_BLOCKSIZE; i++ ) - output[i] = (unsigned char)( input[i] ^ iv[i] ); - - blowfish_crypt_ecb( ctx, mode, output, output ); - memcpy( iv, output, BLOWFISH_BLOCKSIZE ); - - input += BLOWFISH_BLOCKSIZE; - output += BLOWFISH_BLOCKSIZE; - length -= BLOWFISH_BLOCKSIZE; - } - } - - return( 0 ); -} -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) -/* - * Blowfish CFB buffer encryption/decryption - */ -int blowfish_crypt_cfb64( blowfish_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) -{ - int c; - size_t n = *iv_off; - - if( mode == BLOWFISH_DECRYPT ) - { - while( length-- ) - { - if( n == 0 ) - blowfish_crypt_ecb( ctx, BLOWFISH_ENCRYPT, iv, iv ); - - c = *input++; - *output++ = (unsigned char)( c ^ iv[n] ); - iv[n] = (unsigned char) c; - - n = ( n + 1 ) % BLOWFISH_BLOCKSIZE; - } - } - else - { - while( length-- ) - { - if( n == 0 ) - blowfish_crypt_ecb( ctx, BLOWFISH_ENCRYPT, iv, iv ); - - iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); - - n = ( n + 1 ) % BLOWFISH_BLOCKSIZE; - } - } - - *iv_off = n; - - return( 0 ); -} -#endif /*POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) -/* - * Blowfish CTR buffer encryption/decryption - */ -int blowfish_crypt_ctr( blowfish_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[BLOWFISH_BLOCKSIZE], - unsigned char stream_block[BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) -{ - int c, i; - size_t n = *nc_off; - - while( length-- ) - { - if( n == 0 ) { - blowfish_crypt_ecb( ctx, BLOWFISH_ENCRYPT, nonce_counter, - stream_block ); - - for( i = BLOWFISH_BLOCKSIZE; i > 0; i-- ) - if( ++nonce_counter[i - 1] != 0 ) - break; - } - c = *input++; - *output++ = (unsigned char)( c ^ stream_block[n] ); - - n = ( n + 1 ) % BLOWFISH_BLOCKSIZE; - } - - *nc_off = n; - - return( 0 ); -} -#endif /* POLARSSL_CIPHER_MODE_CTR */ - -static const uint32_t S[4][256] = { - { 0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L, - 0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L, - 0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L, - 0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL, - 0x0D95748FL, 0x728EB658L, 0x718BCD58L, 0x82154AEEL, - 0x7B54A41DL, 0xC25A59B5L, 0x9C30D539L, 0x2AF26013L, - 0xC5D1B023L, 0x286085F0L, 0xCA417918L, 0xB8DB38EFL, - 0x8E79DCB0L, 0x603A180EL, 0x6C9E0E8BL, 0xB01E8A3EL, - 0xD71577C1L, 0xBD314B27L, 0x78AF2FDAL, 0x55605C60L, - 0xE65525F3L, 0xAA55AB94L, 0x57489862L, 0x63E81440L, - 0x55CA396AL, 0x2AAB10B6L, 0xB4CC5C34L, 0x1141E8CEL, - 0xA15486AFL, 0x7C72E993L, 0xB3EE1411L, 0x636FBC2AL, - 0x2BA9C55DL, 0x741831F6L, 0xCE5C3E16L, 0x9B87931EL, - 0xAFD6BA33L, 0x6C24CF5CL, 0x7A325381L, 0x28958677L, - 0x3B8F4898L, 0x6B4BB9AFL, 0xC4BFE81BL, 0x66282193L, - 0x61D809CCL, 0xFB21A991L, 0x487CAC60L, 0x5DEC8032L, - 0xEF845D5DL, 0xE98575B1L, 0xDC262302L, 0xEB651B88L, - 0x23893E81L, 0xD396ACC5L, 0x0F6D6FF3L, 0x83F44239L, - 0x2E0B4482L, 0xA4842004L, 0x69C8F04AL, 0x9E1F9B5EL, - 0x21C66842L, 0xF6E96C9AL, 0x670C9C61L, 0xABD388F0L, - 0x6A51A0D2L, 0xD8542F68L, 0x960FA728L, 0xAB5133A3L, - 0x6EEF0B6CL, 0x137A3BE4L, 0xBA3BF050L, 0x7EFB2A98L, - 0xA1F1651DL, 0x39AF0176L, 0x66CA593EL, 0x82430E88L, - 0x8CEE8619L, 0x456F9FB4L, 0x7D84A5C3L, 0x3B8B5EBEL, - 0xE06F75D8L, 0x85C12073L, 0x401A449FL, 0x56C16AA6L, - 0x4ED3AA62L, 0x363F7706L, 0x1BFEDF72L, 0x429B023DL, - 0x37D0D724L, 0xD00A1248L, 0xDB0FEAD3L, 0x49F1C09BL, - 0x075372C9L, 0x80991B7BL, 0x25D479D8L, 0xF6E8DEF7L, - 0xE3FE501AL, 0xB6794C3BL, 0x976CE0BDL, 0x04C006BAL, - 0xC1A94FB6L, 0x409F60C4L, 0x5E5C9EC2L, 0x196A2463L, - 0x68FB6FAFL, 0x3E6C53B5L, 0x1339B2EBL, 0x3B52EC6FL, - 0x6DFC511FL, 0x9B30952CL, 0xCC814544L, 0xAF5EBD09L, - 0xBEE3D004L, 0xDE334AFDL, 0x660F2807L, 0x192E4BB3L, - 0xC0CBA857L, 0x45C8740FL, 0xD20B5F39L, 0xB9D3FBDBL, - 0x5579C0BDL, 0x1A60320AL, 0xD6A100C6L, 0x402C7279L, - 0x679F25FEL, 0xFB1FA3CCL, 0x8EA5E9F8L, 0xDB3222F8L, - 0x3C7516DFL, 0xFD616B15L, 0x2F501EC8L, 0xAD0552ABL, - 0x323DB5FAL, 0xFD238760L, 0x53317B48L, 0x3E00DF82L, - 0x9E5C57BBL, 0xCA6F8CA0L, 0x1A87562EL, 0xDF1769DBL, - 0xD542A8F6L, 0x287EFFC3L, 0xAC6732C6L, 0x8C4F5573L, - 0x695B27B0L, 0xBBCA58C8L, 0xE1FFA35DL, 0xB8F011A0L, - 0x10FA3D98L, 0xFD2183B8L, 0x4AFCB56CL, 0x2DD1D35BL, - 0x9A53E479L, 0xB6F84565L, 0xD28E49BCL, 0x4BFB9790L, - 0xE1DDF2DAL, 0xA4CB7E33L, 0x62FB1341L, 0xCEE4C6E8L, - 0xEF20CADAL, 0x36774C01L, 0xD07E9EFEL, 0x2BF11FB4L, - 0x95DBDA4DL, 0xAE909198L, 0xEAAD8E71L, 0x6B93D5A0L, - 0xD08ED1D0L, 0xAFC725E0L, 0x8E3C5B2FL, 0x8E7594B7L, - 0x8FF6E2FBL, 0xF2122B64L, 0x8888B812L, 0x900DF01CL, - 0x4FAD5EA0L, 0x688FC31CL, 0xD1CFF191L, 0xB3A8C1ADL, - 0x2F2F2218L, 0xBE0E1777L, 0xEA752DFEL, 0x8B021FA1L, - 0xE5A0CC0FL, 0xB56F74E8L, 0x18ACF3D6L, 0xCE89E299L, - 0xB4A84FE0L, 0xFD13E0B7L, 0x7CC43B81L, 0xD2ADA8D9L, - 0x165FA266L, 0x80957705L, 0x93CC7314L, 0x211A1477L, - 0xE6AD2065L, 0x77B5FA86L, 0xC75442F5L, 0xFB9D35CFL, - 0xEBCDAF0CL, 0x7B3E89A0L, 0xD6411BD3L, 0xAE1E7E49L, - 0x00250E2DL, 0x2071B35EL, 0x226800BBL, 0x57B8E0AFL, - 0x2464369BL, 0xF009B91EL, 0x5563911DL, 0x59DFA6AAL, - 0x78C14389L, 0xD95A537FL, 0x207D5BA2L, 0x02E5B9C5L, - 0x83260376L, 0x6295CFA9L, 0x11C81968L, 0x4E734A41L, - 0xB3472DCAL, 0x7B14A94AL, 0x1B510052L, 0x9A532915L, - 0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L, - 0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L, - 0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L, - 0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL }, - { 0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L, - 0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L, - 0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L, - 0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL, - 0x3F54989AL, 0x5B429D65L, 0x6B8FE4D6L, 0x99F73FD6L, - 0xA1D29C07L, 0xEFE830F5L, 0x4D2D38E6L, 0xF0255DC1L, - 0x4CDD2086L, 0x8470EB26L, 0x6382E9C6L, 0x021ECC5EL, - 0x09686B3FL, 0x3EBAEFC9L, 0x3C971814L, 0x6B6A70A1L, - 0x687F3584L, 0x52A0E286L, 0xB79C5305L, 0xAA500737L, - 0x3E07841CL, 0x7FDEAE5CL, 0x8E7D44ECL, 0x5716F2B8L, - 0xB03ADA37L, 0xF0500C0DL, 0xF01C1F04L, 0x0200B3FFL, - 0xAE0CF51AL, 0x3CB574B2L, 0x25837A58L, 0xDC0921BDL, - 0xD19113F9L, 0x7CA92FF6L, 0x94324773L, 0x22F54701L, - 0x3AE5E581L, 0x37C2DADCL, 0xC8B57634L, 0x9AF3DDA7L, - 0xA9446146L, 0x0FD0030EL, 0xECC8C73EL, 0xA4751E41L, - 0xE238CD99L, 0x3BEA0E2FL, 0x3280BBA1L, 0x183EB331L, - 0x4E548B38L, 0x4F6DB908L, 0x6F420D03L, 0xF60A04BFL, - 0x2CB81290L, 0x24977C79L, 0x5679B072L, 0xBCAF89AFL, - 0xDE9A771FL, 0xD9930810L, 0xB38BAE12L, 0xDCCF3F2EL, - 0x5512721FL, 0x2E6B7124L, 0x501ADDE6L, 0x9F84CD87L, - 0x7A584718L, 0x7408DA17L, 0xBC9F9ABCL, 0xE94B7D8CL, - 0xEC7AEC3AL, 0xDB851DFAL, 0x63094366L, 0xC464C3D2L, - 0xEF1C1847L, 0x3215D908L, 0xDD433B37L, 0x24C2BA16L, - 0x12A14D43L, 0x2A65C451L, 0x50940002L, 0x133AE4DDL, - 0x71DFF89EL, 0x10314E55L, 0x81AC77D6L, 0x5F11199BL, - 0x043556F1L, 0xD7A3C76BL, 0x3C11183BL, 0x5924A509L, - 0xF28FE6EDL, 0x97F1FBFAL, 0x9EBABF2CL, 0x1E153C6EL, - 0x86E34570L, 0xEAE96FB1L, 0x860E5E0AL, 0x5A3E2AB3L, - 0x771FE71CL, 0x4E3D06FAL, 0x2965DCB9L, 0x99E71D0FL, - 0x803E89D6L, 0x5266C825L, 0x2E4CC978L, 0x9C10B36AL, - 0xC6150EBAL, 0x94E2EA78L, 0xA5FC3C53L, 0x1E0A2DF4L, - 0xF2F74EA7L, 0x361D2B3DL, 0x1939260FL, 0x19C27960L, - 0x5223A708L, 0xF71312B6L, 0xEBADFE6EL, 0xEAC31F66L, - 0xE3BC4595L, 0xA67BC883L, 0xB17F37D1L, 0x018CFF28L, - 0xC332DDEFL, 0xBE6C5AA5L, 0x65582185L, 0x68AB9802L, - 0xEECEA50FL, 0xDB2F953BL, 0x2AEF7DADL, 0x5B6E2F84L, - 0x1521B628L, 0x29076170L, 0xECDD4775L, 0x619F1510L, - 0x13CCA830L, 0xEB61BD96L, 0x0334FE1EL, 0xAA0363CFL, - 0xB5735C90L, 0x4C70A239L, 0xD59E9E0BL, 0xCBAADE14L, - 0xEECC86BCL, 0x60622CA7L, 0x9CAB5CABL, 0xB2F3846EL, - 0x648B1EAFL, 0x19BDF0CAL, 0xA02369B9L, 0x655ABB50L, - 0x40685A32L, 0x3C2AB4B3L, 0x319EE9D5L, 0xC021B8F7L, - 0x9B540B19L, 0x875FA099L, 0x95F7997EL, 0x623D7DA8L, - 0xF837889AL, 0x97E32D77L, 0x11ED935FL, 0x16681281L, - 0x0E358829L, 0xC7E61FD6L, 0x96DEDFA1L, 0x7858BA99L, - 0x57F584A5L, 0x1B227263L, 0x9B83C3FFL, 0x1AC24696L, - 0xCDB30AEBL, 0x532E3054L, 0x8FD948E4L, 0x6DBC3128L, - 0x58EBF2EFL, 0x34C6FFEAL, 0xFE28ED61L, 0xEE7C3C73L, - 0x5D4A14D9L, 0xE864B7E3L, 0x42105D14L, 0x203E13E0L, - 0x45EEE2B6L, 0xA3AAABEAL, 0xDB6C4F15L, 0xFACB4FD0L, - 0xC742F442L, 0xEF6ABBB5L, 0x654F3B1DL, 0x41CD2105L, - 0xD81E799EL, 0x86854DC7L, 0xE44B476AL, 0x3D816250L, - 0xCF62A1F2L, 0x5B8D2646L, 0xFC8883A0L, 0xC1C7B6A3L, - 0x7F1524C3L, 0x69CB7492L, 0x47848A0BL, 0x5692B285L, - 0x095BBF00L, 0xAD19489DL, 0x1462B174L, 0x23820E00L, - 0x58428D2AL, 0x0C55F5EAL, 0x1DADF43EL, 0x233F7061L, - 0x3372F092L, 0x8D937E41L, 0xD65FECF1L, 0x6C223BDBL, - 0x7CDE3759L, 0xCBEE7460L, 0x4085F2A7L, 0xCE77326EL, - 0xA6078084L, 0x19F8509EL, 0xE8EFD855L, 0x61D99735L, - 0xA969A7AAL, 0xC50C06C2L, 0x5A04ABFCL, 0x800BCADCL, - 0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L, - 0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L, - 0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L, - 0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L }, - { 0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L, - 0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L, - 0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL, - 0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L, - 0x4D95FC1DL, 0x96B591AFL, 0x70F4DDD3L, 0x66A02F45L, - 0xBFBC09ECL, 0x03BD9785L, 0x7FAC6DD0L, 0x31CB8504L, - 0x96EB27B3L, 0x55FD3941L, 0xDA2547E6L, 0xABCA0A9AL, - 0x28507825L, 0x530429F4L, 0x0A2C86DAL, 0xE9B66DFBL, - 0x68DC1462L, 0xD7486900L, 0x680EC0A4L, 0x27A18DEEL, - 0x4F3FFEA2L, 0xE887AD8CL, 0xB58CE006L, 0x7AF4D6B6L, - 0xAACE1E7CL, 0xD3375FECL, 0xCE78A399L, 0x406B2A42L, - 0x20FE9E35L, 0xD9F385B9L, 0xEE39D7ABL, 0x3B124E8BL, - 0x1DC9FAF7L, 0x4B6D1856L, 0x26A36631L, 0xEAE397B2L, - 0x3A6EFA74L, 0xDD5B4332L, 0x6841E7F7L, 0xCA7820FBL, - 0xFB0AF54EL, 0xD8FEB397L, 0x454056ACL, 0xBA489527L, - 0x55533A3AL, 0x20838D87L, 0xFE6BA9B7L, 0xD096954BL, - 0x55A867BCL, 0xA1159A58L, 0xCCA92963L, 0x99E1DB33L, - 0xA62A4A56L, 0x3F3125F9L, 0x5EF47E1CL, 0x9029317CL, - 0xFDF8E802L, 0x04272F70L, 0x80BB155CL, 0x05282CE3L, - 0x95C11548L, 0xE4C66D22L, 0x48C1133FL, 0xC70F86DCL, - 0x07F9C9EEL, 0x41041F0FL, 0x404779A4L, 0x5D886E17L, - 0x325F51EBL, 0xD59BC0D1L, 0xF2BCC18FL, 0x41113564L, - 0x257B7834L, 0x602A9C60L, 0xDFF8E8A3L, 0x1F636C1BL, - 0x0E12B4C2L, 0x02E1329EL, 0xAF664FD1L, 0xCAD18115L, - 0x6B2395E0L, 0x333E92E1L, 0x3B240B62L, 0xEEBEB922L, - 0x85B2A20EL, 0xE6BA0D99L, 0xDE720C8CL, 0x2DA2F728L, - 0xD0127845L, 0x95B794FDL, 0x647D0862L, 0xE7CCF5F0L, - 0x5449A36FL, 0x877D48FAL, 0xC39DFD27L, 0xF33E8D1EL, - 0x0A476341L, 0x992EFF74L, 0x3A6F6EABL, 0xF4F8FD37L, - 0xA812DC60L, 0xA1EBDDF8L, 0x991BE14CL, 0xDB6E6B0DL, - 0xC67B5510L, 0x6D672C37L, 0x2765D43BL, 0xDCD0E804L, - 0xF1290DC7L, 0xCC00FFA3L, 0xB5390F92L, 0x690FED0BL, - 0x667B9FFBL, 0xCEDB7D9CL, 0xA091CF0BL, 0xD9155EA3L, - 0xBB132F88L, 0x515BAD24L, 0x7B9479BFL, 0x763BD6EBL, - 0x37392EB3L, 0xCC115979L, 0x8026E297L, 0xF42E312DL, - 0x6842ADA7L, 0xC66A2B3BL, 0x12754CCCL, 0x782EF11CL, - 0x6A124237L, 0xB79251E7L, 0x06A1BBE6L, 0x4BFB6350L, - 0x1A6B1018L, 0x11CAEDFAL, 0x3D25BDD8L, 0xE2E1C3C9L, - 0x44421659L, 0x0A121386L, 0xD90CEC6EL, 0xD5ABEA2AL, - 0x64AF674EL, 0xDA86A85FL, 0xBEBFE988L, 0x64E4C3FEL, - 0x9DBC8057L, 0xF0F7C086L, 0x60787BF8L, 0x6003604DL, - 0xD1FD8346L, 0xF6381FB0L, 0x7745AE04L, 0xD736FCCCL, - 0x83426B33L, 0xF01EAB71L, 0xB0804187L, 0x3C005E5FL, - 0x77A057BEL, 0xBDE8AE24L, 0x55464299L, 0xBF582E61L, - 0x4E58F48FL, 0xF2DDFDA2L, 0xF474EF38L, 0x8789BDC2L, - 0x5366F9C3L, 0xC8B38E74L, 0xB475F255L, 0x46FCD9B9L, - 0x7AEB2661L, 0x8B1DDF84L, 0x846A0E79L, 0x915F95E2L, - 0x466E598EL, 0x20B45770L, 0x8CD55591L, 0xC902DE4CL, - 0xB90BACE1L, 0xBB8205D0L, 0x11A86248L, 0x7574A99EL, - 0xB77F19B6L, 0xE0A9DC09L, 0x662D09A1L, 0xC4324633L, - 0xE85A1F02L, 0x09F0BE8CL, 0x4A99A025L, 0x1D6EFE10L, - 0x1AB93D1DL, 0x0BA5A4DFL, 0xA186F20FL, 0x2868F169L, - 0xDCB7DA83L, 0x573906FEL, 0xA1E2CE9BL, 0x4FCD7F52L, - 0x50115E01L, 0xA70683FAL, 0xA002B5C4L, 0x0DE6D027L, - 0x9AF88C27L, 0x773F8641L, 0xC3604C06L, 0x61A806B5L, - 0xF0177A28L, 0xC0F586E0L, 0x006058AAL, 0x30DC7D62L, - 0x11E69ED7L, 0x2338EA63L, 0x53C2DD94L, 0xC2C21634L, - 0xBBCBEE56L, 0x90BCB6DEL, 0xEBFC7DA1L, 0xCE591D76L, - 0x6F05E409L, 0x4B7C0188L, 0x39720A3DL, 0x7C927C24L, - 0x86E3725FL, 0x724D9DB9L, 0x1AC15BB4L, 0xD39EB8FCL, - 0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L, - 0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL, - 0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L, - 0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L }, - { 0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL, - 0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL, - 0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL, - 0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L, - 0x5748AB2FL, 0xBC946E79L, 0xC6A376D2L, 0x6549C2C8L, - 0x530FF8EEL, 0x468DDE7DL, 0xD5730A1DL, 0x4CD04DC6L, - 0x2939BBDBL, 0xA9BA4650L, 0xAC9526E8L, 0xBE5EE304L, - 0xA1FAD5F0L, 0x6A2D519AL, 0x63EF8CE2L, 0x9A86EE22L, - 0xC089C2B8L, 0x43242EF6L, 0xA51E03AAL, 0x9CF2D0A4L, - 0x83C061BAL, 0x9BE96A4DL, 0x8FE51550L, 0xBA645BD6L, - 0x2826A2F9L, 0xA73A3AE1L, 0x4BA99586L, 0xEF5562E9L, - 0xC72FEFD3L, 0xF752F7DAL, 0x3F046F69L, 0x77FA0A59L, - 0x80E4A915L, 0x87B08601L, 0x9B09E6ADL, 0x3B3EE593L, - 0xE990FD5AL, 0x9E34D797L, 0x2CF0B7D9L, 0x022B8B51L, - 0x96D5AC3AL, 0x017DA67DL, 0xD1CF3ED6L, 0x7C7D2D28L, - 0x1F9F25CFL, 0xADF2B89BL, 0x5AD6B472L, 0x5A88F54CL, - 0xE029AC71L, 0xE019A5E6L, 0x47B0ACFDL, 0xED93FA9BL, - 0xE8D3C48DL, 0x283B57CCL, 0xF8D56629L, 0x79132E28L, - 0x785F0191L, 0xED756055L, 0xF7960E44L, 0xE3D35E8CL, - 0x15056DD4L, 0x88F46DBAL, 0x03A16125L, 0x0564F0BDL, - 0xC3EB9E15L, 0x3C9057A2L, 0x97271AECL, 0xA93A072AL, - 0x1B3F6D9BL, 0x1E6321F5L, 0xF59C66FBL, 0x26DCF319L, - 0x7533D928L, 0xB155FDF5L, 0x03563482L, 0x8ABA3CBBL, - 0x28517711L, 0xC20AD9F8L, 0xABCC5167L, 0xCCAD925FL, - 0x4DE81751L, 0x3830DC8EL, 0x379D5862L, 0x9320F991L, - 0xEA7A90C2L, 0xFB3E7BCEL, 0x5121CE64L, 0x774FBE32L, - 0xA8B6E37EL, 0xC3293D46L, 0x48DE5369L, 0x6413E680L, - 0xA2AE0810L, 0xDD6DB224L, 0x69852DFDL, 0x09072166L, - 0xB39A460AL, 0x6445C0DDL, 0x586CDECFL, 0x1C20C8AEL, - 0x5BBEF7DDL, 0x1B588D40L, 0xCCD2017FL, 0x6BB4E3BBL, - 0xDDA26A7EL, 0x3A59FF45L, 0x3E350A44L, 0xBCB4CDD5L, - 0x72EACEA8L, 0xFA6484BBL, 0x8D6612AEL, 0xBF3C6F47L, - 0xD29BE463L, 0x542F5D9EL, 0xAEC2771BL, 0xF64E6370L, - 0x740E0D8DL, 0xE75B1357L, 0xF8721671L, 0xAF537D5DL, - 0x4040CB08L, 0x4EB4E2CCL, 0x34D2466AL, 0x0115AF84L, - 0xE1B00428L, 0x95983A1DL, 0x06B89FB4L, 0xCE6EA048L, - 0x6F3F3B82L, 0x3520AB82L, 0x011A1D4BL, 0x277227F8L, - 0x611560B1L, 0xE7933FDCL, 0xBB3A792BL, 0x344525BDL, - 0xA08839E1L, 0x51CE794BL, 0x2F32C9B7L, 0xA01FBAC9L, - 0xE01CC87EL, 0xBCC7D1F6L, 0xCF0111C3L, 0xA1E8AAC7L, - 0x1A908749L, 0xD44FBD9AL, 0xD0DADECBL, 0xD50ADA38L, - 0x0339C32AL, 0xC6913667L, 0x8DF9317CL, 0xE0B12B4FL, - 0xF79E59B7L, 0x43F5BB3AL, 0xF2D519FFL, 0x27D9459CL, - 0xBF97222CL, 0x15E6FC2AL, 0x0F91FC71L, 0x9B941525L, - 0xFAE59361L, 0xCEB69CEBL, 0xC2A86459L, 0x12BAA8D1L, - 0xB6C1075EL, 0xE3056A0CL, 0x10D25065L, 0xCB03A442L, - 0xE0EC6E0EL, 0x1698DB3BL, 0x4C98A0BEL, 0x3278E964L, - 0x9F1F9532L, 0xE0D392DFL, 0xD3A0342BL, 0x8971F21EL, - 0x1B0A7441L, 0x4BA3348CL, 0xC5BE7120L, 0xC37632D8L, - 0xDF359F8DL, 0x9B992F2EL, 0xE60B6F47L, 0x0FE3F11DL, - 0xE54CDA54L, 0x1EDAD891L, 0xCE6279CFL, 0xCD3E7E6FL, - 0x1618B166L, 0xFD2C1D05L, 0x848FD2C5L, 0xF6FB2299L, - 0xF523F357L, 0xA6327623L, 0x93A83531L, 0x56CCCD02L, - 0xACF08162L, 0x5A75EBB5L, 0x6E163697L, 0x88D273CCL, - 0xDE966292L, 0x81B949D0L, 0x4C50901BL, 0x71C65614L, - 0xE6C6C7BDL, 0x327A140AL, 0x45E1D006L, 0xC3F27B9AL, - 0xC9AA53FDL, 0x62A80F00L, 0xBB25BFE2L, 0x35BDD2F6L, - 0x71126905L, 0xB2040222L, 0xB6CBCF7CL, 0xCD769C2BL, - 0x53113EC0L, 0x1640E3D3L, 0x38ABBD60L, 0x2547ADF0L, - 0xBA38209CL, 0xF746CE76L, 0x77AFA1C5L, 0x20756060L, - 0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL, - 0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L, - 0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL, - 0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L } -}; - -#endif /* !POLARSSL_BLOWFISH_ALT */ -#endif /* POLARSSL_BLOWFISH_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/camellia.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/camellia.c deleted file mode 100644 index a4968f4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/camellia.c +++ /dev/null @@ -1,1073 +0,0 @@ -/* - * Camellia implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The Camellia block cipher was designed by NTT and Mitsubishi Electric - * Corporation. - * - * http://info.isl.ntt.co.jp/crypt/eng/camellia/dl/01espec.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_CAMELLIA_C) - -#include "polarssl/camellia.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -#if !defined(POLARSSL_CAMELLIA_ALT) - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - -static const unsigned char SIGMA_CHARS[6][8] = -{ - { 0xa0, 0x9e, 0x66, 0x7f, 0x3b, 0xcc, 0x90, 0x8b }, - { 0xb6, 0x7a, 0xe8, 0x58, 0x4c, 0xaa, 0x73, 0xb2 }, - { 0xc6, 0xef, 0x37, 0x2f, 0xe9, 0x4f, 0x82, 0xbe }, - { 0x54, 0xff, 0x53, 0xa5, 0xf1, 0xd3, 0x6f, 0x1c }, - { 0x10, 0xe5, 0x27, 0xfa, 0xde, 0x68, 0x2d, 0x1d }, - { 0xb0, 0x56, 0x88, 0xc2, 0xb3, 0xe6, 0xc1, 0xfd } -}; - -#if defined(POLARSSL_CAMELLIA_SMALL_MEMORY) - -static const unsigned char FSb[256] = -{ - 112,130, 44,236,179, 39,192,229,228,133, 87, 53,234, 12,174, 65, - 35,239,107,147, 69, 25,165, 33,237, 14, 79, 78, 29,101,146,189, - 134,184,175,143,124,235, 31,206, 62, 48,220, 95, 94,197, 11, 26, - 166,225, 57,202,213, 71, 93, 61,217, 1, 90,214, 81, 86,108, 77, - 139, 13,154,102,251,204,176, 45,116, 18, 43, 32,240,177,132,153, - 223, 76,203,194, 52,126,118, 5,109,183,169, 49,209, 23, 4,215, - 20, 88, 58, 97,222, 27, 17, 28, 50, 15,156, 22, 83, 24,242, 34, - 254, 68,207,178,195,181,122,145, 36, 8,232,168, 96,252,105, 80, - 170,208,160,125,161,137, 98,151, 84, 91, 30,149,224,255,100,210, - 16,196, 0, 72,163,247,117,219,138, 3,230,218, 9, 63,221,148, - 135, 92,131, 2,205, 74,144, 51,115,103,246,243,157,127,191,226, - 82,155,216, 38,200, 55,198, 59,129,150,111, 75, 19,190, 99, 46, - 233,121,167,140,159,110,188,142, 41,245,249,182, 47,253,180, 89, - 120,152, 6,106,231, 70,113,186,212, 37,171, 66,136,162,141,250, - 114, 7,185, 85,248,238,172, 10, 54, 73, 42,104, 60, 56,241,164, - 64, 40,211,123,187,201, 67,193, 21,227,173,244,119,199,128,158 -}; - -#define SBOX1(n) FSb[(n)] -#define SBOX2(n) (unsigned char)((FSb[(n)] >> 7 ^ FSb[(n)] << 1) & 0xff) -#define SBOX3(n) (unsigned char)((FSb[(n)] >> 1 ^ FSb[(n)] << 7) & 0xff) -#define SBOX4(n) FSb[((n) << 1 ^ (n) >> 7) &0xff] - -#else /* POLARSSL_CAMELLIA_SMALL_MEMORY */ - -static const unsigned char FSb[256] = -{ - 112, 130, 44, 236, 179, 39, 192, 229, 228, 133, 87, 53, 234, 12, 174, 65, - 35, 239, 107, 147, 69, 25, 165, 33, 237, 14, 79, 78, 29, 101, 146, 189, - 134, 184, 175, 143, 124, 235, 31, 206, 62, 48, 220, 95, 94, 197, 11, 26, - 166, 225, 57, 202, 213, 71, 93, 61, 217, 1, 90, 214, 81, 86, 108, 77, - 139, 13, 154, 102, 251, 204, 176, 45, 116, 18, 43, 32, 240, 177, 132, 153, - 223, 76, 203, 194, 52, 126, 118, 5, 109, 183, 169, 49, 209, 23, 4, 215, - 20, 88, 58, 97, 222, 27, 17, 28, 50, 15, 156, 22, 83, 24, 242, 34, - 254, 68, 207, 178, 195, 181, 122, 145, 36, 8, 232, 168, 96, 252, 105, 80, - 170, 208, 160, 125, 161, 137, 98, 151, 84, 91, 30, 149, 224, 255, 100, 210, - 16, 196, 0, 72, 163, 247, 117, 219, 138, 3, 230, 218, 9, 63, 221, 148, - 135, 92, 131, 2, 205, 74, 144, 51, 115, 103, 246, 243, 157, 127, 191, 226, - 82, 155, 216, 38, 200, 55, 198, 59, 129, 150, 111, 75, 19, 190, 99, 46, - 233, 121, 167, 140, 159, 110, 188, 142, 41, 245, 249, 182, 47, 253, 180, 89, - 120, 152, 6, 106, 231, 70, 113, 186, 212, 37, 171, 66, 136, 162, 141, 250, - 114, 7, 185, 85, 248, 238, 172, 10, 54, 73, 42, 104, 60, 56, 241, 164, - 64, 40, 211, 123, 187, 201, 67, 193, 21, 227, 173, 244, 119, 199, 128, 158 -}; - -static const unsigned char FSb2[256] = -{ - 224, 5, 88, 217, 103, 78, 129, 203, 201, 11, 174, 106, 213, 24, 93, 130, - 70, 223, 214, 39, 138, 50, 75, 66, 219, 28, 158, 156, 58, 202, 37, 123, - 13, 113, 95, 31, 248, 215, 62, 157, 124, 96, 185, 190, 188, 139, 22, 52, - 77, 195, 114, 149, 171, 142, 186, 122, 179, 2, 180, 173, 162, 172, 216, 154, - 23, 26, 53, 204, 247, 153, 97, 90, 232, 36, 86, 64, 225, 99, 9, 51, - 191, 152, 151, 133, 104, 252, 236, 10, 218, 111, 83, 98, 163, 46, 8, 175, - 40, 176, 116, 194, 189, 54, 34, 56, 100, 30, 57, 44, 166, 48, 229, 68, - 253, 136, 159, 101, 135, 107, 244, 35, 72, 16, 209, 81, 192, 249, 210, 160, - 85, 161, 65, 250, 67, 19, 196, 47, 168, 182, 60, 43, 193, 255, 200, 165, - 32, 137, 0, 144, 71, 239, 234, 183, 21, 6, 205, 181, 18, 126, 187, 41, - 15, 184, 7, 4, 155, 148, 33, 102, 230, 206, 237, 231, 59, 254, 127, 197, - 164, 55, 177, 76, 145, 110, 141, 118, 3, 45, 222, 150, 38, 125, 198, 92, - 211, 242, 79, 25, 63, 220, 121, 29, 82, 235, 243, 109, 94, 251, 105, 178, - 240, 49, 12, 212, 207, 140, 226, 117, 169, 74, 87, 132, 17, 69, 27, 245, - 228, 14, 115, 170, 241, 221, 89, 20, 108, 146, 84, 208, 120, 112, 227, 73, - 128, 80, 167, 246, 119, 147, 134, 131, 42, 199, 91, 233, 238, 143, 1, 61 -}; - -static const unsigned char FSb3[256] = -{ - 56, 65, 22, 118, 217, 147, 96, 242, 114, 194, 171, 154, 117, 6, 87, 160, - 145, 247, 181, 201, 162, 140, 210, 144, 246, 7, 167, 39, 142, 178, 73, 222, - 67, 92, 215, 199, 62, 245, 143, 103, 31, 24, 110, 175, 47, 226, 133, 13, - 83, 240, 156, 101, 234, 163, 174, 158, 236, 128, 45, 107, 168, 43, 54, 166, - 197, 134, 77, 51, 253, 102, 88, 150, 58, 9, 149, 16, 120, 216, 66, 204, - 239, 38, 229, 97, 26, 63, 59, 130, 182, 219, 212, 152, 232, 139, 2, 235, - 10, 44, 29, 176, 111, 141, 136, 14, 25, 135, 78, 11, 169, 12, 121, 17, - 127, 34, 231, 89, 225, 218, 61, 200, 18, 4, 116, 84, 48, 126, 180, 40, - 85, 104, 80, 190, 208, 196, 49, 203, 42, 173, 15, 202, 112, 255, 50, 105, - 8, 98, 0, 36, 209, 251, 186, 237, 69, 129, 115, 109, 132, 159, 238, 74, - 195, 46, 193, 1, 230, 37, 72, 153, 185, 179, 123, 249, 206, 191, 223, 113, - 41, 205, 108, 19, 100, 155, 99, 157, 192, 75, 183, 165, 137, 95, 177, 23, - 244, 188, 211, 70, 207, 55, 94, 71, 148, 250, 252, 91, 151, 254, 90, 172, - 60, 76, 3, 53, 243, 35, 184, 93, 106, 146, 213, 33, 68, 81, 198, 125, - 57, 131, 220, 170, 124, 119, 86, 5, 27, 164, 21, 52, 30, 28, 248, 82, - 32, 20, 233, 189, 221, 228, 161, 224, 138, 241, 214, 122, 187, 227, 64, 79 -}; - -static const unsigned char FSb4[256] = -{ - 112, 44, 179, 192, 228, 87, 234, 174, 35, 107, 69, 165, 237, 79, 29, 146, - 134, 175, 124, 31, 62, 220, 94, 11, 166, 57, 213, 93, 217, 90, 81, 108, - 139, 154, 251, 176, 116, 43, 240, 132, 223, 203, 52, 118, 109, 169, 209, 4, - 20, 58, 222, 17, 50, 156, 83, 242, 254, 207, 195, 122, 36, 232, 96, 105, - 170, 160, 161, 98, 84, 30, 224, 100, 16, 0, 163, 117, 138, 230, 9, 221, - 135, 131, 205, 144, 115, 246, 157, 191, 82, 216, 200, 198, 129, 111, 19, 99, - 233, 167, 159, 188, 41, 249, 47, 180, 120, 6, 231, 113, 212, 171, 136, 141, - 114, 185, 248, 172, 54, 42, 60, 241, 64, 211, 187, 67, 21, 173, 119, 128, - 130, 236, 39, 229, 133, 53, 12, 65, 239, 147, 25, 33, 14, 78, 101, 189, - 184, 143, 235, 206, 48, 95, 197, 26, 225, 202, 71, 61, 1, 214, 86, 77, - 13, 102, 204, 45, 18, 32, 177, 153, 76, 194, 126, 5, 183, 49, 23, 215, - 88, 97, 27, 28, 15, 22, 24, 34, 68, 178, 181, 145, 8, 168, 252, 80, - 208, 125, 137, 151, 91, 149, 255, 210, 196, 72, 247, 219, 3, 218, 63, 148, - 92, 2, 74, 51, 103, 243, 127, 226, 155, 38, 55, 59, 150, 75, 190, 46, - 121, 140, 110, 142, 245, 182, 253, 89, 152, 106, 70, 186, 37, 66, 162, 250, - 7, 85, 238, 10, 73, 104, 56, 164, 40, 123, 201, 193, 227, 244, 199, 158 -}; - -#define SBOX1(n) FSb[(n)] -#define SBOX2(n) FSb2[(n)] -#define SBOX3(n) FSb3[(n)] -#define SBOX4(n) FSb4[(n)] - -#endif /* POLARSSL_CAMELLIA_SMALL_MEMORY */ - -static const unsigned char shifts[2][4][4] = -{ - { - { 1, 1, 1, 1 }, /* KL */ - { 0, 0, 0, 0 }, /* KR */ - { 1, 1, 1, 1 }, /* KA */ - { 0, 0, 0, 0 } /* KB */ - }, - { - { 1, 0, 1, 1 }, /* KL */ - { 1, 1, 0, 1 }, /* KR */ - { 1, 1, 1, 0 }, /* KA */ - { 1, 1, 0, 1 } /* KB */ - } -}; - -static const signed char indexes[2][4][20] = -{ - { - { 0, 1, 2, 3, 8, 9, 10, 11, 38, 39, - 36, 37, 23, 20, 21, 22, 27, -1, -1, 26 }, /* KL -> RK */ - { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, /* KR -> RK */ - { 4, 5, 6, 7, 12, 13, 14, 15, 16, 17, - 18, 19, -1, 24, 25, -1, 31, 28, 29, 30 }, /* KA -> RK */ - { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } /* KB -> RK */ - }, - { - { 0, 1, 2, 3, 61, 62, 63, 60, -1, -1, - -1, -1, 27, 24, 25, 26, 35, 32, 33, 34 }, /* KL -> RK */ - { -1, -1, -1, -1, 8, 9, 10, 11, 16, 17, - 18, 19, -1, -1, -1, -1, 39, 36, 37, 38 }, /* KR -> RK */ - { -1, -1, -1, -1, 12, 13, 14, 15, 58, 59, - 56, 57, 31, 28, 29, 30, -1, -1, -1, -1 }, /* KA -> RK */ - { 4, 5, 6, 7, 65, 66, 67, 64, 20, 21, - 22, 23, -1, -1, -1, -1, 43, 40, 41, 42 } /* KB -> RK */ - } -}; - -static const signed char transposes[2][20] = -{ - { - 21, 22, 23, 20, - -1, -1, -1, -1, - 18, 19, 16, 17, - 11, 8, 9, 10, - 15, 12, 13, 14 - }, - { - 25, 26, 27, 24, - 29, 30, 31, 28, - 18, 19, 16, 17, - -1, -1, -1, -1, - -1, -1, -1, -1 - } -}; - -/* Shift macro for 128 bit strings with rotation smaller than 32 bits (!) */ -#define ROTL(DEST, SRC, SHIFT) \ -{ \ - (DEST)[0] = (SRC)[0] << (SHIFT) ^ (SRC)[1] >> (32 - (SHIFT)); \ - (DEST)[1] = (SRC)[1] << (SHIFT) ^ (SRC)[2] >> (32 - (SHIFT)); \ - (DEST)[2] = (SRC)[2] << (SHIFT) ^ (SRC)[3] >> (32 - (SHIFT)); \ - (DEST)[3] = (SRC)[3] << (SHIFT) ^ (SRC)[0] >> (32 - (SHIFT)); \ -} - -#define FL(XL, XR, KL, KR) \ -{ \ - (XR) = ((((XL) & (KL)) << 1) | (((XL) & (KL)) >> 31)) ^ (XR); \ - (XL) = ((XR) | (KR)) ^ (XL); \ -} - -#define FLInv(YL, YR, KL, KR) \ -{ \ - (YL) = ((YR) | (KR)) ^ (YL); \ - (YR) = ((((YL) & (KL)) << 1) | (((YL) & (KL)) >> 31)) ^ (YR); \ -} - -#define SHIFT_AND_PLACE(INDEX, OFFSET) \ -{ \ - TK[0] = KC[(OFFSET) * 4 + 0]; \ - TK[1] = KC[(OFFSET) * 4 + 1]; \ - TK[2] = KC[(OFFSET) * 4 + 2]; \ - TK[3] = KC[(OFFSET) * 4 + 3]; \ - \ - for( i = 1; i <= 4; i++ ) \ - if( shifts[(INDEX)][(OFFSET)][i -1] ) \ - ROTL(TK + i * 4, TK, ( 15 * i ) % 32); \ - \ - for( i = 0; i < 20; i++ ) \ - if( indexes[(INDEX)][(OFFSET)][i] != -1 ) { \ - RK[indexes[(INDEX)][(OFFSET)][i]] = TK[ i ]; \ - } \ -} - -static void camellia_feistel( const uint32_t x[2], const uint32_t k[2], - uint32_t z[2]) -{ - uint32_t I0, I1; - I0 = x[0] ^ k[0]; - I1 = x[1] ^ k[1]; - - I0 = (SBOX1((I0 >> 24) & 0xFF) << 24) | - (SBOX2((I0 >> 16) & 0xFF) << 16) | - (SBOX3((I0 >> 8) & 0xFF) << 8) | - (SBOX4((I0 ) & 0xFF) ); - I1 = (SBOX2((I1 >> 24) & 0xFF) << 24) | - (SBOX3((I1 >> 16) & 0xFF) << 16) | - (SBOX4((I1 >> 8) & 0xFF) << 8) | - (SBOX1((I1 ) & 0xFF) ); - - I0 ^= (I1 << 8) | (I1 >> 24); - I1 ^= (I0 << 16) | (I0 >> 16); - I0 ^= (I1 >> 8) | (I1 << 24); - I1 ^= (I0 >> 8) | (I0 << 24); - - z[0] ^= I1; - z[1] ^= I0; -} - -void camellia_init( camellia_context *ctx ) -{ - memset( ctx, 0, sizeof( camellia_context ) ); -} - -void camellia_free( camellia_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( camellia_context ) ); -} - -/* - * Camellia key schedule (encryption) - */ -int camellia_setkey_enc( camellia_context *ctx, const unsigned char *key, - unsigned int keysize ) -{ - int idx; - size_t i; - uint32_t *RK; - unsigned char t[64]; - uint32_t SIGMA[6][2]; - uint32_t KC[16]; - uint32_t TK[20]; - - RK = ctx->rk; - - memset( t, 0, 64 ); - memset( RK, 0, sizeof(ctx->rk) ); - - switch( keysize ) - { - case 128: ctx->nr = 3; idx = 0; break; - case 192: - case 256: ctx->nr = 4; idx = 1; break; - default : return( POLARSSL_ERR_CAMELLIA_INVALID_KEY_LENGTH ); - } - - for( i = 0; i < keysize / 8; ++i ) - t[i] = key[i]; - - if( keysize == 192 ) { - for( i = 0; i < 8; i++ ) - t[24 + i] = ~t[16 + i]; - } - - /* - * Prepare SIGMA values - */ - for( i = 0; i < 6; i++ ) { - GET_UINT32_BE( SIGMA[i][0], SIGMA_CHARS[i], 0 ); - GET_UINT32_BE( SIGMA[i][1], SIGMA_CHARS[i], 4 ); - } - - /* - * Key storage in KC - * Order: KL, KR, KA, KB - */ - memset( KC, 0, sizeof(KC) ); - - /* Store KL, KR */ - for( i = 0; i < 8; i++ ) - GET_UINT32_BE( KC[i], t, i * 4 ); - - /* Generate KA */ - for( i = 0; i < 4; ++i ) - KC[8 + i] = KC[i] ^ KC[4 + i]; - - camellia_feistel( KC + 8, SIGMA[0], KC + 10 ); - camellia_feistel( KC + 10, SIGMA[1], KC + 8 ); - - for( i = 0; i < 4; ++i ) - KC[8 + i] ^= KC[i]; - - camellia_feistel( KC + 8, SIGMA[2], KC + 10 ); - camellia_feistel( KC + 10, SIGMA[3], KC + 8 ); - - if( keysize > 128 ) { - /* Generate KB */ - for( i = 0; i < 4; ++i ) - KC[12 + i] = KC[4 + i] ^ KC[8 + i]; - - camellia_feistel( KC + 12, SIGMA[4], KC + 14 ); - camellia_feistel( KC + 14, SIGMA[5], KC + 12 ); - } - - /* - * Generating subkeys - */ - - /* Manipulating KL */ - SHIFT_AND_PLACE( idx, 0 ); - - /* Manipulating KR */ - if( keysize > 128 ) { - SHIFT_AND_PLACE( idx, 1 ); - } - - /* Manipulating KA */ - SHIFT_AND_PLACE( idx, 2 ); - - /* Manipulating KB */ - if( keysize > 128 ) { - SHIFT_AND_PLACE( idx, 3 ); - } - - /* Do transpositions */ - for( i = 0; i < 20; i++ ) { - if( transposes[idx][i] != -1 ) { - RK[32 + 12 * idx + i] = RK[transposes[idx][i]]; - } - } - - return( 0 ); -} - -/* - * Camellia key schedule (decryption) - */ -int camellia_setkey_dec( camellia_context *ctx, const unsigned char *key, - unsigned int keysize ) -{ - int idx, ret; - size_t i; - camellia_context cty; - uint32_t *RK; - uint32_t *SK; - - camellia_init( &cty ); - - /* Also checks keysize */ - if( ( ret = camellia_setkey_enc( &cty, key, keysize ) ) ) - goto exit; - - ctx->nr = cty.nr; - idx = ( ctx->nr == 4 ); - - RK = ctx->rk; - SK = cty.rk + 24 * 2 + 8 * idx * 2; - - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - - for( i = 22 + 8 * idx, SK -= 6; i > 0; i--, SK -= 4 ) - { - *RK++ = *SK++; - *RK++ = *SK++; - } - - SK -= 2; - - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - -exit: - camellia_free( &cty ); - - return( ret ); -} - -/* - * Camellia-ECB block encryption/decryption - */ -int camellia_crypt_ecb( camellia_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) -{ - int NR; - uint32_t *RK, X[4]; - - ( (void) mode ); - - NR = ctx->nr; - RK = ctx->rk; - - GET_UINT32_BE( X[0], input, 0 ); - GET_UINT32_BE( X[1], input, 4 ); - GET_UINT32_BE( X[2], input, 8 ); - GET_UINT32_BE( X[3], input, 12 ); - - X[0] ^= *RK++; - X[1] ^= *RK++; - X[2] ^= *RK++; - X[3] ^= *RK++; - - while( NR ) { - --NR; - camellia_feistel( X, RK, X + 2 ); - RK += 2; - camellia_feistel( X + 2, RK, X ); - RK += 2; - camellia_feistel( X, RK, X + 2 ); - RK += 2; - camellia_feistel( X + 2, RK, X ); - RK += 2; - camellia_feistel( X, RK, X + 2 ); - RK += 2; - camellia_feistel( X + 2, RK, X ); - RK += 2; - - if( NR ) { - FL(X[0], X[1], RK[0], RK[1]); - RK += 2; - FLInv(X[2], X[3], RK[0], RK[1]); - RK += 2; - } - } - - X[2] ^= *RK++; - X[3] ^= *RK++; - X[0] ^= *RK++; - X[1] ^= *RK++; - - PUT_UINT32_BE( X[2], output, 0 ); - PUT_UINT32_BE( X[3], output, 4 ); - PUT_UINT32_BE( X[0], output, 8 ); - PUT_UINT32_BE( X[1], output, 12 ); - - return( 0 ); -} - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/* - * Camellia-CBC buffer encryption/decryption - */ -int camellia_crypt_cbc( camellia_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) -{ - int i; - unsigned char temp[16]; - - if( length % 16 ) - return( POLARSSL_ERR_CAMELLIA_INVALID_INPUT_LENGTH ); - - if( mode == CAMELLIA_DECRYPT ) - { - while( length > 0 ) - { - memcpy( temp, input, 16 ); - camellia_crypt_ecb( ctx, mode, input, output ); - - for( i = 0; i < 16; i++ ) - output[i] = (unsigned char)( output[i] ^ iv[i] ); - - memcpy( iv, temp, 16 ); - - input += 16; - output += 16; - length -= 16; - } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 16; i++ ) - output[i] = (unsigned char)( input[i] ^ iv[i] ); - - camellia_crypt_ecb( ctx, mode, output, output ); - memcpy( iv, output, 16 ); - - input += 16; - output += 16; - length -= 16; - } - } - - return( 0 ); -} -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) -/* - * Camellia-CFB128 buffer encryption/decryption - */ -int camellia_crypt_cfb128( camellia_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) -{ - int c; - size_t n = *iv_off; - - if( mode == CAMELLIA_DECRYPT ) - { - while( length-- ) - { - if( n == 0 ) - camellia_crypt_ecb( ctx, CAMELLIA_ENCRYPT, iv, iv ); - - c = *input++; - *output++ = (unsigned char)( c ^ iv[n] ); - iv[n] = (unsigned char) c; - - n = ( n + 1 ) & 0x0F; - } - } - else - { - while( length-- ) - { - if( n == 0 ) - camellia_crypt_ecb( ctx, CAMELLIA_ENCRYPT, iv, iv ); - - iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); - - n = ( n + 1 ) & 0x0F; - } - } - - *iv_off = n; - - return( 0 ); -} -#endif /* POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) -/* - * Camellia-CTR buffer encryption/decryption - */ -int camellia_crypt_ctr( camellia_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[16], - unsigned char stream_block[16], - const unsigned char *input, - unsigned char *output ) -{ - int c, i; - size_t n = *nc_off; - - while( length-- ) - { - if( n == 0 ) { - camellia_crypt_ecb( ctx, CAMELLIA_ENCRYPT, nonce_counter, - stream_block ); - - for( i = 16; i > 0; i-- ) - if( ++nonce_counter[i - 1] != 0 ) - break; - } - c = *input++; - *output++ = (unsigned char)( c ^ stream_block[n] ); - - n = ( n + 1 ) & 0x0F; - } - - *nc_off = n; - - return( 0 ); -} -#endif /* POLARSSL_CIPHER_MODE_CTR */ -#endif /* !POLARSSL_CAMELLIA_ALT */ - -#if defined(POLARSSL_SELF_TEST) - -#include - -/* - * Camellia test vectors from: - * - * http://info.isl.ntt.co.jp/crypt/eng/camellia/technology.html: - * http://info.isl.ntt.co.jp/crypt/eng/camellia/dl/cryptrec/intermediate.txt - * http://info.isl.ntt.co.jp/crypt/eng/camellia/dl/cryptrec/t_camellia.txt - * (For each bitlength: Key 0, Nr 39) - */ -#define CAMELLIA_TESTS_ECB 2 - -static const unsigned char camellia_test_ecb_key[3][CAMELLIA_TESTS_ECB][32] = -{ - { - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } - }, - { - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } - }, - { - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } - }, -}; - -static const unsigned char camellia_test_ecb_plain[CAMELLIA_TESTS_ECB][16] = -{ - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }, - { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}; - -static const unsigned char camellia_test_ecb_cipher[3][CAMELLIA_TESTS_ECB][16] = -{ - { - { 0x67, 0x67, 0x31, 0x38, 0x54, 0x96, 0x69, 0x73, - 0x08, 0x57, 0x06, 0x56, 0x48, 0xea, 0xbe, 0x43 }, - { 0x38, 0x3C, 0x6C, 0x2A, 0xAB, 0xEF, 0x7F, 0xDE, - 0x25, 0xCD, 0x47, 0x0B, 0xF7, 0x74, 0xA3, 0x31 } - }, - { - { 0xb4, 0x99, 0x34, 0x01, 0xb3, 0xe9, 0x96, 0xf8, - 0x4e, 0xe5, 0xce, 0xe7, 0xd7, 0x9b, 0x09, 0xb9 }, - { 0xD1, 0x76, 0x3F, 0xC0, 0x19, 0xD7, 0x7C, 0xC9, - 0x30, 0xBF, 0xF2, 0xA5, 0x6F, 0x7C, 0x93, 0x64 } - }, - { - { 0x9a, 0xcc, 0x23, 0x7d, 0xff, 0x16, 0xd7, 0x6c, - 0x20, 0xef, 0x7c, 0x91, 0x9e, 0x3a, 0x75, 0x09 }, - { 0x05, 0x03, 0xFB, 0x10, 0xAB, 0x24, 0x1E, 0x7C, - 0xF4, 0x5D, 0x8C, 0xDE, 0xEE, 0x47, 0x43, 0x35 } - } -}; - -#if defined(POLARSSL_CIPHER_MODE_CBC) -#define CAMELLIA_TESTS_CBC 3 - -static const unsigned char camellia_test_cbc_key[3][32] = -{ - { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, - 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C } - , - { 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52, - 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5, - 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B } - , - { 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, - 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, - 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, - 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 } -}; - -static const unsigned char camellia_test_cbc_iv[16] = - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F } -; - -static const unsigned char camellia_test_cbc_plain[CAMELLIA_TESTS_CBC][16] = -{ - { 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, - 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A }, - { 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, - 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51 }, - { 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11, - 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF } - -}; - -static const unsigned char camellia_test_cbc_cipher[3][CAMELLIA_TESTS_CBC][16] = -{ - { - { 0x16, 0x07, 0xCF, 0x49, 0x4B, 0x36, 0xBB, 0xF0, - 0x0D, 0xAE, 0xB0, 0xB5, 0x03, 0xC8, 0x31, 0xAB }, - { 0xA2, 0xF2, 0xCF, 0x67, 0x16, 0x29, 0xEF, 0x78, - 0x40, 0xC5, 0xA5, 0xDF, 0xB5, 0x07, 0x48, 0x87 }, - { 0x0F, 0x06, 0x16, 0x50, 0x08, 0xCF, 0x8B, 0x8B, - 0x5A, 0x63, 0x58, 0x63, 0x62, 0x54, 0x3E, 0x54 } - }, - { - { 0x2A, 0x48, 0x30, 0xAB, 0x5A, 0xC4, 0xA1, 0xA2, - 0x40, 0x59, 0x55, 0xFD, 0x21, 0x95, 0xCF, 0x93 }, - { 0x5D, 0x5A, 0x86, 0x9B, 0xD1, 0x4C, 0xE5, 0x42, - 0x64, 0xF8, 0x92, 0xA6, 0xDD, 0x2E, 0xC3, 0xD5 }, - { 0x37, 0xD3, 0x59, 0xC3, 0x34, 0x98, 0x36, 0xD8, - 0x84, 0xE3, 0x10, 0xAD, 0xDF, 0x68, 0xC4, 0x49 } - }, - { - { 0xE6, 0xCF, 0xA3, 0x5F, 0xC0, 0x2B, 0x13, 0x4A, - 0x4D, 0x2C, 0x0B, 0x67, 0x37, 0xAC, 0x3E, 0xDA }, - { 0x36, 0xCB, 0xEB, 0x73, 0xBD, 0x50, 0x4B, 0x40, - 0x70, 0xB1, 0xB7, 0xDE, 0x2B, 0x21, 0xEB, 0x50 }, - { 0xE3, 0x1A, 0x60, 0x55, 0x29, 0x7D, 0x96, 0xCA, - 0x33, 0x30, 0xCD, 0xF1, 0xB1, 0x86, 0x0A, 0x83 } - } -}; -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) -/* - * Camellia-CTR test vectors from: - * - * http://www.faqs.org/rfcs/rfc5528.html - */ - -static const unsigned char camellia_test_ctr_key[3][16] = -{ - { 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC, - 0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E }, - { 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7, - 0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 }, - { 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8, - 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC } -}; - -static const unsigned char camellia_test_ctr_nonce_counter[3][16] = -{ - { 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59, - 0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F, - 0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 } -}; - -static const unsigned char camellia_test_ctr_pt[3][48] = -{ - { 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62, - 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x22, 0x23 } -}; - -static const unsigned char camellia_test_ctr_ct[3][48] = -{ - { 0xD0, 0x9D, 0xC2, 0x9A, 0x82, 0x14, 0x61, 0x9A, - 0x20, 0x87, 0x7C, 0x76, 0xDB, 0x1F, 0x0B, 0x3F }, - { 0xDB, 0xF3, 0xC7, 0x8D, 0xC0, 0x83, 0x96, 0xD4, - 0xDA, 0x7C, 0x90, 0x77, 0x65, 0xBB, 0xCB, 0x44, - 0x2B, 0x8E, 0x8E, 0x0F, 0x31, 0xF0, 0xDC, 0xA7, - 0x2C, 0x74, 0x17, 0xE3, 0x53, 0x60, 0xE0, 0x48 }, - { 0xB1, 0x9D, 0x1F, 0xCD, 0xCB, 0x75, 0xEB, 0x88, - 0x2F, 0x84, 0x9C, 0xE2, 0x4D, 0x85, 0xCF, 0x73, - 0x9C, 0xE6, 0x4B, 0x2B, 0x5C, 0x9D, 0x73, 0xF1, - 0x4F, 0x2D, 0x5D, 0x9D, 0xCE, 0x98, 0x89, 0xCD, - 0xDF, 0x50, 0x86, 0x96 } -}; - -static const int camellia_test_ctr_len[3] = - { 16, 32, 36 }; -#endif /* POLARSSL_CIPHER_MODE_CTR */ - -/* - * Checkup routine - */ -int camellia_self_test( int verbose ) -{ - int i, j, u, v; - unsigned char key[32]; - unsigned char buf[64]; - unsigned char src[16]; - unsigned char dst[16]; -#if defined(POLARSSL_CIPHER_MODE_CBC) - unsigned char iv[16]; -#endif -#if defined(POLARSSL_CIPHER_MODE_CTR) - size_t offset, len; - unsigned char nonce_counter[16]; - unsigned char stream_block[16]; -#endif - - camellia_context ctx; - - memset( key, 0, 32 ); - - for( j = 0; j < 6; j++ ) { - u = j >> 1; - v = j & 1; - - if( verbose != 0 ) - polarssl_printf( " CAMELLIA-ECB-%3d (%s): ", 128 + u * 64, - (v == CAMELLIA_DECRYPT) ? "dec" : "enc"); - - for( i = 0; i < CAMELLIA_TESTS_ECB; i++ ) { - memcpy( key, camellia_test_ecb_key[u][i], 16 + 8 * u ); - - if( v == CAMELLIA_DECRYPT ) { - camellia_setkey_dec( &ctx, key, 128 + u * 64 ); - memcpy( src, camellia_test_ecb_cipher[u][i], 16 ); - memcpy( dst, camellia_test_ecb_plain[i], 16 ); - } else { /* CAMELLIA_ENCRYPT */ - camellia_setkey_enc( &ctx, key, 128 + u * 64 ); - memcpy( src, camellia_test_ecb_plain[i], 16 ); - memcpy( dst, camellia_test_ecb_cipher[u][i], 16 ); - } - - camellia_crypt_ecb( &ctx, v, src, buf ); - - if( memcmp( buf, dst, 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -#if defined(POLARSSL_CIPHER_MODE_CBC) - /* - * CBC mode - */ - for( j = 0; j < 6; j++ ) - { - u = j >> 1; - v = j & 1; - - if( verbose != 0 ) - polarssl_printf( " CAMELLIA-CBC-%3d (%s): ", 128 + u * 64, - ( v == CAMELLIA_DECRYPT ) ? "dec" : "enc" ); - - memcpy( src, camellia_test_cbc_iv, 16 ); - memcpy( dst, camellia_test_cbc_iv, 16 ); - memcpy( key, camellia_test_cbc_key[u], 16 + 8 * u ); - - if( v == CAMELLIA_DECRYPT ) { - camellia_setkey_dec( &ctx, key, 128 + u * 64 ); - } else { - camellia_setkey_enc( &ctx, key, 128 + u * 64 ); - } - - for( i = 0; i < CAMELLIA_TESTS_CBC; i++ ) { - - if( v == CAMELLIA_DECRYPT ) { - memcpy( iv , src, 16 ); - memcpy( src, camellia_test_cbc_cipher[u][i], 16 ); - memcpy( dst, camellia_test_cbc_plain[i], 16 ); - } else { /* CAMELLIA_ENCRYPT */ - memcpy( iv , dst, 16 ); - memcpy( src, camellia_test_cbc_plain[i], 16 ); - memcpy( dst, camellia_test_cbc_cipher[u][i], 16 ); - } - - camellia_crypt_cbc( &ctx, v, 16, iv, src, buf ); - - if( memcmp( buf, dst, 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } -#endif /* POLARSSL_CIPHER_MODE_CBC */ - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -#if defined(POLARSSL_CIPHER_MODE_CTR) - /* - * CTR mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " CAMELLIA-CTR-128 (%s): ", - ( v == CAMELLIA_DECRYPT ) ? "dec" : "enc" ); - - memcpy( nonce_counter, camellia_test_ctr_nonce_counter[u], 16 ); - memcpy( key, camellia_test_ctr_key[u], 16 ); - - offset = 0; - camellia_setkey_enc( &ctx, key, 128 ); - - if( v == CAMELLIA_DECRYPT ) - { - len = camellia_test_ctr_len[u]; - memcpy( buf, camellia_test_ctr_ct[u], len ); - - camellia_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); - - if( memcmp( buf, camellia_test_ctr_pt[u], len ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - } - else - { - len = camellia_test_ctr_len[u]; - memcpy( buf, camellia_test_ctr_pt[u], len ); - - camellia_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); - - if( memcmp( buf, camellia_test_ctr_ct[u], len ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); -#endif /* POLARSSL_CIPHER_MODE_CTR */ - - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_CAMELLIA_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ccm.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ccm.c deleted file mode 100644 index 72d766b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ccm.c +++ /dev/null @@ -1,456 +0,0 @@ -/* - * NIST SP800-38C compliant CCM implementation - * - * Copyright (C) 2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * Definition of CCM: - * http://csrc.nist.gov/publications/nistpubs/800-38C/SP800-38C_updated-July20_2007.pdf - * RFC 3610 "Counter with CBC-MAC (CCM)" - * - * Related: - * RFC 5116 "An Interface and Algorithms for Authenticated Encryption" - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_CCM_C) - -#include "polarssl/ccm.h" - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#define CCM_ENCRYPT 0 -#define CCM_DECRYPT 1 - -/* - * Initialize context - */ -int ccm_init( ccm_context *ctx, cipher_id_t cipher, - const unsigned char *key, unsigned int keysize ) -{ - int ret; - const cipher_info_t *cipher_info; - - memset( ctx, 0, sizeof( ccm_context ) ); - - cipher_init( &ctx->cipher_ctx ); - - cipher_info = cipher_info_from_values( cipher, keysize, POLARSSL_MODE_ECB ); - if( cipher_info == NULL ) - return( POLARSSL_ERR_CCM_BAD_INPUT ); - - if( cipher_info->block_size != 16 ) - return( POLARSSL_ERR_CCM_BAD_INPUT ); - - if( ( ret = cipher_init_ctx( &ctx->cipher_ctx, cipher_info ) ) != 0 ) - return( ret ); - - if( ( ret = cipher_setkey( &ctx->cipher_ctx, key, keysize, - POLARSSL_ENCRYPT ) ) != 0 ) - { - return( ret ); - } - - return( 0 ); -} - -/* - * Free context - */ -void ccm_free( ccm_context *ctx ) -{ - cipher_free( &ctx->cipher_ctx ); - polarssl_zeroize( ctx, sizeof( ccm_context ) ); -} - -/* - * Macros for common operations. - * Results in smaller compiled code than static inline functions. - */ - -/* - * Update the CBC-MAC state in y using a block in b - * (Always using b as the source helps the compiler optimise a bit better.) - */ -#define UPDATE_CBC_MAC \ - for( i = 0; i < 16; i++ ) \ - y[i] ^= b[i]; \ - \ - if( ( ret = cipher_update( &ctx->cipher_ctx, y, 16, y, &olen ) ) != 0 ) \ - return( ret ); - -/* - * Encrypt or decrypt a partial block with CTR - * Warning: using b for temporary storage! src and dst must not be b! - * This avoids allocating one more 16 bytes buffer while allowing src == dst. - */ -#define CTR_CRYPT( dst, src, len ) \ - if( ( ret = cipher_update( &ctx->cipher_ctx, ctr, 16, b, &olen ) ) != 0 ) \ - return( ret ); \ - \ - for( i = 0; i < len; i++ ) \ - dst[i] = src[i] ^ b[i]; - -/* - * Authenticated encryption or decryption - */ -static int ccm_auth_crypt( ccm_context *ctx, int mode, size_t length, - const unsigned char *iv, size_t iv_len, - const unsigned char *add, size_t add_len, - const unsigned char *input, unsigned char *output, - unsigned char *tag, size_t tag_len ) -{ - int ret; - unsigned char i; - unsigned char q = 16 - 1 - iv_len; - size_t len_left, olen; - unsigned char b[16]; - unsigned char y[16]; - unsigned char ctr[16]; - const unsigned char *src; - unsigned char *dst; - - /* - * Check length requirements: SP800-38C A.1 - * Additional requirement: a < 2^16 - 2^8 to simplify the code. - * 'length' checked later (when writing it to the first block) - */ - if( tag_len < 4 || tag_len > 16 || tag_len % 2 != 0 ) - return( POLARSSL_ERR_CCM_BAD_INPUT ); - - /* Also implies q is within bounds */ - if( iv_len < 7 || iv_len > 13 ) - return( POLARSSL_ERR_CCM_BAD_INPUT ); - - if( add_len > 0xFF00 ) - return( POLARSSL_ERR_CCM_BAD_INPUT ); - - /* - * First block B_0: - * 0 .. 0 flags - * 1 .. iv_len nonce (aka iv) - * iv_len+1 .. 15 length - * - * With flags as (bits): - * 7 0 - * 6 add present? - * 5 .. 3 (t - 2) / 2 - * 2 .. 0 q - 1 - */ - b[0] = 0; - b[0] |= ( add_len > 0 ) << 6; - b[0] |= ( ( tag_len - 2 ) / 2 ) << 3; - b[0] |= q - 1; - - memcpy( b + 1, iv, iv_len ); - - for( i = 0, len_left = length; i < q; i++, len_left >>= 8 ) - b[15-i] = (unsigned char)( len_left & 0xFF ); - - if( len_left > 0 ) - return( POLARSSL_ERR_CCM_BAD_INPUT ); - - - /* Start CBC-MAC with first block */ - memset( y, 0, 16 ); - UPDATE_CBC_MAC; - - /* - * If there is additional data, update CBC-MAC with - * add_len, add, 0 (padding to a block boundary) - */ - if( add_len > 0 ) - { - size_t use_len; - len_left = add_len; - src = add; - - memset( b, 0, 16 ); - b[0] = (unsigned char)( ( add_len >> 8 ) & 0xFF ); - b[1] = (unsigned char)( ( add_len ) & 0xFF ); - - use_len = len_left < 16 - 2 ? len_left : 16 - 2; - memcpy( b + 2, src, use_len ); - len_left -= use_len; - src += use_len; - - UPDATE_CBC_MAC; - - while( len_left > 0 ) - { - use_len = len_left > 16 ? 16 : len_left; - - memset( b, 0, 16 ); - memcpy( b, src, use_len ); - UPDATE_CBC_MAC; - - len_left -= use_len; - src += use_len; - } - } - - /* - * Prepare counter block for encryption: - * 0 .. 0 flags - * 1 .. iv_len nonce (aka iv) - * iv_len+1 .. 15 counter (initially 1) - * - * With flags as (bits): - * 7 .. 3 0 - * 2 .. 0 q - 1 - */ - ctr[0] = q - 1; - memcpy( ctr + 1, iv, iv_len ); - memset( ctr + 1 + iv_len, 0, q ); - ctr[15] = 1; - - /* - * Authenticate and {en,de}crypt the message. - * - * The only difference between encryption and decryption is - * the respective order of authentication and {en,de}cryption. - */ - len_left = length; - src = input; - dst = output; - - while( len_left > 0 ) - { - unsigned char use_len = len_left > 16 ? 16 : len_left; - - if( mode == CCM_ENCRYPT ) - { - memset( b, 0, 16 ); - memcpy( b, src, use_len ); - UPDATE_CBC_MAC; - } - - CTR_CRYPT( dst, src, use_len ); - - if( mode == CCM_DECRYPT ) - { - memset( b, 0, 16 ); - memcpy( b, dst, use_len ); - UPDATE_CBC_MAC; - } - - dst += use_len; - src += use_len; - len_left -= use_len; - - /* - * Increment counter. - * No need to check for overflow thanks to the length check above. - */ - for( i = 0; i < q; i++ ) - if( ++ctr[15-i] != 0 ) - break; - } - - /* - * Authentication: reset counter and crypt/mask internal tag - */ - for( i = 0; i < q; i++ ) - ctr[15-i] = 0; - - CTR_CRYPT( y, y, 16 ); - memcpy( tag, y, tag_len ); - - return( 0 ); -} - -/* - * Authenticated encryption - */ -int ccm_encrypt_and_tag( ccm_context *ctx, size_t length, - const unsigned char *iv, size_t iv_len, - const unsigned char *add, size_t add_len, - const unsigned char *input, unsigned char *output, - unsigned char *tag, size_t tag_len ) -{ - return( ccm_auth_crypt( ctx, CCM_ENCRYPT, length, iv, iv_len, - add, add_len, input, output, tag, tag_len ) ); -} - -/* - * Authenticated decryption - */ -int ccm_auth_decrypt( ccm_context *ctx, size_t length, - const unsigned char *iv, size_t iv_len, - const unsigned char *add, size_t add_len, - const unsigned char *input, unsigned char *output, - const unsigned char *tag, size_t tag_len ) -{ - int ret; - unsigned char check_tag[16]; - unsigned char i; - int diff; - - if( ( ret = ccm_auth_crypt( ctx, CCM_DECRYPT, length, - iv, iv_len, add, add_len, - input, output, check_tag, tag_len ) ) != 0 ) - { - return( ret ); - } - - /* Check tag in "constant-time" */ - for( diff = 0, i = 0; i < tag_len; i++ ) - diff |= tag[i] ^ check_tag[i]; - - if( diff != 0 ) - { - polarssl_zeroize( output, length ); - return( POLARSSL_ERR_CCM_AUTH_FAILED ); - } - - return( 0 ); -} - - -#if defined(POLARSSL_SELF_TEST) && defined(POLARSSL_AES_C) - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#include -#define polarssl_printf printf -#endif - -/* - * Examples 1 to 3 from SP800-38C Appendix C - */ - -#define NB_TESTS 3 - -/* - * The data is the same for all tests, only the used length changes - */ -static const unsigned char key[] = { - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f -}; - -static const unsigned char iv[] = { - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b -}; - -static const unsigned char ad[] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13 -}; - -static const unsigned char msg[] = { - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, -}; - -static const size_t iv_len [NB_TESTS] = { 7, 8, 12 }; -static const size_t add_len[NB_TESTS] = { 8, 16, 20 }; -static const size_t msg_len[NB_TESTS] = { 4, 16, 24 }; -static const size_t tag_len[NB_TESTS] = { 4, 6, 8 }; - -static const unsigned char res[NB_TESTS][32] = { - { 0x71, 0x62, 0x01, 0x5b, 0x4d, 0xac, 0x25, 0x5d }, - { 0xd2, 0xa1, 0xf0, 0xe0, 0x51, 0xea, 0x5f, 0x62, - 0x08, 0x1a, 0x77, 0x92, 0x07, 0x3d, 0x59, 0x3d, - 0x1f, 0xc6, 0x4f, 0xbf, 0xac, 0xcd }, - { 0xe3, 0xb2, 0x01, 0xa9, 0xf5, 0xb7, 0x1a, 0x7a, - 0x9b, 0x1c, 0xea, 0xec, 0xcd, 0x97, 0xe7, 0x0b, - 0x61, 0x76, 0xaa, 0xd9, 0xa4, 0x42, 0x8a, 0xa5, - 0x48, 0x43, 0x92, 0xfb, 0xc1, 0xb0, 0x99, 0x51 } -}; - -int ccm_self_test( int verbose ) -{ - ccm_context ctx; - unsigned char out[32]; - size_t i; - int ret; - - if( ccm_init( &ctx, POLARSSL_CIPHER_ID_AES, key, 8 * sizeof key ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( " CCM: setup failed" ); - - return( 1 ); - } - - for( i = 0; i < NB_TESTS; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " CCM-AES #%u: ", (unsigned int) i + 1 ); - - ret = ccm_encrypt_and_tag( &ctx, msg_len[i], - iv, iv_len[i], ad, add_len[i], - msg, out, - out + msg_len[i], tag_len[i] ); - - if( ret != 0 || - memcmp( out, res[i], msg_len[i] + tag_len[i] ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - ret = ccm_auth_decrypt( &ctx, msg_len[i], - iv, iv_len[i], ad, add_len[i], - res[i], out, - res[i] + msg_len[i], tag_len[i] ); - - if( ret != 0 || - memcmp( out, msg, msg_len[i] ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - ccm_free( &ctx ); - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST && POLARSSL_AES_C */ - -#endif /* POLARSSL_CCM_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/certs.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/certs.c deleted file mode 100644 index a782bc1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/certs.c +++ /dev/null @@ -1,310 +0,0 @@ -/* - * X.509 test certificates - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_CERTS_C) - -#if defined(POLARSSL_ECDSA_C) -#define TEST_CA_CRT_EC \ -"-----BEGIN CERTIFICATE-----\r\n" \ -"MIICUjCCAdegAwIBAgIJAMFD4n5iQ8zoMAoGCCqGSM49BAMCMD4xCzAJBgNVBAYT\r\n" \ -"Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF\r\n" \ -"QyBDQTAeFw0xMzA5MjQxNTQ5NDhaFw0yMzA5MjIxNTQ5NDhaMD4xCzAJBgNVBAYT\r\n" \ -"Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF\r\n" \ -"QyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBu\r\n" \ -"ww5XUzM5WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiy\r\n" \ -"aY7zQa0pw7RfdadHb9UZKVVpmlM7ILRmFmAzHqOBoDCBnTAdBgNVHQ4EFgQUnW0g\r\n" \ -"JEkBPyvLeLUZvH4kydv7NnwwbgYDVR0jBGcwZYAUnW0gJEkBPyvLeLUZvH4kydv7\r\n" \ -"NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UE\r\n" \ -"AxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAwGA1UdEwQFMAMBAf8w\r\n" \ -"CgYIKoZIzj0EAwIDaQAwZgIxAMO0YnNWKJUAfXgSJtJxexn4ipg+kv4znuR50v56\r\n" \ -"t4d0PCu412mUC6Nnd7izvtE2MgIxAP1nnJQjZ8BWukszFQDG48wxCCyci9qpdSMv\r\n" \ -"uCjn8pwUOkABXK8Mss90fzCfCEOtIA==\r\n" \ -"-----END CERTIFICATE-----\r\n" -const char test_ca_crt_ec[] = TEST_CA_CRT_EC; - -const char test_ca_key_ec[] = -"-----BEGIN EC PRIVATE KEY-----\r\n" -"Proc-Type: 4,ENCRYPTED\r\n" -"DEK-Info: DES-EDE3-CBC,307EAB469933D64E\r\n" -"\r\n" -"IxbrRmKcAzctJqPdTQLA4SWyBYYGYJVkYEna+F7Pa5t5Yg/gKADrFKcm6B72e7DG\r\n" -"ihExtZI648s0zdYw6qSJ74vrPSuWDe5qm93BqsfVH9svtCzWHW0pm1p0KTBCFfUq\r\n" -"UsuWTITwJImcnlAs1gaRZ3sAWm7cOUidL0fo2G0fYUFNcYoCSLffCFTEHBuPnagb\r\n" -"a77x/sY1Bvii8S9/XhDTb6pTMx06wzrm\r\n" -"-----END EC PRIVATE KEY-----\r\n"; - -const char test_ca_pwd_ec[] = "PolarSSLTest"; - -const char test_srv_crt_ec[] = -"-----BEGIN CERTIFICATE-----\r\n" -"MIICHzCCAaWgAwIBAgIBCTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN\r\n" -"MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjA0MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG\r\n" -"CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA\r\n" -"2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jgZ0wgZowCQYDVR0TBAIwADAd\r\n" -"BgNVHQ4EFgQUUGGlj9QH2deCAQzlZX+MY0anE74wbgYDVR0jBGcwZYAUnW0gJEkB\r\n" -"PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh\r\n" -"clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG\r\n" -"CCqGSM49BAMCA2gAMGUCMQCaLFzXptui5WQN8LlO3ddh1hMxx6tzgLvT03MTVK2S\r\n" -"C12r0Lz3ri/moSEpNZWqPjkCMCE2f53GXcYLqyfyJR078c/xNSUU5+Xxl7VZ414V\r\n" -"fGa5kHvHARBPc8YAIVIqDvHH1Q==\r\n" -"-----END CERTIFICATE-----\r\n"; - -const char test_srv_key_ec[] = -"-----BEGIN EC PRIVATE KEY-----\r\n" -"MHcCAQEEIPEqEyB2AnCoPL/9U/YDHvdqXYbIogTywwyp6/UfDw6noAoGCCqGSM49\r\n" -"AwEHoUQDQgAEN8xW2XYJHlpyPsdZLf8gbu58+QaRdNCtFLX3aCJZYpJO5QDYIxH/\r\n" -"6i/SNF1dFr2KiMJrdw1VzYoqDvoByLTt/w==\r\n" -"-----END EC PRIVATE KEY-----\r\n"; - -const char test_cli_crt_ec[] = -"-----BEGIN CERTIFICATE-----\r\n" -"MIICLDCCAbKgAwIBAgIBDTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN\r\n" -"MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjBBMQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxHzAdBgNVBAMTFlBvbGFyU1NMIFRlc3QgQ2xpZW50IDIw\r\n" -"WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARX5a6xc9/TrLuTuIH/Eq7u5lOszlVT\r\n" -"9jQOzC7jYyUL35ji81xgNpbA1RgUcOV/n9VLRRjlsGzVXPiWj4dwo+THo4GdMIGa\r\n" -"MAkGA1UdEwQCMAAwHQYDVR0OBBYEFHoAX4Zk/OBd5REQO7LmO8QmP8/iMG4GA1Ud\r\n" -"IwRnMGWAFJ1tICRJAT8ry3i1Gbx+JMnb+zZ8oUKkQDA+MQswCQYDVQQGEwJOTDER\r\n" -"MA8GA1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0GC\r\n" -"CQDBQ+J+YkPM6DAKBggqhkjOPQQDAgNoADBlAjBKZQ17IIOimbmoD/yN7o89u3BM\r\n" -"lgOsjnhw3fIOoLIWy2WOGsk/LGF++DzvrRzuNiACMQCd8iem1XS4JK7haj8xocpU\r\n" -"LwjQje5PDGHfd3h9tP38Qknu5bJqws0md2KOKHyeV0U=\r\n" -"-----END CERTIFICATE-----\r\n"; - -const char test_cli_key_ec[] = -"-----BEGIN EC PRIVATE KEY-----\r\n" -"MHcCAQEEIPb3hmTxZ3/mZI3vyk7p3U3wBf+WIop6hDhkFzJhmLcqoAoGCCqGSM49\r\n" -"AwEHoUQDQgAEV+WusXPf06y7k7iB/xKu7uZTrM5VU/Y0Dswu42MlC9+Y4vNcYDaW\r\n" -"wNUYFHDlf5/VS0UY5bBs1Vz4lo+HcKPkxw==\r\n" -"-----END EC PRIVATE KEY-----\r\n"; -#else -#define TEST_CA_CRT_EC -#endif /* POLARSSL_ECDSA_C */ - -#if defined(POLARSSL_RSA_C) -#define TEST_CA_CRT_RSA \ -"-----BEGIN CERTIFICATE-----\r\n" \ -"MIIDhzCCAm+gAwIBAgIBADANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER\r\n" \ -"MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" \ -"MTEwMjEyMTQ0NDAwWhcNMjEwMjEyMTQ0NDAwWjA7MQswCQYDVQQGEwJOTDERMA8G\r\n" \ -"A1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwggEiMA0G\r\n" \ -"CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA3zf8F7vglp0/ht6WMn1EpRagzSHx\r\n" \ -"mdTs6st8GFgIlKXsm8WL3xoemTiZhx57wI053zhdcHgH057Zk+i5clHFzqMwUqny\r\n" \ -"50BwFMtEonILwuVA+T7lpg6z+exKY8C4KQB0nFc7qKUEkHHxvYPZP9al4jwqj+8n\r\n" \ -"YMPGn8u67GB9t+aEMr5P+1gmIgNb1LTV+/Xjli5wwOQuvfwu7uJBVcA0Ln0kcmnL\r\n" \ -"R7EUQIN9Z/SG9jGr8XmksrUuEvmEF/Bibyc+E1ixVA0hmnM3oTDPb5Lc9un8rNsu\r\n" \ -"KNF+AksjoBXyOGVkCeoMbo4bF6BxyLObyavpw/LPh5aPgAIynplYb6LVAgMBAAGj\r\n" \ -"gZUwgZIwDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUtFrkpbPe0lL2udWmlQ/rPrzH\r\n" \ -"/f8wYwYDVR0jBFwwWoAUtFrkpbPe0lL2udWmlQ/rPrzH/f+hP6Q9MDsxCzAJBgNV\r\n" \ -"BAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEZMBcGA1UEAxMQUG9sYXJTU0wgVGVz\r\n" \ -"dCBDQYIBADANBgkqhkiG9w0BAQUFAAOCAQEAuP1U2ABUkIslsCfdlc2i94QHHYeJ\r\n" \ -"SsR4EdgHtdciUI5I62J6Mom+Y0dT/7a+8S6MVMCZP6C5NyNyXw1GWY/YR82XTJ8H\r\n" \ -"DBJiCTok5DbZ6SzaONBzdWHXwWwmi5vg1dxn7YxrM9d0IjxM27WNKs4sDQhZBQkF\r\n" \ -"pjmfs2cb4oPl4Y9T9meTx/lvdkRYEug61Jfn6cA+qHpyPYdTH+UshITnmp5/Ztkf\r\n" \ -"m/UTSLBNFNHesiTZeH31NcxYGdHSme9Nc/gfidRa0FLOCfWxRlFqAI47zG9jAQCZ\r\n" \ -"7Z2mCGDNMhjQc+BYcdnl0lPXjdDK6V0qCg1dVewhUBcW5gZKzV7e9+DpVA==\r\n" \ -"-----END CERTIFICATE-----\r\n" -const char test_ca_crt_rsa[] = TEST_CA_CRT_RSA; - -const char test_ca_key_rsa[] = -"-----BEGIN RSA PRIVATE KEY-----\r\n" -"Proc-Type: 4,ENCRYPTED\r\n" -"DEK-Info: DES-EDE3-CBC,A8A95B05D5B7206B\r\n" -"\r\n" -"9Qd9GeArejl1GDVh2lLV1bHt0cPtfbh5h/5zVpAVaFpqtSPMrElp50Rntn9et+JA\r\n" -"7VOyboR+Iy2t/HU4WvA687k3Bppe9GwKHjHhtl//8xFKwZr3Xb5yO5JUP8AUctQq\r\n" -"Nb8CLlZyuUC+52REAAthdWgsX+7dJO4yabzUcQ22Tp9JSD0hiL43BlkWYUNK3dAo\r\n" -"PZlmiptjnzVTjg1MxsBSydZinWOLBV8/JQgxSPo2yD4uEfig28qbvQ2wNIn0pnAb\r\n" -"GxnSAOazkongEGfvcjIIs+LZN9gXFhxcOh6kc4Q/c99B7QWETwLLkYgZ+z1a9VY9\r\n" -"gEU7CwCxYCD+h9hY6FPmsK0/lC4O7aeRKpYq00rPPxs6i7phiexg6ax6yTMmArQq\r\n" -"QmK3TAsJm8V/J5AWpLEV6jAFgRGymGGHnof0DXzVWZidrcZJWTNuGEX90nB3ee2w\r\n" -"PXJEFWKoD3K3aFcSLdHYr3mLGxP7H9ThQai9VsycxZKS5kwvBKQ//YMrmFfwPk8x\r\n" -"vTeY4KZMaUrveEel5tWZC94RSMKgxR6cyE1nBXyTQnDOGbfpNNgBKxyKbINWoOJU\r\n" -"WJZAwlsQn+QzCDwpri7+sV1mS3gBE6UY7aQmnmiiaC2V3Hbphxct/en5QsfDOt1X\r\n" -"JczSfpRWLlbPznZg8OQh/VgCMA58N5DjOzTIK7sJJ5r+94ZBTCpgAMbF588f0NTR\r\n" -"KCe4yrxGJR7X02M4nvD4IwOlpsQ8xQxZtOSgXv4LkxvdU9XJJKWZ/XNKJeWztxSe\r\n" -"Z1vdTc2YfsDBA2SEv33vxHx2g1vqtw8SjDRT2RaQSS0QuSaMJimdOX6mTOCBKk1J\r\n" -"9Q5mXTrER+/LnK0jEmXsBXWA5bqqVZIyahXSx4VYZ7l7w/PHiUDtDgyRhMMKi4n2\r\n" -"iQvQcWSQTjrpnlJbca1/DkpRt3YwrvJwdqb8asZU2VrNETh5x0QVefDRLFiVpif/\r\n" -"tUaeAe/P1F8OkS7OIZDs1SUbv/sD2vMbhNkUoCms3/PvNtdnvgL4F0zhaDpKCmlT\r\n" -"P8vx49E7v5CyRNmED9zZg4o3wmMqrQO93PtTug3Eu9oVx1zPQM1NVMyBa2+f29DL\r\n" -"1nuTCeXdo9+ni45xx+jAI4DCwrRdhJ9uzZyC6962H37H6D+5naNvClFR1s6li1Gb\r\n" -"nqPoiy/OBsEx9CaDGcqQBp5Wme/3XW+6z1ISOx+igwNTVCT14mHdBMbya0eIKft5\r\n" -"X+GnwtgEMyCYyyWuUct8g4RzErcY9+yW9Om5Hzpx4zOuW4NPZgPDTgK+t2RSL/Yq\r\n" -"rE1njrgeGYcVeG3f+OftH4s6fPbq7t1A5ZgUscbLMBqr9tK+OqygR4EgKBPsH6Cz\r\n" -"L6zlv/2RV0qAHvVuDJcIDIgwY5rJtINEm32rhOeFNJwZS5MNIC1czXZx5//ugX7l\r\n" -"I4sy5nbVhwSjtAk8Xg5dZbdTZ6mIrb7xqH+fdakZor1khG7bC2uIwibD3cSl2XkR\r\n" -"wN48lslbHnqqagr6Xm1nNOSVl8C/6kbJEsMpLhAezfRtGwvOucoaE+WbeUNolGde\r\n" -"P/eQiddSf0brnpiLJRh7qZrl9XuqYdpUqnoEdMAfotDOID8OtV7gt8a48ad8VPW2\r\n" -"-----END RSA PRIVATE KEY-----\r\n"; - -const char test_ca_pwd_rsa[] = "PolarSSLTest"; - -const char test_srv_crt_rsa[] = -"-----BEGIN CERTIFICATE-----\r\n" -"MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER\r\n" -"MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" -"MTEwMjEyMTQ0NDA2WhcNMjEwMjEyMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN\r\n" -"AQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTN\r\n" -"owCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKz\r\n" -"NtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kM\r\n" -"tQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8P\r\n" -"hYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjya\r\n" -"HT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYD\r\n" -"VR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgw\r\n" -"FoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQEFBQADggEBAJxnXClY\r\n" -"oHkbp70cqBrsGXLybA74czbO5RdLEgFs7rHVS9r+c293luS/KdliLScZqAzYVylw\r\n" -"UfRWvKMoWhHYKp3dEIS4xTXk6/5zXxhv9Rw8SGc8qn6vITHk1S1mPevtekgasY5Y\r\n" -"iWQuM3h4YVlRH3HHEMAD1TnAexfXHHDFQGe+Bd1iAbz1/sH9H8l4StwX6egvTK3M\r\n" -"wXRwkKkvjKaEDA9ATbZx0mI8LGsxSuCqe9r9dyjmttd47J1p1Rulz3CLzaRcVIuS\r\n" -"RRQfaD8neM9c1S/iJ/amTVqJxA1KOdOS5780WhPfSArA+g4qAmSjelc3p4wWpha8\r\n" -"zhuYwjVuX6JHG0c=\r\n" -"-----END CERTIFICATE-----\r\n"; - -const char test_srv_key_rsa[] = -"-----BEGIN RSA PRIVATE KEY-----\r\n" -"MIIEpAIBAAKCAQEAwU2j3efNHdEE10lyuJmsDnjkOjxKzzoTFtBa5M2jAIin7h5r\r\n" -"lqdStJDvLXJ6PiSa/LY0rCT1d+AmZIycsCh9odrqjObJHJa8/sEEUrM21KP64bF2\r\n" -"2JDBYbRmUjaiJlOqq3ReB30Zgtsq2B+g2Q0cLUlm91slc0boC4pPaQy1AJDh2oIQ\r\n" -"Zn2uVCuLZXmRoeJhw81ASQjuaAzxi4bSRr/QuKoRAx5/VqgaHkQYDw+Fi9qLRF7i\r\n" -"GMZiL8dmjfpd2H3zJ4kpAcWQDj8n8TDISg7v1t7HxydrxwU9esQCPJodPg/oNJhb\r\n" -"y3NLUpbYEaIsgIhpOVrTD7DeWS8Rx/fqEgEwlwIDAQABAoIBAQCXR0S8EIHFGORZ\r\n" -"++AtOg6eENxD+xVs0f1IeGz57Tjo3QnXX7VBZNdj+p1ECvhCE/G7XnkgU5hLZX+G\r\n" -"Z0jkz/tqJOI0vRSdLBbipHnWouyBQ4e/A1yIJdlBtqXxJ1KE/ituHRbNc4j4kL8Z\r\n" -"/r6pvwnTI0PSx2Eqs048YdS92LT6qAv4flbNDxMn2uY7s4ycS4Q8w1JXnCeaAnYm\r\n" -"WYI5wxO+bvRELR2Mcz5DmVnL8jRyml6l6582bSv5oufReFIbyPZbQWlXgYnpu6He\r\n" -"GTc7E1zKYQGG/9+DQUl/1vQuCPqQwny0tQoX2w5tdYpdMdVm+zkLtbajzdTviJJa\r\n" -"TWzL6lt5AoGBAN86+SVeJDcmQJcv4Eq6UhtRr4QGMiQMz0Sod6ettYxYzMgxtw28\r\n" -"CIrgpozCc+UaZJLo7UxvC6an85r1b2nKPCLQFaggJ0H4Q0J/sZOhBIXaoBzWxveK\r\n" -"nupceKdVxGsFi8CDy86DBfiyFivfBj+47BbaQzPBj7C4rK7UlLjab2rDAoGBAN2u\r\n" -"AM2gchoFiu4v1HFL8D7lweEpi6ZnMJjnEu/dEgGQJFjwdpLnPbsj4c75odQ4Gz8g\r\n" -"sw9lao9VVzbusoRE/JGI4aTdO0pATXyG7eG1Qu+5Yc1YGXcCrliA2xM9xx+d7f+s\r\n" -"mPzN+WIEg5GJDYZDjAzHG5BNvi/FfM1C9dOtjv2dAoGAF0t5KmwbjWHBhcVqO4Ic\r\n" -"BVvN3BIlc1ue2YRXEDlxY5b0r8N4XceMgKmW18OHApZxfl8uPDauWZLXOgl4uepv\r\n" -"whZC3EuWrSyyICNhLY21Ah7hbIEBPF3L3ZsOwC+UErL+dXWLdB56Jgy3gZaBeW7b\r\n" -"vDrEnocJbqCm7IukhXHOBK8CgYEAwqdHB0hqyNSzIOGY7v9abzB6pUdA3BZiQvEs\r\n" -"3LjHVd4HPJ2x0N8CgrBIWOE0q8+0hSMmeE96WW/7jD3fPWwCR5zlXknxBQsfv0gP\r\n" -"3BC5PR0Qdypz+d+9zfMf625kyit4T/hzwhDveZUzHnk1Cf+IG7Q+TOEnLnWAWBED\r\n" -"ISOWmrUCgYAFEmRxgwAc/u+D6t0syCwAYh6POtscq9Y0i9GyWk89NzgC4NdwwbBH\r\n" -"4AgahOxIxXx2gxJnq3yfkJfIjwf0s2DyP0kY2y6Ua1OeomPeY9mrIS4tCuDQ6LrE\r\n" -"TB6l9VGoxJL4fyHnZb8L5gGvnB1bbD8cL6YPaDiOhcRseC9vBiEuVg==\r\n" -"-----END RSA PRIVATE KEY-----\r\n"; - - -const char test_cli_crt_rsa[] = -"-----BEGIN CERTIFICATE-----\r\n" -"MIIDPzCCAiegAwIBAgIBBDANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER\r\n" -"MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" -"MTEwMjEyMTQ0NDA3WhcNMjEwMjEyMTQ0NDA3WjA8MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxGjAYBgNVBAMTEVBvbGFyU1NMIENsaWVudCAyMIIBIjAN\r\n" -"BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6f\r\n" -"M60Nj4o8VmXl3ETZzGaFB9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu\r\n" -"1C93KYRhTYJQj6eVSHD1bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEw\r\n" -"MjDV0/YI0FZPRo7yX/k9Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v\r\n" -"4Jv4EFbMs44TFeY0BGbH7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx/\r\n" -"/DZrtenNLQNiTrM9AM+vdqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQAB\r\n" -"o00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBRxoQBzckAvVHZeM/xSj7zx3WtGITAf\r\n" -"BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQUFAAOC\r\n" -"AQEAAn86isAM8X+mVwJqeItt6E9slhEQbAofyk+diH1Lh8Y9iLlWQSKbw/UXYjx5\r\n" -"LLPZcniovxIcARC/BjyZR9g3UwTHNGNm+rwrqa15viuNOFBchykX/Orsk02EH7NR\r\n" -"Alw5WLPorYjED6cdVQgBl9ot93HdJogRiXCxErM7NC8/eP511mjq+uLDjLKH8ZPQ\r\n" -"8I4ekHJnroLsDkIwXKGIsvIBHQy2ac/NwHLCQOK6mfum1pRx52V4Utu5dLLjD5bM\r\n" -"xOBC7KU4xZKuMXXZM6/93Yb51K/J4ahf1TxJlTWXtnzDr9saEYdNy2SKY/6ZiDNH\r\n" -"D+stpAKiQLAWaAusIWKYEyw9MQ==\r\n" -"-----END CERTIFICATE-----\r\n"; - -const char test_cli_key_rsa[] = -"-----BEGIN RSA PRIVATE KEY-----\r\n" -"MIIEpAIBAAKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6fM60Nj4o8VmXl3ETZzGaF\r\n" -"B9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu1C93KYRhTYJQj6eVSHD1\r\n" -"bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEwMjDV0/YI0FZPRo7yX/k9\r\n" -"Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v4Jv4EFbMs44TFeY0BGbH\r\n" -"7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx//DZrtenNLQNiTrM9AM+v\r\n" -"dqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQABAoIBAGdNtfYDiap6bzst\r\n" -"yhCiI8m9TtrhZw4MisaEaN/ll3XSjaOG2dvV6xMZCMV+5TeXDHOAZnY18Yi18vzz\r\n" -"4Ut2TnNFzizCECYNaA2fST3WgInnxUkV3YXAyP6CNxJaCmv2aA0yFr2kFVSeaKGt\r\n" -"ymvljNp2NVkvm7Th8fBQBO7I7AXhz43k0mR7XmPgewe8ApZOG3hstkOaMvbWAvWA\r\n" -"zCZupdDjZYjOJqlA4eEA4H8/w7F83r5CugeBE8LgEREjLPiyejrU5H1fubEY+h0d\r\n" -"l5HZBJ68ybTXfQ5U9o/QKA3dd0toBEhhdRUDGzWtjvwkEQfqF1reGWj/tod/gCpf\r\n" -"DFi6X0ECgYEA4wOv/pjSC3ty6TuOvKX2rOUiBrLXXv2JSxZnMoMiWI5ipLQt+RYT\r\n" -"VPafL/m7Dn6MbwjayOkcZhBwk5CNz5A6Q4lJ64Mq/lqHznRCQQ2Mc1G8eyDF/fYL\r\n" -"Ze2pLvwP9VD5jTc2miDfw+MnvJhywRRLcemDFP8k4hQVtm8PMp3ZmNECgYEA4gz7\r\n" -"wzObR4gn8ibe617uQPZjWzUj9dUHYd+in1gwBCIrtNnaRn9I9U/Q6tegRYpii4ys\r\n" -"c176NmU+umy6XmuSKV5qD9bSpZWG2nLFnslrN15Lm3fhZxoeMNhBaEDTnLT26yoi\r\n" -"33gp0mSSWy94ZEqipms+ULF6sY1ZtFW6tpGFoy8CgYAQHhnnvJflIs2ky4q10B60\r\n" -"ZcxFp3rtDpkp0JxhFLhiizFrujMtZSjYNm5U7KkgPVHhLELEUvCmOnKTt4ap/vZ0\r\n" -"BxJNe1GZH3pW6SAvGDQpl9sG7uu/vTFP+lCxukmzxB0DrrDcvorEkKMom7ZCCRvW\r\n" -"KZsZ6YeH2Z81BauRj218kQKBgQCUV/DgKP2985xDTT79N08jUo3hTP5MVYCCuj/+\r\n" -"UeEw1TvZcx3LJby7P6Xad6a1/BqveaGyFKIfEFIaBUBItk801sDDpDaYc4gL00Xc\r\n" -"7lFuBHOZkxJYlss5QrGpuOEl9ZwUt5IrFLBdYaKqNHzNVC1pCPfb/JyH6Dr2HUxq\r\n" -"gxUwAQKBgQCcU6G2L8AG9d9c0UpOyL1tMvFe5Ttw0KjlQVdsh1MP6yigYo9DYuwu\r\n" -"bHFVW2r0dBTqegP2/KTOxKzaHfC1qf0RGDsUoJCNJrd1cwoCLG8P2EF4w3OBrKqv\r\n" -"8u4ytY0F+Vlanj5lm3TaoHSVF1+NWPyOTiwevIECGKwSxvlki4fDAA==\r\n" -"-----END RSA PRIVATE KEY-----\r\n"; -#else -#define TEST_CA_CRT_RSA -#endif /* POLARSSL_RSA_C */ - -#if defined(POLARSSL_DHM_C) -const char test_dhm_params[] = -"-----BEGIN DH PARAMETERS-----\r\n" -"MIGHAoGBAJ419DBEOgmQTzo5qXl5fQcN9TN455wkOL7052HzxxRVMyhYmwQcgJvh\r\n" -"1sa18fyfR9OiVEMYglOpkqVoGLN7qd5aQNNi5W7/C+VBdHTBJcGZJyyP5B3qcz32\r\n" -"9mLJKudlVudV0Qxk5qUJaPZ/xupz0NyoVpviuiBOI1gNi8ovSXWzAgEC\r\n" -"-----END DH PARAMETERS-----\r\n"; -#endif - -/* Concatenation of all available CA certificates */ -const char test_ca_list[] = TEST_CA_CRT_RSA TEST_CA_CRT_EC; - -#if defined(POLARSSL_RSA_C) -const char *test_ca_crt = test_ca_crt_rsa; -const char *test_ca_key = test_ca_key_rsa; -const char *test_ca_pwd = test_ca_pwd_rsa; -const char *test_srv_crt = test_srv_crt_rsa; -const char *test_srv_key = test_srv_key_rsa; -const char *test_cli_crt = test_cli_crt_rsa; -const char *test_cli_key = test_cli_key_rsa; -#else /* ! POLARSSL_RSA_C, so POLARSSL_ECDSA_C */ -const char *test_ca_crt = test_ca_crt_ec; -const char *test_ca_key = test_ca_key_ec; -const char *test_ca_pwd = test_ca_pwd_ec; -const char *test_srv_crt = test_srv_crt_ec; -const char *test_srv_key = test_srv_key_ec; -const char *test_cli_crt = test_cli_crt_ec; -const char *test_cli_key = test_cli_key_ec; -#endif /* POLARSSL_RSA_C */ - -#endif /* POLARSSL_CERTS_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/cipher.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/cipher.c deleted file mode 100644 index 5cd30f8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/cipher.c +++ /dev/null @@ -1,917 +0,0 @@ -/** - * \file cipher.c - * - * \brief Generic cipher wrapper for PolarSSL - * - * \author Adriaan de Jong - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_CIPHER_C) - -#include "polarssl/cipher.h" -#include "polarssl/cipher_wrap.h" - -#if defined(POLARSSL_GCM_C) -#include "polarssl/gcm.h" -#endif - -#if defined(POLARSSL_CCM_C) -#include "polarssl/ccm.h" -#endif - -#include - -#if defined(POLARSSL_ARC4_C) || defined(POLARSSL_CIPHER_NULL_CIPHER) -#define POLARSSL_CIPHER_MODE_STREAM -#endif - -#if defined(_MSC_VER) && !defined strcasecmp && !defined(EFIX64) && \ - !defined(EFI32) -#define strcasecmp _stricmp -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -static int supported_init = 0; - -const int *cipher_list( void ) -{ - const cipher_definition_t *def; - int *type; - - if( ! supported_init ) - { - def = cipher_definitions; - type = supported_ciphers; - - while( def->type != 0 ) - *type++ = (*def++).type; - - *type = 0; - - supported_init = 1; - } - - return( supported_ciphers ); -} - -const cipher_info_t *cipher_info_from_type( const cipher_type_t cipher_type ) -{ - const cipher_definition_t *def; - - for( def = cipher_definitions; def->info != NULL; def++ ) - if( def->type == cipher_type ) - return( def->info ); - - return( NULL ); -} - -const cipher_info_t *cipher_info_from_string( const char *cipher_name ) -{ - const cipher_definition_t *def; - - if( NULL == cipher_name ) - return( NULL ); - - for( def = cipher_definitions; def->info != NULL; def++ ) - if( ! strcasecmp( def->info->name, cipher_name ) ) - return( def->info ); - - return( NULL ); -} - -const cipher_info_t *cipher_info_from_values( const cipher_id_t cipher_id, - int key_length, - const cipher_mode_t mode ) -{ - const cipher_definition_t *def; - - for( def = cipher_definitions; def->info != NULL; def++ ) - if( def->info->base->cipher == cipher_id && - def->info->key_length == (unsigned) key_length && - def->info->mode == mode ) - return( def->info ); - - return( NULL ); -} - -void cipher_init( cipher_context_t *ctx ) -{ - memset( ctx, 0, sizeof( cipher_context_t ) ); -} - -void cipher_free( cipher_context_t *ctx ) -{ - if( ctx == NULL ) - return; - - if( ctx->cipher_ctx ) - ctx->cipher_info->base->ctx_free_func( ctx->cipher_ctx ); - - polarssl_zeroize( ctx, sizeof(cipher_context_t) ); -} - -int cipher_init_ctx( cipher_context_t *ctx, const cipher_info_t *cipher_info ) -{ - if( NULL == cipher_info || NULL == ctx ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - memset( ctx, 0, sizeof( cipher_context_t ) ); - - if( NULL == ( ctx->cipher_ctx = cipher_info->base->ctx_alloc_func() ) ) - return( POLARSSL_ERR_CIPHER_ALLOC_FAILED ); - - ctx->cipher_info = cipher_info; - -#if defined(POLARSSL_CIPHER_MODE_WITH_PADDING) - /* - * Ignore possible errors caused by a cipher mode that doesn't use padding - */ -#if defined(POLARSSL_CIPHER_PADDING_PKCS7) - (void) cipher_set_padding_mode( ctx, POLARSSL_PADDING_PKCS7 ); -#else - (void) cipher_set_padding_mode( ctx, POLARSSL_PADDING_NONE ); -#endif -#endif /* POLARSSL_CIPHER_MODE_WITH_PADDING */ - - return( 0 ); -} - -/* Deprecated, redirects to cipher_free() */ -int cipher_free_ctx( cipher_context_t *ctx ) -{ - cipher_free( ctx ); - - return( 0 ); -} - -int cipher_setkey( cipher_context_t *ctx, const unsigned char *key, - int key_length, const operation_t operation ) -{ - if( NULL == ctx || NULL == ctx->cipher_info ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - if( ( ctx->cipher_info->flags & POLARSSL_CIPHER_VARIABLE_KEY_LEN ) == 0 && - (int) ctx->cipher_info->key_length != key_length ) - { - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - } - - ctx->key_length = key_length; - ctx->operation = operation; - - /* - * For CFB and CTR mode always use the encryption key schedule - */ - if( POLARSSL_ENCRYPT == operation || - POLARSSL_MODE_CFB == ctx->cipher_info->mode || - POLARSSL_MODE_CTR == ctx->cipher_info->mode ) - { - return ctx->cipher_info->base->setkey_enc_func( ctx->cipher_ctx, key, - ctx->key_length ); - } - - if( POLARSSL_DECRYPT == operation ) - return ctx->cipher_info->base->setkey_dec_func( ctx->cipher_ctx, key, - ctx->key_length ); - - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); -} - -int cipher_set_iv( cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len ) -{ - size_t actual_iv_size; - - if( NULL == ctx || NULL == ctx->cipher_info || NULL == iv ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - /* avoid buffer overflow in ctx->iv */ - if( iv_len > POLARSSL_MAX_IV_LENGTH ) - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); - - if( ( ctx->cipher_info->flags & POLARSSL_CIPHER_VARIABLE_IV_LEN ) != 0 ) - actual_iv_size = iv_len; - else - { - actual_iv_size = ctx->cipher_info->iv_size; - - /* avoid reading past the end of input buffer */ - if( actual_iv_size > iv_len ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - } - - memcpy( ctx->iv, iv, actual_iv_size ); - ctx->iv_size = actual_iv_size; - - return( 0 ); -} - -int cipher_reset( cipher_context_t *ctx ) -{ - if( NULL == ctx || NULL == ctx->cipher_info ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - ctx->unprocessed_len = 0; - - return( 0 ); -} - -#if defined(POLARSSL_GCM_C) -int cipher_update_ad( cipher_context_t *ctx, - const unsigned char *ad, size_t ad_len ) -{ - if( NULL == ctx || NULL == ctx->cipher_info ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - if( POLARSSL_MODE_GCM == ctx->cipher_info->mode ) - { - return gcm_starts( (gcm_context *) ctx->cipher_ctx, ctx->operation, - ctx->iv, ctx->iv_size, ad, ad_len ); - } - - return( 0 ); -} -#endif /* POLARSSL_GCM_C */ - -int cipher_update( cipher_context_t *ctx, const unsigned char *input, - size_t ilen, unsigned char *output, size_t *olen ) -{ - int ret; - - if( NULL == ctx || NULL == ctx->cipher_info || NULL == olen ) - { - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - } - - *olen = 0; - - if( ctx->cipher_info->mode == POLARSSL_MODE_ECB ) - { - if( ilen != cipher_get_block_size( ctx ) ) - return( POLARSSL_ERR_CIPHER_FULL_BLOCK_EXPECTED ); - - *olen = ilen; - - if( 0 != ( ret = ctx->cipher_info->base->ecb_func( ctx->cipher_ctx, - ctx->operation, input, output ) ) ) - { - return( ret ); - } - - return( 0 ); - } - -#if defined(POLARSSL_GCM_C) - if( ctx->cipher_info->mode == POLARSSL_MODE_GCM ) - { - *olen = ilen; - return gcm_update( (gcm_context *) ctx->cipher_ctx, ilen, input, - output ); - } -#endif - - if( input == output && - ( ctx->unprocessed_len != 0 || ilen % cipher_get_block_size( ctx ) ) ) - { - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - } - -#if defined(POLARSSL_CIPHER_MODE_CBC) - if( ctx->cipher_info->mode == POLARSSL_MODE_CBC ) - { - size_t copy_len = 0; - - /* - * If there is not enough data for a full block, cache it. - */ - if( ( ctx->operation == POLARSSL_DECRYPT && - ilen + ctx->unprocessed_len <= cipher_get_block_size( ctx ) ) || - ( ctx->operation == POLARSSL_ENCRYPT && - ilen + ctx->unprocessed_len < cipher_get_block_size( ctx ) ) ) - { - memcpy( &( ctx->unprocessed_data[ctx->unprocessed_len] ), input, - ilen ); - - ctx->unprocessed_len += ilen; - return( 0 ); - } - - /* - * Process cached data first - */ - if( ctx->unprocessed_len != 0 ) - { - copy_len = cipher_get_block_size( ctx ) - ctx->unprocessed_len; - - memcpy( &( ctx->unprocessed_data[ctx->unprocessed_len] ), input, - copy_len ); - - if( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, - ctx->operation, cipher_get_block_size( ctx ), ctx->iv, - ctx->unprocessed_data, output ) ) ) - { - return( ret ); - } - - *olen += cipher_get_block_size( ctx ); - output += cipher_get_block_size( ctx ); - ctx->unprocessed_len = 0; - - input += copy_len; - ilen -= copy_len; - } - - /* - * Cache final, incomplete block - */ - if( 0 != ilen ) - { - copy_len = ilen % cipher_get_block_size( ctx ); - if( copy_len == 0 && ctx->operation == POLARSSL_DECRYPT ) - copy_len = cipher_get_block_size( ctx ); - - memcpy( ctx->unprocessed_data, &( input[ilen - copy_len] ), - copy_len ); - - ctx->unprocessed_len += copy_len; - ilen -= copy_len; - } - - /* - * Process remaining full blocks - */ - if( ilen ) - { - if( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, - ctx->operation, ilen, ctx->iv, input, output ) ) ) - { - return( ret ); - } - - *olen += ilen; - } - - return( 0 ); - } -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) - if( ctx->cipher_info->mode == POLARSSL_MODE_CFB ) - { - if( 0 != ( ret = ctx->cipher_info->base->cfb_func( ctx->cipher_ctx, - ctx->operation, ilen, &ctx->unprocessed_len, ctx->iv, - input, output ) ) ) - { - return( ret ); - } - - *olen = ilen; - - return( 0 ); - } -#endif /* POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) - if( ctx->cipher_info->mode == POLARSSL_MODE_CTR ) - { - if( 0 != ( ret = ctx->cipher_info->base->ctr_func( ctx->cipher_ctx, - ilen, &ctx->unprocessed_len, ctx->iv, - ctx->unprocessed_data, input, output ) ) ) - { - return( ret ); - } - - *olen = ilen; - - return( 0 ); - } -#endif /* POLARSSL_CIPHER_MODE_CTR */ - -#if defined(POLARSSL_CIPHER_MODE_STREAM) - if( ctx->cipher_info->mode == POLARSSL_MODE_STREAM ) - { - if( 0 != ( ret = ctx->cipher_info->base->stream_func( ctx->cipher_ctx, - ilen, input, output ) ) ) - { - return( ret ); - } - - *olen = ilen; - - return( 0 ); - } -#endif /* POLARSSL_CIPHER_MODE_STREAM */ - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -} - -#if defined(POLARSSL_CIPHER_MODE_WITH_PADDING) -#if defined(POLARSSL_CIPHER_PADDING_PKCS7) -/* - * PKCS7 (and PKCS5) padding: fill with ll bytes, with ll = padding_len - */ -static void add_pkcs_padding( unsigned char *output, size_t output_len, - size_t data_len ) -{ - size_t padding_len = output_len - data_len; - unsigned char i; - - for( i = 0; i < padding_len; i++ ) - output[data_len + i] = (unsigned char) padding_len; -} - -static int get_pkcs_padding( unsigned char *input, size_t input_len, - size_t *data_len ) -{ - size_t i, pad_idx; - unsigned char padding_len, bad = 0; - - if( NULL == input || NULL == data_len ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - padding_len = input[input_len - 1]; - *data_len = input_len - padding_len; - - /* Avoid logical || since it results in a branch */ - bad |= padding_len > input_len; - bad |= padding_len == 0; - - /* The number of bytes checked must be independent of padding_len, - * so pick input_len, which is usually 8 or 16 (one block) */ - pad_idx = input_len - padding_len; - for( i = 0; i < input_len; i++ ) - bad |= ( input[i] ^ padding_len ) * ( i >= pad_idx ); - - return( POLARSSL_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); -} -#endif /* POLARSSL_CIPHER_PADDING_PKCS7 */ - -#if defined(POLARSSL_CIPHER_PADDING_ONE_AND_ZEROS) -/* - * One and zeros padding: fill with 80 00 ... 00 - */ -static void add_one_and_zeros_padding( unsigned char *output, - size_t output_len, size_t data_len ) -{ - size_t padding_len = output_len - data_len; - unsigned char i = 0; - - output[data_len] = 0x80; - for( i = 1; i < padding_len; i++ ) - output[data_len + i] = 0x00; -} - -static int get_one_and_zeros_padding( unsigned char *input, size_t input_len, - size_t *data_len ) -{ - size_t i; - unsigned char done = 0, prev_done, bad; - - if( NULL == input || NULL == data_len ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - bad = 0xFF; - *data_len = 0; - for( i = input_len; i > 0; i-- ) - { - prev_done = done; - done |= ( input[i-1] != 0 ); - *data_len |= ( i - 1 ) * ( done != prev_done ); - bad &= ( input[i-1] ^ 0x80 ) | ( done == prev_done ); - } - - return( POLARSSL_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); - -} -#endif /* POLARSSL_CIPHER_PADDING_ONE_AND_ZEROS */ - -#if defined(POLARSSL_CIPHER_PADDING_ZEROS_AND_LEN) -/* - * Zeros and len padding: fill with 00 ... 00 ll, where ll is padding length - */ -static void add_zeros_and_len_padding( unsigned char *output, - size_t output_len, size_t data_len ) -{ - size_t padding_len = output_len - data_len; - unsigned char i = 0; - - for( i = 1; i < padding_len; i++ ) - output[data_len + i - 1] = 0x00; - output[output_len - 1] = (unsigned char) padding_len; -} - -static int get_zeros_and_len_padding( unsigned char *input, size_t input_len, - size_t *data_len ) -{ - size_t i, pad_idx; - unsigned char padding_len, bad = 0; - - if( NULL == input || NULL == data_len ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - padding_len = input[input_len - 1]; - *data_len = input_len - padding_len; - - /* Avoid logical || since it results in a branch */ - bad |= padding_len > input_len; - bad |= padding_len == 0; - - /* The number of bytes checked must be independent of padding_len */ - pad_idx = input_len - padding_len; - for( i = 0; i < input_len - 1; i++ ) - bad |= input[i] * ( i >= pad_idx ); - - return( POLARSSL_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); -} -#endif /* POLARSSL_CIPHER_PADDING_ZEROS_AND_LEN */ - -#if defined(POLARSSL_CIPHER_PADDING_ZEROS) -/* - * Zero padding: fill with 00 ... 00 - */ -static void add_zeros_padding( unsigned char *output, - size_t output_len, size_t data_len ) -{ - size_t i; - - for( i = data_len; i < output_len; i++ ) - output[i] = 0x00; -} - -static int get_zeros_padding( unsigned char *input, size_t input_len, - size_t *data_len ) -{ - size_t i; - unsigned char done = 0, prev_done; - - if( NULL == input || NULL == data_len ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - *data_len = 0; - for( i = input_len; i > 0; i-- ) - { - prev_done = done; - done |= ( input[i-1] != 0 ); - *data_len |= i * ( done != prev_done ); - } - - return( 0 ); -} -#endif /* POLARSSL_CIPHER_PADDING_ZEROS */ - -/* - * No padding: don't pad :) - * - * There is no add_padding function (check for NULL in cipher_finish) - * but a trivial get_padding function - */ -static int get_no_padding( unsigned char *input, size_t input_len, - size_t *data_len ) -{ - if( NULL == input || NULL == data_len ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - *data_len = input_len; - - return( 0 ); -} -#endif /* POLARSSL_CIPHER_MODE_WITH_PADDING */ - -int cipher_finish( cipher_context_t *ctx, - unsigned char *output, size_t *olen ) -{ - if( NULL == ctx || NULL == ctx->cipher_info || NULL == olen ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - *olen = 0; - - if( POLARSSL_MODE_CFB == ctx->cipher_info->mode || - POLARSSL_MODE_CTR == ctx->cipher_info->mode || - POLARSSL_MODE_GCM == ctx->cipher_info->mode || - POLARSSL_MODE_STREAM == ctx->cipher_info->mode ) - { - return( 0 ); - } - - if( POLARSSL_MODE_ECB == ctx->cipher_info->mode ) - { - if( ctx->unprocessed_len != 0 ) - return( POLARSSL_ERR_CIPHER_FULL_BLOCK_EXPECTED ); - - return( 0 ); - } - -#if defined(POLARSSL_CIPHER_MODE_CBC) - if( POLARSSL_MODE_CBC == ctx->cipher_info->mode ) - { - int ret = 0; - - if( POLARSSL_ENCRYPT == ctx->operation ) - { - /* check for 'no padding' mode */ - if( NULL == ctx->add_padding ) - { - if( 0 != ctx->unprocessed_len ) - return( POLARSSL_ERR_CIPHER_FULL_BLOCK_EXPECTED ); - - return( 0 ); - } - - ctx->add_padding( ctx->unprocessed_data, cipher_get_iv_size( ctx ), - ctx->unprocessed_len ); - } - else if( cipher_get_block_size( ctx ) != ctx->unprocessed_len ) - { - /* - * For decrypt operations, expect a full block, - * or an empty block if no padding - */ - if( NULL == ctx->add_padding && 0 == ctx->unprocessed_len ) - return( 0 ); - - return( POLARSSL_ERR_CIPHER_FULL_BLOCK_EXPECTED ); - } - - /* cipher block */ - if( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, - ctx->operation, cipher_get_block_size( ctx ), ctx->iv, - ctx->unprocessed_data, output ) ) ) - { - return( ret ); - } - - /* Set output size for decryption */ - if( POLARSSL_DECRYPT == ctx->operation ) - return ctx->get_padding( output, cipher_get_block_size( ctx ), - olen ); - - /* Set output size for encryption */ - *olen = cipher_get_block_size( ctx ); - return( 0 ); - } -#else - ((void) output); -#endif /* POLARSSL_CIPHER_MODE_CBC */ - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -} - -#if defined(POLARSSL_CIPHER_MODE_WITH_PADDING) -int cipher_set_padding_mode( cipher_context_t *ctx, cipher_padding_t mode ) -{ - if( NULL == ctx || - POLARSSL_MODE_CBC != ctx->cipher_info->mode ) - { - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - } - - switch( mode ) - { -#if defined(POLARSSL_CIPHER_PADDING_PKCS7) - case POLARSSL_PADDING_PKCS7: - ctx->add_padding = add_pkcs_padding; - ctx->get_padding = get_pkcs_padding; - break; -#endif -#if defined(POLARSSL_CIPHER_PADDING_ONE_AND_ZEROS) - case POLARSSL_PADDING_ONE_AND_ZEROS: - ctx->add_padding = add_one_and_zeros_padding; - ctx->get_padding = get_one_and_zeros_padding; - break; -#endif -#if defined(POLARSSL_CIPHER_PADDING_ZEROS_AND_LEN) - case POLARSSL_PADDING_ZEROS_AND_LEN: - ctx->add_padding = add_zeros_and_len_padding; - ctx->get_padding = get_zeros_and_len_padding; - break; -#endif -#if defined(POLARSSL_CIPHER_PADDING_ZEROS) - case POLARSSL_PADDING_ZEROS: - ctx->add_padding = add_zeros_padding; - ctx->get_padding = get_zeros_padding; - break; -#endif - case POLARSSL_PADDING_NONE: - ctx->add_padding = NULL; - ctx->get_padding = get_no_padding; - break; - - default: - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); - } - - return( 0 ); -} -#endif /* POLARSSL_CIPHER_MODE_WITH_PADDING */ - -#if defined(POLARSSL_GCM_C) -int cipher_write_tag( cipher_context_t *ctx, - unsigned char *tag, size_t tag_len ) -{ - if( NULL == ctx || NULL == ctx->cipher_info || NULL == tag ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - if( POLARSSL_ENCRYPT != ctx->operation ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - if( POLARSSL_MODE_GCM == ctx->cipher_info->mode ) - return gcm_finish( (gcm_context *) ctx->cipher_ctx, tag, tag_len ); - - return( 0 ); -} - -int cipher_check_tag( cipher_context_t *ctx, - const unsigned char *tag, size_t tag_len ) -{ - int ret; - - if( NULL == ctx || NULL == ctx->cipher_info || - POLARSSL_DECRYPT != ctx->operation ) - { - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - } - - if( POLARSSL_MODE_GCM == ctx->cipher_info->mode ) - { - unsigned char check_tag[16]; - size_t i; - int diff; - - if( tag_len > sizeof( check_tag ) ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - if( 0 != ( ret = gcm_finish( (gcm_context *) ctx->cipher_ctx, - check_tag, tag_len ) ) ) - { - return( ret ); - } - - /* Check the tag in "constant-time" */ - for( diff = 0, i = 0; i < tag_len; i++ ) - diff |= tag[i] ^ check_tag[i]; - - if( diff != 0 ) - return( POLARSSL_ERR_CIPHER_AUTH_FAILED ); - - return( 0 ); - } - - return( 0 ); -} -#endif /* POLARSSL_GCM_C */ - -/* - * Packet-oriented wrapper for non-AEAD modes - */ -int cipher_crypt( cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen ) -{ - int ret; - size_t finish_olen; - - if( ( ret = cipher_set_iv( ctx, iv, iv_len ) ) != 0 ) - return( ret ); - - if( ( ret = cipher_reset( ctx ) ) != 0 ) - return( ret ); - - if( ( ret = cipher_update( ctx, input, ilen, output, olen ) ) != 0 ) - return( ret ); - - if( ( ret = cipher_finish( ctx, output + *olen, &finish_olen ) ) != 0 ) - return( ret ); - - *olen += finish_olen; - - return( 0 ); -} - -#if defined(POLARSSL_CIPHER_MODE_AEAD) -/* - * Packet-oriented encryption for AEAD modes - */ -int cipher_auth_encrypt( cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *ad, size_t ad_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, - unsigned char *tag, size_t tag_len ) -{ -#if defined(POLARSSL_GCM_C) - if( POLARSSL_MODE_GCM == ctx->cipher_info->mode ) - { - *olen = ilen; - return( gcm_crypt_and_tag( ctx->cipher_ctx, GCM_ENCRYPT, ilen, - iv, iv_len, ad, ad_len, input, output, - tag_len, tag ) ); - } -#endif /* POLARSSL_GCM_C */ -#if defined(POLARSSL_CCM_C) - if( POLARSSL_MODE_CCM == ctx->cipher_info->mode ) - { - *olen = ilen; - return( ccm_encrypt_and_tag( ctx->cipher_ctx, ilen, - iv, iv_len, ad, ad_len, input, output, - tag, tag_len ) ); - } -#endif /* POLARSSL_CCM_C */ - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -} - -/* - * Packet-oriented decryption for AEAD modes - */ -int cipher_auth_decrypt( cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *ad, size_t ad_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, - const unsigned char *tag, size_t tag_len ) -{ -#if defined(POLARSSL_GCM_C) - if( POLARSSL_MODE_GCM == ctx->cipher_info->mode ) - { - int ret; - - *olen = ilen; - ret = gcm_auth_decrypt( ctx->cipher_ctx, ilen, - iv, iv_len, ad, ad_len, - tag, tag_len, input, output ); - - if( ret == POLARSSL_ERR_GCM_AUTH_FAILED ) - ret = POLARSSL_ERR_CIPHER_AUTH_FAILED; - - return( ret ); - } -#endif /* POLARSSL_GCM_C */ -#if defined(POLARSSL_CCM_C) - if( POLARSSL_MODE_CCM == ctx->cipher_info->mode ) - { - int ret; - - *olen = ilen; - ret = ccm_auth_decrypt( ctx->cipher_ctx, ilen, - iv, iv_len, ad, ad_len, - input, output, tag, tag_len ); - - if( ret == POLARSSL_ERR_CCM_AUTH_FAILED ) - ret = POLARSSL_ERR_CIPHER_AUTH_FAILED; - - return( ret ); - } -#endif /* POLARSSL_CCM_C */ - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -} -#endif /* POLARSSL_CIPHER_MODE_AEAD */ - - -#if defined(POLARSSL_SELF_TEST) - -/* - * Checkup routine - */ -int cipher_self_test( int verbose ) -{ - ((void) verbose); - - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_CIPHER_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/cipher_wrap.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/cipher_wrap.c deleted file mode 100644 index 27aa3db..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/cipher_wrap.c +++ /dev/null @@ -1,1451 +0,0 @@ -/** - * \file cipher_wrap.c - * - * \brief Generic cipher wrapper for PolarSSL - * - * \author Adriaan de Jong - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_CIPHER_C) - -#include "polarssl/cipher_wrap.h" - -#if defined(POLARSSL_AES_C) -#include "polarssl/aes.h" -#endif - -#if defined(POLARSSL_ARC4_C) -#include "polarssl/arc4.h" -#endif - -#if defined(POLARSSL_CAMELLIA_C) -#include "polarssl/camellia.h" -#endif - -#if defined(POLARSSL_DES_C) -#include "polarssl/des.h" -#endif - -#if defined(POLARSSL_BLOWFISH_C) -#include "polarssl/blowfish.h" -#endif - -#if defined(POLARSSL_GCM_C) -#include "polarssl/gcm.h" -#endif - -#if defined(POLARSSL_CCM_C) -#include "polarssl/ccm.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include - -#if defined(POLARSSL_GCM_C) -/* shared by all GCM ciphers */ -static void *gcm_ctx_alloc( void ) -{ - return polarssl_malloc( sizeof( gcm_context ) ); -} - -static void gcm_ctx_free( void *ctx ) -{ - gcm_free( ctx ); - polarssl_free( ctx ); -} -#endif /* POLARSSL_GCM_C */ - -#if defined(POLARSSL_CCM_C) -/* shared by all CCM ciphers */ -static void *ccm_ctx_alloc( void ) -{ - return polarssl_malloc( sizeof( ccm_context ) ); -} - -static void ccm_ctx_free( void *ctx ) -{ - ccm_free( ctx ); - polarssl_free( ctx ); -} -#endif /* POLARSSL_CCM_C */ - -#if defined(POLARSSL_AES_C) - -static int aes_crypt_ecb_wrap( void *ctx, operation_t operation, - const unsigned char *input, unsigned char *output ) -{ - return aes_crypt_ecb( (aes_context *) ctx, operation, input, output ); -} - -static int aes_crypt_cbc_wrap( void *ctx, operation_t operation, size_t length, - unsigned char *iv, const unsigned char *input, unsigned char *output ) -{ -#if defined(POLARSSL_CIPHER_MODE_CBC) - return aes_crypt_cbc( (aes_context *) ctx, operation, length, iv, input, - output ); -#else - ((void) ctx); - ((void) operation); - ((void) length); - ((void) iv); - ((void) input); - ((void) output); - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_CIPHER_MODE_CBC */ -} - -static int aes_crypt_cfb128_wrap( void *ctx, operation_t operation, - size_t length, size_t *iv_off, unsigned char *iv, - const unsigned char *input, unsigned char *output ) -{ -#if defined(POLARSSL_CIPHER_MODE_CFB) - return aes_crypt_cfb128( (aes_context *) ctx, operation, length, iv_off, iv, - input, output ); -#else - ((void) ctx); - ((void) operation); - ((void) length); - ((void) iv_off); - ((void) iv); - ((void) input); - ((void) output); - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_CIPHER_MODE_CFB */ -} - -static int aes_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off, - unsigned char *nonce_counter, unsigned char *stream_block, - const unsigned char *input, unsigned char *output ) -{ -#if defined(POLARSSL_CIPHER_MODE_CTR) - return aes_crypt_ctr( (aes_context *) ctx, length, nc_off, nonce_counter, - stream_block, input, output ); -#else - ((void) ctx); - ((void) length); - ((void) nc_off); - ((void) nonce_counter); - ((void) stream_block); - ((void) input); - ((void) output); - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_CIPHER_MODE_CTR */ -} - -static int aes_setkey_dec_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - return aes_setkey_dec( (aes_context *) ctx, key, key_length ); -} - -static int aes_setkey_enc_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - return aes_setkey_enc( (aes_context *) ctx, key, key_length ); -} - -static void * aes_ctx_alloc( void ) -{ - aes_context *aes = (aes_context *) polarssl_malloc( sizeof( aes_context ) ); - - if( aes == NULL ) - return( NULL ); - - aes_init( aes ); - - return( aes ); -} - -static void aes_ctx_free( void *ctx ) -{ - aes_free( (aes_context *) ctx ); - polarssl_free( ctx ); -} - -const cipher_base_t aes_info = { - POLARSSL_CIPHER_ID_AES, - aes_crypt_ecb_wrap, - aes_crypt_cbc_wrap, - aes_crypt_cfb128_wrap, - aes_crypt_ctr_wrap, - NULL, - aes_setkey_enc_wrap, - aes_setkey_dec_wrap, - aes_ctx_alloc, - aes_ctx_free -}; - -const cipher_info_t aes_128_ecb_info = { - POLARSSL_CIPHER_AES_128_ECB, - POLARSSL_MODE_ECB, - 128, - "AES-128-ECB", - 16, - 0, - 16, - &aes_info -}; - -const cipher_info_t aes_192_ecb_info = { - POLARSSL_CIPHER_AES_192_ECB, - POLARSSL_MODE_ECB, - 192, - "AES-192-ECB", - 16, - 0, - 16, - &aes_info -}; - -const cipher_info_t aes_256_ecb_info = { - POLARSSL_CIPHER_AES_256_ECB, - POLARSSL_MODE_ECB, - 256, - "AES-256-ECB", - 16, - 0, - 16, - &aes_info -}; - -#if defined(POLARSSL_CIPHER_MODE_CBC) -const cipher_info_t aes_128_cbc_info = { - POLARSSL_CIPHER_AES_128_CBC, - POLARSSL_MODE_CBC, - 128, - "AES-128-CBC", - 16, - 0, - 16, - &aes_info -}; - -const cipher_info_t aes_192_cbc_info = { - POLARSSL_CIPHER_AES_192_CBC, - POLARSSL_MODE_CBC, - 192, - "AES-192-CBC", - 16, - 0, - 16, - &aes_info -}; - -const cipher_info_t aes_256_cbc_info = { - POLARSSL_CIPHER_AES_256_CBC, - POLARSSL_MODE_CBC, - 256, - "AES-256-CBC", - 16, - 0, - 16, - &aes_info -}; -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) -const cipher_info_t aes_128_cfb128_info = { - POLARSSL_CIPHER_AES_128_CFB128, - POLARSSL_MODE_CFB, - 128, - "AES-128-CFB128", - 16, - 0, - 16, - &aes_info -}; - -const cipher_info_t aes_192_cfb128_info = { - POLARSSL_CIPHER_AES_192_CFB128, - POLARSSL_MODE_CFB, - 192, - "AES-192-CFB128", - 16, - 0, - 16, - &aes_info -}; - -const cipher_info_t aes_256_cfb128_info = { - POLARSSL_CIPHER_AES_256_CFB128, - POLARSSL_MODE_CFB, - 256, - "AES-256-CFB128", - 16, - 0, - 16, - &aes_info -}; -#endif /* POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) -const cipher_info_t aes_128_ctr_info = { - POLARSSL_CIPHER_AES_128_CTR, - POLARSSL_MODE_CTR, - 128, - "AES-128-CTR", - 16, - 0, - 16, - &aes_info -}; - -const cipher_info_t aes_192_ctr_info = { - POLARSSL_CIPHER_AES_192_CTR, - POLARSSL_MODE_CTR, - 192, - "AES-192-CTR", - 16, - 0, - 16, - &aes_info -}; - -const cipher_info_t aes_256_ctr_info = { - POLARSSL_CIPHER_AES_256_CTR, - POLARSSL_MODE_CTR, - 256, - "AES-256-CTR", - 16, - 0, - 16, - &aes_info -}; -#endif /* POLARSSL_CIPHER_MODE_CTR */ - -#if defined(POLARSSL_GCM_C) -static int gcm_aes_setkey_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - return gcm_init( (gcm_context *) ctx, POLARSSL_CIPHER_ID_AES, - key, key_length ); -} - -const cipher_base_t gcm_aes_info = { - POLARSSL_CIPHER_ID_AES, - NULL, - NULL, - NULL, - NULL, - NULL, - gcm_aes_setkey_wrap, - gcm_aes_setkey_wrap, - gcm_ctx_alloc, - gcm_ctx_free, -}; - -const cipher_info_t aes_128_gcm_info = { - POLARSSL_CIPHER_AES_128_GCM, - POLARSSL_MODE_GCM, - 128, - "AES-128-GCM", - 12, - POLARSSL_CIPHER_VARIABLE_IV_LEN, - 16, - &gcm_aes_info -}; - -const cipher_info_t aes_192_gcm_info = { - POLARSSL_CIPHER_AES_192_GCM, - POLARSSL_MODE_GCM, - 192, - "AES-192-GCM", - 12, - POLARSSL_CIPHER_VARIABLE_IV_LEN, - 16, - &gcm_aes_info -}; - -const cipher_info_t aes_256_gcm_info = { - POLARSSL_CIPHER_AES_256_GCM, - POLARSSL_MODE_GCM, - 256, - "AES-256-GCM", - 12, - POLARSSL_CIPHER_VARIABLE_IV_LEN, - 16, - &gcm_aes_info -}; -#endif /* POLARSSL_GCM_C */ - -#if defined(POLARSSL_CCM_C) -static int ccm_aes_setkey_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - return ccm_init( (ccm_context *) ctx, POLARSSL_CIPHER_ID_AES, - key, key_length ); -} - -const cipher_base_t ccm_aes_info = { - POLARSSL_CIPHER_ID_AES, - NULL, - NULL, - NULL, - NULL, - NULL, - ccm_aes_setkey_wrap, - ccm_aes_setkey_wrap, - ccm_ctx_alloc, - ccm_ctx_free, -}; - -const cipher_info_t aes_128_ccm_info = { - POLARSSL_CIPHER_AES_128_CCM, - POLARSSL_MODE_CCM, - 128, - "AES-128-CCM", - 12, - POLARSSL_CIPHER_VARIABLE_IV_LEN, - 16, - &ccm_aes_info -}; - -const cipher_info_t aes_192_ccm_info = { - POLARSSL_CIPHER_AES_192_CCM, - POLARSSL_MODE_CCM, - 192, - "AES-192-CCM", - 12, - POLARSSL_CIPHER_VARIABLE_IV_LEN, - 16, - &ccm_aes_info -}; - -const cipher_info_t aes_256_ccm_info = { - POLARSSL_CIPHER_AES_256_CCM, - POLARSSL_MODE_CCM, - 256, - "AES-256-CCM", - 12, - POLARSSL_CIPHER_VARIABLE_IV_LEN, - 16, - &ccm_aes_info -}; -#endif /* POLARSSL_CCM_C */ - -#endif /* POLARSSL_AES_C */ - -#if defined(POLARSSL_CAMELLIA_C) - -static int camellia_crypt_ecb_wrap( void *ctx, operation_t operation, - const unsigned char *input, unsigned char *output ) -{ - return camellia_crypt_ecb( (camellia_context *) ctx, operation, input, - output ); -} - -static int camellia_crypt_cbc_wrap( void *ctx, operation_t operation, - size_t length, unsigned char *iv, - const unsigned char *input, unsigned char *output ) -{ -#if defined(POLARSSL_CIPHER_MODE_CBC) - return camellia_crypt_cbc( (camellia_context *) ctx, operation, length, iv, - input, output ); -#else - ((void) ctx); - ((void) operation); - ((void) length); - ((void) iv); - ((void) input); - ((void) output); - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_CIPHER_MODE_CBC */ -} - -static int camellia_crypt_cfb128_wrap( void *ctx, operation_t operation, - size_t length, size_t *iv_off, unsigned char *iv, - const unsigned char *input, unsigned char *output ) -{ -#if defined(POLARSSL_CIPHER_MODE_CFB) - return camellia_crypt_cfb128( (camellia_context *) ctx, operation, length, - iv_off, iv, input, output ); -#else - ((void) ctx); - ((void) operation); - ((void) length); - ((void) iv_off); - ((void) iv); - ((void) input); - ((void) output); - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_CIPHER_MODE_CFB */ -} - -static int camellia_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off, - unsigned char *nonce_counter, unsigned char *stream_block, - const unsigned char *input, unsigned char *output ) -{ -#if defined(POLARSSL_CIPHER_MODE_CTR) - return camellia_crypt_ctr( (camellia_context *) ctx, length, nc_off, - nonce_counter, stream_block, input, output ); -#else - ((void) ctx); - ((void) length); - ((void) nc_off); - ((void) nonce_counter); - ((void) stream_block); - ((void) input); - ((void) output); - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_CIPHER_MODE_CTR */ -} - -static int camellia_setkey_dec_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - return camellia_setkey_dec( (camellia_context *) ctx, key, key_length ); -} - -static int camellia_setkey_enc_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - return camellia_setkey_enc( (camellia_context *) ctx, key, key_length ); -} - -static void * camellia_ctx_alloc( void ) -{ - camellia_context *ctx; - ctx = (camellia_context *) polarssl_malloc( sizeof( camellia_context ) ); - - if( ctx == NULL ) - return( NULL ); - - camellia_init( ctx ); - - return( ctx ); -} - -static void camellia_ctx_free( void *ctx ) -{ - camellia_free( (camellia_context *) ctx ); - polarssl_free( ctx ); -} - -const cipher_base_t camellia_info = { - POLARSSL_CIPHER_ID_CAMELLIA, - camellia_crypt_ecb_wrap, - camellia_crypt_cbc_wrap, - camellia_crypt_cfb128_wrap, - camellia_crypt_ctr_wrap, - NULL, - camellia_setkey_enc_wrap, - camellia_setkey_dec_wrap, - camellia_ctx_alloc, - camellia_ctx_free -}; - -const cipher_info_t camellia_128_ecb_info = { - POLARSSL_CIPHER_CAMELLIA_128_ECB, - POLARSSL_MODE_ECB, - 128, - "CAMELLIA-128-ECB", - 16, - 0, - 16, - &camellia_info -}; - -const cipher_info_t camellia_192_ecb_info = { - POLARSSL_CIPHER_CAMELLIA_192_ECB, - POLARSSL_MODE_ECB, - 192, - "CAMELLIA-192-ECB", - 16, - 0, - 16, - &camellia_info -}; - -const cipher_info_t camellia_256_ecb_info = { - POLARSSL_CIPHER_CAMELLIA_256_ECB, - POLARSSL_MODE_ECB, - 256, - "CAMELLIA-256-ECB", - 16, - 0, - 16, - &camellia_info -}; - -#if defined(POLARSSL_CIPHER_MODE_CBC) -const cipher_info_t camellia_128_cbc_info = { - POLARSSL_CIPHER_CAMELLIA_128_CBC, - POLARSSL_MODE_CBC, - 128, - "CAMELLIA-128-CBC", - 16, - 0, - 16, - &camellia_info -}; - -const cipher_info_t camellia_192_cbc_info = { - POLARSSL_CIPHER_CAMELLIA_192_CBC, - POLARSSL_MODE_CBC, - 192, - "CAMELLIA-192-CBC", - 16, - 0, - 16, - &camellia_info -}; - -const cipher_info_t camellia_256_cbc_info = { - POLARSSL_CIPHER_CAMELLIA_256_CBC, - POLARSSL_MODE_CBC, - 256, - "CAMELLIA-256-CBC", - 16, - 0, - 16, - &camellia_info -}; -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) -const cipher_info_t camellia_128_cfb128_info = { - POLARSSL_CIPHER_CAMELLIA_128_CFB128, - POLARSSL_MODE_CFB, - 128, - "CAMELLIA-128-CFB128", - 16, - 0, - 16, - &camellia_info -}; - -const cipher_info_t camellia_192_cfb128_info = { - POLARSSL_CIPHER_CAMELLIA_192_CFB128, - POLARSSL_MODE_CFB, - 192, - "CAMELLIA-192-CFB128", - 16, - 0, - 16, - &camellia_info -}; - -const cipher_info_t camellia_256_cfb128_info = { - POLARSSL_CIPHER_CAMELLIA_256_CFB128, - POLARSSL_MODE_CFB, - 256, - "CAMELLIA-256-CFB128", - 16, - 0, - 16, - &camellia_info -}; -#endif /* POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) -const cipher_info_t camellia_128_ctr_info = { - POLARSSL_CIPHER_CAMELLIA_128_CTR, - POLARSSL_MODE_CTR, - 128, - "CAMELLIA-128-CTR", - 16, - 0, - 16, - &camellia_info -}; - -const cipher_info_t camellia_192_ctr_info = { - POLARSSL_CIPHER_CAMELLIA_192_CTR, - POLARSSL_MODE_CTR, - 192, - "CAMELLIA-192-CTR", - 16, - 0, - 16, - &camellia_info -}; - -const cipher_info_t camellia_256_ctr_info = { - POLARSSL_CIPHER_CAMELLIA_256_CTR, - POLARSSL_MODE_CTR, - 256, - "CAMELLIA-256-CTR", - 16, - 0, - 16, - &camellia_info -}; -#endif /* POLARSSL_CIPHER_MODE_CTR */ - -#if defined(POLARSSL_GCM_C) -static int gcm_camellia_setkey_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - return gcm_init( (gcm_context *) ctx, POLARSSL_CIPHER_ID_CAMELLIA, - key, key_length ); -} - -const cipher_base_t gcm_camellia_info = { - POLARSSL_CIPHER_ID_CAMELLIA, - NULL, - NULL, - NULL, - NULL, - NULL, - gcm_camellia_setkey_wrap, - gcm_camellia_setkey_wrap, - gcm_ctx_alloc, - gcm_ctx_free, -}; - -const cipher_info_t camellia_128_gcm_info = { - POLARSSL_CIPHER_CAMELLIA_128_GCM, - POLARSSL_MODE_GCM, - 128, - "CAMELLIA-128-GCM", - 12, - POLARSSL_CIPHER_VARIABLE_IV_LEN, - 16, - &gcm_camellia_info -}; - -const cipher_info_t camellia_192_gcm_info = { - POLARSSL_CIPHER_CAMELLIA_192_GCM, - POLARSSL_MODE_GCM, - 192, - "CAMELLIA-192-GCM", - 12, - POLARSSL_CIPHER_VARIABLE_IV_LEN, - 16, - &gcm_camellia_info -}; - -const cipher_info_t camellia_256_gcm_info = { - POLARSSL_CIPHER_CAMELLIA_256_GCM, - POLARSSL_MODE_GCM, - 256, - "CAMELLIA-256-GCM", - 12, - POLARSSL_CIPHER_VARIABLE_IV_LEN, - 16, - &gcm_camellia_info -}; -#endif /* POLARSSL_GCM_C */ - -#if defined(POLARSSL_CCM_C) -static int ccm_camellia_setkey_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - return ccm_init( (ccm_context *) ctx, POLARSSL_CIPHER_ID_CAMELLIA, - key, key_length ); -} - -const cipher_base_t ccm_camellia_info = { - POLARSSL_CIPHER_ID_CAMELLIA, - NULL, - NULL, - NULL, - NULL, - NULL, - ccm_camellia_setkey_wrap, - ccm_camellia_setkey_wrap, - ccm_ctx_alloc, - ccm_ctx_free, -}; - -const cipher_info_t camellia_128_ccm_info = { - POLARSSL_CIPHER_CAMELLIA_128_CCM, - POLARSSL_MODE_CCM, - 128, - "CAMELLIA-128-CCM", - 12, - POLARSSL_CIPHER_VARIABLE_IV_LEN, - 16, - &ccm_camellia_info -}; - -const cipher_info_t camellia_192_ccm_info = { - POLARSSL_CIPHER_CAMELLIA_192_CCM, - POLARSSL_MODE_CCM, - 192, - "CAMELLIA-192-CCM", - 12, - POLARSSL_CIPHER_VARIABLE_IV_LEN, - 16, - &ccm_camellia_info -}; - -const cipher_info_t camellia_256_ccm_info = { - POLARSSL_CIPHER_CAMELLIA_256_CCM, - POLARSSL_MODE_CCM, - 256, - "CAMELLIA-256-CCM", - 12, - POLARSSL_CIPHER_VARIABLE_IV_LEN, - 16, - &ccm_camellia_info -}; -#endif /* POLARSSL_CCM_C */ - -#endif /* POLARSSL_CAMELLIA_C */ - -#if defined(POLARSSL_DES_C) - -static int des_crypt_ecb_wrap( void *ctx, operation_t operation, - const unsigned char *input, unsigned char *output ) -{ - ((void) operation); - return des_crypt_ecb( (des_context *) ctx, input, output ); -} - -static int des3_crypt_ecb_wrap( void *ctx, operation_t operation, - const unsigned char *input, unsigned char *output ) -{ - ((void) operation); - return des3_crypt_ecb( (des3_context *) ctx, input, output ); -} - -static int des_crypt_cbc_wrap( void *ctx, operation_t operation, size_t length, - unsigned char *iv, const unsigned char *input, unsigned char *output ) -{ -#if defined(POLARSSL_CIPHER_MODE_CBC) - return des_crypt_cbc( (des_context *) ctx, operation, length, iv, input, - output ); -#else - ((void) ctx); - ((void) operation); - ((void) length); - ((void) iv); - ((void) input); - ((void) output); - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_CIPHER_MODE_CBC */ -} - -static int des3_crypt_cbc_wrap( void *ctx, operation_t operation, size_t length, - unsigned char *iv, const unsigned char *input, unsigned char *output ) -{ -#if defined(POLARSSL_CIPHER_MODE_CBC) - return des3_crypt_cbc( (des3_context *) ctx, operation, length, iv, input, - output ); -#else - ((void) ctx); - ((void) operation); - ((void) length); - ((void) iv); - ((void) input); - ((void) output); - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_CIPHER_MODE_CBC */ -} - -static int des_setkey_dec_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - ((void) key_length); - - return des_setkey_dec( (des_context *) ctx, key ); -} - -static int des_setkey_enc_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - ((void) key_length); - - return des_setkey_enc( (des_context *) ctx, key ); -} - -static int des3_set2key_dec_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - ((void) key_length); - - return des3_set2key_dec( (des3_context *) ctx, key ); -} - -static int des3_set2key_enc_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - ((void) key_length); - - return des3_set2key_enc( (des3_context *) ctx, key ); -} - -static int des3_set3key_dec_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - ((void) key_length); - - return des3_set3key_dec( (des3_context *) ctx, key ); -} - -static int des3_set3key_enc_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - ((void) key_length); - - return des3_set3key_enc( (des3_context *) ctx, key ); -} - -static void * des_ctx_alloc( void ) -{ - des_context *des = (des_context *) polarssl_malloc( sizeof( des_context ) ); - - if( des == NULL ) - return( NULL ); - - des_init( des ); - - return( des ); -} - -static void des_ctx_free( void *ctx ) -{ - des_free( (des_context *) ctx ); - polarssl_free( ctx ); -} - -static void * des3_ctx_alloc( void ) -{ - des3_context *des3; - des3 = (des3_context *) polarssl_malloc( sizeof( des3_context ) ); - - if( des3 == NULL ) - return( NULL ); - - des3_init( des3 ); - - return( des3 ); -} - -static void des3_ctx_free( void *ctx ) -{ - des3_free( (des3_context *) ctx ); - polarssl_free( ctx ); -} - -const cipher_base_t des_info = { - POLARSSL_CIPHER_ID_DES, - des_crypt_ecb_wrap, - des_crypt_cbc_wrap, - NULL, - NULL, - NULL, - des_setkey_enc_wrap, - des_setkey_dec_wrap, - des_ctx_alloc, - des_ctx_free -}; - -const cipher_info_t des_ecb_info = { - POLARSSL_CIPHER_DES_ECB, - POLARSSL_MODE_ECB, - POLARSSL_KEY_LENGTH_DES, - "DES-ECB", - 8, - 0, - 8, - &des_info -}; - -#if defined(POLARSSL_CIPHER_MODE_CBC) -const cipher_info_t des_cbc_info = { - POLARSSL_CIPHER_DES_CBC, - POLARSSL_MODE_CBC, - POLARSSL_KEY_LENGTH_DES, - "DES-CBC", - 8, - 0, - 8, - &des_info -}; -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -const cipher_base_t des_ede_info = { - POLARSSL_CIPHER_ID_DES, - des3_crypt_ecb_wrap, - des3_crypt_cbc_wrap, - NULL, - NULL, - NULL, - des3_set2key_enc_wrap, - des3_set2key_dec_wrap, - des3_ctx_alloc, - des3_ctx_free -}; - -const cipher_info_t des_ede_ecb_info = { - POLARSSL_CIPHER_DES_EDE_ECB, - POLARSSL_MODE_ECB, - POLARSSL_KEY_LENGTH_DES_EDE, - "DES-EDE-ECB", - 8, - 0, - 8, - &des_ede_info -}; - -#if defined(POLARSSL_CIPHER_MODE_CBC) -const cipher_info_t des_ede_cbc_info = { - POLARSSL_CIPHER_DES_EDE_CBC, - POLARSSL_MODE_CBC, - POLARSSL_KEY_LENGTH_DES_EDE, - "DES-EDE-CBC", - 8, - 0, - 8, - &des_ede_info -}; -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -const cipher_base_t des_ede3_info = { - POLARSSL_CIPHER_ID_DES, - des3_crypt_ecb_wrap, - des3_crypt_cbc_wrap, - NULL, - NULL, - NULL, - des3_set3key_enc_wrap, - des3_set3key_dec_wrap, - des3_ctx_alloc, - des3_ctx_free -}; - -const cipher_info_t des_ede3_ecb_info = { - POLARSSL_CIPHER_DES_EDE3_ECB, - POLARSSL_MODE_ECB, - POLARSSL_KEY_LENGTH_DES_EDE3, - "DES-EDE3-ECB", - 8, - 0, - 8, - &des_ede3_info -}; -#if defined(POLARSSL_CIPHER_MODE_CBC) -const cipher_info_t des_ede3_cbc_info = { - POLARSSL_CIPHER_DES_EDE3_CBC, - POLARSSL_MODE_CBC, - POLARSSL_KEY_LENGTH_DES_EDE3, - "DES-EDE3-CBC", - 8, - 0, - 8, - &des_ede3_info -}; -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_BLOWFISH_C) - -static int blowfish_crypt_ecb_wrap( void *ctx, operation_t operation, - const unsigned char *input, unsigned char *output ) -{ - return blowfish_crypt_ecb( (blowfish_context *) ctx, operation, input, - output ); -} - -static int blowfish_crypt_cbc_wrap( void *ctx, operation_t operation, - size_t length, unsigned char *iv, const unsigned char *input, - unsigned char *output ) -{ -#if defined(POLARSSL_CIPHER_MODE_CBC) - return blowfish_crypt_cbc( (blowfish_context *) ctx, operation, length, iv, - input, output ); -#else - ((void) ctx); - ((void) operation); - ((void) length); - ((void) iv); - ((void) input); - ((void) output); - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_CIPHER_MODE_CBC */ -} - -static int blowfish_crypt_cfb64_wrap( void *ctx, operation_t operation, - size_t length, size_t *iv_off, unsigned char *iv, - const unsigned char *input, unsigned char *output ) -{ -#if defined(POLARSSL_CIPHER_MODE_CFB) - return blowfish_crypt_cfb64( (blowfish_context *) ctx, operation, length, - iv_off, iv, input, output ); -#else - ((void) ctx); - ((void) operation); - ((void) length); - ((void) iv_off); - ((void) iv); - ((void) input); - ((void) output); - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_CIPHER_MODE_CFB */ -} - -static int blowfish_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off, - unsigned char *nonce_counter, unsigned char *stream_block, - const unsigned char *input, unsigned char *output ) -{ -#if defined(POLARSSL_CIPHER_MODE_CTR) - return blowfish_crypt_ctr( (blowfish_context *) ctx, length, nc_off, - nonce_counter, stream_block, input, output ); -#else - ((void) ctx); - ((void) length); - ((void) nc_off); - ((void) nonce_counter); - ((void) stream_block); - ((void) input); - ((void) output); - - return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_CIPHER_MODE_CTR */ -} - -static int blowfish_setkey_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - return blowfish_setkey( (blowfish_context *) ctx, key, key_length ); -} - -static void * blowfish_ctx_alloc( void ) -{ - blowfish_context *ctx; - ctx = (blowfish_context *) polarssl_malloc( sizeof( blowfish_context ) ); - - if( ctx == NULL ) - return( NULL ); - - blowfish_init( ctx ); - - return( ctx ); -} - -static void blowfish_ctx_free( void *ctx ) -{ - blowfish_free( (blowfish_context *) ctx ); - polarssl_free( ctx ); -} - -const cipher_base_t blowfish_info = { - POLARSSL_CIPHER_ID_BLOWFISH, - blowfish_crypt_ecb_wrap, - blowfish_crypt_cbc_wrap, - blowfish_crypt_cfb64_wrap, - blowfish_crypt_ctr_wrap, - NULL, - blowfish_setkey_wrap, - blowfish_setkey_wrap, - blowfish_ctx_alloc, - blowfish_ctx_free -}; - -const cipher_info_t blowfish_ecb_info = { - POLARSSL_CIPHER_BLOWFISH_ECB, - POLARSSL_MODE_ECB, - 128, - "BLOWFISH-ECB", - 8, - POLARSSL_CIPHER_VARIABLE_KEY_LEN, - 8, - &blowfish_info -}; - -#if defined(POLARSSL_CIPHER_MODE_CBC) -const cipher_info_t blowfish_cbc_info = { - POLARSSL_CIPHER_BLOWFISH_CBC, - POLARSSL_MODE_CBC, - 128, - "BLOWFISH-CBC", - 8, - POLARSSL_CIPHER_VARIABLE_KEY_LEN, - 8, - &blowfish_info -}; -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) -const cipher_info_t blowfish_cfb64_info = { - POLARSSL_CIPHER_BLOWFISH_CFB64, - POLARSSL_MODE_CFB, - 128, - "BLOWFISH-CFB64", - 8, - POLARSSL_CIPHER_VARIABLE_KEY_LEN, - 8, - &blowfish_info -}; -#endif /* POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) -const cipher_info_t blowfish_ctr_info = { - POLARSSL_CIPHER_BLOWFISH_CTR, - POLARSSL_MODE_CTR, - 128, - "BLOWFISH-CTR", - 8, - POLARSSL_CIPHER_VARIABLE_KEY_LEN, - 8, - &blowfish_info -}; -#endif /* POLARSSL_CIPHER_MODE_CTR */ -#endif /* POLARSSL_BLOWFISH_C */ - -#if defined(POLARSSL_ARC4_C) -static int arc4_crypt_stream_wrap( void *ctx, size_t length, - const unsigned char *input, - unsigned char *output ) -{ - return( arc4_crypt( (arc4_context *) ctx, length, input, output ) ); -} - -static int arc4_setkey_wrap( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - /* we get key_length in bits, arc4 expects it in bytes */ - if( key_length % 8 != 0 ) - return( POLARSSL_ERR_CIPHER_BAD_INPUT_DATA ); - - arc4_setup( (arc4_context *) ctx, key, key_length / 8 ); - return( 0 ); -} - -static void * arc4_ctx_alloc( void ) -{ - arc4_context *ctx; - ctx = (arc4_context *) polarssl_malloc( sizeof( arc4_context ) ); - - if( ctx == NULL ) - return( NULL ); - - arc4_init( ctx ); - - return( ctx ); -} - -static void arc4_ctx_free( void *ctx ) -{ - arc4_free( (arc4_context *) ctx ); - polarssl_free( ctx ); -} - -const cipher_base_t arc4_base_info = { - POLARSSL_CIPHER_ID_ARC4, - NULL, - NULL, - NULL, - NULL, - arc4_crypt_stream_wrap, - arc4_setkey_wrap, - arc4_setkey_wrap, - arc4_ctx_alloc, - arc4_ctx_free -}; - -const cipher_info_t arc4_128_info = { - POLARSSL_CIPHER_ARC4_128, - POLARSSL_MODE_STREAM, - 128, - "ARC4-128", - 0, - 0, - 1, - &arc4_base_info -}; -#endif /* POLARSSL_ARC4_C */ - -#if defined(POLARSSL_CIPHER_NULL_CIPHER) -static int null_crypt_stream( void *ctx, size_t length, - const unsigned char *input, - unsigned char *output ) -{ - ((void) ctx); - memmove( output, input, length ); - return( 0 ); -} - -static int null_setkey( void *ctx, const unsigned char *key, - unsigned int key_length ) -{ - ((void) ctx); - ((void) key); - ((void) key_length); - - return( 0 ); -} - -static void * null_ctx_alloc( void ) -{ - return( (void *) 1 ) -} - -static void null_ctx_free( void *ctx ) -{ - ((void) ctx); -} - -const cipher_base_t null_base_info = { - POLARSSL_CIPHER_ID_NULL, - NULL, - NULL, - NULL, - NULL, - null_crypt_stream, - null_setkey, - null_setkey, - null_ctx_alloc, - null_ctx_free -}; - -const cipher_info_t null_cipher_info = { - POLARSSL_CIPHER_NULL, - POLARSSL_MODE_STREAM, - 0, - "NULL", - 0, - 0, - 1, - &null_base_info -}; -#endif /* defined(POLARSSL_CIPHER_NULL_CIPHER) */ - -const cipher_definition_t cipher_definitions[] = -{ -#if defined(POLARSSL_AES_C) - { POLARSSL_CIPHER_AES_128_ECB, &aes_128_ecb_info }, - { POLARSSL_CIPHER_AES_192_ECB, &aes_192_ecb_info }, - { POLARSSL_CIPHER_AES_256_ECB, &aes_256_ecb_info }, -#if defined(POLARSSL_CIPHER_MODE_CBC) - { POLARSSL_CIPHER_AES_128_CBC, &aes_128_cbc_info }, - { POLARSSL_CIPHER_AES_192_CBC, &aes_192_cbc_info }, - { POLARSSL_CIPHER_AES_256_CBC, &aes_256_cbc_info }, -#endif -#if defined(POLARSSL_CIPHER_MODE_CFB) - { POLARSSL_CIPHER_AES_128_CFB128, &aes_128_cfb128_info }, - { POLARSSL_CIPHER_AES_192_CFB128, &aes_192_cfb128_info }, - { POLARSSL_CIPHER_AES_256_CFB128, &aes_256_cfb128_info }, -#endif -#if defined(POLARSSL_CIPHER_MODE_CTR) - { POLARSSL_CIPHER_AES_128_CTR, &aes_128_ctr_info }, - { POLARSSL_CIPHER_AES_192_CTR, &aes_192_ctr_info }, - { POLARSSL_CIPHER_AES_256_CTR, &aes_256_ctr_info }, -#endif -#if defined(POLARSSL_GCM_C) - { POLARSSL_CIPHER_AES_128_GCM, &aes_128_gcm_info }, - { POLARSSL_CIPHER_AES_192_GCM, &aes_192_gcm_info }, - { POLARSSL_CIPHER_AES_256_GCM, &aes_256_gcm_info }, -#endif -#if defined(POLARSSL_CCM_C) - { POLARSSL_CIPHER_AES_128_CCM, &aes_128_ccm_info }, - { POLARSSL_CIPHER_AES_192_CCM, &aes_192_ccm_info }, - { POLARSSL_CIPHER_AES_256_CCM, &aes_256_ccm_info }, -#endif -#endif /* POLARSSL_AES_C */ - -#if defined(POLARSSL_ARC4_C) - { POLARSSL_CIPHER_ARC4_128, &arc4_128_info }, -#endif - -#if defined(POLARSSL_BLOWFISH_C) - { POLARSSL_CIPHER_BLOWFISH_ECB, &blowfish_ecb_info }, -#if defined(POLARSSL_CIPHER_MODE_CBC) - { POLARSSL_CIPHER_BLOWFISH_CBC, &blowfish_cbc_info }, -#endif -#if defined(POLARSSL_CIPHER_MODE_CFB) - { POLARSSL_CIPHER_BLOWFISH_CFB64, &blowfish_cfb64_info }, -#endif -#if defined(POLARSSL_CIPHER_MODE_CTR) - { POLARSSL_CIPHER_BLOWFISH_CTR, &blowfish_ctr_info }, -#endif -#endif /* POLARSSL_BLOWFISH_C */ - -#if defined(POLARSSL_CAMELLIA_C) - { POLARSSL_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info }, - { POLARSSL_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info }, - { POLARSSL_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info }, -#if defined(POLARSSL_CIPHER_MODE_CBC) - { POLARSSL_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info }, - { POLARSSL_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info }, - { POLARSSL_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info }, -#endif -#if defined(POLARSSL_CIPHER_MODE_CFB) - { POLARSSL_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info }, - { POLARSSL_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info }, - { POLARSSL_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info }, -#endif -#if defined(POLARSSL_CIPHER_MODE_CTR) - { POLARSSL_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info }, - { POLARSSL_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info }, - { POLARSSL_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info }, -#endif -#if defined(POLARSSL_GCM_C) - { POLARSSL_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info }, - { POLARSSL_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info }, - { POLARSSL_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info }, -#endif -#if defined(POLARSSL_CCM_C) - { POLARSSL_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info }, - { POLARSSL_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info }, - { POLARSSL_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info }, -#endif -#endif /* POLARSSL_CAMELLIA_C */ - -#if defined(POLARSSL_DES_C) - { POLARSSL_CIPHER_DES_ECB, &des_ecb_info }, - { POLARSSL_CIPHER_DES_EDE_ECB, &des_ede_ecb_info }, - { POLARSSL_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info }, -#if defined(POLARSSL_CIPHER_MODE_CBC) - { POLARSSL_CIPHER_DES_CBC, &des_cbc_info }, - { POLARSSL_CIPHER_DES_EDE_CBC, &des_ede_cbc_info }, - { POLARSSL_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info }, -#endif -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_CIPHER_NULL_CIPHER) - { POLARSSL_CIPHER_NULL, &null_cipher_info }, -#endif /* POLARSSL_CIPHER_NULL_CIPHER */ - - { (cipher_type_t)0, NULL } -}; - -#define NUM_CIPHERS sizeof cipher_definitions / sizeof cipher_definitions[0] -int supported_ciphers[NUM_CIPHERS]; - -#endif /* POLARSSL_CIPHER_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ctr_drbg.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ctr_drbg.c deleted file mode 100644 index 96ee4f1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ctr_drbg.c +++ /dev/null @@ -1,549 +0,0 @@ -/* - * CTR_DRBG implementation based on AES-256 (NIST SP 800-90) - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The NIST SP 800-90 DRBGs are described in the following publucation. - * - * http://csrc.nist.gov/publications/nistpubs/800-90/SP800-90revised_March2007.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_CTR_DRBG_C) - -#include "polarssl/ctr_drbg.h" - -#if defined(POLARSSL_FS_IO) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * Non-public function wrapped by ctr_crbg_init(). Necessary to allow NIST - * tests to succeed (which require known length fixed entropy) - */ -int ctr_drbg_init_entropy_len( - ctr_drbg_context *ctx, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len, - size_t entropy_len ) -{ - int ret; - unsigned char key[CTR_DRBG_KEYSIZE]; - - memset( ctx, 0, sizeof(ctr_drbg_context) ); - memset( key, 0, CTR_DRBG_KEYSIZE ); - - aes_init( &ctx->aes_ctx ); - - ctx->f_entropy = f_entropy; - ctx->p_entropy = p_entropy; - - ctx->entropy_len = entropy_len; - ctx->reseed_interval = CTR_DRBG_RESEED_INTERVAL; - - /* - * Initialize with an empty key - */ - aes_setkey_enc( &ctx->aes_ctx, key, CTR_DRBG_KEYBITS ); - - if( ( ret = ctr_drbg_reseed( ctx, custom, len ) ) != 0 ) - return( ret ); - - return( 0 ); -} - -int ctr_drbg_init( ctr_drbg_context *ctx, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len ) -{ - return( ctr_drbg_init_entropy_len( ctx, f_entropy, p_entropy, custom, len, - CTR_DRBG_ENTROPY_LEN ) ); -} - -void ctr_drbg_free( ctr_drbg_context *ctx ) -{ - if( ctx == NULL ) - return; - - aes_free( &ctx->aes_ctx ); - polarssl_zeroize( ctx, sizeof( ctr_drbg_context ) ); -} - -void ctr_drbg_set_prediction_resistance( ctr_drbg_context *ctx, int resistance ) -{ - ctx->prediction_resistance = resistance; -} - -void ctr_drbg_set_entropy_len( ctr_drbg_context *ctx, size_t len ) -{ - ctx->entropy_len = len; -} - -void ctr_drbg_set_reseed_interval( ctr_drbg_context *ctx, int interval ) -{ - ctx->reseed_interval = interval; -} - -static int block_cipher_df( unsigned char *output, - const unsigned char *data, size_t data_len ) -{ - unsigned char buf[CTR_DRBG_MAX_SEED_INPUT + CTR_DRBG_BLOCKSIZE + 16]; - unsigned char tmp[CTR_DRBG_SEEDLEN]; - unsigned char key[CTR_DRBG_KEYSIZE]; - unsigned char chain[CTR_DRBG_BLOCKSIZE]; - unsigned char *p, *iv; - aes_context aes_ctx; - - int i, j; - size_t buf_len, use_len; - - memset( buf, 0, CTR_DRBG_MAX_SEED_INPUT + CTR_DRBG_BLOCKSIZE + 16 ); - aes_init( &aes_ctx ); - - /* - * Construct IV (16 bytes) and S in buffer - * IV = Counter (in 32-bits) padded to 16 with zeroes - * S = Length input string (in 32-bits) || Length of output (in 32-bits) || - * data || 0x80 - * (Total is padded to a multiple of 16-bytes with zeroes) - */ - p = buf + CTR_DRBG_BLOCKSIZE; - *p++ = ( data_len >> 24 ) & 0xff; - *p++ = ( data_len >> 16 ) & 0xff; - *p++ = ( data_len >> 8 ) & 0xff; - *p++ = ( data_len ) & 0xff; - p += 3; - *p++ = CTR_DRBG_SEEDLEN; - memcpy( p, data, data_len ); - p[data_len] = 0x80; - - buf_len = CTR_DRBG_BLOCKSIZE + 8 + data_len + 1; - - for( i = 0; i < CTR_DRBG_KEYSIZE; i++ ) - key[i] = i; - - aes_setkey_enc( &aes_ctx, key, CTR_DRBG_KEYBITS ); - - /* - * Reduce data to POLARSSL_CTR_DRBG_SEEDLEN bytes of data - */ - for( j = 0; j < CTR_DRBG_SEEDLEN; j += CTR_DRBG_BLOCKSIZE ) - { - p = buf; - memset( chain, 0, CTR_DRBG_BLOCKSIZE ); - use_len = buf_len; - - while( use_len > 0 ) - { - for( i = 0; i < CTR_DRBG_BLOCKSIZE; i++ ) - chain[i] ^= p[i]; - p += CTR_DRBG_BLOCKSIZE; - use_len -= ( use_len >= CTR_DRBG_BLOCKSIZE ) ? - CTR_DRBG_BLOCKSIZE : use_len; - - aes_crypt_ecb( &aes_ctx, AES_ENCRYPT, chain, chain ); - } - - memcpy( tmp + j, chain, CTR_DRBG_BLOCKSIZE ); - - /* - * Update IV - */ - buf[3]++; - } - - /* - * Do final encryption with reduced data - */ - aes_setkey_enc( &aes_ctx, tmp, CTR_DRBG_KEYBITS ); - iv = tmp + CTR_DRBG_KEYSIZE; - p = output; - - for( j = 0; j < CTR_DRBG_SEEDLEN; j += CTR_DRBG_BLOCKSIZE ) - { - aes_crypt_ecb( &aes_ctx, AES_ENCRYPT, iv, iv ); - memcpy( p, iv, CTR_DRBG_BLOCKSIZE ); - p += CTR_DRBG_BLOCKSIZE; - } - - aes_free( &aes_ctx ); - - return( 0 ); -} - -static int ctr_drbg_update_internal( ctr_drbg_context *ctx, - const unsigned char data[CTR_DRBG_SEEDLEN] ) -{ - unsigned char tmp[CTR_DRBG_SEEDLEN]; - unsigned char *p = tmp; - int i, j; - - memset( tmp, 0, CTR_DRBG_SEEDLEN ); - - for( j = 0; j < CTR_DRBG_SEEDLEN; j += CTR_DRBG_BLOCKSIZE ) - { - /* - * Increase counter - */ - for( i = CTR_DRBG_BLOCKSIZE; i > 0; i-- ) - if( ++ctx->counter[i - 1] != 0 ) - break; - - /* - * Crypt counter block - */ - aes_crypt_ecb( &ctx->aes_ctx, AES_ENCRYPT, ctx->counter, p ); - - p += CTR_DRBG_BLOCKSIZE; - } - - for( i = 0; i < CTR_DRBG_SEEDLEN; i++ ) - tmp[i] ^= data[i]; - - /* - * Update key and counter - */ - aes_setkey_enc( &ctx->aes_ctx, tmp, CTR_DRBG_KEYBITS ); - memcpy( ctx->counter, tmp + CTR_DRBG_KEYSIZE, CTR_DRBG_BLOCKSIZE ); - - return( 0 ); -} - -void ctr_drbg_update( ctr_drbg_context *ctx, - const unsigned char *additional, size_t add_len ) -{ - unsigned char add_input[CTR_DRBG_SEEDLEN]; - - if( add_len > 0 ) - { - block_cipher_df( add_input, additional, add_len ); - ctr_drbg_update_internal( ctx, add_input ); - } -} - -int ctr_drbg_reseed( ctr_drbg_context *ctx, - const unsigned char *additional, size_t len ) -{ - unsigned char seed[CTR_DRBG_MAX_SEED_INPUT]; - size_t seedlen = 0; - - if( ctx->entropy_len + len > CTR_DRBG_MAX_SEED_INPUT ) - return( POLARSSL_ERR_CTR_DRBG_INPUT_TOO_BIG ); - - memset( seed, 0, CTR_DRBG_MAX_SEED_INPUT ); - - /* - * Gather entropy_len bytes of entropy to seed state - */ - if( 0 != ctx->f_entropy( ctx->p_entropy, seed, - ctx->entropy_len ) ) - { - return( POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED ); - } - - seedlen += ctx->entropy_len; - - /* - * Add additional data - */ - if( additional && len ) - { - memcpy( seed + seedlen, additional, len ); - seedlen += len; - } - - /* - * Reduce to 384 bits - */ - block_cipher_df( seed, seed, seedlen ); - - /* - * Update state - */ - ctr_drbg_update_internal( ctx, seed ); - ctx->reseed_counter = 1; - - return( 0 ); -} - -int ctr_drbg_random_with_add( void *p_rng, - unsigned char *output, size_t output_len, - const unsigned char *additional, size_t add_len ) -{ - int ret = 0; - ctr_drbg_context *ctx = (ctr_drbg_context *) p_rng; - unsigned char add_input[CTR_DRBG_SEEDLEN]; - unsigned char *p = output; - unsigned char tmp[CTR_DRBG_BLOCKSIZE]; - int i; - size_t use_len; - - if( output_len > CTR_DRBG_MAX_REQUEST ) - return( POLARSSL_ERR_CTR_DRBG_REQUEST_TOO_BIG ); - - if( add_len > CTR_DRBG_MAX_INPUT ) - return( POLARSSL_ERR_CTR_DRBG_INPUT_TOO_BIG ); - - memset( add_input, 0, CTR_DRBG_SEEDLEN ); - - if( ctx->reseed_counter > ctx->reseed_interval || - ctx->prediction_resistance ) - { - if( ( ret = ctr_drbg_reseed( ctx, additional, add_len ) ) != 0 ) - return( ret ); - - add_len = 0; - } - - if( add_len > 0 ) - { - block_cipher_df( add_input, additional, add_len ); - ctr_drbg_update_internal( ctx, add_input ); - } - - while( output_len > 0 ) - { - /* - * Increase counter - */ - for( i = CTR_DRBG_BLOCKSIZE; i > 0; i-- ) - if( ++ctx->counter[i - 1] != 0 ) - break; - - /* - * Crypt counter block - */ - aes_crypt_ecb( &ctx->aes_ctx, AES_ENCRYPT, ctx->counter, tmp ); - - use_len = ( output_len > CTR_DRBG_BLOCKSIZE ) ? CTR_DRBG_BLOCKSIZE : - output_len; - /* - * Copy random block to destination - */ - memcpy( p, tmp, use_len ); - p += use_len; - output_len -= use_len; - } - - ctr_drbg_update_internal( ctx, add_input ); - - ctx->reseed_counter++; - - return( 0 ); -} - -int ctr_drbg_random( void *p_rng, unsigned char *output, size_t output_len ) -{ - return ctr_drbg_random_with_add( p_rng, output, output_len, NULL, 0 ); -} - -#if defined(POLARSSL_FS_IO) -int ctr_drbg_write_seed_file( ctr_drbg_context *ctx, const char *path ) -{ - int ret = POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR; - FILE *f; - unsigned char buf[ CTR_DRBG_MAX_INPUT ]; - - if( ( f = fopen( path, "wb" ) ) == NULL ) - return( POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR ); - - if( ( ret = ctr_drbg_random( ctx, buf, CTR_DRBG_MAX_INPUT ) ) != 0 ) - goto exit; - - if( fwrite( buf, 1, CTR_DRBG_MAX_INPUT, f ) != CTR_DRBG_MAX_INPUT ) - { - ret = POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR; - goto exit; - } - - ret = 0; - -exit: - fclose( f ); - return( ret ); -} - -int ctr_drbg_update_seed_file( ctr_drbg_context *ctx, const char *path ) -{ - FILE *f; - size_t n; - unsigned char buf[ CTR_DRBG_MAX_INPUT ]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR ); - - fseek( f, 0, SEEK_END ); - n = (size_t) ftell( f ); - fseek( f, 0, SEEK_SET ); - - if( n > CTR_DRBG_MAX_INPUT ) - { - fclose( f ); - return( POLARSSL_ERR_CTR_DRBG_INPUT_TOO_BIG ); - } - - if( fread( buf, 1, n, f ) != n ) - { - fclose( f ); - return( POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR ); - } - - fclose( f ); - - ctr_drbg_update( ctx, buf, n ); - - return( ctr_drbg_write_seed_file( ctx, path ) ); -} -#endif /* POLARSSL_FS_IO */ - -#if defined(POLARSSL_SELF_TEST) - -#include - -static unsigned char entropy_source_pr[96] = - { 0xc1, 0x80, 0x81, 0xa6, 0x5d, 0x44, 0x02, 0x16, - 0x19, 0xb3, 0xf1, 0x80, 0xb1, 0xc9, 0x20, 0x02, - 0x6a, 0x54, 0x6f, 0x0c, 0x70, 0x81, 0x49, 0x8b, - 0x6e, 0xa6, 0x62, 0x52, 0x6d, 0x51, 0xb1, 0xcb, - 0x58, 0x3b, 0xfa, 0xd5, 0x37, 0x5f, 0xfb, 0xc9, - 0xff, 0x46, 0xd2, 0x19, 0xc7, 0x22, 0x3e, 0x95, - 0x45, 0x9d, 0x82, 0xe1, 0xe7, 0x22, 0x9f, 0x63, - 0x31, 0x69, 0xd2, 0x6b, 0x57, 0x47, 0x4f, 0xa3, - 0x37, 0xc9, 0x98, 0x1c, 0x0b, 0xfb, 0x91, 0x31, - 0x4d, 0x55, 0xb9, 0xe9, 0x1c, 0x5a, 0x5e, 0xe4, - 0x93, 0x92, 0xcf, 0xc5, 0x23, 0x12, 0xd5, 0x56, - 0x2c, 0x4a, 0x6e, 0xff, 0xdc, 0x10, 0xd0, 0x68 }; - -static unsigned char entropy_source_nopr[64] = - { 0x5a, 0x19, 0x4d, 0x5e, 0x2b, 0x31, 0x58, 0x14, - 0x54, 0xde, 0xf6, 0x75, 0xfb, 0x79, 0x58, 0xfe, - 0xc7, 0xdb, 0x87, 0x3e, 0x56, 0x89, 0xfc, 0x9d, - 0x03, 0x21, 0x7c, 0x68, 0xd8, 0x03, 0x38, 0x20, - 0xf9, 0xe6, 0x5e, 0x04, 0xd8, 0x56, 0xf3, 0xa9, - 0xc4, 0x4a, 0x4c, 0xbd, 0xc1, 0xd0, 0x08, 0x46, - 0xf5, 0x98, 0x3d, 0x77, 0x1c, 0x1b, 0x13, 0x7e, - 0x4e, 0x0f, 0x9d, 0x8e, 0xf4, 0x09, 0xf9, 0x2e }; - -static const unsigned char nonce_pers_pr[16] = - { 0xd2, 0x54, 0xfc, 0xff, 0x02, 0x1e, 0x69, 0xd2, - 0x29, 0xc9, 0xcf, 0xad, 0x85, 0xfa, 0x48, 0x6c }; - -static const unsigned char nonce_pers_nopr[16] = - { 0x1b, 0x54, 0xb8, 0xff, 0x06, 0x42, 0xbf, 0xf5, - 0x21, 0xf1, 0x5c, 0x1c, 0x0b, 0x66, 0x5f, 0x3f }; - -static const unsigned char result_pr[16] = - { 0x34, 0x01, 0x16, 0x56, 0xb4, 0x29, 0x00, 0x8f, - 0x35, 0x63, 0xec, 0xb5, 0xf2, 0x59, 0x07, 0x23 }; - -static const unsigned char result_nopr[16] = - { 0xa0, 0x54, 0x30, 0x3d, 0x8a, 0x7e, 0xa9, 0x88, - 0x9d, 0x90, 0x3e, 0x07, 0x7c, 0x6f, 0x21, 0x8f }; - -static size_t test_offset; -static int ctr_drbg_self_test_entropy( void *data, unsigned char *buf, - size_t len ) -{ - const unsigned char *p = data; - memcpy( buf, p + test_offset, len ); - test_offset += len; - return( 0 ); -} - -#define CHK( c ) if( (c) != 0 ) \ - { \ - if( verbose != 0 ) \ - polarssl_printf( "failed\n" ); \ - return( 1 ); \ - } - -/* - * Checkup routine - */ -int ctr_drbg_self_test( int verbose ) -{ - ctr_drbg_context ctx; - unsigned char buf[16]; - - /* - * Based on a NIST CTR_DRBG test vector (PR = True) - */ - if( verbose != 0 ) - polarssl_printf( " CTR_DRBG (PR = TRUE) : " ); - - test_offset = 0; - CHK( ctr_drbg_init_entropy_len( &ctx, ctr_drbg_self_test_entropy, - entropy_source_pr, nonce_pers_pr, 16, 32 ) ); - ctr_drbg_set_prediction_resistance( &ctx, CTR_DRBG_PR_ON ); - CHK( ctr_drbg_random( &ctx, buf, CTR_DRBG_BLOCKSIZE ) ); - CHK( ctr_drbg_random( &ctx, buf, CTR_DRBG_BLOCKSIZE ) ); - CHK( memcmp( buf, result_pr, CTR_DRBG_BLOCKSIZE ) ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - /* - * Based on a NIST CTR_DRBG test vector (PR = FALSE) - */ - if( verbose != 0 ) - polarssl_printf( " CTR_DRBG (PR = FALSE): " ); - - test_offset = 0; - CHK( ctr_drbg_init_entropy_len( &ctx, ctr_drbg_self_test_entropy, - entropy_source_nopr, nonce_pers_nopr, 16, 32 ) ); - CHK( ctr_drbg_random( &ctx, buf, 16 ) ); - CHK( ctr_drbg_reseed( &ctx, NULL, 0 ) ); - CHK( ctr_drbg_random( &ctx, buf, 16 ) ); - CHK( memcmp( buf, result_nopr, 16 ) ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_CTR_DRBG_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/debug.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/debug.c deleted file mode 100644 index a81f502..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/debug.c +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Debugging routines - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_DEBUG_C) - -#include "polarssl/debug.h" - -#include -#include - -#if defined(EFIX64) || defined(EFI32) -#include -#endif - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#if !defined snprintf -#define snprintf _snprintf -#endif - -#if !defined vsnprintf -#define vsnprintf _vsnprintf -#endif -#endif /* _MSC_VER */ - -static int debug_log_mode = POLARSSL_DEBUG_DFL_MODE; -static int debug_threshold = 0; - -void debug_set_log_mode( int log_mode ) -{ - debug_log_mode = log_mode; -} - -void debug_set_threshold( int threshold ) -{ - debug_threshold = threshold; -} - -char *debug_fmt( const char *format, ... ) -{ - va_list argp; - static char str[512]; - int maxlen = sizeof( str ) - 1; - - va_start( argp, format ); - vsnprintf( str, maxlen, format, argp ); - va_end( argp ); - - str[maxlen] = '\0'; - return( str ); -} - -void debug_print_msg( const ssl_context *ssl, int level, - const char *file, int line, const char *text ) -{ - char str[512]; - int maxlen = sizeof( str ) - 1; - - if( ssl->f_dbg == NULL || level > debug_threshold ) - return; - - if( debug_log_mode == POLARSSL_DEBUG_LOG_RAW ) - { - ssl->f_dbg( ssl->p_dbg, level, text ); - return; - } - - snprintf( str, maxlen, "%s(%04d): %s\n", file, line, text ); - str[maxlen] = '\0'; - ssl->f_dbg( ssl->p_dbg, level, str ); -} - -void debug_print_ret( const ssl_context *ssl, int level, - const char *file, int line, - const char *text, int ret ) -{ - char str[512]; - int maxlen = sizeof( str ) - 1; - size_t idx = 0; - - if( ssl->f_dbg == NULL || level > debug_threshold ) - return; - - if( debug_log_mode == POLARSSL_DEBUG_LOG_FULL ) - idx = snprintf( str, maxlen, "%s(%04d): ", file, line ); - - snprintf( str + idx, maxlen - idx, "%s() returned %d (-0x%04x)\n", - text, ret, -ret ); - - str[maxlen] = '\0'; - ssl->f_dbg( ssl->p_dbg, level, str ); -} - -void debug_print_buf( const ssl_context *ssl, int level, - const char *file, int line, const char *text, - unsigned char *buf, size_t len ) -{ - char str[512]; - size_t i, maxlen = sizeof( str ) - 1, idx = 0; - - if( ssl->f_dbg == NULL || level > debug_threshold ) - return; - - if( debug_log_mode == POLARSSL_DEBUG_LOG_FULL ) - idx = snprintf( str, maxlen, "%s(%04d): ", file, line ); - - snprintf( str + idx, maxlen - idx, "dumping '%s' (%u bytes)\n", - text, (unsigned int) len ); - - str[maxlen] = '\0'; - ssl->f_dbg( ssl->p_dbg, level, str ); - - idx = 0; - for( i = 0; i < len; i++ ) - { - if( i >= 4096 ) - break; - - if( i % 16 == 0 ) - { - if( i > 0 ) - { - snprintf( str + idx, maxlen - idx, "\n" ); - ssl->f_dbg( ssl->p_dbg, level, str ); - idx = 0; - } - - if( debug_log_mode == POLARSSL_DEBUG_LOG_FULL ) - idx = snprintf( str, maxlen, "%s(%04d): ", file, line ); - - idx += snprintf( str + idx, maxlen - idx, "%04x: ", - (unsigned int) i ); - - } - - idx += snprintf( str + idx, maxlen - idx, " %02x", - (unsigned int) buf[i] ); - } - - if( len > 0 ) - { - snprintf( str + idx, maxlen - idx, "\n" ); - ssl->f_dbg( ssl->p_dbg, level, str ); - } -} - -#if defined(POLARSSL_ECP_C) -void debug_print_ecp( const ssl_context *ssl, int level, - const char *file, int line, - const char *text, const ecp_point *X ) -{ - char str[512]; - int maxlen = sizeof( str ) - 1; - - if( ssl->f_dbg == NULL || level > debug_threshold ) - return; - - snprintf( str, maxlen, "%s(X)", text ); - str[maxlen] = '\0'; - debug_print_mpi( ssl, level, file, line, str, &X->X ); - - snprintf( str, maxlen, "%s(Y)", text ); - str[maxlen] = '\0'; - debug_print_mpi( ssl, level, file, line, str, &X->Y ); -} -#endif /* POLARSSL_ECP_C */ - -#if defined(POLARSSL_BIGNUM_C) -void debug_print_mpi( const ssl_context *ssl, int level, - const char *file, int line, - const char *text, const mpi *X ) -{ - char str[512]; - int j, k, maxlen = sizeof( str ) - 1, zeros = 1; - size_t i, n, idx = 0; - - if( ssl->f_dbg == NULL || X == NULL || level > debug_threshold ) - return; - - for( n = X->n - 1; n > 0; n-- ) - if( X->p[n] != 0 ) - break; - - for( j = ( sizeof(t_uint) << 3 ) - 1; j >= 0; j-- ) - if( ( ( X->p[n] >> j ) & 1 ) != 0 ) - break; - - if( debug_log_mode == POLARSSL_DEBUG_LOG_FULL ) - idx = snprintf( str, maxlen, "%s(%04d): ", file, line ); - - snprintf( str + idx, maxlen - idx, "value of '%s' (%d bits) is:\n", - text, (int) ( ( n * ( sizeof(t_uint) << 3 ) ) + j + 1 ) ); - - str[maxlen] = '\0'; - ssl->f_dbg( ssl->p_dbg, level, str ); - - idx = 0; - for( i = n + 1, j = 0; i > 0; i-- ) - { - if( zeros && X->p[i - 1] == 0 ) - continue; - - for( k = sizeof( t_uint ) - 1; k >= 0; k-- ) - { - if( zeros && ( ( X->p[i - 1] >> ( k << 3 ) ) & 0xFF ) == 0 ) - continue; - else - zeros = 0; - - if( j % 16 == 0 ) - { - if( j > 0 ) - { - snprintf( str + idx, maxlen - idx, "\n" ); - ssl->f_dbg( ssl->p_dbg, level, str ); - idx = 0; - } - - if( debug_log_mode == POLARSSL_DEBUG_LOG_FULL ) - idx = snprintf( str, maxlen, "%s(%04d): ", file, line ); - } - - idx += snprintf( str + idx, maxlen - idx, " %02x", (unsigned int) - ( X->p[i - 1] >> ( k << 3 ) ) & 0xFF ); - - j++; - } - - } - - if( zeros == 1 ) - { - if( debug_log_mode == POLARSSL_DEBUG_LOG_FULL ) - { - idx = snprintf( str, maxlen, "%s(%04d): ", file, line ); - - } - idx += snprintf( str + idx, maxlen - idx, " 00" ); - } - - snprintf( str + idx, maxlen - idx, "\n" ); - ssl->f_dbg( ssl->p_dbg, level, str ); -} -#endif /* POLARSSL_BIGNUM_C */ - -#if defined(POLARSSL_X509_CRT_PARSE_C) -static void debug_print_pk( const ssl_context *ssl, int level, - const char *file, int line, - const char *text, const pk_context *pk ) -{ - size_t i; - pk_debug_item items[POLARSSL_PK_DEBUG_MAX_ITEMS]; - char name[16]; - - memset( items, 0, sizeof( items ) ); - - if( pk_debug( pk, items ) != 0 ) - { - debug_print_msg( ssl, level, file, line, "invalid PK context" ); - return; - } - - for( i = 0; i < POLARSSL_PK_DEBUG_MAX_ITEMS; i++ ) - { - if( items[i].type == POLARSSL_PK_DEBUG_NONE ) - return; - - snprintf( name, sizeof( name ), "%s%s", text, items[i].name ); - name[sizeof( name ) - 1] = '\0'; - - if( items[i].type == POLARSSL_PK_DEBUG_MPI ) - debug_print_mpi( ssl, level, file, line, name, items[i].value ); - else -#if defined(POLARSSL_ECP_C) - if( items[i].type == POLARSSL_PK_DEBUG_ECP ) - debug_print_ecp( ssl, level, file, line, name, items[i].value ); - else -#endif - debug_print_msg( ssl, level, file, line, "should not happen" ); - } -} - -void debug_print_crt( const ssl_context *ssl, int level, - const char *file, int line, - const char *text, const x509_crt *crt ) -{ - char str[1024], prefix[64]; - int i = 0, maxlen = sizeof( prefix ) - 1, idx = 0; - - if( ssl->f_dbg == NULL || crt == NULL || level > debug_threshold ) - return; - - if( debug_log_mode == POLARSSL_DEBUG_LOG_FULL ) - { - snprintf( prefix, maxlen, "%s(%04d): ", file, line ); - prefix[maxlen] = '\0'; - } - else - prefix[0] = '\0'; - - maxlen = sizeof( str ) - 1; - - while( crt != NULL ) - { - char buf[1024]; - x509_crt_info( buf, sizeof( buf ) - 1, prefix, crt ); - - if( debug_log_mode == POLARSSL_DEBUG_LOG_FULL ) - idx = snprintf( str, maxlen, "%s(%04d): ", file, line ); - - snprintf( str + idx, maxlen - idx, "%s #%d:\n%s", - text, ++i, buf ); - - str[maxlen] = '\0'; - ssl->f_dbg( ssl->p_dbg, level, str ); - - debug_print_pk( ssl, level, file, line, "crt->", &crt->pk ); - - crt = crt->next; - } -} -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -#endif /* POLARSSL_DEBUG_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/des.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/des.c deleted file mode 100644 index 6461167..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/des.c +++ /dev/null @@ -1,1230 +0,0 @@ -/* - * FIPS-46-3 compliant Triple-DES implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * DES, on which TDES is based, was originally designed by Horst Feistel - * at IBM in 1974, and was adopted as a standard by NIST (formerly NBS). - * - * http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif -#ifdef RTL_HW_CRYPTO -#include -#endif -#if defined(POLARSSL_DES_C) - -#include "polarssl/des.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -#if !defined(POLARSSL_DES_ALT) - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - -/* - * Expanded DES S-boxes - */ -static const uint32_t SB1[64] = -{ - 0x01010400, 0x00000000, 0x00010000, 0x01010404, - 0x01010004, 0x00010404, 0x00000004, 0x00010000, - 0x00000400, 0x01010400, 0x01010404, 0x00000400, - 0x01000404, 0x01010004, 0x01000000, 0x00000004, - 0x00000404, 0x01000400, 0x01000400, 0x00010400, - 0x00010400, 0x01010000, 0x01010000, 0x01000404, - 0x00010004, 0x01000004, 0x01000004, 0x00010004, - 0x00000000, 0x00000404, 0x00010404, 0x01000000, - 0x00010000, 0x01010404, 0x00000004, 0x01010000, - 0x01010400, 0x01000000, 0x01000000, 0x00000400, - 0x01010004, 0x00010000, 0x00010400, 0x01000004, - 0x00000400, 0x00000004, 0x01000404, 0x00010404, - 0x01010404, 0x00010004, 0x01010000, 0x01000404, - 0x01000004, 0x00000404, 0x00010404, 0x01010400, - 0x00000404, 0x01000400, 0x01000400, 0x00000000, - 0x00010004, 0x00010400, 0x00000000, 0x01010004 -}; - -static const uint32_t SB2[64] = -{ - 0x80108020, 0x80008000, 0x00008000, 0x00108020, - 0x00100000, 0x00000020, 0x80100020, 0x80008020, - 0x80000020, 0x80108020, 0x80108000, 0x80000000, - 0x80008000, 0x00100000, 0x00000020, 0x80100020, - 0x00108000, 0x00100020, 0x80008020, 0x00000000, - 0x80000000, 0x00008000, 0x00108020, 0x80100000, - 0x00100020, 0x80000020, 0x00000000, 0x00108000, - 0x00008020, 0x80108000, 0x80100000, 0x00008020, - 0x00000000, 0x00108020, 0x80100020, 0x00100000, - 0x80008020, 0x80100000, 0x80108000, 0x00008000, - 0x80100000, 0x80008000, 0x00000020, 0x80108020, - 0x00108020, 0x00000020, 0x00008000, 0x80000000, - 0x00008020, 0x80108000, 0x00100000, 0x80000020, - 0x00100020, 0x80008020, 0x80000020, 0x00100020, - 0x00108000, 0x00000000, 0x80008000, 0x00008020, - 0x80000000, 0x80100020, 0x80108020, 0x00108000 -}; - -static const uint32_t SB3[64] = -{ - 0x00000208, 0x08020200, 0x00000000, 0x08020008, - 0x08000200, 0x00000000, 0x00020208, 0x08000200, - 0x00020008, 0x08000008, 0x08000008, 0x00020000, - 0x08020208, 0x00020008, 0x08020000, 0x00000208, - 0x08000000, 0x00000008, 0x08020200, 0x00000200, - 0x00020200, 0x08020000, 0x08020008, 0x00020208, - 0x08000208, 0x00020200, 0x00020000, 0x08000208, - 0x00000008, 0x08020208, 0x00000200, 0x08000000, - 0x08020200, 0x08000000, 0x00020008, 0x00000208, - 0x00020000, 0x08020200, 0x08000200, 0x00000000, - 0x00000200, 0x00020008, 0x08020208, 0x08000200, - 0x08000008, 0x00000200, 0x00000000, 0x08020008, - 0x08000208, 0x00020000, 0x08000000, 0x08020208, - 0x00000008, 0x00020208, 0x00020200, 0x08000008, - 0x08020000, 0x08000208, 0x00000208, 0x08020000, - 0x00020208, 0x00000008, 0x08020008, 0x00020200 -}; - -static const uint32_t SB4[64] = -{ - 0x00802001, 0x00002081, 0x00002081, 0x00000080, - 0x00802080, 0x00800081, 0x00800001, 0x00002001, - 0x00000000, 0x00802000, 0x00802000, 0x00802081, - 0x00000081, 0x00000000, 0x00800080, 0x00800001, - 0x00000001, 0x00002000, 0x00800000, 0x00802001, - 0x00000080, 0x00800000, 0x00002001, 0x00002080, - 0x00800081, 0x00000001, 0x00002080, 0x00800080, - 0x00002000, 0x00802080, 0x00802081, 0x00000081, - 0x00800080, 0x00800001, 0x00802000, 0x00802081, - 0x00000081, 0x00000000, 0x00000000, 0x00802000, - 0x00002080, 0x00800080, 0x00800081, 0x00000001, - 0x00802001, 0x00002081, 0x00002081, 0x00000080, - 0x00802081, 0x00000081, 0x00000001, 0x00002000, - 0x00800001, 0x00002001, 0x00802080, 0x00800081, - 0x00002001, 0x00002080, 0x00800000, 0x00802001, - 0x00000080, 0x00800000, 0x00002000, 0x00802080 -}; - -static const uint32_t SB5[64] = -{ - 0x00000100, 0x02080100, 0x02080000, 0x42000100, - 0x00080000, 0x00000100, 0x40000000, 0x02080000, - 0x40080100, 0x00080000, 0x02000100, 0x40080100, - 0x42000100, 0x42080000, 0x00080100, 0x40000000, - 0x02000000, 0x40080000, 0x40080000, 0x00000000, - 0x40000100, 0x42080100, 0x42080100, 0x02000100, - 0x42080000, 0x40000100, 0x00000000, 0x42000000, - 0x02080100, 0x02000000, 0x42000000, 0x00080100, - 0x00080000, 0x42000100, 0x00000100, 0x02000000, - 0x40000000, 0x02080000, 0x42000100, 0x40080100, - 0x02000100, 0x40000000, 0x42080000, 0x02080100, - 0x40080100, 0x00000100, 0x02000000, 0x42080000, - 0x42080100, 0x00080100, 0x42000000, 0x42080100, - 0x02080000, 0x00000000, 0x40080000, 0x42000000, - 0x00080100, 0x02000100, 0x40000100, 0x00080000, - 0x00000000, 0x40080000, 0x02080100, 0x40000100 -}; - -static const uint32_t SB6[64] = -{ - 0x20000010, 0x20400000, 0x00004000, 0x20404010, - 0x20400000, 0x00000010, 0x20404010, 0x00400000, - 0x20004000, 0x00404010, 0x00400000, 0x20000010, - 0x00400010, 0x20004000, 0x20000000, 0x00004010, - 0x00000000, 0x00400010, 0x20004010, 0x00004000, - 0x00404000, 0x20004010, 0x00000010, 0x20400010, - 0x20400010, 0x00000000, 0x00404010, 0x20404000, - 0x00004010, 0x00404000, 0x20404000, 0x20000000, - 0x20004000, 0x00000010, 0x20400010, 0x00404000, - 0x20404010, 0x00400000, 0x00004010, 0x20000010, - 0x00400000, 0x20004000, 0x20000000, 0x00004010, - 0x20000010, 0x20404010, 0x00404000, 0x20400000, - 0x00404010, 0x20404000, 0x00000000, 0x20400010, - 0x00000010, 0x00004000, 0x20400000, 0x00404010, - 0x00004000, 0x00400010, 0x20004010, 0x00000000, - 0x20404000, 0x20000000, 0x00400010, 0x20004010 -}; - -static const uint32_t SB7[64] = -{ - 0x00200000, 0x04200002, 0x04000802, 0x00000000, - 0x00000800, 0x04000802, 0x00200802, 0x04200800, - 0x04200802, 0x00200000, 0x00000000, 0x04000002, - 0x00000002, 0x04000000, 0x04200002, 0x00000802, - 0x04000800, 0x00200802, 0x00200002, 0x04000800, - 0x04000002, 0x04200000, 0x04200800, 0x00200002, - 0x04200000, 0x00000800, 0x00000802, 0x04200802, - 0x00200800, 0x00000002, 0x04000000, 0x00200800, - 0x04000000, 0x00200800, 0x00200000, 0x04000802, - 0x04000802, 0x04200002, 0x04200002, 0x00000002, - 0x00200002, 0x04000000, 0x04000800, 0x00200000, - 0x04200800, 0x00000802, 0x00200802, 0x04200800, - 0x00000802, 0x04000002, 0x04200802, 0x04200000, - 0x00200800, 0x00000000, 0x00000002, 0x04200802, - 0x00000000, 0x00200802, 0x04200000, 0x00000800, - 0x04000002, 0x04000800, 0x00000800, 0x00200002 -}; - -static const uint32_t SB8[64] = -{ - 0x10001040, 0x00001000, 0x00040000, 0x10041040, - 0x10000000, 0x10001040, 0x00000040, 0x10000000, - 0x00040040, 0x10040000, 0x10041040, 0x00041000, - 0x10041000, 0x00041040, 0x00001000, 0x00000040, - 0x10040000, 0x10000040, 0x10001000, 0x00001040, - 0x00041000, 0x00040040, 0x10040040, 0x10041000, - 0x00001040, 0x00000000, 0x00000000, 0x10040040, - 0x10000040, 0x10001000, 0x00041040, 0x00040000, - 0x00041040, 0x00040000, 0x10041000, 0x00001000, - 0x00000040, 0x10040040, 0x00001000, 0x00041040, - 0x10001000, 0x00000040, 0x10000040, 0x10040000, - 0x10040040, 0x10000000, 0x00040000, 0x10001040, - 0x00000000, 0x10041040, 0x00040040, 0x10000040, - 0x10040000, 0x10001000, 0x10001040, 0x00000000, - 0x10041040, 0x00041000, 0x00041000, 0x00001040, - 0x00001040, 0x00040040, 0x10000000, 0x10041000 -}; - -/* - * PC1: left and right halves bit-swap - */ -static const uint32_t LHs[16] = -{ - 0x00000000, 0x00000001, 0x00000100, 0x00000101, - 0x00010000, 0x00010001, 0x00010100, 0x00010101, - 0x01000000, 0x01000001, 0x01000100, 0x01000101, - 0x01010000, 0x01010001, 0x01010100, 0x01010101 -}; - -static const uint32_t RHs[16] = -{ - 0x00000000, 0x01000000, 0x00010000, 0x01010000, - 0x00000100, 0x01000100, 0x00010100, 0x01010100, - 0x00000001, 0x01000001, 0x00010001, 0x01010001, - 0x00000101, 0x01000101, 0x00010101, 0x01010101, -}; - -/* - * Initial Permutation macro - */ -#define DES_IP(X,Y) \ -{ \ - T = ((X >> 4) ^ Y) & 0x0F0F0F0F; Y ^= T; X ^= (T << 4); \ - T = ((X >> 16) ^ Y) & 0x0000FFFF; Y ^= T; X ^= (T << 16); \ - T = ((Y >> 2) ^ X) & 0x33333333; X ^= T; Y ^= (T << 2); \ - T = ((Y >> 8) ^ X) & 0x00FF00FF; X ^= T; Y ^= (T << 8); \ - Y = ((Y << 1) | (Y >> 31)) & 0xFFFFFFFF; \ - T = (X ^ Y) & 0xAAAAAAAA; Y ^= T; X ^= T; \ - X = ((X << 1) | (X >> 31)) & 0xFFFFFFFF; \ -} - -/* - * Final Permutation macro - */ -#define DES_FP(X,Y) \ -{ \ - X = ((X << 31) | (X >> 1)) & 0xFFFFFFFF; \ - T = (X ^ Y) & 0xAAAAAAAA; X ^= T; Y ^= T; \ - Y = ((Y << 31) | (Y >> 1)) & 0xFFFFFFFF; \ - T = ((Y >> 8) ^ X) & 0x00FF00FF; X ^= T; Y ^= (T << 8); \ - T = ((Y >> 2) ^ X) & 0x33333333; X ^= T; Y ^= (T << 2); \ - T = ((X >> 16) ^ Y) & 0x0000FFFF; Y ^= T; X ^= (T << 16); \ - T = ((X >> 4) ^ Y) & 0x0F0F0F0F; Y ^= T; X ^= (T << 4); \ -} - -/* - * DES round macro - */ -#define DES_ROUND(X,Y) \ -{ \ - T = *SK++ ^ X; \ - Y ^= SB8[ (T ) & 0x3F ] ^ \ - SB6[ (T >> 8) & 0x3F ] ^ \ - SB4[ (T >> 16) & 0x3F ] ^ \ - SB2[ (T >> 24) & 0x3F ]; \ - \ - T = *SK++ ^ ((X << 28) | (X >> 4)); \ - Y ^= SB7[ (T ) & 0x3F ] ^ \ - SB5[ (T >> 8) & 0x3F ] ^ \ - SB3[ (T >> 16) & 0x3F ] ^ \ - SB1[ (T >> 24) & 0x3F ]; \ -} - -#define SWAP(a,b) { uint32_t t = a; a = b; b = t; t = 0; } - -void des_init( des_context *ctx ) -{ - memset( ctx, 0, sizeof( des_context ) ); -} - -void des_free( des_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( des_context ) ); -} - -void des3_init( des3_context *ctx ) -{ - memset( ctx, 0, sizeof( des3_context ) ); -} - -void des3_free( des3_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( des3_context ) ); -} - -static const unsigned char odd_parity_table[128] = { 1, 2, 4, 7, 8, - 11, 13, 14, 16, 19, 21, 22, 25, 26, 28, 31, 32, 35, 37, 38, 41, 42, 44, - 47, 49, 50, 52, 55, 56, 59, 61, 62, 64, 67, 69, 70, 73, 74, 76, 79, 81, - 82, 84, 87, 88, 91, 93, 94, 97, 98, 100, 103, 104, 107, 109, 110, 112, - 115, 117, 118, 121, 122, 124, 127, 128, 131, 133, 134, 137, 138, 140, - 143, 145, 146, 148, 151, 152, 155, 157, 158, 161, 162, 164, 167, 168, - 171, 173, 174, 176, 179, 181, 182, 185, 186, 188, 191, 193, 194, 196, - 199, 200, 203, 205, 206, 208, 211, 213, 214, 217, 218, 220, 223, 224, - 227, 229, 230, 233, 234, 236, 239, 241, 242, 244, 247, 248, 251, 253, - 254 }; - -void des_key_set_parity( unsigned char key[DES_KEY_SIZE] ) -{ - int i; - - for( i = 0; i < DES_KEY_SIZE; i++ ) - key[i] = odd_parity_table[key[i] / 2]; -} - -/* - * Check the given key's parity, returns 1 on failure, 0 on SUCCESS - */ -int des_key_check_key_parity( const unsigned char key[DES_KEY_SIZE] ) -{ - int i; - - for( i = 0; i < DES_KEY_SIZE; i++ ) - if( key[i] != odd_parity_table[key[i] / 2] ) - return( 1 ); - - return( 0 ); -} - -/* - * Table of weak and semi-weak keys - * - * Source: http://en.wikipedia.org/wiki/Weak_key - * - * Weak: - * Alternating ones + zeros (0x0101010101010101) - * Alternating 'F' + 'E' (0xFEFEFEFEFEFEFEFE) - * '0xE0E0E0E0F1F1F1F1' - * '0x1F1F1F1F0E0E0E0E' - * - * Semi-weak: - * 0x011F011F010E010E and 0x1F011F010E010E01 - * 0x01E001E001F101F1 and 0xE001E001F101F101 - * 0x01FE01FE01FE01FE and 0xFE01FE01FE01FE01 - * 0x1FE01FE00EF10EF1 and 0xE01FE01FF10EF10E - * 0x1FFE1FFE0EFE0EFE and 0xFE1FFE1FFE0EFE0E - * 0xE0FEE0FEF1FEF1FE and 0xFEE0FEE0FEF1FEF1 - * - */ - -#define WEAK_KEY_COUNT 16 - -static const unsigned char weak_key_table[WEAK_KEY_COUNT][DES_KEY_SIZE] = -{ - { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE }, - { 0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E }, - { 0xE0, 0xE0, 0xE0, 0xE0, 0xF1, 0xF1, 0xF1, 0xF1 }, - - { 0x01, 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E }, - { 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E, 0x01 }, - { 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1 }, - { 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1, 0x01 }, - { 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE }, - { 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01 }, - { 0x1F, 0xE0, 0x1F, 0xE0, 0x0E, 0xF1, 0x0E, 0xF1 }, - { 0xE0, 0x1F, 0xE0, 0x1F, 0xF1, 0x0E, 0xF1, 0x0E }, - { 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E, 0xFE }, - { 0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E }, - { 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE }, - { 0xFE, 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1 } -}; - -int des_key_check_weak( const unsigned char key[DES_KEY_SIZE] ) -{ - int i; - - for( i = 0; i < WEAK_KEY_COUNT; i++ ) - if( memcmp( weak_key_table[i], key, DES_KEY_SIZE) == 0 ) - return( 1 ); - - return( 0 ); -} - -static void des_setkey( uint32_t SK[32], const unsigned char key[DES_KEY_SIZE] ) -{ - int i; - uint32_t X, Y, T; - - GET_UINT32_BE( X, key, 0 ); - GET_UINT32_BE( Y, key, 4 ); - - /* - * Permuted Choice 1 - */ - T = ((Y >> 4) ^ X) & 0x0F0F0F0F; X ^= T; Y ^= (T << 4); - T = ((Y ) ^ X) & 0x10101010; X ^= T; Y ^= (T ); - - X = (LHs[ (X ) & 0xF] << 3) | (LHs[ (X >> 8) & 0xF ] << 2) - | (LHs[ (X >> 16) & 0xF] << 1) | (LHs[ (X >> 24) & 0xF ] ) - | (LHs[ (X >> 5) & 0xF] << 7) | (LHs[ (X >> 13) & 0xF ] << 6) - | (LHs[ (X >> 21) & 0xF] << 5) | (LHs[ (X >> 29) & 0xF ] << 4); - - Y = (RHs[ (Y >> 1) & 0xF] << 3) | (RHs[ (Y >> 9) & 0xF ] << 2) - | (RHs[ (Y >> 17) & 0xF] << 1) | (RHs[ (Y >> 25) & 0xF ] ) - | (RHs[ (Y >> 4) & 0xF] << 7) | (RHs[ (Y >> 12) & 0xF ] << 6) - | (RHs[ (Y >> 20) & 0xF] << 5) | (RHs[ (Y >> 28) & 0xF ] << 4); - - X &= 0x0FFFFFFF; - Y &= 0x0FFFFFFF; - - /* - * calculate subkeys - */ - for( i = 0; i < 16; i++ ) - { - if( i < 2 || i == 8 || i == 15 ) - { - X = ((X << 1) | (X >> 27)) & 0x0FFFFFFF; - Y = ((Y << 1) | (Y >> 27)) & 0x0FFFFFFF; - } - else - { - X = ((X << 2) | (X >> 26)) & 0x0FFFFFFF; - Y = ((Y << 2) | (Y >> 26)) & 0x0FFFFFFF; - } - - *SK++ = ((X << 4) & 0x24000000) | ((X << 28) & 0x10000000) - | ((X << 14) & 0x08000000) | ((X << 18) & 0x02080000) - | ((X << 6) & 0x01000000) | ((X << 9) & 0x00200000) - | ((X >> 1) & 0x00100000) | ((X << 10) & 0x00040000) - | ((X << 2) & 0x00020000) | ((X >> 10) & 0x00010000) - | ((Y >> 13) & 0x00002000) | ((Y >> 4) & 0x00001000) - | ((Y << 6) & 0x00000800) | ((Y >> 1) & 0x00000400) - | ((Y >> 14) & 0x00000200) | ((Y ) & 0x00000100) - | ((Y >> 5) & 0x00000020) | ((Y >> 10) & 0x00000010) - | ((Y >> 3) & 0x00000008) | ((Y >> 18) & 0x00000004) - | ((Y >> 26) & 0x00000002) | ((Y >> 24) & 0x00000001); - - *SK++ = ((X << 15) & 0x20000000) | ((X << 17) & 0x10000000) - | ((X << 10) & 0x08000000) | ((X << 22) & 0x04000000) - | ((X >> 2) & 0x02000000) | ((X << 1) & 0x01000000) - | ((X << 16) & 0x00200000) | ((X << 11) & 0x00100000) - | ((X << 3) & 0x00080000) | ((X >> 6) & 0x00040000) - | ((X << 15) & 0x00020000) | ((X >> 4) & 0x00010000) - | ((Y >> 2) & 0x00002000) | ((Y << 8) & 0x00001000) - | ((Y >> 14) & 0x00000808) | ((Y >> 9) & 0x00000400) - | ((Y ) & 0x00000200) | ((Y << 7) & 0x00000100) - | ((Y >> 7) & 0x00000020) | ((Y >> 3) & 0x00000011) - | ((Y << 2) & 0x00000004) | ((Y >> 21) & 0x00000002); - } -} - -/* - * DES key schedule (56-bit, encryption) - */ -int des_setkey_enc( des_context *ctx, const unsigned char key[DES_KEY_SIZE] ) -{ -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - memcpy(ctx->enc_key, key, DES_KEY_SIZE); - } -#endif /* RTL_HW_CRYPTO */ - des_setkey( ctx->sk, key ); - return( 0 ); -} - -/* - * DES key schedule (56-bit, decryption) - */ -int des_setkey_dec( des_context *ctx, const unsigned char key[DES_KEY_SIZE] ) -{ - int i; -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - memcpy(ctx->dec_key, key, DES_KEY_SIZE); - } -#endif /* RTL_HW_CRYPTO */ - des_setkey( ctx->sk, key ); - - for( i = 0; i < 16; i += 2 ) - { - SWAP( ctx->sk[i ], ctx->sk[30 - i] ); - SWAP( ctx->sk[i + 1], ctx->sk[31 - i] ); - } - - return( 0 ); -} - -static void des3_set2key( uint32_t esk[96], - uint32_t dsk[96], - const unsigned char key[DES_KEY_SIZE*2] ) -{ - int i; - - des_setkey( esk, key ); - des_setkey( dsk + 32, key + 8 ); - - for( i = 0; i < 32; i += 2 ) - { - dsk[i ] = esk[30 - i]; - dsk[i + 1] = esk[31 - i]; - - esk[i + 32] = dsk[62 - i]; - esk[i + 33] = dsk[63 - i]; - - esk[i + 64] = esk[i ]; - esk[i + 65] = esk[i + 1]; - - dsk[i + 64] = dsk[i ]; - dsk[i + 65] = dsk[i + 1]; - } -} - -/* - * Triple-DES key schedule (112-bit, encryption) - */ -int des3_set2key_enc( des3_context *ctx, - const unsigned char key[DES_KEY_SIZE * 2] ) -{ - uint32_t sk[96]; -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - memcpy(ctx->enc_key, key, DES_KEY_SIZE * 2); - memcpy(ctx->enc_key + DES_KEY_SIZE * 2, key, DES_KEY_SIZE); - } -#endif /* RTL_HW_CRYPTO */ - des3_set2key( ctx->sk, sk, key ); - polarssl_zeroize( sk, sizeof( sk ) ); - - return( 0 ); -} - -/* - * Triple-DES key schedule (112-bit, decryption) - */ -int des3_set2key_dec( des3_context *ctx, - const unsigned char key[DES_KEY_SIZE * 2] ) -{ - uint32_t sk[96]; -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - memcpy(ctx->dec_key, key, DES_KEY_SIZE * 2); - memcpy(ctx->dec_key + DES_KEY_SIZE * 2, key, DES_KEY_SIZE); - } -#endif /* RTL_HW_CRYPTO */ - des3_set2key( sk, ctx->sk, key ); - polarssl_zeroize( sk, sizeof( sk ) ); - - return( 0 ); -} - -static void des3_set3key( uint32_t esk[96], - uint32_t dsk[96], - const unsigned char key[24] ) -{ - int i; - - des_setkey( esk, key ); - des_setkey( dsk + 32, key + 8 ); - des_setkey( esk + 64, key + 16 ); - - for( i = 0; i < 32; i += 2 ) - { - dsk[i ] = esk[94 - i]; - dsk[i + 1] = esk[95 - i]; - - esk[i + 32] = dsk[62 - i]; - esk[i + 33] = dsk[63 - i]; - - dsk[i + 64] = esk[30 - i]; - dsk[i + 65] = esk[31 - i]; - } -} - -/* - * Triple-DES key schedule (168-bit, encryption) - */ -int des3_set3key_enc( des3_context *ctx, - const unsigned char key[DES_KEY_SIZE * 3] ) -{ - uint32_t sk[96]; -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - memcpy(ctx->enc_key, key, DES_KEY_SIZE * 3); - } -#endif /* RTL_HW_CRYPTO */ - des3_set3key( ctx->sk, sk, key ); - polarssl_zeroize( sk, sizeof( sk ) ); - - return( 0 ); -} - -/* - * Triple-DES key schedule (168-bit, decryption) - */ -int des3_set3key_dec( des3_context *ctx, - const unsigned char key[DES_KEY_SIZE * 3] ) -{ - uint32_t sk[96]; -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - memcpy(ctx->dec_key, key, DES_KEY_SIZE * 3); - } -#endif /* RTL_HW_CRYPTO */ - des3_set3key( sk, ctx->sk, key ); - polarssl_zeroize( sk, sizeof( sk ) ); - - return( 0 ); -} - -/* - * DES-ECB block encryption/decryption - */ -int des_crypt_ecb( des_context *ctx, - const unsigned char input[8], - unsigned char output[8] ) -{ - int i; - uint32_t X, Y, T, *SK; - - SK = ctx->sk; - - GET_UINT32_BE( X, input, 0 ); - GET_UINT32_BE( Y, input, 4 ); - - DES_IP( X, Y ); - - for( i = 0; i < 8; i++ ) - { - DES_ROUND( Y, X ); - DES_ROUND( X, Y ); - } - - DES_FP( Y, X ); - - PUT_UINT32_BE( Y, output, 0 ); - PUT_UINT32_BE( X, output, 4 ); - - return( 0 ); - -} - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/* - * DES-CBC buffer encryption/decryption - */ -int des_crypt_cbc( des_context *ctx, - int mode, - size_t length, - unsigned char iv[8], - const unsigned char *input, - unsigned char *output ) -{ -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - unsigned char key_buf[8 + 4], *key_buf_aligned; - unsigned char iv_buf[8 + 4], *iv_buf_aligned, iv_tmp[8]; - unsigned char *output_buf, *output_buf_aligned; - size_t length_done = 0; - - if(length % 8) - return(POLARSSL_ERR_DES_INVALID_INPUT_LENGTH); - - if(length > 0) - { - key_buf_aligned = (unsigned char *) (((unsigned int) key_buf + 4) / 4 * 4); - iv_buf_aligned = (unsigned char *) (((unsigned int) iv_buf + 4) / 4 * 4); - output_buf = polarssl_malloc(length + 4); - - if(output_buf == NULL) - return -1; - - output_buf_aligned = (unsigned char *) (((unsigned int) output_buf + 4) / 4 * 4); - memcpy(iv_buf_aligned, iv, 8); - memset(output_buf, 0, length + 4); - - if(mode == DES_DECRYPT) - { - memcpy(key_buf_aligned, ctx->dec_key, DES_KEY_SIZE); - rom_ssl_ram_map.hw_crypto_des_cbc_init(key_buf_aligned, DES_KEY_SIZE); - - while((length - length_done) > RTL_CRYPTO_FRAGMENT) - { - memcpy(iv_tmp, (input + length_done + RTL_CRYPTO_FRAGMENT - 8), 8); - rom_ssl_ram_map.hw_crypto_des_cbc_decrypt(input + length_done, RTL_CRYPTO_FRAGMENT, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv_buf_aligned, iv_tmp, 8); - length_done += RTL_CRYPTO_FRAGMENT; - } - - memcpy(iv_tmp, (input + length - 8), 8); - rom_ssl_ram_map.hw_crypto_des_cbc_decrypt(input + length_done, length - length_done, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv, iv_tmp, 8); - } - else - { - memcpy(key_buf_aligned, ctx->enc_key, DES_KEY_SIZE); - rom_ssl_ram_map.hw_crypto_des_cbc_init(key_buf_aligned, DES_KEY_SIZE); - - while((length - length_done) > RTL_CRYPTO_FRAGMENT) - { - rom_ssl_ram_map.hw_crypto_des_cbc_encrypt(input + length_done, RTL_CRYPTO_FRAGMENT, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv_buf_aligned, (output_buf_aligned + length_done + RTL_CRYPTO_FRAGMENT - 8), 8); - length_done += RTL_CRYPTO_FRAGMENT; - } - - rom_ssl_ram_map.hw_crypto_des_cbc_encrypt(input + length_done, length - length_done, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv, (output_buf_aligned + length - 8), 8); - } - - memcpy(output, output_buf_aligned, length); - polarssl_free(output_buf); - } - - return 0; - } -#endif /* RTL_HW_CRYPTO */ -#ifdef SUPPORT_HW_SW_CRYPTO - else - { - int i; - unsigned char temp[8]; - - if( length % 8 ) - return( POLARSSL_ERR_DES_INVALID_INPUT_LENGTH ); - - if( mode == DES_ENCRYPT ) - { - while( length > 0 ) - { - for( i = 0; i < 8; i++ ) - output[i] = (unsigned char)( input[i] ^ iv[i] ); - - des_crypt_ecb( ctx, output, output ); - memcpy( iv, output, 8 ); - - input += 8; - output += 8; - length -= 8; - } - } - else /* DES_DECRYPT */ - { - while( length > 0 ) - { - memcpy( temp, input, 8 ); - des_crypt_ecb( ctx, input, output ); - - for( i = 0; i < 8; i++ ) - output[i] = (unsigned char)( output[i] ^ iv[i] ); - - memcpy( iv, temp, 8 ); - - input += 8; - output += 8; - length -= 8; - } - } - - return( 0 ); - } -#endif /* SUPPORT_HW_SW_CRYPTO */ -} -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -/* - * 3DES-ECB block encryption/decryption - */ -int des3_crypt_ecb( des3_context *ctx, - const unsigned char input[8], - unsigned char output[8] ) -{ - int i; - uint32_t X, Y, T, *SK; - - SK = ctx->sk; - - GET_UINT32_BE( X, input, 0 ); - GET_UINT32_BE( Y, input, 4 ); - - DES_IP( X, Y ); - - for( i = 0; i < 8; i++ ) - { - DES_ROUND( Y, X ); - DES_ROUND( X, Y ); - } - - for( i = 0; i < 8; i++ ) - { - DES_ROUND( X, Y ); - DES_ROUND( Y, X ); - } - - for( i = 0; i < 8; i++ ) - { - DES_ROUND( Y, X ); - DES_ROUND( X, Y ); - } - - DES_FP( Y, X ); - - PUT_UINT32_BE( Y, output, 0 ); - PUT_UINT32_BE( X, output, 4 ); - - return( 0 ); -} - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/* - * 3DES-CBC buffer encryption/decryption - */ -int des3_crypt_cbc( des3_context *ctx, - int mode, - size_t length, - unsigned char iv[8], - const unsigned char *input, - unsigned char *output ) -{ -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - unsigned char key_buf[24 + 4], *key_buf_aligned; - unsigned char iv_buf[8 + 4], *iv_buf_aligned, iv_tmp[8]; - unsigned char *output_buf, *output_buf_aligned; - size_t length_done = 0; - - if(length % 8) - return(POLARSSL_ERR_DES_INVALID_INPUT_LENGTH); - - if(length > 0) - { - key_buf_aligned = (unsigned char *) (((unsigned int) key_buf + 4) / 4 * 4); - iv_buf_aligned = (unsigned char *) (((unsigned int) iv_buf + 4) / 4 * 4); - output_buf = polarssl_malloc(length + 4); - - if(output_buf == NULL) - return -1; - - output_buf_aligned = (unsigned char *) (((unsigned int) output_buf + 4) / 4 * 4); - memcpy(iv_buf_aligned, iv, 8); - memset(output_buf, 0, length + 4); - - if(mode == DES_DECRYPT) - { - memcpy(key_buf_aligned, ctx->dec_key, DES_KEY_SIZE * 3); - rom_ssl_ram_map.hw_crypto_3des_cbc_init(key_buf_aligned, DES_KEY_SIZE * 3); - - while((length - length_done) > RTL_CRYPTO_FRAGMENT) - { - memcpy(iv_tmp, (input + length_done + RTL_CRYPTO_FRAGMENT - 8), 8); - rom_ssl_ram_map.hw_crypto_3des_cbc_decrypt(input + length_done, RTL_CRYPTO_FRAGMENT, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv_buf_aligned, iv_tmp, 8); - length_done += RTL_CRYPTO_FRAGMENT; - } - - memcpy(iv_tmp, (input + length - 8), 8); - rom_ssl_ram_map.hw_crypto_3des_cbc_decrypt(input + length_done, length - length_done, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv, iv_tmp, 8); - } - else - { - memcpy(key_buf_aligned, ctx->enc_key, DES_KEY_SIZE * 3); - rom_ssl_ram_map.hw_crypto_3des_cbc_init(key_buf_aligned, DES_KEY_SIZE * 3); - - while((length - length_done) > RTL_CRYPTO_FRAGMENT) - { - rom_ssl_ram_map.hw_crypto_3des_cbc_encrypt(input + length_done, RTL_CRYPTO_FRAGMENT, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv_buf_aligned, (output_buf_aligned + length_done + RTL_CRYPTO_FRAGMENT - 8), 8); - length_done += RTL_CRYPTO_FRAGMENT; - } - - rom_ssl_ram_map.hw_crypto_3des_cbc_encrypt(input + length_done, length - length_done, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv, (output_buf_aligned + length - 8), 8); - } - - memcpy(output, output_buf_aligned, length); - polarssl_free(output_buf); - } - - return 0; - } -#endif /* RTL_HW_CRYPTO */ -#ifdef SUPPORT_HW_SW_CRYPTO - else - { - int i; - unsigned char temp[8]; - - if( length % 8 ) - return( POLARSSL_ERR_DES_INVALID_INPUT_LENGTH ); - - if( mode == DES_ENCRYPT ) - { - while( length > 0 ) - { - for( i = 0; i < 8; i++ ) - output[i] = (unsigned char)( input[i] ^ iv[i] ); - - des3_crypt_ecb( ctx, output, output ); - memcpy( iv, output, 8 ); - - input += 8; - output += 8; - length -= 8; - } - } - else /* DES_DECRYPT */ - { - while( length > 0 ) - { - memcpy( temp, input, 8 ); - des3_crypt_ecb( ctx, input, output ); - - for( i = 0; i < 8; i++ ) - output[i] = (unsigned char)( output[i] ^ iv[i] ); - - memcpy( iv, temp, 8 ); - - input += 8; - output += 8; - length -= 8; - } - } - - return( 0 ); - } -#endif /* SUPPORT_HW_SW_CRYPTO */ -} -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#endif /* !POLARSSL_DES_ALT */ - -#if defined(POLARSSL_SELF_TEST) - -#include - -/* - * DES and 3DES test vectors from: - * - * http://csrc.nist.gov/groups/STM/cavp/documents/des/tripledes-vectors.zip - */ -static const unsigned char des3_test_keys[24] = -{ - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, - 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23 -}; - -static const unsigned char des3_test_buf[8] = -{ - 0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74 -}; - -static const unsigned char des3_test_ecb_dec[3][8] = -{ - { 0xCD, 0xD6, 0x4F, 0x2F, 0x94, 0x27, 0xC1, 0x5D }, - { 0x69, 0x96, 0xC8, 0xFA, 0x47, 0xA2, 0xAB, 0xEB }, - { 0x83, 0x25, 0x39, 0x76, 0x44, 0x09, 0x1A, 0x0A } -}; - -static const unsigned char des3_test_ecb_enc[3][8] = -{ - { 0x6A, 0x2A, 0x19, 0xF4, 0x1E, 0xCA, 0x85, 0x4B }, - { 0x03, 0xE6, 0x9F, 0x5B, 0xFA, 0x58, 0xEB, 0x42 }, - { 0xDD, 0x17, 0xE8, 0xB8, 0xB4, 0x37, 0xD2, 0x32 } -}; - -#if defined(POLARSSL_CIPHER_MODE_CBC) -static const unsigned char des3_test_iv[8] = -{ - 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, -}; - -static const unsigned char des3_test_cbc_dec[3][8] = -{ - { 0x12, 0x9F, 0x40, 0xB9, 0xD2, 0x00, 0x56, 0xB3 }, - { 0x47, 0x0E, 0xFC, 0x9A, 0x6B, 0x8E, 0xE3, 0x93 }, - { 0xC5, 0xCE, 0xCF, 0x63, 0xEC, 0xEC, 0x51, 0x4C } -}; - -static const unsigned char des3_test_cbc_enc[3][8] = -{ - { 0x54, 0xF1, 0x5A, 0xF6, 0xEB, 0xE3, 0xA4, 0xB4 }, - { 0x35, 0x76, 0x11, 0x56, 0x5F, 0xA1, 0x8E, 0x4D }, - { 0xCB, 0x19, 0x1F, 0x85, 0xD1, 0xED, 0x84, 0x39 } -}; -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -/* - * Checkup routine - */ -int des_self_test( int verbose ) -{ - int i, j, u, v, ret = 0; - des_context ctx; - des3_context ctx3; - unsigned char buf[8]; -#if defined(POLARSSL_CIPHER_MODE_CBC) - unsigned char prv[8]; - unsigned char iv[8]; -#endif - - des_init( &ctx ); - des3_init( &ctx3 ); - /* - * ECB mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " DES%c-ECB-%3d (%s): ", - ( u == 0 ) ? ' ' : '3', 56 + u * 56, - ( v == DES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( buf, des3_test_buf, 8 ); - - switch( i ) - { - case 0: - des_setkey_dec( &ctx, des3_test_keys ); - break; - - case 1: - des_setkey_enc( &ctx, des3_test_keys ); - break; - - case 2: - des3_set2key_dec( &ctx3, des3_test_keys ); - break; - - case 3: - des3_set2key_enc( &ctx3, des3_test_keys ); - break; - - case 4: - des3_set3key_dec( &ctx3, des3_test_keys ); - break; - - case 5: - des3_set3key_enc( &ctx3, des3_test_keys ); - break; - - default: - return( 1 ); - } - - for( j = 0; j < 10000; j++ ) - { - if( u == 0 ) - des_crypt_ecb( &ctx, buf, buf ); - else - des3_crypt_ecb( &ctx3, buf, buf ); - } - - if( ( v == DES_DECRYPT && - memcmp( buf, des3_test_ecb_dec[u], 8 ) != 0 ) || - ( v != DES_DECRYPT && - memcmp( buf, des3_test_ecb_enc[u], 8 ) != 0 ) ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -#if defined(POLARSSL_CIPHER_MODE_CBC) - /* - * CBC mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " DES%c-CBC-%3d (%s): ", - ( u == 0 ) ? ' ' : '3', 56 + u * 56, - ( v == DES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( iv, des3_test_iv, 8 ); - memcpy( prv, des3_test_iv, 8 ); - memcpy( buf, des3_test_buf, 8 ); - - switch( i ) - { - case 0: - des_setkey_dec( &ctx, des3_test_keys ); - break; - - case 1: - des_setkey_enc( &ctx, des3_test_keys ); - break; - - case 2: - des3_set2key_dec( &ctx3, des3_test_keys ); - break; - - case 3: - des3_set2key_enc( &ctx3, des3_test_keys ); - break; - - case 4: - des3_set3key_dec( &ctx3, des3_test_keys ); - break; - - case 5: - des3_set3key_enc( &ctx3, des3_test_keys ); - break; - - default: - return( 1 ); - } - - if( v == DES_DECRYPT ) - { - for( j = 0; j < 10000; j++ ) - { - if( u == 0 ) - des_crypt_cbc( &ctx, v, 8, iv, buf, buf ); - else - des3_crypt_cbc( &ctx3, v, 8, iv, buf, buf ); - } - } - else - { - for( j = 0; j < 10000; j++ ) - { - unsigned char tmp[8]; - - if( u == 0 ) - des_crypt_cbc( &ctx, v, 8, iv, buf, buf ); - else - des3_crypt_cbc( &ctx3, v, 8, iv, buf, buf ); - - memcpy( tmp, prv, 8 ); - memcpy( prv, buf, 8 ); - memcpy( buf, tmp, 8 ); - } - - memcpy( buf, prv, 8 ); - } - - if( ( v == DES_DECRYPT && - memcmp( buf, des3_test_cbc_dec[u], 8 ) != 0 ) || - ( v != DES_DECRYPT && - memcmp( buf, des3_test_cbc_enc[u], 8 ) != 0 ) ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } -#endif /* POLARSSL_CIPHER_MODE_CBC */ - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - des_free( &ctx ); - des3_free( &ctx3 ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_DES_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/dhm.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/dhm.c deleted file mode 100644 index 089c11b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/dhm.c +++ /dev/null @@ -1,598 +0,0 @@ -/* - * Diffie-Hellman-Merkle key exchange - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * Reference: - * - * http://www.cacr.math.uwaterloo.ca/hac/ (chapter 12) - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_DHM_C) - -#include "polarssl/dhm.h" - -#if defined(POLARSSL_PEM_PARSE_C) -#include "polarssl/pem.h" -#endif - -#if defined(POLARSSL_ASN1_PARSE_C) -#include "polarssl/asn1.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#include -#define polarssl_printf printf -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * helper to validate the mpi size and import it - */ -static int dhm_read_bignum( mpi *X, - unsigned char **p, - const unsigned char *end ) -{ - int ret, n; - - if( end - *p < 2 ) - return( POLARSSL_ERR_DHM_BAD_INPUT_DATA ); - - n = ( (*p)[0] << 8 ) | (*p)[1]; - (*p) += 2; - - if( (int)( end - *p ) < n ) - return( POLARSSL_ERR_DHM_BAD_INPUT_DATA ); - - if( ( ret = mpi_read_binary( X, *p, n ) ) != 0 ) - return( POLARSSL_ERR_DHM_READ_PARAMS_FAILED + ret ); - - (*p) += n; - - return( 0 ); -} - -/* - * Verify sanity of parameter with regards to P - * - * Parameter should be: 2 <= public_param <= P - 2 - * - * For more information on the attack, see: - * http://www.cl.cam.ac.uk/~rja14/Papers/psandqs.pdf - * http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2005-2643 - */ -static int dhm_check_range( const mpi *param, const mpi *P ) -{ - mpi L, U; - int ret = POLARSSL_ERR_DHM_BAD_INPUT_DATA; - - mpi_init( &L ); mpi_init( &U ); - - MPI_CHK( mpi_lset( &L, 2 ) ); - MPI_CHK( mpi_sub_int( &U, P, 2 ) ); - - if( mpi_cmp_mpi( param, &L ) >= 0 && - mpi_cmp_mpi( param, &U ) <= 0 ) - { - ret = 0; - } - -cleanup: - mpi_free( &L ); mpi_free( &U ); - return( ret ); -} - -void dhm_init( dhm_context *ctx ) -{ - memset( ctx, 0, sizeof( dhm_context ) ); -} - -/* - * Parse the ServerKeyExchange parameters - */ -int dhm_read_params( dhm_context *ctx, - unsigned char **p, - const unsigned char *end ) -{ - int ret; - - if( ( ret = dhm_read_bignum( &ctx->P, p, end ) ) != 0 || - ( ret = dhm_read_bignum( &ctx->G, p, end ) ) != 0 || - ( ret = dhm_read_bignum( &ctx->GY, p, end ) ) != 0 ) - return( ret ); - - if( ( ret = dhm_check_range( &ctx->GY, &ctx->P ) ) != 0 ) - return( ret ); - - ctx->len = mpi_size( &ctx->P ); - - return( 0 ); -} - -/* - * Setup and write the ServerKeyExchange parameters - */ -int dhm_make_params( dhm_context *ctx, int x_size, - unsigned char *output, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret, count = 0; - size_t n1, n2, n3; - unsigned char *p; - - if( mpi_cmp_int( &ctx->P, 0 ) == 0 ) - return( POLARSSL_ERR_DHM_BAD_INPUT_DATA ); - - /* - * Generate X as large as possible ( < P ) - */ - do - { - mpi_fill_random( &ctx->X, x_size, f_rng, p_rng ); - - while( mpi_cmp_mpi( &ctx->X, &ctx->P ) >= 0 ) - MPI_CHK( mpi_shift_r( &ctx->X, 1 ) ); - - if( count++ > 10 ) - return( POLARSSL_ERR_DHM_MAKE_PARAMS_FAILED ); - } - while( dhm_check_range( &ctx->X, &ctx->P ) != 0 ); - - /* - * Calculate GX = G^X mod P - */ - MPI_CHK( mpi_exp_mod( &ctx->GX, &ctx->G, &ctx->X, - &ctx->P , &ctx->RP ) ); - - if( ( ret = dhm_check_range( &ctx->GX, &ctx->P ) ) != 0 ) - return( ret ); - - /* - * export P, G, GX - */ -#define DHM_MPI_EXPORT(X,n) \ - MPI_CHK( mpi_write_binary( X, p + 2, n ) ); \ - *p++ = (unsigned char)( n >> 8 ); \ - *p++ = (unsigned char)( n ); p += n; - - n1 = mpi_size( &ctx->P ); - n2 = mpi_size( &ctx->G ); - n3 = mpi_size( &ctx->GX ); - - p = output; - DHM_MPI_EXPORT( &ctx->P , n1 ); - DHM_MPI_EXPORT( &ctx->G , n2 ); - DHM_MPI_EXPORT( &ctx->GX, n3 ); - - *olen = p - output; - - ctx->len = n1; - -cleanup: - - if( ret != 0 ) - return( POLARSSL_ERR_DHM_MAKE_PARAMS_FAILED + ret ); - - return( 0 ); -} - -/* - * Import the peer's public value G^Y - */ -int dhm_read_public( dhm_context *ctx, - const unsigned char *input, size_t ilen ) -{ - int ret; - - if( ctx == NULL || ilen < 1 || ilen > ctx->len ) - return( POLARSSL_ERR_DHM_BAD_INPUT_DATA ); - - if( ( ret = mpi_read_binary( &ctx->GY, input, ilen ) ) != 0 ) - return( POLARSSL_ERR_DHM_READ_PUBLIC_FAILED + ret ); - - return( 0 ); -} - -/* - * Create own private value X and export G^X - */ -int dhm_make_public( dhm_context *ctx, int x_size, - unsigned char *output, size_t olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret, count = 0; - - if( ctx == NULL || olen < 1 || olen > ctx->len ) - return( POLARSSL_ERR_DHM_BAD_INPUT_DATA ); - - if( mpi_cmp_int( &ctx->P, 0 ) == 0 ) - return( POLARSSL_ERR_DHM_BAD_INPUT_DATA ); - - /* - * generate X and calculate GX = G^X mod P - */ - do - { - mpi_fill_random( &ctx->X, x_size, f_rng, p_rng ); - - while( mpi_cmp_mpi( &ctx->X, &ctx->P ) >= 0 ) - MPI_CHK( mpi_shift_r( &ctx->X, 1 ) ); - - if( count++ > 10 ) - return( POLARSSL_ERR_DHM_MAKE_PUBLIC_FAILED ); - } - while( dhm_check_range( &ctx->X, &ctx->P ) != 0 ); - - MPI_CHK( mpi_exp_mod( &ctx->GX, &ctx->G, &ctx->X, - &ctx->P , &ctx->RP ) ); - - if( ( ret = dhm_check_range( &ctx->GX, &ctx->P ) ) != 0 ) - return( ret ); - - MPI_CHK( mpi_write_binary( &ctx->GX, output, olen ) ); - -cleanup: - - if( ret != 0 ) - return( POLARSSL_ERR_DHM_MAKE_PUBLIC_FAILED + ret ); - - return( 0 ); -} - -/* - * Use the blinding method and optimisation suggested in section 10 of: - * KOCHER, Paul C. Timing attacks on implementations of Diffie-Hellman, RSA, - * DSS, and other systems. In : Advances in Cryptology—CRYPTO’96. Springer - * Berlin Heidelberg, 1996. p. 104-113. - */ -static int dhm_update_blinding( dhm_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret, count; - - /* - * Don't use any blinding the first time a particular X is used, - * but remember it to use blinding next time. - */ - if( mpi_cmp_mpi( &ctx->X, &ctx->pX ) != 0 ) - { - MPI_CHK( mpi_copy( &ctx->pX, &ctx->X ) ); - MPI_CHK( mpi_lset( &ctx->Vi, 1 ) ); - MPI_CHK( mpi_lset( &ctx->Vf, 1 ) ); - - return( 0 ); - } - - /* - * Ok, we need blinding. Can we re-use existing values? - * If yes, just update them by squaring them. - */ - if( mpi_cmp_int( &ctx->Vi, 1 ) != 0 ) - { - MPI_CHK( mpi_mul_mpi( &ctx->Vi, &ctx->Vi, &ctx->Vi ) ); - MPI_CHK( mpi_mod_mpi( &ctx->Vi, &ctx->Vi, &ctx->P ) ); - - MPI_CHK( mpi_mul_mpi( &ctx->Vf, &ctx->Vf, &ctx->Vf ) ); - MPI_CHK( mpi_mod_mpi( &ctx->Vf, &ctx->Vf, &ctx->P ) ); - - return( 0 ); - } - - /* - * We need to generate blinding values from scratch - */ - - /* Vi = random( 2, P-1 ) */ - count = 0; - do - { - mpi_fill_random( &ctx->Vi, mpi_size( &ctx->P ), f_rng, p_rng ); - - while( mpi_cmp_mpi( &ctx->Vi, &ctx->P ) >= 0 ) - MPI_CHK( mpi_shift_r( &ctx->Vi, 1 ) ); - - if( count++ > 10 ) - return( POLARSSL_ERR_MPI_NOT_ACCEPTABLE ); - } - while( mpi_cmp_int( &ctx->Vi, 1 ) <= 0 ); - - /* Vf = Vi^-X mod P */ - MPI_CHK( mpi_inv_mod( &ctx->Vf, &ctx->Vi, &ctx->P ) ); - MPI_CHK( mpi_exp_mod( &ctx->Vf, &ctx->Vf, &ctx->X, &ctx->P, &ctx->RP ) ); - -cleanup: - return( ret ); -} - -/* - * Derive and export the shared secret (G^Y)^X mod P - */ -int dhm_calc_secret( dhm_context *ctx, - unsigned char *output, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - mpi GYb; - - if( ctx == NULL || *olen < ctx->len ) - return( POLARSSL_ERR_DHM_BAD_INPUT_DATA ); - - if( ( ret = dhm_check_range( &ctx->GY, &ctx->P ) ) != 0 ) - return( ret ); - - mpi_init( &GYb ); - - /* Blind peer's value */ - if( f_rng != NULL ) - { - MPI_CHK( dhm_update_blinding( ctx, f_rng, p_rng ) ); - MPI_CHK( mpi_mul_mpi( &GYb, &ctx->GY, &ctx->Vi ) ); - MPI_CHK( mpi_mod_mpi( &GYb, &GYb, &ctx->P ) ); - } - else - MPI_CHK( mpi_copy( &GYb, &ctx->GY ) ); - - /* Do modular exponentiation */ - MPI_CHK( mpi_exp_mod( &ctx->K, &GYb, &ctx->X, - &ctx->P, &ctx->RP ) ); - - /* Unblind secret value */ - if( f_rng != NULL ) - { - MPI_CHK( mpi_mul_mpi( &ctx->K, &ctx->K, &ctx->Vf ) ); - MPI_CHK( mpi_mod_mpi( &ctx->K, &ctx->K, &ctx->P ) ); - } - - *olen = mpi_size( &ctx->K ); - - MPI_CHK( mpi_write_binary( &ctx->K, output, *olen ) ); - -cleanup: - mpi_free( &GYb ); - - if( ret != 0 ) - return( POLARSSL_ERR_DHM_CALC_SECRET_FAILED + ret ); - - return( 0 ); -} - -/* - * Free the components of a DHM key - */ -void dhm_free( dhm_context *ctx ) -{ - mpi_free( &ctx->pX); mpi_free( &ctx->Vf ); mpi_free( &ctx->Vi ); - mpi_free( &ctx->RP ); mpi_free( &ctx->K ); mpi_free( &ctx->GY ); - mpi_free( &ctx->GX ); mpi_free( &ctx->X ); mpi_free( &ctx->G ); - mpi_free( &ctx->P ); - - polarssl_zeroize( ctx, sizeof( dhm_context ) ); -} - -#if defined(POLARSSL_ASN1_PARSE_C) -/* - * Parse DHM parameters - */ -int dhm_parse_dhm( dhm_context *dhm, const unsigned char *dhmin, - size_t dhminlen ) -{ - int ret; - size_t len; - unsigned char *p, *end; -#if defined(POLARSSL_PEM_PARSE_C) - pem_context pem; - - pem_init( &pem ); - - ret = pem_read_buffer( &pem, - "-----BEGIN DH PARAMETERS-----", - "-----END DH PARAMETERS-----", - dhmin, NULL, 0, &dhminlen ); - - if( ret == 0 ) - { - /* - * Was PEM encoded - */ - dhminlen = pem.buflen; - } - else if( ret != POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - goto exit; - - p = ( ret == 0 ) ? pem.buf : (unsigned char *) dhmin; -#else - p = (unsigned char *) dhmin; -#endif /* POLARSSL_PEM_PARSE_C */ - end = p + dhminlen; - - /* - * DHParams ::= SEQUENCE { - * prime INTEGER, -- P - * generator INTEGER, -- g - * } - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - ret = POLARSSL_ERR_DHM_INVALID_FORMAT + ret; - goto exit; - } - - end = p + len; - - if( ( ret = asn1_get_mpi( &p, end, &dhm->P ) ) != 0 || - ( ret = asn1_get_mpi( &p, end, &dhm->G ) ) != 0 ) - { - ret = POLARSSL_ERR_DHM_INVALID_FORMAT + ret; - goto exit; - } - - if( p != end ) - { - ret = POLARSSL_ERR_DHM_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH; - goto exit; - } - - ret = 0; - - dhm->len = mpi_size( &dhm->P ); - -exit: -#if defined(POLARSSL_PEM_PARSE_C) - pem_free( &pem ); -#endif - if( ret != 0 ) - dhm_free( dhm ); - - return( ret ); -} - -#if defined(POLARSSL_FS_IO) -/* - * Load all data from a file into a given buffer. - */ -static int load_file( const char *path, unsigned char **buf, size_t *n ) -{ - FILE *f; - long size; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_DHM_FILE_IO_ERROR ); - - fseek( f, 0, SEEK_END ); - if( ( size = ftell( f ) ) == -1 ) - { - fclose( f ); - return( POLARSSL_ERR_DHM_FILE_IO_ERROR ); - } - fseek( f, 0, SEEK_SET ); - - *n = (size_t) size; - - if( *n + 1 == 0 || - ( *buf = (unsigned char *) polarssl_malloc( *n + 1 ) ) == NULL ) - { - fclose( f ); - return( POLARSSL_ERR_DHM_MALLOC_FAILED ); - } - - if( fread( *buf, 1, *n, f ) != *n ) - { - fclose( f ); - polarssl_free( *buf ); - return( POLARSSL_ERR_DHM_FILE_IO_ERROR ); - } - - fclose( f ); - - (*buf)[*n] = '\0'; - - return( 0 ); -} - -/* - * Load and parse DHM parameters - */ -int dhm_parse_dhmfile( dhm_context *dhm, const char *path ) -{ - int ret; - size_t n; - unsigned char *buf; - - if( ( ret = load_file( path, &buf, &n ) ) != 0 ) - return( ret ); - - ret = dhm_parse_dhm( dhm, buf, n ); - - polarssl_zeroize( buf, n + 1 ); - polarssl_free( buf ); - - return( ret ); -} -#endif /* POLARSSL_FS_IO */ -#endif /* POLARSSL_ASN1_PARSE_C */ - -#if defined(POLARSSL_SELF_TEST) - -#include "polarssl/certs.h" - -/* - * Checkup routine - */ -int dhm_self_test( int verbose ) -{ -#if defined(POLARSSL_CERTS_C) - int ret; - dhm_context dhm; - - dhm_init( &dhm ); - - if( verbose != 0 ) - polarssl_printf( " DHM parameter load: " ); - - if( ( ret = dhm_parse_dhm( &dhm, (const unsigned char *) test_dhm_params, - strlen( test_dhm_params ) ) ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n\n" ); - -exit: - dhm_free( &dhm ); - - return( ret ); -#else - if( verbose != 0 ) - polarssl_printf( " DHM parameter load: skipped\n" ); - - return( 0 ); -#endif /* POLARSSL_CERTS_C */ -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_DHM_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ecdh.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ecdh.c deleted file mode 100644 index b93d82e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ecdh.c +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Elliptic curve Diffie-Hellman - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * References: - * - * SEC1 http://www.secg.org/index.php?action=secg,docs_secg - * RFC 4492 - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ECDH_C) - -#include "polarssl/ecdh.h" - -/* - * Generate public key: simple wrapper around ecp_gen_keypair - */ -int ecdh_gen_public( ecp_group *grp, mpi *d, ecp_point *Q, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - return ecp_gen_keypair( grp, d, Q, f_rng, p_rng ); -} - -/* - * Compute shared secret (SEC1 3.3.1) - */ -int ecdh_compute_shared( ecp_group *grp, mpi *z, - const ecp_point *Q, const mpi *d, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - ecp_point P; - - ecp_point_init( &P ); - - /* - * Make sure Q is a valid pubkey before using it - */ - MPI_CHK( ecp_check_pubkey( grp, Q ) ); - - MPI_CHK( ecp_mul( grp, &P, d, Q, f_rng, p_rng ) ); - - if( ecp_is_zero( &P ) ) - { - ret = POLARSSL_ERR_ECP_BAD_INPUT_DATA; - goto cleanup; - } - - MPI_CHK( mpi_copy( z, &P.X ) ); - -cleanup: - ecp_point_free( &P ); - - return( ret ); -} - -/* - * Initialize context - */ -void ecdh_init( ecdh_context *ctx ) -{ - memset( ctx, 0, sizeof( ecdh_context ) ); -} - -/* - * Free context - */ -void ecdh_free( ecdh_context *ctx ) -{ - if( ctx == NULL ) - return; - - ecp_group_free( &ctx->grp ); - ecp_point_free( &ctx->Q ); - ecp_point_free( &ctx->Qp ); - ecp_point_free( &ctx->Vi ); - ecp_point_free( &ctx->Vf ); - mpi_free( &ctx->d ); - mpi_free( &ctx->z ); - mpi_free( &ctx->_d ); -} - -/* - * Setup and write the ServerKeyExhange parameters (RFC 4492) - * struct { - * ECParameters curve_params; - * ECPoint public; - * } ServerECDHParams; - */ -int ecdh_make_params( ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - size_t grp_len, pt_len; - - if( ctx == NULL || ctx->grp.pbits == 0 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( ( ret = ecdh_gen_public( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ) - != 0 ) - return( ret ); - - if( ( ret = ecp_tls_write_group( &ctx->grp, &grp_len, buf, blen ) ) - != 0 ) - return( ret ); - - buf += grp_len; - blen -= grp_len; - - if( ( ret = ecp_tls_write_point( &ctx->grp, &ctx->Q, ctx->point_format, - &pt_len, buf, blen ) ) != 0 ) - return( ret ); - - *olen = grp_len + pt_len; - return( 0 ); -} - -/* - * Read the ServerKeyExhange parameters (RFC 4492) - * struct { - * ECParameters curve_params; - * ECPoint public; - * } ServerECDHParams; - */ -int ecdh_read_params( ecdh_context *ctx, - const unsigned char **buf, const unsigned char *end ) -{ - int ret; - - if( ( ret = ecp_tls_read_group( &ctx->grp, buf, end - *buf ) ) != 0 ) - return( ret ); - - if( ( ret = ecp_tls_read_point( &ctx->grp, &ctx->Qp, buf, end - *buf ) ) - != 0 ) - return( ret ); - - return( 0 ); -} - -/* - * Get parameters from a keypair - */ -int ecdh_get_params( ecdh_context *ctx, const ecp_keypair *key, - ecdh_side side ) -{ - int ret; - - if( ( ret = ecp_group_copy( &ctx->grp, &key->grp ) ) != 0 ) - return( ret ); - - /* If it's not our key, just import the public part as Qp */ - if( side == POLARSSL_ECDH_THEIRS ) - return( ecp_copy( &ctx->Qp, &key->Q ) ); - - /* Our key: import public (as Q) and private parts */ - if( side != POLARSSL_ECDH_OURS ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( ( ret = ecp_copy( &ctx->Q, &key->Q ) ) != 0 || - ( ret = mpi_copy( &ctx->d, &key->d ) ) != 0 ) - return( ret ); - - return( 0 ); -} - -/* - * Setup and export the client public value - */ -int ecdh_make_public( ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - - if( ctx == NULL || ctx->grp.pbits == 0 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( ( ret = ecdh_gen_public( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ) - != 0 ) - return( ret ); - - return ecp_tls_write_point( &ctx->grp, &ctx->Q, ctx->point_format, - olen, buf, blen ); -} - -/* - * Parse and import the client's public value - */ -int ecdh_read_public( ecdh_context *ctx, - const unsigned char *buf, size_t blen ) -{ - int ret; - const unsigned char *p = buf; - - if( ctx == NULL ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( ( ret = ecp_tls_read_point( &ctx->grp, &ctx->Qp, &p, blen ) ) != 0 ) - return( ret ); - - if( (size_t)( p - buf ) != blen ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - return( 0 ); -} - -/* - * Derive and export the shared secret - */ -int ecdh_calc_secret( ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - - if( ctx == NULL ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( ( ret = ecdh_compute_shared( &ctx->grp, &ctx->z, &ctx->Qp, &ctx->d, - f_rng, p_rng ) ) != 0 ) - { - return( ret ); - } - - if( mpi_size( &ctx->z ) > blen ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - *olen = ctx->grp.pbits / 8 + ( ( ctx->grp.pbits % 8 ) != 0 ); - return mpi_write_binary( &ctx->z, buf, *olen ); -} - - -#if defined(POLARSSL_SELF_TEST) - -/* - * Checkup routine - */ -int ecdh_self_test( int verbose ) -{ - ((void) verbose ); - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_ECDH_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ecdsa.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ecdsa.c deleted file mode 100644 index 5af7f6b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ecdsa.c +++ /dev/null @@ -1,503 +0,0 @@ -/* - * Elliptic curve DSA - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * References: - * - * SEC1 http://www.secg.org/index.php?action=secg,docs_secg - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ECDSA_C) - -#include "polarssl/ecdsa.h" -#include "polarssl/asn1write.h" - -#if defined(POLARSSL_ECDSA_DETERMINISTIC) -#include "polarssl/hmac_drbg.h" -#endif - -#if defined(POLARSSL_ECDSA_DETERMINISTIC) -/* - * This a hopefully temporary compatibility function. - * - * Since we can't ensure the caller will pass a valid md_alg before the next - * interface change, try to pick up a decent md by size. - * - * Argument is the minimum size in bytes of the MD output. - */ -static const md_info_t *md_info_by_size( size_t min_size ) -{ - const md_info_t *md_cur, *md_picked = NULL; - const int *md_alg; - - for( md_alg = md_list(); *md_alg != 0; md_alg++ ) - { - if( ( md_cur = md_info_from_type( *md_alg ) ) == NULL || - (size_t) md_cur->size < min_size || - ( md_picked != NULL && md_cur->size > md_picked->size ) ) - continue; - - md_picked = md_cur; - } - - return( md_picked ); -} -#endif /* POLARSSL_ECDSA_DETERMINISTIC */ - -/* - * Derive a suitable integer for group grp from a buffer of length len - * SEC1 4.1.3 step 5 aka SEC1 4.1.4 step 3 - */ -static int derive_mpi( const ecp_group *grp, mpi *x, - const unsigned char *buf, size_t blen ) -{ - int ret; - size_t n_size = ( grp->nbits + 7 ) / 8; - size_t use_size = blen > n_size ? n_size : blen; - - MPI_CHK( mpi_read_binary( x, buf, use_size ) ); - if( use_size * 8 > grp->nbits ) - MPI_CHK( mpi_shift_r( x, use_size * 8 - grp->nbits ) ); - - /* While at it, reduce modulo N */ - if( mpi_cmp_mpi( x, &grp->N ) >= 0 ) - MPI_CHK( mpi_sub_mpi( x, x, &grp->N ) ); - -cleanup: - return( ret ); -} - -/* - * Compute ECDSA signature of a hashed message (SEC1 4.1.3) - * Obviously, compared to SEC1 4.1.3, we skip step 4 (hash message) - */ -int ecdsa_sign( ecp_group *grp, mpi *r, mpi *s, - const mpi *d, const unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret, key_tries, sign_tries, blind_tries; - ecp_point R; - mpi k, e, t; - - /* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */ - if( grp->N.p == NULL ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - ecp_point_init( &R ); - mpi_init( &k ); mpi_init( &e ); mpi_init( &t ); - - sign_tries = 0; - do - { - /* - * Steps 1-3: generate a suitable ephemeral keypair - * and set r = xR mod n - */ - key_tries = 0; - do - { - MPI_CHK( ecp_gen_keypair( grp, &k, &R, f_rng, p_rng ) ); - MPI_CHK( mpi_mod_mpi( r, &R.X, &grp->N ) ); - - if( key_tries++ > 10 ) - { - ret = POLARSSL_ERR_ECP_RANDOM_FAILED; - goto cleanup; - } - } - while( mpi_cmp_int( r, 0 ) == 0 ); - - /* - * Step 5: derive MPI from hashed message - */ - MPI_CHK( derive_mpi( grp, &e, buf, blen ) ); - - /* - * Generate a random value to blind inv_mod in next step, - * avoiding a potential timing leak. - */ - blind_tries = 0; - do - { - size_t n_size = ( grp->nbits + 7 ) / 8; - MPI_CHK( mpi_fill_random( &t, n_size, f_rng, p_rng ) ); - MPI_CHK( mpi_shift_r( &t, 8 * n_size - grp->nbits ) ); - - /* See ecp_gen_keypair() */ - if( ++blind_tries > 30 ) - return( POLARSSL_ERR_ECP_RANDOM_FAILED ); - } - while( mpi_cmp_int( &t, 1 ) < 0 || - mpi_cmp_mpi( &t, &grp->N ) >= 0 ); - - /* - * Step 6: compute s = (e + r * d) / k = t (e + rd) / (kt) mod n - */ - MPI_CHK( mpi_mul_mpi( s, r, d ) ); - MPI_CHK( mpi_add_mpi( &e, &e, s ) ); - MPI_CHK( mpi_mul_mpi( &e, &e, &t ) ); - MPI_CHK( mpi_mul_mpi( &k, &k, &t ) ); - MPI_CHK( mpi_inv_mod( s, &k, &grp->N ) ); - MPI_CHK( mpi_mul_mpi( s, s, &e ) ); - MPI_CHK( mpi_mod_mpi( s, s, &grp->N ) ); - - if( sign_tries++ > 10 ) - { - ret = POLARSSL_ERR_ECP_RANDOM_FAILED; - goto cleanup; - } - } - while( mpi_cmp_int( s, 0 ) == 0 ); - -cleanup: - ecp_point_free( &R ); - mpi_free( &k ); mpi_free( &e ); mpi_free( &t ); - - return( ret ); -} - -#if defined(POLARSSL_ECDSA_DETERMINISTIC) -/* - * Deterministic signature wrapper - */ -int ecdsa_sign_det( ecp_group *grp, mpi *r, mpi *s, - const mpi *d, const unsigned char *buf, size_t blen, - md_type_t md_alg ) -{ - int ret; - hmac_drbg_context rng_ctx; - unsigned char data[2 * POLARSSL_ECP_MAX_BYTES]; - size_t grp_len = ( grp->nbits + 7 ) / 8; - const md_info_t *md_info; - mpi h; - - /* Temporary fallback */ - if( md_alg == POLARSSL_MD_NONE ) - md_info = md_info_by_size( blen ); - else - md_info = md_info_from_type( md_alg ); - - if( md_info == NULL ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - mpi_init( &h ); - memset( &rng_ctx, 0, sizeof( hmac_drbg_context ) ); - - /* Use private key and message hash (reduced) to initialize HMAC_DRBG */ - MPI_CHK( mpi_write_binary( d, data, grp_len ) ); - MPI_CHK( derive_mpi( grp, &h, buf, blen ) ); - MPI_CHK( mpi_write_binary( &h, data + grp_len, grp_len ) ); - hmac_drbg_init_buf( &rng_ctx, md_info, data, 2 * grp_len ); - - ret = ecdsa_sign( grp, r, s, d, buf, blen, - hmac_drbg_random, &rng_ctx ); - -cleanup: - hmac_drbg_free( &rng_ctx ); - mpi_free( &h ); - - return( ret ); -} -#endif /* POLARSSL_ECDSA_DETERMINISTIC */ - -/* - * Verify ECDSA signature of hashed message (SEC1 4.1.4) - * Obviously, compared to SEC1 4.1.3, we skip step 2 (hash message) - */ -int ecdsa_verify( ecp_group *grp, - const unsigned char *buf, size_t blen, - const ecp_point *Q, const mpi *r, const mpi *s) -{ - int ret; - mpi e, s_inv, u1, u2; - ecp_point R, P; - - ecp_point_init( &R ); ecp_point_init( &P ); - mpi_init( &e ); mpi_init( &s_inv ); mpi_init( &u1 ); mpi_init( &u2 ); - - /* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */ - if( grp->N.p == NULL ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - /* - * Step 1: make sure r and s are in range 1..n-1 - */ - if( mpi_cmp_int( r, 1 ) < 0 || mpi_cmp_mpi( r, &grp->N ) >= 0 || - mpi_cmp_int( s, 1 ) < 0 || mpi_cmp_mpi( s, &grp->N ) >= 0 ) - { - ret = POLARSSL_ERR_ECP_VERIFY_FAILED; - goto cleanup; - } - - /* - * Additional precaution: make sure Q is valid - */ - MPI_CHK( ecp_check_pubkey( grp, Q ) ); - - /* - * Step 3: derive MPI from hashed message - */ - MPI_CHK( derive_mpi( grp, &e, buf, blen ) ); - - /* - * Step 4: u1 = e / s mod n, u2 = r / s mod n - */ - MPI_CHK( mpi_inv_mod( &s_inv, s, &grp->N ) ); - - MPI_CHK( mpi_mul_mpi( &u1, &e, &s_inv ) ); - MPI_CHK( mpi_mod_mpi( &u1, &u1, &grp->N ) ); - - MPI_CHK( mpi_mul_mpi( &u2, r, &s_inv ) ); - MPI_CHK( mpi_mod_mpi( &u2, &u2, &grp->N ) ); - - /* - * Step 5: R = u1 G + u2 Q - * - * Since we're not using any secret data, no need to pass a RNG to - * ecp_mul() for countermesures. - */ - MPI_CHK( ecp_mul( grp, &R, &u1, &grp->G, NULL, NULL ) ); - MPI_CHK( ecp_mul( grp, &P, &u2, Q, NULL, NULL ) ); - MPI_CHK( ecp_add( grp, &R, &R, &P ) ); - - if( ecp_is_zero( &R ) ) - { - ret = POLARSSL_ERR_ECP_VERIFY_FAILED; - goto cleanup; - } - - /* - * Step 6: convert xR to an integer (no-op) - * Step 7: reduce xR mod n (gives v) - */ - MPI_CHK( mpi_mod_mpi( &R.X, &R.X, &grp->N ) ); - - /* - * Step 8: check if v (that is, R.X) is equal to r - */ - if( mpi_cmp_mpi( &R.X, r ) != 0 ) - { - ret = POLARSSL_ERR_ECP_VERIFY_FAILED; - goto cleanup; - } - -cleanup: - ecp_point_free( &R ); ecp_point_free( &P ); - mpi_free( &e ); mpi_free( &s_inv ); mpi_free( &u1 ); mpi_free( &u2 ); - - return( ret ); -} - -/* - * RFC 4492 page 20: - * - * Ecdsa-Sig-Value ::= SEQUENCE { - * r INTEGER, - * s INTEGER - * } - * - * Size is at most - * 1 (tag) + 1 (len) + 1 (initial 0) + ECP_MAX_BYTES for each of r and s, - * twice that + 1 (tag) + 2 (len) for the sequence - * (assuming ECP_MAX_BYTES is less than 126 for r and s, - * and less than 124 (total len <= 255) for the sequence) - */ -#if POLARSSL_ECP_MAX_BYTES > 124 -#error "POLARSSL_ECP_MAX_BYTES bigger than expected, please fix MAX_SIG_LEN" -#endif -#define MAX_SIG_LEN ( 3 + 2 * ( 2 + POLARSSL_ECP_MAX_BYTES ) ) - -/* - * Convert a signature (given by context) to ASN.1 - */ -static int ecdsa_signature_to_asn1( ecdsa_context *ctx, - unsigned char *sig, size_t *slen ) -{ - int ret; - unsigned char buf[MAX_SIG_LEN]; - unsigned char *p = buf + sizeof( buf ); - size_t len = 0; - - ASN1_CHK_ADD( len, asn1_write_mpi( &p, buf, &ctx->s ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &p, buf, &ctx->r ) ); - - ASN1_CHK_ADD( len, asn1_write_len( &p, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &p, buf, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ); - - memcpy( sig, p, len ); - *slen = len; - - return( 0 ); -} - -/* - * Compute and write signature - */ -int ecdsa_write_signature( ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - unsigned char *sig, size_t *slen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - - if( ( ret = ecdsa_sign( &ctx->grp, &ctx->r, &ctx->s, &ctx->d, - hash, hlen, f_rng, p_rng ) ) != 0 ) - { - return( ret ); - } - - return( ecdsa_signature_to_asn1( ctx, sig, slen ) ); -} - -#if defined(POLARSSL_ECDSA_DETERMINISTIC) -/* - * Compute and write signature deterministically - */ -int ecdsa_write_signature_det( ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - unsigned char *sig, size_t *slen, - md_type_t md_alg ) -{ - int ret; - - if( ( ret = ecdsa_sign_det( &ctx->grp, &ctx->r, &ctx->s, &ctx->d, - hash, hlen, md_alg ) ) != 0 ) - { - return( ret ); - } - - return( ecdsa_signature_to_asn1( ctx, sig, slen ) ); -} -#endif /* POLARSSL_ECDSA_DETERMINISTIC */ - -/* - * Read and check signature - */ -int ecdsa_read_signature( ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - const unsigned char *sig, size_t slen ) -{ - int ret; - unsigned char *p = (unsigned char *) sig; - const unsigned char *end = sig + slen; - size_t len; - - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA + ret ); - } - - if( p + len != end ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - if( ( ret = asn1_get_mpi( &p, end, &ctx->r ) ) != 0 || - ( ret = asn1_get_mpi( &p, end, &ctx->s ) ) != 0 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA + ret ); - - if( ( ret = ecdsa_verify( &ctx->grp, hash, hlen, - &ctx->Q, &ctx->r, &ctx->s ) ) != 0 ) - return( ret ); - - if( p != end ) - return( POLARSSL_ERR_ECP_SIG_LEN_MISMATCH ); - - return( 0 ); -} - -/* - * Generate key pair - */ -int ecdsa_genkey( ecdsa_context *ctx, ecp_group_id gid, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - return( ecp_use_known_dp( &ctx->grp, gid ) || - ecp_gen_keypair( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ); -} - -/* - * Set context from an ecp_keypair - */ -int ecdsa_from_keypair( ecdsa_context *ctx, const ecp_keypair *key ) -{ - int ret; - - if( ( ret = ecp_group_copy( &ctx->grp, &key->grp ) ) != 0 || - ( ret = mpi_copy( &ctx->d, &key->d ) ) != 0 || - ( ret = ecp_copy( &ctx->Q, &key->Q ) ) != 0 ) - { - ecdsa_free( ctx ); - } - - return( ret ); -} - -/* - * Initialize context - */ -void ecdsa_init( ecdsa_context *ctx ) -{ - ecp_group_init( &ctx->grp ); - mpi_init( &ctx->d ); - ecp_point_init( &ctx->Q ); - mpi_init( &ctx->r ); - mpi_init( &ctx->s ); -} - -/* - * Free context - */ -void ecdsa_free( ecdsa_context *ctx ) -{ - ecp_group_free( &ctx->grp ); - mpi_free( &ctx->d ); - ecp_point_free( &ctx->Q ); - mpi_free( &ctx->r ); - mpi_free( &ctx->s ); -} - -#if defined(POLARSSL_SELF_TEST) - -/* - * Checkup routine - */ -int ecdsa_self_test( int verbose ) -{ - ((void) verbose ); - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_ECDSA_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ecp.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ecp.c deleted file mode 100644 index afa7955..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ecp.c +++ /dev/null @@ -1,2029 +0,0 @@ -/* - * Elliptic curves over GF(p): generic functions - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * References: - * - * SEC1 http://www.secg.org/index.php?action=secg,docs_secg - * GECC = Guide to Elliptic Curve Cryptography - Hankerson, Menezes, Vanstone - * FIPS 186-3 http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf - * RFC 4492 for the related TLS structures and constants - * - * [M255] http://cr.yp.to/ecdh/curve25519-20060209.pdf - * - * [2] CORON, Jean-Sébastien. Resistance against differential power analysis - * for elliptic curve cryptosystems. In : Cryptographic Hardware and - * Embedded Systems. Springer Berlin Heidelberg, 1999. p. 292-302. - * - * - * [3] HEDABOU, Mustapha, PINEL, Pierre, et BÉNÉTEAU, Lucien. A comb method to - * render ECC resistant against Side Channel Attacks. IACR Cryptology - * ePrint Archive, 2004, vol. 2004, p. 342. - * - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ECP_C) - -#include "polarssl/ecp.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include - -#if defined(_MSC_VER) && !defined strcasecmp && !defined(EFIX64) && \ - !defined(EFI32) -#define strcasecmp _stricmp -#endif - -#if defined(_MSC_VER) && !defined(inline) -#define inline _inline -#else -#if defined(__ARMCC_VERSION) && !defined(inline) -#define inline __inline -#endif /* __ARMCC_VERSION */ -#endif /*_MSC_VER */ - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if defined(POLARSSL_SELF_TEST) -/* - * Counts of point addition and doubling, and field multiplications. - * Used to test resistance of point multiplication to simple timing attacks. - */ -static unsigned long add_count, dbl_count, mul_count; -#endif - -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_BP256R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_BP384R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_BP512R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) -#define POLARSSL_ECP_SHORT_WEIERSTRASS -#endif - -#if defined(POLARSSL_ECP_DP_M221_ENABLED) || \ - defined(POLARSSL_ECP_DP_M255_ENABLED) || \ - defined(POLARSSL_ECP_DP_M383_ENABLED) || \ - defined(POLARSSL_ECP_DP_M511_ENABLED) -#define POLARSSL_ECP_MONTGOMERY -#endif - -/* - * Curve types: internal for now, might be exposed later - */ -typedef enum -{ - POLARSSL_ECP_TYPE_NONE = 0, - POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS, /* y^2 = x^3 + a x + b */ - POLARSSL_ECP_TYPE_MONTGOMERY, /* y^2 = x^3 + a x^2 + x */ -} ecp_curve_type; - -/* - * List of supported curves: - * - internal ID - * - TLS NamedCurve ID (RFC 4492 sec. 5.1.1, RFC 7071 sec. 2) - * - size in bits - * - readable name - * - * Curves are listed in order: largest curves first, and for a given size, - * fastest curves first. This provides the default order for the SSL module. - */ -static const ecp_curve_info ecp_supported_curves[] = -{ -#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) - { POLARSSL_ECP_DP_SECP521R1, 25, 521, "secp521r1" }, -#endif -#if defined(POLARSSL_ECP_DP_BP512R1_ENABLED) - { POLARSSL_ECP_DP_BP512R1, 28, 512, "brainpoolP512r1" }, -#endif -#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) - { POLARSSL_ECP_DP_SECP384R1, 24, 384, "secp384r1" }, -#endif -#if defined(POLARSSL_ECP_DP_BP384R1_ENABLED) - { POLARSSL_ECP_DP_BP384R1, 27, 384, "brainpoolP384r1" }, -#endif -#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) - { POLARSSL_ECP_DP_SECP256R1, 23, 256, "secp256r1" }, -#endif -#if defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) - { POLARSSL_ECP_DP_SECP256K1, 22, 256, "secp256k1" }, -#endif -#if defined(POLARSSL_ECP_DP_BP256R1_ENABLED) - { POLARSSL_ECP_DP_BP256R1, 26, 256, "brainpoolP256r1" }, -#endif -#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) - { POLARSSL_ECP_DP_SECP224R1, 21, 224, "secp224r1" }, -#endif -#if defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) - { POLARSSL_ECP_DP_SECP224K1, 20, 224, "secp224k1" }, -#endif -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) - { POLARSSL_ECP_DP_SECP192R1, 19, 192, "secp192r1" }, -#endif -#if defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) - { POLARSSL_ECP_DP_SECP192K1, 18, 192, "secp192k1" }, -#endif - { POLARSSL_ECP_DP_NONE, 0, 0, NULL }, -}; - -#define ECP_NB_CURVES sizeof( ecp_supported_curves ) / \ - sizeof( ecp_supported_curves[0] ) - -static ecp_group_id ecp_supported_grp_id[ECP_NB_CURVES]; - -/* - * List of supported curves and associated info - */ -const ecp_curve_info *ecp_curve_list( void ) -{ - return( ecp_supported_curves ); -} - -/* - * List of supported curves, group ID only - */ -const ecp_group_id *ecp_grp_id_list( void ) -{ - static int init_done = 0; - - if( ! init_done ) - { - size_t i = 0; - const ecp_curve_info *curve_info; - - for( curve_info = ecp_curve_list(); - curve_info->grp_id != POLARSSL_ECP_DP_NONE; - curve_info++ ) - { - ecp_supported_grp_id[i++] = curve_info->grp_id; - } - ecp_supported_grp_id[i] = POLARSSL_ECP_DP_NONE; - - init_done = 1; - } - - return( ecp_supported_grp_id ); -} - -/* - * Get the curve info for the internal identifier - */ -const ecp_curve_info *ecp_curve_info_from_grp_id( ecp_group_id grp_id ) -{ - const ecp_curve_info *curve_info; - - for( curve_info = ecp_curve_list(); - curve_info->grp_id != POLARSSL_ECP_DP_NONE; - curve_info++ ) - { - if( curve_info->grp_id == grp_id ) - return( curve_info ); - } - - return( NULL ); -} - -/* - * Get the curve info from the TLS identifier - */ -const ecp_curve_info *ecp_curve_info_from_tls_id( uint16_t tls_id ) -{ - const ecp_curve_info *curve_info; - - for( curve_info = ecp_curve_list(); - curve_info->grp_id != POLARSSL_ECP_DP_NONE; - curve_info++ ) - { - if( curve_info->tls_id == tls_id ) - return( curve_info ); - } - - return( NULL ); -} - -/* - * Get the curve info from the name - */ -const ecp_curve_info *ecp_curve_info_from_name( const char *name ) -{ - const ecp_curve_info *curve_info; - - for( curve_info = ecp_curve_list(); - curve_info->grp_id != POLARSSL_ECP_DP_NONE; - curve_info++ ) - { - if( strcasecmp( curve_info->name, name ) == 0 ) - return( curve_info ); - } - - return( NULL ); -} - -/* - * Get the type of a curve - */ -static inline ecp_curve_type ecp_get_type( const ecp_group *grp ) -{ - if( grp->G.X.p == NULL ) - return( POLARSSL_ECP_TYPE_NONE ); - - if( grp->G.Y.p == NULL ) - return( POLARSSL_ECP_TYPE_MONTGOMERY ); - else - return( POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS ); -} - -/* - * Initialize (the components of) a point - */ -void ecp_point_init( ecp_point *pt ) -{ - if( pt == NULL ) - return; - - mpi_init( &pt->X ); - mpi_init( &pt->Y ); - mpi_init( &pt->Z ); -} - -/* - * Initialize (the components of) a group - */ -void ecp_group_init( ecp_group *grp ) -{ - if( grp == NULL ) - return; - - memset( grp, 0, sizeof( ecp_group ) ); -} - -/* - * Initialize (the components of) a key pair - */ -void ecp_keypair_init( ecp_keypair *key ) -{ - if( key == NULL ) - return; - - ecp_group_init( &key->grp ); - mpi_init( &key->d ); - ecp_point_init( &key->Q ); -} - -/* - * Unallocate (the components of) a point - */ -void ecp_point_free( ecp_point *pt ) -{ - if( pt == NULL ) - return; - - mpi_free( &( pt->X ) ); - mpi_free( &( pt->Y ) ); - mpi_free( &( pt->Z ) ); -} - -/* - * Unallocate (the components of) a group - */ -void ecp_group_free( ecp_group *grp ) -{ - size_t i; - - if( grp == NULL ) - return; - - if( grp->h != 1 ) - { - mpi_free( &grp->P ); - mpi_free( &grp->A ); - mpi_free( &grp->B ); - ecp_point_free( &grp->G ); - mpi_free( &grp->N ); - } - - if( grp->T != NULL ) - { - for( i = 0; i < grp->T_size; i++ ) - ecp_point_free( &grp->T[i] ); - polarssl_free( grp->T ); - } - - polarssl_zeroize( grp, sizeof( ecp_group ) ); -} - -/* - * Unallocate (the components of) a key pair - */ -void ecp_keypair_free( ecp_keypair *key ) -{ - if( key == NULL ) - return; - - ecp_group_free( &key->grp ); - mpi_free( &key->d ); - ecp_point_free( &key->Q ); -} - -/* - * Copy the contents of a point - */ -int ecp_copy( ecp_point *P, const ecp_point *Q ) -{ - int ret; - - MPI_CHK( mpi_copy( &P->X, &Q->X ) ); - MPI_CHK( mpi_copy( &P->Y, &Q->Y ) ); - MPI_CHK( mpi_copy( &P->Z, &Q->Z ) ); - -cleanup: - return( ret ); -} - -/* - * Copy the contents of a group object - */ -int ecp_group_copy( ecp_group *dst, const ecp_group *src ) -{ - return ecp_use_known_dp( dst, src->id ); -} - -/* - * Set point to zero - */ -int ecp_set_zero( ecp_point *pt ) -{ - int ret; - - MPI_CHK( mpi_lset( &pt->X , 1 ) ); - MPI_CHK( mpi_lset( &pt->Y , 1 ) ); - MPI_CHK( mpi_lset( &pt->Z , 0 ) ); - -cleanup: - return( ret ); -} - -/* - * Tell if a point is zero - */ -int ecp_is_zero( ecp_point *pt ) -{ - return( mpi_cmp_int( &pt->Z, 0 ) == 0 ); -} - -/* - * Import a non-zero point from ASCII strings - */ -int ecp_point_read_string( ecp_point *P, int radix, - const char *x, const char *y ) -{ - int ret; - - MPI_CHK( mpi_read_string( &P->X, radix, x ) ); - MPI_CHK( mpi_read_string( &P->Y, radix, y ) ); - MPI_CHK( mpi_lset( &P->Z, 1 ) ); - -cleanup: - return( ret ); -} - -/* - * Export a point into unsigned binary data (SEC1 2.3.3) - */ -int ecp_point_write_binary( const ecp_group *grp, const ecp_point *P, - int format, size_t *olen, - unsigned char *buf, size_t buflen ) -{ - int ret = 0; - size_t plen; - - if( format != POLARSSL_ECP_PF_UNCOMPRESSED && - format != POLARSSL_ECP_PF_COMPRESSED ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - /* - * Common case: P == 0 - */ - if( mpi_cmp_int( &P->Z, 0 ) == 0 ) - { - if( buflen < 1 ) - return( POLARSSL_ERR_ECP_BUFFER_TOO_SMALL ); - - buf[0] = 0x00; - *olen = 1; - - return( 0 ); - } - - plen = mpi_size( &grp->P ); - - if( format == POLARSSL_ECP_PF_UNCOMPRESSED ) - { - *olen = 2 * plen + 1; - - if( buflen < *olen ) - return( POLARSSL_ERR_ECP_BUFFER_TOO_SMALL ); - - buf[0] = 0x04; - MPI_CHK( mpi_write_binary( &P->X, buf + 1, plen ) ); - MPI_CHK( mpi_write_binary( &P->Y, buf + 1 + plen, plen ) ); - } - else if( format == POLARSSL_ECP_PF_COMPRESSED ) - { - *olen = plen + 1; - - if( buflen < *olen ) - return( POLARSSL_ERR_ECP_BUFFER_TOO_SMALL ); - - buf[0] = 0x02 + mpi_get_bit( &P->Y, 0 ); - MPI_CHK( mpi_write_binary( &P->X, buf + 1, plen ) ); - } - -cleanup: - return( ret ); -} - -/* - * Import a point from unsigned binary data (SEC1 2.3.4) - */ -int ecp_point_read_binary( const ecp_group *grp, ecp_point *pt, - const unsigned char *buf, size_t ilen ) -{ - int ret; - size_t plen; - - if ( ilen < 1 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( buf[0] == 0x00 ) - { - if( ilen == 1 ) - return( ecp_set_zero( pt ) ); - else - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - } - - plen = mpi_size( &grp->P ); - - if( buf[0] != 0x04 ) - return( POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE ); - - if( ilen != 2 * plen + 1 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - MPI_CHK( mpi_read_binary( &pt->X, buf + 1, plen ) ); - MPI_CHK( mpi_read_binary( &pt->Y, buf + 1 + plen, plen ) ); - MPI_CHK( mpi_lset( &pt->Z, 1 ) ); - -cleanup: - return( ret ); -} - -/* - * Import a point from a TLS ECPoint record (RFC 4492) - * struct { - * opaque point <1..2^8-1>; - * } ECPoint; - */ -int ecp_tls_read_point( const ecp_group *grp, ecp_point *pt, - const unsigned char **buf, size_t buf_len ) -{ - unsigned char data_len; - const unsigned char *buf_start; - - /* - * We must have at least two bytes (1 for length, at least one for data) - */ - if( buf_len < 2 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - data_len = *(*buf)++; - if( data_len < 1 || data_len > buf_len - 1 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - /* - * Save buffer start for read_binary and update buf - */ - buf_start = *buf; - *buf += data_len; - - return ecp_point_read_binary( grp, pt, buf_start, data_len ); -} - -/* - * Export a point as a TLS ECPoint record (RFC 4492) - * struct { - * opaque point <1..2^8-1>; - * } ECPoint; - */ -int ecp_tls_write_point( const ecp_group *grp, const ecp_point *pt, - int format, size_t *olen, - unsigned char *buf, size_t blen ) -{ - int ret; - - /* - * buffer length must be at least one, for our length byte - */ - if( blen < 1 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( ( ret = ecp_point_write_binary( grp, pt, format, - olen, buf + 1, blen - 1) ) != 0 ) - return( ret ); - - /* - * write length to the first byte and update total length - */ - buf[0] = (unsigned char) *olen; - ++*olen; - - return( 0 ); -} - -/* - * Import an ECP group from ASCII strings, case A == -3 - */ -int ecp_group_read_string( ecp_group *grp, int radix, - const char *p, const char *b, - const char *gx, const char *gy, const char *n) -{ - int ret; - - MPI_CHK( mpi_read_string( &grp->P, radix, p ) ); - MPI_CHK( mpi_read_string( &grp->B, radix, b ) ); - MPI_CHK( ecp_point_read_string( &grp->G, radix, gx, gy ) ); - MPI_CHK( mpi_read_string( &grp->N, radix, n ) ); - - grp->pbits = mpi_msb( &grp->P ); - grp->nbits = mpi_msb( &grp->N ); - -cleanup: - if( ret != 0 ) - ecp_group_free( grp ); - - return( ret ); -} - -/* - * Set a group from an ECParameters record (RFC 4492) - */ -int ecp_tls_read_group( ecp_group *grp, const unsigned char **buf, size_t len ) -{ - uint16_t tls_id; - const ecp_curve_info *curve_info; - - /* - * We expect at least three bytes (see below) - */ - if( len < 3 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - /* - * First byte is curve_type; only named_curve is handled - */ - if( *(*buf)++ != POLARSSL_ECP_TLS_NAMED_CURVE ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - /* - * Next two bytes are the namedcurve value - */ - tls_id = *(*buf)++; - tls_id <<= 8; - tls_id |= *(*buf)++; - - if( ( curve_info = ecp_curve_info_from_tls_id( tls_id ) ) == NULL ) - return( POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE ); - - return ecp_use_known_dp( grp, curve_info->grp_id ); -} - -/* - * Write the ECParameters record corresponding to a group (RFC 4492) - */ -int ecp_tls_write_group( const ecp_group *grp, size_t *olen, - unsigned char *buf, size_t blen ) -{ - const ecp_curve_info *curve_info; - - if( ( curve_info = ecp_curve_info_from_grp_id( grp->id ) ) == NULL ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - /* - * We are going to write 3 bytes (see below) - */ - *olen = 3; - if( blen < *olen ) - return( POLARSSL_ERR_ECP_BUFFER_TOO_SMALL ); - - /* - * First byte is curve_type, always named_curve - */ - *buf++ = POLARSSL_ECP_TLS_NAMED_CURVE; - - /* - * Next two bytes are the namedcurve value - */ - buf[0] = curve_info->tls_id >> 8; - buf[1] = curve_info->tls_id & 0xFF; - - return( 0 ); -} - -/* - * Wrapper around fast quasi-modp functions, with fall-back to mpi_mod_mpi. - * See the documentation of struct ecp_group. - * - * This function is in the critial loop for ecp_mul, so pay attention to perf. - */ -static int ecp_modp( mpi *N, const ecp_group *grp ) -{ - int ret; - - if( grp->modp == NULL ) - return( mpi_mod_mpi( N, N, &grp->P ) ); - - /* N->s < 0 is a much faster test, which fails only if N is 0 */ - if( ( N->s < 0 && mpi_cmp_int( N, 0 ) != 0 ) || - mpi_msb( N ) > 2 * grp->pbits ) - { - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - } - - MPI_CHK( grp->modp( N ) ); - - /* N->s < 0 is a much faster test, which fails only if N is 0 */ - while( N->s < 0 && mpi_cmp_int( N, 0 ) != 0 ) - MPI_CHK( mpi_add_mpi( N, N, &grp->P ) ); - - while( mpi_cmp_mpi( N, &grp->P ) >= 0 ) - /* we known P, N and the result are positive */ - MPI_CHK( mpi_sub_abs( N, N, &grp->P ) ); - -cleanup: - return( ret ); -} - -/* - * Fast mod-p functions expect their argument to be in the 0..p^2 range. - * - * In order to guarantee that, we need to ensure that operands of - * mpi_mul_mpi are in the 0..p range. So, after each operation we will - * bring the result back to this range. - * - * The following macros are shortcuts for doing that. - */ - -/* - * Reduce a mpi mod p in-place, general case, to use after mpi_mul_mpi - */ -#if defined(POLARSSL_SELF_TEST) -#define INC_MUL_COUNT mul_count++; -#else -#define INC_MUL_COUNT -#endif - -#define MOD_MUL( N ) do { MPI_CHK( ecp_modp( &N, grp ) ); INC_MUL_COUNT } \ - while( 0 ) - -/* - * Reduce a mpi mod p in-place, to use after mpi_sub_mpi - * N->s < 0 is a very fast test, which fails only if N is 0 - */ -#define MOD_SUB( N ) \ - while( N.s < 0 && mpi_cmp_int( &N, 0 ) != 0 ) \ - MPI_CHK( mpi_add_mpi( &N, &N, &grp->P ) ) - -/* - * Reduce a mpi mod p in-place, to use after mpi_add_mpi and mpi_mul_int. - * We known P, N and the result are positive, so sub_abs is correct, and - * a bit faster. - */ -#define MOD_ADD( N ) \ - while( mpi_cmp_mpi( &N, &grp->P ) >= 0 ) \ - MPI_CHK( mpi_sub_abs( &N, &N, &grp->P ) ) - -#if defined(POLARSSL_ECP_SHORT_WEIERSTRASS) -/* - * For curves in short Weierstrass form, we do all the internal operations in - * Jacobian coordinates. - * - * For multiplication, we'll use a comb method with coutermeasueres against - * SPA, hence timing attacks. - */ - -/* - * Normalize jacobian coordinates so that Z == 0 || Z == 1 (GECC 3.2.1) - * Cost: 1N := 1I + 3M + 1S - */ -static int ecp_normalize_jac( const ecp_group *grp, ecp_point *pt ) -{ - int ret; - mpi Zi, ZZi; - - if( mpi_cmp_int( &pt->Z, 0 ) == 0 ) - return( 0 ); - - mpi_init( &Zi ); mpi_init( &ZZi ); - - /* - * X = X / Z^2 mod p - */ - MPI_CHK( mpi_inv_mod( &Zi, &pt->Z, &grp->P ) ); - MPI_CHK( mpi_mul_mpi( &ZZi, &Zi, &Zi ) ); MOD_MUL( ZZi ); - MPI_CHK( mpi_mul_mpi( &pt->X, &pt->X, &ZZi ) ); MOD_MUL( pt->X ); - - /* - * Y = Y / Z^3 mod p - */ - MPI_CHK( mpi_mul_mpi( &pt->Y, &pt->Y, &ZZi ) ); MOD_MUL( pt->Y ); - MPI_CHK( mpi_mul_mpi( &pt->Y, &pt->Y, &Zi ) ); MOD_MUL( pt->Y ); - - /* - * Z = 1 - */ - MPI_CHK( mpi_lset( &pt->Z, 1 ) ); - -cleanup: - - mpi_free( &Zi ); mpi_free( &ZZi ); - - return( ret ); -} - -/* - * Normalize jacobian coordinates of an array of (pointers to) points, - * using Montgomery's trick to perform only one inversion mod P. - * (See for example Cohen's "A Course in Computational Algebraic Number - * Theory", Algorithm 10.3.4.) - * - * Warning: fails (returning an error) if one of the points is zero! - * This should never happen, see choice of w in ecp_mul_comb(). - * - * Cost: 1N(t) := 1I + (6t - 3)M + 1S - */ -static int ecp_normalize_jac_many( const ecp_group *grp, - ecp_point *T[], size_t t_len ) -{ - int ret; - size_t i; - mpi *c, u, Zi, ZZi; - - if( t_len < 2 ) - return( ecp_normalize_jac( grp, *T ) ); - - if( ( c = (mpi *) polarssl_malloc( t_len * sizeof( mpi ) ) ) == NULL ) - return( POLARSSL_ERR_ECP_MALLOC_FAILED ); - - mpi_init( &u ); mpi_init( &Zi ); mpi_init( &ZZi ); - for( i = 0; i < t_len; i++ ) - mpi_init( &c[i] ); - - /* - * c[i] = Z_0 * ... * Z_i - */ - MPI_CHK( mpi_copy( &c[0], &T[0]->Z ) ); - for( i = 1; i < t_len; i++ ) - { - MPI_CHK( mpi_mul_mpi( &c[i], &c[i-1], &T[i]->Z ) ); - MOD_MUL( c[i] ); - } - - /* - * u = 1 / (Z_0 * ... * Z_n) mod P - */ - MPI_CHK( mpi_inv_mod( &u, &c[t_len-1], &grp->P ) ); - - for( i = t_len - 1; ; i-- ) - { - /* - * Zi = 1 / Z_i mod p - * u = 1 / (Z_0 * ... * Z_i) mod P - */ - if( i == 0 ) { - MPI_CHK( mpi_copy( &Zi, &u ) ); - } - else - { - MPI_CHK( mpi_mul_mpi( &Zi, &u, &c[i-1] ) ); MOD_MUL( Zi ); - MPI_CHK( mpi_mul_mpi( &u, &u, &T[i]->Z ) ); MOD_MUL( u ); - } - - /* - * proceed as in normalize() - */ - MPI_CHK( mpi_mul_mpi( &ZZi, &Zi, &Zi ) ); MOD_MUL( ZZi ); - MPI_CHK( mpi_mul_mpi( &T[i]->X, &T[i]->X, &ZZi ) ); MOD_MUL( T[i]->X ); - MPI_CHK( mpi_mul_mpi( &T[i]->Y, &T[i]->Y, &ZZi ) ); MOD_MUL( T[i]->Y ); - MPI_CHK( mpi_mul_mpi( &T[i]->Y, &T[i]->Y, &Zi ) ); MOD_MUL( T[i]->Y ); - - /* - * Post-precessing: reclaim some memory by shrinking coordinates - * - not storing Z (always 1) - * - shrinking other coordinates, but still keeping the same number of - * limbs as P, as otherwise it will too likely be regrown too fast. - */ - MPI_CHK( mpi_shrink( &T[i]->X, grp->P.n ) ); - MPI_CHK( mpi_shrink( &T[i]->Y, grp->P.n ) ); - mpi_free( &T[i]->Z ); - - if( i == 0 ) - break; - } - -cleanup: - - mpi_free( &u ); mpi_free( &Zi ); mpi_free( &ZZi ); - for( i = 0; i < t_len; i++ ) - mpi_free( &c[i] ); - polarssl_free( c ); - - return( ret ); -} - -/* - * Conditional point inversion: Q -> -Q = (Q.X, -Q.Y, Q.Z) without leak. - * "inv" must be 0 (don't invert) or 1 (invert) or the result will be invalid - */ -static int ecp_safe_invert_jac( const ecp_group *grp, - ecp_point *Q, - unsigned char inv ) -{ - int ret; - unsigned char nonzero; - mpi mQY; - - mpi_init( &mQY ); - - /* Use the fact that -Q.Y mod P = P - Q.Y unless Q.Y == 0 */ - MPI_CHK( mpi_sub_mpi( &mQY, &grp->P, &Q->Y ) ); - nonzero = mpi_cmp_int( &Q->Y, 0 ) != 0; - MPI_CHK( mpi_safe_cond_assign( &Q->Y, &mQY, inv & nonzero ) ); - -cleanup: - mpi_free( &mQY ); - - return( ret ); -} - -/* - * Point doubling R = 2 P, Jacobian coordinates - * - * http://www.hyperelliptic.org/EFD/g1p/auto-code/shortw/jacobian/doubling/dbl-2007-bl.op3 - * with heavy variable renaming, some reordering and one minor modification - * (a = 2 * b, c = d - 2a replaced with c = d, c = c - b, c = c - b) - * in order to use a lot less intermediate variables (6 vs 25). - * - * Cost: 1D := 2M + 8S - */ -static int ecp_double_jac( const ecp_group *grp, ecp_point *R, - const ecp_point *P ) -{ - int ret; - mpi T1, T2, T3, X3, Y3, Z3; - -#if defined(POLARSSL_SELF_TEST) - dbl_count++; -#endif - - mpi_init( &T1 ); mpi_init( &T2 ); mpi_init( &T3 ); - mpi_init( &X3 ); mpi_init( &Y3 ); mpi_init( &Z3 ); - - MPI_CHK( mpi_mul_mpi( &T3, &P->X, &P->X ) ); MOD_MUL( T3 ); - MPI_CHK( mpi_mul_mpi( &T2, &P->Y, &P->Y ) ); MOD_MUL( T2 ); - MPI_CHK( mpi_mul_mpi( &Y3, &T2, &T2 ) ); MOD_MUL( Y3 ); - MPI_CHK( mpi_add_mpi( &X3, &P->X, &T2 ) ); MOD_ADD( X3 ); - MPI_CHK( mpi_mul_mpi( &X3, &X3, &X3 ) ); MOD_MUL( X3 ); - MPI_CHK( mpi_sub_mpi( &X3, &X3, &Y3 ) ); MOD_SUB( X3 ); - MPI_CHK( mpi_sub_mpi( &X3, &X3, &T3 ) ); MOD_SUB( X3 ); - MPI_CHK( mpi_mul_int( &T1, &X3, 2 ) ); MOD_ADD( T1 ); - MPI_CHK( mpi_mul_mpi( &Z3, &P->Z, &P->Z ) ); MOD_MUL( Z3 ); - MPI_CHK( mpi_mul_mpi( &X3, &Z3, &Z3 ) ); MOD_MUL( X3 ); - MPI_CHK( mpi_mul_int( &T3, &T3, 3 ) ); MOD_ADD( T3 ); - - /* Special case for A = -3 */ - if( grp->A.p == NULL ) - { - MPI_CHK( mpi_mul_int( &X3, &X3, 3 ) ); - X3.s = -1; /* mpi_mul_int doesn't handle negative numbers */ - MOD_SUB( X3 ); - } - else - MPI_CHK( mpi_mul_mpi( &X3, &X3, &grp->A ) ); MOD_MUL( X3 ); - - MPI_CHK( mpi_add_mpi( &T3, &T3, &X3 ) ); MOD_ADD( T3 ); - MPI_CHK( mpi_mul_mpi( &X3, &T3, &T3 ) ); MOD_MUL( X3 ); - MPI_CHK( mpi_sub_mpi( &X3, &X3, &T1 ) ); MOD_SUB( X3 ); - MPI_CHK( mpi_sub_mpi( &X3, &X3, &T1 ) ); MOD_SUB( X3 ); - MPI_CHK( mpi_sub_mpi( &T1, &T1, &X3 ) ); MOD_SUB( T1 ); - MPI_CHK( mpi_mul_mpi( &T1, &T3, &T1 ) ); MOD_MUL( T1 ); - MPI_CHK( mpi_mul_int( &T3, &Y3, 8 ) ); MOD_ADD( T3 ); - MPI_CHK( mpi_sub_mpi( &Y3, &T1, &T3 ) ); MOD_SUB( Y3 ); - MPI_CHK( mpi_add_mpi( &T1, &P->Y, &P->Z ) ); MOD_ADD( T1 ); - MPI_CHK( mpi_mul_mpi( &T1, &T1, &T1 ) ); MOD_MUL( T1 ); - MPI_CHK( mpi_sub_mpi( &T1, &T1, &T2 ) ); MOD_SUB( T1 ); - MPI_CHK( mpi_sub_mpi( &Z3, &T1, &Z3 ) ); MOD_SUB( Z3 ); - - MPI_CHK( mpi_copy( &R->X, &X3 ) ); - MPI_CHK( mpi_copy( &R->Y, &Y3 ) ); - MPI_CHK( mpi_copy( &R->Z, &Z3 ) ); - -cleanup: - mpi_free( &T1 ); mpi_free( &T2 ); mpi_free( &T3 ); - mpi_free( &X3 ); mpi_free( &Y3 ); mpi_free( &Z3 ); - - return( ret ); -} - -/* - * Addition: R = P + Q, mixed affine-Jacobian coordinates (GECC 3.22) - * - * The coordinates of Q must be normalized (= affine), - * but those of P don't need to. R is not normalized. - * - * Special cases: (1) P or Q is zero, (2) R is zero, (3) P == Q. - * None of these cases can happen as intermediate step in ecp_mul_comb(): - * - at each step, P, Q and R are multiples of the base point, the factor - * being less than its order, so none of them is zero; - * - Q is an odd multiple of the base point, P an even multiple, - * due to the choice of precomputed points in the modified comb method. - * So branches for these cases do not leak secret information. - * - * We accept Q->Z being unset (saving memory in tables) as meaning 1. - * - * Cost: 1A := 8M + 3S - */ -static int ecp_add_mixed( const ecp_group *grp, ecp_point *R, - const ecp_point *P, const ecp_point *Q ) -{ - int ret; - mpi T1, T2, T3, T4, X, Y, Z; - -#if defined(POLARSSL_SELF_TEST) - add_count++; -#endif - - /* - * Trivial cases: P == 0 or Q == 0 (case 1) - */ - if( mpi_cmp_int( &P->Z, 0 ) == 0 ) - return( ecp_copy( R, Q ) ); - - if( Q->Z.p != NULL && mpi_cmp_int( &Q->Z, 0 ) == 0 ) - return( ecp_copy( R, P ) ); - - /* - * Make sure Q coordinates are normalized - */ - if( Q->Z.p != NULL && mpi_cmp_int( &Q->Z, 1 ) != 0 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - mpi_init( &T1 ); mpi_init( &T2 ); mpi_init( &T3 ); mpi_init( &T4 ); - mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); - - MPI_CHK( mpi_mul_mpi( &T1, &P->Z, &P->Z ) ); MOD_MUL( T1 ); - MPI_CHK( mpi_mul_mpi( &T2, &T1, &P->Z ) ); MOD_MUL( T2 ); - MPI_CHK( mpi_mul_mpi( &T1, &T1, &Q->X ) ); MOD_MUL( T1 ); - MPI_CHK( mpi_mul_mpi( &T2, &T2, &Q->Y ) ); MOD_MUL( T2 ); - MPI_CHK( mpi_sub_mpi( &T1, &T1, &P->X ) ); MOD_SUB( T1 ); - MPI_CHK( mpi_sub_mpi( &T2, &T2, &P->Y ) ); MOD_SUB( T2 ); - - /* Special cases (2) and (3) */ - if( mpi_cmp_int( &T1, 0 ) == 0 ) - { - if( mpi_cmp_int( &T2, 0 ) == 0 ) - { - ret = ecp_double_jac( grp, R, P ); - goto cleanup; - } - else - { - ret = ecp_set_zero( R ); - goto cleanup; - } - } - - MPI_CHK( mpi_mul_mpi( &Z, &P->Z, &T1 ) ); MOD_MUL( Z ); - MPI_CHK( mpi_mul_mpi( &T3, &T1, &T1 ) ); MOD_MUL( T3 ); - MPI_CHK( mpi_mul_mpi( &T4, &T3, &T1 ) ); MOD_MUL( T4 ); - MPI_CHK( mpi_mul_mpi( &T3, &T3, &P->X ) ); MOD_MUL( T3 ); - MPI_CHK( mpi_mul_int( &T1, &T3, 2 ) ); MOD_ADD( T1 ); - MPI_CHK( mpi_mul_mpi( &X, &T2, &T2 ) ); MOD_MUL( X ); - MPI_CHK( mpi_sub_mpi( &X, &X, &T1 ) ); MOD_SUB( X ); - MPI_CHK( mpi_sub_mpi( &X, &X, &T4 ) ); MOD_SUB( X ); - MPI_CHK( mpi_sub_mpi( &T3, &T3, &X ) ); MOD_SUB( T3 ); - MPI_CHK( mpi_mul_mpi( &T3, &T3, &T2 ) ); MOD_MUL( T3 ); - MPI_CHK( mpi_mul_mpi( &T4, &T4, &P->Y ) ); MOD_MUL( T4 ); - MPI_CHK( mpi_sub_mpi( &Y, &T3, &T4 ) ); MOD_SUB( Y ); - - MPI_CHK( mpi_copy( &R->X, &X ) ); - MPI_CHK( mpi_copy( &R->Y, &Y ) ); - MPI_CHK( mpi_copy( &R->Z, &Z ) ); - -cleanup: - - mpi_free( &T1 ); mpi_free( &T2 ); mpi_free( &T3 ); mpi_free( &T4 ); - mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); - - return( ret ); -} - -/* - * Addition: R = P + Q, result's coordinates normalized - */ -int ecp_add( const ecp_group *grp, ecp_point *R, - const ecp_point *P, const ecp_point *Q ) -{ - int ret; - - if( ecp_get_type( grp ) != POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS ) - return( POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE ); - - MPI_CHK( ecp_add_mixed( grp, R, P, Q ) ); - MPI_CHK( ecp_normalize_jac( grp, R ) ); - -cleanup: - return( ret ); -} - -/* - * Subtraction: R = P - Q, result's coordinates normalized - */ -int ecp_sub( const ecp_group *grp, ecp_point *R, - const ecp_point *P, const ecp_point *Q ) -{ - int ret; - ecp_point mQ; - - ecp_point_init( &mQ ); - - if( ecp_get_type( grp ) != POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS ) - return( POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE ); - - /* mQ = - Q */ - MPI_CHK( ecp_copy( &mQ, Q ) ); - if( mpi_cmp_int( &mQ.Y, 0 ) != 0 ) - MPI_CHK( mpi_sub_mpi( &mQ.Y, &grp->P, &mQ.Y ) ); - - MPI_CHK( ecp_add_mixed( grp, R, P, &mQ ) ); - MPI_CHK( ecp_normalize_jac( grp, R ) ); - -cleanup: - ecp_point_free( &mQ ); - - return( ret ); -} - -/* - * Randomize jacobian coordinates: - * (X, Y, Z) -> (l^2 X, l^3 Y, l Z) for random l - * This is sort of the reverse operation of ecp_normalize_jac(). - * - * This countermeasure was first suggested in [2]. - */ -static int ecp_randomize_jac( const ecp_group *grp, ecp_point *pt, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret; - mpi l, ll; - size_t p_size = ( grp->pbits + 7 ) / 8; - int count = 0; - - mpi_init( &l ); mpi_init( &ll ); - - /* Generate l such that 1 < l < p */ - do - { - mpi_fill_random( &l, p_size, f_rng, p_rng ); - - while( mpi_cmp_mpi( &l, &grp->P ) >= 0 ) - MPI_CHK( mpi_shift_r( &l, 1 ) ); - - if( count++ > 10 ) - return( POLARSSL_ERR_ECP_RANDOM_FAILED ); - } - while( mpi_cmp_int( &l, 1 ) <= 0 ); - - /* Z = l * Z */ - MPI_CHK( mpi_mul_mpi( &pt->Z, &pt->Z, &l ) ); MOD_MUL( pt->Z ); - - /* X = l^2 * X */ - MPI_CHK( mpi_mul_mpi( &ll, &l, &l ) ); MOD_MUL( ll ); - MPI_CHK( mpi_mul_mpi( &pt->X, &pt->X, &ll ) ); MOD_MUL( pt->X ); - - /* Y = l^3 * Y */ - MPI_CHK( mpi_mul_mpi( &ll, &ll, &l ) ); MOD_MUL( ll ); - MPI_CHK( mpi_mul_mpi( &pt->Y, &pt->Y, &ll ) ); MOD_MUL( pt->Y ); - -cleanup: - mpi_free( &l ); mpi_free( &ll ); - - return( ret ); -} - -/* - * Check and define parameters used by the comb method (see below for details) - */ -#if POLARSSL_ECP_WINDOW_SIZE < 2 || POLARSSL_ECP_WINDOW_SIZE > 7 -#error "POLARSSL_ECP_WINDOW_SIZE out of bounds" -#endif - -/* d = ceil( n / w ) */ -#define COMB_MAX_D ( POLARSSL_ECP_MAX_BITS + 1 ) / 2 - -/* number of precomputed points */ -#define COMB_MAX_PRE ( 1 << ( POLARSSL_ECP_WINDOW_SIZE - 1 ) ) - -/* - * Compute the representation of m that will be used with our comb method. - * - * The basic comb method is described in GECC 3.44 for example. We use a - * modified version that provides resistance to SPA by avoiding zero - * digits in the representation as in [3]. We modify the method further by - * requiring that all K_i be odd, which has the small cost that our - * representation uses one more K_i, due to carries. - * - * Also, for the sake of compactness, only the seven low-order bits of x[i] - * are used to represent K_i, and the msb of x[i] encodes the the sign (s_i in - * the paper): it is set if and only if if s_i == -1; - * - * Calling conventions: - * - x is an array of size d + 1 - * - w is the size, ie number of teeth, of the comb, and must be between - * 2 and 7 (in practice, between 2 and POLARSSL_ECP_WINDOW_SIZE) - * - m is the MPI, expected to be odd and such that bitlength(m) <= w * d - * (the result will be incorrect if these assumptions are not satisfied) - */ -static void ecp_comb_fixed( unsigned char x[], size_t d, - unsigned char w, const mpi *m ) -{ - size_t i, j; - unsigned char c, cc, adjust; - - memset( x, 0, d+1 ); - - /* First get the classical comb values (except for x_d = 0) */ - for( i = 0; i < d; i++ ) - for( j = 0; j < w; j++ ) - x[i] |= mpi_get_bit( m, i + d * j ) << j; - - /* Now make sure x_1 .. x_d are odd */ - c = 0; - for( i = 1; i <= d; i++ ) - { - /* Add carry and update it */ - cc = x[i] & c; - x[i] = x[i] ^ c; - c = cc; - - /* Adjust if needed, avoiding branches */ - adjust = 1 - ( x[i] & 0x01 ); - c |= x[i] & ( x[i-1] * adjust ); - x[i] = x[i] ^ ( x[i-1] * adjust ); - x[i-1] |= adjust << 7; - } -} - -/* - * Precompute points for the comb method - * - * If i = i_{w-1} ... i_1 is the binary representation of i, then - * T[i] = i_{w-1} 2^{(w-1)d} P + ... + i_1 2^d P + P - * - * T must be able to hold 2^{w - 1} elements - * - * Cost: d(w-1) D + (2^{w-1} - 1) A + 1 N(w-1) + 1 N(2^{w-1} - 1) - */ -static int ecp_precompute_comb( const ecp_group *grp, - ecp_point T[], const ecp_point *P, - unsigned char w, size_t d ) -{ - int ret; - unsigned char i, k; - size_t j; - ecp_point *cur, *TT[COMB_MAX_PRE - 1]; - - /* - * Set T[0] = P and - * T[2^{l-1}] = 2^{dl} P for l = 1 .. w-1 (this is not the final value) - */ - MPI_CHK( ecp_copy( &T[0], P ) ); - - k = 0; - for( i = 1; i < ( 1U << ( w - 1 ) ); i <<= 1 ) - { - cur = T + i; - MPI_CHK( ecp_copy( cur, T + ( i >> 1 ) ) ); - for( j = 0; j < d; j++ ) - MPI_CHK( ecp_double_jac( grp, cur, cur ) ); - - TT[k++] = cur; - } - - MPI_CHK( ecp_normalize_jac_many( grp, TT, k ) ); - - /* - * Compute the remaining ones using the minimal number of additions - * Be careful to update T[2^l] only after using it! - */ - k = 0; - for( i = 1; i < ( 1U << ( w - 1 ) ); i <<= 1 ) - { - j = i; - while( j-- ) - { - MPI_CHK( ecp_add_mixed( grp, &T[i + j], &T[j], &T[i] ) ); - TT[k++] = &T[i + j]; - } - } - - MPI_CHK( ecp_normalize_jac_many( grp, TT, k ) ); - -cleanup: - return( ret ); -} - -/* - * Select precomputed point: R = sign(i) * T[ abs(i) / 2 ] - */ -static int ecp_select_comb( const ecp_group *grp, ecp_point *R, - const ecp_point T[], unsigned char t_len, - unsigned char i ) -{ - int ret; - unsigned char ii, j; - - /* Ignore the "sign" bit and scale down */ - ii = ( i & 0x7Fu ) >> 1; - - /* Read the whole table to thwart cache-based timing attacks */ - for( j = 0; j < t_len; j++ ) - { - MPI_CHK( mpi_safe_cond_assign( &R->X, &T[j].X, j == ii ) ); - MPI_CHK( mpi_safe_cond_assign( &R->Y, &T[j].Y, j == ii ) ); - } - - /* Safely invert result if i is "negative" */ - MPI_CHK( ecp_safe_invert_jac( grp, R, i >> 7 ) ); - -cleanup: - return( ret ); -} - -/* - * Core multiplication algorithm for the (modified) comb method. - * This part is actually common with the basic comb method (GECC 3.44) - * - * Cost: d A + d D + 1 R - */ -static int ecp_mul_comb_core( const ecp_group *grp, ecp_point *R, - const ecp_point T[], unsigned char t_len, - const unsigned char x[], size_t d, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - ecp_point Txi; - size_t i; - - ecp_point_init( &Txi ); - - /* Start with a non-zero point and randomize its coordinates */ - i = d; - MPI_CHK( ecp_select_comb( grp, R, T, t_len, x[i] ) ); - MPI_CHK( mpi_lset( &R->Z, 1 ) ); - if( f_rng != 0 ) - MPI_CHK( ecp_randomize_jac( grp, R, f_rng, p_rng ) ); - - while( i-- != 0 ) - { - MPI_CHK( ecp_double_jac( grp, R, R ) ); - MPI_CHK( ecp_select_comb( grp, &Txi, T, t_len, x[i] ) ); - MPI_CHK( ecp_add_mixed( grp, R, R, &Txi ) ); - } - -cleanup: - ecp_point_free( &Txi ); - - return( ret ); -} - -/* - * Multiplication using the comb method, - * for curves in short Weierstrass form - */ -static int ecp_mul_comb( ecp_group *grp, ecp_point *R, - const mpi *m, const ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - unsigned char w, m_is_odd, p_eq_g, pre_len, i; - size_t d; - unsigned char k[COMB_MAX_D + 1]; - ecp_point *T; - mpi M, mm; - - mpi_init( &M ); - mpi_init( &mm ); - - /* we need N to be odd to trnaform m in an odd number, check now */ - if( mpi_get_bit( &grp->N, 0 ) != 1 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - /* - * Minimize the number of multiplications, that is minimize - * 10 * d * w + 18 * 2^(w-1) + 11 * d + 7 * w, with d = ceil( nbits / w ) - * (see costs of the various parts, with 1S = 1M) - */ - w = grp->nbits >= 384 ? 5 : 4; - - /* - * If P == G, pre-compute a bit more, since this may be re-used later. - * Just adding one avoids upping the cost of the first mul too much, - * and the memory cost too. - */ -#if POLARSSL_ECP_FIXED_POINT_OPTIM == 1 - p_eq_g = ( mpi_cmp_mpi( &P->Y, &grp->G.Y ) == 0 && - mpi_cmp_mpi( &P->X, &grp->G.X ) == 0 ); - if( p_eq_g ) - w++; -#else - p_eq_g = 0; -#endif - - /* - * Make sure w is within bounds. - * (The last test is useful only for very small curves in the test suite.) - */ - if( w > POLARSSL_ECP_WINDOW_SIZE ) - w = POLARSSL_ECP_WINDOW_SIZE; - if( w >= grp->nbits ) - w = 2; - - /* Other sizes that depend on w */ - pre_len = 1U << ( w - 1 ); - d = ( grp->nbits + w - 1 ) / w; - - /* - * Prepare precomputed points: if P == G we want to - * use grp->T if already initialized, or initialize it. - */ - T = p_eq_g ? grp->T : NULL; - - if( T == NULL ) - { - T = (ecp_point *) polarssl_malloc( pre_len * sizeof( ecp_point ) ); - if( T == NULL ) - { - ret = POLARSSL_ERR_ECP_MALLOC_FAILED; - goto cleanup; - } - - for( i = 0; i < pre_len; i++ ) - ecp_point_init( &T[i] ); - - MPI_CHK( ecp_precompute_comb( grp, T, P, w, d ) ); - - if( p_eq_g ) - { - grp->T = T; - grp->T_size = pre_len; - } - } - - /* - * Make sure M is odd (M = m or M = N - m, since N is odd) - * using the fact that m * P = - (N - m) * P - */ - m_is_odd = ( mpi_get_bit( m, 0 ) == 1 ); - MPI_CHK( mpi_copy( &M, m ) ); - MPI_CHK( mpi_sub_mpi( &mm, &grp->N, m ) ); - MPI_CHK( mpi_safe_cond_assign( &M, &mm, ! m_is_odd ) ); - - /* - * Go for comb multiplication, R = M * P - */ - ecp_comb_fixed( k, d, w, &M ); - MPI_CHK( ecp_mul_comb_core( grp, R, T, pre_len, k, d, f_rng, p_rng ) ); - - /* - * Now get m * P from M * P and normalize it - */ - MPI_CHK( ecp_safe_invert_jac( grp, R, ! m_is_odd ) ); - MPI_CHK( ecp_normalize_jac( grp, R ) ); - -cleanup: - - if( T != NULL && ! p_eq_g ) - { - for( i = 0; i < pre_len; i++ ) - ecp_point_free( &T[i] ); - polarssl_free( T ); - } - - mpi_free( &M ); - mpi_free( &mm ); - - if( ret != 0 ) - ecp_point_free( R ); - - return( ret ); -} - -#endif /* POLARSSL_ECP_SHORT_WEIERSTRASS */ - -#if defined(POLARSSL_ECP_MONTGOMERY) -/* - * For Montgomery curves, we do all the internal arithmetic in projective - * coordinates. Import/export of points uses only the x coordinates, which is - * internaly represented as X / Z. - * - * For scalar multiplication, we'll use a Montgomery ladder. - */ - -/* - * Normalize Montgomery x/z coordinates: X = X/Z, Z = 1 - * Cost: 1M + 1I - */ -static int ecp_normalize_mxz( const ecp_group *grp, ecp_point *P ) -{ - int ret; - - MPI_CHK( mpi_inv_mod( &P->Z, &P->Z, &grp->P ) ); - MPI_CHK( mpi_mul_mpi( &P->X, &P->X, &P->Z ) ); MOD_MUL( P->X ); - MPI_CHK( mpi_lset( &P->Z, 1 ) ); - -cleanup: - return( ret ); -} - -/* - * Randomize projective x/z coordinates: - * (X, Z) -> (l X, l Z) for random l - * This is sort of the reverse operation of ecp_normalize_mxz(). - * - * This countermeasure was first suggested in [2]. - * Cost: 2M - */ -static int ecp_randomize_mxz( const ecp_group *grp, ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret; - mpi l; - size_t p_size = ( grp->pbits + 7 ) / 8; - int count = 0; - - mpi_init( &l ); - - /* Generate l such that 1 < l < p */ - do - { - mpi_fill_random( &l, p_size, f_rng, p_rng ); - - while( mpi_cmp_mpi( &l, &grp->P ) >= 0 ) - MPI_CHK( mpi_shift_r( &l, 1 ) ); - - if( count++ > 10 ) - return( POLARSSL_ERR_ECP_RANDOM_FAILED ); - } - while( mpi_cmp_int( &l, 1 ) <= 0 ); - - MPI_CHK( mpi_mul_mpi( &P->X, &P->X, &l ) ); MOD_MUL( P->X ); - MPI_CHK( mpi_mul_mpi( &P->Z, &P->Z, &l ) ); MOD_MUL( P->Z ); - -cleanup: - mpi_free( &l ); - - return( ret ); -} - -/* - * Double-and-add: R = 2P, S = P + Q, with d = X(P - Q), - * for Montgomery curves in x/z coordinates. - * - * http://www.hyperelliptic.org/EFD/g1p/auto-code/montgom/xz/ladder/mladd-1987-m.op3 - * with - * d = X1 - * P = (X2, Z2) - * Q = (X3, Z3) - * R = (X4, Z4) - * S = (X5, Z5) - * and eliminating temporary variables tO, ..., t4. - * - * Cost: 5M + 4S - */ -static int ecp_double_add_mxz( const ecp_group *grp, - ecp_point *R, ecp_point *S, - const ecp_point *P, const ecp_point *Q, - const mpi *d ) -{ - int ret; - mpi A, AA, B, BB, E, C, D, DA, CB; - - mpi_init( &A ); mpi_init( &AA ); mpi_init( &B ); - mpi_init( &BB ); mpi_init( &E ); mpi_init( &C ); - mpi_init( &D ); mpi_init( &DA ); mpi_init( &CB ); - - MPI_CHK( mpi_add_mpi( &A, &P->X, &P->Z ) ); MOD_ADD( A ); - MPI_CHK( mpi_mul_mpi( &AA, &A, &A ) ); MOD_MUL( AA ); - MPI_CHK( mpi_sub_mpi( &B, &P->X, &P->Z ) ); MOD_SUB( B ); - MPI_CHK( mpi_mul_mpi( &BB, &B, &B ) ); MOD_MUL( BB ); - MPI_CHK( mpi_sub_mpi( &E, &AA, &BB ) ); MOD_SUB( E ); - MPI_CHK( mpi_add_mpi( &C, &Q->X, &Q->Z ) ); MOD_ADD( C ); - MPI_CHK( mpi_sub_mpi( &D, &Q->X, &Q->Z ) ); MOD_SUB( D ); - MPI_CHK( mpi_mul_mpi( &DA, &D, &A ) ); MOD_MUL( DA ); - MPI_CHK( mpi_mul_mpi( &CB, &C, &B ) ); MOD_MUL( CB ); - MPI_CHK( mpi_add_mpi( &S->X, &DA, &CB ) ); MOD_MUL( S->X ); - MPI_CHK( mpi_mul_mpi( &S->X, &S->X, &S->X ) ); MOD_MUL( S->X ); - MPI_CHK( mpi_sub_mpi( &S->Z, &DA, &CB ) ); MOD_SUB( S->Z ); - MPI_CHK( mpi_mul_mpi( &S->Z, &S->Z, &S->Z ) ); MOD_MUL( S->Z ); - MPI_CHK( mpi_mul_mpi( &S->Z, d, &S->Z ) ); MOD_MUL( S->Z ); - MPI_CHK( mpi_mul_mpi( &R->X, &AA, &BB ) ); MOD_MUL( R->X ); - MPI_CHK( mpi_mul_mpi( &R->Z, &grp->A, &E ) ); MOD_MUL( R->Z ); - MPI_CHK( mpi_add_mpi( &R->Z, &BB, &R->Z ) ); MOD_ADD( R->Z ); - MPI_CHK( mpi_mul_mpi( &R->Z, &E, &R->Z ) ); MOD_MUL( R->Z ); - -cleanup: - mpi_free( &A ); mpi_free( &AA ); mpi_free( &B ); - mpi_free( &BB ); mpi_free( &E ); mpi_free( &C ); - mpi_free( &D ); mpi_free( &DA ); mpi_free( &CB ); - - return( ret ); -} - -/* - * Multiplication with Montgomery ladder in x/z coordinates, - * for curves in Montgomery form - */ -static int ecp_mul_mxz( ecp_group *grp, ecp_point *R, - const mpi *m, const ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - size_t i; - unsigned char b; - ecp_point RP; - mpi PX; - - ecp_point_init( &RP ); mpi_init( &PX ); - - /* Save PX and read from P before writing to R, in case P == R */ - MPI_CHK( mpi_copy( &PX, &P->X ) ); - MPI_CHK( ecp_copy( &RP, P ) ); - - /* Set R to zero in modified x/z coordinates */ - MPI_CHK( mpi_lset( &R->X, 1 ) ); - MPI_CHK( mpi_lset( &R->Z, 0 ) ); - mpi_free( &R->Y ); - - /* RP.X might be sligtly larger than P, so reduce it */ - MOD_ADD( RP.X ); - - /* Randomize coordinates of the starting point */ - if( f_rng != NULL ) - MPI_CHK( ecp_randomize_mxz( grp, &RP, f_rng, p_rng ) ); - - /* Loop invariant: R = result so far, RP = R + P */ - i = mpi_msb( m ); /* one past the (zero-based) most significant bit */ - while( i-- > 0 ) - { - b = mpi_get_bit( m, i ); - /* - * if (b) R = 2R + P else R = 2R, - * which is: - * if (b) double_add( RP, R, RP, R ) - * else double_add( R, RP, R, RP ) - * but using safe conditional swaps to avoid leaks - */ - MPI_CHK( mpi_safe_cond_swap( &R->X, &RP.X, b ) ); - MPI_CHK( mpi_safe_cond_swap( &R->Z, &RP.Z, b ) ); - MPI_CHK( ecp_double_add_mxz( grp, R, &RP, R, &RP, &PX ) ); - MPI_CHK( mpi_safe_cond_swap( &R->X, &RP.X, b ) ); - MPI_CHK( mpi_safe_cond_swap( &R->Z, &RP.Z, b ) ); - } - - MPI_CHK( ecp_normalize_mxz( grp, R ) ); - -cleanup: - ecp_point_free( &RP ); mpi_free( &PX ); - - return( ret ); -} - -#endif /* POLARSSL_ECP_MONTGOMERY */ - -/* - * Multiplication R = m * P - */ -int ecp_mul( ecp_group *grp, ecp_point *R, - const mpi *m, const ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret; - - /* Common sanity checks */ - if( mpi_cmp_int( &P->Z, 1 ) != 0 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( ( ret = ecp_check_privkey( grp, m ) ) != 0 || - ( ret = ecp_check_pubkey( grp, P ) ) != 0 ) - return( ret ); - -#if defined(POLARSSL_ECP_MONTGOMERY) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_MONTGOMERY ) - return( ecp_mul_mxz( grp, R, m, P, f_rng, p_rng ) ); -#endif -#if defined(POLARSSL_ECP_SHORT_WEIERSTRASS) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS ) - return( ecp_mul_comb( grp, R, m, P, f_rng, p_rng ) ); -#endif - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); -} - -#if defined(POLARSSL_ECP_SHORT_WEIERSTRASS) -/* - * Check that an affine point is valid as a public key, - * short weierstrass curves (SEC1 3.2.3.1) - */ -static int ecp_check_pubkey_sw( const ecp_group *grp, const ecp_point *pt ) -{ - int ret; - mpi YY, RHS; - - /* pt coordinates must be normalized for our checks */ - if( mpi_cmp_int( &pt->X, 0 ) < 0 || - mpi_cmp_int( &pt->Y, 0 ) < 0 || - mpi_cmp_mpi( &pt->X, &grp->P ) >= 0 || - mpi_cmp_mpi( &pt->Y, &grp->P ) >= 0 ) - return( POLARSSL_ERR_ECP_INVALID_KEY ); - - mpi_init( &YY ); mpi_init( &RHS ); - - /* - * YY = Y^2 - * RHS = X (X^2 + A) + B = X^3 + A X + B - */ - MPI_CHK( mpi_mul_mpi( &YY, &pt->Y, &pt->Y ) ); MOD_MUL( YY ); - MPI_CHK( mpi_mul_mpi( &RHS, &pt->X, &pt->X ) ); MOD_MUL( RHS ); - - /* Special case for A = -3 */ - if( grp->A.p == NULL ) - { - MPI_CHK( mpi_sub_int( &RHS, &RHS, 3 ) ); MOD_SUB( RHS ); - } - else - { - MPI_CHK( mpi_add_mpi( &RHS, &RHS, &grp->A ) ); MOD_ADD( RHS ); - } - - MPI_CHK( mpi_mul_mpi( &RHS, &RHS, &pt->X ) ); MOD_MUL( RHS ); - MPI_CHK( mpi_add_mpi( &RHS, &RHS, &grp->B ) ); MOD_ADD( RHS ); - - if( mpi_cmp_mpi( &YY, &RHS ) != 0 ) - ret = POLARSSL_ERR_ECP_INVALID_KEY; - -cleanup: - - mpi_free( &YY ); mpi_free( &RHS ); - - return( ret ); -} -#endif /* POLARSSL_ECP_SHORT_WEIERSTRASS */ - - -#if defined(POLARSSL_ECP_MONTGOMERY) -/* - * Check validity of a public key for Montgomery curves with x-only schemes - */ -static int ecp_check_pubkey_mx( const ecp_group *grp, const ecp_point *pt ) -{ - /* [M255 p. 5] Just check X is the correct number of bytes */ - if( mpi_size( &pt->X ) > ( grp->nbits + 7 ) / 8 ) - return( POLARSSL_ERR_ECP_INVALID_KEY ); - - return( 0 ); -} -#endif /* POLARSSL_ECP_MONTGOMERY */ - -/* - * Check that a point is valid as a public key - */ -int ecp_check_pubkey( const ecp_group *grp, const ecp_point *pt ) -{ - /* Must use affine coordinates */ - if( mpi_cmp_int( &pt->Z, 1 ) != 0 ) - return( POLARSSL_ERR_ECP_INVALID_KEY ); - -#if defined(POLARSSL_ECP_MONTGOMERY) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_MONTGOMERY ) - return( ecp_check_pubkey_mx( grp, pt ) ); -#endif -#if defined(POLARSSL_ECP_SHORT_WEIERSTRASS) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS ) - return( ecp_check_pubkey_sw( grp, pt ) ); -#endif - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); -} - -/* - * Check that an mpi is valid as a private key - */ -int ecp_check_privkey( const ecp_group *grp, const mpi *d ) -{ -#if defined(POLARSSL_ECP_MONTGOMERY) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_MONTGOMERY ) - { - /* see [M255] page 5 */ - if( mpi_get_bit( d, 0 ) != 0 || - mpi_get_bit( d, 1 ) != 0 || - mpi_get_bit( d, 2 ) != 0 || - mpi_msb( d ) - 1 != grp->nbits ) /* mpi_msb is one-based! */ - return( POLARSSL_ERR_ECP_INVALID_KEY ); - else - return( 0 ); - } -#endif /* POLARSSL_ECP_MONTGOMERY */ -#if defined(POLARSSL_ECP_SHORT_WEIERSTRASS) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS ) - { - /* see SEC1 3.2 */ - if( mpi_cmp_int( d, 1 ) < 0 || - mpi_cmp_mpi( d, &grp->N ) >= 0 ) - return( POLARSSL_ERR_ECP_INVALID_KEY ); - else - return( 0 ); - } -#endif /* POLARSSL_ECP_SHORT_WEIERSTRASS */ - - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); -} - -/* - * Generate a keypair - */ -int ecp_gen_keypair( ecp_group *grp, mpi *d, ecp_point *Q, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - size_t n_size = ( grp->nbits + 7 ) / 8; - -#if defined(POLARSSL_ECP_MONTGOMERY) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_MONTGOMERY ) - { - /* [M225] page 5 */ - size_t b; - - MPI_CHK( mpi_fill_random( d, n_size, f_rng, p_rng ) ); - - /* Make sure the most significant bit is nbits */ - b = mpi_msb( d ) - 1; /* mpi_msb is one-based */ - if( b > grp->nbits ) - MPI_CHK( mpi_shift_r( d, b - grp->nbits ) ); - else - MPI_CHK( mpi_set_bit( d, grp->nbits, 1 ) ); - - /* Make sure the last three bits are unset */ - MPI_CHK( mpi_set_bit( d, 0, 0 ) ); - MPI_CHK( mpi_set_bit( d, 1, 0 ) ); - MPI_CHK( mpi_set_bit( d, 2, 0 ) ); - } - else -#endif /* POLARSSL_ECP_MONTGOMERY */ -#if defined(POLARSSL_ECP_SHORT_WEIERSTRASS) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS ) - { - /* SEC1 3.2.1: Generate d such that 1 <= n < N */ - int count = 0; - unsigned char rnd[POLARSSL_ECP_MAX_BYTES]; - - /* - * Match the procedure given in RFC 6979 (deterministic ECDSA): - * - use the same byte ordering; - * - keep the leftmost nbits bits of the generated octet string; - * - try until result is in the desired range. - * This also avoids any biais, which is especially important for ECDSA. - */ - do - { - MPI_CHK( f_rng( p_rng, rnd, n_size ) ); - MPI_CHK( mpi_read_binary( d, rnd, n_size ) ); - MPI_CHK( mpi_shift_r( d, 8 * n_size - grp->nbits ) ); - - /* - * Each try has at worst a probability 1/2 of failing (the msb has - * a probability 1/2 of being 0, and then the result will be < N), - * so after 30 tries failure probability is a most 2**(-30). - * - * For most curves, 1 try is enough with overwhelming probability, - * since N starts with a lot of 1s in binary, but some curves - * such as secp224k1 are actually very close to the worst case. - */ - if( ++count > 30 ) - return( POLARSSL_ERR_ECP_RANDOM_FAILED ); - } - while( mpi_cmp_int( d, 1 ) < 0 || - mpi_cmp_mpi( d, &grp->N ) >= 0 ); - } - else -#endif /* POLARSSL_ECP_SHORT_WEIERSTRASS */ - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - -cleanup: - if( ret != 0 ) - return( ret ); - - return( ecp_mul( grp, Q, d, &grp->G, f_rng, p_rng ) ); -} - -/* - * Generate a keypair, prettier wrapper - */ -int ecp_gen_key( ecp_group_id grp_id, ecp_keypair *key, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret; - - if( ( ret = ecp_use_known_dp( &key->grp, grp_id ) ) != 0 ) - return( ret ); - - return( ecp_gen_keypair( &key->grp, &key->d, &key->Q, f_rng, p_rng ) ); -} - -#if defined(POLARSSL_SELF_TEST) - -/* - * Checkup routine - */ -int ecp_self_test( int verbose ) -{ - int ret; - size_t i; - ecp_group grp; - ecp_point R, P; - mpi m; - unsigned long add_c_prev, dbl_c_prev, mul_c_prev; - /* exponents especially adapted for secp192r1 */ - const char *exponents[] = - { - "000000000000000000000000000000000000000000000001", /* one */ - "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22830", /* N - 1 */ - "5EA6F389A38B8BC81E767753B15AA5569E1782E30ABE7D25", /* random */ - "400000000000000000000000000000000000000000000000", /* one and zeros */ - "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", /* all ones */ - "555555555555555555555555555555555555555555555555", /* 101010... */ - }; - - ecp_group_init( &grp ); - ecp_point_init( &R ); - ecp_point_init( &P ); - mpi_init( &m ); - - /* Use secp192r1 if available, or any available curve */ -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) - MPI_CHK( ecp_use_known_dp( &grp, POLARSSL_ECP_DP_SECP192R1 ) ); -#else - MPI_CHK( ecp_use_known_dp( &grp, ecp_curve_list()->grp_id ) ); -#endif - - if( verbose != 0 ) - polarssl_printf( " ECP test #1 (constant op_count, base point G): " ); - - /* Do a dummy multiplication first to trigger precomputation */ - MPI_CHK( mpi_lset( &m, 2 ) ); - MPI_CHK( ecp_mul( &grp, &P, &m, &grp.G, NULL, NULL ) ); - - add_count = 0; - dbl_count = 0; - mul_count = 0; - MPI_CHK( mpi_read_string( &m, 16, exponents[0] ) ); - MPI_CHK( ecp_mul( &grp, &R, &m, &grp.G, NULL, NULL ) ); - - for( i = 1; i < sizeof( exponents ) / sizeof( exponents[0] ); i++ ) - { - add_c_prev = add_count; - dbl_c_prev = dbl_count; - mul_c_prev = mul_count; - add_count = 0; - dbl_count = 0; - mul_count = 0; - - MPI_CHK( mpi_read_string( &m, 16, exponents[i] ) ); - MPI_CHK( ecp_mul( &grp, &R, &m, &grp.G, NULL, NULL ) ); - - if( add_count != add_c_prev || - dbl_count != dbl_c_prev || - mul_count != mul_c_prev ) - { - if( verbose != 0 ) - polarssl_printf( "failed (%u)\n", (unsigned int) i ); - - ret = 1; - goto cleanup; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( " ECP test #2 (constant op_count, other point): " ); - /* We computed P = 2G last time, use it */ - - add_count = 0; - dbl_count = 0; - mul_count = 0; - MPI_CHK( mpi_read_string( &m, 16, exponents[0] ) ); - MPI_CHK( ecp_mul( &grp, &R, &m, &P, NULL, NULL ) ); - - for( i = 1; i < sizeof( exponents ) / sizeof( exponents[0] ); i++ ) - { - add_c_prev = add_count; - dbl_c_prev = dbl_count; - mul_c_prev = mul_count; - add_count = 0; - dbl_count = 0; - mul_count = 0; - - MPI_CHK( mpi_read_string( &m, 16, exponents[i] ) ); - MPI_CHK( ecp_mul( &grp, &R, &m, &P, NULL, NULL ) ); - - if( add_count != add_c_prev || - dbl_count != dbl_c_prev || - mul_count != mul_c_prev ) - { - if( verbose != 0 ) - polarssl_printf( "failed (%u)\n", (unsigned int) i ); - - ret = 1; - goto cleanup; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - -cleanup: - - if( ret < 0 && verbose != 0 ) - polarssl_printf( "Unexpected error, return code = %08X\n", ret ); - - ecp_group_free( &grp ); - ecp_point_free( &R ); - ecp_point_free( &P ); - mpi_free( &m ); - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_ECP_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ecp_curves.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ecp_curves.c deleted file mode 100644 index 4c0018c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ecp_curves.c +++ /dev/null @@ -1,1380 +0,0 @@ -/* - * Elliptic curves over GF(p): curve-specific data and functions - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ECP_C) - -#include "polarssl/ecp.h" - -#if defined(_MSC_VER) && !defined(inline) -#define inline _inline -#else -#if defined(__ARMCC_VERSION) && !defined(inline) -#define inline __inline -#endif /* __ARMCC_VERSION */ -#endif /*_MSC_VER */ - -/* - * Conversion macros for embedded constants: - * build lists of t_uint's from lists of unsigned char's grouped by 8, 4 or 2 - */ -#if defined(POLARSSL_HAVE_INT8) - -#define BYTES_TO_T_UINT_8( a, b, c, d, e, f, g, h ) \ - a, b, c, d, e, f, g, h - -#define BYTES_TO_T_UINT_4( a, b, c, d ) \ - a, b, c, d - -#define BYTES_TO_T_UINT_2( a, b ) \ - a, b - -#elif defined(POLARSSL_HAVE_INT16) - -#define BYTES_TO_T_UINT_2( a, b ) \ - ( (t_uint) a << 0 ) | \ - ( (t_uint) b << 8 ) - -#define BYTES_TO_T_UINT_4( a, b, c, d ) \ - BYTES_TO_T_UINT_2( a, b ), \ - BYTES_TO_T_UINT_2( c, d ) - -#define BYTES_TO_T_UINT_8( a, b, c, d, e, f, g, h ) \ - BYTES_TO_T_UINT_2( a, b ), \ - BYTES_TO_T_UINT_2( c, d ), \ - BYTES_TO_T_UINT_2( e, f ), \ - BYTES_TO_T_UINT_2( g, h ) - -#elif defined(POLARSSL_HAVE_INT32) - -#define BYTES_TO_T_UINT_4( a, b, c, d ) \ - ( (t_uint) a << 0 ) | \ - ( (t_uint) b << 8 ) | \ - ( (t_uint) c << 16 ) | \ - ( (t_uint) d << 24 ) - -#define BYTES_TO_T_UINT_2( a, b ) \ - BYTES_TO_T_UINT_4( a, b, 0, 0 ) - -#define BYTES_TO_T_UINT_8( a, b, c, d, e, f, g, h ) \ - BYTES_TO_T_UINT_4( a, b, c, d ), \ - BYTES_TO_T_UINT_4( e, f, g, h ) - -#else /* 64-bits */ - -#define BYTES_TO_T_UINT_8( a, b, c, d, e, f, g, h ) \ - ( (t_uint) a << 0 ) | \ - ( (t_uint) b << 8 ) | \ - ( (t_uint) c << 16 ) | \ - ( (t_uint) d << 24 ) | \ - ( (t_uint) e << 32 ) | \ - ( (t_uint) f << 40 ) | \ - ( (t_uint) g << 48 ) | \ - ( (t_uint) h << 56 ) - -#define BYTES_TO_T_UINT_4( a, b, c, d ) \ - BYTES_TO_T_UINT_8( a, b, c, d, 0, 0, 0, 0 ) - -#define BYTES_TO_T_UINT_2( a, b ) \ - BYTES_TO_T_UINT_8( a, b, 0, 0, 0, 0, 0, 0 ) - -#endif /* bits in t_uint */ - -/* - * Note: the constants are in little-endian order - * to be directly usable in MPIs - */ - -/* - * Domain parameters for secp192r1 - */ -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) -static const t_uint secp192r1_p[] = { - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -static const t_uint secp192r1_b[] = { - BYTES_TO_T_UINT_8( 0xB1, 0xB9, 0x46, 0xC1, 0xEC, 0xDE, 0xB8, 0xFE ), - BYTES_TO_T_UINT_8( 0x49, 0x30, 0x24, 0x72, 0xAB, 0xE9, 0xA7, 0x0F ), - BYTES_TO_T_UINT_8( 0xE7, 0x80, 0x9C, 0xE5, 0x19, 0x05, 0x21, 0x64 ), -}; -static const t_uint secp192r1_gx[] = { - BYTES_TO_T_UINT_8( 0x12, 0x10, 0xFF, 0x82, 0xFD, 0x0A, 0xFF, 0xF4 ), - BYTES_TO_T_UINT_8( 0x00, 0x88, 0xA1, 0x43, 0xEB, 0x20, 0xBF, 0x7C ), - BYTES_TO_T_UINT_8( 0xF6, 0x90, 0x30, 0xB0, 0x0E, 0xA8, 0x8D, 0x18 ), -}; -static const t_uint secp192r1_gy[] = { - BYTES_TO_T_UINT_8( 0x11, 0x48, 0x79, 0x1E, 0xA1, 0x77, 0xF9, 0x73 ), - BYTES_TO_T_UINT_8( 0xD5, 0xCD, 0x24, 0x6B, 0xED, 0x11, 0x10, 0x63 ), - BYTES_TO_T_UINT_8( 0x78, 0xDA, 0xC8, 0xFF, 0x95, 0x2B, 0x19, 0x07 ), -}; -static const t_uint secp192r1_n[] = { - BYTES_TO_T_UINT_8( 0x31, 0x28, 0xD2, 0xB4, 0xB1, 0xC9, 0x6B, 0x14 ), - BYTES_TO_T_UINT_8( 0x36, 0xF8, 0xDE, 0x99, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -#endif /* POLARSSL_ECP_DP_SECP192R1_ENABLED */ - -/* - * Domain parameters for secp224r1 - */ -#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) -static const t_uint secp224r1_p[] = { - BYTES_TO_T_UINT_8( 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ), - BYTES_TO_T_UINT_8( 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 ), -}; -static const t_uint secp224r1_b[] = { - BYTES_TO_T_UINT_8( 0xB4, 0xFF, 0x55, 0x23, 0x43, 0x39, 0x0B, 0x27 ), - BYTES_TO_T_UINT_8( 0xBA, 0xD8, 0xBF, 0xD7, 0xB7, 0xB0, 0x44, 0x50 ), - BYTES_TO_T_UINT_8( 0x56, 0x32, 0x41, 0xF5, 0xAB, 0xB3, 0x04, 0x0C ), - BYTES_TO_T_UINT_4( 0x85, 0x0A, 0x05, 0xB4 ), -}; -static const t_uint secp224r1_gx[] = { - BYTES_TO_T_UINT_8( 0x21, 0x1D, 0x5C, 0x11, 0xD6, 0x80, 0x32, 0x34 ), - BYTES_TO_T_UINT_8( 0x22, 0x11, 0xC2, 0x56, 0xD3, 0xC1, 0x03, 0x4A ), - BYTES_TO_T_UINT_8( 0xB9, 0x90, 0x13, 0x32, 0x7F, 0xBF, 0xB4, 0x6B ), - BYTES_TO_T_UINT_4( 0xBD, 0x0C, 0x0E, 0xB7 ), -}; -static const t_uint secp224r1_gy[] = { - BYTES_TO_T_UINT_8( 0x34, 0x7E, 0x00, 0x85, 0x99, 0x81, 0xD5, 0x44 ), - BYTES_TO_T_UINT_8( 0x64, 0x47, 0x07, 0x5A, 0xA0, 0x75, 0x43, 0xCD ), - BYTES_TO_T_UINT_8( 0xE6, 0xDF, 0x22, 0x4C, 0xFB, 0x23, 0xF7, 0xB5 ), - BYTES_TO_T_UINT_4( 0x88, 0x63, 0x37, 0xBD ), -}; -static const t_uint secp224r1_n[] = { - BYTES_TO_T_UINT_8( 0x3D, 0x2A, 0x5C, 0x5C, 0x45, 0x29, 0xDD, 0x13 ), - BYTES_TO_T_UINT_8( 0x3E, 0xF0, 0xB8, 0xE0, 0xA2, 0x16, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_4( 0xFF, 0xFF, 0xFF, 0xFF ), -}; -#endif /* POLARSSL_ECP_DP_SECP224R1_ENABLED */ - -/* - * Domain parameters for secp256r1 - */ -#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) -static const t_uint secp256r1_p[] = { - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 ), - BYTES_TO_T_UINT_8( 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ), - BYTES_TO_T_UINT_8( 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -static const t_uint secp256r1_b[] = { - BYTES_TO_T_UINT_8( 0x4B, 0x60, 0xD2, 0x27, 0x3E, 0x3C, 0xCE, 0x3B ), - BYTES_TO_T_UINT_8( 0xF6, 0xB0, 0x53, 0xCC, 0xB0, 0x06, 0x1D, 0x65 ), - BYTES_TO_T_UINT_8( 0xBC, 0x86, 0x98, 0x76, 0x55, 0xBD, 0xEB, 0xB3 ), - BYTES_TO_T_UINT_8( 0xE7, 0x93, 0x3A, 0xAA, 0xD8, 0x35, 0xC6, 0x5A ), -}; -static const t_uint secp256r1_gx[] = { - BYTES_TO_T_UINT_8( 0x96, 0xC2, 0x98, 0xD8, 0x45, 0x39, 0xA1, 0xF4 ), - BYTES_TO_T_UINT_8( 0xA0, 0x33, 0xEB, 0x2D, 0x81, 0x7D, 0x03, 0x77 ), - BYTES_TO_T_UINT_8( 0xF2, 0x40, 0xA4, 0x63, 0xE5, 0xE6, 0xBC, 0xF8 ), - BYTES_TO_T_UINT_8( 0x47, 0x42, 0x2C, 0xE1, 0xF2, 0xD1, 0x17, 0x6B ), -}; -static const t_uint secp256r1_gy[] = { - BYTES_TO_T_UINT_8( 0xF5, 0x51, 0xBF, 0x37, 0x68, 0x40, 0xB6, 0xCB ), - BYTES_TO_T_UINT_8( 0xCE, 0x5E, 0x31, 0x6B, 0x57, 0x33, 0xCE, 0x2B ), - BYTES_TO_T_UINT_8( 0x16, 0x9E, 0x0F, 0x7C, 0x4A, 0xEB, 0xE7, 0x8E ), - BYTES_TO_T_UINT_8( 0x9B, 0x7F, 0x1A, 0xFE, 0xE2, 0x42, 0xE3, 0x4F ), -}; -static const t_uint secp256r1_n[] = { - BYTES_TO_T_UINT_8( 0x51, 0x25, 0x63, 0xFC, 0xC2, 0xCA, 0xB9, 0xF3 ), - BYTES_TO_T_UINT_8( 0x84, 0x9E, 0x17, 0xA7, 0xAD, 0xFA, 0xE6, 0xBC ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -#endif /* POLARSSL_ECP_DP_SECP256R1_ENABLED */ - -/* - * Domain parameters for secp384r1 - */ -#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) -static const t_uint secp384r1_p[] = { - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 ), - BYTES_TO_T_UINT_8( 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -static const t_uint secp384r1_b[] = { - BYTES_TO_T_UINT_8( 0xEF, 0x2A, 0xEC, 0xD3, 0xED, 0xC8, 0x85, 0x2A ), - BYTES_TO_T_UINT_8( 0x9D, 0xD1, 0x2E, 0x8A, 0x8D, 0x39, 0x56, 0xC6 ), - BYTES_TO_T_UINT_8( 0x5A, 0x87, 0x13, 0x50, 0x8F, 0x08, 0x14, 0x03 ), - BYTES_TO_T_UINT_8( 0x12, 0x41, 0x81, 0xFE, 0x6E, 0x9C, 0x1D, 0x18 ), - BYTES_TO_T_UINT_8( 0x19, 0x2D, 0xF8, 0xE3, 0x6B, 0x05, 0x8E, 0x98 ), - BYTES_TO_T_UINT_8( 0xE4, 0xE7, 0x3E, 0xE2, 0xA7, 0x2F, 0x31, 0xB3 ), -}; -static const t_uint secp384r1_gx[] = { - BYTES_TO_T_UINT_8( 0xB7, 0x0A, 0x76, 0x72, 0x38, 0x5E, 0x54, 0x3A ), - BYTES_TO_T_UINT_8( 0x6C, 0x29, 0x55, 0xBF, 0x5D, 0xF2, 0x02, 0x55 ), - BYTES_TO_T_UINT_8( 0x38, 0x2A, 0x54, 0x82, 0xE0, 0x41, 0xF7, 0x59 ), - BYTES_TO_T_UINT_8( 0x98, 0x9B, 0xA7, 0x8B, 0x62, 0x3B, 0x1D, 0x6E ), - BYTES_TO_T_UINT_8( 0x74, 0xAD, 0x20, 0xF3, 0x1E, 0xC7, 0xB1, 0x8E ), - BYTES_TO_T_UINT_8( 0x37, 0x05, 0x8B, 0xBE, 0x22, 0xCA, 0x87, 0xAA ), -}; -static const t_uint secp384r1_gy[] = { - BYTES_TO_T_UINT_8( 0x5F, 0x0E, 0xEA, 0x90, 0x7C, 0x1D, 0x43, 0x7A ), - BYTES_TO_T_UINT_8( 0x9D, 0x81, 0x7E, 0x1D, 0xCE, 0xB1, 0x60, 0x0A ), - BYTES_TO_T_UINT_8( 0xC0, 0xB8, 0xF0, 0xB5, 0x13, 0x31, 0xDA, 0xE9 ), - BYTES_TO_T_UINT_8( 0x7C, 0x14, 0x9A, 0x28, 0xBD, 0x1D, 0xF4, 0xF8 ), - BYTES_TO_T_UINT_8( 0x29, 0xDC, 0x92, 0x92, 0xBF, 0x98, 0x9E, 0x5D ), - BYTES_TO_T_UINT_8( 0x6F, 0x2C, 0x26, 0x96, 0x4A, 0xDE, 0x17, 0x36 ), -}; -static const t_uint secp384r1_n[] = { - BYTES_TO_T_UINT_8( 0x73, 0x29, 0xC5, 0xCC, 0x6A, 0x19, 0xEC, 0xEC ), - BYTES_TO_T_UINT_8( 0x7A, 0xA7, 0xB0, 0x48, 0xB2, 0x0D, 0x1A, 0x58 ), - BYTES_TO_T_UINT_8( 0xDF, 0x2D, 0x37, 0xF4, 0x81, 0x4D, 0x63, 0xC7 ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -#endif /* POLARSSL_ECP_DP_SECP384R1_ENABLED */ - -/* - * Domain parameters for secp521r1 - */ -#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) -static const t_uint secp521r1_p[] = { - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_2( 0xFF, 0x01 ), -}; -static const t_uint secp521r1_b[] = { - BYTES_TO_T_UINT_8( 0x00, 0x3F, 0x50, 0x6B, 0xD4, 0x1F, 0x45, 0xEF ), - BYTES_TO_T_UINT_8( 0xF1, 0x34, 0x2C, 0x3D, 0x88, 0xDF, 0x73, 0x35 ), - BYTES_TO_T_UINT_8( 0x07, 0xBF, 0xB1, 0x3B, 0xBD, 0xC0, 0x52, 0x16 ), - BYTES_TO_T_UINT_8( 0x7B, 0x93, 0x7E, 0xEC, 0x51, 0x39, 0x19, 0x56 ), - BYTES_TO_T_UINT_8( 0xE1, 0x09, 0xF1, 0x8E, 0x91, 0x89, 0xB4, 0xB8 ), - BYTES_TO_T_UINT_8( 0xF3, 0x15, 0xB3, 0x99, 0x5B, 0x72, 0xDA, 0xA2 ), - BYTES_TO_T_UINT_8( 0xEE, 0x40, 0x85, 0xB6, 0xA0, 0x21, 0x9A, 0x92 ), - BYTES_TO_T_UINT_8( 0x1F, 0x9A, 0x1C, 0x8E, 0x61, 0xB9, 0x3E, 0x95 ), - BYTES_TO_T_UINT_2( 0x51, 0x00 ), -}; -static const t_uint secp521r1_gx[] = { - BYTES_TO_T_UINT_8( 0x66, 0xBD, 0xE5, 0xC2, 0x31, 0x7E, 0x7E, 0xF9 ), - BYTES_TO_T_UINT_8( 0x9B, 0x42, 0x6A, 0x85, 0xC1, 0xB3, 0x48, 0x33 ), - BYTES_TO_T_UINT_8( 0xDE, 0xA8, 0xFF, 0xA2, 0x27, 0xC1, 0x1D, 0xFE ), - BYTES_TO_T_UINT_8( 0x28, 0x59, 0xE7, 0xEF, 0x77, 0x5E, 0x4B, 0xA1 ), - BYTES_TO_T_UINT_8( 0xBA, 0x3D, 0x4D, 0x6B, 0x60, 0xAF, 0x28, 0xF8 ), - BYTES_TO_T_UINT_8( 0x21, 0xB5, 0x3F, 0x05, 0x39, 0x81, 0x64, 0x9C ), - BYTES_TO_T_UINT_8( 0x42, 0xB4, 0x95, 0x23, 0x66, 0xCB, 0x3E, 0x9E ), - BYTES_TO_T_UINT_8( 0xCD, 0xE9, 0x04, 0x04, 0xB7, 0x06, 0x8E, 0x85 ), - BYTES_TO_T_UINT_2( 0xC6, 0x00 ), -}; -static const t_uint secp521r1_gy[] = { - BYTES_TO_T_UINT_8( 0x50, 0x66, 0xD1, 0x9F, 0x76, 0x94, 0xBE, 0x88 ), - BYTES_TO_T_UINT_8( 0x40, 0xC2, 0x72, 0xA2, 0x86, 0x70, 0x3C, 0x35 ), - BYTES_TO_T_UINT_8( 0x61, 0x07, 0xAD, 0x3F, 0x01, 0xB9, 0x50, 0xC5 ), - BYTES_TO_T_UINT_8( 0x40, 0x26, 0xF4, 0x5E, 0x99, 0x72, 0xEE, 0x97 ), - BYTES_TO_T_UINT_8( 0x2C, 0x66, 0x3E, 0x27, 0x17, 0xBD, 0xAF, 0x17 ), - BYTES_TO_T_UINT_8( 0x68, 0x44, 0x9B, 0x57, 0x49, 0x44, 0xF5, 0x98 ), - BYTES_TO_T_UINT_8( 0xD9, 0x1B, 0x7D, 0x2C, 0xB4, 0x5F, 0x8A, 0x5C ), - BYTES_TO_T_UINT_8( 0x04, 0xC0, 0x3B, 0x9A, 0x78, 0x6A, 0x29, 0x39 ), - BYTES_TO_T_UINT_2( 0x18, 0x01 ), -}; -static const t_uint secp521r1_n[] = { - BYTES_TO_T_UINT_8( 0x09, 0x64, 0x38, 0x91, 0x1E, 0xB7, 0x6F, 0xBB ), - BYTES_TO_T_UINT_8( 0xAE, 0x47, 0x9C, 0x89, 0xB8, 0xC9, 0xB5, 0x3B ), - BYTES_TO_T_UINT_8( 0xD0, 0xA5, 0x09, 0xF7, 0x48, 0x01, 0xCC, 0x7F ), - BYTES_TO_T_UINT_8( 0x6B, 0x96, 0x2F, 0xBF, 0x83, 0x87, 0x86, 0x51 ), - BYTES_TO_T_UINT_8( 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_2( 0xFF, 0x01 ), -}; -#endif /* POLARSSL_ECP_DP_SECP521R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) -static const t_uint secp192k1_p[] = { - BYTES_TO_T_UINT_8( 0x37, 0xEE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -static const t_uint secp192k1_a[] = { - BYTES_TO_T_UINT_2( 0x00, 0x00 ), -}; -static const t_uint secp192k1_b[] = { - BYTES_TO_T_UINT_2( 0x03, 0x00 ), -}; -static const t_uint secp192k1_gx[] = { - BYTES_TO_T_UINT_8( 0x7D, 0x6C, 0xE0, 0xEA, 0xB1, 0xD1, 0xA5, 0x1D ), - BYTES_TO_T_UINT_8( 0x34, 0xF4, 0xB7, 0x80, 0x02, 0x7D, 0xB0, 0x26 ), - BYTES_TO_T_UINT_8( 0xAE, 0xE9, 0x57, 0xC0, 0x0E, 0xF1, 0x4F, 0xDB ), -}; -static const t_uint secp192k1_gy[] = { - BYTES_TO_T_UINT_8( 0x9D, 0x2F, 0x5E, 0xD9, 0x88, 0xAA, 0x82, 0x40 ), - BYTES_TO_T_UINT_8( 0x34, 0x86, 0xBE, 0x15, 0xD0, 0x63, 0x41, 0x84 ), - BYTES_TO_T_UINT_8( 0xA7, 0x28, 0x56, 0x9C, 0x6D, 0x2F, 0x2F, 0x9B ), -}; -static const t_uint secp192k1_n[] = { - BYTES_TO_T_UINT_8( 0x8D, 0xFD, 0xDE, 0x74, 0x6A, 0x46, 0x69, 0x0F ), - BYTES_TO_T_UINT_8( 0x17, 0xFC, 0xF2, 0x26, 0xFE, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -#endif /* POLARSSL_ECP_DP_SECP192K1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) -static const t_uint secp224k1_p[] = { - BYTES_TO_T_UINT_8( 0x6D, 0xE5, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_4( 0xFF, 0xFF, 0xFF, 0xFF ), -}; -static const t_uint secp224k1_a[] = { - BYTES_TO_T_UINT_2( 0x00, 0x00 ), -}; -static const t_uint secp224k1_b[] = { - BYTES_TO_T_UINT_2( 0x05, 0x00 ), -}; -static const t_uint secp224k1_gx[] = { - BYTES_TO_T_UINT_8( 0x5C, 0xA4, 0xB7, 0xB6, 0x0E, 0x65, 0x7E, 0x0F ), - BYTES_TO_T_UINT_8( 0xA9, 0x75, 0x70, 0xE4, 0xE9, 0x67, 0xA4, 0x69 ), - BYTES_TO_T_UINT_8( 0xA1, 0x28, 0xFC, 0x30, 0xDF, 0x99, 0xF0, 0x4D ), - BYTES_TO_T_UINT_4( 0x33, 0x5B, 0x45, 0xA1 ), -}; -static const t_uint secp224k1_gy[] = { - BYTES_TO_T_UINT_8( 0xA5, 0x61, 0x6D, 0x55, 0xDB, 0x4B, 0xCA, 0xE2 ), - BYTES_TO_T_UINT_8( 0x59, 0xBD, 0xB0, 0xC0, 0xF7, 0x19, 0xE3, 0xF7 ), - BYTES_TO_T_UINT_8( 0xD6, 0xFB, 0xCA, 0x82, 0x42, 0x34, 0xBA, 0x7F ), - BYTES_TO_T_UINT_4( 0xED, 0x9F, 0x08, 0x7E ), -}; -static const t_uint secp224k1_n[] = { - BYTES_TO_T_UINT_8( 0xF7, 0xB1, 0x9F, 0x76, 0x71, 0xA9, 0xF0, 0xCA ), - BYTES_TO_T_UINT_8( 0x84, 0x61, 0xEC, 0xD2, 0xE8, 0xDC, 0x01, 0x00 ), - BYTES_TO_T_UINT_8( 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ), - BYTES_TO_T_UINT_8( 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ), -}; -#endif /* POLARSSL_ECP_DP_SECP224K1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) -static const t_uint secp256k1_p[] = { - BYTES_TO_T_UINT_8( 0x2F, 0xFC, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -static const t_uint secp256k1_a[] = { - BYTES_TO_T_UINT_2( 0x00, 0x00 ), -}; -static const t_uint secp256k1_b[] = { - BYTES_TO_T_UINT_2( 0x07, 0x00 ), -}; -static const t_uint secp256k1_gx[] = { - BYTES_TO_T_UINT_8( 0x98, 0x17, 0xF8, 0x16, 0x5B, 0x81, 0xF2, 0x59 ), - BYTES_TO_T_UINT_8( 0xD9, 0x28, 0xCE, 0x2D, 0xDB, 0xFC, 0x9B, 0x02 ), - BYTES_TO_T_UINT_8( 0x07, 0x0B, 0x87, 0xCE, 0x95, 0x62, 0xA0, 0x55 ), - BYTES_TO_T_UINT_8( 0xAC, 0xBB, 0xDC, 0xF9, 0x7E, 0x66, 0xBE, 0x79 ), -}; -static const t_uint secp256k1_gy[] = { - BYTES_TO_T_UINT_8( 0xB8, 0xD4, 0x10, 0xFB, 0x8F, 0xD0, 0x47, 0x9C ), - BYTES_TO_T_UINT_8( 0x19, 0x54, 0x85, 0xA6, 0x48, 0xB4, 0x17, 0xFD ), - BYTES_TO_T_UINT_8( 0xA8, 0x08, 0x11, 0x0E, 0xFC, 0xFB, 0xA4, 0x5D ), - BYTES_TO_T_UINT_8( 0x65, 0xC4, 0xA3, 0x26, 0x77, 0xDA, 0x3A, 0x48 ), -}; -static const t_uint secp256k1_n[] = { - BYTES_TO_T_UINT_8( 0x41, 0x41, 0x36, 0xD0, 0x8C, 0x5E, 0xD2, 0xBF ), - BYTES_TO_T_UINT_8( 0x3B, 0xA0, 0x48, 0xAF, 0xE6, 0xDC, 0xAE, 0xBA ), - BYTES_TO_T_UINT_8( 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -#endif /* POLARSSL_ECP_DP_SECP256K1_ENABLED */ - -/* - * Domain parameters for brainpoolP256r1 (RFC 5639 3.4) - */ -#if defined(POLARSSL_ECP_DP_BP256R1_ENABLED) -static const t_uint brainpoolP256r1_p[] = { - BYTES_TO_T_UINT_8( 0x77, 0x53, 0x6E, 0x1F, 0x1D, 0x48, 0x13, 0x20 ), - BYTES_TO_T_UINT_8( 0x28, 0x20, 0x26, 0xD5, 0x23, 0xF6, 0x3B, 0x6E ), - BYTES_TO_T_UINT_8( 0x72, 0x8D, 0x83, 0x9D, 0x90, 0x0A, 0x66, 0x3E ), - BYTES_TO_T_UINT_8( 0xBC, 0xA9, 0xEE, 0xA1, 0xDB, 0x57, 0xFB, 0xA9 ), -}; -static const t_uint brainpoolP256r1_a[] = { - BYTES_TO_T_UINT_8( 0xD9, 0xB5, 0x30, 0xF3, 0x44, 0x4B, 0x4A, 0xE9 ), - BYTES_TO_T_UINT_8( 0x6C, 0x5C, 0xDC, 0x26, 0xC1, 0x55, 0x80, 0xFB ), - BYTES_TO_T_UINT_8( 0xE7, 0xFF, 0x7A, 0x41, 0x30, 0x75, 0xF6, 0xEE ), - BYTES_TO_T_UINT_8( 0x57, 0x30, 0x2C, 0xFC, 0x75, 0x09, 0x5A, 0x7D ), -}; -static const t_uint brainpoolP256r1_b[] = { - BYTES_TO_T_UINT_8( 0xB6, 0x07, 0x8C, 0xFF, 0x18, 0xDC, 0xCC, 0x6B ), - BYTES_TO_T_UINT_8( 0xCE, 0xE1, 0xF7, 0x5C, 0x29, 0x16, 0x84, 0x95 ), - BYTES_TO_T_UINT_8( 0xBF, 0x7C, 0xD7, 0xBB, 0xD9, 0xB5, 0x30, 0xF3 ), - BYTES_TO_T_UINT_8( 0x44, 0x4B, 0x4A, 0xE9, 0x6C, 0x5C, 0xDC, 0x26 ), -}; -static const t_uint brainpoolP256r1_gx[] = { - BYTES_TO_T_UINT_8( 0x62, 0x32, 0xCE, 0x9A, 0xBD, 0x53, 0x44, 0x3A ), - BYTES_TO_T_UINT_8( 0xC2, 0x23, 0xBD, 0xE3, 0xE1, 0x27, 0xDE, 0xB9 ), - BYTES_TO_T_UINT_8( 0xAF, 0xB7, 0x81, 0xFC, 0x2F, 0x48, 0x4B, 0x2C ), - BYTES_TO_T_UINT_8( 0xCB, 0x57, 0x7E, 0xCB, 0xB9, 0xAE, 0xD2, 0x8B ), -}; -static const t_uint brainpoolP256r1_gy[] = { - BYTES_TO_T_UINT_8( 0x97, 0x69, 0x04, 0x2F, 0xC7, 0x54, 0x1D, 0x5C ), - BYTES_TO_T_UINT_8( 0x54, 0x8E, 0xED, 0x2D, 0x13, 0x45, 0x77, 0xC2 ), - BYTES_TO_T_UINT_8( 0xC9, 0x1D, 0x61, 0x14, 0x1A, 0x46, 0xF8, 0x97 ), - BYTES_TO_T_UINT_8( 0xFD, 0xC4, 0xDA, 0xC3, 0x35, 0xF8, 0x7E, 0x54 ), -}; -static const t_uint brainpoolP256r1_n[] = { - BYTES_TO_T_UINT_8( 0xA7, 0x56, 0x48, 0x97, 0x82, 0x0E, 0x1E, 0x90 ), - BYTES_TO_T_UINT_8( 0xF7, 0xA6, 0x61, 0xB5, 0xA3, 0x7A, 0x39, 0x8C ), - BYTES_TO_T_UINT_8( 0x71, 0x8D, 0x83, 0x9D, 0x90, 0x0A, 0x66, 0x3E ), - BYTES_TO_T_UINT_8( 0xBC, 0xA9, 0xEE, 0xA1, 0xDB, 0x57, 0xFB, 0xA9 ), -}; -#endif /* POLARSSL_ECP_DP_BP256R1_ENABLED */ - -/* - * Domain parameters for brainpoolP384r1 (RFC 5639 3.6) - */ -#if defined(POLARSSL_ECP_DP_BP384R1_ENABLED) -static const t_uint brainpoolP384r1_p[] = { - BYTES_TO_T_UINT_8( 0x53, 0xEC, 0x07, 0x31, 0x13, 0x00, 0x47, 0x87 ), - BYTES_TO_T_UINT_8( 0x71, 0x1A, 0x1D, 0x90, 0x29, 0xA7, 0xD3, 0xAC ), - BYTES_TO_T_UINT_8( 0x23, 0x11, 0xB7, 0x7F, 0x19, 0xDA, 0xB1, 0x12 ), - BYTES_TO_T_UINT_8( 0xB4, 0x56, 0x54, 0xED, 0x09, 0x71, 0x2F, 0x15 ), - BYTES_TO_T_UINT_8( 0xDF, 0x41, 0xE6, 0x50, 0x7E, 0x6F, 0x5D, 0x0F ), - BYTES_TO_T_UINT_8( 0x28, 0x6D, 0x38, 0xA3, 0x82, 0x1E, 0xB9, 0x8C ), -}; -static const t_uint brainpoolP384r1_a[] = { - BYTES_TO_T_UINT_8( 0x26, 0x28, 0xCE, 0x22, 0xDD, 0xC7, 0xA8, 0x04 ), - BYTES_TO_T_UINT_8( 0xEB, 0xD4, 0x3A, 0x50, 0x4A, 0x81, 0xA5, 0x8A ), - BYTES_TO_T_UINT_8( 0x0F, 0xF9, 0x91, 0xBA, 0xEF, 0x65, 0x91, 0x13 ), - BYTES_TO_T_UINT_8( 0x87, 0x27, 0xB2, 0x4F, 0x8E, 0xA2, 0xBE, 0xC2 ), - BYTES_TO_T_UINT_8( 0xA0, 0xAF, 0x05, 0xCE, 0x0A, 0x08, 0x72, 0x3C ), - BYTES_TO_T_UINT_8( 0x0C, 0x15, 0x8C, 0x3D, 0xC6, 0x82, 0xC3, 0x7B ), -}; -static const t_uint brainpoolP384r1_b[] = { - BYTES_TO_T_UINT_8( 0x11, 0x4C, 0x50, 0xFA, 0x96, 0x86, 0xB7, 0x3A ), - BYTES_TO_T_UINT_8( 0x94, 0xC9, 0xDB, 0x95, 0x02, 0x39, 0xB4, 0x7C ), - BYTES_TO_T_UINT_8( 0xD5, 0x62, 0xEB, 0x3E, 0xA5, 0x0E, 0x88, 0x2E ), - BYTES_TO_T_UINT_8( 0xA6, 0xD2, 0xDC, 0x07, 0xE1, 0x7D, 0xB7, 0x2F ), - BYTES_TO_T_UINT_8( 0x7C, 0x44, 0xF0, 0x16, 0x54, 0xB5, 0x39, 0x8B ), - BYTES_TO_T_UINT_8( 0x26, 0x28, 0xCE, 0x22, 0xDD, 0xC7, 0xA8, 0x04 ), -}; -static const t_uint brainpoolP384r1_gx[] = { - BYTES_TO_T_UINT_8( 0x1E, 0xAF, 0xD4, 0x47, 0xE2, 0xB2, 0x87, 0xEF ), - BYTES_TO_T_UINT_8( 0xAA, 0x46, 0xD6, 0x36, 0x34, 0xE0, 0x26, 0xE8 ), - BYTES_TO_T_UINT_8( 0xE8, 0x10, 0xBD, 0x0C, 0xFE, 0xCA, 0x7F, 0xDB ), - BYTES_TO_T_UINT_8( 0xE3, 0x4F, 0xF1, 0x7E, 0xE7, 0xA3, 0x47, 0x88 ), - BYTES_TO_T_UINT_8( 0x6B, 0x3F, 0xC1, 0xB7, 0x81, 0x3A, 0xA6, 0xA2 ), - BYTES_TO_T_UINT_8( 0xFF, 0x45, 0xCF, 0x68, 0xF0, 0x64, 0x1C, 0x1D ), -}; -static const t_uint brainpoolP384r1_gy[] = { - BYTES_TO_T_UINT_8( 0x15, 0x53, 0x3C, 0x26, 0x41, 0x03, 0x82, 0x42 ), - BYTES_TO_T_UINT_8( 0x11, 0x81, 0x91, 0x77, 0x21, 0x46, 0x46, 0x0E ), - BYTES_TO_T_UINT_8( 0x28, 0x29, 0x91, 0xF9, 0x4F, 0x05, 0x9C, 0xE1 ), - BYTES_TO_T_UINT_8( 0x64, 0x58, 0xEC, 0xFE, 0x29, 0x0B, 0xB7, 0x62 ), - BYTES_TO_T_UINT_8( 0x52, 0xD5, 0xCF, 0x95, 0x8E, 0xEB, 0xB1, 0x5C ), - BYTES_TO_T_UINT_8( 0xA4, 0xC2, 0xF9, 0x20, 0x75, 0x1D, 0xBE, 0x8A ), -}; -static const t_uint brainpoolP384r1_n[] = { - BYTES_TO_T_UINT_8( 0x65, 0x65, 0x04, 0xE9, 0x02, 0x32, 0x88, 0x3B ), - BYTES_TO_T_UINT_8( 0x10, 0xC3, 0x7F, 0x6B, 0xAF, 0xB6, 0x3A, 0xCF ), - BYTES_TO_T_UINT_8( 0xA7, 0x25, 0x04, 0xAC, 0x6C, 0x6E, 0x16, 0x1F ), - BYTES_TO_T_UINT_8( 0xB3, 0x56, 0x54, 0xED, 0x09, 0x71, 0x2F, 0x15 ), - BYTES_TO_T_UINT_8( 0xDF, 0x41, 0xE6, 0x50, 0x7E, 0x6F, 0x5D, 0x0F ), - BYTES_TO_T_UINT_8( 0x28, 0x6D, 0x38, 0xA3, 0x82, 0x1E, 0xB9, 0x8C ), -}; -#endif /* POLARSSL_ECP_DP_BP384R1_ENABLED */ - -/* - * Domain parameters for brainpoolP512r1 (RFC 5639 3.7) - */ -#if defined(POLARSSL_ECP_DP_BP512R1_ENABLED) -static const t_uint brainpoolP512r1_p[] = { - BYTES_TO_T_UINT_8( 0xF3, 0x48, 0x3A, 0x58, 0x56, 0x60, 0xAA, 0x28 ), - BYTES_TO_T_UINT_8( 0x85, 0xC6, 0x82, 0x2D, 0x2F, 0xFF, 0x81, 0x28 ), - BYTES_TO_T_UINT_8( 0xE6, 0x80, 0xA3, 0xE6, 0x2A, 0xA1, 0xCD, 0xAE ), - BYTES_TO_T_UINT_8( 0x42, 0x68, 0xC6, 0x9B, 0x00, 0x9B, 0x4D, 0x7D ), - BYTES_TO_T_UINT_8( 0x71, 0x08, 0x33, 0x70, 0xCA, 0x9C, 0x63, 0xD6 ), - BYTES_TO_T_UINT_8( 0x0E, 0xD2, 0xC9, 0xB3, 0xB3, 0x8D, 0x30, 0xCB ), - BYTES_TO_T_UINT_8( 0x07, 0xFC, 0xC9, 0x33, 0xAE, 0xE6, 0xD4, 0x3F ), - BYTES_TO_T_UINT_8( 0x8B, 0xC4, 0xE9, 0xDB, 0xB8, 0x9D, 0xDD, 0xAA ), -}; -static const t_uint brainpoolP512r1_a[] = { - BYTES_TO_T_UINT_8( 0xCA, 0x94, 0xFC, 0x77, 0x4D, 0xAC, 0xC1, 0xE7 ), - BYTES_TO_T_UINT_8( 0xB9, 0xC7, 0xF2, 0x2B, 0xA7, 0x17, 0x11, 0x7F ), - BYTES_TO_T_UINT_8( 0xB5, 0xC8, 0x9A, 0x8B, 0xC9, 0xF1, 0x2E, 0x0A ), - BYTES_TO_T_UINT_8( 0xA1, 0x3A, 0x25, 0xA8, 0x5A, 0x5D, 0xED, 0x2D ), - BYTES_TO_T_UINT_8( 0xBC, 0x63, 0x98, 0xEA, 0xCA, 0x41, 0x34, 0xA8 ), - BYTES_TO_T_UINT_8( 0x10, 0x16, 0xF9, 0x3D, 0x8D, 0xDD, 0xCB, 0x94 ), - BYTES_TO_T_UINT_8( 0xC5, 0x4C, 0x23, 0xAC, 0x45, 0x71, 0x32, 0xE2 ), - BYTES_TO_T_UINT_8( 0x89, 0x3B, 0x60, 0x8B, 0x31, 0xA3, 0x30, 0x78 ), -}; -static const t_uint brainpoolP512r1_b[] = { - BYTES_TO_T_UINT_8( 0x23, 0xF7, 0x16, 0x80, 0x63, 0xBD, 0x09, 0x28 ), - BYTES_TO_T_UINT_8( 0xDD, 0xE5, 0xBA, 0x5E, 0xB7, 0x50, 0x40, 0x98 ), - BYTES_TO_T_UINT_8( 0x67, 0x3E, 0x08, 0xDC, 0xCA, 0x94, 0xFC, 0x77 ), - BYTES_TO_T_UINT_8( 0x4D, 0xAC, 0xC1, 0xE7, 0xB9, 0xC7, 0xF2, 0x2B ), - BYTES_TO_T_UINT_8( 0xA7, 0x17, 0x11, 0x7F, 0xB5, 0xC8, 0x9A, 0x8B ), - BYTES_TO_T_UINT_8( 0xC9, 0xF1, 0x2E, 0x0A, 0xA1, 0x3A, 0x25, 0xA8 ), - BYTES_TO_T_UINT_8( 0x5A, 0x5D, 0xED, 0x2D, 0xBC, 0x63, 0x98, 0xEA ), - BYTES_TO_T_UINT_8( 0xCA, 0x41, 0x34, 0xA8, 0x10, 0x16, 0xF9, 0x3D ), -}; -static const t_uint brainpoolP512r1_gx[] = { - BYTES_TO_T_UINT_8( 0x22, 0xF8, 0xB9, 0xBC, 0x09, 0x22, 0x35, 0x8B ), - BYTES_TO_T_UINT_8( 0x68, 0x5E, 0x6A, 0x40, 0x47, 0x50, 0x6D, 0x7C ), - BYTES_TO_T_UINT_8( 0x5F, 0x7D, 0xB9, 0x93, 0x7B, 0x68, 0xD1, 0x50 ), - BYTES_TO_T_UINT_8( 0x8D, 0xD4, 0xD0, 0xE2, 0x78, 0x1F, 0x3B, 0xFF ), - BYTES_TO_T_UINT_8( 0x8E, 0x09, 0xD0, 0xF4, 0xEE, 0x62, 0x3B, 0xB4 ), - BYTES_TO_T_UINT_8( 0xC1, 0x16, 0xD9, 0xB5, 0x70, 0x9F, 0xED, 0x85 ), - BYTES_TO_T_UINT_8( 0x93, 0x6A, 0x4C, 0x9C, 0x2E, 0x32, 0x21, 0x5A ), - BYTES_TO_T_UINT_8( 0x64, 0xD9, 0x2E, 0xD8, 0xBD, 0xE4, 0xAE, 0x81 ), -}; -static const t_uint brainpoolP512r1_gy[] = { - BYTES_TO_T_UINT_8( 0x92, 0x08, 0xD8, 0x3A, 0x0F, 0x1E, 0xCD, 0x78 ), - BYTES_TO_T_UINT_8( 0x06, 0x54, 0xF0, 0xA8, 0x2F, 0x2B, 0xCA, 0xD1 ), - BYTES_TO_T_UINT_8( 0xAE, 0x63, 0x27, 0x8A, 0xD8, 0x4B, 0xCA, 0x5B ), - BYTES_TO_T_UINT_8( 0x5E, 0x48, 0x5F, 0x4A, 0x49, 0xDE, 0xDC, 0xB2 ), - BYTES_TO_T_UINT_8( 0x11, 0x81, 0x1F, 0x88, 0x5B, 0xC5, 0x00, 0xA0 ), - BYTES_TO_T_UINT_8( 0x1A, 0x7B, 0xA5, 0x24, 0x00, 0xF7, 0x09, 0xF2 ), - BYTES_TO_T_UINT_8( 0xFD, 0x22, 0x78, 0xCF, 0xA9, 0xBF, 0xEA, 0xC0 ), - BYTES_TO_T_UINT_8( 0xEC, 0x32, 0x63, 0x56, 0x5D, 0x38, 0xDE, 0x7D ), -}; -static const t_uint brainpoolP512r1_n[] = { - BYTES_TO_T_UINT_8( 0x69, 0x00, 0xA9, 0x9C, 0x82, 0x96, 0x87, 0xB5 ), - BYTES_TO_T_UINT_8( 0xDD, 0xDA, 0x5D, 0x08, 0x81, 0xD3, 0xB1, 0x1D ), - BYTES_TO_T_UINT_8( 0x47, 0x10, 0xAC, 0x7F, 0x19, 0x61, 0x86, 0x41 ), - BYTES_TO_T_UINT_8( 0x19, 0x26, 0xA9, 0x4C, 0x41, 0x5C, 0x3E, 0x55 ), - BYTES_TO_T_UINT_8( 0x70, 0x08, 0x33, 0x70, 0xCA, 0x9C, 0x63, 0xD6 ), - BYTES_TO_T_UINT_8( 0x0E, 0xD2, 0xC9, 0xB3, 0xB3, 0x8D, 0x30, 0xCB ), - BYTES_TO_T_UINT_8( 0x07, 0xFC, 0xC9, 0x33, 0xAE, 0xE6, 0xD4, 0x3F ), - BYTES_TO_T_UINT_8( 0x8B, 0xC4, 0xE9, 0xDB, 0xB8, 0x9D, 0xDD, 0xAA ), -}; -#endif /* POLARSSL_ECP_DP_BP512R1_ENABLED */ - -/* - * Create an MPI from embedded constants - * (assumes len is an exact multiple of sizeof t_uint) - */ -static inline void ecp_mpi_load( mpi *X, const t_uint *p, size_t len ) -{ - X->s = 1; - X->n = len / sizeof( t_uint ); - X->p = (t_uint *) p; -} - -/* - * Set an MPI to static value 1 - */ -static inline void ecp_mpi_set1( mpi *X ) -{ - static t_uint one[] = { 1 }; - X->s = 1; - X->n = 1; - X->p = one; -} - -/* - * Make group available from embedded constants - */ -static int ecp_group_load( ecp_group *grp, - const t_uint *p, size_t plen, - const t_uint *a, size_t alen, - const t_uint *b, size_t blen, - const t_uint *gx, size_t gxlen, - const t_uint *gy, size_t gylen, - const t_uint *n, size_t nlen) -{ - ecp_mpi_load( &grp->P, p, plen ); - if( a != NULL ) - ecp_mpi_load( &grp->A, a, alen ); - ecp_mpi_load( &grp->B, b, blen ); - ecp_mpi_load( &grp->N, n, nlen ); - - ecp_mpi_load( &grp->G.X, gx, gxlen ); - ecp_mpi_load( &grp->G.Y, gy, gylen ); - ecp_mpi_set1( &grp->G.Z ); - - grp->pbits = mpi_msb( &grp->P ); - grp->nbits = mpi_msb( &grp->N ); - - grp->h = 1; - - return( 0 ); -} - -#if defined(POLARSSL_ECP_NIST_OPTIM) -/* Forward declarations */ -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) -static int ecp_mod_p192( mpi * ); -#endif -#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) -static int ecp_mod_p224( mpi * ); -#endif -#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) -static int ecp_mod_p256( mpi * ); -#endif -#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) -static int ecp_mod_p384( mpi * ); -#endif -#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) -static int ecp_mod_p521( mpi * ); -#endif - -#define NIST_MODP( P ) grp->modp = ecp_mod_ ## P; -#else -#define NIST_MODP( P ) -#endif /* POLARSSL_ECP_NIST_OPTIM */ - -/* Additional forward declarations */ -#if defined(POLARSSL_ECP_DP_M255_ENABLED) -static int ecp_mod_p255( mpi * ); -#endif -#if defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) -static int ecp_mod_p192k1( mpi * ); -#endif -#if defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) -static int ecp_mod_p224k1( mpi * ); -#endif -#if defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) -static int ecp_mod_p256k1( mpi * ); -#endif - -#define LOAD_GROUP_A( G ) ecp_group_load( grp, \ - G ## _p, sizeof( G ## _p ), \ - G ## _a, sizeof( G ## _a ), \ - G ## _b, sizeof( G ## _b ), \ - G ## _gx, sizeof( G ## _gx ), \ - G ## _gy, sizeof( G ## _gy ), \ - G ## _n, sizeof( G ## _n ) ) - -#define LOAD_GROUP( G ) ecp_group_load( grp, \ - G ## _p, sizeof( G ## _p ), \ - NULL, 0, \ - G ## _b, sizeof( G ## _b ), \ - G ## _gx, sizeof( G ## _gx ), \ - G ## _gy, sizeof( G ## _gy ), \ - G ## _n, sizeof( G ## _n ) ) - -#if defined(POLARSSL_ECP_DP_M255_ENABLED) -/* - * Specialized function for creating the Curve25519 group - */ -static int ecp_use_curve25519( ecp_group *grp ) -{ - int ret; - - /* Actually ( A + 2 ) / 4 */ - MPI_CHK( mpi_read_string( &grp->A, 16, "01DB42" ) ); - - /* P = 2^255 - 19 */ - MPI_CHK( mpi_lset( &grp->P, 1 ) ); - MPI_CHK( mpi_shift_l( &grp->P, 255 ) ); - MPI_CHK( mpi_sub_int( &grp->P, &grp->P, 19 ) ); - grp->pbits = mpi_msb( &grp->P ); - - /* Y intentionaly not set, since we use x/z coordinates. - * This is used as a marker to identify Montgomery curves! */ - MPI_CHK( mpi_lset( &grp->G.X, 9 ) ); - MPI_CHK( mpi_lset( &grp->G.Z, 1 ) ); - mpi_free( &grp->G.Y ); - - /* Actually, the required msb for private keys */ - grp->nbits = 254; - -cleanup: - if( ret != 0 ) - ecp_group_free( grp ); - - return( ret ); -} -#endif /* POLARSSL_ECP_DP_M255_ENABLED */ - -/* - * Set a group using well-known domain parameters - */ -int ecp_use_known_dp( ecp_group *grp, ecp_group_id id ) -{ - ecp_group_free( grp ); - - grp->id = id; - - switch( id ) - { -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) - case POLARSSL_ECP_DP_SECP192R1: - NIST_MODP( p192 ); - return( LOAD_GROUP( secp192r1 ) ); -#endif /* POLARSSL_ECP_DP_SECP192R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) - case POLARSSL_ECP_DP_SECP224R1: - NIST_MODP( p224 ); - return( LOAD_GROUP( secp224r1 ) ); -#endif /* POLARSSL_ECP_DP_SECP224R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) - case POLARSSL_ECP_DP_SECP256R1: - NIST_MODP( p256 ); - return( LOAD_GROUP( secp256r1 ) ); -#endif /* POLARSSL_ECP_DP_SECP256R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) - case POLARSSL_ECP_DP_SECP384R1: - NIST_MODP( p384 ); - return( LOAD_GROUP( secp384r1 ) ); -#endif /* POLARSSL_ECP_DP_SECP384R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) - case POLARSSL_ECP_DP_SECP521R1: - NIST_MODP( p521 ); - return( LOAD_GROUP( secp521r1 ) ); -#endif /* POLARSSL_ECP_DP_SECP521R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) - case POLARSSL_ECP_DP_SECP192K1: - grp->modp = ecp_mod_p192k1; - return( LOAD_GROUP_A( secp192k1 ) ); -#endif /* POLARSSL_ECP_DP_SECP192K1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) - case POLARSSL_ECP_DP_SECP224K1: - grp->modp = ecp_mod_p224k1; - return( LOAD_GROUP_A( secp224k1 ) ); -#endif /* POLARSSL_ECP_DP_SECP224K1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) - case POLARSSL_ECP_DP_SECP256K1: - grp->modp = ecp_mod_p256k1; - return( LOAD_GROUP_A( secp256k1 ) ); -#endif /* POLARSSL_ECP_DP_SECP256K1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_BP256R1_ENABLED) - case POLARSSL_ECP_DP_BP256R1: - return( LOAD_GROUP_A( brainpoolP256r1 ) ); -#endif /* POLARSSL_ECP_DP_BP256R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_BP384R1_ENABLED) - case POLARSSL_ECP_DP_BP384R1: - return( LOAD_GROUP_A( brainpoolP384r1 ) ); -#endif /* POLARSSL_ECP_DP_BP384R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_BP512R1_ENABLED) - case POLARSSL_ECP_DP_BP512R1: - return( LOAD_GROUP_A( brainpoolP512r1 ) ); -#endif /* POLARSSL_ECP_DP_BP512R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_M255_ENABLED) - case POLARSSL_ECP_DP_M255: - grp->modp = ecp_mod_p255; - return( ecp_use_curve25519( grp ) ); -#endif /* POLARSSL_ECP_DP_M255_ENABLED */ - - default: - ecp_group_free( grp ); - return( POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE ); - } -} - -#if defined(POLARSSL_ECP_NIST_OPTIM) -/* - * Fast reduction modulo the primes used by the NIST curves. - * - * These functions are critical for speed, but not needed for correct - * operations. So, we make the choice to heavily rely on the internals of our - * bignum library, which creates a tight coupling between these functions and - * our MPI implementation. However, the coupling between the ECP module and - * MPI remains loose, since these functions can be deactivated at will. - */ - -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) -/* - * Compared to the way things are presented in FIPS 186-3 D.2, - * we proceed in columns, from right (least significant chunk) to left, - * adding chunks to N in place, and keeping a carry for the next chunk. - * This avoids moving things around in memory, and uselessly adding zeros, - * compared to the more straightforward, line-oriented approach. - * - * For this prime we need to handle data in chunks of 64 bits. - * Since this is always a multiple of our basic t_uint, we can - * use a t_uint * to designate such a chunk, and small loops to handle it. - */ - -/* Add 64-bit chunks (dst += src) and update carry */ -static inline void add64( t_uint *dst, t_uint *src, t_uint *carry ) -{ - unsigned char i; - t_uint c = 0; - for( i = 0; i < 8 / sizeof( t_uint ); i++, dst++, src++ ) - { - *dst += c; c = ( *dst < c ); - *dst += *src; c += ( *dst < *src ); - } - *carry += c; -} - -/* Add carry to a 64-bit chunk and update carry */ -static inline void carry64( t_uint *dst, t_uint *carry ) -{ - unsigned char i; - for( i = 0; i < 8 / sizeof( t_uint ); i++, dst++ ) - { - *dst += *carry; - *carry = ( *dst < *carry ); - } -} - -#define WIDTH 8 / sizeof( t_uint ) -#define A( i ) N->p + i * WIDTH -#define ADD( i ) add64( p, A( i ), &c ) -#define NEXT p += WIDTH; carry64( p, &c ) -#define LAST p += WIDTH; *p = c; while( ++p < end ) *p = 0 - -/* - * Fast quasi-reduction modulo p192 (FIPS 186-3 D.2.1) - */ -static int ecp_mod_p192( mpi *N ) -{ - int ret; - t_uint c = 0; - t_uint *p, *end; - - /* Make sure we have enough blocks so that A(5) is legal */ - MPI_CHK( mpi_grow( N, 6 * WIDTH ) ); - - p = N->p; - end = p + N->n; - - ADD( 3 ); ADD( 5 ); NEXT; // A0 += A3 + A5 - ADD( 3 ); ADD( 4 ); ADD( 5 ); NEXT; // A1 += A3 + A4 + A5 - ADD( 4 ); ADD( 5 ); LAST; // A2 += A4 + A5 - -cleanup: - return( ret ); -} - -#undef WIDTH -#undef A -#undef ADD -#undef NEXT -#undef LAST -#endif /* POLARSSL_ECP_DP_SECP192R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) -/* - * The reader is advised to first understand ecp_mod_p192() since the same - * general structure is used here, but with additional complications: - * (1) chunks of 32 bits, and (2) subtractions. - */ - -/* - * For these primes, we need to handle data in chunks of 32 bits. - * This makes it more complicated if we use 64 bits limbs in MPI, - * which prevents us from using a uniform access method as for p192. - * - * So, we define a mini abstraction layer to access 32 bit chunks, - * load them in 'cur' for work, and store them back from 'cur' when done. - * - * While at it, also define the size of N in terms of 32-bit chunks. - */ -#define LOAD32 cur = A( i ); - -#if defined(POLARSSL_HAVE_INT8) /* 8 bit */ - -#define MAX32 N->n / 4 -#define A( j ) (uint32_t)( N->p[4*j+0] ) | \ - ( N->p[4*j+1] << 8 ) | \ - ( N->p[4*j+2] << 16 ) | \ - ( N->p[4*j+3] << 24 ) -#define STORE32 N->p[4*i+0] = (t_uint)( cur ); \ - N->p[4*i+1] = (t_uint)( cur >> 8 ); \ - N->p[4*i+2] = (t_uint)( cur >> 16 ); \ - N->p[4*i+3] = (t_uint)( cur >> 24 ); - -#elif defined(POLARSSL_HAVE_INT16) /* 16 bit */ - -#define MAX32 N->n / 2 -#define A( j ) (uint32_t)( N->p[2*j] ) | ( N->p[2*j+1] << 16 ) -#define STORE32 N->p[2*i+0] = (t_uint)( cur ); \ - N->p[2*i+1] = (t_uint)( cur >> 16 ); - -#elif defined(POLARSSL_HAVE_INT32) /* 32 bit */ - -#define MAX32 N->n -#define A( j ) N->p[j] -#define STORE32 N->p[i] = cur; - -#else /* 64-bit */ - -#define MAX32 N->n * 2 -#define A( j ) j % 2 ? (uint32_t)( N->p[j/2] >> 32 ) : (uint32_t)( N->p[j/2] ) -#define STORE32 \ - if( i % 2 ) { \ - N->p[i/2] &= 0x00000000FFFFFFFF; \ - N->p[i/2] |= ((t_uint) cur) << 32; \ - } else { \ - N->p[i/2] &= 0xFFFFFFFF00000000; \ - N->p[i/2] |= (t_uint) cur; \ - } - -#endif /* sizeof( t_uint ) */ - -/* - * Helpers for addition and subtraction of chunks, with signed carry. - */ -static inline void add32( uint32_t *dst, uint32_t src, signed char *carry ) -{ - *dst += src; - *carry += ( *dst < src ); -} - -static inline void sub32( uint32_t *dst, uint32_t src, signed char *carry ) -{ - *carry -= ( *dst < src ); - *dst -= src; -} - -#define ADD( j ) add32( &cur, A( j ), &c ); -#define SUB( j ) sub32( &cur, A( j ), &c ); - -/* - * Helpers for the main 'loop' - * (see fix_negative for the motivation of C) - */ -#define INIT( b ) \ - int ret; \ - signed char c = 0, cc; \ - uint32_t cur; \ - size_t i = 0, bits = b; \ - mpi C; \ - t_uint Cp[ b / 8 / sizeof( t_uint) + 1 ]; \ - \ - C.s = 1; \ - C.n = b / 8 / sizeof( t_uint) + 1; \ - C.p = Cp; \ - memset( Cp, 0, C.n * sizeof( t_uint ) ); \ - \ - MPI_CHK( mpi_grow( N, b * 2 / 8 / sizeof( t_uint ) ) ); \ - LOAD32; - -#define NEXT \ - STORE32; i++; LOAD32; \ - cc = c; c = 0; \ - if( cc < 0 ) \ - sub32( &cur, -cc, &c ); \ - else \ - add32( &cur, cc, &c ); \ - -#define LAST \ - STORE32; i++; \ - cur = c > 0 ? c : 0; STORE32; \ - cur = 0; while( ++i < MAX32 ) { STORE32; } \ - if( c < 0 ) fix_negative( N, c, &C, bits ); - -/* - * If the result is negative, we get it in the form - * c * 2^(bits + 32) + N, with c negative and N positive shorter than 'bits' - */ -static inline int fix_negative( mpi *N, signed char c, mpi *C, size_t bits ) -{ - int ret; - - /* C = - c * 2^(bits + 32) */ -#if !defined(POLARSSL_HAVE_INT64) - ((void) bits); -#else - if( bits == 224 ) - C->p[ C->n - 1 ] = ((t_uint) -c) << 32; - else -#endif - C->p[ C->n - 1 ] = (t_uint) -c; - - /* N = - ( C - N ) */ - MPI_CHK( mpi_sub_abs( N, C, N ) ); - N->s = -1; - -cleanup: - - return( ret ); -} - -#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) -/* - * Fast quasi-reduction modulo p224 (FIPS 186-3 D.2.2) - */ -static int ecp_mod_p224( mpi *N ) -{ - INIT( 224 ); - - SUB( 7 ); SUB( 11 ); NEXT; // A0 += -A7 - A11 - SUB( 8 ); SUB( 12 ); NEXT; // A1 += -A8 - A12 - SUB( 9 ); SUB( 13 ); NEXT; // A2 += -A9 - A13 - SUB( 10 ); ADD( 7 ); ADD( 11 ); NEXT; // A3 += -A10 + A7 + A11 - SUB( 11 ); ADD( 8 ); ADD( 12 ); NEXT; // A4 += -A11 + A8 + A12 - SUB( 12 ); ADD( 9 ); ADD( 13 ); NEXT; // A5 += -A12 + A9 + A13 - SUB( 13 ); ADD( 10 ); LAST; // A6 += -A13 + A10 - -cleanup: - return( ret ); -} -#endif /* POLARSSL_ECP_DP_SECP224R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) -/* - * Fast quasi-reduction modulo p256 (FIPS 186-3 D.2.3) - */ -static int ecp_mod_p256( mpi *N ) -{ - INIT( 256 ); - - ADD( 8 ); ADD( 9 ); - SUB( 11 ); SUB( 12 ); SUB( 13 ); SUB( 14 ); NEXT; // A0 - - ADD( 9 ); ADD( 10 ); - SUB( 12 ); SUB( 13 ); SUB( 14 ); SUB( 15 ); NEXT; // A1 - - ADD( 10 ); ADD( 11 ); - SUB( 13 ); SUB( 14 ); SUB( 15 ); NEXT; // A2 - - ADD( 11 ); ADD( 11 ); ADD( 12 ); ADD( 12 ); ADD( 13 ); - SUB( 15 ); SUB( 8 ); SUB( 9 ); NEXT; // A3 - - ADD( 12 ); ADD( 12 ); ADD( 13 ); ADD( 13 ); ADD( 14 ); - SUB( 9 ); SUB( 10 ); NEXT; // A4 - - ADD( 13 ); ADD( 13 ); ADD( 14 ); ADD( 14 ); ADD( 15 ); - SUB( 10 ); SUB( 11 ); NEXT; // A5 - - ADD( 14 ); ADD( 14 ); ADD( 15 ); ADD( 15 ); ADD( 14 ); ADD( 13 ); - SUB( 8 ); SUB( 9 ); NEXT; // A6 - - ADD( 15 ); ADD( 15 ); ADD( 15 ); ADD( 8 ); - SUB( 10 ); SUB( 11 ); SUB( 12 ); SUB( 13 ); LAST; // A7 - -cleanup: - return( ret ); -} -#endif /* POLARSSL_ECP_DP_SECP256R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) -/* - * Fast quasi-reduction modulo p384 (FIPS 186-3 D.2.4) - */ -static int ecp_mod_p384( mpi *N ) -{ - INIT( 384 ); - - ADD( 12 ); ADD( 21 ); ADD( 20 ); - SUB( 23 ); NEXT; // A0 - - ADD( 13 ); ADD( 22 ); ADD( 23 ); - SUB( 12 ); SUB( 20 ); NEXT; // A2 - - ADD( 14 ); ADD( 23 ); - SUB( 13 ); SUB( 21 ); NEXT; // A2 - - ADD( 15 ); ADD( 12 ); ADD( 20 ); ADD( 21 ); - SUB( 14 ); SUB( 22 ); SUB( 23 ); NEXT; // A3 - - ADD( 21 ); ADD( 21 ); ADD( 16 ); ADD( 13 ); ADD( 12 ); ADD( 20 ); ADD( 22 ); - SUB( 15 ); SUB( 23 ); SUB( 23 ); NEXT; // A4 - - ADD( 22 ); ADD( 22 ); ADD( 17 ); ADD( 14 ); ADD( 13 ); ADD( 21 ); ADD( 23 ); - SUB( 16 ); NEXT; // A5 - - ADD( 23 ); ADD( 23 ); ADD( 18 ); ADD( 15 ); ADD( 14 ); ADD( 22 ); - SUB( 17 ); NEXT; // A6 - - ADD( 19 ); ADD( 16 ); ADD( 15 ); ADD( 23 ); - SUB( 18 ); NEXT; // A7 - - ADD( 20 ); ADD( 17 ); ADD( 16 ); - SUB( 19 ); NEXT; // A8 - - ADD( 21 ); ADD( 18 ); ADD( 17 ); - SUB( 20 ); NEXT; // A9 - - ADD( 22 ); ADD( 19 ); ADD( 18 ); - SUB( 21 ); NEXT; // A10 - - ADD( 23 ); ADD( 20 ); ADD( 19 ); - SUB( 22 ); LAST; // A11 - -cleanup: - return( ret ); -} -#endif /* POLARSSL_ECP_DP_SECP384R1_ENABLED */ - -#undef A -#undef LOAD32 -#undef STORE32 -#undef MAX32 -#undef INIT -#undef NEXT -#undef LAST - -#endif /* POLARSSL_ECP_DP_SECP224R1_ENABLED || - POLARSSL_ECP_DP_SECP256R1_ENABLED || - POLARSSL_ECP_DP_SECP384R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) -/* - * Here we have an actual Mersenne prime, so things are more straightforward. - * However, chunks are aligned on a 'weird' boundary (521 bits). - */ - -/* Size of p521 in terms of t_uint */ -#define P521_WIDTH ( 521 / 8 / sizeof( t_uint ) + 1 ) - -/* Bits to keep in the most significant t_uint */ -#if defined(POLARSSL_HAVE_INT8) -#define P521_MASK 0x01 -#else -#define P521_MASK 0x01FF -#endif - -/* - * Fast quasi-reduction modulo p521 (FIPS 186-3 D.2.5) - * Write N as A1 + 2^521 A0, return A0 + A1 - */ -static int ecp_mod_p521( mpi *N ) -{ - int ret; - size_t i; - mpi M; - t_uint Mp[P521_WIDTH + 1]; - /* Worst case for the size of M is when t_uint is 16 bits: - * we need to hold bits 513 to 1056, which is 34 limbs, that is - * P521_WIDTH + 1. Otherwise P521_WIDTH is enough. */ - - if( N->n < P521_WIDTH ) - return( 0 ); - - /* M = A1 */ - M.s = 1; - M.n = N->n - ( P521_WIDTH - 1 ); - if( M.n > P521_WIDTH + 1 ) - M.n = P521_WIDTH + 1; - M.p = Mp; - memcpy( Mp, N->p + P521_WIDTH - 1, M.n * sizeof( t_uint ) ); - MPI_CHK( mpi_shift_r( &M, 521 % ( 8 * sizeof( t_uint ) ) ) ); - - /* N = A0 */ - N->p[P521_WIDTH - 1] &= P521_MASK; - for( i = P521_WIDTH; i < N->n; i++ ) - N->p[i] = 0; - - /* N = A0 + A1 */ - MPI_CHK( mpi_add_abs( N, N, &M ) ); - -cleanup: - return( ret ); -} - -#undef P521_WIDTH -#undef P521_MASK -#endif /* POLARSSL_ECP_DP_SECP521R1_ENABLED */ - -#endif /* POLARSSL_ECP_NIST_OPTIM */ - -#if defined(POLARSSL_ECP_DP_M255_ENABLED) - -/* Size of p255 in terms of t_uint */ -#define P255_WIDTH ( 255 / 8 / sizeof( t_uint ) + 1 ) - -/* - * Fast quasi-reduction modulo p255 = 2^255 - 19 - * Write N as A0 + 2^255 A1, return A0 + 19 * A1 - */ -static int ecp_mod_p255( mpi *N ) -{ - int ret; - size_t i; - mpi M; - t_uint Mp[P255_WIDTH + 2]; - - if( N->n < P255_WIDTH ) - return( 0 ); - - /* M = A1 */ - M.s = 1; - M.n = N->n - ( P255_WIDTH - 1 ); - if( M.n > P255_WIDTH + 1 ) - M.n = P255_WIDTH + 1; - M.p = Mp; - memset( Mp, 0, sizeof Mp ); - memcpy( Mp, N->p + P255_WIDTH - 1, M.n * sizeof( t_uint ) ); - MPI_CHK( mpi_shift_r( &M, 255 % ( 8 * sizeof( t_uint ) ) ) ); - M.n++; /* Make room for multiplication by 19 */ - - /* N = A0 */ - MPI_CHK( mpi_set_bit( N, 255, 0 ) ); - for( i = P255_WIDTH; i < N->n; i++ ) - N->p[i] = 0; - - /* N = A0 + 19 * A1 */ - MPI_CHK( mpi_mul_int( &M, &M, 19 ) ); - MPI_CHK( mpi_add_abs( N, N, &M ) ); - -cleanup: - return( ret ); -} -#endif /* POLARSSL_ECP_DP_M255_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) -/* - * Fast quasi-reduction modulo P = 2^s - R, - * with R about 33 bits, used by the Koblitz curves. - * - * Write N as A0 + 2^224 A1, return A0 + R * A1. - * Actually do two passes, since R is big. - */ -#define P_KOBLITZ_MAX ( 256 / 8 / sizeof( t_uint ) ) // Max limbs in P -#define P_KOBLITZ_R ( 8 / sizeof( t_uint ) ) // Limbs in R -static inline int ecp_mod_koblitz( mpi *N, t_uint *Rp, size_t p_limbs, - size_t adjust, size_t shift, t_uint mask ) -{ - int ret; - size_t i; - mpi M, R; - t_uint Mp[P_KOBLITZ_MAX + P_KOBLITZ_R]; - - if( N->n < p_limbs ) - return( 0 ); - - /* Init R */ - R.s = 1; - R.p = Rp; - R.n = P_KOBLITZ_R; - - /* Common setup for M */ - M.s = 1; - M.p = Mp; - - /* M = A1 */ - M.n = N->n - ( p_limbs - adjust ); - if( M.n > p_limbs + adjust ) - M.n = p_limbs + adjust; - memset( Mp, 0, sizeof Mp ); - memcpy( Mp, N->p + p_limbs - adjust, M.n * sizeof( t_uint ) ); - if( shift != 0 ) - MPI_CHK( mpi_shift_r( &M, shift ) ); - M.n += R.n - adjust; /* Make room for multiplication by R */ - - /* N = A0 */ - if( mask != 0 ) - N->p[p_limbs - 1] &= mask; - for( i = p_limbs; i < N->n; i++ ) - N->p[i] = 0; - - /* N = A0 + R * A1 */ - MPI_CHK( mpi_mul_mpi( &M, &M, &R ) ); - MPI_CHK( mpi_add_abs( N, N, &M ) ); - - /* Second pass */ - - /* M = A1 */ - M.n = N->n - ( p_limbs - adjust ); - if( M.n > p_limbs + adjust ) - M.n = p_limbs + adjust; - memset( Mp, 0, sizeof Mp ); - memcpy( Mp, N->p + p_limbs - adjust, M.n * sizeof( t_uint ) ); - if( shift != 0 ) - MPI_CHK( mpi_shift_r( &M, shift ) ); - M.n += R.n - adjust; /* Make room for multiplication by R */ - - /* N = A0 */ - if( mask != 0 ) - N->p[p_limbs - 1] &= mask; - for( i = p_limbs; i < N->n; i++ ) - N->p[i] = 0; - - /* N = A0 + R * A1 */ - MPI_CHK( mpi_mul_mpi( &M, &M, &R ) ); - MPI_CHK( mpi_add_abs( N, N, &M ) ); - -cleanup: - return( ret ); -} -#endif /* POLARSSL_ECP_DP_SECP192K1_ENABLED) || - POLARSSL_ECP_DP_SECP224K1_ENABLED) || - POLARSSL_ECP_DP_SECP256K1_ENABLED) */ - -#if defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) -/* - * Fast quasi-reduction modulo p192k1 = 2^192 - R, - * with R = 2^32 + 2^12 + 2^8 + 2^7 + 2^6 + 2^3 + 1 = 0x0100001119 - */ -static int ecp_mod_p192k1( mpi *N ) -{ - static t_uint Rp[] = { - BYTES_TO_T_UINT_8( 0xC9, 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) }; - - return( ecp_mod_koblitz( N, Rp, 192 / 8 / sizeof( t_uint ), 0, 0, 0 ) ); -} -#endif /* POLARSSL_ECP_DP_SECP192K1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) -/* - * Fast quasi-reduction modulo p224k1 = 2^224 - R, - * with R = 2^32 + 2^12 + 2^11 + 2^9 + 2^7 + 2^4 + 2 + 1 = 0x0100001A93 - */ -static int ecp_mod_p224k1( mpi *N ) -{ - static t_uint Rp[] = { - BYTES_TO_T_UINT_8( 0x93, 0x1A, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) }; - -#if defined(POLARSSL_HAVE_INT64) - return( ecp_mod_koblitz( N, Rp, 4, 1, 32, 0xFFFFFFFF ) ); -#else - return( ecp_mod_koblitz( N, Rp, 224 / 8 / sizeof( t_uint ), 0, 0, 0 ) ); -#endif -} - -#endif /* POLARSSL_ECP_DP_SECP224K1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) -/* - * Fast quasi-reduction modulo p256k1 = 2^256 - R, - * with R = 2^32 + 2^9 + 2^8 + 2^7 + 2^6 + 2^4 + 1 = 0x01000003D1 - */ -static int ecp_mod_p256k1( mpi *N ) -{ - static t_uint Rp[] = { - BYTES_TO_T_UINT_8( 0xD1, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) }; - return( ecp_mod_koblitz( N, Rp, 256 / 8 / sizeof( t_uint ), 0, 0, 0 ) ); -} -#endif /* POLARSSL_ECP_DP_SECP256K1_ENABLED */ - -#endif /* POLARSSL_ECP_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/entropy.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/entropy.c deleted file mode 100644 index bc7fb0f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/entropy.c +++ /dev/null @@ -1,477 +0,0 @@ -/* - * Entropy accumulator implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ENTROPY_C) - -#include "polarssl/entropy.h" -#include "polarssl/entropy_poll.h" - -#if defined(POLARSSL_FS_IO) -#include -#endif - -#if defined(POLARSSL_HAVEGE_C) -#include "polarssl/havege.h" -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#define ENTROPY_MAX_LOOP 256 /**< Maximum amount to loop before error */ - -void entropy_init( entropy_context *ctx ) -{ - memset( ctx, 0, sizeof(entropy_context) ); - -#if defined(POLARSSL_THREADING_C) - polarssl_mutex_init( &ctx->mutex ); -#endif - -#if defined(POLARSSL_ENTROPY_SHA512_ACCUMULATOR) - sha512_starts( &ctx->accumulator, 0 ); -#else - sha256_starts( &ctx->accumulator, 0 ); -#endif -#if defined(POLARSSL_HAVEGE_C) - havege_init( &ctx->havege_data ); -#endif - -#if !defined(POLARSSL_NO_DEFAULT_ENTROPY_SOURCES) -#if !defined(POLARSSL_NO_PLATFORM_ENTROPY) - entropy_add_source( ctx, platform_entropy_poll, NULL, - ENTROPY_MIN_PLATFORM ); -#endif -#if defined(POLARSSL_TIMING_C) - entropy_add_source( ctx, hardclock_poll, NULL, ENTROPY_MIN_HARDCLOCK ); -#endif -#if defined(POLARSSL_HAVEGE_C) - entropy_add_source( ctx, havege_poll, &ctx->havege_data, - ENTROPY_MIN_HAVEGE ); -#endif -#endif /* POLARSSL_NO_DEFAULT_ENTROPY_SOURCES */ -} - -void entropy_free( entropy_context *ctx ) -{ -#if defined(POLARSSL_HAVEGE_C) - havege_free( &ctx->havege_data ); -#endif - polarssl_zeroize( ctx, sizeof( entropy_context ) ); -#if defined(POLARSSL_THREADING_C) - polarssl_mutex_free( &ctx->mutex ); -#endif -} - -int entropy_add_source( entropy_context *ctx, - f_source_ptr f_source, void *p_source, - size_t threshold ) -{ - int index, ret = 0; - -#if defined(POLARSSL_THREADING_C) - if( ( ret = polarssl_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); -#endif - - index = ctx->source_count; - if( index >= ENTROPY_MAX_SOURCES ) - { - ret = POLARSSL_ERR_ENTROPY_MAX_SOURCES; - goto exit; - } - - ctx->source[index].f_source = f_source; - ctx->source[index].p_source = p_source; - ctx->source[index].threshold = threshold; - - ctx->source_count++; - -exit: -#if defined(POLARSSL_THREADING_C) - if( polarssl_mutex_unlock( &ctx->mutex ) != 0 ) - return( POLARSSL_ERR_THREADING_MUTEX_ERROR ); -#endif - - return( ret ); -} - -/* - * Entropy accumulator update - */ -static int entropy_update( entropy_context *ctx, unsigned char source_id, - const unsigned char *data, size_t len ) -{ - unsigned char header[2]; - unsigned char tmp[ENTROPY_BLOCK_SIZE]; - size_t use_len = len; - const unsigned char *p = data; - - if( use_len > ENTROPY_BLOCK_SIZE ) - { -#if defined(POLARSSL_ENTROPY_SHA512_ACCUMULATOR) - sha512( data, len, tmp, 0 ); -#else - sha256( data, len, tmp, 0 ); -#endif - p = tmp; - use_len = ENTROPY_BLOCK_SIZE; - } - - header[0] = source_id; - header[1] = use_len & 0xFF; - -#if defined(POLARSSL_ENTROPY_SHA512_ACCUMULATOR) - sha512_update( &ctx->accumulator, header, 2 ); - sha512_update( &ctx->accumulator, p, use_len ); -#else - sha256_update( &ctx->accumulator, header, 2 ); - sha256_update( &ctx->accumulator, p, use_len ); -#endif - - return( 0 ); -} - -int entropy_update_manual( entropy_context *ctx, - const unsigned char *data, size_t len ) -{ - int ret; - -#if defined(POLARSSL_THREADING_C) - if( ( ret = polarssl_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); -#endif - - ret = entropy_update( ctx, ENTROPY_SOURCE_MANUAL, data, len ); - -#if defined(POLARSSL_THREADING_C) - if( polarssl_mutex_unlock( &ctx->mutex ) != 0 ) - return( POLARSSL_ERR_THREADING_MUTEX_ERROR ); -#endif - - return( ret ); -} - -/* - * Run through the different sources to add entropy to our accumulator - */ -static int entropy_gather_internal( entropy_context *ctx ) -{ - int ret, i; - unsigned char buf[ENTROPY_MAX_GATHER]; - size_t olen; - - if( ctx->source_count == 0 ) - return( POLARSSL_ERR_ENTROPY_NO_SOURCES_DEFINED ); - - /* - * Run through our entropy sources - */ - for( i = 0; i < ctx->source_count; i++ ) - { - olen = 0; - if( ( ret = ctx->source[i].f_source( ctx->source[i].p_source, - buf, ENTROPY_MAX_GATHER, &olen ) ) != 0 ) - { - return( ret ); - } - - /* - * Add if we actually gathered something - */ - if( olen > 0 ) - { - entropy_update( ctx, (unsigned char) i, buf, olen ); - ctx->source[i].size += olen; - } - } - - return( 0 ); -} - -/* - * Thread-safe wrapper for entropy_gather_internal() - */ -int entropy_gather( entropy_context *ctx ) -{ - int ret; - -#if defined(POLARSSL_THREADING_C) - if( ( ret = polarssl_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); -#endif - - ret = entropy_gather_internal( ctx ); - -#if defined(POLARSSL_THREADING_C) - if( polarssl_mutex_unlock( &ctx->mutex ) != 0 ) - return( POLARSSL_ERR_THREADING_MUTEX_ERROR ); -#endif - - return( ret ); -} - -int entropy_func( void *data, unsigned char *output, size_t len ) -{ - int ret, count = 0, i, reached; - entropy_context *ctx = (entropy_context *) data; - unsigned char buf[ENTROPY_BLOCK_SIZE]; - - if( len > ENTROPY_BLOCK_SIZE ) - return( POLARSSL_ERR_ENTROPY_SOURCE_FAILED ); - -#if defined(POLARSSL_THREADING_C) - if( ( ret = polarssl_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); -#endif - - /* - * Always gather extra entropy before a call - */ - do - { - if( count++ > ENTROPY_MAX_LOOP ) - { - ret = POLARSSL_ERR_ENTROPY_SOURCE_FAILED; - goto exit; - } - - if( ( ret = entropy_gather_internal( ctx ) ) != 0 ) - goto exit; - - reached = 0; - - for( i = 0; i < ctx->source_count; i++ ) - if( ctx->source[i].size >= ctx->source[i].threshold ) - reached++; - } - while( reached != ctx->source_count ); - - memset( buf, 0, ENTROPY_BLOCK_SIZE ); - -#if defined(POLARSSL_ENTROPY_SHA512_ACCUMULATOR) - sha512_finish( &ctx->accumulator, buf ); - - /* - * Reset accumulator and counters and recycle existing entropy - */ - memset( &ctx->accumulator, 0, sizeof( sha512_context ) ); - sha512_starts( &ctx->accumulator, 0 ); - sha512_update( &ctx->accumulator, buf, ENTROPY_BLOCK_SIZE ); - - /* - * Perform second SHA-512 on entropy - */ - sha512( buf, ENTROPY_BLOCK_SIZE, buf, 0 ); -#else /* POLARSSL_ENTROPY_SHA512_ACCUMULATOR */ - sha256_finish( &ctx->accumulator, buf ); - - /* - * Reset accumulator and counters and recycle existing entropy - */ - memset( &ctx->accumulator, 0, sizeof( sha256_context ) ); - sha256_starts( &ctx->accumulator, 0 ); - sha256_update( &ctx->accumulator, buf, ENTROPY_BLOCK_SIZE ); - - /* - * Perform second SHA-256 on entropy - */ - sha256( buf, ENTROPY_BLOCK_SIZE, buf, 0 ); -#endif /* POLARSSL_ENTROPY_SHA512_ACCUMULATOR */ - - for( i = 0; i < ctx->source_count; i++ ) - ctx->source[i].size = 0; - - memcpy( output, buf, len ); - - ret = 0; - -exit: -#if defined(POLARSSL_THREADING_C) - if( polarssl_mutex_unlock( &ctx->mutex ) != 0 ) - return( POLARSSL_ERR_THREADING_MUTEX_ERROR ); -#endif - - return( ret ); -} - -#if defined(POLARSSL_FS_IO) -int entropy_write_seed_file( entropy_context *ctx, const char *path ) -{ - int ret = POLARSSL_ERR_ENTROPY_FILE_IO_ERROR; - FILE *f; - unsigned char buf[ENTROPY_BLOCK_SIZE]; - - if( ( f = fopen( path, "wb" ) ) == NULL ) - return( POLARSSL_ERR_ENTROPY_FILE_IO_ERROR ); - - if( ( ret = entropy_func( ctx, buf, ENTROPY_BLOCK_SIZE ) ) != 0 ) - goto exit; - - if( fwrite( buf, 1, ENTROPY_BLOCK_SIZE, f ) != ENTROPY_BLOCK_SIZE ) - { - ret = POLARSSL_ERR_ENTROPY_FILE_IO_ERROR; - goto exit; - } - - ret = 0; - -exit: - fclose( f ); - return( ret ); -} - -int entropy_update_seed_file( entropy_context *ctx, const char *path ) -{ - FILE *f; - size_t n; - unsigned char buf[ ENTROPY_MAX_SEED_SIZE ]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_ENTROPY_FILE_IO_ERROR ); - - fseek( f, 0, SEEK_END ); - n = (size_t) ftell( f ); - fseek( f, 0, SEEK_SET ); - - if( n > ENTROPY_MAX_SEED_SIZE ) - n = ENTROPY_MAX_SEED_SIZE; - - if( fread( buf, 1, n, f ) != n ) - { - fclose( f ); - return( POLARSSL_ERR_ENTROPY_FILE_IO_ERROR ); - } - - fclose( f ); - - entropy_update_manual( ctx, buf, n ); - - return( entropy_write_seed_file( ctx, path ) ); -} -#endif /* POLARSSL_FS_IO */ - -#if defined(POLARSSL_SELF_TEST) - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#include -#define polarssl_printf printf -#endif - -/* - * Dummy source function - */ -static int entropy_dummy_source( void *data, unsigned char *output, - size_t len, size_t *olen ) -{ - ((void) data); - - memset( output, 0x2a, len ); - *olen = len; - - return( 0 ); -} - -/* - * The actual entropy quality is hard to test, but we can at least - * test that the functions don't cause errors and write the correct - * amount of data to buffers. - */ -int entropy_self_test( int verbose ) -{ - int ret = 0; - entropy_context ctx; - unsigned char buf[ENTROPY_BLOCK_SIZE] = { 0 }; - unsigned char acc[ENTROPY_BLOCK_SIZE] = { 0 }; - size_t i, j; - - if( verbose != 0 ) - polarssl_printf( " ENTROPY test: " ); - - entropy_init( &ctx ); - - ret = entropy_add_source( &ctx, entropy_dummy_source, NULL, 16 ); - if( ret != 0 ) - goto cleanup; - - if( ( ret = entropy_gather( &ctx ) ) != 0 ) - goto cleanup; - - if( ( ret = entropy_update_manual( &ctx, buf, sizeof buf ) ) != 0 ) - goto cleanup; - - /* - * To test that entropy_func writes correct number of bytes: - * - use the whole buffer and rely on ASan to detect overruns - * - collect entropy 8 times and OR the result in an accumulator: - * any byte should then be 0 with probably 2^(-64), so requiring - * each of the 32 or 64 bytes to be non-zero has a false failure rate - * of at most 2^(-58) which is acceptable. - */ - for( i = 0; i < 8; i++ ) - { - if( ( ret = entropy_func( &ctx, buf, sizeof( buf ) ) ) != 0 ) - goto cleanup; - - for( j = 0; j < sizeof( buf ); j++ ) - acc[j] |= buf[j]; - } - - for( j = 0; j < sizeof( buf ); j++ ) - { - if( acc[j] == 0 ) - { - ret = 1; - goto cleanup; - } - } - -cleanup: - entropy_free( &ctx ); - - if( verbose != 0 ) - { - if( ret != 0 ) - polarssl_printf( "failed\n" ); - else - polarssl_printf( "passed\n" ); - - polarssl_printf( "\n" ); - } - - return( ret != 0 ); -} -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_ENTROPY_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/entropy_poll.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/entropy_poll.c deleted file mode 100644 index 9ca9e95..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/entropy_poll.c +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Platform-specific and custom entropy polling functions - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ENTROPY_C) - -#include "polarssl/entropy.h" -#include "polarssl/entropy_poll.h" - -#if defined(POLARSSL_TIMING_C) -#include "polarssl/timing.h" -#endif -#if defined(POLARSSL_HAVEGE_C) -#include "polarssl/havege.h" -#endif - -#if !defined(POLARSSL_NO_PLATFORM_ENTROPY) -#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) - -#if !defined(_WIN32_WINNT) -#define _WIN32_WINNT 0x0400 -#endif -#include -#include - -int platform_entropy_poll( void *data, unsigned char *output, size_t len, - size_t *olen ) -{ - HCRYPTPROV provider; - ((void) data); - *olen = 0; - - if( CryptAcquireContext( &provider, NULL, NULL, - PROV_RSA_FULL, CRYPT_VERIFYCONTEXT ) == FALSE ) - { - return( POLARSSL_ERR_ENTROPY_SOURCE_FAILED ); - } - - if( CryptGenRandom( provider, (DWORD) len, output ) == FALSE ) - return( POLARSSL_ERR_ENTROPY_SOURCE_FAILED ); - - CryptReleaseContext( provider, 0 ); - *olen = len; - - return( 0 ); -} -#else /* _WIN32 && !EFIX64 && !EFI32 */ - -#include - -int platform_entropy_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) -{ - FILE *file; - size_t ret; - ((void) data); - - *olen = 0; - - file = fopen( "/dev/urandom", "rb" ); - if( file == NULL ) - return( POLARSSL_ERR_ENTROPY_SOURCE_FAILED ); - - ret = fread( output, 1, len, file ); - if( ret != len ) - { - fclose( file ); - return( POLARSSL_ERR_ENTROPY_SOURCE_FAILED ); - } - - fclose( file ); - *olen = len; - - return( 0 ); -} -#endif /* _WIN32 && !EFIX64 && !EFI32 */ -#endif /* !POLARSSL_NO_PLATFORM_ENTROPY */ - -#if defined(POLARSSL_TIMING_C) -int hardclock_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) -{ - unsigned long timer = hardclock(); - ((void) data); - *olen = 0; - - if( len < sizeof(unsigned long) ) - return( 0 ); - - memcpy( output, &timer, sizeof(unsigned long) ); - *olen = sizeof(unsigned long); - - return( 0 ); -} -#endif /* POLARSSL_TIMING_C */ - -#if defined(POLARSSL_HAVEGE_C) -int havege_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) -{ - havege_state *hs = (havege_state *) data; - *olen = 0; - - if( havege_random( hs, output, len ) != 0 ) - return( POLARSSL_ERR_ENTROPY_SOURCE_FAILED ); - - *olen = len; - - return( 0 ); -} -#endif /* POLARSSL_HAVEGE_C */ - -#endif /* POLARSSL_ENTROPY_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/error.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/error.c deleted file mode 100644 index 22234cf..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/error.c +++ /dev/null @@ -1,769 +0,0 @@ -/* - * Error message information - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ERROR_C) || defined(POLARSSL_ERROR_STRERROR_DUMMY) -#include "polarssl/error.h" -#endif - -#if defined(POLARSSL_ERROR_C) - -#if defined(POLARSSL_AES_C) -#include "polarssl/aes.h" -#endif - -#if defined(POLARSSL_BASE64_C) -#include "polarssl/base64.h" -#endif - -#if defined(POLARSSL_BIGNUM_C) -#include "polarssl/bignum.h" -#endif - -#if defined(POLARSSL_BLOWFISH_C) -#include "polarssl/blowfish.h" -#endif - -#if defined(POLARSSL_CAMELLIA_C) -#include "polarssl/camellia.h" -#endif - -#if defined(POLARSSL_CCM_C) -#include "polarssl/ccm.h" -#endif - -#if defined(POLARSSL_CIPHER_C) -#include "polarssl/cipher.h" -#endif - -#if defined(POLARSSL_CTR_DRBG_C) -#include "polarssl/ctr_drbg.h" -#endif - -#if defined(POLARSSL_DES_C) -#include "polarssl/des.h" -#endif - -#if defined(POLARSSL_DHM_C) -#include "polarssl/dhm.h" -#endif - -#if defined(POLARSSL_ECP_C) -#include "polarssl/ecp.h" -#endif - -#if defined(POLARSSL_ENTROPY_C) -#include "polarssl/entropy.h" -#endif - -#if defined(POLARSSL_GCM_C) -#include "polarssl/gcm.h" -#endif - -#if defined(POLARSSL_HMAC_DRBG_C) -#include "polarssl/hmac_drbg.h" -#endif - -#if defined(POLARSSL_MD_C) -#include "polarssl/md.h" -#endif - -#if defined(POLARSSL_MD2_C) -#include "polarssl/md2.h" -#endif - -#if defined(POLARSSL_MD4_C) -#include "polarssl/md4.h" -#endif - -#if defined(POLARSSL_MD5_C) -#include "polarssl/md5.h" -#endif - -#if defined(POLARSSL_NET_C) -#include "polarssl/net.h" -#endif - -#if defined(POLARSSL_OID_C) -#include "polarssl/oid.h" -#endif - -#if defined(POLARSSL_PADLOCK_C) -#include "polarssl/padlock.h" -#endif - -#if defined(POLARSSL_PBKDF2_C) -#include "polarssl/pbkdf2.h" -#endif - -#if defined(POLARSSL_PEM_PARSE_C) || defined(POLARSSL_PEM_WRITE_C) -#include "polarssl/pem.h" -#endif - -#if defined(POLARSSL_PK_C) -#include "polarssl/pk.h" -#endif - -#if defined(POLARSSL_PKCS12_C) -#include "polarssl/pkcs12.h" -#endif - -#if defined(POLARSSL_PKCS5_C) -#include "polarssl/pkcs5.h" -#endif - -#if defined(POLARSSL_RIPEMD160_C) -#include "polarssl/ripemd160.h" -#endif - -#if defined(POLARSSL_RSA_C) -#include "polarssl/rsa.h" -#endif - -#if defined(POLARSSL_SHA1_C) -#include "polarssl/sha1.h" -#endif - -#if defined(POLARSSL_SHA256_C) -#include "polarssl/sha256.h" -#endif - -#if defined(POLARSSL_SHA512_C) -#include "polarssl/sha512.h" -#endif - -#if defined(POLARSSL_SSL_TLS_C) -#include "polarssl/ssl.h" -#endif - -#if defined(POLARSSL_THREADING_C) -#include "polarssl/threading.h" -#endif - -#if defined(POLARSSL_X509_USE_C) || defined(POLARSSL_X509_CREATE_C) -#include "polarssl/x509.h" -#endif - -#if defined(POLARSSL_XTEA_C) -#include "polarssl/xtea.h" -#endif - - -#include - -#if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \ - !defined(EFI32) -#define snprintf _snprintf -#endif - -void polarssl_strerror( int ret, char *buf, size_t buflen ) -{ - size_t len; - int use_ret; - - if( buflen == 0 ) - return; - - memset( buf, 0x00, buflen ); - /* Reduce buflen to make sure MSVC _snprintf() ends with \0 as well */ - buflen -= 1; - - if( ret < 0 ) - ret = -ret; - - if( ret & 0xFF80 ) - { - use_ret = ret & 0xFF80; - - // High level error codes - // - // BEGIN generated code -#if defined(POLARSSL_CIPHER_C) - if( use_ret == -(POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE) ) - snprintf( buf, buflen, "CIPHER - The selected feature is not available" ); - if( use_ret == -(POLARSSL_ERR_CIPHER_BAD_INPUT_DATA) ) - snprintf( buf, buflen, "CIPHER - Bad input parameters to function" ); - if( use_ret == -(POLARSSL_ERR_CIPHER_ALLOC_FAILED) ) - snprintf( buf, buflen, "CIPHER - Failed to allocate memory" ); - if( use_ret == -(POLARSSL_ERR_CIPHER_INVALID_PADDING) ) - snprintf( buf, buflen, "CIPHER - Input data contains invalid padding and is rejected" ); - if( use_ret == -(POLARSSL_ERR_CIPHER_FULL_BLOCK_EXPECTED) ) - snprintf( buf, buflen, "CIPHER - Decryption of block requires a full block" ); - if( use_ret == -(POLARSSL_ERR_CIPHER_AUTH_FAILED) ) - snprintf( buf, buflen, "CIPHER - Authentication failed (for AEAD modes)" ); -#endif /* POLARSSL_CIPHER_C */ - -#if defined(POLARSSL_DHM_C) - if( use_ret == -(POLARSSL_ERR_DHM_BAD_INPUT_DATA) ) - snprintf( buf, buflen, "DHM - Bad input parameters to function" ); - if( use_ret == -(POLARSSL_ERR_DHM_READ_PARAMS_FAILED) ) - snprintf( buf, buflen, "DHM - Reading of the DHM parameters failed" ); - if( use_ret == -(POLARSSL_ERR_DHM_MAKE_PARAMS_FAILED) ) - snprintf( buf, buflen, "DHM - Making of the DHM parameters failed" ); - if( use_ret == -(POLARSSL_ERR_DHM_READ_PUBLIC_FAILED) ) - snprintf( buf, buflen, "DHM - Reading of the public values failed" ); - if( use_ret == -(POLARSSL_ERR_DHM_MAKE_PUBLIC_FAILED) ) - snprintf( buf, buflen, "DHM - Making of the public value failed" ); - if( use_ret == -(POLARSSL_ERR_DHM_CALC_SECRET_FAILED) ) - snprintf( buf, buflen, "DHM - Calculation of the DHM secret failed" ); - if( use_ret == -(POLARSSL_ERR_DHM_INVALID_FORMAT) ) - snprintf( buf, buflen, "DHM - The ASN.1 data is not formatted correctly" ); - if( use_ret == -(POLARSSL_ERR_DHM_MALLOC_FAILED) ) - snprintf( buf, buflen, "DHM - Allocation of memory failed" ); - if( use_ret == -(POLARSSL_ERR_DHM_FILE_IO_ERROR) ) - snprintf( buf, buflen, "DHM - Read/write of file failed" ); -#endif /* POLARSSL_DHM_C */ - -#if defined(POLARSSL_ECP_C) - if( use_ret == -(POLARSSL_ERR_ECP_BAD_INPUT_DATA) ) - snprintf( buf, buflen, "ECP - Bad input parameters to function" ); - if( use_ret == -(POLARSSL_ERR_ECP_BUFFER_TOO_SMALL) ) - snprintf( buf, buflen, "ECP - The buffer is too small to write to" ); - if( use_ret == -(POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE) ) - snprintf( buf, buflen, "ECP - Requested curve not available" ); - if( use_ret == -(POLARSSL_ERR_ECP_VERIFY_FAILED) ) - snprintf( buf, buflen, "ECP - The signature is not valid" ); - if( use_ret == -(POLARSSL_ERR_ECP_MALLOC_FAILED) ) - snprintf( buf, buflen, "ECP - Memory allocation failed" ); - if( use_ret == -(POLARSSL_ERR_ECP_RANDOM_FAILED) ) - snprintf( buf, buflen, "ECP - Generation of random value, such as (ephemeral) key, failed" ); - if( use_ret == -(POLARSSL_ERR_ECP_INVALID_KEY) ) - snprintf( buf, buflen, "ECP - Invalid private or public key" ); - if( use_ret == -(POLARSSL_ERR_ECP_SIG_LEN_MISMATCH) ) - snprintf( buf, buflen, "ECP - Signature is valid but shorter than the user-supplied length" ); -#endif /* POLARSSL_ECP_C */ - -#if defined(POLARSSL_MD_C) - if( use_ret == -(POLARSSL_ERR_MD_FEATURE_UNAVAILABLE) ) - snprintf( buf, buflen, "MD - The selected feature is not available" ); - if( use_ret == -(POLARSSL_ERR_MD_BAD_INPUT_DATA) ) - snprintf( buf, buflen, "MD - Bad input parameters to function" ); - if( use_ret == -(POLARSSL_ERR_MD_ALLOC_FAILED) ) - snprintf( buf, buflen, "MD - Failed to allocate memory" ); - if( use_ret == -(POLARSSL_ERR_MD_FILE_IO_ERROR) ) - snprintf( buf, buflen, "MD - Opening or reading of file failed" ); -#endif /* POLARSSL_MD_C */ - -#if defined(POLARSSL_PEM_PARSE_C) || defined(POLARSSL_PEM_WRITE_C) - if( use_ret == -(POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT) ) - snprintf( buf, buflen, "PEM - No PEM header or footer found" ); - if( use_ret == -(POLARSSL_ERR_PEM_INVALID_DATA) ) - snprintf( buf, buflen, "PEM - PEM string is not as expected" ); - if( use_ret == -(POLARSSL_ERR_PEM_MALLOC_FAILED) ) - snprintf( buf, buflen, "PEM - Failed to allocate memory" ); - if( use_ret == -(POLARSSL_ERR_PEM_INVALID_ENC_IV) ) - snprintf( buf, buflen, "PEM - RSA IV is not in hex-format" ); - if( use_ret == -(POLARSSL_ERR_PEM_UNKNOWN_ENC_ALG) ) - snprintf( buf, buflen, "PEM - Unsupported key encryption algorithm" ); - if( use_ret == -(POLARSSL_ERR_PEM_PASSWORD_REQUIRED) ) - snprintf( buf, buflen, "PEM - Private key password can't be empty" ); - if( use_ret == -(POLARSSL_ERR_PEM_PASSWORD_MISMATCH) ) - snprintf( buf, buflen, "PEM - Given private key password does not allow for correct decryption" ); - if( use_ret == -(POLARSSL_ERR_PEM_FEATURE_UNAVAILABLE) ) - snprintf( buf, buflen, "PEM - Unavailable feature, e.g. hashing/encryption combination" ); - if( use_ret == -(POLARSSL_ERR_PEM_BAD_INPUT_DATA) ) - snprintf( buf, buflen, "PEM - Bad input parameters to function" ); -#endif /* POLARSSL_PEM_PARSE_C || POLARSSL_PEM_WRITE_C */ - -#if defined(POLARSSL_PK_C) - if( use_ret == -(POLARSSL_ERR_PK_MALLOC_FAILED) ) - snprintf( buf, buflen, "PK - Memory alloation failed" ); - if( use_ret == -(POLARSSL_ERR_PK_TYPE_MISMATCH) ) - snprintf( buf, buflen, "PK - Type mismatch, eg attempt to encrypt with an ECDSA key" ); - if( use_ret == -(POLARSSL_ERR_PK_BAD_INPUT_DATA) ) - snprintf( buf, buflen, "PK - Bad input parameters to function" ); - if( use_ret == -(POLARSSL_ERR_PK_FILE_IO_ERROR) ) - snprintf( buf, buflen, "PK - Read/write of file failed" ); - if( use_ret == -(POLARSSL_ERR_PK_KEY_INVALID_VERSION) ) - snprintf( buf, buflen, "PK - Unsupported key version" ); - if( use_ret == -(POLARSSL_ERR_PK_KEY_INVALID_FORMAT) ) - snprintf( buf, buflen, "PK - Invalid key tag or value" ); - if( use_ret == -(POLARSSL_ERR_PK_UNKNOWN_PK_ALG) ) - snprintf( buf, buflen, "PK - Key algorithm is unsupported (only RSA and EC are supported)" ); - if( use_ret == -(POLARSSL_ERR_PK_PASSWORD_REQUIRED) ) - snprintf( buf, buflen, "PK - Private key password can't be empty" ); - if( use_ret == -(POLARSSL_ERR_PK_PASSWORD_MISMATCH) ) - snprintf( buf, buflen, "PK - Given private key password does not allow for correct decryption" ); - if( use_ret == -(POLARSSL_ERR_PK_INVALID_PUBKEY) ) - snprintf( buf, buflen, "PK - The pubkey tag or value is invalid (only RSA and EC are supported)" ); - if( use_ret == -(POLARSSL_ERR_PK_INVALID_ALG) ) - snprintf( buf, buflen, "PK - The algorithm tag or value is invalid" ); - if( use_ret == -(POLARSSL_ERR_PK_UNKNOWN_NAMED_CURVE) ) - snprintf( buf, buflen, "PK - Elliptic curve is unsupported (only NIST curves are supported)" ); - if( use_ret == -(POLARSSL_ERR_PK_FEATURE_UNAVAILABLE) ) - snprintf( buf, buflen, "PK - Unavailable feature, e.g. RSA disabled for RSA key" ); - if( use_ret == -(POLARSSL_ERR_PK_SIG_LEN_MISMATCH) ) - snprintf( buf, buflen, "PK - The signature is valid but its length is less than expected" ); -#endif /* POLARSSL_PK_C */ - -#if defined(POLARSSL_PKCS12_C) - if( use_ret == -(POLARSSL_ERR_PKCS12_BAD_INPUT_DATA) ) - snprintf( buf, buflen, "PKCS12 - Bad input parameters to function" ); - if( use_ret == -(POLARSSL_ERR_PKCS12_FEATURE_UNAVAILABLE) ) - snprintf( buf, buflen, "PKCS12 - Feature not available, e.g. unsupported encryption scheme" ); - if( use_ret == -(POLARSSL_ERR_PKCS12_PBE_INVALID_FORMAT) ) - snprintf( buf, buflen, "PKCS12 - PBE ASN.1 data not as expected" ); - if( use_ret == -(POLARSSL_ERR_PKCS12_PASSWORD_MISMATCH) ) - snprintf( buf, buflen, "PKCS12 - Given private key password does not allow for correct decryption" ); -#endif /* POLARSSL_PKCS12_C */ - -#if defined(POLARSSL_PKCS5_C) - if( use_ret == -(POLARSSL_ERR_PKCS5_BAD_INPUT_DATA) ) - snprintf( buf, buflen, "PKCS5 - Bad input parameters to function" ); - if( use_ret == -(POLARSSL_ERR_PKCS5_INVALID_FORMAT) ) - snprintf( buf, buflen, "PKCS5 - Unexpected ASN.1 data" ); - if( use_ret == -(POLARSSL_ERR_PKCS5_FEATURE_UNAVAILABLE) ) - snprintf( buf, buflen, "PKCS5 - Requested encryption or digest alg not available" ); - if( use_ret == -(POLARSSL_ERR_PKCS5_PASSWORD_MISMATCH) ) - snprintf( buf, buflen, "PKCS5 - Given private key password does not allow for correct decryption" ); -#endif /* POLARSSL_PKCS5_C */ - -#if defined(POLARSSL_RSA_C) - if( use_ret == -(POLARSSL_ERR_RSA_BAD_INPUT_DATA) ) - snprintf( buf, buflen, "RSA - Bad input parameters to function" ); - if( use_ret == -(POLARSSL_ERR_RSA_INVALID_PADDING) ) - snprintf( buf, buflen, "RSA - Input data contains invalid padding and is rejected" ); - if( use_ret == -(POLARSSL_ERR_RSA_KEY_GEN_FAILED) ) - snprintf( buf, buflen, "RSA - Something failed during generation of a key" ); - if( use_ret == -(POLARSSL_ERR_RSA_KEY_CHECK_FAILED) ) - snprintf( buf, buflen, "RSA - Key failed to pass the libraries validity check" ); - if( use_ret == -(POLARSSL_ERR_RSA_PUBLIC_FAILED) ) - snprintf( buf, buflen, "RSA - The public key operation failed" ); - if( use_ret == -(POLARSSL_ERR_RSA_PRIVATE_FAILED) ) - snprintf( buf, buflen, "RSA - The private key operation failed" ); - if( use_ret == -(POLARSSL_ERR_RSA_VERIFY_FAILED) ) - snprintf( buf, buflen, "RSA - The PKCS#1 verification failed" ); - if( use_ret == -(POLARSSL_ERR_RSA_OUTPUT_TOO_LARGE) ) - snprintf( buf, buflen, "RSA - The output buffer for decryption is not large enough" ); - if( use_ret == -(POLARSSL_ERR_RSA_RNG_FAILED) ) - snprintf( buf, buflen, "RSA - The random generator failed to generate non-zeros" ); -#endif /* POLARSSL_RSA_C */ - -#if defined(POLARSSL_SSL_TLS_C) - if( use_ret == -(POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE) ) - snprintf( buf, buflen, "SSL - The requested feature is not available" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_INPUT_DATA) ) - snprintf( buf, buflen, "SSL - Bad input parameters to function" ); - if( use_ret == -(POLARSSL_ERR_SSL_INVALID_MAC) ) - snprintf( buf, buflen, "SSL - Verification of the message MAC failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_INVALID_RECORD) ) - snprintf( buf, buflen, "SSL - An invalid SSL record was received" ); - if( use_ret == -(POLARSSL_ERR_SSL_CONN_EOF) ) - snprintf( buf, buflen, "SSL - The connection indicated an EOF" ); - if( use_ret == -(POLARSSL_ERR_SSL_UNKNOWN_CIPHER) ) - snprintf( buf, buflen, "SSL - An unknown cipher was received" ); - if( use_ret == -(POLARSSL_ERR_SSL_NO_CIPHER_CHOSEN) ) - snprintf( buf, buflen, "SSL - The server has no ciphersuites in common with the client" ); - if( use_ret == -(POLARSSL_ERR_SSL_NO_RNG) ) - snprintf( buf, buflen, "SSL - No RNG was provided to the SSL module" ); - if( use_ret == -(POLARSSL_ERR_SSL_NO_CLIENT_CERTIFICATE) ) - snprintf( buf, buflen, "SSL - No client certification received from the client, but required by the authentication mode" ); - if( use_ret == -(POLARSSL_ERR_SSL_CERTIFICATE_TOO_LARGE) ) - snprintf( buf, buflen, "SSL - DESCRIPTION MISSING" ); - if( use_ret == -(POLARSSL_ERR_SSL_CERTIFICATE_REQUIRED) ) - snprintf( buf, buflen, "SSL - The own certificate is not set, but needed by the server" ); - if( use_ret == -(POLARSSL_ERR_SSL_PRIVATE_KEY_REQUIRED) ) - snprintf( buf, buflen, "SSL - The own private key or pre-shared key is not set, but needed" ); - if( use_ret == -(POLARSSL_ERR_SSL_CA_CHAIN_REQUIRED) ) - snprintf( buf, buflen, "SSL - No CA Chain is set, but required to operate" ); - if( use_ret == -(POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE) ) - snprintf( buf, buflen, "SSL - An unexpected message was received from our peer" ); - if( use_ret == -(POLARSSL_ERR_SSL_FATAL_ALERT_MESSAGE) ) - { - snprintf( buf, buflen, "SSL - A fatal alert message was received from our peer" ); - return; - } - if( use_ret == -(POLARSSL_ERR_SSL_PEER_VERIFY_FAILED) ) - snprintf( buf, buflen, "SSL - Verification of our peer failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY) ) - snprintf( buf, buflen, "SSL - The peer notified us that the connection is going to be closed" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO) ) - snprintf( buf, buflen, "SSL - Processing of the ClientHello handshake message failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO) ) - snprintf( buf, buflen, "SSL - Processing of the ServerHello handshake message failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE) ) - snprintf( buf, buflen, "SSL - Processing of the Certificate handshake message failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST) ) - snprintf( buf, buflen, "SSL - Processing of the CertificateRequest handshake message failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE) ) - snprintf( buf, buflen, "SSL - Processing of the ServerKeyExchange handshake message failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO_DONE) ) - snprintf( buf, buflen, "SSL - Processing of the ServerHelloDone handshake message failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE) ) - snprintf( buf, buflen, "SSL - Processing of the ClientKeyExchange handshake message failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP) ) - snprintf( buf, buflen, "SSL - Processing of the ClientKeyExchange handshake message failed in DHM / ECDH Read Public" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS) ) - snprintf( buf, buflen, "SSL - Processing of the ClientKeyExchange handshake message failed in DHM / ECDH Calculate Secret" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY) ) - snprintf( buf, buflen, "SSL - Processing of the CertificateVerify handshake message failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC) ) - snprintf( buf, buflen, "SSL - Processing of the ChangeCipherSpec handshake message failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_HS_FINISHED) ) - snprintf( buf, buflen, "SSL - Processing of the Finished handshake message failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_MALLOC_FAILED) ) - snprintf( buf, buflen, "SSL - Memory allocation failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_HW_ACCEL_FAILED) ) - snprintf( buf, buflen, "SSL - Hardware acceleration function returned with error" ); - if( use_ret == -(POLARSSL_ERR_SSL_HW_ACCEL_FALLTHROUGH) ) - snprintf( buf, buflen, "SSL - Hardware acceleration function skipped / left alone data" ); - if( use_ret == -(POLARSSL_ERR_SSL_COMPRESSION_FAILED) ) - snprintf( buf, buflen, "SSL - Processing of the compression / decompression failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_HS_PROTOCOL_VERSION) ) - snprintf( buf, buflen, "SSL - Handshake protocol not within min/max boundaries" ); - if( use_ret == -(POLARSSL_ERR_SSL_BAD_HS_NEW_SESSION_TICKET) ) - snprintf( buf, buflen, "SSL - Processing of the NewSessionTicket handshake message failed" ); - if( use_ret == -(POLARSSL_ERR_SSL_SESSION_TICKET_EXPIRED) ) - snprintf( buf, buflen, "SSL - Session ticket has expired" ); - if( use_ret == -(POLARSSL_ERR_SSL_PK_TYPE_MISMATCH) ) - snprintf( buf, buflen, "SSL - Public key type mismatch (eg, asked for RSA key exchange and presented EC key)" ); - if( use_ret == -(POLARSSL_ERR_SSL_UNKNOWN_IDENTITY) ) - snprintf( buf, buflen, "SSL - Unknown identity received (eg, PSK identity)" ); - if( use_ret == -(POLARSSL_ERR_SSL_INTERNAL_ERROR) ) - snprintf( buf, buflen, "SSL - Internal error (eg, unexpected failure in lower-level module)" ); - if( use_ret == -(POLARSSL_ERR_SSL_COUNTER_WRAPPING) ) - snprintf( buf, buflen, "SSL - A counter would wrap (eg, too many messages exchanged)" ); -#endif /* POLARSSL_SSL_TLS_C */ - -#if defined(POLARSSL_X509_USE_C) || defined(POLARSSL_X509_CREATE_C) - if( use_ret == -(POLARSSL_ERR_X509_FEATURE_UNAVAILABLE) ) - snprintf( buf, buflen, "X509 - Unavailable feature, e.g. RSA hashing/encryption combination" ); - if( use_ret == -(POLARSSL_ERR_X509_UNKNOWN_OID) ) - snprintf( buf, buflen, "X509 - Requested OID is unknown" ); - if( use_ret == -(POLARSSL_ERR_X509_INVALID_FORMAT) ) - snprintf( buf, buflen, "X509 - The CRT/CRL/CSR format is invalid, e.g. different type expected" ); - if( use_ret == -(POLARSSL_ERR_X509_INVALID_VERSION) ) - snprintf( buf, buflen, "X509 - The CRT/CRL/CSR version element is invalid" ); - if( use_ret == -(POLARSSL_ERR_X509_INVALID_SERIAL) ) - snprintf( buf, buflen, "X509 - The serial tag or value is invalid" ); - if( use_ret == -(POLARSSL_ERR_X509_INVALID_ALG) ) - snprintf( buf, buflen, "X509 - The algorithm tag or value is invalid" ); - if( use_ret == -(POLARSSL_ERR_X509_INVALID_NAME) ) - snprintf( buf, buflen, "X509 - The name tag or value is invalid" ); - if( use_ret == -(POLARSSL_ERR_X509_INVALID_DATE) ) - snprintf( buf, buflen, "X509 - The date tag or value is invalid" ); - if( use_ret == -(POLARSSL_ERR_X509_INVALID_SIGNATURE) ) - snprintf( buf, buflen, "X509 - The signature tag or value invalid" ); - if( use_ret == -(POLARSSL_ERR_X509_INVALID_EXTENSIONS) ) - snprintf( buf, buflen, "X509 - The extension tag or value is invalid" ); - if( use_ret == -(POLARSSL_ERR_X509_UNKNOWN_VERSION) ) - snprintf( buf, buflen, "X509 - CRT/CRL/CSR has an unsupported version number" ); - if( use_ret == -(POLARSSL_ERR_X509_UNKNOWN_SIG_ALG) ) - snprintf( buf, buflen, "X509 - Signature algorithm (oid) is unsupported" ); - if( use_ret == -(POLARSSL_ERR_X509_SIG_MISMATCH) ) - snprintf( buf, buflen, "X509 - Signature algorithms do not match. (see \\c ::x509_crt sig_oid)" ); - if( use_ret == -(POLARSSL_ERR_X509_CERT_VERIFY_FAILED) ) - snprintf( buf, buflen, "X509 - Certificate verification failed, e.g. CRL, CA or signature check failed" ); - if( use_ret == -(POLARSSL_ERR_X509_CERT_UNKNOWN_FORMAT) ) - snprintf( buf, buflen, "X509 - Format not recognized as DER or PEM" ); - if( use_ret == -(POLARSSL_ERR_X509_BAD_INPUT_DATA) ) - snprintf( buf, buflen, "X509 - Input invalid" ); - if( use_ret == -(POLARSSL_ERR_X509_MALLOC_FAILED) ) - snprintf( buf, buflen, "X509 - Allocation of memory failed" ); - if( use_ret == -(POLARSSL_ERR_X509_FILE_IO_ERROR) ) - snprintf( buf, buflen, "X509 - Read/write of file failed" ); -#endif /* POLARSSL_X509_USE,X509_CREATE_C */ - // END generated code - - if( strlen( buf ) == 0 ) - snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", use_ret ); - } - - use_ret = ret & ~0xFF80; - - if( use_ret == 0 ) - return; - - // If high level code is present, make a concatenation between both - // error strings. - // - len = strlen( buf ); - - if( len > 0 ) - { - if( buflen - len < 5 ) - return; - - snprintf( buf + len, buflen - len, " : " ); - - buf += len + 3; - buflen -= len + 3; - } - - // Low level error codes - // - // BEGIN generated code -#if defined(POLARSSL_AES_C) - if( use_ret == -(POLARSSL_ERR_AES_INVALID_KEY_LENGTH) ) - snprintf( buf, buflen, "AES - Invalid key length" ); - if( use_ret == -(POLARSSL_ERR_AES_INVALID_INPUT_LENGTH) ) - snprintf( buf, buflen, "AES - Invalid data input length" ); -#endif /* POLARSSL_AES_C */ - -#if defined(POLARSSL_ASN1_PARSE_C) - if( use_ret == -(POLARSSL_ERR_ASN1_OUT_OF_DATA) ) - snprintf( buf, buflen, "ASN1 - Out of data when parsing an ASN1 data structure" ); - if( use_ret == -(POLARSSL_ERR_ASN1_UNEXPECTED_TAG) ) - snprintf( buf, buflen, "ASN1 - ASN1 tag was of an unexpected value" ); - if( use_ret == -(POLARSSL_ERR_ASN1_INVALID_LENGTH) ) - snprintf( buf, buflen, "ASN1 - Error when trying to determine the length or invalid length" ); - if( use_ret == -(POLARSSL_ERR_ASN1_LENGTH_MISMATCH) ) - snprintf( buf, buflen, "ASN1 - Actual length differs from expected length" ); - if( use_ret == -(POLARSSL_ERR_ASN1_INVALID_DATA) ) - snprintf( buf, buflen, "ASN1 - Data is invalid. (not used)" ); - if( use_ret == -(POLARSSL_ERR_ASN1_MALLOC_FAILED) ) - snprintf( buf, buflen, "ASN1 - Memory allocation failed" ); - if( use_ret == -(POLARSSL_ERR_ASN1_BUF_TOO_SMALL) ) - snprintf( buf, buflen, "ASN1 - Buffer too small when writing ASN.1 data structure" ); -#endif /* POLARSSL_ASN1_PARSE_C */ - -#if defined(POLARSSL_BASE64_C) - if( use_ret == -(POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL) ) - snprintf( buf, buflen, "BASE64 - Output buffer too small" ); - if( use_ret == -(POLARSSL_ERR_BASE64_INVALID_CHARACTER) ) - snprintf( buf, buflen, "BASE64 - Invalid character in input" ); -#endif /* POLARSSL_BASE64_C */ - -#if defined(POLARSSL_BIGNUM_C) - if( use_ret == -(POLARSSL_ERR_MPI_FILE_IO_ERROR) ) - snprintf( buf, buflen, "BIGNUM - An error occurred while reading from or writing to a file" ); - if( use_ret == -(POLARSSL_ERR_MPI_BAD_INPUT_DATA) ) - snprintf( buf, buflen, "BIGNUM - Bad input parameters to function" ); - if( use_ret == -(POLARSSL_ERR_MPI_INVALID_CHARACTER) ) - snprintf( buf, buflen, "BIGNUM - There is an invalid character in the digit string" ); - if( use_ret == -(POLARSSL_ERR_MPI_BUFFER_TOO_SMALL) ) - snprintf( buf, buflen, "BIGNUM - The buffer is too small to write to" ); - if( use_ret == -(POLARSSL_ERR_MPI_NEGATIVE_VALUE) ) - snprintf( buf, buflen, "BIGNUM - The input arguments are negative or result in illegal output" ); - if( use_ret == -(POLARSSL_ERR_MPI_DIVISION_BY_ZERO) ) - snprintf( buf, buflen, "BIGNUM - The input argument for division is zero, which is not allowed" ); - if( use_ret == -(POLARSSL_ERR_MPI_NOT_ACCEPTABLE) ) - snprintf( buf, buflen, "BIGNUM - The input arguments are not acceptable" ); - if( use_ret == -(POLARSSL_ERR_MPI_MALLOC_FAILED) ) - snprintf( buf, buflen, "BIGNUM - Memory allocation failed" ); -#endif /* POLARSSL_BIGNUM_C */ - -#if defined(POLARSSL_BLOWFISH_C) - if( use_ret == -(POLARSSL_ERR_BLOWFISH_INVALID_KEY_LENGTH) ) - snprintf( buf, buflen, "BLOWFISH - Invalid key length" ); - if( use_ret == -(POLARSSL_ERR_BLOWFISH_INVALID_INPUT_LENGTH) ) - snprintf( buf, buflen, "BLOWFISH - Invalid data input length" ); -#endif /* POLARSSL_BLOWFISH_C */ - -#if defined(POLARSSL_CAMELLIA_C) - if( use_ret == -(POLARSSL_ERR_CAMELLIA_INVALID_KEY_LENGTH) ) - snprintf( buf, buflen, "CAMELLIA - Invalid key length" ); - if( use_ret == -(POLARSSL_ERR_CAMELLIA_INVALID_INPUT_LENGTH) ) - snprintf( buf, buflen, "CAMELLIA - Invalid data input length" ); -#endif /* POLARSSL_CAMELLIA_C */ - -#if defined(POLARSSL_CCM_C) - if( use_ret == -(POLARSSL_ERR_CCM_BAD_INPUT) ) - snprintf( buf, buflen, "CCM - Bad input parameters to function" ); - if( use_ret == -(POLARSSL_ERR_CCM_AUTH_FAILED) ) - snprintf( buf, buflen, "CCM - Authenticated decryption failed" ); -#endif /* POLARSSL_CCM_C */ - -#if defined(POLARSSL_CTR_DRBG_C) - if( use_ret == -(POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED) ) - snprintf( buf, buflen, "CTR_DRBG - The entropy source failed" ); - if( use_ret == -(POLARSSL_ERR_CTR_DRBG_REQUEST_TOO_BIG) ) - snprintf( buf, buflen, "CTR_DRBG - Too many random requested in single call" ); - if( use_ret == -(POLARSSL_ERR_CTR_DRBG_INPUT_TOO_BIG) ) - snprintf( buf, buflen, "CTR_DRBG - Input too large (Entropy + additional)" ); - if( use_ret == -(POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR) ) - snprintf( buf, buflen, "CTR_DRBG - Read/write error in file" ); -#endif /* POLARSSL_CTR_DRBG_C */ - -#if defined(POLARSSL_DES_C) - if( use_ret == -(POLARSSL_ERR_DES_INVALID_INPUT_LENGTH) ) - snprintf( buf, buflen, "DES - The data input has an invalid length" ); -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_ENTROPY_C) - if( use_ret == -(POLARSSL_ERR_ENTROPY_SOURCE_FAILED) ) - snprintf( buf, buflen, "ENTROPY - Critical entropy source failure" ); - if( use_ret == -(POLARSSL_ERR_ENTROPY_MAX_SOURCES) ) - snprintf( buf, buflen, "ENTROPY - No more sources can be added" ); - if( use_ret == -(POLARSSL_ERR_ENTROPY_NO_SOURCES_DEFINED) ) - snprintf( buf, buflen, "ENTROPY - No sources have been added to poll" ); - if( use_ret == -(POLARSSL_ERR_ENTROPY_FILE_IO_ERROR) ) - snprintf( buf, buflen, "ENTROPY - Read/write error in file" ); -#endif /* POLARSSL_ENTROPY_C */ - -#if defined(POLARSSL_GCM_C) - if( use_ret == -(POLARSSL_ERR_GCM_AUTH_FAILED) ) - snprintf( buf, buflen, "GCM - Authenticated decryption failed" ); - if( use_ret == -(POLARSSL_ERR_GCM_BAD_INPUT) ) - snprintf( buf, buflen, "GCM - Bad input parameters to function" ); -#endif /* POLARSSL_GCM_C */ - -#if defined(POLARSSL_HMAC_DRBG_C) - if( use_ret == -(POLARSSL_ERR_HMAC_DRBG_REQUEST_TOO_BIG) ) - snprintf( buf, buflen, "HMAC_DRBG - Too many random requested in single call" ); - if( use_ret == -(POLARSSL_ERR_HMAC_DRBG_INPUT_TOO_BIG) ) - snprintf( buf, buflen, "HMAC_DRBG - Input too large (Entropy + additional)" ); - if( use_ret == -(POLARSSL_ERR_HMAC_DRBG_FILE_IO_ERROR) ) - snprintf( buf, buflen, "HMAC_DRBG - Read/write error in file" ); - if( use_ret == -(POLARSSL_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED) ) - snprintf( buf, buflen, "HMAC_DRBG - The entropy source failed" ); -#endif /* POLARSSL_HMAC_DRBG_C */ - -#if defined(POLARSSL_MD2_C) - if( use_ret == -(POLARSSL_ERR_MD2_FILE_IO_ERROR) ) - snprintf( buf, buflen, "MD2 - Read/write error in file" ); -#endif /* POLARSSL_MD2_C */ - -#if defined(POLARSSL_MD4_C) - if( use_ret == -(POLARSSL_ERR_MD4_FILE_IO_ERROR) ) - snprintf( buf, buflen, "MD4 - Read/write error in file" ); -#endif /* POLARSSL_MD4_C */ - -#if defined(POLARSSL_MD5_C) - if( use_ret == -(POLARSSL_ERR_MD5_FILE_IO_ERROR) ) - snprintf( buf, buflen, "MD5 - Read/write error in file" ); -#endif /* POLARSSL_MD5_C */ - -#if defined(POLARSSL_NET_C) - if( use_ret == -(POLARSSL_ERR_NET_UNKNOWN_HOST) ) - snprintf( buf, buflen, "NET - Failed to get an IP address for the given hostname" ); - if( use_ret == -(POLARSSL_ERR_NET_SOCKET_FAILED) ) - snprintf( buf, buflen, "NET - Failed to open a socket" ); - if( use_ret == -(POLARSSL_ERR_NET_CONNECT_FAILED) ) - snprintf( buf, buflen, "NET - The connection to the given server / port failed" ); - if( use_ret == -(POLARSSL_ERR_NET_BIND_FAILED) ) - snprintf( buf, buflen, "NET - Binding of the socket failed" ); - if( use_ret == -(POLARSSL_ERR_NET_LISTEN_FAILED) ) - snprintf( buf, buflen, "NET - Could not listen on the socket" ); - if( use_ret == -(POLARSSL_ERR_NET_ACCEPT_FAILED) ) - snprintf( buf, buflen, "NET - Could not accept the incoming connection" ); - if( use_ret == -(POLARSSL_ERR_NET_RECV_FAILED) ) - snprintf( buf, buflen, "NET - Reading information from the socket failed" ); - if( use_ret == -(POLARSSL_ERR_NET_SEND_FAILED) ) - snprintf( buf, buflen, "NET - Sending information through the socket failed" ); - if( use_ret == -(POLARSSL_ERR_NET_CONN_RESET) ) - snprintf( buf, buflen, "NET - Connection was reset by peer" ); - if( use_ret == -(POLARSSL_ERR_NET_WANT_READ) ) - snprintf( buf, buflen, "NET - Connection requires a read call" ); - if( use_ret == -(POLARSSL_ERR_NET_WANT_WRITE) ) - snprintf( buf, buflen, "NET - Connection requires a write call" ); -#endif /* POLARSSL_NET_C */ - -#if defined(POLARSSL_OID_C) - if( use_ret == -(POLARSSL_ERR_OID_NOT_FOUND) ) - snprintf( buf, buflen, "OID - OID is not found" ); - if( use_ret == -(POLARSSL_ERR_OID_BUF_TOO_SMALL) ) - snprintf( buf, buflen, "OID - output buffer is too small" ); -#endif /* POLARSSL_OID_C */ - -#if defined(POLARSSL_PADLOCK_C) - if( use_ret == -(POLARSSL_ERR_PADLOCK_DATA_MISALIGNED) ) - snprintf( buf, buflen, "PADLOCK - Input data should be aligned" ); -#endif /* POLARSSL_PADLOCK_C */ - -#if defined(POLARSSL_PBKDF2_C) - if( use_ret == -(POLARSSL_ERR_PBKDF2_BAD_INPUT_DATA) ) - snprintf( buf, buflen, "PBKDF2 - Bad input parameters to function" ); -#endif /* POLARSSL_PBKDF2_C */ - -#if defined(POLARSSL_RIPEMD160_C) - if( use_ret == -(POLARSSL_ERR_RIPEMD160_FILE_IO_ERROR) ) - snprintf( buf, buflen, "RIPEMD160 - Read/write error in file" ); -#endif /* POLARSSL_RIPEMD160_C */ - -#if defined(POLARSSL_SHA1_C) - if( use_ret == -(POLARSSL_ERR_SHA1_FILE_IO_ERROR) ) - snprintf( buf, buflen, "SHA1 - Read/write error in file" ); -#endif /* POLARSSL_SHA1_C */ - -#if defined(POLARSSL_SHA256_C) - if( use_ret == -(POLARSSL_ERR_SHA256_FILE_IO_ERROR) ) - snprintf( buf, buflen, "SHA256 - Read/write error in file" ); -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - if( use_ret == -(POLARSSL_ERR_SHA512_FILE_IO_ERROR) ) - snprintf( buf, buflen, "SHA512 - Read/write error in file" ); -#endif /* POLARSSL_SHA512_C */ - -#if defined(POLARSSL_THREADING_C) - if( use_ret == -(POLARSSL_ERR_THREADING_FEATURE_UNAVAILABLE) ) - snprintf( buf, buflen, "THREADING - The selected feature is not available" ); - if( use_ret == -(POLARSSL_ERR_THREADING_BAD_INPUT_DATA) ) - snprintf( buf, buflen, "THREADING - Bad input parameters to function" ); - if( use_ret == -(POLARSSL_ERR_THREADING_MUTEX_ERROR) ) - snprintf( buf, buflen, "THREADING - Locking / unlocking / free failed with error code" ); -#endif /* POLARSSL_THREADING_C */ - -#if defined(POLARSSL_XTEA_C) - if( use_ret == -(POLARSSL_ERR_XTEA_INVALID_INPUT_LENGTH) ) - snprintf( buf, buflen, "XTEA - The data input has an invalid length" ); -#endif /* POLARSSL_XTEA_C */ - // END generated code - - if( strlen( buf ) != 0 ) - return; - - snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", use_ret ); -} - -#if defined(POLARSSL_ERROR_STRERROR_BC) -void error_strerror( int ret, char *buf, size_t buflen ) -{ - polarssl_strerror( ret, buf, buflen ); -} -#endif /* POLARSSL_ERROR_STRERROR_BC */ - -#else /* POLARSSL_ERROR_C */ - -#if defined(POLARSSL_ERROR_STRERROR_DUMMY) - -#include - -/* - * Provide an non-function in case POLARSSL_ERROR_C is not defined - */ -void polarssl_strerror( int ret, char *buf, size_t buflen ) -{ - ((void) ret); - - if( buflen > 0 ) - buf[0] = '\0'; -} - -#if defined(POLARSSL_ERROR_STRERROR_BC) -void error_strerror( int ret, char *buf, size_t buflen ) -{ - polarssl_strerror( ret, buf, buflen ); -} -#endif /* POLARSSL_ERROR_STRERROR_BC */ -#endif /* POLARSSL_ERROR_STRERROR_DUMMY */ - -#endif /* POLARSSL_ERROR_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/gcm.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/gcm.c deleted file mode 100644 index 77b1e0f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/gcm.c +++ /dev/null @@ -1,948 +0,0 @@ -/* - * NIST SP800-38D compliant GCM implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf - * - * See also: - * [MGV] http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf - * - * We use the algorithm described as Shoup's method with 4-bit tables in - * [MGV] 4.1, pp. 12-13, to enhance speed without using too much memory. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_GCM_C) - -#include "polarssl/gcm.h" - -#if defined(POLARSSL_AESNI_C) -#include "polarssl/aesni.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * Precompute small multiples of H, that is set - * HH[i] || HL[i] = H times i, - * where i is seen as a field element as in [MGV], ie high-order bits - * correspond to low powers of P. The result is stored in the same way, that - * is the high-order bit of HH corresponds to P^0 and the low-order bit of HL - * corresponds to P^127. - */ -static int gcm_gen_table( gcm_context *ctx ) -{ - int ret, i, j; - uint64_t hi, lo; - uint64_t vl, vh; - unsigned char h[16]; - size_t olen = 0; - - memset( h, 0, 16 ); - if( ( ret = cipher_update( &ctx->cipher_ctx, h, 16, h, &olen ) ) != 0 ) - return( ret ); - - /* pack h as two 64-bits ints, big-endian */ - GET_UINT32_BE( hi, h, 0 ); - GET_UINT32_BE( lo, h, 4 ); - vh = (uint64_t) hi << 32 | lo; - - GET_UINT32_BE( hi, h, 8 ); - GET_UINT32_BE( lo, h, 12 ); - vl = (uint64_t) hi << 32 | lo; - - /* 8 = 1000 corresponds to 1 in GF(2^128) */ - ctx->HL[8] = vl; - ctx->HH[8] = vh; - -#if defined(POLARSSL_AESNI_C) && defined(POLARSSL_HAVE_X86_64) - /* With CLMUL support, we need only h, not the rest of the table */ - if( aesni_supports( POLARSSL_AESNI_CLMUL ) ) - return( 0 ); -#endif - - /* 0 corresponds to 0 in GF(2^128) */ - ctx->HH[0] = 0; - ctx->HL[0] = 0; - - for( i = 4; i > 0; i >>= 1 ) - { - uint32_t T = ( vl & 1 ) * 0xe1000000U; - vl = ( vh << 63 ) | ( vl >> 1 ); - vh = ( vh >> 1 ) ^ ( (uint64_t) T << 32); - - ctx->HL[i] = vl; - ctx->HH[i] = vh; - } - - for( i = 2; i < 16; i <<= 1 ) - { - uint64_t *HiL = ctx->HL + i, *HiH = ctx->HH + i; - vh = *HiH; - vl = *HiL; - for( j = 1; j < i; j++ ) - { - HiH[j] = vh ^ ctx->HH[j]; - HiL[j] = vl ^ ctx->HL[j]; - } - } - - return( 0 ); -} - -int gcm_init( gcm_context *ctx, cipher_id_t cipher, const unsigned char *key, - unsigned int keysize ) -{ - int ret; - const cipher_info_t *cipher_info; - - memset( ctx, 0, sizeof(gcm_context) ); - - cipher_init( &ctx->cipher_ctx ); - - cipher_info = cipher_info_from_values( cipher, keysize, POLARSSL_MODE_ECB ); - if( cipher_info == NULL ) - return( POLARSSL_ERR_GCM_BAD_INPUT ); - - if( cipher_info->block_size != 16 ) - return( POLARSSL_ERR_GCM_BAD_INPUT ); - - if( ( ret = cipher_init_ctx( &ctx->cipher_ctx, cipher_info ) ) != 0 ) - return( ret ); - - if( ( ret = cipher_setkey( &ctx->cipher_ctx, key, keysize, - POLARSSL_ENCRYPT ) ) != 0 ) - { - return( ret ); - } - - if( ( ret = gcm_gen_table( ctx ) ) != 0 ) - return( ret ); - - return( 0 ); -} - -/* - * Shoup's method for multiplication use this table with - * last4[x] = x times P^128 - * where x and last4[x] are seen as elements of GF(2^128) as in [MGV] - */ -static const uint64_t last4[16] = -{ - 0x0000, 0x1c20, 0x3840, 0x2460, - 0x7080, 0x6ca0, 0x48c0, 0x54e0, - 0xe100, 0xfd20, 0xd940, 0xc560, - 0x9180, 0x8da0, 0xa9c0, 0xb5e0 -}; - -/* - * Sets output to x times H using the precomputed tables. - * x and output are seen as elements of GF(2^128) as in [MGV]. - */ -static void gcm_mult( gcm_context *ctx, const unsigned char x[16], - unsigned char output[16] ) -{ - int i = 0; - unsigned char lo, hi, rem; - uint64_t zh, zl; - -#if defined(POLARSSL_AESNI_C) && defined(POLARSSL_HAVE_X86_64) - if( aesni_supports( POLARSSL_AESNI_CLMUL ) ) { - unsigned char h[16]; - - PUT_UINT32_BE( ctx->HH[8] >> 32, h, 0 ); - PUT_UINT32_BE( ctx->HH[8], h, 4 ); - PUT_UINT32_BE( ctx->HL[8] >> 32, h, 8 ); - PUT_UINT32_BE( ctx->HL[8], h, 12 ); - - aesni_gcm_mult( output, x, h ); - return; - } -#endif /* POLARSSL_AESNI_C && POLARSSL_HAVE_X86_64 */ - - lo = x[15] & 0xf; - hi = x[15] >> 4; - - zh = ctx->HH[lo]; - zl = ctx->HL[lo]; - - for( i = 15; i >= 0; i-- ) - { - lo = x[i] & 0xf; - hi = x[i] >> 4; - - if( i != 15 ) - { - rem = (unsigned char) zl & 0xf; - zl = ( zh << 60 ) | ( zl >> 4 ); - zh = ( zh >> 4 ); - zh ^= (uint64_t) last4[rem] << 48; - zh ^= ctx->HH[lo]; - zl ^= ctx->HL[lo]; - - } - - rem = (unsigned char) zl & 0xf; - zl = ( zh << 60 ) | ( zl >> 4 ); - zh = ( zh >> 4 ); - zh ^= (uint64_t) last4[rem] << 48; - zh ^= ctx->HH[hi]; - zl ^= ctx->HL[hi]; - } - - PUT_UINT32_BE( zh >> 32, output, 0 ); - PUT_UINT32_BE( zh, output, 4 ); - PUT_UINT32_BE( zl >> 32, output, 8 ); - PUT_UINT32_BE( zl, output, 12 ); -} - -int gcm_starts( gcm_context *ctx, - int mode, - const unsigned char *iv, - size_t iv_len, - const unsigned char *add, - size_t add_len ) -{ - int ret; - unsigned char work_buf[16]; - size_t i; - const unsigned char *p; - size_t use_len, olen = 0; - - /* IV and AD are limited to 2^64 bits, so 2^61 bytes */ - if( ( (uint64_t) iv_len ) >> 61 != 0 || - ( (uint64_t) add_len ) >> 61 != 0 ) - { - return( POLARSSL_ERR_GCM_BAD_INPUT ); - } - - memset( ctx->y, 0x00, sizeof(ctx->y) ); - memset( ctx->buf, 0x00, sizeof(ctx->buf) ); - - ctx->mode = mode; - ctx->len = 0; - ctx->add_len = 0; - - if( iv_len == 12 ) - { - memcpy( ctx->y, iv, iv_len ); - ctx->y[15] = 1; - } - else - { - memset( work_buf, 0x00, 16 ); - PUT_UINT32_BE( iv_len * 8, work_buf, 12 ); - - p = iv; - while( iv_len > 0 ) - { - use_len = ( iv_len < 16 ) ? iv_len : 16; - - for( i = 0; i < use_len; i++ ) - ctx->y[i] ^= p[i]; - - gcm_mult( ctx, ctx->y, ctx->y ); - - iv_len -= use_len; - p += use_len; - } - - for( i = 0; i < 16; i++ ) - ctx->y[i] ^= work_buf[i]; - - gcm_mult( ctx, ctx->y, ctx->y ); - } - - if( ( ret = cipher_update( &ctx->cipher_ctx, ctx->y, 16, ctx->base_ectr, - &olen ) ) != 0 ) - { - return( ret ); - } - - ctx->add_len = add_len; - p = add; - while( add_len > 0 ) - { - use_len = ( add_len < 16 ) ? add_len : 16; - - for( i = 0; i < use_len; i++ ) - ctx->buf[i] ^= p[i]; - - gcm_mult( ctx, ctx->buf, ctx->buf ); - - add_len -= use_len; - p += use_len; - } - - return( 0 ); -} - -int gcm_update( gcm_context *ctx, - size_t length, - const unsigned char *input, - unsigned char *output ) -{ - int ret; - unsigned char ectr[16]; - size_t i; - const unsigned char *p; - unsigned char *out_p = output; - size_t use_len, olen = 0; - - if( output > input && (size_t) ( output - input ) < length ) - return( POLARSSL_ERR_GCM_BAD_INPUT ); - - /* Total length is restricted to 2^39 - 256 bits, ie 2^36 - 2^5 bytes - * Also check for possible overflow */ - if( ctx->len + length < ctx->len || - (uint64_t) ctx->len + length > 0x03FFFFE0llu ) - { - return( POLARSSL_ERR_GCM_BAD_INPUT ); - } - - ctx->len += length; - - p = input; - while( length > 0 ) - { - use_len = ( length < 16 ) ? length : 16; - - for( i = 16; i > 12; i-- ) - if( ++ctx->y[i - 1] != 0 ) - break; - - if( ( ret = cipher_update( &ctx->cipher_ctx, ctx->y, 16, ectr, - &olen ) ) != 0 ) - { - return( ret ); - } - - for( i = 0; i < use_len; i++ ) - { - if( ctx->mode == GCM_DECRYPT ) - ctx->buf[i] ^= p[i]; - out_p[i] = ectr[i] ^ p[i]; - if( ctx->mode == GCM_ENCRYPT ) - ctx->buf[i] ^= out_p[i]; - } - - gcm_mult( ctx, ctx->buf, ctx->buf ); - - length -= use_len; - p += use_len; - out_p += use_len; - } - - return( 0 ); -} - -int gcm_finish( gcm_context *ctx, - unsigned char *tag, - size_t tag_len ) -{ - unsigned char work_buf[16]; - size_t i; - uint64_t orig_len = ctx->len * 8; - uint64_t orig_add_len = ctx->add_len * 8; - - if( tag_len > 16 || tag_len < 4 ) - return( POLARSSL_ERR_GCM_BAD_INPUT ); - - if( tag_len != 0 ) - memcpy( tag, ctx->base_ectr, tag_len ); - - if( orig_len || orig_add_len ) - { - memset( work_buf, 0x00, 16 ); - - PUT_UINT32_BE( ( orig_add_len >> 32 ), work_buf, 0 ); - PUT_UINT32_BE( ( orig_add_len ), work_buf, 4 ); - PUT_UINT32_BE( ( orig_len >> 32 ), work_buf, 8 ); - PUT_UINT32_BE( ( orig_len ), work_buf, 12 ); - - for( i = 0; i < 16; i++ ) - ctx->buf[i] ^= work_buf[i]; - - gcm_mult( ctx, ctx->buf, ctx->buf ); - - for( i = 0; i < tag_len; i++ ) - tag[i] ^= ctx->buf[i]; - } - - return( 0 ); -} - -int gcm_crypt_and_tag( gcm_context *ctx, - int mode, - size_t length, - const unsigned char *iv, - size_t iv_len, - const unsigned char *add, - size_t add_len, - const unsigned char *input, - unsigned char *output, - size_t tag_len, - unsigned char *tag ) -{ - int ret; - - if( ( ret = gcm_starts( ctx, mode, iv, iv_len, add, add_len ) ) != 0 ) - return( ret ); - - if( ( ret = gcm_update( ctx, length, input, output ) ) != 0 ) - return( ret ); - - if( ( ret = gcm_finish( ctx, tag, tag_len ) ) != 0 ) - return( ret ); - - return( 0 ); -} - -int gcm_auth_decrypt( gcm_context *ctx, - size_t length, - const unsigned char *iv, - size_t iv_len, - const unsigned char *add, - size_t add_len, - const unsigned char *tag, - size_t tag_len, - const unsigned char *input, - unsigned char *output ) -{ - int ret; - unsigned char check_tag[16]; - size_t i; - int diff; - - if( ( ret = gcm_crypt_and_tag( ctx, GCM_DECRYPT, length, - iv, iv_len, add, add_len, - input, output, tag_len, check_tag ) ) != 0 ) - { - return( ret ); - } - - /* Check tag in "constant-time" */ - for( diff = 0, i = 0; i < tag_len; i++ ) - diff |= tag[i] ^ check_tag[i]; - - if( diff != 0 ) - { - polarssl_zeroize( output, length ); - return( POLARSSL_ERR_GCM_AUTH_FAILED ); - } - - return( 0 ); -} - -void gcm_free( gcm_context *ctx ) -{ - cipher_free( &ctx->cipher_ctx ); - polarssl_zeroize( ctx, sizeof( gcm_context ) ); -} - -#if defined(POLARSSL_SELF_TEST) && defined(POLARSSL_AES_C) - -#include - -/* - * AES-GCM test vectors from: - * - * http://csrc.nist.gov/groups/STM/cavp/documents/mac/gcmtestvectors.zip - */ -#define MAX_TESTS 6 - -int key_index[MAX_TESTS] = - { 0, 0, 1, 1, 1, 1 }; - -unsigned char key[MAX_TESTS][32] = -{ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, - 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, - 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, - 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 }, -}; - -size_t iv_len[MAX_TESTS] = - { 12, 12, 12, 12, 8, 60 }; - -int iv_index[MAX_TESTS] = - { 0, 0, 1, 1, 1, 2 }; - -unsigned char iv[MAX_TESTS][64] = -{ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 }, - { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, - 0xde, 0xca, 0xf8, 0x88 }, - { 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5, - 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa, - 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1, - 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28, - 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39, - 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54, - 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57, - 0xa6, 0x37, 0xb3, 0x9b }, -}; - -size_t add_len[MAX_TESTS] = - { 0, 0, 0, 20, 20, 20 }; - -int add_index[MAX_TESTS] = - { 0, 0, 0, 1, 1, 1 }; - -unsigned char additional[MAX_TESTS][64] = -{ - { 0x00 }, - { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xab, 0xad, 0xda, 0xd2 }, -}; - -size_t pt_len[MAX_TESTS] = - { 0, 16, 64, 60, 60, 60 }; - -int pt_index[MAX_TESTS] = - { 0, 0, 1, 1, 1, 1 }; - -unsigned char pt[MAX_TESTS][64] = -{ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 }, -}; - -unsigned char ct[MAX_TESTS * 3][64] = -{ - { 0x00 }, - { 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92, - 0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78 }, - { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, - 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, - 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, - 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, - 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, - 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, - 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, - 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85 }, - { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, - 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, - 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, - 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, - 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, - 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, - 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, - 0x3d, 0x58, 0xe0, 0x91 }, - { 0x61, 0x35, 0x3b, 0x4c, 0x28, 0x06, 0x93, 0x4a, - 0x77, 0x7f, 0xf5, 0x1f, 0xa2, 0x2a, 0x47, 0x55, - 0x69, 0x9b, 0x2a, 0x71, 0x4f, 0xcd, 0xc6, 0xf8, - 0x37, 0x66, 0xe5, 0xf9, 0x7b, 0x6c, 0x74, 0x23, - 0x73, 0x80, 0x69, 0x00, 0xe4, 0x9f, 0x24, 0xb2, - 0x2b, 0x09, 0x75, 0x44, 0xd4, 0x89, 0x6b, 0x42, - 0x49, 0x89, 0xb5, 0xe1, 0xeb, 0xac, 0x0f, 0x07, - 0xc2, 0x3f, 0x45, 0x98 }, - { 0x8c, 0xe2, 0x49, 0x98, 0x62, 0x56, 0x15, 0xb6, - 0x03, 0xa0, 0x33, 0xac, 0xa1, 0x3f, 0xb8, 0x94, - 0xbe, 0x91, 0x12, 0xa5, 0xc3, 0xa2, 0x11, 0xa8, - 0xba, 0x26, 0x2a, 0x3c, 0xca, 0x7e, 0x2c, 0xa7, - 0x01, 0xe4, 0xa9, 0xa4, 0xfb, 0xa4, 0x3c, 0x90, - 0xcc, 0xdc, 0xb2, 0x81, 0xd4, 0x8c, 0x7c, 0x6f, - 0xd6, 0x28, 0x75, 0xd2, 0xac, 0xa4, 0x17, 0x03, - 0x4c, 0x34, 0xae, 0xe5 }, - { 0x00 }, - { 0x98, 0xe7, 0x24, 0x7c, 0x07, 0xf0, 0xfe, 0x41, - 0x1c, 0x26, 0x7e, 0x43, 0x84, 0xb0, 0xf6, 0x00 }, - { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, - 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, - 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, - 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, - 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, - 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, - 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, - 0xcc, 0xda, 0x27, 0x10, 0xac, 0xad, 0xe2, 0x56 }, - { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, - 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, - 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, - 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, - 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, - 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, - 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, - 0xcc, 0xda, 0x27, 0x10 }, - { 0x0f, 0x10, 0xf5, 0x99, 0xae, 0x14, 0xa1, 0x54, - 0xed, 0x24, 0xb3, 0x6e, 0x25, 0x32, 0x4d, 0xb8, - 0xc5, 0x66, 0x63, 0x2e, 0xf2, 0xbb, 0xb3, 0x4f, - 0x83, 0x47, 0x28, 0x0f, 0xc4, 0x50, 0x70, 0x57, - 0xfd, 0xdc, 0x29, 0xdf, 0x9a, 0x47, 0x1f, 0x75, - 0xc6, 0x65, 0x41, 0xd4, 0xd4, 0xda, 0xd1, 0xc9, - 0xe9, 0x3a, 0x19, 0xa5, 0x8e, 0x8b, 0x47, 0x3f, - 0xa0, 0xf0, 0x62, 0xf7 }, - { 0xd2, 0x7e, 0x88, 0x68, 0x1c, 0xe3, 0x24, 0x3c, - 0x48, 0x30, 0x16, 0x5a, 0x8f, 0xdc, 0xf9, 0xff, - 0x1d, 0xe9, 0xa1, 0xd8, 0xe6, 0xb4, 0x47, 0xef, - 0x6e, 0xf7, 0xb7, 0x98, 0x28, 0x66, 0x6e, 0x45, - 0x81, 0xe7, 0x90, 0x12, 0xaf, 0x34, 0xdd, 0xd9, - 0xe2, 0xf0, 0x37, 0x58, 0x9b, 0x29, 0x2d, 0xb3, - 0xe6, 0x7c, 0x03, 0x67, 0x45, 0xfa, 0x22, 0xe7, - 0xe9, 0xb7, 0x37, 0x3b }, - { 0x00 }, - { 0xce, 0xa7, 0x40, 0x3d, 0x4d, 0x60, 0x6b, 0x6e, - 0x07, 0x4e, 0xc5, 0xd3, 0xba, 0xf3, 0x9d, 0x18 }, - { 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, - 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, - 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, - 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, - 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, - 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, - 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, - 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad }, - { 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, - 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, - 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, - 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, - 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, - 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, - 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, - 0xbc, 0xc9, 0xf6, 0x62 }, - { 0xc3, 0x76, 0x2d, 0xf1, 0xca, 0x78, 0x7d, 0x32, - 0xae, 0x47, 0xc1, 0x3b, 0xf1, 0x98, 0x44, 0xcb, - 0xaf, 0x1a, 0xe1, 0x4d, 0x0b, 0x97, 0x6a, 0xfa, - 0xc5, 0x2f, 0xf7, 0xd7, 0x9b, 0xba, 0x9d, 0xe0, - 0xfe, 0xb5, 0x82, 0xd3, 0x39, 0x34, 0xa4, 0xf0, - 0x95, 0x4c, 0xc2, 0x36, 0x3b, 0xc7, 0x3f, 0x78, - 0x62, 0xac, 0x43, 0x0e, 0x64, 0xab, 0xe4, 0x99, - 0xf4, 0x7c, 0x9b, 0x1f }, - { 0x5a, 0x8d, 0xef, 0x2f, 0x0c, 0x9e, 0x53, 0xf1, - 0xf7, 0x5d, 0x78, 0x53, 0x65, 0x9e, 0x2a, 0x20, - 0xee, 0xb2, 0xb2, 0x2a, 0xaf, 0xde, 0x64, 0x19, - 0xa0, 0x58, 0xab, 0x4f, 0x6f, 0x74, 0x6b, 0xf4, - 0x0f, 0xc0, 0xc3, 0xb7, 0x80, 0xf2, 0x44, 0x45, - 0x2d, 0xa3, 0xeb, 0xf1, 0xc5, 0xd8, 0x2c, 0xde, - 0xa2, 0x41, 0x89, 0x97, 0x20, 0x0e, 0xf8, 0x2e, - 0x44, 0xae, 0x7e, 0x3f }, -}; - -unsigned char tag[MAX_TESTS * 3][16] = -{ - { 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61, - 0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a }, - { 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd, - 0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf }, - { 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6, - 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4 }, - { 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb, - 0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47 }, - { 0x36, 0x12, 0xd2, 0xe7, 0x9e, 0x3b, 0x07, 0x85, - 0x56, 0x1b, 0xe1, 0x4a, 0xac, 0xa2, 0xfc, 0xcb }, - { 0x61, 0x9c, 0xc5, 0xae, 0xff, 0xfe, 0x0b, 0xfa, - 0x46, 0x2a, 0xf4, 0x3c, 0x16, 0x99, 0xd0, 0x50 }, - { 0xcd, 0x33, 0xb2, 0x8a, 0xc7, 0x73, 0xf7, 0x4b, - 0xa0, 0x0e, 0xd1, 0xf3, 0x12, 0x57, 0x24, 0x35 }, - { 0x2f, 0xf5, 0x8d, 0x80, 0x03, 0x39, 0x27, 0xab, - 0x8e, 0xf4, 0xd4, 0x58, 0x75, 0x14, 0xf0, 0xfb }, - { 0x99, 0x24, 0xa7, 0xc8, 0x58, 0x73, 0x36, 0xbf, - 0xb1, 0x18, 0x02, 0x4d, 0xb8, 0x67, 0x4a, 0x14 }, - { 0x25, 0x19, 0x49, 0x8e, 0x80, 0xf1, 0x47, 0x8f, - 0x37, 0xba, 0x55, 0xbd, 0x6d, 0x27, 0x61, 0x8c }, - { 0x65, 0xdc, 0xc5, 0x7f, 0xcf, 0x62, 0x3a, 0x24, - 0x09, 0x4f, 0xcc, 0xa4, 0x0d, 0x35, 0x33, 0xf8 }, - { 0xdc, 0xf5, 0x66, 0xff, 0x29, 0x1c, 0x25, 0xbb, - 0xb8, 0x56, 0x8f, 0xc3, 0xd3, 0x76, 0xa6, 0xd9 }, - { 0x53, 0x0f, 0x8a, 0xfb, 0xc7, 0x45, 0x36, 0xb9, - 0xa9, 0x63, 0xb4, 0xf1, 0xc4, 0xcb, 0x73, 0x8b }, - { 0xd0, 0xd1, 0xc8, 0xa7, 0x99, 0x99, 0x6b, 0xf0, - 0x26, 0x5b, 0x98, 0xb5, 0xd4, 0x8a, 0xb9, 0x19 }, - { 0xb0, 0x94, 0xda, 0xc5, 0xd9, 0x34, 0x71, 0xbd, - 0xec, 0x1a, 0x50, 0x22, 0x70, 0xe3, 0xcc, 0x6c }, - { 0x76, 0xfc, 0x6e, 0xce, 0x0f, 0x4e, 0x17, 0x68, - 0xcd, 0xdf, 0x88, 0x53, 0xbb, 0x2d, 0x55, 0x1b }, - { 0x3a, 0x33, 0x7d, 0xbf, 0x46, 0xa7, 0x92, 0xc4, - 0x5e, 0x45, 0x49, 0x13, 0xfe, 0x2e, 0xa8, 0xf2 }, - { 0xa4, 0x4a, 0x82, 0x66, 0xee, 0x1c, 0x8e, 0xb0, - 0xc8, 0xb5, 0xd4, 0xcf, 0x5a, 0xe9, 0xf1, 0x9a }, -}; - -int gcm_self_test( int verbose ) -{ - gcm_context ctx; - unsigned char buf[64]; - unsigned char tag_buf[16]; - int i, j, ret; - cipher_id_t cipher = POLARSSL_CIPHER_ID_AES; - - for( j = 0; j < 3; j++ ) - { - int key_len = 128 + 64 * j; - - for( i = 0; i < MAX_TESTS; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " AES-GCM-%3d #%d (%s): ", - key_len, i, "enc" ); - - gcm_init( &ctx, cipher, key[key_index[i]], key_len ); - - ret = gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, - pt_len[i], - iv[iv_index[i]], iv_len[i], - additional[add_index[i]], add_len[i], - pt[pt_index[i]], buf, 16, tag_buf ); - - if( ret != 0 || - memcmp( buf, ct[j * 6 + i], pt_len[i] ) != 0 || - memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - gcm_free( &ctx ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( " AES-GCM-%3d #%d (%s): ", - key_len, i, "dec" ); - - gcm_init( &ctx, cipher, key[key_index[i]], key_len ); - - ret = gcm_crypt_and_tag( &ctx, GCM_DECRYPT, - pt_len[i], - iv[iv_index[i]], iv_len[i], - additional[add_index[i]], add_len[i], - ct[j * 6 + i], buf, 16, tag_buf ); - - if( ret != 0 || - memcmp( buf, pt[pt_index[i]], pt_len[i] ) != 0 || - memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - gcm_free( &ctx ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( " AES-GCM-%3d #%d split (%s): ", - key_len, i, "enc" ); - - gcm_init( &ctx, cipher, key[key_index[i]], key_len ); - - ret = gcm_starts( &ctx, GCM_ENCRYPT, - iv[iv_index[i]], iv_len[i], - additional[add_index[i]], add_len[i] ); - if( ret != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( pt_len[i] > 32 ) - { - size_t rest_len = pt_len[i] - 32; - ret = gcm_update( &ctx, 32, pt[pt_index[i]], buf ); - if( ret != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - ret = gcm_update( &ctx, rest_len, pt[pt_index[i]] + 32, - buf + 32 ); - if( ret != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - } - else - { - ret = gcm_update( &ctx, pt_len[i], pt[pt_index[i]], buf ); - if( ret != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - } - - ret = gcm_finish( &ctx, tag_buf, 16 ); - if( ret != 0 || - memcmp( buf, ct[j * 6 + i], pt_len[i] ) != 0 || - memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - gcm_free( &ctx ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( " AES-GCM-%3d #%d split (%s): ", - key_len, i, "dec" ); - - gcm_init( &ctx, cipher, key[key_index[i]], key_len ); - - ret = gcm_starts( &ctx, GCM_DECRYPT, - iv[iv_index[i]], iv_len[i], - additional[add_index[i]], add_len[i] ); - if( ret != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( pt_len[i] > 32 ) - { - size_t rest_len = pt_len[i] - 32; - ret = gcm_update( &ctx, 32, ct[j * 6 + i], buf ); - if( ret != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - ret = gcm_update( &ctx, rest_len, ct[j * 6 + i] + 32, - buf + 32 ); - if( ret != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - } - else - { - ret = gcm_update( &ctx, pt_len[i], ct[j * 6 + i], buf ); - if( ret != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - } - - ret = gcm_finish( &ctx, tag_buf, 16 ); - if( ret != 0 || - memcmp( buf, pt[pt_index[i]], pt_len[i] ) != 0 || - memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - gcm_free( &ctx ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - } - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} - - - -#endif /* POLARSSL_SELF_TEST && POLARSSL_AES_C */ - -#endif /* POLARSSL_GCM_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/havege.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/havege.c deleted file mode 100644 index 3acd5bc..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/havege.c +++ /dev/null @@ -1,247 +0,0 @@ -/** - * \brief HAVEGE: HArdware Volatile Entropy Gathering and Expansion - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The HAVEGE RNG was designed by Andre Seznec in 2002. - * - * http://www.irisa.fr/caps/projects/hipsor/publi.php - * - * Contact: seznec(at)irisa_dot_fr - orocheco(at)irisa_dot_fr - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_HAVEGE_C) - -#include "polarssl/havege.h" -#include "polarssl/timing.h" - -#include - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* ------------------------------------------------------------------------ - * On average, one iteration accesses two 8-word blocks in the havege WALK - * table, and generates 16 words in the RES array. - * - * The data read in the WALK table is updated and permuted after each use. - * The result of the hardware clock counter read is used for this update. - * - * 25 conditional tests are present. The conditional tests are grouped in - * two nested groups of 12 conditional tests and 1 test that controls the - * permutation; on average, there should be 6 tests executed and 3 of them - * should be mispredicted. - * ------------------------------------------------------------------------ - */ - -#define SWAP(X,Y) { int *T = X; X = Y; Y = T; } - -#define TST1_ENTER if( PTEST & 1 ) { PTEST ^= 3; PTEST >>= 1; -#define TST2_ENTER if( PTEST & 1 ) { PTEST ^= 3; PTEST >>= 1; - -#define TST1_LEAVE U1++; } -#define TST2_LEAVE U2++; } - -#define ONE_ITERATION \ - \ - PTEST = PT1 >> 20; \ - \ - TST1_ENTER TST1_ENTER TST1_ENTER TST1_ENTER \ - TST1_ENTER TST1_ENTER TST1_ENTER TST1_ENTER \ - TST1_ENTER TST1_ENTER TST1_ENTER TST1_ENTER \ - \ - TST1_LEAVE TST1_LEAVE TST1_LEAVE TST1_LEAVE \ - TST1_LEAVE TST1_LEAVE TST1_LEAVE TST1_LEAVE \ - TST1_LEAVE TST1_LEAVE TST1_LEAVE TST1_LEAVE \ - \ - PTX = (PT1 >> 18) & 7; \ - PT1 &= 0x1FFF; \ - PT2 &= 0x1FFF; \ - CLK = (int) hardclock(); \ - \ - i = 0; \ - A = &WALK[PT1 ]; RES[i++] ^= *A; \ - B = &WALK[PT2 ]; RES[i++] ^= *B; \ - C = &WALK[PT1 ^ 1]; RES[i++] ^= *C; \ - D = &WALK[PT2 ^ 4]; RES[i++] ^= *D; \ - \ - IN = (*A >> (1)) ^ (*A << (31)) ^ CLK; \ - *A = (*B >> (2)) ^ (*B << (30)) ^ CLK; \ - *B = IN ^ U1; \ - *C = (*C >> (3)) ^ (*C << (29)) ^ CLK; \ - *D = (*D >> (4)) ^ (*D << (28)) ^ CLK; \ - \ - A = &WALK[PT1 ^ 2]; RES[i++] ^= *A; \ - B = &WALK[PT2 ^ 2]; RES[i++] ^= *B; \ - C = &WALK[PT1 ^ 3]; RES[i++] ^= *C; \ - D = &WALK[PT2 ^ 6]; RES[i++] ^= *D; \ - \ - if( PTEST & 1 ) SWAP( A, C ); \ - \ - IN = (*A >> (5)) ^ (*A << (27)) ^ CLK; \ - *A = (*B >> (6)) ^ (*B << (26)) ^ CLK; \ - *B = IN; CLK = (int) hardclock(); \ - *C = (*C >> (7)) ^ (*C << (25)) ^ CLK; \ - *D = (*D >> (8)) ^ (*D << (24)) ^ CLK; \ - \ - A = &WALK[PT1 ^ 4]; \ - B = &WALK[PT2 ^ 1]; \ - \ - PTEST = PT2 >> 1; \ - \ - PT2 = (RES[(i - 8) ^ PTY] ^ WALK[PT2 ^ PTY ^ 7]); \ - PT2 = ((PT2 & 0x1FFF) & (~8)) ^ ((PT1 ^ 8) & 0x8); \ - PTY = (PT2 >> 10) & 7; \ - \ - TST2_ENTER TST2_ENTER TST2_ENTER TST2_ENTER \ - TST2_ENTER TST2_ENTER TST2_ENTER TST2_ENTER \ - TST2_ENTER TST2_ENTER TST2_ENTER TST2_ENTER \ - \ - TST2_LEAVE TST2_LEAVE TST2_LEAVE TST2_LEAVE \ - TST2_LEAVE TST2_LEAVE TST2_LEAVE TST2_LEAVE \ - TST2_LEAVE TST2_LEAVE TST2_LEAVE TST2_LEAVE \ - \ - C = &WALK[PT1 ^ 5]; \ - D = &WALK[PT2 ^ 5]; \ - \ - RES[i++] ^= *A; \ - RES[i++] ^= *B; \ - RES[i++] ^= *C; \ - RES[i++] ^= *D; \ - \ - IN = (*A >> ( 9)) ^ (*A << (23)) ^ CLK; \ - *A = (*B >> (10)) ^ (*B << (22)) ^ CLK; \ - *B = IN ^ U2; \ - *C = (*C >> (11)) ^ (*C << (21)) ^ CLK; \ - *D = (*D >> (12)) ^ (*D << (20)) ^ CLK; \ - \ - A = &WALK[PT1 ^ 6]; RES[i++] ^= *A; \ - B = &WALK[PT2 ^ 3]; RES[i++] ^= *B; \ - C = &WALK[PT1 ^ 7]; RES[i++] ^= *C; \ - D = &WALK[PT2 ^ 7]; RES[i++] ^= *D; \ - \ - IN = (*A >> (13)) ^ (*A << (19)) ^ CLK; \ - *A = (*B >> (14)) ^ (*B << (18)) ^ CLK; \ - *B = IN; \ - *C = (*C >> (15)) ^ (*C << (17)) ^ CLK; \ - *D = (*D >> (16)) ^ (*D << (16)) ^ CLK; \ - \ - PT1 = ( RES[( i - 8 ) ^ PTX] ^ \ - WALK[PT1 ^ PTX ^ 7] ) & (~1); \ - PT1 ^= (PT2 ^ 0x10) & 0x10; \ - \ - for( n++, i = 0; i < 16; i++ ) \ - hs->pool[n % COLLECT_SIZE] ^= RES[i]; - -/* - * Entropy gathering function - */ -static void havege_fill( havege_state *hs ) -{ - int i, n = 0; - int U1, U2, *A, *B, *C, *D; - int PT1, PT2, *WALK, RES[16]; - int PTX, PTY, CLK, PTEST, IN; - - WALK = hs->WALK; - PT1 = hs->PT1; - PT2 = hs->PT2; - - PTX = U1 = 0; - PTY = U2 = 0; - - memset( RES, 0, sizeof( RES ) ); - - while( n < COLLECT_SIZE * 4 ) - { - ONE_ITERATION - ONE_ITERATION - ONE_ITERATION - ONE_ITERATION - } - - hs->PT1 = PT1; - hs->PT2 = PT2; - - hs->offset[0] = 0; - hs->offset[1] = COLLECT_SIZE / 2; -} - -/* - * HAVEGE initialization - */ -void havege_init( havege_state *hs ) -{ - memset( hs, 0, sizeof( havege_state ) ); - - havege_fill( hs ); -} - -void havege_free( havege_state *hs ) -{ - if( hs == NULL ) - return; - - polarssl_zeroize( hs, sizeof( havege_state ) ); -} - -/* - * HAVEGE rand function - */ -int havege_random( void *p_rng, unsigned char *buf, size_t len ) -{ - int val; - size_t use_len; - havege_state *hs = (havege_state *) p_rng; - unsigned char *p = buf; - - while( len > 0 ) - { - use_len = len; - if( use_len > sizeof(int) ) - use_len = sizeof(int); - - if( hs->offset[1] >= COLLECT_SIZE ) - havege_fill( hs ); - - val = hs->pool[hs->offset[0]++]; - val ^= hs->pool[hs->offset[1]++]; - - memcpy( p, &val, use_len ); - - len -= use_len; - p += use_len; - } - - return( 0 ); -} - -#endif /* POLARSSL_HAVEGE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/hmac_drbg.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/hmac_drbg.c deleted file mode 100644 index d691be1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/hmac_drbg.c +++ /dev/null @@ -1,502 +0,0 @@ -/* - * HMAC_DRBG implementation (NIST SP 800-90) - * - * Copyright (C) 2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * The NIST SP 800-90A DRBGs are described in the following publication. - * http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf - * References below are based on rev. 1 (January 2012). - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_HMAC_DRBG_C) - -#include "polarssl/hmac_drbg.h" - -#if defined(POLARSSL_FS_IO) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * HMAC_DRBG update, using optional additional data (10.1.2.2) - */ -void hmac_drbg_update( hmac_drbg_context *ctx, - const unsigned char *additional, size_t add_len ) -{ - size_t md_len = ctx->md_ctx.md_info->size; - unsigned char rounds = ( additional != NULL && add_len != 0 ) ? 2 : 1; - unsigned char sep[1]; - unsigned char K[POLARSSL_MD_MAX_SIZE]; - - for( sep[0] = 0; sep[0] < rounds; sep[0]++ ) - { - /* Step 1 or 4 */ - md_hmac_reset( &ctx->md_ctx ); - md_hmac_update( &ctx->md_ctx, ctx->V, md_len ); - md_hmac_update( &ctx->md_ctx, sep, 1 ); - if( rounds == 2 ) - md_hmac_update( &ctx->md_ctx, additional, add_len ); - md_hmac_finish( &ctx->md_ctx, K ); - - /* Step 2 or 5 */ - md_hmac_starts( &ctx->md_ctx, K, md_len ); - md_hmac_update( &ctx->md_ctx, ctx->V, md_len ); - md_hmac_finish( &ctx->md_ctx, ctx->V ); - } -} - -/* - * Simplified HMAC_DRBG initialisation (for use with deterministic ECDSA) - */ -int hmac_drbg_init_buf( hmac_drbg_context *ctx, - const md_info_t * md_info, - const unsigned char *data, size_t data_len ) -{ - int ret; - - memset( ctx, 0, sizeof( hmac_drbg_context ) ); - - md_init( &ctx->md_ctx ); - - if( ( ret = md_init_ctx( &ctx->md_ctx, md_info ) ) != 0 ) - return( ret ); - - /* - * Set initial working state. - * Use the V memory location, which is currently all 0, to initialize the - * MD context with an all-zero key. Then set V to its initial value. - */ - md_hmac_starts( &ctx->md_ctx, ctx->V, md_info->size ); - memset( ctx->V, 0x01, md_info->size ); - - hmac_drbg_update( ctx, data, data_len ); - - return( 0 ); -} - -/* - * HMAC_DRBG reseeding: 10.1.2.4 (arabic) + 9.2 (Roman) - */ -int hmac_drbg_reseed( hmac_drbg_context *ctx, - const unsigned char *additional, size_t len ) -{ - unsigned char seed[POLARSSL_HMAC_DRBG_MAX_SEED_INPUT]; - size_t seedlen; - - /* III. Check input length */ - if( len > POLARSSL_HMAC_DRBG_MAX_INPUT || - ctx->entropy_len + len > POLARSSL_HMAC_DRBG_MAX_SEED_INPUT ) - { - return( POLARSSL_ERR_HMAC_DRBG_INPUT_TOO_BIG ); - } - - memset( seed, 0, POLARSSL_HMAC_DRBG_MAX_SEED_INPUT ); - - /* IV. Gather entropy_len bytes of entropy for the seed */ - if( ctx->f_entropy( ctx->p_entropy, seed, ctx->entropy_len ) != 0 ) - return( POLARSSL_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED ); - - seedlen = ctx->entropy_len; - - /* 1. Concatenate entropy and additional data if any */ - if( additional != NULL && len != 0 ) - { - memcpy( seed + seedlen, additional, len ); - seedlen += len; - } - - /* 2. Update state */ - hmac_drbg_update( ctx, seed, seedlen ); - - /* 3. Reset reseed_counter */ - ctx->reseed_counter = 1; - - /* 4. Done */ - return( 0 ); -} - -/* - * HMAC_DRBG initialisation (10.1.2.3 + 9.1) - */ -int hmac_drbg_init( hmac_drbg_context *ctx, - const md_info_t * md_info, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len ) -{ - int ret; - size_t entropy_len; - - memset( ctx, 0, sizeof( hmac_drbg_context ) ); - - md_init( &ctx->md_ctx ); - - if( ( ret = md_init_ctx( &ctx->md_ctx, md_info ) ) != 0 ) - return( ret ); - - /* - * Set initial working state. - * Use the V memory location, which is currently all 0, to initialize the - * MD context with an all-zero key. Then set V to its initial value. - */ - md_hmac_starts( &ctx->md_ctx, ctx->V, md_info->size ); - memset( ctx->V, 0x01, md_info->size ); - - ctx->f_entropy = f_entropy; - ctx->p_entropy = p_entropy; - - ctx->reseed_interval = POLARSSL_HMAC_DRBG_RESEED_INTERVAL; - - /* - * See SP800-57 5.6.1 (p. 65-66) for the security strength provided by - * each hash function, then according to SP800-90A rev1 10.1 table 2, - * min_entropy_len (in bits) is security_strength. - * - * (This also matches the sizes used in the NIST test vectors.) - */ - entropy_len = md_info->size <= 20 ? 16 : /* 160-bits hash -> 128 bits */ - md_info->size <= 28 ? 24 : /* 224-bits hash -> 192 bits */ - 32; /* better (256+) -> 256 bits */ - - /* - * For initialisation, use more entropy to emulate a nonce - * (Again, matches test vectors.) - */ - ctx->entropy_len = entropy_len * 3 / 2; - - if( ( ret = hmac_drbg_reseed( ctx, custom, len ) ) != 0 ) - return( ret ); - - ctx->entropy_len = entropy_len; - - return( 0 ); -} - -/* - * Set prediction resistance - */ -void hmac_drbg_set_prediction_resistance( hmac_drbg_context *ctx, - int resistance ) -{ - ctx->prediction_resistance = resistance; -} - -/* - * Set entropy length grabbed for reseeds - */ -void hmac_drbg_set_entropy_len( hmac_drbg_context *ctx, size_t len ) -{ - ctx->entropy_len = len; -} - -/* - * Set reseed interval - */ -void hmac_drbg_set_reseed_interval( hmac_drbg_context *ctx, int interval ) -{ - ctx->reseed_interval = interval; -} - -/* - * HMAC_DRBG random function with optional additional data: - * 10.1.2.5 (arabic) + 9.3 (Roman) - */ -int hmac_drbg_random_with_add( void *p_rng, - unsigned char *output, size_t out_len, - const unsigned char *additional, size_t add_len ) -{ - int ret; - hmac_drbg_context *ctx = (hmac_drbg_context *) p_rng; - size_t md_len = md_get_size( ctx->md_ctx.md_info ); - size_t left = out_len; - unsigned char *out = output; - - /* II. Check request length */ - if( out_len > POLARSSL_HMAC_DRBG_MAX_REQUEST ) - return( POLARSSL_ERR_HMAC_DRBG_REQUEST_TOO_BIG ); - - /* III. Check input length */ - if( add_len > POLARSSL_HMAC_DRBG_MAX_INPUT ) - return( POLARSSL_ERR_HMAC_DRBG_INPUT_TOO_BIG ); - - /* 1. (aka VII and IX) Check reseed counter and PR */ - if( ctx->f_entropy != NULL && /* For no-reseeding instances */ - ( ctx->prediction_resistance == POLARSSL_HMAC_DRBG_PR_ON || - ctx->reseed_counter > ctx->reseed_interval ) ) - { - if( ( ret = hmac_drbg_reseed( ctx, additional, add_len ) ) != 0 ) - return( ret ); - - add_len = 0; /* VII.4 */ - } - - /* 2. Use additional data if any */ - if( additional != NULL && add_len != 0 ) - hmac_drbg_update( ctx, additional, add_len ); - - /* 3, 4, 5. Generate bytes */ - while( left != 0 ) - { - size_t use_len = left > md_len ? md_len : left; - - md_hmac_reset( &ctx->md_ctx ); - md_hmac_update( &ctx->md_ctx, ctx->V, md_len ); - md_hmac_finish( &ctx->md_ctx, ctx->V ); - - memcpy( out, ctx->V, use_len ); - out += use_len; - left -= use_len; - } - - /* 6. Update */ - hmac_drbg_update( ctx, additional, add_len ); - - /* 7. Update reseed counter */ - ctx->reseed_counter++; - - /* 8. Done */ - return( 0 ); -} - -/* - * HMAC_DRBG random function - */ -int hmac_drbg_random( void *p_rng, unsigned char *output, size_t out_len ) -{ - return( hmac_drbg_random_with_add( p_rng, output, out_len, NULL, 0 ) ); -} - -/* - * Free an HMAC_DRBG context - */ -void hmac_drbg_free( hmac_drbg_context *ctx ) -{ - if( ctx == NULL ) - return; - - md_free_ctx( &ctx->md_ctx ); - - polarssl_zeroize( ctx, sizeof( hmac_drbg_context ) ); -} - -#if defined(POLARSSL_FS_IO) -int hmac_drbg_write_seed_file( hmac_drbg_context *ctx, const char *path ) -{ - int ret; - FILE *f; - unsigned char buf[ POLARSSL_HMAC_DRBG_MAX_INPUT ]; - - if( ( f = fopen( path, "wb" ) ) == NULL ) - return( POLARSSL_ERR_HMAC_DRBG_FILE_IO_ERROR ); - - if( ( ret = hmac_drbg_random( ctx, buf, sizeof( buf ) ) ) != 0 ) - goto exit; - - if( fwrite( buf, 1, sizeof( buf ), f ) != sizeof( buf ) ) - { - ret = POLARSSL_ERR_HMAC_DRBG_FILE_IO_ERROR; - goto exit; - } - - ret = 0; - -exit: - fclose( f ); - return( ret ); -} - -int hmac_drbg_update_seed_file( hmac_drbg_context *ctx, const char *path ) -{ - FILE *f; - size_t n; - unsigned char buf[ POLARSSL_HMAC_DRBG_MAX_INPUT ]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_HMAC_DRBG_FILE_IO_ERROR ); - - fseek( f, 0, SEEK_END ); - n = (size_t) ftell( f ); - fseek( f, 0, SEEK_SET ); - - if( n > POLARSSL_HMAC_DRBG_MAX_INPUT ) - { - fclose( f ); - return( POLARSSL_ERR_HMAC_DRBG_INPUT_TOO_BIG ); - } - - if( fread( buf, 1, n, f ) != n ) - { - fclose( f ); - return( POLARSSL_ERR_HMAC_DRBG_FILE_IO_ERROR ); - } - - fclose( f ); - - hmac_drbg_update( ctx, buf, n ); - - return( hmac_drbg_write_seed_file( ctx, path ) ); -} -#endif /* POLARSSL_FS_IO */ - - -#if defined(POLARSSL_SELF_TEST) - -#include - -#if !defined(POLARSSL_SHA1_C) -/* Dummy checkup routine */ -int hmac_drbg_self_test( int verbose ) -{ - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} -#else - -#define OUTPUT_LEN 80 - -/* From a NIST PR=true test vector */ -static unsigned char entropy_pr[] = { - 0xa0, 0xc9, 0xab, 0x58, 0xf1, 0xe2, 0xe5, 0xa4, 0xde, 0x3e, 0xbd, 0x4f, - 0xf7, 0x3e, 0x9c, 0x5b, 0x64, 0xef, 0xd8, 0xca, 0x02, 0x8c, 0xf8, 0x11, - 0x48, 0xa5, 0x84, 0xfe, 0x69, 0xab, 0x5a, 0xee, 0x42, 0xaa, 0x4d, 0x42, - 0x17, 0x60, 0x99, 0xd4, 0x5e, 0x13, 0x97, 0xdc, 0x40, 0x4d, 0x86, 0xa3, - 0x7b, 0xf5, 0x59, 0x54, 0x75, 0x69, 0x51, 0xe4 }; -static const unsigned char result_pr[OUTPUT_LEN] = { - 0x9a, 0x00, 0xa2, 0xd0, 0x0e, 0xd5, 0x9b, 0xfe, 0x31, 0xec, 0xb1, 0x39, - 0x9b, 0x60, 0x81, 0x48, 0xd1, 0x96, 0x9d, 0x25, 0x0d, 0x3c, 0x1e, 0x94, - 0x10, 0x10, 0x98, 0x12, 0x93, 0x25, 0xca, 0xb8, 0xfc, 0xcc, 0x2d, 0x54, - 0x73, 0x19, 0x70, 0xc0, 0x10, 0x7a, 0xa4, 0x89, 0x25, 0x19, 0x95, 0x5e, - 0x4b, 0xc6, 0x00, 0x1d, 0x7f, 0x4e, 0x6a, 0x2b, 0xf8, 0xa3, 0x01, 0xab, - 0x46, 0x05, 0x5c, 0x09, 0xa6, 0x71, 0x88, 0xf1, 0xa7, 0x40, 0xee, 0xf3, - 0xe1, 0x5c, 0x02, 0x9b, 0x44, 0xaf, 0x03, 0x44 }; - -/* From a NIST PR=false test vector */ -static unsigned char entropy_nopr[] = { - 0x79, 0x34, 0x9b, 0xbf, 0x7c, 0xdd, 0xa5, 0x79, 0x95, 0x57, 0x86, 0x66, - 0x21, 0xc9, 0x13, 0x83, 0x11, 0x46, 0x73, 0x3a, 0xbf, 0x8c, 0x35, 0xc8, - 0xc7, 0x21, 0x5b, 0x5b, 0x96, 0xc4, 0x8e, 0x9b, 0x33, 0x8c, 0x74, 0xe3, - 0xe9, 0x9d, 0xfe, 0xdf }; -static const unsigned char result_nopr[OUTPUT_LEN] = { - 0xc6, 0xa1, 0x6a, 0xb8, 0xd4, 0x20, 0x70, 0x6f, 0x0f, 0x34, 0xab, 0x7f, - 0xec, 0x5a, 0xdc, 0xa9, 0xd8, 0xca, 0x3a, 0x13, 0x3e, 0x15, 0x9c, 0xa6, - 0xac, 0x43, 0xc6, 0xf8, 0xa2, 0xbe, 0x22, 0x83, 0x4a, 0x4c, 0x0a, 0x0a, - 0xff, 0xb1, 0x0d, 0x71, 0x94, 0xf1, 0xc1, 0xa5, 0xcf, 0x73, 0x22, 0xec, - 0x1a, 0xe0, 0x96, 0x4e, 0xd4, 0xbf, 0x12, 0x27, 0x46, 0xe0, 0x87, 0xfd, - 0xb5, 0xb3, 0xe9, 0x1b, 0x34, 0x93, 0xd5, 0xbb, 0x98, 0xfa, 0xed, 0x49, - 0xe8, 0x5f, 0x13, 0x0f, 0xc8, 0xa4, 0x59, 0xb7 }; - -/* "Entropy" from buffer */ -static size_t test_offset; -static int hmac_drbg_self_test_entropy( void *data, - unsigned char *buf, size_t len ) -{ - const unsigned char *p = data; - memcpy( buf, p + test_offset, len ); - test_offset += len; - return( 0 ); -} - -#define CHK( c ) if( (c) != 0 ) \ - { \ - if( verbose != 0 ) \ - polarssl_printf( "failed\n" ); \ - return( 1 ); \ - } - -/* - * Checkup routine for HMAC_DRBG with SHA-1 - */ -int hmac_drbg_self_test( int verbose ) -{ - hmac_drbg_context ctx; - unsigned char buf[OUTPUT_LEN]; - const md_info_t *md_info = md_info_from_type( POLARSSL_MD_SHA1 ); - - /* - * PR = True - */ - if( verbose != 0 ) - polarssl_printf( " HMAC_DRBG (PR = True) : " ); - - test_offset = 0; - CHK( hmac_drbg_init( &ctx, md_info, - hmac_drbg_self_test_entropy, entropy_pr, - NULL, 0 ) ); - hmac_drbg_set_prediction_resistance( &ctx, POLARSSL_HMAC_DRBG_PR_ON ); - CHK( hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); - CHK( hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); - CHK( memcmp( buf, result_pr, OUTPUT_LEN ) ); - hmac_drbg_free( &ctx ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - /* - * PR = False - */ - if( verbose != 0 ) - polarssl_printf( " HMAC_DRBG (PR = False) : " ); - - test_offset = 0; - CHK( hmac_drbg_init( &ctx, md_info, - hmac_drbg_self_test_entropy, entropy_nopr, - NULL, 0 ) ); - CHK( hmac_drbg_reseed( &ctx, NULL, 0 ) ); - CHK( hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); - CHK( hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); - CHK( memcmp( buf, result_nopr, OUTPUT_LEN ) ); - hmac_drbg_free( &ctx ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_HMAC_DRBG_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md.c deleted file mode 100644 index 7f9c5dc..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md.c +++ /dev/null @@ -1,341 +0,0 @@ -/** - * \file md.c - * - * \brief Generic message digest wrapper for PolarSSL - * - * \author Adriaan de Jong - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_MD_C) - -#include "polarssl/md.h" -#include "polarssl/md_wrap.h" - -#include - -#if defined(_MSC_VER) && !defined strcasecmp && !defined(EFIX64) && \ - !defined(EFI32) -#define strcasecmp _stricmp -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -static const int supported_digests[] = { - -#if defined(POLARSSL_SHA512_C) - POLARSSL_MD_SHA384, - POLARSSL_MD_SHA512, -#endif - -#if defined(POLARSSL_SHA256_C) - POLARSSL_MD_SHA224, - POLARSSL_MD_SHA256, -#endif - -#if defined(POLARSSL_SHA1_C) - POLARSSL_MD_SHA1, -#endif - -#if defined(POLARSSL_RIPEMD160_C) - POLARSSL_MD_RIPEMD160, -#endif - -#if defined(POLARSSL_MD5_C) - POLARSSL_MD_MD5, -#endif - -#if defined(POLARSSL_MD4_C) - POLARSSL_MD_MD4, -#endif - -#if defined(POLARSSL_MD2_C) - POLARSSL_MD_MD2, -#endif - - POLARSSL_MD_NONE -}; - -const int *md_list( void ) -{ - return( supported_digests ); -} - -const md_info_t *md_info_from_string( const char *md_name ) -{ - if( NULL == md_name ) - return( NULL ); - - /* Get the appropriate digest information */ -#if defined(POLARSSL_MD2_C) - if( !strcasecmp( "MD2", md_name ) ) - return md_info_from_type( POLARSSL_MD_MD2 ); -#endif -#if defined(POLARSSL_MD4_C) - if( !strcasecmp( "MD4", md_name ) ) - return md_info_from_type( POLARSSL_MD_MD4 ); -#endif -#if defined(POLARSSL_MD5_C) - if( !strcasecmp( "MD5", md_name ) ) - return md_info_from_type( POLARSSL_MD_MD5 ); -#endif -#if defined(POLARSSL_RIPEMD160_C) - if( !strcasecmp( "RIPEMD160", md_name ) ) - return md_info_from_type( POLARSSL_MD_RIPEMD160 ); -#endif -#if defined(POLARSSL_SHA1_C) - if( !strcasecmp( "SHA1", md_name ) || !strcasecmp( "SHA", md_name ) ) - return md_info_from_type( POLARSSL_MD_SHA1 ); -#endif -#if defined(POLARSSL_SHA256_C) - if( !strcasecmp( "SHA224", md_name ) ) - return md_info_from_type( POLARSSL_MD_SHA224 ); - if( !strcasecmp( "SHA256", md_name ) ) - return md_info_from_type( POLARSSL_MD_SHA256 ); -#endif -#if defined(POLARSSL_SHA512_C) - if( !strcasecmp( "SHA384", md_name ) ) - return md_info_from_type( POLARSSL_MD_SHA384 ); - if( !strcasecmp( "SHA512", md_name ) ) - return md_info_from_type( POLARSSL_MD_SHA512 ); -#endif - return( NULL ); -} - -const md_info_t *md_info_from_type( md_type_t md_type ) -{ - switch( md_type ) - { -#if defined(POLARSSL_MD2_C) - case POLARSSL_MD_MD2: - return( &md2_info ); -#endif -#if defined(POLARSSL_MD4_C) - case POLARSSL_MD_MD4: - return( &md4_info ); -#endif -#if defined(POLARSSL_MD5_C) - case POLARSSL_MD_MD5: - return( &md5_info ); -#endif -#if defined(POLARSSL_RIPEMD160_C) - case POLARSSL_MD_RIPEMD160: - return( &ripemd160_info ); -#endif -#if defined(POLARSSL_SHA1_C) - case POLARSSL_MD_SHA1: - return( &sha1_info ); -#endif -#if defined(POLARSSL_SHA256_C) - case POLARSSL_MD_SHA224: - return( &sha224_info ); - case POLARSSL_MD_SHA256: - return( &sha256_info ); -#endif -#if defined(POLARSSL_SHA512_C) - case POLARSSL_MD_SHA384: - return( &sha384_info ); - case POLARSSL_MD_SHA512: - return( &sha512_info ); -#endif - default: - return( NULL ); - } -} - -void md_init( md_context_t *ctx ) -{ - memset( ctx, 0, sizeof( md_context_t ) ); -} - -void md_free( md_context_t *ctx ) -{ - if( ctx == NULL ) - return; - - if( ctx->md_ctx ) - ctx->md_info->ctx_free_func( ctx->md_ctx ); - - polarssl_zeroize( ctx, sizeof( md_context_t ) ); -} - -int md_init_ctx( md_context_t *ctx, const md_info_t *md_info ) -{ - if( md_info == NULL || ctx == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - memset( ctx, 0, sizeof( md_context_t ) ); - - if( ( ctx->md_ctx = md_info->ctx_alloc_func() ) == NULL ) - return( POLARSSL_ERR_MD_ALLOC_FAILED ); - - ctx->md_info = md_info; - - md_info->starts_func( ctx->md_ctx ); - - return( 0 ); -} - -int md_free_ctx( md_context_t *ctx ) -{ - md_free( ctx ); - - return( 0 ); -} - -int md_starts( md_context_t *ctx ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->starts_func( ctx->md_ctx ); - - return( 0 ); -} - -int md_update( md_context_t *ctx, const unsigned char *input, size_t ilen ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->update_func( ctx->md_ctx, input, ilen ); - - return( 0 ); -} - -int md_finish( md_context_t *ctx, unsigned char *output ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->finish_func( ctx->md_ctx, output ); - - return( 0 ); -} - -int md( const md_info_t *md_info, const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - if( md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - md_info->digest_func( input, ilen, output ); - - return( 0 ); -} - -int md_file( const md_info_t *md_info, const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - int ret; -#endif - - if( md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - -#if defined(POLARSSL_FS_IO) - ret = md_info->file_func( path, output ); - if( ret != 0 ) - return( POLARSSL_ERR_MD_FILE_IO_ERROR + ret ); - - return( ret ); -#else - ((void) path); - ((void) output); - - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_FS_IO */ -} - -int md_hmac_starts( md_context_t *ctx, const unsigned char *key, size_t keylen ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->hmac_starts_func( ctx->md_ctx, key, keylen ); - - return( 0 ); -} - -int md_hmac_update( md_context_t *ctx, const unsigned char *input, size_t ilen ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->hmac_update_func( ctx->md_ctx, input, ilen ); - - return( 0 ); -} - -int md_hmac_finish( md_context_t *ctx, unsigned char *output ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->hmac_finish_func( ctx->md_ctx, output ); - - return( 0 ); -} - -int md_hmac_reset( md_context_t *ctx ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->hmac_reset_func( ctx->md_ctx ); - - return( 0 ); -} - -int md_hmac( const md_info_t *md_info, const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - if( md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - md_info->hmac_func( key, keylen, input, ilen, output ); - - return( 0 ); -} - -int md_process( md_context_t *ctx, const unsigned char *data ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->process_func( ctx->md_ctx, data ); - - return( 0 ); -} - -#endif /* POLARSSL_MD_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md2.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md2.c deleted file mode 100644 index 45bce37..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md2.c +++ /dev/null @@ -1,398 +0,0 @@ -/* - * RFC 1115/1319 compliant MD2 implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The MD2 algorithm was designed by Ron Rivest in 1989. - * - * http://www.ietf.org/rfc/rfc1115.txt - * http://www.ietf.org/rfc/rfc1319.txt - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_MD2_C) - -#include "polarssl/md2.h" - -#if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if !defined(POLARSSL_MD2_ALT) - -static const unsigned char PI_SUBST[256] = -{ - 0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01, 0x3D, 0x36, - 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13, 0x62, 0xA7, 0x05, 0xF3, - 0xC0, 0xC7, 0x73, 0x8C, 0x98, 0x93, 0x2B, 0xD9, 0xBC, 0x4C, - 0x82, 0xCA, 0x1E, 0x9B, 0x57, 0x3C, 0xFD, 0xD4, 0xE0, 0x16, - 0x67, 0x42, 0x6F, 0x18, 0x8A, 0x17, 0xE5, 0x12, 0xBE, 0x4E, - 0xC4, 0xD6, 0xDA, 0x9E, 0xDE, 0x49, 0xA0, 0xFB, 0xF5, 0x8E, - 0xBB, 0x2F, 0xEE, 0x7A, 0xA9, 0x68, 0x79, 0x91, 0x15, 0xB2, - 0x07, 0x3F, 0x94, 0xC2, 0x10, 0x89, 0x0B, 0x22, 0x5F, 0x21, - 0x80, 0x7F, 0x5D, 0x9A, 0x5A, 0x90, 0x32, 0x27, 0x35, 0x3E, - 0xCC, 0xE7, 0xBF, 0xF7, 0x97, 0x03, 0xFF, 0x19, 0x30, 0xB3, - 0x48, 0xA5, 0xB5, 0xD1, 0xD7, 0x5E, 0x92, 0x2A, 0xAC, 0x56, - 0xAA, 0xC6, 0x4F, 0xB8, 0x38, 0xD2, 0x96, 0xA4, 0x7D, 0xB6, - 0x76, 0xFC, 0x6B, 0xE2, 0x9C, 0x74, 0x04, 0xF1, 0x45, 0x9D, - 0x70, 0x59, 0x64, 0x71, 0x87, 0x20, 0x86, 0x5B, 0xCF, 0x65, - 0xE6, 0x2D, 0xA8, 0x02, 0x1B, 0x60, 0x25, 0xAD, 0xAE, 0xB0, - 0xB9, 0xF6, 0x1C, 0x46, 0x61, 0x69, 0x34, 0x40, 0x7E, 0x0F, - 0x55, 0x47, 0xA3, 0x23, 0xDD, 0x51, 0xAF, 0x3A, 0xC3, 0x5C, - 0xF9, 0xCE, 0xBA, 0xC5, 0xEA, 0x26, 0x2C, 0x53, 0x0D, 0x6E, - 0x85, 0x28, 0x84, 0x09, 0xD3, 0xDF, 0xCD, 0xF4, 0x41, 0x81, - 0x4D, 0x52, 0x6A, 0xDC, 0x37, 0xC8, 0x6C, 0xC1, 0xAB, 0xFA, - 0x24, 0xE1, 0x7B, 0x08, 0x0C, 0xBD, 0xB1, 0x4A, 0x78, 0x88, - 0x95, 0x8B, 0xE3, 0x63, 0xE8, 0x6D, 0xE9, 0xCB, 0xD5, 0xFE, - 0x3B, 0x00, 0x1D, 0x39, 0xF2, 0xEF, 0xB7, 0x0E, 0x66, 0x58, - 0xD0, 0xE4, 0xA6, 0x77, 0x72, 0xF8, 0xEB, 0x75, 0x4B, 0x0A, - 0x31, 0x44, 0x50, 0xB4, 0x8F, 0xED, 0x1F, 0x1A, 0xDB, 0x99, - 0x8D, 0x33, 0x9F, 0x11, 0x83, 0x14 -}; - -void md2_init( md2_context *ctx ) -{ - memset( ctx, 0, sizeof( md2_context ) ); -} - -void md2_free( md2_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( md2_context ) ); -} - -/* - * MD2 context setup - */ -void md2_starts( md2_context *ctx ) -{ - memset( ctx->cksum, 0, 16 ); - memset( ctx->state, 0, 46 ); - memset( ctx->buffer, 0, 16 ); - ctx->left = 0; -} - -void md2_process( md2_context *ctx ) -{ - int i, j; - unsigned char t = 0; - - for( i = 0; i < 16; i++ ) - { - ctx->state[i + 16] = ctx->buffer[i]; - ctx->state[i + 32] = - (unsigned char)( ctx->buffer[i] ^ ctx->state[i]); - } - - for( i = 0; i < 18; i++ ) - { - for( j = 0; j < 48; j++ ) - { - ctx->state[j] = (unsigned char) - ( ctx->state[j] ^ PI_SUBST[t] ); - t = ctx->state[j]; - } - - t = (unsigned char)( t + i ); - } - - t = ctx->cksum[15]; - - for( i = 0; i < 16; i++ ) - { - ctx->cksum[i] = (unsigned char) - ( ctx->cksum[i] ^ PI_SUBST[ctx->buffer[i] ^ t] ); - t = ctx->cksum[i]; - } -} - -/* - * MD2 process buffer - */ -void md2_update( md2_context *ctx, const unsigned char *input, size_t ilen ) -{ - size_t fill; - - while( ilen > 0 ) - { - if( ctx->left + ilen > 16 ) - fill = 16 - ctx->left; - else - fill = ilen; - - memcpy( ctx->buffer + ctx->left, input, fill ); - - ctx->left += fill; - input += fill; - ilen -= fill; - - if( ctx->left == 16 ) - { - ctx->left = 0; - md2_process( ctx ); - } - } -} - -/* - * MD2 final digest - */ -void md2_finish( md2_context *ctx, unsigned char output[16] ) -{ - size_t i; - unsigned char x; - - x = (unsigned char)( 16 - ctx->left ); - - for( i = ctx->left; i < 16; i++ ) - ctx->buffer[i] = x; - - md2_process( ctx ); - - memcpy( ctx->buffer, ctx->cksum, 16 ); - md2_process( ctx ); - - memcpy( output, ctx->state, 16 ); -} - -#endif /* !POLARSSL_MD2_ALT */ - -/* - * output = MD2( input buffer ) - */ -void md2( const unsigned char *input, size_t ilen, unsigned char output[16] ) -{ - md2_context ctx; - - md2_init( &ctx ); - md2_starts( &ctx ); - md2_update( &ctx, input, ilen ); - md2_finish( &ctx, output ); - md2_free( &ctx ); -} - -#if defined(POLARSSL_FS_IO) -/* - * output = MD2( file contents ) - */ -int md2_file( const char *path, unsigned char output[16] ) -{ - FILE *f; - size_t n; - md2_context ctx; - unsigned char buf[1024]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_MD2_FILE_IO_ERROR ); - - md2_init( &ctx ); - md2_starts( &ctx ); - - while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) - md2_update( &ctx, buf, n ); - - md2_finish( &ctx, output ); - md2_free( &ctx ); - - if( ferror( f ) != 0 ) - { - fclose( f ); - return( POLARSSL_ERR_MD2_FILE_IO_ERROR ); - } - - fclose( f ); - return( 0 ); -} -#endif /* POLARSSL_FS_IO */ - -/* - * MD2 HMAC context setup - */ -void md2_hmac_starts( md2_context *ctx, const unsigned char *key, - size_t keylen ) -{ - size_t i; - unsigned char sum[16]; - - if( keylen > 16 ) - { - md2( key, keylen, sum ); - keylen = 16; - key = sum; - } - - memset( ctx->ipad, 0x36, 16 ); - memset( ctx->opad, 0x5C, 16 ); - - for( i = 0; i < keylen; i++ ) - { - ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] ); - ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); - } - - md2_starts( ctx ); - md2_update( ctx, ctx->ipad, 16 ); - - polarssl_zeroize( sum, sizeof( sum ) ); -} - -/* - * MD2 HMAC process buffer - */ -void md2_hmac_update( md2_context *ctx, const unsigned char *input, - size_t ilen ) -{ - md2_update( ctx, input, ilen ); -} - -/* - * MD2 HMAC final digest - */ -void md2_hmac_finish( md2_context *ctx, unsigned char output[16] ) -{ - unsigned char tmpbuf[16]; - - md2_finish( ctx, tmpbuf ); - md2_starts( ctx ); - md2_update( ctx, ctx->opad, 16 ); - md2_update( ctx, tmpbuf, 16 ); - md2_finish( ctx, output ); - - polarssl_zeroize( tmpbuf, sizeof( tmpbuf ) ); -} - -/* - * MD2 HMAC context reset - */ -void md2_hmac_reset( md2_context *ctx ) -{ - md2_starts( ctx ); - md2_update( ctx, ctx->ipad, 16 ); -} - -/* - * output = HMAC-MD2( hmac key, input buffer ) - */ -void md2_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[16] ) -{ - md2_context ctx; - - md2_init( &ctx ); - md2_hmac_starts( &ctx, key, keylen ); - md2_hmac_update( &ctx, input, ilen ); - md2_hmac_finish( &ctx, output ); - md2_free( &ctx ); -} - -#if defined(POLARSSL_SELF_TEST) - -/* - * RFC 1319 test vectors - */ -static const char md2_test_str[7][81] = -{ - { "" }, - { "a" }, - { "abc" }, - { "message digest" }, - { "abcdefghijklmnopqrstuvwxyz" }, - { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, - { "12345678901234567890123456789012345678901234567890123456789012" \ - "345678901234567890" } -}; - -static const unsigned char md2_test_sum[7][16] = -{ - { 0x83, 0x50, 0xE5, 0xA3, 0xE2, 0x4C, 0x15, 0x3D, - 0xF2, 0x27, 0x5C, 0x9F, 0x80, 0x69, 0x27, 0x73 }, - { 0x32, 0xEC, 0x01, 0xEC, 0x4A, 0x6D, 0xAC, 0x72, - 0xC0, 0xAB, 0x96, 0xFB, 0x34, 0xC0, 0xB5, 0xD1 }, - { 0xDA, 0x85, 0x3B, 0x0D, 0x3F, 0x88, 0xD9, 0x9B, - 0x30, 0x28, 0x3A, 0x69, 0xE6, 0xDE, 0xD6, 0xBB }, - { 0xAB, 0x4F, 0x49, 0x6B, 0xFB, 0x2A, 0x53, 0x0B, - 0x21, 0x9F, 0xF3, 0x30, 0x31, 0xFE, 0x06, 0xB0 }, - { 0x4E, 0x8D, 0xDF, 0xF3, 0x65, 0x02, 0x92, 0xAB, - 0x5A, 0x41, 0x08, 0xC3, 0xAA, 0x47, 0x94, 0x0B }, - { 0xDA, 0x33, 0xDE, 0xF2, 0xA4, 0x2D, 0xF1, 0x39, - 0x75, 0x35, 0x28, 0x46, 0xC3, 0x03, 0x38, 0xCD }, - { 0xD5, 0x97, 0x6F, 0x79, 0xD8, 0x3D, 0x3A, 0x0D, - 0xC9, 0x80, 0x6C, 0x3C, 0x66, 0xF3, 0xEF, 0xD8 } -}; - -/* - * Checkup routine - */ -int md2_self_test( int verbose ) -{ - int i; - unsigned char md2sum[16]; - - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " MD2 test #%d: ", i + 1 ); - - md2( (unsigned char *) md2_test_str[i], - strlen( md2_test_str[i] ), md2sum ); - - if( memcmp( md2sum, md2_test_sum[i], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_MD2_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md4.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md4.c deleted file mode 100644 index f6b71d5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md4.c +++ /dev/null @@ -1,494 +0,0 @@ -/* - * RFC 1186/1320 compliant MD4 implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The MD4 algorithm was designed by Ron Rivest in 1990. - * - * http://www.ietf.org/rfc/rfc1186.txt - * http://www.ietf.org/rfc/rfc1320.txt - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_MD4_C) - -#include "polarssl/md4.h" - -#if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if !defined(POLARSSL_MD4_ALT) - -/* - * 32-bit integer manipulation macros (little endian) - */ -#ifndef GET_UINT32_LE -#define GET_UINT32_LE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] ) \ - | ( (uint32_t) (b)[(i) + 1] << 8 ) \ - | ( (uint32_t) (b)[(i) + 2] << 16 ) \ - | ( (uint32_t) (b)[(i) + 3] << 24 ); \ -} -#endif - -#ifndef PUT_UINT32_LE -#define PUT_UINT32_LE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) >> 24 ); \ -} -#endif - -void md4_init( md4_context *ctx ) -{ - memset( ctx, 0, sizeof( md4_context ) ); -} - -void md4_free( md4_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( md4_context ) ); -} - -/* - * MD4 context setup - */ -void md4_starts( md4_context *ctx ) -{ - ctx->total[0] = 0; - ctx->total[1] = 0; - - ctx->state[0] = 0x67452301; - ctx->state[1] = 0xEFCDAB89; - ctx->state[2] = 0x98BADCFE; - ctx->state[3] = 0x10325476; -} - -void md4_process( md4_context *ctx, const unsigned char data[64] ) -{ - uint32_t X[16], A, B, C, D; - - GET_UINT32_LE( X[ 0], data, 0 ); - GET_UINT32_LE( X[ 1], data, 4 ); - GET_UINT32_LE( X[ 2], data, 8 ); - GET_UINT32_LE( X[ 3], data, 12 ); - GET_UINT32_LE( X[ 4], data, 16 ); - GET_UINT32_LE( X[ 5], data, 20 ); - GET_UINT32_LE( X[ 6], data, 24 ); - GET_UINT32_LE( X[ 7], data, 28 ); - GET_UINT32_LE( X[ 8], data, 32 ); - GET_UINT32_LE( X[ 9], data, 36 ); - GET_UINT32_LE( X[10], data, 40 ); - GET_UINT32_LE( X[11], data, 44 ); - GET_UINT32_LE( X[12], data, 48 ); - GET_UINT32_LE( X[13], data, 52 ); - GET_UINT32_LE( X[14], data, 56 ); - GET_UINT32_LE( X[15], data, 60 ); - -#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) - - A = ctx->state[0]; - B = ctx->state[1]; - C = ctx->state[2]; - D = ctx->state[3]; - -#define F(x, y, z) ((x & y) | ((~x) & z)) -#define P(a,b,c,d,x,s) { a += F(b,c,d) + x; a = S(a,s); } - - P( A, B, C, D, X[ 0], 3 ); - P( D, A, B, C, X[ 1], 7 ); - P( C, D, A, B, X[ 2], 11 ); - P( B, C, D, A, X[ 3], 19 ); - P( A, B, C, D, X[ 4], 3 ); - P( D, A, B, C, X[ 5], 7 ); - P( C, D, A, B, X[ 6], 11 ); - P( B, C, D, A, X[ 7], 19 ); - P( A, B, C, D, X[ 8], 3 ); - P( D, A, B, C, X[ 9], 7 ); - P( C, D, A, B, X[10], 11 ); - P( B, C, D, A, X[11], 19 ); - P( A, B, C, D, X[12], 3 ); - P( D, A, B, C, X[13], 7 ); - P( C, D, A, B, X[14], 11 ); - P( B, C, D, A, X[15], 19 ); - -#undef P -#undef F - -#define F(x,y,z) ((x & y) | (x & z) | (y & z)) -#define P(a,b,c,d,x,s) { a += F(b,c,d) + x + 0x5A827999; a = S(a,s); } - - P( A, B, C, D, X[ 0], 3 ); - P( D, A, B, C, X[ 4], 5 ); - P( C, D, A, B, X[ 8], 9 ); - P( B, C, D, A, X[12], 13 ); - P( A, B, C, D, X[ 1], 3 ); - P( D, A, B, C, X[ 5], 5 ); - P( C, D, A, B, X[ 9], 9 ); - P( B, C, D, A, X[13], 13 ); - P( A, B, C, D, X[ 2], 3 ); - P( D, A, B, C, X[ 6], 5 ); - P( C, D, A, B, X[10], 9 ); - P( B, C, D, A, X[14], 13 ); - P( A, B, C, D, X[ 3], 3 ); - P( D, A, B, C, X[ 7], 5 ); - P( C, D, A, B, X[11], 9 ); - P( B, C, D, A, X[15], 13 ); - -#undef P -#undef F - -#define F(x,y,z) (x ^ y ^ z) -#define P(a,b,c,d,x,s) { a += F(b,c,d) + x + 0x6ED9EBA1; a = S(a,s); } - - P( A, B, C, D, X[ 0], 3 ); - P( D, A, B, C, X[ 8], 9 ); - P( C, D, A, B, X[ 4], 11 ); - P( B, C, D, A, X[12], 15 ); - P( A, B, C, D, X[ 2], 3 ); - P( D, A, B, C, X[10], 9 ); - P( C, D, A, B, X[ 6], 11 ); - P( B, C, D, A, X[14], 15 ); - P( A, B, C, D, X[ 1], 3 ); - P( D, A, B, C, X[ 9], 9 ); - P( C, D, A, B, X[ 5], 11 ); - P( B, C, D, A, X[13], 15 ); - P( A, B, C, D, X[ 3], 3 ); - P( D, A, B, C, X[11], 9 ); - P( C, D, A, B, X[ 7], 11 ); - P( B, C, D, A, X[15], 15 ); - -#undef F -#undef P - - ctx->state[0] += A; - ctx->state[1] += B; - ctx->state[2] += C; - ctx->state[3] += D; -} - -/* - * MD4 process buffer - */ -void md4_update( md4_context *ctx, const unsigned char *input, size_t ilen ) -{ - size_t fill; - uint32_t left; - - if( ilen == 0 ) - return; - - left = ctx->total[0] & 0x3F; - fill = 64 - left; - - ctx->total[0] += (uint32_t) ilen; - ctx->total[0] &= 0xFFFFFFFF; - - if( ctx->total[0] < (uint32_t) ilen ) - ctx->total[1]++; - - if( left && ilen >= fill ) - { - memcpy( (void *) (ctx->buffer + left), - (void *) input, fill ); - md4_process( ctx, ctx->buffer ); - input += fill; - ilen -= fill; - left = 0; - } - - while( ilen >= 64 ) - { - md4_process( ctx, input ); - input += 64; - ilen -= 64; - } - - if( ilen > 0 ) - { - memcpy( (void *) (ctx->buffer + left), - (void *) input, ilen ); - } -} - -static const unsigned char md4_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* - * MD4 final digest - */ -void md4_finish( md4_context *ctx, unsigned char output[16] ) -{ - uint32_t last, padn; - uint32_t high, low; - unsigned char msglen[8]; - - high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); - low = ( ctx->total[0] << 3 ); - - PUT_UINT32_LE( low, msglen, 0 ); - PUT_UINT32_LE( high, msglen, 4 ); - - last = ctx->total[0] & 0x3F; - padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); - - md4_update( ctx, (unsigned char *) md4_padding, padn ); - md4_update( ctx, msglen, 8 ); - - PUT_UINT32_LE( ctx->state[0], output, 0 ); - PUT_UINT32_LE( ctx->state[1], output, 4 ); - PUT_UINT32_LE( ctx->state[2], output, 8 ); - PUT_UINT32_LE( ctx->state[3], output, 12 ); -} - -#endif /* !POLARSSL_MD4_ALT */ - -/* - * output = MD4( input buffer ) - */ -void md4( const unsigned char *input, size_t ilen, unsigned char output[16] ) -{ - md4_context ctx; - - md4_init( &ctx ); - md4_starts( &ctx ); - md4_update( &ctx, input, ilen ); - md4_finish( &ctx, output ); - md4_free( &ctx ); -} - -#if defined(POLARSSL_FS_IO) -/* - * output = MD4( file contents ) - */ -int md4_file( const char *path, unsigned char output[16] ) -{ - FILE *f; - size_t n; - md4_context ctx; - unsigned char buf[1024]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_MD4_FILE_IO_ERROR ); - - md4_init( &ctx ); - md4_starts( &ctx ); - - while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) - md4_update( &ctx, buf, n ); - - md4_finish( &ctx, output ); - md4_free( &ctx ); - - if( ferror( f ) != 0 ) - { - fclose( f ); - return( POLARSSL_ERR_MD4_FILE_IO_ERROR ); - } - - fclose( f ); - return( 0 ); -} -#endif /* POLARSSL_FS_IO */ - -/* - * MD4 HMAC context setup - */ -void md4_hmac_starts( md4_context *ctx, const unsigned char *key, - size_t keylen ) -{ - size_t i; - unsigned char sum[16]; - - if( keylen > 64 ) - { - md4( key, keylen, sum ); - keylen = 16; - key = sum; - } - - memset( ctx->ipad, 0x36, 64 ); - memset( ctx->opad, 0x5C, 64 ); - - for( i = 0; i < keylen; i++ ) - { - ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] ); - ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); - } - - md4_starts( ctx ); - md4_update( ctx, ctx->ipad, 64 ); - - polarssl_zeroize( sum, sizeof( sum ) ); -} - -/* - * MD4 HMAC process buffer - */ -void md4_hmac_update( md4_context *ctx, const unsigned char *input, - size_t ilen ) -{ - md4_update( ctx, input, ilen ); -} - -/* - * MD4 HMAC final digest - */ -void md4_hmac_finish( md4_context *ctx, unsigned char output[16] ) -{ - unsigned char tmpbuf[16]; - - md4_finish( ctx, tmpbuf ); - md4_starts( ctx ); - md4_update( ctx, ctx->opad, 64 ); - md4_update( ctx, tmpbuf, 16 ); - md4_finish( ctx, output ); - - polarssl_zeroize( tmpbuf, sizeof( tmpbuf ) ); -} - -/* - * MD4 HMAC context reset - */ -void md4_hmac_reset( md4_context *ctx ) -{ - md4_starts( ctx ); - md4_update( ctx, ctx->ipad, 64 ); -} - -/* - * output = HMAC-MD4( hmac key, input buffer ) - */ -void md4_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[16] ) -{ - md4_context ctx; - - md4_init( &ctx ); - md4_hmac_starts( &ctx, key, keylen ); - md4_hmac_update( &ctx, input, ilen ); - md4_hmac_finish( &ctx, output ); - md4_free( &ctx ); -} - -#if defined(POLARSSL_SELF_TEST) - -/* - * RFC 1320 test vectors - */ -static const char md4_test_str[7][81] = -{ - { "" }, - { "a" }, - { "abc" }, - { "message digest" }, - { "abcdefghijklmnopqrstuvwxyz" }, - { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, - { "12345678901234567890123456789012345678901234567890123456789012" \ - "345678901234567890" } -}; - -static const unsigned char md4_test_sum[7][16] = -{ - { 0x31, 0xD6, 0xCF, 0xE0, 0xD1, 0x6A, 0xE9, 0x31, - 0xB7, 0x3C, 0x59, 0xD7, 0xE0, 0xC0, 0x89, 0xC0 }, - { 0xBD, 0xE5, 0x2C, 0xB3, 0x1D, 0xE3, 0x3E, 0x46, - 0x24, 0x5E, 0x05, 0xFB, 0xDB, 0xD6, 0xFB, 0x24 }, - { 0xA4, 0x48, 0x01, 0x7A, 0xAF, 0x21, 0xD8, 0x52, - 0x5F, 0xC1, 0x0A, 0xE8, 0x7A, 0xA6, 0x72, 0x9D }, - { 0xD9, 0x13, 0x0A, 0x81, 0x64, 0x54, 0x9F, 0xE8, - 0x18, 0x87, 0x48, 0x06, 0xE1, 0xC7, 0x01, 0x4B }, - { 0xD7, 0x9E, 0x1C, 0x30, 0x8A, 0xA5, 0xBB, 0xCD, - 0xEE, 0xA8, 0xED, 0x63, 0xDF, 0x41, 0x2D, 0xA9 }, - { 0x04, 0x3F, 0x85, 0x82, 0xF2, 0x41, 0xDB, 0x35, - 0x1C, 0xE6, 0x27, 0xE1, 0x53, 0xE7, 0xF0, 0xE4 }, - { 0xE3, 0x3B, 0x4D, 0xDC, 0x9C, 0x38, 0xF2, 0x19, - 0x9C, 0x3E, 0x7B, 0x16, 0x4F, 0xCC, 0x05, 0x36 } -}; - -/* - * Checkup routine - */ -int md4_self_test( int verbose ) -{ - int i; - unsigned char md4sum[16]; - - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " MD4 test #%d: ", i + 1 ); - - md4( (unsigned char *) md4_test_str[i], - strlen( md4_test_str[i] ), md4sum ); - - if( memcmp( md4sum, md4_test_sum[i], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_MD4_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md5.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md5.c deleted file mode 100644 index 89354bc..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md5.c +++ /dev/null @@ -1,615 +0,0 @@ -/* - * RFC 1321 compliant MD5 implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The MD5 algorithm was designed by Ron Rivest in 1991. - * - * http://www.ietf.org/rfc/rfc1321.txt - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_MD5_C) - -#include "polarssl/md5.h" - -#if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if !defined(POLARSSL_MD5_ALT) - -/* - * 32-bit integer manipulation macros (little endian) - */ -#ifndef GET_UINT32_LE -#define GET_UINT32_LE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] ) \ - | ( (uint32_t) (b)[(i) + 1] << 8 ) \ - | ( (uint32_t) (b)[(i) + 2] << 16 ) \ - | ( (uint32_t) (b)[(i) + 3] << 24 ); \ -} -#endif - -#ifndef PUT_UINT32_LE -#define PUT_UINT32_LE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) >> 24 ); \ -} -#endif - -void md5_init( md5_context *ctx ) -{ - memset( ctx, 0, sizeof( md5_context ) ); -} - -void md5_free( md5_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( md5_context ) ); -} - -/* - * MD5 context setup - */ -void md5_starts( md5_context *ctx ) -{ - ctx->total[0] = 0; - ctx->total[1] = 0; - - ctx->state[0] = 0x67452301; - ctx->state[1] = 0xEFCDAB89; - ctx->state[2] = 0x98BADCFE; - ctx->state[3] = 0x10325476; -} - -void md5_process( md5_context *ctx, const unsigned char data[64] ) -{ - uint32_t X[16], A, B, C, D; - - GET_UINT32_LE( X[ 0], data, 0 ); - GET_UINT32_LE( X[ 1], data, 4 ); - GET_UINT32_LE( X[ 2], data, 8 ); - GET_UINT32_LE( X[ 3], data, 12 ); - GET_UINT32_LE( X[ 4], data, 16 ); - GET_UINT32_LE( X[ 5], data, 20 ); - GET_UINT32_LE( X[ 6], data, 24 ); - GET_UINT32_LE( X[ 7], data, 28 ); - GET_UINT32_LE( X[ 8], data, 32 ); - GET_UINT32_LE( X[ 9], data, 36 ); - GET_UINT32_LE( X[10], data, 40 ); - GET_UINT32_LE( X[11], data, 44 ); - GET_UINT32_LE( X[12], data, 48 ); - GET_UINT32_LE( X[13], data, 52 ); - GET_UINT32_LE( X[14], data, 56 ); - GET_UINT32_LE( X[15], data, 60 ); - -#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) - -#define P(a,b,c,d,k,s,t) \ -{ \ - a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \ -} - - A = ctx->state[0]; - B = ctx->state[1]; - C = ctx->state[2]; - D = ctx->state[3]; - -#define F(x,y,z) (z ^ (x & (y ^ z))) - - P( A, B, C, D, 0, 7, 0xD76AA478 ); - P( D, A, B, C, 1, 12, 0xE8C7B756 ); - P( C, D, A, B, 2, 17, 0x242070DB ); - P( B, C, D, A, 3, 22, 0xC1BDCEEE ); - P( A, B, C, D, 4, 7, 0xF57C0FAF ); - P( D, A, B, C, 5, 12, 0x4787C62A ); - P( C, D, A, B, 6, 17, 0xA8304613 ); - P( B, C, D, A, 7, 22, 0xFD469501 ); - P( A, B, C, D, 8, 7, 0x698098D8 ); - P( D, A, B, C, 9, 12, 0x8B44F7AF ); - P( C, D, A, B, 10, 17, 0xFFFF5BB1 ); - P( B, C, D, A, 11, 22, 0x895CD7BE ); - P( A, B, C, D, 12, 7, 0x6B901122 ); - P( D, A, B, C, 13, 12, 0xFD987193 ); - P( C, D, A, B, 14, 17, 0xA679438E ); - P( B, C, D, A, 15, 22, 0x49B40821 ); - -#undef F - -#define F(x,y,z) (y ^ (z & (x ^ y))) - - P( A, B, C, D, 1, 5, 0xF61E2562 ); - P( D, A, B, C, 6, 9, 0xC040B340 ); - P( C, D, A, B, 11, 14, 0x265E5A51 ); - P( B, C, D, A, 0, 20, 0xE9B6C7AA ); - P( A, B, C, D, 5, 5, 0xD62F105D ); - P( D, A, B, C, 10, 9, 0x02441453 ); - P( C, D, A, B, 15, 14, 0xD8A1E681 ); - P( B, C, D, A, 4, 20, 0xE7D3FBC8 ); - P( A, B, C, D, 9, 5, 0x21E1CDE6 ); - P( D, A, B, C, 14, 9, 0xC33707D6 ); - P( C, D, A, B, 3, 14, 0xF4D50D87 ); - P( B, C, D, A, 8, 20, 0x455A14ED ); - P( A, B, C, D, 13, 5, 0xA9E3E905 ); - P( D, A, B, C, 2, 9, 0xFCEFA3F8 ); - P( C, D, A, B, 7, 14, 0x676F02D9 ); - P( B, C, D, A, 12, 20, 0x8D2A4C8A ); - -#undef F - -#define F(x,y,z) (x ^ y ^ z) - - P( A, B, C, D, 5, 4, 0xFFFA3942 ); - P( D, A, B, C, 8, 11, 0x8771F681 ); - P( C, D, A, B, 11, 16, 0x6D9D6122 ); - P( B, C, D, A, 14, 23, 0xFDE5380C ); - P( A, B, C, D, 1, 4, 0xA4BEEA44 ); - P( D, A, B, C, 4, 11, 0x4BDECFA9 ); - P( C, D, A, B, 7, 16, 0xF6BB4B60 ); - P( B, C, D, A, 10, 23, 0xBEBFBC70 ); - P( A, B, C, D, 13, 4, 0x289B7EC6 ); - P( D, A, B, C, 0, 11, 0xEAA127FA ); - P( C, D, A, B, 3, 16, 0xD4EF3085 ); - P( B, C, D, A, 6, 23, 0x04881D05 ); - P( A, B, C, D, 9, 4, 0xD9D4D039 ); - P( D, A, B, C, 12, 11, 0xE6DB99E5 ); - P( C, D, A, B, 15, 16, 0x1FA27CF8 ); - P( B, C, D, A, 2, 23, 0xC4AC5665 ); - -#undef F - -#define F(x,y,z) (y ^ (x | ~z)) - - P( A, B, C, D, 0, 6, 0xF4292244 ); - P( D, A, B, C, 7, 10, 0x432AFF97 ); - P( C, D, A, B, 14, 15, 0xAB9423A7 ); - P( B, C, D, A, 5, 21, 0xFC93A039 ); - P( A, B, C, D, 12, 6, 0x655B59C3 ); - P( D, A, B, C, 3, 10, 0x8F0CCC92 ); - P( C, D, A, B, 10, 15, 0xFFEFF47D ); - P( B, C, D, A, 1, 21, 0x85845DD1 ); - P( A, B, C, D, 8, 6, 0x6FA87E4F ); - P( D, A, B, C, 15, 10, 0xFE2CE6E0 ); - P( C, D, A, B, 6, 15, 0xA3014314 ); - P( B, C, D, A, 13, 21, 0x4E0811A1 ); - P( A, B, C, D, 4, 6, 0xF7537E82 ); - P( D, A, B, C, 11, 10, 0xBD3AF235 ); - P( C, D, A, B, 2, 15, 0x2AD7D2BB ); - P( B, C, D, A, 9, 21, 0xEB86D391 ); - -#undef F - - ctx->state[0] += A; - ctx->state[1] += B; - ctx->state[2] += C; - ctx->state[3] += D; -} - -/* - * MD5 process buffer - */ -void md5_update( md5_context *ctx, const unsigned char *input, size_t ilen ) -{ - size_t fill; - uint32_t left; - - if( ilen == 0 ) - return; - - left = ctx->total[0] & 0x3F; - fill = 64 - left; - - ctx->total[0] += (uint32_t) ilen; - ctx->total[0] &= 0xFFFFFFFF; - - if( ctx->total[0] < (uint32_t) ilen ) - ctx->total[1]++; - - if( left && ilen >= fill ) - { - memcpy( (void *) (ctx->buffer + left), input, fill ); - md5_process( ctx, ctx->buffer ); - input += fill; - ilen -= fill; - left = 0; - } - - while( ilen >= 64 ) - { - md5_process( ctx, input ); - input += 64; - ilen -= 64; - } - - if( ilen > 0 ) - { - memcpy( (void *) (ctx->buffer + left), input, ilen ); - } -} - -static const unsigned char md5_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* - * MD5 final digest - */ -void md5_finish( md5_context *ctx, unsigned char output[16] ) -{ - uint32_t last, padn; - uint32_t high, low; - unsigned char msglen[8]; - - high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); - low = ( ctx->total[0] << 3 ); - - PUT_UINT32_LE( low, msglen, 0 ); - PUT_UINT32_LE( high, msglen, 4 ); - - last = ctx->total[0] & 0x3F; - padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); - - md5_update( ctx, md5_padding, padn ); - md5_update( ctx, msglen, 8 ); - - PUT_UINT32_LE( ctx->state[0], output, 0 ); - PUT_UINT32_LE( ctx->state[1], output, 4 ); - PUT_UINT32_LE( ctx->state[2], output, 8 ); - PUT_UINT32_LE( ctx->state[3], output, 12 ); -} - -#endif /* !POLARSSL_MD5_ALT */ - -/* - * output = MD5( input buffer ) - */ -void md5( const unsigned char *input, size_t ilen, unsigned char output[16] ) -{ - md5_context ctx; - - md5_init( &ctx ); - md5_starts( &ctx ); - md5_update( &ctx, input, ilen ); - md5_finish( &ctx, output ); - md5_free( &ctx ); -} - -#if defined(POLARSSL_FS_IO) -/* - * output = MD5( file contents ) - */ -int md5_file( const char *path, unsigned char output[16] ) -{ - FILE *f; - size_t n; - md5_context ctx; - unsigned char buf[1024]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_MD5_FILE_IO_ERROR ); - - md5_init( &ctx ); - md5_starts( &ctx ); - - while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) - md5_update( &ctx, buf, n ); - - md5_finish( &ctx, output ); - md5_free( &ctx ); - - if( ferror( f ) != 0 ) - { - fclose( f ); - return( POLARSSL_ERR_MD5_FILE_IO_ERROR ); - } - - fclose( f ); - return( 0 ); -} -#endif /* POLARSSL_FS_IO */ - -/* - * MD5 HMAC context setup - */ -void md5_hmac_starts( md5_context *ctx, const unsigned char *key, - size_t keylen ) -{ - size_t i; - unsigned char sum[16]; - - if( keylen > 64 ) - { - md5( key, keylen, sum ); - keylen = 16; - key = sum; - } - - memset( ctx->ipad, 0x36, 64 ); - memset( ctx->opad, 0x5C, 64 ); - - for( i = 0; i < keylen; i++ ) - { - ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] ); - ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); - } - - md5_starts( ctx ); - md5_update( ctx, ctx->ipad, 64 ); - - polarssl_zeroize( sum, sizeof( sum ) ); -} - -/* - * MD5 HMAC process buffer - */ -void md5_hmac_update( md5_context *ctx, const unsigned char *input, - size_t ilen ) -{ - md5_update( ctx, input, ilen ); -} - -/* - * MD5 HMAC final digest - */ -void md5_hmac_finish( md5_context *ctx, unsigned char output[16] ) -{ - unsigned char tmpbuf[16]; - - md5_finish( ctx, tmpbuf ); - md5_starts( ctx ); - md5_update( ctx, ctx->opad, 64 ); - md5_update( ctx, tmpbuf, 16 ); - md5_finish( ctx, output ); - - polarssl_zeroize( tmpbuf, sizeof( tmpbuf ) ); -} - -/* - * MD5 HMAC context reset - */ -void md5_hmac_reset( md5_context *ctx ) -{ - md5_starts( ctx ); - md5_update( ctx, ctx->ipad, 64 ); -} - -/* - * output = HMAC-MD5( hmac key, input buffer ) - */ -void md5_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[16] ) -{ - md5_context ctx; - - md5_init( &ctx ); - md5_hmac_starts( &ctx, key, keylen ); - md5_hmac_update( &ctx, input, ilen ); - md5_hmac_finish( &ctx, output ); - md5_free( &ctx ); -} - -#if defined(POLARSSL_SELF_TEST) -/* - * RFC 1321 test vectors - */ -static unsigned char md5_test_buf[7][81] = -{ - { "" }, - { "a" }, - { "abc" }, - { "message digest" }, - { "abcdefghijklmnopqrstuvwxyz" }, - { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, - { "12345678901234567890123456789012345678901234567890123456789012" \ - "345678901234567890" } -}; - -static const int md5_test_buflen[7] = -{ - 0, 1, 3, 14, 26, 62, 80 -}; - -static const unsigned char md5_test_sum[7][16] = -{ - { 0xD4, 0x1D, 0x8C, 0xD9, 0x8F, 0x00, 0xB2, 0x04, - 0xE9, 0x80, 0x09, 0x98, 0xEC, 0xF8, 0x42, 0x7E }, - { 0x0C, 0xC1, 0x75, 0xB9, 0xC0, 0xF1, 0xB6, 0xA8, - 0x31, 0xC3, 0x99, 0xE2, 0x69, 0x77, 0x26, 0x61 }, - { 0x90, 0x01, 0x50, 0x98, 0x3C, 0xD2, 0x4F, 0xB0, - 0xD6, 0x96, 0x3F, 0x7D, 0x28, 0xE1, 0x7F, 0x72 }, - { 0xF9, 0x6B, 0x69, 0x7D, 0x7C, 0xB7, 0x93, 0x8D, - 0x52, 0x5A, 0x2F, 0x31, 0xAA, 0xF1, 0x61, 0xD0 }, - { 0xC3, 0xFC, 0xD3, 0xD7, 0x61, 0x92, 0xE4, 0x00, - 0x7D, 0xFB, 0x49, 0x6C, 0xCA, 0x67, 0xE1, 0x3B }, - { 0xD1, 0x74, 0xAB, 0x98, 0xD2, 0x77, 0xD9, 0xF5, - 0xA5, 0x61, 0x1C, 0x2C, 0x9F, 0x41, 0x9D, 0x9F }, - { 0x57, 0xED, 0xF4, 0xA2, 0x2B, 0xE3, 0xC9, 0x55, - 0xAC, 0x49, 0xDA, 0x2E, 0x21, 0x07, 0xB6, 0x7A } -}; - -/* - * RFC 2202 test vectors - */ -static unsigned char md5_hmac_test_key[7][26] = -{ - { "\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B" }, - { "Jefe" }, - { "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" }, - { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10" - "\x11\x12\x13\x14\x15\x16\x17\x18\x19" }, - { "\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C" }, - { "" }, /* 0xAA 80 times */ - { "" } -}; - -static const int md5_hmac_test_keylen[7] = -{ - 16, 4, 16, 25, 16, 80, 80 -}; - -static unsigned char md5_hmac_test_buf[7][74] = -{ - { "Hi There" }, - { "what do ya want for nothing?" }, - { "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" }, - { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" }, - { "Test With Truncation" }, - { "Test Using Larger Than Block-Size Key - Hash Key First" }, - { "Test Using Larger Than Block-Size Key and Larger" - " Than One Block-Size Data" } -}; - -static const int md5_hmac_test_buflen[7] = -{ - 8, 28, 50, 50, 20, 54, 73 -}; - -static const unsigned char md5_hmac_test_sum[7][16] = -{ - { 0x92, 0x94, 0x72, 0x7A, 0x36, 0x38, 0xBB, 0x1C, - 0x13, 0xF4, 0x8E, 0xF8, 0x15, 0x8B, 0xFC, 0x9D }, - { 0x75, 0x0C, 0x78, 0x3E, 0x6A, 0xB0, 0xB5, 0x03, - 0xEA, 0xA8, 0x6E, 0x31, 0x0A, 0x5D, 0xB7, 0x38 }, - { 0x56, 0xBE, 0x34, 0x52, 0x1D, 0x14, 0x4C, 0x88, - 0xDB, 0xB8, 0xC7, 0x33, 0xF0, 0xE8, 0xB3, 0xF6 }, - { 0x69, 0x7E, 0xAF, 0x0A, 0xCA, 0x3A, 0x3A, 0xEA, - 0x3A, 0x75, 0x16, 0x47, 0x46, 0xFF, 0xAA, 0x79 }, - { 0x56, 0x46, 0x1E, 0xF2, 0x34, 0x2E, 0xDC, 0x00, - 0xF9, 0xBA, 0xB9, 0x95 }, - { 0x6B, 0x1A, 0xB7, 0xFE, 0x4B, 0xD7, 0xBF, 0x8F, - 0x0B, 0x62, 0xE6, 0xCE, 0x61, 0xB9, 0xD0, 0xCD }, - { 0x6F, 0x63, 0x0F, 0xAD, 0x67, 0xCD, 0xA0, 0xEE, - 0x1F, 0xB1, 0xF5, 0x62, 0xDB, 0x3A, 0xA5, 0x3E } -}; - -/* - * Checkup routine - */ -int md5_self_test( int verbose ) -{ - int i, buflen; - unsigned char buf[1024]; - unsigned char md5sum[16]; - md5_context ctx; - - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " MD5 test #%d: ", i + 1 ); - - md5( md5_test_buf[i], md5_test_buflen[i], md5sum ); - - if( memcmp( md5sum, md5_test_sum[i], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " HMAC-MD5 test #%d: ", i + 1 ); - - if( i == 5 || i == 6 ) - { - memset( buf, '\xAA', buflen = 80 ); - md5_hmac_starts( &ctx, buf, buflen ); - } - else - md5_hmac_starts( &ctx, md5_hmac_test_key[i], - md5_hmac_test_keylen[i] ); - - md5_hmac_update( &ctx, md5_hmac_test_buf[i], - md5_hmac_test_buflen[i] ); - - md5_hmac_finish( &ctx, md5sum ); - - buflen = ( i == 4 ) ? 12 : 16; - - if( memcmp( md5sum, md5_hmac_test_sum[i], buflen ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_MD5_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md_wrap.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md_wrap.c deleted file mode 100644 index de701d3..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/md_wrap.c +++ /dev/null @@ -1,955 +0,0 @@ -/** - * \file md_wrap.c - - * \brief Generic message digest wrapper for PolarSSL - * - * \author Adriaan de Jong - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_MD_C) - -#include "polarssl/md_wrap.h" - -#if defined(POLARSSL_MD2_C) -#include "polarssl/md2.h" -#endif - -#if defined(POLARSSL_MD4_C) -#include "polarssl/md4.h" -#endif - -#if defined(POLARSSL_MD5_C) -#include "polarssl/md5.h" -#endif - -#if defined(POLARSSL_RIPEMD160_C) -#include "polarssl/ripemd160.h" -#endif - -#if defined(POLARSSL_SHA1_C) -#include "polarssl/sha1.h" -#endif - -#if defined(POLARSSL_SHA256_C) -#include "polarssl/sha256.h" -#endif - -#if defined(POLARSSL_SHA512_C) -#include "polarssl/sha512.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if defined(POLARSSL_MD2_C) - -static void md2_starts_wrap( void *ctx ) -{ - md2_starts( (md2_context *) ctx ); -} - -static void md2_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - md2_update( (md2_context *) ctx, input, ilen ); -} - -static void md2_finish_wrap( void *ctx, unsigned char *output ) -{ - md2_finish( (md2_context *) ctx, output ); -} - -static int md2_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return md2_file( path, output ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -static void md2_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - md2_hmac_starts( (md2_context *) ctx, key, keylen ); -} - -static void md2_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - md2_hmac_update( (md2_context *) ctx, input, ilen ); -} - -static void md2_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - md2_hmac_finish( (md2_context *) ctx, output ); -} - -static void md2_hmac_reset_wrap( void *ctx ) -{ - md2_hmac_reset( (md2_context *) ctx ); -} - -static void * md2_ctx_alloc( void ) -{ - return polarssl_malloc( sizeof( md2_context ) ); -} - -static void md2_ctx_free( void *ctx ) -{ - polarssl_zeroize( ctx, sizeof( md2_context ) ); - polarssl_free( ctx ); -} - -static void md2_process_wrap( void *ctx, const unsigned char *data ) -{ - ((void) data); - - md2_process( (md2_context *) ctx ); -} - -const md_info_t md2_info = { - POLARSSL_MD_MD2, - "MD2", - 16, - md2_starts_wrap, - md2_update_wrap, - md2_finish_wrap, - md2, - md2_file_wrap, - md2_hmac_starts_wrap, - md2_hmac_update_wrap, - md2_hmac_finish_wrap, - md2_hmac_reset_wrap, - md2_hmac, - md2_ctx_alloc, - md2_ctx_free, - md2_process_wrap, -}; - -#endif /* POLARSSL_MD2_C */ - -#if defined(POLARSSL_MD4_C) - -static void md4_starts_wrap( void *ctx ) -{ - md4_starts( (md4_context *) ctx ); -} - -static void md4_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - md4_update( (md4_context *) ctx, input, ilen ); -} - -static void md4_finish_wrap( void *ctx, unsigned char *output ) -{ - md4_finish( (md4_context *) ctx, output ); -} - -static int md4_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return md4_file( path, output ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -static void md4_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - md4_hmac_starts( (md4_context *) ctx, key, keylen ); -} - -static void md4_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - md4_hmac_update( (md4_context *) ctx, input, ilen ); -} - -static void md4_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - md4_hmac_finish( (md4_context *) ctx, output ); -} - -static void md4_hmac_reset_wrap( void *ctx ) -{ - md4_hmac_reset( (md4_context *) ctx ); -} - -static void *md4_ctx_alloc( void ) -{ - return polarssl_malloc( sizeof( md4_context ) ); -} - -static void md4_ctx_free( void *ctx ) -{ - polarssl_zeroize( ctx, sizeof( md4_context ) ); - polarssl_free( ctx ); -} - -static void md4_process_wrap( void *ctx, const unsigned char *data ) -{ - md4_process( (md4_context *) ctx, data ); -} - -const md_info_t md4_info = { - POLARSSL_MD_MD4, - "MD4", - 16, - md4_starts_wrap, - md4_update_wrap, - md4_finish_wrap, - md4, - md4_file_wrap, - md4_hmac_starts_wrap, - md4_hmac_update_wrap, - md4_hmac_finish_wrap, - md4_hmac_reset_wrap, - md4_hmac, - md4_ctx_alloc, - md4_ctx_free, - md4_process_wrap, -}; - -#endif /* POLARSSL_MD4_C */ - -#if defined(POLARSSL_MD5_C) - -static void md5_starts_wrap( void *ctx ) -{ - md5_starts( (md5_context *) ctx ); -} - -static void md5_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - md5_update( (md5_context *) ctx, input, ilen ); -} - -static void md5_finish_wrap( void *ctx, unsigned char *output ) -{ - md5_finish( (md5_context *) ctx, output ); -} - -static int md5_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return md5_file( path, output ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -static void md5_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - md5_hmac_starts( (md5_context *) ctx, key, keylen ); -} - -static void md5_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - md5_hmac_update( (md5_context *) ctx, input, ilen ); -} - -static void md5_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - md5_hmac_finish( (md5_context *) ctx, output ); -} - -static void md5_hmac_reset_wrap( void *ctx ) -{ - md5_hmac_reset( (md5_context *) ctx ); -} - -static void * md5_ctx_alloc( void ) -{ - return polarssl_malloc( sizeof( md5_context ) ); -} - -static void md5_ctx_free( void *ctx ) -{ - polarssl_zeroize( ctx, sizeof( md5_context ) ); - polarssl_free( ctx ); -} - -static void md5_process_wrap( void *ctx, const unsigned char *data ) -{ - md5_process( (md5_context *) ctx, data ); -} - -const md_info_t md5_info = { - POLARSSL_MD_MD5, - "MD5", - 16, - md5_starts_wrap, - md5_update_wrap, - md5_finish_wrap, - md5, - md5_file_wrap, - md5_hmac_starts_wrap, - md5_hmac_update_wrap, - md5_hmac_finish_wrap, - md5_hmac_reset_wrap, - md5_hmac, - md5_ctx_alloc, - md5_ctx_free, - md5_process_wrap, -}; - -#endif /* POLARSSL_MD5_C */ - -#if defined(POLARSSL_RIPEMD160_C) - -static void ripemd160_starts_wrap( void *ctx ) -{ - ripemd160_starts( (ripemd160_context *) ctx ); -} - -static void ripemd160_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - ripemd160_update( (ripemd160_context *) ctx, input, ilen ); -} - -static void ripemd160_finish_wrap( void *ctx, unsigned char *output ) -{ - ripemd160_finish( (ripemd160_context *) ctx, output ); -} - -static int ripemd160_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return ripemd160_file( path, output ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -static void ripemd160_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - ripemd160_hmac_starts( (ripemd160_context *) ctx, key, keylen ); -} - -static void ripemd160_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - ripemd160_hmac_update( (ripemd160_context *) ctx, input, ilen ); -} - -static void ripemd160_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - ripemd160_hmac_finish( (ripemd160_context *) ctx, output ); -} - -static void ripemd160_hmac_reset_wrap( void *ctx ) -{ - ripemd160_hmac_reset( (ripemd160_context *) ctx ); -} - -static void * ripemd160_ctx_alloc( void ) -{ - ripemd160_context *ctx; - ctx = (ripemd160_context *) polarssl_malloc( sizeof( ripemd160_context ) ); - - if( ctx == NULL ) - return( NULL ); - - ripemd160_init( ctx ); - - return( ctx ); -} - -static void ripemd160_ctx_free( void *ctx ) -{ - ripemd160_free( (ripemd160_context *) ctx ); - polarssl_free( ctx ); -} - -static void ripemd160_process_wrap( void *ctx, const unsigned char *data ) -{ - ripemd160_process( (ripemd160_context *) ctx, data ); -} - -const md_info_t ripemd160_info = { - POLARSSL_MD_RIPEMD160, - "RIPEMD160", - 20, - ripemd160_starts_wrap, - ripemd160_update_wrap, - ripemd160_finish_wrap, - ripemd160, - ripemd160_file_wrap, - ripemd160_hmac_starts_wrap, - ripemd160_hmac_update_wrap, - ripemd160_hmac_finish_wrap, - ripemd160_hmac_reset_wrap, - ripemd160_hmac, - ripemd160_ctx_alloc, - ripemd160_ctx_free, - ripemd160_process_wrap, -}; - -#endif /* POLARSSL_RIPEMD160_C */ - -#if defined(POLARSSL_SHA1_C) - -static void sha1_starts_wrap( void *ctx ) -{ - sha1_starts( (sha1_context *) ctx ); -} - -static void sha1_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha1_update( (sha1_context *) ctx, input, ilen ); -} - -static void sha1_finish_wrap( void *ctx, unsigned char *output ) -{ - sha1_finish( (sha1_context *) ctx, output ); -} - -static int sha1_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return sha1_file( path, output ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -static void sha1_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - sha1_hmac_starts( (sha1_context *) ctx, key, keylen ); -} - -static void sha1_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha1_hmac_update( (sha1_context *) ctx, input, ilen ); -} - -static void sha1_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - sha1_hmac_finish( (sha1_context *) ctx, output ); -} - -static void sha1_hmac_reset_wrap( void *ctx ) -{ - sha1_hmac_reset( (sha1_context *) ctx ); -} - -static void * sha1_ctx_alloc( void ) -{ - sha1_context *ctx; - ctx = (sha1_context *) polarssl_malloc( sizeof( sha1_context ) ); - - if( ctx == NULL ) - return( NULL ); - - sha1_init( ctx ); - - return( ctx ); -} - -static void sha1_ctx_free( void *ctx ) -{ - sha1_free( (sha1_context *) ctx ); - polarssl_free( ctx ); -} - -static void sha1_process_wrap( void *ctx, const unsigned char *data ) -{ - sha1_process( (sha1_context *) ctx, data ); -} - -const md_info_t sha1_info = { - POLARSSL_MD_SHA1, - "SHA1", - 20, - sha1_starts_wrap, - sha1_update_wrap, - sha1_finish_wrap, - sha1, - sha1_file_wrap, - sha1_hmac_starts_wrap, - sha1_hmac_update_wrap, - sha1_hmac_finish_wrap, - sha1_hmac_reset_wrap, - sha1_hmac, - sha1_ctx_alloc, - sha1_ctx_free, - sha1_process_wrap, -}; - -#endif /* POLARSSL_SHA1_C */ - -/* - * Wrappers for generic message digests - */ -#if defined(POLARSSL_SHA256_C) - -static void sha224_starts_wrap( void *ctx ) -{ - sha256_starts( (sha256_context *) ctx, 1 ); -} - -static void sha224_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha256_update( (sha256_context *) ctx, input, ilen ); -} - -static void sha224_finish_wrap( void *ctx, unsigned char *output ) -{ - sha256_finish( (sha256_context *) ctx, output ); -} - -static void sha224_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha256( input, ilen, output, 1 ); -} - -static int sha224_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return sha256_file( path, output, 1 ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -static void sha224_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - sha256_hmac_starts( (sha256_context *) ctx, key, keylen, 1 ); -} - -static void sha224_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha256_hmac_update( (sha256_context *) ctx, input, ilen ); -} - -static void sha224_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - sha256_hmac_finish( (sha256_context *) ctx, output ); -} - -static void sha224_hmac_reset_wrap( void *ctx ) -{ - sha256_hmac_reset( (sha256_context *) ctx ); -} - -static void sha224_hmac_wrap( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha256_hmac( key, keylen, input, ilen, output, 1 ); -} - -static void * sha224_ctx_alloc( void ) -{ - return polarssl_malloc( sizeof( sha256_context ) ); -} - -static void sha224_ctx_free( void *ctx ) -{ - polarssl_zeroize( ctx, sizeof( sha256_context ) ); - polarssl_free( ctx ); -} - -static void sha224_process_wrap( void *ctx, const unsigned char *data ) -{ - sha256_process( (sha256_context *) ctx, data ); -} - -const md_info_t sha224_info = { - POLARSSL_MD_SHA224, - "SHA224", - 28, - sha224_starts_wrap, - sha224_update_wrap, - sha224_finish_wrap, - sha224_wrap, - sha224_file_wrap, - sha224_hmac_starts_wrap, - sha224_hmac_update_wrap, - sha224_hmac_finish_wrap, - sha224_hmac_reset_wrap, - sha224_hmac_wrap, - sha224_ctx_alloc, - sha224_ctx_free, - sha224_process_wrap, -}; - -static void sha256_starts_wrap( void *ctx ) -{ - sha256_starts( (sha256_context *) ctx, 0 ); -} - -static void sha256_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha256_update( (sha256_context *) ctx, input, ilen ); -} - -static void sha256_finish_wrap( void *ctx, unsigned char *output ) -{ - sha256_finish( (sha256_context *) ctx, output ); -} - -static void sha256_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha256( input, ilen, output, 0 ); -} - -static int sha256_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return sha256_file( path, output, 0 ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -static void sha256_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - sha256_hmac_starts( (sha256_context *) ctx, key, keylen, 0 ); -} - -static void sha256_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha256_hmac_update( (sha256_context *) ctx, input, ilen ); -} - -static void sha256_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - sha256_hmac_finish( (sha256_context *) ctx, output ); -} - -static void sha256_hmac_reset_wrap( void *ctx ) -{ - sha256_hmac_reset( (sha256_context *) ctx ); -} - -static void sha256_hmac_wrap( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha256_hmac( key, keylen, input, ilen, output, 0 ); -} - -static void * sha256_ctx_alloc( void ) -{ - sha256_context *ctx; - ctx = (sha256_context *) polarssl_malloc( sizeof( sha256_context ) ); - - if( ctx == NULL ) - return( NULL ); - - sha256_init( ctx ); - - return( ctx ); -} - -static void sha256_ctx_free( void *ctx ) -{ - sha256_free( (sha256_context *) ctx ); - polarssl_free( ctx ); -} - -static void sha256_process_wrap( void *ctx, const unsigned char *data ) -{ - sha256_process( (sha256_context *) ctx, data ); -} - -const md_info_t sha256_info = { - POLARSSL_MD_SHA256, - "SHA256", - 32, - sha256_starts_wrap, - sha256_update_wrap, - sha256_finish_wrap, - sha256_wrap, - sha256_file_wrap, - sha256_hmac_starts_wrap, - sha256_hmac_update_wrap, - sha256_hmac_finish_wrap, - sha256_hmac_reset_wrap, - sha256_hmac_wrap, - sha256_ctx_alloc, - sha256_ctx_free, - sha256_process_wrap, -}; - -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - -static void sha384_starts_wrap( void *ctx ) -{ - sha512_starts( (sha512_context *) ctx, 1 ); -} - -static void sha384_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha512_update( (sha512_context *) ctx, input, ilen ); -} - -static void sha384_finish_wrap( void *ctx, unsigned char *output ) -{ - sha512_finish( (sha512_context *) ctx, output ); -} - -static void sha384_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha512( input, ilen, output, 1 ); -} - -static int sha384_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return sha512_file( path, output, 1 ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -static void sha384_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - sha512_hmac_starts( (sha512_context *) ctx, key, keylen, 1 ); -} - -static void sha384_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha512_hmac_update( (sha512_context *) ctx, input, ilen ); -} - -static void sha384_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - sha512_hmac_finish( (sha512_context *) ctx, output ); -} - -static void sha384_hmac_reset_wrap( void *ctx ) -{ - sha512_hmac_reset( (sha512_context *) ctx ); -} - -static void sha384_hmac_wrap( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha512_hmac( key, keylen, input, ilen, output, 1 ); -} - -static void * sha384_ctx_alloc( void ) -{ - return polarssl_malloc( sizeof( sha512_context ) ); -} - -static void sha384_ctx_free( void *ctx ) -{ - polarssl_zeroize( ctx, sizeof( sha512_context ) ); - polarssl_free( ctx ); -} - -static void sha384_process_wrap( void *ctx, const unsigned char *data ) -{ - sha512_process( (sha512_context *) ctx, data ); -} - -const md_info_t sha384_info = { - POLARSSL_MD_SHA384, - "SHA384", - 48, - sha384_starts_wrap, - sha384_update_wrap, - sha384_finish_wrap, - sha384_wrap, - sha384_file_wrap, - sha384_hmac_starts_wrap, - sha384_hmac_update_wrap, - sha384_hmac_finish_wrap, - sha384_hmac_reset_wrap, - sha384_hmac_wrap, - sha384_ctx_alloc, - sha384_ctx_free, - sha384_process_wrap, -}; - -static void sha512_starts_wrap( void *ctx ) -{ - sha512_starts( (sha512_context *) ctx, 0 ); -} - -static void sha512_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha512_update( (sha512_context *) ctx, input, ilen ); -} - -static void sha512_finish_wrap( void *ctx, unsigned char *output ) -{ - sha512_finish( (sha512_context *) ctx, output ); -} - -static void sha512_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha512( input, ilen, output, 0 ); -} - -static int sha512_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return sha512_file( path, output, 0 ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -static void sha512_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - sha512_hmac_starts( (sha512_context *) ctx, key, keylen, 0 ); -} - -static void sha512_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha512_hmac_update( (sha512_context *) ctx, input, ilen ); -} - -static void sha512_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - sha512_hmac_finish( (sha512_context *) ctx, output ); -} - -static void sha512_hmac_reset_wrap( void *ctx ) -{ - sha512_hmac_reset( (sha512_context *) ctx ); -} - -static void sha512_hmac_wrap( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha512_hmac( key, keylen, input, ilen, output, 0 ); -} - -static void * sha512_ctx_alloc( void ) -{ - sha512_context *ctx; - ctx = (sha512_context *) polarssl_malloc( sizeof( sha512_context ) ); - - if( ctx == NULL ) - return( NULL ); - - sha512_init( ctx ); - - return( ctx ); -} - -static void sha512_ctx_free( void *ctx ) -{ - sha512_free( (sha512_context *) ctx ); - polarssl_free( ctx ); -} - -static void sha512_process_wrap( void *ctx, const unsigned char *data ) -{ - sha512_process( (sha512_context *) ctx, data ); -} - -const md_info_t sha512_info = { - POLARSSL_MD_SHA512, - "SHA512", - 64, - sha512_starts_wrap, - sha512_update_wrap, - sha512_finish_wrap, - sha512_wrap, - sha512_file_wrap, - sha512_hmac_starts_wrap, - sha512_hmac_update_wrap, - sha512_hmac_finish_wrap, - sha512_hmac_reset_wrap, - sha512_hmac_wrap, - sha512_ctx_alloc, - sha512_ctx_free, - sha512_process_wrap, -}; - -#endif /* POLARSSL_SHA512_C */ - -#endif /* POLARSSL_MD_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/memory_buffer_alloc.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/memory_buffer_alloc.c deleted file mode 100644 index 7710ba5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/memory_buffer_alloc.c +++ /dev/null @@ -1,589 +0,0 @@ -/* - * Buffer-based memory allocator - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_MEMORY_BUFFER_ALLOC_C) - -#include "polarssl/memory_buffer_alloc.h" - -#include - -#if defined(POLARSSL_MEMORY_DEBUG) -#include -#if defined(POLARSSL_MEMORY_BACKTRACE) -#include -#endif -#endif - -#if defined(POLARSSL_THREADING_C) -#include "polarssl/threading.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_fprintf fprintf -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#define MAGIC1 0xFF00AA55 -#define MAGIC2 0xEE119966 -#define MAX_BT 20 - -typedef struct _memory_header memory_header; -struct _memory_header -{ - size_t magic1; - size_t size; - size_t alloc; - memory_header *prev; - memory_header *next; - memory_header *prev_free; - memory_header *next_free; -#if defined(POLARSSL_MEMORY_BACKTRACE) - char **trace; - size_t trace_count; -#endif - size_t magic2; -}; - -typedef struct -{ - unsigned char *buf; - size_t len; - memory_header *first; - memory_header *first_free; - size_t current_alloc_size; - int verify; -#if defined(POLARSSL_MEMORY_DEBUG) - size_t malloc_count; - size_t free_count; - size_t total_used; - size_t maximum_used; - size_t header_count; - size_t maximum_header_count; -#endif -#if defined(POLARSSL_THREADING_C) - threading_mutex_t mutex; -#endif -} -buffer_alloc_ctx; - -static buffer_alloc_ctx heap; - -#if defined(POLARSSL_MEMORY_DEBUG) -static void debug_header( memory_header *hdr ) -{ -#if defined(POLARSSL_MEMORY_BACKTRACE) - size_t i; -#endif - - polarssl_fprintf( stderr, "HDR: PTR(%10u), PREV(%10u), NEXT(%10u), " - "ALLOC(%u), SIZE(%10u)\n", - (size_t) hdr, (size_t) hdr->prev, (size_t) hdr->next, - hdr->alloc, hdr->size ); - polarssl_fprintf( stderr, " FPREV(%10u), FNEXT(%10u)\n", - (size_t) hdr->prev_free, (size_t) hdr->next_free ); - -#if defined(POLARSSL_MEMORY_BACKTRACE) - polarssl_fprintf( stderr, "TRACE: \n" ); - for( i = 0; i < hdr->trace_count; i++ ) - polarssl_fprintf( stderr, "%s\n", hdr->trace[i] ); - polarssl_fprintf( stderr, "\n" ); -#endif -} - -static void debug_chain() -{ - memory_header *cur = heap.first; - - polarssl_fprintf( stderr, "\nBlock list\n" ); - while( cur != NULL ) - { - debug_header( cur ); - cur = cur->next; - } - - polarssl_fprintf( stderr, "Free list\n" ); - cur = heap.first_free; - - while( cur != NULL ) - { - debug_header( cur ); - cur = cur->next_free; - } -} -#endif /* POLARSSL_MEMORY_DEBUG */ - -static int verify_header( memory_header *hdr ) -{ - if( hdr->magic1 != MAGIC1 ) - { -#if defined(POLARSSL_MEMORY_DEBUG) - polarssl_fprintf( stderr, "FATAL: MAGIC1 mismatch\n" ); -#endif - return( 1 ); - } - - if( hdr->magic2 != MAGIC2 ) - { -#if defined(POLARSSL_MEMORY_DEBUG) - polarssl_fprintf( stderr, "FATAL: MAGIC2 mismatch\n" ); -#endif - return( 1 ); - } - - if( hdr->alloc > 1 ) - { -#if defined(POLARSSL_MEMORY_DEBUG) - polarssl_fprintf( stderr, "FATAL: alloc has illegal value\n" ); -#endif - return( 1 ); - } - - if( hdr->prev != NULL && hdr->prev == hdr->next ) - { -#if defined(POLARSSL_MEMORY_DEBUG) - polarssl_fprintf( stderr, "FATAL: prev == next\n" ); -#endif - return( 1 ); - } - - if( hdr->prev_free != NULL && hdr->prev_free == hdr->next_free ) - { -#if defined(POLARSSL_MEMORY_DEBUG) - polarssl_fprintf( stderr, "FATAL: prev_free == next_free\n" ); -#endif - return( 1 ); - } - - return( 0 ); -} - -static int verify_chain() -{ - memory_header *prv = heap.first, *cur = heap.first->next; - - if( verify_header( heap.first ) != 0 ) - { -#if defined(POLARSSL_MEMORY_DEBUG) - polarssl_fprintf( stderr, "FATAL: verification of first header " - "failed\n" ); -#endif - return( 1 ); - } - - if( heap.first->prev != NULL ) - { -#if defined(POLARSSL_MEMORY_DEBUG) - polarssl_fprintf( stderr, "FATAL: verification failed: " - "first->prev != NULL\n" ); -#endif - return( 1 ); - } - - while( cur != NULL ) - { - if( verify_header( cur ) != 0 ) - { -#if defined(POLARSSL_MEMORY_DEBUG) - polarssl_fprintf( stderr, "FATAL: verification of header " - "failed\n" ); -#endif - return( 1 ); - } - - if( cur->prev != prv ) - { -#if defined(POLARSSL_MEMORY_DEBUG) - polarssl_fprintf( stderr, "FATAL: verification failed: " - "cur->prev != prv\n" ); -#endif - return( 1 ); - } - - prv = cur; - cur = cur->next; - } - - return( 0 ); -} - -static void *buffer_alloc_malloc( size_t len ) -{ - memory_header *new, *cur = heap.first_free; - unsigned char *p; -#if defined(POLARSSL_MEMORY_BACKTRACE) - void *trace_buffer[MAX_BT]; - size_t trace_cnt; -#endif - - if( heap.buf == NULL || heap.first == NULL ) - return( NULL ); - - if( len % POLARSSL_MEMORY_ALIGN_MULTIPLE ) - { - len -= len % POLARSSL_MEMORY_ALIGN_MULTIPLE; - len += POLARSSL_MEMORY_ALIGN_MULTIPLE; - } - - // Find block that fits - // - while( cur != NULL ) - { - if( cur->size >= len ) - break; - - cur = cur->next_free; - } - - if( cur == NULL ) - return( NULL ); - - if( cur->alloc != 0 ) - { -#if defined(POLARSSL_MEMORY_DEBUG) - polarssl_fprintf( stderr, "FATAL: block in free_list but allocated " - "data\n" ); -#endif - exit( 1 ); - } - -#if defined(POLARSSL_MEMORY_DEBUG) - heap.malloc_count++; -#endif - - // Found location, split block if > memory_header + 4 room left - // - if( cur->size - len < sizeof(memory_header) + - POLARSSL_MEMORY_ALIGN_MULTIPLE ) - { - cur->alloc = 1; - - // Remove from free_list - // - if( cur->prev_free != NULL ) - cur->prev_free->next_free = cur->next_free; - else - heap.first_free = cur->next_free; - - if( cur->next_free != NULL ) - cur->next_free->prev_free = cur->prev_free; - - cur->prev_free = NULL; - cur->next_free = NULL; - -#if defined(POLARSSL_MEMORY_DEBUG) - heap.total_used += cur->size; - if( heap.total_used > heap.maximum_used ) - heap.maximum_used = heap.total_used; -#endif -#if defined(POLARSSL_MEMORY_BACKTRACE) - trace_cnt = backtrace( trace_buffer, MAX_BT ); - cur->trace = backtrace_symbols( trace_buffer, trace_cnt ); - cur->trace_count = trace_cnt; -#endif - - if( ( heap.verify & MEMORY_VERIFY_ALLOC ) && verify_chain() != 0 ) - exit( 1 ); - - return( ( (unsigned char *) cur ) + sizeof(memory_header) ); - } - - p = ( (unsigned char *) cur ) + sizeof(memory_header) + len; - new = (memory_header *) p; - - new->size = cur->size - len - sizeof(memory_header); - new->alloc = 0; - new->prev = cur; - new->next = cur->next; -#if defined(POLARSSL_MEMORY_BACKTRACE) - new->trace = NULL; - new->trace_count = 0; -#endif - new->magic1 = MAGIC1; - new->magic2 = MAGIC2; - - if( new->next != NULL ) - new->next->prev = new; - - // Replace cur with new in free_list - // - new->prev_free = cur->prev_free; - new->next_free = cur->next_free; - if( new->prev_free != NULL ) - new->prev_free->next_free = new; - else - heap.first_free = new; - - if( new->next_free != NULL ) - new->next_free->prev_free = new; - - cur->alloc = 1; - cur->size = len; - cur->next = new; - cur->prev_free = NULL; - cur->next_free = NULL; - -#if defined(POLARSSL_MEMORY_DEBUG) - heap.header_count++; - if( heap.header_count > heap.maximum_header_count ) - heap.maximum_header_count = heap.header_count; - heap.total_used += cur->size; - if( heap.total_used > heap.maximum_used ) - heap.maximum_used = heap.total_used; -#endif -#if defined(POLARSSL_MEMORY_BACKTRACE) - trace_cnt = backtrace( trace_buffer, MAX_BT ); - cur->trace = backtrace_symbols( trace_buffer, trace_cnt ); - cur->trace_count = trace_cnt; -#endif - - if( ( heap.verify & MEMORY_VERIFY_ALLOC ) && verify_chain() != 0 ) - exit( 1 ); - - return( ( (unsigned char *) cur ) + sizeof(memory_header) ); -} - -static void buffer_alloc_free( void *ptr ) -{ - memory_header *hdr, *old = NULL; - unsigned char *p = (unsigned char *) ptr; - - if( ptr == NULL || heap.buf == NULL || heap.first == NULL ) - return; - - if( p < heap.buf || p > heap.buf + heap.len ) - { -#if defined(POLARSSL_MEMORY_DEBUG) - polarssl_fprintf( stderr, "FATAL: polarssl_free() outside of managed " - "space\n" ); -#endif - exit( 1 ); - } - - p -= sizeof(memory_header); - hdr = (memory_header *) p; - - if( verify_header( hdr ) != 0 ) - exit( 1 ); - - if( hdr->alloc != 1 ) - { -#if defined(POLARSSL_MEMORY_DEBUG) - polarssl_fprintf( stderr, "FATAL: polarssl_free() on unallocated " - "data\n" ); -#endif - exit( 1 ); - } - - hdr->alloc = 0; - -#if defined(POLARSSL_MEMORY_DEBUG) - heap.free_count++; - heap.total_used -= hdr->size; -#endif - - // Regroup with block before - // - if( hdr->prev != NULL && hdr->prev->alloc == 0 ) - { -#if defined(POLARSSL_MEMORY_DEBUG) - heap.header_count--; -#endif - hdr->prev->size += sizeof(memory_header) + hdr->size; - hdr->prev->next = hdr->next; - old = hdr; - hdr = hdr->prev; - - if( hdr->next != NULL ) - hdr->next->prev = hdr; - -#if defined(POLARSSL_MEMORY_BACKTRACE) - free( old->trace ); -#endif - memset( old, 0, sizeof(memory_header) ); - } - - // Regroup with block after - // - if( hdr->next != NULL && hdr->next->alloc == 0 ) - { -#if defined(POLARSSL_MEMORY_DEBUG) - heap.header_count--; -#endif - hdr->size += sizeof(memory_header) + hdr->next->size; - old = hdr->next; - hdr->next = hdr->next->next; - - if( hdr->prev_free != NULL || hdr->next_free != NULL ) - { - if( hdr->prev_free != NULL ) - hdr->prev_free->next_free = hdr->next_free; - else - heap.first_free = hdr->next_free; - - if( hdr->next_free != NULL ) - hdr->next_free->prev_free = hdr->prev_free; - } - - hdr->prev_free = old->prev_free; - hdr->next_free = old->next_free; - - if( hdr->prev_free != NULL ) - hdr->prev_free->next_free = hdr; - else - heap.first_free = hdr; - - if( hdr->next_free != NULL ) - hdr->next_free->prev_free = hdr; - - if( hdr->next != NULL ) - hdr->next->prev = hdr; - -#if defined(POLARSSL_MEMORY_BACKTRACE) - free( old->trace ); -#endif - memset( old, 0, sizeof(memory_header) ); - } - - // Prepend to free_list if we have not merged - // (Does not have to stay in same order as prev / next list) - // - if( old == NULL ) - { - hdr->next_free = heap.first_free; - heap.first_free->prev_free = hdr; - heap.first_free = hdr; - } - -#if defined(POLARSSL_MEMORY_BACKTRACE) - hdr->trace = NULL; - hdr->trace_count = 0; -#endif - - if( ( heap.verify & MEMORY_VERIFY_FREE ) && verify_chain() != 0 ) - exit( 1 ); -} - -void memory_buffer_set_verify( int verify ) -{ - heap.verify = verify; -} - -int memory_buffer_alloc_verify() -{ - return verify_chain(); -} - -#if defined(POLARSSL_MEMORY_DEBUG) -void memory_buffer_alloc_status() -{ - polarssl_fprintf( stderr, - "Current use: %u blocks / %u bytes, max: %u blocks / " - "%u bytes (total %u bytes), malloc / free: %u / %u\n", - heap.header_count, heap.total_used, - heap.maximum_header_count, heap.maximum_used, - heap.maximum_header_count * sizeof( memory_header ) - + heap.maximum_used, - heap.malloc_count, heap.free_count ); - - if( heap.first->next == NULL ) - polarssl_fprintf( stderr, "All memory de-allocated in stack buffer\n" ); - else - { - polarssl_fprintf( stderr, "Memory currently allocated:\n" ); - debug_chain(); - } -} -#endif /* POLARSSL_MEMORY_DEBUG */ - -#if defined(POLARSSL_THREADING_C) -static void *buffer_alloc_malloc_mutexed( size_t len ) -{ - void *buf; - polarssl_mutex_lock( &heap.mutex ); - buf = buffer_alloc_malloc( len ); - polarssl_mutex_unlock( &heap.mutex ); - return( buf ); -} - -static void buffer_alloc_free_mutexed( void *ptr ) -{ - polarssl_mutex_lock( &heap.mutex ); - buffer_alloc_free( ptr ); - polarssl_mutex_unlock( &heap.mutex ); -} -#endif /* POLARSSL_THREADING_C */ - -int memory_buffer_alloc_init( unsigned char *buf, size_t len ) -{ - memset( &heap, 0, sizeof(buffer_alloc_ctx) ); - memset( buf, 0, len ); - -#if defined(POLARSSL_THREADING_C) - polarssl_mutex_init( &heap.mutex ); - platform_set_malloc_free( buffer_alloc_malloc_mutexed, - buffer_alloc_free_mutexed ); -#else - platform_set_malloc_free( buffer_alloc_malloc, buffer_alloc_free ); -#endif - - if( (size_t) buf % POLARSSL_MEMORY_ALIGN_MULTIPLE ) - { - buf += POLARSSL_MEMORY_ALIGN_MULTIPLE - - (size_t) buf % POLARSSL_MEMORY_ALIGN_MULTIPLE; - len -= (size_t) buf % POLARSSL_MEMORY_ALIGN_MULTIPLE; - } - - heap.buf = buf; - heap.len = len; - - heap.first = (memory_header *) buf; - heap.first->size = len - sizeof(memory_header); - heap.first->magic1 = MAGIC1; - heap.first->magic2 = MAGIC2; - heap.first_free = heap.first; - return( 0 ); -} - -void memory_buffer_alloc_free() -{ -#if defined(POLARSSL_THREADING_C) - polarssl_mutex_free( &heap.mutex ); -#endif - polarssl_zeroize( &heap, sizeof(buffer_alloc_ctx) ); -} - -#endif /* POLARSSL_MEMORY_BUFFER_ALLOC_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/net.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/net.c deleted file mode 100644 index 540ff2c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/net.c +++ /dev/null @@ -1,602 +0,0 @@ -/* - * TCP networking functions - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_NET_C) - -#include "polarssl/net.h" - -#if (defined(_WIN32) || defined(_WIN32_WCE)) && !defined(EFIX64) && \ - !defined(EFI32) - -#if defined(POLARSSL_HAVE_IPV6) -#ifdef _WIN32_WINNT -#undef _WIN32_WINNT -#endif -/* Enables getaddrinfo() & Co */ -#define _WIN32_WINNT 0x0501 -#include -#endif - -#include -#include - -#if defined(_MSC_VER) -#if defined(_WIN32_WCE) -#pragma comment( lib, "ws2.lib" ) -#else -#pragma comment( lib, "ws2_32.lib" ) -#endif -#endif /* _MSC_VER */ - -#define read(fd,buf,len) recv(fd,(char*)buf,(int) len,0) -#define write(fd,buf,len) send(fd,(char*)buf,(int) len,0) -#define close(fd) closesocket(fd) - -static int wsa_init_done = 0; - -#elif defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__) - -#include "lwip/sockets.h" -#include "lwip/inet.h" -#if LWIP_DNS -#include "lwip/netdb.h" -#endif -#include - -#else /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */ - -#include -#include -#include -#include -#if defined(POLARSSL_HAVE_TIME) -#include -#endif -#include -#include -#include -#include -#include - -#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || \ - defined(__DragonFly__) -#include -#elif defined(__APPLE__) || defined(HAVE_MACHINE_ENDIAN_H) || \ - defined(EFIX64) || defined(EFI32) -#include -#elif defined(sun) -#include -#elif defined(_AIX) || defined(HAVE_ARPA_NAMESER_COMPAT_H) -#include -#else -#include -#endif - -#endif /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */ - -#include -#include - -#if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \ - !defined(EFI32) -#define snprintf _snprintf -#endif - -#if defined(POLARSSL_HAVE_TIME) -#include -#endif - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#if LWIP_SOCKET - -/* - * htons() is not always available. - * By default go for LITTLE_ENDIAN variant. Otherwise hope for _BYTE_ORDER and - * __BIG_ENDIAN to help determine endianness. - */ -#if defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && \ - __BYTE_ORDER == __BIG_ENDIAN -#define POLARSSL_HTONS(n) (n) -#define POLARSSL_HTONL(n) (n) -#else -#define POLARSSL_HTONS(n) ((((unsigned short)(n) & 0xFF ) << 8 ) | \ - (((unsigned short)(n) & 0xFF00 ) >> 8 )) -#define POLARSSL_HTONL(n) ((((unsigned long )(n) & 0xFF ) << 24) | \ - (((unsigned long )(n) & 0xFF00 ) << 8 ) | \ - (((unsigned long )(n) & 0xFF0000 ) >> 8 ) | \ - (((unsigned long )(n) & 0xFF000000) >> 24)) -#endif - -unsigned short net_htons( unsigned short n ); -unsigned long net_htonl( unsigned long n ); -#define net_htons(n) POLARSSL_HTONS(n) -#define net_htonl(n) POLARSSL_HTONL(n) - -/* - * Prepare for using the sockets interface - */ -static int net_prepare( void ) -{ -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) - WSADATA wsaData; - - if( wsa_init_done == 0 ) - { - if( WSAStartup( MAKEWORD(2,0), &wsaData ) != 0 ) - return( POLARSSL_ERR_NET_SOCKET_FAILED ); - - wsa_init_done = 1; - } -#else -#if !defined(EFIX64) && !defined(EFI32) && !defined(__ICCARM__) && !defined(__CC_ARM) && !defined(__GNUC__) - signal( SIGPIPE, SIG_IGN ); -#endif -#endif - return( 0 ); -} - -/* - * Initiate a TCP connection with host:port - */ -int net_connect( int *fd, const char *host, int port ) -{ -#if defined(POLARSSL_HAVE_IPV6) - int ret; - struct addrinfo hints, *addr_list, *cur; - char port_str[6]; - - if( ( ret = net_prepare() ) != 0 ) - return( ret ); - - /* getaddrinfo expects port as a string */ - memset( port_str, 0, sizeof( port_str ) ); - snprintf( port_str, sizeof( port_str ), "%d", port ); - - /* Do name resolution with both IPv6 and IPv4, but only TCP */ - memset( &hints, 0, sizeof( hints ) ); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; - - if( getaddrinfo( host, port_str, &hints, &addr_list ) != 0 ) - return( POLARSSL_ERR_NET_UNKNOWN_HOST ); - - /* Try the sockaddrs until a connection succeeds */ - ret = POLARSSL_ERR_NET_UNKNOWN_HOST; - for( cur = addr_list; cur != NULL; cur = cur->ai_next ) - { - *fd = (int) socket( cur->ai_family, cur->ai_socktype, - cur->ai_protocol ); - if( *fd < 0 ) - { - ret = POLARSSL_ERR_NET_SOCKET_FAILED; - continue; - } - - if( connect( *fd, cur->ai_addr, cur->ai_addrlen ) == 0 ) - { - ret = 0; - break; - } - - close( *fd ); - ret = POLARSSL_ERR_NET_CONNECT_FAILED; - } - - freeaddrinfo( addr_list ); - - return( ret ); - -#else - /* Legacy IPv4-only version */ - - int ret; - struct sockaddr_in server_addr; -#if LWIP_DNS - struct hostent *server_host; -#endif - if( ( ret = net_prepare() ) != 0 ) - return( ret ); -#if LWIP_DNS - if( ( server_host = gethostbyname( host ) ) == NULL ) - return( POLARSSL_ERR_NET_UNKNOWN_HOST ); - - if( ( *fd = (int) socket( AF_INET, SOCK_STREAM, IPPROTO_IP ) ) < 0 ) - return( POLARSSL_ERR_NET_SOCKET_FAILED ); - - memcpy( (void *) &server_addr.sin_addr, - (void *) server_host->h_addr, - server_host->h_length ); -#else - if( ( *fd = (int) socket( AF_INET, SOCK_STREAM, IPPROTO_IP ) ) < 0 ) - return( POLARSSL_ERR_NET_SOCKET_FAILED ); - - server_addr.sin_len = sizeof(server_addr); - server_addr.sin_addr.s_addr = inet_addr(host); -#endif - - server_addr.sin_family = AF_INET; - server_addr.sin_port = net_htons( port ); - - if( connect( *fd, (struct sockaddr *) &server_addr, - sizeof( server_addr ) ) < 0 ) - { - close( *fd ); - return( POLARSSL_ERR_NET_CONNECT_FAILED ); - } - - return( 0 ); -#endif /* POLARSSL_HAVE_IPV6 */ -} - -/* - * Create a listening socket on bind_ip:port - */ -int net_bind( int *fd, const char *bind_ip, int port ) -{ -#if defined(POLARSSL_HAVE_IPV6) - int n, ret; - struct addrinfo hints, *addr_list, *cur; - char port_str[6]; - - if( ( ret = net_prepare() ) != 0 ) - return( ret ); - - /* getaddrinfo expects port as a string */ - memset( port_str, 0, sizeof( port_str ) ); - snprintf( port_str, sizeof( port_str ), "%d", port ); - - /* Bind to IPv6 and/or IPv4, but only in TCP */ - memset( &hints, 0, sizeof( hints ) ); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; - if( bind_ip == NULL ) - hints.ai_flags = AI_PASSIVE; - - if( getaddrinfo( bind_ip, port_str, &hints, &addr_list ) != 0 ) - return( POLARSSL_ERR_NET_UNKNOWN_HOST ); - - /* Try the sockaddrs until a binding succeeds */ - ret = POLARSSL_ERR_NET_UNKNOWN_HOST; - for( cur = addr_list; cur != NULL; cur = cur->ai_next ) - { - *fd = (int) socket( cur->ai_family, cur->ai_socktype, - cur->ai_protocol ); - if( *fd < 0 ) - { - ret = POLARSSL_ERR_NET_SOCKET_FAILED; - continue; - } - - n = 1; - if( setsockopt( *fd, SOL_SOCKET, SO_REUSEADDR, - (const char *) &n, sizeof( n ) ) != 0 ) - { - close( *fd ); - ret = POLARSSL_ERR_NET_SOCKET_FAILED; - continue; - } - - if( bind( *fd, cur->ai_addr, cur->ai_addrlen ) != 0 ) - { - close( *fd ); - ret = POLARSSL_ERR_NET_BIND_FAILED; - continue; - } - - if( listen( *fd, POLARSSL_NET_LISTEN_BACKLOG ) != 0 ) - { - close( *fd ); - ret = POLARSSL_ERR_NET_LISTEN_FAILED; - continue; - } - - /* I we ever get there, it's a success */ - ret = 0; - break; - } - - freeaddrinfo( addr_list ); - - return( ret ); - -#else - /* Legacy IPv4-only version */ - - int ret, n, c[4]; - struct sockaddr_in server_addr; - - if( ( ret = net_prepare() ) != 0 ) - return( ret ); - - if( ( *fd = (int) socket( AF_INET, SOCK_STREAM, IPPROTO_IP ) ) < 0 ) - return( POLARSSL_ERR_NET_SOCKET_FAILED ); - - n = 1; - setsockopt( *fd, SOL_SOCKET, SO_REUSEADDR, - (const char *) &n, sizeof( n ) ); - - server_addr.sin_addr.s_addr = net_htonl( INADDR_ANY ); - server_addr.sin_family = AF_INET; - server_addr.sin_port = net_htons( port ); - - if( bind_ip != NULL ) - { - memset( c, 0, sizeof( c ) ); - sscanf( bind_ip, "%d.%d.%d.%d", &c[0], &c[1], &c[2], &c[3] ); - - for( n = 0; n < 4; n++ ) - if( c[n] < 0 || c[n] > 255 ) - break; - - if( n == 4 ) - server_addr.sin_addr.s_addr = net_htonl( - ( (uint32_t) c[0] << 24 ) | - ( (uint32_t) c[1] << 16 ) | - ( (uint32_t) c[2] << 8 ) | - ( (uint32_t) c[3] ) ); - } - - if( bind( *fd, (struct sockaddr *) &server_addr, - sizeof( server_addr ) ) < 0 ) - { - close( *fd ); - return( POLARSSL_ERR_NET_BIND_FAILED ); - } - - if( listen( *fd, POLARSSL_NET_LISTEN_BACKLOG ) != 0 ) - { - close( *fd ); - return( POLARSSL_ERR_NET_LISTEN_FAILED ); - } - - return( 0 ); -#endif /* POLARSSL_HAVE_IPV6 */ -} - -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) -/* - * Check if the requested operation would be blocking on a non-blocking socket - * and thus 'failed' with a negative return value. - */ -static int net_would_block( int fd ) -{ - ((void) fd); - return( WSAGetLastError() == WSAEWOULDBLOCK ); -} -#else -/* - * Check if the requested operation would be blocking on a non-blocking socket - * and thus 'failed' with a negative return value. - * - * Note: on a blocking socket this function always returns 0! - */ -static int net_would_block( int fd ) -{ -#if 0 - /* - * Never return 'WOULD BLOCK' on a non-blocking socket - */ - if( ( fcntl( fd, F_GETFL ) & O_NONBLOCK ) != O_NONBLOCK ) - return( 0 ); - - switch( errno ) - { -#if defined EAGAIN - case EAGAIN: -#endif -#if defined EWOULDBLOCK && EWOULDBLOCK != EAGAIN - case EWOULDBLOCK: -#endif - return( 1 ); - } -#endif - return( 0 ); -} -#endif /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */ - -/* - * Accept a connection from a remote client - */ -int net_accept( int bind_fd, int *client_fd, void *client_ip ) -{ -#if defined(POLARSSL_HAVE_IPV6) - struct sockaddr_storage client_addr; -#else - struct sockaddr_in client_addr; -#endif - -#if defined(__socklen_t_defined) || defined(_SOCKLEN_T) || \ - defined(_SOCKLEN_T_DECLARED) - socklen_t n = (socklen_t) sizeof( client_addr ); -#else - int n = (int) sizeof( client_addr ); -#endif - - *client_fd = (int) accept( bind_fd, (struct sockaddr *) - &client_addr, &n ); - - if( *client_fd < 0 ) - { - if( net_would_block( *client_fd ) != 0 ) - return( POLARSSL_ERR_NET_WANT_READ ); - - return( POLARSSL_ERR_NET_ACCEPT_FAILED ); - } - - if( client_ip != NULL ) - { -#if defined(POLARSSL_HAVE_IPV6) - if( client_addr.ss_family == AF_INET ) - { - struct sockaddr_in *addr4 = (struct sockaddr_in *) &client_addr; - memcpy( client_ip, &addr4->sin_addr.s_addr, - sizeof( addr4->sin_addr.s_addr ) ); - } - else - { - struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *) &client_addr; - memcpy( client_ip, &addr6->sin6_addr.s6_addr, - sizeof( addr6->sin6_addr.s6_addr ) ); - } -#else - memcpy( client_ip, &client_addr.sin_addr.s_addr, - sizeof( client_addr.sin_addr.s_addr ) ); -#endif /* POLARSSL_HAVE_IPV6 */ - } - - return( 0 ); -} - -/* - * Set the socket blocking or non-blocking - */ -int net_set_block( int fd ) -{ -#if ( defined(_WIN32) || defined(_WIN32_WCE) || defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)) && !defined(EFIX64) && \ - !defined(EFI32) - unsigned long n = 0; - return( ioctlsocket( fd, FIONBIO, &n ) ); -#else - return( fcntl( fd, F_SETFL, fcntl( fd, F_GETFL ) & ~O_NONBLOCK ) ); -#endif -} - -int net_set_nonblock( int fd ) -{ -#if ( defined(_WIN32) || defined(_WIN32_WCE) || defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)) && !defined(EFIX64) && \ - !defined(EFI32) - unsigned long n = 1; - return( ioctlsocket( fd, FIONBIO, &n ) ); -#else - return( fcntl( fd, F_SETFL, fcntl( fd, F_GETFL ) | O_NONBLOCK ) ); -#endif -} - -#if defined(POLARSSL_HAVE_TIME) -/* - * Portable usleep helper - */ -void net_usleep( unsigned long usec ) -{ - struct timeval tv; - tv.tv_sec = 0; - tv.tv_usec = usec; - select( 0, NULL, NULL, NULL, &tv ); -} -#endif /* POLARSSL_HAVE_TIME */ - -/* - * Read at most 'len' characters - */ -int net_recv( void *ctx, unsigned char *buf, size_t len ) -{ - int fd = *((int *) ctx); - int ret = read( fd, buf, len ); - - if( ret < 0 ) - { - if( net_would_block( fd ) != 0 ) - return( POLARSSL_ERR_NET_WANT_READ ); - -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) - if( WSAGetLastError() == WSAECONNRESET ) - return( POLARSSL_ERR_NET_CONN_RESET ); -#else -#ifdef ERRNO - if( errno == EPIPE || errno == ECONNRESET ) - return( POLARSSL_ERR_NET_CONN_RESET ); - - if( errno == EINTR ) - return( POLARSSL_ERR_NET_WANT_READ ); -#endif -#endif - - return( POLARSSL_ERR_NET_RECV_FAILED ); - } - - return( ret ); -} - -/* - * Write at most 'len' characters - */ -int net_send( void *ctx, const unsigned char *buf, size_t len ) -{ - int fd = *((int *) ctx); - int ret = write( fd, buf, len ); - - if( ret < 0 ) - { - if( net_would_block( fd ) != 0 ) - return( POLARSSL_ERR_NET_WANT_WRITE ); - -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) - if( WSAGetLastError() == WSAECONNRESET ) - return( POLARSSL_ERR_NET_CONN_RESET ); -#else -#ifdef ERRNO - if( errno == EPIPE || errno == ECONNRESET ) - return( POLARSSL_ERR_NET_CONN_RESET ); - - if( errno == EINTR ) - return( POLARSSL_ERR_NET_WANT_WRITE ); -#endif -#endif - - return( POLARSSL_ERR_NET_SEND_FAILED ); - } - - return( ret ); -} - -/* - * Gracefully close the connection - */ -void net_close( int fd ) -{ - shutdown( fd, 2 ); - close( fd ); -} -#endif // LWIP_SOCKET - -#endif /* POLARSSL_NET_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/oid.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/oid.c deleted file mode 100644 index f0afafe..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/oid.c +++ /dev/null @@ -1,684 +0,0 @@ -/** - * \file oid.c - * - * \brief Object Identifier (OID) database - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_OID_C) - -#include "polarssl/oid.h" -#include "polarssl/rsa.h" - -#if defined(POLARSSL_X509_USE_C) || defined(POLARSSL_X509_CREATE_C) -#include "polarssl/x509.h" -#endif - -#include - -/* - * Macro to automatically add the size of #define'd OIDs - */ -#define ADD_LEN(s) s, OID_SIZE(s) - -/* - * Macro to generate an internal function for oid_XXX_from_asn1() (used by - * the other functions) - */ -#define FN_OID_TYPED_FROM_ASN1( TYPE_T, NAME, LIST ) \ -static const TYPE_T * oid_ ## NAME ## _from_asn1( const asn1_buf *oid ) \ -{ \ - const TYPE_T *p = LIST; \ - const oid_descriptor_t *cur = (const oid_descriptor_t *) p; \ - if( p == NULL || oid == NULL ) return( NULL ); \ - while( cur->asn1 != NULL ) { \ - if( cur->asn1_len == oid->len && \ - memcmp( cur->asn1, oid->p, oid->len ) == 0 ) { \ - return( p ); \ - } \ - p++; \ - cur = (const oid_descriptor_t *) p; \ - } \ - return( NULL ); \ -} - -/* - * Macro to generate a function for retrieving a single attribute from the - * descriptor of an oid_descriptor_t wrapper. - */ -#define FN_OID_GET_DESCRIPTOR_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \ -int FN_NAME( const asn1_buf *oid, ATTR1_TYPE * ATTR1 ) \ -{ \ - const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \ - if( data == NULL ) return( POLARSSL_ERR_OID_NOT_FOUND ); \ - *ATTR1 = data->descriptor.ATTR1; \ - return( 0 ); \ -} - -/* - * Macro to generate a function for retrieving a single attribute from an - * oid_descriptor_t wrapper. - */ -#define FN_OID_GET_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \ -int FN_NAME( const asn1_buf *oid, ATTR1_TYPE * ATTR1 ) \ -{ \ - const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \ - if( data == NULL ) return( POLARSSL_ERR_OID_NOT_FOUND ); \ - *ATTR1 = data->ATTR1; \ - return( 0 ); \ -} - -/* - * Macro to generate a function for retrieving two attributes from an - * oid_descriptor_t wrapper. - */ -#define FN_OID_GET_ATTR2(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1, \ - ATTR2_TYPE, ATTR2) \ -int FN_NAME( const asn1_buf *oid, ATTR1_TYPE * ATTR1, ATTR2_TYPE * ATTR2 ) \ -{ \ - const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \ - if( data == NULL ) return( POLARSSL_ERR_OID_NOT_FOUND ); \ - *ATTR1 = data->ATTR1; \ - *ATTR2 = data->ATTR2; \ - return( 0 ); \ -} - -/* - * Macro to generate a function for retrieving the OID based on a single - * attribute from a oid_descriptor_t wrapper. - */ -#define FN_OID_GET_OID_BY_ATTR1(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1) \ -int FN_NAME( ATTR1_TYPE ATTR1, const char **oid, size_t *olen ) \ -{ \ - const TYPE_T *cur = LIST; \ - while( cur->descriptor.asn1 != NULL ) { \ - if( cur->ATTR1 == ATTR1 ) { \ - *oid = cur->descriptor.asn1; \ - *olen = cur->descriptor.asn1_len; \ - return( 0 ); \ - } \ - cur++; \ - } \ - return( POLARSSL_ERR_OID_NOT_FOUND ); \ -} - -/* - * Macro to generate a function for retrieving the OID based on two - * attributes from a oid_descriptor_t wrapper. - */ -#define FN_OID_GET_OID_BY_ATTR2(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1, \ - ATTR2_TYPE, ATTR2) \ -int FN_NAME( ATTR1_TYPE ATTR1, ATTR2_TYPE ATTR2, const char **oid , \ - size_t *olen ) \ -{ \ - const TYPE_T *cur = LIST; \ - while( cur->descriptor.asn1 != NULL ) { \ - if( cur->ATTR1 == ATTR1 && cur->ATTR2 == ATTR2 ) { \ - *oid = cur->descriptor.asn1; \ - *olen = cur->descriptor.asn1_len; \ - return( 0 ); \ - } \ - cur++; \ - } \ - return( POLARSSL_ERR_OID_NOT_FOUND ); \ -} - -/* - * For X520 attribute types - */ -typedef struct { - oid_descriptor_t descriptor; - const char *short_name; -} oid_x520_attr_t; - -static const oid_x520_attr_t oid_x520_attr_type[] = -{ - { - { ADD_LEN( OID_AT_CN ), "id-at-commonName", "Common Name" }, - "CN", - }, - { - { ADD_LEN( OID_AT_COUNTRY ), "id-at-countryName", "Country" }, - "C", - }, - { - { ADD_LEN( OID_AT_LOCALITY ), "id-at-locality", "Locality" }, - "L", - }, - { - { ADD_LEN( OID_AT_STATE ), "id-at-state", "State" }, - "ST", - }, - { - { ADD_LEN( OID_AT_ORGANIZATION ),"id-at-organizationName", "Organization" }, - "O", - }, - { - { ADD_LEN( OID_AT_ORG_UNIT ), "id-at-organizationalUnitName", "Org Unit" }, - "OU", - }, - { - { ADD_LEN( OID_PKCS9_EMAIL ), "emailAddress", "E-mail address" }, - "emailAddress", - }, - { - { ADD_LEN( OID_AT_SERIAL_NUMBER ),"id-at-serialNumber", "Serial number" }, - "serialNumber", - }, - { - { ADD_LEN( OID_AT_POSTAL_ADDRESS ),"id-at-postalAddress", "Postal address" }, - "postalAddress", - }, - { - { ADD_LEN( OID_AT_POSTAL_CODE ), "id-at-postalCode", "Postal code" }, - "postalCode", - }, - { - { ADD_LEN( OID_AT_SUR_NAME ), "id-at-surName", "Surname" }, - "SN", - }, - { - { ADD_LEN( OID_AT_GIVEN_NAME ), "id-at-givenName", "Given name" }, - "GN", - }, - { - { ADD_LEN( OID_AT_INITIALS ), "id-at-initials", "Initials" }, - "initials", - }, - { - { ADD_LEN( OID_AT_GENERATION_QUALIFIER ), "id-at-generationQualifier", "Generation qualifier" }, - "generationQualifier", - }, - { - { ADD_LEN( OID_AT_TITLE ), "id-at-title", "Title" }, - "title", - }, - { - { ADD_LEN( OID_AT_DN_QUALIFIER ),"id-at-dnQualifier", "Distinguished Name qualifier" }, - "dnQualifier", - }, - { - { ADD_LEN( OID_AT_PSEUDONYM ), "id-at-pseudonym", "Pseudonym" }, - "pseudonym", - }, - { - { ADD_LEN( OID_DOMAIN_COMPONENT ), "id-domainComponent", "Domain component" }, - "DC", - }, - { - { NULL, 0, NULL, NULL }, - NULL, - } -}; - -FN_OID_TYPED_FROM_ASN1(oid_x520_attr_t, x520_attr, oid_x520_attr_type); -FN_OID_GET_ATTR1(oid_get_attr_short_name, oid_x520_attr_t, x520_attr, const char *, short_name); - -#if defined(POLARSSL_X509_USE_C) || defined(POLARSSL_X509_CREATE_C) -/* - * For X509 extensions - */ -typedef struct { - oid_descriptor_t descriptor; - int ext_type; -} oid_x509_ext_t; - -static const oid_x509_ext_t oid_x509_ext[] = -{ - { - { ADD_LEN( OID_BASIC_CONSTRAINTS ), "id-ce-basicConstraints", "Basic Constraints" }, - EXT_BASIC_CONSTRAINTS, - }, - { - { ADD_LEN( OID_KEY_USAGE ), "id-ce-keyUsage", "Key Usage" }, - EXT_KEY_USAGE, - }, - { - { ADD_LEN( OID_EXTENDED_KEY_USAGE ), "id-ce-keyUsage", "Extended Key Usage" }, - EXT_EXTENDED_KEY_USAGE, - }, - { - { ADD_LEN( OID_SUBJECT_ALT_NAME ), "id-ce-subjectAltName", "Subject Alt Name" }, - EXT_SUBJECT_ALT_NAME, - }, - { - { ADD_LEN( OID_NS_CERT_TYPE ), "id-netscape-certtype", "Netscape Certificate Type" }, - EXT_NS_CERT_TYPE, - }, - { - { NULL, 0, NULL, NULL }, - 0, - }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_x509_ext_t, x509_ext, oid_x509_ext); -FN_OID_GET_ATTR1(oid_get_x509_ext_type, oid_x509_ext_t, x509_ext, int, ext_type); - -static const oid_descriptor_t oid_ext_key_usage[] = -{ - { ADD_LEN( OID_SERVER_AUTH ), "id-kp-serverAuth", "TLS Web Server Authentication" }, - { ADD_LEN( OID_CLIENT_AUTH ), "id-kp-clientAuth", "TLS Web Client Authentication" }, - { ADD_LEN( OID_CODE_SIGNING ), "id-kp-codeSigning", "Code Signing" }, - { ADD_LEN( OID_EMAIL_PROTECTION ), "id-kp-emailProtection", "E-mail Protection" }, - { ADD_LEN( OID_TIME_STAMPING ), "id-kp-timeStamping", "Time Stamping" }, - { ADD_LEN( OID_OCSP_SIGNING ), "id-kp-OCSPSigning", "OCSP Signing" }, - { NULL, 0, NULL, NULL }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_descriptor_t, ext_key_usage, oid_ext_key_usage); -FN_OID_GET_ATTR1(oid_get_extended_key_usage, oid_descriptor_t, ext_key_usage, const char *, description); -#endif /* POLARSSL_X509_USE_C || POLARSSL_X509_CREATE_C */ - -#if defined(POLARSSL_MD_C) -/* - * For SignatureAlgorithmIdentifier - */ -typedef struct { - oid_descriptor_t descriptor; - md_type_t md_alg; - pk_type_t pk_alg; -} oid_sig_alg_t; - -static const oid_sig_alg_t oid_sig_alg[] = -{ - { - { ADD_LEN( OID_PKCS1_MD2 ), "md2WithRSAEncryption", "RSA with MD2" }, - POLARSSL_MD_MD2, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_PKCS1_MD4 ), "md4WithRSAEncryption", "RSA with MD4" }, - POLARSSL_MD_MD4, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_PKCS1_MD5 ), "md5WithRSAEncryption", "RSA with MD5" }, - POLARSSL_MD_MD5, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_PKCS1_SHA1 ), "sha-1WithRSAEncryption", "RSA with SHA1" }, - POLARSSL_MD_SHA1, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_PKCS1_SHA224 ), "sha224WithRSAEncryption", "RSA with SHA-224" }, - POLARSSL_MD_SHA224, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_PKCS1_SHA256 ), "sha256WithRSAEncryption", "RSA with SHA-256" }, - POLARSSL_MD_SHA256, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_PKCS1_SHA384 ), "sha384WithRSAEncryption", "RSA with SHA-384" }, - POLARSSL_MD_SHA384, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_PKCS1_SHA512 ), "sha512WithRSAEncryption", "RSA with SHA-512" }, - POLARSSL_MD_SHA512, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_RSA_SHA_OBS ), "sha-1WithRSAEncryption", "RSA with SHA1" }, - POLARSSL_MD_SHA1, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_ECDSA_SHA1 ), "ecdsa-with-SHA1", "ECDSA with SHA1" }, - POLARSSL_MD_SHA1, POLARSSL_PK_ECDSA, - }, - { - { ADD_LEN( OID_ECDSA_SHA224 ), "ecdsa-with-SHA224", "ECDSA with SHA224" }, - POLARSSL_MD_SHA224, POLARSSL_PK_ECDSA, - }, - { - { ADD_LEN( OID_ECDSA_SHA256 ), "ecdsa-with-SHA256", "ECDSA with SHA256" }, - POLARSSL_MD_SHA256, POLARSSL_PK_ECDSA, - }, - { - { ADD_LEN( OID_ECDSA_SHA384 ), "ecdsa-with-SHA384", "ECDSA with SHA384" }, - POLARSSL_MD_SHA384, POLARSSL_PK_ECDSA, - }, - { - { ADD_LEN( OID_ECDSA_SHA512 ), "ecdsa-with-SHA512", "ECDSA with SHA512" }, - POLARSSL_MD_SHA512, POLARSSL_PK_ECDSA, - }, - { - { ADD_LEN( OID_RSASSA_PSS ), "RSASSA-PSS", "RSASSA-PSS" }, - POLARSSL_MD_NONE, POLARSSL_PK_RSASSA_PSS, - }, - { - { NULL, 0, NULL, NULL }, - (md_type_t)0, (pk_type_t)0, - }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_sig_alg_t, sig_alg, oid_sig_alg); -FN_OID_GET_DESCRIPTOR_ATTR1(oid_get_sig_alg_desc, oid_sig_alg_t, sig_alg, const char *, description); -FN_OID_GET_ATTR2(oid_get_sig_alg, oid_sig_alg_t, sig_alg, md_type_t, md_alg, pk_type_t, pk_alg); -FN_OID_GET_OID_BY_ATTR2(oid_get_oid_by_sig_alg, oid_sig_alg_t, oid_sig_alg, pk_type_t, pk_alg, md_type_t, md_alg); -#endif /* POLARSSL_MD_C */ - -/* - * For PublicKeyInfo (PKCS1, RFC 5480) - */ -typedef struct { - oid_descriptor_t descriptor; - pk_type_t pk_alg; -} oid_pk_alg_t; - -static const oid_pk_alg_t oid_pk_alg[] = -{ - { - { ADD_LEN( OID_PKCS1_RSA ), "rsaEncryption", "RSA" }, - POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_EC_ALG_UNRESTRICTED ), "id-ecPublicKey", "Generic EC key" }, - POLARSSL_PK_ECKEY, - }, - { - { ADD_LEN( OID_EC_ALG_ECDH ), "id-ecDH", "EC key for ECDH" }, - POLARSSL_PK_ECKEY_DH, - }, - { - { NULL, 0, NULL, NULL }, - (pk_type_t)0, - }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_pk_alg_t, pk_alg, oid_pk_alg); -FN_OID_GET_ATTR1(oid_get_pk_alg, oid_pk_alg_t, pk_alg, pk_type_t, pk_alg); -FN_OID_GET_OID_BY_ATTR1(oid_get_oid_by_pk_alg, oid_pk_alg_t, oid_pk_alg, pk_type_t, pk_alg); - -#if defined(POLARSSL_ECP_C) -/* - * For namedCurve (RFC 5480) - */ -typedef struct { - oid_descriptor_t descriptor; - ecp_group_id grp_id; -} oid_ecp_grp_t; - -static const oid_ecp_grp_t oid_ecp_grp[] = -{ - { - { ADD_LEN( OID_EC_GRP_SECP192R1 ), "secp192r1", "secp192r1" }, - POLARSSL_ECP_DP_SECP192R1, - }, - { - { ADD_LEN( OID_EC_GRP_SECP224R1 ), "secp224r1", "secp224r1" }, - POLARSSL_ECP_DP_SECP224R1, - }, - { - { ADD_LEN( OID_EC_GRP_SECP256R1 ), "secp256r1", "secp256r1" }, - POLARSSL_ECP_DP_SECP256R1, - }, - { - { ADD_LEN( OID_EC_GRP_SECP384R1 ), "secp384r1", "secp384r1" }, - POLARSSL_ECP_DP_SECP384R1, - }, - { - { ADD_LEN( OID_EC_GRP_SECP521R1 ), "secp521r1", "secp521r1" }, - POLARSSL_ECP_DP_SECP521R1, - }, - { - { ADD_LEN( OID_EC_GRP_SECP192K1 ), "secp192k1", "secp192k1" }, - POLARSSL_ECP_DP_SECP192K1, - }, - { - { ADD_LEN( OID_EC_GRP_SECP224K1 ), "secp224k1", "secp224k1" }, - POLARSSL_ECP_DP_SECP224K1, - }, - { - { ADD_LEN( OID_EC_GRP_SECP256K1 ), "secp256k1", "secp256k1" }, - POLARSSL_ECP_DP_SECP256K1, - }, - { - { ADD_LEN( OID_EC_GRP_BP256R1 ), "brainpoolP256r1","brainpool256r1" }, - POLARSSL_ECP_DP_BP256R1, - }, - { - { ADD_LEN( OID_EC_GRP_BP384R1 ), "brainpoolP384r1","brainpool384r1" }, - POLARSSL_ECP_DP_BP384R1, - }, - { - { ADD_LEN( OID_EC_GRP_BP512R1 ), "brainpoolP512r1","brainpool512r1" }, - POLARSSL_ECP_DP_BP512R1, - }, - { - { NULL, 0, NULL, NULL }, - 0, - }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_ecp_grp_t, grp_id, oid_ecp_grp); -FN_OID_GET_ATTR1(oid_get_ec_grp, oid_ecp_grp_t, grp_id, ecp_group_id, grp_id); -FN_OID_GET_OID_BY_ATTR1(oid_get_oid_by_ec_grp, oid_ecp_grp_t, oid_ecp_grp, ecp_group_id, grp_id); -#endif /* POLARSSL_ECP_C */ - -#if defined(POLARSSL_CIPHER_C) -/* - * For PKCS#5 PBES2 encryption algorithm - */ -typedef struct { - oid_descriptor_t descriptor; - cipher_type_t cipher_alg; -} oid_cipher_alg_t; - -static const oid_cipher_alg_t oid_cipher_alg[] = -{ - { - { ADD_LEN( OID_DES_CBC ), "desCBC", "DES-CBC" }, - POLARSSL_CIPHER_DES_CBC, - }, - { - { ADD_LEN( OID_DES_EDE3_CBC ), "des-ede3-cbc", "DES-EDE3-CBC" }, - POLARSSL_CIPHER_DES_EDE3_CBC, - }, - { - { NULL, 0, NULL, NULL }, - (cipher_type_t)0, - }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_cipher_alg_t, cipher_alg, oid_cipher_alg); -FN_OID_GET_ATTR1(oid_get_cipher_alg, oid_cipher_alg_t, cipher_alg, cipher_type_t, cipher_alg); -#endif /* POLARSSL_CIPHER_C */ - -#if defined(POLARSSL_MD_C) -/* - * For digestAlgorithm - */ -typedef struct { - oid_descriptor_t descriptor; - md_type_t md_alg; -} oid_md_alg_t; - -static const oid_md_alg_t oid_md_alg[] = -{ - { - { ADD_LEN( OID_DIGEST_ALG_MD2 ), "id-md2", "MD2" }, - POLARSSL_MD_MD2, - }, - { - { ADD_LEN( OID_DIGEST_ALG_MD4 ), "id-md4", "MD4" }, - POLARSSL_MD_MD4, - }, - { - { ADD_LEN( OID_DIGEST_ALG_MD5 ), "id-md5", "MD5" }, - POLARSSL_MD_MD5, - }, - { - { ADD_LEN( OID_DIGEST_ALG_SHA1 ), "id-sha1", "SHA-1" }, - POLARSSL_MD_SHA1, - }, - { - { ADD_LEN( OID_DIGEST_ALG_SHA224 ), "id-sha224", "SHA-224" }, - POLARSSL_MD_SHA224, - }, - { - { ADD_LEN( OID_DIGEST_ALG_SHA256 ), "id-sha256", "SHA-256" }, - POLARSSL_MD_SHA256, - }, - { - { ADD_LEN( OID_DIGEST_ALG_SHA384 ), "id-sha384", "SHA-384" }, - POLARSSL_MD_SHA384, - }, - { - { ADD_LEN( OID_DIGEST_ALG_SHA512 ), "id-sha512", "SHA-512" }, - POLARSSL_MD_SHA512, - }, - { - { NULL, 0, NULL, NULL }, - (md_type_t)0, - }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_md_alg_t, md_alg, oid_md_alg); -FN_OID_GET_ATTR1(oid_get_md_alg, oid_md_alg_t, md_alg, md_type_t, md_alg); -FN_OID_GET_OID_BY_ATTR1(oid_get_oid_by_md, oid_md_alg_t, oid_md_alg, md_type_t, md_alg); -#endif /* POLARSSL_MD_C */ - -#if defined(POLARSSL_PKCS12_C) -/* - * For PKCS#12 PBEs - */ -typedef struct { - oid_descriptor_t descriptor; - md_type_t md_alg; - cipher_type_t cipher_alg; -} oid_pkcs12_pbe_alg_t; - -static const oid_pkcs12_pbe_alg_t oid_pkcs12_pbe_alg[] = -{ - { - { ADD_LEN( OID_PKCS12_PBE_SHA1_DES3_EDE_CBC ), "pbeWithSHAAnd3-KeyTripleDES-CBC", "PBE with SHA1 and 3-Key 3DES" }, - POLARSSL_MD_SHA1, POLARSSL_CIPHER_DES_EDE3_CBC, - }, - { - { ADD_LEN( OID_PKCS12_PBE_SHA1_DES2_EDE_CBC ), "pbeWithSHAAnd2-KeyTripleDES-CBC", "PBE with SHA1 and 2-Key 3DES" }, - POLARSSL_MD_SHA1, POLARSSL_CIPHER_DES_EDE_CBC, - }, - { - { NULL, 0, NULL, NULL }, - 0, 0, - }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_pkcs12_pbe_alg_t, pkcs12_pbe_alg, oid_pkcs12_pbe_alg); -FN_OID_GET_ATTR2(oid_get_pkcs12_pbe_alg, oid_pkcs12_pbe_alg_t, pkcs12_pbe_alg, md_type_t, md_alg, cipher_type_t, cipher_alg); -#endif /* POLARSSL_PKCS12_C */ - -#if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \ - !defined(EFI32) -#include - -#if !defined vsnprintf -#define vsnprintf _vsnprintf -#endif // vsnprintf - -/* - * Windows _snprintf and _vsnprintf are not compatible to linux versions. - * Result value is not size of buffer needed, but -1 if no fit is possible. - * - * This fuction tries to 'fix' this by at least suggesting enlarging the - * size by 20. - */ -static int compat_snprintf( char *str, size_t size, const char *format, ... ) -{ - va_list ap; - int res = -1; - - va_start( ap, format ); - - res = vsnprintf( str, size, format, ap ); - - va_end( ap ); - - // No quick fix possible - if( res < 0 ) - return( (int) size + 20 ); - - return( res ); -} - -#define snprintf compat_snprintf -#endif /* _MSC_VER && !snprintf && !EFIX64 && !EFI32 */ - -#define SAFE_SNPRINTF() \ -{ \ - if( ret == -1 ) \ - return( POLARSSL_ERR_OID_BUF_TOO_SMALL ); \ - \ - if( (unsigned int) ret >= n ) { \ - p[n - 1] = '\0'; \ - return( POLARSSL_ERR_OID_BUF_TOO_SMALL ); \ - } \ - \ - n -= (unsigned int) ret; \ - p += (unsigned int) ret; \ -} - -/* Return the x.y.z.... style numeric string for the given OID */ -int oid_get_numeric_string( char *buf, size_t size, - const asn1_buf *oid ) -{ - int ret; - size_t i, n; - unsigned int value; - char *p; - - p = buf; - n = size; - - /* First byte contains first two dots */ - if( oid->len > 0 ) - { - ret = snprintf( p, n, "%d.%d", oid->p[0] / 40, oid->p[0] % 40 ); - SAFE_SNPRINTF(); - } - - value = 0; - for( i = 1; i < oid->len; i++ ) - { - /* Prevent overflow in value. */ - if( ( ( value << 7 ) >> 7 ) != value ) - return( POLARSSL_ERR_OID_BUF_TOO_SMALL ); - - value <<= 7; - value += oid->p[i] & 0x7F; - - if( !( oid->p[i] & 0x80 ) ) - { - /* Last byte */ - ret = snprintf( p, n, ".%d", value ); - SAFE_SNPRINTF(); - value = 0; - } - } - - return( (int) ( size - n ) ); -} - -#endif /* POLARSSL_OID_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/padlock.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/padlock.c deleted file mode 100644 index 5d06390..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/padlock.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * VIA PadLock support functions - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * This implementation is based on the VIA PadLock Programming Guide: - * - * http://www.via.com.tw/en/downloads/whitepapers/initiatives/padlock/ - * programming_guide.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PADLOCK_C) - -#include "polarssl/padlock.h" - -#if defined(POLARSSL_HAVE_X86) - -/* - * PadLock detection routine - */ -int padlock_supports( int feature ) -{ - static int flags = -1; - int ebx = 0, edx = 0; - - if( flags == -1 ) - { - asm( "movl %%ebx, %0 \n\t" - "movl $0xC0000000, %%eax \n\t" - "cpuid \n\t" - "cmpl $0xC0000001, %%eax \n\t" - "movl $0, %%edx \n\t" - "jb unsupported \n\t" - "movl $0xC0000001, %%eax \n\t" - "cpuid \n\t" - "unsupported: \n\t" - "movl %%edx, %1 \n\t" - "movl %2, %%ebx \n\t" - : "=m" (ebx), "=m" (edx) - : "m" (ebx) - : "eax", "ecx", "edx" ); - - flags = edx; - } - - return( flags & feature ); -} - -/* - * PadLock AES-ECB block en(de)cryption - */ -int padlock_xcryptecb( aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) -{ - int ebx = 0; - uint32_t *rk; - uint32_t *blk; - uint32_t *ctrl; - unsigned char buf[256]; - - rk = ctx->rk; - blk = PADLOCK_ALIGN16( buf ); - memcpy( blk, input, 16 ); - - ctrl = blk + 4; - *ctrl = 0x80 | ctx->nr | ( ( ctx->nr + ( mode^1 ) - 10 ) << 9 ); - - asm( "pushfl \n\t" - "popfl \n\t" - "movl %%ebx, %0 \n\t" - "movl $1, %%ecx \n\t" - "movl %2, %%edx \n\t" - "movl %3, %%ebx \n\t" - "movl %4, %%esi \n\t" - "movl %4, %%edi \n\t" - ".byte 0xf3,0x0f,0xa7,0xc8 \n\t" - "movl %1, %%ebx \n\t" - : "=m" (ebx) - : "m" (ebx), "m" (ctrl), "m" (rk), "m" (blk) - : "ecx", "edx", "esi", "edi" ); - - memcpy( output, blk, 16 ); - - return( 0 ); -} - -/* - * PadLock AES-CBC buffer en(de)cryption - */ -int padlock_xcryptcbc( aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) -{ - int ebx = 0; - size_t count; - uint32_t *rk; - uint32_t *iw; - uint32_t *ctrl; - unsigned char buf[256]; - - if( ( (long) input & 15 ) != 0 || - ( (long) output & 15 ) != 0 ) - return( POLARSSL_ERR_PADLOCK_DATA_MISALIGNED ); - - rk = ctx->rk; - iw = PADLOCK_ALIGN16( buf ); - memcpy( iw, iv, 16 ); - - ctrl = iw + 4; - *ctrl = 0x80 | ctx->nr | ( ( ctx->nr + ( mode ^ 1 ) - 10 ) << 9 ); - - count = ( length + 15 ) >> 4; - - asm( "pushfl \n\t" - "popfl \n\t" - "movl %%ebx, %0 \n\t" - "movl %2, %%ecx \n\t" - "movl %3, %%edx \n\t" - "movl %4, %%ebx \n\t" - "movl %5, %%esi \n\t" - "movl %6, %%edi \n\t" - "movl %7, %%eax \n\t" - ".byte 0xf3,0x0f,0xa7,0xd0 \n\t" - "movl %1, %%ebx \n\t" - : "=m" (ebx) - : "m" (ebx), "m" (count), "m" (ctrl), - "m" (rk), "m" (input), "m" (output), "m" (iw) - : "eax", "ecx", "edx", "esi", "edi" ); - - memcpy( iv, iw, 16 ); - - return( 0 ); -} - -#endif /* POLARSSL_HAVE_X86 */ - -#endif /* POLARSSL_PADLOCK_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pbkdf2.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pbkdf2.c deleted file mode 100644 index e76f066..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pbkdf2.c +++ /dev/null @@ -1,64 +0,0 @@ -/** - * \file pbkdf2.c - * - * \brief Password-Based Key Derivation Function 2 (from PKCS#5) - * DEPRECATED: Use pkcs5.c instead - * - * \author Mathias Olsson - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * PBKDF2 is part of PKCS#5 - * - * http://tools.ietf.org/html/rfc2898 (Specification) - * http://tools.ietf.org/html/rfc6070 (Test vectors) - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PBKDF2_C) - -#include "polarssl/pbkdf2.h" -#include "polarssl/pkcs5.h" - -int pbkdf2_hmac( md_context_t *ctx, const unsigned char *password, size_t plen, - const unsigned char *salt, size_t slen, - unsigned int iteration_count, - uint32_t key_length, unsigned char *output ) -{ - return pkcs5_pbkdf2_hmac( ctx, password, plen, salt, slen, iteration_count, - key_length, output ); -} - -#if defined(POLARSSL_SELF_TEST) -int pbkdf2_self_test( int verbose ) -{ - return pkcs5_self_test( verbose ); -} -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_PBKDF2_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pem.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pem.c deleted file mode 100644 index 485d829..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pem.c +++ /dev/null @@ -1,445 +0,0 @@ -/* - * Privacy Enhanced Mail (PEM) decoding - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PEM_PARSE_C) || defined(POLARSSL_PEM_WRITE_C) -#include "polarssl/pem.h" -#include "polarssl/base64.h" -#include "polarssl/des.h" -#include "polarssl/aes.h" -#include "polarssl/md5.h" -#include "polarssl/cipher.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if defined(POLARSSL_PEM_PARSE_C) -void pem_init( pem_context *ctx ) -{ - memset( ctx, 0, sizeof( pem_context ) ); -} - -#if defined(POLARSSL_MD5_C) && defined(POLARSSL_CIPHER_MODE_CBC) && \ - ( defined(POLARSSL_DES_C) || defined(POLARSSL_AES_C) ) -/* - * Read a 16-byte hex string and convert it to binary - */ -static int pem_get_iv( const unsigned char *s, unsigned char *iv, - size_t iv_len ) -{ - size_t i, j, k; - - memset( iv, 0, iv_len ); - - for( i = 0; i < iv_len * 2; i++, s++ ) - { - if( *s >= '0' && *s <= '9' ) j = *s - '0'; else - if( *s >= 'A' && *s <= 'F' ) j = *s - '7'; else - if( *s >= 'a' && *s <= 'f' ) j = *s - 'W'; else - return( POLARSSL_ERR_PEM_INVALID_ENC_IV ); - - k = ( ( i & 1 ) != 0 ) ? j : j << 4; - - iv[i >> 1] = (unsigned char)( iv[i >> 1] | k ); - } - - return( 0 ); -} - -static void pem_pbkdf1( unsigned char *key, size_t keylen, - unsigned char *iv, - const unsigned char *pwd, size_t pwdlen ) -{ - md5_context md5_ctx; - unsigned char md5sum[16]; - size_t use_len; - - md5_init( &md5_ctx ); - - /* - * key[ 0..15] = MD5(pwd || IV) - */ - md5_starts( &md5_ctx ); - md5_update( &md5_ctx, pwd, pwdlen ); - md5_update( &md5_ctx, iv, 8 ); - md5_finish( &md5_ctx, md5sum ); - - if( keylen <= 16 ) - { - memcpy( key, md5sum, keylen ); - - md5_free( &md5_ctx ); - polarssl_zeroize( md5sum, 16 ); - return; - } - - memcpy( key, md5sum, 16 ); - - /* - * key[16..23] = MD5(key[ 0..15] || pwd || IV]) - */ - md5_starts( &md5_ctx ); - md5_update( &md5_ctx, md5sum, 16 ); - md5_update( &md5_ctx, pwd, pwdlen ); - md5_update( &md5_ctx, iv, 8 ); - md5_finish( &md5_ctx, md5sum ); - - use_len = 16; - if( keylen < 32 ) - use_len = keylen - 16; - - memcpy( key + 16, md5sum, use_len ); - - md5_free( &md5_ctx ); - polarssl_zeroize( md5sum, 16 ); -} - -#if defined(POLARSSL_DES_C) -/* - * Decrypt with DES-CBC, using PBKDF1 for key derivation - */ -static void pem_des_decrypt( unsigned char des_iv[8], - unsigned char *buf, size_t buflen, - const unsigned char *pwd, size_t pwdlen ) -{ - des_context des_ctx; - unsigned char des_key[8]; - - des_init( &des_ctx ); - - pem_pbkdf1( des_key, 8, des_iv, pwd, pwdlen ); - - des_setkey_dec( &des_ctx, des_key ); - des_crypt_cbc( &des_ctx, DES_DECRYPT, buflen, - des_iv, buf, buf ); - - des_free( &des_ctx ); - polarssl_zeroize( des_key, 8 ); -} - -/* - * Decrypt with 3DES-CBC, using PBKDF1 for key derivation - */ -static void pem_des3_decrypt( unsigned char des3_iv[8], - unsigned char *buf, size_t buflen, - const unsigned char *pwd, size_t pwdlen ) -{ - des3_context des3_ctx; - unsigned char des3_key[24]; - - des3_init( &des3_ctx ); - - pem_pbkdf1( des3_key, 24, des3_iv, pwd, pwdlen ); - - des3_set3key_dec( &des3_ctx, des3_key ); - des3_crypt_cbc( &des3_ctx, DES_DECRYPT, buflen, - des3_iv, buf, buf ); - - des3_free( &des3_ctx ); - polarssl_zeroize( des3_key, 24 ); -} -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_AES_C) -/* - * Decrypt with AES-XXX-CBC, using PBKDF1 for key derivation - */ -static void pem_aes_decrypt( unsigned char aes_iv[16], unsigned int keylen, - unsigned char *buf, size_t buflen, - const unsigned char *pwd, size_t pwdlen ) -{ - aes_context aes_ctx; - unsigned char aes_key[32]; - - aes_init( &aes_ctx ); - - pem_pbkdf1( aes_key, keylen, aes_iv, pwd, pwdlen ); - - aes_setkey_dec( &aes_ctx, aes_key, keylen * 8 ); - aes_crypt_cbc( &aes_ctx, AES_DECRYPT, buflen, - aes_iv, buf, buf ); - - aes_free( &aes_ctx ); - polarssl_zeroize( aes_key, keylen ); -} -#endif /* POLARSSL_AES_C */ - -#endif /* POLARSSL_MD5_C && POLARSSL_CIPHER_MODE_CBC && - ( POLARSSL_AES_C || POLARSSL_DES_C ) */ - -int pem_read_buffer( pem_context *ctx, const char *header, const char *footer, - const unsigned char *data, const unsigned char *pwd, - size_t pwdlen, size_t *use_len ) -{ - int ret, enc; - size_t len; - unsigned char *buf; - const unsigned char *s1, *s2, *end; -#if defined(POLARSSL_MD5_C) && defined(POLARSSL_CIPHER_MODE_CBC) && \ - ( defined(POLARSSL_DES_C) || defined(POLARSSL_AES_C) ) - unsigned char pem_iv[16]; - cipher_type_t enc_alg = POLARSSL_CIPHER_NONE; -#else - ((void) pwd); - ((void) pwdlen); -#endif /* POLARSSL_MD5_C && POLARSSL_CIPHER_MODE_CBC && - ( POLARSSL_AES_C || POLARSSL_DES_C ) */ - - if( ctx == NULL ) - return( POLARSSL_ERR_PEM_BAD_INPUT_DATA ); - - s1 = (unsigned char *) strstr( (const char *) data, header ); - - if( s1 == NULL ) - return( POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); - - s2 = (unsigned char *) strstr( (const char *) data, footer ); - - if( s2 == NULL || s2 <= s1 ) - return( POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); - - s1 += strlen( header ); - if( *s1 == '\r' ) s1++; - if( *s1 == '\n' ) s1++; - else return( POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); - - end = s2; - end += strlen( footer ); - if( *end == '\r' ) end++; - if( *end == '\n' ) end++; - *use_len = end - data; - - enc = 0; - - if( memcmp( s1, "Proc-Type: 4,ENCRYPTED", 22 ) == 0 ) - { -#if defined(POLARSSL_MD5_C) && defined(POLARSSL_CIPHER_MODE_CBC) && \ - ( defined(POLARSSL_DES_C) || defined(POLARSSL_AES_C) ) - enc++; - - s1 += 22; - if( *s1 == '\r' ) s1++; - if( *s1 == '\n' ) s1++; - else return( POLARSSL_ERR_PEM_INVALID_DATA ); - - -#if defined(POLARSSL_DES_C) - if( memcmp( s1, "DEK-Info: DES-EDE3-CBC,", 23 ) == 0 ) - { - enc_alg = POLARSSL_CIPHER_DES_EDE3_CBC; - - s1 += 23; - if( pem_get_iv( s1, pem_iv, 8 ) != 0 ) - return( POLARSSL_ERR_PEM_INVALID_ENC_IV ); - - s1 += 16; - } - else if( memcmp( s1, "DEK-Info: DES-CBC,", 18 ) == 0 ) - { - enc_alg = POLARSSL_CIPHER_DES_CBC; - - s1 += 18; - if( pem_get_iv( s1, pem_iv, 8) != 0 ) - return( POLARSSL_ERR_PEM_INVALID_ENC_IV ); - - s1 += 16; - } -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_AES_C) - if( memcmp( s1, "DEK-Info: AES-", 14 ) == 0 ) - { - if( memcmp( s1, "DEK-Info: AES-128-CBC,", 22 ) == 0 ) - enc_alg = POLARSSL_CIPHER_AES_128_CBC; - else if( memcmp( s1, "DEK-Info: AES-192-CBC,", 22 ) == 0 ) - enc_alg = POLARSSL_CIPHER_AES_192_CBC; - else if( memcmp( s1, "DEK-Info: AES-256-CBC,", 22 ) == 0 ) - enc_alg = POLARSSL_CIPHER_AES_256_CBC; - else - return( POLARSSL_ERR_PEM_UNKNOWN_ENC_ALG ); - - s1 += 22; - if( pem_get_iv( s1, pem_iv, 16 ) != 0 ) - return( POLARSSL_ERR_PEM_INVALID_ENC_IV ); - - s1 += 32; - } -#endif /* POLARSSL_AES_C */ - - if( enc_alg == POLARSSL_CIPHER_NONE ) - return( POLARSSL_ERR_PEM_UNKNOWN_ENC_ALG ); - - if( *s1 == '\r' ) s1++; - if( *s1 == '\n' ) s1++; - else return( POLARSSL_ERR_PEM_INVALID_DATA ); -#else - return( POLARSSL_ERR_PEM_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_MD5_C && POLARSSL_CIPHER_MODE_CBC && - ( POLARSSL_AES_C || POLARSSL_DES_C ) */ - } - - len = 0; - ret = base64_decode( NULL, &len, s1, s2 - s1 ); - - if( ret == POLARSSL_ERR_BASE64_INVALID_CHARACTER ) - return( POLARSSL_ERR_PEM_INVALID_DATA + ret ); - - if( ( buf = (unsigned char *) polarssl_malloc( len ) ) == NULL ) - return( POLARSSL_ERR_PEM_MALLOC_FAILED ); - - if( ( ret = base64_decode( buf, &len, s1, s2 - s1 ) ) != 0 ) - { - polarssl_free( buf ); - return( POLARSSL_ERR_PEM_INVALID_DATA + ret ); - } - - if( enc != 0 ) - { -#if defined(POLARSSL_MD5_C) && defined(POLARSSL_CIPHER_MODE_CBC) && \ - ( defined(POLARSSL_DES_C) || defined(POLARSSL_AES_C) ) - if( pwd == NULL ) - { - polarssl_free( buf ); - return( POLARSSL_ERR_PEM_PASSWORD_REQUIRED ); - } - -#if defined(POLARSSL_DES_C) - if( enc_alg == POLARSSL_CIPHER_DES_EDE3_CBC ) - pem_des3_decrypt( pem_iv, buf, len, pwd, pwdlen ); - else if( enc_alg == POLARSSL_CIPHER_DES_CBC ) - pem_des_decrypt( pem_iv, buf, len, pwd, pwdlen ); -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_AES_C) - if( enc_alg == POLARSSL_CIPHER_AES_128_CBC ) - pem_aes_decrypt( pem_iv, 16, buf, len, pwd, pwdlen ); - else if( enc_alg == POLARSSL_CIPHER_AES_192_CBC ) - pem_aes_decrypt( pem_iv, 24, buf, len, pwd, pwdlen ); - else if( enc_alg == POLARSSL_CIPHER_AES_256_CBC ) - pem_aes_decrypt( pem_iv, 32, buf, len, pwd, pwdlen ); -#endif /* POLARSSL_AES_C */ - - /* - * The result will be ASN.1 starting with a SEQUENCE tag, with 1 to 3 - * length bytes (allow 4 to be sure) in all known use cases. - * - * Use that as heurisitic to try detecting password mismatchs. - */ - if( len <= 2 || buf[0] != 0x30 || buf[1] > 0x83 ) - { - polarssl_free( buf ); - return( POLARSSL_ERR_PEM_PASSWORD_MISMATCH ); - } -#else - polarssl_free( buf ); - return( POLARSSL_ERR_PEM_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_MD5_C && POLARSSL_CIPHER_MODE_CBC && - ( POLARSSL_AES_C || POLARSSL_DES_C ) */ - } - - ctx->buf = buf; - ctx->buflen = len; - - return( 0 ); -} - -void pem_free( pem_context *ctx ) -{ - polarssl_free( ctx->buf ); - polarssl_free( ctx->info ); - - polarssl_zeroize( ctx, sizeof( pem_context ) ); -} -#endif /* POLARSSL_PEM_PARSE_C */ - -#if defined(POLARSSL_PEM_WRITE_C) -int pem_write_buffer( const char *header, const char *footer, - const unsigned char *der_data, size_t der_len, - unsigned char *buf, size_t buf_len, size_t *olen ) -{ - int ret; - unsigned char *encode_buf, *c, *p = buf; - size_t len = 0, use_len = 0, add_len = 0; - - base64_encode( NULL, &use_len, der_data, der_len ); - add_len = strlen( header ) + strlen( footer ) + ( use_len / 64 ) + 1; - - if( use_len + add_len > buf_len ) - { - *olen = use_len + add_len; - return( POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL ); - } - - if( ( encode_buf = polarssl_malloc( use_len ) ) == NULL ) - return( POLARSSL_ERR_PEM_MALLOC_FAILED ); - - if( ( ret = base64_encode( encode_buf, &use_len, der_data, - der_len ) ) != 0 ) - { - polarssl_free( encode_buf ); - return( ret ); - } - - memcpy( p, header, strlen( header ) ); - p += strlen( header ); - c = encode_buf; - - while( use_len ) - { - len = ( use_len > 64 ) ? 64 : use_len; - memcpy( p, c, len ); - use_len -= len; - p += len; - c += len; - *p++ = '\n'; - } - - memcpy( p, footer, strlen( footer ) ); - p += strlen( footer ); - - *p++ = '\0'; - *olen = p - buf; - - polarssl_free( encode_buf ); - return( 0 ); -} -#endif /* POLARSSL_PEM_WRITE_C */ -#endif /* POLARSSL_PEM_PARSE_C || POLARSSL_PEM_WRITE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pk.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pk.c deleted file mode 100644 index 11faf3c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pk.c +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Public Key abstraction layer - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PK_C) - -#include "polarssl/pk.h" -#include "polarssl/pk_wrap.h" - -#if defined(POLARSSL_RSA_C) -#include "polarssl/rsa.h" -#endif -#if defined(POLARSSL_ECP_C) -#include "polarssl/ecp.h" -#endif -#if defined(POLARSSL_ECDSA_C) -#include "polarssl/ecdsa.h" -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * Initialise a pk_context - */ -void pk_init( pk_context *ctx ) -{ - if( ctx == NULL ) - return; - - ctx->pk_info = NULL; - ctx->pk_ctx = NULL; -} - -/* - * Free (the components of) a pk_context - */ -void pk_free( pk_context *ctx ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return; - - ctx->pk_info->ctx_free_func( ctx->pk_ctx ); - - polarssl_zeroize( ctx, sizeof( pk_context ) ); -} - -/* - * Get pk_info structure from type - */ -const pk_info_t * pk_info_from_type( pk_type_t pk_type ) -{ - switch( pk_type ) { -#if defined(POLARSSL_RSA_C) - case POLARSSL_PK_RSA: - return( &rsa_info ); -#endif -#if defined(POLARSSL_ECP_C) - case POLARSSL_PK_ECKEY: - return( &eckey_info ); - case POLARSSL_PK_ECKEY_DH: - return( &eckeydh_info ); -#endif -#if defined(POLARSSL_ECDSA_C) - case POLARSSL_PK_ECDSA: - return( &ecdsa_info ); -#endif - /* POLARSSL_PK_RSA_ALT omitted on purpose */ - default: - return( NULL ); - } -} - -/* - * Initialise context - */ -int pk_init_ctx( pk_context *ctx, const pk_info_t *info ) -{ - if( ctx == NULL || info == NULL || ctx->pk_info != NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ( ctx->pk_ctx = info->ctx_alloc_func() ) == NULL ) - return( POLARSSL_ERR_PK_MALLOC_FAILED ); - - ctx->pk_info = info; - - return( 0 ); -} - -/* - * Initialize an RSA-alt context - */ -int pk_init_ctx_rsa_alt( pk_context *ctx, void * key, - pk_rsa_alt_decrypt_func decrypt_func, - pk_rsa_alt_sign_func sign_func, - pk_rsa_alt_key_len_func key_len_func ) -{ - rsa_alt_context *rsa_alt; - const pk_info_t *info = &rsa_alt_info; - - if( ctx == NULL || ctx->pk_info != NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ( ctx->pk_ctx = info->ctx_alloc_func() ) == NULL ) - return( POLARSSL_ERR_PK_MALLOC_FAILED ); - - ctx->pk_info = info; - - rsa_alt = (rsa_alt_context *) ctx->pk_ctx; - - rsa_alt->key = key; - rsa_alt->decrypt_func = decrypt_func; - rsa_alt->sign_func = sign_func; - rsa_alt->key_len_func = key_len_func; - - return( 0 ); -} - -/* - * Tell if a PK can do the operations of the given type - */ -int pk_can_do( pk_context *ctx, pk_type_t type ) -{ - /* null or NONE context can't do anything */ - if( ctx == NULL || ctx->pk_info == NULL ) - return( 0 ); - - return( ctx->pk_info->can_do( type ) ); -} - -/* - * Helper for pk_sign and pk_verify - */ -static inline int pk_hashlen_helper( md_type_t md_alg, size_t *hash_len ) -{ - const md_info_t *md_info; - - if( *hash_len != 0 ) - return( 0 ); - - if( ( md_info = md_info_from_type( md_alg ) ) == NULL ) - return( -1 ); - - *hash_len = md_info->size; - return( 0 ); -} - -/* - * Verify a signature - */ -int pk_verify( pk_context *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) -{ - if( ctx == NULL || ctx->pk_info == NULL || - pk_hashlen_helper( md_alg, &hash_len ) != 0 ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ctx->pk_info->verify_func == NULL ) - return( POLARSSL_ERR_PK_TYPE_MISMATCH ); - - return( ctx->pk_info->verify_func( ctx->pk_ctx, md_alg, hash, hash_len, - sig, sig_len ) ); -} - -/* - * Verify a signature with options - */ -int pk_verify_ext( pk_type_t type, const void *options, - pk_context *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ! pk_can_do( ctx, type ) ) - return( POLARSSL_ERR_PK_TYPE_MISMATCH ); - - if( type == POLARSSL_PK_RSASSA_PSS ) - { -#if defined(POLARSSL_RSA_C) && defined(POLARSSL_PKCS1_V21) - int ret; - const pk_rsassa_pss_options *pss_opts; - - if( options == NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - pss_opts = (const pk_rsassa_pss_options *) options; - - if( sig_len < pk_get_len( ctx ) ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - ret = rsa_rsassa_pss_verify_ext( pk_rsa( *ctx ), - NULL, NULL, RSA_PUBLIC, - md_alg, hash_len, hash, - pss_opts->mgf1_hash_id, - pss_opts->expected_salt_len, - sig ); - if( ret != 0 ) - return( ret ); - - if( sig_len > pk_get_len( ctx ) ) - return( POLARSSL_ERR_PK_SIG_LEN_MISMATCH ); - - return( 0 ); -#else - return( POLARSSL_ERR_PK_FEATURE_UNAVAILABLE ); -#endif - } - - /* General case: no options */ - if( options != NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - return( pk_verify( ctx, md_alg, hash, hash_len, sig, sig_len ) ); -} - -/* - * Make a signature - */ -int pk_sign( pk_context *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - if( ctx == NULL || ctx->pk_info == NULL || - pk_hashlen_helper( md_alg, &hash_len ) != 0 ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ctx->pk_info->sign_func == NULL ) - return( POLARSSL_ERR_PK_TYPE_MISMATCH ); - - return( ctx->pk_info->sign_func( ctx->pk_ctx, md_alg, hash, hash_len, - sig, sig_len, f_rng, p_rng ) ); -} - -/* - * Decrypt message - */ -int pk_decrypt( pk_context *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ctx->pk_info->decrypt_func == NULL ) - return( POLARSSL_ERR_PK_TYPE_MISMATCH ); - - return( ctx->pk_info->decrypt_func( ctx->pk_ctx, input, ilen, - output, olen, osize, f_rng, p_rng ) ); -} - -/* - * Encrypt message - */ -int pk_encrypt( pk_context *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ctx->pk_info->encrypt_func == NULL ) - return( POLARSSL_ERR_PK_TYPE_MISMATCH ); - - return( ctx->pk_info->encrypt_func( ctx->pk_ctx, input, ilen, - output, olen, osize, f_rng, p_rng ) ); -} - -/* - * Get key size in bits - */ -size_t pk_get_size( const pk_context *ctx ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return( 0 ); - - return( ctx->pk_info->get_size( ctx->pk_ctx ) ); -} - -/* - * Export debug information - */ -int pk_debug( const pk_context *ctx, pk_debug_item *items ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ctx->pk_info->debug_func == NULL ) - return( POLARSSL_ERR_PK_TYPE_MISMATCH ); - - ctx->pk_info->debug_func( ctx->pk_ctx, items ); - return( 0 ); -} - -/* - * Access the PK type name - */ -const char * pk_get_name( const pk_context *ctx ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return( "invalid PK" ); - - return( ctx->pk_info->name ); -} - -/* - * Access the PK type - */ -pk_type_t pk_get_type( const pk_context *ctx ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return( POLARSSL_PK_NONE ); - - return( ctx->pk_info->type ); -} - -#endif /* POLARSSL_PK_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pk_wrap.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pk_wrap.c deleted file mode 100644 index 5e9ff60..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pk_wrap.c +++ /dev/null @@ -1,452 +0,0 @@ -/* - * Public Key abstraction layer: wrapper functions - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PK_C) - -#include "polarssl/pk_wrap.h" - -/* Even if RSA not activated, for the sake of RSA-alt */ -#include "polarssl/rsa.h" - -#if defined(POLARSSL_ECP_C) -#include "polarssl/ecp.h" -#endif - -#if defined(POLARSSL_ECDSA_C) -#include "polarssl/ecdsa.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#include -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if defined(POLARSSL_RSA_C) -static int rsa_can_do( pk_type_t type ) -{ - return( type == POLARSSL_PK_RSA || - type == POLARSSL_PK_RSASSA_PSS ); -} - -static size_t rsa_get_size( const void *ctx ) -{ - return( 8 * ((const rsa_context *) ctx)->len ); -} - -static int rsa_verify_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) -{ - int ret; - - if( sig_len < ((rsa_context *) ctx)->len ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( ( ret = rsa_pkcs1_verify( (rsa_context *) ctx, NULL, NULL, - RSA_PUBLIC, md_alg, - (unsigned int) hash_len, hash, sig ) ) != 0 ) - return( ret ); - - if( sig_len > ((rsa_context *) ctx)->len ) - return( POLARSSL_ERR_PK_SIG_LEN_MISMATCH ); - - return( 0 ); -} - -static int rsa_sign_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - *sig_len = ((rsa_context *) ctx)->len; - - return( rsa_pkcs1_sign( (rsa_context *) ctx, f_rng, p_rng, RSA_PRIVATE, - md_alg, (unsigned int) hash_len, hash, sig ) ); -} - -static int rsa_decrypt_wrap( void *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - if( ilen != ((rsa_context *) ctx)->len ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - return( rsa_pkcs1_decrypt( (rsa_context *) ctx, f_rng, p_rng, - RSA_PRIVATE, olen, input, output, osize ) ); -} - -static int rsa_encrypt_wrap( void *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - ((void) osize); - - *olen = ((rsa_context *) ctx)->len; - - return( rsa_pkcs1_encrypt( (rsa_context *) ctx, - f_rng, p_rng, RSA_PUBLIC, ilen, input, output ) ); -} - -static void *rsa_alloc_wrap( void ) -{ - void *ctx = polarssl_malloc( sizeof( rsa_context ) ); - - if( ctx != NULL ) - rsa_init( (rsa_context *) ctx, 0, 0 ); - - return( ctx ); -} - -static void rsa_free_wrap( void *ctx ) -{ - rsa_free( (rsa_context *) ctx ); - polarssl_free( ctx ); -} - -static void rsa_debug( const void *ctx, pk_debug_item *items ) -{ - items->type = POLARSSL_PK_DEBUG_MPI; - items->name = "rsa.N"; - items->value = &( ((rsa_context *) ctx)->N ); - - items++; - - items->type = POLARSSL_PK_DEBUG_MPI; - items->name = "rsa.E"; - items->value = &( ((rsa_context *) ctx)->E ); -} - -const pk_info_t rsa_info = { - POLARSSL_PK_RSA, - "RSA", - rsa_get_size, - rsa_can_do, - rsa_verify_wrap, - rsa_sign_wrap, - rsa_decrypt_wrap, - rsa_encrypt_wrap, - rsa_alloc_wrap, - rsa_free_wrap, - rsa_debug, -}; -#endif /* POLARSSL_RSA_C */ - -#if defined(POLARSSL_ECP_C) -/* - * Generic EC key - */ -static int eckey_can_do( pk_type_t type ) -{ - return( type == POLARSSL_PK_ECKEY || - type == POLARSSL_PK_ECKEY_DH || - type == POLARSSL_PK_ECDSA ); -} - -static size_t eckey_get_size( const void *ctx ) -{ - return( ((ecp_keypair *) ctx)->grp.pbits ); -} - -#if defined(POLARSSL_ECDSA_C) -/* Forward declarations */ -static int ecdsa_verify_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ); - -static int ecdsa_sign_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); - -static int eckey_verify_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) -{ - int ret; - ecdsa_context ecdsa; - - ecdsa_init( &ecdsa ); - - if( ( ret = ecdsa_from_keypair( &ecdsa, ctx ) ) == 0 ) - ret = ecdsa_verify_wrap( &ecdsa, md_alg, hash, hash_len, sig, sig_len ); - - ecdsa_free( &ecdsa ); - - return( ret ); -} - -static int eckey_sign_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret; - ecdsa_context ecdsa; - - ecdsa_init( &ecdsa ); - - if( ( ret = ecdsa_from_keypair( &ecdsa, ctx ) ) == 0 ) - ret = ecdsa_sign_wrap( &ecdsa, md_alg, hash, hash_len, sig, sig_len, - f_rng, p_rng ); - - ecdsa_free( &ecdsa ); - - return( ret ); -} - -#endif /* POLARSSL_ECDSA_C */ - -static void *eckey_alloc_wrap( void ) -{ - void *ctx = polarssl_malloc( sizeof( ecp_keypair ) ); - - if( ctx != NULL ) - ecp_keypair_init( ctx ); - - return( ctx ); -} - -static void eckey_free_wrap( void *ctx ) -{ - ecp_keypair_free( (ecp_keypair *) ctx ); - polarssl_free( ctx ); -} - -static void eckey_debug( const void *ctx, pk_debug_item *items ) -{ - items->type = POLARSSL_PK_DEBUG_ECP; - items->name = "eckey.Q"; - items->value = &( ((ecp_keypair *) ctx)->Q ); -} - -const pk_info_t eckey_info = { - POLARSSL_PK_ECKEY, - "EC", - eckey_get_size, - eckey_can_do, -#if defined(POLARSSL_ECDSA_C) - eckey_verify_wrap, - eckey_sign_wrap, -#else - NULL, - NULL, -#endif - NULL, - NULL, - eckey_alloc_wrap, - eckey_free_wrap, - eckey_debug, -}; - -/* - * EC key restricted to ECDH - */ -static int eckeydh_can_do( pk_type_t type ) -{ - return( type == POLARSSL_PK_ECKEY || - type == POLARSSL_PK_ECKEY_DH ); -} - -const pk_info_t eckeydh_info = { - POLARSSL_PK_ECKEY_DH, - "EC_DH", - eckey_get_size, /* Same underlying key structure */ - eckeydh_can_do, - NULL, - NULL, - NULL, - NULL, - eckey_alloc_wrap, /* Same underlying key structure */ - eckey_free_wrap, /* Same underlying key structure */ - eckey_debug, /* Same underlying key structure */ -}; -#endif /* POLARSSL_ECP_C */ - -#if defined(POLARSSL_ECDSA_C) -static int ecdsa_can_do( pk_type_t type ) -{ - return( type == POLARSSL_PK_ECDSA ); -} - -static int ecdsa_verify_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) -{ - int ret; - ((void) md_alg); - - ret = ecdsa_read_signature( (ecdsa_context *) ctx, - hash, hash_len, sig, sig_len ); - - if( ret == POLARSSL_ERR_ECP_SIG_LEN_MISMATCH ) - return( POLARSSL_ERR_PK_SIG_LEN_MISMATCH ); - - return( ret ); -} - -static int ecdsa_sign_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - /* Use deterministic ECDSA by default if available */ -#if defined(POLARSSL_ECDSA_DETERMINISTIC) - ((void) f_rng); - ((void) p_rng); - - return( ecdsa_write_signature_det( (ecdsa_context *) ctx, - hash, hash_len, sig, sig_len, md_alg ) ); -#else - ((void) md_alg); - - return( ecdsa_write_signature( (ecdsa_context *) ctx, - hash, hash_len, sig, sig_len, f_rng, p_rng ) ); -#endif /* POLARSSL_ECDSA_DETERMINISTIC */ -} - -static void *ecdsa_alloc_wrap( void ) -{ - void *ctx = polarssl_malloc( sizeof( ecdsa_context ) ); - - if( ctx != NULL ) - ecdsa_init( (ecdsa_context *) ctx ); - - return( ctx ); -} - -static void ecdsa_free_wrap( void *ctx ) -{ - ecdsa_free( (ecdsa_context *) ctx ); - polarssl_free( ctx ); -} - -const pk_info_t ecdsa_info = { - POLARSSL_PK_ECDSA, - "ECDSA", - eckey_get_size, /* Compatible key structures */ - ecdsa_can_do, - ecdsa_verify_wrap, - ecdsa_sign_wrap, - NULL, - NULL, - ecdsa_alloc_wrap, - ecdsa_free_wrap, - eckey_debug, /* Compatible key structures */ -}; -#endif /* POLARSSL_ECDSA_C */ - -/* - * Support for alternative RSA-private implementations - */ - -static int rsa_alt_can_do( pk_type_t type ) -{ - return( type == POLARSSL_PK_RSA ); -} - -static size_t rsa_alt_get_size( const void *ctx ) -{ - const rsa_alt_context *rsa_alt = (const rsa_alt_context *) ctx; - - return( 8 * rsa_alt->key_len_func( rsa_alt->key ) ); -} - -static int rsa_alt_sign_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - rsa_alt_context *rsa_alt = (rsa_alt_context *) ctx; - - *sig_len = rsa_alt->key_len_func( rsa_alt->key ); - - return( rsa_alt->sign_func( rsa_alt->key, f_rng, p_rng, RSA_PRIVATE, - md_alg, (unsigned int) hash_len, hash, sig ) ); -} - -static int rsa_alt_decrypt_wrap( void *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - rsa_alt_context *rsa_alt = (rsa_alt_context *) ctx; - - ((void) f_rng); - ((void) p_rng); - - if( ilen != rsa_alt->key_len_func( rsa_alt->key ) ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - return( rsa_alt->decrypt_func( rsa_alt->key, - RSA_PRIVATE, olen, input, output, osize ) ); -} - -static void *rsa_alt_alloc_wrap( void ) -{ - void *ctx = polarssl_malloc( sizeof( rsa_alt_context ) ); - - if( ctx != NULL ) - memset( ctx, 0, sizeof( rsa_alt_context ) ); - - return( ctx ); -} - -static void rsa_alt_free_wrap( void *ctx ) -{ - polarssl_zeroize( ctx, sizeof( rsa_alt_context ) ); - polarssl_free( ctx ); -} - -const pk_info_t rsa_alt_info = { - POLARSSL_PK_RSA_ALT, - "RSA-alt", - rsa_alt_get_size, - rsa_alt_can_do, - NULL, - rsa_alt_sign_wrap, - rsa_alt_decrypt_wrap, - NULL, - rsa_alt_alloc_wrap, - rsa_alt_free_wrap, - NULL, -}; - -#endif /* POLARSSL_PK_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkcs11.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkcs11.c deleted file mode 100644 index 64e7ce3..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkcs11.c +++ /dev/null @@ -1,236 +0,0 @@ -/** - * \file pkcs11.c - * - * \brief Wrapper for PKCS#11 library libpkcs11-helper - * - * \author Adriaan de Jong - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "polarssl/pkcs11.h" - -#if defined(POLARSSL_PKCS11_C) -#include "polarssl/md.h" -#include "polarssl/oid.h" -#include "polarssl/x509_crt.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#include -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -int pkcs11_x509_cert_init( x509_crt *cert, pkcs11h_certificate_t pkcs11_cert ) -{ - int ret = 1; - unsigned char *cert_blob = NULL; - size_t cert_blob_size = 0; - - if( cert == NULL ) - { - ret = 2; - goto cleanup; - } - - if( pkcs11h_certificate_getCertificateBlob( pkcs11_cert, NULL, - &cert_blob_size ) != CKR_OK ) - { - ret = 3; - goto cleanup; - } - - cert_blob = polarssl_malloc( cert_blob_size ); - if( NULL == cert_blob ) - { - ret = 4; - goto cleanup; - } - - if( pkcs11h_certificate_getCertificateBlob( pkcs11_cert, cert_blob, - &cert_blob_size ) != CKR_OK ) - { - ret = 5; - goto cleanup; - } - - if( 0 != x509_crt_parse( cert, cert_blob, cert_blob_size ) ) - { - ret = 6; - goto cleanup; - } - - ret = 0; - -cleanup: - if( NULL != cert_blob ) - polarssl_free( cert_blob ); - - return( ret ); -} - - -int pkcs11_priv_key_init( pkcs11_context *priv_key, - pkcs11h_certificate_t pkcs11_cert ) -{ - int ret = 1; - x509_crt cert; - - x509_crt_init( &cert ); - - if( priv_key == NULL ) - goto cleanup; - - if( 0 != pkcs11_x509_cert_init( &cert, pkcs11_cert ) ) - goto cleanup; - - priv_key->len = pk_get_len( &cert.pk ); - priv_key->pkcs11h_cert = pkcs11_cert; - - ret = 0; - -cleanup: - x509_crt_free( &cert ); - - return( ret ); -} - -void pkcs11_priv_key_free( pkcs11_context *priv_key ) -{ - if( NULL != priv_key ) - pkcs11h_certificate_freeCertificate( priv_key->pkcs11h_cert ); -} - -int pkcs11_decrypt( pkcs11_context *ctx, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len ) -{ - size_t input_len, output_len; - - if( NULL == ctx ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - if( RSA_PRIVATE != mode ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - output_len = input_len = ctx->len; - - if( input_len < 16 || input_len > output_max_len ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - /* Determine size of output buffer */ - if( pkcs11h_certificate_decryptAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, input, - input_len, NULL, &output_len ) != CKR_OK ) - { - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - } - - if( output_len > output_max_len ) - return( POLARSSL_ERR_RSA_OUTPUT_TOO_LARGE ); - - if( pkcs11h_certificate_decryptAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, input, - input_len, output, &output_len ) != CKR_OK ) - { - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - } - *olen = output_len; - return( 0 ); -} - -int pkcs11_sign( pkcs11_context *ctx, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) -{ - size_t sig_len = 0, asn_len = 0, oid_size = 0; - unsigned char *p = sig; - const char *oid; - - if( NULL == ctx ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - if( RSA_PRIVATE != mode ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - if( md_alg != POLARSSL_MD_NONE ) - { - const md_info_t *md_info = md_info_from_type( md_alg ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - if( oid_get_oid_by_md( md_alg, &oid, &oid_size ) != 0 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - hashlen = md_get_size( md_info ); - asn_len = 10 + oid_size; - } - - sig_len = ctx->len; - if( hashlen > sig_len || asn_len > sig_len || - hashlen + asn_len > sig_len ) - { - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - } - - if( md_alg != POLARSSL_MD_NONE ) - { - /* - * DigestInfo ::= SEQUENCE { - * digestAlgorithm DigestAlgorithmIdentifier, - * digest Digest } - * - * DigestAlgorithmIdentifier ::= AlgorithmIdentifier - * - * Digest ::= OCTET STRING - */ - *p++ = ASN1_SEQUENCE | ASN1_CONSTRUCTED; - *p++ = (unsigned char) ( 0x08 + oid_size + hashlen ); - *p++ = ASN1_SEQUENCE | ASN1_CONSTRUCTED; - *p++ = (unsigned char) ( 0x04 + oid_size ); - *p++ = ASN1_OID; - *p++ = oid_size & 0xFF; - memcpy( p, oid, oid_size ); - p += oid_size; - *p++ = ASN1_NULL; - *p++ = 0x00; - *p++ = ASN1_OCTET_STRING; - *p++ = hashlen; - } - - memcpy( p, hash, hashlen ); - - if( pkcs11h_certificate_signAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, sig, - asn_len + hashlen, sig, &sig_len ) != CKR_OK ) - { - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - } - - return( 0 ); -} - -#endif /* defined(POLARSSL_PKCS11_C) */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkcs12.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkcs12.c deleted file mode 100644 index 0cf2edf..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkcs12.c +++ /dev/null @@ -1,360 +0,0 @@ -/* - * PKCS#12 Personal Information Exchange Syntax - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The PKCS #12 Personal Information Exchange Syntax Standard v1.1 - * - * http://www.rsa.com/rsalabs/pkcs/files/h11301-wp-pkcs-12v1-1-personal-information-exchange-syntax.pdf - * ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-12/pkcs-12v1-1.asn - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PKCS12_C) - -#include "polarssl/pkcs12.h" -#include "polarssl/asn1.h" -#include "polarssl/cipher.h" - -#if defined(POLARSSL_ARC4_C) -#include "polarssl/arc4.h" -#endif - -#if defined(POLARSSL_DES_C) -#include "polarssl/des.h" -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -static int pkcs12_parse_pbe_params( asn1_buf *params, - asn1_buf *salt, int *iterations ) -{ - int ret; - unsigned char **p = ¶ms->p; - const unsigned char *end = params->p + params->len; - - /* - * pkcs-12PbeParams ::= SEQUENCE { - * salt OCTET STRING, - * iterations INTEGER - * } - * - */ - if( params->tag != ( ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) - return( POLARSSL_ERR_PKCS12_PBE_INVALID_FORMAT + - POLARSSL_ERR_ASN1_UNEXPECTED_TAG ); - - if( ( ret = asn1_get_tag( p, end, &salt->len, ASN1_OCTET_STRING ) ) != 0 ) - return( POLARSSL_ERR_PKCS12_PBE_INVALID_FORMAT + ret ); - - salt->p = *p; - *p += salt->len; - - if( ( ret = asn1_get_int( p, end, iterations ) ) != 0 ) - return( POLARSSL_ERR_PKCS12_PBE_INVALID_FORMAT + ret ); - - if( *p != end ) - return( POLARSSL_ERR_PKCS12_PBE_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -static int pkcs12_pbe_derive_key_iv( asn1_buf *pbe_params, md_type_t md_type, - const unsigned char *pwd, size_t pwdlen, - unsigned char *key, size_t keylen, - unsigned char *iv, size_t ivlen ) -{ - int ret, iterations; - asn1_buf salt; - size_t i; - unsigned char unipwd[258]; - - memset( &salt, 0, sizeof(asn1_buf) ); - memset( &unipwd, 0, sizeof(unipwd) ); - - if( ( ret = pkcs12_parse_pbe_params( pbe_params, &salt, - &iterations ) ) != 0 ) - return( ret ); - - for( i = 0; i < pwdlen; i++ ) - unipwd[i * 2 + 1] = pwd[i]; - - if( ( ret = pkcs12_derivation( key, keylen, unipwd, pwdlen * 2 + 2, - salt.p, salt.len, md_type, - PKCS12_DERIVE_KEY, iterations ) ) != 0 ) - { - return( ret ); - } - - if( iv == NULL || ivlen == 0 ) - return( 0 ); - - if( ( ret = pkcs12_derivation( iv, ivlen, unipwd, pwdlen * 2 + 2, - salt.p, salt.len, md_type, - PKCS12_DERIVE_IV, iterations ) ) != 0 ) - { - return( ret ); - } - return( 0 ); -} - -int pkcs12_pbe_sha1_rc4_128( asn1_buf *pbe_params, int mode, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *data, size_t len, - unsigned char *output ) -{ -#if !defined(POLARSSL_ARC4_C) - ((void) pbe_params); - ((void) mode); - ((void) pwd); - ((void) pwdlen); - ((void) data); - ((void) len); - ((void) output); - return( POLARSSL_ERR_PKCS12_FEATURE_UNAVAILABLE ); -#else - int ret; - unsigned char key[16]; - arc4_context ctx; - ((void) mode); - - arc4_init( &ctx ); - - if( ( ret = pkcs12_pbe_derive_key_iv( pbe_params, POLARSSL_MD_SHA1, - pwd, pwdlen, - key, 16, NULL, 0 ) ) != 0 ) - { - return( ret ); - } - - arc4_setup( &ctx, key, 16 ); - if( ( ret = arc4_crypt( &ctx, len, data, output ) ) != 0 ) - goto exit; - -exit: - polarssl_zeroize( key, sizeof( key ) ); - arc4_free( &ctx ); - - return( ret ); -#endif /* POLARSSL_ARC4_C */ -} - -int pkcs12_pbe( asn1_buf *pbe_params, int mode, - cipher_type_t cipher_type, md_type_t md_type, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *data, size_t len, - unsigned char *output ) -{ - int ret, keylen = 0; - unsigned char key[32]; - unsigned char iv[16]; - const cipher_info_t *cipher_info; - cipher_context_t cipher_ctx; - size_t olen = 0; - - cipher_info = cipher_info_from_type( cipher_type ); - if( cipher_info == NULL ) - return( POLARSSL_ERR_PKCS12_FEATURE_UNAVAILABLE ); - - keylen = cipher_info->key_length / 8; - - if( ( ret = pkcs12_pbe_derive_key_iv( pbe_params, md_type, pwd, pwdlen, - key, keylen, - iv, cipher_info->iv_size ) ) != 0 ) - { - return( ret ); - } - - cipher_init( &cipher_ctx ); - - if( ( ret = cipher_init_ctx( &cipher_ctx, cipher_info ) ) != 0 ) - goto exit; - - if( ( ret = cipher_setkey( &cipher_ctx, key, 8 * keylen, mode ) ) != 0 ) - goto exit; - - if( ( ret = cipher_set_iv( &cipher_ctx, iv, cipher_info->iv_size ) ) != 0 ) - goto exit; - - if( ( ret = cipher_reset( &cipher_ctx ) ) != 0 ) - goto exit; - - if( ( ret = cipher_update( &cipher_ctx, data, len, - output, &olen ) ) != 0 ) - { - goto exit; - } - - if( ( ret = cipher_finish( &cipher_ctx, output + olen, &olen ) ) != 0 ) - ret = POLARSSL_ERR_PKCS12_PASSWORD_MISMATCH; - -exit: - polarssl_zeroize( key, sizeof( key ) ); - polarssl_zeroize( iv, sizeof( iv ) ); - cipher_free( &cipher_ctx ); - - return( ret ); -} - -static void pkcs12_fill_buffer( unsigned char *data, size_t data_len, - const unsigned char *filler, size_t fill_len ) -{ - unsigned char *p = data; - size_t use_len; - - while( data_len > 0 ) - { - use_len = ( data_len > fill_len ) ? fill_len : data_len; - memcpy( p, filler, use_len ); - p += use_len; - data_len -= use_len; - } -} - -int pkcs12_derivation( unsigned char *data, size_t datalen, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *salt, size_t saltlen, - md_type_t md_type, int id, int iterations ) -{ - int ret; - unsigned int j; - - unsigned char diversifier[128]; - unsigned char salt_block[128], pwd_block[128], hash_block[128]; - unsigned char hash_output[POLARSSL_MD_MAX_SIZE]; - unsigned char *p; - unsigned char c; - - size_t hlen, use_len, v, i; - - const md_info_t *md_info; - md_context_t md_ctx; - - // This version only allows max of 64 bytes of password or salt - if( datalen > 128 || pwdlen > 64 || saltlen > 64 ) - return( POLARSSL_ERR_PKCS12_BAD_INPUT_DATA ); - - md_info = md_info_from_type( md_type ); - if( md_info == NULL ) - return( POLARSSL_ERR_PKCS12_FEATURE_UNAVAILABLE ); - - md_init( &md_ctx ); - - if( ( ret = md_init_ctx( &md_ctx, md_info ) ) != 0 ) - return( ret ); - hlen = md_get_size( md_info ); - - if( hlen <= 32 ) - v = 64; - else - v = 128; - - memset( diversifier, (unsigned char) id, v ); - - pkcs12_fill_buffer( salt_block, v, salt, saltlen ); - pkcs12_fill_buffer( pwd_block, v, pwd, pwdlen ); - - p = data; - while( datalen > 0 ) - { - // Calculate hash( diversifier || salt_block || pwd_block ) - if( ( ret = md_starts( &md_ctx ) ) != 0 ) - goto exit; - - if( ( ret = md_update( &md_ctx, diversifier, v ) ) != 0 ) - goto exit; - - if( ( ret = md_update( &md_ctx, salt_block, v ) ) != 0 ) - goto exit; - - if( ( ret = md_update( &md_ctx, pwd_block, v ) ) != 0 ) - goto exit; - - if( ( ret = md_finish( &md_ctx, hash_output ) ) != 0 ) - goto exit; - - // Perform remaining ( iterations - 1 ) recursive hash calculations - for( i = 1; i < (size_t) iterations; i++ ) - { - if( ( ret = md( md_info, hash_output, hlen, hash_output ) ) != 0 ) - goto exit; - } - - use_len = ( datalen > hlen ) ? hlen : datalen; - memcpy( p, hash_output, use_len ); - datalen -= use_len; - p += use_len; - - if( datalen == 0 ) - break; - - // Concatenating copies of hash_output into hash_block (B) - pkcs12_fill_buffer( hash_block, v, hash_output, hlen ); - - // B += 1 - for( i = v; i > 0; i-- ) - if( ++hash_block[i - 1] != 0 ) - break; - - // salt_block += B - c = 0; - for( i = v; i > 0; i-- ) - { - j = salt_block[i - 1] + hash_block[i - 1] + c; - c = (unsigned char) (j >> 8); - salt_block[i - 1] = j & 0xFF; - } - - // pwd_block += B - c = 0; - for( i = v; i > 0; i-- ) - { - j = pwd_block[i - 1] + hash_block[i - 1] + c; - c = (unsigned char) (j >> 8); - pwd_block[i - 1] = j & 0xFF; - } - } - - ret = 0; - -exit: - polarssl_zeroize( salt_block, sizeof( salt_block ) ); - polarssl_zeroize( pwd_block, sizeof( pwd_block ) ); - polarssl_zeroize( hash_block, sizeof( hash_block ) ); - polarssl_zeroize( hash_output, sizeof( hash_output ) ); - - md_free( &md_ctx ); - - return( ret ); -} - -#endif /* POLARSSL_PKCS12_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkcs5.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkcs5.c deleted file mode 100644 index e769783..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkcs5.c +++ /dev/null @@ -1,417 +0,0 @@ -/** - * \file pkcs5.c - * - * \brief PKCS#5 functions - * - * \author Mathias Olsson - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * PKCS#5 includes PBKDF2 and more - * - * http://tools.ietf.org/html/rfc2898 (Specification) - * http://tools.ietf.org/html/rfc6070 (Test vectors) - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PKCS5_C) - -#include "polarssl/pkcs5.h" -#include "polarssl/asn1.h" -#include "polarssl/cipher.h" -#include "polarssl/oid.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -static int pkcs5_parse_pbkdf2_params( const asn1_buf *params, - asn1_buf *salt, int *iterations, - int *keylen, md_type_t *md_type ) -{ - int ret; - asn1_buf prf_alg_oid; - unsigned char *p = params->p; - const unsigned char *end = params->p + params->len; - - if( params->tag != ( ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) - return( POLARSSL_ERR_PKCS5_INVALID_FORMAT + - POLARSSL_ERR_ASN1_UNEXPECTED_TAG ); - /* - * PBKDF2-params ::= SEQUENCE { - * salt OCTET STRING, - * iterationCount INTEGER, - * keyLength INTEGER OPTIONAL - * prf AlgorithmIdentifier DEFAULT algid-hmacWithSHA1 - * } - * - */ - if( ( ret = asn1_get_tag( &p, end, &salt->len, ASN1_OCTET_STRING ) ) != 0 ) - return( POLARSSL_ERR_PKCS5_INVALID_FORMAT + ret ); - - salt->p = p; - p += salt->len; - - if( ( ret = asn1_get_int( &p, end, iterations ) ) != 0 ) - return( POLARSSL_ERR_PKCS5_INVALID_FORMAT + ret ); - - if( p == end ) - return( 0 ); - - if( ( ret = asn1_get_int( &p, end, keylen ) ) != 0 ) - { - if( ret != POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - return( POLARSSL_ERR_PKCS5_INVALID_FORMAT + ret ); - } - - if( p == end ) - return( 0 ); - - if( ( ret = asn1_get_alg_null( &p, end, &prf_alg_oid ) ) != 0 ) - return( POLARSSL_ERR_PKCS5_INVALID_FORMAT + ret ); - - if( !OID_CMP( OID_HMAC_SHA1, &prf_alg_oid ) ) - return( POLARSSL_ERR_PKCS5_FEATURE_UNAVAILABLE ); - - *md_type = POLARSSL_MD_SHA1; - - if( p != end ) - return( POLARSSL_ERR_PKCS5_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -int pkcs5_pbes2( asn1_buf *pbe_params, int mode, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *data, size_t datalen, - unsigned char *output ) -{ - int ret, iterations = 0, keylen = 0; - unsigned char *p, *end; - asn1_buf kdf_alg_oid, enc_scheme_oid, kdf_alg_params, enc_scheme_params; - asn1_buf salt; - md_type_t md_type = POLARSSL_MD_SHA1; - unsigned char key[32], iv[32]; - size_t olen = 0; - const md_info_t *md_info; - const cipher_info_t *cipher_info; - md_context_t md_ctx; - cipher_type_t cipher_alg; - cipher_context_t cipher_ctx; - - p = pbe_params->p; - end = p + pbe_params->len; - - /* - * PBES2-params ::= SEQUENCE { - * keyDerivationFunc AlgorithmIdentifier {{PBES2-KDFs}}, - * encryptionScheme AlgorithmIdentifier {{PBES2-Encs}} - * } - */ - if( pbe_params->tag != ( ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) - return( POLARSSL_ERR_PKCS5_INVALID_FORMAT + - POLARSSL_ERR_ASN1_UNEXPECTED_TAG ); - - if( ( ret = asn1_get_alg( &p, end, &kdf_alg_oid, &kdf_alg_params ) ) != 0 ) - return( POLARSSL_ERR_PKCS5_INVALID_FORMAT + ret ); - - // Only PBKDF2 supported at the moment - // - if( !OID_CMP( OID_PKCS5_PBKDF2, &kdf_alg_oid ) ) - return( POLARSSL_ERR_PKCS5_FEATURE_UNAVAILABLE ); - - if( ( ret = pkcs5_parse_pbkdf2_params( &kdf_alg_params, - &salt, &iterations, &keylen, - &md_type ) ) != 0 ) - { - return( ret ); - } - - md_info = md_info_from_type( md_type ); - if( md_info == NULL ) - return( POLARSSL_ERR_PKCS5_FEATURE_UNAVAILABLE ); - - if( ( ret = asn1_get_alg( &p, end, &enc_scheme_oid, - &enc_scheme_params ) ) != 0 ) - { - return( POLARSSL_ERR_PKCS5_INVALID_FORMAT + ret ); - } - - if( oid_get_cipher_alg( &enc_scheme_oid, &cipher_alg ) != 0 ) - return( POLARSSL_ERR_PKCS5_FEATURE_UNAVAILABLE ); - - cipher_info = cipher_info_from_type( cipher_alg ); - if( cipher_info == NULL ) - return( POLARSSL_ERR_PKCS5_FEATURE_UNAVAILABLE ); - - /* - * The value of keylen from pkcs5_parse_pbkdf2_params() is ignored - * since it is optional and we don't know if it was set or not - */ - keylen = cipher_info->key_length / 8; - - if( enc_scheme_params.tag != ASN1_OCTET_STRING || - enc_scheme_params.len != cipher_info->iv_size ) - { - return( POLARSSL_ERR_PKCS5_INVALID_FORMAT ); - } - - md_init( &md_ctx ); - cipher_init( &cipher_ctx ); - - memcpy( iv, enc_scheme_params.p, enc_scheme_params.len ); - - if( ( ret = md_init_ctx( &md_ctx, md_info ) ) != 0 ) - goto exit; - - if( ( ret = pkcs5_pbkdf2_hmac( &md_ctx, pwd, pwdlen, salt.p, salt.len, - iterations, keylen, key ) ) != 0 ) - { - goto exit; - } - - if( ( ret = cipher_init_ctx( &cipher_ctx, cipher_info ) ) != 0 ) - goto exit; - - if( ( ret = cipher_setkey( &cipher_ctx, key, 8 * keylen, mode ) ) != 0 ) - goto exit; - - if( ( ret = cipher_crypt( &cipher_ctx, iv, enc_scheme_params.len, - data, datalen, output, &olen ) ) != 0 ) - ret = POLARSSL_ERR_PKCS5_PASSWORD_MISMATCH; - -exit: - md_free( &md_ctx ); - cipher_free( &cipher_ctx ); - - return( ret ); -} - -int pkcs5_pbkdf2_hmac( md_context_t *ctx, const unsigned char *password, - size_t plen, const unsigned char *salt, size_t slen, - unsigned int iteration_count, - uint32_t key_length, unsigned char *output ) -{ - int ret, j; - unsigned int i; - unsigned char md1[POLARSSL_MD_MAX_SIZE]; - unsigned char work[POLARSSL_MD_MAX_SIZE]; - unsigned char md_size = md_get_size( ctx->md_info ); - size_t use_len; - unsigned char *out_p = output; - unsigned char counter[4]; - - memset( counter, 0, 4 ); - counter[3] = 1; - - if( iteration_count > 0xFFFFFFFF ) - return( POLARSSL_ERR_PKCS5_BAD_INPUT_DATA ); - - while( key_length ) - { - // U1 ends up in work - // - if( ( ret = md_hmac_starts( ctx, password, plen ) ) != 0 ) - return( ret ); - - if( ( ret = md_hmac_update( ctx, salt, slen ) ) != 0 ) - return( ret ); - - if( ( ret = md_hmac_update( ctx, counter, 4 ) ) != 0 ) - return( ret ); - - if( ( ret = md_hmac_finish( ctx, work ) ) != 0 ) - return( ret ); - - memcpy( md1, work, md_size ); - - for( i = 1; i < iteration_count; i++ ) - { - // U2 ends up in md1 - // - if( ( ret = md_hmac_starts( ctx, password, plen ) ) != 0 ) - return( ret ); - - if( ( ret = md_hmac_update( ctx, md1, md_size ) ) != 0 ) - return( ret ); - - if( ( ret = md_hmac_finish( ctx, md1 ) ) != 0 ) - return( ret ); - - // U1 xor U2 - // - for( j = 0; j < md_size; j++ ) - work[j] ^= md1[j]; - } - - use_len = ( key_length < md_size ) ? key_length : md_size; - memcpy( out_p, work, use_len ); - - key_length -= (uint32_t) use_len; - out_p += use_len; - - for( i = 4; i > 0; i-- ) - if( ++counter[i - 1] != 0 ) - break; - } - - return( 0 ); -} - -#if defined(POLARSSL_SELF_TEST) - -#if !defined(POLARSSL_SHA1_C) -int pkcs5_self_test( int verbose ) -{ - if( verbose != 0 ) - polarssl_printf( " PBKDF2 (SHA1): skipped\n\n" ); - - return( 0 ); -} -#else - -#include - -#define MAX_TESTS 6 - -size_t plen[MAX_TESTS] = - { 8, 8, 8, 8, 24, 9 }; - -unsigned char password[MAX_TESTS][32] = -{ - "password", - "password", - "password", - "password", - "passwordPASSWORDpassword", - "pass\0word", -}; - -size_t slen[MAX_TESTS] = - { 4, 4, 4, 4, 36, 5 }; - -unsigned char salt[MAX_TESTS][40] = -{ - "salt", - "salt", - "salt", - "salt", - "saltSALTsaltSALTsaltSALTsaltSALTsalt", - "sa\0lt", -}; - -uint32_t it_cnt[MAX_TESTS] = - { 1, 2, 4096, 16777216, 4096, 4096 }; - -uint32_t key_len[MAX_TESTS] = - { 20, 20, 20, 20, 25, 16 }; - - -unsigned char result_key[MAX_TESTS][32] = -{ - { 0x0c, 0x60, 0xc8, 0x0f, 0x96, 0x1f, 0x0e, 0x71, - 0xf3, 0xa9, 0xb5, 0x24, 0xaf, 0x60, 0x12, 0x06, - 0x2f, 0xe0, 0x37, 0xa6 }, - { 0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, - 0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0, - 0xd8, 0xde, 0x89, 0x57 }, - { 0x4b, 0x00, 0x79, 0x01, 0xb7, 0x65, 0x48, 0x9a, - 0xbe, 0xad, 0x49, 0xd9, 0x26, 0xf7, 0x21, 0xd0, - 0x65, 0xa4, 0x29, 0xc1 }, - { 0xee, 0xfe, 0x3d, 0x61, 0xcd, 0x4d, 0xa4, 0xe4, - 0xe9, 0x94, 0x5b, 0x3d, 0x6b, 0xa2, 0x15, 0x8c, - 0x26, 0x34, 0xe9, 0x84 }, - { 0x3d, 0x2e, 0xec, 0x4f, 0xe4, 0x1c, 0x84, 0x9b, - 0x80, 0xc8, 0xd8, 0x36, 0x62, 0xc0, 0xe4, 0x4a, - 0x8b, 0x29, 0x1a, 0x96, 0x4c, 0xf2, 0xf0, 0x70, - 0x38 }, - { 0x56, 0xfa, 0x6a, 0xa7, 0x55, 0x48, 0x09, 0x9d, - 0xcc, 0x37, 0xd7, 0xf0, 0x34, 0x25, 0xe0, 0xc3 }, -}; - -int pkcs5_self_test( int verbose ) -{ - md_context_t sha1_ctx; - const md_info_t *info_sha1; - int ret, i; - unsigned char key[64]; - - md_init( &sha1_ctx ); - - info_sha1 = md_info_from_type( POLARSSL_MD_SHA1 ); - if( info_sha1 == NULL ) - { - ret = 1; - goto exit; - } - - if( ( ret = md_init_ctx( &sha1_ctx, info_sha1 ) ) != 0 ) - { - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( " PBKDF2 note: test #3 may be slow!\n" ); - - for( i = 0; i < MAX_TESTS; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " PBKDF2 (SHA1) #%d: ", i ); - - ret = pkcs5_pbkdf2_hmac( &sha1_ctx, password[i], plen[i], salt[i], - slen[i], it_cnt[i], key_len[i], key ); - if( ret != 0 || - memcmp( result_key[i], key, key_len[i] ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - polarssl_printf( "\n" ); - -exit: - md_free( &sha1_ctx ); - - return( 0 ); -} -#endif /* POLARSSL_SHA1_C */ - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_PKCS5_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkparse.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkparse.c deleted file mode 100644 index 29217a2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkparse.c +++ /dev/null @@ -1,1256 +0,0 @@ -/* - * Public Key layer for parsing key files and structures - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PK_PARSE_C) - -#include "polarssl/pk.h" -#include "polarssl/asn1.h" -#include "polarssl/oid.h" - -#if defined(POLARSSL_RSA_C) -#include "polarssl/rsa.h" -#endif -#if defined(POLARSSL_ECP_C) -#include "polarssl/ecp.h" -#endif -#if defined(POLARSSL_ECDSA_C) -#include "polarssl/ecdsa.h" -#endif -#if defined(POLARSSL_PEM_PARSE_C) -#include "polarssl/pem.h" -#endif -#if defined(POLARSSL_PKCS5_C) -#include "polarssl/pkcs5.h" -#endif -#if defined(POLARSSL_PKCS12_C) -#include "polarssl/pkcs12.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#include -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#if defined(POLARSSL_FS_IO) -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * Load all data from a file into a given buffer. - */ -static int load_file( const char *path, unsigned char **buf, size_t *n ) -{ - FILE *f; - long size; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_PK_FILE_IO_ERROR ); - - fseek( f, 0, SEEK_END ); - if( ( size = ftell( f ) ) == -1 ) - { - fclose( f ); - return( POLARSSL_ERR_PK_FILE_IO_ERROR ); - } - fseek( f, 0, SEEK_SET ); - - *n = (size_t) size; - - if( *n + 1 == 0 || - ( *buf = (unsigned char *) polarssl_malloc( *n + 1 ) ) == NULL ) - { - fclose( f ); - return( POLARSSL_ERR_PK_MALLOC_FAILED ); - } - - if( fread( *buf, 1, *n, f ) != *n ) - { - fclose( f ); - polarssl_free( *buf ); - return( POLARSSL_ERR_PK_FILE_IO_ERROR ); - } - - fclose( f ); - - (*buf)[*n] = '\0'; - - return( 0 ); -} - -/* - * Load and parse a private key - */ -int pk_parse_keyfile( pk_context *ctx, - const char *path, const char *pwd ) -{ - int ret; - size_t n; - unsigned char *buf; - - if( ( ret = load_file( path, &buf, &n ) ) != 0 ) - return( ret ); - - if( pwd == NULL ) - ret = pk_parse_key( ctx, buf, n, NULL, 0 ); - else - ret = pk_parse_key( ctx, buf, n, - (const unsigned char *) pwd, strlen( pwd ) ); - - polarssl_zeroize( buf, n + 1 ); - polarssl_free( buf ); - - return( ret ); -} - -/* - * Load and parse a public key - */ -int pk_parse_public_keyfile( pk_context *ctx, const char *path ) -{ - int ret; - size_t n; - unsigned char *buf; - - if( ( ret = load_file( path, &buf, &n ) ) != 0 ) - return( ret ); - - ret = pk_parse_public_key( ctx, buf, n ); - - polarssl_zeroize( buf, n + 1 ); - polarssl_free( buf ); - - return( ret ); -} -#endif /* POLARSSL_FS_IO */ - -#if defined(POLARSSL_ECP_C) -/* Minimally parse an ECParameters buffer to and asn1_buf - * - * ECParameters ::= CHOICE { - * namedCurve OBJECT IDENTIFIER - * specifiedCurve SpecifiedECDomain -- = SEQUENCE { ... } - * -- implicitCurve NULL - * } - */ -static int pk_get_ecparams( unsigned char **p, const unsigned char *end, - asn1_buf *params ) -{ - int ret; - - /* Tag may be either OID or SEQUENCE */ - params->tag = **p; - if( params->tag != ASN1_OID -#if defined(POLARSSL_PK_PARSE_EC_EXTENDED) - && params->tag != ( ASN1_CONSTRUCTED | ASN1_SEQUENCE ) -#endif - ) - { - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + - POLARSSL_ERR_ASN1_UNEXPECTED_TAG ); - } - - if( ( ret = asn1_get_tag( p, end, ¶ms->len, params->tag ) ) != 0 ) - { - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - } - - params->p = *p; - *p += params->len; - - if( *p != end ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -#if defined(POLARSSL_PK_PARSE_EC_EXTENDED) -/* - * Parse a SpecifiedECDomain (SEC 1 C.2) and (mostly) fill the group with it. - * WARNING: the resulting group should only be used with - * pk_group_id_from_specified(), since its base point may not be set correctly - * if it was encoded compressed. - * - * SpecifiedECDomain ::= SEQUENCE { - * version SpecifiedECDomainVersion(ecdpVer1 | ecdpVer2 | ecdpVer3, ...), - * fieldID FieldID {{FieldTypes}}, - * curve Curve, - * base ECPoint, - * order INTEGER, - * cofactor INTEGER OPTIONAL, - * hash HashAlgorithm OPTIONAL, - * ... - * } - * - * We only support prime-field as field type, and ignore hash and cofactor. - */ -static int pk_group_from_specified( const asn1_buf *params, ecp_group *grp ) -{ - int ret; - unsigned char *p = params->p; - const unsigned char * const end = params->p + params->len; - const unsigned char *end_field, *end_curve; - size_t len; - int ver; - - /* SpecifiedECDomainVersion ::= INTEGER { 1, 2, 3 } */ - if( ( ret = asn1_get_int( &p, end, &ver ) ) != 0 ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - - if( ver < 1 || ver > 3 ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT ); - - /* - * FieldID { FIELD-ID:IOSet } ::= SEQUENCE { -- Finite field - * fieldType FIELD-ID.&id({IOSet}), - * parameters FIELD-ID.&Type({IOSet}{@fieldType}) - * } - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( ret ); - - end_field = p + len; - - /* - * FIELD-ID ::= TYPE-IDENTIFIER - * FieldTypes FIELD-ID ::= { - * { Prime-p IDENTIFIED BY prime-field } | - * { Characteristic-two IDENTIFIED BY characteristic-two-field } - * } - * prime-field OBJECT IDENTIFIER ::= { id-fieldType 1 } - */ - if( ( ret = asn1_get_tag( &p, end_field, &len, ASN1_OID ) ) != 0 ) - return( ret ); - - if( len != OID_SIZE( OID_ANSI_X9_62_PRIME_FIELD ) || - memcmp( p, OID_ANSI_X9_62_PRIME_FIELD, len ) != 0 ) - { - return( POLARSSL_ERR_PK_FEATURE_UNAVAILABLE ); - } - - p += len; - - /* Prime-p ::= INTEGER -- Field of size p. */ - if( ( ret = asn1_get_mpi( &p, end_field, &grp->P ) ) != 0 ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - - grp->pbits = mpi_msb( &grp->P ); - - if( p != end_field ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - /* - * Curve ::= SEQUENCE { - * a FieldElement, - * b FieldElement, - * seed BIT STRING OPTIONAL - * -- Shall be present if used in SpecifiedECDomain - * -- with version equal to ecdpVer2 or ecdpVer3 - * } - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( ret ); - - end_curve = p + len; - - /* - * FieldElement ::= OCTET STRING - * containing an integer in the case of a prime field - */ - if( ( ret = asn1_get_tag( &p, end_curve, &len, ASN1_OCTET_STRING ) ) != 0 || - ( ret = mpi_read_binary( &grp->A, p, len ) ) != 0 ) - { - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - } - - p += len; - - if( ( ret = asn1_get_tag( &p, end_curve, &len, ASN1_OCTET_STRING ) ) != 0 || - ( ret = mpi_read_binary( &grp->B, p, len ) ) != 0 ) - { - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - } - - p += len; - - /* Ignore seed BIT STRING OPTIONAL */ - if( ( ret = asn1_get_tag( &p, end_curve, &len, ASN1_BIT_STRING ) ) == 0 ) - p += len; - - if( p != end_curve ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - /* - * ECPoint ::= OCTET STRING - */ - if( ( ret = asn1_get_tag( &p, end, &len, ASN1_OCTET_STRING ) ) != 0 ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - - if( ( ret = ecp_point_read_binary( grp, &grp->G, - ( const unsigned char *) p, len ) ) != 0 ) - { - /* - * If we can't read the point because it's compressed, cheat by - * reading only the X coordinate and the parity bit of Y. - */ - if( ret != POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE || - ( p[0] != 0x02 && p[0] != 0x03 ) || - len != mpi_size( &grp->P ) + 1 || - mpi_read_binary( &grp->G.X, p + 1, len - 1 ) != 0 || - mpi_lset( &grp->G.Y, p[0] - 2 ) != 0 || - mpi_lset( &grp->G.Z, 1 ) != 0 ) - { - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT ); - } - } - - p += len; - - /* - * order INTEGER - */ - if( ( ret = asn1_get_mpi( &p, end, &grp->N ) ) ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - - grp->nbits = mpi_msb( &grp->N ); - - /* - * Allow optional elements by purposefully not enforcing p == end here. - */ - - return( 0 ); -} - -/* - * Find the group id associated with an (almost filled) group as generated by - * pk_group_from_specified(), or return an error if unknown. - */ -static int pk_group_id_from_group( const ecp_group *grp, ecp_group_id *grp_id ) -{ - int ret = 0; - ecp_group ref; - const ecp_group_id *id; - - ecp_group_init( &ref ); - - for( id = ecp_grp_id_list(); *id != POLARSSL_ECP_DP_NONE; id++ ) - { - /* Load the group associated to that id */ - ecp_group_free( &ref ); - MPI_CHK( ecp_use_known_dp( &ref, *id ) ); - - /* Compare to the group we were given, starting with easy tests */ - if( grp->pbits == ref.pbits && grp->nbits == ref.nbits && - mpi_cmp_mpi( &grp->P, &ref.P ) == 0 && - mpi_cmp_mpi( &grp->A, &ref.A ) == 0 && - mpi_cmp_mpi( &grp->B, &ref.B ) == 0 && - mpi_cmp_mpi( &grp->N, &ref.N ) == 0 && - mpi_cmp_mpi( &grp->G.X, &ref.G.X ) == 0 && - mpi_cmp_mpi( &grp->G.Z, &ref.G.Z ) == 0 && - /* For Y we may only know the parity bit, so compare only that */ - mpi_get_bit( &grp->G.Y, 0 ) == mpi_get_bit( &ref.G.Y, 0 ) ) - { - break; - } - - } - -cleanup: - ecp_group_free( &ref ); - - *grp_id = *id; - - if( ret == 0 && *id == POLARSSL_ECP_DP_NONE ) - ret = POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE; - - return( ret ); -} - -/* - * Parse a SpecifiedECDomain (SEC 1 C.2) and find the associated group ID - */ -static int pk_group_id_from_specified( const asn1_buf *params, - ecp_group_id *grp_id ) -{ - int ret; - ecp_group grp; - - ecp_group_init( &grp ); - - if( ( ret = pk_group_from_specified( params, &grp ) ) != 0 ) - goto cleanup; - - ret = pk_group_id_from_group( &grp, grp_id ); - -cleanup: - ecp_group_free( &grp ); - - return( ret ); -} -#endif /* POLARSSL_PK_PARSE_EC_EXTENDED */ - -/* - * Use EC parameters to initialise an EC group - * - * ECParameters ::= CHOICE { - * namedCurve OBJECT IDENTIFIER - * specifiedCurve SpecifiedECDomain -- = SEQUENCE { ... } - * -- implicitCurve NULL - */ -static int pk_use_ecparams( const asn1_buf *params, ecp_group *grp ) -{ - int ret; - ecp_group_id grp_id; - - if( params->tag == ASN1_OID ) - { - if( oid_get_ec_grp( params, &grp_id ) != 0 ) - return( POLARSSL_ERR_PK_UNKNOWN_NAMED_CURVE ); - } - else - { -#if defined(POLARSSL_PK_PARSE_EC_EXTENDED) - if( ( ret = pk_group_id_from_specified( params, &grp_id ) ) != 0 ) - return( ret ); -#else - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT ); -#endif - } - - /* - * grp may already be initilialized; if so, make sure IDs match - */ - if( grp->id != POLARSSL_ECP_DP_NONE && grp->id != grp_id ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT ); - - if( ( ret = ecp_use_known_dp( grp, grp_id ) ) != 0 ) - return( ret ); - - return( 0 ); -} - -/* - * EC public key is an EC point - * - * The caller is responsible for clearing the structure upon failure if - * desired. Take care to pass along the possible ECP_FEATURE_UNAVAILABLE - * return code of ecp_point_read_binary() and leave p in a usable state. - */ -static int pk_get_ecpubkey( unsigned char **p, const unsigned char *end, - ecp_keypair *key ) -{ - int ret; - - if( ( ret = ecp_point_read_binary( &key->grp, &key->Q, - (const unsigned char *) *p, end - *p ) ) == 0 ) - { - ret = ecp_check_pubkey( &key->grp, &key->Q ); - } - - /* - * We know ecp_point_read_binary consumed all bytes or failed - */ - *p = (unsigned char *) end; - - return( ret ); -} -#endif /* POLARSSL_ECP_C */ - -#if defined(POLARSSL_RSA_C) -/* - * RSAPublicKey ::= SEQUENCE { - * modulus INTEGER, -- n - * publicExponent INTEGER -- e - * } - */ -static int pk_get_rsapubkey( unsigned char **p, - const unsigned char *end, - rsa_context *rsa ) -{ - int ret; - size_t len; - - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( POLARSSL_ERR_PK_INVALID_PUBKEY + ret ); - - if( *p + len != end ) - return( POLARSSL_ERR_PK_INVALID_PUBKEY + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - if( ( ret = asn1_get_mpi( p, end, &rsa->N ) ) != 0 || - ( ret = asn1_get_mpi( p, end, &rsa->E ) ) != 0 ) - return( POLARSSL_ERR_PK_INVALID_PUBKEY + ret ); - - if( *p != end ) - return( POLARSSL_ERR_PK_INVALID_PUBKEY + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - if( ( ret = rsa_check_pubkey( rsa ) ) != 0 ) - return( POLARSSL_ERR_PK_INVALID_PUBKEY ); - - rsa->len = mpi_size( &rsa->N ); - - return( 0 ); -} -#endif /* POLARSSL_RSA_C */ - -/* Get a PK algorithm identifier - * - * AlgorithmIdentifier ::= SEQUENCE { - * algorithm OBJECT IDENTIFIER, - * parameters ANY DEFINED BY algorithm OPTIONAL } - */ -static int pk_get_pk_alg( unsigned char **p, - const unsigned char *end, - pk_type_t *pk_alg, asn1_buf *params ) -{ - int ret; - asn1_buf alg_oid; - - memset( params, 0, sizeof(asn1_buf) ); - - if( ( ret = asn1_get_alg( p, end, &alg_oid, params ) ) != 0 ) - return( POLARSSL_ERR_PK_INVALID_ALG + ret ); - - if( oid_get_pk_alg( &alg_oid, pk_alg ) != 0 ) - return( POLARSSL_ERR_PK_UNKNOWN_PK_ALG ); - - /* - * No parameters with RSA (only for EC) - */ - if( *pk_alg == POLARSSL_PK_RSA && - ( ( params->tag != ASN1_NULL && params->tag != 0 ) || - params->len != 0 ) ) - { - return( POLARSSL_ERR_PK_INVALID_ALG ); - } - - return( 0 ); -} - -/* - * SubjectPublicKeyInfo ::= SEQUENCE { - * algorithm AlgorithmIdentifier, - * subjectPublicKey BIT STRING } - */ -int pk_parse_subpubkey( unsigned char **p, const unsigned char *end, - pk_context *pk ) -{ - int ret; - size_t len; - asn1_buf alg_params; - pk_type_t pk_alg = POLARSSL_PK_NONE; - const pk_info_t *pk_info; - - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - } - - end = *p + len; - - if( ( ret = pk_get_pk_alg( p, end, &pk_alg, &alg_params ) ) != 0 ) - return( ret ); - - if( ( ret = asn1_get_bitstring_null( p, end, &len ) ) != 0 ) - return( POLARSSL_ERR_PK_INVALID_PUBKEY + ret ); - - if( *p + len != end ) - return( POLARSSL_ERR_PK_INVALID_PUBKEY + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - if( ( pk_info = pk_info_from_type( pk_alg ) ) == NULL ) - return( POLARSSL_ERR_PK_UNKNOWN_PK_ALG ); - - if( ( ret = pk_init_ctx( pk, pk_info ) ) != 0 ) - return( ret ); - -#if defined(POLARSSL_RSA_C) - if( pk_alg == POLARSSL_PK_RSA ) - { - ret = pk_get_rsapubkey( p, end, pk_rsa( *pk ) ); - } else -#endif /* POLARSSL_RSA_C */ -#if defined(POLARSSL_ECP_C) - if( pk_alg == POLARSSL_PK_ECKEY_DH || pk_alg == POLARSSL_PK_ECKEY ) - { - ret = pk_use_ecparams( &alg_params, &pk_ec( *pk )->grp ); - if( ret == 0 ) - ret = pk_get_ecpubkey( p, end, pk_ec( *pk ) ); - } else -#endif /* POLARSSL_ECP_C */ - ret = POLARSSL_ERR_PK_UNKNOWN_PK_ALG; - - if( ret == 0 && *p != end ) - ret = POLARSSL_ERR_PK_INVALID_PUBKEY - POLARSSL_ERR_ASN1_LENGTH_MISMATCH; - - if( ret != 0 ) - pk_free( pk ); - - return( ret ); -} - -#if defined(POLARSSL_RSA_C) -/* - * Parse a PKCS#1 encoded private RSA key - */ -static int pk_parse_key_pkcs1_der( rsa_context *rsa, - const unsigned char *key, - size_t keylen ) -{ - int ret; - size_t len; - unsigned char *p, *end; - - p = (unsigned char *) key; - end = p + keylen; - - /* - * This function parses the RSAPrivateKey (PKCS#1) - * - * RSAPrivateKey ::= SEQUENCE { - * version Version, - * modulus INTEGER, -- n - * publicExponent INTEGER, -- e - * privateExponent INTEGER, -- d - * prime1 INTEGER, -- p - * prime2 INTEGER, -- q - * exponent1 INTEGER, -- d mod (p-1) - * exponent2 INTEGER, -- d mod (q-1) - * coefficient INTEGER, -- (inverse of q) mod p - * otherPrimeInfos OtherPrimeInfos OPTIONAL - * } - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - } - - end = p + len; - - if( ( ret = asn1_get_int( &p, end, &rsa->ver ) ) != 0 ) - { - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - } - - if( rsa->ver != 0 ) - { - return( POLARSSL_ERR_PK_KEY_INVALID_VERSION ); - } - - if( ( ret = asn1_get_mpi( &p, end, &rsa->N ) ) != 0 || - ( ret = asn1_get_mpi( &p, end, &rsa->E ) ) != 0 || - ( ret = asn1_get_mpi( &p, end, &rsa->D ) ) != 0 || - ( ret = asn1_get_mpi( &p, end, &rsa->P ) ) != 0 || - ( ret = asn1_get_mpi( &p, end, &rsa->Q ) ) != 0 || - ( ret = asn1_get_mpi( &p, end, &rsa->DP ) ) != 0 || - ( ret = asn1_get_mpi( &p, end, &rsa->DQ ) ) != 0 || - ( ret = asn1_get_mpi( &p, end, &rsa->QP ) ) != 0 ) - { - rsa_free( rsa ); - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - } - - rsa->len = mpi_size( &rsa->N ); - - if( p != end ) - { - rsa_free( rsa ); - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - } - - if( ( ret = rsa_check_privkey( rsa ) ) != 0 ) - { - rsa_free( rsa ); - return( ret ); - } - - return( 0 ); -} -#endif /* POLARSSL_RSA_C */ - -#if defined(POLARSSL_ECP_C) -/* - * Parse a SEC1 encoded private EC key - */ -static int pk_parse_key_sec1_der( ecp_keypair *eck, - const unsigned char *key, - size_t keylen ) -{ - int ret; - int version, pubkey_done; - size_t len; - asn1_buf params; - unsigned char *p = (unsigned char *) key; - unsigned char *end = p + keylen; - unsigned char *end2; - - /* - * RFC 5915, or SEC1 Appendix C.4 - * - * ECPrivateKey ::= SEQUENCE { - * version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), - * privateKey OCTET STRING, - * parameters [0] ECParameters {{ NamedCurve }} OPTIONAL, - * publicKey [1] BIT STRING OPTIONAL - * } - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - } - - end = p + len; - - if( ( ret = asn1_get_int( &p, end, &version ) ) != 0 ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - - if( version != 1 ) - return( POLARSSL_ERR_PK_KEY_INVALID_VERSION ); - - if( ( ret = asn1_get_tag( &p, end, &len, ASN1_OCTET_STRING ) ) != 0 ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - - if( ( ret = mpi_read_binary( &eck->d, p, len ) ) != 0 ) - { - ecp_keypair_free( eck ); - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - } - - p += len; - - /* - * Is 'parameters' present? - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONTEXT_SPECIFIC | ASN1_CONSTRUCTED | 0 ) ) == 0 ) - { - if( ( ret = pk_get_ecparams( &p, p + len, ¶ms) ) != 0 || - ( ret = pk_use_ecparams( ¶ms, &eck->grp ) ) != 0 ) - { - ecp_keypair_free( eck ); - return( ret ); - } - } - else if( ret != POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - { - ecp_keypair_free( eck ); - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - } - - /* - * Is 'publickey' present? If not, or if we can't read it (eg because it - * is compressed), create it from the private key. - */ - pubkey_done = 0; - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONTEXT_SPECIFIC | ASN1_CONSTRUCTED | 1 ) ) == 0 ) - { - end2 = p + len; - - if( ( ret = asn1_get_bitstring_null( &p, end2, &len ) ) != 0 ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - - if( p + len != end2 ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - if( ( ret = pk_get_ecpubkey( &p, end2, eck ) ) == 0 ) - pubkey_done = 1; - else - { - /* - * The only acceptable failure mode of pk_get_ecpubkey() above - * is if the point format is not recognized. - */ - if( ret != POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT ); - } - } - else if( ret != POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - { - ecp_keypair_free( eck ); - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - } - - if( ! pubkey_done && - ( ret = ecp_mul( &eck->grp, &eck->Q, &eck->d, &eck->grp.G, - NULL, NULL ) ) != 0 ) - { - ecp_keypair_free( eck ); - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - } - - if( ( ret = ecp_check_privkey( &eck->grp, &eck->d ) ) != 0 ) - { - ecp_keypair_free( eck ); - return( ret ); - } - - return( 0 ); -} -#endif /* POLARSSL_ECP_C */ - -/* - * Parse an unencrypted PKCS#8 encoded private key - */ -static int pk_parse_key_pkcs8_unencrypted_der( - pk_context *pk, - const unsigned char* key, - size_t keylen ) -{ - int ret, version; - size_t len; - asn1_buf params; - unsigned char *p = (unsigned char *) key; - unsigned char *end = p + keylen; - pk_type_t pk_alg = POLARSSL_PK_NONE; - const pk_info_t *pk_info; - - /* - * This function parses the PrivatKeyInfo object (PKCS#8 v1.2 = RFC 5208) - * - * PrivateKeyInfo ::= SEQUENCE { - * version Version, - * privateKeyAlgorithm PrivateKeyAlgorithmIdentifier, - * privateKey PrivateKey, - * attributes [0] IMPLICIT Attributes OPTIONAL } - * - * Version ::= INTEGER - * PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier - * PrivateKey ::= OCTET STRING - * - * The PrivateKey OCTET STRING is a SEC1 ECPrivateKey - */ - - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - } - - end = p + len; - - if( ( ret = asn1_get_int( &p, end, &version ) ) != 0 ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - - if( version != 0 ) - return( POLARSSL_ERR_PK_KEY_INVALID_VERSION + ret ); - - if( ( ret = pk_get_pk_alg( &p, end, &pk_alg, ¶ms ) ) != 0 ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - - if( ( ret = asn1_get_tag( &p, end, &len, ASN1_OCTET_STRING ) ) != 0 ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - - if( len < 1 ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + - POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - if( ( pk_info = pk_info_from_type( pk_alg ) ) == NULL ) - return( POLARSSL_ERR_PK_UNKNOWN_PK_ALG ); - - if( ( ret = pk_init_ctx( pk, pk_info ) ) != 0 ) - return( ret ); - -#if defined(POLARSSL_RSA_C) - if( pk_alg == POLARSSL_PK_RSA ) - { - if( ( ret = pk_parse_key_pkcs1_der( pk_rsa( *pk ), p, len ) ) != 0 ) - { - pk_free( pk ); - return( ret ); - } - } else -#endif /* POLARSSL_RSA_C */ -#if defined(POLARSSL_ECP_C) - if( pk_alg == POLARSSL_PK_ECKEY || pk_alg == POLARSSL_PK_ECKEY_DH ) - { - if( ( ret = pk_use_ecparams( ¶ms, &pk_ec( *pk )->grp ) ) != 0 || - ( ret = pk_parse_key_sec1_der( pk_ec( *pk ), p, len ) ) != 0 ) - { - pk_free( pk ); - return( ret ); - } - } else -#endif /* POLARSSL_ECP_C */ - return( POLARSSL_ERR_PK_UNKNOWN_PK_ALG ); - - return( 0 ); -} - -/* - * Parse an encrypted PKCS#8 encoded private key - */ -static int pk_parse_key_pkcs8_encrypted_der( - pk_context *pk, - const unsigned char *key, size_t keylen, - const unsigned char *pwd, size_t pwdlen ) -{ - int ret, decrypted = 0; - size_t len; - unsigned char buf[2048]; - unsigned char *p, *end; - asn1_buf pbe_alg_oid, pbe_params; -#if defined(POLARSSL_PKCS12_C) - cipher_type_t cipher_alg; - md_type_t md_alg; -#endif - - memset( buf, 0, sizeof( buf ) ); - - p = (unsigned char *) key; - end = p + keylen; - - if( pwdlen == 0 ) - return( POLARSSL_ERR_PK_PASSWORD_REQUIRED ); - - /* - * This function parses the EncryptedPrivatKeyInfo object (PKCS#8) - * - * EncryptedPrivateKeyInfo ::= SEQUENCE { - * encryptionAlgorithm EncryptionAlgorithmIdentifier, - * encryptedData EncryptedData - * } - * - * EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier - * - * EncryptedData ::= OCTET STRING - * - * The EncryptedData OCTET STRING is a PKCS#8 PrivateKeyInfo - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - } - - end = p + len; - - if( ( ret = asn1_get_alg( &p, end, &pbe_alg_oid, &pbe_params ) ) != 0 ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - - if( ( ret = asn1_get_tag( &p, end, &len, ASN1_OCTET_STRING ) ) != 0 ) - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT + ret ); - - if( len > sizeof( buf ) ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - /* - * Decrypt EncryptedData with appropriate PDE - */ -#if defined(POLARSSL_PKCS12_C) - if( oid_get_pkcs12_pbe_alg( &pbe_alg_oid, &md_alg, &cipher_alg ) == 0 ) - { - if( ( ret = pkcs12_pbe( &pbe_params, PKCS12_PBE_DECRYPT, - cipher_alg, md_alg, - pwd, pwdlen, p, len, buf ) ) != 0 ) - { - if( ret == POLARSSL_ERR_PKCS12_PASSWORD_MISMATCH ) - return( POLARSSL_ERR_PK_PASSWORD_MISMATCH ); - - return( ret ); - } - - decrypted = 1; - } - else if( OID_CMP( OID_PKCS12_PBE_SHA1_RC4_128, &pbe_alg_oid ) ) - { - if( ( ret = pkcs12_pbe_sha1_rc4_128( &pbe_params, - PKCS12_PBE_DECRYPT, - pwd, pwdlen, - p, len, buf ) ) != 0 ) - { - return( ret ); - } - - // Best guess for password mismatch when using RC4. If first tag is - // not ASN1_CONSTRUCTED | ASN1_SEQUENCE - // - if( *buf != ( ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) - return( POLARSSL_ERR_PK_PASSWORD_MISMATCH ); - - decrypted = 1; - } - else -#endif /* POLARSSL_PKCS12_C */ -#if defined(POLARSSL_PKCS5_C) - if( OID_CMP( OID_PKCS5_PBES2, &pbe_alg_oid ) ) - { - if( ( ret = pkcs5_pbes2( &pbe_params, PKCS5_DECRYPT, pwd, pwdlen, - p, len, buf ) ) != 0 ) - { - if( ret == POLARSSL_ERR_PKCS5_PASSWORD_MISMATCH ) - return( POLARSSL_ERR_PK_PASSWORD_MISMATCH ); - - return( ret ); - } - - decrypted = 1; - } - else -#endif /* POLARSSL_PKCS5_C */ - { - ((void) pwd); - } - - if( decrypted == 0 ) - return( POLARSSL_ERR_PK_FEATURE_UNAVAILABLE ); - - return( pk_parse_key_pkcs8_unencrypted_der( pk, buf, len ) ); -} - -/* - * Parse a private key - */ -int pk_parse_key( pk_context *pk, - const unsigned char *key, size_t keylen, - const unsigned char *pwd, size_t pwdlen ) -{ - int ret; - const pk_info_t *pk_info; - -#if defined(POLARSSL_PEM_PARSE_C) - size_t len; - pem_context pem; - - pem_init( &pem ); - -#if defined(POLARSSL_RSA_C) - ret = pem_read_buffer( &pem, - "-----BEGIN RSA PRIVATE KEY-----", - "-----END RSA PRIVATE KEY-----", - key, pwd, pwdlen, &len ); - if( ret == 0 ) - { - if( ( pk_info = pk_info_from_type( POLARSSL_PK_RSA ) ) == NULL ) - return( POLARSSL_ERR_PK_UNKNOWN_PK_ALG ); - - if( ( ret = pk_init_ctx( pk, pk_info ) ) != 0 || - ( ret = pk_parse_key_pkcs1_der( pk_rsa( *pk ), - pem.buf, pem.buflen ) ) != 0 ) - { - pk_free( pk ); - } - - pem_free( &pem ); - return( ret ); - } - else if( ret == POLARSSL_ERR_PEM_PASSWORD_MISMATCH ) - return( POLARSSL_ERR_PK_PASSWORD_MISMATCH ); - else if( ret == POLARSSL_ERR_PEM_PASSWORD_REQUIRED ) - return( POLARSSL_ERR_PK_PASSWORD_REQUIRED ); - else if( ret != POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - return( ret ); -#endif /* POLARSSL_RSA_C */ - -#if defined(POLARSSL_ECP_C) - ret = pem_read_buffer( &pem, - "-----BEGIN EC PRIVATE KEY-----", - "-----END EC PRIVATE KEY-----", - key, pwd, pwdlen, &len ); - if( ret == 0 ) - { - if( ( pk_info = pk_info_from_type( POLARSSL_PK_ECKEY ) ) == NULL ) - return( POLARSSL_ERR_PK_UNKNOWN_PK_ALG ); - - if( ( ret = pk_init_ctx( pk, pk_info ) ) != 0 || - ( ret = pk_parse_key_sec1_der( pk_ec( *pk ), - pem.buf, pem.buflen ) ) != 0 ) - { - pk_free( pk ); - } - - pem_free( &pem ); - return( ret ); - } - else if( ret == POLARSSL_ERR_PEM_PASSWORD_MISMATCH ) - return( POLARSSL_ERR_PK_PASSWORD_MISMATCH ); - else if( ret == POLARSSL_ERR_PEM_PASSWORD_REQUIRED ) - return( POLARSSL_ERR_PK_PASSWORD_REQUIRED ); - else if( ret != POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - return( ret ); -#endif /* POLARSSL_ECP_C */ - - ret = pem_read_buffer( &pem, - "-----BEGIN PRIVATE KEY-----", - "-----END PRIVATE KEY-----", - key, NULL, 0, &len ); - if( ret == 0 ) - { - if( ( ret = pk_parse_key_pkcs8_unencrypted_der( pk, - pem.buf, pem.buflen ) ) != 0 ) - { - pk_free( pk ); - } - - pem_free( &pem ); - return( ret ); - } - else if( ret != POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - return( ret ); - - ret = pem_read_buffer( &pem, - "-----BEGIN ENCRYPTED PRIVATE KEY-----", - "-----END ENCRYPTED PRIVATE KEY-----", - key, NULL, 0, &len ); - if( ret == 0 ) - { - if( ( ret = pk_parse_key_pkcs8_encrypted_der( pk, - pem.buf, pem.buflen, - pwd, pwdlen ) ) != 0 ) - { - pk_free( pk ); - } - - pem_free( &pem ); - return( ret ); - } - else if( ret != POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - return( ret ); -#else - ((void) pwd); - ((void) pwdlen); -#endif /* POLARSSL_PEM_PARSE_C */ - - /* - * At this point we only know it's not a PEM formatted key. Could be any - * of the known DER encoded private key formats - * - * We try the different DER format parsers to see if one passes without - * error - */ - if( ( ret = pk_parse_key_pkcs8_encrypted_der( pk, key, keylen, - pwd, pwdlen ) ) == 0 ) - { - return( 0 ); - } - - pk_free( pk ); - - if( ret == POLARSSL_ERR_PK_PASSWORD_MISMATCH ) - { - return( ret ); - } - - if( ( ret = pk_parse_key_pkcs8_unencrypted_der( pk, key, keylen ) ) == 0 ) - return( 0 ); - - pk_free( pk ); - -#if defined(POLARSSL_RSA_C) - if( ( pk_info = pk_info_from_type( POLARSSL_PK_RSA ) ) == NULL ) - return( POLARSSL_ERR_PK_UNKNOWN_PK_ALG ); - - if( ( ret = pk_init_ctx( pk, pk_info ) ) != 0 || - ( ret = pk_parse_key_pkcs1_der( pk_rsa( *pk ), key, keylen ) ) == 0 ) - { - return( 0 ); - } - - pk_free( pk ); -#endif /* POLARSSL_RSA_C */ - -#if defined(POLARSSL_ECP_C) - if( ( pk_info = pk_info_from_type( POLARSSL_PK_ECKEY ) ) == NULL ) - return( POLARSSL_ERR_PK_UNKNOWN_PK_ALG ); - - if( ( ret = pk_init_ctx( pk, pk_info ) ) != 0 || - ( ret = pk_parse_key_sec1_der( pk_ec( *pk ), key, keylen ) ) == 0 ) - { - return( 0 ); - } - - pk_free( pk ); -#endif /* POLARSSL_ECP_C */ - - return( POLARSSL_ERR_PK_KEY_INVALID_FORMAT ); -} - -/* - * Parse a public key - */ -int pk_parse_public_key( pk_context *ctx, - const unsigned char *key, size_t keylen ) -{ - int ret; - unsigned char *p; -#if defined(POLARSSL_PEM_PARSE_C) - size_t len; - pem_context pem; - - pem_init( &pem ); - ret = pem_read_buffer( &pem, - "-----BEGIN PUBLIC KEY-----", - "-----END PUBLIC KEY-----", - key, NULL, 0, &len ); - - if( ret == 0 ) - { - /* - * Was PEM encoded - */ - key = pem.buf; - keylen = pem.buflen; - } - else if( ret != POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - { - pem_free( &pem ); - return( ret ); - } -#endif /* POLARSSL_PEM_PARSE_C */ - p = (unsigned char *) key; - - ret = pk_parse_subpubkey( &p, p + keylen, ctx ); - -#if defined(POLARSSL_PEM_PARSE_C) - pem_free( &pem ); -#endif - - return( ret ); -} - -#endif /* POLARSSL_PK_PARSE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkwrite.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkwrite.c deleted file mode 100644 index 3b0bbdb..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/pkwrite.c +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Public Key layer for writing key files and structures - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PK_WRITE_C) - -#include "polarssl/pk.h" -#include "polarssl/asn1write.h" -#include "polarssl/oid.h" - -#if defined(POLARSSL_RSA_C) -#include "polarssl/rsa.h" -#endif -#if defined(POLARSSL_ECP_C) -#include "polarssl/ecp.h" -#endif -#if defined(POLARSSL_ECDSA_C) -#include "polarssl/ecdsa.h" -#endif -#if defined(POLARSSL_PEM_WRITE_C) -#include "polarssl/pem.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#include -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#if defined(POLARSSL_RSA_C) -/* - * RSAPublicKey ::= SEQUENCE { - * modulus INTEGER, -- n - * publicExponent INTEGER -- e - * } - */ -static int pk_write_rsa_pubkey( unsigned char **p, unsigned char *start, - rsa_context *rsa ) -{ - int ret; - size_t len = 0; - - ASN1_CHK_ADD( len, asn1_write_mpi( p, start, &rsa->E ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( p, start, &rsa->N ) ); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - return( (int) len ); -} -#endif /* POLARSSL_RSA_C */ - -#if defined(POLARSSL_ECP_C) -/* - * EC public key is an EC point - */ -static int pk_write_ec_pubkey( unsigned char **p, unsigned char *start, - ecp_keypair *ec ) -{ - int ret; - size_t len = 0; - unsigned char buf[POLARSSL_ECP_MAX_PT_LEN]; - - if( ( ret = ecp_point_write_binary( &ec->grp, &ec->Q, - POLARSSL_ECP_PF_UNCOMPRESSED, - &len, buf, sizeof( buf ) ) ) != 0 ) - { - return( ret ); - } - - if( *p - start < (int) len ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - *p -= len; - memcpy( *p, buf, len ); - - return( (int) len ); -} - -/* - * ECParameters ::= CHOICE { - * namedCurve OBJECT IDENTIFIER - * } - */ -static int pk_write_ec_param( unsigned char **p, unsigned char *start, - ecp_keypair *ec ) -{ - int ret; - size_t len = 0; - const char *oid; - size_t oid_len; - - if( ( ret = oid_get_oid_by_ec_grp( ec->grp.id, &oid, &oid_len ) ) != 0 ) - return( ret ); - - ASN1_CHK_ADD( len, asn1_write_oid( p, start, oid, oid_len ) ); - - return( (int) len ); -} -#endif /* POLARSSL_ECP_C */ - -int pk_write_pubkey( unsigned char **p, unsigned char *start, - const pk_context *key ) -{ - int ret; - size_t len = 0; - -#if defined(POLARSSL_RSA_C) - if( pk_get_type( key ) == POLARSSL_PK_RSA ) - ASN1_CHK_ADD( len, pk_write_rsa_pubkey( p, start, pk_rsa( *key ) ) ); - else -#endif -#if defined(POLARSSL_ECP_C) - if( pk_get_type( key ) == POLARSSL_PK_ECKEY ) - ASN1_CHK_ADD( len, pk_write_ec_pubkey( p, start, pk_ec( *key ) ) ); - else -#endif - return( POLARSSL_ERR_PK_FEATURE_UNAVAILABLE ); - - return( (int) len ); -} - -int pk_write_pubkey_der( pk_context *key, unsigned char *buf, size_t size ) -{ - int ret; - unsigned char *c; - size_t len = 0, par_len = 0, oid_len; - const char *oid; - - c = buf + size; - - ASN1_CHK_ADD( len, pk_write_pubkey( &c, buf, key ) ); - - if( c - buf < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - /* - * SubjectPublicKeyInfo ::= SEQUENCE { - * algorithm AlgorithmIdentifier, - * subjectPublicKey BIT STRING } - */ - *--c = 0; - len += 1; - - ASN1_CHK_ADD( len, asn1_write_len( &c, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, buf, ASN1_BIT_STRING ) ); - - if( ( ret = oid_get_oid_by_pk_alg( pk_get_type( key ), - &oid, &oid_len ) ) != 0 ) - { - return( ret ); - } - -#if defined(POLARSSL_ECP_C) - if( pk_get_type( key ) == POLARSSL_PK_ECKEY ) - { - ASN1_CHK_ADD( par_len, pk_write_ec_param( &c, buf, pk_ec( *key ) ) ); - } -#endif - - ASN1_CHK_ADD( len, asn1_write_algorithm_identifier( &c, buf, oid, oid_len, - par_len ) ); - - ASN1_CHK_ADD( len, asn1_write_len( &c, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - return( (int) len ); -} - -int pk_write_key_der( pk_context *key, unsigned char *buf, size_t size ) -{ - int ret; - unsigned char *c = buf + size; - size_t len = 0; - -#if defined(POLARSSL_RSA_C) - if( pk_get_type( key ) == POLARSSL_PK_RSA ) - { - rsa_context *rsa = pk_rsa( *key ); - - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->QP ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->DQ ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->DP ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->Q ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->P ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->D ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->E ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->N ) ); - ASN1_CHK_ADD( len, asn1_write_int( &c, buf, 0 ) ); - - ASN1_CHK_ADD( len, asn1_write_len( &c, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - } - else -#endif /* POLARSSL_RSA_C */ -#if defined(POLARSSL_ECP_C) - if( pk_get_type( key ) == POLARSSL_PK_ECKEY ) - { - ecp_keypair *ec = pk_ec( *key ); - size_t pub_len = 0, par_len = 0; - - /* - * RFC 5915, or SEC1 Appendix C.4 - * - * ECPrivateKey ::= SEQUENCE { - * version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), - * privateKey OCTET STRING, - * parameters [0] ECParameters {{ NamedCurve }} OPTIONAL, - * publicKey [1] BIT STRING OPTIONAL - * } - */ - - /* publicKey */ - ASN1_CHK_ADD( pub_len, pk_write_ec_pubkey( &c, buf, ec ) ); - - if( c - buf < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - *--c = 0; - pub_len += 1; - - ASN1_CHK_ADD( pub_len, asn1_write_len( &c, buf, pub_len ) ); - ASN1_CHK_ADD( pub_len, asn1_write_tag( &c, buf, ASN1_BIT_STRING ) ); - - ASN1_CHK_ADD( pub_len, asn1_write_len( &c, buf, pub_len ) ); - ASN1_CHK_ADD( pub_len, asn1_write_tag( &c, buf, - ASN1_CONTEXT_SPECIFIC | ASN1_CONSTRUCTED | 1 ) ); - len += pub_len; - - /* parameters */ - ASN1_CHK_ADD( par_len, pk_write_ec_param( &c, buf, ec ) ); - - ASN1_CHK_ADD( par_len, asn1_write_len( &c, buf, par_len ) ); - ASN1_CHK_ADD( par_len, asn1_write_tag( &c, buf, - ASN1_CONTEXT_SPECIFIC | ASN1_CONSTRUCTED | 0 ) ); - len += par_len; - - /* privateKey: write as MPI then fix tag */ - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &ec->d ) ); - *c = ASN1_OCTET_STRING; - - /* version */ - ASN1_CHK_ADD( len, asn1_write_int( &c, buf, 1 ) ); - - ASN1_CHK_ADD( len, asn1_write_len( &c, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - } - else -#endif /* POLARSSL_ECP_C */ - return( POLARSSL_ERR_PK_FEATURE_UNAVAILABLE ); - - return( (int) len ); -} - -#if defined(POLARSSL_PEM_WRITE_C) - -#define PEM_BEGIN_PUBLIC_KEY "-----BEGIN PUBLIC KEY-----\n" -#define PEM_END_PUBLIC_KEY "-----END PUBLIC KEY-----\n" - -#define PEM_BEGIN_PRIVATE_KEY_RSA "-----BEGIN RSA PRIVATE KEY-----\n" -#define PEM_END_PRIVATE_KEY_RSA "-----END RSA PRIVATE KEY-----\n" -#define PEM_BEGIN_PRIVATE_KEY_EC "-----BEGIN EC PRIVATE KEY-----\n" -#define PEM_END_PRIVATE_KEY_EC "-----END EC PRIVATE KEY-----\n" - -int pk_write_pubkey_pem( pk_context *key, unsigned char *buf, size_t size ) -{ - int ret; - unsigned char output_buf[4096]; - size_t olen = 0; - - if( ( ret = pk_write_pubkey_der( key, output_buf, - sizeof(output_buf) ) ) < 0 ) - { - return( ret ); - } - - if( ( ret = pem_write_buffer( PEM_BEGIN_PUBLIC_KEY, PEM_END_PUBLIC_KEY, - output_buf + sizeof(output_buf) - ret, - ret, buf, size, &olen ) ) != 0 ) - { - return( ret ); - } - - return( 0 ); -} - -int pk_write_key_pem( pk_context *key, unsigned char *buf, size_t size ) -{ - int ret; - unsigned char output_buf[4096]; - const char *begin, *end; - size_t olen = 0; - - if( ( ret = pk_write_key_der( key, output_buf, sizeof(output_buf) ) ) < 0 ) - return( ret ); - -#if defined(POLARSSL_RSA_C) - if( pk_get_type( key ) == POLARSSL_PK_RSA ) - { - begin = PEM_BEGIN_PRIVATE_KEY_RSA; - end = PEM_END_PRIVATE_KEY_RSA; - } - else -#endif -#if defined(POLARSSL_ECP_C) - if( pk_get_type( key ) == POLARSSL_PK_ECKEY ) - { - begin = PEM_BEGIN_PRIVATE_KEY_EC; - end = PEM_END_PRIVATE_KEY_EC; - } - else -#endif - return( POLARSSL_ERR_PK_FEATURE_UNAVAILABLE ); - - if( ( ret = pem_write_buffer( begin, end, - output_buf + sizeof(output_buf) - ret, - ret, buf, size, &olen ) ) != 0 ) - { - return( ret ); - } - - return( 0 ); -} -#endif /* POLARSSL_PEM_WRITE_C */ - -#endif /* POLARSSL_PK_WRITE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/platform.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/platform.c deleted file mode 100644 index d57cbc8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/platform.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Platform abstraction layer - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PLATFORM_C) - -#include "polarssl/platform.h" - -#if defined(POLARSSL_PLATFORM_MEMORY) -#if !defined(POLARSSL_PLATFORM_STD_MALLOC) -static void *platform_malloc_uninit( size_t len ) -{ - ((void) len); - return( NULL ); -} - -#define POLARSSL_PLATFORM_STD_MALLOC platform_malloc_uninit -#endif /* !POLARSSL_PLATFORM_STD_MALLOC */ - -#if !defined(POLARSSL_PLATFORM_STD_FREE) -static void platform_free_uninit( void *ptr ) -{ - ((void) ptr); -} - -#define POLARSSL_PLATFORM_STD_FREE platform_free_uninit -#endif /* !POLARSSL_PLATFORM_STD_FREE */ - -void * (*polarssl_malloc)( size_t ) = POLARSSL_PLATFORM_STD_MALLOC; -void (*polarssl_free)( void * ) = POLARSSL_PLATFORM_STD_FREE; - -int platform_set_malloc_free( void * (*malloc_func)( size_t ), - void (*free_func)( void * ) ) -{ - polarssl_malloc = malloc_func; - polarssl_free = free_func; - return( 0 ); -} -#endif /* POLARSSL_PLATFORM_MEMORY */ - -#if defined(POLARSSL_PLATFORM_PRINTF_ALT) -#if !defined(POLARSSL_PLATFORM_STD_PRINTF) -/* - * Make dummy function to prevent NULL pointer dereferences - */ -static int platform_printf_uninit( const char *format, ... ) -{ - ((void) format); - return( 0 ); -} - -#define POLARSSL_PLATFORM_STD_PRINTF platform_printf_uninit -#endif /* !POLARSSL_PLATFORM_STD_PRINTF */ - -int (*polarssl_printf)( const char *, ... ) = POLARSSL_PLATFORM_STD_PRINTF; - -int platform_set_printf( int (*printf_func)( const char *, ... ) ) -{ - polarssl_printf = printf_func; - return( 0 ); -} -#endif /* POLARSSL_PLATFORM_PRINTF_ALT */ - -#if defined(POLARSSL_PLATFORM_FPRINTF_ALT) -#if !defined(POLARSSL_PLATFORM_STD_FPRINTF) -/* - * Make dummy function to prevent NULL pointer dereferences - */ -static int platform_fprintf_uninit( FILE *stream, const char *format, ... ) -{ - ((void) stream); - ((void) format); - return( 0 ); -} - -#define POLARSSL_PLATFORM_STD_FPRINTF platform_fprintf_uninit -#endif /* !POLARSSL_PLATFORM_STD_FPRINTF */ - -int (*polarssl_fprintf)( FILE *, const char *, ... ) = - POLARSSL_PLATFORM_STD_FPRINTF; - -int platform_set_fprintf( int (*fprintf_func)( FILE *, const char *, ... ) ) -{ - polarssl_fprintf = fprintf_func; - return( 0 ); -} -#endif /* POLARSSL_PLATFORM_FPRINTF_ALT */ - -#endif /* POLARSSL_PLATFORM_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ripemd160.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ripemd160.c deleted file mode 100644 index fcd7760..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ripemd160.c +++ /dev/null @@ -1,653 +0,0 @@ -/* - * RIPE MD-160 implementation - * - * Copyright (C) 2014-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * The RIPEMD-160 algorithm was designed by RIPE in 1996 - * http://homes.esat.kuleuven.be/~bosselae/ripemd160.html - * http://ehash.iaik.tugraz.at/wiki/RIPEMD-160 - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_RIPEMD160_C) - -#include "polarssl/ripemd160.h" - -#if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST) -#include -#endif - -#if defined(POLARSSL_SELF_TEST) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* - * 32-bit integer manipulation macros (little endian) - */ -#ifndef GET_UINT32_LE -#define GET_UINT32_LE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] ) \ - | ( (uint32_t) (b)[(i) + 1] << 8 ) \ - | ( (uint32_t) (b)[(i) + 2] << 16 ) \ - | ( (uint32_t) (b)[(i) + 3] << 24 ); \ -} -#endif - -#ifndef PUT_UINT32_LE -#define PUT_UINT32_LE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) >> 24 ); \ -} -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -void ripemd160_init( ripemd160_context *ctx ) -{ - memset( ctx, 0, sizeof( ripemd160_context ) ); -} - -void ripemd160_free( ripemd160_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( ripemd160_context ) ); -} - -/* - * RIPEMD-160 context setup - */ -void ripemd160_starts( ripemd160_context *ctx ) -{ - ctx->total[0] = 0; - ctx->total[1] = 0; - - ctx->state[0] = 0x67452301; - ctx->state[1] = 0xEFCDAB89; - ctx->state[2] = 0x98BADCFE; - ctx->state[3] = 0x10325476; - ctx->state[4] = 0xC3D2E1F0; -} - -/* - * Process one block - */ -void ripemd160_process( ripemd160_context *ctx, const unsigned char data[64] ) -{ - uint32_t A, B, C, D, E, Ap, Bp, Cp, Dp, Ep, X[16]; - - GET_UINT32_LE( X[ 0], data, 0 ); - GET_UINT32_LE( X[ 1], data, 4 ); - GET_UINT32_LE( X[ 2], data, 8 ); - GET_UINT32_LE( X[ 3], data, 12 ); - GET_UINT32_LE( X[ 4], data, 16 ); - GET_UINT32_LE( X[ 5], data, 20 ); - GET_UINT32_LE( X[ 6], data, 24 ); - GET_UINT32_LE( X[ 7], data, 28 ); - GET_UINT32_LE( X[ 8], data, 32 ); - GET_UINT32_LE( X[ 9], data, 36 ); - GET_UINT32_LE( X[10], data, 40 ); - GET_UINT32_LE( X[11], data, 44 ); - GET_UINT32_LE( X[12], data, 48 ); - GET_UINT32_LE( X[13], data, 52 ); - GET_UINT32_LE( X[14], data, 56 ); - GET_UINT32_LE( X[15], data, 60 ); - - A = Ap = ctx->state[0]; - B = Bp = ctx->state[1]; - C = Cp = ctx->state[2]; - D = Dp = ctx->state[3]; - E = Ep = ctx->state[4]; - -#define F1( x, y, z ) ( x ^ y ^ z ) -#define F2( x, y, z ) ( ( x & y ) | ( ~x & z ) ) -#define F3( x, y, z ) ( ( x | ~y ) ^ z ) -#define F4( x, y, z ) ( ( x & z ) | ( y & ~z ) ) -#define F5( x, y, z ) ( x ^ ( y | ~z ) ) - -#define S( x, n ) ( ( x << n ) | ( x >> (32 - n) ) ) - -#define P( a, b, c, d, e, r, s, f, k ) \ - a += f( b, c, d ) + X[r] + k; \ - a = S( a, s ) + e; \ - c = S( c, 10 ); - -#define P2( a, b, c, d, e, r, s, rp, sp ) \ - P( a, b, c, d, e, r, s, F, K ); \ - P( a ## p, b ## p, c ## p, d ## p, e ## p, rp, sp, Fp, Kp ); - -#define F F1 -#define K 0x00000000 -#define Fp F5 -#define Kp 0x50A28BE6 - P2( A, B, C, D, E, 0, 11, 5, 8 ); - P2( E, A, B, C, D, 1, 14, 14, 9 ); - P2( D, E, A, B, C, 2, 15, 7, 9 ); - P2( C, D, E, A, B, 3, 12, 0, 11 ); - P2( B, C, D, E, A, 4, 5, 9, 13 ); - P2( A, B, C, D, E, 5, 8, 2, 15 ); - P2( E, A, B, C, D, 6, 7, 11, 15 ); - P2( D, E, A, B, C, 7, 9, 4, 5 ); - P2( C, D, E, A, B, 8, 11, 13, 7 ); - P2( B, C, D, E, A, 9, 13, 6, 7 ); - P2( A, B, C, D, E, 10, 14, 15, 8 ); - P2( E, A, B, C, D, 11, 15, 8, 11 ); - P2( D, E, A, B, C, 12, 6, 1, 14 ); - P2( C, D, E, A, B, 13, 7, 10, 14 ); - P2( B, C, D, E, A, 14, 9, 3, 12 ); - P2( A, B, C, D, E, 15, 8, 12, 6 ); -#undef F -#undef K -#undef Fp -#undef Kp - -#define F F2 -#define K 0x5A827999 -#define Fp F4 -#define Kp 0x5C4DD124 - P2( E, A, B, C, D, 7, 7, 6, 9 ); - P2( D, E, A, B, C, 4, 6, 11, 13 ); - P2( C, D, E, A, B, 13, 8, 3, 15 ); - P2( B, C, D, E, A, 1, 13, 7, 7 ); - P2( A, B, C, D, E, 10, 11, 0, 12 ); - P2( E, A, B, C, D, 6, 9, 13, 8 ); - P2( D, E, A, B, C, 15, 7, 5, 9 ); - P2( C, D, E, A, B, 3, 15, 10, 11 ); - P2( B, C, D, E, A, 12, 7, 14, 7 ); - P2( A, B, C, D, E, 0, 12, 15, 7 ); - P2( E, A, B, C, D, 9, 15, 8, 12 ); - P2( D, E, A, B, C, 5, 9, 12, 7 ); - P2( C, D, E, A, B, 2, 11, 4, 6 ); - P2( B, C, D, E, A, 14, 7, 9, 15 ); - P2( A, B, C, D, E, 11, 13, 1, 13 ); - P2( E, A, B, C, D, 8, 12, 2, 11 ); -#undef F -#undef K -#undef Fp -#undef Kp - -#define F F3 -#define K 0x6ED9EBA1 -#define Fp F3 -#define Kp 0x6D703EF3 - P2( D, E, A, B, C, 3, 11, 15, 9 ); - P2( C, D, E, A, B, 10, 13, 5, 7 ); - P2( B, C, D, E, A, 14, 6, 1, 15 ); - P2( A, B, C, D, E, 4, 7, 3, 11 ); - P2( E, A, B, C, D, 9, 14, 7, 8 ); - P2( D, E, A, B, C, 15, 9, 14, 6 ); - P2( C, D, E, A, B, 8, 13, 6, 6 ); - P2( B, C, D, E, A, 1, 15, 9, 14 ); - P2( A, B, C, D, E, 2, 14, 11, 12 ); - P2( E, A, B, C, D, 7, 8, 8, 13 ); - P2( D, E, A, B, C, 0, 13, 12, 5 ); - P2( C, D, E, A, B, 6, 6, 2, 14 ); - P2( B, C, D, E, A, 13, 5, 10, 13 ); - P2( A, B, C, D, E, 11, 12, 0, 13 ); - P2( E, A, B, C, D, 5, 7, 4, 7 ); - P2( D, E, A, B, C, 12, 5, 13, 5 ); -#undef F -#undef K -#undef Fp -#undef Kp - -#define F F4 -#define K 0x8F1BBCDC -#define Fp F2 -#define Kp 0x7A6D76E9 - P2( C, D, E, A, B, 1, 11, 8, 15 ); - P2( B, C, D, E, A, 9, 12, 6, 5 ); - P2( A, B, C, D, E, 11, 14, 4, 8 ); - P2( E, A, B, C, D, 10, 15, 1, 11 ); - P2( D, E, A, B, C, 0, 14, 3, 14 ); - P2( C, D, E, A, B, 8, 15, 11, 14 ); - P2( B, C, D, E, A, 12, 9, 15, 6 ); - P2( A, B, C, D, E, 4, 8, 0, 14 ); - P2( E, A, B, C, D, 13, 9, 5, 6 ); - P2( D, E, A, B, C, 3, 14, 12, 9 ); - P2( C, D, E, A, B, 7, 5, 2, 12 ); - P2( B, C, D, E, A, 15, 6, 13, 9 ); - P2( A, B, C, D, E, 14, 8, 9, 12 ); - P2( E, A, B, C, D, 5, 6, 7, 5 ); - P2( D, E, A, B, C, 6, 5, 10, 15 ); - P2( C, D, E, A, B, 2, 12, 14, 8 ); -#undef F -#undef K -#undef Fp -#undef Kp - -#define F F5 -#define K 0xA953FD4E -#define Fp F1 -#define Kp 0x00000000 - P2( B, C, D, E, A, 4, 9, 12, 8 ); - P2( A, B, C, D, E, 0, 15, 15, 5 ); - P2( E, A, B, C, D, 5, 5, 10, 12 ); - P2( D, E, A, B, C, 9, 11, 4, 9 ); - P2( C, D, E, A, B, 7, 6, 1, 12 ); - P2( B, C, D, E, A, 12, 8, 5, 5 ); - P2( A, B, C, D, E, 2, 13, 8, 14 ); - P2( E, A, B, C, D, 10, 12, 7, 6 ); - P2( D, E, A, B, C, 14, 5, 6, 8 ); - P2( C, D, E, A, B, 1, 12, 2, 13 ); - P2( B, C, D, E, A, 3, 13, 13, 6 ); - P2( A, B, C, D, E, 8, 14, 14, 5 ); - P2( E, A, B, C, D, 11, 11, 0, 15 ); - P2( D, E, A, B, C, 6, 8, 3, 13 ); - P2( C, D, E, A, B, 15, 5, 9, 11 ); - P2( B, C, D, E, A, 13, 6, 11, 11 ); -#undef F -#undef K -#undef Fp -#undef Kp - - C = ctx->state[1] + C + Dp; - ctx->state[1] = ctx->state[2] + D + Ep; - ctx->state[2] = ctx->state[3] + E + Ap; - ctx->state[3] = ctx->state[4] + A + Bp; - ctx->state[4] = ctx->state[0] + B + Cp; - ctx->state[0] = C; -} - -/* - * RIPEMD-160 process buffer - */ -void ripemd160_update( ripemd160_context *ctx, - const unsigned char *input, size_t ilen ) -{ - size_t fill; - uint32_t left; - - if( ilen == 0 ) - return; - - left = ctx->total[0] & 0x3F; - fill = 64 - left; - - ctx->total[0] += (uint32_t) ilen; - ctx->total[0] &= 0xFFFFFFFF; - - if( ctx->total[0] < (uint32_t) ilen ) - ctx->total[1]++; - - if( left && ilen >= fill ) - { - memcpy( (void *) (ctx->buffer + left), input, fill ); - ripemd160_process( ctx, ctx->buffer ); - input += fill; - ilen -= fill; - left = 0; - } - - while( ilen >= 64 ) - { - ripemd160_process( ctx, input ); - input += 64; - ilen -= 64; - } - - if( ilen > 0 ) - { - memcpy( (void *) (ctx->buffer + left), input, ilen ); - } -} - -static const unsigned char ripemd160_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* - * RIPEMD-160 final digest - */ -void ripemd160_finish( ripemd160_context *ctx, unsigned char output[20] ) -{ - uint32_t last, padn; - uint32_t high, low; - unsigned char msglen[8]; - - high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); - low = ( ctx->total[0] << 3 ); - - PUT_UINT32_LE( low, msglen, 0 ); - PUT_UINT32_LE( high, msglen, 4 ); - - last = ctx->total[0] & 0x3F; - padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); - - ripemd160_update( ctx, ripemd160_padding, padn ); - ripemd160_update( ctx, msglen, 8 ); - - PUT_UINT32_LE( ctx->state[0], output, 0 ); - PUT_UINT32_LE( ctx->state[1], output, 4 ); - PUT_UINT32_LE( ctx->state[2], output, 8 ); - PUT_UINT32_LE( ctx->state[3], output, 12 ); - PUT_UINT32_LE( ctx->state[4], output, 16 ); -} - -/* - * output = RIPEMD-160( input buffer ) - */ -void ripemd160( const unsigned char *input, size_t ilen, - unsigned char output[20] ) -{ - ripemd160_context ctx; - - ripemd160_init( &ctx ); - ripemd160_starts( &ctx ); - ripemd160_update( &ctx, input, ilen ); - ripemd160_finish( &ctx, output ); - ripemd160_free( &ctx ); -} - -#if defined(POLARSSL_FS_IO) -/* - * output = RIPEMD-160( file contents ) - */ -int ripemd160_file( const char *path, unsigned char output[20] ) -{ - FILE *f; - size_t n; - ripemd160_context ctx; - unsigned char buf[1024]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_RIPEMD160_FILE_IO_ERROR ); - - ripemd160_init( &ctx ); - ripemd160_starts( &ctx ); - - while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) - ripemd160_update( &ctx, buf, n ); - - ripemd160_finish( &ctx, output ); - ripemd160_free( &ctx ); - - if( ferror( f ) != 0 ) - { - fclose( f ); - return( POLARSSL_ERR_RIPEMD160_FILE_IO_ERROR ); - } - - fclose( f ); - return( 0 ); -} -#endif /* POLARSSL_FS_IO */ - -/* - * RIPEMD-160 HMAC context setup - */ -void ripemd160_hmac_starts( ripemd160_context *ctx, - const unsigned char *key, size_t keylen ) -{ - size_t i; - unsigned char sum[20]; - - if( keylen > 64 ) - { - ripemd160( key, keylen, sum ); - keylen = 20; - key = sum; - } - - memset( ctx->ipad, 0x36, 64 ); - memset( ctx->opad, 0x5C, 64 ); - - for( i = 0; i < keylen; i++ ) - { - ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] ); - ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); - } - - ripemd160_starts( ctx ); - ripemd160_update( ctx, ctx->ipad, 64 ); - - polarssl_zeroize( sum, sizeof( sum ) ); -} - -/* - * RIPEMD-160 HMAC process buffer - */ -void ripemd160_hmac_update( ripemd160_context *ctx, - const unsigned char *input, size_t ilen ) -{ - ripemd160_update( ctx, input, ilen ); -} - -/* - * RIPEMD-160 HMAC final digest - */ -void ripemd160_hmac_finish( ripemd160_context *ctx, unsigned char output[20] ) -{ - unsigned char tmpbuf[20]; - - ripemd160_finish( ctx, tmpbuf ); - ripemd160_starts( ctx ); - ripemd160_update( ctx, ctx->opad, 64 ); - ripemd160_update( ctx, tmpbuf, 20 ); - ripemd160_finish( ctx, output ); - - polarssl_zeroize( tmpbuf, sizeof( tmpbuf ) ); -} - -/* - * RIPEMD-160 HMAC context reset - */ -void ripemd160_hmac_reset( ripemd160_context *ctx ) -{ - ripemd160_starts( ctx ); - ripemd160_update( ctx, ctx->ipad, 64 ); -} - -/* - * output = HMAC-RIPEMD-160( hmac key, input buffer ) - */ -void ripemd160_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[20] ) -{ - ripemd160_context ctx; - - ripemd160_init( &ctx ); - ripemd160_hmac_starts( &ctx, key, keylen ); - ripemd160_hmac_update( &ctx, input, ilen ); - ripemd160_hmac_finish( &ctx, output ); - ripemd160_free( &ctx ); -} - - -#if defined(POLARSSL_SELF_TEST) -/* - * Test vectors from the RIPEMD-160 paper and - * http://homes.esat.kuleuven.be/~bosselae/ripemd160.html#HMAC - */ -#define TESTS 8 -#define KEYS 2 -static const char *ripemd160_test_input[TESTS] = -{ - "", - "a", - "abc", - "message digest", - "abcdefghijklmnopqrstuvwxyz", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", - "1234567890123456789012345678901234567890" - "1234567890123456789012345678901234567890", -}; - -static const unsigned char ripemd160_test_md[TESTS][20] = -{ - { 0x9c, 0x11, 0x85, 0xa5, 0xc5, 0xe9, 0xfc, 0x54, 0x61, 0x28, - 0x08, 0x97, 0x7e, 0xe8, 0xf5, 0x48, 0xb2, 0x25, 0x8d, 0x31 }, - { 0x0b, 0xdc, 0x9d, 0x2d, 0x25, 0x6b, 0x3e, 0xe9, 0xda, 0xae, - 0x34, 0x7b, 0xe6, 0xf4, 0xdc, 0x83, 0x5a, 0x46, 0x7f, 0xfe }, - { 0x8e, 0xb2, 0x08, 0xf7, 0xe0, 0x5d, 0x98, 0x7a, 0x9b, 0x04, - 0x4a, 0x8e, 0x98, 0xc6, 0xb0, 0x87, 0xf1, 0x5a, 0x0b, 0xfc }, - { 0x5d, 0x06, 0x89, 0xef, 0x49, 0xd2, 0xfa, 0xe5, 0x72, 0xb8, - 0x81, 0xb1, 0x23, 0xa8, 0x5f, 0xfa, 0x21, 0x59, 0x5f, 0x36 }, - { 0xf7, 0x1c, 0x27, 0x10, 0x9c, 0x69, 0x2c, 0x1b, 0x56, 0xbb, - 0xdc, 0xeb, 0x5b, 0x9d, 0x28, 0x65, 0xb3, 0x70, 0x8d, 0xbc }, - { 0x12, 0xa0, 0x53, 0x38, 0x4a, 0x9c, 0x0c, 0x88, 0xe4, 0x05, - 0xa0, 0x6c, 0x27, 0xdc, 0xf4, 0x9a, 0xda, 0x62, 0xeb, 0x2b }, - { 0xb0, 0xe2, 0x0b, 0x6e, 0x31, 0x16, 0x64, 0x02, 0x86, 0xed, - 0x3a, 0x87, 0xa5, 0x71, 0x30, 0x79, 0xb2, 0x1f, 0x51, 0x89 }, - { 0x9b, 0x75, 0x2e, 0x45, 0x57, 0x3d, 0x4b, 0x39, 0xf4, 0xdb, - 0xd3, 0x32, 0x3c, 0xab, 0x82, 0xbf, 0x63, 0x32, 0x6b, 0xfb }, -}; - -static const unsigned char ripemd160_test_hmac[KEYS][TESTS][20] = -{ - { - { 0xcf, 0x38, 0x76, 0x77, 0xbf, 0xda, 0x84, 0x83, 0xe6, 0x3b, - 0x57, 0xe0, 0x6c, 0x3b, 0x5e, 0xcd, 0x8b, 0x7f, 0xc0, 0x55 }, - { 0x0d, 0x35, 0x1d, 0x71, 0xb7, 0x8e, 0x36, 0xdb, 0xb7, 0x39, - 0x1c, 0x81, 0x0a, 0x0d, 0x2b, 0x62, 0x40, 0xdd, 0xba, 0xfc }, - { 0xf7, 0xef, 0x28, 0x8c, 0xb1, 0xbb, 0xcc, 0x61, 0x60, 0xd7, - 0x65, 0x07, 0xe0, 0xa3, 0xbb, 0xf7, 0x12, 0xfb, 0x67, 0xd6 }, - { 0xf8, 0x36, 0x62, 0xcc, 0x8d, 0x33, 0x9c, 0x22, 0x7e, 0x60, - 0x0f, 0xcd, 0x63, 0x6c, 0x57, 0xd2, 0x57, 0x1b, 0x1c, 0x34 }, - { 0x84, 0x3d, 0x1c, 0x4e, 0xb8, 0x80, 0xac, 0x8a, 0xc0, 0xc9, - 0xc9, 0x56, 0x96, 0x50, 0x79, 0x57, 0xd0, 0x15, 0x5d, 0xdb }, - { 0x60, 0xf5, 0xef, 0x19, 0x8a, 0x2d, 0xd5, 0x74, 0x55, 0x45, - 0xc1, 0xf0, 0xc4, 0x7a, 0xa3, 0xfb, 0x57, 0x76, 0xf8, 0x81 }, - { 0xe4, 0x9c, 0x13, 0x6a, 0x9e, 0x56, 0x27, 0xe0, 0x68, 0x1b, - 0x80, 0x8a, 0x3b, 0x97, 0xe6, 0xa6, 0xe6, 0x61, 0xae, 0x79 }, - { 0x31, 0xbe, 0x3c, 0xc9, 0x8c, 0xee, 0x37, 0xb7, 0x9b, 0x06, - 0x19, 0xe3, 0xe1, 0xc2, 0xbe, 0x4f, 0x1a, 0xa5, 0x6e, 0x6c }, - }, - { - { 0xfe, 0x69, 0xa6, 0x6c, 0x74, 0x23, 0xee, 0xa9, 0xc8, 0xfa, - 0x2e, 0xff, 0x8d, 0x9d, 0xaf, 0xb4, 0xf1, 0x7a, 0x62, 0xf5 }, - { 0x85, 0x74, 0x3e, 0x89, 0x9b, 0xc8, 0x2d, 0xbf, 0xa3, 0x6f, - 0xaa, 0xa7, 0xa2, 0x5b, 0x7c, 0xfd, 0x37, 0x24, 0x32, 0xcd }, - { 0x6e, 0x4a, 0xfd, 0x50, 0x1f, 0xa6, 0xb4, 0xa1, 0x82, 0x3c, - 0xa3, 0xb1, 0x0b, 0xd9, 0xaa, 0x0b, 0xa9, 0x7b, 0xa1, 0x82 }, - { 0x2e, 0x06, 0x6e, 0x62, 0x4b, 0xad, 0xb7, 0x6a, 0x18, 0x4c, - 0x8f, 0x90, 0xfb, 0xa0, 0x53, 0x33, 0x0e, 0x65, 0x0e, 0x92 }, - { 0x07, 0xe9, 0x42, 0xaa, 0x4e, 0x3c, 0xd7, 0xc0, 0x4d, 0xed, - 0xc1, 0xd4, 0x6e, 0x2e, 0x8c, 0xc4, 0xc7, 0x41, 0xb3, 0xd9 }, - { 0xb6, 0x58, 0x23, 0x18, 0xdd, 0xcf, 0xb6, 0x7a, 0x53, 0xa6, - 0x7d, 0x67, 0x6b, 0x8a, 0xd8, 0x69, 0xad, 0xed, 0x62, 0x9a }, - { 0xf1, 0xbe, 0x3e, 0xe8, 0x77, 0x70, 0x31, 0x40, 0xd3, 0x4f, - 0x97, 0xea, 0x1a, 0xb3, 0xa0, 0x7c, 0x14, 0x13, 0x33, 0xe2 }, - { 0x85, 0xf1, 0x64, 0x70, 0x3e, 0x61, 0xa6, 0x31, 0x31, 0xbe, - 0x7e, 0x45, 0x95, 0x8e, 0x07, 0x94, 0x12, 0x39, 0x04, 0xf9 }, - }, -}; - -static const unsigned char ripemd160_test_key[KEYS][20] = -{ - { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, - 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x01, 0x23, 0x45, 0x67 }, - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, - 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0x00, 0x11, 0x22, 0x33 }, -}; - -/* - * Checkup routine - */ -int ripemd160_self_test( int verbose ) -{ - int i, j; - unsigned char output[20]; - - memset( output, 0, sizeof output ); - - for( i = 0; i < TESTS; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " RIPEMD-160 test #%d: ", i + 1 ); - - ripemd160( (const unsigned char *) ripemd160_test_input[i], - strlen( ripemd160_test_input[i] ), - output ); - - if( memcmp( output, ripemd160_test_md[i], 20 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - for( j = 0; j < KEYS; j++ ) - { - if( verbose != 0 ) - polarssl_printf( " HMAC-RIPEMD-160 test #%d, key #%d: ", - i + 1, j + 1 ); - - ripemd160_hmac( ripemd160_test_key[j], 20, - (const unsigned char *) ripemd160_test_input[i], - strlen( ripemd160_test_input[i] ), - output ); - - if( memcmp( output, ripemd160_test_hmac[j][i], 20 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - } - - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_RIPEMD160_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/Makefile b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/Makefile deleted file mode 100644 index 32d4957..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/Makefile +++ /dev/null @@ -1,73 +0,0 @@ - -include $(MAKE_INCLUDE_GEN) - -.PHONY: all clean - -#*****************************************************************************# -# VARIABLES # -#*****************************************************************************# - - -MODULE_IFLAGS += -I../../include -fno-tree-switch-conversion - -GLOBAL_CFLAGS += -DCONFIG_SSL_ROM - -#*****************************************************************************# -# Object FILE LIST # -#*****************************************************************************# -OBJS = - -ROM_CSRC = aes.o \ - arc4.o \ - asn1parse.o \ - asn1write.o \ - base64.o \ - bignum.o \ - ctr_drbg.o \ - des.o \ - dhm.o \ - ecdh.o \ - ecdsa.o \ - ecp.o \ - ecp_curves.o \ - hmac_drbg.o \ - md.o \ - md_wrap.o \ - md5.o \ - oid.o \ - pem.o \ - pk.o \ - pk_wrap.o \ - pkwrite.o \ - rsa.o \ - sha1.o \ - sha256.o \ - sha512.o \ - ../../../ssl_ram_map/rom/rom_ssl_ram_map.o - -OBJS = $(ROM_CSRC) - -#*****************************************************************************# -# RULES TO GENERATE TARGETS # -#*****************************************************************************# - -# Define the Rules to build the core targets -all: CORE_TARGETS RENAME_ROM_OBJS COPY_ROM_OBJS - - -#*****************************************************************************# -# GENERATE OBJECT FILE -#*****************************************************************************# -CORE_TARGETS: $(OBJS) $(ASM_OBJS) - - -#*****************************************************************************# -# RULES TO CLEAN TARGETS # -#*****************************************************************************# -clean: - $(REMOVE) *.o - $(REMOVE) *.i - $(REMOVE) *.s - $(REMOVE) *.d - --include $(DEPS) diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/aes.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/aes.c deleted file mode 100644 index 12afa76..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/aes.c +++ /dev/null @@ -1,1625 +0,0 @@ -/* - * FIPS-197 compliant AES implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The AES block cipher was designed by Vincent Rijmen and Joan Daemen. - * - * http://csrc.nist.gov/encryption/aes/rijndael/Rijndael.pdf - * http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#ifdef RTL_HW_CRYPTO -#include -#endif - -#if defined(POLARSSL_AES_C) - -#include "polarssl/aes.h" -#if defined(POLARSSL_PADLOCK_C) -#include "polarssl/padlock.h" -#endif -#if defined(POLARSSL_AESNI_C) -#include "polarssl/aesni.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -#if !defined(POLARSSL_AES_ALT) - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#ifdef SUPPORT_HW_SW_CRYPTO - -/* - * 32-bit integer manipulation macros (little endian) - */ -#ifndef GET_UINT32_LE -#define GET_UINT32_LE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] ) \ - | ( (uint32_t) (b)[(i) + 1] << 8 ) \ - | ( (uint32_t) (b)[(i) + 2] << 16 ) \ - | ( (uint32_t) (b)[(i) + 3] << 24 ); \ -} -#endif - -#ifndef PUT_UINT32_LE -#define PUT_UINT32_LE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) >> 24 ); \ -} -#endif - -#if defined(POLARSSL_PADLOCK_C) && \ - ( defined(POLARSSL_HAVE_X86) || defined(PADLOCK_ALIGN16) ) -static int aes_padlock_ace = -1; -#endif - -#if defined(POLARSSL_AES_ROM_TABLES) -/* - * Forward S-box - */ -SSL_ROM_DATA_SECTION -static const unsigned char FSb[256] = -{ - 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, - 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, - 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, - 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, - 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, - 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, - 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, - 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, - 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, - 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, - 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, - 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, - 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, - 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, - 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, - 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, - 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, - 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, - 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, - 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, - 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, - 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, - 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, - 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, - 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, - 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, - 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, - 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, - 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, - 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, - 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, - 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 -}; - -/* - * Forward tables - */ -#define FT \ -\ - V(A5,63,63,C6), V(84,7C,7C,F8), V(99,77,77,EE), V(8D,7B,7B,F6), \ - V(0D,F2,F2,FF), V(BD,6B,6B,D6), V(B1,6F,6F,DE), V(54,C5,C5,91), \ - V(50,30,30,60), V(03,01,01,02), V(A9,67,67,CE), V(7D,2B,2B,56), \ - V(19,FE,FE,E7), V(62,D7,D7,B5), V(E6,AB,AB,4D), V(9A,76,76,EC), \ - V(45,CA,CA,8F), V(9D,82,82,1F), V(40,C9,C9,89), V(87,7D,7D,FA), \ - V(15,FA,FA,EF), V(EB,59,59,B2), V(C9,47,47,8E), V(0B,F0,F0,FB), \ - V(EC,AD,AD,41), V(67,D4,D4,B3), V(FD,A2,A2,5F), V(EA,AF,AF,45), \ - V(BF,9C,9C,23), V(F7,A4,A4,53), V(96,72,72,E4), V(5B,C0,C0,9B), \ - V(C2,B7,B7,75), V(1C,FD,FD,E1), V(AE,93,93,3D), V(6A,26,26,4C), \ - V(5A,36,36,6C), V(41,3F,3F,7E), V(02,F7,F7,F5), V(4F,CC,CC,83), \ - V(5C,34,34,68), V(F4,A5,A5,51), V(34,E5,E5,D1), V(08,F1,F1,F9), \ - V(93,71,71,E2), V(73,D8,D8,AB), V(53,31,31,62), V(3F,15,15,2A), \ - V(0C,04,04,08), V(52,C7,C7,95), V(65,23,23,46), V(5E,C3,C3,9D), \ - V(28,18,18,30), V(A1,96,96,37), V(0F,05,05,0A), V(B5,9A,9A,2F), \ - V(09,07,07,0E), V(36,12,12,24), V(9B,80,80,1B), V(3D,E2,E2,DF), \ - V(26,EB,EB,CD), V(69,27,27,4E), V(CD,B2,B2,7F), V(9F,75,75,EA), \ - V(1B,09,09,12), V(9E,83,83,1D), V(74,2C,2C,58), V(2E,1A,1A,34), \ - V(2D,1B,1B,36), V(B2,6E,6E,DC), V(EE,5A,5A,B4), V(FB,A0,A0,5B), \ - V(F6,52,52,A4), V(4D,3B,3B,76), V(61,D6,D6,B7), V(CE,B3,B3,7D), \ - V(7B,29,29,52), V(3E,E3,E3,DD), V(71,2F,2F,5E), V(97,84,84,13), \ - V(F5,53,53,A6), V(68,D1,D1,B9), V(00,00,00,00), V(2C,ED,ED,C1), \ - V(60,20,20,40), V(1F,FC,FC,E3), V(C8,B1,B1,79), V(ED,5B,5B,B6), \ - V(BE,6A,6A,D4), V(46,CB,CB,8D), V(D9,BE,BE,67), V(4B,39,39,72), \ - V(DE,4A,4A,94), V(D4,4C,4C,98), V(E8,58,58,B0), V(4A,CF,CF,85), \ - V(6B,D0,D0,BB), V(2A,EF,EF,C5), V(E5,AA,AA,4F), V(16,FB,FB,ED), \ - V(C5,43,43,86), V(D7,4D,4D,9A), V(55,33,33,66), V(94,85,85,11), \ - V(CF,45,45,8A), V(10,F9,F9,E9), V(06,02,02,04), V(81,7F,7F,FE), \ - V(F0,50,50,A0), V(44,3C,3C,78), V(BA,9F,9F,25), V(E3,A8,A8,4B), \ - V(F3,51,51,A2), V(FE,A3,A3,5D), V(C0,40,40,80), V(8A,8F,8F,05), \ - V(AD,92,92,3F), V(BC,9D,9D,21), V(48,38,38,70), V(04,F5,F5,F1), \ - V(DF,BC,BC,63), V(C1,B6,B6,77), V(75,DA,DA,AF), V(63,21,21,42), \ - V(30,10,10,20), V(1A,FF,FF,E5), V(0E,F3,F3,FD), V(6D,D2,D2,BF), \ - V(4C,CD,CD,81), V(14,0C,0C,18), V(35,13,13,26), V(2F,EC,EC,C3), \ - V(E1,5F,5F,BE), V(A2,97,97,35), V(CC,44,44,88), V(39,17,17,2E), \ - V(57,C4,C4,93), V(F2,A7,A7,55), V(82,7E,7E,FC), V(47,3D,3D,7A), \ - V(AC,64,64,C8), V(E7,5D,5D,BA), V(2B,19,19,32), V(95,73,73,E6), \ - V(A0,60,60,C0), V(98,81,81,19), V(D1,4F,4F,9E), V(7F,DC,DC,A3), \ - V(66,22,22,44), V(7E,2A,2A,54), V(AB,90,90,3B), V(83,88,88,0B), \ - V(CA,46,46,8C), V(29,EE,EE,C7), V(D3,B8,B8,6B), V(3C,14,14,28), \ - V(79,DE,DE,A7), V(E2,5E,5E,BC), V(1D,0B,0B,16), V(76,DB,DB,AD), \ - V(3B,E0,E0,DB), V(56,32,32,64), V(4E,3A,3A,74), V(1E,0A,0A,14), \ - V(DB,49,49,92), V(0A,06,06,0C), V(6C,24,24,48), V(E4,5C,5C,B8), \ - V(5D,C2,C2,9F), V(6E,D3,D3,BD), V(EF,AC,AC,43), V(A6,62,62,C4), \ - V(A8,91,91,39), V(A4,95,95,31), V(37,E4,E4,D3), V(8B,79,79,F2), \ - V(32,E7,E7,D5), V(43,C8,C8,8B), V(59,37,37,6E), V(B7,6D,6D,DA), \ - V(8C,8D,8D,01), V(64,D5,D5,B1), V(D2,4E,4E,9C), V(E0,A9,A9,49), \ - V(B4,6C,6C,D8), V(FA,56,56,AC), V(07,F4,F4,F3), V(25,EA,EA,CF), \ - V(AF,65,65,CA), V(8E,7A,7A,F4), V(E9,AE,AE,47), V(18,08,08,10), \ - V(D5,BA,BA,6F), V(88,78,78,F0), V(6F,25,25,4A), V(72,2E,2E,5C), \ - V(24,1C,1C,38), V(F1,A6,A6,57), V(C7,B4,B4,73), V(51,C6,C6,97), \ - V(23,E8,E8,CB), V(7C,DD,DD,A1), V(9C,74,74,E8), V(21,1F,1F,3E), \ - V(DD,4B,4B,96), V(DC,BD,BD,61), V(86,8B,8B,0D), V(85,8A,8A,0F), \ - V(90,70,70,E0), V(42,3E,3E,7C), V(C4,B5,B5,71), V(AA,66,66,CC), \ - V(D8,48,48,90), V(05,03,03,06), V(01,F6,F6,F7), V(12,0E,0E,1C), \ - V(A3,61,61,C2), V(5F,35,35,6A), V(F9,57,57,AE), V(D0,B9,B9,69), \ - V(91,86,86,17), V(58,C1,C1,99), V(27,1D,1D,3A), V(B9,9E,9E,27), \ - V(38,E1,E1,D9), V(13,F8,F8,EB), V(B3,98,98,2B), V(33,11,11,22), \ - V(BB,69,69,D2), V(70,D9,D9,A9), V(89,8E,8E,07), V(A7,94,94,33), \ - V(B6,9B,9B,2D), V(22,1E,1E,3C), V(92,87,87,15), V(20,E9,E9,C9), \ - V(49,CE,CE,87), V(FF,55,55,AA), V(78,28,28,50), V(7A,DF,DF,A5), \ - V(8F,8C,8C,03), V(F8,A1,A1,59), V(80,89,89,09), V(17,0D,0D,1A), \ - V(DA,BF,BF,65), V(31,E6,E6,D7), V(C6,42,42,84), V(B8,68,68,D0), \ - V(C3,41,41,82), V(B0,99,99,29), V(77,2D,2D,5A), V(11,0F,0F,1E), \ - V(CB,B0,B0,7B), V(FC,54,54,A8), V(D6,BB,BB,6D), V(3A,16,16,2C) - -#define V(a,b,c,d) 0x##a##b##c##d -SSL_ROM_DATA_SECTION -static const uint32_t FT0[256] = { FT }; -#undef V - -#define V(a,b,c,d) 0x##b##c##d##a -SSL_ROM_DATA_SECTION -static const uint32_t FT1[256] = { FT }; -#undef V - -#define V(a,b,c,d) 0x##c##d##a##b -SSL_ROM_DATA_SECTION -static const uint32_t FT2[256] = { FT }; -#undef V - -#define V(a,b,c,d) 0x##d##a##b##c -SSL_ROM_DATA_SECTION -static const uint32_t FT3[256] = { FT }; -#undef V - -#undef FT - -/* - * Reverse S-box - */ -SSL_ROM_DATA_SECTION -static const unsigned char RSb[256] = -{ - 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, - 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, - 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, - 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, - 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, - 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, - 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, - 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, - 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, - 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, - 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, - 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, - 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, - 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, - 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, - 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, - 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, - 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, - 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, - 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, - 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, - 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, - 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, - 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, - 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, - 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, - 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, - 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, - 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, - 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, - 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, - 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D -}; - -/* - * Reverse tables - */ -#define RT \ -\ - V(50,A7,F4,51), V(53,65,41,7E), V(C3,A4,17,1A), V(96,5E,27,3A), \ - V(CB,6B,AB,3B), V(F1,45,9D,1F), V(AB,58,FA,AC), V(93,03,E3,4B), \ - V(55,FA,30,20), V(F6,6D,76,AD), V(91,76,CC,88), V(25,4C,02,F5), \ - V(FC,D7,E5,4F), V(D7,CB,2A,C5), V(80,44,35,26), V(8F,A3,62,B5), \ - V(49,5A,B1,DE), V(67,1B,BA,25), V(98,0E,EA,45), V(E1,C0,FE,5D), \ - V(02,75,2F,C3), V(12,F0,4C,81), V(A3,97,46,8D), V(C6,F9,D3,6B), \ - V(E7,5F,8F,03), V(95,9C,92,15), V(EB,7A,6D,BF), V(DA,59,52,95), \ - V(2D,83,BE,D4), V(D3,21,74,58), V(29,69,E0,49), V(44,C8,C9,8E), \ - V(6A,89,C2,75), V(78,79,8E,F4), V(6B,3E,58,99), V(DD,71,B9,27), \ - V(B6,4F,E1,BE), V(17,AD,88,F0), V(66,AC,20,C9), V(B4,3A,CE,7D), \ - V(18,4A,DF,63), V(82,31,1A,E5), V(60,33,51,97), V(45,7F,53,62), \ - V(E0,77,64,B1), V(84,AE,6B,BB), V(1C,A0,81,FE), V(94,2B,08,F9), \ - V(58,68,48,70), V(19,FD,45,8F), V(87,6C,DE,94), V(B7,F8,7B,52), \ - V(23,D3,73,AB), V(E2,02,4B,72), V(57,8F,1F,E3), V(2A,AB,55,66), \ - V(07,28,EB,B2), V(03,C2,B5,2F), V(9A,7B,C5,86), V(A5,08,37,D3), \ - V(F2,87,28,30), V(B2,A5,BF,23), V(BA,6A,03,02), V(5C,82,16,ED), \ - V(2B,1C,CF,8A), V(92,B4,79,A7), V(F0,F2,07,F3), V(A1,E2,69,4E), \ - V(CD,F4,DA,65), V(D5,BE,05,06), V(1F,62,34,D1), V(8A,FE,A6,C4), \ - V(9D,53,2E,34), V(A0,55,F3,A2), V(32,E1,8A,05), V(75,EB,F6,A4), \ - V(39,EC,83,0B), V(AA,EF,60,40), V(06,9F,71,5E), V(51,10,6E,BD), \ - V(F9,8A,21,3E), V(3D,06,DD,96), V(AE,05,3E,DD), V(46,BD,E6,4D), \ - V(B5,8D,54,91), V(05,5D,C4,71), V(6F,D4,06,04), V(FF,15,50,60), \ - V(24,FB,98,19), V(97,E9,BD,D6), V(CC,43,40,89), V(77,9E,D9,67), \ - V(BD,42,E8,B0), V(88,8B,89,07), V(38,5B,19,E7), V(DB,EE,C8,79), \ - V(47,0A,7C,A1), V(E9,0F,42,7C), V(C9,1E,84,F8), V(00,00,00,00), \ - V(83,86,80,09), V(48,ED,2B,32), V(AC,70,11,1E), V(4E,72,5A,6C), \ - V(FB,FF,0E,FD), V(56,38,85,0F), V(1E,D5,AE,3D), V(27,39,2D,36), \ - V(64,D9,0F,0A), V(21,A6,5C,68), V(D1,54,5B,9B), V(3A,2E,36,24), \ - V(B1,67,0A,0C), V(0F,E7,57,93), V(D2,96,EE,B4), V(9E,91,9B,1B), \ - V(4F,C5,C0,80), V(A2,20,DC,61), V(69,4B,77,5A), V(16,1A,12,1C), \ - V(0A,BA,93,E2), V(E5,2A,A0,C0), V(43,E0,22,3C), V(1D,17,1B,12), \ - V(0B,0D,09,0E), V(AD,C7,8B,F2), V(B9,A8,B6,2D), V(C8,A9,1E,14), \ - V(85,19,F1,57), V(4C,07,75,AF), V(BB,DD,99,EE), V(FD,60,7F,A3), \ - V(9F,26,01,F7), V(BC,F5,72,5C), V(C5,3B,66,44), V(34,7E,FB,5B), \ - V(76,29,43,8B), V(DC,C6,23,CB), V(68,FC,ED,B6), V(63,F1,E4,B8), \ - V(CA,DC,31,D7), V(10,85,63,42), V(40,22,97,13), V(20,11,C6,84), \ - V(7D,24,4A,85), V(F8,3D,BB,D2), V(11,32,F9,AE), V(6D,A1,29,C7), \ - V(4B,2F,9E,1D), V(F3,30,B2,DC), V(EC,52,86,0D), V(D0,E3,C1,77), \ - V(6C,16,B3,2B), V(99,B9,70,A9), V(FA,48,94,11), V(22,64,E9,47), \ - V(C4,8C,FC,A8), V(1A,3F,F0,A0), V(D8,2C,7D,56), V(EF,90,33,22), \ - V(C7,4E,49,87), V(C1,D1,38,D9), V(FE,A2,CA,8C), V(36,0B,D4,98), \ - V(CF,81,F5,A6), V(28,DE,7A,A5), V(26,8E,B7,DA), V(A4,BF,AD,3F), \ - V(E4,9D,3A,2C), V(0D,92,78,50), V(9B,CC,5F,6A), V(62,46,7E,54), \ - V(C2,13,8D,F6), V(E8,B8,D8,90), V(5E,F7,39,2E), V(F5,AF,C3,82), \ - V(BE,80,5D,9F), V(7C,93,D0,69), V(A9,2D,D5,6F), V(B3,12,25,CF), \ - V(3B,99,AC,C8), V(A7,7D,18,10), V(6E,63,9C,E8), V(7B,BB,3B,DB), \ - V(09,78,26,CD), V(F4,18,59,6E), V(01,B7,9A,EC), V(A8,9A,4F,83), \ - V(65,6E,95,E6), V(7E,E6,FF,AA), V(08,CF,BC,21), V(E6,E8,15,EF), \ - V(D9,9B,E7,BA), V(CE,36,6F,4A), V(D4,09,9F,EA), V(D6,7C,B0,29), \ - V(AF,B2,A4,31), V(31,23,3F,2A), V(30,94,A5,C6), V(C0,66,A2,35), \ - V(37,BC,4E,74), V(A6,CA,82,FC), V(B0,D0,90,E0), V(15,D8,A7,33), \ - V(4A,98,04,F1), V(F7,DA,EC,41), V(0E,50,CD,7F), V(2F,F6,91,17), \ - V(8D,D6,4D,76), V(4D,B0,EF,43), V(54,4D,AA,CC), V(DF,04,96,E4), \ - V(E3,B5,D1,9E), V(1B,88,6A,4C), V(B8,1F,2C,C1), V(7F,51,65,46), \ - V(04,EA,5E,9D), V(5D,35,8C,01), V(73,74,87,FA), V(2E,41,0B,FB), \ - V(5A,1D,67,B3), V(52,D2,DB,92), V(33,56,10,E9), V(13,47,D6,6D), \ - V(8C,61,D7,9A), V(7A,0C,A1,37), V(8E,14,F8,59), V(89,3C,13,EB), \ - V(EE,27,A9,CE), V(35,C9,61,B7), V(ED,E5,1C,E1), V(3C,B1,47,7A), \ - V(59,DF,D2,9C), V(3F,73,F2,55), V(79,CE,14,18), V(BF,37,C7,73), \ - V(EA,CD,F7,53), V(5B,AA,FD,5F), V(14,6F,3D,DF), V(86,DB,44,78), \ - V(81,F3,AF,CA), V(3E,C4,68,B9), V(2C,34,24,38), V(5F,40,A3,C2), \ - V(72,C3,1D,16), V(0C,25,E2,BC), V(8B,49,3C,28), V(41,95,0D,FF), \ - V(71,01,A8,39), V(DE,B3,0C,08), V(9C,E4,B4,D8), V(90,C1,56,64), \ - V(61,84,CB,7B), V(70,B6,32,D5), V(74,5C,6C,48), V(42,57,B8,D0) - -#define V(a,b,c,d) 0x##a##b##c##d -SSL_ROM_DATA_SECTION -static const uint32_t RT0[256] = { RT }; -#undef V - -#define V(a,b,c,d) 0x##b##c##d##a -SSL_ROM_DATA_SECTION -static const uint32_t RT1[256] = { RT }; -#undef V - -#define V(a,b,c,d) 0x##c##d##a##b -SSL_ROM_DATA_SECTION -static const uint32_t RT2[256] = { RT }; -#undef V - -#define V(a,b,c,d) 0x##d##a##b##c -SSL_ROM_DATA_SECTION -static const uint32_t RT3[256] = { RT }; -#undef V - -#undef RT - -/* - * Round constants - */ -SSL_ROM_DATA_SECTION -static const uint32_t RCON[10] = -{ - 0x00000001, 0x00000002, 0x00000004, 0x00000008, - 0x00000010, 0x00000020, 0x00000040, 0x00000080, - 0x0000001B, 0x00000036 -}; - -#else /* POLARSSL_AES_ROM_TABLES */ - -/* - * Forward S-box & tables - */ -static unsigned char FSb[256]; -static uint32_t FT0[256]; -static uint32_t FT1[256]; -static uint32_t FT2[256]; -static uint32_t FT3[256]; - -/* - * Reverse S-box & tables - */ -static unsigned char RSb[256]; -static uint32_t RT0[256]; -static uint32_t RT1[256]; -static uint32_t RT2[256]; -static uint32_t RT3[256]; - -/* - * Round constants - */ -static uint32_t RCON[10]; - -/* - * Tables generation code - */ -#define ROTL8(x) ( ( x << 8 ) & 0xFFFFFFFF ) | ( x >> 24 ) -#define XTIME(x) ( ( x << 1 ) ^ ( ( x & 0x80 ) ? 0x1B : 0x00 ) ) -#define MUL(x,y) ( ( x && y ) ? pow[(log[x]+log[y]) % 255] : 0 ) - -static int aes_init_done = 0; - -SSL_ROM_TEXT_SECTION -static void aes_gen_tables( void ) -{ - int i, x, y, z; - int pow[256]; - int log[256]; - - /* - * compute pow and log tables over GF(2^8) - */ - for( i = 0, x = 1; i < 256; i++ ) - { - pow[i] = x; - log[x] = i; - x = ( x ^ XTIME( x ) ) & 0xFF; - } - - /* - * calculate the round constants - */ - for( i = 0, x = 1; i < 10; i++ ) - { - RCON[i] = (uint32_t) x; - x = XTIME( x ) & 0xFF; - } - - /* - * generate the forward and reverse S-boxes - */ - FSb[0x00] = 0x63; - RSb[0x63] = 0x00; - - for( i = 1; i < 256; i++ ) - { - x = pow[255 - log[i]]; - - y = x; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y ^ 0x63; - - FSb[i] = (unsigned char) x; - RSb[x] = (unsigned char) i; - } - - /* - * generate the forward and reverse tables - */ - for( i = 0; i < 256; i++ ) - { - x = FSb[i]; - y = XTIME( x ) & 0xFF; - z = ( y ^ x ) & 0xFF; - - FT0[i] = ( (uint32_t) y ) ^ - ( (uint32_t) x << 8 ) ^ - ( (uint32_t) x << 16 ) ^ - ( (uint32_t) z << 24 ); - - FT1[i] = ROTL8( FT0[i] ); - FT2[i] = ROTL8( FT1[i] ); - FT3[i] = ROTL8( FT2[i] ); - - x = RSb[i]; - - RT0[i] = ( (uint32_t) MUL( 0x0E, x ) ) ^ - ( (uint32_t) MUL( 0x09, x ) << 8 ) ^ - ( (uint32_t) MUL( 0x0D, x ) << 16 ) ^ - ( (uint32_t) MUL( 0x0B, x ) << 24 ); - - RT1[i] = ROTL8( RT0[i] ); - RT2[i] = ROTL8( RT1[i] ); - RT3[i] = ROTL8( RT2[i] ); - } -} - -#endif /* POLARSSL_AES_ROM_TABLES */ -#endif /* SUPPORT_HW_SW_CRYPTO */ - -SSL_ROM_TEXT_SECTION -void aes_init( aes_context *ctx ) -{ - memset( ctx, 0, sizeof( aes_context ) ); -} - -SSL_ROM_TEXT_SECTION -void aes_free( aes_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( aes_context ) ); -} - -/* - * AES key schedule (encryption) - */ -SSL_ROM_TEXT_SECTION -int aes_setkey_enc( aes_context *ctx, const unsigned char *key, - unsigned int keysize ) -{ -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - switch(keysize) - { - case 128: ctx->nr = 10; break; - case 192: ctx->nr = 12; break; - case 256: ctx->nr = 14; break; - default : return(POLARSSL_ERR_AES_INVALID_KEY_LENGTH); - } - - memcpy(ctx->enc_key, key, (keysize / 8)); - return 0; - } -#endif /* RTL_HW_CRYPTO */ -#ifdef SUPPORT_HW_SW_CRYPTO - else - { - unsigned int i; - uint32_t *RK; - -#if !defined(POLARSSL_AES_ROM_TABLES) - if( aes_init_done == 0 ) - { - aes_gen_tables(); - aes_init_done = 1; - - } -#endif - - switch( keysize ) - { - case 128: ctx->nr = 10; break; - case 192: ctx->nr = 12; break; - case 256: ctx->nr = 14; break; - default : return( POLARSSL_ERR_AES_INVALID_KEY_LENGTH ); - } - -#if defined(POLARSSL_PADLOCK_C) && defined(PADLOCK_ALIGN16) - if( aes_padlock_ace == -1 ) - aes_padlock_ace = padlock_supports( PADLOCK_ACE ); - - if( aes_padlock_ace ) - ctx->rk = RK = PADLOCK_ALIGN16( ctx->buf ); - else -#endif - ctx->rk = RK = ctx->buf; - -#if defined(POLARSSL_AESNI_C) && defined(POLARSSL_HAVE_X86_64) - if( aesni_supports( POLARSSL_AESNI_AES ) ) - return( aesni_setkey_enc( (unsigned char *) ctx->rk, key, keysize ) ); -#endif - - for( i = 0; i < ( keysize >> 5 ); i++ ) - { - GET_UINT32_LE( RK[i], key, i << 2 ); - } - - switch( ctx->nr ) - { - case 10: - - for( i = 0; i < 10; i++, RK += 4 ) - { - RK[4] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[3] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[3] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[3] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[3] ) & 0xFF ] << 24 ); - - RK[5] = RK[1] ^ RK[4]; - RK[6] = RK[2] ^ RK[5]; - RK[7] = RK[3] ^ RK[6]; - } - break; - - case 12: - - for( i = 0; i < 8; i++, RK += 6 ) - { - RK[6] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[5] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[5] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[5] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[5] ) & 0xFF ] << 24 ); - - RK[7] = RK[1] ^ RK[6]; - RK[8] = RK[2] ^ RK[7]; - RK[9] = RK[3] ^ RK[8]; - RK[10] = RK[4] ^ RK[9]; - RK[11] = RK[5] ^ RK[10]; - } - break; - - case 14: - - for( i = 0; i < 7; i++, RK += 8 ) - { - RK[8] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[7] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[7] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[7] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[7] ) & 0xFF ] << 24 ); - - RK[9] = RK[1] ^ RK[8]; - RK[10] = RK[2] ^ RK[9]; - RK[11] = RK[3] ^ RK[10]; - - RK[12] = RK[4] ^ - ( (uint32_t) FSb[ ( RK[11] ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 24 ) & 0xFF ] << 24 ); - - RK[13] = RK[5] ^ RK[12]; - RK[14] = RK[6] ^ RK[13]; - RK[15] = RK[7] ^ RK[14]; - } - break; - } - - return( 0 ); - } -#endif /* SUPPORT_HW_SW_CRYPTO */ -} - -/* - * AES key schedule (decryption) - */ -SSL_ROM_TEXT_SECTION -int aes_setkey_dec( aes_context *ctx, const unsigned char *key, - unsigned int keysize ) -{ -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - switch(keysize) - { - case 128: ctx->nr = 10; break; - case 192: ctx->nr = 12; break; - case 256: ctx->nr = 14; break; - default : return(POLARSSL_ERR_AES_INVALID_KEY_LENGTH); - } - - memcpy(ctx->dec_key, key, (keysize / 8)); - return 0; - } -#endif /* RTL_HW_CRYPTO */ -#ifdef SUPPORT_HW_SW_CRYPTO - else - { - int i, j, ret; - aes_context cty; - uint32_t *RK; - uint32_t *SK; - - aes_init( &cty ); - -#if defined(POLARSSL_PADLOCK_C) && defined(PADLOCK_ALIGN16) - if( aes_padlock_ace == -1 ) - aes_padlock_ace = padlock_supports( PADLOCK_ACE ); - - if( aes_padlock_ace ) - ctx->rk = RK = PADLOCK_ALIGN16( ctx->buf ); - else -#endif - ctx->rk = RK = ctx->buf; - - /* Also checks keysize */ - if( ( ret = aes_setkey_enc( &cty, key, keysize ) ) != 0 ) - goto exit; - - ctx->nr = cty.nr; - -#if defined(POLARSSL_AESNI_C) && defined(POLARSSL_HAVE_X86_64) - if( aesni_supports( POLARSSL_AESNI_AES ) ) - { - aesni_inverse_key( (unsigned char *) ctx->rk, - (const unsigned char *) cty.rk, ctx->nr ); - goto exit; - } -#endif - - SK = cty.rk + cty.nr * 4; - - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - - for( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 ) - { - for( j = 0; j < 4; j++, SK++ ) - { - *RK++ = RT0[ FSb[ ( *SK ) & 0xFF ] ] ^ - RT1[ FSb[ ( *SK >> 8 ) & 0xFF ] ] ^ - RT2[ FSb[ ( *SK >> 16 ) & 0xFF ] ] ^ - RT3[ FSb[ ( *SK >> 24 ) & 0xFF ] ]; - } - } - - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - -exit: - aes_free( &cty ); - - return( ret ); - } -#endif /* SUPPORT_HW_SW_CRYPTO */ -} - -#define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ -{ \ - X0 = *RK++ ^ FT0[ ( Y0 ) & 0xFF ] ^ \ - FT1[ ( Y1 >> 8 ) & 0xFF ] ^ \ - FT2[ ( Y2 >> 16 ) & 0xFF ] ^ \ - FT3[ ( Y3 >> 24 ) & 0xFF ]; \ - \ - X1 = *RK++ ^ FT0[ ( Y1 ) & 0xFF ] ^ \ - FT1[ ( Y2 >> 8 ) & 0xFF ] ^ \ - FT2[ ( Y3 >> 16 ) & 0xFF ] ^ \ - FT3[ ( Y0 >> 24 ) & 0xFF ]; \ - \ - X2 = *RK++ ^ FT0[ ( Y2 ) & 0xFF ] ^ \ - FT1[ ( Y3 >> 8 ) & 0xFF ] ^ \ - FT2[ ( Y0 >> 16 ) & 0xFF ] ^ \ - FT3[ ( Y1 >> 24 ) & 0xFF ]; \ - \ - X3 = *RK++ ^ FT0[ ( Y3 ) & 0xFF ] ^ \ - FT1[ ( Y0 >> 8 ) & 0xFF ] ^ \ - FT2[ ( Y1 >> 16 ) & 0xFF ] ^ \ - FT3[ ( Y2 >> 24 ) & 0xFF ]; \ -} - -#define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ -{ \ - X0 = *RK++ ^ RT0[ ( Y0 ) & 0xFF ] ^ \ - RT1[ ( Y3 >> 8 ) & 0xFF ] ^ \ - RT2[ ( Y2 >> 16 ) & 0xFF ] ^ \ - RT3[ ( Y1 >> 24 ) & 0xFF ]; \ - \ - X1 = *RK++ ^ RT0[ ( Y1 ) & 0xFF ] ^ \ - RT1[ ( Y0 >> 8 ) & 0xFF ] ^ \ - RT2[ ( Y3 >> 16 ) & 0xFF ] ^ \ - RT3[ ( Y2 >> 24 ) & 0xFF ]; \ - \ - X2 = *RK++ ^ RT0[ ( Y2 ) & 0xFF ] ^ \ - RT1[ ( Y1 >> 8 ) & 0xFF ] ^ \ - RT2[ ( Y0 >> 16 ) & 0xFF ] ^ \ - RT3[ ( Y3 >> 24 ) & 0xFF ]; \ - \ - X3 = *RK++ ^ RT0[ ( Y3 ) & 0xFF ] ^ \ - RT1[ ( Y2 >> 8 ) & 0xFF ] ^ \ - RT2[ ( Y1 >> 16 ) & 0xFF ] ^ \ - RT3[ ( Y0 >> 24 ) & 0xFF ]; \ -} - -/* - * AES-ECB block encryption/decryption - */ -SSL_ROM_TEXT_SECTION -int aes_crypt_ecb( aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) -{ -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - unsigned char key_buf[32 + 4], *key_buf_aligned; - unsigned char *output_buf[16 + 4], *output_buf_aligned; - - key_buf_aligned = (unsigned char *) (((unsigned int) key_buf + 4) / 4 * 4); - output_buf_aligned = (unsigned char *) (((unsigned int) output_buf + 4) / 4 * 4); - memset(output_buf, 0, 16 + 4); - - if(mode == AES_DECRYPT) - { - memcpy(key_buf_aligned, ctx->dec_key, ((ctx->nr - 6) * 4)); - rom_ssl_ram_map.hw_crypto_aes_ecb_init(key_buf_aligned, ((ctx->nr - 6) * 4)); - rom_ssl_ram_map.hw_crypto_aes_ecb_decrypt(input, 16, NULL, 0, output_buf_aligned); - } - else - { - memcpy(key_buf_aligned, ctx->enc_key, ((ctx->nr - 6) * 4)); - rom_ssl_ram_map.hw_crypto_aes_ecb_init(key_buf_aligned,((ctx->nr - 6) * 4)); - rom_ssl_ram_map.hw_crypto_aes_ecb_encrypt(input, 16, NULL, 0, output_buf_aligned); - } - - memcpy(output, output_buf_aligned, 16); - - return 0; - } -#endif /* RTL_HW_CRYPTO */ -#ifdef SUPPORT_HW_SW_CRYPTO - else - { - int i; - uint32_t *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; - -#if defined(POLARSSL_AESNI_C) && defined(POLARSSL_HAVE_X86_64) - if( aesni_supports( POLARSSL_AESNI_AES ) ) - return( aesni_crypt_ecb( ctx, mode, input, output ) ); -#endif - -#if defined(POLARSSL_PADLOCK_C) && defined(POLARSSL_HAVE_X86) - if( aes_padlock_ace ) - { - if( padlock_xcryptecb( ctx, mode, input, output ) == 0 ) - return( 0 ); - - // If padlock data misaligned, we just fall back to - // unaccelerated mode - // - } -#endif - - RK = ctx->rk; - - GET_UINT32_LE( X0, input, 0 ); X0 ^= *RK++; - GET_UINT32_LE( X1, input, 4 ); X1 ^= *RK++; - GET_UINT32_LE( X2, input, 8 ); X2 ^= *RK++; - GET_UINT32_LE( X3, input, 12 ); X3 ^= *RK++; - - if( mode == AES_DECRYPT ) - { - for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) - { - AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); - } - - AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - - X0 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y0 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); - - X1 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y1 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); - - X2 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y2 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); - - X3 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y3 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); - } - else /* AES_ENCRYPT */ - { - for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) - { - AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); - } - - AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - - X0 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y0 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); - - X1 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y1 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); - - X2 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y2 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); - - X3 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y3 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); - } - - PUT_UINT32_LE( X0, output, 0 ); - PUT_UINT32_LE( X1, output, 4 ); - PUT_UINT32_LE( X2, output, 8 ); - PUT_UINT32_LE( X3, output, 12 ); - - return( 0 ); - } -#endif /* SUPPORT_HW_SW_CRYPTO */ -} - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/* - * AES-CBC buffer encryption/decryption - */ -SSL_ROM_TEXT_SECTION -int aes_crypt_cbc( aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) -{ -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - unsigned char key_buf[32 + 4], *key_buf_aligned; - unsigned char iv_buf[16 + 4], *iv_buf_aligned, iv_tmp[16]; - unsigned char *output_buf, *output_buf_aligned; - size_t length_done = 0; - - if(length % 16) - return(POLARSSL_ERR_AES_INVALID_INPUT_LENGTH); - - if(length > 0) - { - key_buf_aligned = (unsigned char *) (((unsigned int) key_buf + 4) / 4 * 4); - iv_buf_aligned = (unsigned char *) (((unsigned int) iv_buf + 4) / 4 * 4); - output_buf = polarssl_malloc(length + 4); - - if(output_buf == NULL) - return -1; - - output_buf_aligned = (unsigned char *) (((unsigned int) output_buf + 4) / 4 * 4); - memcpy(iv_buf_aligned, iv, 16); - memset(output_buf, 0, length + 4); - - if(mode == AES_DECRYPT) - { - memcpy(key_buf_aligned, ctx->dec_key, ((ctx->nr - 6) * 4)); - rom_ssl_ram_map.hw_crypto_aes_cbc_init(key_buf_aligned, ((ctx->nr - 6) * 4)); - - while((length - length_done) > RTL_CRYPTO_FRAGMENT) - { - memcpy(iv_tmp, (input + length_done + RTL_CRYPTO_FRAGMENT - 16), 16); - rom_ssl_ram_map.hw_crypto_aes_cbc_decrypt(input + length_done, RTL_CRYPTO_FRAGMENT, iv_buf_aligned, 16, output_buf_aligned + length_done); - memcpy(iv_buf_aligned, iv_tmp, 16); - length_done += RTL_CRYPTO_FRAGMENT; - } - - memcpy(iv_tmp, (input + length - 16), 16); - rom_ssl_ram_map.hw_crypto_aes_cbc_decrypt(input + length_done, length - length_done, iv_buf_aligned, 16, output_buf_aligned + length_done); - memcpy(iv, iv_tmp, 16); - } - else - { - memcpy(key_buf_aligned, ctx->enc_key, ((ctx->nr - 6) * 4)); - rom_ssl_ram_map.hw_crypto_aes_cbc_init(key_buf_aligned,((ctx->nr - 6) * 4)); - - while((length - length_done) > RTL_CRYPTO_FRAGMENT) - { - rom_ssl_ram_map.hw_crypto_aes_cbc_encrypt(input + length_done, RTL_CRYPTO_FRAGMENT, iv_buf_aligned, 16, output_buf_aligned + length_done); - memcpy(iv_buf_aligned, (output_buf_aligned + length_done + RTL_CRYPTO_FRAGMENT - 16), 16); - length_done += RTL_CRYPTO_FRAGMENT; - } - - rom_ssl_ram_map.hw_crypto_aes_cbc_encrypt(input + length_done, length - length_done, iv_buf_aligned, 16, output_buf_aligned + length_done); - memcpy(iv, (output_buf_aligned + length - 16), 16); - } - - memcpy(output, output_buf_aligned, length); - polarssl_free(output_buf); - } - - return 0; - } -#endif /* RTL_HW_CRYPTO */ -#ifdef SUPPORT_HW_SW_CRYPTO - else - { - int i; - unsigned char temp[16]; - - if( length % 16 ) - return( POLARSSL_ERR_AES_INVALID_INPUT_LENGTH ); - -#if defined(POLARSSL_PADLOCK_C) && defined(POLARSSL_HAVE_X86) - if( aes_padlock_ace ) - { - if( padlock_xcryptcbc( ctx, mode, length, iv, input, output ) == 0 ) - return( 0 ); - - // If padlock data misaligned, we just fall back to - // unaccelerated mode - // - } -#endif - - if( mode == AES_DECRYPT ) - { - while( length > 0 ) - { - memcpy( temp, input, 16 ); - aes_crypt_ecb( ctx, mode, input, output ); - - for( i = 0; i < 16; i++ ) - output[i] = (unsigned char)( output[i] ^ iv[i] ); - - memcpy( iv, temp, 16 ); - - input += 16; - output += 16; - length -= 16; - } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 16; i++ ) - output[i] = (unsigned char)( input[i] ^ iv[i] ); - - aes_crypt_ecb( ctx, mode, output, output ); - memcpy( iv, output, 16 ); - - input += 16; - output += 16; - length -= 16; - } - } - - return( 0 ); - } -#endif /* SUPPORT_HW_SW_CRYPTO */ -} -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) -/* - * AES-CFB128 buffer encryption/decryption - */ -SSL_ROM_TEXT_SECTION -int aes_crypt_cfb128( aes_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) -{ - int c; - size_t n = *iv_off; - - if( mode == AES_DECRYPT ) - { - while( length-- ) - { - if( n == 0 ) - aes_crypt_ecb( ctx, AES_ENCRYPT, iv, iv ); - - c = *input++; - *output++ = (unsigned char)( c ^ iv[n] ); - iv[n] = (unsigned char) c; - - n = ( n + 1 ) & 0x0F; - } - } - else - { - while( length-- ) - { - if( n == 0 ) - aes_crypt_ecb( ctx, AES_ENCRYPT, iv, iv ); - - iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); - - n = ( n + 1 ) & 0x0F; - } - } - - *iv_off = n; - - return( 0 ); -} - -/* - * AES-CFB8 buffer encryption/decryption - */ -#include -SSL_ROM_TEXT_SECTION -int aes_crypt_cfb8( aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) -{ - unsigned char c; - unsigned char ov[17]; - - while( length-- ) - { - memcpy( ov, iv, 16 ); - aes_crypt_ecb( ctx, AES_ENCRYPT, iv, iv ); - - if( mode == AES_DECRYPT ) - ov[16] = *input; - - c = *output++ = (unsigned char)( iv[0] ^ *input++ ); - - if( mode == AES_ENCRYPT ) - ov[16] = c; - - memcpy( iv, ov + 1, 16 ); - } - - return( 0 ); -} -#endif /*POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) -/* - * AES-CTR buffer encryption/decryption - */ -SSL_ROM_TEXT_SECTION -int aes_crypt_ctr( aes_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[16], - unsigned char stream_block[16], - const unsigned char *input, - unsigned char *output ) -{ - int c, i; - size_t n = *nc_off; - - while( length-- ) - { - if( n == 0 ) { - aes_crypt_ecb( ctx, AES_ENCRYPT, nonce_counter, stream_block ); - - for( i = 16; i > 0; i-- ) - if( ++nonce_counter[i - 1] != 0 ) - break; - } - c = *input++; - *output++ = (unsigned char)( c ^ stream_block[n] ); - - n = ( n + 1 ) & 0x0F; - } - - *nc_off = n; - - return( 0 ); -} -#endif /* POLARSSL_CIPHER_MODE_CTR */ - -#endif /* !POLARSSL_AES_ALT */ - -#if defined(POLARSSL_SELF_TEST) - -#include - -/* - * AES test vectors from: - * - * http://csrc.nist.gov/archive/aes/rijndael/rijndael-vals.zip - */ -static const unsigned char aes_test_ecb_dec[3][16] = -{ - { 0x44, 0x41, 0x6A, 0xC2, 0xD1, 0xF5, 0x3C, 0x58, - 0x33, 0x03, 0x91, 0x7E, 0x6B, 0xE9, 0xEB, 0xE0 }, - { 0x48, 0xE3, 0x1E, 0x9E, 0x25, 0x67, 0x18, 0xF2, - 0x92, 0x29, 0x31, 0x9C, 0x19, 0xF1, 0x5B, 0xA4 }, - { 0x05, 0x8C, 0xCF, 0xFD, 0xBB, 0xCB, 0x38, 0x2D, - 0x1F, 0x6F, 0x56, 0x58, 0x5D, 0x8A, 0x4A, 0xDE } -}; - -static const unsigned char aes_test_ecb_enc[3][16] = -{ - { 0xC3, 0x4C, 0x05, 0x2C, 0xC0, 0xDA, 0x8D, 0x73, - 0x45, 0x1A, 0xFE, 0x5F, 0x03, 0xBE, 0x29, 0x7F }, - { 0xF3, 0xF6, 0x75, 0x2A, 0xE8, 0xD7, 0x83, 0x11, - 0x38, 0xF0, 0x41, 0x56, 0x06, 0x31, 0xB1, 0x14 }, - { 0x8B, 0x79, 0xEE, 0xCC, 0x93, 0xA0, 0xEE, 0x5D, - 0xFF, 0x30, 0xB4, 0xEA, 0x21, 0x63, 0x6D, 0xA4 } -}; - -#if defined(POLARSSL_CIPHER_MODE_CBC) -static const unsigned char aes_test_cbc_dec[3][16] = -{ - { 0xFA, 0xCA, 0x37, 0xE0, 0xB0, 0xC8, 0x53, 0x73, - 0xDF, 0x70, 0x6E, 0x73, 0xF7, 0xC9, 0xAF, 0x86 }, - { 0x5D, 0xF6, 0x78, 0xDD, 0x17, 0xBA, 0x4E, 0x75, - 0xB6, 0x17, 0x68, 0xC6, 0xAD, 0xEF, 0x7C, 0x7B }, - { 0x48, 0x04, 0xE1, 0x81, 0x8F, 0xE6, 0x29, 0x75, - 0x19, 0xA3, 0xE8, 0x8C, 0x57, 0x31, 0x04, 0x13 } -}; - -static const unsigned char aes_test_cbc_enc[3][16] = -{ - { 0x8A, 0x05, 0xFC, 0x5E, 0x09, 0x5A, 0xF4, 0x84, - 0x8A, 0x08, 0xD3, 0x28, 0xD3, 0x68, 0x8E, 0x3D }, - { 0x7B, 0xD9, 0x66, 0xD5, 0x3A, 0xD8, 0xC1, 0xBB, - 0x85, 0xD2, 0xAD, 0xFA, 0xE8, 0x7B, 0xB1, 0x04 }, - { 0xFE, 0x3C, 0x53, 0x65, 0x3E, 0x2F, 0x45, 0xB5, - 0x6F, 0xCD, 0x88, 0xB2, 0xCC, 0x89, 0x8F, 0xF0 } -}; -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) -/* - * AES-CFB128 test vectors from: - * - * http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf - */ -static const unsigned char aes_test_cfb128_key[3][32] = -{ - { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, - 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C }, - { 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52, - 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5, - 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B }, - { 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, - 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, - 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, - 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 } -}; - -static const unsigned char aes_test_cfb128_iv[16] = -{ - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F -}; - -static const unsigned char aes_test_cfb128_pt[64] = -{ - 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, - 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A, - 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, - 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51, - 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11, - 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF, - 0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17, - 0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10 -}; - -static const unsigned char aes_test_cfb128_ct[3][64] = -{ - { 0x3B, 0x3F, 0xD9, 0x2E, 0xB7, 0x2D, 0xAD, 0x20, - 0x33, 0x34, 0x49, 0xF8, 0xE8, 0x3C, 0xFB, 0x4A, - 0xC8, 0xA6, 0x45, 0x37, 0xA0, 0xB3, 0xA9, 0x3F, - 0xCD, 0xE3, 0xCD, 0xAD, 0x9F, 0x1C, 0xE5, 0x8B, - 0x26, 0x75, 0x1F, 0x67, 0xA3, 0xCB, 0xB1, 0x40, - 0xB1, 0x80, 0x8C, 0xF1, 0x87, 0xA4, 0xF4, 0xDF, - 0xC0, 0x4B, 0x05, 0x35, 0x7C, 0x5D, 0x1C, 0x0E, - 0xEA, 0xC4, 0xC6, 0x6F, 0x9F, 0xF7, 0xF2, 0xE6 }, - { 0xCD, 0xC8, 0x0D, 0x6F, 0xDD, 0xF1, 0x8C, 0xAB, - 0x34, 0xC2, 0x59, 0x09, 0xC9, 0x9A, 0x41, 0x74, - 0x67, 0xCE, 0x7F, 0x7F, 0x81, 0x17, 0x36, 0x21, - 0x96, 0x1A, 0x2B, 0x70, 0x17, 0x1D, 0x3D, 0x7A, - 0x2E, 0x1E, 0x8A, 0x1D, 0xD5, 0x9B, 0x88, 0xB1, - 0xC8, 0xE6, 0x0F, 0xED, 0x1E, 0xFA, 0xC4, 0xC9, - 0xC0, 0x5F, 0x9F, 0x9C, 0xA9, 0x83, 0x4F, 0xA0, - 0x42, 0xAE, 0x8F, 0xBA, 0x58, 0x4B, 0x09, 0xFF }, - { 0xDC, 0x7E, 0x84, 0xBF, 0xDA, 0x79, 0x16, 0x4B, - 0x7E, 0xCD, 0x84, 0x86, 0x98, 0x5D, 0x38, 0x60, - 0x39, 0xFF, 0xED, 0x14, 0x3B, 0x28, 0xB1, 0xC8, - 0x32, 0x11, 0x3C, 0x63, 0x31, 0xE5, 0x40, 0x7B, - 0xDF, 0x10, 0x13, 0x24, 0x15, 0xE5, 0x4B, 0x92, - 0xA1, 0x3E, 0xD0, 0xA8, 0x26, 0x7A, 0xE2, 0xF9, - 0x75, 0xA3, 0x85, 0x74, 0x1A, 0xB9, 0xCE, 0xF8, - 0x20, 0x31, 0x62, 0x3D, 0x55, 0xB1, 0xE4, 0x71 } -}; -#endif /* POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) -/* - * AES-CTR test vectors from: - * - * http://www.faqs.org/rfcs/rfc3686.html - */ - -static const unsigned char aes_test_ctr_key[3][16] = -{ - { 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC, - 0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E }, - { 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7, - 0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 }, - { 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8, - 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC } -}; - -static const unsigned char aes_test_ctr_nonce_counter[3][16] = -{ - { 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59, - 0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F, - 0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 } -}; - -static const unsigned char aes_test_ctr_pt[3][48] = -{ - { 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62, - 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x22, 0x23 } -}; - -static const unsigned char aes_test_ctr_ct[3][48] = -{ - { 0xE4, 0x09, 0x5D, 0x4F, 0xB7, 0xA7, 0xB3, 0x79, - 0x2D, 0x61, 0x75, 0xA3, 0x26, 0x13, 0x11, 0xB8 }, - { 0x51, 0x04, 0xA1, 0x06, 0x16, 0x8A, 0x72, 0xD9, - 0x79, 0x0D, 0x41, 0xEE, 0x8E, 0xDA, 0xD3, 0x88, - 0xEB, 0x2E, 0x1E, 0xFC, 0x46, 0xDA, 0x57, 0xC8, - 0xFC, 0xE6, 0x30, 0xDF, 0x91, 0x41, 0xBE, 0x28 }, - { 0xC1, 0xCF, 0x48, 0xA8, 0x9F, 0x2F, 0xFD, 0xD9, - 0xCF, 0x46, 0x52, 0xE9, 0xEF, 0xDB, 0x72, 0xD7, - 0x45, 0x40, 0xA4, 0x2B, 0xDE, 0x6D, 0x78, 0x36, - 0xD5, 0x9A, 0x5C, 0xEA, 0xAE, 0xF3, 0x10, 0x53, - 0x25, 0xB2, 0x07, 0x2F } -}; - -static const int aes_test_ctr_len[3] = - { 16, 32, 36 }; -#endif /* POLARSSL_CIPHER_MODE_CTR */ - -/* - * Checkup routine - */ -int aes_self_test( int verbose ) -{ - int ret = 0, i, j, u, v; - unsigned char key[32]; - unsigned char buf[64]; - unsigned char iv[16]; -#if defined(POLARSSL_CIPHER_MODE_CBC) - unsigned char prv[16]; -#endif -#if defined(POLARSSL_CIPHER_MODE_CTR) || defined(POLARSSL_CIPHER_MODE_CFB) - size_t offset; -#endif -#if defined(POLARSSL_CIPHER_MODE_CTR) - int len; - unsigned char nonce_counter[16]; - unsigned char stream_block[16]; -#endif - aes_context ctx; - - memset( key, 0, 32 ); - aes_init( &ctx ); - - /* - * ECB mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " AES-ECB-%3d (%s): ", 128 + u * 64, - ( v == AES_DECRYPT ) ? "dec" : "enc" ); - - memset( buf, 0, 16 ); - - if( v == AES_DECRYPT ) - { - aes_setkey_dec( &ctx, key, 128 + u * 64 ); - - for( j = 0; j < 10000; j++ ) - aes_crypt_ecb( &ctx, v, buf, buf ); - - if( memcmp( buf, aes_test_ecb_dec[u], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - else - { - aes_setkey_enc( &ctx, key, 128 + u * 64 ); - - for( j = 0; j < 10000; j++ ) - aes_crypt_ecb( &ctx, v, buf, buf ); - - if( memcmp( buf, aes_test_ecb_enc[u], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -#if defined(POLARSSL_CIPHER_MODE_CBC) - /* - * CBC mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " AES-CBC-%3d (%s): ", 128 + u * 64, - ( v == AES_DECRYPT ) ? "dec" : "enc" ); - - memset( iv , 0, 16 ); - memset( prv, 0, 16 ); - memset( buf, 0, 16 ); - - if( v == AES_DECRYPT ) - { - aes_setkey_dec( &ctx, key, 128 + u * 64 ); - - for( j = 0; j < 10000; j++ ) - aes_crypt_cbc( &ctx, v, 16, iv, buf, buf ); - - if( memcmp( buf, aes_test_cbc_dec[u], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - else - { - aes_setkey_enc( &ctx, key, 128 + u * 64 ); - - for( j = 0; j < 10000; j++ ) - { - unsigned char tmp[16]; - - aes_crypt_cbc( &ctx, v, 16, iv, buf, buf ); - - memcpy( tmp, prv, 16 ); - memcpy( prv, buf, 16 ); - memcpy( buf, tmp, 16 ); - } - - if( memcmp( prv, aes_test_cbc_enc[u], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) - /* - * CFB128 mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " AES-CFB128-%3d (%s): ", 128 + u * 64, - ( v == AES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( iv, aes_test_cfb128_iv, 16 ); - memcpy( key, aes_test_cfb128_key[u], 16 + u * 8 ); - - offset = 0; - aes_setkey_enc( &ctx, key, 128 + u * 64 ); - - if( v == AES_DECRYPT ) - { - memcpy( buf, aes_test_cfb128_ct[u], 64 ); - aes_crypt_cfb128( &ctx, v, 64, &offset, iv, buf, buf ); - - if( memcmp( buf, aes_test_cfb128_pt, 64 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - else - { - memcpy( buf, aes_test_cfb128_pt, 64 ); - aes_crypt_cfb128( &ctx, v, 64, &offset, iv, buf, buf ); - - if( memcmp( buf, aes_test_cfb128_ct[u], 64 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); -#endif /* POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) - /* - * CTR mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " AES-CTR-128 (%s): ", - ( v == AES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( nonce_counter, aes_test_ctr_nonce_counter[u], 16 ); - memcpy( key, aes_test_ctr_key[u], 16 ); - - offset = 0; - aes_setkey_enc( &ctx, key, 128 ); - - if( v == AES_DECRYPT ) - { - len = aes_test_ctr_len[u]; - memcpy( buf, aes_test_ctr_ct[u], len ); - - aes_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); - - if( memcmp( buf, aes_test_ctr_pt[u], len ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - else - { - len = aes_test_ctr_len[u]; - memcpy( buf, aes_test_ctr_pt[u], len ); - - aes_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); - - if( memcmp( buf, aes_test_ctr_ct[u], len ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); -#endif /* POLARSSL_CIPHER_MODE_CTR */ - - ret = 0; - -exit: - aes_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_AES_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/arc4.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/arc4.c deleted file mode 100644 index 52781d8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/arc4.c +++ /dev/null @@ -1,213 +0,0 @@ -/* - * An implementation of the ARCFOUR algorithm - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The ARCFOUR algorithm was publicly disclosed on 94/09. - * - * http://groups.google.com/group/sci.crypt/msg/10a300c9d21afca0 - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ARC4_C) - -#include "polarssl/arc4.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -#if !defined(POLARSSL_ARC4_ALT) - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -SSL_ROM_TEXT_SECTION -void arc4_init( arc4_context *ctx ) -{ - memset( ctx, 0, sizeof( arc4_context ) ); -} - -SSL_ROM_TEXT_SECTION -void arc4_free( arc4_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( arc4_context ) ); -} - -/* - * ARC4 key schedule - */ -SSL_ROM_TEXT_SECTION -void arc4_setup( arc4_context *ctx, const unsigned char *key, - unsigned int keylen ) -{ - int i, j, a; - unsigned int k; - unsigned char *m; - - ctx->x = 0; - ctx->y = 0; - m = ctx->m; - - for( i = 0; i < 256; i++ ) - m[i] = (unsigned char) i; - - j = k = 0; - - for( i = 0; i < 256; i++, k++ ) - { - if( k >= keylen ) k = 0; - - a = m[i]; - j = ( j + a + key[k] ) & 0xFF; - m[i] = m[j]; - m[j] = (unsigned char) a; - } -} - -/* - * ARC4 cipher function - */ -SSL_ROM_TEXT_SECTION -int arc4_crypt( arc4_context *ctx, size_t length, const unsigned char *input, - unsigned char *output ) -{ - int x, y, a, b; - size_t i; - unsigned char *m; - - x = ctx->x; - y = ctx->y; - m = ctx->m; - - for( i = 0; i < length; i++ ) - { - x = ( x + 1 ) & 0xFF; a = m[x]; - y = ( y + a ) & 0xFF; b = m[y]; - - m[x] = (unsigned char) b; - m[y] = (unsigned char) a; - - output[i] = (unsigned char) - ( input[i] ^ m[(unsigned char)( a + b )] ); - } - - ctx->x = x; - ctx->y = y; - - return( 0 ); -} - -#endif /* !POLARSSL_ARC4_ALT */ - -#if defined(POLARSSL_SELF_TEST) - -#include -#include - -/* - * ARC4 tests vectors as posted by Eric Rescorla in sep. 1994: - * - * http://groups.google.com/group/comp.security.misc/msg/10a300c9d21afca0 - */ -static const unsigned char arc4_test_key[3][8] = -{ - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}; - -static const unsigned char arc4_test_pt[3][8] = -{ - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}; - -static const unsigned char arc4_test_ct[3][8] = -{ - { 0x75, 0xB7, 0x87, 0x80, 0x99, 0xE0, 0xC5, 0x96 }, - { 0x74, 0x94, 0xC2, 0xE7, 0x10, 0x4B, 0x08, 0x79 }, - { 0xDE, 0x18, 0x89, 0x41, 0xA3, 0x37, 0x5D, 0x3A } -}; - -/* - * Checkup routine - */ -int arc4_self_test( int verbose ) -{ - int i, ret = 0; - unsigned char ibuf[8]; - unsigned char obuf[8]; - arc4_context ctx; - - arc4_init( &ctx ); - - for( i = 0; i < 3; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " ARC4 test #%d: ", i + 1 ); - - memcpy( ibuf, arc4_test_pt[i], 8 ); - - arc4_setup( &ctx, arc4_test_key[i], 8 ); - arc4_crypt( &ctx, 8, ibuf, obuf ); - - if( memcmp( obuf, arc4_test_ct[i], 8 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - arc4_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_ARC4_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/asn1parse.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/asn1parse.c deleted file mode 100644 index d1c0bab..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/asn1parse.c +++ /dev/null @@ -1,404 +0,0 @@ -/* - * Generic ASN.1 parsing - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ASN1_PARSE_C) - -#include "polarssl/asn1.h" - -#if defined(POLARSSL_BIGNUM_C) -#include "polarssl/bignum.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include -#include - -/* - * ASN.1 DER decoding routines - */ -SSL_ROM_TEXT_SECTION -int asn1_get_len( unsigned char **p, - const unsigned char *end, - size_t *len ) -{ - if( ( end - *p ) < 1 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - if( ( **p & 0x80 ) == 0 ) - *len = *(*p)++; - else - { - switch( **p & 0x7F ) - { - case 1: - if( ( end - *p ) < 2 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - *len = (*p)[1]; - (*p) += 2; - break; - - case 2: - if( ( end - *p ) < 3 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - *len = ( (*p)[1] << 8 ) | (*p)[2]; - (*p) += 3; - break; - - case 3: - if( ( end - *p ) < 4 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - *len = ( (*p)[1] << 16 ) | ( (*p)[2] << 8 ) | (*p)[3]; - (*p) += 4; - break; - - case 4: - if( ( end - *p ) < 5 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - *len = ( (*p)[1] << 24 ) | ( (*p)[2] << 16 ) | ( (*p)[3] << 8 ) | - (*p)[4]; - (*p) += 5; - break; - - default: - return( POLARSSL_ERR_ASN1_INVALID_LENGTH ); - } - } - - if( *len > (size_t) ( end - *p ) ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int asn1_get_tag( unsigned char **p, - const unsigned char *end, - size_t *len, int tag ) -{ - if( ( end - *p ) < 1 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - if( **p != tag ) - return( POLARSSL_ERR_ASN1_UNEXPECTED_TAG ); - - (*p)++; - - return( asn1_get_len( p, end, len ) ); -} - -SSL_ROM_TEXT_SECTION -int asn1_get_bool( unsigned char **p, - const unsigned char *end, - int *val ) -{ - int ret; - size_t len; - - if( ( ret = asn1_get_tag( p, end, &len, ASN1_BOOLEAN ) ) != 0 ) - return( ret ); - - if( len != 1 ) - return( POLARSSL_ERR_ASN1_INVALID_LENGTH ); - - *val = ( **p != 0 ) ? 1 : 0; - (*p)++; - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int asn1_get_int( unsigned char **p, - const unsigned char *end, - int *val ) -{ - int ret; - size_t len; - - if( ( ret = asn1_get_tag( p, end, &len, ASN1_INTEGER ) ) != 0 ) - return( ret ); - - if( len > sizeof( int ) || ( **p & 0x80 ) != 0 ) - return( POLARSSL_ERR_ASN1_INVALID_LENGTH ); - - *val = 0; - - while( len-- > 0 ) - { - *val = ( *val << 8 ) | **p; - (*p)++; - } - - return( 0 ); -} - -#if defined(POLARSSL_BIGNUM_C) -SSL_ROM_TEXT_SECTION -int asn1_get_mpi( unsigned char **p, - const unsigned char *end, - mpi *X ) -{ - int ret; - size_t len; - - if( ( ret = asn1_get_tag( p, end, &len, ASN1_INTEGER ) ) != 0 ) - return( ret ); - - ret = mpi_read_binary( X, *p, len ); - - *p += len; - - return( ret ); -} -#endif /* POLARSSL_BIGNUM_C */ - -SSL_ROM_TEXT_SECTION -int asn1_get_bitstring( unsigned char **p, const unsigned char *end, - asn1_bitstring *bs) -{ - int ret; - - /* Certificate type is a single byte bitstring */ - if( ( ret = asn1_get_tag( p, end, &bs->len, ASN1_BIT_STRING ) ) != 0 ) - return( ret ); - - /* Check length, subtract one for actual bit string length */ - if( bs->len < 1 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - bs->len -= 1; - - /* Get number of unused bits, ensure unused bits <= 7 */ - bs->unused_bits = **p; - if( bs->unused_bits > 7 ) - return( POLARSSL_ERR_ASN1_INVALID_LENGTH ); - (*p)++; - - /* Get actual bitstring */ - bs->p = *p; - *p += bs->len; - - if( *p != end ) - return( POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -/* - * Get a bit string without unused bits - */ -SSL_ROM_TEXT_SECTION -int asn1_get_bitstring_null( unsigned char **p, const unsigned char *end, - size_t *len ) -{ - int ret; - - if( ( ret = asn1_get_tag( p, end, len, ASN1_BIT_STRING ) ) != 0 ) - return( ret ); - - if( (*len)-- < 2 || *(*p)++ != 0 ) - return( POLARSSL_ERR_ASN1_INVALID_DATA ); - - return( 0 ); -} - - - -/* - * Parses and splits an ASN.1 "SEQUENCE OF " - */ -SSL_ROM_TEXT_SECTION -int asn1_get_sequence_of( unsigned char **p, - const unsigned char *end, - asn1_sequence *cur, - int tag) -{ - int ret; - size_t len; - asn1_buf *buf; - - /* Get main sequence tag */ - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( ret ); - - if( *p + len != end ) - return( POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - while( *p < end ) - { - buf = &(cur->buf); - buf->tag = **p; - - if( ( ret = asn1_get_tag( p, end, &buf->len, tag ) ) != 0 ) - return( ret ); - - buf->p = *p; - *p += buf->len; - - /* Allocate and assign next pointer */ - if( *p < end ) - { - cur->next = (asn1_sequence *) polarssl_malloc( - sizeof( asn1_sequence ) ); - - if( cur->next == NULL ) - return( POLARSSL_ERR_ASN1_MALLOC_FAILED ); - - cur = cur->next; - } - } - - /* Set final sequence entry's next pointer to NULL */ - cur->next = NULL; - - if( *p != end ) - return( POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int asn1_get_alg( unsigned char **p, - const unsigned char *end, - asn1_buf *alg, asn1_buf *params ) -{ - int ret; - size_t len; - - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( ret ); - - if( ( end - *p ) < 1 ) - return( POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - alg->tag = **p; - end = *p + len; - - if( ( ret = asn1_get_tag( p, end, &alg->len, ASN1_OID ) ) != 0 ) - return( ret ); - - alg->p = *p; - *p += alg->len; - - if( *p == end ) - { - memset( params, 0, sizeof(asn1_buf) ); - return( 0 ); - } - - params->tag = **p; - (*p)++; - - if( ( ret = asn1_get_len( p, end, ¶ms->len ) ) != 0 ) - return( ret ); - - params->p = *p; - *p += params->len; - - if( *p != end ) - return( POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int asn1_get_alg_null( unsigned char **p, - const unsigned char *end, - asn1_buf *alg ) -{ - int ret; - asn1_buf params; - - memset( ¶ms, 0, sizeof(asn1_buf) ); - - if( ( ret = asn1_get_alg( p, end, alg, ¶ms ) ) != 0 ) - return( ret ); - - if( ( params.tag != ASN1_NULL && params.tag != 0 ) || params.len != 0 ) - return( POLARSSL_ERR_ASN1_INVALID_DATA ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -void asn1_free_named_data( asn1_named_data *cur ) -{ - if( cur == NULL ) - return; - - polarssl_free( cur->oid.p ); - polarssl_free( cur->val.p ); - - memset( cur, 0, sizeof( asn1_named_data ) ); -} - -SSL_ROM_TEXT_SECTION -void asn1_free_named_data_list( asn1_named_data **head ) -{ - asn1_named_data *cur; - - while( ( cur = *head ) != NULL ) - { - *head = cur->next; - asn1_free_named_data( cur ); - polarssl_free( cur ); - } -} - -SSL_ROM_TEXT_SECTION -asn1_named_data *asn1_find_named_data( asn1_named_data *list, - const char *oid, size_t len ) -{ - while( list != NULL ) - { - if( list->oid.len == len && - memcmp( list->oid.p, oid, len ) == 0 ) - { - break; - } - - list = list->next; - } - - return( list ); -} - -#endif /* POLARSSL_ASN1_PARSE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/asn1write.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/asn1write.c deleted file mode 100644 index 7614580..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/asn1write.c +++ /dev/null @@ -1,380 +0,0 @@ -/* - * ASN.1 buffer writing functionality - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ASN1_WRITE_C) - -#include "polarssl/asn1write.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#include -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -SSL_ROM_TEXT_SECTION -int asn1_write_len( unsigned char **p, unsigned char *start, size_t len ) -{ - if( len < 0x80 ) - { - if( *p - start < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - *--(*p) = (unsigned char) len; - return( 1 ); - } - - if( len <= 0xFF ) - { - if( *p - start < 2 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - *--(*p) = (unsigned char) len; - *--(*p) = 0x81; - return( 2 ); - } - - if( *p - start < 3 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - // We assume we never have lengths larger than 65535 bytes - // - *--(*p) = len % 256; - *--(*p) = ( len / 256 ) % 256; - *--(*p) = 0x82; - - return( 3 ); -} - -SSL_ROM_TEXT_SECTION -int asn1_write_tag( unsigned char **p, unsigned char *start, unsigned char tag ) -{ - if( *p - start < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - *--(*p) = tag; - - return( 1 ); -} - -SSL_ROM_TEXT_SECTION -int asn1_write_raw_buffer( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t size ) -{ - size_t len = 0; - - if( *p - start < (int) size ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - len = size; - (*p) -= len; - memcpy( *p, buf, len ); - - return( (int) len ); -} - -#if defined(POLARSSL_BIGNUM_C) -SSL_ROM_TEXT_SECTION -int asn1_write_mpi( unsigned char **p, unsigned char *start, mpi *X ) -{ - int ret; - size_t len = 0; - - // Write the MPI - // - len = mpi_size( X ); - - if( *p - start < (int) len ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - (*p) -= len; - MPI_CHK( mpi_write_binary( X, *p, len ) ); - - // DER format assumes 2s complement for numbers, so the leftmost bit - // should be 0 for positive numbers and 1 for negative numbers. - // - if( X->s ==1 && **p & 0x80 ) - { - if( *p - start < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - *--(*p) = 0x00; - len += 1; - } - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_INTEGER ) ); - - ret = (int) len; - -cleanup: - return( ret ); -} -#endif /* POLARSSL_BIGNUM_C */ - -SSL_ROM_TEXT_SECTION -int asn1_write_null( unsigned char **p, unsigned char *start ) -{ - int ret; - size_t len = 0; - - // Write NULL - // - ASN1_CHK_ADD( len, asn1_write_len( p, start, 0) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_NULL ) ); - - return( (int) len ); -} - -SSL_ROM_TEXT_SECTION -int asn1_write_oid( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len ) -{ - int ret; - size_t len = 0; - - ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, - (const unsigned char *) oid, oid_len ) ); - ASN1_CHK_ADD( len , asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len , asn1_write_tag( p, start, ASN1_OID ) ); - - return( (int) len ); -} - -SSL_ROM_TEXT_SECTION -int asn1_write_algorithm_identifier( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len, - size_t par_len ) -{ - int ret; - size_t len = 0; - - if( par_len == 0 ) - ASN1_CHK_ADD( len, asn1_write_null( p, start ) ); - else - len += par_len; - - ASN1_CHK_ADD( len, asn1_write_oid( p, start, oid, oid_len ) ); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ); - - return( (int) len ); -} - -SSL_ROM_TEXT_SECTION -int asn1_write_bool( unsigned char **p, unsigned char *start, int boolean ) -{ - int ret; - size_t len = 0; - - if( *p - start < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - *--(*p) = (boolean) ? 1 : 0; - len++; - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_BOOLEAN ) ); - - return( (int) len ); -} - -SSL_ROM_TEXT_SECTION -int asn1_write_int( unsigned char **p, unsigned char *start, int val ) -{ - int ret; - size_t len = 0; - - // TODO negative values and values larger than 128 - // DER format assumes 2s complement for numbers, so the leftmost bit - // should be 0 for positive numbers and 1 for negative numbers. - // - if( *p - start < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - len += 1; - *--(*p) = val; - - if( val > 0 && **p & 0x80 ) - { - if( *p - start < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - *--(*p) = 0x00; - len += 1; - } - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_INTEGER ) ); - - return( (int) len ); -} - -SSL_ROM_TEXT_SECTION -int asn1_write_printable_string( unsigned char **p, unsigned char *start, - const char *text, size_t text_len ) -{ - int ret; - size_t len = 0; - - ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, - (const unsigned char *) text, text_len ) ); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_PRINTABLE_STRING ) ); - - return( (int) len ); -} - -SSL_ROM_TEXT_SECTION -int asn1_write_ia5_string( unsigned char **p, unsigned char *start, - const char *text, size_t text_len ) -{ - int ret; - size_t len = 0; - - ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, - (const unsigned char *) text, text_len ) ); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_IA5_STRING ) ); - - return( (int) len ); -} - -SSL_ROM_TEXT_SECTION -int asn1_write_bitstring( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t bits ) -{ - int ret; - size_t len = 0, size; - - size = ( bits / 8 ) + ( ( bits % 8 ) ? 1 : 0 ); - - // Calculate byte length - // - if( *p - start < (int) size + 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - len = size + 1; - (*p) -= size; - memcpy( *p, buf, size ); - - // Write unused bits - // - *--(*p) = (unsigned char) (size * 8 - bits); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_BIT_STRING ) ); - - return( (int) len ); -} - -SSL_ROM_TEXT_SECTION -int asn1_write_octet_string( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t size ) -{ - int ret; - size_t len = 0; - - ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, buf, size ) ); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_OCTET_STRING ) ); - - return( (int) len ); -} - -SSL_ROM_TEXT_SECTION -asn1_named_data *asn1_store_named_data( asn1_named_data **head, - const char *oid, size_t oid_len, - const unsigned char *val, - size_t val_len ) -{ - asn1_named_data *cur; - - if( ( cur = asn1_find_named_data( *head, oid, oid_len ) ) == NULL ) - { - // Add new entry if not present yet based on OID - // - if( ( cur = polarssl_malloc( sizeof(asn1_named_data) ) ) == NULL ) - return( NULL ); - - memset( cur, 0, sizeof(asn1_named_data) ); - - cur->oid.len = oid_len; - cur->oid.p = polarssl_malloc( oid_len ); - if( cur->oid.p == NULL ) - { - polarssl_free( cur ); - return( NULL ); - } - - cur->val.len = val_len; - cur->val.p = polarssl_malloc( val_len ); - if( cur->val.p == NULL ) - { - polarssl_free( cur->oid.p ); - polarssl_free( cur ); - return( NULL ); - } - - memcpy( cur->oid.p, oid, oid_len ); - - cur->next = *head; - *head = cur; - } - else if( cur->val.len < val_len ) - { - // Enlarge existing value buffer if needed - // - polarssl_free( cur->val.p ); - cur->val.p = NULL; - - cur->val.len = val_len; - cur->val.p = polarssl_malloc( val_len ); - if( cur->val.p == NULL ) - { - polarssl_free( cur->oid.p ); - polarssl_free( cur ); - return( NULL ); - } - } - - if( val != NULL ) - memcpy( cur->val.p, val, val_len ); - - return( cur ); -} -#endif /* POLARSSL_ASN1_WRITE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/base64.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/base64.c deleted file mode 100644 index 4366f9d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/base64.c +++ /dev/null @@ -1,277 +0,0 @@ -/* - * RFC 1521 base64 encoding/decoding - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_BASE64_C) - -#include "polarssl/base64.h" - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -SSL_ROM_DATA_SECTION -static const unsigned char base64_enc_map[64] = -{ - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', - 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', - 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', - 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', - 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', - 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', '+', '/' -}; - -SSL_ROM_DATA_SECTION -static const unsigned char base64_dec_map[128] = -{ - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 62, 127, 127, 127, 63, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 127, 127, - 127, 64, 127, 127, 127, 0, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 127, 127, 127, 127, 127, 127, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 127, 127, 127, 127, 127 -}; - -/* - * Encode a buffer into base64 format - */ -SSL_ROM_TEXT_SECTION -int base64_encode( unsigned char *dst, size_t *dlen, - const unsigned char *src, size_t slen ) -{ - size_t i, n; - int C1, C2, C3; - unsigned char *p; - - if( slen == 0 ) - return( 0 ); - - n = ( slen << 3 ) / 6; - - switch( ( slen << 3 ) - ( n * 6 ) ) - { - case 2: n += 3; break; - case 4: n += 2; break; - default: break; - } - - if( *dlen < n + 1 ) - { - *dlen = n + 1; - return( POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL ); - } - - n = ( slen / 3 ) * 3; - - for( i = 0, p = dst; i < n; i += 3 ) - { - C1 = *src++; - C2 = *src++; - C3 = *src++; - - *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; - *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; - *p++ = base64_enc_map[(((C2 & 15) << 2) + (C3 >> 6)) & 0x3F]; - *p++ = base64_enc_map[C3 & 0x3F]; - } - - if( i < slen ) - { - C1 = *src++; - C2 = ( ( i + 1 ) < slen ) ? *src++ : 0; - - *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; - *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; - - if( ( i + 1 ) < slen ) - *p++ = base64_enc_map[((C2 & 15) << 2) & 0x3F]; - else *p++ = '='; - - *p++ = '='; - } - - *dlen = p - dst; - *p = 0; - - return( 0 ); -} - -/* - * Decode a base64-formatted buffer - */ -SSL_ROM_TEXT_SECTION -int base64_decode( unsigned char *dst, size_t *dlen, - const unsigned char *src, size_t slen ) -{ - size_t i, n; - uint32_t j, x; - unsigned char *p; - - for( i = n = j = 0; i < slen; i++ ) - { - if( ( slen - i ) >= 2 && - src[i] == '\r' && src[i + 1] == '\n' ) - continue; - - if( src[i] == '\n' ) - continue; - - if( src[i] == '=' && ++j > 2 ) - return( POLARSSL_ERR_BASE64_INVALID_CHARACTER ); - - if( src[i] > 127 || base64_dec_map[src[i]] == 127 ) - return( POLARSSL_ERR_BASE64_INVALID_CHARACTER ); - - if( base64_dec_map[src[i]] < 64 && j != 0 ) - return( POLARSSL_ERR_BASE64_INVALID_CHARACTER ); - - n++; - } - - if( n == 0 ) - return( 0 ); - - n = ( ( n * 6 ) + 7 ) >> 3; - n -= j; - - if( dst == NULL || *dlen < n ) - { - *dlen = n; - return( POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL ); - } - - for( j = 3, n = x = 0, p = dst; i > 0; i--, src++ ) - { - if( *src == '\r' || *src == '\n' ) - continue; - - j -= ( base64_dec_map[*src] == 64 ); - x = ( x << 6 ) | ( base64_dec_map[*src] & 0x3F ); - - if( ++n == 4 ) - { - n = 0; - if( j > 0 ) *p++ = (unsigned char)( x >> 16 ); - if( j > 1 ) *p++ = (unsigned char)( x >> 8 ); - if( j > 2 ) *p++ = (unsigned char)( x ); - } - } - - *dlen = p - dst; - - return( 0 ); -} - -#if defined(POLARSSL_SELF_TEST) - -#include -#include - -static const unsigned char base64_test_dec[64] = -{ - 0x24, 0x48, 0x6E, 0x56, 0x87, 0x62, 0x5A, 0xBD, - 0xBF, 0x17, 0xD9, 0xA2, 0xC4, 0x17, 0x1A, 0x01, - 0x94, 0xED, 0x8F, 0x1E, 0x11, 0xB3, 0xD7, 0x09, - 0x0C, 0xB6, 0xE9, 0x10, 0x6F, 0x22, 0xEE, 0x13, - 0xCA, 0xB3, 0x07, 0x05, 0x76, 0xC9, 0xFA, 0x31, - 0x6C, 0x08, 0x34, 0xFF, 0x8D, 0xC2, 0x6C, 0x38, - 0x00, 0x43, 0xE9, 0x54, 0x97, 0xAF, 0x50, 0x4B, - 0xD1, 0x41, 0xBA, 0x95, 0x31, 0x5A, 0x0B, 0x97 -}; - -static const unsigned char base64_test_enc[] = - "JEhuVodiWr2/F9mixBcaAZTtjx4Rs9cJDLbpEG8i7hPK" - "swcFdsn6MWwINP+Nwmw4AEPpVJevUEvRQbqVMVoLlw=="; - -/* - * Checkup routine - */ -int base64_self_test( int verbose ) -{ - size_t len; - const unsigned char *src; - unsigned char buffer[128]; - - if( verbose != 0 ) - polarssl_printf( " Base64 encoding test: " ); - - len = sizeof( buffer ); - src = base64_test_dec; - - if( base64_encode( buffer, &len, src, 64 ) != 0 || - memcmp( base64_test_enc, buffer, 88 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n Base64 decoding test: " ); - - len = sizeof( buffer ); - src = base64_test_enc; - - if( base64_decode( buffer, &len, src, 88 ) != 0 || - memcmp( base64_test_dec, buffer, 64 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n\n" ); - - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_BASE64_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/bignum.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/bignum.c deleted file mode 100644 index 77829ed..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/bignum.c +++ /dev/null @@ -1,2400 +0,0 @@ -/* - * Multi-precision integer library - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * This MPI implementation is based on: - * - * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf - * http://www.stillhq.com/extracted/gnupg-api/mpi/ - * http://math.libtomcrypt.com/files/tommath.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_BIGNUM_C) - -#include "polarssl/bignum.h" -#include "polarssl/bn_mul.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#define ciL (sizeof(t_uint)) /* chars in limb */ -#define biL (ciL << 3) /* bits in limb */ -#define biH (ciL << 2) /* half limb size */ - -/* - * Convert between bits/chars and number of limbs - */ -#define BITS_TO_LIMBS(i) (((i) + biL - 1) / biL) -#define CHARS_TO_LIMBS(i) (((i) + ciL - 1) / ciL) - -/* - * Initialize one MPI - */ -SSL_ROM_TEXT_SECTION -void mpi_init( mpi *X ) -{ - if( X == NULL ) - return; - - X->s = 1; - X->n = 0; - X->p = NULL; -} - -/* - * Unallocate one MPI - */ -SSL_ROM_TEXT_SECTION -void mpi_free( mpi *X ) -{ - if( X == NULL ) - return; - - if( X->p != NULL ) - { - polarssl_zeroize( X->p, X->n * ciL ); - polarssl_free( X->p ); - } - - X->s = 1; - X->n = 0; - X->p = NULL; -} - -/* - * Enlarge to the specified number of limbs - */ -SSL_ROM_TEXT_SECTION -int mpi_grow( mpi *X, size_t nblimbs ) -{ - t_uint *p; - - if( nblimbs > POLARSSL_MPI_MAX_LIMBS ) - return( POLARSSL_ERR_MPI_MALLOC_FAILED ); - - if( X->n < nblimbs ) - { - if( ( p = (t_uint *) polarssl_malloc( nblimbs * ciL ) ) == NULL ) - return( POLARSSL_ERR_MPI_MALLOC_FAILED ); - - memset( p, 0, nblimbs * ciL ); - - if( X->p != NULL ) - { - memcpy( p, X->p, X->n * ciL ); - polarssl_zeroize( X->p, X->n * ciL ); - polarssl_free( X->p ); - } - - X->n = nblimbs; - X->p = p; - } - - return( 0 ); -} - -/* - * Resize down as much as possible, - * while keeping at least the specified number of limbs - */ -SSL_ROM_TEXT_SECTION -int mpi_shrink( mpi *X, size_t nblimbs ) -{ - t_uint *p; - size_t i; - - /* Actually resize up in this case */ - if( X->n <= nblimbs ) - return( mpi_grow( X, nblimbs ) ); - - for( i = X->n - 1; i > 0; i-- ) - if( X->p[i] != 0 ) - break; - i++; - - if( i < nblimbs ) - i = nblimbs; - - if( ( p = (t_uint *) polarssl_malloc( i * ciL ) ) == NULL ) - return( POLARSSL_ERR_MPI_MALLOC_FAILED ); - - memset( p, 0, i * ciL ); - - if( X->p != NULL ) - { - memcpy( p, X->p, i * ciL ); - polarssl_zeroize( X->p, X->n * ciL ); - polarssl_free( X->p ); - } - - X->n = i; - X->p = p; - - return( 0 ); -} - -/* - * Copy the contents of Y into X - */ -SSL_ROM_TEXT_SECTION -int mpi_copy( mpi *X, const mpi *Y ) -{ - int ret; - size_t i; - - if( X == Y ) - return( 0 ); - - if( Y->p == NULL ) - { - mpi_free( X ); - return( 0 ); - } - - for( i = Y->n - 1; i > 0; i-- ) - if( Y->p[i] != 0 ) - break; - i++; - - X->s = Y->s; - - MPI_CHK( mpi_grow( X, i ) ); - - memset( X->p, 0, X->n * ciL ); - memcpy( X->p, Y->p, i * ciL ); - -cleanup: - - return( ret ); -} - -/* - * Swap the contents of X and Y - */ -SSL_ROM_TEXT_SECTION -void mpi_swap( mpi *X, mpi *Y ) -{ - mpi T; - - memcpy( &T, X, sizeof( mpi ) ); - memcpy( X, Y, sizeof( mpi ) ); - memcpy( Y, &T, sizeof( mpi ) ); -} - -/* - * Conditionally assign X = Y, without leaking information - * about whether the assignment was made or not. - * (Leaking information about the respective sizes of X and Y is ok however.) - */ -SSL_ROM_TEXT_SECTION -int mpi_safe_cond_assign( mpi *X, const mpi *Y, unsigned char assign ) -{ - int ret = 0; - size_t i; - - /* make sure assign is 0 or 1 */ - assign = ( assign != 0 ); - - MPI_CHK( mpi_grow( X, Y->n ) ); - - X->s = X->s * ( 1 - assign ) + Y->s * assign; - - for( i = 0; i < Y->n; i++ ) - X->p[i] = X->p[i] * ( 1 - assign ) + Y->p[i] * assign; - - for( ; i < X->n; i++ ) - X->p[i] *= ( 1 - assign ); - -cleanup: - return( ret ); -} - -/* - * Conditionally swap X and Y, without leaking information - * about whether the swap was made or not. - * Here it is not ok to simply swap the pointers, which whould lead to - * different memory access patterns when X and Y are used afterwards. - */ -SSL_ROM_TEXT_SECTION -int mpi_safe_cond_swap( mpi *X, mpi *Y, unsigned char swap ) -{ - int ret, s; - size_t i; - t_uint tmp; - - if( X == Y ) - return( 0 ); - - /* make sure swap is 0 or 1 */ - swap = ( swap != 0 ); - - MPI_CHK( mpi_grow( X, Y->n ) ); - MPI_CHK( mpi_grow( Y, X->n ) ); - - s = X->s; - X->s = X->s * ( 1 - swap ) + Y->s * swap; - Y->s = Y->s * ( 1 - swap ) + s * swap; - - - for( i = 0; i < X->n; i++ ) - { - tmp = X->p[i]; - X->p[i] = X->p[i] * ( 1 - swap ) + Y->p[i] * swap; - Y->p[i] = Y->p[i] * ( 1 - swap ) + tmp * swap; - } - -cleanup: - return( ret ); -} - -/* - * Set value from integer - */ -SSL_ROM_TEXT_SECTION -int mpi_lset( mpi *X, t_sint z ) -{ - int ret; - - MPI_CHK( mpi_grow( X, 1 ) ); - memset( X->p, 0, X->n * ciL ); - - X->p[0] = ( z < 0 ) ? -z : z; - X->s = ( z < 0 ) ? -1 : 1; - -cleanup: - - return( ret ); -} - -/* - * Get a specific bit - */ -SSL_ROM_TEXT_SECTION -int mpi_get_bit( const mpi *X, size_t pos ) -{ - if( X->n * biL <= pos ) - return( 0 ); - - return( ( X->p[pos / biL] >> ( pos % biL ) ) & 0x01 ); -} - -/* - * Set a bit to a specific value of 0 or 1 - */ -SSL_ROM_TEXT_SECTION -int mpi_set_bit( mpi *X, size_t pos, unsigned char val ) -{ - int ret = 0; - size_t off = pos / biL; - size_t idx = pos % biL; - - if( val != 0 && val != 1 ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - if( X->n * biL <= pos ) - { - if( val == 0 ) - return( 0 ); - - MPI_CHK( mpi_grow( X, off + 1 ) ); - } - - X->p[off] &= ~( (t_uint) 0x01 << idx ); - X->p[off] |= (t_uint) val << idx; - -cleanup: - - return( ret ); -} - -/* - * Return the number of least significant bits - */ -SSL_ROM_TEXT_SECTION -size_t mpi_lsb( const mpi *X ) -{ - size_t i, j, count = 0; - - for( i = 0; i < X->n; i++ ) - for( j = 0; j < biL; j++, count++ ) - if( ( ( X->p[i] >> j ) & 1 ) != 0 ) - return( count ); - - return( 0 ); -} - -/* - * Return the number of most significant bits - */ -SSL_ROM_TEXT_SECTION -size_t mpi_msb( const mpi *X ) -{ - size_t i, j; - - for( i = X->n - 1; i > 0; i-- ) - if( X->p[i] != 0 ) - break; - - for( j = biL; j > 0; j-- ) - if( ( ( X->p[i] >> ( j - 1 ) ) & 1 ) != 0 ) - break; - - return( ( i * biL ) + j ); -} - -/* - * Return the total size in bytes - */ -SSL_ROM_TEXT_SECTION -size_t mpi_size( const mpi *X ) -{ - return( ( mpi_msb( X ) + 7 ) >> 3 ); -} - -/* - * Convert an ASCII character to digit value - */ -SSL_ROM_TEXT_SECTION -static int mpi_get_digit( t_uint *d, int radix, char c ) -{ - *d = 255; - - if( c >= 0x30 && c <= 0x39 ) *d = c - 0x30; - if( c >= 0x41 && c <= 0x46 ) *d = c - 0x37; - if( c >= 0x61 && c <= 0x66 ) *d = c - 0x57; - - if( *d >= (t_uint) radix ) - return( POLARSSL_ERR_MPI_INVALID_CHARACTER ); - - return( 0 ); -} - -/* - * Import from an ASCII string - */ -SSL_ROM_TEXT_SECTION -int mpi_read_string( mpi *X, int radix, const char *s ) -{ - int ret; - size_t i, j, slen, n; - t_uint d; - mpi T; - - if( radix < 2 || radix > 16 ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - mpi_init( &T ); - - slen = strlen( s ); - - if( radix == 16 ) - { - n = BITS_TO_LIMBS( slen << 2 ); - - MPI_CHK( mpi_grow( X, n ) ); - MPI_CHK( mpi_lset( X, 0 ) ); - - for( i = slen, j = 0; i > 0; i--, j++ ) - { - if( i == 1 && s[i - 1] == '-' ) - { - X->s = -1; - break; - } - - MPI_CHK( mpi_get_digit( &d, radix, s[i - 1] ) ); - X->p[j / ( 2 * ciL )] |= d << ( ( j % ( 2 * ciL ) ) << 2 ); - } - } - else - { - MPI_CHK( mpi_lset( X, 0 ) ); - - for( i = 0; i < slen; i++ ) - { - if( i == 0 && s[i] == '-' ) - { - X->s = -1; - continue; - } - - MPI_CHK( mpi_get_digit( &d, radix, s[i] ) ); - MPI_CHK( mpi_mul_int( &T, X, radix ) ); - - if( X->s == 1 ) - { - MPI_CHK( mpi_add_int( X, &T, d ) ); - } - else - { - MPI_CHK( mpi_sub_int( X, &T, d ) ); - } - } - } - -cleanup: - - mpi_free( &T ); - - return( ret ); -} - -/* - * Helper to write the digits high-order first - */ -SSL_ROM_TEXT_SECTION -static int mpi_write_hlp( mpi *X, int radix, char **p ) -{ - int ret; - t_uint r; - - if( radix < 2 || radix > 16 ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - MPI_CHK( mpi_mod_int( &r, X, radix ) ); - MPI_CHK( mpi_div_int( X, NULL, X, radix ) ); - - if( mpi_cmp_int( X, 0 ) != 0 ) - MPI_CHK( mpi_write_hlp( X, radix, p ) ); - - if( r < 10 ) - *(*p)++ = (char)( r + 0x30 ); - else - *(*p)++ = (char)( r + 0x37 ); - -cleanup: - - return( ret ); -} - -/* - * Export into an ASCII string - */ -SSL_ROM_TEXT_SECTION -int mpi_write_string( const mpi *X, int radix, char *s, size_t *slen ) -{ - int ret = 0; - size_t n; - char *p; - mpi T; - - if( radix < 2 || radix > 16 ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - n = mpi_msb( X ); - if( radix >= 4 ) n >>= 1; - if( radix >= 16 ) n >>= 1; - n += 3; - - if( *slen < n ) - { - *slen = n; - return( POLARSSL_ERR_MPI_BUFFER_TOO_SMALL ); - } - - p = s; - mpi_init( &T ); - - if( X->s == -1 ) - *p++ = '-'; - - if( radix == 16 ) - { - int c; - size_t i, j, k; - - for( i = X->n, k = 0; i > 0; i-- ) - { - for( j = ciL; j > 0; j-- ) - { - c = ( X->p[i - 1] >> ( ( j - 1 ) << 3) ) & 0xFF; - - if( c == 0 && k == 0 && ( i + j ) != 2 ) - continue; - - *(p++) = "0123456789ABCDEF" [c / 16]; - *(p++) = "0123456789ABCDEF" [c % 16]; - k = 1; - } - } - } - else - { - MPI_CHK( mpi_copy( &T, X ) ); - - if( T.s == -1 ) - T.s = 1; - - MPI_CHK( mpi_write_hlp( &T, radix, &p ) ); - } - - *p++ = '\0'; - *slen = p - s; - -cleanup: - - mpi_free( &T ); - - return( ret ); -} - -#if defined(POLARSSL_FS_IO) -/* - * Read X from an opened file - */ -SSL_ROM_TEXT_SECTION -int mpi_read_file( mpi *X, int radix, FILE *fin ) -{ - t_uint d; - size_t slen; - char *p; - /* - * Buffer should have space for (short) label and decimal formatted MPI, - * newline characters and '\0' - */ - char s[ POLARSSL_MPI_RW_BUFFER_SIZE ]; - - memset( s, 0, sizeof( s ) ); - if( fgets( s, sizeof( s ) - 1, fin ) == NULL ) - return( POLARSSL_ERR_MPI_FILE_IO_ERROR ); - - slen = strlen( s ); - if( slen == sizeof( s ) - 2 ) - return( POLARSSL_ERR_MPI_BUFFER_TOO_SMALL ); - - if( s[slen - 1] == '\n' ) { slen--; s[slen] = '\0'; } - if( s[slen - 1] == '\r' ) { slen--; s[slen] = '\0'; } - - p = s + slen; - while( --p >= s ) - if( mpi_get_digit( &d, radix, *p ) != 0 ) - break; - - return( mpi_read_string( X, radix, p + 1 ) ); -} - -/* - * Write X into an opened file (or stdout if fout == NULL) - */ -SSL_ROM_TEXT_SECTION -int mpi_write_file( const char *p, const mpi *X, int radix, FILE *fout ) -{ - int ret; - size_t n, slen, plen; - /* - * Buffer should have space for (short) label and decimal formatted MPI, - * newline characters and '\0' - */ - char s[ POLARSSL_MPI_RW_BUFFER_SIZE ]; - - n = sizeof( s ); - memset( s, 0, n ); - n -= 2; - - MPI_CHK( mpi_write_string( X, radix, s, (size_t *) &n ) ); - - if( p == NULL ) p = ""; - - plen = strlen( p ); - slen = strlen( s ); - s[slen++] = '\r'; - s[slen++] = '\n'; - - if( fout != NULL ) - { - if( fwrite( p, 1, plen, fout ) != plen || - fwrite( s, 1, slen, fout ) != slen ) - return( POLARSSL_ERR_MPI_FILE_IO_ERROR ); - } - else - polarssl_printf( "%s%s", p, s ); - -cleanup: - - return( ret ); -} -#endif /* POLARSSL_FS_IO */ - -/* - * Import X from unsigned binary data, big endian - */ -SSL_ROM_TEXT_SECTION -int mpi_read_binary( mpi *X, const unsigned char *buf, size_t buflen ) -{ - int ret; - size_t i, j, n; - - for( n = 0; n < buflen; n++ ) - if( buf[n] != 0 ) - break; - - MPI_CHK( mpi_grow( X, CHARS_TO_LIMBS( buflen - n ) ) ); - MPI_CHK( mpi_lset( X, 0 ) ); - - for( i = buflen, j = 0; i > n; i--, j++ ) - X->p[j / ciL] |= ((t_uint) buf[i - 1]) << ((j % ciL) << 3); - -cleanup: - - return( ret ); -} - -/* - * Export X into unsigned binary data, big endian - */ -SSL_ROM_TEXT_SECTION -int mpi_write_binary( const mpi *X, unsigned char *buf, size_t buflen ) -{ - size_t i, j, n; - - n = mpi_size( X ); - - if( buflen < n ) - return( POLARSSL_ERR_MPI_BUFFER_TOO_SMALL ); - - memset( buf, 0, buflen ); - - for( i = buflen - 1, j = 0; n > 0; i--, j++, n-- ) - buf[i] = (unsigned char)( X->p[j / ciL] >> ((j % ciL) << 3) ); - - return( 0 ); -} - -/* - * Left-shift: X <<= count - */ -SSL_ROM_TEXT_SECTION -int mpi_shift_l( mpi *X, size_t count ) -{ - int ret; - size_t i, v0, t1; - t_uint r0 = 0, r1; - - v0 = count / (biL ); - t1 = count & (biL - 1); - - i = mpi_msb( X ) + count; - - if( X->n * biL < i ) - MPI_CHK( mpi_grow( X, BITS_TO_LIMBS( i ) ) ); - - ret = 0; - - /* - * shift by count / limb_size - */ - if( v0 > 0 ) - { - for( i = X->n; i > v0; i-- ) - X->p[i - 1] = X->p[i - v0 - 1]; - - for( ; i > 0; i-- ) - X->p[i - 1] = 0; - } - - /* - * shift by count % limb_size - */ - if( t1 > 0 ) - { - for( i = v0; i < X->n; i++ ) - { - r1 = X->p[i] >> (biL - t1); - X->p[i] <<= t1; - X->p[i] |= r0; - r0 = r1; - } - } - -cleanup: - - return( ret ); -} - -/* - * Right-shift: X >>= count - */ -SSL_ROM_TEXT_SECTION -int mpi_shift_r( mpi *X, size_t count ) -{ - size_t i, v0, v1; - t_uint r0 = 0, r1; - - v0 = count / biL; - v1 = count & (biL - 1); - - if( v0 > X->n || ( v0 == X->n && v1 > 0 ) ) - return mpi_lset( X, 0 ); - - /* - * shift by count / limb_size - */ - if( v0 > 0 ) - { - for( i = 0; i < X->n - v0; i++ ) - X->p[i] = X->p[i + v0]; - - for( ; i < X->n; i++ ) - X->p[i] = 0; - } - - /* - * shift by count % limb_size - */ - if( v1 > 0 ) - { - for( i = X->n; i > 0; i-- ) - { - r1 = X->p[i - 1] << (biL - v1); - X->p[i - 1] >>= v1; - X->p[i - 1] |= r0; - r0 = r1; - } - } - - return( 0 ); -} - -/* - * Compare unsigned values - */ -SSL_ROM_TEXT_SECTION -int mpi_cmp_abs( const mpi *X, const mpi *Y ) -{ - size_t i, j; - - for( i = X->n; i > 0; i-- ) - if( X->p[i - 1] != 0 ) - break; - - for( j = Y->n; j > 0; j-- ) - if( Y->p[j - 1] != 0 ) - break; - - if( i == 0 && j == 0 ) - return( 0 ); - - if( i > j ) return( 1 ); - if( j > i ) return( -1 ); - - for( ; i > 0; i-- ) - { - if( X->p[i - 1] > Y->p[i - 1] ) return( 1 ); - if( X->p[i - 1] < Y->p[i - 1] ) return( -1 ); - } - - return( 0 ); -} - -/* - * Compare signed values - */ -SSL_ROM_TEXT_SECTION -int mpi_cmp_mpi( const mpi *X, const mpi *Y ) -{ - size_t i, j; - - for( i = X->n; i > 0; i-- ) - if( X->p[i - 1] != 0 ) - break; - - for( j = Y->n; j > 0; j-- ) - if( Y->p[j - 1] != 0 ) - break; - - if( i == 0 && j == 0 ) - return( 0 ); - - if( i > j ) return( X->s ); - if( j > i ) return( -Y->s ); - - if( X->s > 0 && Y->s < 0 ) return( 1 ); - if( Y->s > 0 && X->s < 0 ) return( -1 ); - - for( ; i > 0; i-- ) - { - if( X->p[i - 1] > Y->p[i - 1] ) return( X->s ); - if( X->p[i - 1] < Y->p[i - 1] ) return( -X->s ); - } - - return( 0 ); -} - -/* - * Compare signed values - */ -SSL_ROM_TEXT_SECTION -int mpi_cmp_int( const mpi *X, t_sint z ) -{ - mpi Y; - t_uint p[1]; - - *p = ( z < 0 ) ? -z : z; - Y.s = ( z < 0 ) ? -1 : 1; - Y.n = 1; - Y.p = p; - - return( mpi_cmp_mpi( X, &Y ) ); -} - -/* - * Unsigned addition: X = |A| + |B| (HAC 14.7) - */ -SSL_ROM_TEXT_SECTION -int mpi_add_abs( mpi *X, const mpi *A, const mpi *B ) -{ - int ret; - size_t i, j; - t_uint *o, *p, c; - - if( X == B ) - { - const mpi *T = A; A = X; B = T; - } - - if( X != A ) - MPI_CHK( mpi_copy( X, A ) ); - - /* - * X should always be positive as a result of unsigned additions. - */ - X->s = 1; - - for( j = B->n; j > 0; j-- ) - if( B->p[j - 1] != 0 ) - break; - - MPI_CHK( mpi_grow( X, j ) ); - - o = B->p; p = X->p; c = 0; - - for( i = 0; i < j; i++, o++, p++ ) - { - *p += c; c = ( *p < c ); - *p += *o; c += ( *p < *o ); - } - - while( c != 0 ) - { - if( i >= X->n ) - { - MPI_CHK( mpi_grow( X, i + 1 ) ); - p = X->p + i; - } - - *p += c; c = ( *p < c ); i++; p++; - } - -cleanup: - - return( ret ); -} - -/* - * Helper for mpi subtraction - */ -SSL_ROM_TEXT_SECTION -static void mpi_sub_hlp( size_t n, t_uint *s, t_uint *d ) -{ - size_t i; - t_uint c, z; - - for( i = c = 0; i < n; i++, s++, d++ ) - { - z = ( *d < c ); *d -= c; - c = ( *d < *s ) + z; *d -= *s; - } - - while( c != 0 ) - { - z = ( *d < c ); *d -= c; - c = z; i++; d++; - } -} - -/* - * Unsigned subtraction: X = |A| - |B| (HAC 14.9) - */ -SSL_ROM_TEXT_SECTION -int mpi_sub_abs( mpi *X, const mpi *A, const mpi *B ) -{ - mpi TB; - int ret; - size_t n; - - if( mpi_cmp_abs( A, B ) < 0 ) - return( POLARSSL_ERR_MPI_NEGATIVE_VALUE ); - - mpi_init( &TB ); - - if( X == B ) - { - MPI_CHK( mpi_copy( &TB, B ) ); - B = &TB; - } - - if( X != A ) - MPI_CHK( mpi_copy( X, A ) ); - - /* - * X should always be positive as a result of unsigned subtractions. - */ - X->s = 1; - - ret = 0; - - for( n = B->n; n > 0; n-- ) - if( B->p[n - 1] != 0 ) - break; - - mpi_sub_hlp( n, B->p, X->p ); - -cleanup: - - mpi_free( &TB ); - - return( ret ); -} - -/* - * Signed addition: X = A + B - */ -SSL_ROM_TEXT_SECTION -int mpi_add_mpi( mpi *X, const mpi *A, const mpi *B ) -{ - int ret, s = A->s; - - if( A->s * B->s < 0 ) - { - if( mpi_cmp_abs( A, B ) >= 0 ) - { - MPI_CHK( mpi_sub_abs( X, A, B ) ); - X->s = s; - } - else - { - MPI_CHK( mpi_sub_abs( X, B, A ) ); - X->s = -s; - } - } - else - { - MPI_CHK( mpi_add_abs( X, A, B ) ); - X->s = s; - } - -cleanup: - - return( ret ); -} - -/* - * Signed subtraction: X = A - B - */ -SSL_ROM_TEXT_SECTION -int mpi_sub_mpi( mpi *X, const mpi *A, const mpi *B ) -{ - int ret, s = A->s; - - if( A->s * B->s > 0 ) - { - if( mpi_cmp_abs( A, B ) >= 0 ) - { - MPI_CHK( mpi_sub_abs( X, A, B ) ); - X->s = s; - } - else - { - MPI_CHK( mpi_sub_abs( X, B, A ) ); - X->s = -s; - } - } - else - { - MPI_CHK( mpi_add_abs( X, A, B ) ); - X->s = s; - } - -cleanup: - - return( ret ); -} - -/* - * Signed addition: X = A + b - */ -SSL_ROM_TEXT_SECTION -int mpi_add_int( mpi *X, const mpi *A, t_sint b ) -{ - mpi _B; - t_uint p[1]; - - p[0] = ( b < 0 ) ? -b : b; - _B.s = ( b < 0 ) ? -1 : 1; - _B.n = 1; - _B.p = p; - - return( mpi_add_mpi( X, A, &_B ) ); -} - -/* - * Signed subtraction: X = A - b - */ -SSL_ROM_TEXT_SECTION -int mpi_sub_int( mpi *X, const mpi *A, t_sint b ) -{ - mpi _B; - t_uint p[1]; - - p[0] = ( b < 0 ) ? -b : b; - _B.s = ( b < 0 ) ? -1 : 1; - _B.n = 1; - _B.p = p; - - return( mpi_sub_mpi( X, A, &_B ) ); -} - -/* - * Helper for mpi multiplication - */ -SSL_ROM_TEXT_SECTION -static -#if defined(__APPLE__) && defined(__arm__) -/* - * Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn) - * appears to need this to prevent bad ARM code generation at -O3. - */ -__attribute__ ((noinline)) -#endif -void mpi_mul_hlp( size_t i, t_uint *s, t_uint *d, t_uint b ) -{ - t_uint c = 0, t = 0; - -#if defined(MULADDC_HUIT) - for( ; i >= 8; i -= 8 ) - { - MULADDC_INIT - MULADDC_HUIT - MULADDC_STOP - } - - for( ; i > 0; i-- ) - { - MULADDC_INIT - MULADDC_CORE - MULADDC_STOP - } -#else /* MULADDC_HUIT */ - for( ; i >= 16; i -= 16 ) - { - MULADDC_INIT - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - MULADDC_STOP - } - - for( ; i >= 8; i -= 8 ) - { - MULADDC_INIT - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - - MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE - MULADDC_STOP - } - - for( ; i > 0; i-- ) - { - MULADDC_INIT - MULADDC_CORE - MULADDC_STOP - } -#endif /* MULADDC_HUIT */ - - t++; - - do { - *d += c; c = ( *d < c ); d++; - } - while( c != 0 ); -} - -/* - * Baseline multiplication: X = A * B (HAC 14.12) - */ -SSL_ROM_TEXT_SECTION -int mpi_mul_mpi( mpi *X, const mpi *A, const mpi *B ) -{ - int ret; - size_t i, j; - mpi TA, TB; - - mpi_init( &TA ); mpi_init( &TB ); - - if( X == A ) { MPI_CHK( mpi_copy( &TA, A ) ); A = &TA; } - if( X == B ) { MPI_CHK( mpi_copy( &TB, B ) ); B = &TB; } - - for( i = A->n; i > 0; i-- ) - if( A->p[i - 1] != 0 ) - break; - - for( j = B->n; j > 0; j-- ) - if( B->p[j - 1] != 0 ) - break; - - MPI_CHK( mpi_grow( X, i + j ) ); - MPI_CHK( mpi_lset( X, 0 ) ); - - for( i++; j > 0; j-- ) - mpi_mul_hlp( i - 1, A->p, X->p + j - 1, B->p[j - 1] ); - - X->s = A->s * B->s; - -cleanup: - - mpi_free( &TB ); mpi_free( &TA ); - - return( ret ); -} - -/* - * Baseline multiplication: X = A * b - */ -SSL_ROM_TEXT_SECTION -int mpi_mul_int( mpi *X, const mpi *A, t_sint b ) -{ - mpi _B; - t_uint p[1]; - - _B.s = 1; - _B.n = 1; - _B.p = p; - p[0] = b; - - return( mpi_mul_mpi( X, A, &_B ) ); -} - -/* - * Division by mpi: A = Q * B + R (HAC 14.20) - */ -SSL_ROM_TEXT_SECTION -int mpi_div_mpi( mpi *Q, mpi *R, const mpi *A, const mpi *B ) -{ - int ret; - size_t i, n, t, k; - mpi X, Y, Z, T1, T2; - - if( mpi_cmp_int( B, 0 ) == 0 ) - return( POLARSSL_ERR_MPI_DIVISION_BY_ZERO ); - - mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); - mpi_init( &T1 ); mpi_init( &T2 ); - - if( mpi_cmp_abs( A, B ) < 0 ) - { - if( Q != NULL ) MPI_CHK( mpi_lset( Q, 0 ) ); - if( R != NULL ) MPI_CHK( mpi_copy( R, A ) ); - return( 0 ); - } - - MPI_CHK( mpi_copy( &X, A ) ); - MPI_CHK( mpi_copy( &Y, B ) ); - X.s = Y.s = 1; - - MPI_CHK( mpi_grow( &Z, A->n + 2 ) ); - MPI_CHK( mpi_lset( &Z, 0 ) ); - MPI_CHK( mpi_grow( &T1, 2 ) ); - MPI_CHK( mpi_grow( &T2, 3 ) ); - - k = mpi_msb( &Y ) % biL; - if( k < biL - 1 ) - { - k = biL - 1 - k; - MPI_CHK( mpi_shift_l( &X, k ) ); - MPI_CHK( mpi_shift_l( &Y, k ) ); - } - else k = 0; - - n = X.n - 1; - t = Y.n - 1; - MPI_CHK( mpi_shift_l( &Y, biL * ( n - t ) ) ); - - while( mpi_cmp_mpi( &X, &Y ) >= 0 ) - { - Z.p[n - t]++; - MPI_CHK( mpi_sub_mpi( &X, &X, &Y ) ); - } - MPI_CHK( mpi_shift_r( &Y, biL * ( n - t ) ) ); - - for( i = n; i > t ; i-- ) - { - if( X.p[i] >= Y.p[t] ) - Z.p[i - t - 1] = ~0; - else - { - /* - * The version of Clang shipped by Apple with Mavericks around - * 2014-03 can't handle 128-bit division properly. Disable - * 128-bits division for this version. Let's be optimistic and - * assume it'll be fixed in the next minor version (next - * patchlevel is probably a bit too optimistic). - */ -#if defined(POLARSSL_HAVE_UDBL) && \ - ! ( defined(__x86_64__) && defined(__APPLE__) && \ - defined(__clang_major__) && __clang_major__ == 5 && \ - defined(__clang_minor__) && __clang_minor__ == 0 ) - t_udbl r; - - r = (t_udbl) X.p[i] << biL; - r |= (t_udbl) X.p[i - 1]; - r /= Y.p[t]; - if( r > ( (t_udbl) 1 << biL ) - 1 ) - r = ( (t_udbl) 1 << biL ) - 1; - - Z.p[i - t - 1] = (t_uint) r; -#else - /* - * __udiv_qrnnd_c, from gmp/longlong.h - */ - t_uint q0, q1, r0, r1; - t_uint d0, d1, d, m; - - d = Y.p[t]; - d0 = ( d << biH ) >> biH; - d1 = ( d >> biH ); - - q1 = X.p[i] / d1; - r1 = X.p[i] - d1 * q1; - r1 <<= biH; - r1 |= ( X.p[i - 1] >> biH ); - - m = q1 * d0; - if( r1 < m ) - { - q1--, r1 += d; - while( r1 >= d && r1 < m ) - q1--, r1 += d; - } - r1 -= m; - - q0 = r1 / d1; - r0 = r1 - d1 * q0; - r0 <<= biH; - r0 |= ( X.p[i - 1] << biH ) >> biH; - - m = q0 * d0; - if( r0 < m ) - { - q0--, r0 += d; - while( r0 >= d && r0 < m ) - q0--, r0 += d; - } - r0 -= m; - - Z.p[i - t - 1] = ( q1 << biH ) | q0; -#endif /* POLARSSL_HAVE_UDBL && !64-bit Apple with Clang 5.0 */ - } - - Z.p[i - t - 1]++; - do - { - Z.p[i - t - 1]--; - - MPI_CHK( mpi_lset( &T1, 0 ) ); - T1.p[0] = ( t < 1 ) ? 0 : Y.p[t - 1]; - T1.p[1] = Y.p[t]; - MPI_CHK( mpi_mul_int( &T1, &T1, Z.p[i - t - 1] ) ); - - MPI_CHK( mpi_lset( &T2, 0 ) ); - T2.p[0] = ( i < 2 ) ? 0 : X.p[i - 2]; - T2.p[1] = ( i < 1 ) ? 0 : X.p[i - 1]; - T2.p[2] = X.p[i]; - } - while( mpi_cmp_mpi( &T1, &T2 ) > 0 ); - - MPI_CHK( mpi_mul_int( &T1, &Y, Z.p[i - t - 1] ) ); - MPI_CHK( mpi_shift_l( &T1, biL * ( i - t - 1 ) ) ); - MPI_CHK( mpi_sub_mpi( &X, &X, &T1 ) ); - - if( mpi_cmp_int( &X, 0 ) < 0 ) - { - MPI_CHK( mpi_copy( &T1, &Y ) ); - MPI_CHK( mpi_shift_l( &T1, biL * ( i - t - 1 ) ) ); - MPI_CHK( mpi_add_mpi( &X, &X, &T1 ) ); - Z.p[i - t - 1]--; - } - } - - if( Q != NULL ) - { - MPI_CHK( mpi_copy( Q, &Z ) ); - Q->s = A->s * B->s; - } - - if( R != NULL ) - { - MPI_CHK( mpi_shift_r( &X, k ) ); - X.s = A->s; - MPI_CHK( mpi_copy( R, &X ) ); - - if( mpi_cmp_int( R, 0 ) == 0 ) - R->s = 1; - } - -cleanup: - - mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); - mpi_free( &T1 ); mpi_free( &T2 ); - - return( ret ); -} - -/* - * Division by int: A = Q * b + R - */ -SSL_ROM_TEXT_SECTION -int mpi_div_int( mpi *Q, mpi *R, const mpi *A, t_sint b ) -{ - mpi _B; - t_uint p[1]; - - p[0] = ( b < 0 ) ? -b : b; - _B.s = ( b < 0 ) ? -1 : 1; - _B.n = 1; - _B.p = p; - - return( mpi_div_mpi( Q, R, A, &_B ) ); -} - -/* - * Modulo: R = A mod B - */ -SSL_ROM_TEXT_SECTION -int mpi_mod_mpi( mpi *R, const mpi *A, const mpi *B ) -{ - int ret; - - if( mpi_cmp_int( B, 0 ) < 0 ) - return( POLARSSL_ERR_MPI_NEGATIVE_VALUE ); - - MPI_CHK( mpi_div_mpi( NULL, R, A, B ) ); - - while( mpi_cmp_int( R, 0 ) < 0 ) - MPI_CHK( mpi_add_mpi( R, R, B ) ); - - while( mpi_cmp_mpi( R, B ) >= 0 ) - MPI_CHK( mpi_sub_mpi( R, R, B ) ); - -cleanup: - - return( ret ); -} - -/* - * Modulo: r = A mod b - */ -SSL_ROM_TEXT_SECTION -int mpi_mod_int( t_uint *r, const mpi *A, t_sint b ) -{ - size_t i; - t_uint x, y, z; - - if( b == 0 ) - return( POLARSSL_ERR_MPI_DIVISION_BY_ZERO ); - - if( b < 0 ) - return( POLARSSL_ERR_MPI_NEGATIVE_VALUE ); - - /* - * handle trivial cases - */ - if( b == 1 ) - { - *r = 0; - return( 0 ); - } - - if( b == 2 ) - { - *r = A->p[0] & 1; - return( 0 ); - } - - /* - * general case - */ - for( i = A->n, y = 0; i > 0; i-- ) - { - x = A->p[i - 1]; - y = ( y << biH ) | ( x >> biH ); - z = y / b; - y -= z * b; - - x <<= biH; - y = ( y << biH ) | ( x >> biH ); - z = y / b; - y -= z * b; - } - - /* - * If A is negative, then the current y represents a negative value. - * Flipping it to the positive side. - */ - if( A->s < 0 && y != 0 ) - y = b - y; - - *r = y; - - return( 0 ); -} - -/* - * Fast Montgomery initialization (thanks to Tom St Denis) - */ -SSL_ROM_TEXT_SECTION -static void mpi_montg_init( t_uint *mm, const mpi *N ) -{ - t_uint x, m0 = N->p[0]; - unsigned int i; - - x = m0; - x += ( ( m0 + 2 ) & 4 ) << 1; - - for( i = biL; i >= 8; i /= 2 ) - x *= ( 2 - ( m0 * x ) ); - - *mm = ~x + 1; -} - -/* - * Montgomery multiplication: A = A * B * R^-1 mod N (HAC 14.36) - */ -SSL_ROM_TEXT_SECTION -static void mpi_montmul( mpi *A, const mpi *B, const mpi *N, t_uint mm, - const mpi *T ) -{ - size_t i, n, m; - t_uint u0, u1, *d; - - memset( T->p, 0, T->n * ciL ); - - d = T->p; - n = N->n; - m = ( B->n < n ) ? B->n : n; - - for( i = 0; i < n; i++ ) - { - /* - * T = (T + u0*B + u1*N) / 2^biL - */ - u0 = A->p[i]; - u1 = ( d[0] + u0 * B->p[0] ) * mm; - - mpi_mul_hlp( m, B->p, d, u0 ); - mpi_mul_hlp( n, N->p, d, u1 ); - - *d++ = u0; d[n + 1] = 0; - } - - memcpy( A->p, d, ( n + 1 ) * ciL ); - - if( mpi_cmp_abs( A, N ) >= 0 ) - mpi_sub_hlp( n, N->p, A->p ); - else - /* prevent timing attacks */ - mpi_sub_hlp( n, A->p, T->p ); -} - -/* - * Montgomery reduction: A = A * R^-1 mod N - */ -SSL_ROM_TEXT_SECTION -static void mpi_montred( mpi *A, const mpi *N, t_uint mm, const mpi *T ) -{ - t_uint z = 1; - mpi U; - - U.n = U.s = (int) z; - U.p = &z; - - mpi_montmul( A, &U, N, mm, T ); -} - -/* - * Sliding-window exponentiation: X = A^E mod N (HAC 14.85) - */ -SSL_ROM_TEXT_SECTION -int mpi_exp_mod( mpi *X, const mpi *A, const mpi *E, const mpi *N, mpi *_RR ) -{ - int ret; - size_t wbits, wsize, one = 1; - size_t i, j, nblimbs; - size_t bufsize, nbits; - t_uint ei, mm, state; - mpi RR, T, W[ 2 << POLARSSL_MPI_WINDOW_SIZE ], Apos; - int neg; - - if( mpi_cmp_int( N, 0 ) < 0 || ( N->p[0] & 1 ) == 0 ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - if( mpi_cmp_int( E, 0 ) < 0 ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - /* - * Init temps and window size - */ - mpi_montg_init( &mm, N ); - mpi_init( &RR ); mpi_init( &T ); - mpi_init( &Apos ); - memset( W, 0, sizeof( W ) ); - - i = mpi_msb( E ); - - wsize = ( i > 671 ) ? 6 : ( i > 239 ) ? 5 : - ( i > 79 ) ? 4 : ( i > 23 ) ? 3 : 1; - - if( wsize > POLARSSL_MPI_WINDOW_SIZE ) - wsize = POLARSSL_MPI_WINDOW_SIZE; - - j = N->n + 1; - MPI_CHK( mpi_grow( X, j ) ); - MPI_CHK( mpi_grow( &W[1], j ) ); - MPI_CHK( mpi_grow( &T, j * 2 ) ); - - /* - * Compensate for negative A (and correct at the end) - */ - neg = ( A->s == -1 ); - if( neg ) - { - MPI_CHK( mpi_copy( &Apos, A ) ); - Apos.s = 1; - A = &Apos; - } - - /* - * If 1st call, pre-compute R^2 mod N - */ - if( _RR == NULL || _RR->p == NULL ) - { - MPI_CHK( mpi_lset( &RR, 1 ) ); - MPI_CHK( mpi_shift_l( &RR, N->n * 2 * biL ) ); - MPI_CHK( mpi_mod_mpi( &RR, &RR, N ) ); - - if( _RR != NULL ) - memcpy( _RR, &RR, sizeof( mpi ) ); - } - else - memcpy( &RR, _RR, sizeof( mpi ) ); - - /* - * W[1] = A * R^2 * R^-1 mod N = A * R mod N - */ - if( mpi_cmp_mpi( A, N ) >= 0 ) - MPI_CHK( mpi_mod_mpi( &W[1], A, N ) ); - else - MPI_CHK( mpi_copy( &W[1], A ) ); - - mpi_montmul( &W[1], &RR, N, mm, &T ); - - /* - * X = R^2 * R^-1 mod N = R mod N - */ - MPI_CHK( mpi_copy( X, &RR ) ); - mpi_montred( X, N, mm, &T ); - - if( wsize > 1 ) - { - /* - * W[1 << (wsize - 1)] = W[1] ^ (wsize - 1) - */ - j = one << ( wsize - 1 ); - - MPI_CHK( mpi_grow( &W[j], N->n + 1 ) ); - MPI_CHK( mpi_copy( &W[j], &W[1] ) ); - - for( i = 0; i < wsize - 1; i++ ) - mpi_montmul( &W[j], &W[j], N, mm, &T ); - - /* - * W[i] = W[i - 1] * W[1] - */ - for( i = j + 1; i < ( one << wsize ); i++ ) - { - MPI_CHK( mpi_grow( &W[i], N->n + 1 ) ); - MPI_CHK( mpi_copy( &W[i], &W[i - 1] ) ); - - mpi_montmul( &W[i], &W[1], N, mm, &T ); - } - } - - nblimbs = E->n; - bufsize = 0; - nbits = 0; - wbits = 0; - state = 0; - - while( 1 ) - { - if( bufsize == 0 ) - { - if( nblimbs == 0 ) - break; - - nblimbs--; - - bufsize = sizeof( t_uint ) << 3; - } - - bufsize--; - - ei = (E->p[nblimbs] >> bufsize) & 1; - - /* - * skip leading 0s - */ - if( ei == 0 && state == 0 ) - continue; - - if( ei == 0 && state == 1 ) - { - /* - * out of window, square X - */ - mpi_montmul( X, X, N, mm, &T ); - continue; - } - - /* - * add ei to current window - */ - state = 2; - - nbits++; - wbits |= ( ei << ( wsize - nbits ) ); - - if( nbits == wsize ) - { - /* - * X = X^wsize R^-1 mod N - */ - for( i = 0; i < wsize; i++ ) - mpi_montmul( X, X, N, mm, &T ); - - /* - * X = X * W[wbits] R^-1 mod N - */ - mpi_montmul( X, &W[wbits], N, mm, &T ); - - state--; - nbits = 0; - wbits = 0; - } - } - - /* - * process the remaining bits - */ - for( i = 0; i < nbits; i++ ) - { - mpi_montmul( X, X, N, mm, &T ); - - wbits <<= 1; - - if( ( wbits & ( one << wsize ) ) != 0 ) - mpi_montmul( X, &W[1], N, mm, &T ); - } - - /* - * X = A^E * R * R^-1 mod N = A^E mod N - */ - mpi_montred( X, N, mm, &T ); - - if( neg ) - { - X->s = -1; - MPI_CHK( mpi_add_mpi( X, N, X ) ); - } - -cleanup: - - for( i = ( one << ( wsize - 1 ) ); i < ( one << wsize ); i++ ) - mpi_free( &W[i] ); - - mpi_free( &W[1] ); mpi_free( &T ); mpi_free( &Apos ); - - if( _RR == NULL || _RR->p == NULL ) - mpi_free( &RR ); - - return( ret ); -} - -/* - * Greatest common divisor: G = gcd(A, B) (HAC 14.54) - */ -SSL_ROM_TEXT_SECTION -int mpi_gcd( mpi *G, const mpi *A, const mpi *B ) -{ - int ret; - size_t lz, lzt; - mpi TG, TA, TB; - - mpi_init( &TG ); mpi_init( &TA ); mpi_init( &TB ); - - MPI_CHK( mpi_copy( &TA, A ) ); - MPI_CHK( mpi_copy( &TB, B ) ); - - lz = mpi_lsb( &TA ); - lzt = mpi_lsb( &TB ); - - if( lzt < lz ) - lz = lzt; - - MPI_CHK( mpi_shift_r( &TA, lz ) ); - MPI_CHK( mpi_shift_r( &TB, lz ) ); - - TA.s = TB.s = 1; - - while( mpi_cmp_int( &TA, 0 ) != 0 ) - { - MPI_CHK( mpi_shift_r( &TA, mpi_lsb( &TA ) ) ); - MPI_CHK( mpi_shift_r( &TB, mpi_lsb( &TB ) ) ); - - if( mpi_cmp_mpi( &TA, &TB ) >= 0 ) - { - MPI_CHK( mpi_sub_abs( &TA, &TA, &TB ) ); - MPI_CHK( mpi_shift_r( &TA, 1 ) ); - } - else - { - MPI_CHK( mpi_sub_abs( &TB, &TB, &TA ) ); - MPI_CHK( mpi_shift_r( &TB, 1 ) ); - } - } - - MPI_CHK( mpi_shift_l( &TB, lz ) ); - MPI_CHK( mpi_copy( G, &TB ) ); - -cleanup: - - mpi_free( &TG ); mpi_free( &TA ); mpi_free( &TB ); - - return( ret ); -} - -/* - * Fill X with size bytes of random. - * - * Use a temporary bytes representation to make sure the result is the same - * regardless of the platform endianness (useful when f_rng is actually - * deterministic, eg for tests). - */ -SSL_ROM_TEXT_SECTION -int mpi_fill_random( mpi *X, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - unsigned char buf[POLARSSL_MPI_MAX_SIZE]; - - if( size > POLARSSL_MPI_MAX_SIZE ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - MPI_CHK( f_rng( p_rng, buf, size ) ); - MPI_CHK( mpi_read_binary( X, buf, size ) ); - -cleanup: - return( ret ); -} - -/* - * Modular inverse: X = A^-1 mod N (HAC 14.61 / 14.64) - */ -SSL_ROM_TEXT_SECTION -int mpi_inv_mod( mpi *X, const mpi *A, const mpi *N ) -{ - int ret; - mpi G, TA, TU, U1, U2, TB, TV, V1, V2; - - if( mpi_cmp_int( N, 0 ) <= 0 ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - mpi_init( &TA ); mpi_init( &TU ); mpi_init( &U1 ); mpi_init( &U2 ); - mpi_init( &G ); mpi_init( &TB ); mpi_init( &TV ); - mpi_init( &V1 ); mpi_init( &V2 ); - - MPI_CHK( mpi_gcd( &G, A, N ) ); - - if( mpi_cmp_int( &G, 1 ) != 0 ) - { - ret = POLARSSL_ERR_MPI_NOT_ACCEPTABLE; - goto cleanup; - } - - MPI_CHK( mpi_mod_mpi( &TA, A, N ) ); - MPI_CHK( mpi_copy( &TU, &TA ) ); - MPI_CHK( mpi_copy( &TB, N ) ); - MPI_CHK( mpi_copy( &TV, N ) ); - - MPI_CHK( mpi_lset( &U1, 1 ) ); - MPI_CHK( mpi_lset( &U2, 0 ) ); - MPI_CHK( mpi_lset( &V1, 0 ) ); - MPI_CHK( mpi_lset( &V2, 1 ) ); - - do - { - while( ( TU.p[0] & 1 ) == 0 ) - { - MPI_CHK( mpi_shift_r( &TU, 1 ) ); - - if( ( U1.p[0] & 1 ) != 0 || ( U2.p[0] & 1 ) != 0 ) - { - MPI_CHK( mpi_add_mpi( &U1, &U1, &TB ) ); - MPI_CHK( mpi_sub_mpi( &U2, &U2, &TA ) ); - } - - MPI_CHK( mpi_shift_r( &U1, 1 ) ); - MPI_CHK( mpi_shift_r( &U2, 1 ) ); - } - - while( ( TV.p[0] & 1 ) == 0 ) - { - MPI_CHK( mpi_shift_r( &TV, 1 ) ); - - if( ( V1.p[0] & 1 ) != 0 || ( V2.p[0] & 1 ) != 0 ) - { - MPI_CHK( mpi_add_mpi( &V1, &V1, &TB ) ); - MPI_CHK( mpi_sub_mpi( &V2, &V2, &TA ) ); - } - - MPI_CHK( mpi_shift_r( &V1, 1 ) ); - MPI_CHK( mpi_shift_r( &V2, 1 ) ); - } - - if( mpi_cmp_mpi( &TU, &TV ) >= 0 ) - { - MPI_CHK( mpi_sub_mpi( &TU, &TU, &TV ) ); - MPI_CHK( mpi_sub_mpi( &U1, &U1, &V1 ) ); - MPI_CHK( mpi_sub_mpi( &U2, &U2, &V2 ) ); - } - else - { - MPI_CHK( mpi_sub_mpi( &TV, &TV, &TU ) ); - MPI_CHK( mpi_sub_mpi( &V1, &V1, &U1 ) ); - MPI_CHK( mpi_sub_mpi( &V2, &V2, &U2 ) ); - } - } - while( mpi_cmp_int( &TU, 0 ) != 0 ); - - while( mpi_cmp_int( &V1, 0 ) < 0 ) - MPI_CHK( mpi_add_mpi( &V1, &V1, N ) ); - - while( mpi_cmp_mpi( &V1, N ) >= 0 ) - MPI_CHK( mpi_sub_mpi( &V1, &V1, N ) ); - - MPI_CHK( mpi_copy( X, &V1 ) ); - -cleanup: - - mpi_free( &TA ); mpi_free( &TU ); mpi_free( &U1 ); mpi_free( &U2 ); - mpi_free( &G ); mpi_free( &TB ); mpi_free( &TV ); - mpi_free( &V1 ); mpi_free( &V2 ); - - return( ret ); -} - -#if defined(POLARSSL_GENPRIME) - -SSL_ROM_DATA_SECTION -static const int small_prime[] = -{ - 3, 5, 7, 11, 13, 17, 19, 23, - 29, 31, 37, 41, 43, 47, 53, 59, - 61, 67, 71, 73, 79, 83, 89, 97, - 101, 103, 107, 109, 113, 127, 131, 137, - 139, 149, 151, 157, 163, 167, 173, 179, - 181, 191, 193, 197, 199, 211, 223, 227, - 229, 233, 239, 241, 251, 257, 263, 269, - 271, 277, 281, 283, 293, 307, 311, 313, - 317, 331, 337, 347, 349, 353, 359, 367, - 373, 379, 383, 389, 397, 401, 409, 419, - 421, 431, 433, 439, 443, 449, 457, 461, - 463, 467, 479, 487, 491, 499, 503, 509, - 521, 523, 541, 547, 557, 563, 569, 571, - 577, 587, 593, 599, 601, 607, 613, 617, - 619, 631, 641, 643, 647, 653, 659, 661, - 673, 677, 683, 691, 701, 709, 719, 727, - 733, 739, 743, 751, 757, 761, 769, 773, - 787, 797, 809, 811, 821, 823, 827, 829, - 839, 853, 857, 859, 863, 877, 881, 883, - 887, 907, 911, 919, 929, 937, 941, 947, - 953, 967, 971, 977, 983, 991, 997, -103 -}; - -/* - * Small divisors test (X must be positive) - * - * Return values: - * 0: no small factor (possible prime, more tests needed) - * 1: certain prime - * POLARSSL_ERR_MPI_NOT_ACCEPTABLE: certain non-prime - * other negative: error - */ -SSL_ROM_TEXT_SECTION -static int mpi_check_small_factors( const mpi *X ) -{ - int ret = 0; - size_t i; - t_uint r; - - if( ( X->p[0] & 1 ) == 0 ) - return( POLARSSL_ERR_MPI_NOT_ACCEPTABLE ); - - for( i = 0; small_prime[i] > 0; i++ ) - { - if( mpi_cmp_int( X, small_prime[i] ) <= 0 ) - return( 1 ); - - MPI_CHK( mpi_mod_int( &r, X, small_prime[i] ) ); - - if( r == 0 ) - return( POLARSSL_ERR_MPI_NOT_ACCEPTABLE ); - } - -cleanup: - return( ret ); -} - -/* - * Miller-Rabin pseudo-primality test (HAC 4.24) - */ -SSL_ROM_TEXT_SECTION -static int mpi_miller_rabin( const mpi *X, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - size_t i, j, n, s; - mpi W, R, T, A, RR; - - mpi_init( &W ); mpi_init( &R ); mpi_init( &T ); mpi_init( &A ); - mpi_init( &RR ); - - /* - * W = |X| - 1 - * R = W >> lsb( W ) - */ - MPI_CHK( mpi_sub_int( &W, X, 1 ) ); - s = mpi_lsb( &W ); - MPI_CHK( mpi_copy( &R, &W ) ); - MPI_CHK( mpi_shift_r( &R, s ) ); - - i = mpi_msb( X ); - /* - * HAC, table 4.4 - */ - n = ( ( i >= 1300 ) ? 2 : ( i >= 850 ) ? 3 : - ( i >= 650 ) ? 4 : ( i >= 350 ) ? 8 : - ( i >= 250 ) ? 12 : ( i >= 150 ) ? 18 : 27 ); - - for( i = 0; i < n; i++ ) - { - /* - * pick a random A, 1 < A < |X| - 1 - */ - MPI_CHK( mpi_fill_random( &A, X->n * ciL, f_rng, p_rng ) ); - - if( mpi_cmp_mpi( &A, &W ) >= 0 ) - { - j = mpi_msb( &A ) - mpi_msb( &W ); - MPI_CHK( mpi_shift_r( &A, j + 1 ) ); - } - A.p[0] |= 3; - - /* - * A = A^R mod |X| - */ - MPI_CHK( mpi_exp_mod( &A, &A, &R, X, &RR ) ); - - if( mpi_cmp_mpi( &A, &W ) == 0 || - mpi_cmp_int( &A, 1 ) == 0 ) - continue; - - j = 1; - while( j < s && mpi_cmp_mpi( &A, &W ) != 0 ) - { - /* - * A = A * A mod |X| - */ - MPI_CHK( mpi_mul_mpi( &T, &A, &A ) ); - MPI_CHK( mpi_mod_mpi( &A, &T, X ) ); - - if( mpi_cmp_int( &A, 1 ) == 0 ) - break; - - j++; - } - - /* - * not prime if A != |X| - 1 or A == 1 - */ - if( mpi_cmp_mpi( &A, &W ) != 0 || - mpi_cmp_int( &A, 1 ) == 0 ) - { - ret = POLARSSL_ERR_MPI_NOT_ACCEPTABLE; - break; - } - } - -cleanup: - mpi_free( &W ); mpi_free( &R ); mpi_free( &T ); mpi_free( &A ); - mpi_free( &RR ); - - return( ret ); -} - -/* - * Pseudo-primality test: small factors, then Miller-Rabin - */ -SSL_ROM_TEXT_SECTION -int mpi_is_prime( mpi *X, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - const mpi XX = { 1, X->n, X->p }; /* Abs(X) */ - - if( mpi_cmp_int( &XX, 0 ) == 0 || - mpi_cmp_int( &XX, 1 ) == 0 ) - return( POLARSSL_ERR_MPI_NOT_ACCEPTABLE ); - - if( mpi_cmp_int( &XX, 2 ) == 0 ) - return( 0 ); - - if( ( ret = mpi_check_small_factors( &XX ) ) != 0 ) - { - if( ret == 1 ) - return( 0 ); - - return( ret ); - } - - return( mpi_miller_rabin( &XX, f_rng, p_rng ) ); -} - -/* - * Prime number generation - */ -SSL_ROM_TEXT_SECTION -int mpi_gen_prime( mpi *X, size_t nbits, int dh_flag, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - size_t k, n; - t_uint r; - mpi Y; - - if( nbits < 3 || nbits > POLARSSL_MPI_MAX_BITS ) - return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); - - mpi_init( &Y ); - - n = BITS_TO_LIMBS( nbits ); - - MPI_CHK( mpi_fill_random( X, n * ciL, f_rng, p_rng ) ); - - k = mpi_msb( X ); - if( k < nbits ) MPI_CHK( mpi_shift_l( X, nbits - k ) ); - if( k > nbits ) MPI_CHK( mpi_shift_r( X, k - nbits ) ); - - X->p[0] |= 3; - - if( dh_flag == 0 ) - { - while( ( ret = mpi_is_prime( X, f_rng, p_rng ) ) != 0 ) - { - if( ret != POLARSSL_ERR_MPI_NOT_ACCEPTABLE ) - goto cleanup; - - MPI_CHK( mpi_add_int( X, X, 2 ) ); - } - } - else - { - /* - * An necessary condition for Y and X = 2Y + 1 to be prime - * is X = 2 mod 3 (which is equivalent to Y = 2 mod 3). - * Make sure it is satisfied, while keeping X = 3 mod 4 - */ - MPI_CHK( mpi_mod_int( &r, X, 3 ) ); - if( r == 0 ) - MPI_CHK( mpi_add_int( X, X, 8 ) ); - else if( r == 1 ) - MPI_CHK( mpi_add_int( X, X, 4 ) ); - - /* Set Y = (X-1) / 2, which is X / 2 because X is odd */ - MPI_CHK( mpi_copy( &Y, X ) ); - MPI_CHK( mpi_shift_r( &Y, 1 ) ); - - while( 1 ) - { - /* - * First, check small factors for X and Y - * before doing Miller-Rabin on any of them - */ - if( ( ret = mpi_check_small_factors( X ) ) == 0 && - ( ret = mpi_check_small_factors( &Y ) ) == 0 && - ( ret = mpi_miller_rabin( X, f_rng, p_rng ) ) == 0 && - ( ret = mpi_miller_rabin( &Y, f_rng, p_rng ) ) == 0 ) - { - break; - } - - if( ret != POLARSSL_ERR_MPI_NOT_ACCEPTABLE ) - goto cleanup; - - /* - * Next candidates. We want to preserve Y = (X-1) / 2 and - * Y = 1 mod 2 and Y = 2 mod 3 (eq X = 3 mod 4 and X = 2 mod 3) - * so up Y by 6 and X by 12. - */ - MPI_CHK( mpi_add_int( X, X, 12 ) ); - MPI_CHK( mpi_add_int( &Y, &Y, 6 ) ); - } - } - -cleanup: - - mpi_free( &Y ); - - return( ret ); -} - -#endif /* POLARSSL_GENPRIME */ - -#if defined(POLARSSL_SELF_TEST) - -#define GCD_PAIR_COUNT 3 - -SSL_ROM_DATA_SECTION -static const int gcd_pairs[GCD_PAIR_COUNT][3] = -{ - { 693, 609, 21 }, - { 1764, 868, 28 }, - { 768454923, 542167814, 1 } -}; - -/* - * Checkup routine - */ -SSL_ROM_TEXT_SECTION -int mpi_self_test( int verbose ) -{ - int ret, i; - mpi A, E, N, X, Y, U, V; - - mpi_init( &A ); mpi_init( &E ); mpi_init( &N ); mpi_init( &X ); - mpi_init( &Y ); mpi_init( &U ); mpi_init( &V ); - - MPI_CHK( mpi_read_string( &A, 16, - "EFE021C2645FD1DC586E69184AF4A31E" \ - "D5F53E93B5F123FA41680867BA110131" \ - "944FE7952E2517337780CB0DB80E61AA" \ - "E7C8DDC6C5C6AADEB34EB38A2F40D5E6" ) ); - - MPI_CHK( mpi_read_string( &E, 16, - "B2E7EFD37075B9F03FF989C7C5051C20" \ - "34D2A323810251127E7BF8625A4F49A5" \ - "F3E27F4DA8BD59C47D6DAABA4C8127BD" \ - "5B5C25763222FEFCCFC38B832366C29E" ) ); - - MPI_CHK( mpi_read_string( &N, 16, - "0066A198186C18C10B2F5ED9B522752A" \ - "9830B69916E535C8F047518A889A43A5" \ - "94B6BED27A168D31D4A52F88925AA8F5" ) ); - - MPI_CHK( mpi_mul_mpi( &X, &A, &N ) ); - - MPI_CHK( mpi_read_string( &U, 16, - "602AB7ECA597A3D6B56FF9829A5E8B85" \ - "9E857EA95A03512E2BAE7391688D264A" \ - "A5663B0341DB9CCFD2C4C5F421FEC814" \ - "8001B72E848A38CAE1C65F78E56ABDEF" \ - "E12D3C039B8A02D6BE593F0BBBDA56F1" \ - "ECF677152EF804370C1A305CAF3B5BF1" \ - "30879B56C61DE584A0F53A2447A51E" ) ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #1 (mul_mpi): " ); - - if( mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto cleanup; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - MPI_CHK( mpi_div_mpi( &X, &Y, &A, &N ) ); - - MPI_CHK( mpi_read_string( &U, 16, - "256567336059E52CAE22925474705F39A94" ) ); - - MPI_CHK( mpi_read_string( &V, 16, - "6613F26162223DF488E9CD48CC132C7A" \ - "0AC93C701B001B092E4E5B9F73BCD27B" \ - "9EE50D0657C77F374E903CDFA4C642" ) ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #2 (div_mpi): " ); - - if( mpi_cmp_mpi( &X, &U ) != 0 || - mpi_cmp_mpi( &Y, &V ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto cleanup; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - MPI_CHK( mpi_exp_mod( &X, &A, &E, &N, NULL ) ); - - MPI_CHK( mpi_read_string( &U, 16, - "36E139AEA55215609D2816998ED020BB" \ - "BD96C37890F65171D948E9BC7CBAA4D9" \ - "325D24D6A3C12710F10A09FA08AB87" ) ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #3 (exp_mod): " ); - - if( mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto cleanup; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - MPI_CHK( mpi_inv_mod( &X, &A, &N ) ); - - MPI_CHK( mpi_read_string( &U, 16, - "003A0AAEDD7E784FC07D8F9EC6E3BFD5" \ - "C3DBA76456363A10869622EAC2DD84EC" \ - "C5B8A74DAC4D09E03B5E0BE779F2DF61" ) ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #4 (inv_mod): " ); - - if( mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto cleanup; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #5 (simple gcd): " ); - - for( i = 0; i < GCD_PAIR_COUNT; i++ ) - { - MPI_CHK( mpi_lset( &X, gcd_pairs[i][0] ) ); - MPI_CHK( mpi_lset( &Y, gcd_pairs[i][1] ) ); - - MPI_CHK( mpi_gcd( &A, &X, &Y ) ); - - if( mpi_cmp_int( &A, gcd_pairs[i][2] ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed at %d\n", i ); - - ret = 1; - goto cleanup; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - -cleanup: - - if( ret != 0 && verbose != 0 ) - polarssl_printf( "Unexpected error, return code = %08X\n", ret ); - - mpi_free( &A ); mpi_free( &E ); mpi_free( &N ); mpi_free( &X ); - mpi_free( &Y ); mpi_free( &U ); mpi_free( &V ); - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_BIGNUM_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ctr_drbg.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ctr_drbg.c deleted file mode 100644 index 16c83a3..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ctr_drbg.c +++ /dev/null @@ -1,564 +0,0 @@ -/* - * CTR_DRBG implementation based on AES-256 (NIST SP 800-90) - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The NIST SP 800-90 DRBGs are described in the following publucation. - * - * http://csrc.nist.gov/publications/nistpubs/800-90/SP800-90revised_March2007.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_CTR_DRBG_C) - -#include "polarssl/ctr_drbg.h" - -#if defined(POLARSSL_FS_IO) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * Non-public function wrapped by ctr_crbg_init(). Necessary to allow NIST - * tests to succeed (which require known length fixed entropy) - */ -SSL_ROM_TEXT_SECTION -int ctr_drbg_init_entropy_len( - ctr_drbg_context *ctx, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len, - size_t entropy_len ) -{ - int ret; - unsigned char key[CTR_DRBG_KEYSIZE]; - - memset( ctx, 0, sizeof(ctr_drbg_context) ); - memset( key, 0, CTR_DRBG_KEYSIZE ); - - aes_init( &ctx->aes_ctx ); - - ctx->f_entropy = f_entropy; - ctx->p_entropy = p_entropy; - - ctx->entropy_len = entropy_len; - ctx->reseed_interval = CTR_DRBG_RESEED_INTERVAL; - - /* - * Initialize with an empty key - */ - aes_setkey_enc( &ctx->aes_ctx, key, CTR_DRBG_KEYBITS ); - - if( ( ret = ctr_drbg_reseed( ctx, custom, len ) ) != 0 ) - return( ret ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int ctr_drbg_init( ctr_drbg_context *ctx, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len ) -{ - return( ctr_drbg_init_entropy_len( ctx, f_entropy, p_entropy, custom, len, - CTR_DRBG_ENTROPY_LEN ) ); -} - -SSL_ROM_TEXT_SECTION -void ctr_drbg_free( ctr_drbg_context *ctx ) -{ - if( ctx == NULL ) - return; - - aes_free( &ctx->aes_ctx ); - polarssl_zeroize( ctx, sizeof( ctr_drbg_context ) ); -} - -SSL_ROM_TEXT_SECTION -void ctr_drbg_set_prediction_resistance( ctr_drbg_context *ctx, int resistance ) -{ - ctx->prediction_resistance = resistance; -} - -SSL_ROM_TEXT_SECTION -void ctr_drbg_set_entropy_len( ctr_drbg_context *ctx, size_t len ) -{ - ctx->entropy_len = len; -} - -SSL_ROM_TEXT_SECTION -void ctr_drbg_set_reseed_interval( ctr_drbg_context *ctx, int interval ) -{ - ctx->reseed_interval = interval; -} - -SSL_ROM_TEXT_SECTION -static int block_cipher_df( unsigned char *output, - const unsigned char *data, size_t data_len ) -{ - unsigned char buf[CTR_DRBG_MAX_SEED_INPUT + CTR_DRBG_BLOCKSIZE + 16]; - unsigned char tmp[CTR_DRBG_SEEDLEN]; - unsigned char key[CTR_DRBG_KEYSIZE]; - unsigned char chain[CTR_DRBG_BLOCKSIZE]; - unsigned char *p, *iv; - aes_context aes_ctx; - - int i, j; - size_t buf_len, use_len; - - memset( buf, 0, CTR_DRBG_MAX_SEED_INPUT + CTR_DRBG_BLOCKSIZE + 16 ); - aes_init( &aes_ctx ); - - /* - * Construct IV (16 bytes) and S in buffer - * IV = Counter (in 32-bits) padded to 16 with zeroes - * S = Length input string (in 32-bits) || Length of output (in 32-bits) || - * data || 0x80 - * (Total is padded to a multiple of 16-bytes with zeroes) - */ - p = buf + CTR_DRBG_BLOCKSIZE; - *p++ = ( data_len >> 24 ) & 0xff; - *p++ = ( data_len >> 16 ) & 0xff; - *p++ = ( data_len >> 8 ) & 0xff; - *p++ = ( data_len ) & 0xff; - p += 3; - *p++ = CTR_DRBG_SEEDLEN; - memcpy( p, data, data_len ); - p[data_len] = 0x80; - - buf_len = CTR_DRBG_BLOCKSIZE + 8 + data_len + 1; - - for( i = 0; i < CTR_DRBG_KEYSIZE; i++ ) - key[i] = i; - - aes_setkey_enc( &aes_ctx, key, CTR_DRBG_KEYBITS ); - - /* - * Reduce data to POLARSSL_CTR_DRBG_SEEDLEN bytes of data - */ - for( j = 0; j < CTR_DRBG_SEEDLEN; j += CTR_DRBG_BLOCKSIZE ) - { - p = buf; - memset( chain, 0, CTR_DRBG_BLOCKSIZE ); - use_len = buf_len; - - while( use_len > 0 ) - { - for( i = 0; i < CTR_DRBG_BLOCKSIZE; i++ ) - chain[i] ^= p[i]; - p += CTR_DRBG_BLOCKSIZE; - use_len -= ( use_len >= CTR_DRBG_BLOCKSIZE ) ? - CTR_DRBG_BLOCKSIZE : use_len; - - aes_crypt_ecb( &aes_ctx, AES_ENCRYPT, chain, chain ); - } - - memcpy( tmp + j, chain, CTR_DRBG_BLOCKSIZE ); - - /* - * Update IV - */ - buf[3]++; - } - - /* - * Do final encryption with reduced data - */ - aes_setkey_enc( &aes_ctx, tmp, CTR_DRBG_KEYBITS ); - iv = tmp + CTR_DRBG_KEYSIZE; - p = output; - - for( j = 0; j < CTR_DRBG_SEEDLEN; j += CTR_DRBG_BLOCKSIZE ) - { - aes_crypt_ecb( &aes_ctx, AES_ENCRYPT, iv, iv ); - memcpy( p, iv, CTR_DRBG_BLOCKSIZE ); - p += CTR_DRBG_BLOCKSIZE; - } - - aes_free( &aes_ctx ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -static int ctr_drbg_update_internal( ctr_drbg_context *ctx, - const unsigned char data[CTR_DRBG_SEEDLEN] ) -{ - unsigned char tmp[CTR_DRBG_SEEDLEN]; - unsigned char *p = tmp; - int i, j; - - memset( tmp, 0, CTR_DRBG_SEEDLEN ); - - for( j = 0; j < CTR_DRBG_SEEDLEN; j += CTR_DRBG_BLOCKSIZE ) - { - /* - * Increase counter - */ - for( i = CTR_DRBG_BLOCKSIZE; i > 0; i-- ) - if( ++ctx->counter[i - 1] != 0 ) - break; - - /* - * Crypt counter block - */ - aes_crypt_ecb( &ctx->aes_ctx, AES_ENCRYPT, ctx->counter, p ); - - p += CTR_DRBG_BLOCKSIZE; - } - - for( i = 0; i < CTR_DRBG_SEEDLEN; i++ ) - tmp[i] ^= data[i]; - - /* - * Update key and counter - */ - aes_setkey_enc( &ctx->aes_ctx, tmp, CTR_DRBG_KEYBITS ); - memcpy( ctx->counter, tmp + CTR_DRBG_KEYSIZE, CTR_DRBG_BLOCKSIZE ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -void ctr_drbg_update( ctr_drbg_context *ctx, - const unsigned char *additional, size_t add_len ) -{ - unsigned char add_input[CTR_DRBG_SEEDLEN]; - - if( add_len > 0 ) - { - block_cipher_df( add_input, additional, add_len ); - ctr_drbg_update_internal( ctx, add_input ); - } -} - -SSL_ROM_TEXT_SECTION -int ctr_drbg_reseed( ctr_drbg_context *ctx, - const unsigned char *additional, size_t len ) -{ - unsigned char seed[CTR_DRBG_MAX_SEED_INPUT]; - size_t seedlen = 0; - - if( ctx->entropy_len + len > CTR_DRBG_MAX_SEED_INPUT ) - return( POLARSSL_ERR_CTR_DRBG_INPUT_TOO_BIG ); - - memset( seed, 0, CTR_DRBG_MAX_SEED_INPUT ); - - /* - * Gather entropy_len bytes of entropy to seed state - */ - if( 0 != ctx->f_entropy( ctx->p_entropy, seed, - ctx->entropy_len ) ) - { - return( POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED ); - } - - seedlen += ctx->entropy_len; - - /* - * Add additional data - */ - if( additional && len ) - { - memcpy( seed + seedlen, additional, len ); - seedlen += len; - } - - /* - * Reduce to 384 bits - */ - block_cipher_df( seed, seed, seedlen ); - - /* - * Update state - */ - ctr_drbg_update_internal( ctx, seed ); - ctx->reseed_counter = 1; - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int ctr_drbg_random_with_add( void *p_rng, - unsigned char *output, size_t output_len, - const unsigned char *additional, size_t add_len ) -{ - int ret = 0; - ctr_drbg_context *ctx = (ctr_drbg_context *) p_rng; - unsigned char add_input[CTR_DRBG_SEEDLEN]; - unsigned char *p = output; - unsigned char tmp[CTR_DRBG_BLOCKSIZE]; - int i; - size_t use_len; - - if( output_len > CTR_DRBG_MAX_REQUEST ) - return( POLARSSL_ERR_CTR_DRBG_REQUEST_TOO_BIG ); - - if( add_len > CTR_DRBG_MAX_INPUT ) - return( POLARSSL_ERR_CTR_DRBG_INPUT_TOO_BIG ); - - memset( add_input, 0, CTR_DRBG_SEEDLEN ); - - if( ctx->reseed_counter > ctx->reseed_interval || - ctx->prediction_resistance ) - { - if( ( ret = ctr_drbg_reseed( ctx, additional, add_len ) ) != 0 ) - return( ret ); - - add_len = 0; - } - - if( add_len > 0 ) - { - block_cipher_df( add_input, additional, add_len ); - ctr_drbg_update_internal( ctx, add_input ); - } - - while( output_len > 0 ) - { - /* - * Increase counter - */ - for( i = CTR_DRBG_BLOCKSIZE; i > 0; i-- ) - if( ++ctx->counter[i - 1] != 0 ) - break; - - /* - * Crypt counter block - */ - aes_crypt_ecb( &ctx->aes_ctx, AES_ENCRYPT, ctx->counter, tmp ); - - use_len = ( output_len > CTR_DRBG_BLOCKSIZE ) ? CTR_DRBG_BLOCKSIZE : - output_len; - /* - * Copy random block to destination - */ - memcpy( p, tmp, use_len ); - p += use_len; - output_len -= use_len; - } - - ctr_drbg_update_internal( ctx, add_input ); - - ctx->reseed_counter++; - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int ctr_drbg_random( void *p_rng, unsigned char *output, size_t output_len ) -{ - return ctr_drbg_random_with_add( p_rng, output, output_len, NULL, 0 ); -} - -#if defined(POLARSSL_FS_IO) -SSL_ROM_TEXT_SECTION -int ctr_drbg_write_seed_file( ctr_drbg_context *ctx, const char *path ) -{ - int ret = POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR; - FILE *f; - unsigned char buf[ CTR_DRBG_MAX_INPUT ]; - - if( ( f = fopen( path, "wb" ) ) == NULL ) - return( POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR ); - - if( ( ret = ctr_drbg_random( ctx, buf, CTR_DRBG_MAX_INPUT ) ) != 0 ) - goto exit; - - if( fwrite( buf, 1, CTR_DRBG_MAX_INPUT, f ) != CTR_DRBG_MAX_INPUT ) - { - ret = POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR; - goto exit; - } - - ret = 0; - -exit: - fclose( f ); - return( ret ); -} - -SSL_ROM_TEXT_SECTION -int ctr_drbg_update_seed_file( ctr_drbg_context *ctx, const char *path ) -{ - FILE *f; - size_t n; - unsigned char buf[ CTR_DRBG_MAX_INPUT ]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR ); - - fseek( f, 0, SEEK_END ); - n = (size_t) ftell( f ); - fseek( f, 0, SEEK_SET ); - - if( n > CTR_DRBG_MAX_INPUT ) - { - fclose( f ); - return( POLARSSL_ERR_CTR_DRBG_INPUT_TOO_BIG ); - } - - if( fread( buf, 1, n, f ) != n ) - { - fclose( f ); - return( POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR ); - } - - fclose( f ); - - ctr_drbg_update( ctx, buf, n ); - - return( ctr_drbg_write_seed_file( ctx, path ) ); -} -#endif /* POLARSSL_FS_IO */ - -#if defined(POLARSSL_SELF_TEST) - -#include - -static unsigned char entropy_source_pr[96] = - { 0xc1, 0x80, 0x81, 0xa6, 0x5d, 0x44, 0x02, 0x16, - 0x19, 0xb3, 0xf1, 0x80, 0xb1, 0xc9, 0x20, 0x02, - 0x6a, 0x54, 0x6f, 0x0c, 0x70, 0x81, 0x49, 0x8b, - 0x6e, 0xa6, 0x62, 0x52, 0x6d, 0x51, 0xb1, 0xcb, - 0x58, 0x3b, 0xfa, 0xd5, 0x37, 0x5f, 0xfb, 0xc9, - 0xff, 0x46, 0xd2, 0x19, 0xc7, 0x22, 0x3e, 0x95, - 0x45, 0x9d, 0x82, 0xe1, 0xe7, 0x22, 0x9f, 0x63, - 0x31, 0x69, 0xd2, 0x6b, 0x57, 0x47, 0x4f, 0xa3, - 0x37, 0xc9, 0x98, 0x1c, 0x0b, 0xfb, 0x91, 0x31, - 0x4d, 0x55, 0xb9, 0xe9, 0x1c, 0x5a, 0x5e, 0xe4, - 0x93, 0x92, 0xcf, 0xc5, 0x23, 0x12, 0xd5, 0x56, - 0x2c, 0x4a, 0x6e, 0xff, 0xdc, 0x10, 0xd0, 0x68 }; - -static unsigned char entropy_source_nopr[64] = - { 0x5a, 0x19, 0x4d, 0x5e, 0x2b, 0x31, 0x58, 0x14, - 0x54, 0xde, 0xf6, 0x75, 0xfb, 0x79, 0x58, 0xfe, - 0xc7, 0xdb, 0x87, 0x3e, 0x56, 0x89, 0xfc, 0x9d, - 0x03, 0x21, 0x7c, 0x68, 0xd8, 0x03, 0x38, 0x20, - 0xf9, 0xe6, 0x5e, 0x04, 0xd8, 0x56, 0xf3, 0xa9, - 0xc4, 0x4a, 0x4c, 0xbd, 0xc1, 0xd0, 0x08, 0x46, - 0xf5, 0x98, 0x3d, 0x77, 0x1c, 0x1b, 0x13, 0x7e, - 0x4e, 0x0f, 0x9d, 0x8e, 0xf4, 0x09, 0xf9, 0x2e }; - -static const unsigned char nonce_pers_pr[16] = - { 0xd2, 0x54, 0xfc, 0xff, 0x02, 0x1e, 0x69, 0xd2, - 0x29, 0xc9, 0xcf, 0xad, 0x85, 0xfa, 0x48, 0x6c }; - -static const unsigned char nonce_pers_nopr[16] = - { 0x1b, 0x54, 0xb8, 0xff, 0x06, 0x42, 0xbf, 0xf5, - 0x21, 0xf1, 0x5c, 0x1c, 0x0b, 0x66, 0x5f, 0x3f }; - -static const unsigned char result_pr[16] = - { 0x34, 0x01, 0x16, 0x56, 0xb4, 0x29, 0x00, 0x8f, - 0x35, 0x63, 0xec, 0xb5, 0xf2, 0x59, 0x07, 0x23 }; - -static const unsigned char result_nopr[16] = - { 0xa0, 0x54, 0x30, 0x3d, 0x8a, 0x7e, 0xa9, 0x88, - 0x9d, 0x90, 0x3e, 0x07, 0x7c, 0x6f, 0x21, 0x8f }; - -static size_t test_offset; -static int ctr_drbg_self_test_entropy( void *data, unsigned char *buf, - size_t len ) -{ - const unsigned char *p = data; - memcpy( buf, p + test_offset, len ); - test_offset += len; - return( 0 ); -} - -#define CHK( c ) if( (c) != 0 ) \ - { \ - if( verbose != 0 ) \ - polarssl_printf( "failed\n" ); \ - return( 1 ); \ - } - -/* - * Checkup routine - */ -int ctr_drbg_self_test( int verbose ) -{ - ctr_drbg_context ctx; - unsigned char buf[16]; - - /* - * Based on a NIST CTR_DRBG test vector (PR = True) - */ - if( verbose != 0 ) - polarssl_printf( " CTR_DRBG (PR = TRUE) : " ); - - test_offset = 0; - CHK( ctr_drbg_init_entropy_len( &ctx, ctr_drbg_self_test_entropy, - entropy_source_pr, nonce_pers_pr, 16, 32 ) ); - ctr_drbg_set_prediction_resistance( &ctx, CTR_DRBG_PR_ON ); - CHK( ctr_drbg_random( &ctx, buf, CTR_DRBG_BLOCKSIZE ) ); - CHK( ctr_drbg_random( &ctx, buf, CTR_DRBG_BLOCKSIZE ) ); - CHK( memcmp( buf, result_pr, CTR_DRBG_BLOCKSIZE ) ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - /* - * Based on a NIST CTR_DRBG test vector (PR = FALSE) - */ - if( verbose != 0 ) - polarssl_printf( " CTR_DRBG (PR = FALSE): " ); - - test_offset = 0; - CHK( ctr_drbg_init_entropy_len( &ctx, ctr_drbg_self_test_entropy, - entropy_source_nopr, nonce_pers_nopr, 16, 32 ) ); - CHK( ctr_drbg_random( &ctx, buf, 16 ) ); - CHK( ctr_drbg_reseed( &ctx, NULL, 0 ) ); - CHK( ctr_drbg_random( &ctx, buf, 16 ) ); - CHK( memcmp( buf, result_nopr, 16 ) ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_CTR_DRBG_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/des.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/des.c deleted file mode 100644 index 0af6fe3..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/des.c +++ /dev/null @@ -1,1263 +0,0 @@ -/* - * FIPS-46-3 compliant Triple-DES implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * DES, on which TDES is based, was originally designed by Horst Feistel - * at IBM in 1974, and was adopted as a standard by NIST (formerly NBS). - * - * http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif -#ifdef RTL_HW_CRYPTO -#include -#endif -#if defined(POLARSSL_DES_C) - -#include "polarssl/des.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -#if !defined(POLARSSL_DES_ALT) - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - -/* - * Expanded DES S-boxes - */ -SSL_ROM_DATA_SECTION -static const uint32_t SB1[64] = -{ - 0x01010400, 0x00000000, 0x00010000, 0x01010404, - 0x01010004, 0x00010404, 0x00000004, 0x00010000, - 0x00000400, 0x01010400, 0x01010404, 0x00000400, - 0x01000404, 0x01010004, 0x01000000, 0x00000004, - 0x00000404, 0x01000400, 0x01000400, 0x00010400, - 0x00010400, 0x01010000, 0x01010000, 0x01000404, - 0x00010004, 0x01000004, 0x01000004, 0x00010004, - 0x00000000, 0x00000404, 0x00010404, 0x01000000, - 0x00010000, 0x01010404, 0x00000004, 0x01010000, - 0x01010400, 0x01000000, 0x01000000, 0x00000400, - 0x01010004, 0x00010000, 0x00010400, 0x01000004, - 0x00000400, 0x00000004, 0x01000404, 0x00010404, - 0x01010404, 0x00010004, 0x01010000, 0x01000404, - 0x01000004, 0x00000404, 0x00010404, 0x01010400, - 0x00000404, 0x01000400, 0x01000400, 0x00000000, - 0x00010004, 0x00010400, 0x00000000, 0x01010004 -}; - -SSL_ROM_DATA_SECTION -static const uint32_t SB2[64] = -{ - 0x80108020, 0x80008000, 0x00008000, 0x00108020, - 0x00100000, 0x00000020, 0x80100020, 0x80008020, - 0x80000020, 0x80108020, 0x80108000, 0x80000000, - 0x80008000, 0x00100000, 0x00000020, 0x80100020, - 0x00108000, 0x00100020, 0x80008020, 0x00000000, - 0x80000000, 0x00008000, 0x00108020, 0x80100000, - 0x00100020, 0x80000020, 0x00000000, 0x00108000, - 0x00008020, 0x80108000, 0x80100000, 0x00008020, - 0x00000000, 0x00108020, 0x80100020, 0x00100000, - 0x80008020, 0x80100000, 0x80108000, 0x00008000, - 0x80100000, 0x80008000, 0x00000020, 0x80108020, - 0x00108020, 0x00000020, 0x00008000, 0x80000000, - 0x00008020, 0x80108000, 0x00100000, 0x80000020, - 0x00100020, 0x80008020, 0x80000020, 0x00100020, - 0x00108000, 0x00000000, 0x80008000, 0x00008020, - 0x80000000, 0x80100020, 0x80108020, 0x00108000 -}; - -SSL_ROM_DATA_SECTION -static const uint32_t SB3[64] = -{ - 0x00000208, 0x08020200, 0x00000000, 0x08020008, - 0x08000200, 0x00000000, 0x00020208, 0x08000200, - 0x00020008, 0x08000008, 0x08000008, 0x00020000, - 0x08020208, 0x00020008, 0x08020000, 0x00000208, - 0x08000000, 0x00000008, 0x08020200, 0x00000200, - 0x00020200, 0x08020000, 0x08020008, 0x00020208, - 0x08000208, 0x00020200, 0x00020000, 0x08000208, - 0x00000008, 0x08020208, 0x00000200, 0x08000000, - 0x08020200, 0x08000000, 0x00020008, 0x00000208, - 0x00020000, 0x08020200, 0x08000200, 0x00000000, - 0x00000200, 0x00020008, 0x08020208, 0x08000200, - 0x08000008, 0x00000200, 0x00000000, 0x08020008, - 0x08000208, 0x00020000, 0x08000000, 0x08020208, - 0x00000008, 0x00020208, 0x00020200, 0x08000008, - 0x08020000, 0x08000208, 0x00000208, 0x08020000, - 0x00020208, 0x00000008, 0x08020008, 0x00020200 -}; - -SSL_ROM_DATA_SECTION -static const uint32_t SB4[64] = -{ - 0x00802001, 0x00002081, 0x00002081, 0x00000080, - 0x00802080, 0x00800081, 0x00800001, 0x00002001, - 0x00000000, 0x00802000, 0x00802000, 0x00802081, - 0x00000081, 0x00000000, 0x00800080, 0x00800001, - 0x00000001, 0x00002000, 0x00800000, 0x00802001, - 0x00000080, 0x00800000, 0x00002001, 0x00002080, - 0x00800081, 0x00000001, 0x00002080, 0x00800080, - 0x00002000, 0x00802080, 0x00802081, 0x00000081, - 0x00800080, 0x00800001, 0x00802000, 0x00802081, - 0x00000081, 0x00000000, 0x00000000, 0x00802000, - 0x00002080, 0x00800080, 0x00800081, 0x00000001, - 0x00802001, 0x00002081, 0x00002081, 0x00000080, - 0x00802081, 0x00000081, 0x00000001, 0x00002000, - 0x00800001, 0x00002001, 0x00802080, 0x00800081, - 0x00002001, 0x00002080, 0x00800000, 0x00802001, - 0x00000080, 0x00800000, 0x00002000, 0x00802080 -}; - -SSL_ROM_DATA_SECTION -static const uint32_t SB5[64] = -{ - 0x00000100, 0x02080100, 0x02080000, 0x42000100, - 0x00080000, 0x00000100, 0x40000000, 0x02080000, - 0x40080100, 0x00080000, 0x02000100, 0x40080100, - 0x42000100, 0x42080000, 0x00080100, 0x40000000, - 0x02000000, 0x40080000, 0x40080000, 0x00000000, - 0x40000100, 0x42080100, 0x42080100, 0x02000100, - 0x42080000, 0x40000100, 0x00000000, 0x42000000, - 0x02080100, 0x02000000, 0x42000000, 0x00080100, - 0x00080000, 0x42000100, 0x00000100, 0x02000000, - 0x40000000, 0x02080000, 0x42000100, 0x40080100, - 0x02000100, 0x40000000, 0x42080000, 0x02080100, - 0x40080100, 0x00000100, 0x02000000, 0x42080000, - 0x42080100, 0x00080100, 0x42000000, 0x42080100, - 0x02080000, 0x00000000, 0x40080000, 0x42000000, - 0x00080100, 0x02000100, 0x40000100, 0x00080000, - 0x00000000, 0x40080000, 0x02080100, 0x40000100 -}; - -SSL_ROM_DATA_SECTION -static const uint32_t SB6[64] = -{ - 0x20000010, 0x20400000, 0x00004000, 0x20404010, - 0x20400000, 0x00000010, 0x20404010, 0x00400000, - 0x20004000, 0x00404010, 0x00400000, 0x20000010, - 0x00400010, 0x20004000, 0x20000000, 0x00004010, - 0x00000000, 0x00400010, 0x20004010, 0x00004000, - 0x00404000, 0x20004010, 0x00000010, 0x20400010, - 0x20400010, 0x00000000, 0x00404010, 0x20404000, - 0x00004010, 0x00404000, 0x20404000, 0x20000000, - 0x20004000, 0x00000010, 0x20400010, 0x00404000, - 0x20404010, 0x00400000, 0x00004010, 0x20000010, - 0x00400000, 0x20004000, 0x20000000, 0x00004010, - 0x20000010, 0x20404010, 0x00404000, 0x20400000, - 0x00404010, 0x20404000, 0x00000000, 0x20400010, - 0x00000010, 0x00004000, 0x20400000, 0x00404010, - 0x00004000, 0x00400010, 0x20004010, 0x00000000, - 0x20404000, 0x20000000, 0x00400010, 0x20004010 -}; - -SSL_ROM_DATA_SECTION -static const uint32_t SB7[64] = -{ - 0x00200000, 0x04200002, 0x04000802, 0x00000000, - 0x00000800, 0x04000802, 0x00200802, 0x04200800, - 0x04200802, 0x00200000, 0x00000000, 0x04000002, - 0x00000002, 0x04000000, 0x04200002, 0x00000802, - 0x04000800, 0x00200802, 0x00200002, 0x04000800, - 0x04000002, 0x04200000, 0x04200800, 0x00200002, - 0x04200000, 0x00000800, 0x00000802, 0x04200802, - 0x00200800, 0x00000002, 0x04000000, 0x00200800, - 0x04000000, 0x00200800, 0x00200000, 0x04000802, - 0x04000802, 0x04200002, 0x04200002, 0x00000002, - 0x00200002, 0x04000000, 0x04000800, 0x00200000, - 0x04200800, 0x00000802, 0x00200802, 0x04200800, - 0x00000802, 0x04000002, 0x04200802, 0x04200000, - 0x00200800, 0x00000000, 0x00000002, 0x04200802, - 0x00000000, 0x00200802, 0x04200000, 0x00000800, - 0x04000002, 0x04000800, 0x00000800, 0x00200002 -}; - -SSL_ROM_DATA_SECTION -static const uint32_t SB8[64] = -{ - 0x10001040, 0x00001000, 0x00040000, 0x10041040, - 0x10000000, 0x10001040, 0x00000040, 0x10000000, - 0x00040040, 0x10040000, 0x10041040, 0x00041000, - 0x10041000, 0x00041040, 0x00001000, 0x00000040, - 0x10040000, 0x10000040, 0x10001000, 0x00001040, - 0x00041000, 0x00040040, 0x10040040, 0x10041000, - 0x00001040, 0x00000000, 0x00000000, 0x10040040, - 0x10000040, 0x10001000, 0x00041040, 0x00040000, - 0x00041040, 0x00040000, 0x10041000, 0x00001000, - 0x00000040, 0x10040040, 0x00001000, 0x00041040, - 0x10001000, 0x00000040, 0x10000040, 0x10040000, - 0x10040040, 0x10000000, 0x00040000, 0x10001040, - 0x00000000, 0x10041040, 0x00040040, 0x10000040, - 0x10040000, 0x10001000, 0x10001040, 0x00000000, - 0x10041040, 0x00041000, 0x00041000, 0x00001040, - 0x00001040, 0x00040040, 0x10000000, 0x10041000 -}; - -/* - * PC1: left and right halves bit-swap - */ -SSL_ROM_DATA_SECTION -static const uint32_t LHs[16] = -{ - 0x00000000, 0x00000001, 0x00000100, 0x00000101, - 0x00010000, 0x00010001, 0x00010100, 0x00010101, - 0x01000000, 0x01000001, 0x01000100, 0x01000101, - 0x01010000, 0x01010001, 0x01010100, 0x01010101 -}; - -SSL_ROM_DATA_SECTION -static const uint32_t RHs[16] = -{ - 0x00000000, 0x01000000, 0x00010000, 0x01010000, - 0x00000100, 0x01000100, 0x00010100, 0x01010100, - 0x00000001, 0x01000001, 0x00010001, 0x01010001, - 0x00000101, 0x01000101, 0x00010101, 0x01010101, -}; - -/* - * Initial Permutation macro - */ -#define DES_IP(X,Y) \ -{ \ - T = ((X >> 4) ^ Y) & 0x0F0F0F0F; Y ^= T; X ^= (T << 4); \ - T = ((X >> 16) ^ Y) & 0x0000FFFF; Y ^= T; X ^= (T << 16); \ - T = ((Y >> 2) ^ X) & 0x33333333; X ^= T; Y ^= (T << 2); \ - T = ((Y >> 8) ^ X) & 0x00FF00FF; X ^= T; Y ^= (T << 8); \ - Y = ((Y << 1) | (Y >> 31)) & 0xFFFFFFFF; \ - T = (X ^ Y) & 0xAAAAAAAA; Y ^= T; X ^= T; \ - X = ((X << 1) | (X >> 31)) & 0xFFFFFFFF; \ -} - -/* - * Final Permutation macro - */ -#define DES_FP(X,Y) \ -{ \ - X = ((X << 31) | (X >> 1)) & 0xFFFFFFFF; \ - T = (X ^ Y) & 0xAAAAAAAA; X ^= T; Y ^= T; \ - Y = ((Y << 31) | (Y >> 1)) & 0xFFFFFFFF; \ - T = ((Y >> 8) ^ X) & 0x00FF00FF; X ^= T; Y ^= (T << 8); \ - T = ((Y >> 2) ^ X) & 0x33333333; X ^= T; Y ^= (T << 2); \ - T = ((X >> 16) ^ Y) & 0x0000FFFF; Y ^= T; X ^= (T << 16); \ - T = ((X >> 4) ^ Y) & 0x0F0F0F0F; Y ^= T; X ^= (T << 4); \ -} - -/* - * DES round macro - */ -#define DES_ROUND(X,Y) \ -{ \ - T = *SK++ ^ X; \ - Y ^= SB8[ (T ) & 0x3F ] ^ \ - SB6[ (T >> 8) & 0x3F ] ^ \ - SB4[ (T >> 16) & 0x3F ] ^ \ - SB2[ (T >> 24) & 0x3F ]; \ - \ - T = *SK++ ^ ((X << 28) | (X >> 4)); \ - Y ^= SB7[ (T ) & 0x3F ] ^ \ - SB5[ (T >> 8) & 0x3F ] ^ \ - SB3[ (T >> 16) & 0x3F ] ^ \ - SB1[ (T >> 24) & 0x3F ]; \ -} - -#define SWAP(a,b) { uint32_t t = a; a = b; b = t; t = 0; } - -SSL_ROM_TEXT_SECTION -void des_init( des_context *ctx ) -{ - memset( ctx, 0, sizeof( des_context ) ); -} - -SSL_ROM_TEXT_SECTION -void des_free( des_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( des_context ) ); -} - -SSL_ROM_TEXT_SECTION -void des3_init( des3_context *ctx ) -{ - memset( ctx, 0, sizeof( des3_context ) ); -} - -SSL_ROM_TEXT_SECTION -void des3_free( des3_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( des3_context ) ); -} - -SSL_ROM_DATA_SECTION -static const unsigned char odd_parity_table[128] = { 1, 2, 4, 7, 8, - 11, 13, 14, 16, 19, 21, 22, 25, 26, 28, 31, 32, 35, 37, 38, 41, 42, 44, - 47, 49, 50, 52, 55, 56, 59, 61, 62, 64, 67, 69, 70, 73, 74, 76, 79, 81, - 82, 84, 87, 88, 91, 93, 94, 97, 98, 100, 103, 104, 107, 109, 110, 112, - 115, 117, 118, 121, 122, 124, 127, 128, 131, 133, 134, 137, 138, 140, - 143, 145, 146, 148, 151, 152, 155, 157, 158, 161, 162, 164, 167, 168, - 171, 173, 174, 176, 179, 181, 182, 185, 186, 188, 191, 193, 194, 196, - 199, 200, 203, 205, 206, 208, 211, 213, 214, 217, 218, 220, 223, 224, - 227, 229, 230, 233, 234, 236, 239, 241, 242, 244, 247, 248, 251, 253, - 254 }; - -SSL_ROM_TEXT_SECTION -void des_key_set_parity( unsigned char key[DES_KEY_SIZE] ) -{ - int i; - - for( i = 0; i < DES_KEY_SIZE; i++ ) - key[i] = odd_parity_table[key[i] / 2]; -} - -/* - * Check the given key's parity, returns 1 on failure, 0 on SUCCESS - */ -SSL_ROM_TEXT_SECTION -int des_key_check_key_parity( const unsigned char key[DES_KEY_SIZE] ) -{ - int i; - - for( i = 0; i < DES_KEY_SIZE; i++ ) - if( key[i] != odd_parity_table[key[i] / 2] ) - return( 1 ); - - return( 0 ); -} - -/* - * Table of weak and semi-weak keys - * - * Source: http://en.wikipedia.org/wiki/Weak_key - * - * Weak: - * Alternating ones + zeros (0x0101010101010101) - * Alternating 'F' + 'E' (0xFEFEFEFEFEFEFEFE) - * '0xE0E0E0E0F1F1F1F1' - * '0x1F1F1F1F0E0E0E0E' - * - * Semi-weak: - * 0x011F011F010E010E and 0x1F011F010E010E01 - * 0x01E001E001F101F1 and 0xE001E001F101F101 - * 0x01FE01FE01FE01FE and 0xFE01FE01FE01FE01 - * 0x1FE01FE00EF10EF1 and 0xE01FE01FF10EF10E - * 0x1FFE1FFE0EFE0EFE and 0xFE1FFE1FFE0EFE0E - * 0xE0FEE0FEF1FEF1FE and 0xFEE0FEE0FEF1FEF1 - * - */ - -#define WEAK_KEY_COUNT 16 - -SSL_ROM_DATA_SECTION -static const unsigned char weak_key_table[WEAK_KEY_COUNT][DES_KEY_SIZE] = -{ - { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE }, - { 0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E }, - { 0xE0, 0xE0, 0xE0, 0xE0, 0xF1, 0xF1, 0xF1, 0xF1 }, - - { 0x01, 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E }, - { 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E, 0x01 }, - { 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1 }, - { 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1, 0x01 }, - { 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE }, - { 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01 }, - { 0x1F, 0xE0, 0x1F, 0xE0, 0x0E, 0xF1, 0x0E, 0xF1 }, - { 0xE0, 0x1F, 0xE0, 0x1F, 0xF1, 0x0E, 0xF1, 0x0E }, - { 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E, 0xFE }, - { 0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E }, - { 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE }, - { 0xFE, 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1 } -}; - -SSL_ROM_TEXT_SECTION -int des_key_check_weak( const unsigned char key[DES_KEY_SIZE] ) -{ - int i; - - for( i = 0; i < WEAK_KEY_COUNT; i++ ) - if( memcmp( weak_key_table[i], key, DES_KEY_SIZE) == 0 ) - return( 1 ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -static void des_setkey( uint32_t SK[32], const unsigned char key[DES_KEY_SIZE] ) -{ - int i; - uint32_t X, Y, T; - - GET_UINT32_BE( X, key, 0 ); - GET_UINT32_BE( Y, key, 4 ); - - /* - * Permuted Choice 1 - */ - T = ((Y >> 4) ^ X) & 0x0F0F0F0F; X ^= T; Y ^= (T << 4); - T = ((Y ) ^ X) & 0x10101010; X ^= T; Y ^= (T ); - - X = (LHs[ (X ) & 0xF] << 3) | (LHs[ (X >> 8) & 0xF ] << 2) - | (LHs[ (X >> 16) & 0xF] << 1) | (LHs[ (X >> 24) & 0xF ] ) - | (LHs[ (X >> 5) & 0xF] << 7) | (LHs[ (X >> 13) & 0xF ] << 6) - | (LHs[ (X >> 21) & 0xF] << 5) | (LHs[ (X >> 29) & 0xF ] << 4); - - Y = (RHs[ (Y >> 1) & 0xF] << 3) | (RHs[ (Y >> 9) & 0xF ] << 2) - | (RHs[ (Y >> 17) & 0xF] << 1) | (RHs[ (Y >> 25) & 0xF ] ) - | (RHs[ (Y >> 4) & 0xF] << 7) | (RHs[ (Y >> 12) & 0xF ] << 6) - | (RHs[ (Y >> 20) & 0xF] << 5) | (RHs[ (Y >> 28) & 0xF ] << 4); - - X &= 0x0FFFFFFF; - Y &= 0x0FFFFFFF; - - /* - * calculate subkeys - */ - for( i = 0; i < 16; i++ ) - { - if( i < 2 || i == 8 || i == 15 ) - { - X = ((X << 1) | (X >> 27)) & 0x0FFFFFFF; - Y = ((Y << 1) | (Y >> 27)) & 0x0FFFFFFF; - } - else - { - X = ((X << 2) | (X >> 26)) & 0x0FFFFFFF; - Y = ((Y << 2) | (Y >> 26)) & 0x0FFFFFFF; - } - - *SK++ = ((X << 4) & 0x24000000) | ((X << 28) & 0x10000000) - | ((X << 14) & 0x08000000) | ((X << 18) & 0x02080000) - | ((X << 6) & 0x01000000) | ((X << 9) & 0x00200000) - | ((X >> 1) & 0x00100000) | ((X << 10) & 0x00040000) - | ((X << 2) & 0x00020000) | ((X >> 10) & 0x00010000) - | ((Y >> 13) & 0x00002000) | ((Y >> 4) & 0x00001000) - | ((Y << 6) & 0x00000800) | ((Y >> 1) & 0x00000400) - | ((Y >> 14) & 0x00000200) | ((Y ) & 0x00000100) - | ((Y >> 5) & 0x00000020) | ((Y >> 10) & 0x00000010) - | ((Y >> 3) & 0x00000008) | ((Y >> 18) & 0x00000004) - | ((Y >> 26) & 0x00000002) | ((Y >> 24) & 0x00000001); - - *SK++ = ((X << 15) & 0x20000000) | ((X << 17) & 0x10000000) - | ((X << 10) & 0x08000000) | ((X << 22) & 0x04000000) - | ((X >> 2) & 0x02000000) | ((X << 1) & 0x01000000) - | ((X << 16) & 0x00200000) | ((X << 11) & 0x00100000) - | ((X << 3) & 0x00080000) | ((X >> 6) & 0x00040000) - | ((X << 15) & 0x00020000) | ((X >> 4) & 0x00010000) - | ((Y >> 2) & 0x00002000) | ((Y << 8) & 0x00001000) - | ((Y >> 14) & 0x00000808) | ((Y >> 9) & 0x00000400) - | ((Y ) & 0x00000200) | ((Y << 7) & 0x00000100) - | ((Y >> 7) & 0x00000020) | ((Y >> 3) & 0x00000011) - | ((Y << 2) & 0x00000004) | ((Y >> 21) & 0x00000002); - } -} - -/* - * DES key schedule (56-bit, encryption) - */ -SSL_ROM_TEXT_SECTION -int des_setkey_enc( des_context *ctx, const unsigned char key[DES_KEY_SIZE] ) -{ -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - memcpy(ctx->enc_key, key, DES_KEY_SIZE); - } -#endif /* RTL_HW_CRYPTO */ - des_setkey( ctx->sk, key ); - return( 0 ); -} - -/* - * DES key schedule (56-bit, decryption) - */ -SSL_ROM_TEXT_SECTION -int des_setkey_dec( des_context *ctx, const unsigned char key[DES_KEY_SIZE] ) -{ - int i; -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - memcpy(ctx->dec_key, key, DES_KEY_SIZE); - } -#endif /* RTL_HW_CRYPTO */ - des_setkey( ctx->sk, key ); - - for( i = 0; i < 16; i += 2 ) - { - SWAP( ctx->sk[i ], ctx->sk[30 - i] ); - SWAP( ctx->sk[i + 1], ctx->sk[31 - i] ); - } - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -static void des3_set2key( uint32_t esk[96], - uint32_t dsk[96], - const unsigned char key[DES_KEY_SIZE*2] ) -{ - int i; - - des_setkey( esk, key ); - des_setkey( dsk + 32, key + 8 ); - - for( i = 0; i < 32; i += 2 ) - { - dsk[i ] = esk[30 - i]; - dsk[i + 1] = esk[31 - i]; - - esk[i + 32] = dsk[62 - i]; - esk[i + 33] = dsk[63 - i]; - - esk[i + 64] = esk[i ]; - esk[i + 65] = esk[i + 1]; - - dsk[i + 64] = dsk[i ]; - dsk[i + 65] = dsk[i + 1]; - } -} - -/* - * Triple-DES key schedule (112-bit, encryption) - */ -SSL_ROM_TEXT_SECTION -int des3_set2key_enc( des3_context *ctx, - const unsigned char key[DES_KEY_SIZE * 2] ) -{ - uint32_t sk[96]; -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - memcpy(ctx->enc_key, key, DES_KEY_SIZE * 2); - memcpy(ctx->enc_key + DES_KEY_SIZE * 2, key, DES_KEY_SIZE); - } -#endif /* RTL_HW_CRYPTO */ - des3_set2key( ctx->sk, sk, key ); - polarssl_zeroize( sk, sizeof( sk ) ); - - return( 0 ); -} - -/* - * Triple-DES key schedule (112-bit, decryption) - */ -SSL_ROM_TEXT_SECTION -int des3_set2key_dec( des3_context *ctx, - const unsigned char key[DES_KEY_SIZE * 2] ) -{ - uint32_t sk[96]; -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - memcpy(ctx->dec_key, key, DES_KEY_SIZE * 2); - memcpy(ctx->dec_key + DES_KEY_SIZE * 2, key, DES_KEY_SIZE); - } -#endif /* RTL_HW_CRYPTO */ - des3_set2key( sk, ctx->sk, key ); - polarssl_zeroize( sk, sizeof( sk ) ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -static void des3_set3key( uint32_t esk[96], - uint32_t dsk[96], - const unsigned char key[24] ) -{ - int i; - - des_setkey( esk, key ); - des_setkey( dsk + 32, key + 8 ); - des_setkey( esk + 64, key + 16 ); - - for( i = 0; i < 32; i += 2 ) - { - dsk[i ] = esk[94 - i]; - dsk[i + 1] = esk[95 - i]; - - esk[i + 32] = dsk[62 - i]; - esk[i + 33] = dsk[63 - i]; - - dsk[i + 64] = esk[30 - i]; - dsk[i + 65] = esk[31 - i]; - } -} - -/* - * Triple-DES key schedule (168-bit, encryption) - */ -SSL_ROM_TEXT_SECTION -int des3_set3key_enc( des3_context *ctx, - const unsigned char key[DES_KEY_SIZE * 3] ) -{ - uint32_t sk[96]; -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - memcpy(ctx->enc_key, key, DES_KEY_SIZE * 3); - } -#endif /* RTL_HW_CRYPTO */ - des3_set3key( ctx->sk, sk, key ); - polarssl_zeroize( sk, sizeof( sk ) ); - - return( 0 ); -} - -/* - * Triple-DES key schedule (168-bit, decryption) - */ -SSL_ROM_TEXT_SECTION -int des3_set3key_dec( des3_context *ctx, - const unsigned char key[DES_KEY_SIZE * 3] ) -{ - uint32_t sk[96]; -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - memcpy(ctx->dec_key, key, DES_KEY_SIZE * 3); - } -#endif /* RTL_HW_CRYPTO */ - des3_set3key( sk, ctx->sk, key ); - polarssl_zeroize( sk, sizeof( sk ) ); - - return( 0 ); -} - -/* - * DES-ECB block encryption/decryption - */ -SSL_ROM_TEXT_SECTION -int des_crypt_ecb( des_context *ctx, - const unsigned char input[8], - unsigned char output[8] ) -{ - int i; - uint32_t X, Y, T, *SK; - - SK = ctx->sk; - - GET_UINT32_BE( X, input, 0 ); - GET_UINT32_BE( Y, input, 4 ); - - DES_IP( X, Y ); - - for( i = 0; i < 8; i++ ) - { - DES_ROUND( Y, X ); - DES_ROUND( X, Y ); - } - - DES_FP( Y, X ); - - PUT_UINT32_BE( Y, output, 0 ); - PUT_UINT32_BE( X, output, 4 ); - - return( 0 ); - -} - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/* - * DES-CBC buffer encryption/decryption - */ -SSL_ROM_TEXT_SECTION -int des_crypt_cbc( des_context *ctx, - int mode, - size_t length, - unsigned char iv[8], - const unsigned char *input, - unsigned char *output ) -{ -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - unsigned char key_buf[8 + 4], *key_buf_aligned; - unsigned char iv_buf[8 + 4], *iv_buf_aligned, iv_tmp[8]; - unsigned char *output_buf, *output_buf_aligned; - size_t length_done = 0; - - if(length % 8) - return(POLARSSL_ERR_DES_INVALID_INPUT_LENGTH); - - if(length > 0) - { - key_buf_aligned = (unsigned char *) (((unsigned int) key_buf + 4) / 4 * 4); - iv_buf_aligned = (unsigned char *) (((unsigned int) iv_buf + 4) / 4 * 4); - output_buf = polarssl_malloc(length + 4); - - if(output_buf == NULL) - return -1; - - output_buf_aligned = (unsigned char *) (((unsigned int) output_buf + 4) / 4 * 4); - memcpy(iv_buf_aligned, iv, 8); - memset(output_buf, 0, length + 4); - - if(mode == DES_DECRYPT) - { - memcpy(key_buf_aligned, ctx->dec_key, DES_KEY_SIZE); - rom_ssl_ram_map.hw_crypto_des_cbc_init(key_buf_aligned, DES_KEY_SIZE); - - while((length - length_done) > RTL_CRYPTO_FRAGMENT) - { - memcpy(iv_tmp, (input + length_done + RTL_CRYPTO_FRAGMENT - 8), 8); - rom_ssl_ram_map.hw_crypto_des_cbc_decrypt(input + length_done, RTL_CRYPTO_FRAGMENT, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv_buf_aligned, iv_tmp, 8); - length_done += RTL_CRYPTO_FRAGMENT; - } - - memcpy(iv_tmp, (input + length - 8), 8); - rom_ssl_ram_map.hw_crypto_des_cbc_decrypt(input + length_done, length - length_done, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv, iv_tmp, 8); - } - else - { - memcpy(key_buf_aligned, ctx->enc_key, DES_KEY_SIZE); - rom_ssl_ram_map.hw_crypto_des_cbc_init(key_buf_aligned, DES_KEY_SIZE); - - while((length - length_done) > RTL_CRYPTO_FRAGMENT) - { - rom_ssl_ram_map.hw_crypto_des_cbc_encrypt(input + length_done, RTL_CRYPTO_FRAGMENT, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv_buf_aligned, (output_buf_aligned + length_done + RTL_CRYPTO_FRAGMENT - 8), 8); - length_done += RTL_CRYPTO_FRAGMENT; - } - - rom_ssl_ram_map.hw_crypto_des_cbc_encrypt(input + length_done, length - length_done, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv, (output_buf_aligned + length - 8), 8); - } - - memcpy(output, output_buf_aligned, length); - polarssl_free(output_buf); - } - - return 0; - } -#endif /* RTL_HW_CRYPTO */ -#ifdef SUPPORT_HW_SW_CRYPTO - else - { - int i; - unsigned char temp[8]; - - if( length % 8 ) - return( POLARSSL_ERR_DES_INVALID_INPUT_LENGTH ); - - if( mode == DES_ENCRYPT ) - { - while( length > 0 ) - { - for( i = 0; i < 8; i++ ) - output[i] = (unsigned char)( input[i] ^ iv[i] ); - - des_crypt_ecb( ctx, output, output ); - memcpy( iv, output, 8 ); - - input += 8; - output += 8; - length -= 8; - } - } - else /* DES_DECRYPT */ - { - while( length > 0 ) - { - memcpy( temp, input, 8 ); - des_crypt_ecb( ctx, input, output ); - - for( i = 0; i < 8; i++ ) - output[i] = (unsigned char)( output[i] ^ iv[i] ); - - memcpy( iv, temp, 8 ); - - input += 8; - output += 8; - length -= 8; - } - } - - return( 0 ); - } -#endif /* SUPPORT_HW_SW_CRYPTO */ -} -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -/* - * 3DES-ECB block encryption/decryption - */ -SSL_ROM_TEXT_SECTION -int des3_crypt_ecb( des3_context *ctx, - const unsigned char input[8], - unsigned char output[8] ) -{ - int i; - uint32_t X, Y, T, *SK; - - SK = ctx->sk; - - GET_UINT32_BE( X, input, 0 ); - GET_UINT32_BE( Y, input, 4 ); - - DES_IP( X, Y ); - - for( i = 0; i < 8; i++ ) - { - DES_ROUND( Y, X ); - DES_ROUND( X, Y ); - } - - for( i = 0; i < 8; i++ ) - { - DES_ROUND( X, Y ); - DES_ROUND( Y, X ); - } - - for( i = 0; i < 8; i++ ) - { - DES_ROUND( Y, X ); - DES_ROUND( X, Y ); - } - - DES_FP( Y, X ); - - PUT_UINT32_BE( Y, output, 0 ); - PUT_UINT32_BE( X, output, 4 ); - - return( 0 ); -} - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/* - * 3DES-CBC buffer encryption/decryption - */ -SSL_ROM_TEXT_SECTION -int des3_crypt_cbc( des3_context *ctx, - int mode, - size_t length, - unsigned char iv[8], - const unsigned char *input, - unsigned char *output ) -{ -#ifdef RTL_HW_CRYPTO - if(rom_ssl_ram_map.use_hw_crypto_func) - { - unsigned char key_buf[24 + 4], *key_buf_aligned; - unsigned char iv_buf[8 + 4], *iv_buf_aligned, iv_tmp[8]; - unsigned char *output_buf, *output_buf_aligned; - size_t length_done = 0; - - if(length % 8) - return(POLARSSL_ERR_DES_INVALID_INPUT_LENGTH); - - if(length > 0) - { - key_buf_aligned = (unsigned char *) (((unsigned int) key_buf + 4) / 4 * 4); - iv_buf_aligned = (unsigned char *) (((unsigned int) iv_buf + 4) / 4 * 4); - output_buf = polarssl_malloc(length + 4); - - if(output_buf == NULL) - return -1; - - output_buf_aligned = (unsigned char *) (((unsigned int) output_buf + 4) / 4 * 4); - memcpy(iv_buf_aligned, iv, 8); - memset(output_buf, 0, length + 4); - - if(mode == DES_DECRYPT) - { - memcpy(key_buf_aligned, ctx->dec_key, DES_KEY_SIZE * 3); - rom_ssl_ram_map.hw_crypto_3des_cbc_init(key_buf_aligned, DES_KEY_SIZE * 3); - - while((length - length_done) > RTL_CRYPTO_FRAGMENT) - { - memcpy(iv_tmp, (input + length_done + RTL_CRYPTO_FRAGMENT - 8), 8); - rom_ssl_ram_map.hw_crypto_3des_cbc_decrypt(input + length_done, RTL_CRYPTO_FRAGMENT, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv_buf_aligned, iv_tmp, 8); - length_done += RTL_CRYPTO_FRAGMENT; - } - - memcpy(iv_tmp, (input + length - 8), 8); - rom_ssl_ram_map.hw_crypto_3des_cbc_decrypt(input + length_done, length - length_done, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv, iv_tmp, 8); - } - else - { - memcpy(key_buf_aligned, ctx->enc_key, DES_KEY_SIZE * 3); - rom_ssl_ram_map.hw_crypto_3des_cbc_init(key_buf_aligned, DES_KEY_SIZE * 3); - - while((length - length_done) > RTL_CRYPTO_FRAGMENT) - { - rom_ssl_ram_map.hw_crypto_3des_cbc_encrypt(input + length_done, RTL_CRYPTO_FRAGMENT, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv_buf_aligned, (output_buf_aligned + length_done + RTL_CRYPTO_FRAGMENT - 8), 8); - length_done += RTL_CRYPTO_FRAGMENT; - } - - rom_ssl_ram_map.hw_crypto_3des_cbc_encrypt(input + length_done, length - length_done, iv_buf_aligned, 8, output_buf_aligned + length_done); - memcpy(iv, (output_buf_aligned + length - 8), 8); - } - - memcpy(output, output_buf_aligned, length); - polarssl_free(output_buf); - } - - return 0; - } -#endif /* RTL_HW_CRYPTO */ -#ifdef SUPPORT_HW_SW_CRYPTO - else - { - int i; - unsigned char temp[8]; - - if( length % 8 ) - return( POLARSSL_ERR_DES_INVALID_INPUT_LENGTH ); - - if( mode == DES_ENCRYPT ) - { - while( length > 0 ) - { - for( i = 0; i < 8; i++ ) - output[i] = (unsigned char)( input[i] ^ iv[i] ); - - des3_crypt_ecb( ctx, output, output ); - memcpy( iv, output, 8 ); - - input += 8; - output += 8; - length -= 8; - } - } - else /* DES_DECRYPT */ - { - while( length > 0 ) - { - memcpy( temp, input, 8 ); - des3_crypt_ecb( ctx, input, output ); - - for( i = 0; i < 8; i++ ) - output[i] = (unsigned char)( output[i] ^ iv[i] ); - - memcpy( iv, temp, 8 ); - - input += 8; - output += 8; - length -= 8; - } - } - - return( 0 ); - } -#endif /* SUPPORT_HW_SW_CRYPTO */ -} -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#endif /* !POLARSSL_DES_ALT */ - -#if defined(POLARSSL_SELF_TEST) - -#include - -/* - * DES and 3DES test vectors from: - * - * http://csrc.nist.gov/groups/STM/cavp/documents/des/tripledes-vectors.zip - */ -static const unsigned char des3_test_keys[24] = -{ - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, - 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23 -}; - -static const unsigned char des3_test_buf[8] = -{ - 0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74 -}; - -static const unsigned char des3_test_ecb_dec[3][8] = -{ - { 0xCD, 0xD6, 0x4F, 0x2F, 0x94, 0x27, 0xC1, 0x5D }, - { 0x69, 0x96, 0xC8, 0xFA, 0x47, 0xA2, 0xAB, 0xEB }, - { 0x83, 0x25, 0x39, 0x76, 0x44, 0x09, 0x1A, 0x0A } -}; - -static const unsigned char des3_test_ecb_enc[3][8] = -{ - { 0x6A, 0x2A, 0x19, 0xF4, 0x1E, 0xCA, 0x85, 0x4B }, - { 0x03, 0xE6, 0x9F, 0x5B, 0xFA, 0x58, 0xEB, 0x42 }, - { 0xDD, 0x17, 0xE8, 0xB8, 0xB4, 0x37, 0xD2, 0x32 } -}; - -#if defined(POLARSSL_CIPHER_MODE_CBC) -static const unsigned char des3_test_iv[8] = -{ - 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, -}; - -static const unsigned char des3_test_cbc_dec[3][8] = -{ - { 0x12, 0x9F, 0x40, 0xB9, 0xD2, 0x00, 0x56, 0xB3 }, - { 0x47, 0x0E, 0xFC, 0x9A, 0x6B, 0x8E, 0xE3, 0x93 }, - { 0xC5, 0xCE, 0xCF, 0x63, 0xEC, 0xEC, 0x51, 0x4C } -}; - -static const unsigned char des3_test_cbc_enc[3][8] = -{ - { 0x54, 0xF1, 0x5A, 0xF6, 0xEB, 0xE3, 0xA4, 0xB4 }, - { 0x35, 0x76, 0x11, 0x56, 0x5F, 0xA1, 0x8E, 0x4D }, - { 0xCB, 0x19, 0x1F, 0x85, 0xD1, 0xED, 0x84, 0x39 } -}; -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -/* - * Checkup routine - */ -int des_self_test( int verbose ) -{ - int i, j, u, v, ret = 0; - des_context ctx; - des3_context ctx3; - unsigned char buf[8]; -#if defined(POLARSSL_CIPHER_MODE_CBC) - unsigned char prv[8]; - unsigned char iv[8]; -#endif - - des_init( &ctx ); - des3_init( &ctx3 ); - /* - * ECB mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " DES%c-ECB-%3d (%s): ", - ( u == 0 ) ? ' ' : '3', 56 + u * 56, - ( v == DES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( buf, des3_test_buf, 8 ); - - switch( i ) - { - case 0: - des_setkey_dec( &ctx, des3_test_keys ); - break; - - case 1: - des_setkey_enc( &ctx, des3_test_keys ); - break; - - case 2: - des3_set2key_dec( &ctx3, des3_test_keys ); - break; - - case 3: - des3_set2key_enc( &ctx3, des3_test_keys ); - break; - - case 4: - des3_set3key_dec( &ctx3, des3_test_keys ); - break; - - case 5: - des3_set3key_enc( &ctx3, des3_test_keys ); - break; - - default: - return( 1 ); - } - - for( j = 0; j < 10000; j++ ) - { - if( u == 0 ) - des_crypt_ecb( &ctx, buf, buf ); - else - des3_crypt_ecb( &ctx3, buf, buf ); - } - - if( ( v == DES_DECRYPT && - memcmp( buf, des3_test_ecb_dec[u], 8 ) != 0 ) || - ( v != DES_DECRYPT && - memcmp( buf, des3_test_ecb_enc[u], 8 ) != 0 ) ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -#if defined(POLARSSL_CIPHER_MODE_CBC) - /* - * CBC mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " DES%c-CBC-%3d (%s): ", - ( u == 0 ) ? ' ' : '3', 56 + u * 56, - ( v == DES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( iv, des3_test_iv, 8 ); - memcpy( prv, des3_test_iv, 8 ); - memcpy( buf, des3_test_buf, 8 ); - - switch( i ) - { - case 0: - des_setkey_dec( &ctx, des3_test_keys ); - break; - - case 1: - des_setkey_enc( &ctx, des3_test_keys ); - break; - - case 2: - des3_set2key_dec( &ctx3, des3_test_keys ); - break; - - case 3: - des3_set2key_enc( &ctx3, des3_test_keys ); - break; - - case 4: - des3_set3key_dec( &ctx3, des3_test_keys ); - break; - - case 5: - des3_set3key_enc( &ctx3, des3_test_keys ); - break; - - default: - return( 1 ); - } - - if( v == DES_DECRYPT ) - { - for( j = 0; j < 10000; j++ ) - { - if( u == 0 ) - des_crypt_cbc( &ctx, v, 8, iv, buf, buf ); - else - des3_crypt_cbc( &ctx3, v, 8, iv, buf, buf ); - } - } - else - { - for( j = 0; j < 10000; j++ ) - { - unsigned char tmp[8]; - - if( u == 0 ) - des_crypt_cbc( &ctx, v, 8, iv, buf, buf ); - else - des3_crypt_cbc( &ctx3, v, 8, iv, buf, buf ); - - memcpy( tmp, prv, 8 ); - memcpy( prv, buf, 8 ); - memcpy( buf, tmp, 8 ); - } - - memcpy( buf, prv, 8 ); - } - - if( ( v == DES_DECRYPT && - memcmp( buf, des3_test_cbc_dec[u], 8 ) != 0 ) || - ( v != DES_DECRYPT && - memcmp( buf, des3_test_cbc_enc[u], 8 ) != 0 ) ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } -#endif /* POLARSSL_CIPHER_MODE_CBC */ - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - des_free( &ctx ); - des3_free( &ctx3 ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_DES_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/dhm.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/dhm.c deleted file mode 100644 index 9565d36..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/dhm.c +++ /dev/null @@ -1,613 +0,0 @@ -/* - * Diffie-Hellman-Merkle key exchange - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * Reference: - * - * http://www.cacr.math.uwaterloo.ca/hac/ (chapter 12) - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_DHM_C) - -#include "polarssl/dhm.h" - -#if defined(POLARSSL_PEM_PARSE_C) -#include "polarssl/pem.h" -#endif - -#if defined(POLARSSL_ASN1_PARSE_C) -#include "polarssl/asn1.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#include -#define polarssl_printf printf -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * helper to validate the mpi size and import it - */ -SSL_ROM_TEXT_SECTION -static int dhm_read_bignum( mpi *X, - unsigned char **p, - const unsigned char *end ) -{ - int ret, n; - - if( end - *p < 2 ) - return( POLARSSL_ERR_DHM_BAD_INPUT_DATA ); - - n = ( (*p)[0] << 8 ) | (*p)[1]; - (*p) += 2; - - if( (int)( end - *p ) < n ) - return( POLARSSL_ERR_DHM_BAD_INPUT_DATA ); - - if( ( ret = mpi_read_binary( X, *p, n ) ) != 0 ) - return( POLARSSL_ERR_DHM_READ_PARAMS_FAILED + ret ); - - (*p) += n; - - return( 0 ); -} - -/* - * Verify sanity of parameter with regards to P - * - * Parameter should be: 2 <= public_param <= P - 2 - * - * For more information on the attack, see: - * http://www.cl.cam.ac.uk/~rja14/Papers/psandqs.pdf - * http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2005-2643 - */ -SSL_ROM_TEXT_SECTION -static int dhm_check_range( const mpi *param, const mpi *P ) -{ - mpi L, U; - int ret = POLARSSL_ERR_DHM_BAD_INPUT_DATA; - - mpi_init( &L ); mpi_init( &U ); - - MPI_CHK( mpi_lset( &L, 2 ) ); - MPI_CHK( mpi_sub_int( &U, P, 2 ) ); - - if( mpi_cmp_mpi( param, &L ) >= 0 && - mpi_cmp_mpi( param, &U ) <= 0 ) - { - ret = 0; - } - -cleanup: - mpi_free( &L ); mpi_free( &U ); - return( ret ); -} - -SSL_ROM_TEXT_SECTION -void dhm_init( dhm_context *ctx ) -{ - memset( ctx, 0, sizeof( dhm_context ) ); -} - -/* - * Parse the ServerKeyExchange parameters - */ -SSL_ROM_TEXT_SECTION -int dhm_read_params( dhm_context *ctx, - unsigned char **p, - const unsigned char *end ) -{ - int ret; - - if( ( ret = dhm_read_bignum( &ctx->P, p, end ) ) != 0 || - ( ret = dhm_read_bignum( &ctx->G, p, end ) ) != 0 || - ( ret = dhm_read_bignum( &ctx->GY, p, end ) ) != 0 ) - return( ret ); - - if( ( ret = dhm_check_range( &ctx->GY, &ctx->P ) ) != 0 ) - return( ret ); - - ctx->len = mpi_size( &ctx->P ); - - return( 0 ); -} - -/* - * Setup and write the ServerKeyExchange parameters - */ -SSL_ROM_TEXT_SECTION -int dhm_make_params( dhm_context *ctx, int x_size, - unsigned char *output, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret, count = 0; - size_t n1, n2, n3; - unsigned char *p; - - if( mpi_cmp_int( &ctx->P, 0 ) == 0 ) - return( POLARSSL_ERR_DHM_BAD_INPUT_DATA ); - - /* - * Generate X as large as possible ( < P ) - */ - do - { - mpi_fill_random( &ctx->X, x_size, f_rng, p_rng ); - - while( mpi_cmp_mpi( &ctx->X, &ctx->P ) >= 0 ) - MPI_CHK( mpi_shift_r( &ctx->X, 1 ) ); - - if( count++ > 10 ) - return( POLARSSL_ERR_DHM_MAKE_PARAMS_FAILED ); - } - while( dhm_check_range( &ctx->X, &ctx->P ) != 0 ); - - /* - * Calculate GX = G^X mod P - */ - MPI_CHK( mpi_exp_mod( &ctx->GX, &ctx->G, &ctx->X, - &ctx->P , &ctx->RP ) ); - - if( ( ret = dhm_check_range( &ctx->GX, &ctx->P ) ) != 0 ) - return( ret ); - - /* - * export P, G, GX - */ -#define DHM_MPI_EXPORT(X,n) \ - MPI_CHK( mpi_write_binary( X, p + 2, n ) ); \ - *p++ = (unsigned char)( n >> 8 ); \ - *p++ = (unsigned char)( n ); p += n; - - n1 = mpi_size( &ctx->P ); - n2 = mpi_size( &ctx->G ); - n3 = mpi_size( &ctx->GX ); - - p = output; - DHM_MPI_EXPORT( &ctx->P , n1 ); - DHM_MPI_EXPORT( &ctx->G , n2 ); - DHM_MPI_EXPORT( &ctx->GX, n3 ); - - *olen = p - output; - - ctx->len = n1; - -cleanup: - - if( ret != 0 ) - return( POLARSSL_ERR_DHM_MAKE_PARAMS_FAILED + ret ); - - return( 0 ); -} - -/* - * Import the peer's public value G^Y - */ -SSL_ROM_TEXT_SECTION -int dhm_read_public( dhm_context *ctx, - const unsigned char *input, size_t ilen ) -{ - int ret; - - if( ctx == NULL || ilen < 1 || ilen > ctx->len ) - return( POLARSSL_ERR_DHM_BAD_INPUT_DATA ); - - if( ( ret = mpi_read_binary( &ctx->GY, input, ilen ) ) != 0 ) - return( POLARSSL_ERR_DHM_READ_PUBLIC_FAILED + ret ); - - return( 0 ); -} - -/* - * Create own private value X and export G^X - */ -SSL_ROM_TEXT_SECTION -int dhm_make_public( dhm_context *ctx, int x_size, - unsigned char *output, size_t olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret, count = 0; - - if( ctx == NULL || olen < 1 || olen > ctx->len ) - return( POLARSSL_ERR_DHM_BAD_INPUT_DATA ); - - if( mpi_cmp_int( &ctx->P, 0 ) == 0 ) - return( POLARSSL_ERR_DHM_BAD_INPUT_DATA ); - - /* - * generate X and calculate GX = G^X mod P - */ - do - { - mpi_fill_random( &ctx->X, x_size, f_rng, p_rng ); - - while( mpi_cmp_mpi( &ctx->X, &ctx->P ) >= 0 ) - MPI_CHK( mpi_shift_r( &ctx->X, 1 ) ); - - if( count++ > 10 ) - return( POLARSSL_ERR_DHM_MAKE_PUBLIC_FAILED ); - } - while( dhm_check_range( &ctx->X, &ctx->P ) != 0 ); - - MPI_CHK( mpi_exp_mod( &ctx->GX, &ctx->G, &ctx->X, - &ctx->P , &ctx->RP ) ); - - if( ( ret = dhm_check_range( &ctx->GX, &ctx->P ) ) != 0 ) - return( ret ); - - MPI_CHK( mpi_write_binary( &ctx->GX, output, olen ) ); - -cleanup: - - if( ret != 0 ) - return( POLARSSL_ERR_DHM_MAKE_PUBLIC_FAILED + ret ); - - return( 0 ); -} - -/* - * Use the blinding method and optimisation suggested in section 10 of: - * KOCHER, Paul C. Timing attacks on implementations of Diffie-Hellman, RSA, - * DSS, and other systems. In : Advances in Cryptology—CRYPTO’96. Springer - * Berlin Heidelberg, 1996. p. 104-113. - */ -SSL_ROM_TEXT_SECTION -static int dhm_update_blinding( dhm_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret, count; - - /* - * Don't use any blinding the first time a particular X is used, - * but remember it to use blinding next time. - */ - if( mpi_cmp_mpi( &ctx->X, &ctx->pX ) != 0 ) - { - MPI_CHK( mpi_copy( &ctx->pX, &ctx->X ) ); - MPI_CHK( mpi_lset( &ctx->Vi, 1 ) ); - MPI_CHK( mpi_lset( &ctx->Vf, 1 ) ); - - return( 0 ); - } - - /* - * Ok, we need blinding. Can we re-use existing values? - * If yes, just update them by squaring them. - */ - if( mpi_cmp_int( &ctx->Vi, 1 ) != 0 ) - { - MPI_CHK( mpi_mul_mpi( &ctx->Vi, &ctx->Vi, &ctx->Vi ) ); - MPI_CHK( mpi_mod_mpi( &ctx->Vi, &ctx->Vi, &ctx->P ) ); - - MPI_CHK( mpi_mul_mpi( &ctx->Vf, &ctx->Vf, &ctx->Vf ) ); - MPI_CHK( mpi_mod_mpi( &ctx->Vf, &ctx->Vf, &ctx->P ) ); - - return( 0 ); - } - - /* - * We need to generate blinding values from scratch - */ - - /* Vi = random( 2, P-1 ) */ - count = 0; - do - { - mpi_fill_random( &ctx->Vi, mpi_size( &ctx->P ), f_rng, p_rng ); - - while( mpi_cmp_mpi( &ctx->Vi, &ctx->P ) >= 0 ) - MPI_CHK( mpi_shift_r( &ctx->Vi, 1 ) ); - - if( count++ > 10 ) - return( POLARSSL_ERR_MPI_NOT_ACCEPTABLE ); - } - while( mpi_cmp_int( &ctx->Vi, 1 ) <= 0 ); - - /* Vf = Vi^-X mod P */ - MPI_CHK( mpi_inv_mod( &ctx->Vf, &ctx->Vi, &ctx->P ) ); - MPI_CHK( mpi_exp_mod( &ctx->Vf, &ctx->Vf, &ctx->X, &ctx->P, &ctx->RP ) ); - -cleanup: - return( ret ); -} - -/* - * Derive and export the shared secret (G^Y)^X mod P - */ -SSL_ROM_TEXT_SECTION -int dhm_calc_secret( dhm_context *ctx, - unsigned char *output, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - mpi GYb; - - if( ctx == NULL || *olen < ctx->len ) - return( POLARSSL_ERR_DHM_BAD_INPUT_DATA ); - - if( ( ret = dhm_check_range( &ctx->GY, &ctx->P ) ) != 0 ) - return( ret ); - - mpi_init( &GYb ); - - /* Blind peer's value */ - if( f_rng != NULL ) - { - MPI_CHK( dhm_update_blinding( ctx, f_rng, p_rng ) ); - MPI_CHK( mpi_mul_mpi( &GYb, &ctx->GY, &ctx->Vi ) ); - MPI_CHK( mpi_mod_mpi( &GYb, &GYb, &ctx->P ) ); - } - else - MPI_CHK( mpi_copy( &GYb, &ctx->GY ) ); - - /* Do modular exponentiation */ - MPI_CHK( mpi_exp_mod( &ctx->K, &GYb, &ctx->X, - &ctx->P, &ctx->RP ) ); - - /* Unblind secret value */ - if( f_rng != NULL ) - { - MPI_CHK( mpi_mul_mpi( &ctx->K, &ctx->K, &ctx->Vf ) ); - MPI_CHK( mpi_mod_mpi( &ctx->K, &ctx->K, &ctx->P ) ); - } - - *olen = mpi_size( &ctx->K ); - - MPI_CHK( mpi_write_binary( &ctx->K, output, *olen ) ); - -cleanup: - mpi_free( &GYb ); - - if( ret != 0 ) - return( POLARSSL_ERR_DHM_CALC_SECRET_FAILED + ret ); - - return( 0 ); -} - -/* - * Free the components of a DHM key - */ -SSL_ROM_TEXT_SECTION -void dhm_free( dhm_context *ctx ) -{ - mpi_free( &ctx->pX); mpi_free( &ctx->Vf ); mpi_free( &ctx->Vi ); - mpi_free( &ctx->RP ); mpi_free( &ctx->K ); mpi_free( &ctx->GY ); - mpi_free( &ctx->GX ); mpi_free( &ctx->X ); mpi_free( &ctx->G ); - mpi_free( &ctx->P ); - - polarssl_zeroize( ctx, sizeof( dhm_context ) ); -} - -#if defined(POLARSSL_ASN1_PARSE_C) -/* - * Parse DHM parameters - */ -SSL_ROM_TEXT_SECTION -int dhm_parse_dhm( dhm_context *dhm, const unsigned char *dhmin, - size_t dhminlen ) -{ - int ret; - size_t len; - unsigned char *p, *end; -#if defined(POLARSSL_PEM_PARSE_C) - pem_context pem; - - pem_init( &pem ); - - ret = pem_read_buffer( &pem, - "-----BEGIN DH PARAMETERS-----", - "-----END DH PARAMETERS-----", - dhmin, NULL, 0, &dhminlen ); - - if( ret == 0 ) - { - /* - * Was PEM encoded - */ - dhminlen = pem.buflen; - } - else if( ret != POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - goto exit; - - p = ( ret == 0 ) ? pem.buf : (unsigned char *) dhmin; -#else - p = (unsigned char *) dhmin; -#endif /* POLARSSL_PEM_PARSE_C */ - end = p + dhminlen; - - /* - * DHParams ::= SEQUENCE { - * prime INTEGER, -- P - * generator INTEGER, -- g - * } - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - ret = POLARSSL_ERR_DHM_INVALID_FORMAT + ret; - goto exit; - } - - end = p + len; - - if( ( ret = asn1_get_mpi( &p, end, &dhm->P ) ) != 0 || - ( ret = asn1_get_mpi( &p, end, &dhm->G ) ) != 0 ) - { - ret = POLARSSL_ERR_DHM_INVALID_FORMAT + ret; - goto exit; - } - - if( p != end ) - { - ret = POLARSSL_ERR_DHM_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH; - goto exit; - } - - ret = 0; - - dhm->len = mpi_size( &dhm->P ); - -exit: -#if defined(POLARSSL_PEM_PARSE_C) - pem_free( &pem ); -#endif - if( ret != 0 ) - dhm_free( dhm ); - - return( ret ); -} - -#if defined(POLARSSL_FS_IO) -/* - * Load all data from a file into a given buffer. - */ -SSL_ROM_TEXT_SECTION -static int load_file( const char *path, unsigned char **buf, size_t *n ) -{ - FILE *f; - long size; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_DHM_FILE_IO_ERROR ); - - fseek( f, 0, SEEK_END ); - if( ( size = ftell( f ) ) == -1 ) - { - fclose( f ); - return( POLARSSL_ERR_DHM_FILE_IO_ERROR ); - } - fseek( f, 0, SEEK_SET ); - - *n = (size_t) size; - - if( *n + 1 == 0 || - ( *buf = (unsigned char *) polarssl_malloc( *n + 1 ) ) == NULL ) - { - fclose( f ); - return( POLARSSL_ERR_DHM_MALLOC_FAILED ); - } - - if( fread( *buf, 1, *n, f ) != *n ) - { - fclose( f ); - polarssl_free( *buf ); - return( POLARSSL_ERR_DHM_FILE_IO_ERROR ); - } - - fclose( f ); - - (*buf)[*n] = '\0'; - - return( 0 ); -} - -/* - * Load and parse DHM parameters - */ -SSL_ROM_TEXT_SECTION -int dhm_parse_dhmfile( dhm_context *dhm, const char *path ) -{ - int ret; - size_t n; - unsigned char *buf; - - if( ( ret = load_file( path, &buf, &n ) ) != 0 ) - return( ret ); - - ret = dhm_parse_dhm( dhm, buf, n ); - - polarssl_zeroize( buf, n + 1 ); - polarssl_free( buf ); - - return( ret ); -} -#endif /* POLARSSL_FS_IO */ -#endif /* POLARSSL_ASN1_PARSE_C */ - -#if defined(POLARSSL_SELF_TEST) - -#include "polarssl/certs.h" - -/* - * Checkup routine - */ -SSL_ROM_TEXT_SECTION -int dhm_self_test( int verbose ) -{ -#if defined(POLARSSL_CERTS_C) - int ret; - dhm_context dhm; - - dhm_init( &dhm ); - - if( verbose != 0 ) - polarssl_printf( " DHM parameter load: " ); - - if( ( ret = dhm_parse_dhm( &dhm, (const unsigned char *) test_dhm_params, - strlen( test_dhm_params ) ) ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n\n" ); - -exit: - dhm_free( &dhm ); - - return( ret ); -#else - if( verbose != 0 ) - polarssl_printf( " DHM parameter load: skipped\n" ); - - return( 0 ); -#endif /* POLARSSL_CERTS_C */ -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_DHM_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ecdh.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ecdh.c deleted file mode 100644 index 0a0921b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ecdh.c +++ /dev/null @@ -1,290 +0,0 @@ -/* - * Elliptic curve Diffie-Hellman - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * References: - * - * SEC1 http://www.secg.org/index.php?action=secg,docs_secg - * RFC 4492 - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ECDH_C) - -#include "polarssl/ecdh.h" - -/* - * Generate public key: simple wrapper around ecp_gen_keypair - */ -SSL_ROM_TEXT_SECTION -int ecdh_gen_public( ecp_group *grp, mpi *d, ecp_point *Q, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - return ecp_gen_keypair( grp, d, Q, f_rng, p_rng ); -} - -/* - * Compute shared secret (SEC1 3.3.1) - */ -SSL_ROM_TEXT_SECTION -int ecdh_compute_shared( ecp_group *grp, mpi *z, - const ecp_point *Q, const mpi *d, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - ecp_point P; - - ecp_point_init( &P ); - - /* - * Make sure Q is a valid pubkey before using it - */ - MPI_CHK( ecp_check_pubkey( grp, Q ) ); - - MPI_CHK( ecp_mul( grp, &P, d, Q, f_rng, p_rng ) ); - - if( ecp_is_zero( &P ) ) - { - ret = POLARSSL_ERR_ECP_BAD_INPUT_DATA; - goto cleanup; - } - - MPI_CHK( mpi_copy( z, &P.X ) ); - -cleanup: - ecp_point_free( &P ); - - return( ret ); -} - -/* - * Initialize context - */ -SSL_ROM_TEXT_SECTION -void ecdh_init( ecdh_context *ctx ) -{ - memset( ctx, 0, sizeof( ecdh_context ) ); -} - -/* - * Free context - */ -SSL_ROM_TEXT_SECTION -void ecdh_free( ecdh_context *ctx ) -{ - if( ctx == NULL ) - return; - - ecp_group_free( &ctx->grp ); - ecp_point_free( &ctx->Q ); - ecp_point_free( &ctx->Qp ); - ecp_point_free( &ctx->Vi ); - ecp_point_free( &ctx->Vf ); - mpi_free( &ctx->d ); - mpi_free( &ctx->z ); - mpi_free( &ctx->_d ); -} - -/* - * Setup and write the ServerKeyExhange parameters (RFC 4492) - * struct { - * ECParameters curve_params; - * ECPoint public; - * } ServerECDHParams; - */ -SSL_ROM_TEXT_SECTION -int ecdh_make_params( ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - size_t grp_len, pt_len; - - if( ctx == NULL || ctx->grp.pbits == 0 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( ( ret = ecdh_gen_public( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ) - != 0 ) - return( ret ); - - if( ( ret = ecp_tls_write_group( &ctx->grp, &grp_len, buf, blen ) ) - != 0 ) - return( ret ); - - buf += grp_len; - blen -= grp_len; - - if( ( ret = ecp_tls_write_point( &ctx->grp, &ctx->Q, ctx->point_format, - &pt_len, buf, blen ) ) != 0 ) - return( ret ); - - *olen = grp_len + pt_len; - return( 0 ); -} - -/* - * Read the ServerKeyExhange parameters (RFC 4492) - * struct { - * ECParameters curve_params; - * ECPoint public; - * } ServerECDHParams; - */ -SSL_ROM_TEXT_SECTION -int ecdh_read_params( ecdh_context *ctx, - const unsigned char **buf, const unsigned char *end ) -{ - int ret; - - if( ( ret = ecp_tls_read_group( &ctx->grp, buf, end - *buf ) ) != 0 ) - return( ret ); - - if( ( ret = ecp_tls_read_point( &ctx->grp, &ctx->Qp, buf, end - *buf ) ) - != 0 ) - return( ret ); - - return( 0 ); -} - -/* - * Get parameters from a keypair - */ -SSL_ROM_TEXT_SECTION -int ecdh_get_params( ecdh_context *ctx, const ecp_keypair *key, - ecdh_side side ) -{ - int ret; - - if( ( ret = ecp_group_copy( &ctx->grp, &key->grp ) ) != 0 ) - return( ret ); - - /* If it's not our key, just import the public part as Qp */ - if( side == POLARSSL_ECDH_THEIRS ) - return( ecp_copy( &ctx->Qp, &key->Q ) ); - - /* Our key: import public (as Q) and private parts */ - if( side != POLARSSL_ECDH_OURS ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( ( ret = ecp_copy( &ctx->Q, &key->Q ) ) != 0 || - ( ret = mpi_copy( &ctx->d, &key->d ) ) != 0 ) - return( ret ); - - return( 0 ); -} - -/* - * Setup and export the client public value - */ -SSL_ROM_TEXT_SECTION -int ecdh_make_public( ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - - if( ctx == NULL || ctx->grp.pbits == 0 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( ( ret = ecdh_gen_public( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ) - != 0 ) - return( ret ); - - return ecp_tls_write_point( &ctx->grp, &ctx->Q, ctx->point_format, - olen, buf, blen ); -} - -/* - * Parse and import the client's public value - */ -SSL_ROM_TEXT_SECTION -int ecdh_read_public( ecdh_context *ctx, - const unsigned char *buf, size_t blen ) -{ - int ret; - const unsigned char *p = buf; - - if( ctx == NULL ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( ( ret = ecp_tls_read_point( &ctx->grp, &ctx->Qp, &p, blen ) ) != 0 ) - return( ret ); - - if( (size_t)( p - buf ) != blen ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - return( 0 ); -} - -/* - * Derive and export the shared secret - */ -SSL_ROM_TEXT_SECTION -int ecdh_calc_secret( ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - - if( ctx == NULL ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( ( ret = ecdh_compute_shared( &ctx->grp, &ctx->z, &ctx->Qp, &ctx->d, - f_rng, p_rng ) ) != 0 ) - { - return( ret ); - } - - if( mpi_size( &ctx->z ) > blen ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - *olen = ctx->grp.pbits / 8 + ( ( ctx->grp.pbits % 8 ) != 0 ); - return mpi_write_binary( &ctx->z, buf, *olen ); -} - - -#if defined(POLARSSL_SELF_TEST) - -/* - * Checkup routine - */ -int ecdh_self_test( int verbose ) -{ - ((void) verbose ); - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_ECDH_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ecdsa.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ecdsa.c deleted file mode 100644 index a60a53a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ecdsa.c +++ /dev/null @@ -1,516 +0,0 @@ -/* - * Elliptic curve DSA - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * References: - * - * SEC1 http://www.secg.org/index.php?action=secg,docs_secg - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ECDSA_C) - -#include "polarssl/ecdsa.h" -#include "polarssl/asn1write.h" - -#if defined(POLARSSL_ECDSA_DETERMINISTIC) -#include "polarssl/hmac_drbg.h" -#endif - -#if defined(POLARSSL_ECDSA_DETERMINISTIC) -/* - * This a hopefully temporary compatibility function. - * - * Since we can't ensure the caller will pass a valid md_alg before the next - * interface change, try to pick up a decent md by size. - * - * Argument is the minimum size in bytes of the MD output. - */ -SSL_ROM_TEXT_SECTION -static const md_info_t *md_info_by_size( size_t min_size ) -{ - const md_info_t *md_cur, *md_picked = NULL; - const int *md_alg; - - for( md_alg = md_list(); *md_alg != 0; md_alg++ ) - { - if( ( md_cur = md_info_from_type( *md_alg ) ) == NULL || - (size_t) md_cur->size < min_size || - ( md_picked != NULL && md_cur->size > md_picked->size ) ) - continue; - - md_picked = md_cur; - } - - return( md_picked ); -} -#endif /* POLARSSL_ECDSA_DETERMINISTIC */ - -/* - * Derive a suitable integer for group grp from a buffer of length len - * SEC1 4.1.3 step 5 aka SEC1 4.1.4 step 3 - */ -SSL_ROM_TEXT_SECTION -static int derive_mpi( const ecp_group *grp, mpi *x, - const unsigned char *buf, size_t blen ) -{ - int ret; - size_t n_size = ( grp->nbits + 7 ) / 8; - size_t use_size = blen > n_size ? n_size : blen; - - MPI_CHK( mpi_read_binary( x, buf, use_size ) ); - if( use_size * 8 > grp->nbits ) - MPI_CHK( mpi_shift_r( x, use_size * 8 - grp->nbits ) ); - - /* While at it, reduce modulo N */ - if( mpi_cmp_mpi( x, &grp->N ) >= 0 ) - MPI_CHK( mpi_sub_mpi( x, x, &grp->N ) ); - -cleanup: - return( ret ); -} - -/* - * Compute ECDSA signature of a hashed message (SEC1 4.1.3) - * Obviously, compared to SEC1 4.1.3, we skip step 4 (hash message) - */ -SSL_ROM_TEXT_SECTION -int ecdsa_sign( ecp_group *grp, mpi *r, mpi *s, - const mpi *d, const unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret, key_tries, sign_tries, blind_tries; - ecp_point R; - mpi k, e, t; - - /* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */ - if( grp->N.p == NULL ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - ecp_point_init( &R ); - mpi_init( &k ); mpi_init( &e ); mpi_init( &t ); - - sign_tries = 0; - do - { - /* - * Steps 1-3: generate a suitable ephemeral keypair - * and set r = xR mod n - */ - key_tries = 0; - do - { - MPI_CHK( ecp_gen_keypair( grp, &k, &R, f_rng, p_rng ) ); - MPI_CHK( mpi_mod_mpi( r, &R.X, &grp->N ) ); - - if( key_tries++ > 10 ) - { - ret = POLARSSL_ERR_ECP_RANDOM_FAILED; - goto cleanup; - } - } - while( mpi_cmp_int( r, 0 ) == 0 ); - - /* - * Step 5: derive MPI from hashed message - */ - MPI_CHK( derive_mpi( grp, &e, buf, blen ) ); - - /* - * Generate a random value to blind inv_mod in next step, - * avoiding a potential timing leak. - */ - blind_tries = 0; - do - { - size_t n_size = ( grp->nbits + 7 ) / 8; - MPI_CHK( mpi_fill_random( &t, n_size, f_rng, p_rng ) ); - MPI_CHK( mpi_shift_r( &t, 8 * n_size - grp->nbits ) ); - - /* See ecp_gen_keypair() */ - if( ++blind_tries > 30 ) - return( POLARSSL_ERR_ECP_RANDOM_FAILED ); - } - while( mpi_cmp_int( &t, 1 ) < 0 || - mpi_cmp_mpi( &t, &grp->N ) >= 0 ); - - /* - * Step 6: compute s = (e + r * d) / k = t (e + rd) / (kt) mod n - */ - MPI_CHK( mpi_mul_mpi( s, r, d ) ); - MPI_CHK( mpi_add_mpi( &e, &e, s ) ); - MPI_CHK( mpi_mul_mpi( &e, &e, &t ) ); - MPI_CHK( mpi_mul_mpi( &k, &k, &t ) ); - MPI_CHK( mpi_inv_mod( s, &k, &grp->N ) ); - MPI_CHK( mpi_mul_mpi( s, s, &e ) ); - MPI_CHK( mpi_mod_mpi( s, s, &grp->N ) ); - - if( sign_tries++ > 10 ) - { - ret = POLARSSL_ERR_ECP_RANDOM_FAILED; - goto cleanup; - } - } - while( mpi_cmp_int( s, 0 ) == 0 ); - -cleanup: - ecp_point_free( &R ); - mpi_free( &k ); mpi_free( &e ); mpi_free( &t ); - - return( ret ); -} - -#if defined(POLARSSL_ECDSA_DETERMINISTIC) -/* - * Deterministic signature wrapper - */ -SSL_ROM_TEXT_SECTION -int ecdsa_sign_det( ecp_group *grp, mpi *r, mpi *s, - const mpi *d, const unsigned char *buf, size_t blen, - md_type_t md_alg ) -{ - int ret; - hmac_drbg_context rng_ctx; - unsigned char data[2 * POLARSSL_ECP_MAX_BYTES]; - size_t grp_len = ( grp->nbits + 7 ) / 8; - const md_info_t *md_info; - mpi h; - - /* Temporary fallback */ - if( md_alg == POLARSSL_MD_NONE ) - md_info = md_info_by_size( blen ); - else - md_info = md_info_from_type( md_alg ); - - if( md_info == NULL ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - mpi_init( &h ); - memset( &rng_ctx, 0, sizeof( hmac_drbg_context ) ); - - /* Use private key and message hash (reduced) to initialize HMAC_DRBG */ - MPI_CHK( mpi_write_binary( d, data, grp_len ) ); - MPI_CHK( derive_mpi( grp, &h, buf, blen ) ); - MPI_CHK( mpi_write_binary( &h, data + grp_len, grp_len ) ); - hmac_drbg_init_buf( &rng_ctx, md_info, data, 2 * grp_len ); - - ret = ecdsa_sign( grp, r, s, d, buf, blen, - hmac_drbg_random, &rng_ctx ); - -cleanup: - hmac_drbg_free( &rng_ctx ); - mpi_free( &h ); - - return( ret ); -} -#endif /* POLARSSL_ECDSA_DETERMINISTIC */ - -/* - * Verify ECDSA signature of hashed message (SEC1 4.1.4) - * Obviously, compared to SEC1 4.1.3, we skip step 2 (hash message) - */ -SSL_ROM_TEXT_SECTION -int ecdsa_verify( ecp_group *grp, - const unsigned char *buf, size_t blen, - const ecp_point *Q, const mpi *r, const mpi *s) -{ - int ret; - mpi e, s_inv, u1, u2; - ecp_point R, P; - - ecp_point_init( &R ); ecp_point_init( &P ); - mpi_init( &e ); mpi_init( &s_inv ); mpi_init( &u1 ); mpi_init( &u2 ); - - /* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */ - if( grp->N.p == NULL ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - /* - * Step 1: make sure r and s are in range 1..n-1 - */ - if( mpi_cmp_int( r, 1 ) < 0 || mpi_cmp_mpi( r, &grp->N ) >= 0 || - mpi_cmp_int( s, 1 ) < 0 || mpi_cmp_mpi( s, &grp->N ) >= 0 ) - { - ret = POLARSSL_ERR_ECP_VERIFY_FAILED; - goto cleanup; - } - - /* - * Additional precaution: make sure Q is valid - */ - MPI_CHK( ecp_check_pubkey( grp, Q ) ); - - /* - * Step 3: derive MPI from hashed message - */ - MPI_CHK( derive_mpi( grp, &e, buf, blen ) ); - - /* - * Step 4: u1 = e / s mod n, u2 = r / s mod n - */ - MPI_CHK( mpi_inv_mod( &s_inv, s, &grp->N ) ); - - MPI_CHK( mpi_mul_mpi( &u1, &e, &s_inv ) ); - MPI_CHK( mpi_mod_mpi( &u1, &u1, &grp->N ) ); - - MPI_CHK( mpi_mul_mpi( &u2, r, &s_inv ) ); - MPI_CHK( mpi_mod_mpi( &u2, &u2, &grp->N ) ); - - /* - * Step 5: R = u1 G + u2 Q - * - * Since we're not using any secret data, no need to pass a RNG to - * ecp_mul() for countermesures. - */ - MPI_CHK( ecp_mul( grp, &R, &u1, &grp->G, NULL, NULL ) ); - MPI_CHK( ecp_mul( grp, &P, &u2, Q, NULL, NULL ) ); - MPI_CHK( ecp_add( grp, &R, &R, &P ) ); - - if( ecp_is_zero( &R ) ) - { - ret = POLARSSL_ERR_ECP_VERIFY_FAILED; - goto cleanup; - } - - /* - * Step 6: convert xR to an integer (no-op) - * Step 7: reduce xR mod n (gives v) - */ - MPI_CHK( mpi_mod_mpi( &R.X, &R.X, &grp->N ) ); - - /* - * Step 8: check if v (that is, R.X) is equal to r - */ - if( mpi_cmp_mpi( &R.X, r ) != 0 ) - { - ret = POLARSSL_ERR_ECP_VERIFY_FAILED; - goto cleanup; - } - -cleanup: - ecp_point_free( &R ); ecp_point_free( &P ); - mpi_free( &e ); mpi_free( &s_inv ); mpi_free( &u1 ); mpi_free( &u2 ); - - return( ret ); -} - -/* - * RFC 4492 page 20: - * - * Ecdsa-Sig-Value ::= SEQUENCE { - * r INTEGER, - * s INTEGER - * } - * - * Size is at most - * 1 (tag) + 1 (len) + 1 (initial 0) + ECP_MAX_BYTES for each of r and s, - * twice that + 1 (tag) + 2 (len) for the sequence - * (assuming ECP_MAX_BYTES is less than 126 for r and s, - * and less than 124 (total len <= 255) for the sequence) - */ -#if POLARSSL_ECP_MAX_BYTES > 124 -#error "POLARSSL_ECP_MAX_BYTES bigger than expected, please fix MAX_SIG_LEN" -#endif -#define MAX_SIG_LEN ( 3 + 2 * ( 2 + POLARSSL_ECP_MAX_BYTES ) ) - -/* - * Convert a signature (given by context) to ASN.1 - */ -SSL_ROM_TEXT_SECTION -static int ecdsa_signature_to_asn1( ecdsa_context *ctx, - unsigned char *sig, size_t *slen ) -{ - int ret; - unsigned char buf[MAX_SIG_LEN]; - unsigned char *p = buf + sizeof( buf ); - size_t len = 0; - - ASN1_CHK_ADD( len, asn1_write_mpi( &p, buf, &ctx->s ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &p, buf, &ctx->r ) ); - - ASN1_CHK_ADD( len, asn1_write_len( &p, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &p, buf, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ); - - memcpy( sig, p, len ); - *slen = len; - - return( 0 ); -} - -/* - * Compute and write signature - */ -SSL_ROM_TEXT_SECTION -int ecdsa_write_signature( ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - unsigned char *sig, size_t *slen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - - if( ( ret = ecdsa_sign( &ctx->grp, &ctx->r, &ctx->s, &ctx->d, - hash, hlen, f_rng, p_rng ) ) != 0 ) - { - return( ret ); - } - - return( ecdsa_signature_to_asn1( ctx, sig, slen ) ); -} - -#if defined(POLARSSL_ECDSA_DETERMINISTIC) -/* - * Compute and write signature deterministically - */ -SSL_ROM_TEXT_SECTION -int ecdsa_write_signature_det( ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - unsigned char *sig, size_t *slen, - md_type_t md_alg ) -{ - int ret; - - if( ( ret = ecdsa_sign_det( &ctx->grp, &ctx->r, &ctx->s, &ctx->d, - hash, hlen, md_alg ) ) != 0 ) - { - return( ret ); - } - - return( ecdsa_signature_to_asn1( ctx, sig, slen ) ); -} -#endif /* POLARSSL_ECDSA_DETERMINISTIC */ - -/* - * Read and check signature - */ -SSL_ROM_TEXT_SECTION -int ecdsa_read_signature( ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - const unsigned char *sig, size_t slen ) -{ - int ret; - unsigned char *p = (unsigned char *) sig; - const unsigned char *end = sig + slen; - size_t len; - - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA + ret ); - } - - if( p + len != end ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - if( ( ret = asn1_get_mpi( &p, end, &ctx->r ) ) != 0 || - ( ret = asn1_get_mpi( &p, end, &ctx->s ) ) != 0 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA + ret ); - - if( ( ret = ecdsa_verify( &ctx->grp, hash, hlen, - &ctx->Q, &ctx->r, &ctx->s ) ) != 0 ) - return( ret ); - - if( p != end ) - return( POLARSSL_ERR_ECP_SIG_LEN_MISMATCH ); - - return( 0 ); -} - -/* - * Generate key pair - */ -SSL_ROM_TEXT_SECTION -int ecdsa_genkey( ecdsa_context *ctx, ecp_group_id gid, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - return( ecp_use_known_dp( &ctx->grp, gid ) || - ecp_gen_keypair( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ); -} - -/* - * Set context from an ecp_keypair - */ -SSL_ROM_TEXT_SECTION -int ecdsa_from_keypair( ecdsa_context *ctx, const ecp_keypair *key ) -{ - int ret; - - if( ( ret = ecp_group_copy( &ctx->grp, &key->grp ) ) != 0 || - ( ret = mpi_copy( &ctx->d, &key->d ) ) != 0 || - ( ret = ecp_copy( &ctx->Q, &key->Q ) ) != 0 ) - { - ecdsa_free( ctx ); - } - - return( ret ); -} - -/* - * Initialize context - */ -SSL_ROM_TEXT_SECTION -void ecdsa_init( ecdsa_context *ctx ) -{ - ecp_group_init( &ctx->grp ); - mpi_init( &ctx->d ); - ecp_point_init( &ctx->Q ); - mpi_init( &ctx->r ); - mpi_init( &ctx->s ); -} - -/* - * Free context - */ -SSL_ROM_TEXT_SECTION -void ecdsa_free( ecdsa_context *ctx ) -{ - ecp_group_free( &ctx->grp ); - mpi_free( &ctx->d ); - ecp_point_free( &ctx->Q ); - mpi_free( &ctx->r ); - mpi_free( &ctx->s ); -} - -#if defined(POLARSSL_SELF_TEST) - -/* - * Checkup routine - */ -int ecdsa_self_test( int verbose ) -{ - ((void) verbose ); - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_ECDSA_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ecp.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ecp.c deleted file mode 100644 index a96172f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ecp.c +++ /dev/null @@ -1,2080 +0,0 @@ -/* - * Elliptic curves over GF(p): generic functions - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * References: - * - * SEC1 http://www.secg.org/index.php?action=secg,docs_secg - * GECC = Guide to Elliptic Curve Cryptography - Hankerson, Menezes, Vanstone - * FIPS 186-3 http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf - * RFC 4492 for the related TLS structures and constants - * - * [M255] http://cr.yp.to/ecdh/curve25519-20060209.pdf - * - * [2] CORON, Jean-Sébastien. Resistance against differential power analysis - * for elliptic curve cryptosystems. In : Cryptographic Hardware and - * Embedded Systems. Springer Berlin Heidelberg, 1999. p. 292-302. - * - * - * [3] HEDABOU, Mustapha, PINEL, Pierre, et BÉNÉTEAU, Lucien. A comb method to - * render ECC resistant against Side Channel Attacks. IACR Cryptology - * ePrint Archive, 2004, vol. 2004, p. 342. - * - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ECP_C) - -#include "polarssl/ecp.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include - -#if defined(_MSC_VER) && !defined strcasecmp && !defined(EFIX64) && \ - !defined(EFI32) -#define strcasecmp _stricmp -#endif - -#if defined(_MSC_VER) && !defined(inline) -#define inline _inline -#else -#if defined(__ARMCC_VERSION) && !defined(inline) -#define inline __inline -#endif /* __ARMCC_VERSION */ -#endif /*_MSC_VER */ - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if defined(POLARSSL_SELF_TEST) -/* - * Counts of point addition and doubling, and field multiplications. - * Used to test resistance of point multiplication to simple timing attacks. - */ -static unsigned long add_count, dbl_count, mul_count; -#endif - -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_BP256R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_BP384R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_BP512R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) -#define POLARSSL_ECP_SHORT_WEIERSTRASS -#endif - -#if defined(POLARSSL_ECP_DP_M221_ENABLED) || \ - defined(POLARSSL_ECP_DP_M255_ENABLED) || \ - defined(POLARSSL_ECP_DP_M383_ENABLED) || \ - defined(POLARSSL_ECP_DP_M511_ENABLED) -#define POLARSSL_ECP_MONTGOMERY -#endif - -/* - * Curve types: internal for now, might be exposed later - */ -typedef enum -{ - POLARSSL_ECP_TYPE_NONE = 0, - POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS, /* y^2 = x^3 + a x + b */ - POLARSSL_ECP_TYPE_MONTGOMERY, /* y^2 = x^3 + a x^2 + x */ -} ecp_curve_type; - -/* - * List of supported curves: - * - internal ID - * - TLS NamedCurve ID (RFC 4492 sec. 5.1.1, RFC 7071 sec. 2) - * - size in bits - * - readable name - * - * Curves are listed in order: largest curves first, and for a given size, - * fastest curves first. This provides the default order for the SSL module. - */ -SSL_ROM_DATA_SECTION -static const ecp_curve_info ecp_supported_curves[] = -{ -#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) - { POLARSSL_ECP_DP_SECP521R1, 25, 521, "secp521r1" }, -#endif -#if defined(POLARSSL_ECP_DP_BP512R1_ENABLED) - { POLARSSL_ECP_DP_BP512R1, 28, 512, "brainpoolP512r1" }, -#endif -#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) - { POLARSSL_ECP_DP_SECP384R1, 24, 384, "secp384r1" }, -#endif -#if defined(POLARSSL_ECP_DP_BP384R1_ENABLED) - { POLARSSL_ECP_DP_BP384R1, 27, 384, "brainpoolP384r1" }, -#endif -#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) - { POLARSSL_ECP_DP_SECP256R1, 23, 256, "secp256r1" }, -#endif -#if defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) - { POLARSSL_ECP_DP_SECP256K1, 22, 256, "secp256k1" }, -#endif -#if defined(POLARSSL_ECP_DP_BP256R1_ENABLED) - { POLARSSL_ECP_DP_BP256R1, 26, 256, "brainpoolP256r1" }, -#endif -#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) - { POLARSSL_ECP_DP_SECP224R1, 21, 224, "secp224r1" }, -#endif -#if defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) - { POLARSSL_ECP_DP_SECP224K1, 20, 224, "secp224k1" }, -#endif -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) - { POLARSSL_ECP_DP_SECP192R1, 19, 192, "secp192r1" }, -#endif -#if defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) - { POLARSSL_ECP_DP_SECP192K1, 18, 192, "secp192k1" }, -#endif - { POLARSSL_ECP_DP_NONE, 0, 0, NULL }, -}; - -#define ECP_NB_CURVES sizeof( ecp_supported_curves ) / \ - sizeof( ecp_supported_curves[0] ) - -//static ecp_group_id ecp_supported_grp_id[ECP_NB_CURVES]; - -/* - * List of supported curves and associated info - */ -SSL_ROM_TEXT_SECTION -const ecp_curve_info *ecp_curve_list( void ) -{ - return( ecp_supported_curves ); -} - -/* - * List of supported curves, group ID only - */ -#if 0 -const ecp_group_id *ecp_grp_id_list( void ) -{ - static int init_done = 0; - - if( ! init_done ) - { - size_t i = 0; - const ecp_curve_info *curve_info; - - for( curve_info = ecp_curve_list(); - curve_info->grp_id != POLARSSL_ECP_DP_NONE; - curve_info++ ) - { - ecp_supported_grp_id[i++] = curve_info->grp_id; - } - ecp_supported_grp_id[i] = POLARSSL_ECP_DP_NONE; - - init_done = 1; - } - - return( ecp_supported_grp_id ); -} -#endif -/* - * Get the curve info for the internal identifier - */ -SSL_ROM_TEXT_SECTION -const ecp_curve_info *ecp_curve_info_from_grp_id( ecp_group_id grp_id ) -{ - const ecp_curve_info *curve_info; - - for( curve_info = ecp_curve_list(); - curve_info->grp_id != POLARSSL_ECP_DP_NONE; - curve_info++ ) - { - if( curve_info->grp_id == grp_id ) - return( curve_info ); - } - - return( NULL ); -} - -/* - * Get the curve info from the TLS identifier - */ -SSL_ROM_TEXT_SECTION -const ecp_curve_info *ecp_curve_info_from_tls_id( uint16_t tls_id ) -{ - const ecp_curve_info *curve_info; - - for( curve_info = ecp_curve_list(); - curve_info->grp_id != POLARSSL_ECP_DP_NONE; - curve_info++ ) - { - if( curve_info->tls_id == tls_id ) - return( curve_info ); - } - - return( NULL ); -} - -/* - * Get the curve info from the name - */ -SSL_ROM_TEXT_SECTION -const ecp_curve_info *ecp_curve_info_from_name( const char *name ) -{ - const ecp_curve_info *curve_info; - - for( curve_info = ecp_curve_list(); - curve_info->grp_id != POLARSSL_ECP_DP_NONE; - curve_info++ ) - { - if( strcasecmp( curve_info->name, name ) == 0 ) - return( curve_info ); - } - - return( NULL ); -} - -/* - * Get the type of a curve - */ -SSL_ROM_TEXT_SECTION -static inline ecp_curve_type ecp_get_type( const ecp_group *grp ) -{ - if( grp->G.X.p == NULL ) - return( POLARSSL_ECP_TYPE_NONE ); - - if( grp->G.Y.p == NULL ) - return( POLARSSL_ECP_TYPE_MONTGOMERY ); - else - return( POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS ); -} - -/* - * Initialize (the components of) a point - */ -SSL_ROM_TEXT_SECTION -void ecp_point_init( ecp_point *pt ) -{ - if( pt == NULL ) - return; - - mpi_init( &pt->X ); - mpi_init( &pt->Y ); - mpi_init( &pt->Z ); -} - -/* - * Initialize (the components of) a group - */ -SSL_ROM_TEXT_SECTION -void ecp_group_init( ecp_group *grp ) -{ - if( grp == NULL ) - return; - - memset( grp, 0, sizeof( ecp_group ) ); -} - -/* - * Initialize (the components of) a key pair - */ -SSL_ROM_TEXT_SECTION -void ecp_keypair_init( ecp_keypair *key ) -{ - if( key == NULL ) - return; - - ecp_group_init( &key->grp ); - mpi_init( &key->d ); - ecp_point_init( &key->Q ); -} - -/* - * Unallocate (the components of) a point - */ -SSL_ROM_TEXT_SECTION -void ecp_point_free( ecp_point *pt ) -{ - if( pt == NULL ) - return; - - mpi_free( &( pt->X ) ); - mpi_free( &( pt->Y ) ); - mpi_free( &( pt->Z ) ); -} - -/* - * Unallocate (the components of) a group - */ -SSL_ROM_TEXT_SECTION -void ecp_group_free( ecp_group *grp ) -{ - size_t i; - - if( grp == NULL ) - return; - - if( grp->h != 1 ) - { - mpi_free( &grp->P ); - mpi_free( &grp->A ); - mpi_free( &grp->B ); - ecp_point_free( &grp->G ); - mpi_free( &grp->N ); - } - - if( grp->T != NULL ) - { - for( i = 0; i < grp->T_size; i++ ) - ecp_point_free( &grp->T[i] ); - polarssl_free( grp->T ); - } - - polarssl_zeroize( grp, sizeof( ecp_group ) ); -} - -/* - * Unallocate (the components of) a key pair - */ -SSL_ROM_TEXT_SECTION -void ecp_keypair_free( ecp_keypair *key ) -{ - if( key == NULL ) - return; - - ecp_group_free( &key->grp ); - mpi_free( &key->d ); - ecp_point_free( &key->Q ); -} - -/* - * Copy the contents of a point - */ -SSL_ROM_TEXT_SECTION -int ecp_copy( ecp_point *P, const ecp_point *Q ) -{ - int ret; - - MPI_CHK( mpi_copy( &P->X, &Q->X ) ); - MPI_CHK( mpi_copy( &P->Y, &Q->Y ) ); - MPI_CHK( mpi_copy( &P->Z, &Q->Z ) ); - -cleanup: - return( ret ); -} - -/* - * Copy the contents of a group object - */ -SSL_ROM_TEXT_SECTION -int ecp_group_copy( ecp_group *dst, const ecp_group *src ) -{ - return ecp_use_known_dp( dst, src->id ); -} - -/* - * Set point to zero - */ -SSL_ROM_TEXT_SECTION -int ecp_set_zero( ecp_point *pt ) -{ - int ret; - - MPI_CHK( mpi_lset( &pt->X , 1 ) ); - MPI_CHK( mpi_lset( &pt->Y , 1 ) ); - MPI_CHK( mpi_lset( &pt->Z , 0 ) ); - -cleanup: - return( ret ); -} - -/* - * Tell if a point is zero - */ -SSL_ROM_TEXT_SECTION -int ecp_is_zero( ecp_point *pt ) -{ - return( mpi_cmp_int( &pt->Z, 0 ) == 0 ); -} - -/* - * Import a non-zero point from ASCII strings - */ -SSL_ROM_TEXT_SECTION -int ecp_point_read_string( ecp_point *P, int radix, - const char *x, const char *y ) -{ - int ret; - - MPI_CHK( mpi_read_string( &P->X, radix, x ) ); - MPI_CHK( mpi_read_string( &P->Y, radix, y ) ); - MPI_CHK( mpi_lset( &P->Z, 1 ) ); - -cleanup: - return( ret ); -} - -/* - * Export a point into unsigned binary data (SEC1 2.3.3) - */ -SSL_ROM_TEXT_SECTION -int ecp_point_write_binary( const ecp_group *grp, const ecp_point *P, - int format, size_t *olen, - unsigned char *buf, size_t buflen ) -{ - int ret = 0; - size_t plen; - - if( format != POLARSSL_ECP_PF_UNCOMPRESSED && - format != POLARSSL_ECP_PF_COMPRESSED ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - /* - * Common case: P == 0 - */ - if( mpi_cmp_int( &P->Z, 0 ) == 0 ) - { - if( buflen < 1 ) - return( POLARSSL_ERR_ECP_BUFFER_TOO_SMALL ); - - buf[0] = 0x00; - *olen = 1; - - return( 0 ); - } - - plen = mpi_size( &grp->P ); - - if( format == POLARSSL_ECP_PF_UNCOMPRESSED ) - { - *olen = 2 * plen + 1; - - if( buflen < *olen ) - return( POLARSSL_ERR_ECP_BUFFER_TOO_SMALL ); - - buf[0] = 0x04; - MPI_CHK( mpi_write_binary( &P->X, buf + 1, plen ) ); - MPI_CHK( mpi_write_binary( &P->Y, buf + 1 + plen, plen ) ); - } - else if( format == POLARSSL_ECP_PF_COMPRESSED ) - { - *olen = plen + 1; - - if( buflen < *olen ) - return( POLARSSL_ERR_ECP_BUFFER_TOO_SMALL ); - - buf[0] = 0x02 + mpi_get_bit( &P->Y, 0 ); - MPI_CHK( mpi_write_binary( &P->X, buf + 1, plen ) ); - } - -cleanup: - return( ret ); -} - -/* - * Import a point from unsigned binary data (SEC1 2.3.4) - */ -SSL_ROM_TEXT_SECTION -int ecp_point_read_binary( const ecp_group *grp, ecp_point *pt, - const unsigned char *buf, size_t ilen ) -{ - int ret; - size_t plen; - - if ( ilen < 1 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( buf[0] == 0x00 ) - { - if( ilen == 1 ) - return( ecp_set_zero( pt ) ); - else - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - } - - plen = mpi_size( &grp->P ); - - if( buf[0] != 0x04 ) - return( POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE ); - - if( ilen != 2 * plen + 1 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - MPI_CHK( mpi_read_binary( &pt->X, buf + 1, plen ) ); - MPI_CHK( mpi_read_binary( &pt->Y, buf + 1 + plen, plen ) ); - MPI_CHK( mpi_lset( &pt->Z, 1 ) ); - -cleanup: - return( ret ); -} - -/* - * Import a point from a TLS ECPoint record (RFC 4492) - * struct { - * opaque point <1..2^8-1>; - * } ECPoint; - */ -SSL_ROM_TEXT_SECTION -int ecp_tls_read_point( const ecp_group *grp, ecp_point *pt, - const unsigned char **buf, size_t buf_len ) -{ - unsigned char data_len; - const unsigned char *buf_start; - - /* - * We must have at least two bytes (1 for length, at least one for data) - */ - if( buf_len < 2 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - data_len = *(*buf)++; - if( data_len < 1 || data_len > buf_len - 1 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - /* - * Save buffer start for read_binary and update buf - */ - buf_start = *buf; - *buf += data_len; - - return ecp_point_read_binary( grp, pt, buf_start, data_len ); -} - -/* - * Export a point as a TLS ECPoint record (RFC 4492) - * struct { - * opaque point <1..2^8-1>; - * } ECPoint; - */ -SSL_ROM_TEXT_SECTION -int ecp_tls_write_point( const ecp_group *grp, const ecp_point *pt, - int format, size_t *olen, - unsigned char *buf, size_t blen ) -{ - int ret; - - /* - * buffer length must be at least one, for our length byte - */ - if( blen < 1 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( ( ret = ecp_point_write_binary( grp, pt, format, - olen, buf + 1, blen - 1) ) != 0 ) - return( ret ); - - /* - * write length to the first byte and update total length - */ - buf[0] = (unsigned char) *olen; - ++*olen; - - return( 0 ); -} - -/* - * Import an ECP group from ASCII strings, case A == -3 - */ -SSL_ROM_TEXT_SECTION -int ecp_group_read_string( ecp_group *grp, int radix, - const char *p, const char *b, - const char *gx, const char *gy, const char *n) -{ - int ret; - - MPI_CHK( mpi_read_string( &grp->P, radix, p ) ); - MPI_CHK( mpi_read_string( &grp->B, radix, b ) ); - MPI_CHK( ecp_point_read_string( &grp->G, radix, gx, gy ) ); - MPI_CHK( mpi_read_string( &grp->N, radix, n ) ); - - grp->pbits = mpi_msb( &grp->P ); - grp->nbits = mpi_msb( &grp->N ); - -cleanup: - if( ret != 0 ) - ecp_group_free( grp ); - - return( ret ); -} - -/* - * Set a group from an ECParameters record (RFC 4492) - */ -SSL_ROM_TEXT_SECTION -int ecp_tls_read_group( ecp_group *grp, const unsigned char **buf, size_t len ) -{ - uint16_t tls_id; - const ecp_curve_info *curve_info; - - /* - * We expect at least three bytes (see below) - */ - if( len < 3 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - /* - * First byte is curve_type; only named_curve is handled - */ - if( *(*buf)++ != POLARSSL_ECP_TLS_NAMED_CURVE ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - /* - * Next two bytes are the namedcurve value - */ - tls_id = *(*buf)++; - tls_id <<= 8; - tls_id |= *(*buf)++; - - if( ( curve_info = ecp_curve_info_from_tls_id( tls_id ) ) == NULL ) - return( POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE ); - - return ecp_use_known_dp( grp, curve_info->grp_id ); -} - -/* - * Write the ECParameters record corresponding to a group (RFC 4492) - */ -SSL_ROM_TEXT_SECTION -int ecp_tls_write_group( const ecp_group *grp, size_t *olen, - unsigned char *buf, size_t blen ) -{ - const ecp_curve_info *curve_info; - - if( ( curve_info = ecp_curve_info_from_grp_id( grp->id ) ) == NULL ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - /* - * We are going to write 3 bytes (see below) - */ - *olen = 3; - if( blen < *olen ) - return( POLARSSL_ERR_ECP_BUFFER_TOO_SMALL ); - - /* - * First byte is curve_type, always named_curve - */ - *buf++ = POLARSSL_ECP_TLS_NAMED_CURVE; - - /* - * Next two bytes are the namedcurve value - */ - buf[0] = curve_info->tls_id >> 8; - buf[1] = curve_info->tls_id & 0xFF; - - return( 0 ); -} - -/* - * Wrapper around fast quasi-modp functions, with fall-back to mpi_mod_mpi. - * See the documentation of struct ecp_group. - * - * This function is in the critial loop for ecp_mul, so pay attention to perf. - */ -SSL_ROM_TEXT_SECTION -static int ecp_modp( mpi *N, const ecp_group *grp ) -{ - int ret; - - if( grp->modp == NULL ) - return( mpi_mod_mpi( N, N, &grp->P ) ); - - /* N->s < 0 is a much faster test, which fails only if N is 0 */ - if( ( N->s < 0 && mpi_cmp_int( N, 0 ) != 0 ) || - mpi_msb( N ) > 2 * grp->pbits ) - { - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - } - - MPI_CHK( grp->modp( N ) ); - - /* N->s < 0 is a much faster test, which fails only if N is 0 */ - while( N->s < 0 && mpi_cmp_int( N, 0 ) != 0 ) - MPI_CHK( mpi_add_mpi( N, N, &grp->P ) ); - - while( mpi_cmp_mpi( N, &grp->P ) >= 0 ) - /* we known P, N and the result are positive */ - MPI_CHK( mpi_sub_abs( N, N, &grp->P ) ); - -cleanup: - return( ret ); -} - -/* - * Fast mod-p functions expect their argument to be in the 0..p^2 range. - * - * In order to guarantee that, we need to ensure that operands of - * mpi_mul_mpi are in the 0..p range. So, after each operation we will - * bring the result back to this range. - * - * The following macros are shortcuts for doing that. - */ - -/* - * Reduce a mpi mod p in-place, general case, to use after mpi_mul_mpi - */ -#if defined(POLARSSL_SELF_TEST) -#define INC_MUL_COUNT mul_count++; -#else -#define INC_MUL_COUNT -#endif - -#define MOD_MUL( N ) do { MPI_CHK( ecp_modp( &N, grp ) ); INC_MUL_COUNT } \ - while( 0 ) - -/* - * Reduce a mpi mod p in-place, to use after mpi_sub_mpi - * N->s < 0 is a very fast test, which fails only if N is 0 - */ -#define MOD_SUB( N ) \ - while( N.s < 0 && mpi_cmp_int( &N, 0 ) != 0 ) \ - MPI_CHK( mpi_add_mpi( &N, &N, &grp->P ) ) - -/* - * Reduce a mpi mod p in-place, to use after mpi_add_mpi and mpi_mul_int. - * We known P, N and the result are positive, so sub_abs is correct, and - * a bit faster. - */ -#define MOD_ADD( N ) \ - while( mpi_cmp_mpi( &N, &grp->P ) >= 0 ) \ - MPI_CHK( mpi_sub_abs( &N, &N, &grp->P ) ) - -#if defined(POLARSSL_ECP_SHORT_WEIERSTRASS) -/* - * For curves in short Weierstrass form, we do all the internal operations in - * Jacobian coordinates. - * - * For multiplication, we'll use a comb method with coutermeasueres against - * SPA, hence timing attacks. - */ - -/* - * Normalize jacobian coordinates so that Z == 0 || Z == 1 (GECC 3.2.1) - * Cost: 1N := 1I + 3M + 1S - */ -SSL_ROM_TEXT_SECTION -static int ecp_normalize_jac( const ecp_group *grp, ecp_point *pt ) -{ - int ret; - mpi Zi, ZZi; - - if( mpi_cmp_int( &pt->Z, 0 ) == 0 ) - return( 0 ); - - mpi_init( &Zi ); mpi_init( &ZZi ); - - /* - * X = X / Z^2 mod p - */ - MPI_CHK( mpi_inv_mod( &Zi, &pt->Z, &grp->P ) ); - MPI_CHK( mpi_mul_mpi( &ZZi, &Zi, &Zi ) ); MOD_MUL( ZZi ); - MPI_CHK( mpi_mul_mpi( &pt->X, &pt->X, &ZZi ) ); MOD_MUL( pt->X ); - - /* - * Y = Y / Z^3 mod p - */ - MPI_CHK( mpi_mul_mpi( &pt->Y, &pt->Y, &ZZi ) ); MOD_MUL( pt->Y ); - MPI_CHK( mpi_mul_mpi( &pt->Y, &pt->Y, &Zi ) ); MOD_MUL( pt->Y ); - - /* - * Z = 1 - */ - MPI_CHK( mpi_lset( &pt->Z, 1 ) ); - -cleanup: - - mpi_free( &Zi ); mpi_free( &ZZi ); - - return( ret ); -} - -/* - * Normalize jacobian coordinates of an array of (pointers to) points, - * using Montgomery's trick to perform only one inversion mod P. - * (See for example Cohen's "A Course in Computational Algebraic Number - * Theory", Algorithm 10.3.4.) - * - * Warning: fails (returning an error) if one of the points is zero! - * This should never happen, see choice of w in ecp_mul_comb(). - * - * Cost: 1N(t) := 1I + (6t - 3)M + 1S - */ -SSL_ROM_TEXT_SECTION -static int ecp_normalize_jac_many( const ecp_group *grp, - ecp_point *T[], size_t t_len ) -{ - int ret; - size_t i; - mpi *c, u, Zi, ZZi; - - if( t_len < 2 ) - return( ecp_normalize_jac( grp, *T ) ); - - if( ( c = (mpi *) polarssl_malloc( t_len * sizeof( mpi ) ) ) == NULL ) - return( POLARSSL_ERR_ECP_MALLOC_FAILED ); - - mpi_init( &u ); mpi_init( &Zi ); mpi_init( &ZZi ); - for( i = 0; i < t_len; i++ ) - mpi_init( &c[i] ); - - /* - * c[i] = Z_0 * ... * Z_i - */ - MPI_CHK( mpi_copy( &c[0], &T[0]->Z ) ); - for( i = 1; i < t_len; i++ ) - { - MPI_CHK( mpi_mul_mpi( &c[i], &c[i-1], &T[i]->Z ) ); - MOD_MUL( c[i] ); - } - - /* - * u = 1 / (Z_0 * ... * Z_n) mod P - */ - MPI_CHK( mpi_inv_mod( &u, &c[t_len-1], &grp->P ) ); - - for( i = t_len - 1; ; i-- ) - { - /* - * Zi = 1 / Z_i mod p - * u = 1 / (Z_0 * ... * Z_i) mod P - */ - if( i == 0 ) { - MPI_CHK( mpi_copy( &Zi, &u ) ); - } - else - { - MPI_CHK( mpi_mul_mpi( &Zi, &u, &c[i-1] ) ); MOD_MUL( Zi ); - MPI_CHK( mpi_mul_mpi( &u, &u, &T[i]->Z ) ); MOD_MUL( u ); - } - - /* - * proceed as in normalize() - */ - MPI_CHK( mpi_mul_mpi( &ZZi, &Zi, &Zi ) ); MOD_MUL( ZZi ); - MPI_CHK( mpi_mul_mpi( &T[i]->X, &T[i]->X, &ZZi ) ); MOD_MUL( T[i]->X ); - MPI_CHK( mpi_mul_mpi( &T[i]->Y, &T[i]->Y, &ZZi ) ); MOD_MUL( T[i]->Y ); - MPI_CHK( mpi_mul_mpi( &T[i]->Y, &T[i]->Y, &Zi ) ); MOD_MUL( T[i]->Y ); - - /* - * Post-precessing: reclaim some memory by shrinking coordinates - * - not storing Z (always 1) - * - shrinking other coordinates, but still keeping the same number of - * limbs as P, as otherwise it will too likely be regrown too fast. - */ - MPI_CHK( mpi_shrink( &T[i]->X, grp->P.n ) ); - MPI_CHK( mpi_shrink( &T[i]->Y, grp->P.n ) ); - mpi_free( &T[i]->Z ); - - if( i == 0 ) - break; - } - -cleanup: - - mpi_free( &u ); mpi_free( &Zi ); mpi_free( &ZZi ); - for( i = 0; i < t_len; i++ ) - mpi_free( &c[i] ); - polarssl_free( c ); - - return( ret ); -} - -/* - * Conditional point inversion: Q -> -Q = (Q.X, -Q.Y, Q.Z) without leak. - * "inv" must be 0 (don't invert) or 1 (invert) or the result will be invalid - */ -SSL_ROM_TEXT_SECTION -static int ecp_safe_invert_jac( const ecp_group *grp, - ecp_point *Q, - unsigned char inv ) -{ - int ret; - unsigned char nonzero; - mpi mQY; - - mpi_init( &mQY ); - - /* Use the fact that -Q.Y mod P = P - Q.Y unless Q.Y == 0 */ - MPI_CHK( mpi_sub_mpi( &mQY, &grp->P, &Q->Y ) ); - nonzero = mpi_cmp_int( &Q->Y, 0 ) != 0; - MPI_CHK( mpi_safe_cond_assign( &Q->Y, &mQY, inv & nonzero ) ); - -cleanup: - mpi_free( &mQY ); - - return( ret ); -} - -/* - * Point doubling R = 2 P, Jacobian coordinates - * - * http://www.hyperelliptic.org/EFD/g1p/auto-code/shortw/jacobian/doubling/dbl-2007-bl.op3 - * with heavy variable renaming, some reordering and one minor modification - * (a = 2 * b, c = d - 2a replaced with c = d, c = c - b, c = c - b) - * in order to use a lot less intermediate variables (6 vs 25). - * - * Cost: 1D := 2M + 8S - */ -SSL_ROM_TEXT_SECTION -static int ecp_double_jac( const ecp_group *grp, ecp_point *R, - const ecp_point *P ) -{ - int ret; - mpi T1, T2, T3, X3, Y3, Z3; - -#if defined(POLARSSL_SELF_TEST) - dbl_count++; -#endif - - mpi_init( &T1 ); mpi_init( &T2 ); mpi_init( &T3 ); - mpi_init( &X3 ); mpi_init( &Y3 ); mpi_init( &Z3 ); - - MPI_CHK( mpi_mul_mpi( &T3, &P->X, &P->X ) ); MOD_MUL( T3 ); - MPI_CHK( mpi_mul_mpi( &T2, &P->Y, &P->Y ) ); MOD_MUL( T2 ); - MPI_CHK( mpi_mul_mpi( &Y3, &T2, &T2 ) ); MOD_MUL( Y3 ); - MPI_CHK( mpi_add_mpi( &X3, &P->X, &T2 ) ); MOD_ADD( X3 ); - MPI_CHK( mpi_mul_mpi( &X3, &X3, &X3 ) ); MOD_MUL( X3 ); - MPI_CHK( mpi_sub_mpi( &X3, &X3, &Y3 ) ); MOD_SUB( X3 ); - MPI_CHK( mpi_sub_mpi( &X3, &X3, &T3 ) ); MOD_SUB( X3 ); - MPI_CHK( mpi_mul_int( &T1, &X3, 2 ) ); MOD_ADD( T1 ); - MPI_CHK( mpi_mul_mpi( &Z3, &P->Z, &P->Z ) ); MOD_MUL( Z3 ); - MPI_CHK( mpi_mul_mpi( &X3, &Z3, &Z3 ) ); MOD_MUL( X3 ); - MPI_CHK( mpi_mul_int( &T3, &T3, 3 ) ); MOD_ADD( T3 ); - - /* Special case for A = -3 */ - if( grp->A.p == NULL ) - { - MPI_CHK( mpi_mul_int( &X3, &X3, 3 ) ); - X3.s = -1; /* mpi_mul_int doesn't handle negative numbers */ - MOD_SUB( X3 ); - } - else - MPI_CHK( mpi_mul_mpi( &X3, &X3, &grp->A ) ); MOD_MUL( X3 ); - - MPI_CHK( mpi_add_mpi( &T3, &T3, &X3 ) ); MOD_ADD( T3 ); - MPI_CHK( mpi_mul_mpi( &X3, &T3, &T3 ) ); MOD_MUL( X3 ); - MPI_CHK( mpi_sub_mpi( &X3, &X3, &T1 ) ); MOD_SUB( X3 ); - MPI_CHK( mpi_sub_mpi( &X3, &X3, &T1 ) ); MOD_SUB( X3 ); - MPI_CHK( mpi_sub_mpi( &T1, &T1, &X3 ) ); MOD_SUB( T1 ); - MPI_CHK( mpi_mul_mpi( &T1, &T3, &T1 ) ); MOD_MUL( T1 ); - MPI_CHK( mpi_mul_int( &T3, &Y3, 8 ) ); MOD_ADD( T3 ); - MPI_CHK( mpi_sub_mpi( &Y3, &T1, &T3 ) ); MOD_SUB( Y3 ); - MPI_CHK( mpi_add_mpi( &T1, &P->Y, &P->Z ) ); MOD_ADD( T1 ); - MPI_CHK( mpi_mul_mpi( &T1, &T1, &T1 ) ); MOD_MUL( T1 ); - MPI_CHK( mpi_sub_mpi( &T1, &T1, &T2 ) ); MOD_SUB( T1 ); - MPI_CHK( mpi_sub_mpi( &Z3, &T1, &Z3 ) ); MOD_SUB( Z3 ); - - MPI_CHK( mpi_copy( &R->X, &X3 ) ); - MPI_CHK( mpi_copy( &R->Y, &Y3 ) ); - MPI_CHK( mpi_copy( &R->Z, &Z3 ) ); - -cleanup: - mpi_free( &T1 ); mpi_free( &T2 ); mpi_free( &T3 ); - mpi_free( &X3 ); mpi_free( &Y3 ); mpi_free( &Z3 ); - - return( ret ); -} - -/* - * Addition: R = P + Q, mixed affine-Jacobian coordinates (GECC 3.22) - * - * The coordinates of Q must be normalized (= affine), - * but those of P don't need to. R is not normalized. - * - * Special cases: (1) P or Q is zero, (2) R is zero, (3) P == Q. - * None of these cases can happen as intermediate step in ecp_mul_comb(): - * - at each step, P, Q and R are multiples of the base point, the factor - * being less than its order, so none of them is zero; - * - Q is an odd multiple of the base point, P an even multiple, - * due to the choice of precomputed points in the modified comb method. - * So branches for these cases do not leak secret information. - * - * We accept Q->Z being unset (saving memory in tables) as meaning 1. - * - * Cost: 1A := 8M + 3S - */ -SSL_ROM_TEXT_SECTION -static int ecp_add_mixed( const ecp_group *grp, ecp_point *R, - const ecp_point *P, const ecp_point *Q ) -{ - int ret; - mpi T1, T2, T3, T4, X, Y, Z; - -#if defined(POLARSSL_SELF_TEST) - add_count++; -#endif - - /* - * Trivial cases: P == 0 or Q == 0 (case 1) - */ - if( mpi_cmp_int( &P->Z, 0 ) == 0 ) - return( ecp_copy( R, Q ) ); - - if( Q->Z.p != NULL && mpi_cmp_int( &Q->Z, 0 ) == 0 ) - return( ecp_copy( R, P ) ); - - /* - * Make sure Q coordinates are normalized - */ - if( Q->Z.p != NULL && mpi_cmp_int( &Q->Z, 1 ) != 0 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - mpi_init( &T1 ); mpi_init( &T2 ); mpi_init( &T3 ); mpi_init( &T4 ); - mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); - - MPI_CHK( mpi_mul_mpi( &T1, &P->Z, &P->Z ) ); MOD_MUL( T1 ); - MPI_CHK( mpi_mul_mpi( &T2, &T1, &P->Z ) ); MOD_MUL( T2 ); - MPI_CHK( mpi_mul_mpi( &T1, &T1, &Q->X ) ); MOD_MUL( T1 ); - MPI_CHK( mpi_mul_mpi( &T2, &T2, &Q->Y ) ); MOD_MUL( T2 ); - MPI_CHK( mpi_sub_mpi( &T1, &T1, &P->X ) ); MOD_SUB( T1 ); - MPI_CHK( mpi_sub_mpi( &T2, &T2, &P->Y ) ); MOD_SUB( T2 ); - - /* Special cases (2) and (3) */ - if( mpi_cmp_int( &T1, 0 ) == 0 ) - { - if( mpi_cmp_int( &T2, 0 ) == 0 ) - { - ret = ecp_double_jac( grp, R, P ); - goto cleanup; - } - else - { - ret = ecp_set_zero( R ); - goto cleanup; - } - } - - MPI_CHK( mpi_mul_mpi( &Z, &P->Z, &T1 ) ); MOD_MUL( Z ); - MPI_CHK( mpi_mul_mpi( &T3, &T1, &T1 ) ); MOD_MUL( T3 ); - MPI_CHK( mpi_mul_mpi( &T4, &T3, &T1 ) ); MOD_MUL( T4 ); - MPI_CHK( mpi_mul_mpi( &T3, &T3, &P->X ) ); MOD_MUL( T3 ); - MPI_CHK( mpi_mul_int( &T1, &T3, 2 ) ); MOD_ADD( T1 ); - MPI_CHK( mpi_mul_mpi( &X, &T2, &T2 ) ); MOD_MUL( X ); - MPI_CHK( mpi_sub_mpi( &X, &X, &T1 ) ); MOD_SUB( X ); - MPI_CHK( mpi_sub_mpi( &X, &X, &T4 ) ); MOD_SUB( X ); - MPI_CHK( mpi_sub_mpi( &T3, &T3, &X ) ); MOD_SUB( T3 ); - MPI_CHK( mpi_mul_mpi( &T3, &T3, &T2 ) ); MOD_MUL( T3 ); - MPI_CHK( mpi_mul_mpi( &T4, &T4, &P->Y ) ); MOD_MUL( T4 ); - MPI_CHK( mpi_sub_mpi( &Y, &T3, &T4 ) ); MOD_SUB( Y ); - - MPI_CHK( mpi_copy( &R->X, &X ) ); - MPI_CHK( mpi_copy( &R->Y, &Y ) ); - MPI_CHK( mpi_copy( &R->Z, &Z ) ); - -cleanup: - - mpi_free( &T1 ); mpi_free( &T2 ); mpi_free( &T3 ); mpi_free( &T4 ); - mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); - - return( ret ); -} - -/* - * Addition: R = P + Q, result's coordinates normalized - */ -SSL_ROM_TEXT_SECTION -int ecp_add( const ecp_group *grp, ecp_point *R, - const ecp_point *P, const ecp_point *Q ) -{ - int ret; - - if( ecp_get_type( grp ) != POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS ) - return( POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE ); - - MPI_CHK( ecp_add_mixed( grp, R, P, Q ) ); - MPI_CHK( ecp_normalize_jac( grp, R ) ); - -cleanup: - return( ret ); -} - -/* - * Subtraction: R = P - Q, result's coordinates normalized - */ -SSL_ROM_TEXT_SECTION -int ecp_sub( const ecp_group *grp, ecp_point *R, - const ecp_point *P, const ecp_point *Q ) -{ - int ret; - ecp_point mQ; - - ecp_point_init( &mQ ); - - if( ecp_get_type( grp ) != POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS ) - return( POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE ); - - /* mQ = - Q */ - MPI_CHK( ecp_copy( &mQ, Q ) ); - if( mpi_cmp_int( &mQ.Y, 0 ) != 0 ) - MPI_CHK( mpi_sub_mpi( &mQ.Y, &grp->P, &mQ.Y ) ); - - MPI_CHK( ecp_add_mixed( grp, R, P, &mQ ) ); - MPI_CHK( ecp_normalize_jac( grp, R ) ); - -cleanup: - ecp_point_free( &mQ ); - - return( ret ); -} - -/* - * Randomize jacobian coordinates: - * (X, Y, Z) -> (l^2 X, l^3 Y, l Z) for random l - * This is sort of the reverse operation of ecp_normalize_jac(). - * - * This countermeasure was first suggested in [2]. - */ -SSL_ROM_TEXT_SECTION -static int ecp_randomize_jac( const ecp_group *grp, ecp_point *pt, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret; - mpi l, ll; - size_t p_size = ( grp->pbits + 7 ) / 8; - int count = 0; - - mpi_init( &l ); mpi_init( &ll ); - - /* Generate l such that 1 < l < p */ - do - { - mpi_fill_random( &l, p_size, f_rng, p_rng ); - - while( mpi_cmp_mpi( &l, &grp->P ) >= 0 ) - MPI_CHK( mpi_shift_r( &l, 1 ) ); - - if( count++ > 10 ) - return( POLARSSL_ERR_ECP_RANDOM_FAILED ); - } - while( mpi_cmp_int( &l, 1 ) <= 0 ); - - /* Z = l * Z */ - MPI_CHK( mpi_mul_mpi( &pt->Z, &pt->Z, &l ) ); MOD_MUL( pt->Z ); - - /* X = l^2 * X */ - MPI_CHK( mpi_mul_mpi( &ll, &l, &l ) ); MOD_MUL( ll ); - MPI_CHK( mpi_mul_mpi( &pt->X, &pt->X, &ll ) ); MOD_MUL( pt->X ); - - /* Y = l^3 * Y */ - MPI_CHK( mpi_mul_mpi( &ll, &ll, &l ) ); MOD_MUL( ll ); - MPI_CHK( mpi_mul_mpi( &pt->Y, &pt->Y, &ll ) ); MOD_MUL( pt->Y ); - -cleanup: - mpi_free( &l ); mpi_free( &ll ); - - return( ret ); -} - -/* - * Check and define parameters used by the comb method (see below for details) - */ -#if POLARSSL_ECP_WINDOW_SIZE < 2 || POLARSSL_ECP_WINDOW_SIZE > 7 -#error "POLARSSL_ECP_WINDOW_SIZE out of bounds" -#endif - -/* d = ceil( n / w ) */ -#define COMB_MAX_D ( POLARSSL_ECP_MAX_BITS + 1 ) / 2 - -/* number of precomputed points */ -#define COMB_MAX_PRE ( 1 << ( POLARSSL_ECP_WINDOW_SIZE - 1 ) ) - -/* - * Compute the representation of m that will be used with our comb method. - * - * The basic comb method is described in GECC 3.44 for example. We use a - * modified version that provides resistance to SPA by avoiding zero - * digits in the representation as in [3]. We modify the method further by - * requiring that all K_i be odd, which has the small cost that our - * representation uses one more K_i, due to carries. - * - * Also, for the sake of compactness, only the seven low-order bits of x[i] - * are used to represent K_i, and the msb of x[i] encodes the the sign (s_i in - * the paper): it is set if and only if if s_i == -1; - * - * Calling conventions: - * - x is an array of size d + 1 - * - w is the size, ie number of teeth, of the comb, and must be between - * 2 and 7 (in practice, between 2 and POLARSSL_ECP_WINDOW_SIZE) - * - m is the MPI, expected to be odd and such that bitlength(m) <= w * d - * (the result will be incorrect if these assumptions are not satisfied) - */ -SSL_ROM_TEXT_SECTION -static void ecp_comb_fixed( unsigned char x[], size_t d, - unsigned char w, const mpi *m ) -{ - size_t i, j; - unsigned char c, cc, adjust; - - memset( x, 0, d+1 ); - - /* First get the classical comb values (except for x_d = 0) */ - for( i = 0; i < d; i++ ) - for( j = 0; j < w; j++ ) - x[i] |= mpi_get_bit( m, i + d * j ) << j; - - /* Now make sure x_1 .. x_d are odd */ - c = 0; - for( i = 1; i <= d; i++ ) - { - /* Add carry and update it */ - cc = x[i] & c; - x[i] = x[i] ^ c; - c = cc; - - /* Adjust if needed, avoiding branches */ - adjust = 1 - ( x[i] & 0x01 ); - c |= x[i] & ( x[i-1] * adjust ); - x[i] = x[i] ^ ( x[i-1] * adjust ); - x[i-1] |= adjust << 7; - } -} - -/* - * Precompute points for the comb method - * - * If i = i_{w-1} ... i_1 is the binary representation of i, then - * T[i] = i_{w-1} 2^{(w-1)d} P + ... + i_1 2^d P + P - * - * T must be able to hold 2^{w - 1} elements - * - * Cost: d(w-1) D + (2^{w-1} - 1) A + 1 N(w-1) + 1 N(2^{w-1} - 1) - */ -SSL_ROM_TEXT_SECTION -static int ecp_precompute_comb( const ecp_group *grp, - ecp_point T[], const ecp_point *P, - unsigned char w, size_t d ) -{ - int ret; - unsigned char i, k; - size_t j; - ecp_point *cur, *TT[COMB_MAX_PRE - 1]; - - /* - * Set T[0] = P and - * T[2^{l-1}] = 2^{dl} P for l = 1 .. w-1 (this is not the final value) - */ - MPI_CHK( ecp_copy( &T[0], P ) ); - - k = 0; - for( i = 1; i < ( 1U << ( w - 1 ) ); i <<= 1 ) - { - cur = T + i; - MPI_CHK( ecp_copy( cur, T + ( i >> 1 ) ) ); - for( j = 0; j < d; j++ ) - MPI_CHK( ecp_double_jac( grp, cur, cur ) ); - - TT[k++] = cur; - } - - MPI_CHK( ecp_normalize_jac_many( grp, TT, k ) ); - - /* - * Compute the remaining ones using the minimal number of additions - * Be careful to update T[2^l] only after using it! - */ - k = 0; - for( i = 1; i < ( 1U << ( w - 1 ) ); i <<= 1 ) - { - j = i; - while( j-- ) - { - MPI_CHK( ecp_add_mixed( grp, &T[i + j], &T[j], &T[i] ) ); - TT[k++] = &T[i + j]; - } - } - - MPI_CHK( ecp_normalize_jac_many( grp, TT, k ) ); - -cleanup: - return( ret ); -} - -/* - * Select precomputed point: R = sign(i) * T[ abs(i) / 2 ] - */ -SSL_ROM_TEXT_SECTION -static int ecp_select_comb( const ecp_group *grp, ecp_point *R, - const ecp_point T[], unsigned char t_len, - unsigned char i ) -{ - int ret; - unsigned char ii, j; - - /* Ignore the "sign" bit and scale down */ - ii = ( i & 0x7Fu ) >> 1; - - /* Read the whole table to thwart cache-based timing attacks */ - for( j = 0; j < t_len; j++ ) - { - MPI_CHK( mpi_safe_cond_assign( &R->X, &T[j].X, j == ii ) ); - MPI_CHK( mpi_safe_cond_assign( &R->Y, &T[j].Y, j == ii ) ); - } - - /* Safely invert result if i is "negative" */ - MPI_CHK( ecp_safe_invert_jac( grp, R, i >> 7 ) ); - -cleanup: - return( ret ); -} - -/* - * Core multiplication algorithm for the (modified) comb method. - * This part is actually common with the basic comb method (GECC 3.44) - * - * Cost: d A + d D + 1 R - */ -SSL_ROM_TEXT_SECTION -static int ecp_mul_comb_core( const ecp_group *grp, ecp_point *R, - const ecp_point T[], unsigned char t_len, - const unsigned char x[], size_t d, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - ecp_point Txi; - size_t i; - - ecp_point_init( &Txi ); - - /* Start with a non-zero point and randomize its coordinates */ - i = d; - MPI_CHK( ecp_select_comb( grp, R, T, t_len, x[i] ) ); - MPI_CHK( mpi_lset( &R->Z, 1 ) ); - if( f_rng != 0 ) - MPI_CHK( ecp_randomize_jac( grp, R, f_rng, p_rng ) ); - - while( i-- != 0 ) - { - MPI_CHK( ecp_double_jac( grp, R, R ) ); - MPI_CHK( ecp_select_comb( grp, &Txi, T, t_len, x[i] ) ); - MPI_CHK( ecp_add_mixed( grp, R, R, &Txi ) ); - } - -cleanup: - ecp_point_free( &Txi ); - - return( ret ); -} - -/* - * Multiplication using the comb method, - * for curves in short Weierstrass form - */ -SSL_ROM_TEXT_SECTION -static int ecp_mul_comb( ecp_group *grp, ecp_point *R, - const mpi *m, const ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - unsigned char w, m_is_odd, p_eq_g, pre_len, i; - size_t d; - unsigned char k[COMB_MAX_D + 1]; - ecp_point *T; - mpi M, mm; - - mpi_init( &M ); - mpi_init( &mm ); - - /* we need N to be odd to trnaform m in an odd number, check now */ - if( mpi_get_bit( &grp->N, 0 ) != 1 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - /* - * Minimize the number of multiplications, that is minimize - * 10 * d * w + 18 * 2^(w-1) + 11 * d + 7 * w, with d = ceil( nbits / w ) - * (see costs of the various parts, with 1S = 1M) - */ - w = grp->nbits >= 384 ? 5 : 4; - - /* - * If P == G, pre-compute a bit more, since this may be re-used later. - * Just adding one avoids upping the cost of the first mul too much, - * and the memory cost too. - */ -#if POLARSSL_ECP_FIXED_POINT_OPTIM == 1 - p_eq_g = ( mpi_cmp_mpi( &P->Y, &grp->G.Y ) == 0 && - mpi_cmp_mpi( &P->X, &grp->G.X ) == 0 ); - if( p_eq_g ) - w++; -#else - p_eq_g = 0; -#endif - - /* - * Make sure w is within bounds. - * (The last test is useful only for very small curves in the test suite.) - */ - if( w > POLARSSL_ECP_WINDOW_SIZE ) - w = POLARSSL_ECP_WINDOW_SIZE; - if( w >= grp->nbits ) - w = 2; - - /* Other sizes that depend on w */ - pre_len = 1U << ( w - 1 ); - d = ( grp->nbits + w - 1 ) / w; - - /* - * Prepare precomputed points: if P == G we want to - * use grp->T if already initialized, or initialize it. - */ - T = p_eq_g ? grp->T : NULL; - - if( T == NULL ) - { - T = (ecp_point *) polarssl_malloc( pre_len * sizeof( ecp_point ) ); - if( T == NULL ) - { - ret = POLARSSL_ERR_ECP_MALLOC_FAILED; - goto cleanup; - } - - for( i = 0; i < pre_len; i++ ) - ecp_point_init( &T[i] ); - - MPI_CHK( ecp_precompute_comb( grp, T, P, w, d ) ); - - if( p_eq_g ) - { - grp->T = T; - grp->T_size = pre_len; - } - } - - /* - * Make sure M is odd (M = m or M = N - m, since N is odd) - * using the fact that m * P = - (N - m) * P - */ - m_is_odd = ( mpi_get_bit( m, 0 ) == 1 ); - MPI_CHK( mpi_copy( &M, m ) ); - MPI_CHK( mpi_sub_mpi( &mm, &grp->N, m ) ); - MPI_CHK( mpi_safe_cond_assign( &M, &mm, ! m_is_odd ) ); - - /* - * Go for comb multiplication, R = M * P - */ - ecp_comb_fixed( k, d, w, &M ); - MPI_CHK( ecp_mul_comb_core( grp, R, T, pre_len, k, d, f_rng, p_rng ) ); - - /* - * Now get m * P from M * P and normalize it - */ - MPI_CHK( ecp_safe_invert_jac( grp, R, ! m_is_odd ) ); - MPI_CHK( ecp_normalize_jac( grp, R ) ); - -cleanup: - - if( T != NULL && ! p_eq_g ) - { - for( i = 0; i < pre_len; i++ ) - ecp_point_free( &T[i] ); - polarssl_free( T ); - } - - mpi_free( &M ); - mpi_free( &mm ); - - if( ret != 0 ) - ecp_point_free( R ); - - return( ret ); -} - -#endif /* POLARSSL_ECP_SHORT_WEIERSTRASS */ - -#if defined(POLARSSL_ECP_MONTGOMERY) -/* - * For Montgomery curves, we do all the internal arithmetic in projective - * coordinates. Import/export of points uses only the x coordinates, which is - * internaly represented as X / Z. - * - * For scalar multiplication, we'll use a Montgomery ladder. - */ - -/* - * Normalize Montgomery x/z coordinates: X = X/Z, Z = 1 - * Cost: 1M + 1I - */ -SSL_ROM_TEXT_SECTION -static int ecp_normalize_mxz( const ecp_group *grp, ecp_point *P ) -{ - int ret; - - MPI_CHK( mpi_inv_mod( &P->Z, &P->Z, &grp->P ) ); - MPI_CHK( mpi_mul_mpi( &P->X, &P->X, &P->Z ) ); MOD_MUL( P->X ); - MPI_CHK( mpi_lset( &P->Z, 1 ) ); - -cleanup: - return( ret ); -} - -/* - * Randomize projective x/z coordinates: - * (X, Z) -> (l X, l Z) for random l - * This is sort of the reverse operation of ecp_normalize_mxz(). - * - * This countermeasure was first suggested in [2]. - * Cost: 2M - */ -SSL_ROM_TEXT_SECTION -static int ecp_randomize_mxz( const ecp_group *grp, ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret; - mpi l; - size_t p_size = ( grp->pbits + 7 ) / 8; - int count = 0; - - mpi_init( &l ); - - /* Generate l such that 1 < l < p */ - do - { - mpi_fill_random( &l, p_size, f_rng, p_rng ); - - while( mpi_cmp_mpi( &l, &grp->P ) >= 0 ) - MPI_CHK( mpi_shift_r( &l, 1 ) ); - - if( count++ > 10 ) - return( POLARSSL_ERR_ECP_RANDOM_FAILED ); - } - while( mpi_cmp_int( &l, 1 ) <= 0 ); - - MPI_CHK( mpi_mul_mpi( &P->X, &P->X, &l ) ); MOD_MUL( P->X ); - MPI_CHK( mpi_mul_mpi( &P->Z, &P->Z, &l ) ); MOD_MUL( P->Z ); - -cleanup: - mpi_free( &l ); - - return( ret ); -} - -/* - * Double-and-add: R = 2P, S = P + Q, with d = X(P - Q), - * for Montgomery curves in x/z coordinates. - * - * http://www.hyperelliptic.org/EFD/g1p/auto-code/montgom/xz/ladder/mladd-1987-m.op3 - * with - * d = X1 - * P = (X2, Z2) - * Q = (X3, Z3) - * R = (X4, Z4) - * S = (X5, Z5) - * and eliminating temporary variables tO, ..., t4. - * - * Cost: 5M + 4S - */ -SSL_ROM_TEXT_SECTION -static int ecp_double_add_mxz( const ecp_group *grp, - ecp_point *R, ecp_point *S, - const ecp_point *P, const ecp_point *Q, - const mpi *d ) -{ - int ret; - mpi A, AA, B, BB, E, C, D, DA, CB; - - mpi_init( &A ); mpi_init( &AA ); mpi_init( &B ); - mpi_init( &BB ); mpi_init( &E ); mpi_init( &C ); - mpi_init( &D ); mpi_init( &DA ); mpi_init( &CB ); - - MPI_CHK( mpi_add_mpi( &A, &P->X, &P->Z ) ); MOD_ADD( A ); - MPI_CHK( mpi_mul_mpi( &AA, &A, &A ) ); MOD_MUL( AA ); - MPI_CHK( mpi_sub_mpi( &B, &P->X, &P->Z ) ); MOD_SUB( B ); - MPI_CHK( mpi_mul_mpi( &BB, &B, &B ) ); MOD_MUL( BB ); - MPI_CHK( mpi_sub_mpi( &E, &AA, &BB ) ); MOD_SUB( E ); - MPI_CHK( mpi_add_mpi( &C, &Q->X, &Q->Z ) ); MOD_ADD( C ); - MPI_CHK( mpi_sub_mpi( &D, &Q->X, &Q->Z ) ); MOD_SUB( D ); - MPI_CHK( mpi_mul_mpi( &DA, &D, &A ) ); MOD_MUL( DA ); - MPI_CHK( mpi_mul_mpi( &CB, &C, &B ) ); MOD_MUL( CB ); - MPI_CHK( mpi_add_mpi( &S->X, &DA, &CB ) ); MOD_MUL( S->X ); - MPI_CHK( mpi_mul_mpi( &S->X, &S->X, &S->X ) ); MOD_MUL( S->X ); - MPI_CHK( mpi_sub_mpi( &S->Z, &DA, &CB ) ); MOD_SUB( S->Z ); - MPI_CHK( mpi_mul_mpi( &S->Z, &S->Z, &S->Z ) ); MOD_MUL( S->Z ); - MPI_CHK( mpi_mul_mpi( &S->Z, d, &S->Z ) ); MOD_MUL( S->Z ); - MPI_CHK( mpi_mul_mpi( &R->X, &AA, &BB ) ); MOD_MUL( R->X ); - MPI_CHK( mpi_mul_mpi( &R->Z, &grp->A, &E ) ); MOD_MUL( R->Z ); - MPI_CHK( mpi_add_mpi( &R->Z, &BB, &R->Z ) ); MOD_ADD( R->Z ); - MPI_CHK( mpi_mul_mpi( &R->Z, &E, &R->Z ) ); MOD_MUL( R->Z ); - -cleanup: - mpi_free( &A ); mpi_free( &AA ); mpi_free( &B ); - mpi_free( &BB ); mpi_free( &E ); mpi_free( &C ); - mpi_free( &D ); mpi_free( &DA ); mpi_free( &CB ); - - return( ret ); -} - -/* - * Multiplication with Montgomery ladder in x/z coordinates, - * for curves in Montgomery form - */ -SSL_ROM_TEXT_SECTION -static int ecp_mul_mxz( ecp_group *grp, ecp_point *R, - const mpi *m, const ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - size_t i; - unsigned char b; - ecp_point RP; - mpi PX; - - ecp_point_init( &RP ); mpi_init( &PX ); - - /* Save PX and read from P before writing to R, in case P == R */ - MPI_CHK( mpi_copy( &PX, &P->X ) ); - MPI_CHK( ecp_copy( &RP, P ) ); - - /* Set R to zero in modified x/z coordinates */ - MPI_CHK( mpi_lset( &R->X, 1 ) ); - MPI_CHK( mpi_lset( &R->Z, 0 ) ); - mpi_free( &R->Y ); - - /* RP.X might be sligtly larger than P, so reduce it */ - MOD_ADD( RP.X ); - - /* Randomize coordinates of the starting point */ - if( f_rng != NULL ) - MPI_CHK( ecp_randomize_mxz( grp, &RP, f_rng, p_rng ) ); - - /* Loop invariant: R = result so far, RP = R + P */ - i = mpi_msb( m ); /* one past the (zero-based) most significant bit */ - while( i-- > 0 ) - { - b = mpi_get_bit( m, i ); - /* - * if (b) R = 2R + P else R = 2R, - * which is: - * if (b) double_add( RP, R, RP, R ) - * else double_add( R, RP, R, RP ) - * but using safe conditional swaps to avoid leaks - */ - MPI_CHK( mpi_safe_cond_swap( &R->X, &RP.X, b ) ); - MPI_CHK( mpi_safe_cond_swap( &R->Z, &RP.Z, b ) ); - MPI_CHK( ecp_double_add_mxz( grp, R, &RP, R, &RP, &PX ) ); - MPI_CHK( mpi_safe_cond_swap( &R->X, &RP.X, b ) ); - MPI_CHK( mpi_safe_cond_swap( &R->Z, &RP.Z, b ) ); - } - - MPI_CHK( ecp_normalize_mxz( grp, R ) ); - -cleanup: - ecp_point_free( &RP ); mpi_free( &PX ); - - return( ret ); -} - -#endif /* POLARSSL_ECP_MONTGOMERY */ - -/* - * Multiplication R = m * P - */ -SSL_ROM_TEXT_SECTION -int ecp_mul( ecp_group *grp, ecp_point *R, - const mpi *m, const ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret; - - /* Common sanity checks */ - if( mpi_cmp_int( &P->Z, 1 ) != 0 ) - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - - if( ( ret = ecp_check_privkey( grp, m ) ) != 0 || - ( ret = ecp_check_pubkey( grp, P ) ) != 0 ) - return( ret ); - -#if defined(POLARSSL_ECP_MONTGOMERY) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_MONTGOMERY ) - return( ecp_mul_mxz( grp, R, m, P, f_rng, p_rng ) ); -#endif -#if defined(POLARSSL_ECP_SHORT_WEIERSTRASS) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS ) - return( ecp_mul_comb( grp, R, m, P, f_rng, p_rng ) ); -#endif - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); -} - -#if defined(POLARSSL_ECP_SHORT_WEIERSTRASS) -/* - * Check that an affine point is valid as a public key, - * short weierstrass curves (SEC1 3.2.3.1) - */ -SSL_ROM_TEXT_SECTION -static int ecp_check_pubkey_sw( const ecp_group *grp, const ecp_point *pt ) -{ - int ret; - mpi YY, RHS; - - /* pt coordinates must be normalized for our checks */ - if( mpi_cmp_int( &pt->X, 0 ) < 0 || - mpi_cmp_int( &pt->Y, 0 ) < 0 || - mpi_cmp_mpi( &pt->X, &grp->P ) >= 0 || - mpi_cmp_mpi( &pt->Y, &grp->P ) >= 0 ) - return( POLARSSL_ERR_ECP_INVALID_KEY ); - - mpi_init( &YY ); mpi_init( &RHS ); - - /* - * YY = Y^2 - * RHS = X (X^2 + A) + B = X^3 + A X + B - */ - MPI_CHK( mpi_mul_mpi( &YY, &pt->Y, &pt->Y ) ); MOD_MUL( YY ); - MPI_CHK( mpi_mul_mpi( &RHS, &pt->X, &pt->X ) ); MOD_MUL( RHS ); - - /* Special case for A = -3 */ - if( grp->A.p == NULL ) - { - MPI_CHK( mpi_sub_int( &RHS, &RHS, 3 ) ); MOD_SUB( RHS ); - } - else - { - MPI_CHK( mpi_add_mpi( &RHS, &RHS, &grp->A ) ); MOD_ADD( RHS ); - } - - MPI_CHK( mpi_mul_mpi( &RHS, &RHS, &pt->X ) ); MOD_MUL( RHS ); - MPI_CHK( mpi_add_mpi( &RHS, &RHS, &grp->B ) ); MOD_ADD( RHS ); - - if( mpi_cmp_mpi( &YY, &RHS ) != 0 ) - ret = POLARSSL_ERR_ECP_INVALID_KEY; - -cleanup: - - mpi_free( &YY ); mpi_free( &RHS ); - - return( ret ); -} -#endif /* POLARSSL_ECP_SHORT_WEIERSTRASS */ - - -#if defined(POLARSSL_ECP_MONTGOMERY) -/* - * Check validity of a public key for Montgomery curves with x-only schemes - */ -SSL_ROM_TEXT_SECTION -static int ecp_check_pubkey_mx( const ecp_group *grp, const ecp_point *pt ) -{ - /* [M255 p. 5] Just check X is the correct number of bytes */ - if( mpi_size( &pt->X ) > ( grp->nbits + 7 ) / 8 ) - return( POLARSSL_ERR_ECP_INVALID_KEY ); - - return( 0 ); -} -#endif /* POLARSSL_ECP_MONTGOMERY */ - -/* - * Check that a point is valid as a public key - */ -SSL_ROM_TEXT_SECTION -int ecp_check_pubkey( const ecp_group *grp, const ecp_point *pt ) -{ - /* Must use affine coordinates */ - if( mpi_cmp_int( &pt->Z, 1 ) != 0 ) - return( POLARSSL_ERR_ECP_INVALID_KEY ); - -#if defined(POLARSSL_ECP_MONTGOMERY) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_MONTGOMERY ) - return( ecp_check_pubkey_mx( grp, pt ) ); -#endif -#if defined(POLARSSL_ECP_SHORT_WEIERSTRASS) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS ) - return( ecp_check_pubkey_sw( grp, pt ) ); -#endif - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); -} - -/* - * Check that an mpi is valid as a private key - */ -SSL_ROM_TEXT_SECTION -int ecp_check_privkey( const ecp_group *grp, const mpi *d ) -{ -#if defined(POLARSSL_ECP_MONTGOMERY) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_MONTGOMERY ) - { - /* see [M255] page 5 */ - if( mpi_get_bit( d, 0 ) != 0 || - mpi_get_bit( d, 1 ) != 0 || - mpi_get_bit( d, 2 ) != 0 || - mpi_msb( d ) - 1 != grp->nbits ) /* mpi_msb is one-based! */ - return( POLARSSL_ERR_ECP_INVALID_KEY ); - else - return( 0 ); - } -#endif /* POLARSSL_ECP_MONTGOMERY */ -#if defined(POLARSSL_ECP_SHORT_WEIERSTRASS) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS ) - { - /* see SEC1 3.2 */ - if( mpi_cmp_int( d, 1 ) < 0 || - mpi_cmp_mpi( d, &grp->N ) >= 0 ) - return( POLARSSL_ERR_ECP_INVALID_KEY ); - else - return( 0 ); - } -#endif /* POLARSSL_ECP_SHORT_WEIERSTRASS */ - - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); -} - -/* - * Generate a keypair - */ -SSL_ROM_TEXT_SECTION -int ecp_gen_keypair( ecp_group *grp, mpi *d, ecp_point *Q, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - size_t n_size = ( grp->nbits + 7 ) / 8; - -#if defined(POLARSSL_ECP_MONTGOMERY) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_MONTGOMERY ) - { - /* [M225] page 5 */ - size_t b; - - MPI_CHK( mpi_fill_random( d, n_size, f_rng, p_rng ) ); - - /* Make sure the most significant bit is nbits */ - b = mpi_msb( d ) - 1; /* mpi_msb is one-based */ - if( b > grp->nbits ) - MPI_CHK( mpi_shift_r( d, b - grp->nbits ) ); - else - MPI_CHK( mpi_set_bit( d, grp->nbits, 1 ) ); - - /* Make sure the last three bits are unset */ - MPI_CHK( mpi_set_bit( d, 0, 0 ) ); - MPI_CHK( mpi_set_bit( d, 1, 0 ) ); - MPI_CHK( mpi_set_bit( d, 2, 0 ) ); - } - else -#endif /* POLARSSL_ECP_MONTGOMERY */ -#if defined(POLARSSL_ECP_SHORT_WEIERSTRASS) - if( ecp_get_type( grp ) == POLARSSL_ECP_TYPE_SHORT_WEIERSTRASS ) - { - /* SEC1 3.2.1: Generate d such that 1 <= n < N */ - int count = 0; - unsigned char rnd[POLARSSL_ECP_MAX_BYTES]; - - /* - * Match the procedure given in RFC 6979 (deterministic ECDSA): - * - use the same byte ordering; - * - keep the leftmost nbits bits of the generated octet string; - * - try until result is in the desired range. - * This also avoids any biais, which is especially important for ECDSA. - */ - do - { - MPI_CHK( f_rng( p_rng, rnd, n_size ) ); - MPI_CHK( mpi_read_binary( d, rnd, n_size ) ); - MPI_CHK( mpi_shift_r( d, 8 * n_size - grp->nbits ) ); - - /* - * Each try has at worst a probability 1/2 of failing (the msb has - * a probability 1/2 of being 0, and then the result will be < N), - * so after 30 tries failure probability is a most 2**(-30). - * - * For most curves, 1 try is enough with overwhelming probability, - * since N starts with a lot of 1s in binary, but some curves - * such as secp224k1 are actually very close to the worst case. - */ - if( ++count > 30 ) - return( POLARSSL_ERR_ECP_RANDOM_FAILED ); - } - while( mpi_cmp_int( d, 1 ) < 0 || - mpi_cmp_mpi( d, &grp->N ) >= 0 ); - } - else -#endif /* POLARSSL_ECP_SHORT_WEIERSTRASS */ - return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); - -cleanup: - if( ret != 0 ) - return( ret ); - - return( ecp_mul( grp, Q, d, &grp->G, f_rng, p_rng ) ); -} - -/* - * Generate a keypair, prettier wrapper - */ -SSL_ROM_TEXT_SECTION -int ecp_gen_key( ecp_group_id grp_id, ecp_keypair *key, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret; - - if( ( ret = ecp_use_known_dp( &key->grp, grp_id ) ) != 0 ) - return( ret ); - - return( ecp_gen_keypair( &key->grp, &key->d, &key->Q, f_rng, p_rng ) ); -} - -#if defined(POLARSSL_SELF_TEST) - -/* - * Checkup routine - */ -int ecp_self_test( int verbose ) -{ - int ret; - size_t i; - ecp_group grp; - ecp_point R, P; - mpi m; - unsigned long add_c_prev, dbl_c_prev, mul_c_prev; - /* exponents especially adapted for secp192r1 */ - const char *exponents[] = - { - "000000000000000000000000000000000000000000000001", /* one */ - "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22830", /* N - 1 */ - "5EA6F389A38B8BC81E767753B15AA5569E1782E30ABE7D25", /* random */ - "400000000000000000000000000000000000000000000000", /* one and zeros */ - "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", /* all ones */ - "555555555555555555555555555555555555555555555555", /* 101010... */ - }; - - ecp_group_init( &grp ); - ecp_point_init( &R ); - ecp_point_init( &P ); - mpi_init( &m ); - - /* Use secp192r1 if available, or any available curve */ -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) - MPI_CHK( ecp_use_known_dp( &grp, POLARSSL_ECP_DP_SECP192R1 ) ); -#else - MPI_CHK( ecp_use_known_dp( &grp, ecp_curve_list()->grp_id ) ); -#endif - - if( verbose != 0 ) - polarssl_printf( " ECP test #1 (constant op_count, base point G): " ); - - /* Do a dummy multiplication first to trigger precomputation */ - MPI_CHK( mpi_lset( &m, 2 ) ); - MPI_CHK( ecp_mul( &grp, &P, &m, &grp.G, NULL, NULL ) ); - - add_count = 0; - dbl_count = 0; - mul_count = 0; - MPI_CHK( mpi_read_string( &m, 16, exponents[0] ) ); - MPI_CHK( ecp_mul( &grp, &R, &m, &grp.G, NULL, NULL ) ); - - for( i = 1; i < sizeof( exponents ) / sizeof( exponents[0] ); i++ ) - { - add_c_prev = add_count; - dbl_c_prev = dbl_count; - mul_c_prev = mul_count; - add_count = 0; - dbl_count = 0; - mul_count = 0; - - MPI_CHK( mpi_read_string( &m, 16, exponents[i] ) ); - MPI_CHK( ecp_mul( &grp, &R, &m, &grp.G, NULL, NULL ) ); - - if( add_count != add_c_prev || - dbl_count != dbl_c_prev || - mul_count != mul_c_prev ) - { - if( verbose != 0 ) - polarssl_printf( "failed (%u)\n", (unsigned int) i ); - - ret = 1; - goto cleanup; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( " ECP test #2 (constant op_count, other point): " ); - /* We computed P = 2G last time, use it */ - - add_count = 0; - dbl_count = 0; - mul_count = 0; - MPI_CHK( mpi_read_string( &m, 16, exponents[0] ) ); - MPI_CHK( ecp_mul( &grp, &R, &m, &P, NULL, NULL ) ); - - for( i = 1; i < sizeof( exponents ) / sizeof( exponents[0] ); i++ ) - { - add_c_prev = add_count; - dbl_c_prev = dbl_count; - mul_c_prev = mul_count; - add_count = 0; - dbl_count = 0; - mul_count = 0; - - MPI_CHK( mpi_read_string( &m, 16, exponents[i] ) ); - MPI_CHK( ecp_mul( &grp, &R, &m, &P, NULL, NULL ) ); - - if( add_count != add_c_prev || - dbl_count != dbl_c_prev || - mul_count != mul_c_prev ) - { - if( verbose != 0 ) - polarssl_printf( "failed (%u)\n", (unsigned int) i ); - - ret = 1; - goto cleanup; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - -cleanup: - - if( ret < 0 && verbose != 0 ) - polarssl_printf( "Unexpected error, return code = %08X\n", ret ); - - ecp_group_free( &grp ); - ecp_point_free( &R ); - ecp_point_free( &P ); - mpi_free( &m ); - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_ECP_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ecp_curves.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ecp_curves.c deleted file mode 100644 index a30e700..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/ecp_curves.c +++ /dev/null @@ -1,1461 +0,0 @@ -/* - * Elliptic curves over GF(p): curve-specific data and functions - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_ECP_C) - -#include "polarssl/ecp.h" - -#if defined(_MSC_VER) && !defined(inline) -#define inline _inline -#else -#if defined(__ARMCC_VERSION) && !defined(inline) -#define inline __inline -#endif /* __ARMCC_VERSION */ -#endif /*_MSC_VER */ - -/* - * Conversion macros for embedded constants: - * build lists of t_uint's from lists of unsigned char's grouped by 8, 4 or 2 - */ -#if defined(POLARSSL_HAVE_INT8) - -#define BYTES_TO_T_UINT_8( a, b, c, d, e, f, g, h ) \ - a, b, c, d, e, f, g, h - -#define BYTES_TO_T_UINT_4( a, b, c, d ) \ - a, b, c, d - -#define BYTES_TO_T_UINT_2( a, b ) \ - a, b - -#elif defined(POLARSSL_HAVE_INT16) - -#define BYTES_TO_T_UINT_2( a, b ) \ - ( (t_uint) a << 0 ) | \ - ( (t_uint) b << 8 ) - -#define BYTES_TO_T_UINT_4( a, b, c, d ) \ - BYTES_TO_T_UINT_2( a, b ), \ - BYTES_TO_T_UINT_2( c, d ) - -#define BYTES_TO_T_UINT_8( a, b, c, d, e, f, g, h ) \ - BYTES_TO_T_UINT_2( a, b ), \ - BYTES_TO_T_UINT_2( c, d ), \ - BYTES_TO_T_UINT_2( e, f ), \ - BYTES_TO_T_UINT_2( g, h ) - -#elif defined(POLARSSL_HAVE_INT32) - -#define BYTES_TO_T_UINT_4( a, b, c, d ) \ - ( (t_uint) a << 0 ) | \ - ( (t_uint) b << 8 ) | \ - ( (t_uint) c << 16 ) | \ - ( (t_uint) d << 24 ) - -#define BYTES_TO_T_UINT_2( a, b ) \ - BYTES_TO_T_UINT_4( a, b, 0, 0 ) - -#define BYTES_TO_T_UINT_8( a, b, c, d, e, f, g, h ) \ - BYTES_TO_T_UINT_4( a, b, c, d ), \ - BYTES_TO_T_UINT_4( e, f, g, h ) - -#else /* 64-bits */ - -#define BYTES_TO_T_UINT_8( a, b, c, d, e, f, g, h ) \ - ( (t_uint) a << 0 ) | \ - ( (t_uint) b << 8 ) | \ - ( (t_uint) c << 16 ) | \ - ( (t_uint) d << 24 ) | \ - ( (t_uint) e << 32 ) | \ - ( (t_uint) f << 40 ) | \ - ( (t_uint) g << 48 ) | \ - ( (t_uint) h << 56 ) - -#define BYTES_TO_T_UINT_4( a, b, c, d ) \ - BYTES_TO_T_UINT_8( a, b, c, d, 0, 0, 0, 0 ) - -#define BYTES_TO_T_UINT_2( a, b ) \ - BYTES_TO_T_UINT_8( a, b, 0, 0, 0, 0, 0, 0 ) - -#endif /* bits in t_uint */ - -/* - * Note: the constants are in little-endian order - * to be directly usable in MPIs - */ - -/* - * Domain parameters for secp192r1 - */ -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) -SSL_ROM_DATA_SECTION -static const t_uint secp192r1_p[] = { - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp192r1_b[] = { - BYTES_TO_T_UINT_8( 0xB1, 0xB9, 0x46, 0xC1, 0xEC, 0xDE, 0xB8, 0xFE ), - BYTES_TO_T_UINT_8( 0x49, 0x30, 0x24, 0x72, 0xAB, 0xE9, 0xA7, 0x0F ), - BYTES_TO_T_UINT_8( 0xE7, 0x80, 0x9C, 0xE5, 0x19, 0x05, 0x21, 0x64 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp192r1_gx[] = { - BYTES_TO_T_UINT_8( 0x12, 0x10, 0xFF, 0x82, 0xFD, 0x0A, 0xFF, 0xF4 ), - BYTES_TO_T_UINT_8( 0x00, 0x88, 0xA1, 0x43, 0xEB, 0x20, 0xBF, 0x7C ), - BYTES_TO_T_UINT_8( 0xF6, 0x90, 0x30, 0xB0, 0x0E, 0xA8, 0x8D, 0x18 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp192r1_gy[] = { - BYTES_TO_T_UINT_8( 0x11, 0x48, 0x79, 0x1E, 0xA1, 0x77, 0xF9, 0x73 ), - BYTES_TO_T_UINT_8( 0xD5, 0xCD, 0x24, 0x6B, 0xED, 0x11, 0x10, 0x63 ), - BYTES_TO_T_UINT_8( 0x78, 0xDA, 0xC8, 0xFF, 0x95, 0x2B, 0x19, 0x07 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp192r1_n[] = { - BYTES_TO_T_UINT_8( 0x31, 0x28, 0xD2, 0xB4, 0xB1, 0xC9, 0x6B, 0x14 ), - BYTES_TO_T_UINT_8( 0x36, 0xF8, 0xDE, 0x99, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -#endif /* POLARSSL_ECP_DP_SECP192R1_ENABLED */ - -/* - * Domain parameters for secp224r1 - */ -#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) -SSL_ROM_DATA_SECTION -static const t_uint secp224r1_p[] = { - BYTES_TO_T_UINT_8( 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ), - BYTES_TO_T_UINT_8( 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp224r1_b[] = { - BYTES_TO_T_UINT_8( 0xB4, 0xFF, 0x55, 0x23, 0x43, 0x39, 0x0B, 0x27 ), - BYTES_TO_T_UINT_8( 0xBA, 0xD8, 0xBF, 0xD7, 0xB7, 0xB0, 0x44, 0x50 ), - BYTES_TO_T_UINT_8( 0x56, 0x32, 0x41, 0xF5, 0xAB, 0xB3, 0x04, 0x0C ), - BYTES_TO_T_UINT_4( 0x85, 0x0A, 0x05, 0xB4 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp224r1_gx[] = { - BYTES_TO_T_UINT_8( 0x21, 0x1D, 0x5C, 0x11, 0xD6, 0x80, 0x32, 0x34 ), - BYTES_TO_T_UINT_8( 0x22, 0x11, 0xC2, 0x56, 0xD3, 0xC1, 0x03, 0x4A ), - BYTES_TO_T_UINT_8( 0xB9, 0x90, 0x13, 0x32, 0x7F, 0xBF, 0xB4, 0x6B ), - BYTES_TO_T_UINT_4( 0xBD, 0x0C, 0x0E, 0xB7 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp224r1_gy[] = { - BYTES_TO_T_UINT_8( 0x34, 0x7E, 0x00, 0x85, 0x99, 0x81, 0xD5, 0x44 ), - BYTES_TO_T_UINT_8( 0x64, 0x47, 0x07, 0x5A, 0xA0, 0x75, 0x43, 0xCD ), - BYTES_TO_T_UINT_8( 0xE6, 0xDF, 0x22, 0x4C, 0xFB, 0x23, 0xF7, 0xB5 ), - BYTES_TO_T_UINT_4( 0x88, 0x63, 0x37, 0xBD ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp224r1_n[] = { - BYTES_TO_T_UINT_8( 0x3D, 0x2A, 0x5C, 0x5C, 0x45, 0x29, 0xDD, 0x13 ), - BYTES_TO_T_UINT_8( 0x3E, 0xF0, 0xB8, 0xE0, 0xA2, 0x16, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_4( 0xFF, 0xFF, 0xFF, 0xFF ), -}; -#endif /* POLARSSL_ECP_DP_SECP224R1_ENABLED */ - -/* - * Domain parameters for secp256r1 - */ -#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) -SSL_ROM_DATA_SECTION -static const t_uint secp256r1_p[] = { - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 ), - BYTES_TO_T_UINT_8( 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ), - BYTES_TO_T_UINT_8( 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp256r1_b[] = { - BYTES_TO_T_UINT_8( 0x4B, 0x60, 0xD2, 0x27, 0x3E, 0x3C, 0xCE, 0x3B ), - BYTES_TO_T_UINT_8( 0xF6, 0xB0, 0x53, 0xCC, 0xB0, 0x06, 0x1D, 0x65 ), - BYTES_TO_T_UINT_8( 0xBC, 0x86, 0x98, 0x76, 0x55, 0xBD, 0xEB, 0xB3 ), - BYTES_TO_T_UINT_8( 0xE7, 0x93, 0x3A, 0xAA, 0xD8, 0x35, 0xC6, 0x5A ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp256r1_gx[] = { - BYTES_TO_T_UINT_8( 0x96, 0xC2, 0x98, 0xD8, 0x45, 0x39, 0xA1, 0xF4 ), - BYTES_TO_T_UINT_8( 0xA0, 0x33, 0xEB, 0x2D, 0x81, 0x7D, 0x03, 0x77 ), - BYTES_TO_T_UINT_8( 0xF2, 0x40, 0xA4, 0x63, 0xE5, 0xE6, 0xBC, 0xF8 ), - BYTES_TO_T_UINT_8( 0x47, 0x42, 0x2C, 0xE1, 0xF2, 0xD1, 0x17, 0x6B ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp256r1_gy[] = { - BYTES_TO_T_UINT_8( 0xF5, 0x51, 0xBF, 0x37, 0x68, 0x40, 0xB6, 0xCB ), - BYTES_TO_T_UINT_8( 0xCE, 0x5E, 0x31, 0x6B, 0x57, 0x33, 0xCE, 0x2B ), - BYTES_TO_T_UINT_8( 0x16, 0x9E, 0x0F, 0x7C, 0x4A, 0xEB, 0xE7, 0x8E ), - BYTES_TO_T_UINT_8( 0x9B, 0x7F, 0x1A, 0xFE, 0xE2, 0x42, 0xE3, 0x4F ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp256r1_n[] = { - BYTES_TO_T_UINT_8( 0x51, 0x25, 0x63, 0xFC, 0xC2, 0xCA, 0xB9, 0xF3 ), - BYTES_TO_T_UINT_8( 0x84, 0x9E, 0x17, 0xA7, 0xAD, 0xFA, 0xE6, 0xBC ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -#endif /* POLARSSL_ECP_DP_SECP256R1_ENABLED */ - -/* - * Domain parameters for secp384r1 - */ -#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) -SSL_ROM_DATA_SECTION -static const t_uint secp384r1_p[] = { - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 ), - BYTES_TO_T_UINT_8( 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp384r1_b[] = { - BYTES_TO_T_UINT_8( 0xEF, 0x2A, 0xEC, 0xD3, 0xED, 0xC8, 0x85, 0x2A ), - BYTES_TO_T_UINT_8( 0x9D, 0xD1, 0x2E, 0x8A, 0x8D, 0x39, 0x56, 0xC6 ), - BYTES_TO_T_UINT_8( 0x5A, 0x87, 0x13, 0x50, 0x8F, 0x08, 0x14, 0x03 ), - BYTES_TO_T_UINT_8( 0x12, 0x41, 0x81, 0xFE, 0x6E, 0x9C, 0x1D, 0x18 ), - BYTES_TO_T_UINT_8( 0x19, 0x2D, 0xF8, 0xE3, 0x6B, 0x05, 0x8E, 0x98 ), - BYTES_TO_T_UINT_8( 0xE4, 0xE7, 0x3E, 0xE2, 0xA7, 0x2F, 0x31, 0xB3 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp384r1_gx[] = { - BYTES_TO_T_UINT_8( 0xB7, 0x0A, 0x76, 0x72, 0x38, 0x5E, 0x54, 0x3A ), - BYTES_TO_T_UINT_8( 0x6C, 0x29, 0x55, 0xBF, 0x5D, 0xF2, 0x02, 0x55 ), - BYTES_TO_T_UINT_8( 0x38, 0x2A, 0x54, 0x82, 0xE0, 0x41, 0xF7, 0x59 ), - BYTES_TO_T_UINT_8( 0x98, 0x9B, 0xA7, 0x8B, 0x62, 0x3B, 0x1D, 0x6E ), - BYTES_TO_T_UINT_8( 0x74, 0xAD, 0x20, 0xF3, 0x1E, 0xC7, 0xB1, 0x8E ), - BYTES_TO_T_UINT_8( 0x37, 0x05, 0x8B, 0xBE, 0x22, 0xCA, 0x87, 0xAA ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp384r1_gy[] = { - BYTES_TO_T_UINT_8( 0x5F, 0x0E, 0xEA, 0x90, 0x7C, 0x1D, 0x43, 0x7A ), - BYTES_TO_T_UINT_8( 0x9D, 0x81, 0x7E, 0x1D, 0xCE, 0xB1, 0x60, 0x0A ), - BYTES_TO_T_UINT_8( 0xC0, 0xB8, 0xF0, 0xB5, 0x13, 0x31, 0xDA, 0xE9 ), - BYTES_TO_T_UINT_8( 0x7C, 0x14, 0x9A, 0x28, 0xBD, 0x1D, 0xF4, 0xF8 ), - BYTES_TO_T_UINT_8( 0x29, 0xDC, 0x92, 0x92, 0xBF, 0x98, 0x9E, 0x5D ), - BYTES_TO_T_UINT_8( 0x6F, 0x2C, 0x26, 0x96, 0x4A, 0xDE, 0x17, 0x36 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp384r1_n[] = { - BYTES_TO_T_UINT_8( 0x73, 0x29, 0xC5, 0xCC, 0x6A, 0x19, 0xEC, 0xEC ), - BYTES_TO_T_UINT_8( 0x7A, 0xA7, 0xB0, 0x48, 0xB2, 0x0D, 0x1A, 0x58 ), - BYTES_TO_T_UINT_8( 0xDF, 0x2D, 0x37, 0xF4, 0x81, 0x4D, 0x63, 0xC7 ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -#endif /* POLARSSL_ECP_DP_SECP384R1_ENABLED */ - -/* - * Domain parameters for secp521r1 - */ -#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) -SSL_ROM_DATA_SECTION -static const t_uint secp521r1_p[] = { - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_2( 0xFF, 0x01 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp521r1_b[] = { - BYTES_TO_T_UINT_8( 0x00, 0x3F, 0x50, 0x6B, 0xD4, 0x1F, 0x45, 0xEF ), - BYTES_TO_T_UINT_8( 0xF1, 0x34, 0x2C, 0x3D, 0x88, 0xDF, 0x73, 0x35 ), - BYTES_TO_T_UINT_8( 0x07, 0xBF, 0xB1, 0x3B, 0xBD, 0xC0, 0x52, 0x16 ), - BYTES_TO_T_UINT_8( 0x7B, 0x93, 0x7E, 0xEC, 0x51, 0x39, 0x19, 0x56 ), - BYTES_TO_T_UINT_8( 0xE1, 0x09, 0xF1, 0x8E, 0x91, 0x89, 0xB4, 0xB8 ), - BYTES_TO_T_UINT_8( 0xF3, 0x15, 0xB3, 0x99, 0x5B, 0x72, 0xDA, 0xA2 ), - BYTES_TO_T_UINT_8( 0xEE, 0x40, 0x85, 0xB6, 0xA0, 0x21, 0x9A, 0x92 ), - BYTES_TO_T_UINT_8( 0x1F, 0x9A, 0x1C, 0x8E, 0x61, 0xB9, 0x3E, 0x95 ), - BYTES_TO_T_UINT_2( 0x51, 0x00 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp521r1_gx[] = { - BYTES_TO_T_UINT_8( 0x66, 0xBD, 0xE5, 0xC2, 0x31, 0x7E, 0x7E, 0xF9 ), - BYTES_TO_T_UINT_8( 0x9B, 0x42, 0x6A, 0x85, 0xC1, 0xB3, 0x48, 0x33 ), - BYTES_TO_T_UINT_8( 0xDE, 0xA8, 0xFF, 0xA2, 0x27, 0xC1, 0x1D, 0xFE ), - BYTES_TO_T_UINT_8( 0x28, 0x59, 0xE7, 0xEF, 0x77, 0x5E, 0x4B, 0xA1 ), - BYTES_TO_T_UINT_8( 0xBA, 0x3D, 0x4D, 0x6B, 0x60, 0xAF, 0x28, 0xF8 ), - BYTES_TO_T_UINT_8( 0x21, 0xB5, 0x3F, 0x05, 0x39, 0x81, 0x64, 0x9C ), - BYTES_TO_T_UINT_8( 0x42, 0xB4, 0x95, 0x23, 0x66, 0xCB, 0x3E, 0x9E ), - BYTES_TO_T_UINT_8( 0xCD, 0xE9, 0x04, 0x04, 0xB7, 0x06, 0x8E, 0x85 ), - BYTES_TO_T_UINT_2( 0xC6, 0x00 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp521r1_gy[] = { - BYTES_TO_T_UINT_8( 0x50, 0x66, 0xD1, 0x9F, 0x76, 0x94, 0xBE, 0x88 ), - BYTES_TO_T_UINT_8( 0x40, 0xC2, 0x72, 0xA2, 0x86, 0x70, 0x3C, 0x35 ), - BYTES_TO_T_UINT_8( 0x61, 0x07, 0xAD, 0x3F, 0x01, 0xB9, 0x50, 0xC5 ), - BYTES_TO_T_UINT_8( 0x40, 0x26, 0xF4, 0x5E, 0x99, 0x72, 0xEE, 0x97 ), - BYTES_TO_T_UINT_8( 0x2C, 0x66, 0x3E, 0x27, 0x17, 0xBD, 0xAF, 0x17 ), - BYTES_TO_T_UINT_8( 0x68, 0x44, 0x9B, 0x57, 0x49, 0x44, 0xF5, 0x98 ), - BYTES_TO_T_UINT_8( 0xD9, 0x1B, 0x7D, 0x2C, 0xB4, 0x5F, 0x8A, 0x5C ), - BYTES_TO_T_UINT_8( 0x04, 0xC0, 0x3B, 0x9A, 0x78, 0x6A, 0x29, 0x39 ), - BYTES_TO_T_UINT_2( 0x18, 0x01 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp521r1_n[] = { - BYTES_TO_T_UINT_8( 0x09, 0x64, 0x38, 0x91, 0x1E, 0xB7, 0x6F, 0xBB ), - BYTES_TO_T_UINT_8( 0xAE, 0x47, 0x9C, 0x89, 0xB8, 0xC9, 0xB5, 0x3B ), - BYTES_TO_T_UINT_8( 0xD0, 0xA5, 0x09, 0xF7, 0x48, 0x01, 0xCC, 0x7F ), - BYTES_TO_T_UINT_8( 0x6B, 0x96, 0x2F, 0xBF, 0x83, 0x87, 0x86, 0x51 ), - BYTES_TO_T_UINT_8( 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_2( 0xFF, 0x01 ), -}; -#endif /* POLARSSL_ECP_DP_SECP521R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) -SSL_ROM_DATA_SECTION -static const t_uint secp192k1_p[] = { - BYTES_TO_T_UINT_8( 0x37, 0xEE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp192k1_a[] = { - BYTES_TO_T_UINT_2( 0x00, 0x00 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp192k1_b[] = { - BYTES_TO_T_UINT_2( 0x03, 0x00 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp192k1_gx[] = { - BYTES_TO_T_UINT_8( 0x7D, 0x6C, 0xE0, 0xEA, 0xB1, 0xD1, 0xA5, 0x1D ), - BYTES_TO_T_UINT_8( 0x34, 0xF4, 0xB7, 0x80, 0x02, 0x7D, 0xB0, 0x26 ), - BYTES_TO_T_UINT_8( 0xAE, 0xE9, 0x57, 0xC0, 0x0E, 0xF1, 0x4F, 0xDB ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp192k1_gy[] = { - BYTES_TO_T_UINT_8( 0x9D, 0x2F, 0x5E, 0xD9, 0x88, 0xAA, 0x82, 0x40 ), - BYTES_TO_T_UINT_8( 0x34, 0x86, 0xBE, 0x15, 0xD0, 0x63, 0x41, 0x84 ), - BYTES_TO_T_UINT_8( 0xA7, 0x28, 0x56, 0x9C, 0x6D, 0x2F, 0x2F, 0x9B ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp192k1_n[] = { - BYTES_TO_T_UINT_8( 0x8D, 0xFD, 0xDE, 0x74, 0x6A, 0x46, 0x69, 0x0F ), - BYTES_TO_T_UINT_8( 0x17, 0xFC, 0xF2, 0x26, 0xFE, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -#endif /* POLARSSL_ECP_DP_SECP192K1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) -SSL_ROM_DATA_SECTION -static const t_uint secp224k1_p[] = { - BYTES_TO_T_UINT_8( 0x6D, 0xE5, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_4( 0xFF, 0xFF, 0xFF, 0xFF ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp224k1_a[] = { - BYTES_TO_T_UINT_2( 0x00, 0x00 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp224k1_b[] = { - BYTES_TO_T_UINT_2( 0x05, 0x00 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp224k1_gx[] = { - BYTES_TO_T_UINT_8( 0x5C, 0xA4, 0xB7, 0xB6, 0x0E, 0x65, 0x7E, 0x0F ), - BYTES_TO_T_UINT_8( 0xA9, 0x75, 0x70, 0xE4, 0xE9, 0x67, 0xA4, 0x69 ), - BYTES_TO_T_UINT_8( 0xA1, 0x28, 0xFC, 0x30, 0xDF, 0x99, 0xF0, 0x4D ), - BYTES_TO_T_UINT_4( 0x33, 0x5B, 0x45, 0xA1 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp224k1_gy[] = { - BYTES_TO_T_UINT_8( 0xA5, 0x61, 0x6D, 0x55, 0xDB, 0x4B, 0xCA, 0xE2 ), - BYTES_TO_T_UINT_8( 0x59, 0xBD, 0xB0, 0xC0, 0xF7, 0x19, 0xE3, 0xF7 ), - BYTES_TO_T_UINT_8( 0xD6, 0xFB, 0xCA, 0x82, 0x42, 0x34, 0xBA, 0x7F ), - BYTES_TO_T_UINT_4( 0xED, 0x9F, 0x08, 0x7E ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp224k1_n[] = { - BYTES_TO_T_UINT_8( 0xF7, 0xB1, 0x9F, 0x76, 0x71, 0xA9, 0xF0, 0xCA ), - BYTES_TO_T_UINT_8( 0x84, 0x61, 0xEC, 0xD2, 0xE8, 0xDC, 0x01, 0x00 ), - BYTES_TO_T_UINT_8( 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ), - BYTES_TO_T_UINT_8( 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ), -}; -#endif /* POLARSSL_ECP_DP_SECP224K1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) -SSL_ROM_DATA_SECTION -static const t_uint secp256k1_p[] = { - BYTES_TO_T_UINT_8( 0x2F, 0xFC, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp256k1_a[] = { - BYTES_TO_T_UINT_2( 0x00, 0x00 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp256k1_b[] = { - BYTES_TO_T_UINT_2( 0x07, 0x00 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp256k1_gx[] = { - BYTES_TO_T_UINT_8( 0x98, 0x17, 0xF8, 0x16, 0x5B, 0x81, 0xF2, 0x59 ), - BYTES_TO_T_UINT_8( 0xD9, 0x28, 0xCE, 0x2D, 0xDB, 0xFC, 0x9B, 0x02 ), - BYTES_TO_T_UINT_8( 0x07, 0x0B, 0x87, 0xCE, 0x95, 0x62, 0xA0, 0x55 ), - BYTES_TO_T_UINT_8( 0xAC, 0xBB, 0xDC, 0xF9, 0x7E, 0x66, 0xBE, 0x79 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp256k1_gy[] = { - BYTES_TO_T_UINT_8( 0xB8, 0xD4, 0x10, 0xFB, 0x8F, 0xD0, 0x47, 0x9C ), - BYTES_TO_T_UINT_8( 0x19, 0x54, 0x85, 0xA6, 0x48, 0xB4, 0x17, 0xFD ), - BYTES_TO_T_UINT_8( 0xA8, 0x08, 0x11, 0x0E, 0xFC, 0xFB, 0xA4, 0x5D ), - BYTES_TO_T_UINT_8( 0x65, 0xC4, 0xA3, 0x26, 0x77, 0xDA, 0x3A, 0x48 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint secp256k1_n[] = { - BYTES_TO_T_UINT_8( 0x41, 0x41, 0x36, 0xD0, 0x8C, 0x5E, 0xD2, 0xBF ), - BYTES_TO_T_UINT_8( 0x3B, 0xA0, 0x48, 0xAF, 0xE6, 0xDC, 0xAE, 0xBA ), - BYTES_TO_T_UINT_8( 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), - BYTES_TO_T_UINT_8( 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ), -}; -#endif /* POLARSSL_ECP_DP_SECP256K1_ENABLED */ - -/* - * Domain parameters for brainpoolP256r1 (RFC 5639 3.4) - */ -#if defined(POLARSSL_ECP_DP_BP256R1_ENABLED) -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP256r1_p[] = { - BYTES_TO_T_UINT_8( 0x77, 0x53, 0x6E, 0x1F, 0x1D, 0x48, 0x13, 0x20 ), - BYTES_TO_T_UINT_8( 0x28, 0x20, 0x26, 0xD5, 0x23, 0xF6, 0x3B, 0x6E ), - BYTES_TO_T_UINT_8( 0x72, 0x8D, 0x83, 0x9D, 0x90, 0x0A, 0x66, 0x3E ), - BYTES_TO_T_UINT_8( 0xBC, 0xA9, 0xEE, 0xA1, 0xDB, 0x57, 0xFB, 0xA9 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP256r1_a[] = { - BYTES_TO_T_UINT_8( 0xD9, 0xB5, 0x30, 0xF3, 0x44, 0x4B, 0x4A, 0xE9 ), - BYTES_TO_T_UINT_8( 0x6C, 0x5C, 0xDC, 0x26, 0xC1, 0x55, 0x80, 0xFB ), - BYTES_TO_T_UINT_8( 0xE7, 0xFF, 0x7A, 0x41, 0x30, 0x75, 0xF6, 0xEE ), - BYTES_TO_T_UINT_8( 0x57, 0x30, 0x2C, 0xFC, 0x75, 0x09, 0x5A, 0x7D ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP256r1_b[] = { - BYTES_TO_T_UINT_8( 0xB6, 0x07, 0x8C, 0xFF, 0x18, 0xDC, 0xCC, 0x6B ), - BYTES_TO_T_UINT_8( 0xCE, 0xE1, 0xF7, 0x5C, 0x29, 0x16, 0x84, 0x95 ), - BYTES_TO_T_UINT_8( 0xBF, 0x7C, 0xD7, 0xBB, 0xD9, 0xB5, 0x30, 0xF3 ), - BYTES_TO_T_UINT_8( 0x44, 0x4B, 0x4A, 0xE9, 0x6C, 0x5C, 0xDC, 0x26 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP256r1_gx[] = { - BYTES_TO_T_UINT_8( 0x62, 0x32, 0xCE, 0x9A, 0xBD, 0x53, 0x44, 0x3A ), - BYTES_TO_T_UINT_8( 0xC2, 0x23, 0xBD, 0xE3, 0xE1, 0x27, 0xDE, 0xB9 ), - BYTES_TO_T_UINT_8( 0xAF, 0xB7, 0x81, 0xFC, 0x2F, 0x48, 0x4B, 0x2C ), - BYTES_TO_T_UINT_8( 0xCB, 0x57, 0x7E, 0xCB, 0xB9, 0xAE, 0xD2, 0x8B ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP256r1_gy[] = { - BYTES_TO_T_UINT_8( 0x97, 0x69, 0x04, 0x2F, 0xC7, 0x54, 0x1D, 0x5C ), - BYTES_TO_T_UINT_8( 0x54, 0x8E, 0xED, 0x2D, 0x13, 0x45, 0x77, 0xC2 ), - BYTES_TO_T_UINT_8( 0xC9, 0x1D, 0x61, 0x14, 0x1A, 0x46, 0xF8, 0x97 ), - BYTES_TO_T_UINT_8( 0xFD, 0xC4, 0xDA, 0xC3, 0x35, 0xF8, 0x7E, 0x54 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP256r1_n[] = { - BYTES_TO_T_UINT_8( 0xA7, 0x56, 0x48, 0x97, 0x82, 0x0E, 0x1E, 0x90 ), - BYTES_TO_T_UINT_8( 0xF7, 0xA6, 0x61, 0xB5, 0xA3, 0x7A, 0x39, 0x8C ), - BYTES_TO_T_UINT_8( 0x71, 0x8D, 0x83, 0x9D, 0x90, 0x0A, 0x66, 0x3E ), - BYTES_TO_T_UINT_8( 0xBC, 0xA9, 0xEE, 0xA1, 0xDB, 0x57, 0xFB, 0xA9 ), -}; -#endif /* POLARSSL_ECP_DP_BP256R1_ENABLED */ - -/* - * Domain parameters for brainpoolP384r1 (RFC 5639 3.6) - */ -#if defined(POLARSSL_ECP_DP_BP384R1_ENABLED) -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP384r1_p[] = { - BYTES_TO_T_UINT_8( 0x53, 0xEC, 0x07, 0x31, 0x13, 0x00, 0x47, 0x87 ), - BYTES_TO_T_UINT_8( 0x71, 0x1A, 0x1D, 0x90, 0x29, 0xA7, 0xD3, 0xAC ), - BYTES_TO_T_UINT_8( 0x23, 0x11, 0xB7, 0x7F, 0x19, 0xDA, 0xB1, 0x12 ), - BYTES_TO_T_UINT_8( 0xB4, 0x56, 0x54, 0xED, 0x09, 0x71, 0x2F, 0x15 ), - BYTES_TO_T_UINT_8( 0xDF, 0x41, 0xE6, 0x50, 0x7E, 0x6F, 0x5D, 0x0F ), - BYTES_TO_T_UINT_8( 0x28, 0x6D, 0x38, 0xA3, 0x82, 0x1E, 0xB9, 0x8C ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP384r1_a[] = { - BYTES_TO_T_UINT_8( 0x26, 0x28, 0xCE, 0x22, 0xDD, 0xC7, 0xA8, 0x04 ), - BYTES_TO_T_UINT_8( 0xEB, 0xD4, 0x3A, 0x50, 0x4A, 0x81, 0xA5, 0x8A ), - BYTES_TO_T_UINT_8( 0x0F, 0xF9, 0x91, 0xBA, 0xEF, 0x65, 0x91, 0x13 ), - BYTES_TO_T_UINT_8( 0x87, 0x27, 0xB2, 0x4F, 0x8E, 0xA2, 0xBE, 0xC2 ), - BYTES_TO_T_UINT_8( 0xA0, 0xAF, 0x05, 0xCE, 0x0A, 0x08, 0x72, 0x3C ), - BYTES_TO_T_UINT_8( 0x0C, 0x15, 0x8C, 0x3D, 0xC6, 0x82, 0xC3, 0x7B ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP384r1_b[] = { - BYTES_TO_T_UINT_8( 0x11, 0x4C, 0x50, 0xFA, 0x96, 0x86, 0xB7, 0x3A ), - BYTES_TO_T_UINT_8( 0x94, 0xC9, 0xDB, 0x95, 0x02, 0x39, 0xB4, 0x7C ), - BYTES_TO_T_UINT_8( 0xD5, 0x62, 0xEB, 0x3E, 0xA5, 0x0E, 0x88, 0x2E ), - BYTES_TO_T_UINT_8( 0xA6, 0xD2, 0xDC, 0x07, 0xE1, 0x7D, 0xB7, 0x2F ), - BYTES_TO_T_UINT_8( 0x7C, 0x44, 0xF0, 0x16, 0x54, 0xB5, 0x39, 0x8B ), - BYTES_TO_T_UINT_8( 0x26, 0x28, 0xCE, 0x22, 0xDD, 0xC7, 0xA8, 0x04 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP384r1_gx[] = { - BYTES_TO_T_UINT_8( 0x1E, 0xAF, 0xD4, 0x47, 0xE2, 0xB2, 0x87, 0xEF ), - BYTES_TO_T_UINT_8( 0xAA, 0x46, 0xD6, 0x36, 0x34, 0xE0, 0x26, 0xE8 ), - BYTES_TO_T_UINT_8( 0xE8, 0x10, 0xBD, 0x0C, 0xFE, 0xCA, 0x7F, 0xDB ), - BYTES_TO_T_UINT_8( 0xE3, 0x4F, 0xF1, 0x7E, 0xE7, 0xA3, 0x47, 0x88 ), - BYTES_TO_T_UINT_8( 0x6B, 0x3F, 0xC1, 0xB7, 0x81, 0x3A, 0xA6, 0xA2 ), - BYTES_TO_T_UINT_8( 0xFF, 0x45, 0xCF, 0x68, 0xF0, 0x64, 0x1C, 0x1D ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP384r1_gy[] = { - BYTES_TO_T_UINT_8( 0x15, 0x53, 0x3C, 0x26, 0x41, 0x03, 0x82, 0x42 ), - BYTES_TO_T_UINT_8( 0x11, 0x81, 0x91, 0x77, 0x21, 0x46, 0x46, 0x0E ), - BYTES_TO_T_UINT_8( 0x28, 0x29, 0x91, 0xF9, 0x4F, 0x05, 0x9C, 0xE1 ), - BYTES_TO_T_UINT_8( 0x64, 0x58, 0xEC, 0xFE, 0x29, 0x0B, 0xB7, 0x62 ), - BYTES_TO_T_UINT_8( 0x52, 0xD5, 0xCF, 0x95, 0x8E, 0xEB, 0xB1, 0x5C ), - BYTES_TO_T_UINT_8( 0xA4, 0xC2, 0xF9, 0x20, 0x75, 0x1D, 0xBE, 0x8A ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP384r1_n[] = { - BYTES_TO_T_UINT_8( 0x65, 0x65, 0x04, 0xE9, 0x02, 0x32, 0x88, 0x3B ), - BYTES_TO_T_UINT_8( 0x10, 0xC3, 0x7F, 0x6B, 0xAF, 0xB6, 0x3A, 0xCF ), - BYTES_TO_T_UINT_8( 0xA7, 0x25, 0x04, 0xAC, 0x6C, 0x6E, 0x16, 0x1F ), - BYTES_TO_T_UINT_8( 0xB3, 0x56, 0x54, 0xED, 0x09, 0x71, 0x2F, 0x15 ), - BYTES_TO_T_UINT_8( 0xDF, 0x41, 0xE6, 0x50, 0x7E, 0x6F, 0x5D, 0x0F ), - BYTES_TO_T_UINT_8( 0x28, 0x6D, 0x38, 0xA3, 0x82, 0x1E, 0xB9, 0x8C ), -}; -#endif /* POLARSSL_ECP_DP_BP384R1_ENABLED */ - -/* - * Domain parameters for brainpoolP512r1 (RFC 5639 3.7) - */ -#if defined(POLARSSL_ECP_DP_BP512R1_ENABLED) -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP512r1_p[] = { - BYTES_TO_T_UINT_8( 0xF3, 0x48, 0x3A, 0x58, 0x56, 0x60, 0xAA, 0x28 ), - BYTES_TO_T_UINT_8( 0x85, 0xC6, 0x82, 0x2D, 0x2F, 0xFF, 0x81, 0x28 ), - BYTES_TO_T_UINT_8( 0xE6, 0x80, 0xA3, 0xE6, 0x2A, 0xA1, 0xCD, 0xAE ), - BYTES_TO_T_UINT_8( 0x42, 0x68, 0xC6, 0x9B, 0x00, 0x9B, 0x4D, 0x7D ), - BYTES_TO_T_UINT_8( 0x71, 0x08, 0x33, 0x70, 0xCA, 0x9C, 0x63, 0xD6 ), - BYTES_TO_T_UINT_8( 0x0E, 0xD2, 0xC9, 0xB3, 0xB3, 0x8D, 0x30, 0xCB ), - BYTES_TO_T_UINT_8( 0x07, 0xFC, 0xC9, 0x33, 0xAE, 0xE6, 0xD4, 0x3F ), - BYTES_TO_T_UINT_8( 0x8B, 0xC4, 0xE9, 0xDB, 0xB8, 0x9D, 0xDD, 0xAA ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP512r1_a[] = { - BYTES_TO_T_UINT_8( 0xCA, 0x94, 0xFC, 0x77, 0x4D, 0xAC, 0xC1, 0xE7 ), - BYTES_TO_T_UINT_8( 0xB9, 0xC7, 0xF2, 0x2B, 0xA7, 0x17, 0x11, 0x7F ), - BYTES_TO_T_UINT_8( 0xB5, 0xC8, 0x9A, 0x8B, 0xC9, 0xF1, 0x2E, 0x0A ), - BYTES_TO_T_UINT_8( 0xA1, 0x3A, 0x25, 0xA8, 0x5A, 0x5D, 0xED, 0x2D ), - BYTES_TO_T_UINT_8( 0xBC, 0x63, 0x98, 0xEA, 0xCA, 0x41, 0x34, 0xA8 ), - BYTES_TO_T_UINT_8( 0x10, 0x16, 0xF9, 0x3D, 0x8D, 0xDD, 0xCB, 0x94 ), - BYTES_TO_T_UINT_8( 0xC5, 0x4C, 0x23, 0xAC, 0x45, 0x71, 0x32, 0xE2 ), - BYTES_TO_T_UINT_8( 0x89, 0x3B, 0x60, 0x8B, 0x31, 0xA3, 0x30, 0x78 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP512r1_b[] = { - BYTES_TO_T_UINT_8( 0x23, 0xF7, 0x16, 0x80, 0x63, 0xBD, 0x09, 0x28 ), - BYTES_TO_T_UINT_8( 0xDD, 0xE5, 0xBA, 0x5E, 0xB7, 0x50, 0x40, 0x98 ), - BYTES_TO_T_UINT_8( 0x67, 0x3E, 0x08, 0xDC, 0xCA, 0x94, 0xFC, 0x77 ), - BYTES_TO_T_UINT_8( 0x4D, 0xAC, 0xC1, 0xE7, 0xB9, 0xC7, 0xF2, 0x2B ), - BYTES_TO_T_UINT_8( 0xA7, 0x17, 0x11, 0x7F, 0xB5, 0xC8, 0x9A, 0x8B ), - BYTES_TO_T_UINT_8( 0xC9, 0xF1, 0x2E, 0x0A, 0xA1, 0x3A, 0x25, 0xA8 ), - BYTES_TO_T_UINT_8( 0x5A, 0x5D, 0xED, 0x2D, 0xBC, 0x63, 0x98, 0xEA ), - BYTES_TO_T_UINT_8( 0xCA, 0x41, 0x34, 0xA8, 0x10, 0x16, 0xF9, 0x3D ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP512r1_gx[] = { - BYTES_TO_T_UINT_8( 0x22, 0xF8, 0xB9, 0xBC, 0x09, 0x22, 0x35, 0x8B ), - BYTES_TO_T_UINT_8( 0x68, 0x5E, 0x6A, 0x40, 0x47, 0x50, 0x6D, 0x7C ), - BYTES_TO_T_UINT_8( 0x5F, 0x7D, 0xB9, 0x93, 0x7B, 0x68, 0xD1, 0x50 ), - BYTES_TO_T_UINT_8( 0x8D, 0xD4, 0xD0, 0xE2, 0x78, 0x1F, 0x3B, 0xFF ), - BYTES_TO_T_UINT_8( 0x8E, 0x09, 0xD0, 0xF4, 0xEE, 0x62, 0x3B, 0xB4 ), - BYTES_TO_T_UINT_8( 0xC1, 0x16, 0xD9, 0xB5, 0x70, 0x9F, 0xED, 0x85 ), - BYTES_TO_T_UINT_8( 0x93, 0x6A, 0x4C, 0x9C, 0x2E, 0x32, 0x21, 0x5A ), - BYTES_TO_T_UINT_8( 0x64, 0xD9, 0x2E, 0xD8, 0xBD, 0xE4, 0xAE, 0x81 ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP512r1_gy[] = { - BYTES_TO_T_UINT_8( 0x92, 0x08, 0xD8, 0x3A, 0x0F, 0x1E, 0xCD, 0x78 ), - BYTES_TO_T_UINT_8( 0x06, 0x54, 0xF0, 0xA8, 0x2F, 0x2B, 0xCA, 0xD1 ), - BYTES_TO_T_UINT_8( 0xAE, 0x63, 0x27, 0x8A, 0xD8, 0x4B, 0xCA, 0x5B ), - BYTES_TO_T_UINT_8( 0x5E, 0x48, 0x5F, 0x4A, 0x49, 0xDE, 0xDC, 0xB2 ), - BYTES_TO_T_UINT_8( 0x11, 0x81, 0x1F, 0x88, 0x5B, 0xC5, 0x00, 0xA0 ), - BYTES_TO_T_UINT_8( 0x1A, 0x7B, 0xA5, 0x24, 0x00, 0xF7, 0x09, 0xF2 ), - BYTES_TO_T_UINT_8( 0xFD, 0x22, 0x78, 0xCF, 0xA9, 0xBF, 0xEA, 0xC0 ), - BYTES_TO_T_UINT_8( 0xEC, 0x32, 0x63, 0x56, 0x5D, 0x38, 0xDE, 0x7D ), -}; -SSL_ROM_DATA_SECTION -static const t_uint brainpoolP512r1_n[] = { - BYTES_TO_T_UINT_8( 0x69, 0x00, 0xA9, 0x9C, 0x82, 0x96, 0x87, 0xB5 ), - BYTES_TO_T_UINT_8( 0xDD, 0xDA, 0x5D, 0x08, 0x81, 0xD3, 0xB1, 0x1D ), - BYTES_TO_T_UINT_8( 0x47, 0x10, 0xAC, 0x7F, 0x19, 0x61, 0x86, 0x41 ), - BYTES_TO_T_UINT_8( 0x19, 0x26, 0xA9, 0x4C, 0x41, 0x5C, 0x3E, 0x55 ), - BYTES_TO_T_UINT_8( 0x70, 0x08, 0x33, 0x70, 0xCA, 0x9C, 0x63, 0xD6 ), - BYTES_TO_T_UINT_8( 0x0E, 0xD2, 0xC9, 0xB3, 0xB3, 0x8D, 0x30, 0xCB ), - BYTES_TO_T_UINT_8( 0x07, 0xFC, 0xC9, 0x33, 0xAE, 0xE6, 0xD4, 0x3F ), - BYTES_TO_T_UINT_8( 0x8B, 0xC4, 0xE9, 0xDB, 0xB8, 0x9D, 0xDD, 0xAA ), -}; -#endif /* POLARSSL_ECP_DP_BP512R1_ENABLED */ - -/* - * Create an MPI from embedded constants - * (assumes len is an exact multiple of sizeof t_uint) - */ -SSL_ROM_TEXT_SECTION -static inline void ecp_mpi_load( mpi *X, const t_uint *p, size_t len ) -{ - X->s = 1; - X->n = len / sizeof( t_uint ); - X->p = (t_uint *) p; -} - -/* - * Set an MPI to static value 1 - */ -SSL_ROM_TEXT_SECTION -static inline void ecp_mpi_set1( mpi *X ) -{ - SSL_ROM_DATA_SECTION static const t_uint one[] = { 1 }; - X->s = 1; - X->n = 1; - X->p = one; -} - -/* - * Make group available from embedded constants - */ -SSL_ROM_TEXT_SECTION -static int ecp_group_load( ecp_group *grp, - const t_uint *p, size_t plen, - const t_uint *a, size_t alen, - const t_uint *b, size_t blen, - const t_uint *gx, size_t gxlen, - const t_uint *gy, size_t gylen, - const t_uint *n, size_t nlen) -{ - ecp_mpi_load( &grp->P, p, plen ); - if( a != NULL ) - ecp_mpi_load( &grp->A, a, alen ); - ecp_mpi_load( &grp->B, b, blen ); - ecp_mpi_load( &grp->N, n, nlen ); - - ecp_mpi_load( &grp->G.X, gx, gxlen ); - ecp_mpi_load( &grp->G.Y, gy, gylen ); - ecp_mpi_set1( &grp->G.Z ); - - grp->pbits = mpi_msb( &grp->P ); - grp->nbits = mpi_msb( &grp->N ); - - grp->h = 1; - - return( 0 ); -} - -#if defined(POLARSSL_ECP_NIST_OPTIM) -/* Forward declarations */ -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) -static int ecp_mod_p192( mpi * ); -#endif -#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) -static int ecp_mod_p224( mpi * ); -#endif -#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) -static int ecp_mod_p256( mpi * ); -#endif -#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) -static int ecp_mod_p384( mpi * ); -#endif -#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) -static int ecp_mod_p521( mpi * ); -#endif - -#define NIST_MODP( P ) grp->modp = ecp_mod_ ## P; -#else -#define NIST_MODP( P ) -#endif /* POLARSSL_ECP_NIST_OPTIM */ - -/* Additional forward declarations */ -#if defined(POLARSSL_ECP_DP_M255_ENABLED) -static int ecp_mod_p255( mpi * ); -#endif -#if defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) -static int ecp_mod_p192k1( mpi * ); -#endif -#if defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) -static int ecp_mod_p224k1( mpi * ); -#endif -#if defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) -static int ecp_mod_p256k1( mpi * ); -#endif - -#define LOAD_GROUP_A( G ) ecp_group_load( grp, \ - G ## _p, sizeof( G ## _p ), \ - G ## _a, sizeof( G ## _a ), \ - G ## _b, sizeof( G ## _b ), \ - G ## _gx, sizeof( G ## _gx ), \ - G ## _gy, sizeof( G ## _gy ), \ - G ## _n, sizeof( G ## _n ) ) - -#define LOAD_GROUP( G ) ecp_group_load( grp, \ - G ## _p, sizeof( G ## _p ), \ - NULL, 0, \ - G ## _b, sizeof( G ## _b ), \ - G ## _gx, sizeof( G ## _gx ), \ - G ## _gy, sizeof( G ## _gy ), \ - G ## _n, sizeof( G ## _n ) ) - -#if defined(POLARSSL_ECP_DP_M255_ENABLED) -/* - * Specialized function for creating the Curve25519 group - */ -SSL_ROM_TEXT_SECTION -static int ecp_use_curve25519( ecp_group *grp ) -{ - int ret; - - /* Actually ( A + 2 ) / 4 */ - MPI_CHK( mpi_read_string( &grp->A, 16, "01DB42" ) ); - - /* P = 2^255 - 19 */ - MPI_CHK( mpi_lset( &grp->P, 1 ) ); - MPI_CHK( mpi_shift_l( &grp->P, 255 ) ); - MPI_CHK( mpi_sub_int( &grp->P, &grp->P, 19 ) ); - grp->pbits = mpi_msb( &grp->P ); - - /* Y intentionaly not set, since we use x/z coordinates. - * This is used as a marker to identify Montgomery curves! */ - MPI_CHK( mpi_lset( &grp->G.X, 9 ) ); - MPI_CHK( mpi_lset( &grp->G.Z, 1 ) ); - mpi_free( &grp->G.Y ); - - /* Actually, the required msb for private keys */ - grp->nbits = 254; - -cleanup: - if( ret != 0 ) - ecp_group_free( grp ); - - return( ret ); -} -#endif /* POLARSSL_ECP_DP_M255_ENABLED */ - -/* - * Set a group using well-known domain parameters - */ -SSL_ROM_TEXT_SECTION -int ecp_use_known_dp( ecp_group *grp, ecp_group_id id ) -{ - ecp_group_free( grp ); - - grp->id = id; - - switch( id ) - { -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) - case POLARSSL_ECP_DP_SECP192R1: - NIST_MODP( p192 ); - return( LOAD_GROUP( secp192r1 ) ); -#endif /* POLARSSL_ECP_DP_SECP192R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) - case POLARSSL_ECP_DP_SECP224R1: - NIST_MODP( p224 ); - return( LOAD_GROUP( secp224r1 ) ); -#endif /* POLARSSL_ECP_DP_SECP224R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) - case POLARSSL_ECP_DP_SECP256R1: - NIST_MODP( p256 ); - return( LOAD_GROUP( secp256r1 ) ); -#endif /* POLARSSL_ECP_DP_SECP256R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) - case POLARSSL_ECP_DP_SECP384R1: - NIST_MODP( p384 ); - return( LOAD_GROUP( secp384r1 ) ); -#endif /* POLARSSL_ECP_DP_SECP384R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) - case POLARSSL_ECP_DP_SECP521R1: - NIST_MODP( p521 ); - return( LOAD_GROUP( secp521r1 ) ); -#endif /* POLARSSL_ECP_DP_SECP521R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) - case POLARSSL_ECP_DP_SECP192K1: - grp->modp = ecp_mod_p192k1; - return( LOAD_GROUP_A( secp192k1 ) ); -#endif /* POLARSSL_ECP_DP_SECP192K1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) - case POLARSSL_ECP_DP_SECP224K1: - grp->modp = ecp_mod_p224k1; - return( LOAD_GROUP_A( secp224k1 ) ); -#endif /* POLARSSL_ECP_DP_SECP224K1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) - case POLARSSL_ECP_DP_SECP256K1: - grp->modp = ecp_mod_p256k1; - return( LOAD_GROUP_A( secp256k1 ) ); -#endif /* POLARSSL_ECP_DP_SECP256K1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_BP256R1_ENABLED) - case POLARSSL_ECP_DP_BP256R1: - return( LOAD_GROUP_A( brainpoolP256r1 ) ); -#endif /* POLARSSL_ECP_DP_BP256R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_BP384R1_ENABLED) - case POLARSSL_ECP_DP_BP384R1: - return( LOAD_GROUP_A( brainpoolP384r1 ) ); -#endif /* POLARSSL_ECP_DP_BP384R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_BP512R1_ENABLED) - case POLARSSL_ECP_DP_BP512R1: - return( LOAD_GROUP_A( brainpoolP512r1 ) ); -#endif /* POLARSSL_ECP_DP_BP512R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_M255_ENABLED) - case POLARSSL_ECP_DP_M255: - grp->modp = ecp_mod_p255; - return( ecp_use_curve25519( grp ) ); -#endif /* POLARSSL_ECP_DP_M255_ENABLED */ - - default: - ecp_group_free( grp ); - return( POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE ); - } -} - -#if defined(POLARSSL_ECP_NIST_OPTIM) -/* - * Fast reduction modulo the primes used by the NIST curves. - * - * These functions are critical for speed, but not needed for correct - * operations. So, we make the choice to heavily rely on the internals of our - * bignum library, which creates a tight coupling between these functions and - * our MPI implementation. However, the coupling between the ECP module and - * MPI remains loose, since these functions can be deactivated at will. - */ - -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) -/* - * Compared to the way things are presented in FIPS 186-3 D.2, - * we proceed in columns, from right (least significant chunk) to left, - * adding chunks to N in place, and keeping a carry for the next chunk. - * This avoids moving things around in memory, and uselessly adding zeros, - * compared to the more straightforward, line-oriented approach. - * - * For this prime we need to handle data in chunks of 64 bits. - * Since this is always a multiple of our basic t_uint, we can - * use a t_uint * to designate such a chunk, and small loops to handle it. - */ - -/* Add 64-bit chunks (dst += src) and update carry */ -SSL_ROM_TEXT_SECTION -static inline void add64( t_uint *dst, t_uint *src, t_uint *carry ) -{ - unsigned char i; - t_uint c = 0; - for( i = 0; i < 8 / sizeof( t_uint ); i++, dst++, src++ ) - { - *dst += c; c = ( *dst < c ); - *dst += *src; c += ( *dst < *src ); - } - *carry += c; -} - -/* Add carry to a 64-bit chunk and update carry */ -SSL_ROM_TEXT_SECTION -static inline void carry64( t_uint *dst, t_uint *carry ) -{ - unsigned char i; - for( i = 0; i < 8 / sizeof( t_uint ); i++, dst++ ) - { - *dst += *carry; - *carry = ( *dst < *carry ); - } -} - -#define WIDTH 8 / sizeof( t_uint ) -#define A( i ) N->p + i * WIDTH -#define ADD( i ) add64( p, A( i ), &c ) -#define NEXT p += WIDTH; carry64( p, &c ) -#define LAST p += WIDTH; *p = c; while( ++p < end ) *p = 0 - -/* - * Fast quasi-reduction modulo p192 (FIPS 186-3 D.2.1) - */ -SSL_ROM_TEXT_SECTION -static int ecp_mod_p192( mpi *N ) -{ - int ret; - t_uint c = 0; - t_uint *p, *end; - - /* Make sure we have enough blocks so that A(5) is legal */ - MPI_CHK( mpi_grow( N, 6 * WIDTH ) ); - - p = N->p; - end = p + N->n; - - ADD( 3 ); ADD( 5 ); NEXT; // A0 += A3 + A5 - ADD( 3 ); ADD( 4 ); ADD( 5 ); NEXT; // A1 += A3 + A4 + A5 - ADD( 4 ); ADD( 5 ); LAST; // A2 += A4 + A5 - -cleanup: - return( ret ); -} - -#undef WIDTH -#undef A -#undef ADD -#undef NEXT -#undef LAST -#endif /* POLARSSL_ECP_DP_SECP192R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) -/* - * The reader is advised to first understand ecp_mod_p192() since the same - * general structure is used here, but with additional complications: - * (1) chunks of 32 bits, and (2) subtractions. - */ - -/* - * For these primes, we need to handle data in chunks of 32 bits. - * This makes it more complicated if we use 64 bits limbs in MPI, - * which prevents us from using a uniform access method as for p192. - * - * So, we define a mini abstraction layer to access 32 bit chunks, - * load them in 'cur' for work, and store them back from 'cur' when done. - * - * While at it, also define the size of N in terms of 32-bit chunks. - */ -#define LOAD32 cur = A( i ); - -#if defined(POLARSSL_HAVE_INT8) /* 8 bit */ - -#define MAX32 N->n / 4 -#define A( j ) (uint32_t)( N->p[4*j+0] ) | \ - ( N->p[4*j+1] << 8 ) | \ - ( N->p[4*j+2] << 16 ) | \ - ( N->p[4*j+3] << 24 ) -#define STORE32 N->p[4*i+0] = (t_uint)( cur ); \ - N->p[4*i+1] = (t_uint)( cur >> 8 ); \ - N->p[4*i+2] = (t_uint)( cur >> 16 ); \ - N->p[4*i+3] = (t_uint)( cur >> 24 ); - -#elif defined(POLARSSL_HAVE_INT16) /* 16 bit */ - -#define MAX32 N->n / 2 -#define A( j ) (uint32_t)( N->p[2*j] ) | ( N->p[2*j+1] << 16 ) -#define STORE32 N->p[2*i+0] = (t_uint)( cur ); \ - N->p[2*i+1] = (t_uint)( cur >> 16 ); - -#elif defined(POLARSSL_HAVE_INT32) /* 32 bit */ - -#define MAX32 N->n -#define A( j ) N->p[j] -#define STORE32 N->p[i] = cur; - -#else /* 64-bit */ - -#define MAX32 N->n * 2 -#define A( j ) j % 2 ? (uint32_t)( N->p[j/2] >> 32 ) : (uint32_t)( N->p[j/2] ) -#define STORE32 \ - if( i % 2 ) { \ - N->p[i/2] &= 0x00000000FFFFFFFF; \ - N->p[i/2] |= ((t_uint) cur) << 32; \ - } else { \ - N->p[i/2] &= 0xFFFFFFFF00000000; \ - N->p[i/2] |= (t_uint) cur; \ - } - -#endif /* sizeof( t_uint ) */ - -/* - * Helpers for addition and subtraction of chunks, with signed carry. - */ -SSL_ROM_TEXT_SECTION -static inline void add32( uint32_t *dst, uint32_t src, signed char *carry ) -{ - *dst += src; - *carry += ( *dst < src ); -} - -SSL_ROM_TEXT_SECTION -static inline void sub32( uint32_t *dst, uint32_t src, signed char *carry ) -{ - *carry -= ( *dst < src ); - *dst -= src; -} - -#define ADD( j ) add32( &cur, A( j ), &c ); -#define SUB( j ) sub32( &cur, A( j ), &c ); - -/* - * Helpers for the main 'loop' - * (see fix_negative for the motivation of C) - */ -#define INIT( b ) \ - int ret; \ - signed char c = 0, cc; \ - uint32_t cur; \ - size_t i = 0, bits = b; \ - mpi C; \ - t_uint Cp[ b / 8 / sizeof( t_uint) + 1 ]; \ - \ - C.s = 1; \ - C.n = b / 8 / sizeof( t_uint) + 1; \ - C.p = Cp; \ - memset( Cp, 0, C.n * sizeof( t_uint ) ); \ - \ - MPI_CHK( mpi_grow( N, b * 2 / 8 / sizeof( t_uint ) ) ); \ - LOAD32; - -#define NEXT \ - STORE32; i++; LOAD32; \ - cc = c; c = 0; \ - if( cc < 0 ) \ - sub32( &cur, -cc, &c ); \ - else \ - add32( &cur, cc, &c ); \ - -#define LAST \ - STORE32; i++; \ - cur = c > 0 ? c : 0; STORE32; \ - cur = 0; while( ++i < MAX32 ) { STORE32; } \ - if( c < 0 ) fix_negative( N, c, &C, bits ); - -/* - * If the result is negative, we get it in the form - * c * 2^(bits + 32) + N, with c negative and N positive shorter than 'bits' - */ -SSL_ROM_TEXT_SECTION -static inline int fix_negative( mpi *N, signed char c, mpi *C, size_t bits ) -{ - int ret; - - /* C = - c * 2^(bits + 32) */ -#if !defined(POLARSSL_HAVE_INT64) - ((void) bits); -#else - if( bits == 224 ) - C->p[ C->n - 1 ] = ((t_uint) -c) << 32; - else -#endif - C->p[ C->n - 1 ] = (t_uint) -c; - - /* N = - ( C - N ) */ - MPI_CHK( mpi_sub_abs( N, C, N ) ); - N->s = -1; - -cleanup: - - return( ret ); -} - -#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) -/* - * Fast quasi-reduction modulo p224 (FIPS 186-3 D.2.2) - */ -SSL_ROM_TEXT_SECTION -static int ecp_mod_p224( mpi *N ) -{ - INIT( 224 ); - - SUB( 7 ); SUB( 11 ); NEXT; // A0 += -A7 - A11 - SUB( 8 ); SUB( 12 ); NEXT; // A1 += -A8 - A12 - SUB( 9 ); SUB( 13 ); NEXT; // A2 += -A9 - A13 - SUB( 10 ); ADD( 7 ); ADD( 11 ); NEXT; // A3 += -A10 + A7 + A11 - SUB( 11 ); ADD( 8 ); ADD( 12 ); NEXT; // A4 += -A11 + A8 + A12 - SUB( 12 ); ADD( 9 ); ADD( 13 ); NEXT; // A5 += -A12 + A9 + A13 - SUB( 13 ); ADD( 10 ); LAST; // A6 += -A13 + A10 - -cleanup: - return( ret ); -} -#endif /* POLARSSL_ECP_DP_SECP224R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) -/* - * Fast quasi-reduction modulo p256 (FIPS 186-3 D.2.3) - */ -SSL_ROM_TEXT_SECTION -static int ecp_mod_p256( mpi *N ) -{ - INIT( 256 ); - - ADD( 8 ); ADD( 9 ); - SUB( 11 ); SUB( 12 ); SUB( 13 ); SUB( 14 ); NEXT; // A0 - - ADD( 9 ); ADD( 10 ); - SUB( 12 ); SUB( 13 ); SUB( 14 ); SUB( 15 ); NEXT; // A1 - - ADD( 10 ); ADD( 11 ); - SUB( 13 ); SUB( 14 ); SUB( 15 ); NEXT; // A2 - - ADD( 11 ); ADD( 11 ); ADD( 12 ); ADD( 12 ); ADD( 13 ); - SUB( 15 ); SUB( 8 ); SUB( 9 ); NEXT; // A3 - - ADD( 12 ); ADD( 12 ); ADD( 13 ); ADD( 13 ); ADD( 14 ); - SUB( 9 ); SUB( 10 ); NEXT; // A4 - - ADD( 13 ); ADD( 13 ); ADD( 14 ); ADD( 14 ); ADD( 15 ); - SUB( 10 ); SUB( 11 ); NEXT; // A5 - - ADD( 14 ); ADD( 14 ); ADD( 15 ); ADD( 15 ); ADD( 14 ); ADD( 13 ); - SUB( 8 ); SUB( 9 ); NEXT; // A6 - - ADD( 15 ); ADD( 15 ); ADD( 15 ); ADD( 8 ); - SUB( 10 ); SUB( 11 ); SUB( 12 ); SUB( 13 ); LAST; // A7 - -cleanup: - return( ret ); -} -#endif /* POLARSSL_ECP_DP_SECP256R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) -/* - * Fast quasi-reduction modulo p384 (FIPS 186-3 D.2.4) - */ -SSL_ROM_TEXT_SECTION -static int ecp_mod_p384( mpi *N ) -{ - INIT( 384 ); - - ADD( 12 ); ADD( 21 ); ADD( 20 ); - SUB( 23 ); NEXT; // A0 - - ADD( 13 ); ADD( 22 ); ADD( 23 ); - SUB( 12 ); SUB( 20 ); NEXT; // A2 - - ADD( 14 ); ADD( 23 ); - SUB( 13 ); SUB( 21 ); NEXT; // A2 - - ADD( 15 ); ADD( 12 ); ADD( 20 ); ADD( 21 ); - SUB( 14 ); SUB( 22 ); SUB( 23 ); NEXT; // A3 - - ADD( 21 ); ADD( 21 ); ADD( 16 ); ADD( 13 ); ADD( 12 ); ADD( 20 ); ADD( 22 ); - SUB( 15 ); SUB( 23 ); SUB( 23 ); NEXT; // A4 - - ADD( 22 ); ADD( 22 ); ADD( 17 ); ADD( 14 ); ADD( 13 ); ADD( 21 ); ADD( 23 ); - SUB( 16 ); NEXT; // A5 - - ADD( 23 ); ADD( 23 ); ADD( 18 ); ADD( 15 ); ADD( 14 ); ADD( 22 ); - SUB( 17 ); NEXT; // A6 - - ADD( 19 ); ADD( 16 ); ADD( 15 ); ADD( 23 ); - SUB( 18 ); NEXT; // A7 - - ADD( 20 ); ADD( 17 ); ADD( 16 ); - SUB( 19 ); NEXT; // A8 - - ADD( 21 ); ADD( 18 ); ADD( 17 ); - SUB( 20 ); NEXT; // A9 - - ADD( 22 ); ADD( 19 ); ADD( 18 ); - SUB( 21 ); NEXT; // A10 - - ADD( 23 ); ADD( 20 ); ADD( 19 ); - SUB( 22 ); LAST; // A11 - -cleanup: - return( ret ); -} -#endif /* POLARSSL_ECP_DP_SECP384R1_ENABLED */ - -#undef A -#undef LOAD32 -#undef STORE32 -#undef MAX32 -#undef INIT -#undef NEXT -#undef LAST - -#endif /* POLARSSL_ECP_DP_SECP224R1_ENABLED || - POLARSSL_ECP_DP_SECP256R1_ENABLED || - POLARSSL_ECP_DP_SECP384R1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) -/* - * Here we have an actual Mersenne prime, so things are more straightforward. - * However, chunks are aligned on a 'weird' boundary (521 bits). - */ - -/* Size of p521 in terms of t_uint */ -#define P521_WIDTH ( 521 / 8 / sizeof( t_uint ) + 1 ) - -/* Bits to keep in the most significant t_uint */ -#if defined(POLARSSL_HAVE_INT8) -#define P521_MASK 0x01 -#else -#define P521_MASK 0x01FF -#endif - -/* - * Fast quasi-reduction modulo p521 (FIPS 186-3 D.2.5) - * Write N as A1 + 2^521 A0, return A0 + A1 - */ -SSL_ROM_TEXT_SECTION -static int ecp_mod_p521( mpi *N ) -{ - int ret; - size_t i; - mpi M; - t_uint Mp[P521_WIDTH + 1]; - /* Worst case for the size of M is when t_uint is 16 bits: - * we need to hold bits 513 to 1056, which is 34 limbs, that is - * P521_WIDTH + 1. Otherwise P521_WIDTH is enough. */ - - if( N->n < P521_WIDTH ) - return( 0 ); - - /* M = A1 */ - M.s = 1; - M.n = N->n - ( P521_WIDTH - 1 ); - if( M.n > P521_WIDTH + 1 ) - M.n = P521_WIDTH + 1; - M.p = Mp; - memcpy( Mp, N->p + P521_WIDTH - 1, M.n * sizeof( t_uint ) ); - MPI_CHK( mpi_shift_r( &M, 521 % ( 8 * sizeof( t_uint ) ) ) ); - - /* N = A0 */ - N->p[P521_WIDTH - 1] &= P521_MASK; - for( i = P521_WIDTH; i < N->n; i++ ) - N->p[i] = 0; - - /* N = A0 + A1 */ - MPI_CHK( mpi_add_abs( N, N, &M ) ); - -cleanup: - return( ret ); -} - -#undef P521_WIDTH -#undef P521_MASK -#endif /* POLARSSL_ECP_DP_SECP521R1_ENABLED */ - -#endif /* POLARSSL_ECP_NIST_OPTIM */ - -#if defined(POLARSSL_ECP_DP_M255_ENABLED) - -/* Size of p255 in terms of t_uint */ -#define P255_WIDTH ( 255 / 8 / sizeof( t_uint ) + 1 ) - -/* - * Fast quasi-reduction modulo p255 = 2^255 - 19 - * Write N as A0 + 2^255 A1, return A0 + 19 * A1 - */ -SSL_ROM_TEXT_SECTION -static int ecp_mod_p255( mpi *N ) -{ - int ret; - size_t i; - mpi M; - t_uint Mp[P255_WIDTH + 2]; - - if( N->n < P255_WIDTH ) - return( 0 ); - - /* M = A1 */ - M.s = 1; - M.n = N->n - ( P255_WIDTH - 1 ); - if( M.n > P255_WIDTH + 1 ) - M.n = P255_WIDTH + 1; - M.p = Mp; - memset( Mp, 0, sizeof Mp ); - memcpy( Mp, N->p + P255_WIDTH - 1, M.n * sizeof( t_uint ) ); - MPI_CHK( mpi_shift_r( &M, 255 % ( 8 * sizeof( t_uint ) ) ) ); - M.n++; /* Make room for multiplication by 19 */ - - /* N = A0 */ - MPI_CHK( mpi_set_bit( N, 255, 0 ) ); - for( i = P255_WIDTH; i < N->n; i++ ) - N->p[i] = 0; - - /* N = A0 + 19 * A1 */ - MPI_CHK( mpi_mul_int( &M, &M, 19 ) ); - MPI_CHK( mpi_add_abs( N, N, &M ) ); - -cleanup: - return( ret ); -} -#endif /* POLARSSL_ECP_DP_M255_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) || \ - defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) -/* - * Fast quasi-reduction modulo P = 2^s - R, - * with R about 33 bits, used by the Koblitz curves. - * - * Write N as A0 + 2^224 A1, return A0 + R * A1. - * Actually do two passes, since R is big. - */ -#define P_KOBLITZ_MAX ( 256 / 8 / sizeof( t_uint ) ) // Max limbs in P -#define P_KOBLITZ_R ( 8 / sizeof( t_uint ) ) // Limbs in R -SSL_ROM_TEXT_SECTION -static inline int ecp_mod_koblitz( mpi *N, t_uint *Rp, size_t p_limbs, - size_t adjust, size_t shift, t_uint mask ) -{ - int ret; - size_t i; - mpi M, R; - t_uint Mp[P_KOBLITZ_MAX + P_KOBLITZ_R]; - - if( N->n < p_limbs ) - return( 0 ); - - /* Init R */ - R.s = 1; - R.p = Rp; - R.n = P_KOBLITZ_R; - - /* Common setup for M */ - M.s = 1; - M.p = Mp; - - /* M = A1 */ - M.n = N->n - ( p_limbs - adjust ); - if( M.n > p_limbs + adjust ) - M.n = p_limbs + adjust; - memset( Mp, 0, sizeof Mp ); - memcpy( Mp, N->p + p_limbs - adjust, M.n * sizeof( t_uint ) ); - if( shift != 0 ) - MPI_CHK( mpi_shift_r( &M, shift ) ); - M.n += R.n - adjust; /* Make room for multiplication by R */ - - /* N = A0 */ - if( mask != 0 ) - N->p[p_limbs - 1] &= mask; - for( i = p_limbs; i < N->n; i++ ) - N->p[i] = 0; - - /* N = A0 + R * A1 */ - MPI_CHK( mpi_mul_mpi( &M, &M, &R ) ); - MPI_CHK( mpi_add_abs( N, N, &M ) ); - - /* Second pass */ - - /* M = A1 */ - M.n = N->n - ( p_limbs - adjust ); - if( M.n > p_limbs + adjust ) - M.n = p_limbs + adjust; - memset( Mp, 0, sizeof Mp ); - memcpy( Mp, N->p + p_limbs - adjust, M.n * sizeof( t_uint ) ); - if( shift != 0 ) - MPI_CHK( mpi_shift_r( &M, shift ) ); - M.n += R.n - adjust; /* Make room for multiplication by R */ - - /* N = A0 */ - if( mask != 0 ) - N->p[p_limbs - 1] &= mask; - for( i = p_limbs; i < N->n; i++ ) - N->p[i] = 0; - - /* N = A0 + R * A1 */ - MPI_CHK( mpi_mul_mpi( &M, &M, &R ) ); - MPI_CHK( mpi_add_abs( N, N, &M ) ); - -cleanup: - return( ret ); -} -#endif /* POLARSSL_ECP_DP_SECP192K1_ENABLED) || - POLARSSL_ECP_DP_SECP224K1_ENABLED) || - POLARSSL_ECP_DP_SECP256K1_ENABLED) */ - -#if defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) -/* - * Fast quasi-reduction modulo p192k1 = 2^192 - R, - * with R = 2^32 + 2^12 + 2^8 + 2^7 + 2^6 + 2^3 + 1 = 0x0100001119 - */ -SSL_ROM_TEXT_SECTION -static int ecp_mod_p192k1( mpi *N ) -{ - SSL_ROM_DATA_SECTION static const t_uint Rp[] = { - BYTES_TO_T_UINT_8( 0xC9, 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) }; - - return( ecp_mod_koblitz( N, Rp, 192 / 8 / sizeof( t_uint ), 0, 0, 0 ) ); -} -#endif /* POLARSSL_ECP_DP_SECP192K1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) -/* - * Fast quasi-reduction modulo p224k1 = 2^224 - R, - * with R = 2^32 + 2^12 + 2^11 + 2^9 + 2^7 + 2^4 + 2 + 1 = 0x0100001A93 - */ -SSL_ROM_TEXT_SECTION -static int ecp_mod_p224k1( mpi *N ) -{ - SSL_ROM_DATA_SECTION static const t_uint Rp[] = { - BYTES_TO_T_UINT_8( 0x93, 0x1A, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) }; - -#if defined(POLARSSL_HAVE_INT64) - return( ecp_mod_koblitz( N, Rp, 4, 1, 32, 0xFFFFFFFF ) ); -#else - return( ecp_mod_koblitz( N, Rp, 224 / 8 / sizeof( t_uint ), 0, 0, 0 ) ); -#endif -} - -#endif /* POLARSSL_ECP_DP_SECP224K1_ENABLED */ - -#if defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) -/* - * Fast quasi-reduction modulo p256k1 = 2^256 - R, - * with R = 2^32 + 2^9 + 2^8 + 2^7 + 2^6 + 2^4 + 1 = 0x01000003D1 - */ -SSL_ROM_TEXT_SECTION -static int ecp_mod_p256k1( mpi *N ) -{ - SSL_ROM_DATA_SECTION static const t_uint Rp[] = { - BYTES_TO_T_UINT_8( 0xD1, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) }; - return( ecp_mod_koblitz( N, Rp, 256 / 8 / sizeof( t_uint ), 0, 0, 0 ) ); -} -#endif /* POLARSSL_ECP_DP_SECP256K1_ENABLED */ - -#endif /* POLARSSL_ECP_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/hmac_drbg.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/hmac_drbg.c deleted file mode 100644 index 5de7c25..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/hmac_drbg.c +++ /dev/null @@ -1,515 +0,0 @@ -/* - * HMAC_DRBG implementation (NIST SP 800-90) - * - * Copyright (C) 2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * The NIST SP 800-90A DRBGs are described in the following publication. - * http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf - * References below are based on rev. 1 (January 2012). - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_HMAC_DRBG_C) - -#include "polarssl/hmac_drbg.h" - -#if defined(POLARSSL_FS_IO) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * HMAC_DRBG update, using optional additional data (10.1.2.2) - */ -SSL_ROM_TEXT_SECTION -void hmac_drbg_update( hmac_drbg_context *ctx, - const unsigned char *additional, size_t add_len ) -{ - size_t md_len = ctx->md_ctx.md_info->size; - unsigned char rounds = ( additional != NULL && add_len != 0 ) ? 2 : 1; - unsigned char sep[1]; - unsigned char K[POLARSSL_MD_MAX_SIZE]; - - for( sep[0] = 0; sep[0] < rounds; sep[0]++ ) - { - /* Step 1 or 4 */ - md_hmac_reset( &ctx->md_ctx ); - md_hmac_update( &ctx->md_ctx, ctx->V, md_len ); - md_hmac_update( &ctx->md_ctx, sep, 1 ); - if( rounds == 2 ) - md_hmac_update( &ctx->md_ctx, additional, add_len ); - md_hmac_finish( &ctx->md_ctx, K ); - - /* Step 2 or 5 */ - md_hmac_starts( &ctx->md_ctx, K, md_len ); - md_hmac_update( &ctx->md_ctx, ctx->V, md_len ); - md_hmac_finish( &ctx->md_ctx, ctx->V ); - } -} - -/* - * Simplified HMAC_DRBG initialisation (for use with deterministic ECDSA) - */ -SSL_ROM_TEXT_SECTION -int hmac_drbg_init_buf( hmac_drbg_context *ctx, - const md_info_t * md_info, - const unsigned char *data, size_t data_len ) -{ - int ret; - - memset( ctx, 0, sizeof( hmac_drbg_context ) ); - - md_init( &ctx->md_ctx ); - - if( ( ret = md_init_ctx( &ctx->md_ctx, md_info ) ) != 0 ) - return( ret ); - - /* - * Set initial working state. - * Use the V memory location, which is currently all 0, to initialize the - * MD context with an all-zero key. Then set V to its initial value. - */ - md_hmac_starts( &ctx->md_ctx, ctx->V, md_info->size ); - memset( ctx->V, 0x01, md_info->size ); - - hmac_drbg_update( ctx, data, data_len ); - - return( 0 ); -} - -/* - * HMAC_DRBG reseeding: 10.1.2.4 (arabic) + 9.2 (Roman) - */ -SSL_ROM_TEXT_SECTION -int hmac_drbg_reseed( hmac_drbg_context *ctx, - const unsigned char *additional, size_t len ) -{ - unsigned char seed[POLARSSL_HMAC_DRBG_MAX_SEED_INPUT]; - size_t seedlen; - - /* III. Check input length */ - if( len > POLARSSL_HMAC_DRBG_MAX_INPUT || - ctx->entropy_len + len > POLARSSL_HMAC_DRBG_MAX_SEED_INPUT ) - { - return( POLARSSL_ERR_HMAC_DRBG_INPUT_TOO_BIG ); - } - - memset( seed, 0, POLARSSL_HMAC_DRBG_MAX_SEED_INPUT ); - - /* IV. Gather entropy_len bytes of entropy for the seed */ - if( ctx->f_entropy( ctx->p_entropy, seed, ctx->entropy_len ) != 0 ) - return( POLARSSL_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED ); - - seedlen = ctx->entropy_len; - - /* 1. Concatenate entropy and additional data if any */ - if( additional != NULL && len != 0 ) - { - memcpy( seed + seedlen, additional, len ); - seedlen += len; - } - - /* 2. Update state */ - hmac_drbg_update( ctx, seed, seedlen ); - - /* 3. Reset reseed_counter */ - ctx->reseed_counter = 1; - - /* 4. Done */ - return( 0 ); -} - -/* - * HMAC_DRBG initialisation (10.1.2.3 + 9.1) - */ -SSL_ROM_TEXT_SECTION -int hmac_drbg_init( hmac_drbg_context *ctx, - const md_info_t * md_info, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len ) -{ - int ret; - size_t entropy_len; - - memset( ctx, 0, sizeof( hmac_drbg_context ) ); - - md_init( &ctx->md_ctx ); - - if( ( ret = md_init_ctx( &ctx->md_ctx, md_info ) ) != 0 ) - return( ret ); - - /* - * Set initial working state. - * Use the V memory location, which is currently all 0, to initialize the - * MD context with an all-zero key. Then set V to its initial value. - */ - md_hmac_starts( &ctx->md_ctx, ctx->V, md_info->size ); - memset( ctx->V, 0x01, md_info->size ); - - ctx->f_entropy = f_entropy; - ctx->p_entropy = p_entropy; - - ctx->reseed_interval = POLARSSL_HMAC_DRBG_RESEED_INTERVAL; - - /* - * See SP800-57 5.6.1 (p. 65-66) for the security strength provided by - * each hash function, then according to SP800-90A rev1 10.1 table 2, - * min_entropy_len (in bits) is security_strength. - * - * (This also matches the sizes used in the NIST test vectors.) - */ - entropy_len = md_info->size <= 20 ? 16 : /* 160-bits hash -> 128 bits */ - md_info->size <= 28 ? 24 : /* 224-bits hash -> 192 bits */ - 32; /* better (256+) -> 256 bits */ - - /* - * For initialisation, use more entropy to emulate a nonce - * (Again, matches test vectors.) - */ - ctx->entropy_len = entropy_len * 3 / 2; - - if( ( ret = hmac_drbg_reseed( ctx, custom, len ) ) != 0 ) - return( ret ); - - ctx->entropy_len = entropy_len; - - return( 0 ); -} - -/* - * Set prediction resistance - */ -SSL_ROM_TEXT_SECTION -void hmac_drbg_set_prediction_resistance( hmac_drbg_context *ctx, - int resistance ) -{ - ctx->prediction_resistance = resistance; -} - -/* - * Set entropy length grabbed for reseeds - */ -SSL_ROM_TEXT_SECTION -void hmac_drbg_set_entropy_len( hmac_drbg_context *ctx, size_t len ) -{ - ctx->entropy_len = len; -} - -/* - * Set reseed interval - */ -SSL_ROM_TEXT_SECTION -void hmac_drbg_set_reseed_interval( hmac_drbg_context *ctx, int interval ) -{ - ctx->reseed_interval = interval; -} - -/* - * HMAC_DRBG random function with optional additional data: - * 10.1.2.5 (arabic) + 9.3 (Roman) - */ -SSL_ROM_TEXT_SECTION -int hmac_drbg_random_with_add( void *p_rng, - unsigned char *output, size_t out_len, - const unsigned char *additional, size_t add_len ) -{ - int ret; - hmac_drbg_context *ctx = (hmac_drbg_context *) p_rng; - size_t md_len = md_get_size( ctx->md_ctx.md_info ); - size_t left = out_len; - unsigned char *out = output; - - /* II. Check request length */ - if( out_len > POLARSSL_HMAC_DRBG_MAX_REQUEST ) - return( POLARSSL_ERR_HMAC_DRBG_REQUEST_TOO_BIG ); - - /* III. Check input length */ - if( add_len > POLARSSL_HMAC_DRBG_MAX_INPUT ) - return( POLARSSL_ERR_HMAC_DRBG_INPUT_TOO_BIG ); - - /* 1. (aka VII and IX) Check reseed counter and PR */ - if( ctx->f_entropy != NULL && /* For no-reseeding instances */ - ( ctx->prediction_resistance == POLARSSL_HMAC_DRBG_PR_ON || - ctx->reseed_counter > ctx->reseed_interval ) ) - { - if( ( ret = hmac_drbg_reseed( ctx, additional, add_len ) ) != 0 ) - return( ret ); - - add_len = 0; /* VII.4 */ - } - - /* 2. Use additional data if any */ - if( additional != NULL && add_len != 0 ) - hmac_drbg_update( ctx, additional, add_len ); - - /* 3, 4, 5. Generate bytes */ - while( left != 0 ) - { - size_t use_len = left > md_len ? md_len : left; - - md_hmac_reset( &ctx->md_ctx ); - md_hmac_update( &ctx->md_ctx, ctx->V, md_len ); - md_hmac_finish( &ctx->md_ctx, ctx->V ); - - memcpy( out, ctx->V, use_len ); - out += use_len; - left -= use_len; - } - - /* 6. Update */ - hmac_drbg_update( ctx, additional, add_len ); - - /* 7. Update reseed counter */ - ctx->reseed_counter++; - - /* 8. Done */ - return( 0 ); -} - -/* - * HMAC_DRBG random function - */ -SSL_ROM_TEXT_SECTION -int hmac_drbg_random( void *p_rng, unsigned char *output, size_t out_len ) -{ - return( hmac_drbg_random_with_add( p_rng, output, out_len, NULL, 0 ) ); -} - -/* - * Free an HMAC_DRBG context - */ -SSL_ROM_TEXT_SECTION -void hmac_drbg_free( hmac_drbg_context *ctx ) -{ - if( ctx == NULL ) - return; - - md_free_ctx( &ctx->md_ctx ); - - polarssl_zeroize( ctx, sizeof( hmac_drbg_context ) ); -} - -#if defined(POLARSSL_FS_IO) -SSL_ROM_TEXT_SECTION -int hmac_drbg_write_seed_file( hmac_drbg_context *ctx, const char *path ) -{ - int ret; - FILE *f; - unsigned char buf[ POLARSSL_HMAC_DRBG_MAX_INPUT ]; - - if( ( f = fopen( path, "wb" ) ) == NULL ) - return( POLARSSL_ERR_HMAC_DRBG_FILE_IO_ERROR ); - - if( ( ret = hmac_drbg_random( ctx, buf, sizeof( buf ) ) ) != 0 ) - goto exit; - - if( fwrite( buf, 1, sizeof( buf ), f ) != sizeof( buf ) ) - { - ret = POLARSSL_ERR_HMAC_DRBG_FILE_IO_ERROR; - goto exit; - } - - ret = 0; - -exit: - fclose( f ); - return( ret ); -} - -SSL_ROM_TEXT_SECTION -int hmac_drbg_update_seed_file( hmac_drbg_context *ctx, const char *path ) -{ - FILE *f; - size_t n; - unsigned char buf[ POLARSSL_HMAC_DRBG_MAX_INPUT ]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_HMAC_DRBG_FILE_IO_ERROR ); - - fseek( f, 0, SEEK_END ); - n = (size_t) ftell( f ); - fseek( f, 0, SEEK_SET ); - - if( n > POLARSSL_HMAC_DRBG_MAX_INPUT ) - { - fclose( f ); - return( POLARSSL_ERR_HMAC_DRBG_INPUT_TOO_BIG ); - } - - if( fread( buf, 1, n, f ) != n ) - { - fclose( f ); - return( POLARSSL_ERR_HMAC_DRBG_FILE_IO_ERROR ); - } - - fclose( f ); - - hmac_drbg_update( ctx, buf, n ); - - return( hmac_drbg_write_seed_file( ctx, path ) ); -} -#endif /* POLARSSL_FS_IO */ - - -#if defined(POLARSSL_SELF_TEST) - -#include - -#if !defined(POLARSSL_SHA1_C) -/* Dummy checkup routine */ -int hmac_drbg_self_test( int verbose ) -{ - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} -#else - -#define OUTPUT_LEN 80 - -/* From a NIST PR=true test vector */ -static unsigned char entropy_pr[] = { - 0xa0, 0xc9, 0xab, 0x58, 0xf1, 0xe2, 0xe5, 0xa4, 0xde, 0x3e, 0xbd, 0x4f, - 0xf7, 0x3e, 0x9c, 0x5b, 0x64, 0xef, 0xd8, 0xca, 0x02, 0x8c, 0xf8, 0x11, - 0x48, 0xa5, 0x84, 0xfe, 0x69, 0xab, 0x5a, 0xee, 0x42, 0xaa, 0x4d, 0x42, - 0x17, 0x60, 0x99, 0xd4, 0x5e, 0x13, 0x97, 0xdc, 0x40, 0x4d, 0x86, 0xa3, - 0x7b, 0xf5, 0x59, 0x54, 0x75, 0x69, 0x51, 0xe4 }; -static const unsigned char result_pr[OUTPUT_LEN] = { - 0x9a, 0x00, 0xa2, 0xd0, 0x0e, 0xd5, 0x9b, 0xfe, 0x31, 0xec, 0xb1, 0x39, - 0x9b, 0x60, 0x81, 0x48, 0xd1, 0x96, 0x9d, 0x25, 0x0d, 0x3c, 0x1e, 0x94, - 0x10, 0x10, 0x98, 0x12, 0x93, 0x25, 0xca, 0xb8, 0xfc, 0xcc, 0x2d, 0x54, - 0x73, 0x19, 0x70, 0xc0, 0x10, 0x7a, 0xa4, 0x89, 0x25, 0x19, 0x95, 0x5e, - 0x4b, 0xc6, 0x00, 0x1d, 0x7f, 0x4e, 0x6a, 0x2b, 0xf8, 0xa3, 0x01, 0xab, - 0x46, 0x05, 0x5c, 0x09, 0xa6, 0x71, 0x88, 0xf1, 0xa7, 0x40, 0xee, 0xf3, - 0xe1, 0x5c, 0x02, 0x9b, 0x44, 0xaf, 0x03, 0x44 }; - -/* From a NIST PR=false test vector */ -static unsigned char entropy_nopr[] = { - 0x79, 0x34, 0x9b, 0xbf, 0x7c, 0xdd, 0xa5, 0x79, 0x95, 0x57, 0x86, 0x66, - 0x21, 0xc9, 0x13, 0x83, 0x11, 0x46, 0x73, 0x3a, 0xbf, 0x8c, 0x35, 0xc8, - 0xc7, 0x21, 0x5b, 0x5b, 0x96, 0xc4, 0x8e, 0x9b, 0x33, 0x8c, 0x74, 0xe3, - 0xe9, 0x9d, 0xfe, 0xdf }; -static const unsigned char result_nopr[OUTPUT_LEN] = { - 0xc6, 0xa1, 0x6a, 0xb8, 0xd4, 0x20, 0x70, 0x6f, 0x0f, 0x34, 0xab, 0x7f, - 0xec, 0x5a, 0xdc, 0xa9, 0xd8, 0xca, 0x3a, 0x13, 0x3e, 0x15, 0x9c, 0xa6, - 0xac, 0x43, 0xc6, 0xf8, 0xa2, 0xbe, 0x22, 0x83, 0x4a, 0x4c, 0x0a, 0x0a, - 0xff, 0xb1, 0x0d, 0x71, 0x94, 0xf1, 0xc1, 0xa5, 0xcf, 0x73, 0x22, 0xec, - 0x1a, 0xe0, 0x96, 0x4e, 0xd4, 0xbf, 0x12, 0x27, 0x46, 0xe0, 0x87, 0xfd, - 0xb5, 0xb3, 0xe9, 0x1b, 0x34, 0x93, 0xd5, 0xbb, 0x98, 0xfa, 0xed, 0x49, - 0xe8, 0x5f, 0x13, 0x0f, 0xc8, 0xa4, 0x59, 0xb7 }; - -/* "Entropy" from buffer */ -static size_t test_offset; -static int hmac_drbg_self_test_entropy( void *data, - unsigned char *buf, size_t len ) -{ - const unsigned char *p = data; - memcpy( buf, p + test_offset, len ); - test_offset += len; - return( 0 ); -} - -#define CHK( c ) if( (c) != 0 ) \ - { \ - if( verbose != 0 ) \ - polarssl_printf( "failed\n" ); \ - return( 1 ); \ - } - -/* - * Checkup routine for HMAC_DRBG with SHA-1 - */ -int hmac_drbg_self_test( int verbose ) -{ - hmac_drbg_context ctx; - unsigned char buf[OUTPUT_LEN]; - const md_info_t *md_info = md_info_from_type( POLARSSL_MD_SHA1 ); - - /* - * PR = True - */ - if( verbose != 0 ) - polarssl_printf( " HMAC_DRBG (PR = True) : " ); - - test_offset = 0; - CHK( hmac_drbg_init( &ctx, md_info, - hmac_drbg_self_test_entropy, entropy_pr, - NULL, 0 ) ); - hmac_drbg_set_prediction_resistance( &ctx, POLARSSL_HMAC_DRBG_PR_ON ); - CHK( hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); - CHK( hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); - CHK( memcmp( buf, result_pr, OUTPUT_LEN ) ); - hmac_drbg_free( &ctx ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - /* - * PR = False - */ - if( verbose != 0 ) - polarssl_printf( " HMAC_DRBG (PR = False) : " ); - - test_offset = 0; - CHK( hmac_drbg_init( &ctx, md_info, - hmac_drbg_self_test_entropy, entropy_nopr, - NULL, 0 ) ); - CHK( hmac_drbg_reseed( &ctx, NULL, 0 ) ); - CHK( hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); - CHK( hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); - CHK( memcmp( buf, result_nopr, OUTPUT_LEN ) ); - hmac_drbg_free( &ctx ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_HMAC_DRBG_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/md.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/md.c deleted file mode 100644 index d554e26..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/md.c +++ /dev/null @@ -1,361 +0,0 @@ -/** - * \file md.c - * - * \brief Generic message digest wrapper for PolarSSL - * - * \author Adriaan de Jong - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_MD_C) - -#include "polarssl/md.h" -#include "polarssl/md_wrap.h" - -#include - -#if defined(_MSC_VER) && !defined strcasecmp && !defined(EFIX64) && \ - !defined(EFI32) -#define strcasecmp _stricmp -#endif - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -SSL_ROM_DATA_SECTION -static const int supported_digests[] = { - -#if defined(POLARSSL_SHA512_C) - POLARSSL_MD_SHA384, - POLARSSL_MD_SHA512, -#endif - -#if defined(POLARSSL_SHA256_C) - POLARSSL_MD_SHA224, - POLARSSL_MD_SHA256, -#endif - -#if defined(POLARSSL_SHA1_C) - POLARSSL_MD_SHA1, -#endif - -#if defined(POLARSSL_RIPEMD160_C) - POLARSSL_MD_RIPEMD160, -#endif - -#if defined(POLARSSL_MD5_C) - POLARSSL_MD_MD5, -#endif - -#if defined(POLARSSL_MD4_C) - POLARSSL_MD_MD4, -#endif - -#if defined(POLARSSL_MD2_C) - POLARSSL_MD_MD2, -#endif - - POLARSSL_MD_NONE -}; - -SSL_ROM_TEXT_SECTION -const int *md_list( void ) -{ - return( supported_digests ); -} - -SSL_ROM_TEXT_SECTION -const md_info_t *md_info_from_string( const char *md_name ) -{ - if( NULL == md_name ) - return( NULL ); - - /* Get the appropriate digest information */ -#if defined(POLARSSL_MD2_C) - if( !strcasecmp( "MD2", md_name ) ) - return md_info_from_type( POLARSSL_MD_MD2 ); -#endif -#if defined(POLARSSL_MD4_C) - if( !strcasecmp( "MD4", md_name ) ) - return md_info_from_type( POLARSSL_MD_MD4 ); -#endif -#if defined(POLARSSL_MD5_C) - if( !strcasecmp( "MD5", md_name ) ) - return md_info_from_type( POLARSSL_MD_MD5 ); -#endif -#if defined(POLARSSL_RIPEMD160_C) - if( !strcasecmp( "RIPEMD160", md_name ) ) - return md_info_from_type( POLARSSL_MD_RIPEMD160 ); -#endif -#if defined(POLARSSL_SHA1_C) - if( !strcasecmp( "SHA1", md_name ) || !strcasecmp( "SHA", md_name ) ) - return md_info_from_type( POLARSSL_MD_SHA1 ); -#endif -#if defined(POLARSSL_SHA256_C) - if( !strcasecmp( "SHA224", md_name ) ) - return md_info_from_type( POLARSSL_MD_SHA224 ); - if( !strcasecmp( "SHA256", md_name ) ) - return md_info_from_type( POLARSSL_MD_SHA256 ); -#endif -#if defined(POLARSSL_SHA512_C) - if( !strcasecmp( "SHA384", md_name ) ) - return md_info_from_type( POLARSSL_MD_SHA384 ); - if( !strcasecmp( "SHA512", md_name ) ) - return md_info_from_type( POLARSSL_MD_SHA512 ); -#endif - return( NULL ); -} - -SSL_ROM_TEXT_SECTION -const md_info_t *md_info_from_type( md_type_t md_type ) -{ - switch( md_type ) - { -#if defined(POLARSSL_MD2_C) - case POLARSSL_MD_MD2: - return( &md2_info ); -#endif -#if defined(POLARSSL_MD4_C) - case POLARSSL_MD_MD4: - return( &md4_info ); -#endif -#if defined(POLARSSL_MD5_C) - case POLARSSL_MD_MD5: - return( &md5_info ); -#endif -#if defined(POLARSSL_RIPEMD160_C) - case POLARSSL_MD_RIPEMD160: - return( &ripemd160_info ); -#endif -#if defined(POLARSSL_SHA1_C) - case POLARSSL_MD_SHA1: - return( &sha1_info ); -#endif -#if defined(POLARSSL_SHA256_C) - case POLARSSL_MD_SHA224: - return( &sha224_info ); - case POLARSSL_MD_SHA256: - return( &sha256_info ); -#endif -#if defined(POLARSSL_SHA512_C) - case POLARSSL_MD_SHA384: - return( &sha384_info ); - case POLARSSL_MD_SHA512: - return( &sha512_info ); -#endif - default: - return( NULL ); - } -} - -SSL_ROM_TEXT_SECTION -void md_init( md_context_t *ctx ) -{ - memset( ctx, 0, sizeof( md_context_t ) ); -} - -SSL_ROM_TEXT_SECTION -void md_free( md_context_t *ctx ) -{ - if( ctx == NULL ) - return; - - if( ctx->md_ctx ) - ctx->md_info->ctx_free_func( ctx->md_ctx ); - - polarssl_zeroize( ctx, sizeof( md_context_t ) ); -} - -SSL_ROM_TEXT_SECTION -int md_init_ctx( md_context_t *ctx, const md_info_t *md_info ) -{ - if( md_info == NULL || ctx == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - memset( ctx, 0, sizeof( md_context_t ) ); - - if( ( ctx->md_ctx = md_info->ctx_alloc_func() ) == NULL ) - return( POLARSSL_ERR_MD_ALLOC_FAILED ); - - ctx->md_info = md_info; - - md_info->starts_func( ctx->md_ctx ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int md_free_ctx( md_context_t *ctx ) -{ - md_free( ctx ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int md_starts( md_context_t *ctx ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->starts_func( ctx->md_ctx ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int md_update( md_context_t *ctx, const unsigned char *input, size_t ilen ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->update_func( ctx->md_ctx, input, ilen ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int md_finish( md_context_t *ctx, unsigned char *output ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->finish_func( ctx->md_ctx, output ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int md( const md_info_t *md_info, const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - if( md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - md_info->digest_func( input, ilen, output ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int md_file( const md_info_t *md_info, const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - int ret; -#endif - - if( md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - -#if defined(POLARSSL_FS_IO) - ret = md_info->file_func( path, output ); - if( ret != 0 ) - return( POLARSSL_ERR_MD_FILE_IO_ERROR + ret ); - - return( ret ); -#else - ((void) path); - ((void) output); - - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_FS_IO */ -} - -SSL_ROM_TEXT_SECTION -int md_hmac_starts( md_context_t *ctx, const unsigned char *key, size_t keylen ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->hmac_starts_func( ctx->md_ctx, key, keylen ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int md_hmac_update( md_context_t *ctx, const unsigned char *input, size_t ilen ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->hmac_update_func( ctx->md_ctx, input, ilen ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int md_hmac_finish( md_context_t *ctx, unsigned char *output ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->hmac_finish_func( ctx->md_ctx, output ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int md_hmac_reset( md_context_t *ctx ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->hmac_reset_func( ctx->md_ctx ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int md_hmac( const md_info_t *md_info, const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - if( md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - md_info->hmac_func( key, keylen, input, ilen, output ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int md_process( md_context_t *ctx, const unsigned char *data ) -{ - if( ctx == NULL || ctx->md_info == NULL ) - return( POLARSSL_ERR_MD_BAD_INPUT_DATA ); - - ctx->md_info->process_func( ctx->md_ctx, data ); - - return( 0 ); -} - -#endif /* POLARSSL_MD_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/md5.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/md5.c deleted file mode 100644 index f14ef7a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/md5.c +++ /dev/null @@ -1,630 +0,0 @@ -/* - * RFC 1321 compliant MD5 implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The MD5 algorithm was designed by Ron Rivest in 1991. - * - * http://www.ietf.org/rfc/rfc1321.txt - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_MD5_C) - -#include "polarssl/md5.h" - -#if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if !defined(POLARSSL_MD5_ALT) - -/* - * 32-bit integer manipulation macros (little endian) - */ -#ifndef GET_UINT32_LE -#define GET_UINT32_LE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] ) \ - | ( (uint32_t) (b)[(i) + 1] << 8 ) \ - | ( (uint32_t) (b)[(i) + 2] << 16 ) \ - | ( (uint32_t) (b)[(i) + 3] << 24 ); \ -} -#endif - -#ifndef PUT_UINT32_LE -#define PUT_UINT32_LE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) >> 24 ); \ -} -#endif - -SSL_ROM_TEXT_SECTION -void md5_init( md5_context *ctx ) -{ - memset( ctx, 0, sizeof( md5_context ) ); -} - -SSL_ROM_TEXT_SECTION -void md5_free( md5_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( md5_context ) ); -} - -/* - * MD5 context setup - */ -SSL_ROM_TEXT_SECTION -void md5_starts( md5_context *ctx ) -{ - ctx->total[0] = 0; - ctx->total[1] = 0; - - ctx->state[0] = 0x67452301; - ctx->state[1] = 0xEFCDAB89; - ctx->state[2] = 0x98BADCFE; - ctx->state[3] = 0x10325476; -} - -SSL_ROM_TEXT_SECTION -void md5_process( md5_context *ctx, const unsigned char data[64] ) -{ - uint32_t X[16], A, B, C, D; - - GET_UINT32_LE( X[ 0], data, 0 ); - GET_UINT32_LE( X[ 1], data, 4 ); - GET_UINT32_LE( X[ 2], data, 8 ); - GET_UINT32_LE( X[ 3], data, 12 ); - GET_UINT32_LE( X[ 4], data, 16 ); - GET_UINT32_LE( X[ 5], data, 20 ); - GET_UINT32_LE( X[ 6], data, 24 ); - GET_UINT32_LE( X[ 7], data, 28 ); - GET_UINT32_LE( X[ 8], data, 32 ); - GET_UINT32_LE( X[ 9], data, 36 ); - GET_UINT32_LE( X[10], data, 40 ); - GET_UINT32_LE( X[11], data, 44 ); - GET_UINT32_LE( X[12], data, 48 ); - GET_UINT32_LE( X[13], data, 52 ); - GET_UINT32_LE( X[14], data, 56 ); - GET_UINT32_LE( X[15], data, 60 ); - -#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) - -#define P(a,b,c,d,k,s,t) \ -{ \ - a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \ -} - - A = ctx->state[0]; - B = ctx->state[1]; - C = ctx->state[2]; - D = ctx->state[3]; - -#define F(x,y,z) (z ^ (x & (y ^ z))) - - P( A, B, C, D, 0, 7, 0xD76AA478 ); - P( D, A, B, C, 1, 12, 0xE8C7B756 ); - P( C, D, A, B, 2, 17, 0x242070DB ); - P( B, C, D, A, 3, 22, 0xC1BDCEEE ); - P( A, B, C, D, 4, 7, 0xF57C0FAF ); - P( D, A, B, C, 5, 12, 0x4787C62A ); - P( C, D, A, B, 6, 17, 0xA8304613 ); - P( B, C, D, A, 7, 22, 0xFD469501 ); - P( A, B, C, D, 8, 7, 0x698098D8 ); - P( D, A, B, C, 9, 12, 0x8B44F7AF ); - P( C, D, A, B, 10, 17, 0xFFFF5BB1 ); - P( B, C, D, A, 11, 22, 0x895CD7BE ); - P( A, B, C, D, 12, 7, 0x6B901122 ); - P( D, A, B, C, 13, 12, 0xFD987193 ); - P( C, D, A, B, 14, 17, 0xA679438E ); - P( B, C, D, A, 15, 22, 0x49B40821 ); - -#undef F - -#define F(x,y,z) (y ^ (z & (x ^ y))) - - P( A, B, C, D, 1, 5, 0xF61E2562 ); - P( D, A, B, C, 6, 9, 0xC040B340 ); - P( C, D, A, B, 11, 14, 0x265E5A51 ); - P( B, C, D, A, 0, 20, 0xE9B6C7AA ); - P( A, B, C, D, 5, 5, 0xD62F105D ); - P( D, A, B, C, 10, 9, 0x02441453 ); - P( C, D, A, B, 15, 14, 0xD8A1E681 ); - P( B, C, D, A, 4, 20, 0xE7D3FBC8 ); - P( A, B, C, D, 9, 5, 0x21E1CDE6 ); - P( D, A, B, C, 14, 9, 0xC33707D6 ); - P( C, D, A, B, 3, 14, 0xF4D50D87 ); - P( B, C, D, A, 8, 20, 0x455A14ED ); - P( A, B, C, D, 13, 5, 0xA9E3E905 ); - P( D, A, B, C, 2, 9, 0xFCEFA3F8 ); - P( C, D, A, B, 7, 14, 0x676F02D9 ); - P( B, C, D, A, 12, 20, 0x8D2A4C8A ); - -#undef F - -#define F(x,y,z) (x ^ y ^ z) - - P( A, B, C, D, 5, 4, 0xFFFA3942 ); - P( D, A, B, C, 8, 11, 0x8771F681 ); - P( C, D, A, B, 11, 16, 0x6D9D6122 ); - P( B, C, D, A, 14, 23, 0xFDE5380C ); - P( A, B, C, D, 1, 4, 0xA4BEEA44 ); - P( D, A, B, C, 4, 11, 0x4BDECFA9 ); - P( C, D, A, B, 7, 16, 0xF6BB4B60 ); - P( B, C, D, A, 10, 23, 0xBEBFBC70 ); - P( A, B, C, D, 13, 4, 0x289B7EC6 ); - P( D, A, B, C, 0, 11, 0xEAA127FA ); - P( C, D, A, B, 3, 16, 0xD4EF3085 ); - P( B, C, D, A, 6, 23, 0x04881D05 ); - P( A, B, C, D, 9, 4, 0xD9D4D039 ); - P( D, A, B, C, 12, 11, 0xE6DB99E5 ); - P( C, D, A, B, 15, 16, 0x1FA27CF8 ); - P( B, C, D, A, 2, 23, 0xC4AC5665 ); - -#undef F - -#define F(x,y,z) (y ^ (x | ~z)) - - P( A, B, C, D, 0, 6, 0xF4292244 ); - P( D, A, B, C, 7, 10, 0x432AFF97 ); - P( C, D, A, B, 14, 15, 0xAB9423A7 ); - P( B, C, D, A, 5, 21, 0xFC93A039 ); - P( A, B, C, D, 12, 6, 0x655B59C3 ); - P( D, A, B, C, 3, 10, 0x8F0CCC92 ); - P( C, D, A, B, 10, 15, 0xFFEFF47D ); - P( B, C, D, A, 1, 21, 0x85845DD1 ); - P( A, B, C, D, 8, 6, 0x6FA87E4F ); - P( D, A, B, C, 15, 10, 0xFE2CE6E0 ); - P( C, D, A, B, 6, 15, 0xA3014314 ); - P( B, C, D, A, 13, 21, 0x4E0811A1 ); - P( A, B, C, D, 4, 6, 0xF7537E82 ); - P( D, A, B, C, 11, 10, 0xBD3AF235 ); - P( C, D, A, B, 2, 15, 0x2AD7D2BB ); - P( B, C, D, A, 9, 21, 0xEB86D391 ); - -#undef F - - ctx->state[0] += A; - ctx->state[1] += B; - ctx->state[2] += C; - ctx->state[3] += D; -} - -/* - * MD5 process buffer - */ -SSL_ROM_TEXT_SECTION -void md5_update( md5_context *ctx, const unsigned char *input, size_t ilen ) -{ - size_t fill; - uint32_t left; - - if( ilen == 0 ) - return; - - left = ctx->total[0] & 0x3F; - fill = 64 - left; - - ctx->total[0] += (uint32_t) ilen; - ctx->total[0] &= 0xFFFFFFFF; - - if( ctx->total[0] < (uint32_t) ilen ) - ctx->total[1]++; - - if( left && ilen >= fill ) - { - memcpy( (void *) (ctx->buffer + left), input, fill ); - md5_process( ctx, ctx->buffer ); - input += fill; - ilen -= fill; - left = 0; - } - - while( ilen >= 64 ) - { - md5_process( ctx, input ); - input += 64; - ilen -= 64; - } - - if( ilen > 0 ) - { - memcpy( (void *) (ctx->buffer + left), input, ilen ); - } -} - -SSL_ROM_DATA_SECTION -static const unsigned char md5_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* - * MD5 final digest - */ -SSL_ROM_TEXT_SECTION -void md5_finish( md5_context *ctx, unsigned char output[16] ) -{ - uint32_t last, padn; - uint32_t high, low; - unsigned char msglen[8]; - - high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); - low = ( ctx->total[0] << 3 ); - - PUT_UINT32_LE( low, msglen, 0 ); - PUT_UINT32_LE( high, msglen, 4 ); - - last = ctx->total[0] & 0x3F; - padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); - - md5_update( ctx, md5_padding, padn ); - md5_update( ctx, msglen, 8 ); - - PUT_UINT32_LE( ctx->state[0], output, 0 ); - PUT_UINT32_LE( ctx->state[1], output, 4 ); - PUT_UINT32_LE( ctx->state[2], output, 8 ); - PUT_UINT32_LE( ctx->state[3], output, 12 ); -} - -#endif /* !POLARSSL_MD5_ALT */ - -/* - * output = MD5( input buffer ) - */ -SSL_ROM_TEXT_SECTION -void md5( const unsigned char *input, size_t ilen, unsigned char output[16] ) -{ - md5_context ctx; - - md5_init( &ctx ); - md5_starts( &ctx ); - md5_update( &ctx, input, ilen ); - md5_finish( &ctx, output ); - md5_free( &ctx ); -} - -#if defined(POLARSSL_FS_IO) -/* - * output = MD5( file contents ) - */ -SSL_ROM_TEXT_SECTION -int md5_file( const char *path, unsigned char output[16] ) -{ - FILE *f; - size_t n; - md5_context ctx; - unsigned char buf[1024]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_MD5_FILE_IO_ERROR ); - - md5_init( &ctx ); - md5_starts( &ctx ); - - while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) - md5_update( &ctx, buf, n ); - - md5_finish( &ctx, output ); - md5_free( &ctx ); - - if( ferror( f ) != 0 ) - { - fclose( f ); - return( POLARSSL_ERR_MD5_FILE_IO_ERROR ); - } - - fclose( f ); - return( 0 ); -} -#endif /* POLARSSL_FS_IO */ - -/* - * MD5 HMAC context setup - */ -SSL_ROM_TEXT_SECTION -void md5_hmac_starts( md5_context *ctx, const unsigned char *key, - size_t keylen ) -{ - size_t i; - unsigned char sum[16]; - - if( keylen > 64 ) - { - md5( key, keylen, sum ); - keylen = 16; - key = sum; - } - - memset( ctx->ipad, 0x36, 64 ); - memset( ctx->opad, 0x5C, 64 ); - - for( i = 0; i < keylen; i++ ) - { - ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] ); - ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); - } - - md5_starts( ctx ); - md5_update( ctx, ctx->ipad, 64 ); - - polarssl_zeroize( sum, sizeof( sum ) ); -} - -/* - * MD5 HMAC process buffer - */ -SSL_ROM_TEXT_SECTION -void md5_hmac_update( md5_context *ctx, const unsigned char *input, - size_t ilen ) -{ - md5_update( ctx, input, ilen ); -} - -/* - * MD5 HMAC final digest - */ -SSL_ROM_TEXT_SECTION -void md5_hmac_finish( md5_context *ctx, unsigned char output[16] ) -{ - unsigned char tmpbuf[16]; - - md5_finish( ctx, tmpbuf ); - md5_starts( ctx ); - md5_update( ctx, ctx->opad, 64 ); - md5_update( ctx, tmpbuf, 16 ); - md5_finish( ctx, output ); - - polarssl_zeroize( tmpbuf, sizeof( tmpbuf ) ); -} - -/* - * MD5 HMAC context reset - */ -SSL_ROM_TEXT_SECTION -void md5_hmac_reset( md5_context *ctx ) -{ - md5_starts( ctx ); - md5_update( ctx, ctx->ipad, 64 ); -} - -/* - * output = HMAC-MD5( hmac key, input buffer ) - */ -SSL_ROM_TEXT_SECTION -void md5_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[16] ) -{ - md5_context ctx; - - md5_init( &ctx ); - md5_hmac_starts( &ctx, key, keylen ); - md5_hmac_update( &ctx, input, ilen ); - md5_hmac_finish( &ctx, output ); - md5_free( &ctx ); -} - -#if defined(POLARSSL_SELF_TEST) -/* - * RFC 1321 test vectors - */ -static unsigned char md5_test_buf[7][81] = -{ - { "" }, - { "a" }, - { "abc" }, - { "message digest" }, - { "abcdefghijklmnopqrstuvwxyz" }, - { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, - { "12345678901234567890123456789012345678901234567890123456789012" \ - "345678901234567890" } -}; - -static const int md5_test_buflen[7] = -{ - 0, 1, 3, 14, 26, 62, 80 -}; - -static const unsigned char md5_test_sum[7][16] = -{ - { 0xD4, 0x1D, 0x8C, 0xD9, 0x8F, 0x00, 0xB2, 0x04, - 0xE9, 0x80, 0x09, 0x98, 0xEC, 0xF8, 0x42, 0x7E }, - { 0x0C, 0xC1, 0x75, 0xB9, 0xC0, 0xF1, 0xB6, 0xA8, - 0x31, 0xC3, 0x99, 0xE2, 0x69, 0x77, 0x26, 0x61 }, - { 0x90, 0x01, 0x50, 0x98, 0x3C, 0xD2, 0x4F, 0xB0, - 0xD6, 0x96, 0x3F, 0x7D, 0x28, 0xE1, 0x7F, 0x72 }, - { 0xF9, 0x6B, 0x69, 0x7D, 0x7C, 0xB7, 0x93, 0x8D, - 0x52, 0x5A, 0x2F, 0x31, 0xAA, 0xF1, 0x61, 0xD0 }, - { 0xC3, 0xFC, 0xD3, 0xD7, 0x61, 0x92, 0xE4, 0x00, - 0x7D, 0xFB, 0x49, 0x6C, 0xCA, 0x67, 0xE1, 0x3B }, - { 0xD1, 0x74, 0xAB, 0x98, 0xD2, 0x77, 0xD9, 0xF5, - 0xA5, 0x61, 0x1C, 0x2C, 0x9F, 0x41, 0x9D, 0x9F }, - { 0x57, 0xED, 0xF4, 0xA2, 0x2B, 0xE3, 0xC9, 0x55, - 0xAC, 0x49, 0xDA, 0x2E, 0x21, 0x07, 0xB6, 0x7A } -}; - -/* - * RFC 2202 test vectors - */ -static unsigned char md5_hmac_test_key[7][26] = -{ - { "\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B" }, - { "Jefe" }, - { "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" }, - { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10" - "\x11\x12\x13\x14\x15\x16\x17\x18\x19" }, - { "\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C" }, - { "" }, /* 0xAA 80 times */ - { "" } -}; - -static const int md5_hmac_test_keylen[7] = -{ - 16, 4, 16, 25, 16, 80, 80 -}; - -static unsigned char md5_hmac_test_buf[7][74] = -{ - { "Hi There" }, - { "what do ya want for nothing?" }, - { "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" }, - { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" }, - { "Test With Truncation" }, - { "Test Using Larger Than Block-Size Key - Hash Key First" }, - { "Test Using Larger Than Block-Size Key and Larger" - " Than One Block-Size Data" } -}; - -static const int md5_hmac_test_buflen[7] = -{ - 8, 28, 50, 50, 20, 54, 73 -}; - -static const unsigned char md5_hmac_test_sum[7][16] = -{ - { 0x92, 0x94, 0x72, 0x7A, 0x36, 0x38, 0xBB, 0x1C, - 0x13, 0xF4, 0x8E, 0xF8, 0x15, 0x8B, 0xFC, 0x9D }, - { 0x75, 0x0C, 0x78, 0x3E, 0x6A, 0xB0, 0xB5, 0x03, - 0xEA, 0xA8, 0x6E, 0x31, 0x0A, 0x5D, 0xB7, 0x38 }, - { 0x56, 0xBE, 0x34, 0x52, 0x1D, 0x14, 0x4C, 0x88, - 0xDB, 0xB8, 0xC7, 0x33, 0xF0, 0xE8, 0xB3, 0xF6 }, - { 0x69, 0x7E, 0xAF, 0x0A, 0xCA, 0x3A, 0x3A, 0xEA, - 0x3A, 0x75, 0x16, 0x47, 0x46, 0xFF, 0xAA, 0x79 }, - { 0x56, 0x46, 0x1E, 0xF2, 0x34, 0x2E, 0xDC, 0x00, - 0xF9, 0xBA, 0xB9, 0x95 }, - { 0x6B, 0x1A, 0xB7, 0xFE, 0x4B, 0xD7, 0xBF, 0x8F, - 0x0B, 0x62, 0xE6, 0xCE, 0x61, 0xB9, 0xD0, 0xCD }, - { 0x6F, 0x63, 0x0F, 0xAD, 0x67, 0xCD, 0xA0, 0xEE, - 0x1F, 0xB1, 0xF5, 0x62, 0xDB, 0x3A, 0xA5, 0x3E } -}; - -/* - * Checkup routine - */ -int md5_self_test( int verbose ) -{ - int i, buflen; - unsigned char buf[1024]; - unsigned char md5sum[16]; - md5_context ctx; - - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " MD5 test #%d: ", i + 1 ); - - md5( md5_test_buf[i], md5_test_buflen[i], md5sum ); - - if( memcmp( md5sum, md5_test_sum[i], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " HMAC-MD5 test #%d: ", i + 1 ); - - if( i == 5 || i == 6 ) - { - memset( buf, '\xAA', buflen = 80 ); - md5_hmac_starts( &ctx, buf, buflen ); - } - else - md5_hmac_starts( &ctx, md5_hmac_test_key[i], - md5_hmac_test_keylen[i] ); - - md5_hmac_update( &ctx, md5_hmac_test_buf[i], - md5_hmac_test_buflen[i] ); - - md5_hmac_finish( &ctx, md5sum ); - - buflen = ( i == 4 ) ? 12 : 16; - - if( memcmp( md5sum, md5_hmac_test_sum[i], buflen ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_MD5_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/md_wrap.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/md_wrap.c deleted file mode 100644 index c30a023..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/md_wrap.c +++ /dev/null @@ -1,1072 +0,0 @@ -/** - * \file md_wrap.c - - * \brief Generic message digest wrapper for PolarSSL - * - * \author Adriaan de Jong - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_MD_C) - -#include "polarssl/md_wrap.h" - -#if defined(POLARSSL_MD2_C) -#include "polarssl/md2.h" -#endif - -#if defined(POLARSSL_MD4_C) -#include "polarssl/md4.h" -#endif - -#if defined(POLARSSL_MD5_C) -#include "polarssl/md5.h" -#endif - -#if defined(POLARSSL_RIPEMD160_C) -#include "polarssl/ripemd160.h" -#endif - -#if defined(POLARSSL_SHA1_C) -#include "polarssl/sha1.h" -#endif - -#if defined(POLARSSL_SHA256_C) -#include "polarssl/sha256.h" -#endif - -#if defined(POLARSSL_SHA512_C) -#include "polarssl/sha512.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if defined(POLARSSL_MD2_C) - -SSL_ROM_TEXT_SECTION -static void md2_starts_wrap( void *ctx ) -{ - md2_starts( (md2_context *) ctx ); -} - -SSL_ROM_TEXT_SECTION -static void md2_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - md2_update( (md2_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void md2_finish_wrap( void *ctx, unsigned char *output ) -{ - md2_finish( (md2_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static int md2_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return md2_file( path, output ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -SSL_ROM_TEXT_SECTION -static void md2_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - md2_hmac_starts( (md2_context *) ctx, key, keylen ); -} - -SSL_ROM_TEXT_SECTION -static void md2_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - md2_hmac_update( (md2_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void md2_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - md2_hmac_finish( (md2_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static void md2_hmac_reset_wrap( void *ctx ) -{ - md2_hmac_reset( (md2_context *) ctx ); -} - -SSL_ROM_TEXT_SECTION -static void * md2_ctx_alloc( void ) -{ - return polarssl_malloc( sizeof( md2_context ) ); -} - -SSL_ROM_TEXT_SECTION -static void md2_ctx_free( void *ctx ) -{ - polarssl_zeroize( ctx, sizeof( md2_context ) ); - polarssl_free( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void md2_process_wrap( void *ctx, const unsigned char *data ) -{ - ((void) data); - - md2_process( (md2_context *) ctx ); -} - -SSL_ROM_DATA_SECTION -const md_info_t md2_info = { - POLARSSL_MD_MD2, - "MD2", - 16, - md2_starts_wrap, - md2_update_wrap, - md2_finish_wrap, - md2, - md2_file_wrap, - md2_hmac_starts_wrap, - md2_hmac_update_wrap, - md2_hmac_finish_wrap, - md2_hmac_reset_wrap, - md2_hmac, - md2_ctx_alloc, - md2_ctx_free, - md2_process_wrap, -}; - -#endif /* POLARSSL_MD2_C */ - -#if defined(POLARSSL_MD4_C) - -SSL_ROM_TEXT_SECTION -static void md4_starts_wrap( void *ctx ) -{ - md4_starts( (md4_context *) ctx ); -} - -SSL_ROM_TEXT_SECTION -static void md4_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - md4_update( (md4_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void md4_finish_wrap( void *ctx, unsigned char *output ) -{ - md4_finish( (md4_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static int md4_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return md4_file( path, output ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -SSL_ROM_TEXT_SECTION -static void md4_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - md4_hmac_starts( (md4_context *) ctx, key, keylen ); -} - -SSL_ROM_TEXT_SECTION -static void md4_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - md4_hmac_update( (md4_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void md4_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - md4_hmac_finish( (md4_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static void md4_hmac_reset_wrap( void *ctx ) -{ - md4_hmac_reset( (md4_context *) ctx ); -} - -SSL_ROM_TEXT_SECTION -static void *md4_ctx_alloc( void ) -{ - return polarssl_malloc( sizeof( md4_context ) ); -} - -SSL_ROM_TEXT_SECTION -static void md4_ctx_free( void *ctx ) -{ - polarssl_zeroize( ctx, sizeof( md4_context ) ); - polarssl_free( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void md4_process_wrap( void *ctx, const unsigned char *data ) -{ - md4_process( (md4_context *) ctx, data ); -} - -SSL_ROM_DATA_SECTION -const md_info_t md4_info = { - POLARSSL_MD_MD4, - "MD4", - 16, - md4_starts_wrap, - md4_update_wrap, - md4_finish_wrap, - md4, - md4_file_wrap, - md4_hmac_starts_wrap, - md4_hmac_update_wrap, - md4_hmac_finish_wrap, - md4_hmac_reset_wrap, - md4_hmac, - md4_ctx_alloc, - md4_ctx_free, - md4_process_wrap, -}; - -#endif /* POLARSSL_MD4_C */ - -#if defined(POLARSSL_MD5_C) - -SSL_ROM_TEXT_SECTION -static void md5_starts_wrap( void *ctx ) -{ - md5_starts( (md5_context *) ctx ); -} - -SSL_ROM_TEXT_SECTION -static void md5_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - md5_update( (md5_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void md5_finish_wrap( void *ctx, unsigned char *output ) -{ - md5_finish( (md5_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static int md5_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return md5_file( path, output ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -SSL_ROM_TEXT_SECTION -static void md5_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - md5_hmac_starts( (md5_context *) ctx, key, keylen ); -} - -SSL_ROM_TEXT_SECTION -static void md5_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - md5_hmac_update( (md5_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void md5_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - md5_hmac_finish( (md5_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static void md5_hmac_reset_wrap( void *ctx ) -{ - md5_hmac_reset( (md5_context *) ctx ); -} - -SSL_ROM_TEXT_SECTION -static void * md5_ctx_alloc( void ) -{ - return polarssl_malloc( sizeof( md5_context ) ); -} - -SSL_ROM_TEXT_SECTION -static void md5_ctx_free( void *ctx ) -{ - polarssl_zeroize( ctx, sizeof( md5_context ) ); - polarssl_free( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void md5_process_wrap( void *ctx, const unsigned char *data ) -{ - md5_process( (md5_context *) ctx, data ); -} - -SSL_ROM_DATA_SECTION -const md_info_t md5_info = { - POLARSSL_MD_MD5, - "MD5", - 16, - md5_starts_wrap, - md5_update_wrap, - md5_finish_wrap, - md5, - md5_file_wrap, - md5_hmac_starts_wrap, - md5_hmac_update_wrap, - md5_hmac_finish_wrap, - md5_hmac_reset_wrap, - md5_hmac, - md5_ctx_alloc, - md5_ctx_free, - md5_process_wrap, -}; - -#endif /* POLARSSL_MD5_C */ - -#if defined(POLARSSL_RIPEMD160_C) - -SSL_ROM_TEXT_SECTION -static void ripemd160_starts_wrap( void *ctx ) -{ - ripemd160_starts( (ripemd160_context *) ctx ); -} - -SSL_ROM_TEXT_SECTION -static void ripemd160_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - ripemd160_update( (ripemd160_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void ripemd160_finish_wrap( void *ctx, unsigned char *output ) -{ - ripemd160_finish( (ripemd160_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static int ripemd160_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return ripemd160_file( path, output ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -SSL_ROM_TEXT_SECTION -static void ripemd160_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - ripemd160_hmac_starts( (ripemd160_context *) ctx, key, keylen ); -} - -SSL_ROM_TEXT_SECTION -static void ripemd160_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - ripemd160_hmac_update( (ripemd160_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void ripemd160_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - ripemd160_hmac_finish( (ripemd160_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static void ripemd160_hmac_reset_wrap( void *ctx ) -{ - ripemd160_hmac_reset( (ripemd160_context *) ctx ); -} - -SSL_ROM_TEXT_SECTION -static void * ripemd160_ctx_alloc( void ) -{ - ripemd160_context *ctx; - ctx = (ripemd160_context *) polarssl_malloc( sizeof( ripemd160_context ) ); - - if( ctx == NULL ) - return( NULL ); - - ripemd160_init( ctx ); - - return( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void ripemd160_ctx_free( void *ctx ) -{ - ripemd160_free( (ripemd160_context *) ctx ); - polarssl_free( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void ripemd160_process_wrap( void *ctx, const unsigned char *data ) -{ - ripemd160_process( (ripemd160_context *) ctx, data ); -} - -SSL_ROM_DATA_SECTION -const md_info_t ripemd160_info = { - POLARSSL_MD_RIPEMD160, - "RIPEMD160", - 20, - ripemd160_starts_wrap, - ripemd160_update_wrap, - ripemd160_finish_wrap, - ripemd160, - ripemd160_file_wrap, - ripemd160_hmac_starts_wrap, - ripemd160_hmac_update_wrap, - ripemd160_hmac_finish_wrap, - ripemd160_hmac_reset_wrap, - ripemd160_hmac, - ripemd160_ctx_alloc, - ripemd160_ctx_free, - ripemd160_process_wrap, -}; - -#endif /* POLARSSL_RIPEMD160_C */ - -#if defined(POLARSSL_SHA1_C) - -SSL_ROM_TEXT_SECTION -static void sha1_starts_wrap( void *ctx ) -{ - sha1_starts( (sha1_context *) ctx ); -} - -SSL_ROM_TEXT_SECTION -static void sha1_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha1_update( (sha1_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void sha1_finish_wrap( void *ctx, unsigned char *output ) -{ - sha1_finish( (sha1_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static int sha1_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return sha1_file( path, output ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -SSL_ROM_TEXT_SECTION -static void sha1_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - sha1_hmac_starts( (sha1_context *) ctx, key, keylen ); -} - -SSL_ROM_TEXT_SECTION -static void sha1_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha1_hmac_update( (sha1_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void sha1_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - sha1_hmac_finish( (sha1_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static void sha1_hmac_reset_wrap( void *ctx ) -{ - sha1_hmac_reset( (sha1_context *) ctx ); -} - -SSL_ROM_TEXT_SECTION -static void * sha1_ctx_alloc( void ) -{ - sha1_context *ctx; - ctx = (sha1_context *) polarssl_malloc( sizeof( sha1_context ) ); - - if( ctx == NULL ) - return( NULL ); - - sha1_init( ctx ); - - return( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void sha1_ctx_free( void *ctx ) -{ - sha1_free( (sha1_context *) ctx ); - polarssl_free( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void sha1_process_wrap( void *ctx, const unsigned char *data ) -{ - sha1_process( (sha1_context *) ctx, data ); -} - -SSL_ROM_DATA_SECTION -const md_info_t sha1_info = { - POLARSSL_MD_SHA1, - "SHA1", - 20, - sha1_starts_wrap, - sha1_update_wrap, - sha1_finish_wrap, - sha1, - sha1_file_wrap, - sha1_hmac_starts_wrap, - sha1_hmac_update_wrap, - sha1_hmac_finish_wrap, - sha1_hmac_reset_wrap, - sha1_hmac, - sha1_ctx_alloc, - sha1_ctx_free, - sha1_process_wrap, -}; - -#endif /* POLARSSL_SHA1_C */ - -/* - * Wrappers for generic message digests - */ -#if defined(POLARSSL_SHA256_C) - -SSL_ROM_TEXT_SECTION -static void sha224_starts_wrap( void *ctx ) -{ - sha256_starts( (sha256_context *) ctx, 1 ); -} - -SSL_ROM_TEXT_SECTION -static void sha224_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha256_update( (sha256_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void sha224_finish_wrap( void *ctx, unsigned char *output ) -{ - sha256_finish( (sha256_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static void sha224_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha256( input, ilen, output, 1 ); -} - -SSL_ROM_TEXT_SECTION -static int sha224_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return sha256_file( path, output, 1 ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -SSL_ROM_TEXT_SECTION -static void sha224_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - sha256_hmac_starts( (sha256_context *) ctx, key, keylen, 1 ); -} - -SSL_ROM_TEXT_SECTION -static void sha224_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha256_hmac_update( (sha256_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void sha224_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - sha256_hmac_finish( (sha256_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static void sha224_hmac_reset_wrap( void *ctx ) -{ - sha256_hmac_reset( (sha256_context *) ctx ); -} - -SSL_ROM_TEXT_SECTION -static void sha224_hmac_wrap( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha256_hmac( key, keylen, input, ilen, output, 1 ); -} - -SSL_ROM_TEXT_SECTION -static void * sha224_ctx_alloc( void ) -{ - return polarssl_malloc( sizeof( sha256_context ) ); -} - -SSL_ROM_TEXT_SECTION -static void sha224_ctx_free( void *ctx ) -{ - polarssl_zeroize( ctx, sizeof( sha256_context ) ); - polarssl_free( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void sha224_process_wrap( void *ctx, const unsigned char *data ) -{ - sha256_process( (sha256_context *) ctx, data ); -} - -SSL_ROM_DATA_SECTION -const md_info_t sha224_info = { - POLARSSL_MD_SHA224, - "SHA224", - 28, - sha224_starts_wrap, - sha224_update_wrap, - sha224_finish_wrap, - sha224_wrap, - sha224_file_wrap, - sha224_hmac_starts_wrap, - sha224_hmac_update_wrap, - sha224_hmac_finish_wrap, - sha224_hmac_reset_wrap, - sha224_hmac_wrap, - sha224_ctx_alloc, - sha224_ctx_free, - sha224_process_wrap, -}; - -SSL_ROM_TEXT_SECTION -static void sha256_starts_wrap( void *ctx ) -{ - sha256_starts( (sha256_context *) ctx, 0 ); -} - -SSL_ROM_TEXT_SECTION -static void sha256_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha256_update( (sha256_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void sha256_finish_wrap( void *ctx, unsigned char *output ) -{ - sha256_finish( (sha256_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static void sha256_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha256( input, ilen, output, 0 ); -} - -SSL_ROM_TEXT_SECTION -static int sha256_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return sha256_file( path, output, 0 ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -SSL_ROM_TEXT_SECTION -static void sha256_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - sha256_hmac_starts( (sha256_context *) ctx, key, keylen, 0 ); -} - -SSL_ROM_TEXT_SECTION -static void sha256_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha256_hmac_update( (sha256_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void sha256_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - sha256_hmac_finish( (sha256_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static void sha256_hmac_reset_wrap( void *ctx ) -{ - sha256_hmac_reset( (sha256_context *) ctx ); -} - -SSL_ROM_TEXT_SECTION -static void sha256_hmac_wrap( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha256_hmac( key, keylen, input, ilen, output, 0 ); -} - -SSL_ROM_TEXT_SECTION -static void * sha256_ctx_alloc( void ) -{ - sha256_context *ctx; - ctx = (sha256_context *) polarssl_malloc( sizeof( sha256_context ) ); - - if( ctx == NULL ) - return( NULL ); - - sha256_init( ctx ); - - return( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void sha256_ctx_free( void *ctx ) -{ - sha256_free( (sha256_context *) ctx ); - polarssl_free( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void sha256_process_wrap( void *ctx, const unsigned char *data ) -{ - sha256_process( (sha256_context *) ctx, data ); -} - -SSL_ROM_DATA_SECTION -const md_info_t sha256_info = { - POLARSSL_MD_SHA256, - "SHA256", - 32, - sha256_starts_wrap, - sha256_update_wrap, - sha256_finish_wrap, - sha256_wrap, - sha256_file_wrap, - sha256_hmac_starts_wrap, - sha256_hmac_update_wrap, - sha256_hmac_finish_wrap, - sha256_hmac_reset_wrap, - sha256_hmac_wrap, - sha256_ctx_alloc, - sha256_ctx_free, - sha256_process_wrap, -}; - -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - -SSL_ROM_TEXT_SECTION -static void sha384_starts_wrap( void *ctx ) -{ - sha512_starts( (sha512_context *) ctx, 1 ); -} - -SSL_ROM_TEXT_SECTION -static void sha384_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha512_update( (sha512_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void sha384_finish_wrap( void *ctx, unsigned char *output ) -{ - sha512_finish( (sha512_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static void sha384_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha512( input, ilen, output, 1 ); -} - -SSL_ROM_TEXT_SECTION -static int sha384_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return sha512_file( path, output, 1 ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -SSL_ROM_TEXT_SECTION -static void sha384_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - sha512_hmac_starts( (sha512_context *) ctx, key, keylen, 1 ); -} - -SSL_ROM_TEXT_SECTION -static void sha384_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha512_hmac_update( (sha512_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void sha384_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - sha512_hmac_finish( (sha512_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static void sha384_hmac_reset_wrap( void *ctx ) -{ - sha512_hmac_reset( (sha512_context *) ctx ); -} - -SSL_ROM_TEXT_SECTION -static void sha384_hmac_wrap( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha512_hmac( key, keylen, input, ilen, output, 1 ); -} - -SSL_ROM_TEXT_SECTION -static void * sha384_ctx_alloc( void ) -{ - return polarssl_malloc( sizeof( sha512_context ) ); -} - -SSL_ROM_TEXT_SECTION -static void sha384_ctx_free( void *ctx ) -{ - polarssl_zeroize( ctx, sizeof( sha512_context ) ); - polarssl_free( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void sha384_process_wrap( void *ctx, const unsigned char *data ) -{ - sha512_process( (sha512_context *) ctx, data ); -} - -SSL_ROM_DATA_SECTION -const md_info_t sha384_info = { - POLARSSL_MD_SHA384, - "SHA384", - 48, - sha384_starts_wrap, - sha384_update_wrap, - sha384_finish_wrap, - sha384_wrap, - sha384_file_wrap, - sha384_hmac_starts_wrap, - sha384_hmac_update_wrap, - sha384_hmac_finish_wrap, - sha384_hmac_reset_wrap, - sha384_hmac_wrap, - sha384_ctx_alloc, - sha384_ctx_free, - sha384_process_wrap, -}; - -SSL_ROM_TEXT_SECTION -static void sha512_starts_wrap( void *ctx ) -{ - sha512_starts( (sha512_context *) ctx, 0 ); -} - -SSL_ROM_TEXT_SECTION -static void sha512_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha512_update( (sha512_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void sha512_finish_wrap( void *ctx, unsigned char *output ) -{ - sha512_finish( (sha512_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static void sha512_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha512( input, ilen, output, 0 ); -} - -SSL_ROM_TEXT_SECTION -static int sha512_file_wrap( const char *path, unsigned char *output ) -{ -#if defined(POLARSSL_FS_IO) - return sha512_file( path, output, 0 ); -#else - ((void) path); - ((void) output); - return( POLARSSL_ERR_MD_FEATURE_UNAVAILABLE ); -#endif -} - -SSL_ROM_TEXT_SECTION -static void sha512_hmac_starts_wrap( void *ctx, const unsigned char *key, - size_t keylen ) -{ - sha512_hmac_starts( (sha512_context *) ctx, key, keylen, 0 ); -} - -SSL_ROM_TEXT_SECTION -static void sha512_hmac_update_wrap( void *ctx, const unsigned char *input, - size_t ilen ) -{ - sha512_hmac_update( (sha512_context *) ctx, input, ilen ); -} - -SSL_ROM_TEXT_SECTION -static void sha512_hmac_finish_wrap( void *ctx, unsigned char *output ) -{ - sha512_hmac_finish( (sha512_context *) ctx, output ); -} - -SSL_ROM_TEXT_SECTION -static void sha512_hmac_reset_wrap( void *ctx ) -{ - sha512_hmac_reset( (sha512_context *) ctx ); -} - -SSL_ROM_TEXT_SECTION -static void sha512_hmac_wrap( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - sha512_hmac( key, keylen, input, ilen, output, 0 ); -} - -SSL_ROM_TEXT_SECTION -static void * sha512_ctx_alloc( void ) -{ - sha512_context *ctx; - ctx = (sha512_context *) polarssl_malloc( sizeof( sha512_context ) ); - - if( ctx == NULL ) - return( NULL ); - - sha512_init( ctx ); - - return( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void sha512_ctx_free( void *ctx ) -{ - sha512_free( (sha512_context *) ctx ); - polarssl_free( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void sha512_process_wrap( void *ctx, const unsigned char *data ) -{ - sha512_process( (sha512_context *) ctx, data ); -} - -SSL_ROM_DATA_SECTION -const md_info_t sha512_info = { - POLARSSL_MD_SHA512, - "SHA512", - 64, - sha512_starts_wrap, - sha512_update_wrap, - sha512_finish_wrap, - sha512_wrap, - sha512_file_wrap, - sha512_hmac_starts_wrap, - sha512_hmac_update_wrap, - sha512_hmac_finish_wrap, - sha512_hmac_reset_wrap, - sha512_hmac_wrap, - sha512_ctx_alloc, - sha512_ctx_free, - sha512_process_wrap, -}; - -#endif /* POLARSSL_SHA512_C */ - -#endif /* POLARSSL_MD_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/oid.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/oid.c deleted file mode 100644 index 55e93c2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/oid.c +++ /dev/null @@ -1,695 +0,0 @@ -/** - * \file oid.c - * - * \brief Object Identifier (OID) database - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_OID_C) - -#include "polarssl/oid.h" -#include "polarssl/rsa.h" - -#if defined(POLARSSL_X509_USE_C) || defined(POLARSSL_X509_CREATE_C) -#include "polarssl/x509.h" -#endif - -#include - -/* - * Macro to automatically add the size of #define'd OIDs - */ -#define ADD_LEN(s) s, OID_SIZE(s) - -/* - * Macro to generate an internal function for oid_XXX_from_asn1() (used by - * the other functions) - */ -#define FN_OID_TYPED_FROM_ASN1( TYPE_T, NAME, LIST ) \ -SSL_ROM_TEXT_SECTION static const TYPE_T * oid_ ## NAME ## _from_asn1( const asn1_buf *oid ) \ -{ \ - const TYPE_T *p = LIST; \ - const oid_descriptor_t *cur = (const oid_descriptor_t *) p; \ - if( p == NULL || oid == NULL ) return( NULL ); \ - while( cur->asn1 != NULL ) { \ - if( cur->asn1_len == oid->len && \ - memcmp( cur->asn1, oid->p, oid->len ) == 0 ) { \ - return( p ); \ - } \ - p++; \ - cur = (const oid_descriptor_t *) p; \ - } \ - return( NULL ); \ -} - -/* - * Macro to generate a function for retrieving a single attribute from the - * descriptor of an oid_descriptor_t wrapper. - */ -#define FN_OID_GET_DESCRIPTOR_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \ -SSL_ROM_TEXT_SECTION int FN_NAME( const asn1_buf *oid, ATTR1_TYPE * ATTR1 ) \ -{ \ - const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \ - if( data == NULL ) return( POLARSSL_ERR_OID_NOT_FOUND ); \ - *ATTR1 = data->descriptor.ATTR1; \ - return( 0 ); \ -} - -/* - * Macro to generate a function for retrieving a single attribute from an - * oid_descriptor_t wrapper. - */ -#define FN_OID_GET_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \ -SSL_ROM_TEXT_SECTION int FN_NAME( const asn1_buf *oid, ATTR1_TYPE * ATTR1 ) \ -{ \ - const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \ - if( data == NULL ) return( POLARSSL_ERR_OID_NOT_FOUND ); \ - *ATTR1 = data->ATTR1; \ - return( 0 ); \ -} - -/* - * Macro to generate a function for retrieving two attributes from an - * oid_descriptor_t wrapper. - */ -#define FN_OID_GET_ATTR2(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1, \ - ATTR2_TYPE, ATTR2) \ -SSL_ROM_TEXT_SECTION int FN_NAME( const asn1_buf *oid, ATTR1_TYPE * ATTR1, ATTR2_TYPE * ATTR2 ) \ -{ \ - const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \ - if( data == NULL ) return( POLARSSL_ERR_OID_NOT_FOUND ); \ - *ATTR1 = data->ATTR1; \ - *ATTR2 = data->ATTR2; \ - return( 0 ); \ -} - -/* - * Macro to generate a function for retrieving the OID based on a single - * attribute from a oid_descriptor_t wrapper. - */ -#define FN_OID_GET_OID_BY_ATTR1(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1) \ -SSL_ROM_TEXT_SECTION int FN_NAME( ATTR1_TYPE ATTR1, const char **oid, size_t *olen ) \ -{ \ - const TYPE_T *cur = LIST; \ - while( cur->descriptor.asn1 != NULL ) { \ - if( cur->ATTR1 == ATTR1 ) { \ - *oid = cur->descriptor.asn1; \ - *olen = cur->descriptor.asn1_len; \ - return( 0 ); \ - } \ - cur++; \ - } \ - return( POLARSSL_ERR_OID_NOT_FOUND ); \ -} - -/* - * Macro to generate a function for retrieving the OID based on two - * attributes from a oid_descriptor_t wrapper. - */ -#define FN_OID_GET_OID_BY_ATTR2(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1, \ - ATTR2_TYPE, ATTR2) \ -SSL_ROM_TEXT_SECTION int FN_NAME( ATTR1_TYPE ATTR1, ATTR2_TYPE ATTR2, const char **oid , \ - size_t *olen ) \ -{ \ - const TYPE_T *cur = LIST; \ - while( cur->descriptor.asn1 != NULL ) { \ - if( cur->ATTR1 == ATTR1 && cur->ATTR2 == ATTR2 ) { \ - *oid = cur->descriptor.asn1; \ - *olen = cur->descriptor.asn1_len; \ - return( 0 ); \ - } \ - cur++; \ - } \ - return( POLARSSL_ERR_OID_NOT_FOUND ); \ -} - -/* - * For X520 attribute types - */ -typedef struct { - oid_descriptor_t descriptor; - const char *short_name; -} oid_x520_attr_t; - -SSL_ROM_DATA_SECTION -static const oid_x520_attr_t oid_x520_attr_type[] = -{ - { - { ADD_LEN( OID_AT_CN ), "id-at-commonName", "Common Name" }, - "CN", - }, - { - { ADD_LEN( OID_AT_COUNTRY ), "id-at-countryName", "Country" }, - "C", - }, - { - { ADD_LEN( OID_AT_LOCALITY ), "id-at-locality", "Locality" }, - "L", - }, - { - { ADD_LEN( OID_AT_STATE ), "id-at-state", "State" }, - "ST", - }, - { - { ADD_LEN( OID_AT_ORGANIZATION ),"id-at-organizationName", "Organization" }, - "O", - }, - { - { ADD_LEN( OID_AT_ORG_UNIT ), "id-at-organizationalUnitName", "Org Unit" }, - "OU", - }, - { - { ADD_LEN( OID_PKCS9_EMAIL ), "emailAddress", "E-mail address" }, - "emailAddress", - }, - { - { ADD_LEN( OID_AT_SERIAL_NUMBER ),"id-at-serialNumber", "Serial number" }, - "serialNumber", - }, - { - { ADD_LEN( OID_AT_POSTAL_ADDRESS ),"id-at-postalAddress", "Postal address" }, - "postalAddress", - }, - { - { ADD_LEN( OID_AT_POSTAL_CODE ), "id-at-postalCode", "Postal code" }, - "postalCode", - }, - { - { ADD_LEN( OID_AT_SUR_NAME ), "id-at-surName", "Surname" }, - "SN", - }, - { - { ADD_LEN( OID_AT_GIVEN_NAME ), "id-at-givenName", "Given name" }, - "GN", - }, - { - { ADD_LEN( OID_AT_INITIALS ), "id-at-initials", "Initials" }, - "initials", - }, - { - { ADD_LEN( OID_AT_GENERATION_QUALIFIER ), "id-at-generationQualifier", "Generation qualifier" }, - "generationQualifier", - }, - { - { ADD_LEN( OID_AT_TITLE ), "id-at-title", "Title" }, - "title", - }, - { - { ADD_LEN( OID_AT_DN_QUALIFIER ),"id-at-dnQualifier", "Distinguished Name qualifier" }, - "dnQualifier", - }, - { - { ADD_LEN( OID_AT_PSEUDONYM ), "id-at-pseudonym", "Pseudonym" }, - "pseudonym", - }, - { - { ADD_LEN( OID_DOMAIN_COMPONENT ), "id-domainComponent", "Domain component" }, - "DC", - }, - { - { NULL, 0, NULL, NULL }, - NULL, - } -}; - -FN_OID_TYPED_FROM_ASN1(oid_x520_attr_t, x520_attr, oid_x520_attr_type); -FN_OID_GET_ATTR1(oid_get_attr_short_name, oid_x520_attr_t, x520_attr, const char *, short_name); - -#if defined(POLARSSL_X509_USE_C) || defined(POLARSSL_X509_CREATE_C) -/* - * For X509 extensions - */ -typedef struct { - oid_descriptor_t descriptor; - int ext_type; -} oid_x509_ext_t; - -SSL_ROM_DATA_SECTION -static const oid_x509_ext_t oid_x509_ext[] = -{ - { - { ADD_LEN( OID_BASIC_CONSTRAINTS ), "id-ce-basicConstraints", "Basic Constraints" }, - EXT_BASIC_CONSTRAINTS, - }, - { - { ADD_LEN( OID_KEY_USAGE ), "id-ce-keyUsage", "Key Usage" }, - EXT_KEY_USAGE, - }, - { - { ADD_LEN( OID_EXTENDED_KEY_USAGE ), "id-ce-keyUsage", "Extended Key Usage" }, - EXT_EXTENDED_KEY_USAGE, - }, - { - { ADD_LEN( OID_SUBJECT_ALT_NAME ), "id-ce-subjectAltName", "Subject Alt Name" }, - EXT_SUBJECT_ALT_NAME, - }, - { - { ADD_LEN( OID_NS_CERT_TYPE ), "id-netscape-certtype", "Netscape Certificate Type" }, - EXT_NS_CERT_TYPE, - }, - { - { NULL, 0, NULL, NULL }, - 0, - }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_x509_ext_t, x509_ext, oid_x509_ext); -FN_OID_GET_ATTR1(oid_get_x509_ext_type, oid_x509_ext_t, x509_ext, int, ext_type); - -SSL_ROM_DATA_SECTION -static const oid_descriptor_t oid_ext_key_usage[] = -{ - { ADD_LEN( OID_SERVER_AUTH ), "id-kp-serverAuth", "TLS Web Server Authentication" }, - { ADD_LEN( OID_CLIENT_AUTH ), "id-kp-clientAuth", "TLS Web Client Authentication" }, - { ADD_LEN( OID_CODE_SIGNING ), "id-kp-codeSigning", "Code Signing" }, - { ADD_LEN( OID_EMAIL_PROTECTION ), "id-kp-emailProtection", "E-mail Protection" }, - { ADD_LEN( OID_TIME_STAMPING ), "id-kp-timeStamping", "Time Stamping" }, - { ADD_LEN( OID_OCSP_SIGNING ), "id-kp-OCSPSigning", "OCSP Signing" }, - { NULL, 0, NULL, NULL }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_descriptor_t, ext_key_usage, oid_ext_key_usage); -FN_OID_GET_ATTR1(oid_get_extended_key_usage, oid_descriptor_t, ext_key_usage, const char *, description); -#endif /* POLARSSL_X509_USE_C || POLARSSL_X509_CREATE_C */ - -#if defined(POLARSSL_MD_C) -/* - * For SignatureAlgorithmIdentifier - */ -typedef struct { - oid_descriptor_t descriptor; - md_type_t md_alg; - pk_type_t pk_alg; -} oid_sig_alg_t; - -SSL_ROM_DATA_SECTION -static const oid_sig_alg_t oid_sig_alg[] = -{ - { - { ADD_LEN( OID_PKCS1_MD2 ), "md2WithRSAEncryption", "RSA with MD2" }, - POLARSSL_MD_MD2, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_PKCS1_MD4 ), "md4WithRSAEncryption", "RSA with MD4" }, - POLARSSL_MD_MD4, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_PKCS1_MD5 ), "md5WithRSAEncryption", "RSA with MD5" }, - POLARSSL_MD_MD5, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_PKCS1_SHA1 ), "sha-1WithRSAEncryption", "RSA with SHA1" }, - POLARSSL_MD_SHA1, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_PKCS1_SHA224 ), "sha224WithRSAEncryption", "RSA with SHA-224" }, - POLARSSL_MD_SHA224, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_PKCS1_SHA256 ), "sha256WithRSAEncryption", "RSA with SHA-256" }, - POLARSSL_MD_SHA256, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_PKCS1_SHA384 ), "sha384WithRSAEncryption", "RSA with SHA-384" }, - POLARSSL_MD_SHA384, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_PKCS1_SHA512 ), "sha512WithRSAEncryption", "RSA with SHA-512" }, - POLARSSL_MD_SHA512, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_RSA_SHA_OBS ), "sha-1WithRSAEncryption", "RSA with SHA1" }, - POLARSSL_MD_SHA1, POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_ECDSA_SHA1 ), "ecdsa-with-SHA1", "ECDSA with SHA1" }, - POLARSSL_MD_SHA1, POLARSSL_PK_ECDSA, - }, - { - { ADD_LEN( OID_ECDSA_SHA224 ), "ecdsa-with-SHA224", "ECDSA with SHA224" }, - POLARSSL_MD_SHA224, POLARSSL_PK_ECDSA, - }, - { - { ADD_LEN( OID_ECDSA_SHA256 ), "ecdsa-with-SHA256", "ECDSA with SHA256" }, - POLARSSL_MD_SHA256, POLARSSL_PK_ECDSA, - }, - { - { ADD_LEN( OID_ECDSA_SHA384 ), "ecdsa-with-SHA384", "ECDSA with SHA384" }, - POLARSSL_MD_SHA384, POLARSSL_PK_ECDSA, - }, - { - { ADD_LEN( OID_ECDSA_SHA512 ), "ecdsa-with-SHA512", "ECDSA with SHA512" }, - POLARSSL_MD_SHA512, POLARSSL_PK_ECDSA, - }, - { - { ADD_LEN( OID_RSASSA_PSS ), "RSASSA-PSS", "RSASSA-PSS" }, - POLARSSL_MD_NONE, POLARSSL_PK_RSASSA_PSS, - }, - { - { NULL, 0, NULL, NULL }, - (md_type_t)0, (pk_type_t)0, - }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_sig_alg_t, sig_alg, oid_sig_alg); -FN_OID_GET_DESCRIPTOR_ATTR1(oid_get_sig_alg_desc, oid_sig_alg_t, sig_alg, const char *, description); -FN_OID_GET_ATTR2(oid_get_sig_alg, oid_sig_alg_t, sig_alg, md_type_t, md_alg, pk_type_t, pk_alg); -FN_OID_GET_OID_BY_ATTR2(oid_get_oid_by_sig_alg, oid_sig_alg_t, oid_sig_alg, pk_type_t, pk_alg, md_type_t, md_alg); -#endif /* POLARSSL_MD_C */ - -/* - * For PublicKeyInfo (PKCS1, RFC 5480) - */ -typedef struct { - oid_descriptor_t descriptor; - pk_type_t pk_alg; -} oid_pk_alg_t; - -SSL_ROM_DATA_SECTION -static const oid_pk_alg_t oid_pk_alg[] = -{ - { - { ADD_LEN( OID_PKCS1_RSA ), "rsaEncryption", "RSA" }, - POLARSSL_PK_RSA, - }, - { - { ADD_LEN( OID_EC_ALG_UNRESTRICTED ), "id-ecPublicKey", "Generic EC key" }, - POLARSSL_PK_ECKEY, - }, - { - { ADD_LEN( OID_EC_ALG_ECDH ), "id-ecDH", "EC key for ECDH" }, - POLARSSL_PK_ECKEY_DH, - }, - { - { NULL, 0, NULL, NULL }, - (pk_type_t)0, - }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_pk_alg_t, pk_alg, oid_pk_alg); -FN_OID_GET_ATTR1(oid_get_pk_alg, oid_pk_alg_t, pk_alg, pk_type_t, pk_alg); -FN_OID_GET_OID_BY_ATTR1(oid_get_oid_by_pk_alg, oid_pk_alg_t, oid_pk_alg, pk_type_t, pk_alg); - -#if defined(POLARSSL_ECP_C) -/* - * For namedCurve (RFC 5480) - */ -typedef struct { - oid_descriptor_t descriptor; - ecp_group_id grp_id; -} oid_ecp_grp_t; - -SSL_ROM_DATA_SECTION -static const oid_ecp_grp_t oid_ecp_grp[] = -{ - { - { ADD_LEN( OID_EC_GRP_SECP192R1 ), "secp192r1", "secp192r1" }, - POLARSSL_ECP_DP_SECP192R1, - }, - { - { ADD_LEN( OID_EC_GRP_SECP224R1 ), "secp224r1", "secp224r1" }, - POLARSSL_ECP_DP_SECP224R1, - }, - { - { ADD_LEN( OID_EC_GRP_SECP256R1 ), "secp256r1", "secp256r1" }, - POLARSSL_ECP_DP_SECP256R1, - }, - { - { ADD_LEN( OID_EC_GRP_SECP384R1 ), "secp384r1", "secp384r1" }, - POLARSSL_ECP_DP_SECP384R1, - }, - { - { ADD_LEN( OID_EC_GRP_SECP521R1 ), "secp521r1", "secp521r1" }, - POLARSSL_ECP_DP_SECP521R1, - }, - { - { ADD_LEN( OID_EC_GRP_SECP192K1 ), "secp192k1", "secp192k1" }, - POLARSSL_ECP_DP_SECP192K1, - }, - { - { ADD_LEN( OID_EC_GRP_SECP224K1 ), "secp224k1", "secp224k1" }, - POLARSSL_ECP_DP_SECP224K1, - }, - { - { ADD_LEN( OID_EC_GRP_SECP256K1 ), "secp256k1", "secp256k1" }, - POLARSSL_ECP_DP_SECP256K1, - }, - { - { ADD_LEN( OID_EC_GRP_BP256R1 ), "brainpoolP256r1","brainpool256r1" }, - POLARSSL_ECP_DP_BP256R1, - }, - { - { ADD_LEN( OID_EC_GRP_BP384R1 ), "brainpoolP384r1","brainpool384r1" }, - POLARSSL_ECP_DP_BP384R1, - }, - { - { ADD_LEN( OID_EC_GRP_BP512R1 ), "brainpoolP512r1","brainpool512r1" }, - POLARSSL_ECP_DP_BP512R1, - }, - { - { NULL, 0, NULL, NULL }, - 0, - }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_ecp_grp_t, grp_id, oid_ecp_grp); -FN_OID_GET_ATTR1(oid_get_ec_grp, oid_ecp_grp_t, grp_id, ecp_group_id, grp_id); -FN_OID_GET_OID_BY_ATTR1(oid_get_oid_by_ec_grp, oid_ecp_grp_t, oid_ecp_grp, ecp_group_id, grp_id); -#endif /* POLARSSL_ECP_C */ - -#if defined(POLARSSL_CIPHER_C) -/* - * For PKCS#5 PBES2 encryption algorithm - */ -typedef struct { - oid_descriptor_t descriptor; - cipher_type_t cipher_alg; -} oid_cipher_alg_t; - -SSL_ROM_DATA_SECTION -static const oid_cipher_alg_t oid_cipher_alg[] = -{ - { - { ADD_LEN( OID_DES_CBC ), "desCBC", "DES-CBC" }, - POLARSSL_CIPHER_DES_CBC, - }, - { - { ADD_LEN( OID_DES_EDE3_CBC ), "des-ede3-cbc", "DES-EDE3-CBC" }, - POLARSSL_CIPHER_DES_EDE3_CBC, - }, - { - { NULL, 0, NULL, NULL }, - (cipher_type_t)0, - }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_cipher_alg_t, cipher_alg, oid_cipher_alg); -FN_OID_GET_ATTR1(oid_get_cipher_alg, oid_cipher_alg_t, cipher_alg, cipher_type_t, cipher_alg); -#endif /* POLARSSL_CIPHER_C */ - -#if defined(POLARSSL_MD_C) -/* - * For digestAlgorithm - */ -typedef struct { - oid_descriptor_t descriptor; - md_type_t md_alg; -} oid_md_alg_t; - -SSL_ROM_DATA_SECTION -static const oid_md_alg_t oid_md_alg[] = -{ - { - { ADD_LEN( OID_DIGEST_ALG_MD2 ), "id-md2", "MD2" }, - POLARSSL_MD_MD2, - }, - { - { ADD_LEN( OID_DIGEST_ALG_MD4 ), "id-md4", "MD4" }, - POLARSSL_MD_MD4, - }, - { - { ADD_LEN( OID_DIGEST_ALG_MD5 ), "id-md5", "MD5" }, - POLARSSL_MD_MD5, - }, - { - { ADD_LEN( OID_DIGEST_ALG_SHA1 ), "id-sha1", "SHA-1" }, - POLARSSL_MD_SHA1, - }, - { - { ADD_LEN( OID_DIGEST_ALG_SHA224 ), "id-sha224", "SHA-224" }, - POLARSSL_MD_SHA224, - }, - { - { ADD_LEN( OID_DIGEST_ALG_SHA256 ), "id-sha256", "SHA-256" }, - POLARSSL_MD_SHA256, - }, - { - { ADD_LEN( OID_DIGEST_ALG_SHA384 ), "id-sha384", "SHA-384" }, - POLARSSL_MD_SHA384, - }, - { - { ADD_LEN( OID_DIGEST_ALG_SHA512 ), "id-sha512", "SHA-512" }, - POLARSSL_MD_SHA512, - }, - { - { NULL, 0, NULL, NULL }, - (md_type_t)0, - }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_md_alg_t, md_alg, oid_md_alg); -FN_OID_GET_ATTR1(oid_get_md_alg, oid_md_alg_t, md_alg, md_type_t, md_alg); -FN_OID_GET_OID_BY_ATTR1(oid_get_oid_by_md, oid_md_alg_t, oid_md_alg, md_type_t, md_alg); -#endif /* POLARSSL_MD_C */ - -#if defined(POLARSSL_PKCS12_C) -/* - * For PKCS#12 PBEs - */ -typedef struct { - oid_descriptor_t descriptor; - md_type_t md_alg; - cipher_type_t cipher_alg; -} oid_pkcs12_pbe_alg_t; - -SSL_ROM_DATA_SECTION -static const oid_pkcs12_pbe_alg_t oid_pkcs12_pbe_alg[] = -{ - { - { ADD_LEN( OID_PKCS12_PBE_SHA1_DES3_EDE_CBC ), "pbeWithSHAAnd3-KeyTripleDES-CBC", "PBE with SHA1 and 3-Key 3DES" }, - POLARSSL_MD_SHA1, POLARSSL_CIPHER_DES_EDE3_CBC, - }, - { - { ADD_LEN( OID_PKCS12_PBE_SHA1_DES2_EDE_CBC ), "pbeWithSHAAnd2-KeyTripleDES-CBC", "PBE with SHA1 and 2-Key 3DES" }, - POLARSSL_MD_SHA1, POLARSSL_CIPHER_DES_EDE_CBC, - }, - { - { NULL, 0, NULL, NULL }, - 0, 0, - }, -}; - -FN_OID_TYPED_FROM_ASN1(oid_pkcs12_pbe_alg_t, pkcs12_pbe_alg, oid_pkcs12_pbe_alg); -FN_OID_GET_ATTR2(oid_get_pkcs12_pbe_alg, oid_pkcs12_pbe_alg_t, pkcs12_pbe_alg, md_type_t, md_alg, cipher_type_t, cipher_alg); -#endif /* POLARSSL_PKCS12_C */ - -#if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \ - !defined(EFI32) -#include - -#if !defined vsnprintf -#define vsnprintf _vsnprintf -#endif // vsnprintf - -/* - * Windows _snprintf and _vsnprintf are not compatible to linux versions. - * Result value is not size of buffer needed, but -1 if no fit is possible. - * - * This fuction tries to 'fix' this by at least suggesting enlarging the - * size by 20. - */ -SSL_ROM_TEXT_SECTION -static int compat_snprintf( char *str, size_t size, const char *format, ... ) -{ - va_list ap; - int res = -1; - - va_start( ap, format ); - - res = vsnprintf( str, size, format, ap ); - - va_end( ap ); - - // No quick fix possible - if( res < 0 ) - return( (int) size + 20 ); - - return( res ); -} - -#define snprintf compat_snprintf -#endif /* _MSC_VER && !snprintf && !EFIX64 && !EFI32 */ - -#define SAFE_SNPRINTF() \ -{ \ - if( ret == -1 ) \ - return( POLARSSL_ERR_OID_BUF_TOO_SMALL ); \ - \ - if( (unsigned int) ret >= n ) { \ - p[n - 1] = '\0'; \ - return( POLARSSL_ERR_OID_BUF_TOO_SMALL ); \ - } \ - \ - n -= (unsigned int) ret; \ - p += (unsigned int) ret; \ -} - -/* Return the x.y.z.... style numeric string for the given OID */ -SSL_ROM_TEXT_SECTION -int oid_get_numeric_string( char *buf, size_t size, - const asn1_buf *oid ) -{ - int ret; - size_t i, n; - unsigned int value; - char *p; - - p = buf; - n = size; - - /* First byte contains first two dots */ - if( oid->len > 0 ) - { - ret = snprintf( p, n, "%d.%d", oid->p[0] / 40, oid->p[0] % 40 ); - SAFE_SNPRINTF(); - } - - value = 0; - for( i = 1; i < oid->len; i++ ) - { - /* Prevent overflow in value. */ - if( ( ( value << 7 ) >> 7 ) != value ) - return( POLARSSL_ERR_OID_BUF_TOO_SMALL ); - - value <<= 7; - value += oid->p[i] & 0x7F; - - if( !( oid->p[i] & 0x80 ) ) - { - /* Last byte */ - ret = snprintf( p, n, ".%d", value ); - SAFE_SNPRINTF(); - value = 0; - } - } - - return( (int) ( size - n ) ); -} - -#endif /* POLARSSL_OID_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/pem.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/pem.c deleted file mode 100644 index 3affaaa..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/pem.c +++ /dev/null @@ -1,455 +0,0 @@ -/* - * Privacy Enhanced Mail (PEM) decoding - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PEM_PARSE_C) || defined(POLARSSL_PEM_WRITE_C) -#include "polarssl/pem.h" -#include "polarssl/base64.h" -#include "polarssl/des.h" -#include "polarssl/aes.h" -#include "polarssl/md5.h" -#include "polarssl/cipher.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if defined(POLARSSL_PEM_PARSE_C) -SSL_ROM_TEXT_SECTION -void pem_init( pem_context *ctx ) -{ - memset( ctx, 0, sizeof( pem_context ) ); -} - -#if defined(POLARSSL_MD5_C) && defined(POLARSSL_CIPHER_MODE_CBC) && \ - ( defined(POLARSSL_DES_C) || defined(POLARSSL_AES_C) ) -/* - * Read a 16-byte hex string and convert it to binary - */ -SSL_ROM_TEXT_SECTION -static int pem_get_iv( const unsigned char *s, unsigned char *iv, - size_t iv_len ) -{ - size_t i, j, k; - - memset( iv, 0, iv_len ); - - for( i = 0; i < iv_len * 2; i++, s++ ) - { - if( *s >= '0' && *s <= '9' ) j = *s - '0'; else - if( *s >= 'A' && *s <= 'F' ) j = *s - '7'; else - if( *s >= 'a' && *s <= 'f' ) j = *s - 'W'; else - return( POLARSSL_ERR_PEM_INVALID_ENC_IV ); - - k = ( ( i & 1 ) != 0 ) ? j : j << 4; - - iv[i >> 1] = (unsigned char)( iv[i >> 1] | k ); - } - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -static void pem_pbkdf1( unsigned char *key, size_t keylen, - unsigned char *iv, - const unsigned char *pwd, size_t pwdlen ) -{ - md5_context md5_ctx; - unsigned char md5sum[16]; - size_t use_len; - - md5_init( &md5_ctx ); - - /* - * key[ 0..15] = MD5(pwd || IV) - */ - md5_starts( &md5_ctx ); - md5_update( &md5_ctx, pwd, pwdlen ); - md5_update( &md5_ctx, iv, 8 ); - md5_finish( &md5_ctx, md5sum ); - - if( keylen <= 16 ) - { - memcpy( key, md5sum, keylen ); - - md5_free( &md5_ctx ); - polarssl_zeroize( md5sum, 16 ); - return; - } - - memcpy( key, md5sum, 16 ); - - /* - * key[16..23] = MD5(key[ 0..15] || pwd || IV]) - */ - md5_starts( &md5_ctx ); - md5_update( &md5_ctx, md5sum, 16 ); - md5_update( &md5_ctx, pwd, pwdlen ); - md5_update( &md5_ctx, iv, 8 ); - md5_finish( &md5_ctx, md5sum ); - - use_len = 16; - if( keylen < 32 ) - use_len = keylen - 16; - - memcpy( key + 16, md5sum, use_len ); - - md5_free( &md5_ctx ); - polarssl_zeroize( md5sum, 16 ); -} - -#if defined(POLARSSL_DES_C) -/* - * Decrypt with DES-CBC, using PBKDF1 for key derivation - */ -SSL_ROM_TEXT_SECTION -static void pem_des_decrypt( unsigned char des_iv[8], - unsigned char *buf, size_t buflen, - const unsigned char *pwd, size_t pwdlen ) -{ - des_context des_ctx; - unsigned char des_key[8]; - - des_init( &des_ctx ); - - pem_pbkdf1( des_key, 8, des_iv, pwd, pwdlen ); - - des_setkey_dec( &des_ctx, des_key ); - des_crypt_cbc( &des_ctx, DES_DECRYPT, buflen, - des_iv, buf, buf ); - - des_free( &des_ctx ); - polarssl_zeroize( des_key, 8 ); -} - -/* - * Decrypt with 3DES-CBC, using PBKDF1 for key derivation - */ -SSL_ROM_TEXT_SECTION -static void pem_des3_decrypt( unsigned char des3_iv[8], - unsigned char *buf, size_t buflen, - const unsigned char *pwd, size_t pwdlen ) -{ - des3_context des3_ctx; - unsigned char des3_key[24]; - - des3_init( &des3_ctx ); - - pem_pbkdf1( des3_key, 24, des3_iv, pwd, pwdlen ); - - des3_set3key_dec( &des3_ctx, des3_key ); - des3_crypt_cbc( &des3_ctx, DES_DECRYPT, buflen, - des3_iv, buf, buf ); - - des3_free( &des3_ctx ); - polarssl_zeroize( des3_key, 24 ); -} -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_AES_C) -/* - * Decrypt with AES-XXX-CBC, using PBKDF1 for key derivation - */ -SSL_ROM_TEXT_SECTION -static void pem_aes_decrypt( unsigned char aes_iv[16], unsigned int keylen, - unsigned char *buf, size_t buflen, - const unsigned char *pwd, size_t pwdlen ) -{ - aes_context aes_ctx; - unsigned char aes_key[32]; - - aes_init( &aes_ctx ); - - pem_pbkdf1( aes_key, keylen, aes_iv, pwd, pwdlen ); - - aes_setkey_dec( &aes_ctx, aes_key, keylen * 8 ); - aes_crypt_cbc( &aes_ctx, AES_DECRYPT, buflen, - aes_iv, buf, buf ); - - aes_free( &aes_ctx ); - polarssl_zeroize( aes_key, keylen ); -} -#endif /* POLARSSL_AES_C */ - -#endif /* POLARSSL_MD5_C && POLARSSL_CIPHER_MODE_CBC && - ( POLARSSL_AES_C || POLARSSL_DES_C ) */ - -SSL_ROM_TEXT_SECTION -int pem_read_buffer( pem_context *ctx, const char *header, const char *footer, - const unsigned char *data, const unsigned char *pwd, - size_t pwdlen, size_t *use_len ) -{ - int ret, enc; - size_t len; - unsigned char *buf; - const unsigned char *s1, *s2, *end; -#if defined(POLARSSL_MD5_C) && defined(POLARSSL_CIPHER_MODE_CBC) && \ - ( defined(POLARSSL_DES_C) || defined(POLARSSL_AES_C) ) - unsigned char pem_iv[16]; - cipher_type_t enc_alg = POLARSSL_CIPHER_NONE; -#else - ((void) pwd); - ((void) pwdlen); -#endif /* POLARSSL_MD5_C && POLARSSL_CIPHER_MODE_CBC && - ( POLARSSL_AES_C || POLARSSL_DES_C ) */ - - if( ctx == NULL ) - return( POLARSSL_ERR_PEM_BAD_INPUT_DATA ); - - s1 = (unsigned char *) strstr( (const char *) data, header ); - - if( s1 == NULL ) - return( POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); - - s2 = (unsigned char *) strstr( (const char *) data, footer ); - - if( s2 == NULL || s2 <= s1 ) - return( POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); - - s1 += strlen( header ); - if( *s1 == '\r' ) s1++; - if( *s1 == '\n' ) s1++; - else return( POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); - - end = s2; - end += strlen( footer ); - if( *end == '\r' ) end++; - if( *end == '\n' ) end++; - *use_len = end - data; - - enc = 0; - - if( memcmp( s1, "Proc-Type: 4,ENCRYPTED", 22 ) == 0 ) - { -#if defined(POLARSSL_MD5_C) && defined(POLARSSL_CIPHER_MODE_CBC) && \ - ( defined(POLARSSL_DES_C) || defined(POLARSSL_AES_C) ) - enc++; - - s1 += 22; - if( *s1 == '\r' ) s1++; - if( *s1 == '\n' ) s1++; - else return( POLARSSL_ERR_PEM_INVALID_DATA ); - - -#if defined(POLARSSL_DES_C) - if( memcmp( s1, "DEK-Info: DES-EDE3-CBC,", 23 ) == 0 ) - { - enc_alg = POLARSSL_CIPHER_DES_EDE3_CBC; - - s1 += 23; - if( pem_get_iv( s1, pem_iv, 8 ) != 0 ) - return( POLARSSL_ERR_PEM_INVALID_ENC_IV ); - - s1 += 16; - } - else if( memcmp( s1, "DEK-Info: DES-CBC,", 18 ) == 0 ) - { - enc_alg = POLARSSL_CIPHER_DES_CBC; - - s1 += 18; - if( pem_get_iv( s1, pem_iv, 8) != 0 ) - return( POLARSSL_ERR_PEM_INVALID_ENC_IV ); - - s1 += 16; - } -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_AES_C) - if( memcmp( s1, "DEK-Info: AES-", 14 ) == 0 ) - { - if( memcmp( s1, "DEK-Info: AES-128-CBC,", 22 ) == 0 ) - enc_alg = POLARSSL_CIPHER_AES_128_CBC; - else if( memcmp( s1, "DEK-Info: AES-192-CBC,", 22 ) == 0 ) - enc_alg = POLARSSL_CIPHER_AES_192_CBC; - else if( memcmp( s1, "DEK-Info: AES-256-CBC,", 22 ) == 0 ) - enc_alg = POLARSSL_CIPHER_AES_256_CBC; - else - return( POLARSSL_ERR_PEM_UNKNOWN_ENC_ALG ); - - s1 += 22; - if( pem_get_iv( s1, pem_iv, 16 ) != 0 ) - return( POLARSSL_ERR_PEM_INVALID_ENC_IV ); - - s1 += 32; - } -#endif /* POLARSSL_AES_C */ - - if( enc_alg == POLARSSL_CIPHER_NONE ) - return( POLARSSL_ERR_PEM_UNKNOWN_ENC_ALG ); - - if( *s1 == '\r' ) s1++; - if( *s1 == '\n' ) s1++; - else return( POLARSSL_ERR_PEM_INVALID_DATA ); -#else - return( POLARSSL_ERR_PEM_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_MD5_C && POLARSSL_CIPHER_MODE_CBC && - ( POLARSSL_AES_C || POLARSSL_DES_C ) */ - } - - len = 0; - ret = base64_decode( NULL, &len, s1, s2 - s1 ); - - if( ret == POLARSSL_ERR_BASE64_INVALID_CHARACTER ) - return( POLARSSL_ERR_PEM_INVALID_DATA + ret ); - - if( ( buf = (unsigned char *) polarssl_malloc( len ) ) == NULL ) - return( POLARSSL_ERR_PEM_MALLOC_FAILED ); - - if( ( ret = base64_decode( buf, &len, s1, s2 - s1 ) ) != 0 ) - { - polarssl_free( buf ); - return( POLARSSL_ERR_PEM_INVALID_DATA + ret ); - } - - if( enc != 0 ) - { -#if defined(POLARSSL_MD5_C) && defined(POLARSSL_CIPHER_MODE_CBC) && \ - ( defined(POLARSSL_DES_C) || defined(POLARSSL_AES_C) ) - if( pwd == NULL ) - { - polarssl_free( buf ); - return( POLARSSL_ERR_PEM_PASSWORD_REQUIRED ); - } - -#if defined(POLARSSL_DES_C) - if( enc_alg == POLARSSL_CIPHER_DES_EDE3_CBC ) - pem_des3_decrypt( pem_iv, buf, len, pwd, pwdlen ); - else if( enc_alg == POLARSSL_CIPHER_DES_CBC ) - pem_des_decrypt( pem_iv, buf, len, pwd, pwdlen ); -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_AES_C) - if( enc_alg == POLARSSL_CIPHER_AES_128_CBC ) - pem_aes_decrypt( pem_iv, 16, buf, len, pwd, pwdlen ); - else if( enc_alg == POLARSSL_CIPHER_AES_192_CBC ) - pem_aes_decrypt( pem_iv, 24, buf, len, pwd, pwdlen ); - else if( enc_alg == POLARSSL_CIPHER_AES_256_CBC ) - pem_aes_decrypt( pem_iv, 32, buf, len, pwd, pwdlen ); -#endif /* POLARSSL_AES_C */ - - /* - * The result will be ASN.1 starting with a SEQUENCE tag, with 1 to 3 - * length bytes (allow 4 to be sure) in all known use cases. - * - * Use that as heurisitic to try detecting password mismatchs. - */ - if( len <= 2 || buf[0] != 0x30 || buf[1] > 0x83 ) - { - polarssl_free( buf ); - return( POLARSSL_ERR_PEM_PASSWORD_MISMATCH ); - } -#else - polarssl_free( buf ); - return( POLARSSL_ERR_PEM_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_MD5_C && POLARSSL_CIPHER_MODE_CBC && - ( POLARSSL_AES_C || POLARSSL_DES_C ) */ - } - - ctx->buf = buf; - ctx->buflen = len; - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -void pem_free( pem_context *ctx ) -{ - polarssl_free( ctx->buf ); - polarssl_free( ctx->info ); - - polarssl_zeroize( ctx, sizeof( pem_context ) ); -} -#endif /* POLARSSL_PEM_PARSE_C */ - -#if defined(POLARSSL_PEM_WRITE_C) -SSL_ROM_TEXT_SECTION -int pem_write_buffer( const char *header, const char *footer, - const unsigned char *der_data, size_t der_len, - unsigned char *buf, size_t buf_len, size_t *olen ) -{ - int ret; - unsigned char *encode_buf, *c, *p = buf; - size_t len = 0, use_len = 0, add_len = 0; - - base64_encode( NULL, &use_len, der_data, der_len ); - add_len = strlen( header ) + strlen( footer ) + ( use_len / 64 ) + 1; - - if( use_len + add_len > buf_len ) - { - *olen = use_len + add_len; - return( POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL ); - } - - if( ( encode_buf = polarssl_malloc( use_len ) ) == NULL ) - return( POLARSSL_ERR_PEM_MALLOC_FAILED ); - - if( ( ret = base64_encode( encode_buf, &use_len, der_data, - der_len ) ) != 0 ) - { - polarssl_free( encode_buf ); - return( ret ); - } - - memcpy( p, header, strlen( header ) ); - p += strlen( header ); - c = encode_buf; - - while( use_len ) - { - len = ( use_len > 64 ) ? 64 : use_len; - memcpy( p, c, len ); - use_len -= len; - p += len; - c += len; - *p++ = '\n'; - } - - memcpy( p, footer, strlen( footer ) ); - p += strlen( footer ); - - *p++ = '\0'; - *olen = p - buf; - - polarssl_free( encode_buf ); - return( 0 ); -} -#endif /* POLARSSL_PEM_WRITE_C */ -#endif /* POLARSSL_PEM_PARSE_C || POLARSSL_PEM_WRITE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/pk.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/pk.c deleted file mode 100644 index f90bf8c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/pk.c +++ /dev/null @@ -1,368 +0,0 @@ -/* - * Public Key abstraction layer - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PK_C) - -#include "polarssl/pk.h" -#include "polarssl/pk_wrap.h" - -#if defined(POLARSSL_RSA_C) -#include "polarssl/rsa.h" -#endif -#if defined(POLARSSL_ECP_C) -#include "polarssl/ecp.h" -#endif -#if defined(POLARSSL_ECDSA_C) -#include "polarssl/ecdsa.h" -#endif - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * Initialise a pk_context - */ -SSL_ROM_TEXT_SECTION -void pk_init( pk_context *ctx ) -{ - if( ctx == NULL ) - return; - - ctx->pk_info = NULL; - ctx->pk_ctx = NULL; -} - -/* - * Free (the components of) a pk_context - */ -SSL_ROM_TEXT_SECTION -void pk_free( pk_context *ctx ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return; - - ctx->pk_info->ctx_free_func( ctx->pk_ctx ); - - polarssl_zeroize( ctx, sizeof( pk_context ) ); -} - -/* - * Get pk_info structure from type - */ -SSL_ROM_TEXT_SECTION -const pk_info_t * pk_info_from_type( pk_type_t pk_type ) -{ - switch( pk_type ) { -#if defined(POLARSSL_RSA_C) - case POLARSSL_PK_RSA: - return( &rsa_info ); -#endif -#if defined(POLARSSL_ECP_C) - case POLARSSL_PK_ECKEY: - return( &eckey_info ); - case POLARSSL_PK_ECKEY_DH: - return( &eckeydh_info ); -#endif -#if defined(POLARSSL_ECDSA_C) - case POLARSSL_PK_ECDSA: - return( &ecdsa_info ); -#endif - /* POLARSSL_PK_RSA_ALT omitted on purpose */ - default: - return( NULL ); - } -} - -/* - * Initialise context - */ -SSL_ROM_TEXT_SECTION -int pk_init_ctx( pk_context *ctx, const pk_info_t *info ) -{ - if( ctx == NULL || info == NULL || ctx->pk_info != NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ( ctx->pk_ctx = info->ctx_alloc_func() ) == NULL ) - return( POLARSSL_ERR_PK_MALLOC_FAILED ); - - ctx->pk_info = info; - - return( 0 ); -} - -/* - * Initialize an RSA-alt context - */ -SSL_ROM_TEXT_SECTION -int pk_init_ctx_rsa_alt( pk_context *ctx, void * key, - pk_rsa_alt_decrypt_func decrypt_func, - pk_rsa_alt_sign_func sign_func, - pk_rsa_alt_key_len_func key_len_func ) -{ - rsa_alt_context *rsa_alt; - const pk_info_t *info = &rsa_alt_info; - - if( ctx == NULL || ctx->pk_info != NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ( ctx->pk_ctx = info->ctx_alloc_func() ) == NULL ) - return( POLARSSL_ERR_PK_MALLOC_FAILED ); - - ctx->pk_info = info; - - rsa_alt = (rsa_alt_context *) ctx->pk_ctx; - - rsa_alt->key = key; - rsa_alt->decrypt_func = decrypt_func; - rsa_alt->sign_func = sign_func; - rsa_alt->key_len_func = key_len_func; - - return( 0 ); -} - -/* - * Tell if a PK can do the operations of the given type - */ -SSL_ROM_TEXT_SECTION -int pk_can_do( pk_context *ctx, pk_type_t type ) -{ - /* null or NONE context can't do anything */ - if( ctx == NULL || ctx->pk_info == NULL ) - return( 0 ); - - return( ctx->pk_info->can_do( type ) ); -} - -/* - * Helper for pk_sign and pk_verify - */ -SSL_ROM_TEXT_SECTION -static inline int pk_hashlen_helper( md_type_t md_alg, size_t *hash_len ) -{ - const md_info_t *md_info; - - if( *hash_len != 0 ) - return( 0 ); - - if( ( md_info = md_info_from_type( md_alg ) ) == NULL ) - return( -1 ); - - *hash_len = md_info->size; - return( 0 ); -} - -/* - * Verify a signature - */ -SSL_ROM_TEXT_SECTION -int pk_verify( pk_context *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) -{ - if( ctx == NULL || ctx->pk_info == NULL || - pk_hashlen_helper( md_alg, &hash_len ) != 0 ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ctx->pk_info->verify_func == NULL ) - return( POLARSSL_ERR_PK_TYPE_MISMATCH ); - - return( ctx->pk_info->verify_func( ctx->pk_ctx, md_alg, hash, hash_len, - sig, sig_len ) ); -} - -/* - * Verify a signature with options - */ -SSL_ROM_TEXT_SECTION -int pk_verify_ext( pk_type_t type, const void *options, - pk_context *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ! pk_can_do( ctx, type ) ) - return( POLARSSL_ERR_PK_TYPE_MISMATCH ); - - if( type == POLARSSL_PK_RSASSA_PSS ) - { -#if defined(POLARSSL_RSA_C) && defined(POLARSSL_PKCS1_V21) - int ret; - const pk_rsassa_pss_options *pss_opts; - - if( options == NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - pss_opts = (const pk_rsassa_pss_options *) options; - - if( sig_len < pk_get_len( ctx ) ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - ret = rsa_rsassa_pss_verify_ext( pk_rsa( *ctx ), - NULL, NULL, RSA_PUBLIC, - md_alg, hash_len, hash, - pss_opts->mgf1_hash_id, - pss_opts->expected_salt_len, - sig ); - if( ret != 0 ) - return( ret ); - - if( sig_len > pk_get_len( ctx ) ) - return( POLARSSL_ERR_PK_SIG_LEN_MISMATCH ); - - return( 0 ); -#else - return( POLARSSL_ERR_PK_FEATURE_UNAVAILABLE ); -#endif - } - - /* General case: no options */ - if( options != NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - return( pk_verify( ctx, md_alg, hash, hash_len, sig, sig_len ) ); -} - -/* - * Make a signature - */ -SSL_ROM_TEXT_SECTION -int pk_sign( pk_context *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - if( ctx == NULL || ctx->pk_info == NULL || - pk_hashlen_helper( md_alg, &hash_len ) != 0 ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ctx->pk_info->sign_func == NULL ) - return( POLARSSL_ERR_PK_TYPE_MISMATCH ); - - return( ctx->pk_info->sign_func( ctx->pk_ctx, md_alg, hash, hash_len, - sig, sig_len, f_rng, p_rng ) ); -} - -/* - * Decrypt message - */ -SSL_ROM_TEXT_SECTION -int pk_decrypt( pk_context *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ctx->pk_info->decrypt_func == NULL ) - return( POLARSSL_ERR_PK_TYPE_MISMATCH ); - - return( ctx->pk_info->decrypt_func( ctx->pk_ctx, input, ilen, - output, olen, osize, f_rng, p_rng ) ); -} - -/* - * Encrypt message - */ -SSL_ROM_TEXT_SECTION -int pk_encrypt( pk_context *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ctx->pk_info->encrypt_func == NULL ) - return( POLARSSL_ERR_PK_TYPE_MISMATCH ); - - return( ctx->pk_info->encrypt_func( ctx->pk_ctx, input, ilen, - output, olen, osize, f_rng, p_rng ) ); -} - -/* - * Get key size in bits - */ -SSL_ROM_TEXT_SECTION -size_t pk_get_size( const pk_context *ctx ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return( 0 ); - - return( ctx->pk_info->get_size( ctx->pk_ctx ) ); -} - -/* - * Export debug information - */ -SSL_ROM_TEXT_SECTION -int pk_debug( const pk_context *ctx, pk_debug_item *items ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return( POLARSSL_ERR_PK_BAD_INPUT_DATA ); - - if( ctx->pk_info->debug_func == NULL ) - return( POLARSSL_ERR_PK_TYPE_MISMATCH ); - - ctx->pk_info->debug_func( ctx->pk_ctx, items ); - return( 0 ); -} - -/* - * Access the PK type name - */ -SSL_ROM_TEXT_SECTION -const char * pk_get_name( const pk_context *ctx ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return( "invalid PK" ); - - return( ctx->pk_info->name ); -} - -/* - * Access the PK type - */ -SSL_ROM_TEXT_SECTION -pk_type_t pk_get_type( const pk_context *ctx ) -{ - if( ctx == NULL || ctx->pk_info == NULL ) - return( POLARSSL_PK_NONE ); - - return( ctx->pk_info->type ); -} - -#endif /* POLARSSL_PK_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/pk_wrap.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/pk_wrap.c deleted file mode 100644 index 87881b5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/pk_wrap.c +++ /dev/null @@ -1,485 +0,0 @@ -/* - * Public Key abstraction layer: wrapper functions - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PK_C) - -#include "polarssl/pk_wrap.h" - -/* Even if RSA not activated, for the sake of RSA-alt */ -#include "polarssl/rsa.h" - -#if defined(POLARSSL_ECP_C) -#include "polarssl/ecp.h" -#endif - -#if defined(POLARSSL_ECDSA_C) -#include "polarssl/ecdsa.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#include -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if defined(POLARSSL_RSA_C) -SSL_ROM_TEXT_SECTION -static int rsa_can_do( pk_type_t type ) -{ - return( type == POLARSSL_PK_RSA || - type == POLARSSL_PK_RSASSA_PSS ); -} - -SSL_ROM_TEXT_SECTION -static size_t rsa_get_size( const void *ctx ) -{ - return( 8 * ((const rsa_context *) ctx)->len ); -} - -SSL_ROM_TEXT_SECTION -static int rsa_verify_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) -{ - int ret; - - if( sig_len < ((rsa_context *) ctx)->len ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( ( ret = rsa_pkcs1_verify( (rsa_context *) ctx, NULL, NULL, - RSA_PUBLIC, md_alg, - (unsigned int) hash_len, hash, sig ) ) != 0 ) - return( ret ); - - if( sig_len > ((rsa_context *) ctx)->len ) - return( POLARSSL_ERR_PK_SIG_LEN_MISMATCH ); - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -static int rsa_sign_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - *sig_len = ((rsa_context *) ctx)->len; - - return( rsa_pkcs1_sign( (rsa_context *) ctx, f_rng, p_rng, RSA_PRIVATE, - md_alg, (unsigned int) hash_len, hash, sig ) ); -} - -SSL_ROM_TEXT_SECTION -static int rsa_decrypt_wrap( void *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - if( ilen != ((rsa_context *) ctx)->len ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - return( rsa_pkcs1_decrypt( (rsa_context *) ctx, f_rng, p_rng, - RSA_PRIVATE, olen, input, output, osize ) ); -} - -SSL_ROM_TEXT_SECTION -static int rsa_encrypt_wrap( void *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - ((void) osize); - - *olen = ((rsa_context *) ctx)->len; - - return( rsa_pkcs1_encrypt( (rsa_context *) ctx, - f_rng, p_rng, RSA_PUBLIC, ilen, input, output ) ); -} - -SSL_ROM_TEXT_SECTION -static void *rsa_alloc_wrap( void ) -{ - void *ctx = polarssl_malloc( sizeof( rsa_context ) ); - - if( ctx != NULL ) - rsa_init( (rsa_context *) ctx, 0, 0 ); - - return( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void rsa_free_wrap( void *ctx ) -{ - rsa_free( (rsa_context *) ctx ); - polarssl_free( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void rsa_debug( const void *ctx, pk_debug_item *items ) -{ - items->type = POLARSSL_PK_DEBUG_MPI; - items->name = "rsa.N"; - items->value = &( ((rsa_context *) ctx)->N ); - - items++; - - items->type = POLARSSL_PK_DEBUG_MPI; - items->name = "rsa.E"; - items->value = &( ((rsa_context *) ctx)->E ); -} - -SSL_ROM_DATA_SECTION -const pk_info_t rsa_info = { - POLARSSL_PK_RSA, - "RSA", - rsa_get_size, - rsa_can_do, - rsa_verify_wrap, - rsa_sign_wrap, - rsa_decrypt_wrap, - rsa_encrypt_wrap, - rsa_alloc_wrap, - rsa_free_wrap, - rsa_debug, -}; -#endif /* POLARSSL_RSA_C */ - -#if defined(POLARSSL_ECP_C) -/* - * Generic EC key - */ -SSL_ROM_TEXT_SECTION -static int eckey_can_do( pk_type_t type ) -{ - return( type == POLARSSL_PK_ECKEY || - type == POLARSSL_PK_ECKEY_DH || - type == POLARSSL_PK_ECDSA ); -} - -SSL_ROM_TEXT_SECTION -static size_t eckey_get_size( const void *ctx ) -{ - return( ((ecp_keypair *) ctx)->grp.pbits ); -} - -#if defined(POLARSSL_ECDSA_C) -/* Forward declarations */ -static int ecdsa_verify_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ); - -static int ecdsa_sign_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); - -SSL_ROM_TEXT_SECTION -static int eckey_verify_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) -{ - int ret; - ecdsa_context ecdsa; - - ecdsa_init( &ecdsa ); - - if( ( ret = ecdsa_from_keypair( &ecdsa, ctx ) ) == 0 ) - ret = ecdsa_verify_wrap( &ecdsa, md_alg, hash, hash_len, sig, sig_len ); - - ecdsa_free( &ecdsa ); - - return( ret ); -} - -SSL_ROM_TEXT_SECTION -static int eckey_sign_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret; - ecdsa_context ecdsa; - - ecdsa_init( &ecdsa ); - - if( ( ret = ecdsa_from_keypair( &ecdsa, ctx ) ) == 0 ) - ret = ecdsa_sign_wrap( &ecdsa, md_alg, hash, hash_len, sig, sig_len, - f_rng, p_rng ); - - ecdsa_free( &ecdsa ); - - return( ret ); -} - -#endif /* POLARSSL_ECDSA_C */ - -SSL_ROM_TEXT_SECTION -static void *eckey_alloc_wrap( void ) -{ - void *ctx = polarssl_malloc( sizeof( ecp_keypair ) ); - - if( ctx != NULL ) - ecp_keypair_init( ctx ); - - return( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void eckey_free_wrap( void *ctx ) -{ - ecp_keypair_free( (ecp_keypair *) ctx ); - polarssl_free( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void eckey_debug( const void *ctx, pk_debug_item *items ) -{ - items->type = POLARSSL_PK_DEBUG_ECP; - items->name = "eckey.Q"; - items->value = &( ((ecp_keypair *) ctx)->Q ); -} - -SSL_ROM_DATA_SECTION -const pk_info_t eckey_info = { - POLARSSL_PK_ECKEY, - "EC", - eckey_get_size, - eckey_can_do, -#if defined(POLARSSL_ECDSA_C) - eckey_verify_wrap, - eckey_sign_wrap, -#else - NULL, - NULL, -#endif - NULL, - NULL, - eckey_alloc_wrap, - eckey_free_wrap, - eckey_debug, -}; - -/* - * EC key restricted to ECDH - */ -SSL_ROM_TEXT_SECTION -static int eckeydh_can_do( pk_type_t type ) -{ - return( type == POLARSSL_PK_ECKEY || - type == POLARSSL_PK_ECKEY_DH ); -} - -SSL_ROM_DATA_SECTION -const pk_info_t eckeydh_info = { - POLARSSL_PK_ECKEY_DH, - "EC_DH", - eckey_get_size, /* Same underlying key structure */ - eckeydh_can_do, - NULL, - NULL, - NULL, - NULL, - eckey_alloc_wrap, /* Same underlying key structure */ - eckey_free_wrap, /* Same underlying key structure */ - eckey_debug, /* Same underlying key structure */ -}; -#endif /* POLARSSL_ECP_C */ - -#if defined(POLARSSL_ECDSA_C) -SSL_ROM_TEXT_SECTION -static int ecdsa_can_do( pk_type_t type ) -{ - return( type == POLARSSL_PK_ECDSA ); -} - -SSL_ROM_TEXT_SECTION -static int ecdsa_verify_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) -{ - int ret; - ((void) md_alg); - - ret = ecdsa_read_signature( (ecdsa_context *) ctx, - hash, hash_len, sig, sig_len ); - - if( ret == POLARSSL_ERR_ECP_SIG_LEN_MISMATCH ) - return( POLARSSL_ERR_PK_SIG_LEN_MISMATCH ); - - return( ret ); -} - -SSL_ROM_TEXT_SECTION -static int ecdsa_sign_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - /* Use deterministic ECDSA by default if available */ -#if defined(POLARSSL_ECDSA_DETERMINISTIC) - ((void) f_rng); - ((void) p_rng); - - return( ecdsa_write_signature_det( (ecdsa_context *) ctx, - hash, hash_len, sig, sig_len, md_alg ) ); -#else - ((void) md_alg); - - return( ecdsa_write_signature( (ecdsa_context *) ctx, - hash, hash_len, sig, sig_len, f_rng, p_rng ) ); -#endif /* POLARSSL_ECDSA_DETERMINISTIC */ -} - -SSL_ROM_TEXT_SECTION -static void *ecdsa_alloc_wrap( void ) -{ - void *ctx = polarssl_malloc( sizeof( ecdsa_context ) ); - - if( ctx != NULL ) - ecdsa_init( (ecdsa_context *) ctx ); - - return( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void ecdsa_free_wrap( void *ctx ) -{ - ecdsa_free( (ecdsa_context *) ctx ); - polarssl_free( ctx ); -} - -SSL_ROM_DATA_SECTION -const pk_info_t ecdsa_info = { - POLARSSL_PK_ECDSA, - "ECDSA", - eckey_get_size, /* Compatible key structures */ - ecdsa_can_do, - ecdsa_verify_wrap, - ecdsa_sign_wrap, - NULL, - NULL, - ecdsa_alloc_wrap, - ecdsa_free_wrap, - eckey_debug, /* Compatible key structures */ -}; -#endif /* POLARSSL_ECDSA_C */ - -/* - * Support for alternative RSA-private implementations - */ -SSL_ROM_TEXT_SECTION -static int rsa_alt_can_do( pk_type_t type ) -{ - return( type == POLARSSL_PK_RSA ); -} - -SSL_ROM_TEXT_SECTION -static size_t rsa_alt_get_size( const void *ctx ) -{ - const rsa_alt_context *rsa_alt = (const rsa_alt_context *) ctx; - - return( 8 * rsa_alt->key_len_func( rsa_alt->key ) ); -} - -SSL_ROM_TEXT_SECTION -static int rsa_alt_sign_wrap( void *ctx, md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - rsa_alt_context *rsa_alt = (rsa_alt_context *) ctx; - - *sig_len = rsa_alt->key_len_func( rsa_alt->key ); - - return( rsa_alt->sign_func( rsa_alt->key, f_rng, p_rng, RSA_PRIVATE, - md_alg, (unsigned int) hash_len, hash, sig ) ); -} - -SSL_ROM_TEXT_SECTION -static int rsa_alt_decrypt_wrap( void *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - rsa_alt_context *rsa_alt = (rsa_alt_context *) ctx; - - ((void) f_rng); - ((void) p_rng); - - if( ilen != rsa_alt->key_len_func( rsa_alt->key ) ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - return( rsa_alt->decrypt_func( rsa_alt->key, - RSA_PRIVATE, olen, input, output, osize ) ); -} - -SSL_ROM_TEXT_SECTION -static void *rsa_alt_alloc_wrap( void ) -{ - void *ctx = polarssl_malloc( sizeof( rsa_alt_context ) ); - - if( ctx != NULL ) - memset( ctx, 0, sizeof( rsa_alt_context ) ); - - return( ctx ); -} - -SSL_ROM_TEXT_SECTION -static void rsa_alt_free_wrap( void *ctx ) -{ - polarssl_zeroize( ctx, sizeof( rsa_alt_context ) ); - polarssl_free( ctx ); -} - -SSL_ROM_DATA_SECTION -const pk_info_t rsa_alt_info = { - POLARSSL_PK_RSA_ALT, - "RSA-alt", - rsa_alt_get_size, - rsa_alt_can_do, - NULL, - rsa_alt_sign_wrap, - rsa_alt_decrypt_wrap, - NULL, - rsa_alt_alloc_wrap, - rsa_alt_free_wrap, - NULL, -}; - -#endif /* POLARSSL_PK_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/pkwrite.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/pkwrite.c deleted file mode 100644 index 335f322..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/pkwrite.c +++ /dev/null @@ -1,366 +0,0 @@ -/* - * Public Key layer for writing key files and structures - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_PK_WRITE_C) - -#include "polarssl/pk.h" -#include "polarssl/asn1write.h" -#include "polarssl/oid.h" - -#if defined(POLARSSL_RSA_C) -#include "polarssl/rsa.h" -#endif -#if defined(POLARSSL_ECP_C) -#include "polarssl/ecp.h" -#endif -#if defined(POLARSSL_ECDSA_C) -#include "polarssl/ecdsa.h" -#endif -#if defined(POLARSSL_PEM_WRITE_C) -#include "polarssl/pem.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#include -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#if defined(POLARSSL_RSA_C) -/* - * RSAPublicKey ::= SEQUENCE { - * modulus INTEGER, -- n - * publicExponent INTEGER -- e - * } - */ -SSL_ROM_TEXT_SECTION -static int pk_write_rsa_pubkey( unsigned char **p, unsigned char *start, - rsa_context *rsa ) -{ - int ret; - size_t len = 0; - - ASN1_CHK_ADD( len, asn1_write_mpi( p, start, &rsa->E ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( p, start, &rsa->N ) ); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - return( (int) len ); -} -#endif /* POLARSSL_RSA_C */ - -#if defined(POLARSSL_ECP_C) -/* - * EC public key is an EC point - */ -SSL_ROM_TEXT_SECTION -static int pk_write_ec_pubkey( unsigned char **p, unsigned char *start, - ecp_keypair *ec ) -{ - int ret; - size_t len = 0; - unsigned char buf[POLARSSL_ECP_MAX_PT_LEN]; - - if( ( ret = ecp_point_write_binary( &ec->grp, &ec->Q, - POLARSSL_ECP_PF_UNCOMPRESSED, - &len, buf, sizeof( buf ) ) ) != 0 ) - { - return( ret ); - } - - if( *p - start < (int) len ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - *p -= len; - memcpy( *p, buf, len ); - - return( (int) len ); -} - -/* - * ECParameters ::= CHOICE { - * namedCurve OBJECT IDENTIFIER - * } - */ -SSL_ROM_TEXT_SECTION -static int pk_write_ec_param( unsigned char **p, unsigned char *start, - ecp_keypair *ec ) -{ - int ret; - size_t len = 0; - const char *oid; - size_t oid_len; - - if( ( ret = oid_get_oid_by_ec_grp( ec->grp.id, &oid, &oid_len ) ) != 0 ) - return( ret ); - - ASN1_CHK_ADD( len, asn1_write_oid( p, start, oid, oid_len ) ); - - return( (int) len ); -} -#endif /* POLARSSL_ECP_C */ - -SSL_ROM_TEXT_SECTION -int pk_write_pubkey( unsigned char **p, unsigned char *start, - const pk_context *key ) -{ - int ret; - size_t len = 0; - -#if defined(POLARSSL_RSA_C) - if( pk_get_type( key ) == POLARSSL_PK_RSA ) - ASN1_CHK_ADD( len, pk_write_rsa_pubkey( p, start, pk_rsa( *key ) ) ); - else -#endif -#if defined(POLARSSL_ECP_C) - if( pk_get_type( key ) == POLARSSL_PK_ECKEY ) - ASN1_CHK_ADD( len, pk_write_ec_pubkey( p, start, pk_ec( *key ) ) ); - else -#endif - return( POLARSSL_ERR_PK_FEATURE_UNAVAILABLE ); - - return( (int) len ); -} - -SSL_ROM_TEXT_SECTION -int pk_write_pubkey_der( pk_context *key, unsigned char *buf, size_t size ) -{ - int ret; - unsigned char *c; - size_t len = 0, par_len = 0, oid_len; - const char *oid; - - c = buf + size; - - ASN1_CHK_ADD( len, pk_write_pubkey( &c, buf, key ) ); - - if( c - buf < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - /* - * SubjectPublicKeyInfo ::= SEQUENCE { - * algorithm AlgorithmIdentifier, - * subjectPublicKey BIT STRING } - */ - *--c = 0; - len += 1; - - ASN1_CHK_ADD( len, asn1_write_len( &c, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, buf, ASN1_BIT_STRING ) ); - - if( ( ret = oid_get_oid_by_pk_alg( pk_get_type( key ), - &oid, &oid_len ) ) != 0 ) - { - return( ret ); - } - -#if defined(POLARSSL_ECP_C) - if( pk_get_type( key ) == POLARSSL_PK_ECKEY ) - { - ASN1_CHK_ADD( par_len, pk_write_ec_param( &c, buf, pk_ec( *key ) ) ); - } -#endif - - ASN1_CHK_ADD( len, asn1_write_algorithm_identifier( &c, buf, oid, oid_len, - par_len ) ); - - ASN1_CHK_ADD( len, asn1_write_len( &c, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - return( (int) len ); -} - -SSL_ROM_TEXT_SECTION -int pk_write_key_der( pk_context *key, unsigned char *buf, size_t size ) -{ - int ret; - unsigned char *c = buf + size; - size_t len = 0; - -#if defined(POLARSSL_RSA_C) - if( pk_get_type( key ) == POLARSSL_PK_RSA ) - { - rsa_context *rsa = pk_rsa( *key ); - - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->QP ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->DQ ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->DP ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->Q ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->P ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->D ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->E ) ); - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &rsa->N ) ); - ASN1_CHK_ADD( len, asn1_write_int( &c, buf, 0 ) ); - - ASN1_CHK_ADD( len, asn1_write_len( &c, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - } - else -#endif /* POLARSSL_RSA_C */ -#if defined(POLARSSL_ECP_C) - if( pk_get_type( key ) == POLARSSL_PK_ECKEY ) - { - ecp_keypair *ec = pk_ec( *key ); - size_t pub_len = 0, par_len = 0; - - /* - * RFC 5915, or SEC1 Appendix C.4 - * - * ECPrivateKey ::= SEQUENCE { - * version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), - * privateKey OCTET STRING, - * parameters [0] ECParameters {{ NamedCurve }} OPTIONAL, - * publicKey [1] BIT STRING OPTIONAL - * } - */ - - /* publicKey */ - ASN1_CHK_ADD( pub_len, pk_write_ec_pubkey( &c, buf, ec ) ); - - if( c - buf < 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - *--c = 0; - pub_len += 1; - - ASN1_CHK_ADD( pub_len, asn1_write_len( &c, buf, pub_len ) ); - ASN1_CHK_ADD( pub_len, asn1_write_tag( &c, buf, ASN1_BIT_STRING ) ); - - ASN1_CHK_ADD( pub_len, asn1_write_len( &c, buf, pub_len ) ); - ASN1_CHK_ADD( pub_len, asn1_write_tag( &c, buf, - ASN1_CONTEXT_SPECIFIC | ASN1_CONSTRUCTED | 1 ) ); - len += pub_len; - - /* parameters */ - ASN1_CHK_ADD( par_len, pk_write_ec_param( &c, buf, ec ) ); - - ASN1_CHK_ADD( par_len, asn1_write_len( &c, buf, par_len ) ); - ASN1_CHK_ADD( par_len, asn1_write_tag( &c, buf, - ASN1_CONTEXT_SPECIFIC | ASN1_CONSTRUCTED | 0 ) ); - len += par_len; - - /* privateKey: write as MPI then fix tag */ - ASN1_CHK_ADD( len, asn1_write_mpi( &c, buf, &ec->d ) ); - *c = ASN1_OCTET_STRING; - - /* version */ - ASN1_CHK_ADD( len, asn1_write_int( &c, buf, 1 ) ); - - ASN1_CHK_ADD( len, asn1_write_len( &c, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - } - else -#endif /* POLARSSL_ECP_C */ - return( POLARSSL_ERR_PK_FEATURE_UNAVAILABLE ); - - return( (int) len ); -} - -#if defined(POLARSSL_PEM_WRITE_C) - -#define PEM_BEGIN_PUBLIC_KEY "-----BEGIN PUBLIC KEY-----\n" -#define PEM_END_PUBLIC_KEY "-----END PUBLIC KEY-----\n" - -#define PEM_BEGIN_PRIVATE_KEY_RSA "-----BEGIN RSA PRIVATE KEY-----\n" -#define PEM_END_PRIVATE_KEY_RSA "-----END RSA PRIVATE KEY-----\n" -#define PEM_BEGIN_PRIVATE_KEY_EC "-----BEGIN EC PRIVATE KEY-----\n" -#define PEM_END_PRIVATE_KEY_EC "-----END EC PRIVATE KEY-----\n" - -SSL_ROM_TEXT_SECTION -int pk_write_pubkey_pem( pk_context *key, unsigned char *buf, size_t size ) -{ - int ret; - unsigned char output_buf[4096]; - size_t olen = 0; - - if( ( ret = pk_write_pubkey_der( key, output_buf, - sizeof(output_buf) ) ) < 0 ) - { - return( ret ); - } - - if( ( ret = pem_write_buffer( PEM_BEGIN_PUBLIC_KEY, PEM_END_PUBLIC_KEY, - output_buf + sizeof(output_buf) - ret, - ret, buf, size, &olen ) ) != 0 ) - { - return( ret ); - } - - return( 0 ); -} - -SSL_ROM_TEXT_SECTION -int pk_write_key_pem( pk_context *key, unsigned char *buf, size_t size ) -{ - int ret; - unsigned char output_buf[4096]; - const char *begin, *end; - size_t olen = 0; - - if( ( ret = pk_write_key_der( key, output_buf, sizeof(output_buf) ) ) < 0 ) - return( ret ); - -#if defined(POLARSSL_RSA_C) - if( pk_get_type( key ) == POLARSSL_PK_RSA ) - { - begin = PEM_BEGIN_PRIVATE_KEY_RSA; - end = PEM_END_PRIVATE_KEY_RSA; - } - else -#endif -#if defined(POLARSSL_ECP_C) - if( pk_get_type( key ) == POLARSSL_PK_ECKEY ) - { - begin = PEM_BEGIN_PRIVATE_KEY_EC; - end = PEM_END_PRIVATE_KEY_EC; - } - else -#endif - return( POLARSSL_ERR_PK_FEATURE_UNAVAILABLE ); - - if( ( ret = pem_write_buffer( begin, end, - output_buf + sizeof(output_buf) - ret, - ret, buf, size, &olen ) ) != 0 ) - { - return( ret ); - } - - return( 0 ); -} -#endif /* POLARSSL_PEM_WRITE_C */ - -#endif /* POLARSSL_PK_WRITE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/rsa.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/rsa.c deleted file mode 100644 index 544fb38..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/rsa.c +++ /dev/null @@ -1,1689 +0,0 @@ -/* - * The RSA public-key cryptosystem - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * RSA was designed by Ron Rivest, Adi Shamir and Len Adleman. - * - * http://theory.lcs.mit.edu/~rivest/rsapaper.pdf - * http://www.cacr.math.uwaterloo.ca/hac/about/chap8.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_RSA_C) - -#include "polarssl/rsa.h" -#include "polarssl/oid.h" - -#if defined(POLARSSL_PKCS1_V21) -#include "polarssl/md.h" -#endif - -#include -#include - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* - * Initialize an RSA context - */ -SSL_ROM_TEXT_SECTION -void rsa_init( rsa_context *ctx, - int padding, - int hash_id ) -{ - memset( ctx, 0, sizeof( rsa_context ) ); - - rsa_set_padding( ctx, padding, hash_id ); - -#if defined(POLARSSL_THREADING_C) - polarssl_mutex_init( &ctx->mutex ); -#endif -} - -/* - * Set padding for an existing RSA context - */ -SSL_ROM_TEXT_SECTION -void rsa_set_padding( rsa_context *ctx, int padding, int hash_id ) -{ - ctx->padding = padding; - ctx->hash_id = hash_id; -} - -#if defined(POLARSSL_GENPRIME) - -/* - * Generate an RSA keypair - */ -SSL_ROM_TEXT_SECTION -int rsa_gen_key( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - unsigned int nbits, int exponent ) -{ - int ret; - mpi P1, Q1, H, G; - - if( f_rng == NULL || nbits < 128 || exponent < 3 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - mpi_init( &P1 ); mpi_init( &Q1 ); mpi_init( &H ); mpi_init( &G ); - - /* - * find primes P and Q with Q < P so that: - * GCD( E, (P-1)*(Q-1) ) == 1 - */ - MPI_CHK( mpi_lset( &ctx->E, exponent ) ); - - do - { - MPI_CHK( mpi_gen_prime( &ctx->P, ( nbits + 1 ) >> 1, 0, - f_rng, p_rng ) ); - - MPI_CHK( mpi_gen_prime( &ctx->Q, ( nbits + 1 ) >> 1, 0, - f_rng, p_rng ) ); - - if( mpi_cmp_mpi( &ctx->P, &ctx->Q ) < 0 ) - mpi_swap( &ctx->P, &ctx->Q ); - - if( mpi_cmp_mpi( &ctx->P, &ctx->Q ) == 0 ) - continue; - - MPI_CHK( mpi_mul_mpi( &ctx->N, &ctx->P, &ctx->Q ) ); - if( mpi_msb( &ctx->N ) != nbits ) - continue; - - MPI_CHK( mpi_sub_int( &P1, &ctx->P, 1 ) ); - MPI_CHK( mpi_sub_int( &Q1, &ctx->Q, 1 ) ); - MPI_CHK( mpi_mul_mpi( &H, &P1, &Q1 ) ); - MPI_CHK( mpi_gcd( &G, &ctx->E, &H ) ); - } - while( mpi_cmp_int( &G, 1 ) != 0 ); - - /* - * D = E^-1 mod ((P-1)*(Q-1)) - * DP = D mod (P - 1) - * DQ = D mod (Q - 1) - * QP = Q^-1 mod P - */ - MPI_CHK( mpi_inv_mod( &ctx->D , &ctx->E, &H ) ); - MPI_CHK( mpi_mod_mpi( &ctx->DP, &ctx->D, &P1 ) ); - MPI_CHK( mpi_mod_mpi( &ctx->DQ, &ctx->D, &Q1 ) ); - MPI_CHK( mpi_inv_mod( &ctx->QP, &ctx->Q, &ctx->P ) ); - - ctx->len = ( mpi_msb( &ctx->N ) + 7 ) >> 3; - -cleanup: - - mpi_free( &P1 ); mpi_free( &Q1 ); mpi_free( &H ); mpi_free( &G ); - - if( ret != 0 ) - { - rsa_free( ctx ); - return( POLARSSL_ERR_RSA_KEY_GEN_FAILED + ret ); - } - - return( 0 ); -} - -#endif /* POLARSSL_GENPRIME */ - -/* - * Check a public RSA key - */ -SSL_ROM_TEXT_SECTION -int rsa_check_pubkey( const rsa_context *ctx ) -{ - if( !ctx->N.p || !ctx->E.p ) - return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); - - if( ( ctx->N.p[0] & 1 ) == 0 || - ( ctx->E.p[0] & 1 ) == 0 ) - return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); - - if( mpi_msb( &ctx->N ) < 128 || - mpi_msb( &ctx->N ) > POLARSSL_MPI_MAX_BITS ) - return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); - - if( mpi_msb( &ctx->E ) < 2 || - mpi_cmp_mpi( &ctx->E, &ctx->N ) >= 0 ) - return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); - - return( 0 ); -} - -/* - * Check a private RSA key - */ -SSL_ROM_TEXT_SECTION -int rsa_check_privkey( const rsa_context *ctx ) -{ - int ret; - mpi PQ, DE, P1, Q1, H, I, G, G2, L1, L2, DP, DQ, QP; - - if( ( ret = rsa_check_pubkey( ctx ) ) != 0 ) - return( ret ); - - if( !ctx->P.p || !ctx->Q.p || !ctx->D.p ) - return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); - - mpi_init( &PQ ); mpi_init( &DE ); mpi_init( &P1 ); mpi_init( &Q1 ); - mpi_init( &H ); mpi_init( &I ); mpi_init( &G ); mpi_init( &G2 ); - mpi_init( &L1 ); mpi_init( &L2 ); mpi_init( &DP ); mpi_init( &DQ ); - mpi_init( &QP ); - - MPI_CHK( mpi_mul_mpi( &PQ, &ctx->P, &ctx->Q ) ); - MPI_CHK( mpi_mul_mpi( &DE, &ctx->D, &ctx->E ) ); - MPI_CHK( mpi_sub_int( &P1, &ctx->P, 1 ) ); - MPI_CHK( mpi_sub_int( &Q1, &ctx->Q, 1 ) ); - MPI_CHK( mpi_mul_mpi( &H, &P1, &Q1 ) ); - MPI_CHK( mpi_gcd( &G, &ctx->E, &H ) ); - - MPI_CHK( mpi_gcd( &G2, &P1, &Q1 ) ); - MPI_CHK( mpi_div_mpi( &L1, &L2, &H, &G2 ) ); - MPI_CHK( mpi_mod_mpi( &I, &DE, &L1 ) ); - - MPI_CHK( mpi_mod_mpi( &DP, &ctx->D, &P1 ) ); - MPI_CHK( mpi_mod_mpi( &DQ, &ctx->D, &Q1 ) ); - MPI_CHK( mpi_inv_mod( &QP, &ctx->Q, &ctx->P ) ); - /* - * Check for a valid PKCS1v2 private key - */ - if( mpi_cmp_mpi( &PQ, &ctx->N ) != 0 || - mpi_cmp_mpi( &DP, &ctx->DP ) != 0 || - mpi_cmp_mpi( &DQ, &ctx->DQ ) != 0 || - mpi_cmp_mpi( &QP, &ctx->QP ) != 0 || - mpi_cmp_int( &L2, 0 ) != 0 || - mpi_cmp_int( &I, 1 ) != 0 || - mpi_cmp_int( &G, 1 ) != 0 ) - { - ret = POLARSSL_ERR_RSA_KEY_CHECK_FAILED; - } - -cleanup: - mpi_free( &PQ ); mpi_free( &DE ); mpi_free( &P1 ); mpi_free( &Q1 ); - mpi_free( &H ); mpi_free( &I ); mpi_free( &G ); mpi_free( &G2 ); - mpi_free( &L1 ); mpi_free( &L2 ); mpi_free( &DP ); mpi_free( &DQ ); - mpi_free( &QP ); - - if( ret == POLARSSL_ERR_RSA_KEY_CHECK_FAILED ) - return( ret ); - - if( ret != 0 ) - return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED + ret ); - - return( 0 ); -} - -/* - * Do an RSA public key operation - */ -SSL_ROM_TEXT_SECTION -int rsa_public( rsa_context *ctx, - const unsigned char *input, - unsigned char *output ) -{ - int ret; - size_t olen; - mpi T; - - mpi_init( &T ); - - MPI_CHK( mpi_read_binary( &T, input, ctx->len ) ); - - if( mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) - { - mpi_free( &T ); - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - } - - olen = ctx->len; - MPI_CHK( mpi_exp_mod( &T, &T, &ctx->E, &ctx->N, &ctx->RN ) ); - MPI_CHK( mpi_write_binary( &T, output, olen ) ); - -cleanup: - - mpi_free( &T ); - - if( ret != 0 ) - return( POLARSSL_ERR_RSA_PUBLIC_FAILED + ret ); - - return( 0 ); -} - -#if !defined(POLARSSL_RSA_NO_CRT) -/* - * Generate or update blinding values, see section 10 of: - * KOCHER, Paul C. Timing attacks on implementations of Diffie-Hellman, RSA, - * DSS, and other systems. In : Advances in Cryptology—CRYPTO?6. Springer - * Berlin Heidelberg, 1996. p. 104-113. - */ -SSL_ROM_TEXT_SECTION -static int rsa_prepare_blinding( rsa_context *ctx, mpi *Vi, mpi *Vf, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret, count = 0; - -#if defined(POLARSSL_THREADING_C) - polarssl_mutex_lock( &ctx->mutex ); -#endif - - if( ctx->Vf.p != NULL ) - { - /* We already have blinding values, just update them by squaring */ - MPI_CHK( mpi_mul_mpi( &ctx->Vi, &ctx->Vi, &ctx->Vi ) ); - MPI_CHK( mpi_mod_mpi( &ctx->Vi, &ctx->Vi, &ctx->N ) ); - MPI_CHK( mpi_mul_mpi( &ctx->Vf, &ctx->Vf, &ctx->Vf ) ); - MPI_CHK( mpi_mod_mpi( &ctx->Vf, &ctx->Vf, &ctx->N ) ); - - goto done; - } - - /* Unblinding value: Vf = random number, invertible mod N */ - do { - if( count++ > 10 ) - return( POLARSSL_ERR_RSA_RNG_FAILED ); - - MPI_CHK( mpi_fill_random( &ctx->Vf, ctx->len - 1, f_rng, p_rng ) ); - MPI_CHK( mpi_gcd( &ctx->Vi, &ctx->Vf, &ctx->N ) ); - } while( mpi_cmp_int( &ctx->Vi, 1 ) != 0 ); - - /* Blinding value: Vi = Vf^(-e) mod N */ - MPI_CHK( mpi_inv_mod( &ctx->Vi, &ctx->Vf, &ctx->N ) ); - MPI_CHK( mpi_exp_mod( &ctx->Vi, &ctx->Vi, &ctx->E, &ctx->N, &ctx->RN ) ); - -done: - if( Vi != &ctx->Vi ) - { - MPI_CHK( mpi_copy( Vi, &ctx->Vi ) ); - MPI_CHK( mpi_copy( Vf, &ctx->Vf ) ); - } - -cleanup: -#if defined(POLARSSL_THREADING_C) - polarssl_mutex_unlock( &ctx->mutex ); -#endif - - return( ret ); -} -#endif /* !POLARSSL_RSA_NO_CRT */ - -/* - * Do an RSA private key operation - */ -SSL_ROM_TEXT_SECTION -int rsa_private( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - const unsigned char *input, - unsigned char *output ) -{ - int ret; - size_t olen; - mpi T, T1, T2; -#if !defined(POLARSSL_RSA_NO_CRT) - mpi *Vi, *Vf; - - /* - * When using the Chinese Remainder Theorem, we use blinding values. - * Without threading, we just read them directly from the context, - * otherwise we make a local copy in order to reduce locking contention. - */ -#if defined(POLARSSL_THREADING_C) - mpi Vi_copy, Vf_copy; - - mpi_init( &Vi_copy ); mpi_init( &Vf_copy ); - Vi = &Vi_copy; - Vf = &Vf_copy; -#else - Vi = &ctx->Vi; - Vf = &ctx->Vf; -#endif -#endif /* !POLARSSL_RSA_NO_CRT */ - - mpi_init( &T ); mpi_init( &T1 ); mpi_init( &T2 ); - - MPI_CHK( mpi_read_binary( &T, input, ctx->len ) ); - if( mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) - { - mpi_free( &T ); - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - } - -#if defined(POLARSSL_RSA_NO_CRT) - ((void) f_rng); - ((void) p_rng); - MPI_CHK( mpi_exp_mod( &T, &T, &ctx->D, &ctx->N, &ctx->RN ) ); -#else - if( f_rng != NULL ) - { - /* - * Blinding - * T = T * Vi mod N - */ - MPI_CHK( rsa_prepare_blinding( ctx, Vi, Vf, f_rng, p_rng ) ); - MPI_CHK( mpi_mul_mpi( &T, &T, Vi ) ); - MPI_CHK( mpi_mod_mpi( &T, &T, &ctx->N ) ); - } - - /* - * faster decryption using the CRT - * - * T1 = input ^ dP mod P - * T2 = input ^ dQ mod Q - */ - MPI_CHK( mpi_exp_mod( &T1, &T, &ctx->DP, &ctx->P, &ctx->RP ) ); - MPI_CHK( mpi_exp_mod( &T2, &T, &ctx->DQ, &ctx->Q, &ctx->RQ ) ); - - /* - * T = (T1 - T2) * (Q^-1 mod P) mod P - */ - MPI_CHK( mpi_sub_mpi( &T, &T1, &T2 ) ); - MPI_CHK( mpi_mul_mpi( &T1, &T, &ctx->QP ) ); - MPI_CHK( mpi_mod_mpi( &T, &T1, &ctx->P ) ); - - /* - * T = T2 + T * Q - */ - MPI_CHK( mpi_mul_mpi( &T1, &T, &ctx->Q ) ); - MPI_CHK( mpi_add_mpi( &T, &T2, &T1 ) ); - - if( f_rng != NULL ) - { - /* - * Unblind - * T = T * Vf mod N - */ - MPI_CHK( mpi_mul_mpi( &T, &T, Vf ) ); - MPI_CHK( mpi_mod_mpi( &T, &T, &ctx->N ) ); - } -#endif /* POLARSSL_RSA_NO_CRT */ - - olen = ctx->len; - MPI_CHK( mpi_write_binary( &T, output, olen ) ); - -cleanup: - mpi_free( &T ); mpi_free( &T1 ); mpi_free( &T2 ); -#if !defined(POLARSSL_RSA_NO_CRT) && defined(POLARSSL_THREADING_C) - mpi_free( &Vi_copy ); mpi_free( &Vf_copy ); -#endif - - if( ret != 0 ) - return( POLARSSL_ERR_RSA_PRIVATE_FAILED + ret ); - - return( 0 ); -} - -#if defined(POLARSSL_PKCS1_V21) -/** - * Generate and apply the MGF1 operation (from PKCS#1 v2.1) to a buffer. - * - * \param dst buffer to mask - * \param dlen length of destination buffer - * \param src source of the mask generation - * \param slen length of the source buffer - * \param md_ctx message digest context to use - */ -SSL_ROM_TEXT_SECTION -static void mgf_mask( unsigned char *dst, size_t dlen, unsigned char *src, - size_t slen, md_context_t *md_ctx ) -{ - unsigned char mask[POLARSSL_MD_MAX_SIZE]; - unsigned char counter[4]; - unsigned char *p; - unsigned int hlen; - size_t i, use_len; - - memset( mask, 0, POLARSSL_MD_MAX_SIZE ); - memset( counter, 0, 4 ); - - hlen = md_ctx->md_info->size; - - // Generate and apply dbMask - // - p = dst; - - while( dlen > 0 ) - { - use_len = hlen; - if( dlen < hlen ) - use_len = dlen; - - md_starts( md_ctx ); - md_update( md_ctx, src, slen ); - md_update( md_ctx, counter, 4 ); - md_finish( md_ctx, mask ); - - for( i = 0; i < use_len; ++i ) - *p++ ^= mask[i]; - - counter[3]++; - - dlen -= use_len; - } -} -#endif /* POLARSSL_PKCS1_V21 */ - -#if defined(POLARSSL_PKCS1_V21) -/* - * Implementation of the PKCS#1 v2.1 RSAES-OAEP-ENCRYPT function - */ -SSL_ROM_TEXT_SECTION -int rsa_rsaes_oaep_encrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - const unsigned char *label, size_t label_len, - size_t ilen, - const unsigned char *input, - unsigned char *output ) -{ - size_t olen; - int ret; - unsigned char *p = output; - unsigned int hlen; - const md_info_t *md_info; - md_context_t md_ctx; - - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V21 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - if( f_rng == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - md_info = md_info_from_type( ctx->hash_id ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - olen = ctx->len; - hlen = md_get_size( md_info ); - - if( olen < ilen + 2 * hlen + 2 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - memset( output, 0, olen ); - - *p++ = 0; - - // Generate a random octet string seed - // - if( ( ret = f_rng( p_rng, p, hlen ) ) != 0 ) - return( POLARSSL_ERR_RSA_RNG_FAILED + ret ); - - p += hlen; - - // Construct DB - // - md( md_info, label, label_len, p ); - p += hlen; - p += olen - 2 * hlen - 2 - ilen; - *p++ = 1; - memcpy( p, input, ilen ); - - md_init( &md_ctx ); - md_init_ctx( &md_ctx, md_info ); - - // maskedDB: Apply dbMask to DB - // - mgf_mask( output + hlen + 1, olen - hlen - 1, output + 1, hlen, - &md_ctx ); - - // maskedSeed: Apply seedMask to seed - // - mgf_mask( output + 1, hlen, output + hlen + 1, olen - hlen - 1, - &md_ctx ); - - md_free( &md_ctx ); - - return( ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, output, output ) - : rsa_private( ctx, f_rng, p_rng, output, output ) ); -} -#endif /* POLARSSL_PKCS1_V21 */ - -#if defined(POLARSSL_PKCS1_V15) -/* - * Implementation of the PKCS#1 v2.1 RSAES-PKCS1-V1_5-ENCRYPT function - */ -SSL_ROM_TEXT_SECTION -int rsa_rsaes_pkcs1_v15_encrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t ilen, - const unsigned char *input, - unsigned char *output ) -{ - size_t nb_pad, olen; - int ret; - unsigned char *p = output; - - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V15 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - if( f_rng == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - olen = ctx->len; - - if( olen < ilen + 11 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - nb_pad = olen - 3 - ilen; - - *p++ = 0; - if( mode == RSA_PUBLIC ) - { - *p++ = RSA_CRYPT; - - //while( nb_pad-- > 0 ) - while( nb_pad > 0 ) - { - nb_pad --; - int rng_dl = 100; - - do { - ret = f_rng( p_rng, p, 1 ); - } while( *p == 0 && --rng_dl && ret == 0 ); - - // Check if RNG failed to generate data - // - if( rng_dl == 0 || ret != 0 ) - return( POLARSSL_ERR_RSA_RNG_FAILED + ret ); - - p++; - } - } - else - { - *p++ = RSA_SIGN; - - //while( nb_pad-- > 0 ) - while( nb_pad > 0 ) - { - nb_pad --; - *p++ = 0xFF; - } - } - - *p++ = 0; - memcpy( p, input, ilen ); - - return( ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, output, output ) - : rsa_private( ctx, f_rng, p_rng, output, output ) ); -} -#endif /* POLARSSL_PKCS1_V15 */ - -/* - * Add the message padding, then do an RSA operation - */ -SSL_ROM_TEXT_SECTION -int rsa_pkcs1_encrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t ilen, - const unsigned char *input, - unsigned char *output ) -{ - switch( ctx->padding ) - { -#if defined(POLARSSL_PKCS1_V15) - case RSA_PKCS_V15: - return rsa_rsaes_pkcs1_v15_encrypt( ctx, f_rng, p_rng, mode, ilen, - input, output ); -#endif - -#if defined(POLARSSL_PKCS1_V21) - case RSA_PKCS_V21: - return rsa_rsaes_oaep_encrypt( ctx, f_rng, p_rng, mode, NULL, 0, - ilen, input, output ); -#endif - - default: - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - } -} - -#if defined(POLARSSL_PKCS1_V21) -/* - * Implementation of the PKCS#1 v2.1 RSAES-OAEP-DECRYPT function - */ -SSL_ROM_TEXT_SECTION -int rsa_rsaes_oaep_decrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - const unsigned char *label, size_t label_len, - size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len ) -{ - int ret; - size_t ilen, i, pad_len; - unsigned char *p, bad, pad_done; - unsigned char buf[POLARSSL_MPI_MAX_SIZE]; - unsigned char lhash[POLARSSL_MD_MAX_SIZE]; - unsigned int hlen; - const md_info_t *md_info; - md_context_t md_ctx; - - /* - * Parameters sanity checks - */ - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V21 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - ilen = ctx->len; - - if( ilen < 16 || ilen > sizeof( buf ) ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - md_info = md_info_from_type( ctx->hash_id ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - /* - * RSA operation - */ - ret = ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, input, buf ) - : rsa_private( ctx, f_rng, p_rng, input, buf ); - - if( ret != 0 ) - return( ret ); - - /* - * Unmask data and generate lHash - */ - hlen = md_get_size( md_info ); - - md_init( &md_ctx ); - md_init_ctx( &md_ctx, md_info ); - - /* Generate lHash */ - md( md_info, label, label_len, lhash ); - - /* seed: Apply seedMask to maskedSeed */ - mgf_mask( buf + 1, hlen, buf + hlen + 1, ilen - hlen - 1, - &md_ctx ); - - /* DB: Apply dbMask to maskedDB */ - mgf_mask( buf + hlen + 1, ilen - hlen - 1, buf + 1, hlen, - &md_ctx ); - - md_free( &md_ctx ); - - /* - * Check contents, in "constant-time" - */ - p = buf; - bad = 0; - - bad |= *p++; /* First byte must be 0 */ - - p += hlen; /* Skip seed */ - - /* Check lHash */ - for( i = 0; i < hlen; i++ ) - bad |= lhash[i] ^ *p++; - - /* Get zero-padding len, but always read till end of buffer - * (minus one, for the 01 byte) */ - pad_len = 0; - pad_done = 0; - for( i = 0; i < ilen - 2 * hlen - 2; i++ ) - { - pad_done |= p[i]; - pad_len += ( pad_done == 0 ); - } - - p += pad_len; - bad |= *p++ ^ 0x01; - - /* - * The only information "leaked" is whether the padding was correct or not - * (eg, no data is copied if it was not correct). This meets the - * recommendations in PKCS#1 v2.2: an opponent cannot distinguish between - * the different error conditions. - */ - if( bad != 0 ) - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - - if( ilen - ( p - buf ) > output_max_len ) - return( POLARSSL_ERR_RSA_OUTPUT_TOO_LARGE ); - - *olen = ilen - (p - buf); - memcpy( output, p, *olen ); - - return( 0 ); -} -#endif /* POLARSSL_PKCS1_V21 */ - -#if defined(POLARSSL_PKCS1_V15) -/* - * Implementation of the PKCS#1 v2.1 RSAES-PKCS1-V1_5-DECRYPT function - */ -SSL_ROM_TEXT_SECTION -int rsa_rsaes_pkcs1_v15_decrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len) -{ - int ret; - size_t ilen, pad_count = 0, i; - unsigned char *p, bad, pad_done = 0; - unsigned char buf[POLARSSL_MPI_MAX_SIZE]; - - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V15 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - ilen = ctx->len; - - if( ilen < 16 || ilen > sizeof( buf ) ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - ret = ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, input, buf ) - : rsa_private( ctx, f_rng, p_rng, input, buf ); - - if( ret != 0 ) - return( ret ); - - p = buf; - bad = 0; - - /* - * Check and get padding len in "constant-time" - */ - bad |= *p++; /* First byte must be 0 */ - - /* This test does not depend on secret data */ - if( mode == RSA_PRIVATE ) - { - bad |= *p++ ^ RSA_CRYPT; - - /* Get padding len, but always read till end of buffer - * (minus one, for the 00 byte) */ - for( i = 0; i < ilen - 3; i++ ) - { - pad_done |= ( p[i] == 0 ); - pad_count += ( pad_done == 0 ); - } - - p += pad_count; - bad |= *p++; /* Must be zero */ - } - else - { - bad |= *p++ ^ RSA_SIGN; - - /* Get padding len, but always read till end of buffer - * (minus one, for the 00 byte) */ - for( i = 0; i < ilen - 3; i++ ) - { - pad_done |= ( p[i] != 0xFF ); - pad_count += ( pad_done == 0 ); - } - - p += pad_count; - bad |= *p++; /* Must be zero */ - } - - if( bad ) - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - - if( ilen - ( p - buf ) > output_max_len ) - return( POLARSSL_ERR_RSA_OUTPUT_TOO_LARGE ); - - *olen = ilen - (p - buf); - memcpy( output, p, *olen ); - - return( 0 ); -} -#endif /* POLARSSL_PKCS1_V15 */ - -/* - * Do an RSA operation, then remove the message padding - */ -SSL_ROM_TEXT_SECTION -int rsa_pkcs1_decrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len) -{ - switch( ctx->padding ) - { -#if defined(POLARSSL_PKCS1_V15) - case RSA_PKCS_V15: - return rsa_rsaes_pkcs1_v15_decrypt( ctx, f_rng, p_rng, mode, olen, - input, output, output_max_len ); -#endif - -#if defined(POLARSSL_PKCS1_V21) - case RSA_PKCS_V21: - return rsa_rsaes_oaep_decrypt( ctx, f_rng, p_rng, mode, NULL, 0, - olen, input, output, - output_max_len ); -#endif - - default: - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - } -} - -#if defined(POLARSSL_PKCS1_V21) -/* - * Implementation of the PKCS#1 v2.1 RSASSA-PSS-SIGN function - */ -SSL_ROM_TEXT_SECTION -int rsa_rsassa_pss_sign( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) -{ - size_t olen; - unsigned char *p = sig; - unsigned char salt[POLARSSL_MD_MAX_SIZE]; - unsigned int slen, hlen, offset = 0; - int ret; - size_t msb; - const md_info_t *md_info; - md_context_t md_ctx; - - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V21 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - if( f_rng == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - olen = ctx->len; - - if( md_alg != POLARSSL_MD_NONE ) - { - // Gather length of hash to sign - // - md_info = md_info_from_type( md_alg ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - hashlen = md_get_size( md_info ); - } - - md_info = md_info_from_type( ctx->hash_id ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - hlen = md_get_size( md_info ); - slen = hlen; - - if( olen < hlen + slen + 2 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - memset( sig, 0, olen ); - - // Generate salt of length slen - // - if( ( ret = f_rng( p_rng, salt, slen ) ) != 0 ) - return( POLARSSL_ERR_RSA_RNG_FAILED + ret ); - - // Note: EMSA-PSS encoding is over the length of N - 1 bits - // - msb = mpi_msb( &ctx->N ) - 1; - p += olen - hlen * 2 - 2; - *p++ = 0x01; - memcpy( p, salt, slen ); - p += slen; - - md_init( &md_ctx ); - md_init_ctx( &md_ctx, md_info ); - - // Generate H = Hash( M' ) - // - md_starts( &md_ctx ); - md_update( &md_ctx, p, 8 ); - md_update( &md_ctx, hash, hashlen ); - md_update( &md_ctx, salt, slen ); - md_finish( &md_ctx, p ); - - // Compensate for boundary condition when applying mask - // - if( msb % 8 == 0 ) - offset = 1; - - // maskedDB: Apply dbMask to DB - // - mgf_mask( sig + offset, olen - hlen - 1 - offset, p, hlen, &md_ctx ); - - md_free( &md_ctx ); - - msb = mpi_msb( &ctx->N ) - 1; - sig[0] &= 0xFF >> ( olen * 8 - msb ); - - p += hlen; - *p++ = 0xBC; - - return( ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, sig, sig ) - : rsa_private( ctx, f_rng, p_rng, sig, sig ) ); -} -#endif /* POLARSSL_PKCS1_V21 */ - -#if defined(POLARSSL_PKCS1_V15) -/* - * Implementation of the PKCS#1 v2.1 RSASSA-PKCS1-V1_5-SIGN function - */ -/* - * Do an RSA operation to sign the message digest - */ -SSL_ROM_TEXT_SECTION -int rsa_rsassa_pkcs1_v15_sign( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) -{ - size_t nb_pad, olen, oid_size = 0; - unsigned char *p = sig; - const char *oid; - - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V15 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - olen = ctx->len; - nb_pad = olen - 3; - - if( md_alg != POLARSSL_MD_NONE ) - { - const md_info_t *md_info = md_info_from_type( md_alg ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - if( oid_get_oid_by_md( md_alg, &oid, &oid_size ) != 0 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - nb_pad -= 10 + oid_size; - - hashlen = md_get_size( md_info ); - } - - nb_pad -= hashlen; - - if( ( nb_pad < 8 ) || ( nb_pad > olen ) ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - *p++ = 0; - *p++ = RSA_SIGN; - memset( p, 0xFF, nb_pad ); - p += nb_pad; - *p++ = 0; - - if( md_alg == POLARSSL_MD_NONE ) - { - memcpy( p, hash, hashlen ); - } - else - { - /* - * DigestInfo ::= SEQUENCE { - * digestAlgorithm DigestAlgorithmIdentifier, - * digest Digest } - * - * DigestAlgorithmIdentifier ::= AlgorithmIdentifier - * - * Digest ::= OCTET STRING - */ - *p++ = ASN1_SEQUENCE | ASN1_CONSTRUCTED; - *p++ = (unsigned char) ( 0x08 + oid_size + hashlen ); - *p++ = ASN1_SEQUENCE | ASN1_CONSTRUCTED; - *p++ = (unsigned char) ( 0x04 + oid_size ); - *p++ = ASN1_OID; - *p++ = oid_size & 0xFF; - memcpy( p, oid, oid_size ); - p += oid_size; - *p++ = ASN1_NULL; - *p++ = 0x00; - *p++ = ASN1_OCTET_STRING; - *p++ = hashlen; - memcpy( p, hash, hashlen ); - } - - return( ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, sig, sig ) - : rsa_private( ctx, f_rng, p_rng, sig, sig ) ); -} -#endif /* POLARSSL_PKCS1_V15 */ - -/* - * Do an RSA operation to sign the message digest - */ -SSL_ROM_TEXT_SECTION -int rsa_pkcs1_sign( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) -{ - switch( ctx->padding ) - { -#if defined(POLARSSL_PKCS1_V15) - case RSA_PKCS_V15: - return rsa_rsassa_pkcs1_v15_sign( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); -#endif - -#if defined(POLARSSL_PKCS1_V21) - case RSA_PKCS_V21: - return rsa_rsassa_pss_sign( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); -#endif - - default: - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - } -} - -#if defined(POLARSSL_PKCS1_V21) -/* - * Implementation of the PKCS#1 v2.1 RSASSA-PSS-VERIFY function - */ -SSL_ROM_TEXT_SECTION -int rsa_rsassa_pss_verify_ext( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - md_type_t mgf1_hash_id, - int expected_salt_len, - const unsigned char *sig ) -{ - int ret; - size_t siglen; - unsigned char *p; - unsigned char buf[POLARSSL_MPI_MAX_SIZE]; - unsigned char result[POLARSSL_MD_MAX_SIZE]; - unsigned char zeros[8]; - unsigned int hlen; - size_t slen, msb; - const md_info_t *md_info; - md_context_t md_ctx; - - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V21 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - siglen = ctx->len; - - if( siglen < 16 || siglen > sizeof( buf ) ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - ret = ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, sig, buf ) - : rsa_private( ctx, f_rng, p_rng, sig, buf ); - - if( ret != 0 ) - return( ret ); - - p = buf; - - if( buf[siglen - 1] != 0xBC ) - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - - if( md_alg != POLARSSL_MD_NONE ) - { - // Gather length of hash to sign - // - md_info = md_info_from_type( md_alg ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - hashlen = md_get_size( md_info ); - } - - md_info = md_info_from_type( mgf1_hash_id ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - hlen = md_get_size( md_info ); - slen = siglen - hlen - 1; /* Currently length of salt + padding */ - - memset( zeros, 0, 8 ); - - // Note: EMSA-PSS verification is over the length of N - 1 bits - // - msb = mpi_msb( &ctx->N ) - 1; - - // Compensate for boundary condition when applying mask - // - if( msb % 8 == 0 ) - { - p++; - siglen -= 1; - } - if( buf[0] >> ( 8 - siglen * 8 + msb ) ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - md_init( &md_ctx ); - md_init_ctx( &md_ctx, md_info ); - - mgf_mask( p, siglen - hlen - 1, p + siglen - hlen - 1, hlen, &md_ctx ); - - buf[0] &= 0xFF >> ( siglen * 8 - msb ); - - while( p < buf + siglen && *p == 0 ) - p++; - - if( p == buf + siglen || - *p++ != 0x01 ) - { - md_free( &md_ctx ); - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - } - - /* Actual salt len */ - slen -= p - buf; - - if( expected_salt_len != RSA_SALT_LEN_ANY && - slen != (size_t) expected_salt_len ) - { - md_free( &md_ctx ); - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - } - - // Generate H = Hash( M' ) - // - md_starts( &md_ctx ); - md_update( &md_ctx, zeros, 8 ); - md_update( &md_ctx, hash, hashlen ); - md_update( &md_ctx, p, slen ); - md_finish( &md_ctx, result ); - - md_free( &md_ctx ); - - if( memcmp( p + slen, result, hlen ) == 0 ) - return( 0 ); - else - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); -} - -/* - * Simplified PKCS#1 v2.1 RSASSA-PSS-VERIFY function - */ -SSL_ROM_TEXT_SECTION -int rsa_rsassa_pss_verify( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ) -{ - md_type_t mgf1_hash_id = ( ctx->hash_id != POLARSSL_MD_NONE ) - ? (md_type_t) ctx->hash_id - : md_alg; - - return( rsa_rsassa_pss_verify_ext( ctx, f_rng, p_rng, mode, - md_alg, hashlen, hash, - mgf1_hash_id, RSA_SALT_LEN_ANY, - sig ) ); - -} -#endif /* POLARSSL_PKCS1_V21 */ - -#if defined(POLARSSL_PKCS1_V15) -/* - * Implementation of the PKCS#1 v2.1 RSASSA-PKCS1-v1_5-VERIFY function - */ -SSL_ROM_TEXT_SECTION -int rsa_rsassa_pkcs1_v15_verify( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ) -{ - int ret; - size_t len, siglen, asn1_len; - unsigned char *p, *end; - unsigned char buf[POLARSSL_MPI_MAX_SIZE]; - md_type_t msg_md_alg; - const md_info_t *md_info; - asn1_buf oid; - - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V15 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - siglen = ctx->len; - - if( siglen < 16 || siglen > sizeof( buf ) ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - ret = ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, sig, buf ) - : rsa_private( ctx, f_rng, p_rng, sig, buf ); - - if( ret != 0 ) - return( ret ); - - p = buf; - - if( *p++ != 0 || *p++ != RSA_SIGN ) - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - - while( *p != 0 ) - { - if( p >= buf + siglen - 1 || *p != 0xFF ) - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - p++; - } - p++; - - len = siglen - ( p - buf ); - - if( len == hashlen && md_alg == POLARSSL_MD_NONE ) - { - if( memcmp( p, hash, hashlen ) == 0 ) - return( 0 ); - else - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - } - - md_info = md_info_from_type( md_alg ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - hashlen = md_get_size( md_info ); - - end = p + len; - - // Parse the ASN.1 structure inside the PKCS#1 v1.5 structure - // - if( ( ret = asn1_get_tag( &p, end, &asn1_len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( asn1_len + 2 != len ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( ( ret = asn1_get_tag( &p, end, &asn1_len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( asn1_len + 6 + hashlen != len ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( ( ret = asn1_get_tag( &p, end, &oid.len, ASN1_OID ) ) != 0 ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - oid.p = p; - p += oid.len; - - if( oid_get_md_alg( &oid, &msg_md_alg ) != 0 ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( md_alg != msg_md_alg ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - /* - * assume the algorithm parameters must be NULL - */ - if( ( ret = asn1_get_tag( &p, end, &asn1_len, ASN1_NULL ) ) != 0 ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( ( ret = asn1_get_tag( &p, end, &asn1_len, ASN1_OCTET_STRING ) ) != 0 ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( asn1_len != hashlen ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( memcmp( p, hash, hashlen ) != 0 ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - p += hashlen; - - if( p != end ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - return( 0 ); -} -#endif /* POLARSSL_PKCS1_V15 */ - -/* - * Do an RSA operation and check the message digest - */ -SSL_ROM_TEXT_SECTION -int rsa_pkcs1_verify( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ) -{ - switch( ctx->padding ) - { -#if defined(POLARSSL_PKCS1_V15) - case RSA_PKCS_V15: - return rsa_rsassa_pkcs1_v15_verify( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); -#endif - -#if defined(POLARSSL_PKCS1_V21) - case RSA_PKCS_V21: - return rsa_rsassa_pss_verify( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); -#endif - - default: - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - } -} - -/* - * Copy the components of an RSA key - */ -SSL_ROM_TEXT_SECTION -int rsa_copy( rsa_context *dst, const rsa_context *src ) -{ - int ret; - - dst->ver = src->ver; - dst->len = src->len; - - MPI_CHK( mpi_copy( &dst->N, &src->N ) ); - MPI_CHK( mpi_copy( &dst->E, &src->E ) ); - - MPI_CHK( mpi_copy( &dst->D, &src->D ) ); - MPI_CHK( mpi_copy( &dst->P, &src->P ) ); - MPI_CHK( mpi_copy( &dst->Q, &src->Q ) ); - MPI_CHK( mpi_copy( &dst->DP, &src->DP ) ); - MPI_CHK( mpi_copy( &dst->DQ, &src->DQ ) ); - MPI_CHK( mpi_copy( &dst->QP, &src->QP ) ); - - MPI_CHK( mpi_copy( &dst->RN, &src->RN ) ); - MPI_CHK( mpi_copy( &dst->RP, &src->RP ) ); - MPI_CHK( mpi_copy( &dst->RQ, &src->RQ ) ); - -#if !defined(POLARSSL_RSA_NO_CRT) - MPI_CHK( mpi_copy( &dst->Vi, &src->Vi ) ); - MPI_CHK( mpi_copy( &dst->Vf, &src->Vf ) ); -#endif - - dst->padding = src->padding; - dst->hash_id = src->hash_id; - -cleanup: - if( ret != 0 ) - rsa_free( dst ); - - return( ret ); -} - -/* - * Free the components of an RSA key - */ -SSL_ROM_TEXT_SECTION -void rsa_free( rsa_context *ctx ) -{ -#if !defined(POLARSSL_RSA_NO_CRT) - mpi_free( &ctx->Vi ); mpi_free( &ctx->Vf ); -#endif - mpi_free( &ctx->RQ ); mpi_free( &ctx->RP ); mpi_free( &ctx->RN ); - mpi_free( &ctx->QP ); mpi_free( &ctx->DQ ); mpi_free( &ctx->DP ); - mpi_free( &ctx->Q ); mpi_free( &ctx->P ); mpi_free( &ctx->D ); - mpi_free( &ctx->E ); mpi_free( &ctx->N ); - -#if defined(POLARSSL_THREADING_C) - polarssl_mutex_free( &ctx->mutex ); -#endif -} - -#if defined(POLARSSL_SELF_TEST) - -#include "polarssl/sha1.h" - -/* - * Example RSA-1024 keypair, for test purposes - */ -#define KEY_LEN 128 - -#define RSA_N "9292758453063D803DD603D5E777D788" \ - "8ED1D5BF35786190FA2F23EBC0848AEA" \ - "DDA92CA6C3D80B32C4D109BE0F36D6AE" \ - "7130B9CED7ACDF54CFC7555AC14EEBAB" \ - "93A89813FBF3C4F8066D2D800F7C38A8" \ - "1AE31942917403FF4946B0A83D3D3E05" \ - "EE57C6F5F5606FB5D4BC6CD34EE0801A" \ - "5E94BB77B07507233A0BC7BAC8F90F79" - -#define RSA_E "10001" - -#define RSA_D "24BF6185468786FDD303083D25E64EFC" \ - "66CA472BC44D253102F8B4A9D3BFA750" \ - "91386C0077937FE33FA3252D28855837" \ - "AE1B484A8A9A45F7EE8C0C634F99E8CD" \ - "DF79C5CE07EE72C7F123142198164234" \ - "CABB724CF78B8173B9F880FC86322407" \ - "AF1FEDFDDE2BEB674CA15F3E81A1521E" \ - "071513A1E85B5DFA031F21ECAE91A34D" - -#define RSA_P "C36D0EB7FCD285223CFB5AABA5BDA3D8" \ - "2C01CAD19EA484A87EA4377637E75500" \ - "FCB2005C5C7DD6EC4AC023CDA285D796" \ - "C3D9E75E1EFC42488BB4F1D13AC30A57" - -#define RSA_Q "C000DF51A7C77AE8D7C7370C1FF55B69" \ - "E211C2B9E5DB1ED0BF61D0D9899620F4" \ - "910E4168387E3C30AA1E00C339A79508" \ - "8452DD96A9A5EA5D9DCA68DA636032AF" - -#define RSA_DP "C1ACF567564274FB07A0BBAD5D26E298" \ - "3C94D22288ACD763FD8E5600ED4A702D" \ - "F84198A5F06C2E72236AE490C93F07F8" \ - "3CC559CD27BC2D1CA488811730BB5725" - -#define RSA_DQ "4959CBF6F8FEF750AEE6977C155579C7" \ - "D8AAEA56749EA28623272E4F7D0592AF" \ - "7C1F1313CAC9471B5C523BFE592F517B" \ - "407A1BD76C164B93DA2D32A383E58357" - -#define RSA_QP "9AE7FBC99546432DF71896FC239EADAE" \ - "F38D18D2B2F0E2DD275AA977E2BF4411" \ - "F5A3B2A5D33605AEBBCCBA7FEB9F2D2F" \ - "A74206CEC169D74BF5A8C50D6F48EA08" - -#define PT_LEN 24 -#define RSA_PT "\xAA\xBB\xCC\x03\x02\x01\x00\xFF\xFF\xFF\xFF\xFF" \ - "\x11\x22\x33\x0A\x0B\x0C\xCC\xDD\xDD\xDD\xDD\xDD" - -#if defined(POLARSSL_PKCS1_V15) -SSL_ROM_TEXT_SECTION -static int myrand( void *rng_state, unsigned char *output, size_t len ) -{ -#if !defined(__OpenBSD__) - size_t i; - - if( rng_state != NULL ) - rng_state = NULL; - - for( i = 0; i < len; ++i ) - output[i] = rand(); -#else - if( rng_state != NULL ) - rng_state = NULL; - - arc4random_buf( output, len ); -#endif /* !OpenBSD */ - - return( 0 ); -} -#endif /* POLARSSL_PKCS1_V15 */ - -/* - * Checkup routine - */ -SSL_ROM_TEXT_SECTION -int rsa_self_test( int verbose ) -{ - int ret = 0; -#if defined(POLARSSL_PKCS1_V15) - size_t len; - rsa_context rsa; - unsigned char rsa_plaintext[PT_LEN]; - unsigned char rsa_decrypted[PT_LEN]; - unsigned char rsa_ciphertext[KEY_LEN]; -#if defined(POLARSSL_SHA1_C) - unsigned char sha1sum[20]; -#endif - - rsa_init( &rsa, RSA_PKCS_V15, 0 ); - - rsa.len = KEY_LEN; - MPI_CHK( mpi_read_string( &rsa.N , 16, RSA_N ) ); - MPI_CHK( mpi_read_string( &rsa.E , 16, RSA_E ) ); - MPI_CHK( mpi_read_string( &rsa.D , 16, RSA_D ) ); - MPI_CHK( mpi_read_string( &rsa.P , 16, RSA_P ) ); - MPI_CHK( mpi_read_string( &rsa.Q , 16, RSA_Q ) ); - MPI_CHK( mpi_read_string( &rsa.DP, 16, RSA_DP ) ); - MPI_CHK( mpi_read_string( &rsa.DQ, 16, RSA_DQ ) ); - MPI_CHK( mpi_read_string( &rsa.QP, 16, RSA_QP ) ); - - if( verbose != 0 ) - polarssl_printf( " RSA key validation: " ); - - if( rsa_check_pubkey( &rsa ) != 0 || - rsa_check_privkey( &rsa ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n PKCS#1 encryption : " ); - - memcpy( rsa_plaintext, RSA_PT, PT_LEN ); - - if( rsa_pkcs1_encrypt( &rsa, myrand, NULL, RSA_PUBLIC, PT_LEN, - rsa_plaintext, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n PKCS#1 decryption : " ); - - if( rsa_pkcs1_decrypt( &rsa, myrand, NULL, RSA_PRIVATE, &len, - rsa_ciphertext, rsa_decrypted, - sizeof(rsa_decrypted) ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( memcmp( rsa_decrypted, rsa_plaintext, len ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - -#if defined(POLARSSL_SHA1_C) - if( verbose != 0 ) - polarssl_printf( "passed\n PKCS#1 data sign : " ); - - sha1( rsa_plaintext, PT_LEN, sha1sum ); - - if( rsa_pkcs1_sign( &rsa, myrand, NULL, RSA_PRIVATE, POLARSSL_MD_SHA1, 0, - sha1sum, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n PKCS#1 sig. verify: " ); - - if( rsa_pkcs1_verify( &rsa, NULL, NULL, RSA_PUBLIC, POLARSSL_MD_SHA1, 0, - sha1sum, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n\n" ); -#endif /* POLARSSL_SHA1_C */ - -cleanup: - rsa_free( &rsa ); -#else /* POLARSSL_PKCS1_V15 */ - ((void) verbose); -#endif /* POLARSSL_PKCS1_V15 */ - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_RSA_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/sha1.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/sha1.c deleted file mode 100644 index b0ce28c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/sha1.c +++ /dev/null @@ -1,676 +0,0 @@ -/* - * FIPS-180-1 compliant SHA-1 implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The SHA-1 standard was published by NIST in 1993. - * - * http://www.itl.nist.gov/fipspubs/fip180-1.htm - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_SHA1_C) - -#include "polarssl/sha1.h" - -#if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if !defined(POLARSSL_SHA1_ALT) - -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - -SSL_ROM_TEXT_SECTION -void sha1_init( sha1_context *ctx ) -{ - memset( ctx, 0, sizeof( sha1_context ) ); -} - -SSL_ROM_TEXT_SECTION -void sha1_free( sha1_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( sha1_context ) ); -} - -/* - * SHA-1 context setup - */ -SSL_ROM_TEXT_SECTION -void sha1_starts( sha1_context *ctx ) -{ - ctx->total[0] = 0; - ctx->total[1] = 0; - - ctx->state[0] = 0x67452301; - ctx->state[1] = 0xEFCDAB89; - ctx->state[2] = 0x98BADCFE; - ctx->state[3] = 0x10325476; - ctx->state[4] = 0xC3D2E1F0; -} - -SSL_ROM_TEXT_SECTION -void sha1_process( sha1_context *ctx, const unsigned char data[64] ) -{ - uint32_t temp, W[16], A, B, C, D, E; - - GET_UINT32_BE( W[ 0], data, 0 ); - GET_UINT32_BE( W[ 1], data, 4 ); - GET_UINT32_BE( W[ 2], data, 8 ); - GET_UINT32_BE( W[ 3], data, 12 ); - GET_UINT32_BE( W[ 4], data, 16 ); - GET_UINT32_BE( W[ 5], data, 20 ); - GET_UINT32_BE( W[ 6], data, 24 ); - GET_UINT32_BE( W[ 7], data, 28 ); - GET_UINT32_BE( W[ 8], data, 32 ); - GET_UINT32_BE( W[ 9], data, 36 ); - GET_UINT32_BE( W[10], data, 40 ); - GET_UINT32_BE( W[11], data, 44 ); - GET_UINT32_BE( W[12], data, 48 ); - GET_UINT32_BE( W[13], data, 52 ); - GET_UINT32_BE( W[14], data, 56 ); - GET_UINT32_BE( W[15], data, 60 ); - -#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) - -#define R(t) \ -( \ - temp = W[( t - 3 ) & 0x0F] ^ W[( t - 8 ) & 0x0F] ^ \ - W[( t - 14 ) & 0x0F] ^ W[ t & 0x0F], \ - ( W[t & 0x0F] = S(temp,1) ) \ -) - -#define P(a,b,c,d,e,x) \ -{ \ - e += S(a,5) + F(b,c,d) + K + x; b = S(b,30); \ -} - - A = ctx->state[0]; - B = ctx->state[1]; - C = ctx->state[2]; - D = ctx->state[3]; - E = ctx->state[4]; - -#define F(x,y,z) (z ^ (x & (y ^ z))) -#define K 0x5A827999 - - P( A, B, C, D, E, W[0] ); - P( E, A, B, C, D, W[1] ); - P( D, E, A, B, C, W[2] ); - P( C, D, E, A, B, W[3] ); - P( B, C, D, E, A, W[4] ); - P( A, B, C, D, E, W[5] ); - P( E, A, B, C, D, W[6] ); - P( D, E, A, B, C, W[7] ); - P( C, D, E, A, B, W[8] ); - P( B, C, D, E, A, W[9] ); - P( A, B, C, D, E, W[10] ); - P( E, A, B, C, D, W[11] ); - P( D, E, A, B, C, W[12] ); - P( C, D, E, A, B, W[13] ); - P( B, C, D, E, A, W[14] ); - P( A, B, C, D, E, W[15] ); - P( E, A, B, C, D, R(16) ); - P( D, E, A, B, C, R(17) ); - P( C, D, E, A, B, R(18) ); - P( B, C, D, E, A, R(19) ); - -#undef K -#undef F - -#define F(x,y,z) (x ^ y ^ z) -#define K 0x6ED9EBA1 - - P( A, B, C, D, E, R(20) ); - P( E, A, B, C, D, R(21) ); - P( D, E, A, B, C, R(22) ); - P( C, D, E, A, B, R(23) ); - P( B, C, D, E, A, R(24) ); - P( A, B, C, D, E, R(25) ); - P( E, A, B, C, D, R(26) ); - P( D, E, A, B, C, R(27) ); - P( C, D, E, A, B, R(28) ); - P( B, C, D, E, A, R(29) ); - P( A, B, C, D, E, R(30) ); - P( E, A, B, C, D, R(31) ); - P( D, E, A, B, C, R(32) ); - P( C, D, E, A, B, R(33) ); - P( B, C, D, E, A, R(34) ); - P( A, B, C, D, E, R(35) ); - P( E, A, B, C, D, R(36) ); - P( D, E, A, B, C, R(37) ); - P( C, D, E, A, B, R(38) ); - P( B, C, D, E, A, R(39) ); - -#undef K -#undef F - -#define F(x,y,z) ((x & y) | (z & (x | y))) -#define K 0x8F1BBCDC - - P( A, B, C, D, E, R(40) ); - P( E, A, B, C, D, R(41) ); - P( D, E, A, B, C, R(42) ); - P( C, D, E, A, B, R(43) ); - P( B, C, D, E, A, R(44) ); - P( A, B, C, D, E, R(45) ); - P( E, A, B, C, D, R(46) ); - P( D, E, A, B, C, R(47) ); - P( C, D, E, A, B, R(48) ); - P( B, C, D, E, A, R(49) ); - P( A, B, C, D, E, R(50) ); - P( E, A, B, C, D, R(51) ); - P( D, E, A, B, C, R(52) ); - P( C, D, E, A, B, R(53) ); - P( B, C, D, E, A, R(54) ); - P( A, B, C, D, E, R(55) ); - P( E, A, B, C, D, R(56) ); - P( D, E, A, B, C, R(57) ); - P( C, D, E, A, B, R(58) ); - P( B, C, D, E, A, R(59) ); - -#undef K -#undef F - -#define F(x,y,z) (x ^ y ^ z) -#define K 0xCA62C1D6 - - P( A, B, C, D, E, R(60) ); - P( E, A, B, C, D, R(61) ); - P( D, E, A, B, C, R(62) ); - P( C, D, E, A, B, R(63) ); - P( B, C, D, E, A, R(64) ); - P( A, B, C, D, E, R(65) ); - P( E, A, B, C, D, R(66) ); - P( D, E, A, B, C, R(67) ); - P( C, D, E, A, B, R(68) ); - P( B, C, D, E, A, R(69) ); - P( A, B, C, D, E, R(70) ); - P( E, A, B, C, D, R(71) ); - P( D, E, A, B, C, R(72) ); - P( C, D, E, A, B, R(73) ); - P( B, C, D, E, A, R(74) ); - P( A, B, C, D, E, R(75) ); - P( E, A, B, C, D, R(76) ); - P( D, E, A, B, C, R(77) ); - P( C, D, E, A, B, R(78) ); - P( B, C, D, E, A, R(79) ); - -#undef K -#undef F - - ctx->state[0] += A; - ctx->state[1] += B; - ctx->state[2] += C; - ctx->state[3] += D; - ctx->state[4] += E; -} - -/* - * SHA-1 process buffer - */ -SSL_ROM_TEXT_SECTION -void sha1_update( sha1_context *ctx, const unsigned char *input, size_t ilen ) -{ - size_t fill; - uint32_t left; - - if( ilen == 0 ) - return; - - left = ctx->total[0] & 0x3F; - fill = 64 - left; - - ctx->total[0] += (uint32_t) ilen; - ctx->total[0] &= 0xFFFFFFFF; - - if( ctx->total[0] < (uint32_t) ilen ) - ctx->total[1]++; - - if( left && ilen >= fill ) - { - memcpy( (void *) (ctx->buffer + left), input, fill ); - sha1_process( ctx, ctx->buffer ); - input += fill; - ilen -= fill; - left = 0; - } - - while( ilen >= 64 ) - { - sha1_process( ctx, input ); - input += 64; - ilen -= 64; - } - - if( ilen > 0 ) - memcpy( (void *) (ctx->buffer + left), input, ilen ); -} - -SSL_ROM_DATA_SECTION -static const unsigned char sha1_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* - * SHA-1 final digest - */ -SSL_ROM_TEXT_SECTION -void sha1_finish( sha1_context *ctx, unsigned char output[20] ) -{ - uint32_t last, padn; - uint32_t high, low; - unsigned char msglen[8]; - - high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); - low = ( ctx->total[0] << 3 ); - - PUT_UINT32_BE( high, msglen, 0 ); - PUT_UINT32_BE( low, msglen, 4 ); - - last = ctx->total[0] & 0x3F; - padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); - - sha1_update( ctx, sha1_padding, padn ); - sha1_update( ctx, msglen, 8 ); - - PUT_UINT32_BE( ctx->state[0], output, 0 ); - PUT_UINT32_BE( ctx->state[1], output, 4 ); - PUT_UINT32_BE( ctx->state[2], output, 8 ); - PUT_UINT32_BE( ctx->state[3], output, 12 ); - PUT_UINT32_BE( ctx->state[4], output, 16 ); -} - -#endif /* !POLARSSL_SHA1_ALT */ - -/* - * output = SHA-1( input buffer ) - */ -SSL_ROM_TEXT_SECTION -void sha1( const unsigned char *input, size_t ilen, unsigned char output[20] ) -{ - sha1_context ctx; - - sha1_init( &ctx ); - sha1_starts( &ctx ); - sha1_update( &ctx, input, ilen ); - sha1_finish( &ctx, output ); - sha1_free( &ctx ); -} - -#if defined(POLARSSL_FS_IO) -/* - * output = SHA-1( file contents ) - */ -SSL_ROM_TEXT_SECTION -int sha1_file( const char *path, unsigned char output[20] ) -{ - FILE *f; - size_t n; - sha1_context ctx; - unsigned char buf[1024]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_SHA1_FILE_IO_ERROR ); - - sha1_init( &ctx ); - sha1_starts( &ctx ); - - while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) - sha1_update( &ctx, buf, n ); - - sha1_finish( &ctx, output ); - sha1_free( &ctx ); - - if( ferror( f ) != 0 ) - { - fclose( f ); - return( POLARSSL_ERR_SHA1_FILE_IO_ERROR ); - } - - fclose( f ); - return( 0 ); -} -#endif /* POLARSSL_FS_IO */ - -/* - * SHA-1 HMAC context setup - */ -SSL_ROM_TEXT_SECTION -void sha1_hmac_starts( sha1_context *ctx, const unsigned char *key, - size_t keylen ) -{ - size_t i; - unsigned char sum[20]; - - if( keylen > 64 ) - { - sha1( key, keylen, sum ); - keylen = 20; - key = sum; - } - - memset( ctx->ipad, 0x36, 64 ); - memset( ctx->opad, 0x5C, 64 ); - - for( i = 0; i < keylen; i++ ) - { - ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] ); - ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); - } - - sha1_starts( ctx ); - sha1_update( ctx, ctx->ipad, 64 ); - - polarssl_zeroize( sum, sizeof( sum ) ); -} - -/* - * SHA-1 HMAC process buffer - */ -SSL_ROM_TEXT_SECTION -void sha1_hmac_update( sha1_context *ctx, const unsigned char *input, - size_t ilen ) -{ - sha1_update( ctx, input, ilen ); -} - -/* - * SHA-1 HMAC final digest - */ -SSL_ROM_TEXT_SECTION -void sha1_hmac_finish( sha1_context *ctx, unsigned char output[20] ) -{ - unsigned char tmpbuf[20]; - - sha1_finish( ctx, tmpbuf ); - sha1_starts( ctx ); - sha1_update( ctx, ctx->opad, 64 ); - sha1_update( ctx, tmpbuf, 20 ); - sha1_finish( ctx, output ); - - polarssl_zeroize( tmpbuf, sizeof( tmpbuf ) ); -} - -/* - * SHA1 HMAC context reset - */ -SSL_ROM_TEXT_SECTION -void sha1_hmac_reset( sha1_context *ctx ) -{ - sha1_starts( ctx ); - sha1_update( ctx, ctx->ipad, 64 ); -} - -/* - * output = HMAC-SHA-1( hmac key, input buffer ) - */ -SSL_ROM_TEXT_SECTION -void sha1_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[20] ) -{ - sha1_context ctx; - - sha1_init( &ctx ); - sha1_hmac_starts( &ctx, key, keylen ); - sha1_hmac_update( &ctx, input, ilen ); - sha1_hmac_finish( &ctx, output ); - sha1_free( &ctx ); -} - -#if defined(POLARSSL_SELF_TEST) -/* - * FIPS-180-1 test vectors - */ -static unsigned char sha1_test_buf[3][57] = -{ - { "abc" }, - { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" }, - { "" } -}; - -static const int sha1_test_buflen[3] = -{ - 3, 56, 1000 -}; - -static const unsigned char sha1_test_sum[3][20] = -{ - { 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E, - 0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D }, - { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE, - 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 }, - { 0x34, 0xAA, 0x97, 0x3C, 0xD4, 0xC4, 0xDA, 0xA4, 0xF6, 0x1E, - 0xEB, 0x2B, 0xDB, 0xAD, 0x27, 0x31, 0x65, 0x34, 0x01, 0x6F } -}; - -/* - * RFC 2202 test vectors - */ -static unsigned char sha1_hmac_test_key[7][26] = -{ - { "\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B" - "\x0B\x0B\x0B\x0B" }, - { "Jefe" }, - { "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" - "\xAA\xAA\xAA\xAA" }, - { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10" - "\x11\x12\x13\x14\x15\x16\x17\x18\x19" }, - { "\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C" - "\x0C\x0C\x0C\x0C" }, - { "" }, /* 0xAA 80 times */ - { "" } -}; - -static const int sha1_hmac_test_keylen[7] = -{ - 20, 4, 20, 25, 20, 80, 80 -}; - -static unsigned char sha1_hmac_test_buf[7][74] = -{ - { "Hi There" }, - { "what do ya want for nothing?" }, - { "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" }, - { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" }, - { "Test With Truncation" }, - { "Test Using Larger Than Block-Size Key - Hash Key First" }, - { "Test Using Larger Than Block-Size Key and Larger" - " Than One Block-Size Data" } -}; - -static const int sha1_hmac_test_buflen[7] = -{ - 8, 28, 50, 50, 20, 54, 73 -}; - -static const unsigned char sha1_hmac_test_sum[7][20] = -{ - { 0xB6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xE2, 0x8B, - 0xC0, 0xB6, 0xFB, 0x37, 0x8C, 0x8E, 0xF1, 0x46, 0xBE, 0x00 }, - { 0xEF, 0xFC, 0xDF, 0x6A, 0xE5, 0xEB, 0x2F, 0xA2, 0xD2, 0x74, - 0x16, 0xD5, 0xF1, 0x84, 0xDF, 0x9C, 0x25, 0x9A, 0x7C, 0x79 }, - { 0x12, 0x5D, 0x73, 0x42, 0xB9, 0xAC, 0x11, 0xCD, 0x91, 0xA3, - 0x9A, 0xF4, 0x8A, 0xA1, 0x7B, 0x4F, 0x63, 0xF1, 0x75, 0xD3 }, - { 0x4C, 0x90, 0x07, 0xF4, 0x02, 0x62, 0x50, 0xC6, 0xBC, 0x84, - 0x14, 0xF9, 0xBF, 0x50, 0xC8, 0x6C, 0x2D, 0x72, 0x35, 0xDA }, - { 0x4C, 0x1A, 0x03, 0x42, 0x4B, 0x55, 0xE0, 0x7F, 0xE7, 0xF2, - 0x7B, 0xE1 }, - { 0xAA, 0x4A, 0xE5, 0xE1, 0x52, 0x72, 0xD0, 0x0E, 0x95, 0x70, - 0x56, 0x37, 0xCE, 0x8A, 0x3B, 0x55, 0xED, 0x40, 0x21, 0x12 }, - { 0xE8, 0xE9, 0x9D, 0x0F, 0x45, 0x23, 0x7D, 0x78, 0x6D, 0x6B, - 0xBA, 0xA7, 0x96, 0x5C, 0x78, 0x08, 0xBB, 0xFF, 0x1A, 0x91 } -}; - -/* - * Checkup routine - */ -int sha1_self_test( int verbose ) -{ - int i, j, buflen, ret = 0; - unsigned char buf[1024]; - unsigned char sha1sum[20]; - sha1_context ctx; - - sha1_init( &ctx ); - - /* - * SHA-1 - */ - for( i = 0; i < 3; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " SHA-1 test #%d: ", i + 1 ); - - sha1_starts( &ctx ); - - if( i == 2 ) - { - memset( buf, 'a', buflen = 1000 ); - - for( j = 0; j < 1000; j++ ) - sha1_update( &ctx, buf, buflen ); - } - else - sha1_update( &ctx, sha1_test_buf[i], - sha1_test_buflen[i] ); - - sha1_finish( &ctx, sha1sum ); - - if( memcmp( sha1sum, sha1_test_sum[i], 20 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " HMAC-SHA-1 test #%d: ", i + 1 ); - - if( i == 5 || i == 6 ) - { - memset( buf, '\xAA', buflen = 80 ); - sha1_hmac_starts( &ctx, buf, buflen ); - } - else - sha1_hmac_starts( &ctx, sha1_hmac_test_key[i], - sha1_hmac_test_keylen[i] ); - - sha1_hmac_update( &ctx, sha1_hmac_test_buf[i], - sha1_hmac_test_buflen[i] ); - - sha1_hmac_finish( &ctx, sha1sum ); - - buflen = ( i == 4 ) ? 12 : 20; - - if( memcmp( sha1sum, sha1_hmac_test_sum[i], buflen ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - sha1_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_SHA1_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/sha256.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/sha256.c deleted file mode 100644 index 72c59af..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/sha256.c +++ /dev/null @@ -1,757 +0,0 @@ -/* - * FIPS-180-2 compliant SHA-256 implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The SHA-256 Secure Hash Standard was published by NIST in 2002. - * - * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_SHA256_C) - -#include "polarssl/sha256.h" - -#if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if !defined(POLARSSL_SHA256_ALT) - -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - -SSL_ROM_TEXT_SECTION -void sha256_init( sha256_context *ctx ) -{ - memset( ctx, 0, sizeof( sha256_context ) ); -} - -SSL_ROM_TEXT_SECTION -void sha256_free( sha256_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( sha256_context ) ); -} - -/* - * SHA-256 context setup - */ -SSL_ROM_TEXT_SECTION -void sha256_starts( sha256_context *ctx, int is224 ) -{ - ctx->total[0] = 0; - ctx->total[1] = 0; - - if( is224 == 0 ) - { - /* SHA-256 */ - ctx->state[0] = 0x6A09E667; - ctx->state[1] = 0xBB67AE85; - ctx->state[2] = 0x3C6EF372; - ctx->state[3] = 0xA54FF53A; - ctx->state[4] = 0x510E527F; - ctx->state[5] = 0x9B05688C; - ctx->state[6] = 0x1F83D9AB; - ctx->state[7] = 0x5BE0CD19; - } - else - { - /* SHA-224 */ - ctx->state[0] = 0xC1059ED8; - ctx->state[1] = 0x367CD507; - ctx->state[2] = 0x3070DD17; - ctx->state[3] = 0xF70E5939; - ctx->state[4] = 0xFFC00B31; - ctx->state[5] = 0x68581511; - ctx->state[6] = 0x64F98FA7; - ctx->state[7] = 0xBEFA4FA4; - } - - ctx->is224 = is224; -} - -SSL_ROM_TEXT_SECTION -void sha256_process( sha256_context *ctx, const unsigned char data[64] ) -{ - uint32_t temp1, temp2, W[64]; - uint32_t A, B, C, D, E, F, G, H; - - GET_UINT32_BE( W[ 0], data, 0 ); - GET_UINT32_BE( W[ 1], data, 4 ); - GET_UINT32_BE( W[ 2], data, 8 ); - GET_UINT32_BE( W[ 3], data, 12 ); - GET_UINT32_BE( W[ 4], data, 16 ); - GET_UINT32_BE( W[ 5], data, 20 ); - GET_UINT32_BE( W[ 6], data, 24 ); - GET_UINT32_BE( W[ 7], data, 28 ); - GET_UINT32_BE( W[ 8], data, 32 ); - GET_UINT32_BE( W[ 9], data, 36 ); - GET_UINT32_BE( W[10], data, 40 ); - GET_UINT32_BE( W[11], data, 44 ); - GET_UINT32_BE( W[12], data, 48 ); - GET_UINT32_BE( W[13], data, 52 ); - GET_UINT32_BE( W[14], data, 56 ); - GET_UINT32_BE( W[15], data, 60 ); - -#define SHR(x,n) ((x & 0xFFFFFFFF) >> n) -#define ROTR(x,n) (SHR(x,n) | (x << (32 - n))) - -#define S0(x) (ROTR(x, 7) ^ ROTR(x,18) ^ SHR(x, 3)) -#define S1(x) (ROTR(x,17) ^ ROTR(x,19) ^ SHR(x,10)) - -#define S2(x) (ROTR(x, 2) ^ ROTR(x,13) ^ ROTR(x,22)) -#define S3(x) (ROTR(x, 6) ^ ROTR(x,11) ^ ROTR(x,25)) - -#define F0(x,y,z) ((x & y) | (z & (x | y))) -#define F1(x,y,z) (z ^ (x & (y ^ z))) - -#define R(t) \ -( \ - W[t] = S1(W[t - 2]) + W[t - 7] + \ - S0(W[t - 15]) + W[t - 16] \ -) - -#define P(a,b,c,d,e,f,g,h,x,K) \ -{ \ - temp1 = h + S3(e) + F1(e,f,g) + K + x; \ - temp2 = S2(a) + F0(a,b,c); \ - d += temp1; h = temp1 + temp2; \ -} - - A = ctx->state[0]; - B = ctx->state[1]; - C = ctx->state[2]; - D = ctx->state[3]; - E = ctx->state[4]; - F = ctx->state[5]; - G = ctx->state[6]; - H = ctx->state[7]; - - P( A, B, C, D, E, F, G, H, W[ 0], 0x428A2F98 ); - P( H, A, B, C, D, E, F, G, W[ 1], 0x71374491 ); - P( G, H, A, B, C, D, E, F, W[ 2], 0xB5C0FBCF ); - P( F, G, H, A, B, C, D, E, W[ 3], 0xE9B5DBA5 ); - P( E, F, G, H, A, B, C, D, W[ 4], 0x3956C25B ); - P( D, E, F, G, H, A, B, C, W[ 5], 0x59F111F1 ); - P( C, D, E, F, G, H, A, B, W[ 6], 0x923F82A4 ); - P( B, C, D, E, F, G, H, A, W[ 7], 0xAB1C5ED5 ); - P( A, B, C, D, E, F, G, H, W[ 8], 0xD807AA98 ); - P( H, A, B, C, D, E, F, G, W[ 9], 0x12835B01 ); - P( G, H, A, B, C, D, E, F, W[10], 0x243185BE ); - P( F, G, H, A, B, C, D, E, W[11], 0x550C7DC3 ); - P( E, F, G, H, A, B, C, D, W[12], 0x72BE5D74 ); - P( D, E, F, G, H, A, B, C, W[13], 0x80DEB1FE ); - P( C, D, E, F, G, H, A, B, W[14], 0x9BDC06A7 ); - P( B, C, D, E, F, G, H, A, W[15], 0xC19BF174 ); - P( A, B, C, D, E, F, G, H, R(16), 0xE49B69C1 ); - P( H, A, B, C, D, E, F, G, R(17), 0xEFBE4786 ); - P( G, H, A, B, C, D, E, F, R(18), 0x0FC19DC6 ); - P( F, G, H, A, B, C, D, E, R(19), 0x240CA1CC ); - P( E, F, G, H, A, B, C, D, R(20), 0x2DE92C6F ); - P( D, E, F, G, H, A, B, C, R(21), 0x4A7484AA ); - P( C, D, E, F, G, H, A, B, R(22), 0x5CB0A9DC ); - P( B, C, D, E, F, G, H, A, R(23), 0x76F988DA ); - P( A, B, C, D, E, F, G, H, R(24), 0x983E5152 ); - P( H, A, B, C, D, E, F, G, R(25), 0xA831C66D ); - P( G, H, A, B, C, D, E, F, R(26), 0xB00327C8 ); - P( F, G, H, A, B, C, D, E, R(27), 0xBF597FC7 ); - P( E, F, G, H, A, B, C, D, R(28), 0xC6E00BF3 ); - P( D, E, F, G, H, A, B, C, R(29), 0xD5A79147 ); - P( C, D, E, F, G, H, A, B, R(30), 0x06CA6351 ); - P( B, C, D, E, F, G, H, A, R(31), 0x14292967 ); - P( A, B, C, D, E, F, G, H, R(32), 0x27B70A85 ); - P( H, A, B, C, D, E, F, G, R(33), 0x2E1B2138 ); - P( G, H, A, B, C, D, E, F, R(34), 0x4D2C6DFC ); - P( F, G, H, A, B, C, D, E, R(35), 0x53380D13 ); - P( E, F, G, H, A, B, C, D, R(36), 0x650A7354 ); - P( D, E, F, G, H, A, B, C, R(37), 0x766A0ABB ); - P( C, D, E, F, G, H, A, B, R(38), 0x81C2C92E ); - P( B, C, D, E, F, G, H, A, R(39), 0x92722C85 ); - P( A, B, C, D, E, F, G, H, R(40), 0xA2BFE8A1 ); - P( H, A, B, C, D, E, F, G, R(41), 0xA81A664B ); - P( G, H, A, B, C, D, E, F, R(42), 0xC24B8B70 ); - P( F, G, H, A, B, C, D, E, R(43), 0xC76C51A3 ); - P( E, F, G, H, A, B, C, D, R(44), 0xD192E819 ); - P( D, E, F, G, H, A, B, C, R(45), 0xD6990624 ); - P( C, D, E, F, G, H, A, B, R(46), 0xF40E3585 ); - P( B, C, D, E, F, G, H, A, R(47), 0x106AA070 ); - P( A, B, C, D, E, F, G, H, R(48), 0x19A4C116 ); - P( H, A, B, C, D, E, F, G, R(49), 0x1E376C08 ); - P( G, H, A, B, C, D, E, F, R(50), 0x2748774C ); - P( F, G, H, A, B, C, D, E, R(51), 0x34B0BCB5 ); - P( E, F, G, H, A, B, C, D, R(52), 0x391C0CB3 ); - P( D, E, F, G, H, A, B, C, R(53), 0x4ED8AA4A ); - P( C, D, E, F, G, H, A, B, R(54), 0x5B9CCA4F ); - P( B, C, D, E, F, G, H, A, R(55), 0x682E6FF3 ); - P( A, B, C, D, E, F, G, H, R(56), 0x748F82EE ); - P( H, A, B, C, D, E, F, G, R(57), 0x78A5636F ); - P( G, H, A, B, C, D, E, F, R(58), 0x84C87814 ); - P( F, G, H, A, B, C, D, E, R(59), 0x8CC70208 ); - P( E, F, G, H, A, B, C, D, R(60), 0x90BEFFFA ); - P( D, E, F, G, H, A, B, C, R(61), 0xA4506CEB ); - P( C, D, E, F, G, H, A, B, R(62), 0xBEF9A3F7 ); - P( B, C, D, E, F, G, H, A, R(63), 0xC67178F2 ); - - ctx->state[0] += A; - ctx->state[1] += B; - ctx->state[2] += C; - ctx->state[3] += D; - ctx->state[4] += E; - ctx->state[5] += F; - ctx->state[6] += G; - ctx->state[7] += H; -} - -/* - * SHA-256 process buffer - */ -SSL_ROM_TEXT_SECTION -void sha256_update( sha256_context *ctx, const unsigned char *input, - size_t ilen ) -{ - size_t fill; - uint32_t left; - - if( ilen == 0 ) - return; - - left = ctx->total[0] & 0x3F; - fill = 64 - left; - - ctx->total[0] += (uint32_t) ilen; - ctx->total[0] &= 0xFFFFFFFF; - - if( ctx->total[0] < (uint32_t) ilen ) - ctx->total[1]++; - - if( left && ilen >= fill ) - { - memcpy( (void *) (ctx->buffer + left), input, fill ); - sha256_process( ctx, ctx->buffer ); - input += fill; - ilen -= fill; - left = 0; - } - - while( ilen >= 64 ) - { - sha256_process( ctx, input ); - input += 64; - ilen -= 64; - } - - if( ilen > 0 ) - memcpy( (void *) (ctx->buffer + left), input, ilen ); -} - -SSL_ROM_DATA_SECTION -static const unsigned char sha256_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* - * SHA-256 final digest - */ -SSL_ROM_TEXT_SECTION -void sha256_finish( sha256_context *ctx, unsigned char output[32] ) -{ - uint32_t last, padn; - uint32_t high, low; - unsigned char msglen[8]; - - high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); - low = ( ctx->total[0] << 3 ); - - PUT_UINT32_BE( high, msglen, 0 ); - PUT_UINT32_BE( low, msglen, 4 ); - - last = ctx->total[0] & 0x3F; - padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); - - sha256_update( ctx, sha256_padding, padn ); - sha256_update( ctx, msglen, 8 ); - - PUT_UINT32_BE( ctx->state[0], output, 0 ); - PUT_UINT32_BE( ctx->state[1], output, 4 ); - PUT_UINT32_BE( ctx->state[2], output, 8 ); - PUT_UINT32_BE( ctx->state[3], output, 12 ); - PUT_UINT32_BE( ctx->state[4], output, 16 ); - PUT_UINT32_BE( ctx->state[5], output, 20 ); - PUT_UINT32_BE( ctx->state[6], output, 24 ); - - if( ctx->is224 == 0 ) - PUT_UINT32_BE( ctx->state[7], output, 28 ); -} - -#endif /* !POLARSSL_SHA256_ALT */ - -/* - * output = SHA-256( input buffer ) - */ -SSL_ROM_TEXT_SECTION -void sha256( const unsigned char *input, size_t ilen, - unsigned char output[32], int is224 ) -{ - sha256_context ctx; - - sha256_init( &ctx ); - sha256_starts( &ctx, is224 ); - sha256_update( &ctx, input, ilen ); - sha256_finish( &ctx, output ); - sha256_free( &ctx ); -} - -#if defined(POLARSSL_FS_IO) -/* - * output = SHA-256( file contents ) - */ -SSL_ROM_TEXT_SECTION -int sha256_file( const char *path, unsigned char output[32], int is224 ) -{ - FILE *f; - size_t n; - sha256_context ctx; - unsigned char buf[1024]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_SHA256_FILE_IO_ERROR ); - - sha256_init( &ctx ); - sha256_starts( &ctx, is224 ); - - while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) - sha256_update( &ctx, buf, n ); - - sha256_finish( &ctx, output ); - sha256_free( &ctx ); - - if( ferror( f ) != 0 ) - { - fclose( f ); - return( POLARSSL_ERR_SHA256_FILE_IO_ERROR ); - } - - fclose( f ); - return( 0 ); -} -#endif /* POLARSSL_FS_IO */ - -/* - * SHA-256 HMAC context setup - */ -SSL_ROM_TEXT_SECTION -void sha256_hmac_starts( sha256_context *ctx, const unsigned char *key, - size_t keylen, int is224 ) -{ - size_t i; - unsigned char sum[32]; - - if( keylen > 64 ) - { - sha256( key, keylen, sum, is224 ); - keylen = ( is224 ) ? 28 : 32; - key = sum; - } - - memset( ctx->ipad, 0x36, 64 ); - memset( ctx->opad, 0x5C, 64 ); - - for( i = 0; i < keylen; i++ ) - { - ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] ); - ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); - } - - sha256_starts( ctx, is224 ); - sha256_update( ctx, ctx->ipad, 64 ); - - polarssl_zeroize( sum, sizeof( sum ) ); -} - -/* - * SHA-256 HMAC process buffer - */ -SSL_ROM_TEXT_SECTION -void sha256_hmac_update( sha256_context *ctx, const unsigned char *input, - size_t ilen ) -{ - sha256_update( ctx, input, ilen ); -} - -/* - * SHA-256 HMAC final digest - */ -SSL_ROM_TEXT_SECTION -void sha256_hmac_finish( sha256_context *ctx, unsigned char output[32] ) -{ - int is224, hlen; - unsigned char tmpbuf[32]; - - is224 = ctx->is224; - hlen = ( is224 == 0 ) ? 32 : 28; - - sha256_finish( ctx, tmpbuf ); - sha256_starts( ctx, is224 ); - sha256_update( ctx, ctx->opad, 64 ); - sha256_update( ctx, tmpbuf, hlen ); - sha256_finish( ctx, output ); - - polarssl_zeroize( tmpbuf, sizeof( tmpbuf ) ); -} - -/* - * SHA-256 HMAC context reset - */ -SSL_ROM_TEXT_SECTION -void sha256_hmac_reset( sha256_context *ctx ) -{ - sha256_starts( ctx, ctx->is224 ); - sha256_update( ctx, ctx->ipad, 64 ); -} - -/* - * output = HMAC-SHA-256( hmac key, input buffer ) - */ -SSL_ROM_TEXT_SECTION -void sha256_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[32], int is224 ) -{ - sha256_context ctx; - - sha256_init( &ctx ); - sha256_hmac_starts( &ctx, key, keylen, is224 ); - sha256_hmac_update( &ctx, input, ilen ); - sha256_hmac_finish( &ctx, output ); - sha256_free( &ctx ); -} - -#if defined(POLARSSL_SELF_TEST) -/* - * FIPS-180-2 test vectors - */ -static unsigned char sha256_test_buf[3][57] = -{ - { "abc" }, - { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" }, - { "" } -}; - -static const int sha256_test_buflen[3] = -{ - 3, 56, 1000 -}; - -static const unsigned char sha256_test_sum[6][32] = -{ - /* - * SHA-224 test vectors - */ - { 0x23, 0x09, 0x7D, 0x22, 0x34, 0x05, 0xD8, 0x22, - 0x86, 0x42, 0xA4, 0x77, 0xBD, 0xA2, 0x55, 0xB3, - 0x2A, 0xAD, 0xBC, 0xE4, 0xBD, 0xA0, 0xB3, 0xF7, - 0xE3, 0x6C, 0x9D, 0xA7 }, - { 0x75, 0x38, 0x8B, 0x16, 0x51, 0x27, 0x76, 0xCC, - 0x5D, 0xBA, 0x5D, 0xA1, 0xFD, 0x89, 0x01, 0x50, - 0xB0, 0xC6, 0x45, 0x5C, 0xB4, 0xF5, 0x8B, 0x19, - 0x52, 0x52, 0x25, 0x25 }, - { 0x20, 0x79, 0x46, 0x55, 0x98, 0x0C, 0x91, 0xD8, - 0xBB, 0xB4, 0xC1, 0xEA, 0x97, 0x61, 0x8A, 0x4B, - 0xF0, 0x3F, 0x42, 0x58, 0x19, 0x48, 0xB2, 0xEE, - 0x4E, 0xE7, 0xAD, 0x67 }, - - /* - * SHA-256 test vectors - */ - { 0xBA, 0x78, 0x16, 0xBF, 0x8F, 0x01, 0xCF, 0xEA, - 0x41, 0x41, 0x40, 0xDE, 0x5D, 0xAE, 0x22, 0x23, - 0xB0, 0x03, 0x61, 0xA3, 0x96, 0x17, 0x7A, 0x9C, - 0xB4, 0x10, 0xFF, 0x61, 0xF2, 0x00, 0x15, 0xAD }, - { 0x24, 0x8D, 0x6A, 0x61, 0xD2, 0x06, 0x38, 0xB8, - 0xE5, 0xC0, 0x26, 0x93, 0x0C, 0x3E, 0x60, 0x39, - 0xA3, 0x3C, 0xE4, 0x59, 0x64, 0xFF, 0x21, 0x67, - 0xF6, 0xEC, 0xED, 0xD4, 0x19, 0xDB, 0x06, 0xC1 }, - { 0xCD, 0xC7, 0x6E, 0x5C, 0x99, 0x14, 0xFB, 0x92, - 0x81, 0xA1, 0xC7, 0xE2, 0x84, 0xD7, 0x3E, 0x67, - 0xF1, 0x80, 0x9A, 0x48, 0xA4, 0x97, 0x20, 0x0E, - 0x04, 0x6D, 0x39, 0xCC, 0xC7, 0x11, 0x2C, 0xD0 } -}; - -/* - * RFC 4231 test vectors - */ -static unsigned char sha256_hmac_test_key[7][26] = -{ - { "\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B" - "\x0B\x0B\x0B\x0B" }, - { "Jefe" }, - { "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" - "\xAA\xAA\xAA\xAA" }, - { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10" - "\x11\x12\x13\x14\x15\x16\x17\x18\x19" }, - { "\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C" - "\x0C\x0C\x0C\x0C" }, - { "" }, /* 0xAA 131 times */ - { "" } -}; - -static const int sha256_hmac_test_keylen[7] = -{ - 20, 4, 20, 25, 20, 131, 131 -}; - -static unsigned char sha256_hmac_test_buf[7][153] = -{ - { "Hi There" }, - { "what do ya want for nothing?" }, - { "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" }, - { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" }, - { "Test With Truncation" }, - { "Test Using Larger Than Block-Size Key - Hash Key First" }, - { "This is a test using a larger than block-size key " - "and a larger than block-size data. The key needs to " - "be hashed before being used by the HMAC algorithm." } -}; - -static const int sha256_hmac_test_buflen[7] = -{ - 8, 28, 50, 50, 20, 54, 152 -}; - -static const unsigned char sha256_hmac_test_sum[14][32] = -{ - /* - * HMAC-SHA-224 test vectors - */ - { 0x89, 0x6F, 0xB1, 0x12, 0x8A, 0xBB, 0xDF, 0x19, - 0x68, 0x32, 0x10, 0x7C, 0xD4, 0x9D, 0xF3, 0x3F, - 0x47, 0xB4, 0xB1, 0x16, 0x99, 0x12, 0xBA, 0x4F, - 0x53, 0x68, 0x4B, 0x22 }, - { 0xA3, 0x0E, 0x01, 0x09, 0x8B, 0xC6, 0xDB, 0xBF, - 0x45, 0x69, 0x0F, 0x3A, 0x7E, 0x9E, 0x6D, 0x0F, - 0x8B, 0xBE, 0xA2, 0xA3, 0x9E, 0x61, 0x48, 0x00, - 0x8F, 0xD0, 0x5E, 0x44 }, - { 0x7F, 0xB3, 0xCB, 0x35, 0x88, 0xC6, 0xC1, 0xF6, - 0xFF, 0xA9, 0x69, 0x4D, 0x7D, 0x6A, 0xD2, 0x64, - 0x93, 0x65, 0xB0, 0xC1, 0xF6, 0x5D, 0x69, 0xD1, - 0xEC, 0x83, 0x33, 0xEA }, - { 0x6C, 0x11, 0x50, 0x68, 0x74, 0x01, 0x3C, 0xAC, - 0x6A, 0x2A, 0xBC, 0x1B, 0xB3, 0x82, 0x62, 0x7C, - 0xEC, 0x6A, 0x90, 0xD8, 0x6E, 0xFC, 0x01, 0x2D, - 0xE7, 0xAF, 0xEC, 0x5A }, - { 0x0E, 0x2A, 0xEA, 0x68, 0xA9, 0x0C, 0x8D, 0x37, - 0xC9, 0x88, 0xBC, 0xDB, 0x9F, 0xCA, 0x6F, 0xA8 }, - { 0x95, 0xE9, 0xA0, 0xDB, 0x96, 0x20, 0x95, 0xAD, - 0xAE, 0xBE, 0x9B, 0x2D, 0x6F, 0x0D, 0xBC, 0xE2, - 0xD4, 0x99, 0xF1, 0x12, 0xF2, 0xD2, 0xB7, 0x27, - 0x3F, 0xA6, 0x87, 0x0E }, - { 0x3A, 0x85, 0x41, 0x66, 0xAC, 0x5D, 0x9F, 0x02, - 0x3F, 0x54, 0xD5, 0x17, 0xD0, 0xB3, 0x9D, 0xBD, - 0x94, 0x67, 0x70, 0xDB, 0x9C, 0x2B, 0x95, 0xC9, - 0xF6, 0xF5, 0x65, 0xD1 }, - - /* - * HMAC-SHA-256 test vectors - */ - { 0xB0, 0x34, 0x4C, 0x61, 0xD8, 0xDB, 0x38, 0x53, - 0x5C, 0xA8, 0xAF, 0xCE, 0xAF, 0x0B, 0xF1, 0x2B, - 0x88, 0x1D, 0xC2, 0x00, 0xC9, 0x83, 0x3D, 0xA7, - 0x26, 0xE9, 0x37, 0x6C, 0x2E, 0x32, 0xCF, 0xF7 }, - { 0x5B, 0xDC, 0xC1, 0x46, 0xBF, 0x60, 0x75, 0x4E, - 0x6A, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xC7, - 0x5A, 0x00, 0x3F, 0x08, 0x9D, 0x27, 0x39, 0x83, - 0x9D, 0xEC, 0x58, 0xB9, 0x64, 0xEC, 0x38, 0x43 }, - { 0x77, 0x3E, 0xA9, 0x1E, 0x36, 0x80, 0x0E, 0x46, - 0x85, 0x4D, 0xB8, 0xEB, 0xD0, 0x91, 0x81, 0xA7, - 0x29, 0x59, 0x09, 0x8B, 0x3E, 0xF8, 0xC1, 0x22, - 0xD9, 0x63, 0x55, 0x14, 0xCE, 0xD5, 0x65, 0xFE }, - { 0x82, 0x55, 0x8A, 0x38, 0x9A, 0x44, 0x3C, 0x0E, - 0xA4, 0xCC, 0x81, 0x98, 0x99, 0xF2, 0x08, 0x3A, - 0x85, 0xF0, 0xFA, 0xA3, 0xE5, 0x78, 0xF8, 0x07, - 0x7A, 0x2E, 0x3F, 0xF4, 0x67, 0x29, 0x66, 0x5B }, - { 0xA3, 0xB6, 0x16, 0x74, 0x73, 0x10, 0x0E, 0xE0, - 0x6E, 0x0C, 0x79, 0x6C, 0x29, 0x55, 0x55, 0x2B }, - { 0x60, 0xE4, 0x31, 0x59, 0x1E, 0xE0, 0xB6, 0x7F, - 0x0D, 0x8A, 0x26, 0xAA, 0xCB, 0xF5, 0xB7, 0x7F, - 0x8E, 0x0B, 0xC6, 0x21, 0x37, 0x28, 0xC5, 0x14, - 0x05, 0x46, 0x04, 0x0F, 0x0E, 0xE3, 0x7F, 0x54 }, - { 0x9B, 0x09, 0xFF, 0xA7, 0x1B, 0x94, 0x2F, 0xCB, - 0x27, 0x63, 0x5F, 0xBC, 0xD5, 0xB0, 0xE9, 0x44, - 0xBF, 0xDC, 0x63, 0x64, 0x4F, 0x07, 0x13, 0x93, - 0x8A, 0x7F, 0x51, 0x53, 0x5C, 0x3A, 0x35, 0xE2 } -}; - -/* - * Checkup routine - */ -int sha256_self_test( int verbose ) -{ - int i, j, k, buflen, ret = 0; - unsigned char buf[1024]; - unsigned char sha256sum[32]; - sha256_context ctx; - - sha256_init( &ctx ); - - for( i = 0; i < 6; i++ ) - { - j = i % 3; - k = i < 3; - - if( verbose != 0 ) - polarssl_printf( " SHA-%d test #%d: ", 256 - k * 32, j + 1 ); - - sha256_starts( &ctx, k ); - - if( j == 2 ) - { - memset( buf, 'a', buflen = 1000 ); - - for( j = 0; j < 1000; j++ ) - sha256_update( &ctx, buf, buflen ); - } - else - sha256_update( &ctx, sha256_test_buf[j], - sha256_test_buflen[j] ); - - sha256_finish( &ctx, sha256sum ); - - if( memcmp( sha256sum, sha256_test_sum[i], 32 - k * 4 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - for( i = 0; i < 14; i++ ) - { - j = i % 7; - k = i < 7; - - if( verbose != 0 ) - polarssl_printf( " HMAC-SHA-%d test #%d: ", 256 - k * 32, j + 1 ); - - if( j == 5 || j == 6 ) - { - memset( buf, '\xAA', buflen = 131 ); - sha256_hmac_starts( &ctx, buf, buflen, k ); - } - else - sha256_hmac_starts( &ctx, sha256_hmac_test_key[j], - sha256_hmac_test_keylen[j], k ); - - sha256_hmac_update( &ctx, sha256_hmac_test_buf[j], - sha256_hmac_test_buflen[j] ); - - sha256_hmac_finish( &ctx, sha256sum ); - - buflen = ( j == 4 ) ? 16 : 32 - k * 4; - - if( memcmp( sha256sum, sha256_hmac_test_sum[i], buflen ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - sha256_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_SHA256_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/sha512.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/sha512.c deleted file mode 100644 index fb1aba9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rom/sha512.c +++ /dev/null @@ -1,812 +0,0 @@ -/* - * FIPS-180-2 compliant SHA-384/512 implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The SHA-512 Secure Hash Standard was published by NIST in 2002. - * - * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_SHA512_C) - -#include "polarssl/sha512.h" - -#if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* Implementation that should never be optimized out by the compiler */ -SSL_ROM_TEXT_SECTION -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if !defined(POLARSSL_SHA512_ALT) - -/* - * 64-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT64_BE -#define GET_UINT64_BE(n,b,i) \ -{ \ - (n) = ( (uint64_t) (b)[(i) ] << 56 ) \ - | ( (uint64_t) (b)[(i) + 1] << 48 ) \ - | ( (uint64_t) (b)[(i) + 2] << 40 ) \ - | ( (uint64_t) (b)[(i) + 3] << 32 ) \ - | ( (uint64_t) (b)[(i) + 4] << 24 ) \ - | ( (uint64_t) (b)[(i) + 5] << 16 ) \ - | ( (uint64_t) (b)[(i) + 6] << 8 ) \ - | ( (uint64_t) (b)[(i) + 7] ); \ -} -#endif /* GET_UINT64_BE */ - -#ifndef PUT_UINT64_BE -#define PUT_UINT64_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 56 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 48 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 40 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) >> 32 ); \ - (b)[(i) + 4] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 5] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 6] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 7] = (unsigned char) ( (n) ); \ -} -#endif /* PUT_UINT64_BE */ - -/* - * Round constants - */ -SSL_ROM_DATA_SECTION -static const uint64_t K[80] = -{ - UL64(0x428A2F98D728AE22), UL64(0x7137449123EF65CD), - UL64(0xB5C0FBCFEC4D3B2F), UL64(0xE9B5DBA58189DBBC), - UL64(0x3956C25BF348B538), UL64(0x59F111F1B605D019), - UL64(0x923F82A4AF194F9B), UL64(0xAB1C5ED5DA6D8118), - UL64(0xD807AA98A3030242), UL64(0x12835B0145706FBE), - UL64(0x243185BE4EE4B28C), UL64(0x550C7DC3D5FFB4E2), - UL64(0x72BE5D74F27B896F), UL64(0x80DEB1FE3B1696B1), - UL64(0x9BDC06A725C71235), UL64(0xC19BF174CF692694), - UL64(0xE49B69C19EF14AD2), UL64(0xEFBE4786384F25E3), - UL64(0x0FC19DC68B8CD5B5), UL64(0x240CA1CC77AC9C65), - UL64(0x2DE92C6F592B0275), UL64(0x4A7484AA6EA6E483), - UL64(0x5CB0A9DCBD41FBD4), UL64(0x76F988DA831153B5), - UL64(0x983E5152EE66DFAB), UL64(0xA831C66D2DB43210), - UL64(0xB00327C898FB213F), UL64(0xBF597FC7BEEF0EE4), - UL64(0xC6E00BF33DA88FC2), UL64(0xD5A79147930AA725), - UL64(0x06CA6351E003826F), UL64(0x142929670A0E6E70), - UL64(0x27B70A8546D22FFC), UL64(0x2E1B21385C26C926), - UL64(0x4D2C6DFC5AC42AED), UL64(0x53380D139D95B3DF), - UL64(0x650A73548BAF63DE), UL64(0x766A0ABB3C77B2A8), - UL64(0x81C2C92E47EDAEE6), UL64(0x92722C851482353B), - UL64(0xA2BFE8A14CF10364), UL64(0xA81A664BBC423001), - UL64(0xC24B8B70D0F89791), UL64(0xC76C51A30654BE30), - UL64(0xD192E819D6EF5218), UL64(0xD69906245565A910), - UL64(0xF40E35855771202A), UL64(0x106AA07032BBD1B8), - UL64(0x19A4C116B8D2D0C8), UL64(0x1E376C085141AB53), - UL64(0x2748774CDF8EEB99), UL64(0x34B0BCB5E19B48A8), - UL64(0x391C0CB3C5C95A63), UL64(0x4ED8AA4AE3418ACB), - UL64(0x5B9CCA4F7763E373), UL64(0x682E6FF3D6B2B8A3), - UL64(0x748F82EE5DEFB2FC), UL64(0x78A5636F43172F60), - UL64(0x84C87814A1F0AB72), UL64(0x8CC702081A6439EC), - UL64(0x90BEFFFA23631E28), UL64(0xA4506CEBDE82BDE9), - UL64(0xBEF9A3F7B2C67915), UL64(0xC67178F2E372532B), - UL64(0xCA273ECEEA26619C), UL64(0xD186B8C721C0C207), - UL64(0xEADA7DD6CDE0EB1E), UL64(0xF57D4F7FEE6ED178), - UL64(0x06F067AA72176FBA), UL64(0x0A637DC5A2C898A6), - UL64(0x113F9804BEF90DAE), UL64(0x1B710B35131C471B), - UL64(0x28DB77F523047D84), UL64(0x32CAAB7B40C72493), - UL64(0x3C9EBE0A15C9BEBC), UL64(0x431D67C49C100D4C), - UL64(0x4CC5D4BECB3E42B6), UL64(0x597F299CFC657E2A), - UL64(0x5FCB6FAB3AD6FAEC), UL64(0x6C44198C4A475817) -}; - -SSL_ROM_TEXT_SECTION -void sha512_init( sha512_context *ctx ) -{ - memset( ctx, 0, sizeof( sha512_context ) ); -} - -SSL_ROM_TEXT_SECTION -void sha512_free( sha512_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( sha512_context ) ); -} - -/* - * SHA-512 context setup - */ -SSL_ROM_TEXT_SECTION -void sha512_starts( sha512_context *ctx, int is384 ) -{ - ctx->total[0] = 0; - ctx->total[1] = 0; - - if( is384 == 0 ) - { - /* SHA-512 */ - ctx->state[0] = UL64(0x6A09E667F3BCC908); - ctx->state[1] = UL64(0xBB67AE8584CAA73B); - ctx->state[2] = UL64(0x3C6EF372FE94F82B); - ctx->state[3] = UL64(0xA54FF53A5F1D36F1); - ctx->state[4] = UL64(0x510E527FADE682D1); - ctx->state[5] = UL64(0x9B05688C2B3E6C1F); - ctx->state[6] = UL64(0x1F83D9ABFB41BD6B); - ctx->state[7] = UL64(0x5BE0CD19137E2179); - } - else - { - /* SHA-384 */ - ctx->state[0] = UL64(0xCBBB9D5DC1059ED8); - ctx->state[1] = UL64(0x629A292A367CD507); - ctx->state[2] = UL64(0x9159015A3070DD17); - ctx->state[3] = UL64(0x152FECD8F70E5939); - ctx->state[4] = UL64(0x67332667FFC00B31); - ctx->state[5] = UL64(0x8EB44A8768581511); - ctx->state[6] = UL64(0xDB0C2E0D64F98FA7); - ctx->state[7] = UL64(0x47B5481DBEFA4FA4); - } - - ctx->is384 = is384; -} - -SSL_ROM_TEXT_SECTION -void sha512_process( sha512_context *ctx, const unsigned char data[128] ) -{ - int i; - uint64_t temp1, temp2, W[80]; - uint64_t A, B, C, D, E, F, G, H; - -#define SHR(x,n) (x >> n) -#define ROTR(x,n) (SHR(x,n) | (x << (64 - n))) - -#define S0(x) (ROTR(x, 1) ^ ROTR(x, 8) ^ SHR(x, 7)) -#define S1(x) (ROTR(x,19) ^ ROTR(x,61) ^ SHR(x, 6)) - -#define S2(x) (ROTR(x,28) ^ ROTR(x,34) ^ ROTR(x,39)) -#define S3(x) (ROTR(x,14) ^ ROTR(x,18) ^ ROTR(x,41)) - -#define F0(x,y,z) ((x & y) | (z & (x | y))) -#define F1(x,y,z) (z ^ (x & (y ^ z))) - -#define P(a,b,c,d,e,f,g,h,x,K) \ -{ \ - temp1 = h + S3(e) + F1(e,f,g) + K + x; \ - temp2 = S2(a) + F0(a,b,c); \ - d += temp1; h = temp1 + temp2; \ -} - - for( i = 0; i < 16; i++ ) - { - GET_UINT64_BE( W[i], data, i << 3 ); - } - - for( ; i < 80; i++ ) - { - W[i] = S1(W[i - 2]) + W[i - 7] + - S0(W[i - 15]) + W[i - 16]; - } - - A = ctx->state[0]; - B = ctx->state[1]; - C = ctx->state[2]; - D = ctx->state[3]; - E = ctx->state[4]; - F = ctx->state[5]; - G = ctx->state[6]; - H = ctx->state[7]; - i = 0; - - do - { - P( A, B, C, D, E, F, G, H, W[i], K[i] ); i++; - P( H, A, B, C, D, E, F, G, W[i], K[i] ); i++; - P( G, H, A, B, C, D, E, F, W[i], K[i] ); i++; - P( F, G, H, A, B, C, D, E, W[i], K[i] ); i++; - P( E, F, G, H, A, B, C, D, W[i], K[i] ); i++; - P( D, E, F, G, H, A, B, C, W[i], K[i] ); i++; - P( C, D, E, F, G, H, A, B, W[i], K[i] ); i++; - P( B, C, D, E, F, G, H, A, W[i], K[i] ); i++; - } - while( i < 80 ); - - ctx->state[0] += A; - ctx->state[1] += B; - ctx->state[2] += C; - ctx->state[3] += D; - ctx->state[4] += E; - ctx->state[5] += F; - ctx->state[6] += G; - ctx->state[7] += H; -} - -/* - * SHA-512 process buffer - */ -SSL_ROM_TEXT_SECTION -void sha512_update( sha512_context *ctx, const unsigned char *input, - size_t ilen ) -{ - size_t fill; - unsigned int left; - - if( ilen == 0 ) - return; - - left = (unsigned int) (ctx->total[0] & 0x7F); - fill = 128 - left; - - ctx->total[0] += (uint64_t) ilen; - - if( ctx->total[0] < (uint64_t) ilen ) - ctx->total[1]++; - - if( left && ilen >= fill ) - { - memcpy( (void *) (ctx->buffer + left), input, fill ); - sha512_process( ctx, ctx->buffer ); - input += fill; - ilen -= fill; - left = 0; - } - - while( ilen >= 128 ) - { - sha512_process( ctx, input ); - input += 128; - ilen -= 128; - } - - if( ilen > 0 ) - memcpy( (void *) (ctx->buffer + left), input, ilen ); -} - -SSL_ROM_DATA_SECTION -static const unsigned char sha512_padding[128] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* - * SHA-512 final digest - */ -SSL_ROM_TEXT_SECTION -void sha512_finish( sha512_context *ctx, unsigned char output[64] ) -{ - size_t last, padn; - uint64_t high, low; - unsigned char msglen[16]; - - high = ( ctx->total[0] >> 61 ) - | ( ctx->total[1] << 3 ); - low = ( ctx->total[0] << 3 ); - - PUT_UINT64_BE( high, msglen, 0 ); - PUT_UINT64_BE( low, msglen, 8 ); - - last = (size_t)( ctx->total[0] & 0x7F ); - padn = ( last < 112 ) ? ( 112 - last ) : ( 240 - last ); - - sha512_update( ctx, sha512_padding, padn ); - sha512_update( ctx, msglen, 16 ); - - PUT_UINT64_BE( ctx->state[0], output, 0 ); - PUT_UINT64_BE( ctx->state[1], output, 8 ); - PUT_UINT64_BE( ctx->state[2], output, 16 ); - PUT_UINT64_BE( ctx->state[3], output, 24 ); - PUT_UINT64_BE( ctx->state[4], output, 32 ); - PUT_UINT64_BE( ctx->state[5], output, 40 ); - - if( ctx->is384 == 0 ) - { - PUT_UINT64_BE( ctx->state[6], output, 48 ); - PUT_UINT64_BE( ctx->state[7], output, 56 ); - } -} - -#endif /* !POLARSSL_SHA512_ALT */ - -/* - * output = SHA-512( input buffer ) - */ -SSL_ROM_TEXT_SECTION -void sha512( const unsigned char *input, size_t ilen, - unsigned char output[64], int is384 ) -{ - sha512_context ctx; - - sha512_init( &ctx ); - sha512_starts( &ctx, is384 ); - sha512_update( &ctx, input, ilen ); - sha512_finish( &ctx, output ); - sha512_free( &ctx ); -} - -#if defined(POLARSSL_FS_IO) -/* - * output = SHA-512( file contents ) - */ -SSL_ROM_TEXT_SECTION -int sha512_file( const char *path, unsigned char output[64], int is384 ) -{ - FILE *f; - size_t n; - sha512_context ctx; - unsigned char buf[1024]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_SHA512_FILE_IO_ERROR ); - - sha512_init( &ctx ); - sha512_starts( &ctx, is384 ); - - while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) - sha512_update( &ctx, buf, n ); - - sha512_finish( &ctx, output ); - sha512_free( &ctx ); - - if( ferror( f ) != 0 ) - { - fclose( f ); - return( POLARSSL_ERR_SHA512_FILE_IO_ERROR ); - } - - fclose( f ); - return( 0 ); -} -#endif /* POLARSSL_FS_IO */ - -/* - * SHA-512 HMAC context setup - */ -SSL_ROM_TEXT_SECTION -void sha512_hmac_starts( sha512_context *ctx, const unsigned char *key, - size_t keylen, int is384 ) -{ - size_t i; - unsigned char sum[64]; - - if( keylen > 128 ) - { - sha512( key, keylen, sum, is384 ); - keylen = ( is384 ) ? 48 : 64; - key = sum; - } - - memset( ctx->ipad, 0x36, 128 ); - memset( ctx->opad, 0x5C, 128 ); - - for( i = 0; i < keylen; i++ ) - { - ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] ); - ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); - } - - sha512_starts( ctx, is384 ); - sha512_update( ctx, ctx->ipad, 128 ); - - polarssl_zeroize( sum, sizeof( sum ) ); -} - -/* - * SHA-512 HMAC process buffer - */ -SSL_ROM_TEXT_SECTION -void sha512_hmac_update( sha512_context *ctx, - const unsigned char *input, size_t ilen ) -{ - sha512_update( ctx, input, ilen ); -} - -/* - * SHA-512 HMAC final digest - */ -SSL_ROM_TEXT_SECTION -void sha512_hmac_finish( sha512_context *ctx, unsigned char output[64] ) -{ - int is384, hlen; - unsigned char tmpbuf[64]; - - is384 = ctx->is384; - hlen = ( is384 == 0 ) ? 64 : 48; - - sha512_finish( ctx, tmpbuf ); - sha512_starts( ctx, is384 ); - sha512_update( ctx, ctx->opad, 128 ); - sha512_update( ctx, tmpbuf, hlen ); - sha512_finish( ctx, output ); - - polarssl_zeroize( tmpbuf, sizeof( tmpbuf ) ); -} - -/* - * SHA-512 HMAC context reset - */ -SSL_ROM_TEXT_SECTION -void sha512_hmac_reset( sha512_context *ctx ) -{ - sha512_starts( ctx, ctx->is384 ); - sha512_update( ctx, ctx->ipad, 128 ); -} - -/* - * output = HMAC-SHA-512( hmac key, input buffer ) - */ -SSL_ROM_TEXT_SECTION -void sha512_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[64], int is384 ) -{ - sha512_context ctx; - - sha512_init( &ctx ); - sha512_hmac_starts( &ctx, key, keylen, is384 ); - sha512_hmac_update( &ctx, input, ilen ); - sha512_hmac_finish( &ctx, output ); - sha512_free( &ctx ); -} - -#if defined(POLARSSL_SELF_TEST) - -/* - * FIPS-180-2 test vectors - */ -static unsigned char sha512_test_buf[3][113] = -{ - { "abc" }, - { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" - "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" }, - { "" } -}; - -static const int sha512_test_buflen[3] = -{ - 3, 112, 1000 -}; - -static const unsigned char sha512_test_sum[6][64] = -{ - /* - * SHA-384 test vectors - */ - { 0xCB, 0x00, 0x75, 0x3F, 0x45, 0xA3, 0x5E, 0x8B, - 0xB5, 0xA0, 0x3D, 0x69, 0x9A, 0xC6, 0x50, 0x07, - 0x27, 0x2C, 0x32, 0xAB, 0x0E, 0xDE, 0xD1, 0x63, - 0x1A, 0x8B, 0x60, 0x5A, 0x43, 0xFF, 0x5B, 0xED, - 0x80, 0x86, 0x07, 0x2B, 0xA1, 0xE7, 0xCC, 0x23, - 0x58, 0xBA, 0xEC, 0xA1, 0x34, 0xC8, 0x25, 0xA7 }, - { 0x09, 0x33, 0x0C, 0x33, 0xF7, 0x11, 0x47, 0xE8, - 0x3D, 0x19, 0x2F, 0xC7, 0x82, 0xCD, 0x1B, 0x47, - 0x53, 0x11, 0x1B, 0x17, 0x3B, 0x3B, 0x05, 0xD2, - 0x2F, 0xA0, 0x80, 0x86, 0xE3, 0xB0, 0xF7, 0x12, - 0xFC, 0xC7, 0xC7, 0x1A, 0x55, 0x7E, 0x2D, 0xB9, - 0x66, 0xC3, 0xE9, 0xFA, 0x91, 0x74, 0x60, 0x39 }, - { 0x9D, 0x0E, 0x18, 0x09, 0x71, 0x64, 0x74, 0xCB, - 0x08, 0x6E, 0x83, 0x4E, 0x31, 0x0A, 0x4A, 0x1C, - 0xED, 0x14, 0x9E, 0x9C, 0x00, 0xF2, 0x48, 0x52, - 0x79, 0x72, 0xCE, 0xC5, 0x70, 0x4C, 0x2A, 0x5B, - 0x07, 0xB8, 0xB3, 0xDC, 0x38, 0xEC, 0xC4, 0xEB, - 0xAE, 0x97, 0xDD, 0xD8, 0x7F, 0x3D, 0x89, 0x85 }, - - /* - * SHA-512 test vectors - */ - { 0xDD, 0xAF, 0x35, 0xA1, 0x93, 0x61, 0x7A, 0xBA, - 0xCC, 0x41, 0x73, 0x49, 0xAE, 0x20, 0x41, 0x31, - 0x12, 0xE6, 0xFA, 0x4E, 0x89, 0xA9, 0x7E, 0xA2, - 0x0A, 0x9E, 0xEE, 0xE6, 0x4B, 0x55, 0xD3, 0x9A, - 0x21, 0x92, 0x99, 0x2A, 0x27, 0x4F, 0xC1, 0xA8, - 0x36, 0xBA, 0x3C, 0x23, 0xA3, 0xFE, 0xEB, 0xBD, - 0x45, 0x4D, 0x44, 0x23, 0x64, 0x3C, 0xE8, 0x0E, - 0x2A, 0x9A, 0xC9, 0x4F, 0xA5, 0x4C, 0xA4, 0x9F }, - { 0x8E, 0x95, 0x9B, 0x75, 0xDA, 0xE3, 0x13, 0xDA, - 0x8C, 0xF4, 0xF7, 0x28, 0x14, 0xFC, 0x14, 0x3F, - 0x8F, 0x77, 0x79, 0xC6, 0xEB, 0x9F, 0x7F, 0xA1, - 0x72, 0x99, 0xAE, 0xAD, 0xB6, 0x88, 0x90, 0x18, - 0x50, 0x1D, 0x28, 0x9E, 0x49, 0x00, 0xF7, 0xE4, - 0x33, 0x1B, 0x99, 0xDE, 0xC4, 0xB5, 0x43, 0x3A, - 0xC7, 0xD3, 0x29, 0xEE, 0xB6, 0xDD, 0x26, 0x54, - 0x5E, 0x96, 0xE5, 0x5B, 0x87, 0x4B, 0xE9, 0x09 }, - { 0xE7, 0x18, 0x48, 0x3D, 0x0C, 0xE7, 0x69, 0x64, - 0x4E, 0x2E, 0x42, 0xC7, 0xBC, 0x15, 0xB4, 0x63, - 0x8E, 0x1F, 0x98, 0xB1, 0x3B, 0x20, 0x44, 0x28, - 0x56, 0x32, 0xA8, 0x03, 0xAF, 0xA9, 0x73, 0xEB, - 0xDE, 0x0F, 0xF2, 0x44, 0x87, 0x7E, 0xA6, 0x0A, - 0x4C, 0xB0, 0x43, 0x2C, 0xE5, 0x77, 0xC3, 0x1B, - 0xEB, 0x00, 0x9C, 0x5C, 0x2C, 0x49, 0xAA, 0x2E, - 0x4E, 0xAD, 0xB2, 0x17, 0xAD, 0x8C, 0xC0, 0x9B } -}; - -/* - * RFC 4231 test vectors - */ -static unsigned char sha512_hmac_test_key[7][26] = -{ - { "\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B" - "\x0B\x0B\x0B\x0B" }, - { "Jefe" }, - { "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" - "\xAA\xAA\xAA\xAA" }, - { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10" - "\x11\x12\x13\x14\x15\x16\x17\x18\x19" }, - { "\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C" - "\x0C\x0C\x0C\x0C" }, - { "" }, /* 0xAA 131 times */ - { "" } -}; - -static const int sha512_hmac_test_keylen[7] = -{ - 20, 4, 20, 25, 20, 131, 131 -}; - -static unsigned char sha512_hmac_test_buf[7][153] = -{ - { "Hi There" }, - { "what do ya want for nothing?" }, - { "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" }, - { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" }, - { "Test With Truncation" }, - { "Test Using Larger Than Block-Size Key - Hash Key First" }, - { "This is a test using a larger than block-size key " - "and a larger than block-size data. The key needs to " - "be hashed before being used by the HMAC algorithm." } -}; - -static const int sha512_hmac_test_buflen[7] = -{ - 8, 28, 50, 50, 20, 54, 152 -}; - -static const unsigned char sha512_hmac_test_sum[14][64] = -{ - /* - * HMAC-SHA-384 test vectors - */ - { 0xAF, 0xD0, 0x39, 0x44, 0xD8, 0x48, 0x95, 0x62, - 0x6B, 0x08, 0x25, 0xF4, 0xAB, 0x46, 0x90, 0x7F, - 0x15, 0xF9, 0xDA, 0xDB, 0xE4, 0x10, 0x1E, 0xC6, - 0x82, 0xAA, 0x03, 0x4C, 0x7C, 0xEB, 0xC5, 0x9C, - 0xFA, 0xEA, 0x9E, 0xA9, 0x07, 0x6E, 0xDE, 0x7F, - 0x4A, 0xF1, 0x52, 0xE8, 0xB2, 0xFA, 0x9C, 0xB6 }, - { 0xAF, 0x45, 0xD2, 0xE3, 0x76, 0x48, 0x40, 0x31, - 0x61, 0x7F, 0x78, 0xD2, 0xB5, 0x8A, 0x6B, 0x1B, - 0x9C, 0x7E, 0xF4, 0x64, 0xF5, 0xA0, 0x1B, 0x47, - 0xE4, 0x2E, 0xC3, 0x73, 0x63, 0x22, 0x44, 0x5E, - 0x8E, 0x22, 0x40, 0xCA, 0x5E, 0x69, 0xE2, 0xC7, - 0x8B, 0x32, 0x39, 0xEC, 0xFA, 0xB2, 0x16, 0x49 }, - { 0x88, 0x06, 0x26, 0x08, 0xD3, 0xE6, 0xAD, 0x8A, - 0x0A, 0xA2, 0xAC, 0xE0, 0x14, 0xC8, 0xA8, 0x6F, - 0x0A, 0xA6, 0x35, 0xD9, 0x47, 0xAC, 0x9F, 0xEB, - 0xE8, 0x3E, 0xF4, 0xE5, 0x59, 0x66, 0x14, 0x4B, - 0x2A, 0x5A, 0xB3, 0x9D, 0xC1, 0x38, 0x14, 0xB9, - 0x4E, 0x3A, 0xB6, 0xE1, 0x01, 0xA3, 0x4F, 0x27 }, - { 0x3E, 0x8A, 0x69, 0xB7, 0x78, 0x3C, 0x25, 0x85, - 0x19, 0x33, 0xAB, 0x62, 0x90, 0xAF, 0x6C, 0xA7, - 0x7A, 0x99, 0x81, 0x48, 0x08, 0x50, 0x00, 0x9C, - 0xC5, 0x57, 0x7C, 0x6E, 0x1F, 0x57, 0x3B, 0x4E, - 0x68, 0x01, 0xDD, 0x23, 0xC4, 0xA7, 0xD6, 0x79, - 0xCC, 0xF8, 0xA3, 0x86, 0xC6, 0x74, 0xCF, 0xFB }, - { 0x3A, 0xBF, 0x34, 0xC3, 0x50, 0x3B, 0x2A, 0x23, - 0xA4, 0x6E, 0xFC, 0x61, 0x9B, 0xAE, 0xF8, 0x97 }, - { 0x4E, 0xCE, 0x08, 0x44, 0x85, 0x81, 0x3E, 0x90, - 0x88, 0xD2, 0xC6, 0x3A, 0x04, 0x1B, 0xC5, 0xB4, - 0x4F, 0x9E, 0xF1, 0x01, 0x2A, 0x2B, 0x58, 0x8F, - 0x3C, 0xD1, 0x1F, 0x05, 0x03, 0x3A, 0xC4, 0xC6, - 0x0C, 0x2E, 0xF6, 0xAB, 0x40, 0x30, 0xFE, 0x82, - 0x96, 0x24, 0x8D, 0xF1, 0x63, 0xF4, 0x49, 0x52 }, - { 0x66, 0x17, 0x17, 0x8E, 0x94, 0x1F, 0x02, 0x0D, - 0x35, 0x1E, 0x2F, 0x25, 0x4E, 0x8F, 0xD3, 0x2C, - 0x60, 0x24, 0x20, 0xFE, 0xB0, 0xB8, 0xFB, 0x9A, - 0xDC, 0xCE, 0xBB, 0x82, 0x46, 0x1E, 0x99, 0xC5, - 0xA6, 0x78, 0xCC, 0x31, 0xE7, 0x99, 0x17, 0x6D, - 0x38, 0x60, 0xE6, 0x11, 0x0C, 0x46, 0x52, 0x3E }, - - /* - * HMAC-SHA-512 test vectors - */ - { 0x87, 0xAA, 0x7C, 0xDE, 0xA5, 0xEF, 0x61, 0x9D, - 0x4F, 0xF0, 0xB4, 0x24, 0x1A, 0x1D, 0x6C, 0xB0, - 0x23, 0x79, 0xF4, 0xE2, 0xCE, 0x4E, 0xC2, 0x78, - 0x7A, 0xD0, 0xB3, 0x05, 0x45, 0xE1, 0x7C, 0xDE, - 0xDA, 0xA8, 0x33, 0xB7, 0xD6, 0xB8, 0xA7, 0x02, - 0x03, 0x8B, 0x27, 0x4E, 0xAE, 0xA3, 0xF4, 0xE4, - 0xBE, 0x9D, 0x91, 0x4E, 0xEB, 0x61, 0xF1, 0x70, - 0x2E, 0x69, 0x6C, 0x20, 0x3A, 0x12, 0x68, 0x54 }, - { 0x16, 0x4B, 0x7A, 0x7B, 0xFC, 0xF8, 0x19, 0xE2, - 0xE3, 0x95, 0xFB, 0xE7, 0x3B, 0x56, 0xE0, 0xA3, - 0x87, 0xBD, 0x64, 0x22, 0x2E, 0x83, 0x1F, 0xD6, - 0x10, 0x27, 0x0C, 0xD7, 0xEA, 0x25, 0x05, 0x54, - 0x97, 0x58, 0xBF, 0x75, 0xC0, 0x5A, 0x99, 0x4A, - 0x6D, 0x03, 0x4F, 0x65, 0xF8, 0xF0, 0xE6, 0xFD, - 0xCA, 0xEA, 0xB1, 0xA3, 0x4D, 0x4A, 0x6B, 0x4B, - 0x63, 0x6E, 0x07, 0x0A, 0x38, 0xBC, 0xE7, 0x37 }, - { 0xFA, 0x73, 0xB0, 0x08, 0x9D, 0x56, 0xA2, 0x84, - 0xEF, 0xB0, 0xF0, 0x75, 0x6C, 0x89, 0x0B, 0xE9, - 0xB1, 0xB5, 0xDB, 0xDD, 0x8E, 0xE8, 0x1A, 0x36, - 0x55, 0xF8, 0x3E, 0x33, 0xB2, 0x27, 0x9D, 0x39, - 0xBF, 0x3E, 0x84, 0x82, 0x79, 0xA7, 0x22, 0xC8, - 0x06, 0xB4, 0x85, 0xA4, 0x7E, 0x67, 0xC8, 0x07, - 0xB9, 0x46, 0xA3, 0x37, 0xBE, 0xE8, 0x94, 0x26, - 0x74, 0x27, 0x88, 0x59, 0xE1, 0x32, 0x92, 0xFB }, - { 0xB0, 0xBA, 0x46, 0x56, 0x37, 0x45, 0x8C, 0x69, - 0x90, 0xE5, 0xA8, 0xC5, 0xF6, 0x1D, 0x4A, 0xF7, - 0xE5, 0x76, 0xD9, 0x7F, 0xF9, 0x4B, 0x87, 0x2D, - 0xE7, 0x6F, 0x80, 0x50, 0x36, 0x1E, 0xE3, 0xDB, - 0xA9, 0x1C, 0xA5, 0xC1, 0x1A, 0xA2, 0x5E, 0xB4, - 0xD6, 0x79, 0x27, 0x5C, 0xC5, 0x78, 0x80, 0x63, - 0xA5, 0xF1, 0x97, 0x41, 0x12, 0x0C, 0x4F, 0x2D, - 0xE2, 0xAD, 0xEB, 0xEB, 0x10, 0xA2, 0x98, 0xDD }, - { 0x41, 0x5F, 0xAD, 0x62, 0x71, 0x58, 0x0A, 0x53, - 0x1D, 0x41, 0x79, 0xBC, 0x89, 0x1D, 0x87, 0xA6 }, - { 0x80, 0xB2, 0x42, 0x63, 0xC7, 0xC1, 0xA3, 0xEB, - 0xB7, 0x14, 0x93, 0xC1, 0xDD, 0x7B, 0xE8, 0xB4, - 0x9B, 0x46, 0xD1, 0xF4, 0x1B, 0x4A, 0xEE, 0xC1, - 0x12, 0x1B, 0x01, 0x37, 0x83, 0xF8, 0xF3, 0x52, - 0x6B, 0x56, 0xD0, 0x37, 0xE0, 0x5F, 0x25, 0x98, - 0xBD, 0x0F, 0xD2, 0x21, 0x5D, 0x6A, 0x1E, 0x52, - 0x95, 0xE6, 0x4F, 0x73, 0xF6, 0x3F, 0x0A, 0xEC, - 0x8B, 0x91, 0x5A, 0x98, 0x5D, 0x78, 0x65, 0x98 }, - { 0xE3, 0x7B, 0x6A, 0x77, 0x5D, 0xC8, 0x7D, 0xBA, - 0xA4, 0xDF, 0xA9, 0xF9, 0x6E, 0x5E, 0x3F, 0xFD, - 0xDE, 0xBD, 0x71, 0xF8, 0x86, 0x72, 0x89, 0x86, - 0x5D, 0xF5, 0xA3, 0x2D, 0x20, 0xCD, 0xC9, 0x44, - 0xB6, 0x02, 0x2C, 0xAC, 0x3C, 0x49, 0x82, 0xB1, - 0x0D, 0x5E, 0xEB, 0x55, 0xC3, 0xE4, 0xDE, 0x15, - 0x13, 0x46, 0x76, 0xFB, 0x6D, 0xE0, 0x44, 0x60, - 0x65, 0xC9, 0x74, 0x40, 0xFA, 0x8C, 0x6A, 0x58 } -}; - -/* - * Checkup routine - */ -int sha512_self_test( int verbose ) -{ - int i, j, k, buflen, ret = 0; - unsigned char buf[1024]; - unsigned char sha512sum[64]; - sha512_context ctx; - - sha512_init( &ctx ); - - for( i = 0; i < 6; i++ ) - { - j = i % 3; - k = i < 3; - - if( verbose != 0 ) - polarssl_printf( " SHA-%d test #%d: ", 512 - k * 128, j + 1 ); - - sha512_starts( &ctx, k ); - - if( j == 2 ) - { - memset( buf, 'a', buflen = 1000 ); - - for( j = 0; j < 1000; j++ ) - sha512_update( &ctx, buf, buflen ); - } - else - sha512_update( &ctx, sha512_test_buf[j], - sha512_test_buflen[j] ); - - sha512_finish( &ctx, sha512sum ); - - if( memcmp( sha512sum, sha512_test_sum[i], 64 - k * 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - for( i = 0; i < 14; i++ ) - { - j = i % 7; - k = i < 7; - - if( verbose != 0 ) - polarssl_printf( " HMAC-SHA-%d test #%d: ", 512 - k * 128, j + 1 ); - - if( j == 5 || j == 6 ) - { - memset( buf, '\xAA', buflen = 131 ); - sha512_hmac_starts( &ctx, buf, buflen, k ); - } - else - sha512_hmac_starts( &ctx, sha512_hmac_test_key[j], - sha512_hmac_test_keylen[j], k ); - - sha512_hmac_update( &ctx, sha512_hmac_test_buf[j], - sha512_hmac_test_buflen[j] ); - - sha512_hmac_finish( &ctx, sha512sum ); - - buflen = ( j == 4 ) ? 16 : 64 - k * 16; - - if( memcmp( sha512sum, sha512_hmac_test_sum[i], buflen ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - sha512_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_SHA512_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rsa.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rsa.c deleted file mode 100644 index a4bf212..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/rsa.c +++ /dev/null @@ -1,1663 +0,0 @@ -/* - * The RSA public-key cryptosystem - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * RSA was designed by Ron Rivest, Adi Shamir and Len Adleman. - * - * http://theory.lcs.mit.edu/~rivest/rsapaper.pdf - * http://www.cacr.math.uwaterloo.ca/hac/about/chap8.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_RSA_C) - -#include "polarssl/rsa.h" -#include "polarssl/oid.h" - -#if defined(POLARSSL_PKCS1_V21) -#include "polarssl/md.h" -#endif - -#include -#include - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* - * Initialize an RSA context - */ -void rsa_init( rsa_context *ctx, - int padding, - int hash_id ) -{ - memset( ctx, 0, sizeof( rsa_context ) ); - - rsa_set_padding( ctx, padding, hash_id ); - -#if defined(POLARSSL_THREADING_C) - polarssl_mutex_init( &ctx->mutex ); -#endif -} - -/* - * Set padding for an existing RSA context - */ -void rsa_set_padding( rsa_context *ctx, int padding, int hash_id ) -{ - ctx->padding = padding; - ctx->hash_id = hash_id; -} - -#if defined(POLARSSL_GENPRIME) - -/* - * Generate an RSA keypair - */ -int rsa_gen_key( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - unsigned int nbits, int exponent ) -{ - int ret; - mpi P1, Q1, H, G; - - if( f_rng == NULL || nbits < 128 || exponent < 3 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - mpi_init( &P1 ); mpi_init( &Q1 ); mpi_init( &H ); mpi_init( &G ); - - /* - * find primes P and Q with Q < P so that: - * GCD( E, (P-1)*(Q-1) ) == 1 - */ - MPI_CHK( mpi_lset( &ctx->E, exponent ) ); - - do - { - MPI_CHK( mpi_gen_prime( &ctx->P, ( nbits + 1 ) >> 1, 0, - f_rng, p_rng ) ); - - MPI_CHK( mpi_gen_prime( &ctx->Q, ( nbits + 1 ) >> 1, 0, - f_rng, p_rng ) ); - - if( mpi_cmp_mpi( &ctx->P, &ctx->Q ) < 0 ) - mpi_swap( &ctx->P, &ctx->Q ); - - if( mpi_cmp_mpi( &ctx->P, &ctx->Q ) == 0 ) - continue; - - MPI_CHK( mpi_mul_mpi( &ctx->N, &ctx->P, &ctx->Q ) ); - if( mpi_msb( &ctx->N ) != nbits ) - continue; - - MPI_CHK( mpi_sub_int( &P1, &ctx->P, 1 ) ); - MPI_CHK( mpi_sub_int( &Q1, &ctx->Q, 1 ) ); - MPI_CHK( mpi_mul_mpi( &H, &P1, &Q1 ) ); - MPI_CHK( mpi_gcd( &G, &ctx->E, &H ) ); - } - while( mpi_cmp_int( &G, 1 ) != 0 ); - - /* - * D = E^-1 mod ((P-1)*(Q-1)) - * DP = D mod (P - 1) - * DQ = D mod (Q - 1) - * QP = Q^-1 mod P - */ - MPI_CHK( mpi_inv_mod( &ctx->D , &ctx->E, &H ) ); - MPI_CHK( mpi_mod_mpi( &ctx->DP, &ctx->D, &P1 ) ); - MPI_CHK( mpi_mod_mpi( &ctx->DQ, &ctx->D, &Q1 ) ); - MPI_CHK( mpi_inv_mod( &ctx->QP, &ctx->Q, &ctx->P ) ); - - ctx->len = ( mpi_msb( &ctx->N ) + 7 ) >> 3; - -cleanup: - - mpi_free( &P1 ); mpi_free( &Q1 ); mpi_free( &H ); mpi_free( &G ); - - if( ret != 0 ) - { - rsa_free( ctx ); - return( POLARSSL_ERR_RSA_KEY_GEN_FAILED + ret ); - } - - return( 0 ); -} - -#endif /* POLARSSL_GENPRIME */ - -/* - * Check a public RSA key - */ -int rsa_check_pubkey( const rsa_context *ctx ) -{ - if( !ctx->N.p || !ctx->E.p ) - return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); - - if( ( ctx->N.p[0] & 1 ) == 0 || - ( ctx->E.p[0] & 1 ) == 0 ) - return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); - - if( mpi_msb( &ctx->N ) < 128 || - mpi_msb( &ctx->N ) > POLARSSL_MPI_MAX_BITS ) - return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); - - if( mpi_msb( &ctx->E ) < 2 || - mpi_cmp_mpi( &ctx->E, &ctx->N ) >= 0 ) - return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); - - return( 0 ); -} - -/* - * Check a private RSA key - */ -int rsa_check_privkey( const rsa_context *ctx ) -{ - int ret; - mpi PQ, DE, P1, Q1, H, I, G, G2, L1, L2, DP, DQ, QP; - - if( ( ret = rsa_check_pubkey( ctx ) ) != 0 ) - return( ret ); - - if( !ctx->P.p || !ctx->Q.p || !ctx->D.p ) - return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); - - mpi_init( &PQ ); mpi_init( &DE ); mpi_init( &P1 ); mpi_init( &Q1 ); - mpi_init( &H ); mpi_init( &I ); mpi_init( &G ); mpi_init( &G2 ); - mpi_init( &L1 ); mpi_init( &L2 ); mpi_init( &DP ); mpi_init( &DQ ); - mpi_init( &QP ); - - MPI_CHK( mpi_mul_mpi( &PQ, &ctx->P, &ctx->Q ) ); - MPI_CHK( mpi_mul_mpi( &DE, &ctx->D, &ctx->E ) ); - MPI_CHK( mpi_sub_int( &P1, &ctx->P, 1 ) ); - MPI_CHK( mpi_sub_int( &Q1, &ctx->Q, 1 ) ); - MPI_CHK( mpi_mul_mpi( &H, &P1, &Q1 ) ); - MPI_CHK( mpi_gcd( &G, &ctx->E, &H ) ); - - MPI_CHK( mpi_gcd( &G2, &P1, &Q1 ) ); - MPI_CHK( mpi_div_mpi( &L1, &L2, &H, &G2 ) ); - MPI_CHK( mpi_mod_mpi( &I, &DE, &L1 ) ); - - MPI_CHK( mpi_mod_mpi( &DP, &ctx->D, &P1 ) ); - MPI_CHK( mpi_mod_mpi( &DQ, &ctx->D, &Q1 ) ); - MPI_CHK( mpi_inv_mod( &QP, &ctx->Q, &ctx->P ) ); - /* - * Check for a valid PKCS1v2 private key - */ - if( mpi_cmp_mpi( &PQ, &ctx->N ) != 0 || - mpi_cmp_mpi( &DP, &ctx->DP ) != 0 || - mpi_cmp_mpi( &DQ, &ctx->DQ ) != 0 || - mpi_cmp_mpi( &QP, &ctx->QP ) != 0 || - mpi_cmp_int( &L2, 0 ) != 0 || - mpi_cmp_int( &I, 1 ) != 0 || - mpi_cmp_int( &G, 1 ) != 0 ) - { - ret = POLARSSL_ERR_RSA_KEY_CHECK_FAILED; - } - -cleanup: - mpi_free( &PQ ); mpi_free( &DE ); mpi_free( &P1 ); mpi_free( &Q1 ); - mpi_free( &H ); mpi_free( &I ); mpi_free( &G ); mpi_free( &G2 ); - mpi_free( &L1 ); mpi_free( &L2 ); mpi_free( &DP ); mpi_free( &DQ ); - mpi_free( &QP ); - - if( ret == POLARSSL_ERR_RSA_KEY_CHECK_FAILED ) - return( ret ); - - if( ret != 0 ) - return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED + ret ); - - return( 0 ); -} - -/* - * Do an RSA public key operation - */ -int rsa_public( rsa_context *ctx, - const unsigned char *input, - unsigned char *output ) -{ - int ret; - size_t olen; - mpi T; - - mpi_init( &T ); - - MPI_CHK( mpi_read_binary( &T, input, ctx->len ) ); - - if( mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) - { - mpi_free( &T ); - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - } - - olen = ctx->len; - MPI_CHK( mpi_exp_mod( &T, &T, &ctx->E, &ctx->N, &ctx->RN ) ); - MPI_CHK( mpi_write_binary( &T, output, olen ) ); - -cleanup: - - mpi_free( &T ); - - if( ret != 0 ) - return( POLARSSL_ERR_RSA_PUBLIC_FAILED + ret ); - - return( 0 ); -} - -#if !defined(POLARSSL_RSA_NO_CRT) -/* - * Generate or update blinding values, see section 10 of: - * KOCHER, Paul C. Timing attacks on implementations of Diffie-Hellman, RSA, - * DSS, and other systems. In : Advances in Cryptology—CRYPTO’96. Springer - * Berlin Heidelberg, 1996. p. 104-113. - */ -static int rsa_prepare_blinding( rsa_context *ctx, mpi *Vi, mpi *Vf, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ - int ret, count = 0; - -#if defined(POLARSSL_THREADING_C) - polarssl_mutex_lock( &ctx->mutex ); -#endif - - if( ctx->Vf.p != NULL ) - { - /* We already have blinding values, just update them by squaring */ - MPI_CHK( mpi_mul_mpi( &ctx->Vi, &ctx->Vi, &ctx->Vi ) ); - MPI_CHK( mpi_mod_mpi( &ctx->Vi, &ctx->Vi, &ctx->N ) ); - MPI_CHK( mpi_mul_mpi( &ctx->Vf, &ctx->Vf, &ctx->Vf ) ); - MPI_CHK( mpi_mod_mpi( &ctx->Vf, &ctx->Vf, &ctx->N ) ); - - goto done; - } - - /* Unblinding value: Vf = random number, invertible mod N */ - do { - if( count++ > 10 ) - return( POLARSSL_ERR_RSA_RNG_FAILED ); - - MPI_CHK( mpi_fill_random( &ctx->Vf, ctx->len - 1, f_rng, p_rng ) ); - MPI_CHK( mpi_gcd( &ctx->Vi, &ctx->Vf, &ctx->N ) ); - } while( mpi_cmp_int( &ctx->Vi, 1 ) != 0 ); - - /* Blinding value: Vi = Vf^(-e) mod N */ - MPI_CHK( mpi_inv_mod( &ctx->Vi, &ctx->Vf, &ctx->N ) ); - MPI_CHK( mpi_exp_mod( &ctx->Vi, &ctx->Vi, &ctx->E, &ctx->N, &ctx->RN ) ); - -done: - if( Vi != &ctx->Vi ) - { - MPI_CHK( mpi_copy( Vi, &ctx->Vi ) ); - MPI_CHK( mpi_copy( Vf, &ctx->Vf ) ); - } - -cleanup: -#if defined(POLARSSL_THREADING_C) - polarssl_mutex_unlock( &ctx->mutex ); -#endif - - return( ret ); -} -#endif /* !POLARSSL_RSA_NO_CRT */ - -/* - * Do an RSA private key operation - */ -int rsa_private( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - const unsigned char *input, - unsigned char *output ) -{ - int ret; - size_t olen; - mpi T, T1, T2; -#if !defined(POLARSSL_RSA_NO_CRT) - mpi *Vi, *Vf; - - /* - * When using the Chinese Remainder Theorem, we use blinding values. - * Without threading, we just read them directly from the context, - * otherwise we make a local copy in order to reduce locking contention. - */ -#if defined(POLARSSL_THREADING_C) - mpi Vi_copy, Vf_copy; - - mpi_init( &Vi_copy ); mpi_init( &Vf_copy ); - Vi = &Vi_copy; - Vf = &Vf_copy; -#else - Vi = &ctx->Vi; - Vf = &ctx->Vf; -#endif -#endif /* !POLARSSL_RSA_NO_CRT */ - - mpi_init( &T ); mpi_init( &T1 ); mpi_init( &T2 ); - - MPI_CHK( mpi_read_binary( &T, input, ctx->len ) ); - if( mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) - { - mpi_free( &T ); - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - } - -#if defined(POLARSSL_RSA_NO_CRT) - ((void) f_rng); - ((void) p_rng); - MPI_CHK( mpi_exp_mod( &T, &T, &ctx->D, &ctx->N, &ctx->RN ) ); -#else - if( f_rng != NULL ) - { - /* - * Blinding - * T = T * Vi mod N - */ - MPI_CHK( rsa_prepare_blinding( ctx, Vi, Vf, f_rng, p_rng ) ); - MPI_CHK( mpi_mul_mpi( &T, &T, Vi ) ); - MPI_CHK( mpi_mod_mpi( &T, &T, &ctx->N ) ); - } - - /* - * faster decryption using the CRT - * - * T1 = input ^ dP mod P - * T2 = input ^ dQ mod Q - */ - MPI_CHK( mpi_exp_mod( &T1, &T, &ctx->DP, &ctx->P, &ctx->RP ) ); - MPI_CHK( mpi_exp_mod( &T2, &T, &ctx->DQ, &ctx->Q, &ctx->RQ ) ); - - /* - * T = (T1 - T2) * (Q^-1 mod P) mod P - */ - MPI_CHK( mpi_sub_mpi( &T, &T1, &T2 ) ); - MPI_CHK( mpi_mul_mpi( &T1, &T, &ctx->QP ) ); - MPI_CHK( mpi_mod_mpi( &T, &T1, &ctx->P ) ); - - /* - * T = T2 + T * Q - */ - MPI_CHK( mpi_mul_mpi( &T1, &T, &ctx->Q ) ); - MPI_CHK( mpi_add_mpi( &T, &T2, &T1 ) ); - - if( f_rng != NULL ) - { - /* - * Unblind - * T = T * Vf mod N - */ - MPI_CHK( mpi_mul_mpi( &T, &T, Vf ) ); - MPI_CHK( mpi_mod_mpi( &T, &T, &ctx->N ) ); - } -#endif /* POLARSSL_RSA_NO_CRT */ - - olen = ctx->len; - MPI_CHK( mpi_write_binary( &T, output, olen ) ); - -cleanup: - mpi_free( &T ); mpi_free( &T1 ); mpi_free( &T2 ); -#if !defined(POLARSSL_RSA_NO_CRT) && defined(POLARSSL_THREADING_C) - mpi_free( &Vi_copy ); mpi_free( &Vf_copy ); -#endif - - if( ret != 0 ) - return( POLARSSL_ERR_RSA_PRIVATE_FAILED + ret ); - - return( 0 ); -} - -#if defined(POLARSSL_PKCS1_V21) -/** - * Generate and apply the MGF1 operation (from PKCS#1 v2.1) to a buffer. - * - * \param dst buffer to mask - * \param dlen length of destination buffer - * \param src source of the mask generation - * \param slen length of the source buffer - * \param md_ctx message digest context to use - */ -static void mgf_mask( unsigned char *dst, size_t dlen, unsigned char *src, - size_t slen, md_context_t *md_ctx ) -{ - unsigned char mask[POLARSSL_MD_MAX_SIZE]; - unsigned char counter[4]; - unsigned char *p; - unsigned int hlen; - size_t i, use_len; - - memset( mask, 0, POLARSSL_MD_MAX_SIZE ); - memset( counter, 0, 4 ); - - hlen = md_ctx->md_info->size; - - // Generate and apply dbMask - // - p = dst; - - while( dlen > 0 ) - { - use_len = hlen; - if( dlen < hlen ) - use_len = dlen; - - md_starts( md_ctx ); - md_update( md_ctx, src, slen ); - md_update( md_ctx, counter, 4 ); - md_finish( md_ctx, mask ); - - for( i = 0; i < use_len; ++i ) - *p++ ^= mask[i]; - - counter[3]++; - - dlen -= use_len; - } -} -#endif /* POLARSSL_PKCS1_V21 */ - -#if defined(POLARSSL_PKCS1_V21) -/* - * Implementation of the PKCS#1 v2.1 RSAES-OAEP-ENCRYPT function - */ -int rsa_rsaes_oaep_encrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - const unsigned char *label, size_t label_len, - size_t ilen, - const unsigned char *input, - unsigned char *output ) -{ - size_t olen; - int ret; - unsigned char *p = output; - unsigned int hlen; - const md_info_t *md_info; - md_context_t md_ctx; - - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V21 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - if( f_rng == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - md_info = md_info_from_type( ctx->hash_id ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - olen = ctx->len; - hlen = md_get_size( md_info ); - - if( olen < ilen + 2 * hlen + 2 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - memset( output, 0, olen ); - - *p++ = 0; - - // Generate a random octet string seed - // - if( ( ret = f_rng( p_rng, p, hlen ) ) != 0 ) - return( POLARSSL_ERR_RSA_RNG_FAILED + ret ); - - p += hlen; - - // Construct DB - // - md( md_info, label, label_len, p ); - p += hlen; - p += olen - 2 * hlen - 2 - ilen; - *p++ = 1; - memcpy( p, input, ilen ); - - md_init( &md_ctx ); - md_init_ctx( &md_ctx, md_info ); - - // maskedDB: Apply dbMask to DB - // - mgf_mask( output + hlen + 1, olen - hlen - 1, output + 1, hlen, - &md_ctx ); - - // maskedSeed: Apply seedMask to seed - // - mgf_mask( output + 1, hlen, output + hlen + 1, olen - hlen - 1, - &md_ctx ); - - md_free( &md_ctx ); - - return( ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, output, output ) - : rsa_private( ctx, f_rng, p_rng, output, output ) ); -} -#endif /* POLARSSL_PKCS1_V21 */ - -#if defined(POLARSSL_PKCS1_V15) -/* - * Implementation of the PKCS#1 v2.1 RSAES-PKCS1-V1_5-ENCRYPT function - */ -int rsa_rsaes_pkcs1_v15_encrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t ilen, - const unsigned char *input, - unsigned char *output ) -{ - size_t nb_pad, olen; - int ret; - unsigned char *p = output; - - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V15 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - if( f_rng == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - olen = ctx->len; - - if( olen < ilen + 11 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - nb_pad = olen - 3 - ilen; - - *p++ = 0; - if( mode == RSA_PUBLIC ) - { - *p++ = RSA_CRYPT; - - //while( nb_pad-- > 0 ) - while( nb_pad > 0 ) - { - nb_pad --; - int rng_dl = 100; - - do { - ret = f_rng( p_rng, p, 1 ); - } while( *p == 0 && --rng_dl && ret == 0 ); - - // Check if RNG failed to generate data - // - if( rng_dl == 0 || ret != 0 ) - return( POLARSSL_ERR_RSA_RNG_FAILED + ret ); - - p++; - } - } - else - { - *p++ = RSA_SIGN; - - //while( nb_pad-- > 0 ) - while( nb_pad > 0 ) - { - nb_pad --; - *p++ = 0xFF; - } - } - - *p++ = 0; - memcpy( p, input, ilen ); - - return( ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, output, output ) - : rsa_private( ctx, f_rng, p_rng, output, output ) ); -} -#endif /* POLARSSL_PKCS1_V15 */ - -/* - * Add the message padding, then do an RSA operation - */ -int rsa_pkcs1_encrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t ilen, - const unsigned char *input, - unsigned char *output ) -{ - switch( ctx->padding ) - { -#if defined(POLARSSL_PKCS1_V15) - case RSA_PKCS_V15: - return rsa_rsaes_pkcs1_v15_encrypt( ctx, f_rng, p_rng, mode, ilen, - input, output ); -#endif - -#if defined(POLARSSL_PKCS1_V21) - case RSA_PKCS_V21: - return rsa_rsaes_oaep_encrypt( ctx, f_rng, p_rng, mode, NULL, 0, - ilen, input, output ); -#endif - - default: - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - } -} - -#if defined(POLARSSL_PKCS1_V21) -/* - * Implementation of the PKCS#1 v2.1 RSAES-OAEP-DECRYPT function - */ -int rsa_rsaes_oaep_decrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - const unsigned char *label, size_t label_len, - size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len ) -{ - int ret; - size_t ilen, i, pad_len; - unsigned char *p, bad, pad_done; - unsigned char buf[POLARSSL_MPI_MAX_SIZE]; - unsigned char lhash[POLARSSL_MD_MAX_SIZE]; - unsigned int hlen; - const md_info_t *md_info; - md_context_t md_ctx; - - /* - * Parameters sanity checks - */ - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V21 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - ilen = ctx->len; - - if( ilen < 16 || ilen > sizeof( buf ) ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - md_info = md_info_from_type( ctx->hash_id ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - /* - * RSA operation - */ - ret = ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, input, buf ) - : rsa_private( ctx, f_rng, p_rng, input, buf ); - - if( ret != 0 ) - return( ret ); - - /* - * Unmask data and generate lHash - */ - hlen = md_get_size( md_info ); - - md_init( &md_ctx ); - md_init_ctx( &md_ctx, md_info ); - - /* Generate lHash */ - md( md_info, label, label_len, lhash ); - - /* seed: Apply seedMask to maskedSeed */ - mgf_mask( buf + 1, hlen, buf + hlen + 1, ilen - hlen - 1, - &md_ctx ); - - /* DB: Apply dbMask to maskedDB */ - mgf_mask( buf + hlen + 1, ilen - hlen - 1, buf + 1, hlen, - &md_ctx ); - - md_free( &md_ctx ); - - /* - * Check contents, in "constant-time" - */ - p = buf; - bad = 0; - - bad |= *p++; /* First byte must be 0 */ - - p += hlen; /* Skip seed */ - - /* Check lHash */ - for( i = 0; i < hlen; i++ ) - bad |= lhash[i] ^ *p++; - - /* Get zero-padding len, but always read till end of buffer - * (minus one, for the 01 byte) */ - pad_len = 0; - pad_done = 0; - for( i = 0; i < ilen - 2 * hlen - 2; i++ ) - { - pad_done |= p[i]; - pad_len += ( pad_done == 0 ); - } - - p += pad_len; - bad |= *p++ ^ 0x01; - - /* - * The only information "leaked" is whether the padding was correct or not - * (eg, no data is copied if it was not correct). This meets the - * recommendations in PKCS#1 v2.2: an opponent cannot distinguish between - * the different error conditions. - */ - if( bad != 0 ) - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - - if( ilen - ( p - buf ) > output_max_len ) - return( POLARSSL_ERR_RSA_OUTPUT_TOO_LARGE ); - - *olen = ilen - (p - buf); - memcpy( output, p, *olen ); - - return( 0 ); -} -#endif /* POLARSSL_PKCS1_V21 */ - -#if defined(POLARSSL_PKCS1_V15) -/* - * Implementation of the PKCS#1 v2.1 RSAES-PKCS1-V1_5-DECRYPT function - */ -int rsa_rsaes_pkcs1_v15_decrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len) -{ - int ret; - size_t ilen, pad_count = 0, i; - unsigned char *p, bad, pad_done = 0; - unsigned char buf[POLARSSL_MPI_MAX_SIZE]; - - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V15 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - ilen = ctx->len; - - if( ilen < 16 || ilen > sizeof( buf ) ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - ret = ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, input, buf ) - : rsa_private( ctx, f_rng, p_rng, input, buf ); - - if( ret != 0 ) - return( ret ); - - p = buf; - bad = 0; - - /* - * Check and get padding len in "constant-time" - */ - bad |= *p++; /* First byte must be 0 */ - - /* This test does not depend on secret data */ - if( mode == RSA_PRIVATE ) - { - bad |= *p++ ^ RSA_CRYPT; - - /* Get padding len, but always read till end of buffer - * (minus one, for the 00 byte) */ - for( i = 0; i < ilen - 3; i++ ) - { - pad_done |= ( p[i] == 0 ); - pad_count += ( pad_done == 0 ); - } - - p += pad_count; - bad |= *p++; /* Must be zero */ - } - else - { - bad |= *p++ ^ RSA_SIGN; - - /* Get padding len, but always read till end of buffer - * (minus one, for the 00 byte) */ - for( i = 0; i < ilen - 3; i++ ) - { - pad_done |= ( p[i] != 0xFF ); - pad_count += ( pad_done == 0 ); - } - - p += pad_count; - bad |= *p++; /* Must be zero */ - } - - if( bad ) - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - - if( ilen - ( p - buf ) > output_max_len ) - return( POLARSSL_ERR_RSA_OUTPUT_TOO_LARGE ); - - *olen = ilen - (p - buf); - memcpy( output, p, *olen ); - - return( 0 ); -} -#endif /* POLARSSL_PKCS1_V15 */ - -/* - * Do an RSA operation, then remove the message padding - */ -int rsa_pkcs1_decrypt( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len) -{ - switch( ctx->padding ) - { -#if defined(POLARSSL_PKCS1_V15) - case RSA_PKCS_V15: - return rsa_rsaes_pkcs1_v15_decrypt( ctx, f_rng, p_rng, mode, olen, - input, output, output_max_len ); -#endif - -#if defined(POLARSSL_PKCS1_V21) - case RSA_PKCS_V21: - return rsa_rsaes_oaep_decrypt( ctx, f_rng, p_rng, mode, NULL, 0, - olen, input, output, - output_max_len ); -#endif - - default: - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - } -} - -#if defined(POLARSSL_PKCS1_V21) -/* - * Implementation of the PKCS#1 v2.1 RSASSA-PSS-SIGN function - */ -int rsa_rsassa_pss_sign( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) -{ - size_t olen; - unsigned char *p = sig; - unsigned char salt[POLARSSL_MD_MAX_SIZE]; - unsigned int slen, hlen, offset = 0; - int ret; - size_t msb; - const md_info_t *md_info; - md_context_t md_ctx; - - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V21 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - if( f_rng == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - olen = ctx->len; - - if( md_alg != POLARSSL_MD_NONE ) - { - // Gather length of hash to sign - // - md_info = md_info_from_type( md_alg ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - hashlen = md_get_size( md_info ); - } - - md_info = md_info_from_type( ctx->hash_id ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - hlen = md_get_size( md_info ); - slen = hlen; - - if( olen < hlen + slen + 2 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - memset( sig, 0, olen ); - - // Generate salt of length slen - // - if( ( ret = f_rng( p_rng, salt, slen ) ) != 0 ) - return( POLARSSL_ERR_RSA_RNG_FAILED + ret ); - - // Note: EMSA-PSS encoding is over the length of N - 1 bits - // - msb = mpi_msb( &ctx->N ) - 1; - p += olen - hlen * 2 - 2; - *p++ = 0x01; - memcpy( p, salt, slen ); - p += slen; - - md_init( &md_ctx ); - md_init_ctx( &md_ctx, md_info ); - - // Generate H = Hash( M' ) - // - md_starts( &md_ctx ); - md_update( &md_ctx, p, 8 ); - md_update( &md_ctx, hash, hashlen ); - md_update( &md_ctx, salt, slen ); - md_finish( &md_ctx, p ); - - // Compensate for boundary condition when applying mask - // - if( msb % 8 == 0 ) - offset = 1; - - // maskedDB: Apply dbMask to DB - // - mgf_mask( sig + offset, olen - hlen - 1 - offset, p, hlen, &md_ctx ); - - md_free( &md_ctx ); - - msb = mpi_msb( &ctx->N ) - 1; - sig[0] &= 0xFF >> ( olen * 8 - msb ); - - p += hlen; - *p++ = 0xBC; - - return( ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, sig, sig ) - : rsa_private( ctx, f_rng, p_rng, sig, sig ) ); -} -#endif /* POLARSSL_PKCS1_V21 */ - -#if defined(POLARSSL_PKCS1_V15) -/* - * Implementation of the PKCS#1 v2.1 RSASSA-PKCS1-V1_5-SIGN function - */ -/* - * Do an RSA operation to sign the message digest - */ -int rsa_rsassa_pkcs1_v15_sign( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) -{ - size_t nb_pad, olen, oid_size = 0; - unsigned char *p = sig; - const char *oid; - - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V15 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - olen = ctx->len; - nb_pad = olen - 3; - - if( md_alg != POLARSSL_MD_NONE ) - { - const md_info_t *md_info = md_info_from_type( md_alg ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - if( oid_get_oid_by_md( md_alg, &oid, &oid_size ) != 0 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - nb_pad -= 10 + oid_size; - - hashlen = md_get_size( md_info ); - } - - nb_pad -= hashlen; - - if( ( nb_pad < 8 ) || ( nb_pad > olen ) ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - *p++ = 0; - *p++ = RSA_SIGN; - memset( p, 0xFF, nb_pad ); - p += nb_pad; - *p++ = 0; - - if( md_alg == POLARSSL_MD_NONE ) - { - memcpy( p, hash, hashlen ); - } - else - { - /* - * DigestInfo ::= SEQUENCE { - * digestAlgorithm DigestAlgorithmIdentifier, - * digest Digest } - * - * DigestAlgorithmIdentifier ::= AlgorithmIdentifier - * - * Digest ::= OCTET STRING - */ - *p++ = ASN1_SEQUENCE | ASN1_CONSTRUCTED; - *p++ = (unsigned char) ( 0x08 + oid_size + hashlen ); - *p++ = ASN1_SEQUENCE | ASN1_CONSTRUCTED; - *p++ = (unsigned char) ( 0x04 + oid_size ); - *p++ = ASN1_OID; - *p++ = oid_size & 0xFF; - memcpy( p, oid, oid_size ); - p += oid_size; - *p++ = ASN1_NULL; - *p++ = 0x00; - *p++ = ASN1_OCTET_STRING; - *p++ = hashlen; - memcpy( p, hash, hashlen ); - } - - return( ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, sig, sig ) - : rsa_private( ctx, f_rng, p_rng, sig, sig ) ); -} -#endif /* POLARSSL_PKCS1_V15 */ - -/* - * Do an RSA operation to sign the message digest - */ -int rsa_pkcs1_sign( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) -{ - switch( ctx->padding ) - { -#if defined(POLARSSL_PKCS1_V15) - case RSA_PKCS_V15: - return rsa_rsassa_pkcs1_v15_sign( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); -#endif - -#if defined(POLARSSL_PKCS1_V21) - case RSA_PKCS_V21: - return rsa_rsassa_pss_sign( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); -#endif - - default: - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - } -} - -#if defined(POLARSSL_PKCS1_V21) -/* - * Implementation of the PKCS#1 v2.1 RSASSA-PSS-VERIFY function - */ -int rsa_rsassa_pss_verify_ext( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - md_type_t mgf1_hash_id, - int expected_salt_len, - const unsigned char *sig ) -{ - int ret; - size_t siglen; - unsigned char *p; - unsigned char buf[POLARSSL_MPI_MAX_SIZE]; - unsigned char result[POLARSSL_MD_MAX_SIZE]; - unsigned char zeros[8]; - unsigned int hlen; - size_t slen, msb; - const md_info_t *md_info; - md_context_t md_ctx; - - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V21 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - siglen = ctx->len; - - if( siglen < 16 || siglen > sizeof( buf ) ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - ret = ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, sig, buf ) - : rsa_private( ctx, f_rng, p_rng, sig, buf ); - - if( ret != 0 ) - return( ret ); - - p = buf; - - if( buf[siglen - 1] != 0xBC ) - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - - if( md_alg != POLARSSL_MD_NONE ) - { - // Gather length of hash to sign - // - md_info = md_info_from_type( md_alg ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - hashlen = md_get_size( md_info ); - } - - md_info = md_info_from_type( mgf1_hash_id ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - hlen = md_get_size( md_info ); - slen = siglen - hlen - 1; /* Currently length of salt + padding */ - - memset( zeros, 0, 8 ); - - // Note: EMSA-PSS verification is over the length of N - 1 bits - // - msb = mpi_msb( &ctx->N ) - 1; - - // Compensate for boundary condition when applying mask - // - if( msb % 8 == 0 ) - { - p++; - siglen -= 1; - } - if( buf[0] >> ( 8 - siglen * 8 + msb ) ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - md_init( &md_ctx ); - md_init_ctx( &md_ctx, md_info ); - - mgf_mask( p, siglen - hlen - 1, p + siglen - hlen - 1, hlen, &md_ctx ); - - buf[0] &= 0xFF >> ( siglen * 8 - msb ); - - while( p < buf + siglen && *p == 0 ) - p++; - - if( p == buf + siglen || - *p++ != 0x01 ) - { - md_free( &md_ctx ); - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - } - - /* Actual salt len */ - slen -= p - buf; - - if( expected_salt_len != RSA_SALT_LEN_ANY && - slen != (size_t) expected_salt_len ) - { - md_free( &md_ctx ); - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - } - - // Generate H = Hash( M' ) - // - md_starts( &md_ctx ); - md_update( &md_ctx, zeros, 8 ); - md_update( &md_ctx, hash, hashlen ); - md_update( &md_ctx, p, slen ); - md_finish( &md_ctx, result ); - - md_free( &md_ctx ); - - if( memcmp( p + slen, result, hlen ) == 0 ) - return( 0 ); - else - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); -} - -/* - * Simplified PKCS#1 v2.1 RSASSA-PSS-VERIFY function - */ -int rsa_rsassa_pss_verify( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ) -{ - md_type_t mgf1_hash_id = ( ctx->hash_id != POLARSSL_MD_NONE ) - ? (md_type_t) ctx->hash_id - : md_alg; - - return( rsa_rsassa_pss_verify_ext( ctx, f_rng, p_rng, mode, - md_alg, hashlen, hash, - mgf1_hash_id, RSA_SALT_LEN_ANY, - sig ) ); - -} -#endif /* POLARSSL_PKCS1_V21 */ - -#if defined(POLARSSL_PKCS1_V15) -/* - * Implementation of the PKCS#1 v2.1 RSASSA-PKCS1-v1_5-VERIFY function - */ -int rsa_rsassa_pkcs1_v15_verify( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ) -{ - int ret; - size_t len, siglen, asn1_len; - unsigned char *p, *end; - unsigned char buf[POLARSSL_MPI_MAX_SIZE]; - md_type_t msg_md_alg; - const md_info_t *md_info; - asn1_buf oid; - - if( mode == RSA_PRIVATE && ctx->padding != RSA_PKCS_V15 ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - siglen = ctx->len; - - if( siglen < 16 || siglen > sizeof( buf ) ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - - ret = ( mode == RSA_PUBLIC ) - ? rsa_public( ctx, sig, buf ) - : rsa_private( ctx, f_rng, p_rng, sig, buf ); - - if( ret != 0 ) - return( ret ); - - p = buf; - - if( *p++ != 0 || *p++ != RSA_SIGN ) - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - - while( *p != 0 ) - { - if( p >= buf + siglen - 1 || *p != 0xFF ) - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - p++; - } - p++; - - len = siglen - ( p - buf ); - - if( len == hashlen && md_alg == POLARSSL_MD_NONE ) - { - if( memcmp( p, hash, hashlen ) == 0 ) - return( 0 ); - else - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - } - - md_info = md_info_from_type( md_alg ); - if( md_info == NULL ) - return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); - hashlen = md_get_size( md_info ); - - end = p + len; - - // Parse the ASN.1 structure inside the PKCS#1 v1.5 structure - // - if( ( ret = asn1_get_tag( &p, end, &asn1_len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( asn1_len + 2 != len ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( ( ret = asn1_get_tag( &p, end, &asn1_len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( asn1_len + 6 + hashlen != len ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( ( ret = asn1_get_tag( &p, end, &oid.len, ASN1_OID ) ) != 0 ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - oid.p = p; - p += oid.len; - - if( oid_get_md_alg( &oid, &msg_md_alg ) != 0 ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( md_alg != msg_md_alg ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - /* - * assume the algorithm parameters must be NULL - */ - if( ( ret = asn1_get_tag( &p, end, &asn1_len, ASN1_NULL ) ) != 0 ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( ( ret = asn1_get_tag( &p, end, &asn1_len, ASN1_OCTET_STRING ) ) != 0 ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( asn1_len != hashlen ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - if( memcmp( p, hash, hashlen ) != 0 ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - p += hashlen; - - if( p != end ) - return( POLARSSL_ERR_RSA_VERIFY_FAILED ); - - return( 0 ); -} -#endif /* POLARSSL_PKCS1_V15 */ - -/* - * Do an RSA operation and check the message digest - */ -int rsa_pkcs1_verify( rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ) -{ - switch( ctx->padding ) - { -#if defined(POLARSSL_PKCS1_V15) - case RSA_PKCS_V15: - return rsa_rsassa_pkcs1_v15_verify( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); -#endif - -#if defined(POLARSSL_PKCS1_V21) - case RSA_PKCS_V21: - return rsa_rsassa_pss_verify( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); -#endif - - default: - return( POLARSSL_ERR_RSA_INVALID_PADDING ); - } -} - -/* - * Copy the components of an RSA key - */ -int rsa_copy( rsa_context *dst, const rsa_context *src ) -{ - int ret; - - dst->ver = src->ver; - dst->len = src->len; - - MPI_CHK( mpi_copy( &dst->N, &src->N ) ); - MPI_CHK( mpi_copy( &dst->E, &src->E ) ); - - MPI_CHK( mpi_copy( &dst->D, &src->D ) ); - MPI_CHK( mpi_copy( &dst->P, &src->P ) ); - MPI_CHK( mpi_copy( &dst->Q, &src->Q ) ); - MPI_CHK( mpi_copy( &dst->DP, &src->DP ) ); - MPI_CHK( mpi_copy( &dst->DQ, &src->DQ ) ); - MPI_CHK( mpi_copy( &dst->QP, &src->QP ) ); - - MPI_CHK( mpi_copy( &dst->RN, &src->RN ) ); - MPI_CHK( mpi_copy( &dst->RP, &src->RP ) ); - MPI_CHK( mpi_copy( &dst->RQ, &src->RQ ) ); - -#if !defined(POLARSSL_RSA_NO_CRT) - MPI_CHK( mpi_copy( &dst->Vi, &src->Vi ) ); - MPI_CHK( mpi_copy( &dst->Vf, &src->Vf ) ); -#endif - - dst->padding = src->padding; - dst->hash_id = src->hash_id; - -cleanup: - if( ret != 0 ) - rsa_free( dst ); - - return( ret ); -} - -/* - * Free the components of an RSA key - */ -void rsa_free( rsa_context *ctx ) -{ -#if !defined(POLARSSL_RSA_NO_CRT) - mpi_free( &ctx->Vi ); mpi_free( &ctx->Vf ); -#endif - mpi_free( &ctx->RQ ); mpi_free( &ctx->RP ); mpi_free( &ctx->RN ); - mpi_free( &ctx->QP ); mpi_free( &ctx->DQ ); mpi_free( &ctx->DP ); - mpi_free( &ctx->Q ); mpi_free( &ctx->P ); mpi_free( &ctx->D ); - mpi_free( &ctx->E ); mpi_free( &ctx->N ); - -#if defined(POLARSSL_THREADING_C) - polarssl_mutex_free( &ctx->mutex ); -#endif -} - -#if defined(POLARSSL_SELF_TEST) - -#include "polarssl/sha1.h" - -/* - * Example RSA-1024 keypair, for test purposes - */ -#define KEY_LEN 128 - -#define RSA_N "9292758453063D803DD603D5E777D788" \ - "8ED1D5BF35786190FA2F23EBC0848AEA" \ - "DDA92CA6C3D80B32C4D109BE0F36D6AE" \ - "7130B9CED7ACDF54CFC7555AC14EEBAB" \ - "93A89813FBF3C4F8066D2D800F7C38A8" \ - "1AE31942917403FF4946B0A83D3D3E05" \ - "EE57C6F5F5606FB5D4BC6CD34EE0801A" \ - "5E94BB77B07507233A0BC7BAC8F90F79" - -#define RSA_E "10001" - -#define RSA_D "24BF6185468786FDD303083D25E64EFC" \ - "66CA472BC44D253102F8B4A9D3BFA750" \ - "91386C0077937FE33FA3252D28855837" \ - "AE1B484A8A9A45F7EE8C0C634F99E8CD" \ - "DF79C5CE07EE72C7F123142198164234" \ - "CABB724CF78B8173B9F880FC86322407" \ - "AF1FEDFDDE2BEB674CA15F3E81A1521E" \ - "071513A1E85B5DFA031F21ECAE91A34D" - -#define RSA_P "C36D0EB7FCD285223CFB5AABA5BDA3D8" \ - "2C01CAD19EA484A87EA4377637E75500" \ - "FCB2005C5C7DD6EC4AC023CDA285D796" \ - "C3D9E75E1EFC42488BB4F1D13AC30A57" - -#define RSA_Q "C000DF51A7C77AE8D7C7370C1FF55B69" \ - "E211C2B9E5DB1ED0BF61D0D9899620F4" \ - "910E4168387E3C30AA1E00C339A79508" \ - "8452DD96A9A5EA5D9DCA68DA636032AF" - -#define RSA_DP "C1ACF567564274FB07A0BBAD5D26E298" \ - "3C94D22288ACD763FD8E5600ED4A702D" \ - "F84198A5F06C2E72236AE490C93F07F8" \ - "3CC559CD27BC2D1CA488811730BB5725" - -#define RSA_DQ "4959CBF6F8FEF750AEE6977C155579C7" \ - "D8AAEA56749EA28623272E4F7D0592AF" \ - "7C1F1313CAC9471B5C523BFE592F517B" \ - "407A1BD76C164B93DA2D32A383E58357" - -#define RSA_QP "9AE7FBC99546432DF71896FC239EADAE" \ - "F38D18D2B2F0E2DD275AA977E2BF4411" \ - "F5A3B2A5D33605AEBBCCBA7FEB9F2D2F" \ - "A74206CEC169D74BF5A8C50D6F48EA08" - -#define PT_LEN 24 -#define RSA_PT "\xAA\xBB\xCC\x03\x02\x01\x00\xFF\xFF\xFF\xFF\xFF" \ - "\x11\x22\x33\x0A\x0B\x0C\xCC\xDD\xDD\xDD\xDD\xDD" - -#if defined(POLARSSL_PKCS1_V15) -static int myrand( void *rng_state, unsigned char *output, size_t len ) -{ -#if !defined(__OpenBSD__) - size_t i; - - if( rng_state != NULL ) - rng_state = NULL; - - for( i = 0; i < len; ++i ) - output[i] = rand(); -#else - if( rng_state != NULL ) - rng_state = NULL; - - arc4random_buf( output, len ); -#endif /* !OpenBSD */ - - return( 0 ); -} -#endif /* POLARSSL_PKCS1_V15 */ - -/* - * Checkup routine - */ -int rsa_self_test( int verbose ) -{ - int ret = 0; -#if defined(POLARSSL_PKCS1_V15) - size_t len; - rsa_context rsa; - unsigned char rsa_plaintext[PT_LEN]; - unsigned char rsa_decrypted[PT_LEN]; - unsigned char rsa_ciphertext[KEY_LEN]; -#if defined(POLARSSL_SHA1_C) - unsigned char sha1sum[20]; -#endif - - rsa_init( &rsa, RSA_PKCS_V15, 0 ); - - rsa.len = KEY_LEN; - MPI_CHK( mpi_read_string( &rsa.N , 16, RSA_N ) ); - MPI_CHK( mpi_read_string( &rsa.E , 16, RSA_E ) ); - MPI_CHK( mpi_read_string( &rsa.D , 16, RSA_D ) ); - MPI_CHK( mpi_read_string( &rsa.P , 16, RSA_P ) ); - MPI_CHK( mpi_read_string( &rsa.Q , 16, RSA_Q ) ); - MPI_CHK( mpi_read_string( &rsa.DP, 16, RSA_DP ) ); - MPI_CHK( mpi_read_string( &rsa.DQ, 16, RSA_DQ ) ); - MPI_CHK( mpi_read_string( &rsa.QP, 16, RSA_QP ) ); - - if( verbose != 0 ) - polarssl_printf( " RSA key validation: " ); - - if( rsa_check_pubkey( &rsa ) != 0 || - rsa_check_privkey( &rsa ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n PKCS#1 encryption : " ); - - memcpy( rsa_plaintext, RSA_PT, PT_LEN ); - - if( rsa_pkcs1_encrypt( &rsa, myrand, NULL, RSA_PUBLIC, PT_LEN, - rsa_plaintext, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n PKCS#1 decryption : " ); - - if( rsa_pkcs1_decrypt( &rsa, myrand, NULL, RSA_PRIVATE, &len, - rsa_ciphertext, rsa_decrypted, - sizeof(rsa_decrypted) ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( memcmp( rsa_decrypted, rsa_plaintext, len ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - -#if defined(POLARSSL_SHA1_C) - if( verbose != 0 ) - polarssl_printf( "passed\n PKCS#1 data sign : " ); - - sha1( rsa_plaintext, PT_LEN, sha1sum ); - - if( rsa_pkcs1_sign( &rsa, myrand, NULL, RSA_PRIVATE, POLARSSL_MD_SHA1, 0, - sha1sum, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n PKCS#1 sig. verify: " ); - - if( rsa_pkcs1_verify( &rsa, NULL, NULL, RSA_PUBLIC, POLARSSL_MD_SHA1, 0, - sha1sum, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n\n" ); -#endif /* POLARSSL_SHA1_C */ - -cleanup: - rsa_free( &rsa ); -#else /* POLARSSL_PKCS1_V15 */ - ((void) verbose); -#endif /* POLARSSL_PKCS1_V15 */ - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_RSA_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/sha1.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/sha1.c deleted file mode 100644 index 20408c7..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/sha1.c +++ /dev/null @@ -1,661 +0,0 @@ -/* - * FIPS-180-1 compliant SHA-1 implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The SHA-1 standard was published by NIST in 1993. - * - * http://www.itl.nist.gov/fipspubs/fip180-1.htm - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_SHA1_C) - -#include "polarssl/sha1.h" - -#if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if !defined(POLARSSL_SHA1_ALT) - -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - -void sha1_init( sha1_context *ctx ) -{ - memset( ctx, 0, sizeof( sha1_context ) ); -} - -void sha1_free( sha1_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( sha1_context ) ); -} - -/* - * SHA-1 context setup - */ -void sha1_starts( sha1_context *ctx ) -{ - ctx->total[0] = 0; - ctx->total[1] = 0; - - ctx->state[0] = 0x67452301; - ctx->state[1] = 0xEFCDAB89; - ctx->state[2] = 0x98BADCFE; - ctx->state[3] = 0x10325476; - ctx->state[4] = 0xC3D2E1F0; -} - -void sha1_process( sha1_context *ctx, const unsigned char data[64] ) -{ - uint32_t temp, W[16], A, B, C, D, E; - - GET_UINT32_BE( W[ 0], data, 0 ); - GET_UINT32_BE( W[ 1], data, 4 ); - GET_UINT32_BE( W[ 2], data, 8 ); - GET_UINT32_BE( W[ 3], data, 12 ); - GET_UINT32_BE( W[ 4], data, 16 ); - GET_UINT32_BE( W[ 5], data, 20 ); - GET_UINT32_BE( W[ 6], data, 24 ); - GET_UINT32_BE( W[ 7], data, 28 ); - GET_UINT32_BE( W[ 8], data, 32 ); - GET_UINT32_BE( W[ 9], data, 36 ); - GET_UINT32_BE( W[10], data, 40 ); - GET_UINT32_BE( W[11], data, 44 ); - GET_UINT32_BE( W[12], data, 48 ); - GET_UINT32_BE( W[13], data, 52 ); - GET_UINT32_BE( W[14], data, 56 ); - GET_UINT32_BE( W[15], data, 60 ); - -#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) - -#define R(t) \ -( \ - temp = W[( t - 3 ) & 0x0F] ^ W[( t - 8 ) & 0x0F] ^ \ - W[( t - 14 ) & 0x0F] ^ W[ t & 0x0F], \ - ( W[t & 0x0F] = S(temp,1) ) \ -) - -#define P(a,b,c,d,e,x) \ -{ \ - e += S(a,5) + F(b,c,d) + K + x; b = S(b,30); \ -} - - A = ctx->state[0]; - B = ctx->state[1]; - C = ctx->state[2]; - D = ctx->state[3]; - E = ctx->state[4]; - -#define F(x,y,z) (z ^ (x & (y ^ z))) -#define K 0x5A827999 - - P( A, B, C, D, E, W[0] ); - P( E, A, B, C, D, W[1] ); - P( D, E, A, B, C, W[2] ); - P( C, D, E, A, B, W[3] ); - P( B, C, D, E, A, W[4] ); - P( A, B, C, D, E, W[5] ); - P( E, A, B, C, D, W[6] ); - P( D, E, A, B, C, W[7] ); - P( C, D, E, A, B, W[8] ); - P( B, C, D, E, A, W[9] ); - P( A, B, C, D, E, W[10] ); - P( E, A, B, C, D, W[11] ); - P( D, E, A, B, C, W[12] ); - P( C, D, E, A, B, W[13] ); - P( B, C, D, E, A, W[14] ); - P( A, B, C, D, E, W[15] ); - P( E, A, B, C, D, R(16) ); - P( D, E, A, B, C, R(17) ); - P( C, D, E, A, B, R(18) ); - P( B, C, D, E, A, R(19) ); - -#undef K -#undef F - -#define F(x,y,z) (x ^ y ^ z) -#define K 0x6ED9EBA1 - - P( A, B, C, D, E, R(20) ); - P( E, A, B, C, D, R(21) ); - P( D, E, A, B, C, R(22) ); - P( C, D, E, A, B, R(23) ); - P( B, C, D, E, A, R(24) ); - P( A, B, C, D, E, R(25) ); - P( E, A, B, C, D, R(26) ); - P( D, E, A, B, C, R(27) ); - P( C, D, E, A, B, R(28) ); - P( B, C, D, E, A, R(29) ); - P( A, B, C, D, E, R(30) ); - P( E, A, B, C, D, R(31) ); - P( D, E, A, B, C, R(32) ); - P( C, D, E, A, B, R(33) ); - P( B, C, D, E, A, R(34) ); - P( A, B, C, D, E, R(35) ); - P( E, A, B, C, D, R(36) ); - P( D, E, A, B, C, R(37) ); - P( C, D, E, A, B, R(38) ); - P( B, C, D, E, A, R(39) ); - -#undef K -#undef F - -#define F(x,y,z) ((x & y) | (z & (x | y))) -#define K 0x8F1BBCDC - - P( A, B, C, D, E, R(40) ); - P( E, A, B, C, D, R(41) ); - P( D, E, A, B, C, R(42) ); - P( C, D, E, A, B, R(43) ); - P( B, C, D, E, A, R(44) ); - P( A, B, C, D, E, R(45) ); - P( E, A, B, C, D, R(46) ); - P( D, E, A, B, C, R(47) ); - P( C, D, E, A, B, R(48) ); - P( B, C, D, E, A, R(49) ); - P( A, B, C, D, E, R(50) ); - P( E, A, B, C, D, R(51) ); - P( D, E, A, B, C, R(52) ); - P( C, D, E, A, B, R(53) ); - P( B, C, D, E, A, R(54) ); - P( A, B, C, D, E, R(55) ); - P( E, A, B, C, D, R(56) ); - P( D, E, A, B, C, R(57) ); - P( C, D, E, A, B, R(58) ); - P( B, C, D, E, A, R(59) ); - -#undef K -#undef F - -#define F(x,y,z) (x ^ y ^ z) -#define K 0xCA62C1D6 - - P( A, B, C, D, E, R(60) ); - P( E, A, B, C, D, R(61) ); - P( D, E, A, B, C, R(62) ); - P( C, D, E, A, B, R(63) ); - P( B, C, D, E, A, R(64) ); - P( A, B, C, D, E, R(65) ); - P( E, A, B, C, D, R(66) ); - P( D, E, A, B, C, R(67) ); - P( C, D, E, A, B, R(68) ); - P( B, C, D, E, A, R(69) ); - P( A, B, C, D, E, R(70) ); - P( E, A, B, C, D, R(71) ); - P( D, E, A, B, C, R(72) ); - P( C, D, E, A, B, R(73) ); - P( B, C, D, E, A, R(74) ); - P( A, B, C, D, E, R(75) ); - P( E, A, B, C, D, R(76) ); - P( D, E, A, B, C, R(77) ); - P( C, D, E, A, B, R(78) ); - P( B, C, D, E, A, R(79) ); - -#undef K -#undef F - - ctx->state[0] += A; - ctx->state[1] += B; - ctx->state[2] += C; - ctx->state[3] += D; - ctx->state[4] += E; -} - -/* - * SHA-1 process buffer - */ -void sha1_update( sha1_context *ctx, const unsigned char *input, size_t ilen ) -{ - size_t fill; - uint32_t left; - - if( ilen == 0 ) - return; - - left = ctx->total[0] & 0x3F; - fill = 64 - left; - - ctx->total[0] += (uint32_t) ilen; - ctx->total[0] &= 0xFFFFFFFF; - - if( ctx->total[0] < (uint32_t) ilen ) - ctx->total[1]++; - - if( left && ilen >= fill ) - { - memcpy( (void *) (ctx->buffer + left), input, fill ); - sha1_process( ctx, ctx->buffer ); - input += fill; - ilen -= fill; - left = 0; - } - - while( ilen >= 64 ) - { - sha1_process( ctx, input ); - input += 64; - ilen -= 64; - } - - if( ilen > 0 ) - memcpy( (void *) (ctx->buffer + left), input, ilen ); -} - -static const unsigned char sha1_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* - * SHA-1 final digest - */ -void sha1_finish( sha1_context *ctx, unsigned char output[20] ) -{ - uint32_t last, padn; - uint32_t high, low; - unsigned char msglen[8]; - - high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); - low = ( ctx->total[0] << 3 ); - - PUT_UINT32_BE( high, msglen, 0 ); - PUT_UINT32_BE( low, msglen, 4 ); - - last = ctx->total[0] & 0x3F; - padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); - - sha1_update( ctx, sha1_padding, padn ); - sha1_update( ctx, msglen, 8 ); - - PUT_UINT32_BE( ctx->state[0], output, 0 ); - PUT_UINT32_BE( ctx->state[1], output, 4 ); - PUT_UINT32_BE( ctx->state[2], output, 8 ); - PUT_UINT32_BE( ctx->state[3], output, 12 ); - PUT_UINT32_BE( ctx->state[4], output, 16 ); -} - -#endif /* !POLARSSL_SHA1_ALT */ - -/* - * output = SHA-1( input buffer ) - */ -void sha1( const unsigned char *input, size_t ilen, unsigned char output[20] ) -{ - sha1_context ctx; - - sha1_init( &ctx ); - sha1_starts( &ctx ); - sha1_update( &ctx, input, ilen ); - sha1_finish( &ctx, output ); - sha1_free( &ctx ); -} - -#if defined(POLARSSL_FS_IO) -/* - * output = SHA-1( file contents ) - */ -int sha1_file( const char *path, unsigned char output[20] ) -{ - FILE *f; - size_t n; - sha1_context ctx; - unsigned char buf[1024]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_SHA1_FILE_IO_ERROR ); - - sha1_init( &ctx ); - sha1_starts( &ctx ); - - while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) - sha1_update( &ctx, buf, n ); - - sha1_finish( &ctx, output ); - sha1_free( &ctx ); - - if( ferror( f ) != 0 ) - { - fclose( f ); - return( POLARSSL_ERR_SHA1_FILE_IO_ERROR ); - } - - fclose( f ); - return( 0 ); -} -#endif /* POLARSSL_FS_IO */ - -/* - * SHA-1 HMAC context setup - */ -void sha1_hmac_starts( sha1_context *ctx, const unsigned char *key, - size_t keylen ) -{ - size_t i; - unsigned char sum[20]; - - if( keylen > 64 ) - { - sha1( key, keylen, sum ); - keylen = 20; - key = sum; - } - - memset( ctx->ipad, 0x36, 64 ); - memset( ctx->opad, 0x5C, 64 ); - - for( i = 0; i < keylen; i++ ) - { - ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] ); - ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); - } - - sha1_starts( ctx ); - sha1_update( ctx, ctx->ipad, 64 ); - - polarssl_zeroize( sum, sizeof( sum ) ); -} - -/* - * SHA-1 HMAC process buffer - */ -void sha1_hmac_update( sha1_context *ctx, const unsigned char *input, - size_t ilen ) -{ - sha1_update( ctx, input, ilen ); -} - -/* - * SHA-1 HMAC final digest - */ -void sha1_hmac_finish( sha1_context *ctx, unsigned char output[20] ) -{ - unsigned char tmpbuf[20]; - - sha1_finish( ctx, tmpbuf ); - sha1_starts( ctx ); - sha1_update( ctx, ctx->opad, 64 ); - sha1_update( ctx, tmpbuf, 20 ); - sha1_finish( ctx, output ); - - polarssl_zeroize( tmpbuf, sizeof( tmpbuf ) ); -} - -/* - * SHA1 HMAC context reset - */ -void sha1_hmac_reset( sha1_context *ctx ) -{ - sha1_starts( ctx ); - sha1_update( ctx, ctx->ipad, 64 ); -} - -/* - * output = HMAC-SHA-1( hmac key, input buffer ) - */ -void sha1_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[20] ) -{ - sha1_context ctx; - - sha1_init( &ctx ); - sha1_hmac_starts( &ctx, key, keylen ); - sha1_hmac_update( &ctx, input, ilen ); - sha1_hmac_finish( &ctx, output ); - sha1_free( &ctx ); -} - -#if defined(POLARSSL_SELF_TEST) -/* - * FIPS-180-1 test vectors - */ -static unsigned char sha1_test_buf[3][57] = -{ - { "abc" }, - { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" }, - { "" } -}; - -static const int sha1_test_buflen[3] = -{ - 3, 56, 1000 -}; - -static const unsigned char sha1_test_sum[3][20] = -{ - { 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E, - 0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D }, - { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE, - 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 }, - { 0x34, 0xAA, 0x97, 0x3C, 0xD4, 0xC4, 0xDA, 0xA4, 0xF6, 0x1E, - 0xEB, 0x2B, 0xDB, 0xAD, 0x27, 0x31, 0x65, 0x34, 0x01, 0x6F } -}; - -/* - * RFC 2202 test vectors - */ -static unsigned char sha1_hmac_test_key[7][26] = -{ - { "\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B" - "\x0B\x0B\x0B\x0B" }, - { "Jefe" }, - { "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" - "\xAA\xAA\xAA\xAA" }, - { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10" - "\x11\x12\x13\x14\x15\x16\x17\x18\x19" }, - { "\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C" - "\x0C\x0C\x0C\x0C" }, - { "" }, /* 0xAA 80 times */ - { "" } -}; - -static const int sha1_hmac_test_keylen[7] = -{ - 20, 4, 20, 25, 20, 80, 80 -}; - -static unsigned char sha1_hmac_test_buf[7][74] = -{ - { "Hi There" }, - { "what do ya want for nothing?" }, - { "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" }, - { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" }, - { "Test With Truncation" }, - { "Test Using Larger Than Block-Size Key - Hash Key First" }, - { "Test Using Larger Than Block-Size Key and Larger" - " Than One Block-Size Data" } -}; - -static const int sha1_hmac_test_buflen[7] = -{ - 8, 28, 50, 50, 20, 54, 73 -}; - -static const unsigned char sha1_hmac_test_sum[7][20] = -{ - { 0xB6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xE2, 0x8B, - 0xC0, 0xB6, 0xFB, 0x37, 0x8C, 0x8E, 0xF1, 0x46, 0xBE, 0x00 }, - { 0xEF, 0xFC, 0xDF, 0x6A, 0xE5, 0xEB, 0x2F, 0xA2, 0xD2, 0x74, - 0x16, 0xD5, 0xF1, 0x84, 0xDF, 0x9C, 0x25, 0x9A, 0x7C, 0x79 }, - { 0x12, 0x5D, 0x73, 0x42, 0xB9, 0xAC, 0x11, 0xCD, 0x91, 0xA3, - 0x9A, 0xF4, 0x8A, 0xA1, 0x7B, 0x4F, 0x63, 0xF1, 0x75, 0xD3 }, - { 0x4C, 0x90, 0x07, 0xF4, 0x02, 0x62, 0x50, 0xC6, 0xBC, 0x84, - 0x14, 0xF9, 0xBF, 0x50, 0xC8, 0x6C, 0x2D, 0x72, 0x35, 0xDA }, - { 0x4C, 0x1A, 0x03, 0x42, 0x4B, 0x55, 0xE0, 0x7F, 0xE7, 0xF2, - 0x7B, 0xE1 }, - { 0xAA, 0x4A, 0xE5, 0xE1, 0x52, 0x72, 0xD0, 0x0E, 0x95, 0x70, - 0x56, 0x37, 0xCE, 0x8A, 0x3B, 0x55, 0xED, 0x40, 0x21, 0x12 }, - { 0xE8, 0xE9, 0x9D, 0x0F, 0x45, 0x23, 0x7D, 0x78, 0x6D, 0x6B, - 0xBA, 0xA7, 0x96, 0x5C, 0x78, 0x08, 0xBB, 0xFF, 0x1A, 0x91 } -}; - -/* - * Checkup routine - */ -int sha1_self_test( int verbose ) -{ - int i, j, buflen, ret = 0; - unsigned char buf[1024]; - unsigned char sha1sum[20]; - sha1_context ctx; - - sha1_init( &ctx ); - - /* - * SHA-1 - */ - for( i = 0; i < 3; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " SHA-1 test #%d: ", i + 1 ); - - sha1_starts( &ctx ); - - if( i == 2 ) - { - memset( buf, 'a', buflen = 1000 ); - - for( j = 0; j < 1000; j++ ) - sha1_update( &ctx, buf, buflen ); - } - else - sha1_update( &ctx, sha1_test_buf[i], - sha1_test_buflen[i] ); - - sha1_finish( &ctx, sha1sum ); - - if( memcmp( sha1sum, sha1_test_sum[i], 20 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " HMAC-SHA-1 test #%d: ", i + 1 ); - - if( i == 5 || i == 6 ) - { - memset( buf, '\xAA', buflen = 80 ); - sha1_hmac_starts( &ctx, buf, buflen ); - } - else - sha1_hmac_starts( &ctx, sha1_hmac_test_key[i], - sha1_hmac_test_keylen[i] ); - - sha1_hmac_update( &ctx, sha1_hmac_test_buf[i], - sha1_hmac_test_buflen[i] ); - - sha1_hmac_finish( &ctx, sha1sum ); - - buflen = ( i == 4 ) ? 12 : 20; - - if( memcmp( sha1sum, sha1_hmac_test_sum[i], buflen ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - sha1_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_SHA1_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/sha256.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/sha256.c deleted file mode 100644 index 4fc6698..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/sha256.c +++ /dev/null @@ -1,742 +0,0 @@ -/* - * FIPS-180-2 compliant SHA-256 implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The SHA-256 Secure Hash Standard was published by NIST in 2002. - * - * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_SHA256_C) - -#include "polarssl/sha256.h" - -#if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if !defined(POLARSSL_SHA256_ALT) - -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - -void sha256_init( sha256_context *ctx ) -{ - memset( ctx, 0, sizeof( sha256_context ) ); -} - -void sha256_free( sha256_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( sha256_context ) ); -} - -/* - * SHA-256 context setup - */ -void sha256_starts( sha256_context *ctx, int is224 ) -{ - ctx->total[0] = 0; - ctx->total[1] = 0; - - if( is224 == 0 ) - { - /* SHA-256 */ - ctx->state[0] = 0x6A09E667; - ctx->state[1] = 0xBB67AE85; - ctx->state[2] = 0x3C6EF372; - ctx->state[3] = 0xA54FF53A; - ctx->state[4] = 0x510E527F; - ctx->state[5] = 0x9B05688C; - ctx->state[6] = 0x1F83D9AB; - ctx->state[7] = 0x5BE0CD19; - } - else - { - /* SHA-224 */ - ctx->state[0] = 0xC1059ED8; - ctx->state[1] = 0x367CD507; - ctx->state[2] = 0x3070DD17; - ctx->state[3] = 0xF70E5939; - ctx->state[4] = 0xFFC00B31; - ctx->state[5] = 0x68581511; - ctx->state[6] = 0x64F98FA7; - ctx->state[7] = 0xBEFA4FA4; - } - - ctx->is224 = is224; -} - -void sha256_process( sha256_context *ctx, const unsigned char data[64] ) -{ - uint32_t temp1, temp2, W[64]; - uint32_t A, B, C, D, E, F, G, H; - - GET_UINT32_BE( W[ 0], data, 0 ); - GET_UINT32_BE( W[ 1], data, 4 ); - GET_UINT32_BE( W[ 2], data, 8 ); - GET_UINT32_BE( W[ 3], data, 12 ); - GET_UINT32_BE( W[ 4], data, 16 ); - GET_UINT32_BE( W[ 5], data, 20 ); - GET_UINT32_BE( W[ 6], data, 24 ); - GET_UINT32_BE( W[ 7], data, 28 ); - GET_UINT32_BE( W[ 8], data, 32 ); - GET_UINT32_BE( W[ 9], data, 36 ); - GET_UINT32_BE( W[10], data, 40 ); - GET_UINT32_BE( W[11], data, 44 ); - GET_UINT32_BE( W[12], data, 48 ); - GET_UINT32_BE( W[13], data, 52 ); - GET_UINT32_BE( W[14], data, 56 ); - GET_UINT32_BE( W[15], data, 60 ); - -#define SHR(x,n) ((x & 0xFFFFFFFF) >> n) -#define ROTR(x,n) (SHR(x,n) | (x << (32 - n))) - -#define S0(x) (ROTR(x, 7) ^ ROTR(x,18) ^ SHR(x, 3)) -#define S1(x) (ROTR(x,17) ^ ROTR(x,19) ^ SHR(x,10)) - -#define S2(x) (ROTR(x, 2) ^ ROTR(x,13) ^ ROTR(x,22)) -#define S3(x) (ROTR(x, 6) ^ ROTR(x,11) ^ ROTR(x,25)) - -#define F0(x,y,z) ((x & y) | (z & (x | y))) -#define F1(x,y,z) (z ^ (x & (y ^ z))) - -#define R(t) \ -( \ - W[t] = S1(W[t - 2]) + W[t - 7] + \ - S0(W[t - 15]) + W[t - 16] \ -) - -#define P(a,b,c,d,e,f,g,h,x,K) \ -{ \ - temp1 = h + S3(e) + F1(e,f,g) + K + x; \ - temp2 = S2(a) + F0(a,b,c); \ - d += temp1; h = temp1 + temp2; \ -} - - A = ctx->state[0]; - B = ctx->state[1]; - C = ctx->state[2]; - D = ctx->state[3]; - E = ctx->state[4]; - F = ctx->state[5]; - G = ctx->state[6]; - H = ctx->state[7]; - - P( A, B, C, D, E, F, G, H, W[ 0], 0x428A2F98 ); - P( H, A, B, C, D, E, F, G, W[ 1], 0x71374491 ); - P( G, H, A, B, C, D, E, F, W[ 2], 0xB5C0FBCF ); - P( F, G, H, A, B, C, D, E, W[ 3], 0xE9B5DBA5 ); - P( E, F, G, H, A, B, C, D, W[ 4], 0x3956C25B ); - P( D, E, F, G, H, A, B, C, W[ 5], 0x59F111F1 ); - P( C, D, E, F, G, H, A, B, W[ 6], 0x923F82A4 ); - P( B, C, D, E, F, G, H, A, W[ 7], 0xAB1C5ED5 ); - P( A, B, C, D, E, F, G, H, W[ 8], 0xD807AA98 ); - P( H, A, B, C, D, E, F, G, W[ 9], 0x12835B01 ); - P( G, H, A, B, C, D, E, F, W[10], 0x243185BE ); - P( F, G, H, A, B, C, D, E, W[11], 0x550C7DC3 ); - P( E, F, G, H, A, B, C, D, W[12], 0x72BE5D74 ); - P( D, E, F, G, H, A, B, C, W[13], 0x80DEB1FE ); - P( C, D, E, F, G, H, A, B, W[14], 0x9BDC06A7 ); - P( B, C, D, E, F, G, H, A, W[15], 0xC19BF174 ); - P( A, B, C, D, E, F, G, H, R(16), 0xE49B69C1 ); - P( H, A, B, C, D, E, F, G, R(17), 0xEFBE4786 ); - P( G, H, A, B, C, D, E, F, R(18), 0x0FC19DC6 ); - P( F, G, H, A, B, C, D, E, R(19), 0x240CA1CC ); - P( E, F, G, H, A, B, C, D, R(20), 0x2DE92C6F ); - P( D, E, F, G, H, A, B, C, R(21), 0x4A7484AA ); - P( C, D, E, F, G, H, A, B, R(22), 0x5CB0A9DC ); - P( B, C, D, E, F, G, H, A, R(23), 0x76F988DA ); - P( A, B, C, D, E, F, G, H, R(24), 0x983E5152 ); - P( H, A, B, C, D, E, F, G, R(25), 0xA831C66D ); - P( G, H, A, B, C, D, E, F, R(26), 0xB00327C8 ); - P( F, G, H, A, B, C, D, E, R(27), 0xBF597FC7 ); - P( E, F, G, H, A, B, C, D, R(28), 0xC6E00BF3 ); - P( D, E, F, G, H, A, B, C, R(29), 0xD5A79147 ); - P( C, D, E, F, G, H, A, B, R(30), 0x06CA6351 ); - P( B, C, D, E, F, G, H, A, R(31), 0x14292967 ); - P( A, B, C, D, E, F, G, H, R(32), 0x27B70A85 ); - P( H, A, B, C, D, E, F, G, R(33), 0x2E1B2138 ); - P( G, H, A, B, C, D, E, F, R(34), 0x4D2C6DFC ); - P( F, G, H, A, B, C, D, E, R(35), 0x53380D13 ); - P( E, F, G, H, A, B, C, D, R(36), 0x650A7354 ); - P( D, E, F, G, H, A, B, C, R(37), 0x766A0ABB ); - P( C, D, E, F, G, H, A, B, R(38), 0x81C2C92E ); - P( B, C, D, E, F, G, H, A, R(39), 0x92722C85 ); - P( A, B, C, D, E, F, G, H, R(40), 0xA2BFE8A1 ); - P( H, A, B, C, D, E, F, G, R(41), 0xA81A664B ); - P( G, H, A, B, C, D, E, F, R(42), 0xC24B8B70 ); - P( F, G, H, A, B, C, D, E, R(43), 0xC76C51A3 ); - P( E, F, G, H, A, B, C, D, R(44), 0xD192E819 ); - P( D, E, F, G, H, A, B, C, R(45), 0xD6990624 ); - P( C, D, E, F, G, H, A, B, R(46), 0xF40E3585 ); - P( B, C, D, E, F, G, H, A, R(47), 0x106AA070 ); - P( A, B, C, D, E, F, G, H, R(48), 0x19A4C116 ); - P( H, A, B, C, D, E, F, G, R(49), 0x1E376C08 ); - P( G, H, A, B, C, D, E, F, R(50), 0x2748774C ); - P( F, G, H, A, B, C, D, E, R(51), 0x34B0BCB5 ); - P( E, F, G, H, A, B, C, D, R(52), 0x391C0CB3 ); - P( D, E, F, G, H, A, B, C, R(53), 0x4ED8AA4A ); - P( C, D, E, F, G, H, A, B, R(54), 0x5B9CCA4F ); - P( B, C, D, E, F, G, H, A, R(55), 0x682E6FF3 ); - P( A, B, C, D, E, F, G, H, R(56), 0x748F82EE ); - P( H, A, B, C, D, E, F, G, R(57), 0x78A5636F ); - P( G, H, A, B, C, D, E, F, R(58), 0x84C87814 ); - P( F, G, H, A, B, C, D, E, R(59), 0x8CC70208 ); - P( E, F, G, H, A, B, C, D, R(60), 0x90BEFFFA ); - P( D, E, F, G, H, A, B, C, R(61), 0xA4506CEB ); - P( C, D, E, F, G, H, A, B, R(62), 0xBEF9A3F7 ); - P( B, C, D, E, F, G, H, A, R(63), 0xC67178F2 ); - - ctx->state[0] += A; - ctx->state[1] += B; - ctx->state[2] += C; - ctx->state[3] += D; - ctx->state[4] += E; - ctx->state[5] += F; - ctx->state[6] += G; - ctx->state[7] += H; -} - -/* - * SHA-256 process buffer - */ -void sha256_update( sha256_context *ctx, const unsigned char *input, - size_t ilen ) -{ - size_t fill; - uint32_t left; - - if( ilen == 0 ) - return; - - left = ctx->total[0] & 0x3F; - fill = 64 - left; - - ctx->total[0] += (uint32_t) ilen; - ctx->total[0] &= 0xFFFFFFFF; - - if( ctx->total[0] < (uint32_t) ilen ) - ctx->total[1]++; - - if( left && ilen >= fill ) - { - memcpy( (void *) (ctx->buffer + left), input, fill ); - sha256_process( ctx, ctx->buffer ); - input += fill; - ilen -= fill; - left = 0; - } - - while( ilen >= 64 ) - { - sha256_process( ctx, input ); - input += 64; - ilen -= 64; - } - - if( ilen > 0 ) - memcpy( (void *) (ctx->buffer + left), input, ilen ); -} - -static const unsigned char sha256_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* - * SHA-256 final digest - */ -void sha256_finish( sha256_context *ctx, unsigned char output[32] ) -{ - uint32_t last, padn; - uint32_t high, low; - unsigned char msglen[8]; - - high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); - low = ( ctx->total[0] << 3 ); - - PUT_UINT32_BE( high, msglen, 0 ); - PUT_UINT32_BE( low, msglen, 4 ); - - last = ctx->total[0] & 0x3F; - padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); - - sha256_update( ctx, sha256_padding, padn ); - sha256_update( ctx, msglen, 8 ); - - PUT_UINT32_BE( ctx->state[0], output, 0 ); - PUT_UINT32_BE( ctx->state[1], output, 4 ); - PUT_UINT32_BE( ctx->state[2], output, 8 ); - PUT_UINT32_BE( ctx->state[3], output, 12 ); - PUT_UINT32_BE( ctx->state[4], output, 16 ); - PUT_UINT32_BE( ctx->state[5], output, 20 ); - PUT_UINT32_BE( ctx->state[6], output, 24 ); - - if( ctx->is224 == 0 ) - PUT_UINT32_BE( ctx->state[7], output, 28 ); -} - -#endif /* !POLARSSL_SHA256_ALT */ - -/* - * output = SHA-256( input buffer ) - */ -void sha256( const unsigned char *input, size_t ilen, - unsigned char output[32], int is224 ) -{ - sha256_context ctx; - - sha256_init( &ctx ); - sha256_starts( &ctx, is224 ); - sha256_update( &ctx, input, ilen ); - sha256_finish( &ctx, output ); - sha256_free( &ctx ); -} - -#if defined(POLARSSL_FS_IO) -/* - * output = SHA-256( file contents ) - */ -int sha256_file( const char *path, unsigned char output[32], int is224 ) -{ - FILE *f; - size_t n; - sha256_context ctx; - unsigned char buf[1024]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_SHA256_FILE_IO_ERROR ); - - sha256_init( &ctx ); - sha256_starts( &ctx, is224 ); - - while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) - sha256_update( &ctx, buf, n ); - - sha256_finish( &ctx, output ); - sha256_free( &ctx ); - - if( ferror( f ) != 0 ) - { - fclose( f ); - return( POLARSSL_ERR_SHA256_FILE_IO_ERROR ); - } - - fclose( f ); - return( 0 ); -} -#endif /* POLARSSL_FS_IO */ - -/* - * SHA-256 HMAC context setup - */ -void sha256_hmac_starts( sha256_context *ctx, const unsigned char *key, - size_t keylen, int is224 ) -{ - size_t i; - unsigned char sum[32]; - - if( keylen > 64 ) - { - sha256( key, keylen, sum, is224 ); - keylen = ( is224 ) ? 28 : 32; - key = sum; - } - - memset( ctx->ipad, 0x36, 64 ); - memset( ctx->opad, 0x5C, 64 ); - - for( i = 0; i < keylen; i++ ) - { - ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] ); - ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); - } - - sha256_starts( ctx, is224 ); - sha256_update( ctx, ctx->ipad, 64 ); - - polarssl_zeroize( sum, sizeof( sum ) ); -} - -/* - * SHA-256 HMAC process buffer - */ -void sha256_hmac_update( sha256_context *ctx, const unsigned char *input, - size_t ilen ) -{ - sha256_update( ctx, input, ilen ); -} - -/* - * SHA-256 HMAC final digest - */ -void sha256_hmac_finish( sha256_context *ctx, unsigned char output[32] ) -{ - int is224, hlen; - unsigned char tmpbuf[32]; - - is224 = ctx->is224; - hlen = ( is224 == 0 ) ? 32 : 28; - - sha256_finish( ctx, tmpbuf ); - sha256_starts( ctx, is224 ); - sha256_update( ctx, ctx->opad, 64 ); - sha256_update( ctx, tmpbuf, hlen ); - sha256_finish( ctx, output ); - - polarssl_zeroize( tmpbuf, sizeof( tmpbuf ) ); -} - -/* - * SHA-256 HMAC context reset - */ -void sha256_hmac_reset( sha256_context *ctx ) -{ - sha256_starts( ctx, ctx->is224 ); - sha256_update( ctx, ctx->ipad, 64 ); -} - -/* - * output = HMAC-SHA-256( hmac key, input buffer ) - */ -void sha256_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[32], int is224 ) -{ - sha256_context ctx; - - sha256_init( &ctx ); - sha256_hmac_starts( &ctx, key, keylen, is224 ); - sha256_hmac_update( &ctx, input, ilen ); - sha256_hmac_finish( &ctx, output ); - sha256_free( &ctx ); -} - -#if defined(POLARSSL_SELF_TEST) -/* - * FIPS-180-2 test vectors - */ -static unsigned char sha256_test_buf[3][57] = -{ - { "abc" }, - { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" }, - { "" } -}; - -static const int sha256_test_buflen[3] = -{ - 3, 56, 1000 -}; - -static const unsigned char sha256_test_sum[6][32] = -{ - /* - * SHA-224 test vectors - */ - { 0x23, 0x09, 0x7D, 0x22, 0x34, 0x05, 0xD8, 0x22, - 0x86, 0x42, 0xA4, 0x77, 0xBD, 0xA2, 0x55, 0xB3, - 0x2A, 0xAD, 0xBC, 0xE4, 0xBD, 0xA0, 0xB3, 0xF7, - 0xE3, 0x6C, 0x9D, 0xA7 }, - { 0x75, 0x38, 0x8B, 0x16, 0x51, 0x27, 0x76, 0xCC, - 0x5D, 0xBA, 0x5D, 0xA1, 0xFD, 0x89, 0x01, 0x50, - 0xB0, 0xC6, 0x45, 0x5C, 0xB4, 0xF5, 0x8B, 0x19, - 0x52, 0x52, 0x25, 0x25 }, - { 0x20, 0x79, 0x46, 0x55, 0x98, 0x0C, 0x91, 0xD8, - 0xBB, 0xB4, 0xC1, 0xEA, 0x97, 0x61, 0x8A, 0x4B, - 0xF0, 0x3F, 0x42, 0x58, 0x19, 0x48, 0xB2, 0xEE, - 0x4E, 0xE7, 0xAD, 0x67 }, - - /* - * SHA-256 test vectors - */ - { 0xBA, 0x78, 0x16, 0xBF, 0x8F, 0x01, 0xCF, 0xEA, - 0x41, 0x41, 0x40, 0xDE, 0x5D, 0xAE, 0x22, 0x23, - 0xB0, 0x03, 0x61, 0xA3, 0x96, 0x17, 0x7A, 0x9C, - 0xB4, 0x10, 0xFF, 0x61, 0xF2, 0x00, 0x15, 0xAD }, - { 0x24, 0x8D, 0x6A, 0x61, 0xD2, 0x06, 0x38, 0xB8, - 0xE5, 0xC0, 0x26, 0x93, 0x0C, 0x3E, 0x60, 0x39, - 0xA3, 0x3C, 0xE4, 0x59, 0x64, 0xFF, 0x21, 0x67, - 0xF6, 0xEC, 0xED, 0xD4, 0x19, 0xDB, 0x06, 0xC1 }, - { 0xCD, 0xC7, 0x6E, 0x5C, 0x99, 0x14, 0xFB, 0x92, - 0x81, 0xA1, 0xC7, 0xE2, 0x84, 0xD7, 0x3E, 0x67, - 0xF1, 0x80, 0x9A, 0x48, 0xA4, 0x97, 0x20, 0x0E, - 0x04, 0x6D, 0x39, 0xCC, 0xC7, 0x11, 0x2C, 0xD0 } -}; - -/* - * RFC 4231 test vectors - */ -static unsigned char sha256_hmac_test_key[7][26] = -{ - { "\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B" - "\x0B\x0B\x0B\x0B" }, - { "Jefe" }, - { "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" - "\xAA\xAA\xAA\xAA" }, - { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10" - "\x11\x12\x13\x14\x15\x16\x17\x18\x19" }, - { "\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C" - "\x0C\x0C\x0C\x0C" }, - { "" }, /* 0xAA 131 times */ - { "" } -}; - -static const int sha256_hmac_test_keylen[7] = -{ - 20, 4, 20, 25, 20, 131, 131 -}; - -static unsigned char sha256_hmac_test_buf[7][153] = -{ - { "Hi There" }, - { "what do ya want for nothing?" }, - { "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" }, - { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" }, - { "Test With Truncation" }, - { "Test Using Larger Than Block-Size Key - Hash Key First" }, - { "This is a test using a larger than block-size key " - "and a larger than block-size data. The key needs to " - "be hashed before being used by the HMAC algorithm." } -}; - -static const int sha256_hmac_test_buflen[7] = -{ - 8, 28, 50, 50, 20, 54, 152 -}; - -static const unsigned char sha256_hmac_test_sum[14][32] = -{ - /* - * HMAC-SHA-224 test vectors - */ - { 0x89, 0x6F, 0xB1, 0x12, 0x8A, 0xBB, 0xDF, 0x19, - 0x68, 0x32, 0x10, 0x7C, 0xD4, 0x9D, 0xF3, 0x3F, - 0x47, 0xB4, 0xB1, 0x16, 0x99, 0x12, 0xBA, 0x4F, - 0x53, 0x68, 0x4B, 0x22 }, - { 0xA3, 0x0E, 0x01, 0x09, 0x8B, 0xC6, 0xDB, 0xBF, - 0x45, 0x69, 0x0F, 0x3A, 0x7E, 0x9E, 0x6D, 0x0F, - 0x8B, 0xBE, 0xA2, 0xA3, 0x9E, 0x61, 0x48, 0x00, - 0x8F, 0xD0, 0x5E, 0x44 }, - { 0x7F, 0xB3, 0xCB, 0x35, 0x88, 0xC6, 0xC1, 0xF6, - 0xFF, 0xA9, 0x69, 0x4D, 0x7D, 0x6A, 0xD2, 0x64, - 0x93, 0x65, 0xB0, 0xC1, 0xF6, 0x5D, 0x69, 0xD1, - 0xEC, 0x83, 0x33, 0xEA }, - { 0x6C, 0x11, 0x50, 0x68, 0x74, 0x01, 0x3C, 0xAC, - 0x6A, 0x2A, 0xBC, 0x1B, 0xB3, 0x82, 0x62, 0x7C, - 0xEC, 0x6A, 0x90, 0xD8, 0x6E, 0xFC, 0x01, 0x2D, - 0xE7, 0xAF, 0xEC, 0x5A }, - { 0x0E, 0x2A, 0xEA, 0x68, 0xA9, 0x0C, 0x8D, 0x37, - 0xC9, 0x88, 0xBC, 0xDB, 0x9F, 0xCA, 0x6F, 0xA8 }, - { 0x95, 0xE9, 0xA0, 0xDB, 0x96, 0x20, 0x95, 0xAD, - 0xAE, 0xBE, 0x9B, 0x2D, 0x6F, 0x0D, 0xBC, 0xE2, - 0xD4, 0x99, 0xF1, 0x12, 0xF2, 0xD2, 0xB7, 0x27, - 0x3F, 0xA6, 0x87, 0x0E }, - { 0x3A, 0x85, 0x41, 0x66, 0xAC, 0x5D, 0x9F, 0x02, - 0x3F, 0x54, 0xD5, 0x17, 0xD0, 0xB3, 0x9D, 0xBD, - 0x94, 0x67, 0x70, 0xDB, 0x9C, 0x2B, 0x95, 0xC9, - 0xF6, 0xF5, 0x65, 0xD1 }, - - /* - * HMAC-SHA-256 test vectors - */ - { 0xB0, 0x34, 0x4C, 0x61, 0xD8, 0xDB, 0x38, 0x53, - 0x5C, 0xA8, 0xAF, 0xCE, 0xAF, 0x0B, 0xF1, 0x2B, - 0x88, 0x1D, 0xC2, 0x00, 0xC9, 0x83, 0x3D, 0xA7, - 0x26, 0xE9, 0x37, 0x6C, 0x2E, 0x32, 0xCF, 0xF7 }, - { 0x5B, 0xDC, 0xC1, 0x46, 0xBF, 0x60, 0x75, 0x4E, - 0x6A, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xC7, - 0x5A, 0x00, 0x3F, 0x08, 0x9D, 0x27, 0x39, 0x83, - 0x9D, 0xEC, 0x58, 0xB9, 0x64, 0xEC, 0x38, 0x43 }, - { 0x77, 0x3E, 0xA9, 0x1E, 0x36, 0x80, 0x0E, 0x46, - 0x85, 0x4D, 0xB8, 0xEB, 0xD0, 0x91, 0x81, 0xA7, - 0x29, 0x59, 0x09, 0x8B, 0x3E, 0xF8, 0xC1, 0x22, - 0xD9, 0x63, 0x55, 0x14, 0xCE, 0xD5, 0x65, 0xFE }, - { 0x82, 0x55, 0x8A, 0x38, 0x9A, 0x44, 0x3C, 0x0E, - 0xA4, 0xCC, 0x81, 0x98, 0x99, 0xF2, 0x08, 0x3A, - 0x85, 0xF0, 0xFA, 0xA3, 0xE5, 0x78, 0xF8, 0x07, - 0x7A, 0x2E, 0x3F, 0xF4, 0x67, 0x29, 0x66, 0x5B }, - { 0xA3, 0xB6, 0x16, 0x74, 0x73, 0x10, 0x0E, 0xE0, - 0x6E, 0x0C, 0x79, 0x6C, 0x29, 0x55, 0x55, 0x2B }, - { 0x60, 0xE4, 0x31, 0x59, 0x1E, 0xE0, 0xB6, 0x7F, - 0x0D, 0x8A, 0x26, 0xAA, 0xCB, 0xF5, 0xB7, 0x7F, - 0x8E, 0x0B, 0xC6, 0x21, 0x37, 0x28, 0xC5, 0x14, - 0x05, 0x46, 0x04, 0x0F, 0x0E, 0xE3, 0x7F, 0x54 }, - { 0x9B, 0x09, 0xFF, 0xA7, 0x1B, 0x94, 0x2F, 0xCB, - 0x27, 0x63, 0x5F, 0xBC, 0xD5, 0xB0, 0xE9, 0x44, - 0xBF, 0xDC, 0x63, 0x64, 0x4F, 0x07, 0x13, 0x93, - 0x8A, 0x7F, 0x51, 0x53, 0x5C, 0x3A, 0x35, 0xE2 } -}; - -/* - * Checkup routine - */ -int sha256_self_test( int verbose ) -{ - int i, j, k, buflen, ret = 0; - unsigned char buf[1024]; - unsigned char sha256sum[32]; - sha256_context ctx; - - sha256_init( &ctx ); - - for( i = 0; i < 6; i++ ) - { - j = i % 3; - k = i < 3; - - if( verbose != 0 ) - polarssl_printf( " SHA-%d test #%d: ", 256 - k * 32, j + 1 ); - - sha256_starts( &ctx, k ); - - if( j == 2 ) - { - memset( buf, 'a', buflen = 1000 ); - - for( j = 0; j < 1000; j++ ) - sha256_update( &ctx, buf, buflen ); - } - else - sha256_update( &ctx, sha256_test_buf[j], - sha256_test_buflen[j] ); - - sha256_finish( &ctx, sha256sum ); - - if( memcmp( sha256sum, sha256_test_sum[i], 32 - k * 4 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - for( i = 0; i < 14; i++ ) - { - j = i % 7; - k = i < 7; - - if( verbose != 0 ) - polarssl_printf( " HMAC-SHA-%d test #%d: ", 256 - k * 32, j + 1 ); - - if( j == 5 || j == 6 ) - { - memset( buf, '\xAA', buflen = 131 ); - sha256_hmac_starts( &ctx, buf, buflen, k ); - } - else - sha256_hmac_starts( &ctx, sha256_hmac_test_key[j], - sha256_hmac_test_keylen[j], k ); - - sha256_hmac_update( &ctx, sha256_hmac_test_buf[j], - sha256_hmac_test_buflen[j] ); - - sha256_hmac_finish( &ctx, sha256sum ); - - buflen = ( j == 4 ) ? 16 : 32 - k * 4; - - if( memcmp( sha256sum, sha256_hmac_test_sum[i], buflen ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - sha256_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_SHA256_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/sha512.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/sha512.c deleted file mode 100644 index f1d1525..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/sha512.c +++ /dev/null @@ -1,796 +0,0 @@ -/* - * FIPS-180-2 compliant SHA-384/512 implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The SHA-512 Secure Hash Standard was published by NIST in 2002. - * - * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_SHA512_C) - -#include "polarssl/sha512.h" - -#if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST) -#include -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if !defined(POLARSSL_SHA512_ALT) - -/* - * 64-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT64_BE -#define GET_UINT64_BE(n,b,i) \ -{ \ - (n) = ( (uint64_t) (b)[(i) ] << 56 ) \ - | ( (uint64_t) (b)[(i) + 1] << 48 ) \ - | ( (uint64_t) (b)[(i) + 2] << 40 ) \ - | ( (uint64_t) (b)[(i) + 3] << 32 ) \ - | ( (uint64_t) (b)[(i) + 4] << 24 ) \ - | ( (uint64_t) (b)[(i) + 5] << 16 ) \ - | ( (uint64_t) (b)[(i) + 6] << 8 ) \ - | ( (uint64_t) (b)[(i) + 7] ); \ -} -#endif /* GET_UINT64_BE */ - -#ifndef PUT_UINT64_BE -#define PUT_UINT64_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 56 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 48 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 40 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) >> 32 ); \ - (b)[(i) + 4] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 5] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 6] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 7] = (unsigned char) ( (n) ); \ -} -#endif /* PUT_UINT64_BE */ - -/* - * Round constants - */ -static const uint64_t K[80] = -{ - UL64(0x428A2F98D728AE22), UL64(0x7137449123EF65CD), - UL64(0xB5C0FBCFEC4D3B2F), UL64(0xE9B5DBA58189DBBC), - UL64(0x3956C25BF348B538), UL64(0x59F111F1B605D019), - UL64(0x923F82A4AF194F9B), UL64(0xAB1C5ED5DA6D8118), - UL64(0xD807AA98A3030242), UL64(0x12835B0145706FBE), - UL64(0x243185BE4EE4B28C), UL64(0x550C7DC3D5FFB4E2), - UL64(0x72BE5D74F27B896F), UL64(0x80DEB1FE3B1696B1), - UL64(0x9BDC06A725C71235), UL64(0xC19BF174CF692694), - UL64(0xE49B69C19EF14AD2), UL64(0xEFBE4786384F25E3), - UL64(0x0FC19DC68B8CD5B5), UL64(0x240CA1CC77AC9C65), - UL64(0x2DE92C6F592B0275), UL64(0x4A7484AA6EA6E483), - UL64(0x5CB0A9DCBD41FBD4), UL64(0x76F988DA831153B5), - UL64(0x983E5152EE66DFAB), UL64(0xA831C66D2DB43210), - UL64(0xB00327C898FB213F), UL64(0xBF597FC7BEEF0EE4), - UL64(0xC6E00BF33DA88FC2), UL64(0xD5A79147930AA725), - UL64(0x06CA6351E003826F), UL64(0x142929670A0E6E70), - UL64(0x27B70A8546D22FFC), UL64(0x2E1B21385C26C926), - UL64(0x4D2C6DFC5AC42AED), UL64(0x53380D139D95B3DF), - UL64(0x650A73548BAF63DE), UL64(0x766A0ABB3C77B2A8), - UL64(0x81C2C92E47EDAEE6), UL64(0x92722C851482353B), - UL64(0xA2BFE8A14CF10364), UL64(0xA81A664BBC423001), - UL64(0xC24B8B70D0F89791), UL64(0xC76C51A30654BE30), - UL64(0xD192E819D6EF5218), UL64(0xD69906245565A910), - UL64(0xF40E35855771202A), UL64(0x106AA07032BBD1B8), - UL64(0x19A4C116B8D2D0C8), UL64(0x1E376C085141AB53), - UL64(0x2748774CDF8EEB99), UL64(0x34B0BCB5E19B48A8), - UL64(0x391C0CB3C5C95A63), UL64(0x4ED8AA4AE3418ACB), - UL64(0x5B9CCA4F7763E373), UL64(0x682E6FF3D6B2B8A3), - UL64(0x748F82EE5DEFB2FC), UL64(0x78A5636F43172F60), - UL64(0x84C87814A1F0AB72), UL64(0x8CC702081A6439EC), - UL64(0x90BEFFFA23631E28), UL64(0xA4506CEBDE82BDE9), - UL64(0xBEF9A3F7B2C67915), UL64(0xC67178F2E372532B), - UL64(0xCA273ECEEA26619C), UL64(0xD186B8C721C0C207), - UL64(0xEADA7DD6CDE0EB1E), UL64(0xF57D4F7FEE6ED178), - UL64(0x06F067AA72176FBA), UL64(0x0A637DC5A2C898A6), - UL64(0x113F9804BEF90DAE), UL64(0x1B710B35131C471B), - UL64(0x28DB77F523047D84), UL64(0x32CAAB7B40C72493), - UL64(0x3C9EBE0A15C9BEBC), UL64(0x431D67C49C100D4C), - UL64(0x4CC5D4BECB3E42B6), UL64(0x597F299CFC657E2A), - UL64(0x5FCB6FAB3AD6FAEC), UL64(0x6C44198C4A475817) -}; - -void sha512_init( sha512_context *ctx ) -{ - memset( ctx, 0, sizeof( sha512_context ) ); -} - -void sha512_free( sha512_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( sha512_context ) ); -} - -/* - * SHA-512 context setup - */ -void sha512_starts( sha512_context *ctx, int is384 ) -{ - ctx->total[0] = 0; - ctx->total[1] = 0; - - if( is384 == 0 ) - { - /* SHA-512 */ - ctx->state[0] = UL64(0x6A09E667F3BCC908); - ctx->state[1] = UL64(0xBB67AE8584CAA73B); - ctx->state[2] = UL64(0x3C6EF372FE94F82B); - ctx->state[3] = UL64(0xA54FF53A5F1D36F1); - ctx->state[4] = UL64(0x510E527FADE682D1); - ctx->state[5] = UL64(0x9B05688C2B3E6C1F); - ctx->state[6] = UL64(0x1F83D9ABFB41BD6B); - ctx->state[7] = UL64(0x5BE0CD19137E2179); - } - else - { - /* SHA-384 */ - ctx->state[0] = UL64(0xCBBB9D5DC1059ED8); - ctx->state[1] = UL64(0x629A292A367CD507); - ctx->state[2] = UL64(0x9159015A3070DD17); - ctx->state[3] = UL64(0x152FECD8F70E5939); - ctx->state[4] = UL64(0x67332667FFC00B31); - ctx->state[5] = UL64(0x8EB44A8768581511); - ctx->state[6] = UL64(0xDB0C2E0D64F98FA7); - ctx->state[7] = UL64(0x47B5481DBEFA4FA4); - } - - ctx->is384 = is384; -} - -void sha512_process( sha512_context *ctx, const unsigned char data[128] ) -{ - int i; - uint64_t temp1, temp2, W[80]; - uint64_t A, B, C, D, E, F, G, H; - -#define SHR(x,n) (x >> n) -#define ROTR(x,n) (SHR(x,n) | (x << (64 - n))) - -#define S0(x) (ROTR(x, 1) ^ ROTR(x, 8) ^ SHR(x, 7)) -#define S1(x) (ROTR(x,19) ^ ROTR(x,61) ^ SHR(x, 6)) - -#define S2(x) (ROTR(x,28) ^ ROTR(x,34) ^ ROTR(x,39)) -#define S3(x) (ROTR(x,14) ^ ROTR(x,18) ^ ROTR(x,41)) - -#define F0(x,y,z) ((x & y) | (z & (x | y))) -#define F1(x,y,z) (z ^ (x & (y ^ z))) - -#define P(a,b,c,d,e,f,g,h,x,K) \ -{ \ - temp1 = h + S3(e) + F1(e,f,g) + K + x; \ - temp2 = S2(a) + F0(a,b,c); \ - d += temp1; h = temp1 + temp2; \ -} - - for( i = 0; i < 16; i++ ) - { - GET_UINT64_BE( W[i], data, i << 3 ); - } - - for( ; i < 80; i++ ) - { - W[i] = S1(W[i - 2]) + W[i - 7] + - S0(W[i - 15]) + W[i - 16]; - } - - A = ctx->state[0]; - B = ctx->state[1]; - C = ctx->state[2]; - D = ctx->state[3]; - E = ctx->state[4]; - F = ctx->state[5]; - G = ctx->state[6]; - H = ctx->state[7]; - i = 0; - - do - { - P( A, B, C, D, E, F, G, H, W[i], K[i] ); i++; - P( H, A, B, C, D, E, F, G, W[i], K[i] ); i++; - P( G, H, A, B, C, D, E, F, W[i], K[i] ); i++; - P( F, G, H, A, B, C, D, E, W[i], K[i] ); i++; - P( E, F, G, H, A, B, C, D, W[i], K[i] ); i++; - P( D, E, F, G, H, A, B, C, W[i], K[i] ); i++; - P( C, D, E, F, G, H, A, B, W[i], K[i] ); i++; - P( B, C, D, E, F, G, H, A, W[i], K[i] ); i++; - } - while( i < 80 ); - - ctx->state[0] += A; - ctx->state[1] += B; - ctx->state[2] += C; - ctx->state[3] += D; - ctx->state[4] += E; - ctx->state[5] += F; - ctx->state[6] += G; - ctx->state[7] += H; -} - -/* - * SHA-512 process buffer - */ -void sha512_update( sha512_context *ctx, const unsigned char *input, - size_t ilen ) -{ - size_t fill; - unsigned int left; - - if( ilen == 0 ) - return; - - left = (unsigned int) (ctx->total[0] & 0x7F); - fill = 128 - left; - - ctx->total[0] += (uint64_t) ilen; - - if( ctx->total[0] < (uint64_t) ilen ) - ctx->total[1]++; - - if( left && ilen >= fill ) - { - memcpy( (void *) (ctx->buffer + left), input, fill ); - sha512_process( ctx, ctx->buffer ); - input += fill; - ilen -= fill; - left = 0; - } - - while( ilen >= 128 ) - { - sha512_process( ctx, input ); - input += 128; - ilen -= 128; - } - - if( ilen > 0 ) - memcpy( (void *) (ctx->buffer + left), input, ilen ); -} - -static const unsigned char sha512_padding[128] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* - * SHA-512 final digest - */ -void sha512_finish( sha512_context *ctx, unsigned char output[64] ) -{ - size_t last, padn; - uint64_t high, low; - unsigned char msglen[16]; - - high = ( ctx->total[0] >> 61 ) - | ( ctx->total[1] << 3 ); - low = ( ctx->total[0] << 3 ); - - PUT_UINT64_BE( high, msglen, 0 ); - PUT_UINT64_BE( low, msglen, 8 ); - - last = (size_t)( ctx->total[0] & 0x7F ); - padn = ( last < 112 ) ? ( 112 - last ) : ( 240 - last ); - - sha512_update( ctx, sha512_padding, padn ); - sha512_update( ctx, msglen, 16 ); - - PUT_UINT64_BE( ctx->state[0], output, 0 ); - PUT_UINT64_BE( ctx->state[1], output, 8 ); - PUT_UINT64_BE( ctx->state[2], output, 16 ); - PUT_UINT64_BE( ctx->state[3], output, 24 ); - PUT_UINT64_BE( ctx->state[4], output, 32 ); - PUT_UINT64_BE( ctx->state[5], output, 40 ); - - if( ctx->is384 == 0 ) - { - PUT_UINT64_BE( ctx->state[6], output, 48 ); - PUT_UINT64_BE( ctx->state[7], output, 56 ); - } -} - -#endif /* !POLARSSL_SHA512_ALT */ - -/* - * output = SHA-512( input buffer ) - */ -void sha512( const unsigned char *input, size_t ilen, - unsigned char output[64], int is384 ) -{ - sha512_context ctx; - - sha512_init( &ctx ); - sha512_starts( &ctx, is384 ); - sha512_update( &ctx, input, ilen ); - sha512_finish( &ctx, output ); - sha512_free( &ctx ); -} - -#if defined(POLARSSL_FS_IO) -/* - * output = SHA-512( file contents ) - */ -int sha512_file( const char *path, unsigned char output[64], int is384 ) -{ - FILE *f; - size_t n; - sha512_context ctx; - unsigned char buf[1024]; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_SHA512_FILE_IO_ERROR ); - - sha512_init( &ctx ); - sha512_starts( &ctx, is384 ); - - while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) - sha512_update( &ctx, buf, n ); - - sha512_finish( &ctx, output ); - sha512_free( &ctx ); - - if( ferror( f ) != 0 ) - { - fclose( f ); - return( POLARSSL_ERR_SHA512_FILE_IO_ERROR ); - } - - fclose( f ); - return( 0 ); -} -#endif /* POLARSSL_FS_IO */ - -/* - * SHA-512 HMAC context setup - */ -void sha512_hmac_starts( sha512_context *ctx, const unsigned char *key, - size_t keylen, int is384 ) -{ - size_t i; - unsigned char sum[64]; - - if( keylen > 128 ) - { - sha512( key, keylen, sum, is384 ); - keylen = ( is384 ) ? 48 : 64; - key = sum; - } - - memset( ctx->ipad, 0x36, 128 ); - memset( ctx->opad, 0x5C, 128 ); - - for( i = 0; i < keylen; i++ ) - { - ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] ); - ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); - } - - sha512_starts( ctx, is384 ); - sha512_update( ctx, ctx->ipad, 128 ); - - polarssl_zeroize( sum, sizeof( sum ) ); -} - -/* - * SHA-512 HMAC process buffer - */ -void sha512_hmac_update( sha512_context *ctx, - const unsigned char *input, size_t ilen ) -{ - sha512_update( ctx, input, ilen ); -} - -/* - * SHA-512 HMAC final digest - */ -void sha512_hmac_finish( sha512_context *ctx, unsigned char output[64] ) -{ - int is384, hlen; - unsigned char tmpbuf[64]; - - is384 = ctx->is384; - hlen = ( is384 == 0 ) ? 64 : 48; - - sha512_finish( ctx, tmpbuf ); - sha512_starts( ctx, is384 ); - sha512_update( ctx, ctx->opad, 128 ); - sha512_update( ctx, tmpbuf, hlen ); - sha512_finish( ctx, output ); - - polarssl_zeroize( tmpbuf, sizeof( tmpbuf ) ); -} - -/* - * SHA-512 HMAC context reset - */ -void sha512_hmac_reset( sha512_context *ctx ) -{ - sha512_starts( ctx, ctx->is384 ); - sha512_update( ctx, ctx->ipad, 128 ); -} - -/* - * output = HMAC-SHA-512( hmac key, input buffer ) - */ -void sha512_hmac( const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char output[64], int is384 ) -{ - sha512_context ctx; - - sha512_init( &ctx ); - sha512_hmac_starts( &ctx, key, keylen, is384 ); - sha512_hmac_update( &ctx, input, ilen ); - sha512_hmac_finish( &ctx, output ); - sha512_free( &ctx ); -} - -#if defined(POLARSSL_SELF_TEST) - -/* - * FIPS-180-2 test vectors - */ -static unsigned char sha512_test_buf[3][113] = -{ - { "abc" }, - { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" - "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" }, - { "" } -}; - -static const int sha512_test_buflen[3] = -{ - 3, 112, 1000 -}; - -static const unsigned char sha512_test_sum[6][64] = -{ - /* - * SHA-384 test vectors - */ - { 0xCB, 0x00, 0x75, 0x3F, 0x45, 0xA3, 0x5E, 0x8B, - 0xB5, 0xA0, 0x3D, 0x69, 0x9A, 0xC6, 0x50, 0x07, - 0x27, 0x2C, 0x32, 0xAB, 0x0E, 0xDE, 0xD1, 0x63, - 0x1A, 0x8B, 0x60, 0x5A, 0x43, 0xFF, 0x5B, 0xED, - 0x80, 0x86, 0x07, 0x2B, 0xA1, 0xE7, 0xCC, 0x23, - 0x58, 0xBA, 0xEC, 0xA1, 0x34, 0xC8, 0x25, 0xA7 }, - { 0x09, 0x33, 0x0C, 0x33, 0xF7, 0x11, 0x47, 0xE8, - 0x3D, 0x19, 0x2F, 0xC7, 0x82, 0xCD, 0x1B, 0x47, - 0x53, 0x11, 0x1B, 0x17, 0x3B, 0x3B, 0x05, 0xD2, - 0x2F, 0xA0, 0x80, 0x86, 0xE3, 0xB0, 0xF7, 0x12, - 0xFC, 0xC7, 0xC7, 0x1A, 0x55, 0x7E, 0x2D, 0xB9, - 0x66, 0xC3, 0xE9, 0xFA, 0x91, 0x74, 0x60, 0x39 }, - { 0x9D, 0x0E, 0x18, 0x09, 0x71, 0x64, 0x74, 0xCB, - 0x08, 0x6E, 0x83, 0x4E, 0x31, 0x0A, 0x4A, 0x1C, - 0xED, 0x14, 0x9E, 0x9C, 0x00, 0xF2, 0x48, 0x52, - 0x79, 0x72, 0xCE, 0xC5, 0x70, 0x4C, 0x2A, 0x5B, - 0x07, 0xB8, 0xB3, 0xDC, 0x38, 0xEC, 0xC4, 0xEB, - 0xAE, 0x97, 0xDD, 0xD8, 0x7F, 0x3D, 0x89, 0x85 }, - - /* - * SHA-512 test vectors - */ - { 0xDD, 0xAF, 0x35, 0xA1, 0x93, 0x61, 0x7A, 0xBA, - 0xCC, 0x41, 0x73, 0x49, 0xAE, 0x20, 0x41, 0x31, - 0x12, 0xE6, 0xFA, 0x4E, 0x89, 0xA9, 0x7E, 0xA2, - 0x0A, 0x9E, 0xEE, 0xE6, 0x4B, 0x55, 0xD3, 0x9A, - 0x21, 0x92, 0x99, 0x2A, 0x27, 0x4F, 0xC1, 0xA8, - 0x36, 0xBA, 0x3C, 0x23, 0xA3, 0xFE, 0xEB, 0xBD, - 0x45, 0x4D, 0x44, 0x23, 0x64, 0x3C, 0xE8, 0x0E, - 0x2A, 0x9A, 0xC9, 0x4F, 0xA5, 0x4C, 0xA4, 0x9F }, - { 0x8E, 0x95, 0x9B, 0x75, 0xDA, 0xE3, 0x13, 0xDA, - 0x8C, 0xF4, 0xF7, 0x28, 0x14, 0xFC, 0x14, 0x3F, - 0x8F, 0x77, 0x79, 0xC6, 0xEB, 0x9F, 0x7F, 0xA1, - 0x72, 0x99, 0xAE, 0xAD, 0xB6, 0x88, 0x90, 0x18, - 0x50, 0x1D, 0x28, 0x9E, 0x49, 0x00, 0xF7, 0xE4, - 0x33, 0x1B, 0x99, 0xDE, 0xC4, 0xB5, 0x43, 0x3A, - 0xC7, 0xD3, 0x29, 0xEE, 0xB6, 0xDD, 0x26, 0x54, - 0x5E, 0x96, 0xE5, 0x5B, 0x87, 0x4B, 0xE9, 0x09 }, - { 0xE7, 0x18, 0x48, 0x3D, 0x0C, 0xE7, 0x69, 0x64, - 0x4E, 0x2E, 0x42, 0xC7, 0xBC, 0x15, 0xB4, 0x63, - 0x8E, 0x1F, 0x98, 0xB1, 0x3B, 0x20, 0x44, 0x28, - 0x56, 0x32, 0xA8, 0x03, 0xAF, 0xA9, 0x73, 0xEB, - 0xDE, 0x0F, 0xF2, 0x44, 0x87, 0x7E, 0xA6, 0x0A, - 0x4C, 0xB0, 0x43, 0x2C, 0xE5, 0x77, 0xC3, 0x1B, - 0xEB, 0x00, 0x9C, 0x5C, 0x2C, 0x49, 0xAA, 0x2E, - 0x4E, 0xAD, 0xB2, 0x17, 0xAD, 0x8C, 0xC0, 0x9B } -}; - -/* - * RFC 4231 test vectors - */ -static unsigned char sha512_hmac_test_key[7][26] = -{ - { "\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B" - "\x0B\x0B\x0B\x0B" }, - { "Jefe" }, - { "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" - "\xAA\xAA\xAA\xAA" }, - { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10" - "\x11\x12\x13\x14\x15\x16\x17\x18\x19" }, - { "\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C" - "\x0C\x0C\x0C\x0C" }, - { "" }, /* 0xAA 131 times */ - { "" } -}; - -static const int sha512_hmac_test_keylen[7] = -{ - 20, 4, 20, 25, 20, 131, 131 -}; - -static unsigned char sha512_hmac_test_buf[7][153] = -{ - { "Hi There" }, - { "what do ya want for nothing?" }, - { "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" }, - { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" }, - { "Test With Truncation" }, - { "Test Using Larger Than Block-Size Key - Hash Key First" }, - { "This is a test using a larger than block-size key " - "and a larger than block-size data. The key needs to " - "be hashed before being used by the HMAC algorithm." } -}; - -static const int sha512_hmac_test_buflen[7] = -{ - 8, 28, 50, 50, 20, 54, 152 -}; - -static const unsigned char sha512_hmac_test_sum[14][64] = -{ - /* - * HMAC-SHA-384 test vectors - */ - { 0xAF, 0xD0, 0x39, 0x44, 0xD8, 0x48, 0x95, 0x62, - 0x6B, 0x08, 0x25, 0xF4, 0xAB, 0x46, 0x90, 0x7F, - 0x15, 0xF9, 0xDA, 0xDB, 0xE4, 0x10, 0x1E, 0xC6, - 0x82, 0xAA, 0x03, 0x4C, 0x7C, 0xEB, 0xC5, 0x9C, - 0xFA, 0xEA, 0x9E, 0xA9, 0x07, 0x6E, 0xDE, 0x7F, - 0x4A, 0xF1, 0x52, 0xE8, 0xB2, 0xFA, 0x9C, 0xB6 }, - { 0xAF, 0x45, 0xD2, 0xE3, 0x76, 0x48, 0x40, 0x31, - 0x61, 0x7F, 0x78, 0xD2, 0xB5, 0x8A, 0x6B, 0x1B, - 0x9C, 0x7E, 0xF4, 0x64, 0xF5, 0xA0, 0x1B, 0x47, - 0xE4, 0x2E, 0xC3, 0x73, 0x63, 0x22, 0x44, 0x5E, - 0x8E, 0x22, 0x40, 0xCA, 0x5E, 0x69, 0xE2, 0xC7, - 0x8B, 0x32, 0x39, 0xEC, 0xFA, 0xB2, 0x16, 0x49 }, - { 0x88, 0x06, 0x26, 0x08, 0xD3, 0xE6, 0xAD, 0x8A, - 0x0A, 0xA2, 0xAC, 0xE0, 0x14, 0xC8, 0xA8, 0x6F, - 0x0A, 0xA6, 0x35, 0xD9, 0x47, 0xAC, 0x9F, 0xEB, - 0xE8, 0x3E, 0xF4, 0xE5, 0x59, 0x66, 0x14, 0x4B, - 0x2A, 0x5A, 0xB3, 0x9D, 0xC1, 0x38, 0x14, 0xB9, - 0x4E, 0x3A, 0xB6, 0xE1, 0x01, 0xA3, 0x4F, 0x27 }, - { 0x3E, 0x8A, 0x69, 0xB7, 0x78, 0x3C, 0x25, 0x85, - 0x19, 0x33, 0xAB, 0x62, 0x90, 0xAF, 0x6C, 0xA7, - 0x7A, 0x99, 0x81, 0x48, 0x08, 0x50, 0x00, 0x9C, - 0xC5, 0x57, 0x7C, 0x6E, 0x1F, 0x57, 0x3B, 0x4E, - 0x68, 0x01, 0xDD, 0x23, 0xC4, 0xA7, 0xD6, 0x79, - 0xCC, 0xF8, 0xA3, 0x86, 0xC6, 0x74, 0xCF, 0xFB }, - { 0x3A, 0xBF, 0x34, 0xC3, 0x50, 0x3B, 0x2A, 0x23, - 0xA4, 0x6E, 0xFC, 0x61, 0x9B, 0xAE, 0xF8, 0x97 }, - { 0x4E, 0xCE, 0x08, 0x44, 0x85, 0x81, 0x3E, 0x90, - 0x88, 0xD2, 0xC6, 0x3A, 0x04, 0x1B, 0xC5, 0xB4, - 0x4F, 0x9E, 0xF1, 0x01, 0x2A, 0x2B, 0x58, 0x8F, - 0x3C, 0xD1, 0x1F, 0x05, 0x03, 0x3A, 0xC4, 0xC6, - 0x0C, 0x2E, 0xF6, 0xAB, 0x40, 0x30, 0xFE, 0x82, - 0x96, 0x24, 0x8D, 0xF1, 0x63, 0xF4, 0x49, 0x52 }, - { 0x66, 0x17, 0x17, 0x8E, 0x94, 0x1F, 0x02, 0x0D, - 0x35, 0x1E, 0x2F, 0x25, 0x4E, 0x8F, 0xD3, 0x2C, - 0x60, 0x24, 0x20, 0xFE, 0xB0, 0xB8, 0xFB, 0x9A, - 0xDC, 0xCE, 0xBB, 0x82, 0x46, 0x1E, 0x99, 0xC5, - 0xA6, 0x78, 0xCC, 0x31, 0xE7, 0x99, 0x17, 0x6D, - 0x38, 0x60, 0xE6, 0x11, 0x0C, 0x46, 0x52, 0x3E }, - - /* - * HMAC-SHA-512 test vectors - */ - { 0x87, 0xAA, 0x7C, 0xDE, 0xA5, 0xEF, 0x61, 0x9D, - 0x4F, 0xF0, 0xB4, 0x24, 0x1A, 0x1D, 0x6C, 0xB0, - 0x23, 0x79, 0xF4, 0xE2, 0xCE, 0x4E, 0xC2, 0x78, - 0x7A, 0xD0, 0xB3, 0x05, 0x45, 0xE1, 0x7C, 0xDE, - 0xDA, 0xA8, 0x33, 0xB7, 0xD6, 0xB8, 0xA7, 0x02, - 0x03, 0x8B, 0x27, 0x4E, 0xAE, 0xA3, 0xF4, 0xE4, - 0xBE, 0x9D, 0x91, 0x4E, 0xEB, 0x61, 0xF1, 0x70, - 0x2E, 0x69, 0x6C, 0x20, 0x3A, 0x12, 0x68, 0x54 }, - { 0x16, 0x4B, 0x7A, 0x7B, 0xFC, 0xF8, 0x19, 0xE2, - 0xE3, 0x95, 0xFB, 0xE7, 0x3B, 0x56, 0xE0, 0xA3, - 0x87, 0xBD, 0x64, 0x22, 0x2E, 0x83, 0x1F, 0xD6, - 0x10, 0x27, 0x0C, 0xD7, 0xEA, 0x25, 0x05, 0x54, - 0x97, 0x58, 0xBF, 0x75, 0xC0, 0x5A, 0x99, 0x4A, - 0x6D, 0x03, 0x4F, 0x65, 0xF8, 0xF0, 0xE6, 0xFD, - 0xCA, 0xEA, 0xB1, 0xA3, 0x4D, 0x4A, 0x6B, 0x4B, - 0x63, 0x6E, 0x07, 0x0A, 0x38, 0xBC, 0xE7, 0x37 }, - { 0xFA, 0x73, 0xB0, 0x08, 0x9D, 0x56, 0xA2, 0x84, - 0xEF, 0xB0, 0xF0, 0x75, 0x6C, 0x89, 0x0B, 0xE9, - 0xB1, 0xB5, 0xDB, 0xDD, 0x8E, 0xE8, 0x1A, 0x36, - 0x55, 0xF8, 0x3E, 0x33, 0xB2, 0x27, 0x9D, 0x39, - 0xBF, 0x3E, 0x84, 0x82, 0x79, 0xA7, 0x22, 0xC8, - 0x06, 0xB4, 0x85, 0xA4, 0x7E, 0x67, 0xC8, 0x07, - 0xB9, 0x46, 0xA3, 0x37, 0xBE, 0xE8, 0x94, 0x26, - 0x74, 0x27, 0x88, 0x59, 0xE1, 0x32, 0x92, 0xFB }, - { 0xB0, 0xBA, 0x46, 0x56, 0x37, 0x45, 0x8C, 0x69, - 0x90, 0xE5, 0xA8, 0xC5, 0xF6, 0x1D, 0x4A, 0xF7, - 0xE5, 0x76, 0xD9, 0x7F, 0xF9, 0x4B, 0x87, 0x2D, - 0xE7, 0x6F, 0x80, 0x50, 0x36, 0x1E, 0xE3, 0xDB, - 0xA9, 0x1C, 0xA5, 0xC1, 0x1A, 0xA2, 0x5E, 0xB4, - 0xD6, 0x79, 0x27, 0x5C, 0xC5, 0x78, 0x80, 0x63, - 0xA5, 0xF1, 0x97, 0x41, 0x12, 0x0C, 0x4F, 0x2D, - 0xE2, 0xAD, 0xEB, 0xEB, 0x10, 0xA2, 0x98, 0xDD }, - { 0x41, 0x5F, 0xAD, 0x62, 0x71, 0x58, 0x0A, 0x53, - 0x1D, 0x41, 0x79, 0xBC, 0x89, 0x1D, 0x87, 0xA6 }, - { 0x80, 0xB2, 0x42, 0x63, 0xC7, 0xC1, 0xA3, 0xEB, - 0xB7, 0x14, 0x93, 0xC1, 0xDD, 0x7B, 0xE8, 0xB4, - 0x9B, 0x46, 0xD1, 0xF4, 0x1B, 0x4A, 0xEE, 0xC1, - 0x12, 0x1B, 0x01, 0x37, 0x83, 0xF8, 0xF3, 0x52, - 0x6B, 0x56, 0xD0, 0x37, 0xE0, 0x5F, 0x25, 0x98, - 0xBD, 0x0F, 0xD2, 0x21, 0x5D, 0x6A, 0x1E, 0x52, - 0x95, 0xE6, 0x4F, 0x73, 0xF6, 0x3F, 0x0A, 0xEC, - 0x8B, 0x91, 0x5A, 0x98, 0x5D, 0x78, 0x65, 0x98 }, - { 0xE3, 0x7B, 0x6A, 0x77, 0x5D, 0xC8, 0x7D, 0xBA, - 0xA4, 0xDF, 0xA9, 0xF9, 0x6E, 0x5E, 0x3F, 0xFD, - 0xDE, 0xBD, 0x71, 0xF8, 0x86, 0x72, 0x89, 0x86, - 0x5D, 0xF5, 0xA3, 0x2D, 0x20, 0xCD, 0xC9, 0x44, - 0xB6, 0x02, 0x2C, 0xAC, 0x3C, 0x49, 0x82, 0xB1, - 0x0D, 0x5E, 0xEB, 0x55, 0xC3, 0xE4, 0xDE, 0x15, - 0x13, 0x46, 0x76, 0xFB, 0x6D, 0xE0, 0x44, 0x60, - 0x65, 0xC9, 0x74, 0x40, 0xFA, 0x8C, 0x6A, 0x58 } -}; - -/* - * Checkup routine - */ -int sha512_self_test( int verbose ) -{ - int i, j, k, buflen, ret = 0; - unsigned char buf[1024]; - unsigned char sha512sum[64]; - sha512_context ctx; - - sha512_init( &ctx ); - - for( i = 0; i < 6; i++ ) - { - j = i % 3; - k = i < 3; - - if( verbose != 0 ) - polarssl_printf( " SHA-%d test #%d: ", 512 - k * 128, j + 1 ); - - sha512_starts( &ctx, k ); - - if( j == 2 ) - { - memset( buf, 'a', buflen = 1000 ); - - for( j = 0; j < 1000; j++ ) - sha512_update( &ctx, buf, buflen ); - } - else - sha512_update( &ctx, sha512_test_buf[j], - sha512_test_buflen[j] ); - - sha512_finish( &ctx, sha512sum ); - - if( memcmp( sha512sum, sha512_test_sum[i], 64 - k * 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - for( i = 0; i < 14; i++ ) - { - j = i % 7; - k = i < 7; - - if( verbose != 0 ) - polarssl_printf( " HMAC-SHA-%d test #%d: ", 512 - k * 128, j + 1 ); - - if( j == 5 || j == 6 ) - { - memset( buf, '\xAA', buflen = 131 ); - sha512_hmac_starts( &ctx, buf, buflen, k ); - } - else - sha512_hmac_starts( &ctx, sha512_hmac_test_key[j], - sha512_hmac_test_keylen[j], k ); - - sha512_hmac_update( &ctx, sha512_hmac_test_buf[j], - sha512_hmac_test_buflen[j] ); - - sha512_hmac_finish( &ctx, sha512sum ); - - buflen = ( j == 4 ) ? 16 : 64 - k * 16; - - if( memcmp( sha512sum, sha512_hmac_test_sum[i], buflen ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - sha512_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_SHA512_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_cache.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_cache.c deleted file mode 100644 index 836b685..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_cache.c +++ /dev/null @@ -1,335 +0,0 @@ -/* - * SSL session cache implementation - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * These session callbacks use a simple chained list - * to store and retrieve the session information. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_SSL_CACHE_C) - -#include "polarssl/ssl_cache.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include - -void ssl_cache_init( ssl_cache_context *cache ) -{ - memset( cache, 0, sizeof( ssl_cache_context ) ); - - cache->timeout = SSL_CACHE_DEFAULT_TIMEOUT; - cache->max_entries = SSL_CACHE_DEFAULT_MAX_ENTRIES; - -#if defined(POLARSSL_THREADING_C) - polarssl_mutex_init( &cache->mutex ); -#endif -} - -int ssl_cache_get( void *data, ssl_session *session ) -{ - int ret = 1; -#if defined(POLARSSL_HAVE_TIME) - time_t t = time( NULL ); -#endif - ssl_cache_context *cache = (ssl_cache_context *) data; - ssl_cache_entry *cur, *entry; - -#if defined(POLARSSL_THREADING_C) - if( polarssl_mutex_lock( &cache->mutex ) != 0 ) - return( 1 ); -#endif - - cur = cache->chain; - entry = NULL; - - while( cur != NULL ) - { - entry = cur; - cur = cur->next; - -#if defined(POLARSSL_HAVE_TIME) - if( cache->timeout != 0 && - (int) ( t - entry->timestamp ) > cache->timeout ) - continue; -#endif - - if( session->ciphersuite != entry->session.ciphersuite || - session->compression != entry->session.compression || - session->length != entry->session.length ) - continue; - - if( memcmp( session->id, entry->session.id, - entry->session.length ) != 0 ) - continue; - - memcpy( session->master, entry->session.master, 48 ); - - session->verify_result = entry->session.verify_result; - -#if defined(POLARSSL_X509_CRT_PARSE_C) - /* - * Restore peer certificate (without rest of the original chain) - */ - if( entry->peer_cert.p != NULL ) - { - session->peer_cert = - (x509_crt *) polarssl_malloc( sizeof(x509_crt) ); - - if( session->peer_cert == NULL ) - { - ret = 1; - goto exit; - } - - x509_crt_init( session->peer_cert ); - if( x509_crt_parse( session->peer_cert, entry->peer_cert.p, - entry->peer_cert.len ) != 0 ) - { - polarssl_free( session->peer_cert ); - session->peer_cert = NULL; - ret = 1; - goto exit; - } - } -#endif /* POLARSSL_X509_CRT_PARSE_C */ - - ret = 0; - goto exit; - } - -exit: -#if defined(POLARSSL_THREADING_C) - if( polarssl_mutex_unlock( &cache->mutex ) != 0 ) - ret = 1; -#endif - - return( ret ); -} - -int ssl_cache_set( void *data, const ssl_session *session ) -{ - int ret = 1; -#if defined(POLARSSL_HAVE_TIME) - time_t t = time( NULL ), oldest = 0; - ssl_cache_entry *old = NULL; -#endif - ssl_cache_context *cache = (ssl_cache_context *) data; - ssl_cache_entry *cur, *prv; - int count = 0; - -#if defined(POLARSSL_THREADING_C) - if( ( ret = polarssl_mutex_lock( &cache->mutex ) ) != 0 ) - return( ret ); -#endif - - cur = cache->chain; - prv = NULL; - - while( cur != NULL ) - { - count++; - -#if defined(POLARSSL_HAVE_TIME) - if( cache->timeout != 0 && - (int) ( t - cur->timestamp ) > cache->timeout ) - { - cur->timestamp = t; - break; /* expired, reuse this slot, update timestamp */ - } -#endif - - if( memcmp( session->id, cur->session.id, cur->session.length ) == 0 ) - break; /* client reconnected, keep timestamp for session id */ - -#if defined(POLARSSL_HAVE_TIME) - if( oldest == 0 || cur->timestamp < oldest ) - { - oldest = cur->timestamp; - old = cur; - } -#endif - - prv = cur; - cur = cur->next; - } - - if( cur == NULL ) - { -#if defined(POLARSSL_HAVE_TIME) - /* - * Reuse oldest entry if max_entries reached - */ - if( count >= cache->max_entries ) - { - if( old == NULL ) - { - ret = 1; - goto exit; - } - - cur = old; - } -#else /* POLARSSL_HAVE_TIME */ - /* - * Reuse first entry in chain if max_entries reached, - * but move to last place - */ - if( count >= cache->max_entries ) - { - if( cache->chain == NULL ) - { - ret = 1; - goto exit; - } - - cur = cache->chain; - cache->chain = cur->next; - cur->next = NULL; - prv->next = cur; - } -#endif /* POLARSSL_HAVE_TIME */ - else - { - /* - * max_entries not reached, create new entry - */ - cur = (ssl_cache_entry *) - polarssl_malloc( sizeof(ssl_cache_entry) ); - if( cur == NULL ) - { - ret = 1; - goto exit; - } - - memset( cur, 0, sizeof(ssl_cache_entry) ); - - if( prv == NULL ) - cache->chain = cur; - else - prv->next = cur; - } - -#if defined(POLARSSL_HAVE_TIME) - cur->timestamp = t; -#endif - } - - memcpy( &cur->session, session, sizeof( ssl_session ) ); - -#if defined(POLARSSL_X509_CRT_PARSE_C) - /* - * If we're reusing an entry, free its certificate first - */ - if( cur->peer_cert.p != NULL ) - { - polarssl_free( cur->peer_cert.p ); - memset( &cur->peer_cert, 0, sizeof(x509_buf) ); - } - - /* - * Store peer certificate - */ - if( session->peer_cert != NULL ) - { - cur->peer_cert.p = (unsigned char *) - polarssl_malloc( session->peer_cert->raw.len ); - if( cur->peer_cert.p == NULL ) - { - ret = 1; - goto exit; - } - - memcpy( cur->peer_cert.p, session->peer_cert->raw.p, - session->peer_cert->raw.len ); - cur->peer_cert.len = session->peer_cert->raw.len; - - cur->session.peer_cert = NULL; - } -#endif /* POLARSSL_X509_CRT_PARSE_C */ - - ret = 0; - -exit: -#if defined(POLARSSL_THREADING_C) - if( polarssl_mutex_unlock( &cache->mutex ) != 0 ) - ret = 1; -#endif - - return( ret ); -} - -#if defined(POLARSSL_HAVE_TIME) -void ssl_cache_set_timeout( ssl_cache_context *cache, int timeout ) -{ - if( timeout < 0 ) timeout = 0; - - cache->timeout = timeout; -} -#endif /* POLARSSL_HAVE_TIME */ - -void ssl_cache_set_max_entries( ssl_cache_context *cache, int max ) -{ - if( max < 0 ) max = 0; - - cache->max_entries = max; -} - -void ssl_cache_free( ssl_cache_context *cache ) -{ - ssl_cache_entry *cur, *prv; - - cur = cache->chain; - - while( cur != NULL ) - { - prv = cur; - cur = cur->next; - - ssl_session_free( &prv->session ); - -#if defined(POLARSSL_X509_CRT_PARSE_C) - polarssl_free( prv->peer_cert.p ); -#endif /* POLARSSL_X509_CRT_PARSE_C */ - - polarssl_free( prv ); - } - -#if defined(POLARSSL_THREADING_C) - polarssl_mutex_free( &cache->mutex ); -#endif -} - -#endif /* POLARSSL_SSL_CACHE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_ciphersuites.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_ciphersuites.c deleted file mode 100644 index df838e2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_ciphersuites.c +++ /dev/null @@ -1,1843 +0,0 @@ -/** - * \file ssl_ciphersuites.c - * - * \brief SSL ciphersuites for PolarSSL - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_SSL_TLS_C) - -#include "polarssl/ssl_ciphersuites.h" -#include "polarssl/ssl.h" - -#include - -#if defined(_MSC_VER) && !defined strcasecmp && !defined(EFIX64) && \ - !defined(EFI32) -#define strcasecmp _stricmp -#endif - -/* - * Ordered from most preferred to least preferred in terms of security. - * - * Current rule (except rc4, weak and null which come last): - * 1. By key exchange: - * Forward-secure non-PSK > forward-secure PSK > other non-PSK > other PSK - * 2. By key length and cipher: - * AES-256 > Camellia-256 > AES-128 > Camellia-128 > 3DES - * 3. By cipher mode when relevant GCM > CCM > CBC > CCM_8 - * 4. By hash function used when relevant - * 5. By key exchange/auth again: EC > non-EC - */ -static const int ciphersuite_preference[] = -{ -#if defined(SSL_CIPHERSUITES) - SSL_CIPHERSUITES, -#else - /* All AES-256 ephemeral suites */ - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, - TLS_ECDHE_ECDSA_WITH_AES_256_CCM, - TLS_DHE_RSA_WITH_AES_256_CCM, - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, - TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - TLS_DHE_RSA_WITH_AES_256_CBC_SHA, - TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8, - TLS_DHE_RSA_WITH_AES_256_CCM_8, - - /* All CAMELLIA-256 ephemeral suites */ - TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, - TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, - TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, - TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, - TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384, - TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256, - TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, - - /* All AES-128 ephemeral suites */ - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, - TLS_ECDHE_ECDSA_WITH_AES_128_CCM, - TLS_DHE_RSA_WITH_AES_128_CCM, - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - TLS_DHE_RSA_WITH_AES_128_CBC_SHA, - TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8, - TLS_DHE_RSA_WITH_AES_128_CCM_8, - - /* All CAMELLIA-128 ephemeral suites */ - TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, - TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, - TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, - TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, - TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, - TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, - TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, - - /* All remaining >= 128-bit ephemeral suites */ - TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, - TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, - TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, - - /* The PSK ephemeral suites */ - TLS_DHE_PSK_WITH_AES_256_GCM_SHA384, - TLS_DHE_PSK_WITH_AES_256_CCM, - TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384, - TLS_DHE_PSK_WITH_AES_256_CBC_SHA384, - TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA, - TLS_DHE_PSK_WITH_AES_256_CBC_SHA, - TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384, - TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, - TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, - TLS_DHE_PSK_WITH_AES_256_CCM_8, - - TLS_DHE_PSK_WITH_AES_128_GCM_SHA256, - TLS_DHE_PSK_WITH_AES_128_CCM, - TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256, - TLS_DHE_PSK_WITH_AES_128_CBC_SHA256, - TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA, - TLS_DHE_PSK_WITH_AES_128_CBC_SHA, - TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256, - TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, - TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, - TLS_DHE_PSK_WITH_AES_128_CCM_8, - - TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA, - TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA, - - /* All AES-256 suites */ - TLS_RSA_WITH_AES_256_GCM_SHA384, - TLS_RSA_WITH_AES_256_CCM, - TLS_RSA_WITH_AES_256_CBC_SHA256, - TLS_RSA_WITH_AES_256_CBC_SHA, - TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, - TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, - TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, - TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, - TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, - TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, - TLS_RSA_WITH_AES_256_CCM_8, - - /* All CAMELLIA-256 suites */ - TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384, - TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256, - TLS_RSA_WITH_CAMELLIA_256_CBC_SHA, - TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384, - TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384, - TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, - TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, - - /* All AES-128 suites */ - TLS_RSA_WITH_AES_128_GCM_SHA256, - TLS_RSA_WITH_AES_128_CCM, - TLS_RSA_WITH_AES_128_CBC_SHA256, - TLS_RSA_WITH_AES_128_CBC_SHA, - TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, - TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, - TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, - TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, - TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, - TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, - TLS_RSA_WITH_AES_128_CCM_8, - - /* All CAMELLIA-128 suites */ - TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256, - TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256, - TLS_RSA_WITH_CAMELLIA_128_CBC_SHA, - TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256, - TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256, - TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, - TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, - - /* All remaining >= 128-bit suites */ - TLS_RSA_WITH_3DES_EDE_CBC_SHA, - TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, - TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, - - /* The RSA PSK suites */ - TLS_RSA_PSK_WITH_AES_256_GCM_SHA384, - TLS_RSA_PSK_WITH_AES_256_CBC_SHA384, - TLS_RSA_PSK_WITH_AES_256_CBC_SHA, - TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384, - TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384, - - TLS_RSA_PSK_WITH_AES_128_GCM_SHA256, - TLS_RSA_PSK_WITH_AES_128_CBC_SHA256, - TLS_RSA_PSK_WITH_AES_128_CBC_SHA, - TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256, - TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256, - - TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA, - - /* The PSK suites */ - TLS_PSK_WITH_AES_256_GCM_SHA384, - TLS_PSK_WITH_AES_256_CCM, - TLS_PSK_WITH_AES_256_CBC_SHA384, - TLS_PSK_WITH_AES_256_CBC_SHA, - TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384, - TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384, - TLS_PSK_WITH_AES_256_CCM_8, - - TLS_PSK_WITH_AES_128_GCM_SHA256, - TLS_PSK_WITH_AES_128_CCM, - TLS_PSK_WITH_AES_128_CBC_SHA256, - TLS_PSK_WITH_AES_128_CBC_SHA, - TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256, - TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256, - TLS_PSK_WITH_AES_128_CCM_8, - - TLS_PSK_WITH_3DES_EDE_CBC_SHA, - - /* RC4 suites */ - TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, - TLS_ECDHE_RSA_WITH_RC4_128_SHA, - TLS_ECDHE_PSK_WITH_RC4_128_SHA, - TLS_DHE_PSK_WITH_RC4_128_SHA, - TLS_RSA_WITH_RC4_128_SHA, - TLS_RSA_WITH_RC4_128_MD5, - TLS_ECDH_RSA_WITH_RC4_128_SHA, - TLS_ECDH_ECDSA_WITH_RC4_128_SHA, - TLS_RSA_PSK_WITH_RC4_128_SHA, - TLS_PSK_WITH_RC4_128_SHA, - - /* Weak suites */ - TLS_DHE_RSA_WITH_DES_CBC_SHA, - TLS_RSA_WITH_DES_CBC_SHA, - - /* NULL suites */ - TLS_ECDHE_ECDSA_WITH_NULL_SHA, - TLS_ECDHE_RSA_WITH_NULL_SHA, - TLS_ECDHE_PSK_WITH_NULL_SHA384, - TLS_ECDHE_PSK_WITH_NULL_SHA256, - TLS_ECDHE_PSK_WITH_NULL_SHA, - TLS_DHE_PSK_WITH_NULL_SHA384, - TLS_DHE_PSK_WITH_NULL_SHA256, - TLS_DHE_PSK_WITH_NULL_SHA, - - TLS_RSA_WITH_NULL_SHA256, - TLS_RSA_WITH_NULL_SHA, - TLS_RSA_WITH_NULL_MD5, - TLS_ECDH_RSA_WITH_NULL_SHA, - TLS_ECDH_ECDSA_WITH_NULL_SHA, - TLS_RSA_PSK_WITH_NULL_SHA384, - TLS_RSA_PSK_WITH_NULL_SHA256, - TLS_RSA_PSK_WITH_NULL_SHA, - TLS_PSK_WITH_NULL_SHA384, - TLS_PSK_WITH_NULL_SHA256, - TLS_PSK_WITH_NULL_SHA, - -#endif - 0 -}; - -static const ssl_ciphersuite_t ciphersuite_definitions[] = -{ -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) -#if defined(POLARSSL_AES_C) -#if defined(POLARSSL_SHA1_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - { TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_SHA1_C */ -#if defined(POLARSSL_SHA256_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#if defined(POLARSSL_GCM_C) - { TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, "TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256", - POLARSSL_CIPHER_AES_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_SHA256_C */ -#if defined(POLARSSL_SHA512_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#if defined(POLARSSL_GCM_C) - { TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, "TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384", - POLARSSL_CIPHER_AES_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_SHA512_C */ -#if defined(POLARSSL_CCM_C) - { TLS_ECDHE_ECDSA_WITH_AES_256_CCM, "TLS-ECDHE-ECDSA-WITH-AES-256-CCM", - POLARSSL_CIPHER_AES_256_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - { TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8, "TLS-ECDHE-ECDSA-WITH-AES-256-CCM-8", - POLARSSL_CIPHER_AES_256_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_SHORT_TAG }, - { TLS_ECDHE_ECDSA_WITH_AES_128_CCM, "TLS-ECDHE-ECDSA-WITH-AES-128-CCM", - POLARSSL_CIPHER_AES_128_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - { TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8, "TLS-ECDHE-ECDSA-WITH-AES-128-CCM-8", - POLARSSL_CIPHER_AES_128_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_SHORT_TAG }, -#endif /* POLARSSL_CCM_C */ -#endif /* POLARSSL_AES_C */ - -#if defined(POLARSSL_CAMELLIA_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA256_C) - { TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-128-CBC-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ -#if defined(POLARSSL_SHA512_C) - { TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-256-CBC-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_GCM_C) -#if defined(POLARSSL_SHA256_C) - { TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-128-GCM-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ -#if defined(POLARSSL_SHA512_C) - { TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-256-GCM-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_CAMELLIA_C */ - -#if defined(POLARSSL_DES_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-3DES-EDE-CBC-SHA", - POLARSSL_CIPHER_DES_EDE3_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_ARC4_C) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, "TLS-ECDHE-ECDSA-WITH-RC4-128-SHA", - POLARSSL_CIPHER_ARC4_128, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_ARC4_C */ - -#if defined(POLARSSL_CIPHER_NULL_CIPHER) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDHE_ECDSA_WITH_NULL_SHA, "TLS-ECDHE-ECDSA-WITH-NULL-SHA", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_NULL_CIPHER */ -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) -#if defined(POLARSSL_AES_C) -#if defined(POLARSSL_SHA1_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, "TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - { TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, "TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_SHA1_C */ -#if defined(POLARSSL_SHA256_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#if defined(POLARSSL_GCM_C) - { TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, "TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256", - POLARSSL_CIPHER_AES_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_SHA256_C */ -#if defined(POLARSSL_SHA512_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#if defined(POLARSSL_GCM_C) - { TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, "TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384", - POLARSSL_CIPHER_AES_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_AES_C */ - -#if defined(POLARSSL_CAMELLIA_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA256_C) - { TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-RSA-WITH-CAMELLIA-128-CBC-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ -#if defined(POLARSSL_SHA512_C) - { TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-RSA-WITH-CAMELLIA-256-CBC-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_GCM_C) -#if defined(POLARSSL_SHA256_C) - { TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDHE-RSA-WITH-CAMELLIA-128-GCM-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ -#if defined(POLARSSL_SHA512_C) - { TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDHE-RSA-WITH-CAMELLIA-256-GCM-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_CAMELLIA_C */ - -#if defined(POLARSSL_DES_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-RSA-WITH-3DES-EDE-CBC-SHA", - POLARSSL_CIPHER_DES_EDE3_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_ARC4_C) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDHE_RSA_WITH_RC4_128_SHA, "TLS-ECDHE-RSA-WITH-RC4-128-SHA", - POLARSSL_CIPHER_ARC4_128, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_ARC4_C */ - -#if defined(POLARSSL_CIPHER_NULL_CIPHER) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDHE_RSA_WITH_NULL_SHA, "TLS-ECDHE-RSA-WITH-NULL-SHA", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_NULL_CIPHER */ -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) -#if defined(POLARSSL_AES_C) -#if defined(POLARSSL_SHA512_C) && defined(POLARSSL_GCM_C) - { TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, "TLS-DHE-RSA-WITH-AES-256-GCM-SHA384", - POLARSSL_CIPHER_AES_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C && POLARSSL_GCM_C */ - -#if defined(POLARSSL_SHA256_C) -#if defined(POLARSSL_GCM_C) - { TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, "TLS-DHE-RSA-WITH-AES-128-GCM-SHA256", - POLARSSL_CIPHER_AES_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_GCM_C */ - -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, "TLS-DHE-RSA-WITH-AES-128-CBC-SHA256", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - - { TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, "TLS-DHE-RSA-WITH-AES-256-CBC-SHA256", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA1_C) - { TLS_DHE_RSA_WITH_AES_128_CBC_SHA, "TLS-DHE-RSA-WITH-AES-128-CBC-SHA", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - - { TLS_DHE_RSA_WITH_AES_256_CBC_SHA, "TLS-DHE-RSA-WITH-AES-256-CBC-SHA", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#if defined(POLARSSL_CCM_C) - { TLS_DHE_RSA_WITH_AES_256_CCM, "TLS-DHE-RSA-WITH-AES-256-CCM", - POLARSSL_CIPHER_AES_256_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - { TLS_DHE_RSA_WITH_AES_256_CCM_8, "TLS-DHE-RSA-WITH-AES-256-CCM-8", - POLARSSL_CIPHER_AES_256_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_SHORT_TAG }, - { TLS_DHE_RSA_WITH_AES_128_CCM, "TLS-DHE-RSA-WITH-AES-128-CCM", - POLARSSL_CIPHER_AES_128_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - { TLS_DHE_RSA_WITH_AES_128_CCM_8, "TLS-DHE-RSA-WITH-AES-128-CCM-8", - POLARSSL_CIPHER_AES_128_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_SHORT_TAG }, -#endif /* POLARSSL_CCM_C */ -#endif /* POLARSSL_AES_C */ - -#if defined(POLARSSL_CAMELLIA_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA256_C) - { TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - - { TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA256", - POLARSSL_CIPHER_CAMELLIA_256_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA1_C) - { TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, "TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA", - POLARSSL_CIPHER_CAMELLIA_128_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - - { TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, "TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA", - POLARSSL_CIPHER_CAMELLIA_256_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#if defined(POLARSSL_GCM_C) -#if defined(POLARSSL_SHA256_C) - { TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-128-GCM-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-DHE-RSA-WITH-CAMELLIA-256-GCM-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_CAMELLIA_C */ - -#if defined(POLARSSL_DES_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA1_C) - { TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA", - POLARSSL_CIPHER_DES_EDE3_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_DES_C */ -#endif /* POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) -#if defined(POLARSSL_AES_C) -#if defined(POLARSSL_SHA512_C) && defined(POLARSSL_GCM_C) - { TLS_RSA_WITH_AES_256_GCM_SHA384, "TLS-RSA-WITH-AES-256-GCM-SHA384", - POLARSSL_CIPHER_AES_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C && POLARSSL_GCM_C */ - -#if defined(POLARSSL_SHA256_C) -#if defined(POLARSSL_GCM_C) - { TLS_RSA_WITH_AES_128_GCM_SHA256, "TLS-RSA-WITH-AES-128-GCM-SHA256", - POLARSSL_CIPHER_AES_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_GCM_C */ - -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_RSA_WITH_AES_128_CBC_SHA256, "TLS-RSA-WITH-AES-128-CBC-SHA256", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - - { TLS_RSA_WITH_AES_256_CBC_SHA256, "TLS-RSA-WITH-AES-256-CBC-SHA256", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA1_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_RSA_WITH_AES_128_CBC_SHA, "TLS-RSA-WITH-AES-128-CBC-SHA", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - - { TLS_RSA_WITH_AES_256_CBC_SHA, "TLS-RSA-WITH-AES-256-CBC-SHA", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_SHA1_C */ -#if defined(POLARSSL_CCM_C) - { TLS_RSA_WITH_AES_256_CCM, "TLS-RSA-WITH-AES-256-CCM", - POLARSSL_CIPHER_AES_256_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - { TLS_RSA_WITH_AES_256_CCM_8, "TLS-RSA-WITH-AES-256-CCM-8", - POLARSSL_CIPHER_AES_256_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_SHORT_TAG }, - { TLS_RSA_WITH_AES_128_CCM, "TLS-RSA-WITH-AES-128-CCM", - POLARSSL_CIPHER_AES_128_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - { TLS_RSA_WITH_AES_128_CCM_8, "TLS-RSA-WITH-AES-128-CCM-8", - POLARSSL_CIPHER_AES_128_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_SHORT_TAG }, -#endif /* POLARSSL_CCM_C */ -#endif /* POLARSSL_AES_C */ - -#if defined(POLARSSL_CAMELLIA_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA256_C) - { TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-RSA-WITH-CAMELLIA-128-CBC-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - - { TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256, "TLS-RSA-WITH-CAMELLIA-256-CBC-SHA256", - POLARSSL_CIPHER_CAMELLIA_256_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA1_C) - { TLS_RSA_WITH_CAMELLIA_128_CBC_SHA, "TLS-RSA-WITH-CAMELLIA-128-CBC-SHA", - POLARSSL_CIPHER_CAMELLIA_128_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - - { TLS_RSA_WITH_CAMELLIA_256_CBC_SHA, "TLS-RSA-WITH-CAMELLIA-256-CBC-SHA", - POLARSSL_CIPHER_CAMELLIA_256_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_GCM_C) -#if defined(POLARSSL_SHA256_C) - { TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-RSA-WITH-CAMELLIA-128-GCM-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA1_C) - { TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-RSA-WITH-CAMELLIA-256-GCM-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_CAMELLIA_C */ - -#if defined(POLARSSL_DES_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA1_C) - { TLS_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-RSA-WITH-3DES-EDE-CBC-SHA", - POLARSSL_CIPHER_DES_EDE3_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_ARC4_C) -#if defined(POLARSSL_MD5_C) - { TLS_RSA_WITH_RC4_128_MD5, "TLS-RSA-WITH-RC4-128-MD5", - POLARSSL_CIPHER_ARC4_128, POLARSSL_MD_MD5, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif - -#if defined(POLARSSL_SHA1_C) - { TLS_RSA_WITH_RC4_128_SHA, "TLS-RSA-WITH-RC4-128-SHA", - POLARSSL_CIPHER_ARC4_128, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif -#endif /* POLARSSL_ARC4_C */ -#endif /* POLARSSL_KEY_EXCHANGE_RSA_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED) -#if defined(POLARSSL_AES_C) -#if defined(POLARSSL_SHA1_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, "TLS-ECDH-RSA-WITH-AES-128-CBC-SHA", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDH_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - { TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, "TLS-ECDH-RSA-WITH-AES-256-CBC-SHA", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDH_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_SHA1_C */ -#if defined(POLARSSL_SHA256_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, "TLS-ECDH-RSA-WITH-AES-128-CBC-SHA256", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDH_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#if defined(POLARSSL_GCM_C) - { TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, "TLS-ECDH-RSA-WITH-AES-128-GCM-SHA256", - POLARSSL_CIPHER_AES_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDH_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_SHA256_C */ -#if defined(POLARSSL_SHA512_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, "TLS-ECDH-RSA-WITH-AES-256-CBC-SHA384", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDH_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#if defined(POLARSSL_GCM_C) - { TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, "TLS-ECDH-RSA-WITH-AES-256-GCM-SHA384", - POLARSSL_CIPHER_AES_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDH_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_AES_C */ - -#if defined(POLARSSL_CAMELLIA_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA256_C) - { TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDH-RSA-WITH-CAMELLIA-128-CBC-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDH_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ -#if defined(POLARSSL_SHA512_C) - { TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDH-RSA-WITH-CAMELLIA-256-CBC-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDH_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_GCM_C) -#if defined(POLARSSL_SHA256_C) - { TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDH-RSA-WITH-CAMELLIA-128-GCM-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDH_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ -#if defined(POLARSSL_SHA512_C) - { TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDH-RSA-WITH-CAMELLIA-256-GCM-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDH_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_CAMELLIA_C */ - -#if defined(POLARSSL_DES_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDH-RSA-WITH-3DES-EDE-CBC-SHA", - POLARSSL_CIPHER_DES_EDE3_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDH_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_ARC4_C) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDH_RSA_WITH_RC4_128_SHA, "TLS-ECDH-RSA-WITH-RC4-128-SHA", - POLARSSL_CIPHER_ARC4_128, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDH_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_ARC4_C */ - -#if defined(POLARSSL_CIPHER_NULL_CIPHER) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDH_RSA_WITH_NULL_SHA, "TLS-ECDH-RSA-WITH-NULL-SHA", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDH_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_NULL_CIPHER */ -#endif /* POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) -#if defined(POLARSSL_AES_C) -#if defined(POLARSSL_SHA1_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, "TLS-ECDH-ECDSA-WITH-AES-128-CBC-SHA", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDH_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - { TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, "TLS-ECDH-ECDSA-WITH-AES-256-CBC-SHA", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDH_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_SHA1_C */ -#if defined(POLARSSL_SHA256_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, "TLS-ECDH-ECDSA-WITH-AES-128-CBC-SHA256", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDH_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#if defined(POLARSSL_GCM_C) - { TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, "TLS-ECDH-ECDSA-WITH-AES-128-GCM-SHA256", - POLARSSL_CIPHER_AES_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDH_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_SHA256_C */ -#if defined(POLARSSL_SHA512_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) - { TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, "TLS-ECDH-ECDSA-WITH-AES-256-CBC-SHA384", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDH_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#if defined(POLARSSL_GCM_C) - { TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, "TLS-ECDH-ECDSA-WITH-AES-256-GCM-SHA384", - POLARSSL_CIPHER_AES_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDH_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_AES_C */ - -#if defined(POLARSSL_CAMELLIA_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA256_C) - { TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDH-ECDSA-WITH-CAMELLIA-128-CBC-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDH_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ -#if defined(POLARSSL_SHA512_C) - { TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDH-ECDSA-WITH-CAMELLIA-256-CBC-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDH_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_GCM_C) -#if defined(POLARSSL_SHA256_C) - { TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDH-ECDSA-WITH-CAMELLIA-128-GCM-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDH_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ -#if defined(POLARSSL_SHA512_C) - { TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDH-ECDSA-WITH-CAMELLIA-256-GCM-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDH_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_CAMELLIA_C */ - -#if defined(POLARSSL_DES_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDH-ECDSA-WITH-3DES-EDE-CBC-SHA", - POLARSSL_CIPHER_DES_EDE3_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDH_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_ARC4_C) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDH_ECDSA_WITH_RC4_128_SHA, "TLS-ECDH-ECDSA-WITH-RC4-128-SHA", - POLARSSL_CIPHER_ARC4_128, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDH_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_ARC4_C */ - -#if defined(POLARSSL_CIPHER_NULL_CIPHER) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDH_ECDSA_WITH_NULL_SHA, "TLS-ECDH-ECDSA-WITH-NULL-SHA", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDH_ECDSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_NULL_CIPHER */ -#endif /* POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_PSK_ENABLED) -#if defined(POLARSSL_AES_C) -#if defined(POLARSSL_GCM_C) -#if defined(POLARSSL_SHA256_C) - { TLS_PSK_WITH_AES_128_GCM_SHA256, "TLS-PSK-WITH-AES-128-GCM-SHA256", - POLARSSL_CIPHER_AES_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_PSK_WITH_AES_256_GCM_SHA384, "TLS-PSK-WITH-AES-256-GCM-SHA384", - POLARSSL_CIPHER_AES_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_GCM_C */ - -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA256_C) - { TLS_PSK_WITH_AES_128_CBC_SHA256, "TLS-PSK-WITH-AES-128-CBC-SHA256", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_PSK_WITH_AES_256_CBC_SHA384, "TLS-PSK-WITH-AES-256-CBC-SHA384", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ - -#if defined(POLARSSL_SHA1_C) - { TLS_PSK_WITH_AES_128_CBC_SHA, "TLS-PSK-WITH-AES-128-CBC-SHA", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - - { TLS_PSK_WITH_AES_256_CBC_SHA, "TLS-PSK-WITH-AES-256-CBC-SHA", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#if defined(POLARSSL_CCM_C) - { TLS_PSK_WITH_AES_256_CCM, "TLS-PSK-WITH-AES-256-CCM", - POLARSSL_CIPHER_AES_256_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - { TLS_PSK_WITH_AES_256_CCM_8, "TLS-PSK-WITH-AES-256-CCM-8", - POLARSSL_CIPHER_AES_256_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_SHORT_TAG }, - { TLS_PSK_WITH_AES_128_CCM, "TLS-PSK-WITH-AES-128-CCM", - POLARSSL_CIPHER_AES_128_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - { TLS_PSK_WITH_AES_128_CCM_8, "TLS-PSK-WITH-AES-128-CCM-8", - POLARSSL_CIPHER_AES_128_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_SHORT_TAG }, -#endif /* POLARSSL_CCM_C */ -#endif /* POLARSSL_AES_C */ - -#if defined(POLARSSL_CAMELLIA_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA256_C) - { TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-PSK-WITH-CAMELLIA-128-CBC-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-PSK-WITH-CAMELLIA-256-CBC-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_GCM_C) -#if defined(POLARSSL_SHA256_C) - { TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-PSK-WITH-CAMELLIA-128-GCM-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-PSK-WITH-CAMELLIA-256-GCM-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_CAMELLIA_C */ - -#if defined(POLARSSL_DES_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA1_C) - { TLS_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-PSK-WITH-3DES-EDE-CBC-SHA", - POLARSSL_CIPHER_DES_EDE3_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_ARC4_C) -#if defined(POLARSSL_SHA1_C) - { TLS_PSK_WITH_RC4_128_SHA, "TLS-PSK-WITH-RC4-128-SHA", - POLARSSL_CIPHER_ARC4_128, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_ARC4_C */ -#endif /* POLARSSL_KEY_EXCHANGE_PSK_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) -#if defined(POLARSSL_AES_C) -#if defined(POLARSSL_GCM_C) -#if defined(POLARSSL_SHA256_C) - { TLS_DHE_PSK_WITH_AES_128_GCM_SHA256, "TLS-DHE-PSK-WITH-AES-128-GCM-SHA256", - POLARSSL_CIPHER_AES_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_DHE_PSK_WITH_AES_256_GCM_SHA384, "TLS-DHE-PSK-WITH-AES-256-GCM-SHA384", - POLARSSL_CIPHER_AES_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_GCM_C */ - -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA256_C) - { TLS_DHE_PSK_WITH_AES_128_CBC_SHA256, "TLS-DHE-PSK-WITH-AES-128-CBC-SHA256", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_DHE_PSK_WITH_AES_256_CBC_SHA384, "TLS-DHE-PSK-WITH-AES-256-CBC-SHA384", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ - -#if defined(POLARSSL_SHA1_C) - { TLS_DHE_PSK_WITH_AES_128_CBC_SHA, "TLS-DHE-PSK-WITH-AES-128-CBC-SHA", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - - { TLS_DHE_PSK_WITH_AES_256_CBC_SHA, "TLS-DHE-PSK-WITH-AES-256-CBC-SHA", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#if defined(POLARSSL_CCM_C) - { TLS_DHE_PSK_WITH_AES_256_CCM, "TLS-DHE-PSK-WITH-AES-256-CCM", - POLARSSL_CIPHER_AES_256_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - { TLS_DHE_PSK_WITH_AES_256_CCM_8, "TLS-DHE-PSK-WITH-AES-256-CCM-8", - POLARSSL_CIPHER_AES_256_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_SHORT_TAG }, - { TLS_DHE_PSK_WITH_AES_128_CCM, "TLS-DHE-PSK-WITH-AES-128-CCM", - POLARSSL_CIPHER_AES_128_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - { TLS_DHE_PSK_WITH_AES_128_CCM_8, "TLS-DHE-PSK-WITH-AES-128-CCM-8", - POLARSSL_CIPHER_AES_128_CCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_SHORT_TAG }, -#endif /* POLARSSL_CCM_C */ -#endif /* POLARSSL_AES_C */ - -#if defined(POLARSSL_CAMELLIA_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA256_C) - { TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-DHE-PSK-WITH-CAMELLIA-128-CBC-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-DHE-PSK-WITH-CAMELLIA-256-CBC-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_GCM_C) -#if defined(POLARSSL_SHA256_C) - { TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-DHE-PSK-WITH-CAMELLIA-128-GCM-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-DHE-PSK-WITH-CAMELLIA-256-GCM-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_CAMELLIA_C */ - -#if defined(POLARSSL_DES_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA1_C) - { TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-DHE-PSK-WITH-3DES-EDE-CBC-SHA", - POLARSSL_CIPHER_DES_EDE3_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_ARC4_C) -#if defined(POLARSSL_SHA1_C) - { TLS_DHE_PSK_WITH_RC4_128_SHA, "TLS-DHE-PSK-WITH-RC4-128-SHA", - POLARSSL_CIPHER_ARC4_128, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_ARC4_C */ -#endif /* POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) -#if defined(POLARSSL_AES_C) - -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA256_C) - { TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-PSK-WITH-AES-256-CBC-SHA384", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ - -#if defined(POLARSSL_SHA1_C) - { TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA, "TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - - { TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA, "TLS-ECDHE-PSK-WITH-AES-256-CBC-SHA", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_AES_C */ - -#if defined(POLARSSL_CAMELLIA_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA256_C) - { TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-PSK-WITH-CAMELLIA-128-CBC-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-PSK-WITH-CAMELLIA-256-CBC-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_CAMELLIA_C */ - -#if defined(POLARSSL_DES_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-PSK-WITH-3DES-EDE-CBC-SHA", - POLARSSL_CIPHER_DES_EDE3_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_ARC4_C) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDHE_PSK_WITH_RC4_128_SHA, "TLS-ECDHE-PSK-WITH-RC4-128-SHA", - POLARSSL_CIPHER_ARC4_128, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_ARC4_C */ -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) -#if defined(POLARSSL_AES_C) -#if defined(POLARSSL_GCM_C) -#if defined(POLARSSL_SHA256_C) - { TLS_RSA_PSK_WITH_AES_128_GCM_SHA256, "TLS-RSA-PSK-WITH-AES-128-GCM-SHA256", - POLARSSL_CIPHER_AES_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_RSA_PSK_WITH_AES_256_GCM_SHA384, "TLS-RSA-PSK-WITH-AES-256-GCM-SHA384", - POLARSSL_CIPHER_AES_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_GCM_C */ - -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA256_C) - { TLS_RSA_PSK_WITH_AES_128_CBC_SHA256, "TLS-RSA-PSK-WITH-AES-128-CBC-SHA256", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_RSA_PSK_WITH_AES_256_CBC_SHA384, "TLS-RSA-PSK-WITH-AES-256-CBC-SHA384", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ - -#if defined(POLARSSL_SHA1_C) - { TLS_RSA_PSK_WITH_AES_128_CBC_SHA, "TLS-RSA-PSK-WITH-AES-128-CBC-SHA", - POLARSSL_CIPHER_AES_128_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, - - { TLS_RSA_PSK_WITH_AES_256_CBC_SHA, "TLS-RSA-PSK-WITH-AES-256-CBC-SHA", - POLARSSL_CIPHER_AES_256_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_AES_C */ - -#if defined(POLARSSL_CAMELLIA_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA256_C) - { TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-RSA-PSK-WITH-CAMELLIA-128-CBC-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_CBC, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-RSA-PSK-WITH-CAMELLIA-256-CBC-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_CBC, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_GCM_C) -#if defined(POLARSSL_SHA256_C) - { TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-RSA-PSK-WITH-CAMELLIA-128-GCM-SHA256", - POLARSSL_CIPHER_CAMELLIA_128_GCM, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) - { TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-RSA-PSK-WITH-CAMELLIA-256-GCM-SHA384", - POLARSSL_CIPHER_CAMELLIA_256_GCM, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_GCM_C */ -#endif /* POLARSSL_CAMELLIA_C */ - -#if defined(POLARSSL_DES_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_SHA1_C) - { TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-RSA-PSK-WITH-3DES-EDE-CBC-SHA", - POLARSSL_CIPHER_DES_EDE3_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_DES_C */ - -#if defined(POLARSSL_ARC4_C) -#if defined(POLARSSL_SHA1_C) - { TLS_RSA_PSK_WITH_RC4_128_SHA, "TLS-RSA-PSK-WITH-RC4-128-SHA", - POLARSSL_CIPHER_ARC4_128, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - 0 }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_ARC4_C */ -#endif /* POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED */ - -#if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES) -#if defined(POLARSSL_CIPHER_NULL_CIPHER) -#if defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) -#if defined(POLARSSL_MD5_C) - { TLS_RSA_WITH_NULL_MD5, "TLS-RSA-WITH-NULL-MD5", - POLARSSL_CIPHER_NULL, POLARSSL_MD_MD5, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif - -#if defined(POLARSSL_SHA1_C) - { TLS_RSA_WITH_NULL_SHA, "TLS-RSA-WITH-NULL-SHA", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif - -#if defined(POLARSSL_SHA256_C) - { TLS_RSA_WITH_NULL_SHA256, "TLS-RSA-WITH-NULL-SHA256", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif -#endif /* POLARSSL_KEY_EXCHANGE_RSA_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_PSK_ENABLED) -#if defined(POLARSSL_SHA1_C) - { TLS_PSK_WITH_NULL_SHA, "TLS-PSK-WITH-NULL-SHA", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif /* POLARSSL_SHA1_C */ - -#if defined(POLARSSL_SHA256_C) - { TLS_PSK_WITH_NULL_SHA256, "TLS-PSK-WITH-NULL-SHA256", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif - -#if defined(POLARSSL_SHA512_C) - { TLS_PSK_WITH_NULL_SHA384, "TLS-PSK-WITH-NULL-SHA384", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif -#endif /* POLARSSL_KEY_EXCHANGE_PSK_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) -#if defined(POLARSSL_SHA1_C) - { TLS_DHE_PSK_WITH_NULL_SHA, "TLS-DHE-PSK-WITH-NULL-SHA", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif /* POLARSSL_SHA1_C */ - -#if defined(POLARSSL_SHA256_C) - { TLS_DHE_PSK_WITH_NULL_SHA256, "TLS-DHE-PSK-WITH-NULL-SHA256", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif - -#if defined(POLARSSL_SHA512_C) - { TLS_DHE_PSK_WITH_NULL_SHA384, "TLS-DHE-PSK-WITH-NULL-SHA384", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_DHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif -#endif /* POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) -#if defined(POLARSSL_SHA1_C) - { TLS_ECDHE_PSK_WITH_NULL_SHA, "TLS-ECDHE-PSK-WITH-NULL-SHA", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_ECDHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif /* POLARSSL_SHA1_C */ - -#if defined(POLARSSL_SHA256_C) - { TLS_ECDHE_PSK_WITH_NULL_SHA256, "TLS-ECDHE-PSK-WITH-NULL-SHA256", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_ECDHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif - -#if defined(POLARSSL_SHA512_C) - { TLS_ECDHE_PSK_WITH_NULL_SHA384, "TLS-ECDHE-PSK-WITH-NULL-SHA384", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_ECDHE_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_1, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) -#if defined(POLARSSL_SHA1_C) - { TLS_RSA_PSK_WITH_NULL_SHA, "TLS-RSA-PSK-WITH-NULL-SHA", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif /* POLARSSL_SHA1_C */ - -#if defined(POLARSSL_SHA256_C) - { TLS_RSA_PSK_WITH_NULL_SHA256, "TLS-RSA-PSK-WITH-NULL-SHA256", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA256, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif - -#if defined(POLARSSL_SHA512_C) - { TLS_RSA_PSK_WITH_NULL_SHA384, "TLS-RSA-PSK-WITH-NULL-SHA384", - POLARSSL_CIPHER_NULL, POLARSSL_MD_SHA384, POLARSSL_KEY_EXCHANGE_RSA_PSK, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif -#endif /* POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED */ -#endif /* POLARSSL_CIPHER_NULL_CIPHER */ - -#if defined(POLARSSL_DES_C) -#if defined(POLARSSL_CIPHER_MODE_CBC) -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) -#if defined(POLARSSL_SHA1_C) - { TLS_DHE_RSA_WITH_DES_CBC_SHA, "TLS-DHE-RSA-WITH-DES-CBC-SHA", - POLARSSL_CIPHER_DES_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_DHE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) -#if defined(POLARSSL_SHA1_C) - { TLS_RSA_WITH_DES_CBC_SHA, "TLS-RSA-WITH-DES-CBC-SHA", - POLARSSL_CIPHER_DES_CBC, POLARSSL_MD_SHA1, POLARSSL_KEY_EXCHANGE_RSA, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_0, - SSL_MAJOR_VERSION_3, SSL_MINOR_VERSION_3, - POLARSSL_CIPHERSUITE_WEAK }, -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_KEY_EXCHANGE_RSA_ENABLED */ -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* POLARSSL_DES_C */ -#endif /* POLARSSL_ENABLE_WEAK_CIPHERSUITES */ - - { 0, "", 0, 0, 0, 0, 0, 0, 0, 0 } -}; - -#if defined(SSL_CIPHERSUITES) -const int *ssl_list_ciphersuites( void ) -{ - return( ciphersuite_preference ); -} -#else -#define MAX_CIPHERSUITES sizeof( ciphersuite_definitions ) / \ - sizeof( ciphersuite_definitions[0] ) -static int supported_ciphersuites[MAX_CIPHERSUITES]; -static int supported_init = 0; - -const int *ssl_list_ciphersuites( void ) -{ - /* - * On initial call filter out all ciphersuites not supported by current - * build based on presence in the ciphersuite_definitions. - */ - if( supported_init == 0 ) - { - const int *p; - int *q; - - for( p = ciphersuite_preference, q = supported_ciphersuites; - *p != 0 && q < supported_ciphersuites + MAX_CIPHERSUITES - 1; - p++ ) - { -#if defined(POLARSSL_REMOVE_ARC4_CIPHERSUITES) - const ssl_ciphersuite_t *cs_info; - if( ( cs_info = ssl_ciphersuite_from_id( *p ) ) != NULL && - cs_info->cipher != POLARSSL_CIPHER_ARC4_128 ) -#else - if( ssl_ciphersuite_from_id( *p ) != NULL ) -#endif - *(q++) = *p; - } - *q = 0; - - supported_init = 1; - } - - return( supported_ciphersuites ); -}; -#endif /* SSL_CIPHERSUITES */ - -const ssl_ciphersuite_t *ssl_ciphersuite_from_string( - const char *ciphersuite_name ) -{ - const ssl_ciphersuite_t *cur = ciphersuite_definitions; - - if( NULL == ciphersuite_name ) - return( NULL ); - - while( cur->id != 0 ) - { - if( 0 == strcasecmp( cur->name, ciphersuite_name ) ) - return( cur ); - - cur++; - } - - return( NULL ); -} - -const ssl_ciphersuite_t *ssl_ciphersuite_from_id( int ciphersuite ) -{ - const ssl_ciphersuite_t *cur = ciphersuite_definitions; - - while( cur->id != 0 ) - { - if( cur->id == ciphersuite ) - return( cur ); - - cur++; - } - - return( NULL ); -} - -const char *ssl_get_ciphersuite_name( const int ciphersuite_id ) -{ - const ssl_ciphersuite_t *cur; - - cur = ssl_ciphersuite_from_id( ciphersuite_id ); - - if( cur == NULL ) - return( "unknown" ); - - return( cur->name ); -} - -int ssl_get_ciphersuite_id( const char *ciphersuite_name ) -{ - const ssl_ciphersuite_t *cur; - - cur = ssl_ciphersuite_from_string( ciphersuite_name ); - - if( cur == NULL ) - return( 0 ); - - return( cur->id ); -} - -#if defined(POLARSSL_PK_C) -pk_type_t ssl_get_ciphersuite_sig_pk_alg( const ssl_ciphersuite_t *info ) -{ - switch( info->key_exchange ) - { - case POLARSSL_KEY_EXCHANGE_RSA: - case POLARSSL_KEY_EXCHANGE_DHE_RSA: - case POLARSSL_KEY_EXCHANGE_ECDHE_RSA: - case POLARSSL_KEY_EXCHANGE_RSA_PSK: - return( POLARSSL_PK_RSA ); - - case POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA: - return( POLARSSL_PK_ECDSA ); - - case POLARSSL_KEY_EXCHANGE_ECDH_RSA: - case POLARSSL_KEY_EXCHANGE_ECDH_ECDSA: - return( POLARSSL_PK_ECKEY ); - - default: - return( POLARSSL_PK_NONE ); - } -} -#endif /* POLARSSL_PK_C */ - -#if defined(POLARSSL_ECDH_C) || defined(POLARSSL_ECDSA_C) -int ssl_ciphersuite_uses_ec( const ssl_ciphersuite_t *info ) -{ - switch( info->key_exchange ) - { - case POLARSSL_KEY_EXCHANGE_ECDHE_RSA: - case POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA: - case POLARSSL_KEY_EXCHANGE_ECDHE_PSK: - case POLARSSL_KEY_EXCHANGE_ECDH_RSA: - case POLARSSL_KEY_EXCHANGE_ECDH_ECDSA: - return( 1 ); - - default: - return( 0 ); - } -} -#endif /* POLARSSL_ECDH_C || POLARSSL_ECDSA_C */ - -#if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED) -int ssl_ciphersuite_uses_psk( const ssl_ciphersuite_t *info ) -{ - switch( info->key_exchange ) - { - case POLARSSL_KEY_EXCHANGE_PSK: - case POLARSSL_KEY_EXCHANGE_RSA_PSK: - case POLARSSL_KEY_EXCHANGE_DHE_PSK: - case POLARSSL_KEY_EXCHANGE_ECDHE_PSK: - return( 1 ); - - default: - return( 0 ); - } -} -#endif /* POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED */ - -#endif /* POLARSSL_SSL_TLS_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_cli.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_cli.c deleted file mode 100644 index 034f2bf..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_cli.c +++ /dev/null @@ -1,2639 +0,0 @@ -/* - * SSLv3/TLSv1 client-side functions - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_SSL_CLI_C) - -#include "polarssl/debug.h" -#include "polarssl/ssl.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include -#include - -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#include -typedef UINT32 uint32_t; -#else -#include -#endif - -#if defined(POLARSSL_HAVE_TIME) -#include -#endif - -#if defined(POLARSSL_SSL_SESSION_TICKETS) -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} -#endif - -#if defined(POLARSSL_SSL_SERVER_NAME_INDICATION) -static void ssl_write_hostname_ext( ssl_context *ssl, - unsigned char *buf, - size_t *olen ) -{ - unsigned char *p = buf; - - *olen = 0; - - if( ssl->hostname == NULL ) - return; - - SSL_DEBUG_MSG( 3, ( "client hello, adding server name extension: %s", - ssl->hostname ) ); - - /* - * struct { - * NameType name_type; - * select (name_type) { - * case host_name: HostName; - * } name; - * } ServerName; - * - * enum { - * host_name(0), (255) - * } NameType; - * - * opaque HostName<1..2^16-1>; - * - * struct { - * ServerName server_name_list<1..2^16-1> - * } ServerNameList; - */ - *p++ = (unsigned char)( ( TLS_EXT_SERVERNAME >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( TLS_EXT_SERVERNAME ) & 0xFF ); - - *p++ = (unsigned char)( ( (ssl->hostname_len + 5) >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( (ssl->hostname_len + 5) ) & 0xFF ); - - *p++ = (unsigned char)( ( (ssl->hostname_len + 3) >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( (ssl->hostname_len + 3) ) & 0xFF ); - - *p++ = (unsigned char)( ( TLS_EXT_SERVERNAME_HOSTNAME ) & 0xFF ); - *p++ = (unsigned char)( ( ssl->hostname_len >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( ssl->hostname_len ) & 0xFF ); - - memcpy( p, ssl->hostname, ssl->hostname_len ); - - *olen = ssl->hostname_len + 9; -} -#endif /* POLARSSL_SSL_SERVER_NAME_INDICATION */ - -static void ssl_write_renegotiation_ext( ssl_context *ssl, - unsigned char *buf, - size_t *olen ) -{ - unsigned char *p = buf; - - *olen = 0; - - if( ssl->renegotiation != SSL_RENEGOTIATION ) - return; - - SSL_DEBUG_MSG( 3, ( "client hello, adding renegotiation extension" ) ); - - /* - * Secure renegotiation - */ - *p++ = (unsigned char)( ( TLS_EXT_RENEGOTIATION_INFO >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( TLS_EXT_RENEGOTIATION_INFO ) & 0xFF ); - - *p++ = 0x00; - *p++ = ( ssl->verify_data_len + 1 ) & 0xFF; - *p++ = ssl->verify_data_len & 0xFF; - - memcpy( p, ssl->own_verify_data, ssl->verify_data_len ); - - *olen = 5 + ssl->verify_data_len; -} - -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -static void ssl_write_signature_algorithms_ext( ssl_context *ssl, - unsigned char *buf, - size_t *olen ) -{ - unsigned char *p = buf; - size_t sig_alg_len = 0; -#if defined(POLARSSL_RSA_C) || defined(POLARSSL_ECDSA_C) - unsigned char *sig_alg_list = buf + 6; -#endif - - *olen = 0; - - if( ssl->max_minor_ver != SSL_MINOR_VERSION_3 ) - return; - - SSL_DEBUG_MSG( 3, ( "client hello, adding signature_algorithms extension" ) ); - - /* - * Prepare signature_algorithms extension (TLS 1.2) - */ -#if defined(POLARSSL_RSA_C) -#if defined(POLARSSL_SHA512_C) - sig_alg_list[sig_alg_len++] = SSL_HASH_SHA512; - sig_alg_list[sig_alg_len++] = SSL_SIG_RSA; - sig_alg_list[sig_alg_len++] = SSL_HASH_SHA384; - sig_alg_list[sig_alg_len++] = SSL_SIG_RSA; -#endif -#if defined(POLARSSL_SHA256_C) - sig_alg_list[sig_alg_len++] = SSL_HASH_SHA256; - sig_alg_list[sig_alg_len++] = SSL_SIG_RSA; - sig_alg_list[sig_alg_len++] = SSL_HASH_SHA224; - sig_alg_list[sig_alg_len++] = SSL_SIG_RSA; -#endif -#if defined(POLARSSL_SHA1_C) - sig_alg_list[sig_alg_len++] = SSL_HASH_SHA1; - sig_alg_list[sig_alg_len++] = SSL_SIG_RSA; -#endif -#if defined(POLARSSL_MD5_C) - sig_alg_list[sig_alg_len++] = SSL_HASH_MD5; - sig_alg_list[sig_alg_len++] = SSL_SIG_RSA; -#endif -#endif /* POLARSSL_RSA_C */ -#if defined(POLARSSL_ECDSA_C) -#if defined(POLARSSL_SHA512_C) - sig_alg_list[sig_alg_len++] = SSL_HASH_SHA512; - sig_alg_list[sig_alg_len++] = SSL_SIG_ECDSA; - sig_alg_list[sig_alg_len++] = SSL_HASH_SHA384; - sig_alg_list[sig_alg_len++] = SSL_SIG_ECDSA; -#endif -#if defined(POLARSSL_SHA256_C) - sig_alg_list[sig_alg_len++] = SSL_HASH_SHA256; - sig_alg_list[sig_alg_len++] = SSL_SIG_ECDSA; - sig_alg_list[sig_alg_len++] = SSL_HASH_SHA224; - sig_alg_list[sig_alg_len++] = SSL_SIG_ECDSA; -#endif -#if defined(POLARSSL_SHA1_C) - sig_alg_list[sig_alg_len++] = SSL_HASH_SHA1; - sig_alg_list[sig_alg_len++] = SSL_SIG_ECDSA; -#endif -#if defined(POLARSSL_MD5_C) - sig_alg_list[sig_alg_len++] = SSL_HASH_MD5; - sig_alg_list[sig_alg_len++] = SSL_SIG_ECDSA; -#endif -#endif /* POLARSSL_ECDSA_C */ - - /* - * enum { - * none(0), md5(1), sha1(2), sha224(3), sha256(4), sha384(5), - * sha512(6), (255) - * } HashAlgorithm; - * - * enum { anonymous(0), rsa(1), dsa(2), ecdsa(3), (255) } - * SignatureAlgorithm; - * - * struct { - * HashAlgorithm hash; - * SignatureAlgorithm signature; - * } SignatureAndHashAlgorithm; - * - * SignatureAndHashAlgorithm - * supported_signature_algorithms<2..2^16-2>; - */ - *p++ = (unsigned char)( ( TLS_EXT_SIG_ALG >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( TLS_EXT_SIG_ALG ) & 0xFF ); - - *p++ = (unsigned char)( ( ( sig_alg_len + 2 ) >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( ( sig_alg_len + 2 ) ) & 0xFF ); - - *p++ = (unsigned char)( ( sig_alg_len >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( sig_alg_len ) & 0xFF ); - - *olen = 6 + sig_alg_len; -} -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - -#if defined(POLARSSL_ECDH_C) || defined(POLARSSL_ECDSA_C) -static void ssl_write_supported_elliptic_curves_ext( ssl_context *ssl, - unsigned char *buf, - size_t *olen ) -{ - unsigned char *p = buf; - unsigned char *elliptic_curve_list = p + 6; - size_t elliptic_curve_len = 0; - const ecp_curve_info *info; -#if defined(POLARSSL_SSL_SET_CURVES) - const ecp_group_id *grp_id; -#else - ((void) ssl); -#endif - - *olen = 0; - - SSL_DEBUG_MSG( 3, ( "client hello, adding supported_elliptic_curves extension" ) ); - -#if defined(POLARSSL_SSL_SET_CURVES) - for( grp_id = ssl->curve_list; *grp_id != POLARSSL_ECP_DP_NONE; grp_id++ ) - { - info = ecp_curve_info_from_grp_id( *grp_id ); -#else - for( info = ecp_curve_list(); info->grp_id != POLARSSL_ECP_DP_NONE; info++ ) - { -#endif - - elliptic_curve_list[elliptic_curve_len++] = info->tls_id >> 8; - elliptic_curve_list[elliptic_curve_len++] = info->tls_id & 0xFF; - } - - if( elliptic_curve_len == 0 ) - return; - - *p++ = (unsigned char)( ( TLS_EXT_SUPPORTED_ELLIPTIC_CURVES >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( TLS_EXT_SUPPORTED_ELLIPTIC_CURVES ) & 0xFF ); - - *p++ = (unsigned char)( ( ( elliptic_curve_len + 2 ) >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( ( elliptic_curve_len + 2 ) ) & 0xFF ); - - *p++ = (unsigned char)( ( ( elliptic_curve_len ) >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( ( elliptic_curve_len ) ) & 0xFF ); - - *olen = 6 + elliptic_curve_len; -} - -static void ssl_write_supported_point_formats_ext( ssl_context *ssl, - unsigned char *buf, - size_t *olen ) -{ - unsigned char *p = buf; - ((void) ssl); - - *olen = 0; - - SSL_DEBUG_MSG( 3, ( "client hello, adding supported_point_formats extension" ) ); - - *p++ = (unsigned char)( ( TLS_EXT_SUPPORTED_POINT_FORMATS >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( TLS_EXT_SUPPORTED_POINT_FORMATS ) & 0xFF ); - - *p++ = 0x00; - *p++ = 2; - - *p++ = 1; - *p++ = POLARSSL_ECP_PF_UNCOMPRESSED; - - *olen = 6; -} -#endif /* POLARSSL_ECDH_C || POLARSSL_ECDSA_C */ - -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) -static void ssl_write_max_fragment_length_ext( ssl_context *ssl, - unsigned char *buf, - size_t *olen ) -{ - unsigned char *p = buf; - - if( ssl->mfl_code == SSL_MAX_FRAG_LEN_NONE ) { - *olen = 0; - return; - } - - SSL_DEBUG_MSG( 3, ( "client hello, adding max_fragment_length extension" ) ); - - *p++ = (unsigned char)( ( TLS_EXT_MAX_FRAGMENT_LENGTH >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( TLS_EXT_MAX_FRAGMENT_LENGTH ) & 0xFF ); - - *p++ = 0x00; - *p++ = 1; - - *p++ = ssl->mfl_code; - - *olen = 5; -} -#endif /* POLARSSL_SSL_MAX_FRAGMENT_LENGTH */ - -#if defined(POLARSSL_SSL_TRUNCATED_HMAC) -static void ssl_write_truncated_hmac_ext( ssl_context *ssl, - unsigned char *buf, size_t *olen ) -{ - unsigned char *p = buf; - - if( ssl->trunc_hmac == SSL_TRUNC_HMAC_DISABLED ) - { - *olen = 0; - return; - } - - SSL_DEBUG_MSG( 3, ( "client hello, adding truncated_hmac extension" ) ); - - *p++ = (unsigned char)( ( TLS_EXT_TRUNCATED_HMAC >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( TLS_EXT_TRUNCATED_HMAC ) & 0xFF ); - - *p++ = 0x00; - *p++ = 0x00; - - *olen = 4; -} -#endif /* POLARSSL_SSL_TRUNCATED_HMAC */ - -#if defined(POLARSSL_SSL_SESSION_TICKETS) -static void ssl_write_session_ticket_ext( ssl_context *ssl, - unsigned char *buf, size_t *olen ) -{ - unsigned char *p = buf; - size_t tlen = ssl->session_negotiate->ticket_len; - - if( ssl->session_tickets == SSL_SESSION_TICKETS_DISABLED ) - { - *olen = 0; - return; - } - - SSL_DEBUG_MSG( 3, ( "client hello, adding session ticket extension" ) ); - - *p++ = (unsigned char)( ( TLS_EXT_SESSION_TICKET >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( TLS_EXT_SESSION_TICKET ) & 0xFF ); - - *p++ = (unsigned char)( ( tlen >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( tlen ) & 0xFF ); - - *olen = 4; - - if( ssl->session_negotiate->ticket == NULL || - ssl->session_negotiate->ticket_len == 0 ) - { - return; - } - - SSL_DEBUG_MSG( 3, ( "sending session ticket of length %d", tlen ) ); - - memcpy( p, ssl->session_negotiate->ticket, tlen ); - - *olen += tlen; -} -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - -#if defined(POLARSSL_SSL_ALPN) -static void ssl_write_alpn_ext( ssl_context *ssl, - unsigned char *buf, size_t *olen ) -{ - unsigned char *p = buf; - const char **cur; - - if( ssl->alpn_list == NULL ) - { - *olen = 0; - return; - } - - SSL_DEBUG_MSG( 3, ( "client hello, adding alpn extension" ) ); - - *p++ = (unsigned char)( ( TLS_EXT_ALPN >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( TLS_EXT_ALPN ) & 0xFF ); - - /* - * opaque ProtocolName<1..2^8-1>; - * - * struct { - * ProtocolName protocol_name_list<2..2^16-1> - * } ProtocolNameList; - */ - - /* Skip writing extension and list length for now */ - p += 4; - - for( cur = ssl->alpn_list; *cur != NULL; cur++ ) - { - *p = (unsigned char)( strlen( *cur ) & 0xFF ); - memcpy( p + 1, *cur, *p ); - p += 1 + *p; - } - - *olen = p - buf; - - /* List length = olen - 2 (ext_type) - 2 (ext_len) - 2 (list_len) */ - buf[4] = (unsigned char)( ( ( *olen - 6 ) >> 8 ) & 0xFF ); - buf[5] = (unsigned char)( ( ( *olen - 6 ) ) & 0xFF ); - - /* Extension length = olen - 2 (ext_type) - 2 (ext_len) */ - buf[2] = (unsigned char)( ( ( *olen - 4 ) >> 8 ) & 0xFF ); - buf[3] = (unsigned char)( ( ( *olen - 4 ) ) & 0xFF ); -} -#endif /* POLARSSL_SSL_ALPN */ - -static int ssl_write_client_hello( ssl_context *ssl ) -{ - int ret; - size_t i, n, olen, ext_len = 0; - unsigned char *buf; - unsigned char *p, *q; -#if defined(POLARSSL_HAVE_TIME) - time_t t; -#endif - const int *ciphersuites; - const ssl_ciphersuite_t *ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> write client hello" ) ); - - if( ssl->f_rng == NULL ) - { - SSL_DEBUG_MSG( 1, ( "no RNG provided") ); - return( POLARSSL_ERR_SSL_NO_RNG ); - } - - if( ssl->renegotiation == SSL_INITIAL_HANDSHAKE ) - { - ssl->major_ver = ssl->min_major_ver; - ssl->minor_ver = ssl->min_minor_ver; - } - - if( ssl->max_major_ver == 0 && ssl->max_minor_ver == 0 ) - { - ssl->max_major_ver = SSL_MAX_MAJOR_VERSION; - ssl->max_minor_ver = SSL_MAX_MINOR_VERSION; - } - - /* - * 0 . 0 handshake type - * 1 . 3 handshake length - * 4 . 5 highest version supported - * 6 . 9 current UNIX time - * 10 . 37 random bytes - */ - buf = ssl->out_msg; - p = buf + 4; - - *p++ = (unsigned char) ssl->max_major_ver; - *p++ = (unsigned char) ssl->max_minor_ver; - - SSL_DEBUG_MSG( 3, ( "client hello, max version: [%d:%d]", - buf[4], buf[5] ) ); - -#if defined(POLARSSL_HAVE_TIME) - t = time( NULL ); - *p++ = (unsigned char)( t >> 24 ); - *p++ = (unsigned char)( t >> 16 ); - *p++ = (unsigned char)( t >> 8 ); - *p++ = (unsigned char)( t ); - - SSL_DEBUG_MSG( 3, ( "client hello, current time: %lu", t ) ); -#else - if( ( ret = ssl->f_rng( ssl->p_rng, p, 4 ) ) != 0 ) - return( ret ); - - p += 4; -#endif /* POLARSSL_HAVE_TIME */ - - if( ( ret = ssl->f_rng( ssl->p_rng, p, 28 ) ) != 0 ) - return( ret ); - - p += 28; - - memcpy( ssl->handshake->randbytes, buf + 6, 32 ); - - SSL_DEBUG_BUF( 3, "client hello, random bytes", buf + 6, 32 ); - - /* - * 38 . 38 session id length - * 39 . 39+n session id - * 40+n . 41+n ciphersuitelist length - * 42+n . .. ciphersuitelist - * .. . .. compression methods length - * .. . .. compression methods - * .. . .. extensions length - * .. . .. extensions - */ - n = ssl->session_negotiate->length; - - if( ssl->renegotiation != SSL_INITIAL_HANDSHAKE || n < 16 || n > 32 || - ssl->handshake->resume == 0 ) - { - n = 0; - } - -#if defined(POLARSSL_SSL_SESSION_TICKETS) - /* - * RFC 5077 section 3.4: "When presenting a ticket, the client MAY - * generate and include a Session ID in the TLS ClientHello." - */ - if( ssl->renegotiation == SSL_INITIAL_HANDSHAKE && - ssl->session_negotiate->ticket != NULL && - ssl->session_negotiate->ticket_len != 0 ) - { - ret = ssl->f_rng( ssl->p_rng, ssl->session_negotiate->id, 32 ); - - if( ret != 0 ) - return( ret ); - - ssl->session_negotiate->length = n = 32; - } -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - - *p++ = (unsigned char) n; - - for( i = 0; i < n; i++ ) - *p++ = ssl->session_negotiate->id[i]; - - SSL_DEBUG_MSG( 3, ( "client hello, session id len.: %d", n ) ); - SSL_DEBUG_BUF( 3, "client hello, session id", buf + 39, n ); - - ciphersuites = ssl->ciphersuite_list[ssl->minor_ver]; - n = 0; - q = p; - - // Skip writing ciphersuite length for now - p += 2; - - /* - * Add TLS_EMPTY_RENEGOTIATION_INFO_SCSV - */ - if( ssl->renegotiation == SSL_INITIAL_HANDSHAKE ) - { - *p++ = (unsigned char)( SSL_EMPTY_RENEGOTIATION_INFO >> 8 ); - *p++ = (unsigned char)( SSL_EMPTY_RENEGOTIATION_INFO ); - n++; - } - - for( i = 0; ciphersuites[i] != 0; i++ ) - { - ciphersuite_info = ssl_ciphersuite_from_id( ciphersuites[i] ); - - if( ciphersuite_info == NULL ) - continue; - - if( ciphersuite_info->min_minor_ver > ssl->max_minor_ver || - ciphersuite_info->max_minor_ver < ssl->min_minor_ver ) - continue; - - SSL_DEBUG_MSG( 3, ( "client hello, add ciphersuite: %2d", - ciphersuites[i] ) ); - - n++; - *p++ = (unsigned char)( ciphersuites[i] >> 8 ); - *p++ = (unsigned char)( ciphersuites[i] ); - } - - *q++ = (unsigned char)( n >> 7 ); - *q++ = (unsigned char)( n << 1 ); - - SSL_DEBUG_MSG( 3, ( "client hello, got %d ciphersuites", n ) ); - - -#if defined(POLARSSL_ZLIB_SUPPORT) - SSL_DEBUG_MSG( 3, ( "client hello, compress len.: %d", 2 ) ); - SSL_DEBUG_MSG( 3, ( "client hello, compress alg.: %d %d", - SSL_COMPRESS_DEFLATE, SSL_COMPRESS_NULL ) ); - - *p++ = 2; - *p++ = SSL_COMPRESS_DEFLATE; - *p++ = SSL_COMPRESS_NULL; -#else - SSL_DEBUG_MSG( 3, ( "client hello, compress len.: %d", 1 ) ); - SSL_DEBUG_MSG( 3, ( "client hello, compress alg.: %d", SSL_COMPRESS_NULL ) ); - - *p++ = 1; - *p++ = SSL_COMPRESS_NULL; -#endif /* POLARSSL_ZLIB_SUPPORT */ - - // First write extensions, then the total length - // -#if defined(POLARSSL_SSL_SERVER_NAME_INDICATION) - ssl_write_hostname_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; -#endif - - ssl_write_renegotiation_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; - -#if defined(POLARSSL_SSL_PROTO_TLS1_2) - ssl_write_signature_algorithms_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; -#endif - -#if defined(POLARSSL_ECDH_C) || defined(POLARSSL_ECDSA_C) - ssl_write_supported_elliptic_curves_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; - - ssl_write_supported_point_formats_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; -#endif - -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) - ssl_write_max_fragment_length_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; -#endif - -#if defined(POLARSSL_SSL_TRUNCATED_HMAC) - ssl_write_truncated_hmac_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; -#endif - -#if defined(POLARSSL_SSL_SESSION_TICKETS) - ssl_write_session_ticket_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; -#endif - -#if defined(POLARSSL_SSL_ALPN) - ssl_write_alpn_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; -#endif - - SSL_DEBUG_MSG( 3, ( "client hello, total extension length: %d", - ext_len ) ); - - if( ext_len > 0 ) - { - *p++ = (unsigned char)( ( ext_len >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( ext_len ) & 0xFF ); - p += ext_len; - } - - ssl->out_msglen = p - buf; - ssl->out_msgtype = SSL_MSG_HANDSHAKE; - ssl->out_msg[0] = SSL_HS_CLIENT_HELLO; - - ssl->state++; - - if( ( ret = ssl_write_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_write_record", ret ); - return( ret ); - } - - SSL_DEBUG_MSG( 2, ( "<= write client hello" ) ); - - return( 0 ); -} - -static int ssl_parse_renegotiation_info( ssl_context *ssl, - const unsigned char *buf, - size_t len ) -{ - int ret; - - if( ssl->renegotiation == SSL_INITIAL_HANDSHAKE ) - { - if( len != 1 || buf[0] != 0x0 ) - { - SSL_DEBUG_MSG( 1, ( "non-zero length renegotiated connection field" ) ); - - if( ( ret = ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); - - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - - ssl->secure_renegotiation = SSL_SECURE_RENEGOTIATION; - } - else - { - /* Check verify-data in constant-time. The length OTOH is no secret */ - if( len != 1 + ssl->verify_data_len * 2 || - buf[0] != ssl->verify_data_len * 2 || - safer_memcmp( buf + 1, - ssl->own_verify_data, ssl->verify_data_len ) != 0 || - safer_memcmp( buf + 1 + ssl->verify_data_len, - ssl->peer_verify_data, ssl->verify_data_len ) != 0 ) - { - SSL_DEBUG_MSG( 1, ( "non-matching renegotiated connection field" ) ); - - if( ( ret = ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); - - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - } - - return( 0 ); -} - -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) -static int ssl_parse_max_fragment_length_ext( ssl_context *ssl, - const unsigned char *buf, - size_t len ) -{ - /* - * server should use the extension only if we did, - * and if so the server's value should match ours (and len is always 1) - */ - if( ssl->mfl_code == SSL_MAX_FRAG_LEN_NONE || - len != 1 || - buf[0] != ssl->mfl_code ) - { - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - - return( 0 ); -} -#endif /* POLARSSL_SSL_MAX_FRAGMENT_LENGTH */ - -#if defined(POLARSSL_SSL_TRUNCATED_HMAC) -static int ssl_parse_truncated_hmac_ext( ssl_context *ssl, - const unsigned char *buf, - size_t len ) -{ - if( ssl->trunc_hmac == SSL_TRUNC_HMAC_DISABLED || - len != 0 ) - { - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - - ((void) buf); - - ssl->session_negotiate->trunc_hmac = SSL_TRUNC_HMAC_ENABLED; - - return( 0 ); -} -#endif /* POLARSSL_SSL_TRUNCATED_HMAC */ - -#if defined(POLARSSL_SSL_SESSION_TICKETS) -static int ssl_parse_session_ticket_ext( ssl_context *ssl, - const unsigned char *buf, - size_t len ) -{ - if( ssl->session_tickets == SSL_SESSION_TICKETS_DISABLED || - len != 0 ) - { - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - - ((void) buf); - - ssl->handshake->new_session_ticket = 1; - - return( 0 ); -} -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - -#if defined(POLARSSL_ECDH_C) || defined(POLARSSL_ECDSA_C) -static int ssl_parse_supported_point_formats_ext( ssl_context *ssl, - const unsigned char *buf, - size_t len ) -{ - size_t list_size; - const unsigned char *p; - - list_size = buf[0]; - if( list_size + 1 != len ) - { - SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - - p = buf + 1; - while( list_size > 0 ) - { - if( p[0] == POLARSSL_ECP_PF_UNCOMPRESSED || - p[0] == POLARSSL_ECP_PF_COMPRESSED ) - { - ssl->handshake->ecdh_ctx.point_format = p[0]; - SSL_DEBUG_MSG( 4, ( "point format selected: %d", p[0] ) ); - return( 0 ); - } - - list_size--; - p++; - } - - SSL_DEBUG_MSG( 1, ( "no point format in common" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); -} -#endif /* POLARSSL_ECDH_C || POLARSSL_ECDSA_C */ - -#if defined(POLARSSL_SSL_ALPN) -static int ssl_parse_alpn_ext( ssl_context *ssl, - const unsigned char *buf, size_t len ) -{ - size_t list_len, name_len; - const char **p; - - /* If we didn't send it, the server shouldn't send it */ - if( ssl->alpn_list == NULL ) - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - - /* - * opaque ProtocolName<1..2^8-1>; - * - * struct { - * ProtocolName protocol_name_list<2..2^16-1> - * } ProtocolNameList; - * - * the "ProtocolNameList" MUST contain exactly one "ProtocolName" - */ - - /* Min length is 2 (list_len) + 1 (name_len) + 1 (name) */ - if( len < 4 ) - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - - list_len = ( buf[0] << 8 ) | buf[1]; - if( list_len != len - 2 ) - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - - name_len = buf[2]; - if( name_len != list_len - 1 ) - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - - /* Check that the server chosen protocol was in our list and save it */ - for( p = ssl->alpn_list; *p != NULL; p++ ) - { - if( name_len == strlen( *p ) && - memcmp( buf + 3, *p, name_len ) == 0 ) - { - ssl->alpn_chosen = *p; - return( 0 ); - } - } - - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); -} -#endif /* POLARSSL_SSL_ALPN */ - -static int ssl_parse_server_hello( ssl_context *ssl ) -{ - int ret, i, comp; - size_t n; - size_t ext_len = 0; - unsigned char *buf, *ext; - int renegotiation_info_seen = 0; - int handshake_failure = 0; -#if defined(POLARSSL_DEBUG_C) - uint32_t t; -#endif - - SSL_DEBUG_MSG( 2, ( "=> parse server hello" ) ); - - /* - * 0 . 0 handshake type - * 1 . 3 handshake length - * 4 . 5 protocol version - * 6 . 9 UNIX time() - * 10 . 37 random bytes - */ - buf = ssl->in_msg; - - if( ( ret = ssl_read_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_read_record", ret ); - return( ret ); - } - - if( ssl->in_msgtype != SSL_MSG_HANDSHAKE ) - { - SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE ); - } - - SSL_DEBUG_MSG( 3, ( "server hello, chosen version: [%d:%d]", - buf[4], buf[5] ) ); - - if( ssl->in_hslen < 42 || - buf[0] != SSL_HS_SERVER_HELLO || - buf[4] != SSL_MAJOR_VERSION_3 ) - { - SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - - if( buf[5] > ssl->max_minor_ver ) - { - SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - - ssl->minor_ver = buf[5]; - - if( ssl->minor_ver < ssl->min_minor_ver ) - { - SSL_DEBUG_MSG( 1, ( "server only supports ssl smaller than minimum" - " [%d:%d] < [%d:%d]", ssl->major_ver, - ssl->minor_ver, buf[4], buf[5] ) ); - - ssl_send_alert_message( ssl, SSL_ALERT_LEVEL_FATAL, - SSL_ALERT_MSG_PROTOCOL_VERSION ); - - return( POLARSSL_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); - } - -#if defined(POLARSSL_DEBUG_C) - t = ( (uint32_t) buf[6] << 24 ) - | ( (uint32_t) buf[7] << 16 ) - | ( (uint32_t) buf[8] << 8 ) - | ( (uint32_t) buf[9] ); - SSL_DEBUG_MSG( 3, ( "server hello, current time: %lu", t ) ); -#endif - - memcpy( ssl->handshake->randbytes + 32, buf + 6, 32 ); - - n = buf[38]; - - SSL_DEBUG_BUF( 3, "server hello, random bytes", buf + 6, 32 ); - - if( n > 32 ) - { - SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - - /* - * 38 . 38 session id length - * 39 . 38+n session id - * 39+n . 40+n chosen ciphersuite - * 41+n . 41+n chosen compression alg. - * 42+n . 43+n extensions length - * 44+n . 44+n+m extensions - */ - if( ssl->in_hslen > 42 + n ) - { - ext_len = ( ( buf[42 + n] << 8 ) - | ( buf[43 + n] ) ); - - if( ( ext_len > 0 && ext_len < 4 ) || - ssl->in_hslen != 44 + n + ext_len ) - { - SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - } - - i = ( buf[39 + n] << 8 ) | buf[40 + n]; - comp = buf[41 + n]; - - /* - * Initialize update checksum functions - */ - ssl->transform_negotiate->ciphersuite_info = ssl_ciphersuite_from_id( i ); - - if( ssl->transform_negotiate->ciphersuite_info == NULL ) - { - SSL_DEBUG_MSG( 1, ( "ciphersuite info for %04x not found", i ) ); - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - } - - ssl_optimize_checksum( ssl, ssl->transform_negotiate->ciphersuite_info ); - - SSL_DEBUG_MSG( 3, ( "server hello, session id len.: %d", n ) ); - SSL_DEBUG_BUF( 3, "server hello, session id", buf + 39, n ); - - /* - * Check if the session can be resumed - */ - if( ssl->renegotiation != SSL_INITIAL_HANDSHAKE || - ssl->handshake->resume == 0 || n == 0 || - ssl->session_negotiate->ciphersuite != i || - ssl->session_negotiate->compression != comp || - ssl->session_negotiate->length != n || - memcmp( ssl->session_negotiate->id, buf + 39, n ) != 0 ) - { - ssl->state++; - ssl->handshake->resume = 0; -#if defined(POLARSSL_HAVE_TIME) - ssl->session_negotiate->start = time( NULL ); -#endif - ssl->session_negotiate->ciphersuite = i; - ssl->session_negotiate->compression = comp; - ssl->session_negotiate->length = n; - memcpy( ssl->session_negotiate->id, buf + 39, n ); - } - else - { - ssl->state = SSL_SERVER_CHANGE_CIPHER_SPEC; - - if( ( ret = ssl_derive_keys( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_derive_keys", ret ); - return( ret ); - } - } - - SSL_DEBUG_MSG( 3, ( "%s session has been resumed", - ssl->handshake->resume ? "a" : "no" ) ); - - SSL_DEBUG_MSG( 3, ( "server hello, chosen ciphersuite: %d", i ) ); - SSL_DEBUG_MSG( 3, ( "server hello, compress alg.: %d", buf[41 + n] ) ); - - i = 0; - while( 1 ) - { - if( ssl->ciphersuite_list[ssl->minor_ver][i] == 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - - if( ssl->ciphersuite_list[ssl->minor_ver][i++] == - ssl->session_negotiate->ciphersuite ) - { - break; - } - } - - if( comp != SSL_COMPRESS_NULL -#if defined(POLARSSL_ZLIB_SUPPORT) - && comp != SSL_COMPRESS_DEFLATE -#endif - ) - { - SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - ssl->session_negotiate->compression = comp; - - ext = buf + 44 + n; - - SSL_DEBUG_MSG( 2, ( "server hello, total extension length: %d", ext_len ) ); - - while( ext_len ) - { - unsigned int ext_id = ( ( ext[0] << 8 ) - | ( ext[1] ) ); - unsigned int ext_size = ( ( ext[2] << 8 ) - | ( ext[3] ) ); - - if( ext_size + 4 > ext_len ) - { - SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - - switch( ext_id ) - { - case TLS_EXT_RENEGOTIATION_INFO: - SSL_DEBUG_MSG( 3, ( "found renegotiation extension" ) ); - renegotiation_info_seen = 1; - - if( ( ret = ssl_parse_renegotiation_info( ssl, ext + 4, - ext_size ) ) != 0 ) - return( ret ); - - break; - -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) - case TLS_EXT_MAX_FRAGMENT_LENGTH: - SSL_DEBUG_MSG( 3, ( "found max_fragment_length extension" ) ); - - if( ( ret = ssl_parse_max_fragment_length_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } - - break; -#endif /* POLARSSL_SSL_MAX_FRAGMENT_LENGTH */ - -#if defined(POLARSSL_SSL_TRUNCATED_HMAC) - case TLS_EXT_TRUNCATED_HMAC: - SSL_DEBUG_MSG( 3, ( "found truncated_hmac extension" ) ); - - if( ( ret = ssl_parse_truncated_hmac_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } - - break; -#endif /* POLARSSL_SSL_TRUNCATED_HMAC */ - -#if defined(POLARSSL_SSL_SESSION_TICKETS) - case TLS_EXT_SESSION_TICKET: - SSL_DEBUG_MSG( 3, ( "found session_ticket extension" ) ); - - if( ( ret = ssl_parse_session_ticket_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } - - break; -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - -#if defined(POLARSSL_ECDH_C) || defined(POLARSSL_ECDSA_C) - case TLS_EXT_SUPPORTED_POINT_FORMATS: - SSL_DEBUG_MSG( 3, ( "found supported_point_formats extension" ) ); - - if( ( ret = ssl_parse_supported_point_formats_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } - - break; -#endif /* POLARSSL_ECDH_C || POLARSSL_ECDSA_C */ - -#if defined(POLARSSL_SSL_ALPN) - case TLS_EXT_ALPN: - SSL_DEBUG_MSG( 3, ( "found alpn extension" ) ); - - if( ( ret = ssl_parse_alpn_ext( ssl, ext + 4, ext_size ) ) != 0 ) - return( ret ); - - break; -#endif /* POLARSSL_SSL_ALPN */ - - default: - SSL_DEBUG_MSG( 3, ( "unknown extension found: %d (ignoring)", - ext_id ) ); - } - - ext_len -= 4 + ext_size; - ext += 4 + ext_size; - - if( ext_len > 0 && ext_len < 4 ) - { - SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - } - - /* - * Renegotiation security checks - */ - if( ssl->secure_renegotiation == SSL_LEGACY_RENEGOTIATION && - ssl->allow_legacy_renegotiation == SSL_LEGACY_BREAK_HANDSHAKE ) - { - SSL_DEBUG_MSG( 1, ( "legacy renegotiation, breaking off handshake" ) ); - handshake_failure = 1; - } - else if( ssl->renegotiation == SSL_RENEGOTIATION && - ssl->secure_renegotiation == SSL_SECURE_RENEGOTIATION && - renegotiation_info_seen == 0 ) - { - SSL_DEBUG_MSG( 1, ( "renegotiation_info extension missing (secure)" ) ); - handshake_failure = 1; - } - else if( ssl->renegotiation == SSL_RENEGOTIATION && - ssl->secure_renegotiation == SSL_LEGACY_RENEGOTIATION && - ssl->allow_legacy_renegotiation == SSL_LEGACY_NO_RENEGOTIATION ) - { - SSL_DEBUG_MSG( 1, ( "legacy renegotiation not allowed" ) ); - handshake_failure = 1; - } - else if( ssl->renegotiation == SSL_RENEGOTIATION && - ssl->secure_renegotiation == SSL_LEGACY_RENEGOTIATION && - renegotiation_info_seen == 1 ) - { - SSL_DEBUG_MSG( 1, ( "renegotiation_info extension present (legacy)" ) ); - handshake_failure = 1; - } - - if( handshake_failure == 1 ) - { - if( ( ret = ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); - - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - - SSL_DEBUG_MSG( 2, ( "<= parse server hello" ) ); - - return( 0 ); -} - -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) -static int ssl_parse_server_dh_params( ssl_context *ssl, unsigned char **p, - unsigned char *end ) -{ - int ret = POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE; - - /* - * Ephemeral DH parameters: - * - * struct { - * opaque dh_p<1..2^16-1>; - * opaque dh_g<1..2^16-1>; - * opaque dh_Ys<1..2^16-1>; - * } ServerDHParams; - */ - if( ( ret = dhm_read_params( &ssl->handshake->dhm_ctx, p, end ) ) != 0 ) - { - SSL_DEBUG_RET( 2, ( "dhm_read_params" ), ret ); - return( ret ); - } - - if( ssl->handshake->dhm_ctx.len < 64 || - ssl->handshake->dhm_ctx.len > 512 ) - { - SSL_DEBUG_MSG( 1, ( "bad server key exchange message (DHM length)" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - - SSL_DEBUG_MPI( 3, "DHM: P ", &ssl->handshake->dhm_ctx.P ); - SSL_DEBUG_MPI( 3, "DHM: G ", &ssl->handshake->dhm_ctx.G ); - SSL_DEBUG_MPI( 3, "DHM: GY", &ssl->handshake->dhm_ctx.GY ); - - return( ret ); -} -#endif /* POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) -static int ssl_check_server_ecdh_params( const ssl_context *ssl ) -{ - const ecp_curve_info *curve_info; - - curve_info = ecp_curve_info_from_grp_id( ssl->handshake->ecdh_ctx.grp.id ); - if( curve_info == NULL ) - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - SSL_DEBUG_MSG( 2, ( "ECDH curve: %s", curve_info->name ) ); - -#if defined(POLARSSL_SSL_ECP_SET_CURVES) - if( ! ssl_curve_is_acceptable( ssl, ssl->handshake->ecdh_ctx.grp.id ) ) -#else - if( ssl->handshake->ecdh_ctx.grp.nbits < 163 || - ssl->handshake->ecdh_ctx.grp.nbits > 521 ) -#endif - return( -1 ); - - SSL_DEBUG_ECP( 3, "ECDH: Qp", &ssl->handshake->ecdh_ctx.Qp ); - - return( 0 ); -} -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) -static int ssl_parse_server_ecdh_params( ssl_context *ssl, - unsigned char **p, - unsigned char *end ) -{ - int ret = POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE; - - /* - * Ephemeral ECDH parameters: - * - * struct { - * ECParameters curve_params; - * ECPoint public; - * } ServerECDHParams; - */ - if( ( ret = ecdh_read_params( &ssl->handshake->ecdh_ctx, - (const unsigned char **) p, end ) ) != 0 ) - { - SSL_DEBUG_RET( 1, ( "ecdh_read_params" ), ret ); - return( ret ); - } - - if( ssl_check_server_ecdh_params( ssl ) != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad server key exchange message (ECDHE curve)" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - - return( ret ); -} -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED) -static int ssl_parse_server_psk_hint( ssl_context *ssl, - unsigned char **p, - unsigned char *end ) -{ - int ret = POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE; - size_t len; - ((void) ssl); - - /* - * PSK parameters: - * - * opaque psk_identity_hint<0..2^16-1>; - */ - len = (*p)[0] << 8 | (*p)[1]; - *p += 2; - - if( (*p) + len > end ) - { - SSL_DEBUG_MSG( 1, ( "bad server key exchange message (psk_identity_hint length)" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - - // TODO: Retrieve PSK identity hint and callback to app - // - *p += len; - ret = 0; - - return( ret ); -} -#endif /* POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) -/* - * Generate a pre-master secret and encrypt it with the server's RSA key - */ -static int ssl_write_encrypted_pms( ssl_context *ssl, - size_t offset, size_t *olen, - size_t pms_offset ) -{ - int ret; - size_t len_bytes = ssl->minor_ver == SSL_MINOR_VERSION_0 ? 0 : 2; - unsigned char *p = ssl->handshake->premaster + pms_offset; - - /* - * Generate (part of) the pre-master as - * struct { - * ProtocolVersion client_version; - * opaque random[46]; - * } PreMasterSecret; - */ - p[0] = (unsigned char) ssl->max_major_ver; - p[1] = (unsigned char) ssl->max_minor_ver; - - if( ( ret = ssl->f_rng( ssl->p_rng, p + 2, 46 ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "f_rng", ret ); - return( ret ); - } - - ssl->handshake->pmslen = 48; - - /* - * Now write it out, encrypted - */ - if( ! pk_can_do( &ssl->session_negotiate->peer_cert->pk, - POLARSSL_PK_RSA ) ) - { - SSL_DEBUG_MSG( 1, ( "certificate key type mismatch" ) ); - return( POLARSSL_ERR_SSL_PK_TYPE_MISMATCH ); - } - - if( ( ret = pk_encrypt( &ssl->session_negotiate->peer_cert->pk, - p, ssl->handshake->pmslen, - ssl->out_msg + offset + len_bytes, olen, - SSL_MAX_CONTENT_LEN - offset - len_bytes, - ssl->f_rng, ssl->p_rng ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "rsa_pkcs1_encrypt", ret ); - return( ret ); - } - -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_2) - if( len_bytes == 2 ) - { - ssl->out_msg[offset+0] = (unsigned char)( *olen >> 8 ); - ssl->out_msg[offset+1] = (unsigned char)( *olen ); - *olen += 2; - } -#endif - - return( 0 ); -} -#endif /* POLARSSL_KEY_EXCHANGE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED */ - -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) -static int ssl_parse_signature_algorithm( ssl_context *ssl, - unsigned char **p, - unsigned char *end, - md_type_t *md_alg, - pk_type_t *pk_alg ) -{ - ((void) ssl); - *md_alg = POLARSSL_MD_NONE; - *pk_alg = POLARSSL_PK_NONE; - - /* Only in TLS 1.2 */ - if( ssl->minor_ver != SSL_MINOR_VERSION_3 ) - { - return( 0 ); - } - - if( (*p) + 2 > end ) - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - - /* - * Get hash algorithm - */ - if( ( *md_alg = ssl_md_alg_from_hash( (*p)[0] ) ) == POLARSSL_MD_NONE ) - { - SSL_DEBUG_MSG( 2, ( "Server used unsupported " - "HashAlgorithm %d", *(p)[0] ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - - /* - * Get signature algorithm - */ - if( ( *pk_alg = ssl_pk_alg_from_sig( (*p)[1] ) ) == POLARSSL_PK_NONE ) - { - SSL_DEBUG_MSG( 2, ( "server used unsupported " - "SignatureAlgorithm %d", (*p)[1] ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - - SSL_DEBUG_MSG( 2, ( "Server used SignatureAlgorithm %d", (*p)[1] ) ); - SSL_DEBUG_MSG( 2, ( "Server used HashAlgorithm %d", (*p)[0] ) ); - *p += 2; - - return( 0 ); -} -#endif /* POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */ -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - - -#if defined(POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) -static int ssl_get_ecdh_params_from_cert( ssl_context *ssl ) -{ - int ret; - const ecp_keypair *peer_key; - - if( ! pk_can_do( &ssl->session_negotiate->peer_cert->pk, - POLARSSL_PK_ECKEY ) ) - { - SSL_DEBUG_MSG( 1, ( "server key not ECDH capable" ) ); - return( POLARSSL_ERR_SSL_PK_TYPE_MISMATCH ); - } - - peer_key = pk_ec( ssl->session_negotiate->peer_cert->pk ); - - if( ( ret = ecdh_get_params( &ssl->handshake->ecdh_ctx, peer_key, - POLARSSL_ECDH_THEIRS ) ) != 0 ) - { - SSL_DEBUG_RET( 1, ( "ecdh_get_params" ), ret ); - return( ret ); - } - - if( ssl_check_server_ecdh_params( ssl ) != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad server certificate (ECDH curve)" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE ); - } - - return( ret ); -} -#endif /* POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED) || - POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ - -static int ssl_parse_server_key_exchange( ssl_context *ssl ) -{ - int ret; - const ssl_ciphersuite_t *ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - unsigned char *p, *end; -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) - size_t sig_len, params_len; - unsigned char hash[64]; - md_type_t md_alg = POLARSSL_MD_NONE; - size_t hashlen; - pk_type_t pk_alg = POLARSSL_PK_NONE; -#endif - - SSL_DEBUG_MSG( 2, ( "=> parse server key exchange" ) ); - -#if defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA ) - { - SSL_DEBUG_MSG( 2, ( "<= skip parse server key exchange" ) ); - ssl->state++; - return( 0 ); - } - ((void) p); - ((void) end); -#endif - -#if defined(POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDH_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDH_ECDSA ) - { - if( ( ret = ssl_get_ecdh_params_from_cert( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_get_ecdh_params_from_cert", ret ); - return( ret ); - } - - SSL_DEBUG_MSG( 2, ( "<= skip parse server key exchange" ) ); - ssl->state++; - return( 0 ); - } - ((void) p); - ((void) end); -#endif /* POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ - - if( ( ret = ssl_read_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_read_record", ret ); - return( ret ); - } - - if( ssl->in_msgtype != SSL_MSG_HANDSHAKE ) - { - SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE ); - } - - /* - * ServerKeyExchange may be skipped with PSK and RSA-PSK when the server - * doesn't use a psk_identity_hint - */ - if( ssl->in_msg[0] != SSL_HS_SERVER_KEY_EXCHANGE ) - { - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK ) - { - ssl->record_read = 1; - goto exit; - } - - SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE ); - } - - p = ssl->in_msg + 4; - end = ssl->in_msg + ssl->in_hslen; - SSL_DEBUG_BUF( 3, "server key exchange", p, ssl->in_hslen - 4 ); - -#if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK ) - { - if( ssl_parse_server_psk_hint( ssl, &p, end ) != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - } /* FALLTROUGH */ -#endif /* POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_PSK_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK ) - ; /* nothing more to do */ - else -#endif /* POLARSSL_KEY_EXCHANGE_PSK_ENABLED || - POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK ) - { - if( ssl_parse_server_dh_params( ssl, &p, end ) != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - } - else -#endif /* POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA ) - { - if( ssl_parse_server_ecdh_params( ssl, &p, end ) != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - } - else -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA ) - { - params_len = p - ( ssl->in_msg + 4 ); - - /* - * Handle the digitally-signed structure - */ -#if defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == SSL_MINOR_VERSION_3 ) - { - if( ssl_parse_signature_algorithm( ssl, &p, end, - &md_alg, &pk_alg ) != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - - if( pk_alg != ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info ) ) - { - SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - } - else -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_1) - if( ssl->minor_ver < SSL_MINOR_VERSION_3 ) - { - pk_alg = ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info ); - - /* Default hash for ECDSA is SHA-1 */ - if( pk_alg == POLARSSL_PK_ECDSA && md_alg == POLARSSL_MD_NONE ) - md_alg = POLARSSL_MD_SHA1; - } - else -#endif - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - /* - * Read signature - */ - sig_len = ( p[0] << 8 ) | p[1]; - p += 2; - - if( end != p + sig_len ) - { - SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - - SSL_DEBUG_BUF( 3, "signature", p, sig_len ); - - /* - * Compute the hash that has been signed - */ -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_1) - if( md_alg == POLARSSL_MD_NONE ) - { - md5_context md5; - sha1_context sha1; - - md5_init( &md5 ); - sha1_init( &sha1 ); - - hashlen = 36; - - /* - * digitally-signed struct { - * opaque md5_hash[16]; - * opaque sha_hash[20]; - * }; - * - * md5_hash - * MD5(ClientHello.random + ServerHello.random - * + ServerParams); - * sha_hash - * SHA(ClientHello.random + ServerHello.random - * + ServerParams); - */ - md5_starts( &md5 ); - md5_update( &md5, ssl->handshake->randbytes, 64 ); - md5_update( &md5, ssl->in_msg + 4, params_len ); - md5_finish( &md5, hash ); - - sha1_starts( &sha1 ); - sha1_update( &sha1, ssl->handshake->randbytes, 64 ); - sha1_update( &sha1, ssl->in_msg + 4, params_len ); - sha1_finish( &sha1, hash + 16 ); - - md5_free( &md5 ); - sha1_free( &sha1 ); - } - else -#endif /* POLARSSL_SSL_PROTO_SSL3 || POLARSSL_SSL_PROTO_TLS1 || \ - POLARSSL_SSL_PROTO_TLS1_1 */ -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_2) - if( md_alg != POLARSSL_MD_NONE ) - { - md_context_t ctx; - - md_init( &ctx ); - - /* Info from md_alg will be used instead */ - hashlen = 0; - - /* - * digitally-signed struct { - * opaque client_random[32]; - * opaque server_random[32]; - * ServerDHParams params; - * }; - */ - if( ( ret = md_init_ctx( &ctx, - md_info_from_type( md_alg ) ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "md_init_ctx", ret ); - return( ret ); - } - - md_starts( &ctx ); - md_update( &ctx, ssl->handshake->randbytes, 64 ); - md_update( &ctx, ssl->in_msg + 4, params_len ); - md_finish( &ctx, hash ); - md_free( &ctx ); - } - else -#endif /* POLARSSL_SSL_PROTO_TLS1 || POLARSSL_SSL_PROTO_TLS1_1 || \ - POLARSSL_SSL_PROTO_TLS1_2 */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - SSL_DEBUG_BUF( 3, "parameters hash", hash, hashlen != 0 ? hashlen : - (unsigned int) ( md_info_from_type( md_alg ) )->size ); - - /* - * Verify signature - */ - if( ! pk_can_do( &ssl->session_negotiate->peer_cert->pk, pk_alg ) ) - { - SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( POLARSSL_ERR_SSL_PK_TYPE_MISMATCH ); - } - - if( ( ret = pk_verify( &ssl->session_negotiate->peer_cert->pk, - md_alg, hash, hashlen, p, sig_len ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "pk_verify", ret ); - return( ret ); - } - } -#endif /* POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */ - -exit: - ssl->state++; - - SSL_DEBUG_MSG( 2, ( "<= parse server key exchange" ) ); - - return( 0 ); -} - -#if !defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) -static int ssl_parse_certificate_request( ssl_context *ssl ) -{ - const ssl_ciphersuite_t *ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> parse certificate request" ) ); - - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK ) - { - SSL_DEBUG_MSG( 2, ( "<= skip parse certificate request" ) ); - ssl->state++; - return( 0 ); - } - - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); -} -#else -static int ssl_parse_certificate_request( ssl_context *ssl ) -{ - int ret; - unsigned char *buf, *p; - size_t n = 0, m = 0; - size_t cert_type_len = 0, dn_len = 0; - const ssl_ciphersuite_t *ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> parse certificate request" ) ); - - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK ) - { - SSL_DEBUG_MSG( 2, ( "<= skip parse certificate request" ) ); - ssl->state++; - return( 0 ); - } - - /* - * 0 . 0 handshake type - * 1 . 3 handshake length - * 4 . 4 cert type count - * 5 .. m-1 cert types - * m .. m+1 sig alg length (TLS 1.2 only) - * m+1 .. n-1 SignatureAndHashAlgorithms (TLS 1.2 only) - * n .. n+1 length of all DNs - * n+2 .. n+3 length of DN 1 - * n+4 .. ... Distinguished Name #1 - * ... .. ... length of DN 2, etc. - */ - if( ssl->record_read == 0 ) - { - if( ( ret = ssl_read_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_read_record", ret ); - return( ret ); - } - - if( ssl->in_msgtype != SSL_MSG_HANDSHAKE ) - { - SSL_DEBUG_MSG( 1, ( "bad certificate request message" ) ); - return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE ); - } - - ssl->record_read = 1; - } - - ssl->client_auth = 0; - ssl->state++; - - if( ssl->in_msg[0] == SSL_HS_CERTIFICATE_REQUEST ) - ssl->client_auth++; - - SSL_DEBUG_MSG( 3, ( "got %s certificate request", - ssl->client_auth ? "a" : "no" ) ); - - if( ssl->client_auth == 0 ) - goto exit; - - ssl->record_read = 0; - - // TODO: handshake_failure alert for an anonymous server to request - // client authentication - - buf = ssl->in_msg; - - // Retrieve cert types - // - cert_type_len = buf[4]; - n = cert_type_len; - - if( ssl->in_hslen < 6 + n ) - { - SSL_DEBUG_MSG( 1, ( "bad certificate request message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); - } - - p = buf + 5; - while( cert_type_len > 0 ) - { -#if defined(POLARSSL_RSA_C) - if( *p == SSL_CERT_TYPE_RSA_SIGN && - pk_can_do( ssl_own_key( ssl ), POLARSSL_PK_RSA ) ) - { - ssl->handshake->cert_type = SSL_CERT_TYPE_RSA_SIGN; - break; - } - else -#endif -#if defined(POLARSSL_ECDSA_C) - if( *p == SSL_CERT_TYPE_ECDSA_SIGN && - pk_can_do( ssl_own_key( ssl ), POLARSSL_PK_ECDSA ) ) - { - ssl->handshake->cert_type = SSL_CERT_TYPE_ECDSA_SIGN; - break; - } - else -#endif - { - ; /* Unsupported cert type, ignore */ - } - - cert_type_len--; - p++; - } - -/* - Note by Owen: - Test with Hostapd internal TLS, find that it didn't put the SignatureAndHashAlgorithm field -*/ -#if defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == SSL_MINOR_VERSION_3 ) - { - /* Ignored, see comments about hash in write_certificate_verify */ - // TODO: should check the signature part against our pk_key though - size_t sig_alg_len = ( ( buf[5 + n] << 8 ) - | ( buf[6 + n] ) ); - - p = buf + 7 + n; - m += 2; - n += sig_alg_len; - - if( ssl->in_hslen < 6 + n ) - { - SSL_DEBUG_MSG( 1, ( "bad certificate request message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); - } - } -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - - /* Ignore certificate_authorities, we only have one cert anyway */ - // TODO: should not send cert if no CA matches - dn_len = ( ( buf[5 + m + n] << 8 ) - | ( buf[6 + m + n] ) ); - - n += dn_len; - if( ssl->in_hslen != 7 + m + n ) - { - SSL_DEBUG_MSG( 1, ( "bad certificate request message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); - } - -exit: - SSL_DEBUG_MSG( 2, ( "<= parse certificate request" ) ); - - return( 0 ); -} -#endif /* !POLARSSL_KEY_EXCHANGE_RSA_ENABLED && - !POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED && - !POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED && - !POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */ - -static int ssl_parse_server_hello_done( ssl_context *ssl ) -{ - int ret; - - SSL_DEBUG_MSG( 2, ( "=> parse server hello done" ) ); - - if( ssl->record_read == 0 ) - { - if( ( ret = ssl_read_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_read_record", ret ); - return( ret ); - } - - if( ssl->in_msgtype != SSL_MSG_HANDSHAKE ) - { - SSL_DEBUG_MSG( 1, ( "bad server hello done message" ) ); - return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE ); - } - } - ssl->record_read = 0; - - if( ssl->in_hslen != 4 || - ssl->in_msg[0] != SSL_HS_SERVER_HELLO_DONE ) - { - SSL_DEBUG_MSG( 1, ( "bad server hello done message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO_DONE ); - } - - ssl->state++; - - SSL_DEBUG_MSG( 2, ( "<= parse server hello done" ) ); - - return( 0 ); -} - -static int ssl_write_client_key_exchange( ssl_context *ssl ) -{ - int ret; - size_t i, n; - const ssl_ciphersuite_t *ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> write client key exchange" ) ); - -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_RSA ) - { - /* - * DHM key exchange -- send G^X mod P - */ - n = ssl->handshake->dhm_ctx.len; - - ssl->out_msg[4] = (unsigned char)( n >> 8 ); - ssl->out_msg[5] = (unsigned char)( n ); - i = 6; - - ret = dhm_make_public( &ssl->handshake->dhm_ctx, - (int) mpi_size( &ssl->handshake->dhm_ctx.P ), - &ssl->out_msg[i], n, - ssl->f_rng, ssl->p_rng ); - if( ret != 0 ) - { - SSL_DEBUG_RET( 1, "dhm_make_public", ret ); - return( ret ); - } - - SSL_DEBUG_MPI( 3, "DHM: X ", &ssl->handshake->dhm_ctx.X ); - SSL_DEBUG_MPI( 3, "DHM: GX", &ssl->handshake->dhm_ctx.GX ); - - ssl->handshake->pmslen = POLARSSL_PREMASTER_SIZE; - - if( ( ret = dhm_calc_secret( &ssl->handshake->dhm_ctx, - ssl->handshake->premaster, - &ssl->handshake->pmslen, - ssl->f_rng, ssl->p_rng ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "dhm_calc_secret", ret ); - return( ret ); - } - - SSL_DEBUG_MPI( 3, "DHM: K ", &ssl->handshake->dhm_ctx.K ); - } - else -#endif /* POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDH_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDH_ECDSA ) - { - /* - * ECDH key exchange -- send client public value - */ - i = 4; - - ret = ecdh_make_public( &ssl->handshake->ecdh_ctx, - &n, - &ssl->out_msg[i], 1000, - ssl->f_rng, ssl->p_rng ); - if( ret != 0 ) - { - SSL_DEBUG_RET( 1, "ecdh_make_public", ret ); - return( ret ); - } - - SSL_DEBUG_ECP( 3, "ECDH: Q", &ssl->handshake->ecdh_ctx.Q ); - - if( ( ret = ecdh_calc_secret( &ssl->handshake->ecdh_ctx, - &ssl->handshake->pmslen, - ssl->handshake->premaster, - POLARSSL_MPI_MAX_SIZE, - ssl->f_rng, ssl->p_rng ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ecdh_calc_secret", ret ); - return( ret ); - } - - SSL_DEBUG_MPI( 3, "ECDH: z", &ssl->handshake->ecdh_ctx.z ); - } - else -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK ) - { - /* - * opaque psk_identity<0..2^16-1>; - */ - if( ssl->psk == NULL || ssl->psk_identity == NULL ) - return( POLARSSL_ERR_SSL_PRIVATE_KEY_REQUIRED ); - - i = 4; - n = ssl->psk_identity_len; - ssl->out_msg[i++] = (unsigned char)( n >> 8 ); - ssl->out_msg[i++] = (unsigned char)( n ); - - memcpy( ssl->out_msg + i, ssl->psk_identity, ssl->psk_identity_len ); - i += ssl->psk_identity_len; - -#if defined(POLARSSL_KEY_EXCHANGE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK ) - { - n = 0; - } - else -#endif -#if defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK ) - { - if( ( ret = ssl_write_encrypted_pms( ssl, i, &n, 2 ) ) != 0 ) - return( ret ); - } - else -#endif -#if defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK ) - { - /* - * ClientDiffieHellmanPublic public (DHM send G^X mod P) - */ - n = ssl->handshake->dhm_ctx.len; - ssl->out_msg[i++] = (unsigned char)( n >> 8 ); - ssl->out_msg[i++] = (unsigned char)( n ); - - ret = dhm_make_public( &ssl->handshake->dhm_ctx, - (int) mpi_size( &ssl->handshake->dhm_ctx.P ), - &ssl->out_msg[i], n, - ssl->f_rng, ssl->p_rng ); - if( ret != 0 ) - { - SSL_DEBUG_RET( 1, "dhm_make_public", ret ); - return( ret ); - } - } - else -#endif /* POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK ) - { - /* - * ClientECDiffieHellmanPublic public; - */ - ret = ecdh_make_public( &ssl->handshake->ecdh_ctx, &n, - &ssl->out_msg[i], SSL_MAX_CONTENT_LEN - i, - ssl->f_rng, ssl->p_rng ); - if( ret != 0 ) - { - SSL_DEBUG_RET( 1, "ecdh_make_public", ret ); - return( ret ); - } - - SSL_DEBUG_ECP( 3, "ECDH: Q", &ssl->handshake->ecdh_ctx.Q ); - } - else -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - if( ( ret = ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else -#endif /* POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA ) - { - i = 4; - if( ( ret = ssl_write_encrypted_pms( ssl, i, &n, 0 ) ) != 0 ) - return( ret ); - } - else -#endif /* POLARSSL_KEY_EXCHANGE_RSA_ENABLED */ - { - ((void) ciphersuite_info); - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - if( ( ret = ssl_derive_keys( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_derive_keys", ret ); - return( ret ); - } - - ssl->out_msglen = i + n; - ssl->out_msgtype = SSL_MSG_HANDSHAKE; - ssl->out_msg[0] = SSL_HS_CLIENT_KEY_EXCHANGE; - - ssl->state++; - - if( ( ret = ssl_write_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_write_record", ret ); - return( ret ); - } - - SSL_DEBUG_MSG( 2, ( "<= write client key exchange" ) ); - - return( 0 ); -} - -#if !defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) -static int ssl_write_certificate_verify( ssl_context *ssl ) -{ - const ssl_ciphersuite_t *ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> write certificate verify" ) ); - - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK ) - { - SSL_DEBUG_MSG( 2, ( "<= skip write certificate verify" ) ); - ssl->state++; - return( 0 ); - } - - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); -} -#else -static int ssl_write_certificate_verify( ssl_context *ssl ) -{ - int ret = POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE; - const ssl_ciphersuite_t *ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - size_t n = 0, offset = 0; - unsigned char hash[48]; - unsigned char *hash_start = hash; - md_type_t md_alg = POLARSSL_MD_NONE; - unsigned int hashlen; - - SSL_DEBUG_MSG( 2, ( "=> write certificate verify" ) ); - - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK ) - { - SSL_DEBUG_MSG( 2, ( "<= skip write certificate verify" ) ); - ssl->state++; - return( 0 ); - } - - if( ssl->client_auth == 0 || ssl_own_cert( ssl ) == NULL ) - { - SSL_DEBUG_MSG( 2, ( "<= skip write certificate verify" ) ); - ssl->state++; - return( 0 ); - } - - if( ssl_own_key( ssl ) == NULL ) - { - SSL_DEBUG_MSG( 1, ( "got no private key" ) ); - return( POLARSSL_ERR_SSL_PRIVATE_KEY_REQUIRED ); - } - - /* - * Make an RSA signature of the handshake digests - */ - ssl->handshake->calc_verify( ssl, hash ); - -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_1) - if( ssl->minor_ver != SSL_MINOR_VERSION_3 ) - { - /* - * digitally-signed struct { - * opaque md5_hash[16]; - * opaque sha_hash[20]; - * }; - * - * md5_hash - * MD5(handshake_messages); - * - * sha_hash - * SHA(handshake_messages); - */ - hashlen = 36; - md_alg = POLARSSL_MD_NONE; - - /* - * For ECDSA, default hash is SHA-1 only - */ - if( pk_can_do( ssl_own_key( ssl ), POLARSSL_PK_ECDSA ) ) - { - hash_start += 16; - hashlen -= 16; - md_alg = POLARSSL_MD_SHA1; - } - } - else -#endif /* POLARSSL_SSL_PROTO_SSL3 || POLARSSL_SSL_PROTO_TLS1 || \ - POLARSSL_SSL_PROTO_TLS1_1 */ -#if defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == SSL_MINOR_VERSION_3 ) - { - /* - * digitally-signed struct { - * opaque handshake_messages[handshake_messages_length]; - * }; - * - * Taking shortcut here. We assume that the server always allows the - * PRF Hash function and has sent it in the allowed signature - * algorithms list received in the Certificate Request message. - * - * Until we encounter a server that does not, we will take this - * shortcut. - * - * Reason: Otherwise we should have running hashes for SHA512 and SHA224 - * in order to satisfy 'weird' needs from the server side. - */ - if( ssl->transform_negotiate->ciphersuite_info->mac == - POLARSSL_MD_SHA384 ) - { - md_alg = POLARSSL_MD_SHA384; - ssl->out_msg[4] = SSL_HASH_SHA384; - } - else - { - md_alg = POLARSSL_MD_SHA256; - ssl->out_msg[4] = SSL_HASH_SHA256; - } - ssl->out_msg[5] = ssl_sig_from_pk( ssl_own_key( ssl ) ); - - /* Info from md_alg will be used instead */ - hashlen = 0; - offset = 2; - } - else -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - if( ( ret = pk_sign( ssl_own_key( ssl ), md_alg, hash_start, hashlen, - ssl->out_msg + 6 + offset, &n, - ssl->f_rng, ssl->p_rng ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "pk_sign", ret ); - return( ret ); - } - - ssl->out_msg[4 + offset] = (unsigned char)( n >> 8 ); - ssl->out_msg[5 + offset] = (unsigned char)( n ); - - ssl->out_msglen = 6 + n + offset; - ssl->out_msgtype = SSL_MSG_HANDSHAKE; - ssl->out_msg[0] = SSL_HS_CERTIFICATE_VERIFY; - - ssl->state++; - - if( ( ret = ssl_write_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_write_record", ret ); - return( ret ); - } - - SSL_DEBUG_MSG( 2, ( "<= write certificate verify" ) ); - - return( ret ); -} -#endif /* !POLARSSL_KEY_EXCHANGE_RSA_ENABLED && - !POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED && - !POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED */ - -#if defined(POLARSSL_SSL_SESSION_TICKETS) -static int ssl_parse_new_session_ticket( ssl_context *ssl ) -{ - int ret; - uint32_t lifetime; - size_t ticket_len; - unsigned char *ticket; - - SSL_DEBUG_MSG( 2, ( "=> parse new session ticket" ) ); - - if( ( ret = ssl_read_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_read_record", ret ); - return( ret ); - } - - if( ssl->in_msgtype != SSL_MSG_HANDSHAKE ) - { - SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) ); - return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE ); - } - - /* - * struct { - * uint32 ticket_lifetime_hint; - * opaque ticket<0..2^16-1>; - * } NewSessionTicket; - * - * 0 . 0 handshake message type - * 1 . 3 handshake message length - * 4 . 7 ticket_lifetime_hint - * 8 . 9 ticket_len (n) - * 10 . 9+n ticket content - */ - if( ssl->in_msg[0] != SSL_HS_NEW_SESSION_TICKET || - ssl->in_hslen < 10 ) - { - SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_NEW_SESSION_TICKET ); - } - - lifetime = ( ssl->in_msg[4] << 24 ) | ( ssl->in_msg[5] << 16 ) | - ( ssl->in_msg[6] << 8 ) | ( ssl->in_msg[7] ); - - ticket_len = ( ssl->in_msg[8] << 8 ) | ( ssl->in_msg[9] ); - - if( ticket_len + 10 != ssl->in_hslen ) - { - SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_NEW_SESSION_TICKET ); - } - - SSL_DEBUG_MSG( 3, ( "ticket length: %d", ticket_len ) ); - - /* We're not waiting for a NewSessionTicket message any more */ - ssl->handshake->new_session_ticket = 0; - - /* - * Zero-length ticket means the server changed his mind and doesn't want - * to send a ticket after all, so just forget it - */ - if( ticket_len == 0 ) - return( 0 ); - - polarssl_zeroize( ssl->session_negotiate->ticket, - ssl->session_negotiate->ticket_len ); - polarssl_free( ssl->session_negotiate->ticket ); - ssl->session_negotiate->ticket = NULL; - ssl->session_negotiate->ticket_len = 0; - - if( ( ticket = polarssl_malloc( ticket_len ) ) == NULL ) - { - SSL_DEBUG_MSG( 1, ( "ticket malloc failed" ) ); - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - } - - memcpy( ticket, ssl->in_msg + 10, ticket_len ); - - ssl->session_negotiate->ticket = ticket; - ssl->session_negotiate->ticket_len = ticket_len; - ssl->session_negotiate->ticket_lifetime = lifetime; - - /* - * RFC 5077 section 3.4: - * "If the client receives a session ticket from the server, then it - * discards any Session ID that was sent in the ServerHello." - */ - SSL_DEBUG_MSG( 3, ( "ticket in use, discarding session id" ) ); - ssl->session_negotiate->length = 0; - - SSL_DEBUG_MSG( 2, ( "<= parse new session ticket" ) ); - - return( 0 ); -} -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - -/* - * SSL handshake -- client side -- single step - */ -int ssl_handshake_client_step( ssl_context *ssl ) -{ - int ret = 0; - - if( ssl->state == SSL_HANDSHAKE_OVER ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - SSL_DEBUG_MSG( 2, ( "client state: %d", ssl->state ) ); - - if( ( ret = ssl_flush_output( ssl ) ) != 0 ) - return( ret ); - - switch( ssl->state ) - { - case SSL_HELLO_REQUEST: - ssl->state = SSL_CLIENT_HELLO; - break; - - /* - * ==> ClientHello - */ - case SSL_CLIENT_HELLO: - ret = ssl_write_client_hello( ssl ); - break; - - /* - * <== ServerHello - * Certificate - * ( ServerKeyExchange ) - * ( CertificateRequest ) - * ServerHelloDone - */ - case SSL_SERVER_HELLO: - ret = ssl_parse_server_hello( ssl ); - break; - - case SSL_SERVER_CERTIFICATE: - ret = ssl_parse_certificate( ssl ); - break; - - case SSL_SERVER_KEY_EXCHANGE: - ret = ssl_parse_server_key_exchange( ssl ); - break; - - case SSL_CERTIFICATE_REQUEST: - ret = ssl_parse_certificate_request( ssl ); - break; - - case SSL_SERVER_HELLO_DONE: - ret = ssl_parse_server_hello_done( ssl ); - break; - - /* - * ==> ( Certificate/Alert ) - * ClientKeyExchange - * ( CertificateVerify ) - * ChangeCipherSpec - * Finished - */ - case SSL_CLIENT_CERTIFICATE: - ret = ssl_write_certificate( ssl ); - break; - - case SSL_CLIENT_KEY_EXCHANGE: - ret = ssl_write_client_key_exchange( ssl ); - break; - - case SSL_CERTIFICATE_VERIFY: - ret = ssl_write_certificate_verify( ssl ); - break; - - case SSL_CLIENT_CHANGE_CIPHER_SPEC: - ret = ssl_write_change_cipher_spec( ssl ); - break; - - case SSL_CLIENT_FINISHED: - ret = ssl_write_finished( ssl ); - break; - - /* - * <== ( NewSessionTicket ) - * ChangeCipherSpec - * Finished - */ - case SSL_SERVER_CHANGE_CIPHER_SPEC: -#if defined(POLARSSL_SSL_SESSION_TICKETS) - if( ssl->handshake->new_session_ticket != 0 ) - ret = ssl_parse_new_session_ticket( ssl ); - else -#endif - ret = ssl_parse_change_cipher_spec( ssl ); - break; - - case SSL_SERVER_FINISHED: - ret = ssl_parse_finished( ssl ); - break; - - case SSL_FLUSH_BUFFERS: - SSL_DEBUG_MSG( 2, ( "handshake: done" ) ); - ssl->state = SSL_HANDSHAKE_WRAPUP; - break; - - case SSL_HANDSHAKE_WRAPUP: - ssl_handshake_wrapup( ssl ); - break; - - default: - SSL_DEBUG_MSG( 1, ( "invalid state %d", ssl->state ) ); - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - } - - return( ret ); -} -#endif /* POLARSSL_SSL_CLI_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_srv.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_srv.c deleted file mode 100644 index 25be988..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_srv.c +++ /dev/null @@ -1,3269 +0,0 @@ -/* - * SSLv3/TLSv1 server-side functions - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_SSL_SRV_C) - -#include "polarssl/debug.h" -#include "polarssl/ssl.h" -#if defined(POLARSSL_ECP_C) -#include "polarssl/ecp.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include -#include - -#if defined(POLARSSL_HAVE_TIME) -#include -#endif - -#if defined(POLARSSL_SSL_SESSION_TICKETS) -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * Serialize a session in the following format: - * 0 . n-1 session structure, n = sizeof(ssl_session) - * n . n+2 peer_cert length = m (0 if no certificate) - * n+3 . n+2+m peer cert ASN.1 - * - * Assumes ticket is NULL (always true on server side). - */ -static int ssl_save_session( const ssl_session *session, - unsigned char *buf, size_t buf_len, - size_t *olen ) -{ - unsigned char *p = buf; - size_t left = buf_len; -#if defined(POLARSSL_X509_CRT_PARSE_C) - size_t cert_len; -#endif /* POLARSSL_X509_CRT_PARSE_C */ - - if( left < sizeof( ssl_session ) ) - return( -1 ); - - memcpy( p, session, sizeof( ssl_session ) ); - p += sizeof( ssl_session ); - left -= sizeof( ssl_session ); - -#if defined(POLARSSL_X509_CRT_PARSE_C) - if( session->peer_cert == NULL ) - cert_len = 0; - else - cert_len = session->peer_cert->raw.len; - - if( left < 3 + cert_len ) - return( -1 ); - - *p++ = (unsigned char)( cert_len >> 16 & 0xFF ); - *p++ = (unsigned char)( cert_len >> 8 & 0xFF ); - *p++ = (unsigned char)( cert_len & 0xFF ); - - if( session->peer_cert != NULL ) - memcpy( p, session->peer_cert->raw.p, cert_len ); - - p += cert_len; -#endif /* POLARSSL_X509_CRT_PARSE_C */ - - *olen = p - buf; - - return( 0 ); -} - -/* - * Unserialise session, see ssl_save_session() - */ -static int ssl_load_session( ssl_session *session, - const unsigned char *buf, size_t len ) -{ - const unsigned char *p = buf; - const unsigned char * const end = buf + len; -#if defined(POLARSSL_X509_CRT_PARSE_C) - size_t cert_len; -#endif /* POLARSSL_X509_CRT_PARSE_C */ - - if( p + sizeof( ssl_session ) > end ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - memcpy( session, p, sizeof( ssl_session ) ); - p += sizeof( ssl_session ); - -#if defined(POLARSSL_X509_CRT_PARSE_C) - if( p + 3 > end ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - cert_len = ( p[0] << 16 ) | ( p[1] << 8 ) | p[2]; - p += 3; - - if( cert_len == 0 ) - { - session->peer_cert = NULL; - } - else - { - int ret; - - if( p + cert_len > end ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - session->peer_cert = polarssl_malloc( sizeof( x509_crt ) ); - - if( session->peer_cert == NULL ) - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - - x509_crt_init( session->peer_cert ); - - if( ( ret = x509_crt_parse_der( session->peer_cert, - p, cert_len ) ) != 0 ) - { - x509_crt_free( session->peer_cert ); - polarssl_free( session->peer_cert ); - session->peer_cert = NULL; - return( ret ); - } - - p += cert_len; - } -#endif /* POLARSSL_X509_CRT_PARSE_C */ - - if( p != end ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - return( 0 ); -} - -/* - * Create session ticket, secured as recommended in RFC 5077 section 4: - * - * struct { - * opaque key_name[16]; - * opaque iv[16]; - * opaque encrypted_state<0..2^16-1>; - * opaque mac[32]; - * } ticket; - * - * (the internal state structure differs, however). - */ -static int ssl_write_ticket( ssl_context *ssl, size_t *tlen ) -{ - int ret; - unsigned char * const start = ssl->out_msg + 10; - unsigned char *p = start; - unsigned char *state; - unsigned char iv[16]; - size_t clear_len, enc_len, pad_len, i; - - *tlen = 0; - - if( ssl->ticket_keys == NULL ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - /* Write key name */ - memcpy( p, ssl->ticket_keys->key_name, 16 ); - p += 16; - - /* Generate and write IV (with a copy for aes_crypt) */ - if( ( ret = ssl->f_rng( ssl->p_rng, p, 16 ) ) != 0 ) - return( ret ); - memcpy( iv, p, 16 ); - p += 16; - - /* - * Dump session state - * - * After the session state itself, we still need room for 16 bytes of - * padding and 32 bytes of MAC, so there's only so much room left - */ - state = p + 2; - if( ssl_save_session( ssl->session_negotiate, state, - SSL_MAX_CONTENT_LEN - ( state - ssl->out_ctr ) - 48, - &clear_len ) != 0 ) - { - return( POLARSSL_ERR_SSL_CERTIFICATE_TOO_LARGE ); - } - SSL_DEBUG_BUF( 3, "session ticket cleartext", state, clear_len ); - - /* Apply PKCS padding */ - pad_len = 16 - clear_len % 16; - enc_len = clear_len + pad_len; - for( i = clear_len; i < enc_len; i++ ) - state[i] = (unsigned char) pad_len; - - /* Encrypt */ - if( ( ret = aes_crypt_cbc( &ssl->ticket_keys->enc, AES_ENCRYPT, - enc_len, iv, state, state ) ) != 0 ) - { - return( ret ); - } - - /* Write length */ - *p++ = (unsigned char)( ( enc_len >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( enc_len ) & 0xFF ); - p = state + enc_len; - - /* Compute and write MAC( key_name + iv + enc_state_len + enc_state ) */ - sha256_hmac( ssl->ticket_keys->mac_key, 16, start, p - start, p, 0 ); - p += 32; - - *tlen = p - start; - - SSL_DEBUG_BUF( 3, "session ticket structure", start, *tlen ); - - return( 0 ); -} - -/* - * Load session ticket (see ssl_write_ticket for structure) - */ -static int ssl_parse_ticket( ssl_context *ssl, - unsigned char *buf, - size_t len ) -{ - int ret; - ssl_session session; - unsigned char *key_name = buf; - unsigned char *iv = buf + 16; - unsigned char *enc_len_p = iv + 16; - unsigned char *ticket = enc_len_p + 2; - unsigned char *mac; - unsigned char computed_mac[32]; - size_t enc_len, clear_len, i; - unsigned char pad_len, diff; - - SSL_DEBUG_BUF( 3, "session ticket structure", buf, len ); - - if( len < 34 || ssl->ticket_keys == NULL ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - enc_len = ( enc_len_p[0] << 8 ) | enc_len_p[1]; - mac = ticket + enc_len; - - if( len != enc_len + 66 ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - /* Check name, in constant time though it's not a big secret */ - diff = 0; - for( i = 0; i < 16; i++ ) - diff |= key_name[i] ^ ssl->ticket_keys->key_name[i]; - /* don't return yet, check the MAC anyway */ - - /* Check mac, with constant-time buffer comparison */ - sha256_hmac( ssl->ticket_keys->mac_key, 16, buf, len - 32, - computed_mac, 0 ); - - for( i = 0; i < 32; i++ ) - diff |= mac[i] ^ computed_mac[i]; - - /* Now return if ticket is not authentic, since we want to avoid - * decrypting arbitrary attacker-chosen data */ - if( diff != 0 ) - return( POLARSSL_ERR_SSL_INVALID_MAC ); - - /* Decrypt */ - if( ( ret = aes_crypt_cbc( &ssl->ticket_keys->dec, AES_DECRYPT, - enc_len, iv, ticket, ticket ) ) != 0 ) - { - return( ret ); - } - - /* Check PKCS padding */ - pad_len = ticket[enc_len - 1]; - - ret = 0; - for( i = 2; i < pad_len; i++ ) - if( ticket[enc_len - i] != pad_len ) - ret = POLARSSL_ERR_SSL_BAD_INPUT_DATA; - if( ret != 0 ) - return( ret ); - - clear_len = enc_len - pad_len; - - SSL_DEBUG_BUF( 3, "session ticket cleartext", ticket, clear_len ); - - /* Actually load session */ - if( ( ret = ssl_load_session( &session, ticket, clear_len ) ) != 0 ) - { - SSL_DEBUG_MSG( 1, ( "failed to parse ticket content" ) ); - ssl_session_free( &session ); - return( ret ); - } - -#if defined(POLARSSL_HAVE_TIME) - /* Check if still valid */ - if( (int) ( time( NULL) - session.start ) > ssl->ticket_lifetime ) - { - SSL_DEBUG_MSG( 1, ( "session ticket expired" ) ); - ssl_session_free( &session ); - return( POLARSSL_ERR_SSL_SESSION_TICKET_EXPIRED ); - } -#endif - - /* - * Keep the session ID sent by the client, since we MUST send it back to - * inform him we're accepting the ticket (RFC 5077 section 3.4) - */ - session.length = ssl->session_negotiate->length; - memcpy( &session.id, ssl->session_negotiate->id, session.length ); - - ssl_session_free( ssl->session_negotiate ); - memcpy( ssl->session_negotiate, &session, sizeof( ssl_session ) ); - - /* Zeroize instead of free as we copied the content */ - polarssl_zeroize( &session, sizeof( ssl_session ) ); - - return( 0 ); -} -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - -#if defined(POLARSSL_SSL_SERVER_NAME_INDICATION) -/* - * Wrapper around f_sni, allowing use of ssl_set_own_cert() but - * making it act on ssl->hanshake->sni_key_cert instead. - */ -static int ssl_sni_wrapper( ssl_context *ssl, - const unsigned char* name, size_t len ) -{ - int ret; - ssl_key_cert *key_cert_ori = ssl->key_cert; - - ssl->key_cert = NULL; - ret = ssl->f_sni( ssl->p_sni, ssl, name, len ); - ssl->handshake->sni_key_cert = ssl->key_cert; - - ssl->key_cert = key_cert_ori; - - return( ret ); -} - -static int ssl_parse_servername_ext( ssl_context *ssl, - const unsigned char *buf, - size_t len ) -{ - int ret; - size_t servername_list_size, hostname_len; - const unsigned char *p; - - SSL_DEBUG_MSG( 3, ( "parse ServerName extension" ) ); - - servername_list_size = ( ( buf[0] << 8 ) | ( buf[1] ) ); - if( servername_list_size + 2 != len ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - p = buf + 2; - while( servername_list_size > 0 ) - { - hostname_len = ( ( p[1] << 8 ) | p[2] ); - if( hostname_len + 3 > servername_list_size ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - if( p[0] == TLS_EXT_SERVERNAME_HOSTNAME ) - { - ret = ssl_sni_wrapper( ssl, p + 3, hostname_len ); - if( ret != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_sni_wrapper", ret ); - ssl_send_alert_message( ssl, SSL_ALERT_LEVEL_FATAL, - SSL_ALERT_MSG_UNRECOGNIZED_NAME ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - return( 0 ); - } - - servername_list_size -= hostname_len + 3; - p += hostname_len + 3; - } - - if( servername_list_size != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - return( 0 ); -} -#endif /* POLARSSL_SSL_SERVER_NAME_INDICATION */ - -static int ssl_parse_renegotiation_info( ssl_context *ssl, - const unsigned char *buf, - size_t len ) -{ - int ret; - - if( ssl->renegotiation == SSL_INITIAL_HANDSHAKE ) - { - if( len != 1 || buf[0] != 0x0 ) - { - SSL_DEBUG_MSG( 1, ( "non-zero length renegotiated connection field" ) ); - - if( ( ret = ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); - - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - ssl->secure_renegotiation = SSL_SECURE_RENEGOTIATION; - } - else - { - /* Check verify-data in constant-time. The length OTOH is no secret */ - if( len != 1 + ssl->verify_data_len || - buf[0] != ssl->verify_data_len || - safer_memcmp( buf + 1, ssl->peer_verify_data, - ssl->verify_data_len ) != 0 ) - { - SSL_DEBUG_MSG( 1, ( "non-matching renegotiated connection field" ) ); - - if( ( ret = ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); - - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - } - - return( 0 ); -} - -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -static int ssl_parse_signature_algorithms_ext( ssl_context *ssl, - const unsigned char *buf, - size_t len ) -{ - size_t sig_alg_list_size; - const unsigned char *p; - const unsigned char *end = buf + len; - const int *md_cur; - - - sig_alg_list_size = ( ( buf[0] << 8 ) | ( buf[1] ) ); - if( sig_alg_list_size + 2 != len || - sig_alg_list_size % 2 != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - /* - * For now, ignore the SignatureAlgorithm part and rely on offered - * ciphersuites only for that part. To be fixed later. - * - * So, just look at the HashAlgorithm part. - */ - for( md_cur = md_list(); *md_cur != POLARSSL_MD_NONE; md_cur++ ) { - for( p = buf + 2; p < end; p += 2 ) { - if( *md_cur == (int) ssl_md_alg_from_hash( p[0] ) ) { - ssl->handshake->sig_alg = p[0]; - break; - } - } - } - - SSL_DEBUG_MSG( 3, ( "client hello v3, signature_algorithm ext: %d", - ssl->handshake->sig_alg ) ); - - return( 0 ); -} -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - -#if defined(POLARSSL_ECDH_C) || defined(POLARSSL_ECDSA_C) -static int ssl_parse_supported_elliptic_curves( ssl_context *ssl, - const unsigned char *buf, - size_t len ) -{ - size_t list_size, our_size; - const unsigned char *p; - const ecp_curve_info *curve_info, **curves; - - list_size = ( ( buf[0] << 8 ) | ( buf[1] ) ); - if( list_size + 2 != len || - list_size % 2 != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - /* Don't allow our peer to make us allocate too much memory, - * and leave room for a final 0 */ - our_size = list_size / 2 + 1; - if( our_size > POLARSSL_ECP_DP_MAX ) - our_size = POLARSSL_ECP_DP_MAX; - - if( ( curves = polarssl_malloc( our_size * sizeof( *curves ) ) ) == NULL ) - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - - /* explicit void pointer cast for buggy MS compiler */ - memset( (void *) curves, 0, our_size * sizeof( *curves ) ); - ssl->handshake->curves = curves; - - p = buf + 2; - while( list_size > 0 && our_size > 1 ) - { - curve_info = ecp_curve_info_from_tls_id( ( p[0] << 8 ) | p[1] ); - - if( curve_info != NULL ) - { - *curves++ = curve_info; - our_size--; - } - - list_size -= 2; - p += 2; - } - - return( 0 ); -} - -static int ssl_parse_supported_point_formats( ssl_context *ssl, - const unsigned char *buf, - size_t len ) -{ - size_t list_size; - const unsigned char *p; - - list_size = buf[0]; - if( list_size + 1 != len ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - p = buf + 2; - while( list_size > 0 ) - { - if( p[0] == POLARSSL_ECP_PF_UNCOMPRESSED || - p[0] == POLARSSL_ECP_PF_COMPRESSED ) - { - ssl->handshake->ecdh_ctx.point_format = p[0]; - SSL_DEBUG_MSG( 4, ( "point format selected: %d", p[0] ) ); - return( 0 ); - } - - list_size--; - p++; - } - - return( 0 ); -} -#endif /* POLARSSL_ECDH_C || POLARSSL_ECDSA_C */ - -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) -static int ssl_parse_max_fragment_length_ext( ssl_context *ssl, - const unsigned char *buf, - size_t len ) -{ - if( len != 1 || buf[0] >= SSL_MAX_FRAG_LEN_INVALID ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - ssl->session_negotiate->mfl_code = buf[0]; - - return( 0 ); -} -#endif /* POLARSSL_SSL_MAX_FRAGMENT_LENGTH */ - -#if defined(POLARSSL_SSL_TRUNCATED_HMAC) -static int ssl_parse_truncated_hmac_ext( ssl_context *ssl, - const unsigned char *buf, - size_t len ) -{ - if( len != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - ((void) buf); - - ssl->session_negotiate->trunc_hmac = SSL_TRUNC_HMAC_ENABLED; - - return( 0 ); -} -#endif /* POLARSSL_SSL_TRUNCATED_HMAC */ - -#if defined(POLARSSL_SSL_SESSION_TICKETS) -static int ssl_parse_session_ticket_ext( ssl_context *ssl, - unsigned char *buf, - size_t len ) -{ - int ret; - - if( ssl->session_tickets == SSL_SESSION_TICKETS_DISABLED ) - return( 0 ); - - /* Remember the client asked us to send a new ticket */ - ssl->handshake->new_session_ticket = 1; - - SSL_DEBUG_MSG( 3, ( "ticket length: %d", len ) ); - - if( len == 0 ) - return( 0 ); - - if( ssl->renegotiation != SSL_INITIAL_HANDSHAKE ) - { - SSL_DEBUG_MSG( 3, ( "ticket rejected: renegotiating" ) ); - return( 0 ); - } - - /* - * Failures are ok: just ignore the ticket and proceed. - */ - if( ( ret = ssl_parse_ticket( ssl, buf, len ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_parse_ticket", ret ); - return( 0 ); - } - - SSL_DEBUG_MSG( 3, ( "session successfully restored from ticket" ) ); - - ssl->handshake->resume = 1; - - /* Don't send a new ticket after all, this one is OK */ - ssl->handshake->new_session_ticket = 0; - - return( 0 ); -} -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - -#if defined(POLARSSL_SSL_ALPN) -static int ssl_parse_alpn_ext( ssl_context *ssl, - const unsigned char *buf, size_t len ) -{ - size_t list_len, cur_len, ours_len; - const unsigned char *theirs, *start, *end; - const char **ours; - - /* If ALPN not configured, just ignore the extension */ - if( ssl->alpn_list == NULL ) - return( 0 ); - - /* - * opaque ProtocolName<1..2^8-1>; - * - * struct { - * ProtocolName protocol_name_list<2..2^16-1> - * } ProtocolNameList; - */ - - /* Min length is 2 (list_len) + 1 (name_len) + 1 (name) */ - if( len < 4 ) - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - - list_len = ( buf[0] << 8 ) | buf[1]; - if( list_len != len - 2 ) - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - - /* - * Use our order of preference - */ - start = buf + 2; - end = buf + len; - for( ours = ssl->alpn_list; *ours != NULL; ours++ ) - { - ours_len = strlen( *ours ); - for( theirs = start; theirs != end; theirs += cur_len ) - { - /* If the list is well formed, we should get equality first */ - if( theirs > end ) - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - - cur_len = *theirs++; - - /* Empty strings MUST NOT be included */ - if( cur_len == 0 ) - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - - if( cur_len == ours_len && - memcmp( theirs, *ours, cur_len ) == 0 ) - { - ssl->alpn_chosen = *ours; - return( 0 ); - } - } - } - - /* If we get there, no match was found */ - ssl_send_alert_message( ssl, SSL_ALERT_LEVEL_FATAL, - SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); -} -#endif /* POLARSSL_SSL_ALPN */ - -/* - * Auxiliary functions for ServerHello parsing and related actions - */ - -#if defined(POLARSSL_X509_CRT_PARSE_C) -/* - * Return 1 if the given EC key uses the given curve, 0 otherwise - */ -#if defined(POLARSSL_ECDSA_C) -static int ssl_key_matches_curves( pk_context *pk, - const ecp_curve_info **curves ) -{ - const ecp_curve_info **crv = curves; - ecp_group_id grp_id = pk_ec( *pk )->grp.id; - - while( *crv != NULL ) - { - if( (*crv)->grp_id == grp_id ) - return( 1 ); - crv++; - } - - return( 0 ); -} -#endif /* POLARSSL_ECDSA_C */ - -/* - * Try picking a certificate for this ciphersuite, - * return 0 on success and -1 on failure. - */ -static int ssl_pick_cert( ssl_context *ssl, - const ssl_ciphersuite_t * ciphersuite_info ) -{ - ssl_key_cert *cur, *list; - pk_type_t pk_alg = ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info ); - -#if defined(POLARSSL_SSL_SERVER_NAME_INDICATION) - if( ssl->handshake->sni_key_cert != NULL ) - list = ssl->handshake->sni_key_cert; - else -#endif - list = ssl->handshake->key_cert; - - if( pk_alg == POLARSSL_PK_NONE ) - return( 0 ); - - for( cur = list; cur != NULL; cur = cur->next ) - { - if( ! pk_can_do( cur->key, pk_alg ) ) - continue; - - /* - * This avoids sending the client a cert it'll reject based on - * keyUsage or other extensions. - * - * It also allows the user to provision different certificates for - * different uses based on keyUsage, eg if they want to avoid signing - * and decrypting with the same RSA key. - */ - if( ssl_check_cert_usage( cur->cert, ciphersuite_info, - SSL_IS_SERVER ) != 0 ) - { - continue; - } - -#if defined(POLARSSL_ECDSA_C) - if( pk_alg == POLARSSL_PK_ECDSA ) - { - if( ssl_key_matches_curves( cur->key, ssl->handshake->curves ) ) - break; - } - else -#endif - break; - } - - if( cur == NULL ) - return( -1 ); - - ssl->handshake->key_cert = cur; - return( 0 ); -} -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -/* - * Check if a given ciphersuite is suitable for use with our config/keys/etc - * Sets ciphersuite_info only if the suite matches. - */ -static int ssl_ciphersuite_match( ssl_context *ssl, int suite_id, - const ssl_ciphersuite_t **ciphersuite_info ) -{ - const ssl_ciphersuite_t *suite_info; - - suite_info = ssl_ciphersuite_from_id( suite_id ); - if( suite_info == NULL ) - { - SSL_DEBUG_MSG( 1, ( "ciphersuite info for %04x not found", suite_id ) ); - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - } - - if( suite_info->min_minor_ver > ssl->minor_ver || - suite_info->max_minor_ver < ssl->minor_ver ) - return( 0 ); - -#if defined(POLARSSL_ECDH_C) || defined(POLARSSL_ECDSA_C) - if( ssl_ciphersuite_uses_ec( suite_info ) && - ( ssl->handshake->curves == NULL || - ssl->handshake->curves[0] == NULL ) ) - return( 0 ); -#endif - -#if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED) - /* If the ciphersuite requires a pre-shared key and we don't - * have one, skip it now rather than failing later */ - if( ssl_ciphersuite_uses_psk( suite_info ) && - ssl->f_psk == NULL && - ( ssl->psk == NULL || ssl->psk_identity == NULL || - ssl->psk_identity_len == 0 || ssl->psk_len == 0 ) ) - return( 0 ); -#endif - -#if defined(POLARSSL_X509_CRT_PARSE_C) - /* - * Final check: if ciphersuite requires us to have a - * certificate/key of a particular type: - * - select the appropriate certificate if we have one, or - * - try the next ciphersuite if we don't - * This must be done last since we modify the key_cert list. - */ - if( ssl_pick_cert( ssl, suite_info ) != 0 ) - return( 0 ); -#endif - - *ciphersuite_info = suite_info; - return( 0 ); -} - -#if defined(POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO) -static int ssl_parse_client_hello_v2( ssl_context *ssl ) -{ - int ret; - unsigned int i, j; - size_t n; - unsigned int ciph_len, sess_len, chal_len; - unsigned char *buf, *p; - const int *ciphersuites; - const ssl_ciphersuite_t *ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> parse client hello v2" ) ); - - if( ssl->renegotiation != SSL_INITIAL_HANDSHAKE ) - { - SSL_DEBUG_MSG( 1, ( "client hello v2 illegal for renegotiation" ) ); - - if( ( ret = ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); - - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - buf = ssl->in_hdr; - - SSL_DEBUG_BUF( 4, "record header", buf, 5 ); - - SSL_DEBUG_MSG( 3, ( "client hello v2, message type: %d", - buf[2] ) ); - SSL_DEBUG_MSG( 3, ( "client hello v2, message len.: %d", - ( ( buf[0] & 0x7F ) << 8 ) | buf[1] ) ); - SSL_DEBUG_MSG( 3, ( "client hello v2, max. version: [%d:%d]", - buf[3], buf[4] ) ); - - /* - * SSLv2 Client Hello - * - * Record layer: - * 0 . 1 message length - * - * SSL layer: - * 2 . 2 message type - * 3 . 4 protocol version - */ - if( buf[2] != SSL_HS_CLIENT_HELLO || - buf[3] != SSL_MAJOR_VERSION_3 ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - n = ( ( buf[0] << 8 ) | buf[1] ) & 0x7FFF; - - if( n < 17 || n > 512 ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - ssl->major_ver = SSL_MAJOR_VERSION_3; - ssl->minor_ver = ( buf[4] <= ssl->max_minor_ver ) - ? buf[4] : ssl->max_minor_ver; - - if( ssl->minor_ver < ssl->min_minor_ver ) - { - SSL_DEBUG_MSG( 1, ( "client only supports ssl smaller than minimum" - " [%d:%d] < [%d:%d]", - ssl->major_ver, ssl->minor_ver, - ssl->min_major_ver, ssl->min_minor_ver ) ); - - ssl_send_alert_message( ssl, SSL_ALERT_LEVEL_FATAL, - SSL_ALERT_MSG_PROTOCOL_VERSION ); - return( POLARSSL_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); - } - - ssl->handshake->max_major_ver = buf[3]; - ssl->handshake->max_minor_ver = buf[4]; - - if( ( ret = ssl_fetch_input( ssl, 2 + n ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_fetch_input", ret ); - return( ret ); - } - - ssl->handshake->update_checksum( ssl, buf + 2, n ); - - buf = ssl->in_msg; - n = ssl->in_left - 5; - - /* - * 0 . 1 ciphersuitelist length - * 2 . 3 session id length - * 4 . 5 challenge length - * 6 . .. ciphersuitelist - * .. . .. session id - * .. . .. challenge - */ - SSL_DEBUG_BUF( 4, "record contents", buf, n ); - - ciph_len = ( buf[0] << 8 ) | buf[1]; - sess_len = ( buf[2] << 8 ) | buf[3]; - chal_len = ( buf[4] << 8 ) | buf[5]; - - SSL_DEBUG_MSG( 3, ( "ciph_len: %d, sess_len: %d, chal_len: %d", - ciph_len, sess_len, chal_len ) ); - - /* - * Make sure each parameter length is valid - */ - if( ciph_len < 3 || ( ciph_len % 3 ) != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - if( sess_len > 32 ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - if( chal_len < 8 || chal_len > 32 ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - if( n != 6 + ciph_len + sess_len + chal_len ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - SSL_DEBUG_BUF( 3, "client hello, ciphersuitelist", - buf + 6, ciph_len ); - SSL_DEBUG_BUF( 3, "client hello, session id", - buf + 6 + ciph_len, sess_len ); - SSL_DEBUG_BUF( 3, "client hello, challenge", - buf + 6 + ciph_len + sess_len, chal_len ); - - p = buf + 6 + ciph_len; - ssl->session_negotiate->length = sess_len; - memset( ssl->session_negotiate->id, 0, - sizeof( ssl->session_negotiate->id ) ); - memcpy( ssl->session_negotiate->id, p, ssl->session_negotiate->length ); - - p += sess_len; - memset( ssl->handshake->randbytes, 0, 64 ); - memcpy( ssl->handshake->randbytes + 32 - chal_len, p, chal_len ); - - /* - * Check for TLS_EMPTY_RENEGOTIATION_INFO_SCSV - */ - for( i = 0, p = buf + 6; i < ciph_len; i += 3, p += 3 ) - { - if( p[0] == 0 && p[1] == 0 && p[2] == SSL_EMPTY_RENEGOTIATION_INFO ) - { - SSL_DEBUG_MSG( 3, ( "received TLS_EMPTY_RENEGOTIATION_INFO " ) ); - if( ssl->renegotiation == SSL_RENEGOTIATION ) - { - SSL_DEBUG_MSG( 1, ( "received RENEGOTIATION SCSV during renegotiation" ) ); - - if( ( ret = ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); - - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - ssl->secure_renegotiation = SSL_SECURE_RENEGOTIATION; - break; - } - } - - ciphersuites = ssl->ciphersuite_list[ssl->minor_ver]; - ciphersuite_info = NULL; -#if defined(POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE) - for( j = 0, p = buf + 6; j < ciph_len; j += 3, p += 3 ) - { - for( i = 0; ciphersuites[i] != 0; i++ ) -#else - for( i = 0; ciphersuites[i] != 0; i++ ) - { - for( j = 0, p = buf + 6; j < ciph_len; j += 3, p += 3 ) -#endif - { - if( p[0] != 0 || - p[1] != ( ( ciphersuites[i] >> 8 ) & 0xFF ) || - p[2] != ( ( ciphersuites[i] ) & 0xFF ) ) - continue; - - if( ( ret = ssl_ciphersuite_match( ssl, ciphersuites[i], - &ciphersuite_info ) ) != 0 ) - return( ret ); - - if( ciphersuite_info != NULL ) - goto have_ciphersuite_v2; - } - } - - SSL_DEBUG_MSG( 1, ( "got no ciphersuites in common" ) ); - - return( POLARSSL_ERR_SSL_NO_CIPHER_CHOSEN ); - -have_ciphersuite_v2: - ssl->session_negotiate->ciphersuite = ciphersuites[i]; - ssl->transform_negotiate->ciphersuite_info = ciphersuite_info; - ssl_optimize_checksum( ssl, ssl->transform_negotiate->ciphersuite_info ); - - /* - * SSLv2 Client Hello relevant renegotiation security checks - */ - if( ssl->secure_renegotiation == SSL_LEGACY_RENEGOTIATION && - ssl->allow_legacy_renegotiation == SSL_LEGACY_BREAK_HANDSHAKE ) - { - SSL_DEBUG_MSG( 1, ( "legacy renegotiation, breaking off handshake" ) ); - - if( ( ret = ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); - - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - ssl->in_left = 0; - ssl->state++; - - SSL_DEBUG_MSG( 2, ( "<= parse client hello v2" ) ); - - return( 0 ); -} -#endif /* POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO */ - -static int ssl_parse_client_hello( ssl_context *ssl ) -{ - int ret; - unsigned int i, j; - size_t n; - unsigned int ciph_len, sess_len; - unsigned int comp_len; - unsigned int ext_len = 0; - unsigned char *buf, *p, *ext; - int renegotiation_info_seen = 0; - int handshake_failure = 0; - const int *ciphersuites; - const ssl_ciphersuite_t *ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> parse client hello" ) ); - - if( ssl->renegotiation == SSL_INITIAL_HANDSHAKE && - ( ret = ssl_fetch_input( ssl, 5 ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_fetch_input", ret ); - return( ret ); - } - - buf = ssl->in_hdr; - -#if defined(POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO) - if( ( buf[0] & 0x80 ) != 0 ) - return ssl_parse_client_hello_v2( ssl ); -#endif - - SSL_DEBUG_BUF( 4, "record header", buf, 5 ); - - SSL_DEBUG_MSG( 3, ( "client hello v3, message type: %d", - buf[0] ) ); - SSL_DEBUG_MSG( 3, ( "client hello v3, message len.: %d", - ( buf[3] << 8 ) | buf[4] ) ); - SSL_DEBUG_MSG( 3, ( "client hello v3, protocol ver: [%d:%d]", - buf[1], buf[2] ) ); - - /* - * SSLv3/TLS Client Hello - * - * Record layer: - * 0 . 0 message type - * 1 . 2 protocol version - * 3 . 4 message length - */ - - /* According to RFC 5246 Appendix E.1, the version here is typically - * "{03,00}, the lowest version number supported by the client, [or] the - * value of ClientHello.client_version", so the only meaningful check here - * is the major version shouldn't be less than 3 */ - if( buf[0] != SSL_MSG_HANDSHAKE || - buf[1] < SSL_MAJOR_VERSION_3 ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - n = ( buf[3] << 8 ) | buf[4]; - - if( n < 45 || n > SSL_MAX_CONTENT_LEN ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - if( ssl->renegotiation == SSL_INITIAL_HANDSHAKE && - ( ret = ssl_fetch_input( ssl, 5 + n ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_fetch_input", ret ); - return( ret ); - } - - buf = ssl->in_msg; - if( !ssl->renegotiation ) - n = ssl->in_left - 5; - else - n = ssl->in_msglen; - - ssl->handshake->update_checksum( ssl, buf, n ); - - /* - * SSL layer: - * 0 . 0 handshake type - * 1 . 3 handshake length - * 4 . 5 protocol version - * 6 . 9 UNIX time() - * 10 . 37 random bytes - * 38 . 38 session id length - * 39 . 38+x session id - * 39+x . 40+x ciphersuitelist length - * 41+x . 40+y ciphersuitelist - * 41+y . 41+y compression alg length - * 42+y . 41+z compression algs - * .. . .. extensions - */ - SSL_DEBUG_BUF( 4, "record contents", buf, n ); - - SSL_DEBUG_MSG( 3, ( "client hello v3, handshake type: %d", - buf[0] ) ); - SSL_DEBUG_MSG( 3, ( "client hello v3, handshake len.: %d", - ( buf[1] << 16 ) | ( buf[2] << 8 ) | buf[3] ) ); - SSL_DEBUG_MSG( 3, ( "client hello v3, max. version: [%d:%d]", - buf[4], buf[5] ) ); - - /* - * Check the handshake type and protocol version - */ - if( buf[0] != SSL_HS_CLIENT_HELLO ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - ssl->major_ver = buf[4]; - ssl->minor_ver = buf[5]; - - ssl->handshake->max_major_ver = ssl->major_ver; - ssl->handshake->max_minor_ver = ssl->minor_ver; - - if( ssl->major_ver < ssl->min_major_ver || - ssl->minor_ver < ssl->min_minor_ver ) - { - SSL_DEBUG_MSG( 1, ( "client only supports ssl smaller than minimum" - " [%d:%d] < [%d:%d]", - ssl->major_ver, ssl->minor_ver, - ssl->min_major_ver, ssl->min_minor_ver ) ); - - ssl_send_alert_message( ssl, SSL_ALERT_LEVEL_FATAL, - SSL_ALERT_MSG_PROTOCOL_VERSION ); - - return( POLARSSL_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); - } - - if( ssl->major_ver > ssl->max_major_ver ) - { - ssl->major_ver = ssl->max_major_ver; - ssl->minor_ver = ssl->max_minor_ver; - } - else if( ssl->minor_ver > ssl->max_minor_ver ) - ssl->minor_ver = ssl->max_minor_ver; - - memcpy( ssl->handshake->randbytes, buf + 6, 32 ); - - /* - * Check the handshake message length - */ - if( buf[1] != 0 || n != (unsigned int) 4 + ( ( buf[2] << 8 ) | buf[3] ) ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - /* - * Check the session length - */ - sess_len = buf[38]; - - if( sess_len > 32 || sess_len > n - 42 ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - ssl->session_negotiate->length = sess_len; - memset( ssl->session_negotiate->id, 0, - sizeof( ssl->session_negotiate->id ) ); - memcpy( ssl->session_negotiate->id, buf + 39, - ssl->session_negotiate->length ); - - /* - * Check the ciphersuitelist length - */ - ciph_len = ( buf[39 + sess_len] << 8 ) - | ( buf[40 + sess_len] ); - - if( ciph_len < 2 || ( ciph_len % 2 ) != 0 || ciph_len > n - 42 - sess_len ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - /* - * Check the compression algorithms length - */ - comp_len = buf[41 + sess_len + ciph_len]; - - if( comp_len < 1 || comp_len > 16 || - comp_len > n - 42 - sess_len - ciph_len ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - /* - * Check the extension length - */ - if( n > 42 + sess_len + ciph_len + comp_len ) - { - ext_len = ( buf[42 + sess_len + ciph_len + comp_len] << 8 ) - | ( buf[43 + sess_len + ciph_len + comp_len] ); - - if( ( ext_len > 0 && ext_len < 4 ) || - n != 44 + sess_len + ciph_len + comp_len + ext_len ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - SSL_DEBUG_BUF( 3, "Ext", buf + 44 + sess_len + ciph_len + comp_len, ext_len); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - } - - ssl->session_negotiate->compression = SSL_COMPRESS_NULL; -#if defined(POLARSSL_ZLIB_SUPPORT) - for( i = 0; i < comp_len; ++i ) - { - if( buf[42 + sess_len + ciph_len + i] == SSL_COMPRESS_DEFLATE ) - { - ssl->session_negotiate->compression = SSL_COMPRESS_DEFLATE; - break; - } - } -#endif - - SSL_DEBUG_BUF( 3, "client hello, random bytes", - buf + 6, 32 ); - SSL_DEBUG_BUF( 3, "client hello, session id", - buf + 38, sess_len ); - SSL_DEBUG_BUF( 3, "client hello, ciphersuitelist", - buf + 41 + sess_len, ciph_len ); - SSL_DEBUG_BUF( 3, "client hello, compression", - buf + 42 + sess_len + ciph_len, comp_len ); - - /* - * Check for TLS_EMPTY_RENEGOTIATION_INFO_SCSV - */ - for( i = 0, p = buf + 41 + sess_len; i < ciph_len; i += 2, p += 2 ) - { - if( p[0] == 0 && p[1] == SSL_EMPTY_RENEGOTIATION_INFO ) - { - SSL_DEBUG_MSG( 3, ( "received TLS_EMPTY_RENEGOTIATION_INFO " ) ); - if( ssl->renegotiation == SSL_RENEGOTIATION ) - { - SSL_DEBUG_MSG( 1, ( "received RENEGOTIATION SCSV during renegotiation" ) ); - - if( ( ret = ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); - - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - ssl->secure_renegotiation = SSL_SECURE_RENEGOTIATION; - break; - } - } - - ext = buf + 44 + sess_len + ciph_len + comp_len; - - while( ext_len ) - { - unsigned int ext_id = ( ( ext[0] << 8 ) - | ( ext[1] ) ); - unsigned int ext_size = ( ( ext[2] << 8 ) - | ( ext[3] ) ); - - if( ext_size + 4 > ext_len ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - switch( ext_id ) - { -#if defined(POLARSSL_SSL_SERVER_NAME_INDICATION) - case TLS_EXT_SERVERNAME: - SSL_DEBUG_MSG( 3, ( "found ServerName extension" ) ); - if( ssl->f_sni == NULL ) - break; - - ret = ssl_parse_servername_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; -#endif /* POLARSSL_SSL_SERVER_NAME_INDICATION */ - - case TLS_EXT_RENEGOTIATION_INFO: - SSL_DEBUG_MSG( 3, ( "found renegotiation extension" ) ); - renegotiation_info_seen = 1; - - ret = ssl_parse_renegotiation_info( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; - -#if defined(POLARSSL_SSL_PROTO_TLS1_2) - case TLS_EXT_SIG_ALG: - SSL_DEBUG_MSG( 3, ( "found signature_algorithms extension" ) ); - if( ssl->renegotiation == SSL_RENEGOTIATION ) - break; - - ret = ssl_parse_signature_algorithms_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - -#if defined(POLARSSL_ECDH_C) || defined(POLARSSL_ECDSA_C) - case TLS_EXT_SUPPORTED_ELLIPTIC_CURVES: - SSL_DEBUG_MSG( 3, ( "found supported elliptic curves extension" ) ); - - ret = ssl_parse_supported_elliptic_curves( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; - - case TLS_EXT_SUPPORTED_POINT_FORMATS: - SSL_DEBUG_MSG( 3, ( "found supported point formats extension" ) ); - ssl->handshake->cli_exts |= TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT; - - ret = ssl_parse_supported_point_formats( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; -#endif /* POLARSSL_ECDH_C || POLARSSL_ECDSA_C */ - -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) - case TLS_EXT_MAX_FRAGMENT_LENGTH: - SSL_DEBUG_MSG( 3, ( "found max fragment length extension" ) ); - - ret = ssl_parse_max_fragment_length_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; -#endif /* POLARSSL_SSL_MAX_FRAGMENT_LENGTH */ - -#if defined(POLARSSL_SSL_TRUNCATED_HMAC) - case TLS_EXT_TRUNCATED_HMAC: - SSL_DEBUG_MSG( 3, ( "found truncated hmac extension" ) ); - - ret = ssl_parse_truncated_hmac_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; -#endif /* POLARSSL_SSL_TRUNCATED_HMAC */ - -#if defined(POLARSSL_SSL_SESSION_TICKETS) - case TLS_EXT_SESSION_TICKET: - SSL_DEBUG_MSG( 3, ( "found session ticket extension" ) ); - - ret = ssl_parse_session_ticket_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - -#if defined(POLARSSL_SSL_ALPN) - case TLS_EXT_ALPN: - SSL_DEBUG_MSG( 3, ( "found alpn extension" ) ); - - ret = ssl_parse_alpn_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - - default: - SSL_DEBUG_MSG( 3, ( "unknown extension found: %d (ignoring)", - ext_id ) ); - } - - ext_len -= 4 + ext_size; - ext += 4 + ext_size; - - if( ext_len > 0 && ext_len < 4 ) - { - SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - } - - /* - * Renegotiation security checks - */ - if( ssl->secure_renegotiation == SSL_LEGACY_RENEGOTIATION && - ssl->allow_legacy_renegotiation == SSL_LEGACY_BREAK_HANDSHAKE ) - { - SSL_DEBUG_MSG( 1, ( "legacy renegotiation, breaking off handshake" ) ); - handshake_failure = 1; - } - else if( ssl->renegotiation == SSL_RENEGOTIATION && - ssl->secure_renegotiation == SSL_SECURE_RENEGOTIATION && - renegotiation_info_seen == 0 ) - { - SSL_DEBUG_MSG( 1, ( "renegotiation_info extension missing (secure)" ) ); - handshake_failure = 1; - } - else if( ssl->renegotiation == SSL_RENEGOTIATION && - ssl->secure_renegotiation == SSL_LEGACY_RENEGOTIATION && - ssl->allow_legacy_renegotiation == SSL_LEGACY_NO_RENEGOTIATION ) - { - SSL_DEBUG_MSG( 1, ( "legacy renegotiation not allowed" ) ); - handshake_failure = 1; - } - else if( ssl->renegotiation == SSL_RENEGOTIATION && - ssl->secure_renegotiation == SSL_LEGACY_RENEGOTIATION && - renegotiation_info_seen == 1 ) - { - SSL_DEBUG_MSG( 1, ( "renegotiation_info extension present (legacy)" ) ); - handshake_failure = 1; - } - - if( handshake_failure == 1 ) - { - if( ( ret = ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); - - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - /* - * Search for a matching ciphersuite - * (At the end because we need information from the EC-based extensions - * and certificate from the SNI callback triggered by the SNI extension.) - */ - ciphersuites = ssl->ciphersuite_list[ssl->minor_ver]; - ciphersuite_info = NULL; -#if defined(POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE) - for( j = 0, p = buf + 41 + sess_len; j < ciph_len; j += 2, p += 2 ) - { - for( i = 0; ciphersuites[i] != 0; i++ ) -#else - for( i = 0; ciphersuites[i] != 0; i++ ) - { - for( j = 0, p = buf + 41 + sess_len; j < ciph_len; j += 2, p += 2 ) -#endif - { - if( p[0] != ( ( ciphersuites[i] >> 8 ) & 0xFF ) || - p[1] != ( ( ciphersuites[i] ) & 0xFF ) ) - continue; - - if( ( ret = ssl_ciphersuite_match( ssl, ciphersuites[i], - &ciphersuite_info ) ) != 0 ) - return( ret ); - - if( ciphersuite_info != NULL ) - goto have_ciphersuite; - } - } - - SSL_DEBUG_MSG( 1, ( "got no ciphersuites in common" ) ); - - if( ( ret = ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); - - return( POLARSSL_ERR_SSL_NO_CIPHER_CHOSEN ); - -have_ciphersuite: - ssl->session_negotiate->ciphersuite = ciphersuites[i]; - ssl->transform_negotiate->ciphersuite_info = ciphersuite_info; - ssl_optimize_checksum( ssl, ssl->transform_negotiate->ciphersuite_info ); - - ssl->in_left = 0; - ssl->state++; - - SSL_DEBUG_MSG( 2, ( "<= parse client hello" ) ); - - return( 0 ); -} - -#if defined(POLARSSL_SSL_TRUNCATED_HMAC) -static void ssl_write_truncated_hmac_ext( ssl_context *ssl, - unsigned char *buf, - size_t *olen ) -{ - unsigned char *p = buf; - - if( ssl->session_negotiate->trunc_hmac == SSL_TRUNC_HMAC_DISABLED ) - { - *olen = 0; - return; - } - - SSL_DEBUG_MSG( 3, ( "server hello, adding truncated hmac extension" ) ); - - *p++ = (unsigned char)( ( TLS_EXT_TRUNCATED_HMAC >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( TLS_EXT_TRUNCATED_HMAC ) & 0xFF ); - - *p++ = 0x00; - *p++ = 0x00; - - *olen = 4; -} -#endif /* POLARSSL_SSL_TRUNCATED_HMAC */ - -#if defined(POLARSSL_SSL_SESSION_TICKETS) -static void ssl_write_session_ticket_ext( ssl_context *ssl, - unsigned char *buf, - size_t *olen ) -{ - unsigned char *p = buf; - - if( ssl->handshake->new_session_ticket == 0 ) - { - *olen = 0; - return; - } - - SSL_DEBUG_MSG( 3, ( "server hello, adding session ticket extension" ) ); - - *p++ = (unsigned char)( ( TLS_EXT_SESSION_TICKET >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( TLS_EXT_SESSION_TICKET ) & 0xFF ); - - *p++ = 0x00; - *p++ = 0x00; - - *olen = 4; -} -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - -static void ssl_write_renegotiation_ext( ssl_context *ssl, - unsigned char *buf, - size_t *olen ) -{ - unsigned char *p = buf; - - if( ssl->secure_renegotiation != SSL_SECURE_RENEGOTIATION ) - { - *olen = 0; - return; - } - - SSL_DEBUG_MSG( 3, ( "server hello, secure renegotiation extension" ) ); - - *p++ = (unsigned char)( ( TLS_EXT_RENEGOTIATION_INFO >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( TLS_EXT_RENEGOTIATION_INFO ) & 0xFF ); - - *p++ = 0x00; - *p++ = ( ssl->verify_data_len * 2 + 1 ) & 0xFF; - *p++ = ssl->verify_data_len * 2 & 0xFF; - - memcpy( p, ssl->peer_verify_data, ssl->verify_data_len ); - p += ssl->verify_data_len; - memcpy( p, ssl->own_verify_data, ssl->verify_data_len ); - p += ssl->verify_data_len; - - *olen = 5 + ssl->verify_data_len * 2; -} - -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) -static void ssl_write_max_fragment_length_ext( ssl_context *ssl, - unsigned char *buf, - size_t *olen ) -{ - unsigned char *p = buf; - - if( ssl->session_negotiate->mfl_code == SSL_MAX_FRAG_LEN_NONE ) - { - *olen = 0; - return; - } - - SSL_DEBUG_MSG( 3, ( "server hello, max_fragment_length extension" ) ); - - *p++ = (unsigned char)( ( TLS_EXT_MAX_FRAGMENT_LENGTH >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( TLS_EXT_MAX_FRAGMENT_LENGTH ) & 0xFF ); - - *p++ = 0x00; - *p++ = 1; - - *p++ = ssl->session_negotiate->mfl_code; - - *olen = 5; -} -#endif /* POLARSSL_SSL_MAX_FRAGMENT_LENGTH */ - -#if defined(POLARSSL_ECDH_C) || defined(POLARSSL_ECDSA_C) -static void ssl_write_supported_point_formats_ext( ssl_context *ssl, - unsigned char *buf, - size_t *olen ) -{ - unsigned char *p = buf; - ((void) ssl); - - if( ( ssl->handshake->cli_exts & - TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT ) == 0 ) - { - *olen = 0; - return; - } - - SSL_DEBUG_MSG( 3, ( "server hello, supported_point_formats extension" ) ); - - *p++ = (unsigned char)( ( TLS_EXT_SUPPORTED_POINT_FORMATS >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( TLS_EXT_SUPPORTED_POINT_FORMATS ) & 0xFF ); - - *p++ = 0x00; - *p++ = 2; - - *p++ = 1; - *p++ = POLARSSL_ECP_PF_UNCOMPRESSED; - - *olen = 6; -} -#endif /* POLARSSL_ECDH_C || POLARSSL_ECDSA_C */ - -#if defined(POLARSSL_SSL_ALPN ) -static void ssl_write_alpn_ext( ssl_context *ssl, - unsigned char *buf, size_t *olen ) -{ - if( ssl->alpn_chosen == NULL ) - { - *olen = 0; - return; - } - - SSL_DEBUG_MSG( 3, ( "server hello, adding alpn extension" ) ); - - /* - * 0 . 1 ext identifier - * 2 . 3 ext length - * 4 . 5 protocol list length - * 6 . 6 protocol name length - * 7 . 7+n protocol name - */ - buf[0] = (unsigned char)( ( TLS_EXT_ALPN >> 8 ) & 0xFF ); - buf[1] = (unsigned char)( ( TLS_EXT_ALPN ) & 0xFF ); - - *olen = 7 + strlen( ssl->alpn_chosen ); - - buf[2] = (unsigned char)( ( ( *olen - 4 ) >> 8 ) & 0xFF ); - buf[3] = (unsigned char)( ( ( *olen - 4 ) ) & 0xFF ); - - buf[4] = (unsigned char)( ( ( *olen - 6 ) >> 8 ) & 0xFF ); - buf[5] = (unsigned char)( ( ( *olen - 6 ) ) & 0xFF ); - - buf[6] = (unsigned char)( ( ( *olen - 7 ) ) & 0xFF ); - - memcpy( buf + 7, ssl->alpn_chosen, *olen - 7 ); -} -#endif /* POLARSSL_ECDH_C || POLARSSL_ECDSA_C */ - -static int ssl_write_server_hello( ssl_context *ssl ) -{ -#if defined(POLARSSL_HAVE_TIME) - time_t t; -#endif - int ret; - size_t olen, ext_len = 0, n; - unsigned char *buf, *p; - - SSL_DEBUG_MSG( 2, ( "=> write server hello" ) ); - - if( ssl->f_rng == NULL ) - { - SSL_DEBUG_MSG( 1, ( "no RNG provided") ); - return( POLARSSL_ERR_SSL_NO_RNG ); - } - - /* - * 0 . 0 handshake type - * 1 . 3 handshake length - * 4 . 5 protocol version - * 6 . 9 UNIX time() - * 10 . 37 random bytes - */ - buf = ssl->out_msg; - p = buf + 4; - - *p++ = (unsigned char) ssl->major_ver; - *p++ = (unsigned char) ssl->minor_ver; - - SSL_DEBUG_MSG( 3, ( "server hello, chosen version: [%d:%d]", - buf[4], buf[5] ) ); - -#if defined(POLARSSL_HAVE_TIME) - t = time( NULL ); - *p++ = (unsigned char)( t >> 24 ); - *p++ = (unsigned char)( t >> 16 ); - *p++ = (unsigned char)( t >> 8 ); - *p++ = (unsigned char)( t ); - - SSL_DEBUG_MSG( 3, ( "server hello, current time: %lu", t ) ); -#else - if( ( ret = ssl->f_rng( ssl->p_rng, p, 4 ) ) != 0 ) - return( ret ); - - p += 4; -#endif /* POLARSSL_HAVE_TIME */ - - if( ( ret = ssl->f_rng( ssl->p_rng, p, 28 ) ) != 0 ) - return( ret ); - - p += 28; - - memcpy( ssl->handshake->randbytes + 32, buf + 6, 32 ); - - SSL_DEBUG_BUF( 3, "server hello, random bytes", buf + 6, 32 ); - - /* - * Resume is 0 by default, see ssl_handshake_init(). - * It may be already set to 1 by ssl_parse_session_ticket_ext(). - * If not, try looking up session ID in our cache. - */ - if( ssl->handshake->resume == 0 && - ssl->renegotiation == SSL_INITIAL_HANDSHAKE && - ssl->session_negotiate->length != 0 && - ssl->f_get_cache != NULL && - ssl->f_get_cache( ssl->p_get_cache, ssl->session_negotiate ) == 0 ) - { - SSL_DEBUG_MSG( 3, ( "session successfully restored from cache" ) ); - ssl->handshake->resume = 1; - } - - if( ssl->handshake->resume == 0 ) - { - /* - * New session, create a new session id, - * unless we're about to issue a session ticket - */ - ssl->state++; - -#if defined(POLARSSL_HAVE_TIME) - ssl->session_negotiate->start = time( NULL ); -#endif - -#if defined(POLARSSL_SSL_SESSION_TICKETS) - if( ssl->handshake->new_session_ticket != 0 ) - { - ssl->session_negotiate->length = n = 0; - memset( ssl->session_negotiate->id, 0, 32 ); - } - else -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - { - ssl->session_negotiate->length = n = 32; - if( ( ret = ssl->f_rng( ssl->p_rng, ssl->session_negotiate->id, - n ) ) != 0 ) - return( ret ); - } - } - else - { - /* - * Resuming a session - */ - n = ssl->session_negotiate->length; - ssl->state = SSL_SERVER_CHANGE_CIPHER_SPEC; - - if( ( ret = ssl_derive_keys( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_derive_keys", ret ); - return( ret ); - } - } - - /* - * 38 . 38 session id length - * 39 . 38+n session id - * 39+n . 40+n chosen ciphersuite - * 41+n . 41+n chosen compression alg. - * 42+n . 43+n extensions length - * 44+n . 43+n+m extensions - */ - *p++ = (unsigned char) ssl->session_negotiate->length; - memcpy( p, ssl->session_negotiate->id, ssl->session_negotiate->length ); - p += ssl->session_negotiate->length; - - SSL_DEBUG_MSG( 3, ( "server hello, session id len.: %d", n ) ); - SSL_DEBUG_BUF( 3, "server hello, session id", buf + 39, n ); - SSL_DEBUG_MSG( 3, ( "%s session has been resumed", - ssl->handshake->resume ? "a" : "no" ) ); - - *p++ = (unsigned char)( ssl->session_negotiate->ciphersuite >> 8 ); - *p++ = (unsigned char)( ssl->session_negotiate->ciphersuite ); - *p++ = (unsigned char)( ssl->session_negotiate->compression ); - - SSL_DEBUG_MSG( 3, ( "server hello, chosen ciphersuite: %s", - ssl_get_ciphersuite_name( ssl->session_negotiate->ciphersuite ) ) ); - SSL_DEBUG_MSG( 3, ( "server hello, compress alg.: 0x%02X", - ssl->session_negotiate->compression ) ); - - /* - * First write extensions, then the total length - */ - ssl_write_renegotiation_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; - -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) - ssl_write_max_fragment_length_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; -#endif - -#if defined(POLARSSL_SSL_TRUNCATED_HMAC) - ssl_write_truncated_hmac_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; -#endif - -#if defined(POLARSSL_SSL_SESSION_TICKETS) - ssl_write_session_ticket_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; -#endif - -#if defined(POLARSSL_ECDH_C) || defined(POLARSSL_ECDSA_C) - ssl_write_supported_point_formats_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; -#endif - -#if defined(POLARSSL_SSL_ALPN) - ssl_write_alpn_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; -#endif - - SSL_DEBUG_MSG( 3, ( "server hello, total extension length: %d", ext_len ) ); - - if( ext_len > 0 ) - { - *p++ = (unsigned char)( ( ext_len >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( ext_len ) & 0xFF ); - p += ext_len; - } - - ssl->out_msglen = p - buf; - ssl->out_msgtype = SSL_MSG_HANDSHAKE; - ssl->out_msg[0] = SSL_HS_SERVER_HELLO; - - ret = ssl_write_record( ssl ); - - SSL_DEBUG_MSG( 2, ( "<= write server hello" ) ); - - return( ret ); -} - -#if !defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) -static int ssl_write_certificate_request( ssl_context *ssl ) -{ - const ssl_ciphersuite_t *ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> write certificate request" ) ); - - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK ) - { - SSL_DEBUG_MSG( 2, ( "<= skip write certificate request" ) ); - ssl->state++; - return( 0 ); - } - - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); -} -#else -static int ssl_write_certificate_request( ssl_context *ssl ) -{ - int ret = POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE; - const ssl_ciphersuite_t *ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - size_t dn_size, total_dn_size; /* excluding length bytes */ - size_t ct_len, sa_len; /* including length bytes */ - unsigned char *buf, *p; - const x509_crt *crt; - - SSL_DEBUG_MSG( 2, ( "=> write certificate request" ) ); - - ssl->state++; - - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK || - ssl->authmode == SSL_VERIFY_NONE ) - { - SSL_DEBUG_MSG( 2, ( "<= skip write certificate request" ) ); - return( 0 ); - } - - /* - * 0 . 0 handshake type - * 1 . 3 handshake length - * 4 . 4 cert type count - * 5 .. m-1 cert types - * m .. m+1 sig alg length (TLS 1.2 only) - * m+1 .. n-1 SignatureAndHashAlgorithms (TLS 1.2 only) - * n .. n+1 length of all DNs - * n+2 .. n+3 length of DN 1 - * n+4 .. ... Distinguished Name #1 - * ... .. ... length of DN 2, etc. - */ - buf = ssl->out_msg; - p = buf + 4; - - /* - * Supported certificate types - * - * ClientCertificateType certificate_types<1..2^8-1>; - * enum { (255) } ClientCertificateType; - */ - ct_len = 0; - -#if defined(POLARSSL_RSA_C) - p[1 + ct_len++] = SSL_CERT_TYPE_RSA_SIGN; -#endif -#if defined(POLARSSL_ECDSA_C) - p[1 + ct_len++] = SSL_CERT_TYPE_ECDSA_SIGN; -#endif - - p[0] = (unsigned char) ct_len++; - p += ct_len; - - sa_len = 0; -#if defined(POLARSSL_SSL_PROTO_TLS1_2) - /* - * Add signature_algorithms for verify (TLS 1.2) - * - * SignatureAndHashAlgorithm supported_signature_algorithms<2..2^16-2>; - * - * struct { - * HashAlgorithm hash; - * SignatureAlgorithm signature; - * } SignatureAndHashAlgorithm; - * - * enum { (255) } HashAlgorithm; - * enum { (255) } SignatureAlgorithm; - */ - if( ssl->minor_ver == SSL_MINOR_VERSION_3 ) - { - /* - * Only use current running hash algorithm that is already required - * for requested ciphersuite. - */ - ssl->handshake->verify_sig_alg = SSL_HASH_SHA256; - - if( ssl->transform_negotiate->ciphersuite_info->mac == - POLARSSL_MD_SHA384 ) - { - ssl->handshake->verify_sig_alg = SSL_HASH_SHA384; - } - - /* - * Supported signature algorithms - */ -#if defined(POLARSSL_RSA_C) - p[2 + sa_len++] = ssl->handshake->verify_sig_alg; - p[2 + sa_len++] = SSL_SIG_RSA; -#endif -#if defined(POLARSSL_ECDSA_C) - p[2 + sa_len++] = ssl->handshake->verify_sig_alg; - p[2 + sa_len++] = SSL_SIG_ECDSA; -#endif - - p[0] = (unsigned char)( sa_len >> 8 ); - p[1] = (unsigned char)( sa_len ); - sa_len += 2; - p += sa_len; - } -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - - /* - * DistinguishedName certificate_authorities<0..2^16-1>; - * opaque DistinguishedName<1..2^16-1>; - */ - p += 2; - crt = ssl->ca_chain; - - total_dn_size = 0; - while( crt != NULL && crt->version != 0 ) - { - if( p - buf > 4096 ) - break; - - dn_size = crt->subject_raw.len; - *p++ = (unsigned char)( dn_size >> 8 ); - *p++ = (unsigned char)( dn_size ); - memcpy( p, crt->subject_raw.p, dn_size ); - p += dn_size; - - SSL_DEBUG_BUF( 3, "requested DN", p, dn_size ); - - total_dn_size += 2 + dn_size; - crt = crt->next; - } - - ssl->out_msglen = p - buf; - ssl->out_msgtype = SSL_MSG_HANDSHAKE; - ssl->out_msg[0] = SSL_HS_CERTIFICATE_REQUEST; - ssl->out_msg[4 + ct_len + sa_len] = (unsigned char)( total_dn_size >> 8 ); - ssl->out_msg[5 + ct_len + sa_len] = (unsigned char)( total_dn_size ); - - ret = ssl_write_record( ssl ); - - SSL_DEBUG_MSG( 2, ( "<= write certificate request" ) ); - - return( ret ); -} -#endif /* !POLARSSL_KEY_EXCHANGE_RSA_ENABLED && - !POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED && - !POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED && - !POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) -static int ssl_get_ecdh_params_from_cert( ssl_context *ssl ) -{ - int ret; - - if( ! pk_can_do( ssl_own_key( ssl ), POLARSSL_PK_ECKEY ) ) - { - SSL_DEBUG_MSG( 1, ( "server key not ECDH capable" ) ); - return( POLARSSL_ERR_SSL_PK_TYPE_MISMATCH ); - } - - if( ( ret = ecdh_get_params( &ssl->handshake->ecdh_ctx, - pk_ec( *ssl_own_key( ssl ) ), - POLARSSL_ECDH_OURS ) ) != 0 ) - { - SSL_DEBUG_RET( 1, ( "ecdh_get_params" ), ret ); - return( ret ); - } - - return( 0 ); -} -#endif /* POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED) || - POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ - -static int ssl_write_server_key_exchange( ssl_context *ssl ) -{ - int ret; - size_t n = 0; - const ssl_ciphersuite_t *ciphersuite_info = - ssl->transform_negotiate->ciphersuite_info; - -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) - unsigned char *p = ssl->out_msg + 4; - unsigned char *dig_signed = p; - size_t dig_signed_len = 0, len; - ((void) dig_signed); - ((void) dig_signed_len); -#endif - - SSL_DEBUG_MSG( 2, ( "=> write server key exchange" ) ); - -#if defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_PSK_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK ) - { - SSL_DEBUG_MSG( 2, ( "<= skip write server key exchange" ) ); - ssl->state++; - return( 0 ); - } -#endif - -#if defined(POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDH_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDH_ECDSA ) - { - ssl_get_ecdh_params_from_cert( ssl ); - - SSL_DEBUG_MSG( 2, ( "<= skip write server key exchange" ) ); - ssl->state++; - return( 0 ); - } -#endif - -#if defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK ) - { - /* TODO: Support identity hints */ - *(p++) = 0x00; - *(p++) = 0x00; - - n += 2; - } -#endif /* POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK ) - { - /* - * Ephemeral DH parameters: - * - * struct { - * opaque dh_p<1..2^16-1>; - * opaque dh_g<1..2^16-1>; - * opaque dh_Ys<1..2^16-1>; - * } ServerDHParams; - */ - if( ( ret = mpi_copy( &ssl->handshake->dhm_ctx.P, &ssl->dhm_P ) ) != 0 || - ( ret = mpi_copy( &ssl->handshake->dhm_ctx.G, &ssl->dhm_G ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "mpi_copy", ret ); - return( ret ); - } - - if( ( ret = dhm_make_params( &ssl->handshake->dhm_ctx, - (int) mpi_size( &ssl->handshake->dhm_ctx.P ), - p, &len, ssl->f_rng, ssl->p_rng ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "dhm_make_params", ret ); - return( ret ); - } - - dig_signed = p; - dig_signed_len = len; - - p += len; - n += len; - - SSL_DEBUG_MPI( 3, "DHM: X ", &ssl->handshake->dhm_ctx.X ); - SSL_DEBUG_MPI( 3, "DHM: P ", &ssl->handshake->dhm_ctx.P ); - SSL_DEBUG_MPI( 3, "DHM: G ", &ssl->handshake->dhm_ctx.G ); - SSL_DEBUG_MPI( 3, "DHM: GX", &ssl->handshake->dhm_ctx.GX ); - } -#endif /* POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE__SOME__ECDHE_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK ) - { - /* - * Ephemeral ECDH parameters: - * - * struct { - * ECParameters curve_params; - * ECPoint public; - * } ServerECDHParams; - */ - const ecp_curve_info **curve = NULL; -#if defined(POLARSSL_SSL_SET_CURVES) - const ecp_group_id *gid; - - /* Match our preference list against the offered curves */ - for( gid = ssl->curve_list; *gid != POLARSSL_ECP_DP_NONE; gid++ ) - for( curve = ssl->handshake->curves; *curve != NULL; curve++ ) - if( (*curve)->grp_id == *gid ) - goto curve_matching_done; - -curve_matching_done: -#else - curve = ssl->handshake->curves; -#endif - - if( *curve == NULL ) - { - SSL_DEBUG_MSG( 1, ( "no matching curve for ECDHE" ) ); - return( POLARSSL_ERR_SSL_NO_CIPHER_CHOSEN ); - } - - SSL_DEBUG_MSG( 2, ( "ECDHE curve: %s", (*curve)->name ) ); - - if( ( ret = ecp_use_known_dp( &ssl->handshake->ecdh_ctx.grp, - (*curve)->grp_id ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ecp_use_known_dp", ret ); - return( ret ); - } - - if( ( ret = ecdh_make_params( &ssl->handshake->ecdh_ctx, &len, - p, SSL_MAX_CONTENT_LEN - n, - ssl->f_rng, ssl->p_rng ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ecdh_make_params", ret ); - return( ret ); - } - - dig_signed = p; - dig_signed_len = len; - - p += len; - n += len; - - SSL_DEBUG_ECP( 3, "ECDH: Q ", &ssl->handshake->ecdh_ctx.Q ); - } -#endif /* POLARSSL_KEY_EXCHANGE__SOME__ECDHE_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA ) - { - size_t signature_len = 0; - unsigned int hashlen = 0; - unsigned char hash[64]; - md_type_t md_alg = POLARSSL_MD_NONE; - - /* - * Choose hash algorithm. NONE means MD5 + SHA1 here. - */ -#if defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == SSL_MINOR_VERSION_3 ) - { - md_alg = ssl_md_alg_from_hash( ssl->handshake->sig_alg ); - - if( md_alg == POLARSSL_MD_NONE ) - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - } - else -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_1) - if( ciphersuite_info->key_exchange == - POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA ) - { - md_alg = POLARSSL_MD_SHA1; - } - else -#endif - { - md_alg = POLARSSL_MD_NONE; - } - - /* - * Compute the hash to be signed - */ -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_1) - if( md_alg == POLARSSL_MD_NONE ) - { - md5_context md5; - sha1_context sha1; - - md5_init( &md5 ); - sha1_init( &sha1 ); - - /* - * digitally-signed struct { - * opaque md5_hash[16]; - * opaque sha_hash[20]; - * }; - * - * md5_hash - * MD5(ClientHello.random + ServerHello.random - * + ServerParams); - * sha_hash - * SHA(ClientHello.random + ServerHello.random - * + ServerParams); - */ - md5_starts( &md5 ); - md5_update( &md5, ssl->handshake->randbytes, 64 ); - md5_update( &md5, dig_signed, dig_signed_len ); - md5_finish( &md5, hash ); - - sha1_starts( &sha1 ); - sha1_update( &sha1, ssl->handshake->randbytes, 64 ); - sha1_update( &sha1, dig_signed, dig_signed_len ); - sha1_finish( &sha1, hash + 16 ); - - hashlen = 36; - - md5_free( &md5 ); - sha1_free( &sha1 ); - } - else -#endif /* POLARSSL_SSL_PROTO_SSL3 || POLARSSL_SSL_PROTO_TLS1 || \ - POLARSSL_SSL_PROTO_TLS1_1 */ -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_2) - if( md_alg != POLARSSL_MD_NONE ) - { - md_context_t ctx; - const md_info_t *md_info = md_info_from_type( md_alg ); - - md_init( &ctx ); - - /* Info from md_alg will be used instead */ - hashlen = 0; - - /* - * digitally-signed struct { - * opaque client_random[32]; - * opaque server_random[32]; - * ServerDHParams params; - * }; - */ - if( ( ret = md_init_ctx( &ctx, md_info ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "md_init_ctx", ret ); - return( ret ); - } - - md_starts( &ctx ); - md_update( &ctx, ssl->handshake->randbytes, 64 ); - md_update( &ctx, dig_signed, dig_signed_len ); - md_finish( &ctx, hash ); - md_free( &ctx ); - } - else -#endif /* POLARSSL_SSL_PROTO_TLS1 || POLARSSL_SSL_PROTO_TLS1_1 || \ - POLARSSL_SSL_PROTO_TLS1_2 */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - SSL_DEBUG_BUF( 3, "parameters hash", hash, hashlen != 0 ? hashlen : - (unsigned int) ( md_info_from_type( md_alg ) )->size ); - - /* - * Make the signature - */ - if( ssl_own_key( ssl ) == NULL ) - { - SSL_DEBUG_MSG( 1, ( "got no private key" ) ); - return( POLARSSL_ERR_SSL_PRIVATE_KEY_REQUIRED ); - } - -#if defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == SSL_MINOR_VERSION_3 ) - { - *(p++) = ssl->handshake->sig_alg; - *(p++) = ssl_sig_from_pk( ssl_own_key( ssl ) ); - - n += 2; - } -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - - if( ( ret = pk_sign( ssl_own_key( ssl ), md_alg, hash, hashlen, - p + 2 , &signature_len, - ssl->f_rng, ssl->p_rng ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "pk_sign", ret ); - return( ret ); - } - - *(p++) = (unsigned char)( signature_len >> 8 ); - *(p++) = (unsigned char)( signature_len ); - n += 2; - - SSL_DEBUG_BUF( 3, "my signature", p, signature_len ); - - p += signature_len; - n += signature_len; - } -#endif /* POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) || - POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */ - - ssl->out_msglen = 4 + n; - ssl->out_msgtype = SSL_MSG_HANDSHAKE; - ssl->out_msg[0] = SSL_HS_SERVER_KEY_EXCHANGE; - - ssl->state++; - - if( ( ret = ssl_write_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_write_record", ret ); - return( ret ); - } - - SSL_DEBUG_MSG( 2, ( "<= write server key exchange" ) ); - - return( 0 ); -} - -static int ssl_write_server_hello_done( ssl_context *ssl ) -{ - int ret; - - SSL_DEBUG_MSG( 2, ( "=> write server hello done" ) ); - - ssl->out_msglen = 4; - ssl->out_msgtype = SSL_MSG_HANDSHAKE; - ssl->out_msg[0] = SSL_HS_SERVER_HELLO_DONE; - - ssl->state++; - - if( ( ret = ssl_write_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_write_record", ret ); - return( ret ); - } - - SSL_DEBUG_MSG( 2, ( "<= write server hello done" ) ); - - return( 0 ); -} - -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) -static int ssl_parse_client_dh_public( ssl_context *ssl, unsigned char **p, - const unsigned char *end ) -{ - int ret = POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE; - size_t n; - - /* - * Receive G^Y mod P, premaster = (G^Y)^X mod P - */ - if( *p + 2 > end ) - { - SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } - - n = ( (*p)[0] << 8 ) | (*p)[1]; - *p += 2; - - if( *p + n > end ) - { - SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } - - if( ( ret = dhm_read_public( &ssl->handshake->dhm_ctx, *p, n ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "dhm_read_public", ret ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); - } - - *p += n; - - SSL_DEBUG_MPI( 3, "DHM: GY", &ssl->handshake->dhm_ctx.GY ); - - return( ret ); -} -#endif /* POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) -static int ssl_parse_encrypted_pms( ssl_context *ssl, - const unsigned char *p, - const unsigned char *end, - size_t pms_offset ) -{ - int ret; - size_t len = pk_get_len( ssl_own_key( ssl ) ); - unsigned char *pms = ssl->handshake->premaster + pms_offset; - - if( ! pk_can_do( ssl_own_key( ssl ), POLARSSL_PK_RSA ) ) - { - SSL_DEBUG_MSG( 1, ( "got no RSA private key" ) ); - return( POLARSSL_ERR_SSL_PRIVATE_KEY_REQUIRED ); - } - - /* - * Decrypt the premaster using own private RSA key - */ -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->minor_ver != SSL_MINOR_VERSION_0 ) - { - if( *p++ != ( ( len >> 8 ) & 0xFF ) || - *p++ != ( ( len ) & 0xFF ) ) - { - SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } - } -#endif - - if( p + len != end ) - { - SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } - - ret = pk_decrypt( ssl_own_key( ssl ), p, len, - pms, &ssl->handshake->pmslen, - sizeof( ssl->handshake->premaster ) - pms_offset, - ssl->f_rng, ssl->p_rng ); - - if( ret != 0 || ssl->handshake->pmslen != 48 || - pms[0] != ssl->handshake->max_major_ver || - pms[1] != ssl->handshake->max_minor_ver ) - { - SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - - /* - * Protection against Bleichenbacher's attack: - * invalid PKCS#1 v1.5 padding must not cause - * the connection to end immediately; instead, - * send a bad_record_mac later in the handshake. - */ - ssl->handshake->pmslen = 48; - - ret = ssl->f_rng( ssl->p_rng, pms, ssl->handshake->pmslen ); - if( ret != 0 ) - return( ret ); - } - - return( ret ); -} -#endif /* POLARSSL_KEY_EXCHANGE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED */ - -#if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED) -static int ssl_parse_client_psk_identity( ssl_context *ssl, unsigned char **p, - const unsigned char *end ) -{ - int ret = 0; - size_t n; - - if( ssl->f_psk == NULL && - ( ssl->psk == NULL || ssl->psk_identity == NULL || - ssl->psk_identity_len == 0 || ssl->psk_len == 0 ) ) - { - SSL_DEBUG_MSG( 1, ( "got no pre-shared key" ) ); - return( POLARSSL_ERR_SSL_PRIVATE_KEY_REQUIRED ); - } - - /* - * Receive client pre-shared key identity name - */ - if( *p + 2 > end ) - { - SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } - - n = ( (*p)[0] << 8 ) | (*p)[1]; - *p += 2; - - if( n < 1 || n > 65535 || *p + n > end ) - { - SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } - - if( ssl->f_psk != NULL ) - { - if( ssl->f_psk( ssl->p_psk, ssl, *p, n ) != 0 ) - ret = POLARSSL_ERR_SSL_UNKNOWN_IDENTITY; - } - else - { - /* Identity is not a big secret since clients send it in the clear, - * but treat it carefully anyway, just in case */ - if( n != ssl->psk_identity_len || - safer_memcmp( ssl->psk_identity, *p, n ) != 0 ) - { - ret = POLARSSL_ERR_SSL_UNKNOWN_IDENTITY; - } - } - - if( ret == POLARSSL_ERR_SSL_UNKNOWN_IDENTITY ) - { - SSL_DEBUG_BUF( 3, "Unknown PSK identity", *p, n ); - if( ( ret = ssl_send_alert_message( ssl, - SSL_ALERT_LEVEL_FATAL, - SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY ) ) != 0 ) - { - return( ret ); - } - - return( POLARSSL_ERR_SSL_UNKNOWN_IDENTITY ); - } - - *p += n; - - return( 0 ); -} -#endif /* POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED */ - -static int ssl_parse_client_key_exchange( ssl_context *ssl ) -{ - int ret; - const ssl_ciphersuite_t *ciphersuite_info; - - ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> parse client key exchange" ) ); - - if( ( ret = ssl_read_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_read_record", ret ); - return( ret ); - } - - if( ssl->in_msgtype != SSL_MSG_HANDSHAKE ) - { - SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } - - if( ssl->in_msg[0] != SSL_HS_CLIENT_KEY_EXCHANGE ) - { - SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } - -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_RSA ) - { - unsigned char *p = ssl->in_msg + 4; - unsigned char *end = ssl->in_msg + ssl->in_hslen; - - if( ( ret = ssl_parse_client_dh_public( ssl, &p, end ) ) != 0 ) - { - SSL_DEBUG_RET( 1, ( "ssl_parse_client_dh_public" ), ret ); - return( ret ); - } - - if( p != end ) - { - SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } - - ssl->handshake->pmslen = POLARSSL_PREMASTER_SIZE; - - if( ( ret = dhm_calc_secret( &ssl->handshake->dhm_ctx, - ssl->handshake->premaster, - &ssl->handshake->pmslen, - ssl->f_rng, ssl->p_rng ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "dhm_calc_secret", ret ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS ); - } - - SSL_DEBUG_MPI( 3, "DHM: K ", &ssl->handshake->dhm_ctx.K ); - } - else -#endif /* POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ - defined(POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDH_RSA || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDH_ECDSA ) - { - if( ( ret = ecdh_read_public( &ssl->handshake->ecdh_ctx, - ssl->in_msg + 4, ssl->in_hslen - 4 ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ecdh_read_public", ret ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); - } - - SSL_DEBUG_ECP( 3, "ECDH: Qp ", &ssl->handshake->ecdh_ctx.Qp ); - - if( ( ret = ecdh_calc_secret( &ssl->handshake->ecdh_ctx, - &ssl->handshake->pmslen, - ssl->handshake->premaster, - POLARSSL_MPI_MAX_SIZE, - ssl->f_rng, ssl->p_rng ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ecdh_calc_secret", ret ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS ); - } - - SSL_DEBUG_MPI( 3, "ECDH: z ", &ssl->handshake->ecdh_ctx.z ); - } - else -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED || - POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK ) - { - unsigned char *p = ssl->in_msg + 4; - unsigned char *end = ssl->in_msg + ssl->in_hslen; - - if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) - { - SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); - return( ret ); - } - - if( p != end ) - { - SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } - - if( ( ret = ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else -#endif /* POLARSSL_KEY_EXCHANGE_PSK_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK ) - { - unsigned char *p = ssl->in_msg + 4; - unsigned char *end = ssl->in_msg + ssl->in_hslen; - - if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) - { - SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); - return( ret ); - } - - if( ( ret = ssl_parse_encrypted_pms( ssl, p, end, 2 ) ) != 0 ) - { - SSL_DEBUG_RET( 1, ( "ssl_parse_encrypted_pms" ), ret ); - return( ret ); - } - - if( ( ret = ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else -#endif /* POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK ) - { - unsigned char *p = ssl->in_msg + 4; - unsigned char *end = ssl->in_msg + ssl->in_hslen; - - if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) - { - SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); - return( ret ); - } - if( ( ret = ssl_parse_client_dh_public( ssl, &p, end ) ) != 0 ) - { - SSL_DEBUG_RET( 1, ( "ssl_parse_client_dh_public" ), ret ); - return( ret ); - } - - if( p != end ) - { - SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } - - if( ( ret = ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else -#endif /* POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK ) - { - unsigned char *p = ssl->in_msg + 4; - unsigned char *end = ssl->in_msg + ssl->in_hslen; - - if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) - { - SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); - return( ret ); - } - - if( ( ret = ecdh_read_public( &ssl->handshake->ecdh_ctx, - p, end - p ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ecdh_read_public", ret ); - return( POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); - } - - SSL_DEBUG_ECP( 3, "ECDH: Qp ", &ssl->handshake->ecdh_ctx.Qp ); - - if( ( ret = ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA ) - { - if( ( ret = ssl_parse_encrypted_pms( ssl, - ssl->in_msg + 4, - ssl->in_msg + ssl->in_hslen, - 0 ) ) != 0 ) - { - SSL_DEBUG_RET( 1, ( "ssl_parse_parse_encrypted_pms_secret" ), ret ); - return( ret ); - } - } - else -#endif /* POLARSSL_KEY_EXCHANGE_RSA_ENABLED */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - if( ( ret = ssl_derive_keys( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_derive_keys", ret ); - return( ret ); - } - - ssl->state++; - - SSL_DEBUG_MSG( 2, ( "<= parse client key exchange" ) ); - - return( 0 ); -} - -#if !defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) -static int ssl_parse_certificate_verify( ssl_context *ssl ) -{ - const ssl_ciphersuite_t *ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> parse certificate verify" ) ); - - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK ) - { - SSL_DEBUG_MSG( 2, ( "<= skip parse certificate verify" ) ); - ssl->state++; - return( 0 ); - } - - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); -} -#else -static int ssl_parse_certificate_verify( ssl_context *ssl ) -{ - int ret = POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE; - size_t sa_len, sig_len; - unsigned char hash[48]; - unsigned char *hash_start = hash; - size_t hashlen; -#if defined(POLARSSL_SSL_PROTO_TLS1_2) - pk_type_t pk_alg; -#endif - md_type_t md_alg; - const ssl_ciphersuite_t *ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> parse certificate verify" ) ); - - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK ) - { - SSL_DEBUG_MSG( 2, ( "<= skip parse certificate verify" ) ); - ssl->state++; - return( 0 ); - } - - if( ssl->session_negotiate->peer_cert == NULL ) - { - SSL_DEBUG_MSG( 2, ( "<= skip parse certificate verify" ) ); - ssl->state++; - return( 0 ); - } - - ssl->handshake->calc_verify( ssl, hash ); - - if( ( ret = ssl_read_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_read_record", ret ); - return( ret ); - } - - ssl->state++; - - if( ssl->in_msgtype != SSL_MSG_HANDSHAKE ) - { - SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); - } - - if( ssl->in_msg[0] != SSL_HS_CERTIFICATE_VERIFY ) - { - SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); - } - - /* - * 0 . 0 handshake type - * 1 . 3 handshake length - * 4 . 5 sig alg (TLS 1.2 only) - * 4+n . 5+n signature length (n = sa_len) - * 6+n . 6+n+m signature (m = sig_len) - */ - -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_1) - if( ssl->minor_ver != SSL_MINOR_VERSION_3 ) - { - sa_len = 0; - - md_alg = POLARSSL_MD_NONE; - hashlen = 36; - - /* For ECDSA, use SHA-1, not MD-5 + SHA-1 */ - if( pk_can_do( &ssl->session_negotiate->peer_cert->pk, - POLARSSL_PK_ECDSA ) ) - { - hash_start += 16; - hashlen -= 16; - md_alg = POLARSSL_MD_SHA1; - } - } - else -#endif /* POLARSSL_SSL_PROTO_SSL3 || POLARSSL_SSL_PROTO_TLS1 || - POLARSSL_SSL_PROTO_TLS1_1 */ -#if defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == SSL_MINOR_VERSION_3 ) - { - sa_len = 2; - - /* - * Hash - */ - if( ssl->in_msg[4] != ssl->handshake->verify_sig_alg ) - { - SSL_DEBUG_MSG( 1, ( "peer not adhering to requested sig_alg" - " for verify message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); - } - - md_alg = ssl_md_alg_from_hash( ssl->handshake->verify_sig_alg ); - - /* Info from md_alg will be used instead */ - hashlen = 0; - - /* - * Signature - */ - if( ( pk_alg = ssl_pk_alg_from_sig( ssl->in_msg[5] ) ) - == POLARSSL_PK_NONE ) - { - SSL_DEBUG_MSG( 1, ( "peer not adhering to requested sig_alg" - " for verify message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); - } - - /* - * Check the certificate's key type matches the signature alg - */ - if( ! pk_can_do( &ssl->session_negotiate->peer_cert->pk, pk_alg ) ) - { - SSL_DEBUG_MSG( 1, ( "sig_alg doesn't match cert key" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); - } - } - else -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - sig_len = ( ssl->in_msg[4 + sa_len] << 8 ) | ssl->in_msg[5 + sa_len]; - - if( sa_len + sig_len + 6 != ssl->in_hslen ) - { - SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); - } - - if( ( ret = pk_verify( &ssl->session_negotiate->peer_cert->pk, - md_alg, hash_start, hashlen, - ssl->in_msg + 6 + sa_len, sig_len ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "pk_verify", ret ); - return( ret ); - } - - SSL_DEBUG_MSG( 2, ( "<= parse certificate verify" ) ); - - return( ret ); -} -#endif /* !POLARSSL_KEY_EXCHANGE_RSA_ENABLED && - !POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED && - !POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED */ - -#if defined(POLARSSL_SSL_SESSION_TICKETS) -static int ssl_write_new_session_ticket( ssl_context *ssl ) -{ - int ret; - size_t tlen; - uint32_t lifetime = (uint32_t) ssl->ticket_lifetime; - - SSL_DEBUG_MSG( 2, ( "=> write new session ticket" ) ); - - ssl->out_msgtype = SSL_MSG_HANDSHAKE; - ssl->out_msg[0] = SSL_HS_NEW_SESSION_TICKET; - - /* - * struct { - * uint32 ticket_lifetime_hint; - * opaque ticket<0..2^16-1>; - * } NewSessionTicket; - * - * 4 . 7 ticket_lifetime_hint (0 = unspecified) - * 8 . 9 ticket_len (n) - * 10 . 9+n ticket content - */ - - ssl->out_msg[4] = ( lifetime >> 24 ) & 0xFF; - ssl->out_msg[5] = ( lifetime >> 16 ) & 0xFF; - ssl->out_msg[6] = ( lifetime >> 8 ) & 0xFF; - ssl->out_msg[7] = ( lifetime ) & 0xFF; - - if( ( ret = ssl_write_ticket( ssl, &tlen ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_write_ticket", ret ); - tlen = 0; - } - - ssl->out_msg[8] = (unsigned char)( ( tlen >> 8 ) & 0xFF ); - ssl->out_msg[9] = (unsigned char)( ( tlen ) & 0xFF ); - - ssl->out_msglen = 10 + tlen; - - /* - * Morally equivalent to updating ssl->state, but NewSessionTicket and - * ChangeCipherSpec share the same state. - */ - ssl->handshake->new_session_ticket = 0; - - if( ( ret = ssl_write_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_write_record", ret ); - return( ret ); - } - - SSL_DEBUG_MSG( 2, ( "<= write new session ticket" ) ); - - return( 0 ); -} -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - -/* - * SSL handshake -- server side -- single step - */ -int ssl_handshake_server_step( ssl_context *ssl ) -{ - int ret = 0; - - if( ssl->state == SSL_HANDSHAKE_OVER ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - SSL_DEBUG_MSG( 2, ( "server state: %d", ssl->state ) ); - - if( ( ret = ssl_flush_output( ssl ) ) != 0 ) - return( ret ); - - switch( ssl->state ) - { - case SSL_HELLO_REQUEST: - ssl->state = SSL_CLIENT_HELLO; - break; - - /* - * <== ClientHello - */ - case SSL_CLIENT_HELLO: - ret = ssl_parse_client_hello( ssl ); - break; - - /* - * ==> ServerHello - * Certificate - * ( ServerKeyExchange ) - * ( CertificateRequest ) - * ServerHelloDone - */ - case SSL_SERVER_HELLO: - ret = ssl_write_server_hello( ssl ); - break; - - case SSL_SERVER_CERTIFICATE: - ret = ssl_write_certificate( ssl ); - break; - - case SSL_SERVER_KEY_EXCHANGE: - ret = ssl_write_server_key_exchange( ssl ); - break; - - case SSL_CERTIFICATE_REQUEST: - ret = ssl_write_certificate_request( ssl ); - break; - - case SSL_SERVER_HELLO_DONE: - ret = ssl_write_server_hello_done( ssl ); - break; - - /* - * <== ( Certificate/Alert ) - * ClientKeyExchange - * ( CertificateVerify ) - * ChangeCipherSpec - * Finished - */ - case SSL_CLIENT_CERTIFICATE: - ret = ssl_parse_certificate( ssl ); - break; - - case SSL_CLIENT_KEY_EXCHANGE: - ret = ssl_parse_client_key_exchange( ssl ); - break; - - case SSL_CERTIFICATE_VERIFY: - ret = ssl_parse_certificate_verify( ssl ); - break; - - case SSL_CLIENT_CHANGE_CIPHER_SPEC: - ret = ssl_parse_change_cipher_spec( ssl ); - break; - - case SSL_CLIENT_FINISHED: - ret = ssl_parse_finished( ssl ); - break; - - /* - * ==> ( NewSessionTicket ) - * ChangeCipherSpec - * Finished - */ - case SSL_SERVER_CHANGE_CIPHER_SPEC: -#if defined(POLARSSL_SSL_SESSION_TICKETS) - if( ssl->handshake->new_session_ticket != 0 ) - ret = ssl_write_new_session_ticket( ssl ); - else -#endif - ret = ssl_write_change_cipher_spec( ssl ); - break; - - case SSL_SERVER_FINISHED: - ret = ssl_write_finished( ssl ); - break; - - case SSL_FLUSH_BUFFERS: - SSL_DEBUG_MSG( 2, ( "handshake: done" ) ); - ssl->state = SSL_HANDSHAKE_WRAPUP; - break; - - case SSL_HANDSHAKE_WRAPUP: - ssl_handshake_wrapup( ssl ); - break; - - default: - SSL_DEBUG_MSG( 1, ( "invalid state %d", ssl->state ) ); - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - } - - return( ret ); -} -#endif /* POLARSSL_SSL_SRV_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_tls.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_tls.c deleted file mode 100644 index 70b3711..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/ssl_tls.c +++ /dev/null @@ -1,4884 +0,0 @@ -/* - * SSLv3/TLSv1 shared functions - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The SSL 3.0 specification was drafted by Netscape in 1996, - * and became an IETF standard in 1999. - * - * http://wp.netscape.com/eng/ssl3/ - * http://www.ietf.org/rfc/rfc2246.txt - * http://www.ietf.org/rfc/rfc4346.txt - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_SSL_TLS_C) - -#include "polarssl/debug.h" -#include "polarssl/ssl.h" - -#if defined(POLARSSL_X509_CRT_PARSE_C) && \ - defined(POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE) -#include "polarssl/oid.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include - -#include "hal_crypto.h" - -#if defined(_MSC_VER) && !defined strcasecmp && !defined(EFIX64) && \ - !defined(EFI32) -#define strcasecmp _stricmp -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) -/* - * Convert max_fragment_length codes to length. - * RFC 6066 says: - * enum{ - * 2^9(1), 2^10(2), 2^11(3), 2^12(4), (255) - * } MaxFragmentLength; - * and we add 0 -> extension unused - */ -//static -unsigned int mfl_code_to_length[SSL_MAX_FRAG_LEN_INVALID] = -{ - 16384, /* = SSL_MAX_CONTENT_LEN */ /* SSL_MAX_FRAG_LEN_NONE */ - 512, /* SSL_MAX_FRAG_LEN_512 */ - 1024, /* SSL_MAX_FRAG_LEN_1024 */ - 2048, /* SSL_MAX_FRAG_LEN_2048 */ - 4096, /* SSL_MAX_FRAG_LEN_4096 */ -}; -#endif /* POLARSSL_SSL_MAX_FRAGMENT_LENGTH */ - -static int ssl_session_copy( ssl_session *dst, const ssl_session *src ) -{ - ssl_session_free( dst ); - memcpy( dst, src, sizeof( ssl_session ) ); - -#if defined(POLARSSL_X509_CRT_PARSE_C) - if( src->peer_cert != NULL ) - { - int ret; - - dst->peer_cert = (x509_crt *) polarssl_malloc( sizeof(x509_crt) ); - if( dst->peer_cert == NULL ) - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - - x509_crt_init( dst->peer_cert ); - - if( ( ret = x509_crt_parse_der( dst->peer_cert, src->peer_cert->raw.p, - src->peer_cert->raw.len ) ) != 0 ) - { - polarssl_free( dst->peer_cert ); - dst->peer_cert = NULL; - return( ret ); - } - } -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -#if defined(POLARSSL_SSL_SESSION_TICKETS) - if( src->ticket != NULL ) - { - dst->ticket = (unsigned char *) polarssl_malloc( src->ticket_len ); - if( dst->ticket == NULL ) - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - - memcpy( dst->ticket, src->ticket, src->ticket_len ); - } -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - - return( 0 ); -} - -#if defined(POLARSSL_SSL_HW_RECORD_ACCEL) -int (*ssl_hw_record_init)( ssl_context *ssl, - const unsigned char *key_enc, const unsigned char *key_dec, - size_t keylen, - const unsigned char *iv_enc, const unsigned char *iv_dec, - size_t ivlen, - const unsigned char *mac_enc, const unsigned char *mac_dec, - size_t maclen ) = NULL; -int (*ssl_hw_record_activate)( ssl_context *ssl, int direction) = NULL; -int (*ssl_hw_record_reset)( ssl_context *ssl ) = NULL; -int (*ssl_hw_record_write)( ssl_context *ssl ) = NULL; -int (*ssl_hw_record_read)( ssl_context *ssl ) = NULL; -int (*ssl_hw_record_finish)( ssl_context *ssl ) = NULL; -#endif /* POLARSSL_SSL_HW_RECORD_ACCEL */ - -/* - * Key material generation - */ -#if defined(POLARSSL_SSL_PROTO_SSL3) -static int ssl3_prf( const unsigned char *secret, size_t slen, - const char *label, - const unsigned char *random, size_t rlen, - unsigned char *dstbuf, size_t dlen ) -{ - size_t i; - md5_context md5; - sha1_context sha1; - unsigned char padding[16]; - unsigned char sha1sum[20]; - ((void)label); - - md5_init( &md5 ); - sha1_init( &sha1 ); - - /* - * SSLv3: - * block = - * MD5( secret + SHA1( 'A' + secret + random ) ) + - * MD5( secret + SHA1( 'BB' + secret + random ) ) + - * MD5( secret + SHA1( 'CCC' + secret + random ) ) + - * ... - */ - for( i = 0; i < dlen / 16; i++ ) - { - memset( padding, (unsigned char) ('A' + i), 1 + i ); - - sha1_starts( &sha1 ); - sha1_update( &sha1, padding, 1 + i ); - sha1_update( &sha1, secret, slen ); - sha1_update( &sha1, random, rlen ); - sha1_finish( &sha1, sha1sum ); - - md5_starts( &md5 ); - md5_update( &md5, secret, slen ); - md5_update( &md5, sha1sum, 20 ); - md5_finish( &md5, dstbuf + i * 16 ); - } - - md5_free( &md5 ); - sha1_free( &sha1 ); - - polarssl_zeroize( padding, sizeof( padding ) ); - polarssl_zeroize( sha1sum, sizeof( sha1sum ) ); - - return( 0 ); -} -#endif /* POLARSSL_SSL_PROTO_SSL3 */ - -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) -static int tls1_prf( const unsigned char *secret, size_t slen, - const char *label, - const unsigned char *random, size_t rlen, - unsigned char *dstbuf, size_t dlen ) -{ - size_t nb, hs; - size_t i, j, k; - const unsigned char *S1, *S2; - unsigned char tmp[128]; - unsigned char h_i[20]; - - if( sizeof( tmp ) < 20 + strlen( label ) + rlen ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - hs = ( slen + 1 ) / 2; - S1 = secret; - S2 = secret + slen - hs; - - nb = strlen( label ); - memcpy( tmp + 20, label, nb ); - memcpy( tmp + 20 + nb, random, rlen ); - nb += rlen; - - /* - * First compute P_md5(secret,label+random)[0..dlen] - */ - md5_hmac( S1, hs, tmp + 20, nb, 4 + tmp ); - - for( i = 0; i < dlen; i += 16 ) - { - md5_hmac( S1, hs, 4 + tmp, 16 + nb, h_i ); - md5_hmac( S1, hs, 4 + tmp, 16, 4 + tmp ); - - k = ( i + 16 > dlen ) ? dlen % 16 : 16; - - for( j = 0; j < k; j++ ) - dstbuf[i + j] = h_i[j]; - } - - /* - * XOR out with P_sha1(secret,label+random)[0..dlen] - */ - sha1_hmac( S2, hs, tmp + 20, nb, tmp ); - - for( i = 0; i < dlen; i += 20 ) - { - sha1_hmac( S2, hs, tmp, 20 + nb, h_i ); - sha1_hmac( S2, hs, tmp, 20, tmp ); - - k = ( i + 20 > dlen ) ? dlen % 20 : 20; - - for( j = 0; j < k; j++ ) - dstbuf[i + j] = (unsigned char)( dstbuf[i + j] ^ h_i[j] ); - } - - polarssl_zeroize( tmp, sizeof( tmp ) ); - polarssl_zeroize( h_i, sizeof( h_i ) ); - - return( 0 ); -} -#endif /* POLARSSL_SSL_PROTO_TLS1) || POLARSSL_SSL_PROTO_TLS1_1 */ - -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -#if defined(POLARSSL_SHA256_C) -static int tls_prf_sha256( const unsigned char *secret, size_t slen, - const char *label, - const unsigned char *random, size_t rlen, - unsigned char *dstbuf, size_t dlen ) -{ - size_t nb; - size_t i, j, k; - unsigned char tmp[128]; - unsigned char h_i[32]; - - if( sizeof( tmp ) < 32 + strlen( label ) + rlen ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - nb = strlen( label ); - memcpy( tmp + 32, label, nb ); - memcpy( tmp + 32 + nb, random, rlen ); - nb += rlen; - - /* - * Compute P_(secret, label + random)[0..dlen] - */ - sha256_hmac( secret, slen, tmp + 32, nb, tmp, 0 ); - - for( i = 0; i < dlen; i += 32 ) - { - sha256_hmac( secret, slen, tmp, 32 + nb, h_i, 0 ); - sha256_hmac( secret, slen, tmp, 32, tmp, 0 ); - - k = ( i + 32 > dlen ) ? dlen % 32 : 32; - - for( j = 0; j < k; j++ ) - dstbuf[i + j] = h_i[j]; - } - - polarssl_zeroize( tmp, sizeof( tmp ) ); - polarssl_zeroize( h_i, sizeof( h_i ) ); - - return( 0 ); -} -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) -static int tls_prf_sha384( const unsigned char *secret, size_t slen, - const char *label, - const unsigned char *random, size_t rlen, - unsigned char *dstbuf, size_t dlen ) -{ - size_t nb; - size_t i, j, k; - unsigned char tmp[128]; - unsigned char h_i[48]; - - if( sizeof( tmp ) < 48 + strlen( label ) + rlen ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - nb = strlen( label ); - memcpy( tmp + 48, label, nb ); - memcpy( tmp + 48 + nb, random, rlen ); - nb += rlen; - - /* - * Compute P_(secret, label + random)[0..dlen] - */ - sha512_hmac( secret, slen, tmp + 48, nb, tmp, 1 ); - - for( i = 0; i < dlen; i += 48 ) - { - sha512_hmac( secret, slen, tmp, 48 + nb, h_i, 1 ); - sha512_hmac( secret, slen, tmp, 48, tmp, 1 ); - - k = ( i + 48 > dlen ) ? dlen % 48 : 48; - - for( j = 0; j < k; j++ ) - dstbuf[i + j] = h_i[j]; - } - - polarssl_zeroize( tmp, sizeof( tmp ) ); - polarssl_zeroize( h_i, sizeof( h_i ) ); - - return( 0 ); -} -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - -static void ssl_update_checksum_start( ssl_context *, const unsigned char *, size_t ); - -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_1) -static void ssl_update_checksum_md5sha1( ssl_context *, const unsigned char *, size_t ); -#endif - -#if defined(POLARSSL_SSL_PROTO_SSL3) -static void ssl_calc_verify_ssl( ssl_context *, unsigned char * ); -static void ssl_calc_finished_ssl( ssl_context *, unsigned char *, int ); -#endif - -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) -static void ssl_calc_verify_tls( ssl_context *, unsigned char * ); -static void ssl_calc_finished_tls( ssl_context *, unsigned char *, int ); -#endif - -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -#if defined(POLARSSL_SHA256_C) -static void ssl_update_checksum_sha256( ssl_context *, const unsigned char *, size_t ); -static void ssl_calc_verify_tls_sha256( ssl_context *,unsigned char * ); -static void ssl_calc_finished_tls_sha256( ssl_context *,unsigned char *, int ); -#endif - -#if defined(POLARSSL_SHA512_C) -static void ssl_update_checksum_sha384( ssl_context *, const unsigned char *, size_t ); -static void ssl_calc_verify_tls_sha384( ssl_context *, unsigned char * ); -static void ssl_calc_finished_tls_sha384( ssl_context *, unsigned char *, int ); -#endif -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - -int ssl_derive_keys( ssl_context *ssl ) -{ - int ret = 0; - unsigned char tmp[64]; - unsigned char keyblk[256]; - unsigned char *key1; - unsigned char *key2; - unsigned char *mac_enc; - unsigned char *mac_dec; - size_t iv_copy_len; - const cipher_info_t *cipher_info; - const md_info_t *md_info; - - ssl_session *session = ssl->session_negotiate; - ssl_transform *transform = ssl->transform_negotiate; - ssl_handshake_params *handshake = ssl->handshake; - - SSL_DEBUG_MSG( 2, ( "=> derive keys" ) ); - - cipher_info = cipher_info_from_type( transform->ciphersuite_info->cipher ); - if( cipher_info == NULL ) - { - SSL_DEBUG_MSG( 1, ( "cipher info for %d not found", - transform->ciphersuite_info->cipher ) ); - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - } - - md_info = md_info_from_type( transform->ciphersuite_info->mac ); - if( md_info == NULL ) - { - SSL_DEBUG_MSG( 1, ( "md info for %d not found", - transform->ciphersuite_info->mac ) ); - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - } - - /* - * Set appropriate PRF function and other SSL / TLS / TLS1.2 functions - */ -#if defined(POLARSSL_SSL_PROTO_SSL3) - if( ssl->minor_ver == SSL_MINOR_VERSION_0 ) - { - handshake->tls_prf = ssl3_prf; - handshake->calc_verify = ssl_calc_verify_ssl; - handshake->calc_finished = ssl_calc_finished_ssl; - } - else -#endif -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) - if( ssl->minor_ver < SSL_MINOR_VERSION_3 ) - { - handshake->tls_prf = tls1_prf; - handshake->calc_verify = ssl_calc_verify_tls; - handshake->calc_finished = ssl_calc_finished_tls; - } - else -#endif -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -#if defined(POLARSSL_SHA512_C) - if( ssl->minor_ver == SSL_MINOR_VERSION_3 && - transform->ciphersuite_info->mac == POLARSSL_MD_SHA384 ) - { - handshake->tls_prf = tls_prf_sha384; - handshake->calc_verify = ssl_calc_verify_tls_sha384; - handshake->calc_finished = ssl_calc_finished_tls_sha384; - } - else -#endif -#if defined(POLARSSL_SHA256_C) - if( ssl->minor_ver == SSL_MINOR_VERSION_3 ) - { - handshake->tls_prf = tls_prf_sha256; - handshake->calc_verify = ssl_calc_verify_tls_sha256; - handshake->calc_finished = ssl_calc_finished_tls_sha256; - } - else -#endif -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - /* - * SSLv3: - * master = - * MD5( premaster + SHA1( 'A' + premaster + randbytes ) ) + - * MD5( premaster + SHA1( 'BB' + premaster + randbytes ) ) + - * MD5( premaster + SHA1( 'CCC' + premaster + randbytes ) ) - * - * TLSv1+: - * master = PRF( premaster, "master secret", randbytes )[0..47] - */ - if( handshake->resume == 0 ) - { - SSL_DEBUG_BUF( 3, "premaster secret", handshake->premaster, - handshake->pmslen ); - - handshake->tls_prf( handshake->premaster, handshake->pmslen, - "master secret", - handshake->randbytes, 64, session->master, 48 ); - - polarssl_zeroize( handshake->premaster, sizeof(handshake->premaster) ); - } - else - SSL_DEBUG_MSG( 3, ( "no premaster (session resumed)" ) ); - - /* - * Swap the client and server random values. - */ - memcpy( tmp, handshake->randbytes, 64 ); - memcpy( handshake->randbytes, tmp + 32, 32 ); - memcpy( handshake->randbytes + 32, tmp, 32 ); - polarssl_zeroize( tmp, sizeof( tmp ) ); - - /* - * SSLv3: - * key block = - * MD5( master + SHA1( 'A' + master + randbytes ) ) + - * MD5( master + SHA1( 'BB' + master + randbytes ) ) + - * MD5( master + SHA1( 'CCC' + master + randbytes ) ) + - * MD5( master + SHA1( 'DDDD' + master + randbytes ) ) + - * ... - * - * TLSv1: - * key block = PRF( master, "key expansion", randbytes ) - */ - handshake->tls_prf( session->master, 48, "key expansion", - handshake->randbytes, 64, keyblk, 256 ); - - SSL_DEBUG_MSG( 3, ( "ciphersuite = %s", - ssl_get_ciphersuite_name( session->ciphersuite ) ) ); - SSL_DEBUG_BUF( 3, "master secret", session->master, 48 ); - SSL_DEBUG_BUF( 4, "random bytes", handshake->randbytes, 64 ); - SSL_DEBUG_BUF( 4, "key block", keyblk, 256 ); - - polarssl_zeroize( handshake->randbytes, sizeof( handshake->randbytes ) ); - - /* - * Determine the appropriate key, IV and MAC length. - */ - - transform->keylen = cipher_info->key_length / 8; - - if( cipher_info->mode == POLARSSL_MODE_GCM || - cipher_info->mode == POLARSSL_MODE_CCM ) - { - transform->maclen = 0; - - transform->ivlen = 12; - transform->fixed_ivlen = 4; - - /* Minimum length is expicit IV + tag */ - transform->minlen = transform->ivlen - transform->fixed_ivlen - + ( transform->ciphersuite_info->flags & - POLARSSL_CIPHERSUITE_SHORT_TAG ? 8 : 16 ); - } - else - { - int ret; - - /* Initialize HMAC contexts */ - if( ( ret = md_init_ctx( &transform->md_ctx_enc, md_info ) ) != 0 || - ( ret = md_init_ctx( &transform->md_ctx_dec, md_info ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "md_init_ctx", ret ); - return( ret ); - } - - /* Get MAC length */ - transform->maclen = md_get_size( md_info ); - -#if defined(POLARSSL_SSL_TRUNCATED_HMAC) - /* - * If HMAC is to be truncated, we shall keep the leftmost bytes, - * (rfc 6066 page 13 or rfc 2104 section 4), - * so we only need to adjust the length here. - */ - if( session->trunc_hmac == SSL_TRUNC_HMAC_ENABLED ) - transform->maclen = SSL_TRUNCATED_HMAC_LEN; -#endif /* POLARSSL_SSL_TRUNCATED_HMAC */ - - /* IV length */ - transform->ivlen = cipher_info->iv_size; - - /* Minimum length */ - if( cipher_info->mode == POLARSSL_MODE_STREAM ) - transform->minlen = transform->maclen; - else - { - /* - * GenericBlockCipher: - * first multiple of blocklen greater than maclen - * + IV except for SSL3 and TLS 1.0 - */ - transform->minlen = transform->maclen - + cipher_info->block_size - - transform->maclen % cipher_info->block_size; - -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) - if( ssl->minor_ver == SSL_MINOR_VERSION_0 || - ssl->minor_ver == SSL_MINOR_VERSION_1 ) - ; /* No need to adjust minlen */ - else -#endif -#if defined(POLARSSL_SSL_PROTO_TLS1_1) || defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == SSL_MINOR_VERSION_2 || - ssl->minor_ver == SSL_MINOR_VERSION_3 ) - { - transform->minlen += transform->ivlen; - } - else -#endif - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - } - } - - SSL_DEBUG_MSG( 3, ( "keylen: %d, minlen: %d, ivlen: %d, maclen: %d", - transform->keylen, transform->minlen, transform->ivlen, - transform->maclen ) ); - - /* - * Finally setup the cipher contexts, IVs and MAC secrets. - */ - if( ssl->endpoint == SSL_IS_CLIENT ) - { - key1 = keyblk + transform->maclen * 2; - key2 = keyblk + transform->maclen * 2 + transform->keylen; - - mac_enc = keyblk; - mac_dec = keyblk + transform->maclen; - - /* - * This is not used in TLS v1.1. - */ - iv_copy_len = ( transform->fixed_ivlen ) ? - transform->fixed_ivlen : transform->ivlen; - memcpy( transform->iv_enc, key2 + transform->keylen, iv_copy_len ); - memcpy( transform->iv_dec, key2 + transform->keylen + iv_copy_len, - iv_copy_len ); - } - else - { - key1 = keyblk + transform->maclen * 2 + transform->keylen; - key2 = keyblk + transform->maclen * 2; - - mac_enc = keyblk + transform->maclen; - mac_dec = keyblk; - - /* - * This is not used in TLS v1.1. - */ - iv_copy_len = ( transform->fixed_ivlen ) ? - transform->fixed_ivlen : transform->ivlen; - memcpy( transform->iv_dec, key1 + transform->keylen, iv_copy_len ); - memcpy( transform->iv_enc, key1 + transform->keylen + iv_copy_len, - iv_copy_len ); - } - -#if defined(POLARSSL_SSL_PROTO_SSL3) - if( ssl->minor_ver == SSL_MINOR_VERSION_0 ) - { - if( transform->maclen > sizeof transform->mac_enc ) - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - memcpy( transform->mac_enc, mac_enc, transform->maclen ); - memcpy( transform->mac_dec, mac_dec, transform->maclen ); - } - else -#endif /* POLARSSL_SSL_PROTO_SSL3 */ -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->minor_ver >= SSL_MINOR_VERSION_1 ) - { - md_hmac_starts( &transform->md_ctx_enc, mac_enc, transform->maclen ); - md_hmac_starts( &transform->md_ctx_dec, mac_dec, transform->maclen ); - } - else -#endif - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - -#if defined(POLARSSL_SSL_HW_RECORD_ACCEL) - if( ssl_hw_record_init != NULL ) - { - int ret = 0; - - SSL_DEBUG_MSG( 2, ( "going for ssl_hw_record_init()" ) ); - - if( ( ret = ssl_hw_record_init( ssl, key1, key2, transform->keylen, - transform->iv_enc, transform->iv_dec, - iv_copy_len, - mac_enc, mac_dec, - transform->maclen ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_hw_record_init", ret ); - return( POLARSSL_ERR_SSL_HW_ACCEL_FAILED ); - } - } -#endif /* POLARSSL_SSL_HW_RECORD_ACCEL */ - - if( ( ret = cipher_init_ctx( &transform->cipher_ctx_enc, - cipher_info ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "cipher_init_ctx", ret ); - return( ret ); - } - - if( ( ret = cipher_init_ctx( &transform->cipher_ctx_dec, - cipher_info ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "cipher_init_ctx", ret ); - return( ret ); - } - - if( ( ret = cipher_setkey( &transform->cipher_ctx_enc, key1, - cipher_info->key_length, - POLARSSL_ENCRYPT ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "cipher_setkey", ret ); - return( ret ); - } - - if( ( ret = cipher_setkey( &transform->cipher_ctx_dec, key2, - cipher_info->key_length, - POLARSSL_DECRYPT ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "cipher_setkey", ret ); - return( ret ); - } - -#if defined(POLARSSL_CIPHER_MODE_CBC) - if( cipher_info->mode == POLARSSL_MODE_CBC ) - { - if( ( ret = cipher_set_padding_mode( &transform->cipher_ctx_enc, - POLARSSL_PADDING_NONE ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "cipher_set_padding_mode", ret ); - return( ret ); - } - - if( ( ret = cipher_set_padding_mode( &transform->cipher_ctx_dec, - POLARSSL_PADDING_NONE ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "cipher_set_padding_mode", ret ); - return( ret ); - } - } -#endif /* POLARSSL_CIPHER_MODE_CBC */ - - polarssl_zeroize( keyblk, sizeof( keyblk ) ); - -#if defined(POLARSSL_ZLIB_SUPPORT) - // Initialize compression - // - if( session->compression == SSL_COMPRESS_DEFLATE ) - { - if( ssl->compress_buf == NULL ) - { - SSL_DEBUG_MSG( 3, ( "Allocating compression buffer" ) ); - ssl->compress_buf = polarssl_malloc( SSL_BUFFER_LEN ); - if( ssl->compress_buf == NULL ) - { - SSL_DEBUG_MSG( 1, ( "malloc(%d bytes) failed", - SSL_BUFFER_LEN ) ); - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - } - } - - SSL_DEBUG_MSG( 3, ( "Initializing zlib states" ) ); - - memset( &transform->ctx_deflate, 0, sizeof( transform->ctx_deflate ) ); - memset( &transform->ctx_inflate, 0, sizeof( transform->ctx_inflate ) ); - - if( deflateInit( &transform->ctx_deflate, - Z_DEFAULT_COMPRESSION ) != Z_OK || - inflateInit( &transform->ctx_inflate ) != Z_OK ) - { - SSL_DEBUG_MSG( 1, ( "Failed to initialize compression" ) ); - return( POLARSSL_ERR_SSL_COMPRESSION_FAILED ); - } - } -#endif /* POLARSSL_ZLIB_SUPPORT */ - - SSL_DEBUG_MSG( 2, ( "<= derive keys" ) ); - - return( 0 ); -} - -#if defined(POLARSSL_SSL_PROTO_SSL3) -void ssl_calc_verify_ssl( ssl_context *ssl, unsigned char hash[36] ) -{ - md5_context md5; - sha1_context sha1; - unsigned char pad_1[48]; - unsigned char pad_2[48]; - - SSL_DEBUG_MSG( 2, ( "=> calc verify ssl" ) ); - - memcpy( &md5 , &ssl->handshake->fin_md5 , sizeof(md5_context) ); - memcpy( &sha1, &ssl->handshake->fin_sha1, sizeof(sha1_context) ); - - memset( pad_1, 0x36, 48 ); - memset( pad_2, 0x5C, 48 ); - - md5_update( &md5, ssl->session_negotiate->master, 48 ); - md5_update( &md5, pad_1, 48 ); - md5_finish( &md5, hash ); - - md5_starts( &md5 ); - md5_update( &md5, ssl->session_negotiate->master, 48 ); - md5_update( &md5, pad_2, 48 ); - md5_update( &md5, hash, 16 ); - md5_finish( &md5, hash ); - - sha1_update( &sha1, ssl->session_negotiate->master, 48 ); - sha1_update( &sha1, pad_1, 40 ); - sha1_finish( &sha1, hash + 16 ); - - sha1_starts( &sha1 ); - sha1_update( &sha1, ssl->session_negotiate->master, 48 ); - sha1_update( &sha1, pad_2, 40 ); - sha1_update( &sha1, hash + 16, 20 ); - sha1_finish( &sha1, hash + 16 ); - - SSL_DEBUG_BUF( 3, "calculated verify result", hash, 36 ); - SSL_DEBUG_MSG( 2, ( "<= calc verify" ) ); - - md5_free( &md5 ); - sha1_free( &sha1 ); - - return; -} -#endif /* POLARSSL_SSL_PROTO_SSL3 */ - -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) -void ssl_calc_verify_tls( ssl_context *ssl, unsigned char hash[36] ) -{ - md5_context md5; - sha1_context sha1; - - SSL_DEBUG_MSG( 2, ( "=> calc verify tls" ) ); - - memcpy( &md5 , &ssl->handshake->fin_md5 , sizeof(md5_context) ); - memcpy( &sha1, &ssl->handshake->fin_sha1, sizeof(sha1_context) ); - - md5_finish( &md5, hash ); - sha1_finish( &sha1, hash + 16 ); - - SSL_DEBUG_BUF( 3, "calculated verify result", hash, 36 ); - SSL_DEBUG_MSG( 2, ( "<= calc verify" ) ); - - md5_free( &md5 ); - sha1_free( &sha1 ); - - return; -} -#endif /* POLARSSL_SSL_PROTO_TLS1 || POLARSSL_SSL_PROTO_TLS1_1 */ - -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -#if defined(POLARSSL_SHA256_C) -void ssl_calc_verify_tls_sha256( ssl_context *ssl, unsigned char hash[32] ) -{ - sha256_context sha256; - - SSL_DEBUG_MSG( 2, ( "=> calc verify sha256" ) ); - - memcpy( &sha256, &ssl->handshake->fin_sha256, sizeof(sha256_context) ); - sha256_finish( &sha256, hash ); - - SSL_DEBUG_BUF( 3, "calculated verify result", hash, 32 ); - SSL_DEBUG_MSG( 2, ( "<= calc verify" ) ); - - sha256_free( &sha256 ); - - return; -} -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) -void ssl_calc_verify_tls_sha384( ssl_context *ssl, unsigned char hash[48] ) -{ - sha512_context sha512; - - SSL_DEBUG_MSG( 2, ( "=> calc verify sha384" ) ); - - memcpy( &sha512, &ssl->handshake->fin_sha512, sizeof(sha512_context) ); - sha512_finish( &sha512, hash ); - - SSL_DEBUG_BUF( 3, "calculated verify result", hash, 48 ); - SSL_DEBUG_MSG( 2, ( "<= calc verify" ) ); - - sha512_free( &sha512 ); - - return; -} -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - -#if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED) -int ssl_psk_derive_premaster( ssl_context *ssl, key_exchange_type_t key_ex ) -{ - unsigned char *p = ssl->handshake->premaster; - unsigned char *end = p + sizeof( ssl->handshake->premaster ); - - /* - * PMS = struct { - * opaque other_secret<0..2^16-1>; - * opaque psk<0..2^16-1>; - * }; - * with "other_secret" depending on the particular key exchange - */ -#if defined(POLARSSL_KEY_EXCHANGE_PSK_ENABLED) - if( key_ex == POLARSSL_KEY_EXCHANGE_PSK ) - { - if( end - p < 2 + (int) ssl->psk_len ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - *(p++) = (unsigned char)( ssl->psk_len >> 8 ); - *(p++) = (unsigned char)( ssl->psk_len ); - p += ssl->psk_len; - } - else -#endif /* POLARSSL_KEY_EXCHANGE_PSK_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( key_ex == POLARSSL_KEY_EXCHANGE_RSA_PSK ) - { - /* - * other_secret already set by the ClientKeyExchange message, - * and is 48 bytes long - */ - *p++ = 0; - *p++ = 48; - p += 48; - } - else -#endif /* POLARSSL_KEY_EXCHANGE_RSA_PKS_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( key_ex == POLARSSL_KEY_EXCHANGE_DHE_PSK ) - { - int ret; - size_t len = end - ( p + 2 ); - - /* Write length only when we know the actual value */ - if( ( ret = dhm_calc_secret( &ssl->handshake->dhm_ctx, - p + 2, &len, - ssl->f_rng, ssl->p_rng ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "dhm_calc_secret", ret ); - return( ret ); - } - *(p++) = (unsigned char)( len >> 8 ); - *(p++) = (unsigned char)( len ); - p += len; - - SSL_DEBUG_MPI( 3, "DHM: K ", &ssl->handshake->dhm_ctx.K ); - } - else -#endif /* POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) - if( key_ex == POLARSSL_KEY_EXCHANGE_ECDHE_PSK ) - { - int ret; - size_t zlen; - - if( ( ret = ecdh_calc_secret( &ssl->handshake->ecdh_ctx, &zlen, - p + 2, end - ( p + 2 ), - ssl->f_rng, ssl->p_rng ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ecdh_calc_secret", ret ); - return( ret ); - } - - *(p++) = (unsigned char)( zlen >> 8 ); - *(p++) = (unsigned char)( zlen ); - p += zlen; - - SSL_DEBUG_MPI( 3, "ECDH: z", &ssl->handshake->ecdh_ctx.z ); - } - else -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - /* opaque psk<0..2^16-1>; */ - if( end - p < 2 + (int) ssl->psk_len ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - *(p++) = (unsigned char)( ssl->psk_len >> 8 ); - *(p++) = (unsigned char)( ssl->psk_len ); - memcpy( p, ssl->psk, ssl->psk_len ); - p += ssl->psk_len; - - ssl->handshake->pmslen = p - ssl->handshake->premaster; - - return( 0 ); -} -#endif /* POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED */ - -#if defined(POLARSSL_SSL_PROTO_SSL3) -/* - * SSLv3.0 MAC functions - */ -static void ssl_mac( md_context_t *md_ctx, unsigned char *secret, - unsigned char *buf, size_t len, - unsigned char *ctr, int type ) -{ - unsigned char header[11]; - unsigned char padding[48]; - int padlen = 0; - int md_size = md_get_size( md_ctx->md_info ); - int md_type = md_get_type( md_ctx->md_info ); - - if( md_type == POLARSSL_MD_MD5 ) - padlen = 48; - else if( md_type == POLARSSL_MD_SHA1 ) - padlen = 40; - else if( md_type == POLARSSL_MD_SHA256 ) - padlen = 32; - else if( md_type == POLARSSL_MD_SHA384 ) - padlen = 16; - - memcpy( header, ctr, 8 ); - header[ 8] = (unsigned char) type; - header[ 9] = (unsigned char)( len >> 8 ); - header[10] = (unsigned char)( len ); - - memset( padding, 0x36, padlen ); - md_starts( md_ctx ); - md_update( md_ctx, secret, md_size ); - md_update( md_ctx, padding, padlen ); - md_update( md_ctx, header, 11 ); - md_update( md_ctx, buf, len ); - md_finish( md_ctx, buf + len ); - - memset( padding, 0x5C, padlen ); - md_starts( md_ctx ); - md_update( md_ctx, secret, md_size ); - md_update( md_ctx, padding, padlen ); - md_update( md_ctx, buf + len, md_size ); - md_finish( md_ctx, buf + len ); -} -#endif /* POLARSSL_SSL_PROTO_SSL3 */ - -/* - * Encryption/decryption functions - */ -static int ssl_encrypt_buf( ssl_context *ssl ) -{ - size_t i; - const cipher_mode_t mode = cipher_get_cipher_mode( - &ssl->transform_out->cipher_ctx_enc ); - - SSL_DEBUG_MSG( 2, ( "=> encrypt buf" ) ); - - /* - * Add MAC before encrypt, except for AEAD modes - */ -#if defined(POLARSSL_ARC4_C) || defined(POLARSSL_CIPHER_NULL_CIPHER) || \ - ( defined(POLARSSL_CIPHER_MODE_CBC) && \ - ( defined(POLARSSL_AES_C) || defined(POLARSSL_CAMELLIA_C) || defined(POLARSSL_DES_C) ) ) - if( mode != POLARSSL_MODE_GCM && - mode != POLARSSL_MODE_CCM ) - { -#if defined(POLARSSL_SSL_PROTO_SSL3) - if( ssl->minor_ver == SSL_MINOR_VERSION_0 ) - { - ssl_mac( &ssl->transform_out->md_ctx_enc, - ssl->transform_out->mac_enc, - ssl->out_msg, ssl->out_msglen, - ssl->out_ctr, ssl->out_msgtype ); - } - else -#endif -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->minor_ver >= SSL_MINOR_VERSION_1 ) - { - md_hmac_update( &ssl->transform_out->md_ctx_enc, ssl->out_ctr, 13 ); - md_hmac_update( &ssl->transform_out->md_ctx_enc, - ssl->out_msg, ssl->out_msglen ); - md_hmac_finish( &ssl->transform_out->md_ctx_enc, - ssl->out_msg + ssl->out_msglen ); - md_hmac_reset( &ssl->transform_out->md_ctx_enc ); - } - else -#endif - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - SSL_DEBUG_BUF( 4, "computed mac", - ssl->out_msg + ssl->out_msglen, - ssl->transform_out->maclen ); - - ssl->out_msglen += ssl->transform_out->maclen; - } -#endif /* AEAD not the only option */ - - /* - * Encrypt - */ -#if defined(POLARSSL_ARC4_C) || defined(POLARSSL_CIPHER_NULL_CIPHER) - if( mode == POLARSSL_MODE_STREAM ) - { - int ret; - size_t olen = 0; - - SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, " - "including %d bytes of padding", - ssl->out_msglen, 0 ) ); - - SSL_DEBUG_BUF( 4, "before encrypt: output payload", - ssl->out_msg, ssl->out_msglen ); - - if( ( ret = cipher_crypt( &ssl->transform_out->cipher_ctx_enc, - ssl->transform_out->iv_enc, - ssl->transform_out->ivlen, - ssl->out_msg, ssl->out_msglen, - ssl->out_msg, &olen ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "cipher_crypt", ret ); - return( ret ); - } - - if( ssl->out_msglen != olen ) - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - } - else -#endif /* POLARSSL_ARC4_C || POLARSSL_CIPHER_NULL_CIPHER */ -#if defined(POLARSSL_GCM_C) || defined(POLARSSL_CCM_C) - if( mode == POLARSSL_MODE_GCM || - mode == POLARSSL_MODE_CCM ) - { - int ret; - size_t enc_msglen, olen; - unsigned char *enc_msg; - unsigned char add_data[13]; - unsigned char taglen = ssl->transform_out->ciphersuite_info->flags & - POLARSSL_CIPHERSUITE_SHORT_TAG ? 8 : 16; - - memcpy( add_data, ssl->out_ctr, 8 ); - add_data[8] = ssl->out_msgtype; - add_data[9] = ssl->major_ver; - add_data[10] = ssl->minor_ver; - add_data[11] = ( ssl->out_msglen >> 8 ) & 0xFF; - add_data[12] = ssl->out_msglen & 0xFF; - - SSL_DEBUG_BUF( 4, "additional data used for AEAD", - add_data, 13 ); - - /* - * Generate IV - */ - ret = ssl->f_rng( ssl->p_rng, - ssl->transform_out->iv_enc + ssl->transform_out->fixed_ivlen, - ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen ); - if( ret != 0 ) - return( ret ); - - memcpy( ssl->out_iv, - ssl->transform_out->iv_enc + ssl->transform_out->fixed_ivlen, - ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen ); - - SSL_DEBUG_BUF( 4, "IV used", ssl->out_iv, - ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen ); - - /* - * Fix pointer positions and message length with added IV - */ - enc_msg = ssl->out_msg; - enc_msglen = ssl->out_msglen; - ssl->out_msglen += ssl->transform_out->ivlen - - ssl->transform_out->fixed_ivlen; - - SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, " - "including %d bytes of padding", - ssl->out_msglen, 0 ) ); - - SSL_DEBUG_BUF( 4, "before encrypt: output payload", - ssl->out_msg, ssl->out_msglen ); - - /* - * Encrypt and authenticate - */ - if( ( ret = cipher_auth_encrypt( &ssl->transform_out->cipher_ctx_enc, - ssl->transform_out->iv_enc, - ssl->transform_out->ivlen, - add_data, 13, - enc_msg, enc_msglen, - enc_msg, &olen, - enc_msg + enc_msglen, taglen ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "cipher_auth_encrypt", ret ); - return( ret ); - } - - if( olen != enc_msglen ) - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - ssl->out_msglen += taglen; - - SSL_DEBUG_BUF( 4, "after encrypt: tag", enc_msg + enc_msglen, taglen ); - } - else -#endif /* POLARSSL_GCM_C || POLARSSL_CCM_C */ -#if defined(POLARSSL_CIPHER_MODE_CBC) && \ - ( defined(POLARSSL_AES_C) || defined(POLARSSL_CAMELLIA_C) || defined(POLARSSL_DES_C) ) - if( mode == POLARSSL_MODE_CBC ) - { - int ret; - unsigned char *enc_msg; - size_t enc_msglen, padlen, olen = 0; - - padlen = ssl->transform_out->ivlen - ( ssl->out_msglen + 1 ) % - ssl->transform_out->ivlen; - if( padlen == ssl->transform_out->ivlen ) - padlen = 0; - - for( i = 0; i <= padlen; i++ ) - ssl->out_msg[ssl->out_msglen + i] = (unsigned char) padlen; - - ssl->out_msglen += padlen + 1; - - enc_msglen = ssl->out_msglen; - enc_msg = ssl->out_msg; - -#if defined(POLARSSL_SSL_PROTO_TLS1_1) || defined(POLARSSL_SSL_PROTO_TLS1_2) - /* - * Prepend per-record IV for block cipher in TLS v1.1 and up as per - * Method 1 (6.2.3.2. in RFC4346 and RFC5246) - */ - if( ssl->minor_ver >= SSL_MINOR_VERSION_2 ) - { - /* - * Generate IV - */ - int ret = ssl->f_rng( ssl->p_rng, ssl->transform_out->iv_enc, - ssl->transform_out->ivlen ); - if( ret != 0 ) - return( ret ); - - memcpy( ssl->out_iv, ssl->transform_out->iv_enc, - ssl->transform_out->ivlen ); - - /* - * Fix pointer positions and message length with added IV - */ - enc_msg = ssl->out_msg; - enc_msglen = ssl->out_msglen; - ssl->out_msglen += ssl->transform_out->ivlen; - } -#endif /* POLARSSL_SSL_PROTO_TLS1_1 || POLARSSL_SSL_PROTO_TLS1_2 */ - - SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, " - "including %d bytes of IV and %d bytes of padding", - ssl->out_msglen, ssl->transform_out->ivlen, - padlen + 1 ) ); - - SSL_DEBUG_BUF( 4, "before encrypt: output payload", - ssl->out_iv, ssl->out_msglen ); - - if( ( ret = cipher_crypt( &ssl->transform_out->cipher_ctx_enc, - ssl->transform_out->iv_enc, - ssl->transform_out->ivlen, - enc_msg, enc_msglen, - enc_msg, &olen ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "cipher_crypt", ret ); - return( ret ); - } - - if( enc_msglen != olen ) - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) - if( ssl->minor_ver < SSL_MINOR_VERSION_2 ) - { - /* - * Save IV in SSL3 and TLS1 - */ - memcpy( ssl->transform_out->iv_enc, - ssl->transform_out->cipher_ctx_enc.iv, - ssl->transform_out->ivlen ); - } -#endif - } - else -#endif /* POLARSSL_CIPHER_MODE_CBC && - ( POLARSSL_AES_C || POLARSSL_CAMELLIA_C ) */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - for( i = 8; i > 0; i-- ) - if( ++ssl->out_ctr[i - 1] != 0 ) - break; - - /* The loops goes to its end iff the counter is wrapping */ - if( i == 0 ) - { - SSL_DEBUG_MSG( 1, ( "outgoing message counter would wrap" ) ); - return( POLARSSL_ERR_SSL_COUNTER_WRAPPING ); - } - - SSL_DEBUG_MSG( 2, ( "<= encrypt buf" ) ); - - return( 0 ); -} - -#define POLARSSL_SSL_MAX_MAC_SIZE 48 - -static int ssl_decrypt_buf( ssl_context *ssl ) -{ - size_t i; - const cipher_mode_t mode = cipher_get_cipher_mode( - &ssl->transform_in->cipher_ctx_dec ); -#if defined(POLARSSL_ARC4_C) || defined(POLARSSL_CIPHER_NULL_CIPHER) || \ - ( defined(POLARSSL_CIPHER_MODE_CBC) && \ - ( defined(POLARSSL_AES_C) || defined(POLARSSL_CAMELLIA_C) || defined(POLARSSL_DES_C) ) ) - size_t padlen = 0, correct = 1; -#endif - - SSL_DEBUG_MSG( 2, ( "=> decrypt buf" ) ); - - if( ssl->in_msglen < ssl->transform_in->minlen ) - { - SSL_DEBUG_MSG( 1, ( "in_msglen (%d) < minlen (%d)", - ssl->in_msglen, ssl->transform_in->minlen ) ); - return( POLARSSL_ERR_SSL_INVALID_MAC ); - } - -#if defined(POLARSSL_ARC4_C) || defined(POLARSSL_CIPHER_NULL_CIPHER) - if( mode == POLARSSL_MODE_STREAM ) - { - int ret; - size_t olen = 0; - - padlen = 0; - - if( ( ret = cipher_crypt( &ssl->transform_in->cipher_ctx_dec, - ssl->transform_in->iv_dec, - ssl->transform_in->ivlen, - ssl->in_msg, ssl->in_msglen, - ssl->in_msg, &olen ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "cipher_crypt", ret ); - return( ret ); - } - - if( ssl->in_msglen != olen ) - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - } - else -#endif /* POLARSSL_ARC4_C || POLARSSL_CIPHER_NULL_CIPHER */ -#if defined(POLARSSL_GCM_C) || defined(POLARSSL_CCM_C) - if( mode == POLARSSL_MODE_GCM || - mode == POLARSSL_MODE_CCM ) - { - int ret; - size_t dec_msglen, olen; - unsigned char *dec_msg; - unsigned char *dec_msg_result; - unsigned char add_data[13]; - unsigned char taglen = ssl->transform_in->ciphersuite_info->flags & - POLARSSL_CIPHERSUITE_SHORT_TAG ? 8 : 16; - unsigned char explicit_iv_len = ssl->transform_in->ivlen - - ssl->transform_in->fixed_ivlen; - - if( ssl->in_msglen < explicit_iv_len + taglen ) - { - SSL_DEBUG_MSG( 1, ( "msglen (%d) < explicit_iv_len (%d) " - "+ taglen (%d)", ssl->in_msglen, - explicit_iv_len, taglen ) ); - return( POLARSSL_ERR_SSL_INVALID_MAC ); - } - dec_msglen = ssl->in_msglen - explicit_iv_len - taglen; - - dec_msg = ssl->in_msg; - dec_msg_result = ssl->in_msg; - ssl->in_msglen = dec_msglen; - - memcpy( add_data, ssl->in_ctr, 8 ); - add_data[8] = ssl->in_msgtype; - add_data[9] = ssl->major_ver; - add_data[10] = ssl->minor_ver; - add_data[11] = ( ssl->in_msglen >> 8 ) & 0xFF; - add_data[12] = ssl->in_msglen & 0xFF; - - SSL_DEBUG_BUF( 4, "additional data used for AEAD", - add_data, 13 ); - - memcpy( ssl->transform_in->iv_dec + ssl->transform_in->fixed_ivlen, - ssl->in_iv, - ssl->transform_in->ivlen - ssl->transform_in->fixed_ivlen ); - - SSL_DEBUG_BUF( 4, "IV used", ssl->transform_in->iv_dec, - ssl->transform_in->ivlen ); - SSL_DEBUG_BUF( 4, "TAG used", dec_msg + dec_msglen, taglen ); - - /* - * Decrypt and authenticate - */ - if( ( ret = cipher_auth_decrypt( &ssl->transform_in->cipher_ctx_dec, - ssl->transform_in->iv_dec, - ssl->transform_in->ivlen, - add_data, 13, - dec_msg, dec_msglen, - dec_msg_result, &olen, - dec_msg + dec_msglen, taglen ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "cipher_auth_decrypt", ret ); - - if( ret == POLARSSL_ERR_CIPHER_AUTH_FAILED ) - return( POLARSSL_ERR_SSL_INVALID_MAC ); - - return( ret ); - } - - if( olen != dec_msglen ) - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - } - else -#endif /* POLARSSL_GCM_C || POLARSSL_CCM_C */ -#if defined(POLARSSL_CIPHER_MODE_CBC) && \ - ( defined(POLARSSL_AES_C) || defined(POLARSSL_CAMELLIA_C) || defined(POLARSSL_DES_C) ) - if( mode == POLARSSL_MODE_CBC ) - { - /* - * Decrypt and check the padding - */ - int ret; - unsigned char *dec_msg; - unsigned char *dec_msg_result; - size_t dec_msglen; - size_t minlen = 0; - size_t olen = 0; - - /* - * Check immediate ciphertext sanity - */ - if( ssl->in_msglen % ssl->transform_in->ivlen != 0 ) - { - SSL_DEBUG_MSG( 1, ( "msglen (%d) %% ivlen (%d) != 0", - ssl->in_msglen, ssl->transform_in->ivlen ) ); - return( POLARSSL_ERR_SSL_INVALID_MAC ); - } - -#if defined(POLARSSL_SSL_PROTO_TLS1_1) || defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->minor_ver >= SSL_MINOR_VERSION_2 ) - minlen += ssl->transform_in->ivlen; -#endif - - if( ssl->in_msglen < minlen + ssl->transform_in->ivlen || - ssl->in_msglen < minlen + ssl->transform_in->maclen + 1 ) - { - SSL_DEBUG_MSG( 1, ( "msglen (%d) < max( ivlen(%d), maclen (%d) " - "+ 1 ) ( + expl IV )", ssl->in_msglen, - ssl->transform_in->ivlen, - ssl->transform_in->maclen ) ); - return( POLARSSL_ERR_SSL_INVALID_MAC ); - } - - dec_msglen = ssl->in_msglen; - dec_msg = ssl->in_msg; - dec_msg_result = ssl->in_msg; - -#if defined(POLARSSL_SSL_PROTO_TLS1_1) || defined(POLARSSL_SSL_PROTO_TLS1_2) - /* - * Initialize for prepended IV for block cipher in TLS v1.1 and up - */ - if( ssl->minor_ver >= SSL_MINOR_VERSION_2 ) - { - dec_msglen -= ssl->transform_in->ivlen; - ssl->in_msglen -= ssl->transform_in->ivlen; - - for( i = 0; i < ssl->transform_in->ivlen; i++ ) - ssl->transform_in->iv_dec[i] = ssl->in_iv[i]; - } -#endif /* POLARSSL_SSL_PROTO_TLS1_1 || POLARSSL_SSL_PROTO_TLS1_2 */ - - if( ( ret = cipher_crypt( &ssl->transform_in->cipher_ctx_dec, - ssl->transform_in->iv_dec, - ssl->transform_in->ivlen, - dec_msg, dec_msglen, - dec_msg_result, &olen ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "cipher_crypt", ret ); - return( ret ); - } - - if( dec_msglen != olen ) - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) - if( ssl->minor_ver < SSL_MINOR_VERSION_2 ) - { - /* - * Save IV in SSL3 and TLS1 - */ - memcpy( ssl->transform_in->iv_dec, - ssl->transform_in->cipher_ctx_dec.iv, - ssl->transform_in->ivlen ); - } -#endif - - padlen = 1 + ssl->in_msg[ssl->in_msglen - 1]; - - if( ssl->in_msglen < ssl->transform_in->maclen + padlen ) - { -#if defined(POLARSSL_SSL_DEBUG_ALL) - SSL_DEBUG_MSG( 1, ( "msglen (%d) < maclen (%d) + padlen (%d)", - ssl->in_msglen, ssl->transform_in->maclen, padlen ) ); -#endif - padlen = 0; - correct = 0; - } - -#if defined(POLARSSL_SSL_PROTO_SSL3) - if( ssl->minor_ver == SSL_MINOR_VERSION_0 ) - { - if( padlen > ssl->transform_in->ivlen ) - { -#if defined(POLARSSL_SSL_DEBUG_ALL) - SSL_DEBUG_MSG( 1, ( "bad padding length: is %d, " - "should be no more than %d", - padlen, ssl->transform_in->ivlen ) ); -#endif - correct = 0; - } - } - else -#endif /* POLARSSL_SSL_PROTO_SSL3 */ -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->minor_ver > SSL_MINOR_VERSION_0 ) - { - /* - * TLSv1+: always check the padding up to the first failure - * and fake check up to 256 bytes of padding - */ - size_t pad_count = 0, real_count = 1; - size_t padding_idx = ssl->in_msglen - padlen - 1; - - /* - * Padding is guaranteed to be incorrect if: - * 1. padlen >= ssl->in_msglen - * - * 2. padding_idx >= SSL_MAX_CONTENT_LEN + - * ssl->transform_in->maclen - * - * In both cases we reset padding_idx to a safe value (0) to - * prevent out-of-buffer reads. - */ - correct &= ( ssl->in_msglen >= padlen + 1 ); - correct &= ( padding_idx < SSL_MAX_CONTENT_LEN + - ssl->transform_in->maclen ); - - padding_idx *= correct; - - for( i = 1; i <= 256; i++ ) - { - real_count &= ( i <= padlen ); - pad_count += real_count * - ( ssl->in_msg[padding_idx + i] == padlen - 1 ); - } - - correct &= ( pad_count == padlen ); /* Only 1 on correct padding */ - -#if defined(POLARSSL_SSL_DEBUG_ALL) - if( padlen > 0 && correct == 0 ) - SSL_DEBUG_MSG( 1, ( "bad padding byte detected" ) ); -#endif - padlen &= correct * 0x1FF; - } - else -#endif /* POLARSSL_SSL_PROTO_TLS1 || POLARSSL_SSL_PROTO_TLS1_1 || \ - POLARSSL_SSL_PROTO_TLS1_2 */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - } - else -#endif /* POLARSSL_CIPHER_MODE_CBC && - ( POLARSSL_AES_C || POLARSSL_CAMELLIA_C ) */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - SSL_DEBUG_BUF( 4, "raw buffer after decryption", - ssl->in_msg, ssl->in_msglen ); - - /* - * Always compute the MAC (RFC4346, CBCTIME), except for AEAD of course - */ -#if defined(POLARSSL_ARC4_C) || defined(POLARSSL_CIPHER_NULL_CIPHER) || \ - ( defined(POLARSSL_CIPHER_MODE_CBC) && \ - ( defined(POLARSSL_AES_C) || defined(POLARSSL_CAMELLIA_C) || defined(POLARSSL_DES_C) ) ) - if( mode != POLARSSL_MODE_GCM && - mode != POLARSSL_MODE_CCM ) - { - unsigned char tmp[POLARSSL_SSL_MAX_MAC_SIZE]; - - ssl->in_msglen -= ( ssl->transform_in->maclen + padlen ); - - ssl->in_hdr[3] = (unsigned char)( ssl->in_msglen >> 8 ); - ssl->in_hdr[4] = (unsigned char)( ssl->in_msglen ); - - memcpy( tmp, ssl->in_msg + ssl->in_msglen, ssl->transform_in->maclen ); - -#if defined(POLARSSL_SSL_PROTO_SSL3) - if( ssl->minor_ver == SSL_MINOR_VERSION_0 ) - { - ssl_mac( &ssl->transform_in->md_ctx_dec, - ssl->transform_in->mac_dec, - ssl->in_msg, ssl->in_msglen, - ssl->in_ctr, ssl->in_msgtype ); - } - else -#endif /* POLARSSL_SSL_PROTO_SSL3 */ -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->minor_ver > SSL_MINOR_VERSION_0 ) - { - /* - * Process MAC and always update for padlen afterwards to make - * total time independent of padlen - * - * extra_run compensates MAC check for padlen - * - * Known timing attacks: - * - Lucky Thirteen (http://www.isg.rhul.ac.uk/tls/TLStiming.pdf) - * - * We use ( ( Lx + 8 ) / 64 ) to handle 'negative Lx' values - * correctly. (We round down instead of up, so -56 is the correct - * value for our calculations instead of -55) - */ - size_t j, extra_run = 0; - extra_run = ( 13 + ssl->in_msglen + padlen + 8 ) / 64 - - ( 13 + ssl->in_msglen + 8 ) / 64; - - extra_run &= correct * 0xFF; - - md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_ctr, 13 ); - md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_msg, - ssl->in_msglen ); - md_hmac_finish( &ssl->transform_in->md_ctx_dec, - ssl->in_msg + ssl->in_msglen ); - for( j = 0; j < extra_run; j++ ) - md_process( &ssl->transform_in->md_ctx_dec, ssl->in_msg ); - - md_hmac_reset( &ssl->transform_in->md_ctx_dec ); - } - else -#endif /* POLARSSL_SSL_PROTO_TLS1 || POLARSSL_SSL_PROTO_TLS1_1 || \ - POLARSSL_SSL_PROTO_TLS1_2 */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - - SSL_DEBUG_BUF( 4, "message mac", tmp, ssl->transform_in->maclen ); - SSL_DEBUG_BUF( 4, "computed mac", ssl->in_msg + ssl->in_msglen, - ssl->transform_in->maclen ); - - if( safer_memcmp( tmp, ssl->in_msg + ssl->in_msglen, - ssl->transform_in->maclen ) != 0 ) - { -#if defined(POLARSSL_SSL_DEBUG_ALL) - SSL_DEBUG_MSG( 1, ( "message mac does not match" ) ); -#endif - correct = 0; - } - - /* - * Finally check the correct flag - */ - if( correct == 0 ) - return( POLARSSL_ERR_SSL_INVALID_MAC ); - } -#endif /* AEAD not the only option */ - - if( ssl->in_msglen == 0 ) - { - ssl->nb_zero++; - - /* - * Three or more empty messages may be a DoS attack - * (excessive CPU consumption). - */ - if( ssl->nb_zero > 3 ) - { - SSL_DEBUG_MSG( 1, ( "received four consecutive empty " - "messages, possible DoS attack" ) ); - return( POLARSSL_ERR_SSL_INVALID_MAC ); - } - } - else - ssl->nb_zero = 0; - - for( i = 8; i > 0; i-- ) - if( ++ssl->in_ctr[i - 1] != 0 ) - break; - - /* The loops goes to its end iff the counter is wrapping */ - if( i == 0 ) - { - SSL_DEBUG_MSG( 1, ( "incoming message counter would wrap" ) ); - return( POLARSSL_ERR_SSL_COUNTER_WRAPPING ); - } - - SSL_DEBUG_MSG( 2, ( "<= decrypt buf" ) ); - - return( 0 ); -} - -#if defined(POLARSSL_ZLIB_SUPPORT) -/* - * Compression/decompression functions - */ -static int ssl_compress_buf( ssl_context *ssl ) -{ - int ret; - unsigned char *msg_post = ssl->out_msg; - size_t len_pre = ssl->out_msglen; - unsigned char *msg_pre = ssl->compress_buf; - - SSL_DEBUG_MSG( 2, ( "=> compress buf" ) ); - - if( len_pre == 0 ) - return( 0 ); - - memcpy( msg_pre, ssl->out_msg, len_pre ); - - SSL_DEBUG_MSG( 3, ( "before compression: msglen = %d, ", - ssl->out_msglen ) ); - - SSL_DEBUG_BUF( 4, "before compression: output payload", - ssl->out_msg, ssl->out_msglen ); - - ssl->transform_out->ctx_deflate.next_in = msg_pre; - ssl->transform_out->ctx_deflate.avail_in = len_pre; - ssl->transform_out->ctx_deflate.next_out = msg_post; - ssl->transform_out->ctx_deflate.avail_out = SSL_BUFFER_LEN; - - ret = deflate( &ssl->transform_out->ctx_deflate, Z_SYNC_FLUSH ); - if( ret != Z_OK ) - { - SSL_DEBUG_MSG( 1, ( "failed to perform compression (%d)", ret ) ); - return( POLARSSL_ERR_SSL_COMPRESSION_FAILED ); - } - - ssl->out_msglen = SSL_BUFFER_LEN - - ssl->transform_out->ctx_deflate.avail_out; - - SSL_DEBUG_MSG( 3, ( "after compression: msglen = %d, ", - ssl->out_msglen ) ); - - SSL_DEBUG_BUF( 4, "after compression: output payload", - ssl->out_msg, ssl->out_msglen ); - - SSL_DEBUG_MSG( 2, ( "<= compress buf" ) ); - - return( 0 ); -} - -static int ssl_decompress_buf( ssl_context *ssl ) -{ - int ret; - unsigned char *msg_post = ssl->in_msg; - size_t len_pre = ssl->in_msglen; - unsigned char *msg_pre = ssl->compress_buf; - - SSL_DEBUG_MSG( 2, ( "=> decompress buf" ) ); - - if( len_pre == 0 ) - return( 0 ); - - memcpy( msg_pre, ssl->in_msg, len_pre ); - - SSL_DEBUG_MSG( 3, ( "before decompression: msglen = %d, ", - ssl->in_msglen ) ); - - SSL_DEBUG_BUF( 4, "before decompression: input payload", - ssl->in_msg, ssl->in_msglen ); - - ssl->transform_in->ctx_inflate.next_in = msg_pre; - ssl->transform_in->ctx_inflate.avail_in = len_pre; - ssl->transform_in->ctx_inflate.next_out = msg_post; - ssl->transform_in->ctx_inflate.avail_out = SSL_MAX_CONTENT_LEN; - - ret = inflate( &ssl->transform_in->ctx_inflate, Z_SYNC_FLUSH ); - if( ret != Z_OK ) - { - SSL_DEBUG_MSG( 1, ( "failed to perform decompression (%d)", ret ) ); - return( POLARSSL_ERR_SSL_COMPRESSION_FAILED ); - } - - ssl->in_msglen = SSL_MAX_CONTENT_LEN - - ssl->transform_in->ctx_inflate.avail_out; - - SSL_DEBUG_MSG( 3, ( "after decompression: msglen = %d, ", - ssl->in_msglen ) ); - - SSL_DEBUG_BUF( 4, "after decompression: input payload", - ssl->in_msg, ssl->in_msglen ); - - SSL_DEBUG_MSG( 2, ( "<= decompress buf" ) ); - - return( 0 ); -} -#endif /* POLARSSL_ZLIB_SUPPORT */ - -/* - * Fill the input message buffer - */ -int ssl_fetch_input( ssl_context *ssl, size_t nb_want ) -{ - int ret; - size_t len; - - SSL_DEBUG_MSG( 2, ( "=> fetch input" ) ); - - if( nb_want > SSL_BUFFER_LEN - 8 ) - { - SSL_DEBUG_MSG( 1, ( "requesting more data than fits" ) ); - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - } - - while( ssl->in_left < nb_want ) - { - len = nb_want - ssl->in_left; - ret = ssl->f_recv( ssl->p_recv, ssl->in_hdr + ssl->in_left, len ); - - SSL_DEBUG_MSG( 2, ( "in_left: %d, nb_want: %d", - ssl->in_left, nb_want ) ); - SSL_DEBUG_RET( 2, "ssl->f_recv", ret ); - - if( ret == 0 ) - return( POLARSSL_ERR_SSL_CONN_EOF ); - - if( ret < 0 ) - return( ret ); - - ssl->in_left += ret; - } - - SSL_DEBUG_MSG( 2, ( "<= fetch input" ) ); - - return( 0 ); -} - -/* - * Flush any data not yet written - */ -int ssl_flush_output( ssl_context *ssl ) -{ - int ret; - unsigned char *buf; - - SSL_DEBUG_MSG( 2, ( "=> flush output" ) ); - - while( ssl->out_left > 0 ) - { - SSL_DEBUG_MSG( 2, ( "message length: %d, out_left: %d", - 5 + ssl->out_msglen, ssl->out_left ) ); - - buf = ssl->out_hdr + 5 + ssl->out_msglen - ssl->out_left; - ret = ssl->f_send( ssl->p_send, buf, ssl->out_left ); - - SSL_DEBUG_RET( 2, "ssl->f_send", ret ); - - if( ret <= 0 ) - return( ret ); - - ssl->out_left -= ret; - } - - SSL_DEBUG_MSG( 2, ( "<= flush output" ) ); - - return( 0 ); -} - -/* - * Record layer functions - */ -int ssl_write_record( ssl_context *ssl ) -{ - int ret, done = 0; - size_t len = ssl->out_msglen; - - SSL_DEBUG_MSG( 2, ( "=> write record" ) ); - - if( ssl->out_msgtype == SSL_MSG_HANDSHAKE ) - { - ssl->out_msg[1] = (unsigned char)( ( len - 4 ) >> 16 ); - ssl->out_msg[2] = (unsigned char)( ( len - 4 ) >> 8 ); - ssl->out_msg[3] = (unsigned char)( ( len - 4 ) ); - - if( ssl->out_msg[0] != SSL_HS_HELLO_REQUEST ) - ssl->handshake->update_checksum( ssl, ssl->out_msg, len ); - } - -#if defined(POLARSSL_ZLIB_SUPPORT) - if( ssl->transform_out != NULL && - ssl->session_out->compression == SSL_COMPRESS_DEFLATE ) - { - if( ( ret = ssl_compress_buf( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_compress_buf", ret ); - return( ret ); - } - - len = ssl->out_msglen; - } -#endif /*POLARSSL_ZLIB_SUPPORT */ - -#if defined(POLARSSL_SSL_HW_RECORD_ACCEL) - if( ssl_hw_record_write != NULL ) - { - SSL_DEBUG_MSG( 2, ( "going for ssl_hw_record_write()" ) ); - - ret = ssl_hw_record_write( ssl ); - if( ret != 0 && ret != POLARSSL_ERR_SSL_HW_ACCEL_FALLTHROUGH ) - { - SSL_DEBUG_RET( 1, "ssl_hw_record_write", ret ); - return( POLARSSL_ERR_SSL_HW_ACCEL_FAILED ); - } - - if( ret == 0 ) - done = 1; - } -#endif /* POLARSSL_SSL_HW_RECORD_ACCEL */ - if( !done ) - { - ssl->out_hdr[0] = (unsigned char) ssl->out_msgtype; - ssl->out_hdr[1] = (unsigned char) ssl->major_ver; - ssl->out_hdr[2] = (unsigned char) ssl->minor_ver; - ssl->out_hdr[3] = (unsigned char)( len >> 8 ); - ssl->out_hdr[4] = (unsigned char)( len ); - - if( ssl->transform_out != NULL ) - { - if( ( ret = ssl_encrypt_buf( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_encrypt_buf", ret ); - return( ret ); - } - - len = ssl->out_msglen; - ssl->out_hdr[3] = (unsigned char)( len >> 8 ); - ssl->out_hdr[4] = (unsigned char)( len ); - } - - ssl->out_left = 5 + ssl->out_msglen; - - SSL_DEBUG_MSG( 3, ( "output record: msgtype = %d, " - "version = [%d:%d], msglen = %d", - ssl->out_hdr[0], ssl->out_hdr[1], ssl->out_hdr[2], - ( ssl->out_hdr[3] << 8 ) | ssl->out_hdr[4] ) ); - - SSL_DEBUG_BUF( 4, "output record sent to network", - ssl->out_hdr, 5 + ssl->out_msglen ); - } - - if( ( ret = ssl_flush_output( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_flush_output", ret ); - return( ret ); - } - - SSL_DEBUG_MSG( 2, ( "<= write record" ) ); - - return( 0 ); -} - -int ssl_read_record( ssl_context *ssl ) -{ - int ret, done = 0; - - SSL_DEBUG_MSG( 2, ( "=> read record" ) ); - - if( ssl->in_hslen != 0 && - ssl->in_hslen < ssl->in_msglen ) - { - /* - * Get next Handshake message in the current record - */ - ssl->in_msglen -= ssl->in_hslen; - - memmove( ssl->in_msg, ssl->in_msg + ssl->in_hslen, - ssl->in_msglen ); - - ssl->in_hslen = 4; - ssl->in_hslen += ( ssl->in_msg[2] << 8 ) | ssl->in_msg[3]; - - SSL_DEBUG_MSG( 3, ( "handshake message: msglen =" - " %d, type = %d, hslen = %d", - ssl->in_msglen, ssl->in_msg[0], ssl->in_hslen ) ); - - if( ssl->in_msglen < 4 || ssl->in_msg[1] != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad handshake length" ) ); - return( POLARSSL_ERR_SSL_INVALID_RECORD ); - } - - if( ssl->in_msglen < ssl->in_hslen ) - { - SSL_DEBUG_MSG( 1, ( "bad handshake length" ) ); - return( POLARSSL_ERR_SSL_INVALID_RECORD ); - } - - if( ssl->state != SSL_HANDSHAKE_OVER ) - ssl->handshake->update_checksum( ssl, ssl->in_msg, ssl->in_hslen ); - - return( 0 ); - } - - ssl->in_hslen = 0; - - /* - * Read the record header and validate it - */ - if( ( ret = ssl_fetch_input( ssl, 5 ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_fetch_input", ret ); - return( ret ); - } - - ssl->in_msgtype = ssl->in_hdr[0]; - ssl->in_msglen = ( ssl->in_hdr[3] << 8 ) | ssl->in_hdr[4]; - - SSL_DEBUG_MSG( 3, ( "input record: msgtype = %d, " - "version = [%d:%d], msglen = %d", - ssl->in_hdr[0], ssl->in_hdr[1], ssl->in_hdr[2], - ( ssl->in_hdr[3] << 8 ) | ssl->in_hdr[4] ) ); - - if( ssl->in_hdr[1] != ssl->major_ver ) - { - SSL_DEBUG_MSG( 1, ( "major version mismatch" ) ); - return( POLARSSL_ERR_SSL_INVALID_RECORD ); - } - - if( ssl->in_hdr[2] > ssl->max_minor_ver ) - { - SSL_DEBUG_MSG( 1, ( "minor version mismatch" ) ); - return( POLARSSL_ERR_SSL_INVALID_RECORD ); - } - - /* Sanity check (outer boundaries) */ - if( ssl->in_msglen < 1 || ssl->in_msglen > SSL_BUFFER_LEN - 13 ) - { - SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( POLARSSL_ERR_SSL_INVALID_RECORD ); - } - - /* - * Make sure the message length is acceptable for the current transform - * and protocol version. - */ - if( ssl->transform_in == NULL ) - { - if( ssl->in_msglen > SSL_MAX_CONTENT_LEN ) - { - SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( POLARSSL_ERR_SSL_INVALID_RECORD ); - } - } - else - { - if( ssl->in_msglen < ssl->transform_in->minlen ) - { - SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( POLARSSL_ERR_SSL_INVALID_RECORD ); - } - -#if defined(POLARSSL_SSL_PROTO_SSL3) - if( ssl->minor_ver == SSL_MINOR_VERSION_0 && - ssl->in_msglen > ssl->transform_in->minlen + SSL_MAX_CONTENT_LEN ) - { - SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( POLARSSL_ERR_SSL_INVALID_RECORD ); - } -#endif - -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_2) - /* - * TLS encrypted messages can have up to 256 bytes of padding - */ - if( ssl->minor_ver >= SSL_MINOR_VERSION_1 && - ssl->in_msglen > ssl->transform_in->minlen + - SSL_MAX_CONTENT_LEN + 256 ) - { - SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( POLARSSL_ERR_SSL_INVALID_RECORD ); - } -#endif - } - - /* - * Read and optionally decrypt the message contents - */ - if( ( ret = ssl_fetch_input( ssl, 5 + ssl->in_msglen ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_fetch_input", ret ); - return( ret ); - } - - SSL_DEBUG_BUF( 4, "input record from network", - ssl->in_hdr, 5 + ssl->in_msglen ); - -#if defined(POLARSSL_SSL_HW_RECORD_ACCEL) - if( ssl_hw_record_read != NULL ) - { - SSL_DEBUG_MSG( 2, ( "going for ssl_hw_record_read()" ) ); - - ret = ssl_hw_record_read( ssl ); - if( ret != 0 && ret != POLARSSL_ERR_SSL_HW_ACCEL_FALLTHROUGH ) - { - SSL_DEBUG_RET( 1, "ssl_hw_record_read", ret ); - return( POLARSSL_ERR_SSL_HW_ACCEL_FAILED ); - } - - if( ret == 0 ) - done = 1; - } -#endif /* POLARSSL_SSL_HW_RECORD_ACCEL */ - if( !done && ssl->transform_in != NULL ) - { - if( ( ret = ssl_decrypt_buf( ssl ) ) != 0 ) - { -#if defined(POLARSSL_SSL_ALERT_MESSAGES) - if( ret == POLARSSL_ERR_SSL_INVALID_MAC ) - { - ssl_send_alert_message( ssl, - SSL_ALERT_LEVEL_FATAL, - SSL_ALERT_MSG_BAD_RECORD_MAC ); - } -#endif - SSL_DEBUG_RET( 1, "ssl_decrypt_buf", ret ); - return( ret ); - } - - SSL_DEBUG_BUF( 4, "input payload after decrypt", - ssl->in_msg, ssl->in_msglen ); - - if( ssl->in_msglen > SSL_MAX_CONTENT_LEN ) - { - SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( POLARSSL_ERR_SSL_INVALID_RECORD ); - } - } - -#if defined(POLARSSL_ZLIB_SUPPORT) - if( ssl->transform_in != NULL && - ssl->session_in->compression == SSL_COMPRESS_DEFLATE ) - { - if( ( ret = ssl_decompress_buf( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_decompress_buf", ret ); - return( ret ); - } - - ssl->in_hdr[3] = (unsigned char)( ssl->in_msglen >> 8 ); - ssl->in_hdr[4] = (unsigned char)( ssl->in_msglen ); - } -#endif /* POLARSSL_ZLIB_SUPPORT */ - - if( ssl->in_msgtype != SSL_MSG_HANDSHAKE && - ssl->in_msgtype != SSL_MSG_ALERT && - ssl->in_msgtype != SSL_MSG_CHANGE_CIPHER_SPEC && - ssl->in_msgtype != SSL_MSG_APPLICATION_DATA ) - { - SSL_DEBUG_MSG( 1, ( "unknown record type" ) ); - - if( ( ret = ssl_send_alert_message( ssl, - SSL_ALERT_LEVEL_FATAL, - SSL_ALERT_MSG_UNEXPECTED_MESSAGE ) ) != 0 ) - { - return( ret ); - } - - return( POLARSSL_ERR_SSL_INVALID_RECORD ); - } - - if( ssl->in_msgtype == SSL_MSG_HANDSHAKE ) - { - ssl->in_hslen = 4; - ssl->in_hslen += ( ssl->in_msg[2] << 8 ) | ssl->in_msg[3]; - - SSL_DEBUG_MSG( 3, ( "handshake message: msglen =" - " %d, type = %d, hslen = %d", - ssl->in_msglen, ssl->in_msg[0], ssl->in_hslen ) ); - - /* - * Additional checks to validate the handshake header - */ - if( ssl->in_msglen < 4 || ssl->in_msg[1] != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad handshake length" ) ); - return( POLARSSL_ERR_SSL_INVALID_RECORD ); - } - - if( ssl->in_msglen < ssl->in_hslen ) - { - SSL_DEBUG_MSG( 1, ( "bad handshake length" ) ); - return( POLARSSL_ERR_SSL_INVALID_RECORD ); - } - - if( ssl->state != SSL_HANDSHAKE_OVER ) - ssl->handshake->update_checksum( ssl, ssl->in_msg, ssl->in_hslen ); - } - - if( ssl->in_msgtype == SSL_MSG_ALERT ) - { - SSL_DEBUG_MSG( 2, ( "got an alert message, type: [%d:%d]", - ssl->in_msg[0], ssl->in_msg[1] ) ); - - /* - * Ignore non-fatal alerts, except close_notify - */ - if( ssl->in_msg[0] == SSL_ALERT_LEVEL_FATAL ) - { - SSL_DEBUG_MSG( 1, ( "is a fatal alert message (msg %d)", - ssl->in_msg[1] ) ); - /** - * Subtract from error code as ssl->in_msg[1] is 7-bit positive - * error identifier. - */ - return( POLARSSL_ERR_SSL_FATAL_ALERT_MESSAGE ); - } - - if( ssl->in_msg[0] == SSL_ALERT_LEVEL_WARNING && - ssl->in_msg[1] == SSL_ALERT_MSG_CLOSE_NOTIFY ) - { - SSL_DEBUG_MSG( 2, ( "is a close notify message" ) ); - return( POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY ); - } - } - - ssl->in_left = 0; - - SSL_DEBUG_MSG( 2, ( "<= read record" ) ); - - return( 0 ); -} - -int ssl_send_fatal_handshake_failure( ssl_context *ssl ) -{ - int ret; - - if( ( ret = ssl_send_alert_message( ssl, - SSL_ALERT_LEVEL_FATAL, - SSL_ALERT_MSG_HANDSHAKE_FAILURE ) ) != 0 ) - { - return( ret ); - } - - return( 0 ); -} - -int ssl_send_alert_message( ssl_context *ssl, - unsigned char level, - unsigned char message ) -{ - int ret; - - SSL_DEBUG_MSG( 2, ( "=> send alert message" ) ); - - ssl->out_msgtype = SSL_MSG_ALERT; - ssl->out_msglen = 2; - ssl->out_msg[0] = level; - ssl->out_msg[1] = message; - - if( ( ret = ssl_write_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_write_record", ret ); - return( ret ); - } - - SSL_DEBUG_MSG( 2, ( "<= send alert message" ) ); - - return( 0 ); -} - -/* - * Handshake functions - */ -#if !defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED) && \ - !defined(POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) -int ssl_write_certificate( ssl_context *ssl ) -{ - const ssl_ciphersuite_t *ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> write certificate" ) ); - - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK ) - { - SSL_DEBUG_MSG( 2, ( "<= skip write certificate" ) ); - ssl->state++; - return( 0 ); - } - - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); -} - -int ssl_parse_certificate( ssl_context *ssl ) -{ - const ssl_ciphersuite_t *ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> parse certificate" ) ); - - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK ) - { - SSL_DEBUG_MSG( 2, ( "<= skip parse certificate" ) ); - ssl->state++; - return( 0 ); - } - - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); -} -#else -int ssl_write_certificate( ssl_context *ssl ) -{ - int ret = POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE; - size_t i, n; - const x509_crt *crt; - const ssl_ciphersuite_t *ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> write certificate" ) ); - - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK ) - { - SSL_DEBUG_MSG( 2, ( "<= skip write certificate" ) ); - ssl->state++; - return( 0 ); - } - - if( ssl->endpoint == SSL_IS_CLIENT ) - { - if( ssl->client_auth == 0 ) - { - SSL_DEBUG_MSG( 2, ( "<= skip write certificate" ) ); - ssl->state++; - return( 0 ); - } - -#if defined(POLARSSL_SSL_PROTO_SSL3) - /* - * If using SSLv3 and got no cert, send an Alert message - * (otherwise an empty Certificate message will be sent). - */ - if( ssl_own_cert( ssl ) == NULL && - ssl->minor_ver == SSL_MINOR_VERSION_0 ) - { - ssl->out_msglen = 2; - ssl->out_msgtype = SSL_MSG_ALERT; - ssl->out_msg[0] = SSL_ALERT_LEVEL_WARNING; - ssl->out_msg[1] = SSL_ALERT_MSG_NO_CERT; - - SSL_DEBUG_MSG( 2, ( "got no certificate to send" ) ); - goto write_msg; - } -#endif /* POLARSSL_SSL_PROTO_SSL3 */ - } - else /* SSL_IS_SERVER */ - { - if( ssl_own_cert( ssl ) == NULL ) - { - SSL_DEBUG_MSG( 1, ( "got no certificate to send" ) ); - return( POLARSSL_ERR_SSL_CERTIFICATE_REQUIRED ); - } - } - - SSL_DEBUG_CRT( 3, "own certificate", ssl_own_cert( ssl ) ); - - /* - * 0 . 0 handshake type - * 1 . 3 handshake length - * 4 . 6 length of all certs - * 7 . 9 length of cert. 1 - * 10 . n-1 peer certificate - * n . n+2 length of cert. 2 - * n+3 . ... upper level cert, etc. - */ - i = 7; - crt = ssl_own_cert( ssl ); - - while( crt != NULL ) - { - n = crt->raw.len; - if( n > SSL_MAX_CONTENT_LEN - 3 - i ) - { - SSL_DEBUG_MSG( 1, ( "certificate too large, %d > %d", - i + 3 + n, SSL_MAX_CONTENT_LEN ) ); - return( POLARSSL_ERR_SSL_CERTIFICATE_TOO_LARGE ); - } - - ssl->out_msg[i ] = (unsigned char)( n >> 16 ); - ssl->out_msg[i + 1] = (unsigned char)( n >> 8 ); - ssl->out_msg[i + 2] = (unsigned char)( n ); - - i += 3; memcpy( ssl->out_msg + i, crt->raw.p, n ); - i += n; crt = crt->next; - } - - ssl->out_msg[4] = (unsigned char)( ( i - 7 ) >> 16 ); - ssl->out_msg[5] = (unsigned char)( ( i - 7 ) >> 8 ); - ssl->out_msg[6] = (unsigned char)( ( i - 7 ) ); - - ssl->out_msglen = i; - ssl->out_msgtype = SSL_MSG_HANDSHAKE; - ssl->out_msg[0] = SSL_HS_CERTIFICATE; - -#if defined(POLARSSL_SSL_PROTO_SSL3) -write_msg: -#endif - - ssl->state++; - - if( ( ret = ssl_write_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_write_record", ret ); - return( ret ); - } - - SSL_DEBUG_MSG( 2, ( "<= write certificate" ) ); - - return( ret ); -} - -int ssl_parse_certificate( ssl_context *ssl ) -{ - int ret = POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE; - size_t i, n; - const ssl_ciphersuite_t *ciphersuite_info = ssl->transform_negotiate->ciphersuite_info; - - SSL_DEBUG_MSG( 2, ( "=> parse certificate" ) ); - - if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_PSK ) - { - SSL_DEBUG_MSG( 2, ( "<= skip parse certificate" ) ); - ssl->state++; - return( 0 ); - } - - if( ssl->endpoint == SSL_IS_SERVER && - ( ssl->authmode == SSL_VERIFY_NONE || - ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK ) ) - { - ssl->session_negotiate->verify_result = BADCERT_SKIP_VERIFY; - SSL_DEBUG_MSG( 2, ( "<= skip parse certificate" ) ); - ssl->state++; - return( 0 ); - } - - if( ( ret = ssl_read_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_read_record", ret ); - return( ret ); - } - - ssl->state++; - -#if defined(POLARSSL_SSL_PROTO_SSL3) - /* - * Check if the client sent an empty certificate - */ - if( ssl->endpoint == SSL_IS_SERVER && - ssl->minor_ver == SSL_MINOR_VERSION_0 ) - { - if( ssl->in_msglen == 2 && - ssl->in_msgtype == SSL_MSG_ALERT && - ssl->in_msg[0] == SSL_ALERT_LEVEL_WARNING && - ssl->in_msg[1] == SSL_ALERT_MSG_NO_CERT ) - { - SSL_DEBUG_MSG( 1, ( "SSLv3 client has no certificate" ) ); - - ssl->session_negotiate->verify_result = BADCERT_MISSING; - if( ssl->authmode == SSL_VERIFY_OPTIONAL ) - return( 0 ); - else - return( POLARSSL_ERR_SSL_NO_CLIENT_CERTIFICATE ); - } - } -#endif /* POLARSSL_SSL_PROTO_SSL3 */ - -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->endpoint == SSL_IS_SERVER && - ssl->minor_ver != SSL_MINOR_VERSION_0 ) - { - if( ssl->in_hslen == 7 && - ssl->in_msgtype == SSL_MSG_HANDSHAKE && - ssl->in_msg[0] == SSL_HS_CERTIFICATE && - memcmp( ssl->in_msg + 4, "\0\0\0", 3 ) == 0 ) - { - SSL_DEBUG_MSG( 1, ( "TLSv1 client has no certificate" ) ); - - ssl->session_negotiate->verify_result = BADCERT_MISSING; - if( ssl->authmode == SSL_VERIFY_REQUIRED ) - return( POLARSSL_ERR_SSL_NO_CLIENT_CERTIFICATE ); - else - return( 0 ); - } - } -#endif /* POLARSSL_SSL_PROTO_TLS1 || POLARSSL_SSL_PROTO_TLS1_1 || \ - POLARSSL_SSL_PROTO_TLS1_2 */ - - if( ssl->in_msgtype != SSL_MSG_HANDSHAKE ) - { - SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE ); - } - - if( ssl->in_msg[0] != SSL_HS_CERTIFICATE || ssl->in_hslen < 10 ) - { - SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE ); - } - - /* - * Same message structure as in ssl_write_certificate() - */ - n = ( ssl->in_msg[5] << 8 ) | ssl->in_msg[6]; - - if( ssl->in_msg[4] != 0 || ssl->in_hslen != 7 + n ) - { - SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE ); - } - - /* In case we tried to reuse a session but it failed */ - if( ssl->session_negotiate->peer_cert != NULL ) - { - x509_crt_free( ssl->session_negotiate->peer_cert ); - polarssl_free( ssl->session_negotiate->peer_cert ); - } - - if( ( ssl->session_negotiate->peer_cert = (x509_crt *) polarssl_malloc( - sizeof( x509_crt ) ) ) == NULL ) - { - SSL_DEBUG_MSG( 1, ( "malloc(%d bytes) failed", - sizeof( x509_crt ) ) ); - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - } - - x509_crt_init( ssl->session_negotiate->peer_cert ); - - i = 7; - - while( i < ssl->in_hslen ) - { - if( ssl->in_msg[i] != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE ); - } - - n = ( (unsigned int) ssl->in_msg[i + 1] << 8 ) - | (unsigned int) ssl->in_msg[i + 2]; - i += 3; - - if( n < 128 || i + n > ssl->in_hslen ) - { - SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE ); - } - - ret = x509_crt_parse_der( ssl->session_negotiate->peer_cert, - ssl->in_msg + i, n ); - if( ret != 0 ) - { - SSL_DEBUG_RET( 1, " x509_crt_parse_der", ret ); - return( ret ); - } - - i += n; - } - - SSL_DEBUG_CRT( 3, "peer certificate", ssl->session_negotiate->peer_cert ); - - /* - * On client, make sure the server cert doesn't change during renego to - * avoid "triple handshake" attack: https://secure-resumption.com/ - */ - if( ssl->endpoint == SSL_IS_CLIENT && - ssl->renegotiation == SSL_RENEGOTIATION ) - { - if( ssl->session->peer_cert == NULL ) - { - SSL_DEBUG_MSG( 1, ( "new server cert during renegotiation" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE ); - } - - if( ssl->session->peer_cert->raw.len != - ssl->session_negotiate->peer_cert->raw.len || - memcmp( ssl->session->peer_cert->raw.p, - ssl->session_negotiate->peer_cert->raw.p, - ssl->session->peer_cert->raw.len ) != 0 ) - { - SSL_DEBUG_MSG( 1, ( "server cert changed during renegotiation" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE ); - } - } - - if( ssl->authmode != SSL_VERIFY_NONE ) - { - if( ssl->ca_chain == NULL ) - { - SSL_DEBUG_MSG( 1, ( "got no CA chain" ) ); - return( POLARSSL_ERR_SSL_CA_CHAIN_REQUIRED ); - } - - /* - * Main check: verify certificate - */ - ret = x509_crt_verify( ssl->session_negotiate->peer_cert, - ssl->ca_chain, ssl->ca_crl, ssl->peer_cn, - &ssl->session_negotiate->verify_result, - ssl->f_vrfy, ssl->p_vrfy ); - - if( ret != 0 ) - { - SSL_DEBUG_RET( 1, "x509_verify_cert", ret ); - } - - /* - * Secondary checks: always done, but change 'ret' only if it was 0 - */ - -#if defined(POLARSSL_SSL_SET_CURVES) - { - pk_context *pk = &ssl->session_negotiate->peer_cert->pk; - - /* If certificate uses an EC key, make sure the curve is OK */ - if( pk_can_do( pk, POLARSSL_PK_ECKEY ) && - ! ssl_curve_is_acceptable( ssl, pk_ec( *pk )->grp.id ) ) - { - SSL_DEBUG_MSG( 1, ( "bad certificate (EC key curve)" ) ); - if( ret == 0 ) - ret = POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE; - } - } -#endif /* POLARSSL_SSL_SET_CURVES */ - - if( ssl_check_cert_usage( ssl->session_negotiate->peer_cert, - ciphersuite_info, - ! ssl->endpoint ) != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad certificate (usage extensions)" ) ); - if( ret == 0 ) - ret = POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE; - } - - if( ssl->authmode != SSL_VERIFY_REQUIRED ) - ret = 0; - } - - SSL_DEBUG_MSG( 2, ( "<= parse certificate" ) ); - - return( ret ); -} -#endif /* !POLARSSL_KEY_EXCHANGE_RSA_ENABLED - !POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED - !POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED - !POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED - !POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED - !POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED - !POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ - -int ssl_write_change_cipher_spec( ssl_context *ssl ) -{ - int ret; - - SSL_DEBUG_MSG( 2, ( "=> write change cipher spec" ) ); - - ssl->out_msgtype = SSL_MSG_CHANGE_CIPHER_SPEC; - ssl->out_msglen = 1; - ssl->out_msg[0] = 1; - - ssl->state++; - - if( ( ret = ssl_write_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_write_record", ret ); - return( ret ); - } - - SSL_DEBUG_MSG( 2, ( "<= write change cipher spec" ) ); - - return( 0 ); -} - -int ssl_parse_change_cipher_spec( ssl_context *ssl ) -{ - int ret; - - SSL_DEBUG_MSG( 2, ( "=> parse change cipher spec" ) ); - - if( ( ret = ssl_read_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_read_record", ret ); - return( ret ); - } - - if( ssl->in_msgtype != SSL_MSG_CHANGE_CIPHER_SPEC ) - { - SSL_DEBUG_MSG( 1, ( "bad change cipher spec message" ) ); - return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE ); - } - - if( ssl->in_msglen != 1 || ssl->in_msg[0] != 1 ) - { - SSL_DEBUG_MSG( 1, ( "bad change cipher spec message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC ); - } - - ssl->state++; - - SSL_DEBUG_MSG( 2, ( "<= parse change cipher spec" ) ); - - return( 0 ); -} - -void ssl_optimize_checksum( ssl_context *ssl, - const ssl_ciphersuite_t *ciphersuite_info ) -{ - ((void) ciphersuite_info); - -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_1) - if( ssl->minor_ver < SSL_MINOR_VERSION_3 ) - ssl->handshake->update_checksum = ssl_update_checksum_md5sha1; - else -#endif -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -#if defined(POLARSSL_SHA512_C) - if( ciphersuite_info->mac == POLARSSL_MD_SHA384 ) - ssl->handshake->update_checksum = ssl_update_checksum_sha384; - else -#endif -#if defined(POLARSSL_SHA256_C) - if( ciphersuite_info->mac != POLARSSL_MD_SHA384 ) - ssl->handshake->update_checksum = ssl_update_checksum_sha256; - else -#endif -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return; - } -} - -static void ssl_update_checksum_start( ssl_context *ssl, - const unsigned char *buf, size_t len ) -{ -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_1) - md5_update( &ssl->handshake->fin_md5 , buf, len ); - sha1_update( &ssl->handshake->fin_sha1, buf, len ); -#endif -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -#if defined(POLARSSL_SHA256_C) - sha256_update( &ssl->handshake->fin_sha256, buf, len ); -#endif -#if defined(POLARSSL_SHA512_C) - sha512_update( &ssl->handshake->fin_sha512, buf, len ); -#endif -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ -} - -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_1) -static void ssl_update_checksum_md5sha1( ssl_context *ssl, - const unsigned char *buf, size_t len ) -{ - md5_update( &ssl->handshake->fin_md5 , buf, len ); - sha1_update( &ssl->handshake->fin_sha1, buf, len ); -} -#endif - -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -#if defined(POLARSSL_SHA256_C) -static void ssl_update_checksum_sha256( ssl_context *ssl, - const unsigned char *buf, size_t len ) -{ - sha256_update( &ssl->handshake->fin_sha256, buf, len ); -} -#endif - -#if defined(POLARSSL_SHA512_C) -static void ssl_update_checksum_sha384( ssl_context *ssl, - const unsigned char *buf, size_t len ) -{ - sha512_update( &ssl->handshake->fin_sha512, buf, len ); -} -#endif -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - -#if defined(POLARSSL_SSL_PROTO_SSL3) -static void ssl_calc_finished_ssl( - ssl_context *ssl, unsigned char *buf, int from ) -{ - const char *sender; - md5_context md5; - sha1_context sha1; - - unsigned char padbuf[48]; - unsigned char md5sum[16]; - unsigned char sha1sum[20]; - - ssl_session *session = ssl->session_negotiate; - if( !session ) - session = ssl->session; - - SSL_DEBUG_MSG( 2, ( "=> calc finished ssl" ) ); - - memcpy( &md5 , &ssl->handshake->fin_md5 , sizeof(md5_context) ); - memcpy( &sha1, &ssl->handshake->fin_sha1, sizeof(sha1_context) ); - - /* - * SSLv3: - * hash = - * MD5( master + pad2 + - * MD5( handshake + sender + master + pad1 ) ) - * + SHA1( master + pad2 + - * SHA1( handshake + sender + master + pad1 ) ) - */ - -#if !defined(POLARSSL_MD5_ALT) - SSL_DEBUG_BUF( 4, "finished md5 state", (unsigned char *) - md5.state, sizeof( md5.state ) ); -#endif - -#if !defined(POLARSSL_SHA1_ALT) - SSL_DEBUG_BUF( 4, "finished sha1 state", (unsigned char *) - sha1.state, sizeof( sha1.state ) ); -#endif - - sender = ( from == SSL_IS_CLIENT ) ? "CLNT" - : "SRVR"; - - memset( padbuf, 0x36, 48 ); - - md5_update( &md5, (const unsigned char *) sender, 4 ); - md5_update( &md5, session->master, 48 ); - md5_update( &md5, padbuf, 48 ); - md5_finish( &md5, md5sum ); - - sha1_update( &sha1, (const unsigned char *) sender, 4 ); - sha1_update( &sha1, session->master, 48 ); - sha1_update( &sha1, padbuf, 40 ); - sha1_finish( &sha1, sha1sum ); - - memset( padbuf, 0x5C, 48 ); - - md5_starts( &md5 ); - md5_update( &md5, session->master, 48 ); - md5_update( &md5, padbuf, 48 ); - md5_update( &md5, md5sum, 16 ); - md5_finish( &md5, buf ); - - sha1_starts( &sha1 ); - sha1_update( &sha1, session->master, 48 ); - sha1_update( &sha1, padbuf , 40 ); - sha1_update( &sha1, sha1sum, 20 ); - sha1_finish( &sha1, buf + 16 ); - - SSL_DEBUG_BUF( 3, "calc finished result", buf, 36 ); - - md5_free( &md5 ); - sha1_free( &sha1 ); - - polarssl_zeroize( padbuf, sizeof( padbuf ) ); - polarssl_zeroize( md5sum, sizeof( md5sum ) ); - polarssl_zeroize( sha1sum, sizeof( sha1sum ) ); - - SSL_DEBUG_MSG( 2, ( "<= calc finished" ) ); -} -#endif /* POLARSSL_SSL_PROTO_SSL3 */ - -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) -static void ssl_calc_finished_tls( - ssl_context *ssl, unsigned char *buf, int from ) -{ - int len = 12; - const char *sender; - md5_context md5; - sha1_context sha1; - unsigned char padbuf[36]; - - ssl_session *session = ssl->session_negotiate; - if( !session ) - session = ssl->session; - - SSL_DEBUG_MSG( 2, ( "=> calc finished tls" ) ); - - memcpy( &md5 , &ssl->handshake->fin_md5 , sizeof(md5_context) ); - memcpy( &sha1, &ssl->handshake->fin_sha1, sizeof(sha1_context) ); - - /* - * TLSv1: - * hash = PRF( master, finished_label, - * MD5( handshake ) + SHA1( handshake ) )[0..11] - */ - -#if !defined(POLARSSL_MD5_ALT) - SSL_DEBUG_BUF( 4, "finished md5 state", (unsigned char *) - md5.state, sizeof( md5.state ) ); -#endif - -#if !defined(POLARSSL_SHA1_ALT) - SSL_DEBUG_BUF( 4, "finished sha1 state", (unsigned char *) - sha1.state, sizeof( sha1.state ) ); -#endif - - sender = ( from == SSL_IS_CLIENT ) - ? "client finished" - : "server finished"; - - md5_finish( &md5, padbuf ); - sha1_finish( &sha1, padbuf + 16 ); - - ssl->handshake->tls_prf( session->master, 48, sender, - padbuf, 36, buf, len ); - - SSL_DEBUG_BUF( 3, "calc finished result", buf, len ); - - md5_free( &md5 ); - sha1_free( &sha1 ); - - polarssl_zeroize( padbuf, sizeof( padbuf ) ); - - SSL_DEBUG_MSG( 2, ( "<= calc finished" ) ); -} -#endif /* POLARSSL_SSL_PROTO_TLS1 || POLARSSL_SSL_PROTO_TLS1_1 */ - -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -#if defined(POLARSSL_SHA256_C) -static void ssl_calc_finished_tls_sha256( - ssl_context *ssl, unsigned char *buf, int from ) -{ - int len = 12; - const char *sender; - sha256_context sha256; - unsigned char padbuf[32]; - - ssl_session *session = ssl->session_negotiate; - if( !session ) - session = ssl->session; - - SSL_DEBUG_MSG( 2, ( "=> calc finished tls sha256" ) ); - - memcpy( &sha256, &ssl->handshake->fin_sha256, sizeof(sha256_context) ); - - /* - * TLSv1.2: - * hash = PRF( master, finished_label, - * Hash( handshake ) )[0.11] - */ - -#if !defined(POLARSSL_SHA256_ALT) - SSL_DEBUG_BUF( 4, "finished sha2 state", (unsigned char *) - sha256.state, sizeof( sha256.state ) ); -#endif - - sender = ( from == SSL_IS_CLIENT ) - ? "client finished" - : "server finished"; - - sha256_finish( &sha256, padbuf ); - - ssl->handshake->tls_prf( session->master, 48, sender, - padbuf, 32, buf, len ); - - SSL_DEBUG_BUF( 3, "calc finished result", buf, len ); - - sha256_free( &sha256 ); - - polarssl_zeroize( padbuf, sizeof( padbuf ) ); - - SSL_DEBUG_MSG( 2, ( "<= calc finished" ) ); -} -#endif /* POLARSSL_SHA256_C */ - -#if defined(POLARSSL_SHA512_C) -static void ssl_calc_finished_tls_sha384( - ssl_context *ssl, unsigned char *buf, int from ) -{ - int len = 12; - const char *sender; - sha512_context sha512; - unsigned char padbuf[48]; - - ssl_session *session = ssl->session_negotiate; - if( !session ) - session = ssl->session; - - SSL_DEBUG_MSG( 2, ( "=> calc finished tls sha384" ) ); - - memcpy( &sha512, &ssl->handshake->fin_sha512, sizeof(sha512_context) ); - - /* - * TLSv1.2: - * hash = PRF( master, finished_label, - * Hash( handshake ) )[0.11] - */ - -#if !defined(POLARSSL_SHA512_ALT) - SSL_DEBUG_BUF( 4, "finished sha512 state", (unsigned char *) - sha512.state, sizeof( sha512.state ) ); -#endif - - sender = ( from == SSL_IS_CLIENT ) - ? "client finished" - : "server finished"; - - sha512_finish( &sha512, padbuf ); - - ssl->handshake->tls_prf( session->master, 48, sender, - padbuf, 48, buf, len ); - - SSL_DEBUG_BUF( 3, "calc finished result", buf, len ); - - sha512_free( &sha512 ); - - polarssl_zeroize( padbuf, sizeof( padbuf ) ); - - SSL_DEBUG_MSG( 2, ( "<= calc finished" ) ); -} -#endif /* POLARSSL_SHA512_C */ -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - -void ssl_handshake_wrapup( ssl_context *ssl ) -{ - int resume = ssl->handshake->resume; - - SSL_DEBUG_MSG( 3, ( "=> handshake wrapup" ) ); - - /* - * Free our handshake params - */ - ssl_handshake_free( ssl->handshake ); - polarssl_free( ssl->handshake ); - ssl->handshake = NULL; - - if( ssl->renegotiation == SSL_RENEGOTIATION ) - { - ssl->renegotiation = SSL_RENEGOTIATION_DONE; - ssl->renego_records_seen = 0; - } - - /* - * Switch in our now active transform context - */ - if( ssl->transform ) - { - ssl_transform_free( ssl->transform ); - polarssl_free( ssl->transform ); - } - ssl->transform = ssl->transform_negotiate; - ssl->transform_negotiate = NULL; - - if( ssl->session ) - { - ssl_session_free( ssl->session ); - polarssl_free( ssl->session ); - } - ssl->session = ssl->session_negotiate; - ssl->session_negotiate = NULL; - - /* - * Add cache entry - */ - if( ssl->f_set_cache != NULL && - ssl->session->length != 0 && - resume == 0 ) - { - if( ssl->f_set_cache( ssl->p_set_cache, ssl->session ) != 0 ) - SSL_DEBUG_MSG( 1, ( "cache did not store session" ) ); - } - - ssl->state++; - - SSL_DEBUG_MSG( 3, ( "<= handshake wrapup" ) ); -} - -int ssl_write_finished( ssl_context *ssl ) -{ - int ret, hash_len; - - SSL_DEBUG_MSG( 2, ( "=> write finished" ) ); - - /* - * Set the out_msg pointer to the correct location based on IV length - */ - if( ssl->minor_ver >= SSL_MINOR_VERSION_2 ) - { - ssl->out_msg = ssl->out_iv + ssl->transform_negotiate->ivlen - - ssl->transform_negotiate->fixed_ivlen; - } - else - ssl->out_msg = ssl->out_iv; - - ssl->handshake->calc_finished( ssl, ssl->out_msg + 4, ssl->endpoint ); - - // TODO TLS/1.2 Hash length is determined by cipher suite (Page 63) - hash_len = ( ssl->minor_ver == SSL_MINOR_VERSION_0 ) ? 36 : 12; - - ssl->verify_data_len = hash_len; - memcpy( ssl->own_verify_data, ssl->out_msg + 4, hash_len ); - - ssl->out_msglen = 4 + hash_len; - ssl->out_msgtype = SSL_MSG_HANDSHAKE; - ssl->out_msg[0] = SSL_HS_FINISHED; - - /* - * In case of session resuming, invert the client and server - * ChangeCipherSpec messages order. - */ - if( ssl->handshake->resume != 0 ) - { - if( ssl->endpoint == SSL_IS_CLIENT ) - ssl->state = SSL_HANDSHAKE_WRAPUP; - else - ssl->state = SSL_CLIENT_CHANGE_CIPHER_SPEC; - } - else - ssl->state++; - - /* - * Switch to our negotiated transform and session parameters for outbound - * data. - */ - SSL_DEBUG_MSG( 3, ( "switching to new transform spec for outbound data" ) ); - ssl->transform_out = ssl->transform_negotiate; - ssl->session_out = ssl->session_negotiate; - memset( ssl->out_ctr, 0, 8 ); - -#if defined(POLARSSL_SSL_HW_RECORD_ACCEL) - if( ssl_hw_record_activate != NULL ) - { - if( ( ret = ssl_hw_record_activate( ssl, SSL_CHANNEL_OUTBOUND ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_hw_record_activate", ret ); - return( POLARSSL_ERR_SSL_HW_ACCEL_FAILED ); - } - } -#endif - - if( ( ret = ssl_write_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_write_record", ret ); - return( ret ); - } - - SSL_DEBUG_MSG( 2, ( "<= write finished" ) ); - - return( 0 ); -} - -int ssl_parse_finished( ssl_context *ssl ) -{ - int ret; - unsigned int hash_len; - unsigned char buf[36]; - - SSL_DEBUG_MSG( 2, ( "=> parse finished" ) ); - - ssl->handshake->calc_finished( ssl, buf, ssl->endpoint ^ 1 ); - - /* - * Switch to our negotiated transform and session parameters for inbound - * data. - */ - SSL_DEBUG_MSG( 3, ( "switching to new transform spec for inbound data" ) ); - ssl->transform_in = ssl->transform_negotiate; - ssl->session_in = ssl->session_negotiate; - memset( ssl->in_ctr, 0, 8 ); - - /* - * Set the in_msg pointer to the correct location based on IV length - */ - if( ssl->minor_ver >= SSL_MINOR_VERSION_2 ) - { - ssl->in_msg = ssl->in_iv + ssl->transform_negotiate->ivlen - - ssl->transform_negotiate->fixed_ivlen; - } - else - ssl->in_msg = ssl->in_iv; - -#if defined(POLARSSL_SSL_HW_RECORD_ACCEL) - if( ssl_hw_record_activate != NULL ) - { - if( ( ret = ssl_hw_record_activate( ssl, SSL_CHANNEL_INBOUND ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_hw_record_activate", ret ); - return( POLARSSL_ERR_SSL_HW_ACCEL_FAILED ); - } - } -#endif - - if( ( ret = ssl_read_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_read_record", ret ); - return( ret ); - } - - if( ssl->in_msgtype != SSL_MSG_HANDSHAKE ) - { - SSL_DEBUG_MSG( 1, ( "bad finished message" ) ); - return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE ); - } - - // TODO TLS/1.2 Hash length is determined by cipher suite (Page 63) - hash_len = ( ssl->minor_ver == SSL_MINOR_VERSION_0 ) ? 36 : 12; - - if( ssl->in_msg[0] != SSL_HS_FINISHED || - ssl->in_hslen != 4 + hash_len ) - { - SSL_DEBUG_MSG( 1, ( "bad finished message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_FINISHED ); - } - - if( safer_memcmp( ssl->in_msg + 4, buf, hash_len ) != 0 ) - { - SSL_DEBUG_MSG( 1, ( "bad finished message" ) ); - return( POLARSSL_ERR_SSL_BAD_HS_FINISHED ); - } - - ssl->verify_data_len = hash_len; - memcpy( ssl->peer_verify_data, buf, hash_len ); - - if( ssl->handshake->resume != 0 ) - { - if( ssl->endpoint == SSL_IS_CLIENT ) - ssl->state = SSL_CLIENT_CHANGE_CIPHER_SPEC; - - if( ssl->endpoint == SSL_IS_SERVER ) - ssl->state = SSL_HANDSHAKE_WRAPUP; - } - else - ssl->state++; - - SSL_DEBUG_MSG( 2, ( "<= parse finished" ) ); - - return( 0 ); -} - -static void ssl_handshake_params_init( ssl_handshake_params *handshake ) -{ - memset( handshake, 0, sizeof( ssl_handshake_params ) ); - -#if defined(POLARSSL_SSL_PROTO_SSL3) || defined(POLARSSL_SSL_PROTO_TLS1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_1) - md5_init( &handshake->fin_md5 ); - sha1_init( &handshake->fin_sha1 ); - md5_starts( &handshake->fin_md5 ); - sha1_starts( &handshake->fin_sha1 ); -#endif -#if defined(POLARSSL_SSL_PROTO_TLS1_2) -#if defined(POLARSSL_SHA256_C) - sha256_init( &handshake->fin_sha256 ); - sha256_starts( &handshake->fin_sha256, 0 ); -#endif -#if defined(POLARSSL_SHA512_C) - sha512_init( &handshake->fin_sha512 ); - sha512_starts( &handshake->fin_sha512, 1 ); -#endif -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ - - handshake->update_checksum = ssl_update_checksum_start; - handshake->sig_alg = SSL_HASH_SHA1; - -#if defined(POLARSSL_DHM_C) - dhm_init( &handshake->dhm_ctx ); -#endif -#if defined(POLARSSL_ECDH_C) - ecdh_init( &handshake->ecdh_ctx ); -#endif -} - -static void ssl_transform_init( ssl_transform *transform ) -{ - memset( transform, 0, sizeof(ssl_transform) ); - - cipher_init( &transform->cipher_ctx_enc ); - cipher_init( &transform->cipher_ctx_dec ); - - md_init( &transform->md_ctx_enc ); - md_init( &transform->md_ctx_dec ); -} - -void ssl_session_init( ssl_session *session ) -{ - memset( session, 0, sizeof(ssl_session) ); -} - -static int ssl_handshake_init( ssl_context *ssl ) -{ - /* Clear old handshake information if present */ - if( ssl->transform_negotiate ) - ssl_transform_free( ssl->transform_negotiate ); - if( ssl->session_negotiate ) - ssl_session_free( ssl->session_negotiate ); - if( ssl->handshake ) - ssl_handshake_free( ssl->handshake ); - - /* - * Either the pointers are now NULL or cleared properly and can be freed. - * Now allocate missing structures. - */ - if( ssl->transform_negotiate == NULL ) - { - ssl->transform_negotiate = - (ssl_transform *) polarssl_malloc( sizeof(ssl_transform) ); - } - - if( ssl->session_negotiate == NULL ) - { - ssl->session_negotiate = - (ssl_session *) polarssl_malloc( sizeof(ssl_session) ); - } - - if( ssl->handshake == NULL) - { - ssl->handshake = (ssl_handshake_params *) - polarssl_malloc( sizeof(ssl_handshake_params) ); - } - - /* All pointers should exist and can be directly freed without issue */ - if( ssl->handshake == NULL || - ssl->transform_negotiate == NULL || - ssl->session_negotiate == NULL ) - { - SSL_DEBUG_MSG( 1, ( "malloc() of ssl sub-contexts failed" ) ); - - polarssl_free( ssl->handshake ); - polarssl_free( ssl->transform_negotiate ); - polarssl_free( ssl->session_negotiate ); - - ssl->handshake = NULL; - ssl->transform_negotiate = NULL; - ssl->session_negotiate = NULL; - - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - } - - /* Initialize structures */ - ssl_session_init( ssl->session_negotiate ); - ssl_transform_init( ssl->transform_negotiate ); - ssl_handshake_params_init( ssl->handshake ); - -#if defined(POLARSSL_X509_CRT_PARSE_C) - ssl->handshake->key_cert = ssl->key_cert; -#endif - - return( 0 ); -} - -/* - * Initialize an SSL context - */ -int ssl_init( ssl_context *ssl ) -{ - int ret; - int len = SSL_BUFFER_LEN; - - memset( ssl, 0, sizeof( ssl_context ) ); - - /* - * Sane defaults - */ - ssl->min_major_ver = SSL_MIN_MAJOR_VERSION; - ssl->min_minor_ver = SSL_MIN_MINOR_VERSION; - ssl->max_major_ver = SSL_MAX_MAJOR_VERSION; - ssl->max_minor_ver = SSL_MAX_MINOR_VERSION; - - ssl_set_ciphersuites( ssl, ssl_list_ciphersuites() ); - - ssl->renego_max_records = SSL_RENEGO_MAX_RECORDS_DEFAULT; - -#if defined(POLARSSL_DHM_C) - if( ( ret = mpi_read_string( &ssl->dhm_P, 16, - POLARSSL_DHM_RFC5114_MODP_1024_P) ) != 0 || - ( ret = mpi_read_string( &ssl->dhm_G, 16, - POLARSSL_DHM_RFC5114_MODP_1024_G) ) != 0 ) - { - SSL_DEBUG_RET( 1, "mpi_read_string", ret ); - return( ret ); - } -#endif - - /* - * Prepare base structures - */ - ssl->in_ctr = (unsigned char *) polarssl_malloc( len ); - ssl->in_hdr = ssl->in_ctr + 8; - ssl->in_iv = ssl->in_ctr + 13; - ssl->in_msg = ssl->in_ctr + 13; - - if( ssl->in_ctr == NULL ) - { - SSL_DEBUG_MSG( 1, ( "malloc(%d bytes) failed", len ) ); - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - } - - ssl->out_ctr = (unsigned char *) polarssl_malloc( len ); - ssl->out_hdr = ssl->out_ctr + 8; - ssl->out_iv = ssl->out_ctr + 13; - ssl->out_msg = ssl->out_ctr + 13; - - if( ssl->out_ctr == NULL ) - { - SSL_DEBUG_MSG( 1, ( "malloc(%d bytes) failed", len ) ); - polarssl_free( ssl->in_ctr ); - ssl->in_ctr = NULL; - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - } - - memset( ssl-> in_ctr, 0, SSL_BUFFER_LEN ); - memset( ssl->out_ctr, 0, SSL_BUFFER_LEN ); - -#if defined(POLARSSL_SSL_SESSION_TICKETS) - ssl->ticket_lifetime = SSL_DEFAULT_TICKET_LIFETIME; -#endif - -#if defined(POLARSSL_SSL_SET_CURVES) - ssl->curve_list = ecp_grp_id_list( ); -#endif - - if( ( ret = ssl_handshake_init( ssl ) ) != 0 ) - return( ret ); - - /* - move the cryptoEngine from main to here - */ - if ( rtl_cryptoEngine_init() != 0 ) { - DiagPrintf("crypto engine init failed\r\n"); - } - - - return( 0 ); -} - -/* - * Reset an initialized and used SSL context for re-use while retaining - * all application-set variables, function pointers and data. - */ -int ssl_session_reset( ssl_context *ssl ) -{ - int ret; - - ssl->state = SSL_HELLO_REQUEST; - ssl->renegotiation = SSL_INITIAL_HANDSHAKE; - ssl->secure_renegotiation = SSL_LEGACY_RENEGOTIATION; - - ssl->verify_data_len = 0; - memset( ssl->own_verify_data, 0, 36 ); - memset( ssl->peer_verify_data, 0, 36 ); - - ssl->in_offt = NULL; - - ssl->in_msg = ssl->in_ctr + 13; - ssl->in_msgtype = 0; - ssl->in_msglen = 0; - ssl->in_left = 0; - - ssl->in_hslen = 0; - ssl->nb_zero = 0; - ssl->record_read = 0; - - ssl->out_msg = ssl->out_ctr + 13; - ssl->out_msgtype = 0; - ssl->out_msglen = 0; - ssl->out_left = 0; - - ssl->transform_in = NULL; - ssl->transform_out = NULL; - - ssl->renego_records_seen = 0; - - memset( ssl->out_ctr, 0, SSL_BUFFER_LEN ); - memset( ssl->in_ctr, 0, SSL_BUFFER_LEN ); - -#if defined(POLARSSL_SSL_HW_RECORD_ACCEL) - if( ssl_hw_record_reset != NULL ) - { - SSL_DEBUG_MSG( 2, ( "going for ssl_hw_record_reset()" ) ); - if( ( ret = ssl_hw_record_reset( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_hw_record_reset", ret ); - return( POLARSSL_ERR_SSL_HW_ACCEL_FAILED ); - } - } -#endif - - if( ssl->transform ) - { - ssl_transform_free( ssl->transform ); - polarssl_free( ssl->transform ); - ssl->transform = NULL; - } - - if( ssl->session ) - { - ssl_session_free( ssl->session ); - polarssl_free( ssl->session ); - ssl->session = NULL; - } - -#if defined(POLARSSL_SSL_ALPN) - ssl->alpn_chosen = NULL; -#endif - - if( ( ret = ssl_handshake_init( ssl ) ) != 0 ) - return( ret ); - - return( 0 ); -} - -#if defined(POLARSSL_SSL_SESSION_TICKETS) -static void ssl_ticket_keys_free( ssl_ticket_keys *tkeys ) -{ - aes_free( &tkeys->enc ); - aes_free( &tkeys->dec ); - - polarssl_zeroize( tkeys, sizeof(ssl_ticket_keys) ); -} - -/* - * Allocate and initialize ticket keys - */ -static int ssl_ticket_keys_init( ssl_context *ssl ) -{ - int ret; - ssl_ticket_keys *tkeys; - unsigned char buf[16]; - - if( ssl->ticket_keys != NULL ) - return( 0 ); - - tkeys = (ssl_ticket_keys *) polarssl_malloc( sizeof(ssl_ticket_keys) ); - if( tkeys == NULL ) - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - - aes_init( &tkeys->enc ); - aes_init( &tkeys->dec ); - - if( ( ret = ssl->f_rng( ssl->p_rng, tkeys->key_name, 16 ) ) != 0 ) - { - ssl_ticket_keys_free( tkeys ); - polarssl_free( tkeys ); - return( ret ); - } - - if( ( ret = ssl->f_rng( ssl->p_rng, buf, 16 ) ) != 0 || - ( ret = aes_setkey_enc( &tkeys->enc, buf, 128 ) ) != 0 || - ( ret = aes_setkey_dec( &tkeys->dec, buf, 128 ) ) != 0 ) - { - ssl_ticket_keys_free( tkeys ); - polarssl_free( tkeys ); - return( ret ); - } - - if( ( ret = ssl->f_rng( ssl->p_rng, tkeys->mac_key, 16 ) ) != 0 ) - { - ssl_ticket_keys_free( tkeys ); - polarssl_free( tkeys ); - return( ret ); - } - - ssl->ticket_keys = tkeys; - - return( 0 ); -} -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - -/* - * SSL set accessors - */ -void ssl_set_endpoint( ssl_context *ssl, int endpoint ) -{ - ssl->endpoint = endpoint; - -#if defined(POLARSSL_SSL_SESSION_TICKETS) - if( endpoint == SSL_IS_CLIENT ) - ssl->session_tickets = SSL_SESSION_TICKETS_ENABLED; -#endif -} - -void ssl_set_authmode( ssl_context *ssl, int authmode ) -{ - ssl->authmode = authmode; -} - -#if defined(POLARSSL_X509_CRT_PARSE_C) -void ssl_set_verify( ssl_context *ssl, - int (*f_vrfy)(void *, x509_crt *, int, int *), - void *p_vrfy ) -{ - ssl->f_vrfy = f_vrfy; - ssl->p_vrfy = p_vrfy; -} -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -void ssl_set_rng( ssl_context *ssl, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - ssl->f_rng = f_rng; - ssl->p_rng = p_rng; -} - -void ssl_set_dbg( ssl_context *ssl, - void (*f_dbg)(void *, int, const char *), - void *p_dbg ) -{ - ssl->f_dbg = f_dbg; - ssl->p_dbg = p_dbg; -} - -void ssl_set_bio( ssl_context *ssl, - int (*f_recv)(void *, unsigned char *, size_t), void *p_recv, - int (*f_send)(void *, const unsigned char *, size_t), void *p_send ) -{ - ssl->f_recv = f_recv; - ssl->f_send = f_send; - ssl->p_recv = p_recv; - ssl->p_send = p_send; -} - -void ssl_set_session_cache( ssl_context *ssl, - int (*f_get_cache)(void *, ssl_session *), void *p_get_cache, - int (*f_set_cache)(void *, const ssl_session *), void *p_set_cache ) -{ - ssl->f_get_cache = f_get_cache; - ssl->p_get_cache = p_get_cache; - ssl->f_set_cache = f_set_cache; - ssl->p_set_cache = p_set_cache; -} - -int ssl_set_session( ssl_context *ssl, const ssl_session *session ) -{ - int ret; - - if( ssl == NULL || - session == NULL || - ssl->session_negotiate == NULL || - ssl->endpoint != SSL_IS_CLIENT ) - { - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - } - - if( ( ret = ssl_session_copy( ssl->session_negotiate, session ) ) != 0 ) - return( ret ); - - ssl->handshake->resume = 1; - - return( 0 ); -} - -void ssl_set_ciphersuites( ssl_context *ssl, const int *ciphersuites ) -{ - ssl->ciphersuite_list[SSL_MINOR_VERSION_0] = ciphersuites; - ssl->ciphersuite_list[SSL_MINOR_VERSION_1] = ciphersuites; - ssl->ciphersuite_list[SSL_MINOR_VERSION_2] = ciphersuites; - ssl->ciphersuite_list[SSL_MINOR_VERSION_3] = ciphersuites; -} - -void ssl_set_ciphersuites_for_version( ssl_context *ssl, - const int *ciphersuites, - int major, int minor ) -{ - if( major != SSL_MAJOR_VERSION_3 ) - return; - - if( minor < SSL_MINOR_VERSION_0 || minor > SSL_MINOR_VERSION_3 ) - return; - - ssl->ciphersuite_list[minor] = ciphersuites; -} - -#if defined(POLARSSL_X509_CRT_PARSE_C) -/* Add a new (empty) key_cert entry an return a pointer to it */ -static ssl_key_cert *ssl_add_key_cert( ssl_context *ssl ) -{ - ssl_key_cert *key_cert, *last; - - key_cert = (ssl_key_cert *) polarssl_malloc( sizeof(ssl_key_cert) ); - if( key_cert == NULL ) - return( NULL ); - - memset( key_cert, 0, sizeof( ssl_key_cert ) ); - - /* Append the new key_cert to the (possibly empty) current list */ - if( ssl->key_cert == NULL ) - { - ssl->key_cert = key_cert; - if( ssl->handshake != NULL ) - ssl->handshake->key_cert = key_cert; - } - else - { - last = ssl->key_cert; - while( last->next != NULL ) - last = last->next; - last->next = key_cert; - } - - return( key_cert ); -} - -void ssl_set_ca_chain( ssl_context *ssl, x509_crt *ca_chain, - x509_crl *ca_crl, const char *peer_cn ) -{ - ssl->ca_chain = ca_chain; - ssl->ca_crl = ca_crl; - ssl->peer_cn = peer_cn; -} - -int ssl_set_own_cert( ssl_context *ssl, x509_crt *own_cert, - pk_context *pk_key ) -{ - ssl_key_cert *key_cert = ssl_add_key_cert( ssl ); - - if( key_cert == NULL ) - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - - key_cert->cert = own_cert; - key_cert->key = pk_key; - - return( 0 ); -} - -#if defined(POLARSSL_RSA_C) -int ssl_set_own_cert_rsa( ssl_context *ssl, x509_crt *own_cert, - rsa_context *rsa_key ) -{ - int ret; - ssl_key_cert *key_cert = ssl_add_key_cert( ssl ); - - if( key_cert == NULL ) - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - - key_cert->key = (pk_context *) polarssl_malloc( sizeof(pk_context) ); - if( key_cert->key == NULL ) - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - - pk_init( key_cert->key ); - - ret = pk_init_ctx( key_cert->key, pk_info_from_type( POLARSSL_PK_RSA ) ); - if( ret != 0 ) - return( ret ); - - if( ( ret = rsa_copy( pk_rsa( *key_cert->key ), rsa_key ) ) != 0 ) - return( ret ); - - key_cert->cert = own_cert; - key_cert->key_own_alloc = 1; - - return( 0 ); -} -#endif /* POLARSSL_RSA_C */ - -int ssl_set_own_cert_alt( ssl_context *ssl, x509_crt *own_cert, - void *rsa_key, - rsa_decrypt_func rsa_decrypt, - rsa_sign_func rsa_sign, - rsa_key_len_func rsa_key_len ) -{ - int ret; - ssl_key_cert *key_cert = ssl_add_key_cert( ssl ); - - if( key_cert == NULL ) - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - - key_cert->key = (pk_context *) polarssl_malloc( sizeof(pk_context) ); - if( key_cert->key == NULL ) - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - - pk_init( key_cert->key ); - - if( ( ret = pk_init_ctx_rsa_alt( key_cert->key, rsa_key, - rsa_decrypt, rsa_sign, rsa_key_len ) ) != 0 ) - return( ret ); - - key_cert->cert = own_cert; - key_cert->key_own_alloc = 1; - - return( 0 ); -} -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -#if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED) -int ssl_set_psk( ssl_context *ssl, const unsigned char *psk, size_t psk_len, - const unsigned char *psk_identity, size_t psk_identity_len ) -{ - if( psk == NULL || psk_identity == NULL ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - if( psk_len > POLARSSL_PSK_MAX_LEN ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - if( ssl->psk != NULL ) - { - polarssl_free( ssl->psk ); - polarssl_free( ssl->psk_identity ); - } - - ssl->psk_len = psk_len; - ssl->psk_identity_len = psk_identity_len; - - ssl->psk = (unsigned char *) polarssl_malloc( ssl->psk_len ); - ssl->psk_identity = (unsigned char *) - polarssl_malloc( ssl->psk_identity_len ); - - if( ssl->psk == NULL || ssl->psk_identity == NULL ) - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - - memcpy( ssl->psk, psk, ssl->psk_len ); - memcpy( ssl->psk_identity, psk_identity, ssl->psk_identity_len ); - - return( 0 ); -} - -void ssl_set_psk_cb( ssl_context *ssl, - int (*f_psk)(void *, ssl_context *, const unsigned char *, - size_t), - void *p_psk ) -{ - ssl->f_psk = f_psk; - ssl->p_psk = p_psk; -} -#endif /* POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED */ - -#if defined(POLARSSL_DHM_C) -int ssl_set_dh_param( ssl_context *ssl, const char *dhm_P, const char *dhm_G ) -{ - int ret; - - if( ( ret = mpi_read_string( &ssl->dhm_P, 16, dhm_P ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "mpi_read_string", ret ); - return( ret ); - } - - if( ( ret = mpi_read_string( &ssl->dhm_G, 16, dhm_G ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "mpi_read_string", ret ); - return( ret ); - } - - return( 0 ); -} - -int ssl_set_dh_param_ctx( ssl_context *ssl, dhm_context *dhm_ctx ) -{ - int ret; - - if( ( ret = mpi_copy( &ssl->dhm_P, &dhm_ctx->P ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "mpi_copy", ret ); - return( ret ); - } - - if( ( ret = mpi_copy( &ssl->dhm_G, &dhm_ctx->G ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "mpi_copy", ret ); - return( ret ); - } - - return( 0 ); -} -#endif /* POLARSSL_DHM_C */ - -#if defined(POLARSSL_SSL_SET_CURVES) -/* - * Set the allowed elliptic curves - */ -void ssl_set_curves( ssl_context *ssl, const ecp_group_id *curve_list ) -{ - ssl->curve_list = curve_list; -} -#endif - -#if defined(POLARSSL_SSL_SERVER_NAME_INDICATION) -int ssl_set_hostname( ssl_context *ssl, const char *hostname ) -{ - if( hostname == NULL ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - ssl->hostname_len = strlen( hostname ); - - if( ssl->hostname_len + 1 == 0 ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - ssl->hostname = (unsigned char *) polarssl_malloc( ssl->hostname_len + 1 ); - - if( ssl->hostname == NULL ) - return( POLARSSL_ERR_SSL_MALLOC_FAILED ); - - memcpy( ssl->hostname, (const unsigned char *) hostname, - ssl->hostname_len ); - - ssl->hostname[ssl->hostname_len] = '\0'; - - return( 0 ); -} - -void ssl_set_sni( ssl_context *ssl, - int (*f_sni)(void *, ssl_context *, - const unsigned char *, size_t), - void *p_sni ) -{ - ssl->f_sni = f_sni; - ssl->p_sni = p_sni; -} -#endif /* POLARSSL_SSL_SERVER_NAME_INDICATION */ - -#if defined(POLARSSL_SSL_ALPN) -int ssl_set_alpn_protocols( ssl_context *ssl, const char **protos ) -{ - size_t cur_len, tot_len; - const char **p; - - /* - * "Empty strings MUST NOT be included and byte strings MUST NOT be - * truncated". Check lengths now rather than later. - */ - tot_len = 0; - for( p = protos; *p != NULL; p++ ) - { - cur_len = strlen( *p ); - tot_len += cur_len; - - if( cur_len == 0 || cur_len > 255 || tot_len > 65535 ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - } - - ssl->alpn_list = protos; - - return( 0 ); -} - -const char *ssl_get_alpn_protocol( const ssl_context *ssl ) -{ - return( ssl->alpn_chosen ); -} -#endif /* POLARSSL_SSL_ALPN */ - -void ssl_set_max_version( ssl_context *ssl, int major, int minor ) -{ - if( major >= SSL_MIN_MAJOR_VERSION && major <= SSL_MAX_MAJOR_VERSION && - minor >= SSL_MIN_MINOR_VERSION && minor <= SSL_MAX_MINOR_VERSION ) - { - ssl->max_major_ver = major; - ssl->max_minor_ver = minor; - } -} - -void ssl_set_min_version( ssl_context *ssl, int major, int minor ) -{ - if( major >= SSL_MIN_MAJOR_VERSION && major <= SSL_MAX_MAJOR_VERSION && - minor >= SSL_MIN_MINOR_VERSION && minor <= SSL_MAX_MINOR_VERSION ) - { - ssl->min_major_ver = major; - ssl->min_minor_ver = minor; - } -} - -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) -int ssl_set_max_frag_len( ssl_context *ssl, unsigned char mfl_code ) -{ - if( mfl_code >= SSL_MAX_FRAG_LEN_INVALID || - mfl_code_to_length[mfl_code] > SSL_MAX_CONTENT_LEN ) - { - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - } - - ssl->mfl_code = mfl_code; - - return( 0 ); -} -#endif /* POLARSSL_SSL_MAX_FRAGMENT_LENGTH */ - -#if defined(POLARSSL_SSL_TRUNCATED_HMAC) -int ssl_set_truncated_hmac( ssl_context *ssl, int truncate ) -{ - if( ssl->endpoint != SSL_IS_CLIENT ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - ssl->trunc_hmac = truncate; - - return( 0 ); -} -#endif /* POLARSSL_SSL_TRUNCATED_HMAC */ - -void ssl_set_renegotiation( ssl_context *ssl, int renegotiation ) -{ - ssl->disable_renegotiation = renegotiation; -} - -void ssl_legacy_renegotiation( ssl_context *ssl, int allow_legacy ) -{ - ssl->allow_legacy_renegotiation = allow_legacy; -} - -void ssl_set_renegotiation_enforced( ssl_context *ssl, int max_records ) -{ - ssl->renego_max_records = max_records; -} - -#if defined(POLARSSL_SSL_SESSION_TICKETS) -int ssl_set_session_tickets( ssl_context *ssl, int use_tickets ) -{ - ssl->session_tickets = use_tickets; - - if( ssl->endpoint == SSL_IS_CLIENT ) - return( 0 ); - - if( ssl->f_rng == NULL ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - return( ssl_ticket_keys_init( ssl ) ); -} - -void ssl_set_session_ticket_lifetime( ssl_context *ssl, int lifetime ) -{ - ssl->ticket_lifetime = lifetime; -} -#endif /* POLARSSL_SSL_SESSION_TICKETS */ - -/* - * SSL get accessors - */ -size_t ssl_get_bytes_avail( const ssl_context *ssl ) -{ - return( ssl->in_offt == NULL ? 0 : ssl->in_msglen ); -} - -int ssl_get_verify_result( const ssl_context *ssl ) -{ - return( ssl->session->verify_result ); -} - -const char *ssl_get_ciphersuite( const ssl_context *ssl ) -{ - if( ssl == NULL || ssl->session == NULL ) - return( NULL ); - - return ssl_get_ciphersuite_name( ssl->session->ciphersuite ); -} - -const char *ssl_get_version( const ssl_context *ssl ) -{ - switch( ssl->minor_ver ) - { - case SSL_MINOR_VERSION_0: - return( "SSLv3.0" ); - - case SSL_MINOR_VERSION_1: - return( "TLSv1.0" ); - - case SSL_MINOR_VERSION_2: - return( "TLSv1.1" ); - - case SSL_MINOR_VERSION_3: - return( "TLSv1.2" ); - - default: - break; - } - return( "unknown" ); -} - -#if defined(POLARSSL_X509_CRT_PARSE_C) -const x509_crt *ssl_get_peer_cert( const ssl_context *ssl ) -{ - if( ssl == NULL || ssl->session == NULL ) - return( NULL ); - - return( ssl->session->peer_cert ); -} -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -int ssl_get_session( const ssl_context *ssl, ssl_session *dst ) -{ - if( ssl == NULL || - dst == NULL || - ssl->session == NULL || - ssl->endpoint != SSL_IS_CLIENT ) - { - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - } - - return( ssl_session_copy( dst, ssl->session ) ); -} - -/* - * Perform a single step of the SSL handshake - */ -int ssl_handshake_step( ssl_context *ssl ) -{ - int ret = POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE; - -#if defined(POLARSSL_SSL_CLI_C) - if( ssl->endpoint == SSL_IS_CLIENT ) - ret = ssl_handshake_client_step( ssl ); -#endif - -#if defined(POLARSSL_SSL_SRV_C) - if( ssl->endpoint == SSL_IS_SERVER ) - ret = ssl_handshake_server_step( ssl ); -#endif - - return( ret ); -} - -/* - * Perform the SSL handshake - */ -int ssl_handshake( ssl_context *ssl ) -{ - int ret = 0; - - SSL_DEBUG_MSG( 2, ( "=> handshake" ) ); - - while( ssl->state != SSL_HANDSHAKE_OVER ) - { - ret = ssl_handshake_step( ssl ); - - if( ret != 0 ) - break; - } - - SSL_DEBUG_MSG( 2, ( "<= handshake" ) ); - - return( ret ); -} - -#if defined(POLARSSL_SSL_SRV_C) -/* - * Write HelloRequest to request renegotiation on server - */ -static int ssl_write_hello_request( ssl_context *ssl ) -{ - int ret; - - SSL_DEBUG_MSG( 2, ( "=> write hello request" ) ); - - ssl->out_msglen = 4; - ssl->out_msgtype = SSL_MSG_HANDSHAKE; - ssl->out_msg[0] = SSL_HS_HELLO_REQUEST; - - if( ( ret = ssl_write_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_write_record", ret ); - return( ret ); - } - - ssl->renegotiation = SSL_RENEGOTIATION_PENDING; - - SSL_DEBUG_MSG( 2, ( "<= write hello request" ) ); - - return( 0 ); -} -#endif /* POLARSSL_SSL_SRV_C */ - -/* - * Actually renegotiate current connection, triggered by either: - * - calling ssl_renegotiate() on client, - * - receiving a HelloRequest on client during ssl_read(), - * - receiving any handshake message on server during ssl_read() after the - * initial handshake is completed - * If the handshake doesn't complete due to waiting for I/O, it will continue - * during the next calls to ssl_renegotiate() or ssl_read() respectively. - */ -static int ssl_start_renegotiation( ssl_context *ssl ) -{ - int ret; - - SSL_DEBUG_MSG( 2, ( "=> renegotiate" ) ); - - if( ( ret = ssl_handshake_init( ssl ) ) != 0 ) - return( ret ); - - ssl->state = SSL_HELLO_REQUEST; - ssl->renegotiation = SSL_RENEGOTIATION; - - if( ( ret = ssl_handshake( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_handshake", ret ); - return( ret ); - } - - SSL_DEBUG_MSG( 2, ( "<= renegotiate" ) ); - - return( 0 ); -} - -/* - * Renegotiate current connection on client, - * or request renegotiation on server - */ -int ssl_renegotiate( ssl_context *ssl ) -{ - int ret = POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE; - -#if defined(POLARSSL_SSL_SRV_C) - /* On server, just send the request */ - if( ssl->endpoint == SSL_IS_SERVER ) - { - if( ssl->state != SSL_HANDSHAKE_OVER ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - return( ssl_write_hello_request( ssl ) ); - } -#endif /* POLARSSL_SSL_SRV_C */ - -#if defined(POLARSSL_SSL_CLI_C) - /* - * On client, either start the renegotiation process or, - * if already in progress, continue the handshake - */ - if( ssl->renegotiation != SSL_RENEGOTIATION ) - { - if( ssl->state != SSL_HANDSHAKE_OVER ) - return( POLARSSL_ERR_SSL_BAD_INPUT_DATA ); - - if( ( ret = ssl_start_renegotiation( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_start_renegotiation", ret ); - return( ret ); - } - } - else - { - if( ( ret = ssl_handshake( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_handshake", ret ); - return( ret ); - } - } -#endif /* POLARSSL_SSL_CLI_C */ - - return( ret ); -} - -/* - * Receive application data decrypted from the SSL layer - */ -int ssl_read( ssl_context *ssl, unsigned char *buf, size_t len ) -{ - int ret; - size_t n; - - SSL_DEBUG_MSG( 2, ( "=> read" ) ); - - if( ssl->state != SSL_HANDSHAKE_OVER ) - { - if( ( ret = ssl_handshake( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_handshake", ret ); - return( ret ); - } - } - - if( ssl->in_offt == NULL ) - { - if( ( ret = ssl_read_record( ssl ) ) != 0 ) - { - if( ret == POLARSSL_ERR_SSL_CONN_EOF ) - return( 0 ); - - SSL_DEBUG_RET( 1, "ssl_read_record", ret ); - return( ret ); - } - - if( ssl->in_msglen == 0 && - ssl->in_msgtype == SSL_MSG_APPLICATION_DATA ) - { - /* - * OpenSSL sends empty messages to randomize the IV - */ - if( ( ret = ssl_read_record( ssl ) ) != 0 ) - { - if( ret == POLARSSL_ERR_SSL_CONN_EOF ) - return( 0 ); - - SSL_DEBUG_RET( 1, "ssl_read_record", ret ); - return( ret ); - } - } - - if( ssl->in_msgtype == SSL_MSG_HANDSHAKE ) - { - SSL_DEBUG_MSG( 1, ( "received handshake message" ) ); - - if( ssl->endpoint == SSL_IS_CLIENT && - ( ssl->in_msg[0] != SSL_HS_HELLO_REQUEST || - ssl->in_hslen != 4 ) ) - { - SSL_DEBUG_MSG( 1, ( "handshake received (not HelloRequest)" ) ); - return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE ); - } - - if( ssl->disable_renegotiation == SSL_RENEGOTIATION_DISABLED || - ( ssl->secure_renegotiation == SSL_LEGACY_RENEGOTIATION && - ssl->allow_legacy_renegotiation == - SSL_LEGACY_NO_RENEGOTIATION ) ) - { - SSL_DEBUG_MSG( 3, ( "ignoring renegotiation, sending alert" ) ); - -#if defined(POLARSSL_SSL_PROTO_SSL3) - if( ssl->minor_ver == SSL_MINOR_VERSION_0 ) - { - /* - * SSLv3 does not have a "no_renegotiation" alert - */ - if( ( ret = ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); - } - else -#endif /* POLARSSL_SSL_PROTO_SSL3 */ -#if defined(POLARSSL_SSL_PROTO_TLS1) || defined(POLARSSL_SSL_PROTO_TLS1_1) || \ - defined(POLARSSL_SSL_PROTO_TLS1_2) - if( ssl->minor_ver >= SSL_MINOR_VERSION_1 ) - { - if( ( ret = ssl_send_alert_message( ssl, - SSL_ALERT_LEVEL_WARNING, - SSL_ALERT_MSG_NO_RENEGOTIATION ) ) != 0 ) - { - return( ret ); - } - } - else -#endif /* POLARSSL_SSL_PROTO_TLS1 || POLARSSL_SSL_PROTO_TLS1_1 || - POLARSSL_SSL_PROTO_TLS1_2 */ - { - SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( POLARSSL_ERR_SSL_INTERNAL_ERROR ); - } - } - else - { - if( ( ret = ssl_start_renegotiation( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_start_renegotiation", ret ); - return( ret ); - } - - return( POLARSSL_ERR_NET_WANT_READ ); - } - } - else if( ssl->renegotiation == SSL_RENEGOTIATION_PENDING ) - { - ssl->renego_records_seen++; - - if( ssl->renego_max_records >= 0 && - ssl->renego_records_seen > ssl->renego_max_records ) - { - SSL_DEBUG_MSG( 1, ( "renegotiation requested, " - "but not honored by client" ) ); - return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE ); - } - } - else if( ssl->in_msgtype != SSL_MSG_APPLICATION_DATA ) - { - SSL_DEBUG_MSG( 1, ( "bad application data message" ) ); - return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE ); - } - - ssl->in_offt = ssl->in_msg; - } - - n = ( len < ssl->in_msglen ) - ? len : ssl->in_msglen; - - memcpy( buf, ssl->in_offt, n ); - ssl->in_msglen -= n; - - if( ssl->in_msglen == 0 ) - /* all bytes consumed */ - ssl->in_offt = NULL; - else - /* more data available */ - ssl->in_offt += n; - - SSL_DEBUG_MSG( 2, ( "<= read" ) ); - - return( (int) n ); -} - -/* - * Send application data to be encrypted by the SSL layer - */ -int ssl_write( ssl_context *ssl, const unsigned char *buf, size_t len ) -{ - int ret; - size_t n; - unsigned int max_len = SSL_MAX_CONTENT_LEN; - - SSL_DEBUG_MSG( 2, ( "=> write" ) ); - - if( ssl->state != SSL_HANDSHAKE_OVER ) - { - if( ( ret = ssl_handshake( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_handshake", ret ); - return( ret ); - } - } - -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) - /* - * Assume mfl_code is correct since it was checked when set - */ - max_len = mfl_code_to_length[ssl->mfl_code]; - - /* - * Check if a smaller max length was negotiated - */ - if( ssl->session_out != NULL && - mfl_code_to_length[ssl->session_out->mfl_code] < max_len ) - { - max_len = mfl_code_to_length[ssl->session_out->mfl_code]; - } -#endif /* POLARSSL_SSL_MAX_FRAGMENT_LENGTH */ - - n = ( len < max_len) ? len : max_len; - - if( ssl->out_left != 0 ) - { - if( ( ret = ssl_flush_output( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_flush_output", ret ); - return( ret ); - } - } - else - { - ssl->out_msglen = n; - ssl->out_msgtype = SSL_MSG_APPLICATION_DATA; - memcpy( ssl->out_msg, buf, n ); - - if( ( ret = ssl_write_record( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_write_record", ret ); - return( ret ); - } - } - - SSL_DEBUG_MSG( 2, ( "<= write" ) ); - - return( (int) n ); -} - -/* - * Notify the peer that the connection is being closed - */ -int ssl_close_notify( ssl_context *ssl ) -{ - int ret; - - SSL_DEBUG_MSG( 2, ( "=> write close notify" ) ); - - if( ( ret = ssl_flush_output( ssl ) ) != 0 ) - { - SSL_DEBUG_RET( 1, "ssl_flush_output", ret ); - return( ret ); - } - - if( ssl->state == SSL_HANDSHAKE_OVER ) - { - if( ( ret = ssl_send_alert_message( ssl, - SSL_ALERT_LEVEL_WARNING, - SSL_ALERT_MSG_CLOSE_NOTIFY ) ) != 0 ) - { - return( ret ); - } - } - - SSL_DEBUG_MSG( 2, ( "<= write close notify" ) ); - - return( ret ); -} - -void ssl_transform_free( ssl_transform *transform ) -{ - if( transform == NULL ) - return; - -#if defined(POLARSSL_ZLIB_SUPPORT) - deflateEnd( &transform->ctx_deflate ); - inflateEnd( &transform->ctx_inflate ); -#endif - - cipher_free( &transform->cipher_ctx_enc ); - cipher_free( &transform->cipher_ctx_dec ); - - md_free( &transform->md_ctx_enc ); - md_free( &transform->md_ctx_dec ); - - polarssl_zeroize( transform, sizeof( ssl_transform ) ); -} - -#if defined(POLARSSL_X509_CRT_PARSE_C) -static void ssl_key_cert_free( ssl_key_cert *key_cert ) -{ - ssl_key_cert *cur = key_cert, *next; - - while( cur != NULL ) - { - next = cur->next; - - if( cur->key_own_alloc ) - { - pk_free( cur->key ); - polarssl_free( cur->key ); - } - polarssl_free( cur ); - - cur = next; - } -} -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -void ssl_handshake_free( ssl_handshake_params *handshake ) -{ - if( handshake == NULL ) - return; - -#if defined(POLARSSL_DHM_C) - dhm_free( &handshake->dhm_ctx ); -#endif -#if defined(POLARSSL_ECDH_C) - ecdh_free( &handshake->ecdh_ctx ); -#endif - -#if defined(POLARSSL_ECDH_C) || defined(POLARSSL_ECDSA_C) - /* explicit void pointer cast for buggy MS compiler */ - polarssl_free( (void *) handshake->curves ); -#endif - -#if defined(POLARSSL_X509_CRT_PARSE_C) && \ - defined(POLARSSL_SSL_SERVER_NAME_INDICATION) - /* - * Free only the linked list wrapper, not the keys themselves - * since the belong to the SNI callback - */ - if( handshake->sni_key_cert != NULL ) - { - ssl_key_cert *cur = handshake->sni_key_cert, *next; - - while( cur != NULL ) - { - next = cur->next; - polarssl_free( cur ); - cur = next; - } - } -#endif /* POLARSSL_X509_CRT_PARSE_C && POLARSSL_SSL_SERVER_NAME_INDICATION */ - - polarssl_zeroize( handshake, sizeof( ssl_handshake_params ) ); -} - -void ssl_session_free( ssl_session *session ) -{ - if( session == NULL ) - return; - -#if defined(POLARSSL_X509_CRT_PARSE_C) - if( session->peer_cert != NULL ) - { - x509_crt_free( session->peer_cert ); - polarssl_free( session->peer_cert ); - } -#endif - -#if defined(POLARSSL_SSL_SESSION_TICKETS) - polarssl_free( session->ticket ); -#endif - - polarssl_zeroize( session, sizeof( ssl_session ) ); -} - -/* - * Free an SSL context - */ -void ssl_free( ssl_context *ssl ) -{ - if( ssl == NULL ) - return; - - SSL_DEBUG_MSG( 2, ( "=> free" ) ); - - if( ssl->out_ctr != NULL ) - { - polarssl_zeroize( ssl->out_ctr, SSL_BUFFER_LEN ); - polarssl_free( ssl->out_ctr ); - } - - if( ssl->in_ctr != NULL ) - { - polarssl_zeroize( ssl->in_ctr, SSL_BUFFER_LEN ); - polarssl_free( ssl->in_ctr ); - } - -#if defined(POLARSSL_ZLIB_SUPPORT) - if( ssl->compress_buf != NULL ) - { - polarssl_zeroize( ssl->compress_buf, SSL_BUFFER_LEN ); - polarssl_free( ssl->compress_buf ); - } -#endif - -#if defined(POLARSSL_DHM_C) - mpi_free( &ssl->dhm_P ); - mpi_free( &ssl->dhm_G ); -#endif - - if( ssl->transform ) - { - ssl_transform_free( ssl->transform ); - polarssl_free( ssl->transform ); - } - - if( ssl->handshake ) - { - ssl_handshake_free( ssl->handshake ); - ssl_transform_free( ssl->transform_negotiate ); - ssl_session_free( ssl->session_negotiate ); - - polarssl_free( ssl->handshake ); - polarssl_free( ssl->transform_negotiate ); - polarssl_free( ssl->session_negotiate ); - } - - if( ssl->session ) - { - ssl_session_free( ssl->session ); - polarssl_free( ssl->session ); - } - -#if defined(POLARSSL_SSL_SESSION_TICKETS) - if( ssl->ticket_keys ) - { - ssl_ticket_keys_free( ssl->ticket_keys ); - polarssl_free( ssl->ticket_keys ); - } -#endif - -#if defined(POLARSSL_SSL_SERVER_NAME_INDICATION) - if( ssl->hostname != NULL ) - { - polarssl_zeroize( ssl->hostname, ssl->hostname_len ); - polarssl_free( ssl->hostname ); - ssl->hostname_len = 0; - } -#endif - -#if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED) - if( ssl->psk != NULL ) - { - polarssl_zeroize( ssl->psk, ssl->psk_len ); - polarssl_zeroize( ssl->psk_identity, ssl->psk_identity_len ); - polarssl_free( ssl->psk ); - polarssl_free( ssl->psk_identity ); - ssl->psk_len = 0; - ssl->psk_identity_len = 0; - } -#endif - -#if defined(POLARSSL_X509_CRT_PARSE_C) - ssl_key_cert_free( ssl->key_cert ); -#endif - -#if defined(POLARSSL_SSL_HW_RECORD_ACCEL) - if( ssl_hw_record_finish != NULL ) - { - SSL_DEBUG_MSG( 2, ( "going for ssl_hw_record_finish()" ) ); - ssl_hw_record_finish( ssl ); - } -#endif - - SSL_DEBUG_MSG( 2, ( "<= free" ) ); - - /* Actually clear after last debug message */ - polarssl_zeroize( ssl, sizeof( ssl_context ) ); -} - -#if defined(POLARSSL_PK_C) -/* - * Convert between POLARSSL_PK_XXX and SSL_SIG_XXX - */ -unsigned char ssl_sig_from_pk( pk_context *pk ) -{ -#if defined(POLARSSL_RSA_C) - if( pk_can_do( pk, POLARSSL_PK_RSA ) ) - return( SSL_SIG_RSA ); -#endif -#if defined(POLARSSL_ECDSA_C) - if( pk_can_do( pk, POLARSSL_PK_ECDSA ) ) - return( SSL_SIG_ECDSA ); -#endif - return( SSL_SIG_ANON ); -} - -pk_type_t ssl_pk_alg_from_sig( unsigned char sig ) -{ - switch( sig ) - { -#if defined(POLARSSL_RSA_C) - case SSL_SIG_RSA: - return( POLARSSL_PK_RSA ); -#endif -#if defined(POLARSSL_ECDSA_C) - case SSL_SIG_ECDSA: - return( POLARSSL_PK_ECDSA ); -#endif - default: - return( POLARSSL_PK_NONE ); - } -} -#endif /* POLARSSL_PK_C */ - -/* - * Convert between SSL_HASH_XXX and POLARSSL_MD_XXX - */ -md_type_t ssl_md_alg_from_hash( unsigned char hash ) -{ - switch( hash ) - { -#if defined(POLARSSL_MD5_C) - case SSL_HASH_MD5: - return( POLARSSL_MD_MD5 ); -#endif -#if defined(POLARSSL_SHA1_C) - case SSL_HASH_SHA1: - return( POLARSSL_MD_SHA1 ); -#endif -#if defined(POLARSSL_SHA256_C) - case SSL_HASH_SHA224: - return( POLARSSL_MD_SHA224 ); - case SSL_HASH_SHA256: - return( POLARSSL_MD_SHA256 ); -#endif -#if defined(POLARSSL_SHA512_C) - case SSL_HASH_SHA384: - return( POLARSSL_MD_SHA384 ); - case SSL_HASH_SHA512: - return( POLARSSL_MD_SHA512 ); -#endif - default: - return( POLARSSL_MD_NONE ); - } -} - -#if defined(POLARSSL_SSL_SET_CURVES) -/* - * Check is a curve proposed by the peer is in our list. - * Return 1 if we're willing to use it, 0 otherwise. - */ -int ssl_curve_is_acceptable( const ssl_context *ssl, ecp_group_id grp_id ) -{ - const ecp_group_id *gid; - - for( gid = ssl->curve_list; *gid != POLARSSL_ECP_DP_NONE; gid++ ) - if( *gid == grp_id ) - return( 1 ); - - return( 0 ); -} -#endif /* POLARSSL_SSL_SET_CURVES */ - -#if defined(POLARSSL_X509_CRT_PARSE_C) -int ssl_check_cert_usage( const x509_crt *cert, - const ssl_ciphersuite_t *ciphersuite, - int cert_endpoint ) -{ -#if defined(POLARSSL_X509_CHECK_KEY_USAGE) - int usage = 0; -#endif -#if defined(POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE) - const char *ext_oid; - size_t ext_len; -#endif - -#if !defined(POLARSSL_X509_CHECK_KEY_USAGE) && \ - !defined(POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE) - ((void) cert); - ((void) cert_endpoint); -#endif - -#if defined(POLARSSL_X509_CHECK_KEY_USAGE) - if( cert_endpoint == SSL_IS_SERVER ) - { - /* Server part of the key exchange */ - switch( ciphersuite->key_exchange ) - { - case POLARSSL_KEY_EXCHANGE_RSA: - case POLARSSL_KEY_EXCHANGE_RSA_PSK: - usage = KU_KEY_ENCIPHERMENT; - break; - - case POLARSSL_KEY_EXCHANGE_DHE_RSA: - case POLARSSL_KEY_EXCHANGE_ECDHE_RSA: - case POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA: - usage = KU_DIGITAL_SIGNATURE; - break; - - case POLARSSL_KEY_EXCHANGE_ECDH_RSA: - case POLARSSL_KEY_EXCHANGE_ECDH_ECDSA: - usage = KU_KEY_AGREEMENT; - break; - - /* Don't use default: we want warnings when adding new values */ - case POLARSSL_KEY_EXCHANGE_NONE: - case POLARSSL_KEY_EXCHANGE_PSK: - case POLARSSL_KEY_EXCHANGE_DHE_PSK: - case POLARSSL_KEY_EXCHANGE_ECDHE_PSK: - usage = 0; - } - } - else - { - /* Client auth: we only implement rsa_sign and ecdsa_sign for now */ - usage = KU_DIGITAL_SIGNATURE; - } - - if( x509_crt_check_key_usage( cert, usage ) != 0 ) - return( -1 ); -#else - ((void) ciphersuite); -#endif /* POLARSSL_X509_CHECK_KEY_USAGE */ - -#if defined(POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE) - if( cert_endpoint == SSL_IS_SERVER ) - { - ext_oid = OID_SERVER_AUTH; - ext_len = OID_SIZE( OID_SERVER_AUTH ); - } - else - { - ext_oid = OID_CLIENT_AUTH; - ext_len = OID_SIZE( OID_CLIENT_AUTH ); - } - - if( x509_crt_check_extended_key_usage( cert, ext_oid, ext_len ) != 0 ) - return( -1 ); -#endif /* POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE */ - - return( 0 ); -} -#endif /* POLARSSL_X509_CRT_PARSE_C */ - -#endif /* POLARSSL_SSL_TLS_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/threading.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/threading.c deleted file mode 100644 index 522c70f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/threading.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Threading abstraction layer - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_THREADING_C) - -#include "polarssl/threading.h" - -#if defined(POLARSSL_THREADING_PTHREAD) -static int threading_mutex_init_pthread( threading_mutex_t *mutex ) -{ - if( mutex == NULL ) - return( POLARSSL_ERR_THREADING_BAD_INPUT_DATA ); - - if( pthread_mutex_init( mutex, NULL ) != 0 ) - return( POLARSSL_ERR_THREADING_MUTEX_ERROR ); - - return( 0 ); -} - -static int threading_mutex_free_pthread( threading_mutex_t *mutex ) -{ - if( mutex == NULL ) - return( POLARSSL_ERR_THREADING_BAD_INPUT_DATA ); - - if( pthread_mutex_destroy( mutex ) != 0 ) - return( POLARSSL_ERR_THREADING_MUTEX_ERROR ); - - return( 0 ); -} - -static int threading_mutex_lock_pthread( threading_mutex_t *mutex ) -{ - if( mutex == NULL ) - return( POLARSSL_ERR_THREADING_BAD_INPUT_DATA ); - - if( pthread_mutex_lock( mutex ) != 0 ) - return( POLARSSL_ERR_THREADING_MUTEX_ERROR ); - - return( 0 ); -} - -static int threading_mutex_unlock_pthread( threading_mutex_t *mutex ) -{ - if( mutex == NULL ) - return( POLARSSL_ERR_THREADING_BAD_INPUT_DATA ); - - if( pthread_mutex_unlock( mutex ) != 0 ) - return( POLARSSL_ERR_THREADING_MUTEX_ERROR ); - - return( 0 ); -} - -int (*polarssl_mutex_init)( threading_mutex_t * ) = threading_mutex_init_pthread; -int (*polarssl_mutex_free)( threading_mutex_t * ) = threading_mutex_free_pthread; -int (*polarssl_mutex_lock)( threading_mutex_t * ) = threading_mutex_lock_pthread; -int (*polarssl_mutex_unlock)( threading_mutex_t * ) = threading_mutex_unlock_pthread; -#endif /* POLARSSL_THREADING_PTHREAD */ - -#if defined(POLARSSL_THREADING_ALT) -static int threading_mutex_fail( threading_mutex_t *mutex ) -{ - ((void) mutex ); - return( POLARSSL_ERR_THREADING_BAD_INPUT_DATA ); -} - -int (*polarssl_mutex_init)( threading_mutex_t * ) = threading_mutex_fail; -int (*polarssl_mutex_free)( threading_mutex_t * ) = threading_mutex_fail; -int (*polarssl_mutex_lock)( threading_mutex_t * ) = threading_mutex_fail; -int (*polarssl_mutex_unlock)( threading_mutex_t * ) = threading_mutex_fail; - -int threading_set_alt( int (*mutex_init)( threading_mutex_t * ), - int (*mutex_free)( threading_mutex_t * ), - int (*mutex_lock)( threading_mutex_t * ), - int (*mutex_unlock)( threading_mutex_t * ) ) -{ - polarssl_mutex_init = mutex_init; - polarssl_mutex_free = mutex_free; - polarssl_mutex_lock = mutex_lock; - polarssl_mutex_unlock = mutex_unlock; - - return( 0 ); -} -#endif /* POLARSSL_THREADING_ALT_C */ - -#endif /* POLARSSL_THREADING_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/timing.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/timing.c deleted file mode 100644 index 6c1dfa4..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/timing.c +++ /dev/null @@ -1,500 +0,0 @@ -/* - * Portable interface to the CPU cycle counter - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_SELF_TEST) && defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#include -#define polarssl_printf printf -#endif - -#if defined(POLARSSL_TIMING_C) && !defined(POLARSSL_TIMING_ALT) - -#include "polarssl/timing.h" - -#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) - -#include -#include - -struct _hr_time -{ - LARGE_INTEGER start; -}; - -#else - -#include -#include -#include -#include -#include - -struct _hr_time -{ - struct timeval start; -}; - -#endif /* _WIN32 && !EFIX64 && !EFI32 */ - -#if !defined(POLARSSL_HAVE_HARDCLOCK) && defined(POLARSSL_HAVE_ASM) && \ - ( defined(_MSC_VER) && defined(_M_IX86) ) || defined(__WATCOMC__) - -#define POLARSSL_HAVE_HARDCLOCK - -unsigned long hardclock( void ) -{ - unsigned long tsc; - __asm rdtsc - __asm mov [tsc], eax - return( tsc ); -} -#endif /* !POLARSSL_HAVE_HARDCLOCK && POLARSSL_HAVE_ASM && - ( _MSC_VER && _M_IX86 ) || __WATCOMC__ */ - -#if !defined(POLARSSL_HAVE_HARDCLOCK) && defined(POLARSSL_HAVE_ASM) && \ - defined(__GNUC__) && defined(__i386__) - -#define POLARSSL_HAVE_HARDCLOCK - -unsigned long hardclock( void ) -{ - unsigned long lo, hi; - asm volatile( "rdtsc" : "=a" (lo), "=d" (hi) ); - return( lo ); -} -#endif /* !POLARSSL_HAVE_HARDCLOCK && POLARSSL_HAVE_ASM && - __GNUC__ && __i386__ */ - -#if !defined(POLARSSL_HAVE_HARDCLOCK) && defined(POLARSSL_HAVE_ASM) && \ - defined(__GNUC__) && ( defined(__amd64__) || defined(__x86_64__) ) - -#define POLARSSL_HAVE_HARDCLOCK - -unsigned long hardclock( void ) -{ - unsigned long lo, hi; - asm volatile( "rdtsc" : "=a" (lo), "=d" (hi) ); - return( lo | ( hi << 32 ) ); -} -#endif /* !POLARSSL_HAVE_HARDCLOCK && POLARSSL_HAVE_ASM && - __GNUC__ && ( __amd64__ || __x86_64__ ) */ - -#if !defined(POLARSSL_HAVE_HARDCLOCK) && defined(POLARSSL_HAVE_ASM) && \ - defined(__GNUC__) && ( defined(__powerpc__) || defined(__ppc__) ) - -#define POLARSSL_HAVE_HARDCLOCK - -unsigned long hardclock( void ) -{ - unsigned long tbl, tbu0, tbu1; - - do - { - asm volatile( "mftbu %0" : "=r" (tbu0) ); - asm volatile( "mftb %0" : "=r" (tbl ) ); - asm volatile( "mftbu %0" : "=r" (tbu1) ); - } - while( tbu0 != tbu1 ); - - return( tbl ); -} -#endif /* !POLARSSL_HAVE_HARDCLOCK && POLARSSL_HAVE_ASM && - __GNUC__ && ( __powerpc__ || __ppc__ ) */ - -#if !defined(POLARSSL_HAVE_HARDCLOCK) && defined(POLARSSL_HAVE_ASM) && \ - defined(__GNUC__) && defined(__sparc64__) - -#if defined(__OpenBSD__) -#warning OpenBSD does not allow access to tick register using software version instead -#else -#define POLARSSL_HAVE_HARDCLOCK - -unsigned long hardclock( void ) -{ - unsigned long tick; - asm volatile( "rdpr %%tick, %0;" : "=&r" (tick) ); - return( tick ); -} -#endif /* __OpenBSD__ */ -#endif /* !POLARSSL_HAVE_HARDCLOCK && POLARSSL_HAVE_ASM && - __GNUC__ && __sparc64__ */ - -#if !defined(POLARSSL_HAVE_HARDCLOCK) && defined(POLARSSL_HAVE_ASM) && \ - defined(__GNUC__) && defined(__sparc__) && !defined(__sparc64__) - -#define POLARSSL_HAVE_HARDCLOCK - -unsigned long hardclock( void ) -{ - unsigned long tick; - asm volatile( ".byte 0x83, 0x41, 0x00, 0x00" ); - asm volatile( "mov %%g1, %0" : "=r" (tick) ); - return( tick ); -} -#endif /* !POLARSSL_HAVE_HARDCLOCK && POLARSSL_HAVE_ASM && - __GNUC__ && __sparc__ && !__sparc64__ */ - -#if !defined(POLARSSL_HAVE_HARDCLOCK) && defined(POLARSSL_HAVE_ASM) && \ - defined(__GNUC__) && defined(__alpha__) - -#define POLARSSL_HAVE_HARDCLOCK - -unsigned long hardclock( void ) -{ - unsigned long cc; - asm volatile( "rpcc %0" : "=r" (cc) ); - return( cc & 0xFFFFFFFF ); -} -#endif /* !POLARSSL_HAVE_HARDCLOCK && POLARSSL_HAVE_ASM && - __GNUC__ && __alpha__ */ - -#if !defined(POLARSSL_HAVE_HARDCLOCK) && defined(POLARSSL_HAVE_ASM) && \ - defined(__GNUC__) && defined(__ia64__) - -#define POLARSSL_HAVE_HARDCLOCK - -unsigned long hardclock( void ) -{ - unsigned long itc; - asm volatile( "mov %0 = ar.itc" : "=r" (itc) ); - return( itc ); -} -#endif /* !POLARSSL_HAVE_HARDCLOCK && POLARSSL_HAVE_ASM && - __GNUC__ && __ia64__ */ - -#if !defined(POLARSSL_HAVE_HARDCLOCK) && defined(_MSC_VER) && \ - !defined(EFIX64) && !defined(EFI32) - -#define POLARSSL_HAVE_HARDCLOCK - -unsigned long hardclock( void ) -{ - LARGE_INTEGER offset; - - QueryPerformanceCounter( &offset ); - - return( (unsigned long)( offset.QuadPart ) ); -} -#endif /* !POLARSSL_HAVE_HARDCLOCK && _MSC_VER && !EFIX64 && !EFI32 */ - -#if !defined(POLARSSL_HAVE_HARDCLOCK) - -#define POLARSSL_HAVE_HARDCLOCK - -static int hardclock_init = 0; -static struct timeval tv_init; - -unsigned long hardclock( void ) -{ - struct timeval tv_cur; - - if( hardclock_init == 0 ) - { - gettimeofday( &tv_init, NULL ); - hardclock_init = 1; - } - - gettimeofday( &tv_cur, NULL ); - return( ( tv_cur.tv_sec - tv_init.tv_sec ) * 1000000 - + ( tv_cur.tv_usec - tv_init.tv_usec ) ); -} -#endif /* !POLARSSL_HAVE_HARDCLOCK */ - -volatile int alarmed = 0; - -#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) - -unsigned long get_timer( struct hr_time *val, int reset ) -{ - unsigned long delta; - LARGE_INTEGER offset, hfreq; - struct _hr_time *t = (struct _hr_time *) val; - - QueryPerformanceCounter( &offset ); - QueryPerformanceFrequency( &hfreq ); - - delta = (unsigned long)( ( 1000 * - ( offset.QuadPart - t->start.QuadPart ) ) / - hfreq.QuadPart ); - - if( reset ) - QueryPerformanceCounter( &t->start ); - - return( delta ); -} - -DWORD WINAPI TimerProc( LPVOID uElapse ) -{ - Sleep( (DWORD) uElapse ); - alarmed = 1; - return( TRUE ); -} - -void set_alarm( int seconds ) -{ - DWORD ThreadId; - - alarmed = 0; - CloseHandle( CreateThread( NULL, 0, TimerProc, - (LPVOID) ( seconds * 1000 ), 0, &ThreadId ) ); -} - -void m_sleep( int milliseconds ) -{ - Sleep( milliseconds ); -} - -#else /* _WIN32 && !EFIX64 && !EFI32 */ - -unsigned long get_timer( struct hr_time *val, int reset ) -{ - unsigned long delta; - struct timeval offset; - struct _hr_time *t = (struct _hr_time *) val; - - gettimeofday( &offset, NULL ); - - delta = ( offset.tv_sec - t->start.tv_sec ) * 1000 - + ( offset.tv_usec - t->start.tv_usec ) / 1000; - - if( reset ) - { - t->start.tv_sec = offset.tv_sec; - t->start.tv_usec = offset.tv_usec; - } - - return( delta ); -} - -#if defined(INTEGRITY) -void m_sleep( int milliseconds ) -{ - usleep( milliseconds * 1000 ); -} - -#else /* INTEGRITY */ - -static void sighandler( int signum ) -{ - alarmed = 1; - signal( signum, sighandler ); -} - -void set_alarm( int seconds ) -{ - alarmed = 0; - signal( SIGALRM, sighandler ); - alarm( seconds ); -} - -void m_sleep( int milliseconds ) -{ - struct timeval tv; - - tv.tv_sec = milliseconds / 1000; - tv.tv_usec = ( milliseconds % 1000 ) * 1000; - - select( 0, NULL, NULL, NULL, &tv ); -} -#endif /* INTEGRITY */ - -#endif /* _WIN32 && !EFIX64 && !EFI32 */ - -#if defined(POLARSSL_SELF_TEST) - -/* To test net_usleep against our functions */ -#if defined(POLARSSL_NET_C) -#include "polarssl/net.h" -#endif - -/* - * Busy-waits for the given number of milliseconds. - * Used for testing hardclock. - */ -static void busy_msleep( unsigned long msec ) -{ - struct hr_time hires; - unsigned long i = 0; /* for busy-waiting */ - volatile unsigned long j; /* to prevent optimisation */ - - (void) get_timer( &hires, 1 ); - - while( get_timer( &hires, 0 ) < msec ) - i++; - - j = i; - (void) j; -} - -/* - * Checkup routine - * - * Warning: this is work in progress, some tests may not be reliable enough - * yet! False positives may happen. - */ -int timing_self_test( int verbose ) -{ - unsigned long cycles, ratio; - unsigned long millisecs, secs; - int hardfail; - struct hr_time hires; - - if( verbose != 0 ) - polarssl_printf( " TIMING tests note: will take some time!\n" ); - - if( verbose != 0 ) - polarssl_printf( " TIMING test #1 (m_sleep / get_timer): " ); - - for( secs = 1; secs <= 3; secs++ ) - { - (void) get_timer( &hires, 1 ); - - m_sleep( 500 * secs ); - - millisecs = get_timer( &hires, 0 ); - - if( millisecs < 450 * secs || millisecs > 550 * secs ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( " TIMING test #2 (set_alarm / get_timer): " ); - - for( secs = 1; secs <= 3; secs++ ) - { - (void) get_timer( &hires, 1 ); - - set_alarm( secs ); - while( !alarmed ) - ; - - millisecs = get_timer( &hires, 0 ); - - if( millisecs < 900 * secs || millisecs > 1100 * secs ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( " TIMING test #3 (hardclock / get_timer): " ); - - /* - * Allow one failure for possible counter wrapping. - * On a 4Ghz 32-bit machine the cycle counter wraps about once per second; - * since the whole test is about 10ms, it shouldn't happen twice in a row. - */ - hardfail = 0; - -hard_test: - if( hardfail > 1 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - /* Get a reference ratio cycles/ms */ - millisecs = 1; - cycles = hardclock(); - busy_msleep( millisecs ); - cycles = hardclock() - cycles; - ratio = cycles / millisecs; - - /* Check that the ratio is mostly constant */ - for( millisecs = 2; millisecs <= 4; millisecs++ ) - { - cycles = hardclock(); - busy_msleep( millisecs ); - cycles = hardclock() - cycles; - - /* Allow variation up to 20% */ - if( cycles / millisecs < ratio - ratio / 5 || - cycles / millisecs > ratio + ratio / 5 ) - { - hardfail++; - goto hard_test; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - -#if defined(POLARSSL_NET_C) - if( verbose != 0 ) - polarssl_printf( " TIMING test #4 (net_usleep/ get_timer): " ); - - for( secs = 1; secs <= 3; secs++ ) - { - (void) get_timer( &hires, 1 ); - - net_usleep( 500000 * secs ); - - millisecs = get_timer( &hires, 0 ); - - if( millisecs < 450 * secs || millisecs > 550 * secs ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); -#endif /* POLARSSL_NET_C */ - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_TIMING_C && !POLARSSL_TIMING_ALT */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/version.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/version.c deleted file mode 100644 index c3c708a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/version.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Version information - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_VERSION_C) - -#include "polarssl/version.h" -#include - -const char version[] = POLARSSL_VERSION_STRING; - -unsigned int version_get_number() -{ - return( POLARSSL_VERSION_NUMBER ); -} - -void version_get_string( char *string ) -{ - memcpy( string, POLARSSL_VERSION_STRING, - sizeof( POLARSSL_VERSION_STRING ) ); -} - -void version_get_string_full( char *string ) -{ - memcpy( string, POLARSSL_VERSION_STRING_FULL, - sizeof( POLARSSL_VERSION_STRING_FULL ) ); -} - -#endif /* POLARSSL_VERSION_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/version_features.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/version_features.c deleted file mode 100644 index 1023198..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/version_features.c +++ /dev/null @@ -1,560 +0,0 @@ -/* - * Version feature information - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_VERSION_C) - -#include "polarssl/version.h" - -#include - -#if defined(_MSC_VER) && !defined strcasecmp && !defined(EFIX64) && \ - !defined(EFI32) -#define strcasecmp _stricmp -#endif - -const char *features[] = { -#if defined(POLARSSL_VERSION_FEATURES) -#if defined(POLARSSL_HAVE_INT8) - "POLARSSL_HAVE_INT8", -#endif /* POLARSSL_HAVE_INT8 */ -#if defined(POLARSSL_HAVE_INT16) - "POLARSSL_HAVE_INT16", -#endif /* POLARSSL_HAVE_INT16 */ -#if defined(POLARSSL_HAVE_LONGLONG) - "POLARSSL_HAVE_LONGLONG", -#endif /* POLARSSL_HAVE_LONGLONG */ -#if defined(POLARSSL_HAVE_ASM) - "POLARSSL_HAVE_ASM", -#endif /* POLARSSL_HAVE_ASM */ -#if defined(POLARSSL_HAVE_SSE2) - "POLARSSL_HAVE_SSE2", -#endif /* POLARSSL_HAVE_SSE2 */ -#if defined(POLARSSL_HAVE_TIME) - "POLARSSL_HAVE_TIME", -#endif /* POLARSSL_HAVE_TIME */ -#if defined(POLARSSL_HAVE_IPV6) - "POLARSSL_HAVE_IPV6", -#endif /* POLARSSL_HAVE_IPV6 */ -#if defined(POLARSSL_PLATFORM_MEMORY) - "POLARSSL_PLATFORM_MEMORY", -#endif /* POLARSSL_PLATFORM_MEMORY */ -#if defined(POLARSSL_PLATFORM_NO_STD_FUNCTIONS) - "POLARSSL_PLATFORM_NO_STD_FUNCTIONS", -#endif /* POLARSSL_PLATFORM_NO_STD_FUNCTIONS */ -#if defined(POLARSSL_PLATFORM_PRINTF_ALT) - "POLARSSL_PLATFORM_PRINTF_ALT", -#endif /* POLARSSL_PLATFORM_PRINTF_ALT */ -#if defined(POLARSSL_PLATFORM_FPRINTF_ALT) - "POLARSSL_PLATFORM_FPRINTF_ALT", -#endif /* POLARSSL_PLATFORM_FPRINTF_ALT */ -#if defined(POLARSSL_TIMING_ALT) - "POLARSSL_TIMING_ALT", -#endif /* POLARSSL_TIMING_ALT */ -#if defined(POLARSSL_AES_ALT) - "POLARSSL_AES_ALT", -#endif /* POLARSSL_AES_ALT */ -#if defined(POLARSSL_ARC4_ALT) - "POLARSSL_ARC4_ALT", -#endif /* POLARSSL_ARC4_ALT */ -#if defined(POLARSSL_BLOWFISH_ALT) - "POLARSSL_BLOWFISH_ALT", -#endif /* POLARSSL_BLOWFISH_ALT */ -#if defined(POLARSSL_CAMELLIA_ALT) - "POLARSSL_CAMELLIA_ALT", -#endif /* POLARSSL_CAMELLIA_ALT */ -#if defined(POLARSSL_DES_ALT) - "POLARSSL_DES_ALT", -#endif /* POLARSSL_DES_ALT */ -#if defined(POLARSSL_XTEA_ALT) - "POLARSSL_XTEA_ALT", -#endif /* POLARSSL_XTEA_ALT */ -#if defined(POLARSSL_MD2_ALT) - "POLARSSL_MD2_ALT", -#endif /* POLARSSL_MD2_ALT */ -#if defined(POLARSSL_MD4_ALT) - "POLARSSL_MD4_ALT", -#endif /* POLARSSL_MD4_ALT */ -#if defined(POLARSSL_MD5_ALT) - "POLARSSL_MD5_ALT", -#endif /* POLARSSL_MD5_ALT */ -#if defined(POLARSSL_RIPEMD160_ALT) - "POLARSSL_RIPEMD160_ALT", -#endif /* POLARSSL_RIPEMD160_ALT */ -#if defined(POLARSSL_SHA1_ALT) - "POLARSSL_SHA1_ALT", -#endif /* POLARSSL_SHA1_ALT */ -#if defined(POLARSSL_SHA256_ALT) - "POLARSSL_SHA256_ALT", -#endif /* POLARSSL_SHA256_ALT */ -#if defined(POLARSSL_SHA512_ALT) - "POLARSSL_SHA512_ALT", -#endif /* POLARSSL_SHA512_ALT */ -#if defined(POLARSSL_AES_ROM_TABLES) - "POLARSSL_AES_ROM_TABLES", -#endif /* POLARSSL_AES_ROM_TABLES */ -#if defined(POLARSSL_CIPHER_MODE_CBC) - "POLARSSL_CIPHER_MODE_CBC", -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#if defined(POLARSSL_CIPHER_MODE_CFB) - "POLARSSL_CIPHER_MODE_CFB", -#endif /* POLARSSL_CIPHER_MODE_CFB */ -#if defined(POLARSSL_CIPHER_MODE_CTR) - "POLARSSL_CIPHER_MODE_CTR", -#endif /* POLARSSL_CIPHER_MODE_CTR */ -#if defined(POLARSSL_CIPHER_NULL_CIPHER) - "POLARSSL_CIPHER_NULL_CIPHER", -#endif /* POLARSSL_CIPHER_NULL_CIPHER */ -#if defined(POLARSSL_CIPHER_PADDING_PKCS7) - "POLARSSL_CIPHER_PADDING_PKCS7", -#endif /* POLARSSL_CIPHER_PADDING_PKCS7 */ -#if defined(POLARSSL_CIPHER_PADDING_ONE_AND_ZEROS) - "POLARSSL_CIPHER_PADDING_ONE_AND_ZEROS", -#endif /* POLARSSL_CIPHER_PADDING_ONE_AND_ZEROS */ -#if defined(POLARSSL_CIPHER_PADDING_ZEROS_AND_LEN) - "POLARSSL_CIPHER_PADDING_ZEROS_AND_LEN", -#endif /* POLARSSL_CIPHER_PADDING_ZEROS_AND_LEN */ -#if defined(POLARSSL_CIPHER_PADDING_ZEROS) - "POLARSSL_CIPHER_PADDING_ZEROS", -#endif /* POLARSSL_CIPHER_PADDING_ZEROS */ -#if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES) - "POLARSSL_ENABLE_WEAK_CIPHERSUITES", -#endif /* POLARSSL_ENABLE_WEAK_CIPHERSUITES */ -#if defined(POLARSSL_REMOVE_ARC4_CIPHERSUITES) - "POLARSSL_REMOVE_ARC4_CIPHERSUITES", -#endif /* POLARSSL_REMOVE_ARC4_CIPHERSUITES */ -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) - "POLARSSL_ECP_DP_SECP192R1_ENABLED", -#endif /* POLARSSL_ECP_DP_SECP192R1_ENABLED */ -#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) - "POLARSSL_ECP_DP_SECP224R1_ENABLED", -#endif /* POLARSSL_ECP_DP_SECP224R1_ENABLED */ -#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) - "POLARSSL_ECP_DP_SECP256R1_ENABLED", -#endif /* POLARSSL_ECP_DP_SECP256R1_ENABLED */ -#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) - "POLARSSL_ECP_DP_SECP384R1_ENABLED", -#endif /* POLARSSL_ECP_DP_SECP384R1_ENABLED */ -#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) - "POLARSSL_ECP_DP_SECP521R1_ENABLED", -#endif /* POLARSSL_ECP_DP_SECP521R1_ENABLED */ -#if defined(POLARSSL_ECP_DP_SECP192K1_ENABLED) - "POLARSSL_ECP_DP_SECP192K1_ENABLED", -#endif /* POLARSSL_ECP_DP_SECP192K1_ENABLED */ -#if defined(POLARSSL_ECP_DP_SECP224K1_ENABLED) - "POLARSSL_ECP_DP_SECP224K1_ENABLED", -#endif /* POLARSSL_ECP_DP_SECP224K1_ENABLED */ -#if defined(POLARSSL_ECP_DP_SECP256K1_ENABLED) - "POLARSSL_ECP_DP_SECP256K1_ENABLED", -#endif /* POLARSSL_ECP_DP_SECP256K1_ENABLED */ -#if defined(POLARSSL_ECP_DP_BP256R1_ENABLED) - "POLARSSL_ECP_DP_BP256R1_ENABLED", -#endif /* POLARSSL_ECP_DP_BP256R1_ENABLED */ -#if defined(POLARSSL_ECP_DP_BP384R1_ENABLED) - "POLARSSL_ECP_DP_BP384R1_ENABLED", -#endif /* POLARSSL_ECP_DP_BP384R1_ENABLED */ -#if defined(POLARSSL_ECP_DP_BP512R1_ENABLED) - "POLARSSL_ECP_DP_BP512R1_ENABLED", -#endif /* POLARSSL_ECP_DP_BP512R1_ENABLED */ -#if defined(POLARSSL_ECP_DP_M221_ENABLED) - "POLARSSL_ECP_DP_M221_ENABLED", -#endif /* POLARSSL_ECP_DP_M221_ENABLED */ -#if defined(POLARSSL_ECP_DP_M255_ENABLED) - "POLARSSL_ECP_DP_M255_ENABLED", -#endif /* POLARSSL_ECP_DP_M255_ENABLED */ -#if defined(POLARSSL_ECP_DP_M383_ENABLED) - "POLARSSL_ECP_DP_M383_ENABLED", -#endif /* POLARSSL_ECP_DP_M383_ENABLED */ -#if defined(POLARSSL_ECP_DP_M511_ENABLED) - "POLARSSL_ECP_DP_M511_ENABLED", -#endif /* POLARSSL_ECP_DP_M511_ENABLED */ -#if defined(POLARSSL_ECP_NIST_OPTIM) - "POLARSSL_ECP_NIST_OPTIM", -#endif /* POLARSSL_ECP_NIST_OPTIM */ -#if defined(POLARSSL_ECDSA_DETERMINISTIC) - "POLARSSL_ECDSA_DETERMINISTIC", -#endif /* POLARSSL_ECDSA_DETERMINISTIC */ -#if defined(POLARSSL_KEY_EXCHANGE_PSK_ENABLED) - "POLARSSL_KEY_EXCHANGE_PSK_ENABLED", -#endif /* POLARSSL_KEY_EXCHANGE_PSK_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) - "POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED", -#endif /* POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) - "POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED", -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) - "POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED", -#endif /* POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) - "POLARSSL_KEY_EXCHANGE_RSA_ENABLED", -#endif /* POLARSSL_KEY_EXCHANGE_RSA_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) - "POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED", -#endif /* POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) - "POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED", -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) - "POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED", -#endif /* POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - "POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED", -#endif /* POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ -#if defined(POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED) - "POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED", -#endif /* POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED */ -#if defined(POLARSSL_PK_PARSE_EC_EXTENDED) - "POLARSSL_PK_PARSE_EC_EXTENDED", -#endif /* POLARSSL_PK_PARSE_EC_EXTENDED */ -#if defined(POLARSSL_ERROR_STRERROR_BC) - "POLARSSL_ERROR_STRERROR_BC", -#endif /* POLARSSL_ERROR_STRERROR_BC */ -#if defined(POLARSSL_ERROR_STRERROR_DUMMY) - "POLARSSL_ERROR_STRERROR_DUMMY", -#endif /* POLARSSL_ERROR_STRERROR_DUMMY */ -#if defined(POLARSSL_GENPRIME) - "POLARSSL_GENPRIME", -#endif /* POLARSSL_GENPRIME */ -#if defined(POLARSSL_FS_IO) - "POLARSSL_FS_IO", -#endif /* POLARSSL_FS_IO */ -#if defined(POLARSSL_NO_DEFAULT_ENTROPY_SOURCES) - "POLARSSL_NO_DEFAULT_ENTROPY_SOURCES", -#endif /* POLARSSL_NO_DEFAULT_ENTROPY_SOURCES */ -#if defined(POLARSSL_NO_PLATFORM_ENTROPY) - "POLARSSL_NO_PLATFORM_ENTROPY", -#endif /* POLARSSL_NO_PLATFORM_ENTROPY */ -#if defined(POLARSSL_ENTROPY_FORCE_SHA256) - "POLARSSL_ENTROPY_FORCE_SHA256", -#endif /* POLARSSL_ENTROPY_FORCE_SHA256 */ -#if defined(POLARSSL_MEMORY_DEBUG) - "POLARSSL_MEMORY_DEBUG", -#endif /* POLARSSL_MEMORY_DEBUG */ -#if defined(POLARSSL_MEMORY_BACKTRACE) - "POLARSSL_MEMORY_BACKTRACE", -#endif /* POLARSSL_MEMORY_BACKTRACE */ -#if defined(POLARSSL_PKCS1_V15) - "POLARSSL_PKCS1_V15", -#endif /* POLARSSL_PKCS1_V15 */ -#if defined(POLARSSL_PKCS1_V21) - "POLARSSL_PKCS1_V21", -#endif /* POLARSSL_PKCS1_V21 */ -#if defined(POLARSSL_RSA_NO_CRT) - "POLARSSL_RSA_NO_CRT", -#endif /* POLARSSL_RSA_NO_CRT */ -#if defined(POLARSSL_SELF_TEST) - "POLARSSL_SELF_TEST", -#endif /* POLARSSL_SELF_TEST */ -#if defined(POLARSSL_SSL_ALERT_MESSAGES) - "POLARSSL_SSL_ALERT_MESSAGES", -#endif /* POLARSSL_SSL_ALERT_MESSAGES */ -#if defined(POLARSSL_SSL_DEBUG_ALL) - "POLARSSL_SSL_DEBUG_ALL", -#endif /* POLARSSL_SSL_DEBUG_ALL */ -#if defined(POLARSSL_SSL_HW_RECORD_ACCEL) - "POLARSSL_SSL_HW_RECORD_ACCEL", -#endif /* POLARSSL_SSL_HW_RECORD_ACCEL */ -#if defined(POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO) - "POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO", -#endif /* POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO */ -#if defined(POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE) - "POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE", -#endif /* POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE */ -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) - "POLARSSL_SSL_MAX_FRAGMENT_LENGTH", -#endif /* POLARSSL_SSL_MAX_FRAGMENT_LENGTH */ -#if defined(POLARSSL_SSL_PROTO_SSL3) - "POLARSSL_SSL_PROTO_SSL3", -#endif /* POLARSSL_SSL_PROTO_SSL3 */ -#if defined(POLARSSL_SSL_PROTO_TLS1) - "POLARSSL_SSL_PROTO_TLS1", -#endif /* POLARSSL_SSL_PROTO_TLS1 */ -#if defined(POLARSSL_SSL_PROTO_TLS1_1) - "POLARSSL_SSL_PROTO_TLS1_1", -#endif /* POLARSSL_SSL_PROTO_TLS1_1 */ -#if defined(POLARSSL_SSL_PROTO_TLS1_2) - "POLARSSL_SSL_PROTO_TLS1_2", -#endif /* POLARSSL_SSL_PROTO_TLS1_2 */ -#if defined(POLARSSL_SSL_ALPN) - "POLARSSL_SSL_ALPN", -#endif /* POLARSSL_SSL_ALPN */ -#if defined(POLARSSL_SSL_SESSION_TICKETS) - "POLARSSL_SSL_SESSION_TICKETS", -#endif /* POLARSSL_SSL_SESSION_TICKETS */ -#if defined(POLARSSL_SSL_SERVER_NAME_INDICATION) - "POLARSSL_SSL_SERVER_NAME_INDICATION", -#endif /* POLARSSL_SSL_SERVER_NAME_INDICATION */ -#if defined(POLARSSL_SSL_TRUNCATED_HMAC) - "POLARSSL_SSL_TRUNCATED_HMAC", -#endif /* POLARSSL_SSL_TRUNCATED_HMAC */ -#if defined(POLARSSL_SSL_SET_CURVES) - "POLARSSL_SSL_SET_CURVES", -#endif /* POLARSSL_SSL_SET_CURVES */ -#if defined(POLARSSL_THREADING_ALT) - "POLARSSL_THREADING_ALT", -#endif /* POLARSSL_THREADING_ALT */ -#if defined(POLARSSL_THREADING_PTHREAD) - "POLARSSL_THREADING_PTHREAD", -#endif /* POLARSSL_THREADING_PTHREAD */ -#if defined(POLARSSL_VERSION_FEATURES) - "POLARSSL_VERSION_FEATURES", -#endif /* POLARSSL_VERSION_FEATURES */ -#if defined(POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3) - "POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3", -#endif /* POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3 */ -#if defined(POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION) - "POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION", -#endif /* POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION */ -#if defined(POLARSSL_X509_CHECK_KEY_USAGE) - "POLARSSL_X509_CHECK_KEY_USAGE", -#endif /* POLARSSL_X509_CHECK_KEY_USAGE */ -#if defined(POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE) - "POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE", -#endif /* POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE */ -#if defined(POLARSSL_X509_RSASSA_PSS_SUPPORT) - "POLARSSL_X509_RSASSA_PSS_SUPPORT", -#endif /* POLARSSL_X509_RSASSA_PSS_SUPPORT */ -#if defined(POLARSSL_ZLIB_SUPPORT) - "POLARSSL_ZLIB_SUPPORT", -#endif /* POLARSSL_ZLIB_SUPPORT */ -#if defined(POLARSSL_AESNI_C) - "POLARSSL_AESNI_C", -#endif /* POLARSSL_AESNI_C */ -#if defined(POLARSSL_AES_C) - "POLARSSL_AES_C", -#endif /* POLARSSL_AES_C */ -#if defined(POLARSSL_ARC4_C) - "POLARSSL_ARC4_C", -#endif /* POLARSSL_ARC4_C */ -#if defined(POLARSSL_ASN1_PARSE_C) - "POLARSSL_ASN1_PARSE_C", -#endif /* POLARSSL_ASN1_PARSE_C */ -#if defined(POLARSSL_ASN1_WRITE_C) - "POLARSSL_ASN1_WRITE_C", -#endif /* POLARSSL_ASN1_WRITE_C */ -#if defined(POLARSSL_BASE64_C) - "POLARSSL_BASE64_C", -#endif /* POLARSSL_BASE64_C */ -#if defined(POLARSSL_BIGNUM_C) - "POLARSSL_BIGNUM_C", -#endif /* POLARSSL_BIGNUM_C */ -#if defined(POLARSSL_BLOWFISH_C) - "POLARSSL_BLOWFISH_C", -#endif /* POLARSSL_BLOWFISH_C */ -#if defined(POLARSSL_CAMELLIA_C) - "POLARSSL_CAMELLIA_C", -#endif /* POLARSSL_CAMELLIA_C */ -#if defined(POLARSSL_CCM_C) - "POLARSSL_CCM_C", -#endif /* POLARSSL_CCM_C */ -#if defined(POLARSSL_CERTS_C) - "POLARSSL_CERTS_C", -#endif /* POLARSSL_CERTS_C */ -#if defined(POLARSSL_CIPHER_C) - "POLARSSL_CIPHER_C", -#endif /* POLARSSL_CIPHER_C */ -#if defined(POLARSSL_CTR_DRBG_C) - "POLARSSL_CTR_DRBG_C", -#endif /* POLARSSL_CTR_DRBG_C */ -#if defined(POLARSSL_DEBUG_C) - "POLARSSL_DEBUG_C", -#endif /* POLARSSL_DEBUG_C */ -#if defined(POLARSSL_DES_C) - "POLARSSL_DES_C", -#endif /* POLARSSL_DES_C */ -#if defined(POLARSSL_DHM_C) - "POLARSSL_DHM_C", -#endif /* POLARSSL_DHM_C */ -#if defined(POLARSSL_ECDH_C) - "POLARSSL_ECDH_C", -#endif /* POLARSSL_ECDH_C */ -#if defined(POLARSSL_ECDSA_C) - "POLARSSL_ECDSA_C", -#endif /* POLARSSL_ECDSA_C */ -#if defined(POLARSSL_ECP_C) - "POLARSSL_ECP_C", -#endif /* POLARSSL_ECP_C */ -#if defined(POLARSSL_ENTROPY_C) - "POLARSSL_ENTROPY_C", -#endif /* POLARSSL_ENTROPY_C */ -#if defined(POLARSSL_ERROR_C) - "POLARSSL_ERROR_C", -#endif /* POLARSSL_ERROR_C */ -#if defined(POLARSSL_GCM_C) - "POLARSSL_GCM_C", -#endif /* POLARSSL_GCM_C */ -#if defined(POLARSSL_HAVEGE_C) - "POLARSSL_HAVEGE_C", -#endif /* POLARSSL_HAVEGE_C */ -#if defined(POLARSSL_HMAC_DRBG_C) - "POLARSSL_HMAC_DRBG_C", -#endif /* POLARSSL_HMAC_DRBG_C */ -#if defined(POLARSSL_MD_C) - "POLARSSL_MD_C", -#endif /* POLARSSL_MD_C */ -#if defined(POLARSSL_MD2_C) - "POLARSSL_MD2_C", -#endif /* POLARSSL_MD2_C */ -#if defined(POLARSSL_MD4_C) - "POLARSSL_MD4_C", -#endif /* POLARSSL_MD4_C */ -#if defined(POLARSSL_MD5_C) - "POLARSSL_MD5_C", -#endif /* POLARSSL_MD5_C */ -#if defined(POLARSSL_MEMORY_C) - "POLARSSL_MEMORY_C", -#endif /* POLARSSL_MEMORY_C */ -#if defined(POLARSSL_MEMORY_BUFFER_ALLOC_C) - "POLARSSL_MEMORY_BUFFER_ALLOC_C", -#endif /* POLARSSL_MEMORY_BUFFER_ALLOC_C */ -#if defined(POLARSSL_NET_C) - "POLARSSL_NET_C", -#endif /* POLARSSL_NET_C */ -#if defined(POLARSSL_OID_C) - "POLARSSL_OID_C", -#endif /* POLARSSL_OID_C */ -#if defined(POLARSSL_PADLOCK_C) - "POLARSSL_PADLOCK_C", -#endif /* POLARSSL_PADLOCK_C */ -#if defined(POLARSSL_PBKDF2_C) - "POLARSSL_PBKDF2_C", -#endif /* POLARSSL_PBKDF2_C */ -#if defined(POLARSSL_PEM_PARSE_C) - "POLARSSL_PEM_PARSE_C", -#endif /* POLARSSL_PEM_PARSE_C */ -#if defined(POLARSSL_PEM_WRITE_C) - "POLARSSL_PEM_WRITE_C", -#endif /* POLARSSL_PEM_WRITE_C */ -#if defined(POLARSSL_PK_C) - "POLARSSL_PK_C", -#endif /* POLARSSL_PK_C */ -#if defined(POLARSSL_PK_PARSE_C) - "POLARSSL_PK_PARSE_C", -#endif /* POLARSSL_PK_PARSE_C */ -#if defined(POLARSSL_PK_WRITE_C) - "POLARSSL_PK_WRITE_C", -#endif /* POLARSSL_PK_WRITE_C */ -#if defined(POLARSSL_PKCS5_C) - "POLARSSL_PKCS5_C", -#endif /* POLARSSL_PKCS5_C */ -#if defined(POLARSSL_PKCS11_C) - "POLARSSL_PKCS11_C", -#endif /* POLARSSL_PKCS11_C */ -#if defined(POLARSSL_PKCS12_C) - "POLARSSL_PKCS12_C", -#endif /* POLARSSL_PKCS12_C */ -#if defined(POLARSSL_PLATFORM_C) - "POLARSSL_PLATFORM_C", -#endif /* POLARSSL_PLATFORM_C */ -#if defined(POLARSSL_RIPEMD160_C) - "POLARSSL_RIPEMD160_C", -#endif /* POLARSSL_RIPEMD160_C */ -#if defined(POLARSSL_RSA_C) - "POLARSSL_RSA_C", -#endif /* POLARSSL_RSA_C */ -#if defined(POLARSSL_SHA1_C) - "POLARSSL_SHA1_C", -#endif /* POLARSSL_SHA1_C */ -#if defined(POLARSSL_SHA256_C) - "POLARSSL_SHA256_C", -#endif /* POLARSSL_SHA256_C */ -#if defined(POLARSSL_SHA512_C) - "POLARSSL_SHA512_C", -#endif /* POLARSSL_SHA512_C */ -#if defined(POLARSSL_SSL_CACHE_C) - "POLARSSL_SSL_CACHE_C", -#endif /* POLARSSL_SSL_CACHE_C */ -#if defined(POLARSSL_SSL_CLI_C) - "POLARSSL_SSL_CLI_C", -#endif /* POLARSSL_SSL_CLI_C */ -#if defined(POLARSSL_SSL_SRV_C) - "POLARSSL_SSL_SRV_C", -#endif /* POLARSSL_SSL_SRV_C */ -#if defined(POLARSSL_SSL_TLS_C) - "POLARSSL_SSL_TLS_C", -#endif /* POLARSSL_SSL_TLS_C */ -#if defined(POLARSSL_THREADING_C) - "POLARSSL_THREADING_C", -#endif /* POLARSSL_THREADING_C */ -#if defined(POLARSSL_TIMING_C) - "POLARSSL_TIMING_C", -#endif /* POLARSSL_TIMING_C */ -#if defined(POLARSSL_VERSION_C) - "POLARSSL_VERSION_C", -#endif /* POLARSSL_VERSION_C */ -#if defined(POLARSSL_X509_USE_C) - "POLARSSL_X509_USE_C", -#endif /* POLARSSL_X509_USE_C */ -#if defined(POLARSSL_X509_CRT_PARSE_C) - "POLARSSL_X509_CRT_PARSE_C", -#endif /* POLARSSL_X509_CRT_PARSE_C */ -#if defined(POLARSSL_X509_CRL_PARSE_C) - "POLARSSL_X509_CRL_PARSE_C", -#endif /* POLARSSL_X509_CRL_PARSE_C */ -#if defined(POLARSSL_X509_CSR_PARSE_C) - "POLARSSL_X509_CSR_PARSE_C", -#endif /* POLARSSL_X509_CSR_PARSE_C */ -#if defined(POLARSSL_X509_CREATE_C) - "POLARSSL_X509_CREATE_C", -#endif /* POLARSSL_X509_CREATE_C */ -#if defined(POLARSSL_X509_CRT_WRITE_C) - "POLARSSL_X509_CRT_WRITE_C", -#endif /* POLARSSL_X509_CRT_WRITE_C */ -#if defined(POLARSSL_X509_CSR_WRITE_C) - "POLARSSL_X509_CSR_WRITE_C", -#endif /* POLARSSL_X509_CSR_WRITE_C */ -#if defined(POLARSSL_XTEA_C) - "POLARSSL_XTEA_C", -#endif /* POLARSSL_XTEA_C */ -#endif /* POLARSSL_VERSION_FEATURES */ - NULL -}; - -int version_check_feature( const char *feature ) -{ - const char **idx = features; - - if( *idx == NULL ) - return( -2 ); - - if( feature == NULL ) - return( -1 ); - - while( *idx != NULL ) - { - if( !strcasecmp( *idx, feature ) ) - return( 0 ); - idx++; - } - return( -1 ); -} - -#endif /* POLARSSL_VERSION_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509.c deleted file mode 100644 index 17c7a7d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509.c +++ /dev/null @@ -1,1102 +0,0 @@ -/* - * X.509 common functions for parsing and verification - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The ITU-T X.509 standard defines a certificate format for PKI. - * - * http://www.ietf.org/rfc/rfc5280.txt (Certificates and CRLs) - * http://www.ietf.org/rfc/rfc3279.txt (Alg IDs for CRLs) - * http://www.ietf.org/rfc/rfc2986.txt (CSRs, aka PKCS#10) - * - * http://www.itu.int/ITU-T/studygroups/com17/languages/X.680-0207.pdf - * http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_X509_USE_C) - -#include "polarssl/x509.h" -#include "polarssl/asn1.h" -#include "polarssl/oid.h" -#if defined(POLARSSL_PEM_PARSE_C) -#include "polarssl/pem.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include -#include -#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) -#include -#else -#include -#endif - -#if defined(EFIX64) || defined(EFI32) -#include -#endif - -#if defined(POLARSSL_FS_IO) -#include -#if !defined(_WIN32) -#include -#include -#include -#endif -#endif - -/* - * CertificateSerialNumber ::= INTEGER - */ -int x509_get_serial( unsigned char **p, const unsigned char *end, - x509_buf *serial ) -{ - int ret; - - if( ( end - *p ) < 1 ) - return( POLARSSL_ERR_X509_INVALID_SERIAL + - POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - if( **p != ( ASN1_CONTEXT_SPECIFIC | ASN1_PRIMITIVE | 2 ) && - **p != ASN1_INTEGER ) - return( POLARSSL_ERR_X509_INVALID_SERIAL + - POLARSSL_ERR_ASN1_UNEXPECTED_TAG ); - - serial->tag = *(*p)++; - - if( ( ret = asn1_get_len( p, end, &serial->len ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_SERIAL + ret ); - - serial->p = *p; - *p += serial->len; - - return( 0 ); -} - -/* Get an algorithm identifier without parameters (eg for signatures) - * - * AlgorithmIdentifier ::= SEQUENCE { - * algorithm OBJECT IDENTIFIER, - * parameters ANY DEFINED BY algorithm OPTIONAL } - */ -int x509_get_alg_null( unsigned char **p, const unsigned char *end, - x509_buf *alg ) -{ - int ret; - - if( ( ret = asn1_get_alg_null( p, end, alg ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_ALG + ret ); - - return( 0 ); -} - -/* - * Parse an algorithm identifier with (optional) paramaters - */ -int x509_get_alg( unsigned char **p, const unsigned char *end, - x509_buf *alg, x509_buf *params ) -{ - int ret; - - if( ( ret = asn1_get_alg( p, end, alg, params ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_ALG + ret ); - - return( 0 ); -} - -#if defined(POLARSSL_X509_RSASSA_PSS_SUPPORT) -/* - * HashAlgorithm ::= AlgorithmIdentifier - * - * AlgorithmIdentifier ::= SEQUENCE { - * algorithm OBJECT IDENTIFIER, - * parameters ANY DEFINED BY algorithm OPTIONAL } - * - * For HashAlgorithm, parameters MUST be NULL or absent. - */ -static int x509_get_hash_alg( const x509_buf *alg, md_type_t *md_alg ) -{ - int ret; - unsigned char *p; - const unsigned char *end; - x509_buf md_oid; - size_t len; - - /* Make sure we got a SEQUENCE and setup bounds */ - if( alg->tag != ( ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) - return( POLARSSL_ERR_X509_INVALID_ALG + - POLARSSL_ERR_ASN1_UNEXPECTED_TAG ); - - p = (unsigned char *) alg->p; - end = p + alg->len; - - if( p >= end ) - return( POLARSSL_ERR_X509_INVALID_ALG + - POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - /* Parse md_oid */ - md_oid.tag = *p; - - if( ( ret = asn1_get_tag( &p, end, &md_oid.len, ASN1_OID ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_ALG + ret ); - - md_oid.p = p; - p += md_oid.len; - - /* Get md_alg from md_oid */ - if( ( ret = oid_get_md_alg( &md_oid, md_alg ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_ALG + ret ); - - /* Make sure params is absent of NULL */ - if( p == end ) - return( 0 ); - - if( ( ret = asn1_get_tag( &p, end, &len, ASN1_NULL ) ) != 0 || len != 0 ) - return( POLARSSL_ERR_X509_INVALID_ALG + ret ); - - if( p != end ) - return( POLARSSL_ERR_X509_INVALID_ALG + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -/* - * RSASSA-PSS-params ::= SEQUENCE { - * hashAlgorithm [0] HashAlgorithm DEFAULT sha1Identifier, - * maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT mgf1SHA1Identifier, - * saltLength [2] INTEGER DEFAULT 20, - * trailerField [3] INTEGER DEFAULT 1 } - * -- Note that the tags in this Sequence are explicit. - * - * RFC 4055 (which defines use of RSASSA-PSS in PKIX) states that the value - * of trailerField MUST be 1, and PKCS#1 v2.2 doesn't even define any other - * option. Enfore this at parsing time. - */ -int x509_get_rsassa_pss_params( const x509_buf *params, - md_type_t *md_alg, md_type_t *mgf_md, - int *salt_len ) -{ - int ret; - unsigned char *p; - const unsigned char *end, *end2; - size_t len; - x509_buf alg_id, alg_params; - - /* First set everything to defaults */ - *md_alg = POLARSSL_MD_SHA1; - *mgf_md = POLARSSL_MD_SHA1; - *salt_len = 20; - - /* Make sure params is a SEQUENCE and setup bounds */ - if( params->tag != ( ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) - return( POLARSSL_ERR_X509_INVALID_ALG + - POLARSSL_ERR_ASN1_UNEXPECTED_TAG ); - - p = (unsigned char *) params->p; - end = p + params->len; - - if( p == end ) - return( 0 ); - - /* - * HashAlgorithm - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONTEXT_SPECIFIC | ASN1_CONSTRUCTED | 0 ) ) == 0 ) - { - end2 = p + len; - - /* HashAlgorithm ::= AlgorithmIdentifier (without parameters) */ - if( ( ret = x509_get_alg_null( &p, end2, &alg_id ) ) != 0 ) - return( ret ); - - if( ( ret = oid_get_md_alg( &alg_id, md_alg ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_ALG + ret ); - - if( p != end2 ) - return( POLARSSL_ERR_X509_INVALID_ALG + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - } - else if( ret != POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - return( POLARSSL_ERR_X509_INVALID_ALG + ret ); - - if( p == end ) - return( 0 ); - - /* - * MaskGenAlgorithm - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONTEXT_SPECIFIC | ASN1_CONSTRUCTED | 1 ) ) == 0 ) - { - end2 = p + len; - - /* MaskGenAlgorithm ::= AlgorithmIdentifier (params = HashAlgorithm) */ - if( ( ret = x509_get_alg( &p, end2, &alg_id, &alg_params ) ) != 0 ) - return( ret ); - - /* Only MFG1 is recognised for now */ - if( ! OID_CMP( OID_MGF1, &alg_id ) ) - return( POLARSSL_ERR_X509_FEATURE_UNAVAILABLE + - POLARSSL_ERR_OID_NOT_FOUND ); - - /* Parse HashAlgorithm */ - if( ( ret = x509_get_hash_alg( &alg_params, mgf_md ) ) != 0 ) - return( ret ); - - if( p != end2 ) - return( POLARSSL_ERR_X509_INVALID_ALG + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - } - else if( ret != POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - return( POLARSSL_ERR_X509_INVALID_ALG + ret ); - - if( p == end ) - return( 0 ); - - /* - * salt_len - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONTEXT_SPECIFIC | ASN1_CONSTRUCTED | 2 ) ) == 0 ) - { - end2 = p + len; - - if( ( ret = asn1_get_int( &p, end2, salt_len ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_ALG + ret ); - - if( p != end2 ) - return( POLARSSL_ERR_X509_INVALID_ALG + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - } - else if( ret != POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - return( POLARSSL_ERR_X509_INVALID_ALG + ret ); - - if( p == end ) - return( 0 ); - - /* - * trailer_field (if present, must be 1) - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONTEXT_SPECIFIC | ASN1_CONSTRUCTED | 3 ) ) == 0 ) - { - int trailer_field; - - end2 = p + len; - - if( ( ret = asn1_get_int( &p, end2, &trailer_field ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_ALG + ret ); - - if( p != end2 ) - return( POLARSSL_ERR_X509_INVALID_ALG + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - if( trailer_field != 1 ) - return( POLARSSL_ERR_X509_INVALID_ALG ); - } - else if( ret != POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - return( POLARSSL_ERR_X509_INVALID_ALG + ret ); - - if( p != end ) - return( POLARSSL_ERR_X509_INVALID_ALG + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} -#endif /* POLARSSL_X509_RSASSA_PSS_SUPPORT */ - -/* - * AttributeTypeAndValue ::= SEQUENCE { - * type AttributeType, - * value AttributeValue } - * - * AttributeType ::= OBJECT IDENTIFIER - * - * AttributeValue ::= ANY DEFINED BY AttributeType - */ -static int x509_get_attr_type_value( unsigned char **p, - const unsigned char *end, - x509_name *cur ) -{ - int ret; - size_t len; - x509_buf *oid; - x509_buf *val; - - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_NAME + ret ); - - if( ( end - *p ) < 1 ) - return( POLARSSL_ERR_X509_INVALID_NAME + - POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - oid = &cur->oid; - oid->tag = **p; - - if( ( ret = asn1_get_tag( p, end, &oid->len, ASN1_OID ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_NAME + ret ); - - oid->p = *p; - *p += oid->len; - - if( ( end - *p ) < 1 ) - return( POLARSSL_ERR_X509_INVALID_NAME + - POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - if( **p != ASN1_BMP_STRING && **p != ASN1_UTF8_STRING && - **p != ASN1_T61_STRING && **p != ASN1_PRINTABLE_STRING && - **p != ASN1_IA5_STRING && **p != ASN1_UNIVERSAL_STRING ) - return( POLARSSL_ERR_X509_INVALID_NAME + - POLARSSL_ERR_ASN1_UNEXPECTED_TAG ); - - val = &cur->val; - val->tag = *(*p)++; - - if( ( ret = asn1_get_len( p, end, &val->len ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_NAME + ret ); - - val->p = *p; - *p += val->len; - - cur->next = NULL; - - return( 0 ); -} - -/* - * RelativeDistinguishedName ::= - * SET OF AttributeTypeAndValue - * - * AttributeTypeAndValue ::= SEQUENCE { - * type AttributeType, - * value AttributeValue } - * - * AttributeType ::= OBJECT IDENTIFIER - * - * AttributeValue ::= ANY DEFINED BY AttributeType - */ -int x509_get_name( unsigned char **p, const unsigned char *end, - x509_name *cur ) -{ - int ret; - size_t len; - const unsigned char *end2; - x509_name *use; - - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SET ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_NAME + ret ); - - end2 = end; - end = *p + len; - use = cur; - - do - { - if( ( ret = x509_get_attr_type_value( p, end, use ) ) != 0 ) - return( ret ); - - if( *p != end ) - { - use->next = (x509_name *) polarssl_malloc( - sizeof( x509_name ) ); - - if( use->next == NULL ) - return( POLARSSL_ERR_X509_MALLOC_FAILED ); - - memset( use->next, 0, sizeof( x509_name ) ); - - use = use->next; - } - } - while( *p != end ); - - /* - * recurse until end of SEQUENCE is reached - */ - if( *p == end2 ) - return( 0 ); - - cur->next = (x509_name *) polarssl_malloc( - sizeof( x509_name ) ); - - if( cur->next == NULL ) - return( POLARSSL_ERR_X509_MALLOC_FAILED ); - - memset( cur->next, 0, sizeof( x509_name ) ); - - return( x509_get_name( p, end2, cur->next ) ); -} - -/* - * Time ::= CHOICE { - * utcTime UTCTime, - * generalTime GeneralizedTime } - */ -int x509_get_time( unsigned char **p, const unsigned char *end, - x509_time *time ) -{ - int ret; - size_t len; - char date[64]; - unsigned char tag; - - if( ( end - *p ) < 1 ) - return( POLARSSL_ERR_X509_INVALID_DATE + - POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - tag = **p; - - if( tag == ASN1_UTC_TIME ) - { - (*p)++; - ret = asn1_get_len( p, end, &len ); - - if( ret != 0 ) - return( POLARSSL_ERR_X509_INVALID_DATE + ret ); - - memset( date, 0, sizeof( date ) ); - memcpy( date, *p, ( len < sizeof( date ) - 1 ) ? - len : sizeof( date ) - 1 ); - - if( sscanf( date, "%2d%2d%2d%2d%2d%2dZ", - &time->year, &time->mon, &time->day, - &time->hour, &time->min, &time->sec ) < 5 ) - return( POLARSSL_ERR_X509_INVALID_DATE ); - - time->year += 100 * ( time->year < 50 ); - time->year += 1900; - - *p += len; - - return( 0 ); - } - else if( tag == ASN1_GENERALIZED_TIME ) - { - (*p)++; - ret = asn1_get_len( p, end, &len ); - - if( ret != 0 ) - return( POLARSSL_ERR_X509_INVALID_DATE + ret ); - - memset( date, 0, sizeof( date ) ); - memcpy( date, *p, ( len < sizeof( date ) - 1 ) ? - len : sizeof( date ) - 1 ); - - if( sscanf( date, "%4d%2d%2d%2d%2d%2dZ", - &time->year, &time->mon, &time->day, - &time->hour, &time->min, &time->sec ) < 5 ) - return( POLARSSL_ERR_X509_INVALID_DATE ); - - *p += len; - - return( 0 ); - } - else - return( POLARSSL_ERR_X509_INVALID_DATE + - POLARSSL_ERR_ASN1_UNEXPECTED_TAG ); -} - -int x509_get_sig( unsigned char **p, const unsigned char *end, x509_buf *sig ) -{ - int ret; - size_t len; - - if( ( end - *p ) < 1 ) - return( POLARSSL_ERR_X509_INVALID_SIGNATURE + - POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - sig->tag = **p; - - if( ( ret = asn1_get_bitstring_null( p, end, &len ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_SIGNATURE + ret ); - - sig->len = len; - sig->p = *p; - - *p += len; - - return( 0 ); -} - -/* - * Get signature algorithm from alg OID and optional parameters - */ -int x509_get_sig_alg( const x509_buf *sig_oid, const x509_buf *sig_params, - md_type_t *md_alg, pk_type_t *pk_alg, - void **sig_opts ) -{ - int ret; - - if( *sig_opts != NULL ) - return( POLARSSL_ERR_X509_BAD_INPUT_DATA ); - - if( ( ret = oid_get_sig_alg( sig_oid, md_alg, pk_alg ) ) != 0 ) - return( POLARSSL_ERR_X509_UNKNOWN_SIG_ALG + ret ); - -#if defined(POLARSSL_X509_RSASSA_PSS_SUPPORT) - if( *pk_alg == POLARSSL_PK_RSASSA_PSS ) - { - pk_rsassa_pss_options *pss_opts; - - pss_opts = polarssl_malloc( sizeof( pk_rsassa_pss_options ) ); - if( pss_opts == NULL ) - return( POLARSSL_ERR_X509_MALLOC_FAILED ); - - ret = x509_get_rsassa_pss_params( sig_params, - md_alg, - &pss_opts->mgf1_hash_id, - &pss_opts->expected_salt_len ); - if( ret != 0 ) - { - polarssl_free( pss_opts ); - return( ret ); - } - - *sig_opts = (void *) pss_opts; - } - else -#endif /* POLARSSL_X509_RSASSA_PSS_SUPPORT */ - { - /* Make sure parameters are absent or NULL */ - if( ( sig_params->tag != ASN1_NULL && sig_params->tag != 0 ) || - sig_params->len != 0 ) - return( POLARSSL_ERR_X509_INVALID_ALG ); - } - - return( 0 ); -} - -/* - * X.509 Extensions (No parsing of extensions, pointer should - * be either manually updated or extensions should be parsed! - */ -int x509_get_ext( unsigned char **p, const unsigned char *end, - x509_buf *ext, int tag ) -{ - int ret; - size_t len; - - if( *p == end ) - return( 0 ); - - ext->tag = **p; - - if( ( ret = asn1_get_tag( p, end, &ext->len, - ASN1_CONTEXT_SPECIFIC | ASN1_CONSTRUCTED | tag ) ) != 0 ) - return( ret ); - - ext->p = *p; - end = *p + ext->len; - - /* - * Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension - * - * Extension ::= SEQUENCE { - * extnID OBJECT IDENTIFIER, - * critical BOOLEAN DEFAULT FALSE, - * extnValue OCTET STRING } - */ - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - if( end != *p + len ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -#if defined(POLARSSL_FS_IO) -/* - * Load all data from a file into a given buffer. - */ -int x509_load_file( const char *path, unsigned char **buf, size_t *n ) -{ - FILE *f; - long size; - - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( POLARSSL_ERR_X509_FILE_IO_ERROR ); - - fseek( f, 0, SEEK_END ); - if( ( size = ftell( f ) ) == -1 ) - { - fclose( f ); - return( POLARSSL_ERR_X509_FILE_IO_ERROR ); - } - fseek( f, 0, SEEK_SET ); - - *n = (size_t) size; - - if( *n + 1 == 0 || - ( *buf = (unsigned char *) polarssl_malloc( *n + 1 ) ) == NULL ) - { - fclose( f ); - return( POLARSSL_ERR_X509_MALLOC_FAILED ); - } - - if( fread( *buf, 1, *n, f ) != *n ) - { - fclose( f ); - polarssl_free( *buf ); - return( POLARSSL_ERR_X509_FILE_IO_ERROR ); - } - - fclose( f ); - - (*buf)[*n] = '\0'; - - return( 0 ); -} -#endif /* POLARSSL_FS_IO */ - -#if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \ - !defined(EFI32) -#include - -#if !defined vsnprintf -#define vsnprintf _vsnprintf -#endif // vsnprintf - -/* - * Windows _snprintf and _vsnprintf are not compatible to linux versions. - * Result value is not size of buffer needed, but -1 if no fit is possible. - * - * This fuction tries to 'fix' this by at least suggesting enlarging the - * size by 20. - */ -static int compat_snprintf( char *str, size_t size, const char *format, ... ) -{ - va_list ap; - int res = -1; - - va_start( ap, format ); - - res = vsnprintf( str, size, format, ap ); - - va_end( ap ); - - // No quick fix possible - if( res < 0 ) - return( (int) size + 20 ); - - return( res ); -} - -#define snprintf compat_snprintf -#endif /* _MSC_VER && !snprintf && !EFIX64 && !EFI32 */ - -#define POLARSSL_ERR_DEBUG_BUF_TOO_SMALL -2 - -#define SAFE_SNPRINTF() \ -{ \ - if( ret == -1 ) \ - return( -1 ); \ - \ - if( (unsigned int) ret > n ) { \ - p[n - 1] = '\0'; \ - return( POLARSSL_ERR_DEBUG_BUF_TOO_SMALL ); \ - } \ - \ - n -= (unsigned int) ret; \ - p += (unsigned int) ret; \ -} - -/* - * Store the name in printable form into buf; no more - * than size characters will be written - */ -int x509_dn_gets( char *buf, size_t size, const x509_name *dn ) -{ - int ret; - size_t i, n; - unsigned char c; - const x509_name *name; - const char *short_name = NULL; - char s[128], *p; - - memset( s, 0, sizeof( s ) ); - - name = dn; - p = buf; - n = size; - - while( name != NULL ) - { - if( !name->oid.p ) - { - name = name->next; - continue; - } - - if( name != dn ) - { - ret = snprintf( p, n, ", " ); - SAFE_SNPRINTF(); - } - - ret = oid_get_attr_short_name( &name->oid, &short_name ); - - if( ret == 0 ) - ret = snprintf( p, n, "%s=", short_name ); - else - ret = snprintf( p, n, "\?\?=" ); - SAFE_SNPRINTF(); - - for( i = 0; i < name->val.len; i++ ) - { - if( i >= sizeof( s ) - 1 ) - break; - - c = name->val.p[i]; - if( c < 32 || c == 127 || ( c > 128 && c < 160 ) ) - s[i] = '?'; - else s[i] = c; - } - s[i] = '\0'; - ret = snprintf( p, n, "%s", s ); - SAFE_SNPRINTF(); - name = name->next; - } - - return( (int) ( size - n ) ); -} - -/* - * Store the serial in printable form into buf; no more - * than size characters will be written - */ -int x509_serial_gets( char *buf, size_t size, const x509_buf *serial ) -{ - int ret; - size_t i, n, nr; - char *p; - - p = buf; - n = size; - - nr = ( serial->len <= 32 ) - ? serial->len : 28; - - for( i = 0; i < nr; i++ ) - { - if( i == 0 && nr > 1 && serial->p[i] == 0x0 ) - continue; - - ret = snprintf( p, n, "%02X%s", - serial->p[i], ( i < nr - 1 ) ? ":" : "" ); - SAFE_SNPRINTF(); - } - - if( nr != serial->len ) - { - ret = snprintf( p, n, "...." ); - SAFE_SNPRINTF(); - } - - return( (int) ( size - n ) ); -} - -/* - * Helper for writing signature algorithms - */ -int x509_sig_alg_gets( char *buf, size_t size, const x509_buf *sig_oid, - pk_type_t pk_alg, md_type_t md_alg, - const void *sig_opts ) -{ - int ret; - char *p = buf; - size_t n = size; - const char *desc = NULL; - - ret = oid_get_sig_alg_desc( sig_oid, &desc ); - if( ret != 0 ) - ret = snprintf( p, n, "???" ); - else - ret = snprintf( p, n, "%s", desc ); - SAFE_SNPRINTF(); - -#if defined(POLARSSL_X509_RSASSA_PSS_SUPPORT) - if( pk_alg == POLARSSL_PK_RSASSA_PSS ) - { - const pk_rsassa_pss_options *pss_opts; - const md_info_t *md_info, *mgf_md_info; - - pss_opts = (const pk_rsassa_pss_options *) sig_opts; - - md_info = md_info_from_type( md_alg ); - mgf_md_info = md_info_from_type( pss_opts->mgf1_hash_id ); - - ret = snprintf( p, n, " (%s, MGF1-%s, 0x%02X)", - md_info ? md_info->name : "???", - mgf_md_info ? mgf_md_info->name : "???", - pss_opts->expected_salt_len ); - SAFE_SNPRINTF(); - } -#else - ((void) pk_alg); - ((void) md_alg); - ((void) sig_opts); -#endif /* POLARSSL_X509_RSASSA_PSS_SUPPORT */ - - return( (int) size - n ); -} - -/* - * Helper for writing "RSA key size", "EC key size", etc - */ -int x509_key_size_helper( char *buf, size_t size, const char *name ) -{ - char *p = buf; - size_t n = size; - int ret; - - if( strlen( name ) + sizeof( " key size" ) > size ) - return( POLARSSL_ERR_DEBUG_BUF_TOO_SMALL ); - - ret = snprintf( p, n, "%s key size", name ); - SAFE_SNPRINTF(); - - return( 0 ); -} - -/* - * Return an informational string describing the given OID - */ -const char *x509_oid_get_description( x509_buf *oid ) -{ - const char *desc = NULL; - int ret; - - ret = oid_get_extended_key_usage( oid, &desc ); - - if( ret != 0 ) - return( NULL ); - - return( desc ); -} - -/* Return the x.y.z.... style numeric string for the given OID */ -int x509_oid_get_numeric_string( char *buf, size_t size, x509_buf *oid ) -{ - return oid_get_numeric_string( buf, size, oid ); -} - -/* - * Return 0 if the x509_time is still valid, or 1 otherwise. - */ -#if defined(POLARSSL_HAVE_TIME) - -static void x509_get_current_time( x509_time *now ) -{ -#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) - SYSTEMTIME st; - - GetSystemTime( &st ); - - now->year = st.wYear; - now->mon = st.wMonth; - now->day = st.wDay; - now->hour = st.wHour; - now->min = st.wMinute; - now->sec = st.wSecond; -#else - struct tm lt; - time_t tt; - - tt = time( NULL ); - gmtime_r( &tt, < ); - - now->year = lt.tm_year + 1900; - now->mon = lt.tm_mon + 1; - now->day = lt.tm_mday; - now->hour = lt.tm_hour; - now->min = lt.tm_min; - now->sec = lt.tm_sec; -#endif /* _WIN32 && !EFIX64 && !EFI32 */ -} - -/* - * Return 0 if before <= after, 1 otherwise - */ -static int x509_check_time( const x509_time *before, const x509_time *after ) -{ - if( before->year > after->year ) - return( 1 ); - - if( before->year == after->year && - before->mon > after->mon ) - return( 1 ); - - if( before->year == after->year && - before->mon == after->mon && - before->day > after->day ) - return( 1 ); - - if( before->year == after->year && - before->mon == after->mon && - before->day == after->day && - before->hour > after->hour ) - return( 1 ); - - if( before->year == after->year && - before->mon == after->mon && - before->day == after->day && - before->hour == after->hour && - before->min > after->min ) - return( 1 ); - - if( before->year == after->year && - before->mon == after->mon && - before->day == after->day && - before->hour == after->hour && - before->min == after->min && - before->sec > after->sec ) - return( 1 ); - - return( 0 ); -} - -int x509_time_expired( const x509_time *to ) -{ - x509_time now; - - x509_get_current_time( &now ); - - return( x509_check_time( &now, to ) ); -} - -int x509_time_future( const x509_time *from ) -{ - x509_time now; - - x509_get_current_time( &now ); - - return( x509_check_time( from, &now ) ); -} - -#else /* POLARSSL_HAVE_TIME */ - -int x509_time_expired( const x509_time *to ) -{ - ((void) to); - return( 0 ); -} - -int x509_time_future( const x509_time *from ) -{ - ((void) from); - return( 0 ); -} -#endif /* POLARSSL_HAVE_TIME */ - -#if defined(POLARSSL_SELF_TEST) - -#include "polarssl/x509_crt.h" -#include "polarssl/certs.h" - -/* - * Checkup routine - */ -int x509_self_test( int verbose ) -{ -#if defined(POLARSSL_CERTS_C) && defined(POLARSSL_SHA1_C) - int ret; - int flags; - x509_crt cacert; - x509_crt clicert; - - if( verbose != 0 ) - polarssl_printf( " X.509 certificate load: " ); - - x509_crt_init( &clicert ); - - ret = x509_crt_parse( &clicert, (const unsigned char *) test_cli_crt, - strlen( test_cli_crt ) ); - if( ret != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( ret ); - } - - x509_crt_init( &cacert ); - - ret = x509_crt_parse( &cacert, (const unsigned char *) test_ca_crt, - strlen( test_ca_crt ) ); - if( ret != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( ret ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n X.509 signature verify: "); - - ret = x509_crt_verify( &clicert, &cacert, NULL, NULL, &flags, NULL, NULL ); - if( ret != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - polarssl_printf( "ret = %d, &flags = %04x\n", ret, flags ); - - return( ret ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n\n"); - - x509_crt_free( &cacert ); - x509_crt_free( &clicert ); - - return( 0 ); -#else - ((void) verbose); - return( POLARSSL_ERR_X509_FEATURE_UNAVAILABLE ); -#endif /* POLARSSL_CERTS_C && POLARSSL_SHA1_C */ -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_X509_USE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509_create.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509_create.c deleted file mode 100644 index 1019313..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509_create.c +++ /dev/null @@ -1,318 +0,0 @@ -/* - * X.509 base functions for creating certificates / CSRs - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_X509_CREATE_C) - -#include "polarssl/x509.h" -#include "polarssl/asn1write.h" -#include "polarssl/oid.h" - -#if defined(_MSC_VER) && !defined strncasecmp && !defined(EFIX64) && \ - !defined(EFI32) -#define strncasecmp _strnicmp -#endif - -typedef struct { - const char *name; - size_t name_len; - const char*oid; -} x509_attr_descriptor_t; - -#define ADD_STRLEN( s ) s, sizeof( s ) - 1 - -static const x509_attr_descriptor_t x509_attrs[] = -{ - { ADD_STRLEN( "CN" ), OID_AT_CN }, - { ADD_STRLEN( "commonName" ), OID_AT_CN }, - { ADD_STRLEN( "C" ), OID_AT_COUNTRY }, - { ADD_STRLEN( "countryName" ), OID_AT_COUNTRY }, - { ADD_STRLEN( "O" ), OID_AT_ORGANIZATION }, - { ADD_STRLEN( "organizationName" ), OID_AT_ORGANIZATION }, - { ADD_STRLEN( "L" ), OID_AT_LOCALITY }, - { ADD_STRLEN( "locality" ), OID_AT_LOCALITY }, - { ADD_STRLEN( "R" ), OID_PKCS9_EMAIL }, - { ADD_STRLEN( "OU" ), OID_AT_ORG_UNIT }, - { ADD_STRLEN( "organizationalUnitName" ), OID_AT_ORG_UNIT }, - { ADD_STRLEN( "ST" ), OID_AT_STATE }, - { ADD_STRLEN( "stateOrProvinceName" ), OID_AT_STATE }, - { ADD_STRLEN( "emailAddress" ), OID_PKCS9_EMAIL }, - { ADD_STRLEN( "serialNumber" ), OID_AT_SERIAL_NUMBER }, - { ADD_STRLEN( "postalAddress" ), OID_AT_POSTAL_ADDRESS }, - { ADD_STRLEN( "postalCode" ), OID_AT_POSTAL_CODE }, - { ADD_STRLEN( "dnQualifier" ), OID_AT_DN_QUALIFIER }, - { ADD_STRLEN( "title" ), OID_AT_TITLE }, - { ADD_STRLEN( "surName" ), OID_AT_SUR_NAME }, - { ADD_STRLEN( "SN" ), OID_AT_SUR_NAME }, - { ADD_STRLEN( "givenName" ), OID_AT_GIVEN_NAME }, - { ADD_STRLEN( "GN" ), OID_AT_GIVEN_NAME }, - { ADD_STRLEN( "initials" ), OID_AT_INITIALS }, - { ADD_STRLEN( "pseudonym" ), OID_AT_PSEUDONYM }, - { ADD_STRLEN( "generationQualifier" ), OID_AT_GENERATION_QUALIFIER }, - { ADD_STRLEN( "domainComponent" ), OID_DOMAIN_COMPONENT }, - { ADD_STRLEN( "DC" ), OID_DOMAIN_COMPONENT }, - { NULL, 0, NULL } -}; - -static const char *x509_at_oid_from_name( const char *name, size_t name_len ) -{ - const x509_attr_descriptor_t *cur; - - for( cur = x509_attrs; cur->name != NULL; cur++ ) - if( cur->name_len == name_len && - strncasecmp( cur->name, name, name_len ) == 0 ) - break; - - return( cur->oid ); -} - -int x509_string_to_names( asn1_named_data **head, const char *name ) -{ - int ret = 0; - const char *s = name, *c = s; - const char *end = s + strlen( s ); - const char *oid = NULL; - int in_tag = 1; - - /* Clear existing chain if present */ - asn1_free_named_data_list( head ); - - while( c <= end ) - { - if( in_tag && *c == '=' ) - { - if( ( oid = x509_at_oid_from_name( s, c - s ) ) == NULL ) - { - ret = POLARSSL_ERR_X509_UNKNOWN_OID; - goto exit; - } - - s = c + 1; - in_tag = 0; - } - - if( !in_tag && ( *c == ',' || c == end ) ) - { - if( asn1_store_named_data( head, oid, strlen( oid ), - (unsigned char *) s, - c - s ) == NULL ) - { - return( POLARSSL_ERR_X509_MALLOC_FAILED ); - } - - while( c < end && *(c + 1) == ' ' ) - c++; - - s = c + 1; - in_tag = 1; - } - c++; - } - -exit: - - return( ret ); -} - -/* The first byte of the value in the asn1_named_data structure is reserved - * to store the critical boolean for us - */ -int x509_set_extension( asn1_named_data **head, const char *oid, size_t oid_len, - int critical, const unsigned char *val, size_t val_len ) -{ - asn1_named_data *cur; - - if( ( cur = asn1_store_named_data( head, oid, oid_len, - NULL, val_len + 1 ) ) == NULL ) - { - return( POLARSSL_ERR_X509_MALLOC_FAILED ); - } - - cur->val.p[0] = critical; - memcpy( cur->val.p + 1, val, val_len ); - - return( 0 ); -} - -/* - * RelativeDistinguishedName ::= - * SET OF AttributeTypeAndValue - * - * AttributeTypeAndValue ::= SEQUENCE { - * type AttributeType, - * value AttributeValue } - * - * AttributeType ::= OBJECT IDENTIFIER - * - * AttributeValue ::= ANY DEFINED BY AttributeType - */ -static int x509_write_name( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len, - const unsigned char *name, size_t name_len ) -{ - int ret; - size_t len = 0; - - // Write PrintableString for all except OID_PKCS9_EMAIL - // - if( OID_SIZE( OID_PKCS9_EMAIL ) == oid_len && - memcmp( oid, OID_PKCS9_EMAIL, oid_len ) == 0 ) - { - ASN1_CHK_ADD( len, asn1_write_ia5_string( p, start, - (const char *) name, - name_len ) ); - } - else - { - ASN1_CHK_ADD( len, asn1_write_printable_string( p, start, - (const char *) name, - name_len ) ); - } - - // Write OID - // - ASN1_CHK_ADD( len, asn1_write_oid( p, start, oid, oid_len ) ); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_CONSTRUCTED | - ASN1_SET ) ); - - return( (int) len ); -} - -int x509_write_names( unsigned char **p, unsigned char *start, - asn1_named_data *first ) -{ - int ret; - size_t len = 0; - asn1_named_data *cur = first; - - while( cur != NULL ) - { - ASN1_CHK_ADD( len, x509_write_name( p, start, (char *) cur->oid.p, - cur->oid.len, - cur->val.p, cur->val.len ) ); - cur = cur->next; - } - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - return( (int) len ); -} - -int x509_write_sig( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len, - unsigned char *sig, size_t size ) -{ - int ret; - size_t len = 0; - - if( *p - start < (int) size + 1 ) - return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL ); - - len = size; - (*p) -= len; - memcpy( *p, sig, len ); - - *--(*p) = 0; - len += 1; - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_BIT_STRING ) ); - - // Write OID - // - ASN1_CHK_ADD( len, asn1_write_algorithm_identifier( p, start, oid, - oid_len, 0 ) ); - - return( (int) len ); -} - -static int x509_write_extension( unsigned char **p, unsigned char *start, - asn1_named_data *ext ) -{ - int ret; - size_t len = 0; - - ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, ext->val.p + 1, - ext->val.len - 1 ) ); - ASN1_CHK_ADD( len, asn1_write_len( p, start, ext->val.len - 1 ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_OCTET_STRING ) ); - - if( ext->val.p[0] != 0 ) - { - ASN1_CHK_ADD( len, asn1_write_bool( p, start, 1 ) ); - } - - ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, ext->oid.p, - ext->oid.len ) ); - ASN1_CHK_ADD( len, asn1_write_len( p, start, ext->oid.len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_OID ) ); - - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - return( (int) len ); -} - -/* - * Extension ::= SEQUENCE { - * extnID OBJECT IDENTIFIER, - * critical BOOLEAN DEFAULT FALSE, - * extnValue OCTET STRING - * -- contains the DER encoding of an ASN.1 value - * -- corresponding to the extension type identified - * -- by extnID - * } - */ -int x509_write_extensions( unsigned char **p, unsigned char *start, - asn1_named_data *first ) -{ - int ret; - size_t len = 0; - asn1_named_data *cur_ext = first; - - while( cur_ext != NULL ) - { - ASN1_CHK_ADD( len, x509_write_extension( p, start, cur_ext ) ); - cur_ext = cur_ext->next; - } - - return( (int) len ); -} - -#endif /* POLARSSL_X509_CREATE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509_crl.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509_crl.c deleted file mode 100644 index 7dd53c2..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509_crl.c +++ /dev/null @@ -1,768 +0,0 @@ -/* - * X.509 Certidicate Revocation List (CRL) parsing - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The ITU-T X.509 standard defines a certificate format for PKI. - * - * http://www.ietf.org/rfc/rfc5280.txt (Certificates and CRLs) - * http://www.ietf.org/rfc/rfc3279.txt (Alg IDs for CRLs) - * http://www.ietf.org/rfc/rfc2986.txt (CSRs, aka PKCS#10) - * - * http://www.itu.int/ITU-T/studygroups/com17/languages/X.680-0207.pdf - * http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_X509_CRL_PARSE_C) - -#include "polarssl/x509_crl.h" -#include "polarssl/oid.h" -#if defined(POLARSSL_PEM_PARSE_C) -#include "polarssl/pem.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include -#include -#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) - -#include -#else -#include -#endif - -#if defined(POLARSSL_FS_IO) || defined(EFIX64) || defined(EFI32) -#include -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * Version ::= INTEGER { v1(0), v2(1) } - */ -static int x509_crl_get_version( unsigned char **p, - const unsigned char *end, - int *ver ) -{ - int ret; - - if( ( ret = asn1_get_int( p, end, ver ) ) != 0 ) - { - if( ret == POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - { - *ver = 0; - return( 0 ); - } - - return( POLARSSL_ERR_X509_INVALID_VERSION + ret ); - } - - return( 0 ); -} - -/* - * X.509 CRL v2 extensions (no extensions parsed yet.) - */ -static int x509_get_crl_ext( unsigned char **p, - const unsigned char *end, - x509_buf *ext ) -{ - int ret; - size_t len = 0; - - /* Get explicit tag */ - if( ( ret = x509_get_ext( p, end, ext, 0) ) != 0 ) - { - if( ret == POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - return( 0 ); - - return( ret ); - } - - while( *p < end ) - { - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - *p += len; - } - - if( *p != end ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -/* - * X.509 CRL v2 entry extensions (no extensions parsed yet.) - */ -static int x509_get_crl_entry_ext( unsigned char **p, - const unsigned char *end, - x509_buf *ext ) -{ - int ret; - size_t len = 0; - - /* OPTIONAL */ - if( end <= *p ) - return( 0 ); - - ext->tag = **p; - ext->p = *p; - - /* - * Get CRL-entry extension sequence header - * crlEntryExtensions Extensions OPTIONAL -- if present, MUST be v2 - */ - if( ( ret = asn1_get_tag( p, end, &ext->len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - if( ret == POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - { - ext->p = NULL; - return( 0 ); - } - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - } - - end = *p + ext->len; - - if( end != *p + ext->len ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - while( *p < end ) - { - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - *p += len; - } - - if( *p != end ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -/* - * X.509 CRL Entries - */ -static int x509_get_entries( unsigned char **p, - const unsigned char *end, - x509_crl_entry *entry ) -{ - int ret; - size_t entry_len; - x509_crl_entry *cur_entry = entry; - - if( *p == end ) - return( 0 ); - - if( ( ret = asn1_get_tag( p, end, &entry_len, - ASN1_SEQUENCE | ASN1_CONSTRUCTED ) ) != 0 ) - { - if( ret == POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - return( 0 ); - - return( ret ); - } - - end = *p + entry_len; - - while( *p < end ) - { - size_t len2; - const unsigned char *end2; - - if( ( ret = asn1_get_tag( p, end, &len2, - ASN1_SEQUENCE | ASN1_CONSTRUCTED ) ) != 0 ) - { - return( ret ); - } - - cur_entry->raw.tag = **p; - cur_entry->raw.p = *p; - cur_entry->raw.len = len2; - end2 = *p + len2; - - if( ( ret = x509_get_serial( p, end2, &cur_entry->serial ) ) != 0 ) - return( ret ); - - if( ( ret = x509_get_time( p, end2, - &cur_entry->revocation_date ) ) != 0 ) - return( ret ); - - if( ( ret = x509_get_crl_entry_ext( p, end2, - &cur_entry->entry_ext ) ) != 0 ) - return( ret ); - - if( *p < end ) - { - cur_entry->next = polarssl_malloc( sizeof( x509_crl_entry ) ); - - if( cur_entry->next == NULL ) - return( POLARSSL_ERR_X509_MALLOC_FAILED ); - - cur_entry = cur_entry->next; - memset( cur_entry, 0, sizeof( x509_crl_entry ) ); - } - } - - return( 0 ); -} - -/* - * Parse one or more CRLs and add them to the chained list - */ -int x509_crl_parse( x509_crl *chain, const unsigned char *buf, size_t buflen ) -{ - int ret; - size_t len; - unsigned char *p, *end; - x509_crl *crl; - x509_buf sig_params1, sig_params2; - -#if defined(POLARSSL_PEM_PARSE_C) - size_t use_len; - pem_context pem; -#endif - - memset( &sig_params1, 0, sizeof( x509_buf ) ); - memset( &sig_params2, 0, sizeof( x509_buf ) ); - - crl = chain; - - /* - * Check for valid input - */ - if( crl == NULL || buf == NULL ) - return( POLARSSL_ERR_X509_BAD_INPUT_DATA ); - - while( crl->version != 0 && crl->next != NULL ) - crl = crl->next; - - /* - * Add new CRL on the end of the chain if needed. - */ - if( crl->version != 0 && crl->next == NULL ) - { - crl->next = (x509_crl *) polarssl_malloc( sizeof( x509_crl ) ); - - if( crl->next == NULL ) - { - x509_crl_free( crl ); - return( POLARSSL_ERR_X509_MALLOC_FAILED ); - } - - crl = crl->next; - x509_crl_init( crl ); - } - -#if defined(POLARSSL_PEM_PARSE_C) - pem_init( &pem ); - ret = pem_read_buffer( &pem, - "-----BEGIN X509 CRL-----", - "-----END X509 CRL-----", - buf, NULL, 0, &use_len ); - - if( ret == 0 ) - { - /* - * Was PEM encoded - */ - buflen -= use_len; - buf += use_len; - - /* - * Steal PEM buffer - */ - p = pem.buf; - pem.buf = NULL; - len = pem.buflen; - pem_free( &pem ); - } - else if( ret != POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - { - pem_free( &pem ); - return( ret ); - } - else -#endif /* POLARSSL_PEM_PARSE_C */ - { - /* - * nope, copy the raw DER data - */ - p = (unsigned char *) polarssl_malloc( len = buflen ); - - if( p == NULL ) - return( POLARSSL_ERR_X509_MALLOC_FAILED ); - - memcpy( p, buf, buflen ); - - buflen = 0; - } - - crl->raw.p = p; - crl->raw.len = len; - end = p + len; - - /* - * CertificateList ::= SEQUENCE { - * tbsCertList TBSCertList, - * signatureAlgorithm AlgorithmIdentifier, - * signatureValue BIT STRING } - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - x509_crl_free( crl ); - return( POLARSSL_ERR_X509_INVALID_FORMAT ); - } - - if( len != (size_t) ( end - p ) ) - { - x509_crl_free( crl ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - } - - /* - * TBSCertList ::= SEQUENCE { - */ - crl->tbs.p = p; - - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - x509_crl_free( crl ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + ret ); - } - - end = p + len; - crl->tbs.len = end - crl->tbs.p; - - /* - * Version ::= INTEGER OPTIONAL { v1(0), v2(1) } - * -- if present, MUST be v2 - * - * signature AlgorithmIdentifier - */ - if( ( ret = x509_crl_get_version( &p, end, &crl->version ) ) != 0 || - ( ret = x509_get_alg( &p, end, &crl->sig_oid1, &sig_params1 ) ) != 0 ) - { - x509_crl_free( crl ); - return( ret ); - } - - crl->version++; - - if( crl->version > 2 ) - { - x509_crl_free( crl ); - return( POLARSSL_ERR_X509_UNKNOWN_VERSION ); - } - - if( ( ret = x509_get_sig_alg( &crl->sig_oid1, &sig_params1, - &crl->sig_md, &crl->sig_pk, - &crl->sig_opts ) ) != 0 ) - { - x509_crl_free( crl ); - return( POLARSSL_ERR_X509_UNKNOWN_SIG_ALG ); - } - - /* - * issuer Name - */ - crl->issuer_raw.p = p; - - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - x509_crl_free( crl ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + ret ); - } - - if( ( ret = x509_get_name( &p, p + len, &crl->issuer ) ) != 0 ) - { - x509_crl_free( crl ); - return( ret ); - } - - crl->issuer_raw.len = p - crl->issuer_raw.p; - - /* - * thisUpdate Time - * nextUpdate Time OPTIONAL - */ - if( ( ret = x509_get_time( &p, end, &crl->this_update ) ) != 0 ) - { - x509_crl_free( crl ); - return( ret ); - } - - if( ( ret = x509_get_time( &p, end, &crl->next_update ) ) != 0 ) - { - if( ret != ( POLARSSL_ERR_X509_INVALID_DATE + - POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) && - ret != ( POLARSSL_ERR_X509_INVALID_DATE + - POLARSSL_ERR_ASN1_OUT_OF_DATA ) ) - { - x509_crl_free( crl ); - return( ret ); - } - } - - /* - * revokedCertificates SEQUENCE OF SEQUENCE { - * userCertificate CertificateSerialNumber, - * revocationDate Time, - * crlEntryExtensions Extensions OPTIONAL - * -- if present, MUST be v2 - * } OPTIONAL - */ - if( ( ret = x509_get_entries( &p, end, &crl->entry ) ) != 0 ) - { - x509_crl_free( crl ); - return( ret ); - } - - /* - * crlExtensions EXPLICIT Extensions OPTIONAL - * -- if present, MUST be v2 - */ - if( crl->version == 2 ) - { - ret = x509_get_crl_ext( &p, end, &crl->crl_ext ); - - if( ret != 0 ) - { - x509_crl_free( crl ); - return( ret ); - } - } - - if( p != end ) - { - x509_crl_free( crl ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - } - - end = crl->raw.p + crl->raw.len; - - /* - * signatureAlgorithm AlgorithmIdentifier, - * signatureValue BIT STRING - */ - if( ( ret = x509_get_alg( &p, end, &crl->sig_oid2, &sig_params2 ) ) != 0 ) - { - x509_crl_free( crl ); - return( ret ); - } - - if( crl->sig_oid1.len != crl->sig_oid2.len || - memcmp( crl->sig_oid1.p, crl->sig_oid2.p, crl->sig_oid1.len ) != 0 || - sig_params1.len != sig_params2.len || - memcmp( sig_params1.p, sig_params2.p, sig_params1.len ) != 0 ) - { - x509_crl_free( crl ); - return( POLARSSL_ERR_X509_SIG_MISMATCH ); - } - - if( ( ret = x509_get_sig( &p, end, &crl->sig ) ) != 0 ) - { - x509_crl_free( crl ); - return( ret ); - } - - if( p != end ) - { - x509_crl_free( crl ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - } - - if( buflen > 0 ) - { - crl->next = (x509_crl *) polarssl_malloc( sizeof( x509_crl ) ); - - if( crl->next == NULL ) - { - x509_crl_free( crl ); - return( POLARSSL_ERR_X509_MALLOC_FAILED ); - } - - crl = crl->next; - x509_crl_init( crl ); - - return( x509_crl_parse( crl, buf, buflen ) ); - } - - return( 0 ); -} - -#if defined(POLARSSL_FS_IO) -/* - * Load one or more CRLs and add them to the chained list - */ -int x509_crl_parse_file( x509_crl *chain, const char *path ) -{ - int ret; - size_t n; - unsigned char *buf; - - if( ( ret = x509_load_file( path, &buf, &n ) ) != 0 ) - return( ret ); - - ret = x509_crl_parse( chain, buf, n ); - - polarssl_zeroize( buf, n + 1 ); - polarssl_free( buf ); - - return( ret ); -} -#endif /* POLARSSL_FS_IO */ - -#if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \ - !defined(EFI32) -#include - -#if !defined vsnprintf -#define vsnprintf _vsnprintf -#endif // vsnprintf - -/* - * Windows _snprintf and _vsnprintf are not compatible to linux versions. - * Result value is not size of buffer needed, but -1 if no fit is possible. - * - * This fuction tries to 'fix' this by at least suggesting enlarging the - * size by 20. - */ -static int compat_snprintf( char *str, size_t size, const char *format, ... ) -{ - va_list ap; - int res = -1; - - va_start( ap, format ); - - res = vsnprintf( str, size, format, ap ); - - va_end( ap ); - - // No quick fix possible - if( res < 0 ) - return( (int) size + 20 ); - - return( res ); -} - -#define snprintf compat_snprintf -#endif /* _MSC_VER && !snprintf && !EFIX64 && !EFI32 */ - -#define POLARSSL_ERR_DEBUG_BUF_TOO_SMALL -2 - -#define SAFE_SNPRINTF() \ -{ \ - if( ret == -1 ) \ - return( -1 ); \ - \ - if( (unsigned int) ret > n ) { \ - p[n - 1] = '\0'; \ - return( POLARSSL_ERR_DEBUG_BUF_TOO_SMALL ); \ - } \ - \ - n -= (unsigned int) ret; \ - p += (unsigned int) ret; \ -} - -/* - * Return an informational string about the certificate. - */ -#define BEFORE_COLON 14 -#define BC "14" -/* - * Return an informational string about the CRL. - */ -int x509_crl_info( char *buf, size_t size, const char *prefix, - const x509_crl *crl ) -{ - int ret; - size_t n; - char *p; - const x509_crl_entry *entry; - - p = buf; - n = size; - - ret = snprintf( p, n, "%sCRL version : %d", - prefix, crl->version ); - SAFE_SNPRINTF(); - - ret = snprintf( p, n, "\n%sissuer name : ", prefix ); - SAFE_SNPRINTF(); - ret = x509_dn_gets( p, n, &crl->issuer ); - SAFE_SNPRINTF(); - - ret = snprintf( p, n, "\n%sthis update : " \ - "%04d-%02d-%02d %02d:%02d:%02d", prefix, - crl->this_update.year, crl->this_update.mon, - crl->this_update.day, crl->this_update.hour, - crl->this_update.min, crl->this_update.sec ); - SAFE_SNPRINTF(); - - ret = snprintf( p, n, "\n%snext update : " \ - "%04d-%02d-%02d %02d:%02d:%02d", prefix, - crl->next_update.year, crl->next_update.mon, - crl->next_update.day, crl->next_update.hour, - crl->next_update.min, crl->next_update.sec ); - SAFE_SNPRINTF(); - - entry = &crl->entry; - - ret = snprintf( p, n, "\n%sRevoked certificates:", - prefix ); - SAFE_SNPRINTF(); - - while( entry != NULL && entry->raw.len != 0 ) - { - ret = snprintf( p, n, "\n%sserial number: ", - prefix ); - SAFE_SNPRINTF(); - - ret = x509_serial_gets( p, n, &entry->serial ); - SAFE_SNPRINTF(); - - ret = snprintf( p, n, " revocation date: " \ - "%04d-%02d-%02d %02d:%02d:%02d", - entry->revocation_date.year, entry->revocation_date.mon, - entry->revocation_date.day, entry->revocation_date.hour, - entry->revocation_date.min, entry->revocation_date.sec ); - SAFE_SNPRINTF(); - - entry = entry->next; - } - - ret = snprintf( p, n, "\n%ssigned using : ", prefix ); - SAFE_SNPRINTF(); - - ret = x509_sig_alg_gets( p, n, &crl->sig_oid1, crl->sig_pk, crl->sig_md, - crl->sig_opts ); - SAFE_SNPRINTF(); - - ret = snprintf( p, n, "\n" ); - SAFE_SNPRINTF(); - - return( (int) ( size - n ) ); -} - -/* - * Initialize a CRL chain - */ -void x509_crl_init( x509_crl *crl ) -{ - memset( crl, 0, sizeof(x509_crl) ); -} - -/* - * Unallocate all CRL data - */ -void x509_crl_free( x509_crl *crl ) -{ - x509_crl *crl_cur = crl; - x509_crl *crl_prv; - x509_name *name_cur; - x509_name *name_prv; - x509_crl_entry *entry_cur; - x509_crl_entry *entry_prv; - - if( crl == NULL ) - return; - - do - { -#if defined(POLARSSL_X509_RSASSA_PSS_SUPPORT) - polarssl_free( crl_cur->sig_opts ); -#endif - - name_cur = crl_cur->issuer.next; - while( name_cur != NULL ) - { - name_prv = name_cur; - name_cur = name_cur->next; - polarssl_zeroize( name_prv, sizeof( x509_name ) ); - polarssl_free( name_prv ); - } - - entry_cur = crl_cur->entry.next; - while( entry_cur != NULL ) - { - entry_prv = entry_cur; - entry_cur = entry_cur->next; - polarssl_zeroize( entry_prv, sizeof( x509_crl_entry ) ); - polarssl_free( entry_prv ); - } - - if( crl_cur->raw.p != NULL ) - { - polarssl_zeroize( crl_cur->raw.p, crl_cur->raw.len ); - polarssl_free( crl_cur->raw.p ); - } - - crl_cur = crl_cur->next; - } - while( crl_cur != NULL ); - - crl_cur = crl; - do - { - crl_prv = crl_cur; - crl_cur = crl_cur->next; - - polarssl_zeroize( crl_prv, sizeof( x509_crl ) ); - if( crl_prv != crl ) - polarssl_free( crl_prv ); - } - while( crl_cur != NULL ); -} - -#endif /* POLARSSL_X509_CRL_PARSE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509_crt.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509_crt.c deleted file mode 100644 index 03cdda8..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509_crt.c +++ /dev/null @@ -1,2018 +0,0 @@ -/* - * X.509 certificate parsing and verification - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The ITU-T X.509 standard defines a certificate format for PKI. - * - * http://www.ietf.org/rfc/rfc5280.txt (Certificates and CRLs) - * http://www.ietf.org/rfc/rfc3279.txt (Alg IDs for CRLs) - * http://www.ietf.org/rfc/rfc2986.txt (CSRs, aka PKCS#10) - * - * http://www.itu.int/ITU-T/studygroups/com17/languages/X.680-0207.pdf - * http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_X509_CRT_PARSE_C) - -#include "polarssl/x509_crt.h" -#include "polarssl/oid.h" -#if defined(POLARSSL_PEM_PARSE_C) -#include "polarssl/pem.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#if defined(POLARSSL_THREADING_C) -#include "polarssl/threading.h" -#endif - -#include -#include -#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) -#include -#else -#include -#endif - -#if defined(EFIX64) || defined(EFI32) -#include -#endif - -#if defined(POLARSSL_FS_IO) -#include -#if !defined(_WIN32) || defined(EFIX64) || defined(EFI32) -#include -#include -#include -#endif -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * Version ::= INTEGER { v1(0), v2(1), v3(2) } - */ -static int x509_get_version( unsigned char **p, - const unsigned char *end, - int *ver ) -{ - int ret; - size_t len; - - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONTEXT_SPECIFIC | ASN1_CONSTRUCTED | 0 ) ) != 0 ) - { - if( ret == POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - { - *ver = 0; - return( 0 ); - } - - return( ret ); - } - - end = *p + len; - - if( ( ret = asn1_get_int( p, end, ver ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_VERSION + ret ); - - if( *p != end ) - return( POLARSSL_ERR_X509_INVALID_VERSION + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -/* - * Validity ::= SEQUENCE { - * notBefore Time, - * notAfter Time } - */ -static int x509_get_dates( unsigned char **p, - const unsigned char *end, - x509_time *from, - x509_time *to ) -{ - int ret; - size_t len; - - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_DATE + ret ); - - end = *p + len; - - if( ( ret = x509_get_time( p, end, from ) ) != 0 ) - return( ret ); - - if( ( ret = x509_get_time( p, end, to ) ) != 0 ) - return( ret ); - - if( *p != end ) - return( POLARSSL_ERR_X509_INVALID_DATE + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -/* - * X.509 v2/v3 unique identifier (not parsed) - */ -static int x509_get_uid( unsigned char **p, - const unsigned char *end, - x509_buf *uid, int n ) -{ - int ret; - - if( *p == end ) - return( 0 ); - - uid->tag = **p; - - if( ( ret = asn1_get_tag( p, end, &uid->len, - ASN1_CONTEXT_SPECIFIC | ASN1_CONSTRUCTED | n ) ) != 0 ) - { - if( ret == POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - return( 0 ); - - return( ret ); - } - - uid->p = *p; - *p += uid->len; - - return( 0 ); -} - -static int x509_get_basic_constraints( unsigned char **p, - const unsigned char *end, - int *ca_istrue, - int *max_pathlen ) -{ - int ret; - size_t len; - - /* - * BasicConstraints ::= SEQUENCE { - * cA BOOLEAN DEFAULT FALSE, - * pathLenConstraint INTEGER (0..MAX) OPTIONAL } - */ - *ca_istrue = 0; /* DEFAULT FALSE */ - *max_pathlen = 0; /* endless */ - - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - if( *p == end ) - return( 0 ); - - if( ( ret = asn1_get_bool( p, end, ca_istrue ) ) != 0 ) - { - if( ret == POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - ret = asn1_get_int( p, end, ca_istrue ); - - if( ret != 0 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - if( *ca_istrue != 0 ) - *ca_istrue = 1; - } - - if( *p == end ) - return( 0 ); - - if( ( ret = asn1_get_int( p, end, max_pathlen ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - if( *p != end ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - (*max_pathlen)++; - - return( 0 ); -} - -static int x509_get_ns_cert_type( unsigned char **p, - const unsigned char *end, - unsigned char *ns_cert_type) -{ - int ret; - x509_bitstring bs = { 0, 0, NULL }; - - if( ( ret = asn1_get_bitstring( p, end, &bs ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - if( bs.len != 1 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_INVALID_LENGTH ); - - /* Get actual bitstring */ - *ns_cert_type = *bs.p; - return( 0 ); -} - -static int x509_get_key_usage( unsigned char **p, - const unsigned char *end, - unsigned char *key_usage) -{ - int ret; - x509_bitstring bs = { 0, 0, NULL }; - - if( ( ret = asn1_get_bitstring( p, end, &bs ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - if( bs.len < 1 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_INVALID_LENGTH ); - - /* Get actual bitstring */ - *key_usage = *bs.p; - return( 0 ); -} - -/* - * ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId - * - * KeyPurposeId ::= OBJECT IDENTIFIER - */ -static int x509_get_ext_key_usage( unsigned char **p, - const unsigned char *end, - x509_sequence *ext_key_usage) -{ - int ret; - - if( ( ret = asn1_get_sequence_of( p, end, ext_key_usage, ASN1_OID ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - /* Sequence length must be >= 1 */ - if( ext_key_usage->buf.p == NULL ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_INVALID_LENGTH ); - - return( 0 ); -} - -/* - * SubjectAltName ::= GeneralNames - * - * GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName - * - * GeneralName ::= CHOICE { - * otherName [0] OtherName, - * rfc822Name [1] IA5String, - * dNSName [2] IA5String, - * x400Address [3] ORAddress, - * directoryName [4] Name, - * ediPartyName [5] EDIPartyName, - * uniformResourceIdentifier [6] IA5String, - * iPAddress [7] OCTET STRING, - * registeredID [8] OBJECT IDENTIFIER } - * - * OtherName ::= SEQUENCE { - * type-id OBJECT IDENTIFIER, - * value [0] EXPLICIT ANY DEFINED BY type-id } - * - * EDIPartyName ::= SEQUENCE { - * nameAssigner [0] DirectoryString OPTIONAL, - * partyName [1] DirectoryString } - * - * NOTE: PolarSSL only parses and uses dNSName at this point. - */ -static int x509_get_subject_alt_name( unsigned char **p, - const unsigned char *end, - x509_sequence *subject_alt_name ) -{ - int ret; - size_t len, tag_len; - asn1_buf *buf; - unsigned char tag; - asn1_sequence *cur = subject_alt_name; - - /* Get main sequence tag */ - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - if( *p + len != end ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - while( *p < end ) - { - if( ( end - *p ) < 1 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - tag = **p; - (*p)++; - if( ( ret = asn1_get_len( p, end, &tag_len ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - if( ( tag & ASN1_CONTEXT_SPECIFIC ) != ASN1_CONTEXT_SPECIFIC ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_UNEXPECTED_TAG ); - - /* Skip everything but DNS name */ - if( tag != ( ASN1_CONTEXT_SPECIFIC | 2 ) ) - { - *p += tag_len; - continue; - } - - /* Allocate and assign next pointer */ - if( cur->buf.p != NULL ) - { - cur->next = (asn1_sequence *) polarssl_malloc( - sizeof( asn1_sequence ) ); - - if( cur->next == NULL ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_MALLOC_FAILED ); - - memset( cur->next, 0, sizeof( asn1_sequence ) ); - cur = cur->next; - } - - buf = &(cur->buf); - buf->tag = tag; - buf->p = *p; - buf->len = tag_len; - *p += buf->len; - } - - /* Set final sequence entry's next pointer to NULL */ - cur->next = NULL; - - if( *p != end ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -/* - * X.509 v3 extensions - * - * TODO: Perform all of the basic constraints tests required by the RFC - * TODO: Set values for undetected extensions to a sane default? - * - */ -static int x509_get_crt_ext( unsigned char **p, - const unsigned char *end, - x509_crt *crt ) -{ - int ret; - size_t len; - unsigned char *end_ext_data, *end_ext_octet; - - if( ( ret = x509_get_ext( p, end, &crt->v3_ext, 3 ) ) != 0 ) - { - if( ret == POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - return( 0 ); - - return( ret ); - } - - while( *p < end ) - { - /* - * Extension ::= SEQUENCE { - * extnID OBJECT IDENTIFIER, - * critical BOOLEAN DEFAULT FALSE, - * extnValue OCTET STRING } - */ - x509_buf extn_oid = {0, 0, NULL}; - int is_critical = 0; /* DEFAULT FALSE */ - int ext_type = 0; - - if( ( ret = asn1_get_tag( p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - end_ext_data = *p + len; - - /* Get extension ID */ - extn_oid.tag = **p; - - if( ( ret = asn1_get_tag( p, end, &extn_oid.len, ASN1_OID ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - extn_oid.p = *p; - *p += extn_oid.len; - - if( ( end - *p ) < 1 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_OUT_OF_DATA ); - - /* Get optional critical */ - if( ( ret = asn1_get_bool( p, end_ext_data, &is_critical ) ) != 0 && - ( ret != POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - /* Data should be octet string type */ - if( ( ret = asn1_get_tag( p, end_ext_data, &len, - ASN1_OCTET_STRING ) ) != 0 ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + ret ); - - end_ext_octet = *p + len; - - if( end_ext_octet != end_ext_data ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - /* - * Detect supported extensions - */ - ret = oid_get_x509_ext_type( &extn_oid, &ext_type ); - - if( ret != 0 ) - { - /* No parser found, skip extension */ - *p = end_ext_octet; - -#if !defined(POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION) - if( is_critical ) - { - /* Data is marked as critical: fail */ - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_UNEXPECTED_TAG ); - } -#endif - continue; - } - - crt->ext_types |= ext_type; - - switch( ext_type ) - { - case EXT_BASIC_CONSTRAINTS: - /* Parse basic constraints */ - if( ( ret = x509_get_basic_constraints( p, end_ext_octet, - &crt->ca_istrue, &crt->max_pathlen ) ) != 0 ) - return( ret ); - break; - - case EXT_KEY_USAGE: - /* Parse key usage */ - if( ( ret = x509_get_key_usage( p, end_ext_octet, - &crt->key_usage ) ) != 0 ) - return( ret ); - break; - - case EXT_EXTENDED_KEY_USAGE: - /* Parse extended key usage */ - if( ( ret = x509_get_ext_key_usage( p, end_ext_octet, - &crt->ext_key_usage ) ) != 0 ) - return( ret ); - break; - - case EXT_SUBJECT_ALT_NAME: - /* Parse subject alt name */ - if( ( ret = x509_get_subject_alt_name( p, end_ext_octet, - &crt->subject_alt_names ) ) != 0 ) - return( ret ); - break; - - case EXT_NS_CERT_TYPE: - /* Parse netscape certificate type */ - if( ( ret = x509_get_ns_cert_type( p, end_ext_octet, - &crt->ns_cert_type ) ) != 0 ) - return( ret ); - break; - - default: - return( POLARSSL_ERR_X509_FEATURE_UNAVAILABLE ); - } - } - - if( *p != end ) - return( POLARSSL_ERR_X509_INVALID_EXTENSIONS + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -/* - * Parse and fill a single X.509 certificate in DER format - */ -static int x509_crt_parse_der_core( x509_crt *crt, const unsigned char *buf, - size_t buflen ) -{ - int ret; - size_t len; - unsigned char *p, *end, *crt_end; - x509_buf sig_params1, sig_params2; - - memset( &sig_params1, 0, sizeof( x509_buf ) ); - memset( &sig_params2, 0, sizeof( x509_buf ) ); - - /* - * Check for valid input - */ - if( crt == NULL || buf == NULL ) - return( POLARSSL_ERR_X509_BAD_INPUT_DATA ); - - p = (unsigned char *) polarssl_malloc( len = buflen ); - - if( p == NULL ) - return( POLARSSL_ERR_X509_MALLOC_FAILED ); - - memcpy( p, buf, buflen ); - - crt->raw.p = p; - crt->raw.len = len; - end = p + len; - - /* - * Certificate ::= SEQUENCE { - * tbsCertificate TBSCertificate, - * signatureAlgorithm AlgorithmIdentifier, - * signatureValue BIT STRING } - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - x509_crt_free( crt ); - return( POLARSSL_ERR_X509_INVALID_FORMAT ); - } - - if( len > (size_t) ( end - p ) ) - { - x509_crt_free( crt ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - } - crt_end = p + len; - - /* - * TBSCertificate ::= SEQUENCE { - */ - crt->tbs.p = p; - - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - x509_crt_free( crt ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + ret ); - } - - end = p + len; - crt->tbs.len = end - crt->tbs.p; - - /* - * Version ::= INTEGER { v1(0), v2(1), v3(2) } - * - * CertificateSerialNumber ::= INTEGER - * - * signature AlgorithmIdentifier - */ - if( ( ret = x509_get_version( &p, end, &crt->version ) ) != 0 || - ( ret = x509_get_serial( &p, end, &crt->serial ) ) != 0 || - ( ret = x509_get_alg( &p, end, &crt->sig_oid1, - &sig_params1 ) ) != 0 ) - { - x509_crt_free( crt ); - return( ret ); - } - - crt->version++; - - if( crt->version > 3 ) - { - x509_crt_free( crt ); - return( POLARSSL_ERR_X509_UNKNOWN_VERSION ); - } - - if( ( ret = x509_get_sig_alg( &crt->sig_oid1, &sig_params1, - &crt->sig_md, &crt->sig_pk, - &crt->sig_opts ) ) != 0 ) - { - x509_crt_free( crt ); - return( ret ); - } - - /* - * issuer Name - */ - crt->issuer_raw.p = p; - - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - x509_crt_free( crt ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + ret ); - } - - if( ( ret = x509_get_name( &p, p + len, &crt->issuer ) ) != 0 ) - { - x509_crt_free( crt ); - return( ret ); - } - - crt->issuer_raw.len = p - crt->issuer_raw.p; - - /* - * Validity ::= SEQUENCE { - * notBefore Time, - * notAfter Time } - * - */ - if( ( ret = x509_get_dates( &p, end, &crt->valid_from, - &crt->valid_to ) ) != 0 ) - { - x509_crt_free( crt ); - return( ret ); - } - - /* - * subject Name - */ - crt->subject_raw.p = p; - - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - x509_crt_free( crt ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + ret ); - } - - if( len && ( ret = x509_get_name( &p, p + len, &crt->subject ) ) != 0 ) - { - x509_crt_free( crt ); - return( ret ); - } - - crt->subject_raw.len = p - crt->subject_raw.p; - - /* - * SubjectPublicKeyInfo - */ - if( ( ret = pk_parse_subpubkey( &p, end, &crt->pk ) ) != 0 ) - { - x509_crt_free( crt ); - return( ret ); - } - - /* - * issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, - * -- If present, version shall be v2 or v3 - * subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, - * -- If present, version shall be v2 or v3 - * extensions [3] EXPLICIT Extensions OPTIONAL - * -- If present, version shall be v3 - */ - if( crt->version == 2 || crt->version == 3 ) - { - ret = x509_get_uid( &p, end, &crt->issuer_id, 1 ); - if( ret != 0 ) - { - x509_crt_free( crt ); - return( ret ); - } - } - - if( crt->version == 2 || crt->version == 3 ) - { - ret = x509_get_uid( &p, end, &crt->subject_id, 2 ); - if( ret != 0 ) - { - x509_crt_free( crt ); - return( ret ); - } - } - -#if !defined(POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3) - if( crt->version == 3 ) - { -#endif - ret = x509_get_crt_ext( &p, end, crt ); - if( ret != 0 ) - { - x509_crt_free( crt ); - return( ret ); - } -#if !defined(POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3) - } -#endif - - if( p != end ) - { - x509_crt_free( crt ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - } - - end = crt_end; - - /* - * } - * -- end of TBSCertificate - * - * signatureAlgorithm AlgorithmIdentifier, - * signatureValue BIT STRING - */ - if( ( ret = x509_get_alg( &p, end, &crt->sig_oid2, &sig_params2 ) ) != 0 ) - { - x509_crt_free( crt ); - return( ret ); - } - - if( crt->sig_oid1.len != crt->sig_oid2.len || - memcmp( crt->sig_oid1.p, crt->sig_oid2.p, crt->sig_oid1.len ) != 0 || - sig_params1.len != sig_params2.len || - memcmp( sig_params1.p, sig_params2.p, sig_params1.len ) != 0 ) - { - x509_crt_free( crt ); - return( POLARSSL_ERR_X509_SIG_MISMATCH ); - } - - if( ( ret = x509_get_sig( &p, end, &crt->sig ) ) != 0 ) - { - x509_crt_free( crt ); - return( ret ); - } - - if( p != end ) - { - x509_crt_free( crt ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - } - - return( 0 ); -} - -/* - * Parse one X.509 certificate in DER format from a buffer and add them to a - * chained list - */ -int x509_crt_parse_der( x509_crt *chain, const unsigned char *buf, - size_t buflen ) -{ - int ret; - x509_crt *crt = chain, *prev = NULL; - - /* - * Check for valid input - */ - if( crt == NULL || buf == NULL ) - return( POLARSSL_ERR_X509_BAD_INPUT_DATA ); - - while( crt->version != 0 && crt->next != NULL ) - { - prev = crt; - crt = crt->next; - } - - /* - * Add new certificate on the end of the chain if needed. - */ - if( crt->version != 0 && crt->next == NULL ) - { - crt->next = (x509_crt *) polarssl_malloc( sizeof( x509_crt ) ); - - if( crt->next == NULL ) - return( POLARSSL_ERR_X509_MALLOC_FAILED ); - - prev = crt; - crt = crt->next; - x509_crt_init( crt ); - } - - if( ( ret = x509_crt_parse_der_core( crt, buf, buflen ) ) != 0 ) - { - if( prev ) - prev->next = NULL; - - if( crt != chain ) - polarssl_free( crt ); - - return( ret ); - } - - return( 0 ); -} - -/* - * Parse one or more PEM certificates from a buffer and add them to the chained - * list - */ -int x509_crt_parse( x509_crt *chain, const unsigned char *buf, size_t buflen ) -{ - int success = 0, first_error = 0, total_failed = 0; - int buf_format = X509_FORMAT_DER; - - /* - * Check for valid input - */ - if( chain == NULL || buf == NULL ) - return( POLARSSL_ERR_X509_BAD_INPUT_DATA ); - - /* - * Determine buffer content. Buffer contains either one DER certificate or - * one or more PEM certificates. - */ -#if defined(POLARSSL_PEM_PARSE_C) - if( strstr( (const char *) buf, "-----BEGIN CERTIFICATE-----" ) != NULL ) - buf_format = X509_FORMAT_PEM; -#endif - - if( buf_format == X509_FORMAT_DER ) - return x509_crt_parse_der( chain, buf, buflen ); - -#if defined(POLARSSL_PEM_PARSE_C) - if( buf_format == X509_FORMAT_PEM ) - { - int ret; - pem_context pem; - - while( buflen > 0 ) - { - size_t use_len; - pem_init( &pem ); - - ret = pem_read_buffer( &pem, - "-----BEGIN CERTIFICATE-----", - "-----END CERTIFICATE-----", - buf, NULL, 0, &use_len ); - - if( ret == 0 ) - { - /* - * Was PEM encoded - */ - buflen -= use_len; - buf += use_len; - } - else if( ret == POLARSSL_ERR_PEM_BAD_INPUT_DATA ) - { - return( ret ); - } - else if( ret != POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - { - pem_free( &pem ); - - /* - * PEM header and footer were found - */ - buflen -= use_len; - buf += use_len; - - if( first_error == 0 ) - first_error = ret; - - continue; - } - else - break; - - ret = x509_crt_parse_der( chain, pem.buf, pem.buflen ); - - pem_free( &pem ); - - if( ret != 0 ) - { - /* - * Quit parsing on a memory error - */ - if( ret == POLARSSL_ERR_X509_MALLOC_FAILED ) - return( ret ); - - if( first_error == 0 ) - first_error = ret; - - total_failed++; - continue; - } - - success = 1; - } - } -#endif /* POLARSSL_PEM_PARSE_C */ - - if( success ) - return( total_failed ); - else if( first_error ) - return( first_error ); - else - return( POLARSSL_ERR_X509_CERT_UNKNOWN_FORMAT ); -} - -#if defined(POLARSSL_FS_IO) -/* - * Load one or more certificates and add them to the chained list - */ -int x509_crt_parse_file( x509_crt *chain, const char *path ) -{ - int ret; - size_t n; - unsigned char *buf; - - if( ( ret = x509_load_file( path, &buf, &n ) ) != 0 ) - return( ret ); - - ret = x509_crt_parse( chain, buf, n ); - - polarssl_zeroize( buf, n + 1 ); - polarssl_free( buf ); - - return( ret ); -} - -#if defined(POLARSSL_THREADING_PTHREAD) -static threading_mutex_t readdir_mutex = PTHREAD_MUTEX_INITIALIZER; -#endif - -int x509_crt_parse_path( x509_crt *chain, const char *path ) -{ - int ret = 0; -#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) - int w_ret; - WCHAR szDir[MAX_PATH]; - char filename[MAX_PATH]; - char *p; - int len = (int) strlen( path ); - - WIN32_FIND_DATAW file_data; - HANDLE hFind; - - if( len > MAX_PATH - 3 ) - return( POLARSSL_ERR_X509_BAD_INPUT_DATA ); - - memset( szDir, 0, sizeof(szDir) ); - memset( filename, 0, MAX_PATH ); - memcpy( filename, path, len ); - filename[len++] = '\\'; - p = filename + len; - filename[len++] = '*'; - - w_ret = MultiByteToWideChar( CP_ACP, 0, filename, len, szDir, - MAX_PATH - 3 ); - - hFind = FindFirstFileW( szDir, &file_data ); - if( hFind == INVALID_HANDLE_VALUE ) - return( POLARSSL_ERR_X509_FILE_IO_ERROR ); - - len = MAX_PATH - len; - do - { - memset( p, 0, len ); - - if( file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) - continue; - - w_ret = WideCharToMultiByte( CP_ACP, 0, file_data.cFileName, - lstrlenW( file_data.cFileName ), - p, len - 1, - NULL, NULL ); - - w_ret = x509_crt_parse_file( chain, filename ); - if( w_ret < 0 ) - ret++; - else - ret += w_ret; - } - while( FindNextFileW( hFind, &file_data ) != 0 ); - - if( GetLastError() != ERROR_NO_MORE_FILES ) - ret = POLARSSL_ERR_X509_FILE_IO_ERROR; - - FindClose( hFind ); -#else /* _WIN32 */ - int t_ret; - struct stat sb; - struct dirent *entry; - char entry_name[255]; - DIR *dir = opendir( path ); - - if( dir == NULL ) - return( POLARSSL_ERR_X509_FILE_IO_ERROR ); - -#if defined(POLARSSL_THREADING_PTHREAD) - if( ( ret = polarssl_mutex_lock( &readdir_mutex ) ) != 0 ) - return( ret ); -#endif - - while( ( entry = readdir( dir ) ) != NULL ) - { - snprintf( entry_name, sizeof entry_name, "%s/%s", path, entry->d_name ); - - if( stat( entry_name, &sb ) == -1 ) - { - closedir( dir ); - ret = POLARSSL_ERR_X509_FILE_IO_ERROR; - goto cleanup; - } - - if( !S_ISREG( sb.st_mode ) ) - continue; - - // Ignore parse errors - // - t_ret = x509_crt_parse_file( chain, entry_name ); - if( t_ret < 0 ) - ret++; - else - ret += t_ret; - } - closedir( dir ); - -cleanup: -#if defined(POLARSSL_THREADING_PTHREAD) - if( polarssl_mutex_unlock( &readdir_mutex ) != 0 ) - ret = POLARSSL_ERR_THREADING_MUTEX_ERROR; -#endif - -#endif /* _WIN32 */ - - return( ret ); -} -#endif /* POLARSSL_FS_IO */ - -#if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \ - !defined(EFI32) -#include - -#if !defined vsnprintf -#define vsnprintf _vsnprintf -#endif // vsnprintf - -/* - * Windows _snprintf and _vsnprintf are not compatible to linux versions. - * Result value is not size of buffer needed, but -1 if no fit is possible. - * - * This fuction tries to 'fix' this by at least suggesting enlarging the - * size by 20. - */ -static int compat_snprintf( char *str, size_t size, const char *format, ... ) -{ - va_list ap; - int res = -1; - - va_start( ap, format ); - - res = vsnprintf( str, size, format, ap ); - - va_end( ap ); - - // No quick fix possible - if( res < 0 ) - return( (int) size + 20 ); - - return( res ); -} - -#define snprintf compat_snprintf -#endif /* _MSC_VER && !snprintf && !EFIX64 && !EFI32 */ - -#define POLARSSL_ERR_DEBUG_BUF_TOO_SMALL -2 - -#define SAFE_SNPRINTF() \ -{ \ - if( ret == -1 ) \ - return( -1 ); \ - \ - if( (unsigned int) ret > n ) { \ - p[n - 1] = '\0'; \ - return( POLARSSL_ERR_DEBUG_BUF_TOO_SMALL ); \ - } \ - \ - n -= (unsigned int) ret; \ - p += (unsigned int) ret; \ -} - -static int x509_info_subject_alt_name( char **buf, size_t *size, - const x509_sequence *subject_alt_name ) -{ - size_t i; - size_t n = *size; - char *p = *buf; - const x509_sequence *cur = subject_alt_name; - const char *sep = ""; - size_t sep_len = 0; - - while( cur != NULL ) - { - if( cur->buf.len + sep_len >= n ) - { - *p = '\0'; - return( POLARSSL_ERR_DEBUG_BUF_TOO_SMALL ); - } - - n -= cur->buf.len + sep_len; - for( i = 0; i < sep_len; i++ ) - *p++ = sep[i]; - for( i = 0; i < cur->buf.len; i++ ) - *p++ = cur->buf.p[i]; - - sep = ", "; - sep_len = 2; - - cur = cur->next; - } - - *p = '\0'; - - *size = n; - *buf = p; - - return( 0 ); -} - -#define PRINT_ITEM(i) \ - { \ - ret = snprintf( p, n, "%s" i, sep ); \ - SAFE_SNPRINTF(); \ - sep = ", "; \ - } - -#define CERT_TYPE(type,name) \ - if( ns_cert_type & type ) \ - PRINT_ITEM( name ); - -static int x509_info_cert_type( char **buf, size_t *size, - unsigned char ns_cert_type ) -{ - int ret; - size_t n = *size; - char *p = *buf; - const char *sep = ""; - - CERT_TYPE( NS_CERT_TYPE_SSL_CLIENT, "SSL Client" ); - CERT_TYPE( NS_CERT_TYPE_SSL_SERVER, "SSL Server" ); - CERT_TYPE( NS_CERT_TYPE_EMAIL, "Email" ); - CERT_TYPE( NS_CERT_TYPE_OBJECT_SIGNING, "Object Signing" ); - CERT_TYPE( NS_CERT_TYPE_RESERVED, "Reserved" ); - CERT_TYPE( NS_CERT_TYPE_SSL_CA, "SSL CA" ); - CERT_TYPE( NS_CERT_TYPE_EMAIL_CA, "Email CA" ); - CERT_TYPE( NS_CERT_TYPE_OBJECT_SIGNING_CA, "Object Signing CA" ); - - *size = n; - *buf = p; - - return( 0 ); -} - -#define KEY_USAGE(code,name) \ - if( key_usage & code ) \ - PRINT_ITEM( name ); - -static int x509_info_key_usage( char **buf, size_t *size, - unsigned char key_usage ) -{ - int ret; - size_t n = *size; - char *p = *buf; - const char *sep = ""; - - KEY_USAGE( KU_DIGITAL_SIGNATURE, "Digital Signature" ); - KEY_USAGE( KU_NON_REPUDIATION, "Non Repudiation" ); - KEY_USAGE( KU_KEY_ENCIPHERMENT, "Key Encipherment" ); - KEY_USAGE( KU_DATA_ENCIPHERMENT, "Data Encipherment" ); - KEY_USAGE( KU_KEY_AGREEMENT, "Key Agreement" ); - KEY_USAGE( KU_KEY_CERT_SIGN, "Key Cert Sign" ); - KEY_USAGE( KU_CRL_SIGN, "CRL Sign" ); - - *size = n; - *buf = p; - - return( 0 ); -} - -static int x509_info_ext_key_usage( char **buf, size_t *size, - const x509_sequence *extended_key_usage ) -{ - int ret; - const char *desc; - size_t n = *size; - char *p = *buf; - const x509_sequence *cur = extended_key_usage; - const char *sep = ""; - - while( cur != NULL ) - { - if( oid_get_extended_key_usage( &cur->buf, &desc ) != 0 ) - desc = "???"; - - ret = snprintf( p, n, "%s%s", sep, desc ); - SAFE_SNPRINTF(); - - sep = ", "; - - cur = cur->next; - } - - *size = n; - *buf = p; - - return( 0 ); -} - -/* - * Return an informational string about the certificate. - */ -#define BEFORE_COLON 18 -#define BC "18" -int x509_crt_info( char *buf, size_t size, const char *prefix, - const x509_crt *crt ) -{ - int ret; - size_t n; - char *p; - char key_size_str[BEFORE_COLON]; - - p = buf; - n = size; - - ret = snprintf( p, n, "%scert. version : %d\n", - prefix, crt->version ); - SAFE_SNPRINTF(); - ret = snprintf( p, n, "%sserial number : ", - prefix ); - SAFE_SNPRINTF(); - - ret = x509_serial_gets( p, n, &crt->serial ); - SAFE_SNPRINTF(); - - ret = snprintf( p, n, "\n%sissuer name : ", prefix ); - SAFE_SNPRINTF(); - ret = x509_dn_gets( p, n, &crt->issuer ); - SAFE_SNPRINTF(); - - ret = snprintf( p, n, "\n%ssubject name : ", prefix ); - SAFE_SNPRINTF(); - ret = x509_dn_gets( p, n, &crt->subject ); - SAFE_SNPRINTF(); - - ret = snprintf( p, n, "\n%sissued on : " \ - "%04d-%02d-%02d %02d:%02d:%02d", prefix, - crt->valid_from.year, crt->valid_from.mon, - crt->valid_from.day, crt->valid_from.hour, - crt->valid_from.min, crt->valid_from.sec ); - SAFE_SNPRINTF(); - - ret = snprintf( p, n, "\n%sexpires on : " \ - "%04d-%02d-%02d %02d:%02d:%02d", prefix, - crt->valid_to.year, crt->valid_to.mon, - crt->valid_to.day, crt->valid_to.hour, - crt->valid_to.min, crt->valid_to.sec ); - SAFE_SNPRINTF(); - - ret = snprintf( p, n, "\n%ssigned using : ", prefix ); - SAFE_SNPRINTF(); - - ret = x509_sig_alg_gets( p, n, &crt->sig_oid1, crt->sig_pk, - crt->sig_md, crt->sig_opts ); - SAFE_SNPRINTF(); - - /* Key size */ - if( ( ret = x509_key_size_helper( key_size_str, BEFORE_COLON, - pk_get_name( &crt->pk ) ) ) != 0 ) - { - return( ret ); - } - - ret = snprintf( p, n, "\n%s%-" BC "s: %d bits", prefix, key_size_str, - (int) pk_get_size( &crt->pk ) ); - SAFE_SNPRINTF(); - - /* - * Optional extensions - */ - - if( crt->ext_types & EXT_BASIC_CONSTRAINTS ) - { - ret = snprintf( p, n, "\n%sbasic constraints : CA=%s", prefix, - crt->ca_istrue ? "true" : "false" ); - SAFE_SNPRINTF(); - - if( crt->max_pathlen > 0 ) - { - ret = snprintf( p, n, ", max_pathlen=%d", crt->max_pathlen - 1 ); - SAFE_SNPRINTF(); - } - } - - if( crt->ext_types & EXT_SUBJECT_ALT_NAME ) - { - ret = snprintf( p, n, "\n%ssubject alt name : ", prefix ); - SAFE_SNPRINTF(); - - if( ( ret = x509_info_subject_alt_name( &p, &n, - &crt->subject_alt_names ) ) != 0 ) - return( ret ); - } - - if( crt->ext_types & EXT_NS_CERT_TYPE ) - { - ret = snprintf( p, n, "\n%scert. type : ", prefix ); - SAFE_SNPRINTF(); - - if( ( ret = x509_info_cert_type( &p, &n, crt->ns_cert_type ) ) != 0 ) - return( ret ); - } - - if( crt->ext_types & EXT_KEY_USAGE ) - { - ret = snprintf( p, n, "\n%skey usage : ", prefix ); - SAFE_SNPRINTF(); - - if( ( ret = x509_info_key_usage( &p, &n, crt->key_usage ) ) != 0 ) - return( ret ); - } - - if( crt->ext_types & EXT_EXTENDED_KEY_USAGE ) - { - ret = snprintf( p, n, "\n%sext key usage : ", prefix ); - SAFE_SNPRINTF(); - - if( ( ret = x509_info_ext_key_usage( &p, &n, - &crt->ext_key_usage ) ) != 0 ) - return( ret ); - } - - ret = snprintf( p, n, "\n" ); - SAFE_SNPRINTF(); - - return( (int) ( size - n ) ); -} - -#if defined(POLARSSL_X509_CHECK_KEY_USAGE) -int x509_crt_check_key_usage( const x509_crt *crt, int usage ) -{ - if( ( crt->ext_types & EXT_KEY_USAGE ) != 0 && - ( crt->key_usage & usage ) != usage ) - return( POLARSSL_ERR_X509_BAD_INPUT_DATA ); - - return( 0 ); -} -#endif - -#if defined(POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE) -int x509_crt_check_extended_key_usage( const x509_crt *crt, - const char *usage_oid, - size_t usage_len ) -{ - const x509_sequence *cur; - - /* Extension is not mandatory, absent means no restriction */ - if( ( crt->ext_types & EXT_EXTENDED_KEY_USAGE ) == 0 ) - return( 0 ); - - /* - * Look for the requested usage (or wildcard ANY) in our list - */ - for( cur = &crt->ext_key_usage; cur != NULL; cur = cur->next ) - { - const x509_buf *cur_oid = &cur->buf; - - if( cur_oid->len == usage_len && - memcmp( cur_oid->p, usage_oid, usage_len ) == 0 ) - { - return( 0 ); - } - - if( OID_CMP( OID_ANY_EXTENDED_KEY_USAGE, cur_oid ) ) - return( 0 ); - } - - return( POLARSSL_ERR_X509_BAD_INPUT_DATA ); -} -#endif /* POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE */ - -#if defined(POLARSSL_X509_CRL_PARSE_C) -/* - * Return 1 if the certificate is revoked, or 0 otherwise. - */ -int x509_crt_revoked( const x509_crt *crt, const x509_crl *crl ) -{ - const x509_crl_entry *cur = &crl->entry; - - while( cur != NULL && cur->serial.len != 0 ) - { - if( crt->serial.len == cur->serial.len && - memcmp( crt->serial.p, cur->serial.p, crt->serial.len ) == 0 ) - { - if( x509_time_expired( &cur->revocation_date ) ) - return( 1 ); - } - - cur = cur->next; - } - - return( 0 ); -} - -/* - * Check that the given certificate is valid according to the CRL. - */ -static int x509_crt_verifycrl( x509_crt *crt, x509_crt *ca, - x509_crl *crl_list) -{ - int flags = 0; - unsigned char hash[POLARSSL_MD_MAX_SIZE]; - const md_info_t *md_info; - - if( ca == NULL ) - return( flags ); - - /* - * TODO: What happens if no CRL is present? - * Suggestion: Revocation state should be unknown if no CRL is present. - * For backwards compatibility this is not yet implemented. - */ - - while( crl_list != NULL ) - { - if( crl_list->version == 0 || - crl_list->issuer_raw.len != ca->subject_raw.len || - memcmp( crl_list->issuer_raw.p, ca->subject_raw.p, - crl_list->issuer_raw.len ) != 0 ) - { - crl_list = crl_list->next; - continue; - } - - /* - * Check if the CA is configured to sign CRLs - */ -#if defined(POLARSSL_X509_CHECK_KEY_USAGE) - if( x509_crt_check_key_usage( ca, KU_CRL_SIGN ) != 0 ) - { - flags |= BADCRL_NOT_TRUSTED; - break; - } -#endif - - /* - * Check if CRL is correctly signed by the trusted CA - */ - md_info = md_info_from_type( crl_list->sig_md ); - if( md_info == NULL ) - { - /* - * Cannot check 'unknown' hash - */ - flags |= BADCRL_NOT_TRUSTED; - break; - } - - md( md_info, crl_list->tbs.p, crl_list->tbs.len, hash ); - - if( pk_verify_ext( crl_list->sig_pk, crl_list->sig_opts, &ca->pk, - crl_list->sig_md, hash, md_info->size, - crl_list->sig.p, crl_list->sig.len ) != 0 ) - { - flags |= BADCRL_NOT_TRUSTED; - break; - } - - /* - * Check for validity of CRL (Do not drop out) - */ - if( x509_time_expired( &crl_list->next_update ) ) - flags |= BADCRL_EXPIRED; - - if( x509_time_future( &crl_list->this_update ) ) - flags |= BADCRL_FUTURE; - - /* - * Check if certificate is revoked - */ - if( x509_crt_revoked( crt, crl_list ) ) - { - flags |= BADCERT_REVOKED; - break; - } - - crl_list = crl_list->next; - } - return( flags ); -} -#endif /* POLARSSL_X509_CRL_PARSE_C */ - -// Equal == 0, inequal == 1 -static int x509_name_cmp( const void *s1, const void *s2, size_t len ) -{ - size_t i; - unsigned char diff; - const unsigned char *n1 = s1, *n2 = s2; - - for( i = 0; i < len; i++ ) - { - diff = n1[i] ^ n2[i]; - - if( diff == 0 ) - continue; - - if( diff == 32 && - ( ( n1[i] >= 'a' && n1[i] <= 'z' ) || - ( n1[i] >= 'A' && n1[i] <= 'Z' ) ) ) - { - continue; - } - - return( 1 ); - } - - return( 0 ); -} - -static int x509_wildcard_verify( const char *cn, x509_buf *name ) -{ - size_t i; - size_t cn_idx = 0, cn_len = strlen( cn ); - - if( name->len < 3 || name->p[0] != '*' || name->p[1] != '.' ) - return( 0 ); - - for( i = 0; i < cn_len; ++i ) - { - if( cn[i] == '.' ) - { - cn_idx = i; - break; - } - } - - if( cn_idx == 0 ) - return( 0 ); - - if( cn_len - cn_idx == name->len - 1 && - x509_name_cmp( name->p + 1, cn + cn_idx, name->len - 1 ) == 0 ) - { - return( 1 ); - } - - return( 0 ); -} - -/* - * Check if 'parent' is a suitable parent (signing CA) for 'child'. - * Return 0 if yes, -1 if not. - * - * top means parent is a locally-trusted certificate - * bottom means child is the end entity cert - */ -static int x509_crt_check_parent( const x509_crt *child, - const x509_crt *parent, - int top, int bottom ) -{ - int need_ca_bit; - - /* Parent must be the issuer */ - if( child->issuer_raw.len != parent->subject_raw.len || - memcmp( child->issuer_raw.p, parent->subject_raw.p, - child->issuer_raw.len ) != 0 ) - { - return( -1 ); - } - - /* Parent must have the basicConstraints CA bit set as a general rule */ - need_ca_bit = 1; - - /* Exception: v1/v2 certificates that are locally trusted. */ - if( top && parent->version < 3 ) - need_ca_bit = 0; - - /* Exception: self-signed end-entity certs that are locally trusted. */ - if( top && bottom && - child->raw.len == parent->raw.len && - memcmp( child->raw.p, parent->raw.p, child->raw.len ) == 0 ) - { - need_ca_bit = 0; - } - - if( need_ca_bit && ! parent->ca_istrue ) - return( -1 ); - -#if defined(POLARSSL_X509_CHECK_KEY_USAGE) - if( need_ca_bit && - x509_crt_check_key_usage( parent, KU_KEY_CERT_SIGN ) != 0 ) - { - return( -1 ); - } -#endif - - return( 0 ); -} - -static int x509_crt_verify_top( - x509_crt *child, x509_crt *trust_ca, - x509_crl *ca_crl, int path_cnt, int *flags, - int (*f_vrfy)(void *, x509_crt *, int, int *), - void *p_vrfy ) -{ - int ret; - int ca_flags = 0, check_path_cnt = path_cnt + 1; - unsigned char hash[POLARSSL_MD_MAX_SIZE]; - const md_info_t *md_info; - - if( x509_time_expired( &child->valid_to ) ) - *flags |= BADCERT_EXPIRED; - - if( x509_time_future( &child->valid_from ) ) - *flags |= BADCERT_FUTURE; - - /* - * Child is the top of the chain. Check against the trust_ca list. - */ - *flags |= BADCERT_NOT_TRUSTED; - - md_info = md_info_from_type( child->sig_md ); - if( md_info == NULL ) - { - /* - * Cannot check 'unknown', no need to try any CA - */ - trust_ca = NULL; - } - else - md( md_info, child->tbs.p, child->tbs.len, hash ); - - for( /* trust_ca */ ; trust_ca != NULL; trust_ca = trust_ca->next ) - { - if( x509_crt_check_parent( child, trust_ca, 1, path_cnt == 0 ) != 0 ) - continue; - - /* - * Reduce path_len to check against if top of the chain is - * the same as the trusted CA - */ - if( child->subject_raw.len == trust_ca->subject_raw.len && - memcmp( child->subject_raw.p, trust_ca->subject_raw.p, - child->issuer_raw.len ) == 0 ) - { - check_path_cnt--; - } - - if( trust_ca->max_pathlen > 0 && - trust_ca->max_pathlen < check_path_cnt ) - { - continue; - } - - if( pk_verify_ext( child->sig_pk, child->sig_opts, &trust_ca->pk, - child->sig_md, hash, md_info->size, - child->sig.p, child->sig.len ) != 0 ) - { - continue; - } - - /* - * Top of chain is signed by a trusted CA - */ - *flags &= ~BADCERT_NOT_TRUSTED; - break; - } - - /* - * If top of chain is not the same as the trusted CA send a verify request - * to the callback for any issues with validity and CRL presence for the - * trusted CA certificate. - */ - if( trust_ca != NULL && - ( child->subject_raw.len != trust_ca->subject_raw.len || - memcmp( child->subject_raw.p, trust_ca->subject_raw.p, - child->issuer_raw.len ) != 0 ) ) - { -#if defined(POLARSSL_X509_CRL_PARSE_C) - /* Check trusted CA's CRL for the chain's top crt */ - *flags |= x509_crt_verifycrl( child, trust_ca, ca_crl ); -#else - ((void) ca_crl); -#endif - - if( x509_time_expired( &trust_ca->valid_to ) ) - ca_flags |= BADCERT_EXPIRED; - - if( x509_time_future( &trust_ca->valid_from ) ) - ca_flags |= BADCERT_FUTURE; - - if( NULL != f_vrfy ) - { - if( ( ret = f_vrfy( p_vrfy, trust_ca, path_cnt + 1, - &ca_flags ) ) != 0 ) - { - return( ret ); - } - } - } - - /* Call callback on top cert */ - if( NULL != f_vrfy ) - { - if( ( ret = f_vrfy( p_vrfy, child, path_cnt, flags ) ) != 0 ) - return( ret ); - } - - *flags |= ca_flags; - - return( 0 ); -} - -static int x509_crt_verify_child( - x509_crt *child, x509_crt *parent, x509_crt *trust_ca, - x509_crl *ca_crl, int path_cnt, int *flags, - int (*f_vrfy)(void *, x509_crt *, int, int *), - void *p_vrfy ) -{ - int ret; - int parent_flags = 0; - unsigned char hash[POLARSSL_MD_MAX_SIZE]; - x509_crt *grandparent; - const md_info_t *md_info; - - if( x509_time_expired( &child->valid_to ) ) - *flags |= BADCERT_EXPIRED; - - if( x509_time_future( &child->valid_from ) ) - *flags |= BADCERT_FUTURE; - - md_info = md_info_from_type( child->sig_md ); - if( md_info == NULL ) - { - /* - * Cannot check 'unknown' hash - */ - *flags |= BADCERT_NOT_TRUSTED; - } - else - { - md( md_info, child->tbs.p, child->tbs.len, hash ); - - if( pk_verify_ext( child->sig_pk, child->sig_opts, &parent->pk, - child->sig_md, hash, md_info->size, - child->sig.p, child->sig.len ) != 0 ) - { - *flags |= BADCERT_NOT_TRUSTED; - } - } - -#if defined(POLARSSL_X509_CRL_PARSE_C) - /* Check trusted CA's CRL for the given crt */ - *flags |= x509_crt_verifycrl(child, parent, ca_crl); -#endif - - /* Look for a grandparent upwards the chain */ - for( grandparent = parent->next; - grandparent != NULL; - grandparent = grandparent->next ) - { - if( x509_crt_check_parent( parent, grandparent, - 0, path_cnt == 0 ) == 0 ) - break; - } - - /* Is our parent part of the chain or at the top? */ - if( grandparent != NULL ) - { - ret = x509_crt_verify_child( parent, grandparent, trust_ca, ca_crl, - path_cnt + 1, &parent_flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); - } - else - { - ret = x509_crt_verify_top( parent, trust_ca, ca_crl, - path_cnt + 1, &parent_flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); - } - - /* child is verified to be a child of the parent, call verify callback */ - if( NULL != f_vrfy ) - if( ( ret = f_vrfy( p_vrfy, child, path_cnt, flags ) ) != 0 ) - return( ret ); - - *flags |= parent_flags; - - return( 0 ); -} - -/* - * Verify the certificate validity - */ -int x509_crt_verify( x509_crt *crt, - x509_crt *trust_ca, - x509_crl *ca_crl, - const char *cn, int *flags, - int (*f_vrfy)(void *, x509_crt *, int, int *), - void *p_vrfy ) -{ - size_t cn_len; - int ret; - int pathlen = 0; - x509_crt *parent; - x509_name *name; - x509_sequence *cur = NULL; - - *flags = 0; - - if( cn != NULL ) - { - name = &crt->subject; - cn_len = strlen( cn ); - - if( crt->ext_types & EXT_SUBJECT_ALT_NAME ) - { - cur = &crt->subject_alt_names; - - while( cur != NULL ) - { - if( cur->buf.len == cn_len && - x509_name_cmp( cn, cur->buf.p, cn_len ) == 0 ) - break; - - if( cur->buf.len > 2 && - memcmp( cur->buf.p, "*.", 2 ) == 0 && - x509_wildcard_verify( cn, &cur->buf ) ) - break; - - cur = cur->next; - } - - if( cur == NULL ) - *flags |= BADCERT_CN_MISMATCH; - } - else - { - while( name != NULL ) - { - if( OID_CMP( OID_AT_CN, &name->oid ) ) - { - if( name->val.len == cn_len && - x509_name_cmp( name->val.p, cn, cn_len ) == 0 ) - break; - - if( name->val.len > 2 && - memcmp( name->val.p, "*.", 2 ) == 0 && - x509_wildcard_verify( cn, &name->val ) ) - break; - } - - name = name->next; - } - - if( name == NULL ) - *flags |= BADCERT_CN_MISMATCH; - } - } - - /* Look for a parent upwards the chain */ - for( parent = crt->next; parent != NULL; parent = parent->next ) - { - if( x509_crt_check_parent( crt, parent, 0, pathlen == 0 ) == 0 ) - break; - } - - /* Are we part of the chain or at the top? */ - if( parent != NULL ) - { - ret = x509_crt_verify_child( crt, parent, trust_ca, ca_crl, - pathlen, flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); - } - else - { - ret = x509_crt_verify_top( crt, trust_ca, ca_crl, - pathlen, flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); - } - - if( *flags != 0 ) - return( POLARSSL_ERR_X509_CERT_VERIFY_FAILED ); - - return( 0 ); -} - -/* - * Initialize a certificate chain - */ -void x509_crt_init( x509_crt *crt ) -{ - memset( crt, 0, sizeof(x509_crt) ); -} - -/* - * Unallocate all certificate data - */ -void x509_crt_free( x509_crt *crt ) -{ - x509_crt *cert_cur = crt; - x509_crt *cert_prv; - x509_name *name_cur; - x509_name *name_prv; - x509_sequence *seq_cur; - x509_sequence *seq_prv; - - if( crt == NULL ) - return; - - do - { - pk_free( &cert_cur->pk ); - -#if defined(POLARSSL_X509_RSASSA_PSS_SUPPORT) - polarssl_free( cert_cur->sig_opts ); -#endif - - name_cur = cert_cur->issuer.next; - while( name_cur != NULL ) - { - name_prv = name_cur; - name_cur = name_cur->next; - polarssl_zeroize( name_prv, sizeof( x509_name ) ); - polarssl_free( name_prv ); - } - - name_cur = cert_cur->subject.next; - while( name_cur != NULL ) - { - name_prv = name_cur; - name_cur = name_cur->next; - polarssl_zeroize( name_prv, sizeof( x509_name ) ); - polarssl_free( name_prv ); - } - - seq_cur = cert_cur->ext_key_usage.next; - while( seq_cur != NULL ) - { - seq_prv = seq_cur; - seq_cur = seq_cur->next; - polarssl_zeroize( seq_prv, sizeof( x509_sequence ) ); - polarssl_free( seq_prv ); - } - - seq_cur = cert_cur->subject_alt_names.next; - while( seq_cur != NULL ) - { - seq_prv = seq_cur; - seq_cur = seq_cur->next; - polarssl_zeroize( seq_prv, sizeof( x509_sequence ) ); - polarssl_free( seq_prv ); - } - - if( cert_cur->raw.p != NULL ) - { - polarssl_zeroize( cert_cur->raw.p, cert_cur->raw.len ); - polarssl_free( cert_cur->raw.p ); - } - - cert_cur = cert_cur->next; - } - while( cert_cur != NULL ); - - cert_cur = crt; - do - { - cert_prv = cert_cur; - cert_cur = cert_cur->next; - - polarssl_zeroize( cert_prv, sizeof( x509_crt ) ); - if( cert_prv != crt ) - polarssl_free( cert_prv ); - } - while( cert_cur != NULL ); -} - -#endif /* POLARSSL_X509_CRT_PARSE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509_csr.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509_csr.c deleted file mode 100644 index 0b4f771..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509_csr.c +++ /dev/null @@ -1,465 +0,0 @@ -/* - * X.509 Certificate Signing Request (CSR) parsing - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * The ITU-T X.509 standard defines a certificate format for PKI. - * - * http://www.ietf.org/rfc/rfc5280.txt (Certificates and CRLs) - * http://www.ietf.org/rfc/rfc3279.txt (Alg IDs for CRLs) - * http://www.ietf.org/rfc/rfc2986.txt (CSRs, aka PKCS#10) - * - * http://www.itu.int/ITU-T/studygroups/com17/languages/X.680-0207.pdf - * http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_X509_CSR_PARSE_C) - -#include "polarssl/x509_csr.h" -#include "polarssl/oid.h" -#if defined(POLARSSL_PEM_PARSE_C) -#include "polarssl/pem.h" -#endif - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_malloc malloc -#define polarssl_free free -#endif - -#include -#include - -#if defined(POLARSSL_FS_IO) || defined(EFIX64) || defined(EFI32) -#include -#endif - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * Version ::= INTEGER { v1(0) } - */ -static int x509_csr_get_version( unsigned char **p, - const unsigned char *end, - int *ver ) -{ - int ret; - - if( ( ret = asn1_get_int( p, end, ver ) ) != 0 ) - { - if( ret == POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) - { - *ver = 0; - return( 0 ); - } - - return( POLARSSL_ERR_X509_INVALID_VERSION + ret ); - } - - return( 0 ); -} - -/* - * Parse a CSR in DER format - */ -int x509_csr_parse_der( x509_csr *csr, - const unsigned char *buf, size_t buflen ) -{ - int ret; - size_t len; - unsigned char *p, *end; - x509_buf sig_params; - - memset( &sig_params, 0, sizeof( x509_buf ) ); - - /* - * Check for valid input - */ - if( csr == NULL || buf == NULL ) - return( POLARSSL_ERR_X509_BAD_INPUT_DATA ); - - x509_csr_init( csr ); - - /* - * first copy the raw DER data - */ - p = (unsigned char *) polarssl_malloc( len = buflen ); - - if( p == NULL ) - return( POLARSSL_ERR_X509_MALLOC_FAILED ); - - memcpy( p, buf, buflen ); - - csr->raw.p = p; - csr->raw.len = len; - end = p + len; - - /* - * CertificationRequest ::= SEQUENCE { - * certificationRequestInfo CertificationRequestInfo, - * signatureAlgorithm AlgorithmIdentifier, - * signature BIT STRING - * } - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - x509_csr_free( csr ); - return( POLARSSL_ERR_X509_INVALID_FORMAT ); - } - - if( len != (size_t) ( end - p ) ) - { - x509_csr_free( csr ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - } - - /* - * CertificationRequestInfo ::= SEQUENCE { - */ - csr->cri.p = p; - - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - x509_csr_free( csr ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + ret ); - } - - end = p + len; - csr->cri.len = end - csr->cri.p; - - /* - * Version ::= INTEGER { v1(0) } - */ - if( ( ret = x509_csr_get_version( &p, end, &csr->version ) ) != 0 ) - { - x509_csr_free( csr ); - return( ret ); - } - - csr->version++; - - if( csr->version != 1 ) - { - x509_csr_free( csr ); - return( POLARSSL_ERR_X509_UNKNOWN_VERSION ); - } - - /* - * subject Name - */ - csr->subject_raw.p = p; - - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_SEQUENCE ) ) != 0 ) - { - x509_csr_free( csr ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + ret ); - } - - if( ( ret = x509_get_name( &p, p + len, &csr->subject ) ) != 0 ) - { - x509_csr_free( csr ); - return( ret ); - } - - csr->subject_raw.len = p - csr->subject_raw.p; - - /* - * subjectPKInfo SubjectPublicKeyInfo - */ - if( ( ret = pk_parse_subpubkey( &p, end, &csr->pk ) ) != 0 ) - { - x509_csr_free( csr ); - return( ret ); - } - - /* - * attributes [0] Attributes - */ - if( ( ret = asn1_get_tag( &p, end, &len, - ASN1_CONSTRUCTED | ASN1_CONTEXT_SPECIFIC ) ) != 0 ) - { - x509_csr_free( csr ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + ret ); - } - // TODO Parse Attributes / extension requests - - p += len; - - end = csr->raw.p + csr->raw.len; - - /* - * signatureAlgorithm AlgorithmIdentifier, - * signature BIT STRING - */ - if( ( ret = x509_get_alg( &p, end, &csr->sig_oid, &sig_params ) ) != 0 ) - { - x509_csr_free( csr ); - return( ret ); - } - - if( ( ret = x509_get_sig_alg( &csr->sig_oid, &sig_params, - &csr->sig_md, &csr->sig_pk, - &csr->sig_opts ) ) != 0 ) - { - x509_csr_free( csr ); - return( POLARSSL_ERR_X509_UNKNOWN_SIG_ALG ); - } - - if( ( ret = x509_get_sig( &p, end, &csr->sig ) ) != 0 ) - { - x509_csr_free( csr ); - return( ret ); - } - - if( p != end ) - { - x509_csr_free( csr ); - return( POLARSSL_ERR_X509_INVALID_FORMAT + - POLARSSL_ERR_ASN1_LENGTH_MISMATCH ); - } - - return( 0 ); -} - -/* - * Parse a CSR, allowing for PEM or raw DER encoding - */ -int x509_csr_parse( x509_csr *csr, const unsigned char *buf, size_t buflen ) -{ - int ret; -#if defined(POLARSSL_PEM_PARSE_C) - size_t use_len; - pem_context pem; -#endif - - /* - * Check for valid input - */ - if( csr == NULL || buf == NULL ) - return( POLARSSL_ERR_X509_BAD_INPUT_DATA ); - -#if defined(POLARSSL_PEM_PARSE_C) - pem_init( &pem ); - ret = pem_read_buffer( &pem, - "-----BEGIN CERTIFICATE REQUEST-----", - "-----END CERTIFICATE REQUEST-----", - buf, NULL, 0, &use_len ); - - if( ret == 0 ) - { - /* - * Was PEM encoded, parse the result - */ - if( ( ret = x509_csr_parse_der( csr, pem.buf, pem.buflen ) ) != 0 ) - return( ret ); - - pem_free( &pem ); - return( 0 ); - } - else if( ret != POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - { - pem_free( &pem ); - return( ret ); - } - else -#endif /* POLARSSL_PEM_PARSE_C */ - return( x509_csr_parse_der( csr, buf, buflen ) ); -} - -#if defined(POLARSSL_FS_IO) -/* - * Load a CSR into the structure - */ -int x509_csr_parse_file( x509_csr *csr, const char *path ) -{ - int ret; - size_t n; - unsigned char *buf; - - if( ( ret = x509_load_file( path, &buf, &n ) ) != 0 ) - return( ret ); - - ret = x509_csr_parse( csr, buf, n ); - - polarssl_zeroize( buf, n + 1 ); - polarssl_free( buf ); - - return( ret ); -} -#endif /* POLARSSL_FS_IO */ - -#if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \ - !defined(EFI32) -#include - -#if !defined vsnprintf -#define vsnprintf _vsnprintf -#endif // vsnprintf - -/* - * Windows _snprintf and _vsnprintf are not compatible to linux versions. - * Result value is not size of buffer needed, but -1 if no fit is possible. - * - * This fuction tries to 'fix' this by at least suggesting enlarging the - * size by 20. - */ -static int compat_snprintf( char *str, size_t size, const char *format, ... ) -{ - va_list ap; - int res = -1; - - va_start( ap, format ); - - res = vsnprintf( str, size, format, ap ); - - va_end( ap ); - - // No quick fix possible - if( res < 0 ) - return( (int) size + 20 ); - - return( res ); -} - -#define snprintf compat_snprintf -#endif /* _MSC_VER && !snprintf && !EFIX64 && !EFI32 */ - -#define POLARSSL_ERR_DEBUG_BUF_TOO_SMALL -2 - -#define SAFE_SNPRINTF() \ -{ \ - if( ret == -1 ) \ - return( -1 ); \ - \ - if( (unsigned int) ret > n ) { \ - p[n - 1] = '\0'; \ - return( POLARSSL_ERR_DEBUG_BUF_TOO_SMALL ); \ - } \ - \ - n -= (unsigned int) ret; \ - p += (unsigned int) ret; \ -} - -#define BEFORE_COLON 14 -#define BC "14" -/* - * Return an informational string about the CSR. - */ -int x509_csr_info( char *buf, size_t size, const char *prefix, - const x509_csr *csr ) -{ - int ret; - size_t n; - char *p; - char key_size_str[BEFORE_COLON]; - - p = buf; - n = size; - - ret = snprintf( p, n, "%sCSR version : %d", - prefix, csr->version ); - SAFE_SNPRINTF(); - - ret = snprintf( p, n, "\n%ssubject name : ", prefix ); - SAFE_SNPRINTF(); - ret = x509_dn_gets( p, n, &csr->subject ); - SAFE_SNPRINTF(); - - ret = snprintf( p, n, "\n%ssigned using : ", prefix ); - SAFE_SNPRINTF(); - - ret = x509_sig_alg_gets( p, n, &csr->sig_oid, csr->sig_pk, csr->sig_md, - csr->sig_opts ); - SAFE_SNPRINTF(); - - if( ( ret = x509_key_size_helper( key_size_str, BEFORE_COLON, - pk_get_name( &csr->pk ) ) ) != 0 ) - { - return( ret ); - } - - ret = snprintf( p, n, "\n%s%-" BC "s: %d bits\n", prefix, key_size_str, - (int) pk_get_size( &csr->pk ) ); - SAFE_SNPRINTF(); - - return( (int) ( size - n ) ); -} - -/* - * Initialize a CSR - */ -void x509_csr_init( x509_csr *csr ) -{ - memset( csr, 0, sizeof(x509_csr) ); -} - -/* - * Unallocate all CSR data - */ -void x509_csr_free( x509_csr *csr ) -{ - x509_name *name_cur; - x509_name *name_prv; - - if( csr == NULL ) - return; - - pk_free( &csr->pk ); - -#if defined(POLARSSL_X509_RSASSA_PSS_SUPPORT) - polarssl_free( csr->sig_opts ); -#endif - - name_cur = csr->subject.next; - while( name_cur != NULL ) - { - name_prv = name_cur; - name_cur = name_cur->next; - polarssl_zeroize( name_prv, sizeof( x509_name ) ); - polarssl_free( name_prv ); - } - - if( csr->raw.p != NULL ) - { - polarssl_zeroize( csr->raw.p, csr->raw.len ); - polarssl_free( csr->raw.p ); - } - - polarssl_zeroize( csr, sizeof( x509_csr ) ); -} - -#endif /* POLARSSL_X509_CSR_PARSE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509write_crt.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509write_crt.c deleted file mode 100644 index e298c24..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509write_crt.c +++ /dev/null @@ -1,452 +0,0 @@ -/* - * X.509 certificate writing - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * References: - * - certificates: RFC 5280, updated by RFC 6818 - * - CSRs: PKCS#10 v1.7 aka RFC 2986 - * - attributes: PKCS#9 v2.0 aka RFC 2985 - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_X509_CRT_WRITE_C) - -#include "polarssl/x509_crt.h" -#include "polarssl/oid.h" -#include "polarssl/asn1write.h" -#include "polarssl/sha1.h" - -#if defined(POLARSSL_PEM_WRITE_C) -#include "polarssl/pem.h" -#endif /* POLARSSL_PEM_WRITE_C */ - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -void x509write_crt_init( x509write_cert *ctx ) -{ - memset( ctx, 0, sizeof(x509write_cert) ); - - mpi_init( &ctx->serial ); - ctx->version = X509_CRT_VERSION_3; -} - -void x509write_crt_free( x509write_cert *ctx ) -{ - mpi_free( &ctx->serial ); - - asn1_free_named_data_list( &ctx->subject ); - asn1_free_named_data_list( &ctx->issuer ); - asn1_free_named_data_list( &ctx->extensions ); - - polarssl_zeroize( ctx, sizeof(x509write_cert) ); -} - -void x509write_crt_set_version( x509write_cert *ctx, int version ) -{ - ctx->version = version; -} - -void x509write_crt_set_md_alg( x509write_cert *ctx, md_type_t md_alg ) -{ - ctx->md_alg = md_alg; -} - -void x509write_crt_set_subject_key( x509write_cert *ctx, pk_context *key ) -{ - ctx->subject_key = key; -} - -void x509write_crt_set_issuer_key( x509write_cert *ctx, pk_context *key ) -{ - ctx->issuer_key = key; -} - -int x509write_crt_set_subject_name( x509write_cert *ctx, - const char *subject_name ) -{ - return x509_string_to_names( &ctx->subject, subject_name ); -} - -int x509write_crt_set_issuer_name( x509write_cert *ctx, - const char *issuer_name ) -{ - return x509_string_to_names( &ctx->issuer, issuer_name ); -} - -int x509write_crt_set_serial( x509write_cert *ctx, const mpi *serial ) -{ - int ret; - - if( ( ret = mpi_copy( &ctx->serial, serial ) ) != 0 ) - return( ret ); - - return( 0 ); -} - -int x509write_crt_set_validity( x509write_cert *ctx, const char *not_before, - const char *not_after ) -{ - if( strlen( not_before ) != X509_RFC5280_UTC_TIME_LEN - 1 || - strlen( not_after ) != X509_RFC5280_UTC_TIME_LEN - 1 ) - { - return( POLARSSL_ERR_X509_BAD_INPUT_DATA ); - } - strncpy( ctx->not_before, not_before, X509_RFC5280_UTC_TIME_LEN ); - strncpy( ctx->not_after , not_after , X509_RFC5280_UTC_TIME_LEN ); - ctx->not_before[X509_RFC5280_UTC_TIME_LEN - 1] = 'Z'; - ctx->not_after[X509_RFC5280_UTC_TIME_LEN - 1] = 'Z'; - - return( 0 ); -} - -int x509write_crt_set_extension( x509write_cert *ctx, - const char *oid, size_t oid_len, - int critical, - const unsigned char *val, size_t val_len ) -{ - return x509_set_extension( &ctx->extensions, oid, oid_len, - critical, val, val_len ); -} - -int x509write_crt_set_basic_constraints( x509write_cert *ctx, - int is_ca, int max_pathlen ) -{ - int ret; - unsigned char buf[9]; - unsigned char *c = buf + sizeof(buf); - size_t len = 0; - - memset( buf, 0, sizeof(buf) ); - - if( is_ca && max_pathlen > 127 ) - return( POLARSSL_ERR_X509_BAD_INPUT_DATA ); - - if( is_ca ) - { - if( max_pathlen >= 0 ) - { - ASN1_CHK_ADD( len, asn1_write_int( &c, buf, max_pathlen ) ); - } - ASN1_CHK_ADD( len, asn1_write_bool( &c, buf, 1 ) ); - } - - ASN1_CHK_ADD( len, asn1_write_len( &c, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - return x509write_crt_set_extension( ctx, OID_BASIC_CONSTRAINTS, - OID_SIZE( OID_BASIC_CONSTRAINTS ), - 0, buf + sizeof(buf) - len, len ); -} - -#if defined(POLARSSL_SHA1_C) -int x509write_crt_set_subject_key_identifier( x509write_cert *ctx ) -{ - int ret; - unsigned char buf[POLARSSL_MPI_MAX_SIZE * 2 + 20]; /* tag, length + 2xMPI */ - unsigned char *c = buf + sizeof(buf); - size_t len = 0; - - memset( buf, 0, sizeof(buf) ); - ASN1_CHK_ADD( len, pk_write_pubkey( &c, buf, ctx->subject_key ) ); - - sha1( buf + sizeof(buf) - len, len, buf + sizeof(buf) - 20 ); - c = buf + sizeof(buf) - 20; - len = 20; - - ASN1_CHK_ADD( len, asn1_write_len( &c, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, buf, ASN1_OCTET_STRING ) ); - - return x509write_crt_set_extension( ctx, OID_SUBJECT_KEY_IDENTIFIER, - OID_SIZE( OID_SUBJECT_KEY_IDENTIFIER ), - 0, buf + sizeof(buf) - len, len ); -} - -int x509write_crt_set_authority_key_identifier( x509write_cert *ctx ) -{ - int ret; - unsigned char buf[POLARSSL_MPI_MAX_SIZE * 2 + 20]; /* tag, length + 2xMPI */ - unsigned char *c = buf + sizeof(buf); - size_t len = 0; - - memset( buf, 0, sizeof(buf) ); - ASN1_CHK_ADD( len, pk_write_pubkey( &c, buf, ctx->issuer_key ) ); - - sha1( buf + sizeof(buf) - len, len, buf + sizeof(buf) - 20 ); - c = buf + sizeof(buf) - 20; - len = 20; - - ASN1_CHK_ADD( len, asn1_write_len( &c, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, buf, ASN1_CONTEXT_SPECIFIC | 0 ) ); - - ASN1_CHK_ADD( len, asn1_write_len( &c, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - return x509write_crt_set_extension( ctx, OID_AUTHORITY_KEY_IDENTIFIER, - OID_SIZE( OID_AUTHORITY_KEY_IDENTIFIER ), - 0, buf + sizeof(buf) - len, len ); -} -#endif /* POLARSSL_SHA1_C */ - -int x509write_crt_set_key_usage( x509write_cert *ctx, unsigned char key_usage ) -{ - unsigned char buf[4]; - unsigned char *c; - int ret; - - c = buf + 4; - - if( ( ret = asn1_write_bitstring( &c, buf, &key_usage, 7 ) ) != 4 ) - return( ret ); - - ret = x509write_crt_set_extension( ctx, OID_KEY_USAGE, - OID_SIZE( OID_KEY_USAGE ), - 1, buf, 4 ); - if( ret != 0 ) - return( ret ); - - return( 0 ); -} - -int x509write_crt_set_ns_cert_type( x509write_cert *ctx, - unsigned char ns_cert_type ) -{ - unsigned char buf[4]; - unsigned char *c; - int ret; - - c = buf + 4; - - if( ( ret = asn1_write_bitstring( &c, buf, &ns_cert_type, 8 ) ) != 4 ) - return( ret ); - - ret = x509write_crt_set_extension( ctx, OID_NS_CERT_TYPE, - OID_SIZE( OID_NS_CERT_TYPE ), - 0, buf, 4 ); - if( ret != 0 ) - return( ret ); - - return( 0 ); -} - -static int x509_write_time( unsigned char **p, unsigned char *start, - const char *time, size_t size ) -{ - int ret; - size_t len = 0; - - /* - * write ASN1_UTC_TIME if year < 2050 (2 bytes shorter) - */ - if( time[0] == '2' && time[1] == '0' && time [2] < '5' ) - { - ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, - (const unsigned char *) time + 2, - size - 2 ) ); - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_UTC_TIME ) ); - } - else - { - ASN1_CHK_ADD( len, asn1_write_raw_buffer( p, start, - (const unsigned char *) time, - size ) ); - ASN1_CHK_ADD( len, asn1_write_len( p, start, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( p, start, ASN1_GENERALIZED_TIME ) ); - } - - return( (int) len ); -} - -int x509write_crt_der( x509write_cert *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - const char *sig_oid; - size_t sig_oid_len = 0; - unsigned char *c, *c2; - unsigned char hash[64]; - unsigned char sig[POLARSSL_MPI_MAX_SIZE]; - unsigned char tmp_buf[2048]; - size_t sub_len = 0, pub_len = 0, sig_and_oid_len = 0, sig_len; - size_t len = 0; - pk_type_t pk_alg; - - /* - * Prepare data to be signed in tmp_buf - */ - c = tmp_buf + sizeof( tmp_buf ); - - /* Signature algorithm needed in TBS, and later for actual signature */ - pk_alg = pk_get_type( ctx->issuer_key ); - if( pk_alg == POLARSSL_PK_ECKEY ) - pk_alg = POLARSSL_PK_ECDSA; - - if( ( ret = oid_get_oid_by_sig_alg( pk_alg, ctx->md_alg, - &sig_oid, &sig_oid_len ) ) != 0 ) - { - return( ret ); - } - - /* - * Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension - */ - ASN1_CHK_ADD( len, x509_write_extensions( &c, tmp_buf, ctx->extensions ) ); - ASN1_CHK_ADD( len, asn1_write_len( &c, tmp_buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, tmp_buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - ASN1_CHK_ADD( len, asn1_write_len( &c, tmp_buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, tmp_buf, ASN1_CONTEXT_SPECIFIC | - ASN1_CONSTRUCTED | 3 ) ); - - /* - * SubjectPublicKeyInfo - */ - ASN1_CHK_ADD( pub_len, pk_write_pubkey_der( ctx->subject_key, - tmp_buf, c - tmp_buf ) ); - c -= pub_len; - len += pub_len; - - /* - * Subject ::= Name - */ - ASN1_CHK_ADD( len, x509_write_names( &c, tmp_buf, ctx->subject ) ); - - /* - * Validity ::= SEQUENCE { - * notBefore Time, - * notAfter Time } - */ - sub_len = 0; - - ASN1_CHK_ADD( sub_len, x509_write_time( &c, tmp_buf, ctx->not_after, - X509_RFC5280_UTC_TIME_LEN ) ); - - ASN1_CHK_ADD( sub_len, x509_write_time( &c, tmp_buf, ctx->not_before, - X509_RFC5280_UTC_TIME_LEN ) ); - - len += sub_len; - ASN1_CHK_ADD( len, asn1_write_len( &c, tmp_buf, sub_len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, tmp_buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - /* - * Issuer ::= Name - */ - ASN1_CHK_ADD( len, x509_write_names( &c, tmp_buf, ctx->issuer ) ); - - /* - * Signature ::= AlgorithmIdentifier - */ - ASN1_CHK_ADD( len, asn1_write_algorithm_identifier( &c, tmp_buf, - sig_oid, strlen( sig_oid ), 0 ) ); - - /* - * Serial ::= INTEGER - */ - ASN1_CHK_ADD( len, asn1_write_mpi( &c, tmp_buf, &ctx->serial ) ); - - /* - * Version ::= INTEGER { v1(0), v2(1), v3(2) } - */ - sub_len = 0; - ASN1_CHK_ADD( sub_len, asn1_write_int( &c, tmp_buf, ctx->version ) ); - len += sub_len; - ASN1_CHK_ADD( len, asn1_write_len( &c, tmp_buf, sub_len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, tmp_buf, ASN1_CONTEXT_SPECIFIC | - ASN1_CONSTRUCTED | 0 ) ); - - ASN1_CHK_ADD( len, asn1_write_len( &c, tmp_buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, tmp_buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - /* - * Make signature - */ - md( md_info_from_type( ctx->md_alg ), c, len, hash ); - - if( ( ret = pk_sign( ctx->issuer_key, ctx->md_alg, hash, 0, sig, &sig_len, - f_rng, p_rng ) ) != 0 ) - { - return( ret ); - } - - /* - * Write data to output buffer - */ - c2 = buf + size; - ASN1_CHK_ADD( sig_and_oid_len, x509_write_sig( &c2, buf, - sig_oid, sig_oid_len, sig, sig_len ) ); - - c2 -= len; - memcpy( c2, c, len ); - - len += sig_and_oid_len; - ASN1_CHK_ADD( len, asn1_write_len( &c2, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c2, buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - return( (int) len ); -} - -#define PEM_BEGIN_CRT "-----BEGIN CERTIFICATE-----\n" -#define PEM_END_CRT "-----END CERTIFICATE-----\n" - -#if defined(POLARSSL_PEM_WRITE_C) -int x509write_crt_pem( x509write_cert *crt, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - unsigned char output_buf[4096]; - size_t olen = 0; - - if( ( ret = x509write_crt_der( crt, output_buf, sizeof(output_buf), - f_rng, p_rng ) ) < 0 ) - { - return( ret ); - } - - if( ( ret = pem_write_buffer( PEM_BEGIN_CRT, PEM_END_CRT, - output_buf + sizeof(output_buf) - ret, - ret, buf, size, &olen ) ) != 0 ) - { - return( ret ); - } - - return( 0 ); -} -#endif /* POLARSSL_PEM_WRITE_C */ - -#endif /* POLARSSL_X509_CRT_WRITE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509write_csr.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509write_csr.c deleted file mode 100644 index 53ae9c6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/x509write_csr.c +++ /dev/null @@ -1,260 +0,0 @@ -/* - * X.509 Certificate Signing Request writing - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -/* - * References: - * - CSRs: PKCS#10 v1.7 aka RFC 2986 - * - attributes: PKCS#9 v2.0 aka RFC 2985 - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_X509_CSR_WRITE_C) - -#include "polarssl/x509_csr.h" -#include "polarssl/oid.h" -#include "polarssl/asn1write.h" - -#if defined(POLARSSL_PEM_WRITE_C) -#include "polarssl/pem.h" -#endif - -#include -#include - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -void x509write_csr_init( x509write_csr *ctx ) -{ - memset( ctx, 0, sizeof(x509write_csr) ); -} - -void x509write_csr_free( x509write_csr *ctx ) -{ - asn1_free_named_data_list( &ctx->subject ); - asn1_free_named_data_list( &ctx->extensions ); - - polarssl_zeroize( ctx, sizeof(x509write_csr) ); -} - -void x509write_csr_set_md_alg( x509write_csr *ctx, md_type_t md_alg ) -{ - ctx->md_alg = md_alg; -} - -void x509write_csr_set_key( x509write_csr *ctx, pk_context *key ) -{ - ctx->key = key; -} - -int x509write_csr_set_subject_name( x509write_csr *ctx, - const char *subject_name ) -{ - return x509_string_to_names( &ctx->subject, subject_name ); -} - -int x509write_csr_set_extension( x509write_csr *ctx, - const char *oid, size_t oid_len, - const unsigned char *val, size_t val_len ) -{ - return x509_set_extension( &ctx->extensions, oid, oid_len, - 0, val, val_len ); -} - -int x509write_csr_set_key_usage( x509write_csr *ctx, unsigned char key_usage ) -{ - unsigned char buf[4]; - unsigned char *c; - int ret; - - c = buf + 4; - - if( ( ret = asn1_write_bitstring( &c, buf, &key_usage, 7 ) ) != 4 ) - return( ret ); - - ret = x509write_csr_set_extension( ctx, OID_KEY_USAGE, - OID_SIZE( OID_KEY_USAGE ), - buf, 4 ); - if( ret != 0 ) - return( ret ); - - return( 0 ); -} - -int x509write_csr_set_ns_cert_type( x509write_csr *ctx, - unsigned char ns_cert_type ) -{ - unsigned char buf[4]; - unsigned char *c; - int ret; - - c = buf + 4; - - if( ( ret = asn1_write_bitstring( &c, buf, &ns_cert_type, 8 ) ) != 4 ) - return( ret ); - - ret = x509write_csr_set_extension( ctx, OID_NS_CERT_TYPE, - OID_SIZE( OID_NS_CERT_TYPE ), - buf, 4 ); - if( ret != 0 ) - return( ret ); - - return( 0 ); -} - -int x509write_csr_der( x509write_csr *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - const char *sig_oid; - size_t sig_oid_len = 0; - unsigned char *c, *c2; - unsigned char hash[64]; - unsigned char sig[POLARSSL_MPI_MAX_SIZE]; - unsigned char tmp_buf[2048]; - size_t pub_len = 0, sig_and_oid_len = 0, sig_len; - size_t len = 0; - pk_type_t pk_alg; - - /* - * Prepare data to be signed in tmp_buf - */ - c = tmp_buf + sizeof( tmp_buf ); - - ASN1_CHK_ADD( len, x509_write_extensions( &c, tmp_buf, ctx->extensions ) ); - - if( len ) - { - ASN1_CHK_ADD( len, asn1_write_len( &c, tmp_buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, tmp_buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - ASN1_CHK_ADD( len, asn1_write_len( &c, tmp_buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, tmp_buf, ASN1_CONSTRUCTED | - ASN1_SET ) ); - - ASN1_CHK_ADD( len, asn1_write_oid( &c, tmp_buf, OID_PKCS9_CSR_EXT_REQ, - OID_SIZE( OID_PKCS9_CSR_EXT_REQ ) ) ); - - ASN1_CHK_ADD( len, asn1_write_len( &c, tmp_buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, tmp_buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - } - - ASN1_CHK_ADD( len, asn1_write_len( &c, tmp_buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, tmp_buf, ASN1_CONSTRUCTED | - ASN1_CONTEXT_SPECIFIC ) ); - - ASN1_CHK_ADD( pub_len, pk_write_pubkey_der( ctx->key, - tmp_buf, c - tmp_buf ) ); - c -= pub_len; - len += pub_len; - - /* - * Subject ::= Name - */ - ASN1_CHK_ADD( len, x509_write_names( &c, tmp_buf, ctx->subject ) ); - - /* - * Version ::= INTEGER { v1(0), v2(1), v3(2) } - */ - ASN1_CHK_ADD( len, asn1_write_int( &c, tmp_buf, 0 ) ); - - ASN1_CHK_ADD( len, asn1_write_len( &c, tmp_buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c, tmp_buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - /* - * Prepare signature - */ - md( md_info_from_type( ctx->md_alg ), c, len, hash ); - - pk_alg = pk_get_type( ctx->key ); - if( pk_alg == POLARSSL_PK_ECKEY ) - pk_alg = POLARSSL_PK_ECDSA; - - if( ( ret = pk_sign( ctx->key, ctx->md_alg, hash, 0, sig, &sig_len, - f_rng, p_rng ) ) != 0 || - ( ret = oid_get_oid_by_sig_alg( pk_alg, ctx->md_alg, - &sig_oid, &sig_oid_len ) ) != 0 ) - { - return( ret ); - } - - /* - * Write data to output buffer - */ - c2 = buf + size; - ASN1_CHK_ADD( sig_and_oid_len, x509_write_sig( &c2, buf, - sig_oid, sig_oid_len, sig, sig_len ) ); - - c2 -= len; - memcpy( c2, c, len ); - - len += sig_and_oid_len; - ASN1_CHK_ADD( len, asn1_write_len( &c2, buf, len ) ); - ASN1_CHK_ADD( len, asn1_write_tag( &c2, buf, ASN1_CONSTRUCTED | - ASN1_SEQUENCE ) ); - - return( (int) len ); -} - -#define PEM_BEGIN_CSR "-----BEGIN CERTIFICATE REQUEST-----\n" -#define PEM_END_CSR "-----END CERTIFICATE REQUEST-----\n" - -#if defined(POLARSSL_PEM_WRITE_C) -int x509write_csr_pem( x509write_csr *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret; - unsigned char output_buf[4096]; - size_t olen = 0; - - if( ( ret = x509write_csr_der( ctx, output_buf, sizeof(output_buf), - f_rng, p_rng ) ) < 0 ) - { - return( ret ); - } - - if( ( ret = pem_write_buffer( PEM_BEGIN_CSR, PEM_END_CSR, - output_buf + sizeof(output_buf) - ret, - ret, buf, size, &olen ) ) != 0 ) - { - return( ret ); - } - - return( 0 ); -} -#endif /* POLARSSL_PEM_WRITE_C */ - -#endif /* POLARSSL_X509_CSR_WRITE_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/xtea.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/xtea.c deleted file mode 100644 index 75215c5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/library/xtea.c +++ /dev/null @@ -1,283 +0,0 @@ -/* - * An 32-bit implementation of the XTEA algorithm - * - * Copyright (C) 2006-2014, Brainspark B.V. - * - * This file is part of PolarSSL (http://www.polarssl.org) - * Lead Maintainer: Paul Bakker - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined(POLARSSL_CONFIG_FILE) -#include "polarssl/config.h" -#else -#include POLARSSL_CONFIG_FILE -#endif - -#if defined(POLARSSL_XTEA_C) - -#include "polarssl/xtea.h" - -#if defined(POLARSSL_PLATFORM_C) -#include "polarssl/platform.h" -#else -#define polarssl_printf printf -#endif - -#if !defined(POLARSSL_XTEA_ALT) - -/* Implementation that should never be optimized out by the compiler */ -static void polarssl_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; -} - -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - -void xtea_init( xtea_context *ctx ) -{ - memset( ctx, 0, sizeof( xtea_context ) ); -} - -void xtea_free( xtea_context *ctx ) -{ - if( ctx == NULL ) - return; - - polarssl_zeroize( ctx, sizeof( xtea_context ) ); -} - -/* - * XTEA key schedule - */ -void xtea_setup( xtea_context *ctx, const unsigned char key[16] ) -{ - int i; - - memset( ctx, 0, sizeof(xtea_context) ); - - for( i = 0; i < 4; i++ ) - { - GET_UINT32_BE( ctx->k[i], key, i << 2 ); - } -} - -/* - * XTEA encrypt function - */ -int xtea_crypt_ecb( xtea_context *ctx, int mode, - const unsigned char input[8], unsigned char output[8]) -{ - uint32_t *k, v0, v1, i; - - k = ctx->k; - - GET_UINT32_BE( v0, input, 0 ); - GET_UINT32_BE( v1, input, 4 ); - - if( mode == XTEA_ENCRYPT ) - { - uint32_t sum = 0, delta = 0x9E3779B9; - - for( i = 0; i < 32; i++ ) - { - v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]); - sum += delta; - v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]); - } - } - else /* XTEA_DECRYPT */ - { - uint32_t delta = 0x9E3779B9, sum = delta * 32; - - for( i = 0; i < 32; i++ ) - { - v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]); - sum -= delta; - v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]); - } - } - - PUT_UINT32_BE( v0, output, 0 ); - PUT_UINT32_BE( v1, output, 4 ); - - return( 0 ); -} - -#if defined(POLARSSL_CIPHER_MODE_CBC) -/* - * XTEA-CBC buffer encryption/decryption - */ -int xtea_crypt_cbc( xtea_context *ctx, int mode, size_t length, - unsigned char iv[8], const unsigned char *input, - unsigned char *output) -{ - int i; - unsigned char temp[8]; - - if( length % 8 ) - return( POLARSSL_ERR_XTEA_INVALID_INPUT_LENGTH ); - - if( mode == XTEA_DECRYPT ) - { - while( length > 0 ) - { - memcpy( temp, input, 8 ); - xtea_crypt_ecb( ctx, mode, input, output ); - - for( i = 0; i < 8; i++ ) - output[i] = (unsigned char)( output[i] ^ iv[i] ); - - memcpy( iv, temp, 8 ); - - input += 8; - output += 8; - length -= 8; - } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 8; i++ ) - output[i] = (unsigned char)( input[i] ^ iv[i] ); - - xtea_crypt_ecb( ctx, mode, output, output ); - memcpy( iv, output, 8 ); - - input += 8; - output += 8; - length -= 8; - } - } - - return( 0 ); -} -#endif /* POLARSSL_CIPHER_MODE_CBC */ -#endif /* !POLARSSL_XTEA_ALT */ - -#if defined(POLARSSL_SELF_TEST) - -#include -#include - -/* - * XTEA tests vectors (non-official) - */ - -static const unsigned char xtea_test_key[6][16] = -{ - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 } -}; - -static const unsigned char xtea_test_pt[6][8] = -{ - { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48 }, - { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }, - { 0x5a, 0x5b, 0x6e, 0x27, 0x89, 0x48, 0xd7, 0x7f }, - { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48 }, - { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }, - { 0x70, 0xe1, 0x22, 0x5d, 0x6e, 0x4e, 0x76, 0x55 } -}; - -static const unsigned char xtea_test_ct[6][8] = -{ - { 0x49, 0x7d, 0xf3, 0xd0, 0x72, 0x61, 0x2c, 0xb5 }, - { 0xe7, 0x8f, 0x2d, 0x13, 0x74, 0x43, 0x41, 0xd8 }, - { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }, - { 0xa0, 0x39, 0x05, 0x89, 0xf8, 0xb8, 0xef, 0xa5 }, - { 0xed, 0x23, 0x37, 0x5a, 0x82, 0x1a, 0x8c, 0x2d }, - { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 } -}; - -/* - * Checkup routine - */ -int xtea_self_test( int verbose ) -{ - int i, ret = 0; - unsigned char buf[8]; - xtea_context ctx; - - xtea_init( &ctx ); - for( i = 0; i < 6; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " XTEA test #%d: ", i + 1 ); - - memcpy( buf, xtea_test_pt[i], 8 ); - - xtea_setup( &ctx, xtea_test_key[i] ); - xtea_crypt_ecb( &ctx, XTEA_ENCRYPT, buf, buf ); - - if( memcmp( buf, xtea_test_ct[i], 8 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - xtea_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#endif /* POLARSSL_XTEA_C */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/ssl_rom.mk b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/ssl_rom.mk deleted file mode 100644 index eec5e6b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/ssl_rom.mk +++ /dev/null @@ -1,20 +0,0 @@ - -#*****************************************************************************# -# ROM Object FILE LIST # -#*****************************************************************************# -SSL_ROM_OBJS = aes.o arc4.o \ - asn1parse.o \ - asn1write.o base64.o bignum.o \ - ctr_drbg.o des.o \ - dhm.o ecdh.o ecdsa.o \ - ecp.o ecp_curves.o \ - hmac_drbg.o \ - md.o md_wrap.o \ - md5.o \ - oid.o \ - pem.o \ - pk.o pk_wrap.o \ - pkwrite.o \ - rsa.o sha1.o sha256.o \ - sha512.o \ - rom_ssl_ram_map.o diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/ssl_self_test.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/ssl_self_test.c deleted file mode 100644 index 921a748..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/polarssl-1.3.8/ssl_self_test.c +++ /dev/null @@ -1,2657 +0,0 @@ -#include "polarssl/config_rom.h" -#define polarssl_printf DiagPrintf - -#define AES_POLARSSL_SELF_TEST -#define ARC4_POLARSSL_SELF_TEST -#define BASE64_POLARSSL_SELF_TEST -#define BIGNUM_POLARSSL_SELF_TEST -#define CTR_DRBG_POLARSSL_SELF_TEST -#define DES_POLARSSL_SELF_TEST -#define DHM_POLARSSL_SELF_TEST -//#define ECP_POLARSSL_SELF_TEST //need open part of ecp rom code self test -#define HMAC_DRBG_POLARSSL_SELF_TEST -#define MD5_POLARSSL_SELF_TEST -#define RSA_POLARSSL_SELF_TEST -#define SHA1_POLARSSL_SELF_TEST -#define SHA256_POLARSSL_SELF_TEST -#define SHA512_POLARSSL_SELF_TEST - -#if defined(AES_POLARSSL_SELF_TEST) -#if defined(POLARSSL_AES_C) - -#include "polarssl/aes.h" -#if defined(POLARSSL_PADLOCK_C) -#include "polarssl/padlock.h" -#endif -#if defined(POLARSSL_AESNI_C) -#include "polarssl/aesni.h" -#endif - -#include - -/* - * AES test vectors from: - * - * http://csrc.nist.gov/archive/aes/rijndael/rijndael-vals.zip - */ -static const unsigned char aes_test_ecb_dec[3][16] = -{ - { 0x44, 0x41, 0x6A, 0xC2, 0xD1, 0xF5, 0x3C, 0x58, - 0x33, 0x03, 0x91, 0x7E, 0x6B, 0xE9, 0xEB, 0xE0 }, - { 0x48, 0xE3, 0x1E, 0x9E, 0x25, 0x67, 0x18, 0xF2, - 0x92, 0x29, 0x31, 0x9C, 0x19, 0xF1, 0x5B, 0xA4 }, - { 0x05, 0x8C, 0xCF, 0xFD, 0xBB, 0xCB, 0x38, 0x2D, - 0x1F, 0x6F, 0x56, 0x58, 0x5D, 0x8A, 0x4A, 0xDE } -}; - -static const unsigned char aes_test_ecb_enc[3][16] = -{ - { 0xC3, 0x4C, 0x05, 0x2C, 0xC0, 0xDA, 0x8D, 0x73, - 0x45, 0x1A, 0xFE, 0x5F, 0x03, 0xBE, 0x29, 0x7F }, - { 0xF3, 0xF6, 0x75, 0x2A, 0xE8, 0xD7, 0x83, 0x11, - 0x38, 0xF0, 0x41, 0x56, 0x06, 0x31, 0xB1, 0x14 }, - { 0x8B, 0x79, 0xEE, 0xCC, 0x93, 0xA0, 0xEE, 0x5D, - 0xFF, 0x30, 0xB4, 0xEA, 0x21, 0x63, 0x6D, 0xA4 } -}; - -#if defined(POLARSSL_CIPHER_MODE_CBC) -static const unsigned char aes_test_cbc_dec[3][16] = -{ - { 0xFA, 0xCA, 0x37, 0xE0, 0xB0, 0xC8, 0x53, 0x73, - 0xDF, 0x70, 0x6E, 0x73, 0xF7, 0xC9, 0xAF, 0x86 }, - { 0x5D, 0xF6, 0x78, 0xDD, 0x17, 0xBA, 0x4E, 0x75, - 0xB6, 0x17, 0x68, 0xC6, 0xAD, 0xEF, 0x7C, 0x7B }, - { 0x48, 0x04, 0xE1, 0x81, 0x8F, 0xE6, 0x29, 0x75, - 0x19, 0xA3, 0xE8, 0x8C, 0x57, 0x31, 0x04, 0x13 } -}; - -static const unsigned char aes_test_cbc_enc[3][16] = -{ - { 0x8A, 0x05, 0xFC, 0x5E, 0x09, 0x5A, 0xF4, 0x84, - 0x8A, 0x08, 0xD3, 0x28, 0xD3, 0x68, 0x8E, 0x3D }, - { 0x7B, 0xD9, 0x66, 0xD5, 0x3A, 0xD8, 0xC1, 0xBB, - 0x85, 0xD2, 0xAD, 0xFA, 0xE8, 0x7B, 0xB1, 0x04 }, - { 0xFE, 0x3C, 0x53, 0x65, 0x3E, 0x2F, 0x45, 0xB5, - 0x6F, 0xCD, 0x88, 0xB2, 0xCC, 0x89, 0x8F, 0xF0 } -}; -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) -/* - * AES-CFB128 test vectors from: - * - * http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf - */ -static const unsigned char aes_test_cfb128_key[3][32] = -{ - { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, - 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C }, - { 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52, - 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5, - 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B }, - { 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, - 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, - 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, - 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 } -}; - -static const unsigned char aes_test_cfb128_iv[16] = -{ - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F -}; - -static const unsigned char aes_test_cfb128_pt[64] = -{ - 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, - 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A, - 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, - 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51, - 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11, - 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF, - 0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17, - 0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10 -}; - -static const unsigned char aes_test_cfb128_ct[3][64] = -{ - { 0x3B, 0x3F, 0xD9, 0x2E, 0xB7, 0x2D, 0xAD, 0x20, - 0x33, 0x34, 0x49, 0xF8, 0xE8, 0x3C, 0xFB, 0x4A, - 0xC8, 0xA6, 0x45, 0x37, 0xA0, 0xB3, 0xA9, 0x3F, - 0xCD, 0xE3, 0xCD, 0xAD, 0x9F, 0x1C, 0xE5, 0x8B, - 0x26, 0x75, 0x1F, 0x67, 0xA3, 0xCB, 0xB1, 0x40, - 0xB1, 0x80, 0x8C, 0xF1, 0x87, 0xA4, 0xF4, 0xDF, - 0xC0, 0x4B, 0x05, 0x35, 0x7C, 0x5D, 0x1C, 0x0E, - 0xEA, 0xC4, 0xC6, 0x6F, 0x9F, 0xF7, 0xF2, 0xE6 }, - { 0xCD, 0xC8, 0x0D, 0x6F, 0xDD, 0xF1, 0x8C, 0xAB, - 0x34, 0xC2, 0x59, 0x09, 0xC9, 0x9A, 0x41, 0x74, - 0x67, 0xCE, 0x7F, 0x7F, 0x81, 0x17, 0x36, 0x21, - 0x96, 0x1A, 0x2B, 0x70, 0x17, 0x1D, 0x3D, 0x7A, - 0x2E, 0x1E, 0x8A, 0x1D, 0xD5, 0x9B, 0x88, 0xB1, - 0xC8, 0xE6, 0x0F, 0xED, 0x1E, 0xFA, 0xC4, 0xC9, - 0xC0, 0x5F, 0x9F, 0x9C, 0xA9, 0x83, 0x4F, 0xA0, - 0x42, 0xAE, 0x8F, 0xBA, 0x58, 0x4B, 0x09, 0xFF }, - { 0xDC, 0x7E, 0x84, 0xBF, 0xDA, 0x79, 0x16, 0x4B, - 0x7E, 0xCD, 0x84, 0x86, 0x98, 0x5D, 0x38, 0x60, - 0x39, 0xFF, 0xED, 0x14, 0x3B, 0x28, 0xB1, 0xC8, - 0x32, 0x11, 0x3C, 0x63, 0x31, 0xE5, 0x40, 0x7B, - 0xDF, 0x10, 0x13, 0x24, 0x15, 0xE5, 0x4B, 0x92, - 0xA1, 0x3E, 0xD0, 0xA8, 0x26, 0x7A, 0xE2, 0xF9, - 0x75, 0xA3, 0x85, 0x74, 0x1A, 0xB9, 0xCE, 0xF8, - 0x20, 0x31, 0x62, 0x3D, 0x55, 0xB1, 0xE4, 0x71 } -}; -#endif /* POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) -/* - * AES-CTR test vectors from: - * - * http://www.faqs.org/rfcs/rfc3686.html - */ - -static const unsigned char aes_test_ctr_key[3][16] = -{ - { 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC, - 0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E }, - { 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7, - 0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 }, - { 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8, - 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC } -}; - -static const unsigned char aes_test_ctr_nonce_counter[3][16] = -{ - { 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59, - 0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F, - 0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 } -}; - -static const unsigned char aes_test_ctr_pt[3][48] = -{ - { 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62, - 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x22, 0x23 } -}; - -static const unsigned char aes_test_ctr_ct[3][48] = -{ - { 0xE4, 0x09, 0x5D, 0x4F, 0xB7, 0xA7, 0xB3, 0x79, - 0x2D, 0x61, 0x75, 0xA3, 0x26, 0x13, 0x11, 0xB8 }, - { 0x51, 0x04, 0xA1, 0x06, 0x16, 0x8A, 0x72, 0xD9, - 0x79, 0x0D, 0x41, 0xEE, 0x8E, 0xDA, 0xD3, 0x88, - 0xEB, 0x2E, 0x1E, 0xFC, 0x46, 0xDA, 0x57, 0xC8, - 0xFC, 0xE6, 0x30, 0xDF, 0x91, 0x41, 0xBE, 0x28 }, - { 0xC1, 0xCF, 0x48, 0xA8, 0x9F, 0x2F, 0xFD, 0xD9, - 0xCF, 0x46, 0x52, 0xE9, 0xEF, 0xDB, 0x72, 0xD7, - 0x45, 0x40, 0xA4, 0x2B, 0xDE, 0x6D, 0x78, 0x36, - 0xD5, 0x9A, 0x5C, 0xEA, 0xAE, 0xF3, 0x10, 0x53, - 0x25, 0xB2, 0x07, 0x2F } -}; - -static const int aes_test_ctr_len[3] = - { 16, 32, 36 }; -#endif /* POLARSSL_CIPHER_MODE_CTR */ - -/* - * Checkup routine - */ -int aes_self_test( int verbose ) -{ - int ret = 0, i, j, u, v; - unsigned char key[32]; - unsigned char buf[64]; - unsigned char iv[16]; -#if defined(POLARSSL_CIPHER_MODE_CBC) - unsigned char prv[16]; -#endif -#if defined(POLARSSL_CIPHER_MODE_CTR) || defined(POLARSSL_CIPHER_MODE_CFB) - size_t offset; -#endif -#if defined(POLARSSL_CIPHER_MODE_CTR) - int len; - unsigned char nonce_counter[16]; - unsigned char stream_block[16]; -#endif - aes_context ctx; - - memset( key, 0, 32 ); - aes_init( &ctx ); - - /* - * ECB mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " AES-ECB-%3d (%s): ", 128 + u * 64, - ( v == AES_DECRYPT ) ? "dec" : "enc" ); - - memset( buf, 0, 16 ); - - if( v == AES_DECRYPT ) - { - aes_setkey_dec( &ctx, key, 128 + u * 64 ); - - for( j = 0; j < 10000; j++ ) - aes_crypt_ecb( &ctx, v, buf, buf ); - - if( memcmp( buf, aes_test_ecb_dec[u], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - else - { - aes_setkey_enc( &ctx, key, 128 + u * 64 ); - - for( j = 0; j < 10000; j++ ) - aes_crypt_ecb( &ctx, v, buf, buf ); - - if( memcmp( buf, aes_test_ecb_enc[u], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -#if defined(POLARSSL_CIPHER_MODE_CBC) - /* - * CBC mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " AES-CBC-%3d (%s): ", 128 + u * 64, - ( v == AES_DECRYPT ) ? "dec" : "enc" ); - - memset( iv , 0, 16 ); - memset( prv, 0, 16 ); - memset( buf, 0, 16 ); - - if( v == AES_DECRYPT ) - { - aes_setkey_dec( &ctx, key, 128 + u * 64 ); - - for( j = 0; j < 10000; j++ ) - aes_crypt_cbc( &ctx, v, 16, iv, buf, buf ); - - if( memcmp( buf, aes_test_cbc_dec[u], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - else - { - aes_setkey_enc( &ctx, key, 128 + u * 64 ); - - for( j = 0; j < 10000; j++ ) - { - unsigned char tmp[16]; - - aes_crypt_cbc( &ctx, v, 16, iv, buf, buf ); - - memcpy( tmp, prv, 16 ); - memcpy( prv, buf, 16 ); - memcpy( buf, tmp, 16 ); - } - - if( memcmp( prv, aes_test_cbc_enc[u], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -#if defined(POLARSSL_CIPHER_MODE_CFB) - /* - * CFB128 mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " AES-CFB128-%3d (%s): ", 128 + u * 64, - ( v == AES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( iv, aes_test_cfb128_iv, 16 ); - memcpy( key, aes_test_cfb128_key[u], 16 + u * 8 ); - - offset = 0; - aes_setkey_enc( &ctx, key, 128 + u * 64 ); - - if( v == AES_DECRYPT ) - { - memcpy( buf, aes_test_cfb128_ct[u], 64 ); - aes_crypt_cfb128( &ctx, v, 64, &offset, iv, buf, buf ); - - if( memcmp( buf, aes_test_cfb128_pt, 64 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - else - { - memcpy( buf, aes_test_cfb128_pt, 64 ); - aes_crypt_cfb128( &ctx, v, 64, &offset, iv, buf, buf ); - - if( memcmp( buf, aes_test_cfb128_ct[u], 64 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); -#endif /* POLARSSL_CIPHER_MODE_CFB */ - -#if defined(POLARSSL_CIPHER_MODE_CTR) - /* - * CTR mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " AES-CTR-128 (%s): ", - ( v == AES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( nonce_counter, aes_test_ctr_nonce_counter[u], 16 ); - memcpy( key, aes_test_ctr_key[u], 16 ); - - offset = 0; - aes_setkey_enc( &ctx, key, 128 ); - - if( v == AES_DECRYPT ) - { - len = aes_test_ctr_len[u]; - memcpy( buf, aes_test_ctr_ct[u], len ); - - aes_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); - - if( memcmp( buf, aes_test_ctr_pt[u], len ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - else - { - len = aes_test_ctr_len[u]; - memcpy( buf, aes_test_ctr_pt[u], len ); - - aes_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); - - if( memcmp( buf, aes_test_ctr_ct[u], len ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); -#endif /* POLARSSL_CIPHER_MODE_CTR */ - - ret = 0; - -exit: - aes_free( &ctx ); - - return( ret ); -} -#endif -#endif /* POLARSSL_SELF_TEST */ - -#if defined(ARC4_POLARSSL_SELF_TEST) - -#include "polarssl/arc4.h" -#include -#include - -/* - * ARC4 tests vectors as posted by Eric Rescorla in sep. 1994: - * - * http://groups.google.com/group/comp.security.misc/msg/10a300c9d21afca0 - */ -static const unsigned char arc4_test_key[3][8] = -{ - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}; - -static const unsigned char arc4_test_pt[3][8] = -{ - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}; - -static const unsigned char arc4_test_ct[3][8] = -{ - { 0x75, 0xB7, 0x87, 0x80, 0x99, 0xE0, 0xC5, 0x96 }, - { 0x74, 0x94, 0xC2, 0xE7, 0x10, 0x4B, 0x08, 0x79 }, - { 0xDE, 0x18, 0x89, 0x41, 0xA3, 0x37, 0x5D, 0x3A } -}; - -/* - * Checkup routine - */ -int arc4_self_test( int verbose ) -{ - int i, ret = 0; - unsigned char ibuf[8]; - unsigned char obuf[8]; - arc4_context ctx; - - arc4_init( &ctx ); - - for( i = 0; i < 3; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " ARC4 test #%d: ", i + 1 ); - - memcpy( ibuf, arc4_test_pt[i], 8 ); - - arc4_setup( &ctx, arc4_test_key[i], 8 ); - arc4_crypt( &ctx, 8, ibuf, obuf ); - - if( memcmp( obuf, arc4_test_ct[i], 8 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - arc4_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#if defined(BASE64_POLARSSL_SELF_TEST) - -#include "polarssl/base64.h" -#include -#include - -static const unsigned char base64_test_dec[64] = -{ - 0x24, 0x48, 0x6E, 0x56, 0x87, 0x62, 0x5A, 0xBD, - 0xBF, 0x17, 0xD9, 0xA2, 0xC4, 0x17, 0x1A, 0x01, - 0x94, 0xED, 0x8F, 0x1E, 0x11, 0xB3, 0xD7, 0x09, - 0x0C, 0xB6, 0xE9, 0x10, 0x6F, 0x22, 0xEE, 0x13, - 0xCA, 0xB3, 0x07, 0x05, 0x76, 0xC9, 0xFA, 0x31, - 0x6C, 0x08, 0x34, 0xFF, 0x8D, 0xC2, 0x6C, 0x38, - 0x00, 0x43, 0xE9, 0x54, 0x97, 0xAF, 0x50, 0x4B, - 0xD1, 0x41, 0xBA, 0x95, 0x31, 0x5A, 0x0B, 0x97 -}; - -static const unsigned char base64_test_enc[] = - "JEhuVodiWr2/F9mixBcaAZTtjx4Rs9cJDLbpEG8i7hPK" - "swcFdsn6MWwINP+Nwmw4AEPpVJevUEvRQbqVMVoLlw=="; - -/* - * Checkup routine - */ -int base64_self_test( int verbose ) -{ - size_t len; - const unsigned char *src; - unsigned char buffer[128]; - - if( verbose != 0 ) - polarssl_printf( " Base64 encoding test: " ); - - len = sizeof( buffer ); - src = base64_test_dec; - - if( base64_encode( buffer, &len, src, 64 ) != 0 || - memcmp( base64_test_enc, buffer, 88 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n Base64 decoding test: " ); - - len = sizeof( buffer ); - src = base64_test_enc; - - if( base64_decode( buffer, &len, src, 88 ) != 0 || - memcmp( base64_test_dec, buffer, 64 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n\n" ); - - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#if defined(BIGNUM_POLARSSL_SELF_TEST) - -#include "polarssl/bignum.h" -#include "polarssl/bn_mul.h" - -#define GCD_PAIR_COUNT 3 - -static const int gcd_pairs[GCD_PAIR_COUNT][3] = -{ - { 693, 609, 21 }, - { 1764, 868, 28 }, - { 768454923, 542167814, 1 } -}; - -/* - * Checkup routine - */ -int mpi_self_test( int verbose ) -{ - int ret, i; - mpi A, E, N, X, Y, U, V; - - mpi_init( &A ); mpi_init( &E ); mpi_init( &N ); mpi_init( &X ); - mpi_init( &Y ); mpi_init( &U ); mpi_init( &V ); - - MPI_CHK( mpi_read_string( &A, 16, - "EFE021C2645FD1DC586E69184AF4A31E" \ - "D5F53E93B5F123FA41680867BA110131" \ - "944FE7952E2517337780CB0DB80E61AA" \ - "E7C8DDC6C5C6AADEB34EB38A2F40D5E6" ) ); - - MPI_CHK( mpi_read_string( &E, 16, - "B2E7EFD37075B9F03FF989C7C5051C20" \ - "34D2A323810251127E7BF8625A4F49A5" \ - "F3E27F4DA8BD59C47D6DAABA4C8127BD" \ - "5B5C25763222FEFCCFC38B832366C29E" ) ); - - MPI_CHK( mpi_read_string( &N, 16, - "0066A198186C18C10B2F5ED9B522752A" \ - "9830B69916E535C8F047518A889A43A5" \ - "94B6BED27A168D31D4A52F88925AA8F5" ) ); - - MPI_CHK( mpi_mul_mpi( &X, &A, &N ) ); - - MPI_CHK( mpi_read_string( &U, 16, - "602AB7ECA597A3D6B56FF9829A5E8B85" \ - "9E857EA95A03512E2BAE7391688D264A" \ - "A5663B0341DB9CCFD2C4C5F421FEC814" \ - "8001B72E848A38CAE1C65F78E56ABDEF" \ - "E12D3C039B8A02D6BE593F0BBBDA56F1" \ - "ECF677152EF804370C1A305CAF3B5BF1" \ - "30879B56C61DE584A0F53A2447A51E" ) ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #1 (mul_mpi): " ); - - if( mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto cleanup; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - MPI_CHK( mpi_div_mpi( &X, &Y, &A, &N ) ); - - MPI_CHK( mpi_read_string( &U, 16, - "256567336059E52CAE22925474705F39A94" ) ); - - MPI_CHK( mpi_read_string( &V, 16, - "6613F26162223DF488E9CD48CC132C7A" \ - "0AC93C701B001B092E4E5B9F73BCD27B" \ - "9EE50D0657C77F374E903CDFA4C642" ) ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #2 (div_mpi): " ); - - if( mpi_cmp_mpi( &X, &U ) != 0 || - mpi_cmp_mpi( &Y, &V ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto cleanup; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - MPI_CHK( mpi_exp_mod( &X, &A, &E, &N, NULL ) ); - - MPI_CHK( mpi_read_string( &U, 16, - "36E139AEA55215609D2816998ED020BB" \ - "BD96C37890F65171D948E9BC7CBAA4D9" \ - "325D24D6A3C12710F10A09FA08AB87" ) ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #3 (exp_mod): " ); - - if( mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto cleanup; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - MPI_CHK( mpi_inv_mod( &X, &A, &N ) ); - - MPI_CHK( mpi_read_string( &U, 16, - "003A0AAEDD7E784FC07D8F9EC6E3BFD5" \ - "C3DBA76456363A10869622EAC2DD84EC" \ - "C5B8A74DAC4D09E03B5E0BE779F2DF61" ) ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #4 (inv_mod): " ); - - if( mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto cleanup; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( " MPI test #5 (simple gcd): " ); - - for( i = 0; i < GCD_PAIR_COUNT; i++ ) - { - MPI_CHK( mpi_lset( &X, gcd_pairs[i][0] ) ); - MPI_CHK( mpi_lset( &Y, gcd_pairs[i][1] ) ); - - MPI_CHK( mpi_gcd( &A, &X, &Y ) ); - - if( mpi_cmp_int( &A, gcd_pairs[i][2] ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed at %d\n", i ); - - ret = 1; - goto cleanup; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - -cleanup: - - if( ret != 0 && verbose != 0 ) - polarssl_printf( "Unexpected error, return code = %08X\n", ret ); - - mpi_free( &A ); mpi_free( &E ); mpi_free( &N ); mpi_free( &X ); - mpi_free( &Y ); mpi_free( &U ); mpi_free( &V ); - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#if defined(CTR_DRBG_POLARSSL_SELF_TEST) - -#include "polarssl/ctr_drbg.h" -#include - -static unsigned char entropy_source_pr[96] = - { 0xc1, 0x80, 0x81, 0xa6, 0x5d, 0x44, 0x02, 0x16, - 0x19, 0xb3, 0xf1, 0x80, 0xb1, 0xc9, 0x20, 0x02, - 0x6a, 0x54, 0x6f, 0x0c, 0x70, 0x81, 0x49, 0x8b, - 0x6e, 0xa6, 0x62, 0x52, 0x6d, 0x51, 0xb1, 0xcb, - 0x58, 0x3b, 0xfa, 0xd5, 0x37, 0x5f, 0xfb, 0xc9, - 0xff, 0x46, 0xd2, 0x19, 0xc7, 0x22, 0x3e, 0x95, - 0x45, 0x9d, 0x82, 0xe1, 0xe7, 0x22, 0x9f, 0x63, - 0x31, 0x69, 0xd2, 0x6b, 0x57, 0x47, 0x4f, 0xa3, - 0x37, 0xc9, 0x98, 0x1c, 0x0b, 0xfb, 0x91, 0x31, - 0x4d, 0x55, 0xb9, 0xe9, 0x1c, 0x5a, 0x5e, 0xe4, - 0x93, 0x92, 0xcf, 0xc5, 0x23, 0x12, 0xd5, 0x56, - 0x2c, 0x4a, 0x6e, 0xff, 0xdc, 0x10, 0xd0, 0x68 }; - -static unsigned char entropy_source_nopr[64] = - { 0x5a, 0x19, 0x4d, 0x5e, 0x2b, 0x31, 0x58, 0x14, - 0x54, 0xde, 0xf6, 0x75, 0xfb, 0x79, 0x58, 0xfe, - 0xc7, 0xdb, 0x87, 0x3e, 0x56, 0x89, 0xfc, 0x9d, - 0x03, 0x21, 0x7c, 0x68, 0xd8, 0x03, 0x38, 0x20, - 0xf9, 0xe6, 0x5e, 0x04, 0xd8, 0x56, 0xf3, 0xa9, - 0xc4, 0x4a, 0x4c, 0xbd, 0xc1, 0xd0, 0x08, 0x46, - 0xf5, 0x98, 0x3d, 0x77, 0x1c, 0x1b, 0x13, 0x7e, - 0x4e, 0x0f, 0x9d, 0x8e, 0xf4, 0x09, 0xf9, 0x2e }; - -static const unsigned char nonce_pers_pr[16] = - { 0xd2, 0x54, 0xfc, 0xff, 0x02, 0x1e, 0x69, 0xd2, - 0x29, 0xc9, 0xcf, 0xad, 0x85, 0xfa, 0x48, 0x6c }; - -static const unsigned char nonce_pers_nopr[16] = - { 0x1b, 0x54, 0xb8, 0xff, 0x06, 0x42, 0xbf, 0xf5, - 0x21, 0xf1, 0x5c, 0x1c, 0x0b, 0x66, 0x5f, 0x3f }; - -static const unsigned char ctr_drbg_result_pr[16] = - { 0x34, 0x01, 0x16, 0x56, 0xb4, 0x29, 0x00, 0x8f, - 0x35, 0x63, 0xec, 0xb5, 0xf2, 0x59, 0x07, 0x23 }; - -static const unsigned char ctr_drbg_result_nopr[16] = - { 0xa0, 0x54, 0x30, 0x3d, 0x8a, 0x7e, 0xa9, 0x88, - 0x9d, 0x90, 0x3e, 0x07, 0x7c, 0x6f, 0x21, 0x8f }; - -static size_t test_offset; -static int ctr_drbg_self_test_entropy( void *data, unsigned char *buf, - size_t len ) -{ - const unsigned char *p = data; - memcpy( buf, p + test_offset, len ); - test_offset += len; - return( 0 ); -} - -#define CHK( c ) if( (c) != 0 ) \ - { \ - if( verbose != 0 ) \ - polarssl_printf( "failed\n" ); \ - return( 1 ); \ - } - -/* - * Checkup routine - */ -int ctr_drbg_self_test( int verbose ) -{ - ctr_drbg_context ctx; - unsigned char buf[16]; - - /* - * Based on a NIST CTR_DRBG test vector (PR = True) - */ - if( verbose != 0 ) - polarssl_printf( " CTR_DRBG (PR = TRUE) : " ); - - test_offset = 0; - CHK( ctr_drbg_init_entropy_len( &ctx, ctr_drbg_self_test_entropy, - entropy_source_pr, nonce_pers_pr, 16, 32 ) ); - ctr_drbg_set_prediction_resistance( &ctx, CTR_DRBG_PR_ON ); - CHK( ctr_drbg_random( &ctx, buf, CTR_DRBG_BLOCKSIZE ) ); - CHK( ctr_drbg_random( &ctx, buf, CTR_DRBG_BLOCKSIZE ) ); - CHK( memcmp( buf, ctr_drbg_result_pr, CTR_DRBG_BLOCKSIZE ) ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - /* - * Based on a NIST CTR_DRBG test vector (PR = FALSE) - */ - if( verbose != 0 ) - polarssl_printf( " CTR_DRBG (PR = FALSE): " ); - - test_offset = 0; - CHK( ctr_drbg_init_entropy_len( &ctx, ctr_drbg_self_test_entropy, - entropy_source_nopr, nonce_pers_nopr, 16, 32 ) ); - CHK( ctr_drbg_random( &ctx, buf, 16 ) ); - CHK( ctr_drbg_reseed( &ctx, NULL, 0 ) ); - CHK( ctr_drbg_random( &ctx, buf, 16 ) ); - CHK( memcmp( buf, ctr_drbg_result_nopr, 16 ) ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} -#endif /* POLARSSL_SELF_TEST */ - -#if defined(DES_POLARSSL_SELF_TEST) - -#include "polarssl/des.h" -#include - -/* - * DES and 3DES test vectors from: - * - * http://csrc.nist.gov/groups/STM/cavp/documents/des/tripledes-vectors.zip - */ -static const unsigned char des3_test_keys[24] = -{ - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, - 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23 -}; - -static const unsigned char des3_test_buf[8] = -{ - 0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74 -}; - -static const unsigned char des3_test_ecb_dec[3][8] = -{ - { 0xCD, 0xD6, 0x4F, 0x2F, 0x94, 0x27, 0xC1, 0x5D }, - { 0x69, 0x96, 0xC8, 0xFA, 0x47, 0xA2, 0xAB, 0xEB }, - { 0x83, 0x25, 0x39, 0x76, 0x44, 0x09, 0x1A, 0x0A } -}; - -static const unsigned char des3_test_ecb_enc[3][8] = -{ - { 0x6A, 0x2A, 0x19, 0xF4, 0x1E, 0xCA, 0x85, 0x4B }, - { 0x03, 0xE6, 0x9F, 0x5B, 0xFA, 0x58, 0xEB, 0x42 }, - { 0xDD, 0x17, 0xE8, 0xB8, 0xB4, 0x37, 0xD2, 0x32 } -}; - -#if defined(POLARSSL_CIPHER_MODE_CBC) -static const unsigned char des3_test_iv[8] = -{ - 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, -}; - -static const unsigned char des3_test_cbc_dec[3][8] = -{ - { 0x12, 0x9F, 0x40, 0xB9, 0xD2, 0x00, 0x56, 0xB3 }, - { 0x47, 0x0E, 0xFC, 0x9A, 0x6B, 0x8E, 0xE3, 0x93 }, - { 0xC5, 0xCE, 0xCF, 0x63, 0xEC, 0xEC, 0x51, 0x4C } -}; - -static const unsigned char des3_test_cbc_enc[3][8] = -{ - { 0x54, 0xF1, 0x5A, 0xF6, 0xEB, 0xE3, 0xA4, 0xB4 }, - { 0x35, 0x76, 0x11, 0x56, 0x5F, 0xA1, 0x8E, 0x4D }, - { 0xCB, 0x19, 0x1F, 0x85, 0xD1, 0xED, 0x84, 0x39 } -}; -#endif /* POLARSSL_CIPHER_MODE_CBC */ - -/* - * Checkup routine - */ -int des_self_test( int verbose ) -{ - int i, j, u, v, ret = 0; - des_context ctx; - des3_context ctx3; - unsigned char buf[8]; -#if defined(POLARSSL_CIPHER_MODE_CBC) - unsigned char prv[8]; - unsigned char iv[8]; -#endif - - des_init( &ctx ); - des3_init( &ctx3 ); - /* - * ECB mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " DES%c-ECB-%3d (%s): ", - ( u == 0 ) ? ' ' : '3', 56 + u * 56, - ( v == DES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( buf, des3_test_buf, 8 ); - - switch( i ) - { - case 0: - des_setkey_dec( &ctx, des3_test_keys ); - break; - - case 1: - des_setkey_enc( &ctx, des3_test_keys ); - break; - - case 2: - des3_set2key_dec( &ctx3, des3_test_keys ); - break; - - case 3: - des3_set2key_enc( &ctx3, des3_test_keys ); - break; - - case 4: - des3_set3key_dec( &ctx3, des3_test_keys ); - break; - - case 5: - des3_set3key_enc( &ctx3, des3_test_keys ); - break; - - default: - return( 1 ); - } - - for( j = 0; j < 10000; j++ ) - { - if( u == 0 ) - des_crypt_ecb( &ctx, buf, buf ); - else - des3_crypt_ecb( &ctx3, buf, buf ); - } - - if( ( v == DES_DECRYPT && - memcmp( buf, des3_test_ecb_dec[u], 8 ) != 0 ) || - ( v != DES_DECRYPT && - memcmp( buf, des3_test_ecb_enc[u], 8 ) != 0 ) ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -#if defined(POLARSSL_CIPHER_MODE_CBC) - /* - * CBC mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - polarssl_printf( " DES%c-CBC-%3d (%s): ", - ( u == 0 ) ? ' ' : '3', 56 + u * 56, - ( v == DES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( iv, des3_test_iv, 8 ); - memcpy( prv, des3_test_iv, 8 ); - memcpy( buf, des3_test_buf, 8 ); - - switch( i ) - { - case 0: - des_setkey_dec( &ctx, des3_test_keys ); - break; - - case 1: - des_setkey_enc( &ctx, des3_test_keys ); - break; - - case 2: - des3_set2key_dec( &ctx3, des3_test_keys ); - break; - - case 3: - des3_set2key_enc( &ctx3, des3_test_keys ); - break; - - case 4: - des3_set3key_dec( &ctx3, des3_test_keys ); - break; - - case 5: - des3_set3key_enc( &ctx3, des3_test_keys ); - break; - - default: - return( 1 ); - } - - if( v == DES_DECRYPT ) - { - for( j = 0; j < 10000; j++ ) - { - if( u == 0 ) - des_crypt_cbc( &ctx, v, 8, iv, buf, buf ); - else - des3_crypt_cbc( &ctx3, v, 8, iv, buf, buf ); - } - } - else - { - for( j = 0; j < 10000; j++ ) - { - unsigned char tmp[8]; - - if( u == 0 ) - des_crypt_cbc( &ctx, v, 8, iv, buf, buf ); - else - des3_crypt_cbc( &ctx3, v, 8, iv, buf, buf ); - - memcpy( tmp, prv, 8 ); - memcpy( prv, buf, 8 ); - memcpy( buf, tmp, 8 ); - } - - memcpy( buf, prv, 8 ); - } - - if( ( v == DES_DECRYPT && - memcmp( buf, des3_test_cbc_dec[u], 8 ) != 0 ) || - ( v != DES_DECRYPT && - memcmp( buf, des3_test_cbc_enc[u], 8 ) != 0 ) ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } -#endif /* POLARSSL_CIPHER_MODE_CBC */ - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - des_free( &ctx ); - des3_free( &ctx3 ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#if defined(DHM_POLARSSL_SELF_TEST) - -#include "polarssl/dhm.h" -#include "polarssl/certs.h" - -/* - * Checkup routine - */ -int dhm_self_test( int verbose ) -{ -#if defined(POLARSSL_CERTS_C) - int ret; - dhm_context dhm; - - dhm_init( &dhm ); - - if( verbose != 0 ) - polarssl_printf( " DHM parameter load: " ); - - if( ( ret = dhm_parse_dhm( &dhm, (const unsigned char *) test_dhm_params, - strlen( test_dhm_params ) ) ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n\n" ); - -exit: - dhm_free( &dhm ); - - return( ret ); -#else - if( verbose != 0 ) - polarssl_printf( " DHM parameter load: skipped\n" ); - - return( 0 ); -#endif /* POLARSSL_CERTS_C */ -} - -#endif /* POLARSSL_SELF_TEST */ - -#if defined(ECP_POLARSSL_SELF_TEST) - -#include "polarssl/ecp.h" - -/* - * Counts of point addition and doubling, and field multiplications. - * Used to test resistance of point multiplication to simple timing attacks. - */ -extern unsigned long add_count, dbl_count, mul_count; - -/* - * Checkup routine - */ -int ecp_self_test( int verbose ) -{ - int ret; - size_t i; - ecp_group grp; - ecp_point R, P; - mpi m; - unsigned long add_c_prev, dbl_c_prev, mul_c_prev; - /* exponents especially adapted for secp192r1 */ - const char *exponents[] = - { - "000000000000000000000000000000000000000000000001", /* one */ - "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22830", /* N - 1 */ - "5EA6F389A38B8BC81E767753B15AA5569E1782E30ABE7D25", /* random */ - "400000000000000000000000000000000000000000000000", /* one and zeros */ - "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", /* all ones */ - "555555555555555555555555555555555555555555555555", /* 101010... */ - }; - - ecp_group_init( &grp ); - ecp_point_init( &R ); - ecp_point_init( &P ); - mpi_init( &m ); - - /* Use secp192r1 if available, or any available curve */ -#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) - MPI_CHK( ecp_use_known_dp( &grp, POLARSSL_ECP_DP_SECP192R1 ) ); -#else - MPI_CHK( ecp_use_known_dp( &grp, ecp_curve_list()->grp_id ) ); -#endif - - if( verbose != 0 ) - polarssl_printf( " ECP test #1 (constant op_count, base point G): " ); - - /* Do a dummy multiplication first to trigger precomputation */ - MPI_CHK( mpi_lset( &m, 2 ) ); - MPI_CHK( ecp_mul( &grp, &P, &m, &grp.G, NULL, NULL ) ); - - add_count = 0; - dbl_count = 0; - mul_count = 0; - MPI_CHK( mpi_read_string( &m, 16, exponents[0] ) ); - MPI_CHK( ecp_mul( &grp, &R, &m, &grp.G, NULL, NULL ) ); - - for( i = 1; i < sizeof( exponents ) / sizeof( exponents[0] ); i++ ) - { - add_c_prev = add_count; - dbl_c_prev = dbl_count; - mul_c_prev = mul_count; - add_count = 0; - dbl_count = 0; - mul_count = 0; - - MPI_CHK( mpi_read_string( &m, 16, exponents[i] ) ); - MPI_CHK( ecp_mul( &grp, &R, &m, &grp.G, NULL, NULL ) ); - - if( add_count != add_c_prev || - dbl_count != dbl_c_prev || - mul_count != mul_c_prev ) - { - if( verbose != 0 ) - polarssl_printf( "failed (%u)\n", (unsigned int) i ); - - ret = 1; - goto cleanup; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( " ECP test #2 (constant op_count, other point): " ); - /* We computed P = 2G last time, use it */ - - add_count = 0; - dbl_count = 0; - mul_count = 0; - MPI_CHK( mpi_read_string( &m, 16, exponents[0] ) ); - MPI_CHK( ecp_mul( &grp, &R, &m, &P, NULL, NULL ) ); - - for( i = 1; i < sizeof( exponents ) / sizeof( exponents[0] ); i++ ) - { - add_c_prev = add_count; - dbl_c_prev = dbl_count; - mul_c_prev = mul_count; - add_count = 0; - dbl_count = 0; - mul_count = 0; - - MPI_CHK( mpi_read_string( &m, 16, exponents[i] ) ); - MPI_CHK( ecp_mul( &grp, &R, &m, &P, NULL, NULL ) ); - - if( add_count != add_c_prev || - dbl_count != dbl_c_prev || - mul_count != mul_c_prev ) - { - if( verbose != 0 ) - polarssl_printf( "failed (%u)\n", (unsigned int) i ); - - ret = 1; - goto cleanup; - } - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - -cleanup: - - if( ret < 0 && verbose != 0 ) - polarssl_printf( "Unexpected error, return code = %08X\n", ret ); - - ecp_group_free( &grp ); - ecp_point_free( &R ); - ecp_point_free( &P ); - mpi_free( &m ); - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#if defined(HMAC_DRBG_POLARSSL_SELF_TEST) - -#include "polarssl/hmac_drbg.h" -#include - -#if !defined(POLARSSL_SHA1_C) -/* Dummy checkup routine */ -int hmac_drbg_self_test( int verbose ) -{ - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} -#else - -#define OUTPUT_LEN 80 - -/* From a NIST PR=true test vector */ -static unsigned char entropy_pr[] = { - 0xa0, 0xc9, 0xab, 0x58, 0xf1, 0xe2, 0xe5, 0xa4, 0xde, 0x3e, 0xbd, 0x4f, - 0xf7, 0x3e, 0x9c, 0x5b, 0x64, 0xef, 0xd8, 0xca, 0x02, 0x8c, 0xf8, 0x11, - 0x48, 0xa5, 0x84, 0xfe, 0x69, 0xab, 0x5a, 0xee, 0x42, 0xaa, 0x4d, 0x42, - 0x17, 0x60, 0x99, 0xd4, 0x5e, 0x13, 0x97, 0xdc, 0x40, 0x4d, 0x86, 0xa3, - 0x7b, 0xf5, 0x59, 0x54, 0x75, 0x69, 0x51, 0xe4 }; -static const unsigned char hmac_drbg_result_pr[OUTPUT_LEN] = { - 0x9a, 0x00, 0xa2, 0xd0, 0x0e, 0xd5, 0x9b, 0xfe, 0x31, 0xec, 0xb1, 0x39, - 0x9b, 0x60, 0x81, 0x48, 0xd1, 0x96, 0x9d, 0x25, 0x0d, 0x3c, 0x1e, 0x94, - 0x10, 0x10, 0x98, 0x12, 0x93, 0x25, 0xca, 0xb8, 0xfc, 0xcc, 0x2d, 0x54, - 0x73, 0x19, 0x70, 0xc0, 0x10, 0x7a, 0xa4, 0x89, 0x25, 0x19, 0x95, 0x5e, - 0x4b, 0xc6, 0x00, 0x1d, 0x7f, 0x4e, 0x6a, 0x2b, 0xf8, 0xa3, 0x01, 0xab, - 0x46, 0x05, 0x5c, 0x09, 0xa6, 0x71, 0x88, 0xf1, 0xa7, 0x40, 0xee, 0xf3, - 0xe1, 0x5c, 0x02, 0x9b, 0x44, 0xaf, 0x03, 0x44 }; - -/* From a NIST PR=false test vector */ -static unsigned char entropy_nopr[] = { - 0x79, 0x34, 0x9b, 0xbf, 0x7c, 0xdd, 0xa5, 0x79, 0x95, 0x57, 0x86, 0x66, - 0x21, 0xc9, 0x13, 0x83, 0x11, 0x46, 0x73, 0x3a, 0xbf, 0x8c, 0x35, 0xc8, - 0xc7, 0x21, 0x5b, 0x5b, 0x96, 0xc4, 0x8e, 0x9b, 0x33, 0x8c, 0x74, 0xe3, - 0xe9, 0x9d, 0xfe, 0xdf }; -static const unsigned char hmac_drbg_result_nopr[OUTPUT_LEN] = { - 0xc6, 0xa1, 0x6a, 0xb8, 0xd4, 0x20, 0x70, 0x6f, 0x0f, 0x34, 0xab, 0x7f, - 0xec, 0x5a, 0xdc, 0xa9, 0xd8, 0xca, 0x3a, 0x13, 0x3e, 0x15, 0x9c, 0xa6, - 0xac, 0x43, 0xc6, 0xf8, 0xa2, 0xbe, 0x22, 0x83, 0x4a, 0x4c, 0x0a, 0x0a, - 0xff, 0xb1, 0x0d, 0x71, 0x94, 0xf1, 0xc1, 0xa5, 0xcf, 0x73, 0x22, 0xec, - 0x1a, 0xe0, 0x96, 0x4e, 0xd4, 0xbf, 0x12, 0x27, 0x46, 0xe0, 0x87, 0xfd, - 0xb5, 0xb3, 0xe9, 0x1b, 0x34, 0x93, 0xd5, 0xbb, 0x98, 0xfa, 0xed, 0x49, - 0xe8, 0x5f, 0x13, 0x0f, 0xc8, 0xa4, 0x59, 0xb7 }; - -/* "Entropy" from buffer */ -static size_t test_offset; -static int hmac_drbg_self_test_entropy( void *data, - unsigned char *buf, size_t len ) -{ - const unsigned char *p = data; - memcpy( buf, p + test_offset, len ); - test_offset += len; - return( 0 ); -} - -#define CHK( c ) if( (c) != 0 ) \ - { \ - if( verbose != 0 ) \ - polarssl_printf( "failed\n" ); \ - return( 1 ); \ - } - -/* - * Checkup routine for HMAC_DRBG with SHA-1 - */ -int hmac_drbg_self_test( int verbose ) -{ - hmac_drbg_context ctx; - unsigned char buf[OUTPUT_LEN]; - const md_info_t *md_info = md_info_from_type( POLARSSL_MD_SHA1 ); - - /* - * PR = True - */ - if( verbose != 0 ) - polarssl_printf( " HMAC_DRBG (PR = True) : " ); - - test_offset = 0; - CHK( hmac_drbg_init( &ctx, md_info, - hmac_drbg_self_test_entropy, entropy_pr, - NULL, 0 ) ); - hmac_drbg_set_prediction_resistance( &ctx, POLARSSL_HMAC_DRBG_PR_ON ); - CHK( hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); - CHK( hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); - CHK( memcmp( buf, hmac_drbg_result_pr, OUTPUT_LEN ) ); - hmac_drbg_free( &ctx ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - /* - * PR = False - */ - if( verbose != 0 ) - polarssl_printf( " HMAC_DRBG (PR = False) : " ); - - test_offset = 0; - CHK( hmac_drbg_init( &ctx, md_info, - hmac_drbg_self_test_entropy, entropy_nopr, - NULL, 0 ) ); - CHK( hmac_drbg_reseed( &ctx, NULL, 0 ) ); - CHK( hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); - CHK( hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); - CHK( memcmp( buf, hmac_drbg_result_nopr, OUTPUT_LEN ) ); - hmac_drbg_free( &ctx ); - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} -#endif /* POLARSSL_SHA1_C */ -#endif /* POLARSSL_SELF_TEST */ - -#if defined(MD5_POLARSSL_SELF_TEST) - -#include "polarssl/md5.h" - -/* - * RFC 1321 test vectors - */ -static unsigned char md5_test_buf[7][81] = -{ - { "" }, - { "a" }, - { "abc" }, - { "message digest" }, - { "abcdefghijklmnopqrstuvwxyz" }, - { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, - { "12345678901234567890123456789012345678901234567890123456789012" \ - "345678901234567890" } -}; - -static const int md5_test_buflen[7] = -{ - 0, 1, 3, 14, 26, 62, 80 -}; - -static const unsigned char md5_test_sum[7][16] = -{ - { 0xD4, 0x1D, 0x8C, 0xD9, 0x8F, 0x00, 0xB2, 0x04, - 0xE9, 0x80, 0x09, 0x98, 0xEC, 0xF8, 0x42, 0x7E }, - { 0x0C, 0xC1, 0x75, 0xB9, 0xC0, 0xF1, 0xB6, 0xA8, - 0x31, 0xC3, 0x99, 0xE2, 0x69, 0x77, 0x26, 0x61 }, - { 0x90, 0x01, 0x50, 0x98, 0x3C, 0xD2, 0x4F, 0xB0, - 0xD6, 0x96, 0x3F, 0x7D, 0x28, 0xE1, 0x7F, 0x72 }, - { 0xF9, 0x6B, 0x69, 0x7D, 0x7C, 0xB7, 0x93, 0x8D, - 0x52, 0x5A, 0x2F, 0x31, 0xAA, 0xF1, 0x61, 0xD0 }, - { 0xC3, 0xFC, 0xD3, 0xD7, 0x61, 0x92, 0xE4, 0x00, - 0x7D, 0xFB, 0x49, 0x6C, 0xCA, 0x67, 0xE1, 0x3B }, - { 0xD1, 0x74, 0xAB, 0x98, 0xD2, 0x77, 0xD9, 0xF5, - 0xA5, 0x61, 0x1C, 0x2C, 0x9F, 0x41, 0x9D, 0x9F }, - { 0x57, 0xED, 0xF4, 0xA2, 0x2B, 0xE3, 0xC9, 0x55, - 0xAC, 0x49, 0xDA, 0x2E, 0x21, 0x07, 0xB6, 0x7A } -}; - -/* - * RFC 2202 test vectors - */ -static unsigned char md5_hmac_test_key[7][26] = -{ - { "\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B" }, - { "Jefe" }, - { "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" }, - { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10" - "\x11\x12\x13\x14\x15\x16\x17\x18\x19" }, - { "\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C" }, - { "" }, /* 0xAA 80 times */ - { "" } -}; - -static const int md5_hmac_test_keylen[7] = -{ - 16, 4, 16, 25, 16, 80, 80 -}; - -static unsigned char md5_hmac_test_buf[7][74] = -{ - { "Hi There" }, - { "what do ya want for nothing?" }, - { "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" }, - { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" }, - { "Test With Truncation" }, - { "Test Using Larger Than Block-Size Key - Hash Key First" }, - { "Test Using Larger Than Block-Size Key and Larger" - " Than One Block-Size Data" } -}; - -static const int md5_hmac_test_buflen[7] = -{ - 8, 28, 50, 50, 20, 54, 73 -}; - -static const unsigned char md5_hmac_test_sum[7][16] = -{ - { 0x92, 0x94, 0x72, 0x7A, 0x36, 0x38, 0xBB, 0x1C, - 0x13, 0xF4, 0x8E, 0xF8, 0x15, 0x8B, 0xFC, 0x9D }, - { 0x75, 0x0C, 0x78, 0x3E, 0x6A, 0xB0, 0xB5, 0x03, - 0xEA, 0xA8, 0x6E, 0x31, 0x0A, 0x5D, 0xB7, 0x38 }, - { 0x56, 0xBE, 0x34, 0x52, 0x1D, 0x14, 0x4C, 0x88, - 0xDB, 0xB8, 0xC7, 0x33, 0xF0, 0xE8, 0xB3, 0xF6 }, - { 0x69, 0x7E, 0xAF, 0x0A, 0xCA, 0x3A, 0x3A, 0xEA, - 0x3A, 0x75, 0x16, 0x47, 0x46, 0xFF, 0xAA, 0x79 }, - { 0x56, 0x46, 0x1E, 0xF2, 0x34, 0x2E, 0xDC, 0x00, - 0xF9, 0xBA, 0xB9, 0x95 }, - { 0x6B, 0x1A, 0xB7, 0xFE, 0x4B, 0xD7, 0xBF, 0x8F, - 0x0B, 0x62, 0xE6, 0xCE, 0x61, 0xB9, 0xD0, 0xCD }, - { 0x6F, 0x63, 0x0F, 0xAD, 0x67, 0xCD, 0xA0, 0xEE, - 0x1F, 0xB1, 0xF5, 0x62, 0xDB, 0x3A, 0xA5, 0x3E } -}; - -/* - * Checkup routine - */ -int md5_self_test( int verbose ) -{ - int i, buflen; - unsigned char buf[1024]; - unsigned char md5sum[16]; - md5_context ctx; - - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " MD5 test #%d: ", i + 1 ); - - md5( md5_test_buf[i], md5_test_buflen[i], md5sum ); - - if( memcmp( md5sum, md5_test_sum[i], 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " HMAC-MD5 test #%d: ", i + 1 ); - - if( i == 5 || i == 6 ) - { - memset( buf, '\xAA', buflen = 80 ); - md5_hmac_starts( &ctx, buf, buflen ); - } - else - md5_hmac_starts( &ctx, md5_hmac_test_key[i], - md5_hmac_test_keylen[i] ); - - md5_hmac_update( &ctx, md5_hmac_test_buf[i], - md5_hmac_test_buflen[i] ); - - md5_hmac_finish( &ctx, md5sum ); - - buflen = ( i == 4 ) ? 12 : 16; - - if( memcmp( md5sum, md5_hmac_test_sum[i], buflen ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - return( 0 ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#if defined(RSA_POLARSSL_SELF_TEST) - -#include "polarssl/rsa.h" -#include "polarssl/oid.h" -#include "polarssl/sha1.h" - -/* - * Example RSA-1024 keypair, for test purposes - */ -#define KEY_LEN 128 - -#define RSA_N "9292758453063D803DD603D5E777D788" \ - "8ED1D5BF35786190FA2F23EBC0848AEA" \ - "DDA92CA6C3D80B32C4D109BE0F36D6AE" \ - "7130B9CED7ACDF54CFC7555AC14EEBAB" \ - "93A89813FBF3C4F8066D2D800F7C38A8" \ - "1AE31942917403FF4946B0A83D3D3E05" \ - "EE57C6F5F5606FB5D4BC6CD34EE0801A" \ - "5E94BB77B07507233A0BC7BAC8F90F79" - -#define RSA_E "10001" - -#define RSA_D "24BF6185468786FDD303083D25E64EFC" \ - "66CA472BC44D253102F8B4A9D3BFA750" \ - "91386C0077937FE33FA3252D28855837" \ - "AE1B484A8A9A45F7EE8C0C634F99E8CD" \ - "DF79C5CE07EE72C7F123142198164234" \ - "CABB724CF78B8173B9F880FC86322407" \ - "AF1FEDFDDE2BEB674CA15F3E81A1521E" \ - "071513A1E85B5DFA031F21ECAE91A34D" - -#define RSA_P "C36D0EB7FCD285223CFB5AABA5BDA3D8" \ - "2C01CAD19EA484A87EA4377637E75500" \ - "FCB2005C5C7DD6EC4AC023CDA285D796" \ - "C3D9E75E1EFC42488BB4F1D13AC30A57" - -#define RSA_Q "C000DF51A7C77AE8D7C7370C1FF55B69" \ - "E211C2B9E5DB1ED0BF61D0D9899620F4" \ - "910E4168387E3C30AA1E00C339A79508" \ - "8452DD96A9A5EA5D9DCA68DA636032AF" - -#define RSA_DP "C1ACF567564274FB07A0BBAD5D26E298" \ - "3C94D22288ACD763FD8E5600ED4A702D" \ - "F84198A5F06C2E72236AE490C93F07F8" \ - "3CC559CD27BC2D1CA488811730BB5725" - -#define RSA_DQ "4959CBF6F8FEF750AEE6977C155579C7" \ - "D8AAEA56749EA28623272E4F7D0592AF" \ - "7C1F1313CAC9471B5C523BFE592F517B" \ - "407A1BD76C164B93DA2D32A383E58357" - -#define RSA_QP "9AE7FBC99546432DF71896FC239EADAE" \ - "F38D18D2B2F0E2DD275AA977E2BF4411" \ - "F5A3B2A5D33605AEBBCCBA7FEB9F2D2F" \ - "A74206CEC169D74BF5A8C50D6F48EA08" - -#define PT_LEN 24 -#define RSA_PT "\xAA\xBB\xCC\x03\x02\x01\x00\xFF\xFF\xFF\xFF\xFF" \ - "\x11\x22\x33\x0A\x0B\x0C\xCC\xDD\xDD\xDD\xDD\xDD" - -#if defined(POLARSSL_PKCS1_V15) -static int myrand( void *rng_state, unsigned char *output, size_t len ) -{ -#if !defined(__OpenBSD__) - size_t i; - - if( rng_state != NULL ) - rng_state = NULL; - - for( i = 0; i < len; ++i ) - output[i] = Rand(); -#else - if( rng_state != NULL ) - rng_state = NULL; - - arc4random_buf( output, len ); -#endif /* !OpenBSD */ - - return( 0 ); -} -#endif /* POLARSSL_PKCS1_V15 */ - -/* - * Checkup routine - */ -int rsa_self_test( int verbose ) -{ - int ret = 0; -#if defined(POLARSSL_PKCS1_V15) - size_t len; - rsa_context rsa; - unsigned char rsa_plaintext[PT_LEN]; - unsigned char rsa_decrypted[PT_LEN]; - unsigned char rsa_ciphertext[KEY_LEN]; -#if defined(POLARSSL_SHA1_C) - unsigned char sha1sum[20]; -#endif - - rsa_init( &rsa, RSA_PKCS_V15, 0 ); - - rsa.len = KEY_LEN; - MPI_CHK( mpi_read_string( &rsa.N , 16, RSA_N ) ); - MPI_CHK( mpi_read_string( &rsa.E , 16, RSA_E ) ); - MPI_CHK( mpi_read_string( &rsa.D , 16, RSA_D ) ); - MPI_CHK( mpi_read_string( &rsa.P , 16, RSA_P ) ); - MPI_CHK( mpi_read_string( &rsa.Q , 16, RSA_Q ) ); - MPI_CHK( mpi_read_string( &rsa.DP, 16, RSA_DP ) ); - MPI_CHK( mpi_read_string( &rsa.DQ, 16, RSA_DQ ) ); - MPI_CHK( mpi_read_string( &rsa.QP, 16, RSA_QP ) ); - - if( verbose != 0 ) - polarssl_printf( " RSA key validation: " ); - - if( rsa_check_pubkey( &rsa ) != 0 || - rsa_check_privkey( &rsa ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n PKCS#1 encryption : " ); - - memcpy( rsa_plaintext, RSA_PT, PT_LEN ); - - if( rsa_pkcs1_encrypt( &rsa, myrand, NULL, RSA_PUBLIC, PT_LEN, - rsa_plaintext, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n PKCS#1 decryption : " ); - - if( rsa_pkcs1_decrypt( &rsa, myrand, NULL, RSA_PRIVATE, &len, - rsa_ciphertext, rsa_decrypted, - sizeof(rsa_decrypted) ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( memcmp( rsa_decrypted, rsa_plaintext, len ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - -#if defined(POLARSSL_SHA1_C) - if( verbose != 0 ) - polarssl_printf( "passed\n PKCS#1 data sign : " ); - - sha1( rsa_plaintext, PT_LEN, sha1sum ); - - if( rsa_pkcs1_sign( &rsa, myrand, NULL, RSA_PRIVATE, POLARSSL_MD_SHA1, 0, - sha1sum, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n PKCS#1 sig. verify: " ); - - if( rsa_pkcs1_verify( &rsa, NULL, NULL, RSA_PUBLIC, POLARSSL_MD_SHA1, 0, - sha1sum, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - return( 1 ); - } - - if( verbose != 0 ) - polarssl_printf( "passed\n\n" ); -#endif /* POLARSSL_SHA1_C */ - -cleanup: - rsa_free( &rsa ); -#else /* POLARSSL_PKCS1_V15 */ - ((void) verbose); -#endif /* POLARSSL_PKCS1_V15 */ - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#if defined(SHA1_POLARSSL_SELF_TEST) - -#include "polarssl/sha1.h" - -/* - * FIPS-180-1 test vectors - */ -static unsigned char sha1_test_buf[3][57] = -{ - { "abc" }, - { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" }, - { "" } -}; - -static const int sha1_test_buflen[3] = -{ - 3, 56, 1000 -}; - -static const unsigned char sha1_test_sum[3][20] = -{ - { 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E, - 0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D }, - { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE, - 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 }, - { 0x34, 0xAA, 0x97, 0x3C, 0xD4, 0xC4, 0xDA, 0xA4, 0xF6, 0x1E, - 0xEB, 0x2B, 0xDB, 0xAD, 0x27, 0x31, 0x65, 0x34, 0x01, 0x6F } -}; - -/* - * RFC 2202 test vectors - */ -static unsigned char sha1_hmac_test_key[7][26] = -{ - { "\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B" - "\x0B\x0B\x0B\x0B" }, - { "Jefe" }, - { "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" - "\xAA\xAA\xAA\xAA" }, - { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10" - "\x11\x12\x13\x14\x15\x16\x17\x18\x19" }, - { "\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C" - "\x0C\x0C\x0C\x0C" }, - { "" }, /* 0xAA 80 times */ - { "" } -}; - -static const int sha1_hmac_test_keylen[7] = -{ - 20, 4, 20, 25, 20, 80, 80 -}; - -static unsigned char sha1_hmac_test_buf[7][74] = -{ - { "Hi There" }, - { "what do ya want for nothing?" }, - { "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" }, - { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" }, - { "Test With Truncation" }, - { "Test Using Larger Than Block-Size Key - Hash Key First" }, - { "Test Using Larger Than Block-Size Key and Larger" - " Than One Block-Size Data" } -}; - -static const int sha1_hmac_test_buflen[7] = -{ - 8, 28, 50, 50, 20, 54, 73 -}; - -static const unsigned char sha1_hmac_test_sum[7][20] = -{ - { 0xB6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xE2, 0x8B, - 0xC0, 0xB6, 0xFB, 0x37, 0x8C, 0x8E, 0xF1, 0x46, 0xBE, 0x00 }, - { 0xEF, 0xFC, 0xDF, 0x6A, 0xE5, 0xEB, 0x2F, 0xA2, 0xD2, 0x74, - 0x16, 0xD5, 0xF1, 0x84, 0xDF, 0x9C, 0x25, 0x9A, 0x7C, 0x79 }, - { 0x12, 0x5D, 0x73, 0x42, 0xB9, 0xAC, 0x11, 0xCD, 0x91, 0xA3, - 0x9A, 0xF4, 0x8A, 0xA1, 0x7B, 0x4F, 0x63, 0xF1, 0x75, 0xD3 }, - { 0x4C, 0x90, 0x07, 0xF4, 0x02, 0x62, 0x50, 0xC6, 0xBC, 0x84, - 0x14, 0xF9, 0xBF, 0x50, 0xC8, 0x6C, 0x2D, 0x72, 0x35, 0xDA }, - { 0x4C, 0x1A, 0x03, 0x42, 0x4B, 0x55, 0xE0, 0x7F, 0xE7, 0xF2, - 0x7B, 0xE1 }, - { 0xAA, 0x4A, 0xE5, 0xE1, 0x52, 0x72, 0xD0, 0x0E, 0x95, 0x70, - 0x56, 0x37, 0xCE, 0x8A, 0x3B, 0x55, 0xED, 0x40, 0x21, 0x12 }, - { 0xE8, 0xE9, 0x9D, 0x0F, 0x45, 0x23, 0x7D, 0x78, 0x6D, 0x6B, - 0xBA, 0xA7, 0x96, 0x5C, 0x78, 0x08, 0xBB, 0xFF, 0x1A, 0x91 } -}; - -/* - * Checkup routine - */ -int sha1_self_test( int verbose ) -{ - int i, j, buflen, ret = 0; - unsigned char buf[1024]; - unsigned char sha1sum[20]; - sha1_context ctx; - - sha1_init( &ctx ); - - /* - * SHA-1 - */ - for( i = 0; i < 3; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " SHA-1 test #%d: ", i + 1 ); - - sha1_starts( &ctx ); - - if( i == 2 ) - { - memset( buf, 'a', buflen = 1000 ); - - for( j = 0; j < 1000; j++ ) - sha1_update( &ctx, buf, buflen ); - } - else - sha1_update( &ctx, sha1_test_buf[i], - sha1_test_buflen[i] ); - - sha1_finish( &ctx, sha1sum ); - - if( memcmp( sha1sum, sha1_test_sum[i], 20 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) - polarssl_printf( " HMAC-SHA-1 test #%d: ", i + 1 ); - - if( i == 5 || i == 6 ) - { - memset( buf, '\xAA', buflen = 80 ); - sha1_hmac_starts( &ctx, buf, buflen ); - } - else - sha1_hmac_starts( &ctx, sha1_hmac_test_key[i], - sha1_hmac_test_keylen[i] ); - - sha1_hmac_update( &ctx, sha1_hmac_test_buf[i], - sha1_hmac_test_buflen[i] ); - - sha1_hmac_finish( &ctx, sha1sum ); - - buflen = ( i == 4 ) ? 12 : 20; - - if( memcmp( sha1sum, sha1_hmac_test_sum[i], buflen ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - sha1_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#if defined(SHA256_POLARSSL_SELF_TEST) - -#include "polarssl/sha256.h" - -/* - * FIPS-180-2 test vectors - */ -static unsigned char sha256_test_buf[3][57] = -{ - { "abc" }, - { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" }, - { "" } -}; - -static const int sha256_test_buflen[3] = -{ - 3, 56, 1000 -}; - -static const unsigned char sha256_test_sum[6][32] = -{ - /* - * SHA-224 test vectors - */ - { 0x23, 0x09, 0x7D, 0x22, 0x34, 0x05, 0xD8, 0x22, - 0x86, 0x42, 0xA4, 0x77, 0xBD, 0xA2, 0x55, 0xB3, - 0x2A, 0xAD, 0xBC, 0xE4, 0xBD, 0xA0, 0xB3, 0xF7, - 0xE3, 0x6C, 0x9D, 0xA7 }, - { 0x75, 0x38, 0x8B, 0x16, 0x51, 0x27, 0x76, 0xCC, - 0x5D, 0xBA, 0x5D, 0xA1, 0xFD, 0x89, 0x01, 0x50, - 0xB0, 0xC6, 0x45, 0x5C, 0xB4, 0xF5, 0x8B, 0x19, - 0x52, 0x52, 0x25, 0x25 }, - { 0x20, 0x79, 0x46, 0x55, 0x98, 0x0C, 0x91, 0xD8, - 0xBB, 0xB4, 0xC1, 0xEA, 0x97, 0x61, 0x8A, 0x4B, - 0xF0, 0x3F, 0x42, 0x58, 0x19, 0x48, 0xB2, 0xEE, - 0x4E, 0xE7, 0xAD, 0x67 }, - - /* - * SHA-256 test vectors - */ - { 0xBA, 0x78, 0x16, 0xBF, 0x8F, 0x01, 0xCF, 0xEA, - 0x41, 0x41, 0x40, 0xDE, 0x5D, 0xAE, 0x22, 0x23, - 0xB0, 0x03, 0x61, 0xA3, 0x96, 0x17, 0x7A, 0x9C, - 0xB4, 0x10, 0xFF, 0x61, 0xF2, 0x00, 0x15, 0xAD }, - { 0x24, 0x8D, 0x6A, 0x61, 0xD2, 0x06, 0x38, 0xB8, - 0xE5, 0xC0, 0x26, 0x93, 0x0C, 0x3E, 0x60, 0x39, - 0xA3, 0x3C, 0xE4, 0x59, 0x64, 0xFF, 0x21, 0x67, - 0xF6, 0xEC, 0xED, 0xD4, 0x19, 0xDB, 0x06, 0xC1 }, - { 0xCD, 0xC7, 0x6E, 0x5C, 0x99, 0x14, 0xFB, 0x92, - 0x81, 0xA1, 0xC7, 0xE2, 0x84, 0xD7, 0x3E, 0x67, - 0xF1, 0x80, 0x9A, 0x48, 0xA4, 0x97, 0x20, 0x0E, - 0x04, 0x6D, 0x39, 0xCC, 0xC7, 0x11, 0x2C, 0xD0 } -}; - -/* - * RFC 4231 test vectors - */ -static unsigned char sha256_hmac_test_key[7][26] = -{ - { "\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B" - "\x0B\x0B\x0B\x0B" }, - { "Jefe" }, - { "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" - "\xAA\xAA\xAA\xAA" }, - { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10" - "\x11\x12\x13\x14\x15\x16\x17\x18\x19" }, - { "\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C" - "\x0C\x0C\x0C\x0C" }, - { "" }, /* 0xAA 131 times */ - { "" } -}; - -static const int sha256_hmac_test_keylen[7] = -{ - 20, 4, 20, 25, 20, 131, 131 -}; - -static unsigned char sha256_hmac_test_buf[7][153] = -{ - { "Hi There" }, - { "what do ya want for nothing?" }, - { "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" }, - { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" }, - { "Test With Truncation" }, - { "Test Using Larger Than Block-Size Key - Hash Key First" }, - { "This is a test using a larger than block-size key " - "and a larger than block-size data. The key needs to " - "be hashed before being used by the HMAC algorithm." } -}; - -static const int sha256_hmac_test_buflen[7] = -{ - 8, 28, 50, 50, 20, 54, 152 -}; - -static const unsigned char sha256_hmac_test_sum[14][32] = -{ - /* - * HMAC-SHA-224 test vectors - */ - { 0x89, 0x6F, 0xB1, 0x12, 0x8A, 0xBB, 0xDF, 0x19, - 0x68, 0x32, 0x10, 0x7C, 0xD4, 0x9D, 0xF3, 0x3F, - 0x47, 0xB4, 0xB1, 0x16, 0x99, 0x12, 0xBA, 0x4F, - 0x53, 0x68, 0x4B, 0x22 }, - { 0xA3, 0x0E, 0x01, 0x09, 0x8B, 0xC6, 0xDB, 0xBF, - 0x45, 0x69, 0x0F, 0x3A, 0x7E, 0x9E, 0x6D, 0x0F, - 0x8B, 0xBE, 0xA2, 0xA3, 0x9E, 0x61, 0x48, 0x00, - 0x8F, 0xD0, 0x5E, 0x44 }, - { 0x7F, 0xB3, 0xCB, 0x35, 0x88, 0xC6, 0xC1, 0xF6, - 0xFF, 0xA9, 0x69, 0x4D, 0x7D, 0x6A, 0xD2, 0x64, - 0x93, 0x65, 0xB0, 0xC1, 0xF6, 0x5D, 0x69, 0xD1, - 0xEC, 0x83, 0x33, 0xEA }, - { 0x6C, 0x11, 0x50, 0x68, 0x74, 0x01, 0x3C, 0xAC, - 0x6A, 0x2A, 0xBC, 0x1B, 0xB3, 0x82, 0x62, 0x7C, - 0xEC, 0x6A, 0x90, 0xD8, 0x6E, 0xFC, 0x01, 0x2D, - 0xE7, 0xAF, 0xEC, 0x5A }, - { 0x0E, 0x2A, 0xEA, 0x68, 0xA9, 0x0C, 0x8D, 0x37, - 0xC9, 0x88, 0xBC, 0xDB, 0x9F, 0xCA, 0x6F, 0xA8 }, - { 0x95, 0xE9, 0xA0, 0xDB, 0x96, 0x20, 0x95, 0xAD, - 0xAE, 0xBE, 0x9B, 0x2D, 0x6F, 0x0D, 0xBC, 0xE2, - 0xD4, 0x99, 0xF1, 0x12, 0xF2, 0xD2, 0xB7, 0x27, - 0x3F, 0xA6, 0x87, 0x0E }, - { 0x3A, 0x85, 0x41, 0x66, 0xAC, 0x5D, 0x9F, 0x02, - 0x3F, 0x54, 0xD5, 0x17, 0xD0, 0xB3, 0x9D, 0xBD, - 0x94, 0x67, 0x70, 0xDB, 0x9C, 0x2B, 0x95, 0xC9, - 0xF6, 0xF5, 0x65, 0xD1 }, - - /* - * HMAC-SHA-256 test vectors - */ - { 0xB0, 0x34, 0x4C, 0x61, 0xD8, 0xDB, 0x38, 0x53, - 0x5C, 0xA8, 0xAF, 0xCE, 0xAF, 0x0B, 0xF1, 0x2B, - 0x88, 0x1D, 0xC2, 0x00, 0xC9, 0x83, 0x3D, 0xA7, - 0x26, 0xE9, 0x37, 0x6C, 0x2E, 0x32, 0xCF, 0xF7 }, - { 0x5B, 0xDC, 0xC1, 0x46, 0xBF, 0x60, 0x75, 0x4E, - 0x6A, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xC7, - 0x5A, 0x00, 0x3F, 0x08, 0x9D, 0x27, 0x39, 0x83, - 0x9D, 0xEC, 0x58, 0xB9, 0x64, 0xEC, 0x38, 0x43 }, - { 0x77, 0x3E, 0xA9, 0x1E, 0x36, 0x80, 0x0E, 0x46, - 0x85, 0x4D, 0xB8, 0xEB, 0xD0, 0x91, 0x81, 0xA7, - 0x29, 0x59, 0x09, 0x8B, 0x3E, 0xF8, 0xC1, 0x22, - 0xD9, 0x63, 0x55, 0x14, 0xCE, 0xD5, 0x65, 0xFE }, - { 0x82, 0x55, 0x8A, 0x38, 0x9A, 0x44, 0x3C, 0x0E, - 0xA4, 0xCC, 0x81, 0x98, 0x99, 0xF2, 0x08, 0x3A, - 0x85, 0xF0, 0xFA, 0xA3, 0xE5, 0x78, 0xF8, 0x07, - 0x7A, 0x2E, 0x3F, 0xF4, 0x67, 0x29, 0x66, 0x5B }, - { 0xA3, 0xB6, 0x16, 0x74, 0x73, 0x10, 0x0E, 0xE0, - 0x6E, 0x0C, 0x79, 0x6C, 0x29, 0x55, 0x55, 0x2B }, - { 0x60, 0xE4, 0x31, 0x59, 0x1E, 0xE0, 0xB6, 0x7F, - 0x0D, 0x8A, 0x26, 0xAA, 0xCB, 0xF5, 0xB7, 0x7F, - 0x8E, 0x0B, 0xC6, 0x21, 0x37, 0x28, 0xC5, 0x14, - 0x05, 0x46, 0x04, 0x0F, 0x0E, 0xE3, 0x7F, 0x54 }, - { 0x9B, 0x09, 0xFF, 0xA7, 0x1B, 0x94, 0x2F, 0xCB, - 0x27, 0x63, 0x5F, 0xBC, 0xD5, 0xB0, 0xE9, 0x44, - 0xBF, 0xDC, 0x63, 0x64, 0x4F, 0x07, 0x13, 0x93, - 0x8A, 0x7F, 0x51, 0x53, 0x5C, 0x3A, 0x35, 0xE2 } -}; - -/* - * Checkup routine - */ -int sha256_self_test( int verbose ) -{ - int i, j, k, buflen, ret = 0; - unsigned char buf[1024]; - unsigned char sha256sum[32]; - sha256_context ctx; - - sha256_init( &ctx ); - - for( i = 0; i < 6; i++ ) - { - j = i % 3; - k = i < 3; - - if( verbose != 0 ) - polarssl_printf( " SHA-%d test #%d: ", 256 - k * 32, j + 1 ); - - sha256_starts( &ctx, k ); - - if( j == 2 ) - { - memset( buf, 'a', buflen = 1000 ); - - for( j = 0; j < 1000; j++ ) - sha256_update( &ctx, buf, buflen ); - } - else - sha256_update( &ctx, sha256_test_buf[j], - sha256_test_buflen[j] ); - - sha256_finish( &ctx, sha256sum ); - - if( memcmp( sha256sum, sha256_test_sum[i], 32 - k * 4 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - for( i = 0; i < 14; i++ ) - { - j = i % 7; - k = i < 7; - - if( verbose != 0 ) - polarssl_printf( " HMAC-SHA-%d test #%d: ", 256 - k * 32, j + 1 ); - - if( j == 5 || j == 6 ) - { - memset( buf, '\xAA', buflen = 131 ); - sha256_hmac_starts( &ctx, buf, buflen, k ); - } - else - sha256_hmac_starts( &ctx, sha256_hmac_test_key[j], - sha256_hmac_test_keylen[j], k ); - - sha256_hmac_update( &ctx, sha256_hmac_test_buf[j], - sha256_hmac_test_buflen[j] ); - - sha256_hmac_finish( &ctx, sha256sum ); - - buflen = ( j == 4 ) ? 16 : 32 - k * 4; - - if( memcmp( sha256sum, sha256_hmac_test_sum[i], buflen ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - sha256_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -#if defined(SHA512_POLARSSL_SELF_TEST) - -#include "polarssl/sha512.h" - -/* - * FIPS-180-2 test vectors - */ -static unsigned char sha512_test_buf[3][113] = -{ - { "abc" }, - { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" - "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" }, - { "" } -}; - -static const int sha512_test_buflen[3] = -{ - 3, 112, 1000 -}; - -static const unsigned char sha512_test_sum[6][64] = -{ - /* - * SHA-384 test vectors - */ - { 0xCB, 0x00, 0x75, 0x3F, 0x45, 0xA3, 0x5E, 0x8B, - 0xB5, 0xA0, 0x3D, 0x69, 0x9A, 0xC6, 0x50, 0x07, - 0x27, 0x2C, 0x32, 0xAB, 0x0E, 0xDE, 0xD1, 0x63, - 0x1A, 0x8B, 0x60, 0x5A, 0x43, 0xFF, 0x5B, 0xED, - 0x80, 0x86, 0x07, 0x2B, 0xA1, 0xE7, 0xCC, 0x23, - 0x58, 0xBA, 0xEC, 0xA1, 0x34, 0xC8, 0x25, 0xA7 }, - { 0x09, 0x33, 0x0C, 0x33, 0xF7, 0x11, 0x47, 0xE8, - 0x3D, 0x19, 0x2F, 0xC7, 0x82, 0xCD, 0x1B, 0x47, - 0x53, 0x11, 0x1B, 0x17, 0x3B, 0x3B, 0x05, 0xD2, - 0x2F, 0xA0, 0x80, 0x86, 0xE3, 0xB0, 0xF7, 0x12, - 0xFC, 0xC7, 0xC7, 0x1A, 0x55, 0x7E, 0x2D, 0xB9, - 0x66, 0xC3, 0xE9, 0xFA, 0x91, 0x74, 0x60, 0x39 }, - { 0x9D, 0x0E, 0x18, 0x09, 0x71, 0x64, 0x74, 0xCB, - 0x08, 0x6E, 0x83, 0x4E, 0x31, 0x0A, 0x4A, 0x1C, - 0xED, 0x14, 0x9E, 0x9C, 0x00, 0xF2, 0x48, 0x52, - 0x79, 0x72, 0xCE, 0xC5, 0x70, 0x4C, 0x2A, 0x5B, - 0x07, 0xB8, 0xB3, 0xDC, 0x38, 0xEC, 0xC4, 0xEB, - 0xAE, 0x97, 0xDD, 0xD8, 0x7F, 0x3D, 0x89, 0x85 }, - - /* - * SHA-512 test vectors - */ - { 0xDD, 0xAF, 0x35, 0xA1, 0x93, 0x61, 0x7A, 0xBA, - 0xCC, 0x41, 0x73, 0x49, 0xAE, 0x20, 0x41, 0x31, - 0x12, 0xE6, 0xFA, 0x4E, 0x89, 0xA9, 0x7E, 0xA2, - 0x0A, 0x9E, 0xEE, 0xE6, 0x4B, 0x55, 0xD3, 0x9A, - 0x21, 0x92, 0x99, 0x2A, 0x27, 0x4F, 0xC1, 0xA8, - 0x36, 0xBA, 0x3C, 0x23, 0xA3, 0xFE, 0xEB, 0xBD, - 0x45, 0x4D, 0x44, 0x23, 0x64, 0x3C, 0xE8, 0x0E, - 0x2A, 0x9A, 0xC9, 0x4F, 0xA5, 0x4C, 0xA4, 0x9F }, - { 0x8E, 0x95, 0x9B, 0x75, 0xDA, 0xE3, 0x13, 0xDA, - 0x8C, 0xF4, 0xF7, 0x28, 0x14, 0xFC, 0x14, 0x3F, - 0x8F, 0x77, 0x79, 0xC6, 0xEB, 0x9F, 0x7F, 0xA1, - 0x72, 0x99, 0xAE, 0xAD, 0xB6, 0x88, 0x90, 0x18, - 0x50, 0x1D, 0x28, 0x9E, 0x49, 0x00, 0xF7, 0xE4, - 0x33, 0x1B, 0x99, 0xDE, 0xC4, 0xB5, 0x43, 0x3A, - 0xC7, 0xD3, 0x29, 0xEE, 0xB6, 0xDD, 0x26, 0x54, - 0x5E, 0x96, 0xE5, 0x5B, 0x87, 0x4B, 0xE9, 0x09 }, - { 0xE7, 0x18, 0x48, 0x3D, 0x0C, 0xE7, 0x69, 0x64, - 0x4E, 0x2E, 0x42, 0xC7, 0xBC, 0x15, 0xB4, 0x63, - 0x8E, 0x1F, 0x98, 0xB1, 0x3B, 0x20, 0x44, 0x28, - 0x56, 0x32, 0xA8, 0x03, 0xAF, 0xA9, 0x73, 0xEB, - 0xDE, 0x0F, 0xF2, 0x44, 0x87, 0x7E, 0xA6, 0x0A, - 0x4C, 0xB0, 0x43, 0x2C, 0xE5, 0x77, 0xC3, 0x1B, - 0xEB, 0x00, 0x9C, 0x5C, 0x2C, 0x49, 0xAA, 0x2E, - 0x4E, 0xAD, 0xB2, 0x17, 0xAD, 0x8C, 0xC0, 0x9B } -}; - -/* - * RFC 4231 test vectors - */ -static unsigned char sha512_hmac_test_key[7][26] = -{ - { "\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B" - "\x0B\x0B\x0B\x0B" }, - { "Jefe" }, - { "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" - "\xAA\xAA\xAA\xAA" }, - { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10" - "\x11\x12\x13\x14\x15\x16\x17\x18\x19" }, - { "\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C" - "\x0C\x0C\x0C\x0C" }, - { "" }, /* 0xAA 131 times */ - { "" } -}; - -static const int sha512_hmac_test_keylen[7] = -{ - 20, 4, 20, 25, 20, 131, 131 -}; - -static unsigned char sha512_hmac_test_buf[7][153] = -{ - { "Hi There" }, - { "what do ya want for nothing?" }, - { "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" - "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" }, - { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" }, - { "Test With Truncation" }, - { "Test Using Larger Than Block-Size Key - Hash Key First" }, - { "This is a test using a larger than block-size key " - "and a larger than block-size data. The key needs to " - "be hashed before being used by the HMAC algorithm." } -}; - -static const int sha512_hmac_test_buflen[7] = -{ - 8, 28, 50, 50, 20, 54, 152 -}; - -static const unsigned char sha512_hmac_test_sum[14][64] = -{ - /* - * HMAC-SHA-384 test vectors - */ - { 0xAF, 0xD0, 0x39, 0x44, 0xD8, 0x48, 0x95, 0x62, - 0x6B, 0x08, 0x25, 0xF4, 0xAB, 0x46, 0x90, 0x7F, - 0x15, 0xF9, 0xDA, 0xDB, 0xE4, 0x10, 0x1E, 0xC6, - 0x82, 0xAA, 0x03, 0x4C, 0x7C, 0xEB, 0xC5, 0x9C, - 0xFA, 0xEA, 0x9E, 0xA9, 0x07, 0x6E, 0xDE, 0x7F, - 0x4A, 0xF1, 0x52, 0xE8, 0xB2, 0xFA, 0x9C, 0xB6 }, - { 0xAF, 0x45, 0xD2, 0xE3, 0x76, 0x48, 0x40, 0x31, - 0x61, 0x7F, 0x78, 0xD2, 0xB5, 0x8A, 0x6B, 0x1B, - 0x9C, 0x7E, 0xF4, 0x64, 0xF5, 0xA0, 0x1B, 0x47, - 0xE4, 0x2E, 0xC3, 0x73, 0x63, 0x22, 0x44, 0x5E, - 0x8E, 0x22, 0x40, 0xCA, 0x5E, 0x69, 0xE2, 0xC7, - 0x8B, 0x32, 0x39, 0xEC, 0xFA, 0xB2, 0x16, 0x49 }, - { 0x88, 0x06, 0x26, 0x08, 0xD3, 0xE6, 0xAD, 0x8A, - 0x0A, 0xA2, 0xAC, 0xE0, 0x14, 0xC8, 0xA8, 0x6F, - 0x0A, 0xA6, 0x35, 0xD9, 0x47, 0xAC, 0x9F, 0xEB, - 0xE8, 0x3E, 0xF4, 0xE5, 0x59, 0x66, 0x14, 0x4B, - 0x2A, 0x5A, 0xB3, 0x9D, 0xC1, 0x38, 0x14, 0xB9, - 0x4E, 0x3A, 0xB6, 0xE1, 0x01, 0xA3, 0x4F, 0x27 }, - { 0x3E, 0x8A, 0x69, 0xB7, 0x78, 0x3C, 0x25, 0x85, - 0x19, 0x33, 0xAB, 0x62, 0x90, 0xAF, 0x6C, 0xA7, - 0x7A, 0x99, 0x81, 0x48, 0x08, 0x50, 0x00, 0x9C, - 0xC5, 0x57, 0x7C, 0x6E, 0x1F, 0x57, 0x3B, 0x4E, - 0x68, 0x01, 0xDD, 0x23, 0xC4, 0xA7, 0xD6, 0x79, - 0xCC, 0xF8, 0xA3, 0x86, 0xC6, 0x74, 0xCF, 0xFB }, - { 0x3A, 0xBF, 0x34, 0xC3, 0x50, 0x3B, 0x2A, 0x23, - 0xA4, 0x6E, 0xFC, 0x61, 0x9B, 0xAE, 0xF8, 0x97 }, - { 0x4E, 0xCE, 0x08, 0x44, 0x85, 0x81, 0x3E, 0x90, - 0x88, 0xD2, 0xC6, 0x3A, 0x04, 0x1B, 0xC5, 0xB4, - 0x4F, 0x9E, 0xF1, 0x01, 0x2A, 0x2B, 0x58, 0x8F, - 0x3C, 0xD1, 0x1F, 0x05, 0x03, 0x3A, 0xC4, 0xC6, - 0x0C, 0x2E, 0xF6, 0xAB, 0x40, 0x30, 0xFE, 0x82, - 0x96, 0x24, 0x8D, 0xF1, 0x63, 0xF4, 0x49, 0x52 }, - { 0x66, 0x17, 0x17, 0x8E, 0x94, 0x1F, 0x02, 0x0D, - 0x35, 0x1E, 0x2F, 0x25, 0x4E, 0x8F, 0xD3, 0x2C, - 0x60, 0x24, 0x20, 0xFE, 0xB0, 0xB8, 0xFB, 0x9A, - 0xDC, 0xCE, 0xBB, 0x82, 0x46, 0x1E, 0x99, 0xC5, - 0xA6, 0x78, 0xCC, 0x31, 0xE7, 0x99, 0x17, 0x6D, - 0x38, 0x60, 0xE6, 0x11, 0x0C, 0x46, 0x52, 0x3E }, - - /* - * HMAC-SHA-512 test vectors - */ - { 0x87, 0xAA, 0x7C, 0xDE, 0xA5, 0xEF, 0x61, 0x9D, - 0x4F, 0xF0, 0xB4, 0x24, 0x1A, 0x1D, 0x6C, 0xB0, - 0x23, 0x79, 0xF4, 0xE2, 0xCE, 0x4E, 0xC2, 0x78, - 0x7A, 0xD0, 0xB3, 0x05, 0x45, 0xE1, 0x7C, 0xDE, - 0xDA, 0xA8, 0x33, 0xB7, 0xD6, 0xB8, 0xA7, 0x02, - 0x03, 0x8B, 0x27, 0x4E, 0xAE, 0xA3, 0xF4, 0xE4, - 0xBE, 0x9D, 0x91, 0x4E, 0xEB, 0x61, 0xF1, 0x70, - 0x2E, 0x69, 0x6C, 0x20, 0x3A, 0x12, 0x68, 0x54 }, - { 0x16, 0x4B, 0x7A, 0x7B, 0xFC, 0xF8, 0x19, 0xE2, - 0xE3, 0x95, 0xFB, 0xE7, 0x3B, 0x56, 0xE0, 0xA3, - 0x87, 0xBD, 0x64, 0x22, 0x2E, 0x83, 0x1F, 0xD6, - 0x10, 0x27, 0x0C, 0xD7, 0xEA, 0x25, 0x05, 0x54, - 0x97, 0x58, 0xBF, 0x75, 0xC0, 0x5A, 0x99, 0x4A, - 0x6D, 0x03, 0x4F, 0x65, 0xF8, 0xF0, 0xE6, 0xFD, - 0xCA, 0xEA, 0xB1, 0xA3, 0x4D, 0x4A, 0x6B, 0x4B, - 0x63, 0x6E, 0x07, 0x0A, 0x38, 0xBC, 0xE7, 0x37 }, - { 0xFA, 0x73, 0xB0, 0x08, 0x9D, 0x56, 0xA2, 0x84, - 0xEF, 0xB0, 0xF0, 0x75, 0x6C, 0x89, 0x0B, 0xE9, - 0xB1, 0xB5, 0xDB, 0xDD, 0x8E, 0xE8, 0x1A, 0x36, - 0x55, 0xF8, 0x3E, 0x33, 0xB2, 0x27, 0x9D, 0x39, - 0xBF, 0x3E, 0x84, 0x82, 0x79, 0xA7, 0x22, 0xC8, - 0x06, 0xB4, 0x85, 0xA4, 0x7E, 0x67, 0xC8, 0x07, - 0xB9, 0x46, 0xA3, 0x37, 0xBE, 0xE8, 0x94, 0x26, - 0x74, 0x27, 0x88, 0x59, 0xE1, 0x32, 0x92, 0xFB }, - { 0xB0, 0xBA, 0x46, 0x56, 0x37, 0x45, 0x8C, 0x69, - 0x90, 0xE5, 0xA8, 0xC5, 0xF6, 0x1D, 0x4A, 0xF7, - 0xE5, 0x76, 0xD9, 0x7F, 0xF9, 0x4B, 0x87, 0x2D, - 0xE7, 0x6F, 0x80, 0x50, 0x36, 0x1E, 0xE3, 0xDB, - 0xA9, 0x1C, 0xA5, 0xC1, 0x1A, 0xA2, 0x5E, 0xB4, - 0xD6, 0x79, 0x27, 0x5C, 0xC5, 0x78, 0x80, 0x63, - 0xA5, 0xF1, 0x97, 0x41, 0x12, 0x0C, 0x4F, 0x2D, - 0xE2, 0xAD, 0xEB, 0xEB, 0x10, 0xA2, 0x98, 0xDD }, - { 0x41, 0x5F, 0xAD, 0x62, 0x71, 0x58, 0x0A, 0x53, - 0x1D, 0x41, 0x79, 0xBC, 0x89, 0x1D, 0x87, 0xA6 }, - { 0x80, 0xB2, 0x42, 0x63, 0xC7, 0xC1, 0xA3, 0xEB, - 0xB7, 0x14, 0x93, 0xC1, 0xDD, 0x7B, 0xE8, 0xB4, - 0x9B, 0x46, 0xD1, 0xF4, 0x1B, 0x4A, 0xEE, 0xC1, - 0x12, 0x1B, 0x01, 0x37, 0x83, 0xF8, 0xF3, 0x52, - 0x6B, 0x56, 0xD0, 0x37, 0xE0, 0x5F, 0x25, 0x98, - 0xBD, 0x0F, 0xD2, 0x21, 0x5D, 0x6A, 0x1E, 0x52, - 0x95, 0xE6, 0x4F, 0x73, 0xF6, 0x3F, 0x0A, 0xEC, - 0x8B, 0x91, 0x5A, 0x98, 0x5D, 0x78, 0x65, 0x98 }, - { 0xE3, 0x7B, 0x6A, 0x77, 0x5D, 0xC8, 0x7D, 0xBA, - 0xA4, 0xDF, 0xA9, 0xF9, 0x6E, 0x5E, 0x3F, 0xFD, - 0xDE, 0xBD, 0x71, 0xF8, 0x86, 0x72, 0x89, 0x86, - 0x5D, 0xF5, 0xA3, 0x2D, 0x20, 0xCD, 0xC9, 0x44, - 0xB6, 0x02, 0x2C, 0xAC, 0x3C, 0x49, 0x82, 0xB1, - 0x0D, 0x5E, 0xEB, 0x55, 0xC3, 0xE4, 0xDE, 0x15, - 0x13, 0x46, 0x76, 0xFB, 0x6D, 0xE0, 0x44, 0x60, - 0x65, 0xC9, 0x74, 0x40, 0xFA, 0x8C, 0x6A, 0x58 } -}; - -/* - * Checkup routine - */ -int sha512_self_test( int verbose ) -{ - int i, j, k, buflen, ret = 0; - unsigned char buf[1024]; - unsigned char sha512sum[64]; - sha512_context ctx; - - sha512_init( &ctx ); - - for( i = 0; i < 6; i++ ) - { - j = i % 3; - k = i < 3; - - if( verbose != 0 ) - polarssl_printf( " SHA-%d test #%d: ", 512 - k * 128, j + 1 ); - - sha512_starts( &ctx, k ); - - if( j == 2 ) - { - memset( buf, 'a', buflen = 1000 ); - - for( j = 0; j < 1000; j++ ) - sha512_update( &ctx, buf, buflen ); - } - else - sha512_update( &ctx, sha512_test_buf[j], - sha512_test_buflen[j] ); - - sha512_finish( &ctx, sha512sum ); - - if( memcmp( sha512sum, sha512_test_sum[i], 64 - k * 16 ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - - for( i = 0; i < 14; i++ ) - { - j = i % 7; - k = i < 7; - - if( verbose != 0 ) - polarssl_printf( " HMAC-SHA-%d test #%d: ", 512 - k * 128, j + 1 ); - - if( j == 5 || j == 6 ) - { - memset( buf, '\xAA', buflen = 131 ); - sha512_hmac_starts( &ctx, buf, buflen, k ); - } - else - sha512_hmac_starts( &ctx, sha512_hmac_test_key[j], - sha512_hmac_test_keylen[j], k ); - - sha512_hmac_update( &ctx, sha512_hmac_test_buf[j], - sha512_hmac_test_buflen[j] ); - - sha512_hmac_finish( &ctx, sha512sum ); - - buflen = ( j == 4 ) ? 16 : 64 - k * 16; - - if( memcmp( sha512sum, sha512_hmac_test_sum[i], buflen ) != 0 ) - { - if( verbose != 0 ) - polarssl_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - polarssl_printf( "passed\n" ); - } - - if( verbose != 0 ) - polarssl_printf( "\n" ); - -exit: - sha512_free( &ctx ); - - return( ret ); -} - -#endif /* POLARSSL_SELF_TEST */ - -extern void *pvPortMalloc(unsigned int xWantedSize); -extern void vPortFree(void *pv); - -int ssl_self_test( int verbose ) -{ - platform_set_malloc_free(pvPortMalloc, vPortFree); - - if (rom_ssl_ram_map.use_hw_crypto_func && rtl_cryptoEngine_init() != SUCCESS) { - polarssl_printf("Use HW Crypto, but Crypto Engine Init fail!!!\n"); - return -1; - } - - aes_self_test(1); - arc4_self_test(1); - base64_self_test(1); - mpi_self_test(1); - ctr_drbg_self_test(1); //bignum - des_self_test(1); - dhm_self_test(1); -#if defined(ECP_POLARSSL_SELF_TEST) - ecp_self_test(1); -#endif - hmac_drbg_self_test(1); - md5_self_test(1); - rsa_self_test(1); - sha1_self_test(1); - sha256_self_test(1); - sha512_self_test(1); - - return 0; -} diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/ssl_ram_map/rom/rom_ssl_ram_map.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/ssl_ram_map/rom/rom_ssl_ram_map.c deleted file mode 100644 index 7a4d481..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/ssl_ram_map/rom/rom_ssl_ram_map.c +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include - -#ifndef SSL_RAM_MAP_SECTION -#define SSL_RAM_MAP_SECTION -#endif - -/* RAM table referred by SSL ROM */ -SSL_RAM_MAP_SECTION -struct _rom_ssl_ram_map rom_ssl_ram_map; - -SSL_RAM_MAP_SECTION -int ssl_max_frag_len; \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/ssl_ram_map/rom/rom_ssl_ram_map.h b/Firmware/RTLGDB/USDK/component/common/network/ssl/ssl_ram_map/rom/rom_ssl_ram_map.h deleted file mode 100644 index eb0bbb6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/ssl_ram_map/rom/rom_ssl_ram_map.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef ROM_SSL_RAM_MAP_H -#define ROM_SSL_RAM_MAP_H - -#include "basic_types.h" - -struct _rom_ssl_ram_map { - /* OS interface */ - void *(*ssl_malloc)(unsigned int sz); - void (*ssl_free)(void *); - int (*ssl_printf)(const char *, ...); - - //AES HW CRYPTO - int (*hw_crypto_aes_ecb_init)(const u8* key, const u32 keylen); - int (*hw_crypto_aes_ecb_decrypt)( - const u8* message, const u32 msglen, - const u8* iv, const u32 ivlen, - u8* pResult); - int (*hw_crypto_aes_ecb_encrypt)( - const u8* message, const u32 msglen, - const u8* iv, const u32 ivlen, - u8* pResult); - int (*hw_crypto_aes_cbc_init)(const u8* key, const u32 keylen); - int (*hw_crypto_aes_cbc_decrypt)( - const u8* message, const u32 msglen, - const u8* iv, const u32 ivlen, - u8* pResult); - int (*hw_crypto_aes_cbc_encrypt)( - const u8* message, const u32 msglen, - const u8* iv, const u32 ivlen, - u8* pResult); - - //DES HW CRYPTO - int (*hw_crypto_des_cbc_init)(const u8* key, const u32 keylen); - int (*hw_crypto_des_cbc_decrypt)( - const u8* message, const u32 msglen, - const u8* iv, const u32 ivlen, - u8* pResult); - int (*hw_crypto_des_cbc_encrypt)( - const u8* message, const u32 msglen, - const u8* iv, const u32 ivlen, - u8* pResult); - int (*hw_crypto_3des_cbc_init)(const u8* key, const u32 keylen); - int (*hw_crypto_3des_cbc_decrypt)( - const u8* message, const u32 msglen, - const u8* iv, const u32 ivlen, - u8* pResult); - int (*hw_crypto_3des_cbc_encrypt)( - const u8* message, const u32 msglen, - const u8* iv, const u32 ivlen, - u8* pResult); - - /* Variables */ - u32 use_hw_crypto_func; - u32 ssl_buffer_len; -}; - -extern struct _rom_ssl_ram_map rom_ssl_ram_map; - -#endif /* ROM_SSL_RAM_MAP_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/network/ssl/ssl_ram_map/ssl_ram_map.c b/Firmware/RTLGDB/USDK/component/common/network/ssl/ssl_ram_map/ssl_ram_map.c deleted file mode 100644 index 33d2d4b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/ssl/ssl_ram_map/ssl_ram_map.c +++ /dev/null @@ -1,88 +0,0 @@ -#include "rom_ssl_ram_map.h" -#include -#include - -extern struct _rom_ssl_ram_map rom_ssl_ram_map; - -//AES HW CRYPTO -extern int rtl_crypto_aes_ecb_init(IN const u8* key, IN const u32 keylen); -extern int rtl_crypto_aes_ecb_decrypt( - IN const u8* message, IN const u32 msglen, - IN const u8* iv, IN const u32 ivlen, - OUT u8* pResult); -extern int rtl_crypto_aes_ecb_encrypt( - IN const u8* message, IN const u32 msglen, - IN const u8* iv, IN const u32 ivlen, - OUT u8* pResult); -extern int rtl_crypto_aes_cbc_init(IN const u8* key, IN const u32 keylen); -extern int rtl_crypto_aes_cbc_decrypt( - IN const u8* message, IN const u32 msglen, - IN const u8* iv, IN const u32 ivlen, - OUT u8* pResult); -extern int rtl_crypto_aes_cbc_encrypt( - IN const u8* message, IN const u32 msglen, - IN const u8* iv, IN const u32 ivlen, - OUT u8* pResult); - -//DES HW CRYPTO -extern int rtl_crypto_des_cbc_init(IN const u8* key, IN const u32 keylen); -extern int rtl_crypto_des_cbc_decrypt( - IN const u8* message, IN const u32 msglen, - IN const u8* iv, IN const u32 ivlen, - OUT u8* pResult); -extern int rtl_crypto_des_cbc_encrypt( - IN const u8* message, IN const u32 msglen, - IN const u8* iv, IN const u32 ivlen, - OUT u8* pResult); -extern int rtl_crypto_3des_cbc_init(IN const u8* key, IN const u32 keylen); -extern int rtl_crypto_3des_cbc_decrypt( - IN const u8* message, IN const u32 msglen, - IN const u8* iv, IN const u32 ivlen, - OUT u8* pResult); -extern int rtl_crypto_3des_cbc_encrypt( - IN const u8* message, IN const u32 msglen, - IN const u8* iv, IN const u32 ivlen, - OUT u8* pResult); - -extern int ssl_max_frag_len; - -int platform_set_malloc_free( void * (*malloc_func)( size_t ), - void (*free_func)( void * ) ) -{ - /* OS interface */ - rom_ssl_ram_map.ssl_malloc = malloc_func; - rom_ssl_ram_map.ssl_free = free_func; - rom_ssl_ram_map.ssl_printf = (int (*)(char const *, ...))DiagPrintf; - - //AES HW CRYPTO - rom_ssl_ram_map.hw_crypto_aes_ecb_init = rtl_crypto_aes_ecb_init; - rom_ssl_ram_map.hw_crypto_aes_ecb_decrypt = rtl_crypto_aes_ecb_decrypt; - rom_ssl_ram_map.hw_crypto_aes_ecb_encrypt = rtl_crypto_aes_ecb_encrypt; - rom_ssl_ram_map.hw_crypto_aes_cbc_init = rtl_crypto_aes_cbc_init; - rom_ssl_ram_map.hw_crypto_aes_cbc_decrypt = rtl_crypto_aes_cbc_decrypt; - rom_ssl_ram_map.hw_crypto_aes_cbc_encrypt = rtl_crypto_aes_cbc_encrypt; - - //DES HW CRYPTO - rom_ssl_ram_map.hw_crypto_des_cbc_init = rtl_crypto_des_cbc_init; - rom_ssl_ram_map.hw_crypto_des_cbc_decrypt = rtl_crypto_des_cbc_decrypt; - rom_ssl_ram_map.hw_crypto_des_cbc_encrypt = rtl_crypto_des_cbc_encrypt; - rom_ssl_ram_map.hw_crypto_3des_cbc_init = rtl_crypto_3des_cbc_init; - rom_ssl_ram_map.hw_crypto_3des_cbc_decrypt = rtl_crypto_3des_cbc_decrypt; - rom_ssl_ram_map.hw_crypto_3des_cbc_encrypt = rtl_crypto_3des_cbc_encrypt; - - /* Variables */ - rom_ssl_ram_map.use_hw_crypto_func = 1; - - int len = ssl_max_frag_len; - if(len == 0) len = 8192; - else if(len < 512) len = 512; - else if(len > 16384) len = 16384; - rom_ssl_ram_map.ssl_buffer_len = len + SSL_COMPRESSION_ADD - + 29 /* counter + header + IV */ - + SSL_MAC_ADD - + SSL_PADDING_ADD; -#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH) - mfl_code_to_length[0] = len; -#endif - return 0; -} diff --git a/Firmware/RTLGDB/USDK/component/common/network/websocket/libwsclient.h b/Firmware/RTLGDB/USDK/component/common/network/websocket/libwsclient.h deleted file mode 100644 index f0ee8b3..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/websocket/libwsclient.h +++ /dev/null @@ -1,120 +0,0 @@ -#ifndef EASYWSCLIENT_H -#define EASYWSCLIENT_H -#include - -/****************Define the debug message level*********************/ -#define DEBUG_WSCLIENT 1 - -#define WSCLIENT_LOG(level, fmt, ...) printf("\n\r[WSCLIENT %s] %s: " fmt "\n", level, __FUNCTION__, ##__VA_ARGS__) -#if DEBUG_WSCLIENT == 2 -#define WSCLIENT_DEBUG(fmt, ...) WSCLIENT_LOG("DEBUG", fmt, ##__VA_ARGS__) -#else -#define WSCLIENT_DEBUG(fmt, ...) -#endif -#if DEBUG_WSCLIENT -#define WSCLIENT_ERROR(fmt, ...) WSCLIENT_LOG("ERROR", fmt, ##__VA_ARGS__) -#else -#define WSCLIENT_ERROR(fmt, ...) -#endif -/*******************************************************************/ - -/****************Define the structures used*************************/ -typedef enum{ - CLOSING, - CLOSED, - CONNECTING, - OPEN -} readyStateValues; - -struct wsheader_type{ - unsigned header_size; - int fin; - int mask; - enum opcode_type { - CONTINUATION = 0x0, - TEXT_FRAME = 0x1, - BINARY_FRAME = 0x2, - CLOSE = 8, - PING = 9, - PONG = 0xa, - } opcode; - int N0; - uint64_t N; - uint8_t masking_key[4]; -}; - -struct _wsclient_context; -struct _ssl_context; - -struct ssl_fun_ops{ - int (*memory_set_own)( void * (*malloc_func)( size_t ),void (*free_func)( void * ) ); - int (*net_connect)( int *fd, const char *host, int port ); - int (*ssl_init)( struct _ssl_context *ssl ); - void (*ssl_set_endpoint)( struct _ssl_context *ssl, int endpoint ); - void (*ssl_set_authmode)( struct _ssl_context *ssl, int authmode ); - void (*ssl_set_rng)( struct _ssl_context *ssl, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - void (*ssl_set_bio)( struct _ssl_context *ssl, - int (*f_recv)(void *, unsigned char *, size_t), void *p_recv, - int (*f_send)(void *, const unsigned char *, size_t), void *p_send ); - int (*ssl_handshake)( struct _ssl_context *ssl ); - void (*net_close)( int fd ); - void (*ssl_free)( struct _ssl_context *ssl ); - int (*ssl_read)( struct _ssl_context *ssl, unsigned char *buf, size_t len ); - int (*ssl_write)( struct _ssl_context *ssl, const unsigned char *buf, size_t len ); - const char *(*ssl_get_ciphersuite)( const struct _ssl_context *ssl ); - int (*net_recv)( void *ctx, unsigned char *buf, size_t len ); - int (*net_send)( void *ctx, const unsigned char *buf, size_t len ); -}; - -struct ws_fun_ops{ - int (*hostname_connect)(struct _wsclient_context *wsclient); - void (*client_close)(struct _wsclient_context *wsclient); - int (*client_send)(struct _wsclient_context *wsclient, unsigned char *data, size_t data_len); - int (*client_read)(struct _wsclient_context *wsclient, unsigned char *data, size_t data_len); - struct ssl_fun_ops ssl_fun_ops; -}; - -typedef struct _wsclient_context{ - char host[128]; - char path[128]; - char origin[200]; - int port; - uint8_t use_ssl; - int sockfd; - readyStateValues readyState; - int tx_len; - void *ssl; - uint8_t *txbuf; - uint8_t *rxbuf; - uint8_t *receivedData; - struct ws_fun_ops fun_ops; -}wsclient_context; -/*******************************************************************/ - -/****************General functions used by wsclient*****************/ -void ws_get_random_bytes(void *buf, size_t len); -void* ws_malloc(unsigned int size); -void ws_free(void *buf); -int ws_client_handshake(wsclient_context *wsclient); -int ws_check_handshake(wsclient_context *wsclient); -void ws_sendData(uint8_t type, size_t message_size, uint8_t* message, int useMask, wsclient_context *wsclient); -/*******************************************************************/ - -/*************Functions used by wsclient without SSL****************/ - -int ws_hostname_connect(wsclient_context *wsclient); -int ws_client_read(wsclient_context *wsclient, unsigned char *data, size_t data_len); -int ws_client_send(wsclient_context *wsclient, unsigned char *data, size_t data_len); -void ws_client_close(wsclient_context *wsclient); -/*******************************************************************/ - -/***************Functions used by wsclient with SSL*****************/ -int wss_hostname_connect(wsclient_context *wsclient); -int wss_client_read(wsclient_context *wsclient, unsigned char *data, size_t data_len); -int wss_client_send(wsclient_context *wsclient, unsigned char *data, size_t data_len); -void wss_client_close(wsclient_context *wsclient); -/*******************************************************************/ - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/network/websocket/wsclient_api.h b/Firmware/RTLGDB/USDK/component/common/network/websocket/wsclient_api.h deleted file mode 100644 index 77a53f1..0000000 --- a/Firmware/RTLGDB/USDK/component/common/network/websocket/wsclient_api.h +++ /dev/null @@ -1,104 +0,0 @@ -#ifndef WSCLIENT_H -#define WSCLIENT_H -#include - - -/******Define the maximum bytes of data send and receive********/ -#define MAX_DATA_LEN 1500 -/****************Define if using the polarssl*******************/ -#define USING_SSL - -/******************Define the function used*********************/ -#ifdef USING_SSL -int wss_set_fun_ops(wsclient_context *wsclient); -#define wsclient_set_fun_ops(wsclient) wss_set_fun_ops(wsclient) -#else -int ws_set_fun_ops(wsclient_context *wsclient); -#define wsclient_set_fun_ops(wsclient) ws_set_fun_ops(wsclient) -#endif -/***************************************************************/ - -/************************************************************************************************* -** Function Name : create_wsclient -** Description : Creating the websocket client context structure -** Input : url:websocket server's url -** port:websocket server's port, if not given, default 80 for "ws", 443 for "wss" -** origin: the address or url of your self -** Return : Created: websocket client context structure -** Failed: NULL -**************************************************************************************************/ -wsclient_context *create_wsclient(char *url, int port, char *path, char* origin); - -/************************************************************************************************* -** Function Name : ws_connect_url -** Description : Connecting to the websocket server -** Input : wsclient: the websocket client context created by create_wsclientfunction -** Return : Connected: the socket value -** Failed: -1 -**************************************************************************************************/ -int ws_connect_url(wsclient_context *wsclient); - -/************************************************************************************************* -** Function Name : ws_send -** Description : Create the sending string data and copy to tx_buf -** Input : message: the string that send to server(cannot exceeding the MAX_DATA_LEN -** message_len: the length of the string -** use_mask: 0/1; 1 means using mask for bynary -** wsclient: the websocket client context -** Return : None -**************************************************************************************************/ -void ws_send(char* message, int message_len, int use_mask, wsclient_context *wsclient); - -/************************************************************************************************* -** Function Name : ws_sendBinary -** Description : Create the sending binary data and copy to tx_buf -** Input : message: the binary that send to server(cannot exceeding the MAX_DATA_LEN -** message_len: the length of the binary -** use_mask: 0/1; 1 means using mask for bynary -** wsclient: the websocket client context -** Return : None -**************************************************************************************************/ -void ws_sendBinary(uint8_t* message, int message_len, int use_mask, wsclient_context *wsclient); - -/************************************************************************************************* -** Function Name : ws_sendPing -** Description : Sending Ping to websocket server -** Input : wsclient: the websocket client context -** Return : None -**************************************************************************************************/ -void ws_sendPing(wsclient_context *wsclient); - -/************************************************************************************************* -** Function Name : ws_poll -** Description : Receicing data from server and send the data in tx_buf -** Input : timeout(in milliseconds) - wsclient: the websocket client context -** Return : None -**************************************************************************************************/ -void ws_poll(int timeout, wsclient_context *wsclient); - -/************************************************************************************************* -** Function Name : ws_dispatch -** Description : callback function when getting message from server -** Input : function that resolve the message received and the message length -** Return : None -**************************************************************************************************/ -void ws_dispatch(void (*callback)(wsclient_context *, int)) ; - -/************************************************************************************************* -** Function Name : ws_getReadyState -** Description : Getting the connection status -** Input : wsclient: the websocket client context -** Return : readyStateValues(4 types:CLOSING, CLOSED, CONNECTING, OPEN) -**************************************************************************************************/ -readyStateValues ws_getReadyState(wsclient_context *wsclient); - -/************************************************************************************************* -** Function Name : ws_close -** Description : Closing the connection with websocket server -** Input : wsclient: the websocket client context -** Return : None -**************************************************************************************************/ -void ws_close(wsclient_context *wsclient); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/test/wlan/wlan_test_inc.h b/Firmware/RTLGDB/USDK/component/common/test/wlan/wlan_test_inc.h deleted file mode 100644 index de1e156..0000000 --- a/Firmware/RTLGDB/USDK/component/common/test/wlan/wlan_test_inc.h +++ /dev/null @@ -1,23 +0,0 @@ -//----------------------------------------------------------------------------// -#ifndef __MAIN_TEST_H -#define __MAIN_TEST_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported test functions ------------------------------------------------------- */ -void do_ping_test(char *ip, int size, int count, int interval); -void do_ping_call(char *ip, int loop, int count); -void do_deinit_test(int mode, int ap_started); -void interactive_question(char *question, char *choice, char *buf, int buf_size); -void start_interactive_mode(void); -void post_init(unsigned int config_start_ap); - -#ifdef __cplusplus - } -#endif - -#endif // __MAIN_TEST_H - -//----------------------------------------------------------------------------// diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/cJSON.c b/Firmware/RTLGDB/USDK/component/common/utilities/cJSON.c deleted file mode 100644 index a13fbbd..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/cJSON.c +++ /dev/null @@ -1,596 +0,0 @@ -/* - Copyright (c) 2009 Dave Gamble - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ - -/* cJSON */ -/* JSON parser in C. */ - -#include -#include -#include -#include -#include -#include -#include -#include "cJSON.h" - -static const char *ep; - -const char *cJSON_GetErrorPtr(void) {return ep;} - -static int cJSON_strcasecmp(const char *s1,const char *s2) -{ - if (!s1) return (s1==s2)?0:1;if (!s2) return 1; - for(; tolower(*s1) == tolower(*s2); ++s1, ++s2) if(*s1 == 0) return 0; - return tolower(*(const unsigned char *)s1) - tolower(*(const unsigned char *)s2); -} - -static void *(*cJSON_malloc)(size_t sz) = malloc; -static void (*cJSON_free)(void *ptr) = free; - -static char* cJSON_strdup(const char* str) -{ - size_t len; - char* copy; - - len = strlen(str) + 1; - if (!(copy = (char*)cJSON_malloc(len))) return 0; - memcpy(copy,str,len); - return copy; -} - -void cJSON_InitHooks(cJSON_Hooks* hooks) -{ - if (!hooks) { /* Reset hooks */ - cJSON_malloc = malloc; - cJSON_free = free; - return; - } - - cJSON_malloc = (hooks->malloc_fn)?hooks->malloc_fn:malloc; - cJSON_free = (hooks->free_fn)?hooks->free_fn:free; -} - -/* Internal constructor. */ -static cJSON *cJSON_New_Item(void) -{ - cJSON* node = (cJSON*)cJSON_malloc(sizeof(cJSON)); - if (node) memset(node,0,sizeof(cJSON)); - return node; -} - -/* Delete a cJSON structure. */ -void cJSON_Delete(cJSON *c) -{ - cJSON *next; - while (c) - { - next=c->next; - if (!(c->type&cJSON_IsReference) && c->child) cJSON_Delete(c->child); - if (!(c->type&cJSON_IsReference) && c->valuestring) cJSON_free(c->valuestring); - if (c->string) cJSON_free(c->string); - cJSON_free(c); - c=next; - } -} - -/* Parse the input text to generate a number, and populate the result into item. */ -const char *parse_number(cJSON *item,const char *num) -{ - double n=0,sign=1,scale=0;int subscale=0,signsubscale=1; - - if (*num=='-') sign=-1,num++; /* Has sign? */ - if (*num=='0') num++; /* is zero */ - if (*num>='1' && *num<='9') do n=(n*10.0)+(*num++ -'0'); while (*num>='0' && *num<='9'); /* Number? */ - if (*num=='.' && num[1]>='0' && num[1]<='9') {num++; do n=(n*10.0)+(*num++ -'0'),scale--; while (*num>='0' && *num<='9');} /* Fractional part? */ - if (*num=='e' || *num=='E') /* Exponent? */ - { num++;if (*num=='+') num++; else if (*num=='-') signsubscale=-1,num++; /* With sign? */ - while (*num>='0' && *num<='9') subscale=(subscale*10)+(*num++ - '0'); /* Number? */ - } - - n=sign*n*pow(10.0,(scale+subscale*signsubscale)); /* number = +/- number.fraction * 10^+/- exponent */ - - item->valuedouble=n; - item->valueint=(int)n; - item->type=cJSON_Number; - return num; -} - -/* Render the number nicely from the given item into a string. */ -static char *print_number(cJSON *item) -{ - char *str; - double d=item->valuedouble; - if (fabs(((double)item->valueint)-d)<=DBL_EPSILON && d<=INT_MAX && d>=INT_MIN) - { - str=(char*)cJSON_malloc(21); /* 2^64+1 can be represented in 21 chars. */ - if (str) sprintf(str,"%d",item->valueint); - } - else - { - str=(char*)cJSON_malloc(64); /* This is a nice tradeoff. */ - if (str) - { - if (fabs(floor(d)-d)<=DBL_EPSILON && fabs(d)<1.0e60)sprintf(str,"%.0f",d); - else if (fabs(d)<1.0e-6 || fabs(d)>1.0e9) sprintf(str,"%e",d); - else sprintf(str,"%f",d); - } - } - return str; -} - -static unsigned parse_hex4(const char *str) -{ - unsigned h=0; - if (*str>='0' && *str<='9') h+=(*str)-'0'; else if (*str>='A' && *str<='F') h+=10+(*str)-'A'; else if (*str>='a' && *str<='f') h+=10+(*str)-'a'; else return 0; - h=h<<4;str++; - if (*str>='0' && *str<='9') h+=(*str)-'0'; else if (*str>='A' && *str<='F') h+=10+(*str)-'A'; else if (*str>='a' && *str<='f') h+=10+(*str)-'a'; else return 0; - h=h<<4;str++; - if (*str>='0' && *str<='9') h+=(*str)-'0'; else if (*str>='A' && *str<='F') h+=10+(*str)-'A'; else if (*str>='a' && *str<='f') h+=10+(*str)-'a'; else return 0; - h=h<<4;str++; - if (*str>='0' && *str<='9') h+=(*str)-'0'; else if (*str>='A' && *str<='F') h+=10+(*str)-'A'; else if (*str>='a' && *str<='f') h+=10+(*str)-'a'; else return 0; - return h; -} - -/* Parse the input text into an unescaped cstring, and populate item. */ -static const unsigned char firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; -static const char *parse_string(cJSON *item,const char *str) -{ - const char *ptr=str+1;char *ptr2;char *out;int len=0;unsigned uc,uc2; - if (*str!='\"') {ep=str;return 0;} /* not a string! */ - - while (*ptr!='\"' && *ptr && ++len) if (*ptr++ == '\\') ptr++; /* Skip escaped quotes. */ - - out=(char*)cJSON_malloc(len+1); /* This is how long we need for the string, roughly. */ - if (!out) return 0; - - ptr=str+1;ptr2=out; - while (*ptr!='\"' && *ptr) - { - if (*ptr!='\\') *ptr2++=*ptr++; - else - { - ptr++; - switch (*ptr) - { - case 'b': *ptr2++='\b'; break; - case 'f': *ptr2++='\f'; break; - case 'n': *ptr2++='\n'; break; - case 'r': *ptr2++='\r'; break; - case 't': *ptr2++='\t'; break; - case 'u': /* transcode utf16 to utf8. */ - uc=parse_hex4(ptr+1);ptr+=4; /* get the unicode char. */ - - if ((uc>=0xDC00 && uc<=0xDFFF) || uc==0) break; /* check for invalid. */ - - if (uc>=0xD800 && uc<=0xDBFF) /* UTF16 surrogate pairs. */ - { - if (ptr[1]!='\\' || ptr[2]!='u') break; /* missing second-half of surrogate. */ - uc2=parse_hex4(ptr+3);ptr+=6; - if (uc2<0xDC00 || uc2>0xDFFF) break; /* invalid second-half of surrogate. */ - uc=0x10000 + (((uc&0x3FF)<<10) | (uc2&0x3FF)); - } - - len=4;if (uc<0x80) len=1;else if (uc<0x800) len=2;else if (uc<0x10000) len=3; ptr2+=len; - - switch (len) { - case 4: *--ptr2 =((uc | 0x80) & 0xBF); uc >>= 6; - case 3: *--ptr2 =((uc | 0x80) & 0xBF); uc >>= 6; - case 2: *--ptr2 =((uc | 0x80) & 0xBF); uc >>= 6; - case 1: *--ptr2 =(uc | firstByteMark[len]); - } - ptr2+=len; - break; - default: *ptr2++=*ptr; break; - } - ptr++; - } - } - *ptr2=0; - if (*ptr=='\"') ptr++; - item->valuestring=out; - item->type=cJSON_String; - return ptr; -} - -/* Render the cstring provided to an escaped version that can be printed. */ -static char *print_string_ptr(const char *str) -{ - const char *ptr;char *ptr2,*out;int len=0;unsigned char token; - - if (!str) return cJSON_strdup(""); - ptr=str;while ((token=*ptr) && ++len) {if (strchr("\"\\\b\f\n\r\t",token)) len++; else if (token<32) len+=5;ptr++;} - - out=(char*)cJSON_malloc(len+3); - if (!out) return 0; - - ptr2=out;ptr=str; - *ptr2++='\"'; - while (*ptr) - { - if ((unsigned char)*ptr>31 && *ptr!='\"' && *ptr!='\\') *ptr2++=*ptr++; - else - { - *ptr2++='\\'; - switch (token=*ptr++) - { - case '\\': *ptr2++='\\'; break; - case '\"': *ptr2++='\"'; break; - case '\b': *ptr2++='b'; break; - case '\f': *ptr2++='f'; break; - case '\n': *ptr2++='n'; break; - case '\r': *ptr2++='r'; break; - case '\t': *ptr2++='t'; break; - default: sprintf(ptr2,"u%04x",token);ptr2+=5; break; /* escape and print */ - } - } - } - *ptr2++='\"';*ptr2++=0; - return out; -} -/* Invote print_string_ptr (which is useful) on an item. */ -static char *print_string(cJSON *item) {return print_string_ptr(item->valuestring);} - -/* Predeclare these prototypes. */ -static const char *parse_value(cJSON *item,const char *value); -static char *print_value(cJSON *item,int depth,int fmt); -static const char *parse_array(cJSON *item,const char *value); -static char *print_array(cJSON *item,int depth,int fmt); -static const char *parse_object(cJSON *item,const char *value); -static char *print_object(cJSON *item,int depth,int fmt); - -/* Utility to jump whitespace and cr/lf */ -static const char *skip(const char *in) {while (in && *in && (unsigned char)*in<=32) in++; return in;} - -/* Parse an object - create a new root, and populate. */ -cJSON *cJSON_ParseWithOpts(const char *value,const char **return_parse_end,int require_null_terminated) -{ - const char *end=0; - cJSON *c=cJSON_New_Item(); - ep=0; - if (!c) return 0; /* memory fail */ - - end=parse_value(c,skip(value)); - if (!end) {cJSON_Delete(c);return 0;} /* parse failure. ep is set. */ - - /* if we require null-terminated JSON without appended garbage, skip and then check for a null terminator */ - if (require_null_terminated) {end=skip(end);if (*end) {cJSON_Delete(c);ep=end;return 0;}} - if (return_parse_end) *return_parse_end=end; - return c; -} -/* Default options for cJSON_Parse */ -cJSON *cJSON_Parse(const char *value) {return cJSON_ParseWithOpts(value,0,0);} - -/* Render a cJSON item/entity/structure to text. */ -char *cJSON_Print(cJSON *item) {return print_value(item,0,1);} -char *cJSON_PrintUnformatted(cJSON *item) {return print_value(item,0,0);} - -/* Parser core - when encountering text, process appropriately. */ -static const char *parse_value(cJSON *item,const char *value) -{ - if (!value) return 0; /* Fail on null. */ - if (!strncmp(value,"null",4)) { item->type=cJSON_NULL; return value+4; } - if (!strncmp(value,"false",5)) { item->type=cJSON_False; return value+5; } - if (!strncmp(value,"true",4)) { item->type=cJSON_True; item->valueint=1; return value+4; } - if (*value=='\"') { return parse_string(item,value); } - if (*value=='-' || (*value>='0' && *value<='9')) { return parse_number(item,value); } - if (*value=='[') { return parse_array(item,value); } - if (*value=='{') { return parse_object(item,value); } - - ep=value;return 0; /* failure. */ -} - -/* Render a value to text. */ -static char *print_value(cJSON *item,int depth,int fmt) -{ - char *out=0; - if (!item) return 0; - switch ((item->type)&255) - { - case cJSON_NULL: out=cJSON_strdup("null"); break; - case cJSON_False: out=cJSON_strdup("false");break; - case cJSON_True: out=cJSON_strdup("true"); break; - case cJSON_Number: out=print_number(item);break; - case cJSON_String: out=print_string(item);break; - case cJSON_Array: out=print_array(item,depth,fmt);break; - case cJSON_Object: out=print_object(item,depth,fmt);break; - } - return out; -} - -/* Build an array from input text. */ -static const char *parse_array(cJSON *item,const char *value) -{ - cJSON *child; - if (*value!='[') {ep=value;return 0;} /* not an array! */ - - item->type=cJSON_Array; - value=skip(value+1); - if (*value==']') return value+1; /* empty array. */ - - item->child=child=cJSON_New_Item(); - if (!item->child) return 0; /* memory fail */ - value=skip(parse_value(child,skip(value))); /* skip any spacing, get the value. */ - if (!value) return 0; - - while (*value==',') - { - cJSON *new_item; - if (!(new_item=cJSON_New_Item())) return 0; /* memory fail */ - child->next=new_item;new_item->prev=child;child=new_item; - value=skip(parse_value(child,skip(value+1))); - if (!value) return 0; /* memory fail */ - } - - if (*value==']') return value+1; /* end of array */ - ep=value;return 0; /* malformed. */ -} - -/* Render an array to text */ -static char *print_array(cJSON *item,int depth,int fmt) -{ - char **entries; - char *out=0,*ptr,*ret;int len=5; - cJSON *child=item->child; - int numentries=0,i=0,fail=0; - - /* How many entries in the array? */ - while (child) numentries++,child=child->next; - /* Explicitly handle numentries==0 */ - if (!numentries) - { - out=(char*)cJSON_malloc(3); - if (out) strcpy(out,"[]"); - return out; - } - /* Allocate an array to hold the values for each */ - entries=(char**)cJSON_malloc(numentries*sizeof(char*)); - if (!entries) return 0; - memset(entries,0,numentries*sizeof(char*)); - /* Retrieve all the results: */ - child=item->child; - while (child && !fail) - { - ret=print_value(child,depth+1,fmt); - entries[i++]=ret; - if (ret) len+=strlen(ret)+2+(fmt?1:0); else fail=1; - child=child->next; - } - - /* If we didn't fail, try to malloc the output string */ - if (!fail) out=(char*)cJSON_malloc(len); - /* If that fails, we fail. */ - if (!out) fail=1; - - /* Handle failure. */ - if (fail) - { - for (i=0;itype=cJSON_Object; - value=skip(value+1); - if (*value=='}') return value+1; /* empty array. */ - - item->child=child=cJSON_New_Item(); - if (!item->child) return 0; - value=skip(parse_string(child,skip(value))); - if (!value) return 0; - child->string=child->valuestring;child->valuestring=0; - if (*value!=':') {ep=value;return 0;} /* fail! */ - value=skip(parse_value(child,skip(value+1))); /* skip any spacing, get the value. */ - if (!value) return 0; - - while (*value==',') - { - cJSON *new_item; - if (!(new_item=cJSON_New_Item())) return 0; /* memory fail */ - child->next=new_item;new_item->prev=child;child=new_item; - value=skip(parse_string(child,skip(value+1))); - if (!value) return 0; - child->string=child->valuestring;child->valuestring=0; - if (*value!=':') {ep=value;return 0;} /* fail! */ - value=skip(parse_value(child,skip(value+1))); /* skip any spacing, get the value. */ - if (!value) return 0; - } - - if (*value=='}') return value+1; /* end of array */ - ep=value;return 0; /* malformed. */ -} - -/* Render an object to text. */ -static char *print_object(cJSON *item,int depth,int fmt) -{ - char **entries=0,**names=0; - char *out=0,*ptr,*ret,*str;int len=7,i=0,j; - cJSON *child=item->child; - int numentries=0,fail=0; - /* Count the number of entries. */ - while (child) numentries++,child=child->next; - /* Explicitly handle empty object case */ - if (!numentries) - { - out=(char*)cJSON_malloc(fmt?depth+4:3); - if (!out) return 0; - ptr=out;*ptr++='{'; - if (fmt) {*ptr++='\n';for (i=0;ichild;depth++;if (fmt) len+=depth; - while (child) - { - names[i]=str=print_string_ptr(child->string); - entries[i++]=ret=print_value(child,depth,fmt); - if (str && ret) len+=strlen(ret)+strlen(str)+2+(fmt?2+depth:0); else fail=1; - child=child->next; - } - - /* Try to allocate the output string */ - if (!fail) out=(char*)cJSON_malloc(len); - if (!out) fail=1; - - /* Handle failure */ - if (fail) - { - for (i=0;ichild;int i=0;while(c)i++,c=c->next;return i;} -cJSON *cJSON_GetArrayItem(cJSON *array,int item) {cJSON *c=array->child; while (c && item>0) item--,c=c->next; return c;} -cJSON *cJSON_GetObjectItem(cJSON *object,const char *string) {cJSON *c=object->child; while (c && cJSON_strcasecmp(c->string,string)) c=c->next; return c;} - -/* Utility for array list handling. */ -static void suffix_object(cJSON *prev,cJSON *item) {prev->next=item;item->prev=prev;} -/* Utility for handling references. */ -static cJSON *create_reference(cJSON *item) {cJSON *ref=cJSON_New_Item();if (!ref) return 0;memcpy(ref,item,sizeof(cJSON));ref->string=0;ref->type|=cJSON_IsReference;ref->next=ref->prev=0;return ref;} - -/* Add item to array/object. */ -void cJSON_AddItemToArray(cJSON *array, cJSON *item) {cJSON *c=array->child;if (!item) return; if (!c) {array->child=item;} else {while (c && c->next) c=c->next; suffix_object(c,item);}} -void cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item) {if (!item) return; if (item->string) cJSON_free(item->string);item->string=cJSON_strdup(string);cJSON_AddItemToArray(object,item);} -void cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item) {cJSON_AddItemToArray(array,create_reference(item));} -void cJSON_AddItemReferenceToObject(cJSON *object,const char *string,cJSON *item) {cJSON_AddItemToObject(object,string,create_reference(item));} - -cJSON *cJSON_DetachItemFromArray(cJSON *array,int which) {cJSON *c=array->child;while (c && which>0) c=c->next,which--;if (!c) return 0; - if (c->prev) c->prev->next=c->next;if (c->next) c->next->prev=c->prev;if (c==array->child) array->child=c->next;c->prev=c->next=0;return c;} -void cJSON_DeleteItemFromArray(cJSON *array,int which) {cJSON_Delete(cJSON_DetachItemFromArray(array,which));} -cJSON *cJSON_DetachItemFromObject(cJSON *object,const char *string) {int i=0;cJSON *c=object->child;while (c && cJSON_strcasecmp(c->string,string)) i++,c=c->next;if (c) return cJSON_DetachItemFromArray(object,i);return 0;} -void cJSON_DeleteItemFromObject(cJSON *object,const char *string) {cJSON_Delete(cJSON_DetachItemFromObject(object,string));} - -/* Replace array/object items with new ones. */ -void cJSON_ReplaceItemInArray(cJSON *array,int which,cJSON *newitem) {cJSON *c=array->child;while (c && which>0) c=c->next,which--;if (!c) return; - newitem->next=c->next;newitem->prev=c->prev;if (newitem->next) newitem->next->prev=newitem; - if (c==array->child) array->child=newitem; else newitem->prev->next=newitem;c->next=c->prev=0;cJSON_Delete(c);} -void cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem){int i=0;cJSON *c=object->child;while(c && cJSON_strcasecmp(c->string,string))i++,c=c->next;if(c){if(newitem->string) cJSON_free(newitem->string);newitem->string=cJSON_strdup(string);cJSON_ReplaceItemInArray(object,i,newitem);}} - -/* Create basic types: */ -cJSON *cJSON_CreateNull(void) {cJSON *item=cJSON_New_Item();if(item)item->type=cJSON_NULL;return item;} -cJSON *cJSON_CreateTrue(void) {cJSON *item=cJSON_New_Item();if(item)item->type=cJSON_True;return item;} -cJSON *cJSON_CreateFalse(void) {cJSON *item=cJSON_New_Item();if(item)item->type=cJSON_False;return item;} -cJSON *cJSON_CreateBool(int b) {cJSON *item=cJSON_New_Item();if(item)item->type=b?cJSON_True:cJSON_False;return item;} -cJSON *cJSON_CreateNumber(double num) {cJSON *item=cJSON_New_Item();if(item){item->type=cJSON_Number;item->valuedouble=num;item->valueint=(int)num;}return item;} -cJSON *cJSON_CreateString(const char *string) {cJSON *item=cJSON_New_Item();if(item){item->type=cJSON_String;item->valuestring=cJSON_strdup(string);}return item;} -cJSON *cJSON_CreateArray(void) {cJSON *item=cJSON_New_Item();if(item)item->type=cJSON_Array;return item;} -cJSON *cJSON_CreateObject(void) {cJSON *item=cJSON_New_Item();if(item)item->type=cJSON_Object;return item;} - -/* Create Arrays: */ -cJSON *cJSON_CreateIntArray(const int *numbers,int count) {int i;cJSON *n=0,*p=0,*a=cJSON_CreateArray();for(i=0;a && ichild=n;else suffix_object(p,n);p=n;}return a;} -cJSON *cJSON_CreateFloatArray(const float *numbers,int count) {int i;cJSON *n=0,*p=0,*a=cJSON_CreateArray();for(i=0;a && ichild=n;else suffix_object(p,n);p=n;}return a;} -cJSON *cJSON_CreateDoubleArray(const double *numbers,int count) {int i;cJSON *n=0,*p=0,*a=cJSON_CreateArray();for(i=0;a && ichild=n;else suffix_object(p,n);p=n;}return a;} -cJSON *cJSON_CreateStringArray(const char **strings,int count) {int i;cJSON *n=0,*p=0,*a=cJSON_CreateArray();for(i=0;a && ichild=n;else suffix_object(p,n);p=n;}return a;} - -/* Duplication */ -cJSON *cJSON_Duplicate(cJSON *item,int recurse) -{ - cJSON *newitem,*cptr,*nptr=0,*newchild; - /* Bail on bad ptr */ - if (!item) return 0; - /* Create new item */ - newitem=cJSON_New_Item(); - if (!newitem) return 0; - /* Copy over all vars */ - newitem->type=item->type&(~cJSON_IsReference),newitem->valueint=item->valueint,newitem->valuedouble=item->valuedouble; - if (item->valuestring) {newitem->valuestring=cJSON_strdup(item->valuestring); if (!newitem->valuestring) {cJSON_Delete(newitem);return 0;}} - if (item->string) {newitem->string=cJSON_strdup(item->string); if (!newitem->string) {cJSON_Delete(newitem);return 0;}} - /* If non-recursive, then we're done! */ - if (!recurse) return newitem; - /* Walk the ->next chain for the child. */ - cptr=item->child; - while (cptr) - { - newchild=cJSON_Duplicate(cptr,1); /* Duplicate (with recurse) each item in the ->next chain */ - if (!newchild) {cJSON_Delete(newitem);return 0;} - if (nptr) {nptr->next=newchild,newchild->prev=nptr;nptr=newchild;} /* If newitem->child already set, then crosswire ->prev and ->next and move on */ - else {newitem->child=newchild;nptr=newchild;} /* Set newitem->child and move to it */ - cptr=cptr->next; - } - return newitem; -} - -void cJSON_Minify(char *json) -{ - char *into=json; - while (*json) - { - if (*json==' ') json++; - else if (*json=='\t') json++; // Whitespace characters. - else if (*json=='\r') json++; - else if (*json=='\n') json++; - else if (*json=='/' && json[1]=='/') while (*json && *json!='\n') json++; // double-slash comments, to end of line. - else if (*json=='/' && json[1]=='*') {while (*json && !(*json=='*' && json[1]=='/')) json++;json+=2;} // multiline comments. - else if (*json=='\"'){*into++=*json++;while (*json && *json!='\"'){if (*json=='\\') *into++=*json++;*into++=*json++;}*into++=*json++;} // string literals, which are \" sensitive. - else *into++=*json++; // All other characters. - } - *into=0; // and null-terminate. -} diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/cJSON.h b/Firmware/RTLGDB/USDK/component/common/utilities/cJSON.h deleted file mode 100644 index 0d886d6..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/cJSON.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - Copyright (c) 2009 Dave Gamble - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ - -#ifndef cJSON__h -#define cJSON__h - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include - -/* cJSON Types: */ -#define cJSON_False 0 -#define cJSON_True 1 -#define cJSON_NULL 2 -#define cJSON_Number 3 -#define cJSON_String 4 -#define cJSON_Array 5 -#define cJSON_Object 6 - -#define cJSON_IsReference 256 - -/* The cJSON structure: */ -typedef struct cJSON { - struct cJSON *next,*prev; /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */ - struct cJSON *child; /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */ - - int type; /* The type of the item, as above. */ - - char *valuestring; /* The item's string, if type==cJSON_String */ - int valueint; /* The item's number, if type==cJSON_Number */ - double valuedouble; /* The item's number, if type==cJSON_Number */ - - char *string; /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */ -} cJSON; - -typedef struct cJSON_Hooks { - void *(*malloc_fn)(size_t sz); - void (*free_fn)(void *ptr); -} cJSON_Hooks; - -/* Supply malloc, realloc and free functions to cJSON */ -extern void cJSON_InitHooks(cJSON_Hooks* hooks); - - -/* Supply a block of JSON, and this returns a cJSON object you can interrogate. Call cJSON_Delete when finished. */ -extern cJSON *cJSON_Parse(const char *value); -/* Render a cJSON entity to text for transfer/storage. Free the char* when finished. */ -extern char *cJSON_Print(cJSON *item); -/* Render a cJSON entity to text for transfer/storage without any formatting. Free the char* when finished. */ -extern char *cJSON_PrintUnformatted(cJSON *item); -/* Delete a cJSON entity and all subentities. */ -extern void cJSON_Delete(cJSON *c); - -/* Returns the number of items in an array (or object). */ -extern int cJSON_GetArraySize(cJSON *array); -/* Retrieve item number "item" from array "array". Returns NULL if unsuccessful. */ -extern cJSON *cJSON_GetArrayItem(cJSON *array,int item); -/* Get item "string" from object. Case insensitive. */ -extern cJSON *cJSON_GetObjectItem(cJSON *object,const char *string); - -/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */ -extern const char *cJSON_GetErrorPtr(void); - -/* These calls create a cJSON item of the appropriate type. */ -extern cJSON *cJSON_CreateNull(void); -extern cJSON *cJSON_CreateTrue(void); -extern cJSON *cJSON_CreateFalse(void); -extern cJSON *cJSON_CreateBool(int b); -extern cJSON *cJSON_CreateNumber(double num); -extern cJSON *cJSON_CreateString(const char *string); -extern cJSON *cJSON_CreateArray(void); -extern cJSON *cJSON_CreateObject(void); - -/* These utilities create an Array of count items. */ -extern cJSON *cJSON_CreateIntArray(const int *numbers,int count); -extern cJSON *cJSON_CreateFloatArray(const float *numbers,int count); -extern cJSON *cJSON_CreateDoubleArray(const double *numbers,int count); -extern cJSON *cJSON_CreateStringArray(const char **strings,int count); - -/* Append item to the specified array/object. */ -extern void cJSON_AddItemToArray(cJSON *array, cJSON *item); -extern void cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item); -/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */ -extern void cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item); -extern void cJSON_AddItemReferenceToObject(cJSON *object,const char *string,cJSON *item); - -/* Remove/Detatch items from Arrays/Objects. */ -extern cJSON *cJSON_DetachItemFromArray(cJSON *array,int which); -extern void cJSON_DeleteItemFromArray(cJSON *array,int which); -extern cJSON *cJSON_DetachItemFromObject(cJSON *object,const char *string); -extern void cJSON_DeleteItemFromObject(cJSON *object,const char *string); - -/* Update array items. */ -extern void cJSON_ReplaceItemInArray(cJSON *array,int which,cJSON *newitem); -extern void cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem); - -/* Duplicate a cJSON item */ -extern cJSON *cJSON_Duplicate(cJSON *item,int recurse); -/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will -need to be released. With recurse!=0, it will duplicate any children connected to the item. -The item->next and ->prev pointers are always zero on return from Duplicate. */ - -/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */ -extern cJSON *cJSON_ParseWithOpts(const char *value,const char **return_parse_end,int require_null_terminated); - -extern void cJSON_Minify(char *json); - -/* Macros for creating things quickly. */ -#define cJSON_AddNullToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateNull()) -#define cJSON_AddTrueToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateTrue()) -#define cJSON_AddFalseToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateFalse()) -#define cJSON_AddBoolToObject(object,name,b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b)) -#define cJSON_AddNumberToObject(object,name,n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n)) -#define cJSON_AddStringToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s)) - -/* When assigning an integer value, it needs to be propagated to valuedouble too. */ -#define cJSON_SetIntValue(object,val) ((object)?(object)->valueint=(object)->valuedouble=(val):(val)) - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/http_client.c b/Firmware/RTLGDB/USDK/component/common/utilities/http_client.c deleted file mode 100644 index 44a082d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/http_client.c +++ /dev/null @@ -1,137 +0,0 @@ -//#include -//#include -//#include - -#include "platform/platform_stdlib.h" - -#include "FreeRTOS.h" - -const char * http_strstr(const char *str1, const char *str2) { - char *a, *b; - - /* First scan quickly through the two strings looking for a - * single-character match. When it's found, then compare the - * rest of the substring. - */ - - b = (char *)str2; - if (*b == 0) { - return str1; - } - for ( ; *str1 != 0; str1 += 1) { - if (*str1 != *b) { - continue; - } - a = (char *)str1; - while (1) { - if (*b == 0) { - return str1; - } - if (*a++ != *b++) { - break; - } - } - b = (char *)str2; - } - return (char *) 0; -} - -static void* http_malloc(unsigned int size) -{ - return pvPortMalloc(size); -} - -void http_free(void *buf) -{ - vPortFree(buf); -} - -static char *http_itoa(int value) -{ - char *val_str; - int tmp = value, len = 1; - - while((tmp /= 10) > 0) - len ++; - - val_str = (char *) http_malloc(len + 1); - sprintf(val_str, "%d", value); - - return val_str; -} - -char *http_post_header(char *host, char *resource, char *type, int data_len) -{ - char *len_str = http_itoa(data_len); - char *header = (char *) http_malloc(strlen("POST ") + strlen(resource) + strlen(" HTTP/1.1\r\nHost: ") + strlen(host) + - strlen("\r\nContent-Type: ") + strlen(type) + strlen("\r\nContent-Length: ") + strlen(len_str) + strlen("\r\n\r\n") + 1); - sprintf(header, "POST %s HTTP/1.1\r\nHost: %s\r\nContent-Type: %s\r\nContent-Length: %s\r\n\r\n", resource, host, type, len_str); - http_free(len_str); - - return header; -} - -char *http_get_header(char *host, char *resource) -{ - char *header = (char *) http_malloc(strlen("GET ") + strlen(resource) + strlen(" HTTP/1.1\r\nHost: ") + strlen(host) + strlen("\r\n\r\n") + 1); - sprintf(header, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", resource, host); - - return header; -} - -char *http_response_header(char *buf, int response_len) -{ - char *http_response, *http_header = NULL, *header_end; - int header_len; - - http_response = (char *) http_malloc(response_len + 1); - memcpy(http_response, buf, response_len); - http_response[response_len] = '\0'; - - if(strncmp(http_response, "HTTP", 4) == 0) { - if((header_end = (char *)http_strstr(http_response, "\r\n\r\n")) != NULL) { - header_end += 4; - header_len = header_end - http_response; - http_header = (char *) http_malloc(header_len + 1); - memcpy(http_header, http_response, header_len); - http_header[header_len] = '\0'; - } - } - - http_free(http_response); - - return http_header; -} - -char *http_response_body(char *buf, int response_len) -{ - char *http_response, *http_body = NULL, *body_start; - int body_len; - - http_response = (char *) http_malloc(response_len + 1); - memcpy(http_response, buf, response_len); - http_response[response_len] = '\0'; - - if(strncmp(http_response, "HTTP", 4) == 0) { - if((body_start = (char *)http_strstr(http_response, "\r\n\r\n")) != NULL) { - body_start += 4; - body_len = http_response + response_len - body_start; - - if(body_len > 0) { - http_body = (char *) http_malloc(body_len + 1); - memcpy(http_body, body_start, body_len); - http_body[body_len] = '\0'; - } - - http_free(http_response); - } - else { - http_body = http_response; - } - } - else { - http_body = http_response; - } - - return http_body; -} diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/http_client.h b/Firmware/RTLGDB/USDK/component/common/utilities/http_client.h deleted file mode 100644 index 8955188..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/http_client.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _HTTP_H_ -#define _HTTP_H_ - -char *http_post_header(char *address, char *resource, char *type, int data_len); -char *http_get_header(char *address, char *resource); -char *http_response_header(char *buf, int response_len); -char *http_response_body(char *buf, int response_len); -void http_free(void *buf); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/ssl_client.c b/Firmware/RTLGDB/USDK/component/common/utilities/ssl_client.c deleted file mode 100644 index a2faa1d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/ssl_client.c +++ /dev/null @@ -1,248 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include "polarssl/config.h" -#include "platform_opts.h" - -#if CONFIG_SSL_CLIENT - -#include -#include - -#include "polarssl/net.h" -#include "polarssl/ssl.h" -#include "polarssl/error.h" -#include "polarssl/memory.h" - -#define SERVER_PORT 443 -#define SERVER_HOST "192.168.13.15" -#define GET_REQUEST "GET / HTTP/1.0\r\n\r\n" -#define DEBUG_LEVEL 0 - -//#define SSL_CLIENT_EXT -#ifdef SSL_CLIENT_EXT -#define STACKSIZE 2048 -#else -#define STACKSIZE 1150 -#endif - -static int is_task = 0; -static char server_host[16]; -static size_t min_heap_size = 0; - -static void my_debug(void *ctx, int level, const char *str) -{ - if(level <= DEBUG_LEVEL) { - printf("\n\r%s", str); - } -} - -static int my_random(void *p_rng, unsigned char *output, size_t output_len) -{ - rtw_get_random_bytes(output, output_len); - return 0; -} - -void* my_malloc(size_t size) -{ - void *ptr = pvPortMalloc(size); - size_t current_heap_size = xPortGetFreeHeapSize(); - - if((current_heap_size < min_heap_size) || (min_heap_size == 0)) - min_heap_size = current_heap_size; - - return ptr; -} - -#define my_free vPortFree - -static void ssl_client(void *param) -{ - int ret, len, server_fd = -1; - unsigned char buf[512]; - ssl_context ssl; - int retry_count = 0; - - memory_set_own(my_malloc, my_free); - - /* - * 1. Start the connection - */ - printf(" . Connecting to tcp/%s/%d...\n", server_host, SERVER_PORT); - - if((ret = net_connect(&server_fd, server_host, SERVER_PORT)) != 0) { - printf(" failed\n ! net_connect returned %d\n", ret); - goto exit1; - } - - printf(" ok\n"); - - /* - * 2. Setup stuff - */ - printf(" . Setting up the SSL/TLS structure...\n" ); - - if((ret = ssl_init(&ssl)) != 0) { - printf(" failed\n ! ssl_init returned %d\n", ret); - goto exit; - } -#ifdef SSL_CLIENT_EXT - if((ret = ssl_client_ext_init()) != 0) { - printf(" failed\n ! ssl_client_ext_init returned %d\n", ret); - goto exit; - } -#endif - ssl_set_endpoint(&ssl, SSL_IS_CLIENT); - ssl_set_authmode(&ssl, SSL_VERIFY_NONE); - ssl_set_rng(&ssl, my_random, NULL); - ssl_set_bio(&ssl, net_recv, &server_fd, net_send, &server_fd); - ssl_set_dbg(&ssl, my_debug, NULL); -#ifdef POLARSSL_DEBUG_C - debug_set_threshold(DEBUG_LEVEL); -#endif -#ifdef SSL_CLIENT_EXT - if((ret = ssl_client_ext_setup(&ssl)) != 0) { - printf(" failed\n ! ssl_client_ext_setup returned %d\n", ret); - goto exit; - } -#endif - - printf(" ok\n"); - - /* - * 3. Handshake - */ - printf(" . Performing the SSL/TLS handshake...\n"); - - while((ret = ssl_handshake(&ssl)) != 0) { - if((ret != POLARSSL_ERR_NET_WANT_READ && ret != POLARSSL_ERR_NET_WANT_WRITE - && ret != POLARSSL_ERR_NET_RECV_FAILED) || retry_count >= 5) { - printf(" failed\n ! ssl_handshake returned -0x%x\n", -ret); - goto exit; - } - retry_count++; - } - - printf(" ok\n"); - printf(" . Use ciphersuite %s\n", ssl_get_ciphersuite(&ssl)); - - /* - * 4. Write the GET request - */ - printf(" > Write to server:\n"); - - len = sprintf((char *) buf, GET_REQUEST); - - while((ret = ssl_write(&ssl, buf, len)) <= 0) { - if(ret != POLARSSL_ERR_NET_WANT_READ && ret != POLARSSL_ERR_NET_WANT_WRITE) { - printf(" failed\n ! ssl_write returned %d\n", ret); - goto exit; - } - } - - len = ret; - printf(" %d bytes written\n%s\n", len, (char *) buf); - - /* - * 5. Read the HTTP response - */ - printf(" < Read from server:"); - - do { - len = sizeof(buf) - 1; - memset(buf, 0, sizeof(buf)); - ret = ssl_read(&ssl, buf, len); - - if(ret == POLARSSL_ERR_NET_WANT_READ || ret == POLARSSL_ERR_NET_WANT_WRITE) - continue; - - if(ret == POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY) - break; - - if(ret < 0) { - printf(" failed\n ! ssl_read returned %d\n", ret); - break; - } - - if(ret == 0) { - printf("EOF\n"); - break; - } - - len = ret; - printf(" %d bytes read\n%s\n", len, (char *) buf); - } - while(1); - - ssl_close_notify(&ssl); - -exit: - -#ifdef POLARSSL_ERROR_C - if(ret != 0) { - char error_buf[100]; - polarssl_strerror(ret, error_buf, 100); - printf("\nLast error was: %d - %s\n", ret, error_buf); - } -#endif - - net_close(server_fd); - ssl_free(&ssl); -#ifdef SSL_CLIENT_EXT - ssl_client_ext_free(); -#endif -exit1: - - if(is_task) { -#if defined(INCLUDE_uxTaskGetStackHighWaterMark) && (INCLUDE_uxTaskGetStackHighWaterMark == 1) - printf("\nMin available stack size of %s = %d * %d bytes\n", __FUNCTION__, uxTaskGetStackHighWaterMark(NULL), sizeof(portBASE_TYPE)); -#endif - - if(min_heap_size > 0) - printf("\nMin available heap size = %d bytes during %s\n", min_heap_size, __FUNCTION__); - - vTaskDelete(NULL); - } - - if(param != NULL) - *((int *) param) = ret; -} - -void start_ssl_client(void) -{ - is_task = 1; - //strcpy(server_host, SERVER_HOST); - - if(xTaskCreate(ssl_client, "ssl_client", STACKSIZE, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) - printf("%s xTaskCreate failed\n", __FUNCTION__); -} - -void do_ssl_connect(void) -{ - int ret; - static int success = 0; - static int fail = 0; - - is_task = 0; - strcpy(server_host, SERVER_HOST); - ssl_client(&ret); - - if(ret != 0) - printf("%s fail (success %d times, fail %d times)\n", __FUNCTION__, success, ++ fail); - else - printf("%s success (success %d times, fail %d times)\n", __FUNCTION__, ++ success, fail); -} - -void cmd_ssl_client(int argc, char **argv) -{ - if(argc == 2) { - strcpy(server_host, argv[1]); - } - else { - printf("Usage: %s SSL_SERVER_HOST\n", argv[0]); - return; - } - - start_ssl_client(); -} - -#endif // #if CONFIG_SSL_CLIENT diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/ssl_client_ext.c b/Firmware/RTLGDB/USDK/component/common/utilities/ssl_client_ext.c deleted file mode 100644 index 2e3c44d..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/ssl_client_ext.c +++ /dev/null @@ -1,184 +0,0 @@ -#include -#include -#include "platform_opts.h" - -#if CONFIG_SSL_CLIENT -//#define SSL_VERIFY_CLIENT -//#define SSL_VERIFY_SERVER - -#ifdef SSL_VERIFY_CLIENT -static x509_crt* _cli_crt = NULL; -static pk_context* _clikey_rsa = NULL; - -static const char *test_client_key = \ -"-----BEGIN RSA PRIVATE KEY-----\r\n" \ -"MIICXgIBAAKBgQDKLbkPtV0uhoqkHxHl/sZlq5TrUqu6pScqGkMnEUDKIFR5QMNf\r\n" \ -"qLgbGPwbreN4AkHQlvqnn/2Swz1uurUH4pxcGp54j7QmANXvd5hJtCMhPpDcPS6k\r\n" \ -"ldlIJ8y3KoCoqAot6uo9IL/IKKk3aOQqeHKayIyjOOksjMkgeE8/gCpmFQIDAQAB\r\n" \ -"AoGBAKoSBj+Bh83wXUWr4SmAxLGXwSCnHVBXRveyudRuPfsJcSXCZdbdHWml/cTm\r\n" \ -"5Jb6BxUJO/avreW8GLxBkLD+XhnXlkw1RJ8FYZPXdzlNJzoYyVK0GZ/qyGacEEFt\r\n" \ -"ekvGfBJIq+7ksKcJt5c9qARClOvauYLRGwubl64xD6PupSINAkEA+5C395h227nc\r\n" \ -"5zF8s2rYBP78i5uS7hKqqVjGy8pcIFHiM/0ehzcN3V3gJXLjkAbXfvP0h/tm8eQG\r\n" \ -"QUpJBY/YLwJBAM2+IOfTmEBxrpASUeN1Lx9yg0+Swyz8oz2a2blfFwbpCWBi18M2\r\n" \ -"huo+YECeMggqBBYwgQ9J2ixpaj/e9+0pkPsCQQDztTWkFf4/y4WoLBcEseNoo6YB\r\n" \ -"kcv7+/V9bdXZI8ewP+OGPhdPIxS5efJmFTFEHHy0Lp6dBf6rJB6zLcYkL0BdAkEA\r\n" \ -"nGBqeknlavX9DBwgiZXD308WZyDRoBvVpzlPSwnvYp01N0FpZULIgLowRmz28iWd\r\n" \ -"PZBYR9qGLUNiMnGyV1xEiQJAOdlBM4M9Xj2Z9inCdkgFkbIOSe5kvIPC24CjZyyG\r\n" \ -"g3lK/YezoDmdD//OLoY81y6VdO5dwjm7P0wZB63EDRidHA==\r\n" \ -"-----END RSA PRIVATE KEY-----\r\n"; - -static const char *test_client_cert = \ -"-----BEGIN CERTIFICATE-----\r\n" \ -"MIIC4DCCAkmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADB7MQswCQYDVQQGEwJDTjEL\r\n" \ -"MAkGA1UECAwCSlMxCzAJBgNVBAcMAlNaMRAwDgYDVQQKDAdSZWFsc2lsMRAwDgYD\r\n" \ -"VQQLDAdSZWFsdGVrMRAwDgYDVQQDDAdSZWFsc2lsMRwwGgYJKoZIhvcNAQkBFg1h\r\n" \ -"QHJlYWxzaWwuY29tMB4XDTE1MTIyMzA2NTI0MFoXDTE2MTIyMjA2NTI0MFowdDEL\r\n" \ -"MAkGA1UEBhMCQ04xCzAJBgNVBAgMAkpTMRAwDgYDVQQKDAdSZWFsc2lsMRAwDgYD\r\n" \ -"VQQLDAdSZWFsdGVrMRYwFAYDVQQDDA0xOTIuMTY4LjEuMTQxMRwwGgYJKoZIhvcN\r\n" \ -"AQkBFg1jQHJlYWxzaWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK\r\n" \ -"LbkPtV0uhoqkHxHl/sZlq5TrUqu6pScqGkMnEUDKIFR5QMNfqLgbGPwbreN4AkHQ\r\n" \ -"lvqnn/2Swz1uurUH4pxcGp54j7QmANXvd5hJtCMhPpDcPS6kldlIJ8y3KoCoqAot\r\n" \ -"6uo9IL/IKKk3aOQqeHKayIyjOOksjMkgeE8/gCpmFQIDAQABo3sweTAJBgNVHRME\r\n" \ -"AjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0\r\n" \ -"ZTAdBgNVHQ4EFgQUJLmwJNyKHCTEspNTPNpbPjXkjnQwHwYDVR0jBBgwFoAUAfLa\r\n" \ -"cSF933h+3pYNcs36lvm7yEkwDQYJKoZIhvcNAQELBQADgYEAlo495gu94nMHFYx4\r\n" \ -"+V7PjwGIqanqwLjsem9qvwJa/K1QoM4JxnqRXFUdSfZMhnlrMgPer4fDHpWAutWB\r\n" \ -"X2Fiww+VVJSn8Go0seK8RQf8n/n3rJ5B3lef1Po2zHchELWhlFT6k5Won7gp64RN\r\n" \ -"9PcwFFy0Va/bkJsot//kdZNKs/g=\r\n" \ -"-----END CERTIFICATE-----\r\n"; -#endif - -#ifdef SSL_VERIFY_SERVER -static x509_crt* _ca_crt = NULL; - -static const char *test_ca_cert = \ -"-----BEGIN CERTIFICATE-----\r\n" \ -"MIICxDCCAi2gAwIBAgIJANdeY8UOfqpBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNV\r\n" \ -"BAYTAkNOMQswCQYDVQQIDAJKUzELMAkGA1UEBwwCU1oxEDAOBgNVBAoMB1JlYWxz\r\n" \ -"aWwxEDAOBgNVBAsMB1JlYWx0ZWsxEDAOBgNVBAMMB1JlYWxzaWwxHDAaBgkqhkiG\r\n" \ -"9w0BCQEWDWFAcmVhbHNpbC5jb20wHhcNMTUxMjIzMDYzMDA1WhcNMTYxMjIyMDYz\r\n" \ -"MDA1WjB7MQswCQYDVQQGEwJDTjELMAkGA1UECAwCSlMxCzAJBgNVBAcMAlNaMRAw\r\n" \ -"DgYDVQQKDAdSZWFsc2lsMRAwDgYDVQQLDAdSZWFsdGVrMRAwDgYDVQQDDAdSZWFs\r\n" \ -"c2lsMRwwGgYJKoZIhvcNAQkBFg1hQHJlYWxzaWwuY29tMIGfMA0GCSqGSIb3DQEB\r\n" \ -"AQUAA4GNADCBiQKBgQCmfNpluJZP0Sla+MIYzRGA1rljK5VncuBKQiKBF4BdO73H\r\n" \ -"OTUoT0ydR7x7lS2Ns1HQop2oldroJVBj38+pLci1i/3flkONCDfsWOzfcGZ9RItq\r\n" \ -"Zf9eQI8CEZI5i0Fvi3mgaoqCXvutFBrtTQRNsKQD69SqxEWWPb1y+Fd2nONeawID\r\n" \ -"AQABo1AwTjAdBgNVHQ4EFgQUAfLacSF933h+3pYNcs36lvm7yEkwHwYDVR0jBBgw\r\n" \ -"FoAUAfLacSF933h+3pYNcs36lvm7yEkwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B\r\n" \ -"AQsFAAOBgQA6McwC1Vk4k/5Bh/sf9cfwSK9A0ecaIH0NizYoWpWRAsv7TDgj0PbO\r\n" \ -"Qqxi/QhpuYezgRqKqAv7QYNSQa39X7opzSsdSGtTnId374PZZeCDqZpfcAbsNk5o\r\n" \ -"6HLpJ27esFa/flTL0FtmO+AT2uiPMvRP0a4u4uuLQK2Jgm/CmzJ47w==\r\n" \ -"-----END CERTIFICATE-----\r\n"; - -static int my_verify(void *data, x509_crt *crt, int depth, int *flags) -{ - char buf[1024]; - ((void) data); - - printf("Verify requested for (Depth %d):\n", depth); - x509_crt_info(buf, sizeof(buf) - 1, "", crt); - printf("%s", buf); - - if(((*flags) & BADCERT_EXPIRED) != 0) - printf("server certificate has expired\n"); - - if(((*flags) & BADCERT_REVOKED) != 0) - printf(" ! server certificate has been revoked\n"); - - if(((*flags) & BADCERT_CN_MISMATCH) != 0) - printf(" ! CN mismatch\n"); - - if(((*flags) & BADCERT_NOT_TRUSTED) != 0) - printf(" ! self-signed or not signed by a trusted CA\n"); - - if(((*flags) & BADCRL_NOT_TRUSTED) != 0) - printf(" ! CRL not trusted\n"); - - if(((*flags) & BADCRL_EXPIRED) != 0) - printf(" ! CRL expired\n"); - - if(((*flags) & BADCERT_OTHER) != 0) - printf(" ! other (unknown) flag\n"); - - if((*flags) == 0) - printf(" Certificate verified without error flags\n"); - - return(0); -} -#endif - -int ssl_client_ext_init(void) -{ -#ifdef SSL_VERIFY_CLIENT - _cli_crt = polarssl_malloc(sizeof(x509_crt)); - - if(_cli_crt) - x509_crt_init(_cli_crt); - else - return -1; - - _clikey_rsa = polarssl_malloc(sizeof(pk_context)); - - if(_clikey_rsa) - pk_init(_clikey_rsa); - else - return -1; -#endif -#ifdef SSL_VERIFY_SERVER - _ca_crt = polarssl_malloc(sizeof(x509_crt)); - - if(_ca_crt) - x509_crt_init(_ca_crt); - else - return -1; -#endif - return 0; -} - -void ssl_client_ext_free(void) -{ -#ifdef SSL_VERIFY_CLIENT - if(_cli_crt) { - x509_crt_free(_cli_crt); - polarssl_free(_cli_crt); - _cli_crt = NULL; - } - - if(_clikey_rsa) { - pk_free(_clikey_rsa); - polarssl_free(_clikey_rsa); - _clikey_rsa = NULL; - } -#endif -#ifdef SSL_VERIFY_SERVER - if(_ca_crt) { - x509_crt_free(_ca_crt); - polarssl_free(_ca_crt); - _ca_crt = NULL; - } -#endif -} - -int ssl_client_ext_setup(ssl_context *ssl) -{ -#ifdef SSL_VERIFY_CLIENT - if(x509_crt_parse(_cli_crt, test_client_cert, strlen(test_client_cert)) != 0) - return -1; - - if(pk_parse_key(_clikey_rsa, test_client_key, strlen(test_client_key), NULL, 0) != 0) - return -1; - - ssl_set_own_cert(ssl, _cli_crt, _clikey_rsa); -#endif -#ifdef SSL_VERIFY_SERVER - if(x509_crt_parse(_ca_crt, test_ca_cert, strlen(test_ca_cert)) != 0) - return -1; - - ssl_set_ca_chain(ssl, _ca_crt, NULL, NULL); - ssl_set_authmode(ssl, SSL_VERIFY_REQUIRED); - ssl_set_verify(ssl, my_verify, NULL); -#endif - return 0; -} - -#endif //#if CONFIG_SSL_CLIENT diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/tcpecho.c b/Firmware/RTLGDB/USDK/component/common/utilities/tcpecho.c deleted file mode 100644 index f3ef233..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/tcpecho.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - - -#include "lwip/opt.h" - -#if LWIP_NETCONN - -#include "lwip/sys.h" -#include "lwip/api.h" - -#define TCPECHO_THREAD_PRIO ( tskIDLE_PRIORITY + 3 ) - - - -/*-----------------------------------------------------------------------------------*/ -static void tcpecho_thread(void *arg) -{ - struct netconn *conn, *newconn; - err_t err; - - LWIP_UNUSED_ARG(arg); - - /* Create a new connection identifier. */ - conn = netconn_new(NETCONN_TCP); - - if (conn!=NULL) - { - /* Bind connection to well known port number 7. */ - err = netconn_bind(conn, NULL, 7); - - if (err == ERR_OK) - { - /* Tell connection to go into listening mode. */ - netconn_listen(conn); - - while (1) - { - /* Grab new connection. */ - newconn = netconn_accept(conn); - - /* Process the new connection. */ - if (newconn) - { - struct netbuf *buf; - void *data; - u16_t len; - - while ((buf = netconn_recv(newconn)) != NULL) - { - do - { - netbuf_data(buf, &data, &len); - netconn_write(newconn, data, len, NETCONN_COPY); - - } - while (netbuf_next(buf) >= 0); - - netbuf_delete(buf); - } - - /* Close connection and discard connection identifier. */ - netconn_close(newconn); - netconn_delete(newconn); - } - } - } - else - { - printf(" can not bind TCP netconn"); - } - } - else - { - printf("can not create TCP netconn"); - } -} -/*-----------------------------------------------------------------------------------*/ - -void tcpecho_init(void) -{ - sys_thread_new("tcpecho", tcpecho_thread, NULL, DEFAULT_THREAD_STACKSIZE, TCPECHO_THREAD_PRIO); -} -/*-----------------------------------------------------------------------------------*/ - -void cmd_tcpecho(int argc, char **argv) -{ - printf("\n\rInit TCP ECHO Server ..."); - tcpecho_init(); - printf("\n\r\nPlease use echotool to connect to this echo server. ex. echotool 192.168.0.1 /p tcp /r 7 /n 0"); -} -#endif /* LWIP_NETCONN */ diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/tcptest.c b/Firmware/RTLGDB/USDK/component/common/utilities/tcptest.c deleted file mode 100644 index 053ce30..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/tcptest.c +++ /dev/null @@ -1,938 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include "main.h" - -#if CONFIG_BSD_TCP - -#include -#if LWIP_SOCKET -#include -#include -#include -#include - -#include "wifi_util.h" - -#define PER_SECOND_REPORT 1 -#define BSD_STACK_SIZE 2048 -#define DEFAULT_PORT 5001 -#define DEFAULT_TIME 10 -#define SERVER_BUF_SIZE 1500 -#define CLIENT_BUF_SIZE 1460 -#define KB 1024 -#define MB 1048576//1024*1024 -#define DEFAULT_TCP_BANDWIDTH 131072 //128*1024Bytes = 1Mbits -#define DEFAULT_UDP_BANDWIDTH 131072 //128*1024Bytes = 1Mbits -#define DEFAULT_UDP_TOS_VALUE 96 // BE=96 - - -struct iperf_data_t{ - char server_ip[16]; - int server_fd; - int client_fd; - uint16_t port; - unsigned char start; - unsigned int buf_size; - uint32_t time; - uint64_t total_size; - uint64_t bandwidth; - uint8_t tos_value; -}; - -struct iperf_data_t tcp_server_data,tcp_client_data,udp_server_data,udp_client_data; - -xTaskHandle g_tcp_server_task = NULL; -xTaskHandle g_tcp_client_task = NULL; -xTaskHandle g_udp_client_task = NULL; -xTaskHandle g_udp_server_task = NULL; -unsigned char g_tcp_terminate = 0; -unsigned char g_udp_terminate = 0; - -int tcp_client_func(struct iperf_data_t iperf_data) -{ - struct sockaddr_in ser_addr; - char *buffer = NULL; - int i=0; - uint32_t start_time, end_time, report_start_time; - uint64_t total_size=0,report_size=0; - - buffer = pvPortMalloc(iperf_data.buf_size); - if(!buffer){ - printf("\n\r[ERROR] %s: Alloc buffer failed",__func__); - goto Exit2; - } - //filling the buffer - for (i = 0; i < iperf_data.buf_size; i++){ - buffer[i] = (char)(i % 10); - } - - //create socket - if( (iperf_data.client_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){ - printf("\n\r[ERROR] %s: Create TCP socket failed",__func__); - goto Exit2; - } - - //initialize value in dest - memset(&ser_addr, 0, sizeof(ser_addr)); - ser_addr.sin_family = AF_INET; - ser_addr.sin_port = htons(iperf_data.port); - ser_addr.sin_addr.s_addr = inet_addr(iperf_data.server_ip); - - printf("\n\r%s: Server IP=%s, port=%d", __func__,iperf_data.server_ip, iperf_data.port); - printf("\n\r%s: Create socket fd = %d", __func__,iperf_data.client_fd); - - //Connecting to server - if( connect(iperf_data.client_fd, (struct sockaddr*)&ser_addr, sizeof(ser_addr)) < 0){ - printf("\n\r[ERROR] %s: Connect to server failed",__func__); - goto Exit1; - } - printf("\n\r%s: Connect to server successfully",__func__); - if(iperf_data.total_size == 0){ - start_time = xTaskGetTickCount(); - end_time = start_time; - report_start_time = start_time; - while ( ((end_time - start_time) <= (configTICK_RATE_HZ * iperf_data.time)) && (!g_tcp_terminate) ) { - if( send(iperf_data.client_fd, buffer, iperf_data.buf_size,0) <= 0){ - printf("\n\r[ERROR] %s: TCP client send data error",__func__); - goto Exit1; - } - total_size+=iperf_data.buf_size; - report_size+=iperf_data.buf_size; - end_time = xTaskGetTickCount(); - if(((end_time - report_start_time) >= (configTICK_RATE_HZ * 1)) && ((end_time - report_start_time) <= (configTICK_RATE_HZ * 2))) { -#if PER_SECOND_REPORT - printf("\n\r%s: Send %d KBytes in %d ms, %d Kbits/sec",__func__, (uint32_t)(report_size/KB),(uint32_t)(end_time-report_start_time),((uint32_t)(report_size*8)/(end_time - report_start_time))); -#endif - report_start_time = end_time; - report_size = 0; - } - else if( (iperf_data.bandwidth!=0) && (report_size >= iperf_data.bandwidth) ){ - while((end_time - report_start_time) < configTICK_RATE_HZ){ - end_time = xTaskGetTickCount(); - } -#if PER_SECOND_REPORT - printf("\n\r%s: Send %d KBytes in %d ms, %d Kbits/sec",__func__, (uint32_t)(report_size/KB),(uint32_t)(end_time-report_start_time),((uint32_t)(report_size*8)/(end_time - report_start_time))); -#endif - report_start_time = end_time; - report_size = 0; - } - } - } - else{ - start_time = xTaskGetTickCount(); - end_time = start_time; - report_start_time = start_time; - while ( (total_size < iperf_data.total_size) && (!g_tcp_terminate) ) { - if( send(iperf_data.client_fd, buffer, iperf_data.buf_size,0) <= 0){ - printf("\n\r[ERROR] %s: TCP client send data error",__func__); - goto Exit1; - } - total_size+=iperf_data.buf_size; - report_size+=iperf_data.buf_size; - end_time = xTaskGetTickCount(); - if(((end_time - report_start_time) >= (configTICK_RATE_HZ * 1)) && ((end_time - report_start_time) <= (configTICK_RATE_HZ * 2))) { -#if PER_SECOND_REPORT - printf("\n\r%s: Send %d KBytes in %d ms, %d Kbits/sec",__func__, (uint32_t)(report_size/KB),(uint32_t)(end_time-report_start_time),((uint32_t)(report_size*8)/(end_time - report_start_time))); -#endif - report_start_time = end_time; - report_size = 0; - } - else if( (iperf_data.bandwidth!=0) && (report_size >= iperf_data.bandwidth) ){ - while((end_time - report_start_time) < configTICK_RATE_HZ){ - end_time = xTaskGetTickCount(); - } -#if PER_SECOND_REPORT - printf("\n\r%s: Send %d KBytes in %d ms, %d Kbits/sec",__func__, (uint32_t)(report_size/KB),(uint32_t)(end_time-report_start_time),((uint32_t)(report_size*8)/(end_time - report_start_time))); -#endif - report_start_time = end_time; - report_size = 0; - } - } - } - printf("\n\r%s: [END] Totally send %d KBytes in %d ms, %d Kbits/sec",__func__, (uint32_t)(total_size/KB),(uint32_t)(end_time-start_time),((uint32_t)(total_size*8)/(end_time - start_time))); - -Exit1: - closesocket(iperf_data.client_fd); -Exit2: - printf("\n\r%s: Close client socket",__func__); - if(buffer) - vPortFree(buffer); - return 0; -} - -int tcp_server_func(struct iperf_data_t iperf_data) -{ - struct sockaddr_in ser_addr , client_addr; - char *buffer = NULL; - int addrlen = sizeof(struct sockaddr_in); - int n = 1; - int recv_size=0; - uint64_t total_size=0,report_size=0; - uint32_t start_time, report_start_time, report_end_time; - - buffer = pvPortMalloc(iperf_data.buf_size); - if(!buffer){ - printf("\n\r[ERROR] %s: Alloc buffer failed",__func__); - goto Exit3; - } - - //create socket - if((iperf_data.server_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){ - printf("\n\r[ERROR] %s: Create socket failed",__func__); - goto Exit3; - } - - printf("\n\r%s: Create socket fd = %d", __func__,iperf_data.server_fd); - - setsockopt( iperf_data.server_fd, SOL_SOCKET, SO_REUSEADDR, (const char *) &n, sizeof( n ) ); - - //initialize structure dest - memset(&ser_addr, 0, sizeof(ser_addr)); - ser_addr.sin_family = AF_INET; - ser_addr.sin_port = htons(iperf_data.port); - ser_addr.sin_addr.s_addr = htonl(INADDR_ANY); - - // binding the TCP socket to the TCP server address - if( bind(iperf_data.server_fd, (struct sockaddr*)&ser_addr, sizeof(ser_addr)) < 0){ - printf("\n\r[ERROR] %s: Bind socket failed",__func__); - goto Exit2; - } - printf("\n\r%s: Bind socket successfully",__func__); - - //Make it listen to socket with max 20 connections - if( listen(iperf_data.server_fd, 20) != 0){ - printf("\n\r[ERROR] %s: Listen socket failed",__func__); - goto Exit2; - } - printf("\n\r%s: Listen port %d",__func__,iperf_data.port); - -Restart: - if( (iperf_data.client_fd = accept(iperf_data.server_fd, (struct sockaddr*)&client_addr, &addrlen)) < 0){ - printf("\n\r[ERROR] %s: Accept TCP client socket error!",__func__); - goto Exit2; - } - printf("\n\r%s: Accept connection successfully",__func__); - - start_time = xTaskGetTickCount(); - report_start_time = start_time; - while (!g_tcp_terminate) { - recv_size = recv(iperf_data.client_fd, buffer, iperf_data.buf_size, 0); //MSG_DONTWAIT MSG_WAITALL - if( recv_size < 0){ - printf("\n\r[ERROR] %s: Receive data failed",__func__); - goto Exit1; - } - else if(recv_size == 0){ - printf("\n\r%s: [END] Totally receive %d KBytes in %d ms, %d Kbits/sec",__func__, (uint32_t) (total_size/KB),(uint32_t) (report_end_time-start_time),((uint32_t)(total_size*8)/(report_end_time - start_time))); - total_size=0; - close(iperf_data.client_fd); - goto Restart; - } - report_end_time = xTaskGetTickCount(); - total_size+=recv_size; - report_size+=recv_size; - if(((report_end_time - report_start_time) >= (configTICK_RATE_HZ * 1)) && ((report_end_time - report_start_time) <= (configTICK_RATE_HZ * 2))) { -#if PER_SECOND_REPORT - printf("\n\r%s: Receive %d KBytes in %d ms, %d Kbits/sec",__func__, (uint32_t) (report_size/KB),(uint32_t) (report_end_time-report_start_time),((uint32_t)(report_size*8)/(report_end_time - report_start_time))); -#endif - report_start_time = report_end_time; - report_size = 0; - } - else if((report_end_time - report_start_time) > (configTICK_RATE_HZ * 2)){ - report_start_time = report_end_time; - start_time = report_end_time; - report_size = 0; - } - } - printf("\n\r%s: [END] Totally receive %d KBytes in %d ms, %d Kbits/sec",__func__, (uint32_t) (total_size/KB),(uint32_t) (report_end_time-start_time),((uint32_t)(total_size*8)/(report_end_time - start_time))); - -Exit1: - // close the connected socket after receiving from connected TCP client - close(iperf_data.client_fd); - -Exit2: - // close the listening socket - close(iperf_data.server_fd); - -Exit3: - if(buffer) - vPortFree(buffer); - return 0; -} - -int udp_client_func(struct iperf_data_t iperf_data) -{ - struct sockaddr_in ser_addr; - char *buffer = NULL; - int i=0; - int addrlen = sizeof(struct sockaddr_in); - uint32_t start_time, end_time, bandwidth_time; - uint64_t total_size=0, bandwidth_size=0; - - - buffer = pvPortMalloc(iperf_data.buf_size); - if(!buffer){ - printf("\n\r[ERROR] %s: Alloc buffer failed",__func__); - goto Exit2; - } - - //filling the buffer - for (i = 0; i < iperf_data.buf_size; i++){ - buffer[i] = (char)(i % 10); - } - - //create socket - if( (iperf_data.client_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0){ - printf("\n\r[ERROR] %s: Create UDP socket failed",__func__); - goto Exit2; - } - - //initialize value in dest - memset(&ser_addr, 0, sizeof(ser_addr)); - ser_addr.sin_family = AF_INET; - ser_addr.sin_port = htons(iperf_data.port); - ser_addr.sin_addr.s_addr = inet_addr(iperf_data.server_ip); - - printf("\n\r%s: Server IP=%s, port=%d", __func__,iperf_data.server_ip, iperf_data.port); - printf("\n\r%s: Create socket fd = %d", __func__,iperf_data.client_fd); - - lwip_setsockopt(iperf_data.client_fd,IPPROTO_IP,IP_TOS,&iperf_data.tos_value,sizeof(iperf_data.tos_value)); - - if(iperf_data.total_size == 0){ - start_time = xTaskGetTickCount(); - end_time = start_time; - bandwidth_time = start_time; - while ( ((end_time - start_time) <= (configTICK_RATE_HZ * iperf_data.time)) && (!g_udp_terminate) ) { - if( sendto(iperf_data.client_fd, buffer, iperf_data.buf_size,0,(struct sockaddr*)&ser_addr, addrlen) < 0){ - //printf("\n\r[ERROR] %s: UDP client send data error",__func__); - }else{ - total_size+=iperf_data.buf_size; - bandwidth_size+=iperf_data.buf_size; - } - - if((end_time - bandwidth_time) >= (configTICK_RATE_HZ*1)){ -#if PER_SECOND_REPORT - printf("\n\r%s: Send %d KBytes in %d ms, %d Kbits/sec",__func__,(uint32_t)( bandwidth_size/KB),(uint32_t)(end_time-bandwidth_time),((uint32_t)(bandwidth_size*8)/(end_time - bandwidth_time))); -#endif - bandwidth_time = end_time; - bandwidth_size = 0; - }else{ - if(bandwidth_size >= iperf_data.bandwidth){ - while((end_time - bandwidth_time) < configTICK_RATE_HZ){ - end_time = xTaskGetTickCount(); - } -#if PER_SECOND_REPORT - printf("\n\r%s: Send %d KBytes in %d ms, %d Kbits/sec",__func__, (uint32_t)(bandwidth_size/KB),(uint32_t)(end_time-bandwidth_time),((uint32_t)(bandwidth_size*8)/(end_time - bandwidth_time))); -#endif - bandwidth_time = end_time; - bandwidth_size = 0; - } - } - - end_time = xTaskGetTickCount(); - } - } - else{ - start_time = xTaskGetTickCount(); - end_time = start_time; - bandwidth_time = start_time; - while ( (total_size < iperf_data.total_size) && (!g_udp_terminate) ) { - if( sendto(iperf_data.client_fd, buffer, iperf_data.buf_size,0,(struct sockaddr*)&ser_addr, addrlen) < 0){ - //printf("\n\r[ERROR] %s: UDP client send data error",__func__); - }else{ - total_size+=iperf_data.buf_size; - bandwidth_size+=iperf_data.buf_size; - } - if((end_time - bandwidth_time) >= (configTICK_RATE_HZ*1)){ -#if PER_SECOND_REPORT - printf("\n\r%s: Send %d KBytes in %d ms, %d Kbits/sec",__func__, (uint32_t)(bandwidth_size/KB),(uint32_t)(end_time-bandwidth_time),((uint32_t)(bandwidth_size*8)/(end_time - bandwidth_time))); -#endif - bandwidth_time = end_time; - bandwidth_size = 0; - }else{ - if(bandwidth_size >= iperf_data.bandwidth){ - while((end_time - bandwidth_time) < (configTICK_RATE_HZ*1)){ - end_time = xTaskGetTickCount(); - } -#if PER_SECOND_REPORT - printf("\n\r%s: Send %d KBytes in %d ms, %d Kbits/sec",__func__, (uint32_t)(bandwidth_size/KB),(uint32_t)(end_time-bandwidth_time),((uint32_t)(bandwidth_size*8)/(end_time - bandwidth_time))); -#endif - bandwidth_time = end_time; - bandwidth_size = 0; - } - } - end_time = xTaskGetTickCount(); - } - } - printf("\n\r%s: [END] Totally send %d KBytes in %d ms, %d Kbits/sec",__func__, (uint32_t)(total_size/KB),(uint32_t)(end_time-start_time),((uint32_t)(total_size*8)/(end_time - start_time))); - -Exit1: - close(iperf_data.client_fd); -Exit2: - printf("\n\r%s: Close client socket",__func__); - if(buffer) - vPortFree(buffer); - return 0; -} - -int udp_server_func(struct iperf_data_t iperf_data) -{ - int server_fd; - struct sockaddr_in ser_addr , client_addr; - char *buffer = NULL; - int addrlen = sizeof(struct sockaddr_in); - int n = 1; - uint32_t start_time, report_start_time, report_end_time; - int recv_size=0; - uint64_t total_size=0,report_size=0; - - buffer = pvPortMalloc(iperf_data.buf_size); - if(!buffer){ - printf("\n\r[ERROR] %s: Alloc buffer failed",__func__); - goto Exit2; - } - - //create socket - if((iperf_data.server_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0){ - printf("\n\r[ERROR] %s: Create socket failed",__func__); - goto Exit2; - } - - printf("\n\r%s: Create socket fd = %d, port = %d", __func__,iperf_data.server_fd,iperf_data.port); - - setsockopt( iperf_data.server_fd, SOL_SOCKET, SO_REUSEADDR, (const char *) &n, sizeof( n ) ); - - //initialize structure dest - memset(&ser_addr, 0, sizeof(ser_addr)); - ser_addr.sin_family = AF_INET; - ser_addr.sin_port = htons(iperf_data.port); - ser_addr.sin_addr.s_addr = htonl(INADDR_ANY); - - // binding the TCP socket to the TCP server address - if( bind(iperf_data.server_fd, (struct sockaddr*)&ser_addr, sizeof(ser_addr)) < 0){ - printf("\n\r[ERROR] %s: Bind socket failed",__func__); - goto Exit1; - } - - printf("\n\r%s: Bind socket successfully",__func__); - - start_time = xTaskGetTickCount(); - report_start_time = start_time; - - while (!g_udp_terminate) { - recv_size = recvfrom(iperf_data.server_fd,buffer,iperf_data.buf_size,0,(struct sockaddr *) &client_addr,&addrlen); - if( recv_size < 0){ - printf("\n\r[ERROR] %s: Receive data failed",__func__); - goto Exit1; - } - // ack data to client - // Not send ack to prevent send fail due to limited skb, but it will have warning at iperf client - //sendto(server_fd,buffer,ret,0,(struct sockaddr*)&client_addr,sizeof(client_addr)); - - report_end_time = xTaskGetTickCount(); - total_size+=recv_size; - report_size+=recv_size; - if(((report_end_time - report_start_time) >= (configTICK_RATE_HZ * 1)) && ((report_end_time - report_start_time) <= (configTICK_RATE_HZ * 2))) { -#if PER_SECOND_REPORT - printf("\n\r%s: Receive %d KBytes in %d ms, %d Kbits/sec",__func__,(uint32_t) (report_size/KB),(uint32_t)(report_end_time-report_start_time),((uint32_t)(report_size*8)/(report_end_time - report_start_time))); -#endif - report_start_time = report_end_time; - report_size = 0; - } - else if((report_end_time - report_start_time) > (configTICK_RATE_HZ * 2)){ - report_start_time = report_end_time; - start_time = report_end_time; - report_size = 0; - } - } - printf("\n\r%s: [END] Totally receive %d KBytes in %d ms, %d Kbits/sec",__func__,(uint32_t) (total_size/KB),(uint32_t)(report_end_time-start_time),((uint32_t)(total_size*8)/(report_end_time - start_time))); - -Exit1: - // close the listening socket - close(iperf_data.server_fd); - -Exit2: - if(buffer) - vPortFree(buffer); - return 0; -} - -static void tcp_client_handler(void *param) -{ - vTaskDelay(100); - if(tcp_client_data.port == 0) - tcp_client_data.port = DEFAULT_PORT; - if(tcp_client_data.time == 0) - tcp_client_data.time = DEFAULT_TIME; - if(tcp_client_data.buf_size == 0) - tcp_client_data.buf_size = CLIENT_BUF_SIZE; - - printf("\n\rTCP: Start TCP client!"); - tcp_client_func(tcp_client_data); - -#if defined(INCLUDE_uxTaskGetStackHighWaterMark) && (INCLUDE_uxTaskGetStackHighWaterMark == 1) - printf("\n\rMin available stack size of %s = %d * %d bytes\n\r", __FUNCTION__, uxTaskGetStackHighWaterMark(NULL), sizeof(portBASE_TYPE)); -#endif - printf("\n\rTCP: TCP client stopped!"); - g_tcp_client_task = NULL; - vTaskDelete(NULL); -} - -static void tcp_server_handler(void *param) -{ - vTaskDelay(100); - if(tcp_server_data.port == 0) - tcp_server_data.port = DEFAULT_PORT; - if(tcp_server_data.buf_size == 0) - tcp_server_data.buf_size = SERVER_BUF_SIZE; - - printf("\n\rTCP: Start TCP server!"); - tcp_server_func(tcp_server_data); - -#if defined(INCLUDE_uxTaskGetStackHighWaterMark) && (INCLUDE_uxTaskGetStackHighWaterMark == 1) - printf("\n\rMin available stack size of %s = %d * %d bytes\n\r", __FUNCTION__, uxTaskGetStackHighWaterMark(NULL), sizeof(portBASE_TYPE)); -#endif - printf("\n\rTCP: TCP server stopped!"); - g_tcp_server_task = NULL; - vTaskDelete(NULL); -} - -void udp_client_handler(void *param) -{ - vTaskDelay(100); - if(udp_client_data.port == 0) - udp_client_data.port = DEFAULT_PORT; - if(udp_client_data.time == 0) - udp_client_data.time = DEFAULT_TIME; - if(udp_client_data.bandwidth == 0) - udp_client_data.bandwidth = DEFAULT_UDP_BANDWIDTH; - if(udp_client_data.buf_size == 0) - udp_client_data.buf_size = CLIENT_BUF_SIZE; - if(udp_client_data.tos_value == 0) - udp_client_data.tos_value = DEFAULT_UDP_TOS_VALUE; - - printf("\n\rUDP: Start UDP client!"); - udp_client_func(udp_client_data); - -#if defined(INCLUDE_uxTaskGetStackHighWaterMark) && (INCLUDE_uxTaskGetStackHighWaterMark == 1) - printf("\n\rMin available stack size of %s = %d * %d bytes", __FUNCTION__, uxTaskGetStackHighWaterMark(NULL), sizeof(portBASE_TYPE)); -#endif - - printf("\n\rUDP: UDP client stopped!"); - g_udp_client_task = NULL; - vTaskDelete(NULL); -} - -void udp_server_handler(void *param) -{ - vTaskDelay(100); - if(udp_server_data.port == 0) - udp_server_data.port = DEFAULT_PORT; - if(udp_server_data.buf_size == 0) - udp_server_data.buf_size = SERVER_BUF_SIZE; - - printf("\n\rUDP: Start UDP server!"); - udp_server_func(udp_server_data); - -#if defined(INCLUDE_uxTaskGetStackHighWaterMark) && (INCLUDE_uxTaskGetStackHighWaterMark == 1) - printf("\n\rMin available stack size of %s = %d * %d bytes", __FUNCTION__, uxTaskGetStackHighWaterMark(NULL), sizeof(portBASE_TYPE)); -#endif - - printf("\n\rUDP: UDP server stopped!"); - g_udp_server_task = NULL; - vTaskDelete(NULL); -} - -uint64_t km_parser(char *buf, int len) -{ - uint64_t ret=0; - int keyword_num=0; - char num_str[17] = "\0"; - uint64_t num; - - if(len>16) - return ret; - - while((buf[keyword_num] != '\0')&&(keyword_num=0){ - close(tcp_server_data.server_fd); - } - if(tcp_server_data.client_fd >=0){ - close(tcp_server_data.client_fd); - } - printf("\n\rTCP server stopped!\n"); - vTaskDelete(g_tcp_server_task); - g_tcp_server_task = NULL; - } - - return; - } - else{ - goto Exit; - } - } - else if(strcmp(argv[argv_count-1], "-c") == 0){ - if(g_tcp_client_task){ - printf("\n\rTCP: TCP client is already running. Please enter \"ATWT=stop\" to stop it."); - return; - }else{ - if(argc < (argv_count+1)) - goto Exit; - memset(&tcp_client_data,0,sizeof(struct iperf_data_t)); - tcp_client_data.start = 1; - strncpy(tcp_client_data.server_ip, argv[2], (strlen(argv[2])>16)?16:strlen(argv[2])); - argv_count+=2; - } - } - else{ - goto Exit; - } - } - else{ - if(strcmp(argv[argv_count-1], "-t") == 0){ - if(argc < (argv_count+1)) - goto Exit; - if(tcp_client_data.start){ - tcp_client_data.time = atoi(argv[argv_count]); - } - else{ - goto Exit; - } - argv_count+=2; - } - else if(strcmp(argv[argv_count-1], "-p") == 0){ - if(argc < (argv_count+1)) - goto Exit; - if(tcp_server_data.start){ - tcp_server_data.port = (uint16_t) atoi(argv[argv_count]); - } - else if(tcp_client_data.start){ - tcp_client_data.port = (uint16_t) atoi(argv[argv_count]); - } - else{ - goto Exit; - } - argv_count+=2; - } - else if(strcmp(argv[argv_count-1], "-n") == 0){ - if(argc < (argv_count+1)) - goto Exit; - if(tcp_client_data.start){ - tcp_client_data.total_size = km_parser(argv[argv_count],strlen(argv[argv_count])); - } - else{ - goto Exit; - } - argv_count+=2; - } - else if(strcmp(argv[argv_count-1], "-d") == 0){ - if(tcp_client_data.start){ - tcp_client_data.bandwidth = DEFAULT_TCP_BANDWIDTH; - } - else{ - goto Exit; - } - argv_count+=2; - } - else if(strcmp(argv[argv_count-1], "-l") == 0){ - if(argc < (argv_count+1)) - goto Exit; - if(tcp_server_data.start){ - tcp_server_data.buf_size = atoi(argv[argv_count]); - } - else if(tcp_client_data.start){ - tcp_client_data.buf_size = atoi(argv[argv_count]); - } - else{ - goto Exit; - } - argv_count+=2; - } - else{ - goto Exit; - } - } - } - - if(tcp_server_data.start && (NULL == g_tcp_server_task)){ - if(xTaskCreate(tcp_server_handler, "tcp_server_handler", BSD_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1 + PRIORITIE_OFFSET, &g_tcp_server_task) != pdPASS) - printf("\n\rTCP ERROR: Create TCP server task failed."); - } - if(tcp_client_data.start && (NULL == g_tcp_client_task)){ - if(xTaskCreate(tcp_client_handler, "tcp_client_handler", BSD_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1 + PRIORITIE_OFFSET, &g_tcp_client_task) != pdPASS) - printf("\n\rTCP ERROR: Create TCP client task failed."); - } - - return; -Exit: - printf("\n\r[ATWT] Command format ERROR!\n"); - printf("\n\r[ATWT] Usage: ATWT=[-s|-c,host|stop],[options]\n"); - printf("\n\r Client/Server:\n"); - printf(" \r stop terminate client & server\n"); - printf(" \r -l # length of buffer to read or write (default 1460 Bytes)\n"); - printf(" \r -p # server port to listen on/connect to (default 5001)\n"); - printf("\n\r Server specific:\n"); - printf(" \r -s run in server mode\n"); - printf("\n\r Client specific:\n"); - printf(" \r -c run in client mode, connecting to \n"); - printf(" \r -d Do a bidirectional test simultaneously\n"); - printf(" \r -t # time in seconds to transmit for (default 10 secs)\n"); - printf(" \r -n #[KM] number of bytes to transmit (instead of -t)\n"); - printf("\n\r Example:\n"); - printf(" \r ATWT=-s,-p,5002\n"); - printf(" \r ATWT=-c,192.168.1.2,-t,100,-p,5002\n"); - return; -} - -void cmd_udp(int argc, char **argv) -{ - int argv_count = 2; - uint8_t tos_value = 0; - - if(argc < 2) - goto Exit; - - g_udp_terminate = 0; - - while(argv_count<=argc){ - //first operation - if(argv_count == 2){ - if(strcmp(argv[argv_count-1], "-s") == 0){ - if(g_udp_server_task){ - printf("\n\rUDP: UDP Server is already running."); - return; - }else{ - memset(&udp_server_data,0,sizeof(struct iperf_data_t)); - udp_server_data.start = 1; - argv_count++; - } - } - else if(strcmp(argv[argv_count-1], "stop") == 0){ - if(argc == 2){ - vTaskDelay(100); - g_udp_terminate = 1; - udp_server_data.start = 0; - udp_client_data.start = 0; - - if(g_udp_server_task){ - if(udp_server_data.server_fd >=0){ - close(udp_server_data.server_fd); - } - printf("\n\rUDP server stopped!\n"); - vTaskDelete(g_udp_server_task); - g_udp_server_task = NULL; - } - - return; - } - else{ - goto Exit; - } - } - else if(strcmp(argv[argv_count-1], "-c") == 0){ - if(g_udp_client_task){ - printf("\n\rUDP: UDP client is already running. Please enter \"ATWU=stop\" to stop it."); - return; - }else{ - if(argc < (argv_count+1)) - goto Exit; - memset(&udp_client_data,0,sizeof(struct iperf_data_t)); - udp_client_data.start = 1; - strncpy(udp_client_data.server_ip, argv[2], (strlen(argv[2])>16)?16:strlen(argv[2])); - argv_count+=2; - } - } - else{ - goto Exit; - } - } - else{ - if(strcmp(argv[argv_count-1], "-t") == 0){ - if(argc < (argv_count+1)) - goto Exit; - if(udp_client_data.start){ - udp_client_data.time = atoi(argv[argv_count]); - } - else{ - goto Exit; - } - argv_count+=2; - } - else if(strcmp(argv[argv_count-1], "-p") == 0){ - if(argc < (argv_count+1)) - goto Exit; - if(udp_server_data.start){ - udp_server_data.port = (uint16_t) atoi(argv[argv_count]); - } - else if(udp_client_data.start){ - udp_client_data.port = (uint16_t) atoi(argv[argv_count]); - } - else{ - goto Exit; - } - argv_count+=2; - } - else if(strcmp(argv[argv_count-1], "-n") == 0){ - if(argc < (argv_count+1)) - goto Exit; - if(udp_client_data.start){ - udp_client_data.total_size = km_parser(argv[argv_count],strlen(argv[argv_count])); - } - else{ - goto Exit; - } - argv_count+=2; - } - else if(strcmp(argv[argv_count-1], "-b") == 0){ - if(argc < (argv_count+1)) - goto Exit; - if(udp_client_data.start){ - udp_client_data.bandwidth = km_parser(argv[argv_count],strlen(argv[argv_count])); - udp_client_data.bandwidth = udp_client_data.bandwidth/8;//bits to Bytes - } - else{ - goto Exit; - } - argv_count+=2; - } - else if(strcmp(argv[argv_count-1], "-d") == 0){ - if(udp_client_data.start){ - udp_client_data.bandwidth = DEFAULT_UDP_BANDWIDTH; - } - else{ - goto Exit; - } - argv_count+=1; - } -#if CONFIG_WLAN - else if(strcmp(argv[argv_count-1], "-S") == 0){ //for wmm test - if(argc < (argv_count+1)) - goto Exit; - if(udp_client_data.start){ - if(atoi(argv[argv_count]) >= 0 && atoi(argv[argv_count]) <= 255){ - tos_value = (uint8_t) atoi(argv[argv_count]); - wext_set_tos_value(WLAN0_NAME, &tos_value); - udp_client_data.tos_value = tos_value; - } - else{ - goto Exit; - } - } - else{ - goto Exit; - } - argv_count+=2; - } -#endif - else if(strcmp(argv[argv_count-1], "-l") == 0){ - if(argc < (argv_count+1)) - goto Exit; - if(udp_server_data.start){ - udp_server_data.buf_size = atoi(argv[argv_count]); - } - else if(udp_client_data.start){ - udp_client_data.buf_size = atoi(argv[argv_count]); - } - else{ - goto Exit; - } - argv_count+=2; - } - else{ - goto Exit; - } - } - } - - if(udp_server_data.start && (NULL == g_udp_server_task)){ - if(xTaskCreate(udp_server_handler, "udp_server_handler", BSD_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1 + PRIORITIE_OFFSET, &g_udp_server_task) != pdPASS) - printf("\r\nUDP ERROR: Create UDP server task failed."); - } - - if(udp_client_data.start && (NULL == g_udp_client_task)){ - if(xTaskCreate(udp_client_handler, "udp_client_handler", BSD_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1 + PRIORITIE_OFFSET, &g_udp_client_task) != pdPASS) - printf("\r\nUDP ERROR: Create UDP client task failed."); - } - - return; - -Exit: - printf("\n\r[ATWU] Command format ERROR!\n"); - printf("\n\r[ATWU] Usage: ATWU=[-s|-c,host|stop][options]\n"); - printf("\n\r Client/Server:\n"); - printf(" \r stop terminate client & server\n"); - printf(" \r -l # length of buffer to read or write (default 1460 Bytes)\n"); - printf(" \r -p # server port to listen on/connect to (default 5001)\n"); - printf("\n\r Server specific:\n"); - printf(" \r -s run in server mode\n"); - printf("\n\r Client specific:\n"); - printf(" \r -b #[KM] for UDP, bandwidth to send at in bits/sec (default 1 Mbit/sec)\n"); - printf(" \r -c run in client mode, connecting to \n"); - printf(" \r -d Do a bidirectional test simultaneously\n"); - printf(" \r -t # time in seconds to transmit for (default 10 secs)\n"); - printf(" \r -n #[KM] number of bytes to transmit (instead of -t)\n"); -#if CONFIG_WLAN - printf(" \r -S # set the IP 'type of service'\n"); -#endif - printf("\n\r Example:\n"); - printf(" \r ATWU=-s,-p,5002\n"); - printf(" \r ATWU=-c,192.168.1.2,-t,100,-p,5002\n"); - return; -} - -#endif // CONFIG_BSD_TCP - -#endif // LWIP_SOCKET - diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/uart_socket.c b/Firmware/RTLGDB/USDK/component/common/utilities/uart_socket.c deleted file mode 100644 index de63d12..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/uart_socket.c +++ /dev/null @@ -1,372 +0,0 @@ -#include "lwip/api.h" -#include "PinNames.h" -#include "sockets.h" -#include "uart_socket.h" -#include "autoconf.h" - -#if CONFIG_UART_SOCKET - -#define UART_SOCKET_USE_DMA_TX 1 -/*********************************************************************** - * Macros * - ***********************************************************************/ -#define uart_printf printf -#define uart_print_data(x, d, l) \ -do{\ - int i;\ - uart_printf("\n%s: Len=%d\n", (x), (l));\ - for(i = 0; i < (l); i++)\ - uart_printf("%02x ", (d)[i]);\ - uart_printf("\n");\ -}while(0); - -/************************************************************************ - * extern funtions * - ************************************************************************/ -extern void lwip_selectevindicate(int fd); -extern void lwip_setsockrcvevent(int fd, int rcvevent); -extern int lwip_allocsocketsd(); - -/************************************************************************* -* uart releated fuantions * -*************************************************************************/ -static void uart_irq(uint32_t id, SerialIrq event) -{ - uart_socket_t *u = (uart_socket_t *)id; - - if(event == RxIrq) { - if( u->rx_start == 0 ){ - RtlUpSemaFromISR(&u->action_sema); //up action semaphore - u->rx_start = 1; // set this flag in uart_irq to indicate data recved - } - u->recv_buf[u->prxwrite++] = serial_getc(&u->sobj); - if(u->prxwrite > (UART_RECV_BUFFER_LEN -1)){ //restart from head if reach tail - u->prxwrite = 0; - u->rxoverlap = 1; //set overlap indicated that overlaped - } - if(u->rxoverlap && (u->prxwrite + 1) > u->prxread ){ - u->prxread = u->prxwrite; //if pwrite overhead pread ,pread is always flow rwrite - } - u->last_update = xTaskGetTickCountFromISR(); // update tick everytime recved data - } - - if(event == TxIrq){ - } -} - -static void uart_send_stream_done(uint32_t id) -{ - uart_socket_t *u = (uart_socket_t *)id; - - //u->tx_start = 0; - memset(u->send_buf,0, UART_SEND_BUFFER_LEN); //zero set uart_send_buf - RtlUpSemaFromISR(&u->tx_sema); - RtlUpSemaFromISR(&u->dma_tx_sema); -} - -static int uart_send_stream(uart_socket_t *u, char* pbuf, int len) -{ - int ret; - - if(!len || (!pbuf) || !u){ - uart_printf("input error,size should not be null\r\n"); - return -1; - } - -#if UART_SOCKET_USE_DMA_TX - while(RtlDownSema(&u->dma_tx_sema) == pdTRUE){ - ret = serial_send_stream_dma(&u->sobj, pbuf, len); - if(ret != HAL_OK){ - RtlUpSema(&u->dma_tx_sema); - return -1; - }else{ - return 0; - } - } -#else - while (len){ - serial_putc(&u->sobj, *pbuf); - len--; - pbuf++; - } -#endif - - return 0; -} - -static s32 uart_wait_rx_complete(uart_socket_t *u) -{ - s32 tick_current = xTaskGetTickCount(); - - while((tick_current -u->last_update) < UART_MAX_DELAY_TIME ){ - vTaskDelay(5); - tick_current = xTaskGetTickCount(); - } - return 0; -} - -static void uart_action_handler(void* param) -{ - uart_socket_t *u = (uart_socket_t*)param; - if(!u) - goto Exit; - - while(RtlDownSema(&u->action_sema) == pdTRUE) { - if(u->fd == -1) - goto Exit; - if(u->rx_start){ - /* Blocked here to wait uart rx data completed */ - uart_wait_rx_complete(u); - - /* As we did not register netconn callback function.,so call lwip_selectevindicate unblocking select */ - lwip_setsockrcvevent(u->fd, 1); - lwip_selectevindicate(u->fd); //unblocking select() - u->rx_start = 0; - } - if(u->tx_start){ -#if 1 - if (u->tx_bytes < 128) { - uart_print_data("TX:", u->send_buf, u->tx_bytes); - } else { - uart_printf("\nTX:: Len=%d\n", u->tx_bytes); - } -#endif - //if(serial_send_stream_dma(&u->sobj, (char*)u->send_buf, u->tx_bytes) == -1){ - if(uart_send_stream(u, (char*)u->send_buf, u->tx_bytes) == -1){ - uart_printf("uart send data error!"); - } else { - u->tx_start = 0; -#if (UART_SOCKET_USE_DMA_TX == 0) - memset(u->send_buf,0, UART_SEND_BUFFER_LEN); //zero set uart_send_buf - RtlUpSema(&u->tx_sema); -#endif - } - } - } -Exit: - vTaskDelete(NULL); -} - - -uart_socket_t* uart_open(uart_set_str *puartpara) -{ - PinName uart_tx = PA_7;//PA_4; //PA_7 - PinName uart_rx = PA_6;//PA_0; //PA_6 - uart_socket_t *u; - - u = (uart_socket_t *)RtlZmalloc(sizeof(uart_socket_t)); - if(!u){ - uart_printf("%s(): Alloc memory for uart_socket failed!\n", __func__); - return NULL; - } - - /*initial uart */ - serial_init(&u->sobj, uart_tx,uart_rx); - serial_baud(&u->sobj,puartpara->BaudRate); - serial_format(&u->sobj, puartpara->number, (SerialParity)puartpara->parity, puartpara->StopBits); - - /*uart irq handle*/ - serial_irq_handler(&u->sobj, uart_irq, (int)u); - serial_irq_set(&u->sobj, RxIrq, 1); - serial_irq_set(&u->sobj, TxIrq, 1); - -#if UART_SOCKET_USE_DMA_TX - serial_send_comp_handler(&u->sobj, (void*)uart_send_stream_done, (uint32_t)u); -#endif - - /*alloc a socket*/ - u->fd = lwip_allocsocketsd(); - if(u->fd == -1){ - uart_printf("Failed to alloc uart socket!\n"); - goto Exit2; - } - /*init uart related semaphore*/ - RtlInitSema(&u->action_sema, 0); - RtlInitSema(&u->tx_sema, 1); - RtlInitSema(&u->dma_tx_sema, 1); - - /*create uart_thread to handle send&recv data*/ - { -#define UART_ACTION_STACKSIZE 256 //USE_MIN_STACK_SIZE modify from 512 to 256 -#define UART_ACTION_PRIORITY 1 - if(xTaskCreate(uart_action_handler, ((const char*)"uart_action"), UART_ACTION_STACKSIZE, u, UART_ACTION_PRIORITY, NULL) != pdPASS){ - uart_printf("%s xTaskCreate(uart_action) failed", __FUNCTION__); - goto Exit1; - } - } - return u; -Exit1: - /* Free uart related semaphore */ - RtlFreeSema(&u->action_sema); - RtlFreeSema(&u->tx_sema); - RtlFreeSema(&u->dma_tx_sema); -Exit2: - RtlMfree((u8*)u, sizeof(uart_socket_t)); - return NULL; -} - -int uart_close(uart_socket_t *u) -{ - if(!u){ - uart_printf("uart_close(): u is NULL!\r\n"); - return -1; - } - /* Close uart socket */ - if(lwip_close(u->fd) == -1){ - uart_printf("%s(): close uart failed!", __func__); - } - /* Delete uart_action task */ - u->fd = -1; - RtlUpSema(&u->action_sema); - RtlMsleepOS(20); - - /* Free uart related semaphore */ - RtlFreeSema(&u->action_sema); - RtlFreeSema(&u->tx_sema); - RtlFreeSema(&u->dma_tx_sema); - - /* Free serial */ - serial_free(&u->sobj); - - RtlMfree((u8 *)u, sizeof(uart_socket_t)); - - return 0; -} - -int uart_read(uart_socket_t *u, void *read_buf, size_t size) -{ - /*the same as socket*/ - int read_bytes = 0; - int pread_local,pwrite_local; - char *ptr = (char *)read_buf; - - uart_printf("==>uart_read()\n"); - if(!size || !read_buf || !u){ - uart_printf("uart_read(): input error,size should not be null\r\n"); - return -1; - } - - pread_local = u->prxread; - pwrite_local = u->prxwrite; - /*calculate how much data not read */ - if(!u->rxoverlap){ - read_bytes = pwrite_local - pread_local; - } else { - read_bytes = (UART_RECV_BUFFER_LEN - pread_local) + pwrite_local; - } - /*decide how much data shoule copy to application*/ - if(size < read_bytes) - read_bytes = size; - - if(!u->rxoverlap){ - memcpy(ptr, (u->recv_buf+ pread_local), read_bytes ); - } else { - uart_printf("uart recv buf is write through!\n"); - if((pread_local + read_bytes) > UART_RECV_BUFFER_LEN){ - memcpy(ptr,(u->recv_buf+ pread_local), (UART_RECV_BUFFER_LEN-pread_local)); - memcpy(ptr+(UART_RECV_BUFFER_LEN-pread_local), u->recv_buf, read_bytes-(UART_RECV_BUFFER_LEN- pread_local)); - } else - memcpy(ptr,(u->recv_buf+ pread_local), read_bytes); - } - lwip_setsockrcvevent(u->fd, 0); - - if((pread_local + read_bytes) >= UART_RECV_BUFFER_LEN){ //update pread - u->prxread = (pread_local + read_bytes) - UART_RECV_BUFFER_LEN; - u->rxoverlap = 0; //clean overlap flags - } else - u->prxread = pread_local + read_bytes; - - return read_bytes; - -} - - -int uart_write(uart_socket_t *u, void *pbuf, size_t size) -{ - if(!size || !pbuf || !u){ - uart_printf("input error,please check!"); - return -1; - } - if(RtlDownSema(&u->tx_sema)){ - //uart_printf("[%d]:uart_write %d!\n", xTaskGetTickCount(), size); - memcpy(u->send_buf, pbuf, size); - u->tx_bytes = size; - u->tx_start = 1; //set uart tx start - RtlUpSema(&u->action_sema); // let uart_handle_run through - } else { - uart_printf("uart write buf error!"); - return -1; - } - - return size; -} - -void uart_socket_example(void *param) -{ - char tx_data[] = {0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06}; - uart_set_str uartset; - struct timeval tv; - fd_set readfds; - int read_len = 0, count = 0; - int ret = 0; - char rxbuf[512]; - int uart_fd; - uart_socket_t *uart_socket = NULL; - - uartset.BaudRate = 9600; - uartset.number = 8; - uartset.StopBits = 0; - uartset.FlowControl = 0; - uartset.parity = 0; - strcpy(uartset.UartName, "uart0"); - - uart_socket = uart_open(&uartset); - if(uart_socket == NULL){ - uart_printf("Init uart socket failed!\n"); - goto Exit; - } - uart_fd = uart_socket->fd; - uart_printf("\nOpen uart socket: %d\n", uart_fd); - while(1) - { - FD_ZERO(&readfds); - FD_SET(uart_fd, &readfds); - tv.tv_sec = 0; - tv.tv_usec = 20000; - if(count++ == 50){ - uart_write(uart_socket, tx_data, sizeof(tx_data)); - //uart_print_data("TX:", tx_data, sizeof(tx_data)); - count = 0; - } - ret = select(uart_fd + 1, &readfds, NULL, NULL, &tv); - //uart_printf("[%d] select ret = %x count=%d\n", xTaskGetTickCount(), ret, count); - if(ret > 0) - { - if(FD_ISSET(uart_fd, &readfds)) - { - read_len = uart_read(uart_socket, rxbuf, sizeof(rxbuf)); - if(read_len > 0) - { - uart_print_data("RX:", rxbuf, read_len); - if(rtl_strncmp(rxbuf, "close", 5) == 0) - break; - } - } - //else for other sockets - } - } - uart_printf("Exit uart socket example!\n"); - uart_close(uart_socket); -Exit: - vTaskDelete(NULL); -} - -void uart_socket() -{ -#define UART_SOCKET_STACK_SIZE 512 -#define UART_SOCKET_PRIORITY 1 - if(xTaskCreate(uart_socket_example, "uart_socket", UART_SOCKET_STACK_SIZE, NULL, UART_SOCKET_PRIORITY, NULL) != pdPASS) - uart_printf("%s xTaskCreate failed", __FUNCTION__); -} - -#endif // #if CONFIG_UART_SOCKET diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/uart_socket.h b/Firmware/RTLGDB/USDK/component/common/utilities/uart_socket.h deleted file mode 100644 index 8e79cba..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/uart_socket.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef __UART_SOCKET_H_ -#define __UART_SOCKET_H_ - -#include "osdep_api.h" -#include "serial_api.h" -#include "serial_ex_api.h" - -#if CONFIG_UART_SOCKET -#define UART_SEND_BUFFER_LEN 512 -#define UART_RECV_BUFFER_LEN 1024 -#define UART_MAX_DELAY_TIME 20 - -typedef struct _uart_set_str -{ - char UartName[8]; // the name of uart - int BaudRate; //The baud rate - char number; //The number of data bits - char parity; //The parity(default NONE) - char StopBits; //The number of stop bits - char FlowControl; //support flow control is 1 -}uart_set_str; - -typedef struct _uart_socket_t -{ - serial_t sobj; - int fd; - - /* Used for UART RX */ - u32 rx_start; - //u32 rx_bytes; - u32 prxread; - u32 prxwrite; - u32 rxoverlap; - u32 last_update; //tick count when rx byte - u8 recv_buf[UART_RECV_BUFFER_LEN]; - - u32 tx_start; - u32 tx_bytes; - u8 send_buf[UART_SEND_BUFFER_LEN]; - _Sema tx_sema; - _Sema dma_tx_sema; - - _Sema action_sema; -}uart_socket_t; - -uart_socket_t* uart_open(uart_set_str *puartpara); -int uart_close(uart_socket_t *u); -int uart_read(uart_socket_t *u, void *read_buf, size_t size); -int uart_write(uart_socket_t *u, void *pbuf, size_t size); - -#endif // #if CONFIG_UART_SOCKET -#endif //__UART_SOCKET_H_ diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/uart_ymodem.c b/Firmware/RTLGDB/USDK/component/common/utilities/uart_ymodem.c deleted file mode 100644 index 582bbcb..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/uart_ymodem.c +++ /dev/null @@ -1,656 +0,0 @@ -/****************************************uart _ymodem.c**************************************************/ - -#include "osdep_service.h" -#include "uart_ymodem.h" -#include "PinNames.h" - -#if CONFIG_UART_SOCKET -/***************************************************************************************** -* uart basic functions * -******************************************************************************************/ - void uarty_irq(uint32_t id, SerialIrq event) -{ - uart_ymodem_t *ptr = (uart_ymodem_t *)id; - //u8 ch = 0; - if(event == RxIrq) { - if(ptr->uart_recv_index == 0){ - RtlUpSemaFromISR(&ptr->uart_rx_sema);//up uart rx semaphore - } - if(ptr->uart_recv_index == RCV_BUF_SIZE) - ptr->uart_recv_index = 0; - //ch = serial_getc(&ptr->sobj); - // printf("[%d] 0x%x\r\n", ptr->uart_recv_index, ch); - ptr->uart_irq_buf[ptr->uart_recv_index++] = serial_getc(&ptr->sobj); - ptr->tick_last_update = xTaskGetTickCountFromISR(); // update tick everytime recved data - } - - if(event == TxIrq){ -// uart_send_string(sobj, "\r\n8195a$"); -// rcv_ch = 0; - } -} - -void uart_init(uart_ymodem_t *ptr) -{ -// serial_t sobj; - - //uart init - serial_init(&ptr->sobj,UART_TX,UART_RX); - serial_baud(&ptr->sobj,UART_BAUDRATE); //set baudrate 38400 - serial_format(&ptr->sobj, 8, ParityNone, 0); - - serial_irq_handler(&ptr->sobj, uarty_irq, (int)ptr); - serial_irq_set(&ptr->sobj, RxIrq, 1); - serial_irq_set(&ptr->sobj, TxIrq, 1); - - RtlInitSema(&ptr->uart_rx_sema, 0); -} -void uart_sendbyte(uart_ymodem_t *ptr,u8 sendc ) -{ - - serial_putc(&ptr->sobj, sendc); -// printf(" uart send 0x%x\r\n",sendc); -} - -int uart_recvbytetimeout(uart_ymodem_t *uart_ymodem,u8 *ptr) -{ - int ret = 0; -// static int uart_recv_buf_index = 0; - -// printf(" [%d] = %x\r\n",uart_ymodem->uart_recv_buf_index,uart_ymodem->uart_irq_buf[uart_ymodem->uart_recv_buf_index]); - *ptr = uart_ymodem->uart_irq_buf[uart_ymodem->uart_recv_buf_index]; - uart_ymodem->uart_recv_buf_index++; - if(uart_ymodem->uart_recv_buf_index == RCV_BUF_SIZE) - uart_ymodem->uart_recv_buf_index = 0; - return ret; -} - -void uart_rxempty(uart_ymodem_t *ptr) -{ - /*clean uart recv buf*/ -// printf("Uart_RxEmpty\r\n"); - memset(ptr->uart_irq_buf, 0, RCV_BUF_SIZE); - memset(ptr->uart_rcv_buf, 0, RCV_BUF_SIZE); - ptr->uart_recv_buf_index = 0; - ptr->uart_recv_index = 0; -} -/***************************************************************************************** -* flash function * -******************************************************************************************/ -int ymodem_flashwrite(int flashadd, u8 *pbuf, int len) -{ - - int ret = 0; - flash_t flash; - -// if(!FLASH_ADDRESS_CHECK_WRITE_ERASE(flashadd)){ -// ret = -1; -// return ret; -// } - if( len == 0){ - printf("input error,data length should not be null!\r\n"); - ret = -1; - return ret; - } - else //as 8711am only canbe r/w in words.so make len is 4-bytes aligmented. - len += 4 - ((len%4)==0 ? 4 : (len%4)); - - while(len){ - if(flash_write_word(&flash, flashadd, *(unsigned int *)pbuf) !=1 ){ - printf("write flash error!\r\n"); - ret = -1; - return ret; - } - len -= 4; - pbuf += 4; - flashadd += 4; - } - - return ret; -} -/****************************uart_ymodem_init**********************************/ -void uart_ymodem_init(uart_ymodem_t *uart_ymodem_ptr) -{ -// u32 ret = 0; -#if CONFIG_CALC_FILE_SIZE - u8 filename[33] = {0}; //file name: max 32 bytes+ '\0'=33 -#endif - //init uart struct - uart_ymodem_ptr->cur_num = 0; - uart_ymodem_ptr->filelen = 0 ; -#if CONFIG_CALC_FILE_SIZE - uart_ymodem_ptr->filename = &filename[0]; -#endif - uart_ymodem_ptr->len = 0; - uart_ymodem_ptr->nxt_num = 0; - uart_ymodem_ptr->modemtype = 2; //ymodem protocol - uart_ymodem_ptr->rec_err = 0; - uart_ymodem_ptr->crc_mode = 1; //crc check - uart_ymodem_ptr->uart_recv_buf_index = 0; - uart_ymodem_ptr->uart_recv_index = 0; - uart_ymodem_ptr->image_address = IMAGE_TWO; - -// return uart_ymodem_ptr; -} - -void uart_ymodem_deinit(uart_ymodem_t *ptr) -{ - - /* Free uart_rx-sema */ - RtlFreeSema(&ptr->uart_rx_sema); - - /* Free serial */ - serial_free(&ptr->sobj); - - /* Free uart_ymodem_t */ - RtlMfree((u8 *)ptr,sizeof(uart_ymodem_t)); -} - -#if CONFIG_CALC_FILE_SIZE -unsigned int buf_filelen(u8 *ptr) -{ - int datatype=10, result=0; - - if (ptr[0]=='0' && (ptr[1]=='x' && ptr[1]=='X')) - { - datatype = 16; - ptr += 2; - } - - for ( ; *ptr!='\0'; ptr++) - { - if (*ptr>= '0' && *ptr<='9') - { - result =result*datatype+*ptr-'0'; - } - else - { - if (datatype == 10) - { - return result; - } - else - { - if (*ptr>='A' && *ptr<='F') - { - result = result*16 + *ptr-55; //55 = 'A'-10 - } - else if (*ptr>='a' && *ptr<='f') - { - result = result*16 + *ptr-87; //87 = 'a'-10 - } - else - { - return result; - } - } - } - } - return result; -} -#endif -void modem_cancle(uart_ymodem_t *ptr) -{ - uart_sendbyte(ptr,0x18); - uart_sendbyte(ptr,0x18); - uart_sendbyte(ptr,0x18); - uart_sendbyte(ptr,0x18); - uart_sendbyte(ptr,0x18); -} - -int start_next_round(uart_ymodem_t *ptr) -{ - int ret = 0; - -// printf(" uart ymodedm transfer %d block\r\n",ptr->nxt_num); - //clean recv buf - if(!ptr->rec_err){ - uart_rxempty(ptr); - } - else{ - ret = -1; - printf("\r\n recv data error!"); - } - - if (ptr->nxt_num == 0) - { - if (ptr->crc_mode) - { - uart_sendbyte(ptr,MODEM_C); //first receiver send c - } - else - { - uart_sendbyte(ptr,MODEM_NAK); - } - } - else - { - if (ptr->rec_err) - { - uart_sendbyte(ptr,MODEM_NAK); - } - else - { - if (ptr->nxt_num == 1) - { - if (ptr->crc_mode) - { - uart_sendbyte(ptr,MODEM_ACK); - uart_sendbyte(ptr,MODEM_C); - } - else - { - uart_sendbyte(ptr,MODEM_NAK); - } - } - else - { - uart_sendbyte(ptr,MODEM_ACK); - } - } - } - return ret; -} -int data_write_to_flash(uart_ymodem_t *ptr) -{ - int ret = 0; -// uint32_t update_image_address = IMAGE_TWO; - static int offset = 0x0; - u32 data; - static int flags = 1; //write update image header only once -// int file_blk_size = 0 - - flash_read_word(&ptr->flash, OFFSET_DATA, &data); -// file_blk_size = ((ptr->filelen - 1)/4096) + 1; - if(data == ~0x0){ - flash_write_word(&ptr->flash, OFFSET_DATA, ptr->image_address); - } -// printf("image_address get from flash = 0x%x\n\r",ptr->image_address); - //erase flash where to be written,since ymodem blk size can be 128 or 1024,so, erase once when gather 4096 - if(offset ==0 || (offset % 4096)==0){ - flash_erase_sector(&ptr->flash, ptr->image_address + offset); - } - //write to flash - //write back image size and address - if(!flags){ - flash_write_word(&ptr->flash, ptr->image_address, ptr->filelen); - flash_write_word(&ptr->flash, ptr->image_address+4,0x10004000); - flags = 1; - } -// ymodem_flashwrite(update_image_address + offset, ptr->uart_rcv_buf, ptr->len); - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_write(&ptr->flash, ptr->image_address+offset, ptr->len, ptr->uart_rcv_buf); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - offset += ptr->len; - - return ret; -} -int block_num_check(uart_ymodem_t *ptr) -{ - - u8 blk,cblk; - int stat, ret = 0; - /**************** check blk and blk complement *********************/ - stat = uart_recvbytetimeout(ptr,&blk); //blk num,bytes 2 - if (stat != 0) - { - ret = -1; - } - printf(" blk num = %x\r\n", blk); - - stat = uart_recvbytetimeout(ptr,&cblk); //block num complement,bytes 3 - if (stat != 0) - { - ret = -1; - } -// printf(" block num cmpl = %x\r\n",cblk); - - if (blk+cblk != 0xff) - { - ret = -1; - } - return ret; - -} - -int calc_file_name_size(uart_ymodem_t *ptr,u8* bufptr) -{ - int ret = 0; - u8* nameptr = ptr->filename; - - while (*bufptr != '\0'){ - *nameptr++ = *bufptr++; - } - *nameptr = '\0'; - bufptr++; - while (*bufptr == ' ') - { - bufptr++; - } - //file length - ptr->filelen = buf_filelen(bufptr); - - return ret; -} - -int crc_check(uart_ymodem_t *ptr) -{ - u8 crch, crcl; - u8 *in_ptr; - int stat,i,ret = 0; - u32 cksum = 0; - - stat = uart_recvbytetimeout(ptr,&crch); //CRC byte 1 - if (stat != 0){ - ret = 1; - } -// printf(" char recved CRC byte 1 = %x\r\n", crch); - if (ptr->crc_mode){ - stat = uart_recvbytetimeout(ptr,&crcl); //CRC byte 2 - if (stat != 0){ - ret = 1; - } - } -// printf(" char recved CRC byte 2 = %x\r\n", crcl); -#if CRC_CHECK - for (i=0; ilen; i++) //sum check for last block - { - cksum += ptr->uart_rcv_buf[i]; - } - if(cksum == 0) - { - ret = 2; - return ret; - } - - if (ptr->crc_mode) - { - in_ptr = ptr->uart_rcv_buf; - cksum = 0; - - for (stat=ptr->len ; stat>0; stat--) - { - cksum = cksum^(int)(*in_ptr++) << 8; - for (i=8; i !=0; i--) - { - if (cksum & 0x8000) - cksum = cksum << 1 ^ 0x1021; - else - cksum = cksum << 1; - } - - } - cksum &= 0xffff; - - if (cksum != (crch<<8 | crcl)) - { - ptr->rec_err = 1; - ret = 1; - } - } - else - { - for (i=0; ilen; i++) //sum check - { - cksum += ptr->uart_rcv_buf[i]; - } - if ((cksum&0xff)!=crch) - { - ptr->rec_err = 1; - ret = 1; - } - } -#endif - return ret; - -} -#if DUMP_DATA -void flash_dump_data(uart_ymodem_t *ptr) -{ - int i,offset = 0; - u32 data; - printf("flash dump data"); - for(i = 0;i< ptr->filelen;i+=4){ - flash_read_word(&ptr->flash, ptr->image_address + 0x10 + offset, &data); - offset += 4; - printf("%x ",data); - } -} -#endif -#if AUTO_REBOOT -void auto_reboot(void) -{ - // Set processor clock to default before system reset - HAL_WRITE32(SYSTEM_CTRL_BASE, 0x14, 0x00000021); - osDelay(100); - - // Cortex-M3 SCB->AIRCR - HAL_WRITE32(0xE000ED00, 0x0C, (0x5FA << 16) | // VECTKEY - (HAL_READ32(0xE000ED00, 0x0C) & (7 << 8)) | // PRIGROUP - (1 << 2)); // SYSRESETREQ - while(1) osDelay(1000); -} -#endif - -int set_signature(uart_ymodem_t *ptr) -{ - int ret = 0; - uint32_t sig_readback0,sig_readback1; - uint32_t oldimg2addr; - - //old image address - flash_read_word(&ptr->flash, 0x18, &oldimg2addr); - oldimg2addr = (oldimg2addr&0xFFFF)*1024; - printf(" lod image address 0x%x\n\r",oldimg2addr); - //Set signature in New Image 2 addr + 8 and + 12 -// flash_write_word(&ptr->flash,ptr->image_address + 8, 0x35393138);//0x35393138 -// flash_write_word(&ptr->flash,ptr->image_address + 12, 0x31313738); -// flash_read_word(&ptr->flash, ptr->image_address + 8, &sig_readback0); -// flash_read_word(&ptr->flash, ptr->image_address + 12, &sig_readback1); -// printf(" new signature %x,%x,\n\r",sig_readback0, sig_readback1); -#if 1 - flash_write_word(&ptr->flash,oldimg2addr + 8, 0x35393130); - flash_write_word(&ptr->flash,oldimg2addr + 12, 0x31313738); - flash_read_word(&ptr->flash, oldimg2addr + 8, &sig_readback0); - flash_read_word(&ptr->flash, oldimg2addr + 12, &sig_readback1); - printf(" old signature %x,%x\n\r",sig_readback0, sig_readback1); -#endif - printf(" set signature success!\n\r"); - - return ret; -} - -static void uart_ymodem_thread(void* param) -{ - u8 ch; - u32 stat, error_bit = 0, transfer_over = 0; - u32 can_counter = 0, eot_counter = 0; - u32 i, send_count = 0 , ret = 0; - static int first_time = 1; - uart_ymodem_t *ymodem_ptr = (uart_ymodem_t *)param; - printf(" ==>uart ymodem_task\r\n"); - while(1) - { - //wait 2min,2*60*1000/100 - if(send_count >= (2*60*10)){ - error_bit = 6; - printf("no response after 2min\r\n"); - goto exit; - } - else{ - if (ymodem_ptr->crc_mode){ - uart_sendbyte(ymodem_ptr,MODEM_C); //first receiver send c - } - else{ - uart_sendbyte(ymodem_ptr,MODEM_NAK); - } - send_count++; - } - if(xSemaphoreTake(ymodem_ptr->uart_rx_sema, 0) == pdTRUE){ - RtlUpSema(&ymodem_ptr->uart_rx_sema); - break; - } - else - // send every 100ms - vTaskDelay(100); - } -start: - while(xSemaphoreTake(ymodem_ptr->uart_rx_sema, portMAX_DELAY) == pdTRUE){ -// ymodem_ptr->tick_current = ymodem_ptr->tick_last_update = xTaskGetTickCount(); - ymodem_ptr->tick_current = xTaskGetTickCount(); - while((int)(ymodem_ptr->tick_current - ymodem_ptr->tick_last_update) < 50 ){ - ymodem_ptr->tick_current = xTaskGetTickCount(); - vTaskDelay(5); - } - printf("uart_recv_index = %d current=%d last=%d\r\n",ymodem_ptr->uart_recv_index, ymodem_ptr->tick_current, ymodem_ptr->tick_last_update); - /*uart data recv done and process what we have recvied*/ - stat = uart_recvbytetimeout(ymodem_ptr,&ch); - if (stat == 0) - { - switch (ch) - { - case MODEM_SOH : - ymodem_ptr->len = 128; -// printf(" char recved was MODEM_SOH!\r\n"); - break; - case MODEM_STX : - ymodem_ptr->len = 1024; -// printf(" char recved was MODEM_STX!\r\n"); - break; - case MODEM_CAN : - if ((++can_counter) >= MODEM_CAN_COUNT) - { - error_bit = 1; - goto exit; - } -// printf(" char recved was MODEM_CAN!\r\n"); - break; - case MODEM_EOT : -// printf(" char recved was MODEM_EOT!\r\n"); - if ((++eot_counter) >= MODEM_EOT_COUNT) - { - uart_sendbyte(ymodem_ptr,MODEM_ACK); - if (ymodem_ptr->modemtype == 2) //Ymodem protocol - { - uart_sendbyte(ymodem_ptr,MODEM_C); //first send a C - uart_sendbyte(ymodem_ptr,MODEM_ACK); //then send ack - uart_sendbyte(ymodem_ptr,MODEM_C); // and then send c - modem_cancle(ymodem_ptr); //cancel the transits - } - transfer_over = 1; - goto exit; - } - else - { - uart_sendbyte(ymodem_ptr,MODEM_ACK); - uart_sendbyte(ymodem_ptr,MODEM_C); - goto start; - } - break; - default: - error_bit = 1; - goto exit; - break; - } - } - - //block num check - if(block_num_check(ymodem_ptr)){ - error_bit = 2; - goto exit; - } -#if CONFIG_CALC_FILE_SIZE - // calculate file name and file size - if(ymodem_ptr->nxt_num == 0 && first_time){ - error_bit = calc_file_name_size(ymodem_ptr,&ymodem_ptr->uart_irq_buf[3]); -// first_time = 0; - } -#endif - //copy data from uart irq buf to uart recv buf without header - for (i=0; ilen; i++) - { - stat = uart_recvbytetimeout(ymodem_ptr,&ymodem_ptr->uart_rcv_buf[i]); -// printf(" data recv[%d] =%x\r\n",i,ymodem_ptr->uart_rcv_buf[i]); - } - //write data to flash,but do not write first block data - if(ymodem_ptr->nxt_num != 0 || !first_time){ - if(data_write_to_flash(ymodem_ptr)){ - error_bit = 3; - goto exit; - } - first_time = 0; - } - //crc check - ret = crc_check(ymodem_ptr); - if(ret == 1){ - error_bit = 4; - goto exit; - } - else if(ret == 2 && ymodem_ptr->nxt_num == 0xff){ - printf(" next num = %x\r\n",ymodem_ptr->nxt_num); - transfer_over = 1; - goto exit; - } - -#if 0 //avoid skip block - uart_ymodem->cur_num = blk; - if (blk != uart_ymodem->nxt_num) - { - error_bit = -1; - } -#endif - ymodem_ptr->nxt_num++; - ymodem_ptr->rec_err=0; - //start another round - if(start_next_round(ymodem_ptr)){ - error_bit = 5; - printf(" start next round failed!\r\n"); - goto exit; - } -} -exit: - //if anything goes wrong or transfer over,we kill ourself. - if(error_bit || transfer_over){ - if(error_bit) - printf("error! error bit = %d\r\n",error_bit); - else{ - printf(" [%s, %d Bytes] transfer_over!\r\n",ymodem_ptr->filename,ymodem_ptr->filelen); - set_signature(ymodem_ptr); -#if DUMP_DATA - flash_dump_data(ymodem_ptr); -#endif -#if AUTO_REBOOT - auto_reboot(); -#endif - } - } - first_time = 1; - uart_ymodem_deinit(ymodem_ptr); - vTaskDelete(NULL); -} - -int uart_ymodem(void) -{ - int ret = 0; - uart_ymodem_t *uart_ymodem_ptr; - - printf("uart ymodem update start\r\n"); - uart_ymodem_ptr = (uart_ymodem_t *)RtlMalloc(sizeof(uart_ymodem_t)); - if(!uart_ymodem_ptr){ - printf("uart ymodem malloc fail!\r\n"); - ret = -1; - return ret; - } - uart_ymodem_init(uart_ymodem_ptr); - if(ret == -1){ - ret = -1; - return ret; - } - //uart initial - uart_init(uart_ymodem_ptr); - if(xTaskCreate(uart_ymodem_thread, ((const char*)"uart_ymodem_thread"), UART_YMODEM_TASK_DEPTH, uart_ymodem_ptr, UART_YMODEM_TASK_PRIORITY, NULL) != pdPASS) - printf("%s xTaskCreate(uart_thread) failed\r\n", __FUNCTION__); - - return ret; -} -#endif // #if CONFIG_UART_SOCKET diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/uart_ymodem.h b/Firmware/RTLGDB/USDK/component/common/utilities/uart_ymodem.h deleted file mode 100644 index 7cc0bde..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/uart_ymodem.h +++ /dev/null @@ -1,89 +0,0 @@ -/****************************************uart_ymodem.h**************************************************/ - -#ifndef __YMODEM_H_ -#define __YMODEM_H_ - -#if CONFIG_UART_SOCKET - -#include "osdep_api.h" -#include "serial_api.h" -#include "flash_api.h" -#include "device_lock.h" -/*********************************************************************** - * Macros * - ***********************************************************************/ -// 8711AM -#define UART_TX PA_7 -#define UART_RX PA_6 -//8711AF -//#define UART_TX PA_4 -//#define UART_RX PA_0 - -#define UART_BAUDRATE 115200 -#define UART_YMODEM_TASK_PRIORITY 5 -#define UART_YMODEM_TASK_DEPTH 512 - -#define CONFIG_CALC_FILE_SIZE 1 -#define CRC_CHECK 1 -#define AUTO_REBOOT 0 -#define DUMP_DATA 0 - -#define OFFSET_DATA FLASH_SYSTEM_DATA_ADDR -#define IMAGE_TWO (0x80000) -//Y-modem related -#define MODEM_MAX_RETRIES 1 -#define MODEM_CRC_RETRIES 51 -#define MODEM_CAN_COUNT 3 -#define MODEM_EOT_COUNT 1 - -// ymodem protocol definition -#define MODEM_SOH 0x01 -#define MODEM_STX 0x02 -#define MODEM_EOT 0x04 -#define MODEM_ACK 0x06 -#define MODEM_NAK 0x15 -#define MODEM_CAN 0x18 -#define MODEM_C 0x43 -// 1 block size byte + 2 block number bytes + 1024 data body + 2 crc bytes -#define RCV_BUF_SIZE ((1)+(2)+(1024)+(2)) -/******************************** data struct **********************************/ -typedef struct _uart_ymodem_t -{ - serial_t sobj; - flash_t flash; - - /* Used for UART RX */ - u8 uart_rcv_buf[RCV_BUF_SIZE]; - u8 uart_irq_buf[RCV_BUF_SIZE]; - _Sema uart_rx_sema; - u32 image_address; - - u32 tick_last_update; - u32 tick_current; - u32 uart_recv_index; - u32 uart_recv_buf_index; - /* uart ymodem related*/ - u32 modemtype; - u32 crc_mode; - u32 nxt_num; //next block num - u32 cur_num; //current block num - u32 len; - u32 rec_err; //blcok data recv status - u32 filelen; //Ymodem file length - u8 *buf; //data buf - u8 *filename; //file name -}uart_ymodem_t; - - -#ifdef __cplusplus - extern "C"{ -#endif - -extern int uart_ymodem(void); - -#ifdef __cplusplus - } -#endif - -#endif -#endif //#if CONFIG_UART_SOCKET diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/udpecho.c b/Firmware/RTLGDB/USDK/component/common/utilities/udpecho.c deleted file mode 100644 index 25e54f5..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/udpecho.c +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - - -#include "lwip/opt.h" - -#if LWIP_NETCONN - -#include "lwip/api.h" -#include "lwip/sys.h" - - -#define UDPECHO_THREAD_PRIO ( tskIDLE_PRIORITY + 3 ) - -static struct netconn *conn; -static struct netbuf *buf; -static struct ip_addr *addr; -static unsigned short port; -/*-----------------------------------------------------------------------------------*/ -static void udpecho_thread(void *arg) -{ - err_t err; - - LWIP_UNUSED_ARG(arg); - - conn = netconn_new(NETCONN_UDP); - if (conn!= NULL) - { - err = netconn_bind(conn, IP_ADDR_ANY, 7); - if (err == ERR_OK) - { - while (1) - { - buf = netconn_recv(conn); - - if (buf!= NULL) - { - addr = netbuf_fromaddr(buf); - port = netbuf_fromport(buf); - netconn_connect(conn, addr, port); - buf->addr = NULL; - netconn_send(conn,buf); - netbuf_delete(buf); - } - } - } - else - { - printf("can not bind netconn"); - } - } - else - { - printf("can create new UDP netconn"); - } -} -/*-----------------------------------------------------------------------------------*/ -void udpecho_init(void) -{ - sys_thread_new("udpecho", udpecho_thread, NULL, DEFAULT_THREAD_STACKSIZE,UDPECHO_THREAD_PRIO ); -} - -#endif /* LWIP_NETCONN */ diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/update.c b/Firmware/RTLGDB/USDK/component/common/utilities/update.c deleted file mode 100644 index 9dce4f0..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/update.c +++ /dev/null @@ -1,1085 +0,0 @@ -#include -#include -#include -#include -#include -#if LWIP_SOCKET -#include - -#if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) -#include -#if defined(STM32F2XX) -#include -#elif defined(STM32F4XX) -#include -#elif defined(STM32f1xx) -#include -#endif -#include "cloud_updater.h" -#else -#include "flash_api.h" -#include -#endif -#include "update.h" -#if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) -#define OFFSET_DATA FLASH_SYSTEM_DATA_ADDR -#define IMAGE_2 0x0000B000 -#define WRITE_OTA_ADDR 1 -#define CONFIG_CUSTOM_SIGNATURE 1 -#define SWAP_UPDATE 0 - -#if WRITE_OTA_ADDR -#define BACKUP_SECTOR (FLASH_SYSTEM_DATA_ADDR - 0x1000) -#endif - -#if CONFIG_CUSTOM_SIGNATURE -/* --------------------------------------------------- - * Customized Signature - * ---------------------------------------------------*/ -// This signature can be used to verify the correctness of the image -// It will be located in fixed location in application image -/* Moved in main.c -#include "section_config.h" -SECTION(".custom.validate.rodata") -const unsigned char cus_sig[32] = "Customer Signature-modelxxx"; -*/ -#endif - -#else -#define CONFIG_SECTOR FLASH_Sector_1 -#define APPLICATION_SECTOR FLASH_Sector_2 -#define UPDATE_SECTOR FLASH_Sector_8 -#endif -#define STACK_SIZE 1024 -#define TASK_PRIORITY tskIDLE_PRIORITY + 1 -#define BUF_SIZE 512 -#define ETH_ALEN 6 - -#define SERVER_LOCAL 1 -#define SERVER_CLOUD 2 -#define SERVER_TYPE SERVER_LOCAL -#define UPDATE_DBG 1 - -#if (SERVER_TYPE == SERVER_LOCAL) -typedef struct -{ - uint32_t ip_addr; - uint16_t port; -}update_cfg_local_t; -#endif - -#if (SERVER_TYPE == SERVER_CLOUD) -#define REPOSITORY_LEN 16 -#define FILE_PATH_LEN 64 -typedef struct -{ - uint8_t repository[REPOSITORY_LEN]; - uint8_t file_path[FILE_PATH_LEN]; -}update_cfg_cloud_t; -#endif - -sys_thread_t TaskOTA = NULL; -//--------------------------------------------------------------------- -static void* update_malloc(unsigned int size) -{ - return pvPortMalloc(size); -} - -//--------------------------------------------------------------------- -static void update_free(void *buf) -{ - vPortFree(buf); -} - -//--------------------------------------------------------------------- -#if (SERVER_TYPE == SERVER_LOCAL) -#if defined(STM32F2XX) ||(STM32F4XX) -static void update_ota_local_task(void *param) -{ - int server_socket = 0; - struct sockaddr_in server_addr; - char *buf; - int read_bytes, size = 0, i; - update_cfg_local_t *cfg = (update_cfg_local_t*)param; - uint32_t address, checksum = 0; -#if CONFIG_WRITE_MAC_TO_FLASH - char mac[ETH_ALEN]; -#endif - printf("[%s] Update task start\n", __FUNCTION__); - buf = update_malloc(BUF_SIZE); - if(!buf){ - printf("[%s] Alloc buffer failed\n", __FUNCTION__); - goto update_ota_exit; - } - // Connect socket - server_socket = socket(AF_INET, SOCK_STREAM, 0); - if(server_socket < 0){ - printf("[%s] Create socket failed\n", __FUNCTION__); - goto update_ota_exit; - } - server_addr.sin_family = AF_INET; - server_addr.sin_addr.s_addr = cfg->ip_addr; - server_addr.sin_port = cfg->port; - - if(connect(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1){ - printf("[%s] socket connect failed\n", __FUNCTION__); - goto update_ota_exit; - } - // Erase config sectors - if(flash_EraseSector(CONFIG_SECTOR) < 0){ - printf("[%s] Erase sector failed\n", __FUNCTION__); - goto update_ota_exit; - } -#if CONFIG_WRITE_MAC_TO_FLASH - // Read MAC address - if(flash_Read(FLASH_ADD_STORE_MAC, mac, ETH_ALEN) < 0){ - printf("[%s] Read MAC error\n", __FUNCTION__); - goto update_ota_exit; - } -#endif - // Erase update sectors - for(i = UPDATE_SECTOR; i <= FLASH_Sector_11; i += 8){ - if(flash_EraseSector(i) < 0){ - printf("[%s] Erase sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - } - // Write update sectors - address = flash_SectorAddress(UPDATE_SECTOR); - printf("\n"); - while(1){ - read_bytes = read(server_socket, buf, BUF_SIZE); - if(read_bytes == 0) break; // Read end - if(read_bytes < 0){ - printf("[%s] Read socket failed\n", __FUNCTION__); - goto update_ota_exit; - } - if(flash_Wrtie(address + size, buf, read_bytes) < 0){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - size += read_bytes; - for(i = 0; i < read_bytes; i ++) - checksum += buf[i]; - printf("Update file size = %d\n", size); - } -#if CONFIG_WRITE_MAC_TO_FLASH - //Write MAC address - if(!(mac[0]==0xff&&mac[1]==0xff&&mac[2]==0xff&&mac[3]==0xff&&mac[4]==0xff&&mac[5]==0xff)){ - if(flash_Wrtie(FLASH_ADD_STORE_MAC, mac, ETH_ALEN) < 0){ - printf("[%s] Write MAC failed\n", __FUNCTION__); - goto update_ota_exit; - } - } -#endif - // Write config sectors - address = flash_SectorAddress(CONFIG_SECTOR); - if( (flash_Wrtie(address, (char*)&size, 4) < 0) || - (flash_Wrtie(address+4, (char*)&checksum, 4) < 0) ){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - printf("[%s] Update OTA success!\n", __FUNCTION__); -update_ota_exit: - if(buf) - update_free(buf); - if(server_socket >= 0) - close(server_socket); - if(param) - update_free(param); - TaskOTA = NULL; - printf("[%s] Update task exit\n", __FUNCTION__); - vTaskDelete(NULL); - return; -} -#elif defined(STM32f1xx) -static void update_ota_local_task(void *param) -{ - int server_socket; - struct sockaddr_in server_addr; - char *buf, flag_a = 0; - int read_bytes, size = 0, i; - update_cfg_local_t *cfg = (update_cfg_local_t*)param; - uint32_t address, checksum = 0; - uint16_t a = 0; -#if CONFIG_WRITE_MAC_TO_FLASH - char mac[ETH_ALEN]; -#endif - - printf("[%s] Update task start\n", __FUNCTION__); - buf = update_malloc(BUF_SIZE); - if(!buf){ - printf("[%s] Alloc buffer failed\n", __FUNCTION__); - goto update_ota_exit; - } - // Connect socket - server_socket = socket(AF_INET, SOCK_STREAM, 0); - if(server_socket < 0){ - printf("[%s] Create socket failed\n", __FUNCTION__); - goto update_ota_exit; - } - server_addr.sin_family = AF_INET; - server_addr.sin_addr.s_addr = cfg->ip_addr; - server_addr.sin_port = cfg->port; - - if(connect(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1){ - printf("[%s] socket connect failed\n", __FUNCTION__); - goto update_ota_exit; - } - // Erase config sectors - for(i = CONFIG_SECTOR; i < APPLICATION_SECTOR; i += FLASH_PAGE_SIZE){ - if(flash_EraseSector(i) < 0){ - printf("[%s] Erase sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - } -#if CONFIG_WRITE_MAC_TO_FLASH - // Read MAC address - if(flash_Read(FLASH_ADD_STORE_MAC, mac, ETH_ALEN) < 0){ - printf("[%s] Read MAC error\n", __FUNCTION__); - goto update_ota_exit; - } -#endif - - // Erase update sectors - for(i = UPDATE_SECTOR; i < FLASH_Sector_0 + FLASH_SIZE; i += FLASH_PAGE_SIZE){ - if(flash_EraseSector(i) < 0){ - printf("[%s] Erase sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - } - // Write update sectors - address = UPDATE_SECTOR; - printf("\n"); - while(1){ - read_bytes = read(server_socket, buf, BUF_SIZE); - if(read_bytes == 0) break; // Read end - if(read_bytes < 0){ - printf("[%s] Read socket failed\n", __FUNCTION__); - goto update_ota_exit; - } - if(flag_a == 0){ - if(read_bytes % 2 != 0){ - a = buf[read_bytes - 1]; - flag_a = 1; - if(flash_Wrtie(address + size, buf, read_bytes - 1) < 0){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - size += read_bytes - 1; - } - else{ - if(flash_Wrtie(address + size, buf, read_bytes) < 0){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - size += read_bytes; - } - } - else{ - a = buf[0] << 8 | a; - if(flash_Wrtie(address + size, (char*)(&a), 2) < 0){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - size += 2; - a = 0; - flag_a = 0; - if((read_bytes - 1) % 2 != 0){ - a = buf[read_bytes - 1]; - flag_a = 1; - if(flash_Wrtie(address + size, buf + 1, read_bytes - 2) < 0){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - size += read_bytes - 2; - } - else{ - if(flash_Wrtie(address + size, buf + 1, read_bytes - 1) < 0){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - size += read_bytes - 1; - } - } - for(i = 0; i < read_bytes; i ++) - checksum += buf[i]; - printf("Update file size = %d\n", size); - } - if(flag_a){ - if(flash_Wrtie(address + size, (char*)(&a), 2) < 0){ - printf("[%s] Write sector failed", __FUNCTION__); - goto update_ota_exit; - } - size += 1; - } -#if CONFIG_WRITE_MAC_TO_FLASH - //Write MAC address - if(!(mac[0]==0xff&&mac[1]==0xff&&mac[2]==0xff&&mac[3]==0xff&&mac[4]==0xff&&mac[5]==0xff)){ - if(flash_Wrtie(FLASH_ADD_STORE_MAC, mac, ETH_ALEN) < 0){ - printf("[%s] Write MAC failed\n", __FUNCTION__); - goto update_ota_exit; - } - } -#endif - - // Write config sectors - address = CONFIG_SECTOR; - if( (flash_Wrtie(address, (char*)&size, 4) < 0) || - (flash_Wrtie(address+4, (char*)&checksum, 4) < 0) ){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - printf("[%s] Update OTA success!\n", __FUNCTION__); -update_ota_exit: - if(buf) - update_free(buf); - if(server_socket >= 0) - close(server_socket); - if(param) - update_free(param); - TaskOTA = NULL; - printf("[%s] Update task exit\n", __FUNCTION__); - vTaskDelete(NULL); - return; -} - -#elif defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) - -extern int osDelay (uint32_t millisec); - -void ota_platform_reset(void) -{ - //wifi_off(); - - // Set processor clock to default before system reset - HAL_WRITE32(SYSTEM_CTRL_BASE, 0x14, 0x00000021); - osDelay(100); - - // Cortex-M3 SCB->AIRCR - HAL_WRITE32(0xE000ED00, 0x0C, (0x5FA << 16) | // VECTKEY - (HAL_READ32(0xE000ED00, 0x0C) & (7 << 8)) | // PRIGROUP - (1 << 2)); // SYSRESETREQ - while(1) osDelay(1000); -} -#if WRITE_OTA_ADDR -int write_ota_addr_to_system_data(flash_t *flash, uint32_t ota_addr) -{ - uint32_t data, i = 0; - //Get upgraded image 2 addr from offset - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_read_word(flash, OFFSET_DATA, &data); - printf("[%s] data 0x%x ota_addr 0x%x\n", __FUNCTION__, data, ota_addr); - if(data == ~0x0){ - flash_write_word(flash, OFFSET_DATA, ota_addr); - }else{ - //erase backup sector - flash_erase_sector(flash, BACKUP_SECTOR); - //backup system data to backup sector - for(i = 0; i < 0x1000; i+= 4){ - flash_read_word(flash, OFFSET_DATA + i, &data); - if(i == 0) - data = ota_addr; - flash_write_word(flash, BACKUP_SECTOR + i,data); - } - //erase system data - flash_erase_sector(flash, OFFSET_DATA); - //write data back to system data - for(i = 0; i < 0x1000; i+= 4){ - flash_read_word(flash, BACKUP_SECTOR + i, &data); - flash_write_word(flash, OFFSET_DATA + i,data); - } - //erase backup sector - flash_erase_sector(flash, BACKUP_SECTOR); - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); - return 0; -} -#endif -static void update_ota_local_task(void *param) -{ - int server_socket; - struct sockaddr_in server_addr; - unsigned char *buf; - union { uint32_t u; unsigned char c[4]; } file_checksum; - int read_bytes = 0, size = 0, i = 0; - update_cfg_local_t *cfg = (update_cfg_local_t *)param; - uint32_t address, checksum = 0, flash_checksum=0; - flash_t flash; - uint32_t NewImg2BlkSize = 0, NewImg2Len = 0, NewImg2Addr = 0, file_info[3]; - uint32_t Img2Len = 0; - int ret = -1 ; - //uint8_t signature[8] = {0x38,0x31,0x39,0x35,0x38,0x37,0x31,0x31}; - uint32_t IMAGE_x = 0, ImgxLen = 0, ImgxAddr = 0; -#if WRITE_OTA_ADDR - uint32_t ota_addr = 0x80000; -#endif -#if CONFIG_CUSTOM_SIGNATURE - char custom_sig[32] = "Customer Signature-modelxxx\n"; - uint32_t read_custom_sig[8]; -#endif - printf("[%s] Update task start\n", __FUNCTION__); - buf = update_malloc(BUF_SIZE); - if(!buf){ - printf("[%s] Alloc buffer failed\n", __FUNCTION__); - goto update_ota_exit; - } - // Connect socket - server_socket = socket(AF_INET, SOCK_STREAM, 0); - if(server_socket < 0){ - printf("[%s] Create socket failed\n", __FUNCTION__); - goto update_ota_exit; - } - server_addr.sin_family = AF_INET; - server_addr.sin_addr.s_addr = cfg->ip_addr; - server_addr.sin_port = cfg->port; - - if(connect(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1){ - printf("[%s] socket connect failed\n", __FUNCTION__); - goto update_ota_exit; - } - DBG_INFO_MSG_OFF(_DBG_SPI_FLASH_); - -#if 1 - // The upgraded image2 pointer must 4K aligned and should not overlap with Default Image2 - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_read_word(&flash, IMAGE_2, &Img2Len); - IMAGE_x = IMAGE_2 + Img2Len + 0x10; - flash_read_word(&flash, IMAGE_x, &ImgxLen); - flash_read_word(&flash, IMAGE_x+4, &ImgxAddr); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - if(ImgxAddr==0x30000000){ - printf("[%s] IMAGE_3 0x%x Img3Len 0x%x\n", __FUNCTION__, IMAGE_x, ImgxLen); - }else{ - printf("[%s] no IMAGE_3\n", __FUNCTION__); - // no image3 - IMAGE_x = IMAGE_2; - ImgxLen = Img2Len; - } -#if WRITE_OTA_ADDR - if((ota_addr > IMAGE_x) && ((ota_addr < (IMAGE_x+ImgxLen))) || - (ota_addr < IMAGE_x) || - ((ota_addr & 0xfff) != 0)|| - (ota_addr == ~0x0)){ - printf("[%s] illegal ota addr 0x%x\n", __FUNCTION__, ota_addr); - goto update_ota_exit; - }else - write_ota_addr_to_system_data( &flash, ota_addr); -#endif - //Get upgraded image 2 addr from offset - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_read_word(&flash, OFFSET_DATA, &NewImg2Addr); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - if((NewImg2Addr > IMAGE_x) && ((NewImg2Addr < (IMAGE_x+ImgxLen))) || - (NewImg2Addr < IMAGE_x) || - ((NewImg2Addr & 0xfff) != 0)|| - (NewImg2Addr == ~0x0)){ - printf("[%s] Invalid OTA Address 0x%x\n", __FUNCTION__, NewImg2Addr); - goto update_ota_exit; - } -#else - //For test, hard code addr - NewImg2Addr = 0x80000; -#endif - - //Clear file_info - memset(file_info, 0, sizeof(file_info)); - - if(file_info[0] == 0){ - printf("[%s] Read info first\n", __FUNCTION__); - read_bytes = read(server_socket, file_info, sizeof(file_info)); - // !X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X - // !W checksum !W padding 0 !W file size !W - // !X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X - printf("[%s] info %d bytes", __FUNCTION__, read_bytes); - printf("[%s] tx chechsum 0x%x, file size 0x%x\n", __FUNCTION__, file_info[0],file_info[2]); - if(file_info[2] == 0){ - printf("[%s] No checksum and file size\n", __FUNCTION__); - goto update_ota_exit; - } - } - -#if SWAP_UPDATE - uint32_t SigImage0,SigImage1; - uint32_t Part1Addr=0xFFFFFFFF, Part2Addr=0xFFFFFFFF, ATSCAddr=0xFFFFFFFF; - uint32_t OldImg2Addr; - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_read_word(&flash, 0x18, &Part1Addr); - Part1Addr = (Part1Addr&0xFFFF)*1024; // first partition - Part2Addr = NewImg2Addr; - - // read Part1/Part2 signature - flash_read_word(&flash, Part1Addr+8, &SigImage0); - flash_read_word(&flash, Part1Addr+12, &SigImage1); - printf("[%s] Part1 Sig %x\n", __FUNCTION__, SigImage0); - if(SigImage0==0x30303030 && SigImage1==0x30303030) - ATSCAddr = Part1Addr; // ATSC signature - else if(SigImage0==0x35393138 && SigImage1==0x31313738) - OldImg2Addr = Part1Addr; // newer version, change to older version - else - NewImg2Addr = Part1Addr; // update to older version - - flash_read_word(&flash, Part2Addr+8, &SigImage0); - flash_read_word(&flash, Part2Addr+12, &SigImage1); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - printf("[%s] Part2 Sig %x\n", __FUNCTION__, SigImage0); - if(SigImage0==0x30303030 && SigImage1==0x30303030) - ATSCAddr = Part2Addr; // ATSC signature - else if(SigImage0==0x35393138 && SigImage1==0x31313738) - OldImg2Addr = Part2Addr; - else - NewImg2Addr = Part2Addr; - - // update ATSC clear partitin first - if(ATSCAddr != ~0x0){ - OldImg2Addr = NewImg2Addr; - NewImg2Addr = ATSCAddr; - } - - printf("[%s] New %x, Old %x\n", __FUNCTION__, NewImg2Addr, OldImg2Addr); - - if( NewImg2Addr==Part1Addr ){ - if( file_info[2] > (Part2Addr-Part1Addr) ){ // firmware size too large - printf("[%s] Part1 size < OTA size\n", __FUNCTION__); - goto update_ota_exit; - // or update to partition2 - // NewImg2Addr = Part2Addr; - } - } - -#endif - - //Erase upgraded image 2 region - if(NewImg2Len == 0){ - NewImg2Len = file_info[2]; - printf("[%s] NewImg2Len %d\n", __FUNCTION__, NewImg2Len); - if((int)NewImg2Len > 0){ - NewImg2BlkSize = ((NewImg2Len - 1)/4096) + 1; - printf("[%s] NewImg2BlkSize %d 0x%8x\n", __FUNCTION__, NewImg2BlkSize, NewImg2BlkSize); - device_mutex_lock(RT_DEV_LOCK_FLASH); - for( i = 0; i < NewImg2BlkSize; i++) - flash_erase_sector(&flash, NewImg2Addr + i * 4096); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - }else{ - printf("[%s] Size INVALID\n", __FUNCTION__); - goto update_ota_exit; - } - } - - printf("[%s] NewImg2Addr 0x%x\n", __FUNCTION__, NewImg2Addr); - - // reset - file_checksum.u = 0; - // Write New Image 2 sector - if(NewImg2Addr != ~0x0){ - address = NewImg2Addr; - printf(""); - while(1){ - memset(buf, 0, BUF_SIZE); - read_bytes = read(server_socket, buf, BUF_SIZE); - if(read_bytes == 0) break; // Read end - if(read_bytes < 0){ - printf("[%s] Read socket failed\n", __FUNCTION__); - goto update_ota_exit; - } - checksum += file_checksum.c[0]; // not read end, this is not attached checksum - checksum += file_checksum.c[1]; - checksum += file_checksum.c[2]; - checksum += file_checksum.c[3]; - //printf("[%s] read_bytes %d", __FUNCTION__, read_bytes); - - #if 1 - device_mutex_lock(RT_DEV_LOCK_FLASH); - if(flash_stream_write(&flash, address + size, read_bytes, buf) < 0){ - printf("[%s] Write sector failed\n", __FUNCTION__); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - goto update_ota_exit; - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); - size += read_bytes; - for(i = 0; i < read_bytes-4; i ++) - checksum += buf[i]; - file_checksum.c[0] = buf[read_bytes-4]; // checksum attached at file end - file_checksum.c[1] = buf[read_bytes-3]; - file_checksum.c[2] = buf[read_bytes-2]; - file_checksum.c[3] = buf[read_bytes-1]; - #else - size += read_bytes; - for(i = 0; i < read_bytes-4; i ++){ - checksum += buf[i]; - } - file_checksum.c[0] = buf[read_bytes-4]; // checksum attached at file end - file_checksum.c[1] = buf[read_bytes-3]; - file_checksum.c[2] = buf[read_bytes-2]; - file_checksum.c[3] = buf[read_bytes-1]; - #endif - - if(size == NewImg2Len) - break; - } - printf("\n"); - - // read flash data back and calculate checksum - for(i=0;iBUF_SIZE?BUF_SIZE:(size-4-i); - flash_stream_read(&flash, NewImg2Addr+i, rlen, buf); - for(k=0;k= 0) - close(server_socket); - if(param) - update_free(param); - TaskOTA = NULL; - printf("[%s] Update task exit\n", __FUNCTION__); - if(!ret){ - printf("[%s] Ready to reboot\n", __FUNCTION__); - ota_platform_reset(); - } - vTaskDelete(NULL); - return; - -} -#endif - -//--------------------------------------------------------------------- -int update_ota_local(char *ip, int port) -{ - update_cfg_local_t *pUpdateCfg; - - if(TaskOTA){ - printf("[%s] Update task has created.\n", __FUNCTION__); - return 0; - } - pUpdateCfg = update_malloc(sizeof(update_cfg_local_t)); - if(pUpdateCfg == NULL){ - printf("[%s] Alloc update cfg failed\n", __FUNCTION__); - return -1; - } - pUpdateCfg->ip_addr = inet_addr(ip); - pUpdateCfg->port = ntohs(port); - - if(xTaskCreate(update_ota_local_task, "OTA_server\n", STACK_SIZE, pUpdateCfg, TASK_PRIORITY, &TaskOTA) != pdPASS){ - update_free(pUpdateCfg); - printf("[%s] Create update task failed\n", __FUNCTION__); - } - return 0; -} -#endif // #if (SERVER_TYPE == SERVER_LOCAL) - -//--------------------------------------------------------------------- -#if (SERVER_TYPE == SERVER_CLOUD) -#if defined(STM32F2XX) ||(STM32F4XX) -static void update_ota_cloud_task(void *param) -{ - struct updater_ctx ctx; - char *buf; - int read_bytes, size = 0, i; - uint32_t address, checksum = 0; - update_cfg_cloud_t *cfg = (update_cfg_cloud_t*)param; -#if CONFIG_WRITE_MAC_TO_FLASH - char mac[ETH_ALEN]; -#endif - printf("[%s] Update task start\n", __FUNCTION__); - buf = update_malloc(BUF_SIZE); - if(!buf){ - printf("[%s] Alloc buffer failed\n", __FUNCTION__); - goto update_ota_exit_1; - } - // Init ctx - if(updater_init_ctx(&ctx, (char*)cfg->repository, (char*)cfg->file_path) != 0) { - printf("[%s] Cloud ctx init failed\n", __FUNCTION__); - goto update_ota_exit_1; - } - printf("[%s] Firmware link: %s, size = %d bytes, checksum = 0x%08x, version = %s\n", __FUNCTION__, - ctx.link, ctx.size, ctx.checksum, ctx.version); - - // Erase config sectors - if(flash_EraseSector(CONFIG_SECTOR) < 0){ - printf("[%s] Erase sector failed\n", __FUNCTION__); - goto update_ota_exit; - } -#if CONFIG_WRITE_MAC_TO_FLASH - // Read MAC address - if(flash_Read(FLASH_ADD_STORE_MAC, mac, ETH_ALEN) < 0){ - printf("[%s] Read MAC error\n", __FUNCTION__); - goto update_ota_exit; - } -#endif - // Erase update sectors - for(i = UPDATE_SECTOR; i <= FLASH_Sector_11; i += 8){ - if(flash_EraseSector(i) < 0){ - printf("[%s] Erase sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - } - // Write update sectors - address = flash_SectorAddress(UPDATE_SECTOR); - printf("\n"); - while(ctx.bytes < ctx.size){ - read_bytes = updater_read_bytes(&ctx, (unsigned char*)buf, BUF_SIZE); - if(read_bytes == 0) break; // Read end - if(read_bytes < 0){ - printf("[%s] Read socket failed\n", __FUNCTION__); - goto update_ota_exit; - } - if(flash_Wrtie(address + size, buf, read_bytes) < 0){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - size += read_bytes; - for(i = 0; i < read_bytes; i ++) - checksum += buf[i]; - printf("\rUpdate file size = %d/%d bytes\n", ctx.bytes, ctx.size); - } - printf("[%s] ctx checksum = %08x, computed checksum = %08x\n", __FUNCTION__, ctx.checksum, checksum); - if(checksum != ctx.checksum){ - printf("[%s] Checksum error\n", __FUNCTION__); - goto update_ota_exit; - } -#if CONFIG_WRITE_MAC_TO_FLASH - //Write MAC address - if(!(mac[0]==0xff&&mac[1]==0xff&&mac[2]==0xff&&mac[3]==0xff&&mac[4]==0xff&&mac[5]==0xff)){ - if(flash_Wrtie(FLASH_ADD_STORE_MAC, mac, ETH_ALEN) < 0){ - printf("[%s] Write MAC failed\n", __FUNCTION__); - goto update_ota_exit; - } - } -#endif - // Write config sectors - address = flash_SectorAddress(CONFIG_SECTOR); - if( (flash_Wrtie(address, (char*)&size, 4) < 0) || - (flash_Wrtie(address+4, (char*)&checksum, 4) < 0) ){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - printf("[%s] Update OTA success!\n", __FUNCTION__); - -update_ota_exit: - updater_free_ctx(&ctx); -update_ota_exit_1: - if(buf) - update_free(buf); - if(param) - update_free(param); - TaskOTA = NULL; - printf("[%s] Update task exit\n", __FUNCTION__); - vTaskDelete(NULL); - return; -} -#elif defined(STM32f1xx) -static void update_ota_cloud_task(void *param) -{ - struct updater_ctx ctx; - char *buf, flag_a = 0; - int read_bytes, size = 0, i; - uint32_t address, checksum = 0; - update_cfg_cloud_t *cfg = (update_cfg_cloud_t*)param; - uint16_t a = 0; -#if CONFIG_WRITE_MAC_TO_FLASH - char mac[ETH_ALEN]; -#endif - printf("[%s] Update task start\n", __FUNCTION__); - buf = update_malloc(BUF_SIZE); - if(!buf){ - printf("[%s] Alloc buffer failed\n", __FUNCTION__); - goto update_ota_exit_1; - } - // Init ctx - if(updater_init_ctx(&ctx, (char*)cfg->repository, (char*)cfg->file_path) != 0) { - printf("[%s] Cloud ctx init failed\n", __FUNCTION__); - goto update_ota_exit_1; - } - printf("[%s] Firmware link: %s, size = %d bytes, checksum = 0x%08x, version = %s\n", __FUNCTION__, - ctx.link, ctx.size, ctx.checksum, ctx.version); - - // Erase config sectors - for(i = CONFIG_SECTOR; i < APPLICATION_SECTOR; i += FLASH_PAGE_SIZE){ - if(flash_EraseSector(i) < 0){ - printf("[%s] Erase sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - } -#if CONFIG_WRITE_MAC_TO_FLASH - // Read MAC address - if(flash_Read(FLASH_ADD_STORE_MAC, mac, ETH_ALEN) < 0){ - printf("[%s] Read MAC error\n", __FUNCTION__); - goto update_ota_exit; - } -#endif - - // Erase update sectors - for(i = UPDATE_SECTOR; i < FLASH_Sector_0 + FLASH_SIZE; i += FLASH_PAGE_SIZE){ - if(flash_EraseSector(i) < 0){ - printf("[%s] Erase sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - } - // Write update sectors - address = UPDATE_SECTOR; - printf("\n"); - while(ctx.bytes < ctx.size){ - read_bytes = updater_read_bytes(&ctx, (unsigned char*)buf, BUF_SIZE); - if(read_bytes == 0) break; // Read end - if(read_bytes < 0){ - printf("[%s] Read socket failed\n", __FUNCTION__); - goto update_ota_exit; - } - if(flag_a == 0){ - if(read_bytes % 2 != 0){ - a = buf[read_bytes - 1]; - flag_a = 1; - if(flash_Wrtie(address + size, buf, read_bytes - 1) < 0){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - size += read_bytes - 1; - } - else{ - if(flash_Wrtie(address + size, buf, read_bytes) < 0){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - size += read_bytes; - } - } - else{ - a = buf[0]<< 8 |a; - if(flash_Wrtie(address + size, (char*)(&a), 2) < 0){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - size += 2; - a = 0; - flag_a = 0; - if((read_bytes - 1) % 2 != 0){ - a = buf[read_bytes - 1]; - flag_a = 1; - if(flash_Wrtie(address + size, buf + 1, read_bytes - 2) < 0){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - size += read_bytes - 2; - } - else{ - if(flash_Wrtie(address + size, buf + 1, read_bytes - 1) < 0){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - size += read_bytes - 1; - } - } - for(i = 0; i < read_bytes; i ++) - checksum += buf[i]; - printf("\rUpdate file size = %d/%d bytes\n", ctx.bytes, ctx.size); - } - if(flag_a){ - if(flash_Wrtie(address + size, (char*)(&a), 2) < 0){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - size += 1; - } - printf("[%s] ctx checksum = %08x, computed checksum = %08x\n", __FUNCTION__, ctx.checksum, checksum); - if(checksum != ctx.checksum){ - printf("[%s] Checksum error\n", __FUNCTION__); - goto update_ota_exit; - } -#if CONFIG_WRITE_MAC_TO_FLASH - //Write MAC address - if(!(mac[0]==0xff&&mac[1]==0xff&&mac[2]==0xff&&mac[3]==0xff&&mac[4]==0xff&&mac[5]==0xff)){ - if(flash_Wrtie(FLASH_ADD_STORE_MAC, mac, ETH_ALEN) < 0){ - printf("[%s] Write MAC failed\n", __FUNCTION__); - goto update_ota_exit; - } - } -#endif - - // Write config sectors - address = CONFIG_SECTOR; - if( (flash_Wrtie(address, (char*)&size, 4) < 0) || - (flash_Wrtie(address+4, (char*)&checksum, 4) < 0) ){ - printf("[%s] Write sector failed\n", __FUNCTION__); - goto update_ota_exit; - } - printf("[%s] Update OTA success!\n", __FUNCTION__); - -update_ota_exit: - updater_free_ctx(&ctx); -update_ota_exit_1: - if(buf) - update_free(buf); - if(param) - update_free(param); - TaskOTA = NULL; - printf("[%s] Update task exit\n", __FUNCTION__); - vTaskDelete(NULL); - return; -} - -#endif - -//--------------------------------------------------------------------- -int update_ota_cloud(char *repository, char *file_path) -{ - update_cfg_cloud_t *pUpdateCfg; - - if(TaskOTA){ - printf("[%s] Update task has created.\n", __FUNCTION__); - return 0; - } - pUpdateCfg = update_malloc(sizeof(update_cfg_cloud_t)); - if(pUpdateCfg == NULL){ - printf("[%s] Alloc update cfg failed.\n", __FUNCTION__); - goto exit; - } - if(strlen(repository) > (REPOSITORY_LEN-1)){ - printf("[%s] Repository length is too long.\n", __FUNCTION__); - goto exit; - } - if(strlen(file_path) > (FILE_PATH_LEN-1)){ - printf("[%s] File path length is too long.\n", __FUNCTION__); - goto exit; - } - strcpy((char*)pUpdateCfg->repository, repository); - strcpy((char*)pUpdateCfg->file_path, file_path); - - if(xTaskCreate(update_ota_cloud_task, "OTA_server", STACK_SIZE, pUpdateCfg, TASK_PRIORITY, &TaskOTA) != pdPASS){ - printf("[%s] Create update task failed\n", __FUNCTION__); - goto exit; - } - -exit: - update_free(pUpdateCfg); - return 0; -} -#endif // #if (SERVER_TYPE == SERVER_CLOUD) - -//--------------------------------------------------------------------- -void cmd_update(int argc, char **argv) -{ -// printf("[%s] Firmware A", __FUNCTION__); -#if (SERVER_TYPE == SERVER_LOCAL) - int port; - if(argc != 3){ - printf("[%s] Usage: update IP PORT\n", __FUNCTION__); - return; - } - port = atoi(argv[2]); - update_ota_local(argv[1], port); -#endif -#if (SERVER_TYPE == SERVER_CLOUD) - if(argc != 3){ - printf("[%s] Usage: update REPOSITORY FILE_PATH\n", __FUNCTION__); - return; - } - update_ota_cloud(argv[1], argv[2]); -#endif -} - -// chose to boot ota image or not -void cmd_ota_image(bool cmd){ - flash_t flash; - uint32_t Part1Addr = 0xFFFFFFFF,Part2Addr = 0xFFFFFFFF; - uint8_t *pbuf = NULL; - - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_read_word(&flash, 0x18, &Part1Addr); - Part1Addr = (Part1Addr&0xFFFF)*1024; // first partition - flash_read_word(&flash, OFFSET_DATA, &Part2Addr); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - - if(Part2Addr == ~0x0) - return; - - pbuf = update_malloc(FLASH_SECTOR_SIZE); - if(!pbuf) return; - - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, Part2Addr, FLASH_SECTOR_SIZE, pbuf); - if (cmd == 1) - memcpy((char*)pbuf+8, IMG_SIGN_RUN, 8); - else - memcpy((char*)pbuf+8, IMG_SIGN_SWP, 8); - - flash_erase_sector(&flash, Part2Addr); - flash_stream_write(&flash, Part2Addr, FLASH_SECTOR_SIZE, pbuf); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - -#if SWAP_UPDATE - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, Part1Addr, FLASH_SECTOR_SIZE, pbuf); - if (cmd == 1) - memcpy((char*)pbuf+8, IMG_SIGN_SWP, 8); - else - memcpy((char*)pbuf+8, IMG_SIGN_RUN, 8); - - flash_erase_sector(&flash, Part1Addr); - flash_stream_write(&flash, Part1Addr, FLASH_SECTOR_SIZE, pbuf); - device_mutex_unlock(RT_DEV_LOCK_FLASH); -#endif - update_free(pbuf); -} -//--------------------------------------------------------------------- - -#endif // LWIP_SOCKET diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/update.h b/Firmware/RTLGDB/USDK/component/common/utilities/update.h deleted file mode 100644 index cc5e90e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/update.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef UPDATE_H -#define UPDATE_H - -//-------------------------------------------------------------------------- -int update_ota_local(char *ip, int port); -int update_ota_cloud(char *repository, char *file_path); -void cmd_update(int argc, char **argv); -void cmd_ota_image(bool cmd); - -//---------------------------------------------------------------------------- -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/webserver.c b/Firmware/RTLGDB/USDK/component/common/utilities/webserver.c deleted file mode 100644 index ffaed07..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/webserver.c +++ /dev/null @@ -1,1378 +0,0 @@ -/* - FreeRTOS V6.0.4 - Copyright (C) 2010 Real Time Engineers Ltd. - - *************************************************************************** - * * - * If you are: * - * * - * + New to FreeRTOS, * - * + Wanting to learn FreeRTOS or multitasking in general quickly * - * + Looking for basic training, * - * + Wanting to improve your FreeRTOS skills and productivity * - * * - * then take a look at the FreeRTOS eBook * - * * - * "Using the FreeRTOS Real Time Kernel - a Practical Guide" * - * http://www.FreeRTOS.org/Documentation * - * * - * A pdf reference manual is also available. Both are usually delivered * - * to your inbox within 20 minutes to two hours when purchased between 8am * - * and 8pm GMT (although please allow up to 24 hours in case of * - * exceptional circumstances). Thank you for your support! * - * * - *************************************************************************** - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation AND MODIFIED BY the FreeRTOS exception. - ***NOTE*** The exception to the GPL is included to allow you to distribute - a combined work that includes FreeRTOS without being obliged to provide the - source code for proprietary components outside of the FreeRTOS kernel. - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. You should have received a copy of the GNU General Public - License and the FreeRTOS license exception along with FreeRTOS; if not it - can be viewed here: http://www.freertos.org/a00114.html and also obtained - by writing to Richard Barry, contact details for whom are available on the - FreeRTOS WEB site. - - 1 tab == 4 spaces! - - http://www.FreeRTOS.org - Documentation, latest information, license and - contact details. - - http://www.SafeRTOS.com - A version that is certified for use in safety - critical systems. - - http://www.OpenRTOS.com - Commercial support, development, porting, - licensing and training services. -*/ - -/* - Implements a simplistic WEB server. Every time a connection is made and - data is received a dynamic page that shows the current TCP/IP statistics - is generated and returned. The connection is then closed. - - This file was adapted from a FreeRTOS lwIP slip demo supplied by a third - party. -*/ - -/* ------------------------ System includes ------------------------------- */ - - -/* ------------------------ FreeRTOS includes ----------------------------- */ -#include "FreeRTOS.h" -#include "task.h" -#include "semphr.h" - -/* ------------------------ lwIP includes --------------------------------- */ -#include "lwip/api.h" -#include "lwip/tcpip.h" -#include "lwip/ip.h" -#include "lwip/memp.h" -#include "lwip/stats.h" -#include "netif/loopif.h" - -/* ------------------------ Project includes ------------------------------ */ -#include -#include "main.h" - -#include "webserver.h" -#include "wlan_intf.h" - - -#define CONFIG_READ_FLASH 1 - - -#ifdef CONFIG_READ_FLASH - -#ifndef CONFIG_PLATFORM_AMEBA_X - -#include -#if defined(STM32F2XX) -#include -#elif defined(STM32F4XX) -#include -#elif defined(STM32f1xx) -#include -#endif - -#else -#include "flash_api.h" -#include "flash_eep.h" -#include "feep_config.h" -#include "device_lock.h" - -#ifndef FEEP_ID_WIFI_AP_CFG -#define FEEP_ID_WIFI_AP_CFG 0x5731 -#endif - -#define DATA_SECTOR AP_SETTING_SECTOR -#define BACKUP_SECTOR (0x00008000) - -#endif -#endif -/* ------------------------ Defines --------------------------------------- */ -/* The size of the buffer in which the dynamic WEB page is created. */ -#define webMAX_PAGE_SIZE (3200/* 2800 */) /*FSL: buffer containing array*/ -#define LOCAL_BUF_SIZE 800 -#define AP_SETTING_ADDR AP_SETTING_SECTOR -/* Standard GET response. */ -#define webHTTP_OK "HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n" - -/* The port on which we listen. */ -#define webHTTP_PORT ( 80 ) - -/* Delay on close error. */ -#define webSHORT_DELAY ( 10 ) - -#define USE_DIV_CSS 1 - -#if USE_DIV_CSS - -/* Format of the dynamic page that is returned on each connection. */ -#define webHTML_HEAD_START \ -"\ -\ -" -/* -\ -\ -\ -*/ - -#define webHTML_TITLE \ -"Realtek SoftAP Config UI" - -#define webHTML_BODY_START \ -"\ -\ -
\ -
\ -
\ -Realtek SoftAP Configuration\ -
" - - - -#define webHTML_CSS \ -"" - - - -#define webHTML_END \ -"
\ -\ -
\ -
\ -Copyright ©realtek.com\ -
\ -
\ -
\ -\ -\ -" - -#define webWaitHTML_START \ -"\ -\ -" -#define webWaitHTML_END \ -"\ -\ -

\ -

SoftAP is now restarting!

\ -

Please wait a moment and reconnect!

\ -

"\ -"\r\n" \ -"" - -#define onChangeSecType \ -"" - -#define onSubmitForm \ -"" - - - -#else - - -/* Format of the dynamic page that is returned on each connection. */ -#define webHTML_HEAD_START \ -"\ -\ -" -/* -\ -\ -\ -*/ - -#define webHTML_BODY_START \ -"\ -\ -\r\n\r\n
\ -\ -\ -\ -" - -#define webHTML_END \ -"\ -\ -\ -\ -\ -\ -
\ -

Realtek SoftAP Configuration

\ -
\ -
\ -Copyright ?realtek.com
\ -\r\n
" \ -"\r\n" \ -"" - -#define webWaitHTML_START \ -"\ -\ -" -#define webWaitHTML_END \ -"\ -\ -

\ -

SoftAP is now restarting!

\ -

Please wait a moment and reconnect!

\ -

"\ -"\r\n" \ -"" - -#define onChangeSecType \ -"" - -#define onSubmitForm \ -"" - - - - -#endif - - - - -/* -alert(\"Please enter your password!\");\ -return false;\ -}\ -if(z.value.length < 8)\ -{\ -alert(\"Your password is too short!(8-64)\");\ -return false;\ -}\ -if(z.value.length>64)\ -{\ -alert(\"Your password is too long!(8-64)\");\ -*/ - -#define MAX_SOFTAP_SSID_LEN 32 -#define MAX_PASSWORD_LEN 64 -#define MAX_CHANNEL_NUM 13 - -#if INCLUDE_uxTaskGetStackHighWaterMark - static volatile unsigned portBASE_TYPE uxHighWaterMark_web = 0; -#endif - -/* ------------------------ Prototypes ------------------------------------ */ -static void vProcessConnection( struct netconn *pxNetCon ); - -/*------------------------------------------------------------------------------*/ -/* GLOBALS */ -/*------------------------------------------------------------------------------*/ -rtw_wifi_setting_t wifi_setting = {RTW_MODE_NONE, {0}, 0, RTW_SECURITY_OPEN, {0}}; - - - - -#ifndef WLAN0_NAME - #define WLAN0_NAME "wlan0" -#endif - -#ifndef WLAN1_NAME - #define WLAN1_NAME "wlan1" -#endif - -static void LoadWifiSetting() -{ - const char *ifname = WLAN0_NAME; - - if(rltk_wlan_running(WLAN1_IDX)) - {//STA_AP_MODE - ifname = WLAN1_NAME; - } - - wifi_get_setting(ifname, &wifi_setting); - - //printf("\r\nLoadWifiSetting(): wifi_setting.ssid=%s\n", wifi_setting.ssid); - //printf("\r\nLoadWifiSetting(): wifi_setting.channel=%d\n", wifi_setting.channel); - //printf("\r\nLoadWifiSetting(): wifi_setting.security_type=%d\n", wifi_setting.security_type); - //printf("\r\nLoadWifiSetting(): wifi_setting.password=%s\n", wifi_setting.password); -} - -#if CONFIG_READ_FLASH -#ifndef CONFIG_PLATFORM_AMEBA_X -void LoadWifiConfig() -{ - rtw_wifi_config_t local_config; - uint32_t address; -#ifdef STM32F10X_XL - address = 0x08080000; //bank2 domain -#else - uint16_t sector_nb = FLASH_Sector_11; - address = flash_SectorAddress(sector_nb); -#endif - printf("\r\nLoadWifiConfig(): Read from FLASH!\n"); - flash_Read(address, (char *)&local_config, sizeof(local_config)); - - printf("\r\nLoadWifiConfig(): local_config.boot_mode=0x%x\n", local_config.boot_mode); - printf("\r\nLoadWifiConfig(): local_config.ssid=%s\n", local_config.ssid); - printf("\r\nLoadWifiConfig(): local_config.channel=%d\n", local_config.channel); - printf("\r\nLoadWifiConfig(): local_config.security_type=%d\n", local_config.security_type); - printf("\r\nLoadWifiConfig(): local_config.password=%s\n", local_config.password); - - if(local_config.boot_mode == 0x77665502) - { - wifi_setting.mode = RTW_MODE_AP; - if(local_config.ssid_len > 32) - local_config.ssid_len = 32; - memcpy(wifi_setting.ssid, local_config.ssid, local_config.ssid_len); - wifi_setting.ssid[local_config.ssid_len] = '\0'; - wifi_setting.channel = local_config.channel; - wifi_setting.security_type = local_config.security_type; - if(local_config.password_len > 64) - local_config.password_len = 64; - memcpy(wifi_setting.password, local_config.password, local_config.password_len); - wifi_setting.password[local_config.password_len] = '\0'; - } - else - { - LoadWifiSetting(); - } -} - -int StoreApInfo() -{ -#ifdef USE_FLASH_EEP - rtw_wifi_config_t wifi_config; - // clean wifi_config first - memset(&wifi_config, 0x00, sizeof(rtw_wifi_config_t)); - wifi_config.boot_mode = 0x77665502; - memcpy(wifi_config.ssid, wifi_setting.ssid, strlen((char*)wifi_setting.ssid)); - wifi_config.ssid_len = strlen((char*)wifi_setting.ssid); - wifi_config.security_type = wifi_setting.security_type; - if(wifi_setting.security_type !=0) - wifi_config.security_type = 1; - else - wifi_config.security_type = 0; - memcpy(wifi_config.password, wifi_setting.password, strlen((char*)wifi_setting.password)); - wifi_config.password_len= strlen((char*)wifi_setting.password); - wifi_config.channel = wifi_setting.channel; - printf("\n\rWritting boot mode 0x77665502 and Wi-Fi setting to flash ..."); - flash_write_cfg((uint8_t *)(&wifi_config), FEEP_ID_WIFI_AP_CFG, sizeof(wifi_config)); -#else - rtw_wifi_config_t wifi_config; - uint32_t address; -#ifdef STM32F10X_XL - address = 0x08080000; //bank2 domain -#else - uint16_t sector_nb = FLASH_Sector_11; - address = flash_SectorAddress(sector_nb); -#endif - // clean wifi_config first - memset(&wifi_config, 0x00, sizeof(rtw_wifi_config_t)); - - wifi_config.boot_mode = 0x77665502; - memcpy(wifi_config.ssid, wifi_setting.ssid, strlen((char*)wifi_setting.ssid)); - wifi_config.ssid_len = strlen((char*)wifi_setting.ssid); - wifi_config.security_type = wifi_setting.security_type; - memcpy(wifi_config.password, wifi_setting.password, strlen((char*)wifi_setting.password)); - wifi_config.password_len= strlen((char*)wifi_setting.password); - wifi_config.channel = wifi_setting.channel; - - printf("\n\rWritting boot mode 0x77665502 and Wi-Fi setting to flash ..."); -#ifdef STM32F10X_XL - FLASH_ErasePage(address); -#else - flash_EraseSector(sector_nb); -#endif - flash_Wrtie(address, (char *)&wifi_config, sizeof(rtw_wifi_config_t)); -#endif // USE_FLASH_EEP - return 0; -} - - -#else - -void LoadWifiConfig() -{ - rtw_wifi_config_t local_config; - local_config.boot_mode = 0; - -#ifdef USE_FLASH_EEP - if(flash_read_cfg((uint8_t *)(&local_config), FEEP_ID_WIFI_AP_CFG, sizeof(rtw_wifi_config_t)) >= sizeof(rtw_wifi_config_t)) { - printf("%s: Read from FLASH!\n", __FUNCTION__); - printf("%s: local_config.boot_mode=0x%x\n", __FUNCTION__, local_config.boot_mode); - printf("%s: local_config.ssid=%s\n", __FUNCTION__, local_config.ssid); - printf("%s: local_config.channel=%d\n", __FUNCTION__, local_config.channel); - printf("%s: local_config.security_type=%d\n", __FUNCTION__, local_config.security_type); - printf("%s: local_config.password=%s\n", __FUNCTION__, local_config.password); - } - if(local_config.boot_mode == 0x77665502) { - wifi_setting.mode = RTW_MODE_AP; - if(local_config.ssid_len > 32) - local_config.ssid_len = 32; - memcpy(wifi_setting.ssid, local_config.ssid, local_config.ssid_len); - wifi_setting.ssid[local_config.ssid_len] = '\0'; - wifi_setting.channel = local_config.channel; - if(local_config.security_type == 1) - wifi_setting.security_type = RTW_SECURITY_WPA2_AES_PSK; - else - wifi_setting.security_type = RTW_SECURITY_OPEN; - if(local_config.password_len > 32) - local_config.password_len = 32; - memcpy(wifi_setting.password, local_config.password, local_config.password_len); - wifi_setting.password[local_config.password_len] = '\0'; - } - else { - LoadWifiSetting(); - } - -#else - - flash_t flash; - - uint32_t address; - - address = DATA_SECTOR; - - - //memset(&local_config,0,sizeof(rtw_wifi_config_t)); - printf("\r\nLoadWifiConfig(): Read from FLASH!\n"); - // flash_Read(address, &local_config, sizeof(local_config)); - - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, address, sizeof(rtw_wifi_config_t),(uint8_t *)(&local_config)); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - - printf("\r\nLoadWifiConfig(): local_config.boot_mode=0x%x\n", local_config.boot_mode); - printf("\r\nLoadWifiConfig(): local_config.ssid=%s\n", local_config.ssid); - printf("\r\nLoadWifiConfig(): local_config.channel=%d\n", local_config.channel); - printf("\r\nLoadWifiConfig(): local_config.security_type=%d\n", local_config.security_type); - printf("\r\nLoadWifiConfig(): local_config.password=%s\n", local_config.password); - - if(local_config.boot_mode == 0x77665502) - { - wifi_setting.mode = RTW_MODE_AP; - if(local_config.ssid_len > 32) - local_config.ssid_len = 32; - memcpy(wifi_setting.ssid, local_config.ssid, local_config.ssid_len); - wifi_setting.ssid[local_config.ssid_len] = '\0'; - wifi_setting.channel = local_config.channel; - if(local_config.security_type == 1) - wifi_setting.security_type = RTW_SECURITY_WPA2_AES_PSK; - else - wifi_setting.security_type = RTW_SECURITY_OPEN; - if(local_config.password_len > 64) - local_config.password_len = 64; - memcpy(wifi_setting.password, local_config.password, local_config.password_len); - wifi_setting.password[local_config.password_len] = '\0'; - } - else - { - LoadWifiSetting(); - } -#endif // USE_FLASH_EEP -} - -int StoreApInfo() -{ -#ifdef USE_FLASH_EEP - rtw_wifi_config_t wifi_config; - // clean wifi_config first - memset(&wifi_config, 0x00, sizeof(rtw_wifi_config_t)); - wifi_config.boot_mode = 0x77665502; - memcpy(wifi_config.ssid, wifi_setting.ssid, strlen((char*)wifi_setting.ssid)); - wifi_config.ssid_len = strlen((char*)wifi_setting.ssid); - wifi_config.security_type = wifi_setting.security_type; - if(wifi_setting.security_type !=0) - wifi_config.security_type = 1; - else - wifi_config.security_type = 0; - memcpy(wifi_config.password, wifi_setting.password, strlen((char*)wifi_setting.password)); - wifi_config.password_len= strlen((char*)wifi_setting.password); - wifi_config.channel = wifi_setting.channel; - printf("\n\rWritting boot mode 0x77665502 and Wi-Fi setting to flash ..."); - flash_write_cfg((uint8_t *)(&wifi_config), FEEP_ID_WIFI_AP_CFG, sizeof(wifi_config)); -#else - - flash_t flash; - - rtw_wifi_config_t wifi_config; - uint32_t address; - uint32_t data,i = 0; - - // clean wifi_config first - memset(&wifi_config, 0x00, sizeof(rtw_wifi_config_t)); - - address = DATA_SECTOR; - - wifi_config.boot_mode = 0x77665502; - memcpy(wifi_config.ssid, wifi_setting.ssid, strlen((char*)wifi_setting.ssid)); - wifi_config.ssid_len = strlen((char*)wifi_setting.ssid); - wifi_config.security_type = wifi_setting.security_type; - if(wifi_setting.security_type !=0) - wifi_config.security_type = 1; - else - wifi_config.security_type = 0; - memcpy(wifi_config.password, wifi_setting.password, strlen((char*)wifi_setting.password)); - wifi_config.password_len= strlen((char*)wifi_setting.password); - wifi_config.channel = wifi_setting.channel; - printf("\n\rWritting boot mode 0x77665502 and Wi-Fi setting to flash ..."); - //printf("\n\r &wifi_config = 0x%x",&wifi_config); - - flash_read_word(&flash,address,&data); - - - if(data == ~0x0){ - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_write(&flash, address,sizeof(rtw_wifi_config_t), (uint8_t *)&wifi_config); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - }else{ - //flash_EraseSector(sector_nb); - - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_erase_sector(&flash,BACKUP_SECTOR); - for(i = 0; i < 0x1000; i+= 4){ - flash_read_word(&flash, DATA_SECTOR + i, &data); - if(i < sizeof(rtw_wifi_config_t)) - { - memcpy(&data,(char *)(&wifi_config) + i,4); - //printf("\n\r Wifi_config + %d = 0x%x",i,(void *)(&wifi_config + i)); - //printf("\n\r Data = %d",data); - } - flash_write_word(&flash, BACKUP_SECTOR + i,data); - } - flash_read_word(&flash,BACKUP_SECTOR + 68,&data); - //printf("\n\r Base + BACKUP_SECTOR + 68 wifi channel = %d",data); - //erase system data - flash_erase_sector(&flash, DATA_SECTOR); - //write data back to system data - for(i = 0; i < 0x1000; i+= 4){ - flash_read_word(&flash, BACKUP_SECTOR + i, &data); - flash_write_word(&flash, DATA_SECTOR + i,data); - } - //erase backup sector - flash_erase_sector(&flash, BACKUP_SECTOR); - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); - //flash_Wrtie(address, (char *)&wifi_config, sizeof(rtw_wifi_config_t)); - //flash_stream_write(&flash, address,sizeof(rtw_wifi_config_t), (uint8_t *)&wifi_config); - //flash_stream_read(&flash, address, sizeof(rtw_wifi_config_t),data); - //flash_stream_read(&flash, address, sizeof(rtw_wifi_config_t),data); - //printf("\n\r Base + 0x000FF000 +4 wifi config = %s",data[4]); - //printf("\n\r Base + 0x000FF000 +71 wifi channel = %d",data[71]); - -#endif // USE_FLASH_EEP - return 0; -} - -int EraseApinfo(){ -#ifdef USE_FLASH_EEP - flash_write_cfg(NULL, FEEP_ID_WIFI_AP_CFG, 0); -#else - - flash_t flash; - uint32_t address; - - address = DATA_SECTOR; - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_erase_sector(&flash, address); - device_mutex_unlock(RT_DEV_LOCK_FLASH); -#endif // USE_FLASH_EEP - return 0; -} -#endif - -#endif - -static void RestartSoftAP() -{ - //printf("\r\nRestartAP: ssid=%s", wifi_setting.ssid); - //printf("\r\nRestartAP: ssid_len=%d", strlen((char*)wifi_setting.ssid)); - //printf("\r\nRestartAP: security_type=%d", wifi_setting.security_type); - //printf("\r\nRestartAP: password=%s", wifi_setting.password); - //printf("\r\nRestartAP: password_len=%d", strlen((char*)wifi_setting.password)); - //printf("\r\nRestartAP: channel=%d\n", wifi_setting.channel); - wifi_restart_ap(wifi_setting.ssid, - wifi_setting.security_type, - wifi_setting.password, -// strlen((char*)wifi_setting.ssid), -// strlen((char*)wifi_setting.password), - wifi_setting.channel); -} - - -u32 web_atoi(char* s) -{ - int num=0,flag=0; - int i; - - for(i=0;i<=strlen(s);i++) - { - if(s[i] >= '0' && s[i] <= '9') - num = num * 10 + s[i] -'0'; - else if(s[0] == '-' && i==0) - flag =1; - else - break; - } - - if(flag == 1) - num = num * -1; - - return(num); -} - -static void CreateSsidTableItem(char *pbuf, u8_t *ssid, u8_t ssid_len) -{ - char local_ssid[MAX_SOFTAP_SSID_LEN+1]; - - if(ssid_len > MAX_SOFTAP_SSID_LEN) - ssid_len = MAX_SOFTAP_SSID_LEN; - memcpy(local_ssid, ssid, ssid_len); - local_ssid[ssid_len] = '\0'; - -#if USE_DIV_CSS - sprintf(pbuf, "
SoftAP SSID:
" \ - "
", - local_ssid); -#else - sprintf(pbuf, "" - "" - "SoftAP SSID:
" - "" - "" - "
" - "" - "", - local_ssid); - -#endif - //printf("\r\nstrlen(SsidTableItem)=%d\n", strlen(pbuf)); -} - -static void CreateSecTypeTableItem(char *pbuf, u32_t sectype) -{ - u8_t flag[2] = {0, 0}; - - if(sectype == RTW_SECURITY_OPEN) - flag[0] = 1; - else if(sectype == RTW_SECURITY_WPA2_AES_PSK) - flag[1] = 1; - else - return; - -#if USE_DIV_CSS - sprintf(pbuf, "
Security Type:
"\ - "
", - flag[0]?"selected":"", - flag[1]?"selected":""); -#else - sprintf(pbuf, "" - "" - "Security Type:
" - "" - "" - "" - "" - "", - flag[0]?"selected":"", - flag[1]?"selected":""); - - -#endif - - //printf("\r\nstrlen(SecTypeTableItem)=%d\n", strlen(pbuf)); -} - -static void CreatePasswdTableItem(char *pbuf, u8_t *password, u8_t passwd_len) -{ - char local_passwd[MAX_PASSWORD_LEN+1]; - - if(passwd_len > MAX_PASSWORD_LEN) - passwd_len = MAX_PASSWORD_LEN; - if(passwd_len > 0) - { - memcpy(local_passwd, password, passwd_len); - local_passwd[passwd_len] = '\0'; - } - -#if USE_DIV_CSS - - sprintf(pbuf, "
Password:
"\ - "
"\ - ""\ - "
", - passwd_len?local_passwd:""); -#else - sprintf(pbuf, "" - "" - "Password:
" - "" - "" - "
" - "" - "", - passwd_len?local_passwd:""); - - -#endif - - - //printf("\r\nstrlen(passwordTableItem)=%d\n", strlen(pbuf)); -} - -static void CreateChannelTableItem(char *pbuf, u8_t channel) -{ - u8_t flag[MAX_CHANNEL_NUM+1] = {0}; - - if(channel > MAX_CHANNEL_NUM){ - printf("Channel(%d) is out of range!\n", channel); - channel = 1; - } - flag[channel] = 1; - -#if USE_DIV_CSS - - sprintf(pbuf, "
Channel:
" - "
", - - flag[1]?"selected":"", - flag[2]?"selected":"", - flag[3]?"selected":"", - flag[4]?"selected":"", - flag[5]?"selected":"", - flag[6]?"selected":"", - flag[7]?"selected":"", - flag[8]?"selected":"", - flag[9]?"selected":"", - flag[10]?"selected":"", - flag[11]?"selected":""); -#else - sprintf(pbuf, "" - "" - "Channel:
" - "" - "" - "" - "" - "", - flag[1]?"selected":"", - flag[2]?"selected":"", - flag[3]?"selected":"", - flag[4]?"selected":"", - flag[5]?"selected":"", - flag[6]?"selected":"", - flag[7]?"selected":"", - flag[8]?"selected":"", - flag[9]?"selected":"", - flag[10]?"selected":"", - flag[11]?"selected":""); - - -#endif - - //printf("\r\nstrlen(ChannelTableItem)=%d\n", strlen(pbuf)); -} - -static void GenerateIndexHtmlPage(portCHAR* cDynamicPage, portCHAR *LocalBuf) -{ - /* Generate the page index.html... - ... First the page header. */ - strcpy( cDynamicPage, webHTML_HEAD_START ); - - /* Add script */ - strcat( cDynamicPage, onChangeSecType ); - strcat( cDynamicPage, onSubmitForm); -#if USE_DIV_CSS - /* add css */ - strcat( cDynamicPage, webHTML_CSS); - - strcat( cDynamicPage, webHTML_TITLE); -#endif - /* Add Body start */ - strcat( cDynamicPage, webHTML_BODY_START ); - - /* Add SSID */ - CreateSsidTableItem(LocalBuf, wifi_setting.ssid, strlen((char*)wifi_setting.ssid)); - strcat( cDynamicPage, LocalBuf ); - - /* Add SECURITY TYPE */ - CreateSecTypeTableItem(LocalBuf, wifi_setting.security_type); - strcat( cDynamicPage, LocalBuf ); - - /* Add PASSWORD */ - CreatePasswdTableItem(LocalBuf, wifi_setting.password, strlen((char*)wifi_setting.password)); - strcat( cDynamicPage, LocalBuf ); - - /* Add CHANNEL */ - CreateChannelTableItem(LocalBuf, wifi_setting.channel); - strcat( cDynamicPage, LocalBuf ); - - /* ... Finally the page footer. */ - strcat( cDynamicPage, webHTML_END ); - //printf("\r\nGenerateIndexHtmlPage(): %s\n", cDynamicPage); - printf("\r\nGenerateIndexHtmlPage Len: %d\n", strlen( cDynamicPage )); -} - -static void GenerateWaitHtmlPage(portCHAR* cDynamicPage) -{ - /* Generate the dynamic page... - ... First the page header. */ - strcpy( cDynamicPage, webWaitHTML_START ); - - /* ... Finally the page footer. */ - strcat( cDynamicPage, webWaitHTML_END); - - //printf("\r\nGenerateWaitHtmlPage(): %s\n", cDynamicPage); - //printf("\r\nGenerateWaitHtmlPage Len: %d\n", strlen( cDynamicPage )); -} - -static void http_translate_url_encode(char *ptr) -{ - - char *data = ptr; - char tmp_data[3] = {0}; - char outdata[33] = {0}; - int buffer; - char *outdata_ptr = outdata; - - while (*data != '\0') { - - if (*data == '%') { - if ((*(data + 1) != 0) && (*(data + 2) != 0)) { - tmp_data[0] = *(data + 1); - tmp_data[1] = *(data + 2); - sscanf(tmp_data, "%x", &buffer); - *outdata_ptr = (char)buffer; - - /* destroy data */ - *data = 0; - *(data+1) = 0; - *(data+2) = 0; - - data += 2; - outdata_ptr++; - } - - } else { - *outdata_ptr = *data; - if (*data == '+') - *outdata_ptr = ' '; - outdata_ptr++; - } - data++; - } - strcpy(ptr, outdata); - -} - -static u8_t ProcessPostMessage(struct netbuf *pxRxBuffer, portCHAR *LocalBuf) -{ - struct pbuf *p; - portCHAR *pcRxString, *ptr; - unsigned portSHORT usLength; - u8_t bChanged = 0; - rtw_security_t secType; - u8_t channel; - u8_t len = 0; - - pcRxString = LocalBuf; - p = pxRxBuffer->p; - usLength = p->tot_len; - //printf("\r\n !!!!!!!!!POST!p->tot_len =%d p->len=%d\n", p->tot_len, p->len); - while(p) - { - memcpy(pcRxString, p->payload, p->len); - pcRxString += p->len; - p = p->next; - } - pcRxString = LocalBuf; - pcRxString[usLength] = '\0'; - //printf("\r\n usLength=%d pcRxString = %s\n", usLength, pcRxString); - - ptr = (char*)strstr(pcRxString, "Ssid="); - if(ptr) - { - //printf("ssid passed = %s\n", ptr); - pcRxString = (char*)strstr(ptr, "&"); - *pcRxString++ = '\0'; - ptr += 5; - http_translate_url_encode(ptr); - if(strcmp((char*)wifi_setting.ssid, ptr)) - { - bChanged = 1; - len = strlen(ptr); - if(len > MAX_SOFTAP_SSID_LEN){ - len = MAX_SOFTAP_SSID_LEN; - ptr[len] = '\0'; - } - strcpy((char*)wifi_setting.ssid, ptr); - } - } - - - printf("\r\n get wifi_config.ssid = %s\n", wifi_setting.ssid); - ptr = (char*)strstr(pcRxString, "Security+Type="); - if(ptr) - { - pcRxString = (char*)strstr(ptr, "&"); - *pcRxString++ = '\0'; - ptr += 14; - if(!strcmp(ptr, "open")) - secType = RTW_SECURITY_OPEN; - else if(!strcmp(ptr, "wpa2-aes")) - secType = RTW_SECURITY_WPA2_AES_PSK; - else - secType = RTW_SECURITY_OPEN; - if(wifi_setting.security_type != secType) - { - bChanged = 1; - wifi_setting.security_type = secType; - } - } - - //printf("\r\n wifi_config.security_type = %d\n", wifi_setting.security_type); - if(wifi_setting.security_type > RTW_SECURITY_OPEN) - { - ptr = (char*)strstr(pcRxString, "Password="); - if(ptr) - { - pcRxString = (char*)strstr(ptr, "&"); - *pcRxString++ = '\0'; - ptr += 9; - if(strcmp((char*)wifi_setting.password, ptr)) - { - bChanged = 1; - len = strlen(ptr); - if(len > MAX_PASSWORD_LEN){ - len = MAX_PASSWORD_LEN; - ptr[len] = '\0'; - } - strcpy((char*)wifi_setting.password, ptr); - } - } - //printf("\r\n wifi_config.password = %s\n", wifi_setting.password); - } - ptr = (char*)strstr(pcRxString, "Channel="); - if(ptr) - { - ptr += 8; - channel = web_atoi(ptr); - if((channel>MAX_CHANNEL_NUM)||(channel < 1)) - channel = 1; - if(wifi_setting.channel !=channel) - { - bChanged = 1; - wifi_setting.channel = channel; - } - } - //printf("\r\n wifi_config.channel = %d\n", wifi_setting.channel); - - return bChanged; -} - -struct netconn *pxHTTPListener = NULL; -static void vProcessConnection( struct netconn *pxNetCon ) -{ - static portCHAR cDynamicPage[webMAX_PAGE_SIZE]; - struct netbuf *pxRxBuffer, *pxRxBuffer1 = NULL; - portCHAR *pcRxString; - unsigned portSHORT usLength; - static portCHAR LocalBuf[LOCAL_BUF_SIZE]; - u8_t bChanged = 0; - int ret_recv = ERR_OK; - int ret_accept = ERR_OK; - char *ptr = NULL; - - /* Load WiFi Setting*/ - LoadWifiSetting(); - - /* We expect to immediately get data. */ - port_netconn_recv( pxNetCon , pxRxBuffer, ret_recv); - - if( pxRxBuffer != NULL && ret_recv == ERR_OK) - { - /* Where is the data? */ - netbuf_data( pxRxBuffer, ( void * )&pcRxString, &usLength ); - - //printf("\r\nusLength=%d pcRxString = \n%s\n", usLength, pcRxString); - /* Is this a GET? We don't handle anything else. */ - if( !strncmp( pcRxString, "GET", 3 ) ) - { - //printf("\r\nusLength=%d pcRxString=%s \n", usLength, pcRxString); - //pcRxString = cDynamicPage; - - /* Write out the HTTP OK header. */ - netconn_write( pxNetCon, webHTTP_OK, ( u16_t ) strlen( webHTTP_OK ), NETCONN_COPY ); - - /* Generate index.html page. */ - GenerateIndexHtmlPage(cDynamicPage, LocalBuf); - - /* Write out the dynamically generated page. */ - netconn_write( pxNetCon, cDynamicPage, ( u16_t ) strlen( cDynamicPage ), NETCONN_COPY ); - } - else if(!strncmp( pcRxString, "POST", 4 ) ) - { - /* Write out the HTTP OK header. */ - netconn_write( pxNetCon, webHTTP_OK, ( u16_t ) strlen( webHTTP_OK ), NETCONN_COPY ); - - bChanged = ProcessPostMessage(pxRxBuffer, LocalBuf); - if(bChanged == 0){ - port_netconn_recv( pxNetCon , pxRxBuffer1, ret_recv); - if(pxRxBuffer != NULL && ret_recv == ERR_OK){ - bChanged = ProcessPostMessage(pxRxBuffer1, LocalBuf); - netbuf_delete( pxRxBuffer1 ); - } - } - if(bChanged) - { - GenerateWaitHtmlPage(cDynamicPage); - - /* Write out the generated page. */ - netconn_write( pxNetCon, cDynamicPage, ( u16_t ) strlen( cDynamicPage ), NETCONN_COPY ); - -#if CONFIG_READ_FLASH - StoreApInfo(); -#endif - } - else - { - /* Generate index.html page. */ - GenerateIndexHtmlPage(cDynamicPage, LocalBuf); - - /* Write out the generated page. */ - netconn_write( pxNetCon, cDynamicPage, ( u16_t ) strlen( cDynamicPage ), NETCONN_COPY ); - } - } - netbuf_delete( pxRxBuffer ); - } - netconn_close( pxNetCon ); - - if(bChanged) - { - struct netconn *pxNewConnection; - vTaskDelay(200/portTICK_RATE_MS); - //printf("\r\n%d:before restart ap\n", xTaskGetTickCount()); - RestartSoftAP(); - //printf("\r\n%d:after restart ap\n", xTaskGetTickCount()); - pxHTTPListener->recv_timeout = 1; - port_netconn_accept( pxHTTPListener , pxNewConnection, ret_accept); - if( pxNewConnection != NULL && ret_accept == ERR_OK) - { - //printf("\r\n%d: got a conn\n", xTaskGetTickCount()); - netconn_close( pxNewConnection ); - while( netconn_delete( pxNewConnection ) != ERR_OK ) - { - vTaskDelay( webSHORT_DELAY ); - } - } - //printf("\r\n%d:end\n", xTaskGetTickCount()); - pxHTTPListener->recv_timeout = 0; - } -} - -/*------------------------------------------------------------*/ -xTaskHandle webs_task = NULL; -xSemaphoreHandle webs_sema = NULL; -u8_t webs_terminate = 0; -void vBasicWEBServer( void *pvParameters ) -{ - struct netconn *pxNewConnection; - //struct ip_addr xIpAddr, xNetMast, xGateway; - extern err_t ethernetif_init( struct netif *netif ); - int ret = ERR_OK; - /* Parameters are not used - suppress compiler error. */ - ( void )pvParameters; - - /* Create a new tcp connection handle */ - pxHTTPListener = netconn_new( NETCONN_TCP ); - ip_set_option(pxHTTPListener->pcb.ip, SOF_REUSEADDR); - netconn_bind( pxHTTPListener, NULL, webHTTP_PORT ); - netconn_listen( pxHTTPListener ); - -#if CONFIG_READ_FLASH - /* Load wifi_config */ - LoadWifiConfig(); - RestartSoftAP(); -#endif - //printf("\r\n-0\n"); - - /* Loop forever */ - for( ;; ) - { - if(webs_terminate) - break; - - //printf("\r\n%d:-1\n", xTaskGetTickCount()); - /* Wait for connection. */ - port_netconn_accept( pxHTTPListener , pxNewConnection, ret); - //printf("\r\n%d:-2\n", xTaskGetTickCount()); - - if( pxNewConnection != NULL && ret == ERR_OK) - { - /* Service connection. */ - vProcessConnection( pxNewConnection ); - while( netconn_delete( pxNewConnection ) != ERR_OK ) - { - vTaskDelay( webSHORT_DELAY ); - } - } - //printf("\r\n%d:-3\n", xTaskGetTickCount()); - } - //printf("\r\n-4\n"); - if(pxHTTPListener) - { - netconn_close(pxHTTPListener); - netconn_delete(pxHTTPListener); - pxHTTPListener = NULL; - } - - //printf("\r\nExit Web Server Thread!\n"); - xSemaphoreGive(webs_sema); -} - -#define STACKSIZE 512 -void start_web_server() -{ - printf("\r\nWEB:Enter start web server!\n"); - webs_terminate = 0; - if(webs_task == NULL) - { - if(xTaskCreate(vBasicWEBServer, (const char *)"web_server", STACKSIZE, NULL, tskIDLE_PRIORITY + 1, &webs_task) != pdPASS) - printf("\n\rWEB: Create webserver task failed!\n"); - } - if(webs_sema == NULL) - { - webs_sema = xSemaphoreCreateCounting(0xffffffff, 0); //Set max count 0xffffffff - } - //printf("\r\nWEB:Exit start web server!\n"); -} - -void stop_web_server() -{ - //printf("\r\nWEB:Enter stop web server!\n"); - webs_terminate = 1; - if(pxHTTPListener) - netconn_abort(pxHTTPListener); - if(webs_sema) - { - if(xSemaphoreTake(webs_sema, 15 * configTICK_RATE_HZ) != pdTRUE) - { - if(pxHTTPListener) - { - netconn_close(pxHTTPListener); - netconn_delete(pxHTTPListener); - pxHTTPListener = NULL; - } - printf("\r\nWEB: Take webs sema(%p) failed!!!!!!!!!!!\n", webs_sema); - } - vSemaphoreDelete(webs_sema); - webs_sema = NULL; - } - if(webs_task) - { - vTaskDelete(webs_task); - webs_task = NULL; - } - printf("\r\nWEB:Exit stop web server!\n"); -} diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/webserver.h b/Firmware/RTLGDB/USDK/component/common/utilities/webserver.h deleted file mode 100644 index 2586881..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/webserver.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - FreeRTOS V6.0.4 - Copyright (C) 2010 Real Time Engineers Ltd. - - *************************************************************************** - * * - * If you are: * - * * - * + New to FreeRTOS, * - * + Wanting to learn FreeRTOS or multitasking in general quickly * - * + Looking for basic training, * - * + Wanting to improve your FreeRTOS skills and productivity * - * * - * then take a look at the FreeRTOS eBook * - * * - * "Using the FreeRTOS Real Time Kernel - a Practical Guide" * - * http://www.FreeRTOS.org/Documentation * - * * - * A pdf reference manual is also available. Both are usually delivered * - * to your inbox within 20 minutes to two hours when purchased between 8am * - * and 8pm GMT (although please allow up to 24 hours in case of * - * exceptional circumstances). Thank you for your support! * - * * - *************************************************************************** - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation AND MODIFIED BY the FreeRTOS exception. - ***NOTE*** The exception to the GPL is included to allow you to distribute - a combined work that includes FreeRTOS without being obliged to provide the - source code for proprietary components outside of the FreeRTOS kernel. - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. You should have received a copy of the GNU General Public - License and the FreeRTOS license exception along with FreeRTOS; if not it - can be viewed here: http://www.freertos.org/a00114.html and also obtained - by writing to Richard Barry, contact details for whom are available on the - FreeRTOS WEB site. - - 1 tab == 4 spaces! - - http://www.FreeRTOS.org - Documentation, latest information, license and - contact details. - - http://www.SafeRTOS.com - A version that is certified for use in safety - critical systems. - - http://www.OpenRTOS.com - Commercial support, development, porting, - licensing and training services. -*/ - -#ifndef BASIC_WEB_SERVER_H -#define BASIC_WEB_SERVER_H - -#include -/*------------------------------------------------------------------------------*/ -/* MACROS */ -/*------------------------------------------------------------------------------*/ -#define basicwebWEBSERVER_PRIORITY ( tskIDLE_PRIORITY + 2 ) - -#define lwipBASIC_SERVER_STACK_SIZE 256 - -/*------------------------------------------------------------------------------*/ - -/* The function that implements the WEB server task. */ -extern void start_web_server(void); - -#endif /* - */ - diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/webserver1.c b/Firmware/RTLGDB/USDK/component/common/utilities/webserver1.c deleted file mode 100644 index 880dd54..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/webserver1.c +++ /dev/null @@ -1,1356 +0,0 @@ -/* - FreeRTOS V6.0.4 - Copyright (C) 2010 Real Time Engineers Ltd. - - *************************************************************************** - * * - * If you are: * - * * - * + New to FreeRTOS, * - * + Wanting to learn FreeRTOS or multitasking in general quickly * - * + Looking for basic training, * - * + Wanting to improve your FreeRTOS skills and productivity * - * * - * then take a look at the FreeRTOS eBook * - * * - * "Using the FreeRTOS Real Time Kernel - a Practical Guide" * - * http://www.FreeRTOS.org/Documentation * - * * - * A pdf reference manual is also available. Both are usually delivered * - * to your inbox within 20 minutes to two hours when purchased between 8am * - * and 8pm GMT (although please allow up to 24 hours in case of * - * exceptional circumstances). Thank you for your support! * - * * - *************************************************************************** - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation AND MODIFIED BY the FreeRTOS exception. - ***NOTE*** The exception to the GPL is included to allow you to distribute - a combined work that includes FreeRTOS without being obliged to provide the - source code for proprietary components outside of the FreeRTOS kernel. - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. You should have received a copy of the GNU General Public - License and the FreeRTOS license exception along with FreeRTOS; if not it - can be viewed here: http://www.freertos.org/a00114.html and also obtained - by writing to Richard Barry, contact details for whom are available on the - FreeRTOS WEB site. - - 1 tab == 4 spaces! - - http://www.FreeRTOS.org - Documentation, latest information, license and - contact details. - - http://www.SafeRTOS.com - A version that is certified for use in safety - critical systems. - - http://www.OpenRTOS.com - Commercial support, development, porting, - licensing and training services. -*/ - -/* - Implements a simplistic WEB server. Every time a connection is made and - data is received a dynamic page that shows the current TCP/IP statistics - is generated and returned. The connection is then closed. - - This file was adapted from a FreeRTOS lwIP slip demo supplied by a third - party. -*/ - -/* ------------------------ System includes ------------------------------- */ - - -/* ------------------------ FreeRTOS includes ----------------------------- */ -#include "FreeRTOS.h" -#include "task.h" -#include "semphr.h" - -/* ------------------------ lwIP includes --------------------------------- */ -#include "lwip/api.h" -#include "lwip/tcpip.h" -#include "lwip/ip.h" -#include "lwip/memp.h" -#include "lwip/stats.h" -#include "netif/loopif.h" - -/* ------------------------ Project includes ------------------------------ */ -#include -#include "main.h" - -#if CONFIG_WEBSERVER - -#include "webserver.h" -#include "wlan_intf.h" - -#define CONFIG_READ_FLASH 1 - -#ifdef CONFIG_READ_FLASH - -#ifndef CONFIG_PLATFORM_8195A - -#include -#if defined(STM32F2XX) -#include -#elif defined(STM32F4XX) -#include -#elif defined(STM32f1xx) -#include -#endif - -#else -#include "flash_api.h" -#include "flash_eep.h" -#include "feep_config.h" -#include "device_lock.h" - -#ifndef FEEP_ID_WIFI_AP_CFG -#define FEEP_ID_WIFI_AP_CFG 0x5731 -#endif - -#define DATA_SECTOR AP_SETTING_SECTOR -#define BACKUP_SECTOR (0x00008000) - -#endif -#endif -/* ------------------------ Defines --------------------------------------- */ -/* The size of the buffer in which the dynamic WEB page is created. */ -#define webMAX_PAGE_SIZE (3200/* 2800 */) /*FSL: buffer containing array*/ -#define LOCAL_BUF_SIZE 800 -#define AP_SETTING_ADDR AP_SETTING_SECTOR -/* Standard GET response. */ -#define webHTTP_OK "HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n" - -/* The port on which we listen. */ -#define webHTTP_PORT ( 80 ) - -/* Delay on close error. */ -#define webSHORT_DELAY ( 10 ) - -#define USE_DIV_CSS 1 - -#if USE_DIV_CSS - -/* Format of the dynamic page that is returned on each connection. */ -#define webHTML_HEAD_START \ -"\ -\ -" -/* -\ -\ -\ -*/ - -#define webHTML_TITLE \ -"Realtek SoftAP Config UI" - -#define webHTML_BODY_START \ -"\ -\ -
\ -
\ -
\ -Realtek SoftAP Configuration\ -
" - - - -#define webHTML_CSS \ -"" - - - -#define webHTML_END \ -"
\ -\ -
\ -
\ -Copyright ©realtek.com\ -
\ -
\ -
\ -\ -\ -" - -#define webWaitHTML_START \ -"\ -\ -" -#define webWaitHTML_END \ -"\ -\ -

\ -

SoftAP is now restarting!

\ -

Please wait a moment and reconnect!

\ -

"\ -"\r\n" \ -"" - -#define onChangeSecType \ -"" - -#define onSubmitForm \ -"" - - - -#else - - -/* Format of the dynamic page that is returned on each connection. */ -#define webHTML_HEAD_START \ -"\ -\ -" -/* -\ -\ -\ -*/ - -#define webHTML_BODY_START \ -"\ -\ -\r\n\r\n
\ -\ -\ -\ -" - -#define webHTML_END \ -"\ -\ -\ -\ -\ -\ -
\ -

Realtek SoftAP Configuration

\ -
\ -
\ -Copyright ?realtek.com
\ -\r\n
" \ -"\r\n" \ -"" - -#define webWaitHTML_START \ -"\ -\ -" -#define webWaitHTML_END \ -"\ -\ -

\ -

SoftAP is now restarting!

\ -

Please wait a moment and reconnect!

\ -

"\ -"\r\n" \ -"" - -#define onChangeSecType \ -"" - -#define onSubmitForm \ -"" - - - - -#endif - - - - -/* -alert(\"Please enter your password!\");\ -return false;\ -}\ -if(z.value.length < 8)\ -{\ -alert(\"Your password is too short!(8-32)\");\ -return false;\ -}\ -if(z.value.length>32)\ -{\ -alert(\"Your password is too long!(8-32)\");\ -*/ - -#define MAX_SOFTAP_SSID_LEN 32 -#define MAX_PASSWORD_LEN 32 -#define MAX_CHANNEL_NUM 13 - -#if INCLUDE_uxTaskGetStackHighWaterMark - static volatile unsigned portBASE_TYPE uxHighWaterMark_web = 0; -#endif - -/* ------------------------ Prototypes ------------------------------------ */ -static void vProcessConnection( struct netconn *pxNetCon ); - -/*------------------------------------------------------------------------------*/ -/* GLOBALS */ -/*------------------------------------------------------------------------------*/ -rtw_wifi_setting_t wifi_setting = {RTW_MODE_NONE, {0}, 0, RTW_SECURITY_OPEN, {0}}; - - -#ifndef WLAN0_NAME - #define WLAN0_NAME "wlan0" -#endif - -#ifndef WLAN1_NAME - #define WLAN1_NAME "wlan1" -#endif - -static void LoadWifiSetting() -{ - const char *ifname = WLAN0_NAME; - - if(rltk_wlan_running(WLAN1_IDX)) - {//STA_AP_MODE - ifname = WLAN1_NAME; - } - - wifi_get_setting(ifname, &wifi_setting); - - //printf("\r\nLoadWifiSetting(): wifi_setting.ssid=%s\n", wifi_setting.ssid); - //printf("\r\nLoadWifiSetting(): wifi_setting.channel=%d\n", wifi_setting.channel); - //printf("\r\nLoadWifiSetting(): wifi_setting.security_type=%d\n", wifi_setting.security_type); - //printf("\r\nLoadWifiSetting(): wifi_setting.password=%s\n", wifi_setting.password); -} - -#if CONFIG_READ_FLASH -#ifndef CONFIG_PLATFORM_8195A -void LoadWifiConfig() -{ - rtw_wifi_config_t local_config; - uint32_t address; -#ifdef STM32F10X_XL - address = 0x08080000; //bank2 domain -#else - uint16_t sector_nb = FLASH_Sector_11; - address = flash_SectorAddress(sector_nb); -#endif - printf("\r\nLoadWifiConfig(): Read from FLASH!\n"); - flash_Read(address, (char *)&local_config, sizeof(local_config)); - - printf("\r\nLoadWifiConfig(): local_config.boot_mode=0x%x\n", local_config.boot_mode); - printf("\r\nLoadWifiConfig(): local_config.ssid=%s\n", local_config.ssid); - printf("\r\nLoadWifiConfig(): local_config.channel=%d\n", local_config.channel); - printf("\r\nLoadWifiConfig(): local_config.security_type=%d\n", local_config.security_type); - printf("\r\nLoadWifiConfig(): local_config.password=%s\n", local_config.password); - - if(local_config.boot_mode == 0x77665502) - { - wifi_setting.mode = RTW_MODE_AP; - if(local_config.ssid_len > 32) - local_config.ssid_len = 32; - memcpy(wifi_setting.ssid, local_config.ssid, local_config.ssid_len); - wifi_setting.ssid[local_config.ssid_len] = '\0'; - wifi_setting.channel = local_config.channel; - wifi_setting.security_type = local_config.security_type; - if(local_config.password_len > 32) - local_config.password_len = 32; - memcpy(wifi_setting.password, local_config.password, local_config.password_len); - wifi_setting.password[local_config.password_len] = '\0'; - } - else - { - LoadWifiSetting(); - } -} - -int StoreApInfo() -{ - rtw_wifi_config_t wifi_config; - uint32_t address; -#ifdef STM32F10X_XL - address = 0x08080000; //bank2 domain -#else - uint16_t sector_nb = FLASH_Sector_11; - address = flash_SectorAddress(sector_nb); -#endif - // clean wifi_config first - memset(&wifi_config, 0x00, sizeof(rtw_wifi_config_t)); - - wifi_config.boot_mode = 0x77665502; - memcpy(wifi_config.ssid, wifi_setting.ssid, strlen((char*)wifi_setting.ssid)); - wifi_config.ssid_len = strlen((char*)wifi_setting.ssid); - wifi_config.security_type = wifi_setting.security_type; - memcpy(wifi_config.password, wifi_setting.password, strlen((char*)wifi_setting.password)); - wifi_config.password_len= strlen((char*)wifi_setting.password); - wifi_config.channel = wifi_setting.channel; - - printf("\n\rWritting boot mode 0x77665502 and Wi-Fi setting to flash ..."); -#ifdef STM32F10X_XL - FLASH_ErasePage(address); -#else - flash_EraseSector(sector_nb); -#endif - flash_Wrtie(address, (char *)&wifi_config, sizeof(rtw_wifi_config_t)); - - return 0; -} - - -#else - -void LoadWifiConfig() -{ - rtw_wifi_config_t local_config; - local_config.boot_mode = 0; -#ifdef USE_FLASH_EEP - if(flash_read_cfg((uint8_t *)(&local_config), FEEP_ID_WIFI_AP_CFG, sizeof(rtw_wifi_config_t)) >= sizeof(rtw_wifi_config_t)) { - printf("%s: Read from FLASH!\n", __FUNCTION__); - printf("%s: local_config.boot_mode=0x%x\n", __FUNCTION__, local_config.boot_mode); - printf("%s: local_config.ssid=%s\n", __FUNCTION__, local_config.ssid); - printf("%s: local_config.channel=%d\n", __FUNCTION__, local_config.channel); - printf("%s: local_config.security_type=%d\n", __FUNCTION__, local_config.security_type); - printf("%s: local_config.password=%s\n", __FUNCTION__, local_config.password); - } - if(local_config.boot_mode == 0x77665502) { - wifi_setting.mode = RTW_MODE_AP; - if(local_config.ssid_len > 32) - local_config.ssid_len = 32; - memcpy(wifi_setting.ssid, local_config.ssid, local_config.ssid_len); - wifi_setting.ssid[local_config.ssid_len] = '\0'; - wifi_setting.channel = local_config.channel; - if(local_config.security_type == 1) - wifi_setting.security_type = RTW_SECURITY_WPA2_AES_PSK; - else - wifi_setting.security_type = RTW_SECURITY_OPEN; - if(local_config.password_len > 32) - local_config.password_len = 32; - memcpy(wifi_setting.password, local_config.password, local_config.password_len); - wifi_setting.password[local_config.password_len] = '\0'; - } - else { - LoadWifiSetting(); - } - -#else - flash_t flash; - uint32_t address; - address = DATA_SECTOR; - - - //memset(&local_config,0,sizeof(rtw_wifi_config_t)); - printf("\r\nLoadWifiConfig(): Read from FLASH!\n"); - // flash_Read(address, &local_config, sizeof(local_config)); - - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, address, sizeof(rtw_wifi_config_t),(uint8_t *)(&local_config)); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - - - printf("\r\nLoadWifiConfig(): local_config.boot_mode=0x%x\n", local_config.boot_mode); - printf("\r\nLoadWifiConfig(): local_config.ssid=%s\n", local_config.ssid); - printf("\r\nLoadWifiConfig(): local_config.channel=%d\n", local_config.channel); - printf("\r\nLoadWifiConfig(): local_config.security_type=%d\n", local_config.security_type); - printf("\r\nLoadWifiConfig(): local_config.password=%s\n", local_config.password); - - if(local_config.boot_mode == 0x77665502) - { - wifi_setting.mode = RTW_MODE_AP; - if(local_config.ssid_len > 32) - local_config.ssid_len = 32; - memcpy(wifi_setting.ssid, local_config.ssid, local_config.ssid_len); - wifi_setting.ssid[local_config.ssid_len] = '\0'; - wifi_setting.channel = local_config.channel; - if(local_config.security_type == 1) - wifi_setting.security_type = RTW_SECURITY_WPA2_AES_PSK; - else - wifi_setting.security_type = RTW_SECURITY_OPEN; - if(local_config.password_len > 32) - local_config.password_len = 32; - memcpy(wifi_setting.password, local_config.password, local_config.password_len); - wifi_setting.password[local_config.password_len] = '\0'; - } - else - { - LoadWifiSetting(); - } -#endif -} - -int StoreApInfo() -{ -#ifdef USE_FLASH_EEP - rtw_wifi_config_t wifi_config; - // clean wifi_config first - memset(&wifi_config, 0x00, sizeof(rtw_wifi_config_t)); - wifi_config.boot_mode = 0x77665502; - memcpy(wifi_config.ssid, wifi_setting.ssid, strlen((char*)wifi_setting.ssid)); - wifi_config.ssid_len = strlen((char*)wifi_setting.ssid); - wifi_config.security_type = wifi_setting.security_type; - if(wifi_setting.security_type !=0) - wifi_config.security_type = 1; - else - wifi_config.security_type = 0; - memcpy(wifi_config.password, wifi_setting.password, strlen((char*)wifi_setting.password)); - wifi_config.password_len= strlen((char*)wifi_setting.password); - wifi_config.channel = wifi_setting.channel; - printf("\n\rWritting boot mode 0x77665502 and Wi-Fi setting to flash ..."); - flash_write_cfg((uint8_t *)(&wifi_config), FEEP_ID_WIFI_AP_CFG, sizeof(wifi_config)); -#else - flash_t flash; - - rtw_wifi_config_t wifi_config; - uint32_t address; - uint32_t data,i = 0; - - // clean wifi_config first - memset(&wifi_config, 0x00, sizeof(rtw_wifi_config_t)); - - address = DATA_SECTOR; - - wifi_config.boot_mode = 0x77665502; - memcpy(wifi_config.ssid, wifi_setting.ssid, strlen((char*)wifi_setting.ssid)); - wifi_config.ssid_len = strlen((char*)wifi_setting.ssid); - wifi_config.security_type = wifi_setting.security_type; - if(wifi_setting.security_type !=0) - wifi_config.security_type = 1; - else - wifi_config.security_type = 0; - memcpy(wifi_config.password, wifi_setting.password, strlen((char*)wifi_setting.password)); - wifi_config.password_len= strlen((char*)wifi_setting.password); - wifi_config.channel = wifi_setting.channel; - printf("\n\rWritting boot mode 0x77665502 and Wi-Fi setting to flash ..."); - //printf("\n\r &wifi_config = 0x%x",&wifi_config); - - flash_read_word(&flash,address,&data); - - - if(data == ~0x0){ - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_write(&flash, address,sizeof(rtw_wifi_config_t), (uint8_t *)&wifi_config); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - }else{ - //flash_EraseSector(sector_nb); - - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_erase_sector(&flash,BACKUP_SECTOR); - for(i = 0; i < 0x1000; i+= 4){ - flash_read_word(&flash, DATA_SECTOR + i, &data); - if(i < sizeof(rtw_wifi_config_t)) - { - memcpy(&data,(char *)(&wifi_config) + i,4); - //printf("\n\r Wifi_config + %d = 0x%x",i,(void *)(&wifi_config + i)); - //printf("\n\r Data = %d",data); - } - flash_write_word(&flash, BACKUP_SECTOR + i,data); - } - flash_read_word(&flash,BACKUP_SECTOR + 68,&data); - //printf("\n\r Base + BACKUP_SECTOR + 68 wifi channel = %d",data); - //erase system data - flash_erase_sector(&flash, DATA_SECTOR); - //write data back to system data - for(i = 0; i < 0x1000; i+= 4){ - flash_read_word(&flash, BACKUP_SECTOR + i, &data); - flash_write_word(&flash, DATA_SECTOR + i,data); - } - //erase backup sector - flash_erase_sector(&flash, BACKUP_SECTOR); - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); - //flash_Wrtie(address, (char *)&wifi_config, sizeof(rtw_wifi_config_t)); - //flash_stream_write(&flash, address,sizeof(rtw_wifi_config_t), (uint8_t *)&wifi_config); - //flash_stream_read(&flash, address, sizeof(rtw_wifi_config_t),data); - //flash_stream_read(&flash, address, sizeof(rtw_wifi_config_t),data); - //printf("\n\r Base + 0x000FF000 +4 wifi config = %s",data[4]); - //printf("\n\r Base + 0x000FF000 +71 wifi channel = %d",data[71]); -#endif - return 0; -} - -int EraseApinfo() { -#ifdef USE_FLASH_EEP - flash_write_cfg(NULL, FEEP_ID_WIFI_AP_CFG, 0); -#else - flash_t flash; - uint32_t address; - - address = DATA_SECTOR; - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_erase_sector(&flash, address); - device_mutex_unlock(RT_DEV_LOCK_FLASH); -#endif - return 0; -} -#endif - -#endif - -static void RestartSoftAP() -{ - //printf("\r\nRestartAP: ssid=%s", wifi_setting.ssid); - //printf("\r\nRestartAP: ssid_len=%d", strlen((char*)wifi_setting.ssid)); - //printf("\r\nRestartAP: security_type=%d", wifi_setting.security_type); - //printf("\r\nRestartAP: password=%s", wifi_setting.password); - //printf("\r\nRestartAP: password_len=%d", strlen((char*)wifi_setting.password)); - //printf("\r\nRestartAP: channel=%d\n", wifi_setting.channel); - wifi_restart_ap(wifi_setting.ssid, - wifi_setting.security_type, - wifi_setting.password, -// strlen((char*)wifi_setting.ssid), -// strlen((char*)wifi_setting.password), - wifi_setting.channel); -} - - -u32 web_atoi(char* s) -{ - int num=0,flag=0; - int i; - - for(i=0;i<=strlen(s);i++) - { - if(s[i] >= '0' && s[i] <= '9') - num = num * 10 + s[i] -'0'; - else if(s[0] == '-' && i==0) - flag =1; - else - break; - } - - if(flag == 1) - num = num * -1; - - return(num); -} - -static void CreateSsidTableItem(char *pbuf, u8_t *ssid, u8_t ssid_len) -{ - char local_ssid[MAX_SOFTAP_SSID_LEN+1]; - - if(ssid_len > MAX_SOFTAP_SSID_LEN) - ssid_len = MAX_SOFTAP_SSID_LEN; - memcpy(local_ssid, ssid, ssid_len); - local_ssid[ssid_len] = '\0'; - -#if USE_DIV_CSS - sprintf(pbuf, "
SoftAP SSID:
" \ - "
", - local_ssid); -#else - sprintf(pbuf, "" - "" - "SoftAP SSID:
" - "" - "" - "
" - "" - "", - local_ssid); - -#endif - //printf("\r\nstrlen(SsidTableItem)=%d\n", strlen(pbuf)); -} - -static void CreateSecTypeTableItem(char *pbuf, u32_t sectype) -{ - u8_t flag[2] = {0, 0}; - - if(sectype == RTW_SECURITY_OPEN) - flag[0] = 1; - else if(sectype == RTW_SECURITY_WPA2_AES_PSK) - flag[1] = 1; - else - return; - -#if USE_DIV_CSS - sprintf(pbuf, "
Security Type:
"\ - "
", - flag[0]?"selected":"", - flag[1]?"selected":""); -#else - sprintf(pbuf, "" - "" - "Security Type:
" - "" - "" - "" - "" - "", - flag[0]?"selected":"", - flag[1]?"selected":""); - - -#endif - - //printf("\r\nstrlen(SecTypeTableItem)=%d\n", strlen(pbuf)); -} - -static void CreatePasswdTableItem(char *pbuf, u8_t *password, u8_t passwd_len) -{ - char local_passwd[MAX_PASSWORD_LEN+1]; - - if(passwd_len > MAX_PASSWORD_LEN) - passwd_len = MAX_PASSWORD_LEN; - if(passwd_len > 0) - { - memcpy(local_passwd, password, passwd_len); - local_passwd[passwd_len] = '\0'; - } - -#if USE_DIV_CSS - - sprintf(pbuf, "
Password:
"\ - "
"\ - ""\ - "
", - passwd_len?local_passwd:""); -#else - sprintf(pbuf, "" - "" - "Password:
" - "" - "" - "
" - "" - "", - passwd_len?local_passwd:""); - - -#endif - - - //printf("\r\nstrlen(passwordTableItem)=%d\n", strlen(pbuf)); -} - -static void CreateChannelTableItem(char *pbuf, u8_t channel) -{ - u8_t flag[MAX_CHANNEL_NUM+1] = {0}; - - if(channel > MAX_CHANNEL_NUM){ - printf("Channel(%d) is out of range!\n", channel); - channel = 1; - } - flag[channel] = 1; - -#if USE_DIV_CSS - - sprintf(pbuf, "
Channel:
" - "
", - - flag[1]?"selected":"", - flag[2]?"selected":"", - flag[3]?"selected":"", - flag[4]?"selected":"", - flag[5]?"selected":"", - flag[6]?"selected":"", - flag[7]?"selected":"", - flag[8]?"selected":"", - flag[9]?"selected":"", - flag[10]?"selected":"", - flag[11]?"selected":""); -#else - sprintf(pbuf, "" - "" - "Channel:
" - "" - "" - "" - "" - "", - flag[1]?"selected":"", - flag[2]?"selected":"", - flag[3]?"selected":"", - flag[4]?"selected":"", - flag[5]?"selected":"", - flag[6]?"selected":"", - flag[7]?"selected":"", - flag[8]?"selected":"", - flag[9]?"selected":"", - flag[10]?"selected":"", - flag[11]?"selected":""); - - -#endif - - //printf("\r\nstrlen(ChannelTableItem)=%d\n", strlen(pbuf)); -} - -static void GenerateIndexHtmlPage(portCHAR* cDynamicPage, portCHAR *LocalBuf) -{ - /* Generate the page index.html... - ... First the page header. */ - strcpy( cDynamicPage, webHTML_HEAD_START ); - - /* Add script */ - strcat( cDynamicPage, onChangeSecType ); - strcat( cDynamicPage, onSubmitForm); -#if USE_DIV_CSS - /* add css */ - strcat( cDynamicPage, webHTML_CSS); - - strcat( cDynamicPage, webHTML_TITLE); -#endif - /* Add Body start */ - strcat( cDynamicPage, webHTML_BODY_START ); - - /* Add SSID */ - CreateSsidTableItem(LocalBuf, wifi_setting.ssid, strlen((char*)wifi_setting.ssid)); - strcat( cDynamicPage, LocalBuf ); - - /* Add SECURITY TYPE */ - CreateSecTypeTableItem(LocalBuf, wifi_setting.security_type); - strcat( cDynamicPage, LocalBuf ); - - /* Add PASSWORD */ - CreatePasswdTableItem(LocalBuf, wifi_setting.password, strlen((char*)wifi_setting.password)); - strcat( cDynamicPage, LocalBuf ); - - /* Add CHANNEL */ - CreateChannelTableItem(LocalBuf, wifi_setting.channel); - strcat( cDynamicPage, LocalBuf ); - - /* ... Finally the page footer. */ - strcat( cDynamicPage, webHTML_END ); - //printf("\r\nGenerateIndexHtmlPage(): %s\n", cDynamicPage); - printf("\r\nGenerateIndexHtmlPage Len: %d\n", strlen( cDynamicPage )); -} - -static void GenerateWaitHtmlPage(portCHAR* cDynamicPage) -{ - /* Generate the dynamic page... - ... First the page header. */ - strcpy( cDynamicPage, webWaitHTML_START ); - - /* ... Finally the page footer. */ - strcat( cDynamicPage, webWaitHTML_END); - - //printf("\r\nGenerateWaitHtmlPage(): %s\n", cDynamicPage); - //printf("\r\nGenerateWaitHtmlPage Len: %d\n", strlen( cDynamicPage )); -} - - - -static void http_translate_url_encode(char *ptr) -{ - - char *data = ptr; - char tmp_data[3] = {0}; - char outdata[33] = {0}; - int buffer; - char *outdata_ptr = outdata; - - while (*data != '\0') { - - if (*data == '%') { - if ((*(data + 1) != 0) && (*(data + 2) != 0)) { - tmp_data[0] = *(data + 1); - tmp_data[1] = *(data + 2); - sscanf(tmp_data, "%x", &buffer); - *outdata_ptr = (char)buffer; - - /* destroy data */ - *data = 0; - *(data+1) = 0; - *(data+2) = 0; - - data += 2; - outdata_ptr++; - } - - } else { - *outdata_ptr = *data; - if (*data == '+') - *outdata_ptr = ' '; - outdata_ptr++; - } - data++; - } - strcpy(ptr, outdata); - -} - -static u8_t ProcessPostMessage(struct netbuf *pxRxBuffer, portCHAR *LocalBuf) -{ - struct pbuf *p; - portCHAR *pcRxString, *ptr; - unsigned portSHORT usLength; - u8_t bChanged = 0; - rtw_security_t secType; - u8_t channel; - u8_t len = 0; - - pcRxString = LocalBuf; - p = pxRxBuffer->p; - usLength = p->tot_len; - //printf("\r\n !POST!p->tot_len =%d p->len=%d\n", p->tot_len, p->len); - while(p) - { - memcpy(pcRxString, p->payload, p->len); - pcRxString += p->len; - p = p->next; - } - pcRxString = LocalBuf; - pcRxString[usLength] = '\0'; - //printf("\r\n usLength=%d pcRxString = %s\n", usLength, pcRxString); - - ptr = (char*)strstr(pcRxString, "Ssid="); - if(ptr) - { - //printf("ssid passed = %s\n", ptr); - pcRxString = (char*)strstr(ptr, "&"); - *pcRxString++ = '\0'; - ptr += 5; - http_translate_url_encode(ptr); - if(strcmp((char*)wifi_setting.ssid, ptr)) - { - bChanged = 1; - len = strlen(ptr); - if(len > MAX_SOFTAP_SSID_LEN){ - len = MAX_SOFTAP_SSID_LEN; - ptr[len] = '\0'; - } - strcpy((char*)wifi_setting.ssid, ptr); - } - } - - - printf("\r\n get wifi_config.ssid = %s\n", wifi_setting.ssid); - ptr = (char*)strstr(pcRxString, "Security+Type="); - if(ptr) - { - pcRxString = (char*)strstr(ptr, "&"); - *pcRxString++ = '\0'; - ptr += 14; - if(!strcmp(ptr, "open")) - secType = RTW_SECURITY_OPEN; - else if(!strcmp(ptr, "wpa2-aes")) - secType = RTW_SECURITY_WPA2_AES_PSK; - else - secType = RTW_SECURITY_OPEN; - if(wifi_setting.security_type != secType) - { - bChanged = 1; - wifi_setting.security_type = secType; - } - } - - //printf("\r\n wifi_config.security_type = %d\n", wifi_setting.security_type); - if(wifi_setting.security_type > RTW_SECURITY_OPEN) - { - ptr = (char*)strstr(pcRxString, "Password="); - if(ptr) - { - pcRxString = (char*)strstr(ptr, "&"); - *pcRxString++ = '\0'; - ptr += 9; - if(strcmp((char*)wifi_setting.password, ptr)) - { - bChanged = 1; - len = strlen(ptr); - if(len > MAX_PASSWORD_LEN){ - len = MAX_PASSWORD_LEN; - ptr[len] = '\0'; - } - strcpy((char*)wifi_setting.password, ptr); - } - } - //printf("\r\n wifi_config.password = %s\n", wifi_setting.password); - } - ptr = (char*)strstr(pcRxString, "Channel="); - if(ptr) - { - ptr += 8; - channel = web_atoi(ptr); - if((channel>MAX_CHANNEL_NUM)||(channel < 1)) - channel = 1; - if(wifi_setting.channel !=channel) - { - bChanged = 1; - wifi_setting.channel = channel; - } - } - //printf("\r\n wifi_config.channel = %d\n", wifi_setting.channel); - - return bChanged; -} - -struct netconn *pxHTTPListener = NULL; -static void vProcessConnection( struct netconn *pxNetCon ) -{ - static portCHAR cDynamicPage[webMAX_PAGE_SIZE]; - struct netbuf *pxRxBuffer, *pxRxBuffer1 = NULL; - portCHAR *pcRxString; - unsigned portSHORT usLength; - static portCHAR LocalBuf[LOCAL_BUF_SIZE]; - u8_t bChanged = 0; - int ret_recv = ERR_OK; - int ret_accept = ERR_OK; - char *ptr = NULL; - - /* Load WiFi Setting*/ - LoadWifiSetting(); - - /* We expect to immediately get data. */ - port_netconn_recv( pxNetCon , pxRxBuffer, ret_recv); - - if( pxRxBuffer != NULL && ret_recv == ERR_OK) - { - /* Where is the data? */ - netbuf_data( pxRxBuffer, ( void * )&pcRxString, &usLength ); - - //printf("\r\nusLength=%d pcRxString = \n%s\n", usLength, pcRxString); - /* Is this a GET? We don't handle anything else. */ - if( !strncmp( pcRxString, "GET", 3 ) ) - { - //printf("\r\nusLength=%d pcRxString=%s \n", usLength, pcRxString); - //pcRxString = cDynamicPage; - - /* Write out the HTTP OK header. */ - netconn_write( pxNetCon, webHTTP_OK, ( u16_t ) strlen( webHTTP_OK ), NETCONN_COPY ); - - /* Generate index.html page. */ - GenerateIndexHtmlPage(cDynamicPage, LocalBuf); - - /* Write out the dynamically generated page. */ - netconn_write( pxNetCon, cDynamicPage, ( u16_t ) strlen( cDynamicPage ), NETCONN_COPY ); - } - else if(!strncmp( pcRxString, "POST", 4 ) ) - { - /* Write out the HTTP OK header. */ - netconn_write( pxNetCon, webHTTP_OK, ( u16_t ) strlen( webHTTP_OK ), NETCONN_COPY ); - - bChanged = ProcessPostMessage(pxRxBuffer, LocalBuf); - if(bChanged == 0){ - port_netconn_recv( pxNetCon , pxRxBuffer1, ret_recv); - if(pxRxBuffer != NULL && ret_recv == ERR_OK){ - bChanged = ProcessPostMessage(pxRxBuffer1, LocalBuf); - netbuf_delete( pxRxBuffer1 ); - } - } - if(bChanged) - { - GenerateWaitHtmlPage(cDynamicPage); - - /* Write out the generated page. */ - netconn_write( pxNetCon, cDynamicPage, ( u16_t ) strlen( cDynamicPage ), NETCONN_COPY ); - -#if CONFIG_READ_FLASH - StoreApInfo(); -#endif - } - else - { - /* Generate index.html page. */ - GenerateIndexHtmlPage(cDynamicPage, LocalBuf); - - /* Write out the generated page. */ - netconn_write( pxNetCon, cDynamicPage, ( u16_t ) strlen( cDynamicPage ), NETCONN_COPY ); - } - } - netbuf_delete( pxRxBuffer ); - } - netconn_close( pxNetCon ); - - if(bChanged) - { - struct netconn *pxNewConnection; - vTaskDelay(200/portTICK_RATE_MS); - //printf("\r\n%d:before restart ap\n", xTaskGetTickCount()); - RestartSoftAP(); - //printf("\r\n%d:after restart ap\n", xTaskGetTickCount()); - pxHTTPListener->recv_timeout = 1; - port_netconn_accept( pxHTTPListener , pxNewConnection, ret_accept); - if( pxNewConnection != NULL && ret_accept == ERR_OK) - { - //printf("\r\n%d: got a conn\n", xTaskGetTickCount()); - netconn_close( pxNewConnection ); - while( netconn_delete( pxNewConnection ) != ERR_OK ) - { - vTaskDelay( webSHORT_DELAY ); - } - } - //printf("\r\n%d:end\n", xTaskGetTickCount()); - pxHTTPListener->recv_timeout = 0; - } -} - -/*------------------------------------------------------------*/ -xTaskHandle webs_task = NULL; -xSemaphoreHandle webs_sema = NULL; -u8_t webs_terminate = 0; -void vBasicWEBServer( void *pvParameters ) -{ - struct netconn *pxNewConnection; - //struct ip_addr xIpAddr, xNetMast, xGateway; - extern err_t ethernetif_init( struct netif *netif ); - int ret = ERR_OK; - /* Parameters are not used - suppress compiler error. */ - ( void )pvParameters; - - /* Create a new tcp connection handle */ - pxHTTPListener = netconn_new( NETCONN_TCP ); - ip_set_option(pxHTTPListener->pcb.ip, SOF_REUSEADDR); - netconn_bind( pxHTTPListener, NULL, webHTTP_PORT ); - netconn_listen( pxHTTPListener ); - -#if CONFIG_READ_FLASH - /* Load wifi_config */ - LoadWifiConfig(); - RestartSoftAP(); -#endif - //printf("\r\n-0\n"); - - /* Loop forever */ - for( ;; ) - { - if(webs_terminate) - break; - - //printf("\r\n%d:-1\n", xTaskGetTickCount()); - /* Wait for connection. */ - port_netconn_accept( pxHTTPListener , pxNewConnection, ret); - //printf("\r\n%d:-2\n", xTaskGetTickCount()); - - if( pxNewConnection != NULL && ret == ERR_OK) - { - /* Service connection. */ - vProcessConnection( pxNewConnection ); - while( netconn_delete( pxNewConnection ) != ERR_OK ) - { - vTaskDelay( webSHORT_DELAY ); - } - } - //printf("\r\n%d:-3\n", xTaskGetTickCount()); - } - //printf("\r\n-4\n"); - if(pxHTTPListener) - { - netconn_close(pxHTTPListener); - netconn_delete(pxHTTPListener); - pxHTTPListener = NULL; - } - - //printf("\r\nExit Web Server Thread!\n"); - xSemaphoreGive(webs_sema); -} - -#define STACKSIZE 512 -void start_web_server() -{ - printf("\r\nWEB:Enter start web server!\n"); - webs_terminate = 0; - if(webs_task == NULL) - { - if(xTaskCreate(vBasicWEBServer, (const char *)"web_server", STACKSIZE, NULL, tskIDLE_PRIORITY + 1, &webs_task) != pdPASS) - printf("\n\rWEB: Create webserver task failed!\n"); - } - if(webs_sema == NULL) - { - webs_sema = xSemaphoreCreateCounting(0xffffffff, 0); //Set max count 0xffffffff - } - //printf("\r\nWEB:Exit start web server!\n"); -} - -void stop_web_server() -{ - //printf("\r\nWEB:Enter stop web server!\n"); - webs_terminate = 1; - if(pxHTTPListener) - netconn_abort(pxHTTPListener); - if(webs_sema) - { - if(xSemaphoreTake(webs_sema, 15 * configTICK_RATE_HZ) != pdTRUE) - { - if(pxHTTPListener) - { - netconn_close(pxHTTPListener); - netconn_delete(pxHTTPListener); - pxHTTPListener = NULL; - } - printf("\r\nWEB: Take webs sema(%p) failed!\n", webs_sema); - } - vSemaphoreDelete(webs_sema); - webs_sema = NULL; - } - if(webs_task) - { - vTaskDelete(webs_task); - webs_task = NULL; - } - printf("\r\nWEB:Exit stop web server!\n"); -} - -#endif // #if CONFIG_WEBSERVER diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/xml.c b/Firmware/RTLGDB/USDK/component/common/utilities/xml.c deleted file mode 100644 index 934e304..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/xml.c +++ /dev/null @@ -1,1376 +0,0 @@ -/* -Author: Alex Fang - -Tree Structure - root root - | ^ ^ - child | | - | parent parent - v | | -NULL<-prev-child1-next-><-prev-child2-next->NULL -*/ - -#include "platform/platform_stdlib.h" -#include "FreeRTOS.h" -#include "xml.h" - -static struct xml_node *_xml_new_element(char *prefix, char *name, char *uri, char *attr); - -char *xml_strstr(const char *str1, const char *str2) { - char *a, *b; - - /* First scan quickly through the two strings looking for a - * single-character match. When it's found, then compare the - * rest of the substring. - */ - - b = (char *)str2; - if (*b == 0) { - return (char *)str1; - } - for ( ; *str1 != 0; str1 += 1) { - if (*str1 != *b) { - continue; - } - a = (char *)str1; - while (1) { - if (*b == 0) { - return (char *)str1; - } - if (*a++ != *b++) { - break; - } - } - b = (char *)str2; - } - return (char *) 0; -} - -static void *xml_malloc(unsigned int size) -{ - return pvPortMalloc(size); -} - -void xml_free(void *buf) -{ - vPortFree(buf); -} - -static char *str_strip(char *str, unsigned int str_len) -{ - char *front, *rear; - char *strip = NULL; - int strip_len; - - if(!str || (str_len <= 0)) - return NULL; - - for(front = str; front < (str + str_len); front ++) - if(*front != ' ') break; - - if(front == (str + str_len)) - return NULL; - - for(rear = (str + str_len - 1); rear >= front; rear --) - if(*rear != ' ') break; - - if(front == rear) { - strip_len = 1; - strip = (char *) xml_malloc(strip_len + 1); - memcpy(strip, front, strip_len); - strip[strip_len] = '\0'; - } - else { - strip_len = rear + 1 - front; - strip = (char *) xml_malloc(strip_len + 1); - memcpy(strip, front, strip_len); - strip[strip_len] = '\0'; - } - - return strip; -} - -/* TAG Format: - * STag ::= '<' Name (S Attribute)* S? '>' - * ETag ::= '' - * EmptyElemTag ::= '<' Name (S Attribute)* S? '/>' - */ -static void _parse_tag(char *tag, char **prefix, char **name, char **uri, char **attr) -{ - char *prefix_char, *ns_tag, *ns_front; - int have_prefix = 0; - int have_uri = 0; - - prefix_char = strchr(tag, ':'); - - if(prefix_char) { - char *tag_sep = strchr(tag, ' '); - - if(!tag_sep) - have_prefix = 1; - else if(prefix_char < tag_sep) - have_prefix = 1; - } - - if(have_prefix) { - *prefix = str_strip(tag, prefix_char - tag); - ns_tag = (char *) xml_malloc(strlen(" xmlns:") + strlen(*prefix) + 1); - sprintf(ns_tag, " xmlns:%s", *prefix); - ns_front = xml_strstr(tag, ns_tag); - xml_free(ns_tag); - } - else { - *prefix = NULL; - ns_tag = " xmlns"; - ns_front = xml_strstr(tag, ns_tag); - } - - if(ns_front) - have_uri = 1; - - if(have_prefix && have_uri) { - char *uri_front, *uri_rear, *tag_sep, ns_sep; - int uri_len; - - tag_sep = strchr(prefix_char + 1, ' '); - *name = str_strip(prefix_char + 1, tag_sep - (prefix_char + 1)); - - if(attr) - *attr = str_strip(tag_sep, tag + strlen(tag) - tag_sep); - - if(*(strchr(ns_front, '=') + 1) == '\'') - ns_sep = '\''; - else - ns_sep = '\"'; - - uri_front = strchr(ns_front, ns_sep) + 1; - uri_rear = strchr(uri_front, ns_sep); - uri_len = uri_rear - uri_front; - *uri = (char *) xml_malloc(uri_len + 1); - memcpy(*uri, uri_front, uri_len); - (*uri)[uri_len] = '\0'; - } - else if(have_prefix) { - char *tag_sep; - - *uri = NULL; - tag_sep = strchr(prefix_char + 1, ' '); - - if(tag_sep) { - *name = str_strip(prefix_char + 1, tag_sep - (prefix_char + 1)); - - if(attr) - *attr = str_strip(tag_sep, tag + strlen(tag) - tag_sep); - } - else { - *name = str_strip(prefix_char + 1, tag + strlen(tag) - (prefix_char + 1)); - - if(attr) - *attr = NULL; - } - } - else if(have_uri) { - char *uri_front, *uri_rear, *tag_sep, ns_sep; - int uri_len; - - tag_sep = strchr(tag, ' '); - *name = str_strip(tag, tag_sep - tag); - - if(attr) - *attr = str_strip(tag_sep, tag + strlen(tag) - tag_sep); - - if(*(strchr(ns_front, '=') + 1) == '\'') - ns_sep = '\''; - else - ns_sep = '\"'; - - uri_front = strchr(ns_front, ns_sep) + 1; - uri_rear = strchr(uri_front, ns_sep); - uri_len = uri_rear - uri_front; - *uri = (char *) xml_malloc(uri_len + 1); - memcpy(*uri, uri_front, uri_len); - (*uri)[uri_len] = '\0'; - } - else { - char *tag_sep; - - *uri = NULL; - tag_sep = strchr(tag, ' '); - - if(tag_sep) { - *name = str_strip(tag, tag_sep - tag); - - if(attr) - *attr = str_strip(tag_sep, tag + strlen(tag) - tag_sep); - } - else { - *name = str_strip(tag, strlen(tag)); - - if(attr) - *attr = NULL; - } - } -} - -static void parse_tag(char *tag, char **prefix, char **name, char **uri) -{ - _parse_tag(tag, prefix, name, uri, NULL); -} - -int xml_doc_name(char *doc_buf, int doc_len, char **doc_prefix, char **doc_name, char **doc_uri) -{ - char *xml_buf, *cur_pos, *tag_front, *tag_rear; - char *start_tag, *end_tag1, *end_tag2; - int tag_len, ret = -1; - - xml_buf = (char *) xml_malloc(doc_len + 1); - memcpy(xml_buf, doc_buf, doc_len); - xml_buf[doc_len] = '\0'; - - cur_pos = xml_buf; - - while(cur_pos < (xml_buf + doc_len)) { - if((tag_front = strchr(cur_pos, '<')) != NULL) { - tag_front ++; - - if((tag_rear = strchr(tag_front, '>')) != NULL) { - char *prefix = NULL, *name = NULL, *uri = NULL; - - //Element without content - if(*(tag_rear - 1) == '/') { - tag_len = tag_rear - 1 - tag_front; - start_tag = (char *) xml_malloc(tag_len + 1); - memcpy(start_tag, tag_front, tag_len); - start_tag[tag_len] = '\0'; - parse_tag(start_tag, &prefix, &name, &uri); - xml_free(start_tag); - *doc_name = name; - *doc_prefix = prefix; - *doc_uri = uri; - ret = 0; - cur_pos = xml_buf + doc_len; - } - //Element with content - else { - tag_len = tag_rear - tag_front; - start_tag = (char *) xml_malloc(tag_len + 1); - memcpy(start_tag, tag_front, tag_len); - start_tag[tag_len] = '\0'; - parse_tag(start_tag, &prefix, &name, &uri); - xml_free(start_tag); - - if(prefix) { - end_tag1 = (char *) xml_malloc(strlen(prefix) + strlen(name) + 5); - sprintf(end_tag1, "", prefix, name); - end_tag2 = (char *) xml_malloc(strlen(prefix) + strlen(name) + 5); - sprintf(end_tag2, "", name); - end_tag2 = (char *) xml_malloc(strlen(name) + 4); - sprintf(end_tag2, "')) != NULL) { - char *doc_front, *doc_rear, *start_tag, *end_tag1, *end_tag2; - char *prefix = NULL, *name = NULL, *uri = NULL, *attr = NULL; - int tag_len; - - //Element without content - if(*(tag_rear - 1) == '/') { - doc_front = tag_rear + 1; - tag_len = tag_rear - 1 - tag_front; - start_tag = (char *) xml_malloc(tag_len + 1); - memcpy(start_tag, tag_front, tag_len); - start_tag[tag_len] = '\0'; - _parse_tag(start_tag, &prefix, &name, &uri, &attr); - node = _xml_new_element(prefix, name, uri, attr); - - if(root) { - xml_add_child(root, node); - cur_pos = doc_front; - } - else { - root = node; - cur_pos = xml_buf + doc_len; - } - } - //Element with content - else { - doc_front = tag_rear + 1; - tag_len = tag_rear - tag_front; - start_tag = (char *) xml_malloc(tag_len + 1); - memcpy(start_tag, tag_front, tag_len); - start_tag[tag_len] = '\0'; - _parse_tag(start_tag, &prefix, &name, &uri, &attr); - - if(prefix) { - end_tag1 = (char *) xml_malloc(strlen(prefix) + strlen(name) + 5); - sprintf(end_tag1, "", prefix, name); - end_tag2 = (char *) xml_malloc(strlen(prefix) + strlen(name) + 5); - sprintf(end_tag2, "", name); - end_tag2 = (char *) xml_malloc(strlen(name) + 4); - sprintf(end_tag2, "') + 1; - } - else { - root = node; - _xml_parse_doc(doc_front, doc_rear - doc_front, node); - cur_pos = xml_buf + doc_len; - } - } - else { - cur_pos = doc_front; - } - - xml_free(end_tag1); - xml_free(end_tag2); - } - - xml_free(start_tag); - xml_free(name); - if(prefix) xml_free(prefix); - if(uri) xml_free(uri); - if(attr) xml_free(attr); - } - else { - if(root && !root->child && (strlen(cur_pos) > 0)) { - node = xml_new_text(cur_pos); - xml_add_child(root, node); - } - - cur_pos = xml_buf + doc_len; - } - } - else { - if(root && !root->child && (strlen(cur_pos) > 0)) { - node = xml_new_text(cur_pos); - xml_add_child(root, node); - } - - cur_pos = xml_buf + doc_len; - } - } - - xml_free(xml_buf); - - return root; -} - -/* Note: xml_parse_doc can handle attribute only for namespace */ -struct xml_node *xml_parse_doc(char *doc_buf, int doc_len, char *doc_prefix, char *doc_name, char *doc_uri) -{ - struct xml_node *root = NULL; - char *xml_buf, *start_tag, *end_tag, *empty_tag, *front, *rear; - - xml_buf = (char *) xml_malloc(doc_len + 1); - memcpy(xml_buf, doc_buf, doc_len); - xml_buf[doc_len] = '\0'; - - if(doc_prefix && doc_uri) { - start_tag = (char *) xml_malloc(2 * strlen(doc_prefix) + strlen(doc_name) + strlen(doc_uri) + 14); - sprintf(start_tag, "<%s:%s xmlns:%s=\"%s\">", doc_prefix, doc_name, doc_prefix, doc_uri); - empty_tag = (char *) xml_malloc(2 * strlen(doc_prefix) + strlen(doc_name) + strlen(doc_uri) + 15); - sprintf(empty_tag, "<%s:%s xmlns:%s=\"%s\"/>", doc_prefix, doc_name, doc_prefix, doc_uri); - - } - else if(doc_prefix) { - start_tag = (char *) xml_malloc(strlen(doc_prefix) + strlen(doc_name) + 4); - sprintf(start_tag, "<%s:%s>", doc_prefix, doc_name); - empty_tag = (char *) xml_malloc(strlen(doc_prefix) + strlen(doc_name) + 5); - sprintf(empty_tag, "<%s:%s/>", doc_prefix, doc_name); - } - else if(doc_uri) { - start_tag = (char *) xml_malloc(strlen(doc_name) + strlen(doc_uri) + 12); - sprintf(start_tag, "<%s xmlns=\"%s\">", doc_name, doc_uri); - empty_tag = (char *) xml_malloc(strlen(doc_name) + strlen(doc_uri) + 13); - sprintf(empty_tag, "<%s xmlns=\"%s\"/>", doc_name, doc_uri); - } - else { - start_tag = (char *) xml_malloc(strlen(doc_name) + 3); - sprintf(start_tag, "<%s>", doc_name); - empty_tag = (char *) xml_malloc(strlen(doc_name) + 4); - sprintf(empty_tag, "<%s/>", doc_name); - } - - if(doc_prefix) { - end_tag = (char *) xml_malloc(strlen(doc_prefix) + strlen(doc_name) + 5); - sprintf(end_tag, "", doc_prefix, doc_name); - } - else { - end_tag = (char *) xml_malloc(strlen(doc_name) + 4); - sprintf(end_tag, "", doc_name); - } - - //Root element with content - if((front = xml_strstr(xml_buf, start_tag)) != NULL) { - front += strlen(start_tag); - - if((rear = xml_strstr(front, end_tag)) != NULL) { - int xml_len = rear - front; - - root = xml_new_element(doc_prefix, doc_name, doc_uri); - _xml_parse_doc(front, xml_len, root); - } - } - //Root element without content - else if((front = xml_strstr(xml_buf, empty_tag)) != NULL) { - root = xml_new_element(doc_prefix, doc_name, doc_uri); - } - - xml_free(start_tag); - xml_free(end_tag); - xml_free(empty_tag); - xml_free(xml_buf); - - return root; -} - -struct xml_node *xml_parse(char *doc_buf, int doc_len) -{ - char *proc_inst, *comment, *pos, *prolog_end; - - /* Remove XML Prolog */ - pos = doc_buf; - while(pos < (doc_buf + doc_len)) { - if((proc_inst = xml_strstr(pos, "') + 1; - } - else { - proc_inst = pos; - break; - } - } - pos = doc_buf; - while(pos < (doc_buf + doc_len)) { - if((comment = xml_strstr(pos, "') + 1; - } - else { - comment = pos; - break; - } - } - if(proc_inst > comment) - prolog_end = proc_inst; - else - prolog_end = comment; - - return _xml_parse_doc(prolog_end, doc_buf + doc_len - prolog_end, NULL); -} - -static struct xml_node *xml_new_node(void) -{ - struct xml_node *node; - - node = (struct xml_node *) xml_malloc(sizeof(struct xml_node)); - memset(node, 0, sizeof(struct xml_node)); - - return node; -} - -static struct xml_node *_xml_new_element(char *prefix, char *name, char *uri, char *attr) -{ - struct xml_node *node; - - node = xml_new_node(); - node->name = (char *) xml_malloc(strlen(name) + 1); - strcpy(node->name, name); - - if(prefix) { - node->prefix = (char *) xml_malloc(strlen(prefix) + 1); - strcpy(node->prefix, prefix); - } - - if(uri) { - node->uri = (char *) xml_malloc(strlen(uri) + 1); - strcpy(node->uri, uri); - } - - if(attr) { - node->attr = (char *) xml_malloc(strlen(attr) + 1); - strcpy(node->attr, attr); - } - - return node; -} - -struct xml_node *xml_new_element(char *prefix, char *name, char *uri) -{ - struct xml_node *node; - char *attr = NULL; - - if(prefix && uri) { - attr = (char *) xml_malloc(strlen(prefix) + strlen(uri) + 10); - sprintf(attr, "xmlns:%s=\"%s\"", prefix, uri); - } - else if(uri) { - attr = (char *) xml_malloc(strlen(uri) + 9); - sprintf(attr, "xmlns=\"%s\"", uri); - } - - node = _xml_new_element(prefix, name, uri, attr); - - if(attr) - xml_free(attr); - - return node; -} - -struct xml_node *xml_new_text(char *text) -{ - struct xml_node *node; - char *text_buf; - - text_buf = (char *) xml_malloc(strlen(text) + 1); - strcpy(text_buf, text); - node = xml_new_node(); - node->text = text_buf; - - return node; -} - -int xml_is_element(struct xml_node *node) -{ - int ret = 0; - - if((node->name != NULL) && (node->text == NULL)) - ret = 1; - - return ret; -} - -int xml_is_text(struct xml_node *node) -{ - int ret = 0; - - if((node->name == NULL) && (node->text != NULL)) - ret = 1; - - return ret; -} - -static void _xml_copy_tree(struct xml_node *root, struct xml_node *parent) -{ - struct xml_node *copy = NULL; - - if(xml_is_text(root)) { - copy = xml_new_text(root->text); - } - else if(xml_is_element(root)) { - struct xml_node *child = root->child; - - copy = _xml_new_element(root->prefix, root->name, root->uri, root->attr); - - while(child) { - _xml_copy_tree(child, copy); - child = child->next; - } - } - - if(copy) - xml_add_child(parent, copy); -} - -struct xml_node* xml_copy_tree(struct xml_node *root) -{ - struct xml_node *copy = NULL; - - if(xml_is_text(root)) { - copy = xml_new_text(root->text); - } - else if(xml_is_element(root)) { - struct xml_node *child = root->child; - - copy = _xml_new_element(root->prefix, root->name, root->uri, root->attr); - - while(child) { - _xml_copy_tree(child, copy); - child = child->next; - } - } - - return copy; -} - -void xml_delete_tree(struct xml_node *root) -{ - if(root->name) - xml_free(root->name); - - if(root->text) - xml_free(root->text); - - if(root->prefix) - xml_free(root->prefix); - - if(root->uri) - xml_free(root->uri); - - if(root->attr) - xml_free(root->attr); - - while(root->child) - xml_delete_tree(root->child); - - if(root->prev) { - root->prev->next = root->next; - - if(root->next) - root->next->prev = root->prev; - } - else if(root->parent) { - root->parent->child = root->next; - - if(root->next) - root->next->prev = NULL; - } - - xml_free(root); -} - -void xml_add_child(struct xml_node *node, struct xml_node *child) -{ - if(xml_is_element(node)) { - if(node->child) { - struct xml_node *last_child = node->child; - - while(last_child->next != NULL) - last_child = last_child->next; - - last_child->next = child; - child->prev = last_child; - } - else { - node->child = child; - } - - child->parent = node; - } -} - -void xml_clear_child(struct xml_node *node) -{ - while(node->child) - xml_delete_tree(node->child); -} - -struct xml_node* xml_text_child(struct xml_node *node) -{ - struct xml_node *child = NULL; - - if(node->child) { - if(xml_is_text(node->child)) - child = node->child; - } - - return child; -} - -void xml_set_text(struct xml_node *node, char *text) -{ - if(xml_is_text(node)) { - char *text_buf = (char *) xml_malloc(strlen(text) + 1); - strcpy(text_buf, text); - xml_free(node->text); - node->text = text_buf; - } -} - -static void _xml_element_count(struct xml_node *root, char *name, int *count) -{ - if(xml_is_element(root)) { - struct xml_node *child = root->child; - - if(strcmp(root->name, name) == 0) { - (*count) ++; - } - - while(child) { - _xml_element_count(child, name, count); - child = child->next; - } - } -} - -static int xml_element_count(struct xml_node *root, char *name) -{ - int count = 0; - - _xml_element_count(root, name, &count); - - return count; -} - -static void _xml_find_element(struct xml_node *root, char *name, struct xml_node_set *node_set) -{ - if(xml_is_element(root)) { - struct xml_node *child = root->child; - - if(strcmp(root->name, name) == 0) { - node_set->node[node_set->count] = root; - node_set->count ++; - } - - while(child) { - _xml_find_element(child, name, node_set); - child = child->next; - } - } -} - -struct xml_node_set* xml_find_element(struct xml_node *root, char *name) -{ - struct xml_node_set *node_set = NULL; - int node_count; - - node_set = (struct xml_node_set *) xml_malloc(sizeof(struct xml_node_set)); - node_set->count = 0; - node_count = xml_element_count(root, name); - - if(node_count) - node_set->node = (struct xml_node **) xml_malloc(node_count * sizeof(struct xml_node *)); - else - node_set->node = NULL; - - _xml_find_element(root, name, node_set); - - return node_set; -} - -static void _xml_path_count(struct xml_node *root, char *path, int *count) -{ - if(xml_is_element(root)) { - char *front = NULL, *rear = NULL; - - if((front = strchr(path, '/')) != NULL) { - int prefix_len, name_len; - char *prefix, *name, *prefix_char; - int prefix_matched = 0, name_matched = 0; - - front ++; - prefix_char = strchr(front, ':'); - - if((rear = strchr(front, '/')) != NULL) { - if(prefix_char && (prefix_char < rear)) { - prefix_len = prefix_char - front; - prefix = (char *) xml_malloc(prefix_len + 1); - memcpy(prefix, front, prefix_len); - prefix[prefix_len] = '\0'; - - name_len = rear - (prefix_char + 1); - name = (char *) xml_malloc(name_len + 1); - memcpy(name, prefix_char + 1, name_len); - name[name_len] = '\0'; - } - else { - prefix = NULL; - name_len = rear - front; - name = (char *) xml_malloc(name_len + 1); - memcpy(name, front, name_len); - name[name_len] = '\0'; - } - - if((!prefix && !root->prefix) || - (prefix && root->prefix && (strcmp(root->prefix, prefix) == 0))) - prefix_matched = 1; - else - prefix_matched = 0; - - if(strcmp(root->name, name) == 0) - name_matched = 1; - else - name_matched = 0; - - if(prefix_matched && name_matched) { - struct xml_node *child = root->child; - - while(child) { - _xml_path_count(child, rear, count); - child = child->next; - } - } - } - else { - if(prefix_char) { - prefix_len = prefix_char - front; - prefix = (char *) xml_malloc(prefix_len + 1); - memcpy(prefix, front, prefix_len); - prefix[prefix_len] = '\0'; - - name_len = strlen(path) - (prefix_char + 1 - path); - name = (char *) xml_malloc(name_len + 1); - memcpy(name, prefix_char + 1, name_len); - name[name_len] = '\0'; - } - else { - prefix = NULL; - name_len = strlen(path) - (front - path); - name = (char *) xml_malloc(name_len + 1); - memcpy(name, front, name_len); - name[name_len] = '\0'; - } - - if((!prefix && !root->prefix) || - (prefix && root->prefix && (strcmp(root->prefix, prefix) == 0))) - prefix_matched = 1; - else - prefix_matched = 0; - - if(strcmp(root->name, name) == 0) - name_matched = 1; - else - name_matched = 0; - - if(prefix_matched && name_matched) - (*count) ++; - } - - if(prefix) xml_free(prefix); - xml_free(name); - } - } -} - -static int xml_path_count(struct xml_node *root, char *path) -{ - int count = 0; - - _xml_path_count(root, path, &count); - - return count; -} - -static void _xml_find_path(struct xml_node *root, char *path, struct xml_node_set *node_set) -{ - if(xml_is_element(root)) { - char *front = NULL, *rear = NULL; - - if((front = strchr(path, '/')) != NULL) { - int prefix_len, name_len; - char *prefix, *name, *prefix_char; - int prefix_matched = 0, name_matched = 0; - - front ++; - prefix_char = strchr(front, ':'); - - if((rear = strchr(front, '/')) != NULL) { - if(prefix_char && (prefix_char < rear)) { - prefix_len = prefix_char - front; - prefix = (char *) xml_malloc(prefix_len + 1); - memcpy(prefix, front, prefix_len); - prefix[prefix_len] = '\0'; - - name_len = rear - (prefix_char + 1); - name = (char *) xml_malloc(name_len + 1); - memcpy(name, prefix_char + 1, name_len); - name[name_len] = '\0'; - } - else { - prefix = NULL; - name_len = rear - front; - name = (char *) xml_malloc(name_len + 1); - memcpy(name, front, name_len); - name[name_len] = '\0'; - } - - if((!prefix && !root->prefix) || - (prefix && root->prefix && (strcmp(root->prefix, prefix) == 0))) - prefix_matched = 1; - else - prefix_matched = 0; - - if(strcmp(root->name, name) == 0) - name_matched = 1; - else - name_matched = 0; - - if(prefix_matched && name_matched) { - struct xml_node *child = root->child; - - while(child) { - _xml_find_path(child, rear, node_set); - child = child->next; - } - } - } - else { - if(prefix_char) { - prefix_len = prefix_char - front; - prefix = (char *) xml_malloc(prefix_len + 1); - memcpy(prefix, front, prefix_len); - prefix[prefix_len] = '\0'; - - name_len = strlen(path) - (prefix_char + 1 - path); - name = (char *) xml_malloc(name_len + 1); - memcpy(name, prefix_char + 1, name_len); - name[name_len] = '\0'; - } - else { - prefix = NULL; - name_len = strlen(path) - (front - path); - name = (char *) xml_malloc(name_len + 1); - memcpy(name, front, name_len); - name[name_len] = '\0'; - } - - if((!prefix && !root->prefix) || - (prefix && root->prefix && (strcmp(root->prefix, prefix) == 0))) - prefix_matched = 1; - else - prefix_matched = 0; - - if(strcmp(root->name, name) == 0) - name_matched = 1; - else - name_matched = 0; - - if(prefix_matched && name_matched) { - node_set->node[node_set->count] = root; - node_set->count ++; - } - } - - if(prefix) xml_free(prefix); - xml_free(name); - } - } -} - -struct xml_node_set* xml_find_path(struct xml_node *root, char *path) -{ - struct xml_node_set *node_set = NULL; - int node_count; - - node_set = (struct xml_node_set *) xml_malloc(sizeof(struct xml_node_set)); - node_set->count = 0; - node_count = xml_path_count(root, path); - - if(node_count) - node_set->node = (struct xml_node **) xml_malloc(node_count * sizeof(struct xml_node *)); - else - node_set->node = NULL; - - _xml_find_path(root, path, node_set); - - return node_set; -} - -void xml_delete_set(struct xml_node_set *node_set) -{ - if(node_set->node) - xml_free(node_set->node); - - xml_free(node_set); -} - -static int xml_tree_size(struct xml_node *root, int level, int space) -{ - int size = 0; - int next_level = (level)?(level + 1):0; - - if(xml_is_text(root)) { - size += strlen(root->text); - } - else if(xml_is_element(root)) { - int start_size, end_size; - struct xml_node *child = root->child; - int is_element_child = 0; - - if(root->prefix && root->attr) - /* */ - start_size = strlen(root->prefix) + strlen(root->name) + strlen(root->attr) + 4; - else if(root->prefix) - /* */ - start_size = strlen(root->prefix) + strlen(root->name) + 3; - else if(root->attr) - /* */ - start_size = strlen(root->name) + strlen(root->attr) + 3; - else - /* */ - start_size = strlen(root->name) + 2; - - size += start_size; - - while(child) { - if(((is_element_child = xml_is_element(child)) == 1) && level) { - size ++; /* /n */ - size += (level * space); /* space */ - } - - size += xml_tree_size(child, next_level, space); - child = child->next; - } - - if(is_element_child && level) { - size ++; /* /n */ - size += ((level - 1) * space); /* space */ - } - - if(root->prefix) - /* */ - end_size = strlen(root->prefix) + strlen(root->name) + 4; - else - /* */ - end_size = strlen(root->name) + 3; - - size += end_size; - } - - return size; -} - -static void _xml_dump_tree(struct xml_node *root, char *xml_buf, int level, int space) -{ - int next_level = (level)?(level + 1):0; - - if(xml_is_text(root)) { - strcat(xml_buf, root->text); - } - else if(xml_is_element(root)) { - struct xml_node *child = root->child; - int is_element_child = 0; - - if(root->prefix && root->attr) { - strcat(xml_buf, "<"); - strcat(xml_buf, root->prefix); - strcat(xml_buf, ":"); - strcat(xml_buf, root->name); - strcat(xml_buf, " "); - strcat(xml_buf, root->attr); - strcat(xml_buf, ">"); - } - else if(root->prefix) { - strcat(xml_buf, "<"); - strcat(xml_buf, root->prefix); - strcat(xml_buf, ":"); - strcat(xml_buf, root->name); - strcat(xml_buf, ">"); - } - else if(root->attr) { - strcat(xml_buf, "<"); - strcat(xml_buf, root->name); - strcat(xml_buf, " "); - strcat(xml_buf, root->attr); - strcat(xml_buf, ">"); - } - else { - strcat(xml_buf, "<"); - strcat(xml_buf, root->name); - strcat(xml_buf, ">"); - } - - while(child) { - if(((is_element_child = xml_is_element(child)) == 1) && level) { - char space_buf[11]; - int i; - - strcat(xml_buf, "\n"); - memset(space_buf, ' ', sizeof(space_buf)); - space_buf[space] = '\0'; - - for(i = 0; i < level; i ++) - strcat(xml_buf, space_buf); - } - - _xml_dump_tree(child, xml_buf, next_level, space); - child = child->next; - } - - if(is_element_child && level) { - char space_buf[11]; - int i; - - strcat(xml_buf, "\n"); - memset(space_buf, ' ', sizeof(space_buf)); - space_buf[space] = '\0'; - - for(i = 0; i < (level - 1); i ++) - strcat(xml_buf, space_buf); - } - - if(root->prefix) { - strcat(xml_buf, "prefix); - strcat(xml_buf, ":"); - strcat(xml_buf, root->name); - strcat(xml_buf, ">"); - } - else { - strcat(xml_buf, "name); - strcat(xml_buf, ">"); - } - } -} - -char *xml_dump_tree(struct xml_node *root) -{ - int xml_size; - char *xml_buf; - - xml_size = xml_tree_size(root, 0, 0); - xml_buf = (char *) xml_malloc(xml_size + 1); - memset(xml_buf, 0, xml_size + 1); - _xml_dump_tree(root, xml_buf, 0, 0); - - return xml_buf; -} - -char *xml_dump_tree_ex(struct xml_node *root, char *prolog, int new_line, int space) -{ - int xml_size; - char *xml_buf; - - /* Max offset of 10 for each level */ - if(space > 10) - space = 10; - - xml_size = xml_tree_size(root, 1, space); - - if(prolog && new_line) { - xml_buf = (char *) xml_malloc(strlen(prolog) + xml_size + 2); - memset(xml_buf, 0, strlen(prolog) + xml_size + 2); - sprintf(xml_buf, "%s\n", prolog); - _xml_dump_tree(root, xml_buf + strlen(prolog), new_line, space); - } - else if(prolog) { - xml_buf = (char *) xml_malloc(strlen(prolog) + xml_size + 1); - memset(xml_buf, 0, strlen(prolog) + xml_size + 1); - strcpy(xml_buf, prolog); - _xml_dump_tree(root, xml_buf + strlen(prolog), new_line, space); - } - else { - xml_buf = (char *) xml_malloc(xml_size + 1); - memset(xml_buf, 0, xml_size + 1); - _xml_dump_tree(root, xml_buf, new_line, space); - } - - return xml_buf; -} - -void xml_set_attribute(struct xml_node *node, char *attr, char *value) -{ - char *ns_tag, *new_attr; - - if(node->prefix) { - ns_tag = (char *) xml_malloc(strlen("xmlns:") + strlen(node->prefix) + 1); - sprintf(ns_tag, "xmlns:%s", node->prefix); - - if(strcmp(ns_tag, attr) == 0) { - if(node->uri) xml_free(node->uri); - node->uri = (char *) xml_malloc(strlen(value) + 1); - strcpy(node->uri, value); - } - - xml_free(ns_tag); - } - else { - ns_tag = "xmlns"; - - if(strcmp(ns_tag, attr) == 0) { - if(node->uri) xml_free(node->uri); - node->uri = (char *) xml_malloc(strlen(value) + 1); - strcpy(node->uri, value); - } - } - - /* attr="value" or attr='value' */ - new_attr = (char *) xml_malloc(strlen(attr) + strlen(value) + 4); - - if(strchr(value, '\"')) - sprintf(new_attr, "%s=\'%s\'", attr, value); - else - sprintf(new_attr, "%s=\"%s\"", attr, value); - - if(node->attr) { - char *attr1, *attr2, *attr_pos, *all_attr, *attr_p1 = NULL, *attr_p2 = NULL; - int attr_existed = 0; - - attr1 = (char *) xml_malloc(strlen(attr) + 4); - sprintf(attr1, " %s=\'", attr); - attr2 = (char *) xml_malloc(strlen(attr) + 4); - sprintf(attr2, " %s=\"", attr); - - if(((attr_pos = xml_strstr(node->attr, attr1)) != NULL) || - (xml_strstr(node->attr, attr1 + 1) == node->attr)) { - attr_existed = 1; - - if(attr_pos) { - attr_p1 = str_strip(node->attr, attr_pos - node->attr); - attr_p2 = str_strip(strchr(attr_pos + strlen(attr1), '\'') + 1, - node->attr + strlen(node->attr) - (strchr(attr_pos + strlen(attr1), '\'') + 1)); - } - else { - attr_p1 = NULL; - attr_p2 = str_strip(strchr(node->attr + strlen(attr1) - 1, '\'') + 1, - node->attr + strlen(node->attr) - (strchr(node->attr + strlen(attr1) - 1, '\'') + 1)); - } - } - else if(((attr_pos = xml_strstr(node->attr, attr2)) != NULL) || - (xml_strstr(node->attr, attr2 + 1) == node->attr)) { - attr_existed = 1; - - if(attr_pos) { - attr_p1 = str_strip(node->attr, attr_pos - node->attr); - attr_p2 = str_strip(strchr(attr_pos + strlen(attr2), '\"') + 1, - node->attr + strlen(node->attr) - (strchr(attr_pos + strlen(attr2), '\"') + 1)); - } - else { - attr_p1 = NULL; - attr_p2 = str_strip(strchr(node->attr + strlen(attr2) - 1, '\"') + 1, - node->attr + strlen(node->attr) - (strchr(node->attr + strlen(attr2) - 1, '\"') + 1)); - } - } - - if(attr_p1 && attr_p2) { - all_attr = (char *) xml_malloc(strlen(attr_p1) + strlen(new_attr) + strlen(attr_p2) + 3); - sprintf(all_attr, "%s %s %s", attr_p1, new_attr, attr_p2); - } - else if(attr_p1) { - all_attr = (char *) xml_malloc(strlen(attr_p1) + strlen(new_attr) + 2); - sprintf(all_attr, "%s %s", attr_p1, new_attr); - } - else if(attr_p2) { - all_attr = (char *) xml_malloc(strlen(new_attr) + strlen(attr_p2) + 2); - sprintf(all_attr, "%s %s", new_attr, attr_p2); - } - else if(attr_existed) { - all_attr = (char *) xml_malloc(strlen(new_attr) + 1); - sprintf(all_attr, "%s", new_attr); - } - else { - all_attr = (char *) xml_malloc(strlen(node->attr) + strlen(new_attr) + 2); - sprintf(all_attr, "%s %s", node->attr, new_attr); - } - - xml_free(attr1); - xml_free(attr2); - if(attr_p1) xml_free(attr_p1); - if(attr_p2) xml_free(attr_p2); - xml_free(new_attr); - xml_free(node->attr); - node->attr = all_attr; - } - else { - node->attr = new_attr; - } -} - -char *xml_get_attribute(struct xml_node *node, char *attr) -{ - char *value = NULL; - - if(node->attr) { - /* attr=' or attr=" */ - char *value_front, *value_rear, *attr1, *attr2, *attr_pos; - int value_len; - - attr1 = (char *) xml_malloc(strlen(attr) + 4); - sprintf(attr1, " %s=\'", attr); - attr2 = (char *) xml_malloc(strlen(attr) + 4); - sprintf(attr2, " %s=\"", attr); - - if(((attr_pos = xml_strstr(node->attr, attr1)) != NULL) || - (xml_strstr(node->attr, attr1 + 1) == node->attr)) { - if(attr_pos) - value_front = attr_pos + strlen(attr1); - else - value_front = node->attr + strlen(attr1) - 1; - - value_rear = strchr(value_front, '\''); - value_len = value_rear - value_front; - value = (char *) xml_malloc(value_len + 1); - memcpy(value, value_front, value_len); - value[value_len] = '\0'; - } - else if(((attr_pos = xml_strstr(node->attr, attr2)) != NULL) || - (xml_strstr(node->attr, attr2 + 1) == node->attr)) { - if(attr_pos) - value_front = attr_pos + strlen(attr2); - else - value_front = node->attr + strlen(attr2) - 1; - - value_rear = strchr(value_front, '\"'); - value_len = value_rear - value_front; - value = (char *) xml_malloc(value_len + 1); - memcpy(value, value_front, value_len); - value[value_len] = '\0'; - } - - xml_free(attr1); - xml_free(attr2); - } - - return value; -} - diff --git a/Firmware/RTLGDB/USDK/component/common/utilities/xml.h b/Firmware/RTLGDB/USDK/component/common/utilities/xml.h deleted file mode 100644 index 433ccbf..0000000 --- a/Firmware/RTLGDB/USDK/component/common/utilities/xml.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef _XML_H_ -#define _XML_H_ - -struct xml_node { - char *name; - char *text; - char *prefix; - char *uri; - char *attr; - struct xml_node *parent; - struct xml_node *child; - struct xml_node *prev; - struct xml_node *next; -}; - -struct xml_node_set { - int count; - struct xml_node **node; -}; - -void xml_free(void *buf); -int xml_doc_name(char *doc_buf, int doc_len, char **doc_prefix, char **doc_name, char **doc_uri); -struct xml_node *xml_parse_doc(char *doc_buf, int doc_len, char *prefix, char *doc_name, char *uri); -struct xml_node *xml_parse(char *doc_buf, int doc_len); -struct xml_node *xml_new_element(char *prefix, char *name, char *uri); -struct xml_node *xml_new_text(char *text); -int xml_is_element(struct xml_node *node); -int xml_is_text(struct xml_node *node); -struct xml_node* xml_copy_tree(struct xml_node *root); -void xml_delete_tree(struct xml_node *root); -void xml_add_child(struct xml_node *node, struct xml_node *child); -void xml_clear_child(struct xml_node *node); -struct xml_node* xml_text_child(struct xml_node *node); -void xml_set_text(struct xml_node *node, char *text); -struct xml_node_set* xml_find_element(struct xml_node *root, char *name); -struct xml_node_set* xml_find_path(struct xml_node *root, char *path); -void xml_delete_set(struct xml_node_set *node_set); -char *xml_dump_tree(struct xml_node *root); -char *xml_dump_tree_ex(struct xml_node *root, char *prolog, int new_line, int space); -void xml_set_attribute(struct xml_node *node, char *attr, char *value); -char *xml_get_attribute(struct xml_node *node, char *attr); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/media-device.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/media-device.h deleted file mode 100644 index ca5017c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/media-device.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Media device - * - * Copyright (C) 2010 Nokia Corporation - * - * Contacts: Laurent Pinchart - * Sakari Ailus - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _MEDIA_DEVICE_H -#define _MEDIA_DEVICE_H - -#if 0 -#include -#include -#include -#endif - -#include "v4l2-osdep.h" -#include "media-devnode.h" -#include "media-entity.h" - - -//struct device; - -/** - * struct media_device - Media device - * @dev: Parent device - * @devnode: Media device node - * @model: Device model name - * @serial: Device serial number (optional) - * @bus_info: Unique and stable device location identifier - * @hw_revision: Hardware device revision - * @driver_version: Device driver version - * @entity_id: ID of the next entity to be registered - * @entities: List of registered entities - * @lock: Entities list lock - * @graph_mutex: Entities graph operation lock - * @link_notify: Link state change notification callback - * - * This structure represents an abstract high-level media device. It allows easy - * access to entities and provides basic media device-level support. The - * structure can be allocated directly or embedded in a larger structure. - * - * The parent @dev is a physical device. It must be set before registering the - * media device. - * - * @model is a descriptive model name exported through sysfs. It doesn't have to - * be unique. - */ -struct media_device { - /* dev->driver_data points to this struct. */ - //struct device *dev; - struct media_devnode devnode; - - char model[32]; - char serial[40]; - char bus_info[32]; - u32 hw_revision; - u32 driver_version; - - u32 entity_id; - struct list_head entities; - - /* Protects the entities list */ - spinlock_t lock; - /* Serializes graph operations. */ - //struct mutex graph_mutex; - _Mutex graph_mutex; - - int (*link_notify)(struct media_link *link, u32 flags, unsigned int notification); -}; - -/* Supported link_notify @notification values. */ -#define MEDIA_DEV_NOTIFY_PRE_LINK_CH 0 -#define MEDIA_DEV_NOTIFY_POST_LINK_CH 1 - -/* media_devnode to media_device */ -#define to_media_device(node) container_of(node, struct media_device, devnode) - -int media_device_register(struct media_device *mdev); -void media_device_unregister(struct media_device *mdev); - -int media_device_register_entity(struct media_device *mdev, - struct media_entity *entity); -void media_device_unregister_entity(struct media_entity *entity); - -/* Iterate over all entities. */ -#define media_device_for_each_entity(entity, mdev, type) \ - list_for_each_entry(entity, &(mdev)->entities, list, type) - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/media-devnode.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/media-devnode.h deleted file mode 100644 index cbbbe7b..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/media-devnode.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Media device node - * - * Copyright (C) 2010 Nokia Corporation - * - * Contacts: Laurent Pinchart - * Sakari Ailus - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * -- - * - * Common functions for media-related drivers to register and unregister media - * device nodes. - */ - -#ifndef _MEDIA_DEVNODE_H -#define _MEDIA_DEVNODE_H - -#if 0 -#include -#include -#include -#include -#endif - - -/* - * Flag to mark the media_devnode struct as registered. Drivers must not touch - * this flag directly, it will be set and cleared by media_devnode_register and - * media_devnode_unregister. - */ -#define MEDIA_FLAG_REGISTERED 0 - -struct media_file_operations { - //struct module *owner; -#if 0 - ssize_t (*read) (char __user *, size_t, loff_t *); - ssize_t (*write) (const char __user *, size_t, loff_t *); - unsigned int (*poll) (struct poll_table_struct *); -#endif - long (*ioctl) (unsigned int, unsigned long); - long (*compat_ioctl) (unsigned int, unsigned long); - int (*open) (); - int (*release) (); -}; - -/** - * struct media_devnode - Media device node - * @parent: parent device - * @minor: device node minor number - * @flags: flags, combination of the MEDIA_FLAG_* constants - * - * This structure represents a media-related device node. - * - * The @parent is a physical device. It must be set by core or device drivers - * before registering the node. - */ -struct media_devnode { - /* device ops */ - const struct media_file_operations *fops; - - /* sysfs */ -#if 0 - struct device dev; /* media device */ - struct cdev cdev; /* character device */ - struct device *parent; /* device parent */ -#endif - /* device info */ - int minor; - unsigned long flags; /* Use bitops to access flags */ - - /* callbacks */ - void (*release)(struct media_devnode *mdev); -}; - -/* dev to media_devnode */ -#define to_media_devnode(minor) container_of(minor, struct media_devnode, dev) - -int media_devnode_register(struct media_devnode *mdev); -void media_devnode_unregister(struct media_devnode *mdev); -#if 0 -static inline struct media_devnode *media_devnode_data() -{ - return private_data; -} -#endif -static inline int media_devnode_is_registered(struct media_devnode *mdev) -{ - return test_bit(MEDIA_FLAG_REGISTERED, &mdev->flags); -} - -#endif /* _MEDIA_DEVNODE_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/media-entity.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/media-entity.h deleted file mode 100644 index ccc3886..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/media-entity.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Media entity - * - * Copyright (C) 2010 Nokia Corporation - * - * Contacts: Laurent Pinchart - * Sakari Ailus - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _MEDIA_ENTITY_H -#define _MEDIA_ENTITY_H - -#if 0 -#include -#include -#include -#endif -#include "v4l2-osdep.h" - - -struct media_pipeline { - int media_test; -}; - -struct media_link { - struct media_pad *source; /* Source pad */ - struct media_pad *sink; /* Sink pad */ - struct media_link *reverse; /* Link in the reverse direction */ - unsigned long flags; /* Link flags (MEDIA_LNK_FL_*) */ -}; - -struct media_pad { - struct media_entity *entity; /* Entity this pad belongs to */ - u16 index; /* Pad index in the entity pads array */ - unsigned long flags; /* Pad flags (MEDIA_PAD_FL_*) */ -}; - -struct media_entity_operations { - int (*link_setup)(struct media_entity *entity, - const struct media_pad *local, - const struct media_pad *remote, u32 flags); - int (*link_validate)(struct media_link *link); -}; - -struct media_entity { - //struct LISlist; - struct media_device *parent; /* Media device this entity belongs to*/ - u32 id; /* Entity ID, unique in the parent media - * device context */ - const char *name; /* Entity name */ - u32 type; /* Entity type (MEDIA_ENT_T_*) */ - u32 revision; /* Entity revision, driver specific */ - unsigned long flags; /* Entity flags (MEDIA_ENT_FL_*) */ - u32 group_id; /* Entity group ID */ - - u16 num_pads; /* Number of sink and source pads */ - u16 num_links; /* Number of existing links, both - * enabled and disabled */ - u16 num_backlinks; /* Number of backlinks */ - u16 max_links; /* Maximum number of links */ - - struct media_pad *pads; /* Pads array (num_pads elements) */ - struct media_link *links; /* Links array (max_links elements)*/ - - const struct media_entity_operations *ops; /* Entity operations */ - - /* Reference counts must never be negative, but are signed integers on - * purpose: a simple WARN_ON(<0) check can be used to detect reference - * count bugs that would make them negative. - */ - int stream_count; /* Stream count for the entity. */ - int use_count; /* Use count for the entity. */ - - struct media_pipeline *pipe; /* Pipeline this entity belongs to. */ - - union { - /* Node specifications */ - struct { - u32 major; - u32 minor; - } v4l; - struct { - u32 major; - u32 minor; - } fb; - struct { - u32 card; - u32 device; - u32 subdevice; - } alsa; - int dvb; - - /* Sub-device specifications */ - /* Nothing needed yet */ - } info; -}; -#if 0 -static inline u32 media_entity_type(struct media_entity *entity) -{ - return entity->type & MEDIA_ENT_TYPE_MASK; -} - -static inline u32 media_entity_subtype(struct media_entity *entity) -{ - return entity->type & MEDIA_ENT_SUBTYPE_MASK; -} - -#define MEDIA_ENTITY_ENUM_MAX_DEPTH 16 -#define MEDIA_ENTITY_ENUM_MAX_ID 64 - -struct media_entity_graph { - struct { - struct media_entity *entity; - int link; - } stack[MEDIA_ENTITY_ENUM_MAX_DEPTH]; - - DECLARE_BITMAP(entities, MEDIA_ENTITY_ENUM_MAX_ID); - int top; -}; - -int media_entity_init(struct media_entity *entity, u16 num_pads, - struct media_pad *pads, u16 extra_links); -void media_entity_cleanup(struct media_entity *entity); - -int media_entity_create_link(struct media_entity *source, u16 source_pad, - struct media_entity *sink, u16 sink_pad, u32 flags); -void __media_entity_remove_links(struct media_entity *entity); -void media_entity_remove_links(struct media_entity *entity); - -int __media_entity_setup_link(struct media_link *link, u32 flags); -int media_entity_setup_link(struct media_link *link, u32 flags); -struct media_link *media_entity_find_link(struct media_pad *source, - struct media_pad *sink); -struct media_pad *media_entity_remote_pad(struct media_pad *pad); - -struct media_entity *media_entity_get(struct media_entity *entity); -void media_entity_put(struct media_entity *entity); - -void media_entity_graph_walk_start(struct media_entity_graph *graph, - struct media_entity *entity); -struct media_entity * -media_entity_graph_walk_next(struct media_entity_graph *graph); -int media_entity_pipeline_start(struct media_entity *entity, - struct media_pipeline *pipe); -void media_entity_pipeline_stop(struct media_entity *entity); - -#define media_entity_call(entity, operation, args...) \ - (((entity)->ops && (entity)->ops->operation) ? \ - (entity)->ops->operation((entity) , ##args) : -ENOIOCTLCMD) -#endif -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/uapi_v4l2-common.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/uapi_v4l2-common.h deleted file mode 100644 index 4f0667e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/uapi_v4l2-common.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * include/linux/v4l2-common.h - * - * Common V4L2 and V4L2 subdev definitions. - * - * Users are advised to #include this file either through videodev2.h - * (V4L2) or through v4l2-subdev.h (V4L2 subdev) rather than to refer - * to this file directly. - * - * Copyright (C) 2012 Nokia Corporation - * Contact: Sakari Ailus - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA - * - */ - -#ifndef __V4L2_COMMON__ -#define __V4L2_COMMON__ - -/* - * - * Selection interface definitions - * - */ - -/* Current cropping area */ -#define V4L2_SEL_TGT_CROP 0x0000 -/* Default cropping area */ -#define V4L2_SEL_TGT_CROP_DEFAULT 0x0001 -/* Cropping bounds */ -#define V4L2_SEL_TGT_CROP_BOUNDS 0x0002 -/* Current composing area */ -#define V4L2_SEL_TGT_COMPOSE 0x0100 -/* Default composing area */ -#define V4L2_SEL_TGT_COMPOSE_DEFAULT 0x0101 -/* Composing bounds */ -#define V4L2_SEL_TGT_COMPOSE_BOUNDS 0x0102 -/* Current composing area plus all padding pixels */ -#define V4L2_SEL_TGT_COMPOSE_PADDED 0x0103 - -/* Backward compatibility target definitions --- to be removed. */ -#define V4L2_SEL_TGT_CROP_ACTIVE V4L2_SEL_TGT_CROP -#define V4L2_SEL_TGT_COMPOSE_ACTIVE V4L2_SEL_TGT_COMPOSE -#define V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL V4L2_SEL_TGT_CROP -#define V4L2_SUBDEV_SEL_TGT_COMPOSE_ACTUAL V4L2_SEL_TGT_COMPOSE -#define V4L2_SUBDEV_SEL_TGT_CROP_BOUNDS V4L2_SEL_TGT_CROP_BOUNDS -#define V4L2_SUBDEV_SEL_TGT_COMPOSE_BOUNDS V4L2_SEL_TGT_COMPOSE_BOUNDS - -/* Selection flags */ -#define V4L2_SEL_FLAG_GE (1 << 0) -#define V4L2_SEL_FLAG_LE (1 << 1) -#define V4L2_SEL_FLAG_KEEP_CONFIG (1 << 2) - -/* Backward compatibility flag definitions --- to be removed. */ -#define V4L2_SUBDEV_SEL_FLAG_SIZE_GE V4L2_SEL_FLAG_GE -#define V4L2_SUBDEV_SEL_FLAG_SIZE_LE V4L2_SEL_FLAG_LE -#define V4L2_SUBDEV_SEL_FLAG_KEEP_CONFIG V4L2_SEL_FLAG_KEEP_CONFIG - -#endif /* __V4L2_COMMON__ */ diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/uapi_videodev2.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/uapi_videodev2.h deleted file mode 100644 index ebdf807..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/uapi_videodev2.h +++ /dev/null @@ -1,2225 +0,0 @@ -/* - * Video for Linux Two header file - * - * Copyright (C) 1999-2012 the contributors - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Alternatively you can redistribute this file under the terms of the - * BSD license as stated below: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. The names of its contributors may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Header file for v4l or V4L2 drivers and applications - * with public API. - * All kernel-specific stuff were moved to media/v4l2-dev.h, so - * no #if __KERNEL tests are allowed here - * - * See http://linuxtv.org for more info - * - * Author: Bill Dirks - * Justin Schoeman - * Hans Verkuil - * et al. - */ -#ifndef _UAPI__LINUX_VIDEODEV2_H -#define _UAPI__LINUX_VIDEODEV2_H - -#ifndef __KERNEL__ -//#include -#endif - -/* TODO: may need to find some file to repalce */ -#if 0 -#include -#include -#include -#endif -#include "v4l2-osdep.h" -#include "v4l2-common.h" -#include "v4l2-controls.h" - -/*Add by Ian -- define v4l2_probe function type*/ -typedef void(*v4l2_probe_t)(void); - -/* - * Common stuff for both V4L1 and V4L2 - * Moved from videodev.h - */ -#define VIDEO_MAX_FRAME 6 -#define VIDEO_MAX_PLANES 1 - -/* - * M I S C E L L A N E O U S - */ - -/* Four-character-code (FOURCC) */ -#define v4l2_fourcc(a, b, c, d)\ - ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24)) - -/* - * E N U M S - */ -enum v4l2_field { - V4L2_FIELD_ANY = 0, /* driver can choose from none, - top, bottom, interlaced - depending on whatever it thinks - is approximate ... */ - V4L2_FIELD_NONE = 1, /* this device has no fields ... */ - V4L2_FIELD_TOP = 2, /* top field only */ - V4L2_FIELD_BOTTOM = 3, /* bottom field only */ - V4L2_FIELD_INTERLACED = 4, /* both fields interlaced */ - V4L2_FIELD_SEQ_TB = 5, /* both fields sequential into one - buffer, top-bottom order */ - V4L2_FIELD_SEQ_BT = 6, /* same as above + bottom-top order */ - V4L2_FIELD_ALTERNATE = 7, /* both fields alternating into - separate buffers */ - V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field - first and the top field is - transmitted first */ - V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field - first and the bottom field is - transmitted first */ -}; -#define V4L2_FIELD_HAS_TOP(field) \ - ((field) == V4L2_FIELD_TOP ||\ - (field) == V4L2_FIELD_INTERLACED ||\ - (field) == V4L2_FIELD_INTERLACED_TB ||\ - (field) == V4L2_FIELD_INTERLACED_BT ||\ - (field) == V4L2_FIELD_SEQ_TB ||\ - (field) == V4L2_FIELD_SEQ_BT) -#define V4L2_FIELD_HAS_BOTTOM(field) \ - ((field) == V4L2_FIELD_BOTTOM ||\ - (field) == V4L2_FIELD_INTERLACED ||\ - (field) == V4L2_FIELD_INTERLACED_TB ||\ - (field) == V4L2_FIELD_INTERLACED_BT ||\ - (field) == V4L2_FIELD_SEQ_TB ||\ - (field) == V4L2_FIELD_SEQ_BT) -#define V4L2_FIELD_HAS_BOTH(field) \ - ((field) == V4L2_FIELD_INTERLACED ||\ - (field) == V4L2_FIELD_INTERLACED_TB ||\ - (field) == V4L2_FIELD_INTERLACED_BT ||\ - (field) == V4L2_FIELD_SEQ_TB ||\ - (field) == V4L2_FIELD_SEQ_BT) - -enum v4l2_buf_type { - V4L2_BUF_TYPE_VIDEO_CAPTURE = 1, - V4L2_BUF_TYPE_VIDEO_OUTPUT = 2, - V4L2_BUF_TYPE_VIDEO_OVERLAY = 3, - V4L2_BUF_TYPE_VBI_CAPTURE = 4, - V4L2_BUF_TYPE_VBI_OUTPUT = 5, - V4L2_BUF_TYPE_SLICED_VBI_CAPTURE = 6, - V4L2_BUF_TYPE_SLICED_VBI_OUTPUT = 7, -#if 1 - /* Experimental */ - V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8, -#endif - V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9, - V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10, - /* Deprecated, do not use */ - V4L2_BUF_TYPE_PRIVATE = 0x80, -}; - -#define V4L2_TYPE_IS_MULTIPLANAR(type) \ - ((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE \ - || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) - -#define V4L2_TYPE_IS_OUTPUT(type) \ - ((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT \ - || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE \ - || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY \ - || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY \ - || (type) == V4L2_BUF_TYPE_VBI_OUTPUT \ - || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT) - -enum v4l2_tuner_type { - V4L2_TUNER_RADIO = 1, - V4L2_TUNER_ANALOG_TV = 2, - V4L2_TUNER_DIGITAL_TV = 3, -}; - -enum v4l2_memory { - V4L2_MEMORY_MMAP = 1, - V4L2_MEMORY_USERPTR = 2, - V4L2_MEMORY_OVERLAY = 3, - V4L2_MEMORY_DMABUF = 4, -}; - -/* see also http://vektor.theorem.ca/graphics/ycbcr/ */ -enum v4l2_colorspace { - /* ITU-R 601 -- broadcast NTSC/PAL */ - V4L2_COLORSPACE_SMPTE170M = 1, - - /* 1125-Line (US) HDTV */ - V4L2_COLORSPACE_SMPTE240M = 2, - - /* HD and modern captures. */ - V4L2_COLORSPACE_REC709 = 3, - - /* broken BT878 extents (601, luma range 16-253 instead of 16-235) */ - V4L2_COLORSPACE_BT878 = 4, - - /* These should be useful. Assume 601 extents. */ - V4L2_COLORSPACE_470_SYSTEM_M = 5, - V4L2_COLORSPACE_470_SYSTEM_BG = 6, - - /* I know there will be cameras that send this. So, this is - * unspecified chromaticities and full 0-255 on each of the - * Y'CbCr components - */ - V4L2_COLORSPACE_JPEG = 7, - - /* For RGB colourspaces, this is probably a good start. */ - V4L2_COLORSPACE_SRGB = 8, -}; - -enum v4l2_priority { - V4L2_PRIORITY_UNSET = 0, /* not initialized */ - V4L2_PRIORITY_BACKGROUND = 1, - V4L2_PRIORITY_INTERACTIVE = 2, - V4L2_PRIORITY_RECORD = 3, - V4L2_PRIORITY_DEFAULT = V4L2_PRIORITY_INTERACTIVE, -}; - -struct v4l2_rect { - __s32 left; - __s32 top; - __s32 width; - __s32 height; -}; - -struct v4l2_fract { - __u32 numerator; - __u32 denominator; -}; - -/** - * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP - * - * @driver: name of the driver module (e.g. "bttv") - * @card: name of the card (e.g. "Hauppauge WinTV") - * @bus_info: name of the bus (e.g. "PCI:" + pci_name(pci_dev) ) - * @version: KERNEL_VERSION - * @capabilities: capabilities of the physical device as a whole - * @device_caps: capabilities accessed via this particular device (node) - * @reserved: reserved fields for future extensions - */ -struct v4l2_capability { - __u8 driver[16]; - __u8 card[32]; - __u8 bus_info[32]; - __u32 version; - __u32 capabilities; - __u32 device_caps; - __u32 reserved[3]; -}; - -/* Values for 'capabilities' field */ -#define V4L2_CAP_VIDEO_CAPTURE 0x00000001 /* Is a video capture device */ -#define V4L2_CAP_VIDEO_OUTPUT 0x00000002 /* Is a video output device */ -#define V4L2_CAP_VIDEO_OVERLAY 0x00000004 /* Can do video overlay */ -#define V4L2_CAP_VBI_CAPTURE 0x00000010 /* Is a raw VBI capture device */ -#define V4L2_CAP_VBI_OUTPUT 0x00000020 /* Is a raw VBI output device */ -#define V4L2_CAP_SLICED_VBI_CAPTURE 0x00000040 /* Is a sliced VBI capture device */ -#define V4L2_CAP_SLICED_VBI_OUTPUT 0x00000080 /* Is a sliced VBI output device */ -#define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */ -#define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200 /* Can do video output overlay */ -#define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */ -#define V4L2_CAP_RDS_OUTPUT 0x00000800 /* Is an RDS encoder */ - -/* Is a video capture device that supports multiplanar formats */ -#define V4L2_CAP_VIDEO_CAPTURE_MPLANE 0x00001000 -/* Is a video output device that supports multiplanar formats */ -#define V4L2_CAP_VIDEO_OUTPUT_MPLANE 0x00002000 -/* Is a video mem-to-mem device that supports multiplanar formats */ -#define V4L2_CAP_VIDEO_M2M_MPLANE 0x00004000 -/* Is a video mem-to-mem device */ -#define V4L2_CAP_VIDEO_M2M 0x00008000 - -#define V4L2_CAP_TUNER 0x00010000 /* has a tuner */ -#define V4L2_CAP_AUDIO 0x00020000 /* has audio support */ -#define V4L2_CAP_RADIO 0x00040000 /* is a radio device */ -#define V4L2_CAP_MODULATOR 0x00080000 /* has a modulator */ - -#define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */ -#define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */ -#define V4L2_CAP_STREAMING 0x04000000 /* streaming I/O ioctls */ - -#define V4L2_CAP_DEVICE_CAPS 0x80000000 /* sets device capabilities field */ - -/* - * V I D E O I M A G E F O R M A T - */ -struct v4l2_pix_format { - __u32 width; - __u32 height; - __u32 pixelformat; - __u32 field; /* enum v4l2_field */ - __u32 bytesperline; /* for padding, zero if unused */ - __u32 sizeimage; - __u32 colorspace; /* enum v4l2_colorspace */ - __u32 priv; /* private data, depends on pixelformat */ -}; - -/* Pixel format FOURCC depth Description */ - -/* RGB formats */ -#define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */ -#define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */ -#define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */ -#define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P') /* 16 RGB-5-6-5 */ -#define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16 RGB-5-5-5 BE */ -#define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16 RGB-5-6-5 BE */ -#define V4L2_PIX_FMT_BGR666 v4l2_fourcc('B', 'G', 'R', 'H') /* 18 BGR-6-6-6 */ -#define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3') /* 24 BGR-8-8-8 */ -#define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */ -#define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */ -#define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */ - -/* Grey formats */ -#define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */ -#define V4L2_PIX_FMT_Y4 v4l2_fourcc('Y', '0', '4', ' ') /* 4 Greyscale */ -#define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ') /* 6 Greyscale */ -#define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */ -#define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ') /* 12 Greyscale */ -#define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ - -/* Grey bit-packed formats */ -#define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */ - -/* Palette formats */ -#define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */ - -/* Chrominance formats */ -#define V4L2_PIX_FMT_UV8 v4l2_fourcc('U', 'V', '8', ' ') /* 8 UV 4:4 */ - -/* Luminance+Chrominance formats */ -#define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9') /* 9 YVU 4:1:0 */ -#define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2') /* 12 YVU 4:2:0 */ -#define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16 YUV 4:2:2 */ -#define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16 YUV 4:2:2 */ -#define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */ -#define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16 YUV 4:2:2 */ -#define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16 YUV 4:2:2 */ -#define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16 YVU422 planar */ -#define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 16 YVU411 planar */ -#define V4L2_PIX_FMT_Y41P v4l2_fourcc('Y', '4', '1', 'P') /* 12 YUV 4:1:1 */ -#define V4L2_PIX_FMT_YUV444 v4l2_fourcc('Y', '4', '4', '4') /* 16 xxxxyyyy uuuuvvvv */ -#define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O') /* 16 YUV-5-5-5 */ -#define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P') /* 16 YUV-5-6-5 */ -#define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4') /* 32 YUV-8-8-8-8 */ -#define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9') /* 9 YUV 4:1:0 */ -#define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */ -#define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */ -#define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */ -#define V4L2_PIX_FMT_M420 v4l2_fourcc('M', '4', '2', '0') /* 12 YUV 4:2:0 2 lines y, 1 line uv interleaved */ - -/* two planes -- one Y, one Cr + Cb interleaved */ -#define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */ -#define V4L2_PIX_FMT_NV21 v4l2_fourcc('N', 'V', '2', '1') /* 12 Y/CrCb 4:2:0 */ -#define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */ -#define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */ -#define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4') /* 24 Y/CbCr 4:4:4 */ -#define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2') /* 24 Y/CrCb 4:4:4 */ - -/* two non contiguous planes - one Y, one Cr + Cb interleaved */ -#define V4L2_PIX_FMT_NV12M v4l2_fourcc('N', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 */ -#define V4L2_PIX_FMT_NV21M v4l2_fourcc('N', 'M', '2', '1') /* 21 Y/CrCb 4:2:0 */ -#define V4L2_PIX_FMT_NV16M v4l2_fourcc('N', 'M', '1', '6') /* 16 Y/CbCr 4:2:2 */ -#define V4L2_PIX_FMT_NV61M v4l2_fourcc('N', 'M', '6', '1') /* 16 Y/CrCb 4:2:2 */ -#define V4L2_PIX_FMT_NV12MT v4l2_fourcc('T', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 64x32 macroblocks */ -#define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 16x16 macroblocks */ - -/* three non contiguous planes - Y, Cb, Cr */ -#define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12 YUV420 planar */ -#define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1') /* 12 YVU420 planar */ - -/* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */ -#define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */ -#define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */ -#define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') /* 8 GRGR.. BGBG.. */ -#define V4L2_PIX_FMT_SRGGB8 v4l2_fourcc('R', 'G', 'G', 'B') /* 8 RGRG.. GBGB.. */ -#define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10 BGBG.. GRGR.. */ -#define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10 GBGB.. RGRG.. */ -#define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10 GRGR.. BGBG.. */ -#define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10 RGRG.. GBGB.. */ -#define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12 BGBG.. GRGR.. */ -#define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12 GBGB.. RGRG.. */ -#define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12 GRGR.. BGBG.. */ -#define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12 RGRG.. GBGB.. */ - /* 10bit raw bayer a-law compressed to 8 bits */ -#define V4L2_PIX_FMT_SBGGR10ALAW8 v4l2_fourcc('a', 'B', 'A', '8') -#define V4L2_PIX_FMT_SGBRG10ALAW8 v4l2_fourcc('a', 'G', 'A', '8') -#define V4L2_PIX_FMT_SGRBG10ALAW8 v4l2_fourcc('a', 'g', 'A', '8') -#define V4L2_PIX_FMT_SRGGB10ALAW8 v4l2_fourcc('a', 'R', 'A', '8') - /* 10bit raw bayer DPCM compressed to 8 bits */ -#define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8') -#define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8') -#define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0') -#define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8') - /* - * 10bit raw bayer, expanded to 16 bits - * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb... - */ -#define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16 BGBG.. GRGR.. */ - -/* compressed formats */ -#define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG */ -#define V4L2_PIX_FMT_JPEG v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG */ -#define V4L2_PIX_FMT_DV v4l2_fourcc('d', 'v', 's', 'd') /* 1394 */ -#define V4L2_PIX_FMT_MPEG v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 Multiplexed */ -#define V4L2_PIX_FMT_H264 v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */ -#define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */ -#define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */ -#define V4L2_PIX_FMT_H263 v4l2_fourcc('H', '2', '6', '3') /* H263 */ -#define V4L2_PIX_FMT_MPEG1 v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES */ -#define V4L2_PIX_FMT_MPEG2 v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES */ -#define V4L2_PIX_FMT_MPEG4 v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 part 2 ES */ -#define V4L2_PIX_FMT_XVID v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid */ -#define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */ -#define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */ -#define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0') /* VP8 */ - -/* Vendor-specific formats */ -#define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */ -#define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */ -#define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */ -#define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */ -#define V4L2_PIX_FMT_PWC1 v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */ -#define V4L2_PIX_FMT_PWC2 v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */ -#define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */ -#define V4L2_PIX_FMT_SPCA501 v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */ -#define V4L2_PIX_FMT_SPCA505 v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */ -#define V4L2_PIX_FMT_SPCA508 v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */ -#define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */ -#define V4L2_PIX_FMT_PAC207 v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */ -#define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */ -#define V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '0') /* compressed RGGB bayer */ -#define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */ -#define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */ -#define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ -#define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ -#define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ -#define V4L2_PIX_FMT_STV0680 v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */ -#define V4L2_PIX_FMT_TM6000 v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */ -#define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */ -#define V4L2_PIX_FMT_KONICA420 v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */ -#define V4L2_PIX_FMT_JPGL v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */ -#define V4L2_PIX_FMT_SE401 v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */ -#define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */ -/* edit by Ian -- Patch for GEO */ -/* definition for MUX format */ -#ifndef V4L2_PIX_FMT_MUX -#define V4L2_PIX_FMT_MUX v4l2_fourcc('M', 'U', 'X', ' ') /* MUX stream */ -#endif - -/* - * F O R M A T E N U M E R A T I O N - */ -struct v4l2_fmtdesc { - __u32 index; /* Format number */ - __u32 type; /* enum v4l2_buf_type */ - __u32 flags; - __u8 description[32]; /* Description string */ - __u32 pixelformat; /* Format fourcc */ - __u32 reserved[4]; -}; - -#define V4L2_FMT_FLAG_COMPRESSED 0x0001 -#define V4L2_FMT_FLAG_EMULATED 0x0002 - -#if 1 - /* Experimental Frame Size and frame rate enumeration */ -/* - * F R A M E S I Z E E N U M E R A T I O N - */ -enum v4l2_frmsizetypes { - V4L2_FRMSIZE_TYPE_DISCRETE = 1, - V4L2_FRMSIZE_TYPE_CONTINUOUS = 2, - V4L2_FRMSIZE_TYPE_STEPWISE = 3, -}; - -struct v4l2_frmsize_discrete { - __u32 width; /* Frame width [pixel] */ - __u32 height; /* Frame height [pixel] */ -}; - -struct v4l2_frmsize_stepwise { - __u32 min_width; /* Minimum frame width [pixel] */ - __u32 max_width; /* Maximum frame width [pixel] */ - __u32 step_width; /* Frame width step size [pixel] */ - __u32 min_height; /* Minimum frame height [pixel] */ - __u32 max_height; /* Maximum frame height [pixel] */ - __u32 step_height; /* Frame height step size [pixel] */ -}; - -struct v4l2_frmsizeenum { - __u32 index; /* Frame size number */ - __u32 pixel_format; /* Pixel format */ - __u32 type; /* Frame size type the device supports. */ - - union { /* Frame size */ - struct v4l2_frmsize_discrete discrete; - struct v4l2_frmsize_stepwise stepwise; - }; - - __u32 reserved[2]; /* Reserved space for future use */ -}; - -/* - * F R A M E R A T E E N U M E R A T I O N - */ -enum v4l2_frmivaltypes { - V4L2_FRMIVAL_TYPE_DISCRETE = 1, - V4L2_FRMIVAL_TYPE_CONTINUOUS = 2, - V4L2_FRMIVAL_TYPE_STEPWISE = 3, -}; - -struct v4l2_frmival_stepwise { - struct v4l2_fract min; /* Minimum frame interval [s] */ - struct v4l2_fract max; /* Maximum frame interval [s] */ - struct v4l2_fract step; /* Frame interval step size [s] */ -}; - -struct v4l2_frmivalenum { - __u32 index; /* Frame format index */ - __u32 pixel_format; /* Pixel format */ - __u32 width; /* Frame width */ - __u32 height; /* Frame height */ - __u32 type; /* Frame interval type the device supports. */ - - union { /* Frame interval */ - struct v4l2_fract discrete; - struct v4l2_frmival_stepwise stepwise; - }; - - __u32 reserved[2]; /* Reserved space for future use */ -}; -#endif - -/* - * T I M E C O D E - */ -struct v4l2_timecode { - __u32 type; - __u32 flags; - __u8 frames; - __u8 seconds; - __u8 minutes; - __u8 hours; - __u8 userbits[4]; -}; - -/* Type */ -#define V4L2_TC_TYPE_24FPS 1 -#define V4L2_TC_TYPE_25FPS 2 -#define V4L2_TC_TYPE_30FPS 3 -#define V4L2_TC_TYPE_50FPS 4 -#define V4L2_TC_TYPE_60FPS 5 - -/* Flags */ -#define V4L2_TC_FLAG_DROPFRAME 0x0001 /* "drop-frame" mode */ -#define V4L2_TC_FLAG_COLORFRAME 0x0002 -#define V4L2_TC_USERBITS_field 0x000C -#define V4L2_TC_USERBITS_USERDEFINED 0x0000 -#define V4L2_TC_USERBITS_8BITCHARS 0x0008 -/* The above is based on SMPTE timecodes */ - -struct v4l2_jpegcompression { - int quality; - - int APPn; /* Number of APP segment to be written, - * must be 0..15 */ - int APP_len; /* Length of data in JPEG APPn segment */ - char APP_data[60]; /* Data in the JPEG APPn segment. */ - - int COM_len; /* Length of data in JPEG COM segment */ - char COM_data[60]; /* Data in JPEG COM segment */ - - __u32 jpeg_markers; /* Which markers should go into the JPEG - * output. Unless you exactly know what - * you do, leave them untouched. - * Including less markers will make the - * resulting code smaller, but there will - * be fewer applications which can read it. - * The presence of the APP and COM marker - * is influenced by APP_len and COM_len - * ONLY, not by this property! */ - -#define V4L2_JPEG_MARKER_DHT (1<<3) /* Define Huffman Tables */ -#define V4L2_JPEG_MARKER_DQT (1<<4) /* Define Quantization Tables */ -#define V4L2_JPEG_MARKER_DRI (1<<5) /* Define Restart Interval */ -#define V4L2_JPEG_MARKER_COM (1<<6) /* Comment segment */ -#define V4L2_JPEG_MARKER_APP (1<<7) /* App segment, driver will - * always use APP0 */ -}; - -/* - * M E M O R Y - M A P P I N G B U F F E R S - */ -struct v4l2_requestbuffers { - __u32 count; - __u32 type; /* enum v4l2_buf_type */ - __u32 memory; /* enum v4l2_memory */ - __u32 reserved[2]; -}; - -/** - * struct v4l2_plane - plane info for multi-planar buffers - * @bytesused: number of bytes occupied by data in the plane (payload) - * @length: size of this plane (NOT the payload) in bytes - * @mem_offset: when memory in the associated struct v4l2_buffer is - * V4L2_MEMORY_MMAP, equals the offset from the start of - * the device memory for this plane (or is a "cookie" that - * should be passed to mmap() called on the video node) - * @userptr: when memory is V4L2_MEMORY_USERPTR, a userspace pointer - * pointing to this plane - * @fd: when memory is V4L2_MEMORY_DMABUF, a userspace file - * descriptor associated with this plane - * @data_offset: offset in the plane to the start of data; usually 0, - * unless there is a header in front of the data - * - * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer - * with two planes can have one plane for Y, and another for interleaved CbCr - * components. Each plane can reside in a separate memory buffer, or even in - * a completely separate memory node (e.g. in embedded devices). - */ -struct v4l2_plane { - __u32 bytesused; - __u32 length; - union { - __u32 mem_offset; - unsigned long userptr; - __s32 fd; - } m; - __u32 data_offset; - __u32 reserved[11]; -}; - -/** - * struct v4l2_buffer - video buffer info - * @index: id number of the buffer - * @type: enum v4l2_buf_type; buffer type (type == *_MPLANE for - * multiplanar buffers); - * @bytesused: number of bytes occupied by data in the buffer (payload); - * unused (set to 0) for multiplanar buffers - * @flags: buffer informational flags - * @field: enum v4l2_field; field order of the image in the buffer - * @timestamp: frame timestamp - * @timecode: frame timecode - * @sequence: sequence count of this frame - * @memory: enum v4l2_memory; the method, in which the actual video data is - * passed - * @offset: for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP; - * offset from the start of the device memory for this plane, - * (or a "cookie" that should be passed to mmap() as offset) - * @userptr: for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR; - * a userspace pointer pointing to this buffer - * @fd: for non-multiplanar buffers with memory == V4L2_MEMORY_DMABUF; - * a userspace file descriptor associated with this buffer - * @planes: for multiplanar buffers; userspace pointer to the array of plane - * info structs for this buffer - * @length: size in bytes of the buffer (NOT its payload) for single-plane - * buffers (when type != *_MPLANE); number of elements in the - * planes array for multi-plane buffers - * @input: input number from which the video data has has been captured - * - * Contains data exchanged by application and driver using one of the Streaming - * I/O methods. - */ -struct v4l2_buffer { - __u32 index; - __u32 type; - __u32 bytesused; - __u32 flags; - __u32 field; - //struct timeval timestamp; - __u32 timestamp; - __u32 timepadding; - struct v4l2_timecode timecode; - __u32 sequence; - - /* memory location */ - __u32 memory; - union { - __u32 offset; - unsigned long userptr; - struct v4l2_plane *planes; - __s32 fd; - } m; - __u32 length; - __u32 reserved2; - __u32 reserved; -}; - -/* Flags for 'flags' field */ -#define V4L2_BUF_FLAG_MAPPED 0x0001 /* Buffer is mapped (flag) */ -#define V4L2_BUF_FLAG_QUEUED 0x0002 /* Buffer is queued for processing */ -#define V4L2_BUF_FLAG_DONE 0x0004 /* Buffer is ready */ -#define V4L2_BUF_FLAG_KEYFRAME 0x0008 /* Image is a keyframe (I-frame) */ -#define V4L2_BUF_FLAG_PFRAME 0x0010 /* Image is a P-frame */ -#define V4L2_BUF_FLAG_BFRAME 0x0020 /* Image is a B-frame */ -/* Buffer is ready, but the data contained within is corrupted. */ -#define V4L2_BUF_FLAG_ERROR 0x0040 -#define V4L2_BUF_FLAG_TIMECODE 0x0100 /* timecode field is valid */ -#define V4L2_BUF_FLAG_PREPARED 0x0400 /* Buffer is prepared for queuing */ -/* Cache handling flags */ -#define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE 0x0800 -#define V4L2_BUF_FLAG_NO_CACHE_CLEAN 0x1000 -/* Timestamp type */ -#define V4L2_BUF_FLAG_TIMESTAMP_MASK 0xe000 -#define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN 0x0000 -#define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC 0x2000 -#define V4L2_BUF_FLAG_TIMESTAMP_COPY 0x4000 - -/** - * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor - * - * @index: id number of the buffer - * @type: enum v4l2_buf_type; buffer type (type == *_MPLANE for - * multiplanar buffers); - * @plane: index of the plane to be exported, 0 for single plane queues - * @flags: flags for newly created file, currently only O_CLOEXEC is - * supported, refer to manual of open syscall for more details - * @fd: file descriptor associated with DMABUF (set by driver) - * - * Contains data used for exporting a video buffer as DMABUF file descriptor. - * The buffer is identified by a 'cookie' returned by VIDIOC_QUERYBUF - * (identical to the cookie used to mmap() the buffer to userspace). All - * reserved fields must be set to zero. The field reserved0 is expected to - * become a structure 'type' allowing an alternative layout of the structure - * content. Therefore this field should not be used for any other extensions. - */ -struct v4l2_exportbuffer { - __u32 type; /* enum v4l2_buf_type */ - __u32 index; - __u32 plane; - __u32 flags; - __s32 fd; - __u32 reserved[11]; -}; - -/* - * O V E R L A Y P R E V I E W - */ -struct v4l2_framebuffer { - __u32 capability; - __u32 flags; -/* FIXME: in theory we should pass something like PCI device + memory - * region + offset instead of some physical address */ - void *base; - struct v4l2_pix_format fmt; -}; -/* Flags for the 'capability' field. Read only */ -#define V4L2_FBUF_CAP_EXTERNOVERLAY 0x0001 -#define V4L2_FBUF_CAP_CHROMAKEY 0x0002 -#define V4L2_FBUF_CAP_LIST_CLIPPING 0x0004 -#define V4L2_FBUF_CAP_BITMAP_CLIPPING 0x0008 -#define V4L2_FBUF_CAP_LOCAL_ALPHA 0x0010 -#define V4L2_FBUF_CAP_GLOBAL_ALPHA 0x0020 -#define V4L2_FBUF_CAP_LOCAL_INV_ALPHA 0x0040 -#define V4L2_FBUF_CAP_SRC_CHROMAKEY 0x0080 -/* Flags for the 'flags' field. */ -#define V4L2_FBUF_FLAG_PRIMARY 0x0001 -#define V4L2_FBUF_FLAG_OVERLAY 0x0002 -#define V4L2_FBUF_FLAG_CHROMAKEY 0x0004 -#define V4L2_FBUF_FLAG_LOCAL_ALPHA 0x0008 -#define V4L2_FBUF_FLAG_GLOBAL_ALPHA 0x0010 -#define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA 0x0020 -#define V4L2_FBUF_FLAG_SRC_CHROMAKEY 0x0040 - -struct v4l2_clip { - struct v4l2_rect c; - struct v4l2_clip __user *next; -}; - -struct v4l2_window { - struct v4l2_rect w; - __u32 field; /* enum v4l2_field */ - __u32 chromakey; - struct v4l2_clip __user *clips; - __u32 clipcount; - void __user *bitmap; - __u8 global_alpha; -}; - -/* - * C A P T U R E P A R A M E T E R S - */ -struct v4l2_captureparm { - __u32 capability; /* Supported modes */ - __u32 capturemode; /* Current mode */ - struct v4l2_fract timeperframe; /* Time per frame in seconds */ - __u32 extendedmode; /* Driver-specific extensions */ - __u32 readbuffers; /* # of buffers for read */ - __u32 reserved[4]; -}; - -/* Flags for 'capability' and 'capturemode' fields */ -#define V4L2_MODE_HIGHQUALITY 0x0001 /* High quality imaging mode */ -#define V4L2_CAP_TIMEPERFRAME 0x1000 /* timeperframe field is supported */ - -struct v4l2_outputparm { - __u32 capability; /* Supported modes */ - __u32 outputmode; /* Current mode */ - struct v4l2_fract timeperframe; /* Time per frame in seconds */ - __u32 extendedmode; /* Driver-specific extensions */ - __u32 writebuffers; /* # of buffers for write */ - __u32 reserved[4]; -}; - -/* - * I N P U T I M A G E C R O P P I N G - */ -struct v4l2_cropcap { - __u32 type; /* enum v4l2_buf_type */ - struct v4l2_rect bounds; - struct v4l2_rect defrect; - struct v4l2_fract pixelaspect; -}; - -struct v4l2_crop { - __u32 type; /* enum v4l2_buf_type */ - struct v4l2_rect c; -}; - -/** - * struct v4l2_selection - selection info - * @type: buffer type (do not use *_MPLANE types) - * @target: Selection target, used to choose one of possible rectangles; - * defined in v4l2-common.h; V4L2_SEL_TGT_* . - * @flags: constraints flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*. - * @r: coordinates of selection window - * @reserved: for future use, rounds structure size to 64 bytes, set to zero - * - * Hardware may use multiple helper windows to process a video stream. - * The structure is used to exchange this selection areas between - * an application and a driver. - */ -struct v4l2_selection { - __u32 type; - __u32 target; - __u32 flags; - struct v4l2_rect r; - __u32 reserved[9]; -}; - - -/* - * A N A L O G V I D E O S T A N D A R D - */ - -typedef __u64 v4l2_std_id; - -/* one bit for each */ -#define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001) -#define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002) -#define V4L2_STD_PAL_G ((v4l2_std_id)0x00000004) -#define V4L2_STD_PAL_H ((v4l2_std_id)0x00000008) -#define V4L2_STD_PAL_I ((v4l2_std_id)0x00000010) -#define V4L2_STD_PAL_D ((v4l2_std_id)0x00000020) -#define V4L2_STD_PAL_D1 ((v4l2_std_id)0x00000040) -#define V4L2_STD_PAL_K ((v4l2_std_id)0x00000080) - -#define V4L2_STD_PAL_M ((v4l2_std_id)0x00000100) -#define V4L2_STD_PAL_N ((v4l2_std_id)0x00000200) -#define V4L2_STD_PAL_Nc ((v4l2_std_id)0x00000400) -#define V4L2_STD_PAL_60 ((v4l2_std_id)0x00000800) - -#define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000) /* BTSC */ -#define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000) /* EIA-J */ -#define V4L2_STD_NTSC_443 ((v4l2_std_id)0x00004000) -#define V4L2_STD_NTSC_M_KR ((v4l2_std_id)0x00008000) /* FM A2 */ - -#define V4L2_STD_SECAM_B ((v4l2_std_id)0x00010000) -#define V4L2_STD_SECAM_D ((v4l2_std_id)0x00020000) -#define V4L2_STD_SECAM_G ((v4l2_std_id)0x00040000) -#define V4L2_STD_SECAM_H ((v4l2_std_id)0x00080000) -#define V4L2_STD_SECAM_K ((v4l2_std_id)0x00100000) -#define V4L2_STD_SECAM_K1 ((v4l2_std_id)0x00200000) -#define V4L2_STD_SECAM_L ((v4l2_std_id)0x00400000) -#define V4L2_STD_SECAM_LC ((v4l2_std_id)0x00800000) - -/* ATSC/HDTV */ -#define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000) -#define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000) - -/* FIXME: - Although std_id is 64 bits, there is an issue on PPC32 architecture that - makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding - this value to 32 bits. - As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide), - it should work fine. However, if needed to add more than two standards, - v4l2-common.c should be fixed. - */ - -/* - * Some macros to merge video standards in order to make live easier for the - * drivers and V4L2 applications - */ - -/* - * "Common" NTSC/M - It should be noticed that V4L2_STD_NTSC_443 is - * Missing here. - */ -#define V4L2_STD_NTSC (V4L2_STD_NTSC_M |\ - V4L2_STD_NTSC_M_JP |\ - V4L2_STD_NTSC_M_KR) -/* Secam macros */ -#define V4L2_STD_SECAM_DK (V4L2_STD_SECAM_D |\ - V4L2_STD_SECAM_K |\ - V4L2_STD_SECAM_K1) -/* All Secam Standards */ -#define V4L2_STD_SECAM (V4L2_STD_SECAM_B |\ - V4L2_STD_SECAM_G |\ - V4L2_STD_SECAM_H |\ - V4L2_STD_SECAM_DK |\ - V4L2_STD_SECAM_L |\ - V4L2_STD_SECAM_LC) -/* PAL macros */ -#define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |\ - V4L2_STD_PAL_B1 |\ - V4L2_STD_PAL_G) -#define V4L2_STD_PAL_DK (V4L2_STD_PAL_D |\ - V4L2_STD_PAL_D1 |\ - V4L2_STD_PAL_K) -/* - * "Common" PAL - This macro is there to be compatible with the old - * V4L1 concept of "PAL": /BGDKHI. - * Several PAL standards are missing here: /M, /N and /Nc - */ -#define V4L2_STD_PAL (V4L2_STD_PAL_BG |\ - V4L2_STD_PAL_DK |\ - V4L2_STD_PAL_H |\ - V4L2_STD_PAL_I) -/* Chroma "agnostic" standards */ -#define V4L2_STD_B (V4L2_STD_PAL_B |\ - V4L2_STD_PAL_B1 |\ - V4L2_STD_SECAM_B) -#define V4L2_STD_G (V4L2_STD_PAL_G |\ - V4L2_STD_SECAM_G) -#define V4L2_STD_H (V4L2_STD_PAL_H |\ - V4L2_STD_SECAM_H) -#define V4L2_STD_L (V4L2_STD_SECAM_L |\ - V4L2_STD_SECAM_LC) -#define V4L2_STD_GH (V4L2_STD_G |\ - V4L2_STD_H) -#define V4L2_STD_DK (V4L2_STD_PAL_DK |\ - V4L2_STD_SECAM_DK) -#define V4L2_STD_BG (V4L2_STD_B |\ - V4L2_STD_G) -#define V4L2_STD_MN (V4L2_STD_PAL_M |\ - V4L2_STD_PAL_N |\ - V4L2_STD_PAL_Nc |\ - V4L2_STD_NTSC) - -/* Standards where MTS/BTSC stereo could be found */ -#define V4L2_STD_MTS (V4L2_STD_NTSC_M |\ - V4L2_STD_PAL_M |\ - V4L2_STD_PAL_N |\ - V4L2_STD_PAL_Nc) - -/* Standards for Countries with 60Hz Line frequency */ -#define V4L2_STD_525_60 (V4L2_STD_PAL_M |\ - V4L2_STD_PAL_60 |\ - V4L2_STD_NTSC |\ - V4L2_STD_NTSC_443) -/* Standards for Countries with 50Hz Line frequency */ -#define V4L2_STD_625_50 (V4L2_STD_PAL |\ - V4L2_STD_PAL_N |\ - V4L2_STD_PAL_Nc |\ - V4L2_STD_SECAM) - -#define V4L2_STD_ATSC (V4L2_STD_ATSC_8_VSB |\ - V4L2_STD_ATSC_16_VSB) -/* Macros with none and all analog standards */ -#define V4L2_STD_UNKNOWN 0 -#define V4L2_STD_ALL (V4L2_STD_525_60 |\ - V4L2_STD_625_50) - -struct v4l2_standard { - __u32 index; - //v4l2_std_id id; - __u64 id; - __u8 name[24]; - struct v4l2_fract frameperiod; /* Frames, not fields */ - __u32 framelines; - __u32 reserved[4]; -}; - -/* - * D V B T T I M I N G S - */ - -/** struct v4l2_bt_timings - BT.656/BT.1120 timing data - * @width: total width of the active video in pixels - * @height: total height of the active video in lines - * @interlaced: Interlaced or progressive - * @polarities: Positive or negative polarities - * @pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000 - * @hfrontporch:Horizontal front porch in pixels - * @hsync: Horizontal Sync length in pixels - * @hbackporch: Horizontal back porch in pixels - * @vfrontporch:Vertical front porch in lines - * @vsync: Vertical Sync length in lines - * @vbackporch: Vertical back porch in lines - * @il_vfrontporch:Vertical front porch for the even field - * (aka field 2) of interlaced field formats - * @il_vsync: Vertical Sync length for the even field - * (aka field 2) of interlaced field formats - * @il_vbackporch:Vertical back porch for the even field - * (aka field 2) of interlaced field formats - * @standards: Standards the timing belongs to - * @flags: Flags - * @reserved: Reserved fields, must be zeroed. - * - * A note regarding vertical interlaced timings: height refers to the total - * height of the active video frame (= two fields). The blanking timings refer - * to the blanking of each field. So the height of the total frame is - * calculated as follows: - * - * tot_height = height + vfrontporch + vsync + vbackporch + - * il_vfrontporch + il_vsync + il_vbackporch - * - * The active height of each field is height / 2. - */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -#include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_bt_timings { - __u32 width; - __u32 height; - __u32 interlaced; - __u32 polarities; - __u64 pixelclock; - __u32 hfrontporch; - __u32 hsync; - __u32 hbackporch; - __u32 vfrontporch; - __u32 vsync; - __u32 vbackporch; - __u32 il_vfrontporch; - __u32 il_vsync; - __u32 il_vbackporch; - __u32 standards; - __u32 flags; - __u32 reserved[14]; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -#include "pack_end.h" -#endif - -/* Interlaced or progressive format */ -#define V4L2_DV_PROGRESSIVE 0 -#define V4L2_DV_INTERLACED 1 - -/* Polarities. If bit is not set, it is assumed to be negative polarity */ -#define V4L2_DV_VSYNC_POS_POL 0x00000001 -#define V4L2_DV_HSYNC_POS_POL 0x00000002 - -/* Timings standards */ -#define V4L2_DV_BT_STD_CEA861 (1 << 0) /* CEA-861 Digital TV Profile */ -#define V4L2_DV_BT_STD_DMT (1 << 1) /* VESA Discrete Monitor Timings */ -#define V4L2_DV_BT_STD_CVT (1 << 2) /* VESA Coordinated Video Timings */ -#define V4L2_DV_BT_STD_GTF (1 << 3) /* VESA Generalized Timings Formula */ - -/* Flags */ - -/* CVT/GTF specific: timing uses reduced blanking (CVT) or the 'Secondary - GTF' curve (GTF). In both cases the horizontal and/or vertical blanking - intervals are reduced, allowing a higher resolution over the same - bandwidth. This is a read-only flag. */ -#define V4L2_DV_FL_REDUCED_BLANKING (1 << 0) -/* CEA-861 specific: set for CEA-861 formats with a framerate of a multiple - of six. These formats can be optionally played at 1 / 1.001 speed. - This is a read-only flag. */ -#define V4L2_DV_FL_CAN_REDUCE_FPS (1 << 1) -/* CEA-861 specific: only valid for video transmitters, the flag is cleared - by receivers. - If the framerate of the format is a multiple of six, then the pixelclock - used to set up the transmitter is divided by 1.001 to make it compatible - with 60 Hz based standards such as NTSC and PAL-M that use a framerate of - 29.97 Hz. Otherwise this flag is cleared. If the transmitter can't generate - such frequencies, then the flag will also be cleared. */ -#define V4L2_DV_FL_REDUCED_FPS (1 << 2) -/* Specific to interlaced formats: if set, then field 1 is really one half-line - longer and field 2 is really one half-line shorter, so each field has - exactly the same number of half-lines. Whether half-lines can be detected - or used depends on the hardware. */ -#define V4L2_DV_FL_HALF_LINE (1 << 3) - -/* A few useful defines to calculate the total blanking and frame sizes */ -#define V4L2_DV_BT_BLANKING_WIDTH(bt) \ - (bt->hfrontporch + bt->hsync + bt->hbackporch) -#define V4L2_DV_BT_FRAME_WIDTH(bt) \ - (bt->width + V4L2_DV_BT_BLANKING_WIDTH(bt)) -#define V4L2_DV_BT_BLANKING_HEIGHT(bt) \ - (bt->vfrontporch + bt->vsync + bt->vbackporch + \ - bt->il_vfrontporch + bt->il_vsync + bt->il_vbackporch) -#define V4L2_DV_BT_FRAME_HEIGHT(bt) \ - (bt->height + V4L2_DV_BT_BLANKING_HEIGHT(bt)) - -/** struct v4l2_dv_timings - DV timings - * @type: the type of the timings - * @bt: BT656/1120 timings - */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -#include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_dv_timings { - __u32 type; - union { - struct v4l2_bt_timings bt; - __u32 reserved[32]; - }; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -#include "pack_end.h" -#endif - -/* Values for the type field */ -#define V4L2_DV_BT_656_1120 0 /* BT.656/1120 timing type */ - - -/** struct v4l2_enum_dv_timings - DV timings enumeration - * @index: enumeration index - * @reserved: must be zeroed - * @timings: the timings for the given index - */ -struct v4l2_enum_dv_timings { - __u32 index; - __u32 reserved[3]; - struct v4l2_dv_timings timings; -}; - -/** struct v4l2_bt_timings_cap - BT.656/BT.1120 timing capabilities - * @min_width: width in pixels - * @max_width: width in pixels - * @min_height: height in lines - * @max_height: height in lines - * @min_pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000 - * @max_pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000 - * @standards: Supported standards - * @capabilities: Supported capabilities - * @reserved: Must be zeroed - */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -#include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_bt_timings_cap { - __u32 min_width; - __u32 max_width; - __u32 min_height; - __u32 max_height; - __u64 min_pixelclock; - __u64 max_pixelclock; - __u32 standards; - __u32 capabilities; - __u32 reserved[16]; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -#include "pack_end.h" -#endif - -/* Supports interlaced formats */ -#define V4L2_DV_BT_CAP_INTERLACED (1 << 0) -/* Supports progressive formats */ -#define V4L2_DV_BT_CAP_PROGRESSIVE (1 << 1) -/* Supports CVT/GTF reduced blanking */ -#define V4L2_DV_BT_CAP_REDUCED_BLANKING (1 << 2) -/* Supports custom formats */ -#define V4L2_DV_BT_CAP_CUSTOM (1 << 3) - -/** struct v4l2_dv_timings_cap - DV timings capabilities - * @type: the type of the timings (same as in struct v4l2_dv_timings) - * @bt: the BT656/1120 timings capabilities - */ -struct v4l2_dv_timings_cap { - __u32 type; - __u32 reserved[3]; - union { - struct v4l2_bt_timings_cap bt; - __u32 raw_data[32]; - }; -}; - - -/* - * V I D E O I N P U T S - */ -struct v4l2_input { - __u32 index; /* Which input */ - __u8 name[32]; /* Label */ - __u32 type; /* Type of input */ - __u32 audioset; /* Associated audios (bitfield) */ - __u32 tuner; /* enum v4l2_tuner_type */ - //v4l2_std_id std; - __u64 std; - __u32 status; - __u32 capabilities; - __u32 reserved[3]; -}; - -/* Values for the 'type' field */ -#define V4L2_INPUT_TYPE_TUNER 1 -#define V4L2_INPUT_TYPE_CAMERA 2 - -/* field 'status' - general */ -#define V4L2_IN_ST_NO_POWER 0x00000001 /* Attached device is off */ -#define V4L2_IN_ST_NO_SIGNAL 0x00000002 -#define V4L2_IN_ST_NO_COLOR 0x00000004 - -/* field 'status' - sensor orientation */ -/* If sensor is mounted upside down set both bits */ -#define V4L2_IN_ST_HFLIP 0x00000010 /* Frames are flipped horizontally */ -#define V4L2_IN_ST_VFLIP 0x00000020 /* Frames are flipped vertically */ - -/* field 'status' - analog */ -#define V4L2_IN_ST_NO_H_LOCK 0x00000100 /* No horizontal sync lock */ -#define V4L2_IN_ST_COLOR_KILL 0x00000200 /* Color killer is active */ - -/* field 'status' - digital */ -#define V4L2_IN_ST_NO_SYNC 0x00010000 /* No synchronization lock */ -#define V4L2_IN_ST_NO_EQU 0x00020000 /* No equalizer lock */ -#define V4L2_IN_ST_NO_CARRIER 0x00040000 /* Carrier recovery failed */ - -/* field 'status' - VCR and set-top box */ -#define V4L2_IN_ST_MACROVISION 0x01000000 /* Macrovision detected */ -#define V4L2_IN_ST_NO_ACCESS 0x02000000 /* Conditional access denied */ -#define V4L2_IN_ST_VTR 0x04000000 /* VTR time constant */ - -/* capabilities flags */ -#define V4L2_IN_CAP_DV_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */ -#define V4L2_IN_CAP_CUSTOM_TIMINGS V4L2_IN_CAP_DV_TIMINGS /* For compatibility */ -#define V4L2_IN_CAP_STD 0x00000004 /* Supports S_STD */ - -/* - * V I D E O O U T P U T S - */ -struct v4l2_output { - __u32 index; /* Which output */ - __u8 name[32]; /* Label */ - __u32 type; /* Type of output */ - __u32 audioset; /* Associated audios (bitfield) */ - __u32 modulator; /* Associated modulator */ - //v4l2_std_id std; - __u64 std; - __u32 capabilities; - __u32 reserved[3]; -}; -/* Values for the 'type' field */ -#define V4L2_OUTPUT_TYPE_MODULATOR 1 -#define V4L2_OUTPUT_TYPE_ANALOG 2 -#define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY 3 - -/* capabilities flags */ -#define V4L2_OUT_CAP_DV_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */ -#define V4L2_OUT_CAP_CUSTOM_TIMINGS V4L2_OUT_CAP_DV_TIMINGS /* For compatibility */ -#define V4L2_OUT_CAP_STD 0x00000004 /* Supports S_STD */ - -/* - * C O N T R O L S - */ -struct v4l2_control { - __u32 id; - __s32 value; -}; - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -#include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_ext_control { - __u32 id; - __u32 size; - __u32 reserved2[1]; - union { - __s32 value; - __s64 value64; - char *string; - }; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -#include "pack_end.h" -#endif - -struct v4l2_ext_controls { - __u32 ctrl_class; - __u32 count; - __u32 error_idx; - __u32 reserved[2]; - struct v4l2_ext_control *controls; -}; - -#define V4L2_CTRL_ID_MASK (0x0fffffff) -#define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) -#define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000) - -enum v4l2_ctrl_type { - V4L2_CTRL_TYPE_INTEGER = 1, - V4L2_CTRL_TYPE_BOOLEAN = 2, - V4L2_CTRL_TYPE_MENU = 3, - V4L2_CTRL_TYPE_BUTTON = 4, - V4L2_CTRL_TYPE_INTEGER64 = 5, - V4L2_CTRL_TYPE_CTRL_CLASS = 6, - V4L2_CTRL_TYPE_STRING = 7, - V4L2_CTRL_TYPE_BITMASK = 8, - V4L2_CTRL_TYPE_INTEGER_MENU = 9, -}; - -/* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ -struct v4l2_queryctrl { - __u32 id; - __u32 type; /* enum v4l2_ctrl_type */ - __u8 name[32]; /* Whatever */ - __s32 minimum; /* Note signedness */ - __s32 maximum; - __s32 step; - __s32 default_value; - __u32 flags; - __u32 reserved[2]; -}; - -/* Used in the VIDIOC_QUERYMENU ioctl for querying menu items */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -#include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_querymenu { - __u32 id; - __u32 index; - union { - __u8 name[32]; /* Whatever */ - __s64 value; - }; - __u32 reserved; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -#include "pack_end.h" -#endif - -/* Control flags */ -#define V4L2_CTRL_FLAG_DISABLED 0x0001 -#define V4L2_CTRL_FLAG_GRABBED 0x0002 -#define V4L2_CTRL_FLAG_READ_ONLY 0x0004 -#define V4L2_CTRL_FLAG_UPDATE 0x0008 -#define V4L2_CTRL_FLAG_INACTIVE 0x0010 -#define V4L2_CTRL_FLAG_SLIDER 0x0020 -#define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040 -#define V4L2_CTRL_FLAG_VOLATILE 0x0080 - -/* Query flag, to be ORed with the control ID */ -#define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000 - -/* User-class control IDs defined by V4L2 */ -#define V4L2_CID_MAX_CTRLS 1024 -/* IDs reserved for driver specific controls */ -#define V4L2_CID_PRIVATE_BASE 0x08000000 - - -/* - * T U N I N G - */ -struct v4l2_tuner { - __u32 index; - __u8 name[32]; - __u32 type; /* enum v4l2_tuner_type */ - __u32 capability; - __u32 rangelow; - __u32 rangehigh; - __u32 rxsubchans; - __u32 audmode; - __s32 signal; - __s32 afc; - __u32 reserved[4]; -}; - -struct v4l2_modulator { - __u32 index; - __u8 name[32]; - __u32 capability; - __u32 rangelow; - __u32 rangehigh; - __u32 txsubchans; - __u32 reserved[4]; -}; - -/* Flags for the 'capability' field */ -#define V4L2_TUNER_CAP_LOW 0x0001 -#define V4L2_TUNER_CAP_NORM 0x0002 -#define V4L2_TUNER_CAP_HWSEEK_BOUNDED 0x0004 -#define V4L2_TUNER_CAP_HWSEEK_WRAP 0x0008 -#define V4L2_TUNER_CAP_STEREO 0x0010 -#define V4L2_TUNER_CAP_LANG2 0x0020 -#define V4L2_TUNER_CAP_SAP 0x0020 -#define V4L2_TUNER_CAP_LANG1 0x0040 -#define V4L2_TUNER_CAP_RDS 0x0080 -#define V4L2_TUNER_CAP_RDS_BLOCK_IO 0x0100 -#define V4L2_TUNER_CAP_RDS_CONTROLS 0x0200 -#define V4L2_TUNER_CAP_FREQ_BANDS 0x0400 -#define V4L2_TUNER_CAP_HWSEEK_PROG_LIM 0x0800 - -/* Flags for the 'rxsubchans' field */ -#define V4L2_TUNER_SUB_MONO 0x0001 -#define V4L2_TUNER_SUB_STEREO 0x0002 -#define V4L2_TUNER_SUB_LANG2 0x0004 -#define V4L2_TUNER_SUB_SAP 0x0004 -#define V4L2_TUNER_SUB_LANG1 0x0008 -#define V4L2_TUNER_SUB_RDS 0x0010 - -/* Values for the 'audmode' field */ -#define V4L2_TUNER_MODE_MONO 0x0000 -#define V4L2_TUNER_MODE_STEREO 0x0001 -#define V4L2_TUNER_MODE_LANG2 0x0002 -#define V4L2_TUNER_MODE_SAP 0x0002 -#define V4L2_TUNER_MODE_LANG1 0x0003 -#define V4L2_TUNER_MODE_LANG1_LANG2 0x0004 - -struct v4l2_frequency { - __u32 tuner; - __u32 type; /* enum v4l2_tuner_type */ - __u32 frequency; - __u32 reserved[8]; -}; - -#define V4L2_BAND_MODULATION_VSB (1 << 1) -#define V4L2_BAND_MODULATION_FM (1 << 2) -#define V4L2_BAND_MODULATION_AM (1 << 3) - -struct v4l2_frequency_band { - __u32 tuner; - __u32 type; /* enum v4l2_tuner_type */ - __u32 index; - __u32 capability; - __u32 rangelow; - __u32 rangehigh; - __u32 modulation; - __u32 reserved[9]; -}; - -struct v4l2_hw_freq_seek { - __u32 tuner; - __u32 type; /* enum v4l2_tuner_type */ - __u32 seek_upward; - __u32 wrap_around; - __u32 spacing; - __u32 rangelow; - __u32 rangehigh; - __u32 reserved[5]; -}; - -/* - * R D S - */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_rds_data { - __u8 lsb; - __u8 msb; - __u8 block; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define V4L2_RDS_BLOCK_MSK 0x7 -#define V4L2_RDS_BLOCK_A 0 -#define V4L2_RDS_BLOCK_B 1 -#define V4L2_RDS_BLOCK_C 2 -#define V4L2_RDS_BLOCK_D 3 -#define V4L2_RDS_BLOCK_C_ALT 4 -#define V4L2_RDS_BLOCK_INVALID 7 - -#define V4L2_RDS_BLOCK_CORRECTED 0x40 -#define V4L2_RDS_BLOCK_ERROR 0x80 - -/* - * A U D I O - */ -struct v4l2_audio { - __u32 index; - __u8 name[32]; - __u32 capability; - __u32 mode; - __u32 reserved[2]; -}; - -/* Flags for the 'capability' field */ -#define V4L2_AUDCAP_STEREO 0x00001 -#define V4L2_AUDCAP_AVL 0x00002 - -/* Flags for the 'mode' field */ -#define V4L2_AUDMODE_AVL 0x00001 - -struct v4l2_audioout { - __u32 index; - __u8 name[32]; - __u32 capability; - __u32 mode; - __u32 reserved[2]; -}; - -/* - * M P E G S E R V I C E S - * - * NOTE: EXPERIMENTAL API - */ -#if 1 -#define V4L2_ENC_IDX_FRAME_I (0) -#define V4L2_ENC_IDX_FRAME_P (1) -#define V4L2_ENC_IDX_FRAME_B (2) -#define V4L2_ENC_IDX_FRAME_MASK (0xf) - -struct v4l2_enc_idx_entry { - __u64 offset; - __u64 pts; - __u32 length; - __u32 flags; - __u32 reserved[2]; -}; - -#define V4L2_ENC_IDX_ENTRIES (64) -struct v4l2_enc_idx { - __u32 entries; - __u32 entries_cap; - __u32 reserved[4]; - struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES]; -}; - - -#define V4L2_ENC_CMD_START (0) -#define V4L2_ENC_CMD_STOP (1) -#define V4L2_ENC_CMD_PAUSE (2) -#define V4L2_ENC_CMD_RESUME (3) - -/* Flags for V4L2_ENC_CMD_STOP */ -#define V4L2_ENC_CMD_STOP_AT_GOP_END (1 << 0) - -struct v4l2_encoder_cmd { - __u32 cmd; - __u32 flags; - union { - struct { - __u32 data[8]; - } raw; - }; -}; - -/* Decoder commands */ -#define V4L2_DEC_CMD_START (0) -#define V4L2_DEC_CMD_STOP (1) -#define V4L2_DEC_CMD_PAUSE (2) -#define V4L2_DEC_CMD_RESUME (3) - -/* Flags for V4L2_DEC_CMD_START */ -#define V4L2_DEC_CMD_START_MUTE_AUDIO (1 << 0) - -/* Flags for V4L2_DEC_CMD_PAUSE */ -#define V4L2_DEC_CMD_PAUSE_TO_BLACK (1 << 0) - -/* Flags for V4L2_DEC_CMD_STOP */ -#define V4L2_DEC_CMD_STOP_TO_BLACK (1 << 0) -#define V4L2_DEC_CMD_STOP_IMMEDIATELY (1 << 1) - -/* Play format requirements (returned by the driver): */ - -/* The decoder has no special format requirements */ -#define V4L2_DEC_START_FMT_NONE (0) -/* The decoder requires full GOPs */ -#define V4L2_DEC_START_FMT_GOP (1) - -/* The structure must be zeroed before use by the application - This ensures it can be extended safely in the future. */ -struct v4l2_decoder_cmd { - __u32 cmd; - __u32 flags; - union { - struct { - __u64 pts; - } stop; - - struct { - /* 0 or 1000 specifies normal speed, - 1 specifies forward single stepping, - -1 specifies backward single stepping, - >1: playback at speed/1000 of the normal speed, - <-1: reverse playback at (-speed/1000) of the normal speed. */ - __s32 speed; - __u32 format; - } start; - - struct { - __u32 data[16]; - } raw; - }; -}; -#endif - - -/* - * D A T A S E R V I C E S ( V B I ) - * - * Data services API by Michael Schimek - */ - -/* Raw VBI */ -struct v4l2_vbi_format { - __u32 sampling_rate; /* in 1 Hz */ - __u32 offset; - __u32 samples_per_line; - __u32 sample_format; /* V4L2_PIX_FMT_* */ - __s32 start[2]; - __u32 count[2]; - __u32 flags; /* V4L2_VBI_* */ - __u32 reserved[2]; /* must be zero */ -}; - -/* VBI flags */ -#define V4L2_VBI_UNSYNC (1 << 0) -#define V4L2_VBI_INTERLACED (1 << 1) - -/* Sliced VBI - * - * This implements is a proposal V4L2 API to allow SLICED VBI - * required for some hardware encoders. It should change without - * notice in the definitive implementation. - */ - -struct v4l2_sliced_vbi_format { - __u16 service_set; - /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field - service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field - (equals frame lines 313-336 for 625 line video - standards, 263-286 for 525 line standards) */ - __u16 service_lines[2][24]; - __u32 io_size; - __u32 reserved[2]; /* must be zero */ -}; - -/* Teletext World System Teletext - (WST), defined on ITU-R BT.653-2 */ -#define V4L2_SLICED_TELETEXT_B (0x0001) -/* Video Program System, defined on ETS 300 231*/ -#define V4L2_SLICED_VPS (0x0400) -/* Closed Caption, defined on EIA-608 */ -#define V4L2_SLICED_CAPTION_525 (0x1000) -/* Wide Screen System, defined on ITU-R BT1119.1 */ -#define V4L2_SLICED_WSS_625 (0x4000) - -#define V4L2_SLICED_VBI_525 (V4L2_SLICED_CAPTION_525) -#define V4L2_SLICED_VBI_625 (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625) - -struct v4l2_sliced_vbi_cap { - __u16 service_set; - /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field - service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field - (equals frame lines 313-336 for 625 line video - standards, 263-286 for 525 line standards) */ - __u16 service_lines[2][24]; - __u32 type; /* enum v4l2_buf_type */ - __u32 reserved[3]; /* must be 0 */ -}; - -struct v4l2_sliced_vbi_data { - __u32 id; - __u32 field; /* 0: first field, 1: second field */ - __u32 line; /* 1-23 */ - __u32 reserved; /* must be 0 */ - __u8 data[48]; -}; - -/* - * Sliced VBI data inserted into MPEG Streams - */ - -/* - * V4L2_MPEG_STREAM_VBI_FMT_IVTV: - * - * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an - * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI - * data - * - * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header - * definitions are not included here. See the MPEG-2 specifications for details - * on these headers. - */ - -/* Line type IDs */ -#define V4L2_MPEG_VBI_IVTV_TELETEXT_B (1) -#define V4L2_MPEG_VBI_IVTV_CAPTION_525 (4) -#define V4L2_MPEG_VBI_IVTV_WSS_625 (5) -#define V4L2_MPEG_VBI_IVTV_VPS (7) - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_mpeg_vbi_itv0_line { - __u8 id; /* One of V4L2_MPEG_VBI_IVTV_* above */ - __u8 data[42]; /* Sliced VBI data for the line */ -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_mpeg_vbi_itv0 { - __le32 linemask[2]; /* Bitmasks of VBI service lines present */ - struct v4l2_mpeg_vbi_itv0_line line[35]; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_mpeg_vbi_ITV0 { - struct v4l2_mpeg_vbi_itv0_line line[36]; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define V4L2_MPEG_VBI_IVTV_MAGIC0 "itv0" -#define V4L2_MPEG_VBI_IVTV_MAGIC1 "ITV0" - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_mpeg_vbi_fmt_ivtv { - __u8 magic[4]; - union { - struct v4l2_mpeg_vbi_itv0 itv0; - struct v4l2_mpeg_vbi_ITV0 ITV0; - }; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -/* - * A G G R E G A T E S T R U C T U R E S - */ - -/** - * struct v4l2_plane_pix_format - additional, per-plane format definition - * @sizeimage: maximum size in bytes required for data, for which - * this plane will be used - * @bytesperline: distance in bytes between the leftmost pixels in two - * adjacent lines - */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_plane_pix_format { - __u32 sizeimage; - __u16 bytesperline; - __u16 reserved[7]; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -/** - * struct v4l2_pix_format_mplane - multiplanar format definition - * @width: image width in pixels - * @height: image height in pixels - * @pixelformat: little endian four character code (fourcc) - * @field: enum v4l2_field; field order (for interlaced video) - * @colorspace: enum v4l2_colorspace; supplemental to pixelformat - * @plane_fmt: per-plane information - * @num_planes: number of planes for this format - */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_pix_format_mplane { - __u32 width; - __u32 height; - __u32 pixelformat; - __u32 field; - __u32 colorspace; - - struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES]; - __u8 num_planes; - __u8 reserved[11]; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -/** - * struct v4l2_format - stream data format - * @type: enum v4l2_buf_type; type of the data stream - * @pix: definition of an image format - * @pix_mp: definition of a multiplanar image format - * @win: definition of an overlaid image - * @vbi: raw VBI capture or output parameters - * @sliced: sliced VBI capture or output parameters - * @raw_data: placeholder for future extensions and custom formats - */ -struct v4l2_format { - __u32 type; - union { - struct v4l2_pix_format pix; /* V4L2_BUF_TYPE_VIDEO_CAPTURE */ - struct v4l2_pix_format_mplane pix_mp; /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */ - struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */ - struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */ - struct v4l2_sliced_vbi_format sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */ - __u8 raw_data[200]; /* user-defined */ - } fmt; -}; - -/* Stream type-dependent parameters - */ -struct v4l2_streamparm { - __u32 type; /* enum v4l2_buf_type */ - union { - struct v4l2_captureparm capture; - struct v4l2_outputparm output; - __u8 raw_data[200]; /* user-defined */ - } parm; -}; - -/* - * E V E N T S - */ - -#define V4L2_EVENT_ALL 0 -#define V4L2_EVENT_VSYNC 1 -#define V4L2_EVENT_EOS 2 -#define V4L2_EVENT_CTRL 3 -#define V4L2_EVENT_FRAME_SYNC 4 -#define V4L2_EVENT_PRIVATE_START 0x08000000 - -/* Payload for V4L2_EVENT_VSYNC */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_event_vsync { - /* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */ - __u8 field; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -/* Payload for V4L2_EVENT_CTRL */ -#define V4L2_EVENT_CTRL_CH_VALUE (1 << 0) -#define V4L2_EVENT_CTRL_CH_FLAGS (1 << 1) -#define V4L2_EVENT_CTRL_CH_RANGE (1 << 2) - -struct v4l2_event_ctrl { - __u32 changes; - __u32 type; - union { - __s32 value; - __s64 value64; - }; - __u32 flags; - __s32 minimum; - __s32 maximum; - __s32 step; - __s32 default_value; -}; - -struct v4l2_event_frame_sync { - __u32 frame_sequence; -}; - -struct v4l2_event { - __u32 type; - union { - struct v4l2_event_vsync vsync; - struct v4l2_event_ctrl ctrl; - struct v4l2_event_frame_sync frame_sync; - __u8 data[64]; - } u; - __u32 pending; - __u32 sequence; - //struct timespec timestamp; - __u32 timestamp; - __u32 id; - __u32 reserved[8]; -}; - -#define V4L2_EVENT_SUB_FL_SEND_INITIAL (1 << 0) -#define V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK (1 << 1) - -struct v4l2_event_subscription { - __u32 type; - __u32 id; - __u32 flags; - __u32 reserved[5]; -}; - -/* - * A D V A N C E D D E B U G G I N G - * - * NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS! - * FOR DEBUGGING, TESTING AND INTERNAL USE ONLY! - */ - -/* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */ - -#define V4L2_CHIP_MATCH_BRIDGE 0 /* Match against chip ID on the bridge (0 for the bridge) */ -#define V4L2_CHIP_MATCH_SUBDEV 4 /* Match against subdev index */ - -/* The following four defines are no longer in use */ -#define V4L2_CHIP_MATCH_HOST V4L2_CHIP_MATCH_BRIDGE -#define V4L2_CHIP_MATCH_I2C_DRIVER 1 /* Match against I2C driver name */ -#define V4L2_CHIP_MATCH_I2C_ADDR 2 /* Match against I2C 7-bit address */ -#define V4L2_CHIP_MATCH_AC97 3 /* Match against ancillary AC97 chip */ - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_dbg_match { - __u32 type; /* Match type */ - union { /* Match this chip, meaning determined by type */ - __u32 addr; - char name[32]; - }; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_dbg_register { - struct v4l2_dbg_match match; - __u32 size; /* register size in bytes */ - __u64 reg; - __u64 val; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -#define V4L2_CHIP_FL_READABLE (1 << 0) -#define V4L2_CHIP_FL_WRITABLE (1 << 1) - -/* VIDIOC_DBG_G_CHIP_INFO */ -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_begin.h" -#endif -RTW_PACK_STRUCT_BEGIN -struct v4l2_dbg_chip_info { - struct v4l2_dbg_match match; - char name[32]; - __u32 flags; - __u32 reserved[32]; -} //__attribute__ ((packed)); -RTW_PACK_STRUCT_STRUCT; -RTW_PACK_STRUCT_END -#ifdef RTW_PACK_STRUCT_USE_INCLUDES -# include "pack_end.h" -#endif - -/** - * struct v4l2_create_buffers - VIDIOC_CREATE_BUFS argument - * @index: on return, index of the first created buffer - * @count: entry: number of requested buffers, - * return: number of created buffers - * @memory: enum v4l2_memory; buffer memory type - * @format: frame format, for which buffers are requested - * @reserved: future extensions - */ -struct v4l2_create_buffers { - __u32 index; - __u32 count; - __u32 memory; - struct v4l2_format format; - __u32 reserved[8]; -}; - -/* - * I O C T L C O D E S F O R V I D E O D E V I C E S - * - */ -#define VIDIOC_QUERYCAP _IOR('V', 0, struct v4l2_capability) -#define VIDIOC_RESERVED _IO('V', 1) -#define VIDIOC_ENUM_FMT _IOWR('V', 2, struct v4l2_fmtdesc) -#define VIDIOC_G_FMT _IOWR('V', 4, struct v4l2_format) -#define VIDIOC_S_FMT _IOWR('V', 5, struct v4l2_format) -#define VIDIOC_REQBUFS _IOWR('V', 8, struct v4l2_requestbuffers) -#define VIDIOC_QUERYBUF _IOWR('V', 9, struct v4l2_buffer) -#define VIDIOC_G_FBUF _IOR('V', 10, struct v4l2_framebuffer) -#define VIDIOC_S_FBUF _IOW('V', 11, struct v4l2_framebuffer) -#define VIDIOC_OVERLAY _IOW('V', 14, int) -#define VIDIOC_QBUF _IOWR('V', 15, struct v4l2_buffer) -#define VIDIOC_EXPBUF _IOWR('V', 16, struct v4l2_exportbuffer) -#define VIDIOC_DQBUF _IOWR('V', 17, struct v4l2_buffer) -#define VIDIOC_STREAMON _IOW('V', 18, int) -#define VIDIOC_STREAMOFF _IOW('V', 19, int) -#define VIDIOC_G_PARM _IOWR('V', 21, struct v4l2_streamparm) -#define VIDIOC_S_PARM _IOWR('V', 22, struct v4l2_streamparm) -#define VIDIOC_G_STD _IOR('V', 23, v4l2_std_id) -#define VIDIOC_S_STD _IOW('V', 24, v4l2_std_id) -#define VIDIOC_ENUMSTD _IOWR('V', 25, struct v4l2_standard) -#define VIDIOC_ENUMINPUT _IOWR('V', 26, struct v4l2_input) -#define VIDIOC_G_CTRL _IOWR('V', 27, struct v4l2_control) -#define VIDIOC_S_CTRL _IOWR('V', 28, struct v4l2_control) -#define VIDIOC_G_TUNER _IOWR('V', 29, struct v4l2_tuner) -#define VIDIOC_S_TUNER _IOW('V', 30, struct v4l2_tuner) -#define VIDIOC_G_AUDIO _IOR('V', 33, struct v4l2_audio) -#define VIDIOC_S_AUDIO _IOW('V', 34, struct v4l2_audio) -#define VIDIOC_QUERYCTRL _IOWR('V', 36, struct v4l2_queryctrl) -#define VIDIOC_QUERYMENU _IOWR('V', 37, struct v4l2_querymenu) -#define VIDIOC_G_INPUT _IOR('V', 38, int) -#define VIDIOC_S_INPUT _IOWR('V', 39, int) -#define VIDIOC_G_OUTPUT _IOR('V', 46, int) -#define VIDIOC_S_OUTPUT _IOWR('V', 47, int) -#define VIDIOC_ENUMOUTPUT _IOWR('V', 48, struct v4l2_output) -#define VIDIOC_G_AUDOUT _IOR('V', 49, struct v4l2_audioout) -#define VIDIOC_S_AUDOUT _IOW('V', 50, struct v4l2_audioout) -#define VIDIOC_G_MODULATOR _IOWR('V', 54, struct v4l2_modulator) -#define VIDIOC_S_MODULATOR _IOW('V', 55, struct v4l2_modulator) -#define VIDIOC_G_FREQUENCY _IOWR('V', 56, struct v4l2_frequency) -#define VIDIOC_S_FREQUENCY _IOW('V', 57, struct v4l2_frequency) -#define VIDIOC_CROPCAP _IOWR('V', 58, struct v4l2_cropcap) -#define VIDIOC_G_CROP _IOWR('V', 59, struct v4l2_crop) -#define VIDIOC_S_CROP _IOW('V', 60, struct v4l2_crop) -#define VIDIOC_G_JPEGCOMP _IOR('V', 61, struct v4l2_jpegcompression) -#define VIDIOC_S_JPEGCOMP _IOW('V', 62, struct v4l2_jpegcompression) -#define VIDIOC_QUERYSTD _IOR('V', 63, v4l2_std_id) -#define VIDIOC_TRY_FMT _IOWR('V', 64, struct v4l2_format) -#define VIDIOC_ENUMAUDIO _IOWR('V', 65, struct v4l2_audio) -#define VIDIOC_ENUMAUDOUT _IOWR('V', 66, struct v4l2_audioout) -#define VIDIOC_G_PRIORITY _IOR('V', 67, __u32) /* enum v4l2_priority */ -#define VIDIOC_S_PRIORITY _IOW('V', 68, __u32) /* enum v4l2_priority */ -#define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap) -#define VIDIOC_LOG_STATUS _IO('V', 70) -#define VIDIOC_G_EXT_CTRLS _IOWR('V', 71, struct v4l2_ext_controls) -#define VIDIOC_S_EXT_CTRLS _IOWR('V', 72, struct v4l2_ext_controls) -#define VIDIOC_TRY_EXT_CTRLS _IOWR('V', 73, struct v4l2_ext_controls) -#define VIDIOC_ENUM_FRAMESIZES _IOWR('V', 74, struct v4l2_frmsizeenum) -#define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum) -#define VIDIOC_G_ENC_INDEX _IOR('V', 76, struct v4l2_enc_idx) -#define VIDIOC_ENCODER_CMD _IOWR('V', 77, struct v4l2_encoder_cmd) -#define VIDIOC_TRY_ENCODER_CMD _IOWR('V', 78, struct v4l2_encoder_cmd) - -/* Experimental, meant for debugging, testing and internal use. - Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined. - You must be root to use these ioctls. Never use these in applications! */ -#define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register) -#define VIDIOC_DBG_G_REGISTER _IOWR('V', 80, struct v4l2_dbg_register) - -#define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) - -#define VIDIOC_S_DV_TIMINGS _IOWR('V', 87, struct v4l2_dv_timings) -#define VIDIOC_G_DV_TIMINGS _IOWR('V', 88, struct v4l2_dv_timings) -#define VIDIOC_DQEVENT _IOR('V', 89, struct v4l2_event) -#define VIDIOC_SUBSCRIBE_EVENT _IOW('V', 90, struct v4l2_event_subscription) -#define VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription) - -/* Experimental, the below two ioctls may change over the next couple of kernel - versions */ -#define VIDIOC_CREATE_BUFS _IOWR('V', 92, struct v4l2_create_buffers) -#define VIDIOC_PREPARE_BUF _IOWR('V', 93, struct v4l2_buffer) - -/* Experimental selection API */ -#define VIDIOC_G_SELECTION _IOWR('V', 94, struct v4l2_selection) -#define VIDIOC_S_SELECTION _IOWR('V', 95, struct v4l2_selection) - -/* Experimental, these two ioctls may change over the next couple of kernel - versions. */ -#define VIDIOC_DECODER_CMD _IOWR('V', 96, struct v4l2_decoder_cmd) -#define VIDIOC_TRY_DECODER_CMD _IOWR('V', 97, struct v4l2_decoder_cmd) - -/* Experimental, these three ioctls may change over the next couple of kernel - versions. */ -#define VIDIOC_ENUM_DV_TIMINGS _IOWR('V', 98, struct v4l2_enum_dv_timings) -#define VIDIOC_QUERY_DV_TIMINGS _IOR('V', 99, struct v4l2_dv_timings) -#define VIDIOC_DV_TIMINGS_CAP _IOWR('V', 100, struct v4l2_dv_timings_cap) - -/* Experimental, this ioctl may change over the next couple of kernel - versions. */ -#define VIDIOC_ENUM_FREQ_BANDS _IOWR('V', 101, struct v4l2_frequency_band) - -/* Experimental, meant for debugging, testing and internal use. - Never use these in applications! */ -#define VIDIOC_DBG_G_CHIP_INFO _IOWR('V', 102, struct v4l2_dbg_chip_info) - -/* Reminder: when adding new ioctls please add support for them to - drivers/media/video/v4l2-compat-ioctl32.c as well! */ - -#define BASE_VIDIOC_PRIVATE 192 /* 192-255 are private */ - - -/*---------------------------------------------------imported from uapi_uvcvideo.h-------------------------------------*/ -/* - * Dynamic controls - */ - -/* Data types for UVC control data */ -#define UVC_CTRL_DATA_TYPE_RAW 0 -#define UVC_CTRL_DATA_TYPE_SIGNED 1 -#define UVC_CTRL_DATA_TYPE_UNSIGNED 2 -#define UVC_CTRL_DATA_TYPE_BOOLEAN 3 -#define UVC_CTRL_DATA_TYPE_ENUM 4 -#define UVC_CTRL_DATA_TYPE_BITMASK 5 - -/* Control flags */ -#define UVC_CTRL_FLAG_SET_CUR (1 << 0) -#define UVC_CTRL_FLAG_GET_CUR (1 << 1) -#define UVC_CTRL_FLAG_GET_MIN (1 << 2) -#define UVC_CTRL_FLAG_GET_MAX (1 << 3) -#define UVC_CTRL_FLAG_GET_RES (1 << 4) -#define UVC_CTRL_FLAG_GET_DEF (1 << 5) -/* Control should be saved at suspend and restored at resume. */ -#define UVC_CTRL_FLAG_RESTORE (1 << 6) -/* Control can be updated by the camera. */ -#define UVC_CTRL_FLAG_AUTO_UPDATE (1 << 7) - -#define UVC_CTRL_FLAG_GET_RANGE \ - (UVC_CTRL_FLAG_GET_CUR | UVC_CTRL_FLAG_GET_MIN | \ - UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES | \ - UVC_CTRL_FLAG_GET_DEF) - -struct uvc_xu_control_info { - __u8 entity[16]; - __u8 index; - __u8 selector; - __u16 size; - __u32 flags; -}; - -struct uvc_xu_control_mapping_old { - __u32 id; - __u8 name[32]; - __u8 entity[16]; - __u8 selector; - - __u8 size; - __u8 offset; - __u32 v4l2_type; - __u32 data_type; -}; - -struct uvc_xu_control { - __u8 unit; - __u8 selector; - __u16 size; - __u8 *data; -}; - -#define UVCIOC_CTRL_ADD _IOW('U', 1, struct uvc_xu_control_info) -#define UVCIOC_CTRL_MAP_OLD _IOWR('U', 2, struct uvc_xu_control_mapping_old) -#define UVCIOC_CTRL_GET _IOWR('U', 3, struct uvc_xu_control) -#define UVCIOC_CTRL_SET _IOW('U', 4, struct uvc_xu_control) - -struct uvc_menu_info { - __u32 value; - __u8 name[32]; -}; - -struct uvc_xu_control_mapping { - __u32 id; - __u8 name[32]; - __u8 entity[16]; - __u8 selector; - - __u8 size; - __u8 offset; - __u32 v4l2_type; - __u32 data_type; - - struct uvc_menu_info *menu_info; - __u32 menu_count; - - __u32 reserved[4]; -}; - -struct uvc_xu_control_query { - __u8 unit; - __u8 selector; - __u8 query; - __u16 size; - __u8 *data; -}; - -#define UVCIOC_CTRL_MAP _IOWR('u', 0x20, struct uvc_xu_control_mapping) -#define UVCIOC_CTRL_QUERY _IOWR('u', 0x21, struct uvc_xu_control_query) -/*--------------------------------------------end of uapi_uvcvideo.h-----------------------------------------------------*/ - -#endif /* _UAPI__LINUX_VIDEODEV2_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-async.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-async.h deleted file mode 100644 index d4acd1f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-async.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * V4L2 asynchronous subdevice registration API - * - * Copyright (C) 2012-2013, Guennadi Liakhovetski - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef V4L2_ASYNC_H -#define V4L2_ASYNC_H -#if 0 -#include -#include -#endif -#include "v4l2-osdep.h" - - -//struct device; -//struct device_node; -struct v4l2_device; -struct v4l2_subdev; -struct v4l2_async_notifier; - -/* A random max subdevice number, used to allocate an array on stack */ -#define V4L2_MAX_SUBDEVS 128U - -enum v4l2_async_match_type { - V4L2_ASYNC_MATCH_CUSTOM, - V4L2_ASYNC_MATCH_DEVNAME, - V4L2_ASYNC_MATCH_I2C, - V4L2_ASYNC_MATCH_OF, -}; - -/** - * struct v4l2_async_subdev - sub-device descriptor, as known to a bridge - * @bus_type: subdevice bus type to select the appropriate matching method - * @match: union of per-bus type matching data sets - * @list: used to link struct v4l2_async_subdev objects, waiting to be - * probed, to a notifier->waiting list - */ -struct v4l2_async_subdev { - enum v4l2_async_match_type match_type; - union { - struct { - const struct device_node *node; - } of; - struct { - const char *name; - } device_name; - struct { - int adapter_id; - unsigned short address; - } i2c; - struct { - bool (*match)(const char *dev_init_name, struct v4l2_async_subdev *); - void *priv; - } custom; - } match; - - /* v4l2-async core private: not to be used by drivers */ - struct list_head list; -}; - -/** - * v4l2_async_notifier - v4l2_device notifier data - * @num_subdevs:number of subdevices - * @subdevs: array of pointers to subdevice descriptors - * @v4l2_dev: pointer to struct v4l2_device - * @waiting: list of struct v4l2_async_subdev, waiting for their drivers - * @done: list of struct v4l2_subdev, already probed - * @list: member in a global list of notifiers - * @bound: a subdevice driver has successfully probed one of subdevices - * @complete: all subdevices have been probed successfully - * @unbind: a subdevice is leaving - */ -struct v4l2_async_notifier { - unsigned int num_subdevs; - struct v4l2_async_subdev **subdevs; - struct v4l2_device *v4l2_dev; - struct list_head waiting; - struct list_head done; - struct list_head list; - int (*bound)(struct v4l2_async_notifier *notifier, - struct v4l2_subdev *subdev, - struct v4l2_async_subdev *asd); - int (*complete)(struct v4l2_async_notifier *notifier); - void (*unbind)(struct v4l2_async_notifier *notifier, - struct v4l2_subdev *subdev, - struct v4l2_async_subdev *asd); -}; - -int v4l2_async_notifier_register(struct v4l2_device *v4l2_dev, - struct v4l2_async_notifier *notifier); -void v4l2_async_notifier_unregister(struct v4l2_async_notifier *notifier); -int v4l2_async_register_subdev(struct v4l2_subdev *sd); -void v4l2_async_unregister_subdev(struct v4l2_subdev *sd); -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-clk.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-clk.h deleted file mode 100644 index 0b01e30..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-clk.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * V4L2 clock service - * - * Copyright (C) 2012-2013, Guennadi Liakhovetski - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * ATTENTION: This is a temporary API and it shall be replaced by the generic - * clock API, when the latter becomes widely available. - */ - -#ifndef MEDIA_V4L2_CLK_H -#define MEDIA_V4L2_CLK_H - -#if 0 -#include -#include -#include -#endif -#include "v4l2-osdep.h" - - -//struct module; -//struct device; - -struct v4l2_clk { - struct LIST_HEADER list; - const struct v4l2_clk_ops *ops; - const char *dev_id; - const char *id; - int enable; - //struct mutex lock; /* Protect the enable count */ - _Mutex lock; - atomic_t use_count; - void *priv; -}; - -struct v4l2_clk_ops { - //struct module *owner; - int (*enable)(struct v4l2_clk *clk); - void (*disable)(struct v4l2_clk *clk); - unsigned long (*get_rate)(struct v4l2_clk *clk); - int (*set_rate)(struct v4l2_clk *clk, unsigned long); -}; - -struct v4l2_clk *v4l2_clk_register(const struct v4l2_clk_ops *ops, - const char *dev_name, - const char *name, void *priv); -void v4l2_clk_unregister(struct v4l2_clk *clk); -struct v4l2_clk *v4l2_clk_get(const char *id); -void v4l2_clk_put(struct v4l2_clk *clk); -int v4l2_clk_enable(struct v4l2_clk *clk); -void v4l2_clk_disable(struct v4l2_clk *clk); -unsigned long v4l2_clk_get_rate(struct v4l2_clk *clk); -int v4l2_clk_set_rate(struct v4l2_clk *clk, unsigned long rate); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-common.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-common.h deleted file mode 100644 index f946f2f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-common.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - v4l2 common internal API header - - This header contains internal shared ioctl definitions for use by the - internal low-level v4l2 drivers. - Each ioctl begins with VIDIOC_INT_ to clearly mark that it is an internal - define, - - Copyright (C) 2005 Hans Verkuil - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef V4L2_COMMON_H_ -#define V4L2_COMMON_H_ - -#include "v4l2-dev.h" - - -/* Common printk constucts for v4l-i2c drivers. These macros create a unique - prefix consisting of the driver name, the adapter number and the i2c - address. */ -#if 0 -#define v4l_printk(level, name, adapter, addr, fmt, arg...) \ - printk(level "%s %d-%04x: " fmt, name, i2c_adapter_id(adapter), addr , ## arg) - -#define v4l_client_printk(level, client, fmt, arg...) \ - v4l_printk(level, (client)->driver->driver.name, (client)->adapter, \ - (client)->addr, fmt , ## arg) - -#define v4l_err(client, fmt, arg...) \ - v4l_client_printk(KERN_ERR, client, fmt , ## arg) - -#define v4l_warn(client, fmt, arg...) \ - v4l_client_printk(KERN_WARNING, client, fmt , ## arg) - -#define v4l_info(client, fmt, arg...) \ - v4l_client_printk(KERN_INFO, client, fmt , ## arg) - -/* These three macros assume that the debug level is set with a module - parameter called 'debug'. */ -#define v4l_dbg(level, debug, client, fmt, arg...) \ - do { \ - if (debug >= (level)) \ - v4l_client_printk(KERN_DEBUG, client, fmt , ## arg); \ - } while (0) -#endif -/* ------------------------------------------------------------------------- */ -#if 0 -/* These printk constructs can be used with v4l2_device and v4l2_subdev */ -#define v4l2_printk(level, dev, fmt, arg...) \ - printk(level "%s: " fmt, (dev)->name , ## arg) - -#define v4l2_err(dev, fmt, arg...) \ - v4l2_printk(KERN_ERR, dev, fmt , ## arg) - -#define v4l2_warn(dev, fmt, arg...) \ - v4l2_printk(KERN_WARNING, dev, fmt , ## arg) - -#define v4l2_info(dev, fmt, arg...) \ - v4l2_printk(KERN_INFO, dev, fmt , ## arg) - -/* These three macros assume that the debug level is set with a module - parameter called 'debug'. */ -#define v4l2_dbg(level, debug, dev, fmt, arg...) \ - do { \ - if (debug >= (level)) \ - v4l2_printk(KERN_DEBUG, dev, fmt , ## arg); \ - } while (0) -#endif -/* ------------------------------------------------------------------------- */ -//edit by Ian -- remove control helper functions -#if 0 -/* Control helper functions */ - -int v4l2_ctrl_check(struct v4l2_ext_control *ctrl, struct v4l2_queryctrl *qctrl, - const char * const *menu_items); -const char *v4l2_ctrl_get_name(u32 id); -const char * const *v4l2_ctrl_get_menu(u32 id); -const s64 *v4l2_ctrl_get_int_menu(u32 id, u32 *len); -int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 step, s32 def); -int v4l2_ctrl_query_menu(struct v4l2_querymenu *qmenu, - struct v4l2_queryctrl *qctrl, const char * const *menu_items); -#define V4L2_CTRL_MENU_IDS_END (0xffffffff) -int v4l2_ctrl_query_menu_valid_items(struct v4l2_querymenu *qmenu, const u32 *ids); -#endif -/* Note: ctrl_classes points to an array of u32 pointers. Each u32 array is a - 0-terminated array of control IDs. Each array must be sorted low to high - and belong to the same control class. The array of u32 pointers must also - be sorted, from low class IDs to high class IDs. */ -//u32 v4l2_ctrl_next(const u32 * const *ctrl_classes, u32 id); - -/* ------------------------------------------------------------------------- */ - -/* I2C Helper functions */ -#if 0 -struct i2c_driver; -struct i2c_adapter; -struct i2c_client; -struct i2c_device_id; -struct v4l2_device; -struct v4l2_subdev; -struct v4l2_subdev_ops; - - -/* Load an i2c module and return an initialized v4l2_subdev struct. - The client_type argument is the name of the chip that's on the adapter. */ -struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev, - struct i2c_adapter *adapter, const char *client_type, - u8 addr, const unsigned short *probe_addrs); - -struct i2c_board_info; - -struct v4l2_subdev *v4l2_i2c_new_subdev_board(struct v4l2_device *v4l2_dev, - struct i2c_adapter *adapter, struct i2c_board_info *info, - const unsigned short *probe_addrs); - -/* Initialize a v4l2_subdev with data from an i2c_client struct */ -void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client, - const struct v4l2_subdev_ops *ops); -/* Return i2c client address of v4l2_subdev. */ -unsigned short v4l2_i2c_subdev_addr(struct v4l2_subdev *sd); - -enum v4l2_i2c_tuner_type { - ADDRS_RADIO, /* Radio tuner addresses */ - ADDRS_DEMOD, /* Demod tuner addresses */ - ADDRS_TV, /* TV tuner addresses */ - /* TV tuner addresses if demod is present, this excludes - addresses used by the demodulator from the list of - candidates. */ - ADDRS_TV_WITH_DEMOD, -}; -/* Return a list of I2C tuner addresses to probe. Use only if the tuner - addresses are unknown. */ -const unsigned short *v4l2_i2c_tuner_addrs(enum v4l2_i2c_tuner_type type); - -/* ------------------------------------------------------------------------- */ - -/* SPI Helper functions */ -#if defined(CONFIG_SPI) - -#include - -struct spi_device; - -/* Load an spi module and return an initialized v4l2_subdev struct. - The client_type argument is the name of the chip that's on the adapter. */ -struct v4l2_subdev *v4l2_spi_new_subdev(struct v4l2_device *v4l2_dev, - struct spi_master *master, struct spi_board_info *info); - -/* Initialize a v4l2_subdev with data from an spi_device struct */ -void v4l2_spi_subdev_init(struct v4l2_subdev *sd, struct spi_device *spi, - const struct v4l2_subdev_ops *ops); -#endif -#endif -/* ------------------------------------------------------------------------- */ -#if 0 -/* Note: these remaining ioctls/structs should be removed as well, but they are - still used in tuner-simple.c (TUNER_SET_CONFIG), cx18/ivtv (RESET) and - v4l2-int-device.h (v4l2_routing). To remove these ioctls some more cleanup - is needed in those modules. */ - -/* s_config */ -struct v4l2_priv_tun_config { - int tuner; - void *priv; -}; -#define TUNER_SET_CONFIG _IOW('d', 92, struct v4l2_priv_tun_config) - -#define VIDIOC_INT_RESET _IOW ('d', 102, u32) - -struct v4l2_routing { - u32 input; - u32 output; -}; -#endif -/* ------------------------------------------------------------------------- */ - -/* Miscellaneous helper functions */ -#if 0 -void v4l_bound_align_image(u32*w, unsigned int wmin, - unsigned int wmax, unsigned int walign, - u32 *h, unsigned int hmin, - unsigned int hmax, unsigned int halign, - unsigned int salign); - -struct v4l2_discrete_probe { - const struct v4l2_frmsize_discrete *sizes; - int num_sizes; -}; - -const struct v4l2_frmsize_discrete *v4l2_find_nearest_format( - const struct v4l2_discrete_probe *probe, - s32 width, s32 height); -#endif -//void v4l2_get_timestamp(struct timeval *tv); - -#endif /* V4L2_COMMON_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-controls.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-controls.h deleted file mode 100644 index 083bb5a..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-controls.h +++ /dev/null @@ -1,885 +0,0 @@ -/* - * Video for Linux Two controls header file - * - * Copyright (C) 1999-2012 the contributors - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Alternatively you can redistribute this file under the terms of the - * BSD license as stated below: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. The names of its contributors may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The contents of this header was split off from videodev2.h. All control - * definitions should be added to this header, which is included by - * videodev2.h. - */ - -#ifndef __LINUX_V4L2_CONTROLS_H -#define __LINUX_V4L2_CONTROLS_H - -/* Control classes */ -#define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */ -#define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */ -#define V4L2_CTRL_CLASS_CAMERA 0x009a0000 /* Camera class controls */ -#define V4L2_CTRL_CLASS_FM_TX 0x009b0000 /* FM Modulator controls */ -#define V4L2_CTRL_CLASS_FLASH 0x009c0000 /* Camera flash controls */ -#define V4L2_CTRL_CLASS_JPEG 0x009d0000 /* JPEG-compression controls */ -#define V4L2_CTRL_CLASS_IMAGE_SOURCE 0x009e0000 /* Image source controls */ -#define V4L2_CTRL_CLASS_IMAGE_PROC 0x009f0000 /* Image processing controls */ -#define V4L2_CTRL_CLASS_DV 0x00a00000 /* Digital Video controls */ -#define V4L2_CTRL_CLASS_FM_RX 0x00a10000 /* FM Receiver controls */ - -/* User-class control IDs */ - -#define V4L2_CID_BASE (V4L2_CTRL_CLASS_USER | 0x900) -#define V4L2_CID_USER_BASE V4L2_CID_BASE -#define V4L2_CID_USER_CLASS (V4L2_CTRL_CLASS_USER | 1) -#define V4L2_CID_BRIGHTNESS (V4L2_CID_BASE+0) -#define V4L2_CID_CONTRAST (V4L2_CID_BASE+1) -#define V4L2_CID_SATURATION (V4L2_CID_BASE+2) -#define V4L2_CID_HUE (V4L2_CID_BASE+3) -#define V4L2_CID_AUDIO_VOLUME (V4L2_CID_BASE+5) -#define V4L2_CID_AUDIO_BALANCE (V4L2_CID_BASE+6) -#define V4L2_CID_AUDIO_BASS (V4L2_CID_BASE+7) -#define V4L2_CID_AUDIO_TREBLE (V4L2_CID_BASE+8) -#define V4L2_CID_AUDIO_MUTE (V4L2_CID_BASE+9) -#define V4L2_CID_AUDIO_LOUDNESS (V4L2_CID_BASE+10) -#define V4L2_CID_BLACK_LEVEL (V4L2_CID_BASE+11) /* Deprecated */ -#define V4L2_CID_AUTO_WHITE_BALANCE (V4L2_CID_BASE+12) -#define V4L2_CID_DO_WHITE_BALANCE (V4L2_CID_BASE+13) -#define V4L2_CID_RED_BALANCE (V4L2_CID_BASE+14) -#define V4L2_CID_BLUE_BALANCE (V4L2_CID_BASE+15) -#define V4L2_CID_GAMMA (V4L2_CID_BASE+16) -#define V4L2_CID_WHITENESS (V4L2_CID_GAMMA) /* Deprecated */ -#define V4L2_CID_EXPOSURE (V4L2_CID_BASE+17) -#define V4L2_CID_AUTOGAIN (V4L2_CID_BASE+18) -#define V4L2_CID_GAIN (V4L2_CID_BASE+19) -#define V4L2_CID_HFLIP (V4L2_CID_BASE+20) -#define V4L2_CID_VFLIP (V4L2_CID_BASE+21) - -#define V4L2_CID_POWER_LINE_FREQUENCY (V4L2_CID_BASE+24) -enum v4l2_power_line_frequency { - V4L2_CID_POWER_LINE_FREQUENCY_DISABLED = 0, - V4L2_CID_POWER_LINE_FREQUENCY_50HZ = 1, - V4L2_CID_POWER_LINE_FREQUENCY_60HZ = 2, - V4L2_CID_POWER_LINE_FREQUENCY_AUTO = 3, -}; -#define V4L2_CID_HUE_AUTO (V4L2_CID_BASE+25) -#define V4L2_CID_WHITE_BALANCE_TEMPERATURE (V4L2_CID_BASE+26) -#define V4L2_CID_SHARPNESS (V4L2_CID_BASE+27) -#define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) -#define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) -#define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) -#define V4L2_CID_COLORFX (V4L2_CID_BASE+31) -enum v4l2_colorfx { - V4L2_COLORFX_NONE = 0, - V4L2_COLORFX_BW = 1, - V4L2_COLORFX_SEPIA = 2, - V4L2_COLORFX_NEGATIVE = 3, - V4L2_COLORFX_EMBOSS = 4, - V4L2_COLORFX_SKETCH = 5, - V4L2_COLORFX_SKY_BLUE = 6, - V4L2_COLORFX_GRASS_GREEN = 7, - V4L2_COLORFX_SKIN_WHITEN = 8, - V4L2_COLORFX_VIVID = 9, - V4L2_COLORFX_AQUA = 10, - V4L2_COLORFX_ART_FREEZE = 11, - V4L2_COLORFX_SILHOUETTE = 12, - V4L2_COLORFX_SOLARIZATION = 13, - V4L2_COLORFX_ANTIQUE = 14, - V4L2_COLORFX_SET_CBCR = 15, -}; -#define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32) -#define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33) - -#define V4L2_CID_ROTATE (V4L2_CID_BASE+34) -#define V4L2_CID_BG_COLOR (V4L2_CID_BASE+35) - -#define V4L2_CID_CHROMA_GAIN (V4L2_CID_BASE+36) - -#define V4L2_CID_ILLUMINATORS_1 (V4L2_CID_BASE+37) -#define V4L2_CID_ILLUMINATORS_2 (V4L2_CID_BASE+38) - -#define V4L2_CID_MIN_BUFFERS_FOR_CAPTURE (V4L2_CID_BASE+39) -#define V4L2_CID_MIN_BUFFERS_FOR_OUTPUT (V4L2_CID_BASE+40) - -#define V4L2_CID_ALPHA_COMPONENT (V4L2_CID_BASE+41) -#define V4L2_CID_COLORFX_CBCR (V4L2_CID_BASE+42) - -/* last CID + 1 */ -#define V4L2_CID_LASTP1 (V4L2_CID_BASE+43) - -/* USER-class private control IDs */ - -/* The base for the meye driver controls. See linux/meye.h for the list - * of controls. We reserve 16 controls for this driver. */ -#define V4L2_CID_USER_MEYE_BASE (V4L2_CID_USER_BASE + 0x1000) - -/* The base for the bttv driver controls. - * We reserve 32 controls for this driver. */ -#define V4L2_CID_USER_BTTV_BASE (V4L2_CID_USER_BASE + 0x1010) - - -/* The base for the s2255 driver controls. - * We reserve 16 controls for this driver. */ -#define V4L2_CID_USER_S2255_BASE (V4L2_CID_USER_BASE + 0x1030) - -/* The base for the si476x driver controls. See include/media/si476x.h for the list - * of controls. Total of 16 controls is reserved for this driver */ -#define V4L2_CID_USER_SI476X_BASE (V4L2_CID_USER_BASE + 0x1040) - -/* MPEG-class control IDs */ -/* The MPEG controls are applicable to all codec controls - * and the 'MPEG' part of the define is historical */ - -#define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) -#define V4L2_CID_MPEG_CLASS (V4L2_CTRL_CLASS_MPEG | 1) - -/* MPEG streams, specific to multiplexed streams */ -#define V4L2_CID_MPEG_STREAM_TYPE (V4L2_CID_MPEG_BASE+0) -enum v4l2_mpeg_stream_type { - V4L2_MPEG_STREAM_TYPE_MPEG2_PS = 0, /* MPEG-2 program stream */ - V4L2_MPEG_STREAM_TYPE_MPEG2_TS = 1, /* MPEG-2 transport stream */ - V4L2_MPEG_STREAM_TYPE_MPEG1_SS = 2, /* MPEG-1 system stream */ - V4L2_MPEG_STREAM_TYPE_MPEG2_DVD = 3, /* MPEG-2 DVD-compatible stream */ - V4L2_MPEG_STREAM_TYPE_MPEG1_VCD = 4, /* MPEG-1 VCD-compatible stream */ - V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD = 5, /* MPEG-2 SVCD-compatible stream */ -}; -#define V4L2_CID_MPEG_STREAM_PID_PMT (V4L2_CID_MPEG_BASE+1) -#define V4L2_CID_MPEG_STREAM_PID_AUDIO (V4L2_CID_MPEG_BASE+2) -#define V4L2_CID_MPEG_STREAM_PID_VIDEO (V4L2_CID_MPEG_BASE+3) -#define V4L2_CID_MPEG_STREAM_PID_PCR (V4L2_CID_MPEG_BASE+4) -#define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO (V4L2_CID_MPEG_BASE+5) -#define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO (V4L2_CID_MPEG_BASE+6) -#define V4L2_CID_MPEG_STREAM_VBI_FMT (V4L2_CID_MPEG_BASE+7) -enum v4l2_mpeg_stream_vbi_fmt { - V4L2_MPEG_STREAM_VBI_FMT_NONE = 0, /* No VBI in the MPEG stream */ - V4L2_MPEG_STREAM_VBI_FMT_IVTV = 1, /* VBI in private packets, IVTV format */ -}; - -/* MPEG audio controls specific to multiplexed streams */ -#define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ (V4L2_CID_MPEG_BASE+100) -enum v4l2_mpeg_audio_sampling_freq { - V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100 = 0, - V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 = 1, - V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000 = 2, -}; -#define V4L2_CID_MPEG_AUDIO_ENCODING (V4L2_CID_MPEG_BASE+101) -enum v4l2_mpeg_audio_encoding { - V4L2_MPEG_AUDIO_ENCODING_LAYER_1 = 0, - V4L2_MPEG_AUDIO_ENCODING_LAYER_2 = 1, - V4L2_MPEG_AUDIO_ENCODING_LAYER_3 = 2, - V4L2_MPEG_AUDIO_ENCODING_AAC = 3, - V4L2_MPEG_AUDIO_ENCODING_AC3 = 4, -}; -#define V4L2_CID_MPEG_AUDIO_L1_BITRATE (V4L2_CID_MPEG_BASE+102) -enum v4l2_mpeg_audio_l1_bitrate { - V4L2_MPEG_AUDIO_L1_BITRATE_32K = 0, - V4L2_MPEG_AUDIO_L1_BITRATE_64K = 1, - V4L2_MPEG_AUDIO_L1_BITRATE_96K = 2, - V4L2_MPEG_AUDIO_L1_BITRATE_128K = 3, - V4L2_MPEG_AUDIO_L1_BITRATE_160K = 4, - V4L2_MPEG_AUDIO_L1_BITRATE_192K = 5, - V4L2_MPEG_AUDIO_L1_BITRATE_224K = 6, - V4L2_MPEG_AUDIO_L1_BITRATE_256K = 7, - V4L2_MPEG_AUDIO_L1_BITRATE_288K = 8, - V4L2_MPEG_AUDIO_L1_BITRATE_320K = 9, - V4L2_MPEG_AUDIO_L1_BITRATE_352K = 10, - V4L2_MPEG_AUDIO_L1_BITRATE_384K = 11, - V4L2_MPEG_AUDIO_L1_BITRATE_416K = 12, - V4L2_MPEG_AUDIO_L1_BITRATE_448K = 13, -}; -#define V4L2_CID_MPEG_AUDIO_L2_BITRATE (V4L2_CID_MPEG_BASE+103) -enum v4l2_mpeg_audio_l2_bitrate { - V4L2_MPEG_AUDIO_L2_BITRATE_32K = 0, - V4L2_MPEG_AUDIO_L2_BITRATE_48K = 1, - V4L2_MPEG_AUDIO_L2_BITRATE_56K = 2, - V4L2_MPEG_AUDIO_L2_BITRATE_64K = 3, - V4L2_MPEG_AUDIO_L2_BITRATE_80K = 4, - V4L2_MPEG_AUDIO_L2_BITRATE_96K = 5, - V4L2_MPEG_AUDIO_L2_BITRATE_112K = 6, - V4L2_MPEG_AUDIO_L2_BITRATE_128K = 7, - V4L2_MPEG_AUDIO_L2_BITRATE_160K = 8, - V4L2_MPEG_AUDIO_L2_BITRATE_192K = 9, - V4L2_MPEG_AUDIO_L2_BITRATE_224K = 10, - V4L2_MPEG_AUDIO_L2_BITRATE_256K = 11, - V4L2_MPEG_AUDIO_L2_BITRATE_320K = 12, - V4L2_MPEG_AUDIO_L2_BITRATE_384K = 13, -}; -#define V4L2_CID_MPEG_AUDIO_L3_BITRATE (V4L2_CID_MPEG_BASE+104) -enum v4l2_mpeg_audio_l3_bitrate { - V4L2_MPEG_AUDIO_L3_BITRATE_32K = 0, - V4L2_MPEG_AUDIO_L3_BITRATE_40K = 1, - V4L2_MPEG_AUDIO_L3_BITRATE_48K = 2, - V4L2_MPEG_AUDIO_L3_BITRATE_56K = 3, - V4L2_MPEG_AUDIO_L3_BITRATE_64K = 4, - V4L2_MPEG_AUDIO_L3_BITRATE_80K = 5, - V4L2_MPEG_AUDIO_L3_BITRATE_96K = 6, - V4L2_MPEG_AUDIO_L3_BITRATE_112K = 7, - V4L2_MPEG_AUDIO_L3_BITRATE_128K = 8, - V4L2_MPEG_AUDIO_L3_BITRATE_160K = 9, - V4L2_MPEG_AUDIO_L3_BITRATE_192K = 10, - V4L2_MPEG_AUDIO_L3_BITRATE_224K = 11, - V4L2_MPEG_AUDIO_L3_BITRATE_256K = 12, - V4L2_MPEG_AUDIO_L3_BITRATE_320K = 13, -}; -#define V4L2_CID_MPEG_AUDIO_MODE (V4L2_CID_MPEG_BASE+105) -enum v4l2_mpeg_audio_mode { - V4L2_MPEG_AUDIO_MODE_STEREO = 0, - V4L2_MPEG_AUDIO_MODE_JOINT_STEREO = 1, - V4L2_MPEG_AUDIO_MODE_DUAL = 2, - V4L2_MPEG_AUDIO_MODE_MONO = 3, -}; -#define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION (V4L2_CID_MPEG_BASE+106) -enum v4l2_mpeg_audio_mode_extension { - V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4 = 0, - V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8 = 1, - V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12 = 2, - V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16 = 3, -}; -#define V4L2_CID_MPEG_AUDIO_EMPHASIS (V4L2_CID_MPEG_BASE+107) -enum v4l2_mpeg_audio_emphasis { - V4L2_MPEG_AUDIO_EMPHASIS_NONE = 0, - V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS = 1, - V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17 = 2, -}; -#define V4L2_CID_MPEG_AUDIO_CRC (V4L2_CID_MPEG_BASE+108) -enum v4l2_mpeg_audio_crc { - V4L2_MPEG_AUDIO_CRC_NONE = 0, - V4L2_MPEG_AUDIO_CRC_CRC16 = 1, -}; -#define V4L2_CID_MPEG_AUDIO_MUTE (V4L2_CID_MPEG_BASE+109) -#define V4L2_CID_MPEG_AUDIO_AAC_BITRATE (V4L2_CID_MPEG_BASE+110) -#define V4L2_CID_MPEG_AUDIO_AC3_BITRATE (V4L2_CID_MPEG_BASE+111) -enum v4l2_mpeg_audio_ac3_bitrate { - V4L2_MPEG_AUDIO_AC3_BITRATE_32K = 0, - V4L2_MPEG_AUDIO_AC3_BITRATE_40K = 1, - V4L2_MPEG_AUDIO_AC3_BITRATE_48K = 2, - V4L2_MPEG_AUDIO_AC3_BITRATE_56K = 3, - V4L2_MPEG_AUDIO_AC3_BITRATE_64K = 4, - V4L2_MPEG_AUDIO_AC3_BITRATE_80K = 5, - V4L2_MPEG_AUDIO_AC3_BITRATE_96K = 6, - V4L2_MPEG_AUDIO_AC3_BITRATE_112K = 7, - V4L2_MPEG_AUDIO_AC3_BITRATE_128K = 8, - V4L2_MPEG_AUDIO_AC3_BITRATE_160K = 9, - V4L2_MPEG_AUDIO_AC3_BITRATE_192K = 10, - V4L2_MPEG_AUDIO_AC3_BITRATE_224K = 11, - V4L2_MPEG_AUDIO_AC3_BITRATE_256K = 12, - V4L2_MPEG_AUDIO_AC3_BITRATE_320K = 13, - V4L2_MPEG_AUDIO_AC3_BITRATE_384K = 14, - V4L2_MPEG_AUDIO_AC3_BITRATE_448K = 15, - V4L2_MPEG_AUDIO_AC3_BITRATE_512K = 16, - V4L2_MPEG_AUDIO_AC3_BITRATE_576K = 17, - V4L2_MPEG_AUDIO_AC3_BITRATE_640K = 18, -}; -#define V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK (V4L2_CID_MPEG_BASE+112) -enum v4l2_mpeg_audio_dec_playback { - V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO = 0, - V4L2_MPEG_AUDIO_DEC_PLAYBACK_STEREO = 1, - V4L2_MPEG_AUDIO_DEC_PLAYBACK_LEFT = 2, - V4L2_MPEG_AUDIO_DEC_PLAYBACK_RIGHT = 3, - V4L2_MPEG_AUDIO_DEC_PLAYBACK_MONO = 4, - V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO = 5, -}; -#define V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK (V4L2_CID_MPEG_BASE+113) - -/* MPEG video controls specific to multiplexed streams */ -#define V4L2_CID_MPEG_VIDEO_ENCODING (V4L2_CID_MPEG_BASE+200) -enum v4l2_mpeg_video_encoding { - V4L2_MPEG_VIDEO_ENCODING_MPEG_1 = 0, - V4L2_MPEG_VIDEO_ENCODING_MPEG_2 = 1, - V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC = 2, -}; -#define V4L2_CID_MPEG_VIDEO_ASPECT (V4L2_CID_MPEG_BASE+201) -enum v4l2_mpeg_video_aspect { - V4L2_MPEG_VIDEO_ASPECT_1x1 = 0, - V4L2_MPEG_VIDEO_ASPECT_4x3 = 1, - V4L2_MPEG_VIDEO_ASPECT_16x9 = 2, - V4L2_MPEG_VIDEO_ASPECT_221x100 = 3, -}; -#define V4L2_CID_MPEG_VIDEO_B_FRAMES (V4L2_CID_MPEG_BASE+202) -#define V4L2_CID_MPEG_VIDEO_GOP_SIZE (V4L2_CID_MPEG_BASE+203) -#define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE (V4L2_CID_MPEG_BASE+204) -#define V4L2_CID_MPEG_VIDEO_PULLDOWN (V4L2_CID_MPEG_BASE+205) -#define V4L2_CID_MPEG_VIDEO_BITRATE_MODE (V4L2_CID_MPEG_BASE+206) -enum v4l2_mpeg_video_bitrate_mode { - V4L2_MPEG_VIDEO_BITRATE_MODE_VBR = 0, - V4L2_MPEG_VIDEO_BITRATE_MODE_CBR = 1, -}; -#define V4L2_CID_MPEG_VIDEO_BITRATE (V4L2_CID_MPEG_BASE+207) -#define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK (V4L2_CID_MPEG_BASE+208) -#define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_MPEG_BASE+209) -#define V4L2_CID_MPEG_VIDEO_MUTE (V4L2_CID_MPEG_BASE+210) -#define V4L2_CID_MPEG_VIDEO_MUTE_YUV (V4L2_CID_MPEG_BASE+211) -#define V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE (V4L2_CID_MPEG_BASE+212) -#define V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER (V4L2_CID_MPEG_BASE+213) -#define V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB (V4L2_CID_MPEG_BASE+214) -#define V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE (V4L2_CID_MPEG_BASE+215) -#define V4L2_CID_MPEG_VIDEO_HEADER_MODE (V4L2_CID_MPEG_BASE+216) -enum v4l2_mpeg_video_header_mode { - V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE = 0, - V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME = 1, - -}; -#define V4L2_CID_MPEG_VIDEO_MAX_REF_PIC (V4L2_CID_MPEG_BASE+217) -#define V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE (V4L2_CID_MPEG_BASE+218) -#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES (V4L2_CID_MPEG_BASE+219) -#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB (V4L2_CID_MPEG_BASE+220) -#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE (V4L2_CID_MPEG_BASE+221) -enum v4l2_mpeg_video_multi_slice_mode { - V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE = 0, - V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB = 1, - V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES = 2, -}; -#define V4L2_CID_MPEG_VIDEO_VBV_SIZE (V4L2_CID_MPEG_BASE+222) -#define V4L2_CID_MPEG_VIDEO_DEC_PTS (V4L2_CID_MPEG_BASE+223) -#define V4L2_CID_MPEG_VIDEO_DEC_FRAME (V4L2_CID_MPEG_BASE+224) -#define V4L2_CID_MPEG_VIDEO_VBV_DELAY (V4L2_CID_MPEG_BASE+225) -#define V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER (V4L2_CID_MPEG_BASE+226) - -#define V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP (V4L2_CID_MPEG_BASE+300) -#define V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP (V4L2_CID_MPEG_BASE+301) -#define V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP (V4L2_CID_MPEG_BASE+302) -#define V4L2_CID_MPEG_VIDEO_H263_MIN_QP (V4L2_CID_MPEG_BASE+303) -#define V4L2_CID_MPEG_VIDEO_H263_MAX_QP (V4L2_CID_MPEG_BASE+304) -#define V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP (V4L2_CID_MPEG_BASE+350) -#define V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP (V4L2_CID_MPEG_BASE+351) -#define V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP (V4L2_CID_MPEG_BASE+352) -#define V4L2_CID_MPEG_VIDEO_H264_MIN_QP (V4L2_CID_MPEG_BASE+353) -#define V4L2_CID_MPEG_VIDEO_H264_MAX_QP (V4L2_CID_MPEG_BASE+354) -#define V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM (V4L2_CID_MPEG_BASE+355) -#define V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE (V4L2_CID_MPEG_BASE+356) -#define V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE (V4L2_CID_MPEG_BASE+357) -enum v4l2_mpeg_video_h264_entropy_mode { - V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC = 0, - V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC = 1, -}; -#define V4L2_CID_MPEG_VIDEO_H264_I_PERIOD (V4L2_CID_MPEG_BASE+358) -#define V4L2_CID_MPEG_VIDEO_H264_LEVEL (V4L2_CID_MPEG_BASE+359) -enum v4l2_mpeg_video_h264_level { - V4L2_MPEG_VIDEO_H264_LEVEL_1_0 = 0, - V4L2_MPEG_VIDEO_H264_LEVEL_1B = 1, - V4L2_MPEG_VIDEO_H264_LEVEL_1_1 = 2, - V4L2_MPEG_VIDEO_H264_LEVEL_1_2 = 3, - V4L2_MPEG_VIDEO_H264_LEVEL_1_3 = 4, - V4L2_MPEG_VIDEO_H264_LEVEL_2_0 = 5, - V4L2_MPEG_VIDEO_H264_LEVEL_2_1 = 6, - V4L2_MPEG_VIDEO_H264_LEVEL_2_2 = 7, - V4L2_MPEG_VIDEO_H264_LEVEL_3_0 = 8, - V4L2_MPEG_VIDEO_H264_LEVEL_3_1 = 9, - V4L2_MPEG_VIDEO_H264_LEVEL_3_2 = 10, - V4L2_MPEG_VIDEO_H264_LEVEL_4_0 = 11, - V4L2_MPEG_VIDEO_H264_LEVEL_4_1 = 12, - V4L2_MPEG_VIDEO_H264_LEVEL_4_2 = 13, - V4L2_MPEG_VIDEO_H264_LEVEL_5_0 = 14, - V4L2_MPEG_VIDEO_H264_LEVEL_5_1 = 15, -}; -#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA (V4L2_CID_MPEG_BASE+360) -#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA (V4L2_CID_MPEG_BASE+361) -#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE (V4L2_CID_MPEG_BASE+362) -enum v4l2_mpeg_video_h264_loop_filter_mode { - V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED = 0, - V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED = 1, - V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY = 2, -}; -#define V4L2_CID_MPEG_VIDEO_H264_PROFILE (V4L2_CID_MPEG_BASE+363) -enum v4l2_mpeg_video_h264_profile { - V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE = 0, - V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE = 1, - V4L2_MPEG_VIDEO_H264_PROFILE_MAIN = 2, - V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED = 3, - V4L2_MPEG_VIDEO_H264_PROFILE_HIGH = 4, - V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10 = 5, - V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422 = 6, - V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_PREDICTIVE = 7, - V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10_INTRA = 8, - V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422_INTRA = 9, - V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_INTRA = 10, - V4L2_MPEG_VIDEO_H264_PROFILE_CAVLC_444_INTRA = 11, - V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_BASELINE = 12, - V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH = 13, - V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA = 14, - V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH = 15, - V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH = 16, -}; -#define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT (V4L2_CID_MPEG_BASE+364) -#define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH (V4L2_CID_MPEG_BASE+365) -#define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE (V4L2_CID_MPEG_BASE+366) -#define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC (V4L2_CID_MPEG_BASE+367) -enum v4l2_mpeg_video_h264_vui_sar_idc { - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_UNSPECIFIED = 0, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_1x1 = 1, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_12x11 = 2, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_10x11 = 3, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_16x11 = 4, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_40x33 = 5, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_24x11 = 6, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_20x11 = 7, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_32x11 = 8, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_80x33 = 9, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_18x11 = 10, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_15x11 = 11, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_64x33 = 12, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_160x99 = 13, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_4x3 = 14, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_3x2 = 15, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_2x1 = 16, - V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_EXTENDED = 17, -}; -#define V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING (V4L2_CID_MPEG_BASE+368) -#define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0 (V4L2_CID_MPEG_BASE+369) -#define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE (V4L2_CID_MPEG_BASE+370) -enum v4l2_mpeg_video_h264_sei_fp_arrangement_type { - V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_CHECKERBOARD = 0, - V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_COLUMN = 1, - V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_ROW = 2, - V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_SIDE_BY_SIDE = 3, - V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TOP_BOTTOM = 4, - V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TEMPORAL = 5, -}; -#define V4L2_CID_MPEG_VIDEO_H264_FMO (V4L2_CID_MPEG_BASE+371) -#define V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE (V4L2_CID_MPEG_BASE+372) -enum v4l2_mpeg_video_h264_fmo_map_type { - V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_INTERLEAVED_SLICES = 0, - V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_SCATTERED_SLICES = 1, - V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_FOREGROUND_WITH_LEFT_OVER = 2, - V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_BOX_OUT = 3, - V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_RASTER_SCAN = 4, - V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_WIPE_SCAN = 5, - V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_EXPLICIT = 6, -}; -#define V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP (V4L2_CID_MPEG_BASE+373) -#define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION (V4L2_CID_MPEG_BASE+374) -enum v4l2_mpeg_video_h264_fmo_change_dir { - V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_RIGHT = 0, - V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_LEFT = 1, -}; -#define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE (V4L2_CID_MPEG_BASE+375) -#define V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH (V4L2_CID_MPEG_BASE+376) -#define V4L2_CID_MPEG_VIDEO_H264_ASO (V4L2_CID_MPEG_BASE+377) -#define V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER (V4L2_CID_MPEG_BASE+378) -#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING (V4L2_CID_MPEG_BASE+379) -#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE (V4L2_CID_MPEG_BASE+380) -enum v4l2_mpeg_video_h264_hierarchical_coding_type { - V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B = 0, - V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P = 1, -}; -#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER (V4L2_CID_MPEG_BASE+381) -#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP (V4L2_CID_MPEG_BASE+382) -#define V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP (V4L2_CID_MPEG_BASE+400) -#define V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP (V4L2_CID_MPEG_BASE+401) -#define V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP (V4L2_CID_MPEG_BASE+402) -#define V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP (V4L2_CID_MPEG_BASE+403) -#define V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP (V4L2_CID_MPEG_BASE+404) -#define V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL (V4L2_CID_MPEG_BASE+405) -enum v4l2_mpeg_video_mpeg4_level { - V4L2_MPEG_VIDEO_MPEG4_LEVEL_0 = 0, - V4L2_MPEG_VIDEO_MPEG4_LEVEL_0B = 1, - V4L2_MPEG_VIDEO_MPEG4_LEVEL_1 = 2, - V4L2_MPEG_VIDEO_MPEG4_LEVEL_2 = 3, - V4L2_MPEG_VIDEO_MPEG4_LEVEL_3 = 4, - V4L2_MPEG_VIDEO_MPEG4_LEVEL_3B = 5, - V4L2_MPEG_VIDEO_MPEG4_LEVEL_4 = 6, - V4L2_MPEG_VIDEO_MPEG4_LEVEL_5 = 7, -}; -#define V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE (V4L2_CID_MPEG_BASE+406) -enum v4l2_mpeg_video_mpeg4_profile { - V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE = 0, - V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE = 1, - V4L2_MPEG_VIDEO_MPEG4_PROFILE_CORE = 2, - V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE_SCALABLE = 3, - V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_CODING_EFFICIENCY = 4, -}; -#define V4L2_CID_MPEG_VIDEO_MPEG4_QPEL (V4L2_CID_MPEG_BASE+407) - -/* Control IDs for VP8 streams - * Although VP8 is not part of MPEG we add these controls to the MPEG class - * as that class is already handling other video compression standards - */ -#define V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS (V4L2_CID_MPEG_BASE+500) -enum v4l2_vp8_num_partitions { - V4L2_CID_MPEG_VIDEO_VPX_1_PARTITION = 0, - V4L2_CID_MPEG_VIDEO_VPX_2_PARTITIONS = 1, - V4L2_CID_MPEG_VIDEO_VPX_4_PARTITIONS = 2, - V4L2_CID_MPEG_VIDEO_VPX_8_PARTITIONS = 3, -}; -#define V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4 (V4L2_CID_MPEG_BASE+501) -#define V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES (V4L2_CID_MPEG_BASE+502) -enum v4l2_vp8_num_ref_frames { - V4L2_CID_MPEG_VIDEO_VPX_1_REF_FRAME = 0, - V4L2_CID_MPEG_VIDEO_VPX_2_REF_FRAME = 1, - V4L2_CID_MPEG_VIDEO_VPX_3_REF_FRAME = 2, -}; -#define V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL (V4L2_CID_MPEG_BASE+503) -#define V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS (V4L2_CID_MPEG_BASE+504) -#define V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD (V4L2_CID_MPEG_BASE+505) -#define V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL (V4L2_CID_MPEG_BASE+506) -enum v4l2_vp8_golden_frame_sel { - V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV = 0, - V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_REF_PERIOD = 1, -}; - -/* MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */ -#define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000) -#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE (V4L2_CID_MPEG_CX2341X_BASE+0) -enum v4l2_mpeg_cx2341x_video_spatial_filter_mode { - V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL = 0, - V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO = 1, -}; -#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER (V4L2_CID_MPEG_CX2341X_BASE+1) -#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+2) -enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type { - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF = 0, - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR = 1, - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT = 2, - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE = 3, - V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE = 4, -}; -#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+3) -enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type { - V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF = 0, - V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR = 1, -}; -#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE (V4L2_CID_MPEG_CX2341X_BASE+4) -enum v4l2_mpeg_cx2341x_video_temporal_filter_mode { - V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL = 0, - V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO = 1, -}; -#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER (V4L2_CID_MPEG_CX2341X_BASE+5) -#define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+6) -enum v4l2_mpeg_cx2341x_video_median_filter_type { - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF = 0, - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR = 1, - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT = 2, - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT = 3, - V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG = 4, -}; -#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+7) -#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+8) -#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+9) -#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+10) -#define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS (V4L2_CID_MPEG_CX2341X_BASE+11) - -/* MPEG-class control IDs specific to the Samsung MFC 5.1 driver as defined by V4L2 */ -#define V4L2_CID_MPEG_MFC51_BASE (V4L2_CTRL_CLASS_MPEG | 0x1100) - -#define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY (V4L2_CID_MPEG_MFC51_BASE+0) -#define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE (V4L2_CID_MPEG_MFC51_BASE+1) -#define V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE (V4L2_CID_MPEG_MFC51_BASE+2) -enum v4l2_mpeg_mfc51_video_frame_skip_mode { - V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_DISABLED = 0, - V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT = 1, - V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT = 2, -}; -#define V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE (V4L2_CID_MPEG_MFC51_BASE+3) -enum v4l2_mpeg_mfc51_video_force_frame_type { - V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_DISABLED = 0, - V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_I_FRAME = 1, - V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_NOT_CODED = 2, -}; -#define V4L2_CID_MPEG_MFC51_VIDEO_PADDING (V4L2_CID_MPEG_MFC51_BASE+4) -#define V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV (V4L2_CID_MPEG_MFC51_BASE+5) -#define V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT (V4L2_CID_MPEG_MFC51_BASE+6) -#define V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF (V4L2_CID_MPEG_MFC51_BASE+7) -#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY (V4L2_CID_MPEG_MFC51_BASE+50) -#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK (V4L2_CID_MPEG_MFC51_BASE+51) -#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH (V4L2_CID_MPEG_MFC51_BASE+52) -#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC (V4L2_CID_MPEG_MFC51_BASE+53) -#define V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P (V4L2_CID_MPEG_MFC51_BASE+54) - - -/* Camera class control IDs */ - -#define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900) -#define V4L2_CID_CAMERA_CLASS (V4L2_CTRL_CLASS_CAMERA | 1) - -#define V4L2_CID_EXPOSURE_AUTO (V4L2_CID_CAMERA_CLASS_BASE+1) -enum v4l2_exposure_auto_type { - V4L2_EXPOSURE_AUTO = 0, - V4L2_EXPOSURE_MANUAL = 1, - V4L2_EXPOSURE_SHUTTER_PRIORITY = 2, - V4L2_EXPOSURE_APERTURE_PRIORITY = 3 -}; -#define V4L2_CID_EXPOSURE_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+2) -#define V4L2_CID_EXPOSURE_AUTO_PRIORITY (V4L2_CID_CAMERA_CLASS_BASE+3) - -#define V4L2_CID_PAN_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+4) -#define V4L2_CID_TILT_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+5) -#define V4L2_CID_PAN_RESET (V4L2_CID_CAMERA_CLASS_BASE+6) -#define V4L2_CID_TILT_RESET (V4L2_CID_CAMERA_CLASS_BASE+7) - -#define V4L2_CID_PAN_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+8) -#define V4L2_CID_TILT_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+9) - -#define V4L2_CID_FOCUS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+10) -#define V4L2_CID_FOCUS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+11) -#define V4L2_CID_FOCUS_AUTO (V4L2_CID_CAMERA_CLASS_BASE+12) - -#define V4L2_CID_ZOOM_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+13) -#define V4L2_CID_ZOOM_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+14) -#define V4L2_CID_ZOOM_CONTINUOUS (V4L2_CID_CAMERA_CLASS_BASE+15) - -#define V4L2_CID_PRIVACY (V4L2_CID_CAMERA_CLASS_BASE+16) - -#define V4L2_CID_IRIS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+17) -#define V4L2_CID_IRIS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+18) - -#define V4L2_CID_AUTO_EXPOSURE_BIAS (V4L2_CID_CAMERA_CLASS_BASE+19) - -#define V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE (V4L2_CID_CAMERA_CLASS_BASE+20) -enum v4l2_auto_n_preset_white_balance { - V4L2_WHITE_BALANCE_MANUAL = 0, - V4L2_WHITE_BALANCE_AUTO = 1, - V4L2_WHITE_BALANCE_INCANDESCENT = 2, - V4L2_WHITE_BALANCE_FLUORESCENT = 3, - V4L2_WHITE_BALANCE_FLUORESCENT_H = 4, - V4L2_WHITE_BALANCE_HORIZON = 5, - V4L2_WHITE_BALANCE_DAYLIGHT = 6, - V4L2_WHITE_BALANCE_FLASH = 7, - V4L2_WHITE_BALANCE_CLOUDY = 8, - V4L2_WHITE_BALANCE_SHADE = 9, -}; - -#define V4L2_CID_WIDE_DYNAMIC_RANGE (V4L2_CID_CAMERA_CLASS_BASE+21) -#define V4L2_CID_IMAGE_STABILIZATION (V4L2_CID_CAMERA_CLASS_BASE+22) - -#define V4L2_CID_ISO_SENSITIVITY (V4L2_CID_CAMERA_CLASS_BASE+23) -#define V4L2_CID_ISO_SENSITIVITY_AUTO (V4L2_CID_CAMERA_CLASS_BASE+24) -enum v4l2_iso_sensitivity_auto_type { - V4L2_ISO_SENSITIVITY_MANUAL = 0, - V4L2_ISO_SENSITIVITY_AUTO = 1, -}; - -#define V4L2_CID_EXPOSURE_METERING (V4L2_CID_CAMERA_CLASS_BASE+25) -enum v4l2_exposure_metering { - V4L2_EXPOSURE_METERING_AVERAGE = 0, - V4L2_EXPOSURE_METERING_CENTER_WEIGHTED = 1, - V4L2_EXPOSURE_METERING_SPOT = 2, - V4L2_EXPOSURE_METERING_MATRIX = 3, -}; - -#define V4L2_CID_SCENE_MODE (V4L2_CID_CAMERA_CLASS_BASE+26) -enum v4l2_scene_mode { - V4L2_SCENE_MODE_NONE = 0, - V4L2_SCENE_MODE_BACKLIGHT = 1, - V4L2_SCENE_MODE_BEACH_SNOW = 2, - V4L2_SCENE_MODE_CANDLE_LIGHT = 3, - V4L2_SCENE_MODE_DAWN_DUSK = 4, - V4L2_SCENE_MODE_FALL_COLORS = 5, - V4L2_SCENE_MODE_FIREWORKS = 6, - V4L2_SCENE_MODE_LANDSCAPE = 7, - V4L2_SCENE_MODE_NIGHT = 8, - V4L2_SCENE_MODE_PARTY_INDOOR = 9, - V4L2_SCENE_MODE_PORTRAIT = 10, - V4L2_SCENE_MODE_SPORTS = 11, - V4L2_SCENE_MODE_SUNSET = 12, - V4L2_SCENE_MODE_TEXT = 13, -}; - -#define V4L2_CID_3A_LOCK (V4L2_CID_CAMERA_CLASS_BASE+27) -#define V4L2_LOCK_EXPOSURE (1 << 0) -#define V4L2_LOCK_WHITE_BALANCE (1 << 1) -#define V4L2_LOCK_FOCUS (1 << 2) - -#define V4L2_CID_AUTO_FOCUS_START (V4L2_CID_CAMERA_CLASS_BASE+28) -#define V4L2_CID_AUTO_FOCUS_STOP (V4L2_CID_CAMERA_CLASS_BASE+29) -#define V4L2_CID_AUTO_FOCUS_STATUS (V4L2_CID_CAMERA_CLASS_BASE+30) -#define V4L2_AUTO_FOCUS_STATUS_IDLE (0 << 0) -#define V4L2_AUTO_FOCUS_STATUS_BUSY (1 << 0) -#define V4L2_AUTO_FOCUS_STATUS_REACHED (1 << 1) -#define V4L2_AUTO_FOCUS_STATUS_FAILED (1 << 2) - -#define V4L2_CID_AUTO_FOCUS_RANGE (V4L2_CID_CAMERA_CLASS_BASE+31) -enum v4l2_auto_focus_range { - V4L2_AUTO_FOCUS_RANGE_AUTO = 0, - V4L2_AUTO_FOCUS_RANGE_NORMAL = 1, - V4L2_AUTO_FOCUS_RANGE_MACRO = 2, - V4L2_AUTO_FOCUS_RANGE_INFINITY = 3, -}; - - -/* FM Modulator class control IDs */ - -#define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) -#define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1) - -#define V4L2_CID_RDS_TX_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 1) -#define V4L2_CID_RDS_TX_PI (V4L2_CID_FM_TX_CLASS_BASE + 2) -#define V4L2_CID_RDS_TX_PTY (V4L2_CID_FM_TX_CLASS_BASE + 3) -#define V4L2_CID_RDS_TX_PS_NAME (V4L2_CID_FM_TX_CLASS_BASE + 5) -#define V4L2_CID_RDS_TX_RADIO_TEXT (V4L2_CID_FM_TX_CLASS_BASE + 6) - -#define V4L2_CID_AUDIO_LIMITER_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 64) -#define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 65) -#define V4L2_CID_AUDIO_LIMITER_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 66) - -#define V4L2_CID_AUDIO_COMPRESSION_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 80) -#define V4L2_CID_AUDIO_COMPRESSION_GAIN (V4L2_CID_FM_TX_CLASS_BASE + 81) -#define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD (V4L2_CID_FM_TX_CLASS_BASE + 82) -#define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME (V4L2_CID_FM_TX_CLASS_BASE + 83) -#define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 84) - -#define V4L2_CID_PILOT_TONE_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 96) -#define V4L2_CID_PILOT_TONE_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 97) -#define V4L2_CID_PILOT_TONE_FREQUENCY (V4L2_CID_FM_TX_CLASS_BASE + 98) - -#define V4L2_CID_TUNE_PREEMPHASIS (V4L2_CID_FM_TX_CLASS_BASE + 112) -enum v4l2_preemphasis { - V4L2_PREEMPHASIS_DISABLED = 0, - V4L2_PREEMPHASIS_50_uS = 1, - V4L2_PREEMPHASIS_75_uS = 2, -}; -#define V4L2_CID_TUNE_POWER_LEVEL (V4L2_CID_FM_TX_CLASS_BASE + 113) -#define V4L2_CID_TUNE_ANTENNA_CAPACITOR (V4L2_CID_FM_TX_CLASS_BASE + 114) - - -/* Flash and privacy (indicator) light controls */ - -#define V4L2_CID_FLASH_CLASS_BASE (V4L2_CTRL_CLASS_FLASH | 0x900) -#define V4L2_CID_FLASH_CLASS (V4L2_CTRL_CLASS_FLASH | 1) - -#define V4L2_CID_FLASH_LED_MODE (V4L2_CID_FLASH_CLASS_BASE + 1) -enum v4l2_flash_led_mode { - V4L2_FLASH_LED_MODE_NONE, - V4L2_FLASH_LED_MODE_FLASH, - V4L2_FLASH_LED_MODE_TORCH, -}; - -#define V4L2_CID_FLASH_STROBE_SOURCE (V4L2_CID_FLASH_CLASS_BASE + 2) -enum v4l2_flash_strobe_source { - V4L2_FLASH_STROBE_SOURCE_SOFTWARE, - V4L2_FLASH_STROBE_SOURCE_EXTERNAL, -}; - -#define V4L2_CID_FLASH_STROBE (V4L2_CID_FLASH_CLASS_BASE + 3) -#define V4L2_CID_FLASH_STROBE_STOP (V4L2_CID_FLASH_CLASS_BASE + 4) -#define V4L2_CID_FLASH_STROBE_STATUS (V4L2_CID_FLASH_CLASS_BASE + 5) - -#define V4L2_CID_FLASH_TIMEOUT (V4L2_CID_FLASH_CLASS_BASE + 6) -#define V4L2_CID_FLASH_INTENSITY (V4L2_CID_FLASH_CLASS_BASE + 7) -#define V4L2_CID_FLASH_TORCH_INTENSITY (V4L2_CID_FLASH_CLASS_BASE + 8) -#define V4L2_CID_FLASH_INDICATOR_INTENSITY (V4L2_CID_FLASH_CLASS_BASE + 9) - -#define V4L2_CID_FLASH_FAULT (V4L2_CID_FLASH_CLASS_BASE + 10) -#define V4L2_FLASH_FAULT_OVER_VOLTAGE (1 << 0) -#define V4L2_FLASH_FAULT_TIMEOUT (1 << 1) -#define V4L2_FLASH_FAULT_OVER_TEMPERATURE (1 << 2) -#define V4L2_FLASH_FAULT_SHORT_CIRCUIT (1 << 3) -#define V4L2_FLASH_FAULT_OVER_CURRENT (1 << 4) -#define V4L2_FLASH_FAULT_INDICATOR (1 << 5) - -#define V4L2_CID_FLASH_CHARGE (V4L2_CID_FLASH_CLASS_BASE + 11) -#define V4L2_CID_FLASH_READY (V4L2_CID_FLASH_CLASS_BASE + 12) - - -/* JPEG-class control IDs */ - -#define V4L2_CID_JPEG_CLASS_BASE (V4L2_CTRL_CLASS_JPEG | 0x900) -#define V4L2_CID_JPEG_CLASS (V4L2_CTRL_CLASS_JPEG | 1) - -#define V4L2_CID_JPEG_CHROMA_SUBSAMPLING (V4L2_CID_JPEG_CLASS_BASE + 1) -enum v4l2_jpeg_chroma_subsampling { - V4L2_JPEG_CHROMA_SUBSAMPLING_444 = 0, - V4L2_JPEG_CHROMA_SUBSAMPLING_422 = 1, - V4L2_JPEG_CHROMA_SUBSAMPLING_420 = 2, - V4L2_JPEG_CHROMA_SUBSAMPLING_411 = 3, - V4L2_JPEG_CHROMA_SUBSAMPLING_410 = 4, - V4L2_JPEG_CHROMA_SUBSAMPLING_GRAY = 5, -}; -#define V4L2_CID_JPEG_RESTART_INTERVAL (V4L2_CID_JPEG_CLASS_BASE + 2) -#define V4L2_CID_JPEG_COMPRESSION_QUALITY (V4L2_CID_JPEG_CLASS_BASE + 3) - -#define V4L2_CID_JPEG_ACTIVE_MARKER (V4L2_CID_JPEG_CLASS_BASE + 4) -#define V4L2_JPEG_ACTIVE_MARKER_APP0 (1 << 0) -#define V4L2_JPEG_ACTIVE_MARKER_APP1 (1 << 1) -#define V4L2_JPEG_ACTIVE_MARKER_COM (1 << 16) -#define V4L2_JPEG_ACTIVE_MARKER_DQT (1 << 17) -#define V4L2_JPEG_ACTIVE_MARKER_DHT (1 << 18) - - -/* Image source controls */ -#define V4L2_CID_IMAGE_SOURCE_CLASS_BASE (V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900) -#define V4L2_CID_IMAGE_SOURCE_CLASS (V4L2_CTRL_CLASS_IMAGE_SOURCE | 1) - -#define V4L2_CID_VBLANK (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 1) -#define V4L2_CID_HBLANK (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2) -#define V4L2_CID_ANALOGUE_GAIN (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3) - - -/* Image processing controls */ - -#define V4L2_CID_IMAGE_PROC_CLASS_BASE (V4L2_CTRL_CLASS_IMAGE_PROC | 0x900) -#define V4L2_CID_IMAGE_PROC_CLASS (V4L2_CTRL_CLASS_IMAGE_PROC | 1) - -#define V4L2_CID_LINK_FREQ (V4L2_CID_IMAGE_PROC_CLASS_BASE + 1) -#define V4L2_CID_PIXEL_RATE (V4L2_CID_IMAGE_PROC_CLASS_BASE + 2) -#define V4L2_CID_TEST_PATTERN (V4L2_CID_IMAGE_PROC_CLASS_BASE + 3) - - -/* DV-class control IDs defined by V4L2 */ -#define V4L2_CID_DV_CLASS_BASE (V4L2_CTRL_CLASS_DV | 0x900) -#define V4L2_CID_DV_CLASS (V4L2_CTRL_CLASS_DV | 1) - -#define V4L2_CID_DV_TX_HOTPLUG (V4L2_CID_DV_CLASS_BASE + 1) -#define V4L2_CID_DV_TX_RXSENSE (V4L2_CID_DV_CLASS_BASE + 2) -#define V4L2_CID_DV_TX_EDID_PRESENT (V4L2_CID_DV_CLASS_BASE + 3) -#define V4L2_CID_DV_TX_MODE (V4L2_CID_DV_CLASS_BASE + 4) -enum v4l2_dv_tx_mode { - V4L2_DV_TX_MODE_DVI_D = 0, - V4L2_DV_TX_MODE_HDMI = 1, -}; -#define V4L2_CID_DV_TX_RGB_RANGE (V4L2_CID_DV_CLASS_BASE + 5) -enum v4l2_dv_rgb_range { - V4L2_DV_RGB_RANGE_AUTO = 0, - V4L2_DV_RGB_RANGE_LIMITED = 1, - V4L2_DV_RGB_RANGE_FULL = 2, -}; - -#define V4L2_CID_DV_RX_POWER_PRESENT (V4L2_CID_DV_CLASS_BASE + 100) -#define V4L2_CID_DV_RX_RGB_RANGE (V4L2_CID_DV_CLASS_BASE + 101) - -#define V4L2_CID_FM_RX_CLASS_BASE (V4L2_CTRL_CLASS_FM_RX | 0x900) -#define V4L2_CID_FM_RX_CLASS (V4L2_CTRL_CLASS_FM_RX | 1) - -#define V4L2_CID_TUNE_DEEMPHASIS (V4L2_CID_FM_RX_CLASS_BASE + 1) -enum v4l2_deemphasis { - V4L2_DEEMPHASIS_DISABLED = V4L2_PREEMPHASIS_DISABLED, - V4L2_DEEMPHASIS_50_uS = V4L2_PREEMPHASIS_50_uS, - V4L2_DEEMPHASIS_75_uS = V4L2_PREEMPHASIS_75_uS, -}; - -#define V4L2_CID_RDS_RECEPTION (V4L2_CID_FM_RX_CLASS_BASE + 2) - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-ctrls.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-ctrls.h deleted file mode 100644 index 4f7ad7f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-ctrls.h +++ /dev/null @@ -1,696 +0,0 @@ -/* - V4L2 controls support header. - - Copyright (C) 2010 Hans Verkuil - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _V4L2_CTRLS_H -#define _V4L2_CTRLS_H -#if 0 -#include -#include -#endif -#include "v4l2-osdep.h" -#include "videodev2.h" - - -/* forward references */ -//struct file; -struct v4l2_ctrl_handler; -struct v4l2_ctrl_helper; -struct v4l2_ctrl; -struct video_device; -struct v4l2_subdev; -struct v4l2_subscribed_event; -struct v4l2_fh; -//struct poll_table_struct; - -/** struct v4l2_ctrl_ops - The control operations that the driver has to provide. - * @g_volatile_ctrl: Get a new value for this control. Generally only relevant - * for volatile (and usually read-only) controls such as a control - * that returns the current signal strength which changes - * continuously. - * If not set, then the currently cached value will be returned. - * @try_ctrl: Test whether the control's value is valid. Only relevant when - * the usual min/max/step checks are not sufficient. - * @s_ctrl: Actually set the new control value. s_ctrl is compulsory. The - * ctrl->handler->lock is held when these ops are called, so no - * one else can access controls owned by that handler. - */ -struct v4l2_ctrl_ops { - int (*g_volatile_ctrl)(struct v4l2_ctrl *ctrl); - int (*try_ctrl)(struct v4l2_ctrl *ctrl); - int (*s_ctrl)(struct v4l2_ctrl *ctrl); -}; - -typedef void (*v4l2_ctrl_notify_fnc)(struct v4l2_ctrl *ctrl, void *priv); - -/** struct v4l2_ctrl - The control structure. - * @node: The list node. - * @ev_subs: The list of control event subscriptions. - * @handler: The handler that owns the control. - * @cluster: Point to start of cluster array. - * @ncontrols: Number of controls in cluster array. - * @done: Internal flag: set for each processed control. - * @is_new: Set when the user specified a new value for this control. It - * is also set when called from v4l2_ctrl_handler_setup. Drivers - * should never set this flag. - * @is_private: If set, then this control is private to its handler and it - * will not be added to any other handlers. Drivers can set - * this flag. - * @is_auto: If set, then this control selects whether the other cluster - * members are in 'automatic' mode or 'manual' mode. This is - * used for autogain/gain type clusters. Drivers should never - * set this flag directly. - * @has_volatiles: If set, then one or more members of the cluster are volatile. - * Drivers should never touch this flag. - * @call_notify: If set, then call the handler's notify function whenever the - * control's value changes. - * @manual_mode_value: If the is_auto flag is set, then this is the value - * of the auto control that determines if that control is in - * manual mode. So if the value of the auto control equals this - * value, then the whole cluster is in manual mode. Drivers should - * never set this flag directly. - * @ops: The control ops. - * @id: The control ID. - * @name: The control name. - * @type: The control type. - * @minimum: The control's minimum value. - * @maximum: The control's maximum value. - * @default_value: The control's default value. - * @step: The control's step value for non-menu controls. - * @menu_skip_mask: The control's skip mask for menu controls. This makes it - * easy to skip menu items that are not valid. If bit X is set, - * then menu item X is skipped. Of course, this only works for - * menus with <= 32 menu items. There are no menus that come - * close to that number, so this is OK. Should we ever need more, - * then this will have to be extended to a u64 or a bit array. - * @qmenu: A const char * array for all menu items. Array entries that are - * empty strings ("") correspond to non-existing menu items (this - * is in addition to the menu_skip_mask above). The last entry - * must be NULL. - * @flags: The control's flags. - * @cur: The control's current value. - * @val: The control's new s32 value. - * @val64: The control's new s64 value. - * @string: The control's new string value. - * @priv: The control's private pointer. For use by the driver. It is - * untouched by the control framework. Note that this pointer is - * not freed when the control is deleted. Should this be needed - * then a new internal bitfield can be added to tell the framework - * to free this pointer. - */ -struct v4l2_ctrl { - /* Administrative fields */ - struct list_head node; - struct list_head ev_subs; - struct v4l2_ctrl_handler *handler; - struct v4l2_ctrl **cluster; - unsigned ncontrols; - unsigned int done:1; - - unsigned int is_new:1; - unsigned int is_private:1; - unsigned int is_auto:1; - unsigned int has_volatiles:1; - unsigned int call_notify:1; - unsigned int manual_mode_value:8; - - const struct v4l2_ctrl_ops *ops; - u32 id; - const char *name; - enum v4l2_ctrl_type type; - s32 minimum, maximum, default_value; - union { - u32 step; - u32 menu_skip_mask; - }; - union { - const char * const *qmenu; - const s64 *qmenu_int; - }; - unsigned long flags; - union { - s32 val; - s64 val64; - char *string; - } cur; - union { - s32 val; - s64 val64; - char *string; - }; - void *priv; -}; - -/** struct v4l2_ctrl_ref - The control reference. - * @node: List node for the sorted list. - * @next: Single-link list node for the hash. - * @ctrl: The actual control information. - * @helper: Pointer to helper struct. Used internally in prepare_ext_ctrls(). - * - * Each control handler has a list of these refs. The list_head is used to - * keep a sorted-by-control-ID list of all controls, while the next pointer - * is used to link the control in the hash's bucket. - */ -struct v4l2_ctrl_ref { - struct list_head node; - struct v4l2_ctrl_ref *next; - struct v4l2_ctrl *ctrl; - struct v4l2_ctrl_helper *helper; -}; - -/** struct v4l2_ctrl_handler - The control handler keeps track of all the - * controls: both the controls owned by the handler and those inherited - * from other handlers. - * @_lock: Default for "lock". - * @lock: Lock to control access to this handler and its controls. - * May be replaced by the user right after init. - * @ctrls: The list of controls owned by this handler. - * @ctrl_refs: The list of control references. - * @cached: The last found control reference. It is common that the same - * control is needed multiple times, so this is a simple - * optimization. - * @buckets: Buckets for the hashing. Allows for quick control lookup. - * @notify: A notify callback that is called whenever the control changes value. - * Note that the handler's lock is held when the notify function - * is called! - * @notify_priv: Passed as argument to the v4l2_ctrl notify callback. - * @nr_of_buckets: Total number of buckets in the array. - * @error: The error code of the first failed control addition. - */ -struct v4l2_ctrl_handler { - //struct mutex _lock; - //struct mutex *lock; - _Mutex _lock; - _Mutex *lock; - struct list_head ctrls; - struct list_head ctrl_refs; - struct v4l2_ctrl_ref *cached; - struct v4l2_ctrl_ref **buckets; - v4l2_ctrl_notify_fnc notify; - void *notify_priv; - u16 nr_of_buckets; - int error; -}; - -/** struct v4l2_ctrl_config - Control configuration structure. - * @ops: The control ops. - * @id: The control ID. - * @name: The control name. - * @type: The control type. - * @min: The control's minimum value. - * @max: The control's maximum value. - * @step: The control's step value for non-menu controls. - * @def: The control's default value. - * @flags: The control's flags. - * @menu_skip_mask: The control's skip mask for menu controls. This makes it - * easy to skip menu items that are not valid. If bit X is set, - * then menu item X is skipped. Of course, this only works for - * menus with <= 32 menu items. There are no menus that come - * close to that number, so this is OK. Should we ever need more, - * then this will have to be extended to a u64 or a bit array. - * @qmenu: A const char * array for all menu items. Array entries that are - * empty strings ("") correspond to non-existing menu items (this - * is in addition to the menu_skip_mask above). The last entry - * must be NULL. - * @is_private: If set, then this control is private to its handler and it - * will not be added to any other handlers. - */ -struct v4l2_ctrl_config { - const struct v4l2_ctrl_ops *ops; - u32 id; - const char *name; - enum v4l2_ctrl_type type; - s32 min; - s32 max; - u32 step; - s32 def; - u32 flags; - u32 menu_skip_mask; - const char * const *qmenu; - const s64 *qmenu_int; - unsigned int is_private:1; -}; - -/** v4l2_ctrl_fill() - Fill in the control fields based on the control ID. - * - * This works for all standard V4L2 controls. - * For non-standard controls it will only fill in the given arguments - * and @name will be NULL. - * - * This function will overwrite the contents of @name, @type and @flags. - * The contents of @min, @max, @step and @def may be modified depending on - * the type. - * - * Do not use in drivers! It is used internally for backwards compatibility - * control handling only. Once all drivers are converted to use the new - * control framework this function will no longer be exported. - */ -void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, - s32 *min, s32 *max, s32 *step, s32 *def, u32 *flags); - - -/** v4l2_ctrl_handler_init_class() - Initialize the control handler. - * @hdl: The control handler. - * @nr_of_controls_hint: A hint of how many controls this handler is - * expected to refer to. This is the total number, so including - * any inherited controls. It doesn't have to be precise, but if - * it is way off, then you either waste memory (too many buckets - * are allocated) or the control lookup becomes slower (not enough - * buckets are allocated, so there are more slow list lookups). - * It will always work, though. - * @key: Used by the lock validator if CONFIG_LOCKDEP is set. - * @name: Used by the lock validator if CONFIG_LOCKDEP is set. - * - * Returns an error if the buckets could not be allocated. This error will - * also be stored in @hdl->error. - * - * Never use this call directly, always use the v4l2_ctrl_handler_init - * macro that hides the @key and @name arguments. - */ -#if 0 -int v4l2_ctrl_handler_init_class(struct v4l2_ctrl_handler *hdl, - unsigned nr_of_controls_hint, - struct lock_class_key *key, const char *name); - -#ifdef CONFIG_LOCKDEP -#define v4l2_ctrl_handler_init(hdl, nr_of_controls_hint) \ -( \ - ({ \ - static struct lock_class_key _key; \ - v4l2_ctrl_handler_init_class(hdl, nr_of_controls_hint, \ - &_key, \ - KBUILD_BASENAME ":" \ - __stringify(__LINE__) ":" \ - "(" #hdl ")->_lock"); \ - }) \ -) -#else -#define v4l2_ctrl_handler_init(hdl, nr_of_controls_hint) \ - v4l2_ctrl_handler_init_class(hdl, nr_of_controls_hint, NULL, NULL) -#endif -#endif - -/** v4l2_ctrl_handler_free() - Free all controls owned by the handler and free - * the control list. - * @hdl: The control handler. - * - * Does nothing if @hdl == NULL. - */ -void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl); - -/** v4l2_ctrl_handler_setup() - Call the s_ctrl op for all controls belonging - * to the handler to initialize the hardware to the current control values. - * @hdl: The control handler. - * - * Button controls will be skipped, as are read-only controls. - * - * If @hdl == NULL, then this just returns 0. - */ -int v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl); - -/** v4l2_ctrl_handler_log_status() - Log all controls owned by the handler. - * @hdl: The control handler. - * @prefix: The prefix to use when logging the control values. If the - * prefix does not end with a space, then ": " will be added - * after the prefix. If @prefix == NULL, then no prefix will be - * used. - * - * For use with VIDIOC_LOG_STATUS. - * - * Does nothing if @hdl == NULL. - */ -void v4l2_ctrl_handler_log_status(struct v4l2_ctrl_handler *hdl, - const char *prefix); - -/** v4l2_ctrl_new_custom() - Allocate and initialize a new custom V4L2 - * control. - * @hdl: The control handler. - * @cfg: The control's configuration data. - * @priv: The control's driver-specific private data. - * - * If the &v4l2_ctrl struct could not be allocated then NULL is returned - * and @hdl->error is set to the error code (if it wasn't set already). - */ -struct v4l2_ctrl *v4l2_ctrl_new_custom(struct v4l2_ctrl_handler *hdl, - const struct v4l2_ctrl_config *cfg, void *priv); - -/** v4l2_ctrl_new_std() - Allocate and initialize a new standard V4L2 non-menu control. - * @hdl: The control handler. - * @ops: The control ops. - * @id: The control ID. - * @min: The control's minimum value. - * @max: The control's maximum value. - * @step: The control's step value - * @def: The control's default value. - * - * If the &v4l2_ctrl struct could not be allocated, or the control - * ID is not known, then NULL is returned and @hdl->error is set to the - * appropriate error code (if it wasn't set already). - * - * If @id refers to a menu control, then this function will return NULL. - * - * Use v4l2_ctrl_new_std_menu() when adding menu controls. - */ -struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl, - const struct v4l2_ctrl_ops *ops, - u32 id, s32 min, s32 max, u32 step, s32 def); - -/** v4l2_ctrl_new_std_menu() - Allocate and initialize a new standard V4L2 menu control. - * @hdl: The control handler. - * @ops: The control ops. - * @id: The control ID. - * @max: The control's maximum value. - * @mask: The control's skip mask for menu controls. This makes it - * easy to skip menu items that are not valid. If bit X is set, - * then menu item X is skipped. Of course, this only works for - * menus with <= 32 menu items. There are no menus that come - * close to that number, so this is OK. Should we ever need more, - * then this will have to be extended to a u64 or a bit array. - * @def: The control's default value. - * - * Same as v4l2_ctrl_new_std(), but @min is set to 0 and the @mask value - * determines which menu items are to be skipped. - * - * If @id refers to a non-menu control, then this function will return NULL. - */ -struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl, - const struct v4l2_ctrl_ops *ops, - u32 id, s32 max, s32 mask, s32 def); - -/** v4l2_ctrl_new_std_menu_items() - Create a new standard V4L2 menu control - * with driver specific menu. - * @hdl: The control handler. - * @ops: The control ops. - * @id: The control ID. - * @max: The control's maximum value. - * @mask: The control's skip mask for menu controls. This makes it - * easy to skip menu items that are not valid. If bit X is set, - * then menu item X is skipped. Of course, this only works for - * menus with <= 32 menu items. There are no menus that come - * close to that number, so this is OK. Should we ever need more, - * then this will have to be extended to a u64 or a bit array. - * @def: The control's default value. - * @qmenu: The new menu. - * - * Same as v4l2_ctrl_new_std_menu(), but @qmenu will be the driver specific - * menu of this control. - * - */ -struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler *hdl, - const struct v4l2_ctrl_ops *ops, u32 id, s32 max, - s32 mask, s32 def, const char * const *qmenu); - -/** v4l2_ctrl_new_int_menu() - Create a new standard V4L2 integer menu control. - * @hdl: The control handler. - * @ops: The control ops. - * @id: The control ID. - * @max: The control's maximum value. - * @def: The control's default value. - * @qmenu_int: The control's menu entries. - * - * Same as v4l2_ctrl_new_std_menu(), but @mask is set to 0 and it additionaly - * takes as an argument an array of integers determining the menu items. - * - * If @id refers to a non-integer-menu control, then this function will return NULL. - */ -struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl, - const struct v4l2_ctrl_ops *ops, - u32 id, s32 max, s32 def, const s64 *qmenu_int); - -/** v4l2_ctrl_add_ctrl() - Add a control from another handler to this handler. - * @hdl: The control handler. - * @ctrl: The control to add. - * - * It will return NULL if it was unable to add the control reference. - * If the control already belonged to the handler, then it will do - * nothing and just return @ctrl. - */ -struct v4l2_ctrl *v4l2_ctrl_add_ctrl(struct v4l2_ctrl_handler *hdl, - struct v4l2_ctrl *ctrl); - -/** v4l2_ctrl_add_handler() - Add all controls from handler @add to - * handler @hdl. - * @hdl: The control handler. - * @add: The control handler whose controls you want to add to - * the @hdl control handler. - * @filter: This function will filter which controls should be added. - * - * Does nothing if either of the two handlers is a NULL pointer. - * If @filter is NULL, then all controls are added. Otherwise only those - * controls for which @filter returns true will be added. - * In case of an error @hdl->error will be set to the error code (if it - * wasn't set already). - */ -int v4l2_ctrl_add_handler(struct v4l2_ctrl_handler *hdl, - struct v4l2_ctrl_handler *add, - bool (*filter)(const struct v4l2_ctrl *ctrl)); - -/** v4l2_ctrl_radio_filter() - Standard filter for radio controls. - * @ctrl: The control that is filtered. - * - * This will return true for any controls that are valid for radio device - * nodes. Those are all of the V4L2_CID_AUDIO_* user controls and all FM - * transmitter class controls. - * - * This function is to be used with v4l2_ctrl_add_handler(). - */ -bool v4l2_ctrl_radio_filter(const struct v4l2_ctrl *ctrl); - -/** v4l2_ctrl_cluster() - Mark all controls in the cluster as belonging to that cluster. - * @ncontrols: The number of controls in this cluster. - * @controls: The cluster control array of size @ncontrols. - */ -void v4l2_ctrl_cluster(unsigned ncontrols, struct v4l2_ctrl **controls); - - -/** v4l2_ctrl_auto_cluster() - Mark all controls in the cluster as belonging to - * that cluster and set it up for autofoo/foo-type handling. - * @ncontrols: The number of controls in this cluster. - * @controls: The cluster control array of size @ncontrols. The first control - * must be the 'auto' control (e.g. autogain, autoexposure, etc.) - * @manual_val: The value for the first control in the cluster that equals the - * manual setting. - * @set_volatile: If true, then all controls except the first auto control will - * be volatile. - * - * Use for control groups where one control selects some automatic feature and - * the other controls are only active whenever the automatic feature is turned - * off (manual mode). Typical examples: autogain vs gain, auto-whitebalance vs - * red and blue balance, etc. - * - * The behavior of such controls is as follows: - * - * When the autofoo control is set to automatic, then any manual controls - * are set to inactive and any reads will call g_volatile_ctrl (if the control - * was marked volatile). - * - * When the autofoo control is set to manual, then any manual controls will - * be marked active, and any reads will just return the current value without - * going through g_volatile_ctrl. - * - * In addition, this function will set the V4L2_CTRL_FLAG_UPDATE flag - * on the autofoo control and V4L2_CTRL_FLAG_INACTIVE on the foo control(s) - * if autofoo is in auto mode. - */ -void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls, - u8 manual_val, bool set_volatile); - - -/** v4l2_ctrl_find() - Find a control with the given ID. - * @hdl: The control handler. - * @id: The control ID to find. - * - * If @hdl == NULL this will return NULL as well. Will lock the handler so - * do not use from inside &v4l2_ctrl_ops. - */ -struct v4l2_ctrl *v4l2_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id); - -/** v4l2_ctrl_activate() - Make the control active or inactive. - * @ctrl: The control to (de)activate. - * @active: True if the control should become active. - * - * This sets or clears the V4L2_CTRL_FLAG_INACTIVE flag atomically. - * Does nothing if @ctrl == NULL. - * This will usually be called from within the s_ctrl op. - * The V4L2_EVENT_CTRL event will be generated afterwards. - * - * This function assumes that the control handler is locked. - */ -void v4l2_ctrl_activate(struct v4l2_ctrl *ctrl, bool active); - -/** v4l2_ctrl_grab() - Mark the control as grabbed or not grabbed. - * @ctrl: The control to (de)activate. - * @grabbed: True if the control should become grabbed. - * - * This sets or clears the V4L2_CTRL_FLAG_GRABBED flag atomically. - * Does nothing if @ctrl == NULL. - * The V4L2_EVENT_CTRL event will be generated afterwards. - * This will usually be called when starting or stopping streaming in the - * driver. - * - * This function assumes that the control handler is not locked and will - * take the lock itself. - */ -void v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed); - -/** v4l2_ctrl_modify_range() - Update the range of a control. - * @ctrl: The control to update. - * @min: The control's minimum value. - * @max: The control's maximum value. - * @step: The control's step value - * @def: The control's default value. - * - * Update the range of a control on the fly. This works for control types - * INTEGER, BOOLEAN, MENU, INTEGER MENU and BITMASK. For menu controls the - * @step value is interpreted as a menu_skip_mask. - * - * An error is returned if one of the range arguments is invalid for this - * control type. - * - * This function assumes that the control handler is not locked and will - * take the lock itself. - */ -int v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl, - s32 min, s32 max, u32 step, s32 def); - -/** v4l2_ctrl_lock() - Helper function to lock the handler - * associated with the control. - * @ctrl: The control to lock. - */ -static inline void v4l2_ctrl_lock(struct v4l2_ctrl *ctrl) -{ - mutex_lock(ctrl->handler->lock); -} - -/** v4l2_ctrl_lock() - Helper function to unlock the handler - * associated with the control. - * @ctrl: The control to unlock. - */ -static inline void v4l2_ctrl_unlock(struct v4l2_ctrl *ctrl) -{ - mutex_unlock(ctrl->handler->lock); -} - -/** v4l2_ctrl_notify() - Function to set a notify callback for a control. - * @ctrl: The control. - * @notify: The callback function. - * @priv: The callback private handle, passed as argument to the callback. - * - * This function sets a callback function for the control. If @ctrl is NULL, - * then it will do nothing. If @notify is NULL, then the notify callback will - * be removed. - * - * There can be only one notify. If another already exists, then a WARN_ON - * will be issued and the function will do nothing. - */ -void v4l2_ctrl_notify(struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void *priv); - -/** v4l2_ctrl_g_ctrl() - Helper function to get the control's value from within a driver. - * @ctrl: The control. - * - * This returns the control's value safely by going through the control - * framework. This function will lock the control's handler, so it cannot be - * used from within the &v4l2_ctrl_ops functions. - * - * This function is for integer type controls only. - */ -s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl); - -/** v4l2_ctrl_s_ctrl() - Helper function to set the control's value from within a driver. - * @ctrl: The control. - * @val: The new value. - * - * This set the control's new value safely by going through the control - * framework. This function will lock the control's handler, so it cannot be - * used from within the &v4l2_ctrl_ops functions. - * - * This function is for integer type controls only. - */ -int v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val); - -/** v4l2_ctrl_g_ctrl_int64() - Helper function to get a 64-bit control's value from within a driver. - * @ctrl: The control. - * - * This returns the control's value safely by going through the control - * framework. This function will lock the control's handler, so it cannot be - * used from within the &v4l2_ctrl_ops functions. - * - * This function is for 64-bit integer type controls only. - */ -s64 v4l2_ctrl_g_ctrl_int64(struct v4l2_ctrl *ctrl); - -/** v4l2_ctrl_s_ctrl_int64() - Helper function to set a 64-bit control's value from within a driver. - * @ctrl: The control. - * @val: The new value. - * - * This set the control's new value safely by going through the control - * framework. This function will lock the control's handler, so it cannot be - * used from within the &v4l2_ctrl_ops functions. - * - * This function is for 64-bit integer type controls only. - */ -int v4l2_ctrl_s_ctrl_int64(struct v4l2_ctrl *ctrl, s64 val); - -/* Internal helper functions that deal with control events. */ -extern const struct v4l2_subscribed_event_ops v4l2_ctrl_sub_ev_ops; -void v4l2_ctrl_replace(struct v4l2_event *old, const struct v4l2_event *new); -void v4l2_ctrl_merge(const struct v4l2_event *old, struct v4l2_event *new); - -/* Can be used as a vidioc_log_status function that just dumps all controls - associated with the filehandle. */ -int v4l2_ctrl_log_status(void *fh); - -/* Can be used as a vidioc_subscribe_event function that just subscribes - control events. */ -int v4l2_ctrl_subscribe_event(struct v4l2_fh *fh, - const struct v4l2_event_subscription *sub); - -/* Can be used as a poll function that just polls for control events. */ -//unsigned int v4l2_ctrl_poll(struct file *file, struct poll_table_struct *wait); - -/* Helpers for ioctl_ops. If hdl == NULL then they will all return -EINVAL. */ -int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc); -int v4l2_querymenu(struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm); -int v4l2_g_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_control *ctrl); -int v4l2_s_ctrl(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl, - struct v4l2_control *ctrl); -int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct v4l2_ext_controls *c); -int v4l2_try_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct v4l2_ext_controls *c); -int v4l2_s_ext_ctrls(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl, - struct v4l2_ext_controls *c); - -/* Helpers for subdevices. If the associated ctrl_handler == NULL then they - will all return -EINVAL. */ -int v4l2_subdev_queryctrl(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc); -int v4l2_subdev_querymenu(struct v4l2_subdev *sd, struct v4l2_querymenu *qm); -int v4l2_subdev_g_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs); -int v4l2_subdev_try_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs); -int v4l2_subdev_s_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs); -int v4l2_subdev_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl); -int v4l2_subdev_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl); - -/* Can be used as a subscribe_event function that just subscribes control - events. */ -int v4l2_ctrl_subdev_subscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh, - struct v4l2_event_subscription *sub); - -/* Log all controls owned by subdev's control handler. */ -int v4l2_ctrl_subdev_log_status(struct v4l2_subdev *sd); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-dev.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-dev.h deleted file mode 100644 index e30bbb9..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-dev.h +++ /dev/null @@ -1,273 +0,0 @@ -/* - * - * V 4 L 2 D R I V E R H E L P E R A P I - * - * Moved from videodev2.h - * - * Some commonly needed functions for drivers (v4l2-common.o module) - */ -#ifndef _V4L2_DEV_H -#define _V4L2_DEV_H -#if 0 -#include -#include -#include -#include -#include -#endif -#include "v4l2-osdep.h" -#include "uapi_videodev2.h" -#include "media-entity.h" - - -#define VIDEO_MAJOR 81 - -#define VFL_TYPE_GRABBER 0 -#define VFL_TYPE_VBI 1 -#define VFL_TYPE_RADIO 2 -#define VFL_TYPE_SUBDEV 3 -#define VFL_TYPE_MAX 4 - -/* Is this a receiver, transmitter or mem-to-mem? */ -/* Ignored for VFL_TYPE_SUBDEV. */ -#define VFL_DIR_RX 0 -#define VFL_DIR_TX 1 -#define VFL_DIR_M2M 2 - -//struct v4l2_ioctl_callbacks; // can't find out from the kernel source code -struct video_device; -struct v4l2_device; -struct v4l2_ctrl_handler; -enum v4l2_priority; -/* Flag to mark the video_device struct as registered. - Drivers can clear this flag if they want to block all future - device access. It is cleared by video_unregister_device. */ -#define V4L2_FL_REGISTERED (0) -/* file->private_data points to struct v4l2_fh */ -#define V4L2_FL_USES_V4L2_FH (1) -/* Use the prio field of v4l2_fh for core priority checking */ -#define V4L2_FL_USE_FH_PRIO (2) - -/* Priority helper functions */ - -struct v4l2_prio_state { - atomic_t prios[4]; -}; - -/* -enum v4l2_priority { - V4L2_PRIORITY_UNSET = 0, // l - V4L2_PRIORITY_BACKGROUND = 1, // I - V4L2_PRIORITY_INTERACTIVE = 2, // - V4L2_PRIORITY_RECORD = 3, // - V4L2_PRIORITY_DEFAULT = V4L2_PRIORITY_INTERACTIVE, -}; -ɬvOFMultiple Opensާ@AiHdevicePɳQhthread }(i.e open()) -ݭnγouvhϤӾާ@󭫭nAϥΪuŧOAprios[4]N[@C -*/ - -void v4l2_prio_init(struct v4l2_prio_state *global); -int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local, - enum v4l2_priority new); -void v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local); -void v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority local); -enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global); -int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority local); - - -struct v4l2_file_operations { - //struct module *owner; - //ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); - //ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); - //unsigned int (*poll) (struct file *, struct poll_table_struct *); - long (*ioctl) (unsigned int, void *); - long (*unlocked_ioctl) (unsigned int, void *); -#ifdef CONFIG_COMPAT - long (*compat_ioctl32) (unsigned int, void *); -#endif - //unsigned long (*get_unmapped_area) (struct file *, unsigned long, - // unsigned long, unsigned long, unsigned long); - int (*mmap) (); - int (*open) (); - int (*release) (); -}; - - - -/* - * Newer version of video_device, handled by videodev2.c - * This version moves redundant code from video device code to - * the common handler - */ - -struct video_device -{ -#if defined(CONFIG_MEDIA_CONTROLLER) - struct media_entity entity; -#endif - /* device ops */ - const struct v4l2_file_operations *fops; - - /* sysfs */ - //struct device dev; /* v4l device,this is mainlt for sysfs */ - unsigned long dev; /* replace to the reference count */ - void *dev_driver_data; - const char *init_name; /* initial name of the device */ - void (*dev_release)(); /* release call back in origonal dev */ - - //struct cdev *cdev; /* character device, which video device register */ - //struct file_operations *cdev_ops;/* file_operations in origonal cdev */ - - struct v4l2_device *v4l2_dev; /* v4l2_device parent */ - /* Only set parent if that can't be deduced from v4l2_dev */ - //struct device *dev_parent; /* device parent */ - - /* Control handler associated with this device node. May be NULL. - * look up v4l2_ctrls.h for more detail */ - struct v4l2_ctrl_handler *ctrl_handler; - - /* vb2_queue associated with this device node. May be NULL. */ - struct vb2_queue *queue; - - /* Priority state. If NULL, then v4l2_dev->prio will be used. */ - struct v4l2_prio_state *prio; - - /* device info */ - char name[32]; - int vfl_type; /* device type,usally assign the define VFL_TYPE_XXX value */ - int vfl_dir; /* receiver, transmitter or m2m,usally assign the define VFL_DIR_XXX value */ - /* 'minor' is set to -1 if the registration failed */ - int minor; - u16 num; /* record the registered video device node number */ - /* use bitops to set/clear/test flags,usally assign the define VFL_FL_XXX value */ - unsigned long flags; - /* attribute to differentiate multiple indices on one physical device */ - int index; - - /* V4L2 file handles */ - //spinlock_t fh_lock; /* Lock for all v4l2_fhs */ - _Lock fh_lock; - struct list_head fh_list; /* List of struct v4l2_fh */ - int debug; /* Activates debug level*/ - - /* Video standard vars (v4l2_std_id = u64)*/ - //v4l2_std_id tvnorms; /* Supported tv norms,usally assign the define VFL_STD_XXX value */ - u64 tvnorms; - - /* callbacks,this must non-NULL,in usually use the video_device_release()to replace of */ - void (*release)(struct video_device *vdev); - - /* ioctl callbacks,look up v4l2-ioctl.h for more detail */ - const struct v4l2_ioctl_ops *ioctl_ops; - //DECLARE_BITMAP(valid_ioctls, BASE_VIDIOC_PRIVATE); /* unsigned long valid_ioctls[6] */ - unsigned long valid_ioctls[6]; - /* serialization lock */ - //DECLARE_BITMAP(disable_locking, BASE_VIDIOC_PRIVATE); /* unsigned long disable_locking[6] */ - unsigned long disable_locking[6]; - //struct mutex *lock; /* make serilized ioctl lock possible */ - _Mutex *lock; -}; - -/* todo need to modify */ -#if 0 -#define media_entity_to_video_device(__e) \ - container_of(__e, struct video_device, entity) - -/* dev to video-device */ -#define to_video_device(cd) container_of(cd, struct video_device, dev) -#endif - -int __video_register_device(struct video_device *vdev, int type, - int nr, int warn_if_nr_in_use/*, struct module *owner*/); - -/* Register video devices. Note that if video_register_device fails, - the release() callback of the video_device structure is *not* called, so - the caller is responsible for freeing any data. Usually that means that - you call video_device_release() on failure. */ -static inline int video_register_device(struct video_device *vdev, - int type, int nr) -{ - // type = VFL_TYPE_GRABBER, nr = -1, 1, "THIS_MODULE" - return __video_register_device(vdev, type, nr, 1/*, vdev->fops->owner*/); -} - -/* Same as video_register_device, but no warning is issued if the desired - device node number was already in use. */ -static inline int video_register_device_no_warn( - struct video_device *vdev, int type, int nr) -{ - return __video_register_device(vdev, type, nr, 0/*, vdev->fops->owner*/); -} - -/* Unregister video devices. Will do nothing if vdev == NULL or - video_is_registered() returns false. */ -void video_unregister_device(struct video_device *vdev); - -/* helper functions to alloc/release struct video_device, the - latter can also be used for video_device->release(). */ -struct video_device *video_device_alloc(void); - -/* this release function frees the vdev pointer */ -void video_device_release(struct video_device *vdev); - -/* this release function does nothing, use when the video_device is a - static global struct. Note that having a static video_device is - a dubious construction at best. */ -void video_device_release_empty(struct video_device *vdev); - -/* returns true if cmd is a known V4L2 ioctl */ -bool v4l2_is_known_ioctl(unsigned int cmd); - -/* mark that this command shouldn't use core locking */ -static inline void v4l2_disable_ioctl_locking(struct video_device *vdev, unsigned int cmd) -{ - #define BASE_VIDIOC_PRIVATE 192 - if (_IOC_NR(cmd) < BASE_VIDIOC_PRIVATE) - set_bit(_IOC_NR(cmd), vdev->disable_locking); -} - -/* Mark that this command isn't implemented. This must be called before - video_device_register. See also the comments in determine_valid_ioctls(). - This function allows drivers to provide just one v4l2_ioctl_ops struct, but - disable ioctls based on the specific card that is actually found. */ -static inline void v4l2_disable_ioctl(struct video_device *vdev, unsigned int cmd) -{ - #define BASE_VIDIOC_PRIVATE 192 - if (_IOC_NR(cmd) < BASE_VIDIOC_PRIVATE) - set_bit(_IOC_NR(cmd), vdev->valid_ioctls); -} - -/* helper functions to access driver private data. */ -static inline void *video_get_drvdata(struct video_device *vdev) -{ - //return dev_get_drvdata(&vdev->dev); - return (vdev->dev_driver_data); -} - -static inline void video_set_drvdata(struct video_device *vdev, void *data) -{ - //dev_set_drvdata(&vdev->dev, data); - vdev->dev_driver_data = data; -} - -struct video_device *video_devdata(); - -/* Combine video_get_drvdata and video_devdata as this is - used very often. */ -static inline void *video_drvdata() -{ - return video_get_drvdata(video_devdata()); -} - -static inline const char *video_device_node_name(struct video_device *vdev) -{ - //return dev_name(&vdev->dev); - return (vdev->init_name); -} - -static inline int video_is_registered(struct video_device *vdev) -{ - return test_bit(V4L2_FL_REGISTERED, &vdev->flags); -} - -#endif /* _V4L2_DEV_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-device.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-device.h deleted file mode 100644 index 9eb7560..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-device.h +++ /dev/null @@ -1,216 +0,0 @@ -/* - V4L2 device support header. - - Copyright (C) 2008 Hans Verkuil - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _V4L2_DEVICE_H -#define _V4L2_DEVICE_H - -#include "media-device.h" -#include "v4l2-subdev.h" -#include "v4l2-dev.h" - - - - -/* Each instance of a V4L2 device should create the v4l2_device struct, - either stand-alone or embedded in a larger struct. - - It allows easy access to sub-devices (see v4l2-subdev.h) and provides - basic V4L2 device-level support. - */ - -#define V4L2_DEVICE_NAME_SIZE (20 + 16) - -struct v4l2_ctrl_handler; - -struct v4l2_device { - /* dev->driver_data points to this struct. - Note: dev might be NULL if there is no parent device - as is the case with e.g. ISA devices. */ - //struct device *dev; - //void *dev; - void *dev_driver_data; -//edit by Ian - //unsigned long dev_ref_count; -#if defined(CONFIG_MEDIA_CONTROLLER) - struct media_device *mdev; -#endif - /* used to keep track of the registered subdevs */ - struct list_head subdevs; - /* lock this struct; can be used by the driver as well if this - struct is embedded into a larger struct. */ - //spinlock_t lock; - _Lock lock; - /* unique device name, by default the driver name + bus ID */ - char name[V4L2_DEVICE_NAME_SIZE]; - /* notify callback called by some sub-devices. */ - void (*notify)(struct v4l2_subdev *sd, unsigned int notification, void *arg); - /* The control handler. May be NULL. */ - struct v4l2_ctrl_handler *ctrl_handler; - /* Device's priority state */ - struct v4l2_prio_state prio; - /* BKL replacement mutex. Temporary solution only. */ - //struct mutex ioctl_lock; - _Mutex ioctl_lock; - /* Keep track of the references to this struct. */ - //struct kref ref; - unsigned long ref; - /* Release function that is called when the ref count goes to 0. */ - void (*release)(struct v4l2_device *v4l2_dev); -}; - -static inline void v4l2_device_get(struct v4l2_device *v4l2_dev) -{ - //kref_get(&v4l2_dev->ref); - atomic_inc((atomic_t *)&v4l2_dev->ref); -} - -int v4l2_device_put(struct v4l2_device *v4l2_dev); - -/* Initialize v4l2_dev and make dev->driver_data point to v4l2_dev. - dev may be NULL in rare cases (ISA devices). In that case you - must fill in the v4l2_dev->name field before calling this function. */ -//int v4l2_device_register(struct v4l2_device *v4l2_dev); -int v4l2_device_register(void *dev_prive_date, struct v4l2_device *v4l2_dev); - -/* Optional function to initialize the name field of struct v4l2_device using - the driver name and a driver-global atomic_t instance. - This function will increment the instance counter and returns the instance - value used in the name. - - Example: - - static atomic_t drv_instance = ATOMIC_INIT(0); - - ... - - instance = v4l2_device_set_name(&v4l2_dev, "foo", &drv_instance); - - The first time this is called the name field will be set to foo0 and - this function returns 0. If the name ends with a digit (e.g. cx18), - then the name will be set to cx18-0 since cx180 looks really odd. */ -int v4l2_device_set_name(struct v4l2_device *v4l2_dev, const char *basename, - atomic_t *instance); - -/* Set v4l2_dev->dev to NULL. Call when the USB parent disconnects. - Since the parent disappears this ensures that v4l2_dev doesn't have an - invalid parent pointer. */ -void v4l2_device_disconnect(struct v4l2_device *v4l2_dev); - -/* Unregister all sub-devices and any other resources related to v4l2_dev. */ -void v4l2_device_unregister(struct v4l2_device *v4l2_dev); - -/* Register a subdev with a v4l2 device. While registered the subdev module - is marked as in-use. An error is returned if the module is no longer - loaded when you attempt to register it. */ -int v4l2_device_register_subdev(struct v4l2_device *v4l2_dev, - struct v4l2_subdev *sd); -/* Unregister a subdev with a v4l2 device. Can also be called if the subdev - wasn't registered. In that case it will do nothing. */ -void v4l2_device_unregister_subdev(struct v4l2_subdev *sd); - -/* Register device nodes for all subdev of the v4l2 device that are marked with - * the V4L2_SUBDEV_FL_HAS_DEVNODE flag. - */ -int v4l2_device_register_subdev_nodes(struct v4l2_device *v4l2_dev); - -/* Iterate over all subdevs. */ -#define v4l2_device_for_each_subdev(sd, v4l2_dev) \ - list_for_each_entry(sd, &(v4l2_dev)->subdevs, list, struct v4l2_subdev) - -/* Call the specified callback for all subdevs matching the condition. - Ignore any errors. Note that you cannot add or delete a subdev - while walking the subdevs list. */ -#define __v4l2_device_call_subdevs_p(v4l2_dev, sd, cond, o, f, args...) \ - do { \ - list_for_each_entry((sd), &(v4l2_dev)->subdevs, list, struct v4l2_subdev) \ - if ((cond) && (sd)->ops->o && (sd)->ops->o->f) \ - (sd)->ops->o->f((sd) , ##args); \ - } while (0) - -#define __v4l2_device_call_subdevs(v4l2_dev, cond, o, f, args...) \ - do { \ - struct v4l2_subdev *__sd; \ - \ - __v4l2_device_call_subdevs_p(v4l2_dev, __sd, cond, o, \ - f , ##args); \ - } while (0) - -/* Call the specified callback for all subdevs matching the condition. - If the callback returns an error other than 0 or -ENOIOCTLCMD, then - return with that error code. Note that you cannot add or delete a - subdev while walking the subdevs list. */ -#define __v4l2_device_call_subdevs_until_err_p(v4l2_dev, sd, cond, o, f, args...) \ -({ \ - long __err = 0; \ - \ - list_for_each_entry((sd), &(v4l2_dev)->subdevs, list, struct v4l2_subdev) { \ - if ((cond) && (sd)->ops->o && (sd)->ops->o->f) \ - __err = (sd)->ops->o->f((sd) , ##args); \ - if (__err && __err != -ENOIOCTLCMD) \ - break; \ - } \ - (__err == -ENOIOCTLCMD) ? 0 : __err; \ -}) - -#define __v4l2_device_call_subdevs_until_err(v4l2_dev, cond, o, f, args...) \ -({ \ - struct v4l2_subdev *__sd; \ - __v4l2_device_call_subdevs_until_err_p(v4l2_dev, __sd, cond, o, \ - f , ##args); \ -}) - -/* Call the specified callback for all subdevs matching grp_id (if 0, then - match them all). Ignore any errors. Note that you cannot add or delete - a subdev while walking the subdevs list. */ -#define v4l2_device_call_all(v4l2_dev, grpid, o, f, args...) \ - do { \ - struct v4l2_subdev *__sd; \ - \ - __v4l2_device_call_subdevs_p(v4l2_dev, __sd, \ - !(grpid) || __sd->grp_id == (grpid), o, f , \ - ##args); \ - } while (0) - -/* Call the specified callback for all subdevs matching grp_id (if 0, then - match them all). If the callback returns an error other than 0 or - -ENOIOCTLCMD, then return with that error code. Note that you cannot - add or delete a subdev while walking the subdevs list. */ -#define v4l2_device_call_until_err(v4l2_dev, grpid, o, f, args...) \ -({ \ - struct v4l2_subdev *__sd; \ - __v4l2_device_call_subdevs_until_err_p(v4l2_dev, __sd, \ - !(grpid) || __sd->grp_id == (grpid), o, f , \ - ##args); \ -}) - -#define v4l2_device_has_op(v4l2_dev, o, f) \ -({ \ - struct v4l2_subdev *__sd; \ - bool __result = FALSE; \ - list_for_each_entry(__sd, &(v4l2_dev)->subdevs, list, struct v4l2_subdev) { \ - if (v4l2_subdev_has_op(__sd, o, f)) { \ - __result = true; \ - break; \ - } \ - } \ - __result; \ -}) - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-event.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-event.h deleted file mode 100644 index 0490131..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-event.h +++ /dev/null @@ -1,139 +0,0 @@ -/* - * v4l2-event.h - * - * V4L2 events. - * - * Copyright (C) 2009--2010 Nokia Corporation. - * - * Contact: Sakari Ailus - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA - */ - -#ifndef V4L2_EVENT_H -#define V4L2_EVENT_H - -#if 0 -#include -#include -#endif -#include "v4l2-osdep.h" -#include "videodev2.h" - - -/* - * Overview: - * - * Events are subscribed per-filehandle. An event specification consists of a - * type and is optionally associated with an object identified through the - * 'id' field. So an event is uniquely identified by the (type, id) tuple. - * - * The v4l2-fh struct has a list of subscribed events. The v4l2_subscribed_event - * struct is added to that list, one for every subscribed event. - * - * Each v4l2_subscribed_event struct ends with an array of v4l2_kevent structs. - * This array (ringbuffer, really) is used to store any events raised by the - * driver. The v4l2_kevent struct links into the 'available' list of the - * v4l2_fh struct so VIDIOC_DQEVENT will know which event to dequeue first. - * - * Finally, if the event subscription is associated with a particular object - * such as a V4L2 control, then that object needs to know about that as well - * so that an event can be raised by that object. So the 'node' field can - * be used to link the v4l2_subscribed_event struct into a list of that - * object. - * - * So to summarize: - * - * struct v4l2_fh has two lists: one of the subscribed events, and one of the - * pending events. - * - * struct v4l2_subscribed_event has a ringbuffer of raised (pending) events of - * that particular type. - * - * If struct v4l2_subscribed_event is associated with a specific object, then - * that object will have an internal list of struct v4l2_subscribed_event so - * it knows who subscribed an event to that object. - */ - -struct v4l2_fh; -struct v4l2_subdev; -struct v4l2_subscribed_event; -struct video_device; - -/** struct v4l2_kevent - Internal kernel event struct. - * @list: List node for the v4l2_fh->available list. - * @sev: Pointer to parent v4l2_subscribed_event. - * @event: The event itself. - */ -struct v4l2_kevent { - struct list_head list; - struct v4l2_subscribed_event *sev; - struct v4l2_event event; -}; - -/** struct v4l2_subscribed_event_ops - Subscribed event operations. - * @add: Optional callback, called when a new listener is added - * @del: Optional callback, called when a listener stops listening - * @replace: Optional callback that can replace event 'old' with event 'new'. - * @merge: Optional callback that can merge event 'old' into event 'new'. - */ -struct v4l2_subscribed_event_ops { - int (*add)(struct v4l2_subscribed_event *sev, unsigned elems); - void (*del)(struct v4l2_subscribed_event *sev); - void (*replace)(struct v4l2_event *old, const struct v4l2_event *new); - void (*merge)(const struct v4l2_event *old, struct v4l2_event *new); -}; - -/** struct v4l2_subscribed_event - Internal struct representing a subscribed event. - * @list: List node for the v4l2_fh->subscribed list. - * @type: Event type. - * @id: Associated object ID (e.g. control ID). 0 if there isn't any. - * @flags: Copy of v4l2_event_subscription->flags. - * @fh: Filehandle that subscribed to this event. - * @node: List node that hooks into the object's event list (if there is one). - * @ops: v4l2_subscribed_event_ops - * @elems: The number of elements in the events array. - * @first: The index of the events containing the oldest available event. - * @in_use: The number of queued events. - * @events: An array of @elems events. - */ -struct v4l2_subscribed_event { - struct list_head list; - u32 type; - u32 id; - u32 flags; - struct v4l2_fh *fh; - struct list_head node; - const struct v4l2_subscribed_event_ops *ops; - unsigned elems; - unsigned first; - unsigned in_use; - struct v4l2_kevent events[]; -}; - -int v4l2_event_dequeue(struct v4l2_fh *fh, struct v4l2_event *event, - int nonblocking); -void v4l2_event_queue(struct video_device *vdev, const struct v4l2_event *ev); -void v4l2_event_queue_fh(struct v4l2_fh *fh, const struct v4l2_event *ev); -int v4l2_event_pending(struct v4l2_fh *fh); -int v4l2_event_subscribe(struct v4l2_fh *fh, - const struct v4l2_event_subscription *sub, unsigned elems, - const struct v4l2_subscribed_event_ops *ops); -int v4l2_event_unsubscribe(struct v4l2_fh *fh, - const struct v4l2_event_subscription *sub); -void v4l2_event_unsubscribe_all(struct v4l2_fh *fh); -int v4l2_event_subdev_unsubscribe(struct v4l2_subdev *sd, struct v4l2_fh *fh, - struct v4l2_event_subscription *sub); -#endif /* V4L2_EVENT_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-fh.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-fh.h deleted file mode 100644 index e3f8a21..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-fh.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * v4l2-fh.h - * - * V4L2 file handle. Store per file handle data for the V4L2 - * framework. Using file handles is optional for the drivers. - * - * Copyright (C) 2009--2010 Nokia Corporation. - * - * Contact: Sakari Ailus - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA - */ - -#ifndef V4L2_FH_H -#define V4L2_FH_H - -//#include - -#include "v4l2-osdep.h" - -struct video_device; -struct v4l2_ctrl_handler; - -struct v4l2_fh { - struct list_head list; - struct video_device *vdev; - struct v4l2_ctrl_handler *ctrl_handler; - enum v4l2_priority prio; - - /* Events */ - //wait_queue_head_t wait; - _Sema wait; - struct list_head subscribed; /* Subscribed events */ - struct list_head available; /* Dequeueable event */ - unsigned int navailable; - u32 sequence; -}; - -/* - * Initialise the file handle. Parts of the V4L2 framework using the - * file handles should be initialised in this function. Must be called - * from driver's v4l2_file_operations->open() handler if the driver - * uses v4l2_fh. - */ -void v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev); -/* - * Add the fh to the list of file handles on a video_device. The file - * handle must be initialised first. - */ -void v4l2_fh_add(struct v4l2_fh *fh); -/* - * Can be used as the open() op of v4l2_file_operations. - * It allocates a v4l2_fh and inits and adds it to the video_device associated - * with the file pointer. - */ -int v4l2_fh_open(); -/* - * Remove file handle from the list of file handles. Must be called in - * v4l2_file_operations->release() handler if the driver uses v4l2_fh. - * On error filp->private_data will be NULL, otherwise it will point to - * the v4l2_fh struct. - */ -void v4l2_fh_del(struct v4l2_fh *fh); -/* - * Release resources related to a file handle. Parts of the V4L2 - * framework using the v4l2_fh must release their resources here, too. - * Must be called in v4l2_file_operations->release() handler if the - * driver uses v4l2_fh. - */ -void v4l2_fh_exit(struct v4l2_fh *fh); -/* - * Can be used as the release() op of v4l2_file_operations. - * It deletes and exits the v4l2_fh associated with the file pointer and - * frees it. It will do nothing if filp->private_data (the pointer to the - * v4l2_fh struct) is NULL. This function always returns 0. - */ -int v4l2_fh_release(); -/* - * Returns 1 if this filehandle is the only filehandle opened for the - * associated video_device. If fh is NULL, then it returns 0. - */ -int v4l2_fh_is_singular(struct v4l2_fh *fh); -/* - * Helper function with struct file as argument. If filp->private_data is - * NULL, then it will return 0. - */ -extern void *replace_files[16]; -static inline int v4l2_fh_is_singular_file() -{ - //struct v4l2_fh *fh = replace_files[0]; - struct video_device *vdev = video_devdata(); - struct v4l2_fh *fh = replace_files[vdev->minor]; - return v4l2_fh_is_singular(fh); -} - -#endif /* V4L2_EVENT_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-int-device.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-int-device.h deleted file mode 100644 index 22e8b64..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-int-device.h +++ /dev/null @@ -1,306 +0,0 @@ -/* - * include/media/v4l2-int-device.h - * - * V4L2 internal ioctl interface. - * - * Copyright (C) 2007 Nokia Corporation. - * - * Contact: Sakari Ailus - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA - */ - -#ifndef V4L2_INT_DEVICE_H -#define V4L2_INT_DEVICE_H - -#include "v4l2-common.h" - - -#define V4L2NAMESIZE 32 - -/* - * - * The internal V4L2 device interface core. - * - */ - -enum v4l2_int_type { - v4l2_int_type_master = 1, - v4l2_int_type_slave -}; - -//struct module; - -struct v4l2_int_device; - -struct v4l2_int_master { - int (*attach)(struct v4l2_int_device *slave); - void (*detach)(struct v4l2_int_device *slave); -}; - -typedef int (v4l2_int_ioctl_func)(struct v4l2_int_device *); -typedef int (v4l2_int_ioctl_func_0)(struct v4l2_int_device *); -typedef int (v4l2_int_ioctl_func_1)(struct v4l2_int_device *, void *); - -struct v4l2_int_ioctl_desc { - int num; - v4l2_int_ioctl_func *func; -}; - -struct v4l2_int_slave { - /* Don't touch master. */ - struct v4l2_int_device *master; - - char attach_to[V4L2NAMESIZE]; - - int num_ioctls; - struct v4l2_int_ioctl_desc *ioctls; -}; - -struct v4l2_int_device { - /* Don't touch head. */ - struct LIST_HEADER head; - - //struct module *module; - - char name[V4L2NAMESIZE]; - - enum v4l2_int_type type; - union { - struct v4l2_int_master *master; - struct v4l2_int_slave *slave; - } u; - - void *priv; -}; - -void v4l2_int_device_try_attach_all(void); - -int v4l2_int_device_register(struct v4l2_int_device *d); -void v4l2_int_device_unregister(struct v4l2_int_device *d); - -int v4l2_int_ioctl_0(struct v4l2_int_device *d, int cmd); -int v4l2_int_ioctl_1(struct v4l2_int_device *d, int cmd, void *arg); - -/* - * - * Types and definitions for IOCTL commands. - * - */ - -enum v4l2_power { - V4L2_POWER_OFF = 0, - V4L2_POWER_ON, - V4L2_POWER_STANDBY, -}; - -/* Slave interface type. */ -enum v4l2_if_type { - /* - * Parallel 8-, 10- or 12-bit interface, used by for example - * on certain image sensors. - */ - V4L2_IF_TYPE_BT656, -}; - -enum v4l2_if_type_bt656_mode { - /* - * Modes without Bt synchronisation codes. Separate - * synchronisation signal lines are used. - */ - V4L2_IF_TYPE_BT656_MODE_NOBT_8BIT, - V4L2_IF_TYPE_BT656_MODE_NOBT_10BIT, - V4L2_IF_TYPE_BT656_MODE_NOBT_12BIT, - /* - * Use Bt synchronisation codes. The vertical and horizontal - * synchronisation is done based on synchronisation codes. - */ - V4L2_IF_TYPE_BT656_MODE_BT_8BIT, - V4L2_IF_TYPE_BT656_MODE_BT_10BIT, -}; - -struct v4l2_if_type_bt656 { - /* - * 0: Frame begins when vsync is high. - * 1: Frame begins when vsync changes from low to high. - */ - unsigned frame_start_on_rising_vs:1; - /* Use Bt synchronisation codes for sync correction. */ - unsigned bt_sync_correct:1; - /* Swap every two adjacent image data elements. */ - unsigned swap:1; - /* Inverted latch clock polarity from slave. */ - unsigned latch_clk_inv:1; - /* Hs polarity. 0 is active high, 1 active low. */ - unsigned nobt_hs_inv:1; - /* Vs polarity. 0 is active high, 1 active low. */ - unsigned nobt_vs_inv:1; - enum v4l2_if_type_bt656_mode mode; - /* Minimum accepted bus clock for slave (in Hz). */ - u32 clock_min; - /* Maximum accepted bus clock for slave. */ - u32 clock_max; - /* - * Current wish of the slave. May only change in response to - * ioctls that affect image capture. - */ - u32 clock_curr; -}; - -struct v4l2_ifparm { - enum v4l2_if_type if_type; - union { - struct v4l2_if_type_bt656 bt656; - } u; -}; - -/* IOCTL command numbers. */ -enum v4l2_int_ioctl_num { - /* - * - * "Proper" V4L ioctls, as in struct video_device. - * - */ - vidioc_int_enum_fmt_cap_num = 1, - vidioc_int_g_fmt_cap_num, - vidioc_int_s_fmt_cap_num, - vidioc_int_try_fmt_cap_num, - vidioc_int_queryctrl_num, - vidioc_int_g_ctrl_num, - vidioc_int_s_ctrl_num, - vidioc_int_cropcap_num, - vidioc_int_g_crop_num, - vidioc_int_s_crop_num, - vidioc_int_g_parm_num, - vidioc_int_s_parm_num, - vidioc_int_querystd_num, - vidioc_int_s_std_num, - vidioc_int_s_video_routing_num, - - /* - * - * Strictly internal ioctls. - * - */ - /* Initialise the device when slave attaches to the master. */ - vidioc_int_dev_init_num = 1000, - /* Delinitialise the device at slave detach. */ - vidioc_int_dev_exit_num, - /* Set device power state. */ - vidioc_int_s_power_num, - /* - * Get slave private data, e.g. platform-specific slave - * configuration used by the master. - */ - vidioc_int_g_priv_num, - /* Get slave interface parameters. */ - vidioc_int_g_ifparm_num, - /* Does the slave need to be reset after VIDIOC_DQBUF? */ - vidioc_int_g_needs_reset_num, - vidioc_int_enum_framesizes_num, - vidioc_int_enum_frameintervals_num, - - /* - * - * VIDIOC_INT_* ioctls. - * - */ - /* VIDIOC_INT_RESET */ - vidioc_int_reset_num, - /* VIDIOC_INT_INIT */ - vidioc_int_init_num, - - /* - * - * Start of private ioctls. - * - */ - vidioc_int_priv_start_num = 2000, -}; - -/* - * - * IOCTL wrapper functions for better type checking. - * - */ - -#define V4L2_INT_WRAPPER_0(name) \ - static inline int vidioc_int_##name(struct v4l2_int_device *d) \ - { \ - return v4l2_int_ioctl_0(d, vidioc_int_##name##_num); \ - } \ - \ - static inline struct v4l2_int_ioctl_desc \ - vidioc_int_##name##_cb(int (*func) \ - (struct v4l2_int_device *)) \ - { \ - struct v4l2_int_ioctl_desc desc; \ - \ - desc.num = vidioc_int_##name##_num; \ - desc.func = (v4l2_int_ioctl_func *)func; \ - \ - return desc; \ - } - -#define V4L2_INT_WRAPPER_1(name, arg_type, asterisk) \ - static inline int vidioc_int_##name(struct v4l2_int_device *d, \ - arg_type asterisk arg) \ - { \ - return v4l2_int_ioctl_1(d, vidioc_int_##name##_num, \ - (void *)(unsigned long)arg); \ - } \ - \ - static inline struct v4l2_int_ioctl_desc \ - vidioc_int_##name##_cb(int (*func) \ - (struct v4l2_int_device *, \ - arg_type asterisk)) \ - { \ - struct v4l2_int_ioctl_desc desc; \ - \ - desc.num = vidioc_int_##name##_num; \ - desc.func = (v4l2_int_ioctl_func *)func; \ - \ - return desc; \ - } - -V4L2_INT_WRAPPER_1(enum_fmt_cap, struct v4l2_fmtdesc, *); -V4L2_INT_WRAPPER_1(g_fmt_cap, struct v4l2_format, *); -V4L2_INT_WRAPPER_1(s_fmt_cap, struct v4l2_format, *); -V4L2_INT_WRAPPER_1(try_fmt_cap, struct v4l2_format, *); -V4L2_INT_WRAPPER_1(queryctrl, struct v4l2_queryctrl, *); -V4L2_INT_WRAPPER_1(g_ctrl, struct v4l2_control, *); -V4L2_INT_WRAPPER_1(s_ctrl, struct v4l2_control, *); -V4L2_INT_WRAPPER_1(cropcap, struct v4l2_cropcap, *); -V4L2_INT_WRAPPER_1(g_crop, struct v4l2_crop, *); -V4L2_INT_WRAPPER_1(s_crop, struct v4l2_crop, *); -V4L2_INT_WRAPPER_1(g_parm, struct v4l2_streamparm, *); -V4L2_INT_WRAPPER_1(s_parm, struct v4l2_streamparm, *); -V4L2_INT_WRAPPER_1(querystd, v4l2_std_id, *); -V4L2_INT_WRAPPER_1(s_std, v4l2_std_id, *); -V4L2_INT_WRAPPER_1(s_video_routing, struct v4l2_routing, *); - -V4L2_INT_WRAPPER_0(dev_init); -V4L2_INT_WRAPPER_0(dev_exit); -V4L2_INT_WRAPPER_1(s_power, enum v4l2_power, ); -V4L2_INT_WRAPPER_1(g_priv, void, *); -V4L2_INT_WRAPPER_1(g_ifparm, struct v4l2_ifparm, *); -V4L2_INT_WRAPPER_1(g_needs_reset, void, *); -V4L2_INT_WRAPPER_1(enum_framesizes, struct v4l2_frmsizeenum, *); -V4L2_INT_WRAPPER_1(enum_frameintervals, struct v4l2_frmivalenum, *); - -V4L2_INT_WRAPPER_0(reset); -V4L2_INT_WRAPPER_0(init); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-ioctl.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-ioctl.h deleted file mode 100644 index 6674b27..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-ioctl.h +++ /dev/null @@ -1,320 +0,0 @@ -/* - * - * V 4 L 2 D R I V E R H E L P E R A P I - * - * Moved from videodev2.h - * - * Some commonly needed functions for drivers (v4l2-common.o module) - */ -#ifndef _V4L2_IOCTL_H -#define _V4L2_IOCTL_H - -#if 0 -#include -#include -#include -#include /* need __user */ -#endif -#include "v4l2-osdep.h" -#include "videodev2.h" - -struct v4l2_fh; - -struct v4l2_ioctl_ops { - /* ioctl callbacks */ - - /* VIDIOC_QUERYCAP handler */ - int (*vidioc_querycap)(void *fh, struct v4l2_capability *cap); - - /* Priority handling */ - int (*vidioc_g_priority) (void *fh, - enum v4l2_priority *p); - int (*vidioc_s_priority) (void *fh, - enum v4l2_priority p); - - /* VIDIOC_ENUM_FMT handlers */ - int (*vidioc_enum_fmt_vid_cap) (void *fh, - struct v4l2_fmtdesc *f); - int (*vidioc_enum_fmt_vid_overlay) (void *fh, - struct v4l2_fmtdesc *f); - int (*vidioc_enum_fmt_vid_out) (void *fh, - struct v4l2_fmtdesc *f); - int (*vidioc_enum_fmt_vid_cap_mplane)(void *fh, - struct v4l2_fmtdesc *f); - int (*vidioc_enum_fmt_vid_out_mplane)(void *fh, - struct v4l2_fmtdesc *f); - - /* VIDIOC_G_FMT handlers */ - int (*vidioc_g_fmt_vid_cap) (void *fh, - struct v4l2_format *f); - int (*vidioc_g_fmt_vid_overlay)(void *fh, - struct v4l2_format *f); - int (*vidioc_g_fmt_vid_out) (void *fh, - struct v4l2_format *f); - int (*vidioc_g_fmt_vid_out_overlay)(void *fh, - struct v4l2_format *f); - int (*vidioc_g_fmt_vbi_cap) (void *fh, - struct v4l2_format *f); - int (*vidioc_g_fmt_vbi_out) (void *fh, - struct v4l2_format *f); - int (*vidioc_g_fmt_sliced_vbi_cap)(void *fh, - struct v4l2_format *f); - int (*vidioc_g_fmt_sliced_vbi_out)(void *fh, - struct v4l2_format *f); - int (*vidioc_g_fmt_vid_cap_mplane)(void *fh, - struct v4l2_format *f); - int (*vidioc_g_fmt_vid_out_mplane)(void *fh, - struct v4l2_format *f); - - /* VIDIOC_S_FMT handlers */ - int (*vidioc_s_fmt_vid_cap) (void *fh, - struct v4l2_format *f); - int (*vidioc_s_fmt_vid_overlay)(void *fh, - struct v4l2_format *f); - int (*vidioc_s_fmt_vid_out) (void *fh, - struct v4l2_format *f); - int (*vidioc_s_fmt_vid_out_overlay)(void *fh, - struct v4l2_format *f); - int (*vidioc_s_fmt_vbi_cap) (void *fh, - struct v4l2_format *f); - int (*vidioc_s_fmt_vbi_out) (void *fh, - struct v4l2_format *f); - int (*vidioc_s_fmt_sliced_vbi_cap)(void *fh, - struct v4l2_format *f); - int (*vidioc_s_fmt_sliced_vbi_out)(void *fh, - struct v4l2_format *f); - int (*vidioc_s_fmt_vid_cap_mplane)(void *fh, - struct v4l2_format *f); - int (*vidioc_s_fmt_vid_out_mplane)(void *fh, - struct v4l2_format *f); - - /* VIDIOC_TRY_FMT handlers */ - int (*vidioc_try_fmt_vid_cap) (void *fh, - struct v4l2_format *f); - int (*vidioc_try_fmt_vid_overlay)(void *fh, - struct v4l2_format *f); - int (*vidioc_try_fmt_vid_out) (void *fh, - struct v4l2_format *f); - int (*vidioc_try_fmt_vid_out_overlay)(void *fh, - struct v4l2_format *f); - int (*vidioc_try_fmt_vbi_cap) (void *fh, - struct v4l2_format *f); - int (*vidioc_try_fmt_vbi_out) (void *fh, - struct v4l2_format *f); - int (*vidioc_try_fmt_sliced_vbi_cap)(void *fh, - struct v4l2_format *f); - int (*vidioc_try_fmt_sliced_vbi_out)(void *fh, - struct v4l2_format *f); - int (*vidioc_try_fmt_vid_cap_mplane)(void *fh, - struct v4l2_format *f); - int (*vidioc_try_fmt_vid_out_mplane)(void *fh, - struct v4l2_format *f); - - /* Buffer handlers */ - int (*vidioc_reqbufs) (void *fh, struct v4l2_requestbuffers *b); - int (*vidioc_querybuf)(void *fh, struct v4l2_buffer *b); - int (*vidioc_qbuf) (void *fh, struct v4l2_buffer *b); - int (*vidioc_expbuf) (void *fh, - struct v4l2_exportbuffer *e); - int (*vidioc_dqbuf) (void *fh, struct v4l2_buffer *b); - - int (*vidioc_create_bufs)(void *fh, struct v4l2_create_buffers *b); - int (*vidioc_prepare_buf)(void *fh, struct v4l2_buffer *b); - - int (*vidioc_overlay) (void *fh, unsigned int i); - int (*vidioc_g_fbuf) (void *fh, - struct v4l2_framebuffer *a); - int (*vidioc_s_fbuf) (void *fh, - const struct v4l2_framebuffer *a); - - /* Stream on/off */ - int (*vidioc_streamon) (void *fh, enum v4l2_buf_type i); - int (*vidioc_streamoff)(void *fh, enum v4l2_buf_type i); - - /* Standard handling - ENUMSTD is handled by videodev.c - */ - int (*vidioc_g_std) (void *fh, v4l2_std_id *norm); - int (*vidioc_s_std) (void *fh, v4l2_std_id norm); - int (*vidioc_querystd) (void *fh, v4l2_std_id *a); - - /* Input handling */ - int (*vidioc_enum_input)(void *fh, - struct v4l2_input *inp); - int (*vidioc_g_input) (void *fh, unsigned int *i); - int (*vidioc_s_input) (void *fh, unsigned int i); - - /* Output handling */ - int (*vidioc_enum_output) (void *fh, - struct v4l2_output *a); - int (*vidioc_g_output) (void *fh, unsigned int *i); - int (*vidioc_s_output) (void *fh, unsigned int i); - - /* Control handling */ - int (*vidioc_queryctrl) (void *fh, - struct v4l2_queryctrl *a); - int (*vidioc_g_ctrl) (void *fh, - struct v4l2_control *a); - int (*vidioc_s_ctrl) (void *fh, - struct v4l2_control *a); - int (*vidioc_g_ext_ctrls) (void *fh, - struct v4l2_ext_controls *a); - int (*vidioc_s_ext_ctrls) (void *fh, - struct v4l2_ext_controls *a); - int (*vidioc_try_ext_ctrls) (void *fh, - struct v4l2_ext_controls *a); - int (*vidioc_querymenu) (void *fh, - struct v4l2_querymenu *a); - - /* Audio ioctls */ - int (*vidioc_enumaudio) (void *fh, - struct v4l2_audio *a); - int (*vidioc_g_audio) (void *fh, - struct v4l2_audio *a); - int (*vidioc_s_audio) (void *fh, - const struct v4l2_audio *a); - - /* Audio out ioctls */ - int (*vidioc_enumaudout) (void *fh, - struct v4l2_audioout *a); - int (*vidioc_g_audout) (void *fh, - struct v4l2_audioout *a); - int (*vidioc_s_audout) (void *fh, - const struct v4l2_audioout *a); - int (*vidioc_g_modulator) (void *fh, - struct v4l2_modulator *a); - int (*vidioc_s_modulator) (void *fh, - const struct v4l2_modulator *a); - /* Crop ioctls */ - int (*vidioc_cropcap) (void *fh, - struct v4l2_cropcap *a); - int (*vidioc_g_crop) (void *fh, - struct v4l2_crop *a); - int (*vidioc_s_crop) (void *fh, - const struct v4l2_crop *a); - int (*vidioc_g_selection) (void *fh, - struct v4l2_selection *s); - int (*vidioc_s_selection) (void *fh, - struct v4l2_selection *s); - /* Compression ioctls */ - int (*vidioc_g_jpegcomp) (void *fh, - struct v4l2_jpegcompression *a); - int (*vidioc_s_jpegcomp) (void *fh, - const struct v4l2_jpegcompression *a); - int (*vidioc_g_enc_index) ( void *fh, - struct v4l2_enc_idx *a); - int (*vidioc_encoder_cmd) (void *fh, - struct v4l2_encoder_cmd *a); - int (*vidioc_try_encoder_cmd) (void *fh, - struct v4l2_encoder_cmd *a); - int (*vidioc_decoder_cmd) (void *fh, - struct v4l2_decoder_cmd *a); - int (*vidioc_try_decoder_cmd) (void *fh, - struct v4l2_decoder_cmd *a); - - /* Stream type-dependent parameter ioctls */ - int (*vidioc_g_parm) (void *fh, - struct v4l2_streamparm *a); - int (*vidioc_s_parm) (void *fh, - struct v4l2_streamparm *a); - - /* Tuner ioctls */ - int (*vidioc_g_tuner) (void *fh, - struct v4l2_tuner *a); - int (*vidioc_s_tuner) (void *fh, - const struct v4l2_tuner *a); - int (*vidioc_g_frequency) (void *fh, - struct v4l2_frequency *a); - int (*vidioc_s_frequency) (void *fh, - const struct v4l2_frequency *a); - int (*vidioc_enum_freq_bands) (void *fh, - struct v4l2_frequency_band *band); - - /* Sliced VBI cap */ - int (*vidioc_g_sliced_vbi_cap) (void *fh, - struct v4l2_sliced_vbi_cap *a); - - /* Log status ioctl */ - int (*vidioc_log_status) ( void *fh); - - int (*vidioc_s_hw_freq_seek) (void *fh, - const struct v4l2_hw_freq_seek *a); - - /* Debugging ioctls */ -#ifdef CONFIG_VIDEO_ADV_DEBUG - int (*vidioc_g_register) (void *fh, - struct v4l2_dbg_register *reg); - int (*vidioc_s_register) (void *fh, - const struct v4l2_dbg_register *reg); - - int (*vidioc_g_chip_info) (void *fh, - struct v4l2_dbg_chip_info *chip); -#endif - - int (*vidioc_enum_framesizes) (void *fh, - struct v4l2_frmsizeenum *fsize); - - int (*vidioc_enum_frameintervals) (void *fh, - struct v4l2_frmivalenum *fival); - - /* DV Timings IOCTLs */ - int (*vidioc_s_dv_timings) (void *fh, - struct v4l2_dv_timings *timings); - int (*vidioc_g_dv_timings) (void *fh, - struct v4l2_dv_timings *timings); - int (*vidioc_query_dv_timings) ( void *fh, - struct v4l2_dv_timings *timings); - int (*vidioc_enum_dv_timings) (void *fh, - struct v4l2_enum_dv_timings *timings); - int (*vidioc_dv_timings_cap) (void *fh, - struct v4l2_dv_timings_cap *cap); - - int (*vidioc_subscribe_event) (struct v4l2_fh *fh, - const struct v4l2_event_subscription *sub); - int (*vidioc_unsubscribe_event)(struct v4l2_fh *fh, - const struct v4l2_event_subscription *sub); - - /* For other private ioctls */ - long (*vidioc_default) (void *fh, - bool valid_prio, unsigned int cmd, void *arg); -}; - - -/* v4l debugging and diagnostics */ - -/* Debug bitmask flags to be used on V4L2 */ -#define V4L2_DEBUG_IOCTL 0x01 -#define V4L2_DEBUG_IOCTL_ARG 0x02 - -/* Video standard functions */ -extern const char *v4l2_norm_to_name(v4l2_std_id id); -extern void v4l2_video_std_frame_period(int id, struct v4l2_fract *frameperiod); -extern int v4l2_video_std_construct(struct v4l2_standard *vs, - int id, const char *name); -/* Prints the ioctl in a human-readable format. If prefix != NULL, - then do printk(KERN_DEBUG "%s: ", prefix) first. */ -extern void v4l_printk_ioctl(const char *prefix, unsigned int cmd); - -/* Internal use only: get the mutex (if any) that we need to lock for the - given command. */ -struct video_device; -extern _Mutex *v4l2_ioctl_get_lock(struct video_device *vdev, unsigned cmd); - -/* names for fancy debug output */ -extern const char *v4l2_field_names[]; -extern const char *v4l2_type_names[]; - -#ifdef CONFIG_COMPAT -/* 32 Bits compatibility layer for 64 bits processors */ -extern long v4l2_compat_ioctl32(unsigned int cmd, unsigned long arg); -#endif - -typedef long (*v4l2_kioctl)(unsigned int cmd, void *arg); - -/* Include support for obsoleted stuff */ -extern long video_usercopy(unsigned int cmd, unsigned long arg, v4l2_kioctl func); - -/* Standard handlers for V4L ioctl's */ -extern long video_ioctl2(unsigned int cmd, unsigned long arg); - -#endif /* _V4L2_IOCTL_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-mediabus.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-mediabus.h deleted file mode 100644 index 553728e..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-mediabus.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Media Bus API header - * - * Copyright (C) 2009, Guennadi Liakhovetski - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef V4L2_MEDIABUS_H -#define V4L2_MEDIABUS_H - -#include "v4l2-mediabus.h" - - -/* Parallel flags */ -/* - * Can the client run in master or in slave mode. By "Master mode" an operation - * mode is meant, when the client (e.g., a camera sensor) is producing - * horizontal and vertical synchronisation. In "Slave mode" the host is - * providing these signals to the slave. - */ -#define V4L2_MBUS_MASTER (1 << 0) -#define V4L2_MBUS_SLAVE (1 << 1) -/* - * Signal polarity flags - * Note: in BT.656 mode HSYNC, FIELD, and VSYNC are unused - * V4L2_MBUS_[HV]SYNC* flags should be also used for specifying - * configuration of hardware that uses [HV]REF signals - */ -#define V4L2_MBUS_HSYNC_ACTIVE_HIGH (1 << 2) -#define V4L2_MBUS_HSYNC_ACTIVE_LOW (1 << 3) -#define V4L2_MBUS_VSYNC_ACTIVE_HIGH (1 << 4) -#define V4L2_MBUS_VSYNC_ACTIVE_LOW (1 << 5) -#define V4L2_MBUS_PCLK_SAMPLE_RISING (1 << 6) -#define V4L2_MBUS_PCLK_SAMPLE_FALLING (1 << 7) -#define V4L2_MBUS_DATA_ACTIVE_HIGH (1 << 8) -#define V4L2_MBUS_DATA_ACTIVE_LOW (1 << 9) -/* FIELD = 0/1 - Field1 (odd)/Field2 (even) */ -#define V4L2_MBUS_FIELD_EVEN_HIGH (1 << 10) -/* FIELD = 1/0 - Field1 (odd)/Field2 (even) */ -#define V4L2_MBUS_FIELD_EVEN_LOW (1 << 11) -/* Active state of Sync-on-green (SoG) signal, 0/1 for LOW/HIGH respectively. */ -#define V4L2_MBUS_VIDEO_SOG_ACTIVE_HIGH (1 << 12) -#define V4L2_MBUS_VIDEO_SOG_ACTIVE_LOW (1 << 13) - -/* Serial flags */ -/* How many lanes the client can use */ -#define V4L2_MBUS_CSI2_1_LANE (1 << 0) -#define V4L2_MBUS_CSI2_2_LANE (1 << 1) -#define V4L2_MBUS_CSI2_3_LANE (1 << 2) -#define V4L2_MBUS_CSI2_4_LANE (1 << 3) -/* On which channels it can send video data */ -#define V4L2_MBUS_CSI2_CHANNEL_0 (1 << 4) -#define V4L2_MBUS_CSI2_CHANNEL_1 (1 << 5) -#define V4L2_MBUS_CSI2_CHANNEL_2 (1 << 6) -#define V4L2_MBUS_CSI2_CHANNEL_3 (1 << 7) -/* Does it support only continuous or also non-continuous clock mode */ -#define V4L2_MBUS_CSI2_CONTINUOUS_CLOCK (1 << 8) -#define V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK (1 << 9) - -#define V4L2_MBUS_CSI2_LANES (V4L2_MBUS_CSI2_1_LANE | V4L2_MBUS_CSI2_2_LANE | \ - V4L2_MBUS_CSI2_3_LANE | V4L2_MBUS_CSI2_4_LANE) -#define V4L2_MBUS_CSI2_CHANNELS (V4L2_MBUS_CSI2_CHANNEL_0 | V4L2_MBUS_CSI2_CHANNEL_1 | \ - V4L2_MBUS_CSI2_CHANNEL_2 | V4L2_MBUS_CSI2_CHANNEL_3) - -/** - * v4l2_mbus_type - media bus type - * @V4L2_MBUS_PARALLEL: parallel interface with hsync and vsync - * @V4L2_MBUS_BT656: parallel interface with embedded synchronisation, can - * also be used for BT.1120 - * @V4L2_MBUS_CSI2: MIPI CSI-2 serial interface - */ -enum v4l2_mbus_type { - V4L2_MBUS_PARALLEL, - V4L2_MBUS_BT656, - V4L2_MBUS_CSI2, -}; - -/** - * v4l2_mbus_config - media bus configuration - * @type: in: interface type - * @flags: in / out: configuration flags, depending on @type - */ -struct v4l2_mbus_config { - enum v4l2_mbus_type type; - unsigned int flags; -}; - -#if 0 -static inline void v4l2_fill_pix_format(struct v4l2_pix_format *pix_fmt, - const struct v4l2_mbus_framefmt *mbus_fmt) -{ - pix_fmt->width = mbus_fmt->width; - pix_fmt->height = mbus_fmt->height; - pix_fmt->field = mbus_fmt->field; - pix_fmt->colorspace = mbus_fmt->colorspace; -} - -static inline void v4l2_fill_mbus_format(struct v4l2_mbus_framefmt *mbus_fmt, - const struct v4l2_pix_format *pix_fmt, - enum v4l2_mbus_pixelcode code) -{ - mbus_fmt->width = pix_fmt->width; - mbus_fmt->height = pix_fmt->height; - mbus_fmt->field = pix_fmt->field; - mbus_fmt->colorspace = pix_fmt->colorspace; - mbus_fmt->code = code; -} -#endif -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-osdep.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-osdep.h deleted file mode 100644 index 790ac43..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-osdep.h +++ /dev/null @@ -1,847 +0,0 @@ -#ifndef _V4L2_OSDEP_H_ -#define _V4L2_OSDEP_H_ - -#include "platform/platform_stdlib.h" -#include "basic_types.h" -#include "osdep_api.h" -#include "usb_defs.h" -#include "errno.h" -//#include "hal_util.h" -#include "dlist.h" - -#define V4L2_LAYER_DEBUG 0 -#if V4L2_LAYER_DEBUG -#define V4L2_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#define V4L2_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#else -#define V4L2_PRINTF(fmt, args...) -#define V4L2_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args) -#endif - -/* misc items */ -#ifndef ssize_t -#define ssize_t SSIZE_T -#endif -#ifndef size_t -#define size_t SIZE_T -#endif - -#ifndef __user -#define __user -#endif - -#ifndef loff_t -#define loff_t long -#endif -#ifndef __u8 -#define __u8 u8 -#endif -#ifndef __u16 -#define __u16 u16 -#endif -#ifndef __u32 -#define __u32 u32 -#endif -#ifndef __u64 -#define __u64 u64 -#endif -#ifndef __s8 -#define __s8 s8 -#endif -#ifndef __s16 -#define __s16 s16 -#endif -#ifndef __s32 -#define __s32 s32 -#endif -#ifndef __s64 -#define __s64 s64 -#endif - -#ifndef spinlock_t -#define spinlock_t _Lock -#endif - -#ifndef gfp_t -#define gfp_t u32 -#endif - -#ifndef _atomic_spin_lock_irqsave -#define _atomic_spin_lock_irqsave(p, flags) SaveAndCli() -#endif -#ifndef _atomic_spin_unlock_irqrestore -#define _atomic_spin_unlock_irqrestore(p, flags) RestoreFlags() -#endif -#ifndef local_irq_save -#define local_irq_save(flags) SaveAndCli() -#endif -#ifndef local_irq_restore -#define local_irq_restore(flags) RestoreFlags() -#endif -#ifndef cris_atomic_save -#define cris_atomic_save(addr, flags) local_irq_save(flags) -#endif -#ifndef cris_atomic_restore -#define cris_atomic_restore(addr, flags) local_irq_restore(flags) -#endif - -/* - * abs() handles unsigned and signed longs, ints, shorts and chars. For all - * input types abs() returns a signed long. - * abs() should not be used for 64-bit types (s64, u64, long long) - use abs64() - * for those. - */ - -#ifndef abs -#define abs(x) ((x >= 0) ? (x) : (x * -1)) -#endif - -#ifndef min -#define min(x, y) ((x) < (y) ? (x) : (y)) -#endif -#ifndef max -#define max(x, y) ((x) > (y) ? (x) : (y)) -#endif -#ifndef min_t -#define min_t(type, x, y) ({ \ - type __min1 = (x); \ - type __min2 = (y); \ - (__min1 < __min2) ? (__min1) : (__min2); }) -#endif -#ifndef max_t -#define max_t(type, x, y) ({ \ - type __max1 = (x); \ - type __max2 = (y); \ - (__max1 > __max2) ? (__max1) : (__max2); }) -#endif -#ifndef max_tt -#define max_tt(ret,type,x,y) do{ \ - type __max1 = (x); \ - type __max2 = (y); \ - ret = (__max1 > __max2) ? (__max1) : (__max2); }while(0) -#endif -#ifndef min_tt -#define min_tt(ret,type, x, y) do{ \ - type __min1 = (x); \ - type __min2 = (y); \ - ret = (__min1 < __min2) ? (__min1) : (__min2); }while(0) -#endif - - -/** -* container_of - cast a member of a structure out to the containing structure -* @p(ptr): the pointer to the member. -* @t(type): the type of the container struct this is embedded in. -* @m(member): the name of the member within the struct. -* -*/ -#ifndef container_of - #define container_of(ptr, type, member) \ - ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member))) -#endif - - /** - * list_next_entry - get the next element in list - * @pos: the type * to cursor - * @member: the name of the list_struct within the struct. - */ - -#define list_next_entry(pos, member, type) \ - list_entry((pos)->member.next, type, member) - - /** - * list_for_each_entry_continue - continue iteration over list of given type - * @pos: the type * to use as a loop cursor. - * @head: the head for your list. - * @member: the name of the list_struct within the struct. - * - * Continue to iterate over list of given type, continuing after - * the current position. - */ - -#define list_for_each_entry_continue(pos, head, member, type) \ - for (pos = list_next_entry(pos, member, type); \ - &pos->member != (head); \ - pos = list_next_entry(pos, member, type)) - - -/* spin lock */ -#ifndef spin_lock_init - #define spin_lock_init(plock) RtlSpinlockInit((plock)) -#endif -#ifndef spin_lock_free - #define spin_lock_free(plock) RtlSpinlockFree((plock)) -#endif -#ifndef spin_lock - #define spin_lock(plock) RtlSpinlock((plock)) -#endif -#ifndef spin_unlock - #define spin_unlock(plock) RtlSpinunlock((plock)) -#endif - - -/* mutex */ -#ifndef Mutex - #define Mutex _Mutex -#endif -#ifndef mutex_init - #define mutex_init(pmutex) RtlMutexInit((pmutex)) -#endif -#ifndef mutex_lock - #define mutex_lock(pmutex) RtlDownSema((pmutex)) -#endif -#ifndef mutex_unlock - #define mutex_unlock(pmutex) RtlUpSema((pmutex)) -#endif -#ifndef mutex_destory - #define mutex_destory(pmutex) RtlMutexFree((pmutex)) -#endif - -/* semaphore */ -#ifndef Sema - #define Sema _Sema -#endif -#ifndef Sema_Init - #define Sema_Init(pmutex, pval) RtlInitSema(pmutex, pval) -#endif -#ifndef Sema_Free - #define Sema_Free(pmutex) RtlFreeSema(pmutex) -#endif -#ifndef Sema_Up - #define Sema_Up(pmutex) RtlUpSema(pmutex) -#endif -#ifndef Sema_Down - #define Sema_Down(pmutex) RtlDownSema(pmutex) -#endif -#ifndef Sema_Sown_WithTimeout - #define Sema_Down_WithTimeout(pmutex,ptimeout) RtlDownSemaWithTimeout(pmutex,ptimeout) // -#endif - -/* Atomic integer operations */ -#ifndef atomic_set - #define atomic_set(v, i) RTL_ATOMIC_SET((v), (i)) -#endif -#ifndef atomic_read - #define atomic_read(v) RTL_ATOMIC_READ((v)) -#endif -#ifndef atomic_add - #define atomic_add(v, i) RTL_ATOMIC_ADD((v), (i)) -#endif -#ifndef atomic_sub - #define atomic_sub(v, i) RTL_ATOMIC_SUB((v), (i)) -#endif -#ifndef atomic_inc - #define atomic_inc(v) RTL_ATOMIC_INC((v)) -#endif -#ifndef atomic_dec - #define atomic_dec(v) RTL_ATOMIC_DEC((v)) -#endif - - -// IOCTL ... -#ifndef _IOC_NRBITS -#define _IOC_NRBITS (8) -#endif -#ifndef _IOC_TYPEBITS -#define _IOC_TYPEBITS (8) -#endif -#ifndef _IOC_SIZEBITS -#define _IOC_SIZEBITS (14) -#endif -#ifndef _IOC_DIRBITS -#define _IOC_DIRBITS (2) -#endif -#ifndef _IOC_NRMASK -#define _IOC_NRMASK ((1 << _IOC_NRBITS) - 1) -#endif -#ifndef _IOC_TYPEMASK -#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS) - 1) -#endif -#ifndef _IOC_SIZEMASK -#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS) - 1) -#endif -#ifndef _IOC_DIRMASK -#define _IOC_DIRMASK ((1 << _IOC_DIRBITS) - 1) -#endif -#ifndef _IOC_NRSHIFT -#define _IOC_NRSHIFT (0) -#endif -#ifndef _IOC_TYPESHIFT -#define _IOC_TYPESHIFT (_IOC_NRSHIFT + _IOC_NRBITS) -#endif -#ifndef _IOC_SIZESHIFT -#define _IOC_SIZESHIFT (_IOC_TYPESHIFT + _IOC_TYPEBITS) -#endif -#ifndef _IOC_DIRSHIFT -#define _IOC_DIRSHIFT (_IOC_SIZESHIFT + _IOC_SIZEBITS) -#endif - -/* - * Direction bits. - */ -#ifndef _IOC_NONE -#define _IOC_NONE (0U) -#endif -#ifndef _IOC_WRITE -#define _IOC_WRITE (1U) -#endif -#ifndef _IOC_READ -#define _IOC_READ (2U) -#endif - - -/* - * combine the four dir�Atype�Anr�Asize parameters to one cmd parameter - * - */ -#ifndef _IOC -#define _IOC(dir,type,nr,size) \ - (((dir) << _IOC_DIRSHIFT) | \ - ((type) << _IOC_TYPESHIFT) | \ - ((nr) << _IOC_NRSHIFT) | \ - ((size) << _IOC_SIZESHIFT)) -#endif -/* - * used to create IOCTL cmd - */ -#ifndef _IO -#define _IO(type,nr) _IOC(_IOC_NONE,(type), (nr), 0) -#endif -#ifndef _IOR -#define _IOR(type,nr,size) _IOC(_IOC_READ,(type), (nr), sizeof(size)) -#endif -#ifndef _IOW -#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type), (nr), sizeof(size)) -#endif -#ifndef _IOWR -#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE, (type), (nr), sizeof(size)) -#endif -/* - * used to decode ioctl infoations.. - */ -#ifndef _IOC_DIR -#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) -#endif -#ifndef _IOC_TYPE -#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK) -#endif -#ifndef _IOC_NR -#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK) -#endif -#ifndef _IOC_SIZE -#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK) -#endif -/* ...and for the drivers/sound files... */ -#ifndef IOC_IN -#define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT) -#endif -#ifndef IOC_OUT -#define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT) -#endif -#ifndef IOC_INOUT -#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT) -#endif -#ifndef IOCSIZE_MASK -#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT) -#endif -#ifndef IOCSIZE_SHIFT -#define IOCSIZE_SHIFT (_IOC_SIZESHIFT) -#endif - -#ifndef DIV_ROUND_UP -#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) -#endif -#ifndef BITS_PER_LONG -#define BITS_PER_LONG (32) -#endif -#ifndef BITS_PER_LONG_LONG -#define BITS_PER_LONG_LONG (32) -#endif -#ifndef BIT -#define BIT(nr) (1UL << (nr)) -#endif -#ifndef BIT_ULL -#define BIT_ULL(nr) (1ULL << (nr)) -#endif -#ifndef BIT_MASK -#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG)) -#endif -#ifndef BIT_WORD -#define BIT_WORD(nr) ((nr) / BITS_PER_LONG) -#endif -#ifndef BIT_ULL_MASK -#define BIT_ULL_MASK(nr) (1ULL << ((nr) % BITS_PER_LONG_LONG)) -#endif -#ifndef BIT_ULL_WORD -#define BIT_ULL_WORD(nr) ((nr) / BITS_PER_LONG_LONG) -#endif -#ifndef BITS_PER_BYTE -#define BITS_PER_BYTE (8) -#endif -#ifndef BITS_TO_LONGS -#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) -#endif - -/* __ffs to find out the first exist 1 offset, from bit 0 ~ 31 */ -#ifndef ffz -#define ffz(x) __ffs(~(x)) -#endif -/* __builtin_constant_p is gcc build-in function to check the parameter is const or not */ -#ifndef small_const_nbits -#define small_const_nbits(nbits) \ - (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG) -#endif -/** - * __ffs - find first bit in word. - * @word: The word to search - * - * Undefined if no bit exists, so code should check against 0 first. - */ -static inline unsigned long __ffs(unsigned long word) -{ - int num = 0; - -#if BITS_PER_LONG == 64 - if ((word & 0xffffffff) == 0) { - num += 32; - word >>= 32; - } -#endif - if ((word & 0xffff) == 0) { - num += 16; - word >>= 16; - } - if ((word & 0xff) == 0) { - num += 8; - word >>= 8; - } - if ((word & 0xf) == 0) { - num += 4; - word >>= 4; - } - if ((word & 0x3) == 0) { - num += 2; - word >>= 2; - } - if ((word & 0x1) == 0) - num += 1; - - return num; -} - -/** - * __fls - find last (most-significant) set bit in a long word - * @word: the word to search - * - * Undefined if no set bit exists, so code should check against 0 first. - */ -static inline unsigned long __fls(unsigned long word) -{ - int num = BITS_PER_LONG - 1; - - #if BITS_PER_LONG == 64 - if (!(word & (~0ul << 32))) { - num -= 32; - word <<= 32; - } - #endif - if (!(word & (~0ul << (BITS_PER_LONG-16)))) { - num -= 16; - word <<= 16; - } - if (!(word & (~0ul << (BITS_PER_LONG-8)))) { - num -= 8; - word <<= 8; - } - if (!(word & (~0ul << (BITS_PER_LONG-4)))) { - num -= 4; - word <<= 4; - } - if (!(word & (~0ul << (BITS_PER_LONG-2)))) { - num -= 2; - word <<= 2; - } - if (!(word & (~0ul << (BITS_PER_LONG-1)))) - num -= 1; - return num; -} - -/** - * test_bit - Determine whether a bit is set - * @nr: bit number to test - * @addr: Address to start counting from - */ -static inline int test_bit(int nr, const volatile unsigned long *addr) -{ - return ((1UL << (nr & 31)) & (addr[nr >> 5])) != 0; -} - - - -/* -* Find the first cleared bit in a memory region. -*/ -static inline unsigned long find_first_zero_bit( - const unsigned long *addr, unsigned long size) -{ - const unsigned long *p = addr; - unsigned long result = 0; - unsigned long tmp; - - while (size & ~(BITS_PER_LONG-1)) { - if (~(tmp = *(p++))) - goto found; - result += BITS_PER_LONG; - size -= BITS_PER_LONG; - } - if (!size) - return result; - - tmp = (*p) | (~0UL << size); - if (tmp == ~0UL) /* Are any bits zero? */ - return result + size; /* Nope. */ -found: - - return result + ffz(tmp); - //tmp = 0; - //return result; - -} - -static inline unsigned long find_next_zero_bit( - const unsigned long *addr,unsigned long size, unsigned long offset) -{ - const unsigned long *p = addr + BIT_WORD(offset); // offset��_p���V��long�a�}32���? - unsigned long result = offset & ~(BITS_PER_LONG-1); // offset�O��result?4�r? - unsigned long tmp; - - if (offset >= size) - return size; - size -= result; // ?��32��㭿?�W - offset %= BITS_PER_LONG; // offset��_32�쪺�ĤL�� - if (offset) { // offset���b�@?long?�u����0��W,�b1-31�줤[luther.gliethttp] - tmp = *(p++); - tmp |= ~0UL >> (BITS_PER_LONG - offset); // ?0-offset?�u��R�W1. - if (size < BITS_PER_LONG) // ����32bits - goto found_first; - if (~tmp) // ���D�D0?���t��0�� - goto found_middle; - size -= BITS_PER_LONG; // �p�G�W��~tmp���_0,���\?��?*p?�u?32���1.[luther.gliethttp] - result += BITS_PER_LONG; - } - while (size & ~(BITS_PER_LONG-1)) { // �n�F,?���?��,��?��offset�w??�b4�r?����0��W,�U��?�� - if (~(tmp = *(p++))) // 4�r?�ֳt�d?.�p�G~tmp�D0,?��?32��?�u���t��0?�u,���.[luther.gliethttp] - goto found_middle; - result += BITS_PER_LONG; // ��U�@?4�r?��? - size -= BITS_PER_LONG; // ?��4�r??�u - } - if (!size) // size���_0,?������size���_4�r?�㭿?,�䦸�Ҧ�?�u�w?�d��, - return result; // �Ҧ�?�u����?1,?��??0��,result���_size.[luther.gliethttp] - tmp = *p; // size���O32��㭿?,?�ѤL?bit?��?�d,???��U��?�d�u�@.[luther.gliethtp] - -found_first: - tmp |= ~0UL << size; // ?�b0-size?����?�u,size-31?���ϥΪ�?,�ҥH��?size-31�m����1. - if (tmp == ~0UL) /* Are any bits zero? */ // �p�Gtmp��1,���\?���N?���1? - return result + size; /* Nope. */ // result+size�N���_��??�J��??size�j�p.[luther.gliethttp] -found_middle: - return result + ffz(tmp); // ��?�b32��?�u��0-31��??���w�s�b0���,?��L�O�ĤL��.[luther.gliethttp] -} - -//int find_next_zero_bit(const void * p, int size, int offset); -//int find_first_bit(const unsigned long *p, unsigned size); -//int find_next_bit(const unsigned long *p, int size, int offset); -/** -* set_bit - Atomically set a bit in memory -* @nr: the bit to set -* @addr: the address to start counting from -* -* This function is atomic and may not be reordered. See __set_bit() -* if you do not require the atomic guarantees. -* -* Note: there are no guarantees that this function will not be reordered -* on non x86 architectures, so if you are writing portable code, -* make sure not to rely on its reordering guarantees. -* -* Note that @nr may be almost arbitrarily large; this function is not -* restricted to acting on a single-word quantity. -*/ -static inline void set_bit(int nr, volatile unsigned long *addr) -{ - unsigned long mask = BIT_MASK(nr); - unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); - unsigned long flags; - (void)flags; - //taskENTER_CRITICAL(); - _atomic_spin_lock_irqsave(p, flags); - *p |= mask; - _atomic_spin_unlock_irqrestore(p, flags); - //taskEXIT_CRITICAL(); -} - -/** -* clear_bit - Clears a bit in memory -* @nr: Bit to clear -* @addr: Address to start counting from -* -* clear_bit() is atomic and may not be reordered. However, it does -* not contain a memory barrier, so if it is used for locking purposes, -* you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit() -* in order to ensure changes are visible on other processors. -*/ -static inline void clear_bit(int nr, volatile unsigned long *addr) -{ - unsigned long mask = BIT_MASK(nr); - unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); - unsigned long flags; - (void)flags; - _atomic_spin_lock_irqsave(p, flags); - //taskENTER_CRITICAL(); - *p &= ~mask; - _atomic_spin_unlock_irqrestore(p, flags); - //taskEXIT_CRITICAL(); -} - -/** -* change_bit - Toggle a bit in memory -* @nr: Bit to change -* @addr: Address to start counting from -* -* change_bit() is atomic and may not be reordered. It may be -* reordered on other architectures than x86. -* Note that @nr may be almost arbitrarily large; this function is not -* restricted to acting on a single-word quantity. -*/ -static inline void change_bit(int nr, volatile unsigned long *addr) -{ - unsigned long mask = BIT_MASK(nr); - unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); - unsigned long flags; - (void)flags; - //taskENTER_CRITICAL(); - _atomic_spin_lock_irqsave(p, flags); - *p ^= mask; - _atomic_spin_unlock_irqrestore(p, flags); - //taskEXIT_CRITICAL(); -} - -/** -* test_and_set_bit - Set a bit and return its old value -* @nr: Bit to set -* @addr: Address to count from -* -* This operation is atomic and cannot be reordered. -* It may be reordered on other architectures than x86. -* It also implies a memory barrier. -*/ -static inline int test_and_set_bit(int nr, volatile unsigned long *addr) -{ - unsigned long mask = BIT_MASK(nr); - unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); - unsigned long old; - unsigned long flags; - (void)flags; - //taskENTER_CRITICAL(); - - _atomic_spin_lock_irqsave(p, flags); - old = *p; - *p = old | mask; - _atomic_spin_unlock_irqrestore(p, flags); - //taskEXIT_CRITICAL(); - - return (old & mask) != 0; -} - -/** -* test_and_clear_bit - Clear a bit and return its old value -* @nr: Bit to clear -* @addr: Address to count from -* -* This operation is atomic and cannot be reordered. -* It can be reorderdered on other architectures other than x86. -* It also implies a memory barrier. -*/ -static inline int test_and_clear_bit(int nr, volatile unsigned long *addr) -{ - unsigned long mask = BIT_MASK(nr); - unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); - unsigned long old; - unsigned long flags; - (void)flags; - //taskENTER_CRITICAL(); - _atomic_spin_lock_irqsave(p, flags); - old = *p; - *p = old & ~mask; - _atomic_spin_unlock_irqrestore(p, flags); - //taskEXIT_CRITICAL(); - - return (old & mask) != 0; -} -/** -* test_and_change_bit - Change a bit and return its old value -* @nr: Bit to change -* @addr: Address to count from -* -* This operation is atomic and cannot be reordered. -* It also implies a memory barrier. -*/ -static inline int test_and_change_bit(int nr, volatile unsigned long *addr) -{ - unsigned long mask = BIT_MASK(nr); - unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); - unsigned long old; - unsigned long flags; - - (void)flags; - _atomic_spin_lock_irqsave(p, flags); - old = *p; - *p = old ^ mask; - _atomic_spin_unlock_irqrestore(p, flags); - - - return (old & mask) != 0; -} - - -static inline int __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1, - const unsigned long *bitmap2, int bits) -{ - int k; - int nr = BITS_TO_LONGS(bits); - unsigned long result = 0; - - for (k = 0; k < nr; k++) - result |= (dst[k] = bitmap1[k] & ~bitmap2[k]); - return result != 0; -} - -static inline int bitmap_andnot(unsigned long *dst, const unsigned long *src1, - const unsigned long *src2, int nbits) -{ -// if (small_const_nbits(nbits)) -// return (*dst = *src1 & ~(*src2)) != 0; - return __bitmap_andnot(dst, src1, src2, nbits); -} - -static inline int atomic_inc_return(volatile atomic_t *v) -{ - unsigned long flags; - (void)flags; - int retval; - cris_atomic_save(v, flags); - retval = ++(v->counter); - cris_atomic_restore(v, flags); - return retval; -} - -typedef __u16 __le16; -typedef __u16 __be16; -typedef __u32 __le32; -typedef __u32 __be32; -typedef __u64 __le64; -typedef __u64 __be64; -typedef __u16 __sum16; -typedef __u32 __wsum; - -#ifndef __GFP_WAIT -#define __GFP_WAIT (0x10u) -#endif -#ifndef __GFP_HIGH -#define __GFP_HIGH (0x20u) -#endif -#ifndef __GFP_IO -#define __GFP_IO (0x40u) -#endif -#ifndef __GFP_FS -#define __GFP_FS (0x80u) -#endif -#ifndef GFP_NOIO -#define GFP_NOIO (0x10u) -#endif -#ifndef __GFP_NOWARN -#define __GFP_NOWARN (0x200u) -#endif -#ifndef GFP_KERNEL -#define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS) -#endif - -#ifndef copy_from_user -#define copy_from_user(to, from, sz) _memcpy((to), (from), (sz)) -#endif -#ifndef copy_to_user -#define copy_to_user(to, from, sz) _memcpy((to), (from), (sz)) -#endif - -#if 0 /*comment since we are not using polling*/ -/* These are specified by iBCS2 */ -#ifndef POLLIN -#define POLLIN 0x0001 -#endif -#ifndef POLLPRI -#define POLLPRI 0x0002 -#endif -#ifndef POLLOUT -#define POLLOUT 0x0004 -#endif -#ifndef POLLERR -#define POLLERR 0x0008 -#endif -#ifndef POLLHUP -#define POLLHUP 0x0010 -#endif -#ifndef POLLNVAL -#define POLLNVAL 0x0020 -#endif -/* The rest seem to be more-or-less nonstandard. Check them! */ -#ifndef POLLRDNORM -#define POLLRDNORM 0x0040 -#endif -#ifndef POLLRDBAND -#define POLLRDBAND 0x0080 -#endif -#ifndef POLLWRNORM -#define POLLWRNORM 0x0100 -#endif -#ifndef POLLWRBAND -#define POLLWRBAND 0x0200 -#endif -#ifndef POLLMSG -#define POLLMSG 0x0400 -#endif -#ifndef POLLREMOVE -#define POLLREMOVE 0x1000 -#endif -#ifndef POLLRDHUP -#define POLLRDHUP 0x2000 -#endif -#ifndef POLLFREE -#define POLLFREE 0x4000 /* currently only for epoll */ -#endif -#ifndef POLL_BUSY_LOOP -#define POLL_BUSY_LOOP 0x8000 -#endif -#endif - -struct __wait_queue_head { - _Sema lock; - struct list_head task_list; -}; - -typedef struct __wait_queue_head wait_queue_head_t; - -static inline void __init_waitqueue_head(wait_queue_head_t *q) -{ - //spin_lock_init(&q->lock); - RtlInitSema(&q->lock,0); - INIT_LIST_HEAD(&q->task_list); -} -#ifndef init_waitqueue_head -#define init_waitqueue_head(q) \ -do { \ - __init_waitqueue_head((q)); \ -} while (0) -#endif -#ifndef DEFAULT_POLLMASK -#define DEFAULT_POLLMASK (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM) -#endif - -#endif /*_V4L2_OSDEP_H_*/ diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-subdev.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-subdev.h deleted file mode 100644 index 7f4ac2f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2-subdev.h +++ /dev/null @@ -1,700 +0,0 @@ -/* - V4L2 sub-device support header. - - Copyright (C) 2008 Hans Verkuil - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _V4L2_SUBDEV_H -#define _V4L2_SUBDEV_H - -#if 0 -#include -#endif - -#include "v4l2-subdev.h" -#include "media-entity.h" -#include "v4l2-async.h" -#include "v4l2-common.h" -#include "v4l2-dev.h" -#include "v4l2-fh.h" -#include "v4l2-mediabus.h" - - -/* generic v4l2_device notify callback notification values */ -#define V4L2_SUBDEV_IR_RX_NOTIFY _IOW('v', 0, u32) -#define V4L2_SUBDEV_IR_RX_FIFO_SERVICE_REQ 0x00000001 -#define V4L2_SUBDEV_IR_RX_END_OF_RX_DETECTED 0x00000002 -#define V4L2_SUBDEV_IR_RX_HW_FIFO_OVERRUN 0x00000004 -#define V4L2_SUBDEV_IR_RX_SW_FIFO_OVERRUN 0x00000008 - -#define V4L2_SUBDEV_IR_TX_NOTIFY _IOW('v', 1, u32) -#define V4L2_SUBDEV_IR_TX_FIFO_SERVICE_REQ 0x00000001 - -struct v4l2_device; -struct v4l2_ctrl_handler; -struct v4l2_event_subscription; -struct v4l2_fh; -struct v4l2_subdev; -struct v4l2_subdev_fh; -//struct tuner_setup; -struct v4l2_mbus_frame_desc; - -/* decode_vbi_line */ -struct v4l2_decode_vbi_line { - u32 is_second_field; /* Set to 0 for the first (odd) field, - set to 1 for the second (even) field. */ - u8 *p; /* Pointer to the sliced VBI data from the decoder. - On exit points to the start of the payload. */ - u32 line; /* Line number of the sliced VBI data (1-23) */ - u32 type; /* VBI service type (V4L2_SLICED_*). 0 if no service found */ -}; - -/* Sub-devices are devices that are connected somehow to the main bridge - device. These devices are usually audio/video muxers/encoders/decoders or - sensors and webcam controllers. - - Usually these devices are controlled through an i2c bus, but other busses - may also be used. - - The v4l2_subdev struct provides a way of accessing these devices in a - generic manner. Most operations that these sub-devices support fall in - a few categories: core ops, audio ops, video ops and tuner ops. - - More categories can be added if needed, although this should remain a - limited set (no more than approx. 8 categories). - - Each category has its own set of ops that subdev drivers can implement. - - A subdev driver can leave the pointer to the category ops NULL if - it does not implement them (e.g. an audio subdev will generally not - implement the video category ops). The exception is the core category: - this must always be present. - - These ops are all used internally so it is no problem to change, remove - or add ops or move ops from one to another category. Currently these - ops are based on the original ioctls, but since ops are not limited to - one argument there is room for improvement here once all i2c subdev - drivers are converted to use these ops. - */ - -/* Core ops: it is highly recommended to implement at least these ops: - - log_status - g_register - s_register - - This provides basic debugging support. - - The ioctl ops is meant for generic ioctl-like commands. Depending on - the use-case it might be better to use subdev-specific ops (currently - not yet implemented) since ops provide proper type-checking. - */ - -/* Subdevice external IO pin configuration */ -#define V4L2_SUBDEV_IO_PIN_DISABLE (1 << 0) /* ENABLE assumed */ -#define V4L2_SUBDEV_IO_PIN_OUTPUT (1 << 1) -#define V4L2_SUBDEV_IO_PIN_INPUT (1 << 2) -#define V4L2_SUBDEV_IO_PIN_SET_VALUE (1 << 3) /* Set output value */ -#define V4L2_SUBDEV_IO_PIN_ACTIVE_LOW (1 << 4) /* ACTIVE HIGH assumed */ - -struct v4l2_subdev_io_pin_config { - u32 flags; /* V4L2_SUBDEV_IO_PIN_* flags for this pin's config */ - u8 pin; /* Chip external IO pin to configure */ - u8 function; /* Internal signal pad/function to route to IO pin */ - u8 value; /* Initial value for pin - e.g. GPIO output value */ - u8 strength; /* Pin drive strength */ -}; - -/* - s_io_pin_config: configure one or more chip I/O pins for chips that - multiplex different internal signal pads out to IO pins. This function - takes a pointer to an array of 'n' pin configuration entries, one for - each pin being configured. This function could be called at times - other than just subdevice initialization. - - init: initialize the sensor registers to some sort of reasonable default - values. Do not use for new drivers and should be removed in existing - drivers. - - load_fw: load firmware. - - reset: generic reset command. The argument selects which subsystems to - reset. Passing 0 will always reset the whole chip. Do not use for new - drivers without discussing this first on the linux-media mailinglist. - There should be no reason normally to reset a device. - - s_gpio: set GPIO pins. Very simple right now, might need to be extended with - a direction argument if needed. - - s_power: puts subdevice in power saving mode (on == 0) or normal operation - mode (on == 1). - - interrupt_service_routine: Called by the bridge chip's interrupt service - handler, when an interrupt status has be raised due to this subdev, - so that this subdev can handle the details. It may schedule work to be - performed later. It must not sleep. *Called from an IRQ context*. - */ -struct v4l2_subdev_core_ops { - int (*log_status)(struct v4l2_subdev *sd); - int (*s_io_pin_config)(struct v4l2_subdev *sd, size_t n, - struct v4l2_subdev_io_pin_config *pincfg); - int (*init)(struct v4l2_subdev *sd, u32 val); - int (*load_fw)(struct v4l2_subdev *sd); - int (*reset)(struct v4l2_subdev *sd, u32 val); - int (*s_gpio)(struct v4l2_subdev *sd, u32 val); - int (*queryctrl)(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc); - int (*g_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl); - int (*s_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl); - int (*g_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); - int (*s_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); - int (*try_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); - int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm); - int (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm); - int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm); - long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); -#ifdef CONFIG_VIDEO_ADV_DEBUG - int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); - int (*s_register)(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg); -#endif - int (*s_power)(struct v4l2_subdev *sd, int on); - int (*interrupt_service_routine)(struct v4l2_subdev *sd, - u32 status, bool *handled); - int (*subscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh, - struct v4l2_event_subscription *sub); - int (*unsubscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh, - struct v4l2_event_subscription *sub); -}; - -/* s_radio: v4l device was opened in radio mode. - - g_frequency: freq->type must be filled in. Normally done by video_ioctl2 - or the bridge driver. - - g_tuner: - s_tuner: vt->type must be filled in. Normally done by video_ioctl2 or the - bridge driver. - - s_type_addr: sets tuner type and its I2C addr. - - s_config: sets tda9887 specific stuff, like port1, port2 and qss - */ -struct v4l2_subdev_tuner_ops { - int (*s_radio)(struct v4l2_subdev *sd); - int (*s_frequency)(struct v4l2_subdev *sd, const struct v4l2_frequency *freq); - int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq); - int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); - int (*s_tuner)(struct v4l2_subdev *sd, const struct v4l2_tuner *vt); - int (*g_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm); - int (*s_modulator)(struct v4l2_subdev *sd, const struct v4l2_modulator *vm); - //edit by Ian - //int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type); - //int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config); -}; - -/* s_clock_freq: set the frequency (in Hz) of the audio clock output. - Used to slave an audio processor to the video decoder, ensuring that - audio and video remain synchronized. Usual values for the frequency - are 48000, 44100 or 32000 Hz. If the frequency is not supported, then - -EINVAL is returned. - - s_i2s_clock_freq: sets I2S speed in bps. This is used to provide a standard - way to select I2S clock used by driving digital audio streams at some - board designs. Usual values for the frequency are 1024000 and 2048000. - If the frequency is not supported, then -EINVAL is returned. - - s_routing: used to define the input and/or output pins of an audio chip, - and any additional configuration data. - Never attempt to use user-level input IDs (e.g. Composite, S-Video, - Tuner) at this level. An i2c device shouldn't know about whether an - input pin is connected to a Composite connector, become on another - board or platform it might be connected to something else entirely. - The calling driver is responsible for mapping a user-level input to - the right pins on the i2c device. - */ -struct v4l2_subdev_audio_ops { - int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq); - int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq); - int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); - int (*s_stream)(struct v4l2_subdev *sd, int enable); -}; - -/* Indicates the @length field specifies maximum data length. */ -#define V4L2_MBUS_FRAME_DESC_FL_LEN_MAX (1U << 0) -/* Indicates user defined data format, i.e. non standard frame format. */ -#define V4L2_MBUS_FRAME_DESC_FL_BLOB (1U << 1) - -/** - * struct v4l2_mbus_frame_desc_entry - media bus frame description structure - * @flags: V4L2_MBUS_FRAME_DESC_FL_* flags - * @pixelcode: media bus pixel code, valid if FRAME_DESC_FL_BLOB is not set - * @length: number of octets per frame, valid for compressed or unspecified - * formats - */ -struct v4l2_mbus_frame_desc_entry { - u16 flags; - u32 pixelcode; - u32 length; -}; - -#define V4L2_FRAME_DESC_ENTRY_MAX 4 - -/** - * struct v4l2_mbus_frame_desc - media bus data frame description - * @entry: frame descriptors array - * @num_entries: number of entries in @entry array - */ -struct v4l2_mbus_frame_desc { - struct v4l2_mbus_frame_desc_entry entry[V4L2_FRAME_DESC_ENTRY_MAX]; - unsigned short num_entries; -}; - -/* - s_std_output: set v4l2_std_id for video OUTPUT devices. This is ignored by - video input devices. - - g_std_output: get current standard for video OUTPUT devices. This is ignored - by video input devices. - - g_tvnorms_output: get v4l2_std_id with all standards supported by video - OUTPUT device. This is ignored by video input devices. - - s_crystal_freq: sets the frequency of the crystal used to generate the - clocks in Hz. An extra flags field allows device specific configuration - regarding clock frequency dividers, etc. If not used, then set flags - to 0. If the frequency is not supported, then -EINVAL is returned. - - g_input_status: get input status. Same as the status field in the v4l2_input - struct. - - s_routing: see s_routing in audio_ops, except this version is for video - devices. - - s_dv_timings(): Set custom dv timings in the sub device. This is used - when sub device is capable of setting detailed timing information - in the hardware to generate/detect the video signal. - - g_dv_timings(): Get custom dv timings in the sub device. - - enum_mbus_fmt: enumerate pixel formats, provided by a video data source - - g_mbus_fmt: get the current pixel format, provided by a video data source - - try_mbus_fmt: try to set a pixel format on a video data source - - s_mbus_fmt: set a pixel format on a video data source - - g_mbus_config: get supported mediabus configurations - - s_mbus_config: set a certain mediabus configuration. This operation is added - for compatibility with soc-camera drivers and should not be used by new - software. - - s_rx_buffer: set a host allocated memory buffer for the subdev. The subdev - can adjust @size to a lower value and must not write more data to the - buffer starting at @data than the original value of @size. - */ -struct v4l2_subdev_video_ops { - int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); - int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags); - int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std); - int (*g_std_output)(struct v4l2_subdev *sd, v4l2_std_id *std); - int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std); - int (*g_tvnorms_output)(struct v4l2_subdev *sd, v4l2_std_id *std); - int (*g_input_status)(struct v4l2_subdev *sd, u32 *status); - int (*s_stream)(struct v4l2_subdev *sd, int enable); - int (*cropcap)(struct v4l2_subdev *sd, struct v4l2_cropcap *cc); - int (*g_crop)(struct v4l2_subdev *sd, struct v4l2_crop *crop); - int (*s_crop)(struct v4l2_subdev *sd, const struct v4l2_crop *crop); - int (*g_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param); - int (*s_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param); -// edit by Ian -#if 0 - int (*g_frame_interval)(struct v4l2_subdev *sd, - struct v4l2_subdev_frame_interval *interval); - int (*s_frame_interval)(struct v4l2_subdev *sd, - struct v4l2_subdev_frame_interval *interval); -#endif - int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize); - int (*enum_frameintervals)(struct v4l2_subdev *sd, struct v4l2_frmivalenum *fival); - int (*s_dv_timings)(struct v4l2_subdev *sd, - struct v4l2_dv_timings *timings); - int (*g_dv_timings)(struct v4l2_subdev *sd, - struct v4l2_dv_timings *timings); - int (*enum_dv_timings)(struct v4l2_subdev *sd, - struct v4l2_enum_dv_timings *timings); - int (*query_dv_timings)(struct v4l2_subdev *sd, - struct v4l2_dv_timings *timings); - int (*dv_timings_cap)(struct v4l2_subdev *sd, - struct v4l2_dv_timings_cap *cap); -#if 0 - int (*enum_mbus_fmt)(struct v4l2_subdev *sd, unsigned int index, - enum v4l2_mbus_pixelcode *code); - int (*enum_mbus_fsizes)(struct v4l2_subdev *sd, - struct v4l2_frmsizeenum *fsize); - int (*g_mbus_fmt)(struct v4l2_subdev *sd, - struct v4l2_mbus_framefmt *fmt); - int (*try_mbus_fmt)(struct v4l2_subdev *sd, - struct v4l2_mbus_framefmt *fmt); - int (*s_mbus_fmt)(struct v4l2_subdev *sd, - struct v4l2_mbus_framefmt *fmt); - int (*g_mbus_config)(struct v4l2_subdev *sd, - struct v4l2_mbus_config *cfg); - int (*s_mbus_config)(struct v4l2_subdev *sd, - const struct v4l2_mbus_config *cfg); -#endif - int (*s_rx_buffer)(struct v4l2_subdev *sd, void *buf, - unsigned int *size); -}; - -/* - decode_vbi_line: video decoders that support sliced VBI need to implement - this ioctl. Field p of the v4l2_sliced_vbi_line struct is set to the - start of the VBI data that was generated by the decoder. The driver - then parses the sliced VBI data and sets the other fields in the - struct accordingly. The pointer p is updated to point to the start of - the payload which can be copied verbatim into the data field of the - v4l2_sliced_vbi_data struct. If no valid VBI data was found, then the - type field is set to 0 on return. - - s_vbi_data: used to generate VBI signals on a video signal. - v4l2_sliced_vbi_data is filled with the data packets that should be - output. Note that if you set the line field to 0, then that VBI signal - is disabled. If no valid VBI data was found, then the type field is - set to 0 on return. - - g_vbi_data: used to obtain the sliced VBI packet from a readback register. - Not all video decoders support this. If no data is available because - the readback register contains invalid or erroneous data -EIO is - returned. Note that you must fill in the 'id' member and the 'field' - member (to determine whether CC data from the first or second field - should be obtained). - - s_raw_fmt: setup the video encoder/decoder for raw VBI. - - g_sliced_fmt: retrieve the current sliced VBI settings. - - s_sliced_fmt: setup the sliced VBI settings. - */ -struct v4l2_subdev_vbi_ops { - int (*decode_vbi_line)(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi_line); - int (*s_vbi_data)(struct v4l2_subdev *sd, const struct v4l2_sliced_vbi_data *vbi_data); - int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data); - int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap); - int (*s_raw_fmt)(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt); - int (*g_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); - int (*s_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); -}; - -/** - * struct v4l2_subdev_sensor_ops - v4l2-subdev sensor operations - * @g_skip_top_lines: number of lines at the top of the image to be skipped. - * This is needed for some sensors, which always corrupt - * several top lines of the output image, or which send their - * metadata in them. - * @g_skip_frames: number of frames to skip at stream start. This is needed for - * buggy sensors that generate faulty frames when they are - * turned on. - */ -struct v4l2_subdev_sensor_ops { - int (*g_skip_top_lines)(struct v4l2_subdev *sd, u32 *lines); - int (*g_skip_frames)(struct v4l2_subdev *sd, u32 *frames); -}; - -/* - [rt]x_g_parameters: Get the current operating parameters and state of the - the IR receiver or transmitter. - - [rt]x_s_parameters: Set the current operating parameters and state of the - the IR receiver or transmitter. It is recommended to call - [rt]x_g_parameters first to fill out the current state, and only change - the fields that need to be changed. Upon return, the actual device - operating parameters and state will be returned. Note that hardware - limitations may prevent the actual settings from matching the requested - settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz - was requested. An exception is when the shutdown parameter is true. - The last used operational parameters will be returned, but the actual - state of the hardware be different to minimize power consumption and - processing when shutdown is true. - - rx_read: Reads received codes or pulse width data. - The semantics are similar to a non-blocking read() call. - - tx_write: Writes codes or pulse width data for transmission. - The semantics are similar to a non-blocking write() call. - */ - -enum v4l2_subdev_ir_mode { - V4L2_SUBDEV_IR_MODE_PULSE_WIDTH, /* uses struct ir_raw_event records */ -}; - -struct v4l2_subdev_ir_parameters { - /* Either Rx or Tx */ - unsigned int bytes_per_data_element; /* of data in read or write call */ - enum v4l2_subdev_ir_mode mode; - - bool enable; - bool interrupt_enable; - bool shutdown; /* true: set hardware to low/no power, false: normal */ - - bool modulation; /* true: uses carrier, false: baseband */ - u32 max_pulse_width; /* ns, valid only for baseband signal */ - unsigned int carrier_freq; /* Hz, valid only for modulated signal*/ - unsigned int duty_cycle; /* percent, valid only for modulated signal*/ - bool invert_level; /* invert signal level */ - - /* Tx only */ - bool invert_carrier_sense; /* Send 0/space as a carrier burst */ - - /* Rx only */ - u32 noise_filter_min_width; /* ns, min time of a valid pulse */ - unsigned int carrier_range_lower; /* Hz, valid only for modulated sig */ - unsigned int carrier_range_upper; /* Hz, valid only for modulated sig */ - u32 resolution; /* ns */ -}; - -struct v4l2_subdev_ir_ops { - /* Receiver */ - int (*rx_read)(struct v4l2_subdev *sd, u8 *buf, size_t count, - ssize_t *num); - - int (*rx_g_parameters)(struct v4l2_subdev *sd, - struct v4l2_subdev_ir_parameters *params); - int (*rx_s_parameters)(struct v4l2_subdev *sd, - struct v4l2_subdev_ir_parameters *params); - - /* Transmitter */ - int (*tx_write)(struct v4l2_subdev *sd, u8 *buf, size_t count, - ssize_t *num); - - int (*tx_g_parameters)(struct v4l2_subdev *sd, - struct v4l2_subdev_ir_parameters *params); - int (*tx_s_parameters)(struct v4l2_subdev *sd, - struct v4l2_subdev_ir_parameters *params); -}; - -/** - * struct v4l2_subdev_pad_ops - v4l2-subdev pad level operations - * @get_frame_desc: get the current low level media bus frame parameters. - * @get_frame_desc: set the low level media bus frame parameters, @fd array - * may be adjusted by the subdev driver to device capabilities. - */ -struct v4l2_subdev_pad_ops { - -#if 0 - int (*enum_mbus_code)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, - struct v4l2_subdev_mbus_code_enum *code); - int (*enum_frame_size)(struct v4l2_subdev *sd, - struct v4l2_subdev_fh *fh, - struct v4l2_subdev_frame_size_enum *fse); - int (*enum_frame_interval)(struct v4l2_subdev *sd, - struct v4l2_subdev_fh *fh, - struct v4l2_subdev_frame_interval_enum *fie); - int (*get_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, - struct v4l2_subdev_format *format); - int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, - struct v4l2_subdev_format *format); - int (*set_crop)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, - struct v4l2_subdev_crop *crop); - int (*get_crop)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, - struct v4l2_subdev_crop *crop); - int (*get_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, - struct v4l2_subdev_selection *sel); - int (*set_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, - struct v4l2_subdev_selection *sel); - int (*get_edid)(struct v4l2_subdev *sd, struct v4l2_subdev_edid *edid); - int (*set_edid)(struct v4l2_subdev *sd, struct v4l2_subdev_edid *edid); -#ifdef CONFIG_MEDIA_CONTROLLER - int (*link_validate)(struct v4l2_subdev *sd, struct media_link *link, - struct v4l2_subdev_format *source_fmt, - struct v4l2_subdev_format *sink_fmt); -#endif /* CONFIG_MEDIA_CONTROLLER */ -#endif - int (*get_frame_desc)(struct v4l2_subdev *sd, unsigned int pad, - struct v4l2_mbus_frame_desc *fd); - int (*set_frame_desc)(struct v4l2_subdev *sd, unsigned int pad, - struct v4l2_mbus_frame_desc *fd); -}; - -struct v4l2_subdev_ops { - const struct v4l2_subdev_core_ops *core; - const struct v4l2_subdev_tuner_ops *tuner; - const struct v4l2_subdev_audio_ops *audio; - const struct v4l2_subdev_video_ops *video; - const struct v4l2_subdev_vbi_ops *vbi; - const struct v4l2_subdev_ir_ops *ir; - const struct v4l2_subdev_sensor_ops *sensor; - const struct v4l2_subdev_pad_ops *pad; -}; - -/* - * Internal ops. Never call this from drivers, only the v4l2 framework can call - * these ops. - * - * registered: called when this subdev is registered. When called the v4l2_dev - * field is set to the correct v4l2_device. - * - * unregistered: called when this subdev is unregistered. When called the - * v4l2_dev field is still set to the correct v4l2_device. - * - * open: called when the subdev device node is opened by an application. - * - * close: called when the subdev device node is closed. - */ -struct v4l2_subdev_internal_ops { - int (*registered)(struct v4l2_subdev *sd); - void (*unregistered)(struct v4l2_subdev *sd); - int (*open)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh); - int (*close)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh); -}; - -#define V4L2_SUBDEV_NAME_SIZE 32 - -/* Set this flag if this subdev is a i2c device. */ -#define V4L2_SUBDEV_FL_IS_I2C (1U << 0) -/* Set this flag if this subdev is a spi device. */ -#define V4L2_SUBDEV_FL_IS_SPI (1U << 1) -/* Set this flag if this subdev needs a device node. */ -#define V4L2_SUBDEV_FL_HAS_DEVNODE (1U << 2) -/* Set this flag if this subdev generates events. */ -#define V4L2_SUBDEV_FL_HAS_EVENTS (1U << 3) - -/* Each instance of a subdev driver should create this struct, either - stand-alone or embedded in a larger struct. - */ -struct v4l2_subdev { -#if defined(CONFIG_MEDIA_CONTROLLER) - struct media_entity entity; -#endif - struct list_head list; - //struct module *owner; - u32 flags; - struct v4l2_device *v4l2_dev; - const struct v4l2_subdev_ops *ops; - /* Never call these internal ops from within a sub_dev driver! */ - const struct v4l2_subdev_internal_ops *internal_ops; - /* The control handler of this subdev. May be NULL. */ - struct v4l2_ctrl_handler *ctrl_handler; - /* name must be unique */ - char name[V4L2_SUBDEV_NAME_SIZE]; - /* can be used to group similar subdevs, value is driver-specific */ - u32 grp_id; - /* pointer to private data */ - void *dev_priv; - void *host_priv; - /* subdev device node */ - struct video_device *devnode; - /* pointer to the physical device, if any */ - //struct device *dev; - const char *dev_init_name; /* initial name of the device */ - void *dev_prive_date; - - /* Links this subdev to a global subdev_list or @notifier->done list. */ - struct list_head async_list; - /* Pointer to respective struct v4l2_async_subdev. */ - struct v4l2_async_subdev *asd; - /* Pointer to the managing notifier. */ - struct v4l2_async_notifier *notifier; -}; - -#define media_entity_to_v4l2_subdev(ent) \ - container_of(ent, struct v4l2_subdev, entity) -#define vdev_to_v4l2_subdev(vdev) \ - ((struct v4l2_subdev *)video_get_drvdata(vdev)) - -/* - * Used for storing subdev information per file handle - */ -struct v4l2_subdev_fh { - struct v4l2_fh vfh; -#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) - struct { - struct v4l2_mbus_framefmt try_fmt; - struct v4l2_rect try_crop; - struct v4l2_rect try_compose; - } *pad; -#endif -}; - -#define to_v4l2_subdev_fh(fh) \ - container_of(fh, struct v4l2_subdev_fh, vfh) - -#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) -#define __V4L2_SUBDEV_MK_GET_TRY(rtype, fun_name, field_name) \ - static inline struct rtype * \ - v4l2_subdev_get_try_##fun_name(struct v4l2_subdev_fh *fh, \ - unsigned int pad) \ - { \ - BUG_ON(unlikely(pad >= vdev_to_v4l2_subdev( \ - fh->vfh.vdev)->entity.num_pads)); \ - return &fh->pad[pad].field_name; \ - } - -__V4L2_SUBDEV_MK_GET_TRY(v4l2_mbus_framefmt, format, try_fmt) -__V4L2_SUBDEV_MK_GET_TRY(v4l2_rect, crop, try_compose) -__V4L2_SUBDEV_MK_GET_TRY(v4l2_rect, compose, try_compose) -#endif - -extern const struct v4l2_file_operations v4l2_subdev_fops; - -static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p) -{ - sd->dev_priv = p; -} - -static inline void *v4l2_get_subdevdata(const struct v4l2_subdev *sd) -{ - return sd->dev_priv; -} - -static inline void v4l2_set_subdev_hostdata(struct v4l2_subdev *sd, void *p) -{ - sd->host_priv = p; -} - -static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd) -{ - return sd->host_priv; -} - -#ifdef CONFIG_MEDIA_CONTROLLER -int v4l2_subdev_link_validate_default(struct v4l2_subdev *sd, - struct media_link *link, - struct v4l2_subdev_format *source_fmt, - struct v4l2_subdev_format *sink_fmt); -int v4l2_subdev_link_validate(struct media_link *link); -#endif /* CONFIG_MEDIA_CONTROLLER */ -void v4l2_subdev_init(struct v4l2_subdev *sd, - const struct v4l2_subdev_ops *ops); - -/* Call an ops of a v4l2_subdev, doing the right checks against - NULL pointers. - - Example: err = v4l2_subdev_call(sd, core, s_std, norm); - */ -#define v4l2_subdev_call(sd, o, f, args...) \ - (!(sd) ? -ENODEV : (((sd)->ops->o && (sd)->ops->o->f) ? \ - (sd)->ops->o->f((sd) , ##args) : -ENOIOCTLCMD)) - -/* Send a notification to v4l2_device. */ -#define v4l2_subdev_notify(sd, notification, arg) \ - ((!(sd) || !(sd)->v4l2_dev || !(sd)->v4l2_dev->notify) ? -ENODEV : \ - (sd)->v4l2_dev->notify((sd), (notification), (arg))) - -#define v4l2_subdev_has_op(sd, o, f) \ - ((sd)->ops->o && (sd)->ops->o->f) - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2_driver.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2_driver.h deleted file mode 100644 index dbe5a4c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2_driver.h +++ /dev/null @@ -1,9 +0,0 @@ - -#ifndef V4L2_DRIVER_H -#define V4L2_DRIVER_H /*structure needed for video caputure*/ - -#include -#include "dlist.h" -#include "basic_types.h" - -#endif //V4L2_DRIVER_H \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2_intf.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2_intf.h deleted file mode 100644 index 1d770ca..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/v4l2_intf.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _V4L2_INTF_H_ -#define _V4L2_INTF_H_ - -#define VIDEO_NUM_DEVICES 4//should be aligned with value in v4l2-dev.c - -typedef enum _streaming_state streaming_state; -enum _streaming_state { - STREAMING_OFF = 0, - STREAMING_ON = 1, - STREAMING_PAUSED = 2, - STREAMING_READY = 3, -}; - -long v4l_usr_ioctl(int fd, unsigned int cmd, void *arg); -int v4l_dev_open(); -void v4l_dev_release(); -void stop_capturing(); -int start_capturing(); -void uninit_v4l2_device (); -int init_v4l2_device (); -int v4l_set_param(u32 format_type, int *width, int *height, int *frame_rate, int *compression_ratio); -int v4l_getset_usb_ctrl(u8 bRequestType, u8 bRequest, u16 wValue, u16 wIndex, u16 wLength, void *data, int timeout, int set); -extern void spec_v4l2_probe(); -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/videobuf2-core.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/videobuf2-core.h deleted file mode 100644 index 303c77c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/videobuf2-core.h +++ /dev/null @@ -1,522 +0,0 @@ -/* - * videobuf2-core.h - V4L2 driver helper framework - * - * Copyright (C) 2010 Samsung Electronics - * - * Author: Pawel Osciak - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation. - */ -#ifndef _MEDIA_VIDEOBUF2_CORE_H -#define _MEDIA_VIDEOBUF2_CORE_H -#if 0 -#include -#include -#include -#include -#include -#endif -#include "v4l2-osdep.h" -#include "videodev2.h" - - -//typedef int _LOCK_T; -struct vb2_alloc_ctx; -struct vb2_fileio_data; - -/** - * struct vb2_mem_ops - memory handling/memory allocator operations - * @alloc: allocate video memory and, optionally, allocator private data, - * return NULL on failure or a pointer to allocator private, - * per-buffer data on success; the returned private structure - * will then be passed as buf_priv argument to other ops in this - * structure. Additional gfp_flags to use when allocating the - * are also passed to this operation. These flags are from the - * gfp_flags field of vb2_queue. - * @put: inform the allocator that the buffer will no longer be used; - * usually will result in the allocator freeing the buffer (if - * no other users of this buffer are present); the buf_priv - * argument is the allocator private per-buffer structure - * previously returned from the alloc callback - * @get_userptr: acquire userspace memory for a hardware operation; used for - * USERPTR memory types; vaddr is the address passed to the - * videobuf layer when queuing a video buffer of USERPTR type; - * should return an allocator private per-buffer structure - * associated with the buffer on success, NULL on failure; - * the returned private structure will then be passed as buf_priv - * argument to other ops in this structure - * @put_userptr: inform the allocator that a USERPTR buffer will no longer - * be used - * @attach_dmabuf: attach a shared struct dma_buf for a hardware operation; - * used for DMABUF memory types; alloc_ctx is the alloc context - * dbuf is the shared dma_buf; returns NULL on failure; - * allocator private per-buffer structure on success; - * this needs to be used for further accesses to the buffer - * @detach_dmabuf: inform the exporter of the buffer that the current DMABUF - * buffer is no longer used; the buf_priv argument is the - * allocator private per-buffer structure previously returned - * from the attach_dmabuf callback - * @map_dmabuf: request for access to the dmabuf from allocator; the allocator - * of dmabuf is informed that this driver is going to use the - * dmabuf - * @unmap_dmabuf: releases access control to the dmabuf - allocator is notified - * that this driver is done using the dmabuf for now - * @prepare: called every time the buffer is passed from userspace to the - * driver, useful for cache synchronisation, optional - * @finish: called every time the buffer is passed back from the driver - * to the userspace, also optional - * @vaddr: return a kernel virtual address to a given memory buffer - * associated with the passed private structure or NULL if no - * such mapping exists - * @cookie: return allocator specific cookie for a given memory buffer - * associated with the passed private structure or NULL if not - * available - * @num_users: return the current number of users of a memory buffer; - * return 1 if the videobuf layer (or actually the driver using - * it) is the only user - * @mmap: setup a userspace mapping for a given memory buffer under - * the provided virtual memory region - * - * Required ops for USERPTR types: get_userptr, put_userptr. - * Required ops for MMAP types: alloc, put, num_users, mmap. - * Required ops for read/write access types: alloc, put, num_users, vaddr - * Required ops for DMABUF types: attach_dmabuf, detach_dmabuf, map_dmabuf, - * unmap_dmabuf. - */ -struct vb2_mem_ops { - void *(*alloc)(void *alloc_ctx, unsigned long size, gfp_t gfp_flags); - void (*put)(void *buf_priv); - struct dma_buf *(*get_dmabuf)(void *buf_priv); - - void *(*get_userptr)(void *alloc_ctx, unsigned long vaddr, - unsigned long size, int write); - void (*put_userptr)(void *buf_priv); - - void (*prepare)(void *buf_priv); - void (*finish)(void *buf_priv); - - void *(*attach_dmabuf)(void *alloc_ctx, struct dma_buf *dbuf, - unsigned long size, int write); - void (*detach_dmabuf)(void *buf_priv); - int (*map_dmabuf)(void *buf_priv); - void (*unmap_dmabuf)(void *buf_priv); - - void *(*vaddr)(void *buf_priv); - void *(*cookie)(void *buf_priv); - - unsigned int (*num_users)(void *buf_priv); - - int (*mmap)(void *buf_priv); -}; - -struct vb2_plane { - void *mem_priv; - struct dma_buf *dbuf; - unsigned int dbuf_mapped; -}; - -/** - * enum vb2_io_modes - queue access methods - * @VB2_MMAP: driver supports MMAP with streaming API - * @VB2_USERPTR: driver supports USERPTR with streaming API - * @VB2_READ: driver supports read() style access - * @VB2_WRITE: driver supports write() style access - * @VB2_DMABUF: driver supports DMABUF with streaming API - */ -enum vb2_io_modes { - VB2_MMAP = (1 << 0), - VB2_USERPTR = (1 << 1), - VB2_READ = (1 << 2), - VB2_WRITE = (1 << 3), - VB2_DMABUF = (1 << 4), -}; - -/** - * enum vb2_fileio_flags - flags for selecting a mode of the file io emulator, - * by default the 'streaming' style is used by the file io emulator - * @VB2_FILEIO_READ_ONCE: report EOF after reading the first buffer - * @VB2_FILEIO_WRITE_IMMEDIATELY: queue buffer after each write() call - */ -enum vb2_fileio_flags { - VB2_FILEIO_READ_ONCE = (1 << 0), - VB2_FILEIO_WRITE_IMMEDIATELY = (1 << 1), -}; - -/** - * enum vb2_buffer_state - current video buffer state - * @VB2_BUF_STATE_DEQUEUED: buffer under userspace control - * @VB2_BUF_STATE_PREPARED: buffer prepared in videobuf and by the driver - * @VB2_BUF_STATE_QUEUED: buffer queued in videobuf, but not in driver - * @VB2_BUF_STATE_ACTIVE: buffer queued in driver and possibly used - * in a hardware operation - * @VB2_BUF_STATE_DONE: buffer returned from driver to videobuf, but - * not yet dequeued to userspace - * @VB2_BUF_STATE_ERROR: same as above, but the operation on the buffer - * has ended with an error, which will be reported - * to the userspace when it is dequeued - */ -enum vb2_buffer_state { - VB2_BUF_STATE_DEQUEUED, - VB2_BUF_STATE_PREPARED, - VB2_BUF_STATE_QUEUED, - VB2_BUF_STATE_ACTIVE, - VB2_BUF_STATE_DONE, - VB2_BUF_STATE_ERROR, -}; - -struct vb2_queue; - -/** - * struct vb2_buffer - represents a video buffer - * @v4l2_buf: struct v4l2_buffer associated with this buffer; can - * be read by the driver and relevant entries can be - * changed by the driver in case of CAPTURE types - * (such as timestamp) - * @v4l2_planes: struct v4l2_planes associated with this buffer; can - * be read by the driver and relevant entries can be - * changed by the driver in case of CAPTURE types - * (such as bytesused); NOTE that even for single-planar - * types, the v4l2_planes[0] struct should be used - * instead of v4l2_buf for filling bytesused - drivers - * should use the vb2_set_plane_payload() function for that - * @vb2_queue: the queue to which this driver belongs - * @num_planes: number of planes in the buffer - * on an internal driver queue - * @state: current buffer state; do not change - * @queued_entry: entry on the queued buffers list, which holds all - * buffers queued from userspace - * @done_entry: entry on the list that stores all buffers ready to - * be dequeued to userspace - * @planes: private per-plane information; do not change - */ -struct vb2_buffer { - struct v4l2_buffer v4l2_buf; - struct v4l2_plane v4l2_planes[VIDEO_MAX_PLANES]; - - struct vb2_queue *vb2_queue; - - unsigned int num_planes; - -/* Private: internal use only */ - enum vb2_buffer_state state; - - struct list_head queued_entry; - struct list_head done_entry; - - struct vb2_plane planes[VIDEO_MAX_PLANES]; -}; - -/** - * struct vb2_ops - driver-specific callbacks - * - * @queue_setup: called from VIDIOC_REQBUFS and VIDIOC_CREATE_BUFS - * handlers before memory allocation, or, if - * *num_planes != 0, after the allocation to verify a - * smaller number of buffers. Driver should return - * the required number of buffers in *num_buffers, the - * required number of planes per buffer in *num_planes; the - * size of each plane should be set in the sizes[] array - * and optional per-plane allocator specific context in the - * alloc_ctxs[] array. When called from VIDIOC_REQBUFS, - * fmt == NULL, the driver has to use the currently - * configured format and *num_buffers is the total number - * of buffers, that are being allocated. When called from - * VIDIOC_CREATE_BUFS, fmt != NULL and it describes the - * target frame format (if the format isn't valid the - * callback must return -EINVAL). In this case *num_buffers - * are being allocated additionally to q->num_buffers. - * @wait_prepare: release any locks taken while calling vb2 functions; - * it is called before an ioctl needs to wait for a new - * buffer to arrive; required to avoid a deadlock in - * blocking access type - * @wait_finish: reacquire all locks released in the previous callback; - * required to continue operation after sleeping while - * waiting for a new buffer to arrive - * @buf_init: called once after allocating a buffer (in MMAP case) - * or after acquiring a new USERPTR buffer; drivers may - * perform additional buffer-related initialization; - * initialization failure (return != 0) will prevent - * queue setup from completing successfully; optional - * @buf_prepare: called every time the buffer is queued from userspace - * and from the VIDIOC_PREPARE_BUF ioctl; drivers may - * perform any initialization required before each hardware - * operation in this callback; drivers that support - * VIDIOC_CREATE_BUFS must also validate the buffer size; - * if an error is returned, the buffer will not be queued - * in driver; optional - * @buf_finish: called before every dequeue of the buffer back to - * userspace; drivers may perform any operations required - * before userspace accesses the buffer; optional - * @buf_cleanup: called once before the buffer is freed; drivers may - * perform any additional cleanup; optional - * @start_streaming: called once to enter 'streaming' state; the driver may - * receive buffers with @buf_queue callback before - * @start_streaming is called; the driver gets the number - * of already queued buffers in count parameter; driver - * can return an error if hardware fails or not enough - * buffers has been queued, in such case all buffers that - * have been already given by the @buf_queue callback are - * invalidated. - * @stop_streaming: called when 'streaming' state must be disabled; driver - * should stop any DMA transactions or wait until they - * finish and give back all buffers it got from buf_queue() - * callback; may use vb2_wait_for_all_buffers() function - * @buf_queue: passes buffer vb to the driver; driver may start - * hardware operation on this buffer; driver should give - * the buffer back by calling vb2_buffer_done() function; - * it is allways called after calling STREAMON ioctl; - * might be called before start_streaming callback if user - * pre-queued buffers before calling STREAMON - */ -struct vb2_ops { - int (*queue_setup)(struct vb2_queue *q, const struct v4l2_format *fmt, - unsigned int *num_buffers, unsigned int *num_planes, - unsigned int sizes[], void *alloc_ctxs[]); - - void (*wait_prepare)(struct vb2_queue *q); - void (*wait_finish)(struct vb2_queue *q); - - int (*buf_init)(struct vb2_buffer *vb); - //int (*buf_prepare)(struct vb2_buffer *vb); - int (*buf_prepare)(struct vb2_buffer *vb, unsigned int index); - int (*buf_finish)(struct vb2_buffer *vb); - void (*buf_cleanup)(struct vb2_buffer *vb); - - int (*start_streaming)(struct vb2_queue *q, unsigned int count); - int (*stop_streaming)(struct vb2_queue *q); - - void (*buf_queue)(struct vb2_buffer *vb); -}; - -struct v4l2_fh; - -/** - * struct vb2_queue - a videobuf queue - * - * @type: queue type (see V4L2_BUF_TYPE_* in linux/videodev2.h - * @io_modes: supported io methods (see vb2_io_modes enum) - * @io_flags: additional io flags (see vb2_fileio_flags enum) - * @lock: pointer to a mutex that protects the vb2_queue struct. The - * driver can set this to a mutex to let the v4l2 core serialize - * the queuing ioctls. If the driver wants to handle locking - * itself, then this should be set to NULL. This lock is not used - * by the videobuf2 core API. - * @owner: The filehandle that 'owns' the buffers, i.e. the filehandle - * that called reqbufs, create_buffers or started fileio. - * This field is not used by the videobuf2 core API, but it allows - * drivers to easily associate an owner filehandle with the queue. - * @ops: driver-specific callbacks - * @mem_ops: memory allocator specific callbacks - * @drv_priv: driver private data - * @buf_struct_size: size of the driver-specific buffer structure; - * "0" indicates the driver doesn't want to use a custom buffer - * structure type, so sizeof(struct vb2_buffer) will is used - * @gfp_flags: additional gfp flags used when allocating the buffers. - * Typically this is 0, but it may be e.g. GFP_DMA or __GFP_DMA32 - * to force the buffer allocation to a specific memory zone. - * - * @memory: current memory type used - * @bufs: videobuf buffer structures - * @num_buffers: number of allocated/used buffers - * @queued_list: list of buffers currently queued from userspace - * @queued_count: number of buffers owned by the driver - * @done_list: list of buffers ready to be dequeued to userspace - * @done_lock: lock to protect done_list list - * @done_wq: waitqueue for processes waiting for buffers ready to be dequeued - * @alloc_ctx: memory type/allocator-specific contexts for each plane - * @streaming: current streaming state - * @fileio: file io emulator internal data, used only if emulator is active - */ -struct vb2_queue { - enum v4l2_buf_type type; - unsigned int io_modes; - unsigned int io_flags; - //struct mutex *lock; - _Mutex *lock; - - struct v4l2_fh *owner; - - const struct vb2_ops *ops; - const struct vb2_mem_ops *mem_ops; - void *drv_priv; - unsigned int buf_struct_size; - u32 timestamp_type; - gfp_t gfp_flags; - -/* private: internal use only */ - enum v4l2_memory memory; - struct vb2_buffer *bufs[VIDEO_MAX_FRAME]; - unsigned int num_buffers; - - struct list_head queued_list; - - atomic_t queued_count; - struct list_head done_list; - //spinlock_t done_lock; - //_LOCK_T done_lock; - _Mutex done_lock; - //wait_queue_head_t done_wq; - _Sema done_wq; //counting semaphore - - void *alloc_ctx[VIDEO_MAX_PLANES]; - unsigned int plane_sizes[VIDEO_MAX_PLANES]; - - //unsigned int streaming:1; - - unsigned int streaming; - //unsigned int start_streaming_called;//added by Ian - - struct vb2_fileio_data *fileio; -}; - -void *vb2_plane_vaddr(struct vb2_buffer *vb, unsigned int plane_no); -void *vb2_plane_cookie(struct vb2_buffer *vb, unsigned int plane_no); - -void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state); -int vb2_wait_for_all_buffers(struct vb2_queue *q); - -int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b); -int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req); - -int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create); -int vb2_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b); - -int vb2_queue_init(struct vb2_queue *q); - -void vb2_queue_release(struct vb2_queue *q); - -int vb2_qbuf(struct vb2_queue *q, struct v4l2_buffer *b); -int vb2_expbuf(struct vb2_queue *q, struct v4l2_exportbuffer *eb); -int vb2_dqbuf(struct vb2_queue *q, struct v4l2_buffer *b, bool nonblocking); - -int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type); -int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type); - -int vb2_mmap(struct vb2_queue *q); -#ifndef CONFIG_MMU -unsigned long vb2_get_unmapped_area(struct vb2_queue *q, - unsigned long addr, - unsigned long len, - unsigned long pgoff, - unsigned long flags); -#endif -#if 0 -unsigned int vb2_poll(struct vb2_queue *q, struct file *file, poll_table *wait); -size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count, - loff_t *ppos, int nonblock); -size_t vb2_write(struct vb2_queue *q, char __user *data, size_t count, - loff_t *ppos, int nonblock); -#endif -/** - * vb2_is_streaming() - return streaming status of the queue - * @q: videobuf queue - */ -static inline bool vb2_is_streaming(struct vb2_queue *q) -{ - return q->streaming; -} - -/** - * vb2_is_busy() - return busy status of the queue - * @q: videobuf queue - * - * This function checks if queue has any buffers allocated. - */ -static inline bool vb2_is_busy(struct vb2_queue *q) -{ - return (q->num_buffers > 0); -} - -/** - * vb2_get_drv_priv() - return driver private data associated with the queue - * @q: videobuf queue - */ -static inline void *vb2_get_drv_priv(struct vb2_queue *q) -{ - return q->drv_priv; -} - -/** - * vb2_set_plane_payload() - set bytesused for the plane plane_no - * @vb: buffer for which plane payload should be set - * @plane_no: plane number for which payload should be set - * @size: payload in bytes - */ -static inline void vb2_set_plane_payload(struct vb2_buffer *vb, - unsigned int plane_no, unsigned long size) -{ - if (plane_no < vb->num_planes) - vb->v4l2_planes[plane_no].bytesused = size; -} - -/** - * vb2_get_plane_payload() - get bytesused for the plane plane_no - * @vb: buffer for which plane payload should be set - * @plane_no: plane number for which payload should be set - * @size: payload in bytes - */ -static inline unsigned long vb2_get_plane_payload(struct vb2_buffer *vb, - unsigned int plane_no) -{ - if (plane_no < vb->num_planes) - return vb->v4l2_planes[plane_no].bytesused; - return 0; -} - -/** - * vb2_plane_size() - return plane size in bytes - * @vb: buffer for which plane size should be returned - * @plane_no: plane number for which size should be returned - */ -static inline unsigned long -vb2_plane_size(struct vb2_buffer *vb, unsigned int plane_no) -{ - if (plane_no < vb->num_planes) - return vb->v4l2_planes[plane_no].length; - return 0; -} - -/* - * The following functions are not part of the vb2 core API, but are simple - * helper functions that you can use in your struct v4l2_file_operations, - * struct v4l2_ioctl_ops and struct vb2_ops. They will serialize if vb2_queue->lock - * or video_device->lock is set, and they will set and test vb2_queue->owner - * to check if the calling filehandle is permitted to do the queuing operation. - */ - -/* struct v4l2_ioctl_ops helpers */ - -int vb2_ioctl_reqbufs(void *priv, struct v4l2_requestbuffers *p); -int vb2_ioctl_create_bufs(void *priv, struct v4l2_create_buffers *p); -int vb2_ioctl_prepare_buf(void *priv, struct v4l2_buffer *p); -int vb2_ioctl_querybuf(void *priv, struct v4l2_buffer *p); -int vb2_ioctl_qbuf(void *priv, struct v4l2_buffer *p); -int vb2_ioctl_dqbuf(void *priv, struct v4l2_buffer *p); -int vb2_ioctl_streamon(void *priv, enum v4l2_buf_type i); -int vb2_ioctl_streamoff(void *priv, enum v4l2_buf_type i); -int vb2_ioctl_expbuf(void *priv, struct v4l2_exportbuffer *p); - -/* struct v4l2_file_operations helpers */ - -int vb2_fop_mmap(); -int vb2_fop_release(); -#if 0 -ssize_t vb2_fop_write(struct file *file, char __user *buf, - size_t count, loff_t *ppos); -ssize_t vb2_fop_read(struct file *file, char __user *buf, - size_t count, loff_t *ppos); -unsigned int vb2_fop_poll(struct file *file, poll_table *wait); -#endif -#ifndef CONFIG_MMU -unsigned long vb2_fop_get_unmapped_area(unsigned long addr, - unsigned long len, unsigned long pgoff, unsigned long flags); -#endif - -/* struct vb2_ops helpers, only use if vq->lock is non-NULL. */ - -void vb2_ops_wait_prepare(struct vb2_queue *vq); -void vb2_ops_wait_finish(struct vb2_queue *vq); - -#endif /* _MEDIA_VIDEOBUF2_CORE_H */ diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/videobuf2-memops.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/videobuf2-memops.h deleted file mode 100644 index fd67fcf..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/videobuf2-memops.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * videobuf2-memops.h - generic memory handling routines for videobuf2 - * - * Copyright (C) 2010 Samsung Electronics - * - * Author: Pawel Osciak - * Marek Szyprowski - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation. - */ - -#ifndef _MEDIA_VIDEOBUF2_MEMOPS_H -#define _MEDIA_VIDEOBUF2_MEMOPS_H - -#include "videobuf2-core.h" - - -/** - * vb2_vmarea_handler - common vma refcount tracking handler - * @refcount: pointer to refcount entry in the buffer - * @put: callback to function that decreases buffer refcount - * @arg: argument for @put callback - */ -struct vb2_vmarea_handler { - atomic_t *refcount; - void (*put)(void *arg); - void *arg; -}; - -extern const struct vm_operations_struct vb2_common_vm_ops; - -int vb2_get_contig_userptr(unsigned long vaddr, unsigned long size, - struct vm_area_struct **res_vma, dma_addr_t *res_pa); - -struct vm_area_struct *vb2_get_vma(struct vm_area_struct *vma); -void vb2_put_vma(struct vm_area_struct *vma); - - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/videobuf2-vmalloc.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/videobuf2-vmalloc.h deleted file mode 100644 index 3e13d0c..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/videobuf2-vmalloc.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * videobuf2-vmalloc.h - vmalloc memory allocator for videobuf2 - * - * Copyright (C) 2010 Samsung Electronics - * - * Author: Pawel Osciak - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation. - */ - -#ifndef _MEDIA_VIDEOBUF2_VMALLOC_H -#define _MEDIA_VIDEOBUF2_VMALLOC_H - -#include "videobuf2-core.h" - - -extern const struct vb2_mem_ops vb2_vmalloc_memops; - -#endif diff --git a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/videodev2.h b/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/videodev2.h deleted file mode 100644 index ab1123f..0000000 --- a/Firmware/RTLGDB/USDK/component/common/video/v4l2/inc/videodev2.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Video for Linux Two header file - * - * Copyright (C) 1999-2012 the contributors - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Alternatively you can redistribute this file under the terms of the - * BSD license as stated below: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. The names of its contributors may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Header file for v4l or V4L2 drivers and applications - * with public API. - * All kernel-specific stuff were moved to media/v4l2-dev.h, so - * no #if __KERNEL tests are allowed here - * - * See http://linuxtv.org for more info - * - * Author: Bill Dirks - * Justin Schoeman - * Hans Verkuil - * et al. - */ -#ifndef __LINUX_VIDEODEV2_H -#define __LINUX_VIDEODEV2_H - -//#include /* need struct timeval */ -#include "uapi_videodev2.h" - -#endif /* __LINUX_VIDEODEV2_H */ diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/cmsis_os.c b/Firmware/RTLGDB/USDK/component/os/freertos/cmsis_os.c deleted file mode 100644 index 7eedf9a..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/cmsis_os.c +++ /dev/null @@ -1,1402 +0,0 @@ - - -#include "cmsis_os.h" -#include "diag.h" - -#define CMSIS_OS_ERR(fmt, args...) DBG_8195A("\n\r%s: " fmt, __FUNCTION__, ## args) - -extern void *_memset( void *s, int c, SIZE_T n ); -#define os_memset _memset - -#if configSignalManagementSupport // the older FreeRTOS version didn't support Signal Management functions -#if 0 -#define THREAD_SIGNAL_MAP_SIZE 32 -typedef struct thread_signal_map { - uint8_t is_in_use; - osThreadId thread_id; - EventGroupHandle_t signals; -} ThreadSignalEntity; - - -ThreadSignalEntity ThreadSignalMapTable[THREAD_SIGNAL_MAP_SIZE]={0}; -#endif - -typedef struct thread_signal_map { - osThreadId thread_id; - EventGroupHandle_t signals; - void *pnext; -} ThreadSignalRec, *pThreadSignalRec; - -ThreadSignalRec *pThreadSignalMapHead; -ThreadSignalRec *pThreadSignalMapTail; -#endif - -/* Convert from CMSIS type osPriority to FreeRTOS priority number */ -static unsigned portBASE_TYPE makeFreeRtosPriority (osPriority priority) -{ - unsigned portBASE_TYPE fpriority = tskIDLE_PRIORITY; - - if (priority != osPriorityError) { - fpriority += (priority - osPriorityIdle); - } - - return fpriority; -} - - -/* Convert from FreeRTOS priority number to CMSIS type osPriority */ -static osPriority makeCmsisPriority (unsigned portBASE_TYPE fpriority) -{ - osPriority priority = osPriorityError; - - if ((fpriority - tskIDLE_PRIORITY) <= (osPriorityRealtime - osPriorityIdle)) { - priority = (osPriority)((int)osPriorityIdle + (int)(fpriority - tskIDLE_PRIORITY)); - } - - return priority; -} - -/* pvvx! */ -static uint32_t __get_IPSR(void) -{ - uint32_t result; - - asm volatile ("MRS %0, ipsr" : "=r" (result) ); - return(result); -} - -/* Determine whether we are in thread mode or handler mode. */ -static int inHandlerMode (void) -{ - return __get_IPSR() != 0; -} - -#if configSignalManagementSupport // the older FreeRTOS version didn't support Signal Management functions -static void add_thread_signal_map (osThreadId thread_id, EventGroupHandle_t signals) -{ - int dummy = 0; -// uint32_t i; - ThreadSignalRec *prec_entity; - - if (inHandlerMode()) { - dummy = portSET_INTERRUPT_MASK_FROM_ISR(); - } - else { - vPortEnterCritical(); - } - - prec_entity = (ThreadSignalRec*) malloc(sizeof(ThreadSignalRec)); - - if (prec_entity != NULL) { - prec_entity->thread_id = thread_id; - prec_entity->signals = signals; - prec_entity->pnext = NULL; - if (pThreadSignalMapHead == NULL) { - pThreadSignalMapHead = prec_entity; - pThreadSignalMapTail = prec_entity; - } - else { - pThreadSignalMapTail->pnext = prec_entity; - pThreadSignalMapTail = prec_entity; - } - } - else { - CMSIS_OS_ERR("No Free Thread-Signal entity\n"); - } - -#if 0 - for (i=0;i= THREAD_SIGNAL_MAP_SIZE) { - // No free Thread-Signals map entity - CMSIS_OS_ERR("No Free Thread-Signal entity\n"); - } - -#endif - - if (inHandlerMode()) { - portCLEAR_INTERRUPT_MASK_FROM_ISR(dummy); - } - else { - vPortExitCritical(); - } - -} - -static EventGroupHandle_t find_signal_by_thread (osThreadId thread_id) -{ - EventGroupHandle_t signals_hdl=NULL; - int dummy = 0; - ThreadSignalRec *prec_entity; - - if (inHandlerMode()) { - dummy = portSET_INTERRUPT_MASK_FROM_ISR(); - } - else { - vPortEnterCritical(); - } - - prec_entity = pThreadSignalMapHead; - while (prec_entity != NULL) { - if (prec_entity->thread_id == thread_id) { - signals_hdl = prec_entity->signals; - break; - } - else { - prec_entity = prec_entity->pnext; - } - } - -#if 0 - // uint32_t i; - for (i=0;ithread_id == thread_id) { - signals_hdl = prec_entity->signals; - if (prec_entity == pThreadSignalMapHead) { - if (prec_entity->pnext != NULL) { - pThreadSignalMapHead = prec_entity->pnext; - } - else { - pThreadSignalMapHead = NULL; - pThreadSignalMapTail = NULL; - } - } - else if (prec_entity == pThreadSignalMapTail) { - pprev_entity->pnext = NULL; - pThreadSignalMapTail = pprev_entity; - } - else { - pprev_entity->pnext = prec_entity->pnext; - } - free((void *)prec_entity); - break; - } - else { - pprev_entity = prec_entity; - prec_entity = prec_entity->pnext; - } - } - -#if 0 - for (i=0;ipthread, - (const portCHAR *)thread_def->name, - (thread_def->stacksize/4), - argument, - makeFreeRtosPriority(thread_def->tpriority), - &handle); - if (pdPASS == result) { -#if configSignalManagementSupport - EventGroupHandle_t signals; - - signals = xEventGroupCreate(); - if (signals == NULL) { - /* The event group was not created because there was insufficient - FreeRTOS heap available. */ - CMSIS_OS_ERR("Create a EventGroup for a new thread failed\n"); - } - else - { - add_thread_signal_map(handle, signals); - } -#endif - } - else - { - CMSIS_OS_ERR("Create a new thread(%s) failed\r\n", thread_def->name); - } - - return handle; -} - - -/// Return the thread ID of the current running thread. -/// \return thread ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osThreadGetId shall be consistent in every CMSIS-RTOS. -osThreadId osThreadGetId (void) -{ - return xTaskGetCurrentTaskHandle(); -} - - -/// Terminate execution of a thread and remove it from Active Threads. -/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osThreadTerminate shall be consistent in every CMSIS-RTOS. -osStatus osThreadTerminate (osThreadId thread_id) -{ -#if configSignalManagementSupport - EventGroupHandle_t EventHandle; - - EventHandle = remove_thread_signal_map (thread_id); - if (EventHandle) { - vEventGroupDelete (EventHandle); - } -#endif - - vTaskDelete(thread_id); - - return osOK; -} - - -/// Pass control to next thread that is in state \b READY. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osThreadYield shall be consistent in every CMSIS-RTOS. -osStatus osThreadYield (void) -{ - taskYIELD(); - - return osOK; -} - - -/// Change priority of an active thread. -/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. -/// \param[in] priority new priority value for the thread function. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osThreadSetPriority shall be consistent in every CMSIS-RTOS. -osStatus osThreadSetPriority (osThreadId thread_id, osPriority priority) -{ - vTaskPrioritySet(thread_id, makeFreeRtosPriority(priority)); - - return osOK; -} - - -/// Get current priority of an active thread. -/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. -/// \return current priority value of the thread function. -/// \note MUST REMAIN UNCHANGED: \b osThreadGetPriority shall be consistent in every CMSIS-RTOS. -osPriority osThreadGetPriority (osThreadId thread_id) -{ - return makeCmsisPriority(uxTaskPriorityGet(thread_id)); -} - - - -// ==== Generic Wait Functions ==== - -/// Wait for Timeout (Time Delay) -/// \param[in] millisec time delay value -/// \return status code that indicates the execution status of the function. -osStatus osDelay (uint32_t millisec) -{ -#if INCLUDE_vTaskDelay - portTickType ticks = (millisec * configTICK_RATE_HZ) / 1000; - - vTaskDelay(ticks ? ticks : 1); /* Minimum delay = 1 tick */ - - return osOK; -#else - (void) millisec; - - return osErrorResource; -#endif -} - - -#if (defined (osFeature_Wait) && (osFeature_Wait != 0)) // Generic Wait available - -/// Wait for Signal, Message, Mail, or Timeout -/// \param[in] millisec timeout value or 0 in case of no time-out -/// \return event that contains signal, message, or mail information or error code. -/// \note MUST REMAIN UNCHANGED: \b osWait shall be consistent in every CMSIS-RTOS. -osEvent osWait (uint32_t millisec); - -#endif // Generic Wait available - - -// ==== Timer Management Functions ==== - -static void _osTimerCallbackFreeRTOS (xTimerHandle handle) -{ - osTimerDef_t *timer = (osTimerDef_t *)(pvTimerGetTimerID(handle)); - - timer->ptimer(timer->custom->argument); -} - - -/// Create a timer. -/// \param[in] timer_def timer object referenced with \ref osTimer. -/// \param[in] type osTimerOnce for one-shot or osTimerPeriodic for periodic behavior. -/// \param[in] argument argument to the timer call back function. -/// \return timer ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osTimerCreate shall be consistent in every CMSIS-RTOS. -osTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void *argument) -{ - timer_def->custom->argument = argument; - - return xTimerCreate((const portCHAR *)"", - 1, //Set later when timer is started - (type == osTimerPeriodic) ? pdTRUE : pdFALSE, - (void *)timer_def, - _osTimerCallbackFreeRTOS - ); -} - - - -/// Start or restart a timer. -/// \param[in] timer_id timer ID obtained by \ref osTimerCreate. -/// \param[in] millisec time delay value of the timer. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osTimerStart shall be consistent in every CMSIS-RTOS. -osStatus osTimerStart (osTimerId timer_id, uint32_t millisec) -{ - portBASE_TYPE taskWoken = pdFALSE; - osStatus result = osOK; - portTickType ticks = millisec / portTICK_RATE_MS; - if (ticks == 0) { - ticks = 1; - } - - if (inHandlerMode()) { - if (xTimerChangePeriodFromISR(timer_id, ticks, &taskWoken) == pdPASS) { - xTimerStartFromISR(timer_id, &taskWoken); - portEND_SWITCHING_ISR(taskWoken); - } - } - else { - //TODO: add timeout support - if (xTimerChangePeriod(timer_id, ticks, 0) != pdPASS) { - result = osErrorOS; - } - else { - if (xTimerStart(timer_id, 0) != pdPASS) { - result = osErrorOS; - } - } - } - - return result; -} - - - -/// Stop the timer. -/// \param[in] timer_id timer ID obtained by \ref osTimerCreate. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osTimerStop shall be consistent in every CMSIS-RTOS. -osStatus osTimerStop (osTimerId timer_id) -{ - portBASE_TYPE taskWoken = pdFALSE; - osStatus result = osOK; - - if (inHandlerMode()) { - xTimerStopFromISR(timer_id, &taskWoken); - portEND_SWITCHING_ISR(taskWoken); - } - else { - if (xTimerStop(timer_id, 0) != pdPASS) { //TODO: add timeout support - result = osErrorOS; - } - } - - return result; -} - - -/// Delete a timer that was created by \ref osTimerCreate. -/// \param[in] timer_id timer ID obtained by \ref osTimerCreate. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osTimerDelete shall be consistent in every CMSIS-RTOS. -osStatus osTimerDelete (osTimerId timer_id) -{ - osStatus result = osOK; - - /* try to delete the soft timer and wait max RTL_TIMER_API_MAX_BLOCK_TICKS - to send the delete command to the timer command queue */ - if (xTimerDelete(timer_id, portMAX_DELAY ) != pdPASS) { - result = osErrorOS; - } - - return result; -} - -// ==== Signal Management ==== -#if configSignalManagementSupport -/// Set the specified Signal Flags of an active thread. -/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. -/// \param[in] signals specifies the signal flags of the thread that should be set. -/// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters. -/// \note MUST REMAIN UNCHANGED: \b osSignalSet shall be consistent in every CMSIS-RTOS. -int32_t osSignalSet (osThreadId thread_id, int32_t signals) -{ - EventGroupHandle_t event_handle; - portBASE_TYPE taskWoken = pdFALSE; - portBASE_TYPE xResult; - EventBits_t uxBits_ret=0x80000000; -#ifdef CHECK_VALUE_OF_EVENT_GROUP - EventBits_t uxBits; -#endif - - if (signals & (0xFFFFFFFF << osFeature_Signals)) { - return 0x80000000; - } - - event_handle = find_signal_by_thread(thread_id); - if (event_handle) { - if (inHandlerMode()) { - uxBits_ret = xEventGroupGetBitsFromISR(event_handle); - xResult = xEventGroupSetBitsFromISR( - event_handle, /* The event group being updated. */ - signals, /* The bits being set. */ - &taskWoken ); - if( xResult != pdFAIL ) - { - portYIELD_FROM_ISR(taskWoken); - } - } - else { - uxBits_ret = xEventGroupGetBits(event_handle); -#ifdef CHECK_VALUE_OF_EVENT_GROUP - uxBits = -#endif - xEventGroupSetBits( - event_handle, /* The event group being updated. */ - signals );/* The bits being set. */ - } - } - - return uxBits_ret; -} - -/// Clear the specified Signal Flags of an active thread. -/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. -/// \param[in] signals specifies the signal flags of the thread that shall be cleared. -/// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters. -/// \note MUST REMAIN UNCHANGED: \b osSignalClear shall be consistent in every CMSIS-RTOS. -int32_t osSignalClear (osThreadId thread_id, int32_t signals) -{ - EventGroupHandle_t event_handle; - //portBASE_TYPE taskWoken = pdFALSE; - EventBits_t uxBits_ret=0x80000000; -#ifdef CHECK_VALUE_OF_EVENT_GROUP - EventBits_t uxBits; -#endif - - if (signals & (0xFFFFFFFF << osFeature_Signals)) { - return 0x80000000; - } - - event_handle = find_signal_by_thread(thread_id); - if (event_handle) { - if (inHandlerMode()) { - uxBits_ret = xEventGroupGetBitsFromISR(event_handle); -#ifdef CHECK_VALUE_OF_EVENT_GROUP - uxBits = -#endif - xEventGroupClearBitsFromISR( - event_handle, /* The event group being updated. */ - signals);/* The bits being cleared. */ - } - else { - uxBits_ret = xEventGroupGetBits(event_handle); -#ifdef CHECK_VALUE_OF_EVENT_GROUP - uxBits = -#endif - xEventGroupClearBits( - event_handle, /* The event group being updated. */ - signals);/* The bits being cleared. */ - } - } - - return uxBits_ret; -} - - -/// Wait for one or more Signal Flags to become signaled for the current \b RUNNING thread. -/// \param[in] signals wait until all specified signal flags set or 0 for any single signal flag. -/// \param[in] millisec timeout value or 0 in case of no time-out. -/// \return event flag information or error code. -/// \note MUST REMAIN UNCHANGED: \b osSignalWait shall be consistent in every CMSIS-RTOS. -osEvent osSignalWait (int32_t signals, uint32_t millisec) -{ - TaskHandle_t thread_id; - EventGroupHandle_t event_handle; - EventBits_t uxBits=0x80000000; - osEvent ret; - uint32_t wait_ticks; - - if (signals & (0xFFFFFFFF << osFeature_Signals)) { - ret.status = osErrorValue; - ret.value.signals = 0; - return ret; - } - - thread_id = xTaskGetCurrentTaskHandle(); - event_handle = find_signal_by_thread(thread_id); - if (event_handle) { - if (signals == 0) { - // if signals is 0, then wait any signal - signals = (1 << osFeature_Signals) - 1; - } - - wait_ticks = millisec_to_ticks(millisec); - uxBits = xEventGroupWaitBits( - event_handle, /* The event group being tested. */ - signals, /* The bits within the event group to wait for. */ - pdTRUE, /* the signals should be cleared before returning. */ - pdFALSE, /* Don't wait for both bits, either bit will do. */ - wait_ticks );/* Wait for either bit to be set. */ - if (uxBits == 0) { - ret.status = millisec ? osEventTimeout : osOK; - ret.value.signals = 0; - } - else { - ret.status = osEventSignal; - ret.value.signals = uxBits; - } - } - - return ret; -} -#else -// The older FreeRTOS version didn't support Signal Management functions - -int32_t osSignalSet (osThreadId thread_id, int32_t signals) -{ - return 0; -} - -int32_t osSignalClear (osThreadId thread_id, int32_t signals) -{ - return 0; -} - -osEvent osSignalWait (int32_t signals, uint32_t millisec) -{ - osEvent ret; - - ret.status = osErrorOS; - return ret; -} - -#endif // end of "else of #if configSignalManagementSupport - -// ==== Mutex Management ==== - - -/// Create and Initialize a Mutex object -/// \param[in] mutex_def mutex definition referenced with \ref osMutex. -/// \return mutex ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osMutexCreate shall be consistent in every CMSIS-RTOS. -osMutexId osMutexCreate (const osMutexDef_t *mutex_def) -{ - (void) mutex_def; - - return xSemaphoreCreateMutex(); -} - - - -/// Wait until a Mutex becomes available -/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate. -/// \param[in] millisec timeout value or 0 in case of no time-out. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osMutexWait shall be consistent in every CMSIS-RTOS. -osStatus osMutexWait (osMutexId mutex_id, uint32_t millisec) -{ - portTickType ticks; - - - if (mutex_id == NULL) { - return osErrorParameter; - } - - if (inHandlerMode()) { - return osErrorISR; - } - - ticks = millisec_to_ticks(millisec); - - if (xSemaphoreTake(mutex_id, ticks) != pdTRUE) { - return osErrorOS; - } - - return osOK; -} - - - -/// Release a Mutex that was obtained by \ref osMutexWait -/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osMutexRelease shall be consistent in every CMSIS-RTOS. -osStatus osMutexRelease (osMutexId mutex_id) -{ - osStatus result = osOK; - portBASE_TYPE taskWoken = pdFALSE; - - - if (inHandlerMode()) { - if (xSemaphoreGiveFromISR(mutex_id, &taskWoken) != pdTRUE) { - result = osErrorOS; - } - portEND_SWITCHING_ISR(taskWoken); - } - else { - if (xSemaphoreGive(mutex_id) != pdTRUE) { - result = osErrorOS; - } - } - - return result; -} - -/// Delete a Mutex that was created by \ref osMutexCreate. -/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osMutexDelete shall be consistent in every CMSIS-RTOS. -osStatus osMutexDelete (osMutexId mutex_id) -{ - if (!mutex_id) { - return osErrorValue; - } - - vSemaphoreDelete(mutex_id); - return osOK; -} - - -// ==== Semaphore Management Functions ==== - -#if (defined (osFeature_Semaphore) && (osFeature_Semaphore != 0)) // Semaphore available - -/// Create and Initialize a Semaphore object used for managing resources -/// \param[in] semaphore_def semaphore definition referenced with \ref osSemaphore. -/// \param[in] count number of available resources. -/// \return semaphore ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osSemaphoreCreate shall be consistent in every CMSIS-RTOS. -osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t count) -{ - (void) semaphore_def; - osSemaphoreId sema; - - if (count == 1) { - vSemaphoreCreateBinary(sema); - return sema; - } - - return xSemaphoreCreateCounting(count, count); -} - - - -/// Wait until a Semaphore token becomes available -/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphore. -/// \param[in] millisec timeout value or 0 in case of no time-out. -/// \return number of available tokens, or -1 in case of incorrect parameters. -/// \note MUST REMAIN UNCHANGED: \b osSemaphoreWait shall be consistent in every CMSIS-RTOS. -int32_t osSemaphoreWait (osSemaphoreId semaphore_id, uint32_t millisec) -{ - portTickType ticks; - - - if (semaphore_id == NULL) { - return osErrorParameter; - } - - ticks = millisec_to_ticks(millisec); - - if (inHandlerMode()) { - return osErrorISR; - } - - if (xSemaphoreTake(semaphore_id, ticks) != pdTRUE) { - return osErrorOS; - } - - return osOK; -} - - -/// Release a Semaphore token -/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphore. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osSemaphoreRelease shall be consistent in every CMSIS-RTOS. -osStatus osSemaphoreRelease (osSemaphoreId semaphore_id) -{ - osStatus result = osOK; - portBASE_TYPE taskWoken = pdFALSE; - - - if (inHandlerMode()) { - if (xSemaphoreGiveFromISR(semaphore_id, &taskWoken) != pdTRUE) { - result = osErrorOS; - } - portEND_SWITCHING_ISR(taskWoken); - } - else { - if (xSemaphoreGive(semaphore_id) != pdTRUE) { - result = osErrorOS; - } - } - - return result; -} - - -/// Delete a Semaphore that was created by \ref osSemaphoreCreate. -/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osSemaphoreDelete shall be consistent in every CMSIS-RTOS. -osStatus osSemaphoreDelete (osSemaphoreId semaphore_id) -{ - if (!semaphore_id) { - return osErrorValue; - } - - vSemaphoreDelete(semaphore_id); - return osOK; -} - - -#endif // Semaphore available - -// ==== Memory Pool Management Functions ==== - -#if (defined (osFeature_Pool) && (osFeature_Pool != 0)) // Memory Pool Management available - -#if 0 -/// \brief Define a Memory Pool. -/// \param name name of the memory pool. -/// \param no maximum number of objects (elements) in the memory pool. -/// \param type data type of a single object (element). -/// \note CAN BE CHANGED: The parameter to \b osPoolDef shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#if defined (osObjectsExternal) // object is external -#define osPoolDef(name, no, type) \ -extern osPoolDef_t os_pool_def_##name; -#else // define the object -#define osPoolDef(name, no, type) \ -osPoolDef_t os_pool_def_##name = \ -{ (no), sizeof(type), NULL }; -#endif -#endif - -//TODO -//This is a primitive and inefficient wrapper around the existing FreeRTOS memory management. -//A better implementation will have to modify heap_x.c! - - -typedef struct os_pool_cb { - void *pool; - uint8_t *markers; - uint32_t pool_sz; - uint32_t item_sz; - uint32_t currentIndex; -} os_pool_cb_t; - -#if 0 -/// \brief Access a Memory Pool definition. -/// \param name name of the memory pool -/// \note CAN BE CHANGED: The parameter to \b osPool shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#define osPool(name) \ -&os_pool_def_##name -#endif - -/// Create and Initialize a memory pool -/// \param[in] pool_def memory pool definition referenced with \ref osPool. -/// \return memory pool ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osPoolCreate shall be consistent in every CMSIS-RTOS. -osPoolId osPoolCreate (const osPoolDef_t *pool_def) -{ - osPoolId thePool; - int itemSize = 4 * ((pool_def->item_sz + 3) / 4); - uint32_t i; - - /* First have to allocate memory for the pool control block. */ - thePool = pvPortMalloc(sizeof(os_pool_cb_t)); - if (thePool) { - thePool->pool_sz = pool_def->pool_sz; - thePool->item_sz = itemSize; - thePool->currentIndex = 0; - - /* Memory for markers */ - thePool->markers = pvPortMalloc(pool_def->pool_sz); - if (thePool->markers) { - /* Now allocate the pool itself. */ - thePool->pool = pvPortMalloc(pool_def->pool_sz * itemSize); - - if (thePool->pool) { - for (i = 0; i < pool_def->pool_sz; i++) { - thePool->markers[i] = 0; - } - } - else { - vPortFree(thePool->markers); - vPortFree(thePool); - thePool = NULL; - } - } - else { - vPortFree(thePool); - thePool = NULL; - } - } - - return thePool; -} - - -/// Allocate a memory block from a memory pool -/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate. -/// \return address of the allocated memory block or NULL in case of no memory available. -/// \note MUST REMAIN UNCHANGED: \b osPoolAlloc shall be consistent in every CMSIS-RTOS. -void *osPoolAlloc (osPoolId pool_id) -{ - int dummy = 0; - void *p = NULL; - uint32_t i; - uint32_t index; - - if (inHandlerMode()) { - dummy = portSET_INTERRUPT_MASK_FROM_ISR(); - } - else { - vPortEnterCritical(); - } - - for (i = 0; i < pool_id->pool_sz; i++) { - index = pool_id->currentIndex + i; - if (index >= pool_id->pool_sz) { - index = 0; - } - - if (pool_id->markers[index] == 0) { - pool_id->markers[index] = 1; - p = (void *)((uint32_t)(pool_id->pool) + (index * pool_id->item_sz)); - pool_id->currentIndex = index; - break; - } - } - - if (inHandlerMode()) { - portCLEAR_INTERRUPT_MASK_FROM_ISR(dummy); - } - else { - vPortExitCritical(); - } - - return p; -} - - -/// Allocate a memory block from a memory pool and set memory block to zero -/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate. -/// \return address of the allocated memory block or NULL in case of no memory available. -/// \note MUST REMAIN UNCHANGED: \b osPoolCAlloc shall be consistent in every CMSIS-RTOS. -void *osPoolCAlloc (osPoolId pool_id) -{ - void *p = osPoolAlloc(pool_id); - - os_memset(p, 0, pool_id->item_sz); - - return p; -} - - -/// Return an allocated memory block back to a specific memory pool -/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate. -/// \param[in] block address of the allocated memory block that is returned to the memory pool. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osPoolFree shall be consistent in every CMSIS-RTOS. -osStatus osPoolFree (osPoolId pool_id, void *block) -{ - int dummy = 0; - uint32_t index; - - if (pool_id == NULL) { - return osErrorParameter; - } - - if (block == NULL) { - return osErrorParameter; - } - - if (block < pool_id->pool) { - return osErrorParameter; - } - - index = (uint32_t)block - (uint32_t)(pool_id->pool); - if (index % pool_id->item_sz) { - return osErrorParameter; - } - index = index / pool_id->item_sz; - if (index >= pool_id->pool_sz) { - return osErrorParameter; - } - - if (inHandlerMode()) { - dummy = portSET_INTERRUPT_MASK_FROM_ISR(); - } - else { - vPortEnterCritical(); - } - - pool_id->markers[index] = 0; - - if (inHandlerMode()) { - portCLEAR_INTERRUPT_MASK_FROM_ISR(dummy); - } - else { - vPortExitCritical(); - } - - return osOK; -} - - -#endif // Memory Pool Management available - - -// ==== Message Queue Management Functions ==== - -#if (defined (osFeature_MessageQ) && (osFeature_MessageQ != 0)) // Message Queues available - -/// Create and Initialize a Message Queue. -/// \param[in] queue_def queue definition referenced with \ref osMessageQ. -/// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL. -/// \return message queue ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osMessageCreate shall be consistent in every CMSIS-RTOS. -osMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id) -{ - (void) thread_id; - - return xQueueCreate(queue_def->queue_sz, queue_def->item_sz); -} - - -/// Put a Message to a Queue. -/// \param[in] queue_id message queue ID obtained with \ref osMessageCreate. -/// \param[in] info message information. -/// \param[in] millisec timeout value or 0 in case of no time-out. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osMessagePut shall be consistent in every CMSIS-RTOS. -osStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec) -{ - portBASE_TYPE taskWoken = pdFALSE; - portTickType ticks; - - if (inHandlerMode()) { - if (xQueueSendFromISR(queue_id, (const void *)info, &taskWoken) != pdTRUE) { - return osErrorOS; - } - portEND_SWITCHING_ISR(taskWoken); - } - else { - ticks = millisec_to_ticks(millisec); - - if (xQueueSend(queue_id, (const void *)info, ticks) != pdTRUE) { - return osErrorOS; - } - } - - return osOK; -} - - - -/// Get a Message or Wait for a Message from a Queue. -/// \param[in] queue_id message queue ID obtained with \ref osMessageCreate. -/// \param[in] millisec timeout value or 0 in case of no time-out. -/// \return event information that includes status code. -/// \note MUST REMAIN UNCHANGED: \b osMessageGet shall be consistent in every CMSIS-RTOS. -osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec) -{ - portBASE_TYPE taskWoken = pdFALSE; - portTickType ticks; - osEvent retEvent; - - retEvent.def.message_id = queue_id; - if (inHandlerMode()) { - if (xQueueReceiveFromISR(queue_id, (void *)retEvent.value.p, &taskWoken) != pdTRUE) { - retEvent.status = osErrorOS; - return retEvent; - } - portEND_SWITCHING_ISR(taskWoken); - } - else { - ticks = millisec_to_ticks(millisec); - - if (xQueueReceive(queue_id, (void *)retEvent.value.p, ticks) != pdTRUE) { - retEvent.status = osErrorOS; - return retEvent; - } - } - - retEvent.status = osOK; - - return retEvent; -} - -#endif // Message Queues available - - -// ==== Mail Queue Management Functions ==== - -#if (defined (osFeature_MailQ) && (osFeature_MailQ != 0)) // Mail Queues available - - -typedef struct os_mailQ_cb { - osMailQDef_t *queue_def; - xQueueHandle handle; - osPoolId pool; -} os_mailQ_cb_t; - - -/// Create and Initialize mail queue -/// \param[in] queue_def reference to the mail queue definition obtain with \ref osMailQ -/// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL. -/// \return mail queue ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osMailCreate shall be consistent in every CMSIS-RTOS. -osMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id) -{ - (void) thread_id; - - osPoolDef_t pool_def = {queue_def->queue_sz, queue_def->item_sz}; - - - /* Create a mail queue control block */ - *(queue_def->cb) = pvPortMalloc(sizeof(struct os_mailQ_cb)); - if (*(queue_def->cb) == NULL) { - return NULL; - } - (*(queue_def->cb))->queue_def = (osMailQDef_t *)queue_def; - - /* Create a queue in FreeRTOS */ - (*(queue_def->cb))->handle = xQueueCreate(queue_def->queue_sz, sizeof(void *)); - if ((*(queue_def->cb))->handle == NULL) { - vPortFree(*(queue_def->cb)); - return NULL; - } - - /* Create a mail pool */ - (*(queue_def->cb))->pool = osPoolCreate(&pool_def); - if ((*(queue_def->cb))->pool == NULL) { - vQueueDelete((*(queue_def->cb))->handle); - vPortFree(*(queue_def->cb)); - return NULL; - } - - return *(queue_def->cb); -} - - - -/// Allocate a memory block from a mail -/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. -/// \param[in] millisec timeout value or 0 in case of no time-out -/// \return pointer to memory block that can be filled with mail or NULL in case error. -/// \note MUST REMAIN UNCHANGED: \b osMailAlloc shall be consistent in every CMSIS-RTOS. -void *osMailAlloc (osMailQId queue_id, uint32_t millisec) -{ - (void) millisec; - void *p; - uint32_t retried=0; - - - if (queue_id == NULL) { - return NULL; - } - - do { - p = osPoolAlloc(queue_id->pool); - if (NULL == p) { - // sleep a while and then try again - if (millisec == osWaitForever) { - osDelay(2); - } - else { - if (!retried) { - osDelay(millisec); - retried = 1; - } - else { - break; - } - } - } - } while (NULL == p); - - - return p; -} - - - -/// Allocate a memory block from a mail and set memory block to zero -/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. -/// \param[in] millisec timeout value or 0 in case of no time-out -/// \return pointer to memory block that can shall filled with mail or NULL in case error. -/// \note MUST REMAIN UNCHANGED: \b osMailCAlloc shall be consistent in every CMSIS-RTOS. -void *osMailCAlloc (osMailQId queue_id, uint32_t millisec) -{ -// uint32_t i; - void *p = osMailAlloc(queue_id, millisec); - - if (p) { - os_memset(p, 0, queue_id->queue_def->item_sz); - } - - return p; -} - - - -/// Put a mail to a queue -/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. -/// \param[in] mail memory block previously allocated with \ref osMailAlloc or \ref osMailCAlloc. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osMailPut shall be consistent in every CMSIS-RTOS. -osStatus osMailPut (osMailQId queue_id, void *mail) -{ - portBASE_TYPE taskWoken; - portTickType ticks=1000/portTICK_RATE_MS; // No timeout is defined for this function, so we just wait 1 sec - - - if (queue_id == NULL) { - return osErrorParameter; - } - - taskWoken = pdFALSE; - - if (inHandlerMode()) { - if (xQueueSendFromISR(queue_id->handle, &mail, &taskWoken) != pdTRUE) { - return osErrorOS; - } - portEND_SWITCHING_ISR(taskWoken); - } - else { - if (xQueueSend(queue_id->handle, &mail, ticks) != pdTRUE) { //TODO where to get timeout value? - return osErrorOS; - } - } - - return osOK; -} - - - -/// Get a mail from a queue -/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. -/// \param[in] millisec timeout value or 0 in case of no time-out -/// \return event that contains mail information or error code. -/// \note MUST REMAIN UNCHANGED: \b osMailGet shall be consistent in every CMSIS-RTOS. -osEvent osMailGet (osMailQId queue_id, uint32_t millisec) -{ - portBASE_TYPE taskWoken; - portTickType ticks; - osEvent event; - - event.def.mail_id = queue_id; - - if (queue_id == NULL) { - event.status = osErrorParameter; - return event; - } - - taskWoken = pdFALSE; - - ticks = millisec_to_ticks(millisec); - - if (inHandlerMode()) { - if (xQueueReceiveFromISR(queue_id->handle, &event.value.p, &taskWoken) == pdTRUE) { - /* We have mail */ - event.status = osEventMail; - } - else { - event.status = osOK; - } - portEND_SWITCHING_ISR(taskWoken); - } - else { - if (xQueueReceive(queue_id->handle, &event.value.p, ticks) == pdTRUE) { - /* We have mail */ - event.status = osEventMail; - } - else { - event.status = (ticks == 0) ? osOK : osEventTimeout; - } - } - - return event; -} - - - -/// Free a memory block from a mail -/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. -/// \param[in] mail pointer to the memory block that was obtained with \ref osMailGet. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osMailFree shall be consistent in every CMSIS-RTOS. -osStatus osMailFree (osMailQId queue_id, void *mail) -{ - if (queue_id == NULL) { - return osErrorParameter; - } - - osPoolFree(queue_id->pool, mail); - - return osOK; -} - - -void *calloc_freertos(size_t nelements, size_t elementSize) -{ - void *pbuf; - uint32_t size; - - size = nelements*elementSize; - pbuf = pvPortMalloc(size); - os_memset(pbuf, 0, size); - - return pbuf; -} -#endif // Mail Queues available - - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/cmsis_os.h b/Firmware/RTLGDB/USDK/component/os/freertos/cmsis_os.h deleted file mode 100644 index 642fbe8..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/cmsis_os.h +++ /dev/null @@ -1,819 +0,0 @@ -/* ---------------------------------------------------------------------- - * $Date: 5. February 2013 - * $Revision: V1.02 - * - * Project: CMSIS-RTOS API - * Title: cmsis_os.h template header file - * - * Version 0.02 - * Initial Proposal Phase - * Version 0.03 - * osKernelStart added, optional feature: main started as thread - * osSemaphores have standard behavior - * osTimerCreate does not start the timer, added osTimerStart - * osThreadPass is renamed to osThreadYield - * Version 1.01 - * Support for C++ interface - * - const attribute removed from the osXxxxDef_t typedef's - * - const attribute added to the osXxxxDef macros - * Added: osTimerDelete, osMutexDelete, osSemaphoreDelete - * Added: osKernelInitialize - * Version 1.02 - * Control functions for short timeouts in microsecond resolution: - * Added: osKernelSysTick, osKernelSysTickFrequency, osKernelSysTickMicroSec - * Removed: osSignalGet - *---------------------------------------------------------------------------- - * - * Copyright (c) 2013 ARM LIMITED - * All rights reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - Neither the name of ARM nor the names of its contributors may be used - * to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - *---------------------------------------------------------------------------*/ - -#include "FreeRTOS.h" -#include "task.h" -#include "timers.h" -#include "queue.h" -#include "semphr.h" - - -#define FREERTOS_VERSION 0x00080001 // bits[31:16] main version, bits[15:0] sub-version - -#if FREERTOS_VERSION >= 0x00080000 -#define configSignalManagementSupport 1 -#else -#define configSignalManagementSupport 0 -#endif - -#if configSignalManagementSupport -#include "event_groups.h" -#endif - -/** -\page cmsis_os_h Header File Template: cmsis_os.h - -The file \b cmsis_os.h is a template header file for a CMSIS-RTOS compliant Real-Time Operating System (RTOS). -Each RTOS that is compliant with CMSIS-RTOS shall provide a specific \b cmsis_os.h header file that represents -its implementation. - -The file cmsis_os.h contains: - - CMSIS-RTOS API function definitions - - struct definitions for parameters and return types - - status and priority values used by CMSIS-RTOS API functions - - macros for defining threads and other kernel objects - - -Name conventions and header file modifications - -All definitions are prefixed with \b os to give an unique name space for CMSIS-RTOS functions. -Definitions that are prefixed \b os_ are not used in the application code but local to this header file. -All definitions and functions that belong to a module are grouped and have a common prefix, i.e. \b osThread. - -Definitions that are marked with CAN BE CHANGED can be adapted towards the needs of the actual CMSIS-RTOS implementation. -These definitions can be specific to the underlying RTOS kernel. - -Definitions that are marked with MUST REMAIN UNCHANGED cannot be altered. Otherwise the CMSIS-RTOS implementation is no longer -compliant to the standard. Note that some functions are optional and need not to be provided by every CMSIS-RTOS implementation. - - -Function calls from interrupt service routines - -The following CMSIS-RTOS functions can be called from threads and interrupt service routines (ISR): - - \ref osSignalSet - - \ref osSemaphoreRelease - - \ref osPoolAlloc, \ref osPoolCAlloc, \ref osPoolFree - - \ref osMessagePut, \ref osMessageGet - - \ref osMailAlloc, \ref osMailCAlloc, \ref osMailGet, \ref osMailPut, \ref osMailFree - -Functions that cannot be called from an ISR are verifying the interrupt status and return in case that they are called -from an ISR context the status code \b osErrorISR. In some implementations this condition might be caught using the HARD FAULT vector. - -Some CMSIS-RTOS implementations support CMSIS-RTOS function calls from multiple ISR at the same time. -If this is impossible, the CMSIS-RTOS rejects calls by nested ISR functions with the status code \b osErrorISRRecursive. - - -Define and reference object definitions - -With \#define osObjectsExternal objects are defined as external symbols. This allows to create a consistent header file -that is used throughout a project as shown below: - -Header File -\code -#include // CMSIS RTOS header file - -// Thread definition -extern void thread_sample (void const *argument); // function prototype -osThreadDef (thread_sample, osPriorityBelowNormal, 1, 100); - -// Pool definition -osPoolDef(MyPool, 10, long); -\endcode - - -This header file defines all objects when included in a C/C++ source file. When \#define osObjectsExternal is -present before the header file, the objects are defined as external symbols. A single consistent header file can therefore be -used throughout the whole project. - -Example -\code -#include "osObjects.h" // Definition of the CMSIS-RTOS objects -\endcode - -\code -#define osObjectExternal // Objects will be defined as external symbols -#include "osObjects.h" // Reference to the CMSIS-RTOS objects -\endcode - -*/ - -#ifndef _CMSIS_OS_H -#define _CMSIS_OS_H - -/// \note MUST REMAIN UNCHANGED: \b osCMSIS identifies the CMSIS-RTOS API version. -#define osCMSIS 0x10002 ///< API version (main [31:16] .sub [15:0]) - -/// \note CAN BE CHANGED: \b osCMSIS_KERNEL identifies the underlying RTOS kernel and version number. -#define osCMSIS_KERNEL 0x10000 ///< RTOS identification and version (main [31:16] .sub [15:0]) - -/// \note MUST REMAIN UNCHANGED: \b osKernelSystemId shall be consistent in every CMSIS-RTOS. -#define osKernelSystemId "KERNEL V1.00" ///< RTOS identification string - -/// \note MUST REMAIN UNCHANGED: \b osFeature_xxx shall be consistent in every CMSIS-RTOS. -#define osFeature_MainThread 1 ///< main thread 1=main can be thread, 0=not available -#define osFeature_Pool 1 ///< Memory Pools: 1=available, 0=not available -#define osFeature_MailQ 1 ///< Mail Queues: 1=available, 0=not available -#define osFeature_MessageQ 1 ///< Message Queues: 1=available, 0=not available -#define osFeature_Signals 8 ///< maximum number of Signal Flags available per thread -#define osFeature_Semaphore 30 ///< maximum count for \ref osSemaphoreCreate function -#define osFeature_Wait 1 ///< osWait function: 1=available, 0=not available -#define osFeature_SysTick 1 ///< osKernelSysTick functions: 1=available, 0=not available - -//#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - - -// ==== Enumeration, structures, defines ==== - -/// Priority used for thread control. -/// \note MUST REMAIN UNCHANGED: \b osPriority shall be consistent in every CMSIS-RTOS. -typedef enum { - osPriorityIdle = -3, ///< priority: idle (lowest) - osPriorityLow = -2, ///< priority: low - osPriorityBelowNormal = -1, ///< priority: below normal - osPriorityNormal = 0, ///< priority: normal (default) - osPriorityAboveNormal = +1, ///< priority: above normal - osPriorityHigh = +2, ///< priority: high - osPriorityRealtime = +3, ///< priority: realtime (highest) - osPriorityError = 0x84 ///< system cannot determine priority or thread has illegal priority -} osPriority; - -/// Timeout value. -/// \note MUST REMAIN UNCHANGED: \b osWaitForever shall be consistent in every CMSIS-RTOS. -#define osWaitForever 0xFFFFFFFF ///< wait forever timeout value - -/// Status code values returned by CMSIS-RTOS functions. -/// \note MUST REMAIN UNCHANGED: \b osStatus shall be consistent in every CMSIS-RTOS. -typedef enum { - osOK = 0, ///< function completed; no error or event occurred. - osEventSignal = 0x08, ///< function completed; signal event occurred. - osEventMessage = 0x10, ///< function completed; message event occurred. - osEventMail = 0x20, ///< function completed; mail event occurred. - osEventTimeout = 0x40, ///< function completed; timeout occurred. - osErrorParameter = 0x80, ///< parameter error: a mandatory parameter was missing or specified an incorrect object. - osErrorResource = 0x81, ///< resource not available: a specified resource was not available. - osErrorTimeoutResource = 0xC1, ///< resource not available within given time: a specified resource was not available within the timeout period. - osErrorISR = 0x82, ///< not allowed in ISR context: the function cannot be called from interrupt service routines. - osErrorISRRecursive = 0x83, ///< function called multiple times from ISR with same object. - osErrorPriority = 0x84, ///< system cannot determine priority or thread has illegal priority. - osErrorNoMemory = 0x85, ///< system is out of memory: it was impossible to allocate or reserve memory for the operation. - osErrorValue = 0x86, ///< value of a parameter is out of range. - osErrorOS = 0xFF, ///< unspecified RTOS error: run-time error but no other error message fits. - os_status_reserved = 0x7FFFFFFF ///< prevent from enum down-size compiler optimization. -} osStatus; - - -/// Timer type value for the timer definition. -/// \note MUST REMAIN UNCHANGED: \b os_timer_type shall be consistent in every CMSIS-RTOS. -typedef enum { - osTimerOnce = 0, ///< one-shot timer - osTimerPeriodic = 1 ///< repeating timer -} os_timer_type; - -/// Entry point of a thread. -/// \note MUST REMAIN UNCHANGED: \b os_pthread shall be consistent in every CMSIS-RTOS. -typedef void (*os_pthread) (void const *argument); - -/// Entry point of a timer call back function. -/// \note MUST REMAIN UNCHANGED: \b os_ptimer shall be consistent in every CMSIS-RTOS. -typedef void (*os_ptimer) (void const *argument); - -// >>> the following data type definitions may shall adapted towards a specific RTOS - -/// Thread ID identifies the thread (pointer to a thread control block). -/// \note CAN BE CHANGED: \b os_thread_cb is implementation specific in every CMSIS-RTOS. -typedef xTaskHandle osThreadId; - -/// Timer ID identifies the timer (pointer to a timer control block). -/// \note CAN BE CHANGED: \b os_timer_cb is implementation specific in every CMSIS-RTOS. -typedef xTimerHandle osTimerId; - -/// Mutex ID identifies the mutex (pointer to a mutex control block). -/// \note CAN BE CHANGED: \b os_mutex_cb is implementation specific in every CMSIS-RTOS. -typedef xSemaphoreHandle osMutexId; - -/// Semaphore ID identifies the semaphore (pointer to a semaphore control block). -/// \note CAN BE CHANGED: \b os_semaphore_cb is implementation specific in every CMSIS-RTOS. -typedef xSemaphoreHandle osSemaphoreId; - -/// Pool ID identifies the memory pool (pointer to a memory pool control block). -/// \note CAN BE CHANGED: \b os_pool_cb is implementation specific in every CMSIS-RTOS. -typedef struct os_pool_cb *osPoolId; - -/// Message ID identifies the message queue (pointer to a message queue control block). -/// \note CAN BE CHANGED: \b os_messageQ_cb is implementation specific in every CMSIS-RTOS. -typedef xQueueHandle osMessageQId; - -/// Mail ID identifies the mail queue (pointer to a mail queue control block). -/// \note CAN BE CHANGED: \b os_mailQ_cb is implementation specific in every CMSIS-RTOS. -typedef struct os_mailQ_cb *osMailQId; - - -/// Thread Definition structure contains startup information of a thread. -/// \note CAN BE CHANGED: \b os_thread_def is implementation specific in every CMSIS-RTOS. -typedef struct os_thread_def { - os_pthread pthread; ///< start address of thread function - osPriority tpriority; ///< initial thread priority - uint32_t instances; ///< maximum number of instances of that thread function - uint32_t stacksize; ///< stack size requirements in bytes; 0 is default stack size - char * name; -} osThreadDef_t; - -/// Timer Definition structure contains timer parameters. -/// \note CAN BE CHANGED: \b os_timer_def is implementation specific in every CMSIS-RTOS. -struct os_timer_custom { - void *argument; -}; - -typedef struct os_timer_def { - os_ptimer ptimer; ///< start address of a timer function - struct os_timer_custom *custom; -} osTimerDef_t; - -/// Mutex Definition structure contains setup information for a mutex. -/// \note CAN BE CHANGED: \b os_mutex_def is implementation specific in every CMSIS-RTOS. -typedef struct os_mutex_def { - uint32_t dummy; ///< dummy value. -} osMutexDef_t; - -/// Semaphore Definition structure contains setup information for a semaphore. -/// \note CAN BE CHANGED: \b os_semaphore_def is implementation specific in every CMSIS-RTOS. -typedef struct os_semaphore_def { - uint32_t dummy; ///< dummy value. -} osSemaphoreDef_t; - -/// Definition structure for memory block allocation -/// \note CAN BE CHANGED: \b os_pool_def is implementation specific in every CMSIS-RTOS. -typedef struct os_pool_def { - uint32_t pool_sz; ///< number of items (elements) in the pool - uint32_t item_sz; ///< size of an item - void *pool; ///< pointer to memory for pool -} osPoolDef_t; - -/// Definition structure for message queue. -/// \note CAN BE CHANGED: \b os_messageQ_def is implementation specific in every CMSIS-RTOS. -typedef struct os_messageQ_def { - uint32_t queue_sz; ///< number of elements in the queue - uint32_t item_sz; ///< size of an item - void *pool; ///< memory array for messages -} osMessageQDef_t; - -/// Definition structure for mail queue -/// \note CAN BE CHANGED: \b os_mailQ_def is implementation specific in every CMSIS-RTOS. -typedef struct os_mailQ_def { - uint32_t queue_sz; ///< number of elements in the queue - uint32_t item_sz; ///< size of an item - struct os_mailQ_cb **cb; -} osMailQDef_t; - -/// Event structure contains detailed information about an event. -/// \note MUST REMAIN UNCHANGED: \b os_event shall be consistent in every CMSIS-RTOS. -/// However the struct may be extended at the end. -typedef struct { - osStatus status; ///< status code: event or error information - union { - uint32_t v; ///< message as 32-bit value - void *p; ///< message or mail as void pointer - int32_t signals; ///< signal flags - } value; ///< event value - union { - osMailQId mail_id; ///< mail id obtained by \ref osMailCreate - osMessageQId message_id; ///< message id obtained by \ref osMessageCreate - } def; ///< event definition -} osEvent; - - -// ==== Kernel Control Functions ==== - -/// Initialize the RTOS Kernel for creating objects. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osKernelInitialize shall be consistent in every CMSIS-RTOS. -osStatus osKernelInitialize (void); - -/// Start the RTOS Kernel. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osKernelStart shall be consistent in every CMSIS-RTOS. -osStatus osKernelStart (void); - -/// Check if the RTOS kernel is already started. -/// \note MUST REMAIN UNCHANGED: \b osKernelRunning shall be consistent in every CMSIS-RTOS. -/// \return 0 RTOS is not started, 1 RTOS is started. -int32_t osKernelRunning(void); - -#if (defined (osFeature_SysTick) && (osFeature_SysTick != 0)) // System Timer available - -/// Get the RTOS kernel system timer counter -/// \note MUST REMAIN UNCHANGED: \b osKernelSysTick shall be consistent in every CMSIS-RTOS. -/// \return RTOS kernel system timer as 32-bit value -uint32_t osKernelSysTick (void); - -/// The RTOS kernel system timer frequency in Hz -/// \note Reflects the system timer setting and is typically defined in a configuration file. -#define osKernelSysTickFrequency configTICK_RATE_HZ - -/// Convert a microseconds value to a RTOS kernel system timer value. -/// \param microsec time value in microseconds. -/// \return time value normalized to the \ref osKernelSysTickFrequency -#define osKernelSysTickMicroSec(microsec) (((uint64_t)microsec * (osKernelSysTickFrequency)) / 1000000) - -#endif // System Timer available - -// ==== Thread Management ==== - -/// Create a Thread Definition with function, priority, and stack requirements. -/// \param name name of the thread function. -/// \param priority initial priority of the thread function. -/// \param instances number of possible thread instances. -/// \param stacksz stack size (in bytes) requirements for the thread function. -/// \note CAN BE CHANGED: The parameters to \b osThreadDef shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#if defined (osObjectsExternal) // object is external -#define osThreadDef(name, priority, instances, stacksz) \ -extern const osThreadDef_t os_thread_def_##name -#else // define the object -#define osThreadDef(name, priority, instances, stacksz) \ -const osThreadDef_t os_thread_def_##name = \ -{ (name), (priority), (instances), (stacksz), #name } -#endif - -/// Access a Thread definition. -/// \param name name of the thread definition object. -/// \note CAN BE CHANGED: The parameter to \b osThread shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#define osThread(name) \ -&os_thread_def_##name - -/// Create a thread and add it to Active Threads and set it to state READY. -/// \param[in] thread_def thread definition referenced with \ref osThread. -/// \param[in] argument pointer that is passed to the thread function as start argument. -/// \return thread ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osThreadCreate shall be consistent in every CMSIS-RTOS. -osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument); - -/// Return the thread ID of the current running thread. -/// \return thread ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osThreadGetId shall be consistent in every CMSIS-RTOS. -osThreadId osThreadGetId (void); - -/// Terminate execution of a thread and remove it from Active Threads. -/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osThreadTerminate shall be consistent in every CMSIS-RTOS. -osStatus osThreadTerminate (osThreadId thread_id); - -/// Pass control to next thread that is in state \b READY. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osThreadYield shall be consistent in every CMSIS-RTOS. -osStatus osThreadYield (void); - -/// Change priority of an active thread. -/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. -/// \param[in] priority new priority value for the thread function. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osThreadSetPriority shall be consistent in every CMSIS-RTOS. -osStatus osThreadSetPriority (osThreadId thread_id, osPriority priority); - -/// Get current priority of an active thread. -/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. -/// \return current priority value of the thread function. -/// \note MUST REMAIN UNCHANGED: \b osThreadGetPriority shall be consistent in every CMSIS-RTOS. -osPriority osThreadGetPriority (osThreadId thread_id); - - -// ==== Generic Wait Functions ==== - -/// Wait for Timeout (Time Delay). -/// \param[in] millisec time delay value -/// \return status code that indicates the execution status of the function. -osStatus osDelay (uint32_t millisec); - -#if (defined (osFeature_Wait) && (osFeature_Wait != 0)) // Generic Wait available - -/// Wait for Signal, Message, Mail, or Timeout. -/// \param[in] millisec timeout value or 0 in case of no time-out -/// \return event that contains signal, message, or mail information or error code. -/// \note MUST REMAIN UNCHANGED: \b osWait shall be consistent in every CMSIS-RTOS. -osEvent osWait (uint32_t millisec); - -#endif // Generic Wait available - - -// ==== Timer Management Functions ==== -/// Define a Timer object. -/// \param name name of the timer object. -/// \param function name of the timer call back function. -/// \note CAN BE CHANGED: The parameter to \b osTimerDef shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#if defined (osObjectsExternal) // object is external -#define osTimerDef(name, function) \ -extern const osTimerDef_t os_timer_def_##name; \ -extern struct os_timer_custom os_timer_custome_##name -#else // define the object -#define osTimerDef(name, function) \ -struct os_timer_custom os_timer_custom_##name; \ -const osTimerDef_t os_timer_def_##name = \ -{ (function), (&os_timer_custom_##name) } -#endif - -/// Access a Timer definition. -/// \param name name of the timer object. -/// \note CAN BE CHANGED: The parameter to \b osTimer shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#define osTimer(name) \ -&os_timer_def_##name - -/// Create a timer. -/// \param[in] timer_def timer object referenced with \ref osTimer. -/// \param[in] type osTimerOnce for one-shot or osTimerPeriodic for periodic behavior. -/// \param[in] argument argument to the timer call back function. -/// \return timer ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osTimerCreate shall be consistent in every CMSIS-RTOS. -osTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void *argument); - -/// Start or restart a timer. -/// \param[in] timer_id timer ID obtained by \ref osTimerCreate. -/// \param[in] millisec time delay value of the timer. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osTimerStart shall be consistent in every CMSIS-RTOS. -osStatus osTimerStart (osTimerId timer_id, uint32_t millisec); - -/// Stop the timer. -/// \param[in] timer_id timer ID obtained by \ref osTimerCreate. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osTimerStop shall be consistent in every CMSIS-RTOS. -osStatus osTimerStop (osTimerId timer_id); - -/// Delete a timer that was created by \ref osTimerCreate. -/// \param[in] timer_id timer ID obtained by \ref osTimerCreate. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osTimerDelete shall be consistent in every CMSIS-RTOS. -osStatus osTimerDelete (osTimerId timer_id); - - -// ==== Signal Management ==== - -/// Set the specified Signal Flags of an active thread. -/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. -/// \param[in] signals specifies the signal flags of the thread that should be set. -/// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters. -/// \note MUST REMAIN UNCHANGED: \b osSignalSet shall be consistent in every CMSIS-RTOS. -int32_t osSignalSet (osThreadId thread_id, int32_t signals); - -/// Clear the specified Signal Flags of an active thread. -/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. -/// \param[in] signals specifies the signal flags of the thread that shall be cleared. -/// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters. -/// \note MUST REMAIN UNCHANGED: \b osSignalClear shall be consistent in every CMSIS-RTOS. -int32_t osSignalClear (osThreadId thread_id, int32_t signals); - -/// Wait for one or more Signal Flags to become signaled for the current \b RUNNING thread. -/// \param[in] signals wait until all specified signal flags set or 0 for any single signal flag. -/// \param[in] millisec timeout value or 0 in case of no time-out. -/// \return event flag information or error code. -/// \note MUST REMAIN UNCHANGED: \b osSignalWait shall be consistent in every CMSIS-RTOS. -osEvent osSignalWait (int32_t signals, uint32_t millisec); - - -// ==== Mutex Management ==== - -/// Define a Mutex. -/// \param name name of the mutex object. -/// \note CAN BE CHANGED: The parameter to \b osMutexDef shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#if defined (osObjectsExternal) // object is external -#define osMutexDef(name) \ -extern const osMutexDef_t os_mutex_def_##name -#else // define the object -#define osMutexDef(name) \ -const osMutexDef_t os_mutex_def_##name = { 0 } -#endif - -/// Access a Mutex definition. -/// \param name name of the mutex object. -/// \note CAN BE CHANGED: The parameter to \b osMutex shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#define osMutex(name) \ -&os_mutex_def_##name - -/// Create and Initialize a Mutex object. -/// \param[in] mutex_def mutex definition referenced with \ref osMutex. -/// \return mutex ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osMutexCreate shall be consistent in every CMSIS-RTOS. -osMutexId osMutexCreate (const osMutexDef_t *mutex_def); - -/// Wait until a Mutex becomes available. -/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate. -/// \param[in] millisec timeout value or 0 in case of no time-out. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osMutexWait shall be consistent in every CMSIS-RTOS. -osStatus osMutexWait (osMutexId mutex_id, uint32_t millisec); - -/// Release a Mutex that was obtained by \ref osMutexWait. -/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osMutexRelease shall be consistent in every CMSIS-RTOS. -osStatus osMutexRelease (osMutexId mutex_id); - -/// Delete a Mutex that was created by \ref osMutexCreate. -/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osMutexDelete shall be consistent in every CMSIS-RTOS. -osStatus osMutexDelete (osMutexId mutex_id); - - -// ==== Semaphore Management Functions ==== - -#if (defined (osFeature_Semaphore) && (osFeature_Semaphore != 0)) // Semaphore available - -/// Define a Semaphore object. -/// \param name name of the semaphore object. -/// \note CAN BE CHANGED: The parameter to \b osSemaphoreDef shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#if defined (osObjectsExternal) // object is external -#define osSemaphoreDef(name) \ -extern const osSemaphoreDef_t os_semaphore_def_##name -#else // define the object -#define osSemaphoreDef(name) \ -const osSemaphoreDef_t os_semaphore_def_##name = { 0 } -#endif - -/// Access a Semaphore definition. -/// \param name name of the semaphore object. -/// \note CAN BE CHANGED: The parameter to \b osSemaphore shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#define osSemaphore(name) \ -&os_semaphore_def_##name - -/// Create and Initialize a Semaphore object used for managing resources. -/// \param[in] semaphore_def semaphore definition referenced with \ref osSemaphore. -/// \param[in] count number of available resources. -/// \return semaphore ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osSemaphoreCreate shall be consistent in every CMSIS-RTOS. -osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t count); - -/// Wait until a Semaphore token becomes available. -/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate. -/// \param[in] millisec timeout value or 0 in case of no time-out. -/// \return number of available tokens, or -1 in case of incorrect parameters. -/// \note MUST REMAIN UNCHANGED: \b osSemaphoreWait shall be consistent in every CMSIS-RTOS. -int32_t osSemaphoreWait (osSemaphoreId semaphore_id, uint32_t millisec); - -/// Release a Semaphore token. -/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osSemaphoreRelease shall be consistent in every CMSIS-RTOS. -osStatus osSemaphoreRelease (osSemaphoreId semaphore_id); - -/// Delete a Semaphore that was created by \ref osSemaphoreCreate. -/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osSemaphoreDelete shall be consistent in every CMSIS-RTOS. -osStatus osSemaphoreDelete (osSemaphoreId semaphore_id); - -#endif // Semaphore available - - -// ==== Memory Pool Management Functions ==== - -#if (defined (osFeature_Pool) && (osFeature_Pool != 0)) // Memory Pool Management available - -/// \brief Define a Memory Pool. -/// \param name name of the memory pool. -/// \param no maximum number of blocks (objects) in the memory pool. -/// \param type data type of a single block (object). -/// \note CAN BE CHANGED: The parameter to \b osPoolDef shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#if defined (osObjectsExternal) // object is external -#define osPoolDef(name, no, type) \ -extern const osPoolDef_t os_pool_def_##name -#else // define the object -#define osPoolDef(name, no, type) \ -const osPoolDef_t os_pool_def_##name = \ -{ (no), sizeof(type), NULL } -#endif - -/// \brief Access a Memory Pool definition. -/// \param name name of the memory pool -/// \note CAN BE CHANGED: The parameter to \b osPool shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#define osPool(name) \ -&os_pool_def_##name - -/// Create and Initialize a memory pool. -/// \param[in] pool_def memory pool definition referenced with \ref osPool. -/// \return memory pool ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osPoolCreate shall be consistent in every CMSIS-RTOS. -osPoolId osPoolCreate (const osPoolDef_t *pool_def); - -/// Allocate a memory block from a memory pool. -/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate. -/// \return address of the allocated memory block or NULL in case of no memory available. -/// \note MUST REMAIN UNCHANGED: \b osPoolAlloc shall be consistent in every CMSIS-RTOS. -void *osPoolAlloc (osPoolId pool_id); - -/// Allocate a memory block from a memory pool and set memory block to zero. -/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate. -/// \return address of the allocated memory block or NULL in case of no memory available. -/// \note MUST REMAIN UNCHANGED: \b osPoolCAlloc shall be consistent in every CMSIS-RTOS. -void *osPoolCAlloc (osPoolId pool_id); - -/// Return an allocated memory block back to a specific memory pool. -/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate. -/// \param[in] block address of the allocated memory block that is returned to the memory pool. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osPoolFree shall be consistent in every CMSIS-RTOS. -osStatus osPoolFree (osPoolId pool_id, void *block); - -#endif // Memory Pool Management available - - -// ==== Message Queue Management Functions ==== - -#if (defined (osFeature_MessageQ) && (osFeature_MessageQ != 0)) // Message Queues available - -/// \brief Create a Message Queue Definition. -/// \param name name of the queue. -/// \param queue_sz maximum number of messages in the queue. -/// \param type data type of a single message element (for debugger). -/// \note CAN BE CHANGED: The parameter to \b osMessageQDef shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#if defined (osObjectsExternal) // object is external -#define osMessageQDef(name, queue_sz, type) \ -extern const osMessageQDef_t os_messageQ_def_##name -#else // define the object -#define osMessageQDef(name, queue_sz, type) \ -const osMessageQDef_t os_messageQ_def_##name = \ -{ (queue_sz), sizeof (type) } -#endif - -/// \brief Access a Message Queue Definition. -/// \param name name of the queue -/// \note CAN BE CHANGED: The parameter to \b osMessageQ shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#define osMessageQ(name) \ -&os_messageQ_def_##name - -/// Create and Initialize a Message Queue. -/// \param[in] queue_def queue definition referenced with \ref osMessageQ. -/// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL. -/// \return message queue ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osMessageCreate shall be consistent in every CMSIS-RTOS. -osMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id); - -/// Put a Message to a Queue. -/// \param[in] queue_id message queue ID obtained with \ref osMessageCreate. -/// \param[in] info message information. -/// \param[in] millisec timeout value or 0 in case of no time-out. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osMessagePut shall be consistent in every CMSIS-RTOS. -osStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec); - -/// Get a Message or Wait for a Message from a Queue. -/// \param[in] queue_id message queue ID obtained with \ref osMessageCreate. -/// \param[in] millisec timeout value or 0 in case of no time-out. -/// \return event information that includes status code. -/// \note MUST REMAIN UNCHANGED: \b osMessageGet shall be consistent in every CMSIS-RTOS. -osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec); - -#endif // Message Queues available - - -// ==== Mail Queue Management Functions ==== - -#if (defined (osFeature_MailQ) && (osFeature_MailQ != 0)) // Mail Queues available - -/// \brief Create a Mail Queue Definition. -/// \param name name of the queue -/// \param queue_sz maximum number of messages in queue -/// \param type data type of a single message element -/// \note CAN BE CHANGED: The parameter to \b osMailQDef shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#if defined (osObjectsExternal) // object is external -#define osMailQDef(name, queue_sz, type) \ -extern struct os_mailQ_cb *os_mailQ_cb_##name; \ -extern const osMailQDef_t os_mailQ_def_##name; -#else // define the object -#define osMailQDef(name, queue_sz, type) \ -struct os_mailQ_cb *os_mailQ_cb_##name; \ -const osMailQDef_t os_mailQ_def_##name = \ -{ (queue_sz), sizeof (type), (&os_mailQ_cb_##name) } -#endif - -/// \brief Access a Mail Queue Definition. -/// \param name name of the queue -/// \note CAN BE CHANGED: The parameter to \b osMailQ shall be consistent but the -/// macro body is implementation specific in every CMSIS-RTOS. -#define osMailQ(name) \ -&os_mailQ_def_##name - -/// Create and Initialize mail queue. -/// \param[in] queue_def reference to the mail queue definition obtain with \ref osMailQ -/// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL. -/// \return mail queue ID for reference by other functions or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osMailCreate shall be consistent in every CMSIS-RTOS. -osMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id); - -/// Allocate a memory block from a mail. -/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. -/// \param[in] millisec timeout value or 0 in case of no time-out -/// \return pointer to memory block that can be filled with mail or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osMailAlloc shall be consistent in every CMSIS-RTOS. -void *osMailAlloc (osMailQId queue_id, uint32_t millisec); - -/// Allocate a memory block from a mail and set memory block to zero. -/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. -/// \param[in] millisec timeout value or 0 in case of no time-out -/// \return pointer to memory block that can be filled with mail or NULL in case of error. -/// \note MUST REMAIN UNCHANGED: \b osMailCAlloc shall be consistent in every CMSIS-RTOS. -void *osMailCAlloc (osMailQId queue_id, uint32_t millisec); - -/// Put a mail to a queue. -/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. -/// \param[in] mail memory block previously allocated with \ref osMailAlloc or \ref osMailCAlloc. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osMailPut shall be consistent in every CMSIS-RTOS. -osStatus osMailPut (osMailQId queue_id, void *mail); - -/// Get a mail from a queue. -/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. -/// \param[in] millisec timeout value or 0 in case of no time-out -/// \return event that contains mail information or error code. -/// \note MUST REMAIN UNCHANGED: \b osMailGet shall be consistent in every CMSIS-RTOS. -osEvent osMailGet (osMailQId queue_id, uint32_t millisec); - -/// Free a memory block from a mail. -/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. -/// \param[in] mail pointer to the memory block that was obtained with \ref osMailGet. -/// \return status code that indicates the execution status of the function. -/// \note MUST REMAIN UNCHANGED: \b osMailFree shall be consistent in every CMSIS-RTOS. -osStatus osMailFree (osMailQId queue_id, void *mail); - -#endif // Mail Queues available - -#undef malloc -#define malloc(size) pvPortMalloc(size) -#undef free -#define free(pbuf) vPortFree(pbuf) - -extern void *calloc_freertos(size_t nelements, size_t elementSize); -#define calloc(nelements, elementSize) calloc_freertos(nelements, elementSize) - -#ifdef __cplusplus -} -#endif - -#endif // _CMSIS_OS_H diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/croutine.c b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/croutine.c deleted file mode 100644 index 993e09b..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/croutine.c +++ /dev/null @@ -1,395 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -#include "FreeRTOS.h" -#include "task.h" -#include "croutine.h" - -/* Remove the whole file is co-routines are not being used. */ -#if( configUSE_CO_ROUTINES != 0 ) - -/* - * Some kernel aware debuggers require data to be viewed to be global, rather - * than file scope. - */ -#ifdef portREMOVE_STATIC_QUALIFIER - #define static -#endif - - -/* Lists for ready and blocked co-routines. --------------------*/ -static List_t pxReadyCoRoutineLists[ configMAX_CO_ROUTINE_PRIORITIES ]; /*< Prioritised ready co-routines. */ -static List_t xDelayedCoRoutineList1; /*< Delayed co-routines. */ -static List_t xDelayedCoRoutineList2; /*< Delayed co-routines (two lists are used - one for delays that have overflowed the current tick count. */ -static List_t * pxDelayedCoRoutineList; /*< Points to the delayed co-routine list currently being used. */ -static List_t * pxOverflowDelayedCoRoutineList; /*< Points to the delayed co-routine list currently being used to hold co-routines that have overflowed the current tick count. */ -static List_t xPendingReadyCoRoutineList; /*< Holds co-routines that have been readied by an external event. They cannot be added directly to the ready lists as the ready lists cannot be accessed by interrupts. */ - -/* Other file private variables. --------------------------------*/ -CRCB_t * pxCurrentCoRoutine = NULL; -static UBaseType_t uxTopCoRoutineReadyPriority = 0; -static TickType_t xCoRoutineTickCount = 0, xLastTickCount = 0, xPassedTicks = 0; - -/* The initial state of the co-routine when it is created. */ -#define corINITIAL_STATE ( 0 ) - -/* - * Place the co-routine represented by pxCRCB into the appropriate ready queue - * for the priority. It is inserted at the end of the list. - * - * This macro accesses the co-routine ready lists and therefore must not be - * used from within an ISR. - */ -#define prvAddCoRoutineToReadyQueue( pxCRCB ) \ -{ \ - if( pxCRCB->uxPriority > uxTopCoRoutineReadyPriority ) \ - { \ - uxTopCoRoutineReadyPriority = pxCRCB->uxPriority; \ - } \ - vListInsertEnd( ( List_t * ) &( pxReadyCoRoutineLists[ pxCRCB->uxPriority ] ), &( pxCRCB->xGenericListItem ) ); \ -} - -/* - * Utility to ready all the lists used by the scheduler. This is called - * automatically upon the creation of the first co-routine. - */ -static void prvInitialiseCoRoutineLists( void ); - -/* - * Co-routines that are readied by an interrupt cannot be placed directly into - * the ready lists (there is no mutual exclusion). Instead they are placed in - * in the pending ready list in order that they can later be moved to the ready - * list by the co-routine scheduler. - */ -static void prvCheckPendingReadyList( void ); - -/* - * Macro that looks at the list of co-routines that are currently delayed to - * see if any require waking. - * - * Co-routines are stored in the queue in the order of their wake time - - * meaning once one co-routine has been found whose timer has not expired - * we need not look any further down the list. - */ -static void prvCheckDelayedList( void ); - -/*-----------------------------------------------------------*/ - -BaseType_t xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode, UBaseType_t uxPriority, UBaseType_t uxIndex ) -{ -BaseType_t xReturn; -CRCB_t *pxCoRoutine; - - /* Allocate the memory that will store the co-routine control block. */ - pxCoRoutine = ( CRCB_t * ) pvPortMalloc( sizeof( CRCB_t ) ); - if( pxCoRoutine ) - { - /* If pxCurrentCoRoutine is NULL then this is the first co-routine to - be created and the co-routine data structures need initialising. */ - if( pxCurrentCoRoutine == NULL ) - { - pxCurrentCoRoutine = pxCoRoutine; - prvInitialiseCoRoutineLists(); - } - - /* Check the priority is within limits. */ - if( uxPriority >= configMAX_CO_ROUTINE_PRIORITIES ) - { - uxPriority = configMAX_CO_ROUTINE_PRIORITIES - 1; - } - - /* Fill out the co-routine control block from the function parameters. */ - pxCoRoutine->uxState = corINITIAL_STATE; - pxCoRoutine->uxPriority = uxPriority; - pxCoRoutine->uxIndex = uxIndex; - pxCoRoutine->pxCoRoutineFunction = pxCoRoutineCode; - - /* Initialise all the other co-routine control block parameters. */ - vListInitialiseItem( &( pxCoRoutine->xGenericListItem ) ); - vListInitialiseItem( &( pxCoRoutine->xEventListItem ) ); - - /* Set the co-routine control block as a link back from the ListItem_t. - This is so we can get back to the containing CRCB from a generic item - in a list. */ - listSET_LIST_ITEM_OWNER( &( pxCoRoutine->xGenericListItem ), pxCoRoutine ); - listSET_LIST_ITEM_OWNER( &( pxCoRoutine->xEventListItem ), pxCoRoutine ); - - /* Event lists are always in priority order. */ - listSET_LIST_ITEM_VALUE( &( pxCoRoutine->xEventListItem ), ( ( TickType_t ) configMAX_CO_ROUTINE_PRIORITIES - ( TickType_t ) uxPriority ) ); - - /* Now the co-routine has been initialised it can be added to the ready - list at the correct priority. */ - prvAddCoRoutineToReadyQueue( pxCoRoutine ); - - xReturn = pdPASS; - } - else - { - xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY; - } - - return xReturn; -} -/*-----------------------------------------------------------*/ - -void vCoRoutineAddToDelayedList( TickType_t xTicksToDelay, List_t *pxEventList ) -{ -TickType_t xTimeToWake; - - /* Calculate the time to wake - this may overflow but this is - not a problem. */ - xTimeToWake = xCoRoutineTickCount + xTicksToDelay; - - /* We must remove ourselves from the ready list before adding - ourselves to the blocked list as the same list item is used for - both lists. */ - ( void ) uxListRemove( ( ListItem_t * ) &( pxCurrentCoRoutine->xGenericListItem ) ); - - /* The list item will be inserted in wake time order. */ - listSET_LIST_ITEM_VALUE( &( pxCurrentCoRoutine->xGenericListItem ), xTimeToWake ); - - if( xTimeToWake < xCoRoutineTickCount ) - { - /* Wake time has overflowed. Place this item in the - overflow list. */ - vListInsert( ( List_t * ) pxOverflowDelayedCoRoutineList, ( ListItem_t * ) &( pxCurrentCoRoutine->xGenericListItem ) ); - } - else - { - /* The wake time has not overflowed, so we can use the - current block list. */ - vListInsert( ( List_t * ) pxDelayedCoRoutineList, ( ListItem_t * ) &( pxCurrentCoRoutine->xGenericListItem ) ); - } - - if( pxEventList ) - { - /* Also add the co-routine to an event list. If this is done then the - function must be called with interrupts disabled. */ - vListInsert( pxEventList, &( pxCurrentCoRoutine->xEventListItem ) ); - } -} -/*-----------------------------------------------------------*/ - -static void prvCheckPendingReadyList( void ) -{ - /* Are there any co-routines waiting to get moved to the ready list? These - are co-routines that have been readied by an ISR. The ISR cannot access - the ready lists itself. */ - while( listLIST_IS_EMPTY( &xPendingReadyCoRoutineList ) == pdFALSE ) - { - CRCB_t *pxUnblockedCRCB; - - /* The pending ready list can be accessed by an ISR. */ - portDISABLE_INTERRUPTS(); - { - pxUnblockedCRCB = ( CRCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( (&xPendingReadyCoRoutineList) ); - ( void ) uxListRemove( &( pxUnblockedCRCB->xEventListItem ) ); - } - portENABLE_INTERRUPTS(); - - ( void ) uxListRemove( &( pxUnblockedCRCB->xGenericListItem ) ); - prvAddCoRoutineToReadyQueue( pxUnblockedCRCB ); - } -} -/*-----------------------------------------------------------*/ - -static void prvCheckDelayedList( void ) -{ -CRCB_t *pxCRCB; - - xPassedTicks = xTaskGetTickCount() - xLastTickCount; - while( xPassedTicks ) - { - xCoRoutineTickCount++; - xPassedTicks--; - - /* If the tick count has overflowed we need to swap the ready lists. */ - if( xCoRoutineTickCount == 0 ) - { - List_t * pxTemp; - - /* Tick count has overflowed so we need to swap the delay lists. If there are - any items in pxDelayedCoRoutineList here then there is an error! */ - pxTemp = pxDelayedCoRoutineList; - pxDelayedCoRoutineList = pxOverflowDelayedCoRoutineList; - pxOverflowDelayedCoRoutineList = pxTemp; - } - - /* See if this tick has made a timeout expire. */ - while( listLIST_IS_EMPTY( pxDelayedCoRoutineList ) == pdFALSE ) - { - pxCRCB = ( CRCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedCoRoutineList ); - - if( xCoRoutineTickCount < listGET_LIST_ITEM_VALUE( &( pxCRCB->xGenericListItem ) ) ) - { - /* Timeout not yet expired. */ - break; - } - - portDISABLE_INTERRUPTS(); - { - /* The event could have occurred just before this critical - section. If this is the case then the generic list item will - have been moved to the pending ready list and the following - line is still valid. Also the pvContainer parameter will have - been set to NULL so the following lines are also valid. */ - ( void ) uxListRemove( &( pxCRCB->xGenericListItem ) ); - - /* Is the co-routine waiting on an event also? */ - if( pxCRCB->xEventListItem.pvContainer ) - { - ( void ) uxListRemove( &( pxCRCB->xEventListItem ) ); - } - } - portENABLE_INTERRUPTS(); - - prvAddCoRoutineToReadyQueue( pxCRCB ); - } - } - - xLastTickCount = xCoRoutineTickCount; -} -/*-----------------------------------------------------------*/ - -void vCoRoutineSchedule( void ) -{ - /* See if any co-routines readied by events need moving to the ready lists. */ - prvCheckPendingReadyList(); - - /* See if any delayed co-routines have timed out. */ - prvCheckDelayedList(); - - /* Find the highest priority queue that contains ready co-routines. */ - while( listLIST_IS_EMPTY( &( pxReadyCoRoutineLists[ uxTopCoRoutineReadyPriority ] ) ) ) - { - if( uxTopCoRoutineReadyPriority == 0 ) - { - /* No more co-routines to check. */ - return; - } - --uxTopCoRoutineReadyPriority; - } - - /* listGET_OWNER_OF_NEXT_ENTRY walks through the list, so the co-routines - of the same priority get an equal share of the processor time. */ - listGET_OWNER_OF_NEXT_ENTRY( pxCurrentCoRoutine, &( pxReadyCoRoutineLists[ uxTopCoRoutineReadyPriority ] ) ); - - /* Call the co-routine. */ - ( pxCurrentCoRoutine->pxCoRoutineFunction )( pxCurrentCoRoutine, pxCurrentCoRoutine->uxIndex ); - - return; -} -/*-----------------------------------------------------------*/ - -static void prvInitialiseCoRoutineLists( void ) -{ -UBaseType_t uxPriority; - - for( uxPriority = 0; uxPriority < configMAX_CO_ROUTINE_PRIORITIES; uxPriority++ ) - { - vListInitialise( ( List_t * ) &( pxReadyCoRoutineLists[ uxPriority ] ) ); - } - - vListInitialise( ( List_t * ) &xDelayedCoRoutineList1 ); - vListInitialise( ( List_t * ) &xDelayedCoRoutineList2 ); - vListInitialise( ( List_t * ) &xPendingReadyCoRoutineList ); - - /* Start with pxDelayedCoRoutineList using list1 and the - pxOverflowDelayedCoRoutineList using list2. */ - pxDelayedCoRoutineList = &xDelayedCoRoutineList1; - pxOverflowDelayedCoRoutineList = &xDelayedCoRoutineList2; -} -/*-----------------------------------------------------------*/ - -BaseType_t xCoRoutineRemoveFromEventList( const List_t *pxEventList ) -{ -CRCB_t *pxUnblockedCRCB; -BaseType_t xReturn; - - /* This function is called from within an interrupt. It can only access - event lists and the pending ready list. This function assumes that a - check has already been made to ensure pxEventList is not empty. */ - pxUnblockedCRCB = ( CRCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxEventList ); - ( void ) uxListRemove( &( pxUnblockedCRCB->xEventListItem ) ); - vListInsertEnd( ( List_t * ) &( xPendingReadyCoRoutineList ), &( pxUnblockedCRCB->xEventListItem ) ); - - if( pxUnblockedCRCB->uxPriority >= pxCurrentCoRoutine->uxPriority ) - { - xReturn = pdTRUE; - } - else - { - xReturn = pdFALSE; - } - - return xReturn; -} - -#endif /* configUSE_CO_ROUTINES == 0 */ - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/event_groups.c b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/event_groups.c deleted file mode 100644 index b8df5fd..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/event_groups.c +++ /dev/null @@ -1,752 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -/* Standard includes. */ -#include - -/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining -all the API functions to use the MPU wrappers. That should only be done when -task.h is included from an application file. */ -#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE - -/* FreeRTOS includes. */ -#include "FreeRTOS.h" -#include "task.h" -#include "timers.h" -#include "event_groups.h" - -/* Lint e961 and e750 are suppressed as a MISRA exception justified because the -MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined for the -header files above, but not in this file, in order to generate the correct -privileged Vs unprivileged linkage and placement. */ -#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750. */ - -/* The following bit fields convey control information in a task's event list -item value. It is important they don't clash with the -taskEVENT_LIST_ITEM_VALUE_IN_USE definition. */ -#if configUSE_16_BIT_TICKS == 1 - #define eventCLEAR_EVENTS_ON_EXIT_BIT 0x0100U - #define eventUNBLOCKED_DUE_TO_BIT_SET 0x0200U - #define eventWAIT_FOR_ALL_BITS 0x0400U - #define eventEVENT_BITS_CONTROL_BYTES 0xff00U -#else - #define eventCLEAR_EVENTS_ON_EXIT_BIT 0x01000000UL - #define eventUNBLOCKED_DUE_TO_BIT_SET 0x02000000UL - #define eventWAIT_FOR_ALL_BITS 0x04000000UL - #define eventEVENT_BITS_CONTROL_BYTES 0xff000000UL -#endif - -typedef struct xEventGroupDefinition -{ - EventBits_t uxEventBits; - List_t xTasksWaitingForBits; /*< List of tasks waiting for a bit to be set. */ - - #if( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxEventGroupNumber; - #endif - - #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - uint8_t ucStaticallyAllocated; /*< Set to pdTRUE if the event group is statically allocated to ensure no attempt is made to free the memory. */ - #endif -} EventGroup_t; - -/*-----------------------------------------------------------*/ - -/* - * Test the bits set in uxCurrentEventBits to see if the wait condition is met. - * The wait condition is defined by xWaitForAllBits. If xWaitForAllBits is - * pdTRUE then the wait condition is met if all the bits set in uxBitsToWaitFor - * are also set in uxCurrentEventBits. If xWaitForAllBits is pdFALSE then the - * wait condition is met if any of the bits set in uxBitsToWait for are also set - * in uxCurrentEventBits. - */ -static BaseType_t prvTestWaitCondition( const EventBits_t uxCurrentEventBits, const EventBits_t uxBitsToWaitFor, const BaseType_t xWaitForAllBits ) PRIVILEGED_FUNCTION; - -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - - EventGroupHandle_t xEventGroupCreateStatic( StaticEventGroup_t *pxEventGroupBuffer ) - { - EventGroup_t *pxEventBits; - - /* A StaticEventGroup_t object must be provided. */ - configASSERT( pxEventGroupBuffer ); - - /* The user has provided a statically allocated event group - use it. */ - pxEventBits = ( EventGroup_t * ) pxEventGroupBuffer; /*lint !e740 EventGroup_t and StaticEventGroup_t are guaranteed to have the same size and alignment requirement - checked by configASSERT(). */ - - if( pxEventBits != NULL ) - { - pxEventBits->uxEventBits = 0; - vListInitialise( &( pxEventBits->xTasksWaitingForBits ) ); - - #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - { - /* Both static and dynamic allocation can be used, so note that - this event group was created statically in case the event group - is later deleted. */ - pxEventBits->ucStaticallyAllocated = pdTRUE; - } - #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ - - traceEVENT_GROUP_CREATE( pxEventBits ); - } - else - { - traceEVENT_GROUP_CREATE_FAILED(); - } - - return ( EventGroupHandle_t ) pxEventBits; - } - -#endif /* configSUPPORT_STATIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - - EventGroupHandle_t xEventGroupCreate( void ) - { - EventGroup_t *pxEventBits; - - /* Allocate the event group. */ - pxEventBits = ( EventGroup_t * ) pvPortMalloc( sizeof( EventGroup_t ) ); - - if( pxEventBits != NULL ) - { - pxEventBits->uxEventBits = 0; - vListInitialise( &( pxEventBits->xTasksWaitingForBits ) ); - - #if( configSUPPORT_STATIC_ALLOCATION == 1 ) - { - /* Both static and dynamic allocation can be used, so note this - event group was allocated statically in case the event group is - later deleted. */ - pxEventBits->ucStaticallyAllocated = pdFALSE; - } - #endif /* configSUPPORT_STATIC_ALLOCATION */ - - traceEVENT_GROUP_CREATE( pxEventBits ); - } - else - { - traceEVENT_GROUP_CREATE_FAILED(); - } - - return ( EventGroupHandle_t ) pxEventBits; - } - -#endif /* configSUPPORT_DYNAMIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait ) -{ -EventBits_t uxOriginalBitValue, uxReturn; -EventGroup_t *pxEventBits = ( EventGroup_t * ) xEventGroup; -BaseType_t xAlreadyYielded; -BaseType_t xTimeoutOccurred = pdFALSE; - - configASSERT( ( uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0 ); - configASSERT( uxBitsToWaitFor != 0 ); - #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) - { - configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) ); - } - #endif - - vTaskSuspendAll(); - { - uxOriginalBitValue = pxEventBits->uxEventBits; - - ( void ) xEventGroupSetBits( xEventGroup, uxBitsToSet ); - - if( ( ( uxOriginalBitValue | uxBitsToSet ) & uxBitsToWaitFor ) == uxBitsToWaitFor ) - { - /* All the rendezvous bits are now set - no need to block. */ - uxReturn = ( uxOriginalBitValue | uxBitsToSet ); - - /* Rendezvous always clear the bits. They will have been cleared - already unless this is the only task in the rendezvous. */ - pxEventBits->uxEventBits &= ~uxBitsToWaitFor; - - xTicksToWait = 0; - } - else - { - if( xTicksToWait != ( TickType_t ) 0 ) - { - traceEVENT_GROUP_SYNC_BLOCK( xEventGroup, uxBitsToSet, uxBitsToWaitFor ); - - /* Store the bits that the calling task is waiting for in the - task's event list item so the kernel knows when a match is - found. Then enter the blocked state. */ - vTaskPlaceOnUnorderedEventList( &( pxEventBits->xTasksWaitingForBits ), ( uxBitsToWaitFor | eventCLEAR_EVENTS_ON_EXIT_BIT | eventWAIT_FOR_ALL_BITS ), xTicksToWait ); - - /* This assignment is obsolete as uxReturn will get set after - the task unblocks, but some compilers mistakenly generate a - warning about uxReturn being returned without being set if the - assignment is omitted. */ - uxReturn = 0; - } - else - { - /* The rendezvous bits were not set, but no block time was - specified - just return the current event bit value. */ - uxReturn = pxEventBits->uxEventBits; - } - } - } - xAlreadyYielded = xTaskResumeAll(); - - if( xTicksToWait != ( TickType_t ) 0 ) - { - if( xAlreadyYielded == pdFALSE ) - { - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* The task blocked to wait for its required bits to be set - at this - point either the required bits were set or the block time expired. If - the required bits were set they will have been stored in the task's - event list item, and they should now be retrieved then cleared. */ - uxReturn = uxTaskResetEventItemValue(); - - if( ( uxReturn & eventUNBLOCKED_DUE_TO_BIT_SET ) == ( EventBits_t ) 0 ) - { - /* The task timed out, just return the current event bit value. */ - taskENTER_CRITICAL(); - { - uxReturn = pxEventBits->uxEventBits; - - /* Although the task got here because it timed out before the - bits it was waiting for were set, it is possible that since it - unblocked another task has set the bits. If this is the case - then it needs to clear the bits before exiting. */ - if( ( uxReturn & uxBitsToWaitFor ) == uxBitsToWaitFor ) - { - pxEventBits->uxEventBits &= ~uxBitsToWaitFor; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); - - xTimeoutOccurred = pdTRUE; - } - else - { - /* The task unblocked because the bits were set. */ - } - - /* Control bits might be set as the task had blocked should not be - returned. */ - uxReturn &= ~eventEVENT_BITS_CONTROL_BYTES; - } - - traceEVENT_GROUP_SYNC_END( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTimeoutOccurred ); - - return uxReturn; -} -/*-----------------------------------------------------------*/ - -EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait ) -{ -EventGroup_t *pxEventBits = ( EventGroup_t * ) xEventGroup; -EventBits_t uxReturn, uxControlBits = 0; -BaseType_t xWaitConditionMet, xAlreadyYielded; -BaseType_t xTimeoutOccurred = pdFALSE; - - /* Check the user is not attempting to wait on the bits used by the kernel - itself, and that at least one bit is being requested. */ - configASSERT( xEventGroup ); - configASSERT( ( uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0 ); - configASSERT( uxBitsToWaitFor != 0 ); - #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) - { - configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) ); - } - #endif - - vTaskSuspendAll(); - { - const EventBits_t uxCurrentEventBits = pxEventBits->uxEventBits; - - /* Check to see if the wait condition is already met or not. */ - xWaitConditionMet = prvTestWaitCondition( uxCurrentEventBits, uxBitsToWaitFor, xWaitForAllBits ); - - if( xWaitConditionMet != pdFALSE ) - { - /* The wait condition has already been met so there is no need to - block. */ - uxReturn = uxCurrentEventBits; - xTicksToWait = ( TickType_t ) 0; - - /* Clear the wait bits if requested to do so. */ - if( xClearOnExit != pdFALSE ) - { - pxEventBits->uxEventBits &= ~uxBitsToWaitFor; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else if( xTicksToWait == ( TickType_t ) 0 ) - { - /* The wait condition has not been met, but no block time was - specified, so just return the current value. */ - uxReturn = uxCurrentEventBits; - } - else - { - /* The task is going to block to wait for its required bits to be - set. uxControlBits are used to remember the specified behaviour of - this call to xEventGroupWaitBits() - for use when the event bits - unblock the task. */ - if( xClearOnExit != pdFALSE ) - { - uxControlBits |= eventCLEAR_EVENTS_ON_EXIT_BIT; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - if( xWaitForAllBits != pdFALSE ) - { - uxControlBits |= eventWAIT_FOR_ALL_BITS; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Store the bits that the calling task is waiting for in the - task's event list item so the kernel knows when a match is - found. Then enter the blocked state. */ - vTaskPlaceOnUnorderedEventList( &( pxEventBits->xTasksWaitingForBits ), ( uxBitsToWaitFor | uxControlBits ), xTicksToWait ); - - /* This is obsolete as it will get set after the task unblocks, but - some compilers mistakenly generate a warning about the variable - being returned without being set if it is not done. */ - uxReturn = 0; - - traceEVENT_GROUP_WAIT_BITS_BLOCK( xEventGroup, uxBitsToWaitFor ); - } - } - xAlreadyYielded = xTaskResumeAll(); - - if( xTicksToWait != ( TickType_t ) 0 ) - { - if( xAlreadyYielded == pdFALSE ) - { - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* The task blocked to wait for its required bits to be set - at this - point either the required bits were set or the block time expired. If - the required bits were set they will have been stored in the task's - event list item, and they should now be retrieved then cleared. */ - uxReturn = uxTaskResetEventItemValue(); - - if( ( uxReturn & eventUNBLOCKED_DUE_TO_BIT_SET ) == ( EventBits_t ) 0 ) - { - taskENTER_CRITICAL(); - { - /* The task timed out, just return the current event bit value. */ - uxReturn = pxEventBits->uxEventBits; - - /* It is possible that the event bits were updated between this - task leaving the Blocked state and running again. */ - if( prvTestWaitCondition( uxReturn, uxBitsToWaitFor, xWaitForAllBits ) != pdFALSE ) - { - if( xClearOnExit != pdFALSE ) - { - pxEventBits->uxEventBits &= ~uxBitsToWaitFor; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); - - /* Prevent compiler warnings when trace macros are not used. */ - xTimeoutOccurred = pdFALSE; - } - else - { - /* The task unblocked because the bits were set. */ - } - - /* The task blocked so control bits may have been set. */ - uxReturn &= ~eventEVENT_BITS_CONTROL_BYTES; - } - traceEVENT_GROUP_WAIT_BITS_END( xEventGroup, uxBitsToWaitFor, xTimeoutOccurred ); - - return uxReturn; -} -/*-----------------------------------------------------------*/ - -EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) -{ -EventGroup_t *pxEventBits = ( EventGroup_t * ) xEventGroup; -EventBits_t uxReturn; - - /* Check the user is not attempting to clear the bits used by the kernel - itself. */ - configASSERT( xEventGroup ); - configASSERT( ( uxBitsToClear & eventEVENT_BITS_CONTROL_BYTES ) == 0 ); - - taskENTER_CRITICAL(); - { - traceEVENT_GROUP_CLEAR_BITS( xEventGroup, uxBitsToClear ); - - /* The value returned is the event group value prior to the bits being - cleared. */ - uxReturn = pxEventBits->uxEventBits; - - /* Clear the bits. */ - pxEventBits->uxEventBits &= ~uxBitsToClear; - } - taskEXIT_CRITICAL(); - - return uxReturn; -} -/*-----------------------------------------------------------*/ - -#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) ) - - BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) - { - BaseType_t xReturn; - - traceEVENT_GROUP_CLEAR_BITS_FROM_ISR( xEventGroup, uxBitsToClear ); - xReturn = xTimerPendFunctionCallFromISR( vEventGroupClearBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToClear, NULL ); - - return xReturn; - } - -#endif -/*-----------------------------------------------------------*/ - -EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup ) -{ -UBaseType_t uxSavedInterruptStatus; -EventGroup_t *pxEventBits = ( EventGroup_t * ) xEventGroup; -EventBits_t uxReturn; - - uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); - { - uxReturn = pxEventBits->uxEventBits; - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - - return uxReturn; -} -/*-----------------------------------------------------------*/ - -EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ) -{ -ListItem_t *pxListItem, *pxNext; -ListItem_t const *pxListEnd; -List_t *pxList; -EventBits_t uxBitsToClear = 0, uxBitsWaitedFor, uxControlBits; -EventGroup_t *pxEventBits = ( EventGroup_t * ) xEventGroup; -BaseType_t xMatchFound = pdFALSE; - - /* Check the user is not attempting to set the bits used by the kernel - itself. */ - configASSERT( xEventGroup ); - configASSERT( ( uxBitsToSet & eventEVENT_BITS_CONTROL_BYTES ) == 0 ); - - pxList = &( pxEventBits->xTasksWaitingForBits ); - pxListEnd = listGET_END_MARKER( pxList ); /*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */ - vTaskSuspendAll(); - { - traceEVENT_GROUP_SET_BITS( xEventGroup, uxBitsToSet ); - - pxListItem = listGET_HEAD_ENTRY( pxList ); - - /* Set the bits. */ - pxEventBits->uxEventBits |= uxBitsToSet; - - /* See if the new bit value should unblock any tasks. */ - while( pxListItem != pxListEnd ) - { - pxNext = listGET_NEXT( pxListItem ); - uxBitsWaitedFor = listGET_LIST_ITEM_VALUE( pxListItem ); - xMatchFound = pdFALSE; - - /* Split the bits waited for from the control bits. */ - uxControlBits = uxBitsWaitedFor & eventEVENT_BITS_CONTROL_BYTES; - uxBitsWaitedFor &= ~eventEVENT_BITS_CONTROL_BYTES; - - if( ( uxControlBits & eventWAIT_FOR_ALL_BITS ) == ( EventBits_t ) 0 ) - { - /* Just looking for single bit being set. */ - if( ( uxBitsWaitedFor & pxEventBits->uxEventBits ) != ( EventBits_t ) 0 ) - { - xMatchFound = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else if( ( uxBitsWaitedFor & pxEventBits->uxEventBits ) == uxBitsWaitedFor ) - { - /* All bits are set. */ - xMatchFound = pdTRUE; - } - else - { - /* Need all bits to be set, but not all the bits were set. */ - } - - if( xMatchFound != pdFALSE ) - { - /* The bits match. Should the bits be cleared on exit? */ - if( ( uxControlBits & eventCLEAR_EVENTS_ON_EXIT_BIT ) != ( EventBits_t ) 0 ) - { - uxBitsToClear |= uxBitsWaitedFor; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Store the actual event flag value in the task's event list - item before removing the task from the event list. The - eventUNBLOCKED_DUE_TO_BIT_SET bit is set so the task knows - that is was unblocked due to its required bits matching, rather - than because it timed out. */ - ( void ) xTaskRemoveFromUnorderedEventList( pxListItem, pxEventBits->uxEventBits | eventUNBLOCKED_DUE_TO_BIT_SET ); - } - - /* Move onto the next list item. Note pxListItem->pxNext is not - used here as the list item may have been removed from the event list - and inserted into the ready/pending reading list. */ - pxListItem = pxNext; - } - - /* Clear any bits that matched when the eventCLEAR_EVENTS_ON_EXIT_BIT - bit was set in the control word. */ - pxEventBits->uxEventBits &= ~uxBitsToClear; - } - ( void ) xTaskResumeAll(); - - return pxEventBits->uxEventBits; -} -/*-----------------------------------------------------------*/ - -void vEventGroupDelete( EventGroupHandle_t xEventGroup ) -{ -EventGroup_t *pxEventBits = ( EventGroup_t * ) xEventGroup; -const List_t *pxTasksWaitingForBits = &( pxEventBits->xTasksWaitingForBits ); - - vTaskSuspendAll(); - { - traceEVENT_GROUP_DELETE( xEventGroup ); - - while( listCURRENT_LIST_LENGTH( pxTasksWaitingForBits ) > ( UBaseType_t ) 0 ) - { - /* Unblock the task, returning 0 as the event list is being deleted - and cannot therefore have any bits set. */ - configASSERT( pxTasksWaitingForBits->xListEnd.pxNext != ( ListItem_t * ) &( pxTasksWaitingForBits->xListEnd ) ); - ( void ) xTaskRemoveFromUnorderedEventList( pxTasksWaitingForBits->xListEnd.pxNext, eventUNBLOCKED_DUE_TO_BIT_SET ); - } - - #if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) ) - { - /* The event group can only have been allocated dynamically - free - it again. */ - vPortFree( pxEventBits ); - } - #elif( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - { - /* The event group could have been allocated statically or - dynamically, so check before attempting to free the memory. */ - if( pxEventBits->ucStaticallyAllocated == ( uint8_t ) pdFALSE ) - { - vPortFree( pxEventBits ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ - } - ( void ) xTaskResumeAll(); -} -/*-----------------------------------------------------------*/ - -/* For internal use only - execute a 'set bits' command that was pended from -an interrupt. */ -void vEventGroupSetBitsCallback( void *pvEventGroup, const uint32_t ulBitsToSet ) -{ - ( void ) xEventGroupSetBits( pvEventGroup, ( EventBits_t ) ulBitsToSet ); -} -/*-----------------------------------------------------------*/ - -/* For internal use only - execute a 'clear bits' command that was pended from -an interrupt. */ -void vEventGroupClearBitsCallback( void *pvEventGroup, const uint32_t ulBitsToClear ) -{ - ( void ) xEventGroupClearBits( pvEventGroup, ( EventBits_t ) ulBitsToClear ); -} -/*-----------------------------------------------------------*/ - -static BaseType_t prvTestWaitCondition( const EventBits_t uxCurrentEventBits, const EventBits_t uxBitsToWaitFor, const BaseType_t xWaitForAllBits ) -{ -BaseType_t xWaitConditionMet = pdFALSE; - - if( xWaitForAllBits == pdFALSE ) - { - /* Task only has to wait for one bit within uxBitsToWaitFor to be - set. Is one already set? */ - if( ( uxCurrentEventBits & uxBitsToWaitFor ) != ( EventBits_t ) 0 ) - { - xWaitConditionMet = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - /* Task has to wait for all the bits in uxBitsToWaitFor to be set. - Are they set already? */ - if( ( uxCurrentEventBits & uxBitsToWaitFor ) == uxBitsToWaitFor ) - { - xWaitConditionMet = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - return xWaitConditionMet; -} -/*-----------------------------------------------------------*/ - -#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) ) - - BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken ) - { - BaseType_t xReturn; - - traceEVENT_GROUP_SET_BITS_FROM_ISR( xEventGroup, uxBitsToSet ); - xReturn = xTimerPendFunctionCallFromISR( vEventGroupSetBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToSet, pxHigherPriorityTaskWoken ); - - return xReturn; - } - -#endif -/*-----------------------------------------------------------*/ - -#if (configUSE_TRACE_FACILITY == 1) - - UBaseType_t uxEventGroupGetNumber( void* xEventGroup ) - { - UBaseType_t xReturn; - EventGroup_t *pxEventBits = ( EventGroup_t * ) xEventGroup; - - if( xEventGroup == NULL ) - { - xReturn = 0; - } - else - { - xReturn = pxEventBits->uxEventGroupNumber; - } - - return xReturn; - } - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/FreeRTOS.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/FreeRTOS.h deleted file mode 100644 index 06e4d97..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/FreeRTOS.h +++ /dev/null @@ -1,1081 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -#ifndef INC_FREERTOS_H -#define INC_FREERTOS_H - -/* - * Include the generic headers required for the FreeRTOS port being used. - */ -#include - -/* - * If stdint.h cannot be located then: - * + If using GCC ensure the -nostdint options is *not* being used. - * + Ensure the project's include path includes the directory in which your - * compiler stores stdint.h. - * + Set any compiler options necessary for it to support C99, as technically - * stdint.h is only mandatory with C99 (FreeRTOS does not require C99 in any - * other way). - * + The FreeRTOS download includes a simple stdint.h definition that can be - * used in cases where none is provided by the compiler. The files only - * contains the typedefs required to build FreeRTOS. Read the instructions - * in FreeRTOS/source/stdint.readme for more information. - */ -#include /* READ COMMENT ABOVE. */ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _PLATFORM_AUTOCONFIG_H_ -#include "platform_autoconf.h" -#endif - -/* Application specific configuration options. */ -#include "FreeRTOSConfig.h" - -//----------- -#if defined(CONFIG_PLATFORM_8195A) - #ifndef CONFIG_USE_TCM_HEAP - #define CONFIG_USE_TCM_HEAP 1 - #endif - #ifndef configUSE_STACK_TCM_HEAP - #define configUSE_STACK_TCM_HEAP 5 // priority - #endif -#else - #undef configUSE_STACK_TCM_HEAP - #define configUSE_STACK_TCM_HEAP 0 -#endif -//----------- - -/* Basic FreeRTOS definitions. */ -#include "projdefs.h" - -/* Definitions specific to the port being used. */ -#include "portable.h" - -/* Must be defaulted before configUSE_NEWLIB_REENTRANT is used below. */ -#ifndef configUSE_NEWLIB_REENTRANT - #define configUSE_NEWLIB_REENTRANT 0 -#endif - -/* Required if struct _reent is used. */ -#if ( configUSE_NEWLIB_REENTRANT == 1 ) - #include -#endif -/* - * Check all the required application specific macros have been defined. - * These macros are application specific and (as downloaded) are defined - * within FreeRTOSConfig.h. - */ - -#ifndef configMINIMAL_STACK_SIZE - #error Missing definition: configMINIMAL_STACK_SIZE must be defined in FreeRTOSConfig.h. configMINIMAL_STACK_SIZE defines the size (in words) of the stack allocated to the idle task. Refer to the demo project provided for your port for a suitable value. -#endif - -#ifndef configMAX_PRIORITIES - #error Missing definition: configMAX_PRIORITIES must be defined in FreeRTOSConfig.h. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configUSE_PREEMPTION - #error Missing definition: configUSE_PREEMPTION must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configUSE_IDLE_HOOK - #error Missing definition: configUSE_IDLE_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configUSE_TICK_HOOK - #error Missing definition: configUSE_TICK_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configUSE_16_BIT_TICKS - #error Missing definition: configUSE_16_BIT_TICKS must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configMAX_PRIORITIES - #error configMAX_PRIORITIES must be defined to be greater than or equal to 1. -#endif - -#ifndef configUSE_CO_ROUTINES - #define configUSE_CO_ROUTINES 0 -#endif - -#ifndef INCLUDE_vTaskPrioritySet - #define INCLUDE_vTaskPrioritySet 0 -#endif - -#ifndef INCLUDE_uxTaskPriorityGet - #define INCLUDE_uxTaskPriorityGet 0 -#endif - -#ifndef INCLUDE_vTaskDelete - #define INCLUDE_vTaskDelete 0 -#endif - -#ifndef INCLUDE_vTaskSuspend - #define INCLUDE_vTaskSuspend 0 -#endif - -#ifndef INCLUDE_vTaskDelayUntil - #define INCLUDE_vTaskDelayUntil 0 -#endif - -#ifndef INCLUDE_vTaskDelay - #define INCLUDE_vTaskDelay 0 -#endif - -#ifndef INCLUDE_xTaskGetIdleTaskHandle - #define INCLUDE_xTaskGetIdleTaskHandle 0 -#endif - -#ifndef INCLUDE_xTaskAbortDelay - #define INCLUDE_xTaskAbortDelay 0 -#endif - -#ifndef INCLUDE_xQueueGetMutexHolder - #define INCLUDE_xQueueGetMutexHolder 0 -#endif - -#ifndef INCLUDE_xSemaphoreGetMutexHolder - #define INCLUDE_xSemaphoreGetMutexHolder INCLUDE_xQueueGetMutexHolder -#endif - -#ifndef INCLUDE_xTaskGetHandle - #define INCLUDE_xTaskGetHandle 0 -#endif - -#ifndef INCLUDE_uxTaskGetStackHighWaterMark - #define INCLUDE_uxTaskGetStackHighWaterMark 0 -#endif - -#ifndef INCLUDE_eTaskGetState - #define INCLUDE_eTaskGetState 0 -#endif - -#ifndef INCLUDE_xTaskResumeFromISR - #define INCLUDE_xTaskResumeFromISR 1 -#endif - -#ifndef INCLUDE_xTimerPendFunctionCall - #define INCLUDE_xTimerPendFunctionCall 0 -#endif - -#ifndef INCLUDE_xTaskGetSchedulerState - #define INCLUDE_xTaskGetSchedulerState 0 -#endif - -#ifndef INCLUDE_xTaskGetCurrentTaskHandle - #define INCLUDE_xTaskGetCurrentTaskHandle 0 -#endif - -#if configUSE_CO_ROUTINES != 0 - #ifndef configMAX_CO_ROUTINE_PRIORITIES - #error configMAX_CO_ROUTINE_PRIORITIES must be greater than or equal to 1. - #endif -#endif - -#ifndef configUSE_DAEMON_TASK_STARTUP_HOOK - #define configUSE_DAEMON_TASK_STARTUP_HOOK 0 -#endif - -#ifndef configUSE_APPLICATION_TASK_TAG - #define configUSE_APPLICATION_TASK_TAG 0 -#endif - -#ifndef configNUM_THREAD_LOCAL_STORAGE_POINTERS - #define configNUM_THREAD_LOCAL_STORAGE_POINTERS 0 -#endif - -#ifndef configUSE_RECURSIVE_MUTEXES - #define configUSE_RECURSIVE_MUTEXES 0 -#endif - -#ifndef configUSE_MUTEXES - #define configUSE_MUTEXES 0 -#endif - -#ifndef configUSE_TIMERS - #define configUSE_TIMERS 0 -#endif - -#ifndef configUSE_COUNTING_SEMAPHORES - #define configUSE_COUNTING_SEMAPHORES 0 -#endif - -#ifndef configUSE_ALTERNATIVE_API - #define configUSE_ALTERNATIVE_API 0 -#endif - -#ifndef portCRITICAL_NESTING_IN_TCB - #define portCRITICAL_NESTING_IN_TCB 0 -#endif - -#ifndef configMAX_TASK_NAME_LEN - #define configMAX_TASK_NAME_LEN 16 -#endif - -#ifndef configIDLE_SHOULD_YIELD - #define configIDLE_SHOULD_YIELD 1 -#endif - -#if configMAX_TASK_NAME_LEN < 1 - #error configMAX_TASK_NAME_LEN must be set to a minimum of 1 in FreeRTOSConfig.h -#endif - -#ifndef configASSERT - #define configASSERT( x ) - #define configASSERT_DEFINED 0 -#else - #define configASSERT_DEFINED 1 -#endif - -/* The timers module relies on xTaskGetSchedulerState(). */ -#if configUSE_TIMERS == 1 - - #ifndef configTIMER_TASK_PRIORITY - #error If configUSE_TIMERS is set to 1 then configTIMER_TASK_PRIORITY must also be defined. - #endif /* configTIMER_TASK_PRIORITY */ - - #ifndef configTIMER_QUEUE_LENGTH - #error If configUSE_TIMERS is set to 1 then configTIMER_QUEUE_LENGTH must also be defined. - #endif /* configTIMER_QUEUE_LENGTH */ - - #ifndef configTIMER_TASK_STACK_DEPTH - #error If configUSE_TIMERS is set to 1 then configTIMER_TASK_STACK_DEPTH must also be defined. - #endif /* configTIMER_TASK_STACK_DEPTH */ - -#endif /* configUSE_TIMERS */ - -#ifndef portSET_INTERRUPT_MASK_FROM_ISR - #define portSET_INTERRUPT_MASK_FROM_ISR() 0 -#endif - -#ifndef portCLEAR_INTERRUPT_MASK_FROM_ISR - #define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusValue ) ( void ) uxSavedStatusValue -#endif - -#ifndef portCLEAN_UP_TCB - #define portCLEAN_UP_TCB( pxTCB ) ( void ) pxTCB -#endif - -#ifndef portPRE_TASK_DELETE_HOOK - #define portPRE_TASK_DELETE_HOOK( pvTaskToDelete, pxYieldPending ) -#endif - -#ifndef portSETUP_TCB - #define portSETUP_TCB( pxTCB ) ( void ) pxTCB -#endif - -#ifndef configQUEUE_REGISTRY_SIZE - #define configQUEUE_REGISTRY_SIZE 0U -#endif - -#if ( configQUEUE_REGISTRY_SIZE < 1 ) - #define vQueueAddToRegistry( xQueue, pcName ) - #define vQueueUnregisterQueue( xQueue ) - #define pcQueueGetName( xQueue ) -#endif - -#ifndef portPOINTER_SIZE_TYPE - #define portPOINTER_SIZE_TYPE uint32_t -#endif - -/* Remove any unused trace macros. */ -#ifndef traceSTART - /* Used to perform any necessary initialisation - for example, open a file - into which trace is to be written. */ - #define traceSTART() -#endif - -#ifndef traceEND - /* Use to close a trace, for example close a file into which trace has been - written. */ - #define traceEND() -#endif - -#ifndef traceTASK_SWITCHED_IN - /* Called after a task has been selected to run. pxCurrentTCB holds a pointer - to the task control block of the selected task. */ - #define traceTASK_SWITCHED_IN() -#endif - -#ifndef traceINCREASE_TICK_COUNT - /* Called before stepping the tick count after waking from tickless idle - sleep. */ - #define traceINCREASE_TICK_COUNT( x ) -#endif - -#ifndef traceLOW_POWER_IDLE_BEGIN - /* Called immediately before entering tickless idle. */ - #define traceLOW_POWER_IDLE_BEGIN() -#endif - -#ifndef traceLOW_POWER_IDLE_END - /* Called when returning to the Idle task after a tickless idle. */ - #define traceLOW_POWER_IDLE_END() -#endif - -#ifndef traceTASK_SWITCHED_OUT - /* Called before a task has been selected to run. pxCurrentTCB holds a pointer - to the task control block of the task being switched out. */ - #define traceTASK_SWITCHED_OUT() -#endif - -#ifndef traceTASK_PRIORITY_INHERIT - /* Called when a task attempts to take a mutex that is already held by a - lower priority task. pxTCBOfMutexHolder is a pointer to the TCB of the task - that holds the mutex. uxInheritedPriority is the priority the mutex holder - will inherit (the priority of the task that is attempting to obtain the - muted. */ - #define traceTASK_PRIORITY_INHERIT( pxTCBOfMutexHolder, uxInheritedPriority ) -#endif - -#ifndef traceTASK_PRIORITY_DISINHERIT - /* Called when a task releases a mutex, the holding of which had resulted in - the task inheriting the priority of a higher priority task. - pxTCBOfMutexHolder is a pointer to the TCB of the task that is releasing the - mutex. uxOriginalPriority is the task's configured (base) priority. */ - #define traceTASK_PRIORITY_DISINHERIT( pxTCBOfMutexHolder, uxOriginalPriority ) -#endif - -#ifndef traceBLOCKING_ON_QUEUE_RECEIVE - /* Task is about to block because it cannot read from a - queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore - upon which the read was attempted. pxCurrentTCB points to the TCB of the - task that attempted the read. */ - #define traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue ) -#endif - -#ifndef traceBLOCKING_ON_QUEUE_SEND - /* Task is about to block because it cannot write to a - queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore - upon which the write was attempted. pxCurrentTCB points to the TCB of the - task that attempted the write. */ - #define traceBLOCKING_ON_QUEUE_SEND( pxQueue ) -#endif - -#ifndef configCHECK_FOR_STACK_OVERFLOW - #define configCHECK_FOR_STACK_OVERFLOW 0 -#endif - -/* The following event macros are embedded in the kernel API calls. */ - -#ifndef traceMOVED_TASK_TO_READY_STATE - #define traceMOVED_TASK_TO_READY_STATE( pxTCB ) -#endif - -#ifndef tracePOST_MOVED_TASK_TO_READY_STATE - #define tracePOST_MOVED_TASK_TO_READY_STATE( pxTCB ) -#endif - -#ifndef traceQUEUE_CREATE - #define traceQUEUE_CREATE( pxNewQueue ) -#endif - -#ifndef traceQUEUE_CREATE_FAILED - #define traceQUEUE_CREATE_FAILED( ucQueueType ) -#endif - -#ifndef traceCREATE_MUTEX - #define traceCREATE_MUTEX( pxNewQueue ) -#endif - -#ifndef traceCREATE_MUTEX_FAILED - #define traceCREATE_MUTEX_FAILED() -#endif - -#ifndef traceGIVE_MUTEX_RECURSIVE - #define traceGIVE_MUTEX_RECURSIVE( pxMutex ) -#endif - -#ifndef traceGIVE_MUTEX_RECURSIVE_FAILED - #define traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex ) -#endif - -#ifndef traceTAKE_MUTEX_RECURSIVE - #define traceTAKE_MUTEX_RECURSIVE( pxMutex ) -#endif - -#ifndef traceTAKE_MUTEX_RECURSIVE_FAILED - #define traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex ) -#endif - -#ifndef traceCREATE_COUNTING_SEMAPHORE - #define traceCREATE_COUNTING_SEMAPHORE() -#endif - -#ifndef traceCREATE_COUNTING_SEMAPHORE_FAILED - #define traceCREATE_COUNTING_SEMAPHORE_FAILED() -#endif - -#ifndef traceQUEUE_SEND - #define traceQUEUE_SEND( pxQueue ) -#endif - -#ifndef traceQUEUE_SEND_FAILED - #define traceQUEUE_SEND_FAILED( pxQueue ) -#endif - -#ifndef traceQUEUE_RECEIVE - #define traceQUEUE_RECEIVE( pxQueue ) -#endif - -#ifndef traceQUEUE_PEEK - #define traceQUEUE_PEEK( pxQueue ) -#endif - -#ifndef traceQUEUE_PEEK_FROM_ISR - #define traceQUEUE_PEEK_FROM_ISR( pxQueue ) -#endif - -#ifndef traceQUEUE_RECEIVE_FAILED - #define traceQUEUE_RECEIVE_FAILED( pxQueue ) -#endif - -#ifndef traceQUEUE_SEND_FROM_ISR - #define traceQUEUE_SEND_FROM_ISR( pxQueue ) -#endif - -#ifndef traceQUEUE_SEND_FROM_ISR_FAILED - #define traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue ) -#endif - -#ifndef traceQUEUE_RECEIVE_FROM_ISR - #define traceQUEUE_RECEIVE_FROM_ISR( pxQueue ) -#endif - -#ifndef traceQUEUE_RECEIVE_FROM_ISR_FAILED - #define traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue ) -#endif - -#ifndef traceQUEUE_PEEK_FROM_ISR_FAILED - #define traceQUEUE_PEEK_FROM_ISR_FAILED( pxQueue ) -#endif - -#ifndef traceQUEUE_DELETE - #define traceQUEUE_DELETE( pxQueue ) -#endif - -#ifndef traceTASK_CREATE - #define traceTASK_CREATE( pxNewTCB ) -#endif - -#ifndef traceTASK_CREATE_FAILED - #define traceTASK_CREATE_FAILED() -#endif - -#ifndef traceTASK_DELETE - #define traceTASK_DELETE( pxTaskToDelete ) -#endif - -#ifndef traceTASK_DELAY_UNTIL - #define traceTASK_DELAY_UNTIL( x ) -#endif - -#ifndef traceTASK_DELAY - #define traceTASK_DELAY() -#endif - -#ifndef traceTASK_PRIORITY_SET - #define traceTASK_PRIORITY_SET( pxTask, uxNewPriority ) -#endif - -#ifndef traceTASK_SUSPEND - #define traceTASK_SUSPEND( pxTaskToSuspend ) -#endif - -#ifndef traceTASK_RESUME - #define traceTASK_RESUME( pxTaskToResume ) -#endif - -#ifndef traceTASK_RESUME_FROM_ISR - #define traceTASK_RESUME_FROM_ISR( pxTaskToResume ) -#endif - -#ifndef traceTASK_INCREMENT_TICK - #define traceTASK_INCREMENT_TICK( xTickCount ) -#endif - -#ifndef traceTIMER_CREATE - #define traceTIMER_CREATE( pxNewTimer ) -#endif - -#ifndef traceTIMER_CREATE_FAILED - #define traceTIMER_CREATE_FAILED() -#endif - -#ifndef traceTIMER_COMMAND_SEND - #define traceTIMER_COMMAND_SEND( xTimer, xMessageID, xMessageValueValue, xReturn ) -#endif - -#ifndef traceTIMER_EXPIRED - #define traceTIMER_EXPIRED( pxTimer ) -#endif - -#ifndef traceTIMER_COMMAND_RECEIVED - #define traceTIMER_COMMAND_RECEIVED( pxTimer, xMessageID, xMessageValue ) -#endif - -#ifndef traceMALLOC - #define traceMALLOC( pvAddress, uiSize ) -#endif - -#ifndef traceFREE - #define traceFREE( pvAddress, uiSize ) -#endif - -#ifndef traceEVENT_GROUP_CREATE - #define traceEVENT_GROUP_CREATE( xEventGroup ) -#endif - -#ifndef traceEVENT_GROUP_CREATE_FAILED - #define traceEVENT_GROUP_CREATE_FAILED() -#endif - -#ifndef traceEVENT_GROUP_SYNC_BLOCK - #define traceEVENT_GROUP_SYNC_BLOCK( xEventGroup, uxBitsToSet, uxBitsToWaitFor ) -#endif - -#ifndef traceEVENT_GROUP_SYNC_END - #define traceEVENT_GROUP_SYNC_END( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTimeoutOccurred ) ( void ) xTimeoutOccurred -#endif - -#ifndef traceEVENT_GROUP_WAIT_BITS_BLOCK - #define traceEVENT_GROUP_WAIT_BITS_BLOCK( xEventGroup, uxBitsToWaitFor ) -#endif - -#ifndef traceEVENT_GROUP_WAIT_BITS_END - #define traceEVENT_GROUP_WAIT_BITS_END( xEventGroup, uxBitsToWaitFor, xTimeoutOccurred ) ( void ) xTimeoutOccurred -#endif - -#ifndef traceEVENT_GROUP_CLEAR_BITS - #define traceEVENT_GROUP_CLEAR_BITS( xEventGroup, uxBitsToClear ) -#endif - -#ifndef traceEVENT_GROUP_CLEAR_BITS_FROM_ISR - #define traceEVENT_GROUP_CLEAR_BITS_FROM_ISR( xEventGroup, uxBitsToClear ) -#endif - -#ifndef traceEVENT_GROUP_SET_BITS - #define traceEVENT_GROUP_SET_BITS( xEventGroup, uxBitsToSet ) -#endif - -#ifndef traceEVENT_GROUP_SET_BITS_FROM_ISR - #define traceEVENT_GROUP_SET_BITS_FROM_ISR( xEventGroup, uxBitsToSet ) -#endif - -#ifndef traceEVENT_GROUP_DELETE - #define traceEVENT_GROUP_DELETE( xEventGroup ) -#endif - -#ifndef tracePEND_FUNC_CALL - #define tracePEND_FUNC_CALL(xFunctionToPend, pvParameter1, ulParameter2, ret) -#endif - -#ifndef tracePEND_FUNC_CALL_FROM_ISR - #define tracePEND_FUNC_CALL_FROM_ISR(xFunctionToPend, pvParameter1, ulParameter2, ret) -#endif - -#ifndef traceQUEUE_REGISTRY_ADD - #define traceQUEUE_REGISTRY_ADD(xQueue, pcQueueName) -#endif - -#ifndef traceTASK_NOTIFY_TAKE_BLOCK - #define traceTASK_NOTIFY_TAKE_BLOCK() -#endif - -#ifndef traceTASK_NOTIFY_TAKE - #define traceTASK_NOTIFY_TAKE() -#endif - -#ifndef traceTASK_NOTIFY_WAIT_BLOCK - #define traceTASK_NOTIFY_WAIT_BLOCK() -#endif - -#ifndef traceTASK_NOTIFY_WAIT - #define traceTASK_NOTIFY_WAIT() -#endif - -#ifndef traceTASK_NOTIFY - #define traceTASK_NOTIFY() -#endif - -#ifndef traceTASK_NOTIFY_FROM_ISR - #define traceTASK_NOTIFY_FROM_ISR() -#endif - -#ifndef traceTASK_NOTIFY_GIVE_FROM_ISR - #define traceTASK_NOTIFY_GIVE_FROM_ISR() -#endif - -#ifndef configGENERATE_RUN_TIME_STATS - #define configGENERATE_RUN_TIME_STATS 0 -#endif - -#if ( configGENERATE_RUN_TIME_STATS == 1 ) - - #ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS - #error If configGENERATE_RUN_TIME_STATS is defined then portCONFIGURE_TIMER_FOR_RUN_TIME_STATS must also be defined. portCONFIGURE_TIMER_FOR_RUN_TIME_STATS should call a port layer function to setup a peripheral timer/counter that can then be used as the run time counter time base. - #endif /* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS */ - - #ifndef portGET_RUN_TIME_COUNTER_VALUE - #ifndef portALT_GET_RUN_TIME_COUNTER_VALUE - #error If configGENERATE_RUN_TIME_STATS is defined then either portGET_RUN_TIME_COUNTER_VALUE or portALT_GET_RUN_TIME_COUNTER_VALUE must also be defined. See the examples provided and the FreeRTOS web site for more information. - #endif /* portALT_GET_RUN_TIME_COUNTER_VALUE */ - #endif /* portGET_RUN_TIME_COUNTER_VALUE */ - -#endif /* configGENERATE_RUN_TIME_STATS */ - -#ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS - #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() -#endif - -#ifndef configUSE_MALLOC_FAILED_HOOK - #define configUSE_MALLOC_FAILED_HOOK 0 -#endif - -#ifndef portPRIVILEGE_BIT - #define portPRIVILEGE_BIT ( ( UBaseType_t ) 0x00 ) -#endif - -#ifndef portYIELD_WITHIN_API - #define portYIELD_WITHIN_API portYIELD -#endif - -#ifndef portSUPPRESS_TICKS_AND_SLEEP - #define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime ) -#endif - -#ifndef configEXPECTED_IDLE_TIME_BEFORE_SLEEP - #define configEXPECTED_IDLE_TIME_BEFORE_SLEEP 2 -#endif - -#if configEXPECTED_IDLE_TIME_BEFORE_SLEEP < 2 - #error configEXPECTED_IDLE_TIME_BEFORE_SLEEP must not be less than 2 -#endif - -#ifndef configUSE_TICKLESS_IDLE - #define configUSE_TICKLESS_IDLE 0 -#endif - -#ifndef configPRE_SLEEP_PROCESSING - #define configPRE_SLEEP_PROCESSING( x ) -#endif - -#ifndef configPOST_SLEEP_PROCESSING - #define configPOST_SLEEP_PROCESSING( x ) -#endif - -#ifndef configUSE_QUEUE_SETS - #define configUSE_QUEUE_SETS 0 -#endif - -#ifndef portTASK_USES_FLOATING_POINT - #define portTASK_USES_FLOATING_POINT() -#endif - -#ifndef configUSE_TIME_SLICING - #define configUSE_TIME_SLICING 1 -#endif - -#ifndef configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS - #define configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS 0 -#endif - -#ifndef configUSE_STATS_FORMATTING_FUNCTIONS - #define configUSE_STATS_FORMATTING_FUNCTIONS 0 -#endif - -#ifndef portASSERT_IF_INTERRUPT_PRIORITY_INVALID - #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() -#endif - -#ifndef configUSE_TRACE_FACILITY - #define configUSE_TRACE_FACILITY 0 -#endif - -#ifndef mtCOVERAGE_TEST_MARKER - #define mtCOVERAGE_TEST_MARKER() -#endif - -#ifndef mtCOVERAGE_TEST_DELAY - #define mtCOVERAGE_TEST_DELAY() -#endif - -#ifndef portASSERT_IF_IN_ISR - #define portASSERT_IF_IN_ISR() -#endif - -#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION - #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 -#endif - -#ifndef configAPPLICATION_ALLOCATED_HEAP - #define configAPPLICATION_ALLOCATED_HEAP 0 -#endif - -#ifndef configUSE_TASK_NOTIFICATIONS - #define configUSE_TASK_NOTIFICATIONS 1 -#endif - -#ifndef portTICK_TYPE_IS_ATOMIC - #define portTICK_TYPE_IS_ATOMIC 0 -#endif - -#ifndef configSUPPORT_STATIC_ALLOCATION - /* Defaults to 0 for backward compatibility. */ - #define configSUPPORT_STATIC_ALLOCATION 0 -#endif - -#ifndef configSUPPORT_DYNAMIC_ALLOCATION - /* Defaults to 1 for backward compatibility. */ - #define configSUPPORT_DYNAMIC_ALLOCATION 1 -#endif - -/* Sanity check the configuration. */ -#if( configUSE_TICKLESS_IDLE != 0 ) - #if( INCLUDE_vTaskSuspend != 1 ) - #error INCLUDE_vTaskSuspend must be set to 1 if configUSE_TICKLESS_IDLE is not set to 0 - #endif /* INCLUDE_vTaskSuspend */ -#endif /* configUSE_TICKLESS_IDLE */ - -#if( ( configSUPPORT_STATIC_ALLOCATION == 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 0 ) ) - #error configSUPPORT_STATIC_ALLOCATION and configSUPPORT_DYNAMIC_ALLOCATION cannot both be 0, but can both be 1. -#endif - -#if( ( configUSE_RECURSIVE_MUTEXES == 1 ) && ( configUSE_MUTEXES != 1 ) ) - #error configUSE_MUTEXES must be set to 1 to use recursive mutexes -#endif - -#if( portTICK_TYPE_IS_ATOMIC == 0 ) - /* Either variables of tick type cannot be read atomically, or - portTICK_TYPE_IS_ATOMIC was not set - map the critical sections used when - the tick count is returned to the standard critical section macros. */ - #define portTICK_TYPE_ENTER_CRITICAL() portENTER_CRITICAL() - #define portTICK_TYPE_EXIT_CRITICAL() portEXIT_CRITICAL() - #define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR() - #define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( ( x ) ) -#else - /* The tick type can be read atomically, so critical sections used when the - tick count is returned can be defined away. */ - #define portTICK_TYPE_ENTER_CRITICAL() - #define portTICK_TYPE_EXIT_CRITICAL() - #define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR() 0 - #define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x ) ( void ) x -#endif - -/* Definitions to allow backward compatibility with FreeRTOS versions prior to -V8 if desired. */ -#ifndef configENABLE_BACKWARD_COMPATIBILITY - #define configENABLE_BACKWARD_COMPATIBILITY 1 -#endif - -#if configENABLE_BACKWARD_COMPATIBILITY == 1 - #define eTaskStateGet eTaskGetState - #define portTickType TickType_t - #define xTaskHandle TaskHandle_t - #define xQueueHandle QueueHandle_t - #define xSemaphoreHandle SemaphoreHandle_t - #define xQueueSetHandle QueueSetHandle_t - #define xQueueSetMemberHandle QueueSetMemberHandle_t - #define xTimeOutType TimeOut_t - #define xMemoryRegion MemoryRegion_t - #define xTaskParameters TaskParameters_t - #define xTaskStatusType TaskStatus_t - #define xTimerHandle TimerHandle_t - #define xCoRoutineHandle CoRoutineHandle_t - #define pdTASK_HOOK_CODE TaskHookFunction_t - #define portTICK_RATE_MS portTICK_PERIOD_MS - #define pcTaskGetTaskName pcTaskGetName - #define pcTimerGetTimerName pcTimerGetName - #define pcQueueGetQueueName pcQueueGetName - #define vTaskGetTaskInfo vTaskGetInfo - - /* Backward compatibility within the scheduler code only - these definitions - are not really required but are included for completeness. */ - #define tmrTIMER_CALLBACK TimerCallbackFunction_t - #define pdTASK_CODE TaskFunction_t - #define xListItem ListItem_t - #define xList List_t -#endif /* configENABLE_BACKWARD_COMPATIBILITY */ - -#if( configUSE_ALTERNATIVE_API != 0 ) - #error The alternative API was deprecated some time ago, and was removed in FreeRTOS V9.0 0 -#endif - -/* Set configUSE_TASK_FPU_SUPPORT to 0 to omit floating point support even -if floating point hardware is otherwise supported by the FreeRTOS port in use. -This constant is not supported by all FreeRTOS ports that include floating -point support. */ -#ifndef configUSE_TASK_FPU_SUPPORT - #define configUSE_TASK_FPU_SUPPORT 1 -#endif - -/* - * In line with software engineering best practice, FreeRTOS implements a strict - * data hiding policy, so the real structures used by FreeRTOS to maintain the - * state of tasks, queues, semaphores, etc. are not accessible to the application - * code. However, if the application writer wants to statically allocate such - * an object then the size of the object needs to be know. Dummy structures - * that are guaranteed to have the same size and alignment requirements of the - * real objects are used for this purpose. The dummy list and list item - * structures below are used for inclusion in such a dummy structure. - */ -struct xSTATIC_LIST_ITEM -{ - TickType_t xDummy1; - void *pvDummy2[ 4 ]; -}; -typedef struct xSTATIC_LIST_ITEM StaticListItem_t; - -/* See the comments above the struct xSTATIC_LIST_ITEM definition. */ -struct xSTATIC_MINI_LIST_ITEM -{ - TickType_t xDummy1; - void *pvDummy2[ 2 ]; -}; -typedef struct xSTATIC_MINI_LIST_ITEM StaticMiniListItem_t; - -/* See the comments above the struct xSTATIC_LIST_ITEM definition. */ -typedef struct xSTATIC_LIST -{ - UBaseType_t uxDummy1; - void *pvDummy2; - StaticMiniListItem_t xDummy3; -} StaticList_t; - -/* - * In line with software engineering best practice, especially when supplying a - * library that is likely to change in future versions, FreeRTOS implements a - * strict data hiding policy. This means the Task structure used internally by - * FreeRTOS is not accessible to application code. However, if the application - * writer wants to statically allocate the memory required to create a task then - * the size of the task object needs to be know. The StaticTask_t structure - * below is provided for this purpose. Its sizes and alignment requirements are - * guaranteed to match those of the genuine structure, no matter which - * architecture is being used, and no matter how the values in FreeRTOSConfig.h - * are set. Its contents are somewhat obfuscated in the hope users will - * recognise that it would be unwise to make direct use of the structure members. - */ -typedef struct xSTATIC_TCB -{ - void *pxDummy1; - #if ( portUSING_MPU_WRAPPERS == 1 ) - xMPU_SETTINGS xDummy2; - #endif - StaticListItem_t xDummy3[ 2 ]; - UBaseType_t uxDummy5; - void *pxDummy6; - uint8_t ucDummy7[ configMAX_TASK_NAME_LEN ]; - #if ( portSTACK_GROWTH > 0 ) - void *pxDummy8; - #endif - #if ( portCRITICAL_NESTING_IN_TCB == 1 ) - UBaseType_t uxDummy9; - #endif - #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy10[ 2 ]; - #endif - #if ( configUSE_MUTEXES == 1 ) - UBaseType_t uxDummy12[ 2 ]; - #endif - #if ( configUSE_APPLICATION_TASK_TAG == 1 ) - void *pxDummy14; - #endif - #if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 ) - void *pvDummy15[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ]; - #endif - #if ( configGENERATE_RUN_TIME_STATS == 1 ) - uint32_t ulDummy16; - #endif - #if ( configUSE_NEWLIB_REENTRANT == 1 ) - struct _reent xDummy17; - #endif - #if ( configUSE_TASK_NOTIFICATIONS == 1 ) - uint32_t ulDummy18; - uint8_t ucDummy19; - #endif - #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - uint8_t uxDummy20; - #endif - -} StaticTask_t; - -/* - * In line with software engineering best practice, especially when supplying a - * library that is likely to change in future versions, FreeRTOS implements a - * strict data hiding policy. This means the Queue structure used internally by - * FreeRTOS is not accessible to application code. However, if the application - * writer wants to statically allocate the memory required to create a queue - * then the size of the queue object needs to be know. The StaticQueue_t - * structure below is provided for this purpose. Its sizes and alignment - * requirements are guaranteed to match those of the genuine structure, no - * matter which architecture is being used, and no matter how the values in - * FreeRTOSConfig.h are set. Its contents are somewhat obfuscated in the hope - * users will recognise that it would be unwise to make direct use of the - * structure members. - */ -typedef struct xSTATIC_QUEUE -{ - void *pvDummy1[ 3 ]; - - union - { - void *pvDummy2; - UBaseType_t uxDummy2; - } u; - - StaticList_t xDummy3[ 2 ]; - UBaseType_t uxDummy4[ 3 ]; - uint8_t ucDummy5[ 2 ]; - - #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - uint8_t ucDummy6; - #endif - - #if ( configUSE_QUEUE_SETS == 1 ) - void *pvDummy7; - #endif - - #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy8; - uint8_t ucDummy9; - #endif - -} StaticQueue_t; -typedef StaticQueue_t StaticSemaphore_t; - -/* - * In line with software engineering best practice, especially when supplying a - * library that is likely to change in future versions, FreeRTOS implements a - * strict data hiding policy. This means the event group structure used - * internally by FreeRTOS is not accessible to application code. However, if - * the application writer wants to statically allocate the memory required to - * create an event group then the size of the event group object needs to be - * know. The StaticEventGroup_t structure below is provided for this purpose. - * Its sizes and alignment requirements are guaranteed to match those of the - * genuine structure, no matter which architecture is being used, and no matter - * how the values in FreeRTOSConfig.h are set. Its contents are somewhat - * obfuscated in the hope users will recognise that it would be unwise to make - * direct use of the structure members. - */ -typedef struct xSTATIC_EVENT_GROUP -{ - TickType_t xDummy1; - StaticList_t xDummy2; - - #if( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy3; - #endif - - #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - uint8_t ucDummy4; - #endif - -} StaticEventGroup_t; - -/* - * In line with software engineering best practice, especially when supplying a - * library that is likely to change in future versions, FreeRTOS implements a - * strict data hiding policy. This means the software timer structure used - * internally by FreeRTOS is not accessible to application code. However, if - * the application writer wants to statically allocate the memory required to - * create a software timer then the size of the queue object needs to be know. - * The StaticTimer_t structure below is provided for this purpose. Its sizes - * and alignment requirements are guaranteed to match those of the genuine - * structure, no matter which architecture is being used, and no matter how the - * values in FreeRTOSConfig.h are set. Its contents are somewhat obfuscated in - * the hope users will recognise that it would be unwise to make direct use of - * the structure members. - */ -typedef struct xSTATIC_TIMER -{ - void *pvDummy1; - StaticListItem_t xDummy2; - TickType_t xDummy3; - UBaseType_t uxDummy4; - void *pvDummy5[ 2 ]; - #if( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy6; - #endif - - #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - uint8_t ucDummy7; - #endif - -} StaticTimer_t; - -#ifdef __cplusplus -} -#endif - -#endif /* INC_FREERTOS_H */ - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/StackMacros.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/StackMacros.h deleted file mode 100644 index 13c6b82..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/StackMacros.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -#ifndef STACK_MACROS_H -#define STACK_MACROS_H - -/* - * Call the stack overflow hook function if the stack of the task being swapped - * out is currently overflowed, or looks like it might have overflowed in the - * past. - * - * Setting configCHECK_FOR_STACK_OVERFLOW to 1 will cause the macro to check - * the current stack state only - comparing the current top of stack value to - * the stack limit. Setting configCHECK_FOR_STACK_OVERFLOW to greater than 1 - * will also cause the last few stack bytes to be checked to ensure the value - * to which the bytes were set when the task was created have not been - * overwritten. Note this second test does not guarantee that an overflowed - * stack will always be recognised. - */ - -/*-----------------------------------------------------------*/ - -#if( ( configCHECK_FOR_STACK_OVERFLOW == 1 ) && ( portSTACK_GROWTH < 0 ) ) - - /* Only the current stack state is to be checked. */ - #define taskCHECK_FOR_STACK_OVERFLOW() \ - { \ - /* Is the currently saved stack pointer within the stack limit? */ \ - if( pxCurrentTCB->pxTopOfStack <= pxCurrentTCB->pxStack ) \ - { \ - vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \ - } \ - } - -#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */ -/*-----------------------------------------------------------*/ - -#if( ( configCHECK_FOR_STACK_OVERFLOW == 1 ) && ( portSTACK_GROWTH > 0 ) ) - - /* Only the current stack state is to be checked. */ - #define taskCHECK_FOR_STACK_OVERFLOW() \ - { \ - \ - /* Is the currently saved stack pointer within the stack limit? */ \ - if( pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack ) \ - { \ - vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \ - } \ - } - -#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */ -/*-----------------------------------------------------------*/ - -#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH < 0 ) ) - - #define taskCHECK_FOR_STACK_OVERFLOW() \ - { \ - const uint32_t * const pulStack = ( uint32_t * ) pxCurrentTCB->pxStack; \ - const uint32_t ulCheckValue = ( uint32_t ) 0xa5a5a5a5; \ - \ - if( ( pulStack[ 0 ] != ulCheckValue ) || \ - ( pulStack[ 1 ] != ulCheckValue ) || \ - ( pulStack[ 2 ] != ulCheckValue ) || \ - ( pulStack[ 3 ] != ulCheckValue ) ) \ - { \ - vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \ - } \ - } - -#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */ -/*-----------------------------------------------------------*/ - -#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH > 0 ) ) - - #define taskCHECK_FOR_STACK_OVERFLOW() \ - { \ - int8_t *pcEndOfStack = ( int8_t * ) pxCurrentTCB->pxEndOfStack; \ - static const uint8_t ucExpectedStackBytes[] = { tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ - tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ - tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ - tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ - tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE }; \ - \ - \ - pcEndOfStack -= sizeof( ucExpectedStackBytes ); \ - \ - /* Has the extremity of the task stack ever been written over? */ \ - if( memcmp( ( void * ) pcEndOfStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 ) \ - { \ - vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \ - } \ - } - -#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */ -/*-----------------------------------------------------------*/ - -/* Remove stack overflow macro if not being used. */ -#ifndef taskCHECK_FOR_STACK_OVERFLOW - #define taskCHECK_FOR_STACK_OVERFLOW() -#endif - - - -#endif /* STACK_MACROS_H */ - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/croutine.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/croutine.h deleted file mode 100644 index 4f003a0..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/croutine.h +++ /dev/null @@ -1,762 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -#ifndef CO_ROUTINE_H -#define CO_ROUTINE_H - -#ifndef INC_FREERTOS_H - #error "include FreeRTOS.h must appear in source files before include croutine.h" -#endif - -#include "list.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Used to hide the implementation of the co-routine control block. The -control block structure however has to be included in the header due to -the macro implementation of the co-routine functionality. */ -typedef void * CoRoutineHandle_t; - -/* Defines the prototype to which co-routine functions must conform. */ -typedef void (*crCOROUTINE_CODE)( CoRoutineHandle_t, UBaseType_t ); - -typedef struct corCoRoutineControlBlock -{ - crCOROUTINE_CODE pxCoRoutineFunction; - ListItem_t xGenericListItem; /*< List item used to place the CRCB in ready and blocked queues. */ - ListItem_t xEventListItem; /*< List item used to place the CRCB in event lists. */ - UBaseType_t uxPriority; /*< The priority of the co-routine in relation to other co-routines. */ - UBaseType_t uxIndex; /*< Used to distinguish between co-routines when multiple co-routines use the same co-routine function. */ - uint16_t uxState; /*< Used internally by the co-routine implementation. */ -} CRCB_t; /* Co-routine control block. Note must be identical in size down to uxPriority with TCB_t. */ - -/** - * croutine. h - *
- BaseType_t xCoRoutineCreate(
-                                 crCOROUTINE_CODE pxCoRoutineCode,
-                                 UBaseType_t uxPriority,
-                                 UBaseType_t uxIndex
-                               );
- * - * Create a new co-routine and add it to the list of co-routines that are - * ready to run. - * - * @param pxCoRoutineCode Pointer to the co-routine function. Co-routine - * functions require special syntax - see the co-routine section of the WEB - * documentation for more information. - * - * @param uxPriority The priority with respect to other co-routines at which - * the co-routine will run. - * - * @param uxIndex Used to distinguish between different co-routines that - * execute the same function. See the example below and the co-routine section - * of the WEB documentation for further information. - * - * @return pdPASS if the co-routine was successfully created and added to a ready - * list, otherwise an error code defined with ProjDefs.h. - * - * Example usage: -
- // Co-routine to be created.
- void vFlashCoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
- {
- // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- // This may not be necessary for const variables.
- static const char cLedToFlash[ 2 ] = { 5, 6 };
- static const TickType_t uxFlashRates[ 2 ] = { 200, 400 };
-
-     // Must start every co-routine with a call to crSTART();
-     crSTART( xHandle );
-
-     for( ;; )
-     {
-         // This co-routine just delays for a fixed period, then toggles
-         // an LED.  Two co-routines are created using this function, so
-         // the uxIndex parameter is used to tell the co-routine which
-         // LED to flash and how int32_t to delay.  This assumes xQueue has
-         // already been created.
-         vParTestToggleLED( cLedToFlash[ uxIndex ] );
-         crDELAY( xHandle, uxFlashRates[ uxIndex ] );
-     }
-
-     // Must end every co-routine with a call to crEND();
-     crEND();
- }
-
- // Function that creates two co-routines.
- void vOtherFunction( void )
- {
- uint8_t ucParameterToPass;
- TaskHandle_t xHandle;
-
-     // Create two co-routines at priority 0.  The first is given index 0
-     // so (from the code above) toggles LED 5 every 200 ticks.  The second
-     // is given index 1 so toggles LED 6 every 400 ticks.
-     for( uxIndex = 0; uxIndex < 2; uxIndex++ )
-     {
-         xCoRoutineCreate( vFlashCoRoutine, 0, uxIndex );
-     }
- }
-   
- * \defgroup xCoRoutineCreate xCoRoutineCreate - * \ingroup Tasks - */ -BaseType_t xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode, UBaseType_t uxPriority, UBaseType_t uxIndex ); - - -/** - * croutine. h - *
- void vCoRoutineSchedule( void );
- * - * Run a co-routine. - * - * vCoRoutineSchedule() executes the highest priority co-routine that is able - * to run. The co-routine will execute until it either blocks, yields or is - * preempted by a task. Co-routines execute cooperatively so one - * co-routine cannot be preempted by another, but can be preempted by a task. - * - * If an application comprises of both tasks and co-routines then - * vCoRoutineSchedule should be called from the idle task (in an idle task - * hook). - * - * Example usage: -
- // This idle task hook will schedule a co-routine each time it is called.
- // The rest of the idle task will execute between co-routine calls.
- void vApplicationIdleHook( void )
- {
-	vCoRoutineSchedule();
- }
-
- // Alternatively, if you do not require any other part of the idle task to
- // execute, the idle task hook can call vCoRoutineScheduler() within an
- // infinite loop.
- void vApplicationIdleHook( void )
- {
-    for( ;; )
-    {
-        vCoRoutineSchedule();
-    }
- }
- 
- * \defgroup vCoRoutineSchedule vCoRoutineSchedule - * \ingroup Tasks - */ -void vCoRoutineSchedule( void ); - -/** - * croutine. h - *
- crSTART( CoRoutineHandle_t xHandle );
- * - * This macro MUST always be called at the start of a co-routine function. - * - * Example usage: -
- // Co-routine to be created.
- void vACoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
- {
- // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- static int32_t ulAVariable;
-
-     // Must start every co-routine with a call to crSTART();
-     crSTART( xHandle );
-
-     for( ;; )
-     {
-          // Co-routine functionality goes here.
-     }
-
-     // Must end every co-routine with a call to crEND();
-     crEND();
- }
- * \defgroup crSTART crSTART - * \ingroup Tasks - */ -#define crSTART( pxCRCB ) switch( ( ( CRCB_t * )( pxCRCB ) )->uxState ) { case 0: - -/** - * croutine. h - *
- crEND();
- * - * This macro MUST always be called at the end of a co-routine function. - * - * Example usage: -
- // Co-routine to be created.
- void vACoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
- {
- // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- static int32_t ulAVariable;
-
-     // Must start every co-routine with a call to crSTART();
-     crSTART( xHandle );
-
-     for( ;; )
-     {
-          // Co-routine functionality goes here.
-     }
-
-     // Must end every co-routine with a call to crEND();
-     crEND();
- }
- * \defgroup crSTART crSTART - * \ingroup Tasks - */ -#define crEND() } - -/* - * These macros are intended for internal use by the co-routine implementation - * only. The macros should not be used directly by application writers. - */ -#define crSET_STATE0( xHandle ) ( ( CRCB_t * )( xHandle ) )->uxState = (__LINE__ * 2); return; case (__LINE__ * 2): -#define crSET_STATE1( xHandle ) ( ( CRCB_t * )( xHandle ) )->uxState = ((__LINE__ * 2)+1); return; case ((__LINE__ * 2)+1): - -/** - * croutine. h - *
- crDELAY( CoRoutineHandle_t xHandle, TickType_t xTicksToDelay );
- * - * Delay a co-routine for a fixed period of time. - * - * crDELAY can only be called from the co-routine function itself - not - * from within a function called by the co-routine function. This is because - * co-routines do not maintain their own stack. - * - * @param xHandle The handle of the co-routine to delay. This is the xHandle - * parameter of the co-routine function. - * - * @param xTickToDelay The number of ticks that the co-routine should delay - * for. The actual amount of time this equates to is defined by - * configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant portTICK_PERIOD_MS - * can be used to convert ticks to milliseconds. - * - * Example usage: -
- // Co-routine to be created.
- void vACoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
- {
- // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- // This may not be necessary for const variables.
- // We are to delay for 200ms.
- static const xTickType xDelayTime = 200 / portTICK_PERIOD_MS;
-
-     // Must start every co-routine with a call to crSTART();
-     crSTART( xHandle );
-
-     for( ;; )
-     {
-        // Delay for 200ms.
-        crDELAY( xHandle, xDelayTime );
-
-        // Do something here.
-     }
-
-     // Must end every co-routine with a call to crEND();
-     crEND();
- }
- * \defgroup crDELAY crDELAY - * \ingroup Tasks - */ -#define crDELAY( xHandle, xTicksToDelay ) \ - if( ( xTicksToDelay ) > 0 ) \ - { \ - vCoRoutineAddToDelayedList( ( xTicksToDelay ), NULL ); \ - } \ - crSET_STATE0( ( xHandle ) ); - -/** - *
- crQUEUE_SEND(
-                  CoRoutineHandle_t xHandle,
-                  QueueHandle_t pxQueue,
-                  void *pvItemToQueue,
-                  TickType_t xTicksToWait,
-                  BaseType_t *pxResult
-             )
- * - * The macro's crQUEUE_SEND() and crQUEUE_RECEIVE() are the co-routine - * equivalent to the xQueueSend() and xQueueReceive() functions used by tasks. - * - * crQUEUE_SEND and crQUEUE_RECEIVE can only be used from a co-routine whereas - * xQueueSend() and xQueueReceive() can only be used from tasks. - * - * crQUEUE_SEND can only be called from the co-routine function itself - not - * from within a function called by the co-routine function. This is because - * co-routines do not maintain their own stack. - * - * See the co-routine section of the WEB documentation for information on - * passing data between tasks and co-routines and between ISR's and - * co-routines. - * - * @param xHandle The handle of the calling co-routine. This is the xHandle - * parameter of the co-routine function. - * - * @param pxQueue The handle of the queue on which the data will be posted. - * The handle is obtained as the return value when the queue is created using - * the xQueueCreate() API function. - * - * @param pvItemToQueue A pointer to the data being posted onto the queue. - * The number of bytes of each queued item is specified when the queue is - * created. This number of bytes is copied from pvItemToQueue into the queue - * itself. - * - * @param xTickToDelay The number of ticks that the co-routine should block - * to wait for space to become available on the queue, should space not be - * available immediately. The actual amount of time this equates to is defined - * by configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant - * portTICK_PERIOD_MS can be used to convert ticks to milliseconds (see example - * below). - * - * @param pxResult The variable pointed to by pxResult will be set to pdPASS if - * data was successfully posted onto the queue, otherwise it will be set to an - * error defined within ProjDefs.h. - * - * Example usage: -
- // Co-routine function that blocks for a fixed period then posts a number onto
- // a queue.
- static void prvCoRoutineFlashTask( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
- {
- // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- static BaseType_t xNumberToPost = 0;
- static BaseType_t xResult;
-
-    // Co-routines must begin with a call to crSTART().
-    crSTART( xHandle );
-
-    for( ;; )
-    {
-        // This assumes the queue has already been created.
-        crQUEUE_SEND( xHandle, xCoRoutineQueue, &xNumberToPost, NO_DELAY, &xResult );
-
-        if( xResult != pdPASS )
-        {
-            // The message was not posted!
-        }
-
-        // Increment the number to be posted onto the queue.
-        xNumberToPost++;
-
-        // Delay for 100 ticks.
-        crDELAY( xHandle, 100 );
-    }
-
-    // Co-routines must end with a call to crEND().
-    crEND();
- }
- * \defgroup crQUEUE_SEND crQUEUE_SEND - * \ingroup Tasks - */ -#define crQUEUE_SEND( xHandle, pxQueue, pvItemToQueue, xTicksToWait, pxResult ) \ -{ \ - *( pxResult ) = xQueueCRSend( ( pxQueue) , ( pvItemToQueue) , ( xTicksToWait ) ); \ - if( *( pxResult ) == errQUEUE_BLOCKED ) \ - { \ - crSET_STATE0( ( xHandle ) ); \ - *pxResult = xQueueCRSend( ( pxQueue ), ( pvItemToQueue ), 0 ); \ - } \ - if( *pxResult == errQUEUE_YIELD ) \ - { \ - crSET_STATE1( ( xHandle ) ); \ - *pxResult = pdPASS; \ - } \ -} - -/** - * croutine. h - *
-  crQUEUE_RECEIVE(
-                     CoRoutineHandle_t xHandle,
-                     QueueHandle_t pxQueue,
-                     void *pvBuffer,
-                     TickType_t xTicksToWait,
-                     BaseType_t *pxResult
-                 )
- * - * The macro's crQUEUE_SEND() and crQUEUE_RECEIVE() are the co-routine - * equivalent to the xQueueSend() and xQueueReceive() functions used by tasks. - * - * crQUEUE_SEND and crQUEUE_RECEIVE can only be used from a co-routine whereas - * xQueueSend() and xQueueReceive() can only be used from tasks. - * - * crQUEUE_RECEIVE can only be called from the co-routine function itself - not - * from within a function called by the co-routine function. This is because - * co-routines do not maintain their own stack. - * - * See the co-routine section of the WEB documentation for information on - * passing data between tasks and co-routines and between ISR's and - * co-routines. - * - * @param xHandle The handle of the calling co-routine. This is the xHandle - * parameter of the co-routine function. - * - * @param pxQueue The handle of the queue from which the data will be received. - * The handle is obtained as the return value when the queue is created using - * the xQueueCreate() API function. - * - * @param pvBuffer The buffer into which the received item is to be copied. - * The number of bytes of each queued item is specified when the queue is - * created. This number of bytes is copied into pvBuffer. - * - * @param xTickToDelay The number of ticks that the co-routine should block - * to wait for data to become available from the queue, should data not be - * available immediately. The actual amount of time this equates to is defined - * by configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant - * portTICK_PERIOD_MS can be used to convert ticks to milliseconds (see the - * crQUEUE_SEND example). - * - * @param pxResult The variable pointed to by pxResult will be set to pdPASS if - * data was successfully retrieved from the queue, otherwise it will be set to - * an error code as defined within ProjDefs.h. - * - * Example usage: -
- // A co-routine receives the number of an LED to flash from a queue.  It
- // blocks on the queue until the number is received.
- static void prvCoRoutineFlashWorkTask( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
- {
- // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- static BaseType_t xResult;
- static UBaseType_t uxLEDToFlash;
-
-    // All co-routines must start with a call to crSTART().
-    crSTART( xHandle );
-
-    for( ;; )
-    {
-        // Wait for data to become available on the queue.
-        crQUEUE_RECEIVE( xHandle, xCoRoutineQueue, &uxLEDToFlash, portMAX_DELAY, &xResult );
-
-        if( xResult == pdPASS )
-        {
-            // We received the LED to flash - flash it!
-            vParTestToggleLED( uxLEDToFlash );
-        }
-    }
-
-    crEND();
- }
- * \defgroup crQUEUE_RECEIVE crQUEUE_RECEIVE - * \ingroup Tasks - */ -#define crQUEUE_RECEIVE( xHandle, pxQueue, pvBuffer, xTicksToWait, pxResult ) \ -{ \ - *( pxResult ) = xQueueCRReceive( ( pxQueue) , ( pvBuffer ), ( xTicksToWait ) ); \ - if( *( pxResult ) == errQUEUE_BLOCKED ) \ - { \ - crSET_STATE0( ( xHandle ) ); \ - *( pxResult ) = xQueueCRReceive( ( pxQueue) , ( pvBuffer ), 0 ); \ - } \ - if( *( pxResult ) == errQUEUE_YIELD ) \ - { \ - crSET_STATE1( ( xHandle ) ); \ - *( pxResult ) = pdPASS; \ - } \ -} - -/** - * croutine. h - *
-  crQUEUE_SEND_FROM_ISR(
-                            QueueHandle_t pxQueue,
-                            void *pvItemToQueue,
-                            BaseType_t xCoRoutinePreviouslyWoken
-                       )
- * - * The macro's crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() are the - * co-routine equivalent to the xQueueSendFromISR() and xQueueReceiveFromISR() - * functions used by tasks. - * - * crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() can only be used to - * pass data between a co-routine and and ISR, whereas xQueueSendFromISR() and - * xQueueReceiveFromISR() can only be used to pass data between a task and and - * ISR. - * - * crQUEUE_SEND_FROM_ISR can only be called from an ISR to send data to a queue - * that is being used from within a co-routine. - * - * See the co-routine section of the WEB documentation for information on - * passing data between tasks and co-routines and between ISR's and - * co-routines. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param xCoRoutinePreviouslyWoken This is included so an ISR can post onto - * the same queue multiple times from a single interrupt. The first call - * should always pass in pdFALSE. Subsequent calls should pass in - * the value returned from the previous call. - * - * @return pdTRUE if a co-routine was woken by posting onto the queue. This is - * used by the ISR to determine if a context switch may be required following - * the ISR. - * - * Example usage: -
- // A co-routine that blocks on a queue waiting for characters to be received.
- static void vReceivingCoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
- {
- char cRxedChar;
- BaseType_t xResult;
-
-     // All co-routines must start with a call to crSTART().
-     crSTART( xHandle );
-
-     for( ;; )
-     {
-         // Wait for data to become available on the queue.  This assumes the
-         // queue xCommsRxQueue has already been created!
-         crQUEUE_RECEIVE( xHandle, xCommsRxQueue, &uxLEDToFlash, portMAX_DELAY, &xResult );
-
-         // Was a character received?
-         if( xResult == pdPASS )
-         {
-             // Process the character here.
-         }
-     }
-
-     // All co-routines must end with a call to crEND().
-     crEND();
- }
-
- // An ISR that uses a queue to send characters received on a serial port to
- // a co-routine.
- void vUART_ISR( void )
- {
- char cRxedChar;
- BaseType_t xCRWokenByPost = pdFALSE;
-
-     // We loop around reading characters until there are none left in the UART.
-     while( UART_RX_REG_NOT_EMPTY() )
-     {
-         // Obtain the character from the UART.
-         cRxedChar = UART_RX_REG;
-
-         // Post the character onto a queue.  xCRWokenByPost will be pdFALSE
-         // the first time around the loop.  If the post causes a co-routine
-         // to be woken (unblocked) then xCRWokenByPost will be set to pdTRUE.
-         // In this manner we can ensure that if more than one co-routine is
-         // blocked on the queue only one is woken by this ISR no matter how
-         // many characters are posted to the queue.
-         xCRWokenByPost = crQUEUE_SEND_FROM_ISR( xCommsRxQueue, &cRxedChar, xCRWokenByPost );
-     }
- }
- * \defgroup crQUEUE_SEND_FROM_ISR crQUEUE_SEND_FROM_ISR - * \ingroup Tasks - */ -#define crQUEUE_SEND_FROM_ISR( pxQueue, pvItemToQueue, xCoRoutinePreviouslyWoken ) xQueueCRSendFromISR( ( pxQueue ), ( pvItemToQueue ), ( xCoRoutinePreviouslyWoken ) ) - - -/** - * croutine. h - *
-  crQUEUE_SEND_FROM_ISR(
-                            QueueHandle_t pxQueue,
-                            void *pvBuffer,
-                            BaseType_t * pxCoRoutineWoken
-                       )
- * - * The macro's crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() are the - * co-routine equivalent to the xQueueSendFromISR() and xQueueReceiveFromISR() - * functions used by tasks. - * - * crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() can only be used to - * pass data between a co-routine and and ISR, whereas xQueueSendFromISR() and - * xQueueReceiveFromISR() can only be used to pass data between a task and and - * ISR. - * - * crQUEUE_RECEIVE_FROM_ISR can only be called from an ISR to receive data - * from a queue that is being used from within a co-routine (a co-routine - * posted to the queue). - * - * See the co-routine section of the WEB documentation for information on - * passing data between tasks and co-routines and between ISR's and - * co-routines. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvBuffer A pointer to a buffer into which the received item will be - * placed. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from the queue into - * pvBuffer. - * - * @param pxCoRoutineWoken A co-routine may be blocked waiting for space to become - * available on the queue. If crQUEUE_RECEIVE_FROM_ISR causes such a - * co-routine to unblock *pxCoRoutineWoken will get set to pdTRUE, otherwise - * *pxCoRoutineWoken will remain unchanged. - * - * @return pdTRUE an item was successfully received from the queue, otherwise - * pdFALSE. - * - * Example usage: -
- // A co-routine that posts a character to a queue then blocks for a fixed
- // period.  The character is incremented each time.
- static void vSendingCoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
- {
- // cChar holds its value while this co-routine is blocked and must therefore
- // be declared static.
- static char cCharToTx = 'a';
- BaseType_t xResult;
-
-     // All co-routines must start with a call to crSTART().
-     crSTART( xHandle );
-
-     for( ;; )
-     {
-         // Send the next character to the queue.
-         crQUEUE_SEND( xHandle, xCoRoutineQueue, &cCharToTx, NO_DELAY, &xResult );
-
-         if( xResult == pdPASS )
-         {
-             // The character was successfully posted to the queue.
-         }
-		 else
-		 {
-			// Could not post the character to the queue.
-		 }
-
-         // Enable the UART Tx interrupt to cause an interrupt in this
-		 // hypothetical UART.  The interrupt will obtain the character
-		 // from the queue and send it.
-		 ENABLE_RX_INTERRUPT();
-
-		 // Increment to the next character then block for a fixed period.
-		 // cCharToTx will maintain its value across the delay as it is
-		 // declared static.
-		 cCharToTx++;
-		 if( cCharToTx > 'x' )
-		 {
-			cCharToTx = 'a';
-		 }
-		 crDELAY( 100 );
-     }
-
-     // All co-routines must end with a call to crEND().
-     crEND();
- }
-
- // An ISR that uses a queue to receive characters to send on a UART.
- void vUART_ISR( void )
- {
- char cCharToTx;
- BaseType_t xCRWokenByPost = pdFALSE;
-
-     while( UART_TX_REG_EMPTY() )
-     {
-         // Are there any characters in the queue waiting to be sent?
-		 // xCRWokenByPost will automatically be set to pdTRUE if a co-routine
-		 // is woken by the post - ensuring that only a single co-routine is
-		 // woken no matter how many times we go around this loop.
-         if( crQUEUE_RECEIVE_FROM_ISR( pxQueue, &cCharToTx, &xCRWokenByPost ) )
-		 {
-			 SEND_CHARACTER( cCharToTx );
-		 }
-     }
- }
- * \defgroup crQUEUE_RECEIVE_FROM_ISR crQUEUE_RECEIVE_FROM_ISR - * \ingroup Tasks - */ -#define crQUEUE_RECEIVE_FROM_ISR( pxQueue, pvBuffer, pxCoRoutineWoken ) xQueueCRReceiveFromISR( ( pxQueue ), ( pvBuffer ), ( pxCoRoutineWoken ) ) - -/* - * This function is intended for internal use by the co-routine macros only. - * The macro nature of the co-routine implementation requires that the - * prototype appears here. The function should not be used by application - * writers. - * - * Removes the current co-routine from its ready list and places it in the - * appropriate delayed list. - */ -void vCoRoutineAddToDelayedList( TickType_t xTicksToDelay, List_t *pxEventList ); - -/* - * This function is intended for internal use by the queue implementation only. - * The function should not be used by application writers. - * - * Removes the highest priority co-routine from the event list and places it in - * the pending ready list. - */ -BaseType_t xCoRoutineRemoveFromEventList( const List_t *pxEventList ); - -#ifdef __cplusplus -} -#endif - -#endif /* CO_ROUTINE_H */ diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/deprecated_definitions.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/deprecated_definitions.h deleted file mode 100644 index 4ea816c..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/deprecated_definitions.h +++ /dev/null @@ -1,321 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -#ifndef DEPRECATED_DEFINITIONS_H -#define DEPRECATED_DEFINITIONS_H - - -/* Each FreeRTOS port has a unique portmacro.h header file. Originally a -pre-processor definition was used to ensure the pre-processor found the correct -portmacro.h file for the port being used. That scheme was deprecated in favour -of setting the compiler's include path such that it found the correct -portmacro.h file - removing the need for the constant and allowing the -portmacro.h file to be located anywhere in relation to the port being used. The -definitions below remain in the code for backward compatibility only. New -projects should not use them. */ - -#ifdef OPEN_WATCOM_INDUSTRIAL_PC_PORT - #include "..\..\Source\portable\owatcom\16bitdos\pc\portmacro.h" - typedef void ( __interrupt __far *pxISR )(); -#endif - -#ifdef OPEN_WATCOM_FLASH_LITE_186_PORT - #include "..\..\Source\portable\owatcom\16bitdos\flsh186\portmacro.h" - typedef void ( __interrupt __far *pxISR )(); -#endif - -#ifdef GCC_MEGA_AVR - #include "../portable/GCC/ATMega323/portmacro.h" -#endif - -#ifdef IAR_MEGA_AVR - #include "../portable/IAR/ATMega323/portmacro.h" -#endif - -#ifdef MPLAB_PIC24_PORT - #include "../../Source/portable/MPLAB/PIC24_dsPIC/portmacro.h" -#endif - -#ifdef MPLAB_DSPIC_PORT - #include "../../Source/portable/MPLAB/PIC24_dsPIC/portmacro.h" -#endif - -#ifdef MPLAB_PIC18F_PORT - #include "../../Source/portable/MPLAB/PIC18F/portmacro.h" -#endif - -#ifdef MPLAB_PIC32MX_PORT - #include "../../Source/portable/MPLAB/PIC32MX/portmacro.h" -#endif - -#ifdef _FEDPICC - #include "libFreeRTOS/Include/portmacro.h" -#endif - -#ifdef SDCC_CYGNAL - #include "../../Source/portable/SDCC/Cygnal/portmacro.h" -#endif - -#ifdef GCC_ARM7 - #include "../../Source/portable/GCC/ARM7_LPC2000/portmacro.h" -#endif - -#ifdef GCC_ARM7_ECLIPSE - #include "portmacro.h" -#endif - -#ifdef ROWLEY_LPC23xx - #include "../../Source/portable/GCC/ARM7_LPC23xx/portmacro.h" -#endif - -#ifdef IAR_MSP430 - #include "..\..\Source\portable\IAR\MSP430\portmacro.h" -#endif - -#ifdef GCC_MSP430 - #include "../../Source/portable/GCC/MSP430F449/portmacro.h" -#endif - -#ifdef ROWLEY_MSP430 - #include "../../Source/portable/Rowley/MSP430F449/portmacro.h" -#endif - -#ifdef ARM7_LPC21xx_KEIL_RVDS - #include "..\..\Source\portable\RVDS\ARM7_LPC21xx\portmacro.h" -#endif - -#ifdef SAM7_GCC - #include "../../Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h" -#endif - -#ifdef SAM7_IAR - #include "..\..\Source\portable\IAR\AtmelSAM7S64\portmacro.h" -#endif - -#ifdef SAM9XE_IAR - #include "..\..\Source\portable\IAR\AtmelSAM9XE\portmacro.h" -#endif - -#ifdef LPC2000_IAR - #include "..\..\Source\portable\IAR\LPC2000\portmacro.h" -#endif - -#ifdef STR71X_IAR - #include "..\..\Source\portable\IAR\STR71x\portmacro.h" -#endif - -#ifdef STR75X_IAR - #include "..\..\Source\portable\IAR\STR75x\portmacro.h" -#endif - -#ifdef STR75X_GCC - #include "..\..\Source\portable\GCC\STR75x\portmacro.h" -#endif - -#ifdef STR91X_IAR - #include "..\..\Source\portable\IAR\STR91x\portmacro.h" -#endif - -#ifdef GCC_H8S - #include "../../Source/portable/GCC/H8S2329/portmacro.h" -#endif - -#ifdef GCC_AT91FR40008 - #include "../../Source/portable/GCC/ARM7_AT91FR40008/portmacro.h" -#endif - -#ifdef RVDS_ARMCM3_LM3S102 - #include "../../Source/portable/RVDS/ARM_CM3/portmacro.h" -#endif - -#ifdef GCC_ARMCM3_LM3S102 - #include "../../Source/portable/GCC/ARM_CM3/portmacro.h" -#endif - -#ifdef GCC_ARMCM3 - #include "../../Source/portable/GCC/ARM_CM3/portmacro.h" -#endif - -#ifdef IAR_ARM_CM3 - #include "../../Source/portable/IAR/ARM_CM3/portmacro.h" -#endif - -#ifdef IAR_ARMCM3_LM - #include "../../Source/portable/IAR/ARM_CM3/portmacro.h" -#endif - -#ifdef HCS12_CODE_WARRIOR - #include "../../Source/portable/CodeWarrior/HCS12/portmacro.h" -#endif - -#ifdef MICROBLAZE_GCC - #include "../../Source/portable/GCC/MicroBlaze/portmacro.h" -#endif - -#ifdef TERN_EE - #include "..\..\Source\portable\Paradigm\Tern_EE\small\portmacro.h" -#endif - -#ifdef GCC_HCS12 - #include "../../Source/portable/GCC/HCS12/portmacro.h" -#endif - -#ifdef GCC_MCF5235 - #include "../../Source/portable/GCC/MCF5235/portmacro.h" -#endif - -#ifdef COLDFIRE_V2_GCC - #include "../../../Source/portable/GCC/ColdFire_V2/portmacro.h" -#endif - -#ifdef COLDFIRE_V2_CODEWARRIOR - #include "../../Source/portable/CodeWarrior/ColdFire_V2/portmacro.h" -#endif - -#ifdef GCC_PPC405 - #include "../../Source/portable/GCC/PPC405_Xilinx/portmacro.h" -#endif - -#ifdef GCC_PPC440 - #include "../../Source/portable/GCC/PPC440_Xilinx/portmacro.h" -#endif - -#ifdef _16FX_SOFTUNE - #include "..\..\Source\portable\Softune\MB96340\portmacro.h" -#endif - -#ifdef BCC_INDUSTRIAL_PC_PORT - /* A short file name has to be used in place of the normal - FreeRTOSConfig.h when using the Borland compiler. */ - #include "frconfig.h" - #include "..\portable\BCC\16BitDOS\PC\prtmacro.h" - typedef void ( __interrupt __far *pxISR )(); -#endif - -#ifdef BCC_FLASH_LITE_186_PORT - /* A short file name has to be used in place of the normal - FreeRTOSConfig.h when using the Borland compiler. */ - #include "frconfig.h" - #include "..\portable\BCC\16BitDOS\flsh186\prtmacro.h" - typedef void ( __interrupt __far *pxISR )(); -#endif - -#ifdef __GNUC__ - #ifdef __AVR32_AVR32A__ - #include "portmacro.h" - #endif -#endif - -#ifdef __ICCAVR32__ - #ifdef __CORE__ - #if __CORE__ == __AVR32A__ - #include "portmacro.h" - #endif - #endif -#endif - -#ifdef __91467D - #include "portmacro.h" -#endif - -#ifdef __96340 - #include "portmacro.h" -#endif - - -#ifdef __IAR_V850ES_Fx3__ - #include "../../Source/portable/IAR/V850ES/portmacro.h" -#endif - -#ifdef __IAR_V850ES_Jx3__ - #include "../../Source/portable/IAR/V850ES/portmacro.h" -#endif - -#ifdef __IAR_V850ES_Jx3_L__ - #include "../../Source/portable/IAR/V850ES/portmacro.h" -#endif - -#ifdef __IAR_V850ES_Jx2__ - #include "../../Source/portable/IAR/V850ES/portmacro.h" -#endif - -#ifdef __IAR_V850ES_Hx2__ - #include "../../Source/portable/IAR/V850ES/portmacro.h" -#endif - -#ifdef __IAR_78K0R_Kx3__ - #include "../../Source/portable/IAR/78K0R/portmacro.h" -#endif - -#ifdef __IAR_78K0R_Kx3L__ - #include "../../Source/portable/IAR/78K0R/portmacro.h" -#endif - -#endif /* DEPRECATED_DEFINITIONS_H */ - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/event_groups.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/event_groups.h deleted file mode 100644 index 7331c91..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/event_groups.h +++ /dev/null @@ -1,797 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -#ifndef EVENT_GROUPS_H -#define EVENT_GROUPS_H - -#ifndef INC_FREERTOS_H - #error "include FreeRTOS.h" must appear in source files before "include event_groups.h" -#endif - -/* FreeRTOS includes. */ -#include "timers.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * An event group is a collection of bits to which an application can assign a - * meaning. For example, an application may create an event group to convey - * the status of various CAN bus related events in which bit 0 might mean "A CAN - * message has been received and is ready for processing", bit 1 might mean "The - * application has queued a message that is ready for sending onto the CAN - * network", and bit 2 might mean "It is time to send a SYNC message onto the - * CAN network" etc. A task can then test the bit values to see which events - * are active, and optionally enter the Blocked state to wait for a specified - * bit or a group of specified bits to be active. To continue the CAN bus - * example, a CAN controlling task can enter the Blocked state (and therefore - * not consume any processing time) until either bit 0, bit 1 or bit 2 are - * active, at which time the bit that was actually active would inform the task - * which action it had to take (process a received message, send a message, or - * send a SYNC). - * - * The event groups implementation contains intelligence to avoid race - * conditions that would otherwise occur were an application to use a simple - * variable for the same purpose. This is particularly important with respect - * to when a bit within an event group is to be cleared, and when bits have to - * be set and then tested atomically - as is the case where event groups are - * used to create a synchronisation point between multiple tasks (a - * 'rendezvous'). - * - * \defgroup EventGroup - */ - - - -/** - * event_groups.h - * - * Type by which event groups are referenced. For example, a call to - * xEventGroupCreate() returns an EventGroupHandle_t variable that can then - * be used as a parameter to other event group functions. - * - * \defgroup EventGroupHandle_t EventGroupHandle_t - * \ingroup EventGroup - */ -typedef void * EventGroupHandle_t; - -/* - * The type that holds event bits always matches TickType_t - therefore the - * number of bits it holds is set by configUSE_16_BIT_TICKS (16 bits if set to 1, - * 32 bits if set to 0. - * - * \defgroup EventBits_t EventBits_t - * \ingroup EventGroup - */ -typedef TickType_t EventBits_t; - -/** - * event_groups.h - *
- EventGroupHandle_t xEventGroupCreate( void );
- 
- * - * Create a new event group. - * - * Internally, within the FreeRTOS implementation, event groups use a [small] - * block of memory, in which the event group's structure is stored. If an event - * groups is created using xEventGropuCreate() then the required memory is - * automatically dynamically allocated inside the xEventGroupCreate() function. - * (see http://www.freertos.org/a00111.html). If an event group is created - * using xEventGropuCreateStatic() then the application writer must instead - * provide the memory that will get used by the event group. - * xEventGroupCreateStatic() therefore allows an event group to be created - * without using any dynamic memory allocation. - * - * Although event groups are not related to ticks, for internal implementation - * reasons the number of bits available for use in an event group is dependent - * on the configUSE_16_BIT_TICKS setting in FreeRTOSConfig.h. If - * configUSE_16_BIT_TICKS is 1 then each event group contains 8 usable bits (bit - * 0 to bit 7). If configUSE_16_BIT_TICKS is set to 0 then each event group has - * 24 usable bits (bit 0 to bit 23). The EventBits_t type is used to store - * event bits within an event group. - * - * @return If the event group was created then a handle to the event group is - * returned. If there was insufficient FreeRTOS heap available to create the - * event group then NULL is returned. See http://www.freertos.org/a00111.html - * - * Example usage: -
-	// Declare a variable to hold the created event group.
-	EventGroupHandle_t xCreatedEventGroup;
-
-	// Attempt to create the event group.
-	xCreatedEventGroup = xEventGroupCreate();
-
-	// Was the event group created successfully?
-	if( xCreatedEventGroup == NULL )
-	{
-		// The event group was not created because there was insufficient
-		// FreeRTOS heap available.
-	}
-	else
-	{
-		// The event group was created.
-	}
-   
- * \defgroup xEventGroupCreate xEventGroupCreate - * \ingroup EventGroup - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - EventGroupHandle_t xEventGroupCreate( void ) PRIVILEGED_FUNCTION; -#endif - -/** - * event_groups.h - *
- EventGroupHandle_t xEventGroupCreateStatic( EventGroupHandle_t * pxEventGroupBuffer );
- 
- * - * Create a new event group. - * - * Internally, within the FreeRTOS implementation, event groups use a [small] - * block of memory, in which the event group's structure is stored. If an event - * groups is created using xEventGropuCreate() then the required memory is - * automatically dynamically allocated inside the xEventGroupCreate() function. - * (see http://www.freertos.org/a00111.html). If an event group is created - * using xEventGropuCreateStatic() then the application writer must instead - * provide the memory that will get used by the event group. - * xEventGroupCreateStatic() therefore allows an event group to be created - * without using any dynamic memory allocation. - * - * Although event groups are not related to ticks, for internal implementation - * reasons the number of bits available for use in an event group is dependent - * on the configUSE_16_BIT_TICKS setting in FreeRTOSConfig.h. If - * configUSE_16_BIT_TICKS is 1 then each event group contains 8 usable bits (bit - * 0 to bit 7). If configUSE_16_BIT_TICKS is set to 0 then each event group has - * 24 usable bits (bit 0 to bit 23). The EventBits_t type is used to store - * event bits within an event group. - * - * @param pxEventGroupBuffer pxEventGroupBuffer must point to a variable of type - * StaticEventGroup_t, which will be then be used to hold the event group's data - * structures, removing the need for the memory to be allocated dynamically. - * - * @return If the event group was created then a handle to the event group is - * returned. If pxEventGroupBuffer was NULL then NULL is returned. - * - * Example usage: -
-	// StaticEventGroup_t is a publicly accessible structure that has the same
-	// size and alignment requirements as the real event group structure.  It is
-	// provided as a mechanism for applications to know the size of the event
-	// group (which is dependent on the architecture and configuration file
-	// settings) without breaking the strict data hiding policy by exposing the
-	// real event group internals.  This StaticEventGroup_t variable is passed
-	// into the xSemaphoreCreateEventGroupStatic() function and is used to store
-	// the event group's data structures
-	StaticEventGroup_t xEventGroupBuffer;
-
-	// Create the event group without dynamically allocating any memory.
-	xEventGroup = xEventGroupCreateStatic( &xEventGroupBuffer );
-   
- */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - EventGroupHandle_t xEventGroupCreateStatic( StaticEventGroup_t *pxEventGroupBuffer ) PRIVILEGED_FUNCTION; -#endif - -/** - * event_groups.h - *
-	EventBits_t xEventGroupWaitBits( 	EventGroupHandle_t xEventGroup,
-										const EventBits_t uxBitsToWaitFor,
-										const BaseType_t xClearOnExit,
-										const BaseType_t xWaitForAllBits,
-										const TickType_t xTicksToWait );
- 
- * - * [Potentially] block to wait for one or more bits to be set within a - * previously created event group. - * - * This function cannot be called from an interrupt. - * - * @param xEventGroup The event group in which the bits are being tested. The - * event group must have previously been created using a call to - * xEventGroupCreate(). - * - * @param uxBitsToWaitFor A bitwise value that indicates the bit or bits to test - * inside the event group. For example, to wait for bit 0 and/or bit 2 set - * uxBitsToWaitFor to 0x05. To wait for bits 0 and/or bit 1 and/or bit 2 set - * uxBitsToWaitFor to 0x07. Etc. - * - * @param xClearOnExit If xClearOnExit is set to pdTRUE then any bits within - * uxBitsToWaitFor that are set within the event group will be cleared before - * xEventGroupWaitBits() returns if the wait condition was met (if the function - * returns for a reason other than a timeout). If xClearOnExit is set to - * pdFALSE then the bits set in the event group are not altered when the call to - * xEventGroupWaitBits() returns. - * - * @param xWaitForAllBits If xWaitForAllBits is set to pdTRUE then - * xEventGroupWaitBits() will return when either all the bits in uxBitsToWaitFor - * are set or the specified block time expires. If xWaitForAllBits is set to - * pdFALSE then xEventGroupWaitBits() will return when any one of the bits set - * in uxBitsToWaitFor is set or the specified block time expires. The block - * time is specified by the xTicksToWait parameter. - * - * @param xTicksToWait The maximum amount of time (specified in 'ticks') to wait - * for one/all (depending on the xWaitForAllBits value) of the bits specified by - * uxBitsToWaitFor to become set. - * - * @return The value of the event group at the time either the bits being waited - * for became set, or the block time expired. Test the return value to know - * which bits were set. If xEventGroupWaitBits() returned because its timeout - * expired then not all the bits being waited for will be set. If - * xEventGroupWaitBits() returned because the bits it was waiting for were set - * then the returned value is the event group value before any bits were - * automatically cleared in the case that xClearOnExit parameter was set to - * pdTRUE. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   void aFunction( EventGroupHandle_t xEventGroup )
-   {
-   EventBits_t uxBits;
-   const TickType_t xTicksToWait = 100 / portTICK_PERIOD_MS;
-
-		// Wait a maximum of 100ms for either bit 0 or bit 4 to be set within
-		// the event group.  Clear the bits before exiting.
-		uxBits = xEventGroupWaitBits(
-					xEventGroup,	// The event group being tested.
-					BIT_0 | BIT_4,	// The bits within the event group to wait for.
-					pdTRUE,			// BIT_0 and BIT_4 should be cleared before returning.
-					pdFALSE,		// Don't wait for both bits, either bit will do.
-					xTicksToWait );	// Wait a maximum of 100ms for either bit to be set.
-
-		if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )
-		{
-			// xEventGroupWaitBits() returned because both bits were set.
-		}
-		else if( ( uxBits & BIT_0 ) != 0 )
-		{
-			// xEventGroupWaitBits() returned because just BIT_0 was set.
-		}
-		else if( ( uxBits & BIT_4 ) != 0 )
-		{
-			// xEventGroupWaitBits() returned because just BIT_4 was set.
-		}
-		else
-		{
-			// xEventGroupWaitBits() returned because xTicksToWait ticks passed
-			// without either BIT_0 or BIT_4 becoming set.
-		}
-   }
-   
- * \defgroup xEventGroupWaitBits xEventGroupWaitBits - * \ingroup EventGroup - */ -EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -/** - * event_groups.h - *
-	EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear );
- 
- * - * Clear bits within an event group. This function cannot be called from an - * interrupt. - * - * @param xEventGroup The event group in which the bits are to be cleared. - * - * @param uxBitsToClear A bitwise value that indicates the bit or bits to clear - * in the event group. For example, to clear bit 3 only, set uxBitsToClear to - * 0x08. To clear bit 3 and bit 0 set uxBitsToClear to 0x09. - * - * @return The value of the event group before the specified bits were cleared. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   void aFunction( EventGroupHandle_t xEventGroup )
-   {
-   EventBits_t uxBits;
-
-		// Clear bit 0 and bit 4 in xEventGroup.
-		uxBits = xEventGroupClearBits(
-								xEventGroup,	// The event group being updated.
-								BIT_0 | BIT_4 );// The bits being cleared.
-
-		if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )
-		{
-			// Both bit 0 and bit 4 were set before xEventGroupClearBits() was
-			// called.  Both will now be clear (not set).
-		}
-		else if( ( uxBits & BIT_0 ) != 0 )
-		{
-			// Bit 0 was set before xEventGroupClearBits() was called.  It will
-			// now be clear.
-		}
-		else if( ( uxBits & BIT_4 ) != 0 )
-		{
-			// Bit 4 was set before xEventGroupClearBits() was called.  It will
-			// now be clear.
-		}
-		else
-		{
-			// Neither bit 0 nor bit 4 were set in the first place.
-		}
-   }
-   
- * \defgroup xEventGroupClearBits xEventGroupClearBits - * \ingroup EventGroup - */ -EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION; - -/** - * event_groups.h - *
-	BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet );
- 
- * - * A version of xEventGroupClearBits() that can be called from an interrupt. - * - * Setting bits in an event group is not a deterministic operation because there - * are an unknown number of tasks that may be waiting for the bit or bits being - * set. FreeRTOS does not allow nondeterministic operations to be performed - * while interrupts are disabled, so protects event groups that are accessed - * from tasks by suspending the scheduler rather than disabling interrupts. As - * a result event groups cannot be accessed directly from an interrupt service - * routine. Therefore xEventGroupClearBitsFromISR() sends a message to the - * timer task to have the clear operation performed in the context of the timer - * task. - * - * @param xEventGroup The event group in which the bits are to be cleared. - * - * @param uxBitsToClear A bitwise value that indicates the bit or bits to clear. - * For example, to clear bit 3 only, set uxBitsToClear to 0x08. To clear bit 3 - * and bit 0 set uxBitsToClear to 0x09. - * - * @return If the request to execute the function was posted successfully then - * pdPASS is returned, otherwise pdFALSE is returned. pdFALSE will be returned - * if the timer service queue was full. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   // An event group which it is assumed has already been created by a call to
-   // xEventGroupCreate().
-   EventGroupHandle_t xEventGroup;
-
-   void anInterruptHandler( void )
-   {
-		// Clear bit 0 and bit 4 in xEventGroup.
-		xResult = xEventGroupClearBitsFromISR(
-							xEventGroup,	 // The event group being updated.
-							BIT_0 | BIT_4 ); // The bits being set.
-
-		if( xResult == pdPASS )
-		{
-			// The message was posted successfully.
-		}
-  }
-   
- * \defgroup xEventGroupClearBitsFromISR xEventGroupClearBitsFromISR - * \ingroup EventGroup - */ -#if( configUSE_TRACE_FACILITY == 1 ) - BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ) PRIVILEGED_FUNCTION; -#else - #define xEventGroupClearBitsFromISR( xEventGroup, uxBitsToClear ) xTimerPendFunctionCallFromISR( vEventGroupClearBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToClear, NULL ) -#endif - -/** - * event_groups.h - *
-	EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet );
- 
- * - * Set bits within an event group. - * This function cannot be called from an interrupt. xEventGroupSetBitsFromISR() - * is a version that can be called from an interrupt. - * - * Setting bits in an event group will automatically unblock tasks that are - * blocked waiting for the bits. - * - * @param xEventGroup The event group in which the bits are to be set. - * - * @param uxBitsToSet A bitwise value that indicates the bit or bits to set. - * For example, to set bit 3 only, set uxBitsToSet to 0x08. To set bit 3 - * and bit 0 set uxBitsToSet to 0x09. - * - * @return The value of the event group at the time the call to - * xEventGroupSetBits() returns. There are two reasons why the returned value - * might have the bits specified by the uxBitsToSet parameter cleared. First, - * if setting a bit results in a task that was waiting for the bit leaving the - * blocked state then it is possible the bit will be cleared automatically - * (see the xClearBitOnExit parameter of xEventGroupWaitBits()). Second, any - * unblocked (or otherwise Ready state) task that has a priority above that of - * the task that called xEventGroupSetBits() will execute and may change the - * event group value before the call to xEventGroupSetBits() returns. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   void aFunction( EventGroupHandle_t xEventGroup )
-   {
-   EventBits_t uxBits;
-
-		// Set bit 0 and bit 4 in xEventGroup.
-		uxBits = xEventGroupSetBits(
-							xEventGroup,	// The event group being updated.
-							BIT_0 | BIT_4 );// The bits being set.
-
-		if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )
-		{
-			// Both bit 0 and bit 4 remained set when the function returned.
-		}
-		else if( ( uxBits & BIT_0 ) != 0 )
-		{
-			// Bit 0 remained set when the function returned, but bit 4 was
-			// cleared.  It might be that bit 4 was cleared automatically as a
-			// task that was waiting for bit 4 was removed from the Blocked
-			// state.
-		}
-		else if( ( uxBits & BIT_4 ) != 0 )
-		{
-			// Bit 4 remained set when the function returned, but bit 0 was
-			// cleared.  It might be that bit 0 was cleared automatically as a
-			// task that was waiting for bit 0 was removed from the Blocked
-			// state.
-		}
-		else
-		{
-			// Neither bit 0 nor bit 4 remained set.  It might be that a task
-			// was waiting for both of the bits to be set, and the bits were
-			// cleared as the task left the Blocked state.
-		}
-   }
-   
- * \defgroup xEventGroupSetBits xEventGroupSetBits - * \ingroup EventGroup - */ -EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ) PRIVILEGED_FUNCTION; - -/** - * event_groups.h - *
-	BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken );
- 
- * - * A version of xEventGroupSetBits() that can be called from an interrupt. - * - * Setting bits in an event group is not a deterministic operation because there - * are an unknown number of tasks that may be waiting for the bit or bits being - * set. FreeRTOS does not allow nondeterministic operations to be performed in - * interrupts or from critical sections. Therefore xEventGroupSetBitsFromISR() - * sends a message to the timer task to have the set operation performed in the - * context of the timer task - where a scheduler lock is used in place of a - * critical section. - * - * @param xEventGroup The event group in which the bits are to be set. - * - * @param uxBitsToSet A bitwise value that indicates the bit or bits to set. - * For example, to set bit 3 only, set uxBitsToSet to 0x08. To set bit 3 - * and bit 0 set uxBitsToSet to 0x09. - * - * @param pxHigherPriorityTaskWoken As mentioned above, calling this function - * will result in a message being sent to the timer daemon task. If the - * priority of the timer daemon task is higher than the priority of the - * currently running task (the task the interrupt interrupted) then - * *pxHigherPriorityTaskWoken will be set to pdTRUE by - * xEventGroupSetBitsFromISR(), indicating that a context switch should be - * requested before the interrupt exits. For that reason - * *pxHigherPriorityTaskWoken must be initialised to pdFALSE. See the - * example code below. - * - * @return If the request to execute the function was posted successfully then - * pdPASS is returned, otherwise pdFALSE is returned. pdFALSE will be returned - * if the timer service queue was full. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   // An event group which it is assumed has already been created by a call to
-   // xEventGroupCreate().
-   EventGroupHandle_t xEventGroup;
-
-   void anInterruptHandler( void )
-   {
-   BaseType_t xHigherPriorityTaskWoken, xResult;
-
-		// xHigherPriorityTaskWoken must be initialised to pdFALSE.
-		xHigherPriorityTaskWoken = pdFALSE;
-
-		// Set bit 0 and bit 4 in xEventGroup.
-		xResult = xEventGroupSetBitsFromISR(
-							xEventGroup,	// The event group being updated.
-							BIT_0 | BIT_4   // The bits being set.
-							&xHigherPriorityTaskWoken );
-
-		// Was the message posted successfully?
-		if( xResult == pdPASS )
-		{
-			// If xHigherPriorityTaskWoken is now set to pdTRUE then a context
-			// switch should be requested.  The macro used is port specific and
-			// will be either portYIELD_FROM_ISR() or portEND_SWITCHING_ISR() -
-			// refer to the documentation page for the port being used.
-			portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
-		}
-  }
-   
- * \defgroup xEventGroupSetBitsFromISR xEventGroupSetBitsFromISR - * \ingroup EventGroup - */ -#if( configUSE_TRACE_FACILITY == 1 ) - BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; -#else - #define xEventGroupSetBitsFromISR( xEventGroup, uxBitsToSet, pxHigherPriorityTaskWoken ) xTimerPendFunctionCallFromISR( vEventGroupSetBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToSet, pxHigherPriorityTaskWoken ) -#endif - -/** - * event_groups.h - *
-	EventBits_t xEventGroupSync(	EventGroupHandle_t xEventGroup,
-									const EventBits_t uxBitsToSet,
-									const EventBits_t uxBitsToWaitFor,
-									TickType_t xTicksToWait );
- 
- * - * Atomically set bits within an event group, then wait for a combination of - * bits to be set within the same event group. This functionality is typically - * used to synchronise multiple tasks, where each task has to wait for the other - * tasks to reach a synchronisation point before proceeding. - * - * This function cannot be used from an interrupt. - * - * The function will return before its block time expires if the bits specified - * by the uxBitsToWait parameter are set, or become set within that time. In - * this case all the bits specified by uxBitsToWait will be automatically - * cleared before the function returns. - * - * @param xEventGroup The event group in which the bits are being tested. The - * event group must have previously been created using a call to - * xEventGroupCreate(). - * - * @param uxBitsToSet The bits to set in the event group before determining - * if, and possibly waiting for, all the bits specified by the uxBitsToWait - * parameter are set. - * - * @param uxBitsToWaitFor A bitwise value that indicates the bit or bits to test - * inside the event group. For example, to wait for bit 0 and bit 2 set - * uxBitsToWaitFor to 0x05. To wait for bits 0 and bit 1 and bit 2 set - * uxBitsToWaitFor to 0x07. Etc. - * - * @param xTicksToWait The maximum amount of time (specified in 'ticks') to wait - * for all of the bits specified by uxBitsToWaitFor to become set. - * - * @return The value of the event group at the time either the bits being waited - * for became set, or the block time expired. Test the return value to know - * which bits were set. If xEventGroupSync() returned because its timeout - * expired then not all the bits being waited for will be set. If - * xEventGroupSync() returned because all the bits it was waiting for were - * set then the returned value is the event group value before any bits were - * automatically cleared. - * - * Example usage: -
- // Bits used by the three tasks.
- #define TASK_0_BIT		( 1 << 0 )
- #define TASK_1_BIT		( 1 << 1 )
- #define TASK_2_BIT		( 1 << 2 )
-
- #define ALL_SYNC_BITS ( TASK_0_BIT | TASK_1_BIT | TASK_2_BIT )
-
- // Use an event group to synchronise three tasks.  It is assumed this event
- // group has already been created elsewhere.
- EventGroupHandle_t xEventBits;
-
- void vTask0( void *pvParameters )
- {
- EventBits_t uxReturn;
- TickType_t xTicksToWait = 100 / portTICK_PERIOD_MS;
-
-	 for( ;; )
-	 {
-		// Perform task functionality here.
-
-		// Set bit 0 in the event flag to note this task has reached the
-		// sync point.  The other two tasks will set the other two bits defined
-		// by ALL_SYNC_BITS.  All three tasks have reached the synchronisation
-		// point when all the ALL_SYNC_BITS are set.  Wait a maximum of 100ms
-		// for this to happen.
-		uxReturn = xEventGroupSync( xEventBits, TASK_0_BIT, ALL_SYNC_BITS, xTicksToWait );
-
-		if( ( uxReturn & ALL_SYNC_BITS ) == ALL_SYNC_BITS )
-		{
-			// All three tasks reached the synchronisation point before the call
-			// to xEventGroupSync() timed out.
-		}
-	}
- }
-
- void vTask1( void *pvParameters )
- {
-	 for( ;; )
-	 {
-		// Perform task functionality here.
-
-		// Set bit 1 in the event flag to note this task has reached the
-		// synchronisation point.  The other two tasks will set the other two
-		// bits defined by ALL_SYNC_BITS.  All three tasks have reached the
-		// synchronisation point when all the ALL_SYNC_BITS are set.  Wait
-		// indefinitely for this to happen.
-		xEventGroupSync( xEventBits, TASK_1_BIT, ALL_SYNC_BITS, portMAX_DELAY );
-
-		// xEventGroupSync() was called with an indefinite block time, so
-		// this task will only reach here if the syncrhonisation was made by all
-		// three tasks, so there is no need to test the return value.
-	 }
- }
-
- void vTask2( void *pvParameters )
- {
-	 for( ;; )
-	 {
-		// Perform task functionality here.
-
-		// Set bit 2 in the event flag to note this task has reached the
-		// synchronisation point.  The other two tasks will set the other two
-		// bits defined by ALL_SYNC_BITS.  All three tasks have reached the
-		// synchronisation point when all the ALL_SYNC_BITS are set.  Wait
-		// indefinitely for this to happen.
-		xEventGroupSync( xEventBits, TASK_2_BIT, ALL_SYNC_BITS, portMAX_DELAY );
-
-		// xEventGroupSync() was called with an indefinite block time, so
-		// this task will only reach here if the syncrhonisation was made by all
-		// three tasks, so there is no need to test the return value.
-	}
- }
-
- 
- * \defgroup xEventGroupSync xEventGroupSync - * \ingroup EventGroup - */ -EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - - -/** - * event_groups.h - *
-	EventBits_t xEventGroupGetBits( EventGroupHandle_t xEventGroup );
- 
- * - * Returns the current value of the bits in an event group. This function - * cannot be used from an interrupt. - * - * @param xEventGroup The event group being queried. - * - * @return The event group bits at the time xEventGroupGetBits() was called. - * - * \defgroup xEventGroupGetBits xEventGroupGetBits - * \ingroup EventGroup - */ -#define xEventGroupGetBits( xEventGroup ) xEventGroupClearBits( xEventGroup, 0 ) - -/** - * event_groups.h - *
-	EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup );
- 
- * - * A version of xEventGroupGetBits() that can be called from an ISR. - * - * @param xEventGroup The event group being queried. - * - * @return The event group bits at the time xEventGroupGetBitsFromISR() was called. - * - * \defgroup xEventGroupGetBitsFromISR xEventGroupGetBitsFromISR - * \ingroup EventGroup - */ -EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup ) PRIVILEGED_FUNCTION; - -/** - * event_groups.h - *
-	void xEventGroupDelete( EventGroupHandle_t xEventGroup );
- 
- * - * Delete an event group that was previously created by a call to - * xEventGroupCreate(). Tasks that are blocked on the event group will be - * unblocked and obtain 0 as the event group's value. - * - * @param xEventGroup The event group being deleted. - */ -void vEventGroupDelete( EventGroupHandle_t xEventGroup ) PRIVILEGED_FUNCTION; - -/* For internal use only. */ -void vEventGroupSetBitsCallback( void *pvEventGroup, const uint32_t ulBitsToSet ) PRIVILEGED_FUNCTION; -void vEventGroupClearBitsCallback( void *pvEventGroup, const uint32_t ulBitsToClear ) PRIVILEGED_FUNCTION; - - -#if (configUSE_TRACE_FACILITY == 1) - UBaseType_t uxEventGroupGetNumber( void* xEventGroup ) PRIVILEGED_FUNCTION; -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* EVENT_GROUPS_H */ - - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/list.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/list.h deleted file mode 100644 index a080d27..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/list.h +++ /dev/null @@ -1,453 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -/* - * This is the list implementation used by the scheduler. While it is tailored - * heavily for the schedulers needs, it is also available for use by - * application code. - * - * list_ts can only store pointers to list_item_ts. Each ListItem_t contains a - * numeric value (xItemValue). Most of the time the lists are sorted in - * descending item value order. - * - * Lists are created already containing one list item. The value of this - * item is the maximum possible that can be stored, it is therefore always at - * the end of the list and acts as a marker. The list member pxHead always - * points to this marker - even though it is at the tail of the list. This - * is because the tail contains a wrap back pointer to the true head of - * the list. - * - * In addition to it's value, each list item contains a pointer to the next - * item in the list (pxNext), a pointer to the list it is in (pxContainer) - * and a pointer to back to the object that contains it. These later two - * pointers are included for efficiency of list manipulation. There is - * effectively a two way link between the object containing the list item and - * the list item itself. - * - * - * \page ListIntroduction List Implementation - * \ingroup FreeRTOSIntro - */ - -#ifndef INC_FREERTOS_H - #error FreeRTOS.h must be included before list.h -#endif - -#ifndef LIST_H -#define LIST_H - -/* - * The list structure members are modified from within interrupts, and therefore - * by rights should be declared volatile. However, they are only modified in a - * functionally atomic way (within critical sections of with the scheduler - * suspended) and are either passed by reference into a function or indexed via - * a volatile variable. Therefore, in all use cases tested so far, the volatile - * qualifier can be omitted in order to provide a moderate performance - * improvement without adversely affecting functional behaviour. The assembly - * instructions generated by the IAR, ARM and GCC compilers when the respective - * compiler's options were set for maximum optimisation has been inspected and - * deemed to be as intended. That said, as compiler technology advances, and - * especially if aggressive cross module optimisation is used (a use case that - * has not been exercised to any great extend) then it is feasible that the - * volatile qualifier will be needed for correct optimisation. It is expected - * that a compiler removing essential code because, without the volatile - * qualifier on the list structure members and with aggressive cross module - * optimisation, the compiler deemed the code unnecessary will result in - * complete and obvious failure of the scheduler. If this is ever experienced - * then the volatile qualifier can be inserted in the relevant places within the - * list structures by simply defining configLIST_VOLATILE to volatile in - * FreeRTOSConfig.h (as per the example at the bottom of this comment block). - * If configLIST_VOLATILE is not defined then the preprocessor directives below - * will simply #define configLIST_VOLATILE away completely. - * - * To use volatile list structure members then add the following line to - * FreeRTOSConfig.h (without the quotes): - * "#define configLIST_VOLATILE volatile" - */ -#ifndef configLIST_VOLATILE - #define configLIST_VOLATILE -#endif /* configSUPPORT_CROSS_MODULE_OPTIMISATION */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Macros that can be used to place known values within the list structures, -then check that the known values do not get corrupted during the execution of -the application. These may catch the list data structures being overwritten in -memory. They will not catch data errors caused by incorrect configuration or -use of FreeRTOS.*/ -#if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 ) - /* Define the macros to do nothing. */ - #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE - #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE - #define listFIRST_LIST_INTEGRITY_CHECK_VALUE - #define listSECOND_LIST_INTEGRITY_CHECK_VALUE - #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) - #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) - #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ) - #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ) - #define listTEST_LIST_ITEM_INTEGRITY( pxItem ) - #define listTEST_LIST_INTEGRITY( pxList ) -#else - /* Define macros that add new members into the list structures. */ - #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue1; - #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue2; - #define listFIRST_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue1; - #define listSECOND_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue2; - - /* Define macros that set the new structure members to known values. */ - #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) ( pxItem )->xListItemIntegrityValue1 = pdINTEGRITY_CHECK_VALUE - #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) ( pxItem )->xListItemIntegrityValue2 = pdINTEGRITY_CHECK_VALUE - #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ) ( pxList )->xListIntegrityValue1 = pdINTEGRITY_CHECK_VALUE - #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ) ( pxList )->xListIntegrityValue2 = pdINTEGRITY_CHECK_VALUE - - /* Define macros that will assert if one of the structure members does not - contain its expected value. */ - #define listTEST_LIST_ITEM_INTEGRITY( pxItem ) configASSERT( ( ( pxItem )->xListItemIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxItem )->xListItemIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) ) - #define listTEST_LIST_INTEGRITY( pxList ) configASSERT( ( ( pxList )->xListIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxList )->xListIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) ) -#endif /* configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES */ - - -/* - * Definition of the only type of object that a list can contain. - */ -struct xLIST_ITEM -{ - listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ - configLIST_VOLATILE TickType_t xItemValue; /*< The value being listed. In most cases this is used to sort the list in descending order. */ - struct xLIST_ITEM * configLIST_VOLATILE pxNext; /*< Pointer to the next ListItem_t in the list. */ - struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; /*< Pointer to the previous ListItem_t in the list. */ - void * pvOwner; /*< Pointer to the object (normally a TCB) that contains the list item. There is therefore a two way link between the object containing the list item and the list item itself. */ - void * configLIST_VOLATILE pvContainer; /*< Pointer to the list in which this list item is placed (if any). */ - listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ -}; -typedef struct xLIST_ITEM ListItem_t; /* For some reason lint wants this as two separate definitions. */ - -struct xMINI_LIST_ITEM -{ - listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ - configLIST_VOLATILE TickType_t xItemValue; - struct xLIST_ITEM * configLIST_VOLATILE pxNext; - struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; -}; -typedef struct xMINI_LIST_ITEM MiniListItem_t; - -/* - * Definition of the type of queue used by the scheduler. - */ -typedef struct xLIST -{ - listFIRST_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ - configLIST_VOLATILE UBaseType_t uxNumberOfItems; - ListItem_t * configLIST_VOLATILE pxIndex; /*< Used to walk through the list. Points to the last item returned by a call to listGET_OWNER_OF_NEXT_ENTRY (). */ - MiniListItem_t xListEnd; /*< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */ - listSECOND_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ -} List_t; - -/* - * Access macro to set the owner of a list item. The owner of a list item - * is the object (usually a TCB) that contains the list item. - * - * \page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER - * \ingroup LinkedList - */ -#define listSET_LIST_ITEM_OWNER( pxListItem, pxOwner ) ( ( pxListItem )->pvOwner = ( void * ) ( pxOwner ) ) - -/* - * Access macro to get the owner of a list item. The owner of a list item - * is the object (usually a TCB) that contains the list item. - * - * \page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER - * \ingroup LinkedList - */ -#define listGET_LIST_ITEM_OWNER( pxListItem ) ( ( pxListItem )->pvOwner ) - -/* - * Access macro to set the value of the list item. In most cases the value is - * used to sort the list in descending order. - * - * \page listSET_LIST_ITEM_VALUE listSET_LIST_ITEM_VALUE - * \ingroup LinkedList - */ -#define listSET_LIST_ITEM_VALUE( pxListItem, xValue ) ( ( pxListItem )->xItemValue = ( xValue ) ) - -/* - * Access macro to retrieve the value of the list item. The value can - * represent anything - for example the priority of a task, or the time at - * which a task should be unblocked. - * - * \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE - * \ingroup LinkedList - */ -#define listGET_LIST_ITEM_VALUE( pxListItem ) ( ( pxListItem )->xItemValue ) - -/* - * Access macro to retrieve the value of the list item at the head of a given - * list. - * - * \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE - * \ingroup LinkedList - */ -#define listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxList ) ( ( ( pxList )->xListEnd ).pxNext->xItemValue ) - -/* - * Return the list item at the head of the list. - * - * \page listGET_HEAD_ENTRY listGET_HEAD_ENTRY - * \ingroup LinkedList - */ -#define listGET_HEAD_ENTRY( pxList ) ( ( ( pxList )->xListEnd ).pxNext ) - -/* - * Return the list item at the head of the list. - * - * \page listGET_NEXT listGET_NEXT - * \ingroup LinkedList - */ -#define listGET_NEXT( pxListItem ) ( ( pxListItem )->pxNext ) - -/* - * Return the list item that marks the end of the list - * - * \page listGET_END_MARKER listGET_END_MARKER - * \ingroup LinkedList - */ -#define listGET_END_MARKER( pxList ) ( ( ListItem_t const * ) ( &( ( pxList )->xListEnd ) ) ) - -/* - * Access macro to determine if a list contains any items. The macro will - * only have the value true if the list is empty. - * - * \page listLIST_IS_EMPTY listLIST_IS_EMPTY - * \ingroup LinkedList - */ -#define listLIST_IS_EMPTY( pxList ) ( ( BaseType_t ) ( ( pxList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ) - -/* - * Access macro to return the number of items in the list. - */ -#define listCURRENT_LIST_LENGTH( pxList ) ( ( pxList )->uxNumberOfItems ) - -/* - * Access function to obtain the owner of the next entry in a list. - * - * The list member pxIndex is used to walk through a list. Calling - * listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list - * and returns that entry's pxOwner parameter. Using multiple calls to this - * function it is therefore possible to move through every item contained in - * a list. - * - * The pxOwner parameter of a list item is a pointer to the object that owns - * the list item. In the scheduler this is normally a task control block. - * The pxOwner parameter effectively creates a two way link between the list - * item and its owner. - * - * @param pxTCB pxTCB is set to the address of the owner of the next list item. - * @param pxList The list from which the next item owner is to be returned. - * - * \page listGET_OWNER_OF_NEXT_ENTRY listGET_OWNER_OF_NEXT_ENTRY - * \ingroup LinkedList - */ -#define listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxList ) \ -{ \ -List_t * const pxConstList = ( pxList ); \ - /* Increment the index to the next item and return the item, ensuring */ \ - /* we don't return the marker used at the end of the list. */ \ - ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext; \ - if( ( void * ) ( pxConstList )->pxIndex == ( void * ) &( ( pxConstList )->xListEnd ) ) \ - { \ - ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext; \ - } \ - ( pxTCB ) = ( pxConstList )->pxIndex->pvOwner; \ -} - - -/* - * Access function to obtain the owner of the first entry in a list. Lists - * are normally sorted in ascending item value order. - * - * This function returns the pxOwner member of the first item in the list. - * The pxOwner parameter of a list item is a pointer to the object that owns - * the list item. In the scheduler this is normally a task control block. - * The pxOwner parameter effectively creates a two way link between the list - * item and its owner. - * - * @param pxList The list from which the owner of the head item is to be - * returned. - * - * \page listGET_OWNER_OF_HEAD_ENTRY listGET_OWNER_OF_HEAD_ENTRY - * \ingroup LinkedList - */ -#define listGET_OWNER_OF_HEAD_ENTRY( pxList ) ( (&( ( pxList )->xListEnd ))->pxNext->pvOwner ) - -/* - * Check to see if a list item is within a list. The list item maintains a - * "container" pointer that points to the list it is in. All this macro does - * is check to see if the container and the list match. - * - * @param pxList The list we want to know if the list item is within. - * @param pxListItem The list item we want to know if is in the list. - * @return pdTRUE if the list item is in the list, otherwise pdFALSE. - */ -#define listIS_CONTAINED_WITHIN( pxList, pxListItem ) ( ( BaseType_t ) ( ( pxListItem )->pvContainer == ( void * ) ( pxList ) ) ) - -/* - * Return the list a list item is contained within (referenced from). - * - * @param pxListItem The list item being queried. - * @return A pointer to the List_t object that references the pxListItem - */ -#define listLIST_ITEM_CONTAINER( pxListItem ) ( ( pxListItem )->pvContainer ) - -/* - * This provides a crude means of knowing if a list has been initialised, as - * pxList->xListEnd.xItemValue is set to portMAX_DELAY by the vListInitialise() - * function. - */ -#define listLIST_IS_INITIALISED( pxList ) ( ( pxList )->xListEnd.xItemValue == portMAX_DELAY ) - -/* - * Must be called before a list is used! This initialises all the members - * of the list structure and inserts the xListEnd item into the list as a - * marker to the back of the list. - * - * @param pxList Pointer to the list being initialised. - * - * \page vListInitialise vListInitialise - * \ingroup LinkedList - */ -void vListInitialise( List_t * const pxList ) PRIVILEGED_FUNCTION; - -/* - * Must be called before a list item is used. This sets the list container to - * null so the item does not think that it is already contained in a list. - * - * @param pxItem Pointer to the list item being initialised. - * - * \page vListInitialiseItem vListInitialiseItem - * \ingroup LinkedList - */ -void vListInitialiseItem( ListItem_t * const pxItem ) PRIVILEGED_FUNCTION; - -/* - * Insert a list item into a list. The item will be inserted into the list in - * a position determined by its item value (descending item value order). - * - * @param pxList The list into which the item is to be inserted. - * - * @param pxNewListItem The item that is to be placed in the list. - * - * \page vListInsert vListInsert - * \ingroup LinkedList - */ -void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION; - -/* - * Insert a list item into a list. The item will be inserted in a position - * such that it will be the last item within the list returned by multiple - * calls to listGET_OWNER_OF_NEXT_ENTRY. - * - * The list member pxIndex is used to walk through a list. Calling - * listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list. - * Placing an item in a list using vListInsertEnd effectively places the item - * in the list position pointed to by pxIndex. This means that every other - * item within the list will be returned by listGET_OWNER_OF_NEXT_ENTRY before - * the pxIndex parameter again points to the item being inserted. - * - * @param pxList The list into which the item is to be inserted. - * - * @param pxNewListItem The list item to be inserted into the list. - * - * \page vListInsertEnd vListInsertEnd - * \ingroup LinkedList - */ -void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION; - -/* - * Remove an item from a list. The list item has a pointer to the list that - * it is in, so only the list item need be passed into the function. - * - * @param uxListRemove The item to be removed. The item will remove itself from - * the list pointed to by it's pxContainer parameter. - * - * @return The number of items that remain in the list after the list item has - * been removed. - * - * \page uxListRemove uxListRemove - * \ingroup LinkedList - */ -UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) PRIVILEGED_FUNCTION; - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/mpu_prototypes.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/mpu_prototypes.h deleted file mode 100644 index 8f7500b..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/mpu_prototypes.h +++ /dev/null @@ -1,177 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -/* - * When the MPU is used the standard (non MPU) API functions are mapped to - * equivalents that start "MPU_", the prototypes for which are defined in this - * header files. This will cause the application code to call the MPU_ version - * which wraps the non-MPU version with privilege promoting then demoting code, - * so the kernel code always runs will full privileges. - */ - - -#ifndef MPU_PROTOTYPES_H -#define MPU_PROTOTYPES_H - -/* MPU versions of tasks.h API function. */ -BaseType_t MPU_xTaskCreate( TaskFunction_t pxTaskCode, const char * const pcName, const uint16_t usStackDepth, void * const pvParameters, UBaseType_t uxPriority, TaskHandle_t * const pxCreatedTask ); -TaskHandle_t MPU_xTaskCreateStatic( TaskFunction_t pxTaskCode, const char * const pcName, const uint32_t ulStackDepth, void * const pvParameters, UBaseType_t uxPriority, StackType_t * const puxStackBuffer, StaticTask_t * const pxTaskBuffer ); -BaseType_t MPU_xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ); -void MPU_vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions ); -void MPU_vTaskDelete( TaskHandle_t xTaskToDelete ); -void MPU_vTaskDelay( const TickType_t xTicksToDelay ); -void MPU_vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement ); -BaseType_t MPU_xTaskAbortDelay( TaskHandle_t xTask ); -UBaseType_t MPU_uxTaskPriorityGet( TaskHandle_t xTask ); -eTaskState MPU_eTaskGetState( TaskHandle_t xTask ); -void MPU_vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState ); -void MPU_vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority ); -void MPU_vTaskSuspend( TaskHandle_t xTaskToSuspend ); -void MPU_vTaskResume( TaskHandle_t xTaskToResume ); -void MPU_vTaskStartScheduler( void ); -void MPU_vTaskSuspendAll( void ); -BaseType_t MPU_xTaskResumeAll( void ); -TickType_t MPU_xTaskGetTickCount( void ); -UBaseType_t MPU_uxTaskGetNumberOfTasks( void ); -char * MPU_pcTaskGetName( TaskHandle_t xTaskToQuery ); -TaskHandle_t MPU_xTaskGetHandle( const char *pcNameToQuery ); -UBaseType_t MPU_uxTaskGetStackHighWaterMark( TaskHandle_t xTask ); -void MPU_vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction ); -TaskHookFunction_t MPU_xTaskGetApplicationTaskTag( TaskHandle_t xTask ); -void MPU_vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue ); -void * MPU_pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseType_t xIndex ); -BaseType_t MPU_xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter ); -TaskHandle_t MPU_xTaskGetIdleTaskHandle( void ); -UBaseType_t MPU_uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime ); -void MPU_vTaskList( char * pcWriteBuffer ); -void MPU_vTaskGetRunTimeStats( char *pcWriteBuffer ); -BaseType_t MPU_xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue ); -BaseType_t MPU_xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ); -uint32_t MPU_ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ); -BaseType_t MPU_xTaskNotifyStateClear( TaskHandle_t xTask ); -BaseType_t MPU_xTaskIncrementTick( void ); -TaskHandle_t MPU_xTaskGetCurrentTaskHandle( void ); -void MPU_vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ); -BaseType_t MPU_xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait ); -void MPU_vTaskMissedYield( void ); -BaseType_t MPU_xTaskGetSchedulerState( void ); - -/* MPU versions of queue.h API function. */ -BaseType_t MPU_xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ); -BaseType_t MPU_xQueueGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, const BaseType_t xJustPeek ); -UBaseType_t MPU_uxQueueMessagesWaiting( const QueueHandle_t xQueue ); -UBaseType_t MPU_uxQueueSpacesAvailable( const QueueHandle_t xQueue ); -void MPU_vQueueDelete( QueueHandle_t xQueue ); -QueueHandle_t MPU_xQueueCreateMutex( const uint8_t ucQueueType ); -QueueHandle_t MPU_xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ); -QueueHandle_t MPU_xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ); -QueueHandle_t MPU_xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ); -void* MPU_xQueueGetMutexHolder( QueueHandle_t xSemaphore ); -BaseType_t MPU_xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ); -BaseType_t MPU_xQueueGiveMutexRecursive( QueueHandle_t pxMutex ); -void MPU_vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcName ); -void MPU_vQueueUnregisterQueue( QueueHandle_t xQueue ); -const char * MPU_pcQueueGetName( QueueHandle_t xQueue ); -QueueHandle_t MPU_xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType ); -QueueHandle_t MPU_xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ); -QueueSetHandle_t MPU_xQueueCreateSet( const UBaseType_t uxEventQueueLength ); -BaseType_t MPU_xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ); -BaseType_t MPU_xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ); -QueueSetMemberHandle_t MPU_xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait ); -BaseType_t MPU_xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue ); -void MPU_vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ); -UBaseType_t MPU_uxQueueGetQueueNumber( QueueHandle_t xQueue ); -uint8_t MPU_ucQueueGetQueueType( QueueHandle_t xQueue ); - -/* MPU versions of timers.h API function. */ -TimerHandle_t MPU_xTimerCreate( const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void * const pvTimerID, TimerCallbackFunction_t pxCallbackFunction ); -TimerHandle_t MPU_xTimerCreateStatic( const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void * const pvTimerID, TimerCallbackFunction_t pxCallbackFunction, StaticTimer_t *pxTimerBuffer ); -void * MPU_pvTimerGetTimerID( const TimerHandle_t xTimer ); -void MPU_vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ); -BaseType_t MPU_xTimerIsTimerActive( TimerHandle_t xTimer ); -TaskHandle_t MPU_xTimerGetTimerDaemonTaskHandle( void ); -BaseType_t MPU_xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait ); -const char * MPU_pcTimerGetName( TimerHandle_t xTimer ); -TickType_t MPU_xTimerGetPeriod( TimerHandle_t xTimer ); -TickType_t MPU_xTimerGetExpiryTime( TimerHandle_t xTimer ); -BaseType_t MPU_xTimerCreateTimerTask( void ); -BaseType_t MPU_xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait ); - -/* MPU versions of event_group.h API function. */ -EventGroupHandle_t MPU_xEventGroupCreate( void ); -EventGroupHandle_t MPU_xEventGroupCreateStatic( StaticEventGroup_t *pxEventGroupBuffer ); -EventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait ); -EventBits_t MPU_xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ); -EventBits_t MPU_xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ); -EventBits_t MPU_xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait ); -void MPU_vEventGroupDelete( EventGroupHandle_t xEventGroup ); -UBaseType_t MPU_uxEventGroupGetNumber( void* xEventGroup ); - -#endif /* MPU_PROTOTYPES_H */ - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/mpu_wrappers.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/mpu_wrappers.h deleted file mode 100644 index 78f5a9a..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/mpu_wrappers.h +++ /dev/null @@ -1,201 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -#ifndef MPU_WRAPPERS_H -#define MPU_WRAPPERS_H - -/* This file redefines API functions to be called through a wrapper macro, but -only for ports that are using the MPU. */ -#ifdef portUSING_MPU_WRAPPERS - - /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE will be defined when this file is - included from queue.c or task.c to prevent it from having an effect within - those files. */ - #ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE - - /* - * Map standard (non MPU) API functions to equivalents that start - * "MPU_". This will cause the application code to call the MPU_ - * version, which wraps the non-MPU version with privilege promoting - * then demoting code, so the kernel code always runs will full - * privileges. - */ - - /* Map standard tasks.h API functions to the MPU equivalents. */ - #define xTaskCreate MPU_xTaskCreate - #define xTaskCreateStatic MPU_xTaskCreateStatic - #define xTaskCreateRestricted MPU_xTaskCreateRestricted - #define vTaskAllocateMPURegions MPU_vTaskAllocateMPURegions - #define vTaskDelete MPU_vTaskDelete - #define vTaskDelay MPU_vTaskDelay - #define vTaskDelayUntil MPU_vTaskDelayUntil - #define xTaskAbortDelay MPU_xTaskAbortDelay - #define uxTaskPriorityGet MPU_uxTaskPriorityGet - #define eTaskGetState MPU_eTaskGetState - #define vTaskGetInfo MPU_vTaskGetInfo - #define vTaskPrioritySet MPU_vTaskPrioritySet - #define vTaskSuspend MPU_vTaskSuspend - #define vTaskResume MPU_vTaskResume - #define vTaskSuspendAll MPU_vTaskSuspendAll - #define xTaskResumeAll MPU_xTaskResumeAll - #define xTaskGetTickCount MPU_xTaskGetTickCount - #define uxTaskGetNumberOfTasks MPU_uxTaskGetNumberOfTasks - #define pcTaskGetName MPU_pcTaskGetName - #define xTaskGetHandle MPU_xTaskGetHandle - #define uxTaskGetStackHighWaterMark MPU_uxTaskGetStackHighWaterMark - #define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag - #define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag - #define vTaskSetThreadLocalStoragePointer MPU_vTaskSetThreadLocalStoragePointer - #define pvTaskGetThreadLocalStoragePointer MPU_pvTaskGetThreadLocalStoragePointer - #define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook - #define xTaskGetIdleTaskHandle MPU_xTaskGetIdleTaskHandle - #define uxTaskGetSystemState MPU_uxTaskGetSystemState - #define vTaskList MPU_vTaskList - #define vTaskGetRunTimeStats MPU_vTaskGetRunTimeStats - #define xTaskGenericNotify MPU_xTaskGenericNotify - #define xTaskNotifyWait MPU_xTaskNotifyWait - #define ulTaskNotifyTake MPU_ulTaskNotifyTake - #define xTaskNotifyStateClear MPU_xTaskNotifyStateClear - - #define xTaskGetCurrentTaskHandle MPU_xTaskGetCurrentTaskHandle - #define vTaskSetTimeOutState MPU_vTaskSetTimeOutState - #define xTaskCheckForTimeOut MPU_xTaskCheckForTimeOut - #define xTaskGetSchedulerState MPU_xTaskGetSchedulerState - - /* Map standard queue.h API functions to the MPU equivalents. */ - #define xQueueGenericSend MPU_xQueueGenericSend - #define xQueueGenericReceive MPU_xQueueGenericReceive - #define uxQueueMessagesWaiting MPU_uxQueueMessagesWaiting - #define uxQueueSpacesAvailable MPU_uxQueueSpacesAvailable - #define vQueueDelete MPU_vQueueDelete - #define xQueueCreateMutex MPU_xQueueCreateMutex - #define xQueueCreateMutexStatic MPU_xQueueCreateMutexStatic - #define xQueueCreateCountingSemaphore MPU_xQueueCreateCountingSemaphore - #define xQueueCreateCountingSemaphoreStatic MPU_xQueueCreateCountingSemaphoreStatic - #define xQueueGetMutexHolder MPU_xQueueGetMutexHolder - #define xQueueTakeMutexRecursive MPU_xQueueTakeMutexRecursive - #define xQueueGiveMutexRecursive MPU_xQueueGiveMutexRecursive - #define xQueueGenericCreate MPU_xQueueGenericCreate - #define xQueueGenericCreateStatic MPU_xQueueGenericCreateStatic - #define xQueueCreateSet MPU_xQueueCreateSet - #define xQueueAddToSet MPU_xQueueAddToSet - #define xQueueRemoveFromSet MPU_xQueueRemoveFromSet - #define xQueueSelectFromSet MPU_xQueueSelectFromSet - #define xQueueGenericReset MPU_xQueueGenericReset - - #if( configQUEUE_REGISTRY_SIZE > 0 ) - #define vQueueAddToRegistry MPU_vQueueAddToRegistry - #define vQueueUnregisterQueue MPU_vQueueUnregisterQueue - #define pcQueueGetName MPU_pcQueueGetName - #endif - - /* Map standard timer.h API functions to the MPU equivalents. */ - #define xTimerCreate MPU_xTimerCreate - #define xTimerCreateStatic MPU_xTimerCreateStatic - #define pvTimerGetTimerID MPU_pvTimerGetTimerID - #define vTimerSetTimerID MPU_vTimerSetTimerID - #define xTimerIsTimerActive MPU_xTimerIsTimerActive - #define xTimerGetTimerDaemonTaskHandle MPU_xTimerGetTimerDaemonTaskHandle - #define xTimerPendFunctionCall MPU_xTimerPendFunctionCall - #define pcTimerGetName MPU_pcTimerGetName - #define xTimerGetPeriod MPU_xTimerGetPeriod - #define xTimerGetExpiryTime MPU_xTimerGetExpiryTime - #define xTimerGenericCommand MPU_xTimerGenericCommand - - /* Map standard event_group.h API functions to the MPU equivalents. */ - #define xEventGroupCreate MPU_xEventGroupCreate - #define xEventGroupCreateStatic MPU_xEventGroupCreateStatic - #define xEventGroupWaitBits MPU_xEventGroupWaitBits - #define xEventGroupClearBits MPU_xEventGroupClearBits - #define xEventGroupSetBits MPU_xEventGroupSetBits - #define xEventGroupSync MPU_xEventGroupSync - #define vEventGroupDelete MPU_vEventGroupDelete - - /* Remove the privileged function macro. */ - #define PRIVILEGED_FUNCTION - - #else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */ - - /* Ensure API functions go in the privileged execution section. */ - #define PRIVILEGED_FUNCTION __attribute__((section("privileged_functions"))) - #define PRIVILEGED_DATA __attribute__((section("privileged_data"))) - - #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */ - -#else /* portUSING_MPU_WRAPPERS */ - - #define PRIVILEGED_FUNCTION - #define PRIVILEGED_DATA - #define portUSING_MPU_WRAPPERS 0 - -#endif /* portUSING_MPU_WRAPPERS */ - - -#endif /* MPU_WRAPPERS_H */ - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/portable.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/portable.h deleted file mode 100644 index 979dcdc..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/portable.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -/*----------------------------------------------------------- - * Portable layer API. Each function must be defined for each port. - *----------------------------------------------------------*/ - -#ifndef PORTABLE_H -#define PORTABLE_H - -/* Each FreeRTOS port has a unique portmacro.h header file. Originally a -pre-processor definition was used to ensure the pre-processor found the correct -portmacro.h file for the port being used. That scheme was deprecated in favour -of setting the compiler's include path such that it found the correct -portmacro.h file - removing the need for the constant and allowing the -portmacro.h file to be located anywhere in relation to the port being used. -Purely for reasons of backward compatibility the old method is still valid, but -to make it clear that new projects should not use it, support for the port -specific constants has been moved into the deprecated_definitions.h header -file. */ -#include "deprecated_definitions.h" - -/* If portENTER_CRITICAL is not defined then including deprecated_definitions.h -did not result in a portmacro.h header file being included - and it should be -included here. In this case the path to the correct portmacro.h header file -must be set in the compiler's include path. */ -#ifndef portENTER_CRITICAL - #include "portmacro.h" -#endif - -#if portBYTE_ALIGNMENT == 32 - #define portBYTE_ALIGNMENT_MASK ( 0x001f ) -#endif - -#if portBYTE_ALIGNMENT == 16 - #define portBYTE_ALIGNMENT_MASK ( 0x000f ) -#endif - -#if portBYTE_ALIGNMENT == 8 - #define portBYTE_ALIGNMENT_MASK ( 0x0007 ) -#endif - -#if portBYTE_ALIGNMENT == 4 - #define portBYTE_ALIGNMENT_MASK ( 0x0003 ) -#endif - -#if portBYTE_ALIGNMENT == 2 - #define portBYTE_ALIGNMENT_MASK ( 0x0001 ) -#endif - -#if portBYTE_ALIGNMENT == 1 - #define portBYTE_ALIGNMENT_MASK ( 0x0000 ) -#endif - -#ifndef portBYTE_ALIGNMENT_MASK - #error "Invalid portBYTE_ALIGNMENT definition" -#endif - -#ifndef portNUM_CONFIGURABLE_REGIONS - #define portNUM_CONFIGURABLE_REGIONS 1 -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#include "mpu_wrappers.h" - -/* - * Setup the stack of a new task so it is ready to be placed under the - * scheduler control. The registers have to be placed on the stack in - * the order that the port expects to find them. - * - */ -#if( portUSING_MPU_WRAPPERS == 1 ) - StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION; -#else - StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) PRIVILEGED_FUNCTION; -#endif - -/* Used by heap_5.c. */ -typedef struct HeapRegion -{ - uint8_t *pucStartAddress; - size_t xSizeInBytes; -} HeapRegion_t; - -/* - * Used to define multiple heap regions for use by heap_5.c. This function - * must be called before any calls to pvPortMalloc() - not creating a task, - * queue, semaphore, mutex, software timer, event group, etc. will result in - * pvPortMalloc being called. - * - * pxHeapRegions passes in an array of HeapRegion_t structures - each of which - * defines a region of memory that can be used as the heap. The array is - * terminated by a HeapRegions_t structure that has a size of 0. The region - * with the lowest start address must appear first in the array. - */ -//static void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ) PRIVILEGED_FUNCTION; - - -/* - * Map to the memory management routines required for the port. - */ -void *pvPortMalloc( size_t xSize ) PRIVILEGED_FUNCTION; -void vPortFree( void *pv ) PRIVILEGED_FUNCTION; -void vPortInitialiseBlocks( void ) PRIVILEGED_FUNCTION; -size_t xPortGetFreeHeapSize( void ) PRIVILEGED_FUNCTION; -size_t xPortGetMinimumEverFreeHeapSize( void ) PRIVILEGED_FUNCTION; - -/* - * Setup the hardware ready for the scheduler to take control. This generally - * sets up a tick interrupt and sets timers for the correct tick frequency. - */ -BaseType_t xPortStartScheduler( void ) PRIVILEGED_FUNCTION; - -/* - * Undo any hardware/ISR setup that was performed by xPortStartScheduler() so - * the hardware is left in its original condition after the scheduler stops - * executing. - */ -void vPortEndScheduler( void ) PRIVILEGED_FUNCTION; - -/* - * The structures and methods of manipulating the MPU are contained within the - * port layer. - * - * Fills the xMPUSettings structure with the memory region information - * contained in xRegions. - */ -#if( portUSING_MPU_WRAPPERS == 1 ) - struct xMEMORY_REGION; - void vPortStoreTaskMPUSettings( xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION * const xRegions, StackType_t *pxBottomOfStack, uint32_t ulStackDepth ) PRIVILEGED_FUNCTION; -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* PORTABLE_H */ - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/projdefs.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/projdefs.h deleted file mode 100644 index 0b63fd8..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/projdefs.h +++ /dev/null @@ -1,161 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -#ifndef PROJDEFS_H -#define PROJDEFS_H - -/* - * Defines the prototype to which task functions must conform. Defined in this - * file to ensure the type is known before portable.h is included. - */ -typedef void (*TaskFunction_t)( void * ); - -/* Converts a time in milliseconds to a time in ticks. This macro can be -overridden by a macro of the same name defined in FreeRTOSConfig.h in case the -definition here is not suitable for your application. */ -#ifndef pdMS_TO_TICKS - #define pdMS_TO_TICKS( xTimeInMs ) ( ( TickType_t ) ( ( ( TickType_t ) ( xTimeInMs ) * ( TickType_t ) configTICK_RATE_HZ ) / ( TickType_t ) 1000 ) ) -#endif - -#define pdFALSE ( ( BaseType_t ) 0 ) -#define pdTRUE ( ( BaseType_t ) 1 ) - -#define pdPASS ( pdTRUE ) -#define pdFAIL ( pdFALSE ) -#define errQUEUE_EMPTY ( ( BaseType_t ) 0 ) -#define errQUEUE_FULL ( ( BaseType_t ) 0 ) - -/* FreeRTOS error definitions. */ -#define errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY ( -1 ) -#define errQUEUE_BLOCKED ( -4 ) -#define errQUEUE_YIELD ( -5 ) - -/* Macros used for basic data corruption checks. */ -#ifndef configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES - #define configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES 0 -#endif - -#if( configUSE_16_BIT_TICKS == 1 ) - #define pdINTEGRITY_CHECK_VALUE 0x5a5a -#else - #define pdINTEGRITY_CHECK_VALUE 0x5a5a5a5aUL -#endif - -/* The following errno values are used by FreeRTOS+ components, not FreeRTOS -itself. */ -#define pdFREERTOS_ERRNO_NONE 0 /* No errors */ -#define pdFREERTOS_ERRNO_ENOENT 2 /* No such file or directory */ -#define pdFREERTOS_ERRNO_EINTR 4 /* Interrupted system call */ -#define pdFREERTOS_ERRNO_EIO 5 /* I/O error */ -#define pdFREERTOS_ERRNO_ENXIO 6 /* No such device or address */ -#define pdFREERTOS_ERRNO_EBADF 9 /* Bad file number */ -#define pdFREERTOS_ERRNO_EAGAIN 11 /* No more processes */ -#define pdFREERTOS_ERRNO_EWOULDBLOCK 11 /* Operation would block */ -#define pdFREERTOS_ERRNO_ENOMEM 12 /* Not enough memory */ -#define pdFREERTOS_ERRNO_EACCES 13 /* Permission denied */ -#define pdFREERTOS_ERRNO_EFAULT 14 /* Bad address */ -#define pdFREERTOS_ERRNO_EBUSY 16 /* Mount device busy */ -#define pdFREERTOS_ERRNO_EEXIST 17 /* File exists */ -#define pdFREERTOS_ERRNO_EXDEV 18 /* Cross-device link */ -#define pdFREERTOS_ERRNO_ENODEV 19 /* No such device */ -#define pdFREERTOS_ERRNO_ENOTDIR 20 /* Not a directory */ -#define pdFREERTOS_ERRNO_EISDIR 21 /* Is a directory */ -#define pdFREERTOS_ERRNO_EINVAL 22 /* Invalid argument */ -#define pdFREERTOS_ERRNO_ENOSPC 28 /* No space left on device */ -#define pdFREERTOS_ERRNO_ESPIPE 29 /* Illegal seek */ -#define pdFREERTOS_ERRNO_EROFS 30 /* Read only file system */ -#define pdFREERTOS_ERRNO_EUNATCH 42 /* Protocol driver not attached */ -#define pdFREERTOS_ERRNO_EBADE 50 /* Invalid exchange */ -#define pdFREERTOS_ERRNO_EFTYPE 79 /* Inappropriate file type or format */ -#define pdFREERTOS_ERRNO_ENMFILE 89 /* No more files */ -#define pdFREERTOS_ERRNO_ENOTEMPTY 90 /* Directory not empty */ -#define pdFREERTOS_ERRNO_ENAMETOOLONG 91 /* File or path name too long */ -#define pdFREERTOS_ERRNO_EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ -#define pdFREERTOS_ERRNO_ENOBUFS 105 /* No buffer space available */ -#define pdFREERTOS_ERRNO_ENOPROTOOPT 109 /* Protocol not available */ -#define pdFREERTOS_ERRNO_EADDRINUSE 112 /* Address already in use */ -#define pdFREERTOS_ERRNO_ETIMEDOUT 116 /* Connection timed out */ -#define pdFREERTOS_ERRNO_EINPROGRESS 119 /* Connection already in progress */ -#define pdFREERTOS_ERRNO_EALREADY 120 /* Socket already connected */ -#define pdFREERTOS_ERRNO_EADDRNOTAVAIL 125 /* Address not available */ -#define pdFREERTOS_ERRNO_EISCONN 127 /* Socket is already connected */ -#define pdFREERTOS_ERRNO_ENOTCONN 128 /* Socket is not connected */ -#define pdFREERTOS_ERRNO_ENOMEDIUM 135 /* No medium inserted */ -#define pdFREERTOS_ERRNO_EILSEQ 138 /* An invalid UTF-16 sequence was encountered. */ -#define pdFREERTOS_ERRNO_ECANCELED 140 /* Operation canceled. */ - -/* The following endian values are used by FreeRTOS+ components, not FreeRTOS -itself. */ -#define pdFREERTOS_LITTLE_ENDIAN 0 -#define pdFREERTOS_BIG_ENDIAN 1 - -#endif /* PROJDEFS_H */ - - - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/queue.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/queue.h deleted file mode 100644 index 30be360..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/queue.h +++ /dev/null @@ -1,1798 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - - -#ifndef QUEUE_H -#define QUEUE_H - -#ifndef INC_FREERTOS_H - #error "include FreeRTOS.h" must appear in source files before "include queue.h" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * Type by which queues are referenced. For example, a call to xQueueCreate() - * returns an QueueHandle_t variable that can then be used as a parameter to - * xQueueSend(), xQueueReceive(), etc. - */ -typedef void * QueueHandle_t; - -/** - * Type by which queue sets are referenced. For example, a call to - * xQueueCreateSet() returns an xQueueSet variable that can then be used as a - * parameter to xQueueSelectFromSet(), xQueueAddToSet(), etc. - */ -typedef void * QueueSetHandle_t; - -/** - * Queue sets can contain both queues and semaphores, so the - * QueueSetMemberHandle_t is defined as a type to be used where a parameter or - * return value can be either an QueueHandle_t or an SemaphoreHandle_t. - */ -typedef void * QueueSetMemberHandle_t; - -/* For internal use only. */ -#define queueSEND_TO_BACK ( ( BaseType_t ) 0 ) -#define queueSEND_TO_FRONT ( ( BaseType_t ) 1 ) -#define queueOVERWRITE ( ( BaseType_t ) 2 ) - -/* For internal use only. These definitions *must* match those in queue.c. */ -#define queueQUEUE_TYPE_BASE ( ( uint8_t ) 0U ) -#define queueQUEUE_TYPE_SET ( ( uint8_t ) 0U ) -#define queueQUEUE_TYPE_MUTEX ( ( uint8_t ) 1U ) -#define queueQUEUE_TYPE_COUNTING_SEMAPHORE ( ( uint8_t ) 2U ) -#define queueQUEUE_TYPE_BINARY_SEMAPHORE ( ( uint8_t ) 3U ) -#define queueQUEUE_TYPE_RECURSIVE_MUTEX ( ( uint8_t ) 4U ) - -/** - * queue. h - *
- QueueHandle_t xQueueCreate(
-							  UBaseType_t uxQueueLength,
-							  UBaseType_t uxItemSize
-						  );
- * 
- * - * Creates a new queue instance, and returns a handle by which the new queue - * can be referenced. - * - * Internally, within the FreeRTOS implementation, queues use two blocks of - * memory. The first block is used to hold the queue's data structures. The - * second block is used to hold items placed into the queue. If a queue is - * created using xQueueCreate() then both blocks of memory are automatically - * dynamically allocated inside the xQueueCreate() function. (see - * http://www.freertos.org/a00111.html). If a queue is created using - * xQueueCreateStatic() then the application writer must provide the memory that - * will get used by the queue. xQueueCreateStatic() therefore allows a queue to - * be created without using any dynamic memory allocation. - * - * http://www.FreeRTOS.org/Embedded-RTOS-Queues.html - * - * @param uxQueueLength The maximum number of items that the queue can contain. - * - * @param uxItemSize The number of bytes each item in the queue will require. - * Items are queued by copy, not by reference, so this is the number of bytes - * that will be copied for each posted item. Each item on the queue must be - * the same size. - * - * @return If the queue is successfully create then a handle to the newly - * created queue is returned. If the queue cannot be created then 0 is - * returned. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- };
-
- void vATask( void *pvParameters )
- {
- QueueHandle_t xQueue1, xQueue2;
-
-	// Create a queue capable of containing 10 uint32_t values.
-	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
-	if( xQueue1 == 0 )
-	{
-		// Queue was not created and must not be used.
-	}
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-	if( xQueue2 == 0 )
-	{
-		// Queue was not created and must not be used.
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueCreate xQueueCreate - * \ingroup QueueManagement - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define xQueueCreate( uxQueueLength, uxItemSize ) xQueueGenericCreate( ( uxQueueLength ), ( uxItemSize ), ( queueQUEUE_TYPE_BASE ) ) -#endif - -/** - * queue. h - *
- QueueHandle_t xQueueCreateStatic(
-							  UBaseType_t uxQueueLength,
-							  UBaseType_t uxItemSize,
-							  uint8_t *pucQueueStorageBuffer,
-							  StaticQueue_t *pxQueueBuffer
-						  );
- * 
- * - * Creates a new queue instance, and returns a handle by which the new queue - * can be referenced. - * - * Internally, within the FreeRTOS implementation, queues use two blocks of - * memory. The first block is used to hold the queue's data structures. The - * second block is used to hold items placed into the queue. If a queue is - * created using xQueueCreate() then both blocks of memory are automatically - * dynamically allocated inside the xQueueCreate() function. (see - * http://www.freertos.org/a00111.html). If a queue is created using - * xQueueCreateStatic() then the application writer must provide the memory that - * will get used by the queue. xQueueCreateStatic() therefore allows a queue to - * be created without using any dynamic memory allocation. - * - * http://www.FreeRTOS.org/Embedded-RTOS-Queues.html - * - * @param uxQueueLength The maximum number of items that the queue can contain. - * - * @param uxItemSize The number of bytes each item in the queue will require. - * Items are queued by copy, not by reference, so this is the number of bytes - * that will be copied for each posted item. Each item on the queue must be - * the same size. - * - * @param pucQueueStorageBuffer If uxItemSize is not zero then - * pucQueueStorageBuffer must point to a uint8_t array that is at least large - * enough to hold the maximum number of items that can be in the queue at any - * one time - which is ( uxQueueLength * uxItemsSize ) bytes. If uxItemSize is - * zero then pucQueueStorageBuffer can be NULL. - * - * @param pxQueueBuffer Must point to a variable of type StaticQueue_t, which - * will be used to hold the queue's data structure. - * - * @return If the queue is created then a handle to the created queue is - * returned. If pxQueueBuffer is NULL then NULL is returned. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- };
-
- #define QUEUE_LENGTH 10
- #define ITEM_SIZE sizeof( uint32_t )
-
- // xQueueBuffer will hold the queue structure.
- StaticQueue_t xQueueBuffer;
-
- // ucQueueStorage will hold the items posted to the queue.  Must be at least
- // [(queue length) * ( queue item size)] bytes long.
- uint8_t ucQueueStorage[ QUEUE_LENGTH * ITEM_SIZE ];
-
- void vATask( void *pvParameters )
- {
- QueueHandle_t xQueue1;
-
-	// Create a queue capable of containing 10 uint32_t values.
-	xQueue1 = xQueueCreate( QUEUE_LENGTH, // The number of items the queue can hold.
-							ITEM_SIZE	  // The size of each item in the queue
-							&( ucQueueStorage[ 0 ] ), // The buffer that will hold the items in the queue.
-							&xQueueBuffer ); // The buffer that will hold the queue structure.
-
-	// The queue is guaranteed to be created successfully as no dynamic memory
-	// allocation is used.  Therefore xQueue1 is now a handle to a valid queue.
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueCreateStatic xQueueCreateStatic - * \ingroup QueueManagement - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - #define xQueueCreateStatic( uxQueueLength, uxItemSize, pucQueueStorage, pxQueueBuffer ) xQueueGenericCreateStatic( ( uxQueueLength ), ( uxItemSize ), ( pucQueueStorage ), ( pxQueueBuffer ), ( queueQUEUE_TYPE_BASE ) ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * queue. h - *
- BaseType_t xQueueSendToToFront(
-								   QueueHandle_t	xQueue,
-								   const void		*pvItemToQueue,
-								   TickType_t		xTicksToWait
-							   );
- * 
- * - * This is a macro that calls xQueueGenericSend(). - * - * Post an item to the front of a queue. The item is queued by copy, not by - * reference. This function must not be called from an interrupt service - * routine. See xQueueSendFromISR () for an alternative which may be used - * in an ISR. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for space to become available on the queue, should it already - * be full. The call will return immediately if this is set to 0 and the - * queue is full. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. - * - * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- } xMessage;
-
- uint32_t ulVar = 10UL;
-
- void vATask( void *pvParameters )
- {
- QueueHandle_t xQueue1, xQueue2;
- struct AMessage *pxMessage;
-
-	// Create a queue capable of containing 10 uint32_t values.
-	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-
-	// ...
-
-	if( xQueue1 != 0 )
-	{
-		// Send an uint32_t.  Wait for 10 ticks for space to become
-		// available if necessary.
-		if( xQueueSendToFront( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS )
-		{
-			// Failed to post the message, even after 10 ticks.
-		}
-	}
-
-	if( xQueue2 != 0 )
-	{
-		// Send a pointer to a struct AMessage object.  Don't block if the
-		// queue is already full.
-		pxMessage = & xMessage;
-		xQueueSendToFront( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 );
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueSend xQueueSend - * \ingroup QueueManagement - */ -#define xQueueSendToFront( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_FRONT ) - -/** - * queue. h - *
- BaseType_t xQueueSendToBack(
-								   QueueHandle_t	xQueue,
-								   const void		*pvItemToQueue,
-								   TickType_t		xTicksToWait
-							   );
- * 
- * - * This is a macro that calls xQueueGenericSend(). - * - * Post an item to the back of a queue. The item is queued by copy, not by - * reference. This function must not be called from an interrupt service - * routine. See xQueueSendFromISR () for an alternative which may be used - * in an ISR. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for space to become available on the queue, should it already - * be full. The call will return immediately if this is set to 0 and the queue - * is full. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. - * - * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- } xMessage;
-
- uint32_t ulVar = 10UL;
-
- void vATask( void *pvParameters )
- {
- QueueHandle_t xQueue1, xQueue2;
- struct AMessage *pxMessage;
-
-	// Create a queue capable of containing 10 uint32_t values.
-	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-
-	// ...
-
-	if( xQueue1 != 0 )
-	{
-		// Send an uint32_t.  Wait for 10 ticks for space to become
-		// available if necessary.
-		if( xQueueSendToBack( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS )
-		{
-			// Failed to post the message, even after 10 ticks.
-		}
-	}
-
-	if( xQueue2 != 0 )
-	{
-		// Send a pointer to a struct AMessage object.  Don't block if the
-		// queue is already full.
-		pxMessage = & xMessage;
-		xQueueSendToBack( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 );
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueSend xQueueSend - * \ingroup QueueManagement - */ -#define xQueueSendToBack( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK ) - -/** - * queue. h - *
- BaseType_t xQueueSend(
-							  QueueHandle_t xQueue,
-							  const void * pvItemToQueue,
-							  TickType_t xTicksToWait
-						 );
- * 
- * - * This is a macro that calls xQueueGenericSend(). It is included for - * backward compatibility with versions of FreeRTOS.org that did not - * include the xQueueSendToFront() and xQueueSendToBack() macros. It is - * equivalent to xQueueSendToBack(). - * - * Post an item on a queue. The item is queued by copy, not by reference. - * This function must not be called from an interrupt service routine. - * See xQueueSendFromISR () for an alternative which may be used in an ISR. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for space to become available on the queue, should it already - * be full. The call will return immediately if this is set to 0 and the - * queue is full. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. - * - * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- } xMessage;
-
- uint32_t ulVar = 10UL;
-
- void vATask( void *pvParameters )
- {
- QueueHandle_t xQueue1, xQueue2;
- struct AMessage *pxMessage;
-
-	// Create a queue capable of containing 10 uint32_t values.
-	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-
-	// ...
-
-	if( xQueue1 != 0 )
-	{
-		// Send an uint32_t.  Wait for 10 ticks for space to become
-		// available if necessary.
-		if( xQueueSend( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS )
-		{
-			// Failed to post the message, even after 10 ticks.
-		}
-	}
-
-	if( xQueue2 != 0 )
-	{
-		// Send a pointer to a struct AMessage object.  Don't block if the
-		// queue is already full.
-		pxMessage = & xMessage;
-		xQueueSend( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 );
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueSend xQueueSend - * \ingroup QueueManagement - */ -#define xQueueSend( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK ) - -/** - * queue. h - *
- BaseType_t xQueueOverwrite(
-							  QueueHandle_t xQueue,
-							  const void * pvItemToQueue
-						 );
- * 
- * - * Only for use with queues that have a length of one - so the queue is either - * empty or full. - * - * Post an item on a queue. If the queue is already full then overwrite the - * value held in the queue. The item is queued by copy, not by reference. - * - * This function must not be called from an interrupt service routine. - * See xQueueOverwriteFromISR () for an alternative which may be used in an ISR. - * - * @param xQueue The handle of the queue to which the data is being sent. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @return xQueueOverwrite() is a macro that calls xQueueGenericSend(), and - * therefore has the same return values as xQueueSendToFront(). However, pdPASS - * is the only value that can be returned because xQueueOverwrite() will write - * to the queue even when the queue is already full. - * - * Example usage: -
-
- void vFunction( void *pvParameters )
- {
- QueueHandle_t xQueue;
- uint32_t ulVarToSend, ulValReceived;
-
-	// Create a queue to hold one uint32_t value.  It is strongly
-	// recommended *not* to use xQueueOverwrite() on queues that can
-	// contain more than one value, and doing so will trigger an assertion
-	// if configASSERT() is defined.
-	xQueue = xQueueCreate( 1, sizeof( uint32_t ) );
-
-	// Write the value 10 to the queue using xQueueOverwrite().
-	ulVarToSend = 10;
-	xQueueOverwrite( xQueue, &ulVarToSend );
-
-	// Peeking the queue should now return 10, but leave the value 10 in
-	// the queue.  A block time of zero is used as it is known that the
-	// queue holds a value.
-	ulValReceived = 0;
-	xQueuePeek( xQueue, &ulValReceived, 0 );
-
-	if( ulValReceived != 10 )
-	{
-		// Error unless the item was removed by a different task.
-	}
-
-	// The queue is still full.  Use xQueueOverwrite() to overwrite the
-	// value held in the queue with 100.
-	ulVarToSend = 100;
-	xQueueOverwrite( xQueue, &ulVarToSend );
-
-	// This time read from the queue, leaving the queue empty once more.
-	// A block time of 0 is used again.
-	xQueueReceive( xQueue, &ulValReceived, 0 );
-
-	// The value read should be the last value written, even though the
-	// queue was already full when the value was written.
-	if( ulValReceived != 100 )
-	{
-		// Error!
-	}
-
-	// ...
-}
- 
- * \defgroup xQueueOverwrite xQueueOverwrite - * \ingroup QueueManagement - */ -#define xQueueOverwrite( xQueue, pvItemToQueue ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), 0, queueOVERWRITE ) - - -/** - * queue. h - *
- BaseType_t xQueueGenericSend(
-									QueueHandle_t xQueue,
-									const void * pvItemToQueue,
-									TickType_t xTicksToWait
-									BaseType_t xCopyPosition
-								);
- * 
- * - * It is preferred that the macros xQueueSend(), xQueueSendToFront() and - * xQueueSendToBack() are used in place of calling this function directly. - * - * Post an item on a queue. The item is queued by copy, not by reference. - * This function must not be called from an interrupt service routine. - * See xQueueSendFromISR () for an alternative which may be used in an ISR. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for space to become available on the queue, should it already - * be full. The call will return immediately if this is set to 0 and the - * queue is full. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. - * - * @param xCopyPosition Can take the value queueSEND_TO_BACK to place the - * item at the back of the queue, or queueSEND_TO_FRONT to place the item - * at the front of the queue (for high priority messages). - * - * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- } xMessage;
-
- uint32_t ulVar = 10UL;
-
- void vATask( void *pvParameters )
- {
- QueueHandle_t xQueue1, xQueue2;
- struct AMessage *pxMessage;
-
-	// Create a queue capable of containing 10 uint32_t values.
-	xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
-
-	// ...
-
-	if( xQueue1 != 0 )
-	{
-		// Send an uint32_t.  Wait for 10 ticks for space to become
-		// available if necessary.
-		if( xQueueGenericSend( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10, queueSEND_TO_BACK ) != pdPASS )
-		{
-			// Failed to post the message, even after 10 ticks.
-		}
-	}
-
-	if( xQueue2 != 0 )
-	{
-		// Send a pointer to a struct AMessage object.  Don't block if the
-		// queue is already full.
-		pxMessage = & xMessage;
-		xQueueGenericSend( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0, queueSEND_TO_BACK );
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueSend xQueueSend - * \ingroup QueueManagement - */ -BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION; - -/** - * queue. h - *
- BaseType_t xQueuePeek(
-							 QueueHandle_t xQueue,
-							 void *pvBuffer,
-							 TickType_t xTicksToWait
-						 );
- * - * This is a macro that calls the xQueueGenericReceive() function. - * - * Receive an item from a queue without removing the item from the queue. - * The item is received by copy so a buffer of adequate size must be - * provided. The number of bytes copied into the buffer was defined when - * the queue was created. - * - * Successfully received items remain on the queue so will be returned again - * by the next call, or a call to xQueueReceive(). - * - * This macro must not be used in an interrupt service routine. See - * xQueuePeekFromISR() for an alternative that can be called from an interrupt - * service routine. - * - * @param xQueue The handle to the queue from which the item is to be - * received. - * - * @param pvBuffer Pointer to the buffer into which the received item will - * be copied. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for an item to receive should the queue be empty at the time - * of the call. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. - * xQueuePeek() will return immediately if xTicksToWait is 0 and the queue - * is empty. - * - * @return pdTRUE if an item was successfully received from the queue, - * otherwise pdFALSE. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- } xMessage;
-
- QueueHandle_t xQueue;
-
- // Task to create a queue and post a value.
- void vATask( void *pvParameters )
- {
- struct AMessage *pxMessage;
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
-	if( xQueue == 0 )
-	{
-		// Failed to create the queue.
-	}
-
-	// ...
-
-	// Send a pointer to a struct AMessage object.  Don't block if the
-	// queue is already full.
-	pxMessage = & xMessage;
-	xQueueSend( xQueue, ( void * ) &pxMessage, ( TickType_t ) 0 );
-
-	// ... Rest of task code.
- }
-
- // Task to peek the data from the queue.
- void vADifferentTask( void *pvParameters )
- {
- struct AMessage *pxRxedMessage;
-
-	if( xQueue != 0 )
-	{
-		// Peek a message on the created queue.  Block for 10 ticks if a
-		// message is not immediately available.
-		if( xQueuePeek( xQueue, &( pxRxedMessage ), ( TickType_t ) 10 ) )
-		{
-			// pcRxedMessage now points to the struct AMessage variable posted
-			// by vATask, but the item still remains on the queue.
-		}
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueReceive xQueueReceive - * \ingroup QueueManagement - */ -#define xQueuePeek( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdTRUE ) - -/** - * queue. h - *
- BaseType_t xQueuePeekFromISR(
-									QueueHandle_t xQueue,
-									void *pvBuffer,
-								);
- * - * A version of xQueuePeek() that can be called from an interrupt service - * routine (ISR). - * - * Receive an item from a queue without removing the item from the queue. - * The item is received by copy so a buffer of adequate size must be - * provided. The number of bytes copied into the buffer was defined when - * the queue was created. - * - * Successfully received items remain on the queue so will be returned again - * by the next call, or a call to xQueueReceive(). - * - * @param xQueue The handle to the queue from which the item is to be - * received. - * - * @param pvBuffer Pointer to the buffer into which the received item will - * be copied. - * - * @return pdTRUE if an item was successfully received from the queue, - * otherwise pdFALSE. - * - * \defgroup xQueuePeekFromISR xQueuePeekFromISR - * \ingroup QueueManagement - */ -BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIVILEGED_FUNCTION; - -/** - * queue. h - *
- BaseType_t xQueueReceive(
-								 QueueHandle_t xQueue,
-								 void *pvBuffer,
-								 TickType_t xTicksToWait
-							);
- * - * This is a macro that calls the xQueueGenericReceive() function. - * - * Receive an item from a queue. The item is received by copy so a buffer of - * adequate size must be provided. The number of bytes copied into the buffer - * was defined when the queue was created. - * - * Successfully received items are removed from the queue. - * - * This function must not be used in an interrupt service routine. See - * xQueueReceiveFromISR for an alternative that can. - * - * @param xQueue The handle to the queue from which the item is to be - * received. - * - * @param pvBuffer Pointer to the buffer into which the received item will - * be copied. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for an item to receive should the queue be empty at the time - * of the call. xQueueReceive() will return immediately if xTicksToWait - * is zero and the queue is empty. The time is defined in tick periods so the - * constant portTICK_PERIOD_MS should be used to convert to real time if this is - * required. - * - * @return pdTRUE if an item was successfully received from the queue, - * otherwise pdFALSE. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- } xMessage;
-
- QueueHandle_t xQueue;
-
- // Task to create a queue and post a value.
- void vATask( void *pvParameters )
- {
- struct AMessage *pxMessage;
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
-	if( xQueue == 0 )
-	{
-		// Failed to create the queue.
-	}
-
-	// ...
-
-	// Send a pointer to a struct AMessage object.  Don't block if the
-	// queue is already full.
-	pxMessage = & xMessage;
-	xQueueSend( xQueue, ( void * ) &pxMessage, ( TickType_t ) 0 );
-
-	// ... Rest of task code.
- }
-
- // Task to receive from the queue.
- void vADifferentTask( void *pvParameters )
- {
- struct AMessage *pxRxedMessage;
-
-	if( xQueue != 0 )
-	{
-		// Receive a message on the created queue.  Block for 10 ticks if a
-		// message is not immediately available.
-		if( xQueueReceive( xQueue, &( pxRxedMessage ), ( TickType_t ) 10 ) )
-		{
-			// pcRxedMessage now points to the struct AMessage variable posted
-			// by vATask.
-		}
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueReceive xQueueReceive - * \ingroup QueueManagement - */ -#define xQueueReceive( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdFALSE ) - - -/** - * queue. h - *
- BaseType_t xQueueGenericReceive(
-									   QueueHandle_t	xQueue,
-									   void	*pvBuffer,
-									   TickType_t	xTicksToWait
-									   BaseType_t	xJustPeek
-									);
- * - * It is preferred that the macro xQueueReceive() be used rather than calling - * this function directly. - * - * Receive an item from a queue. The item is received by copy so a buffer of - * adequate size must be provided. The number of bytes copied into the buffer - * was defined when the queue was created. - * - * This function must not be used in an interrupt service routine. See - * xQueueReceiveFromISR for an alternative that can. - * - * @param xQueue The handle to the queue from which the item is to be - * received. - * - * @param pvBuffer Pointer to the buffer into which the received item will - * be copied. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for an item to receive should the queue be empty at the time - * of the call. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. - * xQueueGenericReceive() will return immediately if the queue is empty and - * xTicksToWait is 0. - * - * @param xJustPeek When set to true, the item received from the queue is not - * actually removed from the queue - meaning a subsequent call to - * xQueueReceive() will return the same item. When set to false, the item - * being received from the queue is also removed from the queue. - * - * @return pdTRUE if an item was successfully received from the queue, - * otherwise pdFALSE. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- } xMessage;
-
- QueueHandle_t xQueue;
-
- // Task to create a queue and post a value.
- void vATask( void *pvParameters )
- {
- struct AMessage *pxMessage;
-
-	// Create a queue capable of containing 10 pointers to AMessage structures.
-	// These should be passed by pointer as they contain a lot of data.
-	xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
-	if( xQueue == 0 )
-	{
-		// Failed to create the queue.
-	}
-
-	// ...
-
-	// Send a pointer to a struct AMessage object.  Don't block if the
-	// queue is already full.
-	pxMessage = & xMessage;
-	xQueueSend( xQueue, ( void * ) &pxMessage, ( TickType_t ) 0 );
-
-	// ... Rest of task code.
- }
-
- // Task to receive from the queue.
- void vADifferentTask( void *pvParameters )
- {
- struct AMessage *pxRxedMessage;
-
-	if( xQueue != 0 )
-	{
-		// Receive a message on the created queue.  Block for 10 ticks if a
-		// message is not immediately available.
-		if( xQueueGenericReceive( xQueue, &( pxRxedMessage ), ( TickType_t ) 10 ) )
-		{
-			// pcRxedMessage now points to the struct AMessage variable posted
-			// by vATask.
-		}
-	}
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueReceive xQueueReceive - * \ingroup QueueManagement - */ -BaseType_t xQueueGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, const BaseType_t xJustPeek ) PRIVILEGED_FUNCTION; - -/** - * queue. h - *
UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue );
- * - * Return the number of messages stored in a queue. - * - * @param xQueue A handle to the queue being queried. - * - * @return The number of messages available in the queue. - * - * \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting - * \ingroup QueueManagement - */ -UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; - -/** - * queue. h - *
UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue );
- * - * Return the number of free spaces available in a queue. This is equal to the - * number of items that can be sent to the queue before the queue becomes full - * if no items are removed. - * - * @param xQueue A handle to the queue being queried. - * - * @return The number of spaces available in the queue. - * - * \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting - * \ingroup QueueManagement - */ -UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; - -/** - * queue. h - *
void vQueueDelete( QueueHandle_t xQueue );
- * - * Delete a queue - freeing all the memory allocated for storing of items - * placed on the queue. - * - * @param xQueue A handle to the queue to be deleted. - * - * \defgroup vQueueDelete vQueueDelete - * \ingroup QueueManagement - */ -void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; - -/** - * queue. h - *
- BaseType_t xQueueSendToFrontFromISR(
-										 QueueHandle_t xQueue,
-										 const void *pvItemToQueue,
-										 BaseType_t *pxHigherPriorityTaskWoken
-									  );
- 
- * - * This is a macro that calls xQueueGenericSendFromISR(). - * - * Post an item to the front of a queue. It is safe to use this macro from - * within an interrupt service routine. - * - * Items are queued by copy not reference so it is preferable to only - * queue small items, especially when called from an ISR. In most cases - * it would be preferable to store a pointer to the item being queued. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param pxHigherPriorityTaskWoken xQueueSendToFrontFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task - * to unblock, and the unblocked task has a priority higher than the currently - * running task. If xQueueSendToFromFromISR() sets this value to pdTRUE then - * a context switch should be requested before the interrupt is exited. - * - * @return pdTRUE if the data was successfully sent to the queue, otherwise - * errQUEUE_FULL. - * - * Example usage for buffered IO (where the ISR can obtain more than one value - * per call): -
- void vBufferISR( void )
- {
- char cIn;
- BaseType_t xHigherPrioritTaskWoken;
-
-	// We have not woken a task at the start of the ISR.
-	xHigherPriorityTaskWoken = pdFALSE;
-
-	// Loop until the buffer is empty.
-	do
-	{
-		// Obtain a byte from the buffer.
-		cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
-
-		// Post the byte.
-		xQueueSendToFrontFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );
-
-	} while( portINPUT_BYTE( BUFFER_COUNT ) );
-
-	// Now the buffer is empty we can switch context if necessary.
-	if( xHigherPriorityTaskWoken )
-	{
-		taskYIELD ();
-	}
- }
- 
- * - * \defgroup xQueueSendFromISR xQueueSendFromISR - * \ingroup QueueManagement - */ -#define xQueueSendToFrontFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_FRONT ) - - -/** - * queue. h - *
- BaseType_t xQueueSendToBackFromISR(
-										 QueueHandle_t xQueue,
-										 const void *pvItemToQueue,
-										 BaseType_t *pxHigherPriorityTaskWoken
-									  );
- 
- * - * This is a macro that calls xQueueGenericSendFromISR(). - * - * Post an item to the back of a queue. It is safe to use this macro from - * within an interrupt service routine. - * - * Items are queued by copy not reference so it is preferable to only - * queue small items, especially when called from an ISR. In most cases - * it would be preferable to store a pointer to the item being queued. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param pxHigherPriorityTaskWoken xQueueSendToBackFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task - * to unblock, and the unblocked task has a priority higher than the currently - * running task. If xQueueSendToBackFromISR() sets this value to pdTRUE then - * a context switch should be requested before the interrupt is exited. - * - * @return pdTRUE if the data was successfully sent to the queue, otherwise - * errQUEUE_FULL. - * - * Example usage for buffered IO (where the ISR can obtain more than one value - * per call): -
- void vBufferISR( void )
- {
- char cIn;
- BaseType_t xHigherPriorityTaskWoken;
-
-	// We have not woken a task at the start of the ISR.
-	xHigherPriorityTaskWoken = pdFALSE;
-
-	// Loop until the buffer is empty.
-	do
-	{
-		// Obtain a byte from the buffer.
-		cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
-
-		// Post the byte.
-		xQueueSendToBackFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );
-
-	} while( portINPUT_BYTE( BUFFER_COUNT ) );
-
-	// Now the buffer is empty we can switch context if necessary.
-	if( xHigherPriorityTaskWoken )
-	{
-		taskYIELD ();
-	}
- }
- 
- * - * \defgroup xQueueSendFromISR xQueueSendFromISR - * \ingroup QueueManagement - */ -#define xQueueSendToBackFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK ) - -/** - * queue. h - *
- BaseType_t xQueueOverwriteFromISR(
-							  QueueHandle_t xQueue,
-							  const void * pvItemToQueue,
-							  BaseType_t *pxHigherPriorityTaskWoken
-						 );
- * 
- * - * A version of xQueueOverwrite() that can be used in an interrupt service - * routine (ISR). - * - * Only for use with queues that can hold a single item - so the queue is either - * empty or full. - * - * Post an item on a queue. If the queue is already full then overwrite the - * value held in the queue. The item is queued by copy, not by reference. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param pxHigherPriorityTaskWoken xQueueOverwriteFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task - * to unblock, and the unblocked task has a priority higher than the currently - * running task. If xQueueOverwriteFromISR() sets this value to pdTRUE then - * a context switch should be requested before the interrupt is exited. - * - * @return xQueueOverwriteFromISR() is a macro that calls - * xQueueGenericSendFromISR(), and therefore has the same return values as - * xQueueSendToFrontFromISR(). However, pdPASS is the only value that can be - * returned because xQueueOverwriteFromISR() will write to the queue even when - * the queue is already full. - * - * Example usage: -
-
- QueueHandle_t xQueue;
-
- void vFunction( void *pvParameters )
- {
- 	// Create a queue to hold one uint32_t value.  It is strongly
-	// recommended *not* to use xQueueOverwriteFromISR() on queues that can
-	// contain more than one value, and doing so will trigger an assertion
-	// if configASSERT() is defined.
-	xQueue = xQueueCreate( 1, sizeof( uint32_t ) );
-}
-
-void vAnInterruptHandler( void )
-{
-// xHigherPriorityTaskWoken must be set to pdFALSE before it is used.
-BaseType_t xHigherPriorityTaskWoken = pdFALSE;
-uint32_t ulVarToSend, ulValReceived;
-
-	// Write the value 10 to the queue using xQueueOverwriteFromISR().
-	ulVarToSend = 10;
-	xQueueOverwriteFromISR( xQueue, &ulVarToSend, &xHigherPriorityTaskWoken );
-
-	// The queue is full, but calling xQueueOverwriteFromISR() again will still
-	// pass because the value held in the queue will be overwritten with the
-	// new value.
-	ulVarToSend = 100;
-	xQueueOverwriteFromISR( xQueue, &ulVarToSend, &xHigherPriorityTaskWoken );
-
-	// Reading from the queue will now return 100.
-
-	// ...
-
-	if( xHigherPrioritytaskWoken == pdTRUE )
-	{
-		// Writing to the queue caused a task to unblock and the unblocked task
-		// has a priority higher than or equal to the priority of the currently
-		// executing task (the task this interrupt interrupted).  Perform a context
-		// switch so this interrupt returns directly to the unblocked task.
-		portYIELD_FROM_ISR(); // or portEND_SWITCHING_ISR() depending on the port.
-	}
-}
- 
- * \defgroup xQueueOverwriteFromISR xQueueOverwriteFromISR - * \ingroup QueueManagement - */ -#define xQueueOverwriteFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueOVERWRITE ) - -/** - * queue. h - *
- BaseType_t xQueueSendFromISR(
-									 QueueHandle_t xQueue,
-									 const void *pvItemToQueue,
-									 BaseType_t *pxHigherPriorityTaskWoken
-								);
- 
- * - * This is a macro that calls xQueueGenericSendFromISR(). It is included - * for backward compatibility with versions of FreeRTOS.org that did not - * include the xQueueSendToBackFromISR() and xQueueSendToFrontFromISR() - * macros. - * - * Post an item to the back of a queue. It is safe to use this function from - * within an interrupt service routine. - * - * Items are queued by copy not reference so it is preferable to only - * queue small items, especially when called from an ISR. In most cases - * it would be preferable to store a pointer to the item being queued. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param pxHigherPriorityTaskWoken xQueueSendFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task - * to unblock, and the unblocked task has a priority higher than the currently - * running task. If xQueueSendFromISR() sets this value to pdTRUE then - * a context switch should be requested before the interrupt is exited. - * - * @return pdTRUE if the data was successfully sent to the queue, otherwise - * errQUEUE_FULL. - * - * Example usage for buffered IO (where the ISR can obtain more than one value - * per call): -
- void vBufferISR( void )
- {
- char cIn;
- BaseType_t xHigherPriorityTaskWoken;
-
-	// We have not woken a task at the start of the ISR.
-	xHigherPriorityTaskWoken = pdFALSE;
-
-	// Loop until the buffer is empty.
-	do
-	{
-		// Obtain a byte from the buffer.
-		cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
-
-		// Post the byte.
-		xQueueSendFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );
-
-	} while( portINPUT_BYTE( BUFFER_COUNT ) );
-
-	// Now the buffer is empty we can switch context if necessary.
-	if( xHigherPriorityTaskWoken )
-	{
-		// Actual macro used here is port specific.
-		portYIELD_FROM_ISR ();
-	}
- }
- 
- * - * \defgroup xQueueSendFromISR xQueueSendFromISR - * \ingroup QueueManagement - */ -#define xQueueSendFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK ) - -/** - * queue. h - *
- BaseType_t xQueueGenericSendFromISR(
-										   QueueHandle_t		xQueue,
-										   const	void	*pvItemToQueue,
-										   BaseType_t	*pxHigherPriorityTaskWoken,
-										   BaseType_t	xCopyPosition
-									   );
- 
- * - * It is preferred that the macros xQueueSendFromISR(), - * xQueueSendToFrontFromISR() and xQueueSendToBackFromISR() be used in place - * of calling this function directly. xQueueGiveFromISR() is an - * equivalent for use by semaphores that don't actually copy any data. - * - * Post an item on a queue. It is safe to use this function from within an - * interrupt service routine. - * - * Items are queued by copy not reference so it is preferable to only - * queue small items, especially when called from an ISR. In most cases - * it would be preferable to store a pointer to the item being queued. - * - * @param xQueue The handle to the queue on which the item is to be posted. - * - * @param pvItemToQueue A pointer to the item that is to be placed on the - * queue. The size of the items the queue will hold was defined when the - * queue was created, so this many bytes will be copied from pvItemToQueue - * into the queue storage area. - * - * @param pxHigherPriorityTaskWoken xQueueGenericSendFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task - * to unblock, and the unblocked task has a priority higher than the currently - * running task. If xQueueGenericSendFromISR() sets this value to pdTRUE then - * a context switch should be requested before the interrupt is exited. - * - * @param xCopyPosition Can take the value queueSEND_TO_BACK to place the - * item at the back of the queue, or queueSEND_TO_FRONT to place the item - * at the front of the queue (for high priority messages). - * - * @return pdTRUE if the data was successfully sent to the queue, otherwise - * errQUEUE_FULL. - * - * Example usage for buffered IO (where the ISR can obtain more than one value - * per call): -
- void vBufferISR( void )
- {
- char cIn;
- BaseType_t xHigherPriorityTaskWokenByPost;
-
-	// We have not woken a task at the start of the ISR.
-	xHigherPriorityTaskWokenByPost = pdFALSE;
-
-	// Loop until the buffer is empty.
-	do
-	{
-		// Obtain a byte from the buffer.
-		cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );
-
-		// Post each byte.
-		xQueueGenericSendFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWokenByPost, queueSEND_TO_BACK );
-
-	} while( portINPUT_BYTE( BUFFER_COUNT ) );
-
-	// Now the buffer is empty we can switch context if necessary.  Note that the
-	// name of the yield function required is port specific.
-	if( xHigherPriorityTaskWokenByPost )
-	{
-		taskYIELD_YIELD_FROM_ISR();
-	}
- }
- 
- * - * \defgroup xQueueSendFromISR xQueueSendFromISR - * \ingroup QueueManagement - */ -BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION; -BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; - -/** - * queue. h - *
- BaseType_t xQueueReceiveFromISR(
-									   QueueHandle_t	xQueue,
-									   void	*pvBuffer,
-									   BaseType_t *pxTaskWoken
-								   );
- * 
- * - * Receive an item from a queue. It is safe to use this function from within an - * interrupt service routine. - * - * @param xQueue The handle to the queue from which the item is to be - * received. - * - * @param pvBuffer Pointer to the buffer into which the received item will - * be copied. - * - * @param pxTaskWoken A task may be blocked waiting for space to become - * available on the queue. If xQueueReceiveFromISR causes such a task to - * unblock *pxTaskWoken will get set to pdTRUE, otherwise *pxTaskWoken will - * remain unchanged. - * - * @return pdTRUE if an item was successfully received from the queue, - * otherwise pdFALSE. - * - * Example usage: -
-
- QueueHandle_t xQueue;
-
- // Function to create a queue and post some values.
- void vAFunction( void *pvParameters )
- {
- char cValueToPost;
- const TickType_t xTicksToWait = ( TickType_t )0xff;
-
-	// Create a queue capable of containing 10 characters.
-	xQueue = xQueueCreate( 10, sizeof( char ) );
-	if( xQueue == 0 )
-	{
-		// Failed to create the queue.
-	}
-
-	// ...
-
-	// Post some characters that will be used within an ISR.  If the queue
-	// is full then this task will block for xTicksToWait ticks.
-	cValueToPost = 'a';
-	xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );
-	cValueToPost = 'b';
-	xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );
-
-	// ... keep posting characters ... this task may block when the queue
-	// becomes full.
-
-	cValueToPost = 'c';
-	xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );
- }
-
- // ISR that outputs all the characters received on the queue.
- void vISR_Routine( void )
- {
- BaseType_t xTaskWokenByReceive = pdFALSE;
- char cRxedChar;
-
-	while( xQueueReceiveFromISR( xQueue, ( void * ) &cRxedChar, &xTaskWokenByReceive) )
-	{
-		// A character was received.  Output the character now.
-		vOutputCharacter( cRxedChar );
-
-		// If removing the character from the queue woke the task that was
-		// posting onto the queue cTaskWokenByReceive will have been set to
-		// pdTRUE.  No matter how many times this loop iterates only one
-		// task will be woken.
-	}
-
-	if( cTaskWokenByPost != ( char ) pdFALSE;
-	{
-		taskYIELD ();
-	}
- }
- 
- * \defgroup xQueueReceiveFromISR xQueueReceiveFromISR - * \ingroup QueueManagement - */ -BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; - -/* - * Utilities to query queues that are safe to use from an ISR. These utilities - * should be used only from witin an ISR, or within a critical section. - */ -BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; - -/* - * The functions defined above are for passing data to and from tasks. The - * functions below are the equivalents for passing data to and from - * co-routines. - * - * These functions are called from the co-routine macro implementation and - * should not be called directly from application code. Instead use the macro - * wrappers defined within croutine.h. - */ -BaseType_t xQueueCRSendFromISR( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t xCoRoutinePreviouslyWoken ); -BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue, void *pvBuffer, BaseType_t *pxTaskWoken ); -BaseType_t xQueueCRSend( QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait ); -BaseType_t xQueueCRReceive( QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait ); - -/* - * For internal use only. Use xSemaphoreCreateMutex(), - * xSemaphoreCreateCounting() or xSemaphoreGetMutexHolder() instead of calling - * these functions directly. - */ -QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; -QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION; -QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION; -QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION; -void* xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION; - -/* - * For internal use only. Use xSemaphoreTakeMutexRecursive() or - * xSemaphoreGiveMutexRecursive() instead of calling these functions directly. - */ -BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -BaseType_t xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) PRIVILEGED_FUNCTION; - -/* - * Reset a queue back to its original empty state. The return value is now - * obsolete and is always set to pdPASS. - */ -#define xQueueReset( xQueue ) xQueueGenericReset( xQueue, pdFALSE ) - -/* - * The registry is provided as a means for kernel aware debuggers to - * locate queues, semaphores and mutexes. Call vQueueAddToRegistry() add - * a queue, semaphore or mutex handle to the registry if you want the handle - * to be available to a kernel aware debugger. If you are not using a kernel - * aware debugger then this function can be ignored. - * - * configQUEUE_REGISTRY_SIZE defines the maximum number of handles the - * registry can hold. configQUEUE_REGISTRY_SIZE must be greater than 0 - * within FreeRTOSConfig.h for the registry to be available. Its value - * does not effect the number of queues, semaphores and mutexes that can be - * created - just the number that the registry can hold. - * - * @param xQueue The handle of the queue being added to the registry. This - * is the handle returned by a call to xQueueCreate(). Semaphore and mutex - * handles can also be passed in here. - * - * @param pcName The name to be associated with the handle. This is the - * name that the kernel aware debugger will display. The queue registry only - * stores a pointer to the string - so the string must be persistent (global or - * preferably in ROM/Flash), not on the stack. - */ -#if( configQUEUE_REGISTRY_SIZE > 0 ) - void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcName ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -#endif - -/* - * The registry is provided as a means for kernel aware debuggers to - * locate queues, semaphores and mutexes. Call vQueueAddToRegistry() add - * a queue, semaphore or mutex handle to the registry if you want the handle - * to be available to a kernel aware debugger, and vQueueUnregisterQueue() to - * remove the queue, semaphore or mutex from the register. If you are not using - * a kernel aware debugger then this function can be ignored. - * - * @param xQueue The handle of the queue being removed from the registry. - */ -#if( configQUEUE_REGISTRY_SIZE > 0 ) - void vQueueUnregisterQueue( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -#endif - -/* - * The queue registry is provided as a means for kernel aware debuggers to - * locate queues, semaphores and mutexes. Call pcQueueGetName() to look - * up and return the name of a queue in the queue registry from the queue's - * handle. - * - * @param xQueue The handle of the queue the name of which will be returned. - * @return If the queue is in the registry then a pointer to the name of the - * queue is returned. If the queue is not in the registry then NULL is - * returned. - */ -#if( configQUEUE_REGISTRY_SIZE > 0 ) - const char *pcQueueGetName( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -#endif - -/* - * Generic version of the function used to creaet a queue using dynamic memory - * allocation. This is called by other functions and macros that create other - * RTOS objects that use the queue structure as their base. - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; -#endif - -/* - * Generic version of the function used to creaet a queue using dynamic memory - * allocation. This is called by other functions and macros that create other - * RTOS objects that use the queue structure as their base. - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; -#endif - -/* - * Queue sets provide a mechanism to allow a task to block (pend) on a read - * operation from multiple queues or semaphores simultaneously. - * - * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this - * function. - * - * A queue set must be explicitly created using a call to xQueueCreateSet() - * before it can be used. Once created, standard FreeRTOS queues and semaphores - * can be added to the set using calls to xQueueAddToSet(). - * xQueueSelectFromSet() is then used to determine which, if any, of the queues - * or semaphores contained in the set is in a state where a queue read or - * semaphore take operation would be successful. - * - * Note 1: See the documentation on http://wwwFreeRTOS.org/RTOS-queue-sets.html - * for reasons why queue sets are very rarely needed in practice as there are - * simpler methods of blocking on multiple objects. - * - * Note 2: Blocking on a queue set that contains a mutex will not cause the - * mutex holder to inherit the priority of the blocked task. - * - * Note 3: An additional 4 bytes of RAM is required for each space in a every - * queue added to a queue set. Therefore counting semaphores that have a high - * maximum count value should not be added to a queue set. - * - * Note 4: A receive (in the case of a queue) or take (in the case of a - * semaphore) operation must not be performed on a member of a queue set unless - * a call to xQueueSelectFromSet() has first returned a handle to that set member. - * - * @param uxEventQueueLength Queue sets store events that occur on - * the queues and semaphores contained in the set. uxEventQueueLength specifies - * the maximum number of events that can be queued at once. To be absolutely - * certain that events are not lost uxEventQueueLength should be set to the - * total sum of the length of the queues added to the set, where binary - * semaphores and mutexes have a length of 1, and counting semaphores have a - * length set by their maximum count value. Examples: - * + If a queue set is to hold a queue of length 5, another queue of length 12, - * and a binary semaphore, then uxEventQueueLength should be set to - * (5 + 12 + 1), or 18. - * + If a queue set is to hold three binary semaphores then uxEventQueueLength - * should be set to (1 + 1 + 1 ), or 3. - * + If a queue set is to hold a counting semaphore that has a maximum count of - * 5, and a counting semaphore that has a maximum count of 3, then - * uxEventQueueLength should be set to (5 + 3), or 8. - * - * @return If the queue set is created successfully then a handle to the created - * queue set is returned. Otherwise NULL is returned. - */ -QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION; - -/* - * Adds a queue or semaphore to a queue set that was previously created by a - * call to xQueueCreateSet(). - * - * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this - * function. - * - * Note 1: A receive (in the case of a queue) or take (in the case of a - * semaphore) operation must not be performed on a member of a queue set unless - * a call to xQueueSelectFromSet() has first returned a handle to that set member. - * - * @param xQueueOrSemaphore The handle of the queue or semaphore being added to - * the queue set (cast to an QueueSetMemberHandle_t type). - * - * @param xQueueSet The handle of the queue set to which the queue or semaphore - * is being added. - * - * @return If the queue or semaphore was successfully added to the queue set - * then pdPASS is returned. If the queue could not be successfully added to the - * queue set because it is already a member of a different queue set then pdFAIL - * is returned. - */ -BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; - -/* - * Removes a queue or semaphore from a queue set. A queue or semaphore can only - * be removed from a set if the queue or semaphore is empty. - * - * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this - * function. - * - * @param xQueueOrSemaphore The handle of the queue or semaphore being removed - * from the queue set (cast to an QueueSetMemberHandle_t type). - * - * @param xQueueSet The handle of the queue set in which the queue or semaphore - * is included. - * - * @return If the queue or semaphore was successfully removed from the queue set - * then pdPASS is returned. If the queue was not in the queue set, or the - * queue (or semaphore) was not empty, then pdFAIL is returned. - */ -BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; - -/* - * xQueueSelectFromSet() selects from the members of a queue set a queue or - * semaphore that either contains data (in the case of a queue) or is available - * to take (in the case of a semaphore). xQueueSelectFromSet() effectively - * allows a task to block (pend) on a read operation on all the queues and - * semaphores in a queue set simultaneously. - * - * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this - * function. - * - * Note 1: See the documentation on http://wwwFreeRTOS.org/RTOS-queue-sets.html - * for reasons why queue sets are very rarely needed in practice as there are - * simpler methods of blocking on multiple objects. - * - * Note 2: Blocking on a queue set that contains a mutex will not cause the - * mutex holder to inherit the priority of the blocked task. - * - * Note 3: A receive (in the case of a queue) or take (in the case of a - * semaphore) operation must not be performed on a member of a queue set unless - * a call to xQueueSelectFromSet() has first returned a handle to that set member. - * - * @param xQueueSet The queue set on which the task will (potentially) block. - * - * @param xTicksToWait The maximum time, in ticks, that the calling task will - * remain in the Blocked state (with other tasks executing) to wait for a member - * of the queue set to be ready for a successful queue read or semaphore take - * operation. - * - * @return xQueueSelectFromSet() will return the handle of a queue (cast to - * a QueueSetMemberHandle_t type) contained in the queue set that contains data, - * or the handle of a semaphore (cast to a QueueSetMemberHandle_t type) contained - * in the queue set that is available, or NULL if no such queue or semaphore - * exists before before the specified block time expires. - */ -QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -/* - * A version of xQueueSelectFromSet() that can be used from an ISR. - */ -QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; - -/* Not public API functions. */ -void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION; -BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue ) PRIVILEGED_FUNCTION; -void vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ) PRIVILEGED_FUNCTION; -UBaseType_t uxQueueGetQueueNumber( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -uint8_t ucQueueGetQueueType( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; - - -#ifdef __cplusplus -} -#endif - -#endif /* QUEUE_H */ - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/semphr.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/semphr.h deleted file mode 100644 index a674b02..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/semphr.h +++ /dev/null @@ -1,1171 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -#ifndef SEMAPHORE_H -#define SEMAPHORE_H - -#ifndef INC_FREERTOS_H - #error "include FreeRTOS.h" must appear in source files before "include semphr.h" -#endif - -#include "queue.h" - -typedef QueueHandle_t SemaphoreHandle_t; - -#define semBINARY_SEMAPHORE_QUEUE_LENGTH ( ( uint8_t ) 1U ) -#define semSEMAPHORE_QUEUE_ITEM_LENGTH ( ( uint8_t ) 0U ) -#define semGIVE_BLOCK_TIME ( ( TickType_t ) 0U ) - - -/** - * semphr. h - *
vSemaphoreCreateBinary( SemaphoreHandle_t xSemaphore )
- * - * In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a binary semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * This old vSemaphoreCreateBinary() macro is now deprecated in favour of the - * xSemaphoreCreateBinary() function. Note that binary semaphores created using - * the vSemaphoreCreateBinary() macro are created in a state such that the - * first call to 'take' the semaphore would pass, whereas binary semaphores - * created using xSemaphoreCreateBinary() are created in a state such that the - * the semaphore must first be 'given' before it can be 'taken'. - * - * Macro that implements a semaphore by using the existing queue mechanism. - * The queue length is 1 as this is a binary semaphore. The data size is 0 - * as we don't want to actually store any data - we just want to know if the - * queue is empty or full. - * - * This type of semaphore can be used for pure synchronisation between tasks or - * between an interrupt and a task. The semaphore need not be given back once - * obtained, so one task/interrupt can continuously 'give' the semaphore while - * another continuously 'takes' the semaphore. For this reason this type of - * semaphore does not use a priority inheritance mechanism. For an alternative - * that does use priority inheritance see xSemaphoreCreateMutex(). - * - * @param xSemaphore Handle to the created semaphore. Should be of type SemaphoreHandle_t. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore = NULL;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to vSemaphoreCreateBinary ().
-    // This is a macro so pass the variable in directly.
-    vSemaphoreCreateBinary( xSemaphore );
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.
-    }
- }
- 
- * \defgroup vSemaphoreCreateBinary vSemaphoreCreateBinary - * \ingroup Semaphores - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define vSemaphoreCreateBinary( xSemaphore ) \ - { \ - ( xSemaphore ) = xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ); \ - if( ( xSemaphore ) != NULL ) \ - { \ - ( void ) xSemaphoreGive( ( xSemaphore ) ); \ - } \ - } -#endif - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateBinary( void )
- * - * Creates a new binary semaphore instance, and returns a handle by which the - * new semaphore can be referenced. - * - * In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a binary semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * Internally, within the FreeRTOS implementation, binary semaphores use a block - * of memory, in which the semaphore structure is stored. If a binary semaphore - * is created using xSemaphoreCreateBinary() then the required memory is - * automatically dynamically allocated inside the xSemaphoreCreateBinary() - * function. (see http://www.freertos.org/a00111.html). If a binary semaphore - * is created using xSemaphoreCreateBinaryStatic() then the application writer - * must provide the memory. xSemaphoreCreateBinaryStatic() therefore allows a - * binary semaphore to be created without using any dynamic memory allocation. - * - * The old vSemaphoreCreateBinary() macro is now deprecated in favour of this - * xSemaphoreCreateBinary() function. Note that binary semaphores created using - * the vSemaphoreCreateBinary() macro are created in a state such that the - * first call to 'take' the semaphore would pass, whereas binary semaphores - * created using xSemaphoreCreateBinary() are created in a state such that the - * the semaphore must first be 'given' before it can be 'taken'. - * - * This type of semaphore can be used for pure synchronisation between tasks or - * between an interrupt and a task. The semaphore need not be given back once - * obtained, so one task/interrupt can continuously 'give' the semaphore while - * another continuously 'takes' the semaphore. For this reason this type of - * semaphore does not use a priority inheritance mechanism. For an alternative - * that does use priority inheritance see xSemaphoreCreateMutex(). - * - * @return Handle to the created semaphore, or NULL if the memory required to - * hold the semaphore's data structures could not be allocated. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore = NULL;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to xSemaphoreCreateBinary().
-    // This is a macro so pass the variable in directly.
-    xSemaphore = xSemaphoreCreateBinary();
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.
-    }
- }
- 
- * \defgroup xSemaphoreCreateBinary xSemaphoreCreateBinary - * \ingroup Semaphores - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define xSemaphoreCreateBinary() xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ) -#endif - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateBinaryStatic( StaticSemaphore_t *pxSemaphoreBuffer )
- * - * Creates a new binary semaphore instance, and returns a handle by which the - * new semaphore can be referenced. - * - * NOTE: In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a binary semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * Internally, within the FreeRTOS implementation, binary semaphores use a block - * of memory, in which the semaphore structure is stored. If a binary semaphore - * is created using xSemaphoreCreateBinary() then the required memory is - * automatically dynamically allocated inside the xSemaphoreCreateBinary() - * function. (see http://www.freertos.org/a00111.html). If a binary semaphore - * is created using xSemaphoreCreateBinaryStatic() then the application writer - * must provide the memory. xSemaphoreCreateBinaryStatic() therefore allows a - * binary semaphore to be created without using any dynamic memory allocation. - * - * This type of semaphore can be used for pure synchronisation between tasks or - * between an interrupt and a task. The semaphore need not be given back once - * obtained, so one task/interrupt can continuously 'give' the semaphore while - * another continuously 'takes' the semaphore. For this reason this type of - * semaphore does not use a priority inheritance mechanism. For an alternative - * that does use priority inheritance see xSemaphoreCreateMutex(). - * - * @param pxSemaphoreBuffer Must point to a variable of type StaticSemaphore_t, - * which will then be used to hold the semaphore's data structure, removing the - * need for the memory to be allocated dynamically. - * - * @return If the semaphore is created then a handle to the created semaphore is - * returned. If pxSemaphoreBuffer is NULL then NULL is returned. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore = NULL;
- StaticSemaphore_t xSemaphoreBuffer;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to xSemaphoreCreateBinary().
-    // The semaphore's data structures will be placed in the xSemaphoreBuffer
-    // variable, the address of which is passed into the function.  The
-    // function's parameter is not NULL, so the function will not attempt any
-    // dynamic memory allocation, and therefore the function will not return
-    // return NULL.
-    xSemaphore = xSemaphoreCreateBinary( &xSemaphoreBuffer );
-
-    // Rest of task code goes here.
- }
- 
- * \defgroup xSemaphoreCreateBinaryStatic xSemaphoreCreateBinaryStatic - * \ingroup Semaphores - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - #define xSemaphoreCreateBinaryStatic( pxStaticSemaphore ) xQueueGenericCreateStatic( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, NULL, pxStaticSemaphore, queueQUEUE_TYPE_BINARY_SEMAPHORE ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * semphr. h - *
xSemaphoreTake(
- *                   SemaphoreHandle_t xSemaphore,
- *                   TickType_t xBlockTime
- *               )
- * - * Macro to obtain a semaphore. The semaphore must have previously been - * created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or - * xSemaphoreCreateCounting(). - * - * @param xSemaphore A handle to the semaphore being taken - obtained when - * the semaphore was created. - * - * @param xBlockTime The time in ticks to wait for the semaphore to become - * available. The macro portTICK_PERIOD_MS can be used to convert this to a - * real time. A block time of zero can be used to poll the semaphore. A block - * time of portMAX_DELAY can be used to block indefinitely (provided - * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h). - * - * @return pdTRUE if the semaphore was obtained. pdFALSE - * if xBlockTime expired without the semaphore becoming available. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore = NULL;
-
- // A task that creates a semaphore.
- void vATask( void * pvParameters )
- {
-    // Create the semaphore to guard a shared resource.
-    xSemaphore = xSemaphoreCreateBinary();
- }
-
- // A task that uses the semaphore.
- void vAnotherTask( void * pvParameters )
- {
-    // ... Do other things.
-
-    if( xSemaphore != NULL )
-    {
-        // See if we can obtain the semaphore.  If the semaphore is not available
-        // wait 10 ticks to see if it becomes free.
-        if( xSemaphoreTake( xSemaphore, ( TickType_t ) 10 ) == pdTRUE )
-        {
-            // We were able to obtain the semaphore and can now access the
-            // shared resource.
-
-            // ...
-
-            // We have finished accessing the shared resource.  Release the
-            // semaphore.
-            xSemaphoreGive( xSemaphore );
-        }
-        else
-        {
-            // We could not obtain the semaphore and can therefore not access
-            // the shared resource safely.
-        }
-    }
- }
- 
- * \defgroup xSemaphoreTake xSemaphoreTake - * \ingroup Semaphores - */ -#define xSemaphoreTake( xSemaphore, xBlockTime ) xQueueGenericReceive( ( QueueHandle_t ) ( xSemaphore ), NULL, ( xBlockTime ), pdFALSE ) - -/** - * semphr. h - * xSemaphoreTakeRecursive( - * SemaphoreHandle_t xMutex, - * TickType_t xBlockTime - * ) - * - * Macro to recursively obtain, or 'take', a mutex type semaphore. - * The mutex must have previously been created using a call to - * xSemaphoreCreateRecursiveMutex(); - * - * configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this - * macro to be available. - * - * This macro must not be used on mutexes created using xSemaphoreCreateMutex(). - * - * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex - * doesn't become available again until the owner has called - * xSemaphoreGiveRecursive() for each successful 'take' request. For example, - * if a task successfully 'takes' the same mutex 5 times then the mutex will - * not be available to any other task until it has also 'given' the mutex back - * exactly five times. - * - * @param xMutex A handle to the mutex being obtained. This is the - * handle returned by xSemaphoreCreateRecursiveMutex(); - * - * @param xBlockTime The time in ticks to wait for the semaphore to become - * available. The macro portTICK_PERIOD_MS can be used to convert this to a - * real time. A block time of zero can be used to poll the semaphore. If - * the task already owns the semaphore then xSemaphoreTakeRecursive() will - * return immediately no matter what the value of xBlockTime. - * - * @return pdTRUE if the semaphore was obtained. pdFALSE if xBlockTime - * expired without the semaphore becoming available. - * - * Example usage: -
- SemaphoreHandle_t xMutex = NULL;
-
- // A task that creates a mutex.
- void vATask( void * pvParameters )
- {
-    // Create the mutex to guard a shared resource.
-    xMutex = xSemaphoreCreateRecursiveMutex();
- }
-
- // A task that uses the mutex.
- void vAnotherTask( void * pvParameters )
- {
-    // ... Do other things.
-
-    if( xMutex != NULL )
-    {
-        // See if we can obtain the mutex.  If the mutex is not available
-        // wait 10 ticks to see if it becomes free.
-        if( xSemaphoreTakeRecursive( xSemaphore, ( TickType_t ) 10 ) == pdTRUE )
-        {
-            // We were able to obtain the mutex and can now access the
-            // shared resource.
-
-            // ...
-            // For some reason due to the nature of the code further calls to
-			// xSemaphoreTakeRecursive() are made on the same mutex.  In real
-			// code these would not be just sequential calls as this would make
-			// no sense.  Instead the calls are likely to be buried inside
-			// a more complex call structure.
-            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
-            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
-
-            // The mutex has now been 'taken' three times, so will not be
-			// available to another task until it has also been given back
-			// three times.  Again it is unlikely that real code would have
-			// these calls sequentially, but instead buried in a more complex
-			// call structure.  This is just for illustrative purposes.
-            xSemaphoreGiveRecursive( xMutex );
-			xSemaphoreGiveRecursive( xMutex );
-			xSemaphoreGiveRecursive( xMutex );
-
-			// Now the mutex can be taken by other tasks.
-        }
-        else
-        {
-            // We could not obtain the mutex and can therefore not access
-            // the shared resource safely.
-        }
-    }
- }
- 
- * \defgroup xSemaphoreTakeRecursive xSemaphoreTakeRecursive - * \ingroup Semaphores - */ -#if( configUSE_RECURSIVE_MUTEXES == 1 ) - #define xSemaphoreTakeRecursive( xMutex, xBlockTime ) xQueueTakeMutexRecursive( ( xMutex ), ( xBlockTime ) ) -#endif - -/** - * semphr. h - *
xSemaphoreGive( SemaphoreHandle_t xSemaphore )
- * - * Macro to release a semaphore. The semaphore must have previously been - * created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or - * xSemaphoreCreateCounting(). and obtained using sSemaphoreTake(). - * - * This macro must not be used from an ISR. See xSemaphoreGiveFromISR () for - * an alternative which can be used from an ISR. - * - * This macro must also not be used on semaphores created using - * xSemaphoreCreateRecursiveMutex(). - * - * @param xSemaphore A handle to the semaphore being released. This is the - * handle returned when the semaphore was created. - * - * @return pdTRUE if the semaphore was released. pdFALSE if an error occurred. - * Semaphores are implemented using queues. An error can occur if there is - * no space on the queue to post a message - indicating that the - * semaphore was not first obtained correctly. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore = NULL;
-
- void vATask( void * pvParameters )
- {
-    // Create the semaphore to guard a shared resource.
-    xSemaphore = vSemaphoreCreateBinary();
-
-    if( xSemaphore != NULL )
-    {
-        if( xSemaphoreGive( xSemaphore ) != pdTRUE )
-        {
-            // We would expect this call to fail because we cannot give
-            // a semaphore without first "taking" it!
-        }
-
-        // Obtain the semaphore - don't block if the semaphore is not
-        // immediately available.
-        if( xSemaphoreTake( xSemaphore, ( TickType_t ) 0 ) )
-        {
-            // We now have the semaphore and can access the shared resource.
-
-            // ...
-
-            // We have finished accessing the shared resource so can free the
-            // semaphore.
-            if( xSemaphoreGive( xSemaphore ) != pdTRUE )
-            {
-                // We would not expect this call to fail because we must have
-                // obtained the semaphore to get here.
-            }
-        }
-    }
- }
- 
- * \defgroup xSemaphoreGive xSemaphoreGive - * \ingroup Semaphores - */ -#define xSemaphoreGive( xSemaphore ) xQueueGenericSend( ( QueueHandle_t ) ( xSemaphore ), NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK ) - -/** - * semphr. h - *
xSemaphoreGiveRecursive( SemaphoreHandle_t xMutex )
- * - * Macro to recursively release, or 'give', a mutex type semaphore. - * The mutex must have previously been created using a call to - * xSemaphoreCreateRecursiveMutex(); - * - * configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this - * macro to be available. - * - * This macro must not be used on mutexes created using xSemaphoreCreateMutex(). - * - * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex - * doesn't become available again until the owner has called - * xSemaphoreGiveRecursive() for each successful 'take' request. For example, - * if a task successfully 'takes' the same mutex 5 times then the mutex will - * not be available to any other task until it has also 'given' the mutex back - * exactly five times. - * - * @param xMutex A handle to the mutex being released, or 'given'. This is the - * handle returned by xSemaphoreCreateMutex(); - * - * @return pdTRUE if the semaphore was given. - * - * Example usage: -
- SemaphoreHandle_t xMutex = NULL;
-
- // A task that creates a mutex.
- void vATask( void * pvParameters )
- {
-    // Create the mutex to guard a shared resource.
-    xMutex = xSemaphoreCreateRecursiveMutex();
- }
-
- // A task that uses the mutex.
- void vAnotherTask( void * pvParameters )
- {
-    // ... Do other things.
-
-    if( xMutex != NULL )
-    {
-        // See if we can obtain the mutex.  If the mutex is not available
-        // wait 10 ticks to see if it becomes free.
-        if( xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 ) == pdTRUE )
-        {
-            // We were able to obtain the mutex and can now access the
-            // shared resource.
-
-            // ...
-            // For some reason due to the nature of the code further calls to
-			// xSemaphoreTakeRecursive() are made on the same mutex.  In real
-			// code these would not be just sequential calls as this would make
-			// no sense.  Instead the calls are likely to be buried inside
-			// a more complex call structure.
-            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
-            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
-
-            // The mutex has now been 'taken' three times, so will not be
-			// available to another task until it has also been given back
-			// three times.  Again it is unlikely that real code would have
-			// these calls sequentially, it would be more likely that the calls
-			// to xSemaphoreGiveRecursive() would be called as a call stack
-			// unwound.  This is just for demonstrative purposes.
-            xSemaphoreGiveRecursive( xMutex );
-			xSemaphoreGiveRecursive( xMutex );
-			xSemaphoreGiveRecursive( xMutex );
-
-			// Now the mutex can be taken by other tasks.
-        }
-        else
-        {
-            // We could not obtain the mutex and can therefore not access
-            // the shared resource safely.
-        }
-    }
- }
- 
- * \defgroup xSemaphoreGiveRecursive xSemaphoreGiveRecursive - * \ingroup Semaphores - */ -#if( configUSE_RECURSIVE_MUTEXES == 1 ) - #define xSemaphoreGiveRecursive( xMutex ) xQueueGiveMutexRecursive( ( xMutex ) ) -#endif - -/** - * semphr. h - *
- xSemaphoreGiveFromISR(
-                          SemaphoreHandle_t xSemaphore,
-                          BaseType_t *pxHigherPriorityTaskWoken
-                      )
- * - * Macro to release a semaphore. The semaphore must have previously been - * created with a call to xSemaphoreCreateBinary() or xSemaphoreCreateCounting(). - * - * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex()) - * must not be used with this macro. - * - * This macro can be used from an ISR. - * - * @param xSemaphore A handle to the semaphore being released. This is the - * handle returned when the semaphore was created. - * - * @param pxHigherPriorityTaskWoken xSemaphoreGiveFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if giving the semaphore caused a task - * to unblock, and the unblocked task has a priority higher than the currently - * running task. If xSemaphoreGiveFromISR() sets this value to pdTRUE then - * a context switch should be requested before the interrupt is exited. - * - * @return pdTRUE if the semaphore was successfully given, otherwise errQUEUE_FULL. - * - * Example usage: -
- \#define LONG_TIME 0xffff
- \#define TICKS_TO_WAIT	10
- SemaphoreHandle_t xSemaphore = NULL;
-
- // Repetitive task.
- void vATask( void * pvParameters )
- {
-    for( ;; )
-    {
-        // We want this task to run every 10 ticks of a timer.  The semaphore
-        // was created before this task was started.
-
-        // Block waiting for the semaphore to become available.
-        if( xSemaphoreTake( xSemaphore, LONG_TIME ) == pdTRUE )
-        {
-            // It is time to execute.
-
-            // ...
-
-            // We have finished our task.  Return to the top of the loop where
-            // we will block on the semaphore until it is time to execute
-            // again.  Note when using the semaphore for synchronisation with an
-			// ISR in this manner there is no need to 'give' the semaphore back.
-        }
-    }
- }
-
- // Timer ISR
- void vTimerISR( void * pvParameters )
- {
- static uint8_t ucLocalTickCount = 0;
- static BaseType_t xHigherPriorityTaskWoken;
-
-    // A timer tick has occurred.
-
-    // ... Do other time functions.
-
-    // Is it time for vATask () to run?
-	xHigherPriorityTaskWoken = pdFALSE;
-    ucLocalTickCount++;
-    if( ucLocalTickCount >= TICKS_TO_WAIT )
-    {
-        // Unblock the task by releasing the semaphore.
-        xSemaphoreGiveFromISR( xSemaphore, &xHigherPriorityTaskWoken );
-
-        // Reset the count so we release the semaphore again in 10 ticks time.
-        ucLocalTickCount = 0;
-    }
-
-    if( xHigherPriorityTaskWoken != pdFALSE )
-    {
-        // We can force a context switch here.  Context switching from an
-        // ISR uses port specific syntax.  Check the demo task for your port
-        // to find the syntax required.
-    }
- }
- 
- * \defgroup xSemaphoreGiveFromISR xSemaphoreGiveFromISR - * \ingroup Semaphores - */ -#define xSemaphoreGiveFromISR( xSemaphore, pxHigherPriorityTaskWoken ) xQueueGiveFromISR( ( QueueHandle_t ) ( xSemaphore ), ( pxHigherPriorityTaskWoken ) ) - -/** - * semphr. h - *
- xSemaphoreTakeFromISR(
-                          SemaphoreHandle_t xSemaphore,
-                          BaseType_t *pxHigherPriorityTaskWoken
-                      )
- * - * Macro to take a semaphore from an ISR. The semaphore must have - * previously been created with a call to xSemaphoreCreateBinary() or - * xSemaphoreCreateCounting(). - * - * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex()) - * must not be used with this macro. - * - * This macro can be used from an ISR, however taking a semaphore from an ISR - * is not a common operation. It is likely to only be useful when taking a - * counting semaphore when an interrupt is obtaining an object from a resource - * pool (when the semaphore count indicates the number of resources available). - * - * @param xSemaphore A handle to the semaphore being taken. This is the - * handle returned when the semaphore was created. - * - * @param pxHigherPriorityTaskWoken xSemaphoreTakeFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if taking the semaphore caused a task - * to unblock, and the unblocked task has a priority higher than the currently - * running task. If xSemaphoreTakeFromISR() sets this value to pdTRUE then - * a context switch should be requested before the interrupt is exited. - * - * @return pdTRUE if the semaphore was successfully taken, otherwise - * pdFALSE - */ -#define xSemaphoreTakeFromISR( xSemaphore, pxHigherPriorityTaskWoken ) xQueueReceiveFromISR( ( QueueHandle_t ) ( xSemaphore ), NULL, ( pxHigherPriorityTaskWoken ) ) - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateMutex( void )
- * - * Creates a new mutex type semaphore instance, and returns a handle by which - * the new mutex can be referenced. - * - * Internally, within the FreeRTOS implementation, mutex semaphores use a block - * of memory, in which the mutex structure is stored. If a mutex is created - * using xSemaphoreCreateMutex() then the required memory is automatically - * dynamically allocated inside the xSemaphoreCreateMutex() function. (see - * http://www.freertos.org/a00111.html). If a mutex is created using - * xSemaphoreCreateMutexStatic() then the application writer must provided the - * memory. xSemaphoreCreateMutexStatic() therefore allows a mutex to be created - * without using any dynamic memory allocation. - * - * Mutexes created using this function can be accessed using the xSemaphoreTake() - * and xSemaphoreGive() macros. The xSemaphoreTakeRecursive() and - * xSemaphoreGiveRecursive() macros must not be used. - * - * This type of semaphore uses a priority inheritance mechanism so a task - * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the - * semaphore it is no longer required. - * - * Mutex type semaphores cannot be used from within interrupt service routines. - * - * See xSemaphoreCreateBinary() for an alternative implementation that can be - * used for pure synchronisation (where one task or interrupt always 'gives' the - * semaphore and another always 'takes' the semaphore) and from within interrupt - * service routines. - * - * @return If the mutex was successfully created then a handle to the created - * semaphore is returned. If there was not enough heap to allocate the mutex - * data structures then NULL is returned. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to xSemaphoreCreateMutex().
-    // This is a macro so pass the variable in directly.
-    xSemaphore = xSemaphoreCreateMutex();
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.
-    }
- }
- 
- * \defgroup xSemaphoreCreateMutex xSemaphoreCreateMutex - * \ingroup Semaphores - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define xSemaphoreCreateMutex() xQueueCreateMutex( queueQUEUE_TYPE_MUTEX ) -#endif - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateMutexStatic( StaticSemaphore_t *pxMutexBuffer )
- * - * Creates a new mutex type semaphore instance, and returns a handle by which - * the new mutex can be referenced. - * - * Internally, within the FreeRTOS implementation, mutex semaphores use a block - * of memory, in which the mutex structure is stored. If a mutex is created - * using xSemaphoreCreateMutex() then the required memory is automatically - * dynamically allocated inside the xSemaphoreCreateMutex() function. (see - * http://www.freertos.org/a00111.html). If a mutex is created using - * xSemaphoreCreateMutexStatic() then the application writer must provided the - * memory. xSemaphoreCreateMutexStatic() therefore allows a mutex to be created - * without using any dynamic memory allocation. - * - * Mutexes created using this function can be accessed using the xSemaphoreTake() - * and xSemaphoreGive() macros. The xSemaphoreTakeRecursive() and - * xSemaphoreGiveRecursive() macros must not be used. - * - * This type of semaphore uses a priority inheritance mechanism so a task - * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the - * semaphore it is no longer required. - * - * Mutex type semaphores cannot be used from within interrupt service routines. - * - * See xSemaphoreCreateBinary() for an alternative implementation that can be - * used for pure synchronisation (where one task or interrupt always 'gives' the - * semaphore and another always 'takes' the semaphore) and from within interrupt - * service routines. - * - * @param pxMutexBuffer Must point to a variable of type StaticSemaphore_t, - * which will be used to hold the mutex's data structure, removing the need for - * the memory to be allocated dynamically. - * - * @return If the mutex was successfully created then a handle to the created - * mutex is returned. If pxMutexBuffer was NULL then NULL is returned. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
- StaticSemaphore_t xMutexBuffer;
-
- void vATask( void * pvParameters )
- {
-    // A mutex cannot be used before it has been created.  xMutexBuffer is
-    // into xSemaphoreCreateMutexStatic() so no dynamic memory allocation is
-    // attempted.
-    xSemaphore = xSemaphoreCreateMutexStatic( &xMutexBuffer );
-
-    // As no dynamic memory allocation was performed, xSemaphore cannot be NULL,
-    // so there is no need to check it.
- }
- 
- * \defgroup xSemaphoreCreateMutexStatic xSemaphoreCreateMutexStatic - * \ingroup Semaphores - */ - #if( configSUPPORT_STATIC_ALLOCATION == 1 ) - #define xSemaphoreCreateMutexStatic( pxMutexBuffer ) xQueueCreateMutexStatic( queueQUEUE_TYPE_MUTEX, ( pxMutexBuffer ) ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ - - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateRecursiveMutex( void )
- * - * Creates a new recursive mutex type semaphore instance, and returns a handle - * by which the new recursive mutex can be referenced. - * - * Internally, within the FreeRTOS implementation, recursive mutexs use a block - * of memory, in which the mutex structure is stored. If a recursive mutex is - * created using xSemaphoreCreateRecursiveMutex() then the required memory is - * automatically dynamically allocated inside the - * xSemaphoreCreateRecursiveMutex() function. (see - * http://www.freertos.org/a00111.html). If a recursive mutex is created using - * xSemaphoreCreateRecursiveMutexStatic() then the application writer must - * provide the memory that will get used by the mutex. - * xSemaphoreCreateRecursiveMutexStatic() therefore allows a recursive mutex to - * be created without using any dynamic memory allocation. - * - * Mutexes created using this macro can be accessed using the - * xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() macros. The - * xSemaphoreTake() and xSemaphoreGive() macros must not be used. - * - * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex - * doesn't become available again until the owner has called - * xSemaphoreGiveRecursive() for each successful 'take' request. For example, - * if a task successfully 'takes' the same mutex 5 times then the mutex will - * not be available to any other task until it has also 'given' the mutex back - * exactly five times. - * - * This type of semaphore uses a priority inheritance mechanism so a task - * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the - * semaphore it is no longer required. - * - * Mutex type semaphores cannot be used from within interrupt service routines. - * - * See xSemaphoreCreateBinary() for an alternative implementation that can be - * used for pure synchronisation (where one task or interrupt always 'gives' the - * semaphore and another always 'takes' the semaphore) and from within interrupt - * service routines. - * - * @return xSemaphore Handle to the created mutex semaphore. Should be of type - * SemaphoreHandle_t. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to xSemaphoreCreateMutex().
-    // This is a macro so pass the variable in directly.
-    xSemaphore = xSemaphoreCreateRecursiveMutex();
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.
-    }
- }
- 
- * \defgroup xSemaphoreCreateRecursiveMutex xSemaphoreCreateRecursiveMutex - * \ingroup Semaphores - */ -#if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configUSE_RECURSIVE_MUTEXES == 1 ) ) - #define xSemaphoreCreateRecursiveMutex() xQueueCreateMutex( queueQUEUE_TYPE_RECURSIVE_MUTEX ) -#endif - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateRecursiveMutexStatic( StaticSemaphore_t *pxMutexBuffer )
- * - * Creates a new recursive mutex type semaphore instance, and returns a handle - * by which the new recursive mutex can be referenced. - * - * Internally, within the FreeRTOS implementation, recursive mutexs use a block - * of memory, in which the mutex structure is stored. If a recursive mutex is - * created using xSemaphoreCreateRecursiveMutex() then the required memory is - * automatically dynamically allocated inside the - * xSemaphoreCreateRecursiveMutex() function. (see - * http://www.freertos.org/a00111.html). If a recursive mutex is created using - * xSemaphoreCreateRecursiveMutexStatic() then the application writer must - * provide the memory that will get used by the mutex. - * xSemaphoreCreateRecursiveMutexStatic() therefore allows a recursive mutex to - * be created without using any dynamic memory allocation. - * - * Mutexes created using this macro can be accessed using the - * xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() macros. The - * xSemaphoreTake() and xSemaphoreGive() macros must not be used. - * - * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex - * doesn't become available again until the owner has called - * xSemaphoreGiveRecursive() for each successful 'take' request. For example, - * if a task successfully 'takes' the same mutex 5 times then the mutex will - * not be available to any other task until it has also 'given' the mutex back - * exactly five times. - * - * This type of semaphore uses a priority inheritance mechanism so a task - * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the - * semaphore it is no longer required. - * - * Mutex type semaphores cannot be used from within interrupt service routines. - * - * See xSemaphoreCreateBinary() for an alternative implementation that can be - * used for pure synchronisation (where one task or interrupt always 'gives' the - * semaphore and another always 'takes' the semaphore) and from within interrupt - * service routines. - * - * @param pxMutexBuffer Must point to a variable of type StaticSemaphore_t, - * which will then be used to hold the recursive mutex's data structure, - * removing the need for the memory to be allocated dynamically. - * - * @return If the recursive mutex was successfully created then a handle to the - * created recursive mutex is returned. If pxMutexBuffer was NULL then NULL is - * returned. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
- StaticSemaphore_t xMutexBuffer;
-
- void vATask( void * pvParameters )
- {
-    // A recursive semaphore cannot be used before it is created.  Here a
-    // recursive mutex is created using xSemaphoreCreateRecursiveMutexStatic().
-    // The address of xMutexBuffer is passed into the function, and will hold
-    // the mutexes data structures - so no dynamic memory allocation will be
-    // attempted.
-    xSemaphore = xSemaphoreCreateRecursiveMutexStatic( &xMutexBuffer );
-
-    // As no dynamic memory allocation was performed, xSemaphore cannot be NULL,
-    // so there is no need to check it.
- }
- 
- * \defgroup xSemaphoreCreateRecursiveMutexStatic xSemaphoreCreateRecursiveMutexStatic - * \ingroup Semaphores - */ -#if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_RECURSIVE_MUTEXES == 1 ) ) - #define xSemaphoreCreateRecursiveMutexStatic( pxStaticSemaphore ) xQueueCreateMutexStatic( queueQUEUE_TYPE_RECURSIVE_MUTEX, pxStaticSemaphore ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateCounting( UBaseType_t uxMaxCount, UBaseType_t uxInitialCount )
- * - * Creates a new counting semaphore instance, and returns a handle by which the - * new counting semaphore can be referenced. - * - * In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a counting semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * Internally, within the FreeRTOS implementation, counting semaphores use a - * block of memory, in which the counting semaphore structure is stored. If a - * counting semaphore is created using xSemaphoreCreateCounting() then the - * required memory is automatically dynamically allocated inside the - * xSemaphoreCreateCounting() function. (see - * http://www.freertos.org/a00111.html). If a counting semaphore is created - * using xSemaphoreCreateCountingStatic() then the application writer can - * instead optionally provide the memory that will get used by the counting - * semaphore. xSemaphoreCreateCountingStatic() therefore allows a counting - * semaphore to be created without using any dynamic memory allocation. - * - * Counting semaphores are typically used for two things: - * - * 1) Counting events. - * - * In this usage scenario an event handler will 'give' a semaphore each time - * an event occurs (incrementing the semaphore count value), and a handler - * task will 'take' a semaphore each time it processes an event - * (decrementing the semaphore count value). The count value is therefore - * the difference between the number of events that have occurred and the - * number that have been processed. In this case it is desirable for the - * initial count value to be zero. - * - * 2) Resource management. - * - * In this usage scenario the count value indicates the number of resources - * available. To obtain control of a resource a task must first obtain a - * semaphore - decrementing the semaphore count value. When the count value - * reaches zero there are no free resources. When a task finishes with the - * resource it 'gives' the semaphore back - incrementing the semaphore count - * value. In this case it is desirable for the initial count value to be - * equal to the maximum count value, indicating that all resources are free. - * - * @param uxMaxCount The maximum count value that can be reached. When the - * semaphore reaches this value it can no longer be 'given'. - * - * @param uxInitialCount The count value assigned to the semaphore when it is - * created. - * - * @return Handle to the created semaphore. Null if the semaphore could not be - * created. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
-
- void vATask( void * pvParameters )
- {
- SemaphoreHandle_t xSemaphore = NULL;
-
-    // Semaphore cannot be used before a call to xSemaphoreCreateCounting().
-    // The max value to which the semaphore can count should be 10, and the
-    // initial value assigned to the count should be 0.
-    xSemaphore = xSemaphoreCreateCounting( 10, 0 );
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.
-    }
- }
- 
- * \defgroup xSemaphoreCreateCounting xSemaphoreCreateCounting - * \ingroup Semaphores - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define xSemaphoreCreateCounting( uxMaxCount, uxInitialCount ) xQueueCreateCountingSemaphore( ( uxMaxCount ), ( uxInitialCount ) ) -#endif - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateCountingStatic( UBaseType_t uxMaxCount, UBaseType_t uxInitialCount, StaticSemaphore_t *pxSemaphoreBuffer )
- * - * Creates a new counting semaphore instance, and returns a handle by which the - * new counting semaphore can be referenced. - * - * In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a counting semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * Internally, within the FreeRTOS implementation, counting semaphores use a - * block of memory, in which the counting semaphore structure is stored. If a - * counting semaphore is created using xSemaphoreCreateCounting() then the - * required memory is automatically dynamically allocated inside the - * xSemaphoreCreateCounting() function. (see - * http://www.freertos.org/a00111.html). If a counting semaphore is created - * using xSemaphoreCreateCountingStatic() then the application writer must - * provide the memory. xSemaphoreCreateCountingStatic() therefore allows a - * counting semaphore to be created without using any dynamic memory allocation. - * - * Counting semaphores are typically used for two things: - * - * 1) Counting events. - * - * In this usage scenario an event handler will 'give' a semaphore each time - * an event occurs (incrementing the semaphore count value), and a handler - * task will 'take' a semaphore each time it processes an event - * (decrementing the semaphore count value). The count value is therefore - * the difference between the number of events that have occurred and the - * number that have been processed. In this case it is desirable for the - * initial count value to be zero. - * - * 2) Resource management. - * - * In this usage scenario the count value indicates the number of resources - * available. To obtain control of a resource a task must first obtain a - * semaphore - decrementing the semaphore count value. When the count value - * reaches zero there are no free resources. When a task finishes with the - * resource it 'gives' the semaphore back - incrementing the semaphore count - * value. In this case it is desirable for the initial count value to be - * equal to the maximum count value, indicating that all resources are free. - * - * @param uxMaxCount The maximum count value that can be reached. When the - * semaphore reaches this value it can no longer be 'given'. - * - * @param uxInitialCount The count value assigned to the semaphore when it is - * created. - * - * @param pxSemaphoreBuffer Must point to a variable of type StaticSemaphore_t, - * which will then be used to hold the semaphore's data structure, removing the - * need for the memory to be allocated dynamically. - * - * @return If the counting semaphore was successfully created then a handle to - * the created counting semaphore is returned. If pxSemaphoreBuffer was NULL - * then NULL is returned. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
- StaticSemaphore_t xSemaphoreBuffer;
-
- void vATask( void * pvParameters )
- {
- SemaphoreHandle_t xSemaphore = NULL;
-
-    // Counting semaphore cannot be used before they have been created.  Create
-    // a counting semaphore using xSemaphoreCreateCountingStatic().  The max
-    // value to which the semaphore can count is 10, and the initial value
-    // assigned to the count will be 0.  The address of xSemaphoreBuffer is
-    // passed in and will be used to hold the semaphore structure, so no dynamic
-    // memory allocation will be used.
-    xSemaphore = xSemaphoreCreateCounting( 10, 0, &xSemaphoreBuffer );
-
-    // No memory allocation was attempted so xSemaphore cannot be NULL, so there
-    // is no need to check its value.
- }
- 
- * \defgroup xSemaphoreCreateCountingStatic xSemaphoreCreateCountingStatic - * \ingroup Semaphores - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - #define xSemaphoreCreateCountingStatic( uxMaxCount, uxInitialCount, pxSemaphoreBuffer ) xQueueCreateCountingSemaphoreStatic( ( uxMaxCount ), ( uxInitialCount ), ( pxSemaphoreBuffer ) ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * semphr. h - *
void vSemaphoreDelete( SemaphoreHandle_t xSemaphore );
- * - * Delete a semaphore. This function must be used with care. For example, - * do not delete a mutex type semaphore if the mutex is held by a task. - * - * @param xSemaphore A handle to the semaphore to be deleted. - * - * \defgroup vSemaphoreDelete vSemaphoreDelete - * \ingroup Semaphores - */ -#define vSemaphoreDelete( xSemaphore ) vQueueDelete( ( QueueHandle_t ) ( xSemaphore ) ) - -/** - * semphr.h - *
TaskHandle_t xSemaphoreGetMutexHolder( SemaphoreHandle_t xMutex );
- * - * If xMutex is indeed a mutex type semaphore, return the current mutex holder. - * If xMutex is not a mutex type semaphore, or the mutex is available (not held - * by a task), return NULL. - * - * Note: This is a good way of determining if the calling task is the mutex - * holder, but not a good way of determining the identity of the mutex holder as - * the holder may change between the function exiting and the returned value - * being tested. - */ -#define xSemaphoreGetMutexHolder( xSemaphore ) xQueueGetMutexHolder( ( xSemaphore ) ) - -/** - * semphr.h - *
UBaseType_t uxSemaphoreGetCount( SemaphoreHandle_t xSemaphore );
- * - * If the semaphore is a counting semaphore then uxSemaphoreGetCount() returns - * its current count value. If the semaphore is a binary semaphore then - * uxSemaphoreGetCount() returns 1 if the semaphore is available, and 0 if the - * semaphore is not available. - * - */ -#define uxSemaphoreGetCount( xSemaphore ) uxQueueMessagesWaiting( ( QueueHandle_t ) ( xSemaphore ) ) - -#endif /* SEMAPHORE_H */ - - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/stdint.readme b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/stdint.readme deleted file mode 100644 index 4414c29..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/stdint.readme +++ /dev/null @@ -1,27 +0,0 @@ - -#ifndef FREERTOS_STDINT -#define FREERTOS_STDINT - -/******************************************************************************* - * THIS IS NOT A FULL stdint.h IMPLEMENTATION - It only contains the definitions - * necessary to build the FreeRTOS code. It is provided to allow FreeRTOS to be - * built using compilers that do not provide their own stdint.h definition. - * - * To use this file: - * - * 1) Copy this file into the directory that contains your FreeRTOSConfig.h - * header file, as that directory will already be in the compilers include - * path. - * - * 2) Rename the copied file stdint.h. - * - */ - -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef short int16_t; -typedef unsigned short uint16_t; -typedef long int32_t; -typedef unsigned long uint32_t; - -#endif /* FREERTOS_STDINT */ diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/task.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/task.h deleted file mode 100644 index 8ae4c29..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/task.h +++ /dev/null @@ -1,2294 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - - -#ifndef INC_TASK_H -#define INC_TASK_H - -#ifndef INC_FREERTOS_H - #error "include FreeRTOS.h must appear in source files before include task.h" -#endif - -#include "list.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/*----------------------------------------------------------- - * MACROS AND DEFINITIONS - *----------------------------------------------------------*/ - -#define tskKERNEL_VERSION_NUMBER "V9.0.0" -#define tskKERNEL_VERSION_MAJOR 9 -#define tskKERNEL_VERSION_MINOR 0 -#define tskKERNEL_VERSION_BUILD 0 - -//----------------------------------------------------- add -#ifndef CONFIG_USE_TCM_HEAP - #if defined(CONFIG_PLATFORM_8195A) - #define CONFIG_USE_TCM_HEAP 1 /* USE TCM HEAP */ - #else - #define CONFIG_USE_TCM_HEAP 0 - #endif -#endif -//------------------------------------------------- end add - -/** - * task. h - * - * Type by which tasks are referenced. For example, a call to xTaskCreate - * returns (via a pointer parameter) an TaskHandle_t variable that can then - * be used as a parameter to vTaskDelete to delete the task. - * - * \defgroup TaskHandle_t TaskHandle_t - * \ingroup Tasks - */ -typedef void * TaskHandle_t; - -/* - * Defines the prototype to which the application task hook function must - * conform. - */ -typedef BaseType_t (*TaskHookFunction_t)( void * ); - -/* Task states returned by eTaskGetState. */ -typedef enum -{ - eRunning = 0, /* A task is querying the state of itself, so must be running. */ - eReady, /* The task being queried is in a read or pending ready list. */ - eBlocked, /* The task being queried is in the Blocked state. */ - eSuspended, /* The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */ - eDeleted, /* The task being queried has been deleted, but its TCB has not yet been freed. */ - eInvalid /* Used as an 'invalid state' value. */ -} eTaskState; - -/* Actions that can be performed when vTaskNotify() is called. */ -typedef enum -{ - eNoAction = 0, /* Notify the task without updating its notify value. */ - eSetBits, /* Set bits in the task's notification value. */ - eIncrement, /* Increment the task's notification value. */ - eSetValueWithOverwrite, /* Set the task's notification value to a specific value even if the previous value has not yet been read by the task. */ - eSetValueWithoutOverwrite /* Set the task's notification value if the previous value has been read by the task. */ -} eNotifyAction; - -/* - * Used internally only. - */ -typedef struct xTIME_OUT -{ - BaseType_t xOverflowCount; - TickType_t xTimeOnEntering; -} TimeOut_t; - -/* - * Defines the memory ranges allocated to the task when an MPU is used. - */ -typedef struct xMEMORY_REGION -{ - void *pvBaseAddress; - uint32_t ulLengthInBytes; - uint32_t ulParameters; -} MemoryRegion_t; - -/* - * Parameters required to create an MPU protected task. - */ -typedef struct xTASK_PARAMETERS -{ - TaskFunction_t pvTaskCode; - const char * const pcName; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - uint16_t usStackDepth; - void *pvParameters; - UBaseType_t uxPriority; - StackType_t *puxStackBuffer; - MemoryRegion_t xRegions[ portNUM_CONFIGURABLE_REGIONS ]; -} TaskParameters_t; - -/* Used with the uxTaskGetSystemState() function to return the state of each task -in the system. */ -typedef struct xTASK_STATUS -{ - TaskHandle_t xHandle; /* The handle of the task to which the rest of the information in the structure relates. */ - const char *pcTaskName; /* A pointer to the task's name. This value will be invalid if the task was deleted since the structure was populated! */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - UBaseType_t xTaskNumber; /* A number unique to the task. */ - eTaskState eCurrentState; /* The state in which the task existed when the structure was populated. */ - UBaseType_t uxCurrentPriority; /* The priority at which the task was running (may be inherited) when the structure was populated. */ - UBaseType_t uxBasePriority; /* The priority to which the task will return if the task's current priority has been inherited to avoid unbounded priority inversion when obtaining a mutex. Only valid if configUSE_MUTEXES is defined as 1 in FreeRTOSConfig.h. */ - uint32_t ulRunTimeCounter; /* The total run time allocated to the task so far, as defined by the run time stats clock. See http://www.freertos.org/rtos-run-time-stats.html. Only valid when configGENERATE_RUN_TIME_STATS is defined as 1 in FreeRTOSConfig.h. */ - StackType_t *pxStackBase; /* Points to the lowest address of the task's stack area. */ - uint16_t usStackHighWaterMark; /* The minimum amount of stack space that has remained for the task since the task was created. The closer this value is to zero the closer the task has come to overflowing its stack. */ -} TaskStatus_t; - -/* Possible return values for eTaskConfirmSleepModeStatus(). */ -typedef enum -{ - eAbortSleep = 0, /* A task has been made ready or a context switch pended since portSUPPORESS_TICKS_AND_SLEEP() was called - abort entering a sleep mode. */ - eStandardSleep, /* Enter a sleep mode that will not last any longer than the expected idle time. */ - eNoTasksWaitingTimeout /* No tasks are waiting for a timeout so it is safe to enter a sleep mode that can only be exited by an external interrupt. */ -} eSleepModeStatus; - -/** - * Defines the priority used by the idle task. This must not be modified. - * - * \ingroup TaskUtils - */ -#define tskIDLE_PRIORITY ( ( UBaseType_t ) 0U ) - -/** - * task. h - * - * Macro for forcing a context switch. - * - * \defgroup taskYIELD taskYIELD - * \ingroup SchedulerControl - */ -#define taskYIELD() portYIELD() - -/** - * task. h - * - * Macro to mark the start of a critical code region. Preemptive context - * switches cannot occur when in a critical region. - * - * NOTE: This may alter the stack (depending on the portable implementation) - * so must be used with care! - * - * \defgroup taskENTER_CRITICAL taskENTER_CRITICAL - * \ingroup SchedulerControl - */ -#define taskENTER_CRITICAL() portENTER_CRITICAL() -#define taskENTER_CRITICAL_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR() - -/** - * task. h - * - * Macro to mark the end of a critical code region. Preemptive context - * switches cannot occur when in a critical region. - * - * NOTE: This may alter the stack (depending on the portable implementation) - * so must be used with care! - * - * \defgroup taskEXIT_CRITICAL taskEXIT_CRITICAL - * \ingroup SchedulerControl - */ -#define taskEXIT_CRITICAL() portEXIT_CRITICAL() -#define taskEXIT_CRITICAL_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( x ) -/** - * task. h - * - * Macro to disable all maskable interrupts. - * - * \defgroup taskDISABLE_INTERRUPTS taskDISABLE_INTERRUPTS - * \ingroup SchedulerControl - */ -#define taskDISABLE_INTERRUPTS() portDISABLE_INTERRUPTS() - -/** - * task. h - * - * Macro to enable microcontroller interrupts. - * - * \defgroup taskENABLE_INTERRUPTS taskENABLE_INTERRUPTS - * \ingroup SchedulerControl - */ -#define taskENABLE_INTERRUPTS() portENABLE_INTERRUPTS() - -/* Definitions returned by xTaskGetSchedulerState(). taskSCHEDULER_SUSPENDED is -0 to generate more optimal code when configASSERT() is defined as the constant -is used in assert() statements. */ -#define taskSCHEDULER_SUSPENDED ( ( BaseType_t ) 0 ) -#define taskSCHEDULER_NOT_STARTED ( ( BaseType_t ) 1 ) -#define taskSCHEDULER_RUNNING ( ( BaseType_t ) 2 ) - - -/*----------------------------------------------------------- - * TASK CREATION API - *----------------------------------------------------------*/ - -/** - * task. h - *
- BaseType_t xTaskCreate(
-							  TaskFunction_t pvTaskCode,
-							  const char * const pcName,
-							  uint16_t usStackDepth,
-							  void *pvParameters,
-							  UBaseType_t uxPriority,
-							  TaskHandle_t *pvCreatedTask
-						  );
- * - * Create a new task and add it to the list of tasks that are ready to run. - * - * Internally, within the FreeRTOS implementation, tasks use two blocks of - * memory. The first block is used to hold the task's data structures. The - * second block is used by the task as its stack. If a task is created using - * xTaskCreate() then both blocks of memory are automatically dynamically - * allocated inside the xTaskCreate() function. (see - * http://www.freertos.org/a00111.html). If a task is created using - * xTaskCreateStatic() then the application writer must provide the required - * memory. xTaskCreateStatic() therefore allows a task to be created without - * using any dynamic memory allocation. - * - * See xTaskCreateStatic() for a version that does not use any dynamic memory - * allocation. - * - * xTaskCreate() can only be used to create a task that has unrestricted - * access to the entire microcontroller memory map. Systems that include MPU - * support can alternatively create an MPU constrained task using - * xTaskCreateRestricted(). - * - * @param pvTaskCode Pointer to the task entry function. Tasks - * must be implemented to never return (i.e. continuous loop). - * - * @param pcName A descriptive name for the task. This is mainly used to - * facilitate debugging. Max length defined by configMAX_TASK_NAME_LEN - default - * is 16. - * - * @param usStackDepth The size of the task stack specified as the number of - * variables the stack can hold - not the number of bytes. For example, if - * the stack is 16 bits wide and usStackDepth is defined as 100, 200 bytes - * will be allocated for stack storage. - * - * @param pvParameters Pointer that will be used as the parameter for the task - * being created. - * - * @param uxPriority The priority at which the task should run. Systems that - * include MPU support can optionally create tasks in a privileged (system) - * mode by setting bit portPRIVILEGE_BIT of the priority parameter. For - * example, to create a privileged task at priority 2 the uxPriority parameter - * should be set to ( 2 | portPRIVILEGE_BIT ). - * - * @param pvCreatedTask Used to pass back a handle by which the created task - * can be referenced. - * - * @return pdPASS if the task was successfully created and added to a ready - * list, otherwise an error code defined in the file projdefs.h - * - * Example usage: -
- // Task to be created.
- void vTaskCode( void * pvParameters )
- {
-	 for( ;; )
-	 {
-		 // Task code goes here.
-	 }
- }
-
- // Function that creates a task.
- void vOtherFunction( void )
- {
- static uint8_t ucParameterToPass;
- TaskHandle_t xHandle = NULL;
-
-	 // Create the task, storing the handle.  Note that the passed parameter ucParameterToPass
-	 // must exist for the lifetime of the task, so in this case is declared static.  If it was just an
-	 // an automatic stack variable it might no longer exist, or at least have been corrupted, by the time
-	 // the new task attempts to access it.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle );
-     configASSERT( xHandle );
-
-	 // Use the handle to delete the task.
-     if( xHandle != NULL )
-     {
-	     vTaskDelete( xHandle );
-     }
- }
-   
- * \defgroup xTaskCreate xTaskCreate - * \ingroup Tasks - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) -#ifdef CONFIG_USE_TCM_HEAP -BaseType_t xTaskGenericCreate( TaskFunction_t pxTaskCode, - const char * const pcName, - const uint16_t usStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - TaskHandle_t * const pxCreatedTask, - StackType_t * const puxStackBuffer, - const MemoryRegion_t * const xRegions ) PRIVILEGED_FUNCTION; -#define xTaskCreate(pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask ) xTaskGenericCreate( (TaskFunction_t)( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxCreatedTask ), ( NULL ), ( NULL ) ) -#else - BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, - const char * const pcName, - const uint16_t usStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -#endif // CONFIG_USE_TCM_HEAP -#endif - -/** - * task. h - *
- TaskHandle_t xTaskCreateStatic( TaskFunction_t pvTaskCode,
-								 const char * const pcName,
-								 uint32_t ulStackDepth,
-								 void *pvParameters,
-								 UBaseType_t uxPriority,
-								 StackType_t *pxStackBuffer,
-								 StaticTask_t *pxTaskBuffer );
- * - * Create a new task and add it to the list of tasks that are ready to run. - * - * Internally, within the FreeRTOS implementation, tasks use two blocks of - * memory. The first block is used to hold the task's data structures. The - * second block is used by the task as its stack. If a task is created using - * xTaskCreate() then both blocks of memory are automatically dynamically - * allocated inside the xTaskCreate() function. (see - * http://www.freertos.org/a00111.html). If a task is created using - * xTaskCreateStatic() then the application writer must provide the required - * memory. xTaskCreateStatic() therefore allows a task to be created without - * using any dynamic memory allocation. - * - * @param pvTaskCode Pointer to the task entry function. Tasks - * must be implemented to never return (i.e. continuous loop). - * - * @param pcName A descriptive name for the task. This is mainly used to - * facilitate debugging. The maximum length of the string is defined by - * configMAX_TASK_NAME_LEN in FreeRTOSConfig.h. - * - * @param ulStackDepth The size of the task stack specified as the number of - * variables the stack can hold - not the number of bytes. For example, if - * the stack is 32-bits wide and ulStackDepth is defined as 100 then 400 bytes - * will be allocated for stack storage. - * - * @param pvParameters Pointer that will be used as the parameter for the task - * being created. - * - * @param uxPriority The priority at which the task will run. - * - * @param pxStackBuffer Must point to a StackType_t array that has at least - * ulStackDepth indexes - the array will then be used as the task's stack, - * removing the need for the stack to be allocated dynamically. - * - * @param pxTaskBuffer Must point to a variable of type StaticTask_t, which will - * then be used to hold the task's data structures, removing the need for the - * memory to be allocated dynamically. - * - * @return If neither pxStackBuffer or pxTaskBuffer are NULL, then the task will - * be created and pdPASS is returned. If either pxStackBuffer or pxTaskBuffer - * are NULL then the task will not be created and - * errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY is returned. - * - * Example usage: -
-
-    // Dimensions the buffer that the task being created will use as its stack.
-    // NOTE:  This is the number of words the stack will hold, not the number of
-    // bytes.  For example, if each stack item is 32-bits, and this is set to 100,
-    // then 400 bytes (100 * 32-bits) will be allocated.
-    #define STACK_SIZE 200
-
-    // Structure that will hold the TCB of the task being created.
-    StaticTask_t xTaskBuffer;
-
-    // Buffer that the task being created will use as its stack.  Note this is
-    // an array of StackType_t variables.  The size of StackType_t is dependent on
-    // the RTOS port.
-    StackType_t xStack[ STACK_SIZE ];
-
-    // Function that implements the task being created.
-    void vTaskCode( void * pvParameters )
-    {
-        // The parameter value is expected to be 1 as 1 is passed in the
-        // pvParameters value in the call to xTaskCreateStatic().
-        configASSERT( ( uint32_t ) pvParameters == 1UL );
-
-        for( ;; )
-        {
-            // Task code goes here.
-        }
-    }
-
-    // Function that creates a task.
-    void vOtherFunction( void )
-    {
-        TaskHandle_t xHandle = NULL;
-
-        // Create the task without using any dynamic memory allocation.
-        xHandle = xTaskCreateStatic(
-                      vTaskCode,       // Function that implements the task.
-                      "NAME",          // Text name for the task.
-                      STACK_SIZE,      // Stack size in words, not bytes.
-                      ( void * ) 1,    // Parameter passed into the task.
-                      tskIDLE_PRIORITY,// Priority at which the task is created.
-                      xStack,          // Array to use as the task's stack.
-                      &xTaskBuffer );  // Variable to hold the task's data structure.
-
-        // puxStackBuffer and pxTaskBuffer were not NULL, so the task will have
-        // been created, and xHandle will be the task's handle.  Use the handle
-        // to suspend the task.
-        vTaskSuspend( xHandle );
-    }
-   
- * \defgroup xTaskCreateStatic xTaskCreateStatic - * \ingroup Tasks - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode, - const char * const pcName, - const uint32_t ulStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - StackType_t * const puxStackBuffer, - StaticTask_t * const pxTaskBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * task. h - *
- BaseType_t xTaskCreateRestricted( TaskParameters_t *pxTaskDefinition, TaskHandle_t *pxCreatedTask );
- * - * xTaskCreateRestricted() should only be used in systems that include an MPU - * implementation. - * - * Create a new task and add it to the list of tasks that are ready to run. - * The function parameters define the memory regions and associated access - * permissions allocated to the task. - * - * @param pxTaskDefinition Pointer to a structure that contains a member - * for each of the normal xTaskCreate() parameters (see the xTaskCreate() API - * documentation) plus an optional stack buffer and the memory region - * definitions. - * - * @param pxCreatedTask Used to pass back a handle by which the created task - * can be referenced. - * - * @return pdPASS if the task was successfully created and added to a ready - * list, otherwise an error code defined in the file projdefs.h - * - * Example usage: -
-// Create an TaskParameters_t structure that defines the task to be created.
-static const TaskParameters_t xCheckTaskParameters =
-{
-	vATask,		// pvTaskCode - the function that implements the task.
-	"ATask",	// pcName - just a text name for the task to assist debugging.
-	100,		// usStackDepth	- the stack size DEFINED IN WORDS.
-	NULL,		// pvParameters - passed into the task function as the function parameters.
-	( 1UL | portPRIVILEGE_BIT ),// uxPriority - task priority, set the portPRIVILEGE_BIT if the task should run in a privileged state.
-	cStackBuffer,// puxStackBuffer - the buffer to be used as the task stack.
-
-	// xRegions - Allocate up to three separate memory regions for access by
-	// the task, with appropriate access permissions.  Different processors have
-	// different memory alignment requirements - refer to the FreeRTOS documentation
-	// for full information.
-	{
-		// Base address					Length	Parameters
-        { cReadWriteArray,				32,		portMPU_REGION_READ_WRITE },
-        { cReadOnlyArray,				32,		portMPU_REGION_READ_ONLY },
-        { cPrivilegedOnlyAccessArray,	128,	portMPU_REGION_PRIVILEGED_READ_WRITE }
-	}
-};
-
-int main( void )
-{
-TaskHandle_t xHandle;
-
-	// Create a task from the const structure defined above.  The task handle
-	// is requested (the second parameter is not NULL) but in this case just for
-	// demonstration purposes as its not actually used.
-	xTaskCreateRestricted( &xRegTest1Parameters, &xHandle );
-
-	// Start the scheduler.
-	vTaskStartScheduler();
-
-	// Will only get here if there was insufficient memory to create the idle
-	// and/or timer task.
-	for( ;; );
-}
-   
- * \defgroup xTaskCreateRestricted xTaskCreateRestricted - * \ingroup Tasks - */ -#if( portUSING_MPU_WRAPPERS == 1 ) -#ifdef CONFIG_USE_TCM_HEAP -#define xTaskCreateRestricted( x, pxCreatedTask ) xTaskGenericCreate( ((x)->pvTaskCode), ((x)->pcName), ((x)->usStackDepth), ((x)->pvParameters), ((x)->uxPriority), (pxCreatedTask), ((x)->puxStackBuffer), ((x)->xRegions) ) -#else - BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) PRIVILEGED_FUNCTION; -#endif // CONFIG_USE_TCM_HEAP -#endif - -/** - * task. h - *
- void vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions );
- * - * Memory regions are assigned to a restricted task when the task is created by - * a call to xTaskCreateRestricted(). These regions can be redefined using - * vTaskAllocateMPURegions(). - * - * @param xTask The handle of the task being updated. - * - * @param xRegions A pointer to an MemoryRegion_t structure that contains the - * new memory region definitions. - * - * Example usage: -
-// Define an array of MemoryRegion_t structures that configures an MPU region
-// allowing read/write access for 1024 bytes starting at the beginning of the
-// ucOneKByte array.  The other two of the maximum 3 definable regions are
-// unused so set to zero.
-static const MemoryRegion_t xAltRegions[ portNUM_CONFIGURABLE_REGIONS ] =
-{
-	// Base address		Length		Parameters
-	{ ucOneKByte,		1024,		portMPU_REGION_READ_WRITE },
-	{ 0,				0,			0 },
-	{ 0,				0,			0 }
-};
-
-void vATask( void *pvParameters )
-{
-	// This task was created such that it has access to certain regions of
-	// memory as defined by the MPU configuration.  At some point it is
-	// desired that these MPU regions are replaced with that defined in the
-	// xAltRegions const struct above.  Use a call to vTaskAllocateMPURegions()
-	// for this purpose.  NULL is used as the task handle to indicate that this
-	// function should modify the MPU regions of the calling task.
-	vTaskAllocateMPURegions( NULL, xAltRegions );
-
-	// Now the task can continue its function, but from this point on can only
-	// access its stack and the ucOneKByte array (unless any other statically
-	// defined or shared regions have been declared elsewhere).
-}
-   
- * \defgroup xTaskCreateRestricted xTaskCreateRestricted - * \ingroup Tasks - */ -void vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
void vTaskDelete( TaskHandle_t xTask );
- * - * INCLUDE_vTaskDelete must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Remove a task from the RTOS real time kernel's management. The task being - * deleted will be removed from all ready, blocked, suspended and event lists. - * - * NOTE: The idle task is responsible for freeing the kernel allocated - * memory from tasks that have been deleted. It is therefore important that - * the idle task is not starved of microcontroller processing time if your - * application makes any calls to vTaskDelete (). Memory allocated by the - * task code is not automatically freed, and should be freed before the task - * is deleted. - * - * See the demo application file death.c for sample code that utilises - * vTaskDelete (). - * - * @param xTask The handle of the task to be deleted. Passing NULL will - * cause the calling task to be deleted. - * - * Example usage: -
- void vOtherFunction( void )
- {
- TaskHandle_t xHandle;
-
-	 // Create the task, storing the handle.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-
-	 // Use the handle to delete the task.
-	 vTaskDelete( xHandle );
- }
-   
- * \defgroup vTaskDelete vTaskDelete - * \ingroup Tasks - */ -void vTaskDelete( TaskHandle_t xTaskToDelete ) PRIVILEGED_FUNCTION; - -/*----------------------------------------------------------- - * TASK CONTROL API - *----------------------------------------------------------*/ - -/** - * task. h - *
void vTaskDelay( const TickType_t xTicksToDelay );
- * - * Delay a task for a given number of ticks. The actual time that the - * task remains blocked depends on the tick rate. The constant - * portTICK_PERIOD_MS can be used to calculate real time from the tick - * rate - with the resolution of one tick period. - * - * INCLUDE_vTaskDelay must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * - * vTaskDelay() specifies a time at which the task wishes to unblock relative to - * the time at which vTaskDelay() is called. For example, specifying a block - * period of 100 ticks will cause the task to unblock 100 ticks after - * vTaskDelay() is called. vTaskDelay() does not therefore provide a good method - * of controlling the frequency of a periodic task as the path taken through the - * code, as well as other task and interrupt activity, will effect the frequency - * at which vTaskDelay() gets called and therefore the time at which the task - * next executes. See vTaskDelayUntil() for an alternative API function designed - * to facilitate fixed frequency execution. It does this by specifying an - * absolute time (rather than a relative time) at which the calling task should - * unblock. - * - * @param xTicksToDelay The amount of time, in tick periods, that - * the calling task should block. - * - * Example usage: - - void vTaskFunction( void * pvParameters ) - { - // Block for 500ms. - const TickType_t xDelay = 500 / portTICK_PERIOD_MS; - - for( ;; ) - { - // Simply toggle the LED every 500ms, blocking between each toggle. - vToggleLED(); - vTaskDelay( xDelay ); - } - } - - * \defgroup vTaskDelay vTaskDelay - * \ingroup TaskCtrl - */ -void vTaskDelay( const TickType_t xTicksToDelay ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
void vTaskDelayUntil( TickType_t *pxPreviousWakeTime, const TickType_t xTimeIncrement );
- * - * INCLUDE_vTaskDelayUntil must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Delay a task until a specified time. This function can be used by periodic - * tasks to ensure a constant execution frequency. - * - * This function differs from vTaskDelay () in one important aspect: vTaskDelay () will - * cause a task to block for the specified number of ticks from the time vTaskDelay () is - * called. It is therefore difficult to use vTaskDelay () by itself to generate a fixed - * execution frequency as the time between a task starting to execute and that task - * calling vTaskDelay () may not be fixed [the task may take a different path though the - * code between calls, or may get interrupted or preempted a different number of times - * each time it executes]. - * - * Whereas vTaskDelay () specifies a wake time relative to the time at which the function - * is called, vTaskDelayUntil () specifies the absolute (exact) time at which it wishes to - * unblock. - * - * The constant portTICK_PERIOD_MS can be used to calculate real time from the tick - * rate - with the resolution of one tick period. - * - * @param pxPreviousWakeTime Pointer to a variable that holds the time at which the - * task was last unblocked. The variable must be initialised with the current time - * prior to its first use (see the example below). Following this the variable is - * automatically updated within vTaskDelayUntil (). - * - * @param xTimeIncrement The cycle time period. The task will be unblocked at - * time *pxPreviousWakeTime + xTimeIncrement. Calling vTaskDelayUntil with the - * same xTimeIncrement parameter value will cause the task to execute with - * a fixed interface period. - * - * Example usage: -
- // Perform an action every 10 ticks.
- void vTaskFunction( void * pvParameters )
- {
- TickType_t xLastWakeTime;
- const TickType_t xFrequency = 10;
-
-	 // Initialise the xLastWakeTime variable with the current time.
-	 xLastWakeTime = xTaskGetTickCount ();
-	 for( ;; )
-	 {
-		 // Wait for the next cycle.
-		 vTaskDelayUntil( &xLastWakeTime, xFrequency );
-
-		 // Perform action here.
-	 }
- }
-   
- * \defgroup vTaskDelayUntil vTaskDelayUntil - * \ingroup TaskCtrl - */ -void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
BaseType_t xTaskAbortDelay( TaskHandle_t xTask );
- * - * INCLUDE_xTaskAbortDelay must be defined as 1 in FreeRTOSConfig.h for this - * function to be available. - * - * A task will enter the Blocked state when it is waiting for an event. The - * event it is waiting for can be a temporal event (waiting for a time), such - * as when vTaskDelay() is called, or an event on an object, such as when - * xQueueReceive() or ulTaskNotifyTake() is called. If the handle of a task - * that is in the Blocked state is used in a call to xTaskAbortDelay() then the - * task will leave the Blocked state, and return from whichever function call - * placed the task into the Blocked state. - * - * @param xTask The handle of the task to remove from the Blocked state. - * - * @return If the task referenced by xTask was not in the Blocked state then - * pdFAIL is returned. Otherwise pdPASS is returned. - * - * \defgroup xTaskAbortDelay xTaskAbortDelay - * \ingroup TaskCtrl - */ -BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
UBaseType_t uxTaskPriorityGet( TaskHandle_t xTask );
- * - * INCLUDE_uxTaskPriorityGet must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Obtain the priority of any task. - * - * @param xTask Handle of the task to be queried. Passing a NULL - * handle results in the priority of the calling task being returned. - * - * @return The priority of xTask. - * - * Example usage: -
- void vAFunction( void )
- {
- TaskHandle_t xHandle;
-
-	 // Create a task, storing the handle.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-
-	 // ...
-
-	 // Use the handle to obtain the priority of the created task.
-	 // It was created with tskIDLE_PRIORITY, but may have changed
-	 // it itself.
-	 if( uxTaskPriorityGet( xHandle ) != tskIDLE_PRIORITY )
-	 {
-		 // The task has changed it's priority.
-	 }
-
-	 // ...
-
-	 // Is our priority higher than the created task?
-	 if( uxTaskPriorityGet( xHandle ) < uxTaskPriorityGet( NULL ) )
-	 {
-		 // Our priority (obtained using NULL handle) is higher.
-	 }
- }
-   
- * \defgroup uxTaskPriorityGet uxTaskPriorityGet - * \ingroup TaskCtrl - */ -UBaseType_t uxTaskPriorityGet( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
UBaseType_t uxTaskPriorityGetFromISR( TaskHandle_t xTask );
- * - * A version of uxTaskPriorityGet() that can be used from an ISR. - */ -UBaseType_t uxTaskPriorityGetFromISR( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
eTaskState eTaskGetState( TaskHandle_t xTask );
- * - * INCLUDE_eTaskGetState must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Obtain the state of any task. States are encoded by the eTaskState - * enumerated type. - * - * @param xTask Handle of the task to be queried. - * - * @return The state of xTask at the time the function was called. Note the - * state of the task might change between the function being called, and the - * functions return value being tested by the calling task. - */ -eTaskState eTaskGetState( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState );
- * - * configUSE_TRACE_FACILITY must be defined as 1 for this function to be - * available. See the configuration section for more information. - * - * Populates a TaskStatus_t structure with information about a task. - * - * @param xTask Handle of the task being queried. If xTask is NULL then - * information will be returned about the calling task. - * - * @param pxTaskStatus A pointer to the TaskStatus_t structure that will be - * filled with information about the task referenced by the handle passed using - * the xTask parameter. - * - * @xGetFreeStackSpace The TaskStatus_t structure contains a member to report - * the stack high water mark of the task being queried. Calculating the stack - * high water mark takes a relatively long time, and can make the system - * temporarily unresponsive - so the xGetFreeStackSpace parameter is provided to - * allow the high water mark checking to be skipped. The high watermark value - * will only be written to the TaskStatus_t structure if xGetFreeStackSpace is - * not set to pdFALSE; - * - * @param eState The TaskStatus_t structure contains a member to report the - * state of the task being queried. Obtaining the task state is not as fast as - * a simple assignment - so the eState parameter is provided to allow the state - * information to be omitted from the TaskStatus_t structure. To obtain state - * information then set eState to eInvalid - otherwise the value passed in - * eState will be reported as the task state in the TaskStatus_t structure. - * - * Example usage: -
- void vAFunction( void )
- {
- TaskHandle_t xHandle;
- TaskStatus_t xTaskDetails;
-
-    // Obtain the handle of a task from its name.
-    xHandle = xTaskGetHandle( "Task_Name" );
-
-    // Check the handle is not NULL.
-    configASSERT( xHandle );
-
-    // Use the handle to obtain further information about the task.
-    vTaskGetInfo( xHandle,
-                  &xTaskDetails,
-                  pdTRUE, // Include the high water mark in xTaskDetails.
-                  eInvalid ); // Include the task state in xTaskDetails.
- }
-   
- * \defgroup vTaskGetInfo vTaskGetInfo - * \ingroup TaskCtrl - */ -void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority );
- * - * INCLUDE_vTaskPrioritySet must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Set the priority of any task. - * - * A context switch will occur before the function returns if the priority - * being set is higher than the currently executing task. - * - * @param xTask Handle to the task for which the priority is being set. - * Passing a NULL handle results in the priority of the calling task being set. - * - * @param uxNewPriority The priority to which the task will be set. - * - * Example usage: -
- void vAFunction( void )
- {
- TaskHandle_t xHandle;
-
-	 // Create a task, storing the handle.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-
-	 // ...
-
-	 // Use the handle to raise the priority of the created task.
-	 vTaskPrioritySet( xHandle, tskIDLE_PRIORITY + 1 );
-
-	 // ...
-
-	 // Use a NULL handle to raise our priority to the same value.
-	 vTaskPrioritySet( NULL, tskIDLE_PRIORITY + 1 );
- }
-   
- * \defgroup vTaskPrioritySet vTaskPrioritySet - * \ingroup TaskCtrl - */ -void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
void vTaskSuspend( TaskHandle_t xTaskToSuspend );
- * - * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Suspend any task. When suspended a task will never get any microcontroller - * processing time, no matter what its priority. - * - * Calls to vTaskSuspend are not accumulative - - * i.e. calling vTaskSuspend () twice on the same task still only requires one - * call to vTaskResume () to ready the suspended task. - * - * @param xTaskToSuspend Handle to the task being suspended. Passing a NULL - * handle will cause the calling task to be suspended. - * - * Example usage: -
- void vAFunction( void )
- {
- TaskHandle_t xHandle;
-
-	 // Create a task, storing the handle.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-
-	 // ...
-
-	 // Use the handle to suspend the created task.
-	 vTaskSuspend( xHandle );
-
-	 // ...
-
-	 // The created task will not run during this period, unless
-	 // another task calls vTaskResume( xHandle ).
-
-	 //...
-
-
-	 // Suspend ourselves.
-	 vTaskSuspend( NULL );
-
-	 // We cannot get here unless another task calls vTaskResume
-	 // with our handle as the parameter.
- }
-   
- * \defgroup vTaskSuspend vTaskSuspend - * \ingroup TaskCtrl - */ -void vTaskSuspend( TaskHandle_t xTaskToSuspend ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
void vTaskResume( TaskHandle_t xTaskToResume );
- * - * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available. - * See the configuration section for more information. - * - * Resumes a suspended task. - * - * A task that has been suspended by one or more calls to vTaskSuspend () - * will be made available for running again by a single call to - * vTaskResume (). - * - * @param xTaskToResume Handle to the task being readied. - * - * Example usage: -
- void vAFunction( void )
- {
- TaskHandle_t xHandle;
-
-	 // Create a task, storing the handle.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
-
-	 // ...
-
-	 // Use the handle to suspend the created task.
-	 vTaskSuspend( xHandle );
-
-	 // ...
-
-	 // The created task will not run during this period, unless
-	 // another task calls vTaskResume( xHandle ).
-
-	 //...
-
-
-	 // Resume the suspended task ourselves.
-	 vTaskResume( xHandle );
-
-	 // The created task will once again get microcontroller processing
-	 // time in accordance with its priority within the system.
- }
-   
- * \defgroup vTaskResume vTaskResume - * \ingroup TaskCtrl - */ -void vTaskResume( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
void xTaskResumeFromISR( TaskHandle_t xTaskToResume );
- * - * INCLUDE_xTaskResumeFromISR must be defined as 1 for this function to be - * available. See the configuration section for more information. - * - * An implementation of vTaskResume() that can be called from within an ISR. - * - * A task that has been suspended by one or more calls to vTaskSuspend () - * will be made available for running again by a single call to - * xTaskResumeFromISR (). - * - * xTaskResumeFromISR() should not be used to synchronise a task with an - * interrupt if there is a chance that the interrupt could arrive prior to the - * task being suspended - as this can lead to interrupts being missed. Use of a - * semaphore as a synchronisation mechanism would avoid this eventuality. - * - * @param xTaskToResume Handle to the task being readied. - * - * @return pdTRUE if resuming the task should result in a context switch, - * otherwise pdFALSE. This is used by the ISR to determine if a context switch - * may be required following the ISR. - * - * \defgroup vTaskResumeFromISR vTaskResumeFromISR - * \ingroup TaskCtrl - */ -BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION; - -/*----------------------------------------------------------- - * SCHEDULER CONTROL - *----------------------------------------------------------*/ - -/** - * task. h - *
void vTaskStartScheduler( void );
- * - * Starts the real time kernel tick processing. After calling the kernel - * has control over which tasks are executed and when. - * - * See the demo application file main.c for an example of creating - * tasks and starting the kernel. - * - * Example usage: -
- void vAFunction( void )
- {
-	 // Create at least one task before starting the kernel.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
-
-	 // Start the real time kernel with preemption.
-	 vTaskStartScheduler ();
-
-	 // Will not get here unless a task calls vTaskEndScheduler ()
- }
-   
- * - * \defgroup vTaskStartScheduler vTaskStartScheduler - * \ingroup SchedulerControl - */ -void vTaskStartScheduler( void ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
void vTaskEndScheduler( void );
- * - * NOTE: At the time of writing only the x86 real mode port, which runs on a PC - * in place of DOS, implements this function. - * - * Stops the real time kernel tick. All created tasks will be automatically - * deleted and multitasking (either preemptive or cooperative) will - * stop. Execution then resumes from the point where vTaskStartScheduler () - * was called, as if vTaskStartScheduler () had just returned. - * - * See the demo application file main. c in the demo/PC directory for an - * example that uses vTaskEndScheduler (). - * - * vTaskEndScheduler () requires an exit function to be defined within the - * portable layer (see vPortEndScheduler () in port. c for the PC port). This - * performs hardware specific operations such as stopping the kernel tick. - * - * vTaskEndScheduler () will cause all of the resources allocated by the - * kernel to be freed - but will not free resources allocated by application - * tasks. - * - * Example usage: -
- void vTaskCode( void * pvParameters )
- {
-	 for( ;; )
-	 {
-		 // Task code goes here.
-
-		 // At some point we want to end the real time kernel processing
-		 // so call ...
-		 vTaskEndScheduler ();
-	 }
- }
-
- void vAFunction( void )
- {
-	 // Create at least one task before starting the kernel.
-	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
-
-	 // Start the real time kernel with preemption.
-	 vTaskStartScheduler ();
-
-	 // Will only get here when the vTaskCode () task has called
-	 // vTaskEndScheduler ().  When we get here we are back to single task
-	 // execution.
- }
-   
- * - * \defgroup vTaskEndScheduler vTaskEndScheduler - * \ingroup SchedulerControl - */ -void vTaskEndScheduler( void ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
void vTaskSuspendAll( void );
- * - * Suspends the scheduler without disabling interrupts. Context switches will - * not occur while the scheduler is suspended. - * - * After calling vTaskSuspendAll () the calling task will continue to execute - * without risk of being swapped out until a call to xTaskResumeAll () has been - * made. - * - * API functions that have the potential to cause a context switch (for example, - * vTaskDelayUntil(), xQueueSend(), etc.) must not be called while the scheduler - * is suspended. - * - * Example usage: -
- void vTask1( void * pvParameters )
- {
-	 for( ;; )
-	 {
-		 // Task code goes here.
-
-		 // ...
-
-		 // At some point the task wants to perform a long operation during
-		 // which it does not want to get swapped out.  It cannot use
-		 // taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the
-		 // operation may cause interrupts to be missed - including the
-		 // ticks.
-
-		 // Prevent the real time kernel swapping out the task.
-		 vTaskSuspendAll ();
-
-		 // Perform the operation here.  There is no need to use critical
-		 // sections as we have all the microcontroller processing time.
-		 // During this time interrupts will still operate and the kernel
-		 // tick count will be maintained.
-
-		 // ...
-
-		 // The operation is complete.  Restart the kernel.
-		 xTaskResumeAll ();
-	 }
- }
-   
- * \defgroup vTaskSuspendAll vTaskSuspendAll - * \ingroup SchedulerControl - */ -void vTaskSuspendAll( void ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
BaseType_t xTaskResumeAll( void );
- * - * Resumes scheduler activity after it was suspended by a call to - * vTaskSuspendAll(). - * - * xTaskResumeAll() only resumes the scheduler. It does not unsuspend tasks - * that were previously suspended by a call to vTaskSuspend(). - * - * @return If resuming the scheduler caused a context switch then pdTRUE is - * returned, otherwise pdFALSE is returned. - * - * Example usage: -
- void vTask1( void * pvParameters )
- {
-	 for( ;; )
-	 {
-		 // Task code goes here.
-
-		 // ...
-
-		 // At some point the task wants to perform a long operation during
-		 // which it does not want to get swapped out.  It cannot use
-		 // taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the
-		 // operation may cause interrupts to be missed - including the
-		 // ticks.
-
-		 // Prevent the real time kernel swapping out the task.
-		 vTaskSuspendAll ();
-
-		 // Perform the operation here.  There is no need to use critical
-		 // sections as we have all the microcontroller processing time.
-		 // During this time interrupts will still operate and the real
-		 // time kernel tick count will be maintained.
-
-		 // ...
-
-		 // The operation is complete.  Restart the kernel.  We want to force
-		 // a context switch - but there is no point if resuming the scheduler
-		 // caused a context switch already.
-		 if( !xTaskResumeAll () )
-		 {
-			  taskYIELD ();
-		 }
-	 }
- }
-   
- * \defgroup xTaskResumeAll xTaskResumeAll - * \ingroup SchedulerControl - */ -BaseType_t xTaskResumeAll( void ) PRIVILEGED_FUNCTION; - -/*----------------------------------------------------------- - * TASK UTILITIES - *----------------------------------------------------------*/ - -/** - * task. h - *
TickType_t xTaskGetTickCount( void );
- * - * @return The count of ticks since vTaskStartScheduler was called. - * - * \defgroup xTaskGetTickCount xTaskGetTickCount - * \ingroup TaskUtils - */ -TickType_t xTaskGetTickCount( void ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
TickType_t xTaskGetTickCountFromISR( void );
- * - * @return The count of ticks since vTaskStartScheduler was called. - * - * This is a version of xTaskGetTickCount() that is safe to be called from an - * ISR - provided that TickType_t is the natural word size of the - * microcontroller being used or interrupt nesting is either not supported or - * not being used. - * - * \defgroup xTaskGetTickCountFromISR xTaskGetTickCountFromISR - * \ingroup TaskUtils - */ -TickType_t xTaskGetTickCountFromISR( void ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
uint16_t uxTaskGetNumberOfTasks( void );
- * - * @return The number of tasks that the real time kernel is currently managing. - * This includes all ready, blocked and suspended tasks. A task that - * has been deleted but not yet freed by the idle task will also be - * included in the count. - * - * \defgroup uxTaskGetNumberOfTasks uxTaskGetNumberOfTasks - * \ingroup TaskUtils - */ -UBaseType_t uxTaskGetNumberOfTasks( void ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
char *pcTaskGetName( TaskHandle_t xTaskToQuery );
- * - * @return The text (human readable) name of the task referenced by the handle - * xTaskToQuery. A task can query its own name by either passing in its own - * handle, or by setting xTaskToQuery to NULL. - * - * \defgroup pcTaskGetName pcTaskGetName - * \ingroup TaskUtils - */ -char *pcTaskGetName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - -/** - * task. h - *
TaskHandle_t xTaskGetHandle( const char *pcNameToQuery );
- * - * NOTE: This function takes a relatively long time to complete and should be - * used sparingly. - * - * @return The handle of the task that has the human readable name pcNameToQuery. - * NULL is returned if no matching name is found. INCLUDE_xTaskGetHandle - * must be set to 1 in FreeRTOSConfig.h for pcTaskGetHandle() to be available. - * - * \defgroup pcTaskGetHandle pcTaskGetHandle - * \ingroup TaskUtils - */ -TaskHandle_t xTaskGetHandle( const char *pcNameToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - -/** - * task.h - *
UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask );
- * - * INCLUDE_uxTaskGetStackHighWaterMark must be set to 1 in FreeRTOSConfig.h for - * this function to be available. - * - * Returns the high water mark of the stack associated with xTask. That is, - * the minimum free stack space there has been (in words, so on a 32 bit machine - * a value of 1 means 4 bytes) since the task started. The smaller the returned - * number the closer the task has come to overflowing its stack. - * - * @param xTask Handle of the task associated with the stack to be checked. - * Set xTask to NULL to check the stack of the calling task. - * - * @return The smallest amount of free stack space there has been (in words, so - * actual spaces on the stack rather than bytes) since the task referenced by - * xTask was created. - */ -UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - -/* When using trace macros it is sometimes necessary to include task.h before -FreeRTOS.h. When this is done TaskHookFunction_t will not yet have been defined, -so the following two prototypes will cause a compilation error. This can be -fixed by simply guarding against the inclusion of these two prototypes unless -they are explicitly required by the configUSE_APPLICATION_TASK_TAG configuration -constant. */ -#ifdef configUSE_APPLICATION_TASK_TAG - #if configUSE_APPLICATION_TASK_TAG == 1 - /** - * task.h - *
void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction );
- * - * Sets pxHookFunction to be the task hook function used by the task xTask. - * Passing xTask as NULL has the effect of setting the calling tasks hook - * function. - */ - void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction ) PRIVILEGED_FUNCTION; - - /** - * task.h - *
void xTaskGetApplicationTaskTag( TaskHandle_t xTask );
- * - * Returns the pxHookFunction value assigned to the task xTask. - */ - TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - #endif /* configUSE_APPLICATION_TASK_TAG ==1 */ -#endif /* ifdef configUSE_APPLICATION_TASK_TAG */ - -#if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 ) - - /* Each task contains an array of pointers that is dimensioned by the - configNUM_THREAD_LOCAL_STORAGE_POINTERS setting in FreeRTOSConfig.h. The - kernel does not use the pointers itself, so the application writer can use - the pointers for any purpose they wish. The following two functions are - used to set and query a pointer respectively. */ - void vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue ) PRIVILEGED_FUNCTION; - void *pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseType_t xIndex ) PRIVILEGED_FUNCTION; - -#endif - -/** - * task.h - *
BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter );
- * - * Calls the hook function associated with xTask. Passing xTask as NULL has - * the effect of calling the Running tasks (the calling task) hook function. - * - * pvParameter is passed to the hook function for the task to interpret as it - * wants. The return value is the value returned by the task hook function - * registered by the user. - */ -BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter ) PRIVILEGED_FUNCTION; - -/** - * xTaskGetIdleTaskHandle() is only available if - * INCLUDE_xTaskGetIdleTaskHandle is set to 1 in FreeRTOSConfig.h. - * - * Simply returns the handle of the idle task. It is not valid to call - * xTaskGetIdleTaskHandle() before the scheduler has been started. - */ -TaskHandle_t xTaskGetIdleTaskHandle( void ) PRIVILEGED_FUNCTION; - -/** - * configUSE_TRACE_FACILITY must be defined as 1 in FreeRTOSConfig.h for - * uxTaskGetSystemState() to be available. - * - * uxTaskGetSystemState() populates an TaskStatus_t structure for each task in - * the system. TaskStatus_t structures contain, among other things, members - * for the task handle, task name, task priority, task state, and total amount - * of run time consumed by the task. See the TaskStatus_t structure - * definition in this file for the full member list. - * - * NOTE: This function is intended for debugging use only as its use results in - * the scheduler remaining suspended for an extended period. - * - * @param pxTaskStatusArray A pointer to an array of TaskStatus_t structures. - * The array must contain at least one TaskStatus_t structure for each task - * that is under the control of the RTOS. The number of tasks under the control - * of the RTOS can be determined using the uxTaskGetNumberOfTasks() API function. - * - * @param uxArraySize The size of the array pointed to by the pxTaskStatusArray - * parameter. The size is specified as the number of indexes in the array, or - * the number of TaskStatus_t structures contained in the array, not by the - * number of bytes in the array. - * - * @param pulTotalRunTime If configGENERATE_RUN_TIME_STATS is set to 1 in - * FreeRTOSConfig.h then *pulTotalRunTime is set by uxTaskGetSystemState() to the - * total run time (as defined by the run time stats clock, see - * http://www.freertos.org/rtos-run-time-stats.html) since the target booted. - * pulTotalRunTime can be set to NULL to omit the total run time information. - * - * @return The number of TaskStatus_t structures that were populated by - * uxTaskGetSystemState(). This should equal the number returned by the - * uxTaskGetNumberOfTasks() API function, but will be zero if the value passed - * in the uxArraySize parameter was too small. - * - * Example usage: -
-    // This example demonstrates how a human readable table of run time stats
-	// information is generated from raw data provided by uxTaskGetSystemState().
-	// The human readable table is written to pcWriteBuffer
-	void vTaskGetRunTimeStats( char *pcWriteBuffer )
-	{
-	TaskStatus_t *pxTaskStatusArray;
-	volatile UBaseType_t uxArraySize, x;
-	uint32_t ulTotalRunTime, ulStatsAsPercentage;
-
-		// Make sure the write buffer does not contain a string.
-		*pcWriteBuffer = 0x00;
-
-		// Take a snapshot of the number of tasks in case it changes while this
-		// function is executing.
-		uxArraySize = uxTaskGetNumberOfTasks();
-
-		// Allocate a TaskStatus_t structure for each task.  An array could be
-		// allocated statically at compile time.
-		pxTaskStatusArray = pvPortMalloc( uxArraySize * sizeof( TaskStatus_t ) );
-
-		if( pxTaskStatusArray != NULL )
-		{
-			// Generate raw status information about each task.
-			uxArraySize = uxTaskGetSystemState( pxTaskStatusArray, uxArraySize, &ulTotalRunTime );
-
-			// For percentage calculations.
-			ulTotalRunTime /= 100UL;
-
-			// Avoid divide by zero errors.
-			if( ulTotalRunTime > 0 )
-			{
-				// For each populated position in the pxTaskStatusArray array,
-				// format the raw data as human readable ASCII data
-				for( x = 0; x < uxArraySize; x++ )
-				{
-					// What percentage of the total run time has the task used?
-					// This will always be rounded down to the nearest integer.
-					// ulTotalRunTimeDiv100 has already been divided by 100.
-					ulStatsAsPercentage = pxTaskStatusArray[ x ].ulRunTimeCounter / ulTotalRunTime;
-
-					if( ulStatsAsPercentage > 0UL )
-					{
-						sprintf( pcWriteBuffer, "%s\t\t%lu\t\t%lu%%\r\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter, ulStatsAsPercentage );
-					}
-					else
-					{
-						// If the percentage is zero here then the task has
-						// consumed less than 1% of the total run time.
-						sprintf( pcWriteBuffer, "%s\t\t%lu\t\t<1%%\r\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter );
-					}
-
-					pcWriteBuffer += strlen( ( char * ) pcWriteBuffer );
-				}
-			}
-
-			// The array is no longer needed, free the memory it consumes.
-			vPortFree( pxTaskStatusArray );
-		}
-	}
-	
- */ -UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
void vTaskList( char *pcWriteBuffer );
- * - * configUSE_TRACE_FACILITY and configUSE_STATS_FORMATTING_FUNCTIONS must - * both be defined as 1 for this function to be available. See the - * configuration section of the FreeRTOS.org website for more information. - * - * NOTE 1: This function will disable interrupts for its duration. It is - * not intended for normal application runtime use but as a debug aid. - * - * Lists all the current tasks, along with their current state and stack - * usage high water mark. - * - * Tasks are reported as blocked ('B'), ready ('R'), deleted ('D') or - * suspended ('S'). - * - * PLEASE NOTE: - * - * This function is provided for convenience only, and is used by many of the - * demo applications. Do not consider it to be part of the scheduler. - * - * vTaskList() calls uxTaskGetSystemState(), then formats part of the - * uxTaskGetSystemState() output into a human readable table that displays task - * names, states and stack usage. - * - * vTaskList() has a dependency on the sprintf() C library function that might - * bloat the code size, use a lot of stack, and provide different results on - * different platforms. An alternative, tiny, third party, and limited - * functionality implementation of sprintf() is provided in many of the - * FreeRTOS/Demo sub-directories in a file called printf-stdarg.c (note - * printf-stdarg.c does not provide a full snprintf() implementation!). - * - * It is recommended that production systems call uxTaskGetSystemState() - * directly to get access to raw stats data, rather than indirectly through a - * call to vTaskList(). - * - * @param pcWriteBuffer A buffer into which the above mentioned details - * will be written, in ASCII form. This buffer is assumed to be large - * enough to contain the generated report. Approximately 40 bytes per - * task should be sufficient. - * - * \defgroup vTaskList vTaskList - * \ingroup TaskUtils - */ -void vTaskList( char * pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - -/** - * task. h - *
void vTaskGetRunTimeStats( char *pcWriteBuffer );
- * - * configGENERATE_RUN_TIME_STATS and configUSE_STATS_FORMATTING_FUNCTIONS - * must both be defined as 1 for this function to be available. The application - * must also then provide definitions for - * portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and portGET_RUN_TIME_COUNTER_VALUE() - * to configure a peripheral timer/counter and return the timers current count - * value respectively. The counter should be at least 10 times the frequency of - * the tick count. - * - * NOTE 1: This function will disable interrupts for its duration. It is - * not intended for normal application runtime use but as a debug aid. - * - * Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total - * accumulated execution time being stored for each task. The resolution - * of the accumulated time value depends on the frequency of the timer - * configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro. - * Calling vTaskGetRunTimeStats() writes the total execution time of each - * task into a buffer, both as an absolute count value and as a percentage - * of the total system execution time. - * - * NOTE 2: - * - * This function is provided for convenience only, and is used by many of the - * demo applications. Do not consider it to be part of the scheduler. - * - * vTaskGetRunTimeStats() calls uxTaskGetSystemState(), then formats part of the - * uxTaskGetSystemState() output into a human readable table that displays the - * amount of time each task has spent in the Running state in both absolute and - * percentage terms. - * - * vTaskGetRunTimeStats() has a dependency on the sprintf() C library function - * that might bloat the code size, use a lot of stack, and provide different - * results on different platforms. An alternative, tiny, third party, and - * limited functionality implementation of sprintf() is provided in many of the - * FreeRTOS/Demo sub-directories in a file called printf-stdarg.c (note - * printf-stdarg.c does not provide a full snprintf() implementation!). - * - * It is recommended that production systems call uxTaskGetSystemState() directly - * to get access to raw stats data, rather than indirectly through a call to - * vTaskGetRunTimeStats(). - * - * @param pcWriteBuffer A buffer into which the execution times will be - * written, in ASCII form. This buffer is assumed to be large enough to - * contain the generated report. Approximately 40 bytes per task should - * be sufficient. - * - * \defgroup vTaskGetRunTimeStats vTaskGetRunTimeStats - * \ingroup TaskUtils - */ -void vTaskGetRunTimeStats( char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - -/** - * task. h - *
BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this - * function to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * A notification sent to a task will remain pending until it is cleared by the - * task calling xTaskNotifyWait() or ulTaskNotifyTake(). If the task was - * already in the Blocked state to wait for a notification when the notification - * arrives then the task will automatically be removed from the Blocked state - * (unblocked) and the notification cleared. - * - * A task can use xTaskNotifyWait() to [optionally] block to wait for a - * notification to be pending, or ulTaskNotifyTake() to [optionally] block - * to wait for its notification value to have a non-zero value. The task does - * not consume any CPU time while it is in the Blocked state. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. - * - * @param xTaskToNotify The handle of the task being notified. The handle to a - * task can be returned from the xTaskCreate() API function used to create the - * task, and the handle of the currently running task can be obtained by calling - * xTaskGetCurrentTaskHandle(). - * - * @param ulValue Data that can be sent with the notification. How the data is - * used depends on the value of the eAction parameter. - * - * @param eAction Specifies how the notification updates the task's notification - * value, if at all. Valid values for eAction are as follows: - * - * eSetBits - - * The task's notification value is bitwise ORed with ulValue. xTaskNofify() - * always returns pdPASS in this case. - * - * eIncrement - - * The task's notification value is incremented. ulValue is not used and - * xTaskNotify() always returns pdPASS in this case. - * - * eSetValueWithOverwrite - - * The task's notification value is set to the value of ulValue, even if the - * task being notified had not yet processed the previous notification (the - * task already had a notification pending). xTaskNotify() always returns - * pdPASS in this case. - * - * eSetValueWithoutOverwrite - - * If the task being notified did not already have a notification pending then - * the task's notification value is set to ulValue and xTaskNotify() will - * return pdPASS. If the task being notified already had a notification - * pending then no action is performed and pdFAIL is returned. - * - * eNoAction - - * The task receives a notification without its notification value being - * updated. ulValue is not used and xTaskNotify() always returns pdPASS in - * this case. - * - * pulPreviousNotificationValue - - * Can be used to pass out the subject task's notification value before any - * bits are modified by the notify function. - * - * @return Dependent on the value of eAction. See the description of the - * eAction parameter. - * - * \defgroup xTaskNotify xTaskNotify - * \ingroup TaskNotifications - */ -BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue ) PRIVILEGED_FUNCTION; -#define xTaskNotify( xTaskToNotify, ulValue, eAction ) xTaskGenericNotify( ( xTaskToNotify ), ( ulValue ), ( eAction ), NULL ) -#define xTaskNotifyAndQuery( xTaskToNotify, ulValue, eAction, pulPreviousNotifyValue ) xTaskGenericNotify( ( xTaskToNotify ), ( ulValue ), ( eAction ), ( pulPreviousNotifyValue ) ) - -/** - * task. h - *
BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, BaseType_t *pxHigherPriorityTaskWoken );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this - * function to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * A version of xTaskNotify() that can be used from an interrupt service routine - * (ISR). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * A notification sent to a task will remain pending until it is cleared by the - * task calling xTaskNotifyWait() or ulTaskNotifyTake(). If the task was - * already in the Blocked state to wait for a notification when the notification - * arrives then the task will automatically be removed from the Blocked state - * (unblocked) and the notification cleared. - * - * A task can use xTaskNotifyWait() to [optionally] block to wait for a - * notification to be pending, or ulTaskNotifyTake() to [optionally] block - * to wait for its notification value to have a non-zero value. The task does - * not consume any CPU time while it is in the Blocked state. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. - * - * @param xTaskToNotify The handle of the task being notified. The handle to a - * task can be returned from the xTaskCreate() API function used to create the - * task, and the handle of the currently running task can be obtained by calling - * xTaskGetCurrentTaskHandle(). - * - * @param ulValue Data that can be sent with the notification. How the data is - * used depends on the value of the eAction parameter. - * - * @param eAction Specifies how the notification updates the task's notification - * value, if at all. Valid values for eAction are as follows: - * - * eSetBits - - * The task's notification value is bitwise ORed with ulValue. xTaskNofify() - * always returns pdPASS in this case. - * - * eIncrement - - * The task's notification value is incremented. ulValue is not used and - * xTaskNotify() always returns pdPASS in this case. - * - * eSetValueWithOverwrite - - * The task's notification value is set to the value of ulValue, even if the - * task being notified had not yet processed the previous notification (the - * task already had a notification pending). xTaskNotify() always returns - * pdPASS in this case. - * - * eSetValueWithoutOverwrite - - * If the task being notified did not already have a notification pending then - * the task's notification value is set to ulValue and xTaskNotify() will - * return pdPASS. If the task being notified already had a notification - * pending then no action is performed and pdFAIL is returned. - * - * eNoAction - - * The task receives a notification without its notification value being - * updated. ulValue is not used and xTaskNotify() always returns pdPASS in - * this case. - * - * @param pxHigherPriorityTaskWoken xTaskNotifyFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if sending the notification caused the - * task to which the notification was sent to leave the Blocked state, and the - * unblocked task has a priority higher than the currently running task. If - * xTaskNotifyFromISR() sets this value to pdTRUE then a context switch should - * be requested before the interrupt is exited. How a context switch is - * requested from an ISR is dependent on the port - see the documentation page - * for the port in use. - * - * @return Dependent on the value of eAction. See the description of the - * eAction parameter. - * - * \defgroup xTaskNotify xTaskNotify - * \ingroup TaskNotifications - */ -BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; -#define xTaskNotifyFromISR( xTaskToNotify, ulValue, eAction, pxHigherPriorityTaskWoken ) xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( ulValue ), ( eAction ), NULL, ( pxHigherPriorityTaskWoken ) ) -#define xTaskNotifyAndQueryFromISR( xTaskToNotify, ulValue, eAction, pulPreviousNotificationValue, pxHigherPriorityTaskWoken ) xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( ulValue ), ( eAction ), ( pulPreviousNotificationValue ), ( pxHigherPriorityTaskWoken ) ) - -/** - * task. h - *
BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this - * function to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * A notification sent to a task will remain pending until it is cleared by the - * task calling xTaskNotifyWait() or ulTaskNotifyTake(). If the task was - * already in the Blocked state to wait for a notification when the notification - * arrives then the task will automatically be removed from the Blocked state - * (unblocked) and the notification cleared. - * - * A task can use xTaskNotifyWait() to [optionally] block to wait for a - * notification to be pending, or ulTaskNotifyTake() to [optionally] block - * to wait for its notification value to have a non-zero value. The task does - * not consume any CPU time while it is in the Blocked state. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. - * - * @param ulBitsToClearOnEntry Bits that are set in ulBitsToClearOnEntry value - * will be cleared in the calling task's notification value before the task - * checks to see if any notifications are pending, and optionally blocks if no - * notifications are pending. Setting ulBitsToClearOnEntry to ULONG_MAX (if - * limits.h is included) or 0xffffffffUL (if limits.h is not included) will have - * the effect of resetting the task's notification value to 0. Setting - * ulBitsToClearOnEntry to 0 will leave the task's notification value unchanged. - * - * @param ulBitsToClearOnExit If a notification is pending or received before - * the calling task exits the xTaskNotifyWait() function then the task's - * notification value (see the xTaskNotify() API function) is passed out using - * the pulNotificationValue parameter. Then any bits that are set in - * ulBitsToClearOnExit will be cleared in the task's notification value (note - * *pulNotificationValue is set before any bits are cleared). Setting - * ulBitsToClearOnExit to ULONG_MAX (if limits.h is included) or 0xffffffffUL - * (if limits.h is not included) will have the effect of resetting the task's - * notification value to 0 before the function exits. Setting - * ulBitsToClearOnExit to 0 will leave the task's notification value unchanged - * when the function exits (in which case the value passed out in - * pulNotificationValue will match the task's notification value). - * - * @param pulNotificationValue Used to pass the task's notification value out - * of the function. Note the value passed out will not be effected by the - * clearing of any bits caused by ulBitsToClearOnExit being non-zero. - * - * @param xTicksToWait The maximum amount of time that the task should wait in - * the Blocked state for a notification to be received, should a notification - * not already be pending when xTaskNotifyWait() was called. The task - * will not consume any processing time while it is in the Blocked state. This - * is specified in kernel ticks, the macro pdMS_TO_TICSK( value_in_ms ) can be - * used to convert a time specified in milliseconds to a time specified in - * ticks. - * - * @return If a notification was received (including notifications that were - * already pending when xTaskNotifyWait was called) then pdPASS is - * returned. Otherwise pdFAIL is returned. - * - * \defgroup xTaskNotifyWait xTaskNotifyWait - * \ingroup TaskNotifications - */ -BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
BaseType_t xTaskNotifyGive( TaskHandle_t xTaskToNotify );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this macro - * to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * xTaskNotifyGive() is a helper macro intended for use when task notifications - * are used as light weight and faster binary or counting semaphore equivalents. - * Actual FreeRTOS semaphores are given using the xSemaphoreGive() API function, - * the equivalent action that instead uses a task notification is - * xTaskNotifyGive(). - * - * When task notifications are being used as a binary or counting semaphore - * equivalent then the task being notified should wait for the notification - * using the ulTaskNotificationTake() API function rather than the - * xTaskNotifyWait() API function. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for more details. - * - * @param xTaskToNotify The handle of the task being notified. The handle to a - * task can be returned from the xTaskCreate() API function used to create the - * task, and the handle of the currently running task can be obtained by calling - * xTaskGetCurrentTaskHandle(). - * - * @return xTaskNotifyGive() is a macro that calls xTaskNotify() with the - * eAction parameter set to eIncrement - so pdPASS is always returned. - * - * \defgroup xTaskNotifyGive xTaskNotifyGive - * \ingroup TaskNotifications - */ -#define xTaskNotifyGive( xTaskToNotify ) xTaskGenericNotify( ( xTaskToNotify ), ( 0 ), eIncrement, NULL ) - -/** - * task. h - *
void vTaskNotifyGiveFromISR( TaskHandle_t xTaskHandle, BaseType_t *pxHigherPriorityTaskWoken );
- *
- * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this macro
- * to be available.
- *
- * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private
- * "notification value", which is a 32-bit unsigned integer (uint32_t).
- *
- * A version of xTaskNotifyGive() that can be called from an interrupt service
- * routine (ISR).
- *
- * Events can be sent to a task using an intermediary object.  Examples of such
- * objects are queues, semaphores, mutexes and event groups.  Task notifications
- * are a method of sending an event directly to a task without the need for such
- * an intermediary object.
- *
- * A notification sent to a task can optionally perform an action, such as
- * update, overwrite or increment the task's notification value.  In that way
- * task notifications can be used to send data to a task, or be used as light
- * weight and fast binary or counting semaphores.
- *
- * vTaskNotifyGiveFromISR() is intended for use when task notifications are
- * used as light weight and faster binary or counting semaphore equivalents.
- * Actual FreeRTOS semaphores are given from an ISR using the
- * xSemaphoreGiveFromISR() API function, the equivalent action that instead uses
- * a task notification is vTaskNotifyGiveFromISR().
- *
- * When task notifications are being used as a binary or counting semaphore
- * equivalent then the task being notified should wait for the notification
- * using the ulTaskNotificationTake() API function rather than the
- * xTaskNotifyWait() API function.
- *
- * See http://www.FreeRTOS.org/RTOS-task-notifications.html for more details.
- *
- * @param xTaskToNotify The handle of the task being notified.  The handle to a
- * task can be returned from the xTaskCreate() API function used to create the
- * task, and the handle of the currently running task can be obtained by calling
- * xTaskGetCurrentTaskHandle().
- *
- * @param pxHigherPriorityTaskWoken  vTaskNotifyGiveFromISR() will set
- * *pxHigherPriorityTaskWoken to pdTRUE if sending the notification caused the
- * task to which the notification was sent to leave the Blocked state, and the
- * unblocked task has a priority higher than the currently running task.  If
- * vTaskNotifyGiveFromISR() sets this value to pdTRUE then a context switch
- * should be requested before the interrupt is exited.  How a context switch is
- * requested from an ISR is dependent on the port - see the documentation page
- * for the port in use.
- *
- * \defgroup xTaskNotifyWait xTaskNotifyWait
- * \ingroup TaskNotifications
- */
-void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
-
-/**
- * task. h
- * 
uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this - * function to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * ulTaskNotifyTake() is intended for use when a task notification is used as a - * faster and lighter weight binary or counting semaphore alternative. Actual - * FreeRTOS semaphores are taken using the xSemaphoreTake() API function, the - * equivalent action that instead uses a task notification is - * ulTaskNotifyTake(). - * - * When a task is using its notification value as a binary or counting semaphore - * other tasks should send notifications to it using the xTaskNotifyGive() - * macro, or xTaskNotify() function with the eAction parameter set to - * eIncrement. - * - * ulTaskNotifyTake() can either clear the task's notification value to - * zero on exit, in which case the notification value acts like a binary - * semaphore, or decrement the task's notification value on exit, in which case - * the notification value acts like a counting semaphore. - * - * A task can use ulTaskNotifyTake() to [optionally] block to wait for a - * the task's notification value to be non-zero. The task does not consume any - * CPU time while it is in the Blocked state. - * - * Where as xTaskNotifyWait() will return when a notification is pending, - * ulTaskNotifyTake() will return when the task's notification value is - * not zero. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. - * - * @param xClearCountOnExit if xClearCountOnExit is pdFALSE then the task's - * notification value is decremented when the function exits. In this way the - * notification value acts like a counting semaphore. If xClearCountOnExit is - * not pdFALSE then the task's notification value is cleared to zero when the - * function exits. In this way the notification value acts like a binary - * semaphore. - * - * @param xTicksToWait The maximum amount of time that the task should wait in - * the Blocked state for the task's notification value to be greater than zero, - * should the count not already be greater than zero when - * ulTaskNotifyTake() was called. The task will not consume any processing - * time while it is in the Blocked state. This is specified in kernel ticks, - * the macro pdMS_TO_TICSK( value_in_ms ) can be used to convert a time - * specified in milliseconds to a time specified in ticks. - * - * @return The task's notification count before it is either cleared to zero or - * decremented (see the xClearCountOnExit parameter). - * - * \defgroup ulTaskNotifyTake ulTaskNotifyTake - * \ingroup TaskNotifications - */ -uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask );
- * - * If the notification state of the task referenced by the handle xTask is - * eNotified, then set the task's notification state to eNotWaitingNotification. - * The task's notification value is not altered. Set xTask to NULL to clear the - * notification state of the calling task. - * - * @return pdTRUE if the task's notification state was set to - * eNotWaitingNotification, otherwise pdFALSE. - * \defgroup xTaskNotifyStateClear xTaskNotifyStateClear - * \ingroup TaskNotifications - */ -BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask ); - -/*----------------------------------------------------------- - * SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES - *----------------------------------------------------------*/ - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY - * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS - * AN INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * Called from the real time kernel tick (either preemptive or cooperative), - * this increments the tick count and checks if any tasks that are blocked - * for a finite period required removing from a blocked list and placing on - * a ready list. If a non-zero value is returned then a context switch is - * required because either: - * + A task was removed from a blocked list because its timeout had expired, - * or - * + Time slicing is in use and there is a task of equal priority to the - * currently running task. - */ -BaseType_t xTaskIncrementTick( void ) PRIVILEGED_FUNCTION; - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN - * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED. - * - * Removes the calling task from the ready list and places it both - * on the list of tasks waiting for a particular event, and the - * list of delayed tasks. The task will be removed from both lists - * and replaced on the ready list should either the event occur (and - * there be no higher priority tasks waiting on the same event) or - * the delay period expires. - * - * The 'unordered' version replaces the event list item value with the - * xItemValue value, and inserts the list item at the end of the list. - * - * The 'ordered' version uses the existing event list item value (which is the - * owning tasks priority) to insert the list item into the event list is task - * priority order. - * - * @param pxEventList The list containing tasks that are blocked waiting - * for the event to occur. - * - * @param xItemValue The item value to use for the event list item when the - * event list is not ordered by task priority. - * - * @param xTicksToWait The maximum amount of time that the task should wait - * for the event to occur. This is specified in kernel ticks,the constant - * portTICK_PERIOD_MS can be used to convert kernel ticks into a real time - * period. - */ -void vTaskPlaceOnEventList( List_t * const pxEventList, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -void vTaskPlaceOnUnorderedEventList( List_t * pxEventList, const TickType_t xItemValue, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN - * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED. - * - * This function performs nearly the same function as vTaskPlaceOnEventList(). - * The difference being that this function does not permit tasks to block - * indefinitely, whereas vTaskPlaceOnEventList() does. - * - */ -void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION; - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN - * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED. - * - * Removes a task from both the specified event list and the list of blocked - * tasks, and places it on a ready queue. - * - * xTaskRemoveFromEventList()/xTaskRemoveFromUnorderedEventList() will be called - * if either an event occurs to unblock a task, or the block timeout period - * expires. - * - * xTaskRemoveFromEventList() is used when the event list is in task priority - * order. It removes the list item from the head of the event list as that will - * have the highest priority owning task of all the tasks on the event list. - * xTaskRemoveFromUnorderedEventList() is used when the event list is not - * ordered and the event list items hold something other than the owning tasks - * priority. In this case the event list item value is updated to the value - * passed in the xItemValue parameter. - * - * @return pdTRUE if the task being removed has a higher priority than the task - * making the call, otherwise pdFALSE. - */ -BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList ) PRIVILEGED_FUNCTION; -BaseType_t xTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem, const TickType_t xItemValue ) PRIVILEGED_FUNCTION; - -/* - * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY - * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS - * AN INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER. - * - * Sets the pointer to the current TCB to the TCB of the highest priority task - * that is ready to run. - */ -void vTaskSwitchContext( void ) PRIVILEGED_FUNCTION; - -/* - * THESE FUNCTIONS MUST NOT BE USED FROM APPLICATION CODE. THEY ARE USED BY - * THE EVENT BITS MODULE. - */ -TickType_t uxTaskResetEventItemValue( void ) PRIVILEGED_FUNCTION; - -/* - * Return the handle of the calling task. - */ -TaskHandle_t xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION; - -/* - * Capture the current time status for future reference. - */ -void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) PRIVILEGED_FUNCTION; - -/* - * Compare the time status now with that previously captured to see if the - * timeout has expired. - */ -BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait ) PRIVILEGED_FUNCTION; - -/* - * Shortcut used by the queue implementation to prevent unnecessary call to - * taskYIELD(); - */ -void vTaskMissedYield( void ) PRIVILEGED_FUNCTION; - -/* - * Returns the scheduler state as taskSCHEDULER_RUNNING, - * taskSCHEDULER_NOT_STARTED or taskSCHEDULER_SUSPENDED. - */ -BaseType_t xTaskGetSchedulerState( void ) PRIVILEGED_FUNCTION; - -/* - * Raises the priority of the mutex holder to that of the calling task should - * the mutex holder have a priority less than the calling task. - */ -void vTaskPriorityInherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION; - -/* - * Set the priority of a task back to its proper priority in the case that it - * inherited a higher priority while it was holding a semaphore. - */ -BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION; - -/* - * Get the uxTCBNumber assigned to the task referenced by the xTask parameter. - */ -UBaseType_t uxTaskGetTaskNumber( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - -/* - * Set the uxTaskNumber of the task referenced by the xTask parameter to - * uxHandle. - */ -void vTaskSetTaskNumber( TaskHandle_t xTask, const UBaseType_t uxHandle ) PRIVILEGED_FUNCTION; - -/* - * Only available when configUSE_TICKLESS_IDLE is set to 1. - * If tickless mode is being used, or a low power mode is implemented, then - * the tick interrupt will not execute during idle periods. When this is the - * case, the tick count value maintained by the scheduler needs to be kept up - * to date with the actual execution time by being skipped forward by a time - * equal to the idle period. - */ -void vTaskStepTick( const TickType_t xTicksToJump ) PRIVILEGED_FUNCTION; - -/* - * Only avilable when configUSE_TICKLESS_IDLE is set to 1. - * Provided for use within portSUPPRESS_TICKS_AND_SLEEP() to allow the port - * specific sleep function to determine if it is ok to proceed with the sleep, - * and if it is ok to proceed, if it is ok to sleep indefinitely. - * - * This function is necessary because portSUPPRESS_TICKS_AND_SLEEP() is only - * called with the scheduler suspended, not from within a critical section. It - * is therefore possible for an interrupt to request a context switch between - * portSUPPRESS_TICKS_AND_SLEEP() and the low power mode actually being - * entered. eTaskConfirmSleepModeStatus() should be called from a short - * critical section between the timer being stopped and the sleep mode being - * entered to ensure it is ok to proceed into the sleep mode. - */ -eSleepModeStatus eTaskConfirmSleepModeStatus( void ) PRIVILEGED_FUNCTION; - -/* - * For internal use only. Increment the mutex held count when a mutex is - * taken and return the handle of the task that has taken the mutex. - */ -void *pvTaskIncrementMutexHeldCount( void ) PRIVILEGED_FUNCTION; - -#ifdef __cplusplus -} -#endif - -#endif /* INC_TASK_H */ - - - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/timers.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/timers.h deleted file mode 100644 index 798c955..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/include/timers.h +++ /dev/null @@ -1,1314 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - - -#ifndef TIMERS_H -#define TIMERS_H - -#ifndef INC_FREERTOS_H - #error "include FreeRTOS.h must appear in source files before include timers.h" -#endif - -/*lint -e537 This headers are only multiply included if the application code -happens to also be including task.h. */ -#include "task.h" -/*lint +e537 */ - -#ifdef __cplusplus -extern "C" { -#endif - -/*----------------------------------------------------------- - * MACROS AND DEFINITIONS - *----------------------------------------------------------*/ - -/* IDs for commands that can be sent/received on the timer queue. These are to -be used solely through the macros that make up the public software timer API, -as defined below. The commands that are sent from interrupts must use the -highest numbers as tmrFIRST_FROM_ISR_COMMAND is used to determine if the task -or interrupt version of the queue send function should be used. */ -#define tmrCOMMAND_EXECUTE_CALLBACK_FROM_ISR ( ( BaseType_t ) -2 ) -#define tmrCOMMAND_EXECUTE_CALLBACK ( ( BaseType_t ) -1 ) -#define tmrCOMMAND_START_DONT_TRACE ( ( BaseType_t ) 0 ) -#define tmrCOMMAND_START ( ( BaseType_t ) 1 ) -#define tmrCOMMAND_RESET ( ( BaseType_t ) 2 ) -#define tmrCOMMAND_STOP ( ( BaseType_t ) 3 ) -#define tmrCOMMAND_CHANGE_PERIOD ( ( BaseType_t ) 4 ) -#define tmrCOMMAND_DELETE ( ( BaseType_t ) 5 ) - -#define tmrFIRST_FROM_ISR_COMMAND ( ( BaseType_t ) 6 ) -#define tmrCOMMAND_START_FROM_ISR ( ( BaseType_t ) 6 ) -#define tmrCOMMAND_RESET_FROM_ISR ( ( BaseType_t ) 7 ) -#define tmrCOMMAND_STOP_FROM_ISR ( ( BaseType_t ) 8 ) -#define tmrCOMMAND_CHANGE_PERIOD_FROM_ISR ( ( BaseType_t ) 9 ) - - -/** - * Type by which software timers are referenced. For example, a call to - * xTimerCreate() returns an TimerHandle_t variable that can then be used to - * reference the subject timer in calls to other software timer API functions - * (for example, xTimerStart(), xTimerReset(), etc.). - */ -typedef void * TimerHandle_t; - -/* - * Defines the prototype to which timer callback functions must conform. - */ -typedef void (*TimerCallbackFunction_t)( TimerHandle_t xTimer ); - -/* - * Defines the prototype to which functions used with the - * xTimerPendFunctionCallFromISR() function must conform. - */ -typedef void (*PendedFunction_t)( void *, uint32_t ); - -/** - * TimerHandle_t xTimerCreate( const char * const pcTimerName, - * TickType_t xTimerPeriodInTicks, - * UBaseType_t uxAutoReload, - * void * pvTimerID, - * TimerCallbackFunction_t pxCallbackFunction ); - * - * Creates a new software timer instance, and returns a handle by which the - * created software timer can be referenced. - * - * Internally, within the FreeRTOS implementation, software timers use a block - * of memory, in which the timer data structure is stored. If a software timer - * is created using xTimerCreate() then the required memory is automatically - * dynamically allocated inside the xTimerCreate() function. (see - * http://www.freertos.org/a00111.html). If a software timer is created using - * xTimerCreateStatic() then the application writer must provide the memory that - * will get used by the software timer. xTimerCreateStatic() therefore allows a - * software timer to be created without using any dynamic memory allocation. - * - * Timers are created in the dormant state. The xTimerStart(), xTimerReset(), - * xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and - * xTimerChangePeriodFromISR() API functions can all be used to transition a - * timer into the active state. - * - * @param pcTimerName A text name that is assigned to the timer. This is done - * purely to assist debugging. The kernel itself only ever references a timer - * by its handle, and never by its name. - * - * @param xTimerPeriodInTicks The timer period. The time is defined in tick - * periods so the constant portTICK_PERIOD_MS can be used to convert a time that - * has been specified in milliseconds. For example, if the timer must expire - * after 100 ticks, then xTimerPeriodInTicks should be set to 100. - * Alternatively, if the timer must expire after 500ms, then xPeriod can be set - * to ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than or - * equal to 1000. - * - * @param uxAutoReload If uxAutoReload is set to pdTRUE then the timer will - * expire repeatedly with a frequency set by the xTimerPeriodInTicks parameter. - * If uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and - * enter the dormant state after it expires. - * - * @param pvTimerID An identifier that is assigned to the timer being created. - * Typically this would be used in the timer callback function to identify which - * timer expired when the same callback function is assigned to more than one - * timer. - * - * @param pxCallbackFunction The function to call when the timer expires. - * Callback functions must have the prototype defined by TimerCallbackFunction_t, - * which is "void vCallbackFunction( TimerHandle_t xTimer );". - * - * @return If the timer is successfully created then a handle to the newly - * created timer is returned. If the timer cannot be created (because either - * there is insufficient FreeRTOS heap remaining to allocate the timer - * structures, or the timer period was set to 0) then NULL is returned. - * - * Example usage: - * @verbatim - * #define NUM_TIMERS 5 - * - * // An array to hold handles to the created timers. - * TimerHandle_t xTimers[ NUM_TIMERS ]; - * - * // An array to hold a count of the number of times each timer expires. - * int32_t lExpireCounters[ NUM_TIMERS ] = { 0 }; - * - * // Define a callback function that will be used by multiple timer instances. - * // The callback function does nothing but count the number of times the - * // associated timer expires, and stop the timer once the timer has expired - * // 10 times. - * void vTimerCallback( TimerHandle_t pxTimer ) - * { - * int32_t lArrayIndex; - * const int32_t xMaxExpiryCountBeforeStopping = 10; - * - * // Optionally do something if the pxTimer parameter is NULL. - * configASSERT( pxTimer ); - * - * // Which timer expired? - * lArrayIndex = ( int32_t ) pvTimerGetTimerID( pxTimer ); - * - * // Increment the number of times that pxTimer has expired. - * lExpireCounters[ lArrayIndex ] += 1; - * - * // If the timer has expired 10 times then stop it from running. - * if( lExpireCounters[ lArrayIndex ] == xMaxExpiryCountBeforeStopping ) - * { - * // Do not use a block time if calling a timer API function from a - * // timer callback function, as doing so could cause a deadlock! - * xTimerStop( pxTimer, 0 ); - * } - * } - * - * void main( void ) - * { - * int32_t x; - * - * // Create then start some timers. Starting the timers before the scheduler - * // has been started means the timers will start running immediately that - * // the scheduler starts. - * for( x = 0; x < NUM_TIMERS; x++ ) - * { - * xTimers[ x ] = xTimerCreate( "Timer", // Just a text name, not used by the kernel. - * ( 100 * x ), // The timer period in ticks. - * pdTRUE, // The timers will auto-reload themselves when they expire. - * ( void * ) x, // Assign each timer a unique id equal to its array index. - * vTimerCallback // Each timer calls the same callback when it expires. - * ); - * - * if( xTimers[ x ] == NULL ) - * { - * // The timer was not created. - * } - * else - * { - * // Start the timer. No block time is specified, and even if one was - * // it would be ignored because the scheduler has not yet been - * // started. - * if( xTimerStart( xTimers[ x ], 0 ) != pdPASS ) - * { - * // The timer could not be set into the Active state. - * } - * } - * } - * - * // ... - * // Create tasks here. - * // ... - * - * // Starting the scheduler will start the timers running as they have already - * // been set into the active state. - * vTaskStartScheduler(); - * - * // Should not reach here. - * for( ;; ); - * } - * @endverbatim - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - TimerHandle_t xTimerCreate( const char * const pcTimerName, - const TickType_t xTimerPeriodInTicks, - const UBaseType_t uxAutoReload, - void * const pvTimerID, - TimerCallbackFunction_t pxCallbackFunction ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -#endif - -/** - * TimerHandle_t xTimerCreateStatic(const char * const pcTimerName, - * TickType_t xTimerPeriodInTicks, - * UBaseType_t uxAutoReload, - * void * pvTimerID, - * TimerCallbackFunction_t pxCallbackFunction, - * StaticTimer_t *pxTimerBuffer ); - * - * Creates a new software timer instance, and returns a handle by which the - * created software timer can be referenced. - * - * Internally, within the FreeRTOS implementation, software timers use a block - * of memory, in which the timer data structure is stored. If a software timer - * is created using xTimerCreate() then the required memory is automatically - * dynamically allocated inside the xTimerCreate() function. (see - * http://www.freertos.org/a00111.html). If a software timer is created using - * xTimerCreateStatic() then the application writer must provide the memory that - * will get used by the software timer. xTimerCreateStatic() therefore allows a - * software timer to be created without using any dynamic memory allocation. - * - * Timers are created in the dormant state. The xTimerStart(), xTimerReset(), - * xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and - * xTimerChangePeriodFromISR() API functions can all be used to transition a - * timer into the active state. - * - * @param pcTimerName A text name that is assigned to the timer. This is done - * purely to assist debugging. The kernel itself only ever references a timer - * by its handle, and never by its name. - * - * @param xTimerPeriodInTicks The timer period. The time is defined in tick - * periods so the constant portTICK_PERIOD_MS can be used to convert a time that - * has been specified in milliseconds. For example, if the timer must expire - * after 100 ticks, then xTimerPeriodInTicks should be set to 100. - * Alternatively, if the timer must expire after 500ms, then xPeriod can be set - * to ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than or - * equal to 1000. - * - * @param uxAutoReload If uxAutoReload is set to pdTRUE then the timer will - * expire repeatedly with a frequency set by the xTimerPeriodInTicks parameter. - * If uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and - * enter the dormant state after it expires. - * - * @param pvTimerID An identifier that is assigned to the timer being created. - * Typically this would be used in the timer callback function to identify which - * timer expired when the same callback function is assigned to more than one - * timer. - * - * @param pxCallbackFunction The function to call when the timer expires. - * Callback functions must have the prototype defined by TimerCallbackFunction_t, - * which is "void vCallbackFunction( TimerHandle_t xTimer );". - * - * @param pxTimerBuffer Must point to a variable of type StaticTimer_t, which - * will be then be used to hold the software timer's data structures, removing - * the need for the memory to be allocated dynamically. - * - * @return If the timer is created then a handle to the created timer is - * returned. If pxTimerBuffer was NULL then NULL is returned. - * - * Example usage: - * @verbatim - * - * // The buffer used to hold the software timer's data structure. - * static StaticTimer_t xTimerBuffer; - * - * // A variable that will be incremented by the software timer's callback - * // function. - * UBaseType_t uxVariableToIncrement = 0; - * - * // A software timer callback function that increments a variable passed to - * // it when the software timer was created. After the 5th increment the - * // callback function stops the software timer. - * static void prvTimerCallback( TimerHandle_t xExpiredTimer ) - * { - * UBaseType_t *puxVariableToIncrement; - * BaseType_t xReturned; - * - * // Obtain the address of the variable to increment from the timer ID. - * puxVariableToIncrement = ( UBaseType_t * ) pvTimerGetTimerID( xExpiredTimer ); - * - * // Increment the variable to show the timer callback has executed. - * ( *puxVariableToIncrement )++; - * - * // If this callback has executed the required number of times, stop the - * // timer. - * if( *puxVariableToIncrement == 5 ) - * { - * // This is called from a timer callback so must not block. - * xTimerStop( xExpiredTimer, staticDONT_BLOCK ); - * } - * } - * - * - * void main( void ) - * { - * // Create the software time. xTimerCreateStatic() has an extra parameter - * // than the normal xTimerCreate() API function. The parameter is a pointer - * // to the StaticTimer_t structure that will hold the software timer - * // structure. If the parameter is passed as NULL then the structure will be - * // allocated dynamically, just as if xTimerCreate() had been called. - * xTimer = xTimerCreateStatic( "T1", // Text name for the task. Helps debugging only. Not used by FreeRTOS. - * xTimerPeriod, // The period of the timer in ticks. - * pdTRUE, // This is an auto-reload timer. - * ( void * ) &uxVariableToIncrement, // A variable incremented by the software timer's callback function - * prvTimerCallback, // The function to execute when the timer expires. - * &xTimerBuffer ); // The buffer that will hold the software timer structure. - * - * // The scheduler has not started yet so a block time is not used. - * xReturned = xTimerStart( xTimer, 0 ); - * - * // ... - * // Create tasks here. - * // ... - * - * // Starting the scheduler will start the timers running as they have already - * // been set into the active state. - * vTaskStartScheduler(); - * - * // Should not reach here. - * for( ;; ); - * } - * @endverbatim - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - TimerHandle_t xTimerCreateStatic( const char * const pcTimerName, - const TickType_t xTimerPeriodInTicks, - const UBaseType_t uxAutoReload, - void * const pvTimerID, - TimerCallbackFunction_t pxCallbackFunction, - StaticTimer_t *pxTimerBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * void *pvTimerGetTimerID( TimerHandle_t xTimer ); - * - * Returns the ID assigned to the timer. - * - * IDs are assigned to timers using the pvTimerID parameter of the call to - * xTimerCreated() that was used to create the timer, and by calling the - * vTimerSetTimerID() API function. - * - * If the same callback function is assigned to multiple timers then the timer - * ID can be used as time specific (timer local) storage. - * - * @param xTimer The timer being queried. - * - * @return The ID assigned to the timer being queried. - * - * Example usage: - * - * See the xTimerCreate() API function example usage scenario. - */ -void *pvTimerGetTimerID( const TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; - -/** - * void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ); - * - * Sets the ID assigned to the timer. - * - * IDs are assigned to timers using the pvTimerID parameter of the call to - * xTimerCreated() that was used to create the timer. - * - * If the same callback function is assigned to multiple timers then the timer - * ID can be used as time specific (timer local) storage. - * - * @param xTimer The timer being updated. - * - * @param pvNewID The ID to assign to the timer. - * - * Example usage: - * - * See the xTimerCreate() API function example usage scenario. - */ -void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ) PRIVILEGED_FUNCTION; - -/** - * BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ); - * - * Queries a timer to see if it is active or dormant. - * - * A timer will be dormant if: - * 1) It has been created but not started, or - * 2) It is an expired one-shot timer that has not been restarted. - * - * Timers are created in the dormant state. The xTimerStart(), xTimerReset(), - * xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and - * xTimerChangePeriodFromISR() API functions can all be used to transition a timer into the - * active state. - * - * @param xTimer The timer being queried. - * - * @return pdFALSE will be returned if the timer is dormant. A value other than - * pdFALSE will be returned if the timer is active. - * - * Example usage: - * @verbatim - * // This function assumes xTimer has already been created. - * void vAFunction( TimerHandle_t xTimer ) - * { - * if( xTimerIsTimerActive( xTimer ) != pdFALSE ) // or more simply and equivalently "if( xTimerIsTimerActive( xTimer ) )" - * { - * // xTimer is active, do something. - * } - * else - * { - * // xTimer is not active, do something else. - * } - * } - * @endverbatim - */ -BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; - -/** - * TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ); - * - * Simply returns the handle of the timer service/daemon task. It it not valid - * to call xTimerGetTimerDaemonTaskHandle() before the scheduler has been started. - */ -TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; - -/** - * BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait ); - * - * Timer functionality is provided by a timer service/daemon task. Many of the - * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is - * private to the kernel itself and is not directly accessible to application - * code. The length of the timer command queue is set by the - * configTIMER_QUEUE_LENGTH configuration constant. - * - * xTimerStart() starts a timer that was previously created using the - * xTimerCreate() API function. If the timer had already been started and was - * already in the active state, then xTimerStart() has equivalent functionality - * to the xTimerReset() API function. - * - * Starting a timer ensures the timer is in the active state. If the timer - * is not stopped, deleted, or reset in the mean time, the callback function - * associated with the timer will get called 'n' ticks after xTimerStart() was - * called, where 'n' is the timers defined period. - * - * It is valid to call xTimerStart() before the scheduler has been started, but - * when this is done the timer will not actually start until the scheduler is - * started, and the timers expiry time will be relative to when the scheduler is - * started, not relative to when xTimerStart() was called. - * - * The configUSE_TIMERS configuration constant must be set to 1 for xTimerStart() - * to be available. - * - * @param xTimer The handle of the timer being started/restarted. - * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should - * be held in the Blocked state to wait for the start command to be successfully - * sent to the timer command queue, should the queue already be full when - * xTimerStart() was called. xTicksToWait is ignored if xTimerStart() is called - * before the scheduler is started. - * - * @return pdFAIL will be returned if the start command could not be sent to - * the timer command queue even after xTicksToWait ticks had passed. pdPASS will - * be returned if the command was successfully sent to the timer command queue. - * When the command is actually processed will depend on the priority of the - * timer service/daemon task relative to other tasks in the system, although the - * timers expiry time is relative to when xTimerStart() is actually called. The - * timer service/daemon task priority is set by the configTIMER_TASK_PRIORITY - * configuration constant. - * - * Example usage: - * - * See the xTimerCreate() API function example usage scenario. - * - */ -#define xTimerStart( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) ) - -/** - * BaseType_t xTimerStop( TimerHandle_t xTimer, TickType_t xTicksToWait ); - * - * Timer functionality is provided by a timer service/daemon task. Many of the - * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is - * private to the kernel itself and is not directly accessible to application - * code. The length of the timer command queue is set by the - * configTIMER_QUEUE_LENGTH configuration constant. - * - * xTimerStop() stops a timer that was previously started using either of the - * The xTimerStart(), xTimerReset(), xTimerStartFromISR(), xTimerResetFromISR(), - * xTimerChangePeriod() or xTimerChangePeriodFromISR() API functions. - * - * Stopping a timer ensures the timer is not in the active state. - * - * The configUSE_TIMERS configuration constant must be set to 1 for xTimerStop() - * to be available. - * - * @param xTimer The handle of the timer being stopped. - * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should - * be held in the Blocked state to wait for the stop command to be successfully - * sent to the timer command queue, should the queue already be full when - * xTimerStop() was called. xTicksToWait is ignored if xTimerStop() is called - * before the scheduler is started. - * - * @return pdFAIL will be returned if the stop command could not be sent to - * the timer command queue even after xTicksToWait ticks had passed. pdPASS will - * be returned if the command was successfully sent to the timer command queue. - * When the command is actually processed will depend on the priority of the - * timer service/daemon task relative to other tasks in the system. The timer - * service/daemon task priority is set by the configTIMER_TASK_PRIORITY - * configuration constant. - * - * Example usage: - * - * See the xTimerCreate() API function example usage scenario. - * - */ -#define xTimerStop( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP, 0U, NULL, ( xTicksToWait ) ) - -/** - * BaseType_t xTimerChangePeriod( TimerHandle_t xTimer, - * TickType_t xNewPeriod, - * TickType_t xTicksToWait ); - * - * Timer functionality is provided by a timer service/daemon task. Many of the - * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is - * private to the kernel itself and is not directly accessible to application - * code. The length of the timer command queue is set by the - * configTIMER_QUEUE_LENGTH configuration constant. - * - * xTimerChangePeriod() changes the period of a timer that was previously - * created using the xTimerCreate() API function. - * - * xTimerChangePeriod() can be called to change the period of an active or - * dormant state timer. - * - * The configUSE_TIMERS configuration constant must be set to 1 for - * xTimerChangePeriod() to be available. - * - * @param xTimer The handle of the timer that is having its period changed. - * - * @param xNewPeriod The new period for xTimer. Timer periods are specified in - * tick periods, so the constant portTICK_PERIOD_MS can be used to convert a time - * that has been specified in milliseconds. For example, if the timer must - * expire after 100 ticks, then xNewPeriod should be set to 100. Alternatively, - * if the timer must expire after 500ms, then xNewPeriod can be set to - * ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than - * or equal to 1000. - * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should - * be held in the Blocked state to wait for the change period command to be - * successfully sent to the timer command queue, should the queue already be - * full when xTimerChangePeriod() was called. xTicksToWait is ignored if - * xTimerChangePeriod() is called before the scheduler is started. - * - * @return pdFAIL will be returned if the change period command could not be - * sent to the timer command queue even after xTicksToWait ticks had passed. - * pdPASS will be returned if the command was successfully sent to the timer - * command queue. When the command is actually processed will depend on the - * priority of the timer service/daemon task relative to other tasks in the - * system. The timer service/daemon task priority is set by the - * configTIMER_TASK_PRIORITY configuration constant. - * - * Example usage: - * @verbatim - * // This function assumes xTimer has already been created. If the timer - * // referenced by xTimer is already active when it is called, then the timer - * // is deleted. If the timer referenced by xTimer is not active when it is - * // called, then the period of the timer is set to 500ms and the timer is - * // started. - * void vAFunction( TimerHandle_t xTimer ) - * { - * if( xTimerIsTimerActive( xTimer ) != pdFALSE ) // or more simply and equivalently "if( xTimerIsTimerActive( xTimer ) )" - * { - * // xTimer is already active - delete it. - * xTimerDelete( xTimer ); - * } - * else - * { - * // xTimer is not active, change its period to 500ms. This will also - * // cause the timer to start. Block for a maximum of 100 ticks if the - * // change period command cannot immediately be sent to the timer - * // command queue. - * if( xTimerChangePeriod( xTimer, 500 / portTICK_PERIOD_MS, 100 ) == pdPASS ) - * { - * // The command was successfully sent. - * } - * else - * { - * // The command could not be sent, even after waiting for 100 ticks - * // to pass. Take appropriate action here. - * } - * } - * } - * @endverbatim - */ - #define xTimerChangePeriod( xTimer, xNewPeriod, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_CHANGE_PERIOD, ( xNewPeriod ), NULL, ( xTicksToWait ) ) - -/** - * BaseType_t xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait ); - * - * Timer functionality is provided by a timer service/daemon task. Many of the - * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is - * private to the kernel itself and is not directly accessible to application - * code. The length of the timer command queue is set by the - * configTIMER_QUEUE_LENGTH configuration constant. - * - * xTimerDelete() deletes a timer that was previously created using the - * xTimerCreate() API function. - * - * The configUSE_TIMERS configuration constant must be set to 1 for - * xTimerDelete() to be available. - * - * @param xTimer The handle of the timer being deleted. - * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should - * be held in the Blocked state to wait for the delete command to be - * successfully sent to the timer command queue, should the queue already be - * full when xTimerDelete() was called. xTicksToWait is ignored if xTimerDelete() - * is called before the scheduler is started. - * - * @return pdFAIL will be returned if the delete command could not be sent to - * the timer command queue even after xTicksToWait ticks had passed. pdPASS will - * be returned if the command was successfully sent to the timer command queue. - * When the command is actually processed will depend on the priority of the - * timer service/daemon task relative to other tasks in the system. The timer - * service/daemon task priority is set by the configTIMER_TASK_PRIORITY - * configuration constant. - * - * Example usage: - * - * See the xTimerChangePeriod() API function example usage scenario. - */ -#define xTimerDelete( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_DELETE, 0U, NULL, ( xTicksToWait ) ) - -/** - * BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait ); - * - * Timer functionality is provided by a timer service/daemon task. Many of the - * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is - * private to the kernel itself and is not directly accessible to application - * code. The length of the timer command queue is set by the - * configTIMER_QUEUE_LENGTH configuration constant. - * - * xTimerReset() re-starts a timer that was previously created using the - * xTimerCreate() API function. If the timer had already been started and was - * already in the active state, then xTimerReset() will cause the timer to - * re-evaluate its expiry time so that it is relative to when xTimerReset() was - * called. If the timer was in the dormant state then xTimerReset() has - * equivalent functionality to the xTimerStart() API function. - * - * Resetting a timer ensures the timer is in the active state. If the timer - * is not stopped, deleted, or reset in the mean time, the callback function - * associated with the timer will get called 'n' ticks after xTimerReset() was - * called, where 'n' is the timers defined period. - * - * It is valid to call xTimerReset() before the scheduler has been started, but - * when this is done the timer will not actually start until the scheduler is - * started, and the timers expiry time will be relative to when the scheduler is - * started, not relative to when xTimerReset() was called. - * - * The configUSE_TIMERS configuration constant must be set to 1 for xTimerReset() - * to be available. - * - * @param xTimer The handle of the timer being reset/started/restarted. - * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should - * be held in the Blocked state to wait for the reset command to be successfully - * sent to the timer command queue, should the queue already be full when - * xTimerReset() was called. xTicksToWait is ignored if xTimerReset() is called - * before the scheduler is started. - * - * @return pdFAIL will be returned if the reset command could not be sent to - * the timer command queue even after xTicksToWait ticks had passed. pdPASS will - * be returned if the command was successfully sent to the timer command queue. - * When the command is actually processed will depend on the priority of the - * timer service/daemon task relative to other tasks in the system, although the - * timers expiry time is relative to when xTimerStart() is actually called. The - * timer service/daemon task priority is set by the configTIMER_TASK_PRIORITY - * configuration constant. - * - * Example usage: - * @verbatim - * // When a key is pressed, an LCD back-light is switched on. If 5 seconds pass - * // without a key being pressed, then the LCD back-light is switched off. In - * // this case, the timer is a one-shot timer. - * - * TimerHandle_t xBacklightTimer = NULL; - * - * // The callback function assigned to the one-shot timer. In this case the - * // parameter is not used. - * void vBacklightTimerCallback( TimerHandle_t pxTimer ) - * { - * // The timer expired, therefore 5 seconds must have passed since a key - * // was pressed. Switch off the LCD back-light. - * vSetBacklightState( BACKLIGHT_OFF ); - * } - * - * // The key press event handler. - * void vKeyPressEventHandler( char cKey ) - * { - * // Ensure the LCD back-light is on, then reset the timer that is - * // responsible for turning the back-light off after 5 seconds of - * // key inactivity. Wait 10 ticks for the command to be successfully sent - * // if it cannot be sent immediately. - * vSetBacklightState( BACKLIGHT_ON ); - * if( xTimerReset( xBacklightTimer, 100 ) != pdPASS ) - * { - * // The reset command was not executed successfully. Take appropriate - * // action here. - * } - * - * // Perform the rest of the key processing here. - * } - * - * void main( void ) - * { - * int32_t x; - * - * // Create then start the one-shot timer that is responsible for turning - * // the back-light off if no keys are pressed within a 5 second period. - * xBacklightTimer = xTimerCreate( "BacklightTimer", // Just a text name, not used by the kernel. - * ( 5000 / portTICK_PERIOD_MS), // The timer period in ticks. - * pdFALSE, // The timer is a one-shot timer. - * 0, // The id is not used by the callback so can take any value. - * vBacklightTimerCallback // The callback function that switches the LCD back-light off. - * ); - * - * if( xBacklightTimer == NULL ) - * { - * // The timer was not created. - * } - * else - * { - * // Start the timer. No block time is specified, and even if one was - * // it would be ignored because the scheduler has not yet been - * // started. - * if( xTimerStart( xBacklightTimer, 0 ) != pdPASS ) - * { - * // The timer could not be set into the Active state. - * } - * } - * - * // ... - * // Create tasks here. - * // ... - * - * // Starting the scheduler will start the timer running as it has already - * // been set into the active state. - * vTaskStartScheduler(); - * - * // Should not reach here. - * for( ;; ); - * } - * @endverbatim - */ -#define xTimerReset( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_RESET, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) ) - -/** - * BaseType_t xTimerStartFromISR( TimerHandle_t xTimer, - * BaseType_t *pxHigherPriorityTaskWoken ); - * - * A version of xTimerStart() that can be called from an interrupt service - * routine. - * - * @param xTimer The handle of the timer being started/restarted. - * - * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most - * of its time in the Blocked state, waiting for messages to arrive on the timer - * command queue. Calling xTimerStartFromISR() writes a message to the timer - * command queue, so has the potential to transition the timer service/daemon - * task out of the Blocked state. If calling xTimerStartFromISR() causes the - * timer service/daemon task to leave the Blocked state, and the timer service/ - * daemon task has a priority equal to or greater than the currently executing - * task (the task that was interrupted), then *pxHigherPriorityTaskWoken will - * get set to pdTRUE internally within the xTimerStartFromISR() function. If - * xTimerStartFromISR() sets this value to pdTRUE then a context switch should - * be performed before the interrupt exits. - * - * @return pdFAIL will be returned if the start command could not be sent to - * the timer command queue. pdPASS will be returned if the command was - * successfully sent to the timer command queue. When the command is actually - * processed will depend on the priority of the timer service/daemon task - * relative to other tasks in the system, although the timers expiry time is - * relative to when xTimerStartFromISR() is actually called. The timer - * service/daemon task priority is set by the configTIMER_TASK_PRIORITY - * configuration constant. - * - * Example usage: - * @verbatim - * // This scenario assumes xBacklightTimer has already been created. When a - * // key is pressed, an LCD back-light is switched on. If 5 seconds pass - * // without a key being pressed, then the LCD back-light is switched off. In - * // this case, the timer is a one-shot timer, and unlike the example given for - * // the xTimerReset() function, the key press event handler is an interrupt - * // service routine. - * - * // The callback function assigned to the one-shot timer. In this case the - * // parameter is not used. - * void vBacklightTimerCallback( TimerHandle_t pxTimer ) - * { - * // The timer expired, therefore 5 seconds must have passed since a key - * // was pressed. Switch off the LCD back-light. - * vSetBacklightState( BACKLIGHT_OFF ); - * } - * - * // The key press interrupt service routine. - * void vKeyPressEventInterruptHandler( void ) - * { - * BaseType_t xHigherPriorityTaskWoken = pdFALSE; - * - * // Ensure the LCD back-light is on, then restart the timer that is - * // responsible for turning the back-light off after 5 seconds of - * // key inactivity. This is an interrupt service routine so can only - * // call FreeRTOS API functions that end in "FromISR". - * vSetBacklightState( BACKLIGHT_ON ); - * - * // xTimerStartFromISR() or xTimerResetFromISR() could be called here - * // as both cause the timer to re-calculate its expiry time. - * // xHigherPriorityTaskWoken was initialised to pdFALSE when it was - * // declared (in this function). - * if( xTimerStartFromISR( xBacklightTimer, &xHigherPriorityTaskWoken ) != pdPASS ) - * { - * // The start command was not executed successfully. Take appropriate - * // action here. - * } - * - * // Perform the rest of the key processing here. - * - * // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch - * // should be performed. The syntax required to perform a context switch - * // from inside an ISR varies from port to port, and from compiler to - * // compiler. Inspect the demos for the port you are using to find the - * // actual syntax required. - * if( xHigherPriorityTaskWoken != pdFALSE ) - * { - * // Call the interrupt safe yield function here (actual function - * // depends on the FreeRTOS port being used). - * } - * } - * @endverbatim - */ -#define xTimerStartFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START_FROM_ISR, ( xTaskGetTickCountFromISR() ), ( pxHigherPriorityTaskWoken ), 0U ) - -/** - * BaseType_t xTimerStopFromISR( TimerHandle_t xTimer, - * BaseType_t *pxHigherPriorityTaskWoken ); - * - * A version of xTimerStop() that can be called from an interrupt service - * routine. - * - * @param xTimer The handle of the timer being stopped. - * - * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most - * of its time in the Blocked state, waiting for messages to arrive on the timer - * command queue. Calling xTimerStopFromISR() writes a message to the timer - * command queue, so has the potential to transition the timer service/daemon - * task out of the Blocked state. If calling xTimerStopFromISR() causes the - * timer service/daemon task to leave the Blocked state, and the timer service/ - * daemon task has a priority equal to or greater than the currently executing - * task (the task that was interrupted), then *pxHigherPriorityTaskWoken will - * get set to pdTRUE internally within the xTimerStopFromISR() function. If - * xTimerStopFromISR() sets this value to pdTRUE then a context switch should - * be performed before the interrupt exits. - * - * @return pdFAIL will be returned if the stop command could not be sent to - * the timer command queue. pdPASS will be returned if the command was - * successfully sent to the timer command queue. When the command is actually - * processed will depend on the priority of the timer service/daemon task - * relative to other tasks in the system. The timer service/daemon task - * priority is set by the configTIMER_TASK_PRIORITY configuration constant. - * - * Example usage: - * @verbatim - * // This scenario assumes xTimer has already been created and started. When - * // an interrupt occurs, the timer should be simply stopped. - * - * // The interrupt service routine that stops the timer. - * void vAnExampleInterruptServiceRoutine( void ) - * { - * BaseType_t xHigherPriorityTaskWoken = pdFALSE; - * - * // The interrupt has occurred - simply stop the timer. - * // xHigherPriorityTaskWoken was set to pdFALSE where it was defined - * // (within this function). As this is an interrupt service routine, only - * // FreeRTOS API functions that end in "FromISR" can be used. - * if( xTimerStopFromISR( xTimer, &xHigherPriorityTaskWoken ) != pdPASS ) - * { - * // The stop command was not executed successfully. Take appropriate - * // action here. - * } - * - * // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch - * // should be performed. The syntax required to perform a context switch - * // from inside an ISR varies from port to port, and from compiler to - * // compiler. Inspect the demos for the port you are using to find the - * // actual syntax required. - * if( xHigherPriorityTaskWoken != pdFALSE ) - * { - * // Call the interrupt safe yield function here (actual function - * // depends on the FreeRTOS port being used). - * } - * } - * @endverbatim - */ -#define xTimerStopFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP_FROM_ISR, 0, ( pxHigherPriorityTaskWoken ), 0U ) - -/** - * BaseType_t xTimerChangePeriodFromISR( TimerHandle_t xTimer, - * TickType_t xNewPeriod, - * BaseType_t *pxHigherPriorityTaskWoken ); - * - * A version of xTimerChangePeriod() that can be called from an interrupt - * service routine. - * - * @param xTimer The handle of the timer that is having its period changed. - * - * @param xNewPeriod The new period for xTimer. Timer periods are specified in - * tick periods, so the constant portTICK_PERIOD_MS can be used to convert a time - * that has been specified in milliseconds. For example, if the timer must - * expire after 100 ticks, then xNewPeriod should be set to 100. Alternatively, - * if the timer must expire after 500ms, then xNewPeriod can be set to - * ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than - * or equal to 1000. - * - * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most - * of its time in the Blocked state, waiting for messages to arrive on the timer - * command queue. Calling xTimerChangePeriodFromISR() writes a message to the - * timer command queue, so has the potential to transition the timer service/ - * daemon task out of the Blocked state. If calling xTimerChangePeriodFromISR() - * causes the timer service/daemon task to leave the Blocked state, and the - * timer service/daemon task has a priority equal to or greater than the - * currently executing task (the task that was interrupted), then - * *pxHigherPriorityTaskWoken will get set to pdTRUE internally within the - * xTimerChangePeriodFromISR() function. If xTimerChangePeriodFromISR() sets - * this value to pdTRUE then a context switch should be performed before the - * interrupt exits. - * - * @return pdFAIL will be returned if the command to change the timers period - * could not be sent to the timer command queue. pdPASS will be returned if the - * command was successfully sent to the timer command queue. When the command - * is actually processed will depend on the priority of the timer service/daemon - * task relative to other tasks in the system. The timer service/daemon task - * priority is set by the configTIMER_TASK_PRIORITY configuration constant. - * - * Example usage: - * @verbatim - * // This scenario assumes xTimer has already been created and started. When - * // an interrupt occurs, the period of xTimer should be changed to 500ms. - * - * // The interrupt service routine that changes the period of xTimer. - * void vAnExampleInterruptServiceRoutine( void ) - * { - * BaseType_t xHigherPriorityTaskWoken = pdFALSE; - * - * // The interrupt has occurred - change the period of xTimer to 500ms. - * // xHigherPriorityTaskWoken was set to pdFALSE where it was defined - * // (within this function). As this is an interrupt service routine, only - * // FreeRTOS API functions that end in "FromISR" can be used. - * if( xTimerChangePeriodFromISR( xTimer, &xHigherPriorityTaskWoken ) != pdPASS ) - * { - * // The command to change the timers period was not executed - * // successfully. Take appropriate action here. - * } - * - * // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch - * // should be performed. The syntax required to perform a context switch - * // from inside an ISR varies from port to port, and from compiler to - * // compiler. Inspect the demos for the port you are using to find the - * // actual syntax required. - * if( xHigherPriorityTaskWoken != pdFALSE ) - * { - * // Call the interrupt safe yield function here (actual function - * // depends on the FreeRTOS port being used). - * } - * } - * @endverbatim - */ -#define xTimerChangePeriodFromISR( xTimer, xNewPeriod, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_CHANGE_PERIOD_FROM_ISR, ( xNewPeriod ), ( pxHigherPriorityTaskWoken ), 0U ) - -/** - * BaseType_t xTimerResetFromISR( TimerHandle_t xTimer, - * BaseType_t *pxHigherPriorityTaskWoken ); - * - * A version of xTimerReset() that can be called from an interrupt service - * routine. - * - * @param xTimer The handle of the timer that is to be started, reset, or - * restarted. - * - * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most - * of its time in the Blocked state, waiting for messages to arrive on the timer - * command queue. Calling xTimerResetFromISR() writes a message to the timer - * command queue, so has the potential to transition the timer service/daemon - * task out of the Blocked state. If calling xTimerResetFromISR() causes the - * timer service/daemon task to leave the Blocked state, and the timer service/ - * daemon task has a priority equal to or greater than the currently executing - * task (the task that was interrupted), then *pxHigherPriorityTaskWoken will - * get set to pdTRUE internally within the xTimerResetFromISR() function. If - * xTimerResetFromISR() sets this value to pdTRUE then a context switch should - * be performed before the interrupt exits. - * - * @return pdFAIL will be returned if the reset command could not be sent to - * the timer command queue. pdPASS will be returned if the command was - * successfully sent to the timer command queue. When the command is actually - * processed will depend on the priority of the timer service/daemon task - * relative to other tasks in the system, although the timers expiry time is - * relative to when xTimerResetFromISR() is actually called. The timer service/daemon - * task priority is set by the configTIMER_TASK_PRIORITY configuration constant. - * - * Example usage: - * @verbatim - * // This scenario assumes xBacklightTimer has already been created. When a - * // key is pressed, an LCD back-light is switched on. If 5 seconds pass - * // without a key being pressed, then the LCD back-light is switched off. In - * // this case, the timer is a one-shot timer, and unlike the example given for - * // the xTimerReset() function, the key press event handler is an interrupt - * // service routine. - * - * // The callback function assigned to the one-shot timer. In this case the - * // parameter is not used. - * void vBacklightTimerCallback( TimerHandle_t pxTimer ) - * { - * // The timer expired, therefore 5 seconds must have passed since a key - * // was pressed. Switch off the LCD back-light. - * vSetBacklightState( BACKLIGHT_OFF ); - * } - * - * // The key press interrupt service routine. - * void vKeyPressEventInterruptHandler( void ) - * { - * BaseType_t xHigherPriorityTaskWoken = pdFALSE; - * - * // Ensure the LCD back-light is on, then reset the timer that is - * // responsible for turning the back-light off after 5 seconds of - * // key inactivity. This is an interrupt service routine so can only - * // call FreeRTOS API functions that end in "FromISR". - * vSetBacklightState( BACKLIGHT_ON ); - * - * // xTimerStartFromISR() or xTimerResetFromISR() could be called here - * // as both cause the timer to re-calculate its expiry time. - * // xHigherPriorityTaskWoken was initialised to pdFALSE when it was - * // declared (in this function). - * if( xTimerResetFromISR( xBacklightTimer, &xHigherPriorityTaskWoken ) != pdPASS ) - * { - * // The reset command was not executed successfully. Take appropriate - * // action here. - * } - * - * // Perform the rest of the key processing here. - * - * // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch - * // should be performed. The syntax required to perform a context switch - * // from inside an ISR varies from port to port, and from compiler to - * // compiler. Inspect the demos for the port you are using to find the - * // actual syntax required. - * if( xHigherPriorityTaskWoken != pdFALSE ) - * { - * // Call the interrupt safe yield function here (actual function - * // depends on the FreeRTOS port being used). - * } - * } - * @endverbatim - */ -#define xTimerResetFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_RESET_FROM_ISR, ( xTaskGetTickCountFromISR() ), ( pxHigherPriorityTaskWoken ), 0U ) - - -/** - * BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, - * void *pvParameter1, - * uint32_t ulParameter2, - * BaseType_t *pxHigherPriorityTaskWoken ); - * - * - * Used from application interrupt service routines to defer the execution of a - * function to the RTOS daemon task (the timer service task, hence this function - * is implemented in timers.c and is prefixed with 'Timer'). - * - * Ideally an interrupt service routine (ISR) is kept as short as possible, but - * sometimes an ISR either has a lot of processing to do, or needs to perform - * processing that is not deterministic. In these cases - * xTimerPendFunctionCallFromISR() can be used to defer processing of a function - * to the RTOS daemon task. - * - * A mechanism is provided that allows the interrupt to return directly to the - * task that will subsequently execute the pended callback function. This - * allows the callback function to execute contiguously in time with the - * interrupt - just as if the callback had executed in the interrupt itself. - * - * @param xFunctionToPend The function to execute from the timer service/ - * daemon task. The function must conform to the PendedFunction_t - * prototype. - * - * @param pvParameter1 The value of the callback function's first parameter. - * The parameter has a void * type to allow it to be used to pass any type. - * For example, unsigned longs can be cast to a void *, or the void * can be - * used to point to a structure. - * - * @param ulParameter2 The value of the callback function's second parameter. - * - * @param pxHigherPriorityTaskWoken As mentioned above, calling this function - * will result in a message being sent to the timer daemon task. If the - * priority of the timer daemon task (which is set using - * configTIMER_TASK_PRIORITY in FreeRTOSConfig.h) is higher than the priority of - * the currently running task (the task the interrupt interrupted) then - * *pxHigherPriorityTaskWoken will be set to pdTRUE within - * xTimerPendFunctionCallFromISR(), indicating that a context switch should be - * requested before the interrupt exits. For that reason - * *pxHigherPriorityTaskWoken must be initialised to pdFALSE. See the - * example code below. - * - * @return pdPASS is returned if the message was successfully sent to the - * timer daemon task, otherwise pdFALSE is returned. - * - * Example usage: - * @verbatim - * - * // The callback function that will execute in the context of the daemon task. - * // Note callback functions must all use this same prototype. - * void vProcessInterface( void *pvParameter1, uint32_t ulParameter2 ) - * { - * BaseType_t xInterfaceToService; - * - * // The interface that requires servicing is passed in the second - * // parameter. The first parameter is not used in this case. - * xInterfaceToService = ( BaseType_t ) ulParameter2; - * - * // ...Perform the processing here... - * } - * - * // An ISR that receives data packets from multiple interfaces - * void vAnISR( void ) - * { - * BaseType_t xInterfaceToService, xHigherPriorityTaskWoken; - * - * // Query the hardware to determine which interface needs processing. - * xInterfaceToService = prvCheckInterfaces(); - * - * // The actual processing is to be deferred to a task. Request the - * // vProcessInterface() callback function is executed, passing in the - * // number of the interface that needs processing. The interface to - * // service is passed in the second parameter. The first parameter is - * // not used in this case. - * xHigherPriorityTaskWoken = pdFALSE; - * xTimerPendFunctionCallFromISR( vProcessInterface, NULL, ( uint32_t ) xInterfaceToService, &xHigherPriorityTaskWoken ); - * - * // If xHigherPriorityTaskWoken is now set to pdTRUE then a context - * // switch should be requested. The macro used is port specific and will - * // be either portYIELD_FROM_ISR() or portEND_SWITCHING_ISR() - refer to - * // the documentation page for the port being used. - * portYIELD_FROM_ISR( xHigherPriorityTaskWoken ); - * - * } - * @endverbatim - */ -BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; - - /** - * BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, - * void *pvParameter1, - * uint32_t ulParameter2, - * TickType_t xTicksToWait ); - * - * - * Used to defer the execution of a function to the RTOS daemon task (the timer - * service task, hence this function is implemented in timers.c and is prefixed - * with 'Timer'). - * - * @param xFunctionToPend The function to execute from the timer service/ - * daemon task. The function must conform to the PendedFunction_t - * prototype. - * - * @param pvParameter1 The value of the callback function's first parameter. - * The parameter has a void * type to allow it to be used to pass any type. - * For example, unsigned longs can be cast to a void *, or the void * can be - * used to point to a structure. - * - * @param ulParameter2 The value of the callback function's second parameter. - * - * @param xTicksToWait Calling this function will result in a message being - * sent to the timer daemon task on a queue. xTicksToWait is the amount of - * time the calling task should remain in the Blocked state (so not using any - * processing time) for space to become available on the timer queue if the - * queue is found to be full. - * - * @return pdPASS is returned if the message was successfully sent to the - * timer daemon task, otherwise pdFALSE is returned. - * - */ -BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -/** - * const char * const pcTimerGetName( TimerHandle_t xTimer ); - * - * Returns the name that was assigned to a timer when the timer was created. - * - * @param xTimer The handle of the timer being queried. - * - * @return The name assigned to the timer specified by the xTimer parameter. - */ -const char * pcTimerGetName( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - -/** - * TickType_t xTimerGetPeriod( TimerHandle_t xTimer ); - * - * Returns the period of a timer. - * - * @param xTimer The handle of the timer being queried. - * - * @return The period of the timer in ticks. - */ -TickType_t xTimerGetPeriod( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; - -/** -* TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ); -* -* Returns the time in ticks at which the timer will expire. If this is less -* than the current tick count then the expiry time has overflowed from the -* current time. -* -* @param xTimer The handle of the timer being queried. -* -* @return If the timer is running then the time in ticks at which the timer -* will next expire is returned. If the timer is not running then the return -* value is undefined. -*/ -TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; - -/* - * Functions beyond this part are not part of the public API and are intended - * for use by the kernel only. - */ -BaseType_t xTimerCreateTimerTask( void ) PRIVILEGED_FUNCTION; -BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -#ifdef __cplusplus -} -#endif -#endif /* TIMERS_H */ - - - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/list.c b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/list.c deleted file mode 100644 index 5e207c1..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/list.c +++ /dev/null @@ -1,240 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - - -#include -#include "FreeRTOS.h" -#include "list.h" - -/*----------------------------------------------------------- - * PUBLIC LIST API documented in list.h - *----------------------------------------------------------*/ - -void vListInitialise( List_t * const pxList ) -{ - /* The list structure contains a list item which is used to mark the - end of the list. To initialise the list the list end is inserted - as the only list entry. */ - pxList->pxIndex = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */ - - /* The list end value is the highest possible value in the list to - ensure it remains at the end of the list. */ - pxList->xListEnd.xItemValue = portMAX_DELAY; - - /* The list end next and previous pointers point to itself so we know - when the list is empty. */ - pxList->xListEnd.pxNext = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */ - pxList->xListEnd.pxPrevious = ( ListItem_t * ) &( pxList->xListEnd );/*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */ - - pxList->uxNumberOfItems = ( UBaseType_t ) 0U; - - /* Write known values into the list if - configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ - listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ); - listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ); -} -/*-----------------------------------------------------------*/ - -void vListInitialiseItem( ListItem_t * const pxItem ) -{ - /* Make sure the list item is not recorded as being on a list. */ - pxItem->pvContainer = NULL; - - /* Write known values into the list item if - configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ - listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ); - listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ); -} -/*-----------------------------------------------------------*/ - -void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem ) -{ -ListItem_t * const pxIndex = pxList->pxIndex; - - /* Only effective when configASSERT() is also defined, these tests may catch - the list data structures being overwritten in memory. They will not catch - data errors caused by incorrect configuration or use of FreeRTOS. */ - listTEST_LIST_INTEGRITY( pxList ); - listTEST_LIST_ITEM_INTEGRITY( pxNewListItem ); - - /* Insert a new list item into pxList, but rather than sort the list, - makes the new list item the last item to be removed by a call to - listGET_OWNER_OF_NEXT_ENTRY(). */ - pxNewListItem->pxNext = pxIndex; - pxNewListItem->pxPrevious = pxIndex->pxPrevious; - - /* Only used during decision coverage testing. */ - mtCOVERAGE_TEST_DELAY(); - - pxIndex->pxPrevious->pxNext = pxNewListItem; - pxIndex->pxPrevious = pxNewListItem; - - /* Remember which list the item is in. */ - pxNewListItem->pvContainer = ( void * ) pxList; - - ( pxList->uxNumberOfItems )++; -} -/*-----------------------------------------------------------*/ - -void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem ) -{ -ListItem_t *pxIterator; -const TickType_t xValueOfInsertion = pxNewListItem->xItemValue; - - /* Only effective when configASSERT() is also defined, these tests may catch - the list data structures being overwritten in memory. They will not catch - data errors caused by incorrect configuration or use of FreeRTOS. */ - listTEST_LIST_INTEGRITY( pxList ); - listTEST_LIST_ITEM_INTEGRITY( pxNewListItem ); - - /* Insert the new list item into the list, sorted in xItemValue order. - - If the list already contains a list item with the same item value then the - new list item should be placed after it. This ensures that TCB's which are - stored in ready lists (all of which have the same xItemValue value) get a - share of the CPU. However, if the xItemValue is the same as the back marker - the iteration loop below will not end. Therefore the value is checked - first, and the algorithm slightly modified if necessary. */ - if( xValueOfInsertion == portMAX_DELAY ) - { - pxIterator = pxList->xListEnd.pxPrevious; - } - else - { - /* *** NOTE *********************************************************** - If you find your application is crashing here then likely causes are - listed below. In addition see http://www.freertos.org/FAQHelp.html for - more tips, and ensure configASSERT() is defined! - http://www.freertos.org/a00110.html#configASSERT - - 1) Stack overflow - - see http://www.freertos.org/Stacks-and-stack-overflow-checking.html - 2) Incorrect interrupt priority assignment, especially on Cortex-M - parts where numerically high priority values denote low actual - interrupt priorities, which can seem counter intuitive. See - http://www.freertos.org/RTOS-Cortex-M3-M4.html and the definition - of configMAX_SYSCALL_INTERRUPT_PRIORITY on - http://www.freertos.org/a00110.html - 3) Calling an API function from within a critical section or when - the scheduler is suspended, or calling an API function that does - not end in "FromISR" from an interrupt. - 4) Using a queue or semaphore before it has been initialised or - before the scheduler has been started (are interrupts firing - before vTaskStartScheduler() has been called?). - **********************************************************************/ - - for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext ) /*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */ - { - /* There is nothing to do here, just iterating to the wanted - insertion position. */ - } - } - - pxNewListItem->pxNext = pxIterator->pxNext; - pxNewListItem->pxNext->pxPrevious = pxNewListItem; - pxNewListItem->pxPrevious = pxIterator; - pxIterator->pxNext = pxNewListItem; - - /* Remember which list the item is in. This allows fast removal of the - item later. */ - pxNewListItem->pvContainer = ( void * ) pxList; - - ( pxList->uxNumberOfItems )++; -} -/*-----------------------------------------------------------*/ - -UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) -{ -/* The list item knows which list it is in. Obtain the list from the list -item. */ -List_t * const pxList = ( List_t * ) pxItemToRemove->pvContainer; - - pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious; - pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext; - - /* Only used during decision coverage testing. */ - mtCOVERAGE_TEST_DELAY(); - - /* Make sure the index is left pointing to a valid item. */ - if( pxList->pxIndex == pxItemToRemove ) - { - pxList->pxIndex = pxItemToRemove->pxPrevious; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - pxItemToRemove->pvContainer = NULL; - ( pxList->uxNumberOfItems )--; - - return pxList->uxNumberOfItems; -} -/*-----------------------------------------------------------*/ - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/Common/mpu_wrappers.c b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/Common/mpu_wrappers.c deleted file mode 100644 index 16c0863..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/Common/mpu_wrappers.c +++ /dev/null @@ -1,1140 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -/* - * Implementation of the wrapper functions used to raise the processor privilege - * before calling a standard FreeRTOS API function. - */ - -/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining -all the API functions to use the MPU wrappers. That should only be done when -task.h is included from an application file. */ -#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE - -/* Scheduler includes. */ -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" -#include "timers.h" -#include "event_groups.h" -#include "mpu_prototypes.h" - -#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE - -/* - * Checks to see if being called from the context of an unprivileged task, and - * if so raises the privilege level and returns false - otherwise does nothing - * other than return true. - */ -extern BaseType_t xPortRaisePrivilege( void ); - -/*-----------------------------------------------------------*/ - -BaseType_t MPU_xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) -{ -BaseType_t xReturn; -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskCreateRestricted( pxTaskDefinition, pxCreatedTask ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; -} -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - BaseType_t MPU_xTaskCreate( TaskFunction_t pvTaskCode, const char * const pcName, uint16_t usStackDepth, void *pvParameters, UBaseType_t uxPriority, TaskHandle_t *pxCreatedTask ) - { - BaseType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskCreate( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif /* configSUPPORT_DYNAMIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - TaskHandle_t MPU_xTaskCreateStatic( TaskFunction_t pxTaskCode, const char * const pcName, const uint32_t ulStackDepth, void * const pvParameters, UBaseType_t uxPriority, StackType_t * const puxStackBuffer, StaticTask_t * const pxTaskBuffer ) - { - TaskHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskCreateStatic( pxTaskCode, pcName, ulStackDepth, pvParameters, uxPriority, puxStackBuffer, pxTaskBuffer ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif /* configSUPPORT_STATIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -void MPU_vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const xRegions ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTaskAllocateMPURegions( xTask, xRegions ); - vPortResetPrivilege( xRunningPrivileged ); -} -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskDelete == 1 ) - void MPU_vTaskDelete( TaskHandle_t pxTaskToDelete ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTaskDelete( pxTaskToDelete ); - vPortResetPrivilege( xRunningPrivileged ); - } -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskDelayUntil == 1 ) - void MPU_vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, TickType_t xTimeIncrement ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTaskDelayUntil( pxPreviousWakeTime, xTimeIncrement ); - vPortResetPrivilege( xRunningPrivileged ); - } -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_xTaskAbortDelay == 1 ) - BaseType_t MPU_xTaskAbortDelay( TaskHandle_t xTask ) - { - BaseType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskAbortDelay( xTask ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskDelay == 1 ) - void MPU_vTaskDelay( TickType_t xTicksToDelay ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTaskDelay( xTicksToDelay ); - vPortResetPrivilege( xRunningPrivileged ); - } -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_uxTaskPriorityGet == 1 ) - UBaseType_t MPU_uxTaskPriorityGet( TaskHandle_t pxTask ) - { - UBaseType_t uxReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - uxReturn = uxTaskPriorityGet( pxTask ); - vPortResetPrivilege( xRunningPrivileged ); - return uxReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskPrioritySet == 1 ) - void MPU_vTaskPrioritySet( TaskHandle_t pxTask, UBaseType_t uxNewPriority ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTaskPrioritySet( pxTask, uxNewPriority ); - vPortResetPrivilege( xRunningPrivileged ); - } -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_eTaskGetState == 1 ) - eTaskState MPU_eTaskGetState( TaskHandle_t pxTask ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - eTaskState eReturn; - - eReturn = eTaskGetState( pxTask ); - vPortResetPrivilege( xRunningPrivileged ); - return eReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configUSE_TRACE_FACILITY == 1 ) - void MPU_vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTaskGetInfo( xTask, pxTaskStatus, xGetFreeStackSpace, eState ); - vPortResetPrivilege( xRunningPrivileged ); - } -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) - TaskHandle_t MPU_xTaskGetIdleTaskHandle( void ) - { - TaskHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskGetIdleTaskHandle(); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskSuspend == 1 ) - void MPU_vTaskSuspend( TaskHandle_t pxTaskToSuspend ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTaskSuspend( pxTaskToSuspend ); - vPortResetPrivilege( xRunningPrivileged ); - } -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskSuspend == 1 ) - void MPU_vTaskResume( TaskHandle_t pxTaskToResume ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTaskResume( pxTaskToResume ); - vPortResetPrivilege( xRunningPrivileged ); - } -#endif -/*-----------------------------------------------------------*/ - -void MPU_vTaskSuspendAll( void ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTaskSuspendAll(); - vPortResetPrivilege( xRunningPrivileged ); -} -/*-----------------------------------------------------------*/ - -BaseType_t MPU_xTaskResumeAll( void ) -{ -BaseType_t xReturn; -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskResumeAll(); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; -} -/*-----------------------------------------------------------*/ - -TickType_t MPU_xTaskGetTickCount( void ) -{ -TickType_t xReturn; -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskGetTickCount(); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; -} -/*-----------------------------------------------------------*/ - -UBaseType_t MPU_uxTaskGetNumberOfTasks( void ) -{ -UBaseType_t uxReturn; -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - uxReturn = uxTaskGetNumberOfTasks(); - vPortResetPrivilege( xRunningPrivileged ); - return uxReturn; -} -/*-----------------------------------------------------------*/ - -char * MPU_pcTaskGetName( TaskHandle_t xTaskToQuery ) -{ -char *pcReturn; -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - pcReturn = pcTaskGetName( xTaskToQuery ); - vPortResetPrivilege( xRunningPrivileged ); - return pcReturn; -} -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_xTaskGetHandle == 1 ) - TaskHandle_t MPU_xTaskGetHandle( const char *pcNameToQuery ) - { - TaskHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskGetHandle( pcNameToQuery ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) - void MPU_vTaskList( char *pcWriteBuffer ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTaskList( pcWriteBuffer ); - vPortResetPrivilege( xRunningPrivileged ); - } -#endif -/*-----------------------------------------------------------*/ - -#if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) - void MPU_vTaskGetRunTimeStats( char *pcWriteBuffer ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTaskGetRunTimeStats( pcWriteBuffer ); - vPortResetPrivilege( xRunningPrivileged ); - } -#endif -/*-----------------------------------------------------------*/ - -#if ( configUSE_APPLICATION_TASK_TAG == 1 ) - void MPU_vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxTagValue ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTaskSetApplicationTaskTag( xTask, pxTagValue ); - vPortResetPrivilege( xRunningPrivileged ); - } -#endif -/*-----------------------------------------------------------*/ - -#if ( configUSE_APPLICATION_TASK_TAG == 1 ) - TaskHookFunction_t MPU_xTaskGetApplicationTaskTag( TaskHandle_t xTask ) - { - TaskHookFunction_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskGetApplicationTaskTag( xTask ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( configNUM_THREAD_LOCAL_STORAGE_POINTERS != 0 ) - void MPU_vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTaskSetThreadLocalStoragePointer( xTaskToSet, xIndex, pvValue ); - vPortResetPrivilege( xRunningPrivileged ); - } -#endif -/*-----------------------------------------------------------*/ - -#if ( configNUM_THREAD_LOCAL_STORAGE_POINTERS != 0 ) - void *MPU_pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseType_t xIndex ) - { - void *pvReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - pvReturn = pvTaskGetThreadLocalStoragePointer( xTaskToQuery, xIndex ); - vPortResetPrivilege( xRunningPrivileged ); - return pvReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( configUSE_APPLICATION_TASK_TAG == 1 ) - BaseType_t MPU_xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter ) - { - BaseType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskCallApplicationTaskHook( xTask, pvParameter ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t MPU_uxTaskGetSystemState( TaskStatus_t *pxTaskStatusArray, UBaseType_t uxArraySize, uint32_t *pulTotalRunTime ) - { - UBaseType_t uxReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - uxReturn = uxTaskGetSystemState( pxTaskStatusArray, uxArraySize, pulTotalRunTime ); - vPortResetPrivilege( xRunningPrivileged ); - return uxReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) - UBaseType_t MPU_uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) - { - UBaseType_t uxReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - uxReturn = uxTaskGetStackHighWaterMark( xTask ); - vPortResetPrivilege( xRunningPrivileged ); - return uxReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_xTaskGetCurrentTaskHandle == 1 ) - TaskHandle_t MPU_xTaskGetCurrentTaskHandle( void ) - { - TaskHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskGetCurrentTaskHandle(); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_xTaskGetSchedulerState == 1 ) - BaseType_t MPU_xTaskGetSchedulerState( void ) - { - BaseType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskGetSchedulerState(); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -void MPU_vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTaskSetTimeOutState( pxTimeOut ); - vPortResetPrivilege( xRunningPrivileged ); -} -/*-----------------------------------------------------------*/ - -BaseType_t MPU_xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait ) -{ -BaseType_t xReturn; -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskCheckForTimeOut( pxTimeOut, pxTicksToWait ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; -} -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - BaseType_t MPU_xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue ) - { - BaseType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskGenericNotify( xTaskToNotify, ulValue, eAction, pulPreviousNotificationValue ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - BaseType_t MPU_xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ) - { - BaseType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskNotifyWait( ulBitsToClearOnEntry, ulBitsToClearOnExit, pulNotificationValue, xTicksToWait ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - uint32_t MPU_ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ) - { - uint32_t ulReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - ulReturn = ulTaskNotifyTake( xClearCountOnExit, xTicksToWait ); - vPortResetPrivilege( xRunningPrivileged ); - return ulReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - BaseType_t MPU_xTaskNotifyStateClear( TaskHandle_t xTask ) - { - BaseType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTaskNotifyStateClear( xTask ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - QueueHandle_t MPU_xQueueGenericCreate( UBaseType_t uxQueueLength, UBaseType_t uxItemSize, uint8_t ucQueueType ) - { - QueueHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xQueueGenericCreate( uxQueueLength, uxItemSize, ucQueueType ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - QueueHandle_t MPU_xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ) - { - QueueHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xQueueGenericCreateStatic( uxQueueLength, uxItemSize, pucQueueStorage, pxStaticQueue, ucQueueType ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -BaseType_t MPU_xQueueGenericReset( QueueHandle_t pxQueue, BaseType_t xNewQueue ) -{ -BaseType_t xReturn; -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xQueueGenericReset( pxQueue, xNewQueue ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; -} -/*-----------------------------------------------------------*/ - -BaseType_t MPU_xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, BaseType_t xCopyPosition ) -{ -BaseType_t xReturn; -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xQueueGenericSend( xQueue, pvItemToQueue, xTicksToWait, xCopyPosition ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; -} -/*-----------------------------------------------------------*/ - -UBaseType_t MPU_uxQueueMessagesWaiting( const QueueHandle_t pxQueue ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); -UBaseType_t uxReturn; - - uxReturn = uxQueueMessagesWaiting( pxQueue ); - vPortResetPrivilege( xRunningPrivileged ); - return uxReturn; -} -/*-----------------------------------------------------------*/ - -UBaseType_t MPU_uxQueueSpacesAvailable( const QueueHandle_t xQueue ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); -UBaseType_t uxReturn; - - uxReturn = uxQueueSpacesAvailable( xQueue ); - vPortResetPrivilege( xRunningPrivileged ); - return uxReturn; -} -/*-----------------------------------------------------------*/ - -BaseType_t MPU_xQueueGenericReceive( QueueHandle_t pxQueue, void * const pvBuffer, TickType_t xTicksToWait, BaseType_t xJustPeeking ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); -BaseType_t xReturn; - - xReturn = xQueueGenericReceive( pxQueue, pvBuffer, xTicksToWait, xJustPeeking ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; -} -/*-----------------------------------------------------------*/ - -BaseType_t MPU_xQueuePeekFromISR( QueueHandle_t pxQueue, void * const pvBuffer ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); -BaseType_t xReturn; - - xReturn = xQueuePeekFromISR( pxQueue, pvBuffer ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; -} -/*-----------------------------------------------------------*/ - -void* MPU_xQueueGetMutexHolder( QueueHandle_t xSemaphore ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); -void * xReturn; - - xReturn = ( void * ) xQueueGetMutexHolder( xSemaphore ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; -} -/*-----------------------------------------------------------*/ - -#if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - QueueHandle_t MPU_xQueueCreateMutex( const uint8_t ucQueueType ) - { - QueueHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xQueueCreateMutex( ucQueueType ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - QueueHandle_t MPU_xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) - { - QueueHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xQueueCreateMutexStatic( ucQueueType, pxStaticQueue ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - QueueHandle_t MPU_xQueueCreateCountingSemaphore( UBaseType_t uxCountValue, UBaseType_t uxInitialCount ) - { - QueueHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xQueueCreateCountingSemaphore( uxCountValue, uxInitialCount ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - - QueueHandle_t MPU_xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) - { - QueueHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xQueueCreateCountingSemaphoreStatic( uxMaxCount, uxInitialCount, pxStaticQueue ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( configUSE_MUTEXES == 1 ) - BaseType_t MPU_xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xBlockTime ) - { - BaseType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xQueueTakeMutexRecursive( xMutex, xBlockTime ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( configUSE_MUTEXES == 1 ) - BaseType_t MPU_xQueueGiveMutexRecursive( QueueHandle_t xMutex ) - { - BaseType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xQueueGiveMutexRecursive( xMutex ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( configUSE_QUEUE_SETS == 1 ) - QueueSetHandle_t MPU_xQueueCreateSet( UBaseType_t uxEventQueueLength ) - { - QueueSetHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xQueueCreateSet( uxEventQueueLength ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( configUSE_QUEUE_SETS == 1 ) - QueueSetMemberHandle_t MPU_xQueueSelectFromSet( QueueSetHandle_t xQueueSet, TickType_t xBlockTimeTicks ) - { - QueueSetMemberHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xQueueSelectFromSet( xQueueSet, xBlockTimeTicks ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( configUSE_QUEUE_SETS == 1 ) - BaseType_t MPU_xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) - { - BaseType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xQueueAddToSet( xQueueOrSemaphore, xQueueSet ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if ( configUSE_QUEUE_SETS == 1 ) - BaseType_t MPU_xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) - { - BaseType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xQueueRemoveFromSet( xQueueOrSemaphore, xQueueSet ); - vPortResetPrivilege( xRunningPrivileged ); - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if configQUEUE_REGISTRY_SIZE > 0 - void MPU_vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcName ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vQueueAddToRegistry( xQueue, pcName ); - - vPortResetPrivilege( xRunningPrivileged ); - } -#endif -/*-----------------------------------------------------------*/ - -#if configQUEUE_REGISTRY_SIZE > 0 - void MPU_vQueueUnregisterQueue( QueueHandle_t xQueue ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vQueueUnregisterQueue( xQueue ); - - vPortResetPrivilege( xRunningPrivileged ); - } -#endif -/*-----------------------------------------------------------*/ - -#if configQUEUE_REGISTRY_SIZE > 0 - const char *MPU_pcQueueGetName( QueueHandle_t xQueue ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - const char *pcReturn; - - pcReturn = pcQueueGetName( xQueue ); - - vPortResetPrivilege( xRunningPrivileged ); - return pcReturn; - } -#endif -/*-----------------------------------------------------------*/ - -void MPU_vQueueDelete( QueueHandle_t xQueue ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vQueueDelete( xQueue ); - - vPortResetPrivilege( xRunningPrivileged ); -} -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - - void *MPU_pvPortMalloc( size_t xSize ) - { - void *pvReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - pvReturn = pvPortMalloc( xSize ); - - vPortResetPrivilege( xRunningPrivileged ); - - return pvReturn; - } - -#endif /* configSUPPORT_DYNAMIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - - void MPU_vPortFree( void *pv ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vPortFree( pv ); - - vPortResetPrivilege( xRunningPrivileged ); - } - -#endif /* configSUPPORT_DYNAMIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -void MPU_vPortInitialiseBlocks( void ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vPortInitialiseBlocks(); - - vPortResetPrivilege( xRunningPrivileged ); -} -/*-----------------------------------------------------------*/ - -size_t MPU_xPortGetFreeHeapSize( void ) -{ -size_t xReturn; -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xPortGetFreeHeapSize(); - - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -#if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configUSE_TIMERS == 1 ) ) - TimerHandle_t MPU_xTimerCreate( const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void * const pvTimerID, TimerCallbackFunction_t pxCallbackFunction ) - { - TimerHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTimerCreate( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction ); - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_TIMERS == 1 ) ) - TimerHandle_t MPU_xTimerCreateStatic( const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void * const pvTimerID, TimerCallbackFunction_t pxCallbackFunction, StaticTimer_t *pxTimerBuffer ) - { - TimerHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTimerCreateStatic( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxTimerBuffer ); - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configUSE_TIMERS == 1 ) - void *MPU_pvTimerGetTimerID( const TimerHandle_t xTimer ) - { - void * pvReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - pvReturn = pvTimerGetTimerID( xTimer ); - vPortResetPrivilege( xRunningPrivileged ); - - return pvReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configUSE_TIMERS == 1 ) - void MPU_vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ) - { - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vTimerSetTimerID( xTimer, pvNewID ); - vPortResetPrivilege( xRunningPrivileged ); - } -#endif -/*-----------------------------------------------------------*/ - -#if( configUSE_TIMERS == 1 ) - BaseType_t MPU_xTimerIsTimerActive( TimerHandle_t xTimer ) - { - BaseType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTimerIsTimerActive( xTimer ); - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configUSE_TIMERS == 1 ) - TaskHandle_t MPU_xTimerGetTimerDaemonTaskHandle( void ) - { - TaskHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTimerGetTimerDaemonTaskHandle(); - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) ) - BaseType_t MPU_xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait ) - { - BaseType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTimerPendFunctionCall( xFunctionToPend, pvParameter1, ulParameter2, xTicksToWait ); - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configUSE_TIMERS == 1 ) - const char * MPU_pcTimerGetName( TimerHandle_t xTimer ) - { - const char * pcReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - pcReturn = pcTimerGetName( xTimer ); - vPortResetPrivilege( xRunningPrivileged ); - - return pcReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configUSE_TIMERS == 1 ) - TickType_t MPU_xTimerGetPeriod( TimerHandle_t xTimer ) - { - TickType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTimerGetPeriod( xTimer ); - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configUSE_TIMERS == 1 ) - TickType_t MPU_xTimerGetExpiryTime( TimerHandle_t xTimer ) - { - TickType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTimerGetExpiryTime( xTimer ); - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configUSE_TIMERS == 1 ) - BaseType_t MPU_xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait ) - { - BaseType_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xTimerGenericCommand( xTimer, xCommandID, xOptionalValue, pxHigherPriorityTaskWoken, xTicksToWait ); - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - EventGroupHandle_t MPU_xEventGroupCreate( void ) - { - EventGroupHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xEventGroupCreate(); - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - EventGroupHandle_t MPU_xEventGroupCreateStatic( StaticEventGroup_t *pxEventGroupBuffer ) - { - EventGroupHandle_t xReturn; - BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xEventGroupCreateStatic( pxEventGroupBuffer ); - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; - } -#endif -/*-----------------------------------------------------------*/ - -EventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait ) -{ -EventBits_t xReturn; -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xEventGroupWaitBits( xEventGroup, uxBitsToWaitFor, xClearOnExit, xWaitForAllBits, xTicksToWait ); - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -EventBits_t MPU_xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) -{ -EventBits_t xReturn; -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xEventGroupClearBits( xEventGroup, uxBitsToClear ); - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -EventBits_t MPU_xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ) -{ -EventBits_t xReturn; -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xEventGroupSetBits( xEventGroup, uxBitsToSet ); - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -EventBits_t MPU_xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait ) -{ -EventBits_t xReturn; -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - xReturn = xEventGroupSync( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTicksToWait ); - vPortResetPrivilege( xRunningPrivileged ); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -void MPU_vEventGroupDelete( EventGroupHandle_t xEventGroup ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - vEventGroupDelete( xEventGroup ); - vPortResetPrivilege( xRunningPrivileged ); -} -/*-----------------------------------------------------------*/ - - - - - -/* Functions that the application writer wants to execute in privileged mode -can be defined in application_defined_privileged_functions.h. The functions -must take the same format as those above whereby the privilege state on exit -equals the privilege state on entry. For example: - -void MPU_FunctionName( [parameters ] ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - FunctionName( [parameters ] ); - - vPortResetPrivilege( xRunningPrivileged ); -} -*/ - -#if configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS == 1 - #include "application_defined_privileged_functions.h" -#endif diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3/port.c b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3/port.c deleted file mode 100644 index 1a20bf7..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3/port.c +++ /dev/null @@ -1,716 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -/*----------------------------------------------------------- - * Implementation of functions defined in portable.h for the ARM CM3 port. - *----------------------------------------------------------*/ - -/* Scheduler includes. */ -#include "FreeRTOS.h" -#include "task.h" - -/* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is -defined. The value should also ensure backward compatibility. -FreeRTOS.org versions prior to V4.4.0 did not include this definition. */ -#ifndef configKERNEL_INTERRUPT_PRIORITY - #define configKERNEL_INTERRUPT_PRIORITY 255 -#endif - -#ifndef configSYSTICK_CLOCK_HZ - #define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ - /* Ensure the SysTick is clocked at the same frequency as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 1UL << 2UL ) -#else - /* The way the SysTick is clocked is not modified in case it is not the same - as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 0 ) -#endif - -/* Constants required to manipulate the core. Registers first... */ -#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000e010 ) ) -#define portNVIC_SYSTICK_LOAD_REG ( * ( ( volatile uint32_t * ) 0xe000e014 ) ) -#define portNVIC_SYSTICK_CURRENT_VALUE_REG ( * ( ( volatile uint32_t * ) 0xe000e018 ) ) -#define portNVIC_SYSPRI2_REG ( * ( ( volatile uint32_t * ) 0xe000ed20 ) ) -/* ...then bits in the registers. */ -#define portNVIC_SYSTICK_INT_BIT ( 1UL << 1UL ) -#define portNVIC_SYSTICK_ENABLE_BIT ( 1UL << 0UL ) -#define portNVIC_SYSTICK_COUNT_FLAG_BIT ( 1UL << 16UL ) -#define portNVIC_PENDSVCLEAR_BIT ( 1UL << 27UL ) -#define portNVIC_PEND_SYSTICK_CLEAR_BIT ( 1UL << 25UL ) - -#define portNVIC_PENDSV_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL ) -#define portNVIC_SYSTICK_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL ) - -/* Constants required to check the validity of an interrupt priority. */ -#define portFIRST_USER_INTERRUPT_NUMBER ( 16 ) -#define portNVIC_IP_REGISTERS_OFFSET_16 ( 0xE000E3F0 ) -#define portAIRCR_REG ( * ( ( volatile uint32_t * ) 0xE000ED0C ) ) -#define portMAX_8_BIT_VALUE ( ( uint8_t ) 0xff ) -#define portTOP_BIT_OF_BYTE ( ( uint8_t ) 0x80 ) -#define portMAX_PRIGROUP_BITS ( ( uint8_t ) 7 ) -#define portPRIORITY_GROUP_MASK ( 0x07UL << 8UL ) -#define portPRIGROUP_SHIFT ( 8UL ) - -/* Masks off all bits but the VECTACTIVE bits in the ICSR register. */ -#define portVECTACTIVE_MASK ( 0xFFUL ) - -/* Constants required to set up the initial stack. */ -#define portINITIAL_XPSR ( 0x01000000UL ) - -/* The systick is a 24-bit counter. */ -#define portMAX_24_BIT_NUMBER ( 0xffffffUL ) - -/* A fiddle factor to estimate the number of SysTick counts that would have -occurred while the SysTick counter is stopped during tickless idle -calculations. */ -#define portMISSED_COUNTS_FACTOR ( 45UL ) - -/* For strict compliance with the Cortex-M spec the task start address should -have bit-0 clear, as it is loaded into the PC on exit from an ISR. */ -#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL ) - -/* Let the user override the pre-loading of the initial LR with the address of -prvTaskExitError() in case it messes up unwinding of the stack in the -debugger. */ -#ifdef configTASK_RETURN_ADDRESS - #define portTASK_RETURN_ADDRESS configTASK_RETURN_ADDRESS -#else - #define portTASK_RETURN_ADDRESS prvTaskExitError -#endif - -/* Each task maintains its own interrupt status in the critical nesting -variable. */ -static UBaseType_t uxCriticalNesting = 0xaaaaaaaa; - -/* - * Setup the timer to generate the tick interrupts. The implementation in this - * file is weak to allow application writers to change the timer used to - * generate the tick interrupt. - */ -void vPortSetupTimerInterrupt( void ); - -/* - * Exception handlers. - */ -void xPortPendSVHandler( void ) __attribute__ (( naked )); -void xPortSysTickHandler( void ); -void vPortSVCHandler( void ) __attribute__ (( naked )); - -/* - * Start first task is a separate function so it can be tested in isolation. - */ -static void prvPortStartFirstTask( void ) __attribute__ (( naked )); - -/* - * Used to catch tasks that attempt to return from their implementing function. - */ -static void prvTaskExitError( void ); - -/*-----------------------------------------------------------*/ - -/* - * The number of SysTick increments that make up one tick period. - */ -#if configUSE_TICKLESS_IDLE == 1 - static uint32_t ulTimerCountsForOneTick = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * The maximum number of tick periods that can be suppressed is limited by the - * 24 bit resolution of the SysTick timer. - */ -#if configUSE_TICKLESS_IDLE == 1 - static uint32_t xMaximumPossibleSuppressedTicks = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Compensate for the CPU cycles that pass while the SysTick is stopped (low - * power functionality only. - */ -#if configUSE_TICKLESS_IDLE == 1 - static uint32_t ulStoppedTimerCompensation = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure - * FreeRTOS API functions are not called from interrupts that have been assigned - * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY. - */ -#if ( configASSERT_DEFINED == 1 ) - static uint8_t ucMaxSysCallPriority = 0; - static uint32_t ulMaxPRIGROUPValue = 0; - static const volatile uint8_t * const pcInterruptPriorityRegisters = ( const volatile uint8_t * const ) portNVIC_IP_REGISTERS_OFFSET_16; -#endif /* configASSERT_DEFINED */ - -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) -{ - /* Simulate the stack frame as it would be created by a context switch - interrupt. */ - pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */ - *pxTopOfStack = portINITIAL_XPSR; /* xPSR */ - pxTopOfStack--; - *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */ - pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */ - pxTopOfStack -= 5; /* R12, R3, R2 and R1. */ - *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */ - pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */ - - return pxTopOfStack; -} -/*-----------------------------------------------------------*/ - -static void prvTaskExitError( void ) -{ - /* A function that implements a task must not exit or attempt to return to - its caller as there is nothing to return to. If a task wants to exit it - should instead call vTaskDelete( NULL ). - - Artificially force an assert() to be triggered if configASSERT() is - defined, then stop here so application writers can catch the error. */ - configASSERT( uxCriticalNesting == ~0UL ); - portDISABLE_INTERRUPTS(); - for( ;; ); -} -/*-----------------------------------------------------------*/ - -void vPortSVCHandler( void ) -{ - __asm volatile ( - " ldr r3, pxCurrentTCBConst2 \n" /* Restore the context. */ - " ldr r1, [r3] \n" /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */ - " ldr r0, [r1] \n" /* The first item in pxCurrentTCB is the task top of stack. */ - " ldmia r0!, {r4-r11} \n" /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */ - " msr psp, r0 \n" /* Restore the task stack pointer. */ - " isb \n" - " mov r0, #0 \n" - " msr basepri, r0 \n" - " orr r14, #0xd \n" - " bx r14 \n" - " \n" - " .align 4 \n" - "pxCurrentTCBConst2: .word pxCurrentTCB \n" - ); -} -/*-----------------------------------------------------------*/ - -static void prvPortStartFirstTask( void ) -{ - __asm volatile( - " ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate the stack. */ - " ldr r0, [r0] \n" - " ldr r0, [r0] \n" - " msr msp, r0 \n" /* Set the msp back to the start of the stack. */ - " cpsie i \n" /* Globally enable interrupts. */ - " cpsie f \n" - " dsb \n" - " isb \n" - " svc 0 \n" /* System call to start first task. */ - " nop \n" - ); -} -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -BaseType_t xPortStartScheduler( void ) -{ - /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0. - See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */ - configASSERT( configMAX_SYSCALL_INTERRUPT_PRIORITY ); - - #if( configASSERT_DEFINED == 1 ) - { - volatile uint32_t ulOriginalPriority; - volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER ); - volatile uint8_t ucMaxPriorityValue; - - /* Determine the maximum priority from which ISR safe FreeRTOS API - functions can be called. ISR safe functions are those that end in - "FromISR". FreeRTOS maintains separate thread and ISR API functions to - ensure interrupt entry is as fast and simple as possible. - - Save the interrupt priority value that is about to be clobbered. */ - ulOriginalPriority = *pucFirstUserPriorityRegister; - - /* Determine the number of priority bits available. First write to all - possible bits. */ - *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE; - - /* Read the value back to see how many bits stuck. */ - ucMaxPriorityValue = *pucFirstUserPriorityRegister; - - /* Use the same mask on the maximum system call priority. */ - ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue; - - /* Calculate the maximum acceptable priority group value for the number - of bits read back. */ - ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS; - while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE ) - { - ulMaxPRIGROUPValue--; - ucMaxPriorityValue <<= ( uint8_t ) 0x01; - } - - /* Shift the priority group value back to its position within the AIRCR - register. */ - ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT; - ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK; - - /* Restore the clobbered interrupt priority register to its original - value. */ - *pucFirstUserPriorityRegister = ulOriginalPriority; - } - #endif /* conifgASSERT_DEFINED */ - - /* Make PendSV and SysTick the lowest priority interrupts. */ - portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI; - portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI; - - /* Start the timer that generates the tick ISR. Interrupts are disabled - here already. */ - vPortSetupTimerInterrupt(); - - /* Initialise the critical nesting count ready for the first task. */ - uxCriticalNesting = 0; - - /* Start the first task. */ - prvPortStartFirstTask(); - - /* Should never get here as the tasks will now be executing! Call the task - exit error function to prevent compiler warnings about a static function - not being called in the case that the application writer overrides this - functionality by defining configTASK_RETURN_ADDRESS. */ - prvTaskExitError(); - - /* Should not get here! */ - return 0; -} -/*-----------------------------------------------------------*/ - -void vPortEndScheduler( void ) -{ - /* Not implemented in ports where there is nothing to return to. - Artificially force an assert. */ - configASSERT( uxCriticalNesting == 1000UL ); -} -/*-----------------------------------------------------------*/ - -void vPortEnterCritical( void ) -{ - portDISABLE_INTERRUPTS(); - uxCriticalNesting++; - - /* This is not the interrupt safe version of the enter critical function so - assert() if it is being called from an interrupt context. Only API - functions that end in "FromISR" can be used in an interrupt. Only assert if - the critical nesting count is 1 to protect against recursive calls if the - assert function also uses a critical section. */ - if( uxCriticalNesting == 1 ) - { - configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 ); - } -} -/*-----------------------------------------------------------*/ - -void vPortExitCritical( void ) -{ - configASSERT( uxCriticalNesting ); - uxCriticalNesting--; - if( uxCriticalNesting == 0 ) - { - portENABLE_INTERRUPTS(); - } -} -/*-----------------------------------------------------------*/ - -void xPortPendSVHandler( void ) -{ - /* This is a naked function. */ - - __asm volatile - ( - " mrs r0, psp \n" - " isb \n" - " \n" - " ldr r3, pxCurrentTCBConst \n" /* Get the location of the current TCB. */ - " ldr r2, [r3] \n" - " \n" - " stmdb r0!, {r4-r11} \n" /* Save the remaining registers. */ - " str r0, [r2] \n" /* Save the new top of stack into the first member of the TCB. */ - " \n" - " stmdb sp!, {r3, r14} \n" - " mov r0, %0 \n" - " msr basepri, r0 \n" - " bl vTaskSwitchContext \n" - " mov r0, #0 \n" - " msr basepri, r0 \n" - " ldmia sp!, {r3, r14} \n" - " \n" /* Restore the context, including the critical nesting count. */ - " ldr r1, [r3] \n" - " ldr r0, [r1] \n" /* The first item in pxCurrentTCB is the task top of stack. */ - " ldmia r0!, {r4-r11} \n" /* Pop the registers. */ - " msr psp, r0 \n" - " isb \n" - " bx r14 \n" - " \n" - " .align 4 \n" - "pxCurrentTCBConst: .word pxCurrentTCB \n" - ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) - ); -} -/*-----------------------------------------------------------*/ - -void xPortSysTickHandler( void ) -{ - /* The SysTick runs at the lowest interrupt priority, so when this interrupt - executes all interrupts must be unmasked. There is therefore no need to - save and then restore the interrupt mask value as its value is already - known. */ - portDISABLE_INTERRUPTS(); - { - /* Increment the RTOS tick. */ - if( xTaskIncrementTick() != pdFALSE ) - { - /* A context switch is required. Context switching is performed in - the PendSV interrupt. Pend the PendSV interrupt. */ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; - } - } - portENABLE_INTERRUPTS(); -} -/*-----------------------------------------------------------*/ - -#if configUSE_TICKLESS_IDLE == 1 - - __attribute__((weak)) void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime ) - { - uint32_t ulReloadValue, ulCompleteTickPeriods, ulCompletedSysTickDecrements, ulSysTickCTRL; - TickType_t xModifiableIdleTime; - - /* Make sure the SysTick reload value does not overflow the counter. */ - if( xExpectedIdleTime > xMaximumPossibleSuppressedTicks ) - { - xExpectedIdleTime = xMaximumPossibleSuppressedTicks; - } - - /* Stop the SysTick momentarily. The time the SysTick is stopped for - is accounted for as best it can be, but using the tickless mode will - inevitably result in some tiny drift of the time maintained by the - kernel with respect to calendar time. */ - portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT; - - /* Calculate the reload value required to wait xExpectedIdleTime - tick periods. -1 is used because this code will execute part way - through one of the tick periods. */ - ulReloadValue = portNVIC_SYSTICK_CURRENT_VALUE_REG + ( ulTimerCountsForOneTick * ( xExpectedIdleTime - 1UL ) ); - if( ulReloadValue > ulStoppedTimerCompensation ) - { - ulReloadValue -= ulStoppedTimerCompensation; - } - - /* Enter a critical section but don't use the taskENTER_CRITICAL() - method as that will mask interrupts that should exit sleep mode. */ - __asm volatile( "cpsid i" ); - __asm volatile( "dsb" ); //-rt812 - __asm volatile( "isb" ); //-rt812 - - /* If a context switch is pending or a task is waiting for the scheduler - to be unsuspended then abandon the low power entry. */ - if( eTaskConfirmSleepModeStatus() == eAbortSleep ) - { - /* Restart from whatever is left in the count register to complete - this tick period. */ - portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Reset the reload register to the value required for normal tick - periods. */ - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - - /* Re-enable interrupts - see comments above the cpsid instruction() - above. */ - __asm volatile( "cpsie i" ); - } - else - { - /* Set the new reload value. */ - portNVIC_SYSTICK_LOAD_REG = ulReloadValue; - - /* Clear the SysTick count flag and set the count value back to - zero. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Sleep until something happens. configPRE_SLEEP_PROCESSING() can - set its parameter to 0 to indicate that its implementation contains - its own wait for interrupt or wait for event instruction, and so wfi - should not be executed again. However, the original expected idle - time variable must remain unmodified, so a copy is taken. */ - xModifiableIdleTime = xExpectedIdleTime; - configPRE_SLEEP_PROCESSING( xModifiableIdleTime ); - if( xModifiableIdleTime > 0 ) - { - __asm volatile( "dsb" ); - __asm volatile( "wfi" ); - __asm volatile( "isb" ); - } - configPOST_SLEEP_PROCESSING( xExpectedIdleTime ); - - /* Stop SysTick. Again, the time the SysTick is stopped for is - accounted for as best it can be, but using the tickless mode will - inevitably result in some tiny drift of the time maintained by the - kernel with respect to calendar time. */ - ulSysTickCTRL = portNVIC_SYSTICK_CTRL_REG; - portNVIC_SYSTICK_CTRL_REG = ( ulSysTickCTRL & ~portNVIC_SYSTICK_ENABLE_BIT ); - - /* Re-enable interrupts - see comments above the cpsid instruction() - above. */ - __asm volatile( "cpsie i" ); - - if( ( ulSysTickCTRL & portNVIC_SYSTICK_COUNT_FLAG_BIT ) != 0 ) - { - uint32_t ulCalculatedLoadValue; - - /* The tick interrupt has already executed, and the SysTick - count reloaded with ulReloadValue. Reset the - portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick - period. */ - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG ); - - /* Don't allow a tiny value, or values that have somehow - underflowed because the post sleep hook did something - that took too long. */ - if( ( ulCalculatedLoadValue < ulStoppedTimerCompensation ) || ( ulCalculatedLoadValue > ulTimerCountsForOneTick ) ) - { - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ); - } - - portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue; - - /* The tick interrupt handler will already have pended the tick - processing in the kernel. As the pending tick will be - processed as soon as this function exits, the tick value - maintained by the tick is stepped forward by one less than the - time spent waiting. */ - ulCompleteTickPeriods = xExpectedIdleTime - 1UL; - } - else - { - /* Something other than the tick interrupt ended the sleep. - Work out how long the sleep lasted rounded to complete tick - periods (not the ulReload value which accounted for part - ticks). */ - ulCompletedSysTickDecrements = ( xExpectedIdleTime * ulTimerCountsForOneTick ) - portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* How many complete tick periods passed while the processor - was waiting? */ - ulCompleteTickPeriods = ulCompletedSysTickDecrements / ulTimerCountsForOneTick; - - /* The reload value is set to whatever fraction of a single tick - period remains. */ - portNVIC_SYSTICK_LOAD_REG = ( ( ulCompleteTickPeriods + 1UL ) * ulTimerCountsForOneTick ) - ulCompletedSysTickDecrements; - } - - /* Restart SysTick so it runs from portNVIC_SYSTICK_LOAD_REG - again, then set portNVIC_SYSTICK_LOAD_REG back to its standard - value. The critical section is used to ensure the tick interrupt - can only execute once in the case that the reload register is near - zero. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - portENTER_CRITICAL(); - { - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - vTaskStepTick( ulCompleteTickPeriods ); - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - } - portEXIT_CRITICAL(); - } - } - -#endif /* #if configUSE_TICKLESS_IDLE */ -/*-----------------------------------------------------------*/ - -/* - * Setup the systick timer to generate the tick interrupts at the required - * frequency. - */ -__attribute__(( weak )) void vPortSetupTimerInterrupt( void ) -{ - /* Calculate the constants required to configure the tick interrupt. */ - #if configUSE_TICKLESS_IDLE == 1 - { - ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ); - xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick; - ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ ); - } - #endif /* configUSE_TICKLESS_IDLE */ - - /* Configure SysTick to interrupt at the requested rate. */ - portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; - portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT ); -} -/*-----------------------------------------------------------*/ - -#if( configASSERT_DEFINED == 1 ) - - void vPortValidateInterruptPriority( void ) - { - uint32_t ulCurrentInterrupt; - uint8_t ucCurrentPriority; - - /* Obtain the number of the currently executing interrupt. */ - __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) ); - - /* Is the interrupt number a user defined interrupt? */ - if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER ) - { - /* Look up the interrupt's priority. */ - ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ]; - - /* The following assertion will fail if a service routine (ISR) for - an interrupt that has been assigned a priority above - configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API - function. ISR safe FreeRTOS API functions must *only* be called - from interrupts that have been assigned a priority at or below - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Numerically low interrupt priority numbers represent logically high - interrupt priorities, therefore the priority of the interrupt must - be set to a value equal to or numerically *higher* than - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Interrupts that use the FreeRTOS API must not be left at their - default priority of zero as that is the highest possible priority, - which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY, - and therefore also guaranteed to be invalid. - - FreeRTOS maintains separate thread and ISR API functions to ensure - interrupt entry is as fast and simple as possible. - - The following links provide detailed information: - http://www.freertos.org/RTOS-Cortex-M3-M4.html - http://www.freertos.org/FAQHelp.html */ - configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); - } - - /* Priority grouping: The interrupt controller (NVIC) allows the bits - that define each interrupt's priority to be split between bits that - define the interrupt's pre-emption priority bits and bits that define - the interrupt's sub-priority. For simplicity all bits must be defined - to be pre-emption priority bits. The following assertion will fail if - this is not the case (if some bits represent a sub-priority). - - If the application only uses CMSIS libraries for interrupt - configuration then the correct setting can be achieved on all Cortex-M - devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the - scheduler. Note however that some vendor specific peripheral libraries - assume a non-zero priority group setting, in which cases using a value - of zero will result in unpredicable behaviour. */ - configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue ); - } - -#endif /* configASSERT_DEFINED */ -/*-----------------------------------------------------------*/ -#if configUSE_IDLE_HOOK -extern void WDGRefresh(void); -void vApplicationIdleHook( void ) -{ - /* Use the idle task to place the CPU into a low power mode. Greater power - saving could be achieved by not including any demo tasks that never block. */ -#ifdef CONFIG_WDG_ON_IDLE - WDGRefresh(); -#endif -} -#endif - -#if configCHECK_FOR_STACK_OVERFLOW -#include "diag.h" -void vApplicationStackOverflowHook( xTaskHandle pxTask, signed char *pcTaskName ) -{ - /* This function will be called if a task overflows its stack, if - configCHECK_FOR_STACK_OVERFLOW != 0. It might be that the function - parameters have been corrupted, depending on the severity of the stack - overflow. When this is the case pxCurrentTCB can be inspected in the - debugger to find the offending task. */ - DiagPrintf("\nSTACK OVERFLOW - TaskName(%s)\n", pcTaskName); - for( ;; ); -} -#endif -/*-----------------------------------------------------------*/ diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3/portmacro.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3/portmacro.h deleted file mode 100644 index 322f2b1..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3/portmacro.h +++ /dev/null @@ -1,297 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - - -#ifndef PORTMACRO_H -#define PORTMACRO_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*----------------------------------------------------------- - * Port specific definitions. - * - * The settings in this file configure FreeRTOS correctly for the - * given hardware and compiler. - * - * These settings should not be altered. - *----------------------------------------------------------- - */ - -/* Type definitions. */ -#define portCHAR char -#define portFLOAT float -#define portDOUBLE double -#define portLONG long -#define portSHORT short -#define portSTACK_TYPE uint32_t -#define portBASE_TYPE long - -typedef portSTACK_TYPE StackType_t; -typedef long BaseType_t; -typedef unsigned long UBaseType_t; - -#if( configUSE_16_BIT_TICKS == 1 ) - typedef uint16_t TickType_t; - #define portMAX_DELAY ( TickType_t ) 0xffff -#else -typedef uint32_t TickType_t; -#define portMAX_DELAY ( TickType_t ) 0xffffffffUL - -/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do -not need to be guarded with a critical section. */ -#define portTICK_TYPE_IS_ATOMIC 1 -#endif -/*-----------------------------------------------------------*/ - -/* Architecture specifics. */ -#define portSTACK_GROWTH ( -1 ) -#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) -#define portBYTE_ALIGNMENT 8 -/*-----------------------------------------------------------*/ - -/* Scheduler utilities. */ -#define portYIELD() \ -{ \ - /* Set a PendSV to request a context switch. */ \ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; \ - \ - /* Barriers are normally not required but do ensure the code is completely \ - within the specified behaviour for the architecture. */ \ - __asm volatile( "dsb" ); \ - __asm volatile( "isb" ); \ -} - -#ifdef _MSC_VER // IntelliSense, , ... -#undef portYIELD() -#define portYIELD() -#endif - -#define portNVIC_INT_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000ed04 ) ) -#define portNVIC_PENDSVSET_BIT ( 1UL << 28UL ) -#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired != pdFALSE ) portYIELD() -#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x ) -/*-----------------------------------------------------------*/ - -/* Critical section management. */ -extern void vPortEnterCritical( void ); -extern void vPortExitCritical( void ); -#define portSET_INTERRUPT_MASK_FROM_ISR() ulPortRaiseBASEPRI() -#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortSetBASEPRI(x) -#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI() -#define portENABLE_INTERRUPTS() vPortSetBASEPRI(0) -#define portENTER_CRITICAL() vPortEnterCritical() -#define portEXIT_CRITICAL() vPortExitCritical() - -/*-----------------------------------------------------------*/ - -/* Task function macros as described on the FreeRTOS.org WEB site. These are -not necessary for to use this port. They are defined so the common demo files -(which build with all the ports) will build. */ -#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) -#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) -/*-----------------------------------------------------------*/ - -/* Tickless idle/low power functionality. */ -#ifndef portSUPPRESS_TICKS_AND_SLEEP - extern void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime ); - #define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime ) vPortSuppressTicksAndSleep( xExpectedIdleTime ) -#endif -/*-----------------------------------------------------------*/ - -/* Architecture specific optimisations. */ -#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION - #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 -#endif - -#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1 - - /* Generic helper function. */ -#ifndef _MSC_VER // IntelliSense - __attribute__( ( always_inline ) ) static inline uint8_t ucPortCountLeadingZeros( uint32_t ulBitmap ) -#else - static inline uint8_t ucPortCountLeadingZeros(uint32_t ulBitmap) -#endif - { - uint8_t ucReturn; - - __asm volatile ( "clz %0, %1" : "=r" ( ucReturn ) : "r" ( ulBitmap ) ); - return ucReturn; - } - - /* Check the configuration. */ - #if( configMAX_PRIORITIES > 32 ) - #error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice. - #endif - - /* Store/clear the ready priorities in a bit map. */ - #define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) ) - #define portRESET_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) &= ~( 1UL << ( uxPriority ) ) - - /*-----------------------------------------------------------*/ - - #define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) uxTopPriority = ( 31UL - ( uint32_t ) ucPortCountLeadingZeros( ( uxReadyPriorities ) ) ) - -#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */ - -/*-----------------------------------------------------------*/ - -#ifdef configASSERT - void vPortValidateInterruptPriority( void ); - #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority() -#endif - -/* portNOP() is not required by this port. */ -#define portNOP() - -#define portINLINE __inline - -#ifndef portFORCE_INLINE -#ifndef _MSC_VER // IntelliSense - #define portFORCE_INLINE inline __attribute__(( always_inline)) -#else - #define portFORCE_INLINE -#endif -#endif - -portFORCE_INLINE static BaseType_t xPortIsInsideInterrupt( void ) -{ -uint32_t ulCurrentInterrupt; -BaseType_t xReturn; - - /* Obtain the number of the currently executing interrupt. */ - __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) ); - - if( ulCurrentInterrupt == 0 ) - { - xReturn = pdFALSE; - } - else - { - xReturn = pdTRUE; - } - - return xReturn; -} - -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static void vPortRaiseBASEPRI( void ) -{ -uint32_t ulNewBASEPRI; - - __asm volatile - ( - " mov %0, %1 \n" \ - " msr basepri, %0 \n" \ - " isb \n" \ - " dsb \n" \ - :"=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) - ); -} - -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void ) -{ -uint32_t ulOriginalBASEPRI, ulNewBASEPRI; - - __asm volatile - ( - " mrs %0, basepri \n" \ - " mov %1, %2 \n" \ - " msr basepri, %1 \n" \ - " isb \n" \ - " dsb \n" \ - :"=r" (ulOriginalBASEPRI), "=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) - ); - - /* This return will not be reached but is necessary to prevent compiler - warnings. */ - return ulOriginalBASEPRI; -} -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue ) -{ - __asm volatile - ( - " msr basepri, %0 " :: "r" ( ulNewMaskValue ) - ); -} -/*-----------------------------------------------------------*/ - - -#ifdef __cplusplus -} -#endif - -#endif /* PORTMACRO_H */ - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3_MPU/port.c b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3_MPU/port.c deleted file mode 100644 index b21c889..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3_MPU/port.c +++ /dev/null @@ -1,771 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -/*----------------------------------------------------------- - * Implementation of functions defined in portable.h for the ARM CM3 port. - *----------------------------------------------------------*/ - -/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining -all the API functions to use the MPU wrappers. That should only be done when -task.h is included from an application file. */ -#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE - -/* Scheduler includes. */ -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" -#include "timers.h" -#include "event_groups.h" -#include "mpu_prototypes.h" - -#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE - -/* Constants required to access and manipulate the NVIC. */ -#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000e010 ) ) -#define portNVIC_SYSTICK_LOAD_REG ( * ( ( volatile uint32_t * ) 0xe000e014 ) ) -#define portNVIC_SYSPRI2_REG ( * ( ( volatile uint32_t * ) 0xe000ed20 ) ) -#define portNVIC_SYSPRI1_REG ( * ( ( volatile uint32_t * ) 0xe000ed1c ) ) -#define portNVIC_SYS_CTRL_STATE_REG ( * ( ( volatile uint32_t * ) 0xe000ed24 ) ) -#define portNVIC_MEM_FAULT_ENABLE ( 1UL << 16UL ) - -/* Constants required to access and manipulate the MPU. */ -#define portMPU_TYPE_REG ( * ( ( volatile uint32_t * ) 0xe000ed90 ) ) -#define portMPU_REGION_BASE_ADDRESS_REG ( * ( ( volatile uint32_t * ) 0xe000ed9C ) ) -#define portMPU_REGION_ATTRIBUTE_REG ( * ( ( volatile uint32_t * ) 0xe000edA0 ) ) -#define portMPU_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000ed94 ) ) -#define portEXPECTED_MPU_TYPE_VALUE ( 8UL << 8UL ) /* 8 regions, unified. */ -#define portMPU_ENABLE ( 0x01UL ) -#define portMPU_BACKGROUND_ENABLE ( 1UL << 2UL ) -#define portPRIVILEGED_EXECUTION_START_ADDRESS ( 0UL ) -#define portMPU_REGION_VALID ( 0x10UL ) -#define portMPU_REGION_ENABLE ( 0x01UL ) -#define portPERIPHERALS_START_ADDRESS 0x40000000UL -#define portPERIPHERALS_END_ADDRESS 0x5FFFFFFFUL - -/* Constants required to access and manipulate the SysTick. */ -#define portNVIC_SYSTICK_CLK ( 0x00000004UL ) -#define portNVIC_SYSTICK_INT ( 0x00000002UL ) -#define portNVIC_SYSTICK_ENABLE ( 0x00000001UL ) -#define portNVIC_PENDSV_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL ) -#define portNVIC_SYSTICK_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL ) -#define portNVIC_SVC_PRI ( ( ( uint32_t ) configMAX_SYSCALL_INTERRUPT_PRIORITY - 1UL ) << 24UL ) - -/* Constants required to set up the initial stack. */ -#define portINITIAL_XPSR ( 0x01000000 ) -#define portINITIAL_CONTROL_IF_UNPRIVILEGED ( 0x03 ) -#define portINITIAL_CONTROL_IF_PRIVILEGED ( 0x02 ) - -/* Constants required to check the validity of an interrupt priority. */ -#define portFIRST_USER_INTERRUPT_NUMBER ( 16 ) -#define portNVIC_IP_REGISTERS_OFFSET_16 ( 0xE000E3F0 ) -#define portAIRCR_REG ( * ( ( volatile uint32_t * ) 0xE000ED0C ) ) -#define portMAX_8_BIT_VALUE ( ( uint8_t ) 0xff ) -#define portTOP_BIT_OF_BYTE ( ( uint8_t ) 0x80 ) -#define portMAX_PRIGROUP_BITS ( ( uint8_t ) 7 ) -#define portPRIORITY_GROUP_MASK ( 0x07UL << 8UL ) -#define portPRIGROUP_SHIFT ( 8UL ) - -/* Offsets in the stack to the parameters when inside the SVC handler. */ -#define portOFFSET_TO_PC ( 6 ) - -/* For strict compliance with the Cortex-M spec the task start address should -have bit-0 clear, as it is loaded into the PC on exit from an ISR. */ -#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL ) - -/* Each task maintains its own interrupt status in the critical nesting -variable. Note this is not saved as part of the task context as context -switches can only occur when uxCriticalNesting is zero. */ -static UBaseType_t uxCriticalNesting = 0xaaaaaaaa; - -/* - * Setup the timer to generate the tick interrupts. - */ -static void prvSetupTimerInterrupt( void ) PRIVILEGED_FUNCTION; - -/* - * Configure a number of standard MPU regions that are used by all tasks. - */ -static void prvSetupMPU( void ) PRIVILEGED_FUNCTION; - -/* - * Return the smallest MPU region size that a given number of bytes will fit - * into. The region size is returned as the value that should be programmed - * into the region attribute register for that region. - */ -static uint32_t prvGetMPURegionSizeSetting( uint32_t ulActualSizeInBytes ) PRIVILEGED_FUNCTION; - -/* - * Checks to see if being called from the context of an unprivileged task, and - * if so raises the privilege level and returns false - otherwise does nothing - * other than return true. - */ -BaseType_t xPortRaisePrivilege( void ) __attribute__(( naked )); - -/* - * Standard FreeRTOS exception handlers. - */ -void xPortPendSVHandler( void ) __attribute__ (( naked )) PRIVILEGED_FUNCTION; -void xPortSysTickHandler( void ) __attribute__ ((optimize("3"))) PRIVILEGED_FUNCTION; -void vPortSVCHandler( void ) __attribute__ (( naked )) PRIVILEGED_FUNCTION; - -/* - * Starts the scheduler by restoring the context of the first task to run. - */ -static void prvRestoreContextOfFirstTask( void ) __attribute__(( naked )) PRIVILEGED_FUNCTION; - -/* - * C portion of the SVC handler. The SVC handler is split between an asm entry - * and a C wrapper for simplicity of coding and maintenance. - */ -static void prvSVCHandler( uint32_t *pulRegisters ) __attribute__(( noinline )) PRIVILEGED_FUNCTION; - -/* - * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure - * FreeRTOS API functions are not called from interrupts that have been assigned - * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY. - */ -#if ( configASSERT_DEFINED == 1 ) - static uint8_t ucMaxSysCallPriority = 0; - static uint32_t ulMaxPRIGROUPValue = 0; - static const volatile uint8_t * const pcInterruptPriorityRegisters = ( const volatile uint8_t * const ) portNVIC_IP_REGISTERS_OFFSET_16; -#endif /* configASSERT_DEFINED */ - -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged ) -{ - /* Simulate the stack frame as it would be created by a context switch - interrupt. */ - pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */ - *pxTopOfStack = portINITIAL_XPSR; /* xPSR */ - pxTopOfStack--; - *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */ - pxTopOfStack--; - *pxTopOfStack = 0; /* LR */ - pxTopOfStack -= 5; /* R12, R3, R2 and R1. */ - *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */ - pxTopOfStack -= 9; /* R11, R10, R9, R8, R7, R6, R5 and R4. */ - - if( xRunPrivileged == pdTRUE ) - { - *pxTopOfStack = portINITIAL_CONTROL_IF_PRIVILEGED; - } - else - { - *pxTopOfStack = portINITIAL_CONTROL_IF_UNPRIVILEGED; - } - - return pxTopOfStack; -} -/*-----------------------------------------------------------*/ - -void vPortSVCHandler( void ) -{ - /* Assumes psp was in use. */ - __asm volatile - ( - #ifndef USE_PROCESS_STACK /* Code should not be required if a main() is using the process stack. */ - " tst lr, #4 \n" - " ite eq \n" - " mrseq r0, msp \n" - " mrsne r0, psp \n" - #else - " mrs r0, psp \n" - #endif - " b %0 \n" - ::"i"(prvSVCHandler):"r0" - ); -} -/*-----------------------------------------------------------*/ - -static void prvSVCHandler( uint32_t *pulParam ) -{ -uint8_t ucSVCNumber; - - /* The stack contains: r0, r1, r2, r3, r12, r14, the return address and - xPSR. The first argument (r0) is pulParam[ 0 ]. */ - ucSVCNumber = ( ( uint8_t * ) pulParam[ portOFFSET_TO_PC ] )[ -2 ]; - switch( ucSVCNumber ) - { - case portSVC_START_SCHEDULER : portNVIC_SYSPRI1_REG |= portNVIC_SVC_PRI; - prvRestoreContextOfFirstTask(); - break; - - case portSVC_YIELD : portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; - /* Barriers are normally not required - but do ensure the code is completely - within the specified behaviour for the - architecture. */ - __asm volatile( "dsb" ); - __asm volatile( "isb" ); - - break; - - case portSVC_RAISE_PRIVILEGE : __asm volatile - ( - " mrs r1, control \n" /* Obtain current control value. */ - " bic r1, #1 \n" /* Set privilege bit. */ - " msr control, r1 \n" /* Write back new control value. */ - :::"r1" - ); - break; - - default : /* Unknown SVC call. */ - break; - } -} -/*-----------------------------------------------------------*/ - -static void prvRestoreContextOfFirstTask( void ) -{ - __asm volatile - ( - " ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate the stack. */ - " ldr r0, [r0] \n" - " ldr r0, [r0] \n" - " msr msp, r0 \n" /* Set the msp back to the start of the stack. */ - " ldr r3, pxCurrentTCBConst2 \n" /* Restore the context. */ - " ldr r1, [r3] \n" - " ldr r0, [r1] \n" /* The first item in the TCB is the task top of stack. */ - " add r1, r1, #4 \n" /* Move onto the second item in the TCB... */ - " ldr r2, =0xe000ed9c \n" /* Region Base Address register. */ - " ldmia r1!, {r4-r11} \n" /* Read 4 sets of MPU registers. */ - " stmia r2!, {r4-r11} \n" /* Write 4 sets of MPU registers. */ - " ldmia r0!, {r3, r4-r11} \n" /* Pop the registers that are not automatically saved on exception entry. */ - " msr control, r3 \n" - " msr psp, r0 \n" /* Restore the task stack pointer. */ - " mov r0, #0 \n" - " msr basepri, r0 \n" - " ldr r14, =0xfffffffd \n" /* Load exec return code. */ - " bx r14 \n" - " \n" - " .align 4 \n" - "pxCurrentTCBConst2: .word pxCurrentTCB \n" - ); -} -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -BaseType_t xPortStartScheduler( void ) -{ - /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0. See - http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */ - configASSERT( ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) ); - - #if( configASSERT_DEFINED == 1 ) - { - volatile uint32_t ulOriginalPriority; - volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER ); - volatile uint8_t ucMaxPriorityValue; - - /* Determine the maximum priority from which ISR safe FreeRTOS API - functions can be called. ISR safe functions are those that end in - "FromISR". FreeRTOS maintains separate thread and ISR API functions to - ensure interrupt entry is as fast and simple as possible. - - Save the interrupt priority value that is about to be clobbered. */ - ulOriginalPriority = *pucFirstUserPriorityRegister; - - /* Determine the number of priority bits available. First write to all - possible bits. */ - *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE; - - /* Read the value back to see how many bits stuck. */ - ucMaxPriorityValue = *pucFirstUserPriorityRegister; - - /* Use the same mask on the maximum system call priority. */ - ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue; - - /* Calculate the maximum acceptable priority group value for the number - of bits read back. */ - ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS; - while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE ) - { - ulMaxPRIGROUPValue--; - ucMaxPriorityValue <<= ( uint8_t ) 0x01; - } - - /* Shift the priority group value back to its position within the AIRCR - register. */ - ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT; - ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK; - - /* Restore the clobbered interrupt priority register to its original - value. */ - *pucFirstUserPriorityRegister = ulOriginalPriority; - } - #endif /* conifgASSERT_DEFINED */ - - /* Make PendSV and SysTick the same priority as the kernel, and the SVC - handler higher priority so it can be used to exit a critical section (where - lower priorities are masked). */ - portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI; - portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI; - - /* Configure the regions in the MPU that are common to all tasks. */ - prvSetupMPU(); - - /* Start the timer that generates the tick ISR. Interrupts are disabled - here already. */ - prvSetupTimerInterrupt(); - - /* Initialise the critical nesting count ready for the first task. */ - uxCriticalNesting = 0; - - /* Start the first task. */ - __asm volatile( - " ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate the stack. */ - " ldr r0, [r0] \n" - " ldr r0, [r0] \n" - " msr msp, r0 \n" /* Set the msp back to the start of the stack. */ - " cpsie i \n" /* Globally enable interrupts. */ - " cpsie f \n" - " dsb \n" - " isb \n" - " svc %0 \n" /* System call to start first task. */ - " nop \n" - :: "i" (portSVC_START_SCHEDULER) ); - - /* Should not get here! */ - return 0; -} -/*-----------------------------------------------------------*/ - -void vPortEndScheduler( void ) -{ - /* Not implemented in ports where there is nothing to return to. - Artificially force an assert. */ - configASSERT( uxCriticalNesting == 1000UL ); -} -/*-----------------------------------------------------------*/ - -void vPortEnterCritical( void ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - portDISABLE_INTERRUPTS(); - uxCriticalNesting++; - - vPortResetPrivilege( xRunningPrivileged ); -} -/*-----------------------------------------------------------*/ - -void vPortExitCritical( void ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - configASSERT( uxCriticalNesting ); - uxCriticalNesting--; - if( uxCriticalNesting == 0 ) - { - portENABLE_INTERRUPTS(); - } - vPortResetPrivilege( xRunningPrivileged ); -} -/*-----------------------------------------------------------*/ - -void xPortPendSVHandler( void ) -{ - /* This is a naked function. */ - - __asm volatile - ( - " mrs r0, psp \n" - " \n" - " ldr r3, pxCurrentTCBConst \n" /* Get the location of the current TCB. */ - " ldr r2, [r3] \n" - " \n" - " mrs r1, control \n" - " stmdb r0!, {r1, r4-r11} \n" /* Save the remaining registers. */ - " str r0, [r2] \n" /* Save the new top of stack into the first member of the TCB. */ - " \n" - " stmdb sp!, {r3, r14} \n" - " mov r0, %0 \n" - " msr basepri, r0 \n" - " bl vTaskSwitchContext \n" - " mov r0, #0 \n" - " msr basepri, r0 \n" - " ldmia sp!, {r3, r14} \n" - " \n" /* Restore the context. */ - " ldr r1, [r3] \n" - " ldr r0, [r1] \n" /* The first item in the TCB is the task top of stack. */ - " add r1, r1, #4 \n" /* Move onto the second item in the TCB... */ - " ldr r2, =0xe000ed9c \n" /* Region Base Address register. */ - " ldmia r1!, {r4-r11} \n" /* Read 4 sets of MPU registers. */ - " stmia r2!, {r4-r11} \n" /* Write 4 sets of MPU registers. */ - " ldmia r0!, {r3, r4-r11} \n" /* Pop the registers that are not automatically saved on exception entry. */ - " msr control, r3 \n" - " \n" - " msr psp, r0 \n" - " bx r14 \n" - " \n" - " .align 4 \n" - "pxCurrentTCBConst: .word pxCurrentTCB \n" - ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) - ); -} -/*-----------------------------------------------------------*/ - -void xPortSysTickHandler( void ) -{ -uint32_t ulDummy; - - ulDummy = portSET_INTERRUPT_MASK_FROM_ISR(); - { - /* Increment the RTOS tick. */ - if( xTaskIncrementTick() != pdFALSE ) - { - /* Pend a context switch. */ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; - } - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( ulDummy ); -} -/*-----------------------------------------------------------*/ - -/* - * Setup the systick timer to generate the tick interrupts at the required - * frequency. - */ -static void prvSetupTimerInterrupt( void ) -{ - /* Configure SysTick to interrupt at the requested rate. */ - portNVIC_SYSTICK_LOAD_REG = ( configCPU_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; - portNVIC_SYSTICK_CTRL_REG = portNVIC_SYSTICK_CLK | portNVIC_SYSTICK_INT | portNVIC_SYSTICK_ENABLE; -} -/*-----------------------------------------------------------*/ - -static void prvSetupMPU( void ) -{ -extern uint32_t __privileged_functions_end__[]; -extern uint32_t __FLASH_segment_start__[]; -extern uint32_t __FLASH_segment_end__[]; -extern uint32_t __privileged_data_start__[]; -extern uint32_t __privileged_data_end__[]; - - /* Check the expected MPU is present. */ - if( portMPU_TYPE_REG == portEXPECTED_MPU_TYPE_VALUE ) - { - /* First setup the entire flash for unprivileged read only access. */ - portMPU_REGION_BASE_ADDRESS_REG = ( ( uint32_t ) __FLASH_segment_start__ ) | /* Base address. */ - ( portMPU_REGION_VALID ) | - ( portUNPRIVILEGED_FLASH_REGION ); - - portMPU_REGION_ATTRIBUTE_REG = ( portMPU_REGION_READ_ONLY ) | - ( portMPU_REGION_CACHEABLE_BUFFERABLE ) | - ( prvGetMPURegionSizeSetting( ( uint32_t ) __FLASH_segment_end__ - ( uint32_t ) __FLASH_segment_start__ ) ) | - ( portMPU_REGION_ENABLE ); - - /* Setup the first 16K for privileged only access (even though less - than 10K is actually being used). This is where the kernel code is - placed. */ - portMPU_REGION_BASE_ADDRESS_REG = ( ( uint32_t ) __FLASH_segment_start__ ) | /* Base address. */ - ( portMPU_REGION_VALID ) | - ( portPRIVILEGED_FLASH_REGION ); - - portMPU_REGION_ATTRIBUTE_REG = ( portMPU_REGION_PRIVILEGED_READ_ONLY ) | - ( portMPU_REGION_CACHEABLE_BUFFERABLE ) | - ( prvGetMPURegionSizeSetting( ( uint32_t ) __privileged_functions_end__ - ( uint32_t ) __FLASH_segment_start__ ) ) | - ( portMPU_REGION_ENABLE ); - - /* Setup the privileged data RAM region. This is where the kernel data - is placed. */ - portMPU_REGION_BASE_ADDRESS_REG = ( ( uint32_t ) __privileged_data_start__ ) | /* Base address. */ - ( portMPU_REGION_VALID ) | - ( portPRIVILEGED_RAM_REGION ); - - portMPU_REGION_ATTRIBUTE_REG = ( portMPU_REGION_PRIVILEGED_READ_WRITE ) | - ( portMPU_REGION_CACHEABLE_BUFFERABLE ) | - prvGetMPURegionSizeSetting( ( uint32_t ) __privileged_data_end__ - ( uint32_t ) __privileged_data_start__ ) | - ( portMPU_REGION_ENABLE ); - - /* By default allow everything to access the general peripherals. The - system peripherals and registers are protected. */ - portMPU_REGION_BASE_ADDRESS_REG = ( portPERIPHERALS_START_ADDRESS ) | - ( portMPU_REGION_VALID ) | - ( portGENERAL_PERIPHERALS_REGION ); - - portMPU_REGION_ATTRIBUTE_REG = ( portMPU_REGION_READ_WRITE | portMPU_REGION_EXECUTE_NEVER ) | - ( prvGetMPURegionSizeSetting( portPERIPHERALS_END_ADDRESS - portPERIPHERALS_START_ADDRESS ) ) | - ( portMPU_REGION_ENABLE ); - - /* Enable the memory fault exception. */ - portNVIC_SYS_CTRL_STATE_REG |= portNVIC_MEM_FAULT_ENABLE; - - /* Enable the MPU with the background region configured. */ - portMPU_CTRL_REG |= ( portMPU_ENABLE | portMPU_BACKGROUND_ENABLE ); - } -} -/*-----------------------------------------------------------*/ - -static uint32_t prvGetMPURegionSizeSetting( uint32_t ulActualSizeInBytes ) -{ -uint32_t ulRegionSize, ulReturnValue = 4; - - /* 32 is the smallest region size, 31 is the largest valid value for - ulReturnValue. */ - for( ulRegionSize = 32UL; ulReturnValue < 31UL; ( ulRegionSize <<= 1UL ) ) - { - if( ulActualSizeInBytes <= ulRegionSize ) - { - break; - } - else - { - ulReturnValue++; - } - } - - /* Shift the code by one before returning so it can be written directly - into the the correct bit position of the attribute register. */ - return ( ulReturnValue << 1UL ); -} -/*-----------------------------------------------------------*/ - -BaseType_t xPortRaisePrivilege( void ) -{ - __asm volatile - ( - " mrs r0, control \n" - " tst r0, #1 \n" /* Is the task running privileged? */ - " itte ne \n" - " movne r0, #0 \n" /* CONTROL[0]!=0, return false. */ - " svcne %0 \n" /* Switch to privileged. */ - " moveq r0, #1 \n" /* CONTROL[0]==0, return true. */ - " bx lr \n" - :: "i" (portSVC_RAISE_PRIVILEGE) : "r0" - ); - - return 0; -} -/*-----------------------------------------------------------*/ - -void vPortStoreTaskMPUSettings( xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION * const xRegions, StackType_t *pxBottomOfStack, uint32_t ulStackDepth ) -{ -extern uint32_t __SRAM_segment_start__[]; -extern uint32_t __SRAM_segment_end__[]; -extern uint32_t __privileged_data_start__[]; -extern uint32_t __privileged_data_end__[]; -int32_t lIndex; -uint32_t ul; - - if( xRegions == NULL ) - { - /* No MPU regions are specified so allow access to all RAM. */ - xMPUSettings->xRegion[ 0 ].ulRegionBaseAddress = - ( ( uint32_t ) __SRAM_segment_start__ ) | /* Base address. */ - ( portMPU_REGION_VALID ) | - ( portSTACK_REGION ); - - xMPUSettings->xRegion[ 0 ].ulRegionAttribute = - ( portMPU_REGION_READ_WRITE ) | - ( portMPU_REGION_CACHEABLE_BUFFERABLE ) | - ( prvGetMPURegionSizeSetting( ( uint32_t ) __SRAM_segment_end__ - ( uint32_t ) __SRAM_segment_start__ ) ) | - ( portMPU_REGION_ENABLE ); - - /* Re-instate the privileged only RAM region as xRegion[ 0 ] will have - just removed the privileged only parameters. */ - xMPUSettings->xRegion[ 1 ].ulRegionBaseAddress = - ( ( uint32_t ) __privileged_data_start__ ) | /* Base address. */ - ( portMPU_REGION_VALID ) | - ( portSTACK_REGION + 1 ); - - xMPUSettings->xRegion[ 1 ].ulRegionAttribute = - ( portMPU_REGION_PRIVILEGED_READ_WRITE ) | - ( portMPU_REGION_CACHEABLE_BUFFERABLE ) | - prvGetMPURegionSizeSetting( ( uint32_t ) __privileged_data_end__ - ( uint32_t ) __privileged_data_start__ ) | - ( portMPU_REGION_ENABLE ); - - /* Invalidate all other regions. */ - for( ul = 2; ul <= portNUM_CONFIGURABLE_REGIONS; ul++ ) - { - xMPUSettings->xRegion[ ul ].ulRegionBaseAddress = ( portSTACK_REGION + ul ) | portMPU_REGION_VALID; - xMPUSettings->xRegion[ ul ].ulRegionAttribute = 0UL; - } - } - else - { - /* This function is called automatically when the task is created - in - which case the stack region parameters will be valid. At all other - times the stack parameters will not be valid and it is assumed that the - stack region has already been configured. */ - if( ulStackDepth > 0 ) - { - /* Define the region that allows access to the stack. */ - xMPUSettings->xRegion[ 0 ].ulRegionBaseAddress = - ( ( uint32_t ) pxBottomOfStack ) | - ( portMPU_REGION_VALID ) | - ( portSTACK_REGION ); /* Region number. */ - - xMPUSettings->xRegion[ 0 ].ulRegionAttribute = - ( portMPU_REGION_READ_WRITE ) | /* Read and write. */ - ( prvGetMPURegionSizeSetting( ulStackDepth * ( uint32_t ) sizeof( StackType_t ) ) ) | - ( portMPU_REGION_CACHEABLE_BUFFERABLE ) | - ( portMPU_REGION_ENABLE ); - } - - lIndex = 0; - - for( ul = 1; ul <= portNUM_CONFIGURABLE_REGIONS; ul++ ) - { - if( ( xRegions[ lIndex ] ).ulLengthInBytes > 0UL ) - { - /* Translate the generic region definition contained in - xRegions into the CM3 specific MPU settings that are then - stored in xMPUSettings. */ - xMPUSettings->xRegion[ ul ].ulRegionBaseAddress = - ( ( uint32_t ) xRegions[ lIndex ].pvBaseAddress ) | - ( portMPU_REGION_VALID ) | - ( portSTACK_REGION + ul ); /* Region number. */ - - xMPUSettings->xRegion[ ul ].ulRegionAttribute = - ( prvGetMPURegionSizeSetting( xRegions[ lIndex ].ulLengthInBytes ) ) | - ( xRegions[ lIndex ].ulParameters ) | - ( portMPU_REGION_ENABLE ); - } - else - { - /* Invalidate the region. */ - xMPUSettings->xRegion[ ul ].ulRegionBaseAddress = ( portSTACK_REGION + ul ) | portMPU_REGION_VALID; - xMPUSettings->xRegion[ ul ].ulRegionAttribute = 0UL; - } - - lIndex++; - } - } -} -/*-----------------------------------------------------------*/ - -#if( configASSERT_DEFINED == 1 ) - - void vPortValidateInterruptPriority( void ) - { - uint32_t ulCurrentInterrupt; - uint8_t ucCurrentPriority; - - /* Obtain the number of the currently executing interrupt. */ - __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) ); - - /* Is the interrupt number a user defined interrupt? */ - if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER ) - { - /* Look up the interrupt's priority. */ - ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ]; - - /* The following assertion will fail if a service routine (ISR) for - an interrupt that has been assigned a priority above - configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API - function. ISR safe FreeRTOS API functions must *only* be called - from interrupts that have been assigned a priority at or below - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Numerically low interrupt priority numbers represent logically high - interrupt priorities, therefore the priority of the interrupt must - be set to a value equal to or numerically *higher* than - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Interrupts that use the FreeRTOS API must not be left at their - default priority of zero as that is the highest possible priority, - which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY, - and therefore also guaranteed to be invalid. - - FreeRTOS maintains separate thread and ISR API functions to ensure - interrupt entry is as fast and simple as possible. - - The following links provide detailed information: - http://www.freertos.org/RTOS-Cortex-M3-M4.html - http://www.freertos.org/FAQHelp.html */ - configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); - } - - /* Priority grouping: The interrupt controller (NVIC) allows the bits - that define each interrupt's priority to be split between bits that - define the interrupt's pre-emption priority bits and bits that define - the interrupt's sub-priority. For simplicity all bits must be defined - to be pre-emption priority bits. The following assertion will fail if - this is not the case (if some bits represent a sub-priority). - - If the application only uses CMSIS libraries for interrupt - configuration then the correct setting can be achieved on all Cortex-M - devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the - scheduler. Note however that some vendor specific peripheral libraries - assume a non-zero priority group setting, in which cases using a value - of zero will result in unpredicable behaviour. */ - configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue ); - } - -#endif /* configASSERT_DEFINED */ -/*-----------------------------------------------------------*/ - - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3_MPU/portmacro.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3_MPU/portmacro.h deleted file mode 100644 index 15ca256..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3_MPU/portmacro.h +++ /dev/null @@ -1,332 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - - -#ifndef PORTMACRO_H -#define PORTMACRO_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*----------------------------------------------------------- - * Port specific definitions. - * - * The settings in this file configure FreeRTOS correctly for the - * given hardware and compiler. - * - * These settings should not be altered. - *----------------------------------------------------------- - */ - -/* Type definitions. */ -#define portCHAR char -#define portFLOAT float -#define portDOUBLE double -#define portLONG long -#define portSHORT short -#define portSTACK_TYPE uint32_t -#define portBASE_TYPE long - -typedef portSTACK_TYPE StackType_t; -typedef long BaseType_t; -typedef unsigned long UBaseType_t; - -#if( configUSE_16_BIT_TICKS == 1 ) - typedef uint16_t TickType_t; - #define portMAX_DELAY ( TickType_t ) 0xffff -#else - typedef uint32_t TickType_t; - #define portMAX_DELAY ( TickType_t ) 0xffffffffUL - - /* 32-bit tick type on a 32-bit architecture, so reads of the tick count do - not need to be guarded with a critical section. */ - #define portTICK_TYPE_IS_ATOMIC 1 -#endif -/*-----------------------------------------------------------*/ - -/* MPU specific constants. */ -#define portUSING_MPU_WRAPPERS 1 -#define portPRIVILEGE_BIT ( 0x80000000UL ) - -#define portMPU_REGION_READ_WRITE ( 0x03UL << 24UL ) -#define portMPU_REGION_PRIVILEGED_READ_ONLY ( 0x05UL << 24UL ) -#define portMPU_REGION_READ_ONLY ( 0x06UL << 24UL ) -#define portMPU_REGION_PRIVILEGED_READ_WRITE ( 0x01UL << 24UL ) -#define portMPU_REGION_CACHEABLE_BUFFERABLE ( 0x07UL << 16UL ) -#define portMPU_REGION_EXECUTE_NEVER ( 0x01UL << 28UL ) - -#define portUNPRIVILEGED_FLASH_REGION ( 0UL ) -#define portPRIVILEGED_FLASH_REGION ( 1UL ) -#define portPRIVILEGED_RAM_REGION ( 2UL ) -#define portGENERAL_PERIPHERALS_REGION ( 3UL ) -#define portSTACK_REGION ( 4UL ) -#define portFIRST_CONFIGURABLE_REGION ( 5UL ) -#define portLAST_CONFIGURABLE_REGION ( 7UL ) -#define portNUM_CONFIGURABLE_REGIONS ( ( portLAST_CONFIGURABLE_REGION - portFIRST_CONFIGURABLE_REGION ) + 1 ) -#define portTOTAL_NUM_REGIONS ( portNUM_CONFIGURABLE_REGIONS + 1 ) /* Plus one to make space for the stack region. */ - -#define portSWITCH_TO_USER_MODE() __asm volatile ( " mrs r0, control \n orr r0, #1 \n msr control, r0 " :::"r0" ) - -typedef struct MPU_REGION_REGISTERS -{ - uint32_t ulRegionBaseAddress; - uint32_t ulRegionAttribute; -} xMPU_REGION_REGISTERS; - -/* Plus 1 to create space for the stack region. */ -typedef struct MPU_SETTINGS -{ - xMPU_REGION_REGISTERS xRegion[ portTOTAL_NUM_REGIONS ]; -} xMPU_SETTINGS; - -/* Architecture specifics. */ -#define portSTACK_GROWTH ( -1 ) -#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) -#define portBYTE_ALIGNMENT 8 -/*-----------------------------------------------------------*/ - -/* SVC numbers for various services. */ -#define portSVC_START_SCHEDULER 0 -#define portSVC_YIELD 1 -#define portSVC_RAISE_PRIVILEGE 2 - -/* Scheduler utilities. */ - -#define portYIELD() __asm volatile ( " SVC %0 \n" :: "i" (portSVC_YIELD) ) -#define portYIELD_WITHIN_API() \ -{ \ - /* Set a PendSV to request a context switch. */ \ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; \ - \ - /* Barriers are normally not required but do ensure the code is completely \ - within the specified behaviour for the architecture. */ \ - __asm volatile( "dsb" ); \ - __asm volatile( "isb" ); \ -} - -#define portNVIC_INT_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000ed04 ) ) -#define portNVIC_PENDSVSET_BIT ( 1UL << 28UL ) -#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired ) portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET -#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x ) -/*-----------------------------------------------------------*/ - -/* Critical section management. */ -extern void vPortEnterCritical( void ); -extern void vPortExitCritical( void ); -#define portSET_INTERRUPT_MASK_FROM_ISR() ulPortRaiseBASEPRI() -#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortSetBASEPRI(x) -#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI() -#define portENABLE_INTERRUPTS() vPortSetBASEPRI(0) -#define portENTER_CRITICAL() vPortEnterCritical() -#define portEXIT_CRITICAL() vPortExitCritical() - -/*-----------------------------------------------------------*/ - -/* Task function macros as described on the FreeRTOS.org WEB site. These are -not necessary for to use this port. They are defined so the common demo files -(which build with all the ports) will build. */ -#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) -#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) -/*-----------------------------------------------------------*/ - -/* Architecture specific optimisations. */ -#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION - #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 -#endif - -#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1 - - /* Generic helper function. */ - __attribute__( ( always_inline ) ) static inline uint8_t ucPortCountLeadingZeros( uint32_t ulBitmap ) - { - uint8_t ucReturn; - - __asm volatile ( "clz %0, %1" : "=r" ( ucReturn ) : "r" ( ulBitmap ) ); - return ucReturn; - } - - /* Check the configuration. */ - #if( configMAX_PRIORITIES > 32 ) - #error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice. - #endif - - /* Store/clear the ready priorities in a bit map. */ - #define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) ) - #define portRESET_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) &= ~( 1UL << ( uxPriority ) ) - - /*-----------------------------------------------------------*/ - - #define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) uxTopPriority = ( 31UL - ( uint32_t ) ucPortCountLeadingZeros( ( uxReadyPriorities ) ) ) - -#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */ - -/*-----------------------------------------------------------*/ - -#ifdef configASSERT - void vPortValidateInterruptPriority( void ); - #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority() -#endif - -/* portNOP() is not required by this port. */ -#define portNOP() - -#define portINLINE __inline - -#ifndef portFORCE_INLINE - #define portFORCE_INLINE inline __attribute__(( always_inline)) -#endif - -/* Set the privilege level to user mode if xRunningPrivileged is false. */ -portFORCE_INLINE static void vPortResetPrivilege( BaseType_t xRunningPrivileged ) -{ - if( xRunningPrivileged != pdTRUE ) - { - __asm volatile ( " mrs r0, control \n" \ - " orr r0, #1 \n" \ - " msr control, r0 \n" \ - :::"r0" ); - } -} -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static BaseType_t xPortIsInsideInterrupt( void ) -{ -uint32_t ulCurrentInterrupt; -BaseType_t xReturn; - - /* Obtain the number of the currently executing interrupt. */ - __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) ); - - if( ulCurrentInterrupt == 0 ) - { - xReturn = pdFALSE; - } - else - { - xReturn = pdTRUE; - } - - return xReturn; -} - -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static void vPortRaiseBASEPRI( void ) -{ -uint32_t ulNewBASEPRI; - - __asm volatile - ( - " mov %0, %1 \n" \ - " msr basepri, %0 \n" \ - " isb \n" \ - " dsb \n" \ - :"=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) - ); -} - -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void ) -{ -uint32_t ulOriginalBASEPRI, ulNewBASEPRI; - - __asm volatile - ( - " mrs %0, basepri \n" \ - " mov %1, %2 \n" \ - " msr basepri, %1 \n" \ - " isb \n" \ - " dsb \n" \ - :"=r" (ulOriginalBASEPRI), "=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) - ); - - /* This return will not be reached but is necessary to prevent compiler - warnings. */ - return ulOriginalBASEPRI; -} -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue ) -{ - __asm volatile - ( - " msr basepri, %0 " :: "r" ( ulNewMaskValue ) - ); -} -/*-----------------------------------------------------------*/ - - -#ifdef __cplusplus -} -#endif - -#endif /* PORTMACRO_H */ - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM4F/port.c b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM4F/port.c deleted file mode 100644 index 7a0d7e8..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM4F/port.c +++ /dev/null @@ -1,763 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -/*----------------------------------------------------------- - * Implementation of functions defined in portable.h for the ARM CM4F port. - *----------------------------------------------------------*/ - -/* Scheduler includes. */ -#include "FreeRTOS.h" -#include "task.h" - -#ifndef __VFP_FP__ - #error This port can only be used when the project options are configured to enable hardware floating point support. -#endif - -#ifndef configSYSTICK_CLOCK_HZ - #define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ - /* Ensure the SysTick is clocked at the same frequency as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 1UL << 2UL ) -#else - /* The way the SysTick is clocked is not modified in case it is not the same - as the core. */ - #define portNVIC_SYSTICK_CLK_BIT ( 0 ) -#endif - -/* Constants required to manipulate the core. Registers first... */ -#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000e010 ) ) -#define portNVIC_SYSTICK_LOAD_REG ( * ( ( volatile uint32_t * ) 0xe000e014 ) ) -#define portNVIC_SYSTICK_CURRENT_VALUE_REG ( * ( ( volatile uint32_t * ) 0xe000e018 ) ) -#define portNVIC_SYSPRI2_REG ( * ( ( volatile uint32_t * ) 0xe000ed20 ) ) -/* ...then bits in the registers. */ -#define portNVIC_SYSTICK_INT_BIT ( 1UL << 1UL ) -#define portNVIC_SYSTICK_ENABLE_BIT ( 1UL << 0UL ) -#define portNVIC_SYSTICK_COUNT_FLAG_BIT ( 1UL << 16UL ) -#define portNVIC_PENDSVCLEAR_BIT ( 1UL << 27UL ) -#define portNVIC_PEND_SYSTICK_CLEAR_BIT ( 1UL << 25UL ) - -/* Constants used to detect a Cortex-M7 r0p1 core, which should use the ARM_CM7 -r0p1 port. */ -#define portCPUID ( * ( ( volatile uint32_t * ) 0xE000ed00 ) ) -#define portCORTEX_M7_r0p1_ID ( 0x410FC271UL ) -#define portCORTEX_M7_r0p0_ID ( 0x410FC270UL ) - -#define portNVIC_PENDSV_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL ) -#define portNVIC_SYSTICK_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL ) - -/* Constants required to check the validity of an interrupt priority. */ -#define portFIRST_USER_INTERRUPT_NUMBER ( 16 ) -#define portNVIC_IP_REGISTERS_OFFSET_16 ( 0xE000E3F0 ) -#define portAIRCR_REG ( * ( ( volatile uint32_t * ) 0xE000ED0C ) ) -#define portMAX_8_BIT_VALUE ( ( uint8_t ) 0xff ) -#define portTOP_BIT_OF_BYTE ( ( uint8_t ) 0x80 ) -#define portMAX_PRIGROUP_BITS ( ( uint8_t ) 7 ) -#define portPRIORITY_GROUP_MASK ( 0x07UL << 8UL ) -#define portPRIGROUP_SHIFT ( 8UL ) - -/* Masks off all bits but the VECTACTIVE bits in the ICSR register. */ -#define portVECTACTIVE_MASK ( 0xFFUL ) - -/* Constants required to manipulate the VFP. */ -#define portFPCCR ( ( volatile uint32_t * ) 0xe000ef34 ) /* Floating point context control register. */ -#define portASPEN_AND_LSPEN_BITS ( 0x3UL << 30UL ) - -/* Constants required to set up the initial stack. */ -#define portINITIAL_XPSR ( 0x01000000 ) -#define portINITIAL_EXEC_RETURN ( 0xfffffffd ) - -/* The systick is a 24-bit counter. */ -#define portMAX_24_BIT_NUMBER ( 0xffffffUL ) - -/* For strict compliance with the Cortex-M spec the task start address should -have bit-0 clear, as it is loaded into the PC on exit from an ISR. */ -#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL ) - -/* A fiddle factor to estimate the number of SysTick counts that would have -occurred while the SysTick counter is stopped during tickless idle -calculations. */ -#define portMISSED_COUNTS_FACTOR ( 45UL ) - -/* Let the user override the pre-loading of the initial LR with the address of -prvTaskExitError() in case it messes up unwinding of the stack in the -debugger. */ -#ifdef configTASK_RETURN_ADDRESS - #define portTASK_RETURN_ADDRESS configTASK_RETURN_ADDRESS -#else - #define portTASK_RETURN_ADDRESS prvTaskExitError -#endif - -/* Each task maintains its own interrupt status in the critical nesting -variable. */ -static UBaseType_t uxCriticalNesting = 0xaaaaaaaa; - -/* - * Setup the timer to generate the tick interrupts. The implementation in this - * file is weak to allow application writers to change the timer used to - * generate the tick interrupt. - */ -void vPortSetupTimerInterrupt( void ); - -/* - * Exception handlers. - */ -void xPortPendSVHandler( void ) __attribute__ (( naked )); -void xPortSysTickHandler( void ); -void vPortSVCHandler( void ) __attribute__ (( naked )); - -/* - * Start first task is a separate function so it can be tested in isolation. - */ -static void prvPortStartFirstTask( void ) __attribute__ (( naked )); - -/* - * Function to enable the VFP. - */ -static void vPortEnableVFP( void ) __attribute__ (( naked )); - -/* - * Used to catch tasks that attempt to return from their implementing function. - */ -static void prvTaskExitError( void ); - -/*-----------------------------------------------------------*/ - -/* - * The number of SysTick increments that make up one tick period. - */ -#if configUSE_TICKLESS_IDLE == 1 - static uint32_t ulTimerCountsForOneTick = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * The maximum number of tick periods that can be suppressed is limited by the - * 24 bit resolution of the SysTick timer. - */ -#if configUSE_TICKLESS_IDLE == 1 - static uint32_t xMaximumPossibleSuppressedTicks = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Compensate for the CPU cycles that pass while the SysTick is stopped (low - * power functionality only. - */ -#if configUSE_TICKLESS_IDLE == 1 - static uint32_t ulStoppedTimerCompensation = 0; -#endif /* configUSE_TICKLESS_IDLE */ - -/* - * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure - * FreeRTOS API functions are not called from interrupts that have been assigned - * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY. - */ -#if ( configASSERT_DEFINED == 1 ) - static uint8_t ucMaxSysCallPriority = 0; - static uint32_t ulMaxPRIGROUPValue = 0; - static const volatile uint8_t * const pcInterruptPriorityRegisters = ( const volatile uint8_t * const ) portNVIC_IP_REGISTERS_OFFSET_16; -#endif /* configASSERT_DEFINED */ - -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) -{ - /* Simulate the stack frame as it would be created by a context switch - interrupt. */ - - /* Offset added to account for the way the MCU uses the stack on entry/exit - of interrupts, and to ensure alignment. */ - pxTopOfStack--; - - *pxTopOfStack = portINITIAL_XPSR; /* xPSR */ - pxTopOfStack--; - *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */ - pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */ - - /* Save code space by skipping register initialisation. */ - pxTopOfStack -= 5; /* R12, R3, R2 and R1. */ - *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */ - - /* A save method is being used that requires each task to maintain its - own exec return value. */ - pxTopOfStack--; - *pxTopOfStack = portINITIAL_EXEC_RETURN; - - pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */ - - return pxTopOfStack; -} -/*-----------------------------------------------------------*/ - -static void prvTaskExitError( void ) -{ - /* A function that implements a task must not exit or attempt to return to - its caller as there is nothing to return to. If a task wants to exit it - should instead call vTaskDelete( NULL ). - - Artificially force an assert() to be triggered if configASSERT() is - defined, then stop here so application writers can catch the error. */ - configASSERT( uxCriticalNesting == ~0UL ); - portDISABLE_INTERRUPTS(); - for( ;; ); -} -/*-----------------------------------------------------------*/ - -void vPortSVCHandler( void ) -{ - __asm volatile ( - " ldr r3, pxCurrentTCBConst2 \n" /* Restore the context. */ - " ldr r1, [r3] \n" /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */ - " ldr r0, [r1] \n" /* The first item in pxCurrentTCB is the task top of stack. */ - " ldmia r0!, {r4-r11, r14} \n" /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */ - " msr psp, r0 \n" /* Restore the task stack pointer. */ - " isb \n" - " mov r0, #0 \n" - " msr basepri, r0 \n" - " bx r14 \n" - " \n" - " .align 4 \n" - "pxCurrentTCBConst2: .word pxCurrentTCB \n" - ); -} -/*-----------------------------------------------------------*/ - -static void prvPortStartFirstTask( void ) -{ - __asm volatile( - " ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate the stack. */ - " ldr r0, [r0] \n" - " ldr r0, [r0] \n" - " msr msp, r0 \n" /* Set the msp back to the start of the stack. */ - " cpsie i \n" /* Globally enable interrupts. */ - " cpsie f \n" - " dsb \n" - " isb \n" - " svc 0 \n" /* System call to start first task. */ - " nop \n" - ); -} -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -BaseType_t xPortStartScheduler( void ) -{ - /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0. - See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */ - configASSERT( configMAX_SYSCALL_INTERRUPT_PRIORITY ); - - /* This port can be used on all revisions of the Cortex-M7 core other than - the r0p1 parts. r0p1 parts should use the port from the - /source/portable/GCC/ARM_CM7/r0p1 directory. */ - configASSERT( portCPUID != portCORTEX_M7_r0p1_ID ); - configASSERT( portCPUID != portCORTEX_M7_r0p0_ID ); - - #if( configASSERT_DEFINED == 1 ) - { - volatile uint32_t ulOriginalPriority; - volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER ); - volatile uint8_t ucMaxPriorityValue; - - /* Determine the maximum priority from which ISR safe FreeRTOS API - functions can be called. ISR safe functions are those that end in - "FromISR". FreeRTOS maintains separate thread and ISR API functions to - ensure interrupt entry is as fast and simple as possible. - - Save the interrupt priority value that is about to be clobbered. */ - ulOriginalPriority = *pucFirstUserPriorityRegister; - - /* Determine the number of priority bits available. First write to all - possible bits. */ - *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE; - - /* Read the value back to see how many bits stuck. */ - ucMaxPriorityValue = *pucFirstUserPriorityRegister; - - /* Use the same mask on the maximum system call priority. */ - ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue; - - /* Calculate the maximum acceptable priority group value for the number - of bits read back. */ - ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS; - while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE ) - { - ulMaxPRIGROUPValue--; - ucMaxPriorityValue <<= ( uint8_t ) 0x01; - } - - /* Shift the priority group value back to its position within the AIRCR - register. */ - ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT; - ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK; - - /* Restore the clobbered interrupt priority register to its original - value. */ - *pucFirstUserPriorityRegister = ulOriginalPriority; - } - #endif /* conifgASSERT_DEFINED */ - - /* Make PendSV and SysTick the lowest priority interrupts. */ - portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI; - portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI; - - /* Start the timer that generates the tick ISR. Interrupts are disabled - here already. */ - vPortSetupTimerInterrupt(); - - /* Initialise the critical nesting count ready for the first task. */ - uxCriticalNesting = 0; - - /* Ensure the VFP is enabled - it should be anyway. */ - vPortEnableVFP(); - - /* Lazy save always. */ - *( portFPCCR ) |= portASPEN_AND_LSPEN_BITS; - - /* Start the first task. */ - prvPortStartFirstTask(); - - /* Should never get here as the tasks will now be executing! Call the task - exit error function to prevent compiler warnings about a static function - not being called in the case that the application writer overrides this - functionality by defining configTASK_RETURN_ADDRESS. */ - prvTaskExitError(); - - /* Should not get here! */ - return 0; -} -/*-----------------------------------------------------------*/ - -void vPortEndScheduler( void ) -{ - /* Not implemented in ports where there is nothing to return to. - Artificially force an assert. */ - configASSERT( uxCriticalNesting == 1000UL ); -} -/*-----------------------------------------------------------*/ - -void vPortEnterCritical( void ) -{ - portDISABLE_INTERRUPTS(); - uxCriticalNesting++; - - /* This is not the interrupt safe version of the enter critical function so - assert() if it is being called from an interrupt context. Only API - functions that end in "FromISR" can be used in an interrupt. Only assert if - the critical nesting count is 1 to protect against recursive calls if the - assert function also uses a critical section. */ - if( uxCriticalNesting == 1 ) - { - configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 ); - } -} -/*-----------------------------------------------------------*/ - -void vPortExitCritical( void ) -{ - configASSERT( uxCriticalNesting ); - uxCriticalNesting--; - if( uxCriticalNesting == 0 ) - { - portENABLE_INTERRUPTS(); - } -} -/*-----------------------------------------------------------*/ - -void xPortPendSVHandler( void ) -{ - /* This is a naked function. */ - - __asm volatile - ( - " mrs r0, psp \n" - " isb \n" - " \n" - " ldr r3, pxCurrentTCBConst \n" /* Get the location of the current TCB. */ - " ldr r2, [r3] \n" - " \n" - " tst r14, #0x10 \n" /* Is the task using the FPU context? If so, push high vfp registers. */ - " it eq \n" - " vstmdbeq r0!, {s16-s31} \n" - " \n" - " stmdb r0!, {r4-r11, r14} \n" /* Save the core registers. */ - " \n" - " str r0, [r2] \n" /* Save the new top of stack into the first member of the TCB. */ - " \n" - " stmdb sp!, {r3} \n" - " mov r0, %0 \n" - " msr basepri, r0 \n" - " dsb \n" - " isb \n" - " bl vTaskSwitchContext \n" - " mov r0, #0 \n" - " msr basepri, r0 \n" - " ldmia sp!, {r3} \n" - " \n" - " ldr r1, [r3] \n" /* The first item in pxCurrentTCB is the task top of stack. */ - " ldr r0, [r1] \n" - " \n" - " ldmia r0!, {r4-r11, r14} \n" /* Pop the core registers. */ - " \n" - " tst r14, #0x10 \n" /* Is the task using the FPU context? If so, pop the high vfp registers too. */ - " it eq \n" - " vldmiaeq r0!, {s16-s31} \n" - " \n" - " msr psp, r0 \n" - " isb \n" - " \n" - #ifdef WORKAROUND_PMU_CM001 /* XMC4000 specific errata workaround. */ - #if WORKAROUND_PMU_CM001 == 1 - " push { r14 } \n" - " pop { pc } \n" - #endif - #endif - " \n" - " bx r14 \n" - " \n" - " .align 4 \n" - "pxCurrentTCBConst: .word pxCurrentTCB \n" - ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) - ); -} -/*-----------------------------------------------------------*/ - -void xPortSysTickHandler( void ) -{ - /* The SysTick runs at the lowest interrupt priority, so when this interrupt - executes all interrupts must be unmasked. There is therefore no need to - save and then restore the interrupt mask value as its value is already - known. */ - portDISABLE_INTERRUPTS(); - { - /* Increment the RTOS tick. */ - if( xTaskIncrementTick() != pdFALSE ) - { - /* A context switch is required. Context switching is performed in - the PendSV interrupt. Pend the PendSV interrupt. */ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; - } - } - portENABLE_INTERRUPTS(); -} -/*-----------------------------------------------------------*/ - -#if configUSE_TICKLESS_IDLE == 1 - - __attribute__((weak)) void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime ) - { - uint32_t ulReloadValue, ulCompleteTickPeriods, ulCompletedSysTickDecrements, ulSysTickCTRL; - TickType_t xModifiableIdleTime; - - /* Make sure the SysTick reload value does not overflow the counter. */ - if( xExpectedIdleTime > xMaximumPossibleSuppressedTicks ) - { - xExpectedIdleTime = xMaximumPossibleSuppressedTicks; - } - - /* Stop the SysTick momentarily. The time the SysTick is stopped for - is accounted for as best it can be, but using the tickless mode will - inevitably result in some tiny drift of the time maintained by the - kernel with respect to calendar time. */ - portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT; - - /* Calculate the reload value required to wait xExpectedIdleTime - tick periods. -1 is used because this code will execute part way - through one of the tick periods. */ - ulReloadValue = portNVIC_SYSTICK_CURRENT_VALUE_REG + ( ulTimerCountsForOneTick * ( xExpectedIdleTime - 1UL ) ); - if( ulReloadValue > ulStoppedTimerCompensation ) - { - ulReloadValue -= ulStoppedTimerCompensation; - } - - /* Enter a critical section but don't use the taskENTER_CRITICAL() - method as that will mask interrupts that should exit sleep mode. */ - __asm volatile( "cpsid i" ); - __asm volatile( "dsb" ); - __asm volatile( "isb" ); - - /* If a context switch is pending or a task is waiting for the scheduler - to be unsuspended then abandon the low power entry. */ - if( eTaskConfirmSleepModeStatus() == eAbortSleep ) - { - /* Restart from whatever is left in the count register to complete - this tick period. */ - portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Reset the reload register to the value required for normal tick - periods. */ - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - - /* Re-enable interrupts - see comments above the cpsid instruction() - above. */ - __asm volatile( "cpsie i" ); - } - else - { - /* Set the new reload value. */ - portNVIC_SYSTICK_LOAD_REG = ulReloadValue; - - /* Clear the SysTick count flag and set the count value back to - zero. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - - /* Restart SysTick. */ - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - - /* Sleep until something happens. configPRE_SLEEP_PROCESSING() can - set its parameter to 0 to indicate that its implementation contains - its own wait for interrupt or wait for event instruction, and so wfi - should not be executed again. However, the original expected idle - time variable must remain unmodified, so a copy is taken. */ - xModifiableIdleTime = xExpectedIdleTime; - configPRE_SLEEP_PROCESSING( xModifiableIdleTime ); - if( xModifiableIdleTime > 0 ) - { - __asm volatile( "dsb" ); - __asm volatile( "wfi" ); - __asm volatile( "isb" ); - } - configPOST_SLEEP_PROCESSING( xExpectedIdleTime ); - - /* Stop SysTick. Again, the time the SysTick is stopped for is - accounted for as best it can be, but using the tickless mode will - inevitably result in some tiny drift of the time maintained by the - kernel with respect to calendar time. */ - ulSysTickCTRL = portNVIC_SYSTICK_CTRL_REG; - portNVIC_SYSTICK_CTRL_REG = ( ulSysTickCTRL & ~portNVIC_SYSTICK_ENABLE_BIT ); - - /* Re-enable interrupts - see comments above the cpsid instruction() - above. */ - __asm volatile( "cpsie i" ); - - if( ( ulSysTickCTRL & portNVIC_SYSTICK_COUNT_FLAG_BIT ) != 0 ) - { - uint32_t ulCalculatedLoadValue; - - /* The tick interrupt has already executed, and the SysTick - count reloaded with ulReloadValue. Reset the - portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick - period. */ - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG ); - - /* Don't allow a tiny value, or values that have somehow - underflowed because the post sleep hook did something - that took too long. */ - if( ( ulCalculatedLoadValue < ulStoppedTimerCompensation ) || ( ulCalculatedLoadValue > ulTimerCountsForOneTick ) ) - { - ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ); - } - - portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue; - - /* The tick interrupt handler will already have pended the tick - processing in the kernel. As the pending tick will be - processed as soon as this function exits, the tick value - maintained by the tick is stepped forward by one less than the - time spent waiting. */ - ulCompleteTickPeriods = xExpectedIdleTime - 1UL; - } - else - { - /* Something other than the tick interrupt ended the sleep. - Work out how long the sleep lasted rounded to complete tick - periods (not the ulReload value which accounted for part - ticks). */ - ulCompletedSysTickDecrements = ( xExpectedIdleTime * ulTimerCountsForOneTick ) - portNVIC_SYSTICK_CURRENT_VALUE_REG; - - /* How many complete tick periods passed while the processor - was waiting? */ - ulCompleteTickPeriods = ulCompletedSysTickDecrements / ulTimerCountsForOneTick; - - /* The reload value is set to whatever fraction of a single tick - period remains. */ - portNVIC_SYSTICK_LOAD_REG = ( ( ulCompleteTickPeriods + 1UL ) * ulTimerCountsForOneTick ) - ulCompletedSysTickDecrements; - } - - /* Restart SysTick so it runs from portNVIC_SYSTICK_LOAD_REG - again, then set portNVIC_SYSTICK_LOAD_REG back to its standard - value. The critical section is used to ensure the tick interrupt - can only execute once in the case that the reload register is near - zero. */ - portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; - portENTER_CRITICAL(); - { - portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT; - vTaskStepTick( ulCompleteTickPeriods ); - portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; - } - portEXIT_CRITICAL(); - } - } - -#endif /* #if configUSE_TICKLESS_IDLE */ -/*-----------------------------------------------------------*/ - -/* - * Setup the systick timer to generate the tick interrupts at the required - * frequency. - */ -__attribute__(( weak )) void vPortSetupTimerInterrupt( void ) -{ - /* Calculate the constants required to configure the tick interrupt. */ - #if configUSE_TICKLESS_IDLE == 1 - { - ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ); - xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick; - ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ ); - } - #endif /* configUSE_TICKLESS_IDLE */ - - /* Configure SysTick to interrupt at the requested rate. */ - portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; - portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT ); -} -/*-----------------------------------------------------------*/ - -/* This is a naked function. */ -static void vPortEnableVFP( void ) -{ - __asm volatile - ( - " ldr.w r0, =0xE000ED88 \n" /* The FPU enable bits are in the CPACR. */ - " ldr r1, [r0] \n" - " \n" - " orr r1, r1, #( 0xf << 20 ) \n" /* Enable CP10 and CP11 coprocessors, then save back. */ - " str r1, [r0] \n" - " bx r14 " - ); -} -/*-----------------------------------------------------------*/ - -#if( configASSERT_DEFINED == 1 ) - - void vPortValidateInterruptPriority( void ) - { - uint32_t ulCurrentInterrupt; - uint8_t ucCurrentPriority; - - /* Obtain the number of the currently executing interrupt. */ - __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) ); - - /* Is the interrupt number a user defined interrupt? */ - if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER ) - { - /* Look up the interrupt's priority. */ - ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ]; - - /* The following assertion will fail if a service routine (ISR) for - an interrupt that has been assigned a priority above - configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API - function. ISR safe FreeRTOS API functions must *only* be called - from interrupts that have been assigned a priority at or below - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Numerically low interrupt priority numbers represent logically high - interrupt priorities, therefore the priority of the interrupt must - be set to a value equal to or numerically *higher* than - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Interrupts that use the FreeRTOS API must not be left at their - default priority of zero as that is the highest possible priority, - which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY, - and therefore also guaranteed to be invalid. - - FreeRTOS maintains separate thread and ISR API functions to ensure - interrupt entry is as fast and simple as possible. - - The following links provide detailed information: - http://www.freertos.org/RTOS-Cortex-M3-M4.html - http://www.freertos.org/FAQHelp.html */ - configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); - } - - /* Priority grouping: The interrupt controller (NVIC) allows the bits - that define each interrupt's priority to be split between bits that - define the interrupt's pre-emption priority bits and bits that define - the interrupt's sub-priority. For simplicity all bits must be defined - to be pre-emption priority bits. The following assertion will fail if - this is not the case (if some bits represent a sub-priority). - - If the application only uses CMSIS libraries for interrupt - configuration then the correct setting can be achieved on all Cortex-M - devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the - scheduler. Note however that some vendor specific peripheral libraries - assume a non-zero priority group setting, in which cases using a value - of zero will result in unpredicable behaviour. */ - configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue ); - } - -#endif /* configASSERT_DEFINED */ - - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM4F/portmacro.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM4F/portmacro.h deleted file mode 100644 index d44fc92..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM4F/portmacro.h +++ /dev/null @@ -1,284 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - - -#ifndef PORTMACRO_H -#define PORTMACRO_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*----------------------------------------------------------- - * Port specific definitions. - * - * The settings in this file configure FreeRTOS correctly for the - * given hardware and compiler. - * - * These settings should not be altered. - *----------------------------------------------------------- - */ - -/* Type definitions. */ -#define portCHAR char -#define portFLOAT float -#define portDOUBLE double -#define portLONG long -#define portSHORT short -#define portSTACK_TYPE uint32_t -#define portBASE_TYPE long - -typedef portSTACK_TYPE StackType_t; -typedef long BaseType_t; -typedef unsigned long UBaseType_t; - -#if( configUSE_16_BIT_TICKS == 1 ) - typedef uint16_t TickType_t; - #define portMAX_DELAY ( TickType_t ) 0xffff -#else - typedef uint32_t TickType_t; - #define portMAX_DELAY ( TickType_t ) 0xffffffffUL - - /* 32-bit tick type on a 32-bit architecture, so reads of the tick count do - not need to be guarded with a critical section. */ - #define portTICK_TYPE_IS_ATOMIC 1 -#endif -/*-----------------------------------------------------------*/ - -/* Architecture specifics. */ -#define portSTACK_GROWTH ( -1 ) -#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) -#define portBYTE_ALIGNMENT 8 -/*-----------------------------------------------------------*/ - -/* Scheduler utilities. */ -#define portYIELD() \ -{ \ - /* Set a PendSV to request a context switch. */ \ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; \ - \ - /* Barriers are normally not required but do ensure the code is completely \ - within the specified behaviour for the architecture. */ \ - __asm volatile( "dsb" ); \ - __asm volatile( "isb" ); \ -} - -#define portNVIC_INT_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000ed04 ) ) -#define portNVIC_PENDSVSET_BIT ( 1UL << 28UL ) -#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired != pdFALSE ) portYIELD() -#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x ) -/*-----------------------------------------------------------*/ - -/* Critical section management. */ -extern void vPortEnterCritical( void ); -extern void vPortExitCritical( void ); -#define portSET_INTERRUPT_MASK_FROM_ISR() ulPortRaiseBASEPRI() -#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortSetBASEPRI(x) -#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI() -#define portENABLE_INTERRUPTS() vPortSetBASEPRI(0) -#define portENTER_CRITICAL() vPortEnterCritical() -#define portEXIT_CRITICAL() vPortExitCritical() - -/*-----------------------------------------------------------*/ - -/* Task function macros as described on the FreeRTOS.org WEB site. These are -not necessary for to use this port. They are defined so the common demo files -(which build with all the ports) will build. */ -#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) -#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) -/*-----------------------------------------------------------*/ - -/* Tickless idle/low power functionality. */ -#ifndef portSUPPRESS_TICKS_AND_SLEEP - extern void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime ); - #define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime ) vPortSuppressTicksAndSleep( xExpectedIdleTime ) -#endif -/*-----------------------------------------------------------*/ - -/* Architecture specific optimisations. */ -#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION - #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 -#endif - -#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1 - - /* Generic helper function. */ - __attribute__( ( always_inline ) ) static inline uint8_t ucPortCountLeadingZeros( uint32_t ulBitmap ) - { - uint8_t ucReturn; - - __asm volatile ( "clz %0, %1" : "=r" ( ucReturn ) : "r" ( ulBitmap ) ); - return ucReturn; - } - - /* Check the configuration. */ - #if( configMAX_PRIORITIES > 32 ) - #error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice. - #endif - - /* Store/clear the ready priorities in a bit map. */ - #define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) ) - #define portRESET_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) &= ~( 1UL << ( uxPriority ) ) - - /*-----------------------------------------------------------*/ - - #define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) uxTopPriority = ( 31UL - ( uint32_t ) ucPortCountLeadingZeros( ( uxReadyPriorities ) ) ) - -#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */ - -/*-----------------------------------------------------------*/ - -#ifdef configASSERT - void vPortValidateInterruptPriority( void ); - #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority() -#endif - -/* portNOP() is not required by this port. */ -#define portNOP() - -#define portINLINE __inline - -#ifndef portFORCE_INLINE - #define portFORCE_INLINE inline __attribute__(( always_inline)) -#endif - -portFORCE_INLINE static BaseType_t xPortIsInsideInterrupt( void ) -{ -uint32_t ulCurrentInterrupt; -BaseType_t xReturn; - - /* Obtain the number of the currently executing interrupt. */ - __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) ); - - if( ulCurrentInterrupt == 0 ) - { - xReturn = pdFALSE; - } - else - { - xReturn = pdTRUE; - } - - return xReturn; -} - -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static void vPortRaiseBASEPRI( void ) -{ -uint32_t ulNewBASEPRI; - - __asm volatile - ( - " mov %0, %1 \n" \ - " msr basepri, %0 \n" \ - " isb \n" \ - " dsb \n" \ - :"=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) - ); -} - -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void ) -{ -uint32_t ulOriginalBASEPRI, ulNewBASEPRI; - - __asm volatile - ( - " mrs %0, basepri \n" \ - " mov %1, %2 \n" \ - " msr basepri, %1 \n" \ - " isb \n" \ - " dsb \n" \ - :"=r" (ulOriginalBASEPRI), "=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) - ); - - /* This return will not be reached but is necessary to prevent compiler - warnings. */ - return ulOriginalBASEPRI; -} -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue ) -{ - __asm volatile - ( - " msr basepri, %0 " :: "r" ( ulNewMaskValue ) - ); -} -/*-----------------------------------------------------------*/ - - -#ifdef __cplusplus -} -#endif - -#endif /* PORTMACRO_H */ - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM4_MPU/port.c b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM4_MPU/port.c deleted file mode 100644 index 63f4191..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM4_MPU/port.c +++ /dev/null @@ -1,819 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -/*----------------------------------------------------------- - * Implementation of functions defined in portable.h for the ARM CM3 port. - *----------------------------------------------------------*/ - -/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining -all the API functions to use the MPU wrappers. That should only be done when -task.h is included from an application file. */ -#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE - -/* Scheduler includes. */ -#include "FreeRTOS.h" -#include "queue.h" -#include "event_groups.h" -#include "mpu_prototypes.h" - -#ifndef __VFP_FP__ - #error This port can only be used when the project options are configured to enable hardware floating point support. -#endif - -#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE - -/* Constants required to access and manipulate the NVIC. */ -#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000e010 ) ) -#define portNVIC_SYSTICK_LOAD_REG ( * ( ( volatile uint32_t * ) 0xe000e014 ) ) -#define portNVIC_SYSPRI2_REG ( * ( ( volatile uint32_t * ) 0xe000ed20 ) ) -#define portNVIC_SYSPRI1_REG ( * ( ( volatile uint32_t * ) 0xe000ed1c ) ) -#define portNVIC_SYS_CTRL_STATE_REG ( * ( ( volatile uint32_t * ) 0xe000ed24 ) ) -#define portNVIC_MEM_FAULT_ENABLE ( 1UL << 16UL ) - -/* Constants required to access and manipulate the MPU. */ -#define portMPU_TYPE_REG ( * ( ( volatile uint32_t * ) 0xe000ed90 ) ) -#define portMPU_REGION_BASE_ADDRESS_REG ( * ( ( volatile uint32_t * ) 0xe000ed9C ) ) -#define portMPU_REGION_ATTRIBUTE_REG ( * ( ( volatile uint32_t * ) 0xe000edA0 ) ) -#define portMPU_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000ed94 ) ) -#define portEXPECTED_MPU_TYPE_VALUE ( 8UL << 8UL ) /* 8 regions, unified. */ -#define portMPU_ENABLE ( 0x01UL ) -#define portMPU_BACKGROUND_ENABLE ( 1UL << 2UL ) -#define portPRIVILEGED_EXECUTION_START_ADDRESS ( 0UL ) -#define portMPU_REGION_VALID ( 0x10UL ) -#define portMPU_REGION_ENABLE ( 0x01UL ) -#define portPERIPHERALS_START_ADDRESS 0x40000000UL -#define portPERIPHERALS_END_ADDRESS 0x5FFFFFFFUL - -/* Constants required to access and manipulate the SysTick. */ -#define portNVIC_SYSTICK_CLK ( 0x00000004UL ) -#define portNVIC_SYSTICK_INT ( 0x00000002UL ) -#define portNVIC_SYSTICK_ENABLE ( 0x00000001UL ) -#define portNVIC_PENDSV_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL ) -#define portNVIC_SYSTICK_PRI ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL ) -#define portNVIC_SVC_PRI ( ( ( uint32_t ) configMAX_SYSCALL_INTERRUPT_PRIORITY - 1UL ) << 24UL ) - -/* Constants required to manipulate the VFP. */ -#define portFPCCR ( ( volatile uint32_t * ) 0xe000ef34UL ) /* Floating point context control register. */ -#define portASPEN_AND_LSPEN_BITS ( 0x3UL << 30UL ) - -/* Constants required to set up the initial stack. */ -#define portINITIAL_XPSR ( 0x01000000UL ) -#define portINITIAL_EXEC_RETURN ( 0xfffffffdUL ) -#define portINITIAL_CONTROL_IF_UNPRIVILEGED ( 0x03 ) -#define portINITIAL_CONTROL_IF_PRIVILEGED ( 0x02 ) - -/* Constants required to check the validity of an interrupt priority. */ -#define portFIRST_USER_INTERRUPT_NUMBER ( 16 ) -#define portNVIC_IP_REGISTERS_OFFSET_16 ( 0xE000E3F0 ) -#define portAIRCR_REG ( * ( ( volatile uint32_t * ) 0xE000ED0C ) ) -#define portMAX_8_BIT_VALUE ( ( uint8_t ) 0xff ) -#define portTOP_BIT_OF_BYTE ( ( uint8_t ) 0x80 ) -#define portMAX_PRIGROUP_BITS ( ( uint8_t ) 7 ) -#define portPRIORITY_GROUP_MASK ( 0x07UL << 8UL ) -#define portPRIGROUP_SHIFT ( 8UL ) - -/* Offsets in the stack to the parameters when inside the SVC handler. */ -#define portOFFSET_TO_PC ( 6 ) - -/* For strict compliance with the Cortex-M spec the task start address should -have bit-0 clear, as it is loaded into the PC on exit from an ISR. */ -#define portSTART_ADDRESS_MASK ( ( StackType_t ) 0xfffffffeUL ) - -/* Each task maintains its own interrupt status in the critical nesting -variable. Note this is not saved as part of the task context as context -switches can only occur when uxCriticalNesting is zero. */ -static UBaseType_t uxCriticalNesting = 0xaaaaaaaa; - -/* - * Setup the timer to generate the tick interrupts. - */ -static void prvSetupTimerInterrupt( void ) PRIVILEGED_FUNCTION; - -/* - * Configure a number of standard MPU regions that are used by all tasks. - */ -static void prvSetupMPU( void ) PRIVILEGED_FUNCTION; - -/* - * Return the smallest MPU region size that a given number of bytes will fit - * into. The region size is returned as the value that should be programmed - * into the region attribute register for that region. - */ -static uint32_t prvGetMPURegionSizeSetting( uint32_t ulActualSizeInBytes ) PRIVILEGED_FUNCTION; - -/* - * Checks to see if being called from the context of an unprivileged task, and - * if so raises the privilege level and returns false - otherwise does nothing - * other than return true. - */ -BaseType_t xPortRaisePrivilege( void ) __attribute__(( naked )); - -/* - * Standard FreeRTOS exception handlers. - */ -void xPortPendSVHandler( void ) __attribute__ (( naked )) PRIVILEGED_FUNCTION; -void xPortSysTickHandler( void ) __attribute__ ((optimize("3"))) PRIVILEGED_FUNCTION; -void vPortSVCHandler( void ) __attribute__ (( naked )) PRIVILEGED_FUNCTION; - -/* - * Starts the scheduler by restoring the context of the first task to run. - */ -static void prvRestoreContextOfFirstTask( void ) __attribute__(( naked )) PRIVILEGED_FUNCTION; - -/* - * C portion of the SVC handler. The SVC handler is split between an asm entry - * and a C wrapper for simplicity of coding and maintenance. - */ -static void prvSVCHandler( uint32_t *pulRegisters ) __attribute__(( noinline )) PRIVILEGED_FUNCTION; - -/* - * Function to enable the VFP. - */ - static void vPortEnableVFP( void ) __attribute__ (( naked )); - -/* - * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure - * FreeRTOS API functions are not called from interrupts that have been assigned - * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY. - */ -#if ( configASSERT_DEFINED == 1 ) - static uint8_t ucMaxSysCallPriority = 0; - static uint32_t ulMaxPRIGROUPValue = 0; - static const volatile uint8_t * const pcInterruptPriorityRegisters = ( const volatile uint8_t * const ) portNVIC_IP_REGISTERS_OFFSET_16; -#endif /* configASSERT_DEFINED */ - -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged ) -{ - /* Simulate the stack frame as it would be created by a context switch - interrupt. */ - pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */ - *pxTopOfStack = portINITIAL_XPSR; /* xPSR */ - pxTopOfStack--; - *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */ - pxTopOfStack--; - *pxTopOfStack = 0; /* LR */ - pxTopOfStack -= 5; /* R12, R3, R2 and R1. */ - *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */ - - /* A save method is being used that requires each task to maintain its - own exec return value. */ - pxTopOfStack--; - *pxTopOfStack = portINITIAL_EXEC_RETURN; - - pxTopOfStack -= 9; /* R11, R10, R9, R8, R7, R6, R5 and R4. */ - - if( xRunPrivileged == pdTRUE ) - { - *pxTopOfStack = portINITIAL_CONTROL_IF_PRIVILEGED; - } - else - { - *pxTopOfStack = portINITIAL_CONTROL_IF_UNPRIVILEGED; - } - - return pxTopOfStack; -} -/*-----------------------------------------------------------*/ - -void vPortSVCHandler( void ) -{ - /* Assumes psp was in use. */ - __asm volatile - ( - #ifndef USE_PROCESS_STACK /* Code should not be required if a main() is using the process stack. */ - " tst lr, #4 \n" - " ite eq \n" - " mrseq r0, msp \n" - " mrsne r0, psp \n" - #else - " mrs r0, psp \n" - #endif - " b %0 \n" - ::"i"(prvSVCHandler):"r0" - ); -} -/*-----------------------------------------------------------*/ - -static void prvSVCHandler( uint32_t *pulParam ) -{ -uint8_t ucSVCNumber; - - /* The stack contains: r0, r1, r2, r3, r12, r14, the return address and - xPSR. The first argument (r0) is pulParam[ 0 ]. */ - ucSVCNumber = ( ( uint8_t * ) pulParam[ portOFFSET_TO_PC ] )[ -2 ]; - switch( ucSVCNumber ) - { - case portSVC_START_SCHEDULER : portNVIC_SYSPRI1_REG |= portNVIC_SVC_PRI; - prvRestoreContextOfFirstTask(); - break; - - case portSVC_YIELD : portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; - /* Barriers are normally not required - but do ensure the code is completely - within the specified behaviour for the - architecture. */ - __asm volatile( "dsb" ); - __asm volatile( "isb" ); - - break; - - case portSVC_RAISE_PRIVILEGE : __asm volatile - ( - " mrs r1, control \n" /* Obtain current control value. */ - " bic r1, #1 \n" /* Set privilege bit. */ - " msr control, r1 \n" /* Write back new control value. */ - :::"r1" - ); - break; - - default : /* Unknown SVC call. */ - break; - } -} -/*-----------------------------------------------------------*/ - -static void prvRestoreContextOfFirstTask( void ) -{ - __asm volatile - ( - " ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate the stack. */ - " ldr r0, [r0] \n" - " ldr r0, [r0] \n" - " msr msp, r0 \n" /* Set the msp back to the start of the stack. */ - " ldr r3, pxCurrentTCBConst2 \n" /* Restore the context. */ - " ldr r1, [r3] \n" - " ldr r0, [r1] \n" /* The first item in the TCB is the task top of stack. */ - " add r1, r1, #4 \n" /* Move onto the second item in the TCB... */ - " ldr r2, =0xe000ed9c \n" /* Region Base Address register. */ - " ldmia r1!, {r4-r11} \n" /* Read 4 sets of MPU registers. */ - " stmia r2!, {r4-r11} \n" /* Write 4 sets of MPU registers. */ - " ldmia r0!, {r3-r11, r14} \n" /* Pop the registers that are not automatically saved on exception entry. */ - " msr control, r3 \n" - " msr psp, r0 \n" /* Restore the task stack pointer. */ - " mov r0, #0 \n" - " msr basepri, r0 \n" - " bx r14 \n" - " \n" - " .align 4 \n" - "pxCurrentTCBConst2: .word pxCurrentTCB \n" - ); -} -/*-----------------------------------------------------------*/ - -/* - * See header file for description. - */ -BaseType_t xPortStartScheduler( void ) -{ - /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0. See - http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */ - configASSERT( ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) ); - - #if( configASSERT_DEFINED == 1 ) - { - volatile uint32_t ulOriginalPriority; - volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER ); - volatile uint8_t ucMaxPriorityValue; - - /* Determine the maximum priority from which ISR safe FreeRTOS API - functions can be called. ISR safe functions are those that end in - "FromISR". FreeRTOS maintains separate thread and ISR API functions to - ensure interrupt entry is as fast and simple as possible. - - Save the interrupt priority value that is about to be clobbered. */ - ulOriginalPriority = *pucFirstUserPriorityRegister; - - /* Determine the number of priority bits available. First write to all - possible bits. */ - *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE; - - /* Read the value back to see how many bits stuck. */ - ucMaxPriorityValue = *pucFirstUserPriorityRegister; - - /* Use the same mask on the maximum system call priority. */ - ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue; - - /* Calculate the maximum acceptable priority group value for the number - of bits read back. */ - ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS; - while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE ) - { - ulMaxPRIGROUPValue--; - ucMaxPriorityValue <<= ( uint8_t ) 0x01; - } - - /* Shift the priority group value back to its position within the AIRCR - register. */ - ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT; - ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK; - - /* Restore the clobbered interrupt priority register to its original - value. */ - *pucFirstUserPriorityRegister = ulOriginalPriority; - } - #endif /* conifgASSERT_DEFINED */ - - /* Make PendSV and SysTick the same priority as the kernel, and the SVC - handler higher priority so it can be used to exit a critical section (where - lower priorities are masked). */ - portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI; - portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI; - - /* Configure the regions in the MPU that are common to all tasks. */ - prvSetupMPU(); - - /* Start the timer that generates the tick ISR. Interrupts are disabled - here already. */ - prvSetupTimerInterrupt(); - - /* Initialise the critical nesting count ready for the first task. */ - uxCriticalNesting = 0; - - /* Ensure the VFP is enabled - it should be anyway. */ - vPortEnableVFP(); - - /* Lazy save always. */ - *( portFPCCR ) |= portASPEN_AND_LSPEN_BITS; - - /* Start the first task. */ - __asm volatile( - " ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate the stack. */ - " ldr r0, [r0] \n" - " ldr r0, [r0] \n" - " msr msp, r0 \n" /* Set the msp back to the start of the stack. */ - " cpsie i \n" /* Globally enable interrupts. */ - " cpsie f \n" - " dsb \n" - " isb \n" - " svc %0 \n" /* System call to start first task. */ - " nop \n" - :: "i" (portSVC_START_SCHEDULER) ); - - /* Should not get here! */ - return 0; -} -/*-----------------------------------------------------------*/ - -void vPortEndScheduler( void ) -{ - /* Not implemented in ports where there is nothing to return to. - Artificially force an assert. */ - configASSERT( uxCriticalNesting == 1000UL ); -} -/*-----------------------------------------------------------*/ - -void vPortEnterCritical( void ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - portDISABLE_INTERRUPTS(); - uxCriticalNesting++; - - vPortResetPrivilege( xRunningPrivileged ); -} -/*-----------------------------------------------------------*/ - -void vPortExitCritical( void ) -{ -BaseType_t xRunningPrivileged = xPortRaisePrivilege(); - - configASSERT( uxCriticalNesting ); - uxCriticalNesting--; - if( uxCriticalNesting == 0 ) - { - portENABLE_INTERRUPTS(); - } - vPortResetPrivilege( xRunningPrivileged ); -} -/*-----------------------------------------------------------*/ - -void xPortPendSVHandler( void ) -{ - /* This is a naked function. */ - - __asm volatile - ( - " mrs r0, psp \n" - " \n" - " ldr r3, pxCurrentTCBConst \n" /* Get the location of the current TCB. */ - " ldr r2, [r3] \n" - " \n" - " tst r14, #0x10 \n" /* Is the task using the FPU context? If so, push high vfp registers. */ - " it eq \n" - " vstmdbeq r0!, {s16-s31} \n" - " \n" - " mrs r1, control \n" - " stmdb r0!, {r1, r4-r11, r14} \n" /* Save the remaining registers. */ - " str r0, [r2] \n" /* Save the new top of stack into the first member of the TCB. */ - " \n" - " stmdb sp!, {r3} \n" - " mov r0, %0 \n" - " msr basepri, r0 \n" - " dsb \n" - " isb \n" - " bl vTaskSwitchContext \n" - " mov r0, #0 \n" - " msr basepri, r0 \n" - " ldmia sp!, {r3} \n" - " \n" /* Restore the context. */ - " ldr r1, [r3] \n" - " ldr r0, [r1] \n" /* The first item in the TCB is the task top of stack. */ - " add r1, r1, #4 \n" /* Move onto the second item in the TCB... */ - " ldr r2, =0xe000ed9c \n" /* Region Base Address register. */ - " ldmia r1!, {r4-r11} \n" /* Read 4 sets of MPU registers. */ - " stmia r2!, {r4-r11} \n" /* Write 4 sets of MPU registers. */ - " ldmia r0!, {r3-r11, r14} \n" /* Pop the registers that are not automatically saved on exception entry. */ - " msr control, r3 \n" - " \n" - " tst r14, #0x10 \n" /* Is the task using the FPU context? If so, pop the high vfp registers too. */ - " it eq \n" - " vldmiaeq r0!, {s16-s31} \n" - " \n" - " msr psp, r0 \n" - " bx r14 \n" - " \n" - " .align 4 \n" - "pxCurrentTCBConst: .word pxCurrentTCB \n" - ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) - ); -} -/*-----------------------------------------------------------*/ - -void xPortSysTickHandler( void ) -{ -uint32_t ulDummy; - - ulDummy = portSET_INTERRUPT_MASK_FROM_ISR(); - { - /* Increment the RTOS tick. */ - if( xTaskIncrementTick() != pdFALSE ) - { - /* Pend a context switch. */ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; - } - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( ulDummy ); -} -/*-----------------------------------------------------------*/ - -/* - * Setup the systick timer to generate the tick interrupts at the required - * frequency. - */ -static void prvSetupTimerInterrupt( void ) -{ - /* Configure SysTick to interrupt at the requested rate. */ - portNVIC_SYSTICK_LOAD_REG = ( configCPU_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; - portNVIC_SYSTICK_CTRL_REG = portNVIC_SYSTICK_CLK | portNVIC_SYSTICK_INT | portNVIC_SYSTICK_ENABLE; -} -/*-----------------------------------------------------------*/ - -/* This is a naked function. */ -static void vPortEnableVFP( void ) -{ - __asm volatile - ( - " ldr.w r0, =0xE000ED88 \n" /* The FPU enable bits are in the CPACR. */ - " ldr r1, [r0] \n" - " \n" - " orr r1, r1, #( 0xf << 20 ) \n" /* Enable CP10 and CP11 coprocessors, then save back. */ - " str r1, [r0] \n" - " bx r14 " - ); -} -/*-----------------------------------------------------------*/ - -static void prvSetupMPU( void ) -{ -extern uint32_t __privileged_functions_end__[]; -extern uint32_t __FLASH_segment_start__[]; -extern uint32_t __FLASH_segment_end__[]; -extern uint32_t __privileged_data_start__[]; -extern uint32_t __privileged_data_end__[]; - - /* Check the expected MPU is present. */ - if( portMPU_TYPE_REG == portEXPECTED_MPU_TYPE_VALUE ) - { - /* First setup the entire flash for unprivileged read only access. */ - portMPU_REGION_BASE_ADDRESS_REG = ( ( uint32_t ) __FLASH_segment_start__ ) | /* Base address. */ - ( portMPU_REGION_VALID ) | - ( portUNPRIVILEGED_FLASH_REGION ); - - portMPU_REGION_ATTRIBUTE_REG = ( portMPU_REGION_READ_ONLY ) | - ( portMPU_REGION_CACHEABLE_BUFFERABLE ) | - ( prvGetMPURegionSizeSetting( ( uint32_t ) __FLASH_segment_end__ - ( uint32_t ) __FLASH_segment_start__ ) ) | - ( portMPU_REGION_ENABLE ); - - /* Setup the first 16K for privileged only access (even though less - than 10K is actually being used). This is where the kernel code is - placed. */ - portMPU_REGION_BASE_ADDRESS_REG = ( ( uint32_t ) __FLASH_segment_start__ ) | /* Base address. */ - ( portMPU_REGION_VALID ) | - ( portPRIVILEGED_FLASH_REGION ); - - portMPU_REGION_ATTRIBUTE_REG = ( portMPU_REGION_PRIVILEGED_READ_ONLY ) | - ( portMPU_REGION_CACHEABLE_BUFFERABLE ) | - ( prvGetMPURegionSizeSetting( ( uint32_t ) __privileged_functions_end__ - ( uint32_t ) __FLASH_segment_start__ ) ) | - ( portMPU_REGION_ENABLE ); - - /* Setup the privileged data RAM region. This is where the kernel data - is placed. */ - portMPU_REGION_BASE_ADDRESS_REG = ( ( uint32_t ) __privileged_data_start__ ) | /* Base address. */ - ( portMPU_REGION_VALID ) | - ( portPRIVILEGED_RAM_REGION ); - - portMPU_REGION_ATTRIBUTE_REG = ( portMPU_REGION_PRIVILEGED_READ_WRITE ) | - ( portMPU_REGION_CACHEABLE_BUFFERABLE ) | - prvGetMPURegionSizeSetting( ( uint32_t ) __privileged_data_end__ - ( uint32_t ) __privileged_data_start__ ) | - ( portMPU_REGION_ENABLE ); - - /* By default allow everything to access the general peripherals. The - system peripherals and registers are protected. */ - portMPU_REGION_BASE_ADDRESS_REG = ( portPERIPHERALS_START_ADDRESS ) | - ( portMPU_REGION_VALID ) | - ( portGENERAL_PERIPHERALS_REGION ); - - portMPU_REGION_ATTRIBUTE_REG = ( portMPU_REGION_READ_WRITE | portMPU_REGION_EXECUTE_NEVER ) | - ( prvGetMPURegionSizeSetting( portPERIPHERALS_END_ADDRESS - portPERIPHERALS_START_ADDRESS ) ) | - ( portMPU_REGION_ENABLE ); - - /* Enable the memory fault exception. */ - portNVIC_SYS_CTRL_STATE_REG |= portNVIC_MEM_FAULT_ENABLE; - - /* Enable the MPU with the background region configured. */ - portMPU_CTRL_REG |= ( portMPU_ENABLE | portMPU_BACKGROUND_ENABLE ); - } -} -/*-----------------------------------------------------------*/ - -static uint32_t prvGetMPURegionSizeSetting( uint32_t ulActualSizeInBytes ) -{ -uint32_t ulRegionSize, ulReturnValue = 4; - - /* 32 is the smallest region size, 31 is the largest valid value for - ulReturnValue. */ - for( ulRegionSize = 32UL; ulReturnValue < 31UL; ( ulRegionSize <<= 1UL ) ) - { - if( ulActualSizeInBytes <= ulRegionSize ) - { - break; - } - else - { - ulReturnValue++; - } - } - - /* Shift the code by one before returning so it can be written directly - into the the correct bit position of the attribute register. */ - return ( ulReturnValue << 1UL ); -} -/*-----------------------------------------------------------*/ - -BaseType_t xPortRaisePrivilege( void ) -{ - __asm volatile - ( - " mrs r0, control \n" - " tst r0, #1 \n" /* Is the task running privileged? */ - " itte ne \n" - " movne r0, #0 \n" /* CONTROL[0]!=0, return false. */ - " svcne %0 \n" /* Switch to privileged. */ - " moveq r0, #1 \n" /* CONTROL[0]==0, return true. */ - " bx lr \n" - :: "i" (portSVC_RAISE_PRIVILEGE) : "r0" - ); - - return 0; -} -/*-----------------------------------------------------------*/ - -void vPortStoreTaskMPUSettings( xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION * const xRegions, StackType_t *pxBottomOfStack, uint32_t ulStackDepth ) -{ -extern uint32_t __SRAM_segment_start__[]; -extern uint32_t __SRAM_segment_end__[]; -extern uint32_t __privileged_data_start__[]; -extern uint32_t __privileged_data_end__[]; -int32_t lIndex; -uint32_t ul; - - if( xRegions == NULL ) - { - /* No MPU regions are specified so allow access to all RAM. */ - xMPUSettings->xRegion[ 0 ].ulRegionBaseAddress = - ( ( uint32_t ) __SRAM_segment_start__ ) | /* Base address. */ - ( portMPU_REGION_VALID ) | - ( portSTACK_REGION ); - - xMPUSettings->xRegion[ 0 ].ulRegionAttribute = - ( portMPU_REGION_READ_WRITE ) | - ( portMPU_REGION_CACHEABLE_BUFFERABLE ) | - ( prvGetMPURegionSizeSetting( ( uint32_t ) __SRAM_segment_end__ - ( uint32_t ) __SRAM_segment_start__ ) ) | - ( portMPU_REGION_ENABLE ); - - /* Re-instate the privileged only RAM region as xRegion[ 0 ] will have - just removed the privileged only parameters. */ - xMPUSettings->xRegion[ 1 ].ulRegionBaseAddress = - ( ( uint32_t ) __privileged_data_start__ ) | /* Base address. */ - ( portMPU_REGION_VALID ) | - ( portSTACK_REGION + 1 ); - - xMPUSettings->xRegion[ 1 ].ulRegionAttribute = - ( portMPU_REGION_PRIVILEGED_READ_WRITE ) | - ( portMPU_REGION_CACHEABLE_BUFFERABLE ) | - prvGetMPURegionSizeSetting( ( uint32_t ) __privileged_data_end__ - ( uint32_t ) __privileged_data_start__ ) | - ( portMPU_REGION_ENABLE ); - - /* Invalidate all other regions. */ - for( ul = 2; ul <= portNUM_CONFIGURABLE_REGIONS; ul++ ) - { - xMPUSettings->xRegion[ ul ].ulRegionBaseAddress = ( portSTACK_REGION + ul ) | portMPU_REGION_VALID; - xMPUSettings->xRegion[ ul ].ulRegionAttribute = 0UL; - } - } - else - { - /* This function is called automatically when the task is created - in - which case the stack region parameters will be valid. At all other - times the stack parameters will not be valid and it is assumed that the - stack region has already been configured. */ - if( ulStackDepth > 0 ) - { - /* Define the region that allows access to the stack. */ - xMPUSettings->xRegion[ 0 ].ulRegionBaseAddress = - ( ( uint32_t ) pxBottomOfStack ) | - ( portMPU_REGION_VALID ) | - ( portSTACK_REGION ); /* Region number. */ - - xMPUSettings->xRegion[ 0 ].ulRegionAttribute = - ( portMPU_REGION_READ_WRITE ) | /* Read and write. */ - ( prvGetMPURegionSizeSetting( ulStackDepth * ( uint32_t ) sizeof( StackType_t ) ) ) | - ( portMPU_REGION_CACHEABLE_BUFFERABLE ) | - ( portMPU_REGION_ENABLE ); - } - - lIndex = 0; - - for( ul = 1; ul <= portNUM_CONFIGURABLE_REGIONS; ul++ ) - { - if( ( xRegions[ lIndex ] ).ulLengthInBytes > 0UL ) - { - /* Translate the generic region definition contained in - xRegions into the CM3 specific MPU settings that are then - stored in xMPUSettings. */ - xMPUSettings->xRegion[ ul ].ulRegionBaseAddress = - ( ( uint32_t ) xRegions[ lIndex ].pvBaseAddress ) | - ( portMPU_REGION_VALID ) | - ( portSTACK_REGION + ul ); /* Region number. */ - - xMPUSettings->xRegion[ ul ].ulRegionAttribute = - ( prvGetMPURegionSizeSetting( xRegions[ lIndex ].ulLengthInBytes ) ) | - ( xRegions[ lIndex ].ulParameters ) | - ( portMPU_REGION_ENABLE ); - } - else - { - /* Invalidate the region. */ - xMPUSettings->xRegion[ ul ].ulRegionBaseAddress = ( portSTACK_REGION + ul ) | portMPU_REGION_VALID; - xMPUSettings->xRegion[ ul ].ulRegionAttribute = 0UL; - } - - lIndex++; - } - } -} -/*-----------------------------------------------------------*/ - -#if( configASSERT_DEFINED == 1 ) - - void vPortValidateInterruptPriority( void ) - { - uint32_t ulCurrentInterrupt; - uint8_t ucCurrentPriority; - - /* Obtain the number of the currently executing interrupt. */ - __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) ); - - /* Is the interrupt number a user defined interrupt? */ - if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER ) - { - /* Look up the interrupt's priority. */ - ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ]; - - /* The following assertion will fail if a service routine (ISR) for - an interrupt that has been assigned a priority above - configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API - function. ISR safe FreeRTOS API functions must *only* be called - from interrupts that have been assigned a priority at or below - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Numerically low interrupt priority numbers represent logically high - interrupt priorities, therefore the priority of the interrupt must - be set to a value equal to or numerically *higher* than - configMAX_SYSCALL_INTERRUPT_PRIORITY. - - Interrupts that use the FreeRTOS API must not be left at their - default priority of zero as that is the highest possible priority, - which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY, - and therefore also guaranteed to be invalid. - - FreeRTOS maintains separate thread and ISR API functions to ensure - interrupt entry is as fast and simple as possible. - - The following links provide detailed information: - http://www.freertos.org/RTOS-Cortex-M3-M4.html - http://www.freertos.org/FAQHelp.html */ - configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); - } - - /* Priority grouping: The interrupt controller (NVIC) allows the bits - that define each interrupt's priority to be split between bits that - define the interrupt's pre-emption priority bits and bits that define - the interrupt's sub-priority. For simplicity all bits must be defined - to be pre-emption priority bits. The following assertion will fail if - this is not the case (if some bits represent a sub-priority). - - If the application only uses CMSIS libraries for interrupt - configuration then the correct setting can be achieved on all Cortex-M - devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the - scheduler. Note however that some vendor specific peripheral libraries - assume a non-zero priority group setting, in which cases using a value - of zero will result in unpredicable behaviour. */ - configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue ); - } - -#endif /* configASSERT_DEFINED */ -/*-----------------------------------------------------------*/ - - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM4_MPU/portmacro.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM4_MPU/portmacro.h deleted file mode 100644 index 15ca256..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/GCC/ARM_CM4_MPU/portmacro.h +++ /dev/null @@ -1,332 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - - -#ifndef PORTMACRO_H -#define PORTMACRO_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*----------------------------------------------------------- - * Port specific definitions. - * - * The settings in this file configure FreeRTOS correctly for the - * given hardware and compiler. - * - * These settings should not be altered. - *----------------------------------------------------------- - */ - -/* Type definitions. */ -#define portCHAR char -#define portFLOAT float -#define portDOUBLE double -#define portLONG long -#define portSHORT short -#define portSTACK_TYPE uint32_t -#define portBASE_TYPE long - -typedef portSTACK_TYPE StackType_t; -typedef long BaseType_t; -typedef unsigned long UBaseType_t; - -#if( configUSE_16_BIT_TICKS == 1 ) - typedef uint16_t TickType_t; - #define portMAX_DELAY ( TickType_t ) 0xffff -#else - typedef uint32_t TickType_t; - #define portMAX_DELAY ( TickType_t ) 0xffffffffUL - - /* 32-bit tick type on a 32-bit architecture, so reads of the tick count do - not need to be guarded with a critical section. */ - #define portTICK_TYPE_IS_ATOMIC 1 -#endif -/*-----------------------------------------------------------*/ - -/* MPU specific constants. */ -#define portUSING_MPU_WRAPPERS 1 -#define portPRIVILEGE_BIT ( 0x80000000UL ) - -#define portMPU_REGION_READ_WRITE ( 0x03UL << 24UL ) -#define portMPU_REGION_PRIVILEGED_READ_ONLY ( 0x05UL << 24UL ) -#define portMPU_REGION_READ_ONLY ( 0x06UL << 24UL ) -#define portMPU_REGION_PRIVILEGED_READ_WRITE ( 0x01UL << 24UL ) -#define portMPU_REGION_CACHEABLE_BUFFERABLE ( 0x07UL << 16UL ) -#define portMPU_REGION_EXECUTE_NEVER ( 0x01UL << 28UL ) - -#define portUNPRIVILEGED_FLASH_REGION ( 0UL ) -#define portPRIVILEGED_FLASH_REGION ( 1UL ) -#define portPRIVILEGED_RAM_REGION ( 2UL ) -#define portGENERAL_PERIPHERALS_REGION ( 3UL ) -#define portSTACK_REGION ( 4UL ) -#define portFIRST_CONFIGURABLE_REGION ( 5UL ) -#define portLAST_CONFIGURABLE_REGION ( 7UL ) -#define portNUM_CONFIGURABLE_REGIONS ( ( portLAST_CONFIGURABLE_REGION - portFIRST_CONFIGURABLE_REGION ) + 1 ) -#define portTOTAL_NUM_REGIONS ( portNUM_CONFIGURABLE_REGIONS + 1 ) /* Plus one to make space for the stack region. */ - -#define portSWITCH_TO_USER_MODE() __asm volatile ( " mrs r0, control \n orr r0, #1 \n msr control, r0 " :::"r0" ) - -typedef struct MPU_REGION_REGISTERS -{ - uint32_t ulRegionBaseAddress; - uint32_t ulRegionAttribute; -} xMPU_REGION_REGISTERS; - -/* Plus 1 to create space for the stack region. */ -typedef struct MPU_SETTINGS -{ - xMPU_REGION_REGISTERS xRegion[ portTOTAL_NUM_REGIONS ]; -} xMPU_SETTINGS; - -/* Architecture specifics. */ -#define portSTACK_GROWTH ( -1 ) -#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) -#define portBYTE_ALIGNMENT 8 -/*-----------------------------------------------------------*/ - -/* SVC numbers for various services. */ -#define portSVC_START_SCHEDULER 0 -#define portSVC_YIELD 1 -#define portSVC_RAISE_PRIVILEGE 2 - -/* Scheduler utilities. */ - -#define portYIELD() __asm volatile ( " SVC %0 \n" :: "i" (portSVC_YIELD) ) -#define portYIELD_WITHIN_API() \ -{ \ - /* Set a PendSV to request a context switch. */ \ - portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; \ - \ - /* Barriers are normally not required but do ensure the code is completely \ - within the specified behaviour for the architecture. */ \ - __asm volatile( "dsb" ); \ - __asm volatile( "isb" ); \ -} - -#define portNVIC_INT_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000ed04 ) ) -#define portNVIC_PENDSVSET_BIT ( 1UL << 28UL ) -#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired ) portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET -#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x ) -/*-----------------------------------------------------------*/ - -/* Critical section management. */ -extern void vPortEnterCritical( void ); -extern void vPortExitCritical( void ); -#define portSET_INTERRUPT_MASK_FROM_ISR() ulPortRaiseBASEPRI() -#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortSetBASEPRI(x) -#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI() -#define portENABLE_INTERRUPTS() vPortSetBASEPRI(0) -#define portENTER_CRITICAL() vPortEnterCritical() -#define portEXIT_CRITICAL() vPortExitCritical() - -/*-----------------------------------------------------------*/ - -/* Task function macros as described on the FreeRTOS.org WEB site. These are -not necessary for to use this port. They are defined so the common demo files -(which build with all the ports) will build. */ -#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) -#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) -/*-----------------------------------------------------------*/ - -/* Architecture specific optimisations. */ -#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION - #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 -#endif - -#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1 - - /* Generic helper function. */ - __attribute__( ( always_inline ) ) static inline uint8_t ucPortCountLeadingZeros( uint32_t ulBitmap ) - { - uint8_t ucReturn; - - __asm volatile ( "clz %0, %1" : "=r" ( ucReturn ) : "r" ( ulBitmap ) ); - return ucReturn; - } - - /* Check the configuration. */ - #if( configMAX_PRIORITIES > 32 ) - #error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice. - #endif - - /* Store/clear the ready priorities in a bit map. */ - #define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) ) - #define portRESET_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) &= ~( 1UL << ( uxPriority ) ) - - /*-----------------------------------------------------------*/ - - #define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) uxTopPriority = ( 31UL - ( uint32_t ) ucPortCountLeadingZeros( ( uxReadyPriorities ) ) ) - -#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */ - -/*-----------------------------------------------------------*/ - -#ifdef configASSERT - void vPortValidateInterruptPriority( void ); - #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority() -#endif - -/* portNOP() is not required by this port. */ -#define portNOP() - -#define portINLINE __inline - -#ifndef portFORCE_INLINE - #define portFORCE_INLINE inline __attribute__(( always_inline)) -#endif - -/* Set the privilege level to user mode if xRunningPrivileged is false. */ -portFORCE_INLINE static void vPortResetPrivilege( BaseType_t xRunningPrivileged ) -{ - if( xRunningPrivileged != pdTRUE ) - { - __asm volatile ( " mrs r0, control \n" \ - " orr r0, #1 \n" \ - " msr control, r0 \n" \ - :::"r0" ); - } -} -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static BaseType_t xPortIsInsideInterrupt( void ) -{ -uint32_t ulCurrentInterrupt; -BaseType_t xReturn; - - /* Obtain the number of the currently executing interrupt. */ - __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) ); - - if( ulCurrentInterrupt == 0 ) - { - xReturn = pdFALSE; - } - else - { - xReturn = pdTRUE; - } - - return xReturn; -} - -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static void vPortRaiseBASEPRI( void ) -{ -uint32_t ulNewBASEPRI; - - __asm volatile - ( - " mov %0, %1 \n" \ - " msr basepri, %0 \n" \ - " isb \n" \ - " dsb \n" \ - :"=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) - ); -} - -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void ) -{ -uint32_t ulOriginalBASEPRI, ulNewBASEPRI; - - __asm volatile - ( - " mrs %0, basepri \n" \ - " mov %1, %2 \n" \ - " msr basepri, %1 \n" \ - " isb \n" \ - " dsb \n" \ - :"=r" (ulOriginalBASEPRI), "=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) - ); - - /* This return will not be reached but is necessary to prevent compiler - warnings. */ - return ulOriginalBASEPRI; -} -/*-----------------------------------------------------------*/ - -portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue ) -{ - __asm volatile - ( - " msr basepri, %0 " :: "r" ( ulNewMaskValue ) - ); -} -/*-----------------------------------------------------------*/ - - -#ifdef __cplusplus -} -#endif - -#endif /* PORTMACRO_H */ - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/MemMang/heap_5.c b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/MemMang/heap_5.c deleted file mode 100644 index a290f80..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/portable/MemMang/heap_5.c +++ /dev/null @@ -1,654 +0,0 @@ -/* - FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that has become a de facto standard. * - * * - * Help yourself get started quickly and support the FreeRTOS * - * project by purchasing a FreeRTOS tutorial book, reference * - * manual, or both from: http://www.FreeRTOS.org/Documentation * - * * - * Thank you! * - * * - *************************************************************************** - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available from the following - link: http://www.freertos.org/a00114.html - - 1 tab == 4 spaces! - - *************************************************************************** - * * - * Having a problem? Start by reading the FAQ "My application does * - * not run, what could be wrong?" * - * * - * http://www.FreeRTOS.org/FAQHelp.html * - * * - *************************************************************************** - - http://www.FreeRTOS.org - Documentation, books, training, latest versions, - license and Real Time Engineers Ltd. contact details. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High - Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! - */ - -/* - * A sample implementation of pvPortMalloc() that allows the heap to be defined - * across multiple non-contigous blocks and combines (coalescences) adjacent - * memory blocks as they are freed. - * - * See heap_1.c, heap_2.c, heap_3.c and heap_4.c for alternative - * implementations, and the memory management pages of http://www.FreeRTOS.org - * for more information. - * - * Usage notes: - * - * vPortDefineHeapRegions() ***must*** be called before pvPortMalloc(). - * pvPortMalloc() will be called if any task objects (tasks, queues, event - * groups, etc.) are created, therefore vPortDefineHeapRegions() ***must*** be - * called before any other objects are defined. - * - * vPortDefineHeapRegions() takes a single parameter. The parameter is an array - * of HeapRegion_t structures. HeapRegion_t is defined in portable.h as - * - * typedef struct HeapRegion - * { - * uint8_t *pucStartAddress; << Start address of a block of memory that will be part of the heap. - * size_t xSizeInBytes; << Size of the block of memory. - * } HeapRegion_t; - * - * The array is terminated using a NULL zero sized region definition, and the - * memory regions defined in the array ***must*** appear in address order from - * low address to high address. So the following is a valid example of how - * to use the function. - * - * HeapRegion_t xHeapRegions[] = - * { - * { ( uint8_t * ) 0x80000000UL, 0x10000 }, << Defines a block of 0x10000 bytes starting at address 0x80000000 - * { ( uint8_t * ) 0x90000000UL, 0xa0000 }, << Defines a block of 0xa0000 bytes starting at address of 0x90000000 - * { NULL, 0 } << Terminates the array. - * }; - * - * vPortDefineHeapRegions( xHeapRegions ); << Pass the array into vPortDefineHeapRegions(). - * - * Note 0x80000000 is the lower address so appears in the array first. - * - */ -#include -#include -#include "diag.h" -#include "platform_autoconf.h" -#include "hal_misc.h" - -/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining - all the API functions to use the MPU wrappers. That should only be done when - task.h is included from an application file. */ -#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE - -#include "FreeRTOS.h" -#include "task.h" - -#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE - -/* Block sizes must not get too small. */ -#define heapMINIMUM_BLOCK_SIZE ( ( size_t ) ( uxHeapStructSize << 1 ) ) - -/* Assumes 8bit bytes! */ -#define heapBITS_PER_BYTE ( ( size_t ) 8 ) - -/* Define the linked list structure. This is used to link free blocks in order - of their memory address. */ -typedef struct A_BLOCK_LINK { - struct A_BLOCK_LINK *pxNextFreeBlock; /*<< The next free block in the list. */ - size_t xBlockSize; /*<< The size of the free block. */ -} BlockLink_t; - -static void vPortDefineHeapRegions(const HeapRegion_t * const pxHeapRegions); -/*-----------------------------------------------------------*/ - -/* - * Inserts a block of memory that is being freed into the correct position in - * the list of free memory blocks. The block being freed will be merged with - * the block in front it and/or the block behind it if the memory blocks are - * adjacent to each other. - */ -static void prvInsertBlockIntoFreeList(BlockLink_t *pxBlockToInsert); - -/*-----------------------------------------------------------*/ - -/* The size of the structure placed at the beginning of each allocated memory - block must by correctly byte aligned. */ -static const uint32_t uxHeapStructSize = ((sizeof(BlockLink_t) - + ( portBYTE_ALIGNMENT - 1)) & ~portBYTE_ALIGNMENT_MASK); - -/* Create a couple of list links to mark the start and end of the list. */ -static BlockLink_t xStart, *pxEnd = NULL; - -/* Keeps track of the number of free bytes remaining, but says nothing about - fragmentation. */ -static size_t xFreeBytesRemaining = 0; -static size_t xMinimumEverFreeBytesRemaining = 0; - -/* Gets set to the top bit of an size_t type. When this bit in the xBlockSize - member of an BlockLink_t structure is set then the block belongs to the - application. When the bit is free the block is still part of the free heap - space. */ -//static size_t xBlockAllocatedBit = 0; -/* Work out the position of the top bit in a size_t variable. */ -#define xBlockAllocatedBit (( ( size_t ) 1 ) << ( ( sizeof( size_t ) * heapBITS_PER_BYTE ) - 1 )) - -/* Realtek test code start */ -//TODO: remove section when combine BD and BF -#if (defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B)) -#include "section_config.h" -SRAM_HEAP_SECTION -#endif -unsigned char ucHeap[configTOTAL_HEAP_SIZE]; - -//extern void * __sdram_bss_end__; -//extern void * __ram_heap1_start__, __ram_heap1_end__, __ram_heap2_start__, __sdram_data_start__; - -extern HeapRegion_t xHeapRegions[]; - -#if 0 -#if defined(CONFIG_PLATFORM_8195A) -HeapRegion_t xHeapRegions[] = -{ - { (uint8_t*)0x10003000, 0x10006000 - 0x10003000}, // __ram_heap1_start__, __ram_heap1_end__ - __ram_heap1_start__ - { ucHeap, sizeof(ucHeap)}, // Defines a block from ucHeap -#ifdef CONFIG_SDR_EN - { (uint8_t*)&__sdram_bss_end__, 0x80000}, -#endif - { NULL, 0} // Terminates the array. -}; -#elif (defined CONFIG_PLATFORM_8711B) -HeapRegion_t xHeapRegions[] = -{ - { ucHeap, sizeof(ucHeap)}, // Defines a block from ucHeap - { NULL, 0} // Terminates the array. -}; -#else -#error NOT SUPPORT CHIP -#endif -#endif - -/*-----------------------------------------------------------*/ -/* - Dump xBlock list - */ -void dump_mem_block_list(void) { - if (pxEnd == NULL) - vPortDefineHeapRegions(xHeapRegions); -#if CONFIG_DEBUG_LOG > 1 -// if(pxEnd == NULL) vPortDefineHeapRegions( xHeapRegions ); // test code start - BlockLink_t *pxBlock = &xStart; - int count = 0; - DBG_8195A("RAM Free Heap Memory List:\n"); - for (pxBlock = pxBlock->pxNextFreeBlock; pxBlock->pxNextFreeBlock != NULL; - pxBlock = pxBlock->pxNextFreeBlock) { - DBG_8195A(" [%d]=%p, %d\n", ++count, pxBlock, pxBlock->xBlockSize); - } -#endif -} - -void *pvPortMalloc(size_t xWantedSize) { - BlockLink_t *pxBlock, *pxPreviousBlock, *pxNewBlockLink; - void *pvReturn = NULL; - - /* Realtek test code start */ - if (pxEnd == NULL) - vPortDefineHeapRegions(xHeapRegions); - /* Realtek test code end */ - - /* The heap must be initialised before the first call to - prvPortMalloc(). */ - configASSERT( pxEnd ); - - vTaskSuspendAll(); - { - /* Check the requested block size is not so large that the top bit is - set. The top bit of the block size member of the BlockLink_t structure - is used to determine who owns the block - the application or the - kernel, so it must be free. */ - if ((xWantedSize & xBlockAllocatedBit) == 0) { - /* The wanted size is increased so it can contain a BlockLink_t - structure in addition to the requested amount of bytes. */ - if (xWantedSize > 0) { - xWantedSize += uxHeapStructSize; - - /* Ensure that blocks are always aligned to the required number - of bytes. */ - if ((xWantedSize & portBYTE_ALIGNMENT_MASK) != 0x00) { - /* Byte alignment required. */ - xWantedSize += ( portBYTE_ALIGNMENT - - (xWantedSize & portBYTE_ALIGNMENT_MASK)); - } else { - mtCOVERAGE_TEST_MARKER(); - } - } else { - mtCOVERAGE_TEST_MARKER(); - } - - if ((xWantedSize > 0) && (xWantedSize <= xFreeBytesRemaining)) { - /* Traverse the list from the start (lowest address) block until - one of adequate size is found. */ - pxPreviousBlock = &xStart; - pxBlock = xStart.pxNextFreeBlock; - while ((pxBlock->xBlockSize < xWantedSize) - && (pxBlock->pxNextFreeBlock != NULL)) { - pxPreviousBlock = pxBlock; - pxBlock = pxBlock->pxNextFreeBlock; - } - - /* If the end marker was reached then a block of adequate size - was not found. */ - if (pxBlock != pxEnd) { - /* Return the memory space pointed to - jumping over the - BlockLink_t structure at its start. */ - pvReturn = - (void *) (((uint8_t *) pxPreviousBlock->pxNextFreeBlock) - + uxHeapStructSize); - - /* This block is being returned for use so must be taken out - of the list of free blocks. */ - pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock; - - /* If the block is larger than required it can be split into - two. */ - if ((pxBlock->xBlockSize - xWantedSize) - > heapMINIMUM_BLOCK_SIZE) { - /* This block is to be split into two. Create a new - block following the number of bytes requested. The void - cast is used to prevent byte alignment warnings from the - compiler. */ - pxNewBlockLink = (void *) (((uint8_t *) pxBlock) - + xWantedSize); - - /* Calculate the sizes of two blocks split from the - single block. */ - pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - - xWantedSize; - pxBlock->xBlockSize = xWantedSize; - - /* Insert the new block into the list of free blocks. */ - prvInsertBlockIntoFreeList((pxNewBlockLink)); - } else { - mtCOVERAGE_TEST_MARKER(); - } - - xFreeBytesRemaining -= pxBlock->xBlockSize; - - if (xFreeBytesRemaining < xMinimumEverFreeBytesRemaining) { - xMinimumEverFreeBytesRemaining = xFreeBytesRemaining; - } else { - mtCOVERAGE_TEST_MARKER(); - } - - /* The block is being returned - it is allocated and owned - by the application and has no "next" block. */ - pxBlock->xBlockSize |= xBlockAllocatedBit; - pxBlock->pxNextFreeBlock = NULL; - } else { - mtCOVERAGE_TEST_MARKER(); - } - } else { - mtCOVERAGE_TEST_MARKER(); - } - } else { - mtCOVERAGE_TEST_MARKER(); - } traceMALLOC( pvReturn, xWantedSize ); - } - (void) xTaskResumeAll(); - if (pvReturn == NULL) { - DBG_RAM_HEAP_WARN("ram_alloc(%d): freeSpace(%d)!\n", xWantedSize, - xFreeBytesRemaining); - } else { -// DBG_RAM_HEAP_INFO("ram_alloc:%p[%d]\n", pvReturn , xWantedSize); - } -#if( configUSE_MALLOC_FAILED_HOOK == 1 ) - { - if( pvReturn == NULL ) - { - extern void vApplicationMallocFailedHook( void ); - vApplicationMallocFailedHook(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } -#endif - - return pvReturn; -} -/*-----------------------------------------------------------*/ - -void __vPortFree(void *pv) { - uint8_t *puc = (uint8_t *) pv; - BlockLink_t *pxLink; - - if (pv != NULL) { - /* The memory being freed will have an BlockLink_t structure immediately - before it. */ - puc -= uxHeapStructSize; - - /* This casting is to keep the compiler from issuing warnings. */ - pxLink = (void *) puc; - - /* Check the block is actually allocated. */ - configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 ); configASSERT( pxLink->pxNextFreeBlock == NULL ); - - if ((pxLink->xBlockSize & xBlockAllocatedBit) != 0) { - if (pxLink->pxNextFreeBlock == NULL) { - /* The block is being returned to the heap - it is no longer - allocated. */ - pxLink->xBlockSize &= ~xBlockAllocatedBit; - - vTaskSuspendAll(); - { - /* Add this block to the list of free blocks. */ - xFreeBytesRemaining += pxLink->xBlockSize; - traceFREE( pv, pxLink->xBlockSize ); - prvInsertBlockIntoFreeList(((BlockLink_t *) pxLink)); - } - (void) xTaskResumeAll(); - } else { - mtCOVERAGE_TEST_MARKER(); - } - } else { - mtCOVERAGE_TEST_MARKER(); - } -// DBG_RAM_HEAP_INFO("ram_free:%p[%d]\n", pv , pxLink->xBlockSize); - } -} - -/*-----------------------------------------------------------*/ -/* Add by Alfa 2015/02/04 -----------------------------------*/ -static void (*ext_free)(void *p) = NULL; -//static -uint32_t ext_upper = 0; -//static -uint32_t ext_lower = 0; -void vPortSetExtFree(void (*free)(void *p), uint32_t upper, uint32_t lower) { - ext_free = free; - ext_upper = upper; - ext_lower = lower; -} - -void vPortFree(void *pv) { - if (((uint32_t) pv >= ext_lower) && ((uint32_t) pv < ext_upper)) { - // use external free function - if (ext_free) - ext_free(pv); - } else - __vPortFree(pv); -} - -/*-----------------------------------------------------------*/ - -size_t xPortGetFreeHeapSize(void) { - return xFreeBytesRemaining; -} -/*-----------------------------------------------------------*/ - -size_t xPortGetMinimumEverFreeHeapSize(void) { - return xMinimumEverFreeBytesRemaining; -} -/*-----------------------------------------------------------*/ - -static void prvInsertBlockIntoFreeList(BlockLink_t *pxBlockToInsert) { - BlockLink_t *pxIterator; - uint8_t *puc; - - /* Iterate through the list until a block is found that has a higher address - than the block being inserted. */ - for (pxIterator = &xStart; pxIterator->pxNextFreeBlock < pxBlockToInsert; - pxIterator = pxIterator->pxNextFreeBlock) { - /* Nothing to do here, just iterate to the right position. */ - } - - /* Do the block being inserted, and the block it is being inserted after - make a contiguous block of memory? */ - puc = (uint8_t *) pxIterator; - if ((puc + pxIterator->xBlockSize) == (uint8_t *) pxBlockToInsert) { - pxIterator->xBlockSize += pxBlockToInsert->xBlockSize; - pxBlockToInsert = pxIterator; - } else { - mtCOVERAGE_TEST_MARKER(); - } - - /* Do the block being inserted, and the block it is being inserted before - make a contiguous block of memory? */ - puc = (uint8_t *) pxBlockToInsert; - if ((puc + pxBlockToInsert->xBlockSize) - == (uint8_t *) pxIterator->pxNextFreeBlock) { - if (pxIterator->pxNextFreeBlock != pxEnd) { - /* Form one big block from the two blocks. */ - pxBlockToInsert->xBlockSize += - pxIterator->pxNextFreeBlock->xBlockSize; - pxBlockToInsert->pxNextFreeBlock = - pxIterator->pxNextFreeBlock->pxNextFreeBlock; - } else { - pxBlockToInsert->pxNextFreeBlock = pxEnd; - } - } else { - pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock; - } - - /* If the block being inserted plugged a gab, so was merged with the block - before and the block after, then it's pxNextFreeBlock pointer will have - already been set, and should not be set here as that would make it point - to itself. */ - if (pxIterator != pxBlockToInsert) { - pxIterator->pxNextFreeBlock = pxBlockToInsert; - } else { - mtCOVERAGE_TEST_MARKER(); - } -} -/*-----------------------------------------------------------*/ -static void vPortDefineHeapRegions(const HeapRegion_t * const pxHeapRegions) { - BlockLink_t *pxFirstFreeBlockInRegion = NULL, *pxPreviousFreeBlock; - uint8_t *pucAlignedHeap; - size_t xTotalRegionSize, xTotalHeapSize = 0; - BaseType_t xDefinedRegions = 0; - uint32_t ulAddress; - const HeapRegion_t *pxHeapRegion; - -#if defined(CONFIG_PLATFORM_8195A) - /* - xHeapRegions[0].pucStartAddress = (uint8_t*)&__ram_heap1_start__; - xHeapRegions[0].xSizeInBytes = (u32)&__ram_heap1_end__ - (u32)xHeapRegions[0].pucStartAddress; - xHeapRegions[1].pucStartAddress = &ucHeap; // (uint8_t*)&__ram_heap2_start__; - xHeapRegions[1].xSizeInBytes = (u32)0x10070000 - (u32)xHeapRegions[1].pucStartAddress; - xHeapRegions[2].pucStartAddress = (uint8_t*)&__sdram_data_start__; - xHeapRegions[2].xSizeInBytes = (u32)0x30200000 - (u32)xHeapRegions[2].pucStartAddress; - */ -#endif - /* Can only call once! */ - configASSERT( pxEnd == NULL ); - - pxHeapRegion = &(pxHeapRegions[xDefinedRegions]); - - uint8 chip_id = HalGetChipId(); - while (pxHeapRegion->xSizeInBytes > 0) { - if (pxHeapRegion->pucStartAddress - > (uint8_t *) 0x20000000 && chip_id >= CHIP_ID_8711AN && chip_id <= CHIP_ID_8711AF) { -// pxHeapRegion->pucStartAddress = 0; -// pxHeapRegion->xSizeInBytes = 0; -// DBG_8195A("ChipID: %p !\n", chip_id); - } else { -#if CONFIG_DEBUG_LOG > 2 - DBG_8195A("Init Heap Region: %p[%d]\n", pxHeapRegion->pucStartAddress, pxHeapRegion->xSizeInBytes); -#endif -#if CONFIG_DEBUG_LOG > 4 - rtl_memset(pxHeapRegion->pucStartAddress, 0, pxHeapRegion->xSizeInBytes); -#endif - xTotalRegionSize = pxHeapRegion->xSizeInBytes; - /* Ensure the heap region starts on a correctly aligned boundary. */ - ulAddress = (uint32_t) pxHeapRegion->pucStartAddress; - if ((ulAddress & portBYTE_ALIGNMENT_MASK) != 0) { - ulAddress += ( portBYTE_ALIGNMENT - 1); - ulAddress &= ~portBYTE_ALIGNMENT_MASK; - - /* Adjust the size for the bytes lost to alignment. */ - xTotalRegionSize -= ulAddress - - (uint32_t) pxHeapRegion->pucStartAddress; - } - - pucAlignedHeap = (uint8_t *) ulAddress; - - /* Set xStart if it has not already been set. */ - if (xDefinedRegions == 0) { - /* xStart is used to hold a pointer to the first item in the list of - free blocks. The void cast is used to prevent compiler warnings. */ - xStart.pxNextFreeBlock = (BlockLink_t *) pucAlignedHeap; - xStart.xBlockSize = (size_t) 0; - } else { - /* Should only get here if one region has already been added to the - heap. */ - configASSERT( pxEnd != NULL ); - - /* Check blocks are passed in with increasing start addresses. */ - configASSERT( ulAddress > ( uint32_t ) pxEnd ); - } - - /* Remember the location of the end marker in the previous region, if - any. */ - pxPreviousFreeBlock = pxEnd; - - /* pxEnd is used to mark the end of the list of free blocks and is - inserted at the end of the region space. */ - ulAddress = ((uint32_t) pucAlignedHeap) + xTotalRegionSize; - ulAddress -= uxHeapStructSize; - ulAddress &= ~portBYTE_ALIGNMENT_MASK; - pxEnd = (BlockLink_t *) ulAddress; - pxEnd->xBlockSize = 0; - pxEnd->pxNextFreeBlock = NULL; - - /* To start with there is a single free block in this region that is - sized to take up the entire heap region minus the space taken by the - free block structure. */ - pxFirstFreeBlockInRegion = (BlockLink_t *) pucAlignedHeap; - pxFirstFreeBlockInRegion->xBlockSize = ulAddress - - (uint32_t) pxFirstFreeBlockInRegion; - pxFirstFreeBlockInRegion->pxNextFreeBlock = pxEnd; - - /* If this is not the first region that makes up the entire heap space - then link the previous region to this region. */ - if (pxPreviousFreeBlock != NULL) { - pxPreviousFreeBlock->pxNextFreeBlock = pxFirstFreeBlockInRegion; - } - - xTotalHeapSize += pxFirstFreeBlockInRegion->xBlockSize; - } - /* Move onto the next HeapRegion_t structure. */ - xDefinedRegions++; - pxHeapRegion = &(pxHeapRegions[xDefinedRegions]); - } - - xMinimumEverFreeBytesRemaining = xTotalHeapSize; - xFreeBytesRemaining = xTotalHeapSize; - - /* Check something was actually defined before it is accessed. */ - configASSERT( xTotalHeapSize ); - -} - -extern _LONG_CALL_ void * __rtl_memcpy_v1_00(void * __restrict dst0 , const void * __restrict src0 , size_t len0); - -void* pvPortReAlloc(void *pv, size_t xWantedSize) { - BlockLink_t *pxLink; - - if (((uint32_t) pv >= ext_lower) && ((uint32_t) pv < ext_upper)) { - if (ext_free) - ext_free(pv); - pv = NULL; - } - - unsigned char *puc = (unsigned char *) pv; - - if (pv) { - if (!xWantedSize) { - vPortFree(pv); - return NULL; - } - - void *newArea = pvPortMalloc(xWantedSize); - if (newArea) { - /* The memory being freed will have an xBlockLink structure immediately - before it. */ - puc -= uxHeapStructSize; - - /* This casting is to keep the compiler from issuing warnings. */ - pxLink = (void *) puc; - - int oldSize = (pxLink->xBlockSize & ~xBlockAllocatedBit) - uxHeapStructSize; - int copySize = (oldSize < xWantedSize) ? oldSize : xWantedSize; - __rtl_memcpy_v1_00(newArea, pv, copySize); - - vTaskSuspendAll(); - { - /* Add this block to the list of free blocks. */ - pxLink->xBlockSize &= ~xBlockAllocatedBit; - xFreeBytesRemaining += pxLink->xBlockSize; - prvInsertBlockIntoFreeList(((BlockLink_t *) pxLink)); - } - xTaskResumeAll(); - return newArea; - } - } else if (xWantedSize) - return pvPortMalloc(xWantedSize); - else - return NULL; - - return NULL; -} - -extern _LONG_CALL_ROM_ void *_memset(void *s, int c, SIZE_T n); - -void *pvPortZalloc(size_t xWantedSize) { - void * prt = pvPortMalloc(xWantedSize); - if (prt) - _memset(prt, 0, xWantedSize); - return prt; -} - -/* - #ifdef ARDUINO_SDK - int vPortAddHeapRegion(uint8_t *addr, size_t size) - { - return 0; - } - #endif - */ diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/queue.c b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/queue.c deleted file mode 100644 index 3659ecd..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/queue.c +++ /dev/null @@ -1,2567 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -#include -#include -#include - -/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining -all the API functions to use the MPU wrappers. That should only be done when -task.h is included from an application file. */ -#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE - -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" - -#if ( configUSE_CO_ROUTINES == 1 ) - #include "croutine.h" -#endif - -/* Lint e961 and e750 are suppressed as a MISRA exception justified because the -MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined for the -header files above, but not in this file, in order to generate the correct -privileged Vs unprivileged linkage and placement. */ -#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750. */ - - -/* Constants used with the cRxLock and cTxLock structure members. */ -#define queueUNLOCKED ( ( int8_t ) -1 ) -#define queueLOCKED_UNMODIFIED ( ( int8_t ) 0 ) - -/* When the Queue_t structure is used to represent a base queue its pcHead and -pcTail members are used as pointers into the queue storage area. When the -Queue_t structure is used to represent a mutex pcHead and pcTail pointers are -not necessary, and the pcHead pointer is set to NULL to indicate that the -pcTail pointer actually points to the mutex holder (if any). Map alternative -names to the pcHead and pcTail structure members to ensure the readability of -the code is maintained despite this dual use of two structure members. An -alternative implementation would be to use a union, but use of a union is -against the coding standard (although an exception to the standard has been -permitted where the dual use also significantly changes the type of the -structure member). */ -#define pxMutexHolder pcTail -#define uxQueueType pcHead -#define queueQUEUE_IS_MUTEX NULL - -/* Semaphores do not actually store or copy data, so have an item size of -zero. */ -#define queueSEMAPHORE_QUEUE_ITEM_LENGTH ( ( UBaseType_t ) 0 ) -#define queueMUTEX_GIVE_BLOCK_TIME ( ( TickType_t ) 0U ) - -#if( configUSE_PREEMPTION == 0 ) - /* If the cooperative scheduler is being used then a yield should not be - performed just because a higher priority task has been woken. */ - #define queueYIELD_IF_USING_PREEMPTION() -#else - #define queueYIELD_IF_USING_PREEMPTION() portYIELD_WITHIN_API() -#endif - -/* - * Definition of the queue used by the scheduler. - * Items are queued by copy, not reference. See the following link for the - * rationale: http://www.freertos.org/Embedded-RTOS-Queues.html - */ -typedef struct QueueDefinition -{ - int8_t *pcHead; /*< Points to the beginning of the queue storage area. */ - int8_t *pcTail; /*< Points to the byte at the end of the queue storage area. Once more byte is allocated than necessary to store the queue items, this is used as a marker. */ - int8_t *pcWriteTo; /*< Points to the free next place in the storage area. */ - - union /* Use of a union is an exception to the coding standard to ensure two mutually exclusive structure members don't appear simultaneously (wasting RAM). */ - { - int8_t *pcReadFrom; /*< Points to the last place that a queued item was read from when the structure is used as a queue. */ - UBaseType_t uxRecursiveCallCount;/*< Maintains a count of the number of times a recursive mutex has been recursively 'taken' when the structure is used as a mutex. */ - } u; - - List_t xTasksWaitingToSend; /*< List of tasks that are blocked waiting to post onto this queue. Stored in priority order. */ - List_t xTasksWaitingToReceive; /*< List of tasks that are blocked waiting to read from this queue. Stored in priority order. */ - - volatile UBaseType_t uxMessagesWaiting;/*< The number of items currently in the queue. */ - UBaseType_t uxLength; /*< The length of the queue defined as the number of items it will hold, not the number of bytes. */ - UBaseType_t uxItemSize; /*< The size of each items that the queue will hold. */ - - volatile int8_t cRxLock; /*< Stores the number of items received from the queue (removed from the queue) while the queue was locked. Set to queueUNLOCKED when the queue is not locked. */ - volatile int8_t cTxLock; /*< Stores the number of items transmitted to the queue (added to the queue) while the queue was locked. Set to queueUNLOCKED when the queue is not locked. */ - - #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - uint8_t ucStaticallyAllocated; /*< Set to pdTRUE if the memory used by the queue was statically allocated to ensure no attempt is made to free the memory. */ - #endif - - #if ( configUSE_QUEUE_SETS == 1 ) - struct QueueDefinition *pxQueueSetContainer; - #endif - - #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxQueueNumber; - uint8_t ucQueueType; - #endif - -} xQUEUE; - -/* The old xQUEUE name is maintained above then typedefed to the new Queue_t -name below to enable the use of older kernel aware debuggers. */ -typedef xQUEUE Queue_t; - -/*-----------------------------------------------------------*/ - -/* - * The queue registry is just a means for kernel aware debuggers to locate - * queue structures. It has no other purpose so is an optional component. - */ -#if ( configQUEUE_REGISTRY_SIZE > 0 ) - - /* The type stored within the queue registry array. This allows a name - to be assigned to each queue making kernel aware debugging a little - more user friendly. */ - typedef struct QUEUE_REGISTRY_ITEM - { - const char *pcQueueName; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - QueueHandle_t xHandle; - } xQueueRegistryItem; - - /* The old xQueueRegistryItem name is maintained above then typedefed to the - new xQueueRegistryItem name below to enable the use of older kernel aware - debuggers. */ - typedef xQueueRegistryItem QueueRegistryItem_t; - - /* The queue registry is simply an array of QueueRegistryItem_t structures. - The pcQueueName member of a structure being NULL is indicative of the - array position being vacant. */ - PRIVILEGED_DATA QueueRegistryItem_t xQueueRegistry[ configQUEUE_REGISTRY_SIZE ]; - -#endif /* configQUEUE_REGISTRY_SIZE */ - -/* - * Unlocks a queue locked by a call to prvLockQueue. Locking a queue does not - * prevent an ISR from adding or removing items to the queue, but does prevent - * an ISR from removing tasks from the queue event lists. If an ISR finds a - * queue is locked it will instead increment the appropriate queue lock count - * to indicate that a task may require unblocking. When the queue in unlocked - * these lock counts are inspected, and the appropriate action taken. - */ -static void prvUnlockQueue( Queue_t * const pxQueue ) PRIVILEGED_FUNCTION; - -/* - * Uses a critical section to determine if there is any data in a queue. - * - * @return pdTRUE if the queue contains no items, otherwise pdFALSE. - */ -static BaseType_t prvIsQueueEmpty( const Queue_t *pxQueue ) PRIVILEGED_FUNCTION; - -/* - * Uses a critical section to determine if there is any space in a queue. - * - * @return pdTRUE if there is no space, otherwise pdFALSE; - */ -static BaseType_t prvIsQueueFull( const Queue_t *pxQueue ) PRIVILEGED_FUNCTION; - -/* - * Copies an item into the queue, either at the front of the queue or the - * back of the queue. - */ -static BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue, const void *pvItemToQueue, const BaseType_t xPosition ) PRIVILEGED_FUNCTION; - -/* - * Copies an item out of a queue. - */ -static void prvCopyDataFromQueue( Queue_t * const pxQueue, void * const pvBuffer ) PRIVILEGED_FUNCTION; - -#if ( configUSE_QUEUE_SETS == 1 ) - /* - * Checks to see if a queue is a member of a queue set, and if so, notifies - * the queue set that the queue contains data. - */ - static BaseType_t prvNotifyQueueSetContainer( const Queue_t * const pxQueue, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION; -#endif - -/* - * Called after a Queue_t structure has been allocated either statically or - * dynamically to fill in the structure's members. - */ -static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, const uint8_t ucQueueType, Queue_t *pxNewQueue ) PRIVILEGED_FUNCTION; - -/* - * Mutexes are a special type of queue. When a mutex is created, first the - * queue is created, then prvInitialiseMutex() is called to configure the queue - * as a mutex. - */ -#if( configUSE_MUTEXES == 1 ) - static void prvInitialiseMutex( Queue_t *pxNewQueue ) PRIVILEGED_FUNCTION; -#endif - -/*-----------------------------------------------------------*/ - -/* - * Macro to mark a queue as locked. Locking a queue prevents an ISR from - * accessing the queue event lists. - */ -#define prvLockQueue( pxQueue ) \ - taskENTER_CRITICAL(); \ - { \ - if( ( pxQueue )->cRxLock == queueUNLOCKED ) \ - { \ - ( pxQueue )->cRxLock = queueLOCKED_UNMODIFIED; \ - } \ - if( ( pxQueue )->cTxLock == queueUNLOCKED ) \ - { \ - ( pxQueue )->cTxLock = queueLOCKED_UNMODIFIED; \ - } \ - } \ - taskEXIT_CRITICAL() -/*-----------------------------------------------------------*/ - -BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue ) -{ -Queue_t * const pxQueue = ( Queue_t * ) xQueue; - - configASSERT( pxQueue ); - - taskENTER_CRITICAL(); - { - pxQueue->pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize ); - pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U; - pxQueue->pcWriteTo = pxQueue->pcHead; - pxQueue->u.pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - ( UBaseType_t ) 1U ) * pxQueue->uxItemSize ); - pxQueue->cRxLock = queueUNLOCKED; - pxQueue->cTxLock = queueUNLOCKED; - - if( xNewQueue == pdFALSE ) - { - /* If there are tasks blocked waiting to read from the queue, then - the tasks will remain blocked as after this function exits the queue - will still be empty. If there are tasks blocked waiting to write to - the queue, then one should be unblocked as after this function exits - it will be possible to write to it. */ - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) - { - queueYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - /* Ensure the event queues start in the correct state. */ - vListInitialise( &( pxQueue->xTasksWaitingToSend ) ); - vListInitialise( &( pxQueue->xTasksWaitingToReceive ) ); - } - } - taskEXIT_CRITICAL(); - - /* A value is returned for calling semantic consistency with previous - versions. */ - return pdPASS; -} -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - - QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ) - { - Queue_t *pxNewQueue; - - configASSERT( uxQueueLength > ( UBaseType_t ) 0 ); - - /* The StaticQueue_t structure and the queue storage area must be - supplied. */ - configASSERT( pxStaticQueue != NULL ); - - /* A queue storage area should be provided if the item size is not 0, and - should not be provided if the item size is 0. */ - configASSERT( !( ( pucQueueStorage != NULL ) && ( uxItemSize == 0 ) ) ); - configASSERT( !( ( pucQueueStorage == NULL ) && ( uxItemSize != 0 ) ) ); - - #if( configASSERT_DEFINED == 1 ) - { - /* Sanity check that the size of the structure used to declare a - variable of type StaticQueue_t or StaticSemaphore_t equals the size of - the real queue and semaphore structures. */ - volatile size_t xSize = sizeof( StaticQueue_t ); - configASSERT( xSize == sizeof( Queue_t ) ); - } - #endif /* configASSERT_DEFINED */ - - /* The address of a statically allocated queue was passed in, use it. - The address of a statically allocated storage area was also passed in - but is already set. */ - pxNewQueue = ( Queue_t * ) pxStaticQueue; /*lint !e740 Unusual cast is ok as the structures are designed to have the same alignment, and the size is checked by an assert. */ - - if( pxNewQueue != NULL ) - { - #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - { - /* Queues can be allocated wither statically or dynamically, so - note this queue was allocated statically in case the queue is - later deleted. */ - pxNewQueue->ucStaticallyAllocated = pdTRUE; - } - #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ - - prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue ); - } - - return pxNewQueue; - } - -#endif /* configSUPPORT_STATIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - - QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType ) - { - Queue_t *pxNewQueue; - size_t xQueueSizeInBytes; - uint8_t *pucQueueStorage; - - configASSERT( uxQueueLength > ( UBaseType_t ) 0 ); - - if( uxItemSize == ( UBaseType_t ) 0 ) - { - /* There is not going to be a queue storage area. */ - xQueueSizeInBytes = ( size_t ) 0; - } - else - { - /* Allocate enough space to hold the maximum number of items that - can be in the queue at any time. */ - xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - } - - pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) + xQueueSizeInBytes ); - - if( pxNewQueue != NULL ) - { - /* Jump past the queue structure to find the location of the queue - storage area. */ - pucQueueStorage = ( ( uint8_t * ) pxNewQueue ) + sizeof( Queue_t ); - - #if( configSUPPORT_STATIC_ALLOCATION == 1 ) - { - /* Queues can be created either statically or dynamically, so - note this task was created dynamically in case it is later - deleted. */ - pxNewQueue->ucStaticallyAllocated = pdFALSE; - } - #endif /* configSUPPORT_STATIC_ALLOCATION */ - - prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue ); - } - - return pxNewQueue; - } - -#endif /* configSUPPORT_STATIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, const uint8_t ucQueueType, Queue_t *pxNewQueue ) -{ - /* Remove compiler warnings about unused parameters should - configUSE_TRACE_FACILITY not be set to 1. */ - ( void ) ucQueueType; - - if( uxItemSize == ( UBaseType_t ) 0 ) - { - /* No RAM was allocated for the queue storage area, but PC head cannot - be set to NULL because NULL is used as a key to say the queue is used as - a mutex. Therefore just set pcHead to point to the queue as a benign - value that is known to be within the memory map. */ - pxNewQueue->pcHead = ( int8_t * ) pxNewQueue; - } - else - { - /* Set the head to the start of the queue storage area. */ - pxNewQueue->pcHead = ( int8_t * ) pucQueueStorage; - } - - /* Initialise the queue members as described where the queue type is - defined. */ - pxNewQueue->uxLength = uxQueueLength; - pxNewQueue->uxItemSize = uxItemSize; - ( void ) xQueueGenericReset( pxNewQueue, pdTRUE ); - - #if ( configUSE_TRACE_FACILITY == 1 ) - { - pxNewQueue->ucQueueType = ucQueueType; - } - #endif /* configUSE_TRACE_FACILITY */ - - #if( configUSE_QUEUE_SETS == 1 ) - { - pxNewQueue->pxQueueSetContainer = NULL; - } - #endif /* configUSE_QUEUE_SETS */ - - traceQUEUE_CREATE( pxNewQueue ); -} -/*-----------------------------------------------------------*/ - -#if( configUSE_MUTEXES == 1 ) - - static void prvInitialiseMutex( Queue_t *pxNewQueue ) - { - if( pxNewQueue != NULL ) - { - /* The queue create function will set all the queue structure members - correctly for a generic queue, but this function is creating a - mutex. Overwrite those members that need to be set differently - - in particular the information required for priority inheritance. */ - pxNewQueue->pxMutexHolder = NULL; - pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX; - - /* In case this is a recursive mutex. */ - pxNewQueue->u.uxRecursiveCallCount = 0; - - traceCREATE_MUTEX( pxNewQueue ); - - /* Start with the semaphore in the expected state. */ - ( void ) xQueueGenericSend( pxNewQueue, NULL, ( TickType_t ) 0U, queueSEND_TO_BACK ); - } - else - { - traceCREATE_MUTEX_FAILED(); - } - } - -#endif /* configUSE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - - QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) - { - Queue_t *pxNewQueue; - const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0; - - pxNewQueue = ( Queue_t * ) xQueueGenericCreate( uxMutexLength, uxMutexSize, ucQueueType ); - prvInitialiseMutex( pxNewQueue ); - - return pxNewQueue; - } - -#endif /* configUSE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - - QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) - { - Queue_t *pxNewQueue; - const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0; - - /* Prevent compiler warnings about unused parameters if - configUSE_TRACE_FACILITY does not equal 1. */ - ( void ) ucQueueType; - - pxNewQueue = ( Queue_t * ) xQueueGenericCreateStatic( uxMutexLength, uxMutexSize, NULL, pxStaticQueue, ucQueueType ); - prvInitialiseMutex( pxNewQueue ); - - return pxNewQueue; - } - -#endif /* configUSE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if ( ( configUSE_MUTEXES == 1 ) && ( INCLUDE_xSemaphoreGetMutexHolder == 1 ) ) - - void* xQueueGetMutexHolder( QueueHandle_t xSemaphore ) - { - void *pxReturn; - - /* This function is called by xSemaphoreGetMutexHolder(), and should not - be called directly. Note: This is a good way of determining if the - calling task is the mutex holder, but not a good way of determining the - identity of the mutex holder, as the holder may change between the - following critical section exiting and the function returning. */ - taskENTER_CRITICAL(); - { - if( ( ( Queue_t * ) xSemaphore )->uxQueueType == queueQUEUE_IS_MUTEX ) - { - pxReturn = ( void * ) ( ( Queue_t * ) xSemaphore )->pxMutexHolder; - } - else - { - pxReturn = NULL; - } - } - taskEXIT_CRITICAL(); - - return pxReturn; - } /*lint !e818 xSemaphore cannot be a pointer to const because it is a typedef. */ - -#endif -/*-----------------------------------------------------------*/ - -#if ( configUSE_RECURSIVE_MUTEXES == 1 ) - - BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) - { - BaseType_t xReturn; - Queue_t * const pxMutex = ( Queue_t * ) xMutex; - - configASSERT( pxMutex ); - - /* If this is the task that holds the mutex then pxMutexHolder will not - change outside of this task. If this task does not hold the mutex then - pxMutexHolder can never coincidentally equal the tasks handle, and as - this is the only condition we are interested in it does not matter if - pxMutexHolder is accessed simultaneously by another task. Therefore no - mutual exclusion is required to test the pxMutexHolder variable. */ - if( pxMutex->pxMutexHolder == ( void * ) xTaskGetCurrentTaskHandle() ) /*lint !e961 Not a redundant cast as TaskHandle_t is a typedef. */ - { - traceGIVE_MUTEX_RECURSIVE( pxMutex ); - - /* uxRecursiveCallCount cannot be zero if pxMutexHolder is equal to - the task handle, therefore no underflow check is required. Also, - uxRecursiveCallCount is only modified by the mutex holder, and as - there can only be one, no mutual exclusion is required to modify the - uxRecursiveCallCount member. */ - ( pxMutex->u.uxRecursiveCallCount )--; - - /* Has the recursive call count unwound to 0? */ - if( pxMutex->u.uxRecursiveCallCount == ( UBaseType_t ) 0 ) - { - /* Return the mutex. This will automatically unblock any other - task that might be waiting to access the mutex. */ - ( void ) xQueueGenericSend( pxMutex, NULL, queueMUTEX_GIVE_BLOCK_TIME, queueSEND_TO_BACK ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - xReturn = pdPASS; - } - else - { - /* The mutex cannot be given because the calling task is not the - holder. */ - xReturn = pdFAIL; - - traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex ); - } - - return xReturn; - } - -#endif /* configUSE_RECURSIVE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_RECURSIVE_MUTEXES == 1 ) - - BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) - { - BaseType_t xReturn; - Queue_t * const pxMutex = ( Queue_t * ) xMutex; - - configASSERT( pxMutex ); - - /* Comments regarding mutual exclusion as per those within - xQueueGiveMutexRecursive(). */ - - traceTAKE_MUTEX_RECURSIVE( pxMutex ); - - if( pxMutex->pxMutexHolder == ( void * ) xTaskGetCurrentTaskHandle() ) /*lint !e961 Cast is not redundant as TaskHandle_t is a typedef. */ - { - ( pxMutex->u.uxRecursiveCallCount )++; - xReturn = pdPASS; - } - else - { - xReturn = xQueueGenericReceive( pxMutex, NULL, xTicksToWait, pdFALSE ); - - /* pdPASS will only be returned if the mutex was successfully - obtained. The calling task may have entered the Blocked state - before reaching here. */ - if( xReturn != pdFAIL ) - { - ( pxMutex->u.uxRecursiveCallCount )++; - } - else - { - traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex ); - } - } - - return xReturn; - } - -#endif /* configUSE_RECURSIVE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - - QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) - { - QueueHandle_t xHandle; - - configASSERT( uxMaxCount != 0 ); - configASSERT( uxInitialCount <= uxMaxCount ); - - xHandle = xQueueGenericCreateStatic( uxMaxCount, queueSEMAPHORE_QUEUE_ITEM_LENGTH, NULL, pxStaticQueue, queueQUEUE_TYPE_COUNTING_SEMAPHORE ); - - if( xHandle != NULL ) - { - ( ( Queue_t * ) xHandle )->uxMessagesWaiting = uxInitialCount; - - traceCREATE_COUNTING_SEMAPHORE(); - } - else - { - traceCREATE_COUNTING_SEMAPHORE_FAILED(); - } - - return xHandle; - } - -#endif /* ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */ -/*-----------------------------------------------------------*/ - -#if( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - - QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) - { - QueueHandle_t xHandle; - - configASSERT( uxMaxCount != 0 ); - configASSERT( uxInitialCount <= uxMaxCount ); - - xHandle = xQueueGenericCreate( uxMaxCount, queueSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_COUNTING_SEMAPHORE ); - - if( xHandle != NULL ) - { - ( ( Queue_t * ) xHandle )->uxMessagesWaiting = uxInitialCount; - - traceCREATE_COUNTING_SEMAPHORE(); - } - else - { - traceCREATE_COUNTING_SEMAPHORE_FAILED(); - } - - return xHandle; - } - -#endif /* ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */ -/*-----------------------------------------------------------*/ - -BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) -{ -BaseType_t xEntryTimeSet = pdFALSE, xYieldRequired; -TimeOut_t xTimeOut; -Queue_t * const pxQueue = ( Queue_t * ) xQueue; - - configASSERT( pxQueue ); - configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) ); - configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) ); - #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) - { - configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) ); - } - #endif - - - /* This function relaxes the coding standard somewhat to allow return - statements within the function itself. This is done in the interest - of execution time efficiency. */ - for( ;; ) - { - taskENTER_CRITICAL(); - { - /* Is there room on the queue now? The running task must be the - highest priority task wanting to access the queue. If the head item - in the queue is to be overwritten then it does not matter if the - queue is full. */ - if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) ) - { - traceQUEUE_SEND( pxQueue ); - xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition ); - - #if ( configUSE_QUEUE_SETS == 1 ) - { - if( pxQueue->pxQueueSetContainer != NULL ) - { - if( prvNotifyQueueSetContainer( pxQueue, xCopyPosition ) != pdFALSE ) - { - /* The queue is a member of a queue set, and posting - to the queue set caused a higher priority task to - unblock. A context switch is required. */ - queueYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - /* If there was a task waiting for data to arrive on the - queue then unblock it now. */ - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The unblocked task has a priority higher than - our own so yield immediately. Yes it is ok to - do this from within the critical section - the - kernel takes care of that. */ - queueYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else if( xYieldRequired != pdFALSE ) - { - /* This path is a special case that will only get - executed if the task was holding multiple mutexes - and the mutexes were given back in an order that is - different to that in which they were taken. */ - queueYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - #else /* configUSE_QUEUE_SETS */ - { - /* If there was a task waiting for data to arrive on the - queue then unblock it now. */ - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The unblocked task has a priority higher than - our own so yield immediately. Yes it is ok to do - this from within the critical section - the kernel - takes care of that. */ - queueYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else if( xYieldRequired != pdFALSE ) - { - /* This path is a special case that will only get - executed if the task was holding multiple mutexes and - the mutexes were given back in an order that is - different to that in which they were taken. */ - queueYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_QUEUE_SETS */ - - taskEXIT_CRITICAL(); - return pdPASS; - } - else - { - if( xTicksToWait == ( TickType_t ) 0 ) - { - /* The queue was full and no block time is specified (or - the block time has expired) so leave now. */ - taskEXIT_CRITICAL(); - - /* Return to the original privilege level before exiting - the function. */ - traceQUEUE_SEND_FAILED( pxQueue ); - return errQUEUE_FULL; - } - else if( xEntryTimeSet == pdFALSE ) - { - /* The queue was full and a block time was specified so - configure the timeout structure. */ - vTaskSetTimeOutState( &xTimeOut ); - xEntryTimeSet = pdTRUE; - } - else - { - /* Entry time was already set. */ - mtCOVERAGE_TEST_MARKER(); - } - } - } - taskEXIT_CRITICAL(); - - /* Interrupts and other tasks can send to and receive from the queue - now the critical section has been exited. */ - - vTaskSuspendAll(); - prvLockQueue( pxQueue ); - - /* Update the timeout state to see if it has expired yet. */ - if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) - { - if( prvIsQueueFull( pxQueue ) != pdFALSE ) - { - traceBLOCKING_ON_QUEUE_SEND( pxQueue ); - vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait ); - - /* Unlocking the queue means queue events can effect the - event list. It is possible that interrupts occurring now - remove this task from the event list again - but as the - scheduler is suspended the task will go onto the pending - ready last instead of the actual ready list. */ - prvUnlockQueue( pxQueue ); - - /* Resuming the scheduler will move tasks from the pending - ready list into the ready list - so it is feasible that this - task is already in a ready list before it yields - in which - case the yield will not cause a context switch unless there - is also a higher priority task in the pending ready list. */ - if( xTaskResumeAll() == pdFALSE ) - { - portYIELD_WITHIN_API(); - } - } - else - { - /* Try again. */ - prvUnlockQueue( pxQueue ); - ( void ) xTaskResumeAll(); - } - } - else - { - /* The timeout has expired. */ - prvUnlockQueue( pxQueue ); - ( void ) xTaskResumeAll(); - - traceQUEUE_SEND_FAILED( pxQueue ); - return errQUEUE_FULL; - } - } -} -/*-----------------------------------------------------------*/ - -BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition ) -{ -BaseType_t xReturn; -UBaseType_t uxSavedInterruptStatus; -Queue_t * const pxQueue = ( Queue_t * ) xQueue; - - configASSERT( pxQueue ); - configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) ); - configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) ); - - /* RTOS ports that support interrupt nesting have the concept of a maximum - system call (or maximum API call) interrupt priority. Interrupts that are - above the maximum system call priority are kept permanently enabled, even - when the RTOS kernel is in a critical section, but cannot make any calls to - FreeRTOS API functions. If configASSERT() is defined in FreeRTOSConfig.h - then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion - failure if a FreeRTOS API function is called from an interrupt that has been - assigned a priority above the configured maximum system call priority. - Only FreeRTOS functions that end in FromISR can be called from interrupts - that have been assigned a priority at or (logically) below the maximum - system call interrupt priority. FreeRTOS maintains a separate interrupt - safe API to ensure interrupt entry is as fast and as simple as possible. - More information (albeit Cortex-M specific) is provided on the following - link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */ - portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - - /* Similar to xQueueGenericSend, except without blocking if there is no room - in the queue. Also don't directly wake a task that was blocked on a queue - read, instead return a flag to say whether a context switch is required or - not (i.e. has a task with a higher priority than us been woken by this - post). */ - uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); - { - if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) ) - { - const int8_t cTxLock = pxQueue->cTxLock; - - traceQUEUE_SEND_FROM_ISR( pxQueue ); - - /* Semaphores use xQueueGiveFromISR(), so pxQueue will not be a - semaphore or mutex. That means prvCopyDataToQueue() cannot result - in a task disinheriting a priority and prvCopyDataToQueue() can be - called here even though the disinherit function does not check if - the scheduler is suspended before accessing the ready lists. */ - ( void ) prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition ); - - /* The event list is not altered if the queue is locked. This will - be done when the queue is unlocked later. */ - if( cTxLock == queueUNLOCKED ) - { - #if ( configUSE_QUEUE_SETS == 1 ) - { - if( pxQueue->pxQueueSetContainer != NULL ) - { - if( prvNotifyQueueSetContainer( pxQueue, xCopyPosition ) != pdFALSE ) - { - /* The queue is a member of a queue set, and posting - to the queue set caused a higher priority task to - unblock. A context switch is required. */ - if( pxHigherPriorityTaskWoken != NULL ) - { - *pxHigherPriorityTaskWoken = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority so - record that a context switch is required. */ - if( pxHigherPriorityTaskWoken != NULL ) - { - *pxHigherPriorityTaskWoken = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - #else /* configUSE_QUEUE_SETS */ - { - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority so record that a - context switch is required. */ - if( pxHigherPriorityTaskWoken != NULL ) - { - *pxHigherPriorityTaskWoken = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_QUEUE_SETS */ - } - else - { - /* Increment the lock count so the task that unlocks the queue - knows that data was posted while it was locked. */ - pxQueue->cTxLock = ( int8_t ) ( cTxLock + 1 ); - } - - xReturn = pdPASS; - } - else - { - traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue ); - xReturn = errQUEUE_FULL; - } - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherPriorityTaskWoken ) -{ -BaseType_t xReturn; -UBaseType_t uxSavedInterruptStatus; -Queue_t * const pxQueue = ( Queue_t * ) xQueue; - - /* Similar to xQueueGenericSendFromISR() but used with semaphores where the - item size is 0. Don't directly wake a task that was blocked on a queue - read, instead return a flag to say whether a context switch is required or - not (i.e. has a task with a higher priority than us been woken by this - post). */ - - configASSERT( pxQueue ); - - /* xQueueGenericSendFromISR() should be used instead of xQueueGiveFromISR() - if the item size is not 0. */ - configASSERT( pxQueue->uxItemSize == 0 ); - - /* Normally a mutex would not be given from an interrupt, especially if - there is a mutex holder, as priority inheritance makes no sense for an - interrupts, only tasks. */ - configASSERT( !( ( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) && ( pxQueue->pxMutexHolder != NULL ) ) ); - - /* RTOS ports that support interrupt nesting have the concept of a maximum - system call (or maximum API call) interrupt priority. Interrupts that are - above the maximum system call priority are kept permanently enabled, even - when the RTOS kernel is in a critical section, but cannot make any calls to - FreeRTOS API functions. If configASSERT() is defined in FreeRTOSConfig.h - then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion - failure if a FreeRTOS API function is called from an interrupt that has been - assigned a priority above the configured maximum system call priority. - Only FreeRTOS functions that end in FromISR can be called from interrupts - that have been assigned a priority at or (logically) below the maximum - system call interrupt priority. FreeRTOS maintains a separate interrupt - safe API to ensure interrupt entry is as fast and as simple as possible. - More information (albeit Cortex-M specific) is provided on the following - link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */ - portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - - uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); - { - const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting; - - /* When the queue is used to implement a semaphore no data is ever - moved through the queue but it is still valid to see if the queue 'has - space'. */ - if( uxMessagesWaiting < pxQueue->uxLength ) - { - const int8_t cTxLock = pxQueue->cTxLock; - - traceQUEUE_SEND_FROM_ISR( pxQueue ); - - /* A task can only have an inherited priority if it is a mutex - holder - and if there is a mutex holder then the mutex cannot be - given from an ISR. As this is the ISR version of the function it - can be assumed there is no mutex holder and no need to determine if - priority disinheritance is needed. Simply increase the count of - messages (semaphores) available. */ - pxQueue->uxMessagesWaiting = uxMessagesWaiting + 1; - - /* The event list is not altered if the queue is locked. This will - be done when the queue is unlocked later. */ - if( cTxLock == queueUNLOCKED ) - { - #if ( configUSE_QUEUE_SETS == 1 ) - { - if( pxQueue->pxQueueSetContainer != NULL ) - { - if( prvNotifyQueueSetContainer( pxQueue, queueSEND_TO_BACK ) != pdFALSE ) - { - /* The semaphore is a member of a queue set, and - posting to the queue set caused a higher priority - task to unblock. A context switch is required. */ - if( pxHigherPriorityTaskWoken != NULL ) - { - *pxHigherPriorityTaskWoken = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority so - record that a context switch is required. */ - if( pxHigherPriorityTaskWoken != NULL ) - { - *pxHigherPriorityTaskWoken = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - #else /* configUSE_QUEUE_SETS */ - { - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority so record that a - context switch is required. */ - if( pxHigherPriorityTaskWoken != NULL ) - { - *pxHigherPriorityTaskWoken = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_QUEUE_SETS */ - } - else - { - /* Increment the lock count so the task that unlocks the queue - knows that data was posted while it was locked. */ - pxQueue->cTxLock = ( int8_t ) ( cTxLock + 1 ); - } - - xReturn = pdPASS; - } - else - { - traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue ); - xReturn = errQUEUE_FULL; - } - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -BaseType_t xQueueGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, const BaseType_t xJustPeeking ) -{ -BaseType_t xEntryTimeSet = pdFALSE; -TimeOut_t xTimeOut; -int8_t *pcOriginalReadPosition; -Queue_t * const pxQueue = ( Queue_t * ) xQueue; - - configASSERT( pxQueue ); - configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) ); - #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) - { - configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) ); - } - #endif - - /* This function relaxes the coding standard somewhat to allow return - statements within the function itself. This is done in the interest - of execution time efficiency. */ - - for( ;; ) - { - taskENTER_CRITICAL(); - { - const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting; - - /* Is there data in the queue now? To be running the calling task - must be the highest priority task wanting to access the queue. */ - if( uxMessagesWaiting > ( UBaseType_t ) 0 ) - { - /* Remember the read position in case the queue is only being - peeked. */ - pcOriginalReadPosition = pxQueue->u.pcReadFrom; - - prvCopyDataFromQueue( pxQueue, pvBuffer ); - - if( xJustPeeking == pdFALSE ) - { - traceQUEUE_RECEIVE( pxQueue ); - - /* Actually removing data, not just peeking. */ - pxQueue->uxMessagesWaiting = uxMessagesWaiting - 1; - - #if ( configUSE_MUTEXES == 1 ) - { - if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) - { - /* Record the information required to implement - priority inheritance should it become necessary. */ - pxQueue->pxMutexHolder = ( int8_t * ) pvTaskIncrementMutexHeldCount(); /*lint !e961 Cast is not redundant as TaskHandle_t is a typedef. */ - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_MUTEXES */ - - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) - { - queueYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - traceQUEUE_PEEK( pxQueue ); - - /* The data is not being removed, so reset the read - pointer. */ - pxQueue->u.pcReadFrom = pcOriginalReadPosition; - - /* The data is being left in the queue, so see if there are - any other tasks waiting for the data. */ - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority than this task. */ - queueYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - taskEXIT_CRITICAL(); - return pdPASS; - } - else - { - if( xTicksToWait == ( TickType_t ) 0 ) - { - /* The queue was empty and no block time is specified (or - the block time has expired) so leave now. */ - taskEXIT_CRITICAL(); - traceQUEUE_RECEIVE_FAILED( pxQueue ); - return errQUEUE_EMPTY; - } - else if( xEntryTimeSet == pdFALSE ) - { - /* The queue was empty and a block time was specified so - configure the timeout structure. */ - vTaskSetTimeOutState( &xTimeOut ); - xEntryTimeSet = pdTRUE; - } - else - { - /* Entry time was already set. */ - mtCOVERAGE_TEST_MARKER(); - } - } - } - taskEXIT_CRITICAL(); - - /* Interrupts and other tasks can send to and receive from the queue - now the critical section has been exited. */ - - vTaskSuspendAll(); - prvLockQueue( pxQueue ); - - /* Update the timeout state to see if it has expired yet. */ - if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) - { - if( prvIsQueueEmpty( pxQueue ) != pdFALSE ) - { - traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue ); - - #if ( configUSE_MUTEXES == 1 ) - { - if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) - { - taskENTER_CRITICAL(); - { - vTaskPriorityInherit( ( void * ) pxQueue->pxMutexHolder ); - } - taskEXIT_CRITICAL(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif - - vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait ); - prvUnlockQueue( pxQueue ); - if( xTaskResumeAll() == pdFALSE ) - { - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - /* Try again. */ - prvUnlockQueue( pxQueue ); - ( void ) xTaskResumeAll(); - } - } - else - { - prvUnlockQueue( pxQueue ); - ( void ) xTaskResumeAll(); - - if( prvIsQueueEmpty( pxQueue ) != pdFALSE ) - { - traceQUEUE_RECEIVE_FAILED( pxQueue ); - return errQUEUE_EMPTY; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } -} -/*-----------------------------------------------------------*/ - -BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken ) -{ -BaseType_t xReturn; -UBaseType_t uxSavedInterruptStatus; -Queue_t * const pxQueue = ( Queue_t * ) xQueue; - - configASSERT( pxQueue ); - configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) ); - - /* RTOS ports that support interrupt nesting have the concept of a maximum - system call (or maximum API call) interrupt priority. Interrupts that are - above the maximum system call priority are kept permanently enabled, even - when the RTOS kernel is in a critical section, but cannot make any calls to - FreeRTOS API functions. If configASSERT() is defined in FreeRTOSConfig.h - then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion - failure if a FreeRTOS API function is called from an interrupt that has been - assigned a priority above the configured maximum system call priority. - Only FreeRTOS functions that end in FromISR can be called from interrupts - that have been assigned a priority at or (logically) below the maximum - system call interrupt priority. FreeRTOS maintains a separate interrupt - safe API to ensure interrupt entry is as fast and as simple as possible. - More information (albeit Cortex-M specific) is provided on the following - link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */ - portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - - uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); - { - const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting; - - /* Cannot block in an ISR, so check there is data available. */ - if( uxMessagesWaiting > ( UBaseType_t ) 0 ) - { - const int8_t cRxLock = pxQueue->cRxLock; - - traceQUEUE_RECEIVE_FROM_ISR( pxQueue ); - - prvCopyDataFromQueue( pxQueue, pvBuffer ); - pxQueue->uxMessagesWaiting = uxMessagesWaiting - 1; - - /* If the queue is locked the event list will not be modified. - Instead update the lock count so the task that unlocks the queue - will know that an ISR has removed data while the queue was - locked. */ - if( cRxLock == queueUNLOCKED ) - { - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) - { - /* The task waiting has a higher priority than us so - force a context switch. */ - if( pxHigherPriorityTaskWoken != NULL ) - { - *pxHigherPriorityTaskWoken = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - /* Increment the lock count so the task that unlocks the queue - knows that data was removed while it was locked. */ - pxQueue->cRxLock = ( int8_t ) ( cRxLock + 1 ); - } - - xReturn = pdPASS; - } - else - { - xReturn = pdFAIL; - traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue ); - } - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) -{ -BaseType_t xReturn; -UBaseType_t uxSavedInterruptStatus; -int8_t *pcOriginalReadPosition; -Queue_t * const pxQueue = ( Queue_t * ) xQueue; - - configASSERT( pxQueue ); - configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) ); - configASSERT( pxQueue->uxItemSize != 0 ); /* Can't peek a semaphore. */ - - /* RTOS ports that support interrupt nesting have the concept of a maximum - system call (or maximum API call) interrupt priority. Interrupts that are - above the maximum system call priority are kept permanently enabled, even - when the RTOS kernel is in a critical section, but cannot make any calls to - FreeRTOS API functions. If configASSERT() is defined in FreeRTOSConfig.h - then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion - failure if a FreeRTOS API function is called from an interrupt that has been - assigned a priority above the configured maximum system call priority. - Only FreeRTOS functions that end in FromISR can be called from interrupts - that have been assigned a priority at or (logically) below the maximum - system call interrupt priority. FreeRTOS maintains a separate interrupt - safe API to ensure interrupt entry is as fast and as simple as possible. - More information (albeit Cortex-M specific) is provided on the following - link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */ - portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - - uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); - { - /* Cannot block in an ISR, so check there is data available. */ - if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 ) - { - traceQUEUE_PEEK_FROM_ISR( pxQueue ); - - /* Remember the read position so it can be reset as nothing is - actually being removed from the queue. */ - pcOriginalReadPosition = pxQueue->u.pcReadFrom; - prvCopyDataFromQueue( pxQueue, pvBuffer ); - pxQueue->u.pcReadFrom = pcOriginalReadPosition; - - xReturn = pdPASS; - } - else - { - xReturn = pdFAIL; - traceQUEUE_PEEK_FROM_ISR_FAILED( pxQueue ); - } - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue ) -{ -UBaseType_t uxReturn; - - configASSERT( xQueue ); - - taskENTER_CRITICAL(); - { - uxReturn = ( ( Queue_t * ) xQueue )->uxMessagesWaiting; - } - taskEXIT_CRITICAL(); - - return uxReturn; -} /*lint !e818 Pointer cannot be declared const as xQueue is a typedef not pointer. */ -/*-----------------------------------------------------------*/ - -UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue ) -{ -UBaseType_t uxReturn; -Queue_t *pxQueue; - - pxQueue = ( Queue_t * ) xQueue; - configASSERT( pxQueue ); - - taskENTER_CRITICAL(); - { - uxReturn = pxQueue->uxLength - pxQueue->uxMessagesWaiting; - } - taskEXIT_CRITICAL(); - - return uxReturn; -} /*lint !e818 Pointer cannot be declared const as xQueue is a typedef not pointer. */ -/*-----------------------------------------------------------*/ - -UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) -{ -UBaseType_t uxReturn; - - configASSERT( xQueue ); - - uxReturn = ( ( Queue_t * ) xQueue )->uxMessagesWaiting; - - return uxReturn; -} /*lint !e818 Pointer cannot be declared const as xQueue is a typedef not pointer. */ -/*-----------------------------------------------------------*/ - -void vQueueDelete( QueueHandle_t xQueue ) -{ -Queue_t * const pxQueue = ( Queue_t * ) xQueue; - - configASSERT( pxQueue ); - traceQUEUE_DELETE( pxQueue ); - - #if ( configQUEUE_REGISTRY_SIZE > 0 ) - { - vQueueUnregisterQueue( pxQueue ); - } - #endif - - #if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) ) - { - /* The queue can only have been allocated dynamically - free it - again. */ - vPortFree( pxQueue ); - } - #elif( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - { - /* The queue could have been allocated statically or dynamically, so - check before attempting to free the memory. */ - if( pxQueue->ucStaticallyAllocated == ( uint8_t ) pdFALSE ) - { - vPortFree( pxQueue ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #else - { - /* The queue must have been statically allocated, so is not going to be - deleted. Avoid compiler warnings about the unused parameter. */ - ( void ) pxQueue; - } - #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ -} -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - UBaseType_t uxQueueGetQueueNumber( QueueHandle_t xQueue ) - { - return ( ( Queue_t * ) xQueue )->uxQueueNumber; - } - -#endif /* configUSE_TRACE_FACILITY */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - void vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ) - { - ( ( Queue_t * ) xQueue )->uxQueueNumber = uxQueueNumber; - } - -#endif /* configUSE_TRACE_FACILITY */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - uint8_t ucQueueGetQueueType( QueueHandle_t xQueue ) - { - return ( ( Queue_t * ) xQueue )->ucQueueType; - } - -#endif /* configUSE_TRACE_FACILITY */ -/*-----------------------------------------------------------*/ - -static BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue, const void *pvItemToQueue, const BaseType_t xPosition ) -{ -BaseType_t xReturn = pdFALSE; -UBaseType_t uxMessagesWaiting; - - /* This function is called from a critical section. */ - - uxMessagesWaiting = pxQueue->uxMessagesWaiting; - - if( pxQueue->uxItemSize == ( UBaseType_t ) 0 ) - { - #if ( configUSE_MUTEXES == 1 ) - { - if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) - { - /* The mutex is no longer being held. */ - xReturn = xTaskPriorityDisinherit( ( void * ) pxQueue->pxMutexHolder ); - pxQueue->pxMutexHolder = NULL; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_MUTEXES */ - } - else if( xPosition == queueSEND_TO_BACK ) - { - ( void ) memcpy( ( void * ) pxQueue->pcWriteTo, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 MISRA exception as the casts are only redundant for some ports, plus previous logic ensures a null pointer can only be passed to memcpy() if the copy size is 0. */ - pxQueue->pcWriteTo += pxQueue->uxItemSize; - if( pxQueue->pcWriteTo >= pxQueue->pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */ - { - pxQueue->pcWriteTo = pxQueue->pcHead; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - ( void ) memcpy( ( void * ) pxQueue->u.pcReadFrom, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - pxQueue->u.pcReadFrom -= pxQueue->uxItemSize; - if( pxQueue->u.pcReadFrom < pxQueue->pcHead ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */ - { - pxQueue->u.pcReadFrom = ( pxQueue->pcTail - pxQueue->uxItemSize ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - if( xPosition == queueOVERWRITE ) - { - if( uxMessagesWaiting > ( UBaseType_t ) 0 ) - { - /* An item is not being added but overwritten, so subtract - one from the recorded number of items in the queue so when - one is added again below the number of recorded items remains - correct. */ - --uxMessagesWaiting; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - pxQueue->uxMessagesWaiting = uxMessagesWaiting + 1; - - return xReturn; -} -/*-----------------------------------------------------------*/ - -static void prvCopyDataFromQueue( Queue_t * const pxQueue, void * const pvBuffer ) -{ - if( pxQueue->uxItemSize != ( UBaseType_t ) 0 ) - { - pxQueue->u.pcReadFrom += pxQueue->uxItemSize; - if( pxQueue->u.pcReadFrom >= pxQueue->pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */ - { - pxQueue->u.pcReadFrom = pxQueue->pcHead; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.pcReadFrom, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 MISRA exception as the casts are only redundant for some ports. Also previous logic ensures a null pointer can only be passed to memcpy() when the count is 0. */ - } -} -/*-----------------------------------------------------------*/ - -static void prvUnlockQueue( Queue_t * const pxQueue ) -{ - /* THIS FUNCTION MUST BE CALLED WITH THE SCHEDULER SUSPENDED. */ - - /* The lock counts contains the number of extra data items placed or - removed from the queue while the queue was locked. When a queue is - locked items can be added or removed, but the event lists cannot be - updated. */ - taskENTER_CRITICAL(); - { - int8_t cTxLock = pxQueue->cTxLock; - - /* See if data was added to the queue while it was locked. */ - while( cTxLock > queueLOCKED_UNMODIFIED ) - { - /* Data was posted while the queue was locked. Are any tasks - blocked waiting for data to become available? */ - #if ( configUSE_QUEUE_SETS == 1 ) - { - if( pxQueue->pxQueueSetContainer != NULL ) - { - if( prvNotifyQueueSetContainer( pxQueue, queueSEND_TO_BACK ) != pdFALSE ) - { - /* The queue is a member of a queue set, and posting to - the queue set caused a higher priority task to unblock. - A context switch is required. */ - vTaskMissedYield(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - /* Tasks that are removed from the event list will get - added to the pending ready list as the scheduler is still - suspended. */ - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority so record that a - context switch is required. */ - vTaskMissedYield(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - break; - } - } - } - #else /* configUSE_QUEUE_SETS */ - { - /* Tasks that are removed from the event list will get added to - the pending ready list as the scheduler is still suspended. */ - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority so record that - a context switch is required. */ - vTaskMissedYield(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - break; - } - } - #endif /* configUSE_QUEUE_SETS */ - - --cTxLock; - } - - pxQueue->cTxLock = queueUNLOCKED; - } - taskEXIT_CRITICAL(); - - /* Do the same for the Rx lock. */ - taskENTER_CRITICAL(); - { - int8_t cRxLock = pxQueue->cRxLock; - - while( cRxLock > queueLOCKED_UNMODIFIED ) - { - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) - { - vTaskMissedYield(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - --cRxLock; - } - else - { - break; - } - } - - pxQueue->cRxLock = queueUNLOCKED; - } - taskEXIT_CRITICAL(); -} -/*-----------------------------------------------------------*/ - -static BaseType_t prvIsQueueEmpty( const Queue_t *pxQueue ) -{ -BaseType_t xReturn; - - taskENTER_CRITICAL(); - { - if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 ) - { - xReturn = pdTRUE; - } - else - { - xReturn = pdFALSE; - } - } - taskEXIT_CRITICAL(); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) -{ -BaseType_t xReturn; - - configASSERT( xQueue ); - if( ( ( Queue_t * ) xQueue )->uxMessagesWaiting == ( UBaseType_t ) 0 ) - { - xReturn = pdTRUE; - } - else - { - xReturn = pdFALSE; - } - - return xReturn; -} /*lint !e818 xQueue could not be pointer to const because it is a typedef. */ -/*-----------------------------------------------------------*/ - -static BaseType_t prvIsQueueFull( const Queue_t *pxQueue ) -{ -BaseType_t xReturn; - - taskENTER_CRITICAL(); - { - if( pxQueue->uxMessagesWaiting == pxQueue->uxLength ) - { - xReturn = pdTRUE; - } - else - { - xReturn = pdFALSE; - } - } - taskEXIT_CRITICAL(); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) -{ -BaseType_t xReturn; - - configASSERT( xQueue ); - if( ( ( Queue_t * ) xQueue )->uxMessagesWaiting == ( ( Queue_t * ) xQueue )->uxLength ) - { - xReturn = pdTRUE; - } - else - { - xReturn = pdFALSE; - } - - return xReturn; -} /*lint !e818 xQueue could not be pointer to const because it is a typedef. */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_CO_ROUTINES == 1 ) - - BaseType_t xQueueCRSend( QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait ) - { - BaseType_t xReturn; - Queue_t * const pxQueue = ( Queue_t * ) xQueue; - - /* If the queue is already full we may have to block. A critical section - is required to prevent an interrupt removing something from the queue - between the check to see if the queue is full and blocking on the queue. */ - portDISABLE_INTERRUPTS(); - { - if( prvIsQueueFull( pxQueue ) != pdFALSE ) - { - /* The queue is full - do we want to block or just leave without - posting? */ - if( xTicksToWait > ( TickType_t ) 0 ) - { - /* As this is called from a coroutine we cannot block directly, but - return indicating that we need to block. */ - vCoRoutineAddToDelayedList( xTicksToWait, &( pxQueue->xTasksWaitingToSend ) ); - portENABLE_INTERRUPTS(); - return errQUEUE_BLOCKED; - } - else - { - portENABLE_INTERRUPTS(); - return errQUEUE_FULL; - } - } - } - portENABLE_INTERRUPTS(); - - portDISABLE_INTERRUPTS(); - { - if( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) - { - /* There is room in the queue, copy the data into the queue. */ - prvCopyDataToQueue( pxQueue, pvItemToQueue, queueSEND_TO_BACK ); - xReturn = pdPASS; - - /* Were any co-routines waiting for data to become available? */ - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) - { - /* In this instance the co-routine could be placed directly - into the ready list as we are within a critical section. - Instead the same pending ready list mechanism is used as if - the event were caused from within an interrupt. */ - if( xCoRoutineRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The co-routine waiting has a higher priority so record - that a yield might be appropriate. */ - xReturn = errQUEUE_YIELD; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - xReturn = errQUEUE_FULL; - } - } - portENABLE_INTERRUPTS(); - - return xReturn; - } - -#endif /* configUSE_CO_ROUTINES */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_CO_ROUTINES == 1 ) - - BaseType_t xQueueCRReceive( QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait ) - { - BaseType_t xReturn; - Queue_t * const pxQueue = ( Queue_t * ) xQueue; - - /* If the queue is already empty we may have to block. A critical section - is required to prevent an interrupt adding something to the queue - between the check to see if the queue is empty and blocking on the queue. */ - portDISABLE_INTERRUPTS(); - { - if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 ) - { - /* There are no messages in the queue, do we want to block or just - leave with nothing? */ - if( xTicksToWait > ( TickType_t ) 0 ) - { - /* As this is a co-routine we cannot block directly, but return - indicating that we need to block. */ - vCoRoutineAddToDelayedList( xTicksToWait, &( pxQueue->xTasksWaitingToReceive ) ); - portENABLE_INTERRUPTS(); - return errQUEUE_BLOCKED; - } - else - { - portENABLE_INTERRUPTS(); - return errQUEUE_FULL; - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - portENABLE_INTERRUPTS(); - - portDISABLE_INTERRUPTS(); - { - if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 ) - { - /* Data is available from the queue. */ - pxQueue->u.pcReadFrom += pxQueue->uxItemSize; - if( pxQueue->u.pcReadFrom >= pxQueue->pcTail ) - { - pxQueue->u.pcReadFrom = pxQueue->pcHead; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - --( pxQueue->uxMessagesWaiting ); - ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.pcReadFrom, ( unsigned ) pxQueue->uxItemSize ); - - xReturn = pdPASS; - - /* Were any co-routines waiting for space to become available? */ - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) - { - /* In this instance the co-routine could be placed directly - into the ready list as we are within a critical section. - Instead the same pending ready list mechanism is used as if - the event were caused from within an interrupt. */ - if( xCoRoutineRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) - { - xReturn = errQUEUE_YIELD; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - xReturn = pdFAIL; - } - } - portENABLE_INTERRUPTS(); - - return xReturn; - } - -#endif /* configUSE_CO_ROUTINES */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_CO_ROUTINES == 1 ) - - BaseType_t xQueueCRSendFromISR( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t xCoRoutinePreviouslyWoken ) - { - Queue_t * const pxQueue = ( Queue_t * ) xQueue; - - /* Cannot block within an ISR so if there is no space on the queue then - exit without doing anything. */ - if( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) - { - prvCopyDataToQueue( pxQueue, pvItemToQueue, queueSEND_TO_BACK ); - - /* We only want to wake one co-routine per ISR, so check that a - co-routine has not already been woken. */ - if( xCoRoutinePreviouslyWoken == pdFALSE ) - { - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) - { - if( xCoRoutineRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - return pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - return xCoRoutinePreviouslyWoken; - } - -#endif /* configUSE_CO_ROUTINES */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_CO_ROUTINES == 1 ) - - BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue, void *pvBuffer, BaseType_t *pxCoRoutineWoken ) - { - BaseType_t xReturn; - Queue_t * const pxQueue = ( Queue_t * ) xQueue; - - /* We cannot block from an ISR, so check there is data available. If - not then just leave without doing anything. */ - if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 ) - { - /* Copy the data from the queue. */ - pxQueue->u.pcReadFrom += pxQueue->uxItemSize; - if( pxQueue->u.pcReadFrom >= pxQueue->pcTail ) - { - pxQueue->u.pcReadFrom = pxQueue->pcHead; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - --( pxQueue->uxMessagesWaiting ); - ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.pcReadFrom, ( unsigned ) pxQueue->uxItemSize ); - - if( ( *pxCoRoutineWoken ) == pdFALSE ) - { - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) - { - if( xCoRoutineRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) - { - *pxCoRoutineWoken = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - xReturn = pdPASS; - } - else - { - xReturn = pdFAIL; - } - - return xReturn; - } - -#endif /* configUSE_CO_ROUTINES */ -/*-----------------------------------------------------------*/ - -#if ( configQUEUE_REGISTRY_SIZE > 0 ) - - void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcQueueName ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - { - UBaseType_t ux; - - /* See if there is an empty space in the registry. A NULL name denotes - a free slot. */ - for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ ) - { - if( xQueueRegistry[ ux ].pcQueueName == NULL ) - { - /* Store the information on this queue. */ - xQueueRegistry[ ux ].pcQueueName = pcQueueName; - xQueueRegistry[ ux ].xHandle = xQueue; - - traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName ); - break; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - -#endif /* configQUEUE_REGISTRY_SIZE */ -/*-----------------------------------------------------------*/ - -#if ( configQUEUE_REGISTRY_SIZE > 0 ) - - const char *pcQueueGetName( QueueHandle_t xQueue ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - { - UBaseType_t ux; - const char *pcReturn = NULL; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - - /* Note there is nothing here to protect against another task adding or - removing entries from the registry while it is being searched. */ - for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ ) - { - if( xQueueRegistry[ ux ].xHandle == xQueue ) - { - pcReturn = xQueueRegistry[ ux ].pcQueueName; - break; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - return pcReturn; - } - -#endif /* configQUEUE_REGISTRY_SIZE */ -/*-----------------------------------------------------------*/ - -#if ( configQUEUE_REGISTRY_SIZE > 0 ) - - void vQueueUnregisterQueue( QueueHandle_t xQueue ) - { - UBaseType_t ux; - - /* See if the handle of the queue being unregistered in actually in the - registry. */ - for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ ) - { - if( xQueueRegistry[ ux ].xHandle == xQueue ) - { - /* Set the name to NULL to show that this slot if free again. */ - xQueueRegistry[ ux ].pcQueueName = NULL; - - /* Set the handle to NULL to ensure the same queue handle cannot - appear in the registry twice if it is added, removed, then - added again. */ - xQueueRegistry[ ux ].xHandle = ( QueueHandle_t ) 0; - break; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - } /*lint !e818 xQueue could not be pointer to const because it is a typedef. */ - -#endif /* configQUEUE_REGISTRY_SIZE */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_TIMERS == 1 ) - - void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) - { - Queue_t * const pxQueue = ( Queue_t * ) xQueue; - - /* This function should not be called by application code hence the - 'Restricted' in its name. It is not part of the public API. It is - designed for use by kernel code, and has special calling requirements. - It can result in vListInsert() being called on a list that can only - possibly ever have one item in it, so the list will be fast, but even - so it should be called with the scheduler locked and not from a critical - section. */ - - /* Only do anything if there are no messages in the queue. This function - will not actually cause the task to block, just place it on a blocked - list. It will not block until the scheduler is unlocked - at which - time a yield will be performed. If an item is added to the queue while - the queue is locked, and the calling task blocks on the queue, then the - calling task will be immediately unblocked when the queue is unlocked. */ - prvLockQueue( pxQueue ); - if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0U ) - { - /* There is nothing in the queue, block for the specified period. */ - vTaskPlaceOnEventListRestricted( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait, xWaitIndefinitely ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - prvUnlockQueue( pxQueue ); - } - -#endif /* configUSE_TIMERS */ -/*-----------------------------------------------------------*/ - -#if( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - - QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) - { - QueueSetHandle_t pxQueue; - - pxQueue = xQueueGenericCreate( uxEventQueueLength, sizeof( Queue_t * ), queueQUEUE_TYPE_SET ); - - return pxQueue; - } - -#endif /* configUSE_QUEUE_SETS */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_QUEUE_SETS == 1 ) - - BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) - { - BaseType_t xReturn; - - taskENTER_CRITICAL(); - { - if( ( ( Queue_t * ) xQueueOrSemaphore )->pxQueueSetContainer != NULL ) - { - /* Cannot add a queue/semaphore to more than one queue set. */ - xReturn = pdFAIL; - } - else if( ( ( Queue_t * ) xQueueOrSemaphore )->uxMessagesWaiting != ( UBaseType_t ) 0 ) - { - /* Cannot add a queue/semaphore to a queue set if there are already - items in the queue/semaphore. */ - xReturn = pdFAIL; - } - else - { - ( ( Queue_t * ) xQueueOrSemaphore )->pxQueueSetContainer = xQueueSet; - xReturn = pdPASS; - } - } - taskEXIT_CRITICAL(); - - return xReturn; - } - -#endif /* configUSE_QUEUE_SETS */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_QUEUE_SETS == 1 ) - - BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) - { - BaseType_t xReturn; - Queue_t * const pxQueueOrSemaphore = ( Queue_t * ) xQueueOrSemaphore; - - if( pxQueueOrSemaphore->pxQueueSetContainer != xQueueSet ) - { - /* The queue was not a member of the set. */ - xReturn = pdFAIL; - } - else if( pxQueueOrSemaphore->uxMessagesWaiting != ( UBaseType_t ) 0 ) - { - /* It is dangerous to remove a queue from a set when the queue is - not empty because the queue set will still hold pending events for - the queue. */ - xReturn = pdFAIL; - } - else - { - taskENTER_CRITICAL(); - { - /* The queue is no longer contained in the set. */ - pxQueueOrSemaphore->pxQueueSetContainer = NULL; - } - taskEXIT_CRITICAL(); - xReturn = pdPASS; - } - - return xReturn; - } /*lint !e818 xQueueSet could not be declared as pointing to const as it is a typedef. */ - -#endif /* configUSE_QUEUE_SETS */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_QUEUE_SETS == 1 ) - - QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet, TickType_t const xTicksToWait ) - { - QueueSetMemberHandle_t xReturn = NULL; - - ( void ) xQueueGenericReceive( ( QueueHandle_t ) xQueueSet, &xReturn, xTicksToWait, pdFALSE ); /*lint !e961 Casting from one typedef to another is not redundant. */ - return xReturn; - } - -#endif /* configUSE_QUEUE_SETS */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_QUEUE_SETS == 1 ) - - QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) - { - QueueSetMemberHandle_t xReturn = NULL; - - ( void ) xQueueReceiveFromISR( ( QueueHandle_t ) xQueueSet, &xReturn, NULL ); /*lint !e961 Casting from one typedef to another is not redundant. */ - return xReturn; - } - -#endif /* configUSE_QUEUE_SETS */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_QUEUE_SETS == 1 ) - - static BaseType_t prvNotifyQueueSetContainer( const Queue_t * const pxQueue, const BaseType_t xCopyPosition ) - { - Queue_t *pxQueueSetContainer = pxQueue->pxQueueSetContainer; - BaseType_t xReturn = pdFALSE; - - /* This function must be called form a critical section. */ - - configASSERT( pxQueueSetContainer ); - configASSERT( pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength ); - - if( pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength ) - { - const int8_t cTxLock = pxQueueSetContainer->cTxLock; - - traceQUEUE_SEND( pxQueueSetContainer ); - - /* The data copied is the handle of the queue that contains data. */ - xReturn = prvCopyDataToQueue( pxQueueSetContainer, &pxQueue, xCopyPosition ); - - if( cTxLock == queueUNLOCKED ) - { - if( listLIST_IS_EMPTY( &( pxQueueSetContainer->xTasksWaitingToReceive ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueueSetContainer->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority. */ - xReturn = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - pxQueueSetContainer->cTxLock = ( int8_t ) ( cTxLock + 1 ); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - return xReturn; - } - -#endif /* configUSE_QUEUE_SETS */ - - - - - - - - - - - - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/tasks.c b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/tasks.c deleted file mode 100644 index 4ffa7fa..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/tasks.c +++ /dev/null @@ -1,4933 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -/* Standard includes. */ -#include -#include -#include - -/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining -all the API functions to use the MPU wrappers. That should only be done when -task.h is included from an application file. */ -#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE - -/* FreeRTOS includes. */ -#include "FreeRTOS.h" -#include "task.h" -#include "timers.h" -#include "tcm_heap.h" -#include "StackMacros.h" - -/* Lint e961 and e750 are suppressed as a MISRA exception justified because the -MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined for the -header files above, but not in this file, in order to generate the correct -privileged Vs unprivileged linkage and placement. */ -#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750. */ - -/* Set configUSE_STATS_FORMATTING_FUNCTIONS to 2 to include the stats formatting -functions but without including stdio.h here. */ -#if ( configUSE_STATS_FORMATTING_FUNCTIONS == 1 ) - /* At the bottom of this file are two optional functions that can be used - to generate human readable text from the raw data generated by the - uxTaskGetSystemState() function. Note the formatting functions are provided - for convenience only, and are NOT considered part of the kernel. */ - #include -#endif /* configUSE_STATS_FORMATTING_FUNCTIONS == 1 ) */ - -#if( configUSE_PREEMPTION == 0 ) - /* If the cooperative scheduler is being used then a yield should not be - performed just because a higher priority task has been woken. */ - #define taskYIELD_IF_USING_PREEMPTION() -#else - #define taskYIELD_IF_USING_PREEMPTION() portYIELD_WITHIN_API() -#endif - -/* Values that can be assigned to the ucNotifyState member of the TCB. */ -#define taskNOT_WAITING_NOTIFICATION ( ( uint8_t ) 0 ) -#define taskWAITING_NOTIFICATION ( ( uint8_t ) 1 ) -#define taskNOTIFICATION_RECEIVED ( ( uint8_t ) 2 ) - -/* - * The value used to fill the stack of a task when the task is created. This - * is used purely for checking the high water mark for tasks. - */ -#define tskSTACK_FILL_BYTE ( 0xa5U ) - -/* Sometimes the FreeRTOSConfig.h settings only allow a task to be created using -dynamically allocated RAM, in which case when any task is deleted it is known -that both the task's stack and TCB need to be freed. Sometimes the -FreeRTOSConfig.h settings only allow a task to be created using statically -allocated RAM, in which case when any task is deleted it is known that neither -the task's stack or TCB should be freed. Sometimes the FreeRTOSConfig.h -settings allow a task to be created using either statically or dynamically -allocated RAM, in which case a member of the TCB is used to record whether the -stack and/or TCB were allocated statically or dynamically, so when a task is -deleted the RAM that was allocated dynamically is freed again and no attempt is -made to free the RAM that was allocated statically. -tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE is only true if it is possible for a -task to be created using either statically or dynamically allocated RAM. Note -that if portUSING_MPU_WRAPPERS is 1 then a protected task can be created with -a statically allocated stack and a dynamically allocated TCB. */ -#define tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE ( ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) || ( portUSING_MPU_WRAPPERS == 1 ) ) -#define tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB ( ( uint8_t ) 0 ) -#define tskSTATICALLY_ALLOCATED_STACK_ONLY ( ( uint8_t ) 1 ) -#define tskSTATICALLY_ALLOCATED_STACK_AND_TCB ( ( uint8_t ) 2 ) - -/* - * Macros used by vListTask to indicate which state a task is in. - */ -#define tskBLOCKED_CHAR ( 'B' ) -#define tskREADY_CHAR ( 'R' ) -#define tskDELETED_CHAR ( 'D' ) -#define tskSUSPENDED_CHAR ( 'S' ) - -/* - * Some kernel aware debuggers require the data the debugger needs access to be - * global, rather than file scope. - */ -#ifdef portREMOVE_STATIC_QUALIFIER - #define static -#endif - -#if ( configUSE_PORT_OPTIMISED_TASK_SELECTION == 0 ) - - /* If configUSE_PORT_OPTIMISED_TASK_SELECTION is 0 then task selection is - performed in a generic way that is not optimised to any particular - microcontroller architecture. */ - - /* uxTopReadyPriority holds the priority of the highest priority ready - state task. */ - #define taskRECORD_READY_PRIORITY( uxPriority ) \ - { \ - if( ( uxPriority ) > uxTopReadyPriority ) \ - { \ - uxTopReadyPriority = ( uxPriority ); \ - } \ - } /* taskRECORD_READY_PRIORITY */ - - /*-----------------------------------------------------------*/ - - #define taskSELECT_HIGHEST_PRIORITY_TASK() \ - { \ - UBaseType_t uxTopPriority = uxTopReadyPriority; \ - \ - /* Find the highest priority queue that contains ready tasks. */ \ - while( listLIST_IS_EMPTY( &( pxReadyTasksLists[ uxTopPriority ] ) ) ) \ - { \ - configASSERT( uxTopPriority ); \ - --uxTopPriority; \ - } \ - \ - /* listGET_OWNER_OF_NEXT_ENTRY indexes through the list, so the tasks of \ - the same priority get an equal share of the processor time. */ \ - listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &( pxReadyTasksLists[ uxTopPriority ] ) ); \ - uxTopReadyPriority = uxTopPriority; \ - } /* taskSELECT_HIGHEST_PRIORITY_TASK */ - - /*-----------------------------------------------------------*/ - - /* Define away taskRESET_READY_PRIORITY() and portRESET_READY_PRIORITY() as - they are only required when a port optimised method of task selection is - being used. */ - #define taskRESET_READY_PRIORITY( uxPriority ) - #define portRESET_READY_PRIORITY( uxPriority, uxTopReadyPriority ) - -#else /* configUSE_PORT_OPTIMISED_TASK_SELECTION */ - - /* If configUSE_PORT_OPTIMISED_TASK_SELECTION is 1 then task selection is - performed in a way that is tailored to the particular microcontroller - architecture being used. */ - - /* A port optimised version is provided. Call the port defined macros. */ - #define taskRECORD_READY_PRIORITY( uxPriority ) portRECORD_READY_PRIORITY( uxPriority, uxTopReadyPriority ) - - /*-----------------------------------------------------------*/ - - #define taskSELECT_HIGHEST_PRIORITY_TASK() \ - { \ - UBaseType_t uxTopPriority; \ - \ - /* Find the highest priority list that contains ready tasks. */ \ - portGET_HIGHEST_PRIORITY( uxTopPriority, uxTopReadyPriority ); \ - configASSERT( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ uxTopPriority ] ) ) > 0 ); \ - listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &( pxReadyTasksLists[ uxTopPriority ] ) ); \ - } /* taskSELECT_HIGHEST_PRIORITY_TASK() */ - - /*-----------------------------------------------------------*/ - - /* A port optimised version is provided, call it only if the TCB being reset - is being referenced from a ready list. If it is referenced from a delayed - or suspended list then it won't be in a ready list. */ - #define taskRESET_READY_PRIORITY( uxPriority ) \ - { \ - if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ ( uxPriority ) ] ) ) == ( UBaseType_t ) 0 ) \ - { \ - portRESET_READY_PRIORITY( ( uxPriority ), ( uxTopReadyPriority ) ); \ - } \ - } - -#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */ - -/*-----------------------------------------------------------*/ - -/* pxDelayedTaskList and pxOverflowDelayedTaskList are switched when the tick -count overflows. */ -#define taskSWITCH_DELAYED_LISTS() \ -{ \ - List_t *pxTemp; \ - \ - /* The delayed tasks list should be empty when the lists are switched. */ \ - configASSERT( ( listLIST_IS_EMPTY( pxDelayedTaskList ) ) ); \ - \ - pxTemp = pxDelayedTaskList; \ - pxDelayedTaskList = pxOverflowDelayedTaskList; \ - pxOverflowDelayedTaskList = pxTemp; \ - xNumOfOverflows++; \ - prvResetNextTaskUnblockTime(); \ -} - -/*-----------------------------------------------------------*/ - -/* - * Place the task represented by pxTCB into the appropriate ready list for - * the task. It is inserted at the end of the list. - */ -#define prvAddTaskToReadyList( pxTCB ) \ - traceMOVED_TASK_TO_READY_STATE( pxTCB ); \ - taskRECORD_READY_PRIORITY( ( pxTCB )->uxPriority ); \ - vListInsertEnd( &( pxReadyTasksLists[ ( pxTCB )->uxPriority ] ), &( ( pxTCB )->xStateListItem ) ); \ - tracePOST_MOVED_TASK_TO_READY_STATE( pxTCB ) -/*-----------------------------------------------------------*/ - -/* - * Several functions take an TaskHandle_t parameter that can optionally be NULL, - * where NULL is used to indicate that the handle of the currently executing - * task should be used in place of the parameter. This macro simply checks to - * see if the parameter is NULL and returns a pointer to the appropriate TCB. - */ -#define prvGetTCBFromHandle( pxHandle ) ( ( ( pxHandle ) == NULL ) ? ( TCB_t * ) pxCurrentTCB : ( TCB_t * ) ( pxHandle ) ) - -/* The item value of the event list item is normally used to hold the priority -of the task to which it belongs (coded to allow it to be held in reverse -priority order). However, it is occasionally borrowed for other purposes. It -is important its value is not updated due to a task priority change while it is -being used for another purpose. The following bit definition is used to inform -the scheduler that the value should not be changed - in which case it is the -responsibility of whichever module is using the value to ensure it gets set back -to its original value when it is released. */ -#if( configUSE_16_BIT_TICKS == 1 ) - #define taskEVENT_LIST_ITEM_VALUE_IN_USE 0x8000U -#else - #define taskEVENT_LIST_ITEM_VALUE_IN_USE 0x80000000UL -#endif - -/* - * Task control block. A task control block (TCB) is allocated for each task, - * and stores task state information, including a pointer to the task's context - * (the task's run time environment, including register values) - */ -typedef struct tskTaskControlBlock -{ - volatile StackType_t *pxTopOfStack; /*< Points to the location of the last item placed on the tasks stack. THIS MUST BE THE FIRST MEMBER OF THE TCB STRUCT. */ - - #if ( portUSING_MPU_WRAPPERS == 1 ) - xMPU_SETTINGS xMPUSettings; /*< The MPU settings are defined as part of the port layer. THIS MUST BE THE SECOND MEMBER OF THE TCB STRUCT. */ - #endif - - ListItem_t xStateListItem; /*< The list that the state list item of a task is reference from denotes the state of that task (Ready, Blocked, Suspended ). */ - ListItem_t xEventListItem; /*< Used to reference a task from an event list. */ - UBaseType_t uxPriority; /*< The priority of the task. 0 is the lowest priority. */ - StackType_t *pxStack; /*< Points to the start of the stack. */ - char pcTaskName[ configMAX_TASK_NAME_LEN ];/*< Descriptive name given to the task when created. Facilitates debugging only. */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - - #if ( portSTACK_GROWTH > 0 ) - StackType_t *pxEndOfStack; /*< Points to the end of the stack on architectures where the stack grows up from low memory. */ - #endif - - #if ( portCRITICAL_NESTING_IN_TCB == 1 ) - UBaseType_t uxCriticalNesting; /*< Holds the critical section nesting depth for ports that do not maintain their own count in the port layer. */ - #endif - - #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxTCBNumber; /*< Stores a number that increments each time a TCB is created. It allows debuggers to determine when a task has been deleted and then recreated. */ - UBaseType_t uxTaskNumber; /*< Stores a number specifically for use by third party trace code. */ - #endif - - #if ( configUSE_MUTEXES == 1 ) - UBaseType_t uxBasePriority; /*< The priority last assigned to the task - used by the priority inheritance mechanism. */ - UBaseType_t uxMutexesHeld; - #endif - - #if ( configUSE_APPLICATION_TASK_TAG == 1 ) - TaskHookFunction_t pxTaskTag; - #endif - - #if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 ) - void *pvThreadLocalStoragePointers[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ]; - #endif - - #if( configGENERATE_RUN_TIME_STATS == 1 ) - uint32_t ulRunTimeCounter; /*< Stores the amount of time the task has spent in the Running state. */ - #endif - - #if ( configUSE_NEWLIB_REENTRANT == 1 ) - /* Allocate a Newlib reent structure that is specific to this task. - Note Newlib support has been included by popular demand, but is not - used by the FreeRTOS maintainers themselves. FreeRTOS is not - responsible for resulting newlib operation. User must be familiar with - newlib and must provide system-wide implementations of the necessary - stubs. Be warned that (at the time of writing) the current newlib design - implements a system-wide malloc() that must be provided with locks. */ - struct _reent xNewLib_reent; - #endif - - #if( configUSE_TASK_NOTIFICATIONS == 1 ) - volatile uint32_t ulNotifiedValue; - volatile uint8_t ucNotifyState; - #endif - - /* See the comments above the definition of - tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE. */ - #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) - uint8_t ucStaticallyAllocated; /*< Set to pdTRUE if the task is a statically allocated to ensure no attempt is made to free the memory. */ - #endif - - #if( INCLUDE_xTaskAbortDelay == 1 ) - uint8_t ucDelayAborted; - #endif - -} tskTCB; - -/* The old tskTCB name is maintained above then typedefed to the new TCB_t name -below to enable the use of older kernel aware debuggers. */ -typedef tskTCB TCB_t; - -/*lint -e956 A manual analysis and inspection has been used to determine which -static variables must be declared volatile. */ - -PRIVILEGED_DATA TCB_t * volatile pxCurrentTCB = NULL; - -/* Lists for ready and blocked tasks. --------------------*/ -PRIVILEGED_DATA static List_t pxReadyTasksLists[ configMAX_PRIORITIES ];/*< Prioritised ready tasks. */ -PRIVILEGED_DATA static List_t xDelayedTaskList1; /*< Delayed tasks. */ -PRIVILEGED_DATA static List_t xDelayedTaskList2; /*< Delayed tasks (two lists are used - one for delays that have overflowed the current tick count. */ -PRIVILEGED_DATA static List_t * volatile pxDelayedTaskList; /*< Points to the delayed task list currently being used. */ -PRIVILEGED_DATA static List_t * volatile pxOverflowDelayedTaskList; /*< Points to the delayed task list currently being used to hold tasks that have overflowed the current tick count. */ -PRIVILEGED_DATA static List_t xPendingReadyList; /*< Tasks that have been readied while the scheduler was suspended. They will be moved to the ready list when the scheduler is resumed. */ - -#if( INCLUDE_vTaskDelete == 1 ) - - PRIVILEGED_DATA static List_t xTasksWaitingTermination; /*< Tasks that have been deleted - but their memory not yet freed. */ - PRIVILEGED_DATA static volatile UBaseType_t uxDeletedTasksWaitingCleanUp = ( UBaseType_t ) 0U; - -#endif - -#if ( INCLUDE_vTaskSuspend == 1 ) - - PRIVILEGED_DATA static List_t xSuspendedTaskList; /*< Tasks that are currently suspended. */ - -#endif - -/* Other file private variables. --------------------------------*/ -PRIVILEGED_DATA static volatile UBaseType_t uxCurrentNumberOfTasks = ( UBaseType_t ) 0U; -PRIVILEGED_DATA static volatile TickType_t xTickCount = ( TickType_t ) 0U; -PRIVILEGED_DATA static volatile UBaseType_t uxTopReadyPriority = tskIDLE_PRIORITY; -PRIVILEGED_DATA static volatile BaseType_t xSchedulerRunning = pdFALSE; -PRIVILEGED_DATA static volatile UBaseType_t uxPendedTicks = ( UBaseType_t ) 0U; -PRIVILEGED_DATA static volatile BaseType_t xYieldPending = pdFALSE; -PRIVILEGED_DATA static volatile BaseType_t xNumOfOverflows = ( BaseType_t ) 0; -PRIVILEGED_DATA static UBaseType_t uxTaskNumber = ( UBaseType_t ) 0U; -PRIVILEGED_DATA static volatile TickType_t xNextTaskUnblockTime = ( TickType_t ) 0U; /* Initialised to portMAX_DELAY before the scheduler starts. */ -PRIVILEGED_DATA static TaskHandle_t xIdleTaskHandle = NULL; /*< Holds the handle of the idle task. The idle task is created automatically when the scheduler is started. */ - -/* Context switches are held pending while the scheduler is suspended. Also, -interrupts must not manipulate the xStateListItem of a TCB, or any of the -lists the xStateListItem can be referenced from, if the scheduler is suspended. -If an interrupt needs to unblock a task while the scheduler is suspended then it -moves the task's event list item into the xPendingReadyList, ready for the -kernel to move the task from the pending ready list into the real ready list -when the scheduler is unsuspended. The pending ready list itself can only be -accessed from a critical section. */ -PRIVILEGED_DATA static volatile UBaseType_t uxSchedulerSuspended = ( UBaseType_t ) pdFALSE; - -#if ( configGENERATE_RUN_TIME_STATS == 1 ) - - PRIVILEGED_DATA static uint32_t ulTaskSwitchedInTime = 0UL; /*< Holds the value of a timer/counter the last time a task was switched in. */ - PRIVILEGED_DATA static uint32_t ulTotalRunTime = 0UL; /*< Holds the total amount of execution time as defined by the run time counter clock. */ - -#endif - -/*lint +e956 */ - -/*-----------------------------------------------------------*/ - -/* Callback function prototypes. --------------------------*/ -#if( configCHECK_FOR_STACK_OVERFLOW > 0 ) - extern void vApplicationStackOverflowHook( TaskHandle_t xTask, char *pcTaskName ); -#endif - -#if( configUSE_TICK_HOOK > 0 ) - extern void vApplicationTickHook( void ); -#endif - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - extern void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ); -#endif - -/* File private functions. --------------------------------*/ - -/** - * Utility task that simply returns pdTRUE if the task referenced by xTask is - * currently in the Suspended state, or pdFALSE if the task referenced by xTask - * is in any other state. - */ -#if ( INCLUDE_vTaskSuspend == 1 ) - static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION; -#endif /* INCLUDE_vTaskSuspend */ - -/* - * Utility to ready all the lists used by the scheduler. This is called - * automatically upon the creation of the first task. - */ -static void prvInitialiseTaskLists( void ) PRIVILEGED_FUNCTION; - -/* - * The idle task, which as all tasks is implemented as a never ending loop. - * The idle task is automatically created and added to the ready lists upon - * creation of the first user task. - * - * The portTASK_FUNCTION_PROTO() macro is used to allow port/compiler specific - * language extensions. The equivalent prototype for this function is: - * - * void prvIdleTask( void *pvParameters ); - * - */ -static portTASK_FUNCTION_PROTO( prvIdleTask, pvParameters ); - -/* - * Utility to free all memory allocated by the scheduler to hold a TCB, - * including the stack pointed to by the TCB. - * - * This does not free memory allocated by the task itself (i.e. memory - * allocated by calls to pvPortMalloc from within the tasks application code). - */ -#if ( INCLUDE_vTaskDelete == 1 ) - - static void prvDeleteTCB( TCB_t *pxTCB ) PRIVILEGED_FUNCTION; - -#endif - -/* - * Used only by the idle task. This checks to see if anything has been placed - * in the list of tasks waiting to be deleted. If so the task is cleaned up - * and its TCB deleted. - */ -static void prvCheckTasksWaitingTermination( void ) PRIVILEGED_FUNCTION; - -/* - * The currently executing task is entering the Blocked state. Add the task to - * either the current or the overflow delayed task list. - */ -static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseType_t xCanBlockIndefinitely ) PRIVILEGED_FUNCTION; - -/* - * Fills an TaskStatus_t structure with information on each task that is - * referenced from the pxList list (which may be a ready list, a delayed list, - * a suspended list, etc.). - * - * THIS FUNCTION IS INTENDED FOR DEBUGGING ONLY, AND SHOULD NOT BE CALLED FROM - * NORMAL APPLICATION CODE. - */ -#if ( configUSE_TRACE_FACILITY == 1 ) - - static UBaseType_t prvListTasksWithinSingleList( TaskStatus_t *pxTaskStatusArray, List_t *pxList, eTaskState eState ) PRIVILEGED_FUNCTION; - -#endif - -/* - * Searches pxList for a task with name pcNameToQuery - returning a handle to - * the task if it is found, or NULL if the task is not found. - */ -#if ( INCLUDE_xTaskGetHandle == 1 ) - - static TCB_t *prvSearchForNameWithinSingleList( List_t *pxList, const char pcNameToQuery[] ) PRIVILEGED_FUNCTION; - -#endif - -/* - * When a task is created, the stack of the task is filled with a known value. - * This function determines the 'high water mark' of the task stack by - * determining how much of the stack remains at the original preset value. - */ -#if ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) ) - - static uint16_t prvTaskCheckFreeStackSpace( const uint8_t * pucStackByte ) PRIVILEGED_FUNCTION; - -#endif - -/* - * Return the amount of time, in ticks, that will pass before the kernel will - * next move a task from the Blocked state to the Running state. - * - * This conditional compilation should use inequality to 0, not equality to 1. - * This is to ensure portSUPPRESS_TICKS_AND_SLEEP() can be called when user - * defined low power mode implementations require configUSE_TICKLESS_IDLE to be - * set to a value other than 1. - */ -#if ( configUSE_TICKLESS_IDLE != 0 ) - - static TickType_t prvGetExpectedIdleTime( void ) PRIVILEGED_FUNCTION; - -#endif - -/* - * Set xNextTaskUnblockTime to the time at which the next Blocked state task - * will exit the Blocked state. - */ -static void prvResetNextTaskUnblockTime( void ); - -#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) - - /* - * Helper function used to pad task names with spaces when printing out - * human readable tables of task information. - */ - static char *prvWriteNameToBuffer( char *pcBuffer, const char *pcTaskName ) PRIVILEGED_FUNCTION; - -#endif - -/* - * Called after a Task_t structure has been allocated either statically or - * dynamically to fill in the structure's members. - */ -static void prvInitialiseNewTask( TaskFunction_t pxTaskCode, - const char * const pcName, - const uint32_t ulStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - TaskHandle_t * const pxCreatedTask, - TCB_t *pxNewTCB -#if( portUSING_MPU_WRAPPERS == 1 ) - , const MemoryRegion_t * const xRegions ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -#else - ) -#endif - - PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - -/* - * Called after a new task has been created and initialised to place the task - * under the control of the scheduler. - */ -static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) PRIVILEGED_FUNCTION; - -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - - TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode, - const char * const pcName, - const uint32_t ulStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - StackType_t * const puxStackBuffer, - StaticTask_t * const pxTaskBuffer ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - { - TCB_t *pxNewTCB; - TaskHandle_t xReturn; - - configASSERT( puxStackBuffer != NULL ); - configASSERT( pxTaskBuffer != NULL ); - - if( ( pxTaskBuffer != NULL ) && ( puxStackBuffer != NULL ) ) - { - /* The memory used for the task's TCB and stack are passed into this - function - use them. */ - pxNewTCB = ( TCB_t * ) pxTaskBuffer; /*lint !e740 Unusual cast is ok as the structures are designed to have the same alignment, and the size is checked by an assert. */ - pxNewTCB->pxStack = ( StackType_t * ) puxStackBuffer; - - #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) - { - /* Tasks can be created statically or dynamically, so note this - task was created statically in case the task is later deleted. */ - pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_AND_TCB; - } - #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ - - prvInitialiseNewTask( pxTaskCode, pcName, ulStackDepth, pvParameters, uxPriority, &xReturn, pxNewTCB -#if( portUSING_MPU_WRAPPERS == 1 ) - , NULL -#endif - ); - prvAddNewTaskToReadyList( pxNewTCB ); - } - else - { - xReturn = NULL; - } - - return xReturn; - } - -#endif /* SUPPORT_STATIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -#if( portUSING_MPU_WRAPPERS == 1 ) - - BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) - { - TCB_t *pxNewTCB; - BaseType_t xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY; - - configASSERT( pxTaskDefinition->puxStackBuffer ); - - if( pxTaskDefinition->puxStackBuffer != NULL ) - { - /* Allocate space for the TCB. Where the memory comes from depends - on the implementation of the port malloc function and whether or - not static allocation is being used. */ - pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) ); - - if( pxNewTCB != NULL ) - { - /* Store the stack location in the TCB. */ - pxNewTCB->pxStack = pxTaskDefinition->puxStackBuffer; - - /* Tasks can be created statically or dynamically, so note - this task had a statically allocated stack in case it is - later deleted. The TCB was allocated dynamically. */ - pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_ONLY; - - prvInitialiseNewTask( pxTaskDefinition->pvTaskCode, - pxTaskDefinition->pcName, - ( uint32_t ) pxTaskDefinition->usStackDepth, - pxTaskDefinition->pvParameters, - pxTaskDefinition->uxPriority, - pxCreatedTask, pxNewTCB, - pxTaskDefinition->xRegions ); - - prvAddNewTaskToReadyList( pxNewTCB ); - xReturn = pdPASS; - } - } - - return xReturn; - } - -#endif /* portUSING_MPU_WRAPPERS */ -/*-----------------------------------------------------------*/ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) -#ifdef CONFIG_USE_TCM_HEAP - BaseType_t xTaskGenericCreate( TaskFunction_t pxTaskCode, - const char * const pcName, - const uint16_t usStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - TaskHandle_t * const pxCreatedTask, - StackType_t * const puxStackBuffer, - const MemoryRegion_t * const xRegions ) //lint !e971 Unqualified char types are allowed for strings and single characters only. - { - TCB_t *pxNewTCB; - BaseType_t xReturn; - - /* If the stack grows down then allocate the stack then the TCB so the stack - does not grow into the TCB. Likewise if the stack grows up then allocate - the TCB then the stack. */ - #if( portSTACK_GROWTH > 0 ) - { - /* Allocate space for the TCB. Where the memory comes from depends on - the implementation of the port malloc function and whether or not static - allocation is being used. */ - pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) ); - - if( pxNewTCB != NULL ) - { - /* Allocate space for the stack used by the task being created. - The base of the stack memory stored in the TCB so the task can - be deleted later if required. */ - pxNewTCB->pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - - if( pxNewTCB->pxStack == NULL ) - { - /* Could not allocate the stack. Delete the allocated TCB. */ - vPortFree( pxNewTCB ); - pxNewTCB = NULL; - } - } - } - #else /* portSTACK_GROWTH */ - { - StackType_t *pxStack = puxStackBuffer; -#if configUSE_STACK_TCM_HEAP - if(pxStack == NULL -#if 0 // configUSE_STACK_TCM_HEAP > 1 - && uxPriority >= configUSE_STACK_TCM_HEAP -#endif - ) - - pxStack = ( StackType_t * ) tcm_heap_malloc((( size_t ) usStackDepth) * sizeof(StackType_t)); - if(pxStack == NULL) pxStack = ( StackType_t * ) pvPortMalloc((( size_t ) usStackDepth) * sizeof(StackType_t)); -#else - /* Allocate space for the stack used by the task being created. */ - pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ -#endif - if( pxStack != NULL ) - { - /* Allocate space for the TCB. */ - pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) ); /*lint !e961 MISRA exception as the casts are only redundant for some paths. */ - - if( pxNewTCB != NULL ) - { - /* Store the stack location in the TCB. */ - pxNewTCB->pxStack = pxStack; - } - else - { - /* The stack cannot be used as the TCB was not created. Free - it again. */ - vPortFree( pxStack ); - } - } - else - { - pxNewTCB = NULL; - } - } - #endif /* portSTACK_GROWTH */ - - if( pxNewTCB != NULL ) - { - #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) - { - /* Tasks can be created statically or dynamically, so note this - task was created dynamically in case it is later deleted. */ - pxNewTCB->ucStaticallyAllocated = tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB; - } - #endif /* configSUPPORT_STATIC_ALLOCATION */ - - prvInitialiseNewTask( pxTaskCode, pcName, ( uint32_t ) usStackDepth, pvParameters, uxPriority, pxCreatedTask, pxNewTCB -#if( portUSING_MPU_WRAPPERS == 1 ) - , xRegions ); -#else - ); - /* Avoid compiler warning about unreferenced parameter. */ - ( void ) xRegions; -#endif - prvAddNewTaskToReadyList( pxNewTCB ); - xReturn = pdPASS; - } - else - { - xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY; - } - - return xReturn; - } -#else // CONFIG_USE_TCM_HEAP - BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, - const char * const pcName, - const uint16_t usStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - TaskHandle_t * const pxCreatedTask ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - { - TCB_t *pxNewTCB; - BaseType_t xReturn; - - /* If the stack grows down then allocate the stack then the TCB so the stack - does not grow into the TCB. Likewise if the stack grows up then allocate - the TCB then the stack. */ - #if( portSTACK_GROWTH > 0 ) - { - /* Allocate space for the TCB. Where the memory comes from depends on - the implementation of the port malloc function and whether or not static - allocation is being used. */ - pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) ); - - if( pxNewTCB != NULL ) - { - /* Allocate space for the stack used by the task being created. - The base of the stack memory stored in the TCB so the task can - be deleted later if required. */ - pxNewTCB->pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - - if( pxNewTCB->pxStack == NULL ) - { - /* Could not allocate the stack. Delete the allocated TCB. */ - vPortFree( pxNewTCB ); - pxNewTCB = NULL; - } - } - } - #else /* portSTACK_GROWTH */ - { - StackType_t *pxStack; - - /* Allocate space for the stack used by the task being created. */ - pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - - if( pxStack != NULL ) - { - /* Allocate space for the TCB. */ - pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) ); /*lint !e961 MISRA exception as the casts are only redundant for some paths. */ - - if( pxNewTCB != NULL ) - { - /* Store the stack location in the TCB. */ - pxNewTCB->pxStack = pxStack; - } - else - { - /* The stack cannot be used as the TCB was not created. Free - it again. */ - vPortFree( pxStack ); - } - } - else - { - pxNewTCB = NULL; - } - } - #endif /* portSTACK_GROWTH */ - - if( pxNewTCB != NULL ) - { - #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) - { - /* Tasks can be created statically or dynamically, so note this - task was created dynamically in case it is later deleted. */ - pxNewTCB->ucStaticallyAllocated = tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB; - } - #endif /* configSUPPORT_STATIC_ALLOCATION */ - - prvInitialiseNewTask( pxTaskCode, pcName, ( uint32_t ) usStackDepth, pvParameters, uxPriority, pxCreatedTask, pxNewTCB -#if( portUSING_MPU_WRAPPERS == 1 ) - , NULL -#endif - ); - prvAddNewTaskToReadyList( pxNewTCB ); - xReturn = pdPASS; - } - else - { - xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY; - } - - return xReturn; - } -#endif // CONFIG_USE_TCM_HEAP -#endif /* configSUPPORT_DYNAMIC_ALLOCATION */ -/*-----------------------------------------------------------*/ -static void prvInitialiseNewTask( TaskFunction_t pxTaskCode, - const char * const pcName, - const uint32_t ulStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - TaskHandle_t * const pxCreatedTask, - TCB_t *pxNewTCB -#if( portUSING_MPU_WRAPPERS == 1 ) - , const MemoryRegion_t * const xRegions ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -#else - ) -#endif -{ -StackType_t *pxTopOfStack; -UBaseType_t x; - - #if( portUSING_MPU_WRAPPERS == 1 ) - /* Should the task be created in privileged mode? */ - BaseType_t xRunPrivileged; - if( ( uxPriority & portPRIVILEGE_BIT ) != 0U ) - { - xRunPrivileged = pdTRUE; - } - else - { - xRunPrivileged = pdFALSE; - } - uxPriority &= ~portPRIVILEGE_BIT; - #endif /* portUSING_MPU_WRAPPERS == 1 */ - - /* Avoid dependency on memset() if it is not required. */ - #if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) || ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) ) - { - /* Fill the stack with a known value to assist debugging. */ - ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) ulStackDepth * sizeof( StackType_t ) ); - } - #endif /* ( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) || ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) ) ) */ - - /* Calculate the top of stack address. This depends on whether the stack - grows from high memory to low (as per the 80x86) or vice versa. - portSTACK_GROWTH is used to make the result positive or negative as required - by the port. */ - #if( portSTACK_GROWTH < 0 ) - { - pxTopOfStack = pxNewTCB->pxStack + ( ulStackDepth - ( uint32_t ) 1 ); - pxTopOfStack = ( StackType_t * ) ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) & ( ~( ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) ) ); /*lint !e923 MISRA exception. Avoiding casts between pointers and integers is not practical. Size differences accounted for using portPOINTER_SIZE_TYPE type. */ - - /* Check the alignment of the calculated top of stack is correct. */ - configASSERT( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack & ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) == 0UL ) ); - } - #else /* portSTACK_GROWTH */ - { - pxTopOfStack = pxNewTCB->pxStack; - - /* Check the alignment of the stack buffer is correct. */ - configASSERT( ( ( ( portPOINTER_SIZE_TYPE ) pxNewTCB->pxStack & ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) == 0UL ) ); - - /* The other extreme of the stack space is required if stack checking is - performed. */ - pxNewTCB->pxEndOfStack = pxNewTCB->pxStack + ( ulStackDepth - ( uint32_t ) 1 ); - } - #endif /* portSTACK_GROWTH */ - - /* Store the task name in the TCB. */ - for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ ) - { - pxNewTCB->pcTaskName[ x ] = pcName[ x ]; - - /* Don't copy all configMAX_TASK_NAME_LEN if the string is shorter than - configMAX_TASK_NAME_LEN characters just in case the memory after the - string is not accessible (extremely unlikely). */ - if( pcName[ x ] == 0x00 ) - { - break; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - /* Ensure the name string is terminated in the case that the string length - was greater or equal to configMAX_TASK_NAME_LEN. */ - pxNewTCB->pcTaskName[ configMAX_TASK_NAME_LEN - 1 ] = '\0'; - - /* This is used as an array index so must ensure it's not too large. First - remove the privilege bit if one is present. */ - if( uxPriority >= ( UBaseType_t ) configMAX_PRIORITIES ) - { - uxPriority = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) 1U; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - pxNewTCB->uxPriority = uxPriority; - #if ( configUSE_MUTEXES == 1 ) - { - pxNewTCB->uxBasePriority = uxPriority; - pxNewTCB->uxMutexesHeld = 0; - } - #endif /* configUSE_MUTEXES */ - - vListInitialiseItem( &( pxNewTCB->xStateListItem ) ); - vListInitialiseItem( &( pxNewTCB->xEventListItem ) ); - - /* Set the pxNewTCB as a link back from the ListItem_t. This is so we can get - back to the containing TCB from a generic item in a list. */ - listSET_LIST_ITEM_OWNER( &( pxNewTCB->xStateListItem ), pxNewTCB ); - - /* Event lists are always in priority order. */ - listSET_LIST_ITEM_VALUE( &( pxNewTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - listSET_LIST_ITEM_OWNER( &( pxNewTCB->xEventListItem ), pxNewTCB ); - - #if ( portCRITICAL_NESTING_IN_TCB == 1 ) - { - pxNewTCB->uxCriticalNesting = ( UBaseType_t ) 0U; - } - #endif /* portCRITICAL_NESTING_IN_TCB */ - - #if ( configUSE_APPLICATION_TASK_TAG == 1 ) - { - pxNewTCB->pxTaskTag = NULL; - } - #endif /* configUSE_APPLICATION_TASK_TAG */ - - #if ( configGENERATE_RUN_TIME_STATS == 1 ) - { - pxNewTCB->ulRunTimeCounter = 0UL; - } - #endif /* configGENERATE_RUN_TIME_STATS */ - - #if ( portUSING_MPU_WRAPPERS == 1 ) - { - vPortStoreTaskMPUSettings( &( pxNewTCB->xMPUSettings ), xRegions, pxNewTCB->pxStack, ulStackDepth ); - } - #else - { - /* Avoid compiler warning about unreferenced parameter. */ -// ( void ) xRegions; - } - #endif - - #if( configNUM_THREAD_LOCAL_STORAGE_POINTERS != 0 ) - { - for( x = 0; x < ( UBaseType_t ) configNUM_THREAD_LOCAL_STORAGE_POINTERS; x++ ) - { - pxNewTCB->pvThreadLocalStoragePointers[ x ] = NULL; - } - } - #endif - - #if ( configUSE_TASK_NOTIFICATIONS == 1 ) - { - pxNewTCB->ulNotifiedValue = 0; - pxNewTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION; - } - #endif - - #if ( configUSE_NEWLIB_REENTRANT == 1 ) - { - /* Initialise this task's Newlib reent structure. */ - _REENT_INIT_PTR( ( &( pxNewTCB->xNewLib_reent ) ) ); - } - #endif - - #if( INCLUDE_xTaskAbortDelay == 1 ) - { - pxNewTCB->ucDelayAborted = pdFALSE; - } - #endif - - /* Initialize the TCB stack to look as if the task was already running, - but had been interrupted by the scheduler. The return address is set - to the start of the task function. Once the stack has been initialised - the top of stack variable is updated. */ - #if( portUSING_MPU_WRAPPERS == 1 ) - { - pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters, xRunPrivileged ); - } - #else /* portUSING_MPU_WRAPPERS */ - { - pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters ); - } - #endif /* portUSING_MPU_WRAPPERS */ - - if( ( void * ) pxCreatedTask != NULL ) - { - /* Pass the handle out in an anonymous way. The handle can be used to - change the created task's priority, delete the created task, etc.*/ - *pxCreatedTask = ( TaskHandle_t ) pxNewTCB; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } -} -/*-----------------------------------------------------------*/ - -static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) -{ - /* Ensure interrupts don't access the task lists while the lists are being - updated. */ - taskENTER_CRITICAL(); - { - uxCurrentNumberOfTasks++; - if( pxCurrentTCB == NULL ) - { - /* There are no other tasks, or all the other tasks are in - the suspended state - make this the current task. */ - pxCurrentTCB = pxNewTCB; - - if( uxCurrentNumberOfTasks == ( UBaseType_t ) 1 ) - { - /* This is the first task to be created so do the preliminary - initialisation required. We will not recover if this call - fails, but we will report the failure. */ - prvInitialiseTaskLists(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - /* If the scheduler is not already running, make this task the - current task if it is the highest priority task to be created - so far. */ - if( xSchedulerRunning == pdFALSE ) - { - if( pxCurrentTCB->uxPriority <= pxNewTCB->uxPriority ) - { - pxCurrentTCB = pxNewTCB; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - uxTaskNumber++; - - #if ( configUSE_TRACE_FACILITY == 1 ) - { - /* Add a counter into the TCB for tracing only. */ - pxNewTCB->uxTCBNumber = uxTaskNumber; - } - #endif /* configUSE_TRACE_FACILITY */ - traceTASK_CREATE( pxNewTCB ); - - prvAddTaskToReadyList( pxNewTCB ); - - portSETUP_TCB( pxNewTCB ); - } - taskEXIT_CRITICAL(); - - if( xSchedulerRunning != pdFALSE ) - { - /* If the created task is of a higher priority than the current task - then it should run now. */ - if( pxCurrentTCB->uxPriority < pxNewTCB->uxPriority ) - { - taskYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } -} -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskDelete == 1 ) - - void vTaskDelete( TaskHandle_t xTaskToDelete ) - { - TCB_t *pxTCB; - - taskENTER_CRITICAL(); - { - /* If null is passed in here then it is the calling task that is - being deleted. */ - pxTCB = prvGetTCBFromHandle( xTaskToDelete ); - - /* Remove task from the ready list. */ - if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) - { - taskRESET_READY_PRIORITY( pxTCB->uxPriority ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Is the task waiting on an event also? */ - if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL ) - { - ( void ) uxListRemove( &( pxTCB->xEventListItem ) ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Increment the uxTaskNumber also so kernel aware debuggers can - detect that the task lists need re-generating. This is done before - portPRE_TASK_DELETE_HOOK() as in the Windows port that macro will - not return. */ - uxTaskNumber++; - - if( pxTCB == pxCurrentTCB ) - { - /* A task is deleting itself. This cannot complete within the - task itself, as a context switch to another task is required. - Place the task in the termination list. The idle task will - check the termination list and free up any memory allocated by - the scheduler for the TCB and stack of the deleted task. */ - vListInsertEnd( &xTasksWaitingTermination, &( pxTCB->xStateListItem ) ); - - /* Increment the ucTasksDeleted variable so the idle task knows - there is a task that has been deleted and that it should therefore - check the xTasksWaitingTermination list. */ - ++uxDeletedTasksWaitingCleanUp; - - /* The pre-delete hook is primarily for the Windows simulator, - in which Windows specific clean up operations are performed, - after which it is not possible to yield away from this task - - hence xYieldPending is used to latch that a context switch is - required. */ - portPRE_TASK_DELETE_HOOK( pxTCB, &xYieldPending ); - } - else - { - --uxCurrentNumberOfTasks; - prvDeleteTCB( pxTCB ); - - /* Reset the next expected unblock time in case it referred to - the task that has just been deleted. */ - prvResetNextTaskUnblockTime(); - } - - traceTASK_DELETE( pxTCB ); - } - taskEXIT_CRITICAL(); - - /* Force a reschedule if it is the currently running task that has just - been deleted. */ - if( xSchedulerRunning != pdFALSE ) - { - if( pxTCB == pxCurrentTCB ) - { - configASSERT( uxSchedulerSuspended == 0 ); - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - -#endif /* INCLUDE_vTaskDelete */ -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskDelayUntil == 1 ) - - void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement ) - { - TickType_t xTimeToWake; - BaseType_t xAlreadyYielded, xShouldDelay = pdFALSE; - - configASSERT( pxPreviousWakeTime ); - configASSERT( ( xTimeIncrement > 0U ) ); - configASSERT( uxSchedulerSuspended == 0 ); - - vTaskSuspendAll(); - { - /* Minor optimisation. The tick count cannot change in this - block. */ - const TickType_t xConstTickCount = xTickCount; - - /* Generate the tick time at which the task wants to wake. */ - xTimeToWake = *pxPreviousWakeTime + xTimeIncrement; - - if( xConstTickCount < *pxPreviousWakeTime ) - { - /* The tick count has overflowed since this function was - lasted called. In this case the only time we should ever - actually delay is if the wake time has also overflowed, - and the wake time is greater than the tick time. When this - is the case it is as if neither time had overflowed. */ - if( ( xTimeToWake < *pxPreviousWakeTime ) && ( xTimeToWake > xConstTickCount ) ) - { - xShouldDelay = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - /* The tick time has not overflowed. In this case we will - delay if either the wake time has overflowed, and/or the - tick time is less than the wake time. */ - if( ( xTimeToWake < *pxPreviousWakeTime ) || ( xTimeToWake > xConstTickCount ) ) - { - xShouldDelay = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - /* Update the wake time ready for the next call. */ - *pxPreviousWakeTime = xTimeToWake; - - if( xShouldDelay != pdFALSE ) - { - traceTASK_DELAY_UNTIL( xTimeToWake ); - - /* prvAddCurrentTaskToDelayedList() needs the block time, not - the time to wake, so subtract the current tick count. */ - prvAddCurrentTaskToDelayedList( xTimeToWake - xConstTickCount, pdFALSE ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - xAlreadyYielded = xTaskResumeAll(); - - /* Force a reschedule if xTaskResumeAll has not already done so, we may - have put ourselves to sleep. */ - if( xAlreadyYielded == pdFALSE ) - { - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - -#endif /* INCLUDE_vTaskDelayUntil */ -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskDelay == 1 ) - - void vTaskDelay( const TickType_t xTicksToDelay ) - { - BaseType_t xAlreadyYielded = pdFALSE; - - /* A delay time of zero just forces a reschedule. */ - if( xTicksToDelay > ( TickType_t ) 0U ) - { - configASSERT( uxSchedulerSuspended == 0 ); - vTaskSuspendAll(); - { - traceTASK_DELAY(); - - /* A task that is removed from the event list while the - scheduler is suspended will not get placed in the ready - list or removed from the blocked list until the scheduler - is resumed. - - This task cannot be in an event list as it is the currently - executing task. */ - prvAddCurrentTaskToDelayedList( xTicksToDelay, pdFALSE ); - } - xAlreadyYielded = xTaskResumeAll(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Force a reschedule if xTaskResumeAll has not already done so, we may - have put ourselves to sleep. */ - if( xAlreadyYielded == pdFALSE ) - { - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - -#endif /* INCLUDE_vTaskDelay */ -/*-----------------------------------------------------------*/ - -#if( ( INCLUDE_eTaskGetState == 1 ) || ( configUSE_TRACE_FACILITY == 1 ) ) - - eTaskState eTaskGetState( TaskHandle_t xTask ) - { - eTaskState eReturn; - List_t *pxStateList; - const TCB_t * const pxTCB = ( TCB_t * ) xTask; - - configASSERT( pxTCB ); - - if( pxTCB == pxCurrentTCB ) - { - /* The task calling this function is querying its own state. */ - eReturn = eRunning; - } - else - { - taskENTER_CRITICAL(); - { - pxStateList = ( List_t * ) listLIST_ITEM_CONTAINER( &( pxTCB->xStateListItem ) ); - } - taskEXIT_CRITICAL(); - - if( ( pxStateList == pxDelayedTaskList ) || ( pxStateList == pxOverflowDelayedTaskList ) ) - { - /* The task being queried is referenced from one of the Blocked - lists. */ - eReturn = eBlocked; - } - - #if ( INCLUDE_vTaskSuspend == 1 ) - else if( pxStateList == &xSuspendedTaskList ) - { - /* The task being queried is referenced from the suspended - list. Is it genuinely suspended or is it block - indefinitely? */ - if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL ) - { - eReturn = eSuspended; - } - else - { - eReturn = eBlocked; - } - } - #endif - - #if ( INCLUDE_vTaskDelete == 1 ) - else if( ( pxStateList == &xTasksWaitingTermination ) || ( pxStateList == NULL ) ) - { - /* The task being queried is referenced from the deleted - tasks list, or it is not referenced from any lists at - all. */ - eReturn = eDeleted; - } - #endif - - else /*lint !e525 Negative indentation is intended to make use of pre-processor clearer. */ - { - /* If the task is not in any other state, it must be in the - Ready (including pending ready) state. */ - eReturn = eReady; - } - } - - return eReturn; - } /*lint !e818 xTask cannot be a pointer to const because it is a typedef. */ - -#endif /* INCLUDE_eTaskGetState */ -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_uxTaskPriorityGet == 1 ) - - UBaseType_t uxTaskPriorityGet( TaskHandle_t xTask ) - { - TCB_t *pxTCB; - UBaseType_t uxReturn; - - taskENTER_CRITICAL(); - { - /* If null is passed in here then it is the priority of the that - called uxTaskPriorityGet() that is being queried. */ - pxTCB = prvGetTCBFromHandle( xTask ); - uxReturn = pxTCB->uxPriority; - } - taskEXIT_CRITICAL(); - - return uxReturn; - } - -#endif /* INCLUDE_uxTaskPriorityGet */ -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_uxTaskPriorityGet == 1 ) - - UBaseType_t uxTaskPriorityGetFromISR( TaskHandle_t xTask ) - { - TCB_t *pxTCB; - UBaseType_t uxReturn, uxSavedInterruptState; - - /* RTOS ports that support interrupt nesting have the concept of a - maximum system call (or maximum API call) interrupt priority. - Interrupts that are above the maximum system call priority are keep - permanently enabled, even when the RTOS kernel is in a critical section, - but cannot make any calls to FreeRTOS API functions. If configASSERT() - is defined in FreeRTOSConfig.h then - portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion - failure if a FreeRTOS API function is called from an interrupt that has - been assigned a priority above the configured maximum system call - priority. Only FreeRTOS functions that end in FromISR can be called - from interrupts that have been assigned a priority at or (logically) - below the maximum system call interrupt priority. FreeRTOS maintains a - separate interrupt safe API to ensure interrupt entry is as fast and as - simple as possible. More information (albeit Cortex-M specific) is - provided on the following link: - http://www.freertos.org/RTOS-Cortex-M3-M4.html */ - portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - - uxSavedInterruptState = portSET_INTERRUPT_MASK_FROM_ISR(); - { - /* If null is passed in here then it is the priority of the calling - task that is being queried. */ - pxTCB = prvGetTCBFromHandle( xTask ); - uxReturn = pxTCB->uxPriority; - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptState ); - - return uxReturn; - } - -#endif /* INCLUDE_uxTaskPriorityGet */ -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskPrioritySet == 1 ) - - void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority ) - { - TCB_t *pxTCB; - UBaseType_t uxCurrentBasePriority, uxPriorityUsedOnEntry; - BaseType_t xYieldRequired = pdFALSE; - - configASSERT( ( uxNewPriority < configMAX_PRIORITIES ) ); - - /* Ensure the new priority is valid. */ - if( uxNewPriority >= ( UBaseType_t ) configMAX_PRIORITIES ) - { - uxNewPriority = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) 1U; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - taskENTER_CRITICAL(); - { - /* If null is passed in here then it is the priority of the calling - task that is being changed. */ - pxTCB = prvGetTCBFromHandle( xTask ); - - traceTASK_PRIORITY_SET( pxTCB, uxNewPriority ); - - #if ( configUSE_MUTEXES == 1 ) - { - uxCurrentBasePriority = pxTCB->uxBasePriority; - } - #else - { - uxCurrentBasePriority = pxTCB->uxPriority; - } - #endif - - if( uxCurrentBasePriority != uxNewPriority ) - { - /* The priority change may have readied a task of higher - priority than the calling task. */ - if( uxNewPriority > uxCurrentBasePriority ) - { - if( pxTCB != pxCurrentTCB ) - { - /* The priority of a task other than the currently - running task is being raised. Is the priority being - raised above that of the running task? */ - if( uxNewPriority >= pxCurrentTCB->uxPriority ) - { - xYieldRequired = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - /* The priority of the running task is being raised, - but the running task must already be the highest - priority task able to run so no yield is required. */ - } - } - else if( pxTCB == pxCurrentTCB ) - { - /* Setting the priority of the running task down means - there may now be another task of higher priority that - is ready to execute. */ - xYieldRequired = pdTRUE; - } - else - { - /* Setting the priority of any other task down does not - require a yield as the running task must be above the - new priority of the task being modified. */ - } - - /* Remember the ready list the task might be referenced from - before its uxPriority member is changed so the - taskRESET_READY_PRIORITY() macro can function correctly. */ - uxPriorityUsedOnEntry = pxTCB->uxPriority; - - #if ( configUSE_MUTEXES == 1 ) - { - /* Only change the priority being used if the task is not - currently using an inherited priority. */ - if( pxTCB->uxBasePriority == pxTCB->uxPriority ) - { - pxTCB->uxPriority = uxNewPriority; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* The base priority gets set whatever. */ - pxTCB->uxBasePriority = uxNewPriority; - } - #else - { - pxTCB->uxPriority = uxNewPriority; - } - #endif - - /* Only reset the event list item value if the value is not - being used for anything else. */ - if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL ) - { - listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxNewPriority ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* If the task is in the blocked or suspended list we need do - nothing more than change it's priority variable. However, if - the task is in a ready list it needs to be removed and placed - in the list appropriate to its new priority. */ - if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE ) - { - /* The task is currently in its ready list - remove before adding - it to it's new ready list. As we are in a critical section we - can do this even if the scheduler is suspended. */ - if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) - { - /* It is known that the task is in its ready list so - there is no need to check again and the port level - reset macro can be called directly. */ - portRESET_READY_PRIORITY( uxPriorityUsedOnEntry, uxTopReadyPriority ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - prvAddTaskToReadyList( pxTCB ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - if( xYieldRequired != pdFALSE ) - { - taskYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Remove compiler warning about unused variables when the port - optimised task selection is not being used. */ - ( void ) uxPriorityUsedOnEntry; - } - } - taskEXIT_CRITICAL(); - } - -#endif /* INCLUDE_vTaskPrioritySet */ -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskSuspend == 1 ) - - void vTaskSuspend( TaskHandle_t xTaskToSuspend ) - { - TCB_t *pxTCB; - - taskENTER_CRITICAL(); - { - /* If null is passed in here then it is the running task that is - being suspended. */ - pxTCB = prvGetTCBFromHandle( xTaskToSuspend ); - - traceTASK_SUSPEND( pxTCB ); - - /* Remove task from the ready/delayed list and place in the - suspended list. */ - if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) - { - taskRESET_READY_PRIORITY( pxTCB->uxPriority ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Is the task waiting on an event also? */ - if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL ) - { - ( void ) uxListRemove( &( pxTCB->xEventListItem ) ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - vListInsertEnd( &xSuspendedTaskList, &( pxTCB->xStateListItem ) ); - } - taskEXIT_CRITICAL(); - - if( xSchedulerRunning != pdFALSE ) - { - /* Reset the next expected unblock time in case it referred to the - task that is now in the Suspended state. */ - taskENTER_CRITICAL(); - { - prvResetNextTaskUnblockTime(); - } - taskEXIT_CRITICAL(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - if( pxTCB == pxCurrentTCB ) - { - if( xSchedulerRunning != pdFALSE ) - { - /* The current task has just been suspended. */ - configASSERT( uxSchedulerSuspended == 0 ); - portYIELD_WITHIN_API(); - } - else - { - /* The scheduler is not running, but the task that was pointed - to by pxCurrentTCB has just been suspended and pxCurrentTCB - must be adjusted to point to a different task. */ - if( listCURRENT_LIST_LENGTH( &xSuspendedTaskList ) == uxCurrentNumberOfTasks ) - { - /* No other tasks are ready, so set pxCurrentTCB back to - NULL so when the next task is created pxCurrentTCB will - be set to point to it no matter what its relative priority - is. */ - pxCurrentTCB = NULL; - } - else - { - vTaskSwitchContext(); - } - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - -#endif /* INCLUDE_vTaskSuspend */ -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskSuspend == 1 ) - - static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ) - { - BaseType_t xReturn = pdFALSE; - const TCB_t * const pxTCB = ( TCB_t * ) xTask; - - /* Accesses xPendingReadyList so must be called from a critical - section. */ - - /* It does not make sense to check if the calling task is suspended. */ - configASSERT( xTask ); - - /* Is the task being resumed actually in the suspended list? */ - if( listIS_CONTAINED_WITHIN( &xSuspendedTaskList, &( pxTCB->xStateListItem ) ) != pdFALSE ) - { - /* Has the task already been resumed from within an ISR? */ - if( listIS_CONTAINED_WITHIN( &xPendingReadyList, &( pxTCB->xEventListItem ) ) == pdFALSE ) - { - /* Is it in the suspended list because it is in the Suspended - state, or because is is blocked with no timeout? */ - if( listIS_CONTAINED_WITHIN( NULL, &( pxTCB->xEventListItem ) ) != pdFALSE ) - { - xReturn = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - return xReturn; - } /*lint !e818 xTask cannot be a pointer to const because it is a typedef. */ - -#endif /* INCLUDE_vTaskSuspend */ -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskSuspend == 1 ) - - void vTaskResume( TaskHandle_t xTaskToResume ) - { - TCB_t * const pxTCB = ( TCB_t * ) xTaskToResume; - - /* It does not make sense to resume the calling task. */ - configASSERT( xTaskToResume ); - - /* The parameter cannot be NULL as it is impossible to resume the - currently executing task. */ - if( ( pxTCB != NULL ) && ( pxTCB != pxCurrentTCB ) ) - { - taskENTER_CRITICAL(); - { - if( prvTaskIsTaskSuspended( pxTCB ) != pdFALSE ) - { - traceTASK_RESUME( pxTCB ); - - /* As we are in a critical section we can access the ready - lists even if the scheduler is suspended. */ - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - prvAddTaskToReadyList( pxTCB ); - - /* We may have just resumed a higher priority task. */ - if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ) - { - /* This yield may not cause the task just resumed to run, - but will leave the lists in the correct state for the - next yield. */ - taskYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - -#endif /* INCLUDE_vTaskSuspend */ - -/*-----------------------------------------------------------*/ - -#if ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) - - BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume ) - { - BaseType_t xYieldRequired = pdFALSE; - TCB_t * const pxTCB = ( TCB_t * ) xTaskToResume; - UBaseType_t uxSavedInterruptStatus; - - configASSERT( xTaskToResume ); - - /* RTOS ports that support interrupt nesting have the concept of a - maximum system call (or maximum API call) interrupt priority. - Interrupts that are above the maximum system call priority are keep - permanently enabled, even when the RTOS kernel is in a critical section, - but cannot make any calls to FreeRTOS API functions. If configASSERT() - is defined in FreeRTOSConfig.h then - portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion - failure if a FreeRTOS API function is called from an interrupt that has - been assigned a priority above the configured maximum system call - priority. Only FreeRTOS functions that end in FromISR can be called - from interrupts that have been assigned a priority at or (logically) - below the maximum system call interrupt priority. FreeRTOS maintains a - separate interrupt safe API to ensure interrupt entry is as fast and as - simple as possible. More information (albeit Cortex-M specific) is - provided on the following link: - http://www.freertos.org/RTOS-Cortex-M3-M4.html */ - portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - - uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); - { - if( prvTaskIsTaskSuspended( pxTCB ) != pdFALSE ) - { - traceTASK_RESUME_FROM_ISR( pxTCB ); - - /* Check the ready lists can be accessed. */ - if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) - { - /* Ready lists can be accessed so move the task from the - suspended list to the ready list directly. */ - if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ) - { - xYieldRequired = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - prvAddTaskToReadyList( pxTCB ); - } - else - { - /* The delayed or ready lists cannot be accessed so the task - is held in the pending ready list until the scheduler is - unsuspended. */ - vListInsertEnd( &( xPendingReadyList ), &( pxTCB->xEventListItem ) ); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - - return xYieldRequired; - } - -#endif /* ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) */ -/*-----------------------------------------------------------*/ - -void vTaskStartScheduler( void ) -{ -BaseType_t xReturn; - - /* Add the idle task at the lowest priority. */ - #if( configSUPPORT_STATIC_ALLOCATION == 1 ) - { - StaticTask_t *pxIdleTaskTCBBuffer = NULL; - StackType_t *pxIdleTaskStackBuffer = NULL; - uint32_t ulIdleTaskStackSize; - - /* The Idle task is created using user provided RAM - obtain the - address of the RAM then create the idle task. */ - vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &ulIdleTaskStackSize ); - xIdleTaskHandle = xTaskCreateStatic( prvIdleTask, - "IDLE", - ulIdleTaskStackSize, - ( void * ) NULL, - ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), - pxIdleTaskStackBuffer, - pxIdleTaskTCBBuffer ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */ - - if( xIdleTaskHandle != NULL ) - { - xReturn = pdPASS; - } - else - { - xReturn = pdFAIL; - } - } - #else - { - /* The Idle task is being created using dynamically allocated RAM. */ - xReturn = xTaskCreate( prvIdleTask, - "IDLE", configMINIMAL_STACK_SIZE, - ( void * ) NULL, - ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), - &xIdleTaskHandle ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */ - } - #endif /* configSUPPORT_STATIC_ALLOCATION */ - - #if ( configUSE_TIMERS == 1 ) - { - if( xReturn == pdPASS ) - { - xReturn = xTimerCreateTimerTask(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_TIMERS */ - - if( xReturn == pdPASS ) - { - /* Interrupts are turned off here, to ensure a tick does not occur - before or during the call to xPortStartScheduler(). The stacks of - the created tasks contain a status word with interrupts switched on - so interrupts will automatically get re-enabled when the first task - starts to run. */ - portDISABLE_INTERRUPTS(); - - #if ( configUSE_NEWLIB_REENTRANT == 1 ) - { - /* Switch Newlib's _impure_ptr variable to point to the _reent - structure specific to the task that will run first. */ - _impure_ptr = &( pxCurrentTCB->xNewLib_reent ); - } - #endif /* configUSE_NEWLIB_REENTRANT */ - - xNextTaskUnblockTime = portMAX_DELAY; - xSchedulerRunning = pdTRUE; - xTickCount = ( TickType_t ) 0U; - - /* If configGENERATE_RUN_TIME_STATS is defined then the following - macro must be defined to configure the timer/counter used to generate - the run time counter time base. */ - portCONFIGURE_TIMER_FOR_RUN_TIME_STATS(); - - /* Setting up the timer tick is hardware specific and thus in the - portable interface. */ - if( xPortStartScheduler() != pdFALSE ) - { - /* Should not reach here as if the scheduler is running the - function will not return. */ - } - else - { - /* Should only reach here if a task calls xTaskEndScheduler(). */ - } - } - else - { - /* This line will only be reached if the kernel could not be started, - because there was not enough FreeRTOS heap to create the idle task - or the timer task. */ - configASSERT( xReturn != errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY ); - } - - /* Prevent compiler warnings if INCLUDE_xTaskGetIdleTaskHandle is set to 0, - meaning xIdleTaskHandle is not used anywhere else. */ - ( void ) xIdleTaskHandle; -} -/*-----------------------------------------------------------*/ - -void vTaskEndScheduler( void ) -{ - /* Stop the scheduler interrupts and call the portable scheduler end - routine so the original ISRs can be restored if necessary. The port - layer must ensure interrupts enable bit is left in the correct state. */ - portDISABLE_INTERRUPTS(); - xSchedulerRunning = pdFALSE; - vPortEndScheduler(); -} -/*----------------------------------------------------------*/ - -void vTaskSuspendAll( void ) -{ - /* A critical section is not required as the variable is of type - BaseType_t. Please read Richard Barry's reply in the following link to a - post in the FreeRTOS support forum before reporting this as a bug! - - http://goo.gl/wu4acr */ - ++uxSchedulerSuspended; -} -/*----------------------------------------------------------*/ - -#if ( configUSE_TICKLESS_IDLE != 0 ) - - static TickType_t prvGetExpectedIdleTime( void ) - { - TickType_t xReturn; - UBaseType_t uxHigherPriorityReadyTasks = pdFALSE; - - /* uxHigherPriorityReadyTasks takes care of the case where - configUSE_PREEMPTION is 0, so there may be tasks above the idle priority - task that are in the Ready state, even though the idle task is - running. */ - #if( configUSE_PORT_OPTIMISED_TASK_SELECTION == 0 ) - { - if( uxTopReadyPriority > tskIDLE_PRIORITY ) - { - uxHigherPriorityReadyTasks = pdTRUE; - } - } - #else - { - const UBaseType_t uxLeastSignificantBit = ( UBaseType_t ) 0x01; - - /* When port optimised task selection is used the uxTopReadyPriority - variable is used as a bit map. If bits other than the least - significant bit are set then there are tasks that have a priority - above the idle priority that are in the Ready state. This takes - care of the case where the co-operative scheduler is in use. */ - if( uxTopReadyPriority > uxLeastSignificantBit ) - { - uxHigherPriorityReadyTasks = pdTRUE; - } - } - #endif - - if( pxCurrentTCB->uxPriority > tskIDLE_PRIORITY ) - { - xReturn = 0; - } - else if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > 1 ) - { - /* There are other idle priority tasks in the ready state. If - time slicing is used then the very next tick interrupt must be - processed. */ - xReturn = 0; - } - else if( uxHigherPriorityReadyTasks != pdFALSE ) - { - /* There are tasks in the Ready state that have a priority above the - idle priority. This path can only be reached if - configUSE_PREEMPTION is 0. */ - xReturn = 0; - } - else - { - xReturn = xNextTaskUnblockTime - xTickCount; - } - - return xReturn; - } - -#endif /* configUSE_TICKLESS_IDLE */ -/*----------------------------------------------------------*/ - -BaseType_t xTaskResumeAll( void ) -{ -TCB_t *pxTCB = NULL; -BaseType_t xAlreadyYielded = pdFALSE; - - /* If uxSchedulerSuspended is zero then this function does not match a - previous call to vTaskSuspendAll(). */ - configASSERT( uxSchedulerSuspended ); - - /* It is possible that an ISR caused a task to be removed from an event - list while the scheduler was suspended. If this was the case then the - removed task will have been added to the xPendingReadyList. Once the - scheduler has been resumed it is safe to move all the pending ready - tasks from this list into their appropriate ready list. */ - taskENTER_CRITICAL(); - { - --uxSchedulerSuspended; - - if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) - { - if( uxCurrentNumberOfTasks > ( UBaseType_t ) 0U ) - { - /* Move any readied tasks from the pending list into the - appropriate ready list. */ - while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE ) - { - pxTCB = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingReadyList ) ); - ( void ) uxListRemove( &( pxTCB->xEventListItem ) ); - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - prvAddTaskToReadyList( pxTCB ); - - /* If the moved task has a priority higher than the current - task then a yield must be performed. */ - if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ) - { - xYieldPending = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - if( pxTCB != NULL ) - { - /* A task was unblocked while the scheduler was suspended, - which may have prevented the next unblock time from being - re-calculated, in which case re-calculate it now. Mainly - important for low power tickless implementations, where - this can prevent an unnecessary exit from low power - state. */ - prvResetNextTaskUnblockTime(); - } - - /* If any ticks occurred while the scheduler was suspended then - they should be processed now. This ensures the tick count does - not slip, and that any delayed tasks are resumed at the correct - time. */ - { - UBaseType_t uxPendedCounts = uxPendedTicks; /* Non-volatile copy. */ - - if( uxPendedCounts > ( UBaseType_t ) 0U ) - { - do - { - if( xTaskIncrementTick() != pdFALSE ) - { - xYieldPending = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - --uxPendedCounts; - } while( uxPendedCounts > ( UBaseType_t ) 0U ); - - uxPendedTicks = 0; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - if( xYieldPending != pdFALSE ) - { - #if( configUSE_PREEMPTION != 0 ) - { - xAlreadyYielded = pdTRUE; - } - #endif - taskYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); - - return xAlreadyYielded; -} -/*-----------------------------------------------------------*/ - -TickType_t xTaskGetTickCount( void ) -{ -TickType_t xTicks; - - /* Critical section required if running on a 16 bit processor. */ -// portTICK_TYPE_ENTER_CRITICAL(); - { - xTicks = xTickCount; - } -// portTICK_TYPE_EXIT_CRITICAL(); - - return xTicks; -} -/*-----------------------------------------------------------*/ - -TickType_t xTaskGetTickCountFromISR( void ) -{ -TickType_t xReturn; -UBaseType_t uxSavedInterruptStatus; - - /* RTOS ports that support interrupt nesting have the concept of a maximum - system call (or maximum API call) interrupt priority. Interrupts that are - above the maximum system call priority are kept permanently enabled, even - when the RTOS kernel is in a critical section, but cannot make any calls to - FreeRTOS API functions. If configASSERT() is defined in FreeRTOSConfig.h - then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion - failure if a FreeRTOS API function is called from an interrupt that has been - assigned a priority above the configured maximum system call priority. - Only FreeRTOS functions that end in FromISR can be called from interrupts - that have been assigned a priority at or (logically) below the maximum - system call interrupt priority. FreeRTOS maintains a separate interrupt - safe API to ensure interrupt entry is as fast and as simple as possible. - More information (albeit Cortex-M specific) is provided on the following - link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */ - portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - - uxSavedInterruptStatus = portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR(); - { - xReturn = xTickCount; - } - portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -UBaseType_t uxTaskGetNumberOfTasks( void ) -{ - /* A critical section is not required because the variables are of type - BaseType_t. */ - return uxCurrentNumberOfTasks; -} -/*-----------------------------------------------------------*/ - -char *pcTaskGetName( TaskHandle_t xTaskToQuery ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -{ -TCB_t *pxTCB; - - /* If null is passed in here then the name of the calling task is being - queried. */ - pxTCB = prvGetTCBFromHandle( xTaskToQuery ); - configASSERT( pxTCB ); - return &( pxTCB->pcTaskName[ 0 ] ); -} -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_xTaskGetHandle == 1 ) - - static TCB_t *prvSearchForNameWithinSingleList( List_t *pxList, const char pcNameToQuery[] ) - { - TCB_t *pxNextTCB, *pxFirstTCB, *pxReturn = NULL; - UBaseType_t x; - char cNextChar; - - /* This function is called with the scheduler suspended. */ - - if( listCURRENT_LIST_LENGTH( pxList ) > ( UBaseType_t ) 0 ) - { - listGET_OWNER_OF_NEXT_ENTRY( pxFirstTCB, pxList ); - - do - { - listGET_OWNER_OF_NEXT_ENTRY( pxNextTCB, pxList ); - - /* Check each character in the name looking for a match or - mismatch. */ - for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ ) - { - cNextChar = pxNextTCB->pcTaskName[ x ]; - - if( cNextChar != pcNameToQuery[ x ] ) - { - /* Characters didn't match. */ - break; - } - else if( cNextChar == 0x00 ) - { - /* Both strings terminated, a match must have been - found. */ - pxReturn = pxNextTCB; - break; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - if( pxReturn != NULL ) - { - /* The handle has been found. */ - break; - } - - } while( pxNextTCB != pxFirstTCB ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - return pxReturn; - } - -#endif /* INCLUDE_xTaskGetHandle */ -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_xTaskGetHandle == 1 ) - - TaskHandle_t xTaskGetHandle( const char *pcNameToQuery ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - { - UBaseType_t uxQueue = configMAX_PRIORITIES; - TCB_t* pxTCB; - - /* Task names will be truncated to configMAX_TASK_NAME_LEN - 1 bytes. */ - configASSERT( strlen( pcNameToQuery ) < configMAX_TASK_NAME_LEN ); - - vTaskSuspendAll(); - { - /* Search the ready lists. */ - do - { - uxQueue--; - pxTCB = prvSearchForNameWithinSingleList( ( List_t * ) &( pxReadyTasksLists[ uxQueue ] ), pcNameToQuery ); - - if( pxTCB != NULL ) - { - /* Found the handle. */ - break; - } - - } while( uxQueue > ( UBaseType_t ) tskIDLE_PRIORITY ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - - /* Search the delayed lists. */ - if( pxTCB == NULL ) - { - pxTCB = prvSearchForNameWithinSingleList( ( List_t * ) pxDelayedTaskList, pcNameToQuery ); - } - - if( pxTCB == NULL ) - { - pxTCB = prvSearchForNameWithinSingleList( ( List_t * ) pxOverflowDelayedTaskList, pcNameToQuery ); - } - - #if ( INCLUDE_vTaskSuspend == 1 ) - { - if( pxTCB == NULL ) - { - /* Search the suspended list. */ - pxTCB = prvSearchForNameWithinSingleList( &xSuspendedTaskList, pcNameToQuery ); - } - } - #endif - - #if( INCLUDE_vTaskDelete == 1 ) - { - if( pxTCB == NULL ) - { - /* Search the deleted list. */ - pxTCB = prvSearchForNameWithinSingleList( &xTasksWaitingTermination, pcNameToQuery ); - } - } - #endif - } - ( void ) xTaskResumeAll(); - - return ( TaskHandle_t ) pxTCB; - } - -#endif /* INCLUDE_xTaskGetHandle */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime ) - { - UBaseType_t uxTask = 0, uxQueue = configMAX_PRIORITIES; - - vTaskSuspendAll(); - { - /* Is there a space in the array for each task in the system? */ - if( uxArraySize >= uxCurrentNumberOfTasks ) - { - /* Fill in an TaskStatus_t structure with information on each - task in the Ready state. */ - do - { - uxQueue--; - uxTask += prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), &( pxReadyTasksLists[ uxQueue ] ), eReady ); - - } while( uxQueue > ( UBaseType_t ) tskIDLE_PRIORITY ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - - /* Fill in an TaskStatus_t structure with information on each - task in the Blocked state. */ - uxTask += prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), ( List_t * ) pxDelayedTaskList, eBlocked ); - uxTask += prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), ( List_t * ) pxOverflowDelayedTaskList, eBlocked ); - - #if( INCLUDE_vTaskDelete == 1 ) - { - /* Fill in an TaskStatus_t structure with information on - each task that has been deleted but not yet cleaned up. */ - uxTask += prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), &xTasksWaitingTermination, eDeleted ); - } - #endif - - #if ( INCLUDE_vTaskSuspend == 1 ) - { - /* Fill in an TaskStatus_t structure with information on - each task in the Suspended state. */ - uxTask += prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), &xSuspendedTaskList, eSuspended ); - } - #endif - - #if ( configGENERATE_RUN_TIME_STATS == 1) - { - if( pulTotalRunTime != NULL ) - { - #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE - portALT_GET_RUN_TIME_COUNTER_VALUE( ( *pulTotalRunTime ) ); - #else - *pulTotalRunTime = portGET_RUN_TIME_COUNTER_VALUE(); - #endif - } - } - #else - { - if( pulTotalRunTime != NULL ) - { - *pulTotalRunTime = 0; - } - } - #endif - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - ( void ) xTaskResumeAll(); - - return uxTask; - } - -#endif /* configUSE_TRACE_FACILITY */ -/*----------------------------------------------------------*/ - -#if ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) - - TaskHandle_t xTaskGetIdleTaskHandle( void ) - { - /* If xTaskGetIdleTaskHandle() is called before the scheduler has been - started, then xIdleTaskHandle will be NULL. */ - configASSERT( ( xIdleTaskHandle != NULL ) ); - return xIdleTaskHandle; - } - -#endif /* INCLUDE_xTaskGetIdleTaskHandle */ -/*----------------------------------------------------------*/ - -/* This conditional compilation should use inequality to 0, not equality to 1. -This is to ensure vTaskStepTick() is available when user defined low power mode -implementations require configUSE_TICKLESS_IDLE to be set to a value other than -1. */ -#if ( configUSE_TICKLESS_IDLE != 0 ) - - void vTaskStepTick( const TickType_t xTicksToJump ) - { - /* Correct the tick count value after a period during which the tick - was suppressed. Note this does *not* call the tick hook function for - each stepped tick. */ - configASSERT( ( xTickCount + xTicksToJump ) <= xNextTaskUnblockTime ); - xTickCount += xTicksToJump; - traceINCREASE_TICK_COUNT( xTicksToJump ); - } - -#endif /* configUSE_TICKLESS_IDLE */ -/*----------------------------------------------------------*/ - -#if ( INCLUDE_xTaskAbortDelay == 1 ) - - BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) - { - TCB_t *pxTCB = ( TCB_t * ) xTask; - BaseType_t xReturn = pdFALSE; - - configASSERT( pxTCB ); - - vTaskSuspendAll(); - { - /* A task can only be prematurely removed from the Blocked state if - it is actually in the Blocked state. */ - if( eTaskGetState( xTask ) == eBlocked ) - { - /* Remove the reference to the task from the blocked list. An - interrupt won't touch the xStateListItem because the - scheduler is suspended. */ - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - - /* Is the task waiting on an event also? If so remove it from - the event list too. Interrupts can touch the event list item, - even though the scheduler is suspended, so a critical section - is used. */ - taskENTER_CRITICAL(); - { - if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL ) - { - ( void ) uxListRemove( &( pxTCB->xEventListItem ) ); - pxTCB->ucDelayAborted = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); - - /* Place the unblocked task into the appropriate ready list. */ - prvAddTaskToReadyList( pxTCB ); - - /* A task being unblocked cannot cause an immediate context - switch if preemption is turned off. */ - #if ( configUSE_PREEMPTION == 1 ) - { - /* Preemption is on, but a context switch should only be - performed if the unblocked task has a priority that is - equal to or higher than the currently executing task. */ - if( pxTCB->uxPriority > pxCurrentTCB->uxPriority ) - { - /* Pend the yield to be performed when the scheduler - is unsuspended. */ - xYieldPending = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_PREEMPTION */ - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - xTaskResumeAll(); - - return xReturn; - } - -#endif /* INCLUDE_xTaskAbortDelay */ -/*----------------------------------------------------------*/ - -BaseType_t xTaskIncrementTick( void ) -{ -TCB_t * pxTCB; -TickType_t xItemValue; -BaseType_t xSwitchRequired = pdFALSE; - - /* Called by the portable layer each time a tick interrupt occurs. - Increments the tick then checks to see if the new tick value will cause any - tasks to be unblocked. */ - traceTASK_INCREMENT_TICK( xTickCount ); - if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) - { - /* Minor optimisation. The tick count cannot change in this - block. */ - const TickType_t xConstTickCount = xTickCount + 1; - - /* Increment the RTOS tick, switching the delayed and overflowed - delayed lists if it wraps to 0. */ - xTickCount = xConstTickCount; - - if( xConstTickCount == ( TickType_t ) 0U ) - { - taskSWITCH_DELAYED_LISTS(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* See if this tick has made a timeout expire. Tasks are stored in - the queue in the order of their wake time - meaning once one task - has been found whose block time has not expired there is no need to - look any further down the list. */ - if( xConstTickCount >= xNextTaskUnblockTime ) - { - for( ;; ) - { - if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE ) - { - /* The delayed list is empty. Set xNextTaskUnblockTime - to the maximum possible value so it is extremely - unlikely that the - if( xTickCount >= xNextTaskUnblockTime ) test will pass - next time through. */ - xNextTaskUnblockTime = portMAX_DELAY; /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - break; - } - else - { - /* The delayed list is not empty, get the value of the - item at the head of the delayed list. This is the time - at which the task at the head of the delayed list must - be removed from the Blocked state. */ - pxTCB = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ); - xItemValue = listGET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ) ); - - if( xConstTickCount < xItemValue ) - { - /* It is not time to unblock this item yet, but the - item value is the time at which the task at the head - of the blocked list must be removed from the Blocked - state - so record the item value in - xNextTaskUnblockTime. */ - xNextTaskUnblockTime = xItemValue; - break; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* It is time to remove the item from the Blocked state. */ - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - - /* Is the task waiting on an event also? If so remove - it from the event list. */ - if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL ) - { - ( void ) uxListRemove( &( pxTCB->xEventListItem ) ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Place the unblocked task into the appropriate ready - list. */ - prvAddTaskToReadyList( pxTCB ); - - /* A task being unblocked cannot cause an immediate - context switch if preemption is turned off. */ - #if ( configUSE_PREEMPTION == 1 ) - { - /* Preemption is on, but a context switch should - only be performed if the unblocked task has a - priority that is equal to or higher than the - currently executing task. */ - if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ) - { - xSwitchRequired = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_PREEMPTION */ - } - } - } - - /* Tasks of equal priority to the currently running task will share - processing time (time slice) if preemption is on, and the application - writer has not explicitly turned time slicing off. */ - #if ( ( configUSE_PREEMPTION == 1 ) && ( configUSE_TIME_SLICING == 1 ) ) - { - if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCB->uxPriority ] ) ) > ( UBaseType_t ) 1 ) - { - xSwitchRequired = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* ( ( configUSE_PREEMPTION == 1 ) && ( configUSE_TIME_SLICING == 1 ) ) */ - - #if ( configUSE_TICK_HOOK == 1 ) - { - /* Guard against the tick hook being called when the pended tick - count is being unwound (when the scheduler is being unlocked). */ - if( uxPendedTicks == ( UBaseType_t ) 0U ) - { - vApplicationTickHook(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_TICK_HOOK */ - } - else - { - ++uxPendedTicks; - - /* The tick hook gets called at regular intervals, even if the - scheduler is locked. */ - #if ( configUSE_TICK_HOOK == 1 ) - { - vApplicationTickHook(); - } - #endif - } - - #if ( configUSE_PREEMPTION == 1 ) - { - if( xYieldPending != pdFALSE ) - { - xSwitchRequired = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_PREEMPTION */ - - return xSwitchRequired; -} -/*-----------------------------------------------------------*/ - -#if ( configUSE_APPLICATION_TASK_TAG == 1 ) - - void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction ) - { - TCB_t *xTCB; - - /* If xTask is NULL then it is the task hook of the calling task that is - getting set. */ - if( xTask == NULL ) - { - xTCB = ( TCB_t * ) pxCurrentTCB; - } - else - { - xTCB = ( TCB_t * ) xTask; - } - - /* Save the hook function in the TCB. A critical section is required as - the value can be accessed from an interrupt. */ - taskENTER_CRITICAL(); - xTCB->pxTaskTag = pxHookFunction; - taskEXIT_CRITICAL(); - } - -#endif /* configUSE_APPLICATION_TASK_TAG */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_APPLICATION_TASK_TAG == 1 ) - - TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask ) - { - TCB_t *xTCB; - TaskHookFunction_t xReturn; - - /* If xTask is NULL then we are setting our own task hook. */ - if( xTask == NULL ) - { - xTCB = ( TCB_t * ) pxCurrentTCB; - } - else - { - xTCB = ( TCB_t * ) xTask; - } - - /* Save the hook function in the TCB. A critical section is required as - the value can be accessed from an interrupt. */ - taskENTER_CRITICAL(); - { - xReturn = xTCB->pxTaskTag; - } - taskEXIT_CRITICAL(); - - return xReturn; - } - -#endif /* configUSE_APPLICATION_TASK_TAG */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_APPLICATION_TASK_TAG == 1 ) - - BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter ) - { - TCB_t *xTCB; - BaseType_t xReturn; - - /* If xTask is NULL then we are calling our own task hook. */ - if( xTask == NULL ) - { - xTCB = ( TCB_t * ) pxCurrentTCB; - } - else - { - xTCB = ( TCB_t * ) xTask; - } - - if( xTCB->pxTaskTag != NULL ) - { - xReturn = xTCB->pxTaskTag( pvParameter ); - } - else - { - xReturn = pdFAIL; - } - - return xReturn; - } - -#endif /* configUSE_APPLICATION_TASK_TAG */ -/*-----------------------------------------------------------*/ - -void vTaskSwitchContext( void ) -{ - if( uxSchedulerSuspended != ( UBaseType_t ) pdFALSE ) - { - /* The scheduler is currently suspended - do not allow a context - switch. */ - xYieldPending = pdTRUE; - } - else - { - xYieldPending = pdFALSE; - traceTASK_SWITCHED_OUT(); - - #if ( configGENERATE_RUN_TIME_STATS == 1 ) - { - #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE - portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalRunTime ); - #else - ulTotalRunTime = portGET_RUN_TIME_COUNTER_VALUE(); - #endif - - /* Add the amount of time the task has been running to the - accumulated time so far. The time the task started running was - stored in ulTaskSwitchedInTime. Note that there is no overflow - protection here so count values are only valid until the timer - overflows. The guard against negative values is to protect - against suspect run time stat counter implementations - which - are provided by the application, not the kernel. */ - if( ulTotalRunTime > ulTaskSwitchedInTime ) - { - pxCurrentTCB->ulRunTimeCounter += ( ulTotalRunTime - ulTaskSwitchedInTime ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - ulTaskSwitchedInTime = ulTotalRunTime; - } - #endif /* configGENERATE_RUN_TIME_STATS */ - - /* Check for stack overflow, if configured. */ - taskCHECK_FOR_STACK_OVERFLOW(); - - /* Select a new task to run using either the generic C or port - optimised asm code. */ - taskSELECT_HIGHEST_PRIORITY_TASK(); - traceTASK_SWITCHED_IN(); - - #if ( configUSE_NEWLIB_REENTRANT == 1 ) - { - /* Switch Newlib's _impure_ptr variable to point to the _reent - structure specific to this task. */ - _impure_ptr = &( pxCurrentTCB->xNewLib_reent ); - } - #endif /* configUSE_NEWLIB_REENTRANT */ - } -} -/*-----------------------------------------------------------*/ - -void vTaskPlaceOnEventList( List_t * const pxEventList, const TickType_t xTicksToWait ) -{ - configASSERT( pxEventList ); - - /* THIS FUNCTION MUST BE CALLED WITH EITHER INTERRUPTS DISABLED OR THE - SCHEDULER SUSPENDED AND THE QUEUE BEING ACCESSED LOCKED. */ - - /* Place the event list item of the TCB in the appropriate event list. - This is placed in the list in priority order so the highest priority task - is the first to be woken by the event. The queue that contains the event - list is locked, preventing simultaneous access from interrupts. */ - vListInsert( pxEventList, &( pxCurrentTCB->xEventListItem ) ); - - prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE ); -} -/*-----------------------------------------------------------*/ - -void vTaskPlaceOnUnorderedEventList( List_t * pxEventList, const TickType_t xItemValue, const TickType_t xTicksToWait ) -{ - configASSERT( pxEventList ); - - /* THIS FUNCTION MUST BE CALLED WITH THE SCHEDULER SUSPENDED. It is used by - the event groups implementation. */ - configASSERT( uxSchedulerSuspended != 0 ); - - /* Store the item value in the event list item. It is safe to access the - event list item here as interrupts won't access the event list item of a - task that is not in the Blocked state. */ - listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xEventListItem ), xItemValue | taskEVENT_LIST_ITEM_VALUE_IN_USE ); - - /* Place the event list item of the TCB at the end of the appropriate event - list. It is safe to access the event list here because it is part of an - event group implementation - and interrupts don't access event groups - directly (instead they access them indirectly by pending function calls to - the task level). */ - vListInsertEnd( pxEventList, &( pxCurrentTCB->xEventListItem ) ); - - prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE ); -} -/*-----------------------------------------------------------*/ - -#if( configUSE_TIMERS == 1 ) - - void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) - { - configASSERT( pxEventList ); - - /* This function should not be called by application code hence the - 'Restricted' in its name. It is not part of the public API. It is - designed for use by kernel code, and has special calling requirements - - it should be called with the scheduler suspended. */ - - - /* Place the event list item of the TCB in the appropriate event list. - In this case it is assume that this is the only task that is going to - be waiting on this event list, so the faster vListInsertEnd() function - can be used in place of vListInsert. */ - vListInsertEnd( pxEventList, &( pxCurrentTCB->xEventListItem ) ); - - /* If the task should block indefinitely then set the block time to a - value that will be recognised as an indefinite delay inside the - prvAddCurrentTaskToDelayedList() function. */ - if( xWaitIndefinitely != pdFALSE ) - { - xTicksToWait = portMAX_DELAY; - } - - traceTASK_DELAY_UNTIL( ( xTickCount + xTicksToWait ) ); - prvAddCurrentTaskToDelayedList( xTicksToWait, xWaitIndefinitely ); - } - -#endif /* configUSE_TIMERS */ -/*-----------------------------------------------------------*/ - -BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList ) -{ -TCB_t *pxUnblockedTCB; -BaseType_t xReturn; - - /* THIS FUNCTION MUST BE CALLED FROM A CRITICAL SECTION. It can also be - called from a critical section within an ISR. */ - - /* The event list is sorted in priority order, so the first in the list can - be removed as it is known to be the highest priority. Remove the TCB from - the delayed list, and add it to the ready list. - - If an event is for a queue that is locked then this function will never - get called - the lock count on the queue will get modified instead. This - means exclusive access to the event list is guaranteed here. - - This function assumes that a check has already been made to ensure that - pxEventList is not empty. */ - pxUnblockedTCB = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxEventList ); - configASSERT( pxUnblockedTCB ); - ( void ) uxListRemove( &( pxUnblockedTCB->xEventListItem ) ); - - if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) - { - ( void ) uxListRemove( &( pxUnblockedTCB->xStateListItem ) ); - prvAddTaskToReadyList( pxUnblockedTCB ); - } - else - { - /* The delayed and ready lists cannot be accessed, so hold this task - pending until the scheduler is resumed. */ - vListInsertEnd( &( xPendingReadyList ), &( pxUnblockedTCB->xEventListItem ) ); - } - - if( pxUnblockedTCB->uxPriority > pxCurrentTCB->uxPriority ) - { - /* Return true if the task removed from the event list has a higher - priority than the calling task. This allows the calling task to know if - it should force a context switch now. */ - xReturn = pdTRUE; - - /* Mark that a yield is pending in case the user is not using the - "xHigherPriorityTaskWoken" parameter to an ISR safe FreeRTOS function. */ - xYieldPending = pdTRUE; - } - else - { - xReturn = pdFALSE; - } - - #if( configUSE_TICKLESS_IDLE != 0 ) - { - /* If a task is blocked on a kernel object then xNextTaskUnblockTime - might be set to the blocked task's time out time. If the task is - unblocked for a reason other than a timeout xNextTaskUnblockTime is - normally left unchanged, because it is automatically reset to a new - value when the tick count equals xNextTaskUnblockTime. However if - tickless idling is used it might be more important to enter sleep mode - at the earliest possible time - so reset xNextTaskUnblockTime here to - ensure it is updated at the earliest possible time. */ - prvResetNextTaskUnblockTime(); - } - #endif - - return xReturn; -} -/*-----------------------------------------------------------*/ - -BaseType_t xTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem, const TickType_t xItemValue ) -{ -TCB_t *pxUnblockedTCB; -BaseType_t xReturn; - - /* THIS FUNCTION MUST BE CALLED WITH THE SCHEDULER SUSPENDED. It is used by - the event flags implementation. */ - configASSERT( uxSchedulerSuspended != pdFALSE ); - - /* Store the new item value in the event list. */ - listSET_LIST_ITEM_VALUE( pxEventListItem, xItemValue | taskEVENT_LIST_ITEM_VALUE_IN_USE ); - - /* Remove the event list form the event flag. Interrupts do not access - event flags. */ - pxUnblockedTCB = ( TCB_t * ) listGET_LIST_ITEM_OWNER( pxEventListItem ); - configASSERT( pxUnblockedTCB ); - ( void ) uxListRemove( pxEventListItem ); - - /* Remove the task from the delayed list and add it to the ready list. The - scheduler is suspended so interrupts will not be accessing the ready - lists. */ - ( void ) uxListRemove( &( pxUnblockedTCB->xStateListItem ) ); - prvAddTaskToReadyList( pxUnblockedTCB ); - - if( pxUnblockedTCB->uxPriority > pxCurrentTCB->uxPriority ) - { - /* Return true if the task removed from the event list has - a higher priority than the calling task. This allows - the calling task to know if it should force a context - switch now. */ - xReturn = pdTRUE; - - /* Mark that a yield is pending in case the user is not using the - "xHigherPriorityTaskWoken" parameter to an ISR safe FreeRTOS function. */ - xYieldPending = pdTRUE; - } - else - { - xReturn = pdFALSE; - } - - return xReturn; -} -/*-----------------------------------------------------------*/ - -void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) -{ - configASSERT( pxTimeOut ); - pxTimeOut->xOverflowCount = xNumOfOverflows; - pxTimeOut->xTimeOnEntering = xTickCount; -} -/*-----------------------------------------------------------*/ - -BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait ) -{ -BaseType_t xReturn; - - configASSERT( pxTimeOut ); - configASSERT( pxTicksToWait ); - - taskENTER_CRITICAL(); - { - /* Minor optimisation. The tick count cannot change in this block. */ - const TickType_t xConstTickCount = xTickCount; - - #if( INCLUDE_xTaskAbortDelay == 1 ) - if( pxCurrentTCB->ucDelayAborted != pdFALSE ) - { - /* The delay was aborted, which is not the same as a time out, - but has the same result. */ - pxCurrentTCB->ucDelayAborted = pdFALSE; - xReturn = pdTRUE; - } - else - #endif - - #if ( INCLUDE_vTaskSuspend == 1 ) - if( *pxTicksToWait == portMAX_DELAY ) - { - /* If INCLUDE_vTaskSuspend is set to 1 and the block time - specified is the maximum block time then the task should block - indefinitely, and therefore never time out. */ - xReturn = pdFALSE; - } - else - #endif - - if( ( xNumOfOverflows != pxTimeOut->xOverflowCount ) && ( xConstTickCount >= pxTimeOut->xTimeOnEntering ) ) /*lint !e525 Indentation preferred as is to make code within pre-processor directives clearer. */ - { - /* The tick count is greater than the time at which - vTaskSetTimeout() was called, but has also overflowed since - vTaskSetTimeOut() was called. It must have wrapped all the way - around and gone past again. This passed since vTaskSetTimeout() - was called. */ - xReturn = pdTRUE; - } - else if( ( ( TickType_t ) ( xConstTickCount - pxTimeOut->xTimeOnEntering ) ) < *pxTicksToWait ) /*lint !e961 Explicit casting is only redundant with some compilers, whereas others require it to prevent integer conversion errors. */ - { - /* Not a genuine timeout. Adjust parameters for time remaining. */ - *pxTicksToWait -= ( xConstTickCount - pxTimeOut->xTimeOnEntering ); - vTaskSetTimeOutState( pxTimeOut ); - xReturn = pdFALSE; - } - else - { - xReturn = pdTRUE; - } - } - taskEXIT_CRITICAL(); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -void vTaskMissedYield( void ) -{ - xYieldPending = pdTRUE; -} -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - UBaseType_t uxTaskGetTaskNumber( TaskHandle_t xTask ) - { - UBaseType_t uxReturn; - TCB_t *pxTCB; - - if( xTask != NULL ) - { - pxTCB = ( TCB_t * ) xTask; - uxReturn = pxTCB->uxTaskNumber; - } - else - { - uxReturn = 0U; - } - - return uxReturn; - } - -#endif /* configUSE_TRACE_FACILITY */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - void vTaskSetTaskNumber( TaskHandle_t xTask, const UBaseType_t uxHandle ) - { - TCB_t *pxTCB; - - if( xTask != NULL ) - { - pxTCB = ( TCB_t * ) xTask; - pxTCB->uxTaskNumber = uxHandle; - } - } - -#endif /* configUSE_TRACE_FACILITY */ - -/* - * ----------------------------------------------------------- - * The Idle task. - * ---------------------------------------------------------- - * - * The portTASK_FUNCTION() macro is used to allow port/compiler specific - * language extensions. The equivalent prototype for this function is: - * - * void prvIdleTask( void *pvParameters ); - * - */ -static portTASK_FUNCTION( prvIdleTask, pvParameters ) -{ - /* Stop warnings. */ - ( void ) pvParameters; - - /** THIS IS THE RTOS IDLE TASK - WHICH IS CREATED AUTOMATICALLY WHEN THE - SCHEDULER IS STARTED. **/ - - for( ;; ) - { - /* See if any tasks have deleted themselves - if so then the idle task - is responsible for freeing the deleted task's TCB and stack. */ - prvCheckTasksWaitingTermination(); - - #if ( configUSE_PREEMPTION == 0 ) - { - /* If we are not using preemption we keep forcing a task switch to - see if any other task has become available. If we are using - preemption we don't need to do this as any task becoming available - will automatically get the processor anyway. */ - taskYIELD(); - } - #endif /* configUSE_PREEMPTION */ - - #if ( ( configUSE_PREEMPTION == 1 ) && ( configIDLE_SHOULD_YIELD == 1 ) ) - { - /* When using preemption tasks of equal priority will be - timesliced. If a task that is sharing the idle priority is ready - to run then the idle task should yield before the end of the - timeslice. - - A critical region is not required here as we are just reading from - the list, and an occasional incorrect value will not matter. If - the ready list at the idle priority contains more than one task - then a task other than the idle task is ready to execute. */ - if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 ) - { - taskYIELD(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* ( ( configUSE_PREEMPTION == 1 ) && ( configIDLE_SHOULD_YIELD == 1 ) ) */ - - #if ( configUSE_IDLE_HOOK == 1 ) - { - extern void vApplicationIdleHook( void ); - - /* Call the user defined function from within the idle task. This - allows the application designer to add background functionality - without the overhead of a separate task. - NOTE: vApplicationIdleHook() MUST NOT, UNDER ANY CIRCUMSTANCES, - CALL A FUNCTION THAT MIGHT BLOCK. */ - vApplicationIdleHook(); - } - #endif /* configUSE_IDLE_HOOK */ - - /* This conditional compilation should use inequality to 0, not equality - to 1. This is to ensure portSUPPRESS_TICKS_AND_SLEEP() is called when - user defined low power mode implementations require - configUSE_TICKLESS_IDLE to be set to a value other than 1. */ - #if ( configUSE_TICKLESS_IDLE != 0 ) - { - TickType_t xExpectedIdleTime; - - /* It is not desirable to suspend then resume the scheduler on - each iteration of the idle task. Therefore, a preliminary - test of the expected idle time is performed without the - scheduler suspended. The result here is not necessarily - valid. */ - xExpectedIdleTime = prvGetExpectedIdleTime(); - - if( xExpectedIdleTime >= configEXPECTED_IDLE_TIME_BEFORE_SLEEP ) - { - vTaskSuspendAll(); - { - /* Now the scheduler is suspended, the expected idle - time can be sampled again, and this time its value can - be used. */ - configASSERT( xNextTaskUnblockTime >= xTickCount ); - xExpectedIdleTime = prvGetExpectedIdleTime(); - - if( xExpectedIdleTime >= configEXPECTED_IDLE_TIME_BEFORE_SLEEP ) - { - traceLOW_POWER_IDLE_BEGIN(); - portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime ); - traceLOW_POWER_IDLE_END(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - ( void ) xTaskResumeAll(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_TICKLESS_IDLE */ - } -} -/*-----------------------------------------------------------*/ - -#if( configUSE_TICKLESS_IDLE != 0 ) - - eSleepModeStatus eTaskConfirmSleepModeStatus( void ) - { - /* The idle task exists in addition to the application tasks. */ - const UBaseType_t uxNonApplicationTasks = 1; - eSleepModeStatus eReturn = eStandardSleep; - - if( listCURRENT_LIST_LENGTH( &xPendingReadyList ) != 0 ) - { - /* A task was made ready while the scheduler was suspended. */ - eReturn = eAbortSleep; - } - else if( xYieldPending != pdFALSE ) - { - /* A yield was pended while the scheduler was suspended. */ - eReturn = eAbortSleep; - } - else - { - /* If all the tasks are in the suspended list (which might mean they - have an infinite block time rather than actually being suspended) - then it is safe to turn all clocks off and just wait for external - interrupts. */ - if( listCURRENT_LIST_LENGTH( &xSuspendedTaskList ) == ( uxCurrentNumberOfTasks - uxNonApplicationTasks ) ) - { - eReturn = eNoTasksWaitingTimeout; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - return eReturn; - } - -#endif /* configUSE_TICKLESS_IDLE */ -/*-----------------------------------------------------------*/ - -#if ( configNUM_THREAD_LOCAL_STORAGE_POINTERS != 0 ) - - void vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue ) - { - TCB_t *pxTCB; - - if( xIndex < configNUM_THREAD_LOCAL_STORAGE_POINTERS ) - { - pxTCB = prvGetTCBFromHandle( xTaskToSet ); - pxTCB->pvThreadLocalStoragePointers[ xIndex ] = pvValue; - } - } - -#endif /* configNUM_THREAD_LOCAL_STORAGE_POINTERS */ -/*-----------------------------------------------------------*/ - -#if ( configNUM_THREAD_LOCAL_STORAGE_POINTERS != 0 ) - - void *pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseType_t xIndex ) - { - void *pvReturn = NULL; - TCB_t *pxTCB; - - if( xIndex < configNUM_THREAD_LOCAL_STORAGE_POINTERS ) - { - pxTCB = prvGetTCBFromHandle( xTaskToQuery ); - pvReturn = pxTCB->pvThreadLocalStoragePointers[ xIndex ]; - } - else - { - pvReturn = NULL; - } - - return pvReturn; - } - -#endif /* configNUM_THREAD_LOCAL_STORAGE_POINTERS */ -/*-----------------------------------------------------------*/ - -#if ( portUSING_MPU_WRAPPERS == 1 ) - - void vTaskAllocateMPURegions( TaskHandle_t xTaskToModify, const MemoryRegion_t * const xRegions ) - { - TCB_t *pxTCB; - - /* If null is passed in here then we are modifying the MPU settings of - the calling task. */ - pxTCB = prvGetTCBFromHandle( xTaskToModify ); - - vPortStoreTaskMPUSettings( &( pxTCB->xMPUSettings ), xRegions, NULL, 0 ); - } - -#endif /* portUSING_MPU_WRAPPERS */ -/*-----------------------------------------------------------*/ - -static void prvInitialiseTaskLists( void ) -{ -UBaseType_t uxPriority; - - for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ ) - { - vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) ); - } - - vListInitialise( &xDelayedTaskList1 ); - vListInitialise( &xDelayedTaskList2 ); - vListInitialise( &xPendingReadyList ); - - #if ( INCLUDE_vTaskDelete == 1 ) - { - vListInitialise( &xTasksWaitingTermination ); - } - #endif /* INCLUDE_vTaskDelete */ - - #if ( INCLUDE_vTaskSuspend == 1 ) - { - vListInitialise( &xSuspendedTaskList ); - } - #endif /* INCLUDE_vTaskSuspend */ - - /* Start with pxDelayedTaskList using list1 and the pxOverflowDelayedTaskList - using list2. */ - pxDelayedTaskList = &xDelayedTaskList1; - pxOverflowDelayedTaskList = &xDelayedTaskList2; -} -/*-----------------------------------------------------------*/ - -static void prvCheckTasksWaitingTermination( void ) -{ - - /** THIS FUNCTION IS CALLED FROM THE RTOS IDLE TASK **/ - - #if ( INCLUDE_vTaskDelete == 1 ) - { - BaseType_t xListIsEmpty; - - /* ucTasksDeleted is used to prevent vTaskSuspendAll() being called - too often in the idle task. */ - while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U ) - { - vTaskSuspendAll(); - { - xListIsEmpty = listLIST_IS_EMPTY( &xTasksWaitingTermination ); - } - ( void ) xTaskResumeAll(); - - if( xListIsEmpty == pdFALSE ) - { - TCB_t *pxTCB; - - taskENTER_CRITICAL(); - { - pxTCB = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xTasksWaitingTermination ) ); - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - --uxCurrentNumberOfTasks; - --uxDeletedTasksWaitingCleanUp; - } - taskEXIT_CRITICAL(); - - prvDeleteTCB( pxTCB ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - #endif /* INCLUDE_vTaskDelete */ -} -/*-----------------------------------------------------------*/ - -#if( configUSE_TRACE_FACILITY == 1 ) - - void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState ) - { - TCB_t *pxTCB; - - /* xTask is NULL then get the state of the calling task. */ - pxTCB = prvGetTCBFromHandle( xTask ); - - pxTaskStatus->xHandle = ( TaskHandle_t ) pxTCB; - pxTaskStatus->pcTaskName = ( const char * ) &( pxTCB->pcTaskName [ 0 ] ); - pxTaskStatus->uxCurrentPriority = pxTCB->uxPriority; - pxTaskStatus->pxStackBase = pxTCB->pxStack; - pxTaskStatus->xTaskNumber = pxTCB->uxTCBNumber; - - #if ( INCLUDE_vTaskSuspend == 1 ) - { - /* If the task is in the suspended list then there is a chance it is - actually just blocked indefinitely - so really it should be reported as - being in the Blocked state. */ - if( pxTaskStatus->eCurrentState == eSuspended ) - { - vTaskSuspendAll(); - { - if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL ) - { - pxTaskStatus->eCurrentState = eBlocked; - } - } - xTaskResumeAll(); - } - } - #endif /* INCLUDE_vTaskSuspend */ - - #if ( configUSE_MUTEXES == 1 ) - { - pxTaskStatus->uxBasePriority = pxTCB->uxBasePriority; - } - #else - { - pxTaskStatus->uxBasePriority = 0; - } - #endif - - #if ( configGENERATE_RUN_TIME_STATS == 1 ) - { - pxTaskStatus->ulRunTimeCounter = pxTCB->ulRunTimeCounter; - } - #else - { - pxTaskStatus->ulRunTimeCounter = 0; - } - #endif - - /* Obtaining the task state is a little fiddly, so is only done if the value - of eState passed into this function is eInvalid - otherwise the state is - just set to whatever is passed in. */ - if( eState != eInvalid ) - { - pxTaskStatus->eCurrentState = eState; - } - else - { - pxTaskStatus->eCurrentState = eTaskGetState( xTask ); - } - - /* Obtaining the stack space takes some time, so the xGetFreeStackSpace - parameter is provided to allow it to be skipped. */ - if( xGetFreeStackSpace != pdFALSE ) - { - #if ( portSTACK_GROWTH > 0 ) - { - pxTaskStatus->usStackHighWaterMark = prvTaskCheckFreeStackSpace( ( uint8_t * ) pxTCB->pxEndOfStack ); - } - #else - { - pxTaskStatus->usStackHighWaterMark = prvTaskCheckFreeStackSpace( ( uint8_t * ) pxTCB->pxStack ); - } - #endif - } - else - { - pxTaskStatus->usStackHighWaterMark = 0; - } - } - -#endif /* configUSE_TRACE_FACILITY */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - static UBaseType_t prvListTasksWithinSingleList( TaskStatus_t *pxTaskStatusArray, List_t *pxList, eTaskState eState ) - { - volatile TCB_t *pxNextTCB, *pxFirstTCB; - UBaseType_t uxTask = 0; - - if( listCURRENT_LIST_LENGTH( pxList ) > ( UBaseType_t ) 0 ) - { - listGET_OWNER_OF_NEXT_ENTRY( pxFirstTCB, pxList ); - - /* Populate an TaskStatus_t structure within the - pxTaskStatusArray array for each task that is referenced from - pxList. See the definition of TaskStatus_t in task.h for the - meaning of each TaskStatus_t structure member. */ - do - { - listGET_OWNER_OF_NEXT_ENTRY( pxNextTCB, pxList ); - vTaskGetInfo( ( TaskHandle_t ) pxNextTCB, &( pxTaskStatusArray[ uxTask ] ), pdTRUE, eState ); - uxTask++; - } while( pxNextTCB != pxFirstTCB ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - return uxTask; - } - -#endif /* configUSE_TRACE_FACILITY */ -/*-----------------------------------------------------------*/ - -#if ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) ) - - static uint16_t prvTaskCheckFreeStackSpace( const uint8_t * pucStackByte ) - { - uint32_t ulCount = 0U; - - while( *pucStackByte == ( uint8_t ) tskSTACK_FILL_BYTE ) - { - pucStackByte -= portSTACK_GROWTH; - ulCount++; - } - - ulCount /= ( uint32_t ) sizeof( StackType_t ); /*lint !e961 Casting is not redundant on smaller architectures. */ - - return ( uint16_t ) ulCount; - } - -#endif /* ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) ) */ -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) - - UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) - { - TCB_t *pxTCB; - uint8_t *pucEndOfStack; - UBaseType_t uxReturn; - - pxTCB = prvGetTCBFromHandle( xTask ); - - #if portSTACK_GROWTH < 0 - { - pucEndOfStack = ( uint8_t * ) pxTCB->pxStack; - } - #else - { - pucEndOfStack = ( uint8_t * ) pxTCB->pxEndOfStack; - } - #endif - - uxReturn = ( UBaseType_t ) prvTaskCheckFreeStackSpace( pucEndOfStack ); - - return uxReturn; - } - -#endif /* INCLUDE_uxTaskGetStackHighWaterMark */ -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_vTaskDelete == 1 ) - - static void prvDeleteTCB( TCB_t *pxTCB ) - { - /* This call is required specifically for the TriCore port. It must be - above the vPortFree() calls. The call is also used by ports/demos that - want to allocate and clean RAM statically. */ - portCLEAN_UP_TCB( pxTCB ); - - /* Free up the memory allocated by the scheduler for the task. It is up - to the task to free any memory allocated at the application level. */ - #if ( configUSE_NEWLIB_REENTRANT == 1 ) - { - _reclaim_reent( &( pxTCB->xNewLib_reent ) ); - } - #endif /* configUSE_NEWLIB_REENTRANT */ - - #if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) && ( portUSING_MPU_WRAPPERS == 0 ) ) - { - /* The task can only have been allocated dynamically - free both - the stack and TCB. */ - vPortFree( pxTCB->pxStack ); - vPortFree( pxTCB ); - } - #elif( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE == 1 ) - { - /* The task could have been allocated statically or dynamically, so - check what was statically allocated before trying to free the - memory. */ - if( pxTCB->ucStaticallyAllocated == tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB ) - { - /* Both the stack and TCB were allocated dynamically, so both - must be freed. */ - vPortFree( pxTCB->pxStack ); - vPortFree( pxTCB ); - } - else if( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_ONLY ) - { - /* Only the stack was statically allocated, so the TCB is the - only memory that must be freed. */ - vPortFree( pxTCB ); - } - else - { - /* Neither the stack nor the TCB were allocated dynamically, so - nothing needs to be freed. */ - configASSERT( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB ) - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ - } - -#endif /* INCLUDE_vTaskDelete */ -/*-----------------------------------------------------------*/ - -static void prvResetNextTaskUnblockTime( void ) -{ -TCB_t *pxTCB; - - if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE ) - { - /* The new current delayed list is empty. Set xNextTaskUnblockTime to - the maximum possible value so it is extremely unlikely that the - if( xTickCount >= xNextTaskUnblockTime ) test will pass until - there is an item in the delayed list. */ - xNextTaskUnblockTime = portMAX_DELAY; - } - else - { - /* The new current delayed list is not empty, get the value of - the item at the head of the delayed list. This is the time at - which the task at the head of the delayed list should be removed - from the Blocked state. */ - ( pxTCB ) = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ); - xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xStateListItem ) ); - } -} -/*-----------------------------------------------------------*/ - -#if ( ( INCLUDE_xTaskGetCurrentTaskHandle == 1 ) || ( configUSE_MUTEXES == 1 ) ) - - TaskHandle_t xTaskGetCurrentTaskHandle( void ) - { - TaskHandle_t xReturn; - - /* A critical section is not required as this is not called from - an interrupt and the current TCB will always be the same for any - individual execution thread. */ - xReturn = pxCurrentTCB; - - return xReturn; - } - -#endif /* ( ( INCLUDE_xTaskGetCurrentTaskHandle == 1 ) || ( configUSE_MUTEXES == 1 ) ) */ -/*-----------------------------------------------------------*/ - -#if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) - - BaseType_t xTaskGetSchedulerState( void ) - { - BaseType_t xReturn; - - if( xSchedulerRunning == pdFALSE ) - { - xReturn = taskSCHEDULER_NOT_STARTED; - } - else - { - if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) - { - xReturn = taskSCHEDULER_RUNNING; - } - else - { - xReturn = taskSCHEDULER_SUSPENDED; - } - } - - return xReturn; - } - -#endif /* ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_MUTEXES == 1 ) - - void vTaskPriorityInherit( TaskHandle_t const pxMutexHolder ) - { - TCB_t * const pxTCB = ( TCB_t * ) pxMutexHolder; - - /* If the mutex was given back by an interrupt while the queue was - locked then the mutex holder might now be NULL. */ - if( pxMutexHolder != NULL ) - { - /* If the holder of the mutex has a priority below the priority of - the task attempting to obtain the mutex then it will temporarily - inherit the priority of the task attempting to obtain the mutex. */ - if( pxTCB->uxPriority < pxCurrentTCB->uxPriority ) - { - /* Adjust the mutex holder state to account for its new - priority. Only reset the event list item value if the value is - not being used for anything else. */ - if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL ) - { - listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxCurrentTCB->uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* If the task being modified is in the ready state it will need - to be moved into a new list. */ - if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxTCB->uxPriority ] ), &( pxTCB->xStateListItem ) ) != pdFALSE ) - { - if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) - { - taskRESET_READY_PRIORITY( pxTCB->uxPriority ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Inherit the priority before being moved into the new list. */ - pxTCB->uxPriority = pxCurrentTCB->uxPriority; - prvAddTaskToReadyList( pxTCB ); - } - else - { - /* Just inherit the priority. */ - pxTCB->uxPriority = pxCurrentTCB->uxPriority; - } - - traceTASK_PRIORITY_INHERIT( pxTCB, pxCurrentTCB->uxPriority ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - -#endif /* configUSE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_MUTEXES == 1 ) - - BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder ) - { - TCB_t * const pxTCB = ( TCB_t * ) pxMutexHolder; - BaseType_t xReturn = pdFALSE; - - if( pxMutexHolder != NULL ) - { - /* A task can only have an inherited priority if it holds the mutex. - If the mutex is held by a task then it cannot be given from an - interrupt, and if a mutex is given by the holding task then it must - be the running state task. */ - configASSERT( pxTCB == pxCurrentTCB ); - - configASSERT( pxTCB->uxMutexesHeld ); - ( pxTCB->uxMutexesHeld )--; - - /* Has the holder of the mutex inherited the priority of another - task? */ - if( pxTCB->uxPriority != pxTCB->uxBasePriority ) - { - /* Only disinherit if no other mutexes are held. */ - if( pxTCB->uxMutexesHeld == ( UBaseType_t ) 0 ) - { - /* A task can only have an inherited priority if it holds - the mutex. If the mutex is held by a task then it cannot be - given from an interrupt, and if a mutex is given by the - holding task then it must be the running state task. Remove - the holding task from the ready list. */ - if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) - { - taskRESET_READY_PRIORITY( pxTCB->uxPriority ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Disinherit the priority before adding the task into the - new ready list. */ - traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority ); - pxTCB->uxPriority = pxTCB->uxBasePriority; - - /* Reset the event list item value. It cannot be in use for - any other purpose if this task is running, and it must be - running to give back the mutex. */ - listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - prvAddTaskToReadyList( pxTCB ); - - /* Return true to indicate that a context switch is required. - This is only actually required in the corner case whereby - multiple mutexes were held and the mutexes were given back - in an order different to that in which they were taken. - If a context switch did not occur when the first mutex was - returned, even if a task was waiting on it, then a context - switch should occur when the last mutex is returned whether - a task is waiting on it or not. */ - xReturn = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - return xReturn; - } - -#endif /* configUSE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if ( portCRITICAL_NESTING_IN_TCB == 1 ) - - void vTaskEnterCritical( void ) - { - portDISABLE_INTERRUPTS(); - - if( xSchedulerRunning != pdFALSE ) - { - ( pxCurrentTCB->uxCriticalNesting )++; - - /* This is not the interrupt safe version of the enter critical - function so assert() if it is being called from an interrupt - context. Only API functions that end in "FromISR" can be used in an - interrupt. Only assert if the critical nesting count is 1 to - protect against recursive calls if the assert function also uses a - critical section. */ - if( pxCurrentTCB->uxCriticalNesting == 1 ) - { - portASSERT_IF_IN_ISR(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - -#endif /* portCRITICAL_NESTING_IN_TCB */ -/*-----------------------------------------------------------*/ - -#if ( portCRITICAL_NESTING_IN_TCB == 1 ) - - void vTaskExitCritical( void ) - { - if( xSchedulerRunning != pdFALSE ) - { - if( pxCurrentTCB->uxCriticalNesting > 0U ) - { - ( pxCurrentTCB->uxCriticalNesting )--; - - if( pxCurrentTCB->uxCriticalNesting == 0U ) - { - portENABLE_INTERRUPTS(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - -#endif /* portCRITICAL_NESTING_IN_TCB */ -/*-----------------------------------------------------------*/ - -#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) - - static char *prvWriteNameToBuffer( char *pcBuffer, const char *pcTaskName ) - { - size_t x; - - /* Start by copying the entire string. */ - strcpy( pcBuffer, pcTaskName ); - - /* Pad the end of the string with spaces to ensure columns line up when - printed out. */ - for( x = strlen( pcBuffer ); x < ( size_t ) ( configMAX_TASK_NAME_LEN - 1 ); x++ ) - { - pcBuffer[ x ] = ' '; - } - - /* Terminate. */ - pcBuffer[ x ] = 0x00; - - /* Return the new end of string. */ - return &( pcBuffer[ x ] ); - } - -#endif /* ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) */ -/*-----------------------------------------------------------*/ - -#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) - - void vTaskList( char * pcWriteBuffer ) - { - TaskStatus_t *pxTaskStatusArray; - volatile UBaseType_t uxArraySize, x; - char cStatus; - - /* - * PLEASE NOTE: - * - * This function is provided for convenience only, and is used by many - * of the demo applications. Do not consider it to be part of the - * scheduler. - * - * vTaskList() calls uxTaskGetSystemState(), then formats part of the - * uxTaskGetSystemState() output into a human readable table that - * displays task names, states and stack usage. - * - * vTaskList() has a dependency on the sprintf() C library function that - * might bloat the code size, use a lot of stack, and provide different - * results on different platforms. An alternative, tiny, third party, - * and limited functionality implementation of sprintf() is provided in - * many of the FreeRTOS/Demo sub-directories in a file called - * printf-stdarg.c (note printf-stdarg.c does not provide a full - * snprintf() implementation!). - * - * It is recommended that production systems call uxTaskGetSystemState() - * directly to get access to raw stats data, rather than indirectly - * through a call to vTaskList(). - */ - - - /* Make sure the write buffer does not contain a string. */ - *pcWriteBuffer = 0x00; - - /* Take a snapshot of the number of tasks in case it changes while this - function is executing. */ - uxArraySize = uxCurrentNumberOfTasks; - - /* Allocate an array index for each task. NOTE! if - configSUPPORT_DYNAMIC_ALLOCATION is set to 0 then pvPortMalloc() will - equate to NULL. */ - pxTaskStatusArray = pvPortMalloc( uxCurrentNumberOfTasks * sizeof( TaskStatus_t ) ); - - if( pxTaskStatusArray != NULL ) - { - /* Generate the (binary) data. */ - uxArraySize = uxTaskGetSystemState( pxTaskStatusArray, uxArraySize, NULL ); - - /* Create a human readable table from the binary data. */ - for( x = 0; x < uxArraySize; x++ ) - { - switch( pxTaskStatusArray[ x ].eCurrentState ) - { - case eReady: cStatus = tskREADY_CHAR; - break; - - case eBlocked: cStatus = tskBLOCKED_CHAR; - break; - - case eSuspended: cStatus = tskSUSPENDED_CHAR; - break; - - case eDeleted: cStatus = tskDELETED_CHAR; - break; - - default: /* Should not get here, but it is included - to prevent static checking errors. */ - cStatus = 0x00; - break; - } - - /* Write the task name to the string, padding with spaces so it - can be printed in tabular form more easily. */ - pcWriteBuffer = prvWriteNameToBuffer( pcWriteBuffer, pxTaskStatusArray[ x ].pcTaskName ); - - /* Write the rest of the string. */ - sprintf( pcWriteBuffer, "\t%c\t%u\t%u\t%u\r\n", cStatus, ( unsigned int ) pxTaskStatusArray[ x ].uxCurrentPriority, ( unsigned int ) pxTaskStatusArray[ x ].usStackHighWaterMark, ( unsigned int ) pxTaskStatusArray[ x ].xTaskNumber ); - pcWriteBuffer += strlen( pcWriteBuffer ); - } - - /* Free the array again. NOTE! If configSUPPORT_DYNAMIC_ALLOCATION - is 0 then vPortFree() will be #defined to nothing. */ - vPortFree( pxTaskStatusArray ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - -#endif /* ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) */ -/*----------------------------------------------------------*/ - -#if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) - - void vTaskGetRunTimeStats( char *pcWriteBuffer ) - { - TaskStatus_t *pxTaskStatusArray; - volatile UBaseType_t uxArraySize, x; - uint32_t ulTotalTime, ulStatsAsPercentage; - - #if( configUSE_TRACE_FACILITY != 1 ) - { - #error configUSE_TRACE_FACILITY must also be set to 1 in FreeRTOSConfig.h to use vTaskGetRunTimeStats(). - } - #endif - - /* - * PLEASE NOTE: - * - * This function is provided for convenience only, and is used by many - * of the demo applications. Do not consider it to be part of the - * scheduler. - * - * vTaskGetRunTimeStats() calls uxTaskGetSystemState(), then formats part - * of the uxTaskGetSystemState() output into a human readable table that - * displays the amount of time each task has spent in the Running state - * in both absolute and percentage terms. - * - * vTaskGetRunTimeStats() has a dependency on the sprintf() C library - * function that might bloat the code size, use a lot of stack, and - * provide different results on different platforms. An alternative, - * tiny, third party, and limited functionality implementation of - * sprintf() is provided in many of the FreeRTOS/Demo sub-directories in - * a file called printf-stdarg.c (note printf-stdarg.c does not provide - * a full snprintf() implementation!). - * - * It is recommended that production systems call uxTaskGetSystemState() - * directly to get access to raw stats data, rather than indirectly - * through a call to vTaskGetRunTimeStats(). - */ - - /* Make sure the write buffer does not contain a string. */ - *pcWriteBuffer = 0x00; - - /* Take a snapshot of the number of tasks in case it changes while this - function is executing. */ - uxArraySize = uxCurrentNumberOfTasks; - - /* Allocate an array index for each task. NOTE! If - configSUPPORT_DYNAMIC_ALLOCATION is set to 0 then pvPortMalloc() will - equate to NULL. */ - pxTaskStatusArray = pvPortMalloc( uxCurrentNumberOfTasks * sizeof( TaskStatus_t ) ); - - if( pxTaskStatusArray != NULL ) - { - /* Generate the (binary) data. */ - uxArraySize = uxTaskGetSystemState( pxTaskStatusArray, uxArraySize, &ulTotalTime ); - printf("CPU total run time is %u\n", ulTotalTime); - printf("TaskName\tDeltaRunTime\tpercentage\n"); - - /* For percentage calculations. */ - ulTotalTime /= 100UL; - - /* Avoid divide by zero errors. */ - if( ulTotalTime > 0 ) - { - /* Create a human readable table from the binary data. */ - for( x = 0; x < uxArraySize; x++ ) - { - /* What percentage of the total run time has the task used? - This will always be rounded down to the nearest integer. - ulTotalRunTimeDiv100 has already been divided by 100. */ - ulStatsAsPercentage = pxTaskStatusArray[ x ].ulRunTimeCounter / ulTotalTime; - - /* Write the task name to the string, padding with - spaces so it can be printed in tabular form more - easily. */ - pcWriteBuffer = prvWriteNameToBuffer( pcWriteBuffer, pxTaskStatusArray[ x ].pcTaskName ); - - if( ulStatsAsPercentage > 0UL ) - { - #ifdef portLU_PRINTF_SPECIFIER_REQUIRED - { - sprintf( pcWriteBuffer, "\t%lu\t\t%lu%%\r\n", pxTaskStatusArray[ x ].ulRunTimeCounter, ulStatsAsPercentage ); - } - #else - { - /* sizeof( int ) == sizeof( long ) so a smaller - printf() library can be used. */ - sprintf( pcWriteBuffer, "\t%u\t\t%u%%\r\n", ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter, ( unsigned int ) ulStatsAsPercentage ); - } - #endif - } - else - { - /* If the percentage is zero here then the task has - consumed less than 1% of the total run time. */ - #ifdef portLU_PRINTF_SPECIFIER_REQUIRED - { - sprintf( pcWriteBuffer, "\t%lu\t\t<1%%\r\n", pxTaskStatusArray[ x ].ulRunTimeCounter ); - } - #else - { - /* sizeof( int ) == sizeof( long ) so a smaller - printf() library can be used. */ - sprintf( pcWriteBuffer, "\t%u\t\t<1%%\r\n", ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter ); - } - #endif - } - - pcWriteBuffer += strlen( pcWriteBuffer ); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Free the array again. NOTE! If configSUPPORT_DYNAMIC_ALLOCATION - is 0 then vPortFree() will be #defined to nothing. */ - vPortFree( pxTaskStatusArray ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - -#endif /* ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) */ -/*-----------------------------------------------------------*/ - -TickType_t uxTaskResetEventItemValue( void ) -{ -TickType_t uxReturn; - - uxReturn = listGET_LIST_ITEM_VALUE( &( pxCurrentTCB->xEventListItem ) ); - - /* Reset the event list item to its normal value - so it can be used with - queues and semaphores. */ - listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xEventListItem ), ( ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxCurrentTCB->uxPriority ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - - return uxReturn; -} -/*-----------------------------------------------------------*/ - -#if ( configUSE_MUTEXES == 1 ) - - void *pvTaskIncrementMutexHeldCount( void ) - { - /* If xSemaphoreCreateMutex() is called before any tasks have been created - then pxCurrentTCB will be NULL. */ - if( pxCurrentTCB != NULL ) - { - ( pxCurrentTCB->uxMutexesHeld )++; - } - - return pxCurrentTCB; - } - -#endif /* configUSE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - - uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ) - { - uint32_t ulReturn; - - taskENTER_CRITICAL(); - { - /* Only block if the notification count is not already non-zero. */ - if( pxCurrentTCB->ulNotifiedValue == 0UL ) - { - /* Mark this task as waiting for a notification. */ - pxCurrentTCB->ucNotifyState = taskWAITING_NOTIFICATION; - - if( xTicksToWait > ( TickType_t ) 0 ) - { - prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE ); - traceTASK_NOTIFY_TAKE_BLOCK(); - - /* All ports are written to allow a yield in a critical - section (some will yield immediately, others wait until the - critical section exits) - but it is not something that - application code should ever do. */ - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); - - taskENTER_CRITICAL(); - { - traceTASK_NOTIFY_TAKE(); - ulReturn = pxCurrentTCB->ulNotifiedValue; - - if( ulReturn != 0UL ) - { - if( xClearCountOnExit != pdFALSE ) - { - pxCurrentTCB->ulNotifiedValue = 0UL; - } - else - { - pxCurrentTCB->ulNotifiedValue = ulReturn - 1; - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - pxCurrentTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION; - } - taskEXIT_CRITICAL(); - - return ulReturn; - } - -#endif /* configUSE_TASK_NOTIFICATIONS */ -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - - BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ) - { - BaseType_t xReturn; - - taskENTER_CRITICAL(); - { - /* Only block if a notification is not already pending. */ - if( pxCurrentTCB->ucNotifyState != taskNOTIFICATION_RECEIVED ) - { - /* Clear bits in the task's notification value as bits may get - set by the notifying task or interrupt. This can be used to - clear the value to zero. */ - pxCurrentTCB->ulNotifiedValue &= ~ulBitsToClearOnEntry; - - /* Mark this task as waiting for a notification. */ - pxCurrentTCB->ucNotifyState = taskWAITING_NOTIFICATION; - - if( xTicksToWait > ( TickType_t ) 0 ) - { - prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE ); - traceTASK_NOTIFY_WAIT_BLOCK(); - - /* All ports are written to allow a yield in a critical - section (some will yield immediately, others wait until the - critical section exits) - but it is not something that - application code should ever do. */ - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); - - taskENTER_CRITICAL(); - { - traceTASK_NOTIFY_WAIT(); - - if( pulNotificationValue != NULL ) - { - /* Output the current notification value, which may or may not - have changed. */ - *pulNotificationValue = pxCurrentTCB->ulNotifiedValue; - } - - /* If ucNotifyValue is set then either the task never entered the - blocked state (because a notification was already pending) or the - task unblocked because of a notification. Otherwise the task - unblocked because of a timeout. */ - if( pxCurrentTCB->ucNotifyState == taskWAITING_NOTIFICATION ) - { - /* A notification was not received. */ - xReturn = pdFALSE; - } - else - { - /* A notification was already pending or a notification was - received while the task was waiting. */ - pxCurrentTCB->ulNotifiedValue &= ~ulBitsToClearOnExit; - xReturn = pdTRUE; - } - - pxCurrentTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION; - } - taskEXIT_CRITICAL(); - - return xReturn; - } - -#endif /* configUSE_TASK_NOTIFICATIONS */ -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - - BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue ) - { - TCB_t * pxTCB; - BaseType_t xReturn = pdPASS; - uint8_t ucOriginalNotifyState; - - configASSERT( xTaskToNotify ); - pxTCB = ( TCB_t * ) xTaskToNotify; - - taskENTER_CRITICAL(); - { - if( pulPreviousNotificationValue != NULL ) - { - *pulPreviousNotificationValue = pxTCB->ulNotifiedValue; - } - - ucOriginalNotifyState = pxTCB->ucNotifyState; - - pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED; - - switch( eAction ) - { - case eSetBits : - pxTCB->ulNotifiedValue |= ulValue; - break; - - case eIncrement : - ( pxTCB->ulNotifiedValue )++; - break; - - case eSetValueWithOverwrite : - pxTCB->ulNotifiedValue = ulValue; - break; - - case eSetValueWithoutOverwrite : - if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED ) - { - pxTCB->ulNotifiedValue = ulValue; - } - else - { - /* The value could not be written to the task. */ - xReturn = pdFAIL; - } - break; - - case eNoAction: - /* The task is being notified without its notify value being - updated. */ - break; - } - - traceTASK_NOTIFY(); - - /* If the task is in the blocked state specifically to wait for a - notification then unblock it now. */ - if( ucOriginalNotifyState == taskWAITING_NOTIFICATION ) - { - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - prvAddTaskToReadyList( pxTCB ); - - /* The task should not have been on an event list. */ - configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL ); - - #if( configUSE_TICKLESS_IDLE != 0 ) - { - /* If a task is blocked waiting for a notification then - xNextTaskUnblockTime might be set to the blocked task's time - out time. If the task is unblocked for a reason other than - a timeout xNextTaskUnblockTime is normally left unchanged, - because it will automatically get reset to a new value when - the tick count equals xNextTaskUnblockTime. However if - tickless idling is used it might be more important to enter - sleep mode at the earliest possible time - so reset - xNextTaskUnblockTime here to ensure it is updated at the - earliest possible time. */ - prvResetNextTaskUnblockTime(); - } - #endif - - if( pxTCB->uxPriority > pxCurrentTCB->uxPriority ) - { - /* The notified task has a priority above the currently - executing task so a yield is required. */ - taskYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); - - return xReturn; - } - -#endif /* configUSE_TASK_NOTIFICATIONS */ -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - - BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken ) - { - TCB_t * pxTCB; - uint8_t ucOriginalNotifyState; - BaseType_t xReturn = pdPASS; - UBaseType_t uxSavedInterruptStatus; - - configASSERT( xTaskToNotify ); - - /* RTOS ports that support interrupt nesting have the concept of a - maximum system call (or maximum API call) interrupt priority. - Interrupts that are above the maximum system call priority are keep - permanently enabled, even when the RTOS kernel is in a critical section, - but cannot make any calls to FreeRTOS API functions. If configASSERT() - is defined in FreeRTOSConfig.h then - portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion - failure if a FreeRTOS API function is called from an interrupt that has - been assigned a priority above the configured maximum system call - priority. Only FreeRTOS functions that end in FromISR can be called - from interrupts that have been assigned a priority at or (logically) - below the maximum system call interrupt priority. FreeRTOS maintains a - separate interrupt safe API to ensure interrupt entry is as fast and as - simple as possible. More information (albeit Cortex-M specific) is - provided on the following link: - http://www.freertos.org/RTOS-Cortex-M3-M4.html */ - portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - - pxTCB = ( TCB_t * ) xTaskToNotify; - - uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); - { - if( pulPreviousNotificationValue != NULL ) - { - *pulPreviousNotificationValue = pxTCB->ulNotifiedValue; - } - - ucOriginalNotifyState = pxTCB->ucNotifyState; - pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED; - - switch( eAction ) - { - case eSetBits : - pxTCB->ulNotifiedValue |= ulValue; - break; - - case eIncrement : - ( pxTCB->ulNotifiedValue )++; - break; - - case eSetValueWithOverwrite : - pxTCB->ulNotifiedValue = ulValue; - break; - - case eSetValueWithoutOverwrite : - if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED ) - { - pxTCB->ulNotifiedValue = ulValue; - } - else - { - /* The value could not be written to the task. */ - xReturn = pdFAIL; - } - break; - - case eNoAction : - /* The task is being notified without its notify value being - updated. */ - break; - } - - traceTASK_NOTIFY_FROM_ISR(); - - /* If the task is in the blocked state specifically to wait for a - notification then unblock it now. */ - if( ucOriginalNotifyState == taskWAITING_NOTIFICATION ) - { - /* The task should not have been on an event list. */ - configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL ); - - if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) - { - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - prvAddTaskToReadyList( pxTCB ); - } - else - { - /* The delayed and ready lists cannot be accessed, so hold - this task pending until the scheduler is resumed. */ - vListInsertEnd( &( xPendingReadyList ), &( pxTCB->xEventListItem ) ); - } - - if( pxTCB->uxPriority > pxCurrentTCB->uxPriority ) - { - /* The notified task has a priority above the currently - executing task so a yield is required. */ - if( pxHigherPriorityTaskWoken != NULL ) - { - *pxHigherPriorityTaskWoken = pdTRUE; - } - else - { - /* Mark that a yield is pending in case the user is not - using the "xHigherPriorityTaskWoken" parameter to an ISR - safe FreeRTOS function. */ - xYieldPending = pdTRUE; - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - - return xReturn; - } - -#endif /* configUSE_TASK_NOTIFICATIONS */ -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - - void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken ) - { - TCB_t * pxTCB; - uint8_t ucOriginalNotifyState; - UBaseType_t uxSavedInterruptStatus; - - configASSERT( xTaskToNotify ); - - /* RTOS ports that support interrupt nesting have the concept of a - maximum system call (or maximum API call) interrupt priority. - Interrupts that are above the maximum system call priority are keep - permanently enabled, even when the RTOS kernel is in a critical section, - but cannot make any calls to FreeRTOS API functions. If configASSERT() - is defined in FreeRTOSConfig.h then - portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion - failure if a FreeRTOS API function is called from an interrupt that has - been assigned a priority above the configured maximum system call - priority. Only FreeRTOS functions that end in FromISR can be called - from interrupts that have been assigned a priority at or (logically) - below the maximum system call interrupt priority. FreeRTOS maintains a - separate interrupt safe API to ensure interrupt entry is as fast and as - simple as possible. More information (albeit Cortex-M specific) is - provided on the following link: - http://www.freertos.org/RTOS-Cortex-M3-M4.html */ - portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - - pxTCB = ( TCB_t * ) xTaskToNotify; - - uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); - { - ucOriginalNotifyState = pxTCB->ucNotifyState; - pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED; - - /* 'Giving' is equivalent to incrementing a count in a counting - semaphore. */ - ( pxTCB->ulNotifiedValue )++; - - traceTASK_NOTIFY_GIVE_FROM_ISR(); - - /* If the task is in the blocked state specifically to wait for a - notification then unblock it now. */ - if( ucOriginalNotifyState == taskWAITING_NOTIFICATION ) - { - /* The task should not have been on an event list. */ - configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL ); - - if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) - { - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - prvAddTaskToReadyList( pxTCB ); - } - else - { - /* The delayed and ready lists cannot be accessed, so hold - this task pending until the scheduler is resumed. */ - vListInsertEnd( &( xPendingReadyList ), &( pxTCB->xEventListItem ) ); - } - - if( pxTCB->uxPriority > pxCurrentTCB->uxPriority ) - { - /* The notified task has a priority above the currently - executing task so a yield is required. */ - if( pxHigherPriorityTaskWoken != NULL ) - { - *pxHigherPriorityTaskWoken = pdTRUE; - } - else - { - /* Mark that a yield is pending in case the user is not - using the "xHigherPriorityTaskWoken" parameter in an ISR - safe FreeRTOS function. */ - xYieldPending = pdTRUE; - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - } - -#endif /* configUSE_TASK_NOTIFICATIONS */ - -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - - BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask ) - { - TCB_t *pxTCB; - BaseType_t xReturn; - - /* If null is passed in here then it is the calling task that is having - its notification state cleared. */ - pxTCB = prvGetTCBFromHandle( xTask ); - - taskENTER_CRITICAL(); - { - if( pxTCB->ucNotifyState == taskNOTIFICATION_RECEIVED ) - { - pxTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION; - xReturn = pdPASS; - } - else - { - xReturn = pdFAIL; - } - } - taskEXIT_CRITICAL(); - - return xReturn; - } - -#endif /* configUSE_TASK_NOTIFICATIONS */ -/*-----------------------------------------------------------*/ - - -static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseType_t xCanBlockIndefinitely ) -{ -TickType_t xTimeToWake; -const TickType_t xConstTickCount = xTickCount; - - #if( INCLUDE_xTaskAbortDelay == 1 ) - { - /* About to enter a delayed list, so ensure the ucDelayAborted flag is - reset to pdFALSE so it can be detected as having been set to pdTRUE - when the task leaves the Blocked state. */ - pxCurrentTCB->ucDelayAborted = pdFALSE; - } - #endif - - /* Remove the task from the ready list before adding it to the blocked list - as the same list item is used for both lists. */ - if( uxListRemove( &( pxCurrentTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) - { - /* The current task must be in a ready list, so there is no need to - check, and the port reset macro can be called directly. */ - portRESET_READY_PRIORITY( pxCurrentTCB->uxPriority, uxTopReadyPriority ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - #if ( INCLUDE_vTaskSuspend == 1 ) - { - if( ( xTicksToWait == portMAX_DELAY ) && ( xCanBlockIndefinitely != pdFALSE ) ) - { - /* Add the task to the suspended task list instead of a delayed task - list to ensure it is not woken by a timing event. It will block - indefinitely. */ - vListInsertEnd( &xSuspendedTaskList, &( pxCurrentTCB->xStateListItem ) ); - } - else - { - /* Calculate the time at which the task should be woken if the event - does not occur. This may overflow but this doesn't matter, the - kernel will manage it correctly. */ - xTimeToWake = xConstTickCount + xTicksToWait; - - /* The list item will be inserted in wake time order. */ - listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xStateListItem ), xTimeToWake ); - - if( xTimeToWake < xConstTickCount ) - { - /* Wake time has overflowed. Place this item in the overflow - list. */ - vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); - } - else - { - /* The wake time has not overflowed, so the current block list - is used. */ - vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); - - /* If the task entering the blocked state was placed at the - head of the list of blocked tasks then xNextTaskUnblockTime - needs to be updated too. */ - if( xTimeToWake < xNextTaskUnblockTime ) - { - xNextTaskUnblockTime = xTimeToWake; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - } - #else /* INCLUDE_vTaskSuspend */ - { - /* Calculate the time at which the task should be woken if the event - does not occur. This may overflow but this doesn't matter, the kernel - will manage it correctly. */ - xTimeToWake = xConstTickCount + xTicksToWait; - - /* The list item will be inserted in wake time order. */ - listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xStateListItem ), xTimeToWake ); - - if( xTimeToWake < xConstTickCount ) - { - /* Wake time has overflowed. Place this item in the overflow list. */ - vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); - } - else - { - /* The wake time has not overflowed, so the current block list is used. */ - vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); - - /* If the task entering the blocked state was placed at the head of the - list of blocked tasks then xNextTaskUnblockTime needs to be updated - too. */ - if( xTimeToWake < xNextTaskUnblockTime ) - { - xNextTaskUnblockTime = xTimeToWake; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - /* Avoid compiler warning when INCLUDE_vTaskSuspend is not 1. */ - ( void ) xCanBlockIndefinitely; - } - #endif /* INCLUDE_vTaskSuspend */ -} - - -#ifdef FREERTOS_MODULE_TEST - #include "tasks_test_access_functions.h" -#endif - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/timers.c b/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/timers.c deleted file mode 100644 index d4a821a..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos/Source/timers.c +++ /dev/null @@ -1,1092 +0,0 @@ -/* - FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ - -/* Standard includes. */ -#include - -/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining -all the API functions to use the MPU wrappers. That should only be done when -task.h is included from an application file. */ -#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE - -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" -#include "timers.h" - -#if ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 0 ) - #error configUSE_TIMERS must be set to 1 to make the xTimerPendFunctionCall() function available. -#endif - -/* Lint e961 and e750 are suppressed as a MISRA exception justified because the -MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined for the -header files above, but not in this file, in order to generate the correct -privileged Vs unprivileged linkage and placement. */ -#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750. */ - - -/* This entire source file will be skipped if the application is not configured -to include software timer functionality. This #if is closed at the very bottom -of this file. If you want to include software timer functionality then ensure -configUSE_TIMERS is set to 1 in FreeRTOSConfig.h. */ -#if ( configUSE_TIMERS == 1 ) - -/* Misc definitions. */ -#define tmrNO_DELAY ( TickType_t ) 0U - -/* The definition of the timers themselves. */ -typedef struct tmrTimerControl -{ - const char *pcTimerName; /*<< Text name. This is not used by the kernel, it is included simply to make debugging easier. */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - ListItem_t xTimerListItem; /*<< Standard linked list item as used by all kernel features for event management. */ - TickType_t xTimerPeriodInTicks;/*<< How quickly and often the timer expires. */ - UBaseType_t uxAutoReload; /*<< Set to pdTRUE if the timer should be automatically restarted once expired. Set to pdFALSE if the timer is, in effect, a one-shot timer. */ - void *pvTimerID; /*<< An ID to identify the timer. This allows the timer to be identified when the same callback is used for multiple timers. */ - TimerCallbackFunction_t pxCallbackFunction; /*<< The function that will be called when the timer expires. */ - #if( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxTimerNumber; /*<< An ID assigned by trace tools such as FreeRTOS+Trace */ - #endif - - #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - uint8_t ucStaticallyAllocated; /*<< Set to pdTRUE if the timer was created statically so no attempt is made to free the memory again if the timer is later deleted. */ - #endif -} xTIMER; - -/* The old xTIMER name is maintained above then typedefed to the new Timer_t -name below to enable the use of older kernel aware debuggers. */ -typedef xTIMER Timer_t; - -/* The definition of messages that can be sent and received on the timer queue. -Two types of message can be queued - messages that manipulate a software timer, -and messages that request the execution of a non-timer related callback. The -two message types are defined in two separate structures, xTimerParametersType -and xCallbackParametersType respectively. */ -typedef struct tmrTimerParameters -{ - TickType_t xMessageValue; /*<< An optional value used by a subset of commands, for example, when changing the period of a timer. */ - Timer_t * pxTimer; /*<< The timer to which the command will be applied. */ -} TimerParameter_t; - - -typedef struct tmrCallbackParameters -{ - PendedFunction_t pxCallbackFunction; /* << The callback function to execute. */ - void *pvParameter1; /* << The value that will be used as the callback functions first parameter. */ - uint32_t ulParameter2; /* << The value that will be used as the callback functions second parameter. */ -} CallbackParameters_t; - -/* The structure that contains the two message types, along with an identifier -that is used to determine which message type is valid. */ -typedef struct tmrTimerQueueMessage -{ - BaseType_t xMessageID; /*<< The command being sent to the timer service task. */ - union - { - TimerParameter_t xTimerParameters; - - /* Don't include xCallbackParameters if it is not going to be used as - it makes the structure (and therefore the timer queue) larger. */ - #if ( INCLUDE_xTimerPendFunctionCall == 1 ) - CallbackParameters_t xCallbackParameters; - #endif /* INCLUDE_xTimerPendFunctionCall */ - } u; -} DaemonTaskMessage_t; - -/*lint -e956 A manual analysis and inspection has been used to determine which -static variables must be declared volatile. */ - -/* The list in which active timers are stored. Timers are referenced in expire -time order, with the nearest expiry time at the front of the list. Only the -timer service task is allowed to access these lists. */ -PRIVILEGED_DATA static List_t xActiveTimerList1; -PRIVILEGED_DATA static List_t xActiveTimerList2; -PRIVILEGED_DATA static List_t *pxCurrentTimerList; -PRIVILEGED_DATA static List_t *pxOverflowTimerList; - -/* A queue that is used to send commands to the timer service task. */ -PRIVILEGED_DATA static QueueHandle_t xTimerQueue = NULL; -PRIVILEGED_DATA static TaskHandle_t xTimerTaskHandle = NULL; - -/*lint +e956 */ - -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - - /* If static allocation is supported then the application must provide the - following callback function - which enables the application to optionally - provide the memory that will be used by the timer task as the task's stack - and TCB. */ - extern void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize ); - -#endif - -/* - * Initialise the infrastructure used by the timer service task if it has not - * been initialised already. - */ -static void prvCheckForValidListAndQueue( void ) PRIVILEGED_FUNCTION; - -/* - * The timer service task (daemon). Timer functionality is controlled by this - * task. Other tasks communicate with the timer service task using the - * xTimerQueue queue. - */ -static void prvTimerTask( void *pvParameters ) PRIVILEGED_FUNCTION; - -/* - * Called by the timer service task to interpret and process a command it - * received on the timer queue. - */ -static void prvProcessReceivedCommands( void ) PRIVILEGED_FUNCTION; - -/* - * Insert the timer into either xActiveTimerList1, or xActiveTimerList2, - * depending on if the expire time causes a timer counter overflow. - */ -static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer, const TickType_t xNextExpiryTime, const TickType_t xTimeNow, const TickType_t xCommandTime ) PRIVILEGED_FUNCTION; - -/* - * An active timer has reached its expire time. Reload the timer if it is an - * auto reload timer, then call its callback. - */ -static void prvProcessExpiredTimer( const TickType_t xNextExpireTime, const TickType_t xTimeNow ) PRIVILEGED_FUNCTION; - -/* - * The tick count has overflowed. Switch the timer lists after ensuring the - * current timer list does not still reference some timers. - */ -static void prvSwitchTimerLists( void ) PRIVILEGED_FUNCTION; - -/* - * Obtain the current tick count, setting *pxTimerListsWereSwitched to pdTRUE - * if a tick count overflow occurred since prvSampleTimeNow() was last called. - */ -static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched ) PRIVILEGED_FUNCTION; - -/* - * If the timer list contains any active timers then return the expire time of - * the timer that will expire first and set *pxListWasEmpty to false. If the - * timer list does not contain any timers then return 0 and set *pxListWasEmpty - * to pdTRUE. - */ -static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty ) PRIVILEGED_FUNCTION; - -/* - * If a timer has expired, process it. Otherwise, block the timer service task - * until either a timer does expire or a command is received. - */ -static void prvProcessTimerOrBlockTask( const TickType_t xNextExpireTime, BaseType_t xListWasEmpty ) PRIVILEGED_FUNCTION; - -/* - * Called after a Timer_t structure has been allocated either statically or - * dynamically to fill in the structure's members. - */ -static void prvInitialiseNewTimer( const char * const pcTimerName, - const TickType_t xTimerPeriodInTicks, - const UBaseType_t uxAutoReload, - void * const pvTimerID, - TimerCallbackFunction_t pxCallbackFunction, - Timer_t *pxNewTimer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -/*-----------------------------------------------------------*/ - -BaseType_t xTimerCreateTimerTask( void ) -{ -BaseType_t xReturn = pdFAIL; - - /* This function is called when the scheduler is started if - configUSE_TIMERS is set to 1. Check that the infrastructure used by the - timer service task has been created/initialised. If timers have already - been created then the initialisation will already have been performed. */ - prvCheckForValidListAndQueue(); - - if( xTimerQueue != NULL ) - { - #if( configSUPPORT_STATIC_ALLOCATION == 1 ) - { - StaticTask_t *pxTimerTaskTCBBuffer = NULL; - StackType_t *pxTimerTaskStackBuffer = NULL; - uint32_t ulTimerTaskStackSize; - - vApplicationGetTimerTaskMemory( &pxTimerTaskTCBBuffer, &pxTimerTaskStackBuffer, &ulTimerTaskStackSize ); - xTimerTaskHandle = xTaskCreateStatic( prvTimerTask, - "Tmr Svc", - ulTimerTaskStackSize, - NULL, - ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT, - pxTimerTaskStackBuffer, - pxTimerTaskTCBBuffer ); - - if( xTimerTaskHandle != NULL ) - { - xReturn = pdPASS; - } - } - #else - { - xReturn = xTaskCreate( prvTimerTask, - "Tmr Svc", - configTIMER_TASK_STACK_DEPTH, - NULL, - ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT, - &xTimerTaskHandle ); - } - #endif /* configSUPPORT_STATIC_ALLOCATION */ - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - configASSERT( xReturn ); - return xReturn; -} -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - - TimerHandle_t xTimerCreate( const char * const pcTimerName, - const TickType_t xTimerPeriodInTicks, - const UBaseType_t uxAutoReload, - void * const pvTimerID, - TimerCallbackFunction_t pxCallbackFunction ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - { - Timer_t *pxNewTimer; - - pxNewTimer = ( Timer_t * ) pvPortMalloc( sizeof( Timer_t ) ); - - if( pxNewTimer != NULL ) - { - prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer ); - - #if( configSUPPORT_STATIC_ALLOCATION == 1 ) - { - /* Timers can be created statically or dynamically, so note this - timer was created dynamically in case the timer is later - deleted. */ - pxNewTimer->ucStaticallyAllocated = pdFALSE; - } - #endif /* configSUPPORT_STATIC_ALLOCATION */ - } - - return pxNewTimer; - } - -#endif /* configSUPPORT_STATIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - - TimerHandle_t xTimerCreateStatic( const char * const pcTimerName, - const TickType_t xTimerPeriodInTicks, - const UBaseType_t uxAutoReload, - void * const pvTimerID, - TimerCallbackFunction_t pxCallbackFunction, - StaticTimer_t *pxTimerBuffer ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - { - Timer_t *pxNewTimer; - - #if( configASSERT_DEFINED == 1 ) - { - /* Sanity check that the size of the structure used to declare a - variable of type StaticTimer_t equals the size of the real timer - structures. */ - volatile size_t xSize = sizeof( StaticTimer_t ); - configASSERT( xSize == sizeof( Timer_t ) ); - } - #endif /* configASSERT_DEFINED */ - - /* A pointer to a StaticTimer_t structure MUST be provided, use it. */ - configASSERT( pxTimerBuffer ); - pxNewTimer = ( Timer_t * ) pxTimerBuffer; /*lint !e740 Unusual cast is ok as the structures are designed to have the same alignment, and the size is checked by an assert. */ - - if( pxNewTimer != NULL ) - { - prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer ); - - #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - { - /* Timers can be created statically or dynamically so note this - timer was created statically in case it is later deleted. */ - pxNewTimer->ucStaticallyAllocated = pdTRUE; - } - #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ - } - - return pxNewTimer; - } - -#endif /* configSUPPORT_STATIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -static void prvInitialiseNewTimer( const char * const pcTimerName, - const TickType_t xTimerPeriodInTicks, - const UBaseType_t uxAutoReload, - void * const pvTimerID, - TimerCallbackFunction_t pxCallbackFunction, - Timer_t *pxNewTimer ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -{ - /* 0 is not a valid value for xTimerPeriodInTicks. */ - configASSERT( ( xTimerPeriodInTicks > 0 ) ); - - if( pxNewTimer != NULL ) - { - /* Ensure the infrastructure used by the timer service task has been - created/initialised. */ - prvCheckForValidListAndQueue(); - - /* Initialise the timer structure members using the function - parameters. */ - pxNewTimer->pcTimerName = pcTimerName; - pxNewTimer->xTimerPeriodInTicks = xTimerPeriodInTicks; - pxNewTimer->uxAutoReload = uxAutoReload; - pxNewTimer->pvTimerID = pvTimerID; - pxNewTimer->pxCallbackFunction = pxCallbackFunction; - vListInitialiseItem( &( pxNewTimer->xTimerListItem ) ); - traceTIMER_CREATE( pxNewTimer ); - } -} -/*-----------------------------------------------------------*/ - -BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait ) -{ -BaseType_t xReturn = pdFAIL; -DaemonTaskMessage_t xMessage; - - configASSERT( xTimer ); - - /* Send a message to the timer service task to perform a particular action - on a particular timer definition. */ - if( xTimerQueue != NULL ) - { - /* Send a command to the timer service task to start the xTimer timer. */ - xMessage.xMessageID = xCommandID; - xMessage.u.xTimerParameters.xMessageValue = xOptionalValue; - xMessage.u.xTimerParameters.pxTimer = ( Timer_t * ) xTimer; - - if( xCommandID < tmrFIRST_FROM_ISR_COMMAND ) - { - if( xTaskGetSchedulerState() == taskSCHEDULER_RUNNING ) - { - xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait ); - } - else - { - xReturn = xQueueSendToBack( xTimerQueue, &xMessage, tmrNO_DELAY ); - } - } - else - { - xReturn = xQueueSendToBackFromISR( xTimerQueue, &xMessage, pxHigherPriorityTaskWoken ); - } - - traceTIMER_COMMAND_SEND( xTimer, xCommandID, xOptionalValue, xReturn ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - return xReturn; -} -/*-----------------------------------------------------------*/ - -TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) -{ - /* If xTimerGetTimerDaemonTaskHandle() is called before the scheduler has been - started, then xTimerTaskHandle will be NULL. */ - configASSERT( ( xTimerTaskHandle != NULL ) ); - return xTimerTaskHandle; -} -/*-----------------------------------------------------------*/ - -TickType_t xTimerGetPeriod( TimerHandle_t xTimer ) -{ -Timer_t *pxTimer = ( Timer_t * ) xTimer; - - configASSERT( xTimer ); - return pxTimer->xTimerPeriodInTicks; -} -/*-----------------------------------------------------------*/ - -TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ) -{ -Timer_t * pxTimer = ( Timer_t * ) xTimer; -TickType_t xReturn; - - configASSERT( xTimer ); - xReturn = listGET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ) ); - return xReturn; -} -/*-----------------------------------------------------------*/ - -const char * pcTimerGetName( TimerHandle_t xTimer ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -{ -Timer_t *pxTimer = ( Timer_t * ) xTimer; - - configASSERT( xTimer ); - return pxTimer->pcTimerName; -} -/*-----------------------------------------------------------*/ - -static void prvProcessExpiredTimer( const TickType_t xNextExpireTime, const TickType_t xTimeNow ) -{ -BaseType_t xResult; -Timer_t * const pxTimer = ( Timer_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTimerList ); - - /* Remove the timer from the list of active timers. A check has already - been performed to ensure the list is not empty. */ - ( void ) uxListRemove( &( pxTimer->xTimerListItem ) ); - traceTIMER_EXPIRED( pxTimer ); - - /* If the timer is an auto reload timer then calculate the next - expiry time and re-insert the timer in the list of active timers. */ - if( pxTimer->uxAutoReload == ( UBaseType_t ) pdTRUE ) - { - /* The timer is inserted into a list using a time relative to anything - other than the current time. It will therefore be inserted into the - correct list relative to the time this task thinks it is now. */ - if( prvInsertTimerInActiveList( pxTimer, ( xNextExpireTime + pxTimer->xTimerPeriodInTicks ), xTimeNow, xNextExpireTime ) != pdFALSE ) - { - /* The timer expired before it was added to the active timer - list. Reload it now. */ - xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY ); - configASSERT( xResult ); - ( void ) xResult; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Call the timer callback. */ - pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer ); -} -/*-----------------------------------------------------------*/ - -static void prvTimerTask( void *pvParameters ) -{ -TickType_t xNextExpireTime; -BaseType_t xListWasEmpty; - - /* Just to avoid compiler warnings. */ - ( void ) pvParameters; - - #if( configUSE_DAEMON_TASK_STARTUP_HOOK == 1 ) - { - extern void vApplicationDaemonTaskStartupHook( void ); - - /* Allow the application writer to execute some code in the context of - this task at the point the task starts executing. This is useful if the - application includes initialisation code that would benefit from - executing after the scheduler has been started. */ - vApplicationDaemonTaskStartupHook(); - } - #endif /* configUSE_DAEMON_TASK_STARTUP_HOOK */ - - for( ;; ) - { - /* Query the timers list to see if it contains any timers, and if so, - obtain the time at which the next timer will expire. */ - xNextExpireTime = prvGetNextExpireTime( &xListWasEmpty ); - - /* If a timer has expired, process it. Otherwise, block this task - until either a timer does expire, or a command is received. */ - prvProcessTimerOrBlockTask( xNextExpireTime, xListWasEmpty ); - - /* Empty the command queue. */ - prvProcessReceivedCommands(); - } -} -/*-----------------------------------------------------------*/ - -static void prvProcessTimerOrBlockTask( const TickType_t xNextExpireTime, BaseType_t xListWasEmpty ) -{ -TickType_t xTimeNow; -BaseType_t xTimerListsWereSwitched; - - vTaskSuspendAll(); - { - /* Obtain the time now to make an assessment as to whether the timer - has expired or not. If obtaining the time causes the lists to switch - then don't process this timer as any timers that remained in the list - when the lists were switched will have been processed within the - prvSampleTimeNow() function. */ - xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched ); - if( xTimerListsWereSwitched == pdFALSE ) - { - /* The tick count has not overflowed, has the timer expired? */ - if( ( xListWasEmpty == pdFALSE ) && ( xNextExpireTime <= xTimeNow ) ) - { - ( void ) xTaskResumeAll(); - prvProcessExpiredTimer( xNextExpireTime, xTimeNow ); - } - else - { - /* The tick count has not overflowed, and the next expire - time has not been reached yet. This task should therefore - block to wait for the next expire time or a command to be - received - whichever comes first. The following line cannot - be reached unless xNextExpireTime > xTimeNow, except in the - case when the current timer list is empty. */ - if( xListWasEmpty != pdFALSE ) - { - /* The current timer list is empty - is the overflow list - also empty? */ - xListWasEmpty = listLIST_IS_EMPTY( pxOverflowTimerList ); - } - - vQueueWaitForMessageRestricted( xTimerQueue, ( xNextExpireTime - xTimeNow ), xListWasEmpty ); - - if( xTaskResumeAll() == pdFALSE ) - { - /* Yield to wait for either a command to arrive, or the - block time to expire. If a command arrived between the - critical section being exited and this yield then the yield - will not cause the task to block. */ - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - else - { - ( void ) xTaskResumeAll(); - } - } -} -/*-----------------------------------------------------------*/ - -static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty ) -{ -TickType_t xNextExpireTime; - - /* Timers are listed in expiry time order, with the head of the list - referencing the task that will expire first. Obtain the time at which - the timer with the nearest expiry time will expire. If there are no - active timers then just set the next expire time to 0. That will cause - this task to unblock when the tick count overflows, at which point the - timer lists will be switched and the next expiry time can be - re-assessed. */ - *pxListWasEmpty = listLIST_IS_EMPTY( pxCurrentTimerList ); - if( *pxListWasEmpty == pdFALSE ) - { - xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList ); - } - else - { - /* Ensure the task unblocks when the tick count rolls over. */ - xNextExpireTime = ( TickType_t ) 0U; - } - - return xNextExpireTime; -} -/*-----------------------------------------------------------*/ - -static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched ) -{ -TickType_t xTimeNow; -PRIVILEGED_DATA static TickType_t xLastTime = ( TickType_t ) 0U; /*lint !e956 Variable is only accessible to one task. */ - - xTimeNow = xTaskGetTickCount(); - - if( xTimeNow < xLastTime ) - { - prvSwitchTimerLists(); - *pxTimerListsWereSwitched = pdTRUE; - } - else - { - *pxTimerListsWereSwitched = pdFALSE; - } - - xLastTime = xTimeNow; - - return xTimeNow; -} -/*-----------------------------------------------------------*/ - -static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer, const TickType_t xNextExpiryTime, const TickType_t xTimeNow, const TickType_t xCommandTime ) -{ -BaseType_t xProcessTimerNow = pdFALSE; - - listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xNextExpiryTime ); - listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer ); - - if( xNextExpiryTime <= xTimeNow ) - { - /* Has the expiry time elapsed between the command to start/reset a - timer was issued, and the time the command was processed? */ - if( ( ( TickType_t ) ( xTimeNow - xCommandTime ) ) >= pxTimer->xTimerPeriodInTicks ) /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - { - /* The time between a command being issued and the command being - processed actually exceeds the timers period. */ - xProcessTimerNow = pdTRUE; - } - else - { - vListInsert( pxOverflowTimerList, &( pxTimer->xTimerListItem ) ); - } - } - else - { - if( ( xTimeNow < xCommandTime ) && ( xNextExpiryTime >= xCommandTime ) ) - { - /* If, since the command was issued, the tick count has overflowed - but the expiry time has not, then the timer must have already passed - its expiry time and should be processed immediately. */ - xProcessTimerNow = pdTRUE; - } - else - { - vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) ); - } - } - - return xProcessTimerNow; -} -/*-----------------------------------------------------------*/ - -static void prvProcessReceivedCommands( void ) -{ -DaemonTaskMessage_t xMessage; -Timer_t *pxTimer; -BaseType_t xTimerListsWereSwitched, xResult; -TickType_t xTimeNow; - - while( xQueueReceive( xTimerQueue, &xMessage, tmrNO_DELAY ) != pdFAIL ) /*lint !e603 xMessage does not have to be initialised as it is passed out, not in, and it is not used unless xQueueReceive() returns pdTRUE. */ - { - #if ( INCLUDE_xTimerPendFunctionCall == 1 ) - { - /* Negative commands are pended function calls rather than timer - commands. */ - if( xMessage.xMessageID < ( BaseType_t ) 0 ) - { - const CallbackParameters_t * const pxCallback = &( xMessage.u.xCallbackParameters ); - - /* The timer uses the xCallbackParameters member to request a - callback be executed. Check the callback is not NULL. */ - configASSERT( pxCallback ); - - /* Call the function. */ - pxCallback->pxCallbackFunction( pxCallback->pvParameter1, pxCallback->ulParameter2 ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* INCLUDE_xTimerPendFunctionCall */ - - /* Commands that are positive are timer commands rather than pended - function calls. */ - if( xMessage.xMessageID >= ( BaseType_t ) 0 ) - { - /* The messages uses the xTimerParameters member to work on a - software timer. */ - pxTimer = xMessage.u.xTimerParameters.pxTimer; - - if( listIS_CONTAINED_WITHIN( NULL, &( pxTimer->xTimerListItem ) ) == pdFALSE ) - { - /* The timer is in a list, remove it. */ - ( void ) uxListRemove( &( pxTimer->xTimerListItem ) ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - traceTIMER_COMMAND_RECEIVED( pxTimer, xMessage.xMessageID, xMessage.u.xTimerParameters.xMessageValue ); - - /* In this case the xTimerListsWereSwitched parameter is not used, but - it must be present in the function call. prvSampleTimeNow() must be - called after the message is received from xTimerQueue so there is no - possibility of a higher priority task adding a message to the message - queue with a time that is ahead of the timer daemon task (because it - pre-empted the timer daemon task after the xTimeNow value was set). */ - xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched ); - - switch( xMessage.xMessageID ) - { - case tmrCOMMAND_START : - case tmrCOMMAND_START_FROM_ISR : - case tmrCOMMAND_RESET : - case tmrCOMMAND_RESET_FROM_ISR : - case tmrCOMMAND_START_DONT_TRACE : - /* Start or restart a timer. */ - if( prvInsertTimerInActiveList( pxTimer, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, xTimeNow, xMessage.u.xTimerParameters.xMessageValue ) != pdFALSE ) - { - /* The timer expired before it was added to the active - timer list. Process it now. */ - pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer ); - traceTIMER_EXPIRED( pxTimer ); - - if( pxTimer->uxAutoReload == ( UBaseType_t ) pdTRUE ) - { - xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, NULL, tmrNO_DELAY ); - configASSERT( xResult ); - ( void ) xResult; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - break; - - case tmrCOMMAND_STOP : - case tmrCOMMAND_STOP_FROM_ISR : - /* The timer has already been removed from the active list. - There is nothing to do here. */ - break; - - case tmrCOMMAND_CHANGE_PERIOD : - case tmrCOMMAND_CHANGE_PERIOD_FROM_ISR : - pxTimer->xTimerPeriodInTicks = xMessage.u.xTimerParameters.xMessageValue; - configASSERT( ( pxTimer->xTimerPeriodInTicks > 0 ) ); - - /* The new period does not really have a reference, and can - be longer or shorter than the old one. The command time is - therefore set to the current time, and as the period cannot - be zero the next expiry time can only be in the future, - meaning (unlike for the xTimerStart() case above) there is - no fail case that needs to be handled here. */ - ( void ) prvInsertTimerInActiveList( pxTimer, ( xTimeNow + pxTimer->xTimerPeriodInTicks ), xTimeNow, xTimeNow ); - break; - - case tmrCOMMAND_DELETE : - /* The timer has already been removed from the active list, - just free up the memory if the memory was dynamically - allocated. */ - #if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) ) - { - /* The timer can only have been allocated dynamically - - free it again. */ - vPortFree( pxTimer ); - } - #elif( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - { - /* The timer could have been allocated statically or - dynamically, so check before attempting to free the - memory. */ - if( pxTimer->ucStaticallyAllocated == ( uint8_t ) pdFALSE ) - { - vPortFree( pxTimer ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ - break; - - default : - /* Don't expect to get here. */ - break; - } - } - } -} -/*-----------------------------------------------------------*/ - -static void prvSwitchTimerLists( void ) -{ -TickType_t xNextExpireTime, xReloadTime; -List_t *pxTemp; -Timer_t *pxTimer; -BaseType_t xResult; - - /* The tick count has overflowed. The timer lists must be switched. - If there are any timers still referenced from the current timer list - then they must have expired and should be processed before the lists - are switched. */ - while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE ) - { - xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList ); - - /* Remove the timer from the list. */ - pxTimer = ( Timer_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTimerList ); - ( void ) uxListRemove( &( pxTimer->xTimerListItem ) ); - traceTIMER_EXPIRED( pxTimer ); - - /* Execute its callback, then send a command to restart the timer if - it is an auto-reload timer. It cannot be restarted here as the lists - have not yet been switched. */ - pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer ); - - if( pxTimer->uxAutoReload == ( UBaseType_t ) pdTRUE ) - { - /* Calculate the reload value, and if the reload value results in - the timer going into the same timer list then it has already expired - and the timer should be re-inserted into the current list so it is - processed again within this loop. Otherwise a command should be sent - to restart the timer to ensure it is only inserted into a list after - the lists have been swapped. */ - xReloadTime = ( xNextExpireTime + pxTimer->xTimerPeriodInTicks ); - if( xReloadTime > xNextExpireTime ) - { - listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xReloadTime ); - listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer ); - vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) ); - } - else - { - xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY ); - configASSERT( xResult ); - ( void ) xResult; - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - pxTemp = pxCurrentTimerList; - pxCurrentTimerList = pxOverflowTimerList; - pxOverflowTimerList = pxTemp; -} -/*-----------------------------------------------------------*/ - -static void prvCheckForValidListAndQueue( void ) -{ - /* Check that the list from which active timers are referenced, and the - queue used to communicate with the timer service, have been - initialised. */ - taskENTER_CRITICAL(); - { - if( xTimerQueue == NULL ) - { - vListInitialise( &xActiveTimerList1 ); - vListInitialise( &xActiveTimerList2 ); - pxCurrentTimerList = &xActiveTimerList1; - pxOverflowTimerList = &xActiveTimerList2; - - #if( configSUPPORT_STATIC_ALLOCATION == 1 ) - { - /* The timer queue is allocated statically in case - configSUPPORT_DYNAMIC_ALLOCATION is 0. */ - static StaticQueue_t xStaticTimerQueue; - static uint8_t ucStaticTimerQueueStorage[ configTIMER_QUEUE_LENGTH * sizeof( DaemonTaskMessage_t ) ]; - - xTimerQueue = xQueueCreateStatic( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, sizeof( DaemonTaskMessage_t ), &( ucStaticTimerQueueStorage[ 0 ] ), &xStaticTimerQueue ); - } - #else - { - xTimerQueue = xQueueCreate( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, sizeof( DaemonTaskMessage_t ) ); - } - #endif - - #if ( configQUEUE_REGISTRY_SIZE > 0 ) - { - if( xTimerQueue != NULL ) - { - vQueueAddToRegistry( xTimerQueue, "TmrQ" ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configQUEUE_REGISTRY_SIZE */ - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); -} -/*-----------------------------------------------------------*/ - -BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ) -{ -BaseType_t xTimerIsInActiveList; -Timer_t *pxTimer = ( Timer_t * ) xTimer; - - configASSERT( xTimer ); - - /* Is the timer in the list of active timers? */ - taskENTER_CRITICAL(); - { - /* Checking to see if it is in the NULL list in effect checks to see if - it is referenced from either the current or the overflow timer lists in - one go, but the logic has to be reversed, hence the '!'. */ - xTimerIsInActiveList = ( BaseType_t ) !( listIS_CONTAINED_WITHIN( NULL, &( pxTimer->xTimerListItem ) ) ); - } - taskEXIT_CRITICAL(); - - return xTimerIsInActiveList; -} /*lint !e818 Can't be pointer to const due to the typedef. */ -/*-----------------------------------------------------------*/ - -void *pvTimerGetTimerID( const TimerHandle_t xTimer ) -{ -Timer_t * const pxTimer = ( Timer_t * ) xTimer; -void *pvReturn; - - configASSERT( xTimer ); - - taskENTER_CRITICAL(); - { - pvReturn = pxTimer->pvTimerID; - } - taskEXIT_CRITICAL(); - - return pvReturn; -} -/*-----------------------------------------------------------*/ - -void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ) -{ -Timer_t * const pxTimer = ( Timer_t * ) xTimer; - - configASSERT( xTimer ); - - taskENTER_CRITICAL(); - { - pxTimer->pvTimerID = pvNewID; - } - taskEXIT_CRITICAL(); -} -/*-----------------------------------------------------------*/ - -#if( INCLUDE_xTimerPendFunctionCall == 1 ) - - BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, BaseType_t *pxHigherPriorityTaskWoken ) - { - DaemonTaskMessage_t xMessage; - BaseType_t xReturn; - - /* Complete the message with the function parameters and post it to the - daemon task. */ - xMessage.xMessageID = tmrCOMMAND_EXECUTE_CALLBACK_FROM_ISR; - xMessage.u.xCallbackParameters.pxCallbackFunction = xFunctionToPend; - xMessage.u.xCallbackParameters.pvParameter1 = pvParameter1; - xMessage.u.xCallbackParameters.ulParameter2 = ulParameter2; - - xReturn = xQueueSendFromISR( xTimerQueue, &xMessage, pxHigherPriorityTaskWoken ); - - tracePEND_FUNC_CALL_FROM_ISR( xFunctionToPend, pvParameter1, ulParameter2, xReturn ); - - return xReturn; - } - -#endif /* INCLUDE_xTimerPendFunctionCall */ -/*-----------------------------------------------------------*/ - -#if( INCLUDE_xTimerPendFunctionCall == 1 ) - - BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait ) - { - DaemonTaskMessage_t xMessage; - BaseType_t xReturn; - - /* This function can only be called after a timer has been created or - after the scheduler has been started because, until then, the timer - queue does not exist. */ - configASSERT( xTimerQueue ); - - /* Complete the message with the function parameters and post it to the - daemon task. */ - xMessage.xMessageID = tmrCOMMAND_EXECUTE_CALLBACK; - xMessage.u.xCallbackParameters.pxCallbackFunction = xFunctionToPend; - xMessage.u.xCallbackParameters.pvParameter1 = pvParameter1; - xMessage.u.xCallbackParameters.ulParameter2 = ulParameter2; - - xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait ); - - tracePEND_FUNC_CALL( xFunctionToPend, pvParameter1, ulParameter2, xReturn ); - - return xReturn; - } - -#endif /* INCLUDE_xTimerPendFunctionCall */ -/*-----------------------------------------------------------*/ - -/* This entire source file will be skipped if the application is not configured -to include software timer functionality. If you want to include software timer -functionality then ensure configUSE_TIMERS is set to 1 in FreeRTOSConfig.h. */ -#endif /* configUSE_TIMERS == 1 */ - - - diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos_pmu.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos_pmu.h deleted file mode 100644 index be9b067..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos_pmu.h +++ /dev/null @@ -1,155 +0,0 @@ -#ifndef __FREERTOS_PMU_H_ -#define __FREERTOS_PMU_H_ - -#ifdef CONFIG_PLATFORM_8195A -#include "sleep_ex_api.h" -#endif - -#ifndef BIT -#define BIT(n) (1< -#include -#include -#include -//#include -#include -#include -#include -#include -#include -/********************* os depended utilities ********************/ - -#ifndef USE_MUTEX_FOR_SPINLOCK -#define USE_MUTEX_FOR_SPINLOCK 1 -#endif - -//----- ------------------------------------------------------------------ -// Misc Function -//----- ------------------------------------------------------------------ - -void save_and_cli() -{ - taskENTER_CRITICAL(); -} - -void restore_flags() -{ - taskEXIT_CRITICAL(); -} - -void cli() -{ - taskDISABLE_INTERRUPTS(); -} - -/* Not needed on 64bit architectures */ -static unsigned int __div64_32(uint64_t *n, unsigned int base) -{ - uint64_t rem = *n; - uint64_t b = base; - uint64_t res, d = 1; - unsigned int high = rem >> 32; - - /* Reduce the thing a bit first */ - res = 0; - if (high >= base) { - high /= base; - res = (uint64_t) high << 32; - rem -= (uint64_t) (high * base) << 32; - } - - while ((uint64_t)b > 0 && b < rem) { - b = b+b; - d = d+d; - } - - do { - if (rem >= b) { - rem -= b; - res += d; - } - b >>= 1; - d >>= 1; - } while (d); - - *n = res; - return rem; -} - -/********************* os depended service ********************/ - -uint8_t* _freertos_malloc(uint32_t sz) -{ - return pvPortMalloc(sz); -} - -uint8_t* _freertos_zmalloc(uint32_t sz) -{ - uint8_t *pbuf = _freertos_malloc(sz); - - if (pbuf != NULL) - memset(pbuf, 0, sz); - - return pbuf; -} - -void _freertos_mfree(uint8_t *pbuf, uint32_t sz) -{ - vPortFree(pbuf); -} - -static void _freertos_memcpy(void* dst, void* src, uint32_t sz) -{ - memcpy(dst, src, sz); -} - -static int _freertos_memcmp(void *dst, void *src, uint32_t sz) -{ -//under Linux/GNU/GLibc, the return value of memcmp for two same mem. chunk is 0 - if (!(memcmp(dst, src, sz))) - return 1; - - return 0; -} - -static void _freertos_memset(void *pbuf, int c, uint32_t sz) -{ - memset(pbuf, c, sz); -} - -static void _freertos_init_sema(_sema *sema, int init_val) -{ - *sema = xSemaphoreCreateCounting(0xffffffff, init_val); //Set max count 0xffffffff -} - -static void _freertos_free_sema(_sema *sema) -{ - if(*sema != NULL) - vSemaphoreDelete(*sema); - - *sema = NULL; -} - -static void _freertos_up_sema(_sema *sema) -{ - xSemaphoreGive(*sema); -} - -static void _freertos_up_sema_from_isr(_sema *sema) -{ - portBASE_TYPE taskWoken = pdFALSE; - xSemaphoreGiveFromISR(*sema, &taskWoken); - portEND_SWITCHING_ISR(taskWoken); -} - -static uint32_t _freertos_down_sema(_sema *sema, uint32_t timeout) -{ - if(timeout == RTW_MAX_DELAY) { - timeout = portMAX_DELAY; - } else { - timeout = rtw_ms_to_systime(timeout); - } - - if(xSemaphoreTake(*sema, timeout) != pdTRUE) { - return pdFALSE; - } - - return pdTRUE; -} - -static void _freertos_mutex_init(_mutex *pmutex) -{ - *pmutex = xSemaphoreCreateMutex(); -} - -static void _freertos_mutex_free(_mutex *pmutex) -{ - if(*pmutex != NULL) - vSemaphoreDelete(*pmutex); - - *pmutex = NULL; -} - -static void _freertos_mutex_get(_lock *plock) -{ - while(xSemaphoreTake(*plock, 60 * 1000 / portTICK_RATE_MS) != pdTRUE) - DBG_ERR("[%s] %s(%p) failed, retry\n", pcTaskGetTaskName(NULL), __FUNCTION__, plock); -} - -static int _freertos_mutex_get_timeout(_lock *plock, uint32_t timeout_ms) -{ - if(xSemaphoreTake(*plock, timeout_ms / portTICK_RATE_MS) != pdTRUE){ - DBG_ERR("[%s] %s(%p) failed, retry\n", pcTaskGetTaskName(NULL), __FUNCTION__, plock); - return -1; - } - return 0; -} - -static void _freertos_mutex_put(_lock *plock) -{ - xSemaphoreGive(*plock); -} - -static void _freertos_enter_critical(_lock *plock, _irqL *pirqL) -{ - taskENTER_CRITICAL(); -} - -static void _freertos_exit_critical(_lock *plock, _irqL *pirqL) -{ - taskEXIT_CRITICAL(); -} - -static uint32_t uxSavedInterruptStatus = 0; -static void _freertos_enter_critical_from_isr(_lock *plock, _irqL *pirqL) -{ - portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - - uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); -} - -static void _freertos_exit_critical_from_isr(_lock *plock, _irqL *pirqL) -{ - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); -} - -static int _freertos_enter_critical_mutex(_mutex *pmutex, _irqL *pirqL) -{ - int ret = 0; - - while(xSemaphoreTake(*pmutex, 60 * 1000 / portTICK_RATE_MS) != pdTRUE) - printf("\n\r[%s] %s(%p) failed, retry\n", pcTaskGetTaskName(NULL), __FUNCTION__, pmutex); - - return ret; -} - -static void _freertos_exit_critical_mutex(_mutex *pmutex, _irqL *pirqL) -{ - xSemaphoreGive(*pmutex); -} - -static void _freertos_spinlock_init(_lock *plock) -{ -#if USE_MUTEX_FOR_SPINLOCK - *plock = xSemaphoreCreateMutex(); -#endif -} - -static void _freertos_spinlock_free(_lock *plock) -{ -#if USE_MUTEX_FOR_SPINLOCK - if(*plock != NULL) - vSemaphoreDelete(*plock); - - *plock = NULL; -#endif -} - -static void _freertos_spinlock(_lock *plock) -{ -#if USE_MUTEX_FOR_SPINLOCK - while(xSemaphoreTake(*plock, 60 * 1000 / portTICK_RATE_MS) != pdTRUE) - DBG_ERR("[%s] %s(%p) failed, retry\n", pcTaskGetTaskName(NULL), __FUNCTION__, plock); -#endif -} - -static void _freertos_spinunlock(_lock *plock) -{ -#if USE_MUTEX_FOR_SPINLOCK - xSemaphoreGive(*plock); -#endif -} - -static void _freertos_spinlock_irqsave(_lock *plock, _irqL *irqL) -{ - taskENTER_CRITICAL(); -#if USE_MUTEX_FOR_SPINLOCK - while(xSemaphoreTake(*plock, 60 * 1000 / portTICK_RATE_MS) != pdTRUE) - DBG_ERR("[%s] %s(%p) failed, retry\n", pcTaskGetTaskName(NULL), __FUNCTION__, plock); -#endif -} - -static void _freertos_spinunlock_irqsave(_lock *plock, _irqL *irqL) -{ -#if USE_MUTEX_FOR_SPINLOCK - xSemaphoreGive(*plock); -#endif - taskEXIT_CRITICAL(); -} - -static int _freertos_init_xqueue( _xqueue* queue, const char* name, uint32_t message_size, uint32_t number_of_messages ) -{ - if ( ( *queue = xQueueCreate( number_of_messages, message_size ) ) == NULL ) - { - return -1; - } - - return 0; -} - -static int _freertos_push_to_xqueue( _xqueue* queue, void* message, uint32_t timeout_ms ) -{ - if(timeout_ms == RTW_MAX_DELAY) { - timeout_ms = portMAX_DELAY; - } else { - timeout_ms = rtw_ms_to_systime(timeout_ms); - } - - if ( xQueueSendToBack( *queue, message, timeout_ms ) != pdPASS ) - { - return -1; - } - - return 0; -} - -static int _freertos_pop_from_xqueue( _xqueue* queue, void* message, uint32_t timeout_ms ) -{ - if(timeout_ms == RTW_WAIT_FOREVER) { - timeout_ms = portMAX_DELAY; - } else { - timeout_ms = rtw_ms_to_systime(timeout_ms); - } - - if ( xQueueReceive( *queue, message, timeout_ms ) != pdPASS ) - { - return -1; - } - - return 0; -} - -static int _freertos_deinit_xqueue( _xqueue* queue ) -{ - int result = 0; - - if( uxQueueMessagesWaiting( queue ) ) - { - result = -1; - } - vQueueDelete( *queue ); - return result; -} - -static uint32_t _freertos_get_current_time(void) -{ - return xTaskGetTickCount(); //The count of ticks since vTaskStartScheduler was called. -} - -static uint32_t _freertos_systime_to_ms(uint32_t systime) -{ - return systime * portTICK_RATE_MS; -} - -static uint32_t _freertos_systime_to_sec(uint32_t systime) -{ - return systime / configTICK_RATE_HZ; -} - -static uint32_t _freertos_ms_to_systime(uint32_t ms) -{ - return ms / portTICK_RATE_MS; -} - -static uint32_t _freertos_sec_to_systime(uint32_t sec) -{ - return sec * configTICK_RATE_HZ; -} - -static void _freertos_msleep_os(int ms) -{ -#if defined(CONFIG_PLATFORM_8195A) - vTaskDelay(ms / portTICK_RATE_MS); -#elif defined(CONFIG_PLATFORM_8711B) - if (pmu_yield_os_check()) { - vTaskDelay(ms / portTICK_RATE_MS); - } else { - DelayMs(ms); - } -#endif -} - -extern void wait_us(int us); // До 2.147483648 секунды! - -static void _freertos_usleep_os(int us) -{ -#if defined(STM32F2XX) || defined(STM32F4XX) || defined(STM32F10X_XL) - // FreeRTOS does not provide us level delay. Use busy wait - WLAN_BSP_UsLoop(us); -#elif defined(CONFIG_PLATFORM_8195A) - wait_us(us); - //DBG_ERR("%s: Please Implement micro-second delay\n", __FUNCTION__); -#elif defined(CONFIG_PLATFORM_8711B) - DelayUs(us); -#else - #error "Please implement hardware dependent micro second level sleep here" -#endif -} - -static void _freertos_mdelay_os(int ms) -{ - vTaskDelay(ms / portTICK_RATE_MS); -} - -static void _freertos_udelay_os(int us) -{ -#if defined(STM32F2XX) || defined(STM32F4XX) || defined(STM32F10X_XL) - // FreeRTOS does not provide us level delay. Use busy wait - WLAN_BSP_UsLoop(us); -#elif defined(CONFIG_PLATFORM_8195A) -// HalDelayUs(us); - wait_us(us); -#elif defined(CONFIG_PLATFORM_8711B) - DelayUs(us); -#else - #error "Please implement hardware dependent micro second level sleep here" -#endif -} - -static void _freertos_yield_os(void) -{ -#if defined(CONFIG_PLATFORM_8195A) - taskYIELD(); -#elif defined(CONFIG_PLATFORM_8711B) - if (pmu_yield_os_check()) { - taskYIELD(); - } else { - DelayMs(1); - } -#endif -} - -static void _freertos_ATOMIC_SET(ATOMIC_T *v, int i) -{ - atomic_set(v,i); -} - -static int _freertos_ATOMIC_READ(ATOMIC_T *v) -{ - return atomic_read(v); -} - -static void _freertos_ATOMIC_ADD(ATOMIC_T *v, int i) -{ - save_and_cli(); - v->counter += i; - restore_flags(); -} - -static void _freertos_ATOMIC_SUB(ATOMIC_T *v, int i) -{ - save_and_cli(); - v->counter -= i; - restore_flags(); -} - -static void _freertos_ATOMIC_INC(ATOMIC_T *v) -{ - _freertos_ATOMIC_ADD(v, 1); -} - -static void _freertos_ATOMIC_DEC(ATOMIC_T *v) -{ - _freertos_ATOMIC_SUB(v, 1); -} - -static int _freertos_ATOMIC_ADD_RETURN(ATOMIC_T *v, int i) -{ - int temp; - - save_and_cli(); - temp = v->counter; - temp += i; - v->counter = temp; - restore_flags(); - - return temp; -} - -static int _freertos_ATOMIC_SUB_RETURN(ATOMIC_T *v, int i) -{ - int temp; - - save_and_cli(); - temp = v->counter; - temp -= i; - v->counter = temp; - restore_flags(); - - return temp; -} - -static int _freertos_ATOMIC_INC_RETURN(ATOMIC_T *v) -{ - return _freertos_ATOMIC_ADD_RETURN(v, 1); -} - -static int _freertos_ATOMIC_DEC_RETURN(ATOMIC_T *v) -{ - return _freertos_ATOMIC_SUB_RETURN(v, 1); -} - -static uint64_t _freertos_modular64(uint64_t n, uint64_t base) -{ - unsigned int __base = (base); - unsigned int __rem; - - if (((n) >> 32) == 0) { - __rem = (unsigned int)(n) % __base; - (n) = (unsigned int)(n) / __base; - } - else - __rem = __div64_32(&(n), __base); - - return __rem; -} - -/* Refer to ecos bsd tcpip codes */ -static int _freertos_arc4random(void) -{ - uint32_t res = xTaskGetTickCount(); - static unsigned long seed = 0xDEADB00B; - -#if CONFIG_PLATFORM_8711B - if(random_seed){ - seed = random_seed; - random_seed = 0; - } -#endif - - seed = ((seed & 0x007F00FF) << 7) ^ - ((seed & 0x0F80FF00) >> 8) ^ // be sure to stir those low bits - (res << 13) ^ (res >> 9); // using the clock too! - return (int)seed; -} - -static int _freertos_get_random_bytes(void *buf, size_t len) -{ -#if 1 //becuase of 4-byte align, we use the follow code style. - unsigned int ranbuf; - unsigned int *lp; - int i, count; - count = len / sizeof(unsigned int); - lp = (unsigned int *) buf; - - for(i = 0; i < count; i ++) { - lp[i] = _freertos_arc4random(); - len -= sizeof(unsigned int); - } - - if(len > 0) { - ranbuf = _freertos_arc4random(); - _freertos_memcpy(&lp[i], &ranbuf, len); - } - return 0; -#else - unsigned long ranbuf, *lp; - lp = (unsigned long *)buf; - while (len > 0) { - ranbuf = _freertos_arc4random(); - *lp++ = ranbuf; //this op need the pointer is 4Byte-align! - len -= sizeof(ranbuf); - } - return 0; -#endif -} - -static uint32_t _freertos_GetFreeHeapSize(void) -{ - return (uint32_t)xPortGetFreeHeapSize(); -} - -//extern void *tcm_heap_malloc(int size); - -static int _freertos_create_task(struct task_struct *ptask, const char *name, - uint32_t stack_size, uint32_t priority, thread_func_t func, void *thctx) -{ - thread_func_t task_func = NULL; - void *task_ctx = NULL; - int ret = 0; - - ptask->task_name = name; - ptask->blocked = 0; - ptask->callback_running = 0; - - _freertos_init_sema(&ptask->wakeup_sema, 0); - _freertos_init_sema(&ptask->terminate_sema, 0); - //rtw_init_queue(&wq->work_queue); - - if(func){ - task_func = func; - task_ctx = thctx; - } - //else{ - // task_func = freertos_wq_thread_handler; - // task_ctx = wq; - //} - - priority += tskIDLE_PRIORITY + PRIORITIE_OFFSET; - - if(rtw_if_wifi_thread((char *)name) == 0){ - -#if CONFIG_USE_TCM_HEAP - void *stack_addr = tcm_heap_malloc(stack_size*sizeof(int)); - //void *stack_addr = rtw_malloc(stack_size*sizeof(int)); - if(stack_addr == NULL){ - DBG_INFO("Out of TCM heap in \"%s\" ", ptask->task_name); - } - ret = xTaskGenericCreate( - task_func, - (const char *)name, - stack_size, - task_ctx, - priority, - &ptask->task, - stack_addr, - NULL); -#else - ret = xTaskCreate( - task_func, - (const char *)name, - stack_size, - task_ctx, - priority, - &ptask->task); -#endif - } - else{ - ret = xTaskCreate( - task_func, - (const char *)name, - stack_size, - task_ctx, - priority, - &ptask->task); - - } - if(ret != pdPASS){ - DBG_ERR("Create Task \"%s\" Failed! ret=%d\n", ptask->task_name, ret); - } - - DBG_TRACE("Create Task \"%s\"\n", ptask->task_name); - return ret; -} - -static void _freertos_delete_task(struct task_struct *ptask) -{ - if (!ptask->task){ - DBG_ERR("_freertos_delete_task(): ptask is NULL!\n"); - return; - } - - ptask->blocked = 1; - - _freertos_up_sema(&ptask->wakeup_sema); - _freertos_down_sema(&ptask->terminate_sema, TIMER_MAX_DELAY); - - //rtw_deinit_queue(&wq->work_queue); - _freertos_free_sema(&ptask->wakeup_sema); - _freertos_free_sema(&ptask->terminate_sema); - - ptask->task = 0; - - DBG_TRACE("Delete Task \"%s\"\n", ptask->task_name); -} - -void _freertos_wakeup_task(struct task_struct *ptask) -{ - _freertos_up_sema(&ptask->wakeup_sema); -} - -static void _freertos_thread_enter(char *name) -{ - DBG_INFO("\n\rRTKTHREAD %s\n", name); -} - -static void _freertos_thread_exit(void) -{ - DBG_INFO("\n\rRTKTHREAD exit %s\n", __FUNCTION__); - vTaskDelete(NULL); -} - -_timerHandle _freertos_timerCreate( const signed char *pcTimerName, - osdepTickType xTimerPeriodInTicks, - uint32_t uxAutoReload, - void * pvTimerID, - TIMER_FUN pxCallbackFunction ) -{ - if(xTimerPeriodInTicks == TIMER_MAX_DELAY) { - xTimerPeriodInTicks = portMAX_DELAY; - } - return xTimerCreate((const char *)pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction); -} - -uint32_t _freertos_timerDelete( _timerHandle xTimer, - osdepTickType xBlockTime ) -{ - return (uint32_t)xTimerDelete(xTimer, xBlockTime); -} - -uint32_t _freertos_timerIsTimerActive( _timerHandle xTimer ) -{ - return (uint32_t)xTimerIsTimerActive(xTimer); -} - -uint32_t _freertos_timerStop( _timerHandle xTimer, - osdepTickType xBlockTime ) -{ - return (uint32_t)xTimerStop(xTimer, xBlockTime); -} - -uint32_t _freertos_timerChangePeriod( _timerHandle xTimer, - osdepTickType xNewPeriod, - osdepTickType xBlockTime ) -{ - if(xNewPeriod == 0) - xNewPeriod += 1; - return (uint32_t)xTimerChangePeriod(xTimer, xNewPeriod, xBlockTime); -} -void *_freertos_timerGetID( _timerHandle xTimer ){ - - return pvTimerGetTimerID(xTimer); -} - -uint32_t _freertos_timerStart( _timerHandle xTimer, - osdepTickType xBlockTime ) -{ - return (uint32_t)xTimerStart(xTimer, xBlockTime); -} - -uint32_t _freertos_timerStartFromISR( _timerHandle xTimer, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ) -{ - return (uint32_t)xTimerStartFromISR(xTimer, pxHigherPriorityTaskWoken); -} - -uint32_t _freertos_timerStopFromISR( _timerHandle xTimer, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ) -{ - return (uint32_t)xTimerStopFromISR(xTimer, pxHigherPriorityTaskWoken); -} - -uint32_t _freertos_timerResetFromISR( _timerHandle xTimer, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ) -{ - return (uint32_t)xTimerResetFromISR(xTimer, pxHigherPriorityTaskWoken); -} - -uint32_t _freertos_timerChangePeriodFromISR( _timerHandle xTimer, - osdepTickType xNewPeriod, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ) -{ - if(xNewPeriod == 0) - xNewPeriod += 1; - return (uint32_t)xTimerChangePeriodFromISR(xTimer, xNewPeriod, pxHigherPriorityTaskWoken); -} - -uint32_t _freertos_timerReset( _timerHandle xTimer, - osdepTickType xBlockTime ) -{ - return (uint32_t)xTimerReset(xTimer, xBlockTime); -} - -void _freertos_acquire_wakelock() -{ -#if defined(CONFIG_PLATFORM_8195A) - -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) - pmu_acquire_wakelock(PMU_WLAN_DEVICE); -#endif - -#elif defined(CONFIG_PLATFORM_8711B) - -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) - if (pmu_yield_os_check()) - pmu_acquire_wakelock(PMU_WLAN_DEVICE); -#endif - -#endif -} - -void _freertos_release_wakelock() -{ - -#if defined(CONFIG_PLATFORM_8195A) - -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) - pmu_release_wakelock(PMU_WLAN_DEVICE); -#endif - -#elif defined(CONFIG_PLATFORM_8711B) - -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) - if (pmu_yield_os_check()) - pmu_release_wakelock(PMU_WLAN_DEVICE); -#endif - -#endif -} - -void _freertos_wakelock_timeout(uint32_t timeout) -{ -#if defined(CONFIG_PLATFORM_8195A) - -#elif defined(CONFIG_PLATFORM_8711B) - if (pmu_yield_os_check()) - pmu_set_sysactive_time(PMU_WLAN_DEVICE, timeout); - else - DBG_INFO("can't aquire wake during suspend flow!!\n"); -#endif -} - -uint8_t _freertos_get_scheduler_state(void) -{ - uint8_t state = xTaskGetSchedulerState(); - switch(state){ - case taskSCHEDULER_NOT_STARTED: state = OS_SCHEDULER_NOT_STARTED; break; - case taskSCHEDULER_RUNNING: state = OS_SCHEDULER_RUNNING; break; - case taskSCHEDULER_SUSPENDED: state = OS_SCHEDULER_SUSPENDED; break; - } - return state; -} - - -const struct osdep_service_ops osdep_service = { - _freertos_malloc, //rtw_vmalloc - _freertos_zmalloc, //rtw_zvmalloc - _freertos_mfree, //rtw_vmfree - _freertos_malloc, //rtw_malloc - _freertos_zmalloc, //rtw_zmalloc - _freertos_mfree, //rtw_mfree - _freertos_memcpy, //rtw_memcpy - _freertos_memcmp, //rtw_memcmp - _freertos_memset, //rtw_memset - _freertos_init_sema, //rtw_init_sema - _freertos_free_sema, //rtw_free_sema - _freertos_up_sema, //rtw_up_sema - _freertos_up_sema_from_isr, //rtw_up_sema_from_isr - _freertos_down_sema, //rtw_down_sema - _freertos_mutex_init, //rtw_mutex_init - _freertos_mutex_free, //rtw_mutex_free - _freertos_mutex_get, //rtw_mutex_get - _freertos_mutex_get_timeout,//rtw_mutex_get_timeout - _freertos_mutex_put, //rtw_mutex_put - _freertos_enter_critical, //rtw_enter_critical - _freertos_exit_critical, //rtw_exit_critical - _freertos_enter_critical_from_isr, //rtw_enter_critical_from_isr - _freertos_exit_critical_from_isr, //rtw_exit_critical_from_isr - NULL, //rtw_enter_critical_bh - NULL, //rtw_exit_critical_bh - _freertos_enter_critical_mutex, //rtw_enter_critical_mutex - _freertos_exit_critical_mutex, //rtw_exit_critical_mutex - _freertos_spinlock_init, //rtw_spinlock_init - _freertos_spinlock_free, //rtw_spinlock_free - _freertos_spinlock, //rtw_spin_lock - _freertos_spinunlock, //rtw_spin_unlock - _freertos_spinlock_irqsave, //rtw_spinlock_irqsave - _freertos_spinunlock_irqsave, //rtw_spinunlock_irqsave - _freertos_init_xqueue, //rtw_init_xqueue - _freertos_push_to_xqueue, //rtw_push_to_xqueue - _freertos_pop_from_xqueue, //rtw_pop_from_xqueue - _freertos_deinit_xqueue, //rtw_deinit_xqueue - _freertos_get_current_time, //rtw_get_current_time - _freertos_systime_to_ms, //rtw_systime_to_ms - _freertos_systime_to_sec, //rtw_systime_to_sec - _freertos_ms_to_systime, //rtw_ms_to_systime - _freertos_sec_to_systime, //rtw_sec_to_systime - _freertos_msleep_os, //rtw_msleep_os - _freertos_usleep_os, //rtw_usleep_os - _freertos_mdelay_os, //rtw_mdelay_os - _freertos_udelay_os, //rtw_udelay_os - _freertos_yield_os, //rtw_yield_os - - _freertos_ATOMIC_SET, //ATOMIC_SET - _freertos_ATOMIC_READ, //ATOMIC_READ - _freertos_ATOMIC_ADD, //ATOMIC_ADD - _freertos_ATOMIC_SUB, //ATOMIC_SUB - _freertos_ATOMIC_INC, //ATOMIC_INC - _freertos_ATOMIC_DEC, //ATOMIC_DEC - _freertos_ATOMIC_ADD_RETURN, //ATOMIC_ADD_RETURN - _freertos_ATOMIC_SUB_RETURN, //ATOMIC_SUB_RETURN - _freertos_ATOMIC_INC_RETURN, //ATOMIC_INC_RETURN - _freertos_ATOMIC_DEC_RETURN, //ATOMIC_DEC_RETURN - - _freertos_modular64, //rtw_modular64 - _freertos_get_random_bytes, //rtw_get_random_bytes - _freertos_GetFreeHeapSize, //rtw_getFreeHeapSize - - _freertos_create_task, //rtw_create_task - _freertos_delete_task, //rtw_delete_task - _freertos_wakeup_task, //rtw_wakeup_task - - _freertos_thread_enter, //rtw_thread_enter - _freertos_thread_exit, //rtw_thread_exit - - _freertos_timerCreate, //rtw_timerCreate, - _freertos_timerDelete, //rtw_timerDelete, - _freertos_timerIsTimerActive, //rtw_timerIsTimerActive, - _freertos_timerStop, //rtw_timerStop, - _freertos_timerChangePeriod, //rtw_timerChangePeriod - _freertos_timerGetID, //rtw_timerGetID - _freertos_timerStart, //rtw_timerStart - _freertos_timerStartFromISR, //rtw_timerStartFromISR - _freertos_timerStopFromISR, //rtw_timerStopFromISR - _freertos_timerResetFromISR, //rtw_timerResetFromISR - _freertos_timerChangePeriodFromISR, //rtw_timerChangePeriodFromISR - _freertos_timerReset, //rtw_timerReset - - _freertos_acquire_wakelock, //rtw_acquire_wakelock - _freertos_release_wakelock, //rtw_release_wakelock - _freertos_wakelock_timeout, //rtw_wakelock_timeout - _freertos_get_scheduler_state //rtw_get_scheduler_state -}; diff --git a/Firmware/RTLGDB/USDK/component/os/freertos/freertos_service.h b/Firmware/RTLGDB/USDK/component/os/freertos/freertos_service.h deleted file mode 100644 index 2a176d5..0000000 --- a/Firmware/RTLGDB/USDK/component/os/freertos/freertos_service.h +++ /dev/null @@ -1,259 +0,0 @@ -#ifndef _FREERTOS_SERVICE_H_ -#define _FREERTOS_SERVICE_H_ - -//----- ------------------------------------------------------------------ -// Include Files -//----- ------------------------------------------------------------------ -//#include "wireless.h" -#include "dlist.h" - -// -------------------------------------------- -// Platform dependent include file -// -------------------------------------------- -#if defined(CONFIG_PLATFORM_8195A) -#include "platform/platform_stdlib.h" -extern void RtlUdelayOS(uint32_t us); -#elif defined(CONFIG_PLATFORM_8711B) -#include "platform/platform_stdlib.h" -#else -// other MCU may use standard library -#include -#endif - - -#if (defined CONFIG_GSPI_HCI || defined CONFIG_SDIO_HCI) || defined(CONFIG_LX_HCI) -/* For SPI interface transfer and us delay implementation */ -#if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) -#include -#endif -#endif - - -// -------------------------------------------- -// Platform dependent type define -// -------------------------------------------- -#if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) - -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -typedef signed char int8_t; -typedef signed short int16_t; -typedef signed int int32_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; -typedef unsigned int uint; -typedef signed int sint; - -#ifndef bool -typedef int bool; -#define true 1 -#define false 0 -#endif - -#define IN -#define OUT -#define void void -#define NDIS_OID uint -#define NDIS_STATUS uint -#ifndef PVOID -typedef void * PVOID; -#endif - -typedef unsigned int __kernel_size_t; -typedef int __kernel_ssize_t; -typedef __kernel_size_t SIZE_T; -typedef __kernel_ssize_t SSIZE_T; - -#endif //CONFIG_PLATFORM_8195A - -#define FIELD_OFFSET(s,field) ((SSIZE_T)&((s*)(0))->field) - -// os types -typedef char osdepCHAR; -typedef float osdepFLOAT; -typedef double osdepDOUBLE; -typedef long osdepLONG; -typedef short osdepSHORT; -typedef unsigned long osdepSTACK_TYPE; -typedef long osdepBASE_TYPE; -typedef unsigned long osdepTickType; - -typedef void* _timerHandle; -typedef void* _sema; -typedef void* _mutex; -typedef void* _lock; -typedef void* _queueHandle; -typedef void* _xqueue; -typedef struct timer_list _timer; - -typedef struct sk_buff _pkt; -typedef unsigned char _buffer; - -#ifndef __LIST_H -#warning "DLIST_NOT_DEFINE!!!!!!" -struct list_head { - struct list_head *next, *prev; -}; -#endif - -struct __queue { - struct list_head queue; - _lock lock; -}; - -typedef struct __queue _queue; -typedef struct list_head _list; -typedef unsigned long _irqL; - -typedef void* _thread_hdl_; -typedef void thread_return; -typedef void* thread_context; - -#define ATOMIC_T atomic_t -#define HZ configTICK_RATE_HZ - -#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) -/* emulate a modern version */ -#define LINUX_VERSION_CODE KERNEL_VERSION(2, 6, 17) - -static __inline _list *get_next(_list *list) -{ - return list->next; -} - -static __inline _list *get_list_head(_queue *queue) -{ - return (&(queue->queue)); -} - -#define LIST_CONTAINOR(ptr, type, member) \ - ((type *)((char *)(ptr)-(SIZE_T)((char *)&((type *)ptr)->member - (char *)ptr))) -//#define container_of(p,t,n) (t*)((p)-&(((t*)0)->n)) -#define container_of(ptr, type, member) \ - ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member))) -#define TASK_PRORITY_LOW 1 -#define TASK_PRORITY_MIDDLE 2 -#define TASK_PRORITY_HIGH 3 -#define TASK_PRORITY_SUPER 4 - -#define TIMER_MAX_DELAY 0xFFFFFFFF - -void save_and_cli(void); -void restore_flags(void); -void cli(void); - -#ifndef mdelay -#define mdelay(t) ((t/portTICK_RATE_MS)>0)?(vTaskDelay(t/portTICK_RATE_MS)):(vTaskDelay(1)) -#endif - -#ifndef udelay -#define udelay(t) ((t/(portTICK_RATE_MS*1000))>0)?vTaskDelay(t/(portTICK_RATE_MS*1000)):(vTaskDelay(1)) -#endif -//----- ------------------------------------------------------------------ -// Common Definition -//----- ------------------------------------------------------------------ - -#define __init -#define __exit -#define __devinit -#define __devexit - -#define KERN_ERR -#define KERN_INFO -#define KERN_NOTICE - -#undef GFP_KERNEL -#define GFP_KERNEL 1 -#define GFP_ATOMIC 1 - -#define SET_MODULE_OWNER(some_struct) do { } while (0) -#define SET_NETDEV_DEV(dev, obj) do { } while (0) -#define register_netdev(dev) (0) -#define unregister_netdev(dev) do { } while (0) -#define netif_queue_stopped(dev) (0) -#define netif_wake_queue(dev) do { } while (0) -#define printk printf - -#define DBG_ERR(fmt, args...) printf("\n\r[%s] " fmt, __FUNCTION__, ## args) -#if WLAN_INTF_DBG -#define DBG_TRACE(fmt, args...) printf("\n\r[%s] " fmt, __FUNCTION__, ## args) -#define DBG_INFO(fmt, args...) printf("\n\r[%s] " fmt, __FUNCTION__, ## args) -#else -#define DBG_TRACE(fmt, args...) -#define DBG_INFO(fmt, args...) -#endif -#define HALT() do { cli(); for(;;);} while(0) -#undef ASSERT -#define ASSERT(x) do { \ - if((x) == 0) \ - printf("\n\rAssert(" #x ") failed on line %d in file %s", __LINE__, __FILE__); \ - HALT(); \ - } while(0) - -#undef DBG_ASSERT -#define DBG_ASSERT(x, msg) do { \ - if((x) == 0) \ - printf("\n\r%s, Assert(" #x ") failed on line %d in file %s", msg, __LINE__, __FILE__); \ - } while(0) - -//----- ------------------------------------------------------------------ -// Atomic Operation -//----- ------------------------------------------------------------------ -#if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) // for 8195A, it is defined in ..system../basic_types.h -typedef struct { volatile int counter; } atomic_t; -#endif - - -/* - * atomic_read - read atomic variable - * @v: pointer of type atomic_t - * - * Atomically reads the value of @v. Note that the guaranteed - * useful range of an atomic_t is only 24 bits. - */ -#undef atomic_read -#define atomic_read(v) ((v)->counter) - -/* - * atomic_set - set atomic variable - * @v: pointer of type atomic_t - * @i: required value - * - * Atomically sets the value of @v to @i. Note that the guaranteed - * useful range of an atomic_t is only 24 bits. - */ -#undef atomic_set -#define atomic_set(v,i) ((v)->counter = (i)) - - /* - * These inlines deal with timer wrapping correctly. You are - * strongly encouraged to use them - * 1. Because people otherwise forget - * 2. Because if the timer wrap changes in future you wont have to - * alter your driver code. - * - * time_after(a,b) returns true if the time a is after time b. - * - * Do this with "<0" and ">=0" to only test the sign of the result. A - * good compiler would generate better code (and a really good compiler - * wouldn't care). Gcc is currently neither. - */ - #define time_after(a,b) ((long)(b) - (long)(a) < 0) - #define time_before(a,b) time_after(b,a) - - #define time_after_eq(a,b) ((long)(a) - (long)(b) >= 0) - #define time_before_eq(a,b) time_after_eq(b,a) - - -extern void rtw_init_listhead(_list *list); -extern uint32_t rtw_is_list_empty(_list *phead); -extern void rtw_list_insert_head(_list *plist, _list *phead); -extern void rtw_list_insert_tail(_list *plist, _list *phead); -extern void rtw_list_delete(_list *plist); - -#if CONFIG_PLATFORM_8711B -extern uint32_t random_seed; -#endif - -#endif /* _FREERTOS_SERVICE_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/os/os_dep/device_lock.c b/Firmware/RTLGDB/USDK/component/os/os_dep/device_lock.c deleted file mode 100644 index 796c404..0000000 --- a/Firmware/RTLGDB/USDK/component/os/os_dep/device_lock.c +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "osdep_service.h" -#include "device_lock.h" - -//------------------------------------------------------ -#define DEVICE_MUTEX_IS_INIT(device) (mutex_init & (1< -#include -#include "os_support.h" -//#include "diag.h" - - - -#if 0 -#define __init -#define __exit -#define __devinit -#define __devexit -#endif -#define RTL_HZ 100 - -#define SemaInit(sem, value) vSemaphoreCreateBinary(sem) -#define SemaPost(sem) xSemaphoreGive(sem) -#define SemaWait(sem, block_time) xSemaphoreTake(sem, block_time) -//#define printk DiagPrintf - -#define SpinLockInit(lock) do { } while (0) -#define SpinLock(x) do { } while (0) -#define SpinUnlock(x) do { } while (0) -#define SpinLockBh(x) do { } while (0) -#define SpinUnlockBh(x) do { } while (0) -#ifdef PLATFORM_FREERTOS -#define RestoreFlags() portEXIT_CRITICAL() -#define SaveAndCli() portENTER_CRITICAL() -#define SpinLockIrqSave(lock, flags) SaveAndCli() -#define SpinUnlockIrqRestore(l, f) RestoreFlags() -#else -#define RestoreFlags(x) portENABLE_INTERRUPTS() -#define SaveAndCli(x) portDISABLE_INTERRUPTS() -#define SpinLockIrqSave(lock, flags) SaveAndCli(flags) -#define SpinUnlockIrqRestore(l, f) RestoreFlags(f) -#endif - - -//#define RtlKmalloc(size, flag) pvPortMallocAligned(size, 0) -#define RtlKmalloc(size, flag) pvPortMalloc(size) -#define RtlKfree(pv) vPortFreeAligned(pv) - - - -#ifdef CONFIG_TIMER_MODULE -#define __Delay(t) HalDelayUs(t) -#else -static __inline__ uint32_t __Delay(uint32_t us) -{ - DBG_8195A("No Delay: please enable hardware Timer\n"); -} -#endif - - -#define Mdelay(t) __Delay(t*1000) -#define Udelay(t) __Delay(t) - - -#define ASSERT(_bool_) do { } while (0) - -//#define panic_printk DiagPrintf -//#define sprintf DiagPrintf -//#define diag_sprintf DiagPrintf - - -//1TODO: Need check again; the below just for compile ok ; chris - -/* - * ATOMIC_READ - read atomic variable - * @v: pointer of type atomic_t - * - * Atomically reads the value of @v. Note that the guaranteed - * useful range of an atomic_t is only 24 bits. - */ -//#define AtomicRead(v) ((*v)) - -static __inline__ uint32_t -AtomicRead( - IN atomic_t * v -) -{ -#ifdef PLATFORM_FREERTOS - uint32_t Temp; - - SaveAndCli(); - Temp = v->counter; - RestoreFlags(); - - return Temp; - -#else - uint32_t Temp, Flags; - - SaveAndCli(Flags); - Temp = v->counter; - RestoreFlags(Flags); - - return Temp; -#endif -} - -/* - * ATOMIC_SET - set atomic variable - * @v: pointer of type atomic_t - * @i: required value - * - * Atomically sets the value of @v to @i. Note that the guaranteed - * useful range of an atomic_t is only 24 bits. - */ -//#define AtomicSet(v,i) ((v)->counter = (i)) - -static __inline__ void -AtomicSet( - IN uint32_t i, - IN atomic_t * v -) -{ -#ifdef PLATFORM_FREERTOS - SaveAndCli(); - v->counter = i; - RestoreFlags(); -#else - uint32_t Flags; - - SaveAndCli(Flags); - v->counter = i; - RestoreFlags(Flags); -#endif -} - -/* - * The MIPS I implementation is only atomic with respect to - * interrupts. R3000 based multiprocessor machines are rare anyway ... - * - * AtomicAdd - add integer to atomic variable - * @i: integer value to add - * @v: pointer of type atomic_t - * - * Atomically adds @i to @v. Note that the guaranteed useful range - * of an atomic_t is only 24 bits. - */ -static __inline__ void -AtomicAdd( - IN uint32_t i, - IN atomic_t * v -) -{ -#ifdef PLATFORM_FREERTOS - SaveAndCli(); - v->counter += i; - RestoreFlags(); -#else - uint32_t Flags; - - SaveAndCli(Flags); - v->counter += i; - RestoreFlags(Flags); -#endif -} - -/* - * AtomicSub - subtract the atomic variable - * @i: integer value to subtract - * @v: pointer of type atomic_t - * - * Atomically subtracts @i from @v. Note that the guaranteed - * useful range of an atomic_t is only 24 bits. - */ -static __inline__ void -AtomicSub( - IN uint32_t i, - IN atomic_t * v -) -{ -#ifdef PLATFORM_FREERTOS - SaveAndCli(); - v->counter -= i; - RestoreFlags(); -#else - uint32_t Flags; - - SaveAndCli(Flags); - v->counter -= i; - RestoreFlags(Flags); -#endif -} - -static __inline__ uint32_t -AtomicAddReturn( - IN uint32_t i, - IN atomic_t * v -) -{ -#ifdef PLATFORM_FREERTOS - uint32_t Temp; - - SaveAndCli(); - Temp = v->counter; - Temp += i; - v->counter = Temp; - RestoreFlags(); - - return Temp; - -#else - uint32_t Temp, Flags; - - SaveAndCli(Flags); - Temp = v->counter; - Temp += i; - v->counter = Temp; - RestoreFlags(Flags); - - return Temp; -#endif -} - -static __inline__ uint32_t -AtomicSubReturn( - IN uint32_t i, - IN atomic_t * v -) -{ -#ifdef PLATFORM_FREERTOS - uint32_t Temp; - - SaveAndCli(); - Temp = v->counter; - Temp -= i; - v->counter = Temp; - RestoreFlags(); - - return Temp; - -#else - - uint32_t Temp, Flags; - - SaveAndCli(Flags); - Temp = v->counter; - Temp -= i; - v->counter = Temp; - RestoreFlags(Flags); - - return Temp; -#endif -} - -/* - * ATOMIC_INC - increment atomic variable - * @v: pointer of type atomic_t - * - * Atomically increments @v by 1. Note that the guaranteed - * useful range of an atomic_t is only 24 bits. - */ -#define AtomicInc(v) AtomicAdd(1,(v)) - -#define AtomicIncReturn(v) AtomicAddReturn(1,(v)) - -/* - * ATOMIC_DEC - decrement and test - * @v: pointer of type atomic_t - * - * Atomically decrements @v by 1. Note that the guaranteed - * useful range of an atomic_t is only 24 bits. - */ -#define AtomicDec(v) AtomicSub(1,(v)) - -#define AtomicDecReturn(v) AtomicSubReturn(1,(v)) - -/* - * ATOMIC_DEC_AND_TEST - decrement by 1 and test - * @v: pointer of type atomic_t - * - * Atomically decrements @v by 1 and - * returns true if the result is 0, or false for all other - * cases. Note that the guaranteed - * useful range of an atomic_t is only 24 bits. - */ -#define AtomicDecAndTest(v) (AtomicSubReturn(1, (v)) == 0) - -/* Not needed on 64bit architectures */ -static __inline__ uint32_t -__Div64_32( - IN __uint64_t *n, - IN uint32_t base -) -{ - __uint64_t rem = *n; - __uint64_t b = base; - __uint64_t res, d = 1; - uint32_t high = rem >> 32; - - /* Reduce the thing a bit first */ - res = 0; - if (high >= base) { - high /= base; - res = (__uint64_t) high << 32; - rem -= (__uint64_t) (high*base) << 32; - } - - while ((__int64_t)b > 0 && b < rem) { - b = b+b; - d = d+d; - } - - do { - if (rem >= b) { - rem -= b; - res += d; - } - b >>= 1; - d >>= 1; - } while (d); - - *n = res; - return rem; -} - -#define DO_DIV(n,base) ({ \ - unsigned int __base = (base); \ - unsigned int __rem; \ - (void)(((typeof((n)) *)0) == ((__uint64_t *)0)); \ - if (((n) >> 32) == 0) { \ - __rem = (unsigned int)(n) % __base; \ - (n) = (unsigned int)(n) / __base; \ - } else \ - __rem = __Div64_32(&(n), __base); \ - __rem; \ - }) - -#endif /* __SYS_SUPPORT_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/os/os_dep/include/osdep_service.h b/Firmware/RTLGDB/USDK/component/os/os_dep/include/osdep_service.h deleted file mode 100644 index cd211a2..0000000 --- a/Firmware/RTLGDB/USDK/component/os/os_dep/include/osdep_service.h +++ /dev/null @@ -1,1354 +0,0 @@ -//----------------------------------------------------------------------------// -/** - ****************************************************************************** - * @file osdep_service.h - * @author - * @version - * @brief This file provides the OS dependent API. - ****************************************************************************** - * @attention - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - * - * Copyright(c) 2016, Realtek Semiconductor Corporation. All rights reserved. - ****************************************************************************** - */ - -#ifndef __OSDEP_SERVICE_H_ -#define __OSDEP_SERVICE_H_ - -/** @addtogroup RTOS - * @{ - */ - -/*************************** OS dep feature enable *******************************/ - -/****************************************************** - * Macros - ******************************************************/ - -#define CONFIG_LITTLE_ENDIAN - -#if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) -#define CONFIG_PLATFORM_AMEBA_X -#endif - -#if defined(CONFIG_PLATFORM_8195A) - #define CONFIG_USE_TCM_HEAP 1 /* USE TCM HEAP */ - #define USE_MUTEX_FOR_SPINLOCK 1 -#endif - -#if defined(CONFIG_PLATFORM_AMEBA_X) - #define CONFIG_MEM_MONITOR MEM_MONITOR_SIMPLE -#else - #define CONFIG_MEM_MONITOR MEM_MONITOR_LEAK -#endif - -/* Define compilor specific symbol */ - -/*************************** inline functions *******************************/ -#if defined ( __ICCARM__ ) -#define __inline__ inline -#define __inline inline -#define __inline_definition //In dialect C99, inline means that a function's definition is provided - //only for inlining, and that there is another definition - //(without inline) somewhere else in the program. - //That means that this program is incomplete, because if - //add isn't inlined (for example, when compiling without optimization), - //then main will have an unresolved reference to that other definition. - - // Do not inline function is the function body is defined .c file and this - // function will be called somewhere else, otherwise there is compile error -#elif defined ( __CC_ARM ) -#define __inline__ __inline //__linine__ is not supported in keil compilor, use __inline instead -#define inline __inline -#define __inline_definition // for dialect C99 -#elif defined ( __GNUC__ ) -#define __inline__ inline -#define __inline inline -#define __inline_definition inline -#endif - -#include -#if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) -#include "platform_autoconf.h" -#else //for 8189FM/8189FTV add by frankie_li 20160408 -#ifndef SUCCESS -#define SUCCESS 0 -#endif -#ifndef FAIL -#define FAIL (-1) -#endif -#ifndef _SUCCESS -#define _SUCCESS 1 -#endif -#ifndef _FAIL -#define _FAIL 0 -#endif -#ifndef FALSE - #define FALSE 0 -#endif - -#ifndef TRUE - #define TRUE (!FALSE) -#endif - -#define _TRUE TRUE -#define _FALSE FALSE - -#endif - -#if defined( PLATFORM_FREERTOS) -#include "freertos_service.h" -#elif defined( PLATFORM_ECOS) -#include "ecos/ecos_service.h" -#endif - -#define RTW_MAX_DELAY 0xFFFFFFFF -#define RTW_WAIT_FOREVER 0xFFFFFFFF - -/****************************************************** - * Constants - ******************************************************/ -/** - * @brief Definitions returned by xTaskGetSchedulerState(). - */ - -#define OS_SCHEDULER_NOT_STARTED 0 -#define OS_SCHEDULER_RUNNING 1 -#define OS_SCHEDULER_SUSPENDED 2 - -/****************************************************** - * Structures - ******************************************************/ -struct timer_list { - _timerHandle timer_hdl; - unsigned long data; - void (*function)(void *); -}; - -/****************************************************** - * Type Definitions - ******************************************************/ -typedef thread_return (*thread_func_t)(thread_context context); -typedef void (*TIMER_FUN)(void *context); -typedef int (*event_handler_t)(char *buf, int buf_len, int flags, void *user_data); - -#define CONFIG_THREAD_COMM_SEMA -struct task_struct { - const char *task_name; - _thread_hdl_ task; /* I: workqueue thread */ - -#ifdef CONFIG_THREAD_COMM_SIGNAL - const char *name; /* I: workqueue thread name */ - uint32_t queue_num; /* total signal num */ - uint32_t cur_queue_num; /* cur signal num should < queue_num */ -#elif defined(CONFIG_THREAD_COMM_SEMA) - _sema wakeup_sema; - _sema terminate_sema; -// _queue work_queue; //TODO -#endif - uint32_t blocked; - uint32_t callback_running; -}; - -typedef struct { - _xqueue event_queue; - struct task_struct thread; -}rtw_worker_thread_t; - -typedef struct -{ - event_handler_t function; - char *buf; - int buf_len; - int flags; - void *user_data; -} rtw_event_message_t; - -struct worker_timer_entry { - struct list_head list; - _timerHandle timer_hdl; - rtw_event_message_t message; - rtw_worker_thread_t *worker_thread; - uint32_t timeout; -}; - -#ifdef CONFIG_THREAD_COMM_SIGNAL -struct work_struct; -typedef void (*work_func_t)(void *context); -struct work_struct { - _list list; - uint32_t data; - work_func_t func; - void *context; - struct task_struct *used_wq; -}; - -struct delayed_work { - struct work_struct work; - struct timer_list timer; -}; -#endif - - -#ifdef CONFIG_MEM_MONITOR - -/*************************** Memory Monitor *******************************/ -#define MEM_MONITOR_SIMPLE 0x1 -#define MEM_MONITOR_LEAK 0x2 - -#define MEM_MONITOR_FLAG_WIFI_DRV 0x1 -#define MEM_MONITOR_FLAG_WPAS 0x2 -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK -struct mem_entry { - struct list_head list; - int size; - void *ptr; -}; -#endif - -/** - * @brief This function initializes a memory table. - * @param[in] pmem_table: The pointer to the memory table. - * @param[in] used_num: The number of mem_entry kept in monitor which will be set to 0. - * @return None - */ -void init_mem_monitor(_list *pmem_table, int *used_num); - -/** - * @brief This function deinitializes a memory table. - * @param[in] pmem_table: The pointer to the memory table. - * @param[in] used_num: The number of mem_entry kept in monitor. - * @return None - */ -void deinit_mem_monitor(_list *pmem_table, int *used_num); - -/** - * @brief This function alloc mem_entry to the memory table. - * @param[in] pmem_table: The pointer to the memory table to be added. - * @param[in] ptr: The pointer to the position to be added. - * @param[in] size: The size of added memory. - * @param[in] used_num: The number of mem_entry kept in monitor which will add 1 after. - * @param[in] flag: MEM_MONITOR_FLAG_WPAS/MEM_MONITOR_FLAG_WIFI_DRV - * @return None - */ -void add_mem_usage(_list *pmem_table, void *ptr, int size, int *used_num, int flag); - -/** - * @brief This function frees memory from the memory table. - * @param[in] pmem_table: The pointer to the memory table - * @param[in] ptr: The pointer to the position to be free. - * @param[in] used_num: The number of mem_entry kept in monitor. - * @param[in] flag: MEM_MONITOR_FLAG_WPAS/MEM_MONITOR_FLAG_WIFI_DRV - * @return None - */ -void del_mem_usage(_list *pmem_table, void *ptr, int *used_num, int flag); - -/** - * @brief This function get the memory usage of a memory table. - * @param[in] pmem_table: The pointer to the memory table. - * @return The size of the memory used - */ -int get_mem_usage(_list *pmem_table); -/*************************** End Memory Monitor *******************************/ -#endif - - -/*************************** Memory Management *******************************/ -uint8_t* _rtw_vmalloc(uint32_t sz); -uint8_t* _rtw_zvmalloc(uint32_t sz); -void _rtw_vmfree(uint8_t *pbuf, uint32_t sz); -uint8_t* _rtw_zmalloc(uint32_t sz); -uint8_t* _rtw_malloc(uint32_t sz); -void _rtw_mfree(uint8_t *pbuf, uint32_t sz); -#ifdef CONFIG_MEM_MONITOR - -/** - * @brief This function allocates the virtually contiguous memory. - * @param[in] sz: The size of memory to be allocated. - * @return The pointer to the beginning of the memory - */ -uint8_t* rtw_vmalloc(uint32_t sz); - -/** - * @brief This function allocates the virtually contiguous memory - * and the values of the memory are setted to 0. - * @param[in] sz: The size of memory to be allocated. - * @return The pointer to the beginning of the memory - */ -uint8_t* rtw_zvmalloc(uint32_t sz); - -/** - * @brief This function frees the virtually contiguous memory. - * @param[in] pbuf: The pointer to the beginning of the memory to be free - * @param[in] sz: The size of memory allocated. - * @return None - */ -void rtw_vmfree(uint8_t *pbuf, uint32_t sz); - -/** - * @brief This function allocates the memory - * and the values of the memory are setted to 0. - * @param[in] sz: The size of memory to be allocated. - * @return The pointer to the beginning of the memory - */ -uint8_t* rtw_zmalloc(uint32_t sz); - -/** - * @brief This function allocates the memory. - * @param[in] sz: The size of memory to be allocated. - * @return The pointer to the beginning of the memory - */ -uint8_t* rtw_malloc(uint32_t sz); - -/** - * @brief This function frees the virtually contiguous memory. - * @param[in] pbuf: The pointer to the beginning of the memory to be free - * @param[in] sz: The size of memory allocated. - * @return None - */ -void rtw_mfree(uint8_t *pbuf, uint32_t sz); -#else -#define rtw_vmalloc _rtw_vmalloc -#define rtw_zvmalloc _rtw_zvmalloc -#define rtw_vmfree _rtw_vmfree -#define rtw_zmalloc _rtw_zmalloc -#define rtw_malloc _rtw_malloc -#define rtw_mfree _rtw_mfree -#endif -#define rtw_free(buf) rtw_mfree((uint8_t *)buf, 0) - -/** - * @brief This function allocates a 2 dimensional array memory. - * @param[in] h: The height of the 2D array. - * @param[in] w: The width of the 2D array. - * @param[in] size: The size of the each charactor in array. - * @return the pointer to the beginning of the block - */ -void* rtw_malloc2d(int h, int w, int size); - -/** - * @brief This function deallocates the block of memory previously allocated to make it available again. - * @param[in] pbuf: Pointer to a memory block previously allocated. - * @param[in] h: The height of the 2D array. - * @param[in] w: The width of the 2D array. - * @param[in] size: The size of the each charactor in array. - * @return None - */ -void rtw_mfree2d(void *pbuf, int h, int w, int size); - -/** - * @brief This function copies the values of "sz" bytes from the location pointed to by "src" - * directly to the memory block pointed to by "des". - * @param[in] dst: Pointer to the destination array where the content is to be copied, type-casted to a pointer of type void*. - * @param[in] src: Pointer to the source of data to be copied, type-casted to a pointer of type void*. - * @param[in] sz: Size of memory to copy. - * @return None - */ -void rtw_memcpy(void* dst, void* src, uint32_t sz); - -/** - * @brief This function compares the first "sz" bytes of the block of memory pointed by "dst" - * to the first "sz" bytes pointed by "src". - * @param[in] dst: Pointer to block of memory to be compared. - * @param[in] src: pointer to block of memory to compare. - * @param[in] sz: Size of memory to compare. - * @return <0: The first byte that does not match in both memory blocks has a lower value in dst than in src. - * @return 0: The contents of both memory blocks are equal. - * @return <0: The first byte that does not match in both memory blocks has a greater value in dst than in src. - */ -int rtw_memcmp(void *dst, void *src, uint32_t sz); - -/** - * @brief This function sets the first "sz" bytes of the block of memory pointed by "pbuf" to the specified "c". - * @param[in] pbuf: Pointer to the block of memory to fill. - * @param[in] c: Value to be set. - * @param[in] sz: Size of memory to be set to the value "c". - * @return None - */ -void rtw_memset(void *pbuf, int c, uint32_t sz); -/*************************** End Memory Management *******************************/ - -/*************************** List *******************************/ - -/** - * @brief This function initializes the head of the list. - * @param[in] list: Pointer to the list to be initialized. - * @return None - */ -void rtw_init_listhead(_list *list); - -/** - * @brief This function tests whether a list is empty. - * @param[in] phead: Pointer to the list to test. - * @return _TRUE/_FALSE - */ -uint32_t rtw_is_list_empty(_list *phead); - -/** - * @brief This function adds a new entry after "phead" for the list. - * @param[in] plist: Pointer to the list to be added. - * @param[in] phead: List head to add it after. - * @return None - */ -void rtw_list_insert_head(_list *plist, _list *phead); - -/** - * @brief This function adds a new entry before "phead" for the list. - * @param[in] plist: Pointer to the list to be added. - * @param[in] phead: List head to add it before. - * @return None - */ -void rtw_list_insert_tail(_list *plist, _list *phead); - -/** - * @brief This function deletes entry from list and reinitialize it. - * @param[in] plist: The element to delete from the list. - * @return None - * @note Caller must check if the list is empty before calling rtw_list_delete - */ -void rtw_list_delete(_list *plist); -/*************************** End List *******************************/ - - -/*************************** Semaphores *******************************/ -/** - * @brief This function initializes the unnamed semaphore referred to by "sema" to the value "init_val". - * @param[in] sema: Pointer to the semaphore handle to be initialized. - * @param[in] init_val: Initial value for semaphore. - * @return None - */ -void rtw_init_sema(_sema *sema, int init_val); - -/** - * @brief This function deletes the semaphore. - * @param[in] sema: The semaphore to be deleted. - * @return None - */ -void rtw_free_sema(_sema *sema); - -/** - * @brief This function releases the semaphore. - * This macro must not be used from an ISR. - * @param[in] sema: The semaphore to be released. - * @return None - */ -void rtw_up_sema(_sema *sema); - -/** - * @brief This function releases the semaphore. - * This macro can be used from an ISR. - * @param[in] sema: The semaphore to be released. - * @return None - */ -void rtw_up_sema_from_isr(_sema *sema); - -/** - * @brief This function acquires the semaphore. If no more tasks are allowed to acquire the semaphore, - * calling this function will put the task to sleep until the semaphore is up. - * @param[in] sema: The semaphore to be acquired. - * @return pdTRUE: The semaphore was obtained. - * @return pdFALSE: Obtain the semaphore failed. - */ -uint32_t rtw_down_sema(_sema *sema); - -/** - * @brief This function acquires the semaphore. If no more tasks are allowed to acquire the semaphore, - * calling this function will put the task to sleep until the semaphore is up. - * @param[in] sema: The semaphore to be acquired. - * @param[in] timeout: The time in ms to wait for the semaphore to become available. - * @return pdTRUE: The semaphore was obtained. - * @return pdFALSE: Timeout without the semaphore becoming available. - */ -uint32_t rtw_down_timeout_sema(_sema *sema, uint32_t timeout); -/*************************** End Semaphores *******************************/ - -/*************************** Mutexes *******************************/ -/** - * @brief This function implements a mutex semaphore by using the existing queue mechanism. - * @param[in] pmutex: Pointer to the created mutex semaphore. - * @return None - */ -void rtw_mutex_init(_mutex *pmutex); - -/** - * @brief This function deletes the mutex semaphore. - * @param[in] pmutex: Pointer to the mutex semaphore to be deleted. - * @return None - */ -void rtw_mutex_free(_mutex *pmutex); - -/** - * @brief This function releases a mutex semaphore. - * @param[in] pmutex: Pointer to the mutex semaphore to be released. - * @return None - */ -void rtw_mutex_put(_mutex *pmutex); - -/** - * @brief This function obtains a mutex semaphore. - * @param[in] pmutex: Pointer to the mutex semaphore being taken - obtained when - * the mutex semaphore was created. - * @return None - */ -void rtw_mutex_get(_mutex *pmutex); - -/** - * @brief This function obtains a mutex semaphore with a timeout setting. - * @param[in] pmutex: Pointer to the mutex semaphore being taken - obtained when - * the mutex semaphore was created. - * @param[in] timeout: The time in ms to wait for the semaphore to become available. - * @return 0: The semaphore was obtained. - * @return -1: Timeout without the semaphore becoming available. - */ -int rtw_mutex_get_timeout(_mutex *pmutex, uint32_t timeout_ms); -/*************************** End Mutexes *******************************/ - -/*************************** SchedulerControl *******************************/ -/** - * @brief This function marks the start of a critical code region. - * Preemptive context switches cannot occur when in a critical region. - * @param[in] plock: Pointer to the spin lock semaphore. - * @param[in] pirqL: Pointer to the IRQ. - * @return None - * @note: This may alter the stack (depending on the portable implementation) - * so must be used with care! - */ -void rtw_enter_critical(_lock *plock, _irqL *pirqL); - -/** - * @brief This function marks end of a critical code region. Preemptive context - * switches cannot occur when in a critical region. - * @param[in] plock: Pointer to the spin lock semaphore. - * @param[in] pirqL: Pointer to the IRQ. - * @return None - * @note: This may alter the stack (depending on the portable implementation) - * so must be used with care! - */ -void rtw_exit_critical(_lock *plock, _irqL *pirqL); - -/** - * @brief This function marks the start of a critical code region from isr. - * @param[in] plock: Pointer to the spin lock semaphore. - * @param[in] pirqL: Pointer to the IRQ. - * @return None - */ -void rtw_enter_critical_from_isr(_lock *plock, _irqL *pirqL); - -/** - * @brief This function marks the end of a critical code region from isr. - * @param[in] plock: Pointer to the spin lock semaphore. - * @param[in] pirqL: Pointer to the IRQ. - * @return None - */ -void rtw_exit_critical_from_isr(_lock *plock, _irqL *pirqL); - -/** - * @brief This function obtains a spin lock semaphore. - * @param[in] plock: Pointer to the spin lock semaphore being taken - obtained when - * the mutex semaphore was created. - * @param[in] pirqL: Pointer to the IRQ. - * @return None - */ -void rtw_enter_critical_bh(_lock *plock, _irqL *pirqL); - -/** - * @brief This function releases a spin lock semaphore. - * @param[in] plock: Pointer to the spin lock semaphore to be released. - * @param[in] pirqL: Pointer to the IRQ. - * @return None - */ -void rtw_exit_critical_bh(_lock *plock, _irqL *pirqL); - -/** - * @brief This function obtains a semaphore. - * @param[in] pmutex: The handle to the mutex semaphore to be obtained. - * @param[in] pirqL: Pointer to the IRQ. - * @return None - */ -int rtw_enter_critical_mutex(_mutex *pmutex, _irqL *pirqL); - -/** - * @brief This function releases a semaphore. - * @param[in] pmutex: The handle to the mutex semaphore to be released. - * @param[in] pirqL: Pointer to the IRQ. - * @return None - */ -void rtw_exit_critical_mutex(_mutex *pmutex, _irqL *pirqL); -/*************************** End SchedulerControl *******************************/ - -/*************************** Semaphores *******************************/ - -/** - * @brief This function implements a spin lock semaphore by using the existing queue mechanism. - * @param[in] plock: Pointer to the created spin lock semaphore. - * @return None - */ -void rtw_spinlock_init(_lock *plock); - -/** - * @brief This function deletes the spin lock semaphore. - * @param[in] pmutex: Pointer to the spin lock semaphore to be deleted. - * @return None - */ -void rtw_spinlock_free(_lock *plock); - -/** - * @brief This function obtains a spin lock semaphore. - * @param[in] plock: Pointer to the spin lock semaphore being taken - obtained when - * the mutex semaphore was created. - * @return None - */ -void rtw_spin_lock(_lock *plock); - -/** - * @brief This function releases a spin lock semaphore. - * @param[in] plock: Pointer to the spin lock semaphore to be released. - * @return None - */ -void rtw_spin_unlock(_lock *plock); - -/** - * @brief This function marks the start of a critical code region and - * obtains a spin lock semaphore. - * @param[in] plock: Pointer to the spin lock semaphore being taken - obtained when - * the mutex semaphore was created. - * @param[in] irqL: Pointer to the IRQ. - * @return None - */ -void rtw_spinlock_irqsave(_lock *plock, _irqL *irqL); - -/** - * @brief This function releases a spin lock semaphore and - marks the end of a critical code region. - * @param[in] plock: Pointer to the spin lock semaphore to be released. - * @param[in] irqL: Pointer to the IRQ. - * @return None - */ -void rtw_spinunlock_irqsave(_lock *plock, _irqL *irqL); -/*************************** End Semaphores *******************************/ - -/*************************** Queues *******************************/ - -/** - * @brief This function creates a new queue instance. - * @param[in] queue: The handle to the newly created queue. - * @param[in] name: The name of the queue - * @param[in] message_size: The number of bytes each message in the queue will require. - * @param[in] number_of_messages: The maximum number of messages that kthe queue can contain. - * @return 0: Creating queue success - * @return -1: Creating queue fail - */ -int rtw_init_xqueue( _xqueue* queue, const char* name, uint32_t message_size, uint32_t number_of_messages ); - -/** - * @brief This function posts a message to the back of a queue. - * The message is queued by copy, not by reference. - * @param[in] queue: The handle to the queue on which the message is to be posted. - * @param[in] message: The pointer to the message that is to be placed on the queue. - * @param[in] timeout_ms: The maximum amout of time the task should block waiting for - the space to become available on the queue, should it already be full. - The time is defined in ms. - * @return 0: The message was successfully posted. - * @return -1: The message was not posted. - */ -int rtw_push_to_xqueue( _xqueue* queue, void* message, uint32_t timeout_ms ); - -/** - * @brief This function receives a message from a queue. - * The message is recieved by copy so a buffer adequate size must be provided. - * @param[in] queue: The handle to the queue from which the message is to be received. - * @param[in] message: The pointer to the buffer into which the received message will be copied. - * @param[in] timeout_ms: The maximum amout of time the task should block waiting for a message to - * receive should the queue be empty at the time of the call. - The time is defined in ms. - * @return 0: A message was successfully received from the queue. - * @return -1: No message was received from the queue. - */ -int rtw_pop_from_xqueue( _xqueue* queue, void* message, uint32_t timeout_ms ); - -/** - * @brief Delete a queue - freeing all the memory allocated for storing of messages placed on the queue. - * @param[in] queue: The handle to the queue to be deleted. - * @return 0: The queue was successfully deleted. - * @return -1: The queue was not empty so cannot be deleted. - */ -int rtw_deinit_xqueue( _xqueue* queue ); - -/** - * @brief This function creates a new queue instance. - * @param[in] pqueue: The handle to the newly created queue. - * @return None - */ -void rtw_init_queue(_queue *pqueue); -void rtw_deinit_queue(_queue *pqueue); -uint32_t rtw_is_queue_empty(_queue *pqueue); - -/** - * @brief This function tests whether the queue is empty. - * @param[in] pqueue: The handle to the queue to be tested. - * @return None - */ -uint32_t rtw_queue_empty(_queue *pqueue); - -/** - * @brief This function tests whether the "pelement" is at the "queue". - * @param[in] queue: The pointer to the queue that to be tested. - * @param[in] pelement: The element that to be tested. - * @return _TRUE/_FALSE - */ -uint32_t rtw_end_of_queue_search(_list *queue, _list *pelement); -_list* rtw_get_queue_head(_queue *queue); -/*************************** End Queues *******************************/ - -/*************************** Time Management *******************************/ - -/** - * @brief Get the count of ticks since the vTaskStartScheduler was called. - * @return The count of ticks since the vTaskStartScheduler was called. - */ -uint32_t rtw_get_current_time(void); - -/** - * @brief Convert system time to milliseconds. - * @param[in] systime: The system time to be converted. - * @return : The milliseconds that converted by the system time. - */ -uint32_t rtw_systime_to_ms(uint32_t systime); - -/** - * @brief Convert system time to seconds. - * @param[in] systime: The system time to be converted. - * @return : The seconds that converted by the system time. - */ -uint32_t rtw_systime_to_sec(uint32_t systime); - -/** - * @brief Convert milliseconds to system time. - * @param[in] systime: The milliseconds to be converted. - * @return : The system time that converted by the milliseconds. - */ -uint32_t rtw_ms_to_systime(uint32_t ms); - -/** - * @brief Convert seconds to system time. - * @param[in] systime: The seconds to be converted. - * @return : The system time that converted by the seconds. - */ -uint32_t rtw_sec_to_systime(uint32_t sec); - -/** - * @brief Get the passing time from the "start" in milliseconds. - * @param[in] start: The start time which is in system time format. - * @return : The passing time from "start" in milliseconds. - */ -int32_t rtw_get_passing_time_ms(uint32_t start); - -/** - * @brief Get the interval time from the "start" to "end" in milliseconds. - * @param[in] start: The start time which is in system time format. - * @param[in] end: The end time which is in system time format. - * @return : The interval time from "start" to "end" in milliseconds. - */ -int32_t rtw_get_time_interval_ms(uint32_t start, uint32_t end); -/*************************** End Time Management *******************************/ - -/** - * @brief This function suspends execution of the calling thread for "ms" milliseconds. - * @param[in] ms: The time that the function sleep in milliseconds - * @return None -*/ -void rtw_msleep_os(int ms); - -/** - * @brief This function suspends execution of the calling thread for "us" microseconds. - * @param[in] ms: The time that the function sleep in microseconds - * @return None -*/ -void rtw_usleep_os(int us); - -/** - * @brief This function converts the initial portion of the string to integer. - * @param[in] s: The pointer to the string to be converted. - * @return The converted value. -*/ -uint32_t rtw_atoi(uint8_t* s); - -/** - * @brief This function delays a task for the giving time in milliseconds. - * @param[in] ms: The amount of time, in milliseconds, that the calling task should block. - * @return None -*/ -void rtw_mdelay_os(int ms); - -/** - * @brief This function delays a task for the giving time in microseconds. - * @param[in] ms: The amount of time, in microseconds, that the calling task should block. - * @return None -*/ -void rtw_udelay_os(int us); - -/** - * @brief This function for forcing a context switch. - * @return None -*/ -void rtw_yield_os(void); - -/*************************** ATOMIC Integer *******************************/ - -/** - * @brief This function atomically sets the value of the variable. - * @param[in] v: Pointer of type atomic_t that to be set value. - * @param[in] i: Required value. - * @return None - * @note The guaranteed useful range of an atomic_t is only 24 bits. -*/ -void ATOMIC_SET(ATOMIC_T *v, int i); - -/** - * @brief This function atomically reads the value of the variable. - * @param[in] v: Pointer of type atomic_t that to be read. - * @return The value of the variable. - * @note The guaranteed useful range of an atomic_t is only 24 bits. -*/ -int ATOMIC_READ(ATOMIC_T *v); - -/** - * @brief This function adds "i" to the contained "v". - * @param[in] v: Pointer of type atomic_t. - * @param[in] i: value to add. - * @return None -*/ -void ATOMIC_ADD(ATOMIC_T *v, int i); - -/** - * @brief This function subtracts "i" from th econtained "v". - * @param[in] v: Pointer of type atomic_t. - * @param[in] i: value to subtract. - * @return None -*/ -void ATOMIC_SUB(ATOMIC_T *v, int i); - -/** - * @brief This function adds 1 to the contained "v". - * @param[in] v: Pointer of type atomic_t. - * @return None -*/ -void ATOMIC_INC(ATOMIC_T *v); - -/** - * @brief This function subtracts 1 from th econtained "v". - * @param[in] v: Pointer of type atomic_t. - * @return None -*/ -void ATOMIC_DEC(ATOMIC_T *v); - -/** - * @brief This function adds "i" to the contained "v" and returns the result. - * @param[in] v: Pointer of type atomic_t. - * @param[in] i: value to add. - * @return None -*/ -int ATOMIC_ADD_RETURN(ATOMIC_T *v, int i); - -/** - * @brief This function subtracts "i" from th econtained "v" and returns the result. - * @param[in] v: Pointer of type atomic_t. - * @param[in] i: value to subtract. - * @return None -*/ -int ATOMIC_SUB_RETURN(ATOMIC_T *v, int i); - -/** - * @brief This function adds 1 to the contained "v" and returns the result. - * @param[in] v: Pointer of type atomic_t. - * @return None -*/ -int ATOMIC_INC_RETURN(ATOMIC_T *v); - -/** - * @brief This function subtracts 1 from th econtained "v" and returns the result. - * @param[in] v: Pointer of type atomic_t. - * @return None -*/ -int ATOMIC_DEC_RETURN(ATOMIC_T *v); - -/** - * @brief This function subtracts 1 from th econtained "v" and test if the result equals 0. - * @param[in] v: Pointer of type atomic_t. - * @return 0: The result after subtracting 1 is 0 - * @return -1: The result after subtracting 1 is not 0 -*/ -int ATOMIC_DEC_AND_TEST(ATOMIC_T *v); -/*************************** End ATOMIC *******************************/ - -uint64_t rtw_modular64(uint64_t x, uint64_t y); - -/** - * @brief This function generates random bytes. - * @param[in] dst: The pointer to the buffer to store the random bytes. - * @param[in] size: The size of the random bytes. - * @return 0 -*/ -int rtw_get_random_bytes(void* dst, uint32_t size); - -/** - * @brief This function gets the available heap size. - * @return The value of the available heap size. -*/ -uint32_t rtw_getFreeHeapSize(void); - -void flush_signals_thread(void); - -/** - * @brief This function indicates that the WLAN needs to stay on which means cannot go into power saving mode. - * @return None - * @note Defining configUSE_WAKELOCK_PMU 1 in "FreeRTOSConfig.h" needs to be done before compiling, - * or this API won't be effective. - */ -void rtw_acquire_wakelock(void); - -/** - * @brief This function indicates that the WLAN does not need to stay on which means can go into power saving mode. - * @return None - * @note Defining configUSE_WAKELOCK_PMU 1 in "FreeRTOSConfig.h" needs to be done before compiling, - * or this API won't be effective. - */ -void rtw_release_wakelock(void); -void rtw_wakelock_timeout(uint32_t timeout); - -/*********************************** Thread related *****************************************/ - -/** - * @brief This function creates a new task and adds it to the list of tasks that are ready to run. - * @param[in] task: The task stucture which will store the task related infomation. - * @param[in] name: A descriptive name for the task. - * @param[in] stack_size: The size of the task stack specified as the variables the stack can hold. - * @param[in] priority: The priority at which the task should run. - * @param[in] func: The task entry function. - * @param[in] thctx: The pointer that will be used as the parameter for the task being created. - * @return pdPASS: The task was successfully created and added to a ready list. - * @return other error code defined in the file errors.h. - * @note For the task name, please do not use "rtw_little_wifi_mcu_thread", "rtw_check_in_req_state_thread", - "rtw_TDMA_change_state_thread", "xmit_thread", "recv_thread", "rtw_recv_tasklet", "rtw_xmit_tasklet", - "rtw_interrupt_thread", "cmd_thread", "usb_init", "MSC_BULK_CMD" and "MSC_BULK_DATA". - */ -int rtw_create_task(struct task_struct *task, const char *name, uint32_t stack_size, uint32_t priority, thread_func_t func, void *thctx); - -/** - * @brief This function deletes a task. - * @param[in] task: The task stucture which will be deleted. - * @return None - */ -void rtw_delete_task(struct task_struct * task); - -/** - * @brief This function wake up a task. - * @param[in] task: The task stucture which will be waked up. - * @return None - */ -void rtw_wakeup_task(struct task_struct *task); - -/** - * @brief This function creates a new worker thread. - * @param[in] worker_thread: The pointer to the worker thread stucture. - * @param[in] priority: The priority of the thread. - * @param[in] stack_size: The size of the thread stack specified as the variables the stack can hold. - * @param[in] event_queue_size: The queue size of events. - * @return SUCCESS/FAIL. - */ -int rtw_create_worker_thread( rtw_worker_thread_t* worker_thread, uint8_t priority, uint32_t stack_size, uint32_t event_queue_size ); - -/** - * @brief This function deletes a worker thread. - * @param[in] worker_thread: The pointer to the worker thread stucture to be deleted. - * @return SUCCESS/FAIL. - */ -int rtw_delete_worker_thread( rtw_worker_thread_t* worker_thread ); - -#if 0 //TODO -void rtw_init_delayed_work(struct delayed_work *dwork, work_func_t func, const char *name); -void rtw_deinit_delayed_work(struct delayed_work *dwork); -int rtw_queue_delayed_work(struct workqueue_struct *wq, struct delayed_work *dwork, uint32_t delay, void* context); -BOOLEAN rtw_cancel_delayed_work(struct delayed_work *dwork); -#endif - -/** - * @brief This function prints the name of the thread in DBG_INFO. - * @param[in] name: The name of the thread. - * @return None - */ -void rtw_thread_enter(char *name); - -/** - * @brief This function exits the calling thread. - * @return None - */ -void rtw_thread_exit(void); - -/** - * @brief This function gets the scheduler state of the calling thread. - * @return OS_SCHEDULER_NOT_STARTED - * @return OS_SCHEDULER_RUNNING - * @return OS_SCHEDULER_SUSPENDED - */ -uint8_t rtw_get_scheduler_state(void); - -/*************************** End Threads *******************************/ -#ifdef PLATFORM_LINUX -#define rtw_warn_on(condition) WARN_ON(condition) -#else -#define rtw_warn_on(condition) do {} while (0) -#endif - -/*************************** Timers *******************************/ - -/** - * @brief This function creates a new software timer instance. - * @param[in] pcTimerName: A text name that is assigned to the timer. - * @param[in] xTimerPeriodInTicks: The timer period which is defined in tick periods. - * @param[in] uxAutoReload: If uxAutoReload is set to pdTRUE then the timer will - * expire repeatedly with a frequency set by the xTimerPeriodInTicks parameter. If - * uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and - * enter the dormant state after it expires. - * @param[in] pvTimerID: An identifier that is assigned to the timer being created. - * @param[in] pxCallbackFunction: The function to call when the timer expires. - * @return If the timer is successfully create then a handle to the newly - * created timer is returned. If the timer cannot be created, then 0 is returned. - */ -_timerHandle rtw_timerCreate( const signed char *pcTimerName, - osdepTickType xTimerPeriodInTicks, - uint32_t uxAutoReload, - void * pvTimerID, - TIMER_FUN pxCallbackFunction ); - -/** - * @brief This function deletes a timer that was previously created using rtw_timerCreate. - * @param[in] xTimer: The handle of the timer being deleted. - * @param[in] xBlockTime: Specifies th etime, in ticks, that the calling task should be held in the Blocked - * State to wait for the delete command to be successfully sent to the timer command queue, - * should the queue already be full when rtw_timerDelete was called. - * @return pdFAIL will be returned if the delete command could not be sent to - * the timer command queue even after xTicksToWait ticks had passed. pdPASS will - * be returned if the command was successfully sent to the timer command queue. - * When the command is actually processed will depend on the priority of the - * timer service/daemon task relative to other tasks in the system. - */ -uint32_t rtw_timerDelete( _timerHandle xTimer, osdepTickType xBlockTime ); - -/** - * @brief This function queries a timer to see if it is active or dormant. - * @param[in] xTimer: The timer being queried. - * @return pdFALSE will be returned if the timer is dormant. A value other than - * pdFALSE will be returned if the timer is active. - * @note A timer will be dormant if: - * 1) It has been created but not started, or - * 2) It is an expired one-shot timer that has not been restarted. - */ -uint32_t rtw_timerIsTimerActive( _timerHandle xTimer ); - -/** - * @brief This function stops a timer that was previously started. - * @param[in] xTimer: The handle of the timer being stopped. - * @param[in] xBlockTime: Specifies the time, in ticks, that the calling task should - * be held in the Blocked state to wait for the stop command to be successfully - * sent to the timer command queue, should the queue already be full when - * rtw_timerStop() was called. - * @return pdFAIL will be returned if the stop command could not be sent to - * the timer command queue even after xTicksToWait ticks had passed. pdPASS will - * be returned if the command was successfully sent to the timer command queue. - * When the command is actually processed will depend on the priority of the - * timer service/daemon task relative to other tasks in the system. - */ -uint32_t rtw_timerStop( _timerHandle xTimer, osdepTickType xBlockTime ); - -/** - * @brief This function changes the period of a timer that was previously created. - * @param[in] xTimer: The handle of the timer that is having its period changed. - * @param[in] xNewPeriod: The new period for xTimer. - * @param[in] xBlockTime: Specifies the time, in ticks, that the calling task should - * be held in the Blocked state to wait for the change period command to be - * successfully sent to the timer command queue, should the queue already be - * full when rtw_timerChangePeriod() was called. - * @return pdFAIL will be returned if the change period command could not be - * sent to the timer command queue even after xTicksToWait ticks had passed. - * pdPASS will be returned if the command was successfully sent to the timer - * command queue. When the command is actually processed will depend on the - * priority of the timer service/daemon task relative to other tasks in the - * system. - */ -uint32_t rtw_timerChangePeriod( _timerHandle xTimer, - osdepTickType xNewPeriod, - osdepTickType xBlockTime ); - -void *rtw_timerGetID( _timerHandle xTimer ); - -uint32_t rtw_timerStart( _timerHandle xTimer, osdepTickType xBlockTime ); - -uint32_t rtw_timerStartFromISR( _timerHandle xTimer, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ); - -uint32_t rtw_timerStopFromISR( _timerHandle xTimer, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ); - -uint32_t rtw_timerResetFromISR( _timerHandle xTimer, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ); - -uint32_t rtw_timerChangePeriodFromISR( _timerHandle xTimer, - osdepTickType xNewPeriod, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ); - -uint32_t rtw_timerReset( _timerHandle xTimer, - osdepTickType xBlockTime ); - - -/*************************** End Timers *******************************/ -#define LIST_CONTAINOR(ptr, type, member) \ - ((type *)((char *)(ptr)-(SIZE_T)((char *)&((type *)ptr)->member - (char *)ptr))) - -#define time_after(a,b) ((long)(b) - (long)(a) < 0) -#define time_before(a,b) time_after(b,a) -#define time_after_eq(a,b) ((long)(a) - (long)(b) >= 0) -#define time_before_eq(a,b) time_after_eq(b,a) - -#define _RND(sz, r) ((((sz)+((r)-1))/(r))*(r)) -#define RND4(x) (((x >> 2) + (((x & 3) == 0) ? 0: 1)) << 2) - -__inline static uint32_t _RND4(uint32_t sz) -{ - uint32_t val; - - val = ((sz >> 2) + ((sz & 3) ? 1: 0)) << 2; - - return val; -} - -__inline static uint32_t _RND8(uint32_t sz) -{ - uint32_t val; - - val = ((sz >> 3) + ((sz & 7) ? 1: 0)) << 3; - - return val; -} - -__inline static uint32_t _RND128(uint32_t sz) -{ - uint32_t val; - - val = ((sz >> 7) + ((sz & 127) ? 1: 0)) << 7; - - return val; -} - -__inline static uint32_t _RND256(uint32_t sz) -{ - uint32_t val; - - val = ((sz >> 8) + ((sz & 255) ? 1: 0)) << 8; - - return val; -} - -__inline static uint32_t _RND512(uint32_t sz) -{ - uint32_t val; - - val = ((sz >> 9) + ((sz & 511) ? 1: 0)) << 9; - - return val; -} - -__inline static uint32_t bitshift(uint32_t bitmask) -{ - uint32_t i; - - for (i = 0; i <= 31; i++) - if (((bitmask>>i) & 0x1) == 1) break; - - return i; -} - -/* Macros for handling unaligned memory accesses */ - -#define RTW_GET_BE16(a) ((uint16_t) (((a)[0] << 8) | (a)[1])) -#define RTW_PUT_BE16(a, val) \ - do { \ - (a)[0] = ((uint16_t) (val)) >> 8; \ - (a)[1] = ((uint16_t) (val)) & 0xff; \ - } while (0) - -#define RTW_GET_LE16(a) ((uint16_t) (((a)[1] << 8) | (a)[0])) -#define RTW_PUT_LE16(a, val) \ - do { \ - (a)[1] = ((uint16_t) (val)) >> 8; \ - (a)[0] = ((uint16_t) (val)) & 0xff; \ - } while (0) - -#define RTW_GET_BE24(a) ((((uint32_t) (a)[0]) << 16) | (((uint32_t) (a)[1]) << 8) | \ - ((uint32_t) (a)[2])) -#define RTW_PUT_BE24(a, val) \ - do { \ - (a)[0] = (uint8_t) ((((uint32_t) (val)) >> 16) & 0xff); \ - (a)[1] = (uint8_t) ((((uint32_t) (val)) >> 8) & 0xff); \ - (a)[2] = (uint8_t) (((uint32_t) (val)) & 0xff); \ - } while (0) - -#define RTW_GET_BE32(a) ((((uint32_t) (a)[0]) << 24) | (((uint32_t) (a)[1]) << 16) | \ - (((uint32_t) (a)[2]) << 8) | ((uint32_t) (a)[3])) -#define RTW_PUT_BE32(a, val) \ - do { \ - (a)[0] = (uint8_t) ((((uint32_t) (val)) >> 24) & 0xff); \ - (a)[1] = (uint8_t) ((((uint32_t) (val)) >> 16) & 0xff); \ - (a)[2] = (uint8_t) ((((uint32_t) (val)) >> 8) & 0xff); \ - (a)[3] = (uint8_t) (((uint32_t) (val)) & 0xff); \ - } while (0) - -#define RTW_GET_LE32(a) ((((uint32_t) (a)[3]) << 24) | (((uint32_t) (a)[2]) << 16) | \ - (((uint32_t) (a)[1]) << 8) | ((uint32_t) (a)[0])) -#define RTW_PUT_LE32(a, val) \ - do { \ - (a)[3] = (uint8_t) ((((uint32_t) (val)) >> 24) & 0xff); \ - (a)[2] = (uint8_t) ((((uint32_t) (val)) >> 16) & 0xff); \ - (a)[1] = (uint8_t) ((((uint32_t) (val)) >> 8) & 0xff); \ - (a)[0] = (uint8_t) (((uint32_t) (val)) & 0xff); \ - } while (0) - -#define RTW_GET_BE64(a) ((((uint64_t) (a)[0]) << 56) | (((uint64_t) (a)[1]) << 48) | \ - (((uint64_t) (a)[2]) << 40) | (((uint64_t) (a)[3]) << 32) | \ - (((uint64_t) (a)[4]) << 24) | (((uint64_t) (a)[5]) << 16) | \ - (((uint64_t) (a)[6]) << 8) | ((uint64_t) (a)[7])) -#define RTW_PUT_BE64(a, val) \ - do { \ - (a)[0] = (uint8_t) (((uint64_t) (val)) >> 56); \ - (a)[1] = (uint8_t) (((uint64_t) (val)) >> 48); \ - (a)[2] = (uint8_t) (((uint64_t) (val)) >> 40); \ - (a)[3] = (uint8_t) (((uint64_t) (val)) >> 32); \ - (a)[4] = (uint8_t) (((uint64_t) (val)) >> 24); \ - (a)[5] = (uint8_t) (((uint64_t) (val)) >> 16); \ - (a)[6] = (uint8_t) (((uint64_t) (val)) >> 8); \ - (a)[7] = (uint8_t) (((uint64_t) (val)) & 0xff); \ - } while (0) - -#define RTW_GET_LE64(a) ((((uint64_t) (a)[7]) << 56) | (((uint64_t) (a)[6]) << 48) | \ - (((uint64_t) (a)[5]) << 40) | (((uint64_t) (a)[4]) << 32) | \ - (((uint64_t) (a)[3]) << 24) | (((uint64_t) (a)[2]) << 16) | \ - (((uint64_t) (a)[1]) << 8) | ((uint64_t) (a)[0])) - -struct osdep_service_ops { - uint8_t* (*rtw_vmalloc)(uint32_t sz); - uint8_t* (*rtw_zvmalloc)(uint32_t sz); - void (*rtw_vmfree)(uint8_t *pbuf, uint32_t sz); - uint8_t* (*rtw_malloc)(uint32_t sz); - uint8_t* (*rtw_zmalloc)(uint32_t sz); - void (*rtw_mfree)(uint8_t *pbuf, uint32_t sz); - void (*rtw_memcpy)(void* dst, void* src, uint32_t sz); - int (*rtw_memcmp)(void *dst, void *src, uint32_t sz); - void (*rtw_memset)(void *pbuf, int c, uint32_t sz); - void (*rtw_init_sema)(_sema *sema, int init_val); - void (*rtw_free_sema)(_sema *sema); - void (*rtw_up_sema)(_sema *sema); - void (*rtw_up_sema_from_isr)(_sema *sema); - uint32_t (*rtw_down_timeout_sema)(_sema *sema, uint32_t timeout); - void (*rtw_mutex_init)(_mutex *pmutex); - void (*rtw_mutex_free)(_mutex *pmutex); - void (*rtw_mutex_get)(_mutex *pmutex); - int (*rtw_mutex_get_timeout)(_mutex *pmutex, uint32_t timeout_ms); - void (*rtw_mutex_put)(_mutex *pmutex); - void (*rtw_enter_critical)(_lock *plock, _irqL *pirqL); - void (*rtw_exit_critical)(_lock *plock, _irqL *pirqL); - void (*rtw_enter_critical_from_isr)(_lock *plock, _irqL *pirqL); - void (*rtw_exit_critical_from_isr)(_lock *plock, _irqL *pirqL); - void (*rtw_enter_critical_bh)(_lock *plock, _irqL *pirqL); - void (*rtw_exit_critical_bh)(_lock *plock, _irqL *pirqL); - int (*rtw_enter_critical_mutex)(_mutex *pmutex, _irqL *pirqL); - void (*rtw_exit_critical_mutex)(_mutex *pmutex, _irqL *pirqL); - void (*rtw_spinlock_init)(_lock *plock); - void (*rtw_spinlock_free)(_lock *plock); - void (*rtw_spin_lock)(_lock *plock); - void (*rtw_spin_unlock)(_lock *plock); - void (*rtw_spinlock_irqsave)(_lock *plock, _irqL *irqL); - void (*rtw_spinunlock_irqsave)(_lock *plock, _irqL *irqL); - int (*rtw_init_xqueue)( _xqueue* queue, const char* name, uint32_t message_size, uint32_t number_of_messages ); - int (*rtw_push_to_xqueue)( _xqueue* queue, void* message, uint32_t timeout_ms ); - int (*rtw_pop_from_xqueue)( _xqueue* queue, void* message, uint32_t timeout_ms ); - int (*rtw_deinit_xqueue)( _xqueue* queue ); - uint32_t (*rtw_get_current_time)(void); - uint32_t (*rtw_systime_to_ms)(uint32_t systime); - uint32_t (*rtw_systime_to_sec)(uint32_t systime); - uint32_t (*rtw_ms_to_systime)(uint32_t ms); - uint32_t (*rtw_sec_to_systime)(uint32_t sec); - void (*rtw_msleep_os)(int ms); - void (*rtw_usleep_os)(int us); - void (*rtw_mdelay_os)(int ms); - void (*rtw_udelay_os)(int us); - void (*rtw_yield_os)(void); - void (*ATOMIC_SET)(ATOMIC_T *v, int i); - int (*ATOMIC_READ)(ATOMIC_T *v); - void (*ATOMIC_ADD)(ATOMIC_T *v, int i); - void (*ATOMIC_SUB)(ATOMIC_T *v, int i); - void (*ATOMIC_INC)(ATOMIC_T *v); - void (*ATOMIC_DEC)(ATOMIC_T *v); - int (*ATOMIC_ADD_RETURN)(ATOMIC_T *v, int i); - int (*ATOMIC_SUB_RETURN)(ATOMIC_T *v, int i); - int (*ATOMIC_INC_RETURN)(ATOMIC_T *v); - int (*ATOMIC_DEC_RETURN)(ATOMIC_T *v); - uint64_t (*rtw_modular64)(uint64_t x, uint64_t y); - int (*rtw_get_random_bytes)(void* dst, size_t size); - uint32_t (*rtw_getFreeHeapSize)(void); - int (*rtw_create_task)(struct task_struct *task, const char *name, uint32_t stack_size, uint32_t priority, thread_func_t func, void *thctx); - void (*rtw_delete_task)(struct task_struct *task); - void (*rtw_wakeup_task)(struct task_struct *task); - -#if 0 //TODO - void (*rtw_init_delayed_work)(struct delayed_work *dwork, work_func_t func, const char *name); - void (*rtw_deinit_delayed_work)(struct delayed_work *dwork); - int (*rtw_queue_delayed_work)(struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay, void* context); - BOOLEAN (*rtw_cancel_delayed_work)(struct delayed_work *dwork); -#endif - void (*rtw_thread_enter)(char *name); - void (*rtw_thread_exit)(void); - _timerHandle (*rtw_timerCreate)( const signed char *pcTimerName, - osdepTickType xTimerPeriodInTicks, - uint32_t uxAutoReload, - void * pvTimerID, - TIMER_FUN pxCallbackFunction ); - uint32_t (*rtw_timerDelete)( _timerHandle xTimer, - osdepTickType xBlockTime ); - uint32_t (*rtw_timerIsTimerActive)( _timerHandle xTimer ); - uint32_t (*rtw_timerStop)( _timerHandle xTimer, - osdepTickType xBlockTime ); - uint32_t (*rtw_timerChangePeriod)( _timerHandle xTimer, - osdepTickType xNewPeriod, - osdepTickType xBlockTime ); - void* (*rtw_timerGetID)( _timerHandle xTimer ); - uint32_t (*rtw_timerStart)( _timerHandle xTimer, - osdepTickType xBlockTime ); - uint32_t (*rtw_timerStartFromISR)( _timerHandle xTimer, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ); - - uint32_t (*rtw_timerStopFromISR)( _timerHandle xTimer, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ); - - uint32_t (*rtw_timerResetFromISR)( _timerHandle xTimer, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ); - - uint32_t (*rtw_timerChangePeriodFromISR)( _timerHandle xTimer, - osdepTickType xNewPeriod, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ); - - uint32_t (*rtw_timerReset)( _timerHandle xTimer, - osdepTickType xBlockTime ); - - void (*rtw_acquire_wakelock)(void); - void (*rtw_release_wakelock)(void); - void (*rtw_wakelock_timeout)(uint32_t timeoutMs); - uint8_t (*rtw_get_scheduler_state)(void); -}; - -/*\@}*/ - -#endif //#ifndef __OSDEP_SERVICE_H_ -//----------------------------------------------------------------------------// diff --git a/Firmware/RTLGDB/USDK/component/os/os_dep/include/tcm_heap.h b/Firmware/RTLGDB/USDK/component/os/os_dep/include/tcm_heap.h deleted file mode 100644 index 3dc1745..0000000 --- a/Firmware/RTLGDB/USDK/component/os/os_dep/include/tcm_heap.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef STRUCT_HEAP_H -#define STRUCT_HEAP_H - -//#include -#include -#include - - - -#define TCM_HEAP_SIZE (42*1024) // min size - -// MAX_BACKUP_SIZE in hal_soc_ps_monitor = 129*4, 0x1FFFFFFC - 129*4 = 0x1FFFFD18 ! -#define tcm_heap_size ((0x20000000 - (uint32_t)&tcm_heap - 768 + sizeof(heap_buf_t) - 1)/sizeof(heap_buf_t))*sizeof(heap_buf_t) - -/* NOTE: struct size must be a 2's power! */ -typedef struct _MemChunk -{ - struct _MemChunk *next; - int size; -} MemChunk; - -typedef MemChunk heap_buf_t; - -/// A heap -typedef struct Heap -{ - struct _MemChunk *FreeList; ///< Head of the free list -} Heap; - -/** - * Utility macro to allocate a heap of size \a size. - * - * \param name Variable name for the heap. - * \param size Heap size in bytes. - */ -#define HEAP_DEFINE_BUF(name, size) \ - heap_buf_t name[((size) + sizeof(heap_buf_t) - 1) / sizeof(heap_buf_t)] - -/// Initialize \a heap within the buffer pointed by \a memory which is of \a size bytes -void tcm_heap_init(void); - -/// Allocate a chunk of memory of \a size bytes from the heap -// void *tcm_heap_allocmem(int size); - -/// Free a chunk of memory of \a size bytes from the heap -// void tcm_heap_freemem(void *mem, int size); - -int tcm_heap_freeSpace(void); - -#define HNEW(heap, type) \ - (type*)tcm_heap_allocmem(heap, sizeof(type)) - -#define HNEWVEC(heap, type, nelem) \ - (type*)tcm_heap_allocmem(heap, sizeof(type) * (nelem)) - -#define HDELETE(heap, type, mem) \ - tcm_heap_freemem(heap, mem, sizeof(type)) - -#define HDELETEVEC(heap, type, nelem, mem) \ - tcm_heap_freemem(heap, mem, sizeof(type) * (nelem)) - -extern HEAP_DEFINE_BUF(tcm_heap, TCM_HEAP_SIZE); - -/** - * \name Compatibility interface with C standard library - * \{ - */ -void *tcm_heap_malloc(int size); -void *tcm_heap_calloc(int size); -void tcm_heap_free(void * mem); -void tcm_heap_dump(void); -/** \} */ - -#endif /* STRUCT_HEAP_H */ diff --git a/Firmware/RTLGDB/USDK/component/os/os_dep/osdep_service.c b/Firmware/RTLGDB/USDK/component/os/os_dep/osdep_service.c deleted file mode 100644 index 6cd68a2..0000000 --- a/Firmware/RTLGDB/USDK/component/os/os_dep/osdep_service.c +++ /dev/null @@ -1,1309 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - ******************************************************************************/ - -#include -#include "tcm_heap.h" -#define OSDEP_DBG(x, ...) do {} while(0) - -extern struct osdep_service_ops osdep_service; - -#ifdef CONFIG_LITTLE_ENDIAN -uint16_t -_htons(uint16_t n) -{ - return ((n & 0xff) << 8) | ((n & 0xff00) >> 8); -} - -uint16_t -_ntohs(uint16_t n) -{ - return _htons(n); -} - -uint32_t -_htonl(uint32_t n) -{ - return ((n & 0xff) << 24) | - ((n & 0xff00) << 8) | - ((n & 0xff0000UL) >> 8) | - ((n & 0xff000000UL) >> 24); -} - -uint32_t -_ntohl(uint32_t n) -{ - return _htonl(n); -} - -#endif /* CONFIG_LITTLE_ENDIAN */ -/* -* Translate the OS dependent @param error_code to OS independent RTW_STATUS_CODE -* @return: one of RTW_STATUS_CODE -*/ -int RTW_STATUS_CODE(int error_code) -{ - if(error_code >= 0) - return _SUCCESS; - - return _FAIL; -} - -uint32_t rtw_atoi(uint8_t* s) -{ - int num=0,flag=0; - int i; - - for(i=0;i<=strlen((char *)s);i++) - { - if(s[i] >= '0' && s[i] <= '9') - num = num * 10 + s[i] -'0'; - else if(s[0] == '-' && i==0) - flag =1; - else - break; - } - - if(flag == 1) - num = num * -1; - - return(num); -} -void *tcm_heap_malloc(int size); -void *tcm_heap_calloc(int size); -uint8_t* _rtw_vmalloc(uint32_t sz) -{ - uint8_t *pbuf = NULL; -#if CONFIG_USE_TCM_HEAP - pbuf = tcm_heap_malloc(sz); -#endif - if(pbuf==NULL){ - if(osdep_service.rtw_vmalloc) { - pbuf = osdep_service.rtw_vmalloc(sz); - } else - OSDEP_DBG("Not implement osdep service: rtw_vmalloc"); - } - return pbuf; -} - -uint8_t* _rtw_zvmalloc(uint32_t sz) -{ - uint8_t *pbuf = NULL; -#if CONFIG_USE_TCM_HEAP - pbuf = tcm_heap_calloc(sz); -#endif - if(pbuf==NULL){ - if(osdep_service.rtw_zvmalloc) { - pbuf = osdep_service.rtw_zvmalloc(sz); - } else - OSDEP_DBG("Not implement osdep service: rtw_zvmalloc"); - } - return pbuf; -} - -void _rtw_vmfree(uint8_t *pbuf, uint32_t sz) -{ - -#if CONFIG_USE_TCM_HEAP - if( (uint32_t)pbuf > 0x1FFF0000 && (uint32_t)pbuf < 0x20000000 ) - tcm_heap_free(pbuf); - else -#endif - { - if(osdep_service.rtw_vmfree) { - osdep_service.rtw_vmfree(pbuf, sz); - } else - OSDEP_DBG("Not implement osdep service: rtw_vmfree"); - } -} - -uint8_t* _rtw_malloc(uint32_t sz) -{ - if(osdep_service.rtw_malloc) { - uint8_t *pbuf = osdep_service.rtw_malloc(sz); - return pbuf; - } else - OSDEP_DBG("Not implement osdep service: rtw_malloc"); - - return NULL; -} - -uint8_t* _rtw_zmalloc(uint32_t sz) -{ - if(osdep_service.rtw_zmalloc) { - uint8_t *pbuf = osdep_service.rtw_zmalloc(sz); - return pbuf; - } else - OSDEP_DBG("Not implement osdep service: rtw_zmalloc"); - - return NULL; -} - -void _rtw_mfree(uint8_t *pbuf, uint32_t sz) -{ - if(osdep_service.rtw_mfree) { - osdep_service.rtw_mfree(pbuf, sz); - } else - OSDEP_DBG("Not implement osdep service: rtw_mfree"); -} - -#ifdef CONFIG_MEM_MONITOR -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK -_list mem_table; -int mem_used_num; -#endif -int min_free_heap_size; - -void init_mem_monitor(_list *pmem_table, int *used_num) -{ -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK - rtw_init_listhead(pmem_table); - *used_num = 0; -#endif - min_free_heap_size = rtw_getFreeHeapSize(); -} - -void deinit_mem_monitor(_list *pmem_table, int *used_num) -{ -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK - _list *plist; - struct mem_entry *mem_entry; - - if(*used_num > 0) - DBG_ERR("Have %d mem_entry kept in monitor", *used_num); - else - DBG_INFO("No mem_entry kept in monitor"); - - save_and_cli(); - - while (rtw_end_of_queue_search(pmem_table, get_next(pmem_table)) == _FALSE) { - plist = get_next(pmem_table); - mem_entry = LIST_CONTAINOR(plist, struct mem_entry, list); - - DBG_ERR("Not release memory at %p with size of %d", mem_entry->ptr, mem_entry->size); - - rtw_list_delete(plist); - _rtw_mfree((uint8_t *) mem_entry, sizeof(struct mem_entry)); - } - - restore_flags(); -#endif -} - -void add_mem_usage(_list *pmem_table, void *ptr, int size, int *used_num, int flag) -{ - int free_heap_size = rtw_getFreeHeapSize(); -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK - struct mem_entry *mem_entry; -#endif - if(ptr == NULL) { - DBG_ERR("Catch a mem alloc fail with size of %d, current heap free size = %d", size, free_heap_size); - return; - } - else{ - if(flag == MEM_MONITOR_FLAG_WPAS) - DBG_INFO("Alloc memory at %p with size of %d", ptr, size); - else - DBG_INFO("Alloc memory at %p with size of %d", ptr, size); - } -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK - mem_entry = (struct mem_entry *) _rtw_malloc(sizeof(struct mem_entry)); - - if(mem_entry == NULL) { - DBG_ERR("Fail to alloc mem_entry"); - return; - } - - memset(mem_entry, 0, sizeof(struct mem_entry)); - mem_entry->ptr = ptr; - mem_entry->size = size; - - save_and_cli(); - rtw_list_insert_head(&mem_entry->list, pmem_table); - restore_flags(); - - *used_num ++; -#endif - if(min_free_heap_size > free_heap_size) - min_free_heap_size = free_heap_size; -} - -void del_mem_usage(_list *pmem_table, void *ptr, int *used_num, int flag) -{ -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK - _list *plist; - struct mem_entry *mem_entry = NULL; - - if(ptr == NULL) - return; - - if(flag == MEM_MONITOR_FLAG_WPAS) - DBG_INFO("Free memory at %p", ptr); - else - DBG_INFO("Free memory at %p", ptr); - - save_and_cli(); - - plist = get_next(pmem_table); - while ((rtw_end_of_queue_search(pmem_table, plist)) == _FALSE) - { - mem_entry = LIST_CONTAINOR(plist, struct mem_entry, list); - if(mem_entry->ptr == ptr) { - rtw_list_delete(plist); - break; - } - plist = get_next(plist); - } - - restore_flags(); - - if(plist == pmem_table) - DBG_ERR("Fail to find the mem_entry in mem table"); - else { - *used_num --; - _rtw_mfree((uint8_t *) mem_entry, sizeof(struct mem_entry)); - } -#endif -} - -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK -int get_mem_usage(_list *pmem_table) -{ - _list *plist; - struct mem_entry *mem_entry; - int mem_usage = 0; - int entry_num = 0; - - save_and_cli(); - - if((plist = get_next(pmem_table)) == NULL) { - DBG_ERR("No mem table available\n"); - restore_flags(); - return 0; - } - - while (rtw_end_of_queue_search(pmem_table, plist) == _FALSE) { - entry_num ++; - mem_entry = LIST_CONTAINOR(plist, struct mem_entry, list); - mem_usage += mem_entry->size; - - DBG_INFO("size of mem_entry(%d)=%d\n", entry_num, mem_entry->size); - plist = get_next(plist); - } - - restore_flags(); - - DBG_INFO("Get %d mem_entry\n", entry_num); - - return mem_usage; -} -#endif - - -uint8_t* rtw_vmalloc(uint32_t sz) -{ - uint8_t *pbuf = _rtw_vmalloc(sz); -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK - add_mem_usage(&mem_table, pbuf, sz, &mem_used_num, MEM_MONITOR_FLAG_WIFI_DRV); -#else - add_mem_usage(NULL, pbuf, sz, NULL, MEM_MONITOR_FLAG_WIFI_DRV); -#endif - return pbuf; -} - -uint8_t* rtw_zvmalloc(uint32_t sz) -{ - uint8_t *pbuf = _rtw_zvmalloc(sz); -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK - add_mem_usage(&mem_table, pbuf, sz, &mem_used_num, MEM_MONITOR_FLAG_WIFI_DRV); -#else - add_mem_usage(NULL, pbuf, sz, NULL, MEM_MONITOR_FLAG_WIFI_DRV); -#endif - return pbuf; -} - -void rtw_vmfree(uint8_t *pbuf, uint32_t sz) -{ - _rtw_vmfree(pbuf, sz); -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK - del_mem_usage(&mem_table, pbuf, &mem_used_num, MEM_MONITOR_FLAG_WIFI_DRV); -#else - del_mem_usage(NULL, pbuf, NULL, MEM_MONITOR_FLAG_WIFI_DRV); -#endif -} - -uint8_t* rtw_malloc(uint32_t sz) -{ - uint8_t *pbuf = _rtw_malloc(sz); -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK - add_mem_usage(&mem_table, pbuf, sz, &mem_used_num, MEM_MONITOR_FLAG_WIFI_DRV); -#else - add_mem_usage(NULL, pbuf, sz, NULL, MEM_MONITOR_FLAG_WIFI_DRV); -#endif - return pbuf; -} - -uint8_t* rtw_zmalloc(uint32_t sz) -{ - uint8_t *pbuf = _rtw_zmalloc(sz); -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK - add_mem_usage(&mem_table, pbuf, sz, &mem_used_num, MEM_MONITOR_FLAG_WIFI_DRV); -#else - add_mem_usage(NULL, pbuf, sz, NULL, MEM_MONITOR_FLAG_WIFI_DRV); -#endif - return pbuf; -} - -void rtw_mfree(uint8_t *pbuf, uint32_t sz) -{ - _rtw_mfree(pbuf, sz); -#if CONFIG_MEM_MONITOR & MEM_MONITOR_LEAK - del_mem_usage(&mem_table, pbuf, &mem_used_num, MEM_MONITOR_FLAG_WIFI_DRV); -#else - del_mem_usage(NULL, pbuf, NULL, MEM_MONITOR_FLAG_WIFI_DRV); -#endif -} -#endif - -void* rtw_malloc2d(int h, int w, int size) -{ - int j; - - void **a = (void **) rtw_zmalloc( h*sizeof(void *) + h*w*size ); - if(a == NULL) - { - OSDEP_DBG("%s: alloc memory fail!\n", __FUNCTION__); - return NULL; - } - - for( j=0; jqueue)); - rtw_spinlock_init(&(pqueue->lock)); -} - -uint32_t rtw_queue_empty(_queue *pqueue) -{ - return (rtw_is_list_empty(&(pqueue->queue))); -} - - -uint32_t rtw_end_of_queue_search(_list *head, _list *plist) -{ - if (head == plist) - return _TRUE; - else - return _FALSE; -} - -#if 1 -void rtw_spinlock_init(_lock *plock) -{ - if(osdep_service.rtw_spinlock_init) - osdep_service.rtw_spinlock_init(plock); - else - OSDEP_DBG("Not implement osdep service: rtw_spinlock_init"); -} - -void rtw_spinlock_free(_lock *plock) -{ - if(osdep_service.rtw_spinlock_free) - osdep_service.rtw_spinlock_free(plock); - else - OSDEP_DBG("Not implement osdep service: rtw_spinlock_free"); -} - -void rtw_spin_lock(_lock *plock) -{ - if(osdep_service.rtw_spin_lock) - osdep_service.rtw_spin_lock(plock); - else - OSDEP_DBG("Not implement osdep service: rtw_spin_lock"); -} - -void rtw_spin_unlock(_lock *plock) -{ - if(osdep_service.rtw_spin_unlock) - osdep_service.rtw_spin_unlock(plock); - else - OSDEP_DBG("Not implement osdep service: rtw_spin_unlock"); -} - -void rtw_spinlock_irqsave(_lock *plock, _irqL *irqL) -{ - if(osdep_service.rtw_spinlock_irqsave) - osdep_service.rtw_spinlock_irqsave(plock, irqL); - else - OSDEP_DBG("Not implement osdep service: rtw_spinlock_irqsave"); -} - -void rtw_spinunlock_irqsave(_lock *plock, _irqL *irqL) -{ - if(osdep_service.rtw_spinunlock_irqsave) - osdep_service.rtw_spinunlock_irqsave(plock, irqL); - else - OSDEP_DBG("Not implement osdep service: rtw_spinunlock_irqsave"); -} -#endif - -int rtw_init_xqueue( _xqueue* queue, const char* name, uint32_t message_size, uint32_t number_of_messages ) -{ - if(osdep_service.rtw_init_xqueue) - return (int)osdep_service.rtw_init_xqueue(queue, name, message_size, number_of_messages); - else - OSDEP_DBG("Not implement osdep service: rtw_init_xqueue"); - - return FAIL; -} - -int rtw_push_to_xqueue( _xqueue* queue, void* message, uint32_t timeout_ms ) -{ - if(osdep_service.rtw_push_to_xqueue) - return (int)osdep_service.rtw_push_to_xqueue(queue, message, timeout_ms); - else - OSDEP_DBG("Not implement osdep service: rtw_push_to_xqueue"); - - return FAIL; -} - -int rtw_pop_from_xqueue( _xqueue* queue, void* message, uint32_t timeout_ms ) -{ - if(osdep_service.rtw_pop_from_xqueue) - return (int)osdep_service.rtw_pop_from_xqueue(queue, message, timeout_ms); - else - OSDEP_DBG("Not implement osdep service: rtw_pop_from_xqueue"); - - return FAIL; -} - -int rtw_deinit_xqueue( _xqueue* queue ) -{ - if(osdep_service.rtw_deinit_xqueue) - return (int)osdep_service.rtw_deinit_xqueue(queue); - else - OSDEP_DBG("Not implement osdep service: rtw_deinit_xqueue"); - - return FAIL; -} - -#if 0 -void rtw_init_queue(_queue *pqueue) -{ - rtw_init_listhead(&(pqueue->queue)); - rtw_mutex_init(&(pqueue->lock)); -} - -void rtw_deinit_queue(_queue *pqueue) -{ - rtw_mutex_free(&(pqueue->lock)); -} - -uint32_t rtw_is_queue_empty(_queue *pqueue) -{ - return (rtw_is_list_empty(&(pqueue->queue))); -} - -uint32_t rtw_end_of_queue_search(_list *head, _list *plist) -{ - if (head == plist) - return _TRUE; - - return _FALSE; -} - -_list *rtw_get_queue_head(_queue *queue) -{ - return (&(queue->queue)); -} -#endif - -uint32_t rtw_get_current_time(void) -{ - if(osdep_service.rtw_get_current_time) - return osdep_service.rtw_get_current_time(); - else - OSDEP_DBG("Not implement osdep service: rtw_get_current_time"); - - return 0; -} - -uint32_t rtw_systime_to_ms(uint32_t systime) -{ - if(osdep_service.rtw_systime_to_ms) - return osdep_service.rtw_systime_to_ms(systime); - else - OSDEP_DBG("Not implement osdep service: rtw_systime_to_ms"); - - return 0; -} - -uint32_t rtw_systime_to_sec(uint32_t systime) -{ - if(osdep_service.rtw_systime_to_sec) - return osdep_service.rtw_systime_to_sec(systime); - else - OSDEP_DBG("Not implement osdep service: rtw_systime_to_sec"); - - return 0; -} - -uint32_t rtw_ms_to_systime(uint32_t ms) -{ - if(osdep_service.rtw_ms_to_systime) - return osdep_service.rtw_ms_to_systime(ms); - else - OSDEP_DBG("Not implement osdep service: rtw_ms_to_systime"); - - return 0; -} - -uint32_t rtw_sec_to_systime(uint32_t sec) -{ - if(osdep_service.rtw_sec_to_systime) - return osdep_service.rtw_sec_to_systime(sec); - else - OSDEP_DBG("Not implement osdep service: rtw_sec_to_systime"); - - return 0; -} - -// the input parameter start use the same unit as returned by rtw_get_current_time -int32_t rtw_get_passing_time_ms(uint32_t start) -{ - return rtw_systime_to_ms(rtw_get_current_time() - start); -} - -int32_t rtw_get_time_interval_ms(uint32_t start, uint32_t end) -{ - return rtw_systime_to_ms(end - start); -} - -void rtw_msleep_os(int ms) -{ - if(osdep_service.rtw_msleep_os) - osdep_service.rtw_msleep_os(ms); - else - OSDEP_DBG("Not implement osdep service: rtw_msleep_os"); -} - -void rtw_usleep_os(int us) -{ - if(osdep_service.rtw_usleep_os) - osdep_service.rtw_usleep_os(us); - else - OSDEP_DBG("Not implement osdep service: rtw_usleep_os"); -} - -void rtw_mdelay_os(int ms) -{ - if(osdep_service.rtw_mdelay_os) - osdep_service.rtw_mdelay_os(ms); - else - OSDEP_DBG("Not implement osdep service: rtw_mdelay_os"); -} - -void rtw_udelay_os(int us) -{ - if(osdep_service.rtw_udelay_os) - osdep_service.rtw_udelay_os(us); - else - OSDEP_DBG("Not implement osdep service: rtw_udelay_os"); -} - -void rtw_yield_os(void) -{ - if(osdep_service.rtw_yield_os) - osdep_service.rtw_yield_os(); - else - OSDEP_DBG("Not implement osdep service: rtw_yield_os"); -} - -void ATOMIC_SET(ATOMIC_T *v, int i) -{ - if(osdep_service.ATOMIC_SET) - osdep_service.ATOMIC_SET(v, i); - else - OSDEP_DBG("Not implement osdep service: ATOMIC_SET"); -} - -int ATOMIC_READ(ATOMIC_T *v) -{ - if(osdep_service.ATOMIC_READ) - return osdep_service.ATOMIC_READ(v); - else - OSDEP_DBG("Not implement osdep service: ATOMIC_READ"); - - return 0; -} - -void ATOMIC_ADD(ATOMIC_T *v, int i) -{ - if(osdep_service.ATOMIC_ADD) - osdep_service.ATOMIC_ADD(v, i); - else - OSDEP_DBG("Not implement osdep service: ATOMIC_ADD"); -} - -void ATOMIC_SUB(ATOMIC_T *v, int i) -{ - if(osdep_service.ATOMIC_SUB) - osdep_service.ATOMIC_SUB(v, i); - else - OSDEP_DBG("Not implement osdep service: ATOMIC_SUB"); -} - -void ATOMIC_INC(ATOMIC_T *v) -{ - if(osdep_service.ATOMIC_INC) - osdep_service.ATOMIC_INC(v); - else - OSDEP_DBG("Not implement osdep service: ATOMIC_INC"); -} - -void ATOMIC_DEC(ATOMIC_T *v) -{ - if(osdep_service.ATOMIC_DEC) - osdep_service.ATOMIC_DEC(v); - else - OSDEP_DBG("Not implement osdep service: ATOMIC_DEC"); -} - -int ATOMIC_ADD_RETURN(ATOMIC_T *v, int i) -{ - if(osdep_service.ATOMIC_ADD_RETURN) - return osdep_service.ATOMIC_ADD_RETURN(v, i); - else - OSDEP_DBG("Not implement osdep service: ATOMIC_ADD_RETURN"); - - return 0; -} - -int ATOMIC_SUB_RETURN(ATOMIC_T *v, int i) -{ - if(osdep_service.ATOMIC_SUB_RETURN) - return osdep_service.ATOMIC_SUB_RETURN(v, i); - else - OSDEP_DBG("Not implement osdep service: ATOMIC_SUB_RETURN"); - - return 0; -} - -int ATOMIC_INC_RETURN(ATOMIC_T *v) -{ - if(osdep_service.ATOMIC_INC_RETURN) - return osdep_service.ATOMIC_INC_RETURN(v); - else - OSDEP_DBG("Not implement osdep service: ATOMIC_INC_RETURN"); - - return 0; -} - -int ATOMIC_DEC_RETURN(ATOMIC_T *v) -{ - if(osdep_service.ATOMIC_DEC_RETURN) - return osdep_service.ATOMIC_DEC_RETURN(v); - else - OSDEP_DBG("Not implement osdep service: ATOMIC_DEC_RETURN"); - - return 0; -} - -int ATOMIC_DEC_AND_TEST(ATOMIC_T *v) -{ - return ATOMIC_DEC_RETURN(v) == 0; -} - -uint64_t rtw_modular64(uint64_t x, uint64_t y) -{ - if(osdep_service.rtw_modular64) - return osdep_service.rtw_modular64(x, y); - else - OSDEP_DBG("Not implement osdep service: rtw_modular64"); - - return 0; -} - -int rtw_get_random_bytes(void* dst, uint32_t size) -{ - if(osdep_service.rtw_get_random_bytes) - return osdep_service.rtw_get_random_bytes(dst, size); - else - OSDEP_DBG("Not implement osdep service: rtw_get_random_bytes"); - - return 0; -} - -uint32_t rtw_getFreeHeapSize(void) -{ - if(osdep_service.rtw_getFreeHeapSize) - return osdep_service.rtw_getFreeHeapSize(); - else - OSDEP_DBG("Not implement osdep service: rtw_getFreeHeapSize"); - - return 0; -} - -int rtw_netif_queue_stopped(void *pnetdev) -{ - return 0; -} - -void rtw_netif_wake_queue(void *pnetdev) -{ -} - -void rtw_netif_start_queue(void *pnetdev) -{ -} - -void rtw_netif_stop_queue(void *pnetdev) -{ -} - -void flush_signals_thread(void) -{ -} - -void rtw_acquire_wakelock(void) -{ - if (osdep_service.rtw_acquire_wakelock) - osdep_service.rtw_acquire_wakelock(); - else - OSDEP_DBG("Not implement osdep service: rtw_acquire_wakelock"); -} - -void rtw_release_wakelock(void) -{ - if (osdep_service.rtw_release_wakelock) - osdep_service.rtw_release_wakelock(); - else - OSDEP_DBG("Not implement osdep service: rtw_release_wakelock"); -} - -void rtw_wakelock_timeout(uint32_t timeoutms) -{ - if (osdep_service.rtw_wakelock_timeout) - osdep_service.rtw_wakelock_timeout(timeoutms); - else - OSDEP_DBG("Not implement osdep service: rtw_wakelock_timeout"); -} - -int rtw_create_task(struct task_struct *task, const char *name, - uint32_t stack_size, uint32_t priority, thread_func_t func, void *thctx) -{ - if(osdep_service.rtw_create_task) - return osdep_service.rtw_create_task(task, name, stack_size, priority, func, thctx); - else - OSDEP_DBG("Not implement osdep service: rtw_create_task"); - return 1; -} -void rtw_delete_task(struct task_struct *task) -{ - if(osdep_service.rtw_delete_task) - osdep_service.rtw_delete_task(task); - else - OSDEP_DBG("Not implement osdep service: rtw_delete_task"); - - return; -} -void rtw_wakeup_task(struct task_struct *task) -{ - if(osdep_service.rtw_wakeup_task) - osdep_service.rtw_wakeup_task(task); - else - OSDEP_DBG("Not implement osdep service: rtw_wakeup_task"); - - return; -} - -static void worker_thread_main( void *arg ) -{ - rtw_worker_thread_t* worker_thread = (rtw_worker_thread_t*) arg; - - while ( 1 ) - { - rtw_event_message_t message; - - if ( rtw_pop_from_xqueue( &worker_thread->event_queue, &message, RTW_WAIT_FOREVER ) == SUCCESS ) - { - message.function(message.buf, message.buf_len, message.flags, message.user_data); - if(message.buf){ - //printf("\n!!!!!Free %p(%d)\n", message.buf, message.buf_len); - _rtw_mfree(message.buf, message.buf_len); - } - } - } -} - -int rtw_create_worker_thread( rtw_worker_thread_t* worker_thread, uint8_t priority, uint32_t stack_size, uint32_t event_queue_size ) -{ - if(NULL == worker_thread) - return FAIL; - - memset( worker_thread, 0, sizeof( *worker_thread ) ); - - if ( rtw_init_xqueue( &worker_thread->event_queue, "worker queue", sizeof(rtw_event_message_t), event_queue_size ) != SUCCESS ) - { - return FAIL; - } - - if ( !rtw_create_task( &worker_thread->thread, "worker thread", stack_size, priority, worker_thread_main, (void*) worker_thread ) ) - { - rtw_deinit_xqueue( &worker_thread->event_queue ); - return FAIL; - } - - return SUCCESS; -} - -int rtw_delete_worker_thread( rtw_worker_thread_t* worker_thread ) -{ - if(NULL == worker_thread) - return FAIL; - - rtw_deinit_xqueue( &worker_thread->event_queue ); - - rtw_delete_task(&worker_thread->thread); - - return SUCCESS; -} - -_timerHandle rtw_timerCreate( const signed char *pcTimerName, - osdepTickType xTimerPeriodInTicks, - uint32_t uxAutoReload, - void * pvTimerID, - TIMER_FUN pxCallbackFunction ) -{ - if(osdep_service.rtw_timerCreate) - return osdep_service.rtw_timerCreate(pcTimerName, xTimerPeriodInTicks, uxAutoReload, - pvTimerID, pxCallbackFunction); - else - OSDEP_DBG("Not implement osdep service: rtw_timerCreate"); - - return 0; -} - -uint32_t rtw_timerDelete( _timerHandle xTimer, - osdepTickType xBlockTime ) -{ - if(osdep_service.rtw_timerDelete) - return osdep_service.rtw_timerDelete( xTimer, xBlockTime ); - else - OSDEP_DBG("Not implement osdep service: rtw_timerDelete"); - - return 0; -} - -uint32_t rtw_timerIsTimerActive( _timerHandle xTimer ) -{ - if(osdep_service.rtw_timerIsTimerActive) - return osdep_service.rtw_timerIsTimerActive(xTimer); - else - OSDEP_DBG("Not implement osdep service: rtw_timerIsTimerActive"); - - return 0; -} - -uint32_t rtw_timerStop( _timerHandle xTimer, - osdepTickType xBlockTime ) -{ - if(osdep_service.rtw_timerStop) - return osdep_service.rtw_timerStop(xTimer, xBlockTime); - else - OSDEP_DBG("Not implement osdep service: rtw_timerStop"); - - return 0; -} - -uint32_t rtw_timerChangePeriod( _timerHandle xTimer, - osdepTickType xNewPeriod, - osdepTickType xBlockTime ) -{ - if(osdep_service.rtw_timerChangePeriod) - return osdep_service.rtw_timerChangePeriod(xTimer, xNewPeriod, xBlockTime); - else - OSDEP_DBG("Not implement osdep service: rtw_timerChangePeriod"); - - return 0; -} - -void *rtw_timerGetID( _timerHandle xTimer ) -{ - if(osdep_service.rtw_timerGetID) - return osdep_service.rtw_timerGetID(xTimer); - else - OSDEP_DBG("Not implement osdep service: rtw_timerGetID"); - - return NULL; -} - -uint32_t rtw_timerStart( _timerHandle xTimer, osdepTickType xBlockTime ) -{ - if(osdep_service.rtw_timerStart) - return osdep_service.rtw_timerStart(xTimer, xBlockTime); - else - OSDEP_DBG("Not implement osdep service: rtw_timerStart"); - - return 0; -} - -uint32_t rtw_timerStartFromISR( _timerHandle xTimer, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ) -{ - if(osdep_service.rtw_timerStartFromISR) - return osdep_service.rtw_timerStartFromISR(xTimer, pxHigherPriorityTaskWoken); - else - OSDEP_DBG("Not implement osdep service: rtw_timerStartFromISR"); - - return 0; -} - -uint32_t rtw_timerStopFromISR( _timerHandle xTimer, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ) -{ - if(osdep_service.rtw_timerStopFromISR) - return osdep_service.rtw_timerStopFromISR(xTimer, pxHigherPriorityTaskWoken); - else - OSDEP_DBG("Not implement osdep service: rtw_timerStopFromISR"); - - return 0; -} - -uint32_t rtw_timerResetFromISR( _timerHandle xTimer, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ) -{ - if(osdep_service.rtw_timerResetFromISR) - return osdep_service.rtw_timerResetFromISR(xTimer, pxHigherPriorityTaskWoken); - else - OSDEP_DBG("Not implement osdep service: rtw_timerResetFromISR"); - - return 0; -} - -uint32_t rtw_timerChangePeriodFromISR( _timerHandle xTimer, - osdepTickType xNewPeriod, - osdepBASE_TYPE *pxHigherPriorityTaskWoken ) -{ - if(osdep_service.rtw_timerChangePeriodFromISR) - return osdep_service.rtw_timerChangePeriodFromISR(xTimer, xNewPeriod, pxHigherPriorityTaskWoken); - else - OSDEP_DBG("Not implement osdep service: rtw_timerChangePeriodFromISR"); - - return 0; -} - -uint32_t rtw_timerReset( _timerHandle xTimer, - osdepTickType xBlockTime ) -{ - if(osdep_service.rtw_timerReset) - return osdep_service.rtw_timerReset(xTimer, xBlockTime); - else - OSDEP_DBG("Not implement osdep service: rtw_timerReset"); - - return 0; -} - - -#if 0 //TODO -void rtw_init_delayed_work(struct delayed_work *dwork, work_func_t func, const char *name) -{ - if(osdep_service.rtw_init_delayed_work) - osdep_service.rtw_init_delayed_work(dwork, func, name); - else - OSDEP_DBG("Not implement osdep service: rtw_init_delayed_work"); - - return; -} - -void rtw_deinit_delayed_work(struct delayed_work *dwork) -{ - if(osdep_service.rtw_deinit_delayed_work) - osdep_service.rtw_deinit_delayed_work(dwork); - else - OSDEP_DBG("Not implement osdep service: rtw_deinit_delayed_work"); - - return; -} - -int rtw_queue_delayed_work(struct workqueue_struct *wq, - struct delayed_work *dwork, uint32_t delay, void* context) -{ - if(osdep_service.rtw_queue_delayed_work) - osdep_service.rtw_queue_delayed_work(wq, dwork, delay, context); - else - OSDEP_DBG("Not implement osdep service: rtw_queue_delayed_work"); - - return; -} - -BOOLEAN rtw_cancel_delayed_work(struct delayed_work *dwork) -{ - if(osdep_service.rtw_cancel_delayed_work) - osdep_service.rtw_cancel_delayed_work(dwork); - else - OSDEP_DBG("Not implement osdep service: rtw_cancel_delayed_work"); - - return; -} -#endif -void rtw_thread_enter(char *name) -{ - if(osdep_service.rtw_thread_enter) - osdep_service.rtw_thread_enter(name); - else - OSDEP_DBG("Not implement osdep service: rtw_thread_enter"); -} - -void rtw_thread_exit() -{ - if(osdep_service.rtw_thread_exit) - osdep_service.rtw_thread_exit(); - else - OSDEP_DBG("Not implement osdep service: rtw_thread_exit"); -} - -uint8_t rtw_get_scheduler_state() -{ - // OS_SCHEDULER_NOT_STARTED 0 - // OS_SCHEDULER_RUNNING 1 - // OS_SCHEDULER_SUSPENDED 2 - // OS_SCHEDULER_UNREACHABLE 3 - if(osdep_service.rtw_get_scheduler_state) - return osdep_service.rtw_get_scheduler_state(); - else{ - OSDEP_DBG("Not implement osdep service: rtw_get_scheduler_state"); - return 3; - } -} diff --git a/Firmware/RTLGDB/USDK/component/os/os_dep/tcm_heap.c b/Firmware/RTLGDB/USDK/component/os/os_dep/tcm_heap.c deleted file mode 100644 index cad9a0e..0000000 --- a/Firmware/RTLGDB/USDK/component/os/os_dep/tcm_heap.c +++ /dev/null @@ -1,347 +0,0 @@ -//#include -#include "tcm_heap.h" - -#include // memset() - -#include - -//#define _DEBUG - -#if CONFIG_USE_TCM_HEAP -#define FREE_FILL_CODE 0xDEAD -#define ALLOC_FILL_CODE 0xBEEF - -#define ROUND_UP2(x, pad) (((x) + ((pad) - 1)) & ~((pad) - 1)) - -//static -struct Heap g_tcm_heap; - -#if defined (__ICCARM__) -#pragma location=".tcm.heap" -#else -__attribute__((section(".tcm.heap"))) -#endif -HEAP_DEFINE_BUF(tcm_heap, TCM_HEAP_SIZE); -//unsigned char tcm_heap[TCM_HEAP_SIZE]; - -static int g_heap_inited = 0; -static _lock tcm_lock; - -extern void vPortSetExtFree( void (*free)( void *p ), uint32_t upper, uint32_t lower ); - -void tcm_heap_init(void) -{ - //#ifdef _DEBUG - //memset(memory, FREE_FILL_CODE, size); - //#endif - - //ASSERT2(((int)memory % alignof(heap_buf_t)) == 0, - //"memory buffer is unaligned, please use the HEAP_DEFINE_BUF() macro to declare heap buffers!\n"); - - /* Initialize heap with a single big chunk */ - g_tcm_heap.FreeList = (MemChunk *)&tcm_heap; - g_tcm_heap.FreeList->next = NULL; -// g_tcm_heap.FreeList->size = sizeof(tcm_heap); - g_tcm_heap.FreeList->size = tcm_heap_size; // ((0x20000000 - (uint32_t)&tcm_heap - 520 + sizeof(heap_buf_t) - 1)/sizeof(heap_buf_t))*sizeof(heap_buf_t); - - g_heap_inited = 1; - rtw_spinlock_init(&tcm_lock); - -#if PLATFORM_FREERTOS - // let RTOS know how to free memory if using as task stack - vPortSetExtFree(tcm_heap_free, 0x20000000, 0x1fff0000); -#endif -} - -void tcm_heap_dump(void) -{ -#if CONFIG_DEBUG_LOG > 1 - if(!g_heap_inited) tcm_heap_init(); - MemChunk *chunk; - struct Heap* h = &g_tcm_heap; - int count = 0; - - DBG_8195A("TCM Free Heap Memory List:\n"); - for (chunk = h->FreeList; chunk; chunk = chunk->next) { - DBG_8195A(" [%d]=%p, %d\n", ++count, chunk, chunk->size); - } - -/* - MemChunk *prev; - for (prev = (MemChunk *)&h->FreeList, chunk = h->FreeList; - chunk; - prev = chunk, chunk = chunk->next) - { - DBG_8195A(" [%d]=%p, %d\n", ++count, chunk, chunk->size); - } -*/ -#endif -} - -static void *tcm_heap_allocmem(int size) -{ - MemChunk *chunk, *prev; - struct Heap* h = &g_tcm_heap; - _irqL irqL; - - rtw_enter_critical(&tcm_lock, &irqL); - - if(!g_heap_inited) tcm_heap_init(); - - /* Round size up to the allocation granularity */ - size = ROUND_UP2(size, sizeof(MemChunk)); - - /* Handle allocations of 0 bytes */ - if (!size) - size = sizeof(MemChunk); - - /* Walk on the free list looking for any chunk big enough to - * fit the requested block size. - */ - for (prev = (MemChunk *)&h->FreeList, chunk = h->FreeList; - chunk; - prev = chunk, chunk = chunk->next) - { - if (chunk->size >= size) - { - if (chunk->size == size) - { - /* Just remove this chunk from the free list */ - prev->next = chunk->next; - } - else - { - /* Allocate from the END of an existing chunk */ - chunk->size -= size; - chunk = (MemChunk *)((uint8_t *)chunk + chunk->size); - } -#ifdef _DEBUG - memset(chunk, ALLOC_FILL_CODE, size); -#endif - - rtw_exit_critical(&tcm_lock, &irqL); - DBG_TCM_HEAP_INFO("tcm_alloc:%p[%d]\n", chunk, size); - return (void *)chunk; - } - } - rtw_exit_critical(&tcm_lock, &irqL); - DBG_TCM_HEAP_WARN("tcm_alloc(%d) - freeSpace(%d)!\n", size, tcm_heap_freeSpace()); - return NULL; /* fail */ -} - -static void tcm_heap_freemem(void *mem, int size) -{ - MemChunk *prev; - //ASSERT(mem); - struct Heap* h = &g_tcm_heap; - _irqL irqL; - - rtw_enter_critical(&tcm_lock, &irqL); - -// if(!g_heap_inited) tcm_heap_init(); - -#ifdef _DEBUG - memset(mem, FREE_FILL_CODE, size); -#endif - - /* Round size up to the allocation granularity */ - size = ROUND_UP2(size, sizeof(MemChunk)); - - /* Handle allocations of 0 bytes */ - if (!size) - size = sizeof(MemChunk); - - /* Special cases: first chunk in the free list or memory completely full */ - //ASSERT((uint8_t*)mem != (uint8_t*)h->FreeList); - if (((uint8_t *)mem) < ((uint8_t *)h->FreeList) || !h->FreeList) - { - /* Insert memory block before the current free list head */ - prev = (MemChunk *)mem; - prev->next = h->FreeList; - prev->size = size; - h->FreeList = prev; - } - else /* Normal case: not the first chunk in the free list */ - { - /* - * Walk on the free list. Stop at the insertion point (when mem - * is between prev and prev->next) - */ - prev = h->FreeList; - while (prev->next < (MemChunk *)mem && prev->next) - prev = prev->next; - - /* Make sure mem is not *within* prev */ - //ASSERT((uint8_t*)mem >= (uint8_t*)prev + prev->size); - - /* Should it be merged with previous block? */ - if (((uint8_t *)prev) + prev->size == ((uint8_t *)mem)) - { - /* Yes */ - prev->size += size; - } - else /* not merged with previous chunk */ - { - MemChunk *curr = (MemChunk*)mem; - - /* insert it after the previous node - * and move the 'prev' pointer forward - * for the following operations - */ - curr->next = prev->next; - curr->size = size; - prev->next = curr; - - /* Adjust for the following test */ - prev = curr; - } - } - - /* Also merge with next chunk? */ - if (((uint8_t *)prev) + prev->size == ((uint8_t *)prev->next)) - { - prev->size += prev->next->size; - prev->next = prev->next->next; - - /* There should be only one merge opportunity, becuase we always merge on free */ - //ASSERT((uint8_t*)prev + prev->size != (uint8_t*)prev->next); - } - - rtw_exit_critical(&tcm_lock, &irqL); - DBG_TCM_HEAP_INFO("tcm_free:%p[%d]\n", mem, size); -} - -int tcm_heap_freeSpace(void) -{ - int free_mem = 0; - struct Heap* h = &g_tcm_heap; - _irqL irqL; - MemChunk *chunk; - - rtw_enter_critical(&tcm_lock, &irqL); - - if(!g_heap_inited) tcm_heap_init(); - - for (chunk = h->FreeList; chunk; chunk = chunk->next) - free_mem += chunk->size; - - rtw_exit_critical(&tcm_lock, &irqL); - return free_mem; -} - - -/** - * Standard malloc interface - */ -void *tcm_heap_malloc(int size) -{ - int *mem; - - size += sizeof(int); - if ((mem = (int*)tcm_heap_allocmem(size))){ - *mem++ = size; - } - - return mem; -} - -/** - * Standard calloc interface - */ -void *tcm_heap_calloc(int size) -{ - void *mem; - - if ((mem = tcm_heap_malloc(size))) - memset(mem, 0, size); - - return mem; -} - -/** - * Free a block of memory, determining its size automatically. - * - * \param h Heap from which the block was allocated. - * \param mem Pointer to a block of memory previously allocated with - * either heap_malloc() or heap_calloc(). - * - * \note If \a mem is a NULL pointer, no operation is performed. - * - * \note Freeing the same memory block twice has undefined behavior. - * - * \note This function works like the ANSI C free(). - */ -void tcm_heap_free(void *mem) -{ - int *_mem = (int *)mem; - - if (_mem) - { - --_mem; - tcm_heap_freemem(_mem, *_mem); - } -} - -#if 0 -//----------- Tests ------------- -static void alloc_test(int size, int test_len) -{ - //Simple test - uint8_t *a[100]; - int i, j; - - for (i = 0; i < test_len; i++) - { - a[i] = tcm_heap_allocmem(size); - //ASSERT(a[i]); - for (j = 0; j < size; j++) - a[i][j] = i; - } - - //ASSERT(heap_freeSpace(&h) == HEAP_SIZE - test_len * ROUND_UP2(size, sizeof(MemChunk))); - - for (i = 0; i < test_len; i++) - { - for (j = 0; j < size; j++) - { - DBG_8195A("a[%d][%d] = %d\n", i, j, a[i][j]); - //ASSERT(a[i][j] == i); - } - tcm_heap_freemem(a[i], size); - } - //ASSERT(heap_freeSpace(&h) == HEAP_SIZE); -} - -#define ALLOC_SIZE 256 -#define ALLOC_SIZE2 1024 -#define TEST_LEN 20 -#define TEST_LEN2 10 -#define HEAP_SIZE 59*1024 -int tcm_heap_testRun(void) -{ - alloc_test(ALLOC_SIZE, TEST_LEN); - alloc_test(ALLOC_SIZE2, TEST_LEN2); - /* Try to allocate the whole heap */ - uint8_t *b = tcm_heap_allocmem(HEAP_SIZE); - int i, j; - //ASSERT(b); - //ASSERT(heap_freeSpace(&h) == 0); - - //ASSERT(!heap_allocmem(&h, HEAP_SIZE)); - - for (j = 0; j < HEAP_SIZE; j++) - b[j] = j; - - for (j = 0; j < HEAP_SIZE; j++) - { - DBG_8195A("b[%d] = %d\n", j, j); - //ASSERT(b[j] == (j & 0xff)); - } - tcm_heap_freemem(b, HEAP_SIZE); - //ASSERT(heap_freeSpace(&h) == HEAP_SIZE); - - return 0; -} -#endif // tests - -#endif diff --git a/Firmware/RTLGDB/USDK/component/os/rtx/rtx_service.c b/Firmware/RTLGDB/USDK/component/os/rtx/rtx_service.c deleted file mode 100644 index 0518205..0000000 --- a/Firmware/RTLGDB/USDK/component/os/rtx/rtx_service.c +++ /dev/null @@ -1,1109 +0,0 @@ -/* RTX includes */ -#include "osdep_service.h" -#include "tcm_heap.h" -#include -//#include //malloc(), free() -//#include //memcpy(), memcmp(), memset() -#include "platform_stdlib.h" -//#include -//#include -/********************* os depended utilities ********************/ - -#ifndef USE_MUTEX_FOR_SPINLOCK -#define USE_MUTEX_FOR_SPINLOCK 1 -#endif - -#define USE_HEAP_INFO 0 - -#define OS_TICK 1000 -#define OS_TICK_RATE_MS (1000/OS_TICK) - -//----------------------------------------------------------------------- -// Private Variables -//----------------------------------------------------------------------- -static unsigned long CriticalNesting = 0; - -//----------------------------------------------------------------------- -// Misc Function -//----------------------------------------------------------------------- -int osdep_print = 0; -#define _func_enter_ do{\ - if(osdep_print)\ - printf("enter %s\r\n", __FUNCTION__);\ - }while(0) -#define _func_exit_ do{\ - if(osdep_print)\ - printf("exit %s\r\n", __FUNCTION__);\ - }while(0) - -void save_and_cli() -{ -_func_enter_; - __disable_irq(); -_func_exit_; -} - -void restore_flags() -{ -_func_enter_; - __enable_irq(); -_func_exit_; -} - -void cli() -{ -_func_enter_; - __disable_irq(); -_func_exit_; -} - -/* Not needed on 64bit architectures */ -static unsigned int __div64_32(u64 *n, unsigned int base) -{ - u64 rem = *n; - u64 b = base; - u64 res, d = 1; - unsigned int high = rem >> 32; -_func_enter_; - /* Reduce the thing a bit first */ - res = 0; - if (high >= base) { - high /= base; - res = (u64) high << 32; - rem -= (u64) (high * base) << 32; - } - - while ((u64)b > 0 && b < rem) { - b = b+b; - d = d+d; - } - - do { - if (rem >= b) { - rem -= b; - res += d; - } - b >>= 1; - d >>= 1; - } while (d); -_func_exit_; - *n = res; - return rem; -} - -/********************* os depended service ********************/ -#if USE_HEAP_INFO -static uint32_t osFreeBytesRemaining=0x400; -#endif -static void _rtx_memset(void *pbuf, int c, u32 sz); -u8* _rtx_malloc(u32 sz) -{ -_func_enter_; - void *p = NULL; - p = malloc(sz); - if(p != NULL){ -#if USE_HEAP_INFO - osFreeBytesRemaining-=sz; -#endif - } -_func_exit_; - return p; -} - -u8* _rtx_zmalloc(u32 sz) -{ -_func_enter_; - u8 *pbuf = _rtx_malloc(sz); - - if (pbuf != NULL){ -#if USE_HEAP_INFO - osFreeBytesRemaining-=sz; -#endif - _rtx_memset(pbuf, 0, sz); - } -_func_exit_; - return pbuf; -} - -static void (*ext_free)( void *p ) = NULL; -static uint32_t ext_upper = 0; -static uint32_t ext_lower = 0; -void rtw_set_mfree_ext( void (*free)( void *p ), uint32_t upper, uint32_t lower ) -{ - ext_free = free; - ext_upper = upper; - ext_lower = lower; -} - -void _rtx_mfree(u8 *pbuf, u32 sz) -{ -_func_enter_; - if( ((uint32_t)pbuf >= ext_lower) && ((uint32_t)pbuf < ext_upper) ){ - if(ext_free) - ext_free(pbuf); - }else{ - free(pbuf); - } -#if USE_HEAP_INFO - osFreeBytesRemaining+=sz; -#endif -} - -static void _rtx_memcpy(void* dst, void* src, u32 sz) -{ -_func_enter_; - memcpy(dst, src, sz); -_func_exit_; -} - -static int _rtx_memcmp(void *dst, void *src, u32 sz) -{ -_func_enter_; -//under Linux/GNU/GLibc, the return value of memcmp for two same mem. chunk is 0 - if (!(memcmp(dst, src, sz))) - return _SUCCESS; -_func_exit_; - return _FAIL; -} - -static void _rtx_memset(void *pbuf, int c, u32 sz) -{ -_func_enter_; - memset(pbuf, c, sz); -_func_exit_; -} - -static void _rtx_init_sema(_sema *sem, int init_val) -{ -_func_enter_; - rtx_sema_t *p_sem = (rtx_sema_t *)_rtx_zmalloc(sizeof(rtx_sema_t)); - if(p_sem == NULL){ - goto err_exit; - } -#ifdef CMSIS_OS_RTX - p_sem->def.semaphore = p_sem->data; -#endif - *sem = (_sema)p_sem; - p_sem->id = osSemaphoreCreate(&p_sem->def, init_val); - if (p_sem->id == NULL){ - goto err_exit; - } -_func_exit_; - return; -err_exit: - DBG_ERR("error"); - if(p_sem) - _rtx_mfree((u8 *)p_sem, sizeof(rtx_sema_t)); - *sem = NULL; - return; -} - -static void _rtx_free_sema(_sema *sema) -{ -_func_enter_; - if(*sema){ - rtx_sema_t *p_sem = (rtx_sema_t *)(*sema); - osSemaphoreDelete(p_sem->id); - if(p_sem) - _rtx_mfree((u8 *)p_sem, sizeof(rtx_sema_t)); - *sema = NULL; - }else - DBG_ERR("NULL pointer get"); -_func_exit_; -} - -static void _rtx_up_sema(_sema *sema) -{ - if(*sema){ - rtx_sema_t *p_sem = (rtx_sema_t *)(*sema); - osStatus status = osSemaphoreRelease(p_sem->id); - if ( status != osOK){ - DBG_ERR("error %d", status); - } - }else - DBG_ERR("NULL pointer get"); -_func_exit_; -} - -static void _rtx_up_sema_from_isr(_sema *sema) -{ -_func_enter_; - if(*sema){ - rtx_sema_t *p_sem = (rtx_sema_t *)*sema; - osStatus status = osSemaphoreRelease(p_sem->id); - if (status != osOK){ - DBG_ERR("error %d", status); - } - }else - DBG_ERR("NULL pointer get"); -_func_exit_; -} - -static u32 _rtx_down_sema(_sema *sema, u32 timeout_ms) -{ - if(*sema){ - rtx_sema_t *p_sem = (rtx_sema_t *)*sema; - if(timeout_ms == RTW_MAX_DELAY) { - timeout_ms = osWaitForever; - } else { - timeout_ms = rtw_ms_to_systime(timeout_ms); - } - - if (osSemaphoreWait(p_sem->id, (timeout_ms != 0)?(timeout_ms):(osWaitForever)) >= 0) - return _TRUE; - } - return _FALSE; -} - -static void _rtx_mutex_init(_mutex *mutex) -{ -_func_enter_; - rtx_mutex_t *p_mut = (rtx_mutex_t *)_rtx_zmalloc(sizeof(rtx_mutex_t)); - if(p_mut == NULL) - goto err_exit; -#ifdef CMSIS_OS_RTX - p_mut->def.mutex = (void *)p_mut->data; -#endif - *mutex = (_mutex)p_mut; - p_mut->id = osMutexCreate(&p_mut->def); - if (p_mut->id == NULL) - goto err_exit; -_func_exit_; - return; -err_exit: - DBG_ERR("error"); - if(p_mut) - _rtx_mfree((u8 *)p_mut, sizeof(rtx_mutex_t)); - *mutex = NULL; - return; -} - -static void _rtx_mutex_free(_mutex *pmutex) -{ -_func_enter_; - if(*pmutex){ - rtx_mutex_t *p_mut = (rtx_mutex_t *)(*pmutex); - osMutexDelete(p_mut->id); - if(p_mut) - _rtx_mfree((u8 *)p_mut, sizeof(rtx_mutex_t)); - } -_func_exit_; -} - -static void _rtx_mutex_get(_mutex *pmutex) -{ -_func_enter_; - if(*pmutex){ - rtx_mutex_t *p_mut = (rtx_mutex_t *)(*pmutex); - if (osMutexWait(p_mut->id, 60 * 1000 / OS_TICK_RATE_MS) != osOK) - DBG_ERR("%s(%p) failed, retry\n", __FUNCTION__, p_mut); - } -_func_exit_; -} - -static int _rtx_mutex_get_timeout(_mutex *pmutex, u32 timeout_ms) -{ -_func_enter_; - if(*pmutex){ - rtx_mutex_t *p_mut = (rtx_mutex_t *)(*pmutex); - if(timeout_ms == RTW_MAX_DELAY) { - timeout_ms = osWaitForever; - } else { - timeout_ms = rtw_ms_to_systime(timeout_ms); - } - if(osMutexWait(p_mut->id, timeout_ms / OS_TICK_RATE_MS) == osOK){ - return _SUCCESS; - } - } -_func_exit_; - DBG_ERR("%s(%p) failed, retry\n", __FUNCTION__, pmutex); - return _FAIL; -} - -static void _rtx_mutex_put(_mutex *pmutex) -{ -_func_enter_; - if(*pmutex){ - rtx_mutex_t *p_mut = (rtx_mutex_t *)(*pmutex); - if (osMutexRelease(p_mut->id) != osOK) - DBG_ERR("\r\ninternal counter of mutex is 0 or calling task is not the owner of the mutex"); - } -_func_exit_; -} - -static void _rtx_enter_critical(_lock *plock, _irqL *pirqL) -{ -_func_enter_; - CriticalNesting++; - if(CriticalNesting == 1){ - rt_tsk_lock();//tsk_lock & tsk_unlock should not be called nested - } -_func_exit_; -} - -void mbed_die(void){ - DBG_ERR(" %p die here", osThreadGetId()); - __disable_irq(); - while(1); -} - -static void _rtx_exit_critical(_lock *plock, _irqL *pirqL) -{ -_func_enter_; - if(CriticalNesting == 0){ - DBG_ERR("die here"); - HALT(); - } - CriticalNesting--; - if(CriticalNesting == 0){ - rt_tsk_unlock(); - } -_func_exit_; -} - -static void _rtx_enter_critical_from_isr(_lock *plock, _irqL *pirqL) -{ -_func_enter_; - __disable_irq(); -_func_exit_; -} - -static void _rtx_exit_critical_from_isr(_lock *plock, _irqL *pirqL) -{ -_func_enter_; - __enable_irq(); -_func_exit_; -} - -static int _rtx_enter_critical_mutex(_mutex *pmutex, _irqL *pirqL) -{ -_func_enter_; - while(_rtx_mutex_get_timeout(pmutex, 60 * 1000 / OS_TICK_RATE_MS) != _SUCCESS) - DBG_ERR("\n\r[%p] %s(%p) failed, retry\n", osThreadGetId(), __FUNCTION__, pmutex); -_func_exit_; - return _SUCCESS; -} - -static void _rtx_exit_critical_mutex(_mutex *pmutex, _irqL *pirqL) -{ -_func_enter_; - _rtx_mutex_put(pmutex); -_func_exit_; -} - -static void _rtx_spinlock_init(_lock *plock) -{ -_func_enter_; -#if USE_MUTEX_FOR_SPINLOCK - _rtx_mutex_init(plock); -#endif -_func_exit_; -} - -static void _rtx_spinlock_free(_lock *plock) -{ -_func_enter_; -#if USE_MUTEX_FOR_SPINLOCK - if(plock != NULL){ - _rtx_mutex_free(plock); - } -#endif -_func_exit_; -} - -static void _rtx_spinlock(_lock *plock) -{ -_func_enter_; -#if USE_MUTEX_FOR_SPINLOCK - _rtx_mutex_get(plock); -#endif -_func_exit_; -} - -static void _rtx_spinunlock(_lock *plock) -{ -_func_enter_; -#if USE_MUTEX_FOR_SPINLOCK - _rtx_mutex_put(plock); -#endif -_func_exit_; -} - -static void _rtx_spinlock_irqsave(_lock *plock, _irqL *irqL) -{ -_func_enter_; - _rtx_enter_critical(plock, irqL); -#if USE_MUTEX_FOR_SPINLOCK - _rtx_spinlock(plock); -#endif -_func_exit_; -} - -static void _rtx_spinunlock_irqsave(_lock *plock, _irqL *irqL) -{ -_func_enter_; -#if USE_MUTEX_FOR_SPINLOCK - _rtx_spinunlock(plock); -#endif - _rtx_exit_critical(plock, irqL); -_func_exit_; -} - -static int _rtx_init_xqueue( _xqueue* queue, const char* name, u32 message_size, u32 number_of_messages ) -{ -_func_enter_; - rtx_mbox_t *mbox = (rtx_mbox_t *)_rtx_zmalloc(sizeof(rtx_mbox_t)); - if (mbox == NULL ){ - goto err_exit; - } -#ifdef CMSIS_OS_RTX - mbox->os_mailQ_q = (uint32_t)_rtx_zmalloc((4+number_of_messages)*sizeof(uint32_t)); - mbox->os_mailQ_m = (uint32_t)_rtx_zmalloc((3 + (message_size+3)/4)*number_of_messages); - if((mbox->os_mailQ_q == 0) || (mbox->os_mailQ_m == 0)) - goto err_exit; - mbox->os_mailQ_p[0] = (void *)mbox->os_mailQ_q; - mbox->os_mailQ_p[1] = (void *)mbox->os_mailQ_m; - mbox->def.pool = mbox->os_mailQ_p; - mbox->def.queue_sz = number_of_messages; - mbox->def.item_sz = message_size; -#endif - *queue = (_xqueue)mbox; - mbox->id = osMailCreate(&mbox->def, NULL); - if(mbox->id == NULL) - goto err_exit; -_func_exit_; - return _SUCCESS; -err_exit: - DBG_ERR("%s error\r\n", __FUNCTION__); - if(mbox){ - if(mbox->os_mailQ_q) - _rtx_mfree((u8 *)mbox->os_mailQ_q, ((4+number_of_messages)*sizeof(uint32_t))); - if(mbox->os_mailQ_m) - _rtx_mfree((u8 *)mbox->os_mailQ_m, ((3 + (message_size+3)/4)*number_of_messages)); - _rtx_mfree((u8 *)mbox, sizeof(rtx_mbox_t)); - *queue = NULL; - } - return _FAIL; -} - -static int _rtx_push_to_xqueue( _xqueue* queue, void* message, u32 timeout_ms ) -{ -_func_enter_; - void *mptr; - rtx_mbox_t *mbox; - if(timeout_ms == RTW_MAX_DELAY) { - timeout_ms = osWaitForever; - } else { - timeout_ms = rtw_ms_to_systime(timeout_ms); - } - - if (*queue != NULL){ - mbox = (rtx_mbox_t *)(*queue); - mptr = osMailAlloc(mbox->id, timeout_ms); // Allocate memory - _rtx_memcpy(mptr, message, mbox->def.item_sz); - if(osMailPut(mbox->id, mptr) != osOK ){ - DBG_ERR("%s error\n", __FUNCTION__); - return _FAIL; - } - } -_func_exit_; - return _SUCCESS; -} - -static int _rtx_pop_from_xqueue( _xqueue* queue, void* message, u32 timeout_ms ) -{ -_func_enter_; - if(timeout_ms == RTW_WAIT_FOREVER) { - timeout_ms = osWaitForever; - } else { - timeout_ms = rtw_ms_to_systime(timeout_ms); - } - if (*queue != NULL){ - rtx_mbox_t *mbox = (rtx_mbox_t *)(*queue); - osEvent evt; - evt = osMailGet(mbox->id, timeout_ms ); - if (evt.status == osEventMail) { - _rtx_memcpy(message, evt.value.p, mbox->def.item_sz); - osMailFree(mbox->id, evt.value.p); -_func_exit_; - return _SUCCESS; - } - } - DBG_ERR("[%p] %s error", osThreadGetId(), __FUNCTION__); - return _FAIL; -} - -static int _rtx_deinit_xqueue( _xqueue* queue ) -{ -_func_enter_; - if(*queue != NULL){ - rtx_mbox_t *mbox = (rtx_mbox_t *)(*queue); - - if(mbox->os_mailQ_q) - _rtx_mfree((u8 *)mbox->os_mailQ_q, ((4+mbox->def.queue_sz)*sizeof(uint32_t))); - if(mbox->os_mailQ_m) - _rtx_mfree((u8 *)mbox->os_mailQ_m, ((3 + (mbox->def.item_sz+3)/4)*mbox->def.queue_sz)); - _rtx_mfree((u8 *)mbox, sizeof(rtx_mbox_t)); - *queue = NULL; - } -_func_exit_; - return 0; -} - -static u32 _rtx_get_current_time(void) -{ -_func_enter_; - return rt_time_get(); -_func_exit_; -} - -static u32 _rtx_systime_to_ms(u32 systime) -{ - return systime * OS_TICK_RATE_MS; -} - -static u32 _rtx_systime_to_sec(u32 systime) -{ - return systime / OS_TICK; -} - -static u32 _rtx_ms_to_systime(u32 ms) -{ - return ms / OS_TICK_RATE_MS; -} - -static u32 _rtx_sec_to_systime(u32 sec) -{ - return sec * OS_TICK; -} - -static void _rtx_msleep_os(int ms) -{ -_func_enter_; - osDelay(ms); -_func_exit_; -} - -static void _rtx_usleep_os(int us) -{ -_func_enter_; -#if defined(STM32F2XX) || defined(STM32F4XX) || defined(STM32F10X_XL) - // FreeRTOS does not provide us level delay. Use busy wait - WLAN_BSP_UsLoop(us); -#elif defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) - //DBG_ERR("%s: Please Implement micro-second delay\n", __FUNCTION__); - HalDelayUs(us); -#else -// #error "Please implement hardware dependent micro second level sleep here" -#endif -_func_exit_; -} - -static void _rtx_mdelay_os(int ms) -{ -_func_enter_; - osDelay(ms); -_func_exit_; -} - -static void _rtx_udelay_os(int us) -{ -_func_enter_; -#if defined(STM32F2XX) || defined(STM32F4XX) || defined(STM32F10X_XL) - // FreeRTOS does not provide us level delay. Use busy wait - WLAN_BSP_UsLoop(us); -#elif defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) - //RtlUdelayOS(us); - HalDelayUs(us); -#else -// #error "Please implement hardware dependent micro second level sleep here" -#endif -_func_exit_; -} - -static void _rtx_yield_os(void) -{ -_func_enter_; - osThreadYield(); -_func_exit_; -} - -static void _rtx_ATOMIC_SET(ATOMIC_T *v, int i) -{ - atomic_set(v,i); -} - -static int _rtx_ATOMIC_READ(ATOMIC_T *v) -{ - return atomic_read(v); -} - -static void _rtx_ATOMIC_ADD(ATOMIC_T *v, int i) -{ - save_and_cli(); - v->counter += i; - restore_flags(); -} - -static void _rtx_ATOMIC_SUB(ATOMIC_T *v, int i) -{ - save_and_cli(); - v->counter -= i; - restore_flags(); -} - -static void _rtx_ATOMIC_INC(ATOMIC_T *v) -{ - save_and_cli(); - v->counter++; - restore_flags(); -} - -static void _rtx_ATOMIC_DEC(ATOMIC_T *v) -{ - save_and_cli(); - v->counter--; - restore_flags(); -} - -static int _rtx_ATOMIC_ADD_RETURN(ATOMIC_T *v, int i) -{ - int temp; - - save_and_cli(); - temp = v->counter; - temp += i; - v->counter = temp; - restore_flags(); - - return temp; -} - -static int _rtx_ATOMIC_SUB_RETURN(ATOMIC_T *v, int i) -{ - int temp; - - save_and_cli(); - temp = v->counter; - temp -= i; - v->counter = temp; - restore_flags(); - - return temp; -} - -static int _rtx_ATOMIC_INC_RETURN(ATOMIC_T *v) -{ - return _rtx_ATOMIC_ADD_RETURN(v, 1); -} - -static int _rtx_ATOMIC_DEC_RETURN(ATOMIC_T *v) -{ - return _rtx_ATOMIC_SUB_RETURN(v, 1); -} - -static u64 _rtx_modular64(u64 n, u64 base) -{ - unsigned int __base = (base); - unsigned int __rem; -_func_enter_; - if (((n) >> 32) == 0) { - __rem = (unsigned int)(n) % __base; - (n) = (unsigned int)(n) / __base; - } - else - __rem = __div64_32(&(n), __base); -_func_exit_; - return __rem; -} - -/* Refer to ecos bsd tcpip codes */ -static int _rtx_arc4random(void) -{ -_func_enter_; - u32 res = _rtx_get_current_time(); - static unsigned long seed = 0xDEADB00B; - seed = ((seed & 0x007F00FF) << 7) ^ - ((seed & 0x0F80FF00) >> 8) ^ // be sure to stir those low bits - (res << 13) ^ (res >> 9); // using the clock too! -_func_exit_; - return (int)seed; -} - -static int _rtx_get_random_bytes(void *buf, u32 len) -{ -#if 1 //becuase of 4-byte align, we use the follow code style. - unsigned int ranbuf; - unsigned int *lp; - int i, count; - count = len / sizeof(unsigned int); - lp = (unsigned int *) buf; -_func_enter_; - for(i = 0; i < count; i ++) { - lp[i] = _rtx_arc4random(); - len -= sizeof(unsigned int); - } - - if(len > 0) { - ranbuf = _rtx_arc4random(); - _rtx_memcpy(&lp[i], &ranbuf, len); - } -_func_exit_; - return 0; -#else - unsigned long ranbuf, *lp; - lp = (unsigned long *)buf; - while (len > 0) { - ranbuf = _rtx_arc4random(); - *lp++ = ranbuf; //this op need the pointer is 4Byte-align! - len -= sizeof(ranbuf); - } - return 0; -#endif -} - -static u32 _rtx_GetFreeHeapSize(void) -{ -#if USE_HEAP_INFO - return osFreeBytesRemaining; -#else - return 0; -#endif -} - - -//#if CONFIG_USE_TCM_HEAP -//void *tcm_heap_malloc(int size); -//#endif -static int _rtx_create_task(struct task_struct *ptask, const char *name, - u32 stack_size, u32 priority, thread_func_t func, void *thctx) -{ -_func_enter_; - rtx_thread_data_t *thread_hdl = NULL; - u32 stacksize = stack_size * 4; //sizeof(DWORD) - if(!func) - goto err_exit; - thread_hdl = (rtx_thread_data_t *)_rtx_zmalloc(sizeof(rtx_thread_data_t)); - if(thread_hdl == NULL) - goto err_exit; -#ifdef CMSIS_OS_RTX -#ifndef __MBED_CMSIS_RTOS_CA9 - thread_hdl->def.stack_pointer = (void *)_rtx_malloc(stacksize); - if(thread_hdl->def.stack_pointer == NULL) - goto err_exit; -#endif - if(priority > osPriorityRealtime){ - DBG_ERR("[%s]priority is higher than osPriorityRealtime", name); - priority = osPriorityRealtime; - } - thread_hdl->def.pthread = (os_pthread)func; - thread_hdl->def.tpriority = (osPriority)priority; - thread_hdl->def.stacksize = stacksize; -#endif - ptask->task = (_thread_hdl_)thread_hdl; - ptask->task_name = name; - ptask->blocked = 0; - ptask->callback_running = 0; - - _rtx_init_sema(&ptask->wakeup_sema, 0); - _rtx_init_sema(&ptask->terminate_sema, 0); - //rtw_init_queue(&wq->work_queue); - - thread_hdl->id = osThreadCreate(&thread_hdl->def, thctx); - if(thread_hdl->id == NULL) - goto err_exit; - return _SUCCESS; -err_exit: - if(thread_hdl){ - _rtx_free_sema(&ptask->wakeup_sema); - _rtx_free_sema(&ptask->terminate_sema); - _rtx_memset((u8 *)ptask, 0, sizeof(*ptask)); -#ifndef __MBED_CMSIS_RTOS_CA9 - if(thread_hdl->def.stack_pointer) - _rtx_mfree((void *)thread_hdl->def.stack_pointer, thread_hdl->def.stacksize); -#endif - _rtx_mfree((u8 *)thread_hdl, sizeof(rtx_thread_data_t)); - } - DBG_ERR("Create Task \"%s\" Failed! \n", ptask->task_name); - return _FAIL; -} - -static void _rtx_delete_task(struct task_struct *ptask) -{ -_func_enter_; - rtx_thread_data_t *thread_hdl = (rtx_thread_data_t *)ptask->task; - if (!thread_hdl){ - DBG_ERR("_rtx_delete_task(): ptask is NULL!\n"); - return; - } - - ptask->blocked = 1; - - _rtx_up_sema(&ptask->wakeup_sema); - _rtx_down_sema(&ptask->terminate_sema, TIMER_MAX_DELAY); - - osThreadTerminate(thread_hdl->id); -#ifndef __MBED_CMSIS_RTOS_CA9 - if(thread_hdl->def.stack_pointer) - _rtx_mfree((void *)thread_hdl->def.stack_pointer, thread_hdl->def.stacksize); -#endif - _rtx_mfree((u8 *)thread_hdl, sizeof(rtx_thread_data_t)); - - //rtw_deinit_queue(&wq->work_queue); - _rtx_free_sema(&ptask->wakeup_sema); - _rtx_free_sema(&ptask->terminate_sema); - - ptask->task = NULL; - - DBG_TRACE("Delete Task \"%s\"\n", ptask->task_name); -_func_exit_; -} - -void _rtx_wakeup_task(struct task_struct *ptask) -{ -_func_enter_; - if(ptask) - _rtx_up_sema(&ptask->wakeup_sema); -_func_exit_; -} - -static void _rtx_thread_enter(char *name) -{ -_func_enter_; - DBG_INFO("\n\rRTKTHREAD %s\n", name); -_func_exit_; -} - -static void _rtx_thread_exit(void) -{ -_func_enter_; - osThreadId id = osThreadGetId(); - osThreadTerminate(id); -_func_exit_; -} - -/***************************************************** -************timer data block, defined in rt_CMSIS.c********* - -// Timer definitions -#define osTimerInvalid 0 -#define osTimerStopped 1 -#define osTimerRunning 2 - -// Timer structures - -typedef struct os_timer_cb_ { // Timer Control Block - struct os_timer_cb_ *next; // Pointer to next active Timer, (u8 *)data[0:3] - uint8_t state; // Timer State, (u8 *)data[4] - uint8_t type; // Timer Type (Periodic/One-shot), (u8 *)data[5] - uint16_t reserved; // Reserved, (u8 *)data[6:7] - uint16_t tcnt; // Timer Delay Count, (u8 *)data[8:9] - uint16_t icnt; // Timer Initial Count, (u8 *)data[10:11] - void *arg; // Timer Function Argument, (u8 *)data[12:15] - osTimerDef_t *timer; // Pointer to Timer definition, (u8 *)data[16:19] -} os_timer_cb; -*****************************************************/ -_timerHandle _rtx_timerCreate( const signed char *pcTimerName, - osdepTickType xTimerPeriodInTicks, - u32 uxAutoReload, - void * pvTimerID, - TIMER_FUN pxCallbackFunction ) -{ -_func_enter_; - rtx_tmr_t *tmr = (rtx_tmr_t *)_rtx_zmalloc(sizeof(rtx_tmr_t)); - os_timer_type type = (uxAutoReload == _TRUE)?osTimerPeriodic:osTimerOnce; - if(tmr == NULL) - goto err_exit; -#ifdef CMSIS_OS_RTX - tmr->def.ptimer = (os_ptimer)pxCallbackFunction; - tmr->def.timer = (void *)tmr->data; -#endif - if(pvTimerID == NULL) - pvTimerID = (void *)tmr; - tmr->id = osTimerCreate(&tmr->def, type, pvTimerID); - if(tmr->id == NULL) - goto err_exit; -_func_exit_; - return (_timerHandle)tmr; -err_exit: - DBG_ERR("error"); - if(tmr) - _rtx_mfree((u8 *)tmr, sizeof(rtx_tmr_t)); - return NULL; -} - -u32 _rtx_timerDelete( _timerHandle xTimer, - osdepTickType xBlockTime ) -{ -_func_enter_; - rtx_tmr_t *tmr = (rtx_tmr_t *) xTimer; - osStatus status = osTimerDelete(tmr->id); - _rtx_mfree((u8 *)tmr, sizeof(rtx_tmr_t)); - if(status != osOK){ - DBG_ERR("error %d", status); - return _FAIL; - } -_func_exit_; - return _SUCCESS; -} - -u32 _rtx_timerIsTimerActive( _timerHandle xTimer ) -{ -_func_enter_; - rtx_tmr_t *tmr = (rtx_tmr_t *) xTimer; - u8 *data = (u8 *)tmr->data; -_func_exit_; - switch(data[4]){ - case 2U: - return _TRUE; - default: - return _FALSE; - } -} - -u32 _rtx_timerStop( _timerHandle xTimer, - osdepTickType xBlockTime ) -{ -_func_enter_; - rtx_tmr_t *tmr = (rtx_tmr_t *) xTimer; - osStatus status = osTimerStop(tmr->id); -_func_exit_; - if(status == osOK) - return _SUCCESS; - - DBG_ERR("error %d\n", status); - return _FAIL; -} - -u32 _rtx_timerChangePeriod( _timerHandle xTimer, - osdepTickType xNewPeriod, - osdepTickType xBlockTime ) -{ -_func_enter_; - rtx_tmr_t *tmr = (rtx_tmr_t *) xTimer; - osStatus ret; - - if(xNewPeriod == 0) - xNewPeriod += 1; - xNewPeriod = _rtx_systime_to_ms(xNewPeriod); - ret = osTimerStart(tmr->id, xNewPeriod); -_func_exit_; - if(ret == osOK) - return _SUCCESS; - - DBG_ERR("%s error\n", __FUNCTION__); - return _FAIL; -} - -//void _rtx_acquire_wakelock() -//{ -//#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) -// acquire_wakelock(WAKELOCK_WLAN); -//#endif -//} - -//void _rtx_release_wakelock() -//{ -//#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) -// release_wakelock(WAKELOCK_WLAN); -//#endif -//} - -u8 _rtx_get_scheduler_state(void) -{ -_func_enter_; - int32_t state = osKernelRunning(); - u8 state_out = OS_SCHEDULER_NOT_STARTED; - switch(state){ - case 1: state = OS_SCHEDULER_RUNNING; break; - case 0: state = OS_SCHEDULER_SUSPENDED; break; - default: break; - } -_func_exit_; - return state_out; -} - -const struct osdep_service_ops osdep_service = { - _rtx_malloc, //rtw_vmalloc - _rtx_zmalloc, //rtw_zvmalloc - _rtx_mfree, //rtw_vmfree - _rtx_malloc, //rtw_malloc - _rtx_zmalloc, //rtw_zmalloc - _rtx_mfree, //rtw_mfree - _rtx_memcpy, //rtw_memcpy - _rtx_memcmp, //rtw_memcmp - _rtx_memset, //rtw_memset - _rtx_init_sema, //rtw_init_sema - _rtx_free_sema, //rtw_free_sema - _rtx_up_sema, //rtw_up_sema - _rtx_up_sema_from_isr,//rtw_up_sema_from_isr - _rtx_down_sema, //rtw_down_sema - _rtx_mutex_init, //rtw_mutex_init - _rtx_mutex_free, //rtw_mutex_free - _rtx_mutex_get, //rtw_mutex_get - _rtx_mutex_get_timeout, //rtw_mutex_get_timeout - _rtx_mutex_put, //rtw_mutex_put - _rtx_enter_critical, //rtw_enter_critical - _rtx_exit_critical, //rtw_exit_critical - _rtx_enter_critical_from_isr, //rtw_enter_critical_from_isr - _rtx_exit_critical_from_isr, //rtw_exit_critical_from_isr - NULL, //rtw_enter_critical_bh - NULL, //rtw_exit_critical_bh - _rtx_enter_critical_mutex, //rtw_enter_critical_mutex - _rtx_exit_critical_mutex, //rtw_exit_critical_mutex - _rtx_spinlock_init, //rtw_spinlock_init - _rtx_spinlock_free, //rtw_spinlock_free - _rtx_spinlock, //rtw_spin_lock - _rtx_spinunlock, //rtw_spin_unlock - _rtx_spinlock_irqsave, //rtw_spinlock_irqsave - _rtx_spinunlock_irqsave, //rtw_spinunlock_irqsave - _rtx_init_xqueue,//rtw_init_xqueue - _rtx_push_to_xqueue,//rtw_push_to_xqueue - _rtx_pop_from_xqueue,//rtw_pop_from_xqueue - _rtx_deinit_xqueue,//rtw_deinit_xqueue - _rtx_get_current_time, //rtw_get_current_time - _rtx_systime_to_ms, //rtw_systime_to_ms - _rtx_systime_to_sec, //rtw_systime_to_sec - _rtx_ms_to_systime, //rtw_ms_to_systime - _rtx_sec_to_systime, //rtw_sec_to_systime - _rtx_msleep_os, //rtw_msleep_os - _rtx_usleep_os, //rtw_usleep_os - _rtx_mdelay_os, //rtw_mdelay_os - _rtx_udelay_os, //rtw_udelay_os - _rtx_yield_os, //rtw_yield_os - - _rtx_ATOMIC_SET, //ATOMIC_SET - _rtx_ATOMIC_READ, //ATOMIC_READ - _rtx_ATOMIC_ADD, //ATOMIC_ADD - _rtx_ATOMIC_SUB, //ATOMIC_SUB - _rtx_ATOMIC_INC, //ATOMIC_INC - _rtx_ATOMIC_DEC, //ATOMIC_DEC - _rtx_ATOMIC_ADD_RETURN, //ATOMIC_ADD_RETURN - _rtx_ATOMIC_SUB_RETURN, //ATOMIC_SUB_RETURN - _rtx_ATOMIC_INC_RETURN, //ATOMIC_INC_RETURN - _rtx_ATOMIC_DEC_RETURN, //ATOMIC_DEC_RETURN - - _rtx_modular64, //rtw_modular64 - _rtx_get_random_bytes, //rtw_get_random_bytes - _rtx_GetFreeHeapSize, //rtw_getFreeHeapSize - - _rtx_create_task, //rtw_create_task - _rtx_delete_task, //rtw_delete_task - _rtx_wakeup_task, //rtw_wakeup_task - - _rtx_thread_enter, //rtw_thread_enter - _rtx_thread_exit, //rtw_thread_exit - - _rtx_timerCreate, //rtw_timerCreate, - _rtx_timerDelete, //rtw_timerDelete, - _rtx_timerIsTimerActive, //rtw_timerIsTimerActive, - _rtx_timerStop, //rtw_timerStop, - _rtx_timerChangePeriod, //rtw_timerChangePeriod - - NULL, // rtw_acquire_wakelock - NULL, // rtw_release_wakelock - NULL, //rtw_wakelock_timeout - - _rtx_get_scheduler_state // rtw_get_scheduler_state -}; - diff --git a/Firmware/RTLGDB/USDK/component/os/rtx/rtx_service.h b/Firmware/RTLGDB/USDK/component/os/rtx/rtx_service.h deleted file mode 100644 index 4396aea..0000000 --- a/Firmware/RTLGDB/USDK/component/os/rtx/rtx_service.h +++ /dev/null @@ -1,309 +0,0 @@ -#ifndef _RTX_SERVICE_H_ -#define _RTX_SERVICE_H_ - -//----------------------------------------------------------------------- -// Include Files -//----------------------------------------------------------------------- -#include "wireless.h" -#include "dlist.h" -#include -#include -#include "RTX_Config.h" -#include -#include -#include - -// -------------------------------------------- -// Platform dependent include file -// -------------------------------------------- -#if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) -//#include "platform_stdlib.h" -//#include "basic_types.h" -#include -#else -// other MCU may use standard library -#include -#endif - - -#if (defined CONFIG_GSPI_HCI || defined CONFIG_SDIO_HCI) || defined(CONFIG_LX_HCI) -/* For SPI interface transfer and us delay implementation */ -#if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) -#include -#endif -#endif - - -// -------------------------------------------- -// Platform dependent type define -// -------------------------------------------- -#if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned int u32; -typedef signed char s8; -typedef signed short s16; -typedef signed int s32; -typedef signed long long s64; -typedef unsigned long long u64; -typedef unsigned int uint; -typedef signed int sint; - -#ifndef bool -typedef int bool; -#define true 1 -#define false 0 -#endif - -#define IN -#define OUT -#define VOID void -#define NDIS_OID uint -#define NDIS_STATUS uint -#ifndef PVOID -typedef void * PVOID; -#endif - -typedef unsigned int __kernel_size_t; -typedef int __kernel_ssize_t; -typedef __kernel_size_t SIZE_T; -typedef __kernel_ssize_t SSIZE_T; - -#endif //CONFIG_PLATFORM_8195A - -// === SEMAPHORE === -typedef struct { - osSemaphoreId id; - osSemaphoreDef_t def; -#ifdef CMSIS_OS_RTX - uint32_t data[2]; -#endif -} rtx_sema_t; - -// === THREAD === -typedef struct { - osThreadId id; - osThreadDef_t def; -} rtx_thread_data_t; - -// === MUTEX === -typedef struct { - osMutexId id; - osMutexDef_t def; -#ifdef CMSIS_OS_RTX -#if defined(__MBED_CMSIS_RTOS_CA9) || defined(__MBED_CMSIS_RTOS_CM) - int32_t data[4]; -#else - int32_t data[3]; -#endif -#endif -} rtx_mutex_t; - -// === MAIL BOX === -#define RTX_MB_SIZE 8 - -typedef struct { - osMessageQId id; - osMessageQDef_t def; -#ifdef CMSIS_OS_RTX - uint32_t queue; /* The (queue_size+4)*sizeof(uint32_t) is required for RTX OS_MCB overhead. */ -#endif -} rtx_mqueue_t; - -typedef struct { - osMailQId id; - osMailQDef_t def; -#ifdef CMSIS_OS_RTX - uint32_t os_mailQ_q; /* memory block, (4+queue_size)*sizeof(uint32_t)*/ - uint32_t os_mailQ_m; /* memory block, (3 + (item_size+3)/4)*queue_size*/ - void * os_mailQ_p[2]; -#endif -} rtx_mbox_t; - -typedef struct{ - osTimerId id; - osTimerDef_t def; -#if defined(CMSIS_OS_RTX) && !defined(__MBED_CMSIS_RTOS_CM) - uint32_t data[5]; -#else - uint32_t data[6]; -#endif -}rtx_tmr_t; - -#define FIELD_OFFSET(s,field) ((SSIZE_T)&((s*)(0))->field) - -// os types -typedef char osdepCHAR; -typedef float osdepFLOAT; -typedef double osdepDOUBLE; -typedef long osdepLONG; -typedef short osdepSHORT; -typedef unsigned long osdepSTACK_TYPE; -typedef long osdepBASE_TYPE; -typedef unsigned long osdepTickType; - -typedef void * _timerHandle; -typedef void * _sema; -typedef void * _mutex; -typedef void * _lock; -typedef void * _queueHandle; -typedef void * _xqueue; -typedef struct timer_list _timer; - -typedef struct sk_buff _pkt; -typedef unsigned char _buffer; - -#ifndef __LIST_H -#warning "DLIST_NOT_DEFINE!!!!!!" -struct list_head { - struct list_head *next, *prev; -}; -#endif - -struct __queue { - struct list_head queue; - _lock lock; -}; - -typedef struct __queue _queue; -typedef struct list_head _list; -typedef unsigned long _irqL; - -typedef void* _thread_hdl_; -typedef void thread_return; -typedef void* thread_context; - -#define ATOMIC_T atomic_t -#define HZ configTICK_RATE_HZ - -#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) -/* emulate a modern version */ -#define LINUX_VERSION_CODE KERNEL_VERSION(2, 6, 17) - -static __inline _list *get_next(_list *list) -{ - return list->next; -} - -static __inline _list *get_list_head(_queue *queue) -{ - return (&(queue->queue)); -} - -#define LIST_CONTAINOR(ptr, type, member) \ - ((type *)((char *)(ptr)-(SIZE_T)((char *)&((type *)ptr)->member - (char *)ptr))) -//#define container_of(p,t,n) (t*)((p)-&(((t*)0)->n)) -#define container_of(ptr, type, member) \ - ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member))) -#define TASK_PRORITY_LOW osPriorityAboveNormal//osPriorityNormal -#define TASK_PRORITY_MIDDLE osPriorityHigh//osPriorityAboveNormal -#define TASK_PRORITY_HIGH osPriorityRealtime//osPriorityHigh -#define TASK_PRORITY_SUPER osPriorityRealtime -#define TASK_PRORITY_IDEL osPriorityIdle - - -#define TIMER_MAX_DELAY 0xFFFFFFFF -void save_and_cli(void); -void restore_flags(void); -void cli(void); - -//----- ------------------------------------------------------------------ -// Common Definition -//----- ------------------------------------------------------------------ - -#define __init -#define __exit -#define __devinit -#define __devexit - -#define KERN_ERR -#define KERN_INFO -#define KERN_NOTICE - -#define GFP_KERNEL 1 -#define GFP_ATOMIC 1 - -#define SET_MODULE_OWNER(some_struct) do { } while (0) -#define SET_NETDEV_DEV(dev, obj) do { } while (0) -#define register_netdev(dev) (0) -#define unregister_netdev(dev) do { } while (0) -#define netif_queue_stopped(dev) (0) -#define netif_wake_queue(dev) do { } while (0) -#define printk printf - -#define DBG_ERR(fmt, args...) printf("\n\r[%s] " fmt, __FUNCTION__, ## args) -#if WLAN_INTF_DBG -#define DBG_TRACE(fmt, args...) printf("\n\r[%s] " fmt, __FUNCTION__, ## args) -#define DBG_INFO(fmt, args...) printf("\n\r[%s] " fmt, __FUNCTION__, ## args) -#else -#define DBG_TRACE(fmt, args...) -#define DBG_INFO(fmt, args...) -#endif -#define HALT() do { cli(); for(;;);} while(0) -#define ASSERT(x) do { \ - if((x) == 0) \ - printf("\n\rAssert(" #x ") failed on line %d in file %s", __LINE__, __FILE__); \ - HALT(); \ - } while(0) - -#undef DBG_ASSERT -#define DBG_ASSERT(x, msg) do { \ - if((x) == 0) \ - printf("\n\r%s, Assert(" #x ") failed on line %d in file %s", msg, __LINE__, __FILE__); \ - } while(0) - -//----- ------------------------------------------------------------------ -// Atomic Operation -//----- ------------------------------------------------------------------ -#if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) // for 8195A, it is defined in ..system../basic_types.h -typedef struct { volatile int counter; } atomic_t; -#endif - - -/* - * atomic_read - read atomic variable - * @v: pointer of type atomic_t - * - * Atomically reads the value of @v. Note that the guaranteed - * useful range of an atomic_t is only 24 bits. - */ -#define atomic_read(v) ((v)->counter) - -/* - * atomic_set - set atomic variable - * @v: pointer of type atomic_t - * @i: required value - * - * Atomically sets the value of @v to @i. Note that the guaranteed - * useful range of an atomic_t is only 24 bits. - */ -#define atomic_set(v,i) ((v)->counter = (i)) - - /* - * These inlines deal with timer wrapping correctly. You are - * strongly encouraged to use them - * 1. Because people otherwise forget - * 2. Because if the timer wrap changes in future you wont have to - * alter your driver code. - * - * time_after(a,b) returns true if the time a is after time b. - * - * Do this with "<0" and ">=0" to only test the sign of the result. A - * good compiler would generate better code (and a really good compiler - * wouldn't care). Gcc is currently neither. - */ - #define time_after(a,b) ((long)(b) - (long)(a) < 0) - #define time_before(a,b) time_after(b,a) - - #define time_after_eq(a,b) ((long)(a) - (long)(b) >= 0) - #define time_before_eq(a,b) time_after_eq(b,a) - - -extern void rtw_init_listhead(_list *list); -extern u32 rtw_is_list_empty(_list *phead); -extern void rtw_list_insert_head(_list *plist, _list *phead); -extern void rtw_list_insert_tail(_list *plist, _list *phead); -extern void rtw_list_delete(_list *plist); -#define vPortExitCritical save_and_cli -#endif /* _RTX_SERVICE_H_ */ - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/core_cm3.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/core_cm3.h deleted file mode 100644 index 64db5c7..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/core_cm3.h +++ /dev/null @@ -1,1661 +0,0 @@ -/**************************************************************************//** - * @file core_cm3.h - * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File - * @version V3.20 - * @date 25. February 2013 - * - * @note - * - ******************************************************************************/ -/* Copyright (c) 2009 - 2013 ARM LIMITED - - All rights reserved. - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of ARM nor the names of its contributors may be used - to endorse or promote products derived from this software without - specific prior written permission. - * - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - ---------------------------------------------------------------------------*/ - - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#endif - -#ifdef __cplusplus - extern "C" { -#endif - -#ifndef __CORE_CM3_H_GENERIC -#define __CORE_CM3_H_GENERIC - -/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** \ingroup Cortex_M3 - @{ - */ - -/* CMSIS CM3 definitions */ -#define __CM3_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ -#define __CM3_CMSIS_VERSION_SUB (0x20) /*!< [15:0] CMSIS HAL sub version */ -#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | \ - __CM3_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ - -#define __CORTEX_M (0x03) /*!< Cortex-M Core */ - - - -#if defined ( __CC_ARM ) - #define __ASM __asm /*!< asm keyword for ARM Compiler */ - #define __INLINE __inline /*!< inline keyword for ARM Compiler */ - #define __STATIC_INLINE static __inline - -#elif defined ( __ICCARM__ ) - #define __ASM __asm /*!< asm keyword for IAR Compiler */ - #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ - #define __STATIC_INLINE static inline - -#elif defined ( __TMS470__ ) - #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ - #define __STATIC_INLINE static inline - -#elif defined ( __GNUC__ ) - #define __ASM __asm /*!< asm keyword for GNU Compiler */ - #define __INLINE inline /*!< inline keyword for GNU Compiler */ - #define __STATIC_INLINE static inline - -#elif defined ( __TASKING__ ) - #define __ASM __asm /*!< asm keyword for TASKING Compiler */ - #define __INLINE inline /*!< inline keyword for TASKING Compiler */ - #define __STATIC_INLINE static inline - -#endif - -/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all -*/ -#define __FPU_USED 0 - -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TMS470__ ) - #if defined __TI__VFP_SUPPORT____ - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif -#endif - -#include /* standard types definitions */ -//#include /* rlx basic types definitions */ -#include /* Core Instruction Access */ -#include /* Core Function Access */ -//#include "hal_irqn.h" - -#endif /* __CORE_CM3_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_CM3_H_DEPENDANT -#define __CORE_CM3_H_DEPENDANT - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __CM3_REV - #define __CM3_REV 0x0200 - #warning "__CM3_REV not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0 - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 4 - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0 - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#ifdef __cplusplus - #define __I volatile /*!< Defines 'read only' permissions */ -#else - #define __I volatile const /*!< Defines 'read only' permissions */ -#endif -#define __O volatile /*!< Defines 'write only' permissions */ -#define __IO volatile /*!< Defines 'read / write' permissions */ - -/*@} end of group Cortex_M3 */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core Debug Register - - Core MPU Register - ******************************************************************************/ -/** \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { -#if (__CORTEX_M != 0x04) - uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ -#else - uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ -#endif - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - - -/** \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - - -/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ -#if (__CORTEX_M != 0x04) - uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ -#else - uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ -#endif - uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ - uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - - -/** \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ - uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ - uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ - uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/*@} end of group CMSIS_CORE */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[24]; - __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RSERVED1[24]; - __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[24]; - __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[24]; - __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[56]; - __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ - uint32_t RESERVED5[644]; - __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ -} NVIC_Type; - -/* Software Triggered Interrupt Register Definitions */ -#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ -#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_NVIC */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ - __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ - __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ - __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ - __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ - __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ - __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ - __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ - __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ - __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ - uint32_t RESERVED0[5]; - __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Vector Table Offset Register Definitions */ -#if (__CM3_REV < 0x0201) /* core r2p1 */ -#define SCB_VTOR_TBLBASE_Pos 29 /*!< SCB VTOR: TBLBASE Position */ -#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ - -#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ -#else -#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ -#endif - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ -#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ -#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ -#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ - -#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ -#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ -#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ -#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ - -#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ -#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ - -#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ -#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ -#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ - -#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ -#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ - -#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ -#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ -#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ -#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ - -#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ -#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ - -#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ -#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ - -/* SCB Configurable Fault Status Registers Definitions */ -#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ -#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ - -#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ -#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ - -#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ -#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ - -/* SCB Hard Fault Status Registers Definitions */ -#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ -#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ - -#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ -#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ - -#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ -#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ - -/* SCB Debug Fault Status Register Definitions */ -#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ -#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) - \brief Type definitions for the System Control and ID Register not in the SCB - @{ - */ - -/** \brief Structure type to access the System Control and ID Register not in the SCB. - */ -typedef struct -{ - uint32_t RESERVED0[1]; - __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ -#if ((defined __CM3_REV) && (__CM3_REV >= 0x200)) - __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ -#else - uint32_t RESERVED1[1]; -#endif -} SCnSCB_Type; - -/* Interrupt Controller Type Register Definitions */ -#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ -#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ - -/* Auxiliary Control Register Definitions */ - -#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ -#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ - -#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ -#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ - -#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ -#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ - -/*@} end of group CMSIS_SCnotSCB */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) - \brief Type definitions for the Instrumentation Trace Macrocell (ITM) - @{ - */ - -/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). - */ -typedef struct -{ - __O union - { - __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ - __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ - __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ - } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ - uint32_t RESERVED0[864]; - __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ - uint32_t RESERVED1[15]; - __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ - uint32_t RESERVED2[15]; - __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ - uint32_t RESERVED3[29]; - __O uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ - __I uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ - __IO uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ - uint32_t RESERVED4[43]; - __O uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ - __I uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ - uint32_t RESERVED5[6]; - __I uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ - __I uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ - __I uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ - __I uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ - __I uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ - __I uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ - __I uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ - __I uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ - __I uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ - __I uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ - __I uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ - __I uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ -} ITM_Type; - -/* ITM Trace Privilege Register Definitions */ -#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ -#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ - -/* ITM Trace Control Register Definitions */ -#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ -#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ - -#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ -#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ - -#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ -#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ - -#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ -#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ - -#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ - -#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ - -#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ - -#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ -#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ - -#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ -#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ - -/* ITM Integration Write Register Definitions */ -#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ -#define ITM_IWR_ATVALIDM_Msk (1UL << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ - -/* ITM Integration Read Register Definitions */ -#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ -#define ITM_IRR_ATREADYM_Msk (1UL << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ - -/* ITM Integration Mode Control Register Definitions */ -#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ -#define ITM_IMCR_INTEGRATION_Msk (1UL << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ - -/* ITM Lock Status Register Definitions */ -#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ -#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ - -#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ -#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ - -#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ -#define ITM_LSR_Present_Msk (1UL << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ - -/*@}*/ /* end of group CMSIS_ITM */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) - \brief Type definitions for the Data Watchpoint and Trace (DWT) - @{ - */ - -/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). - */ -typedef struct -{ - __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ - __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ - __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ - __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ - __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ - __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ - __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ - __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED0[1]; - __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ - __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED1[1]; - __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ - __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED2[1]; - __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ - __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ -#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ - -#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ -#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ - -#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ -#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ - -#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ -#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ - -#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ -#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ - -#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ -#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ - -#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ -#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ - -#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ -#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ - -#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ -#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ - -#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ -#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ - -#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ -#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ - -#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ -#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ - -#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ -#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ - -/* DWT CPI Count Register Definitions */ -#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ -#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ - -/* DWT Exception Overhead Count Register Definitions */ -#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ -#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ - -/* DWT Sleep Count Register Definitions */ -#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ -#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ - -/* DWT LSU Count Register Definitions */ -#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ -#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ - -/* DWT Folded-instruction Count Register Definitions */ -#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ -#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ - -/* DWT Comparator Mask Register Definitions */ -#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ -#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ - -/* DWT Comparator Function Register Definitions */ -#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ -#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ - -#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ -#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ -#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ - -#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ -#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ - -#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ -#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ - -#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ -#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ - -#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ -#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ - -/*@}*/ /* end of group CMSIS_DWT */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_TPI Trace Port Interface (TPI) - \brief Type definitions for the Trace Port Interface (TPI) - @{ - */ - -/** \brief Structure type to access the Trace Port Interface Register (TPI). - */ -typedef struct -{ - __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ - __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ - uint32_t RESERVED0[2]; - __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55]; - __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131]; - __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ - uint32_t RESERVED3[759]; - __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ - __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ - __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ - uint32_t RESERVED4[1]; - __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ - __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ - __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ - uint32_t RESERVED5[39]; - __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ - __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ - uint32_t RESERVED7[8]; - __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ - __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ - -/* TPI Selected Pin Protocol Register Definitions */ -#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ -#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ - -/* TPI Formatter and Flush Status Register Definitions */ -#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ -#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ - -/* TPI Formatter and Flush Control Register Definitions */ -#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ -#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ - -/* TPI TRIGGER Register Definitions */ -#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ -#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ - -/* TPI Integration ETM Data Register Definitions (FIFO0) */ -#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ -#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ - -#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ -#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ - -#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ -#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ - -#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ -#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ - -#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ -#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ - -#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ -#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ - -#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ -#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ - -/* TPI ITATBCTR2 Register Definitions */ -#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ -#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ - -/* TPI Integration ITM Data Register Definitions (FIFO1) */ -#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ -#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ - -#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ -#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ - -#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ -#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ - -#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ -#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ - -#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ -#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ - -#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ -#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ - -#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ -#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ - -/* TPI ITATBCTR0 Register Definitions */ -#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ -#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ - -/* TPI DEVID Register Definitions */ -#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ -#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ - -#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ -#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ - -#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ -#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ - -/* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if (__MPU_PRESENT == 1) -/** \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ - __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ - __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ - __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ - __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ - __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ - __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ - __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ -} MPU_Type; - -/* MPU Type Register */ -#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register */ -#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register */ -#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register */ -#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ -#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ - -#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ -#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ - -#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ -#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ - -/* MPU Region Attribute and Size Register */ -#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ -#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ - -#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ -#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ - -#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ -#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ - -#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ -#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ - -#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ -#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ - -#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ -#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ - -#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ -#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ - -#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ -#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ - -#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ -#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ - -#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ -#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ - -/*@} end of group CMSIS_MPU */ -#endif - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Type definitions for the Core Debug Registers - @{ - */ - -/** \brief Structure type to access the Core Debug Register (CoreDebug). - */ -typedef struct -{ - __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ -#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register */ -#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register */ -#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ - -#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ -#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ - -#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ -#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ - -#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ -#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ - -#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ -#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ -#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ - -#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ -#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ - -#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ -#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ - -#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ -#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ - -#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ -#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ - -#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ -#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ - -/*@} end of group CMSIS_CoreDebug */ - - -/** \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Cortex-M3 Hardware */ -#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ -#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ -#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ -#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ -#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ -#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - -#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ -#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ -#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ -#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ -#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ -#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ -#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ -#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ - -#if (__MPU_PRESENT == 1) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ -#endif - -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Debug Functions - - Core Register Access Functions - ******************************************************************************/ -/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -/** \brief Set Priority Grouping - - The function sets the priority grouping field using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ - - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ - SCB->AIRCR = reg_value; -} - - -/** \brief Get Priority Grouping - - The function reads the priority grouping field from the NVIC Interrupt Controller. - - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) -{ - return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ -} - - -/** \brief Enable External Interrupt - - The function enables a device-specific interrupt in the NVIC interrupt controller. - - \param [in] IRQn External interrupt number. Value cannot be negative. - */ -__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) -{ - NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */ -} - - -/** \brief Disable External Interrupt - - The function disables a device-specific interrupt in the NVIC interrupt controller. - - \param [in] IRQn External interrupt number. Value cannot be negative. - */ -__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) -{ - NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ -} - - -/** \brief Get Pending Interrupt - - The function reads the pending register in the NVIC and returns the pending bit - for the specified interrupt. - - \param [in] IRQn Interrupt number. - - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - */ -__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ -} - - -/** \brief Set Pending Interrupt - - The function sets the pending bit of an external interrupt. - - \param [in] IRQn Interrupt number. Value cannot be negative. - */ -__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ -} - - -/** \brief Clear Pending Interrupt - - The function clears the pending bit of an external interrupt. - - \param [in] IRQn External interrupt number. Value cannot be negative. - */ -__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ -} - - -/** \brief Get Active Interrupt - - The function reads the active register in NVIC and returns the active bit. - - \param [in] IRQn Interrupt number. - - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - */ -__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) -{ - return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ -} - - -/** \brief Set Interrupt Priority - - The function sets the priority of an interrupt. - - \note The priority cannot be set for every core interrupt. - - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - */ -__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if(IRQn < 0) { - SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ - else { - NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ -} - - -/** \brief Get Interrupt Priority - - The function reads the priority of an interrupt. The interrupt - number can be positive to specify an external (device specific) - interrupt, or negative to specify an internal (core) interrupt. - - - \param [in] IRQn Interrupt number. - \return Interrupt Priority. Value is aligned automatically to the implemented - priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) -{ - - if(IRQn < 0) { - return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ - else { - return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ -} - - -/** \brief Encode Priority - - The function encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the samllest possible priority group is set. - - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; - SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - - return ( - ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | - ((SubPriority & ((1 << (SubPriorityBits )) - 1))) - ); -} - - -/** \brief Decode Priority - - The function decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. - - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; - SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; - - *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); - *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); -} - - -/** \brief System Reset - - The function initiates a system reset request to reset the MCU. - */ -__STATIC_INLINE void NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - while(1); /* wait until reset */ -} - - -/** \brief Set Vector Table Offset - - - The function sets Vector Table Offset register. - - \param [in] TableAddress Vector table address. Value cannot be negative. - */ -__STATIC_INLINE void NVIC_SetVectorTable(uint32_t TableAddress) -{ - SCB->VTOR = TableAddress; -} - - -/** \brief Set Vector Table Offset - - - The function sets Vector Table Offset register. - - \param [in] TableAddress Vector table address. Value cannot be negative. - */ -__STATIC_INLINE void NVIC_SetCCR(void) -{ - uint32_t reg_value; - - reg_value = SCB->CCR; - reg_value |= SCB_CCR_DIV_0_TRP_Msk | SCB_CCR_UNALIGN_TRP_Msk; - SCB->CCR = reg_value; -} - - -/*@} end of CMSIS_Core_NVICFunctions */ - - - -/* ################################## SysTick function ############################################ */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if (__Vendor_SysTickConfig == 0) - -/** \brief System Tick Configuration - - The function initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - - \param [in] ticks Number of ticks between two interrupts. - - \return 0 Function succeeded. - \return 1 Function failed. - - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ - - SysTick->LOAD = ticks - 1; /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0); /* Function successful */ -} - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - -/* ##################################### Debug In/Output function ########################################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_core_DebugFunctions ITM Functions - \brief Functions that access the ITM debug interface. - @{ - */ - -extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ -#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ - - -/** \brief ITM Send Character - - The function transmits a character via the ITM channel 0, and - \li Just returns when no debugger is connected that has booked the output. - \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. - - \param [in] ch Character to transmit. - - \returns Character to transmit. - */ -__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) -{ - if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ - (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ - { - while (ITM->PORT[0].u32 == 0); - ITM->PORT[0].u8 = (uint8_t) ch; - } - return (ch); -} - - -/** \brief ITM Receive Character - - The function inputs a character via the external variable \ref ITM_RxBuffer. - - \return Received character. - \return -1 No character pending. - */ -__STATIC_INLINE int32_t ITM_ReceiveChar (void) { - int32_t ch = -1; /* no character available */ - - if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { - ch = ITM_RxBuffer; - ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ - } - - return (ch); -} - - -/** \brief ITM Check Character - - The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. - - \return 0 No character available. - \return 1 Character available. - */ -__STATIC_INLINE int32_t ITM_CheckChar (void) { - - if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { - return (0); /* no character available */ - } else { - return (1); /* character available */ - } -} - -/*@} end of CMSIS_core_DebugFunctions */ - -#endif /* __CORE_CM3_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ - -#ifdef __cplusplus -} -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/core_cmFunc.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/core_cmFunc.h deleted file mode 100644 index 21cce31..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/core_cmFunc.h +++ /dev/null @@ -1,636 +0,0 @@ -/**************************************************************************//** - * @file core_cmFunc.h - * @brief CMSIS Cortex-M Core Function Access Header File - * @version V3.20 - * @date 25. February 2013 - * - * @note - * - ******************************************************************************/ -/* Copyright (c) 2009 - 2013 ARM LIMITED - - All rights reserved. - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of ARM nor the names of its contributors may be used - to endorse or promote products derived from this software without - specific prior written permission. - * - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - ---------------------------------------------------------------------------*/ - - -#ifndef __CORE_CMFUNC_H -#define __CORE_CMFUNC_H - - -/* ########################### Core Function Access ########################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions - @{ - */ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ - -#if (__ARMCC_VERSION < 400677) - #error "Please use ARM Compiler Toolchain V4.0.677 or later!" -#endif - -/* intrinsic void __enable_irq(); */ -/* intrinsic void __disable_irq(); */ - -/** \brief Get Control Register - - This function returns the content of the Control Register. - - \return Control Register value - */ -__STATIC_INLINE uint32_t __get_CONTROL(void) -{ - register uint32_t __regControl __ASM("control"); - return(__regControl); -} - - -/** \brief Set Control Register - - This function writes the given value to the Control Register. - - \param [in] control Control Register value to set - */ -__STATIC_INLINE void __set_CONTROL(uint32_t control) -{ - register uint32_t __regControl __ASM("control"); - __regControl = control; -} - - -/** \brief Get IPSR Register - - This function returns the content of the IPSR Register. - - \return IPSR Register value - */ -__STATIC_INLINE uint32_t __get_IPSR(void) -{ - register uint32_t __regIPSR __ASM("ipsr"); - return(__regIPSR); -} - - -/** \brief Get APSR Register - - This function returns the content of the APSR Register. - - \return APSR Register value - */ -__STATIC_INLINE uint32_t __get_APSR(void) -{ - register uint32_t __regAPSR __ASM("apsr"); - return(__regAPSR); -} - - -/** \brief Get xPSR Register - - This function returns the content of the xPSR Register. - - \return xPSR Register value - */ -__STATIC_INLINE uint32_t __get_xPSR(void) -{ - register uint32_t __regXPSR __ASM("xpsr"); - return(__regXPSR); -} - - -/** \brief Get Process Stack Pointer - - This function returns the current value of the Process Stack Pointer (PSP). - - \return PSP Register value - */ -__STATIC_INLINE uint32_t __get_PSP(void) -{ - register uint32_t __regProcessStackPointer __ASM("psp"); - return(__regProcessStackPointer); -} - - -/** \brief Set Process Stack Pointer - - This function assigns the given value to the Process Stack Pointer (PSP). - - \param [in] topOfProcStack Process Stack Pointer value to set - */ -__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) -{ - register uint32_t __regProcessStackPointer __ASM("psp"); - __regProcessStackPointer = topOfProcStack; -} - - -/** \brief Get Main Stack Pointer - - This function returns the current value of the Main Stack Pointer (MSP). - - \return MSP Register value - */ -__STATIC_INLINE uint32_t __get_MSP(void) -{ - register uint32_t __regMainStackPointer __ASM("msp"); - return(__regMainStackPointer); -} - - -/** \brief Set Main Stack Pointer - - This function assigns the given value to the Main Stack Pointer (MSP). - - \param [in] topOfMainStack Main Stack Pointer value to set - */ -__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) -{ - register uint32_t __regMainStackPointer __ASM("msp"); - __regMainStackPointer = topOfMainStack; -} - - -/** \brief Get Priority Mask - - This function returns the current state of the priority mask bit from the Priority Mask Register. - - \return Priority Mask value - */ -__STATIC_INLINE uint32_t __get_PRIMASK(void) -{ - register uint32_t __regPriMask __ASM("primask"); - return(__regPriMask); -} - - -/** \brief Set Priority Mask - - This function assigns the given value to the Priority Mask Register. - - \param [in] priMask Priority Mask - */ -__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) -{ - register uint32_t __regPriMask __ASM("primask"); - __regPriMask = (priMask); -} - - -#if (__CORTEX_M >= 0x03) - -/** \brief Enable FIQ - - This function enables FIQ interrupts by clearing the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -#define __enable_fault_irq __enable_fiq - - -/** \brief Disable FIQ - - This function disables FIQ interrupts by setting the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -#define __disable_fault_irq __disable_fiq - - -/** \brief Get Base Priority - - This function returns the current value of the Base Priority register. - - \return Base Priority register value - */ -__STATIC_INLINE uint32_t __get_BASEPRI(void) -{ - register uint32_t __regBasePri __ASM("basepri"); - return(__regBasePri); -} - - -/** \brief Set Base Priority - - This function assigns the given value to the Base Priority register. - - \param [in] basePri Base Priority value to set - */ -__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) -{ - register uint32_t __regBasePri __ASM("basepri"); - __regBasePri = (basePri & 0xff); -} - - -/** \brief Get Fault Mask - - This function returns the current value of the Fault Mask register. - - \return Fault Mask register value - */ -__STATIC_INLINE uint32_t __get_FAULTMASK(void) -{ - register uint32_t __regFaultMask __ASM("faultmask"); - return(__regFaultMask); -} - - -/** \brief Set Fault Mask - - This function assigns the given value to the Fault Mask register. - - \param [in] faultMask Fault Mask value to set - */ -__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) -{ - register uint32_t __regFaultMask __ASM("faultmask"); - __regFaultMask = (faultMask & (uint32_t)1); -} - -#endif /* (__CORTEX_M >= 0x03) */ - - -#if (__CORTEX_M == 0x04) - -/** \brief Get FPSCR - - This function returns the current value of the Floating Point Status/Control register. - - \return Floating Point Status/Control register value - */ -__STATIC_INLINE uint32_t __get_FPSCR(void) -{ -#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) - register uint32_t __regfpscr __ASM("fpscr"); - return(__regfpscr); -#else - return(0); -#endif -} - - -/** \brief Set FPSCR - - This function assigns the given value to the Floating Point Status/Control register. - - \param [in] fpscr Floating Point Status/Control value to set - */ -__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) -{ -#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) - register uint32_t __regfpscr __ASM("fpscr"); - __regfpscr = (fpscr); -#endif -} - -#endif /* (__CORTEX_M == 0x04) */ - - -#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ - -// #include - - -#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ -/* TI CCS specific functions */ - -#include - - -#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ - -/** \brief Enable IRQ Interrupts - - This function enables IRQ interrupts by clearing the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void) -{ - __ASM volatile ("cpsie i" : : : "memory"); -} - - -/** \brief Disable IRQ Interrupts - - This function disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void) -{ - __ASM volatile ("cpsid i" : : : "memory"); -} - - -/** \brief Get Control Register - - This function returns the content of the Control Register. - - \return Control Register value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - - -/** \brief Set Control Register - - This function writes the given value to the Control Register. - - \param [in] control Control Register value to set - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); -} - - -/** \brief Get IPSR Register - - This function returns the content of the IPSR Register. - - \return IPSR Register value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_IPSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); - return(result); -} - - -/** \brief Get APSR Register - - This function returns the content of the APSR Register. - - \return APSR Register value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_APSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, apsr" : "=r" (result) ); - return(result); -} - - -/** \brief Get xPSR Register - - This function returns the content of the xPSR Register. - - \return xPSR Register value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_xPSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); - return(result); -} - - -/** \brief Get Process Stack Pointer - - This function returns the current value of the Process Stack Pointer (PSP). - - \return PSP Register value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PSP(void) -{ - register uint32_t result; - - __ASM volatile ("MRS %0, psp\n" : "=r" (result) ); - return(result); -} - - -/** \brief Set Process Stack Pointer - - This function assigns the given value to the Process Stack Pointer (PSP). - - \param [in] topOfProcStack Process Stack Pointer value to set - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp"); -} - - -/** \brief Get Main Stack Pointer - - This function returns the current value of the Main Stack Pointer (MSP). - - \return MSP Register value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_MSP(void) -{ - register uint32_t result; - - __ASM volatile ("MRS %0, msp\n" : "=r" (result) ); - return(result); -} - - -/** \brief Set Main Stack Pointer - - This function assigns the given value to the Main Stack Pointer (MSP). - - \param [in] topOfMainStack Main Stack Pointer value to set - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) : "sp"); -} - - -/** \brief Get Priority Mask - - This function returns the current state of the priority mask bit from the Priority Mask Register. - - \return Priority Mask value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - - -/** \brief Set Priority Mask - - This function assigns the given value to the Priority Mask Register. - - \param [in] priMask Priority Mask - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - - -#if (__CORTEX_M >= 0x03) - -/** \brief Enable FIQ - - This function enables FIQ interrupts by clearing the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_fault_irq(void) -{ - __ASM volatile ("cpsie f" : : : "memory"); -} - - -/** \brief Disable FIQ - - This function disables FIQ interrupts by setting the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_fault_irq(void) -{ - __ASM volatile ("cpsid f" : : : "memory"); -} - - -/** \brief Get Base Priority - - This function returns the current value of the Base Priority register. - - \return Base Priority register value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_BASEPRI(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri_max" : "=r" (result) ); - return(result); -} - - -/** \brief Set Base Priority - - This function assigns the given value to the Base Priority register. - - \param [in] basePri Base Priority value to set - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI(uint32_t value) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (value) : "memory"); -} - - -/** \brief Get Fault Mask - - This function returns the current value of the Fault Mask register. - - \return Fault Mask register value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FAULTMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - - -/** \brief Set Fault Mask - - This function assigns the given value to the Fault Mask register. - - \param [in] faultMask Fault Mask value to set - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); -} - -#endif /* (__CORTEX_M >= 0x03) */ - - -#if (__CORTEX_M == 0x04) - -/** \brief Get FPSCR - - This function returns the current value of the Floating Point Status/Control register. - - \return Floating Point Status/Control register value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPSCR(void) -{ -#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) - uint32_t result; - - /* Empty asm statement works as a scheduling barrier */ - __ASM volatile (""); - __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); - __ASM volatile (""); - return(result); -#else - return(0); -#endif -} - - -/** \brief Set FPSCR - - This function assigns the given value to the Floating Point Status/Control register. - - \param [in] fpscr Floating Point Status/Control value to set - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr) -{ -#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) - /* Empty asm statement works as a scheduling barrier */ - __ASM volatile (""); - __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc"); - __ASM volatile (""); -#endif -} - -#endif /* (__CORTEX_M == 0x04) */ - - -#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ -/* TASKING carm specific functions */ - -/* - * The CMSIS functions have been implemented as intrinsics in the compiler. - * Please use "carm -?i" to get an up to date list of all instrinsics, - * Including the CMSIS ones. - */ - -#endif - -/*@} end of CMSIS_Core_RegAccFunctions */ - - -#endif /* __CORE_CMFUNC_H */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/core_cmInstr.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/core_cmInstr.h deleted file mode 100644 index 9bf01e6..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/core_cmInstr.h +++ /dev/null @@ -1,688 +0,0 @@ -/**************************************************************************//** - * @file core_cmInstr.h - * @brief CMSIS Cortex-M Core Instruction Access Header File - * @version V3.20 - * @date 05. March 2013 - * - * @note - * - ******************************************************************************/ -/* Copyright (c) 2009 - 2013 ARM LIMITED - - All rights reserved. - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of ARM nor the names of its contributors may be used - to endorse or promote products derived from this software without - specific prior written permission. - * - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - ---------------------------------------------------------------------------*/ - - -#ifndef __CORE_CMINSTR_H -#define __CORE_CMINSTR_H - - -/* ########################## Core Instruction Access ######################### */ -/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface - Access to dedicated instructions - @{ -*/ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ - -#if (__ARMCC_VERSION < 400677) - #error "Please use ARM Compiler Toolchain V4.0.677 or later!" -#endif - - -/** \brief No Operation - - No Operation does nothing. This instruction can be used for code alignment purposes. - */ -#define __NOP __nop - - -/** \brief Wait For Interrupt - - Wait For Interrupt is a hint instruction that suspends execution - until one of a number of events occurs. - */ -#define __WFI __wfi - - -/** \brief Wait For Event - - Wait For Event is a hint instruction that permits the processor to enter - a low-power state until one of a number of events occurs. - */ -#define __WFE __wfe - - -/** \brief Send Event - - Send Event is a hint instruction. It causes an event to be signaled to the CPU. - */ -#define __SEV __sev - - -/** \brief Instruction Synchronization Barrier - - Instruction Synchronization Barrier flushes the pipeline in the processor, - so that all instructions following the ISB are fetched from cache or - memory, after the instruction has been completed. - */ -#define __ISB() __isb(0xF) - - -/** \brief Data Synchronization Barrier - - This function acts as a special kind of Data Memory Barrier. - It completes when all explicit memory accesses before this instruction complete. - */ -#define __DSB() __dsb(0xF) - - -/** \brief Data Memory Barrier - - This function ensures the apparent order of the explicit memory operations before - and after the instruction, without ensuring their completion. - */ -#define __DMB() __dmb(0xF) - - -/** \brief Reverse byte order (32 bit) - - This function reverses the byte order in integer value. - - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV __rev - - -/** \brief Reverse byte order (16 bit) - - This function reverses the byte order in two unsigned short values. - - \param [in] value Value to reverse - \return Reversed value - */ -#ifndef __NO_EMBEDDED_ASM -__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) -{ - rev16 r0, r0 - bx lr -} -#endif - -/** \brief Reverse byte order in signed short value - - This function reverses the byte order in a signed short value with sign extension to integer. - - \param [in] value Value to reverse - \return Reversed value - */ -#ifndef __NO_EMBEDDED_ASM -__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int32_t __REVSH(int32_t value) -{ - revsh r0, r0 - bx lr -} -#endif - - -/** \brief Rotate Right in unsigned value (32 bit) - - This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. - - \param [in] value Value to rotate - \param [in] value Number of Bits to rotate - \return Rotated value - */ -#define __ROR __ror - - -/** \brief Breakpoint - - This function causes the processor to enter Debug state. - Debug tools can use this to investigate system state when the instruction at a particular address is reached. - - \param [in] value is ignored by the processor. - If required, a debugger can use it to store additional information about the breakpoint. - */ -#define __BKPT(value) __breakpoint(value) - - -#if (__CORTEX_M >= 0x03) - -/** \brief Reverse bit order of value - - This function reverses the bit order of the given value. - - \param [in] value Value to reverse - \return Reversed value - */ -#define __RBIT __rbit - - -/** \brief LDR Exclusive (8 bit) - - This function performs a exclusive LDR command for 8 bit value. - - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -#define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) - - -/** \brief LDR Exclusive (16 bit) - - This function performs a exclusive LDR command for 16 bit values. - - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -#define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) - - -/** \brief LDR Exclusive (32 bit) - - This function performs a exclusive LDR command for 32 bit values. - - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -#define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) - - -/** \brief STR Exclusive (8 bit) - - This function performs a exclusive STR command for 8 bit values. - - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STREXB(value, ptr) __strex(value, ptr) - - -/** \brief STR Exclusive (16 bit) - - This function performs a exclusive STR command for 16 bit values. - - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STREXH(value, ptr) __strex(value, ptr) - - -/** \brief STR Exclusive (32 bit) - - This function performs a exclusive STR command for 32 bit values. - - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STREXW(value, ptr) __strex(value, ptr) - - -/** \brief Remove the exclusive lock - - This function removes the exclusive lock which is created by LDREX. - - */ -#define __CLREX __clrex - - -/** \brief Signed Saturate - - This function saturates a signed value. - - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value - */ -#define __SSAT __ssat - - -/** \brief Unsigned Saturate - - This function saturates an unsigned value. - - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value - */ -#define __USAT __usat - - -/** \brief Count leading zeros - - This function counts the number of leading zeros of a data value. - - \param [in] value Value to count the leading zeros - \return number of leading zeros in value - */ -#define __CLZ __clz - -#endif /* (__CORTEX_M >= 0x03) */ - - - -#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ - -// #include - - -#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ -/* TI CCS specific functions */ - -#include - - -#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ - -/* Define macros for porting to both thumb1 and thumb2. - * For thumb1, use low register (r0-r7), specified by constrant "l" - * Otherwise, use general registers, specified by constrant "r" */ -#if defined (__thumb__) && !defined (__thumb2__) -#define __CMSIS_GCC_OUT_REG(r) "=l" (r) -#define __CMSIS_GCC_USE_REG(r) "l" (r) -#else -#define __CMSIS_GCC_OUT_REG(r) "=r" (r) -#define __CMSIS_GCC_USE_REG(r) "r" (r) -#endif - -/** \brief No Operation - - No Operation does nothing. This instruction can be used for code alignment purposes. - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __NOP(void) -{ - __ASM volatile ("nop"); -} - - -/** \brief Wait For Interrupt - - Wait For Interrupt is a hint instruction that suspends execution - until one of a number of events occurs. - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFI(void) -{ - __ASM volatile ("wfi"); -} - - -/** \brief Wait For Event - - Wait For Event is a hint instruction that permits the processor to enter - a low-power state until one of a number of events occurs. - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFE(void) -{ - __ASM volatile ("wfe"); -} - - -/** \brief Send Event - - Send Event is a hint instruction. It causes an event to be signaled to the CPU. - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __SEV(void) -{ - __ASM volatile ("sev"); -} - - -/** \brief Instruction Synchronization Barrier - - Instruction Synchronization Barrier flushes the pipeline in the processor, - so that all instructions following the ISB are fetched from cache or - memory, after the instruction has been completed. - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __ISB(void) -{ - __ASM volatile ("isb"); -} - - -/** \brief Data Synchronization Barrier - - This function acts as a special kind of Data Memory Barrier. - It completes when all explicit memory accesses before this instruction complete. - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __DSB(void) -{ - __ASM volatile ("dsb"); -} - - -/** \brief Data Memory Barrier - - This function ensures the apparent order of the explicit memory operations before - and after the instruction, without ensuring their completion. - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __DMB(void) -{ - __ASM volatile ("dmb"); -} - - -/** \brief Reverse byte order (32 bit) - - This function reverses the byte order in integer value. - - \param [in] value Value to reverse - \return Reversed value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV(uint32_t value) -{ -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) - return __builtin_bswap32(value); -#else - uint32_t result; - - __ASM volatile ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); - return(result); -#endif -} - - -/** \brief Reverse byte order (16 bit) - - This function reverses the byte order in two unsigned short values. - - \param [in] value Value to reverse - \return Reversed value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV16(uint32_t value) -{ - uint32_t result; - - __ASM volatile ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); - return(result); -} - - -/** \brief Reverse byte order in signed short value - - This function reverses the byte order in a signed short value with sign extension to integer. - - \param [in] value Value to reverse - \return Reversed value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __REVSH(int32_t value) -{ -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - return (short)__builtin_bswap16(value); -#else - uint32_t result; - - __ASM volatile ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); - return(result); -#endif -} - - -/** \brief Rotate Right in unsigned value (32 bit) - - This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. - - \param [in] value Value to rotate - \param [in] value Number of Bits to rotate - \return Rotated value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2) -{ - return (op1 >> op2) | (op1 << (32 - op2)); -} - - -/** \brief Breakpoint - - This function causes the processor to enter Debug state. - Debug tools can use this to investigate system state when the instruction at a particular address is reached. - - \param [in] value is ignored by the processor. - If required, a debugger can use it to store additional information about the breakpoint. - */ -#define __BKPT(value) __ASM volatile ("bkpt "#value) - - -#if (__CORTEX_M >= 0x03) - -/** \brief Reverse bit order of value - - This function reverses the bit order of the given value. - - \param [in] value Value to reverse - \return Reversed value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __RBIT(uint32_t value) -{ - uint32_t result; - - __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - - -/** \brief LDR Exclusive (8 bit) - - This function performs a exclusive LDR command for 8 bit value. - - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t *addr) -{ - uint32_t result; - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); -#else - /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not - accepted by assembler. So has to use following less efficient pattern. - */ - __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); -#endif - return(result); -} - - -/** \brief LDR Exclusive (16 bit) - - This function performs a exclusive LDR command for 16 bit values. - - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint16_t __LDREXH(volatile uint16_t *addr) -{ - uint32_t result; - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); -#else - /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not - accepted by assembler. So has to use following less efficient pattern. - */ - __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); -#endif - return(result); -} - - -/** \brief LDR Exclusive (32 bit) - - This function performs a exclusive LDR command for 32 bit values. - - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __LDREXW(volatile uint32_t *addr) -{ - uint32_t result; - - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - return(result); -} - - -/** \brief STR Exclusive (8 bit) - - This function performs a exclusive STR command for 8 bit values. - - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) -{ - uint32_t result; - - __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - return(result); -} - - -/** \brief STR Exclusive (16 bit) - - This function performs a exclusive STR command for 16 bit values. - - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) -{ - uint32_t result; - - __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - return(result); -} - - -/** \brief STR Exclusive (32 bit) - - This function performs a exclusive STR command for 32 bit values. - - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) -{ - uint32_t result; - - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - return(result); -} - - -/** \brief Remove the exclusive lock - - This function removes the exclusive lock which is created by LDREX. - - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE void __CLREX(void) -{ - __ASM volatile ("clrex" ::: "memory"); -} - - -/** \brief Signed Saturate - - This function saturates a signed value. - - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value - */ -#define __SSAT(ARG1,ARG2) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1); \ - __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ - __RES; \ - }) - - -/** \brief Unsigned Saturate - - This function saturates an unsigned value. - - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value - */ -#define __USAT(ARG1,ARG2) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1); \ - __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ - __RES; \ - }) - - -/** \brief Count leading zeros - - This function counts the number of leading zeros of a data value. - - \param [in] value Value to count the leading zeros - \return number of leading zeros in value - */ -__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __CLZ(uint32_t value) -{ - uint32_t result; - - __ASM volatile ("clz %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -#endif /* (__CORTEX_M >= 0x03) */ - - - - -#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ -/* TASKING carm specific functions */ - -/* - * The CMSIS functions have been implemented as intrinsics in the compiler. - * Please use "carm -?i" to get an up to date list of all intrinsics, - * Including the CMSIS ones. - */ - -#endif - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - -#endif /* __CORE_CMINSTR_H */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/Descript.ion b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/Descript.ion deleted file mode 100644 index 30da8cf..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/Descript.ion +++ /dev/null @@ -1 +0,0 @@ -app_start.c + diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/app_start.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/app_start.c deleted file mode 100644 index 0f0cb8f..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/app_start.c +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ -//#include "build_info.h" -#include "rtl8195a.h" -#ifdef PLATFORM_FREERTOS -#include "FreeRTOS.h" -#include "task.h" -#include "platform_stdlib.h" -// #include "rtl_lib.h" -#endif - -#if defined (CONFIG_USB_EN) && defined(CONFIG_USB_HOST_ONLY) - extern void _usb_init(void); -#endif - -#if defined(CONFIG_SDIO_DEVICE_EN) && defined(CONFIG_SDIO_DEVICE_NORMAL) -extern void HalSdioInit(void); -#endif - -#if defined(CONFIG_WIFI_NORMAL) && defined(CONFIG_NETWORK) -extern void init_rom_wlan_ram_map(void); -extern void wlan_network(void); -#endif - -//3 Monitor App Function -extern void RtlConsolInitRam(uint32_t Boot, uint32_t TBLSz, void *pTBL); -#ifndef CONFIG_KERNEL -extern void RtlConsolTaskRom(void *Data); -#endif - -#ifndef CONFIG_WITHOUT_MONITOR -extern COMMAND_TABLE UartLogRamCmdTable[]; -extern uint32_t GetRamCmdNum(void); -extern void UartLogIrqHandleRam(void * Data); -#endif - -#ifdef CONFIG_APP_DEMO -#define MAIN_APP_DEFAULT_STACK_SIZE 2048 -#define MAIN_APP_DEFAULT_PRIORITY (tskIDLE_PRIORITY + 1) -#endif - -#ifdef CONFIG_MBED_ENABLED -extern void __libc_fini_array (void); -extern void __libc_init_array (void); -extern void SVC_Handler (void); -extern void PendSV_Handler (void); -extern void SysTick_Handler (void); -#endif - -#ifndef CONFIG_WITHOUT_MONITOR -static -void -ReRegisterPlatformLogUart( - void -) -{ - IRQ_HANDLE UartIrqHandle; - - //4 Register Log Uart Callback function - UartIrqHandle.Data = (uint32_t)NULL;//(uint32_t)&UartAdapter; - UartIrqHandle.IrqNum = UART_LOG_IRQ; - UartIrqHandle.IrqFun = (IRQ_FUN) UartLogIrqHandleRam; - UartIrqHandle.Priority = 5; - - - //4 Register Isr handle - InterruptUnRegister(&UartIrqHandle); - InterruptRegister(&UartIrqHandle); -#if !TASK_SCHEDULER_DISABLED - RtlConsolInitRam((uint32_t)RAM_STAGE,(uint32_t)GetRamCmdNum(),(void*)&UartLogRamCmdTable); -#else - //RtlConsolInit(ROM_STAGE,GetRomCmdNum(),(void*)&UartLogRomCmdTable);// executing boot seq., - //pUartLogCtl->TaskRdy = 1; - RtlConsolInitRam((uint32_t)ROM_STAGE,(uint32_t)GetRamCmdNum(),(void*)&UartLogRamCmdTable); -#endif -} -#endif // end of "#ifndef CONFIG_WITHOUT_MONITOR" - - -void ShowRamBuildInfo(void) -{ - /* - DBG_8195A("=========================================================\n\n"); - //DBG_8195A("Build Time: "UTS_VERSION"\n"); - DBG_8195A("Build Time: "RTL8195AFW_COMPILE_TIME"\n"); - DBG_8195A("Build Author: "RTL8195AFW_COMPILE_BY"\n"); - DBG_8195A("Build Host: "RTL8195AFW_COMPILE_HOST"\n"); - DBG_8195A("Build ToolChain Version: "RTL195AFW_COMPILER"\n\n"); - DBG_8195A("=========================================================\n"); - */ -} - -#if 1 //def CONFIG_APP_DEMO -#include "rtl8195a.h" -//#include "device.h" -//#include "gpio_api.h" // mbed -typedef struct _UART_LOG_BUF_ { - uint8_t BufCount; //record the input cmd char number. - uint8_t UARTLogBuf[127]; //record the input command. -} UART_LOG_BUF, *PUART_LOG_BUF; - -//MON_RAM_BSS_SECTION -typedef struct _UART_LOG_CTL_ { - uint8_t NewIdx; //+0 - uint8_t SeeIdx; //+1 - uint8_t RevdNo; //+2 - uint8_t EscSTS; //+3 - uint8_t ExecuteCmd; //+4 - uint8_t ExecuteEsc; //+5 - uint8_t BootRdy; //+6 - uint8_t Resvd; //+7 - PUART_LOG_BUF pTmpLogBuf; - void *pfINPUT; - PCOMMAND_TABLE pCmdTbl; - uint32_t CmdTblSz; - - uint32_t CRSTS; - - uint8_t (*pHistoryBuf)[127]; - - uint32_t TaskRdy; - uint32_t Sema; -} UART_LOG_CTL, *PUART_LOG_CTL; - -extern volatile UART_LOG_CTL *pUartLogCtl; - -_WEAK int main(void) -{ - HalPinCtrlRtl8195A(JTAG, 0, 1); - - DiagPrintf("\r\nRTL Console ROM: Start - press key 'Up', Help '?'\r\n"); - while(pUartLogCtl->ExecuteEsc != 1); - pUartLogCtl->RevdNo = 0; - pUartLogCtl->BootRdy = 1; - DiagPrintf("\r"); - while(1) { - while(pUartLogCtl->ExecuteCmd != 1 ); - UartLogCmdExecute(pUartLogCtl); - DiagPrintf("\r"); - pUartLogCtl->ExecuteCmd = 0; - } - - return 0; -} -#else -//default main -_WEAK int main(void) -{ - // Init SDIO -#if defined(CONFIG_SDIO_DEVICE_EN) && defined(CONFIG_SDIO_DEVICE_NORMAL) - HalSdioInit(); -#endif - -#ifndef CONFIG_WITHOUT_MONITOR - ReRegisterPlatformLogUart(); -#endif - -#if defined(CONFIG_WIFI_NORMAL) && defined(CONFIG_NETWORK) - wlan_network(); -#else - -#if defined (CONFIG_USB_EN) && defined(CONFIG_USB_HOST_ONLY) - _usb_init(); -#endif - -#endif // end of else of "#if defined(CONFIG_WIFI_NORMAL) && defined(CONFIG_NETWORK)" - - //3 4)Enable Schedule -#if defined(CONFIG_KERNEL) && !TASK_SCHEDULER_DISABLED - #ifdef PLATFORM_FREERTOS - vTaskStartScheduler(); - #endif -#else - RtlConsolTaskRom(NULL); -#endif - return 0; -} -#endif // end of #if CONFIG_APP_DEMO - -__weak void __low_level_init(void) -{ - // weak function -} - -#if defined ( __ICCARM__ ) -#pragma section="SDRAM.bss" -#pragma section="SDRAM.bss" -#endif -// The Main App entry point -void _AppStart(void) -{ -#ifdef CONFIG_MBED_ENABLED - InterruptForOSInit((void*)SVC_Handler, - (void*)PendSV_Handler, - (void*)SysTick_Handler); - __asm ( - "ldr r0, =SystemInit\n" - "blx r0\n" - "ldr r0, =_start\n" - "bx r0\n" - ); - - for(;;); -#else - // It's Not Mbed BSP -#ifdef CONFIG_KERNEL -#endif - - // Disable debug info log of spiflash - DBG_INFO_MSG_OFF(_DBG_SPI_FLASH_); - -#ifdef CONFIG_APP_DEMO -#ifdef PLATFORM_FREERTOS - xTaskCreate( (TaskFunction_t)main, "MAIN_APP__TASK", (MAIN_APP_DEFAULT_STACK_SIZE/4), (void *)NULL, MAIN_APP_DEFAULT_PRIORITY, NULL); - vTaskStartScheduler(); -#endif - -#else - - __low_level_init(); -#if defined ( __ICCARM__ ) - // __iar_data_init3 replaced by __iar_cstart_call_ctors, just do c++ constructor, - __iar_cstart_call_ctors(NULL); -#ifdef CONFIG_SDR_EN - // clear SDRAM bss - uint8_t* __sdram_bss_start__ = (uint8_t*)__section_begin("SDRAM.bss"); - uint8_t* __sdram_bss_end__ = (uint8_t*)__section_end("SDRAM.bss"); - //DiagPrintf("clean sdram bss %8x to %8x\n\r", __sdram_bss_start__, __sdram_bss_end__); - if((int)__sdram_bss_end__-(int)__sdram_bss_start__ > 0) - memset(__sdram_bss_start__, 0, (int)__sdram_bss_end__-(int)__sdram_bss_start__); -#endif -#elif defined ( __GNUC__ ) -#ifdef CONFIG_SDR_EN - // clear SDRAM bss - extern uint8_t __sdram_bss_start__[]; - extern uint8_t __sdram_bss_end__[]; - //DiagPrintf("clean sdram bss %8x to %8x\n\r", __sdram_bss_start__, __sdram_bss_end__); - if((int)__sdram_bss_end__-(int)__sdram_bss_start__ > 0) - memset(__sdram_bss_start__, 0, (int)__sdram_bss_end__-(int)__sdram_bss_start__); -#endif -#else - #error !!!!!!NOT Support this compiler!!!!!! -#endif - // force SP align to 8 byte not 4 byte (initial SP is 4 byte align) - __asm( - "mov r0, sp\n" - "bic r0, r0, #7\n" - "mov sp, r0\n" - ); - - main(); -#if defined ( __ICCARM__ ) - // for compile issue, If user never call this function, Liking fail - __iar_data_init3(); -#endif -#endif // end of #if CONFIG_APP_DEMO - -#endif // end of else of "#ifdef CONFIG_MBED_ENABLED" -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/cmsis.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/cmsis.h deleted file mode 100644 index 420fd53..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/cmsis.h +++ /dev/null @@ -1,38 +0,0 @@ -/* mbed Microcontroller Library - * A generic CMSIS include header - ******************************************************************************* - * Copyright (c) 2014, STMicroelectronics - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ******************************************************************************* - */ - -#ifndef MBED_CMSIS_H -#define MBED_CMSIS_H - -#include "rtl8195a.h" -#include "cmsis_nvic.h" - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/cmsis_nvic.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/cmsis_nvic.c deleted file mode 100644 index e89187b..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/cmsis_nvic.c +++ /dev/null @@ -1,55 +0,0 @@ -/* mbed Microcontroller Library - * CMSIS-style functionality to support dynamic vectors - ******************************************************************************* - * Copyright (c) 2014, STMicroelectronics - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ******************************************************************************* - */ -#include "cmsis_nvic.h" - -#define NVIC_RAM_VECTOR_ADDRESS (0x10000000) // Vectors positioned at start of RAM -#define NVIC_ROM_VECTOR_ADDRESS (0x00000000) // Initial vector position at start of ROM - -void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) { - uint32_t *vectors = (uint32_t *)SCB->VTOR; - uint32_t i; - - // Copy and switch to dynamic vectors if the first time called - if (SCB->VTOR != NVIC_RAM_VECTOR_ADDRESS) { - uint32_t *old_vectors = vectors; - vectors = (uint32_t*)NVIC_RAM_VECTOR_ADDRESS; - for (i=0; iVTOR = (uint32_t)NVIC_RAM_VECTOR_ADDRESS; - } - vectors[IRQn + NVIC_USER_IRQ_OFFSET] = vector; -} - -uint32_t NVIC_GetVector(IRQn_Type IRQn) { - uint32_t *vectors = (uint32_t*)SCB->VTOR; - return vectors[IRQn + NVIC_USER_IRQ_OFFSET]; -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/cmsis_nvic.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/cmsis_nvic.h deleted file mode 100644 index ca0b5b9..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/cmsis_nvic.h +++ /dev/null @@ -1,54 +0,0 @@ -/* mbed Microcontroller Library - * CMSIS-style functionality to support dynamic vectors - ******************************************************************************* - * Copyright (c) 2014, STMicroelectronics - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ******************************************************************************* - */ - -#ifndef MBED_CMSIS_NVIC_H -#define MBED_CMSIS_NVIC_H - -// CORE: 64 vectors = 64 bytes from 0x00 to 0x3F -// MCU Peripherals: 85 vectors = 340 bytes from 0x40 to ... -// Total: 128 vectors = 512 bytes (0x200) to be reserved in RAM -#define NVIC_NUM_VECTORS 128 -#define NVIC_USER_IRQ_OFFSET 64 - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector); -uint32_t NVIC_GetVector(IRQn_Type IRQn); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/diag.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/diag.h deleted file mode 100644 index 05b098f..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/diag.h +++ /dev/null @@ -1,888 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _DIAG_H_ -#define _DIAG_H_ - -#include "basic_types.h" -#include "platform_autoconf.h" - -#include /* for size_t */ - -extern uint32_t ConfigDebugErr; -extern uint32_t ConfigDebugInfo; -extern uint32_t ConfigDebugWarn; - -extern uint32_t CfgSysDebugErr; -extern uint32_t CfgSysDebugInfo; -extern uint32_t CfgSysDebugWarn; - -#define DBG_ERR_MSG_ON(x) (ConfigDebugErr |= (x)) -#define DBG_WARN_MSG_ON(x) (ConfigDebugWarn |= (x)) -#define DBG_INFO_MSG_ON(x) (ConfigDebugInfo |= (x)) - -#define DBG_ERR_MSG_OFF(x) (ConfigDebugErr &= ~(x)) -#define DBG_WARN_MSG_OFF(x) (ConfigDebugWarn &= ~(x)) -#define DBG_INFO_MSG_OFF(x) (ConfigDebugInfo &= ~(x)) - -// Define debug group -#define _DBG_BOOT_ 0x00000001 -#define _DBG_GDMA_ 0x00000002 -#define _DBG_GPIO_ 0x00000004 -#define _DBG_TIMER_ 0x00000008 -#define _DBG_I2C_ 0x00000010 -#define _DBG_I2S_ 0x00000020 -#define _DBG_MII_ 0x00000040 -#define _DBG_NFC_ 0x00000080 -#define _DBG_PCM_ 0x00000100 -#define _DBG_PWM_ 0x00000200 -#define _DBG_SDIO_ 0x00000400 -#define _DBG_SSI_ 0x00000800 -#define _DBG_SPI_FLASH_ 0x00001000 -#define _DBG_SDR_ 0x00002000 -#define _DBG_UART_ 0x00004000 -#define _DBG_USB_OTG_ 0x00008000 -#define _DBG_USB_CORE_ 0x00010000 -#define _DBG_CRYPTO_ 0x00020000 -#define _DBG_ADC_ 0x00040000 -#define _DBG_DAC_ 0x00080000 -#define _DBG_TCM_HEAP_ 0x00100000 -#define _DBG_RAM_HEAP_ 0x00200000 -#define _DBG_FEEP_ 0x00400000 - -#define _DBG_MISC_ 0x40000000 -#define _DBG_FAULT_ 0x80000000 - -typedef enum _SYSTEM_DBG_DEFINE_ { - _SYSDBG_MISC_ = 1<<0, - _SYSDBG_MAILBOX_ = 1<<1, - _SYSDBG_TIMER_ = 1<<2 - -} SYSTEM_DBG; - -extern -_LONG_CALL_ROM_ uint32_t -DiagPrintf( - IN const char *fmt, ... -); - -uint32_t -DiagSPrintf( - IN uint8_t *buf, - IN const char *fmt, ... -); - -int -prvDiagPrintf( - IN const char *fmt, ... -); - -int -prvDiagSPrintf( - IN char *buf, - IN const char *fmt, ... -); - -extern char print_off; - -#if CONFIG_DEBUG_LOG > 3 -#define debug_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) -#define info_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) -#define warning_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) -#define error_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) -#elif CONFIG_DEBUG_LOG > 2 -#define debug_printf(fmt, ...) -#define info_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) -#define warning_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) -#define error_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) -#elif CONFIG_DEBUG_LOG > 1 -#define debug_printf(fmt, ...) -#define info_printf(fmt, ...) -#define warning_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) -#define error_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) -#elif CONFIG_DEBUG_LOG > 0 -#define debug_printf(fmt, ...) -#define info_printf(fmt, ...) -#define warning_printf(fmt, ...) -#define error_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__) -#else -#define debug_printf(fmt, ...) -#define info_printf(fmt, ...) -#define warning_printf(fmt, ...) -#define error_printf(fmt, ...) -#endif - -#define _DbgDump DiagPrintf - -#define DRIVER_PREFIX "RTL8195A[Driver]: " -#define HAL_PREFIX "RTL8195A[HAL]: " -#define DMA_PREFIX "RTL8195A[DMA]: " -#define SDIO_PREFIX "RTL8195A[SDIO]" -#define MBOX_PREFIX "[OS-MBOX]" -#define TIMER_PREFIX "[OS-TMR]" - -#define BOOT_ERR_PREFIX "[BOOT Err]" -#define BOOT_WARN_PREFIX "[BOOT Wrn]" -#define BOOT_INFO_PREFIX "[BOOT Inf]" - -#define GDMA_ERR_PREFIX "[GDMA Err]" -#define GDMA_WARN_PREFIX "[GDMA Wrn]" -#define GDMA_INFO_PREFIX "[GDMA Inf]" - -#define GPIO_ERR_PREFIX "[GPIO Err]" -#define GPIO_WARN_PREFIX "[GPIO Wrn]" -#define GPIO_INFO_PREFIX "[GPIO Inf]" - -#define TIMER_ERR_PREFIX "[TIMR Err]" -#define TIMER_WARN_PREFIX "[TIMR Wrn]" -#define TIMER_INFO_PREFIX "[TIMR Inf]" - -#define I2C_ERR_PREFIX "[I2C Err]" -#define I2C_WARN_PREFIX "[I2C Wrn]" -#define I2C_INFO_PREFIX "[I2C Inf]" - -#define I2S_ERR_PREFIX "[I2S Err]" -#define I2S_WARN_PREFIX "[I2S Wrn]" -#define I2S_INFO_PREFIX "[I2S Inf]" - -#define MII_ERR_PREFIX "[MII Err]" -#define MII_WARN_PREFIX "[MII Wrn]" -#define MII_INFO_PREFIX "[MII Inf]" - -#define NFC_ERR_PREFIX "[NFC Err]" -#define NFC_WARN_PREFIX "[NFC Wrn]" -#define NFC_INFO_PREFIX "[NFC Inf]" - -#define PCM_ERR_PREFIX "[PCM Err]" -#define PCM_WARN_PREFIX "[PCM Wrn]" -#define PCM_INFO_PREFIX "[PCM Inf]" - -#define PWM_ERR_PREFIX "[PWM Err]" -#define PWM_WARN_PREFIX "[PWM Wrn]" -#define PWM_INFO_PREFIX "[PWM Inf]" - -#define SSI_ERR_PREFIX "[SSI Err]" -#define SSI_WARN_PREFIX "[SSI Wrn]" -#define SSI_INFO_PREFIX "[SSI Inf]" - -#define SDIO_ERR_PREFIX "[SDIO Err]" -#define SDIO_WARN_PREFIX "[SDIO Wrn]" -#define SDIO_INFO_PREFIX "[SDIO Inf]" - -#define SPIF_ERR_PREFIX "[SPIF Err]" -#define SPIF_WARN_PREFIX "[SPIF Wrn]" -#define SPIF_INFO_PREFIX "[SPIF Inf]" - -#define SDR_ERR_PREFIX "[SDR Err]" -#define SDR_WARN_PREFIX "[SDR Wrn]" -#define SDR_INFO_PREFIX "[SDR Inf]" - -#define UART_ERR_PREFIX "[UART Err]" -#define UART_WARN_PREFIX "[UART Wrn]" -#define UART_INFO_PREFIX "[UART Inf]" - -#define USB_ERR_PREFIX "[USB Err]" -#define USB_WARN_PREFIX "[USB Wrn]" -#define USB_INFO_PREFIX "[USB Inf]" - -#define IPSEC_ERR_PREFIX "[CRYP Err]" -#define IPSEC_WARN_PREFIX "[CRYP Wrn]" -#define IPSEC_INFO_PREFIX "[CRYP Inf]" - -#define ADC_ERR_PREFIX "[ADC Err]" -#define ADC_WARN_PREFIX "[ADC Wrn]" -#define ADC_INFO_PREFIX "[ADC Inf]" - -#define DAC_ERR_PREFIX "[DAC Err]" -#define DAC_WARN_PREFIX "[DAC Wrn]" -#define DAC_INFO_PREFIX "[DAC Inf]" - -#define MISC_ERR_PREFIX "[MISC Err]" -#define MISC_WARN_PREFIX "[MISC Wrn]" -#define MISC_INFO_PREFIX "[MISC Inf]" - -#define OTG_ERR_PREFIX "[OTG Err]" -#define OTG_WARN_PREFIX "[OTG Wrn]" -#define OTG_INFO_PREFIX "[OTG Inf]" - -#define HEAP_ERR_PREFIX "[HEAP Err]" -#define HEAP_WARN_PREFIX "[HEAP Wrn]" -#define HEAP_INFO_PREFIX "[HEAP Inf]" - -#define FEEP_ERR_PREFIX "[FEEP Err]" -#define FEEP_WARN_PREFIX "[FEEP Wrn]" -#define FEEP_INFO_PREFIX "[FEEP Inf]" - -#define OTG_PREFIX "RTL8195A[OTG]: " -#define OTG_PREFIX_LVL "RTL8195A[OTG_LVL_%2x]: " - -#ifdef CONFIG_DEBUG_LOG - #if CONFIG_DEBUG_LOG > 2 - #define CONFIG_DEBUG_ERROR 1 - #define CONFIG_DEBUG_WARN 1 - #define CONFIG_DEBUG_INFO 1 - #elif CONFIG_DEBUG_LOG > 1 - #define CONFIG_DEBUG_ERROR 1 - #define CONFIG_DEBUG_WARN 1 - #elif CONFIG_DEBUG_LOG > 0 - #define CONFIG_DEBUG_ERROR 1 - #endif -#endif - -#ifndef likely -#define likely(x) (x) -#define unlikely(x) (x) -#endif - - -#if CONFIG_DEBUG_ERROR // if Build-In Debug Error Message - -#define DBG_BOOT_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_BOOT_)) \ - _DbgDump(BOOT_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_GDMA_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_GDMA_)) \ - _DbgDump(GDMA_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_GPIO_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_GPIO_)) \ - _DbgDump(GPIO_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_TIMER_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_TIMER_)) \ - _DbgDump(TIMER_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_I2C_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_I2C_)) \ - _DbgDump(I2C_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_I2S_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_I2S_)) \ - _DbgDump(I2S_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_MII_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_MII_)) \ - _DbgDump(MII_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_NFC_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_NFC_)) \ - _DbgDump(NFC_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_PCM_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_PCM_)) \ - _DbgDump(PCM_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_PWM_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_PWM_)) \ - _DbgDump(PWM_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_SSI_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_SSI_)) \ - _DbgDump(SSI_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_SDIO_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_SDIO_)) \ - _DbgDump(SDIO_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_SPIF_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_SPI_FLASH_)) \ - _DbgDump(SPIF_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_SDR_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_SDR_)) \ - _DbgDump(SDR_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_UART_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_UART_)) \ - _DbgDump(UART_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_USBOTG_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_USB_OTG_)) \ - _DbgDump( __VA_ARGS__);\ -}while(0) - -#define DBG_USBCOR_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_USB_CORE_)) \ - _DbgDump(USB_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_CRYPTO_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_CRYPTO_)) \ - _DbgDump(IPSEC_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_ADC_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_ADC_)) \ - _DbgDump(ADC_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_DAC_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_DAC_)) \ - _DbgDump(DAC_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define MSG_MBOX_ERR(...) do {\ - if (likely(CfgSysDebugErr & _SYSDBG_MAILBOX_)) \ - _DbgDump(MBOX_PREFIX __VA_ARGS__);\ -}while(0) - -#define MSG_TIMER_ERR(...) do {\ - if (likely(CfgSysDebugErr & _SYSDBG_TIMER_)) \ - _DbgDump(TIMER_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_8195A_OTG(...) do{\ - if (unlikely(ConfigDebugInfo & _DBG_USB_OTG_)) \ - _DbgDump(OTG_PREFIX __VA_ARGS__);\ - }while(0) - -#define DBG_8195A_OTG_INFO(...) do{\ - if (unlikely(ConfigDebugInfo & _DBG_USB_OTG_)) \ - _DbgDump(OTG_PREFIX __VA_ARGS__);\ - }while(0) - -#define DBG_8195A_OTG_WARN(...) do{\ - if (unlikely(ConfigDebugWarn & _DBG_USB_OTG_)) \ - _DbgDump(OTG_PREFIX __VA_ARGS__);\ - }while(0) - -#define DBG_8195A_OTG_ERR(...) do{\ - if (unlikely(ConfigDebugErr & _DBG_USB_OTG_)) \ - _DbgDump(OTG_PREFIX __VA_ARGS__);\ - }while(0) - -#define DBG_8195A_OTG_LVL(LVL,...) do{\ - if (unlikely(ConfigDebugInfo & _DBG_USB_OTG_)){ \ - _DbgDump(OTG_PREFIX_LVL,LVL);\ - _DbgDump(__VA_ARGS__);\ - }\ -}while(0) - -#define DBG_TCM_HEAP_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_TCM_HEAP_)){ \ - _DbgDump(HEAP_ERR_PREFIX ANSI_COLOR_RED);\ - _DbgDump(__VA_ARGS__ );\ - _DbgDump(ANSI_COLOR_RESET);}\ -}while(0) - -#define DBG_RAM_HEAP_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_RAM_HEAP_)){ \ - _DbgDump(HEAP_ERR_PREFIX ANSI_COLOR_RED);\ - _DbgDump(__VA_ARGS__ );\ - _DbgDump(ANSI_COLOR_RESET);}\ -}while(0) - -#define DBG_MISC_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_MISC_)) \ - _DbgDump(MISC_ERR_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_FEEP_ERR(...) do {\ - if (likely(ConfigDebugErr & _DBG_FEEP_)) \ - _DbgDump(FEEP_ERR_PREFIX __VA_ARGS__);\ -}while(0) - - -#else // else of "#if CONFIG_DEBUG_ERROR" - -#define DBG_BOOT_ERR(...) -#define DBG_GDMA_ERR(...) -#define DBG_GPIO_ERR(...) -#define DBG_TIMER_ERR(...) -#define DBG_I2C_ERR(...) -#define DBG_I2S_ERR(...) -#define DBG_MII_ERR(...) -#define DBG_NFC_ERR(...) -#define DBG_PCM_ERR(...) -#define DBG_PWM_ERR(...) -#define DBG_SSI_ERR(...) -#define DBG_SDIO_ERR(...) -#define DBG_SPIF_ERR(...) -#define DBG_SDR_ERR(...) -#define DBG_UART_ERR(...) -#define DBG_USBOTG_ERR(...) -#define DBG_USBCOR_ERR(...) -#define DBG_CRYPTO_ERR(...) -#define DBG_ADC_ERR(...) -#define DBG_DAC_ERR(...) - -#define MSG_MBOX_ERR(...) -#define MSG_TIMER_ERR(...) -#define DBG_8195A_OTG(...) -#define DBG_8195A_OTG_LVL(LVL,...) -#define DBG_8195A_OTG_INFO(...) -#define DBG_8195A_OTG_WARN(...) -#define DBG_8195A_OTG_ERR(...) - -#define DBG_TCM_HEAP_ERR(...) -#define DBG_RAM_HEAP_ERR(...) -#define DBG_FEEP_ERR(...) -#define DBG_MISC_ERR(...) - -#endif // end of else of "#if CONFIG_DEBUG_ERROR" - -// ============================================================= - -#if CONFIG_DEBUG_WARN // if Build-In Debug Warring Message - -#define DBG_BOOT_WARN(...) do {\ - if (unlikely(ConfigDebugWarn& _DBG_BOOT_)) \ - _DbgDump(BOOT_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_GDMA_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_GDMA_)) \ - _DbgDump(GDMA_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_GPIO_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_GPIO_)) \ - _DbgDump(GPIO_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_TIMER_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_TIMER_)) \ - _DbgDump(TIMER_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_I2C_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_I2C_)) \ - _DbgDump(I2C_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_I2S_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_I2S_)) \ - _DbgDump(I2S_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_MII_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_MII_)) \ - _DbgDump(MII_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_NFC_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_NFC_)) \ - _DbgDump(NFC_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_PCM_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_PCM_)) \ - _DbgDump(PCM_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_PWM_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_PWM_)) \ - _DbgDump(PWM_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_SSI_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_SSI_)) \ - _DbgDump(SSI_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_SDIO_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_SDIO_)) \ - _DbgDump(SDIO_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_SPIF_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_SPI_FLASH_)) \ - _DbgDump(SPIF_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_SDR_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_SDR_)) \ - _DbgDump(SDR_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_UART_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_UART_)) \ - _DbgDump(UART_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_USBOTG_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_USB_OTG_)) \ - _DbgDump( __VA_ARGS__);\ -}while(0) - -#define DBG_USBCOR_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_USB_CORE_)) \ - _DbgDump(USB_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_CRYPTO_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_CRYPTO_)) \ - _DbgDump(IPSEC_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_ADC_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_ADC_)) \ - _DbgDump(ADC_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_DAC_WARN(...) do {\ - if (unlikely(ConfigDebugWarn & _DBG_DAC_)) \ - _DbgDump(DAC_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define MSG_MBOX_WARN(...) do {\ - if (unlikely(CfgSysDebugWarn& _SYSDBG_MAILBOX_)) \ - _DbgDump(MBOX_PREFIX __VA_ARGS__);\ -}while(0) - -#define MSG_TIMER_WARN(...) do {\ - if (unlikely(CfgSysDebugWarn & _SYSDBG_TIMER_)) \ - _DbgDump(TIMER_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_TCM_HEAP_WARN(...) do {\ - if (likely(ConfigDebugWarn & _DBG_TCM_HEAP_)){ \ - _DbgDump(HEAP_WARN_PREFIX ANSI_COLOR_MAGENTA);\ - _DbgDump(__VA_ARGS__ );\ - _DbgDump(ANSI_COLOR_RESET);}\ -}while(0) - -#define DBG_RAM_HEAP_WARN(...) do {\ - if (likely(ConfigDebugWarn & _DBG_RAM_HEAP_)){ \ - _DbgDump(HEAP_WARN_PREFIX ANSI_COLOR_MAGENTA);\ - _DbgDump(__VA_ARGS__ );\ - _DbgDump(ANSI_COLOR_RESET);}\ -}while(0) - -#define DBG_FEEP_WARN(...) do {\ - if (likely(ConfigDebugWarn & _DBG_FEEP_)) \ - _DbgDump(FEEP_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_MISC_WARN(...) do {\ - if (likely(ConfigDebugWarn & _DBG_MISC_)) \ - _DbgDump(MISC_WARN_PREFIX __VA_ARGS__);\ -}while(0) - -#else // else of "#if CONFIG_DEBUG_WARN" - -#define DBG_BOOT_WARN(...) -#define DBG_GDMA_WARN(...) -#define DBG_GPIO_WARN(...) -#define DBG_TIMER_WARN(...) -#define DBG_I2C_WARN(...) -#define DBG_I2S_WARN(...) -#define DBG_MII_WARN(...) -#define DBG_NFC_WARN(...) -#define DBG_PCM_WARN(...) -#define DBG_PWM_WARN(...) -#define DBG_SSI_WARN(...) -#define DBG_SDIO_WARN(...) -#define DBG_SPIF_WARN(...) -#define DBG_SDR_WARN(...) -#define DBG_UART_WARN(...) -#define DBG_USBOTG_WARN(...) -#define DBG_USBCOR_WARN(...) -#define DBG_CRYPTO_WARN(...) -#define DBG_ADC_WARN(...) -#define DBG_DAC_WARN(...) -#define DBG_TCM_HEAP_WARN(...) -#define DBG_RAM_HEAP_WARN(...) -#define DBG_FEEP_WARN(...) -#define DBG_MISC_WARN(...) - -#define MSG_MBOX_WARN(...) -#define MSG_TIMER_WARN(...) - -#endif // end of else of "#if CONFIG_DEBUG_WARN" - -// ============================================================= - -#if CONFIG_DEBUG_INFO // if Build-In Debug Information Message - -#define DBG_BOOT_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_BOOT_)) \ - _DbgDump(BOOT_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_GDMA_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_GDMA_)) \ - _DbgDump(GDMA_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_GPIO_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_GPIO_)) \ - _DbgDump(GPIO_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_TIMER_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_TIMER_)) \ - _DbgDump(TIMER_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_I2C_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_I2C_)) \ - _DbgDump(I2C_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_I2S_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_I2S_)) \ - _DbgDump(I2S_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_MII_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_MII_)) \ - _DbgDump(MII_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_NFC_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_NFC_)) \ - _DbgDump(NFC_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_PCM_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_PCM_)) \ - _DbgDump(PCM_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_PWM_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_PWM_)) \ - _DbgDump(PWM_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_SSI_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_SSI_)) \ - _DbgDump(SSI_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_SDIO_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_SDIO_)) \ - _DbgDump(SDIO_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_SPIF_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_SPI_FLASH_)) \ - _DbgDump(SPIF_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_SDR_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_SDR_)) \ - _DbgDump(SDR_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_UART_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_UART_)) \ - _DbgDump(UART_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_USBOTG_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_USB_OTG_)) \ - _DbgDump( __VA_ARGS__);\ -}while(0) - -#define DBG_USBCOR_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_USB_CORE_)) \ - _DbgDump(USB_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_CRYPTO_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_CRYPTO_)) \ - _DbgDump(IPSEC_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_ADC_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_ADC_)) \ - _DbgDump(ADC_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_DAC_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_DAC_)) \ - _DbgDump(DAC_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define MSG_MBOX_INFO(...) do {\ - if (unlikely(CfgSysDebugInfo & _SYSDBG_MAILBOX_)) \ - _DbgDump(MBOX_PREFIX __VA_ARGS__);\ -}while(0) - -#define MSG_TIMER_INFO(...) do {\ - if (unlikely(CfgSysDebugInfo & _SYSDBG_TIMER_)) \ - _DbgDump(TIMER_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_TCM_HEAP_INFO(...) do {\ - if (likely(ConfigDebugInfo & _DBG_TCM_HEAP_)){\ - _DbgDump(HEAP_INFO_PREFIX ANSI_COLOR_BLUE);\ - _DbgDump(__VA_ARGS__ );\ - _DbgDump(ANSI_COLOR_RESET);}\ -}while(0) - -#define DBG_RAM_HEAP_INFO(...) do {\ - if (likely(ConfigDebugInfo & _DBG_RAM_HEAP_)){ \ - _DbgDump(HEAP_INFO_PREFIX ANSI_COLOR_BLUE);\ - _DbgDump(__VA_ARGS__ );\ - _DbgDump(ANSI_COLOR_RESET);}\ -}while(0) - -#define DBG_FEEP_INFO(...) do {\ - if (unlikely(ConfigDebugInfo & _DBG_FEEP_)) \ - _DbgDump(FEEP_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_MISC_INFO(...) do {\ - if (likely(ConfigDebugInfo & _DBG_MISC_)) \ - _DbgDump(MISC_INFO_PREFIX __VA_ARGS__);\ -}while(0) - -#else // else of "#if CONFIG_DEBUG_INFO" - -#define DBG_BOOT_INFO(...) -#define DBG_GDMA_INFO(...) -#define DBG_GPIO_INFO(...) -#define DBG_TIMER_INFO(...) -#define DBG_I2C_INFO(...) -#define DBG_I2S_INFO(...) -#define DBG_MII_INFO(...) -#define DBG_NFC_INFO(...) -#define DBG_PCM_INFO(...) -#define DBG_PWM_INFO(...) -#define DBG_SSI_INFO(...) -#define DBG_SDIO_INFO(...) -#define DBG_SPIF_INFO(...) -#define DBG_SDR_INFO(...) -#define DBG_UART_INFO(...) -#define DBG_USBOTG_INFO(...) -#define DBG_USBCOR_INFO(...) -#define DBG_CRYPTO_INFO(...) -#define DBG_ADC_INFO(...) -#define DBG_DAC_INFO(...) -#define DBG_RAM_HEAP_INFO(...) -#define DBG_TCM_HEAP_INFO(...) -#define DBG_FEEP_INFO(...) -#define DBG_MISC_INFO(...) - -#define MSG_MBOX_INFO(...) -#define MSG_TIMER_INFO(...) - -#endif // end of else of "#if CONFIG_DEBUG_INFO" - -// ============================================================= - -#ifdef CONFIG_DEBUG_LOG - -#define DBG_8195A_DRIVER(...) do {\ - if (unlikely(ConfigDebugErr & (_DBG_I2S_|_DBG_PCM_|_DBG_TIMER_))) \ - _DbgDump(DRIVER_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_8195A_HAL(...) do {\ - if (unlikely(ConfigDebugErr & (_DBG_SDR_|_DBG_MISC_))) \ - _DbgDump(HAL_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_8195A_DMA(...) do {\ - if (unlikely(ConfigDebugErr & _DBG_GDMA_)) \ - _DbgDump(DMA_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_8195A_SDIO(...) do {\ - if (unlikely(ConfigDebugErr & _DBG_SDIO_)) \ - _DbgDump(SDIO_PREFIX __VA_ARGS__);\ -}while(0) - -#define DBG_8195A(...) do {\ - if (unlikely(ConfigDebugErr & _DBG_MISC_)) \ - _DbgDump( __VA_ARGS__);\ -}while(0) - -#define MONITOR_LOG(...) do {\ - if (unlikely(ConfigDebugErr & _DBG_MISC_)) \ - _DbgDump( __VA_ARGS__);\ -}while(0) - -#define DBG_ERROR_LOG(...) do {\ - if (unlikely(ConfigDebugErr & _DBG_FAULT_)) \ - _DbgDump( __VA_ARGS__);\ -}while(0) - -#ifdef __GNUC__ -#define DBG_ASSERT(x) do {\ - if (unlikely(!(x))) \ - _DbgDump("Assertion: %s:%s, %d\n", __FILE__, __func__, __LINE__);\ - }while(0) -#endif - -#ifdef __ICCARM__ -#define DBG_ASSERT(x) do {\ - if (unlikely(!(x))) \ - _DbgDump("Assertion: %s:%s, %d\n", __FILE__, __func__, __LINE__);\ - }while(0) -#endif - -#else // #ifdef CONFIG_DEBUG_LOG - -#define DBG_8195A_DRIVER(...) -#define DBG_8195A_HAL(...) -#define DBG_8195A_DMA(...) -#define DBG_8195A_SDIO(...) -#define DBG_8195A(...) -#define MONITOR_LOG(...) -#define DBG_ERROR_LOG(...) -#define DBG_ASSERT(...) - -#endif // #ifdef CONFIG_DEBUG_LOG - -// ============================================================= - -#define ANSI_COLOR_GREEN "\x1b[32m" -#define ANSI_COLOR_CYAN "\x1b[36m" -#define ANSI_COLOR_YELLOW "\x1b[33m" -#define ANSI_COLOR_MAGENTA "\x1b[35m" -#define ANSI_COLOR_RED "\x1b[31m" -#define ANSI_COLOR_BLUE "\x1b[34m" -#define ANSI_COLOR_RESET "\x1b[0m" - -#define IDENT_ONE_SPACE " " -#define IDENT_TWO_SPACE " " -#define IDENT_FOUR_SPACE " " -#define IDENT_SIX_SPACE " " -#define IDENT_EIGHT_SPACE " " - -// ============================================================= - -#ifdef CONFIG_DEBUG_LOG -typedef enum _DBG_CFG_TYPE_ { - DBG_CFG_ERR=0, - DBG_CFG_WARN=1, - DBG_CFG_INFO=2 -} DBG_CFG_TYPE; - -typedef struct _DBG_CFG_CMD_ { - uint8_t cmd_name[16]; - uint32_t cmd_type; -} DBG_CFG_CMD, *PDBG_CFG_CMD; -#endif // #ifdef CONFIG_DEBUG_LOG - -typedef enum _CONSOLE_OP_STAGE_ { - ROM_STAGE = 0, - RAM_STAGE = 1 -}CONSOLE_OP_STAGE; - -#endif //_DIAG_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/rand.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/rand.h deleted file mode 100644 index eacdaf4..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/rand.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -uint32_t -Rand ( - void -); - - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/rtl_stdlib.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/rtl_stdlib.h deleted file mode 100644 index 680ac05..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/rtl_stdlib.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Routines for standard lib access - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _RTL_STDLIB_H_ -#define _RTL_STDLIB_H_ -#if 0 -#include -#include -#include - -// -// string operation -// -#define strlen(str) prvStrLen((const uint8_t*)str) -#define strcmp(str1, str2) prvStrCmp((const uint8_t*)str1, (const uint8_t*)str2) -//#define sscanf(src, format...) //TODO: Strtoul(src,0,16) / Strtoul(src,0,10) -#define strtok(str, delim) prvStrTok(str, delim) -#define strcpy(dst, src) prvStrCpy((uint8_t *)dst, (const uint8_t*)src) -#define atoi(str) prvAtoi(str) -#define strstr(str1, str2) prvStrStr(str1, str2) - -// -// standard i/o -// -#define snprintf DiagSnPrintf -#define sprintf prvDiagSPrintf -#define printf prvDiagPrintf - -// -// memory management -// -#define malloc pvPortMalloc -#define free vPortFree -#endif -#endif //_RTL_STDLIB_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/rtl_utility.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/rtl_utility.h deleted file mode 100644 index be0b525..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/rtl_utility.h +++ /dev/null @@ -1,70 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __RTL_UTILITY_H_ -#define __RTL_UTILITY_H_ - -void RtlMemcpy(void* dec, void* sour, uint32_t sz); -uint32_t RtlMemcmp(void *dst, void *src, uint32_t sz); -void RtlMemset(void *pbuf, uint32_t c, uint32_t sz); - -int8_t * -RtlStrncpy( - IN int8_t *dest, - IN const int8_t *src, - IN SIZE_T count -); - -int8_t * -RtlStrcpy( - IN int8_t *dest, - IN const int8_t *src -); - - -SIZE_T -RtlStrlen( - IN const int8_t *s -); - - -SIZE_T -RtlStrnlen( - IN const int8_t *s, - IN SIZE_T count -); - - -int -RtlStrcmp( - IN const int8_t *cs, - IN const int8_t *ct - -); - -int -RtlStrncmp( - IN const int8_t *cs, - IN const int8_t *ct, - IN SIZE_T count -); - -#endif - - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/strproc.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/strproc.h deleted file mode 100644 index 28e3070..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/strproc.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _STRPROC_H_ -#define _STRPROC_H_ - -#include /* for size_t */ -#include - -#ifndef isprint -#define in_range(c, lo, up) ((uint8_t)c >= lo && (uint8_t)c <= up) -#define isprint(c) in_range(c, 0x20, 0x7f) -#define isdigit(c) in_range(c, '0', '9') -#define isxdigit(c) (isdigit(c) || in_range(c, 'a', 'f') || in_range(c, 'A', 'F')) -#define islower(c) in_range(c, 'a', 'z') -#define isspace(c) (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v' || c == ',') -#endif - -#ifdef _MSC_VER // IntelliSense -#define _LONG_CALL_ROM_ -#endif - -extern _LONG_CALL_ROM_ char *_strncpy(char *dest, const char *src, size_t count); -extern _LONG_CALL_ROM_ char *_strcpy(char *dest, const char *src); -extern _LONG_CALL_ROM_ size_t _strlen(const char *s); -extern _LONG_CALL_ROM_ size_t _strnlen(const char *s, size_t count); -extern _LONG_CALL_ROM_ int _strcmp(const char *cs, const char *ct); -extern _LONG_CALL_ROM_ int _strncmp(const char *cs, const char *ct, size_t count); -extern _LONG_CALL_ROM_ int _sscanf(const char *buf, const char *fmt, ...); -extern _LONG_CALL_ROM_ char *_strsep(char **s, const char *ct); -extern _LONG_CALL_ROM_ char *skip_spaces(const char *str); -extern _LONG_CALL_ROM_ int skip_atoi(const char **s); -extern _LONG_CALL_ROM_ int _vsscanf(const char *buf, const char *fmt, va_list args); -extern _LONG_CALL_ROM_ unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base); -extern _LONG_CALL_ROM_ long simple_strtol(const char *cp, char **endp, unsigned int base); -extern _LONG_CALL_ROM_ long long simple_strtoll(const char *cp, char **endp, unsigned int base); -extern _LONG_CALL_ROM_ unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base); -extern _LONG_CALL_ROM_ const char *_parse_integer_fixup_radix(const char *s, unsigned int *base); -extern _LONG_CALL_ROM_ unsigned int _parse_integer(const char *s, unsigned int base, unsigned long long *p); -extern _LONG_CALL_ROM_ uint64_t div_u64(uint64_t dividend, uint32_t divisor); -extern _LONG_CALL_ROM_ int64_t div_s64(int64_t dividend, int32_t divisor); -extern _LONG_CALL_ROM_ uint64_t div_u64_rem(uint64_t dividend, uint32_t divisor, uint32_t *remainder); -extern _LONG_CALL_ROM_ int64_t div_s64_rem(int64_t dividend, int32_t divisor, int32_t *remainder); -extern _LONG_CALL_ROM_ char *_strpbrk(const char *cs, const char *ct); -extern _LONG_CALL_ROM_ char *_strchr(const char *s, int c); - - -extern _LONG_CALL_ROM_ void -prvStrCpy( - IN uint8_t *pDES, - IN const uint8_t *pSRC -); - -extern _LONG_CALL_ROM_ uint32_t -prvStrLen( - IN const uint8_t *pSRC -); - -extern _LONG_CALL_ROM_ uint8_t -prvStrCmp( - IN const uint8_t *string1, - IN const uint8_t *string2 -); - -extern _LONG_CALL_ROM_ uint8_t* -StrUpr( - IN uint8_t *string -); - -extern _LONG_CALL_ROM_ int prvAtoi( - IN const char * s -); - -extern _LONG_CALL_ROM_ const char * prvStrStr( - IN const char * str1, - IN const char * str2 -); - -#ifndef __GNUC__ -/* - * Fast implementation of tolower() for internal usage. Do not use in your - * code. - */ -static inline char _tolower(const char c) -{ - return c | 0x20; -} -#endif - -/* Fast check for octal digit */ -static inline int isodigit(const char c) -{ - return c >= '0' && c <= '7'; -} -#ifndef strtoul -#define strtoul(str, endp, base) simple_strtoul(str, endp, base) -#endif -#ifndef strtol -#define strtol(str, endp, base) simple_strtol(str, endp, base) -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/system_8195a.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/system_8195a.c deleted file mode 100644 index 37f27ba..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/system_8195a.c +++ /dev/null @@ -1,142 +0,0 @@ -/**************************************************************************//** - * @file system_ARMCM3.c - * @brief CMSIS Device System Source File for - * ARMCM3 Device Series - * @version V1.08 - * @date 23. November 2012 - * - * @note - * - ******************************************************************************/ -/* Copyright (c) 2011 - 2012 ARM LIMITED - - All rights reserved. - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of ARM nor the names of its contributors may be used - to endorse or promote products derived from this software without - specific prior written permission. - * - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - ---------------------------------------------------------------------------*/ - - -#include "platform_autoconf.h" -#include "basic_types.h" -#include "rtl8195a.h" -#include "rtl_bios_data.h" - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define __HSI ( 8000000UL) -#define __XTAL ( 5000000UL) /* Oscillator frequency */ - -//#define __SYSTEM_CLOCK (5*__XTAL) -//#define __SYSTEM_CLOCK (200000000UL/6*5) // PLATFORM_CLOCK in platform_autoconf.h ! // - -//extern uint32_t HalGetCpuClk(void); - -#ifdef CONFIG_CHIP_A_CUT -const uint32_t SysCpkClkTbl[]= { - 200000000, - 100000000, - 50000000, - 25000000, - 12500000, - 4000000 -}; -#endif - -//extern unsigned int rand_x = 12345; -/* -uint32_t Rand2(void) -{ - static unsigned int y = 362436; - static unsigned int z = 521288629; - static unsigned int c = 7654321; - - unsigned long long t, a= 698769069; - - rand_x = 69069 * rand_x + 12345; - y ^= (y << 13); y ^= (y >> 17); y ^= (y << 5); - t = a * z + c; c = (t >> 32); z = t; - - return rand_x + y + z; -} -*/ -/*---------------------------------------------------------------------------- - Clock Variable definitions - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = PLATFORM_CLOCK; // __SYSTEM_CLOCK; /*!< System Clock Frequency (Core Clock)*/ - - -uint32_t -SystemGetCpuClk(void) -{ -#ifdef CONFIG_CHIP_A_CUT - - uint32_t CpuType = 0, CpuClk = 0, FreqDown = 0; - - CpuType = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1) & (0x70)) >> 4); - FreqDown = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1) & BIT17; - - CpuClk = SysCpkClkTbl[CpuType]; - - if ( !FreqDown ) { - if ( CpuClk > 4000000 ){ - CpuClk = (CpuClk*5/6); - } - } - - return CpuClk; -#else - return HalGetCpuClk(); -#endif -} - -/*---------------------------------------------------------------------------- - Clock functions - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) /* Get Core Clock Frequency */ -{ -// SystemCoreClock = __SYSTEM_CLOCK; - - SystemCoreClock = SystemGetCpuClk(); -} - -/** - * Initialize the system - * - * @param none - * @return none - * - * @brief Setup the microcontroller system. - * Initialize the System. - */ -void SystemInit (void) -{ - // TODO: Hardware initial -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - - //SystemCoreClock = __SYSTEM_CLOCK; - //SystemCoreClock = HalGetCpuClk(); - SystemCoreClockUpdate(); -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/system_8195a.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/system_8195a.h deleted file mode 100644 index 7cf9562..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/system_8195a.h +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************//** - * @file system_ARMCM3.h - * @brief CMSIS Device System Header File for - * ARMCM3 Device Series - * @version V1.08 - * @date 23. November 2012 - * - * @note - * - ******************************************************************************/ -/* Copyright (c) 2011 - 2012 ARM LIMITED - - All rights reserved. - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of ARM nor the names of its contributors may be used - to endorse or promote products derived from this software without - specific prior written permission. - * - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - ---------------------------------------------------------------------------*/ - - -#ifndef _SYSTEM_8195A_H -#define _SYSTEM_8195A_H - -#ifdef __cplusplus -extern "C" { -#endif - -extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ - - -/** - * Initialize the system - * - * @param none - * @return none - * - * @brief Setup the microcontroller system. - * Initialize the System and update the SystemCoreClock variable. - */ -extern void SystemInit (void); - -/** - * Update SystemCoreClock variable - * - * @param none - * @return none - * - * @brief Updates the SystemCoreClock with current core Clock - * retrieved from cpu registers. - */ -extern void SystemCoreClockUpdate (void); -extern uint32_t SystemGetCpuClk(void); -extern _LONG_CALL_ uint32_t Rand2(void); - -#ifdef __cplusplus -} -#endif - -#endif /* _SYSTEM_8195A_H */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/va_list.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/va_list.h deleted file mode 100644 index cbfcea0..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/cmsis/device/va_list.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _VA_LIST_H_ -#define _VA_LIST_H_ - -#include "platform_autoconf.h" -#include "basic_types.h" - -#ifndef va_arg //this part is adapted from linux (Linux/include/acpi/platform/acenv.h) - -typedef int32_t acpi_native_int;//this definition is in (Linux/include/acpi/actypes.h) - -#ifndef _VALIST -#define _VALIST - typedef char *va_list; -#endif /* _VALIST */ - -/* Storage alignment properties */ -#define _AUPBND (sizeof (acpi_native_int) - 1) -#define _ADNBND (sizeof (acpi_native_int) - 1) - -/* Variable argument list macro definitions */ -#define _bnd(X, bnd) (((sizeof (X)) + (bnd)) & (~(bnd))) -#define va_arg(ap, T) (*(T *)(((ap) += (_bnd (T, _AUPBND))) - (_bnd (T,_ADNBND)))) -#define va_end(ap) (ap = (va_list) NULL) -#define va_start(ap, A) (void) ((ap) = (((char *) &(A)) + (_bnd (A,_AUPBND)))) - -#endif /* va_arg */ - -#endif //_VA_LIST_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/bitband_io.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/bitband_io.c deleted file mode 100644 index 6e28205..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/bitband_io.c +++ /dev/null @@ -1,69 +0,0 @@ - -#include "bitband_io.h" -//#include "rtl8195a_gpio.h" - -#define BITBAND_ADDR(a,b) (0x02000000 + (a & 0xF0000000) + (a - (a & 0xF0000000)) * 32 + ((b) * 4)) // Convert address ? - -volatile uint8_t * BitBandAddr(void *addr, uint8_t bit) { - uint32_t ret = BITBAND_ADDR((uint32_t)addr, bit); - return (volatile uint8_t *) ret; -} - -volatile uint8_t * BitBandPeriAddr(void *addr, uint8_t bit) { - return (volatile uint8_t *)(BITBAND_PERI((uint32_t)addr, bit)); -} - -volatile uint8_t * GetOutPinBitBandAddr(PinName pin) { - volatile uint8_t * paddr = 0; - uint32_t ippin = HAL_GPIO_GetIPPinName_8195a(pin); - if(ippin < 0xff) { - // paddr = 0x42000000 + (0x40001000 + 0x0c * (ippin >> 5) - 0x40000000) * 32 + ((ippin & 0x1f) * 4); - paddr = BitBandPeriAddr((void *)(GPIO_REG_BASE + GPIO_PORTB_DR * (ippin >> 5)), ippin & 0x1f); - } - return paddr; -} - -volatile uint8_t * GetInPinBitBandAddr(PinName pin) { - volatile uint8_t * paddr = NULL; - uint32_t ippin = HAL_GPIO_GetIPPinName_8195a(pin); - if(ippin < 0xff) { - // paddr = 0x42000000 + (0x40001000 + 0x0c * (ippin >> 5) - 0x40000000) * 32 + ((ippin & 0x1f) * 4); - paddr = BitBandPeriAddr((void *)(GPIO_REG_BASE + GPIO_EXT_PORTA + (ippin >> 5) * 4), ippin & 0x1f); - } - return paddr; -} - -extern _LONG_CALL_ uint32_t GPIO_FuncOn_8195a(void); -extern void wait_us(int us); - -volatile uint8_t * HardSetPin(PinName pin, HAL_GPIO_PIN_MODE pmode, uint8_t val) -{ - volatile uint8_t *paddr = NULL; - uint32_t ippin = HAL_GPIO_GetIPPinName_8195a(pin); - if(ippin < 0xff) { - if(_pHAL_Gpio_Adapter == NULL) { - extern HAL_GPIO_ADAPTER gBoot_Gpio_Adapter; - _pHAL_Gpio_Adapter = &gBoot_Gpio_Adapter; - } - if(_pHAL_Gpio_Adapter->Gpio_Func_En == 0) GPIO_FuncOn_8195a(); - wait_us(100); - // delayMicroseconds(100); - // paddr = 0x42000000 + (0x40001000 + 0x0c * (ippin >> 5) - 0x40000000) * 32 + ((ippin & 0x1f) * 4); -#if CONFIG_DEBUG_LOG > 3 - GpioFunctionChk(ippin, ENABLE); -#endif - GPIO_PullCtrl_8195a(ippin, HAL_GPIO_HIGHZ); // Make the pin pull control default as High-Z - paddr = BitBandPeriAddr((void *)(GPIO_REG_BASE + GPIO_PORTB_DR * (ippin >> 5)), ippin & 0x1f); - *paddr = val; // data register - HAL_GPIO_PIN gpio; - gpio.pin_name = ippin; - gpio.pin_mode = pmode; - HAL_GPIO_Init_8195a(&gpio); - *paddr = val; // data register -// paddr[(GPIO_PORTB_DDR - GPIO_PORTB_DR) * 32] = pmode == DOUT_PUSH_PULL; // data direction -// GPIO_PullCtrl_8195a(ippin, pmode); // set GPIO_PULL_CTRLx -// paddr[(GPIO_PORTB_CTRL - GPIO_PORTB_DR) * 32] = 0; // data source control, we should keep it as default: data source from software - } - return paddr; -} - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/bitband_io.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/bitband_io.h deleted file mode 100644 index 45d75c3..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/bitband_io.h +++ /dev/null @@ -1,153 +0,0 @@ -#ifndef _BITBAND_IO_H_ -#define _BITBAND_IO_H_ - -#include "PinNames.h" -#include "hal_platform.h" -#include "hal_api.h" -#include "hal_gpio.h" -#include "rtl8195a_gpio.h" - -#define BITBAND_SRAM_REF 0x10000000 -#define BITBAND_SRAM_BASE 0x12000000 -#define BITBAND_SRAM(a,b) (BITBAND_SRAM_BASE + (a-BITBAND_SRAM_REF)*32 + (b*4)) // Convert SRAM address - -/* - * in hal_platform.h -#define BITBAND_REG_BASE 0x40001000 - */ - -/* - * in rtl8195a_gpio.h - * -#define BITBAND_PORTA_DR 0x00 // data register -#define BITBAND_PORTA_DDR 0x04 // data direction -#define BITBAND_PORTA_CTRL 0x08 // data source control, we should keep it as default: data source from software - -#define BITBAND_PORTB_DR 0x0c // data register -#define BITBAND_PORTB_DDR 0x10 // data direction -#define BITBAND_PORTB_CTRL 0x14 // data source control, we should keep it as default: data source from software - -#define BITBAND_PORTC_DR 0x18 // data register -#define BITBAND_PORTC_DDR 0x1c // data direction -#define BITBAND_PORTC_CTRL 0x20 // data source control, we should keep it as default: data source from software - -#define BITBAND_EXT_PORTA 0x50 // GPIO IN read or OUT read back -#define BITBAND_EXT_PORTB 0x54 // GPIO IN read or OUT read back -#define BITBAND_EXT_PORTC 0x58 // GPIO IN read or OUT read back -*/ - -#define BITBAND_PERI_REF 0x40000000 -#define BITBAND_PERI_BASE 0x42000000 -#define BITBAND_PERI(a,b) (BITBAND_PERI_BASE + (a-BITBAND_PERI_REF)*32 + (b*4)) // Convert PERI address -#define ucBITBAND_PERI(a,b) *((volatile unsigned char *)BITBAND_PERI(a,b)) -#define uiBITBAND_PERI(a,b) *((volatile unsigned int *)BITBAND_PERI(a,b)) - -#define BITBAND_A0 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,0) //Port = 0, bit = 0, A0 -#define BITBAND_A1 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,1) //Port = 0, bit = 1, A1 -#define BITBAND_A2 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,0) //Port = 1, bit = 0, A2 -#define BITBAND_A3 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,1) //Port = 1, bit = 1, A3 -#define BITBAND_A4 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,2) //Port = 1, bit = 2, A4 -#define BITBAND_A5 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,3) //Port = 1, bit = 3, A5 -#define BITBAND_A6 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,4) //Port = 1, bit = 4, A6 -#define BITBAND_A7 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,5) //Port = 1, bit = 5, A7 - -#define BITBAND_B0 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,6) //Port = 1, bit = 6, B0 -#define BITBAND_B1 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,7) //Port = 1, bit = 7, B1 -#define BITBAND_B2 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,8) //Port = 1, bit = 8, B2 -#define BITBAND_B3 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,2) //Port = 0, bit = 2, B3 -#define BITBAND_B4 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,3) //Port = 0, bit = 3, B4 -#define BITBAND_B5 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,9) //Port = 1, bit = 9, B5 -#define BITBAND_B6 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,4) //Port = 0, bit = 4, B6 -#define BITBAND_B7 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,5) //Port = 0, bit = 5, B7 - -#define BITBAND_C0 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,10) //Port = 1, bit = 10, C0 -#define BITBAND_C1 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,6) //Port = 0, bit = 6, C1 -#define BITBAND_C2 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,11) //Port = 1, bit = 11, C2 -#define BITBAND_C3 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,7) //Port = 0, bit = 7, C3 -#define BITBAND_C4 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,8) //Port = 0, bit = 8, C4 -#define BITBAND_C5 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,9) //Port = 0, bit = 9, C5 -#define BITBAND_C6 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,10) //Port = 0, bit = 10, C6 -#define BITBAND_C7 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,11) //Port = 0, bit = 11, C7 -#define BITBAND_C8 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,12) //Port = 0, bit = 12, C8 -#define BITBAND_C9 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,13) //Port = 0, bit = 13, C9 - -#define BITBAND_D0 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,12) //Port = 1, bit = 12, D0 -#define BITBAND_D1 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,14) //Port = 0, bit = 14, D1 -#define BITBAND_D2 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,13) //Port = 1, bit = 13, D2 -#define BITBAND_D3 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,15) //Port = 0, bit = 15, D3 -#define BITBAND_D4 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,16) //Port = 0, bit = 16, D4 -#define BITBAND_D5 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,17) //Port = 0, bit = 17, D5 -#define BITBAND_D6 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,18) //Port = 0, bit = 18, D6 -#define BITBAND_D7 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,19) //Port = 0, bit = 19, D7 -#define BITBAND_D8 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,14) //Port = 1, bit = 14, D8 -#define BITBAND_D9 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,20) //Port = 0, bit = 20, D9 - -#define BITBAND_E0 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,15) //Port = 2, bit = 15, E0 -#define BITBAND_E1 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,21) //Port = 0, bit = 21, E1 -#define BITBAND_E2 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,22) //Port = 0, bit = 22, E2 -#define BITBAND_E3 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,23) //Port = 0, bit = 23, E3 -#define BITBAND_E4 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,16) //Port = 1, bit = 16, E4 -#define BITBAND_E5 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,24) //Port = 0, bit = 24, E5 -#define BITBAND_E6 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,25) //Port = 0, bit = 25, E6 -#define BITBAND_E7 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,26) //Port = 0, bit = 26, E7 -#define BITBAND_E8 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,27) //Port = 0, bit = 27, E8 -#define BITBAND_E9 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,17) //Port = 1, bit = 17, E9 -#define BITBAND_E10 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,18) //Port = 1, bit = 17, E10 - -#define BITBAND_F0 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,19) //Port = 1, bit = 19, F0 -#define BITBAND_F1 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,20) //Port = 1, bit = 20, F1 -#define BITBAND_F2 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,21) //Port = 1, bit = 21, F2 -#define BITBAND_F3 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,22) //Port = 1, bit = 22, F3 -#define BITBAND_F4 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,23) //Port = 1, bit = 23, F4 -#define BITBAND_F5 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,24) //Port = 1, bit = 24, F5 - -#define BITBAND_G0 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,25) //Port = 1, bit = 25, G0 -#define BITBAND_G1 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,26) //Port = 1, bit = 26, G1 -#define BITBAND_G2 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,27) //Port = 1, bit = 27, G2 -#define BITBAND_G3 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,28) //Port = 0, bit = 28, G3 -#define BITBAND_G4 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,28) //Port = 1, bit = 28, G4 -#define BITBAND_G5 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,29) //Port = 1, bit = 29, G5 -#define BITBAND_G6 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,30) //Port = 1, bit = 30, G6 -#define BITBAND_G7 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTB_DR,31) //Port = 1, bit = 31, G7 - -#define BITBAND_H0 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,0) //Port = 2, bit = 0, H0 -#define BITBAND_H1 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,29) //Port = 0, bit = 29, H1 -#define BITBAND_H2 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,1) //Port = 2, bit = 1, H2 -#define BITBAND_H3 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,30) //Port = 0, bit = 30, H3 -#define BITBAND_H4 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,2) //Port = 2, bit = 2, H4 -#define BITBAND_H5 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,31) //Port = 0, bit = 31, H5 -#define BITBAND_H6 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,3) //Port = 2, bit = 3, H6 -#define BITBAND_H7 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTA_DR,4) //Port = 2, bit = 4, H7 - -#define BITBAND_I0 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,5) //Port = 2, bit = 5, I0 -#define BITBAND_I1 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,6) //Port = 2, bit = 6, I1 -#define BITBAND_I2 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,7) //Port = 2, bit = 7, I2 -#define BITBAND_I3 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,8) //Port = 2, bit = 8, I3 -#define BITBAND_I4 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,9) //Port = 2, bit = 9, I4 -#define BITBAND_I5 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,10) //Port = 2, bit = 10, I5 -#define BITBAND_I6 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,11) //Port = 2, bit = 11, I6 -#define BITBAND_I7 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,12) //Port = 2, bit = 12, I7 - -#define BITBAND_J0 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,13) //Port = 2, bit = 13, J0 -#define BITBAND_J1 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,14) //Port = 2, bit = 14, J1 -#define BITBAND_J2 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,15) //Port = 2, bit = 15, J2 -#define BITBAND_J3 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,16) //Port = 2, bit = 16, J3 -#define BITBAND_J4 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,17) //Port = 2, bit = 17, J4 -#define BITBAND_J5 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,18) //Port = 2, bit = 18, J5 -#define BITBAND_J6 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,19) //Port = 2, bit = 19, J6 - -#define BITBAND_K0 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,20) //Port = 2, bit = 20, K0 -#define BITBAND_K1 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,21) //Port = 2, bit = 21, K1 -#define BITBAND_K2 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,22) //Port = 2, bit = 22, K2 -#define BITBAND_K3 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,23) //Port = 2, bit = 23, K3 -#define BITBAND_K4 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,24) //Port = 2, bit = 24, K4 -#define BITBAND_K5 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,25) //Port = 2, bit = 25, K5 -#define BITBAND_K6 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,26) //Port = 2, bit = 26, K6 - -volatile uint8_t * BitBandAddr(void *addr, uint8_t bit); -volatile uint8_t * BitBandPeriAddr(void *addr, uint8_t bit); -volatile uint8_t * GetOutPinBitBandAddr(PinName pin); -volatile uint8_t * GetInPinBitBandAddr(PinName pin); -volatile uint8_t * HardSetPin(PinName pin, HAL_GPIO_PIN_MODE pmode, uint8_t val); - -#endif // _BITBAND_IO_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_32k.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_32k.c deleted file mode 100644 index 24e9f03..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_32k.c +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#include "rtl8195a.h" - -#ifdef CONFIG_TIMER_MODULE - -void -En32KCalibration( - void -) -{ - uint32_t Rtemp; - uint32_t Ttemp = 0; -#if CONFIG_DEBUG_LOG > 5 - DiagPrintf("32K clock source calibration\n"); -#endif - //set parameter - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL0, 0); - //offset 1 = 0x1500 - Rtemp = 0x811500; - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL0, Rtemp); - HalDelayUs(40); - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL0, 0); - - //offset 2 = 0x01c0 - Rtemp = 0x8201c0; - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL0, Rtemp); - HalDelayUs(40); - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL0, 0); - - //offset 4 = 0x0100 - Rtemp = 0x840100; - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL0, Rtemp); - HalDelayUs(40); - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL0, 0); - - //offset 0 = 0xf980 - Rtemp = 0x80f980; - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL0, Rtemp); - HalDelayUs(40); - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL0, 0); - - while(1) { - //Polling LOCK - Rtemp = 0x110000; - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL0, Rtemp); - //DiagPrintf("Polling lock\n"); - HalDelayUs(40); - - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL1); - if ((Rtemp & 0x3000) != 0x0){ -#if CONFIG_DEBUG_LOG > 5 - DiagPrintf("32.768 Calibration Success\n", Ttemp); -#endif - break; - } - else { - Ttemp++; - HalDelayUs(30); -#if CONFIG_DEBUG_LOG > 5 - DiagPrintf("Check lock: %d\n", Ttemp); - DiagPrintf("0x278: %x\n", Rtemp); -#endif - if (Ttemp > 100000) { /*Delay 100ms*/ - DiagPrintf("32K Calibration Fail!\n", Ttemp); - break; - } - } - } -} - -#if CONFIG_WDG -WDG_ADAPTER WDGAdapter; -extern HAL_TIMER_OP HalTimerOp; - -#ifdef CONFIG_WDG_NORMAL -/* - * pvvx: if WDT RESET_MODE: - * HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & 0x1FFFFF); - */ -void -WDGInitial( - IN uint32_t Period -) -{ - uint8_t CountId; - uint16_t DivFactor; - uint32_t CountTemp; - uint32_t CountProcess = 0; - uint32_t DivFacProcess = 0; - uint32_t PeriodProcess = 100*Period; - uint32_t MinPeriodTemp = 0xFFFFFFFF; - uint32_t PeriodTemp = 0; - uint32_t *Reg = (uint32_t*)&(WDGAdapter.Ctrl); - -#if CONFIG_DEBUG_LOG > 1 - DBG_8195A("WdgPeriod = %d ms\n", Period); -#endif - for (CountId = 0; CountId < 12; CountId++) { - CountTemp = ((0x00000001 << (CountId+1))-1); - DivFactor = (uint16_t)((PeriodProcess)/(CountTemp*3)); - - if (DivFactor > 0) { - PeriodTemp = 3*(DivFactor+1)*CountTemp; - if (PeriodProcess < PeriodTemp) { - if (MinPeriodTemp > PeriodTemp) { - MinPeriodTemp = PeriodTemp; - CountProcess = CountId; - DivFacProcess = DivFactor; - } - } - } - } - -#if CONFIG_DEBUG_LOG > 4 - DBG_8195A("WdgScalar = %p\n", DivFacProcess); - DBG_8195A("WdgCunLimit = %p\n", CountProcess); -#endif - WDGAdapter.Ctrl.WdgScalar = DivFacProcess; - WDGAdapter.Ctrl.WdgEnByte = 0; - WDGAdapter.Ctrl.WdgClear = 1; - WDGAdapter.Ctrl.WdgCunLimit = CountProcess; - WDGAdapter.Ctrl.WdgMode = RESET_MODE; - WDGAdapter.Ctrl.WdgToISR = 0; -#if CONFIG_DEBUG_LOG > 4 - DBG_8195A("WdgCtrl = %p\n", (uint32_t)(*Reg)); -#endif - HAL_WRITE32(VENDOR_REG_BASE, 0, (*Reg)); -} - -void -WDGIrqHandle -( - IN void *Data -) -{ - uint32_t temp; - WDG_REG *CtrlReg; - - if (NULL != WDGAdapter.UserCallback) { - WDGAdapter.UserCallback(WDGAdapter.callback_id); - } - - // Clear ISR - temp = HAL_READ32(VENDOR_REG_BASE, 0); - CtrlReg = (WDG_REG*)&temp; - CtrlReg->WdgToISR = 1; // write 1 clear - HAL_WRITE32(VENDOR_REG_BASE, 0, (temp)); -} - -void -WDGIrqInitial( - void -) -{ - uint32_t *Temp = (uint32_t*)&(WDGAdapter.Ctrl); - - WDGAdapter.IrqHandle.Data = (uint32_t)&WDGAdapter; - WDGAdapter.IrqHandle.IrqFun = (IRQ_FUN)WDGIrqHandle; - WDGAdapter.IrqHandle.IrqNum = WDG_IRQ; - WDGAdapter.IrqHandle.Priority = 0; - - InterruptRegister(&(WDGAdapter.IrqHandle)); - InterruptEn(&(WDGAdapter.IrqHandle)); - - - WDGAdapter.Ctrl.WdgToISR = 1; // clear ISR first - WDGAdapter.Ctrl.WdgMode = INT_MODE; - HAL_WRITE32(VENDOR_REG_BASE, 0, ((*Temp))); - WDGAdapter.Ctrl.WdgToISR = 0; -} - -void -WDGStart( - void -) -{ - uint32_t *Temp = (uint32_t*)&(WDGAdapter.Ctrl); - WDGAdapter.Ctrl.WdgEnByte = 0xA5; - HAL_WRITE32(VENDOR_REG_BASE, 0, ((*Temp))); -} - -void -WDGStop( - void -) -{ - uint32_t *Temp = (uint32_t*)&(WDGAdapter.Ctrl); - WDGAdapter.Ctrl.WdgEnByte = 0; - HAL_WRITE32(VENDOR_REG_BASE, 0, ((*Temp))); -} - -void -WDGRefresh( - void -) -{ - uint32_t *Temp = (uint32_t*)&(WDGAdapter.Ctrl); - WDGAdapter.Ctrl.WdgClear = 1; - HAL_WRITE32(VENDOR_REG_BASE, 0, ((*Temp))); -} - -void -WDGIrqCallBackReg( - IN void *CallBack, - IN uint32_t Id -) -{ - WDGAdapter.UserCallback = (void (*)(uint32_t))CallBack; - WDGAdapter.callback_id = Id; -} - -#endif - -#ifdef CONFIG_WDG_TEST -void -WDGIrqHandle -( - IN void *Data -) -{ -} - - -void -WDGGtimerHandle -( - IN void *Data -) -{ - uint32_t *Temp = (uint32_t*)&(WDGAdapter.Ctrl); - WDGAdapter.Ctrl.WdgClear = 1; - DBG_8195A("reset WDG\n"); - if (HAL_READ32(SYSTEM_CTRL_BASE,REG_SYS_DSTBY_INFO2) == 0) { - HAL_WRITE32(VENDOR_REG_BASE, 0, ((*Temp))); - } -} - - -void -InitWDGIRQ(void) -{ - uint32_t *Temp = (uint32_t*)&(WDGAdapter.Ctrl); - - WDGAdapter.Ctrl.WdgScalar = 0x96; - WDGAdapter.Ctrl.WdgEnByte = 0xA5; - WDGAdapter.Ctrl.WdgClear = 1; - WDGAdapter.Ctrl.WdgCunLimit = CNTFFFH; - WDGAdapter.Ctrl.WdgMode = RESET_MODE; - WDGAdapter.Ctrl.WdgToISR = 0; - - if (WDGAdapter.Ctrl.WdgMode == INT_MODE) { - - WDGAdapter.IrqHandle.Data = NULL; - WDGAdapter.IrqHandle.IrqFun = (IRQ_FUN)WDGIrqHandle; - WDGAdapter.IrqHandle.IrqNum = WDG_IRQ; - WDGAdapter.IrqHandle.Priority = 5; - - InterruptRegister(&(WDGAdapter.IrqHandle)); - InterruptEn(&(WDGAdapter.IrqHandle)); - } - else { - - WDGAdapter.WdgGTimer.TimerIrqPriority = 0; - WDGAdapter.WdgGTimer.TimerMode = USER_DEFINED; - WDGAdapter.WdgGTimer.IrqDis = OFF; - WDGAdapter.WdgGTimer.TimerId = 2;// - WDGAdapter.WdgGTimer.IrqHandle.IrqFun = (IRQ_FUN)WDGGtimerHandle; - WDGAdapter.WdgGTimer.IrqHandle.IrqNum = TIMER2_7_IRQ; - WDGAdapter.WdgGTimer.IrqHandle.Priority = 5; - WDGAdapter.WdgGTimer.IrqHandle.Data = NULL; - - if ((WDGAdapter.Ctrl.WdgCunLimit == CNTFFFH)&&(WDGAdapter.Ctrl.WdgScalar >= 0x8429)){ - WDGAdapter.WdgGTimer.TimerLoadValueUs = 0xFFFFFFFF - WDGTIMERELY; - } - else { - WDGAdapter.WdgGTimer.TimerLoadValueUs = (BIT0 << (WDGAdapter.Ctrl.WdgCunLimit+1)) - *WDGAdapter.Ctrl.WdgScalar*TIMER_TICK_US - WDGTIMERELY; - } - - HalTimerOp.HalTimerInit((void*) &(WDGAdapter.WdgGTimer)); - } - //fill reg - HAL_WRITE32(VENDOR_REG_BASE, 0, ((*Temp))); -} - - -//WDG -void HalWdgInit( - void -) -{ - -} -#endif //CONFIG_WDG_TEST -#endif //CONFIG_WDG -#endif //#ifdef CONFIG_TIMER_MODULE diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_adc.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_adc.c deleted file mode 100644 index 117fed2..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_adc.c +++ /dev/null @@ -1,1839 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "basic_types.h" -#include "diag.h" -#include "rand.h" -#include "section_config.h" -#include "rtl_utility.h" -#include "osdep_api.h" -#include "hal_adc.h" -#include "hal_gdma.h" -#include "hal_timer.h" -#include "hal_soc_ps_monitor.h" - -#ifdef CONFIG_ADC_EN - -#define ADC_STATIC_ALLOC 0 - -static volatile uint32_t ADCDatBuf[2]; -static volatile uint8_t ADCFullStsFlag; -static RTK_STATUS -RtkADCPinMuxDeInit( - IN PSAL_ADC_HND pSalADCHND -); - -static RTK_STATUS -RtkADCIrqDeInit( - IN PSAL_ADC_HND pSalADCHND -); - -static RTK_STATUS -RtkADCDMADeInit( - IN PSAL_ADC_HND pSalADCHND -); -/* DAC SAL global variables declaration when kernel disabled */ -#ifndef CONFIG_KERNEL - SRAM_BF_DATA_SECTION - HAL_ADC_OP HalADCOpSAL; -#endif - -#if ADC0_USED /*#if ADC0_USED*/ -#if ADC_STATIC_ALLOC - SRAM_BF_DATA_SECTION - SAL_ADC_MNGT_ADPT SalADC0MngtAdpt; - - SRAM_BF_DATA_SECTION - SAL_ADC_HND_PRIV SalADC0HndPriv; - - SRAM_BF_DATA_SECTION - HAL_ADC_INIT_DAT HalADC0InitData; - - SRAM_BF_DATA_SECTION - IRQ_HANDLE ADC0IrqHandleDat; - - SRAM_BF_DATA_SECTION - HAL_GDMA_ADAPTER HalADC0GdmaAdpt; - - SRAM_BF_DATA_SECTION - HAL_GDMA_OP HalADC0GdmaOp; - - SRAM_BF_DATA_SECTION - IRQ_HANDLE ADC0GDMAIrqHandleDat; - - SRAM_BF_DATA_SECTION - SAL_ADC_USER_CB SalADC0UserCB; - - SRAM_BF_DATA_SECTION - SAL_ADC_USERCB_ADPT SalADC0UserCBAdpt[SAL_ADC_USER_CB_NUM]; -#endif -#endif /*#if ADC0_USED*/ - -#if ADC1_USED /*#if ADC1_USED*/ -#if ADC_STATIC_ALLOC - SRAM_BF_DATA_SECTION - SAL_ADC_MNGT_ADPT SalADC1MngtAdpt; - - SRAM_BF_DATA_SECTION - SAL_ADC_HND_PRIV SalADC1HndPriv; - - SRAM_BF_DATA_SECTION - HAL_ADC_INIT_DAT HalADC1InitData; - - SRAM_BF_DATA_SECTION - IRQ_HANDLE ADC1IrqHandleDat; - - SRAM_BF_DATA_SECTION - HAL_GDMA_ADAPTER HalADC1GdmaAdpt; - - SRAM_BF_DATA_SECTION - HAL_GDMA_OP HalADC1GdmaOp; - - SRAM_BF_DATA_SECTION - IRQ_HANDLE ADC1GDMAIrqHandleDat; - - SRAM_BF_DATA_SECTION - SAL_ADC_USER_CB SalADC1UserCB; - - SRAM_BF_DATA_SECTION - SAL_ADC_USERCB_ADPT SalADC1UserCBAdpt[SAL_ADC_USER_CB_NUM]; -#endif -#endif /*#if ADC1_USED*/ - -#if ADC2_USED /*#if ADC2_USED*/ -#if ADC_STATIC_ALLOC - SRAM_BF_DATA_SECTION - SAL_ADC_MNGT_ADPT SalADC2MngtAdpt; - - SRAM_BF_DATA_SECTION - SAL_ADC_HND_PRIV SalADC2HndPriv; - - SRAM_BF_DATA_SECTION - HAL_ADC_INIT_DAT HalADC2InitData; - - SRAM_BF_DATA_SECTION - IRQ_HANDLE ADC2IrqHandleDat; - - SRAM_BF_DATA_SECTION - HAL_GDMA_ADAPTER HalADC2GdmaAdpt; - - SRAM_BF_DATA_SECTION - HAL_GDMA_OP HalADC2GdmaOp; - - SRAM_BF_DATA_SECTION - IRQ_HANDLE ADC2GDMAIrqHandleDat; - - SRAM_BF_DATA_SECTION - SAL_ADC_USER_CB SalADC2UserCB; - - SRAM_BF_DATA_SECTION - SAL_ADC_USERCB_ADPT SalADC2UserCBAdpt[SAL_ADC_USER_CB_NUM]; -#endif -#endif /*#if ADC2_USED*/ - -#if ADC3_USED /*#if ADC3_USED*/ -#if ADC_STATIC_ALLOC - SRAM_BF_DATA_SECTION - SAL_ADC_MNGT_ADPT SalADC3MngtAdpt; - - SRAM_BF_DATA_SECTION - SAL_ADC_HND_PRIV SalADC3HndPriv; - - SRAM_BF_DATA_SECTION - HAL_ADC_INIT_DAT HalADC3InitData; - - SRAM_BF_DATA_SECTION - IRQ_HANDLE ADC3IrqHandleDat; - - SRAM_BF_DATA_SECTION - HAL_GDMA_ADAPTER HalADC3GdmaAdpt; - - SRAM_BF_DATA_SECTION - HAL_GDMA_OP HalADC3GdmaOp; - - SRAM_BF_DATA_SECTION - IRQ_HANDLE ADC3GDMAIrqHandleDat; - - SRAM_BF_DATA_SECTION - SAL_ADC_USER_CB SalADC3UserCB; - - SRAM_BF_DATA_SECTION - SAL_ADC_USERCB_ADPT SalADC3UserCBAdpt[SAL_ADC_USER_CB_NUM]; -#endif -#endif /*#if ADC3_USED*/ - -/* Global variables */ -uint8_t SalAdcInitialFlag = 0; -#ifdef CONFIG_SOC_PS_MODULE -uint8_t SalAdcEnableState = 0; -#endif - -HAL_ADC_INIT_DAT SalAdcInitialDatKeep = {.ADCIdx = 0, - .ADCEn = 0, - .ADCEndian = 0, - .ADCBurstSz = 0, - .ADCCompOnly = 0, - .ADCOneShotEn = 0, - .ADCOverWREn = 0, - .ADCOneShotTD = 0, - .ADCCompCtrl = 0, - .ADCCompTD = 0, - .ADCDataRate = 0, - .ADCAudioEn = 0, - .ADCEnManul = 0, - .ADCDbgSel = 0, - .RSVD0 = 0, - .ADCData = (uint32_t *)NULL, - .ADCPWCtrl = 0, - .ADCIntrMSK = 0}; - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CGetMngtAdpt -// -// Description: -// According to the input index, all the memory space are allocated and all the -// related pointers are assigned. The management adapter pointer will be -// returned. -// -// Arguments: -// [in] uint8_t I2CIdx - -// I2C module index -// -// Return: -// PSAL_I2C_MNGT_ADPT -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//--------------------------------------------------------------------------------------------------- -void HalADCOpInit( - IN void *Data -) -{ - PHAL_ADC_OP pHalAdcOp = (PHAL_ADC_OP) Data; - - pHalAdcOp->HalADCInit = HalADCInit8195a; - pHalAdcOp->HalADCDeInit = HalADCDeInit8195a; - pHalAdcOp->HalADCEnable = HalADCEnableRtl8195a; - pHalAdcOp->HalADCReceive = HalADCReceiveRtl8195a; - pHalAdcOp->HalADCIntrCtrl = HalADCIntrCtrl8195a; - pHalAdcOp->HalADCReadReg = HalADCReadRegRtl8195a; -} - -#ifndef CONFIG_MBED_ENABLED -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CGetMngtAdpt -// -// Description: -// According to the input index, all the memory space are allocated and all the -// related pointers are assigned. The management adapter pointer will be -// returned. -// -// Arguments: -// [in] uint8_t I2CIdx - -// I2C module index -// -// Return: -// PSAL_I2C_MNGT_ADPT -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//--------------------------------------------------------------------------------------------------- -#define sizealign4(x) ((sizeof(x) + 3) & (~3)) -PSAL_ADC_MNGT_ADPT -RtkADCGetMngtAdpt( - IN uint8_t ADCIdx -){ - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PSAL_ADC_USERCB_ADPT pSalADCUserCBAdpt = NULL; - - /* If the kernel is available, Memory-allocation is used. */ -#if (!ADC_STATIC_ALLOC) -#if 1 // pvvx - pSalADCMngtAdpt = (PSAL_ADC_MNGT_ADPT)RtlZmalloc( - sizealign4(SAL_ADC_MNGT_ADPT) - + sizealign4(SAL_ADC_HND_PRIV) - + sizealign4(HAL_ADC_INIT_DAT) - + sizealign4(HAL_ADC_OP) - + sizealign4(IRQ_HANDLE) - + sizealign4(SAL_ADC_USER_CB) - + sizealign4(HAL_GDMA_ADAPTER) - + sizealign4(HAL_GDMA_OP) - + sizealign4(IRQ_HANDLE) - + (sizealign4(SAL_ADC_USERCB_ADPT)*SAL_ADC_USER_CB_NUM)); - if(!pSalADCMngtAdpt) { - return pSalADCMngtAdpt; - }; - unsigned char *ptr = (unsigned char *)pSalADCMngtAdpt + sizeof(SAL_ADC_MNGT_ADPT); - pSalADCMngtAdpt->pSalHndPriv = (PSAL_ADC_HND_PRIV)ptr; - ptr += sizealign4(SAL_ADC_HND_PRIV); - pSalADCMngtAdpt->pHalInitDat = (PHAL_ADC_INIT_DAT)ptr; - ptr += sizealign4(HAL_ADC_INIT_DAT); - pSalADCMngtAdpt->pHalOp = (PHAL_ADC_OP)ptr; - ptr += sizealign4(HAL_ADC_OP); - pSalADCMngtAdpt->pIrqHnd = (PIRQ_HANDLE)ptr; - ptr += sizealign4(IRQ_HANDLE); - pSalADCMngtAdpt->pUserCB = (PSAL_ADC_USER_CB)ptr; - ptr += sizealign4(SAL_ADC_USER_CB); - pSalADCMngtAdpt->pHalGdmaAdp = (PHAL_GDMA_ADAPTER)ptr; - ptr += sizealign4(HAL_GDMA_ADAPTER); - pSalADCMngtAdpt->pHalGdmaOp = (PHAL_GDMA_OP)ptr; - ptr += sizealign4(HAL_GDMA_OP); - pSalADCMngtAdpt->pIrqGdmaHnd = (PIRQ_HANDLE)ptr; - ptr += sizealign4(IRQ_HANDLE); - pSalADCUserCBAdpt = (PSAL_ADC_USERCB_ADPT)ptr; -#else - pSalADCMngtAdpt = (PSAL_ADC_MNGT_ADPT)RtlZmalloc(sizeof(SAL_ADC_MNGT_ADPT)); - pSalADCMngtAdpt->pSalHndPriv = (PSAL_ADC_HND_PRIV)RtlZmalloc(sizeof(SAL_ADC_HND_PRIV)); - pSalADCMngtAdpt->pHalInitDat = (PHAL_ADC_INIT_DAT)RtlZmalloc(sizeof(HAL_ADC_INIT_DAT)); - pSalADCMngtAdpt->pHalOp = (PHAL_ADC_OP)RtlZmalloc(sizeof(HAL_ADC_OP)); - pSalADCMngtAdpt->pIrqHnd = (PIRQ_HANDLE)RtlZmalloc(sizeof(IRQ_HANDLE)); - pSalADCMngtAdpt->pUserCB = (PSAL_ADC_USER_CB)RtlZmalloc(sizeof(SAL_ADC_USER_CB)); - pSalADCMngtAdpt->pHalGdmaAdp = (PHAL_GDMA_ADAPTER)RtlZmalloc(sizeof(HAL_GDMA_ADAPTER)); - pSalADCMngtAdpt->pHalGdmaOp = (PHAL_GDMA_OP)RtlZmalloc(sizeof(HAL_GDMA_OP)); - pSalADCMngtAdpt->pIrqGdmaHnd = (PIRQ_HANDLE)RtlZmalloc(sizeof(IRQ_HANDLE)); - pSalADCUserCBAdpt = (PSAL_ADC_USERCB_ADPT)RtlZmalloc((sizeof(SAL_ADC_USERCB_ADPT)*SAL_ADC_USER_CB_NUM)); -#endif -#else - switch (ADCIdx){ - case ADC0_SEL: - { - pSalADCMngtAdpt = &SalADC0MngtAdpt; - pSalADCMngtAdpt->pSalHndPriv = &SalADC0HndPriv; - pSalADCMngtAdpt->pHalInitDat = &HalADC0InitData; - pSalADCMngtAdpt->pHalOp = &HalADCOpSAL; - pSalADCMngtAdpt->pIrqHnd = &ADC0IrqHandleDat; - pSalADCMngtAdpt->pHalGdmaAdp = &HalADC0GdmaAdpt; - pSalADCMngtAdpt->pHalGdmaOp = &HalADC0GdmaOp; - pSalADCMngtAdpt->pIrqGdmaHnd = &ADC0GDMAIrqHandleDat; - pSalADCMngtAdpt->pUserCB = &SalADC0UserCB; - pSalADCUserCBAdpt = &SalADC0UserCBAdpt; - break; - } - - case ADC1_SEL: - { - pSalADCMngtAdpt = &SalADC1MngtAdpt; - pSalADCMngtAdpt->pSalHndPriv = &SalADC1HndPriv; - pSalADCMngtAdpt->pHalInitDat = &HalADC1InitData; - pSalADCMngtAdpt->pHalOp = &HalADCOpSAL; - pSalADCMngtAdpt->pIrqHnd = &ADC1IrqHandleDat; - pSalADCMngtAdpt->pHalGdmaAdp = &HalADC1GdmaAdpt; - pSalADCMngtAdpt->pHalGdmaOp = &HalADC1GdmaOp; - pSalADCMngtAdpt->pIrqGdmaHnd = &ADC1GDMAIrqHandleDat; - pSalADCMngtAdpt->pUserCB = &SalADC1UserCB; - pSalADCUserCBAdpt = &SalADC1UserCBAdpt; - break; - } - - case ADC2_SEL: - { - pSalADCMngtAdpt = &SalADC2MngtAdpt; - pSalADCMngtAdpt->pSalHndPriv = &SalADC2HndPriv; - pSalADCMngtAdpt->pHalInitDat = &HalADC2InitData; - pSalADCMngtAdpt->pHalOp = &HalADCOpSAL; - pSalADCMngtAdpt->pIrqHnd = &ADC2IrqHandleDat; - pSalADCMngtAdpt->pHalGdmaAdp = &HalADC2GdmaAdpt; - pSalADCMngtAdpt->pHalGdmaOp = &HalADC2GdmaOp; - pSalADCMngtAdpt->pIrqGdmaHnd = &ADC2GDMAIrqHandleDat; - pSalADCMngtAdpt->pUserCB = &SalADC2UserCB; - pSalADCUserCBAdpt = &SalADC2UserCBAdpt; - break; - } - - case ADC3_SEL: - { - pSalADCMngtAdpt = &SalADC3MngtAdpt; - pSalADCMngtAdpt->pSalHndPriv = &SalADC3HndPriv; - pSalADCMngtAdpt->pHalInitDat = &HalADC3InitData; - pSalADCMngtAdpt->pHalOp = &HalADCOpSAL; - pSalADCMngtAdpt->pIrqHnd = &ADC3IrqHandleDat; - pSalADCMngtAdpt->pHalGdmaAdp = &HalADC3GdmaAdpt; - pSalADCMngtAdpt->pHalGdmaOp = &HalADC3GdmaOp; - pSalADCMngtAdpt->pIrqGdmaHnd = &ADC3GDMAIrqHandleDat; - pSalADCMngtAdpt->pUserCB = &SalADC3UserCB; - pSalADCUserCBAdpt = &SalADC3UserCBAdpt; - break; - } - default - break; - } -#endif - - /*To assign user callback pointers*/ - pSalADCMngtAdpt->pUserCB->pTXCB = pSalADCUserCBAdpt; - pSalADCMngtAdpt->pUserCB->pTXCCB = (pSalADCUserCBAdpt+1); - pSalADCMngtAdpt->pUserCB->pRXCB = (pSalADCUserCBAdpt+2); - pSalADCMngtAdpt->pUserCB->pRXCCB = (pSalADCUserCBAdpt+3); - pSalADCMngtAdpt->pUserCB->pRDREQCB = (pSalADCUserCBAdpt+4); - pSalADCMngtAdpt->pUserCB->pERRCB = (pSalADCUserCBAdpt+5); - pSalADCMngtAdpt->pUserCB->pDMATXCB = (pSalADCUserCBAdpt+6); - pSalADCMngtAdpt->pUserCB->pDMATXCCB = (pSalADCUserCBAdpt+7); - pSalADCMngtAdpt->pUserCB->pDMARXCB = (pSalADCUserCBAdpt+8); - pSalADCMngtAdpt->pUserCB->pDMARXCCB = (pSalADCUserCBAdpt+9); - - /*To assign the rest pointers*/ - pSalADCMngtAdpt->pSalHndPriv->ppSalADCHnd = (void**)&(pSalADCMngtAdpt->pSalHndPriv); - - /* To assign the default (ROM) HAL OP initialization function */ - pSalADCMngtAdpt->pHalOpInit = &HalADCOpInit; - - /* To assign the default (ROM) HAL GDMA OP initialization function */ - pSalADCMngtAdpt->pHalGdmaOpInit = &HalGdmaOpInit; - - /* To assign the default (ROM) SAL interrupt function */ - pSalADCMngtAdpt->pSalIrqFunc = &ADCISRHandle; - - /* To assign the default (ROM) SAL DMA TX interrupt function */ - pSalADCMngtAdpt->pSalDMAIrqFunc = &ADCGDMAISRHandle; - - return pSalADCMngtAdpt; -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CFreeMngtAdpt -// -// Description: -// Free all the previous allocated memory space. -// -// Arguments: -// [in] PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt - -// I2C SAL management adapter pointer -// -// -// Return: -// The status of the enable process. -// _EXIT_SUCCESS if the RtkI2CFreeMngtAdpt succeeded. -// _EXIT_FAILURE if the RtkI2CFreeMngtAdpt failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//--------------------------------------------------------------------------------------------------- -RTK_STATUS -RtkADCFreeMngtAdpt( - IN PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt -){ -#ifdef CONFIG_KERNEL -#if 1 // pvvx - RtlMfree((uint8_t *)pSalADCMngtAdpt, - sizealign4(SAL_ADC_MNGT_ADPT) - + sizealign4(SAL_ADC_HND_PRIV) - + sizealign4(HAL_ADC_INIT_DAT) - + sizealign4(HAL_ADC_OP) - + sizealign4(IRQ_HANDLE) - + sizealign4(SAL_ADC_USER_CB) - + sizealign4(HAL_GDMA_ADAPTER) - + sizealign4(HAL_GDMA_OP) - + sizealign4(IRQ_HANDLE) - + (sizealign4(SAL_ADC_USERCB_ADPT)*SAL_ADC_USER_CB_NUM)); -#else - RtlMfree((uint8_t *)pSalADCMngtAdpt->pUserCB->pTXCB, (sizeof(SAL_ADC_USERCB_ADPT)*SAL_ADC_USER_CB_NUM)); - RtlMfree((uint8_t *)pSalADCMngtAdpt->pIrqGdmaHnd, sizeof(IRQ_HANDLE)); - RtlMfree((uint8_t *)pSalADCMngtAdpt->pHalGdmaOp, sizeof(HAL_GDMA_OP)); - RtlMfree((uint8_t *)pSalADCMngtAdpt->pHalGdmaAdp, sizeof(HAL_GDMA_ADAPTER)); - RtlMfree((uint8_t *)pSalADCMngtAdpt->pUserCB, sizeof(SAL_ADC_USER_CB)); - RtlMfree((uint8_t *)pSalADCMngtAdpt->pIrqHnd, sizeof(IRQ_HANDLE)); - RtlMfree((uint8_t *)pSalADCMngtAdpt->pHalOp, sizeof(HAL_ADC_OP)); - RtlMfree((uint8_t *)pSalADCMngtAdpt->pHalInitDat, sizeof(HAL_ADC_INIT_DAT)); - RtlMfree((uint8_t *)pSalADCMngtAdpt->pSalHndPriv, sizeof(SAL_ADC_HND_PRIV)); - RtlMfree((uint8_t *)pSalADCMngtAdpt, sizeof(SAL_ADC_MNGT_ADPT)); -#endif -#else - ; -#endif - - return _EXIT_SUCCESS; -} -#endif - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// I2CISRHandle -// -// Description: -// I2C Interrupt Service Routine. -// According to the input pointer to SAL_I2C_HND, all the rest pointers will be -// found and be used to the rest part of this servie routine. -// The following types of interrupt will be taken care: -// - General Call (providing General Call Callback). Slave receives a general call. -// - STOP Bit (NOT providing General Call Callback) -// - START Bit (NOTproviding General Call Callback) -// - I2C Activity (NOTproviding General Call Callback) -// - RX Done (providing Error Callback). The slave transmitter does NOT -// receive a proper NACK for the end of whole transfer. -// - TX Abort (providing Error Call Callback). The Master/Slave -// transmitting is terminated. -// - RD Req (providing TX and TXC Callback). Slave gets a Read Request -// and starts a slave-transmitter operation. The slave transmit -// data will be written into slave TX FIFO from user data buffer. -// - TX Empty (providing TX and TXC Callback). Master TX FIFO is empty. -// The user transmit data will be written into master TX FIFO -// from user data buffer. -// - TX Over (providing Error Callback). Master TX FIFO is Overflow. -// - RX Full (providing RX and RXC Callback). Master/Slave RX FIFO contains -// data. And the received data will be put into Master/Slave user -// receive data buffer. -// - RX Over (providing Error Callback). Master/Slave RX FIFO is Overflow. -// - RX Under (providing Error Callback). Master/Slave RX FIFO is Underflow. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// NA -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//---------------------------------------------------------------------------------------------------- -void -ADCISRHandle( - IN void *Data -){ -#ifdef CONFIG_DEBUG_LOG_ADC_HAL - PSAL_ADC_HND pSalADCHND = (PSAL_ADC_HND) Data; - PSAL_ADC_HND_PRIV pSalADCHNDPriv = NULL; - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PHAL_ADC_INIT_DAT pHalADCInitDat = NULL; - PHAL_ADC_OP pHalADCOP = NULL; -// PSAL_ADC_USER_CB pSalADCUserCB = NULL; -// uint8_t ADCIrqIdx; - - /* To get the SAL_I2C_MNGT_ADPT pointer, and parse the rest pointers */ - pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); - pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); - pHalADCInitDat = pSalADCMngtAdpt->pHalInitDat; - pHalADCOP = pSalADCMngtAdpt->pHalOp; -// ADCIrqIdx = pHalADCInitDat->ADCIdx; -// pSalADCUserCB = pSalADCHND->pUserCB; - - DBG_8195A_ADC_LVL(HAL_ADC_LVL,"ADC INTR STS:%x\n",pHalADCOP->HalADCReadReg(pHalADCInitDat, REG_ADC_INTR_STS)); -#else - PSAL_ADC_HND pSalADCHND = (PSAL_ADC_HND) Data; - PSAL_ADC_HND_PRIV pSalADCHNDPriv = NULL; - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PHAL_ADC_INIT_DAT pHalADCInitDat = NULL; - PHAL_ADC_OP pHalADCOP = NULL; - - //uint8_t ADCIrqIdx; - - - /* To get the SAL_I2C_MNGT_ADPT pointer, and parse the rest pointers */ - pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); - pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); - pHalADCInitDat = pSalADCMngtAdpt->pHalInitDat; - pHalADCOP = pSalADCMngtAdpt->pHalOp; - //ADCIrqIdx = pHalADCInitDat->ADCIdx; - - DBG_ADC_INFO("ADC INTR STS:%x\n",pHalADCOP->HalADCReadReg(pHalADCInitDat, REG_ADC_INTR_STS)); - if (pSalADCHND->OpType == ADC_RDREG_TYPE){ - ADCFullStsFlag = 1; - ADCDatBuf[0] = (uint32_t)HAL_ADC_READ32(REG_ADC_FIFO_READ); - ADCDatBuf[1] = (uint32_t)HAL_ADC_READ32(REG_ADC_FIFO_READ); - pSalADCHND->pInitDat->ADCIntrMSK = 0; - pHalADCOP->HalADCIntrCtrl(pSalADCHND->pInitDat); - } - else - pHalADCOP->HalADCReadReg(pHalADCInitDat, REG_ADC_INTR_STS); - -#endif -} - -void -ADCGDMAISRHandle( - IN void *Data -){ - - /* DBG_ENTRANCE; */ - PSAL_ADC_HND pSalADCHND = (PSAL_ADC_HND) Data; - PSAL_ADC_HND_PRIV pSalADCHNDPriv = NULL; - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - - PHAL_ADC_OP pHalADCOP = NULL; - PSAL_ADC_USER_CB pSalADCUserCB = NULL; - - PHAL_GDMA_ADAPTER pHalADCGdmaAdapter; - PHAL_GDMA_OP pHalADCGdmaOp; - - - uint8_t IsrTypeMap = 0; - - /* To get the SAL_I2C_MNGT_ADPT pointer, and parse the rest pointers */ - pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); - pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); - - pHalADCOP = pSalADCMngtAdpt->pHalOp; - - pSalADCUserCB = pSalADCHND->pUserCB; - - pHalADCGdmaAdapter = pSalADCMngtAdpt->pHalGdmaAdp; - pHalADCGdmaOp = pSalADCMngtAdpt->pHalGdmaOp; - - DBG_8195A_ADC_LVL(HAL_ADC_LVL,"%s\n",__func__); - - if ((pHalADCGdmaAdapter->MaxMuliBlock) == pHalADCGdmaAdapter->MuliBlockCunt+1) { - pSalADCHND->pInitDat->ADCIntrMSK = 0; - pHalADCOP->HalADCIntrCtrl(pSalADCHND->pInitDat); - - /* Clear ADC Status */ - HAL_ADC_READ32(REG_ADC_INTR_STS); - - pSalADCHND->pInitDat->ADCEn = ADC_DISABLE; - pHalADCOP->HalADCEnable(pSalADCHND->pInitDat); - pHalADCGdmaOp->HalGdmaChCleanAutoSrc(pHalADCGdmaAdapter); - pHalADCGdmaOp->HalGdmaChDis(pHalADCGdmaAdapter); - pSalADCHND->DevSts = ADC_STS_IDLE; - - if (pSalADCUserCB->pDMARXCCB->USERCB != NULL) { - pSalADCUserCB->pDMARXCCB->USERCB((void*)pSalADCUserCB->pDMARXCCB->USERData); - } - } - - //3 Clear Pending ISR - IsrTypeMap = pHalADCGdmaOp->HalGdmaChIsrClean((void*)pHalADCGdmaAdapter); - - //3 Maintain Block Count - if (IsrTypeMap & BlockType) { - pHalADCGdmaAdapter->MuliBlockCunt++; - } -} - -RTK_STATUS -RtkADCPinMuxInit( - IN PSAL_ADC_HND pSalADCHND -){ - - uint32_t ADCLocalTemp; - - /* Check the I2C index first */ - if (RtkADCIdxChk(pSalADCHND->DevNum)) - return _EXIT_FAILURE; - - ADCLocalTemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL2); - ADCLocalTemp |= BIT25; - - /* To release DAC delta sigma clock gating */ - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL2, ADCLocalTemp); - - /* Turn on DAC active clock */ - ACTCK_ADC_CCTRL(ON); - - /* Enable DAC0 module */ - ADC0_FCTRL(ON); - - return _EXIT_SUCCESS; - -} - -static RTK_STATUS -RtkADCPinMuxDeInit( - IN PSAL_ADC_HND pSalADCHND -){ - - uint32_t ADCLocalTemp; - - /* Check the I2C index first */ - if (RtkADCIdxChk(pSalADCHND->DevNum)) - return _EXIT_FAILURE; - - /* Turn on DAC active clock */ - ACTCK_ADC_CCTRL(OFF); - - /* Enable DAC1 module */ - ADC0_FCTRL(OFF); - - ADCLocalTemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL2); - ADCLocalTemp &= (~BIT25); - - /* To release DAC delta sigma clock gating */ - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SYS_SYSPLL_CTRL2,ADCLocalTemp); - return _EXIT_SUCCESS; -} - - -#if ADC_INTR_OP_TYPE -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CIrqInit -// -// Description: -// I2C interrupt initialization function. -// For I2C interrupt operation mode, I2C module MUST register itself to the platform -// by providing the interrupt handler which contains interrupt input data (arguments), -// interrupt service routine, interrupt number, interrupt priority. And then the interrupt -// should be enabled. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C interrupt initialization process. -// _EXIT_SUCCESS if the RtkI2CIrqInit succeeded. -// _EXIT_FAILURE if the RtkI2CIrqInit failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -static RTK_STATUS -RtkADCIrqInit( - IN PSAL_ADC_HND pSalADCHND -){ - - PSAL_ADC_HND_PRIV pSalADCHNDPriv = NULL; - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PIRQ_HANDLE pIrqHandle = NULL; - - /* To Get the SAL_I2C_MNGT_ADPT Pointer */ - pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); - pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); - pIrqHandle = pSalADCMngtAdpt->pIrqHnd; -/* - if (RtkADCIdxChk(pSalADCHND->DevNum)) - return _EXIT_FAILURE; -*/ - - pIrqHandle->Data = (uint32_t)(pSalADCHND); - pIrqHandle->IrqNum = ADC_IRQ; - pIrqHandle->IrqFun = (IRQ_FUN)pSalADCMngtAdpt->pSalIrqFunc; - pIrqHandle->Priority = 5; - InterruptRegister(pIrqHandle); - InterruptEn(pIrqHandle); - - return _EXIT_SUCCESS; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CIrqDeInit -// -// Description: -// I2C interrupt de-initialization function. -// According to the given I2C device number, the I2C interrupt will be unreigster -// from the platform and the relative interrupt handler will be cleared. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C interrupt de-initialization process. -// _EXIT_SUCCESS if the RtkI2CIrqDeInit succeeded. -// _EXIT_FAILURE if the RtkI2CIrqDeInit failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -static RTK_STATUS -RtkADCIrqDeInit( - IN PSAL_ADC_HND pSalADCHND -){ - - PSAL_ADC_HND_PRIV pSalADCHNDPriv = NULL; - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PIRQ_HANDLE pIrqHandle = NULL; - - /* To Get the SAL_I2C_MNGT_ADPT Pointer */ - pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); - pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); - pIrqHandle = pSalADCMngtAdpt->pIrqHnd; -/* - if (RtkADCIdxChk(pSalADCHND->DevNum)) - return _EXIT_FAILURE; -*/ - InterruptUnRegister(pIrqHandle); - return _EXIT_SUCCESS; - -} - -#endif - - -#if ADC_DMA_OP_TYPE -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CIrqInit -// -// Description: -// I2C interrupt initialization function. -// For I2C interrupt operation mode, I2C module MUST register itself to the platform -// by providing the interrupt handler which contains interrupt input data (arguments), -// interrupt service routine, interrupt number, interrupt priority. And then the interrupt -// should be enabled. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C interrupt initialization process. -// _EXIT_SUCCESS if the RtkI2CIrqInit succeeded. -// _EXIT_FAILURE if the RtkI2CIrqInit failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -static RTK_STATUS -RtkADCDMAInit( - IN PSAL_ADC_HND pSalADCHND -){ - PSAL_ADC_HND_PRIV pSalADCHNDPriv = NULL; - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PHAL_GDMA_ADAPTER pHALADCGdmaAdpt = NULL; - PHAL_GDMA_OP pHALADCGdmaOp = NULL; - PIRQ_HANDLE pIrqHandleADCGdma = NULL; - - /* To Get the SAL_I2C_MNGT_ADPT Pointer */ - pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); - pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); - - pHALADCGdmaAdpt = pSalADCMngtAdpt->pHalGdmaAdp; - pHALADCGdmaOp = pSalADCMngtAdpt->pHalGdmaOp; - pIrqHandleADCGdma = pSalADCMngtAdpt->pIrqGdmaHnd; -/* - if (RtkADCIdxChk(pSalADCHND->DevNum)) - return _EXIT_FAILURE; -*/ - //HalGdmaOpInit(pHALADCGdmaOp); - pSalADCMngtAdpt->pHalGdmaOpInit(pHALADCGdmaOp); - _memset((void *)pHALADCGdmaAdpt, 0, sizeof(HAL_GDMA_ADAPTER)); - - pHALADCGdmaAdpt->GdmaCtl.IntEn = 1; - - //ADC RX DMA - pHALADCGdmaAdpt->GdmaCtl.SrcTrWidth = TrWidthFourBytes; - pHALADCGdmaAdpt->GdmaCtl.DstTrWidth = TrWidthFourBytes; - pHALADCGdmaAdpt->GdmaCtl.SrcMsize = MsizeEight; - pHALADCGdmaAdpt->GdmaCtl.DestMsize = MsizeEight; - - pHALADCGdmaAdpt->GdmaCtl.Sinc = NoChange; - pHALADCGdmaAdpt->GdmaCtl.Dinc = IncType; - - pHALADCGdmaAdpt->GdmaCtl.Done = 1; - pHALADCGdmaAdpt->GdmaCtl.TtFc = (GDMA_CTL_TT_FC_TYPE)0x2; - - pHALADCGdmaAdpt->GdmaCfg.SrcPer = 12; - pHALADCGdmaAdpt->GdmaCfg.ReloadSrc = 1; - - pHALADCGdmaAdpt->MuliBlockCunt = 0; - pHALADCGdmaAdpt->MaxMuliBlock = 1;//MaxLlp; - - pHALADCGdmaAdpt->GdmaIsrType = (BlockType|TransferType|ErrType); - pHALADCGdmaAdpt->IsrCtrl = ENABLE; - pHALADCGdmaAdpt->GdmaOnOff = ON; - - pHALADCGdmaAdpt->ChNum = 4; - pHALADCGdmaAdpt->ChEn = GdmaCh4; - - pHALADCGdmaAdpt->TestItem = 3; - DBG_ADC_INFO("pSalADCHND->DevNum:%x\n",pSalADCHND->DevNum); - - pHALADCGdmaAdpt->GdmaIndex = 1; - pIrqHandleADCGdma->IrqNum = GDMA1_CHANNEL4_IRQ; - - /* GDMA interrupt register */ - pIrqHandleADCGdma->Data = (uint32_t) (pSalADCHND); - pIrqHandleADCGdma->IrqFun = (IRQ_FUN) pSalADCMngtAdpt->pSalDMAIrqFunc; - pIrqHandleADCGdma->Priority = 6; - InterruptRegister(pIrqHandleADCGdma); - InterruptEn(pIrqHandleADCGdma); - - /* GDMA initialization */ - /* Enable the whole GDMA module first */ - if (pHALADCGdmaAdpt->GdmaIndex == 0) { - ACTCK_GDMA0_CCTRL(ON); - SLPCK_GDMA0_CCTRL(ON); - GDMA0_FCTRL(ON); - } - else { - ACTCK_GDMA1_CCTRL(ON); - SLPCK_GDMA1_CCTRL(ON); - GDMA1_FCTRL(ON); - } - - pHALADCGdmaOp->HalGdmaOnOff((void*)pHALADCGdmaAdpt); - pHALADCGdmaOp->HalGdmaChIsrEnAndDis((void*)pHALADCGdmaAdpt); - //pHALADCGdmaOp->HalGdmaChSeting((void*)pHALADCGdmaAdpt); - - return _EXIT_SUCCESS; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CIrqDeInit -// -// Description: -// I2C interrupt de-initialization function. -// According to the given I2C device number, the I2C interrupt will be unreigster -// from the platform and the relative interrupt handler will be cleared. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C interrupt de-initialization process. -// _EXIT_SUCCESS if the RtkI2CIrqDeInit succeeded. -// _EXIT_FAILURE if the RtkI2CIrqDeInit failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -static RTK_STATUS -RtkADCDMADeInit( - IN PSAL_ADC_HND pSalADCHND -){ - PSAL_ADC_HND_PRIV pSalADCHNDPriv = NULL; - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - - PHAL_GDMA_ADAPTER pHALADCGdmaAdpt = NULL; - PHAL_GDMA_OP pHALADCGdmaOp = NULL; - PIRQ_HANDLE pIrqHandleADCGdma = NULL; - - /*To Get the SAL_I2C_MNGT_ADPT Pointer*/ - pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); - pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); - - pHALADCGdmaAdpt = pSalADCMngtAdpt->pHalGdmaAdp; - pHALADCGdmaOp = pSalADCMngtAdpt->pHalGdmaOp; - pIrqHandleADCGdma = pSalADCMngtAdpt->pIrqGdmaHnd; - - if (RtkADCIdxChk(pSalADCHND->DevNum)) - return _EXIT_FAILURE; - - //HalGdmaOpInit(pHALADCGdmaOp); - pSalADCMngtAdpt->pHalGdmaOpInit(pHALADCGdmaOp); - - pHALADCGdmaAdpt->IsrCtrl = DISABLE; - pHALADCGdmaOp->HalGdmaChIsrEnAndDis((void*)pHALADCGdmaAdpt); - pHALADCGdmaOp->HalGdmaChIsrClean((void*)pHALADCGdmaAdpt); - pHALADCGdmaOp->HalGdmaChDis((void*)pHALADCGdmaAdpt); - - InterruptUnRegister(pIrqHandleADCGdma); -#if 0 - _memset((void *)pIrqHandleDACGdma , 0, sizeof(IRQ_HANDLE)); - _memset((void *)pHALDACGdmaOp , 0, sizeof(HAL_GDMA_OP)); - _memset((void *)pHALDACGdmaAdpt , 0, sizeof(HAL_GDMA_ADAPTER)); -#endif - return _EXIT_SUCCESS; - -} -#endif - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CInit -// -// Description: -// According to the given I2C index, the related SAL_I2C_MNGT_ADPT pointer used -// for retrieving each I2C data sturcture pointer will be reversely parsed first. -// Then, initializing I2C HAL operation, initializing I2C interrupt (if needed), -// initializing I2C DMA (if needed) and initializing I2C pinmux will be done. -// User specified I2C configuration will be assigned to I2C initial data structure -// (PHAL_I2C_INIT_DAT pHalI2CInitDat). I2C HAL initialization is executed after -// all the configuration data taken. -// In the end, I2C module is enabled as a final step of the whole initialization. -// For a slave ack General Call support, an additional step may be followed after -// the above steps. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C initialization process. -// _EXIT_SUCCESS if the RtkI2CInit succeeded. -// _EXIT_FAILURE if the RtkI2CInit failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -RTK_STATUS -RtkADCInit( - IN void *Data -){ - PSAL_ADC_HND pSalADCHND = (PSAL_ADC_HND) Data; - PSAL_ADC_HND_PRIV pSalADCHNDPriv = NULL; - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PHAL_ADC_INIT_DAT pHalADCInitDat = NULL; - PHAL_ADC_OP pHalADCOP = NULL; - -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE adcPwrState; -#endif - - DBG_ADC_INFO("%s\n",__func__); - /* To Get the SAL_ADC_MNGT_ADPT Pointer */ - pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); - pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); - - pHalADCInitDat = pSalADCMngtAdpt->pHalInitDat; - pHalADCOP = pSalADCMngtAdpt->pHalOp; - - /* Check the input I2C index first */ - if (RtkADCIdxChk(pSalADCHND->DevNum)) - return _EXIT_FAILURE; - -#if 0 - /* Check the input I2C operation type */ - if (RtkI2COpTypeChk(pSalI2CHND)) - return _EXIT_FAILURE; -#endif - - /* ADC Initial data check, if the setting is different from the previous initial data, - an warning is shown on Log-Uart and directly return from this function */ - if (SalAdcInitialFlag != 0) { - if (_memcmp(pHalADCInitDat, &SalAdcInitialDatKeep, sizeof(HAL_ADC_INIT_DAT))) { - pSalADCMngtAdpt->pHalOpInit(pHalADCOP); - /* DAC Device Status Update */ - pSalADCHND->DevSts = ADC_STS_IDLE; - DBG_ADC_WARN("The ADC initial value is different from the previous value.\n"); - } - } - else { - /* ADC Initialize HAL Operations */ - //HalADCOpInit(pHalADCOP); - pSalADCMngtAdpt->pHalOpInit(pHalADCOP); - - /* ADC Interrupt Initialization */ -#if ADC_INTR_OP_TYPE - RtkADCIrqInit(pSalADCHND); -#endif - - /* ADC DMA Initialization */ -#if ADC_DMA_OP_TYPE - RtkADCDMAInit(pSalADCHND); -#endif - - /* ADC Function and Clock Enable*/ - RtkADCPinMuxInit(pSalADCHND); - pHalADCOP->HalADCInit(pSalADCHND->pInitDat); - - if (pSalADCHND->OpType == ADC_DMA_TYPE){ - pSalADCHND->pInitDat->ADCIntrMSK = (BIT_ADC_FIFO_RD_REQ_EN | - BIT_ADC_FIFO_RD_ERROR_EN); - } - else if (pSalADCHND->OpType == ADC_INTR_TYPE){ - pSalADCHND->pInitDat->ADCIntrMSK = (BIT_ADC_FIFO_FULL_EN | - BIT_ADC_FIFO_RD_REQ_EN | - BIT_ADC_FIFO_RD_ERROR_EN); - } - else{ - pSalADCHND->pInitDat->ADCIntrMSK = 0; - } - - - if (pHalADCInitDat->ADCOneShotEn == ADC_FEATURE_ENABLED) { - pSalADCHND->pInitDat->ADCIntrMSK |= BIT_ADC_AWAKE_CPU_EN; - } - pHalADCOP->HalADCIntrCtrl(pSalADCHND->pInitDat); - - //pSalADCHND->pInitDat->ADCEn = ADC_ENABLE; - //pHalADCOP->HalADCEnable(pSalADCHND->pInitDat); - - if (pHalADCInitDat->ADCOneShotEn == ADC_FEATURE_ENABLED) { - HAL_TIMER_WRITE32(TIMER_INTERVAL, 30); - HAL_TIMER_WRITE32(0x1C, 3); - } - - SalAdcInitialFlag |= (0x01 << pSalADCHND->DevNum); - _memcpy(&SalAdcInitialDatKeep, pSalADCHND->pInitDat, sizeof(HAL_ADC_INIT_DAT)); - } - - /* DAC Device Status Update */ - pSalADCHND->DevSts = ADC_STS_IDLE; - -#ifdef CONFIG_SOC_PS_MODULE - // To register a new peripheral device power state - adcPwrState.FuncIdx = ADC0; - adcPwrState.PwrState = ACT; - RegPowerState(adcPwrState); - - SalAdcEnableState |= (0x01 << pSalADCHND->DevNum); -#endif - - return _EXIT_SUCCESS; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CInit -// -// Description: -// According to the given I2C index, the related SAL_I2C_MNGT_ADPT pointer used -// for retrieving each I2C data sturcture pointer will be reversely parsed first. -// Then, initializing I2C HAL operation, initializing I2C interrupt (if needed), -// initializing I2C DMA (if needed) and initializing I2C pinmux will be done. -// User specified I2C configuration will be assigned to I2C initial data structure -// (PHAL_I2C_INIT_DAT pHalI2CInitDat). I2C HAL initialization is executed after -// all the configuration data taken. -// In the end, I2C module is enabled as a final step of the whole initialization. -// For a slave ack General Call support, an additional step may be followed after -// the above steps. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C initialization process. -// _EXIT_SUCCESS if the RtkI2CInit succeeded. -// _EXIT_FAILURE if the RtkI2CInit failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -RTK_STATUS -RtkADCDeInit( - IN void *Data -){ - PSAL_ADC_HND pSalADCHND = (PSAL_ADC_HND) Data; - PSAL_ADC_HND_PRIV pSalADCHNDPriv = NULL; - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PHAL_ADC_INIT_DAT pHalADCInitDat = NULL; - PHAL_ADC_OP pHalADCOP = NULL; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE adcPwrState; - uint8_t HwState; -#endif - - /* To Get the SAL_ADC_MNGT_ADPT Pointer */ - pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); - pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); - - pHalADCInitDat = pSalADCMngtAdpt->pHalInitDat; - pHalADCOP = pSalADCMngtAdpt->pHalOp; - - /* Check the input ADC index first */ - if (RtkADCIdxChk(pSalADCHND->DevNum)) - return _EXIT_FAILURE; - - SalAdcInitialFlag &= (~(0x01 << pSalADCHND->DevNum)); - - if (SalAdcInitialFlag == 0) { -#ifdef CONFIG_SOC_PS_MODULE - adcPwrState.FuncIdx = ADC0; - QueryRegPwrState(adcPwrState.FuncIdx, &(adcPwrState.PwrState), &HwState); - - // if the power state isn't ACT, then switch the power state back to ACT first - if ((adcPwrState.PwrState != ACT) && (adcPwrState.PwrState != INACT)) { - RtkADCEnablePS(Data); - QueryRegPwrState(adcPwrState.FuncIdx, &(adcPwrState.PwrState), &HwState); - } - - if (adcPwrState.PwrState == ACT) { - adcPwrState.PwrState = INACT; - RegPowerState(adcPwrState); - } -#endif - - /* ADC Initialize HAL Operations */ - HalADCOpInit(pHalADCOP); - - RtkADCPinMuxDeInit(pSalADCHND); - - /* ADC Interrupt Initialization */ -#if ADC_INTR_OP_TYPE - RtkADCIrqDeInit(pSalADCHND); -#endif - - /* ADC DMA Initialization */ -#if ADC_DMA_OP_TYPE - RtkADCDMADeInit(pSalADCHND); -#endif - - pHalADCInitDat->ADCEn = ADC_DISABLE; - pHalADCOP->HalADCEnable(pHalADCInitDat); - pHalADCOP->HalADCDeInit(pHalADCInitDat); - - /* ADC Function and Clock Enable*/ - RtkADCPinMuxDeInit(pSalADCHND); - } - - return _EXIT_SUCCESS; -} - -uint32_t -RtkADCReceive( - IN void *Data -){ - PSAL_ADC_HND pSalADCHND = (PSAL_ADC_HND) Data; - PSAL_ADC_HND_PRIV pSalADCHNDPriv = NULL; - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PHAL_GDMA_ADAPTER pHALADCGdmaAdpt = NULL; - PHAL_GDMA_OP pHALADCGdmaOp = NULL; - - - - //PIRQ_HANDLE pIrqHandleADCGdma = NULL; - uint32_t AdcTempDat; - - /* To Get the SAL_I2C_MNGT_ADPT Pointer */ - pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); - pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); - - pHALADCGdmaAdpt = pSalADCMngtAdpt->pHalGdmaAdp; - pHALADCGdmaOp = pSalADCMngtAdpt->pHalGdmaOp; - - - - if (pSalADCHND->OpType == ADC_DMA_TYPE) { - /* Clear ADC Status */ - HAL_ADC_READ32(REG_ADC_INTR_STS); - - HalGdmaOpInit(pHALADCGdmaOp); - pHALADCGdmaAdpt->GdmaCtl.BlockSize = pSalADCHND->pRXBuf->DataLen; - pHALADCGdmaAdpt->ChSar = (uint32_t)(ADC_REG_BASE); - pHALADCGdmaAdpt->ChDar = (uint32_t)pSalADCHND->pRXBuf->pDataBuf; - pHALADCGdmaAdpt->MuliBlockCunt = 0; - - pHALADCGdmaOp->HalGdmaChSeting(pHALADCGdmaAdpt); - - AdcTempDat = HAL_ADC_READ32(REG_ADC_POWER); - AdcTempDat |= BIT_ADC_PWR_AUTO; - HAL_ADC_WRITE32(REG_ADC_POWER, AdcTempDat); - - pHALADCGdmaOp->HalGdmaChEn(pHALADCGdmaAdpt); - - pSalADCHND->DevSts = ADC_STS_RX_ING; - return _EXIT_SUCCESS; - } - return _EXIT_FAILURE; -} - -//extern uint32_t HalDelayUs(IN uint32_t us); - -uint32_t -RtkADCReceiveBuf( - IN void *Data, - IN uint32_t *pBuf -){ - PSAL_ADC_HND pSalADCHND = (PSAL_ADC_HND) Data; - PSAL_ADC_HND_PRIV pSalADCHNDPriv = NULL; - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PHAL_ADC_OP pHalADCOP = NULL; - - //PIRQ_HANDLE pIrqHandleADCGdma = NULL; - uint32_t AdcTempDat; - - /* To Get the SAL_I2C_MNGT_ADPT Pointer */ - pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); - pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); - - pHalADCOP = pSalADCMngtAdpt->pHalOp; - - /* Clear ADC Status */ - //HAL_ADC_READ32(REG_ADC_INTR_STS); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_INTR_STS); - DBG_ADC_INFO("RtkADCReceiveBuf, INTR:%x\n", AdcTempDat); - //AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_INTR_STS); - //DBG_8195A(">>INTR:%x\n",AdcTempDat); - - ADCFullStsFlag = 0; -/// HalDelayUs(2000); ? - HalDelayUs(20); - - DBG_ADC_INFO("RtkADCReceiveBuf, Check to enable ADC manully or not\n"); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_POWER); - if (unlikely((AdcTempDat & BIT_ADC_ISO_MANUAL) == 0)) { - ; - } - else { - - pSalADCHND->pInitDat->ADCEn = ADC_ENABLE; - pHalADCOP->HalADCEnable(pSalADCHND->pInitDat); - //AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_POWER); - } - - pSalADCHND->pInitDat->ADCIntrMSK = (BIT_ADC_FIFO_FULL_EN); - pHalADCOP->HalADCIntrCtrl(pSalADCHND->pInitDat); - pSalADCHND->DevSts = ADC_STS_IDLE; - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - - if ((AdcTempDat & BIT_ADC_EN_MANUAL) == 0){ - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - DBG_ADC_INFO("RtkADCReceiveBuf, Before set, Reg AD1:%x\n", AdcTempDat); - AdcTempDat |= BIT_ADC_EN_MANUAL; - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD1, AdcTempDat); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - DBG_ADC_INFO("RtkADCReceiveBuf, After set, Reg AD1:%x\n", AdcTempDat); - - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - DBG_ADC_INFO("RtkADCReceiveBuf, Before set, Reg AD0:%x\n", AdcTempDat); - AdcTempDat |= BIT_ADC_EN_MANUAL; - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD0, AdcTempDat); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - DBG_ADC_INFO("RtkADCReceiveBuf, After set, Reg AD0:%x\n", AdcTempDat); - } - else{ - ; - } - - while (ADCFullStsFlag == 0){ - } - - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - DBG_ADC_INFO("RtkADCReceiveBuf, End of ADC, Before set, AD0:%x\n", AdcTempDat); - AdcTempDat &= (~BIT_ADC_EN_MANUAL); - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD0, AdcTempDat); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - DBG_ADC_INFO("RtkADCReceiveBuf, End of ADC, After set, AD0:%x\n", AdcTempDat); - - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - DBG_ADC_INFO("RtkADCReceiveBuf, End of ADC, Before set, AD1:%x\n", AdcTempDat); - AdcTempDat &= (~BIT_ADC_EN_MANUAL); - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD1, AdcTempDat); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - DBG_ADC_INFO("RtkADCReceiveBuf, End of ADC, After set, AD1:%x\n", AdcTempDat); - - /* Clear ADC Status */ - HAL_ADC_READ32(REG_ADC_INTR_STS); - ADCFullStsFlag = 0; - - *pBuf = (uint32_t)ADCDatBuf[0]; - *(pBuf+1) = (uint32_t)ADCDatBuf[1]; - ADCDatBuf[0] = 0; - ADCDatBuf[1] = 0; - - return _EXIT_SUCCESS; -} - - -uint32_t -RtkADCRxManualRotate( - IN void *Data, - IN uint32_t *pBuf -){ - PSAL_ADC_HND pSalADCHND = (PSAL_ADC_HND) Data; - PSAL_ADC_HND_PRIV pSalADCHNDPriv = NULL; - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - - PHAL_ADC_OP pHalADCOP = NULL; - - uint32_t AdcTempDat; - uint16_t tempcnt; - - /* To Get the SAL_I2C_MNGT_ADPT Pointer */ - pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); - pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); - pHalADCOP = pSalADCMngtAdpt->pHalOp; - - - /* Clear ADC Status */ - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_INTR_STS); - DBG_ADC_INFO("RtkADCRxManualRotate, INTR:%x\n", AdcTempDat); - - DBG_ADC_INFO("RtkADCRxManualRotate, Check to enable ADC manully or not\n"); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_POWER); - if (unlikely((AdcTempDat & BIT_ADC_ISO_MANUAL) == 0)) { - ; - } - else { - pSalADCHND->pInitDat->ADCEn = ADC_ENABLE; - pHalADCOP->HalADCEnable(pSalADCHND->pInitDat); - } - - - /* Comment when manual rotation - pSalADCHND->pInitDat->ADCIntrMSK = (BIT_ADC_FIFO_FULL_EN); - pHalADCOP->HalADCIntrCtrl(pSalADCHND->pInitDat); - */ - pSalADCHND->DevSts = ADC_STS_IDLE; - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - - if ((AdcTempDat & BIT_ADC_EN_MANUAL) == 0){ - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - DBG_ADC_INFO("RtkADCRxManualRotate, Before set, Reg AD1:%x\n", AdcTempDat); - /* Clear for manual rotrate first*/ - AdcTempDat &= ~(BIT7|BIT5|BIT4|BIT3|BIT2|BIT1); - /* Enable filter */ - AdcTempDat |= (BIT0); - - /* Enable manual mode, this is to turn cali. off */ -// AdcTempDat &= ~(BIT11); - AdcTempDat |= (BIT11); - - /* Set rotation to default state - ad1[7][5][4][3][2][1]=100010=>000001=>000110=>001010=>010010 - */ - AdcTempDat |= (BIT7|BIT2); - //AdcTempDat |= (BIT4|BIT2); - - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD1, AdcTempDat); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - DBG_ADC_INFO("RtkADCRxManualRotate, After set, Reg AD1:%x\n", AdcTempDat); - //DBG_8195A("1. Reg AD1:%x\n", AdcTempDat); - - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - DBG_ADC_INFO("RtkADCRxManualRotate, Before set, Reg AD0:%x\n", AdcTempDat); - AdcTempDat |= (0x01); - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD0, AdcTempDat); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - DBG_ADC_INFO("RtkADCRxManualRotate, After set, Reg AD0:%x\n", AdcTempDat); - } - else{ - ; - } - - /* Start rotation sequence, ad1[7][5][4][3][2][1]=000001 */ - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - AdcTempDat &= ~(BIT7|BIT5|BIT4|BIT3|BIT2|BIT1); - AdcTempDat |= (BIT1); - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD1, AdcTempDat); - HalDelayUs(500); - - /* Start rotation sequence, ad1[7][5][4][3][2][1]=000110 */ - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - AdcTempDat &= ~(BIT7|BIT5|BIT4|BIT3|BIT2|BIT1); - AdcTempDat |= (BIT3|BIT2); - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD1, AdcTempDat); - HalDelayUs(500); - - /* Read Content */ - for (tempcnt=0; tempcnt<16; tempcnt++){ - ADCDatBuf[0] = (uint32_t)HAL_ADC_READ32(REG_ADC_FIFO_READ); - } - - /* Close ADC */ - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - DBG_ADC_INFO("RtkADCRxManualRotate, End of ADC, Before set, AD0:%x\n", AdcTempDat); - AdcTempDat &= (~0x01); - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD0, AdcTempDat); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - DBG_ADC_INFO("RtkADCRxManualRotate, End of ADC, After set, AD0:%x\n", AdcTempDat); - - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - DBG_ADC_INFO("RtkADCRxManualRotate, End of ADC, Before set, AD1:%x\n", AdcTempDat); - AdcTempDat &= (~0x01); - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD1, AdcTempDat); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - DBG_ADC_INFO("RtkADCRxManualRotate, End of ADC, After set, AD1:%x\n", AdcTempDat); - - /* Clear ADC Status */ - HAL_ADC_READ32(REG_ADC_INTR_STS); - - /* Open ADC */ - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - DBG_ADC_INFO("RtkADCRxManualRotate, Before set, Reg AD1:%x\n", AdcTempDat); - AdcTempDat |= (BIT0); - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD1, AdcTempDat); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - DBG_ADC_INFO("RtkADCRxManualRotate, After set, Reg AD1:%x\n", AdcTempDat); - - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - DBG_ADC_INFO("RtkADCRxManualRotate, Before set, Reg AD0:%x\n", AdcTempDat); - AdcTempDat |= BIT_ADC_EN_MANUAL; - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD0, AdcTempDat); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - DBG_ADC_INFO("RtkADCRxManualRotate, After set, Reg AD0:%x\n", AdcTempDat); - - /* Start rotation sequence, ad1[7][5][4][3][2][1]=001010 */ - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - AdcTempDat &= ~(BIT7|BIT5|BIT4|BIT3|BIT2|BIT1); - AdcTempDat |= (BIT4|BIT2); - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD1, AdcTempDat); - HalDelayUs(500); - - /* Start rotation sequence, ad1[7][5][4][3][2][1]=010010 */ - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - AdcTempDat &= ~(BIT7|BIT5|BIT4|BIT3|BIT2|BIT1); - AdcTempDat |= (BIT5|BIT2); - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD1, AdcTempDat); - HalDelayUs(500); - - //DBG_8195A("INT STAT:%08x\n", HAL_ADC_READ32(REG_ADC_INTR_STS)); - /* Read ADC FIFO */ - /* Read Content */ - for (tempcnt=0; tempcnt<16; tempcnt++){ - ADCDatBuf[1] = (uint32_t)HAL_ADC_READ32(REG_ADC_FIFO_READ); - } - - - /* Close ADC */ - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - DBG_ADC_INFO("RtkADCRxManualRotate, End of ADC, Before set, AD0:%x\n", AdcTempDat); - AdcTempDat &= (~BIT_ADC_EN_MANUAL); - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD0, AdcTempDat); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - DBG_ADC_INFO("RtkADCRxManualRotate, End of ADC, After set, AD0:%x\n", AdcTempDat); - - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - DBG_ADC_INFO("RtkADCRxManualRotate, End of ADC, Before set, AD1:%x\n", AdcTempDat); - AdcTempDat &= (~BIT0); - - /* Disable manual mode */ - AdcTempDat &= (~BIT11); - /* Set roration to default state */ - AdcTempDat &= ~(BIT7|BIT5|BIT4|BIT3|BIT2|BIT1); - - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD1, AdcTempDat); - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - DBG_ADC_INFO("RtkADCRxManualRotate, End of ADC, After set, AD1:%x\n", AdcTempDat); - - /* Clear ADC Status */ - HAL_ADC_READ32(REG_ADC_INTR_STS); - ADCFullStsFlag = 0; - - *pBuf = (uint32_t)ADCDatBuf[0]; - *(pBuf+1) = (uint32_t)ADCDatBuf[1]; - ADCDatBuf[0] = 0; - ADCDatBuf[1] = 0; - - return _EXIT_SUCCESS; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CGetSalHnd -// -// Description: -// Allocation of lower layer memory spaces will be done by invoking RtkI2CGetMngtAdpt -// in this function and return a SAL_I2C_HND pointer to upper layer. -// According to the given I2C index, RtkI2CGetMngtAdpt will allocate all the memory -// space such as SAL_I2C_HND, HAL_I2C_INIT_DAT, SAL_I2C_USER_CB etc. -// -// -// Arguments: -// [in] uint8_t I2CIdx - -// I2C Index -// -// Return: -// PSAL_I2C_HND -// A pointer to SAL_I2C_HND which is allocated in the lower layer. -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -PSAL_ADC_HND -RtkADCGetSalHnd( - IN uint8_t ADCIdx -){ - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PSAL_ADC_HND pSalADCHND = NULL; - - /* Check the user define setting and the given index */ - if (RtkADCIdxChk(ADCIdx)) { - return (PSAL_ADC_HND)NULL; - } - - /* Invoke RtkI2CGetMngtAdpt to get the I2C SAL management adapter pointer */ - pSalADCMngtAdpt = RtkADCGetMngtAdpt(ADCIdx); - - /* Assign the private SAL handle to public SAL handle */ - pSalADCHND = &(pSalADCMngtAdpt->pSalHndPriv->SalADCHndPriv); - - /* Assign the internal HAL initial data pointer to the SAL handle */ - pSalADCHND->pInitDat = pSalADCMngtAdpt->pHalInitDat; - - /* Assign the internal user callback pointer to the SAL handle */ - pSalADCHND->pUserCB = pSalADCMngtAdpt->pUserCB; - - return &(pSalADCMngtAdpt->pSalHndPriv->SalADCHndPriv); - -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CGetSalHnd -// -// Description: -// Allocation of lower layer memory spaces will be done by invoking RtkI2CGetMngtAdpt -// in this function and return a SAL_I2C_HND pointer to upper layer. -// According to the given I2C index, RtkI2CGetMngtAdpt will allocate all the memory -// space such as SAL_I2C_HND, HAL_I2C_INIT_DAT, SAL_I2C_USER_CB etc. -// -// -// Arguments: -// [in] uint8_t I2CIdx - -// I2C Index -// -// Return: -// PSAL_I2C_HND -// A pointer to SAL_I2C_HND which is allocated in the lower layer. -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -RTK_STATUS -RtkADCFreeSalHnd( - IN PSAL_ADC_HND pSalADCHND -){ - PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt = NULL; - PSAL_ADC_HND_PRIV pSalADCHNDPriv = NULL; - - /* To get the SAL_DAC_MNGT_ADPT pointer */ - pSalADCHNDPriv = CONTAINER_OF(pSalADCHND, SAL_ADC_HND_PRIV, SalADCHndPriv); - pSalADCMngtAdpt = CONTAINER_OF(pSalADCHNDPriv->ppSalADCHnd, SAL_ADC_MNGT_ADPT, pSalHndPriv); - - /* Invoke RtkDACFreeMngtAdpt to free all the lower layer memory space */ - return (RtkADCFreeMngtAdpt(pSalADCMngtAdpt)); -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CLoadDefault -// -// Description: -// Accrording the given I2C index, the default I2C configuration is done. -// -// -// Arguments: -// [in] PSAL_I2C_HND pSalI2CHND - -// SAL I2C handle -// -// Return: -// The status of the loading I2C default configuration. -// _EXIT_SUCCESS if the RtkI2CLoadDefault succeeded. -// _EXIT_FAILURE if the RtkI2CLoadDefault failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -RTK_STATUS -RtkADCLoadDefault( - IN void *Data -){ - PSAL_ADC_HND pSalADCHND = (PSAL_ADC_HND) Data; - - /* Check the input ADC index first */ - if (RtkADCIdxChk(pSalADCHND->DevNum)) - return _EXIT_FAILURE; - - /* Load SAL handle default value */ - pSalADCHND->PinMux = 0; - pSalADCHND->OpType = ADC_RDREG_TYPE; - pSalADCHND->DevSts = ADC_STS_UNINITIAL; - pSalADCHND->ADCExd = 0; - pSalADCHND->ErrType = (uint32_t)NULL; - - /* Load HAL initial data structure default value */ - pSalADCHND->pInitDat->ADCIdx = pSalADCHND->DevNum; - pSalADCHND->pInitDat->ADCEn = ADC_DISABLE; - pSalADCHND->pInitDat->ADCEndian = ADC_DATA_ENDIAN_LITTLE; - pSalADCHND->pInitDat->ADCBurstSz = 8; - pSalADCHND->pInitDat->ADCCompOnly = ADC_FEATURE_DISABLED; - pSalADCHND->pInitDat->ADCOneShotEn = ADC_FEATURE_DISABLED; - pSalADCHND->pInitDat->ADCOverWREn = ADC_FEATURE_DISABLED; - pSalADCHND->pInitDat->ADCOneShotTD = 8; - pSalADCHND->pInitDat->ADCCompCtrl = ADC_COMP_SMALLER_THAN; - pSalADCHND->pInitDat->ADCCompTD = 8; - pSalADCHND->pInitDat->ADCDataRate = 0; - pSalADCHND->pInitDat->ADCAudioEn = ADC_FEATURE_DISABLED; - pSalADCHND->pInitDat->ADCEnManul = ADC_FEATURE_DISABLED; - pSalADCHND->pInitDat->ADCDbgSel = ADC_DBG_SEL_DISABLE; - pSalADCHND->pInitDat->ADCPWCtrl = 0; - pSalADCHND->pInitDat->ADCIntrMSK = ADC_FEATURE_DISABLED; - pSalADCHND->pInitDat->ADCAnaParAd3 = 0; - return _EXIT_SUCCESS; -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkADCDisablePS -// -// Description: -// ADC disable opertion by setting clock disable. -// -// Arguments: -// [in] void *Data - -// ADC SAL handle -// -// Return: -// The status of the ADC disable process. -// HAL_OK if the RtkADCDisablePS succeeded. -// HAL_ERR_PARA if the RtkADCDisablePS failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2015-06-15. -// -//---------------------------------------------------------------------------------------------------- -HAL_Status -RtkADCDisablePS( - IN void *Data -){ - - PSAL_ADC_HND pSalADCHND = (PSAL_ADC_HND) Data; - uint8_t adcIdx = pSalADCHND->DevNum; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE adcPwrState; -#endif - - if (RtkADCIdxChk(adcIdx)) - return HAL_ERR_UNKNOWN; - - -#ifdef CONFIG_SOC_PS_MODULE - SalAdcEnableState &= (~(0x01 << pSalADCHND->DevNum)); - - if (SalAdcEnableState == 0) { - // To register a new peripheral device power state - adcPwrState.FuncIdx = ADC0; - adcPwrState.PwrState = SLPCG; - RegPowerState(adcPwrState); - } -#endif - - return HAL_OK; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkADCEnablePS -// -// Description: -// ADC enable opertion by setting clock enable. -// -// Arguments: -// [in] void *Data - -// ADC SAL handle -// -// Return: -// The status of the ADC enable process. -// HAL_OK if the RtkADCEnablePS succeeded. -// HAL_ERR_PARA if the RtkADCEnablePS failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2015-06-15. -// -//---------------------------------------------------------------------------------------------------- -HAL_Status -RtkADCEnablePS( - IN void *Data -){ - - PSAL_ADC_HND pSalADCHND = (PSAL_ADC_HND) Data; - uint8_t adcIdx = pSalADCHND->DevNum; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE adcPwrState; -#endif - - if (RtkADCIdxChk(adcIdx)) - return HAL_ERR_UNKNOWN; - -#ifdef CONFIG_SOC_PS_MODULE - SalAdcEnableState |= (0x01 << pSalADCHND->DevNum); - - // To register a new peripheral device power state - adcPwrState.FuncIdx = ADC0; - adcPwrState.PwrState = ACT; - RegPowerState(adcPwrState); -#endif - - return HAL_OK; -} - -#endif // CONFIG_ADC_EN - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_adc.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_adc.h deleted file mode 100644 index 2b14cee..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_adc.h +++ /dev/null @@ -1,318 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_ADC_H_ -#define _HAL_ADC_H_ - -#include "rtl8195a.h" -#include "rtl8195a_adc.h" -#include "hal_gdma.h" - -//================ ADC Configuration ========================= -#define ADC_INTR_OP_TYPE 1 -#define ADC_DMA_OP_TYPE 1 - -// ADC SAL management macros -#define SAL_ADC_USER_CB_NUM (sizeof(SAL_ADC_USER_CB) / sizeof(PSAL_ADC_USERCB_ADPT)) - -// ADC used module. -// Please set the ADC module flag to 1 to enable the related -#define ADC0_USED 1 -#define ADC1_USED 1 -#define ADC2_USED 1 -#define ADC3_USED 1 - - -//================ Debug MSG Definition ======================= -#define ADC_PREFIX "RTL8195A[adc]: " -#define ADC_PREFIX_LVL " [ADC_DBG]: " - -typedef enum _ADC_DBG_LVL_ { - HAL_ADC_LVL = 0x01, - SAL_ADC_LVL = 0x02, - VERI_ADC_LVL = 0x04, -}ADC_DBG_LVL,*PADC_DBG_LVL; - -#ifdef CONFIG_DEBUG_LOG_ADC_HAL - - #define DBG_8195A_ADC(...) do{ \ - _DbgDump(ADC_PREFIX __VA_ARGS__);\ - }while(0) - - - #define ADCDBGLVL 0xFF - #define DBG_8195A_ADC_LVL(LVL,...) do{\ - if (LVL&ADCDBGLVL){\ - _DbgDump(ADC_PREFIX_LVL __VA_ARGS__);\ - }\ - }while(0) -#else - #define DBG_ADC_LOG_PERD 100 - #define DBG_8195A_ADC(...) - #define DBG_8195A_ADC_LVL(...) -#endif - - -//================ ADC HAL Related Enumeration ================== -// ADC Module Selection -typedef enum _ADC_MODULE_SEL_ { - ADC0_SEL = 0x0, - ADC1_SEL = 0x1, - ADC2_SEL = 0x2, - ADC3_SEL = 0x3, -}ADC_MODULE_SEL,*PADC_MODULE_SEL; - -// ADC module status -typedef enum _ADC_MODULE_STATUS_ { - ADC_DISABLE = 0x0, - ADC_ENABLE = 0x1, -}ADC_MODULE_STATUS, *PADC_MODULE_STATUS; - -// ADC Data Endian -typedef enum _ADC_DATA_ENDIAN_ { - ADC_DATA_ENDIAN_LITTLE = 0x0, - ADC_DATA_ENDIAN_BIG = 0x1, -}ADC_DATA_ENDIAN,*PADC_DATA_ENDIAN; - -// ADC Debug Select -typedef enum _ADC_DEBUG_SEL_ { - ADC_DBG_SEL_DISABLE = 0x0, - ADC_DBG_SEL_ENABLE = 0x1, -}ADC_DEBUG_SEL,*PADC_DEBUG_SEL; - -typedef enum _ADC_COMPARE_SET_ { - ADC_COMP_SMALLER_THAN = 0x0, - ADC_COMP_GREATER_THAN = 0x1, -}ADC_COMPARE_SET, *PADC_COMPARE_SET; - -// ADC feature status -typedef enum _ADC_FEATURE_STATUS_{ - ADC_FEATURE_DISABLED = 0, - ADC_FEATURE_ENABLED = 1, -}ADC_FEATURE_STATUS,*PADC_FEATURE_STATUS; - -// ADC operation type -typedef enum _ADC_OP_TYPE_ { - ADC_RDREG_TYPE = 0x0, - ADC_DMA_TYPE = 0x1, - ADC_INTR_TYPE = 0x2, -}ADC_OP_TYPE, *PADC_OP_TYPE; - -// ADC device status -typedef enum _ADC_DEVICE_STATUS_ { - ADC_STS_UNINITIAL = 0x00, - ADC_STS_INITIALIZED = 0x01, - ADC_STS_IDLE = 0x02, - - ADC_STS_TX_READY = 0x03, - ADC_STS_TX_ING = 0x04, - - ADC_STS_RX_READY = 0x05, - ADC_STS_RX_ING = 0x06, - - ADC_STS_ERROR = 0x07, - ADC_STS_FULL = 0x08, -}ADC_DEVICE_STATUS, *PADC_DEVICE_STATUS; - -// ADC error type -typedef enum _ADC_ERR_TYPE_ { - ADC_ERR_FIFO_RD_ERROR = 0x40, //ADC FIFO read error -}ADC_ERR_TYPE, *PADC_ERR_TYPE; - -// ADC initial status -typedef enum _ADC_INITAIL_STATUS_ { - ADC0_INITED = 0x1, - ADC1_INITED = 0x2, - ADC2_INITED = 0x4, - ADC3_INITED = 0x8, -}ADC_INITAIL_STATUS, *PADC_INITAIL_STATUS; - - -//================ ADC HAL Data Structure ====================== -// ADC HAL initial data structure -typedef struct _HAL_ADC_INIT_DAT_ { - uint8_t ADCIdx; //ADC index used - uint8_t ADCEn; //ADC module enable - uint8_t ADCEndian; //ADC endian selection, - //but actually it's for 32-bit ADC data swap control - //1'b0: no swap, - //1'b1: swap the upper 16-bit and the lower 16-bit - uint8_t ADCBurstSz; //ADC DMA operation threshold - - uint8_t ADCCompOnly; //ADC compare mode only enable (without FIFO enable) - uint8_t ADCOneShotEn; //ADC one-shot mode enable - uint8_t ADCOverWREn; //ADC overwrite mode enable - uint8_t ADCOneShotTD; //ADC one shot mode threshold - - uint16_t ADCCompCtrl; //ADC compare mode control, - //1'b0:less than the compare threshold - //1'b1:greater than the compare threshod - uint16_t ADCCompTD; //ADC compare mode threshold - - uint8_t ADCDataRate; //ADC down sample data rate, - uint8_t ADCAudioEn; //ADC audio mode enable - uint8_t ADCEnManul; //ADC enable manually - uint8_t ADCDbgSel; - - uint32_t RSVD0; - - uint32_t *ADCData; //ADC data pointer - uint32_t ADCPWCtrl; //ADC0 power control - uint32_t ADCIntrMSK; //ADC Interrupt Mask - uint32_t ADCAnaParAd3; //ADC analog parameter 3 - uint32_t ADCInInput; //ADC Input is internal? -}HAL_ADC_INIT_DAT,*PHAL_ADC_INIT_DAT; - -// ADC HAL Operations -typedef struct _HAL_ADC_OP_ { - RTK_STATUS (*HalADCInit) (void *Data); //HAL ADC initialization - RTK_STATUS (*HalADCDeInit) (void *Data); //HAL ADC de-initialization - RTK_STATUS (*HalADCEnable) (void *Data); //HAL ADC de-initialization - uint32_t (*HalADCReceive) (void *Data); //HAL ADC receive - RTK_STATUS (*HalADCIntrCtrl) (void *Data); //HAL ADC interrupt control - uint32_t (*HalADCReadReg) (void *Data, uint8_t ADCReg);//HAL ADC read register -}HAL_ADC_OP, *PHAL_ADC_OP; - -// ADC user callback adapter -typedef struct _SAL_ADC_USERCB_ADPT_ { - void (*USERCB) (void *Data); - uint32_t USERData; -}SAL_ADC_USERCB_ADPT, *PSAL_ADC_USERCB_ADPT; - -// ADC user callback structure -typedef struct _SAL_ADC_USER_CB_ { - PSAL_ADC_USERCB_ADPT pTXCB; //ADC Transmit Callback - PSAL_ADC_USERCB_ADPT pTXCCB; //ADC Transmit Complete Callback - PSAL_ADC_USERCB_ADPT pRXCB; //ADC Receive Callback - PSAL_ADC_USERCB_ADPT pRXCCB; //ADC Receive Complete Callback - PSAL_ADC_USERCB_ADPT pRDREQCB; //ADC Read Request Callback - PSAL_ADC_USERCB_ADPT pERRCB; //ADC Error Callback - PSAL_ADC_USERCB_ADPT pDMATXCB; //ADC DMA Transmit Callback - PSAL_ADC_USERCB_ADPT pDMATXCCB; //ADC DMA Transmit Complete Callback - PSAL_ADC_USERCB_ADPT pDMARXCB; //ADC DMA Receive Callback - PSAL_ADC_USERCB_ADPT pDMARXCCB; //ADC DMA Receive Complete Callback -}SAL_ADC_USER_CB, *PSAL_ADC_USER_CB; - -// ADC Transmit Buffer -typedef struct _SAL_ADC_TRANSFER_BUF_ { - uint32_t DataLen; //ADC Transmfer Length - uint32_t *pDataBuf; //ADC Transfer Buffer Pointer - uint32_t RSVD; // -}SAL_ADC_TRANSFER_BUF,*PSAL_ADC_TRANSFER_BUF; - -typedef struct _SAL_ADC_DMA_USER_DEF_ { - - uint8_t TxDatSrcWdth; - uint8_t TxDatDstWdth; - uint8_t TxDatSrcBstSz; - uint8_t TxDatDstBstSz; - - uint8_t TxChNo; - uint8_t LlpCtrl; - uint16_t RSVD0; - - uint32_t MaxMultiBlk; - uint32_t pLlix; - uint32_t pBlockSizeList; -}SAL_ADC_DMA_USER_DEF, *PSAL_ADC_DMA_USER_DEF; - -// Software API Level ADC Handler -typedef struct _SAL_ADC_HND_ { - uint8_t DevNum; //ADC device number - uint8_t PinMux; //ADC pin mux seletion - uint8_t OpType; //ADC operation type selection - volatile uint8_t DevSts; //ADC device status - - uint32_t ADCExd; //ADC extended options: - //bit 0: example - //bit 31~bit 1: Reserved - uint32_t ErrType; // - uint32_t TimeOut; //ADC IO Timeout count - - PHAL_ADC_INIT_DAT pInitDat; //Pointer to ADC initial data struct - PSAL_ADC_TRANSFER_BUF pRXBuf; //Pointer to ADC TX buffer - PSAL_ADC_USER_CB pUserCB; //Pointer to ADC User Callback -}SAL_ADC_HND, *PSAL_ADC_HND; - -// ADC SAL handle private -typedef struct _SAL_ADC_HND_PRIV_ { - void **ppSalADCHnd; //Pointer to SAL_ADC_HND pointer - SAL_ADC_HND SalADCHndPriv; //Private SAL_ADC_HND -}SAL_ADC_HND_PRIV, *PSAL_ADC_HND_PRIV; - -//ADC SAL management adapter -typedef struct _SAL_ADC_MNGT_ADPT_ { - PSAL_ADC_HND_PRIV pSalHndPriv; //Pointer to SAL_ADC_HND - PHAL_ADC_INIT_DAT pHalInitDat; //Pointer to HAL ADC initial data( HAL_ADC_INIT_DAT ) - PHAL_ADC_OP pHalOp; //Pointer to HAL ADC operation( HAL_ADC_OP ) - void (*pHalOpInit)(void*);//Pointer to HAL ADC initialize function - - PIRQ_HANDLE pIrqHnd; //Pointer to IRQ handler in SAL layer( IRQ_HANDLE ) - void (*pSalIrqFunc)(void*); //Used for SAL ADC interrupt function - - PSAL_ADC_DMA_USER_DEF pDMAConf; //Pointer to DAC User Define DMA config - PHAL_GDMA_ADAPTER pHalGdmaAdp; - PHAL_GDMA_OP pHalGdmaOp; - PIRQ_HANDLE pIrqGdmaHnd; - void (*pHalGdmaOpInit)(void*); //Pointer to HAL DAC initialize function - PSAL_ADC_USER_CB pUserCB; //Pointer to SAL user callbacks (SAL_ADC_USER_CB ) - void (*pSalDMAIrqFunc)(void*); //Used for SAL DAC interrupt function -}SAL_ADC_MNGT_ADPT, *PSAL_ADC_MNGT_ADPT; - - -//================ ADC HAL Function Prototype =================== -// ADC HAL inline function -// For checking I2C input index valid or not -static inline RTK_STATUS -RtkADCIdxChk( - IN uint8_t ADCIdx -) -{ -#if !ADC0_USED - if (ADCIdx == ADC0_SEL) - return _EXIT_FAILURE; -#endif - -#if !ADC1_USED - if (ADCIdx == ADC1_SEL) - return _EXIT_FAILURE; -#endif - -#if !ADC2_USED - if (ADCIdx == ADC2_SEL) - return _EXIT_FAILURE; -#endif - -#if !ADC3_USED - if (ADCIdx == ADC3_SEL) - return _EXIT_FAILURE; -#endif - ADCIdx++; //for compile warning. - return _EXIT_SUCCESS; -} - -void HalADCOpInit(IN void *Data); -PSAL_ADC_HND RtkADCGetSalHnd(IN uint8_t DACIdx); -RTK_STATUS RtkADCFreeSalHnd(IN PSAL_ADC_HND pSalADCHND); -RTK_STATUS RtkADCLoadDefault(IN void *Data); -RTK_STATUS RtkADCInit(IN void *Data); -RTK_STATUS RtkADCDeInit(IN void *Data); -//RTK_STATUS RtkADCReceive(IN void *Data); -uint32_t RtkADCReceive(IN void *Data); -uint32_t RtkADCReceiveBuf(IN void *Data,IN uint32_t *pBuf); -uint32_t RtkADCRxManualRotate(IN void *Data,IN uint32_t *pBuf); - -PSAL_ADC_MNGT_ADPT RtkADCGetMngtAdpt(IN uint8_t ADCIdx); -RTK_STATUS RtkADCFreeMngtAdpt(IN PSAL_ADC_MNGT_ADPT pSalADCMngtAdpt); -void ADCISRHandle(IN void *Data); -void ADCGDMAISRHandle(IN void *Data); -HAL_Status RtkADCDisablePS(IN void *Data); -HAL_Status RtkADCEnablePS(IN void *Data); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_api.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_api.h deleted file mode 100644 index 1ad77f3..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_api.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ -#ifndef _HAL_API_H_ -#define _HAL_API_H_ - -#include "basic_types.h" -#include "hal_irqn.h" - -#define HAL_READ32(base, addr) \ - rtk_le32_to_cpu(*((volatile uint32_t*)(base + addr))) - -#define HAL_WRITE32(base, addr, value32) \ - ((*((volatile uint32_t*)(base + addr))) = rtk_cpu_to_le32(value32)) - - -#define HAL_READ16(base, addr) \ - rtk_le16_to_cpu(*((volatile uint16_t*)(base + addr))) - -#define HAL_WRITE16(base, addr, value) \ - ((*((volatile uint16_t*)(base + addr))) = rtk_cpu_to_le16(value)) - - -#define HAL_READ8(base, addr) \ - (*((volatile uint8_t*)(base + addr))) - -#define HAL_WRITE8(base, addr, value) \ - ((*((volatile uint8_t*)(base + addr))) = value) - -#if 0 -// These "extern _LONG_CALL_" function declaration are for RAM code building only -// For ROM code building, thses code should be marked off -extern _LONG_CALL_ uint8_t -HalPinCtrlRtl8195A( - IN uint32_t Function, - IN uint32_t PinLocation, - IN BOOL Operation - ); - -extern _LONG_CALL_ void -HalSerialPutcRtl8195a( - IN uint8_t c - ); - -extern _LONG_CALL_ uint8_t -HalSerialGetcRtl8195a( - IN BOOL PullMode - ); - -extern _LONG_CALL_ uint32_t -HalSerialGetIsrEnRegRtl8195a(void); - -extern _LONG_CALL_ void -HalSerialSetIrqEnRegRtl8195a ( - IN uint32_t SetValue - ); - -extern _LONG_CALL_ void -VectorTableInitForOSRtl8195A( - IN void *PortSVC, - IN void *PortPendSVH, - IN void *PortSysTick - ); - -extern _LONG_CALL_ BOOL -VectorIrqRegisterRtl8195A( - IN PIRQ_HANDLE pIrqHandle - ); - -extern _LONG_CALL_ BOOL -VectorIrqUnRegisterRtl8195A( - IN PIRQ_HANDLE pIrqHandle - ); - -extern _LONG_CALL_ void -VectorIrqEnRtl8195A( - IN PIRQ_HANDLE pIrqHandle - ); - -extern _LONG_CALL_ void -VectorIrqDisRtl8195A( - IN PIRQ_HANDLE pIrqHandle - ); -#endif - -extern BOOLEAN SpicFlashInitRtl8195A(uint8_t SpicBitMode); -extern void InitWDGIRQ(void); - -#define PinCtrl HalPinCtrlRtl8195A - -#define DiagPutChar HalSerialPutcRtl8195a -#define DiagGetChar HalSerialGetcRtl8195a -#define DiagGetIsrEnReg HalSerialGetIsrEnRegRtl8195a -#define DiagSetIsrEnReg HalSerialSetIrqEnRegRtl8195a - -#define InterruptForOSInit VectorTableInitForOSRtl8195A -#define InterruptRegister VectorIrqRegisterRtl8195A -#define InterruptUnRegister VectorIrqUnRegisterRtl8195A - -#define InterruptEn VectorIrqEnRtl8195A -#define InterruptDis VectorIrqDisRtl8195A - -#define SpicFlashInit SpicFlashInitRtl8195A -#define Calibration32k En32KCalibration -#define WDGInit InitWDGIRQ - -typedef enum _HAL_Status -{ - HAL_OK = 0x00, - HAL_BUSY = 0x01, - HAL_TIMEOUT = 0x02, - HAL_ERR_PARA = 0x03, // error with invaild parameters - HAL_ERR_MEM = 0x04, // error with memory allocation failed - HAL_ERR_HW = 0x05, // error with hardware error - - HAL_ERR_UNKNOWN = 0xee // unknown error - -} HAL_Status; - - -#endif //_HAL_API_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_common.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_common.c deleted file mode 100644 index d14bbf8..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_common.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "rtl8195a.h" -#include "hal_common.h" - -extern HAL_TIMER_OP HalTimerOp; - -HAL_Status -HalCommonInit(void){ - -#ifdef CONFIG_TIMER_MODULE - HalTimerOpInit_Patch((void*)(&HalTimerOp)); -#endif - - return HAL_OK; -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_common.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_common.h deleted file mode 100644 index 113c1a1..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_common.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_COMMON_H_ -#define _HAL_COMMON_H_ - -//================= Function Prototype START =================== -HAL_Status HalCommonInit(void); -//================= Function Prototype END =================== - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_crypto.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_crypto.h deleted file mode 100644 index 1e93ad1..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_crypto.h +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#ifndef __HAL_CRYPTO_H__ -#define __HAL_CRYPTO_H__ - - -#include "hal_api.h" -#include "basic_types.h" - - -#define CRYPTO_MAX_MSG_LENGTH 16000 -#define CRYPTO_MD5_DIGEST_LENGTH 16 -#define CRYPTO_SHA1_DIGEST_LENGTH 20 -#define CRYPTO_SHA2_DIGEST_LENGTH 32 - - -typedef enum _SHA2_TYPE_ { - SHA2_NONE = 0, - SHA2_224 = 224/8, - SHA2_256 = 256/8, - SHA2_384 = 384/8, - SHA2_512 = 512/8 -} SHA2_TYPE; - - -#define _ERRNO_CRYPTO_DESC_NUM_SET_OutRange -2 -#define _ERRNO_CRYPTO_BURST_NUM_SET_OutRange -3 -#define _ERRNO_CRYPTO_NULL_POINTER -4 -#define _ERRNO_CRYPTO_ENGINE_NOT_INIT -5 -#define _ERRNO_CRYPTO_ADDR_NOT_4Byte_Aligned -6 -#define _ERRNO_CRYPTO_KEY_OutRange -7 -#define _ERRNO_CRYPTO_MSG_OutRange -8 -#define _ERRNO_CRYPTO_IV_OutRange -9 -#define _ERRNO_CRYPTO_AUTH_TYPE_NOT_MATCH -10 -#define _ERRNO_CRYPTO_CIPHER_TYPE_NOT_MATCH -11 -#define _ERRNO_CRYPTO_KEY_IV_LEN_DIFF -12 -#define _ERRNO_CRYPTO_AES_MSGLEN_NOT_16Byte_Aligned -13 - - - -// -// External API Functions -// - - -// Crypto Engine -extern int rtl_cryptoEngine_init(void); -extern void rtl_cryptoEngine_info(void); - - - -// -// Authentication -// - -// md5 - -extern int rtl_crypto_md5(IN const uint8_t* message, IN const uint32_t msglen, OUT uint8_t* pDigest); - -extern int rtl_crypto_md5_init(void); -extern int rtl_crypto_md5_process(IN const uint8_t* message, const IN uint32_t msglen, OUT uint8_t* pDigest); - - -// sha1 -extern int rtl_crypto_sha1(IN const uint8_t* message, IN const uint32_t msglen, OUT uint8_t* pDigest); - -extern int rtl_crypto_sha1_init(void); -extern int rtl_crypto_sha1_process(IN const uint8_t* message, IN const uint32_t msglen, OUT uint8_t* pDigest); - -// sha2 - -extern int rtl_crypto_sha2(IN const SHA2_TYPE sha2type, - IN const uint8_t* message, IN const uint32_t msglen, OUT uint8_t* pDigest); - -extern int rtl_crypto_sha2_init(IN const SHA2_TYPE sha2type); -extern int rtl_crypto_sha2_process(IN const uint8_t* message, IN const uint32_t msglen, OUT uint8_t* pDigest); - - -// HMAC-md5 -extern int rtl_crypto_hmac_md5(IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* key, IN const uint32_t keylen, OUT uint8_t* pDigest); - -extern int rtl_crypto_hmac_md5_init(IN const uint8_t* key, IN const uint32_t keylen); -extern int rtl_crypto_hmac_md5_process(IN const uint8_t* message, IN const uint32_t msglen, OUT uint8_t* pDigest); - - -// HMAC-sha1 -extern int rtl_crypto_hmac_sha1(IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* key, IN const uint32_t keylen, OUT uint8_t* pDigest); - -extern int rtl_crypto_hmac_sha1_init(IN const uint8_t* key, IN const uint32_t keylen); -extern int rtl_crypto_hmac_sha1_process(IN const uint8_t* message, IN const uint32_t msglen, OUT uint8_t* pDigest); - - -// HMAC-sha2 -extern int rtl_crypto_hmac_sha2(IN const SHA2_TYPE sha2type, IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* key, IN const uint32_t keylen, OUT uint8_t* pDigest); - -extern int rtl_crypto_hmac_sha2_init(IN const SHA2_TYPE sha2type, IN const uint8_t* key, IN const uint32_t keylen); -extern int rtl_crypto_hmac_sha2_process(IN const uint8_t* message, IN const uint32_t msglen, OUT uint8_t* pDigest); - - -// -// Cipher Functions -// - -// AES - CBC - -extern int rtl_crypto_aes_cbc_init(IN const uint8_t* key, IN const uint32_t keylen); - -extern int rtl_crypto_aes_cbc_encrypt( - IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* iv, IN const uint32_t ivlen, OUT uint8_t* pResult); - -extern int rtl_crypto_aes_cbc_decrypt( - IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* iv, IN const uint32_t ivlen, OUT uint8_t* pResult); - - -// AES - ECB - -extern int rtl_crypto_aes_ecb_init(IN const uint8_t* key, IN const uint32_t keylen); - -extern int rtl_crypto_aes_ecb_encrypt( - IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* iv, IN const uint32_t ivlen, OUT uint8_t* pResult); - -extern int rtl_crypto_aes_ecb_decrypt( - IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* iv, IN const uint32_t ivlen, OUT uint8_t* pResult); - - -// AES - CTR - -extern int rtl_crypto_aes_ctr_init(IN const uint8_t* key, IN const uint32_t keylen); - -extern int rtl_crypto_aes_ctr_encrypt( - IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* iv, IN const uint32_t ivlen, OUT uint8_t* pResult); - -extern int rtl_crypto_aes_ctr_decrypt( - IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* iv, IN const uint32_t ivlen, OUT uint8_t* pResult); - - -// 3DES - CBC - -extern int rtl_crypto_3des_cbc_init(IN const uint8_t* key, IN const uint32_t keylen); - -extern int rtl_crypto_3des_cbc_encrypt( - IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* iv, IN const uint32_t ivlen, OUT uint8_t* pResult); - -extern int rtl_crypto_3des_cbc_decrypt( - IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* iv, IN const uint32_t ivlen, OUT uint8_t* pResult); - - -// 3DES - ECB - -extern int rtl_crypto_3des_ecb_init(IN const uint8_t* key, IN const uint32_t keylen); - -extern int rtl_crypto_3des_ecb_encrypt( - IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* iv, IN const uint32_t ivlen, OUT uint8_t* pResult); - -extern int rtl_crypto_3des_ecb_decrypt( - IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* iv, IN const uint32_t ivlen, OUT uint8_t* pResult); - - -// DES - CBC - -extern int rtl_crypto_des_cbc_init(IN const uint8_t* key, IN const uint32_t keylen); - -extern int rtl_crypto_des_cbc_encrypt( - IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* iv, IN const uint32_t ivlen, OUT uint8_t* pResult); - -extern int rtl_crypto_des_cbc_decrypt( - IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* iv, IN const uint32_t ivlen, OUT uint8_t* pResult); - - -// DES - ECB - -extern int rtl_crypto_des_ecb_init(IN const uint8_t* key, IN const uint32_t keylen); - -extern int rtl_crypto_des_ecb_encrypt( - IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* iv, IN const uint32_t ivlen, OUT uint8_t* pResult); - -extern int rtl_crypto_des_ecb_decrypt( - IN const uint8_t* message, IN const uint32_t msglen, - IN const uint8_t* iv, IN const uint32_t ivlen, OUT uint8_t* pResult); - - -// -// C functions in ROM -// - -extern int rtl_memcmpb(const uint8_t *dst, const uint8_t *src, int bytes); -extern int rtl_memcpyb(uint8_t *dst, const uint8_t *src, int bytes); - -#endif /* __HAL_CRYPTO_H__ */ - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_dac.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_dac.c deleted file mode 100644 index 543de79..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_dac.c +++ /dev/null @@ -1,1561 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "rtl8195a.h" -#include "rtl_utility.h" -#include "osdep_api.h" -#include "hal_dac.h" -#include "hal_gdma.h" - -#ifdef CONFIG_DAC_EN -#define DAC_STATIC_ALLOC 0 - -/* DAC SAL global variables declaration when kernel disabled */ - -#if DAC_STATIC_ALLOC - SRAM_BF_DATA_SECTION - HAL_DAC_OP HalDACOpSAL; -#endif - - -#if DAC0_USED /*#if DAC0_USED*/ -#if DAC_STATIC_ALLOC - SRAM_BF_DATA_SECTION - SAL_DAC_MNGT_ADPT SalDAC0MngtAdpt; - - SRAM_BF_DATA_SECTION - SAL_DAC_HND_PRIV SalDAC0HndPriv; - - SRAM_BF_DATA_SECTION - HAL_DAC_INIT_DAT HalDAC0InitData; - - SRAM_BF_DATA_SECTION - IRQ_HANDLE DAC0IrqHandleDat; - - SRAM_BF_DATA_SECTION - HAL_GDMA_ADAPTER HalDAC0GdmaAdpt; - - SRAM_BF_DATA_SECTION - HAL_GDMA_OP HalDAC0GdmaOp; - - SRAM_BF_DATA_SECTION - IRQ_HANDLE DAC0GDMAIrqHandleDat; - - SRAM_BF_DATA_SECTION - SAL_DAC_USER_CB SalDAC0UserCB; - - SRAM_BF_DATA_SECTION - SAL_DAC_DMA_USER_DEF SalDAC0DmaUserDef; - - SRAM_BF_DATA_SECTION - SAL_DAC_USERCB_ADPT SalDAC0UserCBAdpt[SAL_DAC_USER_CB_NUM]; -#endif -#endif /*#if DAC0_USED*/ - -#if DAC1_USED /*#if DAC1_USED*/ -#if DAC_STATIC_ALLOC - - SRAM_BF_DATA_SECTION - SAL_DAC_MNGT_ADPT SalDAC1MngtAdpt; - - SRAM_BF_DATA_SECTION - SAL_DAC_HND_PRIV SalDAC1HndPriv; - - SRAM_BF_DATA_SECTION - HAL_DAC_INIT_DAT HalDAC1InitData; - - SRAM_BF_DATA_SECTION - IRQ_HANDLE DAC1IrqHandleDat; - - SRAM_BF_DATA_SECTION - HAL_GDMA_ADAPTER HalDAC1GdmaAdpt; - - SRAM_BF_DATA_SECTION - HAL_GDMA_OP HalDAC1GdmaOp; - - SRAM_BF_DATA_SECTION - IRQ_HANDLE DAC1GDMAIrqHandleDat; - - SRAM_BF_DATA_SECTION - SAL_DAC_USER_CB SalDAC1UserCB; - - SRAM_BF_DATA_SECTION - SAL_DAC_DMA_USER_DEF SalDAC1DmaUserDef; - - SRAM_BF_DATA_SECTION - SAL_DAC_USERCB_ADPT SalDAC1UserCBAdpt[SAL_DAC_USER_CB_NUM]; -#endif -#endif /*#if DAC1_USED*/ - -/* Function prototype */ -void DACISRHandle(IN void *Data); -void DACGDMAISRHandle(IN void * Data); -void DACGDMALLPISRHandle(IN void *Data); - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CGetMngtAdpt -// -// Description: -// According to the input index, all the memory space are allocated and all the -// related pointers are assigned. The management adapter pointer will be -// returned. -// -// Arguments: -// [in] uint8_t I2CIdx - -// I2C module index -// -// Return: -// PSAL_I2C_MNGT_ADPT -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//--------------------------------------------------------------------------------------------------- -void HalDACOpInit( - IN void *Data -) -{ - PHAL_DAC_OP pHalDacOp = (PHAL_DAC_OP) Data; - - pHalDacOp->HalDACInit = HalDACInit8195a; - pHalDacOp->HalDACDeInit = HalDACDeInit8195a; - pHalDacOp->HalDACEnable = HalDACEnableRtl8195a; - pHalDacOp->HalDACSend = HalDACSendRtl8195a; - pHalDacOp->HalDACIntrCtrl = HalDACIntrCtrl8195a; - pHalDacOp->HalDACReadReg = HalDACReadRegRtl8195a; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CGetMngtAdpt -// -// Description: -// According to the input index, all the memory space are allocated and all the -// related pointers are assigned. The management adapter pointer will be -// returned. -// -// Arguments: -// [in] uint8_t I2CIdx - -// I2C module index -// -// Return: -// PSAL_I2C_MNGT_ADPT -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//--------------------------------------------------------------------------------------------------- -PSAL_DAC_MNGT_ADPT -RtkDACGetMngtAdpt( - IN uint8_t DACIdx -){ - PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt = NULL; - PSAL_DAC_USERCB_ADPT pSalDACUserCBAdpt = NULL; - - /* If the kernel is available, Memory-allocation is used. */ -#if !DAC_STATIC_ALLOC - - pSalDACMngtAdpt = (PSAL_DAC_MNGT_ADPT)RtlZmalloc(sizeof(SAL_DAC_MNGT_ADPT)); - pSalDACMngtAdpt->pSalHndPriv = (PSAL_DAC_HND_PRIV)RtlZmalloc(sizeof(SAL_DAC_HND_PRIV)); - pSalDACMngtAdpt->pHalInitDat = (PHAL_DAC_INIT_DAT)RtlZmalloc(sizeof(HAL_DAC_INIT_DAT)); - pSalDACMngtAdpt->pHalOp = (PHAL_DAC_OP)RtlZmalloc(sizeof(HAL_DAC_OP)); - pSalDACMngtAdpt->pIrqHnd = (PIRQ_HANDLE)RtlZmalloc(sizeof(IRQ_HANDLE)); - pSalDACMngtAdpt->pUserCB = (PSAL_DAC_USER_CB)RtlZmalloc(sizeof(SAL_DAC_USER_CB)); - pSalDACMngtAdpt->pDMAConf = (PSAL_DAC_DMA_USER_DEF)RtlZmalloc(sizeof(SAL_DAC_DMA_USER_DEF)); - pSalDACMngtAdpt->pHalGdmaAdp = (PHAL_GDMA_ADAPTER)RtlZmalloc(sizeof(HAL_GDMA_ADAPTER)); - pSalDACMngtAdpt->pHalGdmaOp = (PHAL_GDMA_OP)RtlZmalloc(sizeof(HAL_GDMA_OP)); - pSalDACMngtAdpt->pIrqGdmaHnd = (PIRQ_HANDLE)RtlZmalloc(sizeof(IRQ_HANDLE)); - pSalDACUserCBAdpt = (PSAL_DAC_USERCB_ADPT)RtlZmalloc((sizeof(SAL_DAC_USERCB_ADPT)*SAL_DAC_USER_CB_NUM)); -#else - switch (DACIdx){ - case DAC0_SEL: - { - pSalDACMngtAdpt = &SalDAC0MngtAdpt; - pSalDACMngtAdpt->pSalHndPriv = &SalDAC0HndPriv; - pSalDACMngtAdpt->pHalInitDat = &HalDAC0InitData; - pSalDACMngtAdpt->pHalOp = &HalDACOpSAL; - pSalDACMngtAdpt->pIrqHnd = &DAC0IrqHandleDat; - pSalDACMngtAdpt->pUserCB = &SalDAC0UserCB; - pSalDACMngtAdpt->pDMAConf = &SalDAC0DmaUserDef; - pSalDACMngtAdpt->pHalGdmaAdp = &HalDAC0GdmaAdpt; - pSalDACMngtAdpt->pHalGdmaOp = &HalDAC0GdmaOp; - pSalDACMngtAdpt->pIrqGdmaHnd = &DAC0IrqHandleDat; - pSalDACUserCBAdpt = &SalDAC0UserCBAdpt; - break; - } - - case DAC1_SEL: - { - pSalDACMngtAdpt = &SalDAC1MngtAdpt; - pSalDACMngtAdpt->pSalHndPriv = &SalDAC1HndPriv; - pSalDACMngtAdpt->pHalInitDat = &HalDAC1InitData; - pSalDACMngtAdpt->pHalOp = &HalDACOpSAL; - pSalDACMngtAdpt->pIrqHnd = &DAC1IrqHandleDat; - pSalDACMngtAdpt->pUserCB = &SalDAC1UserCB; - pSalDACMngtAdpt->pDMAConf = &SalDAC1DmaUserDef; - pSalDACMngtAdpt->pHalGdmaAdp = &HalDAC1GdmaAdpt; - pSalDACMngtAdpt->pHalGdmaOp = &HalDAC1GdmaOp; - pSalDACMngtAdpt->pIrqGdmaHnd = &DAC1IrqHandleDat; - pSalDACUserCBAdpt = &SalDAC1UserCBAdpt; - break; - } - - default: - break; - } -#endif - - /*To assign user callback pointers*/ - pSalDACMngtAdpt->pUserCB->pTXCB = pSalDACUserCBAdpt; - pSalDACMngtAdpt->pUserCB->pTXCCB = (pSalDACUserCBAdpt+1); - pSalDACMngtAdpt->pUserCB->pRXCB = (pSalDACUserCBAdpt+2); - pSalDACMngtAdpt->pUserCB->pRXCCB = (pSalDACUserCBAdpt+3); - pSalDACMngtAdpt->pUserCB->pRDREQCB = (pSalDACUserCBAdpt+4); - pSalDACMngtAdpt->pUserCB->pERRCB = (pSalDACUserCBAdpt+5); - pSalDACMngtAdpt->pUserCB->pDMATXCB = (pSalDACUserCBAdpt+6); - pSalDACMngtAdpt->pUserCB->pDMATXCCB = (pSalDACUserCBAdpt+7); - pSalDACMngtAdpt->pUserCB->pDMARXCB = (pSalDACUserCBAdpt+8); - pSalDACMngtAdpt->pUserCB->pDMARXCCB = (pSalDACUserCBAdpt+9); - - /*To assign the rest pointers*/ - pSalDACMngtAdpt->pSalHndPriv->ppSalDACHnd = (void**)&(pSalDACMngtAdpt->pSalHndPriv); - - /* To assign the default HAL OP initialization function */ - pSalDACMngtAdpt->pHalOpInit = &HalDACOpInit; - - /* To assign the default HAL GDMA OP initialization function */ - pSalDACMngtAdpt->pHalGdmaOpInit = &HalGdmaOpInit; - - /* To assign the default SAL interrupt function */ - pSalDACMngtAdpt->pSalIrqFunc = &DACISRHandle; - - /* To assign the default SAL DMA interrupt function */ - pSalDACMngtAdpt->pSalDMAIrqFunc = &DACGDMAISRHandle; - - return pSalDACMngtAdpt; -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CFreeMngtAdpt -// -// Description: -// Free all the previous allocated memory space. -// -// Arguments: -// [in] PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt - -// I2C SAL management adapter pointer -// -// -// Return: -// The status of the enable process. -// _EXIT_SUCCESS if the RtkI2CFreeMngtAdpt succeeded. -// _EXIT_FAILURE if the RtkI2CFreeMngtAdpt failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//--------------------------------------------------------------------------------------------------- -RTK_STATUS -RtkDACFreeMngtAdpt( - IN PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt -){ -#if !DAC_STATIC_ALLOC - RtlMfree((uint8_t *)pSalDACMngtAdpt->pUserCB->pTXCB, (sizeof(SAL_DAC_USERCB_ADPT)*SAL_DAC_USER_CB_NUM)); - RtlMfree((uint8_t *)pSalDACMngtAdpt->pIrqGdmaHnd, sizeof(IRQ_HANDLE)); - RtlMfree((uint8_t *)pSalDACMngtAdpt->pHalGdmaOp, sizeof(HAL_GDMA_OP)); - RtlMfree((uint8_t *)pSalDACMngtAdpt->pHalGdmaAdp, sizeof(HAL_GDMA_ADAPTER)); - RtlMfree((uint8_t *)pSalDACMngtAdpt->pDMAConf, sizeof(SAL_DAC_DMA_USER_DEF)); - RtlMfree((uint8_t *)pSalDACMngtAdpt->pUserCB, sizeof(SAL_DAC_USER_CB)); - RtlMfree((uint8_t *)pSalDACMngtAdpt->pIrqHnd, sizeof(IRQ_HANDLE)); - RtlMfree((uint8_t *)pSalDACMngtAdpt->pHalOp, sizeof(HAL_DAC_OP)); - RtlMfree((uint8_t *)pSalDACMngtAdpt->pHalInitDat, sizeof(HAL_DAC_INIT_DAT)); - RtlMfree((uint8_t *)pSalDACMngtAdpt->pSalHndPriv, sizeof(SAL_DAC_HND_PRIV)); - RtlMfree((uint8_t *)pSalDACMngtAdpt, sizeof(SAL_DAC_MNGT_ADPT)); -#else - ; -#endif - - return _EXIT_SUCCESS; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// I2CISRHandle -// -// Description: -// I2C Interrupt Service Routine. -// According to the input pointer to SAL_I2C_HND, all the rest pointers will be -// found and be used to the rest part of this servie routine. -// The following types of interrupt will be taken care: -// - General Call (providing General Call Callback). Slave receives a general call. -// - STOP Bit (NOT providing General Call Callback) -// - START Bit (NOTproviding General Call Callback) -// - I2C Activity (NOTproviding General Call Callback) -// - RX Done (providing Error Callback). The slave transmitter does NOT -// receive a proper NACK for the end of whole transfer. -// - TX Abort (providing Error Call Callback). The Master/Slave -// transmitting is terminated. -// - RD Req (providing TX and TXC Callback). Slave gets a Read Request -// and starts a slave-transmitter operation. The slave transmit -// data will be written into slave TX FIFO from user data buffer. -// - TX Empty (providing TX and TXC Callback). Master TX FIFO is empty. -// The user transmit data will be written into master TX FIFO -// from user data buffer. -// - TX Over (providing Error Callback). Master TX FIFO is Overflow. -// - RX Full (providing RX and RXC Callback). Master/Slave RX FIFO contains -// data. And the received data will be put into Master/Slave user -// receive data buffer. -// - RX Over (providing Error Callback). Master/Slave RX FIFO is Overflow. -// - RX Under (providing Error Callback). Master/Slave RX FIFO is Underflow. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// NA -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//---------------------------------------------------------------------------------------------------- -void -DACISRHandle( - IN void *Data -){ -#ifdef CONFIG_DEBUG_LOG_DAC_HAL - PSAL_DAC_HND pSalDACHND = (PSAL_DAC_HND) Data; - PSAL_DAC_HND_PRIV pSalDACHNDPriv = NULL; - PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt = NULL; - PHAL_DAC_INIT_DAT pHalDACInitDat = NULL; - PHAL_DAC_OP pHalDACOP = NULL; - PSAL_DAC_USER_CB pSalDACUserCB = NULL; - uint8_t DACIrqIdx; - - /* To get the SAL_I2C_MNGT_ADPT pointer, and parse the rest pointers */ - pSalDACHNDPriv = CONTAINER_OF(pSalDACHND, SAL_DAC_HND_PRIV, SalDACHndPriv); - pSalDACMngtAdpt = CONTAINER_OF(pSalDACHNDPriv->ppSalDACHnd, SAL_DAC_MNGT_ADPT, pSalHndPriv); - pHalDACInitDat = pSalDACMngtAdpt->pHalInitDat; - pHalDACOP = pSalDACMngtAdpt->pHalOp; - DACIrqIdx = pHalDACInitDat->DACIdx; - pSalDACUserCB = pSalDACHND->pUserCB; - - DBG_DAC_INFO("DAC INTR STS:%x\n",pHalDACOP->HalDACReadReg(pHalDACInitDat, REG_DAC_INTR_STS)); - if ((pHalDACOP->HalDACReadReg(pHalDACInitDat, REG_DAC_INTR_STS)) & BIT_DAC_FIFO_STOP_ST){ - pHalDACInitDat->DACEn = DAC_DISABLE; - pHalDACOP->HalDACEnable((void *)pHalDACInitDat); - } -#else - /* To reduce warning */ - PSAL_DAC_HND pSalDACHND = (PSAL_DAC_HND) Data; - PSAL_DAC_HND_PRIV pSalDACHNDPriv = NULL; - PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt = NULL; - PHAL_DAC_INIT_DAT pHalDACInitDat = NULL; - PHAL_DAC_OP pHalDACOP = NULL; - - - - /* To get the SAL_I2C_MNGT_ADPT pointer, and parse the rest pointers */ - pSalDACHNDPriv = CONTAINER_OF(pSalDACHND, SAL_DAC_HND_PRIV, SalDACHndPriv); - pSalDACMngtAdpt = CONTAINER_OF(pSalDACHNDPriv->ppSalDACHnd, SAL_DAC_MNGT_ADPT, pSalHndPriv); - pHalDACInitDat = pSalDACMngtAdpt->pHalInitDat; - pHalDACOP = pSalDACMngtAdpt->pHalOp; - - - pHalDACOP->HalDACReadReg(pHalDACInitDat, REG_DAC_INTR_STS); -#endif -} - -void -DACGDMAISRHandle( - IN void *Data -){ - - PSAL_DAC_HND pSalDACHND = (PSAL_DAC_HND) Data; - PSAL_DAC_HND_PRIV pSalDACHNDPriv = NULL; - PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt = NULL; - - PHAL_GDMA_ADAPTER pHalDACGdmaAdapter = NULL; - PHAL_GDMA_OP pHalDACGdmaOp = NULL; - PSAL_DAC_USER_CB pSalDACUserCB = NULL; - - uint8_t IsrTypeMap = 0; - DBG_8195A_DAC_LVL(HAL_DAC_LVL,"%s\n",__func__); - - - pSalDACHNDPriv = CONTAINER_OF(pSalDACHND, SAL_DAC_HND_PRIV, SalDACHndPriv); - pSalDACMngtAdpt = CONTAINER_OF(pSalDACHNDPriv->ppSalDACHnd, SAL_DAC_MNGT_ADPT, pSalHndPriv); - - pHalDACGdmaAdapter = pSalDACMngtAdpt->pHalGdmaAdp; - pHalDACGdmaOp = pSalDACMngtAdpt->pHalGdmaOp; - pSalDACUserCB = pSalDACMngtAdpt->pUserCB; - - pSalDACMngtAdpt->pHalGdmaOpInit(pHalDACGdmaOp); - - if ((pHalDACGdmaAdapter->MaxMuliBlock) == pHalDACGdmaAdapter->MuliBlockCunt+1) { - pHalDACGdmaOp->HalGdmaChCleanAutoSrc(pHalDACGdmaAdapter); - pHalDACGdmaOp->HalGdmaChDis(pHalDACGdmaAdapter); - pSalDACHND->DevSts = DAC_STS_IDLE; - if (pSalDACUserCB->pDMATXCCB->USERCB != NULL) - { - pSalDACUserCB->pDMATXCCB->USERCB((void*)pSalDACUserCB->pDMATXCCB->USERData); - } - } - else { - //pHalDACGdmaOp->HalGdmaChCleanAutoSrc(pHalDACGdmaAdapter); - pSalDACHND->DevSts = DAC_STS_TX_ING; - - if (pSalDACUserCB->pDMATXCB->USERCB != NULL){ - pSalDACUserCB->pDMATXCB->USERCB((void*)pSalDACUserCB->pDMATXCB->USERData);} - } - - //3 Clear Pending ISR - IsrTypeMap = pHalDACGdmaOp->HalGdmaChIsrClean((void*)pHalDACGdmaAdapter); - - //3 Maintain Block Count - if (IsrTypeMap & BlockType) { - pHalDACGdmaAdapter->MuliBlockCunt++; - } - -} - -void -DACGDMALLPISRHandle( - IN void *Data -){ - PSAL_DAC_HND pSalDACHND = (PSAL_DAC_HND) Data; - PSAL_DAC_HND_PRIV pSalDACHNDPriv = NULL; - PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt = NULL; - - PHAL_GDMA_ADAPTER pHalDACGdmaAdapter = NULL; - PHAL_GDMA_OP pHalDACGdmaOp = NULL; - - uint8_t IsrTypeMap; - - pSalDACHNDPriv = CONTAINER_OF(pSalDACHND, SAL_DAC_HND_PRIV, SalDACHndPriv); - pSalDACMngtAdpt = CONTAINER_OF(pSalDACHNDPriv->ppSalDACHnd, SAL_DAC_MNGT_ADPT, pSalHndPriv); - - pHalDACGdmaAdapter = pSalDACMngtAdpt->pHalGdmaAdp; - pHalDACGdmaOp = pSalDACMngtAdpt->pHalGdmaOp; - - - pSalDACMngtAdpt->pHalGdmaOpInit(pHalDACGdmaOp); -#if 0 - PGDMA_ADAPTER pGdmaAdapte = (PGDMA_ADAPTER) Data; - PHAL_GDMA_ADAPTER pHalGdmaAdapter = pGdmaAdapte->pHalGdmaAdapter; - PGDMA_CH_LLI_ELE pGdmaChLliEle; - struct GDMA_CH_LLI *pGdmaChLli = pHalGdmaAdapter->pLlix; - struct BLOCK_SIZE_LIST *pBlockSizeList = pHalGdmaAdapter->pBlockSizeList; - uint32_t TotalBlockSize = 0; - uint8_t IsrTypeMap, BlockIndex; - uint8_t *pSrc = NULL, *pDst = NULL; - DBG_8195A_DMA("Enter Gdma0 Channel 5 ISr =====>\n"); -#endif - - - - if ((pHalDACGdmaAdapter->MaxMuliBlock) == pHalDACGdmaAdapter->MuliBlockCunt) { - //HalGdmaOp.HalGdmaChCleanAutoSrc(pHalGdmaAdapter); - //DAC0_FCTRL(OFF); - - //HalGdmaOp.HalGdmaChCleanAutoDst(pHalGdmaAdapter); - pHalDACGdmaOp->HalGdmaChDis(pHalDACGdmaAdapter); - - DBG_8195A("dma done\n"); - } - - - IsrTypeMap = pHalDACGdmaOp->HalGdmaChIsrClean((void*)pHalDACGdmaAdapter); - - if (IsrTypeMap & BlockType) { - pHalDACGdmaAdapter->MuliBlockCunt++; - } -} - -static RTK_STATUS -RtkDACPinMuxInit( - IN PSAL_DAC_HND pSalDACHND -){ - uint32_t DACLocalTemp; - - /* Check the I2C index first */ - if (RtkDACIdxChk(pSalDACHND->DevNum)) - return _EXIT_FAILURE; - - DACLocalTemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL2); - DACLocalTemp |= BIT26; - - /* To release DAC delta sigma clock gating */ - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SYS_SYSPLL_CTRL2,DACLocalTemp); - - switch (pSalDACHND->DevNum){ -#if DAC0_USED - case DAC0_SEL: - { - /* Turn on DAC active clock */ - ACTCK_DAC_CCTRL(ON); - - /* Enable DAC0 module */ - DAC0_FCTRL(ON); - break; - } -#endif -#if DAC1_USED - case DAC1_SEL: - { - /* Turn on DAC active clock */ - ACTCK_DAC_CCTRL(ON); - - /* Enable DAC1 module */ - DAC1_FCTRL(ON); - break; - } -#endif - default: - return _EXIT_FAILURE; - } - - return _EXIT_SUCCESS; -} - -/** \brief HalDACPinMuxInit:\n - * to set DAC clock control and enable control - * - * This function is mainly to set DAC clock control and enable control. - * \para void *: Data, It's a pointer to HAL_DAC_INIT_DAT - */ -void -HalDACPinMuxInit( - IN void *Data -){ - uint32_t DACLocalTemp; - PHAL_DAC_INIT_DAT pHalInitPara = (PHAL_DAC_INIT_DAT)Data; - - /* Check the I2C index first */ - if (RtkDACIdxChk(pHalInitPara->DACIdx)) - return; - - DACLocalTemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL2); - DACLocalTemp |= BIT26; - - /* To release DAC delta sigma clock gating */ - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SYS_SYSPLL_CTRL2,DACLocalTemp); - - switch (pHalInitPara->DACIdx){ -#if DAC0_USED - case DAC0_SEL: - { - /* Turn on DAC active clock */ - ACTCK_DAC_CCTRL(ON); - - /* Enable DAC0 module */ - DAC0_FCTRL(ON); - break; - } -#endif -#if DAC1_USED - case DAC1_SEL: - { - /* Turn on DAC active clock */ - ACTCK_DAC_CCTRL(ON); - - /* Enable DAC1 module */ - DAC1_FCTRL(ON); - break; - } -#endif - default: - return; - } - -} - - -static RTK_STATUS -RtkDACPinMuxDeInit( - IN PSAL_DAC_HND pSalDACHND -){ - - uint32_t DACLocalTemp; - - /* Check the I2C index first */ - if (RtkDACIdxChk(pSalDACHND->DevNum)) - return _EXIT_FAILURE; - - switch (pSalDACHND->DevNum){ -#if DAC0_USED - case DAC0_SEL: - { - /* Turn on DAC active clock */ - ACTCK_DAC_CCTRL(OFF); - - /* Enable DAC0 module */ - DAC0_FCTRL(OFF); - break; - } -#endif -#if DAC1_USED - case DAC1_SEL: - { - /* Turn on DAC active clock */ - ACTCK_DAC_CCTRL(OFF); - - /* Enable DAC1 module */ - DAC1_FCTRL(OFF); - break; - } -#endif - default: - return _EXIT_FAILURE; - } - - - DACLocalTemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL2); - DACLocalTemp &= (~BIT26); - - /* To release DAC delta sigma clock gating */ - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SYS_SYSPLL_CTRL2,DACLocalTemp); - - return _EXIT_SUCCESS; -} - -/** \brief HalDACPinMuxDeInit:\n - * to disable DAC clock control and enable control - * - * This function is mainly to disable DAC clock control and enable control. - * \para void *: Data, a pointer to HAL_DAC_INIT_DAT. - */ -void -HalDACPinMuxDeInit( - IN void *Data -){ - - uint32_t DACLocalTemp; - PHAL_DAC_INIT_DAT pHalInitPara = (PHAL_DAC_INIT_DAT)Data; - - /* Check the I2C index first */ - if (RtkDACIdxChk(pHalInitPara->DACIdx)) - return; - - switch (pHalInitPara->DACIdx){ -#if DAC0_USED - case DAC0_SEL: - { - /* Turn on DAC active clock */ - ACTCK_DAC_CCTRL(OFF); - - /* Enable DAC0 module */ - DAC0_FCTRL(OFF); - break; - } -#endif -#if DAC1_USED - case DAC1_SEL: - { - /* Turn on DAC active clock */ - ACTCK_DAC_CCTRL(OFF); - - /* Enable DAC1 module */ - DAC1_FCTRL(OFF); - break; - } -#endif - default: - return; - } - - - DACLocalTemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL2); - DACLocalTemp &= (~BIT26); - - /* To release DAC delta sigma clock gating */ - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SYS_SYSPLL_CTRL2,DACLocalTemp); - - return; -} - - -#if DAC_INTR_OP_TYPE -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CIrqInit -// -// Description: -// I2C interrupt initialization function. -// For I2C interrupt operation mode, I2C module MUST register itself to the platform -// by providing the interrupt handler which contains interrupt input data (arguments), -// interrupt service routine, interrupt number, interrupt priority. And then the interrupt -// should be enabled. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C interrupt initialization process. -// _EXIT_SUCCESS if the RtkI2CIrqInit succeeded. -// _EXIT_FAILURE if the RtkI2CIrqInit failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -static RTK_STATUS -RtkDACIrqInit( - IN PSAL_DAC_HND pSalDACHND -){ - PSAL_DAC_HND_PRIV pSalDACHNDPriv = NULL; - PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt = NULL; - PIRQ_HANDLE pIrqHandle = NULL; - - /* To Get the SAL_I2C_MNGT_ADPT Pointer */ - pSalDACHNDPriv = CONTAINER_OF(pSalDACHND, SAL_DAC_HND_PRIV, SalDACHndPriv); - pSalDACMngtAdpt = CONTAINER_OF(pSalDACHNDPriv->ppSalDACHnd, SAL_DAC_MNGT_ADPT, pSalHndPriv); - pIrqHandle = pSalDACMngtAdpt->pIrqHnd; - - if (RtkDACIdxChk(pSalDACHND->DevNum)) - return _EXIT_FAILURE; - - switch (pSalDACHND->DevNum){ -#if DAC0_USED - case DAC0_SEL: - { - pIrqHandle->Data = (uint32_t) (pSalDACHND); - pIrqHandle->IrqNum = DAC0_IRQ; - pIrqHandle->IrqFun = (IRQ_FUN) pSalDACMngtAdpt->pSalIrqFunc; - pIrqHandle->Priority = 5; - InterruptRegister(pIrqHandle); - InterruptEn(pIrqHandle); - break; - } -#endif -#if DAC1_USED - case DAC1_SEL: - { - pIrqHandle->Data = (uint32_t) (pSalDACHND); - pIrqHandle->IrqNum = DAC1_IRQ; - pIrqHandle->IrqFun = (IRQ_FUN) pSalDACMngtAdpt->pSalIrqFunc;; - pIrqHandle->Priority = 5; - InterruptRegister(pIrqHandle); - InterruptEn(pIrqHandle); - break; - } -#endif - default: - return _EXIT_FAILURE; - } - - - - return _EXIT_SUCCESS; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CIrqDeInit -// -// Description: -// I2C interrupt de-initialization function. -// According to the given I2C device number, the I2C interrupt will be unreigster -// from the platform and the relative interrupt handler will be cleared. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C interrupt de-initialization process. -// _EXIT_SUCCESS if the RtkI2CIrqDeInit succeeded. -// _EXIT_FAILURE if the RtkI2CIrqDeInit failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -static RTK_STATUS -RtkDACIrqDeInit( - IN PSAL_DAC_HND pSalDACHND -){ - PSAL_DAC_HND_PRIV pSalDACHNDPriv = NULL; - PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt = NULL; - PIRQ_HANDLE pIrqHandle = NULL; - - /*To Get the SAL_I2C_MNGT_ADPT Pointer*/ - pSalDACHNDPriv = CONTAINER_OF(pSalDACHND, SAL_DAC_HND_PRIV, SalDACHndPriv); - pSalDACMngtAdpt = CONTAINER_OF(pSalDACHNDPriv->ppSalDACHnd, SAL_DAC_MNGT_ADPT, pSalHndPriv); - pIrqHandle = pSalDACMngtAdpt->pIrqHnd; - - if (RtkDACIdxChk(pSalDACHND->DevNum)) - return _EXIT_FAILURE; - - InterruptUnRegister(pIrqHandle); - return _EXIT_SUCCESS; -} - -#endif - - -#if DAC_DMA_OP_TYPE -const uint16_t DACDmaChNo[10] = {GdmaNoCh ,GdmaCh0, - GdmaCh1 ,GdmaCh2, - GdmaCh3 ,GdmaCh4, - GdmaCh5 ,GdmaCh6, - GdmaCh7 ,GdmaAllCh}; - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CIrqInit -// -// Description: -// I2C interrupt initialization function. -// For I2C interrupt operation mode, I2C module MUST register itself to the platform -// by providing the interrupt handler which contains interrupt input data (arguments), -// interrupt service routine, interrupt number, interrupt priority. And then the interrupt -// should be enabled. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C interrupt initialization process. -// _EXIT_SUCCESS if the RtkI2CIrqInit succeeded. -// _EXIT_FAILURE if the RtkI2CIrqInit failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -static RTK_STATUS -RtkDACDMAInit( - IN PSAL_DAC_HND pSalDACHND -){ - PSAL_DAC_HND_PRIV pSalDACHNDPriv = NULL; - PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt = NULL; - PHAL_GDMA_ADAPTER pHALDACGdmaAdpt = NULL; - PHAL_GDMA_OP pHALDACGdmaOp = NULL; - PIRQ_HANDLE pIrqHandleDACGdma = NULL; - PSAL_DAC_DMA_USER_DEF pSalDACDmaUserDef = NULL; - - - - /* To Get the SAL_I2C_MNGT_ADPT Pointer */ - pSalDACHNDPriv = CONTAINER_OF(pSalDACHND, SAL_DAC_HND_PRIV, SalDACHndPriv); - pSalDACMngtAdpt = CONTAINER_OF(pSalDACHNDPriv->ppSalDACHnd, SAL_DAC_MNGT_ADPT, pSalHndPriv); - - pHALDACGdmaAdpt = pSalDACMngtAdpt->pHalGdmaAdp; - pHALDACGdmaOp = pSalDACMngtAdpt->pHalGdmaOp; - pIrqHandleDACGdma = pSalDACMngtAdpt->pIrqGdmaHnd; - pSalDACDmaUserDef = pSalDACHND->pDMAConf; - - if (RtkDACIdxChk(pSalDACHND->DevNum)) - return _EXIT_FAILURE; - - if (pSalDACHND->DACInType == DAC_INPUT_SINGLE_WR) - return _EXIT_SUCCESS; - - /* GDMA operation initialization */ - //HalGdmaOpInit(pHalI2CGdmaOp); - _memset((void *)pHALDACGdmaAdpt, 0, sizeof(HAL_GDMA_ADAPTER)); - pSalDACMngtAdpt->pHalGdmaOpInit(pHALDACGdmaOp); - pHALDACGdmaOp->HalGdamChInit((void*)(pHALDACGdmaAdpt)); - - - - pHALDACGdmaAdpt->GdmaIndex = pSalDACHND->DevNum; - pHALDACGdmaAdpt->GdmaCtl.IntEn = 1; - pHALDACGdmaAdpt->ChNum = pSalDACDmaUserDef->TxChNo; - - pHALDACGdmaAdpt->ChEn = DACDmaChNo[pHALDACGdmaAdpt->ChNum+1]; - pHALDACGdmaAdpt->IsrCtrl = ENABLE; - pHALDACGdmaAdpt->GdmaOnOff = ON; - - - /* GDMA initialization */ - /* Enable the whole GDMA module first */ - if (pHALDACGdmaAdpt->GdmaIndex == 0) { - ACTCK_GDMA0_CCTRL(ON); - SLPCK_GDMA0_CCTRL(ON); - GDMA0_FCTRL(ON); - } - else { - ACTCK_GDMA1_CCTRL(ON); - SLPCK_GDMA1_CCTRL(ON); - GDMA1_FCTRL(ON); - } - - if (pSalDACHND->DACInType == DAC_INPUT_DMA_ONEBLK) { - //DAC TX DMA - pHALDACGdmaAdpt->GdmaCtl.SrcTrWidth = pSalDACDmaUserDef->TxDatSrcWdth; - pHALDACGdmaAdpt->GdmaCtl.DstTrWidth = pSalDACDmaUserDef->TxDatDstWdth; - pHALDACGdmaAdpt->GdmaCtl.SrcMsize = pSalDACDmaUserDef->TxDatSrcBstSz; - pHALDACGdmaAdpt->GdmaCtl.DestMsize = pSalDACDmaUserDef->TxDatDstBstSz; - - pHALDACGdmaAdpt->GdmaCtl.Sinc = IncType; - pHALDACGdmaAdpt->GdmaCtl.Dinc = NoChange; - - pHALDACGdmaAdpt->GdmaCtl.Done = 1; - pHALDACGdmaAdpt->GdmaCtl.TtFc = 0x01; - - pHALDACGdmaAdpt->GdmaCfg.DestPer = 13; - pHALDACGdmaAdpt->GdmaCfg.ReloadSrc = 1; - - pHALDACGdmaAdpt->MuliBlockCunt = 1; - pHALDACGdmaAdpt->MaxMuliBlock = pSalDACHND->pDMAConf->MaxMultiBlk; - - pHALDACGdmaAdpt->GdmaIsrType = (BlockType|TransferType|ErrType); - - - pHALDACGdmaAdpt->TestItem = 3; - - - //pSalDACMngtAdpt->pSalDMAIrqFunc = &DACGDMAISRHandle; - } - else if (pSalDACHND->DACInType == DAC_INPUT_DMA_LLP) { - //DAC TX DMA - pHALDACGdmaAdpt->GdmaCtl.SrcTrWidth = pSalDACDmaUserDef->TxDatSrcWdth; - pHALDACGdmaAdpt->GdmaCtl.DstTrWidth = pSalDACDmaUserDef->TxDatDstWdth; - pHALDACGdmaAdpt->GdmaCtl.SrcMsize = pSalDACDmaUserDef->TxDatSrcBstSz; - pHALDACGdmaAdpt->GdmaCtl.DestMsize = pSalDACDmaUserDef->TxDatDstBstSz; - - pHALDACGdmaAdpt->GdmaCtl.Dinc = NoChange; - - pHALDACGdmaAdpt->GdmaCtl.Done = 1; - pHALDACGdmaAdpt->GdmaCtl.TtFc = 0x01; - pHALDACGdmaAdpt->GdmaCtl.LlpSrcEn = 1; - - pHALDACGdmaAdpt->GdmaCfg.DestPer = 13; - - pHALDACGdmaAdpt->GdmaIsrType = (BlockType|ErrType); - - /* Enable LLP control */ - pHALDACGdmaAdpt->Llpctrl = pSalDACDmaUserDef->LlpCtrl; - - pHALDACGdmaAdpt->MuliBlockCunt = 1; - pHALDACGdmaAdpt->MaxMuliBlock = pSalDACDmaUserDef->MaxMultiBlk; - - pHALDACGdmaAdpt->TestItem = 9; - - //pSalDACMngtAdpt->pSalDMAIrqFunc = &DACGDMALLPISRHandle; - } - - - /* GDMA interrupt register */ - pIrqHandleDACGdma->Data = (uint32_t) (pSalDACHND); - pIrqHandleDACGdma->IrqNum = GDMA0_CHANNEL0_IRQ + pHALDACGdmaAdpt->ChNum + - ((pHALDACGdmaAdpt->GdmaIndex)*6); - pIrqHandleDACGdma->IrqFun = (IRQ_FUN) pSalDACMngtAdpt->pSalDMAIrqFunc; - pIrqHandleDACGdma->Priority = 6; - InterruptRegister(pIrqHandleDACGdma); - InterruptEn(pIrqHandleDACGdma); - - - pHALDACGdmaOp->HalGdmaOnOff((void*)pHALDACGdmaAdpt); - pHALDACGdmaOp->HalGdmaChIsrEnAndDis((void*)pHALDACGdmaAdpt); - -#if 0 - /* Enable GDMA according to the DMA type */ - if (pSalDACHND->DACInType == DAC_INPUT_DMA_ONEBLK) { - pHALDACGdmaOp->HalGdmaChSeting((void*)pHALDACGdmaAdpt); - } - else if (pSalDACHND->DACInType == DAC_INPUT_DMA_LLP){ - //pHALDACGdmaOp->HalGdmaChBlockSeting((void*)(pHALDACGdmaAdpt)); - } -#endif - return _EXIT_SUCCESS; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CIrqDeInit -// -// Description: -// I2C interrupt de-initialization function. -// According to the given I2C device number, the I2C interrupt will be unreigster -// from the platform and the relative interrupt handler will be cleared. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C interrupt de-initialization process. -// _EXIT_SUCCESS if the RtkI2CIrqDeInit succeeded. -// _EXIT_FAILURE if the RtkI2CIrqDeInit failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -static RTK_STATUS -RtkDACDMADeInit( - IN PSAL_DAC_HND pSalDACHND -){ - PSAL_DAC_HND_PRIV pSalDACHNDPriv = NULL; - PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt = NULL; - - PHAL_GDMA_ADAPTER pHALDACGdmaAdpt = NULL; - PHAL_GDMA_OP pHALDACGdmaOp = NULL; - PIRQ_HANDLE pIrqHandleDACGdma = NULL; - - /*To Get the SAL_I2C_MNGT_ADPT Pointer*/ - pSalDACHNDPriv = CONTAINER_OF(pSalDACHND, SAL_DAC_HND_PRIV, SalDACHndPriv); - pSalDACMngtAdpt = CONTAINER_OF(pSalDACHNDPriv->ppSalDACHnd, SAL_DAC_MNGT_ADPT, pSalHndPriv); - - pHALDACGdmaAdpt = pSalDACMngtAdpt->pHalGdmaAdp; - pHALDACGdmaOp = pSalDACMngtAdpt->pHalGdmaOp; - pIrqHandleDACGdma = pSalDACMngtAdpt->pIrqGdmaHnd; - - if (RtkDACIdxChk(pSalDACHND->DevNum)) - return _EXIT_FAILURE; - - HalGdmaOpInit(pHALDACGdmaOp); - - pHALDACGdmaAdpt->IsrCtrl = DISABLE; - pHALDACGdmaOp->HalGdmaChIsrEnAndDis((void*)pHALDACGdmaAdpt); - pHALDACGdmaOp->HalGdmaChIsrClean((void*)pHALDACGdmaAdpt); - pHALDACGdmaOp->HalGdmaChDis((void*)pHALDACGdmaAdpt); - - InterruptUnRegister(pIrqHandleDACGdma); -#if 0 - _memset((void *)pIrqHandleDACGdma , 0, sizeof(IRQ_HANDLE)); - _memset((void *)pHALDACGdmaOp , 0, sizeof(HAL_GDMA_OP)); - _memset((void *)pHALDACGdmaAdpt , 0, sizeof(HAL_GDMA_ADAPTER)); -#endif - return _EXIT_SUCCESS; -} - -#endif - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CInit -// -// Description: -// According to the given I2C index, the related SAL_I2C_MNGT_ADPT pointer used -// for retrieving each I2C data sturcture pointer will be reversely parsed first. -// Then, initializing I2C HAL operation, initializing I2C interrupt (if needed), -// initializing I2C DMA (if needed) and initializing I2C pinmux will be done. -// User specified I2C configuration will be assigned to I2C initial data structure -// (PHAL_I2C_INIT_DAT pHalI2CInitDat). I2C HAL initialization is executed after -// all the configuration data taken. -// In the end, I2C module is enabled as a final step of the whole initialization. -// For a slave ack General Call support, an additional step may be followed after -// the above steps. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C initialization process. -// _EXIT_SUCCESS if the RtkI2CInit succeeded. -// _EXIT_FAILURE if the RtkI2CInit failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -RTK_STATUS -RtkDACInit( - IN void *Data -){ - PSAL_DAC_HND pSalDACHND = (PSAL_DAC_HND) Data; - PSAL_DAC_HND_PRIV pSalDACHNDPriv = NULL; - PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt = NULL; - //PHAL_DAC_INIT_DAT pHalDACInitDat = NULL; - PHAL_DAC_OP pHalDACOP = NULL; - - uint32_t DacTemp; - - /* To Get the SAL_I2C_MNGT_ADPT Pointer */ - pSalDACHNDPriv = CONTAINER_OF(pSalDACHND, SAL_DAC_HND_PRIV, SalDACHndPriv); - pSalDACMngtAdpt = CONTAINER_OF(pSalDACHNDPriv->ppSalDACHnd, SAL_DAC_MNGT_ADPT, pSalHndPriv); - - //pHalDACInitDat = pSalDACMngtAdpt->pHalInitDat; - pHalDACOP = pSalDACMngtAdpt->pHalOp; - - /* Check the input I2C index first */ - if (RtkDACIdxChk(pSalDACHND->DevNum)) - return _EXIT_FAILURE; - -#if 0 - /* Check the input I2C operation type */ - if (RtkI2COpTypeChk(pSalI2CHND)) - return _EXIT_FAILURE; -#endif - - /* DAC Initialize HAL Operations */ - HalDACOpInit(pHalDACOP); - - /* DAC Interrupt Initialization */ -#if DAC_INTR_OP_TYPE - RtkDACIrqInit(pSalDACHND); -#endif - - /* DAC DMA Initialization */ -#if DAC_DMA_OP_TYPE - RtkDACDMAInit(pSalDACHND); -#endif - - - /* DAC Function and Clock Enable*/ - RtkDACPinMuxInit(pSalDACHND); - - pHalDACOP->HalDACInit(pSalDACHND->pInitDat); - - #if 1 - HAL_DAC_WRITE32(pSalDACHND->DevNum, REG_DAC_INTR_CTRL, - (BIT_DAC_FIFO_FULL_EN | - BIT_DAC_FIFO_OVERFLOW_EN | - BIT_DAC_FIFO_STOP_EN | - BIT_DAC__WRITE_ERROR_EN | - BIT_DAC_DSC_OVERFLOW0_EN | - BIT_DAC_DSC_OVERFLOW1_EN)); - #else - HAL_DAC_WRITE32(pSalDACHND->DevNum, REG_DAC_INTR_CTRL, - (BIT_DAC_FIFO_FULL_EN| - BIT_DAC_FIFO_OVERFLOW_EN| - BIT_DAC_FIFO_STOP_EN| - BIT_DAC__WRITE_ERROR_EN| - BIT_DAC_DSC_OVERFLOW0_EN| - BIT_DAC_DSC_OVERFLOW1_EN)); - #endif - DBG_DAC_INFO("INTR MSK:%x\n", HAL_DAC_READ32(pSalDACHND->DevNum,REG_DAC_INTR_CTRL)); - - - - DacTemp = HAL_DAC_READ32(pSalDACHND->DevNum, REG_DAC_ANAPAR_DA1); - DacTemp |= (BIT31); - HAL_DAC_WRITE32(pSalDACHND->DevNum, REG_DAC_ANAPAR_DA1, DacTemp); - //DBG_DAC_INFO("REG_DAC_ANAPAR_DA1:%08x\n",DacTemp); - DBG_DAC_INFO("REG_DAC_ANAPAR_DA1:%08x\n",HAL_DAC_READ32(pSalDACHND->DevNum, REG_DAC_ANAPAR_DA1)); - DacTemp = HAL_DAC_READ32(pSalDACHND->DevNum, REG_DAC_CTRL); - DacTemp |= BIT3; - HAL_DAC_WRITE32(pSalDACHND->DevNum, REG_DAC_CTRL, DacTemp); - DBG_DAC_INFO("REG_DAC_CTRL:%08x\n",DacTemp); - - pSalDACHND->pInitDat->DACEn = DAC_ENABLE; - pHalDACOP->HalDACEnable(pSalDACHND->pInitDat); - - /* DAC Device Status Update */ - pSalDACHND->DevSts = DAC_STS_IDLE; - - return _EXIT_SUCCESS; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CInit -// -// Description: -// According to the given I2C index, the related SAL_I2C_MNGT_ADPT pointer used -// for retrieving each I2C data sturcture pointer will be reversely parsed first. -// Then, initializing I2C HAL operation, initializing I2C interrupt (if needed), -// initializing I2C DMA (if needed) and initializing I2C pinmux will be done. -// User specified I2C configuration will be assigned to I2C initial data structure -// (PHAL_I2C_INIT_DAT pHalI2CInitDat). I2C HAL initialization is executed after -// all the configuration data taken. -// In the end, I2C module is enabled as a final step of the whole initialization. -// For a slave ack General Call support, an additional step may be followed after -// the above steps. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C initialization process. -// _EXIT_SUCCESS if the RtkI2CInit succeeded. -// _EXIT_FAILURE if the RtkI2CInit failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -RTK_STATUS -RtkDACDeInit( - IN void *Data -){ - PSAL_DAC_HND pSalDACHND = (PSAL_DAC_HND) Data; - PSAL_DAC_HND_PRIV pSalDACHNDPriv = NULL; - PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt = NULL; - PHAL_DAC_INIT_DAT pHalDACInitDat = NULL; - PHAL_DAC_OP pHalDACOP = NULL; - - /* To Get the SAL_DAC_MNGT_ADPT Pointer */ - pSalDACHNDPriv = CONTAINER_OF(pSalDACHND, SAL_DAC_HND_PRIV, SalDACHndPriv); - pSalDACMngtAdpt = CONTAINER_OF(pSalDACHNDPriv->ppSalDACHnd, SAL_DAC_MNGT_ADPT, pSalHndPriv); - - pHalDACInitDat = pSalDACMngtAdpt->pHalInitDat; - pHalDACOP = pSalDACMngtAdpt->pHalOp; - - /* Check the input DAC index first */ - if (RtkDACIdxChk(pSalDACHND->DevNum)) - return _EXIT_FAILURE; - - { - /* DAC Initialize HAL Operations */ - HalDACOpInit(pHalDACOP); - - /* DAC Interrupt Initialization */ -#if DAC_INTR_OP_TYPE - RtkDACIrqDeInit(pSalDACHND); -#endif - - /* DAC DMA Initialization */ -#if DAC_DMA_OP_TYPE - RtkDACDMADeInit(pSalDACHND); -#endif - - pHalDACInitDat->DACEn = DAC_DISABLE; - pHalDACOP->HalDACEnable(pHalDACInitDat); - pHalDACOP->HalDACDeInit(pHalDACInitDat); - - /* DAC Function and Clock Enable*/ - RtkDACPinMuxDeInit(pSalDACHND); - } - - return _EXIT_SUCCESS; -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CInit -// -// Description: -// According to the given I2C index, the related SAL_I2C_MNGT_ADPT pointer used -// for retrieving each I2C data sturcture pointer will be reversely parsed first. -// Then, initializing I2C HAL operation, initializing I2C interrupt (if needed), -// initializing I2C DMA (if needed) and initializing I2C pinmux will be done. -// User specified I2C configuration will be assigned to I2C initial data structure -// (PHAL_I2C_INIT_DAT pHalI2CInitDat). I2C HAL initialization is executed after -// all the configuration data taken. -// In the end, I2C module is enabled as a final step of the whole initialization. -// For a slave ack General Call support, an additional step may be followed after -// the above steps. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C initialization process. -// _EXIT_SUCCESS if the RtkI2CInit succeeded. -// _EXIT_FAILURE if the RtkI2CInit failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -RTK_STATUS -RtkDACSend( - IN void *Data -){ - PSAL_DAC_HND pSalDACHND = (PSAL_DAC_HND) Data; - PSAL_DAC_HND_PRIV pSalDACHNDPriv = NULL; - PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt = NULL; - PHAL_GDMA_ADAPTER pHALDACGdmaAdpt = NULL; - PHAL_GDMA_OP pHALDACGdmaOp = NULL; - PSAL_DAC_DMA_USER_DEF pSalDACDmaUserDef = NULL; - //PIRQ_HANDLE pIrqHandleDACGdma = NULL; - - /* To Get the SAL_I2C_MNGT_ADPT Pointer */ - pSalDACHNDPriv = CONTAINER_OF(pSalDACHND, SAL_DAC_HND_PRIV, SalDACHndPriv); - pSalDACMngtAdpt = CONTAINER_OF(pSalDACHNDPriv->ppSalDACHnd, SAL_DAC_MNGT_ADPT, pSalHndPriv); - - pHALDACGdmaAdpt = pSalDACMngtAdpt->pHalGdmaAdp; - pHALDACGdmaOp = pSalDACMngtAdpt->pHalGdmaOp; - pSalDACDmaUserDef = pSalDACMngtAdpt->pDMAConf; - - switch (pSalDACHND->DACInType) { - case DAC_INPUT_SINGLE_WR: - { - break; - } - case DAC_INPUT_DMA_ONEBLK: - { - HalGdmaOpInit(pHALDACGdmaOp); - - pHALDACGdmaAdpt->GdmaCtl.BlockSize = pSalDACHND->pTXBuf->DataLen; - pHALDACGdmaAdpt->ChSar = (uint32_t)pSalDACHND->pTXBuf->pDataBuf; - pHALDACGdmaAdpt->ChDar = (uint32_t)(DAC_REG_BASE+(pSalDACHND->DevNum*0x800)); - - DBG_DAC_INFO("src addr:%x\n", pHALDACGdmaAdpt->ChSar); - DBG_DAC_INFO("dst addr:%x\n", pHALDACGdmaAdpt->ChDar); - pHALDACGdmaOp->HalGdmaChSeting(pHALDACGdmaAdpt); - - pHALDACGdmaOp->HalGdmaChEn(pHALDACGdmaAdpt); - break; - } - case DAC_INPUT_DMA_LLP: - { - pHALDACGdmaAdpt->Rsvd4to7 = 1; - pHALDACGdmaAdpt->pLlix = (struct GDMA_CH_LLI *)pSalDACDmaUserDef->pLlix; - pHALDACGdmaAdpt->pBlockSizeList = (struct BLOCK_SIZE_LIST *)pSalDACDmaUserDef->pBlockSizeList; - pHALDACGdmaAdpt->ChDar = (uint32_t)(DAC_REG_BASE+(pSalDACHND->DevNum*0x800)); - pHALDACGdmaOp->HalGdmaChBlockSeting(pHALDACGdmaAdpt); - - pHALDACGdmaOp->HalGdmaChEn(pHALDACGdmaAdpt); - break; - } - - default: - return _EXIT_FAILURE; - } - - - return _EXIT_SUCCESS; -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CGetSalHnd -// -// Description: -// Allocation of lower layer memory spaces will be done by invoking RtkI2CGetMngtAdpt -// in this function and return a SAL_I2C_HND pointer to upper layer. -// According to the given I2C index, RtkI2CGetMngtAdpt will allocate all the memory -// space such as SAL_I2C_HND, HAL_I2C_INIT_DAT, SAL_I2C_USER_CB etc. -// -// -// Arguments: -// [in] uint8_t I2CIdx - -// I2C Index -// -// Return: -// PSAL_I2C_HND -// A pointer to SAL_I2C_HND which is allocated in the lower layer. -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -PSAL_DAC_HND -RtkDACGetSalHnd( - IN uint8_t DACIdx -){ - PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt = NULL; - PSAL_DAC_HND pSalDACHND = NULL; - - /* Check the user define setting and the given index */ - if (RtkDACIdxChk(DACIdx)) { - return (PSAL_DAC_HND)NULL; - } - - /* Invoke RtkI2CGetMngtAdpt to get the I2C SAL management adapter pointer */ - pSalDACMngtAdpt = RtkDACGetMngtAdpt(DACIdx); - - /* Assign the private SAL handle to public SAL handle */ - pSalDACHND = &(pSalDACMngtAdpt->pSalHndPriv->SalDACHndPriv); - - /* Assign the internal HAL initial data pointer to the SAL handle */ - pSalDACHND->pInitDat = pSalDACMngtAdpt->pHalInitDat; - - /* Assign the internal user callback pointer to the SAL handle */ - pSalDACHND->pUserCB = pSalDACMngtAdpt->pUserCB; - - /* Assign the internal user DMA config to the SAL handle */ - pSalDACHND->pDMAConf = pSalDACMngtAdpt->pDMAConf; - - return &(pSalDACMngtAdpt->pSalHndPriv->SalDACHndPriv); -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CGetSalHnd -// -// Description: -// Allocation of lower layer memory spaces will be done by invoking RtkI2CGetMngtAdpt -// in this function and return a SAL_I2C_HND pointer to upper layer. -// According to the given I2C index, RtkI2CGetMngtAdpt will allocate all the memory -// space such as SAL_I2C_HND, HAL_I2C_INIT_DAT, SAL_I2C_USER_CB etc. -// -// -// Arguments: -// [in] uint8_t I2CIdx - -// I2C Index -// -// Return: -// PSAL_I2C_HND -// A pointer to SAL_I2C_HND which is allocated in the lower layer. -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -RTK_STATUS -RtkDACFreeSalHnd( - IN PSAL_DAC_HND pSalDACHND -){ - PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt = NULL; - PSAL_DAC_HND_PRIV pSalDACHNDPriv = NULL; - - /* To get the SAL_DAC_MNGT_ADPT pointer */ - pSalDACHNDPriv = CONTAINER_OF(pSalDACHND, SAL_DAC_HND_PRIV, SalDACHndPriv); - pSalDACMngtAdpt = CONTAINER_OF(pSalDACHNDPriv->ppSalDACHnd, SAL_DAC_MNGT_ADPT, pSalHndPriv); - - /* Invoke RtkDACFreeMngtAdpt to free all the lower layer memory space */ - return (RtkDACFreeMngtAdpt(pSalDACMngtAdpt)); - -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CLoadDefault -// -// Description: -// Accrording the given I2C index, the default I2C configuration is done. -// -// -// Arguments: -// [in] PSAL_I2C_HND pSalI2CHND - -// SAL I2C handle -// -// Return: -// The status of the loading I2C default configuration. -// _EXIT_SUCCESS if the RtkI2CLoadDefault succeeded. -// _EXIT_FAILURE if the RtkI2CLoadDefault failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -RTK_STATUS -RtkDACLoadDefault( - IN void *Data -){ - PSAL_DAC_HND pSalDACHND = (PSAL_DAC_HND) Data; - - /* Check the input DAC index first */ - if (RtkDACIdxChk(pSalDACHND->DevNum)) - return _EXIT_FAILURE; - - /* Load SAL handle default value */ - pSalDACHND->PinMux = 0; - pSalDACHND->OpType = DAC_POLL_TYPE; - pSalDACHND->DevSts = DAC_STS_UNINITIAL; - pSalDACHND->DACExd = 0; - pSalDACHND->ErrType = (uint32_t)NULL; - - /* Load HAL initial data structure default value */ - pSalDACHND->pInitDat->DACIdx = pSalDACHND->DevNum; - pSalDACHND->pInitDat->DACEn = DAC_DISABLE; - pSalDACHND->pInitDat->DACDataRate = DAC_DATA_RATE_250K; - pSalDACHND->pInitDat->DACEndian = DAC_DATA_ENDIAN_LITTLE; - pSalDACHND->pInitDat->DACBurstSz = 7; - pSalDACHND->pInitDat->DACDbgSel = DAC_DBG_SEL_DISABLE; - pSalDACHND->pInitDat->DACDscDbgSel = DAC_DSC_DBG_SEL_DISABLE; - pSalDACHND->pInitDat->DACBPDsc = DAC_BYPASS_DSC_SEL_DISABLE; - pSalDACHND->pInitDat->DACDeltaSig = 0; - pSalDACHND->pInitDat->DACAnaCtrl0 = 0; - pSalDACHND->pInitDat->DACAnaCtrl1 = 0; - pSalDACHND->pInitDat->DACIntrMSK = DAC_FEATURE_DISABLED; - - /* Load DAC DMA user configuration default value */ - pSalDACHND->pDMAConf->MaxMultiBlk = 5000; - pSalDACHND->pDMAConf->TxDatSrcWdth = TrWidthFourBytes; - pSalDACHND->pDMAConf->TxDatSrcBstSz = MsizeFour; - pSalDACHND->pDMAConf->TxDatDstWdth = TrWidthFourBytes; - pSalDACHND->pDMAConf->TxDatDstBstSz = MsizeFour; - pSalDACHND->pDMAConf->TxChNo = 4; - - return _EXIT_SUCCESS; -} - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_dac.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_dac.h deleted file mode 100644 index 663503a..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_dac.h +++ /dev/null @@ -1,314 +0,0 @@ -//====================================================== -// Routines to access hardware -// -// Copyright (c) 2013 Realtek Semiconductor Corp. -// -// This module is a confidential and proprietary property of RealTek and -// possession or use of this module requires written permission of RealTek. -//====================================================== -#ifndef _HAL_DAC_H_ -#define _HAL_DAC_H_ - -#include "rtl8195a.h" -#include "rtl8195a_dac.h" -#include "hal_api.h" -#include "hal_gdma.h" - -//================ DAC Configuration ========================= -#define DAC_INTR_OP_TYPE 1 -#define DAC_DMA_OP_TYPE 1 - -// DAC SAL management macros -#define SAL_DAC_USER_CB_NUM (sizeof(SAL_DAC_USER_CB) / sizeof(PSAL_DAC_USERCB_ADPT)) - -// DAC SAL used module. -// Please set the DAC module flag to 1 to enable the related DAC module functions. -#define DAC0_USED 1 -#define DAC1_USED 1 - - -//================ Debug MSG Definition ======================= -#define DAC_PREFIX "RTL8195A[dac]: " -#define DAC_PREFIX_LVL " [DAC_DBG]: " - -typedef enum _DAC_DBG_LVL_ { - HAL_DAC_LVL = 0x00, - SAL_DAC_LVL = 0x02, - VERI_DAC_LVL = 0x04, -}DAC_DBG_LVL,*PDAC_DBG_LVL; - -#if CONFIG_DEBUG_LOG > 0 -#ifdef CONFIG_DEBUG_LOG_DAC_HAL - - #define DBG_8195A_DAC(...) do{ \ - _DbgDump(DAC_PREFIX __VA_ARGS__);\ - }while(0) - - - #define DACDBGLVL 0xFF - #define DBG_8195A_DAC_LVL(LVL,...) do{\ - if (LVL&DACDBGLVL){\ - _DbgDump(DAC_PREFIX_LVL __VA_ARGS__);\ - }\ - }while(0) -#else - #define DBG_DAC_LOG_PERD 100 - #define DBG_8195A_DAC(...) - #define DBG_8195A_DAC_LVL(...) -#endif -#endif - - -//================ DAC HAL Related Enumeration ================== -// DAC Module Selection -typedef enum _DAC_MODULE_SEL_ { - DAC0_SEL = 0x0, - DAC1_SEL = 0x1, -}DAC_MODULE_SEL,*PDAC_MODULE_SEL; - -// DAC module status -typedef enum _DAC_MODULE_STATUS_ { - DAC_DISABLE = 0x0, - DAC_ENABLE = 0x1, -}DAC_MODULE_STATUS, *PDAC_MODULE_STATUS; - -// DAC Data Rate -typedef enum _DAC_DATA_RATE_ { - DAC_DATA_RATE_10K = 0x0, - DAC_DATA_RATE_250K = 0x1, -}DAC_DATA_RATE,*PDAC_DATA_RATE; - -// DAC Data Endian -typedef enum _DAC_DATA_ENDIAN_ { - DAC_DATA_ENDIAN_LITTLE = 0x0, - DAC_DATA_ENDIAN_BIG = 0x1, -}DAC_DATA_ENDIAN,*PDAC_DATA_ENDIAN; - -// DAC Debug Select -typedef enum _DAC_DEBUG_SEL_ { - DAC_DBG_SEL_DISABLE = 0x0, - DAC_DBG_SEL_ENABLE = 0x1, -}DAC_DEBUG_SEL,*PDAC_DEBUG_SEL; - -// DAC Dsc Debug Select -typedef enum _DAC_DSC_DEBUG_SEL_ { - DAC_DSC_DBG_SEL_DISABLE = 0x0, - DAC_DSC_DBG_SEL_ENABLE = 0x1, -}DAC_DSC_DEBUG_SEL,*PDAC_DSC_DEBUG_SEL; - - -// DAC Bypass Dsc Debug Select -typedef enum _DAC_BYPASS_DSC_SEL_ { - DAC_BYPASS_DSC_SEL_DISABLE = 0x0, - DAC_BYPASS_DSC_SEL_ENABLE = 0x1, -}DAC_BYPASS_DSC_SEL,*PDAC_BYPASS_DSC_SEL; - -// DAC feature status -typedef enum _DAC_FEATURE_STATUS_{ - DAC_FEATURE_DISABLED = 0, - DAC_FEATURE_ENABLED = 1, -}DAC_FEATURE_STATUS,*PDAC_FEATURE_STATUS; - -// DAC operation type -typedef enum _DAC_OP_TYPE_ { - DAC_POLL_TYPE = 0x0, - DAC_DMA_TYPE = 0x1, - DAC_INTR_TYPE = 0x2, -}DAC_OP_TYPE, *PDAC_OP_TYPE; - -// DAC device status -typedef enum _DAC_Device_STATUS_ { - DAC_STS_UNINITIAL = 0x00, - DAC_STS_INITIALIZED = 0x01, - DAC_STS_IDLE = 0x02, - - DAC_STS_TX_READY = 0x03, - DAC_STS_TX_ING = 0x04, - - DAC_STS_RX_READY = 0x05, - DAC_STS_RX_ING = 0x06, - - DAC_STS_ERROR = 0x07, -}DAC_Device_STATUS, *PDAC_Device_STATUS; - -//DAC device error type -typedef enum _DAC_ERR_TYPE_ { - DAC_ERR_FIFO_OVER = 0x04, //DAC FIFO overflow. - DAC_ERR_FIFO_STOP = 0x08, //DAC FIFO is completely empty, and it will be stopped automatically. - DAC_ERR_FIFO_WRFAIL = 0x10, //When DAC is NOT enabled, a write operation attempts to access DAC register. - DAC_ERR_FIFO_DSC_OVER0 = 0x20, - DAC_ERR_FIFO_DSC_OVER1 = 0x40, -}DAC_ERR_TYPE, *PDAC_ERR_TYPE; - -// DAC data input method -typedef enum _DAC_INPUT_TYPE_{ - DAC_INPUT_SINGLE_WR = 0x1, //DAC input by using single register write - DAC_INPUT_DMA_ONEBLK = 0x2, //DAC input by using single DMA block - DAC_INPUT_DMA_LLP = 0x3, //DAC input by using DMA linked list mode -}DAC_INPUT_TYPE,*PDAC_INPUT_TYPE; - - - - -//====================================================== -// DAC HAL initial data structure -typedef struct _HAL_DAC_INIT_DAT_ { - uint8_t DACIdx; //DAC index used - uint8_t DACEn; //DAC module enable - uint8_t DACDataRate; //DAC data rate, 1'b0:10KHz, 1'b1:250KHz - uint8_t DACEndian; //DAC endian selection, - //but actually it's for 32-bit DAC data swap control - //1'b0: no swap, - //1'b1: swap the upper 16-bit and the lower 16-bit - uint8_t DACFilterSet; //DAC filter settle - uint8_t DACBurstSz; //DAC burst size - uint8_t DACDbgSel; //DAC debug sel - uint8_t DACDscDbgSel; //DAC debug dsc sel - - uint8_t DACBPDsc; //DAC bypass delta sigma for loopback - uint8_t DACDeltaSig; //DAC bypass value of delta sigma - uint16_t RSVD1; - - - - uint32_t *DACData; //DAC data pointer - uint32_t DACPWCtrl; //DAC0 and DAC1 power control - uint32_t DACAnaCtrl0; //DAC anapar_da control 0 - uint32_t DACAnaCtrl1; //DAC anapar_da control 1 - uint32_t DACIntrMSK; //DAC Interrupt Mask -}HAL_DAC_INIT_DAT,*PHAL_DAC_INIT_DAT; - -// DAC HAL Operations -typedef struct _HAL_DAC_OP_ { - RTK_STATUS (*HalDACInit) (void *Data); //HAL DAC initialization - RTK_STATUS (*HalDACDeInit) (void *Data); //HAL DAC de-initialization - RTK_STATUS (*HalDACEnable) (void *Data); //HAL DAC de-initialization - uint8_t (*HalDACSend) (void *Data); //HAL DAC receive - RTK_STATUS (*HalDACIntrCtrl) (void *Data); //HAL DAC interrupt control - uint32_t (*HalDACReadReg) (void *Data, uint8_t DACReg);//HAL DAC read register -}HAL_DAC_OP, *PHAL_DAC_OP; - -// DAC user callback adapter -typedef struct _SAL_DAC_USERCB_ADPT_ { - void (*USERCB) (void *Data); - uint32_t USERData; -}SAL_DAC_USERCB_ADPT, *PSAL_DAC_USERCB_ADPT; - -// DAC user callback structure -typedef struct _SAL_DAC_USER_CB_ { - PSAL_DAC_USERCB_ADPT pTXCB; //DAC Transmit Callback - PSAL_DAC_USERCB_ADPT pTXCCB; //DAC Transmit Complete Callback - PSAL_DAC_USERCB_ADPT pRXCB; //DAC Receive Callback - PSAL_DAC_USERCB_ADPT pRXCCB; //DAC Receive Complete Callback - PSAL_DAC_USERCB_ADPT pRDREQCB; //DAC Read Request Callback - PSAL_DAC_USERCB_ADPT pERRCB; //DAC Error Callback - PSAL_DAC_USERCB_ADPT pDMATXCB; //DAC DMA Transmit Callback - PSAL_DAC_USERCB_ADPT pDMATXCCB; //DAC DMA Transmit Complete Callback - PSAL_DAC_USERCB_ADPT pDMARXCB; //DAC DMA Receive Callback - PSAL_DAC_USERCB_ADPT pDMARXCCB; //DAC DMA Receive Complete Callback -}SAL_DAC_USER_CB, *PSAL_DAC_USER_CB; - -// DAC Transmit Buffer -typedef struct _SAL_DAC_TRANSFER_BUF_ { - uint32_t DataLen; //DAC Transmfer Length - uint32_t *pDataBuf; //DAC Transfer Buffer Pointer - uint32_t RSVD; // -}SAL_DAC_TRANSFER_BUF,*PSAL_DAC_TRANSFER_BUF; - -typedef struct _SAL_DAC_DMA_USER_DEF_ { - - uint8_t TxDatSrcWdth; - uint8_t TxDatDstWdth; - uint8_t TxDatSrcBstSz; - uint8_t TxDatDstBstSz; - - uint8_t TxChNo; - uint8_t LlpCtrl; - uint16_t RSVD0; - - uint32_t MaxMultiBlk; - uint32_t pLlix; - uint32_t pBlockSizeList; -}SAL_DAC_DMA_USER_DEF, *PSAL_DAC_DMA_USER_DEF; - -// Software API Level DAC Handler -typedef struct _SAL_DAC_HND_ { - uint8_t DevNum; //DAC device number - uint8_t PinMux; //DAC pin mux seletion - uint8_t OpType; //DAC operation type selection - volatile uint8_t DevSts; //DAC device status - - uint8_t DACInType; //DAC input type - uint8_t RSVD0; - uint16_t RSVD1; - - uint32_t DACExd; //DAC extended options: - //bit 0: example - //bit 31~bit 1: Reserved - uint32_t ErrType; // - uint32_t TimeOut; //DAC IO Timeout count - - PHAL_DAC_INIT_DAT pInitDat; //Pointer to DAC initial data struct - PSAL_DAC_TRANSFER_BUF pTXBuf; //Pointer to DAC TX buffer - PSAL_DAC_USER_CB pUserCB; //Pointer to DAC User Callback - PSAL_DAC_DMA_USER_DEF pDMAConf; //Pointer to DAC User Define DMA Config -}SAL_DAC_HND, *PSAL_DAC_HND; - -// DAC SAL handle private -typedef struct _SAL_DAC_HND_PRIV_ { - void **ppSalDACHnd; //Pointer to SAL_DAC_HND pointer - SAL_DAC_HND SalDACHndPriv; //Private SAL_DAC_HND -}SAL_DAC_HND_PRIV, *PSAL_DAC_HND_PRIV; - -//DAC SAL management adapter -typedef struct _SAL_DAC_MNGT_ADPT_ { - PSAL_DAC_HND_PRIV pSalHndPriv; //Pointer to SAL_DAC_HND - PHAL_DAC_INIT_DAT pHalInitDat; //Pointer to HAL DAC initial data( HAL_I2C_INIT_DAT ) - PHAL_DAC_OP pHalOp; //Pointer to HAL DAC operation( HAL_DAC_OP ) - void (*pHalOpInit)(void*); //Pointer to HAL DAC initialize function - PIRQ_HANDLE pIrqHnd; //Pointer to IRQ handler in SAL layer( IRQ_HANDLE ) - PSAL_DAC_USER_CB pUserCB; //Pointer to SAL user callbacks (SAL_DAC_USER_CB ) - void (*pSalIrqFunc)(void*); //Used for SAL DAC interrupt function - - PSAL_DAC_DMA_USER_DEF pDMAConf; //Pointer to DAC User Define DMA config - PHAL_GDMA_ADAPTER pHalGdmaAdp; - PHAL_GDMA_OP pHalGdmaOp; - void (*pHalGdmaOpInit)(void*); //Pointer to HAL DAC initialize function - PIRQ_HANDLE pIrqGdmaHnd; - void (*pSalDMAIrqFunc)(void*); //Used for SAL DAC interrupt function -}SAL_DAC_MNGT_ADPT, *PSAL_DAC_MNGT_ADPT; - - -//================ DAC HAL Function Prototype =================== -// DAC HAL inline function -// For checking DAC input index valid or not -static inline RTK_STATUS -RtkDACIdxChk( - IN uint8_t DACIdx -) -{ - (void) DACIdx; -#if !DAC0_USED - if (DACIdx == DAC0_SEL) - return _EXIT_FAILURE; -#endif - -#if !DAC1_USED - if (DACIdx == DAC1_SEL) - return _EXIT_FAILURE; -#endif - - return _EXIT_SUCCESS; -} - -void HalDACOpInit(IN void *Data); -RTK_STATUS RtkDACLoadDefault(IN void *Data); -RTK_STATUS RtkDACInit(IN void *Data); -RTK_STATUS RtkDACDeInit(IN void *Data); -RTK_STATUS RtkDACSend(IN void *Data); -PSAL_DAC_HND RtkDACGetSalHnd(IN uint8_t DACIdx); -RTK_STATUS RtkDACFreeSalHnd(IN PSAL_DAC_HND pSalDACHND); -PSAL_DAC_MNGT_ADPT RtkDACGetMngtAdpt(IN uint8_t DACIdx); -RTK_STATUS RtkDACFreeMngtAdpt(IN PSAL_DAC_MNGT_ADPT pSalDACMngtAdpt); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_diag.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_diag.h deleted file mode 100644 index 8eb0f5a..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_diag.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_DIAG_H_ -#define _HAL_DIAG_H_ - - -//Register offset -#define UART_REV_BUF_OFF 0x00 -#define UART_TRAN_HOLD_OFF 0x00 -#define UART_DLH_OFF 0x04 -#define UART_DLL_OFF 0x00 -#define UART_INTERRUPT_EN_REG_OFF 0x04 -#define UART_INTERRUPT_IDEN_REG_OFF 0x08 -#define UART_FIFO_CTL_REG_OFF 0x08 -#define UART_LINE_CTL_REG_OFF 0x0c -#define UART_MODEM_CTL_REG_OFF 0x10 -#define UART_LINE_STATUS_REG_OFF 0x14 -#define UART_MODEM_STATUS_REG_OFF 0x18 -#define UART_FIFO_ACCESS_REG_OFF 0x70 -#define UART_STATUS_REG_OFF 0x7c -#define UART_TFL_OFF 0x80 -#define UART_RFL_OFF 0x84 - - -//Buad rate -#define UART_BAUD_RATE_2400 2400 -#define UART_BAUD_RATE_4800 4800 -#define UART_BAUD_RATE_9600 9600 -#define UART_BAUD_RATE_19200 19200 -#define UART_BAUD_RATE_38400 38400 -#define UART_BAUD_RATE_57600 57600 -#define UART_BAUD_RATE_115200 115200 -#define UART_BAUD_RATE_921600 921600 -#define UART_BAUD_RATE_1152000 1152000 - -#define UART_PARITY_ENABLE 0x08 -#define UART_PARITY_DISABLE 0 - -#define UART_DATA_LEN_5BIT 0x0 -#define UART_DATA_LEN_6BIT 0x1 -#define UART_DATA_LEN_7BIT 0x2 -#define UART_DATA_LEN_8BIT 0x3 - -#define UART_STOP_1BIT 0x0 -#define UART_STOP_2BIT 0x4 - -#ifndef DEFAULT_BAUDRATE -#define DEFAULT_BAUDRATE UART_BAUD_RATE_38400 -#endif - -#define HAL_UART_READ32(addr) HAL_READ32(LOG_UART_REG_BASE, addr) -#define HAL_UART_WRITE32(addr, value) HAL_WRITE32(LOG_UART_REG_BASE, addr, value) -#define HAL_UART_READ16(addr) HAL_READ16(LOG_UART_REG_BASE, addr) -#define HAL_UART_WRITE16(addr, value) HAL_WRITE16(LOG_UART_REG_BASE, addr, value) -#define HAL_UART_READ8(addr) HAL_READ8(LOG_UART_REG_BASE, addr) -#define HAL_UART_WRITE8(addr, value) HAL_WRITE8(LOG_UART_REG_BASE, addr, value) - -typedef struct _LOG_UART_ADAPTER_ { - uint32_t BaudRate; - uint32_t FIFOControl; - uint32_t IntEnReg; - uint8_t Parity; - uint8_t Stop; - uint8_t DataLength; -}LOG_UART_ADAPTER, *PLOG_UART_ADAPTER; - -typedef struct _COMMAND_TABLE_ { - const char * cmd; - uint16_t ArgvCnt; - void (*func)(int argc, char * argv[]); - const char * msg; -}COMMAND_TABLE, *PCOMMAND_TABLE; - -//void -//HalLogUartHandle(void); - - -extern _LONG_CALL_ROM_ uint32_t -HalLogUartInit( - IN LOG_UART_ADAPTER UartAdapter - ); - - -extern _LONG_CALL_ROM_ void -HalSerialPutcRtl8195a( - IN uint8_t c - ); - -extern _LONG_CALL_ROM_ uint8_t -HalSerialGetcRtl8195a( - IN BOOL PullMode - ); - -extern _LONG_CALL_ROM_ uint32_t -HalSerialGetIsrEnRegRtl8195a(void); - -extern _LONG_CALL_ROM_ void -HalSerialSetIrqEnRegRtl8195a ( - IN uint32_t SetValue -); - - -#endif//_HAL_DIAG_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_efuse.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_efuse.c deleted file mode 100644 index 9c5bfb7..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_efuse.c +++ /dev/null @@ -1,337 +0,0 @@ -/* -* Disassemble hal_efuse.o pvvx 10.2016 -*/ -#include "rtl8195a.h" -#ifdef CONFIG_EFUSE_EN -#include "hal_efuse.h" - -//#define NO_ROM_API - -#define EFUSE_WRITE_ENABLE 0 - -#define EFUSE_SECTION_SIZE (1<<7) // 128 bytes -#define EFUSE_BUF_MAX_LEN (1<<5) // 32 bytes -#define OTP_START_ADDR EFUSE_SECTION_SIZE -#define OTP_BUF_MAX_LEN (1<<5) // 32 bytes -#define EFUSE_SECTION_CODE 11 - -#ifdef NO_ROM_API -//====================================================== Start libs ROM efuse -//----- HalEFUSEPowerSwitch8195AROM addr 0x6561 -_LONG_CALL_ROM_ int HalEFUSEPowerSwitch8195AROM(IN unsigned char bWrite, IN unsigned char PwrState, IN unsigned char L25OutVoltage) { - if (PwrState == 1) { - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_EEPROM_CTRL0, (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EEPROM_CTRL0) & 0xFFFFFF) | 0x69000000); // EFUSE_UNLOCK - if (!(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_FUNC_EN) & BIT_SYS_FEN_EELDR)) // REG_SYS_FUNC_EN BIT_SYS_FEN_EELDR ? - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_FUNC_EN, HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_FUNC_EN) | BIT_SYS_FEN_EELDR); - if (!(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL0) & BIT_SYSON_CK_EELDR_EN)) // REG_SYS_CLK_CTRL0 BIT_SYSON_CK_EELDR_EN ? - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL0, HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL0) | BIT_SYSON_CK_EELDR_EN); - if (!(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1) & BIT_PESOC_EELDR_CK_SEL)) // REG_SYS_CLK_CTRL1 BIT_PESOC_EELDR_CK_SEL ? - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1, HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1) | BIT_PESOC_EELDR_CK_SEL); - if (bWrite == 1) - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_REGU_CTRL0, (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_REGU_CTRL0) & 0xFFFFF0FF) | BIT_SYS_REGU_LDO25E_EN | BIT_SYS_REGU_LDO25E_ADJ(L25OutVoltage)); - } - else - { - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_EEPROM_CTRL0, HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EEPROM_CTRL0) & 0xFFFFFF); // EFUSE_UNLOCK - if ( bWrite == 1 ) - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_REGU_CTRL0, (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_REGU_CTRL0) & (~BIT_SYS_REGU_LDO25E_EN))); - } - return bWrite; -} - -//----- HALEFUSEOneByteReadROM addr 0x6561 -_LONG_CALL_ROM_ int HALEFUSEOneByteReadROM(IN unsigned int CtrlSetting, IN unsigned short Addr, OUT unsigned char *Data, IN unsigned char L25OutVoltage) -{ -int i = 0, result = 0; - if ( (Addr <= 0xFF) || ((CtrlSetting & 0xFFFF) == 0x26AE) ) { - HalEFUSEPowerSwitch8195AROM(1, 1, L25OutVoltage); - - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_TEST, HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_TEST) & (~BIT_SYS_EF_FORCE_PGMEN)); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL, - (CtrlSetting & (~(BIT_SYS_EF_RWFLAG | (BIT_MASK_SYS_EF_ADDR << BIT_SHIFT_SYS_EF_ADDR) | (BIT_MASK_SYS_EF_DATA << BIT_SHIFT_SYS_EF_DATA)))) - | BIT_SYS_EF_ADDR(Addr)); - while(1) { - if(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL) & BIT_SYS_EF_RWFLAG) { - *Data = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL); - result = 1; - break; - } - HalDelayUs(1000); - if (i++ >= 100) { - *Data = -1; - break; - }; - }; - HalEFUSEPowerSwitch8195AROM(1, 0, L25OutVoltage); - } - else *Data = -1; - return result; -} - -//----- HALEFUSEOneByteWriteROM addr 0x6699 -_LONG_CALL_ROM_ int HALEFUSEOneByteWriteROM(IN unsigned int CtrlSetting, IN unsigned short Addr, IN unsigned char Data, IN unsigned char L25OutVoltage) -{ -int i = 0, result = 0; - if ( (Addr <= 0xFF) || ((CtrlSetting & 0xFFFF) == 0x26AE) ) { - HalEFUSEPowerSwitch8195AROM(1, 1, L25OutVoltage); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_TEST, HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_TEST) | BIT_SYS_EF_FORCE_PGMEN); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL, Data | BIT_SYS_EF_RWFLAG | BIT_SYS_EF_ADDR(Addr) | BIT_SYS_EF_DATA(Data) | - (CtrlSetting & (~(BIT_SYS_EF_RWFLAG | (BIT_MASK_SYS_EF_ADDR << BIT_SHIFT_SYS_EF_ADDR) | (BIT_MASK_SYS_EF_DATA << BIT_SHIFT_SYS_EF_DATA))))); - while(1) { - HalDelayUs(1000); - if(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL) & BIT_SYS_EF_RWFLAG) break; - if (i++ >= 100) { - result = 1; - break; - }; - }; - HalEFUSEPowerSwitch8195AROM(1, 0, L25OutVoltage); - } - return result; -} -//====================================================== End libs ROM efuse -#endif - -//----- HALOTPOneByteReadRAM -int HALOTPOneByteReadRAM(IN unsigned int CtrlSetting, IN unsigned short Addr, OUT unsigned char *Data, IN unsigned char L25OutVoltage) -{ - int result; - if ( (unsigned int)(Addr - EFUSE_SECTION_SIZE) > OTP_BUF_MAX_LEN - 1 ) - result = 1; - else - result = HALEFUSEOneByteReadROM(CtrlSetting, Addr, Data, L25OutVoltage); - return result; -} - -//----- HALOTPOneByteWriteRAM -int HALOTPOneByteWriteRAM(IN unsigned int CtrlSetting, IN unsigned short Addr, IN unsigned char Data, IN unsigned char L25OutVoltage) -{ -#if EFUSE_WRITE_ENABLE - int result; - if ( (unsigned int)(Addr - EFUSE_SECTION_SIZE) > OTP_BUF_MAX_LEN - 1 ) - result = 1; - else - result = HALEFUSEOneByteWriteROM(CtrlSetting, Addr, Data, L25OutVoltage); - return result; -#else - return 1; -#endif -} - -//----- HALEFUSEOneByteReadRAM -int HALEFUSEOneByteReadRAM(IN unsigned int CtrlSetting, IN unsigned short Addr, IN unsigned char *Data, IN unsigned char L25OutVoltage) -{ - int result; - - if ( (unsigned int)(Addr - 160) > 0x33 ) - { - result = HALEFUSEOneByteReadROM(CtrlSetting, Addr, Data, L25OutVoltage); - } - else - { - *Data = -1; - result = 1; - } - return result; -} - -//----- HALEFUSEOneByteWriteRAM -int HALEFUSEOneByteWriteRAM(IN unsigned int CtrlSetting, IN unsigned short Addr, IN unsigned char Data, IN unsigned char L25OutVoltage) -{ -#if EFUSE_WRITE_ENABLE - int result; - if ( (unsigned int)(Addr - 127) <= 0x54 ) - result = 1; - else { - result = HALEFUSEOneByteWriteROM(CtrlSetting, Addr, Data, L25OutVoltage); - } - return result; -#else - return 1; -#endif -} - -//----- ReadEfuseContant -void ReadEfuseContant(IN unsigned char UserCode, IN unsigned char *pContant) -{ - unsigned int i, offset, bcnt, eFuse_Addr = 0; - unsigned char DataTemp0; - unsigned char DataTemp1; - unsigned char * pbuf = pContant; - - do { - HALEFUSEOneByteReadRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), eFuse_Addr, &DataTemp0, L25EOUTVOLTAGE); - if (DataTemp0 == 0x0FF) break; - if ((DataTemp0 & 0x0F) == 0x0F) { - HALEFUSEOneByteReadRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), ++eFuse_Addr, &DataTemp1, L25EOUTVOLTAGE); - offset = ((DataTemp1 & 0x0F0) | (DataTemp0 >> 4)) >> 1; - bcnt = (~DataTemp1) & 0x0F; - if (((UserCode + EFUSE_SECTION_CODE) << 2) > offset || offset >= ((UserCode + EFUSE_SECTION_CODE + 1) << 2)) { - while(bcnt) { - if (bcnt & 1) eFuse_Addr += 2; - bcnt >>= 1; - } - } - else { - int base = (offset - ((EFUSE_SECTION_CODE + UserCode) << 2)) << 3; - i = 0; - while(bcnt) { - if (bcnt & 1) { - HALEFUSEOneByteReadRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), ++eFuse_Addr, &pbuf[base + i], L25EOUTVOLTAGE); - HALEFUSEOneByteReadRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), ++eFuse_Addr, &pbuf[base + i + 1], L25EOUTVOLTAGE); - } - bcnt >>= 1; - i += 2; - } - } - } - else for(i = (~DataTemp0) & 0x0F; i; i >>= 1) if (i & 1) eFuse_Addr += 2; - eFuse_Addr++; - } - while(eFuse_Addr < EFUSE_SECTION_SIZE - 1); -} - -//----- ReadEfuseContant1 -void ReadEfuseContant1(OUT unsigned char *pContant) -{ - ReadEfuseContant(0, pContant); -} - -//----- ReadEfuseContant2 -void ReadEfuseContant2(OUT unsigned char *pContant) -{ - ReadEfuseContant(1, pContant); -} - -//----- ReadEfuseContant3 -void ReadEfuseContant3(OUT unsigned char *pContant) -{ - ReadEfuseContant(2, pContant); -} - -//----- GetRemainingEfuseLength -int GetRemainingEfuseLength(void) -{ - unsigned int i, eFuse_Addr = 0; - unsigned char DataTemp0; - do - { - HALEFUSEOneByteReadRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), eFuse_Addr, &DataTemp0, L25EOUTVOLTAGE); - if(DataTemp0 == 0x0FF) break; - if((DataTemp0 & 0x0F) == 0x0F) - HALEFUSEOneByteReadRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), ++eFuse_Addr, &DataTemp0, L25EOUTVOLTAGE); - for (i = (~DataTemp0) & 0x0F; i; i >>= 1 ) if (i & 1) eFuse_Addr += 2; - eFuse_Addr++; - } - while(eFuse_Addr < EFUSE_SECTION_SIZE - 1); - return (EFUSE_SECTION_SIZE - 1 - eFuse_Addr); -} - -//----- WriteEfuseContant -int WriteEfuseContant(IN unsigned char UserCode, IN unsigned char CodeWordNum, IN unsigned char WordEnable, IN unsigned char *pContant) -{ -#if EFUSE_WRITE_ENABLE - int result = 0; - unsigned int i, j, eFuse_Addr; // r4@3 - unsigned char DataTemp0; - unsigned int bmask = WordEnable & 0xF; - - if (bmask) { - eFuse_Addr = 0; - do { // eFuse_Addr = 128 - _GetRemainingEfuseLength - HALEFUSEOneByteReadRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), eFuse_Addr, &DataTemp0, L25EOUTVOLTAGE); - if (DataTemp0 == 0x0ff) break; - if ((DataTemp0 & 0x0F) == 0x0F) - HALEFUSEOneByteReadRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), ++eFuse_Addr, &DataTemp0, L25EOUTVOLTAGE); - for (i = (~DataTemp0) & 0x0F; i; i >>= 1) if (i & 1) eFuse_Addr += 2; - eFuse_Addr++; - } - while (eFuse_Addr <= EFUSE_SECTION_SIZE - 2); - - j = 0; - do - { - if (bmask & 1) j += 2; - bmask >>= 1; - } - while (bmask); - if ((eFuse_Addr + j) <= EFUSE_SECTION_SIZE - 4) - { - HALEFUSEOneByteWriteRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), eFuse_Addr, (((UserCode + EFUSE_SECTION_CODE) << 7) | 0x0F) + ((CodeWordNum & 3) << 5), L25EOUTVOLTAGE); - HALEFUSEOneByteWriteRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), eFuse_Addr + 1, (((UserCode + EFUSE_SECTION_CODE) << 3) & 0xF0) | ((~bmask) & 0xF), L25EOUTVOLTAGE); - i = 0; - while (i < j) - { - HALEFUSEOneByteWriteRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), eFuse_Addr + 2 + i, pContant[i], L25EOUTVOLTAGE); - i++; - } - result = 1; - } - } - return result; -#else - return 1; -#endif -} - -//----- WriteEfuseContant1 -int WriteEfuseContant1(IN unsigned char CodeWordNum, IN unsigned char WordEnable, IN unsigned char *pContant) -{ -#if EFUSE_WRITE_ENABLE - return WriteEfuseContant(0, CodeWordNum, WordEnable, pContant); -#else - return 1; -#endif -} - -//----- WriteEfuseContant2 -int WriteEfuseContant2(IN unsigned char CodeWordNum, IN unsigned char WordEnable, IN unsigned char *pContant) -{ -#if EFUSE_WRITE_ENABLE - return WriteEfuseContant(1, CodeWordNum, WordEnable, pContant); -#else - return 1; -#endif -} - -//----- WriteEfuseContant2 -int WriteEfuseContant3(IN unsigned char CodeWordNum, IN unsigned char WordEnable, IN unsigned char *pContant) -{ -#if EFUSE_WRITE_ENABLE - return WriteEfuseContant(2, CodeWordNum, WordEnable, pContant); -#else - return 1; -#endif -} - -//----- ReadEOTPContant -void ReadEOTPContant(IN unsigned char *pContant) -{ - int i; - for(i = 0; i < OTP_BUF_MAX_LEN; i++ ) - HALOTPOneByteReadRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), i+EFUSE_SECTION_SIZE, &pContant[i], L25EOUTVOLTAGE); -} - -//----- WriteEOTPContant -void WriteEOTPContant(IN unsigned char *pContant) -{ -#if EFUSE_WRITE_ENABLE - int i; - unsigned char DataTemp0; - for(i = 0; i < OTP_BUF_MAX_LEN; i++ ) { - HALOTPOneByteReadRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), i+EFUSE_SECTION_SIZE, &DataTemp0, L25EOUTVOLTAGE); - if (DataTemp0 == 0xFF) - HALOTPOneByteWriteRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), i+EFUSE_SECTION_SIZE, pContant[i], L25EOUTVOLTAGE); - } -#endif -} - -//----- HALJtagOff -void HALJtagOff(void) -{ -#if EFUSE_WRITE_ENABLE - HALEFUSEOneByteWriteROM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), 211, 0xFE, L25EOUTVOLTAGE); -#endif -} - -#endif //CONFIG_EFUSE_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_efuse.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_efuse.h deleted file mode 100644 index 1f0ec10..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_efuse.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Routines to access hardware - * hal_efuse.h - */ - -#ifndef _HAL_EFUSE_H_ -#define _HAL_EFUSE_H_ - -_LONG_CALL_ROM_ extern void HalEFUSEPowerSwitch8195AROM(IN uint8_t bWrite, IN uint8_t PwrState, IN uint8_t L25OutVoltage); -_LONG_CALL_ROM_ extern uint32_t HALEFUSEOneByteReadROM(IN uint32_t CtrlSetting, IN uint16_t Addr, OUT uint8_t *Data, IN uint8_t L25OutVoltage); -_LONG_CALL_ROM_ extern uint32_t HALEFUSEOneByteWriteROM(IN uint32_t CtrlSetting, IN uint16_t Addr, IN uint8_t Data, IN uint8_t L25OutVoltage); - -int HALOTPOneByteReadRAM(IN unsigned int CtrlSetting, IN unsigned short Addr, OUT unsigned char *Data, IN unsigned char L25OutVoltage); -int HALOTPOneByteWriteRAM(IN unsigned int CtrlSetting, IN unsigned short Addr, IN unsigned char Data, IN unsigned char L25OutVoltage); -int HALEFUSEOneByteReadRAM(IN unsigned int CtrlSetting, IN unsigned short Addr, IN unsigned char *Data, IN unsigned char L25OutVoltage); -int HALEFUSEOneByteWriteRAM(IN unsigned int CtrlSetting, IN unsigned short Addr, IN unsigned char Data, IN unsigned char L25OutVoltage); - - -void ReadEfuseContant(IN unsigned char UserCode, OUT unsigned char *pContant); -void ReadEfuseContant1(OUT unsigned char *pContant); -void ReadEfuseContant2(OUT unsigned char *pContant); -void ReadEfuseContant3(OUT unsigned char *pContant); -int GetRemainingEfuseLength(void); - -int WriteEfuseContant(IN unsigned char UserCode, IN unsigned char CodeWordNum, IN unsigned char WordEnable, unsigned char *pContant); -int WriteEfuseContant1(IN unsigned char CodeWordNum, IN unsigned char WordEnable, IN unsigned char *pContant); -int WriteEfuseContant2(IN unsigned char CodeWordNum, IN unsigned char WordEnable, IN unsigned char *pContant); -int WriteEfuseContant3(IN unsigned char CodeWordNum, IN unsigned char WordEnable, IN unsigned char *pContant); - -void ReadEOTPContant(IN unsigned char *pContant); -void WriteEOTPContant(OUT unsigned char *pContant); -void HALJtagOff(void); - -#define EFUSERead8 HALEFUSEOneByteReadRAM -#define EFUSEWrite8 HALEFUSEOneByteWriteRAM - -#define L25EOUTVOLTAGE 7 -#endif - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_gdma.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_gdma.c deleted file mode 100644 index adc5447..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_gdma.c +++ /dev/null @@ -1,578 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#include "rtl8195a.h" -#include "hal_gdma.h" - -#ifdef CONFIG_GDMA_EN - -#define MAX_GDMA_INDX 1 -#define MAX_GDMA_CHNL 6 - -static uint8_t HalGdmaReg[MAX_GDMA_INDX+1]; - -const HAL_GDMA_CHNL GDMA_Chnl_Option[] = { - {0,0,GDMA0_CHANNEL0_IRQ,0}, - {1,0,GDMA1_CHANNEL0_IRQ,0}, - {0,1,GDMA0_CHANNEL1_IRQ,0}, - {1,1,GDMA1_CHANNEL1_IRQ,0}, - {0,2,GDMA0_CHANNEL2_IRQ,0}, - {1,2,GDMA1_CHANNEL2_IRQ,0}, - {0,3,GDMA0_CHANNEL3_IRQ,0}, - {1,3,GDMA1_CHANNEL3_IRQ,0}, - {0,4,GDMA0_CHANNEL4_IRQ,0}, - {1,4,GDMA1_CHANNEL4_IRQ,0}, - {0,5,GDMA0_CHANNEL5_IRQ,0}, - {1,5,GDMA1_CHANNEL5_IRQ,0}, - - {0xff,0,0,0} // end -}; - -const HAL_GDMA_CHNL GDMA_Multi_Block_Chnl_Option[] = { - {0,4,GDMA0_CHANNEL4_IRQ,0}, - {1,4,GDMA1_CHANNEL4_IRQ,0}, - {0,5,GDMA0_CHANNEL5_IRQ,0}, - {1,5,GDMA1_CHANNEL5_IRQ,0}, - - {0xff,0,0,0} // end -}; - - -const uint16_t HalGdmaChnlEn[6] = { - GdmaCh0, GdmaCh1, GdmaCh2, GdmaCh3, - GdmaCh4, GdmaCh5 -}; - - - -void HalGdmaOpInit( - IN void *Data -) -{ - PHAL_GDMA_OP pHalGdmaOp = (PHAL_GDMA_OP) Data; - - pHalGdmaOp->HalGdmaOnOff = HalGdmaOnOffRtl8195a; - pHalGdmaOp->HalGdamChInit = HalGdamChInitRtl8195a; - pHalGdmaOp->HalGdmaChDis = HalGdmaChDisRtl8195a; - pHalGdmaOp->HalGdmaChEn = HalGdmaChEnRtl8195a; - pHalGdmaOp->HalGdmaChSeting = HalGdmaChSetingRtl8195a; -#ifndef CONFIG_CHIP_E_CUT - pHalGdmaOp->HalGdmaChBlockSeting = HalGdmaChBlockSetingRtl8195a_Patch; -#else - pHalGdmaOp->HalGdmaChBlockSeting = HalGdmaChBlockSetingRtl8195a_V04; -#endif - pHalGdmaOp->HalGdmaChIsrEnAndDis = HalGdmaChIsrEnAndDisRtl8195a; - pHalGdmaOp->HalGdmaChIsrClean = HalGdmaChIsrCleanRtl8195a; - pHalGdmaOp->HalGdmaChCleanAutoSrc = HalGdmaChCleanAutoSrcRtl8195a; - pHalGdmaOp->HalGdmaChCleanAutoDst = HalGdmaChCleanAutoDstRtl8195a; -} - -void HalGdmaOn(PHAL_GDMA_ADAPTER pHalGdmaAdapter) -{ - pHalGdmaAdapter->GdmaOnOff = ON; - HalGdmaOnOffRtl8195a((void*)pHalGdmaAdapter); -} - -void HalGdmaOff(PHAL_GDMA_ADAPTER pHalGdmaAdapter) -{ - pHalGdmaAdapter->GdmaOnOff = OFF; - HalGdmaOnOffRtl8195a((void*)pHalGdmaAdapter); -} - -BOOL HalGdmaChInit(PHAL_GDMA_ADAPTER pHalGdmaAdapter) -{ - return (HalGdamChInitRtl8195a((void*)pHalGdmaAdapter)); -} - -void HalGdmaChDis(PHAL_GDMA_ADAPTER pHalGdmaAdapter) -{ - HalGdmaChDisRtl8195a((void*)pHalGdmaAdapter); -} - -void HalGdmaChEn(PHAL_GDMA_ADAPTER pHalGdmaAdapter) -{ - HalGdmaChEnRtl8195a((void*)pHalGdmaAdapter); -} - -BOOL HalGdmaChSeting(PHAL_GDMA_ADAPTER pHalGdmaAdapter) -{ - return (HalGdmaChSetingRtl8195a((void*)pHalGdmaAdapter)); -} - -BOOL HalGdmaChBlockSeting(PHAL_GDMA_ADAPTER pHalGdmaAdapter) -{ -#ifndef CONFIG_CHIP_E_CUT - return (HalGdmaChBlockSetingRtl8195a_Patch((void*)pHalGdmaAdapter)); -#else - return (HalGdmaChBlockSetingRtl8195a_V04((void*)pHalGdmaAdapter)); -#endif -} - -void HalGdmaChIsrEn(PHAL_GDMA_ADAPTER pHalGdmaAdapter) -{ - pHalGdmaAdapter->IsrCtrl = ENABLE; - HalGdmaChIsrEnAndDisRtl8195a((void*)pHalGdmaAdapter); -} - -void HalGdmaChIsrDis(PHAL_GDMA_ADAPTER pHalGdmaAdapter) -{ - pHalGdmaAdapter->IsrCtrl = DISABLE; - HalGdmaChIsrEnAndDisRtl8195a((void*)pHalGdmaAdapter); -} - -uint8_t HalGdmaChIsrClean(PHAL_GDMA_ADAPTER pHalGdmaAdapter) -{ - return (HalGdmaChIsrCleanRtl8195a((void*)pHalGdmaAdapter)); -} - -void HalGdmaChCleanAutoSrc(PHAL_GDMA_ADAPTER pHalGdmaAdapter) -{ - HalGdmaChCleanAutoSrcRtl8195a((void*)pHalGdmaAdapter); -} - -void HalGdmaChCleanAutoDst(PHAL_GDMA_ADAPTER pHalGdmaAdapter) -{ - HalGdmaChCleanAutoDstRtl8195a((void*)pHalGdmaAdapter); -} - -HAL_Status HalGdmaChnlRegister (uint8_t GdmaIdx, uint8_t ChnlNum) -{ - uint32_t mask; - - if ((GdmaIdx > MAX_GDMA_INDX) || (ChnlNum > MAX_GDMA_CHNL)) { - // Invalid GDMA Index or Channel Number - return HAL_ERR_PARA; - } - - mask = 1 << ChnlNum; - - if ((HalGdmaReg[GdmaIdx] & mask) != 0) { - return HAL_BUSY; - } - else { -#if 1 - if (HalGdmaReg[GdmaIdx] == 0) { - if (GdmaIdx == 0) { - ACTCK_GDMA0_CCTRL(ON); - GDMA0_FCTRL(ON); - } - else { - ACTCK_GDMA1_CCTRL(ON); - GDMA1_FCTRL(ON); - } - } -#endif - HalGdmaReg[GdmaIdx] |= mask; - return HAL_OK; - } -} - -void HalGdmaChnlUnRegister (uint8_t GdmaIdx, uint8_t ChnlNum) -{ - uint32_t mask; - - if ((GdmaIdx > MAX_GDMA_INDX) || (ChnlNum > MAX_GDMA_CHNL)) { - // Invalid GDMA Index or Channel Number - return; - } - - mask = 1 << ChnlNum; - - HalGdmaReg[GdmaIdx] &= ~mask; -#if 1 - if (HalGdmaReg[GdmaIdx] == 0) { - if (GdmaIdx == 0) { - ACTCK_GDMA0_CCTRL(OFF); - GDMA0_FCTRL(OFF); - } - else { - ACTCK_GDMA1_CCTRL(OFF); - GDMA1_FCTRL(OFF); - } - } -#endif -} - -PHAL_GDMA_CHNL HalGdmaChnlAlloc (HAL_GDMA_CHNL *pChnlOption) -{ - HAL_GDMA_CHNL *pgdma_chnl; - - pgdma_chnl = pChnlOption; - if (pChnlOption == NULL) { - // Use default GDMA Channel Option table - pgdma_chnl = (HAL_GDMA_CHNL*)&GDMA_Chnl_Option[0]; - } - else{ - pgdma_chnl = (HAL_GDMA_CHNL*) pgdma_chnl; - } - - while (pgdma_chnl->GdmaIndx <= MAX_GDMA_INDX) { - if (HalGdmaChnlRegister(pgdma_chnl->GdmaIndx, pgdma_chnl->GdmaChnl) == HAL_OK) { - // This GDMA Channel is available - break; - } - pgdma_chnl += 1; - } - - if (pgdma_chnl->GdmaIndx > MAX_GDMA_INDX) { - pgdma_chnl = NULL; - } - - return pgdma_chnl; -} - -void HalGdmaChnlFree (HAL_GDMA_CHNL *pChnl) -{ - IRQ_HANDLE IrqHandle; - - IrqHandle.IrqNum = pChnl->IrqNum; - InterruptDis(&IrqHandle); - InterruptUnRegister(&IrqHandle); - HalGdmaChnlUnRegister(pChnl->GdmaIndx, pChnl->GdmaChnl); -} - -void HalGdmaMemIrqHandler(void *pData) -{ - PHAL_GDMA_OBJ pHalGdmaObj=(PHAL_GDMA_OBJ)pData; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PIRQ_HANDLE pGdmaIrqHandle; - - pHalGdmaAdapter = &(pHalGdmaObj->HalGdmaAdapter); - pGdmaIrqHandle = &(pHalGdmaObj->GdmaIrqHandle); - // Clean Auto Reload Bit - HalGdmaChCleanAutoDst((void*)pHalGdmaAdapter); - - // Clear Pending ISR - HalGdmaChIsrClean((void*)pHalGdmaAdapter); - - HalGdmaChDis((void*)(pHalGdmaAdapter)); - pHalGdmaObj->Busy = 0; - - if (pGdmaIrqHandle->IrqFun != NULL) { - pGdmaIrqHandle->IrqFun((void*)pGdmaIrqHandle->Data); - } -} - -BOOL HalGdmaMemCpyAggrInit(PHAL_GDMA_OBJ pHalGdmaObj) -{ - HAL_GDMA_CHNL *pgdma_chnl; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PIRQ_HANDLE pGdmaIrqHandle; - IRQ_HANDLE IrqHandle; - - pgdma_chnl = HalGdmaChnlAlloc((PHAL_GDMA_CHNL) &GDMA_Multi_Block_Chnl_Option[0]); // get a whatever GDMA channel - if (NULL == pgdma_chnl) { - DBG_GDMA_ERR("%s: Cannot allocate a GDMA Channel\n", __FUNCTION__); - return _FALSE; - } - - pHalGdmaAdapter = &(pHalGdmaObj->HalGdmaAdapter); - pGdmaIrqHandle = &(pHalGdmaObj->GdmaIrqHandle); - - DBG_GDMA_INFO("%s: Use GDMA%d CH%d\n", __FUNCTION__, pgdma_chnl->GdmaIndx, pgdma_chnl->GdmaChnl); - - _memset((void *)pHalGdmaAdapter, 0, sizeof(HAL_GDMA_ADAPTER)); - - pHalGdmaAdapter->GdmaCtl.TtFc = TTFCMemToMem; - pHalGdmaAdapter->GdmaCtl.Done = 1; - pHalGdmaAdapter->MuliBlockCunt = 0; - pHalGdmaAdapter->MaxMuliBlock = 1; - pHalGdmaAdapter->ChNum = pgdma_chnl->GdmaChnl; - pHalGdmaAdapter->GdmaIndex = pgdma_chnl->GdmaIndx; - pHalGdmaAdapter->ChEn = 0x0101 << pgdma_chnl->GdmaChnl; - pHalGdmaAdapter->GdmaIsrType = (TransferType|ErrType); - pHalGdmaAdapter->IsrCtrl = ENABLE; - pHalGdmaAdapter->GdmaOnOff = ON; - pHalGdmaAdapter->GdmaCtl.IntEn = 1; - pHalGdmaAdapter->Rsvd4to7 = 1; - pHalGdmaAdapter->Llpctrl = 1; - pGdmaIrqHandle->IrqNum = pgdma_chnl->IrqNum; - pGdmaIrqHandle->Priority = 10; - - IrqHandle.IrqFun = (IRQ_FUN) HalGdmaMemIrqHandler; - IrqHandle.Data = (uint32_t) pHalGdmaObj; - IrqHandle.IrqNum = pGdmaIrqHandle->IrqNum; - IrqHandle.Priority = pGdmaIrqHandle->Priority; - - InterruptRegister(&IrqHandle); - InterruptEn(&IrqHandle); - pHalGdmaObj->Busy = 0; - - return _TRUE; -} - - -void HalGdmaMultiBlockSetting(PHAL_GDMA_OBJ pHalGdmaObj, PHAL_GDMA_BLOCK pHalGdmaBlock) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - uint8_t BlockNumber; - uint8_t BlockIndex; - uint8_t FourBytesAlign; - - BlockNumber = pHalGdmaObj->BlockNum; - pHalGdmaAdapter = &(pHalGdmaObj->HalGdmaAdapter); - - pHalGdmaAdapter->GdmaCtl.LlpSrcEn = 1; - pHalGdmaAdapter->GdmaCtl.LlpDstEn = 1; - - if(((pHalGdmaBlock[0].SrcAddr & 0x03) == 0) &&((pHalGdmaBlock[0].DstAddr & 0x03) == 0) - && ((pHalGdmaBlock[0].BlockLength & 0X03) == 0)){ - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeEight; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthFourBytes; - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeEight; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthFourBytes; - FourBytesAlign = 1; - } - else{ - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeEight; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthOneByte; - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeEight; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthOneByte; - FourBytesAlign = 0; - } - - for(BlockIndex = 0; BlockIndex < BlockNumber; BlockIndex++){ - - pHalGdmaObj->GdmaChLli[BlockIndex].Sarx = pHalGdmaBlock[BlockIndex].SrcAddr; - pHalGdmaObj->GdmaChLli[BlockIndex].Darx = pHalGdmaBlock[BlockIndex].DstAddr; - pHalGdmaObj->BlockSizeList[BlockIndex].pNextBlockSiz = &pHalGdmaObj->BlockSizeList[BlockIndex + 1]; - - if(FourBytesAlign){ - pHalGdmaObj->BlockSizeList[BlockIndex].BlockSize = pHalGdmaBlock[BlockIndex].BlockLength >> 2; - } - else{ - pHalGdmaObj->BlockSizeList[BlockIndex].BlockSize = pHalGdmaBlock[BlockIndex].BlockLength; - } - - pHalGdmaObj->Lli[BlockIndex].pLliEle = (GDMA_CH_LLI_ELE*) &pHalGdmaObj->GdmaChLli[BlockIndex]; - pHalGdmaObj->Lli[BlockIndex].pNextLli = &pHalGdmaObj->Lli[BlockIndex + 1]; - - - if(BlockIndex == BlockNumber - 1){ - pHalGdmaObj->BlockSizeList[BlockIndex].pNextBlockSiz = NULL; - pHalGdmaObj->Lli[BlockIndex].pNextLli = NULL; - } - //DBG_GDMA_INFO("Lli[%d].pLiEle = %x\r\n", BlockIndex,Lli[BlockIndex].pLliEle); - //DBG_GDMA_INFO("Lli[%d].pNextLli = %x\r\n", BlockIndex,Lli[BlockIndex].pNextLli); - } - - pHalGdmaAdapter->pBlockSizeList = (struct BLOCK_SIZE_LIST*) &pHalGdmaObj->BlockSizeList; - pHalGdmaAdapter->pLlix = (struct GDMA_CH_LLI*) &pHalGdmaObj->Lli; - //DBG_GDMA_INFO("pHalGdmaAdapter->pBlockSizeList = %x\r\n", pHalGdmaAdapter->pBlockSizeList); - //DBG_GDMA_INFO("pHalGdmaAdapter->pLlix = %x\r\n", pHalGdmaAdapter->pLlix ); -} - -void HalGdmaLLPMemAlign(PHAL_GDMA_OBJ pHalGdmaObj, PHAL_GDMA_BLOCK pHalGdmaBlock) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PGDMA_CH_LLI_ELE pLliEle; - struct GDMA_CH_LLI *pGdmaChLli; - struct BLOCK_SIZE_LIST *pGdmaChBkLi; - uint32_t CtlxLow; - uint32_t CtlxUp; - uint8_t BlockNumber; - uint8_t BlockIndex; - - pHalGdmaAdapter = &(pHalGdmaObj->HalGdmaAdapter); - BlockNumber = pHalGdmaObj->BlockNum; - - pLliEle = pHalGdmaAdapter->pLlix->pLliEle; - pGdmaChLli = pHalGdmaAdapter->pLlix->pNextLli; - pGdmaChBkLi = pHalGdmaAdapter->pBlockSizeList; - - //4 Move to the second block to configure Memory Alginment setting - pLliEle->Llpx = (uint32_t) pGdmaChLli->pLliEle; - pGdmaChBkLi = pGdmaChBkLi ->pNextBlockSiz; - - for(BlockIndex = 1; BlockIndex < BlockNumber; BlockIndex++){ - pLliEle = pGdmaChLli->pLliEle; - CtlxLow = pLliEle->CtlxLow; - CtlxLow &= (BIT_INVC_CTLX_LO_DST_TR_WIDTH & BIT_INVC_CTLX_LO_SRC_TR_WIDTH); - CtlxUp = pLliEle->CtlxUp; - CtlxUp &= (BIT_INVC_CTLX_UP_BLOCK_BS); - - if(((pHalGdmaBlock[BlockIndex].SrcAddr & 0x03) == 0) &&((pHalGdmaBlock[BlockIndex].DstAddr & 0x03) == 0) - && ((pHalGdmaBlock[BlockIndex].BlockLength & 0X03) == 0)){ - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthFourBytes; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthFourBytes; - pGdmaChBkLi->BlockSize = pHalGdmaBlock[BlockIndex].BlockLength>> 2; - - } - else{ - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthOneByte; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthOneByte; - pGdmaChBkLi->BlockSize = pHalGdmaBlock[BlockIndex].BlockLength; - } - - CtlxLow |= (BIT_CTLX_LO_DST_TR_WIDTH(pHalGdmaAdapter->GdmaCtl.DstTrWidth) | - BIT_CTLX_LO_SRC_TR_WIDTH(pHalGdmaAdapter->GdmaCtl.SrcTrWidth)); - CtlxUp |= BIT_CTLX_UP_BLOCK_BS(pGdmaChBkLi->BlockSize); - - pGdmaChLli = pGdmaChLli->pNextLli; - pGdmaChBkLi = pGdmaChBkLi->pNextBlockSiz; - pLliEle->CtlxLow = CtlxLow; - pLliEle->CtlxUp = CtlxUp; - pLliEle->Llpx = (uint32_t)(pGdmaChLli->pLliEle); - - } -} - -void HalGdmaMemAggr(PHAL_GDMA_OBJ pHalGdmaObj, PHAL_GDMA_BLOCK pHalGdmaBlock) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - - uint8_t BlockNumber; - - BlockNumber = pHalGdmaObj->BlockNum; - pHalGdmaAdapter = &(pHalGdmaObj->HalGdmaAdapter); - - if (pHalGdmaObj->Busy) { - DBG_GDMA_ERR("%s: ==> GDMA is Busy\r\n", __FUNCTION__); - return; - } - pHalGdmaObj->Busy = 1; - - pHalGdmaAdapter->MaxMuliBlock = BlockNumber; - pHalGdmaAdapter->ChSar = pHalGdmaBlock[0].SrcAddr; - pHalGdmaAdapter->ChDar = pHalGdmaBlock[0].DstAddr; - - HalGdmaMultiBlockSetting(pHalGdmaObj, pHalGdmaBlock); - HalGdmaOn((pHalGdmaAdapter)); - HalGdmaChIsrEn((pHalGdmaAdapter)); - HalGdmaChBlockSeting((pHalGdmaAdapter)); - HalGdmaLLPMemAlign(pHalGdmaObj, pHalGdmaBlock); - HalGdmaChEn((pHalGdmaAdapter)); - -} - - - -BOOL HalGdmaMemCpyInit(PHAL_GDMA_OBJ pHalGdmaObj) -{ - HAL_GDMA_CHNL *pgdma_chnl; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PIRQ_HANDLE pGdmaIrqHandle; - IRQ_HANDLE IrqHandle; - - pgdma_chnl = HalGdmaChnlAlloc(NULL); // get a whatever GDMA channel - if (NULL == pgdma_chnl) { - DBG_GDMA_ERR("%s: Cannot allocate a GDMA Channel\n", __FUNCTION__); - return _FALSE; - } - - pHalGdmaAdapter = &(pHalGdmaObj->HalGdmaAdapter); - pGdmaIrqHandle = &(pHalGdmaObj->GdmaIrqHandle); - - DBG_GDMA_INFO("%s: Use GDMA%d CH%d\n", __FUNCTION__, pgdma_chnl->GdmaIndx, pgdma_chnl->GdmaChnl); -#if 0 - if (pgdma_chnl->GdmaIndx == 0) { - ACTCK_GDMA0_CCTRL(ON); - GDMA0_FCTRL(ON); - } - else if (pgdma_chnl->GdmaIndx == 1) { - ACTCK_GDMA1_CCTRL(ON); - GDMA1_FCTRL(ON); - } -#endif - _memset((void *)pHalGdmaAdapter, 0, sizeof(HAL_GDMA_ADAPTER)); - -// pHalGdmaAdapter->GdmaCtl.TtFc = TTFCMemToMem; - pHalGdmaAdapter->GdmaCtl.Done = 1; -// pHalGdmaAdapter->MuliBlockCunt = 0; -// pHalGdmaAdapter->MaxMuliBlock = 1; - pHalGdmaAdapter->ChNum = pgdma_chnl->GdmaChnl; - pHalGdmaAdapter->GdmaIndex = pgdma_chnl->GdmaIndx; - pHalGdmaAdapter->ChEn = 0x0101 << pgdma_chnl->GdmaChnl; - pHalGdmaAdapter->GdmaIsrType = (TransferType|ErrType); - pHalGdmaAdapter->IsrCtrl = ENABLE; - pHalGdmaAdapter->GdmaOnOff = ON; - - pHalGdmaAdapter->GdmaCtl.IntEn = 1; -// pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeEight; -// pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeEight; -// pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthFourBytes; -// pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthFourBytes; -// pHalGdmaAdapter->GdmaCtl.Dinc = IncType; -// pHalGdmaAdapter->GdmaCtl.Sinc = IncType; - - pGdmaIrqHandle->IrqNum = pgdma_chnl->IrqNum; - pGdmaIrqHandle->Priority = 10; - - IrqHandle.IrqFun = (IRQ_FUN) HalGdmaMemIrqHandler; - IrqHandle.Data = (uint32_t) pHalGdmaObj; - IrqHandle.IrqNum = pGdmaIrqHandle->IrqNum; - IrqHandle.Priority = pGdmaIrqHandle->Priority; - - InterruptRegister(&IrqHandle); - InterruptEn(&IrqHandle); - pHalGdmaObj->Busy = 0; - - return _TRUE; -} - -void HalGdmaMemCpyDeInit(PHAL_GDMA_OBJ pHalGdmaObj) -{ - HAL_GDMA_CHNL GdmaChnl; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PIRQ_HANDLE pGdmaIrqHandle; - - pHalGdmaAdapter = &(pHalGdmaObj->HalGdmaAdapter); - pGdmaIrqHandle = &(pHalGdmaObj->GdmaIrqHandle); - - GdmaChnl.GdmaIndx = pHalGdmaAdapter->GdmaIndex; - GdmaChnl.GdmaChnl = pHalGdmaAdapter->ChNum; - GdmaChnl.IrqNum = pGdmaIrqHandle->IrqNum; - HalGdmaChnlFree(&GdmaChnl); -} - -// If multi-task using the same GDMA Object, then it needs a mutex to protect this procedure -void* HalGdmaMemCpy(PHAL_GDMA_OBJ pHalGdmaObj, void* pDest, void* pSrc, uint32_t len) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - - if (pHalGdmaObj->Busy) { - DBG_GDMA_ERR("%s: ==> GDMA is Busy\r\n", __FUNCTION__); - return 0; - } - pHalGdmaObj->Busy = 1; - pHalGdmaAdapter = &(pHalGdmaObj->HalGdmaAdapter); - - DBG_GDMA_INFO("%s: ==> Src=0x%x Dst=0x%x Len=%d\r\n", __FUNCTION__, pSrc, pDest, len); - if ((((uint32_t)pSrc & 0x03)==0) && - (((uint32_t)pDest & 0x03)==0) && - ((len & 0x03)== 0)) { - // 4-bytes aligned, move 4 bytes each transfer - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeEight; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthFourBytes; - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeEight; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthFourBytes; - pHalGdmaAdapter->GdmaCtl.BlockSize = len >> 2; - } - else { - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeEight; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthOneByte; - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeEight; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthOneByte; - pHalGdmaAdapter->GdmaCtl.BlockSize = len; - } - - pHalGdmaAdapter->ChSar = (uint32_t)pSrc; - pHalGdmaAdapter->ChDar = (uint32_t)pDest; - pHalGdmaAdapter->PacketLen = len; - - HalGdmaOn((pHalGdmaAdapter)); - HalGdmaChIsrEn((pHalGdmaAdapter)); - HalGdmaChSeting((pHalGdmaAdapter)); - HalGdmaChEn((pHalGdmaAdapter)); - - return (pDest); -} - -#endif // CONFIG_GDMA_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_gdma.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_gdma.h deleted file mode 100644 index 16934ef..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_gdma.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_GDMA_H_ -#define _HAL_GDMA_H_ - -#include "rtl8195a_gdma.h" - -typedef struct _GDMA_CH_LLI_ELE_ { - uint32_t Sarx; - uint32_t Darx; - uint32_t Llpx; - uint32_t CtlxLow; - uint32_t CtlxUp; - uint32_t Temp; -}GDMA_CH_LLI_ELE, *PGDMA_CH_LLI_ELE; -#if 1 -#if 0 -typedef struct _GDMA_CH_LLI_ { - PGDMA_CH_LLI_ELE pLliEle; - PGDMA_CH_LLI pNextLli; -}GDMA_CH_LLI, *PGDMA_CH_LLI; - -typedef struct _BLOCK_SIZE_LIST_ { - uint32_t BlockSize; - PBLOCK_SIZE_LIST pNextBlockSiz; -}BLOCK_SIZE_LIST, *PBLOCK_SIZE_LIST; -#else -struct GDMA_CH_LLI { - PGDMA_CH_LLI_ELE pLliEle; - struct GDMA_CH_LLI *pNextLli; -}; - -struct BLOCK_SIZE_LIST { - uint32_t BlockSize; - struct BLOCK_SIZE_LIST *pNextBlockSiz; -}; - -#endif - -#endif -typedef struct _HAL_GDMA_ADAPTER_ { - uint32_t ChSar; - uint32_t ChDar; - GDMA_CHANNEL_NUM ChEn; - GDMA_CTL_REG GdmaCtl; - GDMA_CFG_REG GdmaCfg; - uint32_t PacketLen; - uint32_t BlockLen; - uint32_t MuliBlockCunt; - uint32_t MaxMuliBlock; - struct GDMA_CH_LLI *pLlix; - struct BLOCK_SIZE_LIST *pBlockSizeList; - - PGDMA_CH_LLI_ELE pLli; - uint32_t NextPlli; - uint8_t TestItem; - uint8_t ChNum; - uint8_t GdmaIndex; - uint8_t IsrCtrl:1; - uint8_t GdmaOnOff:1; - uint8_t Llpctrl:1; - uint8_t Lli0:1; - uint8_t Rsvd4to7:4; - uint8_t GdmaIsrType; -}HAL_GDMA_ADAPTER, *PHAL_GDMA_ADAPTER; - -typedef struct _HAL_GDMA_CHNL_ { - uint8_t GdmaIndx; - uint8_t GdmaChnl; - uint8_t IrqNum; - uint8_t Reserved; -}HAL_GDMA_CHNL, *PHAL_GDMA_CHNL; - -typedef struct _HAL_GDMA_BLOCK_ { - uint32_t SrcAddr; - uint32_t DstAddr; - uint32_t BlockLength; - uint32_t SrcOffset; - uint32_t DstOffset; -}HAL_GDMA_BLOCK, *PHAL_GDMA_BLOCK; - -typedef struct _HAL_GDMA_OP_ { - void (*HalGdmaOnOff)(void *Data); - BOOL (*HalGdamChInit)(void *Data); - BOOL (*HalGdmaChSeting)(void *Data); - BOOL (*HalGdmaChBlockSeting)(void *Data); - void (*HalGdmaChDis)(void *Data); - void (*HalGdmaChEn)(void *Data); - void (*HalGdmaChIsrEnAndDis) (void *Data); - uint8_t (*HalGdmaChIsrClean)(void *Data); - void (*HalGdmaChCleanAutoSrc)(void *Data); - void (*HalGdmaChCleanAutoDst)(void *Data); -}HAL_GDMA_OP, *PHAL_GDMA_OP; - -typedef struct _HAL_GDMA_OBJ_ { - HAL_GDMA_ADAPTER HalGdmaAdapter; - IRQ_HANDLE GdmaIrqHandle; - volatile GDMA_CH_LLI_ELE GdmaChLli[16]; - struct GDMA_CH_LLI Lli[16]; - struct BLOCK_SIZE_LIST BlockSizeList[16]; - uint8_t Busy; // is transfering - uint8_t BlockNum; -} HAL_GDMA_OBJ, *PHAL_GDMA_OBJ; - -void HalGdmaOpInit(IN void *Data); -void HalGdmaOn(PHAL_GDMA_ADAPTER pHalGdmaAdapter); -void HalGdmaOff(PHAL_GDMA_ADAPTER pHalGdmaAdapter); -BOOL HalGdmaChInit(PHAL_GDMA_ADAPTER pHalGdmaAdapter); -void HalGdmaChDis(PHAL_GDMA_ADAPTER pHalGdmaAdapter); -void HalGdmaChEn(PHAL_GDMA_ADAPTER pHalGdmaAdapter); -BOOL HalGdmaChSeting(PHAL_GDMA_ADAPTER pHalGdmaAdapter); -BOOL HalGdmaChBlockSeting(PHAL_GDMA_ADAPTER pHalGdmaAdapter); -void HalGdmaChIsrEn(PHAL_GDMA_ADAPTER pHalGdmaAdapter); -void HalGdmaChIsrDis(PHAL_GDMA_ADAPTER pHalGdmaAdapter); -uint8_t HalGdmaChIsrClean(PHAL_GDMA_ADAPTER pHalGdmaAdapter); -void HalGdmaChCleanAutoSrc(PHAL_GDMA_ADAPTER pHalGdmaAdapter); -void HalGdmaChCleanAutoDst(PHAL_GDMA_ADAPTER pHalGdmaAdapter); - -extern HAL_Status HalGdmaChnlRegister (uint8_t GdmaIdx, uint8_t ChnlNum); -extern void HalGdmaChnlUnRegister (uint8_t GdmaIdx, uint8_t ChnlNum); -extern PHAL_GDMA_CHNL HalGdmaChnlAlloc (HAL_GDMA_CHNL *pChnlOption); -extern void HalGdmaChnlFree (HAL_GDMA_CHNL *pChnl); -extern BOOL HalGdmaMemCpyInit(PHAL_GDMA_OBJ pHalGdmaObj); -extern void HalGdmaMemCpyDeInit(PHAL_GDMA_OBJ pHalGdmaObj); -extern void* HalGdmaMemCpy(PHAL_GDMA_OBJ pHalGdmaObj, void* pDest, void* pSrc, uint32_t len); -extern void HalGdmaMemAggr(PHAL_GDMA_OBJ pHalGdmaObj, PHAL_GDMA_BLOCK pHalGdmaBlock); -extern BOOL HalGdmaMemCpyAggrInit(PHAL_GDMA_OBJ pHalGdmaObj); - -extern const HAL_GDMA_OP _HalGdmaOp; -extern const HAL_GDMA_CHNL GDMA_Chnl_Option[]; -extern const HAL_GDMA_CHNL GDMA_Multi_Block_Chnl_Option[]; -extern const uint16_t HalGdmaChnlEn[6]; - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_gpio.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_gpio.c deleted file mode 100644 index 22b69e4..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_gpio.c +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "rtl8195a.h" - -#ifdef CONFIG_GPIO_EN - -HAL_GPIO_ADAPTER gHAL_Gpio_Adapter; -extern PHAL_GPIO_ADAPTER _pHAL_Gpio_Adapter; - -extern void GPIO_PullCtrl_8195a(uint32_t chip_pin, uint8_t pull_type); - -/** - * @brief To get the GPIO IP Pin name for the given chip pin name - * - * @param chip_pin: The chip pin name. - * - * @retval The gotten GPIO IP pin name - */ -uint32_t -HAL_GPIO_GetPinName( - uint32_t chip_pin -) -{ - return HAL_GPIO_GetIPPinName_8195a((uint32_t)chip_pin); -} - -/** - * @brief Set the GPIO pad Pull type - * - * @param pin: The pin for pull type control. - * @param mode: the pull type for the pin. - * @return None - */ -void -HAL_GPIO_PullCtrl( - uint32_t pin, - uint32_t mode -) -{ - uint8_t pull_type; - - switch (mode) { - case hal_PullNone: - pull_type = DIN_PULL_NONE; - break; - - case hal_PullDown: - pull_type = DIN_PULL_LOW; - break; - - case hal_PullUp: - pull_type = DIN_PULL_HIGH; - break; - - case hal_OpenDrain: - default: - pull_type = DIN_PULL_NONE; - break; - } - -// HAL_GPIO_PullCtrl_8195a (pin, pull_type); - GPIO_PullCtrl_8195a (pin, pull_type); -} - - -/** - * @brief Initializes a GPIO Pin by the GPIO_Pin parameters. - * - * @param GPIO_Pin: The data structer which contains the parameters for the GPIO Pin initialization. - * - * @retval HAL_Status - */ -void -HAL_GPIO_Init( - HAL_GPIO_PIN *GPIO_Pin -) -{ - uint8_t port_num; - uint8_t pin_num; - uint32_t chip_pin; - - - if (_pHAL_Gpio_Adapter == NULL) { - _pHAL_Gpio_Adapter = &gHAL_Gpio_Adapter; -// DBG_GPIO_INFO("HAL_GPIO_Init: Initial GPIO Adapter\n "); - } - - port_num = HAL_GPIO_GET_PORT_BY_NAME(GPIO_Pin->pin_name); - pin_num = HAL_GPIO_GET_PIN_BY_NAME(GPIO_Pin->pin_name); - chip_pin = GPIO_GetChipPinName_8195a(port_num, pin_num); -#if CONFIG_DEBUG_LOG > 3 - if (GpioFunctionChk(chip_pin, ENABLE) == _FALSE) { -// if((chip_pin > 0x03) && (chip_pin != 0x25)) { - DBG_GPIO_ERR("HAL_GPIO_Init: GPIO Pin(%x) Unavailable\n ", chip_pin); - return; -// } -// else DBG_GPIO_WARN("HAL_GPIO_Init: GPIO Pin(%x) Warning for RTL8710AF!\n ", chip_pin); - } -#endif - // Make the pin pull control default as High-Z - GPIO_PullCtrl_8195a(chip_pin, HAL_GPIO_HIGHZ); - - // HAL_Status ret = -#if CONFIG_DEBUG_LOG > 3 - HAL_Status ret = HAL_GPIO_Init_8195a(GPIO_Pin); - if (ret != HAL_OK) { - GpioFunctionChk(chip_pin, DISABLE); - } -#else - HAL_GPIO_Init_8195a(GPIO_Pin); -#endif -} - -/** - * @brief Initializes a GPIO Pin as a interrupt signal - * - * @param GPIO_Pin: The data structer which contains the parameters for the GPIO Pin initialization. - * - * @retval HAL_Status - */ -void -HAL_GPIO_Irq_Init( - HAL_GPIO_PIN *GPIO_Pin -) -{ - if (_pHAL_Gpio_Adapter == NULL) { - _pHAL_Gpio_Adapter = &gHAL_Gpio_Adapter; -// DBG_GPIO_INFO("%s: Initial GPIO Adapter\n ", __FUNCTION__); - } - - if (_pHAL_Gpio_Adapter->IrqHandle.IrqFun == NULL) { - _pHAL_Gpio_Adapter->IrqHandle.IrqFun = (IRQ_FUN)HAL_GPIO_MbedIrqHandler_8195a; - _pHAL_Gpio_Adapter->IrqHandle.Priority = 6; - HAL_GPIO_RegIrq_8195a(&_pHAL_Gpio_Adapter->IrqHandle); - InterruptEn(&_pHAL_Gpio_Adapter->IrqHandle); -// DBG_GPIO_INFO("%s: Initial GPIO IRQ Adapter\n ", __FUNCTION__); - } - -#if CONFIG_DEBUG_LOG > 3 - uint8_t port_num = HAL_GPIO_GET_PORT_BY_NAME(GPIO_Pin->pin_name); - uint8_t pin_num = HAL_GPIO_GET_PIN_BY_NAME(GPIO_Pin->pin_name); - uint32_t chip_pin = GPIO_GetChipPinName_8195a(port_num, pin_num); - if (GpioFunctionChk(chip_pin, ENABLE) == _FALSE) { - DBG_GPIO_ERR("HAL_GPIO_Irq_Init: GPIO Pin(%x) Unavailable\n ", chip_pin); - return; - } -#endif - DBG_GPIO_INFO("HAL_GPIO_Irq_Init: GPIO(name=0x%x)(mode=%d)\n ", GPIO_Pin->pin_name, - GPIO_Pin->pin_mode); - HAL_GPIO_MaskIrq_8195a(GPIO_Pin); -// HAL_Status ret = - -#if CONFIG_DEBUG_LOG > 3 - HAL_Status ret = HAL_GPIO_Init_8195a(GPIO_Pin); - if (ret != HAL_OK) { - GpioFunctionChk(chip_pin, DISABLE); - } -#else - HAL_GPIO_Init_8195a(GPIO_Pin); -#endif -} - -/** - * @brief UnInitial GPIO Adapter - * - * - * @retval HAL_Status - */ -void -HAL_GPIO_IP_DeInit( - void -) -{ - if (_pHAL_Gpio_Adapter != NULL) { - InterruptDis(&_pHAL_Gpio_Adapter->IrqHandle); - HAL_GPIO_UnRegIrq_8195a(&_pHAL_Gpio_Adapter->IrqHandle); - _pHAL_Gpio_Adapter = NULL; - } - -} - -/** - * @brief De-Initializes a GPIO Pin, reset it as default setting. - * - * @param GPIO_Pin: The data structer which contains the parameters for the GPIO Pin. - * - * @retval HAL_Status - */ -void -HAL_GPIO_DeInit( - HAL_GPIO_PIN *GPIO_Pin -) -{ -#if CONFIG_DEBUG_LOG > 3 - uint8_t port_num = HAL_GPIO_GET_PORT_BY_NAME(GPIO_Pin->pin_name); - uint8_t pin_num = HAL_GPIO_GET_PIN_BY_NAME(GPIO_Pin->pin_name); -#endif - HAL_GPIO_DeInit_8195a(GPIO_Pin); -#if CONFIG_DEBUG_LOG > 3 - GpioFunctionChk(GPIO_GetChipPinName_8195a(port_num, pin_num), DISABLE); -#endif -} - - -#endif // CONFIG_GPIO_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_gpio.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_gpio.h deleted file mode 100644 index 7c7286e..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_gpio.h +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_GPIO_H_ -#define _HAL_GPIO_H_ - -#define HAL_GPIO_PIN_INT_MODE 0x80 - -typedef enum { - _PORT_A = 0, - _PORT_B = 1, - _PORT_C = 2, - _PORT_D = 3, - _PORT_E = 4, - _PORT_F = 5, - _PORT_G = 6, - _PORT_H = 7, - _PORT_I = 8, - _PORT_J = 9, - _PORT_K = 10, - - _PORT_MAX -} HAL_GPIO_PORT_NAME; - -typedef enum { - _PA_0 = (_PORT_A<<4|0), - _PA_1 = (_PORT_A<<4|1), - _PA_2 = (_PORT_A<<4|2), - _PA_3 = (_PORT_A<<4|3), - _PA_4 = (_PORT_A<<4|4), - _PA_5 = (_PORT_A<<4|5), - _PA_6 = (_PORT_A<<4|6), - _PA_7 = (_PORT_A<<4|7), - - _PB_0 = (_PORT_B<<4|0), - _PB_1 = (_PORT_B<<4|1), - _PB_2 = (_PORT_B<<4|2), - _PB_3 = (_PORT_B<<4|3), - _PB_4 = (_PORT_B<<4|4), - _PB_5 = (_PORT_B<<4|5), - _PB_6 = (_PORT_B<<4|6), - _PB_7 = (_PORT_B<<4|7), - - _PC_0 = (_PORT_C<<4|0), - _PC_1 = (_PORT_C<<4|1), - _PC_2 = (_PORT_C<<4|2), - _PC_3 = (_PORT_C<<4|3), - _PC_4 = (_PORT_C<<4|4), - _PC_5 = (_PORT_C<<4|5), - _PC_6 = (_PORT_C<<4|6), - _PC_7 = (_PORT_C<<4|7), - _PC_8 = (_PORT_C<<4|8), - _PC_9 = (_PORT_C<<4|9), - - _PD_0 = (_PORT_D<<4|0), - _PD_1 = (_PORT_D<<4|1), - _PD_2 = (_PORT_D<<4|2), - _PD_3 = (_PORT_D<<4|3), - _PD_4 = (_PORT_D<<4|4), - _PD_5 = (_PORT_D<<4|5), - _PD_6 = (_PORT_D<<4|6), - _PD_7 = (_PORT_D<<4|7), - _PD_8 = (_PORT_D<<4|8), - _PD_9 = (_PORT_D<<4|9), - - _PE_0 = (_PORT_E<<4|0), - _PE_1 = (_PORT_E<<4|1), - _PE_2 = (_PORT_E<<4|2), - _PE_3 = (_PORT_E<<4|3), - _PE_4 = (_PORT_E<<4|4), - _PE_5 = (_PORT_E<<4|5), - _PE_6 = (_PORT_E<<4|6), - _PE_7 = (_PORT_E<<4|7), - _PE_8 = (_PORT_E<<4|8), - _PE_9 = (_PORT_E<<4|9), - _PE_A = (_PORT_E<<4|10), - - _PF_0 = (_PORT_F<<4|0), - _PF_1 = (_PORT_F<<4|1), - _PF_2 = (_PORT_F<<4|2), - _PF_3 = (_PORT_F<<4|3), - _PF_4 = (_PORT_F<<4|4), - _PF_5 = (_PORT_F<<4|5), -// _PF_6 = (_PORT_F<<4|6), -// _PF_7 = (_PORT_F<<4|7), - - _PG_0 = (_PORT_G<<4|0), - _PG_1 = (_PORT_G<<4|1), - _PG_2 = (_PORT_G<<4|2), - _PG_3 = (_PORT_G<<4|3), - _PG_4 = (_PORT_G<<4|4), - _PG_5 = (_PORT_G<<4|5), - _PG_6 = (_PORT_G<<4|6), - _PG_7 = (_PORT_G<<4|7), - - _PH_0 = (_PORT_H<<4|0), - _PH_1 = (_PORT_H<<4|1), - _PH_2 = (_PORT_H<<4|2), - _PH_3 = (_PORT_H<<4|3), - _PH_4 = (_PORT_H<<4|4), - _PH_5 = (_PORT_H<<4|5), - _PH_6 = (_PORT_H<<4|6), - _PH_7 = (_PORT_H<<4|7), - - _PI_0 = (_PORT_I<<4|0), - _PI_1 = (_PORT_I<<4|1), - _PI_2 = (_PORT_I<<4|2), - _PI_3 = (_PORT_I<<4|3), - _PI_4 = (_PORT_I<<4|4), - _PI_5 = (_PORT_I<<4|5), - _PI_6 = (_PORT_I<<4|6), - _PI_7 = (_PORT_I<<4|7), - - _PJ_0 = (_PORT_J<<4|0), - _PJ_1 = (_PORT_J<<4|1), - _PJ_2 = (_PORT_J<<4|2), - _PJ_3 = (_PORT_J<<4|3), - _PJ_4 = (_PORT_J<<4|4), - _PJ_5 = (_PORT_J<<4|5), - _PJ_6 = (_PORT_J<<4|6), -// _PJ_7 = (_PORT_J<<4|7), - - _PK_0 = (_PORT_K<<4|0), - _PK_1 = (_PORT_K<<4|1), - _PK_2 = (_PORT_K<<4|2), - _PK_3 = (_PORT_K<<4|3), - _PK_4 = (_PORT_K<<4|4), - _PK_5 = (_PORT_K<<4|5), - _PK_6 = (_PORT_K<<4|6), -// _PK_7 = (_PORT_K<<4|7), - - // Not connected - _PIN_NC = (int)0xFFFFFFFF -} HAL_PIN_NAME; - -typedef enum -{ - GPIO_PIN_LOW = 0, - GPIO_PIN_HIGH = 1, - GPIO_PIN_ERR = 2 // read Pin error -} HAL_GPIO_PIN_STATE; - -typedef enum { - DIN_PULL_NONE = 0, //floating or high impedance ? - DIN_PULL_LOW = 1, - DIN_PULL_HIGH = 2, - - DOUT_PUSH_PULL = 3, - DOUT_OPEN_DRAIN = 4, - - INT_LOW = (5|HAL_GPIO_PIN_INT_MODE), // Interrupt Low level trigger - INT_HIGH = (6|HAL_GPIO_PIN_INT_MODE), // Interrupt High level trigger - INT_FALLING = (7|HAL_GPIO_PIN_INT_MODE), // Interrupt Falling edge trigger - INT_RISING = (8|HAL_GPIO_PIN_INT_MODE) // Interrupt Rising edge trigger -} HAL_GPIO_PIN_MODE; - -enum { - GPIO_PORT_A = 0, - GPIO_PORT_B = 1, - GPIO_PORT_C = 2, - GPIO_PORT_D = 3 -}; - -typedef enum { - hal_PullNone = 0, - hal_PullUp = 1, - hal_PullDown = 2, - hal_OpenDrain = 3, - hal_PullDefault = hal_PullNone -} HAL_PinMode; - -typedef struct _HAL_GPIO_PORT_ { - uint32_t out_data; // to write the GPIO port - uint32_t in_data; // to read the GPIO port - uint32_t dir; // config each pin direction -}HAL_GPIO_PORT, *PHAL_GPIO_PORT; - -#define HAL_GPIO_PIN_NAME(port,pin) (((port)<<5)|(pin)) -#define HAL_GPIO_GET_PORT_BY_NAME(x) ((x>>5) & 0x03) -#define HAL_GPIO_GET_PIN_BY_NAME(x) (x & 0x1f) - -typedef struct _HAL_GPIO_PIN_ { - HAL_GPIO_PIN_MODE pin_mode; - uint32_t pin_name; // Pin: [7:5]: port number, [4:0]: pin number -}HAL_GPIO_PIN, *PHAL_GPIO_PIN; - -#if defined(__ICCARM__) -typedef struct _HAL_GPIO_OP_ { - void* dummy; -}HAL_GPIO_OP, *PHAL_GPIO_OP; -#endif - -typedef void (*GPIO_IRQ_FUN)(void *Data, uint32_t Id); -typedef void (*GPIO_USER_IRQ_FUN)(uint32_t Id); - -typedef struct _HAL_GPIO_ADAPTER_ { - IRQ_HANDLE IrqHandle; // GPIO HAL IRQ Handle - GPIO_USER_IRQ_FUN UserIrqHandler; // GPIO IRQ Handler - GPIO_IRQ_FUN PortA_IrqHandler[32]; // The interrupt handler triggered by Port A[x] - void *PortA_IrqData[32]; - void (*EnterCritical)(void); - void (*ExitCritical)(void); - uint32_t Local_Gpio_Dir[3]; // to record direction setting: 0- IN, 1- Out - uint8_t Gpio_Func_En; // Is GPIO HW function enabled ? - uint8_t Locked; -}HAL_GPIO_ADAPTER, *PHAL_GPIO_ADAPTER; - -uint32_t -HAL_GPIO_GetPinName( - uint32_t chip_pin -); - -void -HAL_GPIO_PullCtrl( - uint32_t pin, - uint32_t mode -); - -void -HAL_GPIO_Init( - HAL_GPIO_PIN *GPIO_Pin -); - -void -HAL_GPIO_DeInit( - HAL_GPIO_PIN *GPIO_Pin -); - -void -HAL_GPIO_Irq_Init( - HAL_GPIO_PIN *GPIO_Pin -); - -void -HAL_GPIO_IP_DeInit( - void -); - - - -extern uint16_t GPIOState[_PORT_MAX]; // побитно 16 бит для каждого порта (A..K), бит=номер задействованного пина в порту на периферию. - -#endif // end of "#define _HAL_GPIO_H_" - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_i2c.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_i2c.c deleted file mode 100644 index 6fd05a2..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_i2c.c +++ /dev/null @@ -1,2941 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "rtl8195a.h" -#include -#include "hal_i2c.h" - -#ifdef CONFIG_I2C_EN -//--------------------------------------------------------------------------------------------------- -//External functions -//--------------------------------------------------------------------------------------------------- -extern HAL_TIMER_OP HalTimerOp; - -#define I2C_STATIC_ALLOC 1 -/* I2C SAL global variables declaration when kernel disabled */ -#ifdef I2C_STATIC_ALLOC - HAL_I2C_OP HalI2COpSAL; -#endif - -#if I2C0_USED /*#if I2C0_USED*/ -#ifdef I2C_STATIC_ALLOC - SAL_I2C_MNGT_ADPT SalI2C0MngtAdpt; - - SAL_I2C_HND_PRIV SalI2C0HndPriv; - - HAL_I2C_INIT_DAT HalI2C0InitData; - - IRQ_HANDLE I2C0IrqHandleDat; - - HAL_GDMA_ADAPTER HalI2C0TxGdmaAdpt; - - HAL_GDMA_ADAPTER HalI2C0RxGdmaAdpt; - - HAL_GDMA_OP HalI2C0GdmaOp; - - IRQ_HANDLE I2C0TxGdmaIrqHandleDat; - - IRQ_HANDLE I2C0RxGdmaIrqHandleDat; - - SAL_I2C_USER_CB SalI2C0UserCB; - - SAL_I2C_USERCB_ADPT SalI2C0UserCBAdpt[SAL_USER_CB_NUM]; - - SAL_I2C_DMA_USER_DEF SalI2C0DmaUserDef; -#endif -#endif /*#if I2C0_USED*/ - -#if I2C1_USED /*#if I2C1_USED*/ -#ifdef I2C_STATIC_ALLOC - SAL_I2C_MNGT_ADPT SalI2C1MngtAdpt; - - SAL_I2C_HND_PRIV SalI2C1HndPriv; - - HAL_I2C_INIT_DAT HalI2C1InitData; - - IRQ_HANDLE I2C1IrqHandleDat; - - HAL_GDMA_ADAPTER HalI2C1TxGdmaAdpt; - - HAL_GDMA_ADAPTER HalI2C1RxGdmaAdpt; - - HAL_GDMA_OP HalI2C1GdmaOp; - - IRQ_HANDLE I2C1TxGdmaIrqHandleDat; - - IRQ_HANDLE I2C1RxGdmaIrqHandleDat; - - SAL_I2C_USER_CB SalI2C1UserCB; - - SAL_I2C_USERCB_ADPT SalI2C1UserCBAdpt[SAL_USER_CB_NUM]; - - SAL_I2C_DMA_USER_DEF SalI2C1DmaUserDef; -#endif -#endif /*#if I2C1_USED*/ - -#if I2C2_USED /*#if I2C2_USED*/ -#ifdef I2C_STATIC_ALLOC - - SAL_I2C_MNGT_ADPT SalI2C2MngtAdpt; - - SAL_I2C_HND_PRIV SalI2C2HndPriv; - - HAL_I2C_INIT_DAT HalI2C2InitData; - - IRQ_HANDLE I2C2IrqHandleDat; - - HAL_GDMA_ADAPTER HalI2C2TxGdmaAdpt; - - HAL_GDMA_ADAPTER HalI2C2RxGdmaAdpt; - - HAL_GDMA_OP HalI2C2GdmaOp; - - IRQ_HANDLE I2C2TxGdmaIrqHandleDat; - - IRQ_HANDLE I2C2RxGdmaIrqHandleDat; - - SAL_I2C_USER_CB SalI2C2UserCB; - - SAL_I2C_USERCB_ADPT SalI2C2UserCBAdpt[SAL_USER_CB_NUM]; - - SAL_I2C_DMA_USER_DEF SalI2C2DmaUserDef; -#endif -#endif /*#if I2C2_USED*/ - -#if I2C3_USED /*#if I2C3_USED*/ -#ifdef I2C_STATIC_ALLOC - - SAL_I2C_MNGT_ADPT SalI2C3MngtAdpt; - - SAL_I2C_HND_PRIV SalI2C3HndPriv; - - HAL_I2C_INIT_DAT HalI2C3InitData; - - IRQ_HANDLE I2C3IrqHandleDat; - - HAL_GDMA_ADAPTER HalI2C3TxGdmaAdpt; - - HAL_GDMA_ADAPTER HalI2C3RxGdmaAdpt; - - HAL_GDMA_OP HalI2C3GdmaOp; - - IRQ_HANDLE I2C3TxGdmaIrqHandleDat; - - IRQ_HANDLE I2C3RxGdmaIrqHandleDat; - - SAL_I2C_USER_CB SalI2C3UserCB; - - SAL_I2C_USERCB_ADPT SalI2C3UserCBAdpt[SAL_USER_CB_NUM]; - - SAL_I2C_DMA_USER_DEF SalI2C3DmaUserDef; -#endif -#endif /*#if I2C3_USED*/ - -/* Used only for A~C Version */ -#ifndef CONFIG_CHIP_E_CUT - - - -void -HalI2COpInit_Patch( - IN void *Data -) -{ - PHAL_I2C_OP pHalI2COp = (PHAL_I2C_OP) Data; - - pHalI2COp->HalI2CInit = HalI2CInit8195a_Patch; - DBG_I2C_INFO("HalOpInit->HalI2CInit:%x\n",pHalI2COp->HalI2CInit); - - pHalI2COp->HalI2CDeInit = HalI2CDeInit8195a; - DBG_I2C_INFO("HalOpInit->HalI2CDeInit:%x\n",pHalI2COp->HalI2CDeInit); - - pHalI2COp->HalI2CSend = HalI2CSendRtl8195a_Patch; - DBG_I2C_INFO("HalOpInit->HalI2CSend:%x\n",pHalI2COp->HalI2CSend); - - pHalI2COp->HalI2CReceive = HalI2CReceiveRtl8195a; - DBG_I2C_INFO("HalOpInit->HalI2CReceive:%x\n",pHalI2COp->HalI2CReceive); - - pHalI2COp->HalI2CEnable = HalI2CEnableRtl8195a_Patch; - DBG_I2C_INFO("HalOpInit->HalI2CEnable:%x\n",pHalI2COp->HalI2CEnable); - - pHalI2COp->HalI2CIntrCtrl = HalI2CIntrCtrl8195a; - DBG_I2C_INFO("HalOpInit->HalI2CIntrCtrl:%x\n",pHalI2COp->HalI2CIntrCtrl); - - pHalI2COp->HalI2CReadReg = HalI2CReadRegRtl8195a; - DBG_I2C_INFO("HalOpInit->HalI2CReadReg:%x\n",pHalI2COp->HalI2CReadReg); - - pHalI2COp->HalI2CWriteReg = HalI2CWriteRegRtl8195a; - DBG_I2C_INFO("pHalI2COp->HalI2CWriteReg:%x\n",pHalI2COp->HalI2CWriteReg); - - pHalI2COp->HalI2CSetCLK = HalI2CSetCLKRtl8195a_Patch; - DBG_I2C_INFO("HalOpInit->HalI2CSetCLK:%x\n",pHalI2COp->HalI2CSetCLK); - - pHalI2COp->HalI2CMassSend = HalI2CMassSendRtl8195a_Patch; - DBG_I2C_INFO("HalOpInit->HalI2CMassSend:%x\n",pHalI2COp->HalI2CMassSend); - - pHalI2COp->HalI2CClrIntr = HalI2CClrIntrRtl8195a; - DBG_I2C_INFO("HalOpInit->HalI2CClrIntr:%x\n",pHalI2COp->HalI2CClrIntr); - - pHalI2COp->HalI2CClrAllIntr = HalI2CClrAllIntrRtl8195a; - DBG_I2C_INFO("HalOpInit->HalI2CClrAllIntr:%x\n",pHalI2COp->HalI2CClrAllIntr); - - pHalI2COp->HalI2CDMACtrl = HalI2CDMACtrl8195a; - DBG_I2C_INFO("HalOpInit->HalI2CDMACtrl:%x\n",pHalI2COp->HalI2CDMACtrl); -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// I2CISRHandle -// -// Description: -// I2C Interrupt Service Routine. -// According to the input pointer to SAL_I2C_HND, all the rest pointers will be -// found and be used to the rest part of this servie routine. -// The following types of interrupt will be taken care: -// - General Call (providing General Call Callback). Slave receives a general call. -// - STOP Bit (NOT providing General Call Callback) -// - START Bit (NOTproviding General Call Callback) -// - I2C Activity (NOTproviding General Call Callback) -// - RX Done (providing Error Callback). The slave transmitter does NOT -// receive a proper NACK for the end of whole transfer. -// - TX Abort (providing Error Call Callback). The Master/Slave -// transmitting is terminated. -// - RD Req (providing TX and TXC Callback). Slave gets a Read Request -// and starts a slave-transmitter operation. The slave transmit -// data will be written into slave TX FIFO from user data buffer. -// - TX Empty (providing TX and TXC Callback). Master TX FIFO is empty. -// The user transmit data will be written into master TX FIFO -// from user data buffer. -// - TX Over (providing Error Callback). Master TX FIFO is Overflow. -// - RX Full (providing RX and RXC Callback). Master/Slave RX FIFO contains -// data. And the received data will be put into Master/Slave user -// receive data buffer. -// - RX Over (providing Error Callback). Master/Slave RX FIFO is Overflow. -// - RX Under (providing Error Callback). Master/Slave RX FIFO is Underflow. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// NA -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//---------------------------------------------------------------------------------------------------- -void -I2CISRHandle_Patch( - IN void *Data -){ - PSAL_I2C_HND pSalI2CHND = (PSAL_I2C_HND) Data; - PSAL_I2C_HND_PRIV pSalI2CHNDPriv = NULL; - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PHAL_I2C_INIT_DAT pHalI2CInitDat = NULL; - PHAL_I2C_OP pHalI2COP = NULL; - PSAL_I2C_USER_CB pSalI2CUserCB = NULL; - uint32_t I2CLocalTemp = 0; - uint32_t I2CInTOTcnt = 0; - uint32_t I2CIrqIdx = 0; - uint32_t InTimeoutCount = 0; - uint32_t InStartCount = 0; - volatile uint32_t I2CLocalRawSts = 0; - uint32_t I2CStsTmp = 0; - - /* To get the SAL_I2C_MNGT_ADPT pointer, and parse the rest pointers */ - pSalI2CHNDPriv = CONTAINER_OF(pSalI2CHND, SAL_I2C_HND_PRIV, SalI2CHndPriv); - pSalI2CMngtAdpt = CONTAINER_OF(pSalI2CHNDPriv->ppSalI2CHnd, SAL_I2C_MNGT_ADPT, pSalHndPriv); - pHalI2CInitDat = pSalI2CMngtAdpt->pHalInitDat; - pHalI2COP = pSalI2CMngtAdpt->pHalOp; - I2CInTOTcnt = pSalI2CMngtAdpt->InnerTimeOut; - I2CIrqIdx = pHalI2CInitDat->I2CIdx; - pSalI2CUserCB = pSalI2CHND->pUserCB; - - /* I2C General Call Intr*/ - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_INTR_STAT) & - BIT_CTRL_IC_INTR_STAT_R_GEN_CALL(1)) { - - DBG_I2C_WARN("I2C%d INTR_GEN_CALL\n",I2CIrqIdx); - - /* Clear I2C interrupt */ - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_GEN_CALL; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - - /* Invoke I2C General Call callback if available*/ - if (pSalI2CUserCB->pGENCALLCB->USERCB != NULL) { - pSalI2CUserCB->pGENCALLCB->USERCB((void *)pSalI2CUserCB->pGENCALLCB->USERData); - } - } - - /* I2C START DET Intr */ - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_INTR_STAT) & - BIT_CTRL_IC_INTR_STAT_R_START_DET(1)) { - - DBG_I2C_WARN("I2C%d INTR_START_DET\n",I2CIrqIdx); - - /* Clear I2C interrupt */ - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_START_DET; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - } - - /* I2C STOP DET Intr */ - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_INTR_STAT) & - BIT_CTRL_IC_INTR_STAT_R_STOP_DET(1)) { - - DBG_I2C_WARN("I2C%d INTR_STOP_DET\n",I2CIrqIdx); - - /* Clear I2C interrupt */ - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_STOP_DET; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - } - - /* I2C Activity Intr */ - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_INTR_STAT) & - BIT_CTRL_IC_INTR_STAT_R_ACTIVITY(1)) { - - DBG_I2C_WARN("I2C%d INTR_ACTIVITY\n",I2CIrqIdx); - - /* Clear I2C interrupt */ - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_ACTIVITY; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - } - - /* I2C RX Done Intr */ - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_INTR_STAT) & - BIT_CTRL_IC_INTR_STAT_R_RX_DONE(1)) { - if ((pSalI2CHND->DevSts == I2C_STS_TX_READY) || (pSalI2CHND->DevSts == I2C_STS_TX_ING)) { - /* Disable I2C TX Related Interrupts */ - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_INTR_MASK); - I2CLocalTemp &= ~(BIT_IC_INTR_MASK_M_TX_ABRT | - BIT_IC_INTR_MASK_M_TX_OVER | - BIT_IC_INTR_MASK_M_RX_DONE | - BIT_IC_INTR_MASK_M_RD_REQ); - pHalI2CInitDat->I2CIntrMSK = I2CLocalTemp; - pHalI2COP->HalI2CIntrCtrl(pHalI2CInitDat); - pHalI2COP->HalI2CClrAllIntr(pHalI2CInitDat); - - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_IDLE; - - /* Invoke I2C TX complete callback if available */ - if (pSalI2CUserCB->pTXCCB->USERCB != NULL) - pSalI2CUserCB->pTXCCB->USERCB((void *)pSalI2CUserCB->pTXCCB->USERData); - } else { - DBG_I2C_ERR("I2C%d INTR_RX_DONE\n",I2CIrqIdx); - DBG_I2C_ERR("I2C%d IC_TXFLR:%2x\n",I2CIrqIdx, - pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_TXFLR)); - - /* Clear I2C interrupt */ - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_RX_DONE; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_ERROR; - - /* Update I2C error type */ - pSalI2CHND->ErrType |= I2C_ERR_SLV_TX_NACK; - - /* Invoke I2C error callback if available */ - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - } - } - - /* I2C TX Abort Intr */ - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_INTR_STAT) & - BIT_CTRL_IC_INTR_STAT_R_TX_ABRT(1)) { - I2CStsTmp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_TX_ABRT_SOURCE); - DBG_I2C_ERR("!I2C%d INTR_TX_ABRT!\n",I2CIrqIdx); - DBG_I2C_ERR("I2C%d IC_TX_ABRT_SOURCE[%2x]: %x\n", I2CIrqIdx, REG_DW_I2C_IC_TX_ABRT_SOURCE, I2CStsTmp); - DBG_I2C_ERR("Dev Sts:%x\n",pSalI2CHND->DevSts); - DBG_I2C_ERR("rx len:%x\n",pSalI2CHND->pRXBuf->DataLen); - DBG_I2C_ERR("tx len:%x\n",pSalI2CHND->pTXBuf->DataLen); - DBG_I2C_ERR("raw sts:%x\n",pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_RAW_INTR_STAT)); - DBG_I2C_ERR("ic sts:%x\n",pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS)); - /* Clear I2C Interrupt */ - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_TX_ABRT; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - I2CLocalTemp = pSalI2CHND->DevSts; - - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_ERROR; - - /* Update I2C error type */ - if ((I2CStsTmp & (BIT_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK | - BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK | - BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK)) != 0) { - pSalI2CHND->ErrType |= I2C_ERR_MST_A_NACK; - } - else if ((I2CStsTmp & BIT_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK) != 0){ - pSalI2CHND->ErrType |= I2C_ERR_MST_D_NACK; - } - else { - pSalI2CHND->ErrType |= I2C_ERR_TX_ABRT; - } - - - /* Invoke I2C error callback */ - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - - if (pSalI2CHND->I2CExd & I2C_EXD_MTR_ADDR_RTY) { - if (pSalI2CHND->I2CMaster == I2C_MASTER_MODE) { - if ((I2CLocalTemp == I2C_STS_RX_READY) || (I2CLocalTemp == I2C_STS_RX_ING)) { - /* Clear Abort source */ - pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_CLR_TX_ABRT); - - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_RX_ING; - - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS) - & BIT_IC_STATUS_TFNF) { - if (pSalI2CMngtAdpt->MstRDCmdCnt > 0) { - pHalI2CInitDat->I2CCmd = I2C_READ_CMD; - pHalI2CInitDat->I2CDataLen= 1; - pHalI2CInitDat->I2CRWData = pSalI2CHND->pRXBuf->pDataBuf; - pHalI2CInitDat->I2CStop = I2C_STOP_DIS; - if ((pSalI2CMngtAdpt->MstRDCmdCnt == 1) && ((pSalI2CHND->I2CExd & I2C_EXD_MTR_HOLD_BUS) == 0)) - pHalI2CInitDat->I2CStop = I2C_STOP_EN; - pSalI2CMngtAdpt->MstRDCmdCnt--; - pHalI2COP->HalI2CMassSend(pHalI2CInitDat); - } - - } - } - else if ((I2CLocalTemp == I2C_STS_TX_READY) || (I2CLocalTemp == I2C_STS_TX_ING)){ - /* Clear Abort source */ - pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_CLR_TX_ABRT); - - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_TX_ING; - - /* Return to the former transfer status */ - pSalI2CHND->pTXBuf->pDataBuf--; - pSalI2CHND->pTXBuf->DataLen++; - - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS) - & BIT_IC_STATUS_TFNF) { - pHalI2CInitDat->I2CCmd = I2C_WRITE_CMD; - pHalI2CInitDat->I2CDataLen= 1; - pHalI2CInitDat->I2CRWData = pSalI2CHND->pTXBuf->pDataBuf; - pHalI2CInitDat->I2CStop = I2C_STOP_DIS; - if ((pSalI2CHND->pTXBuf->DataLen == 1) && ((pSalI2CHND->I2CExd & I2C_EXD_MTR_HOLD_BUS) == 0)) - pHalI2CInitDat->I2CStop = I2C_STOP_EN; - - pHalI2COP->HalI2CMassSend(pHalI2CInitDat); - - pSalI2CHND->pTXBuf->pDataBuf++; - pSalI2CHND->pTXBuf->DataLen--; - } - } - } - } - } - - /* I2C RD REQ Intr */ - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_INTR_STAT) & - BIT_CTRL_IC_INTR_STAT_R_RD_REQ(1)) { - /* Confirm it's slave mode */ - if (pSalI2CHND->I2CMaster == I2C_SLAVE_MODE) { - if (pSalI2CHND->DevSts == I2C_STS_IDLE) { - /* Disable I2C RD REQ Interrupts first */ - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_INTR_MASK); - I2CLocalTemp &= ~(BIT_IC_INTR_MASK_M_RD_REQ); - pHalI2CInitDat->I2CIntrMSK = I2CLocalTemp; - pHalI2COP->HalI2CIntrCtrl(pHalI2CInitDat); - - /* Invoke I2C rd req callback if available */ - if (pSalI2CUserCB->pRDREQCB->USERCB != NULL) - pSalI2CUserCB->pRDREQCB->USERCB((void *)pSalI2CUserCB->pRDREQCB->USERData); - } else if ((pSalI2CHND->DevSts == I2C_STS_TX_READY) || (pSalI2CHND->DevSts == I2C_STS_TX_ING)) { - if (pSalI2CHND->pTXBuf->DataLen>0) { - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_TX_ING; - - /* Invoke I2C TX callback if available */ - if (pSalI2CUserCB->pTXCB->USERCB != NULL) - pSalI2CUserCB->pTXCB->USERCB((void *)pSalI2CUserCB->pTXCB->USERData); - - /* I2C Slave transmits data to Master. If the TX FIFO is NOT full, - write one byte from slave TX buffer to TX FIFO. */ - if ((pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_STATUS) - & (BIT_IC_STATUS_TFNF)) == BIT_IC_STATUS_TFNF) { - pHalI2CInitDat->I2CCmd = I2C_WRITE_CMD; - pHalI2CInitDat->I2CDataLen= 1; - pHalI2CInitDat->I2CRWData = pSalI2CHND->pTXBuf->pDataBuf; - pHalI2CInitDat->I2CStop = I2C_STOP_DIS; - if ((pSalI2CHND->pTXBuf->DataLen == 1) && ((pSalI2CHND->I2CExd & I2C_EXD_MTR_HOLD_BUS) == 0)) - pHalI2CInitDat->I2CStop = I2C_STOP_EN; - - pHalI2COP->HalI2CMassSend(pHalI2CInitDat); - - pSalI2CHND->pTXBuf->pDataBuf++; - pSalI2CHND->pTXBuf->DataLen--; - } - } - - /* To clear Read Request Intr */ - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_RD_REQ; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - - /* To check I2C slave TX data length. If all the data are transmitted, - mask all the interrupts and invoke the user callback */ - if (!pSalI2CHND->pTXBuf->DataLen) { - /* This is a software patch */ - pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_RAW_INTR_STAT); - HalDelayUs(1000); - - /* Disable I2C TX Related Interrupts */ - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_INTR_MASK); - I2CLocalTemp &= ~(BIT_IC_INTR_MASK_M_TX_ABRT | - BIT_IC_INTR_MASK_M_TX_OVER | - BIT_IC_INTR_MASK_M_RX_DONE | - BIT_IC_INTR_MASK_M_RD_REQ); - pHalI2CInitDat->I2CIntrMSK = I2CLocalTemp; - pHalI2COP->HalI2CIntrCtrl(pHalI2CInitDat); - pHalI2COP->HalI2CClrAllIntr(pHalI2CInitDat); - - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_IDLE; - - /* Invoke I2C TX complete callback if available */ - if (pSalI2CUserCB->pTXCCB->USERCB != NULL) - pSalI2CUserCB->pTXCCB->USERCB((void *)pSalI2CUserCB->pTXCCB->USERData); - } - } - } - } - - /* I2C TX Empty Intr */ - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_INTR_STAT) & - BIT_CTRL_IC_INTR_STAT_R_TX_EMPTY(1)) { - /* Confirm it's master mode */ - if (pSalI2CHND->I2CMaster == I2C_MASTER_MODE) { - - /* To check I2C master TX data length. If all the data are transmitted, - mask all the interrupts and invoke the user callback */ - if (!pSalI2CHND->pTXBuf->DataLen) { - /* I2C Disable TX Related Interrupts */ - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_INTR_MASK); - I2CLocalTemp &= ~(BIT_IC_INTR_MASK_M_TX_ABRT | - BIT_IC_INTR_MASK_M_TX_EMPTY | - BIT_IC_INTR_MASK_M_TX_OVER); - pHalI2CInitDat->I2CIntrMSK = I2CLocalTemp; - pHalI2COP->HalI2CIntrCtrl(pHalI2CInitDat); - - /* Clear all I2C pending interrupts */ - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_IDLE; - - /* Invoke I2C TX Complete callback */ - if (pSalI2CUserCB->pTXCCB->USERCB != NULL) - pSalI2CUserCB->pTXCCB->USERCB((void *)pSalI2CUserCB->pTXCCB->USERData); - } - - if (pSalI2CHND->pTXBuf->DataLen > 0) { - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_TX_ING; - - /* Invoke I2C TX callback if available */ - if (pSalI2CUserCB->pTXCB->USERCB != NULL) - pSalI2CUserCB->pTXCB->USERCB((void *)pSalI2CUserCB->pTXCB->USERData); - - /* Check I2C TX FIFO status. If it's not full, one byte data will be written into it. */ - if ((pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_STATUS) - & (BIT_IC_STATUS_TFNF)) == BIT_IC_STATUS_TFNF) { - pHalI2CInitDat->I2CCmd = I2C_WRITE_CMD; - pHalI2CInitDat->I2CDataLen= 1; - pHalI2CInitDat->I2CRWData = pSalI2CHND->pTXBuf->pDataBuf; - pHalI2CInitDat->I2CStop = I2C_STOP_DIS; - pHalI2CInitDat->I2CReSTR = 1; - if ((pSalI2CHND->pTXBuf->DataLen == 1) && ((pSalI2CHND->I2CExd & I2C_EXD_MTR_HOLD_BUS) == 0)) - pHalI2CInitDat->I2CStop = I2C_STOP_EN; - - pHalI2COP->HalI2CMassSend(pHalI2CInitDat); - - pSalI2CHND->pTXBuf->pDataBuf++; - pSalI2CHND->pTXBuf->DataLen--; - - } - } - }/*if (pSalI2CHND->I2CMaster == I2C_MASTER_MODE)*/ - } - - /* I2C TX Over Run Intr */ - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_INTR_STAT) & - BIT_CTRL_IC_INTR_STAT_R_TX_OVER(1)) { - - DBG_I2C_ERR("!I2C%d INTR_TX_OVER!\n",I2CIrqIdx); - - /* Clear I2C interrupt */ - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_TX_OVER; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_ERROR; - - /* Update I2C error type */ - pSalI2CHND->ErrType |= I2C_ERR_TX_OVER; - - /* Invoke I2C error callback if available */ - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - } - - /* I2C RX Full Intr */ - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_INTR_STAT) & - BIT_CTRL_IC_INTR_STAT_R_RX_FULL(1)) { - /* Check if it's Master */ - if (pSalI2CHND->I2CMaster == I2C_MASTER_MODE){ - - //DBG_8195A("full\n"); - /* Check if the receive transfer is NOT finished. If it is not, check if there - is data in the RX FIFO and move the data from RX FIFO to user data buffer*/ - if (pSalI2CHND->pRXBuf->DataLen > 0) { - - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_RX_ING; - - /* Invoke I2C RX callback if available */ - if (pSalI2CUserCB->pRXCB->USERCB != NULL) - pSalI2CUserCB->pRXCB->USERCB((void *)pSalI2CUserCB->pRXCB->USERData); - - I2CInTOTcnt = (uint32_t)pSalI2CMngtAdpt->InnerTimeOut; - InTimeoutCount = 0; - /* Calculate internal time out parameters */ - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - - while (1) { - I2CLocalRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS); - if ((I2CLocalRawSts & (BIT_IC_STATUS_RFNE | BIT_IC_STATUS_RFF)) != 0) { - *(pSalI2CHND->pRXBuf->pDataBuf) = - pHalI2COP->HalI2CReceive(pHalI2CInitDat); - //DBG_8195A("rx:%x\n",*(pSalI2CHND->pRXBuf->pDataBuf)); - pSalI2CHND->pRXBuf->pDataBuf++; - pSalI2CHND->pRXBuf->DataLen--; - - if ((pSalI2CHND->pRXBuf->DataLen) == 0) - break; - } - else if ((pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_RAW_INTR_STAT) - & (BIT_IC_RAW_INTR_STAT_RX_OVER | BIT_IC_RAW_INTR_STAT_RX_UNDER)) != 0) { - break; - } - else { - if ((pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS) & BIT_IC_STATUS_RFNE) - == 0){ - break; - } - } - - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_RX_FF_TO; - DBG_I2C_ERR("RX Full Timeout, I2C%2x,1\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - break; - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_RX_FF_TO; - DBG_I2C_ERR("RX Full Timeout, I2C%2x,2\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - break; - } - } - } - } - - /* To check I2C master RX data length. If all the data are received, - mask all the interrupts and invoke the user callback. - Otherwise, the master should send another Read Command to slave for - the next data byte receiving. */ - if (!pSalI2CHND->pRXBuf->DataLen) { - /* I2C Disable RX Related Interrupts */ - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_INTR_MASK); - I2CLocalTemp &= ~(BIT_IC_INTR_MASK_M_RX_FULL | - BIT_IC_INTR_MASK_M_RX_OVER | - BIT_IC_INTR_MASK_M_RX_UNDER| - BIT_IC_INTR_MASK_M_TX_ABRT); - - pHalI2CInitDat->I2CIntrMSK = I2CLocalTemp; - pHalI2COP->HalI2CIntrCtrl(pHalI2CInitDat); - - /* Clear all I2C pending interrupts */ - pHalI2COP->HalI2CClrAllIntr(pHalI2CInitDat); - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_IDLE; - - /* Invoke I2C RX complete callback if available */ - if (pSalI2CUserCB->pRXCCB->USERCB != NULL) - pSalI2CUserCB->pRXCCB->USERCB((void *)pSalI2CUserCB->pRXCCB->USERData); - } - else { - /* If TX FIFO is not full, another Read Command is written into it. */ - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS) - & BIT_IC_STATUS_TFNF) { - if (pSalI2CMngtAdpt->MstRDCmdCnt > 0) { - pHalI2CInitDat->I2CCmd = I2C_READ_CMD; - pHalI2CInitDat->I2CDataLen= 1; - pHalI2CInitDat->I2CRWData = pSalI2CHND->pRXBuf->pDataBuf; - pHalI2CInitDat->I2CStop = I2C_STOP_DIS; - pHalI2CInitDat->I2CReSTR = 1; - if ((pSalI2CMngtAdpt->MstRDCmdCnt == 1) && ((pSalI2CHND->I2CExd & I2C_EXD_MTR_HOLD_BUS) == 0)){ - pHalI2CInitDat->I2CStop = I2C_STOP_EN; - } - pSalI2CMngtAdpt->MstRDCmdCnt--; - pHalI2COP->HalI2CMassSend(pHalI2CInitDat); - } - } - } - - }/*(pSalI2CHND->I2CMaster == I2C_MASTER_MODE)*/ - else{ - /* To check I2C master RX data length. If all the data are received, - mask all the interrupts and invoke the user callback. - Otherwise, if there is data in the RX FIFO and move the data from RX - FIFO to user data buffer*/ - if (pSalI2CHND->pRXBuf->DataLen > 0){ - - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_RX_ING; - - /* Invoke I2C RX callback if available */ - if (pSalI2CUserCB->pRXCB->USERCB != NULL) - pSalI2CUserCB->pRXCB->USERCB((void *)pSalI2CUserCB->pRXCB->USERData); - - if ((pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS) - & (BIT_IC_STATUS_RFNE | BIT_IC_STATUS_RFF)) != 0) { - *(pSalI2CHND->pRXBuf->pDataBuf) = - pHalI2COP->HalI2CReceive(pHalI2CInitDat); - pSalI2CHND->pRXBuf->pDataBuf++; - pSalI2CHND->pRXBuf->DataLen--; - } - } - - /* All data are received. Mask all related interrupts. */ - if (!pSalI2CHND->pRXBuf->DataLen){ - /*I2C Disable RX Related Interrupts*/ - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_INTR_MASK); - I2CLocalTemp &= ~(BIT_IC_INTR_MASK_M_RX_FULL | - BIT_IC_INTR_MASK_M_RX_OVER | - BIT_IC_INTR_MASK_M_RX_UNDER); - - pHalI2CInitDat->I2CIntrMSK = I2CLocalTemp; - pHalI2COP->HalI2CIntrCtrl(pHalI2CInitDat); - - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_IDLE; - - /* Invoke I2C RX complete callback if available */ - if (pSalI2CUserCB->pRXCCB->USERCB != NULL) - pSalI2CUserCB->pRXCCB->USERCB((void *)pSalI2CUserCB->pRXCCB->USERData); - } - } - } - - /*I2C RX Over Run Intr*/ - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_INTR_STAT) & - BIT_CTRL_IC_INTR_STAT_R_RX_OVER(1)) { - - DBG_I2C_ERR("I2C%d INTR_RX_OVER\n",I2CIrqIdx); - - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_RX_OVER; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_ERROR; - - /* Update I2C error type */ - pSalI2CHND->ErrType |= I2C_ERR_RX_OVER; - - /* Invoke I2C error callback if available */ - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - } - - /*I2C RX Under Run Intr*/ - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_INTR_STAT) & - BIT_CTRL_IC_INTR_STAT_R_RX_UNDER(1)) { - - DBG_I2C_ERR("!I2C%d INTR_RX_UNDER!\n",I2CIrqIdx); - - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_RX_UNDER; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - - /* Update I2C device status */ - pSalI2CHND->DevSts = I2C_STS_ERROR; - - /* Update I2C error type */ - pSalI2CHND->ErrType |= I2C_ERR_RX_UNDER; - - /* Invoke I2C error callback if available */ - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - } -} -#endif - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CSend -// -// Description: -// To execute Master-Transmitter and Slave-Transmitter operation. -// There are 3 operation mode in this function which are separated by compile-time -// flag. -// For Master-Transmitter, the User Register Address flag is checked first. -// User Register Address may be sent before any formal transfer, no matter in -// Poll-, Intr- or DMA- Mode. -// -// In Poll-Mode, no matter it's master or slave mode, the transfer will be done in -// this function by checking the transfer length. -// -Master in Poll-Mode: -// a. Send the User Register Address if needed. -// b. Check if all the data are transmitted. If it's NOT, checking the TX FIFO -// status is done for writing data from user TX buffer to I2C TX FIFO when -// TX FIFO is NOT full. -// TX data length decrements one after writing one byte into TX FIFO. -// c. b is executed circularly till the TX buffer data length is zero. -// -// -Slave in Poll-Mode: -// Slave could send data only when it received a Read Commmand matched -// with its own I2C address from other I2C master. Once a slave correctly -// received a Read Command matched with its own addr., a Read-Request -// flag is set at the same time. -// In this Poll-Mode, the slave checks the Read-Request flag to decide -// if it could send its TX buffer data. -// a. Check if the Read-Request flag is set or not. If the flag is set, it should -// check if TX buffer data length is zero. If it's NOT, -// the I2C TX FIFO status will be checked for the following operation. -// b. If the TX FIFO is NOT empty, slave will write one byte data from TX data -// buffer to TX FIFO. -// c. a and b are executed circularly till the TX buffer data length is zero. -//---------------------------------------------------------------------- -// In Intr-Mode, this function is used to unmask the realted I2C interrupt for -// the following interrupt operations. -// -Master in Intr-Mode: -// a. Send the User Register Address if needed. -// b. Unmask the TX-Empty and realted error interrupts. -// -// -Slave in Intr-Mode: -// a. Unmask the RD-Req and realted error interrupts. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C send process. -// _EXIT_SUCCESS if the RtkI2CSend succeeded. -// _EXIT_FAILURE if the RtkI2CSend failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -HAL_Status -RtkI2CSend_Patch( - IN void *Data -){ - PSAL_I2C_HND pSalI2CHND = (PSAL_I2C_HND) Data; - PSAL_I2C_HND_PRIV pSalI2CHNDPriv = NULL; - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PHAL_I2C_INIT_DAT pHalI2CInitDat = NULL; - PHAL_I2C_OP pHalI2COP = NULL; - - PHAL_GDMA_ADAPTER pHalI2CTxGdmaAdpt = NULL; - PHAL_GDMA_OP pHalI2CGdmaOp = NULL; - PSAL_I2C_USER_CB pSalI2CUserCB = NULL; - - uint32_t I2CLocalTemp = 0; - uint32_t I2CInTOTcnt = 0; - uint32_t InTimeoutCount = 0; - uint32_t InStartCount = 0; - uint32_t I2CChkRawSts = 0; - uint32_t I2CChkRawSts2 = 0; - uint32_t I2CDataLenBak = 0; - uint32_t I2CDataPtrBak = 0; - //uint32_t I2CInTOTcntIntr = 0; - //uint32_t InTimeoutCountIntr = 0; - //uint32_t InStartCountIntr = 0; - uint32_t I2CMtrTtyCnt = 0; - - /* To Get the SAL_I2C_MNGT_ADPT Pointer */ - pSalI2CHNDPriv = CONTAINER_OF(pSalI2CHND, SAL_I2C_HND_PRIV, SalI2CHndPriv); - pSalI2CMngtAdpt = CONTAINER_OF(pSalI2CHNDPriv->ppSalI2CHnd, SAL_I2C_MNGT_ADPT, pSalHndPriv); - - - - pHalI2CInitDat = pSalI2CMngtAdpt->pHalInitDat; - - pHalI2COP = pSalI2CMngtAdpt->pHalOp; - pSalI2CUserCB = pSalI2CHND->pUserCB; - - pHalI2CTxGdmaAdpt = pSalI2CMngtAdpt->pHalTxGdmaAdp; - pHalI2CGdmaOp = pSalI2CMngtAdpt->pHalGdmaOp; - - /* Check if it's Master Mode */ - if (pSalI2CHND->I2CMaster == I2C_MASTER_MODE) { - I2CMtrTtyCnt = 0; - - /* Master run-time update target address */ - if (pSalI2CHND->I2CExd & I2C_EXD_MTR_ADDR_UPD) { - - /* Calculate user time out parameters */ - I2CInTOTcnt = pSalI2CHND->TimeOut; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - - /* Check Master activity status */ - while ((pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS)) & BIT_IC_STATUS_MST_ACTIVITY) { - /* Time-Out check */ - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_ADD_TO; - DBG_I2C_ERR("RtkI2CSend Timeout, I2C%2x,1\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_ADD_TO; - DBG_I2C_ERR("RtkI2CSend Timeout, I2C%2x,2\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - } - /* Calculate user time out parameters */ - I2CInTOTcnt = pSalI2CHND->TimeOut; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - - /* Check TX FIFO status */ - while (!((pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS)) & BIT_IC_STATUS_TFE)) { - /* Time-Out check */ - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_ADD_TO; - DBG_I2C_ERR("RtkI2CSend Timeout, I2C%2x,3\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_ADD_TO; - DBG_I2C_ERR("RtkI2CSend Timeout, I2C%2x,4\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - } - - I2CLocalTemp = 0; - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_TAR); - I2CLocalTemp &= (~BIT_MASK_IC_TAR); - I2CLocalTemp |= BIT_CTRL_IC_TAR(pSalI2CHND->pTXBuf->TargetAddr); - /* Update Master Target address */ - pHalI2COP->HalI2CWriteReg(pHalI2CInitDat, REG_DW_I2C_IC_TAR, I2CLocalTemp); - } - - RtkI2CSendUserAddr(pSalI2CHND, 0); - - /* #if I2C_POLL_OP_TYPE */ - if (pSalI2CHND->OpType == I2C_POLL_TYPE) { /* if (pSalI2CHND->OpType == I2C_POLL_TYPE) */ - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_TX_READY; - - /* Calculate user time out parameters */ - I2CInTOTcnt = pSalI2CHND->TimeOut; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - - /* Send data till the TX buffer data length is zero */ - for (;pSalI2CHND->pTXBuf->DataLen>0;) { - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_TX_ING; - - /* Check I2C TX FIFO status */ - if ((pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_STATUS) - & (BIT_IC_STATUS_TFNF)) == BIT_IC_STATUS_TFNF) { - /* Wrtie data into I2C TX FIFO */ - pHalI2CInitDat->I2CCmd = I2C_WRITE_CMD; - pHalI2CInitDat->I2CDataLen= 1; - pHalI2CInitDat->I2CRWData = pSalI2CHND->pTXBuf->pDataBuf; - pHalI2CInitDat->I2CStop = I2C_STOP_DIS; - if ((pSalI2CHND->pTXBuf->DataLen == 1) && ((pSalI2CHND->I2CExd & I2C_EXD_MTR_HOLD_BUS) == 0)) - pHalI2CInitDat->I2CStop = I2C_STOP_EN; - pHalI2COP->HalI2CMassSend(pHalI2CInitDat); - - pSalI2CHND->pTXBuf->pDataBuf++; - pSalI2CHND->pTXBuf->DataLen--; - } - else { - /* Time-Out check */ - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_CMD_TO; - DBG_I2C_ERR("RtkI2CSend Timeout, I2C%2x,5\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_CMD_TO; - DBG_I2C_ERR("RtkI2CSend Timeout, I2C%2x,6\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - } - - if (pSalI2CHND->I2CExd & I2C_EXD_MTR_ADDR_RTY) { - HalDelayUs(((1000*30)/pHalI2CInitDat->I2CClk)); //the 10 is for ten bit time - I2CLocalTemp = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_RAW_INTR_STAT); - if (I2CLocalTemp & BIT_IC_RAW_INTR_STAT_TX_ABRT) { - I2CMtrTtyCnt++; - I2CLocalTemp = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_TX_ABRT_SOURCE); - if (I2CMtrTtyCnt > I2C_MTR_RTY_CNT) { - if ((I2CLocalTemp & (BIT_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK | - BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK | - BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK)) != 0) { - pSalI2CHND->ErrType |= I2C_ERR_MST_A_NACK; - } - else if ((I2CLocalTemp & BIT_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK) != 0){ - pSalI2CHND->ErrType |= I2C_ERR_MST_D_NACK; - } - else { - pSalI2CHND->ErrType |= I2C_ERR_TX_ABRT; - } - - pSalI2CHND->DevSts = I2C_STS_ERROR; - pSalI2CHND->pTXBuf->pDataBuf--; - pSalI2CHND->pTXBuf->DataLen++; - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_ERR_HW; - } - pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_CLR_TX_ABRT); - pSalI2CHND->pTXBuf->pDataBuf--; - pSalI2CHND->pTXBuf->DataLen++; - } - } - } - - /* Calculate user time out parameters */ - I2CInTOTcnt = pSalI2CMngtAdpt->InnerTimeOut; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - /* I2C Wait TX FIFO Empty */ - while (1) { - if ((pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_STATUS) - & (BIT_IC_STATUS_TFE | BIT_IC_STATUS_TFNF)) == - (BIT_IC_STATUS_TFE | BIT_IC_STATUS_TFNF)){ - break; - } - else { - /* Time-Out check */ - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_FF_TO; - DBG_I2C_ERR("RtkI2CSend Timeout, I2C%2x,7\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_FF_TO; - DBG_I2C_ERR("RtkI2CSend Timeout, I2C%2x,8\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - } - } - - /* Invoke I2C TX complete callback if available */ - if (pSalI2CUserCB->pTXCCB->USERCB != NULL) - pSalI2CUserCB->pTXCCB->USERCB((void *)pSalI2CUserCB->pTXCCB->USERData); - - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_IDLE; - }/* if (pSalI2CHND->OpType == I2C_POLL_TYPE) */ - /* #if I2C_POLL_OP_TYPE */ - -#if I2C_INTR_OP_TYPE - if (pSalI2CHND->OpType == I2C_INTR_TYPE) { /* if (pSalI2CHND->OpType == I2C_INTR_TYPE) */ - /* Calculate user time out parameters */ - InTimeoutCount = 0; - InStartCount = 0; - I2CInTOTcnt = pSalI2CHND->TimeOut; - - //InTimeoutCountIntr = 0; - //InStartCountIntr = 0; - //I2CInTOTcntIntr = pSalI2CHND->AddRtyTimeOut; - - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - - //InTimeoutCountIntr = (I2CInTOTcntIntr*1000/TIMER_TICK_US); - //InStartCountIntr = HalTimerOp.HalTimerReadCount(1); - - - I2CDataLenBak = (uint32_t)(pSalI2CHND->pTXBuf->DataLen); - I2CDataPtrBak = (uint32_t)(pSalI2CHND->pTXBuf->pDataBuf); - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_IDLE; - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_TX_ABRT; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - pHalI2COP->HalI2CClrAllIntr(pHalI2CInitDat); - - /* Send data till the TX buffer data length is zero */ - for (;;) { -SEND_I2C_WR_CMD_INTR: - - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_TX_ING; - - /* Check I2C TX FIFO status */ - /* Fill TX FIFO only when it's completely empty */ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS); - if ((I2CChkRawSts & BIT_IC_STATUS_TFE) == BIT_IC_STATUS_TFE) { - if (pSalI2CHND->pTXBuf->DataLen > 0) { - /* Wrtie data into I2C TX FIFO */ - pHalI2CInitDat->I2CCmd = I2C_WRITE_CMD; - pHalI2CInitDat->I2CDataLen= 1; - pHalI2CInitDat->I2CRWData = pSalI2CHND->pTXBuf->pDataBuf; - pHalI2CInitDat->I2CStop = I2C_STOP_DIS; - - if ((pSalI2CHND->pTXBuf->DataLen == 1) && ((pSalI2CHND->I2CExd & I2C_EXD_MTR_HOLD_BUS) == 0)) - pHalI2CInitDat->I2CStop = I2C_STOP_EN; - - if ((pHalI2CInitDat->I2CReSTR == 1) && (pSalI2CHND->pTXBuf->DataLen == I2CDataLenBak)){ - pHalI2CInitDat->RSVD0 |= BIT0; - } - - pHalI2COP->HalI2CMassSend(pHalI2CInitDat); - - pSalI2CHND->pTXBuf->pDataBuf++; - pSalI2CHND->pTXBuf->DataLen--; - - if (pHalI2CInitDat->I2CReSTR == 1) { - pHalI2CInitDat->RSVD0 &= (~BIT0); - } - } - } - - if (pSalI2CHND->I2CExd & I2C_EXD_MTR_ADDR_RTY) { - uint32_t I2CInTOTcntRty = 0; - uint32_t InTimeoutCountRty = 0; - uint32_t InStartCountRty = 0; - -#if 0 - /* SEND_I2C_WR_CMD_INTR Time-Out check */ - if (InTimeoutCountIntr > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCountIntr, InTimeoutCountIntr)) { - /* Reset the data count before status return */ - pSalI2CHND->pTXBuf->pDataBuf--; - pSalI2CHND->pTXBuf->DataLen++; - return HAL_TIMEOUT; - } - } -#endif - /* Calculate user master retry local time out parameters */ - InTimeoutCountRty = 0; - InStartCountRty = 0; - I2CInTOTcntRty = pSalI2CHND->TimeOut; - - if ((I2CInTOTcntRty != 0) && (I2CInTOTcntRty!= I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCountRty= (I2CInTOTcntRty*1000/TIMER_TICK_US); - InStartCountRty= HalTimerOp.HalTimerReadCount(1); - } - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS); - while ((I2CChkRawSts & BIT_IC_STATUS_TFE) == 0) { - I2CChkRawSts2 = pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_RAW_INTR_STAT); - if ((I2CChkRawSts2 & BIT_IC_RAW_INTR_STAT_TX_ABRT) != 0){ - break; - } - - /* Time-Out check */ - if (InTimeoutCountRty > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCountRty, InTimeoutCountRty)) { - break; - } - } - else { - if (I2CInTOTcntRty == 0) { - break; - } - } - - /* Read I2C IC status again */ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS); - } - - HalDelayUs((uint32_t)((1000*30)/pHalI2CInitDat->I2CClk)); //the 10 is for ten bit time - - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_RAW_INTR_STAT); - if (I2CChkRawSts & BIT_IC_RAW_INTR_STAT_TX_ABRT) { - I2CMtrTtyCnt++; - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_TX_ABRT_SOURCE); - if (I2CMtrTtyCnt > I2C_MTR_RTY_CNT) { - if ((I2CChkRawSts & (BIT_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK | - BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK | - BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK)) != 0) { - pSalI2CHND->ErrType |= I2C_ERR_MST_A_NACK; - } - else if ((I2CChkRawSts & BIT_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK) != 0){ - pSalI2CHND->ErrType |= I2C_ERR_MST_D_NACK; - } - else { - pSalI2CHND->ErrType |= I2C_ERR_TX_ABRT; - } - pSalI2CHND->DevSts = I2C_STS_ERROR; - pSalI2CHND->pTXBuf->pDataBuf--; - pSalI2CHND->pTXBuf->DataLen++; - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_ERR_HW; - } - - RtkI2CDeInitForPS(pSalI2CHND); - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) == BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - RtkI2CInitForPS(pSalI2CHND); - - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) != BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - - pSalI2CHND->DevSts = I2C_STS_TX_READY; - pSalI2CHND->ErrType = 0; - pSalI2CHND->pTXBuf->DataLen = (uint16_t)I2CDataLenBak; - pSalI2CHND->pTXBuf->pDataBuf= (uint8_t*)I2CDataPtrBak; - /* Calculate user time out parameters */ - InTimeoutCount = 0; - InStartCount = 0; - I2CInTOTcnt = pSalI2CHND->TimeOut; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - goto SEND_I2C_WR_CMD_INTR; - - } - else if (((uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS) & BIT_IC_STATUS_TFE) != BIT_IC_STATUS_TFE) { - I2CMtrTtyCnt++; - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_TX_ABRT_SOURCE); - if (I2CMtrTtyCnt > I2C_MTR_RTY_CNT) { - if ((I2CChkRawSts & (BIT_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK | - BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK | - BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK)) != 0) { - pSalI2CHND->ErrType |= I2C_ERR_MST_A_NACK; - } - else if ((I2CChkRawSts & BIT_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK) != 0){ - pSalI2CHND->ErrType |= I2C_ERR_MST_D_NACK; - } - else { - pSalI2CHND->ErrType |= I2C_ERR_TX_ABRT; - } - pSalI2CHND->DevSts = I2C_STS_ERROR; - pSalI2CHND->pTXBuf->pDataBuf--; - pSalI2CHND->pTXBuf->DataLen++; - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_ERR_HW; - } - - RtkI2CDeInitForPS(pSalI2CHND); - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) == BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - RtkI2CInitForPS(pSalI2CHND); - - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) != BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - - pSalI2CHND->DevSts = I2C_STS_TX_READY; - pSalI2CHND->ErrType = 0; - pSalI2CHND->pTXBuf->DataLen = (uint16_t)I2CDataLenBak; - pSalI2CHND->pTXBuf->pDataBuf= (uint8_t *)I2CDataPtrBak; - /* Calculate user time out parameters */ - InTimeoutCount = 0; - InStartCount = 0; - I2CInTOTcnt = pSalI2CHND->TimeOut; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - goto SEND_I2C_WR_CMD_INTR; - } - else { - /* I2C Enable TX Related Interrupts */ - I2CLocalTemp = 0; - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_INTR_MASK); - I2CLocalTemp |= (BIT_IC_INTR_MASK_M_TX_ABRT | - BIT_IC_INTR_MASK_M_TX_EMPTY | - BIT_IC_INTR_MASK_M_TX_OVER); - pHalI2CInitDat->I2CIntrMSK = I2CLocalTemp; - pHalI2COP->HalI2CIntrCtrl(pHalI2CInitDat); - - break; - } - } - else { - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS); - while ((I2CChkRawSts & BIT_IC_STATUS_TFE) == 0) { - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS); - } - - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS); - if (I2CChkRawSts & BIT_IC_STATUS_TFE) { - - if (pSalI2CHND->pTXBuf->DataLen > 0) { - /* I2C Enable TX Related Interrupts */ - I2CLocalTemp = 0; - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_INTR_MASK); - I2CLocalTemp |= (BIT_IC_INTR_MASK_M_TX_ABRT | - BIT_IC_INTR_MASK_M_TX_EMPTY | - BIT_IC_INTR_MASK_M_TX_OVER); - pHalI2CInitDat->I2CIntrMSK = I2CLocalTemp; - pHalI2COP->HalI2CIntrCtrl(pHalI2CInitDat); - } - else { - /* Invoke I2C TX complete callback if available */ - if (pSalI2CUserCB->pTXCCB->USERCB != NULL) - pSalI2CUserCB->pTXCCB->USERCB((void *)pSalI2CUserCB->pTXCCB->USERData); - } - - break; //end of send process in INTR mode - } - } - - /* Time-Out check */ - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_FF_TO; - //DBG_I2C_ERR("RtkI2CSend Timeout, I2C%2x,7\n",pSalI2CHND->DevNum); - //DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - RtkI2CDeInitForPS(pSalI2CHND); - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) == BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - RtkI2CInitForPS(pSalI2CHND); - - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) != BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - return HAL_TIMEOUT; - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_FF_TO; - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - RtkI2CDeInitForPS(pSalI2CHND); - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) == BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - RtkI2CInitForPS(pSalI2CHND); - - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) != BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - return HAL_TIMEOUT; - } - } - } - } /* if (pSalI2CHND->OpType == I2C_INTR_TYPE) */ -#endif - - /* if (pSalI2CHND->OpType == I2C_DMA_TYPE) */ - if (pSalI2CHND->OpType == I2C_DMA_TYPE) { - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_TX_READY; - - /* I2C Enable TX Related Interrupts */ - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_INTR_MASK); - I2CLocalTemp |= (BIT_IC_INTR_MASK_M_TX_ABRT | - BIT_IC_INTR_MASK_M_TX_OVER); - pHalI2CInitDat->I2CIntrMSK = I2CLocalTemp; - pHalI2COP->HalI2CIntrCtrl(pHalI2CInitDat); - - //HalGdmaOpInit(pHalI2CGdmaOp); - pSalI2CMngtAdpt->pHalGdmaOpInit(pHalI2CGdmaOp); - pHalI2CTxGdmaAdpt->GdmaCtl.BlockSize = pSalI2CHND->pTXBuf->DataLen; - pHalI2CTxGdmaAdpt->ChSar = (uint32_t)pSalI2CHND->pTXBuf->pDataBuf; - pHalI2CTxGdmaAdpt->ChDar = (uint32_t)(I2C0_REG_BASE+REG_DW_I2C_IC_DATA_CMD+ - pSalI2CHND->DevNum*0x400); - pHalI2CGdmaOp->HalGdmaChSeting(pHalI2CTxGdmaAdpt); - pHalI2CGdmaOp->HalGdmaChEn(pHalI2CTxGdmaAdpt); - pSalI2CHND->DevSts = I2C_STS_TX_ING; - pHalI2CInitDat->I2CDMACtrl = BIT_CTRL_IC_DMA_CR_TDMAE(1); - pHalI2COP->HalI2CDMACtrl(pHalI2CInitDat); - - } - /* if (pSalI2CHND->OpType == I2C_DMA_TYPE) */ - - }/* if (pSalI2CHND->I2CMaster == I2C_MASTER_MODE) */ - else{ - /* #if I2C_POLL_OP_TYPE */ - if (pSalI2CHND->OpType == I2C_POLL_TYPE) { - /* Calculate user time out parameters */ - I2CInTOTcnt = pSalI2CHND->TimeOut; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_TX_READY; - - /* Send data till the TX buffer data length is zero */ - for (;pSalI2CHND->pTXBuf->DataLen>0;) { - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_TX_ING; - - /* Check I2C RD Request flag */ - if ((pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_RAW_INTR_STAT)) - & BIT_IC_RAW_INTR_STAT_RD_REQ) { - - /* Check I2C TX FIFO status */ - if ((pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_STATUS) - & (BIT_IC_STATUS_TFNF)) == BIT_IC_STATUS_TFNF) { - pHalI2CInitDat->I2CDataLen= 1; - pHalI2CInitDat->I2CRWData = pSalI2CHND->pTXBuf->pDataBuf; - pHalI2COP->HalI2CMassSend(pHalI2CInitDat); - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_RD_REQ; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - pSalI2CHND->pTXBuf->pDataBuf++; - pSalI2CHND->pTXBuf->DataLen--; - } - } - else { - /* Time-Out check */ - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_FF_TO; - DBG_I2C_ERR("RtkI2CSend Timeout, I2C%2x,9\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_FF_TO; - DBG_I2C_ERR("RtkI2CSend Timeout, I2C%2x,10\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - } - } - - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_IDLE; - } - /* #if I2C_POLL_OP_TYPE */ - - /* #if I2C_INTR_OP_TYPE */ - if (pSalI2CHND->OpType == I2C_INTR_TYPE) { - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_IDLE; -#if 0 - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_TX_ABRT; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_TX_OVER; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_RD_REQ; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_ACTIVITY; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - pHalI2COP->HalI2CClrAllIntr(pHalI2CInitDat); -#endif - pSalI2CHND->DevSts = I2C_STS_TX_READY; - - /* I2C Enable TX Related Interrupts. In Slave-Transmitter, the below - interrupts should be enabled. */ - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_INTR_MASK); - I2CLocalTemp |= (BIT_IC_INTR_MASK_M_TX_ABRT | - BIT_IC_INTR_MASK_M_TX_OVER | - BIT_IC_INTR_MASK_M_RX_DONE | - BIT_IC_INTR_MASK_M_RD_REQ); - pHalI2CInitDat->I2CIntrMSK = I2CLocalTemp; - pHalI2COP->HalI2CIntrCtrl(pHalI2CInitDat); - } - /* #if I2C_INTR_OP_TYPE */ - - /* #if I2C_DMA_OP_TYPE */ - ; - /* #if I2C_DMA_OP_TYPE */ - } - - return HAL_OK; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CReceive -// -// Description: -// To execute Master-Receiver and Slave-Receiver operation. -// There are 3 operation mode in this function which are separated by compile-time -// flag. -// For Master-Receiver, the User Register Address flag is checked first. -// User Register Address may be sent before any formal transfer, no matter in -// Poll-, Intr- or DMA- Mode. -// -// For Master-Receiver, the I2C master have to send a Read Command for receiving -// one byte from the other I2C slave. -// -// In Poll-Mode, no matter it's master or slave mode, the transfer will be done in -// this function by checking the transfer length. -// -Master in Poll-Mode: -// a. Send the User Register Address if needed. -// b. Check if all the data are received. If it's NOT, checking the TX FIFO -// status will be done. If the TX FIFO it's full, a Read Command will be -// wirtten into the TX FIFO. -// c. After b, the I2C master contineously polls the RX FIFO status to see -// if there is a received data. If it received one, it will move the data from -// I2C RX FIFO into user RX data buffer. -// d. b and c are executed circularly till the RX buffer data length is zero. -// -// -Slave in Poll-Mode: -// a. Check if all the data are received. -// b. The I2C slave contineously polls the RX FIFO status to see -// if there is a received data. If it received one, it will move the data from -// I2C RX FIFO into user RX data buffer. -// c. a and b are executed circularly till the RX buffer data length is zero. -// -//---------------------------------------------------------------------- -// In Intr-Mode, this function is used to unmask the realted I2C interrupt for -// the following interrupt operations. -// -Master in Intr-Mode: -// a. Send the User Register Address if needed. -// b. Unmask the RX-Full and realted error interrupts. -// c. Write one or two Read Command into master TX FIFO for requesting -// another slave providing data. -// -// -Slave in Intr-Mode: -// a. Unmask the RX-Full and realted error interrupts. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C receive process. -// _EXIT_SUCCESS if the RtkI2CReceive succeeded. -// _EXIT_FAILURE if the RtkI2CReceive failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -HAL_Status -RtkI2CReceive_Patch( - IN void *Data -){ - PSAL_I2C_HND pSalI2CHND = (PSAL_I2C_HND) Data; - PSAL_I2C_HND_PRIV pSalI2CHNDPriv = NULL; - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PHAL_I2C_INIT_DAT pHalI2CInitDat = NULL; - PHAL_I2C_OP pHalI2COP = NULL; -#if I2C_DMA_OP_TYPE - PHAL_GDMA_ADAPTER pHalI2CRxGdmaAdpt = NULL; - PHAL_GDMA_OP pHalI2CGdmaOp = NULL; -#endif - PSAL_I2C_USER_CB pSalI2CUserCB = NULL; - - uint32_t I2CLocalTemp = 0; - uint32_t I2CInTOTcnt = 0; - uint32_t InTimeoutCount = 0; - uint32_t InStartCount = 0; - uint32_t I2CLocalLen = 0; - uint32_t I2CChkRawSts = 0; - uint32_t I2CChkRawSts2 = 0; - uint32_t I2CDataLenBak = 0; - uint32_t I2CDataPtrBak = 0; - uint32_t I2CInTOTcntRty = 0; - uint32_t InTimeoutCountRty = 0; - uint32_t InStartCountRty = 0; - //uint32_t I2CInTOTcntIntr = 0; - //uint32_t InTimeoutCountIntr = 0; - //uint32_t InStartCountIntr = 0; - uint32_t I2CMtrTtyCnt = 0; - - /*To Get the SAL_I2C_MNGT_ADPT Pointer*/ - pSalI2CHNDPriv = CONTAINER_OF(pSalI2CHND, SAL_I2C_HND_PRIV, SalI2CHndPriv); - pSalI2CMngtAdpt = CONTAINER_OF(pSalI2CHNDPriv->ppSalI2CHnd, SAL_I2C_MNGT_ADPT, pSalHndPriv); - pHalI2CInitDat = pSalI2CMngtAdpt->pHalInitDat; - pHalI2COP = pSalI2CMngtAdpt->pHalOp; - pSalI2CUserCB = pSalI2CHND->pUserCB; -#if I2C_DMA_OP_TYPE - pHalI2CRxGdmaAdpt = pSalI2CMngtAdpt->pHalRxGdmaAdp; - pHalI2CGdmaOp = pSalI2CMngtAdpt->pHalGdmaOp; -#endif - - if (pSalI2CHND->I2CMaster == I2C_MASTER_MODE)/*if (pSalI2CHND->I2CMaster == I2C_MASTER_MODE)*/ - { - I2CMtrTtyCnt = 0; - /* Master run-time update target address */ - if (pSalI2CHND->I2CExd & I2C_EXD_MTR_ADDR_UPD) { - /* Calculate user time out parameters */ - I2CInTOTcnt = pSalI2CHND->TimeOut; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - - /* Check Master activity status */ - while ((pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS)) & BIT_IC_STATUS_MST_ACTIVITY) { - pHalI2COP->HalI2CClrAllIntr(pHalI2CInitDat); - /* Time-Out check */ - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_RX_ADD_TO; - DBG_I2C_ERR("RtkI2CReceive Timeout, I2C%2x,1\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_RX_ADD_TO; - DBG_I2C_ERR("RtkI2CReceive Timeout, I2C%2x,2\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - } - - /* Calculate user time out parameters */ - I2CInTOTcnt = pSalI2CHND->TimeOut; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - - /* Check TX FIFO status */ - while (!((pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS)) & BIT_IC_STATUS_TFE)) { - /* Time-Out check */ - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_RX_ADD_TO; - DBG_I2C_ERR("RtkI2CReceive Timeout, I2C%2x,3\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_RX_ADD_TO; - DBG_I2C_ERR("RtkI2CReceive Timeout, I2C%2x,4\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - } - - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_TAR); - I2CLocalTemp &= (~BIT_MASK_IC_TAR); - I2CLocalTemp |= BIT_CTRL_IC_TAR(pSalI2CHND->pRXBuf->TargetAddr); - /* Update Master Target address */ - pHalI2COP->HalI2CWriteReg(pHalI2CInitDat, REG_DW_I2C_IC_TAR, I2CLocalTemp); - } - - -#if I2C_USER_REG_ADDR /*I2C_USER_REG_ADDR*/ - RtkI2CSendUserAddr(pSalI2CHND, 1); -#endif /*I2C_USER_REG_ADDR*/ - -#if I2C_POLL_OP_TYPE/*I2C_POLL_OP_TYPE*/ - if (pSalI2CHND->OpType == I2C_POLL_TYPE) - { - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_RX_READY; - - pSalI2CMngtAdpt->MstRDCmdCnt = pSalI2CHND->pRXBuf->DataLen; - I2CLocalTemp = pSalI2CHND->pRXBuf->DataLen; - - /* Calculate user time out parameters */ - I2CInTOTcnt = pSalI2CHND->TimeOut; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - - /* Receive data till the RX buffer data length is zero */ - for ( ;pSalI2CHND->pRXBuf->DataLen>0; ) { -SEND_I2C_RD_CMD: - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_RX_ING; - /* Check I2C TX FIFO status. If it's NOT full, a Read command is written - into the TX FIFO.*/ - if (pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS) - & BIT_IC_STATUS_TFNF) { - if (pSalI2CMngtAdpt->MstRDCmdCnt > 0) { - pHalI2CInitDat->I2CCmd = I2C_READ_CMD; - pHalI2CInitDat->I2CDataLen= 1; - pHalI2CInitDat->I2CRWData = pSalI2CHND->pRXBuf->pDataBuf; - pHalI2CInitDat->I2CStop = I2C_STOP_DIS; - if ((pSalI2CMngtAdpt->MstRDCmdCnt == 1) && ((pSalI2CHND->I2CExd & I2C_EXD_MTR_HOLD_BUS) == 0)){ - pHalI2CInitDat->I2CStop = I2C_STOP_EN; - } - pHalI2COP->HalI2CMassSend(pHalI2CInitDat); - if (pSalI2CMngtAdpt->MstRDCmdCnt > 0) - pSalI2CMngtAdpt->MstRDCmdCnt--; - } - } - - if (I2CLocalTemp == pSalI2CHND->pRXBuf->DataLen){ - if (pSalI2CHND->I2CExd & I2C_EXD_MTR_ADDR_RTY) { - HalDelayUs(((1000*30)/pHalI2CInitDat->I2CClk)); //the 10 is for ten bit time - I2CChkRawSts = pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_RAW_INTR_STAT); - if (I2CChkRawSts & BIT_IC_RAW_INTR_STAT_TX_ABRT) { - I2CMtrTtyCnt++; - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_TX_ABRT_SOURCE); - if (I2CMtrTtyCnt > I2C_MTR_RTY_CNT) { - if ((I2CChkRawSts & (BIT_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK | - BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK | - BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK)) != 0) { - pSalI2CHND->ErrType |= I2C_ERR_MST_A_NACK; - } - else if ((I2CChkRawSts & BIT_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK) != 0){ - pSalI2CHND->ErrType |= I2C_ERR_MST_D_NACK; - } - else { - pSalI2CHND->ErrType |= I2C_ERR_TX_ABRT; - } - pSalI2CHND->DevSts = I2C_STS_ERROR; - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_ERR_HW; - } - pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_CLR_TX_ABRT); - pSalI2CMngtAdpt->MstRDCmdCnt++; - goto SEND_I2C_RD_CMD; - } - } - } - - /* Contineously poll the I2C RX FIFO status */ - while (1) { - if ((pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS) - & (BIT_IC_STATUS_RFNE | BIT_IC_STATUS_RFF)) != 0) { - *(pSalI2CHND->pRXBuf->pDataBuf) = - pHalI2COP->HalI2CReceive(pHalI2CInitDat); - - pSalI2CHND->pRXBuf->pDataBuf++; - pSalI2CHND->pRXBuf->DataLen--; - - if (!pSalI2CHND->pRXBuf->DataLen) { - break; - } - } - else { - break; - } - } - - /* Time-Out check */ - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_RX_FF_TO; - DBG_I2C_ERR("RtkI2CReceive Timeout, I2C%2x,5\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_RX_FF_TO; - DBG_I2C_ERR("RtkI2CReceive Timeout, I2C%2x,6\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - - } - - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_IDLE; - } -#endif/*I2C_POLL_OP_TYPE*/ - -#if I2C_INTR_OP_TYPE/*I2C_INTR_OP_TYPE*/ - if (pSalI2CHND->OpType == I2C_INTR_TYPE) { - /* Calculate user time out parameters */ - InTimeoutCount= 0; - InStartCount = 0; - I2CInTOTcnt = pSalI2CMngtAdpt->InnerTimeOut; - - //InTimeoutCountIntr = 0; - //InStartCountIntr = 0; - //I2CInTOTcntIntr = pSalI2CHND->AddRtyTimeOut; - - if ((I2CInTOTcnt!= 0) && (I2CInTOTcnt!= I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount= HalTimerOp.HalTimerReadCount(1); - } - - //InTimeoutCountIntr = (I2CInTOTcntIntr*1000/TIMER_TICK_US); - //InStartCountIntr = HalTimerOp.HalTimerReadCount(1); - - I2CDataLenBak = (uint32_t)(pSalI2CHND->pRXBuf->DataLen); - I2CDataPtrBak = (uint32_t)(pSalI2CHND->pRXBuf->pDataBuf); - - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_RX_READY; - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_TX_ABRT; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_ACTIVITY; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - pHalI2COP->HalI2CClrAllIntr(pHalI2CInitDat); - - /* Clear RX FIFO */ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_RXFLR); - while (I2CChkRawSts > 0){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_RXFLR); - } - - /* To fill the Master Read Command into TX FIFO */ - pSalI2CMngtAdpt->MstRDCmdCnt = pSalI2CHND->pRXBuf->DataLen; - I2CLocalLen = 2;//pSalI2CHND->pRXBuf->DataLen; - pSalI2CHND->DevSts = I2C_STS_RX_READY; - - - while (1) { -SEND_I2C_RD_CMD_INTR: - - /* Calculate user time out parameters */ - InTimeoutCountRty = 0; - InStartCountRty = 0; - I2CInTOTcntRty = pSalI2CHND->TimeOut; - - if ((I2CInTOTcntRty != 0) && (I2CInTOTcntRty!= I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCountRty= (I2CInTOTcntRty*1000/TIMER_TICK_US); - InStartCountRty= HalTimerOp.HalTimerReadCount(1); - } - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS); - - if ((pSalI2CMngtAdpt->MstRDCmdCnt > 0) && (I2CLocalLen > 0)){ - pHalI2CInitDat->I2CCmd = I2C_READ_CMD; - pHalI2CInitDat->I2CDataLen= 1; - pHalI2CInitDat->I2CRWData = pSalI2CHND->pRXBuf->pDataBuf; - pHalI2CInitDat->I2CStop = I2C_STOP_DIS; - - if ((pSalI2CMngtAdpt->MstRDCmdCnt == 1) && ((pSalI2CHND->I2CExd & I2C_EXD_MTR_HOLD_BUS) == 0)){ - pHalI2CInitDat->I2CStop = I2C_STOP_EN; - } - - if ((pHalI2CInitDat->I2CReSTR == 1) && (I2CLocalLen == 2)) { - pHalI2CInitDat->RSVD0 |= BIT0; - } - - pHalI2COP->HalI2CMassSend(pHalI2CInitDat); - - if ((pHalI2CInitDat->I2CReSTR == 1) && (I2CLocalLen == 2)) { - pHalI2CInitDat->RSVD0 &= (~BIT0); - } - } - - if (pSalI2CHND->I2CExd & I2C_EXD_MTR_ADDR_RTY) { - - /* SEND_I2C_WR_CMD_INTR Time-Out check */ - //if (InTimeoutCountIntr > 0) { - // if (HAL_TIMEOUT == I2CIsTimeout(InStartCountIntr, InTimeoutCountIntr)) { - // return HAL_TIMEOUT; - // } - //} - - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS); - while ((I2CChkRawSts & BIT_IC_STATUS_TFE) == 0) { - I2CChkRawSts2 = pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_RAW_INTR_STAT); - if ((I2CChkRawSts2 & BIT_IC_RAW_INTR_STAT_TX_ABRT) != 0){ - break; - } - - /* Time-Out check */ - if (InTimeoutCountRty > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCountRty, InTimeoutCountRty)) { - break; - } - } - else { - if (I2CInTOTcntRty == 0) { - break; - } - } - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS); - - } - - HalDelayUs(((1000*30)/pHalI2CInitDat->I2CClk)); //the 10 is for ten bit time - - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_RAW_INTR_STAT); - I2CChkRawSts2 = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS); - if (I2CChkRawSts & BIT_IC_RAW_INTR_STAT_TX_ABRT) { - I2CMtrTtyCnt++; - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_TX_ABRT_SOURCE); - if (I2CMtrTtyCnt > I2C_MTR_RTY_CNT) { - if ((I2CChkRawSts & (BIT_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK | - BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK | - BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK)) != 0) { - pSalI2CHND->ErrType |= I2C_ERR_MST_A_NACK; - } - else if ((I2CChkRawSts & BIT_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK) != 0){ - pSalI2CHND->ErrType |= I2C_ERR_MST_D_NACK; - } - else { - pSalI2CHND->ErrType |= I2C_ERR_TX_ABRT; - } - - pSalI2CHND->DevSts = I2C_STS_ERROR; - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_ERR_HW; - } - - RtkI2CDeInitForPS(pSalI2CHND); - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) == BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - RtkI2CInitForPS(pSalI2CHND); - - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) != BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - pSalI2CHND->DevSts = I2C_STS_RX_READY; - pSalI2CHND->ErrType = 0; - pSalI2CHND->pRXBuf->DataLen = (uint16_t)I2CDataLenBak; - pSalI2CHND->pRXBuf->pDataBuf= (uint8_t *)I2CDataPtrBak; - - /* Calculate user time out parameters */ - InTimeoutCount = 0; - InStartCount = 0; - I2CInTOTcnt = pSalI2CMngtAdpt->InnerTimeOut; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - goto SEND_I2C_RD_CMD_INTR; - } - else if ((I2CChkRawSts2 & BIT_IC_STATUS_TFE) != BIT_IC_STATUS_TFE){ - I2CMtrTtyCnt++; - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_TX_ABRT_SOURCE); - if (I2CMtrTtyCnt > I2C_MTR_RTY_CNT) { - if ((I2CChkRawSts & (BIT_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK | - BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK | - BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK)) != 0) { - pSalI2CHND->ErrType |= I2C_ERR_MST_A_NACK; - } - else if ((I2CChkRawSts & BIT_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK) != 0){ - pSalI2CHND->ErrType |= I2C_ERR_MST_D_NACK; - } - else { - pSalI2CHND->ErrType |= I2C_ERR_TX_ABRT; - } - pSalI2CHND->DevSts = I2C_STS_ERROR; - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_ERR_HW; - } - - RtkI2CDeInitForPS(pSalI2CHND); - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) == BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - RtkI2CInitForPS(pSalI2CHND); - - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) != BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - pSalI2CHND->DevSts = I2C_STS_RX_READY; - pSalI2CHND->ErrType = 0; - pSalI2CHND->pRXBuf->DataLen = (uint16_t)I2CDataLenBak; - pSalI2CHND->pRXBuf->pDataBuf= (uint8_t *)I2CDataPtrBak; - - /* Calculate user time out parameters */ - InTimeoutCount = 0; - InStartCount = 0; - I2CInTOTcnt = pSalI2CMngtAdpt->InnerTimeOut; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - goto SEND_I2C_RD_CMD_INTR; - } - else { - I2CChkRawSts2 = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS); - { - if (I2CLocalLen>0){ - I2CLocalLen--; - pSalI2CMngtAdpt->MstRDCmdCnt --; - } - } - } - } - else { - if (I2CLocalLen>0) { - I2CLocalLen--; - pSalI2CMngtAdpt->MstRDCmdCnt --; - } - } - - if ((I2CLocalLen == 0) || (pSalI2CHND->pRXBuf->DataLen == 1)){ - pHalI2CInitDat->I2CIntrClr = REG_DW_I2C_IC_CLR_TX_ABRT; - pHalI2COP->HalI2CClrIntr(pHalI2CInitDat); - I2CLocalTemp = 0; - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_INTR_MASK); - I2CLocalTemp |= (BIT_IC_INTR_MASK_M_RX_FULL | - BIT_IC_INTR_MASK_M_RX_OVER | - BIT_IC_INTR_MASK_M_RX_UNDER|BIT_IC_INTR_MASK_M_TX_ABRT); - pHalI2CInitDat->I2CIntrMSK = I2CLocalTemp; - pHalI2COP->HalI2CIntrCtrl(pHalI2CInitDat); - break; - } - - /* Time-Out check */ - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_FF_TO; - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - RtkI2CDeInitForPS(pSalI2CHND); - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) == BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - RtkI2CInitForPS(pSalI2CHND); - - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) != BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - return HAL_TIMEOUT; - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_TX_FF_TO; - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - RtkI2CDeInitForPS(pSalI2CHND); - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) == BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - RtkI2CInitForPS(pSalI2CHND); - - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - while((I2CChkRawSts & BIT_IC_ENABLE_STATUS_IC_EN) != BIT_IC_ENABLE_STATUS_IC_EN){ - I2CChkRawSts = (uint32_t)pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_ENABLE_STATUS); - } - return HAL_TIMEOUT; - } - } - } - - } -#endif/*I2C_INTR_OP_TYPE*/ - }/*if (pSalI2CHND->I2CMaster == I2C_MASTER_MODE)*/ - else - { -#if I2C_POLL_OP_TYPE - if (pSalI2CHND->OpType == I2C_POLL_TYPE) { - /* Calculate user time out parameters */ - I2CInTOTcnt = pSalI2CHND->TimeOut; - if ((I2CInTOTcnt != 0) && (I2CInTOTcnt != I2C_TIMEOOUT_ENDLESS)) { - InTimeoutCount = (I2CInTOTcnt*1000/TIMER_TICK_US); - InStartCount = HalTimerOp.HalTimerReadCount(1); - } - - /* Receive data till the RX buffer data length is zero */ - for (;pSalI2CHND->pRXBuf->DataLen>0; ) { - if ((pHalI2COP->HalI2CReadReg(pHalI2CInitDat,REG_DW_I2C_IC_STATUS) - & (BIT_IC_STATUS_RFNE | BIT_IC_STATUS_RFF)) != 0) { - *(pSalI2CHND->pRXBuf->pDataBuf) = - pHalI2COP->HalI2CReceive(pHalI2CInitDat); - pSalI2CHND->pRXBuf->pDataBuf++; - pSalI2CHND->pRXBuf->DataLen--; - } - else { - /* Time-Out check */ - if (InTimeoutCount > 0) { - if (HAL_TIMEOUT == I2CIsTimeout(InStartCount, InTimeoutCount)) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_RX_FF_TO; - DBG_I2C_ERR("RtkI2CReceive Timeout, I2C%2x,9\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - else { - if (I2CInTOTcnt == 0) { - pSalI2CHND->DevSts = I2C_STS_TIMEOUT; - pSalI2CHND->ErrType = I2C_ERR_RX_FF_TO; - DBG_I2C_ERR("RtkI2CReceive Timeout, I2C%2x,10\n",pSalI2CHND->DevNum); - DBG_I2C_ERR("DevSts:%x, ErrType:%x\n", pSalI2CHND->DevSts, pSalI2CHND->ErrType); - if (pSalI2CUserCB->pERRCB->USERCB != NULL) - pSalI2CUserCB->pERRCB->USERCB((void *)pSalI2CUserCB->pERRCB->USERData); - return HAL_TIMEOUT; - } - } - } - } - - /* I2C Device Status Update */ - pSalI2CHND->DevSts = I2C_STS_IDLE; - } -#endif - -#if I2C_INTR_OP_TYPE/*I2C_INTR_OP_TYPE*/ - if (pSalI2CHND->OpType == I2C_INTR_TYPE) { - pSalI2CHND->DevSts = I2C_STS_RX_READY; - - /*I2C Enable RX Related Interrupts*/ - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_INTR_MASK); - I2CLocalTemp |= (BIT_IC_INTR_MASK_M_RX_FULL | - BIT_IC_INTR_MASK_M_RX_OVER | - BIT_IC_INTR_MASK_M_RX_UNDER); - pHalI2CInitDat->I2CIntrMSK = I2CLocalTemp; - pHalI2COP->HalI2CIntrCtrl(pHalI2CInitDat); - } -#endif/*I2C_INTR_OP_TYPE*/ - -#if I2C_DMA_OP_TYPE/*I2C_INTR_OP_TYPE*/ - if (pSalI2CHND->OpType == I2C_DMA_TYPE) { - pSalI2CHND->DevSts = I2C_STS_RX_READY; - - /*I2C Enable RX Related Interrupts*/ - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_INTR_MASK); - I2CLocalTemp |= (BIT_IC_INTR_MASK_M_RX_OVER | - BIT_IC_INTR_MASK_M_RX_UNDER); - pHalI2CInitDat->I2CIntrMSK = I2CLocalTemp; - pHalI2COP->HalI2CIntrCtrl(pHalI2CInitDat); - - //HalGdmaOpInit(pHalI2CGdmaOp); - pSalI2CMngtAdpt->pHalGdmaOpInit(pHalI2CGdmaOp); - - pHalI2CRxGdmaAdpt->GdmaCtl.BlockSize = pSalI2CHND->pRXBuf->DataLen; - pHalI2CRxGdmaAdpt->ChSar = (uint32_t)(I2C0_REG_BASE+REG_DW_I2C_IC_DATA_CMD+ - pSalI2CHND->DevNum*0x400); - pHalI2CRxGdmaAdpt->ChDar = (uint32_t)pSalI2CHND->pRXBuf->pDataBuf; - - pHalI2CGdmaOp->HalGdmaChSeting(pHalI2CRxGdmaAdpt); - pHalI2CGdmaOp->HalGdmaChEn(pHalI2CRxGdmaAdpt); - pSalI2CHND->DevSts = I2C_STS_RX_ING; - pHalI2CInitDat->I2CDMACtrl = BIT_CTRL_IC_DMA_CR_RDMAE(1); - pHalI2COP->HalI2CDMACtrl(pHalI2CInitDat); - } -#endif/*I2C_INTR_OP_TYPE*/ - - } - - return HAL_OK; -} - - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CInitForPS -// -// Description: -// Add power state registeration for I2C initail process. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C initialization process. -// HAL_OK if the RtkI2CInitForPS succeeded. -// HAL_ERR_UNKNOWN if the RtkI2CInitForPS failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2015-05-31. -// -//---------------------------------------------------------------------------------------------------- -HAL_Status -RtkI2CInitForPS( - IN void *Data -){ - - uint8_t i2cInitSts = HAL_OK; - PSAL_I2C_HND pSalI2CHND = (PSAL_I2C_HND) Data; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE i2cPwrState; -#endif - - /* Check the input I2C index first */ - if (FunctionChk((I2C0 + pSalI2CHND->DevNum), pSalI2CHND->PinMux) == _FALSE) - return HAL_ERR_UNKNOWN; - - i2cInitSts = RtkI2CInit(pSalI2CHND); - -#ifdef CONFIG_SOC_PS_MODULE - // To register a new peripheral device power state - if (i2cInitSts == HAL_OK){ - i2cPwrState.FuncIdx = I2C0 + pSalI2CHND->DevNum; - i2cPwrState.PwrState = ACT; - RegPowerState(i2cPwrState); - } -#endif - - return i2cInitSts; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CDeInitForPS -// -// Description: -// Add power state registeration for I2C deinitail process. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C deinitialization process. -// HAL_OK if the RtkI2CDeInitForPS succeeded. -// HAL_ERR_UNKNOWN if the RtkI2CDeInitForPS failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2015-05-31. -// -//---------------------------------------------------------------------------------------------------- -HAL_Status -RtkI2CDeInitForPS( - IN void *Data -){ - uint8_t i2cInitSts = HAL_OK; - PSAL_I2C_HND pSalI2CHND = (PSAL_I2C_HND) Data; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE i2cPwrState; - uint8_t HwState; -#endif - - if (pSalI2CHND == NULL) - return HAL_ERR_UNKNOWN; - - /* Check the input I2C index first */ - if (RtkI2CIdxChk(pSalI2CHND->DevNum)) - return HAL_ERR_UNKNOWN; - -#ifdef CONFIG_SOC_PS_MODULE - i2cPwrState.FuncIdx = I2C0 + pSalI2CHND->DevNum; - - QueryRegPwrState(i2cPwrState.FuncIdx, &(i2cPwrState.PwrState), &HwState); - - // if the power state isn't ACT, then switch the power state back to ACT first - if ((i2cPwrState.PwrState != ACT) && (i2cPwrState.PwrState != INACT)) { - RtkI2CEnablePS(Data); - QueryRegPwrState(i2cPwrState.FuncIdx, &(i2cPwrState.PwrState), &HwState); - } - - if (i2cPwrState.PwrState == ACT) { - i2cPwrState.PwrState = INACT; - RegPowerState(i2cPwrState); - } -#endif - - i2cInitSts = RtkI2CDeInit(pSalI2CHND); - - return i2cInitSts; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CDisablePS -// -// Description: -// I2C disable opertion by setting clock disable. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C disable process. -// HAL_OK if the RtkI2CDisablePS succeeded. -// HAL_ERR_PARA if the RtkI2CDisablePS failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2015-05-31. -// -//---------------------------------------------------------------------------------------------------- -HAL_Status -RtkI2CDisablePS( - IN void *Data -){ - - PSAL_I2C_HND pSalI2CHND = (PSAL_I2C_HND) Data; - uint8_t i2cIdx = pSalI2CHND->DevNum; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE i2cPwrState; -#endif - - if (RtkI2CIdxChk(i2cIdx)) - return HAL_ERR_UNKNOWN; - - switch (i2cIdx) { - case 0: - { - /* I2C 0 */ - ACTCK_I2C0_CCTRL(OFF); - SLPCK_I2C0_CCTRL(OFF); - break; - } - case 1: - { - /* I2C 1 */ - ACTCK_I2C1_CCTRL(OFF); - SLPCK_I2C1_CCTRL(OFF); - break; - } - case 2: - { - /* I2C 2 */ - ACTCK_I2C2_CCTRL(OFF); - SLPCK_I2C2_CCTRL(OFF); - break; - } - case 3: - { - /* I2C 3 */ - ACTCK_I2C3_CCTRL(OFF); - SLPCK_I2C3_CCTRL(OFF); - break; - } - default: - { - return HAL_ERR_PARA; - } - } - -#ifdef CONFIG_SOC_PS_MODULE - // To register a new peripheral device power state - i2cPwrState.FuncIdx = I2C0 + pSalI2CHND->DevNum; - i2cPwrState.PwrState = SLPCG; - RegPowerState(i2cPwrState); -#endif - - return HAL_OK; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CEnablePS -// -// Description: -// I2C enable opertion by setting clock enable. -// -// Arguments: -// [in] void *Data - -// I2C SAL handle -// -// Return: -// The status of the I2C enable process. -// HAL_OK if the RtkI2CEnablePS succeeded. -// HAL_ERR_PARA if the RtkI2CEnablePS failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2015-05-31. -// -//---------------------------------------------------------------------------------------------------- -HAL_Status -RtkI2CEnablePS( - IN void *Data -){ - - PSAL_I2C_HND pSalI2CHND = (PSAL_I2C_HND) Data; - uint8_t i2cIdx = pSalI2CHND->DevNum; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE i2cPwrState; -#endif - - if (RtkI2CIdxChk(i2cIdx)) - return HAL_ERR_UNKNOWN; - - switch (i2cIdx) { - case 0: - { - /* I2C 0 */ - ACTCK_I2C0_CCTRL(ON); - SLPCK_I2C0_CCTRL(ON); - break; - } - case 1: - { - /* I2C 1 */ - ACTCK_I2C1_CCTRL(ON); - SLPCK_I2C1_CCTRL(ON); - break; - } - case 2: - { - /* I2C 2 */ - ACTCK_I2C2_CCTRL(ON); - SLPCK_I2C2_CCTRL(ON); - break; - } - case 3: - { - /* I2C 3 */ - ACTCK_I2C3_CCTRL(ON); - SLPCK_I2C3_CCTRL(ON); - break; - } - default: - { - return HAL_ERR_PARA; - } - } - -#ifdef CONFIG_SOC_PS_MODULE - // To register a new peripheral device power state - i2cPwrState.FuncIdx = I2C0 + pSalI2CHND->DevNum; - i2cPwrState.PwrState = ACT; - RegPowerState(i2cPwrState); -#endif - - return HAL_OK; -} - - -#ifndef CONFIG_MBED_ENABLED -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CGetMngtAdpt -// -// Description: -// According to the input index, all the memory space are allocated and all the -// related pointers are assigned. The management adapter pointer will be -// returned. -// -// Arguments: -// [in] uint8_t I2CIdx - -// I2C module index -// -// Return: -// PSAL_I2C_MNGT_ADPT -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//--------------------------------------------------------------------------------------------------- -PSAL_I2C_MNGT_ADPT -RtkI2CGetMngtAdpt( - IN uint8_t I2CIdx -){ - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_USERCB_ADPT pSalI2CUserCBAdpt = NULL; - - /* If the kernel is available, Memory-allocation is used. */ -#ifdef I2C_STATIC_ALLOC - - pSalI2CMngtAdpt = (PSAL_I2C_MNGT_ADPT)RtlZmalloc(sizeof(SAL_I2C_MNGT_ADPT)); - pSalI2CMngtAdpt->pSalHndPriv = (PSAL_I2C_HND_PRIV)RtlZmalloc(sizeof(SAL_I2C_HND_PRIV)); - pSalI2CMngtAdpt->pHalInitDat = (PHAL_I2C_INIT_DAT)RtlZmalloc(sizeof(HAL_I2C_INIT_DAT)); - pSalI2CMngtAdpt->pHalOp = (PHAL_I2C_OP)RtlZmalloc(sizeof(HAL_I2C_OP)); - pSalI2CMngtAdpt->pIrqHnd = (PIRQ_HANDLE)RtlZmalloc(sizeof(IRQ_HANDLE)); - pSalI2CMngtAdpt->pHalTxGdmaAdp = (PHAL_GDMA_ADAPTER)RtlZmalloc(sizeof(HAL_GDMA_ADAPTER)); - pSalI2CMngtAdpt->pHalRxGdmaAdp = (PHAL_GDMA_ADAPTER)RtlZmalloc(sizeof(HAL_GDMA_ADAPTER)); - pSalI2CMngtAdpt->pHalGdmaOp = (PHAL_GDMA_OP)RtlZmalloc(sizeof(HAL_GDMA_OP)); - pSalI2CMngtAdpt->pIrqTxGdmaHnd = (PIRQ_HANDLE)RtlZmalloc(sizeof(IRQ_HANDLE)); - pSalI2CMngtAdpt->pIrqRxGdmaHnd = (PIRQ_HANDLE)RtlZmalloc(sizeof(IRQ_HANDLE)); - pSalI2CMngtAdpt->pUserCB = (PSAL_I2C_USER_CB)RtlZmalloc(sizeof(SAL_I2C_USER_CB)); - pSalI2CMngtAdpt->pDMAConf = (PSAL_I2C_DMA_USER_DEF)RtlZmalloc(sizeof(SAL_I2C_DMA_USER_DEF)); - pSalI2CUserCBAdpt = (PSAL_I2C_USERCB_ADPT)RtlZmalloc((sizeof(SAL_I2C_USERCB_ADPT)*SAL_USER_CB_NUM)); -#else - switch (I2CIdx){ - case I2C0_SEL: - { - pSalI2CMngtAdpt = &SalI2C0MngtAdpt; - pSalI2CMngtAdpt->pSalHndPriv = &SalI2C0HndPriv; - pSalI2CMngtAdpt->pHalInitDat = &HalI2C0InitData; - pSalI2CMngtAdpt->pHalOp = &HalI2COpSAL; - pSalI2CMngtAdpt->pIrqHnd = &I2C0IrqHandleDat; - pSalI2CMngtAdpt->pHalTxGdmaAdp = &HalI2C0TxGdmaAdpt; - pSalI2CMngtAdpt->pHalRxGdmaAdp = &HalI2C0RxGdmaAdpt; - pSalI2CMngtAdpt->pHalGdmaOp = &HalI2C0GdmaOp; - pSalI2CMngtAdpt->pIrqTxGdmaHnd = &I2C0TxGdmaIrqHandleDat; - pSalI2CMngtAdpt->pIrqRxGdmaHnd = &I2C0RxGdmaIrqHandleDat; - pSalI2CMngtAdpt->pUserCB = &SalI2C0UserCB; - pSalI2CMngtAdpt->pDMAConf = &SalI2C0DmaUserDef; - pSalI2CUserCBAdpt = (PSAL_I2C_USERCB_ADPT)&SalI2C0UserCBAdpt; - break; - } - - case I2C1_SEL: - { - pSalI2CMngtAdpt = &SalI2C1MngtAdpt; - pSalI2CMngtAdpt->pSalHndPriv = &SalI2C1HndPriv; - pSalI2CMngtAdpt->pHalInitDat = &HalI2C1InitData; - pSalI2CMngtAdpt->pHalOp = &HalI2COpSAL; - pSalI2CMngtAdpt->pIrqHnd = &I2C1IrqHandleDat; - pSalI2CMngtAdpt->pHalTxGdmaAdp = &HalI2C1TxGdmaAdpt; - pSalI2CMngtAdpt->pHalRxGdmaAdp = &HalI2C1RxGdmaAdpt; - pSalI2CMngtAdpt->pHalGdmaOp = &HalI2C1GdmaOp; - pSalI2CMngtAdpt->pIrqTxGdmaHnd = &I2C1TxGdmaIrqHandleDat; - pSalI2CMngtAdpt->pIrqRxGdmaHnd = &I2C1RxGdmaIrqHandleDat; - pSalI2CMngtAdpt->pUserCB = &SalI2C1UserCB; - pSalI2CMngtAdpt->pDMAConf = &SalI2C1DmaUserDef; - pSalI2CUserCBAdpt = (PSAL_I2C_USERCB_ADPT)&SalI2C1UserCBAdpt; - break; - } - - case I2C2_SEL: - { - pSalI2CMngtAdpt = &SalI2C2MngtAdpt; - pSalI2CMngtAdpt->pSalHndPriv = &SalI2C2HndPriv; - pSalI2CMngtAdpt->pHalInitDat = &HalI2C2InitData; - pSalI2CMngtAdpt->pHalOp = &HalI2COpSAL; - pSalI2CMngtAdpt->pIrqHnd = &I2C2IrqHandleDat; - pSalI2CMngtAdpt->pHalTxGdmaAdp = &HalI2C2TxGdmaAdpt; - pSalI2CMngtAdpt->pHalRxGdmaAdp = &HalI2C2RxGdmaAdpt; - pSalI2CMngtAdpt->pHalGdmaOp = &HalI2C2GdmaOp; - pSalI2CMngtAdpt->pIrqTxGdmaHnd = &I2C2TxGdmaIrqHandleDat; - pSalI2CMngtAdpt->pIrqRxGdmaHnd = &I2C2RxGdmaIrqHandleDat; - pSalI2CMngtAdpt->pUserCB = &SalI2C2UserCB; - pSalI2CMngtAdpt->pDMAConf = &SalI2C2DmaUserDef; - pSalI2CUserCBAdpt = (PSAL_I2C_USERCB_ADPT)&SalI2C2UserCBAdpt; - break; - } - - case I2C3_SEL: - { - pSalI2CMngtAdpt = &SalI2C3MngtAdpt; - pSalI2CMngtAdpt->pSalHndPriv = &SalI2C3HndPriv; - pSalI2CMngtAdpt->pHalInitDat = &HalI2C3InitData; - pSalI2CMngtAdpt->pHalOp = &HalI2COpSAL; - pSalI2CMngtAdpt->pIrqHnd = &I2C3IrqHandleDat; - pSalI2CMngtAdpt->pHalTxGdmaAdp = &HalI2C3TxGdmaAdpt; - pSalI2CMngtAdpt->pHalRxGdmaAdp = &HalI2C3RxGdmaAdpt; - pSalI2CMngtAdpt->pHalGdmaOp = &HalI2C3GdmaOp; - pSalI2CMngtAdpt->pIrqTxGdmaHnd = &I2C3TxGdmaIrqHandleDat; - pSalI2CMngtAdpt->pIrqRxGdmaHnd = &I2C3RxGdmaIrqHandleDat; - pSalI2CMngtAdpt->pUserCB = &SalI2C3UserCB; - pSalI2CMngtAdpt->pDMAConf = &SalI2C3DmaUserDef; - pSalI2CUserCBAdpt = (PSAL_I2C_USERCB_ADPT)&SalI2C3UserCBAdpt; - break; - } - - default - break; - } -#endif - - /*To assign user callback pointers*/ - pSalI2CMngtAdpt->pUserCB->pTXCB = pSalI2CUserCBAdpt; - pSalI2CMngtAdpt->pUserCB->pTXCCB = (pSalI2CUserCBAdpt+1); - pSalI2CMngtAdpt->pUserCB->pRXCB = (pSalI2CUserCBAdpt+2); - pSalI2CMngtAdpt->pUserCB->pRXCCB = (pSalI2CUserCBAdpt+3); - pSalI2CMngtAdpt->pUserCB->pRDREQCB = (pSalI2CUserCBAdpt+4); - pSalI2CMngtAdpt->pUserCB->pERRCB = (pSalI2CUserCBAdpt+5); - pSalI2CMngtAdpt->pUserCB->pDMATXCB = (pSalI2CUserCBAdpt+6); - pSalI2CMngtAdpt->pUserCB->pDMATXCCB = (pSalI2CUserCBAdpt+7); - pSalI2CMngtAdpt->pUserCB->pDMARXCB = (pSalI2CUserCBAdpt+8); - pSalI2CMngtAdpt->pUserCB->pDMARXCCB = (pSalI2CUserCBAdpt+9); - pSalI2CMngtAdpt->pUserCB->pGENCALLCB= (pSalI2CUserCBAdpt+10); - - /*To assign the rest pointers*/ - pSalI2CMngtAdpt->MstRDCmdCnt = 0; - pSalI2CMngtAdpt->InnerTimeOut = 2000; // inner time-out count, 2000 ms - pSalI2CMngtAdpt->pSalHndPriv->ppSalI2CHnd = (void**)&(pSalI2CMngtAdpt->pSalHndPriv); - - /* To assign the default (ROM) HAL OP initialization function */ -#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) || defined(CONFIG_CHIP_C_CUT) - pSalI2CMngtAdpt->pHalOpInit = HalI2COpInit_Patch; -#elif defined(CONFIG_CHIP_E_CUT) - // TODO: E-Cut - pSalI2CMngtAdpt->pHalOpInit = HalI2COpInit_V04; -#endif - - /* To assign the default (ROM) HAL GDMA OP initialization function */ - pSalI2CMngtAdpt->pHalGdmaOpInit = HalGdmaOpInit; - - /* To assign the default (ROM) SAL interrupt function */ -#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) || defined(CONFIG_CHIP_C_CUT) - pSalI2CMngtAdpt->pSalIrqFunc = I2CISRHandle_Patch; -#elif defined(CONFIG_CHIP_E_CUT) - pSalI2CMngtAdpt->pSalIrqFunc = I2CISRHandle_V04; -#endif - - /* To assign the default (ROM) SAL DMA TX interrupt function */ - pSalI2CMngtAdpt->pSalDMATxIrqFunc = I2CTXGDMAISRHandle; - - /* To assign the default (ROM) SAL DMA RX interrupt function */ - pSalI2CMngtAdpt->pSalDMARxIrqFunc = I2CRXGDMAISRHandle; - - return pSalI2CMngtAdpt; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CFreeMngtAdpt -// -// Description: -// Free all the previous allocated memory space. -// -// Arguments: -// [in] PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt - -// I2C SAL management adapter pointer -// -// -// Return: -// The status of the enable process. -// _EXIT_SUCCESS if the RtkI2CFreeMngtAdpt succeeded. -// _EXIT_FAILURE if the RtkI2CFreeMngtAdpt failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//--------------------------------------------------------------------------------------------------- -HAL_Status -RtkI2CFreeMngtAdpt( - IN PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt -){ -#ifdef I2C_STATIC_ALLOC - RtlMfree((uint8_t *)pSalI2CMngtAdpt->pUserCB->pTXCB, (sizeof(SAL_I2C_USERCB_ADPT)*SAL_USER_CB_NUM)); - RtlMfree((uint8_t *)pSalI2CMngtAdpt->pDMAConf, (sizeof(SAL_I2C_DMA_USER_DEF))); - RtlMfree((uint8_t *)pSalI2CMngtAdpt->pIrqRxGdmaHnd, (sizeof(IRQ_HANDLE))); - RtlMfree((uint8_t *)pSalI2CMngtAdpt->pIrqTxGdmaHnd, (sizeof(IRQ_HANDLE))); - RtlMfree((uint8_t *)pSalI2CMngtAdpt->pHalGdmaOp, (sizeof(HAL_GDMA_OP))); - RtlMfree((uint8_t *)pSalI2CMngtAdpt->pHalRxGdmaAdp, (sizeof(HAL_GDMA_ADAPTER))); - RtlMfree((uint8_t *)pSalI2CMngtAdpt->pHalTxGdmaAdp, (sizeof(HAL_GDMA_ADAPTER))); - RtlMfree((uint8_t *)pSalI2CMngtAdpt->pUserCB, sizeof(SAL_I2C_USER_CB)); - RtlMfree((uint8_t *)pSalI2CMngtAdpt->pIrqHnd, sizeof(IRQ_HANDLE)); - RtlMfree((uint8_t *)pSalI2CMngtAdpt->pHalOp, sizeof(HAL_I2C_OP)); - RtlMfree((uint8_t *)pSalI2CMngtAdpt->pHalInitDat, sizeof(HAL_I2C_INIT_DAT)); - RtlMfree((uint8_t *)pSalI2CMngtAdpt->pSalHndPriv, sizeof(SAL_I2C_HND_PRIV)); - RtlMfree((uint8_t *)pSalI2CMngtAdpt, sizeof(SAL_I2C_MNGT_ADPT)); -#else - ; -#endif - - return HAL_OK; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CGetSalHnd -// -// Description: -// Allocation of lower layer memory spaces will be done by invoking RtkI2CGetMngtAdpt -// in this function and return a SAL_I2C_HND pointer to upper layer. -// According to the given I2C index, RtkI2CGetMngtAdpt will allocate all the memory -// space such as SAL_I2C_HND, HAL_I2C_INIT_DAT, SAL_I2C_USER_CB etc. -// -// -// Arguments: -// [in] uint8_t I2CIdx - -// I2C Index -// -// Return: -// PSAL_I2C_HND -// A pointer to SAL_I2C_HND which is allocated in the lower layer. -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -PSAL_I2C_HND -RtkI2CGetSalHnd( - IN uint8_t I2CIdx -){ - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND pSalI2CHND = NULL; - - /* Check the user define setting and the given index */ - if (RtkI2CIdxChk(I2CIdx)) { - return (PSAL_I2C_HND)NULL; - } - - /* Invoke RtkI2CGetMngtAdpt to get the I2C SAL management adapter pointer */ - pSalI2CMngtAdpt = RtkI2CGetMngtAdpt(I2CIdx); - - /* Assign the private SAL handle to public SAL handle */ - pSalI2CHND = &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); - - /* Assign the internal HAL initial data pointer to the SAL handle */ - pSalI2CHND->pInitDat = pSalI2CMngtAdpt->pHalInitDat; - - /* Assign the internal user callback pointer to the SAL handle */ - pSalI2CHND->pUserCB = pSalI2CMngtAdpt->pUserCB; - - /* Assign the internal user define DMA configuration to the SAL handle */ - pSalI2CHND->pDMAConf = pSalI2CMngtAdpt->pDMAConf; - - return &(pSalI2CMngtAdpt->pSalHndPriv->SalI2CHndPriv); -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkI2CFreeSalHnd -// -// Description: -// Based on the given pSalI2CHND, the top layer management adapter pointer could -// be reversely parsed. And free memory space is done by RtkI2CFreeMngtAdpt. -// -// -// Arguments: -// [in] PSAL_I2C_HND pSalI2CHND - -// SAL I2C handle -// -// Return: -// The status of the free SAL memory space process. -// _EXIT_SUCCESS if the RtkI2CFreeSalHnd succeeded. -// _EXIT_FAILURE if the RtkI2CFreeSalHnd failed. -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//---------------------------------------------------------------------------------------------------- -HAL_Status -RtkI2CFreeSalHnd( - IN PSAL_I2C_HND pSalI2CHND -){ - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PSAL_I2C_HND_PRIV pSalI2CHNDPriv = NULL; - - /* To get the SAL_I2C_MNGT_ADPT pointer */ - pSalI2CHNDPriv = CONTAINER_OF(pSalI2CHND, SAL_I2C_HND_PRIV, SalI2CHndPriv); - pSalI2CMngtAdpt = CONTAINER_OF(pSalI2CHNDPriv->ppSalI2CHnd, SAL_I2C_MNGT_ADPT, pSalHndPriv); - - /* Invoke RtkI2CFreeMngtAdpt to free all the lower layer memory space */ - return (RtkI2CFreeMngtAdpt(pSalI2CMngtAdpt)); -} - -#endif // end of "#ifndef CONFIG_MBED_ENABLED" - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// RtkSalI2CSts -// -// Description: -// Get i2c status -// -// Arguments: -// A SAL operation adapter pointer -// -// Return: -// NA -// -// Note: -// NA -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-03. -// -//--------------------------------------------------------------------------------------------------- -uint32_t -RtkSalI2CSts( - IN void *Data -){ - PSAL_I2C_HND pSalI2CHND = (PSAL_I2C_HND) Data; - PSAL_I2C_HND_PRIV pSalI2CHNDPriv = NULL; - PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL; - PHAL_I2C_INIT_DAT pHalI2CInitDat = NULL; - PHAL_I2C_OP pHalI2COP = NULL; - uint32_t I2CLocalTemp; - - - /* To Get the SAL_I2C_MNGT_ADPT Pointer */ - pSalI2CHNDPriv = CONTAINER_OF(pSalI2CHND, SAL_I2C_HND_PRIV, SalI2CHndPriv); - pSalI2CMngtAdpt = CONTAINER_OF(pSalI2CHNDPriv->ppSalI2CHnd, SAL_I2C_MNGT_ADPT, pSalHndPriv); - - pHalI2CInitDat = pSalI2CMngtAdpt->pHalInitDat; - pHalI2COP = pSalI2CMngtAdpt->pHalOp; - - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_RAW_INTR_STAT); - - if (I2CLocalTemp & BIT_IC_RAW_INTR_STAT_GEN_CALL) { - return 2; - } - else if (I2CLocalTemp & BIT_IC_RAW_INTR_STAT_RD_REQ) { - return 1; - } - - I2CLocalTemp = pHalI2COP->HalI2CReadReg(pHalI2CInitDat, REG_DW_I2C_IC_STATUS); - - if (I2CLocalTemp & BIT_IC_STATUS_RFNE) { - return 3; - } - - return 0; -} - -#endif // CONFIG_I2C_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_i2c.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_i2c.h deleted file mode 100644 index 88be61e..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_i2c.h +++ /dev/null @@ -1,594 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_I2C_H_ //#ifndef _HAL_I2C_H_ -#define _HAL_I2C_H_ - -#include "rtl8195a_i2c.h" -#include "hal_gdma.h" - -//================= I2C CONFIGURATION START ================== -// I2C SAL User Configuration Flags - -// I2C SAL operation types -#define I2C_POLL_OP_TYPE 1 //1 -#define I2C_INTR_OP_TYPE 1 //1 -#define I2C_DMA_OP_TYPE 1 //1 - -// I2C supports user register address -#define I2C_USER_REG_ADDR 1 //I2C User specific register address by using - //the first I2C data as the register - //address - -// I2C SAL used module. Please set the I2C module flag to 1 to enable the related -// I2C module functions. -#define I2C0_USED 1 -#define I2C1_USED 1 -#define I2C2_USED 1 -#define I2C3_USED 1 -//================= I2C CONFIGURATION END =================== - - -//================= I2C HAL START ========================== -// I2C debug output -#define I2C_PREFIX "RTL8195A[i2c]: " -#define I2C_PREFIX_LVL " [i2c_DBG]: " - -typedef enum _I2C_DBG_LVL_ { - HAL_I2C_LVL = 0x01, - SAL_I2C_LVL = 0x02, - VERI_I2C_LVL = 0x03, -}I2C_DBG_LVL,*PI2C_DBG_LVL; - -#if CONFIG_DEBUG_LOG > 0 -#ifdef CONFIG_DEBUG_LOG_I2C_HAL -#define DBG_I2C_LOG_PERD 100 - - #define I2CDBGLVL 0xFF - #define DBG_8195A_I2C(...) do{ \ - _DbgDump(I2C_PREFIX __VA_ARGS__);\ - }while(0) - - #define DBG_8195A_I2C_LVL(LVL,...) do{\ - if (LVL&I2CDBGLVL){\ - _DbgDump(I2C_PREFIX_LVL __VA_ARGS__);\ - }\ - }while(0) -#else - #define DBG_I2C_LOG_PERD 100 - #define DBG_8195A_I2C(...) - #define DBG_8195A_I2C_LVL(...) -#endif -#else - #define DBG_I2C_LOG_PERD 100 - #define DBG_8195A_I2C(...) - #define DBG_8195A_I2C_LVL(...) -#endif - -#define I2C_MTR_RTY_CNT 1024 -//====================================================== -// I2C HAL related enumeration -// I2C Module Selection -typedef enum _I2C_MODULE_SEL_ { - I2C0_SEL = 0x0, - I2C1_SEL = 0x1, - I2C2_SEL = 0x2, - I2C3_SEL = 0x3, -}I2C_MODULE_SEL,*PI2C_MODULE_SEL; - -// I2C HAL initial data structure -typedef struct _HAL_I2C_INIT_DAT_ { - uint8_t I2CIdx; //I2C index used - uint8_t I2CEn; //I2C module enable - uint8_t I2CMaster; //Master or Slave mode - uint8_t I2CAddrMod; //I2C addressing mode(7-bit, 10-bit) - - uint8_t I2CSpdMod; //I2C speed mode(Standard, Fast, High) - uint8_t I2CSetup; //I2C SDA setup time - uint8_t I2CRXTL; //I2C RX FIFO Threshold - uint8_t I2CTXTL; //I2C TX FIFO Threshold - - uint8_t I2CBusLd; //I2C bus load (pf) for high speed mode - uint8_t I2CReSTR; //I2C restart support - uint8_t I2CGC; //I2C general support - uint8_t I2CStartB; //I2C start byte support - - uint8_t I2CSlvNoAck; //I2C slave no ack support - uint8_t I2CDMACtrl; //I2C DMA feature support - uint8_t I2CCmd; //I2C Command - uint8_t I2CDataLen; //I2C Data Length - - uint8_t I2CSlvAckGC; //I2C slave acks to General Call - uint8_t I2CStop; //I2C issues STOP bit or not - uint16_t RSVD0; //Bit0: used to control HalI2CMassSendRtl8195a_Patch sending - // RESTART or not by upper layer SW. - - uint8_t *I2CRWData; //I2C Read/Write data pointer - - uint16_t I2CIntrMSK; //I2C Interrupt Mask - uint16_t I2CIntrClr; //I2C Interrupt register to clear - - uint16_t I2CAckAddr; //I2C target address in I2C Master mode, - //ack address in I2C Slave mode - uint16_t I2CSdaHd; //I2C SDA hold time - - uint32_t I2CClk; //I2C bus clock (in kHz) - - uint8_t I2CTxDMARqLv; //I2C TX DMA Empty Level - uint8_t I2CRxDMARqLv; //I2C RX DMA Full Level - uint16_t RSVD1; //Reserved -}HAL_I2C_INIT_DAT,*PHAL_I2C_INIT_DAT; - -// I2C HAL Operations -typedef struct _HAL_I2C_OP_ { - HAL_Status (*HalI2CInit) (void *Data); //HAL I2C initialization - HAL_Status (*HalI2CDeInit) (void *Data); //HAL I2C de-initialization - HAL_Status (*HalI2CSend) (void *Data); //HAL I2C send - uint8_t (*HalI2CReceive) (void *Data); //HAL I2C receive - HAL_Status (*HalI2CEnable) (void *Data); //HAL I2C enable module - HAL_Status (*HalI2CIntrCtrl) (void *Data); //HAL I2C interrupt control - uint32_t (*HalI2CReadReg) (void *Data, uint8_t I2CReg);//HAL I2C read register - HAL_Status (*HalI2CWriteReg) (void *Data, uint8_t I2CReg, uint32_t RegVal);//HAL I2C write register - HAL_Status (*HalI2CSetCLK) (void *Data); //HAL I2C set bus clock - HAL_Status (*HalI2CMassSend) (void *Data); //HAL I2C mass send - HAL_Status (*HalI2CClrIntr) (void *Data); //HAL I2C clear interrupts - HAL_Status (*HalI2CClrAllIntr) (void *Data); //HAL I2C clear all interrupts - HAL_Status (*HalI2CDMACtrl) (void *Data); //HAL I2C DMA control -}HAL_I2C_OP, *PHAL_I2C_OP; -//================= I2C HAL END =========================== - - -//================= I2C SAL START ========================== -//I2C SAL Macros - -//====================================================== -// I2C SAL related enumerations -// I2C Extend Features -typedef enum _I2C_EXD_SUPPORT_{ - I2C_EXD_RESTART = 0x1, //BIT_0, RESTART bit - I2C_EXD_GENCALL = 0x2, //BIT_1, Master generates General Call. All "send" operations generate General Call addresss - I2C_EXD_STARTB = 0x4, //BIT_2, Using START BYTE, instead of START Bit - I2C_EXD_SLVNOACK = 0x8, //BIT_3, Slave no ack to master - I2C_EXD_BUS400PF = 0x10, //BIT_4, I2C bus loading is 400pf - I2C_EXD_SLVACKGC = 0x20, //BIT_5, Slave acks to a General Call - I2C_EXD_USER_REG = 0x40, //BIT_6, Using User Register Address - I2C_EXD_USER_TWOB = 0x80, //BIT_7, User Register Address is 2-byte - I2C_EXD_MTR_ADDR_RTY= 0x100, //BIT_8, Master retries to send start condition and Slave address when the slave doesn't ack - // the address. - I2C_EXD_MTR_ADDR_UPD= 0x200, //BIT_9, Master dynamically updates slave address - I2C_EXD_MTR_HOLD_BUS= 0x400, //BIT_10, Master doesn't generate STOP when the FIFO is empty. This would make Master hold - // the bus. -}I2C_EXD_SUPPORT,*PI2C_EXD_SUPPORT; - -// I2C operation type -typedef enum _I2C_OP_TYPE_ { - I2C_POLL_TYPE = 0x0, - I2C_DMA_TYPE = 0x1, - I2C_INTR_TYPE = 0x2, -}I2C_OP_TYPE, *PI2C_OP_TYPE; - -// I2C pinmux selection -typedef enum _I2C_PINMUX_ { - I2C_PIN_S0 = 0x0, - I2C_PIN_S1 = 0x1, - I2C_PIN_S2 = 0x2, - I2C_PIN_S3 = 0x3, //Only valid for I2C0 and I2C3 -}I2C_PINMUX, *PI2C_PINMUX; - -// I2C module status -typedef enum _I2C_MODULE_STATUS_ { - I2C_DISABLE = 0x0, - I2C_ENABLE = 0x1, -}I2C_MODULE_STATUS, *PI2C_MODULE_STATUS; - -// I2C device status -typedef enum _I2C_Device_STATUS_ { - I2C_STS_UNINITIAL = 0x00, - I2C_STS_INITIALIZED = 0x01, - I2C_STS_IDLE = 0x02, - - I2C_STS_TX_READY = 0x03, - I2C_STS_TX_ING = 0x04, - - I2C_STS_RX_READY = 0x05, - I2C_STS_RX_ING = 0x06, - - I2C_STS_ERROR = 0x10, - I2C_STS_TIMEOUT = 0x11, -}I2C_Device_STATUS, *PI2C_Device_STATUS; - -// I2C feature status -typedef enum _I2C_FEATURE_STATUS_{ - I2C_FEATURE_DISABLED = 0, - I2C_FEATURE_ENABLED = 1, -}I2C_FEATURE_STATUS,*PI2C_FEATURE_STATUS; - -// I2C device mode -typedef enum _I2C_DEV_MODE_ { - I2C_SLAVE_MODE = 0x0, - I2C_MASTER_MODE = 0x1, -}I2C_DEV_MODE, *PI2C_DEV_MODE; - -// I2C Bus Transmit/Receive -typedef enum _I2C_DIRECTION_ { - I2C_ONLY_TX = 0x1, - I2C_ONLY_RX = 0x2, - I2C_TXRX = 0x3, -}I2C_DIRECTION, *PI2C_DIRECTION; - -//I2C DMA module number -typedef enum _I2C_DMA_MODULE_SEL_ { - I2C_DMA_MODULE_0 = 0x0, - I2C_DMA_MODULE_1 = 0x1 -}I2C_DMA_MODULE_SEL, *PI2C_DMA_MODULE_SEL; - -// I2C0 DMA peripheral number -typedef enum _I2C0_DMA_PERI_NUM_ { - I2C0_DMA_TX_NUM = 0x8, - I2C0_DMA_RX_NUM = 0x9, -}I2C0_DMA_PERI_NUM,*PI2C0_DMA_PERI_NUM; - -// I2C1 DMA peripheral number -typedef enum _I2C1_DMA_PERI_NUM_ { - I2C1_DMA_TX_NUM = 0xA, - I2C1_DMA_RX_NUM = 0xB, -}I2C1_DMA_PERI_NUM,*PI2C1_DMA_PERI_NUM; - -// I2C0 DMA module used -typedef enum _I2C0_DMA_MODULE_ { - I2C0_DMA0 = 0x0, - I2C0_DMA1 = 0x1, -}I2C0_DMA_MODULE,*PI2C0_DMA_MODULE; - -// I2C0 DMA module used -typedef enum _I2C1_DMA_MODULE_ { - I2C1_DMA0 = 0x0, - I2C1_DMA1 = 0x1, -}I2C1_DMA_MODULE,*PI2C1_DMA_MODULE; - -// I2C command type -typedef enum _I2C_COMMAND_TYPE_ { - I2C_WRITE_CMD = 0x0, - I2C_READ_CMD = 0x1, -}I2C_COMMAND_TYPE,*PI2C_COMMAND_TYPE; - -// I2C STOP BIT -typedef enum _I2C_STOP_TYPE_ { - I2C_STOP_DIS = 0x0, - I2C_STOP_EN = 0x1, -}I2C_STOP_TYPE, *PI2C_STOP_TYPE; - -// I2C error type -typedef enum _I2C_ERR_TYPE_ { - I2C_ERR_RX_UNDER = 0x01, //I2C RX FIFO Underflow - I2C_ERR_RX_OVER = 0x02, //I2C RX FIFO Overflow - I2C_ERR_TX_OVER = 0x04, //I2C TX FIFO Overflow - I2C_ERR_TX_ABRT = 0x08, //I2C TX terminated - I2C_ERR_SLV_TX_NACK = 0x10, //I2C slave transmission terminated by master NACK, - //but there are data in slave TX FIFO - I2C_ERR_MST_A_NACK = 0x12, - I2C_ERR_MST_D_NACK = 0x13, - I2C_ERR_USER_REG_TO = 0x20, - - I2C_ERR_RX_CMD_TO = 0x21, - I2C_ERR_RX_FF_TO = 0x22, - I2C_ERR_TX_CMD_TO = 0x23, - I2C_ERR_TX_FF_TO = 0x24, - - I2C_ERR_TX_ADD_TO = 0x25, - I2C_ERR_RX_ADD_TO = 0x26, -}I2C_ERR_TYPE, *PI2C_ERR_TYPE; - -// I2C Time Out type -typedef enum _I2C_TIMEOUT_TYPE_ { - I2C_TIMEOOUT_DISABLE = 0x00, - I2C_TIMEOOUT_ENDLESS = -1 // 0xFFFFFFFF, -}I2C_TIMEOUT_TYPE, *PI2C_TIMEOUT_TYPE; - -//====================================================== -// SAL I2C related data structures -// I2C user callback adapter -typedef struct _SAL_I2C_USERCB_ADPT_ { - void (*USERCB) (void *Data); - uint32_t USERData; -}SAL_I2C_USERCB_ADPT, *PSAL_I2C_USERCB_ADPT; - -// I2C user callback structure -typedef struct _SAL_I2C_USER_CB_ { - PSAL_I2C_USERCB_ADPT pTXCB; //I2C Transmit Callback - PSAL_I2C_USERCB_ADPT pTXCCB; //I2C Transmit Complete Callback - PSAL_I2C_USERCB_ADPT pRXCB; //I2C Receive Callback - PSAL_I2C_USERCB_ADPT pRXCCB; //I2C Receive Complete Callback - PSAL_I2C_USERCB_ADPT pRDREQCB; //I2C Read Request Callback - PSAL_I2C_USERCB_ADPT pERRCB; //I2C Error Callback - PSAL_I2C_USERCB_ADPT pDMATXCB; //I2C DMA Transmit Callback - PSAL_I2C_USERCB_ADPT pDMATXCCB; //I2C DMA Transmit Complete Callback - PSAL_I2C_USERCB_ADPT pDMARXCB; //I2C DMA Receive Callback - PSAL_I2C_USERCB_ADPT pDMARXCCB; //I2C DMA Receive Complete Callback - PSAL_I2C_USERCB_ADPT pGENCALLCB; //I2C General Call Callback -}SAL_I2C_USER_CB, *PSAL_I2C_USER_CB; - -// I2C Transmit Buffer -typedef struct _SAL_I2C_TRANSFER_BUF_ { - uint16_t DataLen; //I2C Transmfer Length - uint16_t TargetAddr; //I2C Target Address. It's only valid in Master Mode. - uint32_t RegAddr; //I2C Register Address. It's only valid in Master Mode. - uint32_t RSVD; // - uint8_t *pDataBuf; //I2C Transfer Buffer Pointer -}SAL_I2C_TRANSFER_BUF,*PSAL_I2C_TRANSFER_BUF; - -typedef struct _SAL_I2C_DMA_USER_DEF_ { - uint8_t TxDatSrcWdth; - uint8_t TxDatDstWdth; - uint8_t TxDatSrcBstSz; - uint8_t TxDatDstBstSz; - uint8_t TxChNo; - uint8_t RSVD0; - uint16_t RSVD1; - uint8_t RxDatSrcWdth; - uint8_t RxDatDstWdth; - uint8_t RxDatSrcBstSz; - uint8_t RxDatDstBstSz; - uint8_t RxChNo; - uint8_t RSVD2; - uint16_t RSVD3; -}SAL_I2C_DMA_USER_DEF, *PSAL_I2C_DMA_USER_DEF; - -// RTK I2C OP -typedef struct _RTK_I2C_OP_ { - HAL_Status (*Init) (void *Data); - HAL_Status (*DeInit) (void *Data); - HAL_Status (*Send) (void *Data); - HAL_Status (*Receive) (void *Data); - HAL_Status (*IoCtrl) (void *Data); - HAL_Status (*PowerCtrl) (void *Data); -}RTK_I2C_OP, *PRTK_I2C_OP; - -// Software API Level I2C Handler -typedef struct _SAL_I2C_HND_ { - uint8_t DevNum; //I2C device number - uint8_t PinMux; //I2C pin mux seletion - uint8_t OpType; //I2C operation type selection - volatile uint8_t DevSts; //I2C device status - - uint8_t I2CMaster; //I2C Master or Slave mode - uint8_t I2CAddrMod; //I2C 7-bit or 10-bit mode - uint8_t I2CSpdMod; //I2C SS/ FS/ HS speed mode - uint8_t I2CAckAddr; //I2C target address in Master - //mode or ack address in Slave - //mode - - uint16_t I2CClk; //I2C bus clock - uint8_t MasterRead; //I2C Master Read Supported, - //An Address will be sent before - //read data back. - - uint8_t I2CDmaSel; //I2C DMA module select - // 0 for DMA0, - // 1 for DMA1 - uint8_t I2CTxDMARqLv; //I2C TX DMA Empty Level - uint8_t I2CRxDMARqLv; //I2C RX DMA Full Level - uint16_t RSVD0; //Reserved - - uint32_t AddRtyTimeOut; //I2C TimeOut Value for master send address retry - //(Originally Reserved.) - - uint32_t I2CExd; //I2C extended options: - //bit 0: I2C RESTART supported, - // 0 for NOT supported, - // 1 for supported - //bit 1: I2C General Call supported - // 0 for NOT supported, - // 1 for supported - //bit 2: I2C START Byte supported - // 0 for NOT supported, - // 1 for supported - //bit 3: I2C Slave-No-Ack - // supported - // 0 for NOT supported, - // 1 for supported - //bit 4: I2C bus loading, - // 0 for 100pf, - // 1 for 400pf - //bit 5: I2C slave ack to General - // Call - //bit 6: I2C User register address - //bit 7: I2C 2-Byte User register - // address - //bit 8: I2C slave address no ack retry, - // It's only for Master mode, - // when slave doesn't ack the - // address - //bit 31~bit 8: Reserved - uint32_t ErrType; // - uint32_t TimeOut; //I2C IO Timeout count, in ms - - PHAL_I2C_INIT_DAT pInitDat; //Pointer to I2C initial data struct - PSAL_I2C_TRANSFER_BUF pTXBuf; //Pointer to I2C TX buffer - PSAL_I2C_TRANSFER_BUF pRXBuf; //Pointer to I2C RX buffer - PSAL_I2C_USER_CB pUserCB; //Pointer to I2C User Callback - PSAL_I2C_DMA_USER_DEF pDMAConf; //Pointer to I2C User Define DMA config -}SAL_I2C_HND, *PSAL_I2C_HND; - - - -//====================================================== -// I2C SAL Function Prototypes - -// For checking I2C input index valid or not -static inline HAL_Status -RtkI2CIdxChk( - IN uint8_t I2CIdx -) -{ - if (I2CIdx > I2C3_SEL) - return HAL_ERR_UNKNOWN; - - return HAL_OK; -} -#if 0 -//For checking I2C operation type valid or not -static inline HAL_Status -RtkI2COpTypeChk( - IN void *Data -) -{ - PSAL_I2C_HND pSalI2CHND = (PSAL_I2C_HND) Data; - - if (pSalI2CHND->OpType == I2C_POLL_TYPE) - return HAL_ERR_UNKNOWN; - - if (pSalI2CHND->OpType == I2C_DMA_TYPE) - return HAL_ERR_UNKNOWN; - - if (pSalI2CHND->OpType == I2C_INTR_TYPE) - return HAL_ERR_UNKNOWN; - - pSalI2CHND = pSalI2CHND; - - return HAL_OK; -} -#endif -//For checking I2C DMA available or not -static inline HAL_Status -RtkI2CDMAChk( - IN void *Data -) -{ - PSAL_I2C_HND pSalI2CHND = (PSAL_I2C_HND) Data; - - if (pSalI2CHND->OpType == I2C_DMA_TYPE) { - if (pSalI2CHND->DevNum >= I2C2_SEL) - return HAL_ERR_UNKNOWN; - } - else { - return HAL_ERR_UNKNOWN; - } - - return HAL_OK; -} - -//For checking I2C DMA available or not -static inline HAL_Status -RtkI2CDMAInitChk( - IN void *Data -) -{ - PSAL_I2C_HND pSalI2CHND = (PSAL_I2C_HND) Data; - - if (pSalI2CHND->OpType != I2C_DMA_TYPE) { - return HAL_ERR_UNKNOWN; - } - else { - return HAL_OK; - } - -} - -//====================================================== -//SAL I2C management function prototype -_LONG_CALL_ROM_ HAL_Status RtkI2CLoadDefault(IN void *Data); -_LONG_CALL_ROM_ HAL_Status RtkI2CInit(IN void *Data); -_LONG_CALL_ROM_ HAL_Status RtkI2CDeInit(IN void *Data); -_LONG_CALL_ROM_ HAL_Status RtkI2CSend(IN void *Data); -_LONG_CALL_ROM_ HAL_Status RtkI2CReceive(IN void *Data); -_LONG_CALL_ROM_ void RtkSalI2COpInit(IN void *Data); -_LONG_CALL_ROM_ HAL_Status RtkI2CSendUserAddr(IN void *Data,IN uint8_t MtrWr); -_LONG_CALL_ROM_ HAL_Status RtkI2CIoCtrl(IN void *Data); -_LONG_CALL_ROM_ HAL_Status RtkI2CPowerCtrl(IN void *Data); -_LONG_CALL_ HAL_Status RtkI2CInitForPS(IN void *Data); -_LONG_CALL_ HAL_Status RtkI2CDeInitForPS(IN void *Data); -_LONG_CALL_ HAL_Status RtkI2CDisablePS(IN void *Data); -_LONG_CALL_ HAL_Status RtkI2CEnablePS(IN void *Data); -//================= I2C SAL END =========================== - - -//================= I2C SAL MANAGEMENT START ================= -// I2C SAL management macros -#define SAL_USER_CB_NUM (sizeof(SAL_I2C_USER_CB) / sizeof(PSAL_I2C_USERCB_ADPT)) - -//====================================================== -// I2C SAL management data structures -// I2C SAL handle private -typedef struct _SAL_I2C_HND_PRIV_ { - void **ppSalI2CHnd; //Pointer to SAL_I2C_HND pointer - SAL_I2C_HND SalI2CHndPriv; //Private SAL_I2C_HND -}SAL_I2C_HND_PRIV, *PSAL_I2C_HND_PRIV; - -//I2C SAL management adapter -typedef struct _SAL_I2C_MNGT_ADPT_ { - PSAL_I2C_HND_PRIV pSalHndPriv; //Pointer to SAL_I2C_HND - PHAL_I2C_INIT_DAT pHalInitDat; //Pointer to HAL I2C initial data( HAL_I2C_INIT_DAT ) - PHAL_I2C_OP pHalOp; //Pointer to HAL I2C operation( HAL_I2C_OP ) - void (*pHalOpInit)(void*); //Pointer to HAL I2C initialize function - PIRQ_HANDLE pIrqHnd; //Pointer to IRQ handler in SAL layer( IRQ_HANDLE ) - PSAL_I2C_USER_CB pUserCB; //Pointer to SAL user callbacks (SAL_I2C_USER_CB ) - volatile uint32_t MstRDCmdCnt; //Used for Master Read command count - volatile uint32_t InnerTimeOut; //Used for SAL internal timeout count - void (*pSalIrqFunc)(void*); //Used for SAL I2C interrupt function - - PSAL_I2C_DMA_USER_DEF pDMAConf; //Pointer to I2C User Define DMA config - PHAL_GDMA_ADAPTER pHalTxGdmaAdp; //Pointer to HAL_GDMA_ADAPTER - PHAL_GDMA_ADAPTER pHalRxGdmaAdp; //Pointer to HAL_GDMA_ADAPTER - PHAL_GDMA_OP pHalGdmaOp; //Pointer to HAL_GDMA_OP - void (*pHalGdmaOpInit)(void*); //Pointer to HAL I2C initialize function - PIRQ_HANDLE pIrqTxGdmaHnd; //Pointer to IRQ handler for Tx GDMA - PIRQ_HANDLE pIrqRxGdmaHnd; //Pointer to IRQ handler for Rx GDMA - void (*pSalDMATxIrqFunc)(void*); //Used for SAL I2C interrupt function - void (*pSalDMARxIrqFunc)(void*); //Used for SAL I2C interrupt function - uint32_t RSVD; //Reserved -}SAL_I2C_MNGT_ADPT, *PSAL_I2C_MNGT_ADPT; - -//====================================================== -//SAL I2C management function prototype -PSAL_I2C_MNGT_ADPT RtkI2CGetMngtAdpt(IN uint8_t I2CIdx); -HAL_Status RtkI2CFreeMngtAdpt(IN PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt); -PSAL_I2C_HND RtkI2CGetSalHnd(IN uint8_t I2CIdx); -HAL_Status RtkI2CFreeSalHnd(IN PSAL_I2C_HND pSalI2CHND); -uint32_t RtkSalI2CSts(IN void *Data); - -extern _LONG_CALL_ void I2CISRHandle(IN void *Data); -extern _LONG_CALL_ void I2CTXGDMAISRHandle(IN void *Data); -extern _LONG_CALL_ void I2CRXGDMAISRHandle(IN void *Data); -extern HAL_Status I2CIsTimeout (IN uint32_t StartCount, IN uint32_t TimeoutCnt); -extern HAL_TIMER_OP HalTimerOp; -//====================================================== -// Function Prototypes -_LONG_CALL_ void HalI2COpInit(IN void *Data); -//================= I2C SAL MANAGEMENT END ================== - -//================= Rtl8195a I2C V02 function prototype ============ -_LONG_CALL_ void HalI2COpInitV02(IN void *Data); -_LONG_CALL_ void I2CISRHandleV02(IN void *Data); -_LONG_CALL_ HAL_Status RtkI2CSendV02(IN void *Data); -_LONG_CALL_ HAL_Status RtkI2CReceiveV02(IN void *Data); -_LONG_CALL_ void RtkSalI2COpInitV02(IN void *Data); -//================= Rtl8195a I2C V02 function prototype END========== - -//================= Rtl8195a I2C V04 function prototype ============ -_LONG_CALL_ void HalI2COpInit_V04(IN void *Data); -_LONG_CALL_ void I2CISRHandle_V04(IN void *Data); -//================= Rtl8195a I2C V04 function prototype END========== - -//====================================================== -//SAL I2C patch function prototype -HAL_Status RtkI2CSend_Patch(IN void *Data); -HAL_Status RtkI2CReceive_Patch(IN void *Data); -void HalI2COpInit_Patch(IN void *Data); -void I2CISRHandle_Patch(IN void *Data); - -#ifndef CONFIG_RELEASE_BUILD_LIBRARIES -#define RtkI2CSend RtkI2CSend_Patch -#define RtkI2CReceive RtkI2CReceive_Patch -#endif -HAL_Status RtkI2CSend_Patch(IN void *Data); -HAL_Status RtkI2CReceive_Patch(IN void *Data); -//================= I2C SAL END =========================== - -#endif //#ifndef _HAL_I2C_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_i2s.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_i2s.c deleted file mode 100644 index 5474e4d..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_i2s.c +++ /dev/null @@ -1,562 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#include "rtl8195a.h" -#include "hal_i2s.h" -#include "rand.h" -#include "rtl_utility.h" - -#ifdef CONFIG_I2S_EN - -//1 need to be modified - - -/*====================================================== - Local used variables -*/ -SRAM_BF_DATA_SECTION -HAL_I2S_OP HalI2SOpSAL={0}; - - -void -I2SISRHandle( - IN void *Data -) -{ - PHAL_I2S_ADAPTER pI2SAdp = (PHAL_I2S_ADAPTER) Data; - PHAL_I2S_OP pHalI2SOP = &HalI2SOpSAL; - PHAL_I2S_INIT_DAT pI2SCfg = pI2SAdp->pInitDat; - uint32_t I2STxIsr, I2SRxIsr; - uint8_t I2SPageNum = pI2SCfg->I2SPageNum+1; -// uint32_t I2SPageSize = (pI2SAdp->I2SPageSize+1)<<2; - uint32_t i; - uint32_t pbuf; - - I2STxIsr = pHalI2SOP->HalI2SReadReg(pI2SCfg, REG_I2S_TX_STATUS_INT); - I2SRxIsr = pHalI2SOP->HalI2SReadReg(pI2SCfg, REG_I2S_RX_STATUS_INT); - - pI2SCfg->I2STxIntrClr = I2STxIsr; - pI2SCfg->I2SRxIntrClr = I2SRxIsr; - pHalI2SOP->HalI2SClrIntr(pI2SCfg); - - for (i=0 ; iI2SHWTxIdx)) { -// pbuf = ((uint32_t)(pI2SCfg->I2STxData)) + (I2SPageSize*pI2SCfg->I2SHWTxIdx); - pbuf = (uint32_t)pI2SAdp->TxPageList[pI2SCfg->I2SHWTxIdx]; - pI2SAdp->UserCB.TxCCB(pI2SAdp->UserCB.TxCBId, (char*)pbuf); - I2STxIsr &= ~(1<I2SHWTxIdx); - pI2SCfg->I2SHWTxIdx += 1; - if (pI2SCfg->I2SHWTxIdx == I2SPageNum) { - pI2SCfg->I2SHWTxIdx = 0; - } - } - - if (I2SRxIsr & (1<I2SHWRxIdx)) { -// pbuf = ((uint32_t)(pI2SCfg->I2SRxData)) + (I2SPageSize*pI2SCfg->I2SHWRxIdx); - pbuf = (uint32_t)pI2SAdp->RxPageList[pI2SCfg->I2SHWRxIdx]; - pI2SAdp->UserCB.RxCCB(pI2SAdp->UserCB.RxCBId, (char*)pbuf); - I2SRxIsr &= ~(1<I2SHWRxIdx); - pI2SCfg->I2SHWRxIdx += 1; - if (pI2SCfg->I2SHWRxIdx == I2SPageNum) { - pI2SCfg->I2SHWRxIdx = 0; - } - } - } -} - - -static HAL_Status -RtkI2SIrqInit( - IN PHAL_I2S_ADAPTER pI2SAdapter -) -{ - PIRQ_HANDLE pIrqHandle; - - if (pI2SAdapter->DevNum > I2S_MAX_ID) { - DBG_I2S_ERR("RtkI2SIrqInit: Invalid I2S Index(&d)\r\n", pI2SAdapter->DevNum); - return HAL_ERR_PARA; - } - - pIrqHandle = &pI2SAdapter->IrqHandle; - - switch (pI2SAdapter->DevNum){ - case I2S0_SEL: - pIrqHandle->IrqNum = I2S0_PCM0_IRQ; - break; - - case I2S1_SEL: - pIrqHandle->IrqNum = I2S1_PCM1_IRQ; - break; - - default: - return HAL_ERR_PARA; - } - - pIrqHandle->Data = (uint32_t) (pI2SAdapter); - pIrqHandle->IrqFun = (IRQ_FUN) I2SISRHandle; - pIrqHandle->Priority = 6; - InterruptRegister(pIrqHandle); - InterruptEn(pIrqHandle); - - return HAL_OK; -} - -static HAL_Status -RtkI2SIrqDeInit( - IN PHAL_I2S_ADAPTER pI2SAdapter -) -{ - if (pI2SAdapter->DevNum > I2S_MAX_ID) { - DBG_I2S_ERR("RtkI2SIrqDeInit: Invalid I2S Index(&d)\r\n", pI2SAdapter->DevNum); - return HAL_ERR_PARA; - } - - InterruptDis(&pI2SAdapter->IrqHandle); - InterruptUnRegister(&pI2SAdapter->IrqHandle); - - return HAL_OK; -} - -static HAL_Status -RtkI2SPinMuxInit( - IN PHAL_I2S_ADAPTER pI2SAdapter -) -{ - uint32_t I2Stemp; - - if (pI2SAdapter->DevNum > I2S_MAX_ID) { - DBG_I2S_ERR("RtkI2SPinMuxInit: Invalid I2S Index(&d)\r\n", pI2SAdapter->DevNum); - return HAL_ERR_PARA; - } - - // enable system pll - I2Stemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1) | (1<<9) | (1<<10); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1, I2Stemp); - - switch (pI2SAdapter->DevNum){ - case I2S0_SEL: - ACTCK_I2S_CCTRL(ON); - SLPCK_I2S_CCTRL(ON); - LXBUS_FCTRL(ON); // enable lx bus for i2s - - /*I2S0 Pin Mux Setting*/ - PinCtrl(I2S0, pI2SAdapter->PinMux, ON); - if (pI2SAdapter->PinMux == I2S_S0) { - DBG_I2S_WARN(ANSI_COLOR_MAGENTA"I2S0 Pin may conflict with JTAG\r\n"ANSI_COLOR_RESET); - } - I2S0_MCK_CTRL(ON); - I2S0_PIN_CTRL(ON); - I2S0_FCTRL(ON); - - break; - case I2S1_SEL: - ACTCK_I2S_CCTRL(ON); - SLPCK_I2S_CCTRL(ON); - LXBUS_FCTRL(ON); // enable lx bus for i2s - - /*I2S1 Pin Mux Setting*/ - PinCtrl(I2S1, pI2SAdapter->PinMux, ON); - if (pI2SAdapter->PinMux == I2S_S2) { - DBG_I2S_WARN(ANSI_COLOR_MAGENTA"I2S1 Pin may conflict with JTAG\r\n"ANSI_COLOR_RESET); - } - I2S1_MCK_CTRL(ON); - I2S1_PIN_CTRL(ON); - I2S0_FCTRL(ON); //i2s 1 is control by bit 24 BIT_PERI_I2S0_EN - I2S1_FCTRL(ON); - break; - default: - return HAL_ERR_PARA; - } - - return HAL_OK; -} - - -static HAL_Status -RtkI2SPinMuxDeInit( - IN PHAL_I2S_ADAPTER pI2SAdapter -) -{ - if (pI2SAdapter->DevNum > I2S_MAX_ID) { - DBG_I2S_ERR("RtkI2SPinMuxDeInit: Invalid I2S Index(&d)\r\n", pI2SAdapter->DevNum); - return HAL_ERR_PARA; - } - - switch (pI2SAdapter->DevNum){ - case I2S0_SEL: - /*I2S0 Pin Mux Setting*/ - //ACTCK_I2C0_CCTRL(OFF); - PinCtrl(I2S0, pI2SAdapter->PinMux, OFF); - I2S0_MCK_CTRL(OFF); - I2S0_PIN_CTRL(OFF); - //I2S0_FCTRL(OFF); - - break; - case I2S1_SEL: - /*I2S1 Pin Mux Setting*/ - //ACTCK_I2C1_CCTRL(OFF); - PinCtrl(I2S1, pI2SAdapter->PinMux, OFF); - I2S1_MCK_CTRL(OFF); - I2S1_PIN_CTRL(OFF); - //I2S1_FCTRL(OFF); - break; - default: - return HAL_ERR_PARA; - } - - return HAL_OK; -} - - -HAL_Status -RtkI2SInit( - IN void *Data -) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) Data; - PHAL_I2S_OP pHalI2SOP = &HalI2SOpSAL; - PHAL_I2S_INIT_DAT pI2SCfg; - - if (pI2SAdapter == 0) { - DBG_I2S_ERR("RtkI2SInit: Null Pointer\r\n"); - return HAL_ERR_PARA; - } - - if (pI2SAdapter->DevNum > I2S_MAX_ID) { - DBG_I2S_ERR("RtkI2SInit: Invalid I2S Index(&d)\r\n", pI2SAdapter->DevNum); - return HAL_ERR_PARA; - } - - pI2SCfg = pI2SAdapter->pInitDat; - - /*I2S Initialize HAL Operations*/ - HalI2SOpInit(pHalI2SOP); - - /*I2S Interrupt Initialization*/ - RtkI2SIrqInit(pI2SAdapter); - - /*I2S Pin Mux Initialization*/ - RtkI2SPinMuxInit(pI2SAdapter); - - /*I2S Load User Setting*/ - pI2SCfg->I2SIdx = pI2SAdapter->DevNum; - - /*I2S HAL Initialization*/ - pHalI2SOP->HalI2SInit(pI2SCfg); - - /*I2S Device Status Update*/ - pI2SAdapter->DevSts = I2S_STS_INITIALIZED; - - /*I2S Enable Module*/ - pI2SCfg->I2SEn = I2S_ENABLE; - pHalI2SOP->HalI2SEnable(pI2SCfg); - - /*I2S Device Status Update*/ - pI2SAdapter->DevSts = I2S_STS_IDLE; - - return HAL_OK; -} - -HAL_Status -RtkI2SDeInit( - IN void *Data -) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) Data; - PHAL_I2S_OP pHalI2SOP = &HalI2SOpSAL; - PHAL_I2S_INIT_DAT pI2SCfg; - uint32_t I2Stemp; - - if (pI2SAdapter == 0) { - DBG_I2S_ERR("RtkI2SDeInit: Null Pointer\r\n"); - return HAL_ERR_PARA; - } - - pI2SCfg = pI2SAdapter->pInitDat; - - /*I2S Disable Module*/ - pI2SCfg->I2SEn = I2S_DISABLE; - pHalI2SOP->HalI2SEnable(pI2SCfg); - HalI2SClearAllOwnBit((void*)pI2SCfg); - - /*I2C HAL DeInitialization*/ - //pHalI2SOP->HalI2SDeInit(pI2SCfg); - - /*I2S Interrupt DeInitialization*/ - RtkI2SIrqDeInit(pI2SAdapter); - - /*I2S Pin Mux DeInitialization*/ - RtkI2SPinMuxDeInit(pI2SAdapter); - - /*I2S HAL DeInitialization*/ - pHalI2SOP->HalI2SDeInit(pI2SCfg); - - /*I2S CLK Source Close*/ - I2Stemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1) & (~((1<<9) | (1<<10))); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1, I2Stemp); - - /*I2S Device Status Update*/ - pI2SAdapter->DevSts = I2S_STS_UNINITIAL; - - return HAL_OK; -} - -HAL_Status -RtkI2SEnable( - IN void *Data -) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) Data; - PHAL_I2S_OP pHalI2SOP = &HalI2SOpSAL; - PHAL_I2S_INIT_DAT pI2SCfg; - uint32_t I2Stemp; - - // Enable IP Clock - I2Stemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1) | (1<<9) | (1<<10); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1, I2Stemp); - ACTCK_I2S_CCTRL(ON); - SLPCK_I2S_CCTRL(ON); - - pI2SCfg = pI2SAdapter->pInitDat; - pI2SCfg->I2SEn = I2S_ENABLE; - pHalI2SOP->HalI2SEnable(pI2SCfg); - - return HAL_OK; -} - -HAL_Status -RtkI2SDisable( - IN void *Data -) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) Data; - PHAL_I2S_OP pHalI2SOP = &HalI2SOpSAL; - PHAL_I2S_INIT_DAT pI2SCfg; - uint32_t I2Stemp; - - pI2SCfg = pI2SAdapter->pInitDat; - pI2SCfg->I2SEn = I2S_DISABLE; - pHalI2SOP->HalI2SEnable(pI2SCfg); - - // Gate IP Clock - ACTCK_I2S_CCTRL(OFF); - SLPCK_I2S_CCTRL(OFF); - - // Close I2S bus clock(WS,SCLK,MCLK). If needs that clock, mark this. - I2Stemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1) & (~((1<<9) | (1<<10))); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1, I2Stemp); - - return HAL_OK; -} - -RTK_STATUS -RtkI2SIoCtrl( - IN void *Data -) -{ - return _EXIT_SUCCESS; -} - -RTK_STATUS -RtkI2SPowerCtrl( - IN void *Data -) -{ - return _EXIT_SUCCESS; -} - -HAL_Status -RtkI2SLoadDefault( - IN void *Adapter, - IN void *Setting -) -{ - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) Adapter; - PHAL_I2S_INIT_DAT pI2SCfg = pI2SAdapter->pInitDat; - PHAL_I2S_DEF_SETTING pLoadSetting = (PHAL_I2S_DEF_SETTING)Setting; - - if (pI2SAdapter == 0) { - DBG_I2S_ERR("RtkI2SLoadDefault: Null Pointer\r\n"); - return HAL_ERR_PARA; - } - - if (pI2SAdapter->pInitDat == NULL) { - DBG_I2S_ERR("RtkI2SLoadDefault: pInitDat is NULL!\r\n", pI2SAdapter->DevNum); - return HAL_ERR_PARA; - } - - pI2SAdapter->DevSts = pLoadSetting->DevSts; - pI2SAdapter->ErrType = 0; - pI2SAdapter->TimeOut = 0; - - pI2SCfg->I2SIdx = pI2SAdapter->DevNum; - pI2SCfg->I2SEn = I2S_DISABLE; - pI2SCfg->I2SMaster = pLoadSetting->I2SMaster; - pI2SCfg->I2SWordLen = pLoadSetting->I2SWordLen; - pI2SCfg->I2SChNum = pLoadSetting->I2SChNum; - pI2SCfg->I2SPageNum = pLoadSetting->I2SPageNum; - pI2SCfg->I2SPageSize = pLoadSetting->I2SPageSize; - pI2SCfg->I2SRate = pLoadSetting->I2SRate; - pI2SCfg->I2STRxAct = pLoadSetting->I2STRxAct; - pI2SCfg->I2STxIntrMSK = pLoadSetting->I2STxIntrMSK; - pI2SCfg->I2SRxIntrMSK = pLoadSetting->I2SRxIntrMSK; - - return HAL_OK; -} - -void HalI2SOpInit( - IN void *Data -) -{ - PHAL_I2S_OP pHalI2SOp = (PHAL_I2S_OP) Data; - - pHalI2SOp->HalI2SDeInit = HalI2SDeInitRtl8195a; - pHalI2SOp->HalI2STx = HalI2STxRtl8195a; - pHalI2SOp->HalI2SRx = HalI2SRxRtl8195a; - pHalI2SOp->HalI2SEnable = HalI2SEnableRtl8195a; - pHalI2SOp->HalI2SIntrCtrl = HalI2SIntrCtrlRtl8195a; - pHalI2SOp->HalI2SReadReg = HalI2SReadRegRtl8195a; - pHalI2SOp->HalI2SClrIntr = HalI2SClrIntrRtl8195a; - pHalI2SOp->HalI2SClrAllIntr = HalI2SClrAllIntrRtl8195a; - pHalI2SOp->HalI2SDMACtrl = HalI2SDMACtrlRtl8195a; - -#ifndef CONFIG_CHIP_E_CUT - pHalI2SOp->HalI2SInit = HalI2SInitRtl8195a_Patch; - pHalI2SOp->HalI2SSetRate = HalI2SSetRateRtl8195a; - pHalI2SOp->HalI2SSetWordLen = HalI2SSetWordLenRtl8195a; - pHalI2SOp->HalI2SSetChNum = HalI2SSetChNumRtl8195a; - pHalI2SOp->HalI2SSetPageNum = HalI2SSetPageNumRtl8195a; - pHalI2SOp->HalI2SSetPageSize = HalI2SSetPageSizeRtl8195a; -#else - pHalI2SOp->HalI2SInit = HalI2SInitRtl8195a_V04; - pHalI2SOp->HalI2SSetRate = HalI2SSetRateRtl8195a_V04; - pHalI2SOp->HalI2SSetWordLen = HalI2SSetWordLenRtl8195a_V04; - pHalI2SOp->HalI2SSetChNum = HalI2SSetChNumRtl8195a_V04; - pHalI2SOp->HalI2SSetPageNum = HalI2SSetPageNumRtl8195a_V04; - pHalI2SOp->HalI2SSetPageSize = HalI2SSetPageSizeRtl8195a_V04; -#endif // #ifndef CONFIG_CHIP_E_CUT -} - -HAL_Status -HalI2SInit( - IN void *Data -) -{ - HAL_Status ret; - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) Data; - uint32_t Function; - uint8_t funret; - -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE I2sPwrState; -#endif - - if(pI2SAdapter->DevNum == 0){ - Function = I2S0; - } - else { - Function = I2S1; - } - - funret = FunctionChk(Function, (uint32_t)pI2SAdapter->PinMux); - - if (funret == _FALSE){ - return HAL_ERR_HW; - } - - ret = RtkI2SInit(Data); -#ifdef CONFIG_SOC_PS_MODULE - if(ret == HAL_OK) { - // To register a new peripheral device power state - I2sPwrState.FuncIdx = I2S0 + pI2SAdapter->DevNum; - I2sPwrState.PwrState = ACT; - RegPowerState(I2sPwrState); - } -#endif - - return ret; - -} - -void -HalI2SDeInit( - IN void *Data -) -{ -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE I2sPwrState; - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) Data; - uint8_t HwState; - - I2sPwrState.FuncIdx = I2S0 + pI2SAdapter->DevNum; - QueryRegPwrState(I2sPwrState.FuncIdx, &(I2sPwrState.PwrState), &HwState); - - // if the power state isn't ACT, then switch the power state back to ACT first - if ((I2sPwrState.PwrState != ACT) && (I2sPwrState.PwrState != INACT)) { - HalI2SEnable(Data); - QueryRegPwrState(I2sPwrState.FuncIdx, &(I2sPwrState.PwrState), &HwState); - } - - if (I2sPwrState.PwrState == ACT) { - I2sPwrState.PwrState = INACT; - RegPowerState(I2sPwrState); - } -#endif - - RtkI2SDeInit(Data); - -} - - -HAL_Status -HalI2SDisable( - IN void *Data -) -{ - HAL_Status ret; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE I2sPwrState; - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) Data; -#endif - - ret = RtkI2SDisable(Data); -#ifdef CONFIG_SOC_PS_MODULE - if (ret == HAL_OK) { - I2sPwrState.FuncIdx = I2S0 + pI2SAdapter->DevNum; - I2sPwrState.PwrState = SLPCG; - RegPowerState(I2sPwrState); - } -#endif - return ret; -} - -HAL_Status -HalI2SEnable( - IN void *Data -) -{ - HAL_Status ret; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE I2sPwrState; - PHAL_I2S_ADAPTER pI2SAdapter = (PHAL_I2S_ADAPTER) Data; -#endif - - ret = RtkI2SEnable(Data); -#ifdef CONFIG_SOC_PS_MODULE - if (ret == HAL_OK) { - I2sPwrState.FuncIdx = I2S0 + pI2SAdapter->DevNum; - I2sPwrState.PwrState = ACT; - RegPowerState(I2sPwrState); - } -#endif - return ret; -} - -#endif // CONFIG_I2S_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_i2s.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_i2s.h deleted file mode 100644 index 2575aa1..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_i2s.h +++ /dev/null @@ -1,347 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_I2S_H_ -#define _HAL_I2S_H_ - -#include "rtl8195a_i2s.h" - -/* User Define Flags */ - -#define I2S_MAX_ID 1 // valid I2S index 0 ~ I2S_MAX_ID - -/**********************************************************************/ -/* I2S HAL initial data structure */ -typedef struct _HAL_I2S_INIT_DAT_ { - uint8_t I2SIdx; /*I2S index used*/ - uint8_t I2SEn; /*I2S module enable tx/rx/tx+rx*/ - uint8_t I2SMaster; /*I2S Master or Slave mode*/ - uint8_t I2SWordLen; /*I2S Word length 16 or 24bits*/ - - uint8_t I2SChNum; /*I2S Channel number mono or stereo*/ - uint8_t I2SPageNum; /*I2S Page Number 2~4*/ - uint16_t I2SPageSize; /*I2S page Size 1~4096 word*/ - - uint8_t *I2STxData; /*I2S Tx data pointer*/ - - uint8_t *I2SRxData; /*I2S Rx data pointer*/ - - uint32_t I2STxIntrMSK; /*I2S Tx Interrupt Mask*/ - uint32_t I2STxIntrClr; /*I2S Tx Interrupt register to clear */ - - uint32_t I2SRxIntrMSK; /*I2S Rx Interrupt Mask*/ - uint32_t I2SRxIntrClr; /*I2S Rx Interrupt register to clear*/ - - uint16_t I2STxIdx; /*I2S TX page index */ - uint16_t I2SRxIdx; /*I2S RX page index */ - - uint16_t I2SHWTxIdx; /*I2S HW TX page index */ - uint16_t I2SHWRxIdx; /*I2S HW RX page index */ - - - uint16_t I2SRate; /*I2S sample rate*/ - uint8_t I2STRxAct; /*I2S tx rx act*/ -}HAL_I2S_INIT_DAT, *PHAL_I2S_INIT_DAT; - -/**********************************************************************/ -/* I2S Data Structures */ -/* I2S Module Selection */ -typedef enum _I2S_MODULE_SEL_ { - I2S0_SEL = 0x0, - I2S1_SEL = 0x1, -}I2S_MODULE_SEL,*PI2S_MODULE_SEL; -/* -typedef struct _HAL_I2S_ADAPTER_ { - uint32_t Enable:1; - I2S_CTL_REG I2sCtl; - I2S_SETTING_REG I2sSetting; - uint32_t abc; - uint8_t I2sIndex; -}HAL_I2S_ADAPTER, *PHAL_I2S_ADAPTER; -*/ -/* I2S HAL Operations */ -typedef struct _HAL_I2S_OP_ { - RTK_STATUS (*HalI2SInit) (void *Data); - RTK_STATUS (*HalI2SDeInit) (void *Data); - RTK_STATUS (*HalI2STx) (void *Data, uint8_t *pBuff); - RTK_STATUS (*HalI2SRx) (void *Data, uint8_t *pBuff); - RTK_STATUS (*HalI2SEnable) (void *Data); - RTK_STATUS (*HalI2SIntrCtrl) (void *Data); - uint32_t (*HalI2SReadReg) (void *Data, uint8_t I2SReg); - RTK_STATUS (*HalI2SSetRate) (void *Data); - RTK_STATUS (*HalI2SSetWordLen) (void *Data); - RTK_STATUS (*HalI2SSetChNum) (void *Data); - RTK_STATUS (*HalI2SSetPageNum) (void *Data); - RTK_STATUS (*HalI2SSetPageSize) (void *Data); - - RTK_STATUS (*HalI2SClrIntr) (void *Data); - RTK_STATUS (*HalI2SClrAllIntr) (void *Data); - RTK_STATUS (*HalI2SDMACtrl) (void *Data); -/* - void (*HalI2sOnOff)(void *Data); - BOOL (*HalI2sInit)(void *Data); - BOOL (*HalI2sSetting)(void *Data); - BOOL (*HalI2sEn)(void *Data); - BOOL (*HalI2sIsrEnAndDis) (void *Data); - BOOL (*HalI2sDumpReg)(void *Data); - BOOL (*HalI2s)(void *Data); -*/ -}HAL_I2S_OP, *PHAL_I2S_OP; - - -/**********************************************************************/ - -/* I2S Pinmux Selection */ -#if 0 -typedef enum _I2S0_PINMUX_ { - I2S0_TO_S0 = 0x0, - I2S0_TO_S1 = 0x1, - I2S0_TO_S2 = 0x2, -}I2S0_PINMUX, *PI2S0_PINMUX; - -typedef enum _I2S1_PINMUX_ { - I2S1_TO_S0 = 0x0, - I2S1_TO_S1 = 0x1, -}I2S1_PINMUX, *PI2S1_PINMUX; -#endif - -typedef enum _I2S_PINMUX_ { - I2S_S0 = 0, - I2S_S1 = 1, - I2S_S2 = 2, - I2S_S3 = 3 -}I2S_PINMUX, *PI2S_PINMUX; - - -/* I2S Module Status */ -typedef enum _I2S_MODULE_STATUS_ { - I2S_DISABLE = 0x0, - I2S_ENABLE = 0x1, -}I2S_MODULE_STATUS, *PI2S_MODULE_STATUS; - - -/* I2S Device Status */ -typedef enum _I2S_Device_STATUS_ { - I2S_STS_UNINITIAL = 0x00, - I2S_STS_INITIALIZED = 0x01, - I2S_STS_IDLE = 0x02, - - I2S_STS_TX_READY = 0x03, - I2S_STS_TX_ING = 0x04, - - I2S_STS_RX_READY = 0x05, - I2S_STS_RX_ING = 0x06, - - I2S_STS_TRX_READY = 0x07, - I2S_STS_TRX_ING = 0x08, - - I2S_STS_ERROR = 0x09, -}I2S_Device_STATUS, *PI2S_Device_STATUS; - - -/* I2S Feature Status */ -typedef enum _I2S_FEATURE_STATUS_{ - I2S_FEATURE_DISABLED = 0, - I2S_FEATURE_ENABLED = 1, -}I2S_FEATURE_STATUS,*PI2S_FEATURE_STATUS; - -/* I2S Device Mode */ -typedef enum _I2S_DEV_MODE_ { - I2S_MASTER_MODE = 0x0, - I2S_SLAVE_MODE = 0x1 -}I2S_DEV_MODE, *PI2S_DEV_MODE; - -/* I2S Word Length */ -typedef enum _I2S_WORD_LEN_ { - I2S_WL_16 = 0x0, - I2S_WL_24 = 0x1, -}I2S_WORD_LEN, *PI2S_WORD_LEN; - -/* I2S Bus Transmit/Receive */ -typedef enum _I2S_DIRECTION_ { - I2S_ONLY_RX = 0x0, - I2S_ONLY_TX = 0x1, - I2S_TXRX = 0x2 -}I2S_DIRECTION, *PI2S_DIRECTION; - -/* I2S Channel number */ -typedef enum _I2S_CH_NUM_ { - I2S_CH_STEREO = 0x0, - I2S_CH_RSVD = 0x1, - I2S_CH_MONO = 0x2 -}I2S_CH_NUM, *PI2S_CH_NUM; - -/* I2S Page number */ -typedef enum _I2S_PAGE_NUM_ { - I2S_1PAGE = 0x0, - I2S_2PAGE = 0x1, - I2S_3PAGE = 0x2, - I2S_4PAGE = 0x3 -}I2S_PAGE_NUM, *PI2S_PAGE_NUM; - -/* I2S Sample rate*/ -typedef enum _I2S_SAMPLE_RATE_ { - I2S_SR_8KHZ = 0x00, // /12 - I2S_SR_16KHZ = 0x01, // /6 - I2S_SR_24KHZ = 0x02, // /4 - I2S_SR_32KHZ = 0x03, // /3 - I2S_SR_48KHZ = 0x05, // /2 - I2S_SR_96KHZ = 0x06, // x1, base 96kHz - I2S_SR_7p35KHZ = 0x10, - I2S_SR_11p02KHZ = 0x11, - I2S_SR_22p05KHZ = 0x12, - I2S_SR_29p4KHZ = 0x13, - I2S_SR_44p1KHZ = 0x15, - I2S_SR_88p2KHZ = 0x16 // x1, base 88200Hz -}I2S_SAMPLE_RATE, *PI2S_SAMPLE_RATE; - -/* I2S TX interrupt mask/status */ -typedef enum _I2S_TX_IMR_ { - I2S_TX_INT_PAGE0_OK = (1<<0), - I2S_TX_INT_PAGE1_OK = (1<<1), - I2S_TX_INT_PAGE2_OK = (1<<2), - I2S_TX_INT_PAGE3_OK = (1<<3), - I2S_TX_INT_FULL = (1<<4), - I2S_TX_INT_EMPTY = (1<<5) -} I2S_TX_IMR, *PI2S_TX_IMR; - -/* I2S RX interrupt mask/status */ -typedef enum _I2S_RX_IMR_ { - I2S_RX_INT_PAGE0_OK = (1<<0), - I2S_RX_INT_PAGE1_OK = (1<<1), - I2S_RX_INT_PAGE2_OK = (1<<2), - I2S_RX_INT_PAGE3_OK = (1<<3), - I2S_RX_INT_EMPTY = (1<<4), - I2S_RX_INT_FULL = (1<<5) -} I2S_RX_IMR, *PI2S_RX_IMR; - -/* I2S User Callbacks */ -typedef struct _SAL_I2S_USER_CB_{ - void (*TXCB) (void *Data); - void (*TXCCB) (void *Data); - void (*RXCB) (void *Data); - void (*RXCCB) (void *Data); - void (*RDREQCB) (void *Data); - void (*ERRCB) (void *Data); - void (*GENCALLCB) (void *Data); -}SAL_I2S_USER_CB,*PSAL_I2S_USER_CB; - -typedef struct _I2S_USER_CB_{ - void (*TxCCB)(uint32_t id, char *pbuf); - uint32_t TxCBId; - void (*RxCCB)(uint32_t id, char *pbuf); - uint32_t RxCBId; -}I2S_USER_CB,*PI2S_USER_CB; - -/* Software API Level I2S Handler */ -typedef struct _HAL_I2S_ADAPTER_{ - uint8_t DevNum; //I2S device number - uint8_t PinMux; //I2S pin mux seletion - uint8_t RSVD0; //Reserved - volatile uint8_t DevSts; //I2S device status - - uint32_t RSVD2; //Reserved - uint32_t I2SExd; //I2S extended options: - //bit 0: I2C RESTART supported, - // 0 for NOT supported, - // 1 for supported - //bit 1: I2C General Call supported - // 0 for NOT supported, - // 1 for supported - //bit 2: I2C START Byte supported - // 0 for NOT supported, - // 1 for supported - //bit 3: I2C Slave-No-Ack - // supported - // 0 for NOT supported, - // 1 for supported - //bit 4: I2C bus loading, - // 0 for 100pf, - // 1 for 400pf - //bit 5: I2C slave ack to General - // Call - //bit 6: I2C User register address - //bit 7: I2C 2-Byte User register - // address - //bit 31~bit 8: Reserved - uint32_t ErrType; // - uint32_t TimeOut; //I2S IO Timeout count - - PHAL_I2S_INIT_DAT pInitDat; //Pointer to I2S initial data struct - I2S_USER_CB UserCB; //Pointer to I2S User Callback - IRQ_HANDLE IrqHandle; // Irq Handler - - uint32_t* TxPageList[4]; // The Tx DAM buffer: pointer of each page - uint32_t* RxPageList[4]; // The Tx DAM buffer: pointer of each page -}HAL_I2S_ADAPTER, *PHAL_I2S_ADAPTER; - -typedef struct _HAL_I2S_DEF_SETTING_{ - uint8_t I2SMaster; // Master or Slave mode - uint8_t DevSts; //I2S device status - uint8_t I2SChNum; //I2S Channel number mono or stereo - uint8_t I2SPageNum; //I2S Page number 2~4 - uint8_t I2STRxAct; //I2S tx rx act, tx only or rx only or tx+rx - uint8_t I2SWordLen; //I2S Word length 16bit or 24bit - uint16_t I2SPageSize; //I2S Page size 1~4096 word - - uint16_t I2SRate; //I2S sample rate 8k ~ 96khz - - uint32_t I2STxIntrMSK; /*I2S Tx Interrupt Mask*/ - uint32_t I2SRxIntrMSK; /*I2S Rx Interrupt Mask*/ -}HAL_I2S_DEF_SETTING, *PHAL_I2S_DEF_SETTING; - - - -/**********************************************************************/ -HAL_Status -RtkI2SLoadDefault(IN void *Adapter, IN void *Setting); - -HAL_Status -RtkI2SInit(IN void *Data); - -HAL_Status -RtkI2SDeInit(IN void *Data); - -HAL_Status -RtkI2SEnable(IN void *Data); - -HAL_Status -RtkI2SDisable(IN void *Data); - -extern HAL_Status -HalI2SInit( IN void *Data); - -extern void -HalI2SDeInit( IN void *Data); - -extern HAL_Status -HalI2SDisable( IN void *Data); - -extern HAL_Status -HalI2SEnable( IN void *Data); - - - - -/**********************************************************************/ - - -void I2S0ISRHandle(void *Data); -void I2S1ISRHandle(void *Data); - - -/**********************************************************************/ - -void HalI2SOpInit( - IN void *Data -); - - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_irqn.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_irqn.h deleted file mode 100644 index ae5efcd..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_irqn.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_IRQN_H_ -#define _HAL_IRQN_H_ - -#define PERIPHERAL_IRQ_BASE_NUM 64 - -typedef enum _IRQn_Type_ { -#if 0 -/****** Cortex-M3 Processor Exceptions Numbers ********/ - NON_MASKABLE_INT_IRQ = -14, - HARD_FAULT_IRQ = -13, - MEM_MANAGE_FAULT_IRQ = -12, - BUS_FAULT_IRQ = -11, - USAGE_FAULT_IRQ = -10, - SVCALL_IRQ = -5, - DEBUG_MONITOR_IRQ = -4, - PENDSVC_IRQ = -2, - SYSTICK_IRQ = -1, -#else -/****** Cortex-M3 Processor Exceptions Numbers ********/ - NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ - HardFault_IRQn = -13, /*!< 3 Hard Fault, all classes of Fault */ - MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt */ - BusFault_IRQn = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt */ - UsageFault_IRQn = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt */ - SVCall_IRQn = -5, /*!< 11 Cortex-M3 SV Call Interrupt */ - DebugMonitor_IRQn = -4, /*!< 12 Cortex-M3 Debug Monitor Interrupt */ - PendSV_IRQn = -2, /*!< 14 Cortex-M3 Pend SV Interrupt */ - SysTick_IRQn = -1, /*!< 15 Cortex-M3 System Tick Interrupt */ -#endif -/****** RTL8195A Specific Interrupt Numbers ************/ - SYSTEM_ON_IRQ = 0, - WDG_IRQ = 1, - TIMER0_IRQ = 2, - TIMER1_IRQ = 3, - I2C3_IRQ = 4, - TIMER2_7_IRQ = 5, - SPI0_IRQ = 6, - GPIO_IRQ = 7, - UART0_IRQ = 8, - SPI_FLASH_IRQ = 9, - USB_OTG_IRQ = 10, - SDIO_HOST_IRQ = 11, - SDIO_DEVICE_IRQ = 12, - I2S0_PCM0_IRQ = 13, - I2S1_PCM1_IRQ = 14, - WL_DMA_IRQ = 15, - WL_PROTOCOL_IRQ = 16, - CRYPTO_IRQ = 17, - GMAC_IRQ = 18, - PERIPHERAL_IRQ = 19, - GDMA0_CHANNEL0_IRQ = 20, - GDMA0_CHANNEL1_IRQ = 21, - GDMA0_CHANNEL2_IRQ = 22, - GDMA0_CHANNEL3_IRQ = 23, - GDMA0_CHANNEL4_IRQ = 24, - GDMA0_CHANNEL5_IRQ = 25, - GDMA1_CHANNEL0_IRQ = 26, - GDMA1_CHANNEL1_IRQ = 27, - GDMA1_CHANNEL2_IRQ = 28, - GDMA1_CHANNEL3_IRQ = 29, - GDMA1_CHANNEL4_IRQ = 30, - GDMA1_CHANNEL5_IRQ = 31, - -/****** RTL8195A Peripheral Interrupt Numbers ************/ - I2C0_IRQ = 64,// 0 + 64, - I2C1_IRQ = 65,// 1 + 64, - I2C2_IRQ = 66,// 2 + 64, - SPI1_IRQ = 72,// 8 + 64, - SPI2_IRQ = 73,// 9 + 64, - UART1_IRQ = 80,// 16 + 64, - UART2_IRQ = 81,// 17 + 64, - UART_LOG_IRQ = 88,// 24 + 64, - ADC_IRQ = 89,// 25 + 64, - DAC0_IRQ = 91,// 27 + 64, - DAC1_IRQ = 92,// 28 + 64, - //RXI300_IRQ = 93// 29 + 64 - LP_EXTENSION_IRQ = 93,// 29+64 - - PTA_TRX_IRQ = 95,// 31+64 - RXI300_IRQ = 96,// 0+32 + 64 - NFC_IRQ = 97 // 1+32+64 -} IRQn_Type, *PIRQn_Type; - - -typedef void (*HAL_VECTOR_FUN) (void); - -typedef enum _VECTOR_TABLE_TYPE_{ - DEDECATED_VECTRO_TABLE, - PERIPHERAL_VECTOR_TABLE -}VECTOR_TABLE_TYPE, *PVECTOR_TABLE_TYPE; - - -typedef void (*IRQ_FUN)(void *Data); - -typedef struct _IRQ_HANDLE_ { - IRQ_FUN IrqFun; - IRQn_Type IrqNum; - uint32_t Data; - uint32_t Priority; -}IRQ_HANDLE, *PIRQ_HANDLE; - - -#endif //_HAL_IRQN_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_log_uart.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_log_uart.c deleted file mode 100644 index d9889c8..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_log_uart.c +++ /dev/null @@ -1,442 +0,0 @@ -/* - * hal_log_uart.c - * - * Created on: 08/10/2016 - * Author: pvvx - */ -#include "rtl8195a.h" - -#ifdef CONFIG_LOG_UART_EN - -#include "hal_log_uart.h" - -//------------------------------------------------------------------------- -// Function declarations -/* -void HalLogUartIrqHandle(void * Data); -void HalLogUartSetBaudRate(HAL_LOG_UART_ADAPTER *pUartAdapter); -void HalLogUartSetLineCtrl(HAL_LOG_UART_ADAPTER *pUartAdapter); -void HalLogUartSetIntEn(HAL_LOG_UART_ADAPTER *pUartAdapter); -uint32_t HalLogUartInitSetting(HAL_LOG_UART_ADAPTER *pUartAdapter); -uint32_t HalLogUartRecv(HAL_LOG_UART_ADAPTER *pUartAdapter, - uint8_t *pRxData, uint32_t Length, uint32_t TimeoutMS); -uint32_t HalLogUartSend(HAL_LOG_UART_ADAPTER *pUartAdapter, - uint8_t *pTxData, uint32_t Length, uint32_t TimeoutMS); -HAL_Status HalLogUartIntSend(HAL_LOG_UART_ADAPTER *pUartAdapter, - uint8_t *pTxData, uint32_t Length); -HAL_Status HalLogUartIntRecv(HAL_LOG_UART_ADAPTER *pUartAdapter, - uint8_t *pRxData, uint32_t Length); -void HalLogUartAbortIntSend(HAL_LOG_UART_ADAPTER *pUartAdapter); -void HalLogUartAbortIntRecv(HAL_LOG_UART_ADAPTER *pUartAdapter); -HAL_Status HalLogUartRstFIFO(HAL_LOG_UART_ADAPTER *pUartAdapter, uint8_t RstCtrl); -void HalLogUartEnable(HAL_LOG_UART_ADAPTER *pUartAdapter); -void HalLogUartDisable(HAL_LOG_UART_ADAPTER *pUartAdapter); - */ -extern void UartLogIrqHandleRam(void * Data); -// extern DiagPrintf(); -// extern HalGetCpuClk(void); -// extern VectorIrqUnRegisterRtl8195A(); -// extern VectorIrqRegisterRtl8195A(); -// extern VectorIrqEnRtl8195A(); -// extern RuartIsTimeout(); -// extern HalDelayUs(); -// extern HalPinCtrlRtl8195A(); -// extern HalLogUartInit(); -//------------------------------------------------------------------------- -// Data declarations -// extern ConfigDebugWarn; -// extern ConfigDebugErr; -// extern HalTimerOp; -// extern ConfigDebugInfo; -// extern UartLogIrqHandleRam; -//------------------------------------------------------------------------- -/* - * 16 bytes FIFO ... 16*11/38400 = 0.004583 sec - * (0.005/5)*166666666 = 166666.666 - */ -void HalLogUartWaitTxFifoEmpty(void) { - int x = 16384; - while((!(HAL_READ8(LOG_UART_REG_BASE, 0x14) & BIT6)) && x--); -} - -//----- HalLogUartIrqRxRdyHandle -void HalLogUartIrqRxRdyHandle(HAL_LOG_UART_ADAPTER *pUartAdapter) { - volatile uint8_t *pRxBuf = pUartAdapter->pRxBuf; - if (pRxBuf != NULL) { - while (pUartAdapter->RxCount) { - if (!(HAL_UART_READ32(UART_INTERRUPT_EN_REG_OFF) & 1)) // v40003014 - { - if (pUartAdapter->RxCount <= 7) { - pUartAdapter->FIFOControl = pUartAdapter->FIFOControl - & (~(FCR_RX_TRIG_MASK)); // & 0xFFFFFF3F; - HAL_UART_WRITE32(UART_FIFO_CTL_REG_OFF, - pUartAdapter->FIFOControl); // 40003008 - } - break; - } - *pRxBuf++ = HAL_UART_READ32(UART_REV_BUF_OFF); // 40003000; - --pUartAdapter->RxCount; - } - if (!pUartAdapter->RxCount) { - pUartAdapter->IntEnReg = pUartAdapter->IntEnReg - & (~(IER_ERBFI | IER_ELSI)); // & 0xFFFFFFFA; - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, pUartAdapter->IntEnReg); // 40003004 - if (pUartAdapter->pRxBuf != pRxBuf) { - if (pUartAdapter->RxCompCallback) - pUartAdapter->RxCompCallback(pUartAdapter->RxCompCbPara); - } - if (pUartAdapter->FIFOControl & FCR_RX_TRIG_MASK) // 0xC0 - { - pUartAdapter->FIFOControl = pUartAdapter->FIFOControl - & (~(FCR_RX_TRIG_MASK)); // & 0xFFFFFF3F; - HAL_UART_WRITE32(UART_FIFO_CTL_REG_OFF, - pUartAdapter->FIFOControl); // 40003008 - } - } - pUartAdapter->pRxBuf = pRxBuf; - } else - DBG_UART_WARN("HalLogUartIrqRxDataHandle: No RX Buffer\n"); -} - -//----- HalLogUartIrqHandle -void HalLogUartIrqHandle(void * Data) { - PHAL_LOG_UART_ADAPTER pUartAdapter = (PHAL_LOG_UART_ADAPTER) Data; - uint32_t iir = HAL_UART_READ32(UART_INTERRUPT_IDEN_REG_OFF) & 0x0F; // v40003008 & 0xF; - switch(iir) { - case IIR_MODEM_STATUS: // Clear to send or data set ready or ring indicator or data carrier detect. - break; - case IIR_NO_PENDING: - return; - case IIR_THR_EMPTY: // TX FIFO level lower than threshold or FIFO empty - { - volatile uint8_t * pTxBuf = pUartAdapter->pTxBuf; - if (pTxBuf != NULL) { - while (pUartAdapter->TxCount) { - if (!(HAL_UART_READ32(UART_LINE_STATUS_REG_OFF) & LSR_THRE)) { // v40003014 & 0x20 // Transmit Holding Register Empty bit(IER_PTIME=0) - HAL_UART_WRITE32(UART_REV_BUF_OFF, *pTxBuf++); - pUartAdapter->TxCount--; // *((_DWORD *)v1 + 4); - } - } - pUartAdapter->pTxBuf = pTxBuf; - if (!(pUartAdapter->TxCount)) { - pUartAdapter->IntEnReg = pUartAdapter->IntEnReg & (~IER_PTIME); // & 0xFFFFFF7F - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, - pUartAdapter->IntEnReg); // 40003004 - if (HAL_UART_READ32(UART_LINE_STATUS_REG_OFF) & LSR_THRE) { // 40003014 & 0x20 ) - pUartAdapter->IntEnReg = pUartAdapter->IntEnReg - & (~IER_ETBEI); // & 0xFFFFFFFD - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, - pUartAdapter->IntEnReg); // 40003004 - if (pUartAdapter->TxCompCallback != NULL) - pUartAdapter->TxCompCallback( - pUartAdapter->TxCompCbPara); - } - } - } else { - pUartAdapter->IntEnReg = pUartAdapter->IntEnReg & (~IER_ETBEI); // & 0xFFFFFFFD - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, pUartAdapter->IntEnReg); // 40003004 - } - } - break; - case IIR_RX_RDY: // RX data ready - case IIR_CHAR_TIMEOUT: // timeout: Rx dara ready but no read - HalLogUartIrqRxRdyHandle(pUartAdapter); // (HAL_LOG_UART_ADAPTER *) - break; - case IIR_RX_LINE_STATUS: // Overrun/parity/framing errors or break interrupt - pUartAdapter->LineStatus = HAL_UART_READ32(UART_LINE_STATUS_REG_OFF); // *((_BYTE *)v1 + 15) = v40003014; // LineStatusCallback - if (pUartAdapter->LineStatusCallback != NULL) - pUartAdapter->LineStatusCallback(pUartAdapter->LineStatusCbPara, pUartAdapter->LineStatus); // v3(*((_DWORD *)v1 + 17)); RxCompCallback - break; - case IIR_BUSY: - break; - default: - DBG_UART_WARN("HalLogUartIrqHandle: UnKnown Interrupt ID!\n"); - break; - } - if (pUartAdapter->api_irq_handler) - pUartAdapter->api_irq_handler(pUartAdapter->api_irq_id, iir); -} - -//----- HalLogUartSetBaudRate -void HalLogUartSetBaudRate(HAL_LOG_UART_ADAPTER *pUartAdapter) { - uint32_t clk4 = HalGetCpuClk() >> 2; // PLATFORM_CLOCK/2; // (unsigned int) HalGetCpuClk() >> 2; // div 4 - if (pUartAdapter->BaudRate == 0) - pUartAdapter->BaudRate = DEFAULT_BAUDRATE; - uint32_t br16 = pUartAdapter->BaudRate << 4; // * 16 - if ((br16 != 0) && (br16 <= clk4)) { - unsigned int dll = clk4 / br16; - if ((((10 * clk4) / br16) - (10 * dll)) > 4) - dll++; - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, - HAL_UART_READ32(UART_LINE_CTL_REG_OFF) | LCR_DLAB); - HAL_UART_WRITE32(UART_DLL_OFF, dll); - HAL_UART_WRITE32(UART_DLH_OFF, dll >> 8); - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, - HAL_UART_READ32(UART_LINE_CTL_REG_OFF) & (~LCR_DLAB)); - } else - DBG_UART_ERR("Cannot support Baud Sample Rate which bigger than Serial Clk!\n"); -} - -//----- HalLogUartSetLineCtrl -void HalLogUartSetLineCtrl(HAL_LOG_UART_ADAPTER *pUartAdapter) { - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, - pUartAdapter->Stop | pUartAdapter->Parity - | pUartAdapter->DataLength); -} - -//----- HalLogUartSetIntEn -void HalLogUartSetIntEn(HAL_LOG_UART_ADAPTER *pUartAdapter) { - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, pUartAdapter->IntEnReg); -} - -//----- HalLogUartInitSetting -uint32_t HalLogUartInitSetting(HAL_LOG_UART_ADAPTER *pUartAdapter) { - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & (~BIT_SOC_LOG_UART_EN)); // 40000210 &= 0xFFFFEFFF; - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT_SOC_LOG_UART_EN); // 40000210 |= 0x1000; - HAL_PERI_ON_WRITE32(REG_PESOC_CLK_CTRL, - HAL_PERI_ON_READ32(REG_PESOC_CLK_CTRL) | BIT_SOC_ACTCK_LOG_UART_EN); // 40000230 |= 0x1000; -// HalPinCtrlRtl8195A(LOG_UART, 0, 1); ???? - uint32_t clk4 = HalGetCpuClk() >> 2; // PLATFORM_CLOCK/2; // (unsigned int) HalGetCpuClk() >> 2; // div 4 - if (pUartAdapter->BaudRate == 0) - pUartAdapter->BaudRate = DEFAULT_BAUDRATE; - uint32_t br16 = pUartAdapter->BaudRate << 4; // * 16 - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, 0); // 40003004 = 0; - if (br16 <= clk4) { - uint32_t dll = clk4 / br16; - if ((((10 * clk4) / br16) - (10 * dll)) > 4) - dll++; - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, LCR_DLAB); // 4000300C = 128; - HAL_UART_WRITE32(UART_DLL_OFF, dll); // v40003000 = - HAL_UART_WRITE32(UART_DLH_OFF, dll >> 8); // v40003004 = - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, 0); - } - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, - pUartAdapter->Parity | pUartAdapter->Stop - | pUartAdapter->DataLength); // 4000300C = - HAL_UART_WRITE32(UART_FIFO_CTL_REG_OFF, pUartAdapter->FIFOControl); - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, pUartAdapter->IntEnReg); - - pUartAdapter->IrqHandle.IrqNum = UART_LOG_IRQ; - pUartAdapter->IrqHandle.Data = (uint32_t)pUartAdapter; - pUartAdapter->IrqHandle.IrqFun = HalLogUartIrqHandle; - pUartAdapter->IrqHandle.Priority = 14; - VectorIrqUnRegisterRtl8195A(&pUartAdapter->IrqHandle); - VectorIrqRegisterRtl8195A(&pUartAdapter->IrqHandle); - VectorIrqEnRtl8195A(&pUartAdapter->IrqHandle); - return 0; -} - -//----- HalLogUartRecv -uint32_t HalLogUartRecv(HAL_LOG_UART_ADAPTER *pUartAdapter, uint8_t *pRxData, uint32_t Length, uint32_t TimeoutMS) { - uint32_t result, i, timecnt, timeout; // v4 , v10 - volatile uint8_t LineStatus; - - if ((pRxData != NULL) && Length) { - if (TimeoutMS - 1 > 0xFFFFFFFD) - timeout = 0; - else { - timeout = 1000 * TimeoutMS / 0x1F; - timecnt = HalTimerOp.HalTimerReadCount(1); - } - i = 0; - while (i < Length) { - LineStatus = HAL_UART_READ32(UART_LINE_STATUS_REG_OFF); - if (LineStatus & LSR_DR) { - pRxData[i++] = HAL_UART_READ32(UART_REV_BUF_OFF); - } else if (timeout) { - if (RuartIsTimeout(timecnt, timeout) == HAL_TIMEOUT) { - DBG_UART_INFO("HalLogUartRecv: Rx Timeout, RxCount=%d\n", - timecnt, timeout); - break; - } - } else if (!TimeoutMS) - break; - } - result = i; - pUartAdapter->LineStatus = LineStatus; - } else { - DBG_UART_ERR("HalLogUartRecv: Err: pRxData=0x%x, Length=%d!\n", - pRxData, Length); - result = 0; - } - return result; -} - -//----- HalLogUartSend -uint32_t HalLogUartSend(HAL_LOG_UART_ADAPTER *pUartAdapter, - uint8_t *pTxData, uint32_t Length, uint32_t TimeoutMS) { - uint32_t i, result, timeout, timecnt; - - if ((pTxData != NULL) && Length) { - if (TimeoutMS - 1 > 0xFFFFFFFD) { - timeout = 0; - } else { - timeout = 1000 * TimeoutMS / 0x1F; - timecnt = HalTimerOp.HalTimerReadCount(1); // v4 = (*((int (__fastcall **)(_DWORD))&HalTimerOp + 2))(1); - } - i = 0; - while (i < Length) { - if (HAL_UART_READ32(UART_LINE_STATUS_REG_OFF) & LSR_THRE) { // v40003014 & 0x20 ) - HAL_UART_WRITE32(UART_REV_BUF_OFF, pTxData[i++]); // 40003000 = pTxData[i++]; - } else if (timeout) { - if (RuartIsTimeout(timecnt, timeout) == HAL_TIMEOUT) { - DBG_UART_INFO("HalLogUartSend: Tx Timeout, TxCount=%d\n", - timecnt, timeout); - break; - } - } else if (!TimeoutMS) - break; - } - if (i == Length) - while (!(HAL_UART_READ32(UART_LINE_STATUS_REG_OFF) & LSR_TEMT) - && (!timeout - || RuartIsTimeout(timecnt, timeout) != HAL_TIMEOUT)) - ; // 40003014 & 0x40 - result = i; - } else { - DBG_UART_ERR("HalLogUartSend: Err: pTxData=0x%x, Length=%d!\n", - pTxData, Length); - result = 0; - } - return result; -} - -//----- HalLogUartIntSend -HAL_Status HalLogUartIntSend(HAL_LOG_UART_ADAPTER *pUartAdapter, - uint8_t *pTxData, uint32_t Length) { - HAL_Status result; - if (pTxData && Length) { - pUartAdapter->TxCount = Length; - pUartAdapter->pTxBuf = pTxData; - pUartAdapter->pTxStartAddr = pTxData; - pUartAdapter->IntEnReg = pUartAdapter->IntEnReg - | (IER_PTIME | IER_ETBEI); // | 0x82; - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, pUartAdapter->IntEnReg); // 40003004 - result = HAL_OK; // 0; - } else { - DBG_UART_ERR("HalLogUartIntSend: Err: pTxData=0x%x, Length=%d!\n", - pTxData, Length); - result = HAL_ERR_PARA; //3; - } - return result; -} - -//----- HalLogUartIntRecv -HAL_Status HalLogUartIntRecv(HAL_LOG_UART_ADAPTER *pUartAdapter, - uint8_t *pRxData, uint32_t Length) { - HAL_Status result; - - if (pRxData && Length) { - pUartAdapter->pRxBuf = pRxData; - pUartAdapter->pRxStartAddr = pRxData; - pUartAdapter->RxCount = Length; - if (Length > 8) { - pUartAdapter->FIFOControl = pUartAdapter->FIFOControl - | FCR_RX_TRIG_HF; // | 0x80 RCVR Trigger: FIFO 1/2 full - HAL_UART_WRITE32(UART_FIFO_CTL_REG_OFF, pUartAdapter->FIFOControl); // 40003008 - } - pUartAdapter->IntEnReg = pUartAdapter->IntEnReg - | (IER_ERBFI | IER_ELSI); // | 5 - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, pUartAdapter->IntEnReg); // 40003004 - result = HAL_OK; - } else { - DBG_UART_ERR("HalLogUartIntRecv: Err: pRxData=0x%x, Length=%d\n", - pRxData, Length); - result = HAL_ERR_PARA; // 3; - } - return result; -} - -//----- HalLogUartAbortIntSend -void HalLogUartAbortIntSend(HAL_LOG_UART_ADAPTER *pUartAdapter) { - pUartAdapter->IntEnReg = pUartAdapter->IntEnReg - & (~(IER_PTIME | IER_ETBEI)); // & 0xFFFFFF7D - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, pUartAdapter->IntEnReg); // 40003004 -} - -//----- HalLogUartAbortIntRecv -void HalLogUartAbortIntRecv(HAL_LOG_UART_ADAPTER *pUartAdapter) { - pUartAdapter->IntEnReg = pUartAdapter->IntEnReg & (~(IER_ERBFI | IER_ELSI)); // & 0xFFFFFFFA - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, pUartAdapter->IntEnReg); // 40003004 - while (pUartAdapter->RxCount - && (HAL_UART_READ32(UART_LINE_STATUS_REG_OFF) & LSR_DR)) { - *pUartAdapter->pRxBuf++ = HAL_UART_READ32(UART_REV_BUF_OFF); // 40003000 - pUartAdapter->RxCount--; - } -} - -//----- HalLogUartRstFIFO -HAL_Status HalLogUartRstFIFO(HAL_LOG_UART_ADAPTER *pUartAdapter, uint8_t RstCtrl) { - uint32_t RegValue = pUartAdapter->FIFOControl; - if (RstCtrl & LOG_UART_RST_TX_FIFO) - RegValue |= FCR_RST_TX; - if (RstCtrl & LOG_UART_RST_RX_FIFO) - RegValue |= FCR_RST_RX; - HAL_UART_WRITE32(UART_FIFO_CTL_REG_OFF, RegValue); // 40003008 = RegValue; - if (RstCtrl & LOG_UART_RST_TX_FIFO) { - int i = 100; - for (RegValue = HAL_UART_READ32(UART_LINE_STATUS_REG_OFF); - !(RegValue & LSR_TEMT); - HAL_UART_WRITE32(UART_LINE_STATUS_REG_OFF, RegValue)) { - if (!(i--)) - break; - HalDelayUs(100); - } - } - return HAL_OK; -} - -//----- HalLogUartEnable -void HalLogUartEnable(HAL_LOG_UART_ADAPTER *pUartAdapter) { - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT_SOC_LOG_UART_EN); // 40000210 |= 0x1000u; - HAL_PERI_ON_WRITE32(REG_PESOC_CLK_CTRL, - HAL_PERI_ON_READ32(REG_PESOC_CLK_CTRL) | BIT_SOC_ACTCK_LOG_UART_EN); // 40000230 |= 0x1000u; - HalPinCtrlRtl8195A(LOG_UART, 0, 1); -} - -//----- HalLogUartDisable -void HalLogUartDisable(HAL_LOG_UART_ADAPTER *pUartAdapter) { - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & (~BIT_SOC_LOG_UART_EN)); // 40000210 &= 0xFFFFEFFF; - HAL_PERI_ON_WRITE32(REG_PESOC_CLK_CTRL, - HAL_PERI_ON_READ32(REG_PESOC_CLK_CTRL) & (~BIT_SOC_ACTCK_LOG_UART_EN)); // 40000230 &= 0xFFFFEFFF; - HalPinCtrlRtl8195A(LOG_UART, 0, 0); -} - -//----- HalInitLogUart -void HalInitLogUart(void) { - IRQ_HANDLE UartIrqHandle; - LOG_UART_ADAPTER UartAdapter; - - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & (~BIT_SOC_LOG_UART_EN)); // 40000210 &= 0xFFFFEFFF; - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT_SOC_LOG_UART_EN); - HAL_PERI_ON_WRITE32(REG_PESOC_CLK_CTRL, - HAL_PERI_ON_READ32(REG_PESOC_CLK_CTRL) | BIT_SOC_ACTCK_LOG_UART_EN); // 40000230 |= 0x1000u; - HalPinCtrlRtl8195A(LOG_UART, 0, 1); - UartAdapter.BaudRate = DEFAULT_BAUDRATE; - UartAdapter.DataLength = UART_DATA_LEN_8BIT; - UartAdapter.FIFOControl = FCR_RX_TRIG_MASK | FCR_FIFO_EN; // 0xC1; - UartAdapter.IntEnReg = IER_ERBFI | IER_ELSI; // 5 - UartAdapter.Parity = LCR_PARITY_NONE; - UartAdapter.Stop = LCR_STOP_1B; - HalLogUartInit(UartAdapter); - UartIrqHandle.IrqNum = UART_LOG_IRQ; - UartIrqHandle.IrqFun = (IRQ_FUN) &UartLogIrqHandleRam; - UartIrqHandle.Data = 0; - UartIrqHandle.Priority = 0; - VectorIrqUnRegisterRtl8195A(&UartIrqHandle); - VectorIrqRegisterRtl8195A(&UartIrqHandle); -} - -//----- HalDeinitLogUart -void HalDeinitLogUart(void) { - HalLogUartWaitTxFifoEmpty(); - HalPinCtrlRtl8195A(LOG_UART, 0, 0); -} - -#endif // CONFIG_LOG_UART_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_log_uart.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_log_uart.h deleted file mode 100644 index afe940c..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_log_uart.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_LOG_UART_H_ -#define _HAL_LOG_UART_H_ - -#include "hal_diag.h" - -#define LOG_UART_WAIT_FOREVER 0xffffffff - -// Define Line Control Register Bits -typedef enum { - LCR_DLS_5B = 0, // Data Length: 5 bits - LCR_DLS_6B = BIT(0), // Data Length: 6 bits - LCR_DLS_7B = BIT(1), // Data Length: 7 bits - LCR_DLS_8B = (BIT(1)|BIT(0)), // Data Length: 7 bits - - LCR_STOP_1B = 0, // Number of stop bits: 1 - LCR_STOP_2B = BIT(2), // Number of stop bits: 1.5(data len=5) or 2 - - LCR_PARITY_NONE = 0, // Parity Enable: 0 - LCR_PARITY_ODD = BIT(3), // Parity Enable: 1, Even Parity: 0 - LCR_PARITY_EVEN = (BIT(4)|BIT(3)), // Parity Enable: 1, Even Parity: 1 - - LCR_BC = BIT(6), // Break Control Bit - LCR_DLAB = BIT(7) // Divisor Latch Access Bit -} LOG_UART_LINE_CTRL; - -// define Log UART Interrupt Indication ID -/* -IIR[3:0]: -0000 = modem status -0001 = no interrupt pending -0010 = THR empty -0100 = received data available -0110 = receiver line status -0111 = busy detect -1100 = character timeout -*/ -typedef enum { - IIR_MODEM_STATUS = 0, // Clear to send or data set ready or ring indicator or data carrier detect. - IIR_NO_PENDING = 1, - IIR_THR_EMPTY = 2, // TX FIFO level lower than threshold or FIFO empty - IIR_RX_RDY = 4, // RX data ready - IIR_RX_LINE_STATUS = 6, // Overrun/parity/framing errors or break interrupt - IIR_BUSY = 7, - IIR_CHAR_TIMEOUT = 12 // timeout: Rx dara ready but no read -} LOG_UART_INT_ID; - -// Define Interrupt Enable Bit -typedef enum { - IER_ERBFI = BIT(0), // Enable Received Data Available Interrupt - IER_ETBEI = BIT(1), // Enable Transmit Holding Register Empty Interrupt - IER_ELSI = BIT(2), // Enable Receiver Line Status Interrupt - IER_EDSSI = BIT(3), // Enable Modem Status Interrupt - IER_PTIME = BIT(7) // Programmable THRE Interrupt Mode Enable -} LOG_UART_INT_EN; - -// Define Line Status Bit -typedef enum { - LSR_DR = BIT(0), // Data Ready bit - LSR_OE = BIT(1), // Overrun error bit - LSR_PE = BIT(2), // Parity Error bit - LSR_FE = BIT(3), // Framing Error bit - LSR_BI = BIT(4), // Break Interrupt bit - LSR_THRE = BIT(5), // Transmit Holding Register Empty bit(IER_PTIME=0) - LSR_FIFOF = BIT(5), // Transmit FIFO Full bit(IER_PTIME=1) - LSR_TEMT = BIT(6), // Transmitter Empty bit - LSR_RFE = BIT(7) // Receiver FIFO Error bit -} LOG_UART_LINE_STATUS; - -enum { - LOG_UART_RST_TX_FIFO = 0x01, - LOG_UART_RST_RX_FIFO = 0x02 -}; - -#define LOG_UART_TX_FIFO_DEPTH 16 -#define LOG_UART_RX_FIFO_DEPTH 16 - -// Define FIFO Control Register Bits -typedef enum { - FCR_FIFO_EN = BIT(0), // FIFO Enable. - FCR_RST_RX = BIT(1), // RCVR FIFO Reset, self clear - FCR_RST_TX = BIT(2), // XMIT FIFO Reset, self clear - FCR_TX_TRIG_EMP = 0, // TX Empty Trigger: FIFO empty - FCR_TX_TRIG_2CH = BIT(4), // TX Empty Trigger: 2 characters in the FIFO - FCR_TX_TRIG_QF = BIT(5), // TX Empty Trigger: FIFO 1/4 full - FCR_TX_TRIG_HF = (BIT(5)|BIT(4)), // TX Empty Trigger: FIFO 1/2 full - FCR_TX_TRIG_MASK = (BIT(5)|BIT(4)), // TX Empty Trigger Bit Mask - FCR_RX_TRIG_1CH = 0, // RCVR Trigger: 1 character in the FIFO - FCR_RX_TRIG_QF = BIT(6), // RCVR Trigger: FIFO 1/4 full - FCR_RX_TRIG_HF = BIT(7), // RCVR Trigger: FIFO 1/2 full - FCR_RX_TRIG_AF = (BIT(7)|BIT(6)), // RCVR Trigger: FIFO 2 less than full - FCR_RX_TRIG_MASK = (BIT(7)|BIT(6)) // RCVR Trigger bits Mask -} LOG_UART_FIFO_CTRL; - -typedef struct _HAL_LOG_UART_ADAPTER_ { - uint32_t BaudRate; //00 - uint32_t FIFOControl; //+04 - uint32_t IntEnReg; //+08 - uint8_t Parity; //+0c - uint8_t Stop; //+0d - uint8_t DataLength; //+0e - - uint8_t LineStatus; //+0f - volatile uint32_t TxCount; //+10 how many byte to TX - volatile uint32_t RxCount; //+14 how many bytes to RX - volatile uint8_t *pTxBuf; //+18 - volatile uint8_t *pRxBuf; //+1c - uint8_t *pTxStartAddr; //+20 - uint8_t *pRxStartAddr; //+24 - - IRQ_HANDLE IrqHandle; //+28 - void (*LineStatusCallback)(void *para, uint8_t status); //+38 User Line Status interrupt callback - void (*TxCompCallback)(void *para); //+3c User Tx complete callback - void (*RxCompCallback)(void *para); //+40 User Rx complete callback - void *LineStatusCbPara; //+44 the argument for LineStatusCallback - void *TxCompCbPara; //+48 the argument for TxCompCallback - void *RxCompCbPara; //+4c the argument for RxCompCallback - - void (*api_irq_handler)(uint32_t id, LOG_UART_INT_ID event); //+0x50 - uint32_t api_irq_id; //+0x54 -}HAL_LOG_UART_ADAPTER, *PHAL_LOG_UART_ADAPTER; - -void HalLogUartIrqHandle(void * Data); -void HalLogUartSetBaudRate(HAL_LOG_UART_ADAPTER *pUartAdapter); -void HalLogUartSetLineCtrl(HAL_LOG_UART_ADAPTER *pUartAdapter); -void HalLogUartSetIntEn(HAL_LOG_UART_ADAPTER *pUartAdapter); -uint32_t HalLogUartInitSetting(HAL_LOG_UART_ADAPTER *pUartAdapter); -uint32_t HalLogUartRecv(HAL_LOG_UART_ADAPTER *pUartAdapter, - uint8_t *pRxData, uint32_t Length, uint32_t TimeoutMS); -uint32_t HalLogUartSend(HAL_LOG_UART_ADAPTER *pUartAdapter, - uint8_t *pTxData, uint32_t Length, uint32_t TimeoutMS); -HAL_Status HalLogUartIntSend(HAL_LOG_UART_ADAPTER *pUartAdapter, - uint8_t *pTxData, uint32_t Length); -HAL_Status HalLogUartIntRecv(HAL_LOG_UART_ADAPTER *pUartAdapter, - uint8_t *pRxData, uint32_t Length); -void HalLogUartAbortIntSend(HAL_LOG_UART_ADAPTER *pUartAdapter); -void HalLogUartAbortIntRecv(HAL_LOG_UART_ADAPTER *pUartAdapter); -HAL_Status HalLogUartRstFIFO(HAL_LOG_UART_ADAPTER *pUartAdapter, uint8_t RstCtrl); -void HalLogUartEnable(HAL_LOG_UART_ADAPTER *pUartAdapter); -void HalLogUartDisable(HAL_LOG_UART_ADAPTER *pUartAdapter); -void HalLogUartWaitTxFifoEmpty(void); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_mii.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_mii.c deleted file mode 100644 index c654061..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_mii.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "rtl8195a.h" - -#ifdef CONFIG_MII_EN - -#include "hal_mii.h" - -HAL_ETHER_ADAPTER HalEtherAdp; - - - -int32_t -HalMiiInit( - IN void -) -{ - if (FunctionChk(MII, S0) == _FALSE) - return HAL_ERR_UNKNOWN; - else - return HalMiiInitRtl8195a(); -} - - -void -HalMiiDeInit( - IN void -) -{ - HalMiiDeInitRtl8195a(); -} - - -int32_t -HalMiiWriteData( - IN const char *Data, - IN uint32_t Size -) -{ - return HalMiiWriteDataRtl8195a(Data, Size); -} - - -uint32_t -HalMiiSendPacket( - IN void -) -{ - return HalMiiSendPacketRtl8195a(); -} - - -uint32_t -HalMiiReceivePacket( - IN void -) -{ - return HalMiiReceivePacketRtl8195a(); -} - - -uint32_t -HalMiiReadData( - IN uint8_t *Data, - IN uint32_t Size -) -{ - return HalMiiReadDataRtl8195a(Data, Size); -} - - -void -HalMiiGetMacAddress( - IN uint8_t *Addr -) -{ - HalMiiGetMacAddressRtl8195a(Addr); -} - - -uint32_t -HalMiiGetLinkStatus( - IN void -) -{ - return HalMiiGetLinkStatusRtl8195a(); -} - - -void -HalMiiForceLink( - IN int32_t Speed, - IN int32_t Duplex -) -{ - HalMiiForceLinkRtl8195a(Speed, Duplex); -} - - -#ifdef CONFIG_MII_VERIFY -void -HalMiiOpInit( - IN void *Data -) -{ - PHAL_MII_OP pHalMiiOp = (PHAL_MII_OP) Data; - - - pHalMiiOp->HalMiiGmacInit = HalMiiGmacInitRtl8195a; - pHalMiiOp->HalMiiGmacReset = HalMiiGmacResetRtl8195a; - pHalMiiOp->HalMiiGmacEnablePhyMode = HalMiiGmacEnablePhyModeRtl8195a; - pHalMiiOp->HalMiiGmacXmit = HalMiiGmacXmitRtl8195a; - pHalMiiOp->HalMiiGmacCleanTxRing = HalMiiGmacCleanTxRingRtl8195a; - pHalMiiOp->HalMiiGmacFillTxInfo = HalMiiGmacFillTxInfoRtl8195a; - pHalMiiOp->HalMiiGmacFillRxInfo = HalMiiGmacFillRxInfoRtl8195a; - pHalMiiOp->HalMiiGmacTx = HalMiiGmacTxRtl8195a; - pHalMiiOp->HalMiiGmacRx = HalMiiGmacRxRtl8195a; - pHalMiiOp->HalMiiGmacSetDefaultEthIoCmd = HalMiiGmacSetDefaultEthIoCmdRtl8195a; - pHalMiiOp->HalMiiGmacInitIrq = HalMiiGmacInitIrqRtl8195a; - pHalMiiOp->HalMiiGmacGetInterruptStatus = HalMiiGmacGetInterruptStatusRtl8195a; - pHalMiiOp->HalMiiGmacClearInterruptStatus = HalMiiGmacClearInterruptStatusRtl8195a; -} -#endif // #ifdef CONFIG_MII_VERIFY - -#endif // #ifdef CONFIG_MII_EN - - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_mii.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_mii.h deleted file mode 100644 index dd79f73..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_mii.h +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_MII_H_ -#define _HAL_MII_H_ - -#include "rtl8195a_mii.h" - - -/** - * LOG Configurations - */ - -#define NOLOG - -#define LOG_TAG "NoTag" -#define LOG_INFO_HEADER "I" -#define LOG_DEBUG_HEADER "D" -#define LOG_ERROR_HEADER "E" -#define LOG_TEST_HEADER "T" - -#define IDENT_TWO_SPACE " " -#define IDENT_FOUR_SPACE " " - -#define LOG_INFO(...) do {\ - DiagPrintf("\r"LOG_INFO_HEADER"/"LOG_TAG": " __VA_ARGS__);\ -}while(0) - -#define LOG_DEBUG(...) do {\ - DiagPrintf("\r"LOG_DEBUG_HEADER"/"LOG_TAG": " __VA_ARGS__);\ -}while(0) - -#define LOG_ERROR(...) do {\ - DiagPrintf("\r"LOG_ERROR_HEADER"/"LOG_TAG": " __VA_ARGS__);\ -}while(0) - -#ifdef NOLOG - #define LOGI - #define LOGD - #define LOGE - #define LOGI2 - #define LOGD2 - #define LOGE2 - #define LOGI4 - #define LOGD4 - #define LOGE4 -#else - #define LOGI LOG_INFO - #define LOGD LOG_DEBUG - #define LOGE LOG_ERROR - #define LOGI2(...) LOG_INFO(IDENT_TWO_SPACE __VA_ARGS__) - #define LOGD2(...) LOG_DEBUG(IDENT_TWO_SPACE __VA_ARGS__) - #define LOGE2(...) LOG_ERROR(IDENT_TWO_SPACE __VA_ARGS__) - #define LOGI4(...) LOG_INFO(IDENT_FOUR_SPACE __VA_ARGS__) - #define LOGD4(...) LOG_DEBUG(IDENT_FOUR_SPACE __VA_ARGS__) - #define LOGE4(...) LOG_ERROR(IDENT_FOUR_SPACE __VA_ARGS__) -#endif - -#define ANSI_COLOR_GREEN "\x1b[32m" -#define ANSI_COLOR_CYAN "\x1b[36m" -#define ANSI_COLOR_YELLOW "\x1b[33m" -#define ANSI_COLOR_MAGENTA "\x1b[35m" -#define ANSI_COLOR_RED "\x1b[31m" -#define ANSI_COLOR_BLUE "\x1b[34m" -#define ANSI_COLOR_RESET "\x1b[0m" - -#define DBG_ENTRANCE LOGI(ANSI_COLOR_GREEN "=> %s() <%s>\n" ANSI_COLOR_RESET, \ - __func__, __FILE__) - - -// GMAC MII Configurations -#ifdef LOG_TAG -#undef LOG_TAG -#define LOG_TAG "MII" -#endif - - -typedef enum { - ETH_TXDONE, - ETH_RXDONE, - ETH_LINKUP, - ETH_LINKDOWN -}EthernetEventType; - -typedef struct _HAL_ETHER_ADAPTER_{ - IRQ_HANDLE IrqHandle; - uint32_t InterruptMask; - uint8_t tx_desc_num; - uint8_t rx_desc_num; - volatile uint8_t *TxDescAddr; - volatile uint8_t *RxDescAddr; - volatile uint8_t *pTxPktBuf; - volatile uint8_t *pRxPktBuf; - void (*CallBack)(uint32_t Event, uint32_t Data); -}HAL_ETHER_ADAPTER, *PHAL_ETHER_ADAPTER; - - - -extern int32_t -HalMiiInit( - IN void -); - -extern void -HalMiiDeInit( - IN void -); - -extern int32_t -HalMiiWriteData( - IN const char *Data, - IN uint32_t Size -); - -extern uint32_t -HalMiiSendPacket( - IN void -); - -extern uint32_t -HalMiiReceivePacket( - IN void -); - -extern uint32_t -HalMiiReadData( - IN uint8_t *Data, - IN uint32_t Size -); - -extern void -HalMiiGetMacAddress( - IN uint8_t *Addr -); - -extern uint32_t -HalMiiGetLinkStatus( - IN void -); - -extern void -HalMiiForceLink( - IN int32_t Speed, - IN int32_t Duplex -); - - -#ifdef CONFIG_MII_VERIFY - -typedef struct _HAL_MII_ADAPTER_ { - uint32_t InterruptMask; - PPHY_MODE_INFO pPhyModeInfo; -}HAL_MII_ADAPTER, *PHAL_MII_ADAPTER; - -typedef struct _HAL_MII_OP_ { - BOOL (*HalMiiGmacInit)(void *Data); - BOOL (*HalMiiGmacReset)(void *Data); - BOOL (*HalMiiGmacEnablePhyMode)(void *Data); - uint32_t (*HalMiiGmacXmit)(void *Data); - void (*HalMiiGmacCleanTxRing)(void *Data); - void (*HalMiiGmacFillTxInfo)(void *Data); - void (*HalMiiGmacFillRxInfo)(void *Data); - void (*HalMiiGmacTx)(void *Data); - void (*HalMiiGmacRx)(void *Data); - void (*HalMiiGmacSetDefaultEthIoCmd)(void *Data); - void (*HalMiiGmacInitIrq)(void *Data); - uint32_t (*HalMiiGmacGetInterruptStatus)(void); - void (*HalMiiGmacClearInterruptStatus)(uint32_t IsrStatus); -}HAL_MII_OP, *PHAL_MII_OP; - -void HalMiiOpInit(IN void *Data); - -typedef struct _MII_ADAPTER_ { - PHAL_MII_OP pHalMiiOp; - PHAL_MII_ADAPTER pHalMiiAdapter; - PTX_INFO pTx_Info; - PRX_INFO pRx_Info; - void* TxBuffer; - void* RxBuffer; -}MII_ADAPTER, *PMII_ADAPTER; - -#endif // #ifdef CONFIG_MII_VERIFY - -#endif // #ifndef _HAL_MII_H_ - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_misc.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_misc.c deleted file mode 100644 index 3c7f232..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_misc.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * hal_misc.c - * - * Created on: 08/10/2016 - * Author: pvvx -*/ -#include "rtl8195a.h" - -//------------------------------------------------------------------------- -// Function declarations -/* -void HalReInitPlatformTimer(void); -void HalSetResetCause(IN HAL_RESET_REASON reason); -HAL_RESET_REASON HalGetResetCause(void); -*/ -// void HalTimerOpInit_Patch(IN void *Data); // in hal_timer.h -//------------------------------------------------------------------------- -// Data declarations -// extern HAL_TIMER_OP HalTimerOp; // This variable declared in ROM code (in hal_timer.h ) - - -//----- HalReInitPlatformTimer -void HalReInitPlatformTimer(void) -{ - TIMER_ADAPTER TimerAdapter; - HAL_PERI_ON_WRITE32(REG_OSC32K_CTRL, HAL_PERI_ON_READ32(REG_OSC32K_CTRL) | BIT_32K_POW_CKGEN_EN); // 40000270 |= 1 - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT_SOC_GTIMER_EN); // 40000210 |= 0x10000 - HAL_PERI_ON_WRITE32(REG_PESOC_CLK_CTRL, HAL_PERI_ON_READ32(REG_PESOC_CLK_CTRL) | BIT_SOC_ACTCK_TIMER_EN); // 40000230 |= 0x4000 - HAL_PERI_ON_WRITE32(REG_PESOC_CLK_CTRL, HAL_PERI_ON_READ32(REG_PESOC_CLK_CTRL) | BIT_SOC_SLPCK_TIMER_EN); // 40000230 |= 0x8000 - HAL_PERI_ON_WRITE32(REG_PON_ISO_CTRL, HAL_PERI_ON_READ32(REG_PON_ISO_CTRL) & (~BIT_ISO_OSC32K_EN)); // 40000204 &= 0xFFFFFFEF - TimerAdapter.TimerIrqPriority = 0; - TimerAdapter.TimerLoadValueUs = 0; - TimerAdapter.TimerMode = FREE_RUN_MODE; - TimerAdapter.IrqDis = 1; - TimerAdapter.TimerId = 1; - HalTimerOpInit_Patch(&HalTimerOp); -// HAL_TIMER_OP x; - HalTimerOp.HalTimerInit(&TimerAdapter); - HalTimerOp.HalTimerEn(1); -} - -//----- HalSetResetCause -void HalSetResetCause(HAL_RESET_REASON reason) -{ - HAL_PERI_ON_WRITE32(REG_SYS_DSLP_TIM_CTRL, HAL_PERI_ON_READ32(REG_SYS_DSLP_TIM_CTRL) | BIT31); // 40000094 |= 0x80000000 - HAL_PERI_ON_WRITE32(REG_SYS_DSLP_TIM_CTRL, (HAL_PERI_ON_READ32(REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x9700 | (reason & 0xff)); // 40000094 = (40000094 >> 16 << 16) | 0x9700 | (uint8_t)reason; - while(HAL_PERI_ON_READ32(REG_SYS_DSLP_TIM_CTRL) & 0x8000); -} - -//----- HalGetResetCause -HAL_RESET_REASON HalGetResetCause(void) -{ - HAL_PERI_ON_WRITE32(REG_SYS_DSLP_TIM_CTRL, HAL_PERI_ON_READ32(REG_SYS_DSLP_TIM_CTRL) | BIT31); // 40000094 |= 0x80000000 - HAL_PERI_ON_WRITE32(REG_SYS_DSLP_TIM_CTRL, (HAL_PERI_ON_READ32(REG_SYS_DSLP_TIM_CTRL) & 0xFFFF00FF) | 0x8700); // 40000094 = 40000094 & 0xFFFF00FF | 0x8700 - while(HAL_PERI_ON_READ32(REG_SYS_DSLP_TIM_CTRL) & 0x8000); - return HAL_PERI_ON_READ32(REG_SYS_DSLP_TIM_CTRL); -} - -uint8_t HalGetChipId(void) { - uint8_t chip_id = CHIP_ID_8195AM; -#if CONFIG_DEBUG_LOG > 3 - if (HALEFUSEOneByteReadROM(HAL_SYS_CTRL_READ32(REG_SYS_EFUSE_CTRL), 0xF8, &chip_id, L25EOUTVOLTAGE) != 1) - DBG_MISC_INFO("Get Chip ID Failed\r"); -#else - HALEFUSEOneByteReadROM(HAL_SYS_CTRL_READ32(REG_SYS_EFUSE_CTRL), 0xF8, &chip_id, L25EOUTVOLTAGE); -#endif - return chip_id; -} - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_misc.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_misc.h deleted file mode 100644 index 51851b1..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_misc.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _MISC_H_ -#define _MISC_H_ - -#include - -#define CHIP_ID_8711AM 0xFF -#define CHIP_ID_8195AM 0xFE -#define CHIP_ID_8711AF 0xFD -#define CHIP_ID_8710AF 0xFC -#define CHIP_ID_8711AN 0xFB -#define CHIP_ID_8710AM 0xFA - -enum _HAL_RESET_REASON{ - REASON_DEFAULT_RST = 0, /**< normal startup by power on */ - REASON_WDT_RST, /**< hardware watch dog reset */ - REASON_EXCEPTION_RST, /**< exception reset, GPIO status won't change */ - REASON_SOFT_WDT_RST, /**< software watch dog reset, GPIO status won't change */ - REASON_SOFT_RESTART, /**< software restart ,system_restart , GPIO status won't change */ - REASON_DEEP_SLEEP_AWAKE, /**< wake up from deep-sleep */ - REASON_EXT_SYS_RST /**< external system reset */ -}; -typedef uint32_t HAL_RESET_REASON; - -#ifdef CONFIG_TIMER_MODULE -extern _LONG_CALL_ unsigned int HalDelayUs(unsigned int us); -#endif - -extern _LONG_CALL_ unsigned int HalGetCpuClk(void); -extern _LONG_CALL_ unsigned char HalGetRomInfo(void); -extern uint8_t HalGetChipId(void); - -extern _LONG_CALL_ROM_ void *_memset( void *s, int c, SIZE_T n ); -extern _LONG_CALL_ROM_ void *_memcpy( void *s1, const void *s2, SIZE_T n ); -#if defined(CONFIG_RELEASE_BUILD_LIBRARIES) && (!defined(E_CUT_ROM_DOMAIN)) -// we built A/B/C cut ROM Lib with this wrong declaration, we need to keep the same for compatible -extern _LONG_CALL_ROM_ int *_memcmp( const void *av, const void *bv, SIZE_T len ); -#else -extern _LONG_CALL_ROM_ int _memcmp( const void *av, const void *bv, SIZE_T len ); -#endif -extern _LONG_CALL_ROM_ SIZE_T _strlen(const char *s); -extern _LONG_CALL_ROM_ int _strcmp(const char *cs, const char *ct); - -void HalSetResetCause(IN HAL_RESET_REASON reason); -HAL_RESET_REASON HalGetResetCause(void); - - -#endif //_MISC_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_nfc.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_nfc.c deleted file mode 100644 index c18dce4..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_nfc.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#include "rtl8195a.h" -#include "hal_nfc.h" - -#ifdef CONFIG_NFC_EN - -void HalNFCOpInit( - IN void *Data -) -{ - -} - -#endif //CONFIG_NFC_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_nfc.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_nfc.h deleted file mode 100644 index d6e5836..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_nfc.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_NFC_H_ -#define _HAL_NFC_H_ - -#include "rtl8195a_nfc.h" - - -void HalNFCOpInit( - IN void *Data -); - - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pcm.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pcm.c deleted file mode 100644 index 48fc144..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pcm.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#include "platform_autoconf.h" -#include "hal_pcm.h" - -#ifdef CONFIG_PCM_EN - -void HalPcmOpInit( - IN void *Data -) -{ - PHAL_PCM_OP pHalPcmOp = (PHAL_PCM_OP) Data; - - pHalPcmOp->HalPcmOnOff = HalPcmOnOffRtl8195a; - pHalPcmOp->HalPcmInit = HalPcmInitRtl8195a; - pHalPcmOp->HalPcmSetting = HalPcmSettingRtl8195a; - pHalPcmOp->HalPcmEn = HalPcmEnRtl8195a; - pHalPcmOp->HalPcmIsrEnAndDis= HalPcmIsrEnAndDisRtl8195a; - pHalPcmOp->HalPcmDumpReg= HalPcmDumpRegRtl8195a; - pHalPcmOp->HalPcm= HalPcmRtl8195a; -} - -#endif //CONFIG_PCM_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pcm.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pcm.h deleted file mode 100644 index 5975efb..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pcm.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_PCM_H_ -#define _HAL_PCM_H_ - -#include "rtl8195a_pcm.h" -/* -typedef struct _GDMA_CH_LLI_ELE_ { - uint32_t Sarx; - uint32_t Darx; - uint32_t Llpx; - uint32_t CtlxLow; - uint32_t CtlxUp; - uint32_t Temp; -}GDMA_CH_LLI_ELE, *PGDMA_CH_LLI_ELE; -#if 1 -#if 0 -typedef struct _GDMA_CH_LLI_ { - PGDMA_CH_LLI_ELE pLliEle; - PGDMA_CH_LLI pNextLli; -}GDMA_CH_LLI, *PGDMA_CH_LLI; - -typedef struct _BLOCK_SIZE_LIST_ { - uint32_t BlockSize; - PBLOCK_SIZE_LIST pNextBlockSiz; -}BLOCK_SIZE_LIST, *PBLOCK_SIZE_LIST; -#else -struct GDMA_CH_LLI { - PGDMA_CH_LLI_ELE pLliEle; - struct GDMA_CH_LLI *pNextLli; -}; - -struct BLOCK_SIZE_LIST { - uint32_t BlockSize; - struct BLOCK_SIZE_LIST *pNextBlockSiz; -}; - -#endif - -#endif -typedef struct _HAL_GDMA_ADAPTER_ { - uint32_t ChSar; - uint32_t ChDar; - GDMA_CHANNEL_NUM ChEn; - GDMA_CTL_REG GdmaCtl; - GDMA_CFG_REG GdmaCfg; - uint32_t PacketLen; - uint32_t BlockLen; - uint32_t MuliBlockCunt; - uint32_t MaxMuliBlock; - struct GDMA_CH_LLI *pLlix; - struct BLOCK_SIZE_LIST *pBlockSizeList; - - PGDMA_CH_LLI_ELE pLli; - uint32_t NextPlli; - uint8_t TestItem; - uint8_t ChNum; - uint8_t GdmaIndex; - uint8_t IsrCtrl:1; - uint8_t GdmaOnOff:1; - uint8_t Llpctrl:1; - uint8_t Lli0:1; - uint8_t Rsvd4to7:4; - uint8_t GdmaIsrType; -}HAL_GDMA_ADAPTER, *PHAL_GDMA_ADAPTER; - -*/ - -typedef struct _HAL_PCM_ADAPTER_ { - uint32_t Enable:1; - PCM_CTL_REG PcmCtl; - PCM_CHCNR03_REG PcmChCNR03; - PCM_TSR03_REG PcmTSR03; - PCM_BSIZE03_REG PcmBSize03; - uint32_t abc; - uint8_t PcmIndex; - uint8_t PcmCh; -}HAL_PCM_ADAPTER, *PHAL_PCM_ADAPTER; - - -typedef struct _HAL_PCM_OP_ { - void (*HalPcmOnOff)(void *Data); - BOOL (*HalPcmInit)(void *Data); - BOOL (*HalPcmSetting)(void *Data); - BOOL (*HalPcmEn)(void *Data); - BOOL (*HalPcmIsrEnAndDis) (void *Data); - BOOL (*HalPcmDumpReg)(void *Data); - BOOL (*HalPcm)(void *Data); -}HAL_PCM_OP, *PHAL_PCM_OP; - - -void HalPcmOpInit( - IN void *Data -); - - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_peri_on.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_peri_on.h deleted file mode 100644 index abcbdd0..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_peri_on.h +++ /dev/null @@ -1,451 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_PERI_ON_H_ -#define _HAL_PERI_ON_H_ - -#define MASK_ALLON 0xFFFFFFFF - -#define HAL_PERI_ON_READ32(addr) HAL_READ32(PERI_ON_BASE, addr) -#define HAL_PERI_ON_WRITE32(addr, value) HAL_WRITE32(PERI_ON_BASE, addr, value) -#define HAL_PERI_ON_READ16(addr) HAL_READ16(PERI_ON_BASE, addr) -#define HAL_PERI_ON_WRITE16(addr, value) HAL_WRITE16(PERI_ON_BASE, addr, value) -#define HAL_PERI_ON_READ8(addr) HAL_READ8(PERI_ON_BASE, addr) -#define HAL_PERI_ON_WRITE8(addr, value) HAL_WRITE8(PERI_ON_BASE, addr, value) -#define HAL_PERL_ON_FUNC_CTRL(addr,value,ctrl) \ - HAL_PERI_ON_WRITE32(addr, ((HAL_PERI_ON_READ32(addr) & (~value))|((MASK_ALLON - ctrl + 1) & value))) -#define HAL_PERL_ON_PIN_SEL(addr,mask,value) \ - HAL_PERI_ON_WRITE32(addr, ((HAL_PERI_ON_READ32(addr) & (~mask)) | value)) - -//40 REG_SYS_REGU_CTRL0 -#define LDO25M_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_SYS_REGU_CTRL0, BIT_SYS_REGU_LDO25M_EN, ctrl) - -//A0 SYS_DEBUG_CTRL -#define DEBUG_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_SYS_DEBUG_CTRL, BIT_SYS_DBG_PIN_EN, ctrl) - -//A4 SYS_PINMUX_CTRL -#define SIC_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_SYS_PINMUX_CTRL, BIT_SIC_PIN_EN, ctrl) -#define EEPROM_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_SYS_PINMUX_CTRL, BIT_EEPROM_PIN_EN, ctrl) - - -//210 SOV_FUNC_EN -#define LXBUS_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_SOC_FUNC_EN, BIT_SOC_LXBUS_EN, ctrl) -#define FLASH_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(SPI_FLASH_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_FUNC_EN, BIT_SOC_FLASH_EN, ctrl);} - -#define MEM_CTRL_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(SDR_SDRAM_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_FUNC_EN, BIT_SOC_MEM_CTRL_EN, ctrl);} - -#define LOC_UART_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(LOG_UART_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_FUNC_EN, BIT_SOC_LOG_UART_EN, ctrl);} - -#define GDMA0_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(GDMA0_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_FUNC_EN, BIT_SOC_GDMA0_EN, ctrl);} - -#define GDMA1_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(GDMA1_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_FUNC_EN, BIT_SOC_GDMA1_EN, ctrl);} - -#define GTIMER_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(TIMER_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_FUNC_EN, BIT_SOC_GTIMER_EN, ctrl);} - -#define SECURITY_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(CRYPTO_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_FUNC_EN, BIT_SOC_SECURITY_ENGINE_EN, ctrl);} - -//214 SOC_HCI_COM_FUNC_EN -#define SDIOD_ON_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(SDIO_DEVICE_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_HCI_COM_FUNC_EN, BIT_SOC_HCI_SDIOD_ON_EN, ctrl);} - -#define SDIOD_OFF_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(SDIO_DEVICE_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_HCI_COM_FUNC_EN, BIT_SOC_HCI_SDIOD_OFF_EN, ctrl);} - -#define SDIOH_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(SDIO_HOST_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_HCI_COM_FUNC_EN, BIT_SOC_HCI_SDIOH_EN, ctrl);} - -#define SDIO_ON_RST_MASK(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_SOC_HCI_COM_FUNC_EN, BIT_SOC_HCI_SDIOD_ON_RST_MUX, ctrl) -#define OTG_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(USB_OTG_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_HCI_COM_FUNC_EN, BIT_SOC_HCI_OTG_EN, ctrl);} - -#define OTG_RST_MASK(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_SOC_HCI_COM_FUNC_EN, BIT_SOC_HCI_OTG_RST_MUX, ctrl) -#define MII_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(MII_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_HCI_COM_FUNC_EN, BIT_SOC_HCI_MII_EN, ctrl);} - -#define MII_MUX_SEL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_SOC_HCI_COM_FUNC_EN, BIT_SOC_HCI_SM_SEL, ctrl) -#define WL_MACON_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(WIFI_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_HCI_COM_FUNC_EN, BIT_SOC_HCI_WL_MACON_EN, ctrl);} - -//218 SOC_PERI_FUNC0_EN -#define UART0_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(UART0_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC0_EN, BIT_PERI_UART0_EN, ctrl);} - -#define UART1_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(UART1_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC0_EN, BIT_PERI_UART1_EN, ctrl);} - -#define UART2_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(UART2_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC0_EN, BIT_PERI_UART2_EN, ctrl);} - -#define SPI0_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(SPI0_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC0_EN, BIT_PERI_SPI0_EN, ctrl);} - -#define SPI1_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(SPI1_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC0_EN, BIT_PERI_SPI1_EN, ctrl);} - -#define SPI2_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(SPI2_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC0_EN, BIT_PERI_SPI2_EN, ctrl);} - -#define I2C0_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(I2C0_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC0_EN, BIT_PERI_I2C0_EN, ctrl);} - -#define I2C1_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(I2C1_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC0_EN, BIT_PERI_I2C1_EN, ctrl);} - -#define I2C2_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(I2C2_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC0_EN, BIT_PERI_I2C2_EN, ctrl);} - -#define I2C3_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(I2C3_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC0_EN, BIT_PERI_I2C3_EN, ctrl);} - -#define I2S0_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(I2S0_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC0_EN, BIT_PERI_I2S0_EN, ctrl);} - -#define I2S1_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(I2S1_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC0_EN, BIT_PERI_I2S1_EN, ctrl);} - -#define PCM0_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(PCM0_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC0_EN, BIT_PERI_PCM0_EN, ctrl);} - -#define PCM1_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(PCM1_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC0_EN, BIT_PERI_PCM1_EN, ctrl);} - -//21C SOC_PERI_FUNC1_EN -#define ADC0_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(ADC_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC1_EN, BIT_PERI_ADC0_EN, ctrl);} - -#define DAC0_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(DAC_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC1_EN, BIT_PERI_DAC0_EN, ctrl);} - -#define DAC1_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(DAC_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC1_EN, BIT_PERI_DAC1_EN, ctrl);} - -#define GPIO_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(GPIO_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_FUNC1_EN, BIT_PERI_GPIO_EN, ctrl);} - -//220 SOC_PERI_BD_FUNC0_EN -#define UART0_BD_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(UART0_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_BD_FUNC0_EN, BIT_PERI_UART0_BD_EN, ctrl);} - -#define UART1_BD_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(UART1_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_BD_FUNC0_EN, BIT_PERI_UART1_BD_EN, ctrl);} - -#define UART2_BD_FCTRL(ctrl) { \ - if (!ctrl) { \ - HAL_READ32(UART2_REG_BASE,0);\ - }\ - HAL_PERL_ON_FUNC_CTRL(REG_SOC_PERI_BD_FUNC0_EN, BIT_PERI_UART2_BD_EN, ctrl);} - -//230 PESOC_CLK_CTRL -#define ACTCK_CPU_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_CKE_PLFM, ctrl) -#define ACTCK_TRACE_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_ACTCK_TRACE_EN, ctrl) -#define SLPCK_TRACE_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_SLPCK_TRACE_EN, ctrl) -#define ACTCK_VENDOR_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_ACTCK_VENDOR_REG_EN, ctrl) -#define SLPCK_VENDOR_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_SLPCK_VENDOR_REG_EN, ctrl) -#define ACTCK_FLASH_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_ACTCK_FLASH_EN, ctrl) -#define SLPCK_FLASH_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_SLPCK_FLASH_EN, ctrl) -#define ACTCK_SDR_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_ACTCK_SDR_EN, ctrl) -#define SLPCK_SDR_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_SLPCK_SDR_EN, ctrl) -#define ACTCK_LOG_UART_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_ACTCK_LOG_UART_EN, ctrl) -#define SLPCK_LOG_UART_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_SLPCK_LOG_UART_EN, ctrl) -#define ACTCK_TIMER_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_ACTCK_TIMER_EN, ctrl) -#define SLPCK_TIMER_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_SLPCK_TIMER_EN, ctrl) -#define ACTCK_GDMA0_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_ACTCK_GDMA0_EN, ctrl) -#define SLPCK_GDMA0_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_SLPCK_GDMA0_EN, ctrl) -#define ACTCK_GDMA1_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_ACTCK_GDMA1_EN, ctrl) -#define SLPCK_GDMA1_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_SLPCK_GDMA1_EN, ctrl) -#define ACTCK_GPIO_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_ACTCK_GPIO_EN, ctrl) -#define SLPCK_GPIO_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_SLPCK_GPIO_EN, ctrl) -#define ACTCK_BTCMD_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_ACTCK_BTCMD_EN, ctrl) -#define SLPCK_BTCMD_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_CLK_CTRL, BIT_SOC_SLPCK_BTCMD_EN, ctrl) - -//234 PESOC_PERI_CLK_CTRL0 -#define ACTCK_UART0_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL0, BIT_SOC_ACTCK_UART0_EN, ctrl) -#define SLPCK_UART0_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL0, BIT_SOC_SLPCK_UART0_EN, ctrl) -#define ACTCK_UART1_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL0, BIT_SOC_ACTCK_UART1_EN, ctrl) -#define SLPCK_UART1_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL0, BIT_SOC_SLPCK_UART1_EN, ctrl) -#define ACTCK_UART2_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL0, BIT_SOC_ACTCK_UART2_EN, ctrl) -#define SLPCK_UART2_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL0, BIT_SOC_SLPCK_UART2_EN, ctrl) -#define ACTCK_SPI0_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL0, BIT_SOC_ACTCK_SPI0_EN, ctrl) -#define SLPCK_SPI0_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL0, BIT_SOC_SLPCK_SPI0_EN, ctrl) -#define ACTCK_SPI1_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL0, BIT_SOC_ACTCK_SPI1_EN, ctrl) -#define SLPCK_SPI1_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL0, BIT_SOC_SLPCK_SPI1_EN, ctrl) -#define ACTCK_SPI2_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL0, BIT_SOC_ACTCK_SPI2_EN, ctrl) -#define SLPCK_SPI2_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL0, BIT_SOC_SLPCK_SPI2_EN, ctrl) - -//238 PESOC_PERI_CLK_CTRL1 -#define ACTCK_I2C0_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_ACTCK_I2C0_EN, ctrl) -#define SLPCK_I2C0_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_SLPCK_I2C0_EN, ctrl) -#define ACTCK_I2C1_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_ACTCK_I2C1_EN, ctrl) -#define SLPCK_I2C1_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_SLPCK_I2C1_EN, ctrl) -#define ACTCK_I2C2_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_ACTCK_I2C2_EN, ctrl) -#define SLPCK_I2C2_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_SLPCK_I2C2_EN, ctrl) -#define ACTCK_I2C3_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_ACTCK_I2C3_EN, ctrl) -#define SLPCK_I2C3_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_SLPCK_I2C3_EN, ctrl) -#define ACTCK_I2S_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_ACTCK_I2S_EN, ctrl) -#define SLPCK_I2S_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_SLPCK_I2S_EN, ctrl) -#define ACTCK_PCM_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_ACTCK_PCM_EN, ctrl) -#define SLPCK_PCM_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_SLPCK_PCM_EN, ctrl) -#define ACTCK_ADC_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_ACTCK_ADC_EN, ctrl) -#define SLPCK_ADC_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_SLPCK_ADC_EN, ctrl) -#define ACTCK_DAC_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_ACTCK_DAC_EN, ctrl) -#define SLPCK_DAC_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CLK_CTRL1, BIT_SOC_SLPCK_DAC_EN, ctrl) - -//240 PESOC_HCI_CLK_CTRL0 -#define ACTCK_SDIOD_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_HCI_CLK_CTRL0, BIT_SOC_ACTCK_SDIO_DEV_EN, ctrl) -#define SLPCK_SDIOD_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_HCI_CLK_CTRL0, BIT_SOC_SLPCK_SDIO_DEV_EN, ctrl) -#define ACTCK_SDIOH_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_HCI_CLK_CTRL0, BIT_SOC_ACTCK_SDIO_HST_EN, ctrl) -#define SLPCK_SDIOH_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_HCI_CLK_CTRL0, BIT_SOC_SLPCK_SDIO_HST_EN, ctrl) -#define ACTCK_OTG_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_HCI_CLK_CTRL0, BIT_SOC_ACTCK_OTG_EN, ctrl) -#define SLPCK_OTG_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_HCI_CLK_CTRL0, BIT_SOC_SLPCK_OTG_EN, ctrl) -#define ACTCK_MII_MPHY_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_HCI_CLK_CTRL0, BIT_SOC_ACTCK_MII_MPHY_EN, ctrl) -#define SLPCK_MII_MPHY_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_HCI_CLK_CTRL0, BIT_SOC_SLPCK_MII_MPHY_EN, ctrl) - -//244 PESOC_COM_CLK_CTRL1 -#define ACTCK_WL_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_COM_CLK_CTRL1, BIT_SOC_ACTCK_WL_EN, ctrl) -#define SLPCK_WL_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_COM_CLK_CTRL1, BIT_SOC_SLPCK_WL_EN, ctrl) -#define ACTCK_SEC_ENG_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_COM_CLK_CTRL1, BIT_SOC_ACTCK_SECURITY_ENG_EN, ctrl) -#define SLPCK_SEC_ENG_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_COM_CLK_CTRL1, BIT_SOC_SLPCK_SECURITY_ENG_EN, ctrl) -#define ACTCK_NFC_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_COM_CLK_CTRL1, BIT_SOC_ACTCK_NFC_EN, ctrl) -#define SLPCK_NFC_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_COM_CLK_CTRL1, BIT_SOC_SLPCK_NFC_EN, ctrl) -#define NFC_CAL_CCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_COM_CLK_CTRL1, BIT_SOC_NFC_CAL_EN, ctrl) - -//250 REG_PERI_CLK_SEL -#define TRACE_CLK_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PESOC_CLK_SEL, (BIT_MASK_PESOC_TRACE_CK_SEL << BIT_SHIFT_PESOC_TRACE_CK_SEL), BIT_PESOC_TRACE_CK_SEL(num)) -#define FLASH_CLK_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PESOC_CLK_SEL, (BIT_MASK_PESOC_FLASH_CK_SEL << BIT_SHIFT_PESOC_FLASH_CK_SEL), BIT_PESOC_FLASH_CK_SEL(num)) -#define SDR_CLK_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PESOC_CLK_SEL, (BIT_MASK_PESOC_SDR_CK_SEL << BIT_SHIFT_PESOC_SDR_CK_SEL), BIT_PESOC_SDR_CK_SEL(num)) -#define I2C_SCLK_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PESOC_CLK_SEL, (BIT_MASK_PESOC_PERI_SCLK_SEL << BIT_SHIFT_PESOC_PERI_SCLK_SEL), BIT_PESOC_PERI_SCLK_SEL(num)) - -//270 REG_OSC32K_CTRL -#define OSC32K_CKGEN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_OSC32K_CTRL, BIT_32K_POW_CKGEN_EN, ctrl) - -//280 REG_UART_MUX_CTRL -#define UART0_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_UART_MUX_CTRL, BIT_UART0_PIN_EN, ctrl) -#define UART0_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_UART_MUX_CTRL, (BIT_MASK_UART0_PIN_SEL << BIT_SHIFT_UART0_PIN_SEL), BIT_UART0_PIN_SEL(num)) -#define UART1_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_UART_MUX_CTRL, BIT_UART1_PIN_EN, ctrl) -#define UART1_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_UART_MUX_CTRL, (BIT_MASK_UART1_PIN_SEL << BIT_SHIFT_UART1_PIN_SEL), BIT_UART1_PIN_SEL(num)) -#define UART2_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_UART_MUX_CTRL, BIT_UART2_PIN_EN, ctrl) -#define UART2_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_UART_MUX_CTRL, (BIT_MASK_UART2_PIN_SEL << BIT_SHIFT_UART2_PIN_SEL), BIT_UART2_PIN_SEL(num)) - -//284 REG_SPI_MUX_CTRL -#define SPI0_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_SPI_MUX_CTRL, BIT_SPI0_PIN_EN, ctrl) -#define SPI0_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_SPI_MUX_CTRL, (BIT_MASK_SPI0_PIN_SEL << BIT_SHIFT_SPI0_PIN_SEL), BIT_SPI0_PIN_SEL(num)) -#define SPI1_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_SPI_MUX_CTRL, BIT_SPI1_PIN_EN, ctrl) -#define SPI1_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_SPI_MUX_CTRL, (BIT_MASK_SPI1_PIN_SEL << BIT_SHIFT_SPI1_PIN_SEL), BIT_SPI1_PIN_SEL(num)) -#define SPI2_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_SPI_MUX_CTRL, BIT_SPI2_PIN_EN, ctrl) -#define SPI2_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_SPI_MUX_CTRL, (BIT_MASK_SPI2_PIN_SEL << BIT_SHIFT_SPI2_PIN_SEL), BIT_SPI2_PIN_SEL(num)) -#define SPI0_MULTI_CS_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_SPI_MUX_CTRL, BIT_SPI0_MULTI_CS_EN, ctrl) - -//288 REG_I2C_MUX_CTRL -#define I2C0_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_I2C_MUX_CTRL, BIT_I2C0_PIN_EN, ctrl) -#define I2C0_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_I2C_MUX_CTRL, (BIT_MASK_I2C0_PIN_SEL << BIT_SHIFT_I2C0_PIN_SEL), BIT_I2C0_PIN_SEL(num)) -#define I2C1_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_I2C_MUX_CTRL, BIT_I2C1_PIN_EN, ctrl) -#define I2C1_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_I2C_MUX_CTRL, (BIT_MASK_I2C1_PIN_SEL << BIT_SHIFT_I2C1_PIN_SEL), BIT_I2C1_PIN_SEL(num)) -#define I2C2_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_I2C_MUX_CTRL, BIT_I2C2_PIN_EN, ctrl) -#define I2C2_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_I2C_MUX_CTRL, (BIT_MASK_I2C2_PIN_SEL << BIT_SHIFT_I2C2_PIN_SEL), BIT_I2C2_PIN_SEL(num)) -#define I2C3_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_I2C_MUX_CTRL, BIT_I2C3_PIN_EN, ctrl) -#define I2C3_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_I2C_MUX_CTRL, (BIT_MASK_I2C3_PIN_SEL << BIT_SHIFT_I2C3_PIN_SEL), BIT_I2C3_PIN_SEL(num)) - -//28C REG_I2S_MUX_CTRL -#define I2S0_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_I2S_MUX_CTRL, BIT_I2S0_PIN_EN, ctrl) -#define I2S0_MCK_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_I2S_MUX_CTRL, BIT_I2S0_MCK_EN, ctrl) -#define I2S0_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_I2S_MUX_CTRL, (BIT_MASK_I2S0_PIN_SEL << BIT_SHIFT_I2S0_PIN_SEL), BIT_I2S0_PIN_SEL(num)) -#define I2S1_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_I2S_MUX_CTRL, BIT_I2S1_PIN_EN, ctrl) -#define I2S1_MCK_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_I2S_MUX_CTRL, BIT_I2S1_MCK_EN, ctrl) -#define I2S1_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_I2S_MUX_CTRL, (BIT_MASK_I2S1_PIN_SEL << BIT_SHIFT_I2S1_PIN_SEL), BIT_I2S1_PIN_SEL(num)) -#define PCM0_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_I2S_MUX_CTRL, BIT_PCM0_PIN_EN, ctrl) -#define PCM0_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_I2S_MUX_CTRL, (BIT_MASK_PCM0_PIN_SEL << BIT_SHIFT_PCM0_PIN_SEL), BIT_PCM0_PIN_SEL(num)) -#define PCM1_PIN_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_I2S_MUX_CTRL, BIT_PCM1_PIN_EN, ctrl) -#define PCM1_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_I2S_MUX_CTRL, (BIT_MASK_PCM1_PIN_SEL << BIT_SHIFT_PCM1_PIN_SEL), BIT_PCM1_PIN_SEL(num)) - -//2A0 HCI_PINMUX_CTRL -#define SDIOD_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_HCI_PINMUX_CTRL, BIT_HCI_SDIOD_PIN_EN, ctrl) -#define SDIOH_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_HCI_PINMUX_CTRL, BIT_HCI_SDIOH_PIN_EN, ctrl) -#define MII_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_HCI_PINMUX_CTRL, BIT_HCI_MII_PIN_EN, ctrl) - -//2A4 WL_PINMUX_CTRL -#define LED_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_WL_PINMUX_CTRL, BIT_WL_LED_PIN_EN, ctrl) -#define LED_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_WL_PINMUX_CTRL, (BIT_MASK_WL_LED_PIN_SEL << BIT_SHIFT_WL_LED_PIN_SEL), BIT_WL_LED_PIN_SEL(num)) -#define ANT0_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_WL_PINMUX_CTRL, BIT_WL_ANT0_PIN_EN, ctrl) -#define ANT1_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_WL_PINMUX_CTRL, BIT_WL_ANT1_PIN_EN, ctrl) -#define BTCOEX_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_WL_PINMUX_CTRL, BIT_WL_BTCOEX_PIN_EN, ctrl) -#define BTCMD_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_WL_PINMUX_CTRL, BIT_WL_BTCMD_PIN_EN, ctrl) -#define NFC_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_WL_PINMUX_CTRL, BIT_NFC_PIN_EN, ctrl) - -//2AC PWM_PINMUX_CTRL -#define PWM0_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PWM_PINMUX_CTRL, BIT_PWM0_PIN_EN, ctrl) -#define PWM0_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PWM_PINMUX_CTRL, (BIT_MASK_PWM0_PIN_SEL << BIT_SHIFT_PWM0_PIN_SEL), BIT_PWM0_PIN_SEL(num)) -#define PWM1_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PWM_PINMUX_CTRL, BIT_PWM1_PIN_EN, ctrl) -#define PWM1_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PWM_PINMUX_CTRL, (BIT_MASK_PWM1_PIN_SEL << BIT_SHIFT_PWM1_PIN_SEL), BIT_PWM1_PIN_SEL(num)) -#define PWM2_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PWM_PINMUX_CTRL, BIT_PWM2_PIN_EN, ctrl) -#define PWM2_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PWM_PINMUX_CTRL, (BIT_MASK_PWM2_PIN_SEL << BIT_SHIFT_PWM2_PIN_SEL), BIT_PWM2_PIN_SEL(num)) -#define PWM3_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PWM_PINMUX_CTRL, BIT_PWM3_PIN_EN, ctrl) -#define PWM3_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PWM_PINMUX_CTRL, (BIT_MASK_PWM3_PIN_SEL << BIT_SHIFT_PWM3_PIN_SEL), BIT_PWM3_PIN_SEL(num)) -#define ETE0_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PWM_PINMUX_CTRL, BIT_ETE0_PIN_EN, ctrl) -#define ETE0_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PWM_PINMUX_CTRL, (BIT_MASK_ETE0_PIN_SEL << BIT_SHIFT_ETE0_PIN_SEL), BIT_ETE0_PIN_SEL(num)) -#define ETE1_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PWM_PINMUX_CTRL, BIT_ETE1_PIN_EN, ctrl) -#define ETE1_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PWM_PINMUX_CTRL, (BIT_MASK_ETE1_PIN_SEL << BIT_SHIFT_ETE1_PIN_SEL), BIT_ETE1_PIN_SEL(num)) -#define ETE2_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PWM_PINMUX_CTRL, BIT_ETE2_PIN_EN, ctrl) -#define ETE2_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PWM_PINMUX_CTRL, (BIT_MASK_ETE2_PIN_SEL << BIT_SHIFT_ETE2_PIN_SEL), BIT_ETE2_PIN_SEL(num)) -#define ETE3_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PWM_PINMUX_CTRL, BIT_ETE3_PIN_EN, ctrl) -#define ETE3_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PWM_PINMUX_CTRL, (BIT_MASK_ETE3_PIN_SEL << BIT_SHIFT_ETE3_PIN_SEL), BIT_ETE3_PIN_SEL(num)) - -//2C0 CPU_PERIPHERAL_CTRL -#define SPI_FLASH_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_CPU_PERIPHERAL_CTRL, BIT_SPI_FLSH_PIN_EN, ctrl) -#define SPI_FLASH_PIN_SEL(num) HAL_PERL_ON_PIN_SEL(REG_CPU_PERIPHERAL_CTRL, (BIT_MASK_SPI_FLSH_PIN_SEL << BIT_SHIFT_SPI_FLSH_PIN_SEL), BIT_SPI_FLSH_PIN_SEL(num)) -#define SDR_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_CPU_PERIPHERAL_CTRL, BIT_SDR_PIN_EN, ctrl) -#define TRACE_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_CPU_PERIPHERAL_CTRL, BIT_TRACE_PIN_EN, ctrl) -#define LOG_UART_PIN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_CPU_PERIPHERAL_CTRL, BIT_LOG_UART_PIN_EN, ctrl) -#define LOG_UART_IR_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_CPU_PERIPHERAL_CTRL, BIT_LOG_UART_IR_EN, ctrl) - -//300 REG_PESOC_MEM_CTRL -#define SDR_DDL_FCTRL(ctrl) HAL_PERL_ON_PIN_SEL(REG_PESOC_MEM_CTRL, (BIT_MASK_PESOC_SDR_DDL_CTRL << BIT_SHIFT_PESOC_SDR_DDL_CTRL), BIT_PESOC_SDR_DDL_CTRL(ctrl)) -#define FLASH_DDL_FCTRL(ctrl) HAL_PERL_ON_PIN_SEL(REG_PESOC_MEM_CTRL, (BIT_MASK_PESOC_FLASH_DDL_CTRL << BIT_SHIFT_PESOC_FLASH_DDL_CTRL), BIT_PESOC_FLASH_DDL_CTRL(ctrl)) - -//304 REG_PESOC_SOC_CTRL -#define SRAM_MUX_CFG(num) HAL_PERL_ON_PIN_SEL(REG_PESOC_SOC_CTRL, (BIT_MASK_PESOC_SRAM_MUX_CFG << BIT_SHIFT_PESOC_SRAM_MUX_CFG), BIT_PESOC_SRAM_MUX_CFG(num)) -#define LX_WL_SWAP_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_SOC_CTRL, BIT_PESOC_LX_WL_SWAP_SEL, ctrl) -#define LX_MST_SWAP_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_SOC_CTRL, BIT_PESOC_LX_MST_SWAP_SEL, ctrl) -#define LX_SLV_SWAP_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_SOC_CTRL, BIT_PESOC_LX_SLV_SWAP_SEL, ctrl) -#define MII_LX_WRAPPER_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_SOC_CTRL, BIT_PESOC_MII_LX_WRAPPER_EN, ctrl) -#define MII_LX_MST_SWAP_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_SOC_CTRL, BIT_PESOC_MII_LX_MST_SWAP_SEL, ctrl) -#define MII_LX_SLV_SWAP_CTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_SOC_CTRL, BIT_PESOC_MII_LX_SLV_SWAP_SEL, ctrl) -#define GDMA_CFG(num) HAL_PERL_ON_PIN_SEL(REG_PESOC_SOC_CTRL, (BIT_MASK_PESOC_GDMA_CFG << BIT_SHIFT_PESOC_GDMA_CFG), BIT_PESOC_GDMA_CFG(num)) - -//308 PESOC_PERI_CTRL -#define SPI_RN_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PESOC_PERI_CTRL, BIT_SOC_FUNC_SPI_RN, ctrl) - -//320 GPIO_SHTDN_CTRL -#define GPIO_GPA_SHTDN_N_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_GPIO_SHTDN_CTRL, BIT_GPIO_GPA_SHTDN_N, ctrl) -#define GPIO_GPB_SHTDN_N_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_GPIO_SHTDN_CTRL, BIT_GPIO_GPB_SHTDN_N, ctrl) -#define GPIO_GPC_SHTDN_N_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_GPIO_SHTDN_CTRL, BIT_GPIO_GPC_SHTDN_N, ctrl) -#define GPIO_GPD_SHTDN_N_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_GPIO_SHTDN_CTRL, BIT_GPIO_GPD_SHTDN_N, ctrl) -#define GPIO_GPE_SHTDN_N_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_GPIO_SHTDN_CTRL, BIT_GPIO_GPE_SHTDN_N, ctrl) -#define GPIO_GPF_SHTDN_N_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_GPIO_SHTDN_CTRL, BIT_GPIO_GPF_SHTDN_N, ctrl) -#define GPIO_GPG_SHTDN_N_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_GPIO_SHTDN_CTRL, BIT_GPIO_GPG_SHTDN_N, ctrl) -#define GPIO_GPH_SHTDN_N_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_GPIO_SHTDN_CTRL, BIT_GPIO_GPH_SHTDN_N, ctrl) -#define GPIO_GPI_SHTDN_N_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_GPIO_SHTDN_CTRL, BIT_GPIO_GPI_SHTDN_N, ctrl) -#define GPIO_GPJ_SHTDN_N_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_GPIO_SHTDN_CTRL, BIT_GPIO_GPJ_SHTDN_N, ctrl) -#define GPIO_GPK_SHTDN_N_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_GPIO_SHTDN_CTRL, BIT_GPIO_GPK_SHTDN_N, ctrl) - -//374 -#define EGTIM_FCTRL(ctrl) HAL_PERL_ON_FUNC_CTRL(REG_PERI_EGTIM_CTRL, BIT_PERI_EGTIM_EN, ctrl) -#define EGTIM_RSIG_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PERI_EGTIM_CTRL, (BIT_MASK_PERI_EGTIM_REF_SIG_SEL << BIT_SHIFT_PERI_EGTIM_REF_SIG_SEL), BIT_PERI_EGTIM_REF_SIG_SEL(num)) -#define EGTIME_PIN_G0_OPT_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PERI_EGTIM_CTRL, (BIT_MASK_PERI_EGTIM_PIN_GROUP0_OPT_SEL << BIT_SHIFT_PERI_EGTIM_PIN_GROUP0_OPT_SEL), BIT_PERI_EGTIM_PIN_GROUP0_OPT_SEL(num)) -#define EGTIME_PIN_G1_OPT_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PERI_EGTIM_CTRL, (BIT_MASK_PERI_EGTIM_PIN_GROUP1_OPT_SEL << BIT_SHIFT_PERI_EGTIM_PIN_GROUP1_OPT_SEL), BIT_PERI_EGTIM_PIN_GROUP1_OPT_SEL(num)) -#define EGTIME_PIN_G2_OPT_SEL(num) HAL_PERL_ON_PIN_SEL(REG_PERI_EGTIM_CTRL, (BIT_MASK_PERI_EGTIM_PIN_GROUP2_OPT_SEL << BIT_SHIFT_PERI_EGTIM_PIN_GROUP2_OPT_SEL), BIT_PERI_EGTIM_PIN_GROUP2_OPT_SEL(num)) - - -#endif //_HAL_PERI_ON_H_ - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pinmux.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pinmux.c deleted file mode 100644 index 5f26a7c..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pinmux.c +++ /dev/null @@ -1,140 +0,0 @@ -/* - * hal_pinmux.c - * - * Created on: 08/10/2016 - * Author: pvvx -*/ -#include "rtl8195a.h" - -//------------------------------------------------------------------------- -// Function declarations -/* -uint8_t GpioFunctionChk(IN uint32_t chip_pin, IN uint8_t Operation); -uint32_t GpioIcFunChk(IN uint32_t chip_pin, IN uint8_t Operation); -uint8_t FunctionChk(IN uint32_t Function, IN uint32_t PinLocation); -uint8_t RTL8710afFunChk(IN uint32_t Function, IN uint32_t PinLocation); -void HalJtagPinOff(); -*/ -// extern _LONG_CALL_ uint8_t HalPinCtrlRtl8195A(IN uint32_t Function, IN uint32_t PinLocation, IN BOOL Operation); -// extern HALEFUSEOneByteReadRAM(); -//------------------------------------------------------------------------- -// Data declarations -extern uint16_t GPIOState[]; -#define REG_EFUSE_0xF8 0xF8 // [0xF8] = 0xFC RTL8710AF - -#define RTL8710_DEF_PIN_ON 0 - -//----- HalJtagPinOff -void HalJtagPinOff(void) -{ - HalPinCtrlRtl8195A(JTAG, 0, 0); -} - - -#if RTL8710_DEF_PIN_ON - -//----- GpioIcFunChk -uint8_t GpioIcFunChk(IN uint32_t chip_pin, IN uint8_t Operation) -{ - uint8_t tst, result; - HALEFUSEOneByteReadRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), REG_EFUSE_0xF8, &tst, L25EOUTVOLTAGE); - - tst += 8; // tst = 0xfc+8 = 0x04 - if ( tst > 7 ) result = 0; - else { - tst = 1 << tst; // v6 = 0x10 - if (tst & 0xEF) result = 1; - else { - result = tst & 0x10; - if(result) { // RTL8710AF ? - if (chip_pin - 1 <= 2) result = 0; // PA_1, PA_2, PA_3 - else { - result = chip_pin - PC_5; // PC_5 - if (chip_pin != PC_5) - result = 1; - } - } - } - } - return result; -} - -#endif // RTL8710_DEF_PIN_ON - -//----- GpioFunctionChk -uint8_t GpioFunctionChk(IN uint32_t chip_pin, IN uint8_t Operation) -{ - uint8_t result; - uint16_t tst; - -#if RTL8710_DEF_PIN_ON - result = GpioIcFunChk(chip_pin, Operation); -#else - result = 1; -#endif - if(result) { - result = 1; - tst = 1 << (chip_pin & 0xF); - if (!Operation) { - tst = GPIOState[chip_pin >> 4] & (~tst); - GPIOState[chip_pin >> 4] = tst; - return result; - } - if (!(GPIOState[chip_pin >> 4] & tst)) { - tst |= GPIOState[chip_pin >> 4]; - GPIOState[chip_pin >> 4] = tst; - return result; - } - result = 0; - } - return result; -} - -#if RTL8710_DEF_PIN_ON -//----- RTL8710afFunChk -uint8_t RTL8710afFunChk(IN uint32_t Function, IN uint32_t PinLocation) -{ - uint8_t result; - if (Function == SPI0_MCS) // SPI0_MCS - return PinLocation - 1 + (PinLocation - 1 <= 0) - (PinLocation - 1); - if (Function > I2C0) { - if (Function == I2S1) goto LABEL_15; - if(Function > I2S1) { - if(Function == JTAG || Function == LOG_UART) return 1; - } - else if(Function == I2C3) goto LABEL_15; - return 0; - } - if(Function == UART2) goto LABEL_15; - if(Function == SPI0) - return PinLocation - 1 + (PinLocation - 1 <= 0) - (PinLocation - 1); - if (Function != UART0) return 0; -LABEL_15: - result = 1 - PinLocation; - if (PinLocation > 1) result = 0; - return result; -} -#endif // RTL8710_DEF_PIN_ON - -//----- FunctionChk -uint8_t FunctionChk( IN uint32_t Function, IN uint32_t PinLocation) -{ -#if RTL8710_DEF_PIN_ON - uint8_t result, tst; - HALEFUSEOneByteReadRAM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), REG_EFUSE_0xF8, &tst, L25EOUTVOLTAGE); - tst += 8; // tst = 0xfc+8 = 0x04 - if ( tst > 7 ) result = 0; - else { - tst = 1 << tst; // v6 = 0x10 - if (tst & 0xEF) result = 1; - else { - result = tst & 0x10; - if (tst & 0x10) - result = RTL8710afFunChk(Function, PinLocation); - } - } - return result; -#else - return 1; -#endif // RTL8710_DEF_PIN_ON -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pinmux.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pinmux.h deleted file mode 100644 index 8c937c0..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pinmux.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef _HAL_PINMUX_ -#define _HAL_PINMUX_ - - -//Function Index -#define UART0 0 -#define UART1 1 -#define UART2 2 -#define SPI0 8 -#define SPI1 9 -#define SPI2 10 -#define SPI0_MCS 15 -#define I2C0 16 -#define I2C1 17 -#define I2C2 18 -#define I2C3 19 -#define I2S0 24 -#define I2S1 25 -#define PCM0 28 -#define PCM1 29 -#define ADC0 32 -#define DAC0 36 -#define DAC1 37 -#define SDIOD 64 -#define SDIOH 65 -#define USBOTG 66 -#define MII 88 -#define WL_LED 96 -#define WL_ANT0 104 -#define WL_ANT1 105 -#define WL_BTCOEX 108 -#define WL_BTCMD 109 -#define NFC 112 -#define PWM0 160 -#define PWM1 161 -#define PWM2 162 -#define PWM3 163 -#define ETE0 164 -#define ETE1 165 -#define ETE2 166 -#define ETE3 167 -#define EGTIM 168 -#define SPI_FLASH 196 -#define SDR 200 -#define JTAG 216 -#define TRACE 217 -#define LOG_UART 220 -#define LOG_UART_IR 221 -#define SIC 224 -#define EEPROM 225 -#define DEBUG 226 - -//Location Index(Pin Mux Selection) -#define S0 0 -#define S1 1 -#define S2 2 -#define S3 3 - -_LONG_CALL_ uint8_t -HalPinCtrlRtl8195A( - IN uint32_t Function, - IN uint32_t PinLocation, - IN BOOL Operation); - -uint8_t GpioFunctionChk( - IN uint32_t chip_pin, - IN uint8_t Operation); - -uint8_t -FunctionChk( - IN uint32_t Function, - IN uint32_t PinLocation -); - -#endif //_HAL_PINMUX_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_platform.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_platform.h deleted file mode 100644 index 61b37a8..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_platform.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_PLATFORM_ -#define _HAL_PLATFORM_ - -#define ROMVERSION 0x03 -#define ROMINFORMATION (ROMVERSION) - -#define SYSTEM_CLK PLATFORM_CLOCK - -#define PERIPHERAL_IRQ_STATUS 0x04 -#define PERIPHERAL_IRQ_MODE 0x08 -#define PERIPHERAL_IRQ_EN 0x0C -#define LP_PERI_EXT_IRQ_STATUS 0x24 -#define LP_PERI_EXT_IRQ_MODE 0x28 -#define LP_PERI_EXT_IRQ_EN 0x2C - -#define PERIPHERAL_IRQ_ALL_LEVEL 0 - -#define TIMER_CLK 32*1000 - -#define SDR_SDRAM_BASE 0x30000000 -#define SYSTEM_CTRL_BASE 0x40000000 -#define PERI_ON_BASE 0x40000000 -#define SPI_FLASH_BASE 0x98000000 - -//3 Peripheral IP Base Address - -#define GPIO_REG_BASE 0x40001000 -#define TIMER_REG_BASE 0x40002000 -#define VENDOR_REG_BASE 0x40002800 -#define NFC_INTERFACE_BASE 0x40002400 -#define LOG_UART_REG_BASE 0x40003000 -#define I2C2_REG_BASE 0x40003400 -#define I2C3_REG_BASE 0x40003800 -#define SDR_CTRL_BASE 0x40005000 -#define SPI_FLASH_CTRL_BASE 0x40006000 -#define ADC_REG_BASE 0x40010000 -#define DAC_REG_BASE 0x40011000 -#define UART0_REG_BASE 0x40040000 -#define UART1_REG_BASE 0x40040400 -#define UART2_REG_BASE 0x40040800 -#define SPI0_REG_BASE 0x40042000 -#define SPI1_REG_BASE 0x40042400 -#define SPI2_REG_BASE 0x40042800 -#define I2C0_REG_BASE 0x40044000 -#define I2C1_REG_BASE 0x40044400 -#define SDIO_DEVICE_REG_BASE 0x40050000 -#define MII_REG_BASE 0x40050000 -#define SDIO_HOST_REG_BASE 0x40058000 -#define GDMA0_REG_BASE 0x40060000 -#define GDMA1_REG_BASE 0x40061000 -#define I2S0_REG_BASE 0x40062000 -#define I2S1_REG_BASE 0x40063000 -#define PCM0_REG_BASE 0x40064000 -#define PCM1_REG_BASE 0x40065000 -#define CRYPTO_REG_BASE 0x40070000 -#define WIFI_REG_BASE 0x40080000 -#define USB_OTG_REG_BASE 0x400C0000 - -#define GDMA1_REG_OFF 0x1000 -#define I2S1_REG_OFF 0x1000 -#define PCM1_REG_OFF 0x1000 -#define SSI_REG_OFF 0x400 -#define RUART_REG_OFF 0x400 - -#define CPU_CLK_TYPE_NO 6 - -enum _BOOT_TYPE_ { - BOOT_FROM_FLASH = 0, - BOOT_FROM_SDIO = 1, - BOOT_FROM_USB = 2, - BOOT_FROM_RSVD = 3, -}; - -enum _EFUSE_CPU_CLK_ { - #if 1 - CLK_200M = 0, - CLK_100M = 1, - CLK_50M = 2, - CLK_25M = 3, - CLK_12_5M = 4, - CLK_4M = 5, - #else - CLK_25M = 0, - CLK_200M = 1, - CLK_100M = 2, - CLK_50M = 3, - CLK_12_5M = 4, - CLK_4M = 5, - #endif -}; - - -#endif //_HAL_PLATFORM_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pwm.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pwm.c deleted file mode 100644 index 6c2e205..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pwm.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * -------------------------- - * bug fixing: pvvx - */ - - -#include "rtl8195a.h" - -#ifdef CONFIG_PWM_EN -#include "hal_pwm.h" -#include "hal_timer.h" - -const uint8_t PWMTimerIdx[MAX_PWM_CTRL_PIN]= {3,4,5,2}; // the G-timer ID used for PWM pin 0~3 - -/** - * @brief Initializes and enable a PWM control pin. - * - * @param pwm_id: the PWM pin index - * @param sel: pin mux selection - * - * @retval HAL_Status - */ -HAL_Status -HAL_Pwm_Init( - HAL_PWM_ADAPTER *pPwmAdapt, - uint32_t pwm_id, - uint32_t sel -) -{ - uint32_t timer_id; - - if (NULL == pPwmAdapt) { - DBG_PWM_ERR ("HAL_Pwm_Init: NULL adapter\n"); - return HAL_ERR_PARA; - } - - if ((pwm_id >= MAX_PWM_CTRL_PIN) || (sel > 3)) { - DBG_PWM_ERR ("HAL_Pwm_Init: Invalid PWM index(%d), sel(%d)\n", pwm_id, sel); - return HAL_ERR_PARA; - } - - pPwmAdapt->pwm_id = pwm_id; - pPwmAdapt->sel = sel; - timer_id = PWMTimerIdx[pwm_id]; - pPwmAdapt->gtimer_id = timer_id; -/* - if (_FALSE == FunctionChk((pPwmAdapt->pwm_id + PWM0), pPwmAdapt->sel)) { - DBG_PWM_WARN("HAL_Pwm_Init: Warning for RTL8710AF\n"); - // return HAL_ERR_HW; - } -*/ -#ifndef CONFIG_CHIP_E_CUT - return HAL_Pwm_Init_8195a(pPwmAdapt); -#else - return HAL_Pwm_Init_8195a_V04(pPwmAdapt); -#endif -} - - -/** - * @brief Disable a PWM control pin. - * - * @param pwm_id: the PWM pin index - * - * @retval None - */ -void -HAL_Pwm_Enable( - HAL_PWM_ADAPTER *pPwmAdapt -) -{ - if (NULL == pPwmAdapt) { - DBG_PWM_ERR ("HAL_Pwm_Enable: NULL adapter\n"); - return; - } - -#ifndef CONFIG_CHIP_E_CUT - HAL_Pwm_Enable_8195a(pPwmAdapt); -#else - HAL_Pwm_Enable_8195a_V04(pPwmAdapt); -#endif -} - - -/** - * @brief Disable a PWM control pin. - * - * @param pwm_id: the PWM pin index - * - * @retval None - */ -void -HAL_Pwm_Disable( - HAL_PWM_ADAPTER *pPwmAdapt -) -{ - if (NULL == pPwmAdapt) { - DBG_PWM_ERR ("HAL_Pwm_Disable: NULL adapter\n"); - return; - } - -#ifndef CONFIG_CHIP_E_CUT - HAL_Pwm_Disable_8195a(pPwmAdapt); -#else - HAL_Pwm_Disable_8195a_V04(pPwmAdapt); -#endif -} - -/** - * @brief Set the duty ratio of the PWM pin. - * - * @param pwm_id: the PWM pin index - * @param period: the period time, in micro-second. - * @param pulse_width: the pulse width time, in micro-second. - * - * @retval None - */ -void -HAL_Pwm_SetDuty( - HAL_PWM_ADAPTER *pPwmAdapt, - uint32_t period, - uint32_t pulse_width -) -{ - if (NULL == pPwmAdapt) { - DBG_PWM_ERR ("HAL_Pwm_SetDuty: NULL adapter\n"); - return; - } - -#ifndef CONFIG_CHIP_E_CUT - HAL_Pwm_SetDuty_8195a(pPwmAdapt, period, pulse_width); -#else - HAL_Pwm_SetDuty_8195a_V04(pPwmAdapt, period, pulse_width); -#endif -} - - -#endif // end of "#ifdef CONFIG_PWM_EN" diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pwm.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pwm.h deleted file mode 100644 index 6aa51fe..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_pwm.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_PWM_H_ -#define _HAL_PWM_H_ - -#include "basic_types.h" - -#define MAX_PWM_CTRL_PIN 4 -// the minimum tick time for G-timer is 61 us (clock source = 32768Hz, reload value=1 and reload takes extra 1T) -//#define GTIMER_TICK_US 31 // micro-second, 1000000/32768 ~= 30.5 -#define MIN_GTIMER_TIMEOUT 61 // in micro-sec, use this value to set the g-timer to generate tick for PWM. 61=(1000000/32768)*2 -#define PWM_GTIMER_TICK_TIME 61 // in micro-sec, use this value to set the g-timer to generate tick for PWM. 61=(1000000/32768)*2 - -typedef struct _HAL_PWM_ADAPTER_ { - uint8_t pwm_id; // the PWM ID, 0~3 - uint8_t sel; // PWM Pin selection, 0~3 - uint8_t gtimer_id; // using G-Timer ID, there are 7 G-timer, but we prefer to use timer 3~6 - uint8_t enable; // is enabled -// uint32_t timer_value; // the G-Timer auto-reload value, source clock is 32768Hz, reload will takes extra 1 tick. To set the time of a tick of PWM - uint32_t tick_time; // the tick time for the G-timer - uint32_t period; // the period of a PWM control cycle, in PWM tick - uint32_t pulsewidth; // the pulse width in a period of a PWM control cycle, in PWM tick. To control the ratio -// float duty_ratio; // the dyty ratio = pulswidth/period -}HAL_PWM_ADAPTER, *PHAL_PWM_ADAPTER; - - -extern HAL_Status -HAL_Pwm_Init( - HAL_PWM_ADAPTER *pPwmAdapt, - uint32_t pwm_id, - uint32_t sel -); - -extern void -HAL_Pwm_Enable( - HAL_PWM_ADAPTER *pPwmAdapt -); - -extern void -HAL_Pwm_Disable( - HAL_PWM_ADAPTER *pPwmAdapt -); - -extern void -HAL_Pwm_SetDuty( - HAL_PWM_ADAPTER *pPwmAdapt, - uint32_t period, - uint32_t pulse_width -); - - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdio.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdio.h deleted file mode 100644 index 333e5e7..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdio.h +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_SDIO_H_ -#define _HAL_SDIO_H_ - -#include "rtl8195a_sdio.h" - -#if SDIO_API_DEFINED -#include "spdio_api.h" -#endif - -#if !SDIO_BOOT_DRIVER -#include "mailbox.h" -#endif -#define PURE_SDIO_INIC 0 // is a pure SDIO iNIC device or a SDIO iNIC + peripheral device - -#if SDIO_BOOT_DRIVER -typedef struct _HAL_SDIO_ADAPTER_ { - uint8_t *pTXBDAddr; /* The TX_BD start address */ - PSDIO_TX_BD pTXBDAddrAligned; /* The TX_BD start address, it must be 4-bytes aligned */ - PSDIO_TX_BD_HANDLE pTXBDHdl; /* point to the allocated memory for TX_BD Handle array */ - uint16_t TXBDWPtr; /* The SDIO TX(Host->Device) BD local write index, different with HW maintained write Index. */ - uint16_t TXBDRPtr; /* The SDIO TX(Host->Device) BD read index */ - uint16_t TXBDRPtrReg; /* The SDIO TX(Host->Device) BD read index has been write to HW register */ - uint16_t reserve1; - - uint8_t *pRXBDAddr; /* The RX_BD start address */ - PSDIO_RX_BD pRXBDAddrAligned; /* The RX_BD start address, it must be 8-bytes aligned */ - PSDIO_RX_BD_HANDLE pRXBDHdl; /* point to the allocated memory for RX_BD Handle array */ - uint16_t RXBDWPtr; /* The SDIO RX(Device->Host) BD write index */ - uint16_t RXBDRPtr; /* The SDIO RX(Device->Host) BD local read index, different with HW maintained Read Index. */ - uint16_t IntMask; /* The Interrupt Mask */ - uint16_t IntStatus; /* The Interrupt Status */ - uint32_t Events; /* The Event to the SDIO Task */ - - uint32_t EventSema; /* Semaphore for SDIO events, use to wakeup the SDIO task */ - uint8_t CCPWM; /* the value write to register CCPWM, which will sync to Host HCPWM */ - uint8_t reserve2; - uint16_t CCPWM2; /* the value write to register CCPWM2, which will sync to Host HCPWM2 */ - - int8_t (*Tx_Callback)(void *pAdapter, uint8_t *pPkt, uint16_t Offset, uint16_t PktSize); /* to hook the WLan driver TX callback function to handle a Packet TX */ - void *pTxCb_Adapter; /* a pointer will be used to call the TX Callback function, - which is from the TX CallBack function register */ - int8_t (*pTxCallback_Backup)(void *pAdapter, uint8_t *pPkt, uint16_t Offset, uint16_t PktSize); // Use to back up the registered TX Callback function, for MP/Normal mode switch - void *pTxCb_Adapter_Backup; // Backup the pTxCb_Adapter, for MP/Normal mode switch - _LIST FreeTxPktList; /* The list to queue free Tx packets handler */ - _LIST RxPktList; /* The list to queue RX packets */ - _LIST FreeRxPktList; /* The list to queue free Rx packets handler */ - SDIO_TX_PACKET *pTxPktHandler; /* to store allocated TX Packet handler memory address */ - SDIO_RX_PACKET *pRxPktHandler; /* to store allocated RX Packet handler memory address */ - uint32_t RxInQCnt; /* The packet count for Rx In Queue */ - uint32_t MemAllocCnt; // Memory allocated count, for debug only - uint32_t MAllocFailedCnt; // MemAlloc Failed count, for debugging - -// void *pHalOp; /* point to HAL operation function table */ -} HAL_SDIO_ADAPTER, *PHAL_SDIO_ADAPTER; - -extern BOOL SDIO_Device_Init_Rom( - IN PHAL_SDIO_ADAPTER pSDIODev -); -extern void SDIO_Device_DeInit_Rom( - IN PHAL_SDIO_ADAPTER pSDIODev -); -extern void SDIO_Send_C2H_IOMsg_Rom( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t *C2HMsg -); -extern uint8_t SDIO_Send_C2H_PktMsg_Rom( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint8_t *C2HMsg, - IN uint16_t MsgLen -); -extern void SDIO_Register_Tx_Callback_Rom( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN int8_t (*Tx_Callback)(void *pAdapter, uint8_t *pPkt, uint16_t Offset, uint16_t PktSize), - IN void *pAdapter -); -extern int8_t SDIO_Rx_Callback_Rom( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN void *pData, - IN uint16_t Offset, - IN uint16_t Length, - IN uint8_t CmdType -); - -#else // else of "#if SDIO_BOOT_DRIVER" -typedef struct _HAL_SDIO_ADAPTER_ { -// uint8_t *pTxBuff; /* point to the SDIO TX Buffer */ -// uint8_t *pTxBuffAligned; /* point to the SDIO TX Buffer with 4-bytes aligned */ -// uint32_t TXFifoRPtr; /* The SDIO TX(Host->Device) FIFO buffer read pointer */ -#if SDIO_API_DEFINED - void *spdio_priv; /*Data from User*/ -#endif - uint8_t *pTXBDAddr; /* The TX_BD start address */ - PSDIO_TX_BD pTXBDAddrAligned; /* The TX_BD start address, it must be 4-bytes aligned */ - PSDIO_TX_BD_HANDLE pTXBDHdl; /* point to the allocated memory for TX_BD Handle array */ - uint16_t TXBDWPtr; /* The SDIO TX(Host->Device) BD local write index, different with HW maintained write Index. */ - uint16_t TXBDRPtr; /* The SDIO TX(Host->Device) BD read index */ - uint16_t TXBDRPtrReg; /* The SDIO TX(Host->Device) BD read index has been write to HW register */ - - uint8_t *pRXBDAddr; /* The RX_BD start address */ - PSDIO_RX_BD pRXBDAddrAligned; /* The RX_BD start address, it must be 8-bytes aligned */ - PSDIO_RX_BD_HANDLE pRXBDHdl; /* point to the allocated memory for RX_BD Handle array */ - uint16_t RXBDWPtr; /* The SDIO RX(Device->Host) BD write index */ - uint16_t RXBDRPtr; /* The SDIO RX(Device->Host) BD local read index, different with HW maintained Read Index. */ - uint16_t IntMask; /* The Interrupt Mask */ - uint16_t IntStatus; /* The Interrupt Status */ - uint32_t Events; /* The Event to the SDIO Task */ - - uint8_t CCPWM; /* the value write to register CCPWM, which will sync to Host HCPWM */ - uint8_t reserve1; - uint16_t CCPWM2; /* the value write to register CCPWM2, which will sync to Host HCPWM2 */ - uint8_t CRPWM; /* sync from Host HRPWM */ - uint8_t reserve2; - uint16_t CRPWM2; /* sync from Host HRPWM2 */ - -#if !TASK_SCHEDULER_DISABLED - _Sema TxSema; /* Semaphore for SDIO TX, use to wakeup the SDIO TX task */ - _Sema RxSema; /* Semaphore for SDIO RX, use to wakeup the SDIO RX task */ -#else - uint32_t EventSema; /* Semaphore for SDIO events, use to wakeup the SDIO task */ -#endif - int8_t (*Tx_Callback)(void *pAdapter, uint8_t *pPkt, uint16_t Offset, uint16_t PktSize, uint8_t type); /* to hook the WLan driver TX callback function to handle a Packet TX */ - void *pTxCb_Adapter; /* a pointer will be used to call the TX Callback function, - which is from the TX CallBack function register */ -#if SDIO_API_DEFINED - int8_t (*Rx_Done_Callback)(void *pAdapter, uint8_t *pPkt, uint16_t Offset, uint16_t PktSize, uint8_t type); /* to hook RX done callback function to release packet */ - void *pRxDoneCb_Adapter; /* a pointer will be used to call the RX Done Callback function, - which is from the TX CallBack function register */ -#endif - int8_t (*pTxCallback_Backup)(void *pAdapter, uint8_t *pPkt, uint16_t Offset, uint16_t PktSize, uint8_t type); // Use to back up the registered TX Callback function, for MP/Normal mode switch - void *pTxCb_Adapter_Backup; // Backup the pTxCb_Adapter, for MP/Normal mode switch -#if SDIO_DEBUG - _LIST FreeTxPktList; /* The list to queue free Tx packets handler */ - SDIO_TX_PACKET *pTxPktHandler; /* to store allocated TX Packet handler memory address */ -#endif - _LIST RxPktList; /* The list to queue RX packets */ - _LIST FreeRxPktList; /* The list to queue free Rx packets handler */ -// _LIST RecyclePktList; /* The list to queue packets handler to be recycled */ - SDIO_RX_PACKET *pRxPktHandler; /* to store allocated RX Packet handler memory address */ - _Mutex RxMutex; /* The Mutex to protect RxPktList */ - uint32_t RxInQCnt; /* The packet count for Rx In Queue */ -#if SDIO_DEBUG - _Mutex StatisticMutex; /* The Mutex to protect Statistic data */ - uint32_t MemAllocCnt; // Memory allocated count, for debug only - uint32_t MAllocFailedCnt; // MemAlloc Failed count, for debugging -#endif - void *pHalOp; /* point to HAL operation function table */ - RTL_MAILBOX *pMBox; /* the Mail box for other driver module can send message to SDIO driver */ - -#ifdef PLATFORM_FREERTOS - xTaskHandle xSDIOTxTaskHandle; /* The handle of the SDIO Task for TX, can be used to delte the task */ - xTaskHandle xSDIORxTaskHandle; /* The handle of the SDIO Task speical for RX, can be used to delte the task */ -#endif - uint8_t RxFifoBusy; /* is the RX BD fetch hardware busy */ - -#if SDIO_MP_MODE -#if !TASK_SCHEDULER_DISABLED - uint32_t MP_Events; /* The Event to the SDIO Task */ - _Sema MP_EventSema; /* Semaphore for SDIO events, use to wakeup the SDIO task */ - RTL_MAILBOX *pMP_MBox; /* the Mail box for communication with other driver module */ -#ifdef PLATFORM_FREERTOS - xTaskHandle MP_TaskHandle; /* The handle of the MP loopback Task, can be used to delte the task */ -#endif // end of "#ifdef PLATFORM_FREERTOS" -#endif // end of "#if !TASK_SCHEDULER_DISABLED" - // for MP mode - RTL_TIMER *pPeriodTimer; /* a timer to calculate throughput periodically */ - uint8_t MP_ModeEn; /* is in MP mode */ - uint8_t MP_LoopBackEn; /* is loop-back enabled */ - uint8_t MP_ContinueTx; /* is continue TX test enabled */ - uint8_t MP_ContinueRx; /* is continue RX test enabled */ - uint8_t MP_ContinueRxMode; /* continue RX test mode: static RX Buf, Dyna-Allocate RX Buf, Pre-Allocate RX Buf */ - uint8_t MP_CRxInfinite; /* is non-stop SDIO RX, no packet count limit */ - uint16_t MP_CRxSize; /* SDIO RX test packet size */ - uint8_t *pMP_CRxBuf; // the buffer for continye RX test - uint32_t MP_CRxPktCnt; /* SDIO RX test packet count */ - uint32_t MP_CRxPktPendingCnt; /* SDIO RX test packet pening count */ - uint32_t MP_TxPktCnt; /* SDIO TX packet count */ - uint32_t MP_RxPktCnt; /* SDIO RX packet count */ - uint32_t MP_TxByteCnt; /* SDIO TX Byte count */ - uint32_t MP_RxByteCnt; /* SDIO RX Byte count */ - uint32_t MP_TxDropCnt; /* SDIO TX Drop packet count */ - uint32_t MP_RxDropCnt; /* SDIO RX Drop packet count */ - - uint32_t MP_TxPktCntInPeriod; /* SDIO TX packet count in a period */ - uint32_t MP_RxPktCntInPeriod; /* SDIO RX packet count in a period */ - uint32_t MP_TxByteCntInPeriod; /* SDIO TX Byte count in a period */ - uint32_t MP_RxByteCntInPeriod; /* SDIO RX Byte count in a period */ - - uint32_t MP_TxAvgTPWin[SDIO_AVG_TP_WIN_SIZE]; /* a window of SDIO TX byte count history, for average throughput calculation */ - uint32_t MP_RxAvgTPWin[SDIO_AVG_TP_WIN_SIZE]; /* a window of SDIO RX byte count history, for average throughput calculation */ - uint32_t MP_TxAvgTPWinSum; /* The sum of all byte-count in the window */ - uint32_t MP_RxAvgTPWinSum; /* The sum of all byte-count in the window */ - uint8_t OldestTxAvgWinIdx; /* the index of the oldest TX byte count log */ - uint8_t TxAvgWinCnt; /* the number of log in the Window */ - uint8_t OldestRxAvgWinIdx; /* the index of the oldest RX byte count log */ - uint8_t RxAvgWinCnt; /* the number of log in the Window */ - - _LIST MP_RxPktList; /* The list to queue RX packets, for MP loopback test */ -#endif // end of '#if SDIO_MP_MODE' -} HAL_SDIO_ADAPTER, *PHAL_SDIO_ADAPTER; -#endif // end of "#else of "#if SDIO_BOOT_DRIVER"" - - -typedef struct _HAL_SDIO_OP_ { - BOOL (*HalSdioDevInit)(PHAL_SDIO_ADAPTER pSDIODev); - void (*HalSdioDevDeInit)(PHAL_SDIO_ADAPTER pSDIODev); - void (*HalSdioSendC2HIOMsg)(PHAL_SDIO_ADAPTER pSDIODev, uint32_t *C2HMsg); - uint8_t (*HalSdioSendC2HPktMsg)(PHAL_SDIO_ADAPTER pSDIODev, uint8_t *C2HMsg, uint16_t MsgLen); - void (*HalSdioRegTxCallback)(PHAL_SDIO_ADAPTER pSDIODev,int8_t (*CallbackFun)(void *pAdapter, uint8_t *pPkt, uint16_t Offset, uint16_t PktSize, uint8_t Type), void *pAdapter); - int8_t (*HalSdioRxCallback)(PHAL_SDIO_ADAPTER pSDIODev, void *pData, uint16_t Offset, uint16_t PktSize, uint8_t CmdType); -#if SDIO_API_DEFINED - void (*HalSdioRegRxDoneCallback)(PHAL_SDIO_ADAPTER pSDIODev,int8_t (*CallbackFun)(void *pAdapter, uint8_t *pPkt, uint16_t Offset, uint16_t PktSize, uint8_t Type), void *pAdapter); -#endif -#if SDIO_MP_MODE - void (*HalSdioDevMPApp)(PHAL_SDIO_ADAPTER pSDIODev, uint16_t argc, uint8_t *argv[]); -#endif -}HAL_SDIO_OP, *PHAL_SDIO_OP; - - -extern BOOL SDIO_Device_Init( - IN PHAL_SDIO_ADAPTER pSDIODev -); -extern void SDIO_Device_DeInit( - IN PHAL_SDIO_ADAPTER pSDIODev -); -extern void SDIO_Send_C2H_IOMsg( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t *C2HMsg -); -extern uint8_t SDIO_Send_C2H_PktMsg( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint8_t *C2HMsg, - IN uint16_t MsgLen -); -extern void SDIO_Register_Tx_Callback( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN int8_t (*Tx_Callback)(void *pAdapter, uint8_t *pPkt, uint16_t Offset, uint16_t PktSize, uint8_t Type), - IN void *pAdapter -); -#if SDIO_API_DEFINED -extern void SDIO_Register_Rx_Done_Callback( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN int8_t (*Rx_Done_Callback)(void *pAdapter, uint8_t *pPkt, uint16_t Offset, uint16_t PktSize, uint8_t Type), - IN void *pAdapter -); -#endif -extern int8_t SDIO_Rx_Callback( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN void *pData, - IN uint16_t Offset, - IN uint16_t Length, - IN uint8_t CmdType -); -#if SDIO_MP_MODE -extern void SDIO_DeviceMPApp( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint16_t argc, - IN uint8_t *argv[] -); -#endif - -extern PHAL_SDIO_ADAPTER pgSDIODev; -extern void HalSdioInit(void); -extern void HalSdioDeInit(void); -#endif // #ifndef _HAL_SDIO_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdio_host.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdio_host.c deleted file mode 100644 index 6b697b1..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdio_host.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * hal_sdio_host.c (disasm hal_sdio_host.o) - * - * RTL8710/11 pvvx 12/2016 - */ -#include "rtl8195a.h" -#ifdef CONFIG_SDIO_HOST_EN -#include "sd.h" -#include "sdio_host.h" -#include "hal_sdio_host.h" -#include "rtl8195a_sdio_host.h" -#include "hal_pinmux.h" -//#ifdef RTL8710AF - #include "hal_gpio.h" - #include "PinNames.h" - #include "hal_gpio.h" -//#endif -//------------------------------------------------------------------------- -// Function declarations - -//------------------------------------------------------------------------- -// Data declarations - -//----- HalSdioHostInit(PHAL_SDIO_HOST_ADAPTER) -HAL_Status HalSdioHostInit(IN void *Data) { - PHAL_SDIO_HOST_ADAPTER pSdioHostAdapter = (PHAL_SDIO_HOST_ADAPTER) Data; - HAL_Status result; - if (FunctionChk(SDIOH, 0) != 0) { - if (pSdioHostAdapter != NULL) { - if (HalSdioHostInitHostRtl8195a(pSdioHostAdapter) != HAL_OK) { - result = HAL_ERR_HW; - } else { - result = HalSdioHostInitCardRtl8195a(pSdioHostAdapter); - if (result == HAL_OK) { - REG_POWER_STATE RegPwrState; - RegPwrState.FuncIdx = SDIOH; - RegPwrState.PwrState = ACT; - RegPowerState(RegPwrState); - } - } - } else - result = HAL_ERR_PARA; - } else - result = HAL_ERR_UNKNOWN; - return result; -} - -//----- HalSdioHostEnable(PHAL_SDIO_HOST_ADAPTER) -HAL_Status HalSdioHostEnable(void *Data) { -// PHAL_SDIO_HOST_ADAPTER pSdioHostAdapter = (PHAL_SDIO_HOST_ADAPTER) Data; - HAL_Status result = HalSdioHostEnableRtl8195a(Data); - REG_POWER_STATE RegPwrState; - RegPwrState.FuncIdx = SDIOH; - RegPwrState.PwrState = ACT; - if (result == HAL_OK) - RegPowerState(RegPwrState); - return result; -} - -//----- HalSdioHostDeInit(PHAL_SDIO_HOST_ADAPTER) -HAL_Status HalSdioHostDeInit(IN void *Data) { - PHAL_SDIO_HOST_ADAPTER pSdioHostAdapter = (PHAL_SDIO_HOST_ADAPTER) Data; - REG_POWER_STATE SdioHostPwrState; - uint8_t HwState; - HAL_Status result; - SdioHostPwrState.FuncIdx = SDIOH; - SdioHostPwrState.PwrState = ACT; - - QueryRegPwrState(SdioHostPwrState.FuncIdx, &SdioHostPwrState.PwrState, - &HwState); - if (SdioHostPwrState.PwrState & 0xF7) { - HalSdioHostEnable(pSdioHostAdapter); - QueryRegPwrState(SdioHostPwrState.FuncIdx, &SdioHostPwrState.PwrState, - &HwState); - } - if (SdioHostPwrState.PwrState == ACT) { - SdioHostPwrState.PwrState = INACT; - RegPowerState(SdioHostPwrState); - } - if (pSdioHostAdapter != NULL) - result = HalSdioHostDeInitRtl8195a(pSdioHostAdapter); - else - result = HAL_ERR_PARA; - return result; -} - -//----- HalSdioHostDisable(PHAL_SDIO_HOST_ADAPTER) -HAL_Status HalSdioHostDisable(IN void *Data) { - HAL_Status result = HalSdioHostDisableRtl8195a(Data); - if (result == HAL_OK) { - REG_POWER_STATE RegPwrState; - RegPwrState.FuncIdx = SDIOH; - RegPwrState.PwrState = SLPCG; - RegPowerState(RegPwrState); // 0x0441 - } - return result; -} - -//----- HalSdioHostOpInit(PHAL_SDIO_HOST_ADAPTER) -void HalSdioHostOpInit(void *Data) { - PHAL_SDIO_HOST_OP phsha = (PHAL_SDIO_HOST_OP)Data; - phsha->HalSdioHostInitHost = &HalSdioHostInitHostRtl8195a; - phsha->HalSdioHostInitCard = &HalSdioHostInitCardRtl8195a; - phsha->HalSdioHostDeInit = &HalSdioHostDeInitRtl8195a; - phsha->HalSdioHostRegIrq = &HalSdioHostIrqInitRtl8195a; - phsha->HalSdioHostReadBlocksDma = &HalSdioHostReadBlocksDmaRtl8195a; - phsha->HalSdioHostWriteBlocksDma = &HalSdioHostWriteBlocksDmaRtl8195a; - phsha->HalSdioHostStopTransfer = &HalSdioHostStopTransferRtl8195a; - phsha->HalSdioHostGetCardStatus = &HalSdioHostGetCardStatusRtl8195a; - phsha->HalSdioHostGetSdStatus = &HalSdioHostGetSdStatusRtl8195a; - phsha->HalSdioHostChangeSdClock = &HalSdioHostChangeSdClockRtl8195a; - phsha->HalSdioHostErase = &HalSdioHostEraseRtl8195a; - phsha->HalSdioHostGetWriteProtect = &HalSdioHostGetWriteProtectRtl8195a; - phsha->HalSdioHostSetWriteProtect = &HalSdioHostSetWriteProtectRtl8195a; - -#if 0 //#ifdef RTL8710AF - if(HalGetChipId() != CHIP_ID_8195AM) { - GPIOState[0] &= ~((1 << 8) - 1); - { - for (int i = 0; i <= 6; i++) - HAL_GPIO_PullCtrl(i, PullNone); - HAL_GPIO_PullCtrl(PA_6, PullDown); - HAL_GPIO_PullCtrl(PA_7, PullDown); - } -// vTaskDelay(1); - } -#endif -} - -#endif // CONFIG_SDIO_HOST_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdio_host.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdio_host.h deleted file mode 100644 index 0171840..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdio_host.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_SDIO_HOST_H_ -#define _HAL_SDIO_HOST_H_ - - -#include "rtl8195a_sdio_host.h" - - -#define SDIO_HOST_WAIT_FOREVER 0xFFFFFFFF - - -typedef struct _HAL_SDIO_HOST_OP_ { - HAL_Status (*HalSdioHostInitHost) (void *Data); - HAL_Status (*HalSdioHostInitCard) (void *Data); - HAL_Status (*HalSdioHostDeInit) (void *Data); - HAL_Status (*HalSdioHostRegIrq) (void *Data); - HAL_Status (*HalSdioHostReadBlocksDma) (void *Data, uint64_t ReadAddr, uint32_t BlockCnt); - HAL_Status (*HalSdioHostWriteBlocksDma) (void *Data, uint64_t WriteAddr, uint32_t BlockCnt); - HAL_Status (*HalSdioHostStopTransfer) (void *Data); - HAL_Status (*HalSdioHostGetCardStatus) (void *Data); - HAL_Status (*HalSdioHostGetSdStatus) (void *Data); - HAL_Status (*HalSdioHostChangeSdClock) (void *Data, uint8_t Frequency); - HAL_Status (*HalSdioHostErase) (void *Data, uint64_t StartAddr, uint64_t EndAddr); - HAL_Status (*HalSdioHostGetWriteProtect) (void *Data); - HAL_Status (*HalSdioHostSetWriteProtect) (void *Data, uint8_t Setting); -}HAL_SDIO_HOST_OP, *PHAL_SDIO_HOST_OP; - -// SDIO error type -typedef enum _SDIO_ERR_TYPE_ { - SDIO_ERR_DAT_CRC = 0x01, - SDIO_ERR_CMD_TIMEOUT = 0x02, -}SDIO_ERR_TYPE; - -typedef enum _SDIO_XFER_TYPE_{ - SDIO_XFER_NOR = 0x00, // normal - SDIO_XFER_R = 0x01, // read and write block - SDIO_XFER_W = 0x02, // read and write block -}SDIO_XFER_TYPE; - -typedef struct _HAL_SDIO_HOST_ADAPTER_{ - IRQ_HANDLE IrqHandle; //+0.. - ADMA2_DESC_FMT *AdmaDescTbl; //+16 - uint32_t Response[4]; //+20,24,28,32 - uint32_t CardOCR; //+36 - uint32_t CardStatus; //+40 - uint32_t IsWriteProtect; //+44 - uint8_t SdStatus[SD_STATUS_LEN]; //+48.. - uint8_t Csd[CSD_REG_LEN]; //+112.. - volatile uint8_t CmdCompleteFlg; //+128 - volatile uint8_t XferCompleteFlg; //+129 - volatile uint8_t ErrIntFlg; //+130 - volatile uint8_t CardCurState; //+131 - uint8_t IsSdhc; //+132 - uint8_t CurrSdClk; //+133 - uint16_t RCA; //+134 - uint16_t SdSpecVer; //+136 - SDIO_ERR_TYPE errType; //+140 - SDIO_XFER_TYPE XferType; //+144 - void (*XferCompCallback)(void *pAdapter); - void *XferCompCbPara; - void (*ErrorCallback)(void *pAdapter); - void *ErrorCbPara; - void (*CardInsertCallBack)(void *pAdapter); - void *CardInsertCbPara; - void (*CardRemoveCallBack)(void *pAdapter); - void *CardRemoveCbPara; -}HAL_SDIO_HOST_ADAPTER, *PHAL_SDIO_HOST_ADAPTER; - -extern HAL_SDIO_HOST_ADAPTER SdioHostAdapter; - -extern HAL_Status -HalSdioHostInit( - IN void *Data -); - -extern HAL_Status -HalSdioHostDeInit( - IN void *Data -); - -extern HAL_Status -HalSdioHostEnable( - IN void *Data -); - -extern HAL_Status -HalSdioHostDisable( - IN void *Data -); - -extern void -HalSdioHostOpInit( - IN void *Data -); - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdr_controller.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdr_controller.c deleted file mode 100644 index b469794..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdr_controller.c +++ /dev/null @@ -1,1120 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ -#include "rtl8195a.h" -#include "platform_opts.h" -#include "hal_sdr_controller.h" -#include "rtl8195a_sdr.h" -#include "flash_api.h" - -#ifdef CONFIG_SDR_EN - -#ifndef USE_SRC_ONLY_BOOT -#define USE_SRC_ONLY_BOOT 0 -#endif - -#if !USE_SRC_ONLY_BOOT -//#define SDRAM_INIT_USE_TCM_HEAP -//#define SDRAM_INIT_USE_FLASH_API -#endif - - -#if 0 -#define HAL_SDR_WRITE32(addr, value32) HAL_WRITE32(SDR_CTRL_BASE, addr, value32) -#define HAL_SDR_WRITE16(addr, value16) HAL_WRITE16(SDR_CTRL_BASE, addr, value16) -#define HAL_SDR_WRITE8(addr, value8) HAL_WRITE8(SDR_CTRL_BASE, addr, value8) -#define HAL_SDR_READ32(addr) HAL_READ32(SDR_CTRL_BASE, addr) -#define HAL_SDR_READ16(addr) HAL_READ16(SDR_CTRL_BASE, addr) -#define HAL_SDR_READ8(addr) HAL_READ8(SDR_CTRL_BASE, addr) - -#define HAL_SDRAM_WRITE32(addr, value32) HAL_WRITE32(SDR_SDRAM_BASE, addr, value32) -#define HAL_SDRAM_WRITE16(addr, value16) HAL_WRITE16(SDR_SDRAM_BASE, addr, value16) -#define HAL_SDRAM_WRITE8(addr, value8) HAL_WRITE8(SDR_SDRAM_BASE, addr, value8) -#define HAL_SDRAM_READ32(addr) HAL_READ32(SDR_SDRAM_BASE, addr) -#define HAL_SDRAM_READ16(addr) HAL_READ16(SDR_SDRAM_BASE, addr) -#define HAL_SDRAM_READ8(addr) HAL_READ8(SDR_SDRAM_BASE, addr) -#endif - -#define DEBUG_SDRAM 2 -//#define CONFIG_SDR_VERIFY - -extern SPIC_INIT_PARA SpicInitParaAllClk[3][CPU_CLK_TYPE_NO]; -extern DRAM_DEVICE_INFO SdrDramInfo; - -/* -HAL_CUT_B_RAM_DATA_SECTION -DRAM_INFO SdrDramDev = { - DRAM_INFO_TYPE, - DRAM_INFO_COL_ADDR_WTH, - DRAM_INFO_BANK_SZ, - DRAM_INFO_DQ_WTH -}; - - -HAL_CUT_B_RAM_DATA_SECTION -DRAM_MODE_REG_INFO SdrDramModeReg = { - BST_LEN_4, - SENQUENTIAL, - 0x3, // Mode0Cas: 3 - 0x0, // Mode0Wr - 0, // Mode1DllEnN - 0, // Mode1AllLat - 0 // Mode2Cwl -}; - -HAL_CUT_B_RAM_DATA_SECTION -DRAM_TIMING_INFO SdrDramTiming = { - DRAM_TIMING_TRFC, // TrfcPs; - DRAM_TIMING_TREFI, // TrefiPs; - DRAM_TIMING_TWRMAXTCK, // WrMaxTck; - DRAM_TIMING_TRCD, // TrcdPs; - DRAM_TIMING_TRP, // TrpPs; - DRAM_TIMING_TRAS, // TrasPs; - DRAM_TIMING_TRRD, // TrrdTck; - DRAM_TIMING_TWR, // TwrPs; - DRAM_TIMING_TWTR, // TwtrTck; - //13090, // TrtpPs; - DRAM_TIMING_TMRD, // TmrdTck; - DRAM_TIMING_TRTP, // TrtpTck; - DRAM_TIMING_TCCD, // TccdTck; - DRAM_TIMING_TRC // TrcPs; -}; - -HAL_CUT_B_RAM_DATA_SECTION -DRAM_DEVICE_INFO SdrDramInfo = { - &SdrDramDev, - &SdrDramModeReg, - &SdrDramTiming, - DRAM_TIMING_TCK, - DFI_RATIO_1 -}; -*/ - -#define FPGA -#define FPGA_TEMP -#define SDR_CLK_DLY_CTRL 0x40000300 -#define MIN_RD_PIPE 0x0 -#define MAX_RD_PIPE 0x7 - -#define DRAM_CALIBRATION_IN_NVM 1 -#ifndef CONFIG_IMAGE_SEPARATE // Store SPIC Calibration only for seprated image -#undef DRAM_CALIBRATION_IN_NVM -#define DRAM_CALIBRATION_IN_NVM 0 -#endif - -#ifdef FPGA -#ifdef FPGA_TEMP -#define MAX_TAP_DLY 0x22 -#else -#define MAX_TAP_DLY 0x7F -#define SPEC_MAX_TAP 0xFF -#endif -#else -#define MAX_TAP_DLY 99 // 0~99 -#define SPEC_MAX_TAP 99 -#define WINDOW_COMBIN // combine window [0~a] and [b~99] (for asic mode) -#endif - -#define TAP_DLY 0x1 -#define REC_NUM 512 - - -uint32_t SdrControllerInit(void); -void DramInit(DRAM_DEVICE_INFO *); -int32_t MemTest(uint32_t loop_cnt); -uint32_t SdrCalibration(void); -//uint32_t Sdr_Rand2(void); -//#define Sdr_Rand2 Rand - -#ifndef SDRAM_INIT_USE_TCM_HEAP -#if !USE_SRC_ONLY_BOOT -//3 Note: stack overfloat if the arrary is declared in the task -//HAL_CUT_B_RAM_DATA_SECTION -extern uint32_t AvaWds[2][REC_NUM]; -#endif -#else -typedef struct { - uint32_t m[2][REC_NUM]; -} sAvaWds, * pAvaWds; -#endif - -#endif // CONFIG_SDR_EN -/* -HAL_CUT_B_RAM_DATA_SECTION -unsigned int rand_x = 123456789; -*/ -#ifdef CONFIG_SDR_EN - -#ifndef __GNUC__ -//#pragma arm section code = ".hal.sdrc.text" -#pragma arm section rodata = ".rodata.hal.sdrc" -//, rwdata = ".hal.sdrc.data" -//, zidata = ".hal.sdrc.bss" -//#pragma arm section bss = ".hal.sdrc.bss" -#endif - -#ifdef CONFIG_SDR_VERIFY -enum{ - LLT, - TXRPT, - RXBUFF, - TXBUFF, -}; -#define REPORT_OFFSET 0x8000 -#define RAMASK_OFFSET 0x8800 -#define LLT_H_ADDR 0x650 -#define TXREPORT_H_ADDR 0x660 -#define RXBUFF_H_ADDR 0x670 -#define TXBUFF_H_ADDR 0x680 - -#define REG_PKTBUF_DBG_CTRL_8723B 0x0140 - -int -rt_rpt_h_addr(uint8_t rpt) -{ - uint32_t r_val, offset; - - if (rpt == LLT){ - offset = LLT_H_ADDR; - } - else if (rpt == TXRPT){ - offset = TXREPORT_H_ADDR; - } - else if (rpt == RXBUFF){ - offset = RXBUFF_H_ADDR; - } - else if (rpt == TXBUFF){ - offset = TXBUFF_H_ADDR; - } - else { - } - - r_val = ((HAL_READ32(WIFI_REG_BASE, REG_PKTBUF_DBG_CTRL_8723B)&0xFFFFF000)|offset); - HAL_WRITE32(WIFI_REG_BASE, REG_PKTBUF_DBG_CTRL_8723B, r_val); -} - - - -int -rt_txrpt_read32(uint8_t macid, uint8_t offset) -{ - uint32_t r_val; - - rt_rpt_h_addr(TXRPT); - r_val = HAL_READ32(WIFI_REG_BASE, (REPORT_OFFSET + macid*4 + offset)); - - return r_val; -} - -int -rt_txrpt_read16(uint8_t macid, uint8_t offset) -{ - uint16_t r_val; - - rt_rpt_h_addr(TXRPT); - r_val = HAL_READ16(WIFI_REG_BASE, (REPORT_OFFSET + macid*8 + offset)); - - return r_val; -} - -int -rt_txrpt_read8(uint8_t macid, uint8_t offset) -{ - uint8_t r_val; - - rt_rpt_h_addr(TXRPT); - r_val = HAL_READ8(WIFI_REG_BASE, (REPORT_OFFSET + macid*16 + offset)); - - return r_val; -} - -int -rt_txrpt_read_1b(uint8_t macid, uint8_t offset, uint8_t bit_offset) -{ - uint8_t r_val = ((rt_txrpt_read8(macid, offset) & BIT(bit_offset))?1:0); - - return r_val; -} - - -int -rt_txrpt_write32(uint8_t macid, uint8_t offset, uint32_t val) -{ - rt_rpt_h_addr(TXRPT); - HAL_WRITE32(WIFI_REG_BASE, (REPORT_OFFSET + macid*4 + offset), val); -} - -int -rt_txrpt_write16(uint8_t macid, uint8_t offset, uint16_t val) -{ - rt_rpt_h_addr(TXRPT); - HAL_WRITE16(WIFI_REG_BASE, (REPORT_OFFSET + macid*8 + offset), val); -} - -int -rt_txrpt_write8(uint8_t macid, uint8_t offset, uint8_t val) -{ - rt_rpt_h_addr(TXRPT); - DBG_8195A("Write addr %x %x\n", (REPORT_OFFSET + macid*16 + offset), val); - HAL_WRITE8(WIFI_REG_BASE, (REPORT_OFFSET + macid*16 + offset), val); -} - -int -rt_txrpt_write_1b(uint8_t macid, uint8_t offset, uint8_t bit_offset, uint8_t val) -{ - uint8_t r_val = rt_txrpt_read8(macid, offset); - - if (val){ - r_val |= BIT(bit_offset); - } - else { - r_val &= (~BIT(bit_offset)); - } - - HAL_WRITE8(WIFI_REG_BASE, (REPORT_OFFSET + macid*16 + offset), r_val); -} - - -uint8_t -ReadTxrptsdr8( - IN uint8_t Macid, - IN uint8_t Offset) -{ - uint8_t r_val; - - r_val = rt_txrpt_read8(Macid, Offset); - return r_val; -} - -void -WriteTxrptsdr8( - IN uint8_t Macid, - IN uint8_t Offset, - IN uint8_t Val) -{ - rt_txrpt_write8(Macid, Offset, Val); -} - -void -SdrTestApp( - IN void *Data -) -{ - uint32_t *Cmd =(uint32_t*)Data; - uint32_t Loop, LoopIndex, Value32, Addr, Loop1, LoopIndex1; - - switch (Cmd[0]) { - case 1: - DBG_8195A("Initial SDR\n"); - - //1 "SdrControllerInit" is located in Image1, so we shouldn't call it in Image2 - if (!SdrControllerInit()) { - DBG_8195A("SDR Calibartion Fail!\n"); - } - break; - case 2: - Loop = Cmd[1]; - Loop1 = Cmd[2]; - DBG_8195A("Verify SDR: Loop = 0x%08x Loop1 = 0x%08x\n",Loop, Loop1); - - for (LoopIndex1=0; LoopIndex1 < Loop1; LoopIndex1++) { - - for (LoopIndex=0; LoopIndex < Loop; LoopIndex++) { - Value32 = Rand2(); - Addr = Rand2(); - Addr &= 0x1FFFFF; - Addr &= (~0x3); - - if (!(LoopIndex & 0xFFFFF)) { - DBG_8195A("Alive: LOOP = 0x%08x, LOOP = 0x%08x\n",LoopIndex1, LoopIndex); - } - - // DBG_8195A("Value: 0x%x; Addr: 0x%x\n", Value32, Addr+SDR_SDRAM_BASE); - HAL_SDRAM_WRITE32(Addr, Value32); - - if (Value32 != HAL_SDRAM_READ32(Addr)) { - DBG_8195A("Loop:%d; Addr: 0x%08x => CheckData error: W: 0x%08x /R:0x%x\n" - ,LoopIndex - ,Addr - ,Value32 - ,HAL_SDRAM_READ32(Addr)); - - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSTBY_INFO2, HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSTBY_INFO2)+1); - break; - } - } - } - DBG_8195A("Verify SDR Success\n"); - break; - - case 3: - DBG_8195A("WL read RPT MACID %x\n", Cmd[1]); - { - uint8_t i =0; - for(i=0;i<16;i++) { - DBG_8195A("WL RPT offset %d = %x\n", i, ReadTxrptsdr8(Cmd[1],i)); - } - } - break; - case 4: - DBG_8195A("WL write RPT MACID %x\n", Cmd[1]); - { - uint8_t i =0; - for(i=0;i<16;i++) { - WriteTxrptsdr8(Cmd[1],i,Cmd[2]); - //DBG_8195A("WL RPT offset %d = %x\n", i, ReadTxrptsdr8(Cmd[1],i)); - } - } - break; - default: - break; - } - -} - -#endif - -HAL_SDRC_TEXT_SECTION -void -SdrCtrlInit( -void -){ -// ConfigDebugErr |= _DBG_MISC_; -// DBG_8195A("SDR Ctrl Init\n"); - HAL_SYS_CTRL_WRITE32(REG_SYS_REGU_CTRL0, - ((HAL_SYS_CTRL_READ32(REG_SYS_REGU_CTRL0) & 0xfffff) | BIT_SYS_REGU_LDO25M_ADJ(0x0e))); - - LDO25M_CTRL(ON); -} - -HAL_SDRC_TEXT_SECTION -uint32_t -SdrControllerInit( -void -) -{ -// ConfigDebugErr |= _DBG_MISC_; - DBG_8195A("SDR Controller Init\n"); - - HAL_SYS_CTRL_WRITE32(REG_SYS_REGU_CTRL0, - ((HAL_SYS_CTRL_READ32(REG_SYS_REGU_CTRL0) & 0xfffff) | BIT_SYS_REGU_LDO25M_ADJ(0x03))); - - SRAM_MUX_CFG(0x2); - - SDR_CLK_SEL(SDR_CLOCK_SEL_VALUE);// REG_PESOC_CLK_SEL - - HAL_PERI_ON_WRITE32(REG_GPIO_PULL_CTRL4, 0); - - ACTCK_SDR_CCTRL(ON); - - SLPCK_SDR_CCTRL(ON); - - PinCtrl(SDR, 0, ON); - - HAL_PERI_ON_WRITE32(REG_GPIO_PULL_CTRL4, 0); - - MEM_CTRL_FCTRL(ON); - - HalDelayUs(1000); // 3000 - - // sdr initialization - DramInit(&SdrDramInfo); - - // sdr calibration - if(!SdrCalibration()) - return 0; // error! - else - return 1; // ok -} - - -HAL_SDRC_TEXT_SECTION -void -DramInit ( - IN DRAM_DEVICE_INFO *DramInfo -) -{ - //DBG_8195A("%s(%p)\n", __func__, DramInfo); - uint32_t CsBstLen = 0; // 0:bst_4, 1:bst_8 - uint32_t CasWr = 0;//, CasWrT; // cas write latency - uint32_t CasRd = 0, CasRdT = 0, CrlSrt = 0; // cas read latency - uint32_t AddLat; - uint32_t DramEmr2 = 0, DramMr0 = 0; - uint32_t CrTwr, DramMaxWr, DramWr; - uint32_t CrTrtw = 0, CrTrtwT = 0; - uint32_t DrmaPeriod; - DRAM_TYPE DdrType = DRAM_SDR; - DRAM_DQ_WIDTH DqWidth; - DRAM_COLADDR_WTH Page; - uint32_t DfiRate; - - DfiRate = 1 << (uint32_t) (DramInfo->DfiRate); - DrmaPeriod = (DramInfo->DdrPeriodPs)*(DfiRate); // according DFI_RATE to setting - - // In PHY, write latency == 3 - DramMaxWr= (DramInfo->Timing->WrMaxTck)/(DfiRate) +1; - DramWr = ((DramInfo->Timing->TwrPs) / DrmaPeriod) +1; - CrTwr = ((DramInfo->Timing->TwrPs) / DrmaPeriod) + 3; - - if (CrTwr < DramMaxWr) { -// CrTwr = CrTwr; - } - else { - CrTwr = DramMaxWr; - } - - if ((DramInfo->Dev->DeviceType) == DRAM_DDR_2) { - DdrType = DRAM_DDR_2; - if (DramInfo->ModeReg->BstLen == BST_LEN_4) { - CsBstLen = 0; //bst_4 - CrTrtwT = 2+2; //4/2+2 - DramMr0 = 0x2; - } - else { // BST_LEN_8 - CsBstLen = 1; // bst_8 - CrTrtwT = 4+2; // 8/2+2 - DramMr0 = 0x3; - } - CasRd = DramInfo->ModeReg->Mode0Cas; - AddLat = DramInfo->ModeReg ->Mode1AllLat; - CasWr = CasRd + AddLat -1; - DramEmr2 = 0; - - DramMr0 =(((DramWr%6)-1) << (PCTL_MR_OP_BFO+1)) | // write_recovery - (0 << PCTL_MR_OP_BFO ) | // dll - (DramInfo->ModeReg->Mode0Cas << PCTL_MR_CAS_BFO ) | - (DramInfo->ModeReg->BstType << PCTL_MR_BT_BFO ) | - DramMr0; - } - else if ((DramInfo->Dev->DeviceType) == DRAM_DDR_3) { - DdrType = DRAM_DDR_3; - if (DramInfo->ModeReg->BstLen == BST_LEN_4) { - CsBstLen = 0; //bst_4 - DramMr0 = 0x2; - } - else { // BST_LEN_8 - CsBstLen = 1; // bst_8 - DramMr0 = 0x0; - } - - CrlSrt = (DramInfo->ModeReg->Mode0Cas >> 1); - if (((DramInfo->ModeReg->Mode0Cas) & 0x1) ) { - CasRdT = CrlSrt+ 12; - } - else { - CasRdT = CrlSrt+ 4; - } - - if (DramInfo->ModeReg->Mode1AllLat == 1) { // CL-1 - AddLat = CasRd -1; - } - else if (DramInfo->ModeReg->Mode1AllLat == 2){ // CL-2 - AddLat = CasRd -2; - } - else { - AddLat = 0; - } - - CasRd = CasRdT + AddLat; - - CasWr = DramInfo->ModeReg->Mode2Cwl + 5 + AddLat; - - DramEmr2 = DramInfo->ModeReg->Mode2Cwl << 3; - - if (DramWr == 16) { - DramWr = 0; - } - else if (DramWr <= 9) { // 5< wr <= 9 - DramWr = DramWr - 4; - } - else { - DramWr = (DramWr + 1) / 2; - } - - DramMr0 =(DramWr << (PCTL_MR_OP_BFO+1) ) | // write_recovery - (0 << PCTL_MR_OP_BFO ) | // dll - ((DramInfo->ModeReg->Mode0Cas >>1 ) << PCTL_MR_CAS_BFO ) | - (DramInfo->ModeReg->BstType << PCTL_MR_BT_BFO ) | - ((DramInfo->ModeReg->Mode0Cas & 0x1) << 2 ) | - DramMr0; - - CrTrtwT = (CasRdT + 6) - CasWr; - - } // ddr2/ddr3 - else if ((DramInfo->Dev->DeviceType) == DRAM_SDR) { - DdrType = DRAM_SDR; - if (DramInfo->ModeReg->BstLen == BST_LEN_4) { - DramMr0 = 2; // bst_4 - CsBstLen = 0; //bst_4 - CasRd = 0x2; - } - else { // BST_LEN_8 - DramMr0 = 3; // bst_8 - CsBstLen = 1; // bst_8 - CasRd = 0x3; - } - - CasWr = 0; - - DramMr0 =(CasRd << PCTL_MR_CAS_BFO) | - (DramInfo->ModeReg->BstType << PCTL_MR_BT_BFO ) | - DramMr0; - - CrTrtwT = 0; // tic: CasRd + rd_rtw + rd_pipe - } // SDR - - - // countting tRTW - if ((CrTrtwT & 0x1)) { - CrTrtw = (CrTrtwT+1) /(DfiRate); - } - else { - CrTrtw = CrTrtwT /(DfiRate); - } - - DqWidth = (DramInfo->Dev->DqWidth); - Page = DramInfo->Dev->ColAddrWth +1; // DQ16 -> memory:byte_unit *2 - if (DqWidth == DRAM_DQ_32) { // paralle dq_16 => Page + 1 - Page = Page +1; - } -#if 1 - - // WRAP_MISC setting - HAL_SDR_WRITE32(REG_SDR_MISC,( - (Page << WRAP_MISC_PAGE_SIZE_BFO) | - (DramInfo->Dev->Bank << WRAP_MISC_BANK_SIZE_BFO) | - (CsBstLen << WRAP_MISC_BST_SIZE_BFO ) | - (DqWidth << WRAP_MISC_DDR_PARAL_BFO) - )); - // PCTL setting - HAL_SDR_WRITE32(REG_SDR_DCR,( - (0x2 << PCTL_DCR_DFI_RATE_BFO) | - (DqWidth << PCTL_DCR_DQ32_BFO ) | - (DdrType << PCTL_DCR_DDR3_BFO ) - )); - - HAL_SDR_WRITE32(REG_SDR_IOCR,( - ((CasRd -4)/(DfiRate) << PCTL_IOCR_TPHY_RD_EN_BFO ) | - (0 << PCTL_IOCR_TPHY_WL_BFO ) | - (((CasWr -3)/(DfiRate)) << PCTL_IOCR_TPHY_WD_BFO ) | - (0 << PCTL_IOCR_RD_PIPE_BFO ) - )); - - if ((DramInfo->Dev->DeviceType) != SDR) { // DDR2/3 - HAL_SDR_WRITE32(REG_SDR_EMR2,DramEmr2); - HAL_SDR_WRITE32(REG_SDR_EMR1,( - (1 << 2 ) | //RTT - (1 << 1 ) | //D.I.C - (DramInfo->ModeReg->Mode1DllEnN ) - )); - } // DDR2/3 - - HAL_SDR_WRITE32(REG_SDR_MR,DramMr0); - - HAL_SDR_WRITE32(REG_SDR_DRR, ( - (0 << PCTL_DRR_REF_DIS_BFO) | - (9 << PCTL_DRR_REF_NUM_BFO) | - ((((DramInfo->Timing->TrefiPs)/DrmaPeriod)+1) << PCTL_DRR_TREF_BFO ) | - ((((DramInfo->Timing->TrfcPs)/DrmaPeriod)+1) << PCTL_DRR_TRFC_BFO ) - )); - - HAL_SDR_WRITE32(REG_SDR_TPR0,( - ((((DramInfo->Timing->TrtpTck)/DfiRate)+1) << PCTL_TPR0_TRTP_BFO) | - (CrTwr << PCTL_TPR0_TWR_BFO ) | - ((((DramInfo->Timing->TrasPs)/DrmaPeriod)+1) << PCTL_TPR0_TRAS_BFO) | - ((((DramInfo->Timing->TrpPs)/DrmaPeriod)+1) << PCTL_TPR0_TRP_BFO ) - )); - - HAL_SDR_WRITE32(REG_SDR_TPR1, ( - (CrTrtw << PCTL_TPR1_TRTW_BFO) | - ((((DramInfo->Timing->TwtrTck)/DfiRate)+3) << PCTL_TPR1_TWTR_BFO) | - ((((DramInfo->Timing->TccdTck)/DfiRate)+1) << PCTL_TPR1_TCCD_BFO) | - ((((DramInfo->Timing->TrcdPs)/DrmaPeriod)+1) << PCTL_TPR1_TRCD_BFO) | - ((((DramInfo->Timing->TrcPs)/DrmaPeriod)+1) << PCTL_TPR1_TRC_BFO ) | - (((DramInfo->Timing->TrrdTck/DfiRate)+1) << PCTL_TPR1_TRRD_BFO) - )); - - HAL_SDR_WRITE32(REG_SDR_TPR2, ( - (DramInfo->Timing->TmrdTck << PCTL_TPR2_TMRD_BFO ) | - (0 << PCTL_TPR2_INIT_NS_EN_BFO ) | - (2 << PCTL_TPR2_INIT_REF_NUM_BFO) - )); - - // set all_mode _idle - HAL_SDR_WRITE32(REG_SDR_CSR,0x700); - - // start to init - HAL_SDR_WRITE32(REG_SDR_CCR,0x01); - while ((HAL_SDR_READ32(REG_SDR_CCR)& 0x1) == 0x0); - - // enter mem_mode - HAL_SDR_WRITE32(REG_SDR_CSR,0x600); -#else - volatile struct ms_rxi310_portmap *ms_ctrl_0_map; - ms_ctrl_0_map = (struct ms_rxi310_portmap*) SDR_CTRL_BASE; -// ms_ctrl_0_map = ms_ctrl_0_map; - // WRAP_MISC setting - ms_ctrl_0_map->misc = //0x12; - ( - (Page << WRAP_MISC_PAGE_SIZE_BFO) | - (DramInfo->Dev->Bank << WRAP_MISC_BANK_SIZE_BFO) | - (CsBstLen << WRAP_MISC_BST_SIZE_BFO ) | - (DqWidth << WRAP_MISC_DDR_PARAL_BFO) - ); - // PCTL setting - ms_ctrl_0_map->dcr = //0x208; - ( - (0x2 << PCTL_DCR_DFI_RATE_BFO) | - (DqWidth << PCTL_DCR_DQ32_BFO ) | - (DdrType << PCTL_DCR_DDR3_BFO ) - ); - - ms_ctrl_0_map->iocr = ( - ((CasRd -4)/(DfiRate) << PCTL_IOCR_TPHY_RD_EN_BFO ) | - (0 << PCTL_IOCR_TPHY_WL_BFO ) | - (((CasWr -3)/(DfiRate)) << PCTL_IOCR_TPHY_WD_BFO ) | - (0 << PCTL_IOCR_RD_PIPE_BFO ) - ); - - if ((DramInfo->Dev->DeviceType) != SDR) { // DDR2/3 - ms_ctrl_0_map->emr2 = DramEmr2; - - ms_ctrl_0_map->emr1 = ( - (1 << 2 ) | //RTT - (1 << 1 ) | //D.I.C - (DramInfo->ModeReg->Mode1DllEnN ) - ); - } // DDR2/3 - - ms_ctrl_0_map->mr = DramMr0; - - ms_ctrl_0_map->drr = ( - (0 << PCTL_DRR_REF_DIS_BFO) | - (9 << PCTL_DRR_REF_NUM_BFO) | - ((((DramInfo->Timing->TrefiPs)/DrmaPeriod)+1)<< PCTL_DRR_TREF_BFO ) | - ((((DramInfo->Timing->TrfcPs)/DrmaPeriod)+1) << PCTL_DRR_TRFC_BFO ) - ); - - ms_ctrl_0_map->tpr0= ( - ((((DramInfo->Timing->TrtpTck)/DfiRate)+1) << PCTL_TPR0_TRTP_BFO) | - (CrTwr << PCTL_TPR0_TWR_BFO ) | - ((((DramInfo->Timing->TrasPs)/DrmaPeriod)+1) << PCTL_TPR0_TRAS_BFO) | - ((((DramInfo->Timing->TrpPs)/DrmaPeriod)+1) << PCTL_TPR0_TRP_BFO ) - ); - - ms_ctrl_0_map->tpr1= ( - (CrTrtw << PCTL_TPR1_TRTW_BFO) | - ((((DramInfo->Timing->TwtrTck)/DfiRate)+3) << PCTL_TPR1_TWTR_BFO) | - ((((DramInfo->Timing->TccdTck)/DfiRate)+1) << PCTL_TPR1_TCCD_BFO) | - ((((DramInfo->Timing->TrcdPs)/DrmaPeriod)+1) << PCTL_TPR1_TRCD_BFO) | - ((((DramInfo->Timing->TrcPs)/DrmaPeriod)+1) << PCTL_TPR1_TRC_BFO ) | - (((DramInfo->Timing->TrrdTck/DfiRate)+1) << PCTL_TPR1_TRRD_BFO) - ); - - ms_ctrl_0_map->tpr2= ( - (DramInfo->Timing->TmrdTck << PCTL_TPR2_TMRD_BFO ) | - (0 << PCTL_TPR2_INIT_NS_EN_BFO ) | - (2 << PCTL_TPR2_INIT_REF_NUM_BFO) - ); - // set all_mode _idle - ms_ctrl_0_map->csr = 0x700; - - // start to init - ms_ctrl_0_map->ccr = 0x1; - while (((ms_ctrl_0_map->ccr)& 0x1) == 0x0); - - // enter mem_mode - ms_ctrl_0_map->csr= 0x600; -#endif -} // DramInit - - //3 -extern void * -_memset( void *s, int c, SIZE_T n ); - -HAL_SDRC_TEXT_SECTION -uint32_t -SdrCalibration( - void -) -{ -#ifdef FPGA -#ifdef FPGA_TEMP -// uint32_t Value32; -#endif -#else -// uint32_t Value32; -#endif - DBG_8195A("%s()\n", __func__); - uint32_t RdPipe = 0, TapCnt = 0, Pass = 0, AvaWdsCnt = 0; - uint32_t RdPipeCounter, RecNum[2], RecRdPipe[2];//, AvaWds[2][REC_NUM]; - BOOL RdPipeFlag, Result; -// BOOL PassFlag = 0; - uint8_t flashtype = 0; - - flashtype = SpicInitParaAllClk[0][0].flashtype; - - Result = _FALSE; - -#if DRAM_CALIBRATION_IN_NVM - // read calibration data from system data 0x5d~0x6c - SPIC_INIT_PARA SpicInitPara; - uint32_t valid; - union { uint8_t b[4]; uint32_t l;} value; -//// -#ifdef SDRAM_INIT_USE_FLASH_API - flash_turnon(); - if(fspic_isinit == 0) flash_init(&flashobj); -#endif -//// - - valid = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1); - uint32_t CpuType = ((valid & (0x70)) >> 4) + ((valid & BIT17) >> 17) * 8; - - valid = RdPipe = TapCnt = 0xFFFFFFFF; - value.l = HAL_READ32(SPI_FLASH_BASE, FLASH_SDRC_PARA_BASE+8*CpuType); - if((value.b[0]^value.b[1])==0xFF) - valid = value.b[0]; -#if DEBUG_SDRAM > 1 - DiagPrintf("dump1 %x, %x %x %x %x \n\r", value.l, value.b[0], value.b[1], value.b[2], value.b[3]); -#endif - value.l = HAL_READ32(SPI_FLASH_BASE, FLASH_SDRC_PARA_BASE+8*CpuType+4); - if((value.b[0]^value.b[1])==0xFF) - RdPipe = value.b[0]; - if((value.b[2]^value.b[3])==0xFF) - TapCnt = value.b[2]; -#if DEBUG_SDRAM > 1 - DiagPrintf("dump2 %x, %x %x %x %x \n\r", value.l, value.b[0], value.b[1], value.b[2], value.b[3]); -#endif - if((valid==1)&&(RdPipe!=0xFFFFFFFF)&&(TapCnt!=0xFFFFFFFF)){ - // wait DRAM settle down - HalDelayUs(10); - // load previous dram calibration data - HAL_SDR_WRITE32(REG_SDR_IOCR, ((HAL_SDR_READ32(REG_SDR_IOCR) & 0xff) | (RdPipe << PCTL_IOCR_RD_PIPE_BFO))); - SDR_DDL_FCTRL(TapCnt); - if(MemTest(3)) - return _TRUE; - } -#endif - -#if !USE_SRC_ONLY_BOOT -#ifdef SDRAM_INIT_USE_TCM_HEAP - pAvaWds AvaWds = (pAvaWds) tcm_heap_calloc(sizeof(uint32_t)*REC_NUM*2); -#else - _memset((uint8_t*)AvaWds, 0, sizeof(AvaWds)); -#endif -#else - uint32_t AvaWds[2][REC_NUM]; - _memset((uint8_t*)AvaWds, 0, sizeof(uint32_t)*REC_NUM*2); -#endif - - volatile struct ms_rxi310_portmap *ms_ctrl_0_map; - ms_ctrl_0_map = (struct ms_rxi310_portmap*) SDR_CTRL_BASE; -// ms_ctrl_0_map = ms_ctrl_0_map; -// PassFlag = PassFlag; - RdPipeCounter =0; - -// DBG_8195A("%d\n",__LINE__); - - for(RdPipe=MIN_RD_PIPE; RdPipe<=MAX_RD_PIPE; RdPipe++) { -// ms_ctrl_0_map->iocr = (ms_ctrl_0_map->iocr & 0xff) | (RdPipe << PCTL_IOCR_RD_PIPE_BFO); - HAL_SDR_WRITE32(REG_SDR_IOCR, ((HAL_SDR_READ32(REG_SDR_IOCR) & 0xff) | (RdPipe << PCTL_IOCR_RD_PIPE_BFO))); - - DBG_SDR_INFO("IOCR: 0x%x; Write: 0x%x\n", HAL_SDR_READ32(REG_SDR_IOCR), (RdPipe << PCTL_IOCR_RD_PIPE_BFO)); -#if DEBUG_SDRAM > 1 - DBG_8195A("IOCR: 0x%x; Write: 0x%x\n",ms_ctrl_0_map->iocr, (RdPipe << PCTL_IOCR_RD_PIPE_BFO)); -#endif - - RdPipeFlag = _FALSE; -// PassFlag = _FALSE; - AvaWdsCnt = 0; - - for(TapCnt=0; TapCnt < (MAX_TAP_DLY+1); TapCnt++) { - // Modify clk delay -#ifdef FPGA -#ifdef FPGA_TEMP - SDR_DDL_FCTRL(TapCnt); -// Value32 = (RD_DATA(SDR_CLK_DLY_CTRL) & 0xFF00FFFF); -// Value32 = (Value32 | (TapCnt << 16)); -// WR_DATA(SDR_CLK_DLY_CTRL, Value32); -#else - HAL_SDR_WRITE32(REG_SDR_DLY0, TapCnt); -// ms_ctrl_0_map->phy_dly0 = TapCnt; -#endif - DBG_SDR_INFO("DLY: 0x%x; Write: 0x%x\n", HAL_PERI_ON_READ32(REG_PESOC_MEM_CTRL), TapCnt); -#else - SDR_DDL_FCTRL(TapCnt); -// Value32 = (RD_DATA(SDR_CLK_DLY_CTRL) & 0xFF00FFFF); -// Value32 = (Value32 | (TapCnt << 16)); -// WR_DATA(SDR_CLK_DLY_CTRL, Value32); -#endif - - Pass = MemTest(10000); -// PassFlag = _FALSE; - - if(Pass==_TRUE) { // PASS - - if (!RdPipeFlag) { - DBG_SDR_INFO("%d Time Pass\n", RdPipeCounter); - RdPipeCounter++; - RdPipeFlag = _TRUE; - RecRdPipe[RdPipeCounter - 1] = RdPipe; - } -#ifdef SDRAM_INIT_USE_TCM_HEAP - AvaWds->m[RdPipeCounter-1][AvaWdsCnt] = TapCnt; -#else - AvaWds[RdPipeCounter-1][AvaWdsCnt] = TapCnt; -#endif - AvaWdsCnt++; - - RecNum[RdPipeCounter-1] = AvaWdsCnt; - - if((TapCnt+TAP_DLY)>=MAX_TAP_DLY) { - break; - } - -// PassFlag = _TRUE; - - DBG_SDR_INFO("Verify Pass => RdPipe:%d; TapCnt: %d\n", RdPipe, TapCnt); - - } - else { // FAIL -// if(PassFlag==_TRUE) { -// break; -// } -// else { - if (RdPipeCounter > 0) { - RdPipeCounter++; - if (RdPipeCounter < 3) { - RecNum[RdPipeCounter-1] = 0; - RecRdPipe[RdPipeCounter - 1] = RdPipe; - } - break; - } -// } - } - } // for TapCnt - - - if (RdPipeCounter > 2) { - uint8_t BestRangeIndex, BestIndex; - -#ifdef CONFIG_SDR_VERIFY //to reduce log - uint32_t i; - DBG_SDR_INFO("Avaliable RdPipe 0\n"); - - for (i=0;i<256;i++) { - DBG_SDR_INFO("%d\n", AvaWds[0][i]); - } - DBG_SDR_INFO("Avaliable RdPipe 1\n"); - for (i=0;i<256;i++) { - DBG_SDR_INFO("%d\n", AvaWds[1][i]); - } -#endif - - DBG_SDR_INFO("Rec 0 => total counter %d; RdPipe:%d;\n", RecNum[0], RecRdPipe[0]); - DBG_SDR_INFO("Rec 1 => total counter %d; RdPipe:%d;\n", RecNum[1], RecRdPipe[1]); - - BestRangeIndex = (RecNum[0] > RecNum[1]) ? 0 : 1; - - BestIndex = RecNum[BestRangeIndex]>>1; -#ifdef SDRAM_INIT_USE_TCM_HEAP - DBG_SDR_INFO("The Finial RdPipe: %d; TpCnt: 0x%x\n", RecRdPipe[BestRangeIndex], AvaWds->m[BestRangeIndex][BestIndex]); -#else - DBG_SDR_INFO("The Finial RdPipe: %d; TpCnt: 0x%x\n", RecRdPipe[BestRangeIndex], AvaWds[BestRangeIndex][BestIndex]); -#endif - // set RdPipe and tap_dly -// ms_ctrl_0_map->iocr = (ms_ctrl_0_map->iocr & 0xff) | (RecRdPipe[BestRangeIndex] << PCTL_IOCR_RD_PIPE_BFO); - HAL_SDR_WRITE32(REG_SDR_IOCR, ((HAL_SDR_READ32(REG_SDR_IOCR) & 0xff) | (RecRdPipe[BestRangeIndex] << PCTL_IOCR_RD_PIPE_BFO))); - -#ifdef FPGA -#ifdef FPGA_TEMP -#ifdef SDRAM_INIT_USE_TCM_HEAP - SDR_DDL_FCTRL(AvaWds->m[BestRangeIndex][BestIndex]); -#else - SDR_DDL_FCTRL(AvaWds[BestRangeIndex][BestIndex]); -#endif - -// Value32 = (RD_DATA(SDR_CLK_DLY_CTRL) & 0xFF00FFFF); -// Value32 = Value32 | (AvaWds[BestRangeIndex][BestIndex] << 16); -// WR_DATA(SDR_CLK_DLY_CTRL, Value32); -#else - HAL_SDR_WRITE32(REG_SDR_DLY0, AvaWds[BestRangeIndex][BestIndex]); -// ms_ctrl_0_map->phy_dly0 = AvaWds[BestRangeIndex][BestIndex]; -#endif -#else - SDR_DDL_FCTRL(AvaWds[BestRangeIndex][BestIndex]); -// Value32 = (RD_DATA(SDR_CLK_DLY_CTRL) & 0xFF00FFFF); -// Value32 = Value32 | (AvaWds[BestRangeIndex][BestIndex] << 16); -// WR_DATA(SDR_CLK_DLY_CTRL, Value32); -#endif - #if DRAM_CALIBRATION_IN_NVM - RdPipe = RecRdPipe[BestRangeIndex]; -#ifdef SDRAM_INIT_USE_TCM_HEAP - TapCnt = AvaWds->m[BestRangeIndex][BestIndex]; -#else - TapCnt = AvaWds[BestRangeIndex][BestIndex]; -#endif - - value.b[0] = (uint8_t)RdPipe; - value.b[1] = ~value.b[0]; - value.b[2] = (uint8_t)TapCnt; - value.b[3] = ~value.b[2]; -#if DEBUG_SDRAM > 1 - DiagPrintf("dump2w %x, %x %x %x %x \n\r", value.l, value.b[0], value.b[1], value.b[2], value.b[3]); -#endif - if( HAL_READ32(SPI_FLASH_BASE, FLASH_SDRC_PARA_BASE+8*CpuType+4) == 0xFFFFFFFF) - { - HAL_WRITE32(SPI_FLASH_BASE, FLASH_SDRC_PARA_BASE+8*CpuType+4, value.l); - if(flashtype == FLASH_MICRON){ - SpicWaitOperationDoneRtl8195A(SpicInitPara); - } - else - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); - } - - valid = 1; - value.b[0] = (uint8_t)valid; - value.b[1] = ~value.b[0]; - value.b[2] = 0xFF; - value.b[3] = 0xFF; -#if DEBUG_SDRAM > 1 - DiagPrintf("dump1w %x, %x %x %x %x \n\r", value.l, value.b[0], value.b[1], value.b[2], value.b[3]); -#endif - if( HAL_READ32(SPI_FLASH_BASE, FLASH_SDRC_PARA_BASE+8*CpuType) == 0xFFFFFFFF ) - { - HAL_WRITE32(SPI_FLASH_BASE, FLASH_SDRC_PARA_BASE+8*CpuType, value.l); - if(flashtype == FLASH_MICRON){ - SpicWaitOperationDoneRtl8195A(SpicInitPara); - } - else - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); - } - #endif - Result = _TRUE; - break; - } - - if (RdPipeCounter == 0) { - - DBG_SDR_INFO("NOT Find RdPipe\n"); - } - } - -#ifdef SDRAM_INIT_USE_TCM_HEAP - tcm_heap_free(AvaWds); -#endif - return Result; -} // SdrCalibration - -// HAL_RAM_DATA_SECTION -/* - -HAL_SDRC_TEXT_SECTION -void -ChangeRandSeed( - IN uint32_t Seed -) -{ - rand_x = Seed; -} - -HAL_SDRC_TEXT_SECTION -uint32_t -Sdr_Rand2( - void -) -{ - HAL_RAM_DATA_SECTION static unsigned int y = 362436; - - HAL_RAM_DATA_SECTION static unsigned int z = 521288629; - - HAL_RAM_DATA_SECTION static unsigned int c = 7654321; - - unsigned long long t, a= 698769069; - - rand_x = 69069 * rand_x + 12345; - y ^= (y << 13); y ^= (y >> 17); y ^= (y << 5); - t = a * z + c; c = (t >> 32); z = t; - - return rand_x + y + z; -} - -*/ -extern __attribute__ ((long_call)) unsigned int Rand(void); -HAL_SDRC_TEXT_SECTION -int32_t -MemTest( - uint32_t LoopCnt -) -{ - uint32_t LoopIndex = 0; - uint32_t Value32, Addr; - for (LoopIndex = 0; LoopIndex 0x%x != 0x%x\n",LoopIndex, - Addr, Value32, HAL_SDRAM_READ32(Addr)); - return _FALSE; - } - else { - // HAL_SDRAM_WRITE32(Addr, 0); - } - } - return _TRUE; - -} // MemTest - -//#if defined ( __ICCARM__ ) -uint8_t IsSdrPowerOn( - void -) -{ - if ( HAL_READ32(PERI_ON_BASE, REG_SOC_FUNC_EN) & BIT(21) ) { - return 0; - } else { - return 1; - } -} -//#endif - -#else // ifndef CONFIG_SDR_EN - -HAL_SDRC_TEXT_SECTION void SdrPowerOff( - void -) -{ - SDR_PIN_FCTRL(OFF); - LDO25M_CTRL(OFF); - HAL_WRITE32(PERI_ON_BASE, REG_SOC_FUNC_EN, HAL_READ32(PERI_ON_BASE, REG_SOC_FUNC_EN) | BIT(21)); -} - - -HAL_SDRC_TEXT_SECTION void SdrCtrlInit(void) -{ - DBG_SDR_ERR("No SDRAM!\n"); - SdrPowerOff(); -} - -HAL_SDRC_TEXT_SECTION uint32_t SdrControllerInit( void) -{ - DBG_SDR_ERR("No SDRAM!\n"); - SdrPowerOff(); - return 1; -} -#endif // end of "#ifdef CONFIG_SDR_EN" - - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdr_controller.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdr_controller.h deleted file mode 100644 index 0974328..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_sdr_controller.h +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_SDR_CONTROLLER_H_ -#define _HAL_SDR_CONTROLLER_H_ - -#if 1 //def CONFIG_SDR_EN - -typedef enum _DRAM_TYPE_ { - DRAM_DDR_1 = 1, - DRAM_DDR_2 = 2, - DRAM_DDR_3 = 3, - DRAM_DDR_4 = 4, - DRAM_SDR = 8 -}DRAM_TYPE; - -typedef enum _DRAM_COLADDR_WTH_ { - DRAM_COLADDR_8B = 0, - DRAM_COLADDR_9B = 1, - DRAM_COLADDR_10B = 2, - DRAM_COLADDR_11B = 3, - DRAM_COLADDR_12B = 4, - DRAM_COLADDR_13B = 5, - DRAM_COLADDR_14B = 6, - DRAM_COLADDR_15B = 7, - DRAM_COLADDR_16B = 8 -}DRAM_COLADDR_WTH; - -typedef enum _DRAM_BANK_SIZE_ { - DRAM_BANK_2 = 0, - DRAM_BANK_4 = 1, - DRAM_BANK_8 = 2 -}DRAM_BANK_SIZE; - -typedef enum _DRAM_DQ_WIDTH_ { - DRAM_DQ_16 = 0, - DRAM_DQ_32 = 1, - DRAM_HALF_DQ32 = 2 -}DRAM_DQ_WIDTH; - -typedef enum _MODE0_BST_LEN_ { - BST_LEN_4 = 0, - BST_LEN_FLY = 1, - BST_LEN_8 = 2 -}MODE0_BST_LEN; - -typedef enum _MODE0_BST_TYPE_ { - SENQUENTIAL = 0, - INTERLEAVE = 1 -}MODE0_BST_TYPE; - -typedef enum _DFI_RATIO_TYPE_ { - DFI_RATIO_1 = 0, // DFI= 1:1, or SDR - DFI_RATIO_2 = 1, - DFI_RATIO_4 = 2 -}DFI_RATIO_TYPE; - -typedef struct _DRAM_INFO_ { - DRAM_TYPE DeviceType; - DRAM_COLADDR_WTH ColAddrWth; - DRAM_BANK_SIZE Bank; - DRAM_DQ_WIDTH DqWidth; -}DRAM_INFO; - -typedef struct _DRAM_MODE_REG_INFO_ { - MODE0_BST_LEN BstLen; - MODE0_BST_TYPE BstType; - //enum mode0_cas rd_cas; - uint32_t Mode0Cas; - uint32_t Mode0Wr; - uint32_t Mode1DllEnN; - uint32_t Mode1AllLat; - uint32_t Mode2Cwl; -}DRAM_MODE_REG_INFO; - -typedef struct _DRAM_TIMING_INFO_ { - uint32_t TrfcPs; - uint32_t TrefiPs; - uint32_t WrMaxTck; - uint32_t TrcdPs; - uint32_t TrpPs; - uint32_t TrasPs; - uint32_t TrrdTck; - uint32_t TwrPs; - uint32_t TwtrTck; - //uint32_t TrtpPs; - uint32_t TmrdTck; - uint32_t TrtpTck; - uint32_t TccdTck; - uint32_t TrcPs; -}DRAM_TIMING_INFO; - - -typedef struct _DRAM_DEVICE_INFO_ { - DRAM_INFO *Dev; - DRAM_MODE_REG_INFO *ModeReg; - DRAM_TIMING_INFO *Timing; - uint32_t DdrPeriodPs; - DFI_RATIO_TYPE *DfiRate; -} DRAM_DEVICE_INFO, *PDRAM_DEVICE_INFO; - - -//====================================================== -//DRAM Info -#ifdef CONFIG_FPGA - #define DRAM_INFO_TYPE DRAM_SDR - #define DRAM_INFO_COL_ADDR_WTH DRAM_COLADDR_9B - #define DRAM_INFO_BANK_SZ DRAM_BANK_4 - #define DRAM_INFO_DQ_WTH DRAM_DQ_16 -#else - #define DRAM_INFO_TYPE DRAM_SDR - #define DRAM_INFO_COL_ADDR_WTH DRAM_COLADDR_8B - #define DRAM_INFO_BANK_SZ DRAM_BANK_2 - #define DRAM_INFO_DQ_WTH DRAM_DQ_16 -#endif - -//====================================================== -//DRAM Timing -#ifdef CONFIG_SDR_100MHZ -#define DRAM_TIMING_TCK 10000 //ps -#endif -#ifdef CONFIG_SDR_50MHZ -#define DRAM_TIMING_TCK 20000 //ps -#endif -#ifdef CONFIG_SDR_25MHZ -#define DRAM_TIMING_TCK 40000 //ps -#endif -#ifdef CONFIG_SDR_12_5MHZ -#define DRAM_TIMING_TCK 80000 //ps -#endif - -#if 1 -#define DRAM_TIMING_TREF 64000 //us -#define DRAM_ROW_NUM 8192 //depends on row bit number - -#define DRAM_TIMING_TRFC 60000 //ps -#define DRAM_TIMING_TREFI ((uint32_t)((DRAM_TIMING_TREF*1000)/DRAM_ROW_NUM)*1000) //ps -#define DRAM_TIMING_TWRMAXTCK 2 //tck -#define DRAM_TIMING_TRCD 15000 //ps -#define DRAM_TIMING_TRP 15000 //ps -#define DRAM_TIMING_TRAS 42000 //ps -#define DRAM_TIMING_TRRD 2 //tck -#define DRAM_TIMING_TWR ((uint32_t)(DRAM_TIMING_TCK*2)) -#define DRAM_TIMING_TWTR 0 //tck -#define DRAM_TIMING_TMRD 2 //tck -#define DRAM_TIMING_TRTP 0 //tck -#define DRAM_TIMING_TCCD 1 //tck -#define DRAM_TIMING_TRC 60000 //ps -#else - -#define DRAM_TIMING_TREF 66000 //us -#define DRAM_ROW_NUM 8192 //depends on row bit number - -#define DRAM_TIMING_TRFC 66000 //ps -#define DRAM_TIMING_TREFI 63999800 -#define DRAM_TIMING_TWRMAXTCK 2 //tck -#define DRAM_TIMING_TRCD 15000 //ps -#define DRAM_TIMING_TRP 15000 //ps -#define DRAM_TIMING_TRAS 37000 //ps -#define DRAM_TIMING_TRRD 2 //tck -#define DRAM_TIMING_TWR 7000 -#define DRAM_TIMING_TWTR 0 //tck -#define DRAM_TIMING_TMRD 2 //tck -#define DRAM_TIMING_TRTP 0 //tck -#define DRAM_TIMING_TCCD 1 //tck -#define DRAM_TIMING_TRC 60000 //ps -#endif - -#define HAL_SDR_WRITE32(addr, value32) HAL_WRITE32(SDR_CTRL_BASE, addr, value32) -#define HAL_SDR_WRITE16(addr, value16) HAL_WRITE16(SDR_CTRL_BASE, addr, value16) -#define HAL_SDR_WRITE8(addr, value8) HAL_WRITE8(SDR_CTRL_BASE, addr, value8) -#define HAL_SDR_READ32(addr) HAL_READ32(SDR_CTRL_BASE, addr) -#define HAL_SDR_READ16(addr) HAL_READ16(SDR_CTRL_BASE, addr) -#define HAL_SDR_READ8(addr) HAL_READ8(SDR_CTRL_BASE, addr) - -#define HAL_SDRAM_WRITE32(addr, value32) HAL_WRITE32(SDR_SDRAM_BASE, addr, value32) -#define HAL_SDRAM_WRITE16(addr, value16) HAL_WRITE16(SDR_SDRAM_BASE, addr, value16) -#define HAL_SDRAM_WRITE8(addr, value8) HAL_WRITE8(SDR_SDRAM_BASE, addr, value8) -#define HAL_SDRAM_READ32(addr) HAL_READ32(SDR_SDRAM_BASE, addr) -#define HAL_SDRAM_READ16(addr) HAL_READ16(SDR_SDRAM_BASE, addr) -#define HAL_SDRAM_READ8(addr) HAL_READ8(SDR_SDRAM_BASE, addr) - -#endif // CONFIG_SDR_EN -//extern unsigned int rand_x; -#endif // end of "#ifndef _HAL_SDR_CONTROLLER_H_" diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_soc_ps_monitor.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_soc_ps_monitor.c deleted file mode 100644 index cc5d404..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_soc_ps_monitor.c +++ /dev/null @@ -1,3484 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ -#include "rtl8195a.h" -#include "hal_soc_ps_monitor.h" -#include "rtl_consol.h" - -#include "PinNames.h" -#include "gpio_api.h" - - -#ifdef CONFIG_SOC_PS_MODULE -extern void UartLogIrqHandleRam(void * Data); -#if defined (__ICCARM__) -extern void xPortPendSVHandler( void ); -#elif defined (__GNUC__) -extern void xPortPendSVHandler( void ) __attribute__ (( naked )); -#endif -extern void xPortSysTickHandler( void ); -extern void vPortSVCHandler( void ); -//extern unsigned int HalGetCpuClk(void); -//extern _LONG_CALL_ uint32_t HalDelayUs(uint32_t us); - -extern COMMAND_TABLE UartLogRomCmdTable[]; -extern HAL_TIMER_OP HalTimerOp; -extern uint32_t STACK_TOP; // which is defined in vectors.s - -SYS_ADAPTER SYSAdapte; - -Power_Mgn PwrAdapter; - -void ReFillCpuClk(void); -extern uint8_t __ram_start_table_start__[]; - -uint32_t -PatchHalLogUartInit( - IN LOG_UART_ADAPTER UartAdapter -) -{ - uint32_t SetData; - uint32_t Divisor; - uint32_t Dlh; - uint32_t Dll; - - /* - Interrupt enable Register - 7: THRE Interrupt Mode Enable - 2: Enable Receiver Line Status Interrupt - 1: Enable Transmit Holding Register Empty Interrupt - 0: Enable Received Data Available Interrupt - */ - // disable all interrupts - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, 0); - - /* - Line Control Register - 7: DLAB, enable reading and writing DLL and DLH register, and must be cleared after - initial baud rate setup - 3: PEN, parity enable/disable - 2: STOP, stop bit - 1:0 DLS, data length - */ - - - // set up buad rate division - -#ifdef CONFIG_FPGA - Divisor = (SYSTEM_CLK / (16 * (UartAdapter.BaudRate))); -#else - { - Divisor = HalGetCpuClk()/(32 * UartAdapter.BaudRate); - Divisor = (Divisor & 1) + (Divisor >> 1); - } -#endif - - // set DLAB bit to 1 - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, 0x80); - - Dll = Divisor & 0xff; - Dlh = (Divisor & 0xff00)>>8; - - HAL_UART_WRITE32(UART_DLL_OFF, Dll); - HAL_UART_WRITE32(UART_DLH_OFF, Dlh); - // clear DLAB bit -// HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, 0); // есть далее - - // set data format - SetData = UartAdapter.Parity | UartAdapter.Stop | UartAdapter.DataLength; - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, SetData); - - /* FIFO Control Register - 7:6 level of receive data available interrupt - 5:4 level of TX empty trigger - 2 XMIT FIFO reset - 1 RCVR FIFO reset - 0 FIFO enable/disable - */ - // FIFO setting, enable FIFO and set trigger level (2 less than full when receive - // and empty when transfer - HAL_UART_WRITE32(UART_FIFO_CTL_REG_OFF, UartAdapter.FIFOControl); - - /* - Interrupt Enable Register - 7: THRE Interrupt Mode enable - 2: Enable Receiver Line status Interrupt - 1: Enable Transmit Holding register empty INT32 - 0: Enable received data available interrupt - */ - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, UartAdapter.IntEnReg); - - if (UartAdapter.IntEnReg) { - // Enable Peripheral_IRQ Setting for Log_Uart - HAL_WRITE32(VENDOR_REG_BASE, PERIPHERAL_IRQ_EN, 0x1000000); - - // Enable ARM Cortex-M3 IRQ - NVIC_SetPriorityGrouping(0x3); - NVIC_SetPriority(PERIPHERAL_IRQ, 14); - NVIC_EnableIRQ(PERIPHERAL_IRQ); - } - return 0; -} - -//_LONG_CALL_ extern void UartLogIrqHandle(void * Data); // in ROM -extern void UartLogIrqHandleRam(void * data); -void -PSHalInitPlatformLogUart( - void -) -{ - IRQ_HANDLE UartIrqHandle; - LOG_UART_ADAPTER UartAdapter; - - //4 Release log uart reset and clock - LOC_UART_FCTRL(OFF); - LOC_UART_FCTRL(ON); - ACTCK_LOG_UART_CCTRL(ON); - - PinCtrl(LOG_UART,S0,ON); - - //4 Register Log Uart Callback function - UartIrqHandle.Data = (uint32_t)NULL; //(uint32_t)&UartAdapter; - UartIrqHandle.IrqNum = UART_LOG_IRQ; - UartIrqHandle.IrqFun = (IRQ_FUN) UartLogIrqHandleRam; - UartIrqHandle.Priority = 0; - - //4 Inital Log uart - UartAdapter.BaudRate = DEFAULT_BAUDRATE; - UartAdapter.DataLength = UART_DATA_LEN_8BIT; - UartAdapter.FIFOControl = 0xC1; - UartAdapter.IntEnReg = 0x00; - UartAdapter.Parity = UART_PARITY_DISABLE; - UartAdapter.Stop = UART_STOP_1BIT; - - //4 Initial Log Uart - PatchHalLogUartInit(UartAdapter); - - //4 Register Isr handle - InterruptRegister(&UartIrqHandle); - - UartAdapter.IntEnReg = 0x05; - - //4 Initial Log Uart for Interrupt -// PatchHalLogUartInit(UartAdapter); - /* - Interrupt Enable Register - 7: THRE Interrupt Mode enable - 2: Enable Receiver Line status Interrupt - 1: Enable Transmit Holding register empty INT32 - 0: Enable received data available interrupt - */ - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, UartAdapter.IntEnReg); - // Enable Peripheral_IRQ Setting for Log_Uart - HAL_WRITE32(VENDOR_REG_BASE, PERIPHERAL_IRQ_EN, 0x1000000); - // Enable ARM Cortex-M3 IRQ - NVIC_SetPriorityGrouping(0x3); - NVIC_SetPriority(PERIPHERAL_IRQ, 14); - NVIC_EnableIRQ(PERIPHERAL_IRQ); - - //4 initial uart log parameters before any uartlog operation - //RtlConsolInit(ROM_STAGE,GetRomCmdNum(),(void*)&UartLogRomCmdTable);// executing boot seq., - //pUartLogCtl->TaskRdy = 1; -} - - -#ifdef CONFIG_SDR_EN -void -SDRWakeUp( - void -){ - ACTCK_SDR_CCTRL(ON); - SDR_PIN_FCTRL(ON); - HalDelayUs(10); - HAL_WRITE32(0x40005000, 0x34, 0x3); - HAL_WRITE32(0x40005000, 0x10, HAL_READ32(0x40005000, 0x10)&(~BIT28)); -} - -void -SDRSleep( - void -){ - gpio_t gpio_obj; - - HAL_WRITE32(0x40005000, 0X10, HAL_READ32(0x40005000, 0x10)|BIT28); - ACTCK_SDR_CCTRL(OFF); - - GPIOState[PORT_G] = 0; - GPIOState[PORT_J] = 0; - - gpio_init(&gpio_obj, PG_1); - gpio_mode(&gpio_obj, PullUp); - gpio_dir(&gpio_obj, PIN_OUTPUT); - gpio_write(&gpio_obj, GPIO_PIN_HIGH); - - gpio_init(&gpio_obj, PG_2); - gpio_mode(&gpio_obj, PullDown); - gpio_dir(&gpio_obj, PIN_OUTPUT); - gpio_write(&gpio_obj, GPIO_PIN_LOW); - - gpio_init(&gpio_obj, PG_3); - gpio_mode(&gpio_obj, PullDown); - gpio_dir(&gpio_obj, PIN_OUTPUT); - gpio_write(&gpio_obj, GPIO_PIN_LOW); - - gpio_init(&gpio_obj, PG_4); - gpio_mode(&gpio_obj, PullDown); - gpio_dir(&gpio_obj, PIN_OUTPUT); - gpio_write(&gpio_obj, GPIO_PIN_LOW); - - gpio_init(&gpio_obj, PJ_1); - gpio_mode(&gpio_obj, PullDown); - gpio_dir(&gpio_obj, PIN_OUTPUT); - gpio_write(&gpio_obj, GPIO_PIN_LOW); - - gpio_init(&gpio_obj, PJ_2); - gpio_mode(&gpio_obj, PullDown); - gpio_dir(&gpio_obj, PIN_OUTPUT); - gpio_write(&gpio_obj, GPIO_PIN_LOW); - - SDR_PIN_FCTRL(OFF); - HAL_WRITE32(0x40005000, 0x34, 0x1); - gpio_init(&gpio_obj, PJ_1); - gpio_mode(&gpio_obj, PullUp); - gpio_dir(&gpio_obj, PIN_OUTPUT); - gpio_write(&gpio_obj, GPIO_PIN_LOW); - -} -#endif - -void -SYSIrqHandle -( - IN void *Data -) -{ - uint32_t Rtemp; - - //change cpu clk - ReFillCpuClk(); - HalDelayUs(100); - - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_FUNC_EN) | BIT_SYS_PWRON_TRAP_SHTDN_N); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_FUNC_EN, Rtemp); - -#ifdef CONFIG_SDR_EN - if (PwrAdapter.SDREn) SDRWakeUp(); -#endif - - //disable DSTBY timer - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, 0); - - //clear wake event IMR - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0, 0); - - //clear wake event ISR - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_STATUS0); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_STATUS0, Rtemp); - - //set event flag - PwrAdapter.WakeEventFlag = _TRUE; -} - -void -InitSYSIRQ(void) -{ - IRQ_HANDLE SysHandle; - PSYS_ADAPTER pSYSAdapte; - pSYSAdapte = &SYSAdapte; - SysHandle.Data = (uint32_t) (pSYSAdapte); - SysHandle.IrqNum = SYSTEM_ON_IRQ; - SysHandle.IrqFun = (IRQ_FUN) SYSIrqHandle; - SysHandle.Priority = 0; - - InterruptRegister(&SysHandle); - InterruptEn(&SysHandle); - PwrAdapter.WakeEventFlag = _FALSE; -} - -void vWFSSVCHandler( void ) -{ -#if defined (__ICCARM__) - // TODO: IAR has different way using assembly -#elif defined (__GNUC__) - asm volatile - ( - "svcing:\n" - " mov r0, %0 \n" - " ldmia r0!, {r4-r7} \n" /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */ - " ldmia r0!, {r8-r11} \n" - " msr psp, r0 \n" /* Restore the task stack pointer. */ - " orr r14, #0xd \n" - " bx r14 \n" - ::"r"(PwrAdapter.CPUPSP):"r0" - ); -#endif -} - - -void -WakeFromSLPPG( - void -) -{ - //release shutdone - HAL_WRITE32(PERI_ON_BASE, REG_GPIO_SHTDN_CTRL, 0x7FF); - //HAL_WRITE32(PERI_ON_BASE, REG_CPU_PERIPHERAL_CTRL, 0x110001); - //JTAG rst pull high - HAL_WRITE32(PERI_ON_BASE, REG_GPIO_PULL_CTRL2, 0x05555556); - - ReFillCpuClk(); - - //3 Need Modify - VectorTableInitRtl8195A(0x1FFFFFFC); - - //3 Make PendSV, CallSV and SysTick the same priroity as the kernel. - HAL_WRITE32(0xE000ED00, 0x20, 0xF0F00000); - - //3 Initial Log Uart - PSHalInitPlatformLogUart(); - -#ifdef CONFIG_KERNEL - InterruptForOSInit((void*)vWFSSVCHandler, - (void*)xPortPendSVHandler, - (void*)xPortSysTickHandler); -#endif - //CPURegbackup[13] = CPURegbackup[13]-4; - PwrAdapter.CPURegbackup[16] |= 0x1000000 ; - - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-4) ) )= PwrAdapter.CPURegbackup[16]; //PSR - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-8) ) )= PwrAdapter.CPURegbackup[15]; //PC - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-12) ) )= PwrAdapter.CPURegbackup[14]; //LR - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-16) ) )= PwrAdapter.CPURegbackup[12]; //R12 - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-20) ) )= PwrAdapter.CPURegbackup[3]; //R3 - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-24) ) )= PwrAdapter.CPURegbackup[2]; //R2 - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-28) ) )= PwrAdapter.CPURegbackup[1]; //R1 - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-32) ) )= PwrAdapter.CPURegbackup[0]; //R0 - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-36) ) )= PwrAdapter.CPURegbackup[11]; //R11 - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-40) ) )= PwrAdapter.CPURegbackup[10]; //R10 - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-44) ) )= PwrAdapter.CPURegbackup[9]; //R9 - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-48) ) )= PwrAdapter.CPURegbackup[8]; //R8 - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-52) ) )= PwrAdapter.CPURegbackup[7]; //R7 - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-56) ) )= PwrAdapter.CPURegbackup[6]; //R6 - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-60) ) )= PwrAdapter.CPURegbackup[5]; //R5 - ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[13]-64) ) )= PwrAdapter.CPURegbackup[4]; //R4 - PwrAdapter.CPURegbackup[13] -= 64; //PSP - - PwrAdapter.CPUPSP = PwrAdapter.CPURegbackup[13]; - //CPURegBackUp(); - - asm volatile( - " cpsie i \n" /* Globally enable interrupts. */ - " svc 0 \n" /* System call to start first task. */ - " nop \n" - ); -} - -void -DurationScaleAndPeriodOP( - IN uint32_t SDuration, - OUT uint32_t *ScaleTemp, - OUT uint32_t *PeriodTemp -) -{ - uint8_t Idx = 0; - if (SDuration > 8355){ - SDuration = 0x20A3; - } - - //in unit 128us - SDuration = ((SDuration*125)/16); - - for (Idx = 8; Idx < 32; Idx++) { - - if ( (SDuration & 0xFFFFFF00) > 0 ) { - (*ScaleTemp) = (*ScaleTemp) + 1; - SDuration = (SDuration >> 1); - } - else { - break; - } - } - - *ScaleTemp = ((*ScaleTemp) << 8); - *PeriodTemp = SDuration; -} - - -uint32_t -CLKCal( - IN uint8_t ClkSel -) -{ - uint32_t Rtemp = 0; - uint32_t RRTemp = 0; - - uint32_t x = (HAL_READ32(PERI_ON_BASE,REG_SYS_CLK_CTRL1) >> BIT_SHIFT_PESOC_OCP_CPU_CK_SEL) & BIT_MASK_PESOC_OCP_CPU_CK_SEL; - - if( ClkSel ){ - //a33_ck - Rtemp |= 0x10000; - } - - //Enable cal - Rtemp |= 0x800000; - HAL_WRITE32(VENDOR_REG_BASE, REG_VDR_ANACK_CAL_CTRL, Rtemp); - - while( (HAL_READ32(VENDOR_REG_BASE, REG_VDR_ANACK_CAL_CTRL) & BIT23) != 0 ); - Rtemp = ((HAL_READ32(VENDOR_REG_BASE, REG_VDR_ANACK_CAL_CTRL) & 0x3FFF)) + 1; - - if( ClkSel ){ - //a33_ck - RRTemp = (Rtemp); - } - else { - //anack -//pvvx: eror RTL8710AF? RRTemp = (((2133/Rtemp) >> x) - 1); - RRTemp = (2133/Rtemp) - 1; - } - if ( x == 5 ) - DiagPrintf("Using ana to cal is not allowed!\n"); - - return RRTemp; -} - -void -BackupCPUClk( - void -) -{ - uint32_t Cpubp; - Cpubp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSTBY_INFO0) & 0xFFFFFFF0); - Cpubp |= ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1) >> BIT_SHIFT_PESOC_OCP_CPU_CK_SEL) & BIT_MASK_PESOC_OCP_CPU_CK_SEL); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSTBY_INFO0, Cpubp); -} - -void -ReFillCpuClk( - void -) -{ - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1, - ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1) - & (~(BIT_MASK_PESOC_OCP_CPU_CK_SEL << BIT_SHIFT_PESOC_OCP_CPU_CK_SEL))) - | BIT_PESOC_OCP_CPU_CK_SEL(HAL_READ32(SYSTEM_CTRL_BASE,REG_SYS_DSTBY_INFO0)))); -} - -void -SleepClkGatted( - IN uint32_t SDuration -) -{ - uint32_t Rtemp = 0; - uint32_t ScaleTemp = 0; - uint32_t PeriodTemp = 0; - uint32_t CalTemp = 0; - - //Backup CPU CLK - BackupCPUClk(); - - //truncate duration - SDuration &= 0x0003FFFC; - //2 CSleep - //3 1.1 Set TU timer timescale - //0x4000_0090[21:16] = 6'h1F - //0x4000_0090[15] = 1'b0 => Disable timer - CalTemp = (CLKCal(ANACK) << 16); - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) - & (~((BIT_MASK_SYS_ANACK_TU_TIME << BIT_SHIFT_SYS_ANACK_TU_TIME) | BIT_SYS_DSBYCNT_EN))) - | CalTemp); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); - - //0x4000_0090[11:8] => Time scale - //0x4000_0090[7:0] => Time period - //max duration 0x7FFFFF us, min 0x80 - DurationScaleAndPeriodOP(SDuration, &ScaleTemp, &PeriodTemp); - - Rtemp = (((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) - & (~((BIT_MASK_SYS_DSTDY_TIM_SCAL << BIT_SHIFT_SYS_DSTDY_TIM_SCAL) | (BIT_MASK_SYS_ANACK_TU_TIME << BIT_SHIFT_SYS_ANACK_TU_TIME)))) - | ScaleTemp) | PeriodTemp); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); - - //0x4000_0090[15] = 1'b1 => Enable timer - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) | BIT_SYS_DSBYCNT_EN; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); - - //3 1.2 Configure platform wake event - //0x4000_0100[0] = 1'b1 => Enable timer and GT as wakeup event to wakeup CPU - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0, BIT_SYSON_WEVT_SYSTIM_MSK); - - //3 1.3 Configure power state option: - // 1.4.3 0x120[15:8]: sleep power mode option0 [11] = 1 - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION) & 0xffff00ff) | 0x74000A00);//A - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION, Rtemp); - - // 1.4.4 0x124[7:0]: sleep power mode option1 [0] =1 - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION_EXT) & 0xffffff00) | BIT_SYSON_PMOPT_SLP_SWR_ADJ); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION_EXT, Rtemp); - - //3 1.5 Enable low power mode - // 1.5.1 0x4000_0118[2] = 1 => for sleep mode - Rtemp = BIT_SYSON_PM_CMD_SLP;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000004; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); - - //3 1.6 Wait CHIP enter low power mode - // 1.7 Wait deep standby timer timeout - // 1.8 Wait CHIP resume to norm power mode - HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL); - __WFI(); - -} - - -void SleepPwrGatted( - IN uint32_t SDuration -) -{ - uint32_t Rtemp = 0; - uint32_t ScaleTemp = 0; - uint32_t PeriodTemp = 0; - - - //Backup CPU CLK - BackupCPUClk(); - - //truncate duration - SDuration &= 0x0003FFFC; - - //2 PSleep - //3 1.1 Set TU timer timescale - //0x4000_0090[21:16] = 6'h1F - //0x4000_0090[15] = 1'b0 => Disable timer -// uint32_t CalTemp = (CLKCal(ANACK) << 16); - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) - & (~((BIT_MASK_SYS_DSTDY_TIM_SCAL << BIT_SHIFT_SYS_DSTDY_TIM_SCAL) | (BIT_MASK_SYS_ANACK_TU_TIME << BIT_SHIFT_SYS_ANACK_TU_TIME)))) - | ScaleTemp; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); - - //0x4000_0090[11:8] => Time scale - //0x4000_0090[7:0] => Time period - //max duration 0x7FFFFF us, min 0x80 - DurationScaleAndPeriodOP(SDuration, &ScaleTemp, &PeriodTemp); - - Rtemp = (((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) & 0xfffff000) | ScaleTemp) | PeriodTemp); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); - - //0x4000_0090[15] = 1'b1 => Enable timer - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) | BIT_SYS_DSBYCNT_EN; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); - - //3 1.2 Configure platform wake event - //0x4000_0100[0] = 1'b1 => Enable timer and GT as wakeup event to wakeup CPU - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0, BIT_SYSON_WEVT_SYSTIM_MSK | BIT_SYSON_WEVT_GTIM_MSK); - - //3 1.4 Configure power state option: - // 1.4.3 0x120[15:8]: sleep power mode option0: - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION) & 0x00ff00ff) | 0x74000000); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION, Rtemp); - - // 1.4.4 0x124[7:0]: sleep power mode option1: - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION_EXT) & 0xffffff00) | BIT_SYSON_PMOPT_SLP_SWR_ADJ | BIT_SYSON_PMOPT_SLP_ANACK_EN); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION_EXT, Rtemp); - - //3 1.5 Enable low power mode - // 1.5.1 0x4000_0118[2] = 1 => for sleep mode - Rtemp = BIT_SYSON_PM_CMD_SLP;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000004; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); - - //3 1.6 Wait CHIP enter low power mode - // 1.7 Wait deep standby timer timeout - // 1.8 Wait CHIP resume to norm power mode - HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL); - __WFI(); -#if CONFIG_DEBUG_LOG > 33 -// DiagPrintf("YOU CAN'T SEE ME ~~~~!!!!!!!!!!!!!!!!!!!~~~~~slppg~~~~!!!!!!!!!!"); -#endif -} - - -void -DStandby( - IN uint32_t SDuration -) -{ - uint32_t Rtemp = 0; - uint32_t ScaleTemp = 0; - uint32_t PeriodTemp = 0; - - //Backup CPU CLK - BackupCPUClk(); - - //Clear A33 timer event - //Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SOC_SYSON_SLP_WAKE_EVENT_STATUS0); - //HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SOC_SYSON_SLP_WAKE_EVENT_STATUS0, Rtemp); - - //2 Deep Standby mode - //3 1.1 Set TU timer timescale - //0x4000_0090[21:16] = 6'h1F - //0x4000_0090[15] = 1'b0 => Disable timer -// uint32_t CalTemp = (CLKCal(ANACK) << 16); - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) - & (~((BIT_MASK_SYS_DSTDY_TIM_SCAL << BIT_SHIFT_SYS_DSTDY_TIM_SCAL) | (BIT_MASK_SYS_ANACK_TU_TIME << BIT_SHIFT_SYS_ANACK_TU_TIME)))) - | ScaleTemp; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); - - //0x4000_0090[11:8] => Time scale - //0x4000_0090[7:0] => Time period - //max duration 0x7FFFFF us, min 0x80 - DurationScaleAndPeriodOP(SDuration, &ScaleTemp, &PeriodTemp); - - Rtemp = (((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) & 0xfffff000) | ScaleTemp) | PeriodTemp); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); - - //0x4000_0090[15] = 1'b1 => Enable timer - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) | BIT_SYS_DSBYCNT_EN; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); - - //3 1.3 Configure platform wake event - // 1.3.1 0x4000_0100[0] = 1'b1 => Enable deep standby timer wakeup event to wakeup CPU - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0, BIT_SYSON_WEVT_SYSTIM_MSK); - - //3 1.4 Configure power state option: - // 1.4.4 0x120[7:0]: deep standby power mode option: - Rtemp = 0x74000000; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION, Rtemp); - - // 1.4.5 0x124[7:0]: sleep power mode option1 [0] =1 - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION_EXT) & 0xffffff00) | BIT_SYSON_PMOPT_SLP_SWR_ADJ); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION_EXT, Rtemp); - - //3 1.5 Enable low power mode - // [0x4000_0118[1] = 1 => for deep standby mode] - Rtemp = BIT_SYSON_PM_CMD_DSTBY; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); - - //3 1.6 Wait CHIP enter low power mode - // 1.7 Wait deep standby timer timeout - // 1.8 Wait CHIP resume to norm power mode - HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL); - __WFI(); -#if CONFIG_DEBUG_LOG > 33 -// DiagPrintf("YOU CAN'T SEE ME ~~~~!!!!!!!!!!!!!!!!!!!~~~~~~~~~~~~~~~!!!!!!!!!!"); -#endif -} - - -void -DSleep( - IN uint32_t SDuration -) -{ - uint32_t Rtemp = 0; - //uint32_t ScaleTemp = 0; - //uint32_t PeriodTemp = 0; - uint32_t UTemp = 0; - uint32_t MaxTemp = 0; - - //2 Deep Sleep mode: - //3 2.1 Set TU timer timescale - - //3 2.2 Configure deep sleep timer: - //2.2.1 Enable REGU access interface 0x4000_0094[31] = 1 - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) | 0x80000000); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.2 Calibration A33 CLK - UTemp = CLKCal(A33CK); - - //Calculate the max value base on the a33 duration - MaxTemp = 0x7FFFFF*0x100/100000*UTemp/100*0x80; - //DiagPrintf("MaxTemp : 0x%x\n", MaxTemp); - - if ( SDuration >= MaxTemp ) { - SDuration = 0x7FFFFF; - } - else { - //In unit of A33 CLK : max num is bounded by anaclk = 1.5k - SDuration = ((((SDuration)/UTemp)*25/16*25/16*125)); - //DiagPrintf("SDuration : 0x%x\n", SDuration); - } -#if CONFIG_DEBUG_LOG > 3 - DiagPrintf("SDuration : 0x%x\n", SDuration); -#endif - //3 2.2.2 Initialize deep sleep counter - //2.2.2.0 0x4000_0094[15:0] = 16'hD300 => Disable deep sleep counter - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x0000D300); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - //2.2.2.0.1 Clear event - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_WEVENT, HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_WEVENT)); - //2.2.2.1 0x4000_0094[15:0] = 16'h9008 => set counter[7:0] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009000 | ((uint8_t)SDuration)); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.2.2 0x4000_0094[15:0] = 16'h9100 => set counter[15:8] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009100 | ((uint8_t)(SDuration >> 8))); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.2.3 0x4000_0094[15:0] = 16'h9200 => set counter[22:16] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009200 | ((uint8_t)(SDuration >> 16))); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.2.4 0x4000_0094[15:0] = 16'hD380 => Enable deep sleep counter - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x0000D380); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - HalDelayUs(1000); -#if CONFIG_DEBUG_LOG > 3 - DiagPrintf("a33 timer : 0x%x\n", HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CAL_CTRL)); -#endif - - HalDelayUs(8000); - - //3 2.2.3 - //2.3 Enable low power mode: 0x4000_0118[0] = 1'b1; - Rtemp = BIT_SYSON_PM_CMD_DSLP;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000001; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); - - //2.4 Wait CHIP enter deep sleep mode - //2.5 Wait deep sleep counter timeout - HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL); - __WFI(); -#if CONFIG_DEBUG_LOG > 33 -// DiagPrintf("YOU CAN'T SEE ME ~~~~!!!!!!!!!!!!!!!!!!!~~~~~~~~~~~~~~~!!!!!!!!!!"); -#endif -} - -void -MSBackupProcess( - void -) -{ - - uint8_t i = 0; - - //backup main stack - for (i = 0; i < (MAX_BACKUP_SIZE-1); i++) { - PwrAdapter.MSPbackup[i] = HAL_READ32(0x1FFFFE00, (0x1FC - (i*4))); // low 0x1FFFFD18 ! - } - - asm volatile - ( - "MRS r0, MSP\n" - "MOV %0, r0\n" - :"=r"(PwrAdapter.MSPbackup[MAX_BACKUP_SIZE-1]) - ::"memory" - ); -} - - -void -MSReFillProcess( - void -) -{ - uint8_t i = 0; - - for (i = 0; i < (MAX_BACKUP_SIZE-1); i++) { - - HAL_WRITE32(0x1FFFFE00, (0x1FC - (i*4)), PwrAdapter.MSPbackup[i]); - } - - asm volatile - ( - "MSR MSP, %0\n" - ::"r"(PwrAdapter.MSPbackup[MAX_BACKUP_SIZE-1]):"memory" - ); -} - - -void -SoCPSGPIOCtrl( - void -) -{ - HAL_WRITE32(PERI_ON_BASE,0x330,0x55555555); - HAL_WRITE32(PERI_ON_BASE,0x334,0x55555555); - HAL_WRITE32(PERI_ON_BASE,0x338,0x05555555); - HAL_WRITE32(PERI_ON_BASE,0x33c,0x55555555); - HAL_WRITE32(PERI_ON_BASE,0x340,0x55555555); - HAL_WRITE32(PERI_ON_BASE,0x344,0x55555555); - HAL_WRITE32(PERI_ON_BASE,0x348,0x55555555); - HAL_WRITE32(PERI_ON_BASE,0x320,0x0); -} - - -void -InitSoCPM( - void -) -{ - uint8_t Idx = 0; - PRAM_FUNCTION_START_TABLE pRamStartFun = (PRAM_FUNCTION_START_TABLE) __ram_start_table_start__; - - PwrAdapter.ActFuncCount = 0; - PwrAdapter.CurrentState = ACT; - for (Idx = 0; Idx < MAXSTATE; Idx++) { - PwrAdapter.PwrState[Idx].FuncIdx = 0xFF; - PwrAdapter.PwrState[Idx].PowerState = 0xFF; - } - PwrAdapter.SDREn = _FALSE; - InitSYSIRQ(); - pRamStartFun->RamWakeupFun = WakeFromSLPPG; -} - -uint8_t -ChangeSoCPwrState( - IN uint8_t RequestState, - IN uint32_t ReqCount -) -{ - - //DiagPrintf("Go to sleep"); - - while(1) { - - HalDelayUs(100); - - if (HAL_READ8(LOG_UART_REG_BASE, 0x14) & BIT6){ - - break; - } - } - - switch (RequestState) { - -// case ACT: -// break; - - case WFE: - __WFE(); - break; - - case WFI: - __WFI(); - break; - - //case SNOOZE: - //break; - - case SLPCG: - SleepClkGatted(ReqCount); - break; - - case SLPPG: - //Resume jump to wakeup function - //HAL_WRITE32(PERI_ON_BASE, 0x218, (HAL_READ32(PERI_ON_BASE,0x218)|BIT31)); - - SoCPSGPIOCtrl(); - SleepPwrGatted(ReqCount); - break; - - case DSTBY: - SoCPSGPIOCtrl(); - DStandby(ReqCount); - break; - - case DSLP: - case INACT: - SoCPSGPIOCtrl(); - DSleep(ReqCount); - break; - } - return 0; -} - - -uint32_t -SoCPwrChk( - IN uint8_t ReqState, - OUT uint8_t* FailfuncIdx, - OUT uint8_t* FailState -) -{ - uint8_t Idx = 0; - uint32_t Result = _FALSE; - - if ( PwrAdapter.ActFuncCount ) { - - for (Idx = 0; Idx < PwrAdapter.ActFuncCount; Idx++) { - - if (PwrAdapter.PwrState[Idx].PowerState < ReqState) { - *FailfuncIdx = PwrAdapter.PwrState[Idx].FuncIdx; - *FailState = PwrAdapter.PwrState[Idx].PowerState; - Result = _FALSE; - break; - } - } - } - else { - *FailfuncIdx = PwrAdapter.PwrState[Idx].FuncIdx; - *FailState = PwrAdapter.PwrState[Idx].PowerState; - Result = _TRUE; - } - return Result; -} - - -void -RegPowerState( - REG_POWER_STATE RegPwrState -) -{ - uint8_t Idx; - uint8_t StateIdx = 0; - uint8_t FState = 0; - - for (Idx = 0; Idx < PwrAdapter.ActFuncCount; Idx++) { - if (PwrAdapter.PwrState[Idx].FuncIdx == RegPwrState.FuncIdx) { - StateIdx = Idx; - FState = _TRUE; - break; - } - } - - switch (RegPwrState.PwrState) { - - case INACT : - if (FState) { - for (Idx = StateIdx; Idx < PwrAdapter.ActFuncCount; Idx++) { - PwrAdapter.PwrState[Idx].FuncIdx = PwrAdapter.PwrState[Idx+1].FuncIdx; - PwrAdapter.PwrState[Idx].PowerState = PwrAdapter.PwrState[Idx+1].PowerState; - } - PwrAdapter.ActFuncCount--; - } - else { - } - break; - - default: - - if (FState) { - PwrAdapter.PwrState[StateIdx].PowerState = RegPwrState.PwrState; - } - else { - PwrAdapter.PwrState[PwrAdapter.ActFuncCount].FuncIdx = RegPwrState.FuncIdx; - PwrAdapter.PwrState[PwrAdapter.ActFuncCount].PowerState = RegPwrState.PwrState; - PwrAdapter.ActFuncCount++; - } - - break; - } - - //for debug -#if CONFIG_DEBUG_LOG > 5 - for (Idx = 0; Idx < PwrAdapter.ActFuncCount; Idx++) { - DiagPrintf("RegPwrIdx : %d \n", Idx); - DiagPrintf("FuncIdx : %d \n", PwrAdapter.PwrState[Idx].FuncIdx); - DiagPrintf("PowerState : 0x%x \n", PwrAdapter.PwrState[Idx].PowerState); - } -#endif -} - - -void -ReadHWPwrState( - IN uint8_t FuncIdx, - OUT uint8_t* HwState -){ - - switch (FuncIdx){ - case UART0: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC0_EN) & BIT_PERI_UART0_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL0) & BIT_SOC_ACTCK_UART0_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case UART1: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC0_EN) & BIT_PERI_UART1_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL0) & BIT_SOC_ACTCK_UART1_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case UART2: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC0_EN) & BIT_PERI_UART2_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL0) & BIT_SOC_ACTCK_UART2_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case SPI0: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC0_EN) & BIT_PERI_SPI0_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL0) & BIT_SOC_ACTCK_SPI0_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case SPI1: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC0_EN) & BIT_PERI_SPI1_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL0) & BIT_SOC_ACTCK_SPI1_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case SPI2: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC0_EN) & BIT_PERI_SPI2_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL0) & BIT_SOC_ACTCK_SPI2_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case I2C0: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC0_EN) & BIT_PERI_I2C0_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL1) & BIT_SOC_ACTCK_I2C0_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case I2C1: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC0_EN) & BIT_PERI_I2C1_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL1) & BIT_SOC_ACTCK_I2C1_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case I2C2: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC0_EN) & BIT_PERI_I2C2_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL1) & BIT_SOC_ACTCK_I2C2_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else { - *HwState = HWINACT; - } - break; - - case I2C3: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC0_EN) & BIT_PERI_I2C3_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL1) & BIT_SOC_ACTCK_I2C3_EN){ - *HwState = HWACT; - } - else { - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case I2S0: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC0_EN) & BIT_PERI_I2S0_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL1) & BIT_SOC_ACTCK_I2S_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case I2S1: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC0_EN) & BIT_PERI_I2S1_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL1) & BIT_SOC_ACTCK_I2S_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case PCM0: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC0_EN) & BIT_PERI_PCM0_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL1) & BIT_SOC_ACTCK_PCM_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case PCM1: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC0_EN) & BIT_PERI_PCM1_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL1) & BIT_SOC_ACTCK_PCM_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; -//#ifdef CONFIG_ADC_EN - case ADC0: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC1_EN) & BIT_PERI_ADC0_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL1) & BIT_SOC_ACTCK_ADC_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; -//#endif -//#ifdef CONFIG_DAC_EN - case DAC0: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC1_EN) & BIT_PERI_DAC0_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL1) & BIT_SOC_ACTCK_DAC_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case DAC1: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_PERI_FUNC1_EN) & BIT_PERI_DAC1_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_PERI_CLK_CTRL1) & BIT_SOC_ACTCK_DAC_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; -//#endif - case SDIOD: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN) & BIT_SOC_HCI_SDIOD_ON_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0) & BIT_SOC_ACTCK_SDIO_DEV_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case SDIOH: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN) & BIT_SOC_HCI_SDIOH_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0) & BIT_SOC_ACTCK_SDIO_HST_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; -#ifdef CONFIG_USB_EN - case USBOTG: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN) & BIT_SOC_HCI_OTG_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0) & BIT_SOC_ACTCK_OTG_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else { - *HwState = HWINACT; - } - break; -#endif - case MII: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN) & BIT_SOC_HCI_MII_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0) & BIT_SOC_ACTCK_MII_MPHY_EN){ - *HwState = HWACT; - } - else { - *HwState = HWCG; - } - } - else{ - *HwState = HWINACT; - } - break; - - case PWM0: - if (HAL_READ32(PERI_ON_BASE, REG_PERI_PWM0_CTRL) & BIT_PERI_PWM0_EN){ - *HwState = HWACT; - } - else { - *HwState = HWINACT; - } - break; - - case PWM1: - if (HAL_READ32(PERI_ON_BASE, REG_PERI_PWM1_CTRL) & BIT_PERI_PWM1_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWINACT; - } - break; - - case PWM2: - if (HAL_READ32(PERI_ON_BASE, REG_PERI_PWM2_CTRL) & BIT_PERI_PWM2_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWINACT; - } - break; - - case PWM3: - if (HAL_READ32(PERI_ON_BASE, REG_PERI_PWM3_CTRL) & BIT_PERI_PWM3_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWINACT; - } - break; - - case ETE0: - if (HAL_READ32(PERI_ON_BASE, REG_PERI_TIM_EVT_CTRL) & BIT_PERI_GT_EVT0_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWINACT; - } - break; - - case ETE1: - if (HAL_READ32(PERI_ON_BASE, REG_PERI_TIM_EVT_CTRL) & BIT_PERI_GT_EVT1_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWINACT; - } - break; - - case ETE2: - if (HAL_READ32(PERI_ON_BASE, REG_PERI_TIM_EVT_CTRL) & BIT_PERI_GT_EVT2_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWINACT; - } - break; - - case ETE3: - if (HAL_READ32(PERI_ON_BASE, REG_PERI_TIM_EVT_CTRL) & BIT_PERI_GT_EVT3_EN){ - *HwState = HWACT; - } - else { - *HwState = HWINACT; - } - break; - - case EGTIM: - if (HAL_READ32(PERI_ON_BASE, REG_PERI_EGTIM_CTRL) & BIT_PERI_EGTIM_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWINACT; - } - break; - - case LOG_UART: - if (HAL_READ32(PERI_ON_BASE, REG_SOC_FUNC_EN) & BIT_SOC_LOG_UART_EN){ - if (HAL_READ32(PERI_ON_BASE, REG_PESOC_CLK_CTRL) & BIT_SOC_ACTCK_LOG_UART_EN){ - *HwState = HWACT; - } - else{ - *HwState = HWCG; - } - } - else { - *HwState = HWINACT; - } - break; - - default: - *HwState = UNDEF; - break; - } - -} - -void -QueryRegPwrState( - IN uint8_t FuncIdx, - OUT uint8_t* RegState, - OUT uint8_t* HwState -){ - uint8_t Idx = 0; - uint8_t StateIdx = INACT; - - for (Idx = 0; Idx < PwrAdapter.ActFuncCount; Idx++) { - if (PwrAdapter.PwrState[Idx].FuncIdx == FuncIdx) { - StateIdx = PwrAdapter.PwrState[Idx].PowerState; - break; - } - } - - *RegState = StateIdx; - ReadHWPwrState(FuncIdx, HwState); -} - - -void -SetSYSTimer( - IN uint32_t SDuration -) -{ - uint32_t Rtemp = 0; - uint32_t ScaleTemp = 0; - uint32_t PeriodTemp = 0; - uint32_t CalTemp = 0; - - //0x4000_0090[15] = 1'b0 => Disable timer - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, 0); - - //calculate scale and period - CalTemp = (CLKCal(ANACK) << 16); - DurationScaleAndPeriodOP(SDuration, &ScaleTemp, &PeriodTemp); - - Rtemp = ((CalTemp | ScaleTemp) | PeriodTemp); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); -} - -void -SleepCG( - IN uint8_t Option, - IN uint32_t SDuration, - IN uint8_t ClkSourceEn, - IN uint8_t SDREn - -) -{ - uint32_t Rtemp = 0; - uint32_t WakeEvent = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0); - - uint32_t Backupvalue = HAL_READ32(0xE000E000, 0x100); - HAL_WRITE32(0xE000E000,0x0180,-1); - - //Backup CPU CLK - BackupCPUClk(); - - //Clear event - PwrAdapter.WakeEventFlag = _FALSE; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_STATUS0, HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_STATUS0)); - - //3 2 Configure power state option: - // 2.1 power mode option: - if (ClkSourceEn) { - Rtemp = 0x74003B00; //0x74003900; - } - else { - Rtemp = 0x74000900; // BIT_SYSON_PMOPT_NORM_XTAL_EN | BIT_SYSON_PMOPT_NORM_SYSPLL_EN | BIT_SYSON_PMOPT_NORM_SYSCLK_SEL | BIT_SYSON_PMOPT_NORM_EN_PWM - // | BIT_SYSON_PMOPT_SLP_LPLDO_SEL | BIT_SYSON_PMOPT_SLP_EN_SOC - } - - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION, Rtemp); - - // 2.2 sleep power mode option1 - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION_EXT) & 0xffffff00) | BIT_SYSON_PMOPT_SLP_ANACK_EN); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION_EXT, Rtemp); - - if (Option & SLP_STIMER) { - - //Set TU timer timescale - SetSYSTimer(SDuration); - - //0x4000_0090[15] = 1'b1 => Enable timer - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) | BIT_SYS_DSBYCNT_EN; // 0x00008000; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); - - //Enable wake event - WakeEvent |= BIT0; // BIT_SYSON_WEVT_SYSTIM_MSK - } - - if (Option & SLP_GTIMER) { - - //Enable wake event - WakeEvent |= BIT1; // BIT_SYSON_WEVT_GTIM_MSK - } - - if (Option & SLP_GPIO) { - - //Enable wake event - WakeEvent |= BIT4; // BIT_SYSON_WEVT_GPIO_MSK - } - - if (Option & SLP_WL) { - - //Enable wake event - WakeEvent |= BIT8; // BIT_SYSON_WEVT_WLAN_MSK - } - - if (Option & SLP_NFC) { - - //Enable wake event - WakeEvent |= BIT28; // BIT_SYSON_WEVT_A33_MSK - } - - if (Option & SLP_SDIO) { - - //Enable wake event - WakeEvent |= BIT14; // BIT_SYSON_WEVT_SDIO_MSK - } - - if (Option & SLP_USB) { - - //Enable wake event - //WakeEvent |= BIT16; // BIT_SYSON_WEVT_USB_MSK - } - - if (Option & SLP_TIMER33) { - - //Enable wake event - WakeEvent |= BIT28; // BIT_SYSON_WEVT_A33_MSK - } -/* - while(1) { - - HalDelayUs(100); - - if (HAL_READ8(LOG_UART_REG_BASE,0x14) & BIT6){ - - break; - } - } -*/ - HalLogUartWaitTxFifoEmpty(); - //Set Event - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0, WakeEvent); - - //3 Enable low power mode - //Enable low power mode: - if ((*((volatile uint8_t*)(&PwrAdapter.WakeEventFlag)))!= _TRUE){ - - PwrAdapter.SDREn = SDREn; -#ifdef CONFIG_SDR_EN - if (SDREn) SDRSleep(); -#endif - - Rtemp = BIT_SYSON_PM_CMD_SLP; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); - - //3 Wait CHIP enter low power mode - // Wait deep standby timer timeout - // Wait CHIP resume to norm power mode - HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL); - HalDelayUs(300); - HAL_WRITE32(0xE000E000, 0x0100, Backupvalue); - //__WFI(); - } -} - - -void -SleepPG( - IN uint8_t Option, - IN uint32_t SDuration -) -{ - uint32_t Rtemp = 0; - uint32_t WakeEvent = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0); - - //Backup CPU CLK - BackupCPUClk(); - - //Clear event - PwrAdapter.WakeEventFlag = _FALSE; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_STATUS0, HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_STATUS0)); - - //3 2 Configure power state option: - // 2.1 power mode option: - Rtemp = 0x74000100; // BIT_SYSON_PMOPT_SLP_LPLDO_SEL - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION, Rtemp); - - // 2.2 sleep power mode option1 - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION_EXT) & 0xffffff00) | BIT_SYSON_PMOPT_SLP_ANACK_EN); // 0x2); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION_EXT, Rtemp); - - if (Option & SLP_STIMER) { - - //Set TU timer timescale - SetSYSTimer(SDuration); - - //0x4000_0090[15] = 1'b1 => Enable timer - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) | BIT_SYS_DSBYCNT_EN; // 0x00008000; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); - - //Enable wake event - WakeEvent |= BIT0; - } - - if (Option & SLP_GTIMER) { - - //Enable wake event - WakeEvent |= BIT1; - } - - if (Option & SLP_GPIO) { - - //Enable wake event - WakeEvent |= BIT4; - } - - if (Option & SLP_WL) { - - //Enable wake event - WakeEvent |= BIT8; - } - - if (Option & SLP_NFC) { - - //Enable wake event - WakeEvent |= BIT28; - } - - if (Option & SLP_SDIO) { - - //Enable wake event - WakeEvent |= BIT14; - } - - if (Option & SLP_USB) { - - //Enable wake event - //WakeEvent |= BIT16; - } - - if (Option & SLP_TIMER33) { - - //Enable wake event - WakeEvent |= BIT28; - } -/* while(1) { - - HalDelayUs(100); - - if (HAL_READ8(LOG_UART_REG_BASE,0x14)&BIT6){ - - break; - } - } */ - HalLogUartWaitTxFifoEmpty(); - - //Set Event - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0, WakeEvent); - - //3 Enable low power mode - //Enable low power mode: - if (PwrAdapter.WakeEventFlag != _TRUE){ - -#ifdef CONFIG_SDR_EN - LDO25M_CTRL(OFF); -#endif - - Rtemp = BIT_SYSON_PM_CMD_SLP; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); - - //3 Wait CHIP enter low power mode - // Wait deep standby timer timeout - // Wait CHIP resume to norm power mode -// HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL); - __WFI(); - } -} - - - -void -DSTBYGpioCtrl( - IN uint8_t PinEn, - IN uint8_t WMode -) -{ - uint32_t Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE,REG_SYS_GPIO_DSTBY_WAKE_CTRL0)|PinEn|(PinEn<<16)|(PinEn<<24)); - uint32_t Stemp = (PinEn<<8); - - if (WMode) { - Rtemp = (Rtemp|Stemp); - } - else { - Rtemp = (Rtemp & (~Stemp)); - } - - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_GPIO_DSTBY_WAKE_CTRL0, Rtemp); - - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE,REG_SYS_GPIO_DSTBY_WAKE_CTRL1) | PinEn | (PinEn<<16) | BIT_SYS_WINT_DEBOUNCE_TIM_SCAL(2); // BIT9; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_GPIO_DSTBY_WAKE_CTRL1, Rtemp); -} - - -void -DeepStandby( - IN uint8_t Option, - IN uint32_t SDuration, - IN uint8_t GpioOption -) -{ - uint32_t Rtemp = 0; - - HAL_WRITE32(0x60008000, 0x80006180, PS_MASK); - - //Clear event - PwrAdapter.WakeEventFlag = _FALSE; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_STATUS0, HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_STATUS0)); - - //3 2 Configure power state option: - // 2.1 deep standby power mode option: - Rtemp = 0x74000100; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION, Rtemp); - - // 2.2 sleep power mode option1 - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION_EXT) & 0xffffff00)); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION_EXT, Rtemp); - - if (Option & DSTBY_STIMER) { - - //3 3.1 Set TU timer timescale - SetSYSTimer(SDuration); - - //3 3.2 Configure platform wake event - // 1.3.1 0x4000_0100[0] = 1'b1 => Enable deep standby timer wakeup event to wakeup CPU - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0) | BIT0); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0, Rtemp); - - //0x4000_0090[15] = 1'b1 => Enable timer - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) | BIT_SYS_DSBYCNT_EN; // 0x00008000; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); - } - - if (Option & DSTBY_NFC){ - //Enable wake event - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0)|BIT28); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0, Rtemp); - } - - if (Option & DSTBY_TIMER33){ - //Enable wake event - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0)|BIT28); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0, Rtemp); - } - - if (Option & DSTBY_GPIO){ - - if (GpioOption & BIT0) { - DSTBYGpioCtrl(BIT0, (GpioOption & BIT4)); - } - - if (GpioOption & BIT1) { - DSTBYGpioCtrl(BIT1, (GpioOption & BIT5)); - } - - if (GpioOption & BIT2) { - DSTBYGpioCtrl(BIT2, (GpioOption & BIT6)); - } - - if (GpioOption & BIT3) { - DSTBYGpioCtrl(BIT3, (GpioOption & BIT7)); - } - - //Enable wake event - if (GpioOption & 0xF){ - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0)|BIT29); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0, Rtemp); - } - } - - - //3 Enable low power mode - //Enable low power mode: - if (PwrAdapter.WakeEventFlag != _TRUE){ - - SpicDeepPowerDownFlashRtl8195A(); - -#ifdef CONFIG_SDR_EN - LDO25M_CTRL(OFF); -#endif - - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_GPIO_SHTDN_CTRL, 0x0); - - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_FUNC_EN) & 0xBFFFFFFF); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_FUNC_EN, Rtemp); - - Rtemp = BIT_SYSON_PM_CMD_DSTBY; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); - - //3 Wait CHIP enter low power mode - // Wait deep standby timer timeout - // Wait CHIP resume to norm power mode -// HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL); - __WFI(); - } -} - - - -void -DeepSleep( - IN uint8_t Option, - IN uint32_t SDuration -) -{ - uint32_t Rtemp = 0; - uint32_t UTemp = 0; - uint32_t MaxTemp = 0; - -//??? HAL_WRITE32(0x60008000, 0x80006180, PS_MASK); - - //1.1.1 Enable REGU access interface 0x4000_0094[31] = 1 - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) | 0x80000000); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //1.1.2 0x4000_0094[15:0] = 16'hD300 => Disable deep sleep counter - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x0000D300); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - while(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & BIT15); - - //1.1.3 Clear event - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_WEVENT, HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_WEVENT)); - - if (Option & DS_TIMER33){ - //2.1.1 Calibration A33 CLK - UTemp = CLKCal(A33CK); - - //Calculate the max value base on the a33 duration - MaxTemp = ((((0x7FFFFF/3)*500)/UTemp)*25); - - if ( SDuration >= MaxTemp ) { - SDuration = 0x7FFFFF; - } - else { - //In unit of A33 CLK : max num is bounded by anaclk = 1.5k - SDuration = ((((SDuration/3)*500)/UTemp)*25); - } - - //2.1.2 Initialize deep sleep counter - //2.1.3.1 0x4000_0094[15:0] = 16'h9008 => set counter[7:0] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009000 | ((uint8_t)SDuration)); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - while(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & BIT15); - - //2.1.3.2 0x4000_0094[15:0] = 16'h9100 => set counter[15:8] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009100 | ((uint8_t)(SDuration >> 8))); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - while(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & BIT15); - - //2.1.3.3 0x4000_0094[15:0] = 16'h9200 => set counter[22:16] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009200 | ((uint8_t)(SDuration >> 16))); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - while(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & BIT15); - - //2.1.3.4 0x4000_0094[15:0] = 16'hD380 => Enable deep sleep counter - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x0000D380); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - while(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & BIT15); - } - - if (Option & DS_GPIO) { - //2.2 en GPIO - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009410); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - while(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & BIT15); - } - - - //0x4000_0100[28] = 1'b1 => Enable A33 wakeup event to wakeup CPU - PwrAdapter.WakeEventFlag = _FALSE; - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0) | BIT28); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0, Rtemp); - - //3 2.3 - //2.3 Enable low power mode: 0x4000_0118[0] = 1'b1; - if (PwrAdapter.WakeEventFlag != _TRUE){ - - SpicDeepPowerDownFlashRtl8195A(); - -#ifdef CONFIG_SDR_EN - LDO25M_CTRL(OFF); -#endif - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_REGU_CTRL0) & (~BIT_SYS_REGU_LDO25M_EN); // 0xFFFFFFFD; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_REGU_CTRL0, Rtemp); - - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_GPIO_SHTDN_CTRL, 0x0); - - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_FUNC_EN) & 0xBFFFFFFF); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_FUNC_EN, Rtemp); - - Rtemp = BIT_SYSON_PM_CMD_DSLP;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000001; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); - - //2.4 Wait CHIP enter deep sleep mode - //2.5 Wait deep sleep counter timeout -// HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL); - __WFI(); - } -} - -void -DSleep_GPIO( - void -) -{ - uint32_t Rtemp = 0; - - //1.1 Clear event - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_WEVENT, HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_WEVENT)); - - //2 Deep Sleep mode: - //3 2.2 Configure GPIO: - //2.2.1 Enable REGU access interface 0x4000_0094[31] = 1 - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) | 0x80000000); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009410); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.2 - //2.3 Enable low power mode: 0x4000_0118[0] = 1'b1; - Rtemp = BIT_SYSON_PM_CMD_DSLP;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000001; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); - - //2.4 Wait CHIP enter deep sleep mode - //2.5 Wait deep sleep counter timeout -// HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL); - __WFI(); -} - -void -DSleep_Timer( - IN uint32_t SDuration -) -{ - uint32_t Rtemp = 0; - uint32_t UTemp = 0; - uint32_t MaxTemp = 0; - - //2 Deep Sleep mode: - //3 2.1 Set TU timer timescale - - //3 2.2 Configure deep sleep timer: - //2.2.1 Enable REGU access interface 0x4000_0094[31] = 1 - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) | 0x80000000); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.2 0x4000_0094[15:0] = 16'hD300 => Disable deep sleep counter - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x0000D300); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.3 Clear event - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_WEVENT, HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_WEVENT)); - - //2.2.4 Calibration A33 CLK - UTemp = CLKCal(A33CK); - - //Calculate the max value base on the a33 duration - MaxTemp = 0x7FFFFF*0x100/100000*UTemp/100*0x80; - - if ( SDuration >= MaxTemp ) { - SDuration = 0x7FFFFF; - } - else { - //In unit of A33 CLK : max num is bounded by anaclk = 1.5k - SDuration = ((((SDuration)/UTemp)*25/16*25/16*125)); - } - - //DiagPrintf("SDuration : 0x%x\n", SDuration); - - //2.2.5 Initialize deep sleep counter - //2.2.5.1 0x4000_0094[15:0] = 16'h9008 => set counter[7:0] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009000 | ((uint8_t)SDuration)); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.5.2 0x4000_0094[15:0] = 16'h9100 => set counter[15:8] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009100 | ((uint8_t)(SDuration >> 8))); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.5.3 0x4000_0094[15:0] = 16'h9200 => set counter[22:16] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009200 | ((uint8_t)(SDuration >> 16))); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.5.4 0x4000_0094[15:0] = 16'hD380 => Enable deep sleep counter - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x0000D380); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //HalDelayUs(1000); - //Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CAL_CTRL); - //DiagPrintf("a33 timer : 0x%x\n", Rtemp); - HalDelayUs(8000); - - //3 2.3 - //2.3 Enable low power mode: 0x4000_0118[0] = 1'b1; - Rtemp = BIT_SYSON_PM_CMD_DSLP;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000001; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); - - //2.4 Wait CHIP enter deep sleep mode - //2.5 Wait deep sleep counter timeout -// HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL); - __WFI(); -} - - -void -SoCPwrReinitProcess( - void -) -{ - //clear resume jumping condition - HAL_WRITE32(PERI_ON_BASE, 0x218, (HAL_READ32(PERI_ON_BASE,0x218)&(~BIT31))); - - #ifdef CONFIG_KERNEL - InterruptForOSInit((void*)vPortSVCHandler, - (void*)xPortPendSVHandler, - (void*)xPortSysTickHandler); - #endif - - //msp stack - MSReFillProcess(); - - //init sys timer - ( * ( ( volatile unsigned long * ) 0xe000e014 ) ) = 0xc34f;//portNVIC_SYSTICK_LOAD_REG - ( * ( ( volatile unsigned long * ) 0xe000e010 ) ) = 0x10007;//portNVIC_SYSTICK_CTRL_REG - - //3 Reinit SYS int - { - IRQ_HANDLE SysHandle; - PSYS_ADAPTER pSYSAdapte; - pSYSAdapte = &SYSAdapte; - SysHandle.Data = (uint32_t) (pSYSAdapte); - SysHandle.IrqNum = SYSTEM_ON_IRQ; - SysHandle.IrqFun = (IRQ_FUN) SYSIrqHandle; - SysHandle.Priority = 0; - - InterruptRegister(&SysHandle); - InterruptEn(&SysHandle); - } - //DiagPrintf("REINIT IRQ0!!!!!!!!!!\n"); - //HAL_WRITE32(0xE000ED00, 0x14, 0x200); - -} - - -void -SoCEnterPS( - void -) -{ -} - - -void -SoCPWRIdleTaskHandle( - void -) -{ - //static uint32_t IdleLoopCount = 0; - static uint32_t IdleCount = 0; - //uint8_t Chktemp = 0; - //uint32_t CMDTemp[6]; - //uint32_t Rtemp,Rtemp1,Rtemp2; - - //IdleCount++; - //HalDelayUs(1000); - //if ((IdleCount > 5000)||(HAL_READ8(SYSTEM_CTRL_BASE,REG_SOC_SYSON_DSTBY_INFO0+1) == 0x12)) - if (HAL_READ8(SYSTEM_CTRL_BASE, 0xf2) == 0xda) {// { - - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SOC_FUNC_EN, (HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_FUNC_EN)|BIT29)); - - HAL_WRITE32(SYSTEM_CTRL_BASE,0xf0,0); - - #if 0 //slp pg - //backup cpu reg - CPURegBackUp(); - - //backup main stack - MSBackupProcess(); - - //Wait for LogUart print out - while(1) { - HalDelayUs(100); - if (HAL_READ8(LOG_UART_REG_BASE,0x14)&BIT6){ - break; - } - } - - SoCPSGPIOCtrl(); - - ChangeSoCPwrState(SLPPG, 0xFFFFF); - - asm volatile - ( - "SLPPG_WAKEUP_POINT:\n" - ); - - SoCPwrReinitProcess(); - - //DiagPrintf("idle~~~~~~~~~~~~~~~~~\n"); - DiagPrintf("SLP_PG = %d\n", HAL_READ32(SYSTEM_CTRL_BASE,0xf8)); - #endif - asm volatile - ( - "SLPPG_WAKEUP_POINT:\n" - ); - -#if 1 //dslp - //Wait for LogUart print out - while(1) { - HalDelayUs(100); - if (HAL_READ8(LOG_UART_REG_BASE,0x14) & BIT6){ - break; - } - } - - ChangeSoCPwrState(DSTBY, 0xFFFFF); -#endif - - } - - if (IdleCount > 500) { - IdleCount = 0; - if (HAL_READ32(SYSTEM_CTRL_BASE,0xf4) ==0) { - HAL_WRITE32(SYSTEM_CTRL_BASE,0xf0,HAL_READ32(SYSTEM_CTRL_BASE,0xf0)|0xda0000); - HAL_WRITE32(SYSTEM_CTRL_BASE,0xf8,HAL_READ32(SYSTEM_CTRL_BASE,0xf8)+1); -#if CONFIG_DEBUG_LOG > 3 - DiagPrintf("DSTBY = %d\n", HAL_READ32(SYSTEM_CTRL_BASE,0xf8)); -#endif - } - //DiagPrintf("idle~~~~~~~~~~~~~~~~~\n"); - } - else { - HalDelayUs(100000); - IdleCount++; - } -} - -#ifdef CONFIG_SOC_PS_VERIFY -#if 0 -void -SoCPwrDecision( - void -) -{ - uint8_t Idx = 0; - uint8_t StateIdx = 0; - uint8_t State = _TRUE; - uint8_t NextState = 0; - uint32_t CurrentCount, RemainCount, PTTemp; - - if ( PwrAdapter.ActFuncCount ) { - - //update remaining count - CurrentCount = HalTimerOp.HalTimerReadCount(1); - - for (Idx = 0; Idx < PwrAdapter.ActFuncCount; Idx++) { - - if (PwrAdapter.PwrState[Idx].RegCount < CurrentCount) { - PTTemp = (0xFFFFFFFF - CurrentCount + PwrAdapter.PwrState[Idx].RegCount); - } - else { - PTTemp = (PwrAdapter.PwrState[Idx].RegCount - CurrentCount); - } - - if ( PTTemp < PwrAdapter.PwrState[Idx].ReqDuration ) { - PwrAdapter.PwrState[Idx].RemainDuration = PwrAdapter.PwrState[Idx].ReqDuration - PTTemp; - } - else { - //active this function - if ( PwrAdapter.PwrState[Idx].PowerState > SLPPG ) { - //Todo: re-initial function as GPIO wake - } - PwrAdapter.PwrState[Idx].PowerState = ACT; - PwrAdapter.PwrState[Idx].RemainDuration = 0; - PwrAdapter.PwrState[Idx].ReqDuration = 0; - } - } - - //Select next power mode - for (StateIdx = DSLP; StateIdx >= ACT; StateIdx--) { - - for (Idx = 0; Idx < PwrAdapter.ActFuncCount; Idx++) { - - State = _TRUE; - if (PwrAdapter.PwrState[Idx].PowerState < StateIdx) { - State = _FALSE; - break; - } - } - - if ( State ) { - NextState = StateIdx; - break; - } - } - - //fine min sleep time - RemainCount = PwrAdapter.PwrState[0].RemainDuration; - for (Idx = 0; Idx < PwrAdapter.ActFuncCount; Idx++) { - - if ( RemainCount > PwrAdapter.PwrState[Idx].RemainDuration ) { - - RemainCount = PwrAdapter.PwrState[Idx].RemainDuration; - } - } - - //for debug -#if CONFIG_DEBUG_LOG > 3 - DiagPrintf("RemainCount : 0x%x \n", RemainCount); - DiagPrintf("NextState : 0x%x \n", NextState); -#endif - #if 0 - //Change state - if ( NextState > SLPCG ) { - if ( RemainCount > 640 ) { - ChangeSoCPwrState(NextState, RemainCount); - } - else { - ChangeSoCPwrState(SLPCG, RemainCount); - } - } - else { - if (NextState != ACT ) { - ChangeSoCPwrState(NextState, RemainCount); - } - } - #endif - } - else { - //todo: go to DSLP - } -} - - -void -RegPowerState( - REG_POWER_STATE RegPwrState -) -{ - uint8_t Idx = 0; - uint8_t StateIdx; - uint8_t FState = 0; - - for (Idx = 0; Idx < PwrAdapter.ActFuncCount; Idx++) { - if (PwrAdapter.PwrState[Idx].FuncIdx == RegPwrState.FuncIdx) { - StateIdx = Idx; - FState = _TRUE; - } - } - - switch (RegPwrState.PwrState) { - - case INACT : - if (FState) { - for (Idx = StateIdx; Idx < PwrAdapter.ActFuncCount; Idx++) { - PwrAdapter.PwrState[Idx].FuncIdx = PwrAdapter.PwrState[Idx+1].FuncIdx; - PwrAdapter.PwrState[Idx].PowerState = PwrAdapter.PwrState[Idx+1].PowerState; - PwrAdapter.PwrState[Idx].ReqDuration = PwrAdapter.PwrState[Idx+1].ReqDuration; - PwrAdapter.PwrState[Idx].RegCount = PwrAdapter.PwrState[Idx+1].RegCount; - } - PwrAdapter.ActFuncCount--; - } - else { - } - break; - - default: - - if (FState) { - PwrAdapter.PwrState[StateIdx].PowerState = RegPwrState.PwrState; - PwrAdapter.PwrState[StateIdx].ReqDuration = RegPwrState.ReqDuration; - PwrAdapter.PwrState[StateIdx].RegCount = HalTimerOp.HalTimerReadCount(1); - } - else { - PwrAdapter.PwrState[PwrAdapter.ActFuncCount].FuncIdx = RegPwrState.FuncIdx; - PwrAdapter.PwrState[PwrAdapter.ActFuncCount].PowerState = RegPwrState.PwrState; - PwrAdapter.PwrState[PwrAdapter.ActFuncCount].ReqDuration = RegPwrState.ReqDuration; - PwrAdapter.PwrState[PwrAdapter.ActFuncCount].RegCount = HalTimerOp.HalTimerReadCount(1); - PwrAdapter.ActFuncCount++; - } - - break; - } - - //for debug -#if CONFIG_DEBUG_LOG > 3 - for (Idx = 0; Idx < PwrAdapter.ActFuncCount; Idx++) { - DiagPrintf("RegPwrIdx : %d \n", Idx); - DiagPrintf("FuncIdx : %d \n", PwrAdapter.PwrState[Idx].FuncIdx); - DiagPrintf("PowerState : 0x%x \n", PwrAdapter.PwrState[Idx].PowerState); - DiagPrintf("ReqDuration : 0x%x \n", PwrAdapter.PwrState[Idx].ReqDuration); - DiagPrintf("RegCount : 0x%x \n", PwrAdapter.PwrState[Idx].RegCount); - } -#endif -} -#endif - -#if 0 -void -En32KCalibration( - void -) -{ - uint32_t Rtemp; - uint32_t Ttemp = 0; - - while(1) { - - //set parameter - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL0, 0); - Rtemp = 0x80f880; - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL0, Rtemp); -#if CONFIG_DEBUG_LOG > 3 - DiagPrintf("cal en\n"); -#endif - - //Polling LOCK - Rtemp = 0x110000; - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL0, Rtemp); - DiagPrintf("polling lock\n"); - - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL1); - if ((Rtemp & 0x3000) != 0x0){ - break; - } - else { - Ttemp++; -#if CONFIG_DEBUG_LOG > 3 - DiagPrintf("check lock: %d\n", Ttemp); -#endif - } - } - - Rtemp = 0x884000; - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_OSC32K_REG_CTRL0, Rtemp); -} -#endif - -void -SYSTestIrqHandle -( - IN void *Data -) -{ - uint32_t Rtemp; - static uint32_t Ttemp = 0; - - //change cpu clk - ReFillCpuClk(); - HalDelayUs(100); - - //JTAG rst pull high - HAL_WRITE32(PERI_ON_BASE, REG_GPIO_PULL_CTRL2, 0x0202aaaa); - - //release shutdone - //HAL_WRITE32(PERI_ON_BASE, REG_GPIO_SHTDN_CTRL, 0x7ff); - - //disable DSTBY timer - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, 0); - - //clear wake event IMR - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0, 0); - - //clear wake event ISR - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_STATUS0); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_STATUS0, Rtemp); - - //HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SOC_SYSON_DSTBY_INFO0, Ttemp); - - //DiagPrintf("Ttemp : %d\n", Ttemp); - - Ttemp++; - //Rtemp = HalTimerOp.HalTimerReadCount(1); - //DiagPrintf("32k counter : %x\n", Rtemp);//32k counter : - //DiagPrintf("\n"); - - //PwrAdapter.SleepFlag = 1; - //DiagPrintf("\n"); - //DiagPrintf("0x234 after slp : %x\n", HAL_READ32(SYSTEM_CTRL_BASE,0x234)+1); - //HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SOC_SYSON_DSTBY_INFO0, HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_SYSON_DSTBY_INFO0)+1); - //HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SOC_SYSON_DSTBY_INFO1, HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_SYSON_DSTBY_INFO1)+1); - //HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SOC_SYSON_DSTBY_INFO2, HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_SYSON_DSTBY_INFO2)+1); - //HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SOC_SYSON_DSTBY_INFO3, HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_SYSON_DSTBY_INFO3)+1); - //DiagPrintf("f0 counter : %x\n", HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_SYSON_DSTBY_INFO0)); - //DiagPrintf("f1 counter : %x\n", HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_SYSON_DSTBY_INFO1)); - //DiagPrintf("f2 counter : %x\n", HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_SYSON_DSTBY_INFO2)); - //DiagPrintf("f3 counter : %x\n", HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_SYSON_DSTBY_INFO3)); - //DiagPrintf("\n"); - //DiagPrintf("ya ~~~~\n"); - - PwrAdapter.WakeEventFlag = _TRUE; -} - -void -InitSYSTestIRQ(void) -{ - IRQ_HANDLE SysHandle; - PSYS_ADAPTER pSYSAdapte; - pSYSAdapte = &SYSAdapte; - SysHandle.Data = (uint32_t) (pSYSAdapte); - SysHandle.IrqNum = SYSTEM_ON_IRQ; - SysHandle.IrqFun = (IRQ_FUN) SYSIrqHandle; - SysHandle.Priority = 0; - - InterruptRegister(&SysHandle); - InterruptEn(&SysHandle); - PwrAdapter.WakeEventFlag = _FALSE; -} - -void -SetA33Timer( - IN uint32_t SDuration -) -{ - uint32_t Rtemp = 0; - //uint32_t ScaleTemp = 0; - //uint32_t PeriodTemp = 0; - uint32_t UTemp = 0; - uint32_t MaxTemp = 0; - - //2 Deep Sleep mode: - //3 2.1 Set TU timer timescale - - //3 2.2 Configure deep sleep timer: - //2.2.1 Enable REGU access interface 0x4000_0094[31] = 1 - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) | 0x80000000); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.2 Calibration A33 CLK - UTemp = CLKCal(A33CK); -#if CONFIG_DEBUG_LOG > 3 - DiagPrintf("CAL : 0x%x\n", UTemp); -#endif - //Calculate the max value base on the a33 duration - MaxTemp = 0x7FFFFF*0x100/100000*UTemp/100*0x80; -#if CONFIG_DEBUG_LOG > 3 - DiagPrintf("MaxTemp : 0x%x\n", MaxTemp); -#endif - if ( SDuration >= MaxTemp ) { - SDuration = 0x7FFFFF; - } - else { - //In unit of A33 CLK : max num is bounded by anaclk = 1.5k - SDuration = ((((SDuration)/UTemp)*25/16*25/16*125)); -#if CONFIG_DEBUG_LOG > 3 - DiagPrintf("SDuration : 0x%x\n", SDuration); -#endif - } - - //3 2.2.2 Initialize deep sleep counter - //2.2.2.1 0x4000_0094[15:0] = 16'h9008 => set counter[7:0] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009000 | ((uint8_t)SDuration)); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.2.2 0x4000_0094[15:0] = 16'h9100 => set counter[15:8] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009100 | ((uint8_t)(SDuration >> 8))); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.2.3 0x4000_0094[15:0] = 16'h9200 => set counter[22:16] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009200 | ((uint8_t)(SDuration >> 16))); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.2.4 0x4000_0094[15:0] = 16'hD380 => Enable deep sleep counter - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x0000D380); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); -#if CONFIG_DEBUG_LOG > 3 - DiagPrintf("a33 timer : 0x%x\n", HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CAL_CTRL)); -#endif -} - - -void -PrintCPU( - void -) -{ - -#if CONFIG_DEBUG_LOG > 33 - DiagPrintf("r13 : 0x%x\n", PwrAdapter.CPURegbackup[24]); - DiagPrintf("pc : 0x%x\n", PwrAdapter.CPURegbackup[23]); - DiagPrintf("control : 0x%x\n", PwrAdapter.CPURegbackup[22]); - DiagPrintf("psp : 0x%x\n", PwrAdapter.CPURegbackup[21]); - DiagPrintf("msp : 0x%x\n", PwrAdapter.CPURegbackup[20]); -#endif - - #if 0 - uint8_t i; - for (i = 0; i < 21; i++){ - PwrAdapter.CPURegbackup[i] = ( * ( ( volatile unsigned long * ) (PwrAdapter.CPURegbackup[24]+(i*4)) ) ); - } - #endif - - uint8_t i; - for (i = 0; i < 25; i++){ - DiagPrintf("CPURegbackup_idx : %d , 0x%x\n", i, PwrAdapter.CPURegbackup[i]); - } - - - #if 1 - for (i = 0; i < 21; i++) { - DiagPrintf("backup_idx : 0x%x , 0x%x\n", PwrAdapter.CPUPSP+(i*4),( * ( ( volatile unsigned long * ) (PwrAdapter.CPUPSP+(i*4)) ) ));//CPURegbackup[1] - } - #endif - -#if CONFIG_DEBUG_LOG > 33 - { - uint32_t cpupspc; - asm volatile - ( - "MRS %0, PSP\n" - :"=r"(cpupspc) - ::"memory" - ); - for (i = 0; i < 21; i++) { - DiagPrintf("stack addr : 0x%x , 0x%x\n", (cpupspc+(i*4)),( * ( ( volatile unsigned long * ) (cpupspc+(i*4)) ) ));//CPURegbackup[1] - } - } -#endif -} - - -void -SoCPSMEMTestInit( - IN uint32_t StartAddr, - IN uint32_t Length, - IN uint32_t Pattern -) -{ - uint32_t Idx; - for( Idx = 0; Idx < Length; Idx += 4 ){ - - HAL_WRITE32(StartAddr,Idx,Pattern); - } -} - -uint8_t -SoCPSMEMTestChk( - IN uint32_t StartAddr, - IN uint32_t Length, - IN uint32_t Pattern -) -{ - uint32_t Idx; - - for( Idx = 0; Idx < Length; Idx += 4 ){ - if (HAL_READ32(StartAddr,Idx) != Pattern) { - DiagPrintf("addr 0x%x fail\n", (StartAddr+Idx)); - return 0; - } - } - DiagPrintf("addr 0x%x pass\n", StartAddr); - return 1; -} - - -void -SoCPWRIdleTaskHandleTest( - void -) -{ - static uint32_t IdleTemp = 0; - uint32_t Rtemp,Rtemp1,Rtemp2; - uint8_t RRtemp,CMDTemp[8],Chktemp; - - if (0){//(HAL_READ8(SYSTEM_CTRL_BASE,REG_SOC_SYSON_DSTBY_INFO0) == 0x0) { - - IdleTemp++; - HalDelayUs(1000); - - if (IdleTemp >= 15000) { - DiagPrintf("\n"); - DiagPrintf("Go to sleep ~~~~ \n"); - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SYS_DSTBY_INFO0,0x12345678); - DiagPrintf("0xf0 : 0x%x\n",HAL_READ32(SYSTEM_CTRL_BASE,REG_SYS_DSTBY_INFO0)); - //a33 reg chk - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) | 0x80000000); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, 0x80008400); - HalDelayUs(1000); - if ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL)&BIT15)==0){ - RRtemp = ((uint8_t)HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL))+1; - } - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009400|RRtemp); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - DiagPrintf("a33 0x4 : 0x%x\n",RRtemp); - - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, 0x80008500); - HalDelayUs(1000); - if ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL)&BIT15)==0){ - DiagPrintf("a33 0x5 before : 0x%x\n", HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL)); - RRtemp = ((uint8_t)HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL))+1; - } - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009500|RRtemp); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - DiagPrintf("a33 0x5 : 0x%x\n",RRtemp); - - ChangeSoCPwrState(7,0xE8800); - } - } - - ////debug - if (PwrAdapter.SleepFlag) { - PwrAdapter.SleepFlag = 0; - HAL_WRITE32(SYSTEM_CTRL_BASE,0x234, 0xdddddddd); - DiagPrintf("0x234 before slp : %x\n", HAL_READ32(SYSTEM_CTRL_BASE,0x234)); - //cal 32k - //En32KCalibration(); - HalDelayUs(1000); - - ChangeSoCPwrState(5,0xb000); - //HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SOC_SYSON_DSTBY_INFO1, PwrAdapter.SleepFlag); - } - - if (0){//(HAL_READ8(SYSTEM_CTRL_BASE,REG_SOC_SYSON_DSTBY_INFO0) == 0x0) { - - IdleTemp++; - HalDelayUs(1000); - if (IdleTemp > 0xfffff){ - IdleTemp = 0; - __WFI(); - } - } - - if (0){ //((HAL_READ8(SYSTEM_CTRL_BASE,REG_SOC_SYSON_DSTBY_INFO0) == 0x0)) { - IdleTemp++; - HalDelayUs(1000); - if ((IdleTemp > 5000)||(HAL_READ8(SYSTEM_CTRL_BASE,REG_SYS_DSTBY_INFO0+1) == 0x12)){ - - DiagPrintf("\n"); - DiagPrintf("0x20080000 : 0x%x\n", HAL_READ32(0x20080000,0)); - DiagPrintf("0x20080004 : 0x%x\n", HAL_READ32(0x20080000,4)); - DiagPrintf("0x2009F404 : 0x%x\n", HAL_READ32(0x2009F400,4)); - DiagPrintf("0x2009F408 : 0x%x\n", HAL_READ32(0x2009F400,8)); - DiagPrintf("\n"); - - HAL_WRITE32(PERI_ON_BASE,0x330,0x55559555);//0x55552a2a - //slp pg GPIOD GPIOE - HAL_WRITE32(PERI_ON_BASE,0x334,0x55555555); - HAL_WRITE32(PERI_ON_BASE,0x338,0x05555555); - HAL_WRITE32(PERI_ON_BASE,0x33c,0x55555555); - HAL_WRITE32(PERI_ON_BASE,0x340,0x55555555); - HAL_WRITE32(PERI_ON_BASE,0x344,0x55555555); - HAL_WRITE32(PERI_ON_BASE,0x320,0x0); - - HAL_WRITE32(0x20080000, 0, (HAL_READ32(0x20080000,0)+1)); - HAL_WRITE32(0x20080000, 4, (HAL_READ32(0x20080000,4)+1)); - HAL_WRITE32(0x2009F404, 0, (HAL_READ32(0x2009F400,4)+1)); - HAL_WRITE32(0x2009F408, 0, (HAL_READ32(0x2009F400,8)+1)); - HalDelayUs(10000); - ChangeSoCPwrState(SLPPG, 0xFFFFF); - } - } - //mem test - if (HAL_READ8(SYSTEM_CTRL_BASE,0xf1) == 0xaa) { - - CMDTemp[0] = 8; - SOCPSTestApp((void*)CMDTemp); - Rtemp = HAL_READ32(WIFI_REG_BASE,0x824); - Rtemp2 = Rtemp; - Rtemp2 = ((Rtemp2 & 0x807fffff) | 0x80000000); - HAL_WRITE32(WIFI_REG_BASE,0x824,Rtemp&0x7fffffff); - HAL_WRITE32(WIFI_REG_BASE,0x824,Rtemp2); - HAL_WRITE32(WIFI_REG_BASE,0x824,(Rtemp|0x80000000)); - Rtemp1 = HAL_READ32(WIFI_REG_BASE,0x820)&BIT8; - if (Rtemp1) { - Rtemp = HAL_READ32(WIFI_REG_BASE,0x8b8)&0xfffff; - } - else { - Rtemp = HAL_READ32(WIFI_REG_BASE,0x8a0)&0xfffff; - } - if(Rtemp== 0x00045678){ - Chktemp = 1; - } - - Chktemp &= SoCPSMEMTestChk(0x20010000,0x20000,0x12345678)&SoCPSMEMTestChk(0x200a0000,0x0FFE0,0x12345678) - &SoCPSMEMTestChk(0x1FFF4000,0x5000,0x12345678); - - if (Chktemp) { - HAL_WRITE32(WIFI_REG_BASE,0x4,(HAL_READ32(WIFI_REG_BASE,0x4)&0xFFFFFFF0)); - HAL_WRITE32(SYSTEM_CTRL_BASE,0xfc,(HAL_READ32(SYSTEM_CTRL_BASE,0xfc)+1)); - DiagPrintf("run %d times\n", HAL_READ32(SYSTEM_CTRL_BASE,0xfc)); - CMDTemp[0] = 1; - CMDTemp[1] = 5; - CMDTemp[2] = 0xff; - SOCPSTestApp((void*)CMDTemp); - } - else { - HAL_WRITE32(SYSTEM_CTRL_BASE,0xf0,0); - } - - } -} - -//30 -void -TimerHandleTset( - IN void *Data -) -{ - #if 0 - //static uint32_t temp = 0; - TIMER_ADAPTER TimerAdapter; - - TimerAdapter.IrqDis = OFF; - //TimerAdapter.IrqHandle = (IRQ_FUN) TimerHandleTset; - TimerAdapter.IrqHandle.IrqFun = (IRQ_FUN) TimerHandleTset; - //DBG_8195A("IrqFun : 0x%x\n", TimerAdapter.IrqHandle.IrqFun); - TimerAdapter.IrqHandle.IrqNum = TIMER2_7_IRQ; - TimerAdapter.IrqHandle.Priority = 0; - TimerAdapter.IrqHandle.Data = NULL; - TimerAdapter.TimerId = 2; - TimerAdapter.TimerIrqPriority = 0; - TimerAdapter.TimerLoadValueUs = 4000; - TimerAdapter.TimerMode = USER_DEFINED; - //temp++; - //DBG_8195A("time : 0x%x\n", temp); - - HalTimerOp.HalTimerInit((void*) &TimerAdapter); - #endif - DBG_8195A("<<< time out >>>\n"); -} - -extern IRQ_FUN Timer2To7VectorTable[6]; - -//30 -void -InitTimerTest( - //IN void *Data - void -) -{ - //[0]:type, [1]: timerID, [2]: timerMode, [3]: IrqDIS, [4]:period - TIMER_ADAPTER TimerAdapter; - //uint32_t *TestParameter; - - //TestParameter = (uint32_t*) Data; - - TimerAdapter.IrqDis = 0; // off :0 - //TimerAdapter.IrqHandle = (IRQ_FUN) TimerHandleTset; - TimerAdapter.IrqHandle.IrqFun = (IRQ_FUN) TimerHandleTset; - //DBG_8195A("IrqFun : 0x%x\n", TimerAdapter.IrqHandle.IrqFun); - TimerAdapter.IrqHandle.IrqNum = TIMER2_7_IRQ; - TimerAdapter.IrqHandle.Priority = 0; - TimerAdapter.IrqHandle.Data = NULL; - TimerAdapter.TimerId = 5; - TimerAdapter.TimerIrqPriority = 0; - TimerAdapter.TimerLoadValueUs = 0x4EC14; - TimerAdapter.TimerMode = 1; // user_define :1 - - - //mer2To7VectorTable[0] = (IRQ_FUN) TimerHandleTset; - - HalTimerOp.HalTimerInit((void*) &TimerAdapter); - //mer2To7VectorTable[0] = (IRQ_FUN) TimerHandleTset; - - -} - - -void -GpioPsPullCtrl( - void -) -{ - gpio_t gpio_obj; - - gpio_init(&gpio_obj, PA_0); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PA_1); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PA_2); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PA_3); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PA_4); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PA_5); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PA_6); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PA_7); - gpio_mode(&gpio_obj, PullDown); - - gpio_init(&gpio_obj, PB_0); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PB_1); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PB_2); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PB_3); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PB_4); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PB_5); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PB_6); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PB_7); - gpio_mode(&gpio_obj, PullDown); - - gpio_init(&gpio_obj, PC_0); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PC_1); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PC_2); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PC_3); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PC_4); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PC_5); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PC_6); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PC_7); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PC_8); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PC_9); - gpio_mode(&gpio_obj, PullDown); - - gpio_init(&gpio_obj, PD_0); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PD_1); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PD_2); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PD_3); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PD_4); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PD_5); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PD_6); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PD_7); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PD_8); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PD_9); - gpio_mode(&gpio_obj, PullDown); - - gpio_init(&gpio_obj, PE_0); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PE_1); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PE_2); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PE_3); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PE_4); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PE_5); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PE_6); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PE_7); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PE_8); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PE_9); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PE_A); - gpio_mode(&gpio_obj, PullDown); - - gpio_init(&gpio_obj, PF_0); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PF_1); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PF_2); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PF_3); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PF_4); - gpio_mode(&gpio_obj, PullDown); - gpio_init(&gpio_obj, PF_5); - gpio_mode(&gpio_obj, PullDown); - - gpio_init(&gpio_obj, PG_0); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PG_1); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PG_2); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PG_3); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PG_4); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PG_5); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PG_6); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PG_7); - gpio_mode(&gpio_obj, PullUp); - - gpio_init(&gpio_obj, PH_0); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PH_1); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PH_2); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PH_3); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PH_4); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PH_5); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PH_6); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PH_7); - gpio_mode(&gpio_obj, PullUp); - - gpio_init(&gpio_obj, PI_0); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PI_1); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PI_2); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PI_3); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PI_4); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PI_5); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PI_6); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PI_7); - gpio_mode(&gpio_obj, PullUp); - - gpio_init(&gpio_obj, PJ_0); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PJ_1); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PJ_2); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PJ_3); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PJ_4); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PJ_5); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PJ_6); - gpio_mode(&gpio_obj, PullUp); - - - gpio_init(&gpio_obj, PK_0); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PK_1); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PK_2); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PK_3); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PK_4); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PK_5); - gpio_mode(&gpio_obj, PullUp); - gpio_init(&gpio_obj, PK_6); - gpio_mode(&gpio_obj, PullUp); -} - - -void -SOCPSTestApp( - void *Data -) -{ - uint32_t *TestParameter; - TestParameter = (uint32_t*) Data; - unsigned int Rtemp, Rtemp1, Rtemp2;//, CalTemp32k, CalTempa33; - static uint32_t Read32k5 = 0; - static uint32_t Reada335 = 0; - DiagPrintf("TestParameter[0]: 0x%x\n",TestParameter[0]); - - switch (TestParameter[0]) { - - case 0: - DiagPrintf("SoC PWR Init wlan\n"); - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_HCI_COM_FUNC_EN)|BIT_SOC_HCI_WL_MACON_EN; - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SOC_HCI_COM_FUNC_EN,Rtemp); - - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE,REG_PESOC_COM_CLK_CTRL1)|BIT_SOC_ACTCK_WL_EN; - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_PESOC_COM_CLK_CTRL1,Rtemp); - - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_FUNC_EN)|BIT_SOC_LXBUS_EN; - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SOC_FUNC_EN,Rtemp); - - HalDelayUs(100); - - Rtemp = HAL_READ32(WIFI_REG_BASE,0x0)|BIT0; - HAL_WRITE32(WIFI_REG_BASE,0x0,Rtemp); - #if 0 - DiagPrintf("SoC PWR debug setting\n"); - Rtemp = 0; - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_GPIO_PULL_CTRL3,Rtemp); - - Rtemp = 0; - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_GPIO_PULL_CTRL1,Rtemp); - - #if 0 - //en debug - Rtemp = 1;//HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_SYS_DEBUG_CTRL); - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SOC_SYS_DEBUG_CTRL,Rtemp); - - //debug port sel - Rtemp = 0xf0f10004;//HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_EFUSE_SYSCFG3)|0xf0000000; - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SOC_EFUSE_SYSCFG3, Rtemp); - #endif - - //cal 32k - //En32KCalibration(); - - //en gpio - GPIO_FCTRL(ON); - SLPCK_GPIO_CCTRL(ON); - ACTCK_GPIO_CCTRL(ON); - - //DiagPrintf("debug sel 0x2C : 0x%x\n", HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_EFUSE_SYSCFG3)); - //DiagPrintf("debug EN 0xA0 : 0x%x\n", HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_SYS_DEBUG_CTRL)); - //DiagPrintf("PULL CTRL 0x33c: 0x%x\n", HAL_READ32(SYSTEM_CTRL_BASE,0x33C)); - //DiagPrintf("debug port : 0x%x\n", HAL_READ32(SYSTEM_CTRL_BASE,REG_SOC_SYS_DEBUG_REG)); - DiagPrintf("0x90 : 0x%x\n", HAL_READ32(SYSTEM_CTRL_BASE,0x90)); - #endif - break; - - case 1: - DiagPrintf("SoC PWR TEST : Enter = %d, Period = %d\n",TestParameter[1], TestParameter[2]); - Rtemp = HalTimerOp.HalTimerReadCount(1); - //GPIO - //HAL_WRITE32(0x40001000,0x4,0x4000000); - - //SIC EN - //HAL_WRITE32(SYSTEM_CTRL_BASE,0x8,0x81000010); - //HAL_WRITE32(SYSTEM_CTRL_BASE,0xA4,0x00000001); - - //Wait for LogUart print out - while(1) { - HalDelayUs(100); - if (HAL_READ8(LOG_UART_REG_BASE,0x14)&BIT6){ - break; - } - } - - #if 0 - - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_PULL_CTRL0,0x55559555);//0x55552a2a - //slp pg GPIOD GPIOE - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_PULL_CTRL1,0x55555555); - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_PULL_CTRL2,0x05555555); - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_PULL_CTRL3,0x55555555); - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_PULL_CTRL4,0x55555555); - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_PULL_CTRL5,0x55555555); - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_SHTDN_CTRL,0x0); - #endif - - ChangeSoCPwrState(TestParameter[1], TestParameter[2]); - - Rtemp2 = HalTimerOp.HalTimerReadCount(1); - DiagPrintf("before : %x\n", Rtemp); - DiagPrintf("after : %x\n", Rtemp2); - DiagPrintf("period : %d\n", Rtemp-Rtemp2); - DiagPrintf("0x90 : 0x%x\n", HAL_READ32(SYSTEM_CTRL_BASE,0x90)); - break; - - case 2: - #if 1 - - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_SHTDN_CTRL,0x7ff); - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_PULL_CTRL0,0x5565A555); - //slp pg GPIOD GPIOE - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_PULL_CTRL1,0x55555555); - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_PULL_CTRL2,0x05555555); - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_PULL_CTRL3,0x55555555); - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_PULL_CTRL4,0x55555555); - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_PULL_CTRL5,0x55555555); - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_PULL_CTRL6,0x55555555); - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_SHTDN_CTRL,0x0); - - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SYS_FUNC_EN,0x80000011); - #endif - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION, TestParameter[1]); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION_EXT, TestParameter[2]); - - if (TestParameter[4] == 0xff) { - //SIC EN - HAL_WRITE32(PERI_ON_BASE,REG_GPIO_SHTDN_CTRL,0x4); - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SYS_FUNC_EN,0xC1000010); - HAL_WRITE32(SYSTEM_CTRL_BASE,REG_SYS_PINMUX_CTRL,0x00000001); - } - - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, TestParameter[3]); - #if 0 - //clear isr - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SOC_SYS_ANA_TIM_CTRL)& 0xffff7fff)); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SOC_SYS_ANA_TIM_CTRL, Rtemp); - - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SOC_SYSON_SLP_WAKE_EVENT_STATUS0); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SOC_SYSON_SLP_WAKE_EVENT_STATUS0, Rtemp); - #endif - break; - - case 3: - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION, 0x74000e00); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_OPTION_EXT, 2); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, TestParameter[1]); - #if 0 - { - uint32_t targetunit = 0; - - //cal a33 - Rtemp = CLKCal(A33CK); - - targetunit = (TestParameter[1]/3*250)/Rtemp*50; - if (targetunit > 0x7fffff) { - targetunit = 0x7fffff; - } - - DBG_8195A("targeunit = 0x%08x\n",targetunit); - - targetunit = (50*TestParameter[1]/Rtemp)*250/3; - if (targetunit > 0x7fffff) { - targetunit = 0x7fffff; - } - - DBG_8195A("targeunit = 0x%08x\n",targetunit); - - - } - #endif - #if 0 - //cal a33 - Rtemp = CLKCal(A33CK); - Rtemp1 = (((((TestParameter[1] & 0x0FFFFFFF)<<4)/Rtemp)*20)-1); - DiagPrintf("Rtemp : 0x%x\n", Rtemp); - DiagPrintf("Vendor 0xA0 : 0x%x\n", HAL_READ32(VENDOR_REG_BASE,0xA0)); - DiagPrintf("way1 : 0x%x\n", Rtemp1); - Rtemp2 = (((((TestParameter[1] & 0x0FFFFFFF))/Rtemp)*320)-1); - DiagPrintf("way2 : 0x%x\n", Rtemp2); - - Rtemp = Rtemp1/6; - DiagPrintf("Rtemp1 : %d\n", Rtemp); - Rtemp = 0x7fffffff; - DiagPrintf("Rtemp1 : %d\n", Rtemp); - #endif - break; - - case 4: - DiagPrintf("set timer\n"); - SetA33Timer(TestParameter[1]); - Rtemp = HalTimerOp.HalTimerReadCount(1); - DiagPrintf("32k timer : 0x%x\n", Rtemp); - break; - - case 5: - DiagPrintf("read timer\n"); - Reada335 = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CAL_CTRL); - DiagPrintf("a33 timer : 0x%x\n", Reada335); - Read32k5 = HalTimerOp.HalTimerReadCount(1); - DiagPrintf("32k timer : 0x%x\n", Read32k5); - break; - - case 6: - #if 0 - DiagPrintf("interval cal\n"); - Rtemp1 = HAL_READ32(SYSTEM_CTRL_BASE, REG_SOC_SYS_DSLP_TIM_CAL_CTRL); - Rtemp2 = HalTimerOp.HalTimerReadCount(1); - DiagPrintf("Reada335 : 0x%x\n", Reada335); - DiagPrintf("Read32k5 : 0x%x\n", Read32k5); - DiagPrintf("a33 timer : 0x%x\n", Rtemp1); - DiagPrintf("32k timer : 0x%x\n", Rtemp2); - CalTemp32k = (Read32k5 - Rtemp2); - CalTempa33 = (((Reada335 - Rtemp1)*((HAL_READ32(VENDOR_REG_BASE, REG_VDR_ANACK_CAL_CTRL) & 0x3FFF)+1))/5); - DiagPrintf("a33 timer interval : 0x%x\n", CalTempa33); - DiagPrintf("32k timer interval : 0x%x\n", CalTemp32k); - Read32k5 = Rtemp2; - Reada335 = Rtemp1; - #endif - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) & 0xffff7000) | 0x7ff); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); - - //0x4000_0090[15] = 1'b1 => Enable timer - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL) | 0x00008000; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_ANA_TIM_CTRL, Rtemp); - - Rtemp = 0x00000001; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SLP_WAKE_EVENT_MSK0, Rtemp); -#if 0 - HAL_WRITE32(PERI_ON_BASE,0x330,0x55559555);//0x55552a2a - HAL_WRITE32(PERI_ON_BASE,0x2C0,0x100001); - //slp pg GPIOD GPIOE - HAL_WRITE32(PERI_ON_BASE,0x334,0x55555555); - HAL_WRITE32(PERI_ON_BASE,0x338,0x05555555); - HAL_WRITE32(PERI_ON_BASE,0x33c,0x55555555); - HAL_WRITE32(PERI_ON_BASE,0x340,0x55555555); - HAL_WRITE32(PERI_ON_BASE,0x344,0x55555555); - HAL_WRITE32(PERI_ON_BASE,0x320,0x0); -#endif - HAL_WRITE32(SYSTEM_CTRL_BASE, 0X120, TestParameter[1]); - HAL_WRITE32(SYSTEM_CTRL_BASE, 0X124, TestParameter[2]); - - if (HAL_READ32(SYSTEM_CTRL_BASE,0xf4) == 0x11) { - HAL_WRITE32(SYSTEM_CTRL_BASE,0x8,0x80000011); - } - - if (TestParameter[4] == 0xff) { - //SIC EN - HAL_WRITE32(SYSTEM_CTRL_BASE,0x8,0x81000010); - HAL_WRITE32(SYSTEM_CTRL_BASE,0xA4,0x00000001); - } - - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, TestParameter[3]); - break; - - case 7: - { - uint32_t Rtemp = 0; - uint32_t UTemp = 0; - uint32_t MaxTemp = 0; - uint32_t Reada335 = 0; - - //2 Deep Sleep mode: - //3 2.1 Set TU timer timescale - - //3 2.2 Configure deep sleep timer: - //2.2.1 Enable REGU access interface 0x4000_0094[31] = 1 - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) | 0x80000000); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - DiagPrintf("SDuration : 0x%x\n", TestParameter[1]); - - //3 2.2.2 Initialize deep sleep counter - //2.2.2.0 0x4000_0094[15:0] = 16'hD300 => Disable deep sleep counter - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x0000D300); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - //2.2.2.1 0x4000_0094[15:0] = 16'h9008 => set counter[7:0] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009000 | ((uint8_t)TestParameter[1])); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.2.2 0x4000_0094[15:0] = 16'h9100 => set counter[15:8] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009100 | ((uint8_t)(TestParameter[1] >> 8))); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.2.3 0x4000_0094[15:0] = 16'h9200 => set counter[22:16] - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009200 | ((uint8_t)(TestParameter[1] >> 16))); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //2.2.2.4 0x4000_0094[15:0] = 16'hD380 => Enable deep sleep counter - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x0000D380); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - HalDelayUs(1000); - Reada335 = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CAL_CTRL); - DiagPrintf("a33 timer : 0x%x\n", Reada335); - - HalDelayUs(8000); - - //3 2.2.3 - //2.3 Enable low power mode: 0x4000_0118[0] = 1'b1; - Rtemp = BIT_SYSON_PM_CMD_DSLP;//HAL_READ32(SYSTEM_CTRL_BASE, REG_SYSON_PWRMGT_CTRL) | 0x00000001; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PWRMGT_CTRL, Rtemp); - - //2.4 Wait CHIP enter deep sleep mode - //2.5 Wait deep sleep counter timeout - //__WFI(); - -// DiagPrintf("YOU CAN'T SEE ME ~~~~!!!!!!!!!!!!!!!!!!!~~~~~~~~~~~~~~~!!!!!!!!!!"); - } - break; - - case 8: - DiagPrintf("enable wifi\n"); - - Rtemp = HAL_READ32(PERI_ON_BASE,REG_SOC_HCI_COM_FUNC_EN)|BIT_SOC_HCI_WL_MACON_EN; - HAL_WRITE32PERI_ON_BASE,REG_SOC_HCI_COM_FUNC_EN,Rtemp); - Rtemp = HAL_READ32(PERI_ON_BASE,REG_PESOC_COM_CLK_CTRL1)|BIT_SOC_ACTCK_WL_EN; - HAL_WRITE32(PERI_ON_BASE,REG_PESOC_COM_CLK_CTRL1,Rtemp); - Rtemp = HAL_READ32(PERI_ON_BASE,REG_SOC_FUNC_EN)|BIT_SOC_LXBUS_EN; - HAL_WRITE32(PERI_ON_BASE,REG_SOC_FUNC_EN,Rtemp); - - Rtemp = HAL_READ32(WIFI_REG_BASE,0x0)&0xFFFFFFDF; - HAL_WRITE32(WIFI_REG_BASE,0x0,Rtemp); - Rtemp = HAL_READ32(WIFI_REG_BASE,0x4)|0x1; - HAL_WRITE32(WIFI_REG_BASE,0x4,Rtemp); - Rtemp = HAL_READ32(WIFI_REG_BASE,0x20)|0x1; - HAL_WRITE32(WIFI_REG_BASE,0x20,Rtemp); - while( (HAL_READ32(WIFI_REG_BASE,0x20)&BIT0)!=0); - - Rtemp = HAL_READ32(WIFI_REG_BASE,0x4)|0x30000; - HAL_WRITE32(WIFI_REG_BASE,0x4,Rtemp); - Rtemp = HAL_READ32(WIFI_REG_BASE,0x4)|0x7000000; - HAL_WRITE32(WIFI_REG_BASE,0x4,Rtemp); - Rtemp = HAL_READ32(WIFI_REG_BASE,0x50)&0xFFFFFF00; - HAL_WRITE32(WIFI_REG_BASE,0x50,Rtemp); - break; - - case 9: - #if 0 - PwrAdapter.CPURegbackup[13] = 0x12340; - PwrAdapter.CPUPSP = PwrAdapter.CPURegbackup[13]; - - asm volatile - ( - - " ldr r3, pxCPUPSPConst23 \n" /* Restore the context. */ - "MOV %0, r3\n" - " ldr r1, [r3] \n" /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */ - "MOV %1, r1\n" - " ldr r0, [r1] \n" - "MOV %2, r0\n" - " .align 2 \n" - "pxCPUPSPConst23: .word PwrAdapter.CPUPSP \n" - :"=r"(PwrAdapter.CPURegbackup[0]),"=r"(PwrAdapter.CPURegbackup[1]),"=r"(PwrAdapter.CPURegbackup[2]),"=r"(PwrAdapter.CPURegbackup[3]) - :"r"(PwrAdapter.CPUPSP) - :"memory" - ); - PrintCPU(); - #endif - break; - - case 10: - Rtemp = HAL_READ32(WIFI_REG_BASE,0x824); - Rtemp2 = Rtemp; - Rtemp2 = Rtemp2 & 0x807fffff | (TestParameter[1]<<23) | 0x80000000; - HAL_WRITE32(WIFI_REG_BASE,0x824,Rtemp&0x7fffffff); - HAL_WRITE32(WIFI_REG_BASE,0x824,Rtemp2); - HAL_WRITE32(WIFI_REG_BASE,0x824,Rtemp|0x80000000); - Rtemp1 = HAL_READ32(WIFI_REG_BASE,0x820)&BIT8; - if (Rtemp1) { - Rtemp = HAL_READ32(WIFI_REG_BASE,0x8b8)&0xfffff; - } - else { - Rtemp = HAL_READ32(WIFI_REG_BASE,0x8a0)&0xfffff; - } - DiagPrintf("rf offset: 0x%x, 0x%x\n", TestParameter[1], Rtemp); - break; - - case 11://addr [1]; date [2] - TestParameter[1] &= 0x3f; - Rtemp = (TestParameter[1]<<20)|(TestParameter[2]&0x000fffff)&0x0fffffff; - HAL_WRITE32(WIFI_REG_BASE,0x840,Rtemp); - - //SoCPWRIdleTaskHandle(); - break; - - case 12: - SoCPSMEMTestInit(TestParameter[1],TestParameter[2],TestParameter[3]); - break; - - case 13: - Rtemp = SoCPSMEMTestChk(TestParameter[1],TestParameter[2],TestParameter[3]); - break; - - case 14: - HAL_WRITE32(SYSTEM_CTRL_BASE,TestParameter[1],0x12345678); - DiagPrintf("w32: 0x%x\n", HAL_READ32(SYSTEM_CTRL_BASE,TestParameter[1])); - HAL_WRITE32(SYSTEM_CTRL_BASE,TestParameter[1],0); - HAL_WRITE16(SYSTEM_CTRL_BASE,TestParameter[1],0x1234); - DiagPrintf("w16: 0x%x\n", HAL_READ32(SYSTEM_CTRL_BASE,TestParameter[1])); - HAL_WRITE32(SYSTEM_CTRL_BASE,TestParameter[1],0); - HAL_WRITE8(SYSTEM_CTRL_BASE,TestParameter[1],0x12); - DiagPrintf("w8: 0x%x\n", HAL_READ32(SYSTEM_CTRL_BASE,TestParameter[1])); - HAL_WRITE32(SYSTEM_CTRL_BASE,TestParameter[1],0x12345678); - DiagPrintf("R32: 0x%x\n", HAL_READ32(SYSTEM_CTRL_BASE,TestParameter[1])); - DiagPrintf("R16: 0x%x\n", HAL_READ16(SYSTEM_CTRL_BASE,TestParameter[1])); - DiagPrintf("R8: 0x%x\n", HAL_READ8(SYSTEM_CTRL_BASE,TestParameter[1])); - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE,0xf4))?1:0); - DiagPrintf("R: 0x%x\n", Rtemp); - break; - - case 15: - asm volatile - ( - "MRS R0, BASEPRI\n" - "MOV %0, R0\n" - :"=r"(Rtemp) - ::"memory" - ); - DiagPrintf("basepri: 0x%x\n", Rtemp); - break; - case 16: - HalDelayUs(10000000); - DSleep_GPIO(); - break; - case 17: - DSleep_Timer(TestParameter[1]); - break; - case 18: - DiagPrintf("WDG CAL\n"); - { - uint8_t CountId; - uint16_t DivFactor; - uint32_t CountTemp; - uint32_t CountProcess = 0; - uint32_t DivFacProcess = 0; - uint32_t MinPeriodTemp = 0xFFFFFFFF; - uint32_t PeriodTemp = 0; - - DBG_8195A(" Period = %d\n", TestParameter[1]); - - for (CountId = 0; CountId < 12; CountId++) { - CountTemp = ((0x00000001 << (CountId+1))-1); - DivFactor = (uint16_t)((100*TestParameter[1])/(CountTemp*3)); - - if (DivFactor > 0) { - PeriodTemp = 3*(DivFactor+1)*CountTemp; - DBG_8195A("PeriodTemp = %d\n", PeriodTemp); - if ((100*TestParameter[1]) PeriodTemp) { - MinPeriodTemp = PeriodTemp; - CountProcess = CountTemp; - DivFacProcess = DivFactor; - } - } - } - } - DBG_8195A("MinPeriodTemp = %d\n", MinPeriodTemp); - DBG_8195A("WdgScalar = 0x%08x\n", DivFacProcess); - DBG_8195A("WdgCunLimit = 0x%08x\n", CountProcess); - } - break; - - case 19: - DBG_8195A("DeepStandby~~~\n"); - DeepStandby(TestParameter[1],TestParameter[2],TestParameter[3]); - break; - - case 20: - DBG_8195A("SleepCG~~~\n"); - if (TestParameter[1]&BIT1){ - InitTimerTest(); - } - SleepCG(TestParameter[1],TestParameter[2],TestParameter[3],TestParameter[4]); - break; - - case 25: - { - //dslp - DBG_8195A("DSLP~~~\n"); - - HalDelayUs(3000000); - - GpioPsPullCtrl(); - - DeepSleep(TestParameter[1],TestParameter[2]); - } - break; - - case 26: - //dstby - DBG_8195A("DSTBY~~~\n"); - - GpioPsPullCtrl(); - - DeepStandby(TestParameter[1],TestParameter[2],TestParameter[3]); - break; - - case 28: - //slpcg - DBG_8195A("SLPCG~~~\n"); - while(1) { - - HalDelayUs(100); - - if (HAL_READ8(LOG_UART_REG_BASE,0x14)&BIT6){ - - break; - } - } - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_CPU_PERIPHERAL_CTRL, 0x0); - - GpioPsPullCtrl(); - - SleepCG(TestParameter[2],TestParameter[3],TestParameter[4],TestParameter[5]); - break; - - default: - break; - } - - -} -#endif //CONFIG_SOC_PS_VERIFY -#endif //CONFIG_SOC_PS_MODULE - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_soc_ps_monitor.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_soc_ps_monitor.h deleted file mode 100644 index 095d561..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_soc_ps_monitor.h +++ /dev/null @@ -1,279 +0,0 @@ -#ifndef _HAL_SOCPWR_ -#define _HAL_SOCPWR_ - - -#define MAX_BACKUP_SIZE 129 -#define MAXFUNC 10 -#define FSTREG 0xFF - -#define REG_VDR_ANACK_CAL_CTRL 0xA0 - -#define PS_MASK 0xFFFFFFFF - -//pwr state -#define HWACT 0 -#define HWCG 1 -#define HWINACT 2 -#define UNDEF 3 -#define ALLMET 0xff - -//SLP -#define SLP_STIMER BIT0 -#define SLP_GTIMER BIT1 -#define SLP_GPIO BIT2 -#define SLP_WL BIT3 -#define SLP_NFC BIT4 -#define SLP_SDIO BIT5 -#define SLP_USB BIT6 -#define SLP_TIMER33 BIT7 - -//DSTBY -#define DSTBY_STIMER BIT0 -#define DSTBY_NFC BIT1 -#define DSTBY_TIMER33 BIT2 -#define DSTBY_GPIO BIT3 - -//DS wake event -#define DS_TIMER33 BIT0 -#define DS_GPIO BIT1 - -enum power_state_idx{ - ACT = 0, - WFE, - WFI, - SNOOZE, - SLPCG, - SLPPG, - DSTBY, - DSLP, - INACT, - MAXSTATE -}; - -enum clk_idx{ - ANACK = 0, - A33CK = 1, -}; - - -typedef struct _power_state_{ - uint8_t FuncIdx; - uint8_t PowerState; -}POWER_STATE, *pPOWER_STATE; - -typedef struct _reg_power_state_{ - uint8_t FuncIdx; - uint8_t PwrState; -}REG_POWER_STATE, *pPREG_POWER_STATE; - -#if 0 -typedef struct _power_state_{ - uint8_t FuncIdx; - uint8_t PowerState; - uint32_t ReqDuration; - uint32_t RegCount; - uint32_t RemainDuration; -}POWER_STATE, *pPOWER_STATE; - -typedef struct _reg_power_state_{ - uint8_t FuncIdx; - uint8_t PwrState; - uint32_t ReqDuration; - //uint8_t StateIdx; -}REG_POWER_STATE, *pPREG_POWER_STATE; -#endif - -typedef struct _power_mgn_{ - uint8_t ActFuncCount; - POWER_STATE PwrState[MAXFUNC]; - uint8_t CurrentState; - uint8_t SDREn; - uint32_t MSPbackup[MAX_BACKUP_SIZE]; - uint32_t CPURegbackup[25]; - uint32_t CPUPSP; - uint32_t WakeEventFlag; - BOOL SleepFlag; - //uint32_t CPUReg[13]; - //uint32_t MSBackUp[128]; -}Power_Mgn, *pPower_Mgn; - -typedef struct _SYS_ADAPTER_ { - uint8_t function; -}SYS_ADAPTER, *PSYS_ADAPTER; - -extern Power_Mgn PwrAdapter; - -uint8_t ChangeSoCPwrState( - IN uint8_t RequestState, - IN uint32_t ReqCount -); - -void PrintCPU(void); -void WakeFromSLPPG(void); -void SOCPSTestApp(void *Data); - - -__inline static void -CPURegBackUp( - void -) -{ -#if defined (__ICCARM__) - // TODO: IAR has different way using assembly -#elif defined (__GNUC__) - //backup cpu reg - #if 0 - asm volatile - ( - "PUSH {PSR, PC, LR, R12,R3,R2,R1,R0}\n" - ); - #endif - #if 0 - asm volatile - ( - "PUSH {r0,r1,r2,r3,r4}\n" - ); - #endif - - asm volatile - ( - - "MOV %0, r0\n" - :"=r"(PwrAdapter.CPURegbackup[0]) - ::"memory" - ); - - asm volatile - ( - "MOV %0, r1\n" - :"=r"(PwrAdapter.CPURegbackup[1]) - ::"memory" - ); - - asm volatile - ( - "MOV %0, r2\n" - :"=r"(PwrAdapter.CPURegbackup[2]) - ::"memory" - ); - - asm volatile - ( - "MOV %0, r3\n" - :"=r"(PwrAdapter.CPURegbackup[3]) - ::"memory" - ); - - asm volatile - ( - "MOV %0, r4\n" - :"=r"(PwrAdapter.CPURegbackup[4]) - ::"memory" - ); - - asm volatile - ( - "MOV %0, r5\n" - :"=r"(PwrAdapter.CPURegbackup[5]) - ::"memory" - ); - - asm volatile - ( - "MOV %0, r6\n" - :"=r"(PwrAdapter.CPURegbackup[6]) - ::"memory" - ); - - asm volatile - ( - "MOV %0, r7\n" - :"=r"(PwrAdapter.CPURegbackup[7]) - ::"memory" - ); - - asm volatile - ( - "MOV %0, r8\n" - :"=r"(PwrAdapter.CPURegbackup[8]) - ::"memory" - ); - - asm volatile - ( - "MOV %0, r9\n" - :"=r"(PwrAdapter.CPURegbackup[9]) - ::"memory" - ); - - asm volatile - ( - "MOV %0, r10\n" - :"=r"(PwrAdapter.CPURegbackup[10]) - ::"memory" - ); - - asm volatile - ( - "MOV %0, r11\n" - :"=r"(PwrAdapter.CPURegbackup[11]) - ::"memory" - ); - asm volatile - ( - "MOV %0, r12\n" - :"=r"(PwrAdapter.CPURegbackup[12]) - ::"memory" - ); - - asm volatile - ( - "MOV %0, r13\n" - :"=r"(PwrAdapter.CPURegbackup[13]) - ::"memory" - ); - asm volatile - ( - //"MOV %0, r14\n" - "LDR %0, =SLPPG_WAKEUP_POINT\n" - "ADD %0, #1\n" - :"=r"(PwrAdapter.CPURegbackup[14]) - ::"memory" - ); - asm volatile - ( - "LDR %0, =SLPPG_WAKEUP_POINT\n" - "ADD %0, #1\n" - :"=r"(PwrAdapter.CPURegbackup[15]) - ::"memory" - ); - asm volatile - ( - "MRS %0, PSR\n" - :"=r"(PwrAdapter.CPURegbackup[16]) - ::"memory" - ); - -#if 1 - asm volatile - ( - "mov %0, r13\n" - "MOV %1, PC\n" - "MRS %2, CONTROL\n" - "MRS %3, PSP\n" - "MRS %4, MSP\n" - :"=r"(PwrAdapter.CPURegbackup[24]),"=r"(PwrAdapter.CPURegbackup[23]),"=r"(PwrAdapter.CPURegbackup[22]),"=r"(PwrAdapter.CPURegbackup[21]),"=r"(PwrAdapter.CPURegbackup[20]) - ::"memory" - ); -#endif - #ifdef CONFIG_SOC_PS_VERIFY - PrintCPU(); - #endif //#ifdef CONFIG_SOC_PS_VERIFY -#endif //#elif defined (__GNUC__) -} - -extern void RegPowerState(REG_POWER_STATE RegPwrState); -extern void QueryRegPwrState( IN uint8_t FuncIdx, OUT uint8_t* RegState, OUT uint8_t* HwState); - - -#endif //_HAL_SOCPWR_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_spi_flash.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_spi_flash.h deleted file mode 100644 index 0b2f632..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_spi_flash.h +++ /dev/null @@ -1,359 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#ifndef _HAL_SPIFLASH__ -#define _HAL_SPIFLASH__ -//====================================================== -// Header files - -#define SPIC_CALIBRATION_IN_NVM 1 // if store the SPIC calibration data in the NVM -#ifndef CONFIG_IMAGE_SEPARATE // Store SPIC Calibration only for seprated image -#undef SPIC_CALIBRATION_IN_NVM -#define SPIC_CALIBRATION_IN_NVM 0 -#endif - -//====================================================== -// Definition -#define HAL_SPI_WRITE32(addr, value32) HAL_WRITE32(SPI_FLASH_CTRL_BASE, addr, value32) -#define HAL_SPI_WRITE16(addr, value16) HAL_WRITE16(SPI_FLASH_CTRL_BASE, addr, value16) -#define HAL_SPI_WRITE8(addr, value8) HAL_WRITE8(SPI_FLASH_CTRL_BASE, addr, value8) -#define HAL_SPI_READ32(addr) HAL_READ32(SPI_FLASH_CTRL_BASE, addr) -#define HAL_SPI_READ16(addr) HAL_READ16(SPI_FLASH_CTRL_BASE, addr) -#define HAL_SPI_READ8(addr) HAL_READ8(SPI_FLASH_CTRL_BASE, addr) - -typedef struct _SPIC_PARA_MODE_ { - uint8_t Valid :1; // valid - uint8_t CpuClk :3; // CPU clock - uint8_t BitMode :2; // Bit mode - uint8_t Reserved :2; // reserved -} SPIC_PARA_MODE, *PSPIC_PARA_MODE; - -typedef struct _SPIC_INIT_PARA_ { - uint8_t BaudRate; - uint8_t RdDummyCyle; - uint8_t DelayLine; - union { - uint8_t Rsvd; - uint8_t Valid; - SPIC_PARA_MODE Mode; - }; -#if defined(E_CUT_ROM_DOMAIN) || (!defined(CONFIG_RELEASE_BUILD_LIBRARIES)) - uint8_t id[3]; - uint8_t flashtype; -#endif -}SPIC_INIT_PARA, *PSPIC_INIT_PARA; - - -enum _SPIC_BIT_MODE_ { - SpicOneBitMode = 0, - SpicDualBitMode = 1, - SpicQuadBitMode = 2, - SpicMaxMode = 3 -}; - -//====================================================== -// Flash type used -#define FLASH_OTHERS 0 -#define FLASH_MXIC 1 -#define FLASH_MXIC_4IO 2 -#define FLASH_WINBOND 3 -#define FLASH_MICRON 4 -#define FLASH_EON 5 - -//#define FLASH_MXIC_MX25L4006E 0 -//#define FLASH_MXIC_MX25L8073E 1 -//#define FLASH_MICRON_N25Q512A 1 -// The below parts are based on the flash characteristics -//====== Flash Command Definition ====== -//#if FLASH_MICRON_N25Q512A - -/*Common command*/ -#define FLASH_CMD_WREN 0x06 //write enable -#define FLASH_CMD_WRDI 0x04 //write disable -#define FLASH_CMD_WRSR 0x01 //write status register -#define FLASH_CMD_RDID 0x9F //read idenfication -#define FLASH_CMD_RDSR 0x05 //read status register -#define FLASH_CMD_RDSFDP 0x5A //Read SFDP -#define FLASH_CMD_READ 0x03 //read data -#define FLASH_CMD_FREAD 0x0B //fast read data -#define FLASH_CMD_PP 0x02 //Page Program -#define FLASH_CMD_DREAD 0x3B //Double Output Mode command 1-1-2 -#define FLASH_CMD_2READ 0xBB // 2 x I/O read command 1-2-2 -#define FLASH_CMD_QREAD 0x6B // 1I / 4O read command 1-1-4 -#define FLASH_CMD_4READ 0xEB // 4 x I/O read command 1-4-4 -#define FLASH_CMD_DPP 0xA2 // 1-1-2 -#define FLASH_CMD_2PP 0xD2 // 1-2-2 -#define FLASH_CMD_QPP 0x32 // 1-1-4 -#define FLASH_CMD_4PP 0x38 //quad page program 1-4-4 -#define FLASH_CMD_SE 0x20 //Sector Erase -#define FLASH_CMD_BE 0xD8 //Block Erase(or 0x52) -#define FLASH_CMD_CE 0xC7 //Chip Erase(or 0xC7) -#define FLASH_CMD_DP 0xB9 //Deep Power Down -#define FLASH_CMD_RDP 0xAB //Release from Deep Power-Down - -/*Micron Special command*/ -#define FLASH_CMD_DE 0xC4 // DIE ERASE -#define FLASH_CMD_4PP2 0x12 // 4-BYTE PAGE PROGRAM -#define FLASH_CMD_RFSR 0x70 // READ FLAG STATUS REGISTER -#define FLASH_CMD_CFSR 0x50 // CLEAR FLAG STATUS REGISTER -#define FLASH_CMD_RNCR 0xB5 // READ NONVOLATILE CONFIGURATION REGISTER -#define FLASH_CMD_WNCR 0xB1 // WRITE NONVOLATILE CONFIGURATION REGISTER -#define FLASH_CMD_RVCR 0x85 // READ VOLATILE CONFIGURATION REGISTER -#define FLASH_CMD_WVCR 0x81 // WRITE VOLATILE CONFIGURATION REGISTER -#define FLASH_CMD_REVCR 0x65 // READ ENHANCED VOLATILE CONFIGURATION REGISTER -#define FLASH_CMD_WEVCR 0x61 // WRITE ENHANCED VOLATILE CONFIGURATION REGISTER -#define FLASH_CMD_REAR 0xC8 // READ EXTENDED ADDRESS REGISTER -#define FLASH_CMD_WEAR 0xC5 // WRITE EXTENDED ADDRESS REGISTER -#define FLASH_CMD_ENQUAD 0x35 // ENTER QUAD -#define FLASH_CMD_EXQUAD 0xF5 // EXIT QUAD -#define FLASH_CMD_ROTPA 0x4B // READ OTP ARRAY -#define FLASH_CMD_POTPA 0x42 // PROGRAM OTP ARRAY - -/*MXIC Special command*/ -#define FLASH_CMD_RDCR 0x15 //read configurate register -#define FLASH_CMD_REMS2 0xEF // read ID for 2x I/O mode -#define FLASH_CMD_REMS4 0xDF // read ID for 4x I/O mode -#define FLASH_CMD_ENSO 0xB1 // enter secured OTP -#define FLASH_CMD_EXSO 0xC1 // exit secured OTP -#define FLASH_CMD_RDSCUR 0x2B // read security register -#define FLASH_CMD_WRSCUR 0x2F // write security register - -/* EON Special command*/ -#define FLASH_CMD_EOTPM 0x3A // Enter OTP Mode (3Ah) - -//#endif -#if 0 -#if FLASH_MXIC_MX25L4006E - #define FLASH_CMD_WREN 0x06 //write enable - #define FLASH_CMD_WRDI 0x04 //write disable - #define FLASH_CMD_WRSR 0x01 //write status register - #define FLASH_CMD_RDID 0x9F //read idenfication - #define FLASH_CMD_RDSR 0x05 //read status register - #define FLASH_CMD_READ 0x03 //read data - #define FLASH_CMD_FREAD 0x0B //fast read data - #define FLASH_CMD_RDSFDP 0x5A //Read SFDP - #define FLASH_CMD_RES 0xAB //Read Electronic ID - #define FLASH_CMD_REMS 0x90 //Read Electronic Manufacturer & Device ID - #define FLASH_CMD_DREAD 0x3B //Double Output Mode command - #define FLASH_CMD_SE 0x20 //Sector Erase - #define FLASH_CMD_BE 0xD8 //Block Erase(or 0x52) - #define FLASH_CMD_CE 0x60 //Chip Erase(or 0xC7) - #define FLASH_CMD_PP 0x02 //Page Program - #define FLASH_CMD_DP 0xB9 //Deep Power Down - #define FLASH_CMD_RDP 0xAB //Release from Deep Power-Down - #define FLASH_CMD_RDCR 0x15 //read configurate register - #define FLASH_CMD_2READ 0xBB // 2 x I/O read command - #define FLASH_CMD_4READ 0xEB // 4 x I/O read command - #define FLASH_CMD_QREAD 0x6B // 1I / 4O read command - #define FLASH_CMD_4PP 0x38 //quad page program - #define FLASH_CMD_FF 0xFF //Release Read Enhanced - #define FLASH_CMD_REMS2 0xEF // read ID for 2x I/O mode - #define FLASH_CMD_REMS4 0xDF // read ID for 4x I/O mode - #define FLASH_CMD_ENSO 0xB1 // enter secured OTP - #define FLASH_CMD_EXSO 0xC1 // exit secured OTP - #define FLASH_CMD_RDSCUR 0x2B // read security register - #define FLASH_CMD_WRSCUR 0x2F // write security register -#elif FLASH_MXIC_MX25L8073E - #define FLASH_CMD_WREN 0x06 //write enable - #define FLASH_CMD_WRDI 0x04 //write disable - #define FLASH_CMD_WRSR 0x01 //write status register - #define FLASH_CMD_RDID 0x9F //read idenfication - #define FLASH_CMD_RDSR 0x05 //read status register - #define FLASH_CMD_READ 0x03 //read data - #define FLASH_CMD_FREAD 0x0B //fast read data - #define FLASH_CMD_RDSFDP 0x5A //Read SFDP - #define FLASH_CMD_RES 0xAB //Read Electronic ID - #define FLASH_CMD_REMS 0x90 //Read Electronic Manufacturer & Device ID - #define FLASH_CMD_DREAD 0x3B //Double Output Mode command - #define FLASH_CMD_SE 0x20 //Sector Erase - #define FLASH_CMD_BE 0x52 //Block Erase - #define FLASH_CMD_CE 0x60 //Chip Erase(or 0xC7) - #define FLASH_CMD_PP 0x02 //Page Program - #define FLASH_CMD_DP 0xB9 //Deep Power Down - #define FLASH_CMD_RDP 0xAB //Release from Deep Power-Down - #define FLASH_CMD_2READ 0xBB // 2 x I/O read command - #define FLASH_CMD_4READ 0xEB // 4 x I/O read command - #define FLASH_CMD_QREAD 0x6B // 1I / 4O read command - #define FLASH_CMD_4PP 0x38 //quad page program - #define FLASH_CMD_FF 0xFF //Release Read Enhanced - #define FLASH_CMD_REMS2 0xEF // read ID for 2x I/O mode - #define FLASH_CMD_REMS4 0xDF // read ID for 4x I/O mode - #define FLASH_CMD_ENSO 0xB1 // enter secured OTP - #define FLASH_CMD_EXSO 0xC1 // exit secured OTP - #define FLASH_CMD_RDSCUR 0x2B // read security register - #define FLASH_CMD_WRSCUR 0x2F // write security register -#else - #define FLASH_CMD_WREN 0x06 //write enable - #define FLASH_CMD_WRDI 0x04 //write disable - #define FLASH_CMD_WRSR 0x01 //write status register - #define FLASH_CMD_RDID 0x9F //read idenfication - #define FLASH_CMD_RDSR 0x05 //read status register - #define FLASH_CMD_READ 0x03 //read data - #define FLASH_CMD_FREAD 0x0B //fast read data - #define FLASH_CMD_RDSFDP 0x5A //Read SFDP - #define FLASH_CMD_RES 0xAB //Read Electronic ID - #define FLASH_CMD_REMS 0x90 //Read Electronic Manufacturer & Device ID - #define FLASH_CMD_DREAD 0x3B //Double Output Mode command - #define FLASH_CMD_SE 0x20 //Sector Erase - #define FLASH_CMD_BE 0x52 //Block Erase - #define FLASH_CMD_CE 0x60 //Chip Erase(or 0xC7) - #define FLASH_CMD_PP 0x02 //Page Program - #define FLASH_CMD_DP 0xB9 //Deep Power Down - #define FLASH_CMD_RDP 0xAB //Release from Deep Power-Down - #define FLASH_CMD_2READ 0xBB // 2 x I/O read command - #define FLASH_CMD_4READ 0xEB // 4 x I/O read command - #define FLASH_CMD_QREAD 0x6B // 1I / 4O read command - #define FLASH_CMD_4PP 0x38 //quad page program - #define FLASH_CMD_FF 0xFF //Release Read Enhanced - #define FLASH_CMD_REMS2 0xEF // read ID for 2x I/O mode - #define FLASH_CMD_REMS4 0xDF // read ID for 4x I/O mode - #define FLASH_CMD_ENSO 0xB1 // enter secured OTP - #define FLASH_CMD_EXSO 0xC1 // exit secured OTP - #define FLASH_CMD_RDSCUR 0x2B // read security register - #define FLASH_CMD_WRSCUR 0x2F // write security register -#endif //#if FLASH_MXIC_MX25L4006E -#endif -// ============================ - -// ===== Flash Parameter Definition ===== -//#if FLASH_MICRON_N25Q512A -#if 0 -#define FLASH_RD_2IO_EN 1 -#define FLASH_RD_2O_EN 1 -#define FLASH_RD_4IO_EN 1 -#define FLASH_RD_4O_EN 1 -#define FLASH_WR_2IO_EN 1 -#define FLASH_WR_2O_EN 1 -#define FLASH_WR_4IO_EN 1 -#define FLASH_WR_4O_EN 1 -#endif -#define FLASH_DM_CYCLE_2O 0x08 // 1-1-2 -#define FLASH_DM_CYCLE_2IO 0x04 // 1-2-2 -#define FLASH_DM_CYCLE_4O 0x08 // 1-1-4 -#define FLASH_DM_CYCLE_4IO 0x08 // 1-4-4 -#define FLASH_VLD_DUAL_CMDS (BIT_WR_BLOCKING | BIT_RD_DUAL_I)// 1-1-2 -#define FLASH_VLD_QUAD_CMDS (BIT_WR_BLOCKING | BIT_RD_QUAD_IO)// 1-4-4 -#define FLASH_VLD_QUAD_CMDS2 (BIT_WR_BLOCKING | BIT_RD_QUAD_O)// 1-1-4 - - -//#endif - -#if 0 -#if FLASH_MXIC_MX25L4006E -#define FLASH_RD_2IO_EN 1 -#define FLASH_RD_2O_EN 0 -#define FLASH_RD_4IO_EN 1 -#define FLASH_RD_4O_EN 0 -#define FLASH_WR_2IO_EN 1 -#define FLASH_WR_2O_EN 0 -#define FLASH_WR_4IO_EN 1 -#define FLASH_WR_4O_EN 0 -#define FLASH_DM_CYCLE_2O 0x04 // 1-1-2 -#define FLASH_DM_CYCLE_2IO 0x08 // 1-2-2 -#define FLASH_DM_CYCLE_4O 0x04 // 1-1-4 -#define FLASH_DM_CYCLE_4IO 0x08 // 1-4-4 -#define FLASH_VLD_DUAL_CMDS (BIT_WR_BLOCKING | BIT_WR_DUAL_II | BIT_RD_DUAL_IO) -#define FLASH_VLD_QUAD_CMDS (BIT_WR_BLOCKING | BIT_WR_QUAD_II | BIT_RD_QUAD_IO) - -#elif FLASH_MXIC_MX25L8073E //This flash model is just for prototype, if you want to use it, - //the code MUST be rechecked according to the flash spec. - #define FLASH_RD_2IO_EN 1 - #define FLASH_RD_2O_EN 0 - #define FLASH_RD_4IO_EN 1 - #define FLASH_RD_4O_EN 0 - #define FLASH_WR_2IO_EN 1 - #define FLASH_WR_2O_EN 0 - #define FLASH_WR_4IO_EN 1 - #define FLASH_WR_4O_EN 0 - - #define FLASH_DM_CYCLE_2O 0x08 - #define FLASH_DM_CYCLE_2IO 0x04 - #define FLASH_DM_CYCLE_4O 0x08 - #define FLASH_DM_CYCLE_4IO 0x04 - - #define FLASH_VLD_DUAL_CMDS (BIT_WR_BLOCKING | BIT_RD_DUAL_IO) - #define FLASH_VLD_QUAD_CMDS (BIT_WR_BLOCKING | BIT_WR_QUAD_II | BIT_RD_QUAD_IO) -#else - #define FLASH_RD_2IO_EN 1 - #define FLASH_RD_2O_EN 0 - #define FLASH_RD_4IO_EN 1 - #define FLASH_RD_4O_EN 0 - #define FLASH_WR_2IO_EN 1 - #define FLASH_WR_2O_EN 0 - #define FLASH_WR_4IO_EN 1 - #define FLASH_WR_4O_EN 0 - - #define FLASH_DM_CYCLE_2O 0x08 - #define FLASH_DM_CYCLE_2IO 0x04 - #define FLASH_DM_CYCLE_4O 0x08 - #define FLASH_DM_CYCLE_4IO 0x04 - - #define FLASH_VLD_DUAL_CMDS (BIT_WR_BLOCKING | BIT_RD_DUAL_IO) - #define FLASH_VLD_QUAD_CMDS (BIT_WR_BLOCKING | BIT_WR_QUAD_II | BIT_RD_QUAD_IO) -#endif -#endif -#if 0 -//====================================================== -// Function prototype -BOOLEAN SpicFlashInitRtl8195A(uint8_t SpicBitMode); - -_LONG_CALL_ -extern void SpicLoadInitParaFromClockRtl8195A(uint8_t CpuClkMode, uint8_t BaudRate, PSPIC_INIT_PARA pSpicInitPara); - -// spi-flash controller initialization -_LONG_CALL_ -extern void SpicInitRtl8195A(uint8_t InitBaudRate, uint8_t SpicBitMode); - -// wait sr[0] = 0, wait transmission done -_LONG_CALL_ -extern void SpicWaitBusyDoneRtl8195A(void); - -// wait spi-flash status register[0] = 0 -//_LONG_CALL_ -//extern void SpicWaitWipDoneRtl8195A(SPIC_INIT_PARA SpicInitPara); -#endif - -//====================================================== -// ROM Function prototype -_LONG_CALL_ void SpiFlashAppV02(IN void *Data); -_LONG_CALL_ROM_ void SpicInitRtl8195AV02(IN uint8_t InitBaudRate,IN uint8_t SpicBitMode); - -_LONG_CALL_ROM_ void SpicEraseFlashRtl8195AV02(void); - -_LONG_CALL_ROM_ void SpicLoadInitParaFromClockRtl8195AV02(IN uint8_t CpuClkMode,IN uint8_t BaudRate,IN PSPIC_INIT_PARA pSpicInitPara); - - -void SpicBlockEraseFlashRtl8195A(IN uint32_t Address); -void SpicSectorEraseFlashRtl8195A(IN uint32_t Address); -void SpicDieEraseFlashRtl8195A(IN uint32_t Address); -void SpicWriteProtectFlashRtl8195A(IN uint32_t Protect); -void SpicWaitWipDoneRefinedRtl8195A(IN SPIC_INIT_PARA SpicInitPara); -void SpicWaitOperationDoneRtl8195A(IN SPIC_INIT_PARA SpicInitPara); -void SpicRxCmdRefinedRtl8195A(IN uint8_t cmd,IN SPIC_INIT_PARA SpicInitPara); -uint8_t SpicGetFlashStatusRefinedRtl8195A(IN SPIC_INIT_PARA SpicInitPara); -void SpicInitRefinedRtl8195A(IN uint8_t InitBaudRate, IN uint8_t SpicBitMode); -uint32_t SpicWaitWipRtl8195A(void); // IN SPIC_INIT_PARA SpicInitPara); -uint32_t SpicOneBitCalibrationRtl8195A(IN uint8_t SysCpuClk); -void SpicDisableRtl8195A(void); -void SpicDeepPowerDownFlashRtl8195A(void); -void SpicUserProgramRtl8195A(IN uint8_t * data, IN SPIC_INIT_PARA SpicInitPara, IN uint32_t addr, IN uint32_t * LengthInfo); -void SpicUserReadRtl8195A(IN uint32_t Length, IN uint32_t addr, IN uint8_t * data, IN uint8_t BitMode); -void SpicUserReadFourByteRtl8195A(IN uint32_t Length, IN uint32_t addr, IN uint32_t * data, IN uint8_t BitMode); -void SpicReadIDRtl8195A(void); -void SpicSetFlashStatusRefinedRtl8195A(IN uint32_t data, IN SPIC_INIT_PARA SpicInitPara); -void SpicSetExtendAddrRtl8195A(IN uint32_t data, IN SPIC_INIT_PARA SpicInitPara); -uint8_t SpicGetExtendAddrRtl8195A(IN SPIC_INIT_PARA SpicInitPara); -#if SPIC_CALIBRATION_IN_NVM -void SpicNVMCalLoad(uint8_t BitMode, uint8_t CpuClk); -void SpicNVMCalLoadAll(void); -void SpicNVMCalStore(uint8_t BitMode, uint8_t CpuClk); -#endif // #if SPIC_CALIBRATION_IN_NVM - -#endif //_HAL_SPIFLASH__ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_spi_flash_ram.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_spi_flash_ram.c deleted file mode 100644 index 546bf47..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_spi_flash_ram.c +++ /dev/null @@ -1,1466 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ -#include "rtl8195a.h" -#include "hal_spi_flash.h" -#include "rtl8195a_spi_flash.h" - -//#pragma arm section code = ".hal.flash.text", rodata = ".hal.flash.rodata", rwdata = ".hal.flash.data", zidata = ".hal.flash.bss" - -//#define SPI_CTRL_BASE 0x1FFEF000 -#define SPI_DLY_CTRL_ADDR 0x40000300 // [7:0] -#define MIN_BAUDRATE 0x01 -#define MAX_BAUDRATE 0x04 -#define MAX_AUTOLEN 0x14 -#define MAX_DLYLINE 99 -#define GOLD_ID_NO_RAM 0xC220 - -#define WR_DATA(addr, data) (*((volatile uint32_t*)(addr)) = (data)) -#define RD_DATA(addr) (*((volatile uint32_t*)(addr))) - -BOOLEAN SpicFlashInitRtl8195A(uint8_t SpicBitMode); -uint32_t SpicCalibrationRtl8195A(uint8_t SpicBitMode, uint32_t DefRdDummyCycle); // spi-flash calibration - -void SpicSetFlashStatusRefinedRtl8195A(uint32_t data, SPIC_INIT_PARA SpicInitPara); - -void SpicConfigAutoModeRtl8195A(uint8_t SpicBitMode); // config spi-flash controller to auto mode -void SpicReadIDRtl8195A(void); - - -_LONG_CALL_ -extern void SpicInitRtl8195A(uint8_t InitBaudRate, uint8_t SpicBitMode); // spi-flash controller initialization - -_LONG_CALL_ -extern void SpicRxCmdRtl8195A(uint8_t); // recieve command - -_LONG_CALL_ -extern void SpicSetFlashStatusRtl8195A(uint32_t data, SPIC_INIT_PARA SpicInitPara); // WRSR, write spi-flash status register - -_LONG_CALL_ -extern void SpicWaitBusyDoneRtl8195A(void); // wait sr[0] = 0, wait transmission done - -_LONG_CALL_ -extern void SpicWaitWipDoneRtl8195A(SPIC_INIT_PARA SpicInitPara); // wait spi-flash status register[0] = 0 - -_LONG_CALL_ -extern void SpicEraseFlashRtl8195A(void); // CE, flash chip erase - -_LONG_CALL_ -extern uint32_t SpicCmpDataForCalibrationRtl8195A(void); // compare read_data and golden_data -#ifdef CONFIG_FPGA -_LONG_CALL_ -extern void SpicProgFlashForCalibrationRtl8195A(SPIC_INIT_PARA SpicInitPara); // program spi-flash -#endif -_LONG_CALL_ -extern void SpicLoadInitParaFromClockRtl8195A(uint8_t CpuClkMode, uint8_t BaudRate, PSPIC_INIT_PARA pSpicInitPara); - -_LONG_CALL_ -extern uint8_t SpicGetFlashStatusRtl8195A(SPIC_INIT_PARA SpicInitPara); - -_LONG_CALL_ -extern void SpicTxCmdRtl8195A(uint8_t cmd, SPIC_INIT_PARA SpicInitPara); - -struct ava_window { - uint16_t baud_rate; - uint16_t auto_length; - uint32_t dly_line_sp; - uint32_t dly_line_ep; -}; - -#ifdef CONFIG_FPGA -HAL_ROM_DATA_SECTION -SPIC_INIT_PARA FPGASpicInitPara = {1,1,0,0}; -#endif - -#if 0 -HAL_FLASH_DATA_ -SECTION SPIC_INIT_PARA SpicInitParaAllClk[CPU_CLK_TYPE_NO] = {{0,0,0,0}, - {0,0,0,0}, - {0,0,0,0}, - {0,0,0,0}, - {0,0,0,0}, - {0,0,0,0},}; -#else -extern // HAL_FLASH_DATA_SECTION -SPIC_INIT_PARA SpicInitParaAllClk[SpicMaxMode][CPU_CLK_TYPE_NO]; // in rtl_bios_data.c -#endif - -//extern SPIC_INIT_PARA SpicInitCPUCLK[4]; - -/* Send Flash Instruction with Data Phase */ -HAL_FLASH_TEXT_SECTION -void -SpicTxCmdWithDataRtl8195A -( - IN uint8_t cmd, - IN uint8_t DataPhaseLen, - IN uint8_t* pData, - IN SPIC_INIT_PARA SpicInitPara -) -{ - uint8_t i; -#if CONFIG_DEBUG_LOG > 4 - DBG_SPIF_INFO("%s(0x%x, 0x%x, 0x%x, 0x%x)\n",__func__, cmd, DataPhaseLen, pData, SpicInitPara); -#endif - // Disable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - - if (DataPhaseLen > 15) { - DBG_SPIF_WARN("%s: Data Phase Leng too Big(%d)\n", __func__, DataPhaseLen); - DataPhaseLen = 15; - } - - HAL_SPI_WRITE32(REG_SPIC_ADDR_LENGTH, DataPhaseLen); - - // set ctrlr0: TX mode - HAL_SPI_WRITE32(REG_SPIC_CTRLR0, - (HAL_SPI_READ32(REG_SPIC_CTRLR0)& 0xFFF0FCFF)); - - // set flash_cmd: wren to fifo - HAL_SPI_WRITE8(REG_SPIC_DR0, cmd); - - //fill addr - for (i=0;i>4)>= 2)){ - - SPI_FLASH_PIN_FCTRL(ON); - - // Wait for flash busy done - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); - - while((SpicGetFlashStatusRefinedRtl8195A(SpicInitPara) & 0x02)==0) { - // Set flash_cmd: WREN to FIFO - //SpicTxCmdRtl8195A(FLASH_CMD_WREN, SpicInitPara); - SpicTxCmdWithDataRtl8195A(FLASH_CMD_WREN, 0, 0, SpicInitPara); - } - - DBG_8195A("Deep power down\n"); - - // Set flash_cmd: Chip_erase to FIFO - //SpicTxCmdRtl8195A(FLASH_CMD_CE, SpicInitPara); - SpicTxCmdWithDataRtl8195A(FLASH_CMD_DP, 0, 0, SpicInitPara); - - // polling WEL - do { - } while((SpicGetFlashStatusRefinedRtl8195A(SpicInitPara) & 0x02)!=0); - } -} -//This funciton is only valid for Micron Flash -HAL_FLASH_TEXT_SECTION -void -SpicDieEraseFlashRtl8195A( - IN uint32_t Address -) -{ - uint8_t Addr[3]; - - Addr[0] = (Address >> 16) & 0xFF; - Addr[1] = (Address >> 8) & 0xFF; - Addr[2] = Address & 0xFF; - SpicTxFlashInstRtl8195A(0xC4, 3, Addr); -} - -HAL_FLASH_TEXT_SECTION -void -SpicBlockEraseFlashRtl8195A( - IN uint32_t Address -) -{ - uint8_t Addr[3]; - - DBG_8195A("Erase Cmd Set\n"); - // Set flash_cmd: Chip_erase to FIFO - Addr[0] = (Address >> 16) & 0xFF; - Addr[1] = (Address >> 8) & 0xFF; - Addr[2] = Address & 0xFF; - SpicTxFlashInstRtl8195A(FLASH_CMD_BE, 3, Addr); -} - - -HAL_FLASH_TEXT_SECTION -void -SpicSectorEraseFlashRtl8195A( - IN uint32_t Address -) -{ - uint8_t Addr[3]; - - Addr[0] = (Address >> 16) & 0xFF; - Addr[1] = (Address >> 8) & 0xFF; - Addr[2] = Address & 0xFF; - SpicTxFlashInstRtl8195A(FLASH_CMD_SE, 3, Addr); -} - - -HAL_FLASH_TEXT_SECTION -void -SpicWriteStatusFlashRtl8195A( - IN uint32_t Status -) -{ - uint8_t Buf[3]; - - Buf[0] = Status & 0xFF; - Buf[1] = (Status >> 8) & 0xFF; - //1 For MXIC, Status Register is 8-bit width; for Winbond, Status Reguster is 16-bit width - SpicTxFlashInstRtl8195A(FLASH_CMD_WRSR, 1, Buf); -} - - -HAL_FLASH_TEXT_SECTION -void -SpicWriteProtectFlashRtl8195A( - IN uint32_t Protect -) -{ - SPIC_INIT_PARA SpicInitPara; - uint8_t Status; - - Status = SpicGetFlashStatusRefinedRtl8195A(SpicInitPara); - if (Protect) { - Status |= 0x1c; // protect whole chip - } - else { - Status &= ~0x1c; // Protect none - } - SpicWriteStatusFlashRtl8195A(Status); -} - - -HAL_FLASH_TEXT_SECTION -BOOLEAN -SpicFlashInitRtl8195A( - IN uint8_t SpicBitMode -) -{ - uint32_t DefRdDummyCycle = 0; - SPIC_INIT_PARA SpicInitPara; - -#ifdef CONFIG_FPGA - SpicInitPara.BaudRate = FPGASpicInitPara.BaudRate; - SpicInitPara.RdDummyCyle = FPGASpicInitPara.RdDummyCyle; - SpicInitPara.DelayLine = FPGASpicInitPara.DelayLine; -#endif - - switch (SpicBitMode) { - case SpicOneBitMode: -#if CONFIG_DEBUG_LOG > 4 - DBG_8195A("Initial Spic One bit mode\n"); -#endif - // wait for flash busy done - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); - - // set auto mode - SpicConfigAutoModeRtl8195A(SpicBitMode); - - /* MXIC spec */ - DefRdDummyCycle = 0; - break; - case SpicDualBitMode: -#if CONFIG_DEBUG_LOG > 4 - DBG_8195A("Initial Spic Two bit mode\n"); -#endif -#ifdef CONFIG_FPGA - // program golden_data to golden_address and store golden_data in sram - SpicProgFlashForCalibrationRtl8195A(SpicInitPara); -#endif - // set auto mode - SpicConfigAutoModeRtl8195A(SpicBitMode); - - /* MXIC spec */ - #if FLASH_RD_2IO_EN - DefRdDummyCycle = FLASH_DM_CYCLE_2IO; - #endif - #if FLASH_RD_2O_EN - DefRdDummyCycle = FLASH_DM_CYCLE_2O; - #endif - - break; - case SpicQuadBitMode: -#if CONFIG_DEBUG_LOG > 4 - DBG_8195A("Initial Spic Four bit mode\n"); -#endif -#ifdef CONFIG_FPGA - // program golden_data to golden_address and store golden_data in sram - SpicProgFlashForCalibrationRtl8195A(SpicInitPara); -#endif - // set auto mode - SpicConfigAutoModeRtl8195A(SpicBitMode); - - // set 4bit-mode - SpicSetFlashStatusRefinedRtl8195A(0x40, SpicInitPara); - - /* MXIC spec */ - #if FLASH_RD_4IO_EN - DefRdDummyCycle = FLASH_DM_CYCLE_4IO; - #endif - #if FLASH_RD_4O_EN - DefRdDummyCycle = FLASH_DM_CYCLE_4O; - #endif - break; - default: - DBG_8195A("No Support SPI Mode!\n"); - break; - - } - SpicReadIDRtl8195A(); - - if (!SpicCalibrationRtl8195A(SpicBitMode, DefRdDummyCycle)) { - - DBG_8195A("SPI calibration fail and recover one bit mode\n"); - SpicLoadInitParaFromClockRtl8195A(0, 0, &SpicInitPara); - - SpicInitRefinedRtl8195A(SpicInitPara.BaudRate, SpicOneBitMode); - SpicConfigAutoModeRtl8195A(SpicOneBitMode); - - return _FALSE; - } - - return _TRUE; -} - -HAL_FLASH_TEXT_SECTION -void -SpicUserProgramRtl8195A -( - //IN flash_t *obj, - IN uint8_t *data, - IN SPIC_INIT_PARA SpicInitPara, - IN uint32_t addr, - IN uint32_t* LengthInfo -) -{ - - uint32_t Info; - uint32_t Length = (uint32_t) *LengthInfo; - uint32_t OccuSize; - uint32_t writeword; - uint32_t lastwriteword; - uint32_t ProgramLength; - uint32_t instruction; - uint32_t PageSize; - uint8_t addrbyte[3]; - uint8_t UnalignOffset; - uint8_t lastunalignoffset; - uint8_t index; - uint8_t *ptr; - uint8_t *buff; - - - UnalignOffset = 0; - lastunalignoffset = 0; - writeword = 0; - lastwriteword = 0; - ProgramLength = 0; - buff = data; - PageSize = 256; - - OccuSize = addr & 0xFF; - if(OccuSize){ - if((Length >= PageSize) ||((OccuSize + Length) >= PageSize)) - ProgramLength= PageSize - OccuSize; - else - ProgramLength = Length; - } - else{//program from the beginning of the page - if(Length >= PageSize) - ProgramLength = PageSize; - else - ProgramLength = Length; - } - - *LengthInfo -= ProgramLength; - - if(addr & 0x03){ - UnalignOffset = (addr & 0x03); - addr -= UnalignOffset; - writeword = HAL_READ32(SPI_FLASH_BASE, addr); - ptr = (uint8_t*) &writeword + UnalignOffset; - UnalignOffset = 4 - UnalignOffset; - for(index = 0; index < UnalignOffset ; index++){ - *ptr = *buff; - buff++; - ptr++; - ProgramLength--; - if(ProgramLength == 0) - break; - } - } - else{ - if(ProgramLength >= 4){ - writeword = (uint32_t)(*buff) | (uint32_t)((*(buff+1)) << 8)|(uint32_t)((*(buff+2)) <<16)|(uint32_t)((*(buff+3))<<24); - } - } -//address already align - if(ProgramLength & 0x3){ - lastunalignoffset = ProgramLength & 0x3; - if(UnalignOffset) - lastwriteword = HAL_READ32(SPI_FLASH_BASE, (addr + 4) + ProgramLength - lastunalignoffset); - else - lastwriteword = HAL_READ32(SPI_FLASH_BASE, addr + ProgramLength - lastunalignoffset); - buff += (ProgramLength - lastunalignoffset); - ptr = (uint8_t*) &lastwriteword; - for(index = 0;index < lastunalignoffset;index++){ - *ptr = *buff; - buff++; - ptr++; - } - if(UnalignOffset == 0) - if(ProgramLength < 4){ - writeword = lastwriteword; - ProgramLength = 0; - } - } - - - - addrbyte[2] = (addr & 0xFF0000) >>16; - addrbyte[1] = (addr & 0xFF00)>>8; - addrbyte[0] = addr & 0xFF; - - instruction = FLASH_CMD_PP | (addrbyte[2] << 8)|(addrbyte[1] << 16)|(addrbyte[0] << 24); - Info = HAL_SPI_READ32(REG_SPIC_ADDR_LENGTH); - //Store current setting of Address length - // Set flash_cmd: WREN to FIFO - SpicTxCmdRtl8195A(FLASH_CMD_WREN, SpicInitPara); - - // Disable SPI_FLASH - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - - // set ctrlr0: TX mode - HAL_SPI_WRITE32(REG_SPIC_CTRLR0, - (HAL_SPI_READ32(REG_SPIC_CTRLR0) & (~ BIT_TMOD(3)))); - - HAL_SPI_WRITE32(REG_SPIC_ADDR_LENGTH, BIT_ADDR_PHASE_LENGTH(1)); - - HAL_SPI_WRITE32(REG_SPIC_DR0, instruction); - - HAL_SPI_WRITE32(REG_SPIC_DR0, writeword); - - if(UnalignOffset == 0){ - if(ProgramLength >= 4){ - buff = data + 4; - ProgramLength-=4; - } - } - else - buff = data + UnalignOffset; - //Pre-load data before enabling - index = 0; - while(ProgramLength > 4){ - if((uint32_t)buff & 0x03){ - //while(ProgramLength >= 4){ - writeword = (uint32_t)(*buff) | ((uint32_t)(*(buff+1)) << 8) | ((uint32_t)(*(buff+2)) << 16) | ((uint32_t)(*(buff+3)) << 24); - HAL_SPI_WRITE32(REG_SPIC_DR0, writeword); - ProgramLength -=4; - buff+=4; - //} - } - else{ - //while(ProgramLength >= 4){ - HAL_SPI_WRITE32(REG_SPIC_DR0, (uint32_t)*((uint32_t *)buff)); - ProgramLength -=4; - buff+=4; - //} - } - index++; - if(index >= 6) - break; - } - - // Enable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, BIT_SPIC_EN); - - if((uint32_t)buff & 0x03){ - while(ProgramLength >= 4){ - writeword = (uint32_t)(*buff) | ((uint32_t)(*(buff+1)) << 8) | ((uint32_t)(*(buff+2)) << 16) | ((uint32_t)(*(buff+3)) << 24); - HAL_SPI_WRITE32(REG_SPIC_DR0, writeword); - ProgramLength -=4; - buff+=4; - } - } - else{ - while(ProgramLength >= 4){ - HAL_SPI_WRITE32(REG_SPIC_DR0, (uint32_t)*((uint32_t *)buff)); - ProgramLength -=4; - buff+=4; - } - } - - if(ProgramLength > 0){ - HAL_SPI_WRITE32(REG_SPIC_DR0, lastwriteword); - } - - - // wait spic busy done - SpicWaitBusyDoneRtl8195A(); - // wait flash busy done (wip=0) - if(SpicInitPara.flashtype == FLASH_MICRON){ - SpicWaitOperationDoneRtl8195A(SpicInitPara); - } - else{ - SpicWaitWipDoneRtl8195A(SpicInitPara); - } - - - - // Disable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - //REG_SPIC_ADDR_LENGTH cannot be programmed if SSIENR is active - //Here to restore the setting of address length - HAL_SPI_WRITE32(REG_SPIC_ADDR_LENGTH, Info); -} - -HAL_FLASH_TEXT_SECTION -void -SpicReadIDRtl8195A( - void -) -{ - uint32_t RdData; - uint32_t RetryNum; - SPIC_INIT_PARA SpicInitPara;// = *PSpicInitPara; - uint8_t i,j; - - DBG_SPIF_INFO("%s(0x%x)\n", __func__, SpicInitPara); - - /* Disable SPI_FLASH User Mode */ - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - - /* Set Ctrlr1; 1 byte data frames */ - HAL_SPI_WRITE32(REG_SPIC_CTRLR1, BIT_NDF(3)); - - /* Send flash RX command and read the data */ - SpicRxCmdRefinedRtl8195A(FLASH_CMD_RDID, SpicInitPara); - RdData = HAL_SPI_READ32(REG_SPIC_DR0); - - SpicInitPara.id[0] = RdData & 0xFF; - SpicInitPara.id[1] = (RdData>> 8) & 0xFF; - SpicInitPara.id[2] = (RdData>>16) & 0xFF; - for(RetryNum =0; RetryNum < 3; RetryNum++){ - if((SpicInitPara.id[0] != 0) && (SpicInitPara.id[0] != 0xFF)){ - if(SpicInitPara.id[0] == 0x20) - SpicInitPara.flashtype = FLASH_MICRON; - else if(SpicInitPara.id[0] == 0xC2) - SpicInitPara.flashtype = FLASH_MXIC; - else if(SpicInitPara.id[0] == 0xEF) - SpicInitPara.flashtype = FLASH_WINBOND; - else - SpicInitPara.flashtype = FLASH_OTHERS; - break; - } - else{ - if(RetryNum == 2) - DBG_8195A("Invalid ID\n"); - } - } - for(i=0;i<3;i++) { - for (j=0; j> 4); - -#if SPIC_CALIBRATION_IN_NVM - if (!SpicInitParaAllClk[SpicBitMode][CpuType].Valid) { - SpicNVMCalLoad(SpicBitMode, CpuType); - } -#endif - if (SpicInitParaAllClk[SpicBitMode][CpuType].Valid) { - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - HAL_SPI_WRITE32(REG_SPIC_BAUDR, (SpicInitParaAllClk[SpicBitMode][CpuType].BaudRate & 0x00000FFF)); - rd_data = HAL_SPI_READ32(REG_SPIC_AUTO_LENGTH); - rd_data = (rd_data & 0xFFFF0000) | (SpicInitParaAllClk[SpicBitMode][CpuType].RdDummyCyle & 0x0000FFFF); - HAL_SPI_WRITE32(REG_SPIC_AUTO_LENGTH, rd_data); - rd_data = SpicInitParaAllClk[SpicBitMode][CpuType].DelayLine; - WR_DATA(SPI_DLY_CTRL_ADDR, ((RD_DATA(SPI_DLY_CTRL_ADDR) & 0xFFFFFF00) | (rd_data & 0x000000FF))); - // Enable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, BIT_SPIC_EN); - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); - pass = SpicCmpDataForCalibrationRtl8195A(); - if (pass) { - // Check the Magic Pattern OK - return 1; - } - } - - // calibration - DBG_8195A("SPI calibration\n"); - - max_wd.auto_length = 0; - max_wd.baud_rate = 0; - max_wd.dly_line_ep = 0; - max_wd.dly_line_sp = 0; - - for(baudr=MIN_BAUDRATE; baudr < (MAX_BAUDRATE+1); baudr++) { - // Disable SPI_FLASH User Mode - if(baudr == MIN_BAUDRATE) - if(SpicBitMode == SpicOneBitMode) - continue; - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - HAL_SPI_WRITE32(REG_SPIC_BAUDR, BIT_SCKDV(baudr)); - // Enable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, BIT_SPIC_EN); - //DBG_8195A("(0x14)Baudr: 0x%x\n",HAL_SPI_READ32(REG_SPIC_BAUDR)); - - for(autolen=(DefRdDummyCycle*2*baudr); autolen<(DefRdDummyCycle*2*baudr+MAX_AUTOLEN); autolen++) { - // Disable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - rd_data = HAL_SPI_READ32(REG_SPIC_AUTO_LENGTH); - rd_data = (rd_data & 0xFFFF0000) | (0x0000FFFF & autolen); - HAL_SPI_WRITE32(REG_SPIC_AUTO_LENGTH, rd_data); - // Enable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, BIT_SPIC_EN); - //DBG_8195A("Auto length: 0x%x\n",autolen); - //DBG_8195A("(0x11C) Auto address length register: 0x%x\n",HAL_SPI_READ32(REG_SPIC_AUTO_LENGTH)); - tmp_str_pt = MAX_DLYLINE; - tmp_end_pt = 0; - last_pass = 0; - - for(dly_line=0; dly_line<=MAX_DLYLINE; dly_line++) { - rd_data = RD_DATA(SPI_DLY_CTRL_ADDR); - rd_data = (rd_data & 0xFFFFFF00) | (dly_line & 0x000000FF); - WR_DATA(SPI_DLY_CTRL_ADDR, rd_data); - //DBG_8195A("SPI_DLY_CTRL_ADDR: 0x%x\n",RD_DATA(SPI_DLY_CTRL_ADDR)); - - pass = SpicCmpDataForCalibrationRtl8195A(); - - - if(pass) { // PASS - if(last_pass==0) { - tmp_str_pt = dly_line; - total_ava_wds++; - } - - if(dly_line==MAX_DLYLINE) { - - tmp_end_pt = dly_line; - - if(total_ava_wds==1) { - max_wd.baud_rate = baudr; - max_wd.auto_length = autolen; - max_wd.dly_line_sp = tmp_str_pt; - max_wd.dly_line_ep = tmp_end_pt; - } - else { - if((tmp_end_pt-tmp_str_pt)>(max_wd.dly_line_ep-max_wd.dly_line_sp)) { - max_wd.baud_rate = baudr; - max_wd.auto_length = autolen; - max_wd.dly_line_sp = tmp_str_pt; - max_wd.dly_line_ep = tmp_end_pt; - } - } - } - last_pass = 1; - } - else { // FAIL - if(last_pass==1) { - tmp_end_pt = dly_line; - if(total_ava_wds == 1) { - max_wd.baud_rate = baudr; - max_wd.auto_length = autolen; - max_wd.dly_line_sp = tmp_str_pt; - max_wd.dly_line_ep = tmp_end_pt; - } - else { - if((tmp_end_pt-tmp_str_pt)>(max_wd.dly_line_ep-max_wd.dly_line_sp)) { - max_wd.baud_rate = baudr; - max_wd.auto_length = autolen; - max_wd.dly_line_sp = tmp_str_pt; - max_wd.dly_line_ep = tmp_end_pt; - } - } - } - last_pass = 0; - } - } -#if CONFIG_DEBUG_LOG > 4 - DBG_8195A("total wds: %d\n",total_ava_wds); - DBG_8195A("Baud:%x; auto_length:%x; Delay start:%x; Delay end:%x\n",max_wd.baud_rate, max_wd.auto_length,max_wd.dly_line_sp, max_wd.dly_line_ep); -#endif - } - if (total_ava_wds) { - DBG_8195A("Find the avaiable window\n"); - break; - } - - } - - - if(total_ava_wds==0) { - return 0; - } - else { - // set baudr, auto_length, and delay_line - DBG_8195A("Baud:%x; auto_length:%x; Delay start:%x; Delay end:%x\n",max_wd.baud_rate, max_wd.auto_length,max_wd.dly_line_sp, max_wd.dly_line_ep); - // Disable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - HAL_SPI_WRITE32(REG_SPIC_BAUDR, (max_wd.baud_rate & 0x00000FFF)); - SpicInitParaAllClk[SpicBitMode][CpuType].BaudRate = max_wd.baud_rate; - rd_data = HAL_SPI_READ32(REG_SPIC_AUTO_LENGTH); - rd_data = (rd_data & 0xFFFF0000) | (max_wd.auto_length & 0x0000FFFF); - HAL_SPI_WRITE32(REG_SPIC_AUTO_LENGTH, rd_data); - SpicInitParaAllClk[SpicBitMode][CpuType].RdDummyCyle = max_wd.auto_length; - rd_data = ((max_wd.dly_line_sp + max_wd.dly_line_ep) >> 1); - WR_DATA(SPI_DLY_CTRL_ADDR, ((RD_DATA(SPI_DLY_CTRL_ADDR) & 0xFFFFFF00) | (rd_data & 0x000000FF))); - SpicInitParaAllClk[SpicBitMode][CpuType].DelayLine = rd_data; - SpicInitParaAllClk[SpicBitMode][CpuType].Valid = 1; - // Enable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, BIT_SPIC_EN); - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); -#if SPIC_CALIBRATION_IN_NVM - SpicNVMCalStore(SpicBitMode, CpuType); -#endif - return 1; - } - -} - - -HAL_FLASH_TEXT_SECTION -void -SpicConfigAutoModeRtl8195A -( - IN uint8_t SpicBitMode -) -{ - - - // Disable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - - if (SpicOneBitMode == SpicBitMode) { - - // set write cmd (ppiix4: 0x38) - HAL_SPI_WRITE32(REG_SPIC_WRITE_QUAD_ADDR_DATA, 0x38); - - // set read cmd (readiox4: 0xEB) - HAL_SPI_WRITE32(REG_SPIC_READ_QUAD_ADDR_DATA, 0xEB); - - HAL_SPI_WRITE32(REG_SPIC_VALID_CMD, - (HAL_SPI_READ32(REG_SPIC_VALID_CMD) & (~( - BIT_WR_QUAD_II | - BIT_WR_QUAD_I | - BIT_WR_DUAL_II | - BIT_WR_DUAL_I | - BIT_RD_QUAD_IO | - BIT_RD_QUAD_O | - BIT_RD_DUAL_IO | - BIT_RD_DUAL_I))));//Disable all the four and two bit commands. - } - else if (SpicDualBitMode == SpicBitMode) { - #if FLASH_RD_2IO_EN - HAL_SPI_WRITE32(REG_SPIC_READ_DUAL_ADDR_DATA, FLASH_CMD_2READ); - #endif - - #if FLASH_RD_2O_EN - HAL_SPI_WRITE32(REG_SPIC_READ_DUAL_DATA, FLASH_CMD_DREAD); - #endif - - HAL_SPI_WRITE32(REG_SPIC_VALID_CMD, - (HAL_SPI_READ32(REG_SPIC_VALID_CMD)|(FLASH_VLD_DUAL_CMDS))); - - } - else if (SpicQuadBitMode == SpicBitMode) { - #if FLASH_WR_4IO_EN - HAL_SPI_WRITE32(REG_SPIC_WRITE_QUAD_ADDR_DATA, FLASH_CMD_4PP); - #endif - - #if FLASH_RD_4IO_EN - HAL_SPI_WRITE32(REG_SPIC_READ_QUAD_ADDR_DATA, FLASH_CMD_4READ); - #endif - - #if FLASH_RD_4O_EN - HAL_SPI_WRITE32(REG_SPIC_READ_QUAD_DATA, FLASH_CMD_QREAD); - #endif - - HAL_SPI_WRITE32(REG_SPIC_VALID_CMD, - (HAL_SPI_READ32(REG_SPIC_VALID_CMD)|FLASH_VLD_QUAD_CMDS)); - } - - -} - - -/** - * @brief SpicWaitWipDoneRefinedRtl8195A. Wait for flash ready. - * - * @param IN SPIC_INIT_PARA SpicInitPara: spic init parameters with timing setting - * - * @retval NA - */ -HAL_FLASH_TEXT_SECTION -void -SpicWaitWipDoneRefinedRtl8195A( - IN SPIC_INIT_PARA SpicInitPara -){ -#if CONFIG_DEBUG_LOG > 4 - DBG_SPIF_INFO("%s(0x%x)\n", __func__, SpicInitPara); -#endif - do { - } while((SpicGetFlashStatusRefinedRtl8195A(SpicInitPara) & 0x01)); -} - - -#if 1 -HAL_FLASH_TEXT_SECTION -uint8_t -SpicGetFlashFlagRtl8195A -( - IN SPIC_INIT_PARA SpicInitPara -) -{ - - uint32_t RdData; - -#if CONFIG_DEBUG_LOG > 4 - DBG_SPIF_INFO("%s(0x%x)\n", __func__, SpicInitPara); -#endif - /* Disable SPI_FLASH User Mode */ - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - - /* Set Ctrlr1; 1 byte data frames */ - HAL_SPI_WRITE32(REG_SPIC_CTRLR1, BIT_NDF(1)); - - /* Send flash RX command and read the data */ - SpicRxCmdRefinedRtl8195A(0x70, SpicInitPara); - RdData = HAL_SPI_READ8(REG_SPIC_DR0); - - /* Disable SPI_FLASH User Mode */ - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - - if(RdData & 0x2){ - DBG_SPIF_WARN("Attempts to Program / Erase Protected Area.\n"); - SpicTxCmdWithDataRtl8195A(0x50, 0, 0, SpicInitPara);//Clear Error Bit & Write Enable of Flag Status Register - } - -return RdData; - -} - -HAL_FLASH_TEXT_SECTION -void -SpicWaitOperationDoneRtl8195A -( - IN SPIC_INIT_PARA SpicInitPara -) -{ -#if CONFIG_DEBUG_LOG > 4 - DBG_SPIF_INFO("%s(0x%x)\n", __func__, SpicInitPara); -#endif - do { - } while(!(SpicGetFlashFlagRtl8195A(SpicInitPara) & 0x80)); -} - -#endif -/** - * @brief SpicRxCmdRefinedRtl8195A. To send flash RX command. - * Timing store/restore is implemented inside. - * - * @param IN uint8_t cmd: flash RX command - * - * @retval NA - */ -HAL_FLASH_TEXT_SECTION -void -SpicRxCmdRefinedRtl8195A( - IN uint8_t cmd, - IN SPIC_INIT_PARA SpicInitPara -){ - uint32_t RdDummyCycle; - uint32_t BaudRate; - uint32_t BaudRate12bit; - uint32_t DelayLine; - uint32_t DelayLine8bit; - - uint32_t AutoLength = 0; - uint8_t CpuClk = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1) & (0x70)) >> 4); - PSPIC_INIT_PARA PSpicInitParaLocal = NULL; - SPIC_INIT_PARA TmpSpicInitPara; - -#ifdef CONFIG_FPGA - PSpicInitParaLocal = &TmpSpicInitPara; - PSpicInitParaLocal->BaudRate = FPGASpicInitPara.BaudRate; - PSpicInitParaLocal->RdDummyCyle = FPGASpicInitPara.RdDummyCyle; - PSpicInitParaLocal->DelayLine = FPGASpicInitPara.DelayLine; -#else - - if (SpicInitParaAllClk[SpicOneBitMode][CpuClk].Valid) { - PSpicInitParaLocal = &(SpicInitParaAllClk[SpicOneBitMode][CpuClk]); - } - else { - PSpicInitParaLocal = &TmpSpicInitPara; - SpicLoadInitParaFromClockRtl8195A(CpuClk, 1, PSpicInitParaLocal); - } -#endif - -#if CONFIG_DEBUG_LOG > 4 - DBG_8195A("!cpuclk:%x\n",CpuClk); - DBG_8195A("!baud:%x\n",PSpicInitParaLocal->BaudRate); - DBG_8195A("!delay:%x\n",PSpicInitParaLocal->DelayLine); - DBG_8195A("!dummy:%x\n",PSpicInitParaLocal->RdDummyCyle); - - DBG_SPIF_INFO("%s(0x%x, 0x%x)\n", __func__, cmd, PSpicInitParaLocal); -#endif - - /* Store rd_dummy_cycle */ - AutoLength = HAL_SPI_READ32(REG_SPIC_AUTO_LENGTH); - RdDummyCycle = AutoLength & BIT_MASK_RD_DUMMY_LENGTH; - HAL_SPI_WRITE32(REG_SPIC_AUTO_LENGTH, ((AutoLength & (~BIT_MASK_RD_DUMMY_LENGTH))|(PSpicInitParaLocal->RdDummyCyle))); - - /* Store baud rate */ - BaudRate = HAL_SPI_READ32(REG_SPIC_BAUDR); - BaudRate12bit = (BaudRate & BIT_MASK_SCKDV); - HAL_SPI_WRITE32(REG_SPIC_BAUDR,((BaudRate & (~BIT_MASK_SCKDV))|(PSpicInitParaLocal->BaudRate))); - - /* Store delay line */ - DelayLine = HAL_READ32(SYSTEM_CTRL_BASE, REG_PESOC_MEM_CTRL); - DelayLine8bit = (DelayLine & BIT_MASK_PESOC_FLASH_DDL_CTRL); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_PESOC_MEM_CTRL, ((DelayLine & (~BIT_MASK_PESOC_FLASH_DDL_CTRL))|(PSpicInitParaLocal->DelayLine))); - //HAL_WRITE32(SYSTEM_CTRL_BASE, REG_PESOC_MEM_CTRL, ((DelayLine & (~BIT_MASK_PESOC_FLASH_DDL_CTRL))|DelayLine8bit)); - - /* Disable SPI_FLASH User Mode */ - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - - /* set ctrlr0: RX_mode */ - HAL_SPI_WRITE32(REG_SPIC_CTRLR0, - ((HAL_SPI_READ32(REG_SPIC_CTRLR0)&0xFFF0FFFF) | BIT_TMOD(3))); - - /* set flash_cmd: write cmd to fifo */ - HAL_SPI_WRITE8(REG_SPIC_DR0, cmd); - - /* Enable SPI_FLASH User Mode */ - HAL_SPI_WRITE32(REG_SPIC_SSIENR, BIT_SPIC_EN); - - /* Wait spic busy done */ - SpicWaitBusyDoneRtl8195A(); - - /* Disable SPI_FLASH User Mode */ - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - - /* Recover rd_dummy_cycle */ - AutoLength = HAL_SPI_READ32(REG_SPIC_AUTO_LENGTH); - AutoLength = AutoLength & 0xFFFF0000; - HAL_SPI_WRITE32(REG_SPIC_AUTO_LENGTH, (AutoLength | RdDummyCycle)); - - /* Recover baud rate */ - BaudRate = HAL_SPI_READ32(REG_SPIC_BAUDR); - BaudRate = (BaudRate & (~BIT_MASK_SCKDV)); - HAL_SPI_WRITE32(REG_SPIC_BAUDR, (BaudRate|BaudRate12bit)); - - /* Recover delay line */ - DelayLine = HAL_READ32(SYSTEM_CTRL_BASE, REG_PESOC_MEM_CTRL); - DelayLine = (DelayLine & (~BIT_MASK_PESOC_FLASH_DDL_CTRL)); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_PESOC_MEM_CTRL, (DelayLine|DelayLine8bit)); -} - -/** - * @brief SpicGetFlashStatusRefinedRtl8195A. For the exchange between one- and two- - * bit mode, the spic timing setting (baud, rd_dummy_cycle (ATUO_LENGTH) - * and delay line) should be changed according to the mode used. - * - * @param IN SPIC_INIT_PARA SpicInitPara: spic init parameters with timing setting - * - * @retval uint8_t flash status register value - */ -HAL_FLASH_TEXT_SECTION -uint8_t -SpicGetFlashStatusRefinedRtl8195A( - IN SPIC_INIT_PARA SpicInitPara -){ - - uint32_t RdData; - - DBG_SPIF_INFO("%s(0x%x)\n", __func__, SpicInitPara); - - /* Disable SPI_FLASH User Mode */ - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - - /* Set Ctrlr1; 1 byte data frames */ - HAL_SPI_WRITE32(REG_SPIC_CTRLR1, BIT_NDF(1)); - - /* Send flash RX command and read the data */ - SpicRxCmdRefinedRtl8195A(FLASH_CMD_RDSR, SpicInitPara); - RdData = HAL_SPI_READ8(REG_SPIC_DR0); - - /* Disable SPI_FLASH User Mode */ - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - - return RdData; -} - -/** - * @brief SpicInitRefinedRtl8195A. - * - * @param IN uint8_t InitBaudRate, - * IN uint8_t SpicBitMode - * - * @retval NA - */ -HAL_FLASH_TEXT_SECTION -void -SpicInitRefinedRtl8195A( - IN uint8_t InitBaudRate, - IN uint8_t SpicBitMode -){ - - uint32_t Value32; - SPIC_INIT_PARA SpicInitPara; - PSPIC_INIT_PARA PSpicInitParaLocal; - - PSpicInitParaLocal = &SpicInitPara; -#ifdef CONFIG_FPGA - PSpicInitParaLocal->BaudRate = FPGASpicInitPara.BaudRate; - PSpicInitParaLocal->RdDummyCyle = FPGASpicInitPara.RdDummyCyle; - PSpicInitParaLocal->DelayLine = FPGASpicInitPara.DelayLine; -#else - uint8_t CpuClk; - - CpuClk = (((uint8_t)(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1) & (0x70))) >> 4); - - if (SpicInitParaAllClk[SpicBitMode][CpuClk].Valid) { - PSpicInitParaLocal = &(SpicInitParaAllClk[SpicBitMode][CpuClk]); - } - else { - SpicLoadInitParaFromClockRtl8195A(CpuClk, 1, PSpicInitParaLocal); - } - -#endif - - // Disable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - - HAL_SPI_WRITE32(REG_SPIC_BAUDR, BIT_SCKDV(InitBaudRate)); - - HAL_SPI_WRITE32(REG_SPIC_SER, BIT_SER); - - Value32 = HAL_SPI_READ32(REG_SPIC_AUTO_LENGTH); - HAL_SPI_WRITE32(REG_SPIC_AUTO_LENGTH, - ((Value32 & 0xFFFF0000) | BIT_RD_DUMMY_LENGTH(PSpicInitParaLocal->RdDummyCyle))); - - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_MEM_CTRL, - ((HAL_READ32(PERI_ON_BASE, REG_PESOC_MEM_CTRL)&0xFFFFFF00)| - PSpicInitParaLocal->DelayLine)); - - HAL_SPI_WRITE32(REG_SPIC_CTRLR1, BIT_NDF(4)); - - - switch (SpicBitMode) { - case SpicOneBitMode: - HAL_SPI_WRITE32(REG_SPIC_CTRLR0, - (HAL_SPI_READ32(REG_SPIC_CTRLR0) & (~(BIT_CMD_CH(3)|BIT_ADDR_CH(3)|BIT_DATA_CH(3))))); - break; - - case SpicDualBitMode: - HAL_SPI_WRITE32(REG_SPIC_CTRLR0, - ((HAL_SPI_READ32(REG_SPIC_CTRLR0) & (~(BIT_CMD_CH(3)|BIT_ADDR_CH(3)|BIT_DATA_CH(3)))) | - (BIT_ADDR_CH(1)|BIT_DATA_CH(1)))); - - break; - - case SpicQuadBitMode: - HAL_SPI_WRITE32(REG_SPIC_CTRLR0, - ((HAL_SPI_READ32(REG_SPIC_CTRLR0) & (~(BIT_CMD_CH(3)|BIT_ADDR_CH(3)|BIT_DATA_CH(3)))) | - (BIT_ADDR_CH(2)|BIT_DATA_CH(2)))); - break; - - } -} - - -/** - * @brief SpicEraseFlashRefinedRtl8195A. - * - * @param NA - * - * @retval NA - */ -HAL_FLASH_TEXT_SECTION -void -SpicEraseFlashRefinedRtl8195A(void) -{ - - SPIC_INIT_PARA SpicInitPara; - - // Wait for flash busy done - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); - - while((SpicGetFlashStatusRefinedRtl8195A(SpicInitPara) & 0x02)==0) { - // Set flash_cmd: WREN to FIFO - //SpicTxCmdRtl8195A(FLASH_CMD_WREN, SpicInitPara); - SpicTxCmdWithDataRtl8195A(FLASH_CMD_WREN, 0, 0, SpicInitPara); - } - - DBG_8195A("Erase Cmd Set\n"); - - // Set flash_cmd: Chip_erase to FIFO - //SpicTxCmdRtl8195A(FLASH_CMD_CE, SpicInitPara); - SpicTxCmdWithDataRtl8195A(FLASH_CMD_CE, 0, 0, SpicInitPara); - - // polling WEL - do { - } while((SpicGetFlashStatusRefinedRtl8195A(SpicInitPara) & 0x02)!=0); -} - -/** - * @brief SpicSetFlashStatusRefinedRtl8195A. - * - * @param NA - * - * @retval NA - */ -HAL_FLASH_TEXT_SECTION -void -SpicSetFlashStatusRefinedRtl8195A -( - IN uint32_t data, - IN SPIC_INIT_PARA SpicInitPara -) -{ - uint32_t Info; - - Info = HAL_SPI_READ32(REG_SPIC_ADDR_LENGTH); - - // Set flash_cmd: WREN to FIFO - //SpicTxCmdRtl8195A(FLASH_CMD_WREN, SpicInitPara); - SpicTxCmdWithDataRtl8195A(FLASH_CMD_WREN, 0, 0, SpicInitPara); - - // Disable SPI_FLASH - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - - // set ctrlr0: TX mode - HAL_SPI_WRITE32(REG_SPIC_CTRLR0, - (HAL_SPI_READ32(REG_SPIC_CTRLR0) & (~ BIT_TMOD(3)))); - - HAL_SPI_WRITE32(REG_SPIC_ADDR_LENGTH, BIT_ADDR_PHASE_LENGTH(1)); - - // Set flash_cmd: WRSR to FIFO - HAL_SPI_WRITE8(REG_SPIC_DR0, BIT_DR0(FLASH_CMD_WRSR)); - - // Set data FIFO - HAL_SPI_WRITE8(REG_SPIC_DR0, BIT_DR0(data)); - - // Enable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, BIT_SPIC_EN); - - // wait spic busy done - SpicWaitBusyDoneRtl8195A(); - - if((SpicInitParaAllClk[0][0].flashtype) == FLASH_MICRON) - SpicWaitOperationDoneRtl8195A(SpicInitPara); - else - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); - - // Disable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - - HAL_SPI_WRITE32(REG_SPIC_ADDR_LENGTH, Info); - - // wait flash busy done (wip=0) - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); - -} - - -/** - * @brief SpicWaitWipRtl8195A. - * - * @param NA - * - * @retval NA - */ - -HAL_FLASH_TEXT_SECTION -uint32_t -SpicWaitWipRtl8195A( - void -){ - - SPIC_INIT_PARA SpicInitPara; - - /* Check for flash ready status */ - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); - - return _TRUE; -} - - -/** - * @brief SpicSetFlashStatusRefinedRtl8195A. - * - * @param NA - * - * @retval NA - */ -HAL_FLASH_TEXT_SECTION -uint32_t -SpicOneBitCalibrationRtl8195A( - IN uint8_t SysCpuClk -){ - uint32_t DefRdDummyCycle = 0; - - - // set auto mode - SpicConfigAutoModeRtl8195A(SpicOneBitMode); - - /* MXIC spec */ - DefRdDummyCycle = 0; - - if (!SpicCalibrationRtl8195A(SpicOneBitMode, DefRdDummyCycle)) { - return _FALSE; - } - -#if CONFIG_DEBUG_LOG > 4 - DBG_8195A("@baud:%x\n",SpicInitParaAllClk[0][SysCpuClk].BaudRate); - DBG_8195A("@delay:%x\n",SpicInitParaAllClk[0][SysCpuClk].DelayLine); - DBG_8195A("@dummy:%x\n\n",SpicInitParaAllClk[0][SysCpuClk].RdDummyCyle); -#endif - return _TRUE; -} - -/** - * @brief SpicDisableRtl8195A. - * Disable SPI Flash memory controller. - * @param NA - * - * @retval NA - */ -HAL_FLASH_TEXT_SECTION -void -SpicDisableRtl8195A(void) -{ - SPI_FLASH_PIN_FCTRL(OFF); -} - -#if SPIC_CALIBRATION_IN_NVM -/** - * @brief SpicNVMCalLoad. - * Load the SPI Flash Controller Calibration data from NVM - * @param NA - * - * @retval NA - */ -HAL_FLASH_TEXT_SECTION void -SpicNVMCalLoad(uint8_t BitMode, uint8_t CpuClk) -{ - SPIC_INIT_PARA *pspci_para; - uint32_t spci_para; - uint32_t spci_para_inv; - uint32_t flash_offset; - -// DBG_SPIF_INFO("SpicNVMCalLoad==> BitMode=%d CpuClk=%d\r\n", BitMode, CpuClk); - - /* each Calibration parameters use 8 bytes, first 4-bytes are the calibration data, - 2nd 4-bytes are the validate data: ~(calibration data) */ - flash_offset = (CpuClk * 8) + (BitMode * CPU_CLK_TYPE_NO * 8); - spci_para = HAL_READ32(SPI_FLASH_BASE, (FLASH_SPIC_PARA_BASE+flash_offset)); - if (spci_para != 0xFFFFFFFF) { - spci_para_inv = HAL_READ32(SPI_FLASH_BASE, (FLASH_SPIC_PARA_BASE+flash_offset+4)); - if (0xFFFFFFFF == (spci_para ^ spci_para_inv)) { - pspci_para = (SPIC_INIT_PARA*)&spci_para; - SpicInitParaAllClk[BitMode][CpuClk].BaudRate = pspci_para->BaudRate; - SpicInitParaAllClk[BitMode][CpuClk].RdDummyCyle = pspci_para->RdDummyCyle; - SpicInitParaAllClk[BitMode][CpuClk].DelayLine = pspci_para->DelayLine; - SpicInitParaAllClk[BitMode][CpuClk].Valid = pspci_para->Valid; - DBG_SPIF_INFO("%s: Calibration Loaded(BitMode %d, CPUClk %d): BaudRate=0x%x RdDummyCyle=0x%x DelayLine=0x%x\r\n", - __func__, BitMode, CpuClk, - SpicInitParaAllClk[BitMode][CpuClk].BaudRate, - SpicInitParaAllClk[BitMode][CpuClk].RdDummyCyle, - SpicInitParaAllClk[BitMode][CpuClk].DelayLine); - } - else { - DBG_SPIF_WARN("%s: Data in Flash(@ 0x%x = 0x%x 0x%x) is Invalid\r\n", - __func__, - (FLASH_SPIC_PARA_BASE+flash_offset), spci_para, spci_para_inv); - } - - } - else { -// DBG_SPIF_INFO("SpicNVMCalLoad: No Data in Flash(@ 0x%x)\r\n", flash_offset); - } -} - -/** - * @brief SpicNVMCalLoadAll. - * Load the SPI Flash Controller Calibration data from NVM - * @param NA - * - * @retval NA - */ -HAL_FLASH_TEXT_SECTION void -SpicNVMCalLoadAll(void) -{ - uint8_t i,j; - - for(i=0;i<3;i++) { - for (j=0; j 4 - DBG_SPIF_INFO("%s ==> BitMode=%d CpuClk=%d\r\n", __func__, BitMode, CpuClk); -#endif - /* each Calibration parameters use 8 bytes, first 4-bytes are the calibration data, - 2nd 4-bytes are the validate data: ~(calibration data) */ - flash_offset = (CpuClk * 8) + (BitMode * CPU_CLK_TYPE_NO * 8); - spci_para = HAL_READ32(SPI_FLASH_BASE, (FLASH_SPIC_PARA_BASE+flash_offset)); - if (spci_para == 0xFFFFFFFF) { -// if (1) { - pspci_para = (SPIC_INIT_PARA*)&spci_para; - pspci_para->BaudRate = SpicInitParaAllClk[BitMode][CpuClk].BaudRate; - pspci_para->RdDummyCyle = SpicInitParaAllClk[BitMode][CpuClk].RdDummyCyle; - pspci_para->DelayLine = SpicInitParaAllClk[BitMode][CpuClk].DelayLine; - pspci_para->Valid = SpicInitParaAllClk[BitMode][CpuClk].Valid; - HAL_WRITE32(SPI_FLASH_BASE, (FLASH_SPIC_PARA_BASE+flash_offset), spci_para); - - if((SpicInitParaAllClk[BitMode][CpuClk].flashtype) == FLASH_MICRON) - SpicWaitOperationDoneRtl8195A(SpicInitPara); - else - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); - - HAL_WRITE32(SPI_FLASH_BASE, (FLASH_SPIC_PARA_BASE+flash_offset+4), ~spci_para); - - if((SpicInitParaAllClk[BitMode][CpuClk].flashtype) == FLASH_MICRON) - SpicWaitOperationDoneRtl8195A(SpicInitPara); - else - SpicWaitWipDoneRefinedRtl8195A(SpicInitPara); - -#if CONFIG_DEBUG_LOG > 4 - DBG_SPIF_INFO("%s(BitMode %d, CPUClk %d): Calibration Stored: BaudRate=0x%x RdDummyCyle=0x%x DelayLine=0x%x\r\n", - __func__, - BitMode, CpuClk, - SpicInitParaAllClk[BitMode][CpuClk].BaudRate, - SpicInitParaAllClk[BitMode][CpuClk].RdDummyCyle, - SpicInitParaAllClk[BitMode][CpuClk].DelayLine); -#endif - // Read back to check - if (HAL_READ32(SPI_FLASH_BASE, (FLASH_SPIC_PARA_BASE+flash_offset)) != spci_para) { - DBG_SPIF_ERR("%s: Err(Offset=0x%x), Wr=0x%x Rd=0x%x \r\n", - __func__, - flash_offset, spci_para, HAL_READ32(SPI_FLASH_BASE, (FLASH_SPIC_PARA_BASE+flash_offset))); - } - - if (HAL_READ32(SPI_FLASH_BASE, (FLASH_SPIC_PARA_BASE+flash_offset+4)) != ~spci_para) { - DBG_SPIF_ERR("%s: Err(Offset=0x%x), Wr=0x%x Rd=0x%x \r\n", - __func__, - flash_offset+4, ~spci_para, HAL_READ32(SPI_FLASH_BASE, (FLASH_SPIC_PARA_BASE+flash_offset+4))); - } - } - else { - // There is a parameter on the flash memory already - DBG_SPIF_ERR("%s: The flash memory(@0x%x = 0x%x) is not able to be write, Erase it first!\r\n", - __func__, - (FLASH_SPIC_PARA_BASE+flash_offset), spci_para); - } -} - -#endif // #if SPIC_CALIBRATION_IN_NVM diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_ssi.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_ssi.c deleted file mode 100644 index e955153..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_ssi.c +++ /dev/null @@ -1,689 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "rtl8195a.h" -#include "hal_ssi.h" - -#ifdef CONFIG_SOC_PS_EN - -const HAL_GDMA_CHNL Ssi2_TX_GDMA_Chnl_Option[] = { - {0,4,GDMA0_CHANNEL4_IRQ,0}, - {0,5,GDMA0_CHANNEL5_IRQ,0}, - {0,3,GDMA0_CHANNEL3_IRQ,0}, - {0,0,GDMA0_CHANNEL0_IRQ,0}, - {0,1,GDMA0_CHANNEL1_IRQ,0}, - {0,2,GDMA0_CHANNEL2_IRQ,0}, - - {0xff,0,0,0} // end -}; - -const HAL_GDMA_CHNL Ssi2_RX_GDMA_Chnl_Option[] = { - {1,4,GDMA1_CHANNEL4_IRQ,0}, - {1,5,GDMA1_CHANNEL5_IRQ,0}, - {1,3,GDMA1_CHANNEL3_IRQ,0}, - {1,0,GDMA1_CHANNEL0_IRQ,0}, - {1,1,GDMA1_CHANNEL1_IRQ,0}, - {1,2,GDMA1_CHANNEL2_IRQ,0}, - - {0xff,0,0,0} // end -}; - -const HAL_GDMA_CHNL Ssi_MultiBlk_GDMA_Chnl_Option[] = { - {0,4,GDMA0_CHANNEL4_IRQ,0}, - {0,5,GDMA0_CHANNEL5_IRQ,0}, - {1,4,GDMA1_CHANNEL4_IRQ,0}, - {1,5,GDMA1_CHANNEL5_IRQ,0}, - {0xff,0,0,0} // end -}; - -//TODO: Load default Setting: It should be loaded from external setting file. -const DW_SSI_DEFAULT_SETTING SpiDefaultSetting = -{ - .RxCompCallback = NULL, - .RxCompCbPara = NULL, - .RxData = NULL, - .TxCompCallback = NULL, - .TxCompCbPara = NULL, - .TxData = NULL, - .DmaRxDataLevel = 7, // RX FIFO stored bytes > (DMARDLR(7) + 1) then trigger DMA transfer - .DmaTxDataLevel = 48, // TX FIFO free space > (FIFO_SPACE(64)-DMATDLR(48)) then trigger DMA transfer - .InterruptPriority = 10, - .RxLength = 0, - .RxLengthRemainder = 0, - .RxThresholdLevel = 7, // if number of entries in th RX FIFO >= (RxThresholdLevel+1), RX interrupt asserted - .TxLength = 0, - .TxThresholdLevel = 8, // if number of entries in th TX FIFO <= TxThresholdLevel, TX interrupt asserted - .SlaveSelectEnable = 0, - .ClockDivider = SSI_CLK_SPI0_2/1000000, // SCLK=1M - .DataFrameNumber = 0, - .ControlFrameSize = CFS_1_BIT, - .DataFrameFormat = FRF_MOTOROLA_SPI, - .DataFrameSize = DFS_8_BITS, - .DmaControl = 0, // default DMA is disable - .InterruptMask = 0x0, - .MicrowireDirection = MW_DIRECTION_MASTER_TO_SLAVE, - .MicrowireHandshaking = MW_HANDSHAKE_DISABLE, - .MicrowireTransferMode = MW_TMOD_NONSEQUENTIAL, - .SclkPhase = SCPH_TOGGLES_AT_START, - .SclkPolarity = SCPOL_INACTIVE_IS_HIGH, - .SlaveOutputEnable = SLV_TXD_ENABLE, // Slave - .TransferMode = TMOD_TR, - .TransferMechanism = SSI_DTM_INTERRUPT -}; - -extern HAL_Status HalSsiInitRtl8195a_Patch(void *Adaptor); -extern HAL_Status HalSsiPinmuxEnableRtl8195a_Patch(void *Adaptor); -extern HAL_Status HalSsiPinmuxDisableRtl8195a(void *Adaptor); -extern HAL_Status HalSsiDeInitRtl8195a(void * Adapter); -extern HAL_Status HalSsiClockOffRtl8195a(void * Adapter); -extern HAL_Status HalSsiClockOnRtl8195a(void * Adapter); -extern HAL_Status HalSsiIntReadRtl8195a(void *Adapter, void *RxData, uint32_t Length); -extern HAL_Status HalSsiIntWriteRtl8195a(void *Adapter, uint8_t *pTxData, uint32_t Length); -extern HAL_Status HalSsiEnterCriticalRtl8195a(void * Data); -extern HAL_Status HalSsiExitCriticalRtl8195a(void * Data); -extern HAL_Status HalSsiIsTimeoutRtl8195a(uint32_t StartCount, uint32_t TimeoutCnt); -extern HAL_Status HalSsiStopRecvRtl8195a(void * Data); -extern HAL_Status HalSsiSetFormatRtl8195a(void * Adaptor); -extern void HalSsiSetSclkRtl8195a(void *Adapter, uint32_t ClkRate); -#ifdef CONFIG_GDMA_EN -extern void HalSsiDmaInitRtl8195a(void *Adapter); -#endif - -void HalSsiOpInit(void *Adaptor) -{ - PHAL_SSI_OP pHalSsiOp = (PHAL_SSI_OP) Adaptor; - -// pHalSsiOp->HalSsiPinmuxEnable = HalSsiPinmuxEnableRtl8195a; -#if CONFIG_CHIP_E_CUT - pHalSsiOp->HalSsiPinmuxEnable = HalSsiPinmuxEnableRtl8195a_V04; - pHalSsiOp->HalSsiPinmuxDisable = HalSsiPinmuxDisableRtl8195a_V04; -#else - pHalSsiOp->HalSsiPinmuxEnable = HalSsiPinmuxEnableRtl8195a_Patch; - pHalSsiOp->HalSsiPinmuxDisable = HalSsiPinmuxDisableRtl8195a; -#endif - - pHalSsiOp->HalSsiEnable = HalSsiEnableRtl8195a; - pHalSsiOp->HalSsiDisable = HalSsiDisableRtl8195a; -// pHalSsiOp->HalSsiInit = HalSsiInitRtl8195a; -#if CONFIG_CHIP_E_CUT - pHalSsiOp->HalSsiInit = HalSsiInitRtl8195a_V04; -#else - pHalSsiOp->HalSsiInit = HalSsiInitRtl8195a_Patch; -#endif - pHalSsiOp->HalSsiSetSclkPolarity = HalSsiSetSclkPolarityRtl8195a; - pHalSsiOp->HalSsiSetSclkPhase = HalSsiSetSclkPhaseRtl8195a; - pHalSsiOp->HalSsiWrite = HalSsiWriteRtl8195a; - pHalSsiOp->HalSsiRead = HalSsiReadRtl8195a; - pHalSsiOp->HalSsiGetRxFifoLevel = HalSsiGetRxFifoLevelRtl8195a; - pHalSsiOp->HalSsiGetTxFifoLevel = HalSsiGetTxFifoLevelRtl8195a; - pHalSsiOp->HalSsiGetStatus = HalSsiGetStatusRtl8195a; - pHalSsiOp->HalSsiGetInterruptStatus = HalSsiGetInterruptStatusRtl8195a; - pHalSsiOp->HalSsiLoadSetting = HalSsiLoadSettingRtl8195a; - pHalSsiOp->HalSsiSetInterruptMask = HalSsiSetInterruptMaskRtl8195a; - pHalSsiOp->HalSsiGetInterruptMask = HalSsiGetInterruptMaskRtl8195a; - pHalSsiOp->HalSsiSetDeviceRole = HalSsiSetDeviceRoleRtl8195a; - pHalSsiOp->HalSsiWriteable = HalSsiWriteableRtl8195a; - pHalSsiOp->HalSsiReadable = HalSsiReadableRtl8195a; - pHalSsiOp->HalSsiBusy = HalSsiBusyRtl8195a; - pHalSsiOp->HalSsiInterruptEnable = HalSsiInterruptEnableRtl8195a; - pHalSsiOp->HalSsiInterruptDisable = HalSsiInterruptDisableRtl8195a; -// pHalSsiOp->HalSsiReadInterrupt = HalSsiReadInterruptRtl8195a; -#if CONFIG_CHIP_E_CUT - pHalSsiOp->HalSsiReadInterrupt = HalSsiIntReadRtl8195a_V04; -#else - pHalSsiOp->HalSsiReadInterrupt = HalSsiIntReadRtl8195a; -#endif - pHalSsiOp->HalSsiSetRxFifoThresholdLevel = HalSsiSetRxFifoThresholdLevelRtl8195a; - pHalSsiOp->HalSsiSetTxFifoThresholdLevel = HalSsiSetTxFifoThresholdLevelRtl8195a; -// pHalSsiOp->HalSsiWriteInterrupt = HalSsiWriteInterruptRtl8195a; -#if CONFIG_CHIP_E_CUT - pHalSsiOp->HalSsiWriteInterrupt = HalSsiIntWriteRtl8195a_V04; -#else - pHalSsiOp->HalSsiWriteInterrupt = HalSsiIntWriteRtl8195a; -#endif - pHalSsiOp->HalSsiGetRawInterruptStatus = HalSsiGetRawInterruptStatusRtl8195a; - pHalSsiOp->HalSsiGetSlaveEnableRegister = HalSsiGetSlaveEnableRegisterRtl8195a; - pHalSsiOp->HalSsiSetSlaveEnableRegister = HalSsiSetSlaveEnableRegisterRtl8195a; -} - - -#ifdef CONFIG_GDMA_EN -HAL_Status -HalSsiTxMultiBlkChnl( - IN PHAL_SSI_ADAPTOR pHalSsiAdapter -) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PSSI_DMA_CONFIG pDmaConfig; - HAL_GDMA_CHNL *pgdma_chnl; - - pDmaConfig = &pHalSsiAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pTxHalGdmaAdapter; - - if((pHalSsiAdapter->HaveTxChannel == 1) && (pHalGdmaAdapter->ChNum != 4) && (pHalGdmaAdapter->ChNum != 5)){ - HalSsiTxGdmaDeInit(pHalSsiAdapter); - } - if(pHalSsiAdapter->HaveTxChannel == 0){ - pgdma_chnl = HalGdmaChnlAlloc((HAL_GDMA_CHNL*)Ssi_MultiBlk_GDMA_Chnl_Option); - if (pgdma_chnl == NULL) { - DBG_SSI_ERR("No Available DMA channel\n"); - return HAL_BUSY; - } - else { - pHalGdmaAdapter->GdmaIndex = pgdma_chnl->GdmaIndx; - pHalGdmaAdapter->ChNum = pgdma_chnl->GdmaChnl; - pHalGdmaAdapter->ChEn = 0x0101 << pgdma_chnl->GdmaChnl; - pDmaConfig->TxGdmaIrqHandle.IrqNum = pgdma_chnl->IrqNum; - pHalSsiAdapter->HaveTxChannel = 1; - InterruptRegister(&pDmaConfig->TxGdmaIrqHandle); - InterruptEn(&pDmaConfig->TxGdmaIrqHandle); - } - HalSsiDmaInit(pHalSsiAdapter); - } - DBG_SSI_INFO("TX GDMA Index = %x, Channel = %x\n",pHalGdmaAdapter->GdmaIndex,pHalGdmaAdapter->ChNum); - return HAL_OK; -} - -HAL_Status -HalSsiTxSingleBlkChnl( - IN PHAL_SSI_ADAPTOR pHalSsiAdapter -) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PSSI_DMA_CONFIG pDmaConfig; - HAL_GDMA_CHNL *pgdma_chnl; - - pDmaConfig = &pHalSsiAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pTxHalGdmaAdapter; - - if(pHalSsiAdapter->HaveTxChannel == 0){ - if (HalGdmaChnlRegister(pHalGdmaAdapter->GdmaIndex, pHalGdmaAdapter->ChNum) != HAL_OK) { - // The default GDMA Channel is not available, try others - if (pHalSsiAdapter->Index == 2) { - // SSI2 TX Only can use GDMA 0 - pgdma_chnl = HalGdmaChnlAlloc((HAL_GDMA_CHNL*)Ssi2_TX_GDMA_Chnl_Option); - } - else { - pgdma_chnl = HalGdmaChnlAlloc(NULL); - } - - if (pgdma_chnl == NULL) { - DBG_SSI_ERR("No Available DMA channel\n"); - return HAL_BUSY; - } - else { - pHalGdmaAdapter->GdmaIndex = pgdma_chnl->GdmaIndx; - pHalGdmaAdapter->ChNum = pgdma_chnl->GdmaChnl; - pHalGdmaAdapter->ChEn = 0x0101 << pgdma_chnl->GdmaChnl; - pDmaConfig->TxGdmaIrqHandle.IrqNum = pgdma_chnl->IrqNum; - pHalSsiAdapter->HaveTxChannel = 1; - } - } - else{ - pHalSsiAdapter->HaveTxChannel = 1; - } - InterruptRegister(&pDmaConfig->TxGdmaIrqHandle); - InterruptEn(&pDmaConfig->TxGdmaIrqHandle); - DBG_SSI_INFO("TX GDMA Index = %x, Channle number = %x\n",pHalGdmaAdapter->GdmaIndex,pHalGdmaAdapter->ChNum); - HalSsiDmaInit(pHalSsiAdapter); - } - - return HAL_OK; - -} - -HAL_Status -HalSsiTxGdmaInit( - IN PHAL_SSI_OP pHalSsiOp, - IN PHAL_SSI_ADAPTOR pHalSsiAdapter -) -{ - - if ((NULL == pHalSsiOp) || (NULL == pHalSsiAdapter)) { - return HAL_ERR_PARA; - } - - // Load default setting - #if CONFIG_CHIP_E_CUT - HalSsiTxGdmaLoadDefRtl8195a_V04((void*)pHalSsiAdapter); - #else - HalSsiTxGdmaLoadDefRtl8195a((void*)pHalSsiAdapter); - #endif - return HAL_OK; -} - -void -HalSsiTxGdmaDeInit( - IN PHAL_SSI_ADAPTOR pHalSsiAdapter -) -{ - PSSI_DMA_CONFIG pDmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - HAL_GDMA_CHNL GdmaChnl; - - if (NULL == pHalSsiAdapter) { - return; - } - - pDmaConfig = &pHalSsiAdapter->DmaConfig; - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pTxHalGdmaAdapter; - GdmaChnl.GdmaIndx = pHalGdmaAdapter->GdmaIndex; - GdmaChnl.GdmaChnl = pHalGdmaAdapter->ChNum; - GdmaChnl.IrqNum = pDmaConfig->TxGdmaIrqHandle.IrqNum; - HalGdmaChnlFree(&GdmaChnl); - pHalSsiAdapter->HaveTxChannel = 0; -} - - -HAL_Status -HalSsiDmaSend( - IN void *Adapter, // PHAL_SSI_ADAPTOR - IN uint8_t *pTxData, ///< Rx buffer - IN uint32_t Length // buffer length -) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - PSSI_DMA_CONFIG pDmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PHAL_GDMA_OP pHalGdmaOp; - - pDmaConfig = &pHalSsiAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pTxHalGdmaAdapter; - - #if CONFIG_CHIP_E_CUT - HalSsiDmaSendRtl8195a_V04(pHalSsiAdapter,pTxData,Length); - #else - HalSsiDmaSendRtl8195a(pHalSsiAdapter,pTxData,Length); - #endif - if (pHalGdmaAdapter->GdmaCtl.BlockSize > MAX_DMA_BLOCK_SIZE) { - // Maximum Data Length is 4092*16 - #if CONFIG_CHIP_E_CUT - HalSsiDmaSendMultiBlockRtl8195a_V04(pHalSsiAdapter, pTxData, pHalGdmaAdapter->GdmaCtl.BlockSize); - #else - HalSsiDmaSendMultiBlockRtl8195a(pHalSsiAdapter, pTxData, pHalGdmaAdapter->GdmaCtl.BlockSize); - #endif - HalSsiTxMultiBlkChnl(pHalSsiAdapter); - } - else{ - pHalGdmaAdapter->ChSar= (uint32_t)pTxData; - HalSsiTxSingleBlkChnl(pHalSsiAdapter); - pHalGdmaAdapter->Rsvd4to7 = 0; - pHalGdmaAdapter->Llpctrl = 0; - pHalGdmaAdapter->GdmaCtl.LlpSrcEn = 0; - pHalGdmaAdapter->GdmaCtl.LlpDstEn = 0; - pHalGdmaAdapter->GdmaCfg.ReloadDst = 0; - pHalGdmaAdapter->GdmaCfg.ReloadSrc = 0; - } - - // Enable GDMA for TX - pHalGdmaOp = (PHAL_GDMA_OP)pDmaConfig->pHalGdmaOp; - pHalGdmaOp->HalGdmaOnOff((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChIsrEnAndDis((void*)(pHalGdmaAdapter)); - - if(pHalGdmaAdapter->Llpctrl) - pHalGdmaOp->HalGdmaChBlockSeting((void*)(pHalGdmaAdapter)); - else - pHalGdmaOp->HalGdmaChSeting((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChEn((void*)(pHalGdmaAdapter)); - - return HAL_OK; -} - - -HAL_Status -HalSsiRxMultiBlkChnl( - IN PHAL_SSI_ADAPTOR pHalSsiAdapter -) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PSSI_DMA_CONFIG pDmaConfig; - HAL_GDMA_CHNL *pgdma_chnl; - - pDmaConfig = &pHalSsiAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pRxHalGdmaAdapter; - - if((pHalSsiAdapter->HaveRxChannel == 1) && (pHalGdmaAdapter->ChNum != 4) && (pHalGdmaAdapter->ChNum != 5)){ - HalSsiRxGdmaDeInit(pHalSsiAdapter); - } - if(pHalSsiAdapter->HaveRxChannel == 0){ - pgdma_chnl = HalGdmaChnlAlloc((HAL_GDMA_CHNL*)Ssi_MultiBlk_GDMA_Chnl_Option); - if (pgdma_chnl == NULL) { - DBG_SSI_ERR("No Available DMA channel\n"); - return HAL_BUSY; - } - else { - pHalGdmaAdapter->GdmaIndex = pgdma_chnl->GdmaIndx; - pHalGdmaAdapter->ChNum = pgdma_chnl->GdmaChnl; - pHalGdmaAdapter->ChEn = 0x0101 << pgdma_chnl->GdmaChnl; - pDmaConfig->RxGdmaIrqHandle.IrqNum = pgdma_chnl->IrqNum; - pHalSsiAdapter->HaveRxChannel = 1; - InterruptRegister(&pDmaConfig->RxGdmaIrqHandle); - InterruptEn(&pDmaConfig->RxGdmaIrqHandle); - } - HalSsiDmaInit(pHalSsiAdapter); - } - DBG_SSI_INFO("RX GDMA index = %x, Channel = %x\n",pHalGdmaAdapter->GdmaIndex,pHalGdmaAdapter->ChNum); - return HAL_OK; -} - -HAL_Status -HalSsiRxSingleBlkChnl( - IN PHAL_SSI_ADAPTOR pHalSsiAdapter -) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PSSI_DMA_CONFIG pDmaConfig; - HAL_GDMA_CHNL *pgdma_chnl; - - pDmaConfig = &pHalSsiAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pRxHalGdmaAdapter; - - if(pHalSsiAdapter->HaveRxChannel == 0){ - if (HalGdmaChnlRegister(pHalGdmaAdapter->GdmaIndex, pHalGdmaAdapter->ChNum) != HAL_OK) { - // The default GDMA Channel is not available, try others - if (pHalSsiAdapter->Index == 2) { - // SSI2 RX Only can use GDMA 1 - pgdma_chnl = HalGdmaChnlAlloc((HAL_GDMA_CHNL*)Ssi2_RX_GDMA_Chnl_Option); - } - else { - pgdma_chnl = HalGdmaChnlAlloc(NULL); - } - - if (pgdma_chnl == NULL) { - DBG_SSI_ERR("No Available DMA channel\n"); - return HAL_BUSY; - } - else { - pHalGdmaAdapter->GdmaIndex = pgdma_chnl->GdmaIndx; - pHalGdmaAdapter->ChNum = pgdma_chnl->GdmaChnl; - pHalGdmaAdapter->ChEn = 0x0101 << pgdma_chnl->GdmaChnl; - pDmaConfig->RxGdmaIrqHandle.IrqNum = pgdma_chnl->IrqNum; - pHalSsiAdapter->HaveRxChannel = 1; - } - } - else{ - pHalSsiAdapter->HaveRxChannel = 1; - } - InterruptRegister(&pDmaConfig->RxGdmaIrqHandle); - InterruptEn(&pDmaConfig->RxGdmaIrqHandle); - DBG_SSI_INFO("RX GDMA Index = %x, Channle number = %x\n",pHalGdmaAdapter->GdmaIndex,pHalGdmaAdapter->ChNum); - HalSsiDmaInit(pHalSsiAdapter); - } - return HAL_OK; - -} - -HAL_Status -HalSsiRxGdmaInit( - IN PHAL_SSI_OP pHalSsiOp, - IN PHAL_SSI_ADAPTOR pHalSsiAdapter -) -{ - - if ((NULL == pHalSsiOp) || (NULL == pHalSsiAdapter)) { - return HAL_ERR_PARA; - } - - // Load default setting - #if CONFIG_CHIP_E_CUT - HalSsiRxGdmaLoadDefRtl8195a_V04((void*)pHalSsiAdapter); - #else - HalSsiRxGdmaLoadDefRtl8195a((void*)pHalSsiAdapter); - #endif - return HAL_OK; -} - -void -HalSsiRxGdmaDeInit( - IN PHAL_SSI_ADAPTOR pHalSsiAdapter -) -{ - PSSI_DMA_CONFIG pDmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - HAL_GDMA_CHNL GdmaChnl; - - if (NULL == pHalSsiAdapter) { - return; - } - - pDmaConfig = &pHalSsiAdapter->DmaConfig; - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pRxHalGdmaAdapter; - GdmaChnl.GdmaIndx = pHalGdmaAdapter->GdmaIndex; - GdmaChnl.GdmaChnl = pHalGdmaAdapter->ChNum; - GdmaChnl.IrqNum = pDmaConfig->RxGdmaIrqHandle.IrqNum; - HalGdmaChnlFree(&GdmaChnl); - pHalSsiAdapter->HaveRxChannel = 0; -} - -HAL_Status -HalSsiDmaRecv( - IN void *Adapter, // PHAL_SSI_ADAPTOR - IN uint8_t *pRxData, ///< Rx buffer - IN uint32_t Length // buffer length -) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - PSSI_DMA_CONFIG pDmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PHAL_GDMA_OP pHalGdmaOp; - - pDmaConfig = &pHalSsiAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pRxHalGdmaAdapter; - - #if CONFIG_CHIP_E_CUT - HalSsiDmaRecvRtl8195a_V04(pHalSsiAdapter,pRxData,Length); - #else - HalSsiDmaRecvRtl8195a(pHalSsiAdapter,pRxData,Length); - #endif - - if (pHalGdmaAdapter->GdmaCtl.BlockSize > MAX_DMA_BLOCK_SIZE) { - // Maximum Data Length is 4092*16 - #if CONFIG_CHIP_E_CUT - HalSsiDmaRecvMultiBlockRtl8195a_V04(pHalSsiAdapter, pRxData, pHalGdmaAdapter->GdmaCtl.BlockSize); - #else - HalSsiDmaRecvMultiBlockRtl8195a(pHalSsiAdapter, pRxData, pHalGdmaAdapter->GdmaCtl.BlockSize); - #endif - HalSsiRxMultiBlkChnl(pHalSsiAdapter); - } - else{ - pHalGdmaAdapter->ChDar = (uint32_t)pRxData; - HalSsiRxSingleBlkChnl(pHalSsiAdapter); - pHalGdmaAdapter->Rsvd4to7 = 0; - pHalGdmaAdapter->Llpctrl = 0; - pHalGdmaAdapter->GdmaCtl.LlpSrcEn = 0; - pHalGdmaAdapter->GdmaCtl.LlpDstEn = 0; - pHalGdmaAdapter->GdmaCfg.ReloadDst = 0; - pHalGdmaAdapter->GdmaCfg.ReloadSrc = 0; - - } - - // Enable GDMA for RX - pHalGdmaOp = (PHAL_GDMA_OP)pDmaConfig->pHalGdmaOp; - pHalGdmaOp->HalGdmaOnOff((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChIsrEnAndDis((void*)(pHalGdmaAdapter)); - - if(pHalGdmaAdapter->Llpctrl) - pHalGdmaOp->HalGdmaChBlockSeting((void*)(pHalGdmaAdapter)); - else - pHalGdmaOp->HalGdmaChSeting((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChEn((void*)(pHalGdmaAdapter)); - - return HAL_OK; - -} - -#endif // end of "#ifdef CONFIG_GDMA_EN" - -HAL_Status -HalSsiInit(void *Data) -{ - HAL_Status ret; - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Data; - uint32_t Function = SPI0; - uint8_t PinmuxSelect; - uint8_t Index; - - PinmuxSelect = pHalSsiAdapter->PinmuxSelect; - Index = pHalSsiAdapter->Index; - switch (Index){ - case 0: - Function = SPI0; - break; - case 1: - Function = SPI1; - break; - case 2: - Function = SPI2; - break; - default: - DBG_SSI_ERR("Invalid SPI Index.\n"); - break; - } - - ret = FunctionChk(Function, (uint32_t)PinmuxSelect); - if(ret == _FALSE){ - DBG_SSI_ERR("Invalid Pinmux Setting.\n"); - return HAL_ERR_PARA; - } - -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE SsiPwrState; -#endif -#if CONFIG_CHIP_E_CUT - ret = HalSsiInitRtl8195a_V04(pHalSsiAdapter); -#else - ret = HalSsiInitRtl8195a_Patch(pHalSsiAdapter); -#endif -#ifdef CONFIG_SOC_PS_MODULE - if(ret == HAL_OK) { - // To register a new peripheral device power state - SsiPwrState.FuncIdx = SPI0+ pHalSsiAdapter->Index; - SsiPwrState.PwrState = ACT; - RegPowerState(SsiPwrState); - } -#endif - - return ret; -} - -HAL_Status -HalSsiDeInit(void *Data) -{ - HAL_Status ret; - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Data; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE SsiPwrState; - uint8_t HardwareState; - - SsiPwrState.FuncIdx= SPI0+ pHalSsiAdapter->Index; - QueryRegPwrState(SsiPwrState.FuncIdx, &(SsiPwrState.PwrState), &HardwareState); - - if(SsiPwrState.PwrState != HardwareState){ - DBG_SSI_ERR("Registered State is not the Hardware State"); - return HAL_ERR_UNKNOWN; - } - else{ - if((SsiPwrState.PwrState != INACT) && (SsiPwrState.PwrState !=ACT)){ - DBG_SSI_INFO("Return to ACT state before DeInit"); - HalSsiEnable(pHalSsiAdapter); - QueryRegPwrState(SsiPwrState.FuncIdx, &(SsiPwrState.PwrState), &HardwareState); - } - if(SsiPwrState.PwrState == ACT){ - SsiPwrState.PwrState = INACT; - RegPowerState(SsiPwrState); - } - } -#endif -#if CONFIG_CHIP_E_CUT - ret = HalSsiDeInitRtl8195a_V04(pHalSsiAdapter); -#else - ret = HalSsiDeInitRtl8195a(pHalSsiAdapter); -#endif - return ret; -} - - -HAL_Status -HalSsiEnable(void *Data) -{ - HAL_Status ret; - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Data; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE SsiPwrState; -#endif -#if CONFIG_CHIP_E_CUT - ret = HalSsiClockOnRtl8195a_V04(pHalSsiAdapter); -#else - ret = HalSsiClockOnRtl8195a(pHalSsiAdapter); -#endif -#ifdef CONFIG_SOC_PS_MODULE - if(ret == HAL_OK) { - // To register a new peripheral device power state - SsiPwrState.FuncIdx = SPI0+ pHalSsiAdapter->Index; - SsiPwrState.PwrState = ACT; - RegPowerState(SsiPwrState); - } -#endif - - return ret; -} - -HAL_Status -HalSsiDisable(void *Data) -{ - HAL_Status ret; - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Data; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE SsiPwrState; -#endif -#if CONFIG_CHIP_E_CUT - ret = HalSsiClockOffRtl8195a_V04(pHalSsiAdapter); -#else - ret = HalSsiClockOffRtl8195a(pHalSsiAdapter); -#endif -#ifdef CONFIG_SOC_PS_MODULE - if(ret == HAL_OK) { - // To register a new peripheral device power state - SsiPwrState.FuncIdx = SPI0+ pHalSsiAdapter->Index; - SsiPwrState.PwrState = SLPCG; - RegPowerState(SsiPwrState); - } -#endif - - return ret; -} - -HAL_Status HalSsiEnterCritical(void *Data) -{ - return HalSsiEnterCriticalRtl8195a(Data); -} - -HAL_Status HalSsiExitCritical(void *Data) -{ - return HalSsiExitCriticalRtl8195a(Data); -} - -HAL_Status HalSsiTimeout(uint32_t StartCount, uint32_t TimeoutCnt) -{ - return HalSsiIsTimeoutRtl8195a(StartCount,TimeoutCnt); -} - -HAL_Status HalSsiStopRecv(void * Data) -{ - return HalSsiStopRecvRtl8195a(Data); -} - -HAL_Status HalSsiSetFormat(void * Data) -{ - return HalSsiSetFormatRtl8195a(Data); -} - -#endif // CONFIG_SOC_PS_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_ssi.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_ssi.h deleted file mode 100644 index 53c8f43..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_ssi.h +++ /dev/null @@ -1,336 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_SSI_H_ -#define _HAL_SSI_H_ - -#include "rtl8195a_ssi.h" - -/** - * LOG Configurations - */ - -extern uint32_t SSI_DBG_CONFIG; -extern uint8_t SPI0_IS_AS_SLAVE; - - -#define SSI_DBG_ENTRANCE(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_ENTRANCE)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE ANSI_COLOR_GREEN __VA_ARGS__ ANSI_COLOR_RESET); \ -}while(0) - -#define SSI_DBG_INIT(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_INIT)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -#define SSI_DBG_INIT_V(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_INIT_V)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -#define SSI_DBG_INIT_VV(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_INIT_VV)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -#define SSI_DBG_PINMUX(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_PINMUX)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -#define SSI_DBG_ENDIS(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_ENDIS)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -#define SSI_DBG_INT(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_INT)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -#define SSI_DBG_INT_V(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_INT_V)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -#define SSI_DBG_INT_HNDLR(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_INT_HNDLR)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -#define SSI_DBG_INT_READ(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_INT_READ)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -#define SSI_DBG_INT_WRITE(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_INT_WRITE)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -#define SSI_DBG_STATUS(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_STATUS)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -#define SSI_DBG_FIFO(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_FIFO)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -#define SSI_DBG_READ(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_READ)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -#define SSI_DBG_WRITE(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_WRITE)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -#define SSI_DBG_SLV_CTRL(...) do {\ - if (unlikely(SSI_DBG_CONFIG & DBG_TYPE_SLV_CTRL)) \ - DBG_SSI_INFO(IDENT_FOUR_SPACE __VA_ARGS__); \ -}while(0) - -typedef enum _SSI_DBG_TYPE_LIST_ { - DBG_TYPE_ENTRANCE = 1 << 0, - DBG_TYPE_INIT = 1 << 1, - DBG_TYPE_INIT_V = 1 << 2, - DBG_TYPE_INIT_VV = 1 << 3, - DBG_TYPE_PINMUX = 1 << 4, - DBG_TYPE_ENDIS = 1 << 5, - DBG_TYPE_INT = 1 << 6, - DBG_TYPE_INT_V = 1 << 7, - DBG_TYPE_INT_HNDLR = 1 << 8, - DBG_TYPE_INT_READ = 1 << 9, - DBG_TYPE_INT_WRITE = 1 << 10, - DBG_TYPE_STATUS = 1 << 11, - DBG_TYPE_FIFO = 1 << 12, - DBG_TYPE_READ = 1 << 13, - DBG_TYPE_WRITE = 1 << 14, - DBG_TYPE_SLV_CTRL = 1 << 15 -} SSI_DBG_TYPE_LIST, *PSSI_DBG_TYPE_LIST; - - typedef struct _SSI_DMA_CONFIG_ { - void *pHalGdmaOp; - void *pTxHalGdmaAdapter; - void *pRxHalGdmaAdapter; - uint8_t RxDmaBurstSize; - uint8_t TxDmaBurstSize; - uint8_t RxDmaEnable; - uint8_t TxDmaEnable; - IRQ_HANDLE RxGdmaIrqHandle; - IRQ_HANDLE TxGdmaIrqHandle; -}SSI_DMA_CONFIG, *PSSI_DMA_CONFIG; - -#ifdef CONFIG_GDMA_EN -typedef struct _HAL_SSI_DMA_MULTIBLK_ { - volatile GDMA_CH_LLI_ELE GdmaChLli[16]; - struct GDMA_CH_LLI Lli[16]; - struct BLOCK_SIZE_LIST BlockSizeList[16]; -}SSI_DMA_MULTIBLK, *PSSI_DMA_MULTIBLK; -#endif -/** - * DesignWare SSI Configurations - */ -typedef struct _HAL_SSI_ADAPTOR_ { - SSI_DMA_CONFIG DmaConfig; - IRQ_HANDLE IrqHandle; - // - void (*RxCompCallback)(void *Para); - void *RxCompCbPara; - void *RxData; - void (*TxCompCallback)(void *Para); - void *TxCompCbPara; - void *TxData; - uint32_t DmaRxDataLevel; - uint32_t DmaTxDataLevel; - uint32_t InterruptPriority; - uint32_t RxLength; - uint32_t RxLengthRemainder; - uint32_t RxThresholdLevel; - uint32_t TxLength; - uint32_t TxThresholdLevel; - uint32_t SlaveSelectEnable; - // - uint16_t ClockDivider; - uint16_t DataFrameNumber; - // - uint8_t ControlFrameSize; - uint8_t DataFrameFormat; - uint8_t DataFrameSize; - uint8_t DmaControl; - uint8_t Index; - uint8_t InterruptMask; - uint8_t MicrowireDirection; - uint8_t MicrowireHandshaking; - uint8_t MicrowireTransferMode; - uint8_t PinmuxSelect; - uint8_t Role; - uint8_t SclkPhase; - uint8_t SclkPolarity; - uint8_t SlaveOutputEnable; - uint8_t TransferMode; - uint8_t TransferMechanism; - - // Extend - uint8_t Reserve; - uint8_t HaveTxChannel; - uint8_t HaveRxChannel; - uint8_t DefaultRxThresholdLevel; - #ifdef CONFIG_GDMA_EN - SSI_DMA_MULTIBLK DmaTxMultiBlk, DmaRxMultiBlk; - #endif - uint32_t ReservedDummy; - void (*TxIdleCallback)(void *Para); - void *TxIdleCbPara; -}HAL_SSI_ADAPTOR, *PHAL_SSI_ADAPTOR; - -typedef struct _HAL_SSI_OP_{ - HAL_Status (*HalSsiPinmuxEnable)(void *Adaptor); - HAL_Status (*HalSsiPinmuxDisable)(void *Adaptor); - HAL_Status (*HalSsiEnable)(void *Adaptor); - HAL_Status (*HalSsiDisable)(void *Adaptor); - HAL_Status (*HalSsiInit)(void *Adaptor); - HAL_Status (*HalSsiSetSclkPolarity)(void *Adaptor); - HAL_Status (*HalSsiSetSclkPhase)(void *Adaptor); - HAL_Status (*HalSsiWrite)(void *Adaptor, uint32_t value); - HAL_Status (*HalSsiLoadSetting)(void *Adaptor, void *Setting); - HAL_Status (*HalSsiSetInterruptMask)(void *Adaptor); - HAL_Status (*HalSsiSetDeviceRole)(void *Adaptor, uint32_t Role); - HAL_Status (*HalSsiInterruptEnable)(void *Adaptor); - HAL_Status (*HalSsiInterruptDisable)(void *Adaptor); - HAL_Status (*HalSsiReadInterrupt)(void *Adaptor, void *RxData, uint32_t Length); - HAL_Status (*HalSsiSetRxFifoThresholdLevel)(void *Adaptor); - HAL_Status (*HalSsiSetTxFifoThresholdLevel)(void *Adaptor); - HAL_Status (*HalSsiWriteInterrupt)(void *Adaptor, uint8_t *TxData, uint32_t Length); - HAL_Status (*HalSsiSetSlaveEnableRegister)(void *Adaptor, uint32_t SlaveIndex); - uint32_t (*HalSsiBusy)(void *Adaptor); - uint32_t (*HalSsiReadable)(void *Adaptor); - uint32_t (*HalSsiWriteable)(void *Adaptor); - uint32_t (*HalSsiGetInterruptMask)(void *Adaptor); - uint32_t (*HalSsiGetRxFifoLevel)(void *Adaptor); - uint32_t (*HalSsiGetTxFifoLevel)(void *Adaptor); - uint32_t (*HalSsiGetStatus)(void *Adaptor); - uint32_t (*HalSsiGetInterruptStatus)(void *Adaptor); - uint32_t (*HalSsiRead)(void *Adaptor); - uint32_t (*HalSsiGetRawInterruptStatus)(void *Adaptor); - uint32_t (*HalSsiGetSlaveEnableRegister)(void *Adaptor); -}HAL_SSI_OP, *PHAL_SSI_OP; - -typedef struct _DW_SSI_DEFAULT_SETTING_ { - void (*RxCompCallback)(void *Para); - void *RxCompCbPara; - void *RxData; - void (*TxCompCallback)(void *Para); - void *TxCompCbPara; - void *TxData; - uint32_t DmaRxDataLevel; - uint32_t DmaTxDataLevel; - uint32_t InterruptPriority; - uint32_t RxLength; - uint32_t RxLengthRemainder; - uint32_t RxThresholdLevel; - uint32_t TxLength; - uint32_t TxThresholdLevel; - uint32_t SlaveSelectEnable; - // - uint16_t ClockDivider; - uint16_t DataFrameNumber; - // - uint8_t ControlFrameSize; - uint8_t DataFrameFormat; - uint8_t DataFrameSize; - uint8_t DmaControl; - //uint8_t Index; - uint8_t InterruptMask; - uint8_t MicrowireDirection; - uint8_t MicrowireHandshaking; - uint8_t MicrowireTransferMode; - //uint8_t PinmuxSelect; - //uint8_t Role; - uint8_t SclkPhase; - uint8_t SclkPolarity; - uint8_t SlaveOutputEnable; - uint8_t TransferMode; - uint8_t TransferMechanism; -} DW_SSI_DEFAULT_SETTING, *PDW_SSI_DEFAULT_SETTING; - - -struct spi_s { - HAL_SSI_ADAPTOR spi_adp; - HAL_SSI_OP spi_op; - uint32_t irq_handler; - uint32_t irq_id; - uint32_t dma_en; - uint32_t state; - uint8_t sclk; -#ifdef CONFIG_GDMA_EN - HAL_GDMA_ADAPTER spi_gdma_adp_tx; - HAL_GDMA_ADAPTER spi_gdma_adp_rx; -#endif - uint32_t bus_tx_done_handler; - uint32_t bus_tx_done_irq_id; -}; - -void HalSsiOpInit(void *Adaptor); -static __inline__ void HalSsiSetSclk( - IN PHAL_SSI_ADAPTOR pHalSsiAdapter, - IN uint32_t ClkRate) -{ - HalSsiSetSclkRtl8195a((void*)pHalSsiAdapter, ClkRate); -} - -HAL_Status HalSsiInit(void * Data); -HAL_Status HalSsiDeInit(void * Data); -HAL_Status HalSsiEnable(void * Data); -HAL_Status HalSsiDisable(void * Data); -HAL_Status HalSsiEnterCritical(void * Data); -HAL_Status HalSsiExitCritical(void * Data); -HAL_Status HalSsiTimeout(uint32_t StartCount, uint32_t TimeoutCnt); -HAL_Status HalSsiStopRecv(void * Data); -HAL_Status HalSsiSetFormat(void * Data); -#ifdef CONFIG_GDMA_EN -HAL_Status HalSsiTxGdmaInit(PHAL_SSI_OP pHalSsiOp, PHAL_SSI_ADAPTOR pHalSsiAdapter); -void HalSsiTxGdmaDeInit(PHAL_SSI_ADAPTOR pHalSsiAdapter); -HAL_Status HalSsiRxGdmaInit(PHAL_SSI_OP pHalSsiOp, PHAL_SSI_ADAPTOR pHalSsiAdapter); -void HalSsiRxGdmaDeInit(PHAL_SSI_ADAPTOR pHalSsiAdapter); -HAL_Status HalSsiRxMultiBlkChnl(PHAL_SSI_ADAPTOR pHalSsiAdapter); -HAL_Status HalSsiDmaRecv(void * Adapter, uint8_t * pRxData, uint32_t Length); -HAL_Status HalSsiDmaSend(void *Adapter, uint8_t *pTxData, uint32_t Length); - -static __inline__ void -HalSsiDmaInit( - IN PHAL_SSI_ADAPTOR pHalSsiAdapter -) -{ - #if CONFIG_CHIP_E_CUT - HalSsiDmaInitRtl8195a_V04((void *)pHalSsiAdapter); - #else - HalSsiDmaInitRtl8195a((void *)pHalSsiAdapter); - #endif -} -/* -static __inline__ HAL_Status HalSsiDmaSend(void *Adapter, uint8_t *pTxData, uint32_t Length) -{ - return (HalSsiDmaSendRtl8195a(Adapter, pTxData, Length)); -} - -static __inline__ HAL_Status HalSsiDmaRecv(void *Adapter, uint8_t *pRxData, uint32_t Length) -{ - return (HalSsiDmaRecvRtl8195a(Adapter, pRxData, Length)); -} -*/ - -#endif // end of "#ifdef CONFIG_GDMA_EN" - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_timer.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_timer.c deleted file mode 100644 index ac3b94c..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_timer.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#include "rtl8195a.h" - -#ifdef CONFIG_TIMER_EN -void -HalTimerOpInit_Patch( - IN void *Data -) -{ - PHAL_TIMER_OP pHalTimerOp = (PHAL_TIMER_OP) Data; - - pHalTimerOp->HalGetTimerId = HalGetTimerIdRtl8195a; -#ifdef CONFIG_CHIP_E_CUT - pHalTimerOp->HalTimerInit = (BOOL (*)(void*))HalTimerInitRtl8195a_V04; -#else - pHalTimerOp->HalTimerInit = (BOOL (*)(void*))HalTimerInitRtl8195a_Patch; -#endif -#if defined(CONFIG_CHIP_C_CUT) || defined(CONFIG_CHIP_E_CUT) - pHalTimerOp->HalTimerReadCount = HalTimerReadCountRtl8195aV02; -#else - pHalTimerOp->HalTimerReadCount = HalTimerReadCountRtl8195a_Patch; -#endif - pHalTimerOp->HalTimerIrqClear = HalTimerIrqClearRtl8195a; - pHalTimerOp->HalTimerDis = HalTimerDisRtl8195a_Patch; - pHalTimerOp->HalTimerEn = HalTimerEnRtl8195a_Patch; - pHalTimerOp->HalTimerDumpReg = HalTimerDumpRegRtl8195a; -} - -#endif // CONFIG_TIMER_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_timer.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_timer.h deleted file mode 100644 index d67661a..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_timer.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_TIMER_H_ -#define _HAL_TIMER_H_ -#include "basic_types.h" -#include "hal_platform.h" -#include "rtl8195a_timer.h" - -#define GTIMER_CLK_HZ (32768) -#define GTIMER_TICK_US (1000000/GTIMER_CLK_HZ) - -typedef enum _TIMER_MODE_ { - FREE_RUN_MODE = 0, - USER_DEFINED = 1 -}TIMER_MODE, *PTIMER_MODE; - - -typedef struct _TIMER_ADAPTER_ { - - uint32_t TimerLoadValueUs; //+00 - uint32_t TimerIrqPriority; //+04 - TIMER_MODE TimerMode; //+08 - IRQ_HANDLE IrqHandle; //+0c - uint8_t TimerId; //+1c? - uint8_t IrqDis; //+1d? - -}TIMER_ADAPTER, *PTIMER_ADAPTER; - - -typedef struct _HAL_TIMER_OP_ { - uint32_t (*HalGetTimerId)(uint32_t *TimerId); //+00 - BOOL (*HalTimerInit)(void *Data); //+04 - uint32_t (*HalTimerReadCount)(uint32_t TimerId); //+08 - void (*HalTimerIrqClear)(uint32_t TimerId); //+0c - void (*HalTimerDis)(uint32_t TimerId); //+10 - void (*HalTimerEn)(uint32_t TimerId); //+14 - void (*HalTimerDumpReg)(uint32_t TimerId); //+18 -}HAL_TIMER_OP, *PHAL_TIMER_OP; - -#ifdef CONFIG_TIMER_MODULE -// This variable declared in ROM code -extern HAL_TIMER_OP HalTimerOp; -#endif - -void HalTimerOpInit_Patch( - IN void *Data -); - - -//====================================================== -// ROM Function prototype -_LONG_CALL_ void HalTimerOpInitV02(IN void *Data); - -#ifndef CONFIG_RELEASE_BUILD_LIBRARIES -#define HalTimerOpInit HalTimerOpInit_Patch -#endif - -#ifdef CONFIG_RELEASE_BUILD_LIBRARIES -void HalTimerOpInit( - void *Data -); - -HAL_Status -HalTimerInit( - void *Data -); - -void -HalTimerEnable( - uint32_t TimerId -); - -void -HalTimerDisable( - uint32_t TimerId -); - -void -HalTimerReLoad( - uint32_t TimerId, - uint32_t LoadUs -); - -void -HalTimerDeInit( - void *Data -); -#endif // #ifdef CONFIG_RELEASE_BUILD_LIBRARIES -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_uart.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_uart.c deleted file mode 100644 index 10a713b..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_uart.c +++ /dev/null @@ -1,1112 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#include "rtl8195a.h" -#include "rtl8195a_uart.h" -#include "hal_uart.h" -#include "hal_gdma.h" - -#ifdef CONFIG_UART_EN - -#ifndef CONFIG_CHIP_E_CUT -// Pre-Defined Supported Baud Rate Table for CPU 166 MHz -const uint32_t DEF_BAUDRATE_TABLE[] = { - 110, 300, 600, 1200, - 2400, 4800, 9600, 14400, - 19200, 28800, 38400, 57600, - 76800, 115200, 128000, 153600, - 230400, 380400, 460800, 500000, - 921600, 1000000, 1382400, 1444400, - 1500000, 1843200, 2000000, 2100000, - 2764800, 3000000, 3250000, 3692300, - 3750000, 4000000, 6000000, - - 56000, 256000, - - // For UART to IR Carrier - 66000, 72000, 73400, 76000, - 80000, 112000, - - // End of the table - 0xffffffff -}; - -const uint16_t ovsr_adj_table_10bit[10] = { - 0x000, 0x020, 0x044, 0x124, 0x294, 0x2AA, 0x16B, 0x2DB, 0x3BB, 0x3EF -}; - -const uint16_t ovsr_adj_table_9bit[9] = { - 0x000, 0x010, 0x044, 0x92, 0xAA, 0x155, 0x1B6, 0x1BB, 0x1EF -}; - -const uint16_t ovsr_adj_table_8bit[8] = { - 0x000, 0x010, 0x044, 0x92, 0xAA, 0xB5, 0xBB, 0xEF -}; - -#if 0 // Old format -#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) - -const uint8_t DEF_OVSR_166[] = { - 10, 10, 12, 14, - 10, 10, 10, 11, - 14, 11, 14, 11, - 14, 10, 11, 14, - 18, 17, 17, 18, - 17, 13, 19, 18, - 10, 11, 13, 19, - 14, 13, 12, 11, - 10, 10, 13, - - 20, 18, - - // For UART to IR Carrier - 13, 13, 18, 15, - 20, 12, -}; - -const uint16_t DEF_DIV_166[] = { - 74272, 27233, 11347, 4863, - 3404, 1702, 851, 516, - 304, 258, 152, 129, - 76, 71, 58, 38, - 19, 12, 10, 9, - 5, 6, 3, 3, - 5, 4, 3, 2, - 2, 2, 2, 2, - 2, 2, 1, - - 73, 17, - - // For UART to IR Carrier - 97, 89, 63, 73, - 52, 62, -}; - - -const uint16_t DEF_OVSR_ADJ_166[] = { - 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, - 0x2AA, 0x3BB, 0x1B6, 0x010, - 0x1B6, 0x2AA, 0x1B6, 0x2DB, - 0x3BB, 0x000, 0x2AA, 0x294, - 0x2DB, 0x2AA, 0x2AA, 0x000 , - 0x3BB, 0x088, 0x2AA, - - 0x000, 0x2DB, - - // For UART to IR Carrier - 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000 -}; -#endif //#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) - -#ifdef CONFIG_CHIP_C_CUT - -const uint8_t DEF_OVSR_166[] = { - 13, 12, 12, 12, - 18, 10, 10, 11, - 10, 11, 10, 20, - 20, 20, 20, 20, - 20, 18, 20, 12, - 15, 16, 20, 19, - 18, 15, 10, 13, - 15, 13, 12, 11, - 11, 10, 13, - - 16, 18, - - // For UART to IR Carrier - 13, 13, 18, 15, - 20, 12, -}; - -const uint16_t DEF_DIV_166[] = { - 58275, 23148, 11574, 5787, - 1929, 1736, 868, 526, - 434, 263, 217, 72, - 54, 36, 32, 27, - 18, 12, 9, 13, - 6, 5, 3, 3, - 3, 3, 4, 3, - 2, 2, 2, 2, - 2, 2, 1, - - 93, 18, - - // For UART to IR Carrier - 97, 89, 63, 73, - 52, 62, -}; - -const uint16_t DEF_OVSR_ADJ_166[] = { - 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x010, - 0x010, 0x010, 0x124, 0x010, - 0x010, 0x088, 0x010, 0x2DB, - 0x000, 0x16B, 0x010, 0x088, - 0x2AA, 0x000, 0x294, 0x088, - 0x000, 0x3BB, 0x3BB, 0x088, - 0x010, 0x294, 0x3BB, - - 0x000, 0x010, - - // For UART to IR Carrier - 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000 -}; - -#endif // #ifdef CONFIG_CHIP_C_CUT -#endif // end of #if 0 // Old format - -#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) -const uint8_t DEF_OVSR_B_CUT[] = { - 20, 20, 20, 20, - 20, 20, 15, 18, - 13, 15, 18, 13, - 18, 12, 11, 10, - 16, 15, 16, 18, - 11, 20, 19, 14, - 18, 11, 20, 19, - 14, 13, 12, 11, - 21, 20, 13, - - 18, 11, - - // For UART to IR Carrier - 13, 13, 18, 15, - 20, 12 - -}; - -const uint16_t DEF_DIV_B_CUT[] = { - 37202, 13616, 6808, 3404, - 1702, 851, 567, 315, - 327, 189, 118, 109, - 59, 59, 58, 53, - 22, 14, 11, 9, - 8, 4, 3, 4, - 3, 4, 2, 2, - 2, 2, 2, 2, - 1, 1, 1, - - 81, 29, - - // For UART to IR Carrier - 97, 89, 63, 73, - 52, 62 -}; - -const uint8_t DEF_OVSR_ADJ_BITS_B_CUT_10B[] = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 1, 3, 1, 2, - 1, 4, 7, 1, - 2, 1, 4, 5, - 8, 6, 6, 1, - 8, 4, 6, - - 0, 0, - - // For UART to IR Carrier - 0, 0, 0, 0, - 0, 0 - -}; - -const uint8_t DEF_OVSR_ADJ_BITS_B_CUT_9B[] = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 1, 3, 1, 1, - 1, 4, 6, 1, - 1, 1, 4, 4, - 7, 6, 5, 1, - 7, 4, 6, - - 0, 0, - - // For UART to IR Carrier - 0, 0, 0, 0, - 0, 0 - -}; - -const uint8_t DEF_OVSR_ADJ_BITS_B_CUT_8B[] = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 1, 3, 1, 1, - 1, 4, 6, 1, - 1, 1, 4, 4, - 6, 5, 5, 1, - 6, 4, 5, - - 0, 0, - - // For UART to IR Carrier - 0, 0, 0, 0, - 0, 0 -}; - -#endif // #if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) - -const uint8_t DEF_OVSR_C_CUT[] = { - 20, 20, 20, 20, - 20, 20, 20, 14, - 20, 12, 14, 19, - 19, 19, 13, 20, - 19, 18, 20, 15, - 18, 20, 20, 19, - 11, 15, 20, 13, - 15, 13, 12, 11, - 11, 20, 13, - - 16, 13, - - // For UART to IR Carrier - 13, 13, 18, 15, - 20, 12 -}; - -const uint16_t DEF_DIV_C_CUT[] = { - 37878, 13888, 6944, 3472, - 1736, 868, 434, 413, - 217, 241, 155, 76, - 57, 38, 50, 27, - 19, 12, 9, 11, - 5, 4, 3, 3, - 5, 3, 2, 3, - 2, 2, 2, 2, - 2, 1, 1, - - 93, 25, - - // For UART to IR Carrier - 97, 89, 63, 73, - 52, 62 -}; - -const uint8_t DEF_OVSR_ADJ_BITS_C_CUT_10B[] = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 1, - 0, 3, 1, 2, - 1, 8, 1, 2, - 1, 1, 8, 2, - 1, 9, 8, 3, - 1, 8, 9, - - 0, 0, - - // For UART to IR Carrier - 0, 0, 0, 0, - 0, 0 - -}; - -const uint8_t DEF_OVSR_ADJ_BITS_C_CUT_9B[] = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 1, - 0, 2, 1, 1, - 1, 8, 1, 2, - 1, 1, 8, 2, - 1, 8, 8, 3, - 1, 8, 8, - - 0, 0, - - // For UART to IR Carrier - 0, 0, 0, 0, - 0, 0 - -}; - -const uint8_t DEF_OVSR_ADJ_BITS_C_CUT_8B[] = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 1, - 0, 2, 1, 1, - 1, 7, 1, 2, - 1, 1, 7, 2, - 1, 7, 7, 2, - 1, 7, 7, - - 0, 0, - - // For UART to IR Carrier - 0, 0, 0, 0, - 0, 0 -}; -#else -extern const uint32_t DEF_BAUDRATE_TABLE_ROM[]; -extern const uint16_t ovsr_adj_table_10bit_rom[10]; -extern const uint16_t ovsr_adj_table_9bit_rom[9]; -extern const uint16_t ovsr_adj_table_8bit_rom[8]; -extern const uint8_t DEF_OVSR_ROM[]; -extern const uint16_t DEF_DIV_ROM[]; -extern const uint8_t DEF_OVSR_ADJ_10BITS_ROM[]; -extern const uint8_t DEF_OVSR_ADJ_9BITS_ROM[]; -extern const uint8_t DEF_OVSR_ADJ_8BITS_ROM[]; - -#endif // #if !(CONFIG_CHIP_E_CUT) - -extern uint32_t _UartIrqHandle(void *Data); - -extern HAL_Status -HalRuartInitRtl8195a_Patch( - IN void *Data ///< RUART Adapter - ); - -#if (CONFIG_CHIP_C_CUT) -extern _LONG_CALL_ HAL_Status -HalRuartInitRtl8195aV02( - IN void *Data ///< RUART Adapter - ); -#endif - -extern uint8_t HalRuartGetChipVerRtl8195a(void); - -const HAL_GDMA_CHNL Uart2_TX_GDMA_Chnl_Option[] = { - {0,0,GDMA0_CHANNEL0_IRQ,0}, - {0,1,GDMA0_CHANNEL1_IRQ,0}, - {0,2,GDMA0_CHANNEL2_IRQ,0}, - {0,3,GDMA0_CHANNEL3_IRQ,0}, - {0,4,GDMA0_CHANNEL4_IRQ,0}, - {0,5,GDMA0_CHANNEL5_IRQ,0}, - - {0xff,0,0,0} // end -}; - -const HAL_GDMA_CHNL Uart2_RX_GDMA_Chnl_Option[] = { - {1,0,GDMA1_CHANNEL0_IRQ,0}, - {1,1,GDMA1_CHANNEL1_IRQ,0}, - {1,2,GDMA1_CHANNEL2_IRQ,0}, - {1,3,GDMA1_CHANNEL3_IRQ,0}, - {1,4,GDMA1_CHANNEL4_IRQ,0}, - {1,5,GDMA1_CHANNEL5_IRQ,0}, - - {0xff,0,0,0} // end -}; - -const HAL_GDMA_CHNL Uart_GDMA_MB_Chnl_Option[] = { - {0,4,GDMA0_CHANNEL4_IRQ,0}, - {1,4,GDMA1_CHANNEL4_IRQ,0}, - {0,5,GDMA0_CHANNEL5_IRQ,0}, - {1,5,GDMA1_CHANNEL5_IRQ,0}, - - {0xff,0,0,0} // end -}; - -const HAL_GDMA_CHNL Uart2_TX_GDMA_MB_Chnl_Option[] = { - {0,4,GDMA0_CHANNEL4_IRQ,0}, - {0,5,GDMA0_CHANNEL5_IRQ,0}, - - {0xff,0,0,0} // end -}; - -const HAL_GDMA_CHNL Uart2_RX_GDMA_MB_Chnl_Option[] = { - {1,4,GDMA1_CHANNEL4_IRQ,0}, - {1,5,GDMA1_CHANNEL5_IRQ,0}, - - {0xff,0,0,0} // end -}; - - -void -HalRuartOpInit( - IN void *Data -) -{ - PHAL_RUART_OP pHalRuartOp = (PHAL_RUART_OP) Data; - - pHalRuartOp->HalRuartAdapterLoadDef = HalRuartAdapterLoadDefRtl8195a; - pHalRuartOp->HalRuartTxGdmaLoadDef = HalRuartTxGdmaLoadDefRtl8195a; - pHalRuartOp->HalRuartRxGdmaLoadDef = HalRuartRxGdmaLoadDefRtl8195a; - pHalRuartOp->HalRuartResetRxFifo = HalRuartResetRxFifoRtl8195a_Patch; -#if CONFIG_CHIP_E_CUT - pHalRuartOp->HalRuartInit = HalRuartInitRtl8195a_V04; -#else - pHalRuartOp->HalRuartInit = HalRuartInitRtl8195a_Patch; // Hardware Init ROM code patch -#endif - pHalRuartOp->HalRuartDeInit = HalRuartDeInitRtl8195a; // Hardware Init - pHalRuartOp->HalRuartPutC = HalRuartPutCRtl8195a; // Send a byte - pHalRuartOp->HalRuartSend = HalRuartSendRtl8195a; // Polling mode Tx - pHalRuartOp->HalRuartIntSend = HalRuartIntSendRtl8195a; // Interrupt mode Tx -#if CONFIG_CHIP_E_CUT - pHalRuartOp->HalRuartDmaSend = HalRuartDmaSendRtl8195a_V04; // DMA mode Tx - pHalRuartOp->HalRuartStopSend = HalRuartStopSendRtl8195a_V04; // Stop non-blocking TX -#else - pHalRuartOp->HalRuartDmaSend = HalRuartDmaSendRtl8195a_Patch; // DMA mode Tx - pHalRuartOp->HalRuartStopSend = HalRuartStopSendRtl8195a_Patch; // Stop non-blocking TX -#endif - pHalRuartOp->HalRuartGetC = HalRuartGetCRtl8195a; // get a byte - pHalRuartOp->HalRuartRecv = HalRuartRecvRtl8195a; // Polling mode Rx - pHalRuartOp->HalRuartIntRecv = HalRuartIntRecvRtl8195a; // Interrupt mode Rx - pHalRuartOp->HalRuartDmaRecv = HalRuartDmaRecvRtl8195a; // DMA mode Rx -#if CONFIG_CHIP_E_CUT - pHalRuartOp->HalRuartStopRecv = HalRuartStopRecvRtl8195a_V04; // Stop non-blocking Rx -#else - pHalRuartOp->HalRuartStopRecv = HalRuartStopRecvRtl8195a_Patch; // Stop non-blocking Rx -#endif - pHalRuartOp->HalRuartGetIMR = HalRuartGetIMRRtl8195a; - pHalRuartOp->HalRuartSetIMR = HalRuartSetIMRRtl8195a; - pHalRuartOp->HalRuartGetDebugValue = HalRuartGetDebugValueRtl8195a; - pHalRuartOp->HalRuartDmaInit = HalRuartDmaInitRtl8195a; - pHalRuartOp->HalRuartRTSCtrl = HalRuartRTSCtrlRtl8195a; - pHalRuartOp->HalRuartRegIrq = HalRuartRegIrqRtl8195a; - pHalRuartOp->HalRuartIntEnable = HalRuartIntEnableRtl8195a; - pHalRuartOp->HalRuartIntDisable = HalRuartIntDisableRtl8195a; -} - -/** - * Load UART HAL default setting - * - * Call this function to load the default setting for UART HAL adapter - * - * - */ -void -HalRuartAdapterInit( - PRUART_ADAPTER pRuartAdapter, - uint8_t UartIdx -) -{ - PHAL_RUART_OP pHalRuartOp; - PHAL_RUART_ADAPTER pHalRuartAdapter; - - if (NULL == pRuartAdapter) { - return; - } - - pHalRuartOp = pRuartAdapter->pHalRuartOp; - pHalRuartAdapter = pRuartAdapter->pHalRuartAdapter; - - if ((NULL == pHalRuartOp) || (NULL == pHalRuartAdapter)) { - return; - } - - // Load default setting - if (pHalRuartOp->HalRuartAdapterLoadDef != NULL) { - pHalRuartOp->HalRuartAdapterLoadDef (pHalRuartAdapter, UartIdx); - pHalRuartAdapter->IrqHandle.Priority = 10; - } - else { - // Initial your UART HAL adapter here - } - - // Start to modify the defualt setting - pHalRuartAdapter->PinmuxSelect = RUART0_MUX_TO_GPIOC; - pHalRuartAdapter->BaudRate = 38400; - -// pHalRuartAdapter->IrqHandle.IrqFun = (IRQ_FUN)_UartIrqHandle; -// pHalRuartAdapter->IrqHandle.Data = (void *)pHalRuartAdapter; - - // Register IRQ - InterruptRegister(&pHalRuartAdapter->IrqHandle); - -} - -/** - * Load UART HAL GDMA default setting - * - * Call this function to load the default setting for UART GDMA - * - * - */ -HAL_Status -HalRuartTxGdmaInit( - PHAL_RUART_ADAPTER pHalRuartAdapter, - PUART_DMA_CONFIG pUartGdmaConfig, - uint8_t IsMultiBlk -) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - HAL_GDMA_CHNL *pgdma_chnl; - HAL_GDMA_CHNL *pgdma_chnl_tbl=NULL; - UART_DMA_MULTIBLK *pDmaBlkList; - - if ((NULL == pHalRuartAdapter) || (NULL == pUartGdmaConfig)) { - return HAL_ERR_PARA; - } - - // Load default setting - HalRuartTxGdmaLoadDefRtl8195a (pHalRuartAdapter, pUartGdmaConfig); - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pTxHalGdmaAdapter; - if (IsMultiBlk) { - // need to allocate a multiple block channel - if (pHalRuartAdapter->UartIndex != 2) { - pgdma_chnl_tbl = (HAL_GDMA_CHNL*)Uart_GDMA_MB_Chnl_Option; - } else { - // UART2 TX Only can use GDMA 0 - pgdma_chnl_tbl = (HAL_GDMA_CHNL*)Uart2_TX_GDMA_MB_Chnl_Option; - } - // Default use the 1st channel of the table - pgdma_chnl = pgdma_chnl_tbl; - pHalGdmaAdapter->GdmaIndex = pgdma_chnl->GdmaIndx; - pHalGdmaAdapter->ChNum = pgdma_chnl->GdmaChnl; - pHalGdmaAdapter->ChEn = 0x0101 << pgdma_chnl->GdmaChnl; - pUartGdmaConfig->TxGdmaIrqHandle.IrqNum = pgdma_chnl->IrqNum; - } else { - if (pHalRuartAdapter->UartIndex == 2) { - // UART2 TX Only can use GDMA 0 - pgdma_chnl_tbl = (HAL_GDMA_CHNL *)Uart2_TX_GDMA_Chnl_Option; - } - } - - // Start to patch the default setting - if (HalGdmaChnlRegister(pHalGdmaAdapter->GdmaIndex, pHalGdmaAdapter->ChNum) != HAL_OK) { - // The default GDMA Channel is not available, try others - pgdma_chnl = HalGdmaChnlAlloc(pgdma_chnl_tbl); - - if (pgdma_chnl == NULL) { - // No Available DMA channel - DBG_UART_WARN("HalRuartTxGdmaInit: Allocate DMA Channel Failed\n"); - return HAL_BUSY; - } - else { - pHalGdmaAdapter->GdmaIndex = pgdma_chnl->GdmaIndx; - pHalGdmaAdapter->ChNum = pgdma_chnl->GdmaChnl; - pHalGdmaAdapter->ChEn = 0x0101 << pgdma_chnl->GdmaChnl; - pUartGdmaConfig->TxGdmaIrqHandle.IrqNum = pgdma_chnl->IrqNum; - } - } - - // User can assign a Interrupt Handler here -// pUartGdmaConfig->TxGdmaIrqHandle.Data = pHalRuartAdapter; -// pUartGdmaConfig->TxGdmaIrqHandle.IrqFun = (IRQ_FUN)_UartTxDmaIrqHandle -// pUartGdmaConfig->TxGdmaIrqHandle.Priority = 12; - pUartGdmaConfig->TxGdmaIrqHandle.Priority = 12; -#if CONFIG_CHIP_E_CUT - pUartGdmaConfig->TxGdmaIrqHandle.IrqFun = (IRQ_FUN)_UartTxDmaIrqHandle_V04; -#else - pUartGdmaConfig->TxGdmaIrqHandle.IrqFun = (IRQ_FUN)_UartTxDmaIrqHandle_Patch; -#endif - HalRuartDmaInitRtl8195a (pHalRuartAdapter); - InterruptRegister(&pUartGdmaConfig->TxGdmaIrqHandle); - InterruptEn(&pUartGdmaConfig->TxGdmaIrqHandle); - pUartGdmaConfig->TxDmaMBChnl = IsMultiBlk; - - if (IsMultiBlk) { - pDmaBlkList = pUartGdmaConfig->pTxDmaBlkList; - if (NULL != pDmaBlkList) { - pHalGdmaAdapter->pBlockSizeList = (struct BLOCK_SIZE_LIST*) &(pDmaBlkList->BlockSizeList); - pHalGdmaAdapter->pLlix = (struct GDMA_CH_LLI*) &(pDmaBlkList->Lli); - } else { - DBG_UART_WARN("HalRuartTxGdmaInit: no Block List for DMA\n"); - } - } - - return HAL_OK; -} - -void -HalRuartTxGdmaDeInit( - PUART_DMA_CONFIG pUartGdmaConfig -) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - HAL_GDMA_CHNL GdmaChnl; - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pTxHalGdmaAdapter; - GdmaChnl.GdmaIndx = pHalGdmaAdapter->GdmaIndex; - GdmaChnl.GdmaChnl = pHalGdmaAdapter->ChNum; - GdmaChnl.IrqNum = pUartGdmaConfig->TxGdmaIrqHandle.IrqNum; - HalGdmaChnlFree(&GdmaChnl); - pUartGdmaConfig->TxDmaMBChnl = 0; -} - -/** - * Load UART HAL GDMA default setting - * - * Call this function to load the default setting for UART GDMA - * - * - */ -HAL_Status -HalRuartRxGdmaInit( - PHAL_RUART_ADAPTER pHalRuartAdapter, - PUART_DMA_CONFIG pUartGdmaConfig, - uint8_t IsMultiBlk -) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - HAL_GDMA_CHNL *pgdma_chnl; - HAL_GDMA_CHNL *pgdma_chnl_tbl=NULL; - UART_DMA_MULTIBLK *pDmaBlkList; - - if ((NULL == pHalRuartAdapter) || (NULL == pUartGdmaConfig)) { - return HAL_ERR_PARA; - } - - // Load default setting - HalRuartRxGdmaLoadDefRtl8195a (pHalRuartAdapter, pUartGdmaConfig); - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pRxHalGdmaAdapter; - if (IsMultiBlk) { - // need to allocate a multiple block channel - if (pHalRuartAdapter->UartIndex != 2) { - pgdma_chnl_tbl = (HAL_GDMA_CHNL *)Uart_GDMA_MB_Chnl_Option; - } else { - // UART2 RX Only can use GDMA 1 - pgdma_chnl_tbl = (HAL_GDMA_CHNL *)Uart2_RX_GDMA_MB_Chnl_Option; - } - // Default use the 1st channel of the table - pgdma_chnl = pgdma_chnl_tbl; - pHalGdmaAdapter->GdmaIndex = pgdma_chnl->GdmaIndx; - pHalGdmaAdapter->ChNum = pgdma_chnl->GdmaChnl; - pHalGdmaAdapter->ChEn = 0x0101 << pgdma_chnl->GdmaChnl; - pUartGdmaConfig->RxGdmaIrqHandle.IrqNum = pgdma_chnl->IrqNum; - } else { - if (pHalRuartAdapter->UartIndex == 2) { - // UART2 RX Only can use GDMA 1 - pgdma_chnl_tbl = (HAL_GDMA_CHNL *)Uart2_RX_GDMA_Chnl_Option; - } - } - - // Start to patch the default setting - if (HalGdmaChnlRegister(pHalGdmaAdapter->GdmaIndex, pHalGdmaAdapter->ChNum) != HAL_OK) { - // The default GDMA Channel is not available, try others - pgdma_chnl = HalGdmaChnlAlloc((HAL_GDMA_CHNL*)pgdma_chnl_tbl); - if (pgdma_chnl == NULL) { - // No Available DMA channel - DBG_UART_WARN("HalRuartRxGdmaInit: Allocate DMA Channel Failed\n"); - return HAL_BUSY; - } - else { - pHalGdmaAdapter->GdmaIndex = pgdma_chnl->GdmaIndx; - pHalGdmaAdapter->ChNum = pgdma_chnl->GdmaChnl; - pHalGdmaAdapter->ChEn = 0x0101 << pgdma_chnl->GdmaChnl; - pUartGdmaConfig->RxGdmaIrqHandle.IrqNum = pgdma_chnl->IrqNum; - } - } - -// pUartGdmaConfig->RxGdmaIrqHandle.Data = pHalRuartAdapter; -#if CONFIG_CHIP_E_CUT - pUartGdmaConfig->RxGdmaIrqHandle.IrqFun = (IRQ_FUN)_UartRxDmaIrqHandle_V04; -#else - pUartGdmaConfig->RxGdmaIrqHandle.IrqFun = (IRQ_FUN)_UartRxDmaIrqHandle_Patch; -#endif - pUartGdmaConfig->RxGdmaIrqHandle.Priority = 11; - - HalRuartDmaInitRtl8195a (pHalRuartAdapter); - InterruptRegister(&pUartGdmaConfig->RxGdmaIrqHandle); - InterruptEn(&pUartGdmaConfig->RxGdmaIrqHandle); - pUartGdmaConfig->RxDmaMBChnl = IsMultiBlk; - if (IsMultiBlk) { - pDmaBlkList = pUartGdmaConfig->pRxDmaBlkList; - if (NULL != pDmaBlkList) { - pHalGdmaAdapter->pBlockSizeList = (struct BLOCK_SIZE_LIST*) &(pDmaBlkList->BlockSizeList); - pHalGdmaAdapter->pLlix = (struct GDMA_CH_LLI*) &(pDmaBlkList->Lli); - } else { - DBG_UART_WARN("HalRuartRxGdma: no Block List for DMA\n"); - } - } - - return HAL_OK; -} - -void -HalRuartRxGdmaDeInit( - PUART_DMA_CONFIG pUartGdmaConfig -) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - HAL_GDMA_CHNL GdmaChnl; - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pRxHalGdmaAdapter; - GdmaChnl.GdmaIndx = pHalGdmaAdapter->GdmaIndex; - GdmaChnl.GdmaChnl = pHalGdmaAdapter->ChNum; - GdmaChnl.IrqNum = pUartGdmaConfig->RxGdmaIrqHandle.IrqNum; - HalGdmaChnlFree(&GdmaChnl); - pUartGdmaConfig->RxDmaMBChnl = 0; -} - -/** - * Hook a RX indication callback - * - * To hook a callback function which will be called when a got a RX byte - * - * - */ -void -HalRuartRxIndHook( - PRUART_ADAPTER pRuartAdapter, - void *pCallback, - void *pPara -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = pRuartAdapter->pHalRuartAdapter; - - pHalRuartAdapter->RxDRCallback = (void (*)(void*))pCallback; - pHalRuartAdapter->RxDRCbPara = pPara; - - // enable RX data ready interrupt - pHalRuartAdapter->Interrupts |= RUART_IER_ERBI | RUART_IER_ELSI; - pRuartAdapter->pHalRuartOp->HalRuartSetIMR(pHalRuartAdapter); -} - - -HAL_Status -HalRuartResetTxFifo( - IN void *Data -) -{ -#if CONFIG_CHIP_E_CUT - return (HalRuartResetTxFifoRtl8195a_V04(Data)); -#else - return (HalRuartResetTxFifoRtl8195a(Data)); -#endif -} - -HAL_Status -HalRuartResetRxFifo( - IN void *Data -) -{ -#if CONFIG_CHIP_E_CUT - return (HalRuartResetRxFifoRtl8195a_V04(Data)); -#else - return (HalRuartResetRxFifoRtl8195a_Patch(Data)); -#endif -} - -HAL_Status -HalRuartResetTRxFifo( - IN void *Data -) -{ -#if CONFIG_CHIP_E_CUT - return (HalRuartResetTRxFifoRtl8195a_V04(Data)); -#else - return (HalRuartResetTRxFifoRtl8195a(Data)); -#endif -} - -HAL_Status -HalRuartSetBaudRate( - IN void *Data -) -{ -#if CONFIG_CHIP_E_CUT - return HalRuartSetBaudRateRtl8195a_V04(Data); -#else - return HalRuartSetBaudRateRtl8195a(Data); -#endif -} - -HAL_Status -HalRuartInit( - IN void *Data -) -{ - HAL_Status ret; - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE UartPwrState; -#endif -#if CONFIG_CHIP_E_CUT - pHalRuartAdapter->pDefaultBaudRateTbl = (uint32_t*)DEF_BAUDRATE_TABLE_ROM; - - pHalRuartAdapter->pDefaultOvsrRTbl = (uint8_t*)DEF_OVSR_ROM; - pHalRuartAdapter->pDefaultDivTbl = (uint16_t*)DEF_DIV_ROM; - pHalRuartAdapter->pDefOvsrAdjBitTbl_10 = (uint8_t*)DEF_OVSR_ADJ_10BITS_ROM; - pHalRuartAdapter->pDefOvsrAdjBitTbl_9 = (uint8_t*)DEF_OVSR_ADJ_9BITS_ROM; - pHalRuartAdapter->pDefOvsrAdjBitTbl_8 = (uint8_t*)DEF_OVSR_ADJ_8BITS_ROM; - - pHalRuartAdapter->pDefOvsrAdjTbl_10 = (uint16_t*)ovsr_adj_table_10bit_rom; - pHalRuartAdapter->pDefOvsrAdjTbl_9 = (uint16_t*)ovsr_adj_table_9bit_rom; - pHalRuartAdapter->pDefOvsrAdjTbl_8 = (uint16_t*)ovsr_adj_table_8bit_rom; - - ret = HalRuartInitRtl8195a_V04(Data); -#else - pHalRuartAdapter->pDefaultBaudRateTbl = (uint32_t*)DEF_BAUDRATE_TABLE; -#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) - uint8_t chip_ver; - - chip_ver = HalRuartGetChipVerRtl8195a(); - if (chip_ver < 2) { - pHalRuartAdapter->pDefaultOvsrRTbl = (uint8_t*)DEF_OVSR_B_CUT; - pHalRuartAdapter->pDefaultDivTbl = (uint16_t*)DEF_DIV_B_CUT; - pHalRuartAdapter->pDefOvsrAdjBitTbl_10 = (uint8_t*)DEF_OVSR_ADJ_BITS_B_CUT_10B; - pHalRuartAdapter->pDefOvsrAdjBitTbl_9 = (uint8_t*)DEF_OVSR_ADJ_BITS_B_CUT_9B; - pHalRuartAdapter->pDefOvsrAdjBitTbl_8 = (uint8_t*)DEF_OVSR_ADJ_BITS_B_CUT_8B; - } - else -#endif - { - pHalRuartAdapter->pDefaultOvsrRTbl = (uint8_t*)DEF_OVSR_C_CUT; - pHalRuartAdapter->pDefaultDivTbl = (uint16_t*)DEF_DIV_C_CUT; - pHalRuartAdapter->pDefOvsrAdjBitTbl_10 = (uint8_t*)DEF_OVSR_ADJ_BITS_C_CUT_10B; - pHalRuartAdapter->pDefOvsrAdjBitTbl_9 = (uint8_t*)DEF_OVSR_ADJ_BITS_C_CUT_9B; - pHalRuartAdapter->pDefOvsrAdjBitTbl_8 = (uint8_t*)DEF_OVSR_ADJ_BITS_C_CUT_8B; - } - pHalRuartAdapter->pDefOvsrAdjTbl_10 = (uint16_t*)ovsr_adj_table_10bit; - pHalRuartAdapter->pDefOvsrAdjTbl_9 = (uint16_t*)ovsr_adj_table_9bit; - pHalRuartAdapter->pDefOvsrAdjTbl_8 = (uint16_t*)ovsr_adj_table_8bit; - - if (_FALSE == FunctionChk((pHalRuartAdapter->UartIndex+UART0), pHalRuartAdapter->PinmuxSelect)) { - return HAL_ERR_HW; - } - ret = HalRuartInitRtl8195a_Patch(Data); -#endif - -#ifdef CONFIG_SOC_PS_MODULE - if(ret == HAL_OK) { - // To register a new peripheral device power state - UartPwrState.FuncIdx = UART0 + pHalRuartAdapter->UartIndex; - UartPwrState.PwrState = ACT; - RegPowerState(UartPwrState); - } -#endif - return ret; -} - -void -HalRuartDeInit( - IN void *Data -) -{ -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE UartPwrState; - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - uint8_t HwState; - - UartPwrState.FuncIdx = UART0 + pHalRuartAdapter->UartIndex; - QueryRegPwrState(UartPwrState.FuncIdx, &(UartPwrState.PwrState), &HwState); - - // if the power state isn't ACT, then switch the power state back to ACT first - if ((UartPwrState.PwrState != ACT) && (UartPwrState.PwrState != INACT)) { - HalRuartEnable(Data); - QueryRegPwrState(UartPwrState.FuncIdx, &(UartPwrState.PwrState), &HwState); - } - - if (UartPwrState.PwrState == ACT) { - UartPwrState.PwrState = INACT; - RegPowerState(UartPwrState); - } -#endif - - HalRuartDeInitRtl8195a(Data); -} - -HAL_Status -HalRuartDisable( - IN void *Data -) -{ - HAL_Status ret; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE UartPwrState; - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; -#endif - -#if CONFIG_CHIP_E_CUT - ret = HalRuartDisableRtl8195a_V04(Data); -#else - ret = HalRuartDisableRtl8195a(Data); -#endif -#ifdef CONFIG_SOC_PS_MODULE - if (ret == HAL_OK) { - UartPwrState.FuncIdx = UART0 + pHalRuartAdapter->UartIndex; - UartPwrState.PwrState = SLPCG; - RegPowerState(UartPwrState); - } -#endif - return ret; -} - -HAL_Status -HalRuartEnable( - IN void *Data -) -{ - HAL_Status ret; -#ifdef CONFIG_SOC_PS_MODULE - REG_POWER_STATE UartPwrState; - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; -#endif - -#if CONFIG_CHIP_E_CUT - ret = HalRuartEnableRtl8195a_V04(Data); -#else - ret = HalRuartEnableRtl8195a(Data); -#endif -#ifdef CONFIG_SOC_PS_MODULE - if (ret == HAL_OK) { - UartPwrState.FuncIdx = UART0 + pHalRuartAdapter->UartIndex; - UartPwrState.PwrState = ACT; - RegPowerState(UartPwrState); - } -#endif - return ret; -} - -HAL_Status -HalRuartFlowCtrl( - IN void *Data -) -{ - HAL_Status ret; - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - -#if CONFIG_CHIP_E_CUT - ret = HalRuartFlowCtrlRtl8195a_V04((void *)Data); -#else - ret = HalRuartFlowCtrlRtl8195a((void *)Data); -#endif - // RTS_Pin = AFE ? (~rts | RX_FIFO_Level_Over) : ~rts; - HalRuartRTSCtrlRtl8195a(Data, pHalRuartAdapter->RTSCtrl); - - return ret; -} - -void -HalRuartEnterCritical( - IN void *Data -) -{ -#if CONFIG_CHIP_E_CUT - HalRuartEnterCriticalRtl8195a_V04(Data); -#else - HalRuartEnterCriticalRtl8195a(Data); -#endif -} - -void -HalRuartExitCritical( - IN void *Data -) -{ -#if CONFIG_CHIP_E_CUT - HalRuartExitCriticalRtl8195a_V04(Data); -#else - HalRuartExitCriticalRtl8195a(Data); -#endif -} - -/** - * RUART send a data buffer by DMA(non-block) mode. - * - * RUART send data. - * - * @return void - */ -HAL_Status -HalRuartDmaSend( - IN void *Data, // PHAL_RUART_ADAPTER - IN uint8_t *pTxBuf, // the Buffer to be send - IN uint32_t Length // the length of data to be send -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)Data; - uint32_t BlockSize; - HAL_Status ret; - PUART_DMA_CONFIG pUartGdmaConfig; -// PHAL_GDMA_ADAPTER pHalGdmaAdapter; - - if (((Length & 0x03)==0) && - (((uint32_t)(pTxBuf) & 0x03)==0)) { - // 4-bytes aligned, move 4 bytes each transfer - BlockSize = Length >> 2; - } else { - BlockSize = Length; - } - - if (BlockSize < 4096) { -#if CONFIG_CHIP_E_CUT - ret = HalRuartDmaSendRtl8195a_V04(Data, pTxBuf, Length); -#else - ret = HalRuartDmaSendRtl8195a_Patch(Data, pTxBuf, Length); -#endif - } else { - // over Maximum block size 4095, use multiple block DMA - pUartGdmaConfig = pHalRuartAdapter->DmaConfig; - - if (0 == pUartGdmaConfig->TxDmaMBChnl) { - // Current DMA channel doesn't support multiple block, so re-allocate DMA channel - HalRuartTxGdmaDeInit (pHalRuartAdapter->DmaConfig); - ret = HalRuartTxGdmaInit(pHalRuartAdapter, pUartGdmaConfig, 1); - if (HAL_OK != ret) { - DBG_UART_WARN("HalRuartDmaSend: Reallocate DMA Multi-Block Chnl failed(%d)\n", ret); - return ret; - } - } -#if CONFIG_CHIP_E_CUT - ret = HalRuartMultiBlkDmaSendRtl8195a_V04(Data, pTxBuf, Length); -#else - ret = HalRuartMultiBlkDmaSendRtl8195a(Data, pTxBuf, Length); -#endif - } - - return ret; -} - -/** - * RUART receive a data buffer by DMA(non-block) mode. - * - * RUART send data. - * - * @return void - */ -HAL_Status -HalRuartDmaRecv( - IN void *Data, // PHAL_RUART_ADAPTER - IN uint8_t *pRxBuf, // the Buffer for store RX data - IN uint32_t Length // the length of data to receive -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)Data; -// uint32_t BlockSize; - HAL_Status ret; - PUART_DMA_CONFIG pUartGdmaConfig; -// PHAL_GDMA_ADAPTER pHalGdmaAdapter; - - if (Length < 4096) { -#if CONFIG_CHIP_E_CUT - ret = HalRuartDmaRecvRtl8195a_V04(Data, pRxBuf, Length); -#else - ret = HalRuartDmaRecvRtl8195a_Patch(Data, pRxBuf, Length); -#endif - } else { - // over Maximum block size 4095, use multiple block DMA - pUartGdmaConfig = pHalRuartAdapter->DmaConfig; - - if (!pUartGdmaConfig->RxDmaMBChnl) { - // Current DMA channel doesn't support multiple block, so re-allocate DMA channel - HalRuartRxGdmaDeInit (pHalRuartAdapter->DmaConfig); - ret = HalRuartRxGdmaInit(pHalRuartAdapter, pUartGdmaConfig, 1); - if (HAL_OK != ret) { - DBG_UART_WARN("HalRuartDmaRecv: Reallocate DMA Multi-Block Chnl failed(%d)\n", ret); - return ret; - } - } -#if CONFIG_CHIP_E_CUT - ret = HalRuartMultiBlkDmaRecvRtl8195a_V04(Data, pRxBuf, Length); -#else - ret = HalRuartMultiBlkDmaRecvRtl8195a(Data, pRxBuf, Length); -#endif - } - - return ret; -} - -#endif // CONFIG_UART_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_uart.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_uart.h deleted file mode 100644 index 1b8bed3..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_uart.h +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_UART_H_ -#define _HAL_UART_H_ - -#include "rtl8195a_uart.h" - -/** - * RUART Configurations - */ -#define UART_WAIT_FOREVER 0xffffffff - -#define UART_DMA_MBLK_NUM 16 // maximum block number for each DMA transfer, it must <= 16 -#define UART_DMA_BLOCK_SIZE 4092 // the block size of multiple block DMA, it cann0t over 4095 - -typedef struct _HAL_UART_DMA_MULTIBLK_ { - volatile GDMA_CH_LLI_ELE GdmaChLli[UART_DMA_MBLK_NUM]; - struct GDMA_CH_LLI Lli[UART_DMA_MBLK_NUM]; - struct BLOCK_SIZE_LIST BlockSizeList[UART_DMA_MBLK_NUM]; -}UART_DMA_MULTIBLK, *PUART_DMA_MULTIBLK; - -typedef struct _UART_DMA_CONFIG_ { - uint8_t TxDmaEnable; - uint8_t RxDmaEnable; - uint8_t TxDmaBurstSize; - uint8_t RxDmaBurstSize; - void *pHalGdmaOp; - void *pTxHalGdmaAdapter; - void *pRxHalGdmaAdapter; - IRQ_HANDLE TxGdmaIrqHandle; - IRQ_HANDLE RxGdmaIrqHandle; -#if defined(E_CUT_ROM_DOMAIN) || (!defined(CONFIG_RELEASE_BUILD_LIBRARIES)) - UART_DMA_MULTIBLK *pTxDmaBlkList; // point to multi-block list - UART_DMA_MULTIBLK *pRxDmaBlkList; // point to multi-block list - uint8_t TxDmaMBChnl; // is using DMA multiple block channel - uint8_t RxDmaMBChnl; // is using DMA multiple block channel -#endif -}UART_DMA_CONFIG, *PUART_DMA_CONFIG; - -typedef struct _HAL_RUART_ADAPTER_ { - uint32_t BaudRate; - uint32_t FlowControl; - uint32_t FifoControl; - uint32_t Interrupts; - uint32_t TxCount; // how many byte to TX - uint32_t RxCount; // how many bytes to RX - uint8_t *pTxBuf; - uint8_t *pRxBuf; - HAL_UART_State State; // UART state - uint8_t Status; // Transfer Status - uint8_t Locked; // is UART locked for operation - uint8_t UartIndex; - uint8_t WordLen; // word length select: 0 -> 7 bits, 1 -> 8 bits - uint8_t StopBit; // word length select: 0 -> 1 stop bit, 1 -> 2 stop bit - uint8_t Parity; // parity check enable - uint8_t ParityType; // parity check type - uint8_t StickParity; - uint8_t ModemStatus; // the modem status - uint8_t DmaEnable; - uint8_t TestCaseNumber; - uint8_t PinmuxSelect; - BOOL PullMode; - IRQ_HANDLE IrqHandle; - PUART_DMA_CONFIG DmaConfig; - void (*ModemStatusInd)(void *pAdapter); // modem status indication interrupt handler - void (*TxTDCallback)(void *pAdapter); // User Tx Done callback function - void (*RxDRCallback)(void *pAdapter); // User Rx Data ready callback function - void (*TxCompCallback)(void *para); // User Tx complete callback function - void (*RxCompCallback)(void *para); // User Rx complete callback function - void *TxTDCbPara; // the pointer agrument for TxTDCallback - void *RxDRCbPara; // the pointer agrument for RxDRCallback - void *TxCompCbPara; // the pointer argument for TxCompCbPara - void *RxCompCbPara; // the pointer argument for RxCompCallback - void (*EnterCritical)(void); - void (*ExitCritical)(void); - -#if defined(E_CUT_ROM_DOMAIN) || (!defined(CONFIG_RELEASE_BUILD_LIBRARIES)) - //1 New member only can be added below: members above must be fixed for ROM code - uint32_t *pDefaultBaudRateTbl; // point to the table of pre-defined baud rate - uint8_t *pDefaultOvsrRTbl; // point to the table of OVSR for pre-defined baud rate - uint16_t *pDefaultDivTbl; // point to the table of DIV for pre-defined baud rate - uint8_t *pDefOvsrAdjBitTbl_10; // point to the table of OVSR-Adj bits for 10 bits - uint8_t *pDefOvsrAdjBitTbl_9; // point to the table of OVSR-Adj bits for 9 bits - uint8_t *pDefOvsrAdjBitTbl_8; // point to the table of OVSR-Adj bits for 8 bits - uint16_t *pDefOvsrAdjTbl_10; // point to the table of OVSR-Adj for pre-defined baud rate - uint16_t *pDefOvsrAdjTbl_9; // point to the table of OVSR-Adj for pre-defined baud rate - uint16_t *pDefOvsrAdjTbl_8; // point to the table of OVSR-Adj for pre-defined baud rate - PUART_DMA_MULTIBLK pTxDMAMBlk; // point to the Link List Table of the DMA Multiple Block - PUART_DMA_MULTIBLK pRxDMAMBlk; // point to the Link List Table of the DMA Multiple Block - uint32_t BaudRateUsing; // Current using Baud-Rate - uint8_t WordLenUsing; // Current using Word Length - uint8_t ParityUsing; // Current using Parity check - uint8_t RTSCtrl; // Software RTS Control - -#if 0//CONFIG_CHIP_E_CUT - uint8_t TxState; - uint8_t RxState; - uint32_t TxInitSize; // how many byte to TX at atart - uint32_t RxInitSize; // how many bytes to RX at start - - void (*RuartEnterCritical)(void *para); // enter critical: disable UART interrupt - void (*RuartExitCritical)(void *para); // exit critical: re-enable UART interrupt - void (*TaskYield)(void *para); // User Task Yield: do a context switch while waitting - void *TaskYieldPara; // the agrument (pointer) for TaskYield -#endif // #if CONFIG_CHIP_E_CUT -#endif -}HAL_RUART_ADAPTER, *PHAL_RUART_ADAPTER; - -typedef struct _HAL_RUART_OP_ { - void (*HalRuartAdapterLoadDef)(void *pAdp, uint8_t UartIdx); // Load UART adapter default setting - void (*HalRuartTxGdmaLoadDef)(void *pAdp, void *pCfg); // Load TX GDMA default setting - void (*HalRuartRxGdmaLoadDef)(void *pAdp, void *pCfg); // Load RX GDMA default setting - HAL_Status (*HalRuartResetRxFifo)(void *Data); - HAL_Status (*HalRuartInit)(void *Data); - void (*HalRuartDeInit)(void *Data); - HAL_Status (*HalRuartPutC)(void *Data, uint8_t TxData); - uint32_t (*HalRuartSend)(void *Data, uint8_t *pTxData, uint32_t Length, uint32_t Timeout); - HAL_Status (*HalRuartIntSend)(void *Data, uint8_t *pTxData, uint32_t Length); - HAL_Status (*HalRuartDmaSend)(void *Data, uint8_t *pTxData, uint32_t Length); - HAL_Status (*HalRuartStopSend)(void *Data); - HAL_Status (*HalRuartGetC)(void *Data, uint8_t *pRxByte); - uint32_t (*HalRuartRecv)(void *Data, uint8_t *pRxData, uint32_t Length, uint32_t Timeout); - HAL_Status (*HalRuartIntRecv)(void *Data, uint8_t *pRxData, uint32_t Length); - HAL_Status (*HalRuartDmaRecv)(void *Data, uint8_t *pRxData, uint32_t Length); - HAL_Status (*HalRuartStopRecv)(void *Data); - uint8_t (*HalRuartGetIMR)(void *Data); - void (*HalRuartSetIMR)(void *Data); - uint32_t (*HalRuartGetDebugValue)(void *Data, uint32_t DbgSel); - void (*HalRuartDmaInit)(void *Data); - void (*HalRuartRTSCtrl)(void *Data, BOOLEAN RtsCtrl); - void (*HalRuartRegIrq)(void *Data); - void (*HalRuartIntEnable)(void *Data); - void (*HalRuartIntDisable)(void *Data); -}HAL_RUART_OP, *PHAL_RUART_OP; - -typedef struct _RUART_DATA_ { - PHAL_RUART_ADAPTER pHalRuartAdapter; - BOOL PullMode; - uint8_t BinaryData; - uint8_t SendBuffer; - uint8_t RecvBuffer; -}RUART_DATA, *PRUART_DATA; - -typedef struct _RUART_ADAPTER_ { - PHAL_RUART_OP pHalRuartOp; - PHAL_RUART_ADAPTER pHalRuartAdapter; - PUART_DMA_CONFIG pHalRuartDmaCfg; -}RUART_ADAPTER, *PRUART_ADAPTER; - -extern void -HalRuartOpInit( - IN void *Data -); - -extern HAL_Status -HalRuartTxGdmaInit( - PHAL_RUART_ADAPTER pHalRuartAdapter, - PUART_DMA_CONFIG pUartGdmaConfig, - uint8_t IsMultiBlk -); - -extern void -HalRuartTxGdmaDeInit( - PUART_DMA_CONFIG pUartGdmaConfig -); - -extern HAL_Status -HalRuartRxGdmaInit( - PHAL_RUART_ADAPTER pHalRuartAdapter, - PUART_DMA_CONFIG pUartGdmaConfig, - uint8_t IsMultiBlk -); - -extern void -HalRuartRxGdmaDeInit( - PUART_DMA_CONFIG pUartGdmaConfig -); - -extern HAL_Status -HalRuartResetTxFifo( - void *Data -); - -extern HAL_Status HalRuartResetTRxFifo(IN void *Data); - -extern HAL_Status -HalRuartResetRxFifo( - IN void *Data -); - -extern HAL_Status -HalRuartSetBaudRate( - IN void *Data -); - -extern HAL_Status -HalRuartInit( - IN void *Data -); - -extern void -HalRuartDeInit( - IN void *Data -); - -extern HAL_Status -HalRuartDisable( - IN void *Data -); - -extern HAL_Status -HalRuartEnable( - IN void *Data -); - -HAL_Status -HalRuartFlowCtrl( - IN void *Data -); - -void -HalRuartEnterCritical( - IN void *Data -); - -void -HalRuartExitCritical( - IN void *Data -); - -HAL_Status -HalRuartDmaSend( - IN void *Data, - IN uint8_t *pTxBuf, - IN uint32_t Length -); - -HAL_Status -HalRuartDmaRecv( - IN void *Data, - IN uint8_t *pRxBuf, - IN uint32_t Length -); - -extern const HAL_RUART_OP _HalRuartOp; -extern HAL_Status RuartLock (PHAL_RUART_ADAPTER pHalRuartAdapter); -extern void RuartUnLock (PHAL_RUART_ADAPTER pHalRuartAdapter); - -#endif - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_usb.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_usb.h deleted file mode 100644 index 3de8fa2..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_usb.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_USB_H_ -#define _HAL_USB_H_ - -#include "rtl8195a_usb.h" - -#endif //_HAL_USB_H_ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_util.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_util.h deleted file mode 100644 index dd2165e..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_util.h +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ -#ifndef _HAL_UTIL_H_ -#define _HAL_UTIL_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Simple doubly linked list implementation. - * - * Some of the internal functions ("__xxx") are useful when - * manipulating whole lists rather than single entries, as - * sometimes we already know the next/prev entries and we can - * generate better code by using them directly rather than - * using the generic single-entry routines. - */ -struct LIST_HEADER { - struct LIST_HEADER *Next, *Prev; -}; - -typedef struct LIST_HEADER _LIST; - -//#define RTL_LIST_HEAD_INIT(name) { &(name), &(name) } - -#define RTL_INIT_LIST_HEAD(ptr) do { \ - (ptr)->Next = (ptr); (ptr)->Prev = (ptr); \ -} while (0) - - -/* - * Insert a new entry between two known consecutive entries. - * - * This is only for internal list manipulation where we know - * the prev/next entries already! - */ - static __inline__ void - __List_Add( - IN struct LIST_HEADER * New, - IN struct LIST_HEADER * Prev, - IN struct LIST_HEADER * Next -) -{ - Next->Prev = New; - New->Next = Next; - New->Prev = Prev; - Prev->Next = New; -} - -/* - * Delete a list entry by making the prev/next entries - * point to each other. - * - * This is only for internal list manipulation where we know - * the prev/next entries already! - */ - static __inline__ void - __List_Del( - IN struct LIST_HEADER * Prev, - IN struct LIST_HEADER * Next - ) -{ - Next->Prev = Prev; - Prev->Next = Next; -} - -/** - * ListDel - deletes entry from list. - * @entry: the element to delete from the list. - * Note: list_empty on entry does not return true after this, the entry is in an undefined state. - */ -static __inline__ void -ListDel( - IN struct LIST_HEADER *Entry -) -{ - __List_Del(Entry->Prev, Entry->Next); -} - -/** - * ListDelInit - deletes entry from list and reinitialize it. - * @entry: the element to delete from the list. - */ -static __inline__ void -ListDelInit( - IN struct LIST_HEADER *Entry -) -{ - __List_Del(Entry->Prev, Entry->Next); - RTL_INIT_LIST_HEAD(Entry); - -} - -/** - * ListEmpty - tests whether a list is empty - * @head: the list to test. - */ -static __inline__ uint32_t -ListEmpty( - IN struct LIST_HEADER *Head -) -{ - return Head->Next == Head; -} - -/** - * ListSplice - join two lists - * @list: the new list to add. - * @head: the place to add it in the first list. - */ -static __inline__ void -ListSplice( - IN struct LIST_HEADER *List, - IN struct LIST_HEADER *Head -) -{ - struct LIST_HEADER *First = List->Next; - - if (First != List) { - struct LIST_HEADER *Last = List->Prev; - struct LIST_HEADER *At = Head->Next; - - First->Prev = Head; - Head->Next = First; - - Last->Next = At; - At->Prev = Last; - } -} - -static __inline__ void -ListAdd( - IN struct LIST_HEADER *New, - IN struct LIST_HEADER *head -) -{ - __List_Add(New, head, head->Next); -} - - -static __inline__ void -ListAddTail( - IN struct LIST_HEADER *New, - IN struct LIST_HEADER *head -) -{ - __List_Add(New, head->Prev, head); -} - -static __inline void -RtlInitListhead( - IN _LIST *list -) -{ - RTL_INIT_LIST_HEAD(list); -} - - -/* -For the following list_xxx operations, -caller must guarantee the atomic context. -Otherwise, there will be racing condition. -*/ -static __inline uint32_t -RtlIsListEmpty( - IN _LIST *phead -) -{ - - if (ListEmpty(phead)) - return _TRUE; - else - return _FALSE; - -} - -static __inline void -RtlListInsertHead( - IN _LIST *plist, - IN _LIST *phead -) -{ - ListAdd(plist, phead); -} - -static __inline void -RtlListInsertTail( - IN _LIST *plist, - IN _LIST *phead -) -{ - ListAddTail(plist, phead); -} - - -static __inline _LIST -*RtlListGetNext( - IN _LIST *plist -) -{ - return plist->Next; -} - -static __inline void -RtlListDelete( - IN _LIST *plist -) -{ - ListDelInit(plist); -} - -#define RTL_LIST_CONTAINOR(ptr, type, member) \ - ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member))) - -#ifndef CONTAINER_OF -#define CONTAINER_OF(ptr, type, member) \ - ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member))) -#endif -#if 0 -#define list_entry(ptr, type, member) \ - CONTAINER_OF(ptr, type, member) - -#define list_first_entry(ptr, type, member) \ - list_entry((ptr)->Next, type, member) - -#define list_next_entry(pos, member, type) \ - list_entry((pos)->member.Next, type, member) - -#define list_for_each_entry(pos, head, member, type) \ - for (pos = list_first_entry(head, type, member); \ - &pos->member != (head); \ - pos = list_next_entry(pos, member, type)) -#define list_for_each(pos, head) \ - for (pos = (head)->Next; pos != (head); pos = pos->Next) -#endif - -#ifndef BIT - #define BIT(x) ( 1 << (x)) -#endif - -#ifdef __cplusplus -} -#endif - -#endif //_HAL_UTIL_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_vector_table.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_vector_table.h deleted file mode 100644 index 90e15e0..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/hal_vector_table.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#ifndef _HAL_VECTOR_TABLE_H_ -#define _HAL_VECTOR_TABLE_H_ - - - - -extern _LONG_CALL_ROM_ void -VectorTableInitRtl8195A( - IN uint32_t StackP -); - -extern _LONG_CALL_ROM_ void -VectorTableInitForOSRtl8195A( - IN void *PortSVC, - IN void *PortPendSVH, - IN void *PortSysTick -); - -extern _LONG_CALL_ROM_ BOOL -VectorIrqRegisterRtl8195A( - IN PIRQ_HANDLE pIrqHandle -); - -extern _LONG_CALL_ROM_ BOOL -VectorIrqUnRegisterRtl8195A( - IN PIRQ_HANDLE pIrqHandle -); - - -extern _LONG_CALL_ROM_ void -VectorIrqEnRtl8195A( - IN PIRQ_HANDLE pIrqHandle -); - -extern _LONG_CALL_ROM_ void -VectorIrqDisRtl8195A( - IN PIRQ_HANDLE pIrqHandle -); - - -extern _LONG_CALL_ROM_ void -HalPeripheralIntrHandle(void); -#endif //_HAL_VECTOR_TABLE_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/fw_loader_main.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/fw_loader_main.c deleted file mode 100644 index d61bb49..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/fw_loader_main.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2015 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "rtl8195a.h" -#include "build_info.h" -#include "PinNames.h" -#include "serial_api.h" - -extern void serial_init (serial_t *obj, PinName tx, PinName rx); -extern void serial_free (serial_t *obj); -extern void serial_baud (serial_t *obj, int baudrate); -extern void serial_format (serial_t *obj, int data_bits, SerialParity parity, int stop_bits); -extern int main(void); - -void iar_data_init_fw_loader(void); -void fw_loader_main(void);// __attribute__ ((weak)); - -#pragma section=".image2.start.table1" -#pragma section=".fwloader_ram.bss" - -FW_LOADER_START_RAM_FUN_SECTION -RAM_START_FUNCTION gFWLoaderEntryFun0 = {fw_loader_main}; - -uint8_t* __image4_entry_func__; -uint8_t* __image4_validate_code__; -uint8_t* __fwloader_bss_start__; -uint8_t* __fwloader_bss_end__; - -FW_LOADER_VALID_PATTEN_SECTION const uint8_t RAM_FW_LOADER_VALID_PATTEN[20] = { - 'R', 'T', 'K', 'W', 'i', 'n', 0x0, 0xff, - (FW_VERSION&0xff), ((FW_VERSION >> 8)&0xff), - (FW_SUBVERSION&0xff), ((FW_SUBVERSION >> 8)&0xff), - (FW_CHIP_ID&0xff), ((FW_CHIP_ID >> 8)&0xff), - (FW_CHIP_VER), - (FW_BUS_TYPE), - (FW_INFO_RSV1), - (FW_INFO_RSV2), - (FW_INFO_RSV3), - (FW_INFO_RSV4) -}; -/** - * @brief Main program. - * @param None - * @retval None - */ -void fw_loader_main(void) -{ -#if defined ( __ICCARM__ ) - iar_data_init_fw_loader(); -#endif - uint32_t Image2Len, Image2Addr, ImageIndex, SpicBitMode, SpicImageIndex; - uint32_t Image2LoadAddr = 0x13000; - DBG_8195A("===== Enter FW Loader Image ====\n"); - - -#ifdef BOOTLOADER - main(); -#endif - -IGMAE4: - PRAM_START_FUNCTION Image4EntryFun=(PRAM_START_FUNCTION)__image4_entry_func__; - - Image2Len = HAL_READ32(SPI_FLASH_BASE, Image2LoadAddr); - Image2Addr = HAL_READ32(SPI_FLASH_BASE, (Image2LoadAddr+0x4)); - - DBG_8195A("Flash FW Loader:Addr 0x%x, Len %d, Load to SRAM 0x%x\n", Image2LoadAddr, Image2Len, Image2Addr); - - SpicImageIndex = 0; - for (ImageIndex = 0x10 + Image2LoadAddr; ImageIndex < (Image2Len + Image2LoadAddr + 0x10); ImageIndex = ImageIndex + 4) { - HAL_WRITE32(Image2Addr, SpicImageIndex, - HAL_READ32(SPI_FLASH_BASE, ImageIndex)); - - SpicImageIndex += 4; - } - - - -#ifdef CONFIG_SDR_EN - uint32_t Image3LoadAddr; - uint32_t Image3Len; - uint32_t Image3Addr; - - Image3LoadAddr = Image2LoadAddr + Image2Len+0x10; - Image3Len = HAL_READ32(SPI_FLASH_BASE, Image3LoadAddr); - Image3Addr = HAL_READ32(SPI_FLASH_BASE, Image3LoadAddr + 0x4); - - if( (Image3Len==0xFFFFFFFF) || (Image3Len==0) || (Image3Addr!=0x30000000)){ - DBG_8195A("No Image3\n\r"); - }else{ - DBG_8195A("Image3 length: 0x%x, Image3 Addr: 0x%x\n",Image3Len, Image3Addr); - SpicImageIndex = 0; - - for (ImageIndex = 0x10 + Image3LoadAddr; - ImageIndex < (Image3Len + Image3LoadAddr + 0x10); - ImageIndex = ImageIndex + 4) { - HAL_WRITE32(Image3Addr, SpicImageIndex, - HAL_READ32(SPI_FLASH_BASE, ImageIndex)); - - SpicImageIndex += 4; - } - } -#endif - //3 3) Jump to image 4 - DBG_8195A("InfraStart: %p, Img2 Sign %s \n", __image4_entry_func__, (char*)__image4_validate_code__); - if (_strcmp((char *)__image4_validate_code__, "RTKWin")) { - while (1) { - DBG_8195A("Invalid Image4 Signature\n"); - RtlConsolRom(1000);//each delay is 100us - } - } - -#ifdef BOOTLOADER - deinit_platform_bootloader(); -#endif - Image4EntryFun->RamStartFun(); -} - -void iar_data_init_fw_loader(void) -{ - __image4_entry_func__ = (uint8_t*)__section_begin(".image2.start.table1"); - __image4_validate_code__ = __image4_entry_func__+4;//(uint8_t*)__section_begin(".image2.start.table2"); - __fwloader_bss_start__ = (uint8_t*)__section_begin(".fwloader_ram.bss"); - __fwloader_bss_end__ = (uint8_t*)__section_end(".fwloader_ram.bss"); -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/hal_misc_v0.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/hal_misc_v0.c deleted file mode 100644 index ba574cd..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/hal_misc_v0.c +++ /dev/null @@ -1,359 +0,0 @@ -#include "rtl8195a.h" - -typedef struct _UART_LOG_BUF_ { - uint8_t BufCount; //record the input cmd char number. - uint8_t UARTLogBuf[127]; //record the input command. -} UART_LOG_BUF, *PUART_LOG_BUF; - - - - -typedef struct _UART_LOG_CTL_ { - uint8_t NewIdx; - uint8_t SeeIdx; - uint8_t RevdNo; - uint8_t EscSTS; - uint8_t ExecuteCmd; - uint8_t ExecuteEsc; - uint8_t BootRdy; - uint8_t Resvd; - PUART_LOG_BUF pTmpLogBuf; - void *pfINPUT; - PCOMMAND_TABLE pCmdTbl; - uint32_t CmdTblSz; - - uint32_t CRSTS; - - uint8_t (*pHistoryBuf)[127]; - - uint32_t TaskRdy; - uint32_t Sema; -} UART_LOG_CTL, *PUART_LOG_CTL; - - volatile UART_LOG_CTL UartLogCtl; - - volatile UART_LOG_CTL *pUartLogCtl; - - uint8_t *ArgvArray[10]; - - UART_LOG_BUF UartLogBuf; - - - uint8_t UartLogHistoryBuf[5][127]; - -extern void -SpicLoadInitParaFromClockRtl8195A -( - IN uint8_t CpuClkMode, - IN uint8_t BaudRate, - IN PSPIC_INIT_PARA pSpicInitPara -); - -void -PatchSpicInitRtl8195A -( - IN uint8_t InitBaudRate, - IN uint8_t SpicBitMode -) -{ - - uint32_t Value32; - SPIC_INIT_PARA SpicInitPara; - -#ifdef CONFIG_FPGA - SpicInitPara.BaudRate = 1;//FPGASpicInitPara.BaudRate; - SpicInitPara.RdDummyCyle = 1;//FPGASpicInitPara.RdDummyCyle; - SpicInitPara.DelayLine = 0;//FPGASpicInitPara.DelayLine; -#else - uint8_t CpuClk; - CpuClk = (((uint8_t)(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1) & (0x70))) >> 4); - SpicLoadInitParaFromClockRtl8195A(CpuClk, InitBaudRate, &SpicInitPara); -#endif - // Disable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - - HAL_SPI_WRITE32(REG_SPIC_BAUDR, BIT_SCKDV(InitBaudRate)); - - HAL_SPI_WRITE32(REG_SPIC_SER, BIT_SER); - - Value32 = HAL_SPI_READ32(REG_SPIC_AUTO_LENGTH); - - HAL_SPI_WRITE32(REG_SPIC_AUTO_LENGTH, - ((Value32 & 0xFFFF0000) | BIT_RD_DUMMY_LENGTH(SpicInitPara.RdDummyCyle))); - - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_MEM_CTRL, - ((HAL_READ32(PERI_ON_BASE, REG_PESOC_MEM_CTRL)&0xFFFFFF00)| - SpicInitPara.DelayLine)); - - HAL_SPI_WRITE32(REG_SPIC_CTRLR1, BIT_NDF(4)); - - switch (SpicBitMode) { - case SpicOneBitMode: - HAL_SPI_WRITE32(REG_SPIC_CTRLR0, - (HAL_SPI_READ32(REG_SPIC_CTRLR0) & (~(BIT_ADDR_CH(3)|BIT_DATA_CH(3))))); - break; - - case SpicDualBitMode: - HAL_SPI_WRITE32(REG_SPIC_CTRLR0, - ((HAL_SPI_READ32(REG_SPIC_CTRLR0) & (~(BIT_ADDR_CH(3)|BIT_DATA_CH(3)))) | - (BIT_ADDR_CH(1)|BIT_DATA_CH(1)))); - - break; - - case SpicQuadBitMode: - HAL_SPI_WRITE32(REG_SPIC_CTRLR0, - ((HAL_SPI_READ32(REG_SPIC_CTRLR0) & (~(BIT_ADDR_CH(3)|BIT_DATA_CH(3)))) | - (BIT_ADDR_CH(2)|BIT_DATA_CH(2)))); - break; - - } - - // Enable SPI_FLASH User Mode -// HAL_SPI_WRITE32(REG_SPIC_SSIENR, BIT_SPIC_EN); -} - - -#include "hal_timer.h" -extern BOOL -HalTimerInitRtl8195a( - IN void *Data -); - -void -PatchHalInitPlatformTimer( -void -) -{ - TIMER_ADAPTER TimerAdapter; - - OSC32K_CKGEN_CTRL(ON); - GTIMER_FCTRL(ON); - ACTCK_TIMER_CCTRL(ON); - SLPCK_TIMER_CCTRL(ON); - - TimerAdapter.IrqDis = ON; -// TimerAdapter.IrqHandle = (IRQ_FUN)NULL; - TimerAdapter.TimerId = 1; - TimerAdapter.TimerIrqPriority = 0; - TimerAdapter.TimerLoadValueUs = 0; - TimerAdapter.TimerMode = FREE_RUN_MODE; - - HalTimerInitRtl8195a((void*) &TimerAdapter); - -} - -#define UART_BAUD_RATE_2400 2400 -#define UART_BAUD_RATE_4800 4800 -#define UART_BAUD_RATE_9600 9600 -#define UART_BAUD_RATE_19200 19200 -#define UART_BAUD_RATE_38400 38400 -#define UART_BAUD_RATE_57600 57600 -#define UART_BAUD_RATE_115200 115200 -#define UART_BAUD_RATE_921600 921600 -#define UART_BAUD_RATE_1152000 1152000 - -#define UART_PARITY_ENABLE 0x08 -#define UART_PARITY_DISABLE 0 - -#define UART_DATA_LEN_5BIT 0x0 -#define UART_DATA_LEN_6BIT 0x1 -#define UART_DATA_LEN_7BIT 0x2 -#define UART_DATA_LEN_8BIT 0x3 - -#define UART_STOP_1BIT 0x0 -#define UART_STOP_2BIT 0x4 - - -extern uint32_t -HalLogUartInit( - IN LOG_UART_ADAPTER UartAdapter -); - -extern uint32_t -HalGetCpuClk( - void -); - -const uint32_t StartupCpkClkTbl[]= { - 200000000, - 100000000, - 50000000, - 25000000, - 12500000, - 4000000 -}; - - -uint32_t -StartupHalGetCpuClk( - void -) -{ - uint32_t CpuType = 0, CpuClk = 0, FreqDown = 0; - - CpuType = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_CLK_CTRL1) & (0x70)) >> 4); - FreqDown = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1) & BIT17; - - CpuClk = StartupCpkClkTbl[CpuType]; - - if ( !FreqDown ) { - if ( CpuClk > 4000000 ){ - CpuClk = (CpuClk*5/6); - } - } - - return CpuClk; -} - -uint32_t -PatchHalLogUartInit( - IN LOG_UART_ADAPTER UartAdapter -) -{ - uint32_t SetData; - uint32_t Divisor; - uint32_t Dlh; - uint32_t Dll; - uint32_t SysClock; - - /* - Interrupt enable Register - 7: THRE Interrupt Mode Enable - 2: Enable Receiver Line Status Interrupt - 1: Enable Transmit Holding Register Empty Interrupt - 0: Enable Received Data Available Interrupt - */ - // disable all interrupts - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, 0); - - /* - Line Control Register - 7: DLAB, enable reading and writing DLL and DLH register, and must be cleared after - initial baud rate setup - 3: PEN, parity enable/disable - 2: STOP, stop bit - 1:0 DLS, data length - */ - - // set DLAB bit to 1 - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, 0x80); - - // set up buad rate division - -#ifdef CONFIG_FPGA - SysClock = SYSTEM_CLK; - Divisor = (SysClock / (16 * (UartAdapter.BaudRate))); -#else - { - uint32_t SampleRate,Remaind; - - //SysClock = (HalGetCpuClk()>>2); - SysClock = (StartupHalGetCpuClk()>>2); - - SampleRate = (16 * (UartAdapter.BaudRate)); - - Divisor= SysClock/SampleRate; - - Remaind = ((SysClock*10)/SampleRate) - (Divisor*10); - - if (Remaind>4) { - Divisor++; - } - } -#endif - - - Dll = Divisor & 0xff; - Dlh = (Divisor & 0xff00)>>8; - HAL_UART_WRITE32(UART_DLL_OFF, Dll); - HAL_UART_WRITE32(UART_DLH_OFF, Dlh); - - // clear DLAB bit - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, 0); - - // set data format - SetData = UartAdapter.Parity | UartAdapter.Stop | UartAdapter.DataLength; - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, SetData); - - /* FIFO Control Register - 7:6 level of receive data available interrupt - 5:4 level of TX empty trigger - 2 XMIT FIFO reset - 1 RCVR FIFO reset - 0 FIFO enable/disable - */ - // FIFO setting, enable FIFO and set trigger level (2 less than full when receive - // and empty when transfer - HAL_UART_WRITE32(UART_FIFO_CTL_REG_OFF, UartAdapter.FIFOControl); - - /* - Interrupt Enable Register - 7: THRE Interrupt Mode enable - 2: Enable Receiver Line status Interrupt - 1: Enable Transmit Holding register empty INT32 - 0: Enable received data available interrupt - */ - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, UartAdapter.IntEnReg); - - if (UartAdapter.IntEnReg) { - // Enable Peripheral_IRQ Setting for Log_Uart - HAL_WRITE32(VENDOR_REG_BASE, PERIPHERAL_IRQ_EN, 0x1000000); - - // Enable ARM Cortex-M3 IRQ - NVIC_SetPriorityGrouping(0x3); - NVIC_SetPriority(PERIPHERAL_IRQ, 14); - NVIC_EnableIRQ(PERIPHERAL_IRQ); - } - - - return 0; -} - -uint32_t log_uart_irq(void *Data) -{ - return 0; -} - -void -PatchHalInitPlatformLogUart( - void -) -{ - IRQ_HANDLE UartIrqHandle; - LOG_UART_ADAPTER UartAdapter; - - //4 Release log uart reset and clock - LOC_UART_FCTRL(OFF); - LOC_UART_FCTRL(ON); - ACTCK_LOG_UART_CCTRL(ON); - - PinCtrl(LOG_UART,S0,ON); - - //4 Register Log Uart Callback function - UartIrqHandle.Data = (uint32_t)NULL;//(uint32_t)&UartAdapter; - UartIrqHandle.IrqNum = UART_LOG_IRQ; - UartIrqHandle.IrqFun = (IRQ_FUN) log_uart_irq;//UartLogIrqHandleRam; - UartIrqHandle.Priority = 0; - - //4 Inital Log uart - UartAdapter.BaudRate = DEFAULT_BAUDRATE; - UartAdapter.DataLength = UART_DATA_LEN_8BIT; - UartAdapter.FIFOControl = 0xC1; - UartAdapter.IntEnReg = 0x00; - UartAdapter.Parity = UART_PARITY_DISABLE; - UartAdapter.Stop = UART_STOP_1BIT; - - //4 Initial Log Uart - PatchHalLogUartInit(UartAdapter); - - //4 Register Isr handle - InterruptRegister(&UartIrqHandle); - - UartAdapter.IntEnReg = 0x05; - - //4 Initial Log Uart for Interrupt - PatchHalLogUartInit(UartAdapter); - - //4 initial uart log parameters before any uartlog operation - //RtlConsolInit(ROM_STAGE,GetRomCmdNum(),(void*)&UartLogRomCmdTable);// executing boot seq., -} \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/low_level_io.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/low_level_io.c deleted file mode 100644 index 46babb2..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/low_level_io.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - decompiled low_level_io.o -*/ -#include ...... -//------------------------------------------------------------------------- -// Function declarations -void mode_init(); -void HalSerialPutcRtl8195a(int c, int a2, char a3); -signed int DiagPrintf(const char *fmt, ...); -void log_uart_enable_printf(); -void log_uart_disable_printf(); -//------------------------------------------------------------------------- -// Data declarations -uint32_t backupWarn; -uint32_t backupErr; -uint32_t backupInfo; -int disablePrintf; -// extern _UNKNOWN use_mode; -// extern _UNKNOWN ConfigDebugErr; -// extern _UNKNOWN ConfigDebugInfo; -// extern _UNKNOWN ConfigDebugWarn; - -//----- -void mode_init() -{ - use_mode = 1; -} - -//----- -void HalSerialPutcRtl8195a(int c) -{ - signed int v3; // r3@2 - - if ( disablePrintf != 1 ) - { - v3 = 6540; - do - { - if ( !--v3 ) - break; - a3 = v40003014; - } - while ( !(v40003014 & 0x60) ); - if ( c == 10 ) a3 = 13; - v40003000 = c; - if ( c == 10 ) v40003000 = a3; - } -} - -//----- -signed int DiagPrintf(const char *fmt, ...) -{ - va_list va; - - va_start(va, fmt); - if ( disablePrintf != 1 ) - VSprintf(0, fmt, va); - return 1; -} - -//----- -void log_uart_enable_printf() -{ - disablePrintf = 0; - ConfigDebugErr = backupErr; - ConfigDebugInfo = backupInfo; - ConfigDebugWarn = backupWarn; -} - -//----- -void log_uart_disable_printf() -{ - disablePrintf = 1; - backupErr = ConfigDebugErr; - backupInfo = ConfigDebugInfo; - backupWarn = ConfigDebugWarn; - ConfigDebugErr = 0; - ConfigDebugInfo = 0; - ConfigDebugWarn = 0; -} - - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_bios_data.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_bios_data.c deleted file mode 100644 index e781a1c..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_bios_data.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - * rtl_bios_data.c - * - * Created on: 12/02/2017 - * Author: pvvx - * - * This variables declared in ROM code! - * Variables use fixed addresses! - * (see *.ld script) - */ - -#include "rtl_bios_data.h" -extern void * UartLogRomCmdTable; -/* ROM + startup.c */ -RAM_DEDECATED_VECTOR_TABLE_SECTION IRQ_FUN NewVectorTable[64]; // 10000000 -RAM_USER_IRQ_FUN_TABLE_SECTION IRQ_FUN UserIrqFunTable[64]; // 10000100 -RAM_USER_IRQ_DATA_TABLE_SECTION uint32_t UserIrqDataTable[64]; // 10000200 -/* ROM + ... */ -HAL_RAM_BSS_SECTION PHAL_GPIO_ADAPTER _pHAL_Gpio_Adapter; // 10000354 -/* ROM + hal_ssi.h */ -HAL_RAM_BSS_SECTION uint32_t SSI_DBG_CONFIG; // 10000350 -/* ROM + hal_timer.h & .. */ -HAL_RAM_BSS_SECTION uint32_t gTimerRecord; // 1000034C -HAL_RAM_BSS_SECTION uint16_t GPIOState[11]; // 10000334 -HAL_RAM_BSS_SECTION HAL_TIMER_OP HalTimerOp; // 10000318 -/* ROM + diag.h */ -HAL_RAM_BSS_SECTION uint32_t ConfigDebugErr; // 10000314 -HAL_RAM_BSS_SECTION uint32_t ConfigDebugInfo; // 10000310 -HAL_RAM_BSS_SECTION uint32_t ConfigDebugWarn; // 1000030C -HAL_RAM_BSS_SECTION uint32_t CfgSysDebugErr; // 10000308 -HAL_RAM_BSS_SECTION uint32_t CfgSysDebugInfo; // 10000304 -HAL_RAM_BSS_SECTION uint32_t CfgSysDebugWarn; // 10000300 -/* ROM + rtl8195a_timer.c */ -SECTION_RAM_TIMER2TO7_VECTOR_TABLE IRQ_FUN Timer2To7VectorTable[MAX_TIMER_VECTOR_TABLE_NUM]; // 10000358 Timer2To7VectorTable[6] ! -/* ROM + Rand() */ -INFRA_RAM_BSS_SECTION uint32_t _rand_z4, _rand_z3, _rand_z2, _rand_z1, _rand_first; // 10000370.. -/* ROM + RTL_CONSOL */ -MON_RAM_BSS_SECTION uint8_t *ArgvArray[MAX_ARGV]; // 100006AC *ArgvArray[10] ! -MON_RAM_BSS_SECTION uint8_t UartLogHistoryBuf[UART_LOG_HISTORY_LEN][UART_LOG_CMD_BUFLEN]; // 10000430 UartLogHistoryBuf[5][127] ! -MON_RAM_BSS_SECTION volatile UART_LOG_CTL UartLogCtl; // 10000408 -/* = { - .NewIdx = 0, - .SeeIdx = 0, - .RevdNo = UART_LOG_HISTORY_LEN, - .EscSTS = 0, - .ExecuteCmd = 0, - .ExecuteEsc = 0, - .BootRdy = 0, - .Resvd = 0, - .pTmpLogBuf = &UartLogBuf, - .pfINPUT = (void*) &DiagPrintf, - .pCmdTbl = (PCOMMAND_TABLE) &UartLogRomCmdTable, - .CmdTblSz = 6, - .CRSTS = 0, - .pHistoryBuf = &UartLogHistoryBuf, - .TaskRdy = 0 -// .Sema -}; */ -MON_RAM_BSS_SECTION UART_LOG_BUF UartLogBuf; // 10000388 -MON_RAM_BSS_SECTION volatile UART_LOG_CTL *pUartLogCtl = &UartLogCtl; // 10000384 -/* ROM + LIB C */ -LIBC_RAM_BSS_SECTION int __rtl_errno; // 10000bc4 __rtl_sread_v1_00(), __rtl_write_v1_00(), __rtl_lseek_v1_00(), __rtl_close_v1_00(), __rtl_sbrk_v1_00().. -LIBC_RAM_BSS_SECTION struct mallinfo __rtl_malloc_current_mallinfo; // 10000b9c __rom_mallocr_init_v1_00() -LIBC_RAM_BSS_SECTION uint32_t __rtl_malloc_max_total_mem; // 10000b98 __rom_mallocr_init_v1_00() -LIBC_RAM_BSS_SECTION uint32_t __rtl_malloc_max_sbrked_mem; // 10000b94 __rom_mallocr_init_v1_00() -LIBC_RAM_BSS_SECTION uint8_t * __rtl_malloc_sbrk_base; // 10000b90 __rom_mallocr_init_v1_00() -LIBC_RAM_BSS_SECTION uint32_t __rtl_malloc_top_pad; // 10000b8c __rom_mallocr_init_v1_00() -LIBC_RAM_BSS_SECTION uint32_t __rtl_malloc_trim_threshold; // 10000b88 __rom_mallocr_init_v1_00() -LIBC_RAM_BSS_SECTION struct malloc_chunk *__rtl_malloc_av_[258]; // 0x10000780 __rom_mallocr_init_v1_00(), _rtl_free_r_v1_00().. -LIBC_RAM_BSS_SECTION __attribute__((aligned(0x10))) struct _rom_libgloss_ram_map rom_libgloss_ram_map; // 10000760 - -// 10000BA0..10000BC0: 9 x dw __rom_mallocr_init_v1_00() - -/* ROM: ROM_odm_FalseAlarmCounterStatistics() + .. */ -#define _WLAN_RAM_MAP_SECTION __attribute__((__section__(".ram.rom.wlanmap"))) -_WLAN_RAM_MAP_SECTION CFO_TRACKING DM_CfoTrack; // 10000738 -_WLAN_RAM_MAP_SECTION ROM_INFO ROMInfo; // 10000720 -_WLAN_RAM_MAP_SECTION __attribute__((aligned(0x10))) FALSE_ALARM_STATISTICS FalseAlmCnt; // 100006E0 -WLAN_RAM_MAP_SECTION struct _rom_wlan_ram_map rom_wlan_ram_map; // 100006D4 - -#ifndef PRESENT_IMAGE1 -/* IMAGE1 HEAD */ -START_RAM_FUN_SECTION RAM_FUNCTION_START_TABLE __ram_start_table_start__; -/* -START_RAM_FUN_A_SECTION RAM_START_FUNCTION gRamStartFun; // 10000bc8 = { PreProcessForVendor + 1 }; -START_RAM_FUN_B_SECTION RAM_START_FUNCTION gRamPatchWAKE; // 10000bcc = { RtlBootToSram + 1 }; -START_RAM_FUN_C_SECTION RAM_START_FUNCTION gRamPatchFun0; // 10000bd0 = { RtlBootToSram + 1 }; -START_RAM_FUN_D_SECTION RAM_START_FUNCTION gRamPatchFun1; // 10000bd4 = { RtlBootToSram + 1 }; -START_RAM_FUN_E_SECTION RAM_START_FUNCTION gRamPatchFun2; // 10000bd8 = { RtlBootToSram + 1 }; -*/ -#endif - -IMAGE1_VALID_PATTEN_SECTION uint8 RAM_IMG1_VALID_PATTEN[8] = IMG1_VALID_PATTEN_INIT(); // 10000bdc - -//#ifdef NOT_USE_LIBROM_A - -/* ROM + hal_sdr_controller.c */ -//HAL_FLASH_DATA_SECTION -//SPIC_INIT_PARA SpicInitParaAllClk[SpicMaxMode][CPU_CLK_TYPE_NO]; // SpicInitParaAllClk[3][6] ! - -/* ROM + hal_sdr_controller.c */ -HAL_CUT_B_RAM_DATA_SECTION DRAM_INFO SdrDramDev = DRAM_INFO_INIT(); // 10001c4c -HAL_CUT_B_RAM_DATA_SECTION DRAM_MODE_REG_INFO SdrDramModeReg = DRAM_MODE_REG_INFO_INIT(); // 10001c30 -HAL_CUT_B_RAM_DATA_SECTION DRAM_TIMING_INFO SdrDramTiming = DRAM_TIMING_INFO_INIT(); // 10001bfc -HAL_CUT_B_RAM_DATA_SECTION DRAM_DEVICE_INFO SdrDramInfo = DRAM_DEVICE_INFO_INIT(); // 10001be8 -HAL_CUT_B_RAM_DATA_SECTION uint32_t AvaWds[2][REC_NUM]; // 10000be8 - -/* ROM + hal_sdr_controller.c: Sdr_Rand2() */ -HAL_CUT_B_RAM_DATA_SECTION uint32_t rand_x = 123456789; // 10000be4 - -#define RTL_REENT_INIT(var) \ - { 0, \ - &(var).__sf[0], \ - &(var).__sf[1], \ - &(var).__sf[2], \ - 0, \ - "", \ - 0, \ - (void *)0x0437DC, \ - 0, \ - _NULL, \ - _NULL, \ - 0, \ - _NULL, \ - _NULL, \ - 0, \ - _NULL, \ - { \ - { \ - 0, \ - _NULL, \ - "", \ - {0, 0, 0, 0, 0, 0, 0, 0, 0}, \ - 0, \ - 1, \ - { \ - {_RAND48_SEED_0, _RAND48_SEED_1, _RAND48_SEED_2}, \ - {_RAND48_MULT_0, _RAND48_MULT_1, _RAND48_MULT_2}, \ - _RAND48_ADD \ - }, \ - {0, {0}}, \ - {0, {0}}, \ - {0, {0}}, \ - "", \ - "", \ - 0, \ - {0, {0}}, \ - {0, {0}}, \ - {0, {0}}, \ - {0, {0}}, \ - {0, {0}} \ - } \ - }, \ - _REENT_INIT_ATEXIT \ - _NULL, \ - {_NULL, 0, _NULL} \ - } -// ROM: _rtl_impure_ptr + impure_reent in lib_rom.a ".hal.ram.data" -__attribute__((section(".libc.reent"))) struct _reent impure_reent = RTL_REENT_INIT(impure_reent); // 10001c60 -__attribute__((section(".libc.reent"))) struct _reent * _rtl_impure_ptr = { &impure_reent }; // 10001c68 - -/* ROM ? */ -__attribute__((__section__(".rom.unc.data"))) uint32_t _rom_unc_data[9]; // 100020e8 - -/* ROM + hal_sdr_controller.c: Sdr_Rand2() */ -__attribute__((__section__(".sdr.rand2.data"))) uint32_t _sdr_rnd2_c = 7654321, _sdr_rnd2_z = 521288629, _sdr_rnd2_y = 362436; -// 100020BC, 100020B8, 100020B4 - -HAL_GPIO_ADAPTER PINMUX_RAM_DATA_SECTION gBoot_Gpio_Adapter; // 100020C0 [300=0x12c] -//SPIC_INIT_PARA HAL_FLASH_DATA_SECTION SpicInitParaAllClk[SpicMaxMode][CPU_CLK_TYPE_NO]; // 100021ec [144=0x90] - -#ifndef PRESENT_IMAGE2 -IMAGE2_START_RAM_FUN_SECTION RAM_START_FUNCTION gImage2EntryFun0; //= { InfraStart + 1 }; -#endif -IMAGE2_VALID_PATTEN_SECTION _RAM_IMG2_VALID_PATTEN RAM_IMG2_VALID_PATTEN = RAM_IMG2_VALID_PATTEN_INIT(); diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot.c deleted file mode 100644 index ae38a17..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot.c +++ /dev/null @@ -1,769 +0,0 @@ -/* - * BootLoader Ver 0.3 (19/10/2017) - * Created on: 12/02/2017 - * Author: pvvx - */ - -#include "platform_autoconf.h" -#include "rtl_bios_data.h" -#include "diag.h" -#include "rtl8195a/rtl8195a_sys_on.h" -#include "rtl8195a/rtl8195a_sdr.h" - -#include "hal_spi_flash.h" - -//------------------------------------------------------------------------- -// Data declarations -#ifndef DEFAULT_BAUDRATE -#define DEFAULT_BAUDRATE 38400 -#endif - -/* 0 - 166666666 Hz, 1 - 83333333 Hz, 2 - 41666666 Hz, 3 - 20833333 Hz, 4 - 10416666 Hz, 5 - 4000000? Hz, - 6 - 200000000 Hz, 7 - 10000000 Hz, 8 - 50000000 Hz, 9 - 25000000 Hz, 10 - 12500000 Hz, 11 - 4000000? Hz */ -#define DEFAULT_BOOT_CLK_CPU 1 // Warning! If Start CLK > 100 MHz -> Errors SPIC function in Ameba SDK! - -#ifdef DEFAULT_BOOT_CLK_CPU -#if DEFAULT_BOOT_CLK_CPU < 6 -#define DEFAULT_BOOT_CPU_CLOCK_SEL_DIV5_3 0 -#define DEFAULT_BOOT_CPU_CLOCK_SEL_VALUE DEFAULT_BOOT_CLK_CPU -#else -#define DEFAULT_BOOT_CPU_CLOCK_SEL_DIV5_3 1 -#define DEFAULT_BOOT_CPU_CLOCK_SEL_VALUE (DEFAULT_BOOT_CLK_CPU-6) -#endif -#endif // DEFAULT_BOOT_CLK_CPU -#define FIX_SDR_CALIBRATION // for speed and low used SRAM -#define BOOT_RAM_TEXT_SECTION // __attribute__((section(".boot.text"))) - -//------------------------------------------------------------------------- -typedef struct _seg_header { - uint32 size; - uint32 ldaddr; - uint32 sign[2]; -} IMGSEGHEAD, *PIMGSEGHEAD; - -typedef struct _img2_header { - IMGSEGHEAD seg; - void (*startfunc)(void); - uint8 rtkwin[7]; - uint8 ver[13]; - uint8 name[32]; -} IMG2HEAD, *PIMG2HEAD; - -#ifndef FLASH_SECTOR_SIZE -#define FLASH_SECTOR_SIZE 4096 -#endif -//------------------------------------------------------------------------- -// Function declarations -static void RtlBootToFlash(void); // image1 -static void RtlBoot1ToSram(void); // image1 -static void RtlBoot2ToSram(void); // image1 -static void RtlBoot3ToSram(void); // image1 -static void RtlBoot4ToSram(void); // image1 - -extern _LONG_CALL_ void HalCpuClkConfig(unsigned char CpuType); -extern _LONG_CALL_ void VectorTableInitRtl8195A(uint32_t StackP); -extern _LONG_CALL_ void HalInitPlatformLogUartV02(void); -extern _LONG_CALL_ void HalInitPlatformTimerV02(void); -//extern _LONG_CALL_ void DramInit_rom(IN DRAM_DEVICE_INFO *DramInfo); -//extern _LONG_CALL_ uint32_t SdrCalibration_rom(void); -extern _LONG_CALL_ uint32_t SpicCmpDataForCalibrationRtl8195A(void); // compare read_data and golden_data -//extern _LONG_CALL_ void SpicWaitWipDoneRtl8195A(SPIC_INIT_PARA SpicInitPara); // wait spi-flash status register[0] = 0 -//extern _LONG_CALL_ void SpicLoadInitParaFromClockRtl8195A(uint8_t CpuClkMode, uint8_t BaudRate, PSPIC_INIT_PARA pSpicInitPara); -//extern _LONG_CALL_ void RtlConsolInit(IN uint32_t Boot, IN uint32_t TBLSz, IN void *pTBL); - -//#pragma arm section code = ".boot.text"; -//#pragma arm section rodata = ".boot.rodata", rwdata = ".boot.data", zidata = ".boot.bss"; - -typedef void (*START_FUNC)(void); - -//------------------------------------------------------------------------- -/* Start table: */ -START_RAM_FUN_SECTION RAM_FUNCTION_START_TABLE __ram_start_table_start__ = { - RtlBootToFlash + 1, // StartFun(), Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x80000000 ) - RtlBoot1ToSram + 1, // PatchWAKE(), Run if ( v40000210 & 0x20000000 ) - RtlBoot2ToSram + 1, // PatchFun0(), Run if ( v40000210 & 0x10000000 ) - RtlBoot3ToSram + 1, // PatchFun1(), Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x8000000 ) - RtlBoot4ToSram + 1 };// PatchFun2(), Run for Init console, if ( v40000210 & 0x4000000 ) -//------------------------------------------------------------------------- -/* Set Debug Flags */ -static void BOOT_RAM_TEXT_SECTION SetDebugFlgs() { -#if CONFIG_DEBUG_LOG > 3 - CfgSysDebugWarn = -1; - CfgSysDebugInfo = -1; - CfgSysDebugErr = -1; - ConfigDebugWarn = -1; - ConfigDebugInfo = -1; - ConfigDebugErr = -1; -#elif CONFIG_DEBUG_LOG > 1 - CfgSysDebugWarn = -1; -// CfgSysDebugInfo = 0; - CfgSysDebugErr = -1; - ConfigDebugWarn = -1; -// ConfigDebugInfo = 0; - ConfigDebugErr = -1; //~_DBG_SDR_; -#elif CONFIG_DEBUG_LOG > 0 -// CfgSysDebugWarn = 0; -// CfgSysDebugInfo = 0; - CfgSysDebugErr = -1; -// ConfigDebugWarn = 0; -// ConfigDebugInfo = 0; - ConfigDebugErr = -1; //~_DBG_SDR_; -#else -// CfgSysDebugWarn = 0; -// CfgSysDebugInfo = 0; -// CfgSysDebugErr = 0; -// ConfigDebugWarn = 0; -// ConfigDebugInfo = 0; -// ConfigDebugErr = 0; -#endif -} - -/* JTAG On */ -static void BOOT_RAM_TEXT_SECTION JtagOn(void) { - ACTCK_VENDOR_CCTRL(ON); - SLPCK_VENDOR_CCTRL(ON); - HalPinCtrlRtl8195A(JTAG, 0, 1); -} - -/* - * 16 bytes FIFO ... 16*11/38400 = 0.004583 sec - * (0.005/5)*166666666 = 166666.666 Tcpu - */ -static void INFRA_START_SECTION loguart_wait_tx_fifo_empty(void) { - if (HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & BIT_SOC_LOG_UART_EN) { - int x = 16384; - while ((!(HAL_READ8(LOG_UART_REG_BASE, 0x14) & BIT6)) && x--) - ; // иначе глючит LogUART, если переключение CLK приходится на вывод символов ! - } -} - -extern SPIC_INIT_PARA SpicInitParaAllClk[SpicMaxMode][CPU_CLK_TYPE_NO]; // 100021ec [144=0x90] -static uint32 InitTabParaAllClk[3 * CPU_CLK_TYPE_NO] = { - // SIO - 0x01310102, // 72t/byte - 0x03310101, // 0201 - 40t, 0101 - 39t, 0102 - 72t, 0103 - 104t - 0x05310001, // 39t - 0x07310001, - 0x09310001, - 0x0B310001, - // DIO - 0x11311301, // BaudRate = 1, RdDummyCyle = 19, DelayLine = 63, DIO - 0x13311201, // 1201 - 36t - 0x15311101, // 1101 - 35t - 0x17311101, - 0x19311101, - 0x1B311101 - // QIO -/* MXIC Flash only DIO! - 0x21311301, // BaudRate = 1, RdDummyCyle = 19, DelayLine = 63, DIO - 0x23311201, // 1201 - 36t - 0x25311101, // 1101 - 35t - 0x27311101, - 0x29311101, - 0x2B311101 -*/ -}; - -struct spic_table_flash_type { - uint8 cmd[12]; - uint8 strlr2; - uint8 fbaud; - uint8 addrlen; - uint8 fsize; - uint32 contrl; - uint16 validcmd[3]; - uint8 manufacturerid; - uint8 memorytype; -}; - -//PSPIC_INIT_PARA pSpicInitPara; - -struct spic_table_flash_type spic_table_flash = { - { // for FLASH MX25L8006E/1606E - FLASH_CMD_FREAD, // REG_SPIC_READ_FAST_SINGLE 0x400060E0 0x0B - FLASH_CMD_DREAD, // REG_SPIC_READ_DUAL_DATA 0x400060E4 0x3B - FLASH_CMD_DREAD, // REG_SPIC_READ_DUAL_ADDR_DATA 0x400060E8 0x3B ? - FLASH_CMD_QREAD, // REG_SPIC_READ_QUAD_DATA 0x400060EC 0x6B - FLASH_CMD_4READ, // REG_SPIC_READ_QUAD_ADDR_DATA 0x400060F0 0xEB ? - FLASH_CMD_PP, // REG_SPIC_WRITE_SIGNLE 0x400060F4 0x02 - FLASH_CMD_DPP, // REG_SPIC_WRITE_DUAL_DATA 0x400060F8 0xA2 - FLASH_CMD_DPP, // REG_SPIC_WRITE_DUAL_ADDR_DATA 0x400060FC 0xA2 ? - FLASH_CMD_QPP, // REG_SPIC_WRITE_QUAD_DATA 0x40006100 0x32 - FLASH_CMD_4PP, // REG_SPIC_WRITE_QUAD_ADDR_DATA 0x40006104 0x38 - FLASH_CMD_WREN, // REG_SPIC_WRITE_ENABLE 0x40006108 0x06 - FLASH_CMD_RDSR // REG_SPIC_READ_STATUS 0x4000610C 0x05 - }, - BIT_FIFO_ENTRY(5) | BIT_SO_DUM, // REG_SPIC_CTRLR2 0x40006110 0x51 - BIT_FSCKDV(1), // REG_SPIC_FBAUDR 0x40006114 0x01 - BIT_ADDR_PHASE_LENGTH(3), // REG_SPIC_ADDR_LENGTH 0x40006118 0x03 - BIT_FLASE_SIZE(0x0F), // REG_SPIC_FLASE_SIZE 0x40006124 0x0E ? - BIT_CS_H_WR_DUM_LEN(2)| BIT_AUTO_ADDR__LENGTH(3) | BIT_RD_DUMMY_LENGTH(0x0), // REG_SPIC_AUTO_LENGTH 0x4000611C 0x20030001 ? - { - BIT_WR_BLOCKING, // REG_SPIC_VALID_CMD 0x40006120 0x200 SpicOneBitMode - BIT_WR_BLOCKING | BIT_RD_DUAL_I, // REG_SPIC_VALID_CMD 0x40006120 0x202 SpicDualBitMode - BIT_WR_BLOCKING | BIT_RD_DUAL_I, // REG_SPIC_VALID_CMD 0x40006120 0x202 SpicDualBitMode -// BIT_WR_BLOCKING | BIT_RD_QUAD_O, // REG_SPIC_VALID_CMD 0x40006120 0x208 SpicQuadBitMode MXIC not QIO - }, - 0xC2, 0x20 // MX25L8006/MX25L1606 -}; - -static int BOOT_RAM_TEXT_SECTION SetSpicBitMode(uint8 BitMode) { - PSPIC_INIT_PARA pspic = &SpicInitParaAllClk[BitMode][((HAL_SYS_CTRL_READ32(REG_SYS_CLK_CTRL1) >> 4) & 7)]; - if(pspic->Mode.Valid) { - // Disable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - HAL_SPI_WRITE32(REG_SPIC_VALID_CMD, spic_table_flash.validcmd[pspic->Mode.BitMode]); - HAL_SPI_WRITE32(REG_SPIC_AUTO_LENGTH, (HAL_SPI_READ32(REG_SPIC_AUTO_LENGTH) & 0xFFFF0000) | pspic->RdDummyCyle); - HAL_SPI_WRITE32(REG_SPIC_BAUDR, pspic->BaudRate); - FLASH_DDL_FCTRL(pspic->DelayLine); // SPI_DLY_CTRL_ADDR [7:0] - // Enable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, BIT_SPIC_EN); - } - SPI_FLASH_PIN_FCTRL(ON); - // Test Read Pattern - if(!SpicCmpDataForCalibrationRtl8195A()) { - FLASH_DDL_FCTRL(0x31); // SPI_DLY_CTRL_ADDR [7:0] - for(uint8 BaudRate = 1; BaudRate < 4; BaudRate++) { - for(uint8 RdDummyCyle = 0; RdDummyCyle < 63; RdDummyCyle++) { - // Disable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - HAL_SPI_WRITE32(REG_SPIC_AUTO_LENGTH, (HAL_SPI_READ32(REG_SPIC_AUTO_LENGTH) & 0xFFFF0000) | RdDummyCyle); - HAL_SPI_WRITE32(REG_SPIC_BAUDR, BaudRate); - // Enable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, BIT_SPIC_EN); -// HAL_SPI_WRITE32(REG_SPIC_FLUSH_FIFO, 1); - if(SpicCmpDataForCalibrationRtl8195A()) { - DiagPrintf("Spic reinit %d:%d\n", BaudRate, RdDummyCyle); - pspic->BaudRate = BaudRate; - pspic->RdDummyCyle = RdDummyCyle; - pspic->DelayLine = 0x31; - pspic->Mode.Valid = 1; - return 1; - }; - }; - }; - return 0; - }; - return 1; -} - -void BOOT_RAM_TEXT_SECTION InitSpicFlashType(struct spic_table_flash_type *ptable_flash) { - uint8_t * ptrb = (uint8_t *) &ptable_flash->cmd; - volatile uint32_t * ptrreg = (volatile uint32_t *)(SPI_FLASH_CTRL_BASE + REG_SPIC_READ_FAST_SINGLE);// 0x400060E0 - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); // Disable SPI_FLASH User Mode - do { - *ptrreg++ = *ptrb++; - } while(ptrb < (uint8_t *)(&ptable_flash->fsize)); - ptrreg[0] = ptable_flash->contrl; - ptrreg[1] = ptable_flash->validcmd[SpicOneBitMode]; - ptrreg[2] = ptable_flash->fsize; - HAL_SPI_WRITE32(REG_SPIC_SER, BIT_SER); -} - -static int BOOT_RAM_TEXT_SECTION InitSpic(uint8 SpicBitMode) { - _memset(SpicInitParaAllClk, 0, sizeof(SpicInitParaAllClk)); - uint32 * ptr = InitTabParaAllClk; - uint8 x; - for(x = 0; x < SpicMaxMode; x++) { - *(uint32 *)&SpicInitParaAllClk[SpicOneBitMode][x].BaudRate = ptr[0]; - *(uint32 *)&SpicInitParaAllClk[SpicDualBitMode][x].BaudRate = ptr[CPU_CLK_TYPE_NO]; - *(uint32 *)&SpicInitParaAllClk[SpicQuadBitMode][x].BaudRate = ptr[CPU_CLK_TYPE_NO]; // MXIC not QIO - ptr++; - } - ACTCK_FLASH_CCTRL(1); - SLPCK_FLASH_CCTRL(1); - HalPinCtrlRtl8195A(SPI_FLASH, 0, ON); - InitSpicFlashType(&spic_table_flash); - return SetSpicBitMode(SpicBitMode); -} - -#ifdef CONFIG_SDR_EN - -/* GetChipId() */ -static uint8 INFRA_START_SECTION _Get_ChipId() { - uint8 ChipId = CHIP_ID_8710AF; - if (HALEFUSEOneByteReadROM(HAL_SYS_CTRL_READ32(REG_SYS_EFUSE_CTRL), 0xF8, - &ChipId, L25EOUTVOLTAGE) != 1) - DBG_8195A("Get Chip ID Failed\r"); - return ChipId; -} - -static void INFRA_START_SECTION sdr_preinit(void) { - - HAL_SYS_CTRL_WRITE32(REG_SYS_REGU_CTRL0, - ((HAL_SYS_CTRL_READ32(REG_SYS_REGU_CTRL0) & 0xfffff) | BIT_SYS_REGU_LDO25M_ADJ(0x03))); // ROM: BIT_SYS_REGU_LDO25M_ADJ(0x0e)? HAL RAM BIT_SYS_REGU_LDO25M_ADJ(0x03) - LDO25M_CTRL(ON); - SRAM_MUX_CFG(0x2); - SDR_CLK_SEL(SDR_CLOCK_SEL_VALUE); // REG_PESOC_CLK_SEL - HalPinCtrlRtl8195A(SDR, 0, ON); // SDR_PIN_FCTRL(ON); - ACTCK_SDR_CCTRL(ON); - SLPCK_SDR_CCTRL(ON); - HAL_PERI_ON_WRITE32(REG_GPIO_PULL_CTRL4, 0); - MEM_CTRL_FCTRL(ON); - // HalDelayUs(1000); -} - -#ifndef FIX_SDR_CALIBRATION -extern _LONG_CALL_ int SdrCalibration_rom(void); -extern _LONG_CALL_ unsigned int Rand(void); -extern _LONG_CALL_ int SdrControllerInit_rom(PDRAM_DEVICE_INFO pDramInfo); - -static int INFRA_START_SECTION sdr_test(u32 LoopCnt) { - u32 LoopIndex = 0; - u32 Value32, Addr; - for (LoopIndex = 0; LoopIndex < LoopCnt; LoopIndex++) { - Value32 = Rand(); - Addr = Rand(); - Addr &= 0x1FFFFF; - Addr &= (~0x3); - HAL_SDRAM_WRITE32(Addr, Value32); - if (HAL_SDRAM_READ32(Addr) != Value32) - return 0; - } - return 1; -} -#endif - -static int INFRA_START_SECTION sdr_init_from_flash(void) { - #define RdPipe 0 -#if DEFAULT_BOOT_CLK_CPU < 6 -#define TapCnt 0x11 - #elif DEFAULT_BOOT_CLK_CPU == 7 -#define TapCnt 0x23 - #else -#define TapCnt 0x19 - #endif - // set all_mode _idle - HAL_SDR_WRITE32(REG_SDR_CSR, 0x700); - // WRAP_MISC setting - HAL_SDR_WRITE32(REG_SDR_MISC, 0x00000001); - // PCTL setting - HAL_SDR_WRITE32(REG_SDR_DCR, 0x00000008); - HAL_SDR_WRITE32(REG_SDR_IOCR, RdPipe << PCTL_IOCR_RD_PIPE_BFO); - HAL_SDR_WRITE32(REG_SDR_EMR2, 0x00000000); - HAL_SDR_WRITE32(REG_SDR_EMR1, 0x00000006); - HAL_SDR_WRITE32(REG_SDR_MR, 0x00000022); - HAL_SDR_WRITE32(REG_SDR_DRR, 0x09030e07); - HAL_SDR_WRITE32(REG_SDR_TPR0, 0x00002652); - HAL_SDR_WRITE32(REG_SDR_TPR1, 0x00068873); - HAL_SDR_WRITE32(REG_SDR_TPR2, 0x00000042); - // start to init - HAL_SDR_WRITE32(REG_SDR_CCR, 0x01); - DBG_8195A("SDR calibration: %02x-%02x\n", RdPipe, TapCnt); - while ((HAL_SDR_READ32(REG_SDR_CCR) & 0x1) == 0x0); - // enter mem_mode - HAL_SDR_WRITE32(REG_SDR_CSR, 0x600); - #ifdef FIX_SDR_CALIBRATION - SDR_DDL_FCTRL(TapCnt); // SDR_DDL_FCTRL(0x11); - return 1; -#else - union { u8 b[8]; u16 s[4]; u32 l[2]; u64 d;} value; - // read calibration data from system data FLASH_SDRC_PARA_BASE - u32 reg = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1); - u32 faddr = SPI_FLASH_BASE + FLASH_SDRC_PARA_BASE + ((reg & 0x70) >> 1) + ((reg & BIT17) >> 11) ; // step 8 in FLASH_SDRC_PARA_BASE[64 + 64 bytes] - value.d = *((volatile u64 *)faddr); - DBG_8195A("SDR flash calibration [%08x] %02x-%02x-%02x\n", faddr, value.b[0], value.b[4], value.b[6]); - if(value.s[0] == 0xFE01 && (value.b[4]^value.b[5]) == 0xFF && (value.b[6]^value.b[7]) == 0xFF) { - HAL_SDR_WRITE32(REG_SDR_IOCR, (HAL_SDR_READ32(REG_SDR_IOCR) & 0xff) | ((u32)value.b[4] << PCTL_IOCR_RD_PIPE_BFO)); - SDR_DDL_FCTRL((u32)value.b[6]); - if(sdr_test(7)) - return 1; // ok - else - DBG_8195A("Not valid SDR calibration in flash!\n"); - } else - DBG_8195A("Error SDR calibration in flash!\n"); - if(SdrCalibration_rom()) { // Внимание: дает завышенный TapCnt ! -// DBG_8195A("SDR calibration: %02x-%02x-%02x\n", value.b[0], value.b[4], value.b[6]); - value.s[0] = 0xFE01; - value.b[4] = HAL_SDR_READ32(REG_SDR_IOCR) >> PCTL_IOCR_RD_PIPE_BFO; - value.b[5] = value.b[4] ^ 0xFF; - value.b[6] = HAL_PERI_ON_READ32(REG_PESOC_MEM_CTRL) >> BIT_SHIFT_PESOC_SDR_DDL_CTRL; - value.b[7] = value.b[6] ^ 0xFF; - // DBG_8195A("%08x: %02x-%02x-%02x)\n", faddr, value.b[0], value.b[4], value.b[6]); - if((*((volatile u16 *)(faddr)) & value.s[0]) == value.s[0] - && (*((volatile u32 *)(faddr + 4)) & value.l[1]) == value.l[1]) { - *((volatile u32 *)(faddr + 4)) = value.l[1]; - DBG_8195A("Write new calibration [%08x] %02x-%02x-%02x\n", faddr, value.b[0], value.b[4], value.b[6]); - HalDelayUs(1000); - *((volatile u16 *)(faddr)) = value.s[0]; - } else { - DBG_8195A("Work recalibration: %02x-%02x-%02x!\n", value.b[0], value.b[4], value.b[6]); - } - return 2; // recalibration - ok - } else - DBG_8195A("SDR recalibration fail!\n"); - return 0; -#endif // FIX_SDR_CALIBRATION -} -#endif // CONFIG_SDR_EN - -/* SYSPlatformInit */ -static void INFRA_START_SECTION SYSPlatformInit(void) { - __asm__ __volatile__ ("cpsid f\n"); - JtagOn(); - SetDebugFlgs(); - //----- SYS Init - HAL_SYS_CTRL_WRITE32(REG_SYS_EFUSE_SYSCFG0, - (HAL_SYS_CTRL_READ32(REG_SYS_EFUSE_SYSCFG0) & (~(BIT_MASK_SYS_EEROM_LDO_PAR_07_04 << BIT_SHIFT_SYS_EEROM_LDO_PAR_07_04))) | BIT_SYS_EEROM_LDO_PAR_07_04(6)); // & 0xF0FFFFFF | 0x6000000 - HAL_SYS_CTRL_WRITE32(REG_SYS_XTAL_CTRL1, - (HAL_SYS_CTRL_READ32(REG_SYS_XTAL_CTRL1) & (~(BIT_MASK_SYS_XTAL_DRV_RF1 << BIT_SHIFT_SYS_XTAL_DRV_RF1))) | BIT_SYS_XTAL_DRV_RF1(1)); // & 0xFFFFFFE7 | 8; - //----- SDIO_Device_Off - HAL_PERI_ON_WRITE32(REG_PESOC_HCI_CLK_CTRL0, - HAL_PERI_ON_READ32(REG_PESOC_HCI_CLK_CTRL0) & (~BIT_SOC_ACTCK_SDIO_DEV_EN)); - HAL_PERI_ON_WRITE32(REG_SOC_HCI_COM_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_HCI_COM_FUNC_EN) & (~(BIT_SOC_HCI_SDIOD_ON_EN | BIT_SOC_HCI_SDIOD_OFF_EN))); - HAL_PERI_ON_WRITE32(REG_HCI_PINMUX_CTRL, - HAL_PERI_ON_READ32(REG_HCI_PINMUX_CTRL) & (~(BIT_HCI_SDIOD_PIN_EN))); - //----- GPIO Adapter - extern HAL_GPIO_ADAPTER gBoot_Gpio_Adapter; - _memset(&gBoot_Gpio_Adapter, 0, sizeof(gBoot_Gpio_Adapter)); - _pHAL_Gpio_Adapter = &gBoot_Gpio_Adapter; -#ifdef DEFAULT_BOOT_CLK_CPU - //----- CLK CPU - loguart_wait_tx_fifo_empty(); // иначе глючит LogUART, если переключение CLK приходится на вывод символов ! -#if DEFAULT_BOOT_CPU_CLOCK_SEL_DIV5_3 - // 6 - 200000000 Hz, 7 - 10000000 Hz, 8 - 50000000 Hz, 9 - 25000000 Hz, 10 - 12500000 Hz, 11 - 4000000 Hz - HalCpuClkConfig(DEFAULT_BOOT_CPU_CLOCK_SEL_VALUE); - *((int *)(SYSTEM_CTRL_BASE+REG_SYS_SYSPLL_CTRL1)) |= (1<<17);// REG_SYS_SYSPLL_CTRL1 |= BIT_SYS_SYSPLL_DIV5_3 -#else - // 0 - 166666666 Hz, 1 - 83333333 Hz, 2 - 41666666 Hz, 3 - 20833333 Hz, 4 - 10416666 Hz, 5 - 4000000 Hz - *((int *) (SYSTEM_CTRL_BASE + REG_SYS_SYSPLL_CTRL1)) &= ~(1 << 17); // REG_SYS_SYSPLL_CTRL1 &= ~BIT_SYS_SYSPLL_DIV5_3 - HalCpuClkConfig(DEFAULT_BOOT_CPU_CLOCK_SEL_VALUE); -#endif // CPU_CLOCK_SEL_DIV5_3 -#endif // DEFAULT_CLK_CPU - //----- System - VectorTableInitRtl8195A(STACK_TOP); // 0x1FFFFFFC - HalInitPlatformLogUartV02(); // Show ""... :( - HalInitPlatformTimerV02(); - __asm__ __volatile__ ("cpsie f\n"); -} - -/*------------------------------------------------------------------------------------- - Копирует данные из области align(4) (flash, registers, ...) в область align(1) (ram) - --------------------------------------------------------------------------------------*/ -static unsigned int BOOT_RAM_TEXT_SECTION flashcpy(unsigned int faddr, - void *dist, unsigned int size) { - union { - unsigned char uc[4]; - unsigned int ud; - } tmp; - if (faddr < SPI_FLASH_BASE) - faddr += SPI_FLASH_BASE; - unsigned char * pd = (unsigned char *) dist; - unsigned int *p = (unsigned int *) ((unsigned int) faddr & (~3)); - unsigned int xlen = (unsigned int) faddr & 3; - unsigned int len = size; - - if (xlen) { - tmp.ud = *p++; - while (len) { - len--; - *pd++ = tmp.uc[xlen++]; - if (xlen & 4) - break; - }; - }; - xlen = len >> 2; - while (xlen) { - tmp.ud = *p++; - *pd++ = tmp.uc[0]; - *pd++ = tmp.uc[1]; - *pd++ = tmp.uc[2]; - *pd++ = tmp.uc[3]; - xlen--; - }; - if (len & 3) { - tmp.ud = *p; - pd[0] = tmp.uc[0]; - if (len & 2) { - pd[1] = tmp.uc[1]; - if (len & 1) { - pd[2] = tmp.uc[2]; - }; - }; - }; - return size; -} - -typedef enum { - SEG_ID_ERR, - SEG_ID_SRAM, - SEG_ID_TCM, - SEG_ID_SDRAM, - SEG_ID_SOC, - SEG_ID_FLASH, - SEG_ID_CPU, - SEG_ID_ROM, - SEG_ID_MAX -} _SEG_ID; - -static const char * const txt_tab_seg[] = { - "UNK", // 0 - "SRAM", // 1 - "TCM", // 2 - "SDRAM", // 3 - "SOC", // 4 - "FLASH", // 5 - "CPU", // 6 - "ROM" // 7 - }; - -static const uint32 tab_seg_def[] = { 0x10000000, 0x10070000, 0x1fff0000, - 0x20000000, 0x30000000, 0x30200000, 0x40000000, 0x40800000, 0x98000000, - 0xA0000000, 0xE0000000, 0xE0010000, 0x00000000, 0x00050000 }; - -static uint32 BOOT_RAM_TEXT_SECTION get_seg_id(uint32 addr, int32 size) { - uint32 ret = SEG_ID_ERR; - uint32 * ptr = (uint32 *) &tab_seg_def; - if (size > 0) { - do { - ret++; - if (addr >= ptr[0] && addr + size <= ptr[1]) { - return ret; - }; - ptr += 2; - } while (ret < SEG_ID_MAX); - }; - return 0; // UNK -} - -static uint32 BOOT_RAM_TEXT_SECTION load_img2_head(uint32 faddr, PIMG2HEAD hdr) { - flashcpy(faddr, hdr, sizeof(IMG2HEAD)); - uint32 ret = get_seg_id(hdr->seg.ldaddr, hdr->seg.size); - if (hdr->seg.sign[1] == IMG_SIGN2_RUN) { - if (hdr->seg.sign[0] == IMG_SIGN1_RUN) { - ret |= 1 << 9; // есть сигнатура RUN - } else if (hdr->seg.sign[0] == IMG_SIGN1_SWP) { - ret |= 1 << 8; // есть сигнатура SWP - }; - } - if (*(uint32_t *) (&hdr->rtkwin) == IMG2_SIGN_DW1_TXT) { - ret |= 1 << 10; // есть подпись "RTKW" - }; - return ret; -} - -static uint32 BOOT_RAM_TEXT_SECTION load_segs(uint32 faddr, PIMG2HEAD hdr, - uint8 flgload) { - uint32 fnextaddr = faddr; - uint8 segnum = 0; - while (1) { - uint32 seg_id = get_seg_id(hdr->seg.ldaddr, hdr->seg.size); - if (flgload - && (seg_id == SEG_ID_SRAM || seg_id == SEG_ID_TCM - || seg_id == SEG_ID_SDRAM)) { -#if CONFIG_DEBUG_LOG > 1 - DBG_8195A("Load Flash seg%d: 0x%08x -> %s: 0x%08x, size: %d\n", - segnum, faddr, txt_tab_seg[seg_id], hdr->seg.ldaddr, - hdr->seg.size); -#endif - fnextaddr += flashcpy(fnextaddr, (void *)hdr->seg.ldaddr, hdr->seg.size); - } else if (seg_id) { -#if CONFIG_DEBUG_LOG > 2 - DBG_8195A("Skip Flash seg%d: 0x%08x -> %s: 0x%08x, size: %d\n", segnum, - faddr, txt_tab_seg[seg_id], hdr->seg.ldaddr, hdr->seg.size); -#endif - fnextaddr += hdr->seg.size; - } else { - break; - } - fnextaddr += flashcpy(fnextaddr, &hdr->seg, sizeof(IMGSEGHEAD)); - segnum++; - } - return fnextaddr; -} - -/*------------------------------------------------------------------------------------- - * 0 - default image (config data + 0), 1 - image N1, 2 - image N2, ... - --------------------------------------------------------------------------------------*/ -static int BOOT_RAM_TEXT_SECTION loadUserImges(int imgnum) { - IMG2HEAD hdr; - int imagenum = 1; - uint32 faddr = 0xb000; // start image2 in flash - DBG_8195A("Selected Image %d.\n", imgnum); - - while (1) { - faddr = (faddr + FLASH_SECTOR_SIZE - 1) & (~(FLASH_SECTOR_SIZE - 1)); - uint32 img_id = load_img2_head(faddr, &hdr); - if ((img_id >> 8) > 4 && (uint8) img_id != 0) { // есть подпись "RTKW" + RUN или SWP, сегмент != unknown - // загрузить, если imagenum == imgnum - faddr = load_segs(faddr + 0x10, (PIMG2HEAD) &hdr.seg, imagenum == imgnum); // faddr == fnextaddr - if (imagenum == imgnum) { // если искомая img -// DBG_8195A("Image%d: %s\n", imgnum, hdr.name); - break; - } - imagenum++; // перейти к следующей - } else if (imagenum) { // нет подписей у заданной imgnum - DBG_8195A("No Image%d! Trying Image0...\n", imgnum); - // пробуем загрузить image по умолчанию, по записи в секторе установок - flashcpy(FLASH_SYSTEM_DATA_ADDR, &faddr, sizeof(faddr)); - if (faddr < 0x8000000) - faddr += SPI_FLASH_BASE; - if (get_seg_id(faddr, 0x100) == SEG_ID_FLASH) { // указывает в Flash? - // будем пробовать грузить - imagenum = 0; - imgnum = 0; - } else { - DBG_8195A("No Image0!\n"); - imagenum = -1; - break; - }; - } else { - imagenum = -1; // нет записей image - break; - } - }; - return imagenum; -} - -//----- IsForceLoadDefaultImg2 -static uint8 BOOT_RAM_TEXT_SECTION IsForceLoadDefaultImg2(void) { - uint8 gpio_pin[4]; - HAL_GPIO_PIN GPIO_Pin; - HAL_GPIO_PIN_STATE flg; - int result = 0; - flashcpy(FLASH_SYSTEM_DATA_ADDR + 0x08, &gpio_pin, sizeof(gpio_pin)); // config data + 8 -// _pHAL_Gpio_Adapter = &gBoot_Gpio_Adapter; - for (int i = 1; i; i--) { - uint8 x = gpio_pin[i]; - result <<= 1; - if (x != 0xff) { - GPIO_Pin.pin_name = HAL_GPIO_GetIPPinName_8195a(x & 0x7F); - if (x & 0x80) { - GPIO_Pin.pin_mode = DIN_PULL_LOW; - flg = GPIO_PIN_HIGH; - } else { - GPIO_Pin.pin_mode = DIN_PULL_HIGH; - flg = GPIO_PIN_LOW; - } - HAL_GPIO_Init_8195a(&GPIO_Pin); - if (HAL_GPIO_ReadPin_8195a(&GPIO_Pin) == flg) { - result |= 1; - } - HAL_GPIO_DeInit_8195a(&GPIO_Pin); - } - } -// _pHAL_Gpio_Adapter->IrqHandle.IrqFun = NULL; - return result; -} - -extern _LONG_CALL_ void RtlConsolTaskRom(void *Data); - -/* RTL Console ROM */ -static void BOOT_RAM_TEXT_SECTION RtlConsolRam(void) { -// DiagPrintf("\r\nRTL Console ROM\r\n"); -// RtlConsolInit(ROM_STAGE, (uint32_t) 6, (void*) &UartLogRomCmdTable); - pUartLogCtl->RevdNo = UART_LOG_HISTORY_LEN; - pUartLogCtl->BootRdy = 1; - pUartLogCtl->pTmpLogBuf->UARTLogBuf[0] = '?'; - pUartLogCtl->pTmpLogBuf->BufCount = 1; - pUartLogCtl->ExecuteCmd = 1; - RtlConsolTaskRom((void *) pUartLogCtl); -} - -/* Enter Image 1.5 */ -static void BOOT_RAM_TEXT_SECTION EnterImage15(int flg) { - - if (flg) - _memset(&__rom_bss_start__, 0, &__rom_bss_end__ - &__rom_bss_start__); - - SYSPlatformInit(); - - if (!flg) - DBG_8195A("\r===== Enter FLASH-Boot ====\n"); - else - DBG_8195A("\r===== Enter SRAM-Boot %d ====\n", flg); -#if CONFIG_DEBUG_LOG > 1 - DBG_8195A("CPU CLK: %d Hz, SOC FUNC EN: %p\n", HalGetCpuClk(), - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN)); -#endif -#ifdef CONFIG_SDR_EN - uint8 ChipId = _Get_ChipId(); - if (ChipId < CHIP_ID_8195AM) { -#endif - //----- SDRAM Off - SDR_PIN_FCTRL(OFF); - LDO25M_CTRL(OFF); -#ifdef CONFIG_SDR_EN - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT(21)); // Flag SDRAM Init or None - } else { - //----- SDRAM On - sdr_preinit(); - }; -#endif - if (!InitSpic(SpicDualBitMode)) { - DBG_8195A("Spic Init fail!\n"); - RtlConsolRam(); - }; -#ifdef CONFIG_SDR_EN - if ((HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & BIT(21)) == 0) { // Flag SDRAM No ReInit? - if(!sdr_init_from_flash()) { - DBG_8195A("SDR Init fail!\n"); - RtlConsolRam(); - } -#ifdef USE_SDRAM_TEST // Test SDRAM - else { - uint32 *ptr = (uint32 *)SDR_SDRAM_BASE; - uint32 tt = 0x55AA55AA; - for (int i = 0; i < 512 * 1024; i++) { - ptr[i] = tt++; - }; - tt = 0x55AA55AA; - for (int i = 0; i < 512 * 1024; i++) { - if (ptr[i] != tt) { - DBG_8195A("SDR err %p %p != %p!\n", &ptr[i], ptr[i], tt); - RtlConsolRam(); - } - // ptr[i] = 0; - tt++; - }; - DBG_8195A("SDR test ok\n"); - }; -#endif // Test SDRAM - // Тест и ожидание загрузки Jlink-ом sdram.bin (~7 sec) - if(flg && *((uint32 *)0x1FFF0000) == 0x12345678) { - *((volatile uint32 *)0x1FFF0000) = 0x87654321; - uint32 tt = 0x03ffffff; // ~7 sec - DBG_8195A("Waiting for SDRAM to load...\n"); - // __asm__ __volatile__ ("cpsid f\n"); - while(*((volatile uint32 *)0x1FFF0000) == 0x87654321 && tt--); - // __asm__ __volatile__ ("cpsie f\n"); - if(*((volatile uint32 *)0x1FFF0000) == 1) - DBG_8195A("SDRAM load ok\n"); - } - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT(21)); // Flag SDRAM No ReInit - }; -#endif // CONFIG_SDR_EN - if (!flg) - loadUserImges(IsForceLoadDefaultImg2() + 1); - - if (_strcmp((const char *) &__image2_validate_code__, IMG2_SIGN_TXT)) { - DBG_8195A("Invalid Image Signature!\n"); - RtlConsolRam(); - } - - DBG_8195A("Img Sign: %s, Go @ 0x%08x\r\n", &__image2_validate_code__, - __image2_entry_func__); - __image2_entry_func__(); -} - -/* RtlBootToSram */ -static void BOOT_RAM_TEXT_SECTION RtlBoot1ToSram(void) { - EnterImage15(1); -} -/* RtlBootToSram */ -static void BOOT_RAM_TEXT_SECTION RtlBoot2ToSram(void) { - EnterImage15(2); -} -/* RtlBootToSram */ -static void BOOT_RAM_TEXT_SECTION RtlBoot3ToSram(void) { - EnterImage15(3); -} -/* RtlBootToSram */ -static void BOOT_RAM_TEXT_SECTION RtlBoot4ToSram(void) { - EnterImage15(4); -} - -static void BOOT_RAM_TEXT_SECTION RtlBootToFlash(void) { - EnterImage15(0); -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot_min.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot_min.c deleted file mode 100644 index 0248e77..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot_min.c +++ /dev/null @@ -1,387 +0,0 @@ -/* - * (SRAM) Debug BootLoader - * Created on: 12/02/2017 - * Author: pvvx - */ - -#include "platform_autoconf.h" -#include "rtl_bios_data.h" -#include "diag.h" -#include "rtl8195a/rtl8195a_sys_on.h" - -//------------------------------------------------------------------------- -// Data declarations -//extern uint32_t STACK_TOP; -//extern volatile UART_LOG_CTL * pUartLogCtl; -#ifndef DEFAULT_BAUDRATE -#define DEFAULT_BAUDRATE UART_BAUD_RATE_38400 -#endif - -#define BOOT_RAM_TEXT_SECTION // __attribute__((section(".boot.text"))) -//#define BOOT_RAM_RODATA_SECTION __attribute__((section(".boot.rodata"))) -//#define BOOT_RAM_DATA_SECTION __attribute__((section(".boot.data"))) -//#define BOOT_RAM_BSS_SECTION __attribute__((section(".boot.bss"))) - -//------------------------------------------------------------------------- -typedef struct _seg_header { - uint32 size; - uint32 ldaddr; -} IMGSEGHEAD, *PIMGSEGHEAD; - -typedef struct _img2_header { - IMGSEGHEAD seg; - uint32 sign[2]; - void (*startfunc)(void); - uint8 rtkwin[7]; - uint8 ver[13]; - uint8 name[32]; -} IMG2HEAD, *PIMG2HEAD; - -#ifndef FLASH_SECTOR_SIZE -#define FLASH_SECTOR_SIZE 4096 -#endif -//------------------------------------------------------------------------- -// Function declarations -static void RtlBootToFlash(void); // image1 -static void RtlBootToSram(void); // image1 -static void EnterImage15(void); // image1 -static void JtagOn(void); // image1 - -extern _LONG_CALL_ void HalCpuClkConfig(unsigned char CpuType); -extern _LONG_CALL_ void VectorTableInitRtl8195A(uint32_t StackP); -extern _LONG_CALL_ void HalInitPlatformLogUartV02(void); -extern _LONG_CALL_ void HalInitPlatformTimerV02(void); - -//#pragma arm section code = ".boot.text"; -//#pragma arm section rodata = ".boot.rodata", rwdata = ".boot.data", zidata = ".boot.bss"; - -typedef void (*START_FUNC)(void); - -/* Start table: */ -START_RAM_FUN_SECTION RAM_FUNCTION_START_TABLE __ram_start_table_start__ = { - RtlBootToFlash + 1, // StartFun(), Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x80000000 ) - RtlBootToSram + 1, // PatchWAKE(), Run if ( v40000210 & 0x20000000 ) - RtlBootToSram + 1, // PatchFun0(), Run if ( v40000210 & 0x10000000 ) - RtlBootToSram + 1,// PatchFun1(), Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x8000000 ) - RtlBootToFlash + 1 };// PatchFun2(), Run for Init console, if ( v40000210 & 0x4000000 ) -// EnterImage15 + 1}; // PatchFun2(), Run for Init console, if ( v40000210 & 0x4000000 ) - -/* Set Debug Flags */ -static void BOOT_RAM_TEXT_SECTION SetDebugFlgs() { -#if CONFIG_DEBUG_LOG > 3 - CfgSysDebugWarn = -1; - CfgSysDebugInfo = -1; - CfgSysDebugErr = -1; - ConfigDebugWarn = -1; - ConfigDebugInfo = -1; - ConfigDebugErr = -1; -#elif CONFIG_DEBUG_LOG > 1 - CfgSysDebugWarn = -1; -// CfgSysDebugInfo = 0; - CfgSysDebugErr = -1; - ConfigDebugWarn = -1; -// ConfigDebugInfo = 0; - ConfigDebugErr = -1; -#elif CONFIG_DEBUG_LOG > 0 -// CfgSysDebugWarn = 0; -// CfgSysDebugInfo = 0; - CfgSysDebugErr = -1; -// ConfigDebugWarn = 0; -// ConfigDebugInfo = 0; - ConfigDebugErr = -1; -#else -// CfgSysDebugWarn = 0; -// CfgSysDebugInfo = 0; -// CfgSysDebugErr = 0; -// ConfigDebugWarn = 0; -// ConfigDebugInfo = 0; -// ConfigDebugErr = 0; -#endif -} - -/* RTL Console ROM */ -static void BOOT_RAM_TEXT_SECTION RtlConsolRam(void) { -// DiagPrintf("\r\nRTL Console ROM\r\n"); - pUartLogCtl->pTmpLogBuf->UARTLogBuf[0] = '?'; - pUartLogCtl->pTmpLogBuf->BufCount = 1; - pUartLogCtl->ExecuteCmd = 1; - RtlConsolTaskRom(pUartLogCtl); -} - -/* JTAG On */ -static void BOOT_RAM_TEXT_SECTION JtagOn(void) { - ACTCK_VENDOR_CCTRL(ON); - SLPCK_VENDOR_CCTRL(ON); - HalPinCtrlRtl8195A(JTAG, 0, 1); -} - -/* Enter Image 1.5 */ -static void BOOT_RAM_TEXT_SECTION EnterImage15(void) { - SetDebugFlgs(); - DBG_8195A( - "\n===== Enter SRAM-Boot ====\nImg Sign: %s, Go @ 0x%08x\r\n", - &__image2_validate_code__, __image2_entry_func__); -#if CONFIG_DEBUG_LOG > 2 - DBG_8195A("CPU CLK: %d Hz, SOC FUNC EN: %p\r\n", HalGetCpuClk(), - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN)); -#endif - if (_strcmp((const char *) &__image2_validate_code__, IMG2_SIGN_TXT)) { - DBG_MISC_ERR("Invalid Image Signature!\n"); - RtlConsolRam(); - } - __image2_entry_func__(); -} - -/* RtlBootToSram */ -static void BOOT_RAM_TEXT_SECTION RtlBootToSram(void) { - JtagOn(); /* JTAG On */ - _memset(&__rom_bss_start__, 0, &__rom_bss_end__ - &__rom_bss_start__); - __asm__ __volatile__ ("cpsid f\n"); - HAL_SYS_CTRL_WRITE32(REG_SYS_SYSPLL_CTRL1, - HAL_SYS_CTRL_READ32(REG_SYS_SYSPLL_CTRL1) & ( ~BIT_SYS_SYSPLL_DIV5_3)); - HalCpuClkConfig(2); // 41.666666 MHz -// HAL_SYS_CTRL_WRITE32(REG_SYS_SYSPLL_CTRL1, HAL_SYS_CTRL_READ32(REG_SYS_SYSPLL_CTRL1) | BIT_SYS_SYSPLL_DIV5_3); // 50.000 MHz - VectorTableInitRtl8195A(STACK_TOP); // 0x1FFFFFFC - HalInitPlatformLogUartV02(); - HalInitPlatformTimerV02(); - __asm__ __volatile__ ("cpsie f\n"); - // SdrPowerOff(); - SDR_PIN_FCTRL(OFF); - LDO25M_CTRL(OFF); - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT(21)); - - SpicInitRtl8195AV02(1, 0); // StartupSpicBaudRate InitBaudRate 1, SpicBitMode 1 StartupSpicBitMode - EnterImage15(); -} - -/*------------------------------------------------------------------------------------- - Копирует данные из области align(4) (flash, registers, ...) в область align(1) (ram) - --------------------------------------------------------------------------------------*/ -static unsigned int BOOT_RAM_TEXT_SECTION flashcpy(unsigned int faddr, - void *dist, unsigned int size) { - union { - unsigned char uc[4]; - unsigned int ud; - } tmp; - if (faddr < SPI_FLASH_BASE) - faddr += SPI_FLASH_BASE; - unsigned char * pd = (unsigned char *) dist; - unsigned int *p = (unsigned int *) ((unsigned int) faddr & (~3)); - unsigned int xlen = (unsigned int) faddr & 3; - unsigned int len = size; - - if (xlen) { - tmp.ud = *p++; - while (len) { - len--; - *pd++ = tmp.uc[xlen++]; - if (xlen & 4) - break; - }; - }; - xlen = len >> 2; - while (xlen) { - tmp.ud = *p++; - *pd++ = tmp.uc[0]; - *pd++ = tmp.uc[1]; - *pd++ = tmp.uc[2]; - *pd++ = tmp.uc[3]; - xlen--; - }; - if (len & 3) { - tmp.ud = *p; - pd[0] = tmp.uc[0]; - if (len & 2) { - pd[1] = tmp.uc[1]; - if (len & 1) { - pd[2] = tmp.uc[2]; - }; - }; - }; - return size; -} - -enum { - SEG_ID_ERR, - SEG_ID_SRAM, - SEG_ID_TCM, - SEG_ID_SDRAM, - SEG_ID_SOC, - SEG_ID_FLASH, - SEG_ID_CPU, - SEG_ID_ROM, - SEG_ID_MAX -} SEG_ID; - -static const char * const txt_tab_seg[] = { - "UNK", // 0 - "SRAM", // 1 - "TCM", // 2 - "SDRAM", // 3 - "SOC", // 4 - "FLASH", // 5 - "CPU", // 6 - "ROM" // 7 - }; - -static const uint32 tab_seg_def[] = { 0x10000000, 0x10070000, 0x1fff0000, - 0x20000000, 0x30000000, 0x30200000, 0x40000000, 0x40800000, 0x98000000, - 0xA0000000, 0xE0000000, 0xE0010000, 0x00000000, 0x00050000 }; - -static uint32 BOOT_RAM_TEXT_SECTION get_seg_id(uint32 addr, int32 size) { - uint32 ret = SEG_ID_ERR; - uint32 * ptr = &tab_seg_def; - if (size > 0) { - do { - ret++; - if (addr >= ptr[0] && addr + size <= ptr[1]) { - return ret; - }; - ptr += 2; - } while (ret < SEG_ID_MAX); - }; - return 0; -} - -static uint32 BOOT_RAM_TEXT_SECTION load_img2_head(uint32 faddr, PIMG2HEAD hdr) { - flashcpy(faddr, hdr, sizeof(IMG2HEAD)); - uint32 ret = get_seg_id(hdr->seg.ldaddr, hdr->seg.size); - if (hdr->sign[1] == IMG_SIGN2_RUN) { - if (hdr->sign[0] == IMG_SIGN1_RUN) { - ret |= 1 << 9; - } else if (hdr->sign[0] == IMG_SIGN1_SWP) { - ret |= 1 << 8; - }; - } - if (*(uint32_t *) (&hdr->rtkwin) == IMG2_SIGN_DW1_TXT) { - ret |= 1 << 10; - }; - return ret; -} - -static uint32 BOOT_RAM_TEXT_SECTION load_segs(uint32 faddr, PIMG2HEAD hdr, - uint8 flgload) { - uint32 fnextaddr = faddr; - uint8 segnum = 0; - while (1) { - uint32 seg_id = get_seg_id(hdr->seg.ldaddr, hdr->seg.size); - if (flgload && (seg_id == SEG_ID_SRAM || seg_id == SEG_ID_TCM)) { -#if CONFIG_DEBUG_LOG > 1 - DBG_8195A("Load Flash seg%d: 0x%08x -> %s: 0x%08x, size: %d\n", - segnum, faddr, txt_tab_seg[seg_id], hdr->seg.ldaddr, - hdr->seg.size); -#endif - fnextaddr += flashcpy(fnextaddr, hdr->seg.ldaddr, hdr->seg.size); - } else if (seg_id) { -#if CONFIG_DEBUG_LOG > 2 - DBG_8195A("Skip Flash seg%d: 0x%08x -> %s: 0x%08x, size: %d\n", segnum, - faddr, txt_tab_seg[seg_id], hdr->seg.ldaddr, hdr->seg.size); -#endif - fnextaddr += hdr->seg.size; - } else { - break; - } - fnextaddr += flashcpy(fnextaddr, &hdr->seg, sizeof(IMGSEGHEAD)); - segnum++; - } - return fnextaddr; -} - -/*------------------------------------------------------------------------------------- - * 0 - default image (config data + 0), 1 - image N1, 2 - image N2, ... - --------------------------------------------------------------------------------------*/ -static int BOOT_RAM_TEXT_SECTION loadUserImges(int imgnum) { - IMG2HEAD hdr; - int imagenum = 1; - uint32 faddr = 0xb000; // start image2 in flash - DBG_8195A("Selected Image %d.\n", imgnum); - - while (1) { - faddr = (faddr + FLASH_SECTOR_SIZE - 1) & (~(FLASH_SECTOR_SIZE - 1)); - uint32 img_id = load_img2_head(faddr, &hdr); - if ((img_id >> 8) > 4 || (uint8) img_id != 0) { - faddr = load_segs(faddr + 0x10, &hdr.seg, imagenum == imgnum); - if (imagenum == imgnum) { -// DBG_8195A("Image%d: %s\n", imgnum, hdr.name); - break; - } - imagenum++; - } else if (imagenum) { - DBG_8195A("No Image%d! Trying Image0...\n", imgnum); - // пробуем загрузить image по умолчанию, по записи в секторе установок - flashcpy(FLASH_SYSTEM_DATA_ADDR, &faddr, sizeof(faddr)); - if (faddr < 0x8000000) - faddr += SPI_FLASH_BASE; - if (get_seg_id(faddr, 0x100) == SEG_ID_FLASH) { - imagenum = 0; - imgnum = 0; - } else { - DBG_8195A("No Image0!\n"); - imagenum = -1; - break; - }; - } else { - imagenum = -1; - break; - } - }; - return imagenum; -} -; - -extern PHAL_GPIO_ADAPTER _pHAL_Gpio_Adapter; -extern HAL_GPIO_ADAPTER gBoot_Gpio_Adapter; -//----- IsForceLoadDefaultImg2 -static uint8 BOOT_RAM_TEXT_SECTION IsForceLoadDefaultImg2(void) { - uint8 gpio_pin[4]; - HAL_GPIO_PIN GPIO_Pin; - HAL_GPIO_PIN_STATE flg; - int result = 0; - flashcpy(FLASH_SYSTEM_DATA_ADDR + 0x08, &gpio_pin, sizeof(gpio_pin)); // config data + 8 - _pHAL_Gpio_Adapter = &gBoot_Gpio_Adapter; - for (int i = 1; i; i--) { - uint8 x = gpio_pin[i]; - result <<= 1; - if (x != 0xff) { - GPIO_Pin.pin_name = HAL_GPIO_GetIPPinName_8195a(x & 0x7F); - if (x & 0x80) { - GPIO_Pin.pin_mode = DIN_PULL_LOW; - flg = GPIO_PIN_HIGH; - } else { - GPIO_Pin.pin_mode = DIN_PULL_HIGH; - flg = GPIO_PIN_LOW; - } - HAL_GPIO_Init_8195a(&GPIO_Pin); - if (HAL_GPIO_ReadPin_8195a(&GPIO_Pin) == flg) { - result |= 1; - } - HAL_GPIO_DeInit_8195a(&GPIO_Pin); - } - } - _pHAL_Gpio_Adapter->IrqHandle.IrqFun = NULL; - return result; -} - -static void BOOT_RAM_TEXT_SECTION RtlBootToFlash(void) { - - JtagOn(); /* JTAG On */ - SetDebugFlgs(); - DBG_8195A("===== Enter FLASH-Boot ====\n"); - if (HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & (1 << BIT_SOC_FLASH_EN)) { - SPI_FLASH_PIN_FCTRL(ON); - /* - if(!SpicCmpDataForCalibrationRtl8195A()) { - DBG_8195A("ReInit Spic DIO...\n"); - SpicInitRtl8195AV02(1, SpicDualBitMode); - } - */ - loadUserImges(IsForceLoadDefaultImg2() + 1); - }; - if (_strcmp((const char *) &__image2_validate_code__, IMG2_SIGN_TXT)) { - DBG_8195A("Invalid Image Signature!\n"); - RtlConsolRam(); - } else - DBG_8195A("Go @ 0x%08x\r\n", __image2_entry_func__); - __image2_entry_func__(); -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot_ram.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot_ram.c deleted file mode 100644 index 005c89f..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot_ram.c +++ /dev/null @@ -1,127 +0,0 @@ -/* - * (SRAM) Debug BootLoader - * Created on: 12/02/2017 - * Author: pvvx - */ - -#include "platform_autoconf.h" -#include "rtl_bios_data.h" -#include "diag.h" -#include "rtl8195a/rtl8195a_sys_on.h" - -//------------------------------------------------------------------------- -// Data declarations -//extern uint32_t STACK_TOP; -//extern volatile UART_LOG_CTL * pUartLogCtl; - -#ifndef DEFAULT_BAUDRATE -#define DEFAULT_BAUDRATE UART_BAUD_RATE_38400 -#endif - -#define BOOT_RAM_TEXT_SECTION // __attribute__((section(".boot.text"))) -//#define BOOT_RAM_RODATA_SECTION __attribute__((section(".boot.rodata"))) -//#define BOOT_RAM_DATA_SECTION __attribute__((section(".boot.data"))) -//#define BOOT_RAM_BSS_SECTION __attribute__((section(".boot.bss"))) - -//------------------------------------------------------------------------- -// Function declarations -static void RtlBootToSram(void); // image1 -static void EnterImage15(void); // image1 -static void JtagOn(void); // image1 - -extern _LONG_CALL_ void HalCpuClkConfig(unsigned char CpuType); -extern _LONG_CALL_ void VectorTableInitRtl8195A(uint32_t StackP); -extern _LONG_CALL_ void HalInitPlatformLogUartV02(void); -extern _LONG_CALL_ void HalInitPlatformTimerV02(void); - -//#pragma arm section code = ".boot.text"; -//#pragma arm section rodata = ".boot.rodata", rwdata = ".boot.data", zidata = ".boot.bss"; - -typedef void (*START_FUNC)(void); - -/* Start table: */ -START_RAM_FUN_SECTION RAM_FUNCTION_START_TABLE __ram_start_table_start__ = { - RtlBootToSram + 1, // StartFun(), Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x80000000 ) - RtlBootToSram + 1, // PatchWAKE(), Run if ( v40000210 & 0x20000000 ) - RtlBootToSram + 1, //- PatchFun0(), Run if ( v40000210 & 0x10000000 ) - RtlBootToSram + 1, //+ PatchFun1(), Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x8000000 ) - EnterImage15 + 1}; // PatchFun2(), Run for Init console, if ( v40000210 & 0x4000000 ) - -/* Set Debug Flags */ -static void BOOT_RAM_TEXT_SECTION SetDebugFlgs() { -#if CONFIG_DEBUG_LOG > 3 - CfgSysDebugWarn = -1; - CfgSysDebugInfo = -1; - CfgSysDebugErr = -1; - ConfigDebugWarn = -1; - ConfigDebugInfo = -1; - ConfigDebugErr = -1; -#elif CONFIG_DEBUG_LOG > 1 - CfgSysDebugWarn = -1; -// CfgSysDebugInfo = 0; - CfgSysDebugErr = -1; - ConfigDebugWarn = -1; -// ConfigDebugInfo = 0; - ConfigDebugErr = -1; -#elif CONFIG_DEBUG_LOG > 0 -// CfgSysDebugWarn = 0; -// CfgSysDebugInfo = 0; - CfgSysDebugErr = -1; -// ConfigDebugWarn = 0; -// ConfigDebugInfo = 0; - ConfigDebugErr = -1; -#else -// CfgSysDebugWarn = 0; -// CfgSysDebugInfo = 0; -// CfgSysDebugErr = 0; -// ConfigDebugWarn = 0; -// ConfigDebugInfo = 0; -// ConfigDebugErr = 0; -#endif -} - -/* RTL Console ROM */ -static void BOOT_RAM_TEXT_SECTION RtlConsolRam(void) { -// DiagPrintf("\r\nRTL Console ROM\r\n"); - pUartLogCtl->pTmpLogBuf->UARTLogBuf[0] = '?'; - pUartLogCtl->pTmpLogBuf->BufCount = 1; - pUartLogCtl->ExecuteCmd = 1; - RtlConsolTaskRom(pUartLogCtl); -} - -/* JTAG On */ -static void BOOT_RAM_TEXT_SECTION JtagOn(void) { - ACTCK_VENDOR_CCTRL(ON); - SLPCK_VENDOR_CCTRL(ON); - HalPinCtrlRtl8195A(JTAG, 0, 1); -} - -/* Enter Image 1.5 */ -static void BOOT_RAM_TEXT_SECTION EnterImage15(void) { - SetDebugFlgs(); - DBG_8195A("\rCPU CLK: %d Hz, SOC FUNC EN: %p\r\n", HalGetCpuClk(), HAL_PERI_ON_READ32(REG_SOC_FUNC_EN)); - DBG_8195A("==!== Enter Image 1.5 ====\nImg2 Sign: %s, InfaStart @ 0x%08x\r\n", - &__image2_validate_code__, __image2_entry_func__); - if (_strcmp((const char *) &__image2_validate_code__, IMG2_SIGN_TXT)) { - DBG_MISC_ERR("Invalid Image2 Signature!\n"); - RtlConsolRam(); - } - __image2_entry_func__(); -} - -/* RtlBootToSram */ -static void BOOT_RAM_TEXT_SECTION RtlBootToSram(void) { - JtagOn(); /* JTAG On */ - _memset(&__rom_bss_start__, 0, &__rom_bss_end__ - &__rom_bss_start__); - __asm__ __volatile__ ("cpsid f\n"); - HAL_SYS_CTRL_WRITE32(REG_SYS_SYSPLL_CTRL1, HAL_SYS_CTRL_READ32(REG_SYS_SYSPLL_CTRL1) & ( ~BIT_SYS_SYSPLL_DIV5_3)); - HalCpuClkConfig(2); // 41.666666 MHz -// HAL_SYS_CTRL_WRITE32(REG_SYS_SYSPLL_CTRL1, HAL_SYS_CTRL_READ32(REG_SYS_SYSPLL_CTRL1) | BIT_SYS_SYSPLL_DIV5_3); // 50.000 MHz - VectorTableInitRtl8195A(STACK_TOP); // 0x1FFFFFFC - HalInitPlatformLogUartV02(); - HalInitPlatformTimerV02(); - __asm__ __volatile__ ("cpsie f\n"); - SpicInitRtl8195AV02(1, 0); // StartupSpicBaudRate InitBaudRate 1, SpicBitMode 1 StartupSpicBitMode -// HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & 0x1FFFFF); // Clear debug flags - EnterImage15(); -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot_tst.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot_tst.c deleted file mode 100644 index a73d35d..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot_tst.c +++ /dev/null @@ -1,696 +0,0 @@ -/* - * BootLoader - * Created on: 12/02/2017 - * Author: pvvx - */ - -#include "platform_autoconf.h" -#include "rtl_bios_data.h" -#include "diag.h" -#include "rtl8195a/rtl8195a_sys_on.h" - -#include "hal_spi_flash.h" - -//------------------------------------------------------------------------- -// Data declarations - -#ifndef DEFAULT_BAUDRATE -#define DEFAULT_BAUDRATE UART_BAUD_RATE_38400 -#endif - -/* 0 - 166666666 Hz, 1 - 83333333 Hz, 2 - 41666666 Hz, 3 - 20833333 Hz, 4 - 10416666 Hz, 5 - 4000000? Hz, - 6 - 200000000 Hz, 7 - 10000000 Hz, 8 - 50000000 Hz, 9 - 25000000 Hz, 10 - 12500000 Hz, 11 - 4000000? Hz */ -#define DEFAULT_BOOT_CLK_CPU 8 // Warning! If Start CLK > 100 MHz -> Errors SPIC function in Ameba SDK! - -#ifdef DEFAULT_BOOT_CLK_CPU -#if DEFAULT_BOOT_CLK_CPU < 6 -#define DEFAULT_BOOT_CPU_CLOCK_SEL_DIV5_3 0 -#define DEFAULT_BOOT_CPU_CLOCK_SEL_VALUE DEFAULT_BOOT_CLK_CPU -#else -#define DEFAULT_BOOT_CPU_CLOCK_SEL_DIV5_3 1 -#define DEFAULT_BOOT_CPU_CLOCK_SEL_VALUE (DEFAULT_BOOT_CLK_CPU-6) -#endif -#endif // DEFAULT_BOOT_CLK_CPU - -#define BOOT_RAM_TEXT_SECTION // __attribute__((section(".boot.text"))) -//#define BOOT_RAM_RODATA_SECTION __attribute__((section(".boot.rodata"))) -//#define BOOT_RAM_DATA_SECTION __attribute__((section(".boot.data"))) -//#define BOOT_RAM_BSS_SECTION __attribute__((section(".boot.bss"))) - -//extern uint32_t STACK_TOP; -//extern volatile UART_LOG_CTL * pUartLogCtl; -extern void * UartLogRomCmdTable; - -//------------------------------------------------------------------------- -typedef struct _seg_header { - uint32 size; - uint32 ldaddr; -} IMGSEGHEAD, *PIMGSEGHEAD; - -typedef struct _img2_header { - IMGSEGHEAD seg; - uint32 sign[2]; - void (*startfunc)(void); - uint8 rtkwin[7]; - uint8 ver[13]; - uint8 name[32]; -} IMG2HEAD, *PIMG2HEAD; - -#ifndef FLASH_SECTOR_SIZE -#define FLASH_SECTOR_SIZE 4096 -#endif -//------------------------------------------------------------------------- -// Function declarations -static void RtlBootToFlash(void); // image1 -static void RtlBoot1ToSram(void); // image1 -static void RtlBoot2ToSram(void); // image1 -static void RtlBoot3ToSram(void); // image1 -static void RtlBoot4ToSram(void); // image1 -//static void EnterImage15(void); // image1 -//static void JtagOn(void); // image1 - -extern _LONG_CALL_ void HalCpuClkConfig(unsigned char CpuType); -extern _LONG_CALL_ void VectorTableInitRtl8195A(uint32_t StackP); -extern _LONG_CALL_ void HalInitPlatformLogUartV02(void); -extern _LONG_CALL_ void HalInitPlatformTimerV02(void); -//extern _LONG_CALL_ void DramInit_rom(IN DRAM_DEVICE_INFO *DramInfo); -//extern _LONG_CALL_ uint32_t SdrCalibration_rom(void); -extern _LONG_CALL_ int SdrControllerInit_rom(PDRAM_DEVICE_INFO pDramInfo); -extern _LONG_CALL_ uint32_t SpicCmpDataForCalibrationRtl8195A(void); // compare read_data and golden_data -extern _LONG_CALL_ void SpicWaitWipDoneRtl8195A(SPIC_INIT_PARA SpicInitPara); // wait spi-flash status register[0] = 0 -extern _LONG_CALL_ void SpicLoadInitParaFromClockRtl8195A(uint8_t CpuClkMode, uint8_t BaudRate, PSPIC_INIT_PARA pSpicInitPara); -extern _LONG_CALL_ void RtlConsolInit(IN uint32_t Boot, IN uint32_t TBLSz, IN void *pTBL); - -//#pragma arm section code = ".boot.text"; -//#pragma arm section rodata = ".boot.rodata", rwdata = ".boot.data", zidata = ".boot.bss"; - -typedef void (*START_FUNC)(void); - -//------------------------------------------------------------------------- -/* Start table: */ -START_RAM_FUN_SECTION RAM_FUNCTION_START_TABLE __ram_start_table_start__ = { - RtlBootToFlash + 1, // StartFun(), Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x80000000 ) - RtlBoot1ToSram + 1, // PatchWAKE(), Run if ( v40000210 & 0x20000000 ) - RtlBoot2ToSram + 1, // PatchFun0(), Run if ( v40000210 & 0x10000000 ) - RtlBoot3ToSram + 1, // PatchFun1(), Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x8000000 ) - RtlBoot4ToSram + 1 };// PatchFun2(), Run for Init console, if ( v40000210 & 0x4000000 ) -//test RtlBootToFlash + 1 };// PatchFun2(), Run for Init console, if ( v40000210 & 0x4000000 ) - -//------------------------------------------------------------------------- -/* Set Debug Flags */ -static void BOOT_RAM_TEXT_SECTION SetDebugFlgs() { -#if CONFIG_DEBUG_LOG > 3 - CfgSysDebugWarn = -1; - CfgSysDebugInfo = -1; - CfgSysDebugErr = -1; - ConfigDebugWarn = -1; - ConfigDebugInfo = -1; - ConfigDebugErr = -1; -#elif CONFIG_DEBUG_LOG > 1 - CfgSysDebugWarn = -1; -// CfgSysDebugInfo = 0; - CfgSysDebugErr = -1; - ConfigDebugWarn = -1; -// ConfigDebugInfo = 0; - ConfigDebugErr = -1; -#elif CONFIG_DEBUG_LOG > 0 -// CfgSysDebugWarn = 0; -// CfgSysDebugInfo = 0; - CfgSysDebugErr = -1; -// ConfigDebugWarn = 0; -// ConfigDebugInfo = 0; - ConfigDebugErr = -1; -#else -// CfgSysDebugWarn = 0; -// CfgSysDebugInfo = 0; -// CfgSysDebugErr = 0; -// ConfigDebugWarn = 0; -// ConfigDebugInfo = 0; -// ConfigDebugErr = 0; -#endif -} - -/* JTAG On */ -static void BOOT_RAM_TEXT_SECTION JtagOn(void) { - ACTCK_VENDOR_CCTRL(ON); - SLPCK_VENDOR_CCTRL(ON); - HalPinCtrlRtl8195A(JTAG, 0, 1); -} - -/* GetChipId() */ -static uint8 INFRA_START_SECTION _Get_ChipId() { - uint8 ChipId = CHIP_ID_8710AF; - if (HALEFUSEOneByteReadROM(HAL_SYS_CTRL_READ32(REG_SYS_EFUSE_CTRL), 0xF8, - &ChipId, L25EOUTVOLTAGE) != 1) - DBG_8195A("Get Chip ID Failed\r"); - return ChipId; -} - -/* - * 16 bytes FIFO ... 16*11/38400 = 0.004583 sec - * (0.005/5)*166666666 = 166666.666 Tcpu - */ -static void INFRA_START_SECTION loguart_wait_tx_fifo_empty(void) { - if (HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & BIT_SOC_LOG_UART_EN) { - int x = 16384; - while ((!(HAL_READ8(LOG_UART_REG_BASE, 0x14) & BIT6)) && x--) - ; // иначе глючит LogUART, если переключение CLK приходится на вывод символов ! - } -} - -extern SPIC_INIT_PARA SpicInitParaAllClk[SpicMaxMode][CPU_CLK_TYPE_NO]; // 100021ec [144=0x90] -static uint32 InitTabParaAllClk[3 * CPU_CLK_TYPE_NO] = { - 0x01310102, // BaudRate = 2, RdDummyCyle = 2, DelayLine = 63, SIO - 0x03310101, // 0201 - 40t, 0101 - 39t, 0102 - 72t, 0103 - 104t - 0x05310001, // 39t - 0x07310001, - 0x09310001, - 0x0B310001, - - 0x11311301, // BaudRate = 1, RdDummyCyle = 19, DelayLine = 63, DIO - 0x13311201, // 1201 - 36t - 0x15311101, // 1101 - 35t - 0x17311101, - 0x19311101, - 0x1B311101, - - 0x21311301, // BaudRate = 1, RdDummyCyle = 19, DelayLine = 63, DIO - 0x23311201, // 1201 - 36t - 0x25311101, // 1101 - 35t - 0x27311101, - 0x29311101, - 0x2B311101, -}; - -struct spic_table_flash_type { - uint8 cmd[12]; - uint8 strlr2; - uint8 fbaud; - uint8 addrlen; - uint8 fsize; - uint32 contrl; - uint16 validcmd[3]; - uint8 manufacturerid; - uint8 memorytype; -}; - -//PSPIC_INIT_PARA pSpicInitPara; - -struct spic_table_flash_type spic_table_flash = { - { // for FLASH MX25L8006E/1606E - FLASH_CMD_FREAD, // REG_SPIC_READ_FAST_SINGLE 0x400060E0 0x0B - FLASH_CMD_DREAD, // REG_SPIC_READ_DUAL_DATA 0x400060E4 0x3B - FLASH_CMD_DREAD, // REG_SPIC_READ_DUAL_ADDR_DATA 0x400060E8 0x3B ? - FLASH_CMD_QREAD, // REG_SPIC_READ_QUAD_DATA 0x400060EC 0x6B - FLASH_CMD_4READ, // REG_SPIC_READ_QUAD_ADDR_DATA 0x400060F0 0xEB ? - FLASH_CMD_PP, // REG_SPIC_WRITE_SIGNLE 0x400060F4 0x02 - FLASH_CMD_DPP, // REG_SPIC_WRITE_DUAL_DATA 0x400060F8 0xA2 - FLASH_CMD_DPP, // REG_SPIC_WRITE_DUAL_ADDR_DATA 0x400060FC 0xA2 ? - FLASH_CMD_QPP, // REG_SPIC_WRITE_QUAD_DATA 0x40006100 0x32 - FLASH_CMD_4PP, // REG_SPIC_WRITE_QUAD_ADDR_DATA 0x40006104 0x38 - FLASH_CMD_WREN, // REG_SPIC_WRITE_ENABLE 0x40006108 0x06 - FLASH_CMD_RDSR // REG_SPIC_READ_STATUS 0x4000610C 0x05 - }, - BIT_FIFO_ENTRY(5) | BIT_SO_DUM, // REG_SPIC_CTRLR2 0x40006110 0x51 - BIT_FSCKDV(1), // REG_SPIC_FBAUDR 0x40006114 0x01 - BIT_ADDR_PHASE_LENGTH(3), // REG_SPIC_ADDR_LENGTH 0x40006118 0x03 - BIT_FLASE_SIZE(0x0F), // REG_SPIC_FLASE_SIZE 0x40006124 0x0E ? - BIT_CS_H_WR_DUM_LEN(2)| BIT_AUTO_ADDR__LENGTH(3) | BIT_RD_DUMMY_LENGTH(0x0), // REG_SPIC_AUTO_LENGTH 0x4000611C 0x20030001 ? - { - BIT_WR_BLOCKING, // REG_SPIC_VALID_CMD 0x40006120 0x200 SpicOneBitMode - BIT_WR_BLOCKING | BIT_RD_DUAL_I, // REG_SPIC_VALID_CMD 0x40006120 0x200 SpicOneBitMode - BIT_WR_BLOCKING | BIT_RD_QUAD_O, // REG_SPIC_VALID_CMD 0x40006120 0x200 SpicOneBitMode - }, - 0xC2, 0x20 // MX25L8006/MX25L1606 -}; - -static void BOOT_RAM_TEXT_SECTION InitSpicBdRDCDL(PSPIC_INIT_PARA pspic) { - // Disable SPI_FLASH User Mode -// HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - DBG_8195A("%p = %p, %p\n", 0x40006000+REG_SPIC_AUTO_LENGTH, HAL_SPI_READ32(REG_SPIC_BAUDR), pspic->RdDummyCyle); - HAL_SPI_WRITE32(REG_SPIC_AUTO_LENGTH, (HAL_SPI_READ32(REG_SPIC_AUTO_LENGTH) & 0xFFFF0000) | pspic->RdDummyCyle); -// DBG_8195A("%p = %p, %p\n", 0x40006000+REG_SPIC_SER, HAL_SPI_READ32(REG_SPIC_SER), BIT_SER); -// HAL_SPI_WRITE32(REG_SPIC_SER, BIT_SER); - - FLASH_DDL_FCTRL(pspic->DelayLine); // SPI_DLY_CTRL_ADDR [7:0] - -// DBG_8195A("%p = %p, %p\n", 0x40006000 + REG_SPIC_CTRLR1, HAL_SPI_READ32(REG_SPIC_CTRLR1), BIT_NDF(4)); -// HAL_SPI_WRITE32(REG_SPIC_CTRLR1, BIT_NDF(4)); - - - uint32 regval = HAL_SPI_READ32(REG_SPIC_CTRLR0) - & (~(BIT_CMD_CH(3) | BIT_DATA_CH(3) | BIT_ADDR_CH(3))); - - if(pspic->Mode.BitMode == SpicDualBitMode) { - regval |= BIT_ADDR_CH(1) | BIT_DATA_CH(1); - } - else if(pspic->Mode.BitMode == SpicQuadBitMode) { - regval |= BIT_ADDR_CH(2) | BIT_DATA_CH(2); - } - DBG_8195A("%p = %p, %p\n", 0x40006000+REG_SPIC_CTRLR0, HAL_SPI_READ32(REG_SPIC_CTRLR0), regval); - HAL_SPI_WRITE32(REG_SPIC_CTRLR0, regval); - - - DBG_8195A("%p = %p, %p\n", 0x40006000+REG_SPIC_VALID_CMD, HAL_SPI_READ32(REG_SPIC_VALID_CMD), spic_table_flash.validcmd[pspic->Mode.BitMode]); - HAL_SPI_WRITE32(REG_SPIC_VALID_CMD, spic_table_flash.validcmd[pspic->Mode.BitMode]); - - DBG_8195A("%p = %p, %p\n", 0x40006000+REG_SPIC_BAUDR, HAL_SPI_READ32(REG_SPIC_BAUDR), pspic->BaudRate); - HAL_SPI_WRITE32(REG_SPIC_BAUDR, pspic->BaudRate); // & 0x00000FFF)); - - // Enable SPI_FLASH User Mode -// HAL_SPI_WRITE32(REG_SPIC_SSIENR, BIT_SPIC_EN); -// SpicWaitWipDoneRtl8195A(SpicInitParaAllClk[1][0]); -} - -void BOOT_RAM_TEXT_SECTION InitSpicFlashType(struct spic_table_flash_type *ptable_flash) { - uint8_t * ptrb = &ptable_flash->cmd; - volatile uint32_t * ptrreg = (volatile uint32_t *)(SPI_FLASH_CTRL_BASE + REG_SPIC_READ_FAST_SINGLE);// 0x400060E0 - do { - DBG_8195A("%p = %p, %p\n", ptrreg, *ptrreg, *ptrb); - *ptrreg++ = *ptrb++; - } while(ptrb < (uint8_t *)(&ptable_flash->fsize)); - DBG_8195A("%p = %p, %p\n", ptrreg, *ptrreg, ptable_flash->contrl); - ptrreg[0] = ptable_flash->contrl; - DBG_8195A("%p = %p, %p\n", &ptrreg[1], ptrreg[1], ptable_flash->validcmd[SpicOneBitMode]); - ptrreg[1] = ptable_flash->validcmd[SpicOneBitMode]; - DBG_8195A("%p = %p, %p\n", &ptrreg[2], ptrreg[2], ptable_flash->fsize); - ptrreg[2] = ptable_flash->fsize; -} - -static int BOOT_RAM_TEXT_SECTION InitSpic(uint8 SpicBitMode) { -#if 0 -// *(uint32 *)(&SpicInitParaAllClk[0][0].BaudRate) = 0x1311301; // patch - SpicInitRtl8195AV02(CPU_CLK_TYPE_NO - 1 - ((HAL_SYS_CTRL_READ32(REG_SYS_CLK_CTRL1) >> 4) & 7), - SpicDualBitMode); -#else -// SpicInitRtl8195AV02(1, SpicDualBitMode); // SpicOneBitMode); // 5-168, 4-136, 3-104, 2-72, 1- -// InitSpicBdRDCDL(&SpicInitParaAllClk[1][0]); -// SpicLoadInitParaFromClockRtl8195A(0, 1, &SpicInitParaAllClk[1][0]); -#endif - - _memset(SpicInitParaAllClk, 0, sizeof(SpicInitParaAllClk)); - uint32 * ptr = InitTabParaAllClk; - uint8 x; - for(x = 0; x < SpicMaxMode; x++) { - *(uint32 *)&SpicInitParaAllClk[SpicOneBitMode][x].BaudRate = ptr[0]; - *(uint32 *)&SpicInitParaAllClk[SpicDualBitMode][x].BaudRate = ptr[CPU_CLK_TYPE_NO]; - *(uint32 *)&SpicInitParaAllClk[SpicQuadBitMode][x].BaudRate = ptr[CPU_CLK_TYPE_NO + CPU_CLK_TYPE_NO]; - ptr++; - } - ACTCK_FLASH_CCTRL(1); - SLPCK_FLASH_CCTRL(1); - // Disable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - HalPinCtrlRtl8195A(SPI_FLASH, 0, 1); - InitSpicFlashType(&spic_table_flash); - InitSpicBdRDCDL(&SpicInitParaAllClk[SpicBitMode][((HAL_SYS_CTRL_READ32(REG_SYS_CLK_CTRL1) >> 4) & 7)]); -#if 0 // 72 - HAL_SPI_WRITE32(REG_SPIC_AUTO_LENGTH, 0x20030002); - HAL_SPI_WRITE32(REG_SPIC_BAUDR, 2); - HAL_SPI_WRITE32(REG_SPIC_VALID_CMD, BIT_WR_BLOCKING); -#else // 36 -// HAL_SPI_WRITE32(REG_SPIC_AUTO_LENGTH, 0x20030013); -// HAL_SPI_WRITE32(REG_SPIC_BAUDR, 1); -// HAL_SPI_WRITE32(REG_SPIC_VALID_CMD, BIT_WR_BLOCKING | BIT_RD_DUAL_I); -#endif - HAL_SPI_WRITE32(REG_SPIC_SER, BIT_SER); - SPI_FLASH_PIN_FCTRL(ON); - - // Enable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, BIT_SPIC_EN); - - -// if(!SpicCmpDataForCalibrationRtl8195A()) { - for(int i = 1; i < 4; i++) { - for(int x = 0; x < 63; x++) { - // Disable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - HAL_SPI_WRITE32(REG_SPIC_AUTO_LENGTH, 0x20030000 + x); - HAL_SPI_WRITE32(REG_SPIC_BAUDR, i); - // Enable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, BIT_SPIC_EN); - FLASH_DDL_FCTRL(49); // SPI_DLY_CTRL_ADDR [7:0] -// HAL_SPI_WRITE32(REG_SPIC_FLUSH_FIFO, 1); - if(SpicCmpDataForCalibrationRtl8195A()) { - DiagPrintf("Spic init %d:%d:49\n", i, x); - return 1; - }; - }; - }; - return 0; -// }; -// return 1; -} - - -/* SYSPlatformInit */ -static void INFRA_START_SECTION SYSPlatformInit(void) { - __asm__ __volatile__ ("cpsid f\n"); - JtagOn(); - SetDebugFlgs(); - //----- SYS Init - HAL_SYS_CTRL_WRITE32(REG_SYS_EFUSE_SYSCFG0, - (HAL_SYS_CTRL_READ32(REG_SYS_EFUSE_SYSCFG0) & (~(BIT_MASK_SYS_EEROM_LDO_PAR_07_04 << BIT_SHIFT_SYS_EEROM_LDO_PAR_07_04))) | BIT_SYS_EEROM_LDO_PAR_07_04(6)); // & 0xF0FFFFFF | 0x6000000 - HAL_SYS_CTRL_WRITE32(REG_SYS_XTAL_CTRL1, - (HAL_SYS_CTRL_READ32(REG_SYS_XTAL_CTRL1) & (~(BIT_MASK_SYS_XTAL_DRV_RF1 << BIT_SHIFT_SYS_XTAL_DRV_RF1))) | BIT_SYS_XTAL_DRV_RF1(1)); // & 0xFFFFFFE7 | 8; - //----- SDIO_Device_Off - HAL_PERI_ON_WRITE32(REG_PESOC_HCI_CLK_CTRL0, - HAL_PERI_ON_READ32(REG_PESOC_HCI_CLK_CTRL0) & (~BIT_SOC_ACTCK_SDIO_DEV_EN)); - HAL_PERI_ON_WRITE32(REG_SOC_HCI_COM_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_HCI_COM_FUNC_EN) & (~(BIT_SOC_HCI_SDIOD_ON_EN | BIT_SOC_HCI_SDIOD_OFF_EN))); - HAL_PERI_ON_WRITE32(REG_HCI_PINMUX_CTRL, - HAL_PERI_ON_READ32(REG_HCI_PINMUX_CTRL) & (~(BIT_HCI_SDIOD_PIN_EN))); - //----- GPIO Adapter - extern HAL_GPIO_ADAPTER gBoot_Gpio_Adapter; - _memset(&gBoot_Gpio_Adapter, 0, sizeof(gBoot_Gpio_Adapter)); - _pHAL_Gpio_Adapter = &gBoot_Gpio_Adapter; -#ifdef DEFAULT_BOOT_CLK_CPU - //----- CLK CPU - loguart_wait_tx_fifo_empty(); // иначе глючит LogUART, если переключение CLK приходится на вывод символов ! -#if DEFAULT_BOOT_CPU_CLOCK_SEL_DIV5_3 - // 6 - 200000000 Hz, 7 - 10000000 Hz, 8 - 50000000 Hz, 9 - 25000000 Hz, 10 - 12500000 Hz, 11 - 4000000 Hz - HalCpuClkConfig(DEFAULT_BOOT_CPU_CLOCK_SEL_VALUE); - *((int *)(SYSTEM_CTRL_BASE+REG_SYS_SYSPLL_CTRL1)) |= (1<<17);// REG_SYS_SYSPLL_CTRL1 |= BIT_SYS_SYSPLL_DIV5_3 -#else - // 0 - 166666666 Hz, 1 - 83333333 Hz, 2 - 41666666 Hz, 3 - 20833333 Hz, 4 - 10416666 Hz, 5 - 4000000 Hz - *((int *) (SYSTEM_CTRL_BASE + REG_SYS_SYSPLL_CTRL1)) &= ~(1 << 17); // REG_SYS_SYSPLL_CTRL1 &= ~BIT_SYS_SYSPLL_DIV5_3 - HalCpuClkConfig(DEFAULT_BOOT_CPU_CLOCK_SEL_VALUE); -#endif // CPU_CLOCK_SEL_DIV5_3 -#endif // DEFAULT_CLK_CPU - //----- System - VectorTableInitRtl8195A(STACK_TOP); // 0x1FFFFFFC - HalInitPlatformLogUartV02(); // Show ""... :( - HalInitPlatformTimerV02(); - __asm__ __volatile__ ("cpsie f\n"); -} - -/*------------------------------------------------------------------------------------- - Копирует данные из области align(4) (flash, registers, ...) в область align(1) (ram) - --------------------------------------------------------------------------------------*/ -static unsigned int BOOT_RAM_TEXT_SECTION flashcpy(unsigned int faddr, - void *dist, unsigned int size) { - union { - unsigned char uc[4]; - unsigned int ud; - } tmp; - if (faddr < SPI_FLASH_BASE) - faddr += SPI_FLASH_BASE; - unsigned char * pd = (unsigned char *) dist; - unsigned int *p = (unsigned int *) ((unsigned int) faddr & (~3)); - unsigned int xlen = (unsigned int) faddr & 3; - unsigned int len = size; - - if (xlen) { - tmp.ud = *p++; - while (len) { - len--; - *pd++ = tmp.uc[xlen++]; - if (xlen & 4) - break; - }; - }; - xlen = len >> 2; - while (xlen) { - tmp.ud = *p++; - *pd++ = tmp.uc[0]; - *pd++ = tmp.uc[1]; - *pd++ = tmp.uc[2]; - *pd++ = tmp.uc[3]; - xlen--; - }; - if (len & 3) { - tmp.ud = *p; - pd[0] = tmp.uc[0]; - if (len & 2) { - pd[1] = tmp.uc[1]; - if (len & 1) { - pd[2] = tmp.uc[2]; - }; - }; - }; - return size; -} - -enum { - SEG_ID_ERR, - SEG_ID_SRAM, - SEG_ID_TCM, - SEG_ID_SDRAM, - SEG_ID_SOC, - SEG_ID_FLASH, - SEG_ID_CPU, - SEG_ID_ROM, - SEG_ID_MAX -} SEG_ID; - -static const char * const txt_tab_seg[] = { - "UNK", // 0 - "SRAM", // 1 - "TCM", // 2 - "SDRAM", // 3 - "SOC", // 4 - "FLASH", // 5 - "CPU", // 6 - "ROM" // 7 - }; - -static const uint32 tab_seg_def[] = { 0x10000000, 0x10070000, 0x1fff0000, - 0x20000000, 0x30000000, 0x30200000, 0x40000000, 0x40800000, 0x98000000, - 0xA0000000, 0xE0000000, 0xE0010000, 0x00000000, 0x00050000 }; - -static uint32 BOOT_RAM_TEXT_SECTION get_seg_id(uint32 addr, int32 size) { - uint32 ret = SEG_ID_ERR; - uint32 * ptr = &tab_seg_def; - if (size > 0) { - do { - ret++; - if (addr >= ptr[0] && addr + size <= ptr[1]) { - return ret; - }; - ptr += 2; - } while (ret < SEG_ID_MAX); - }; - return 0; -} - -static uint32 BOOT_RAM_TEXT_SECTION load_img2_head(uint32 faddr, PIMG2HEAD hdr) { - flashcpy(faddr, hdr, sizeof(IMG2HEAD)); - uint32 ret = get_seg_id(hdr->seg.ldaddr, hdr->seg.size); - if (hdr->sign[1] == IMG_SIGN2_RUN) { - if (hdr->sign[0] == IMG_SIGN1_RUN) { - ret |= 1 << 9; - } else if (hdr->sign[0] == IMG_SIGN1_SWP) { - ret |= 1 << 8; - }; - } - if (*(uint32_t *) (&hdr->rtkwin) == IMG2_SIGN_DW1_TXT) { - ret |= 1 << 10; - }; - return ret; -} - -static uint32 BOOT_RAM_TEXT_SECTION load_segs(uint32 faddr, PIMG2HEAD hdr, - uint8 flgload) { - uint32 fnextaddr = faddr; - uint8 segnum = 0; - while (1) { - uint32 seg_id = get_seg_id(hdr->seg.ldaddr, hdr->seg.size); - if (flgload - && (seg_id == SEG_ID_SRAM || seg_id == SEG_ID_TCM - || seg_id == SEG_ID_SDRAM)) { -#if CONFIG_DEBUG_LOG > 1 - DBG_8195A("Load Flash seg%d: 0x%08x -> %s: 0x%08x, size: %d\n", - segnum, faddr, txt_tab_seg[seg_id], hdr->seg.ldaddr, - hdr->seg.size); -#endif - fnextaddr += flashcpy(fnextaddr, hdr->seg.ldaddr, hdr->seg.size); - } else if (seg_id) { -#if CONFIG_DEBUG_LOG > 2 - DBG_8195A("Skip Flash seg%d: 0x%08x -> %s: 0x%08x, size: %d\n", segnum, - faddr, txt_tab_seg[seg_id], hdr->seg.ldaddr, hdr->seg.size); -#endif - fnextaddr += hdr->seg.size; - } else { - break; - } - fnextaddr += flashcpy(fnextaddr, &hdr->seg, sizeof(IMGSEGHEAD)); - segnum++; - } - return fnextaddr; -} - -/*------------------------------------------------------------------------------------- - * 0 - default image (config data + 0), 1 - image N1, 2 - image N2, ... - --------------------------------------------------------------------------------------*/ -static int BOOT_RAM_TEXT_SECTION loadUserImges(int imgnum) { - IMG2HEAD hdr; - int imagenum = 1; - uint32 faddr = 0xb000; // start image2 in flash - DBG_8195A("Selected Image %d.\n", imgnum); - - while (1) { - faddr = (faddr + FLASH_SECTOR_SIZE - 1) & (~(FLASH_SECTOR_SIZE - 1)); - uint32 img_id = load_img2_head(faddr, &hdr); - if ((img_id >> 8) > 4 || (uint8) img_id != 0) { - faddr = load_segs(faddr + 0x10, &hdr.seg, imagenum == imgnum); - if (imagenum == imgnum) { -// DBG_8195A("Image%d: %s\n", imgnum, hdr.name); - break; - } - imagenum++; - } else if (imagenum) { - DBG_8195A("No Image%d! Trying Image0...\n", imgnum); - // пробуем загрузить image по умолчанию, по записи в секторе установок - flashcpy(FLASH_SYSTEM_DATA_ADDR, &faddr, sizeof(faddr)); - if (faddr < 0x8000000) - faddr += SPI_FLASH_BASE; - if (get_seg_id(faddr, 0x100) == SEG_ID_FLASH) { - imagenum = 0; - imgnum = 0; - } else { - DBG_8195A("No Image0!\n"); - imagenum = -1; - break; - }; - } else { - imagenum = -1; - break; - } - }; - return imagenum; -} - -//----- IsForceLoadDefaultImg2 -static uint8 BOOT_RAM_TEXT_SECTION IsForceLoadDefaultImg2(void) { - uint8 gpio_pin[4]; - HAL_GPIO_PIN GPIO_Pin; - HAL_GPIO_PIN_STATE flg; - int result = 0; - flashcpy(FLASH_SYSTEM_DATA_ADDR + 0x08, &gpio_pin, sizeof(gpio_pin)); // config data + 8 -// _pHAL_Gpio_Adapter = &gBoot_Gpio_Adapter; - for (int i = 1; i; i--) { - uint8 x = gpio_pin[i]; - result <<= 1; - if (x != 0xff) { - GPIO_Pin.pin_name = HAL_GPIO_GetIPPinName_8195a(x & 0x7F); - if (x & 0x80) { - GPIO_Pin.pin_mode = DIN_PULL_LOW; - flg = GPIO_PIN_HIGH; - } else { - GPIO_Pin.pin_mode = DIN_PULL_HIGH; - flg = GPIO_PIN_LOW; - } - HAL_GPIO_Init_8195a(&GPIO_Pin); - if (HAL_GPIO_ReadPin_8195a(&GPIO_Pin) == flg) { - result |= 1; - } - HAL_GPIO_DeInit_8195a(&GPIO_Pin); - } - } -// _pHAL_Gpio_Adapter->IrqHandle.IrqFun = NULL; - return result; -} -/* RTL Console ROM */ -static void BOOT_RAM_TEXT_SECTION RtlConsolRam(void) { -// DiagPrintf("\r\nRTL Console ROM\r\n"); -// RtlConsolInit(ROM_STAGE, (uint32_t) 6, (void*) &UartLogRomCmdTable); - pUartLogCtl->RevdNo = UART_LOG_HISTORY_LEN; - pUartLogCtl->BootRdy = 1; - pUartLogCtl->pTmpLogBuf->UARTLogBuf[0] = '?'; - pUartLogCtl->pTmpLogBuf->BufCount = 1; - pUartLogCtl->ExecuteCmd = 1; - RtlConsolTaskRom(pUartLogCtl); -} - -/* Enter Image 1.5 */ -static void BOOT_RAM_TEXT_SECTION EnterImage15(int flg) { - - if (flg) - _memset(&__rom_bss_start__, 0, &__rom_bss_end__ - &__rom_bss_start__); - - SYSPlatformInit(); - - if (!flg) - DBG_8195A("\r===== Enter FLASH-Boot ====\n"); - else - DBG_8195A("\r===== Enter SRAM-Boot %d ====\n", flg); - -#if CONFIG_DEBUG_LOG > 1 - DBG_8195A("CPU CLK: %d Hz, SOC FUNC EN: %p\r\n", HalGetCpuClk(), - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN)); -#endif - uint8 ChipId = _Get_ChipId(); - if (ChipId < CHIP_ID_8195AM) { - //----- SDRAM Off - SDR_PIN_FCTRL(OFF); - LDO25M_CTRL(OFF); - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT(21)); // Flag SDRAM Off - } else { - //----- SDRAM On - LDO25M_CTRL(ON); - HAL_SYS_CTRL_WRITE32(REG_SYS_REGU_CTRL0, - (HAL_SYS_CTRL_READ32(REG_SYS_REGU_CTRL0) & 0xfffff) | BIT_SYS_REGU_LDO25M_ADJ(0x0e)); - SDR_PIN_FCTRL(ON); - }; - InitSpic(SpicDualBitMode); // SpicOneBitMode) - if (!SpicCmpDataForCalibrationRtl8195A()) { - DBG_8195A("Error Init Spic DIO!\n"); - RtlConsolRam(); - } - if ((HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & BIT(21)) == 0) { // уже загружена? -// extern DRAM_DEVICE_INFO SdrDramInfo_rom; // 50 MHz - if (!SdrControllerInit_rom(&SdrDramInfo)) { // 100 MHz - DBG_8195A("SDR Controller Init fail!\n"); - RtlConsolRam(); - } -#if 0 // Test SDRAM - else { - uint32 *ptr = SDR_SDRAM_BASE; - uint32 tt = 0x55AA55AA; - for (int i = 0; i < 512 * 1024; i++) { - ptr[i] = tt++; - }; - tt = 0x55AA55AA; - for (int i = 0; i < 512 * 1024; i++) { - if (ptr[i] != tt) { - DBG_8195A("SDR err %p %p != %p!\n", &ptr[i], ptr[i], tt); - RtlConsolRam(); - } - tt++; - }; - DBG_8195A("SDR tst end\n"); - }; -#endif // test - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT(21)); - }; - if (!flg) - loadUserImges(IsForceLoadDefaultImg2() + 1); - if (_strcmp((const char *) &__image2_validate_code__, IMG2_SIGN_TXT)) { - DBG_MISC_ERR("Invalid Image Signature!\n"); - RtlConsolRam(); - } - DBG_8195A("Img Sign: %s, Go @ 0x%08x\r\n", &__image2_validate_code__, - __image2_entry_func__); - __image2_entry_func__(); -} - -/* RtlBootToSram */ -static void BOOT_RAM_TEXT_SECTION RtlBoot1ToSram(void) { - EnterImage15(1); -} -/* RtlBootToSram */ -static void BOOT_RAM_TEXT_SECTION RtlBoot2ToSram(void) { - EnterImage15(2); -} -/* RtlBootToSram */ -static void BOOT_RAM_TEXT_SECTION RtlBoot3ToSram(void) { - EnterImage15(3); -} -/* RtlBootToSram */ -static void BOOT_RAM_TEXT_SECTION RtlBoot4ToSram(void) { - EnterImage15(4); -} - -static void BOOT_RAM_TEXT_SECTION RtlBootToFlash(void) { - EnterImage15(0); -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/startup.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/startup.c deleted file mode 100644 index 72a4676..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/startup.c +++ /dev/null @@ -1,279 +0,0 @@ -/* - * StartUp USDK v0.2 (19/10/2017) - * Created on: 02/03/2017 - * Author: pvvx - */ - -#include "rtl8195a.h" -#include "diag.h" -#include "hal_spi_flash.h" -#include "hal_api.h" -#include "hal_platform.h" -#include "diag.h" -#include "hal_diag.h" -#include "rtl8195a_uart.h" -#include "rtl8195a/rtl8195a_peri_on.h" -#include "hal_peri_on.h" -#include "rtl_bios_data.h" -#include "wifi_conf.h" -#include "rtl_consol.h" - -//------------------------------------------------------------------------- -// Function declarations -void InfraStart(void); -//extern void HalWdgIntrHandle(void); -extern void xPortPendSVHandler(void); -extern void xPortSysTickHandler(void); -extern void vPortSVCHandler(void); -extern void rtl_libc_init(void); -extern _LONG_CALL_ void HalCpuClkConfig(unsigned char CpuType); -extern void PSHalInitPlatformLogUart(void); -extern _LONG_CALL_ void UartLogCmdExecute(PUART_LOG_CTL pUartLogCtlExe); -extern void HalReInitPlatformTimer(void); -extern void SystemCoreClockUpdate (void); -extern void En32KCalibration(void); -extern void SdrCtrlInit(void); -extern void InitSoCPM(void); -extern uint32_t SdrControllerInit(void); -//extern void ShowRamBuildInfo(void); // app_start.c: void ShowRamBuildInfo(void) -//void HalNMIHandler_Patch(void); -void SDIO_Device_Off(void); -//void VectorTableOverrideRtl8195A(uint32_t StackP); -void SYSPlatformInit(void); - -#define FIX_SDR_CALIBRATION // for speed :) -//------------------------------------------------------------------------- -// Data declarations -extern uint8_t __bss_start__, __bss_end__; -extern const unsigned char cus_sig[32]; // images name -//extern HAL_TIMER_OP HalTimerOp; - -IMAGE2_START_RAM_FUN_SECTION RAM_START_FUNCTION gImage2EntryFun0 = - { InfraStart + 1 }; -#ifdef CONFIG_SDR_EN -#ifdef FIX_SDR_CALIBRATION // for speed :) -#include "rtl8195a/rtl8195a_sdr.h" -static void sdr_init(void) { - HAL_SYS_CTRL_WRITE32(REG_SYS_REGU_CTRL0, - ((HAL_SYS_CTRL_READ32(REG_SYS_REGU_CTRL0) & 0xfffff) | BIT_SYS_REGU_LDO25M_ADJ(0x03))); // ROM: BIT_SYS_REGU_LDO25M_ADJ(0x0e)? HAL RAM BIT_SYS_REGU_LDO25M_ADJ(0x03) - LDO25M_CTRL(ON); - SRAM_MUX_CFG(0x2); - SDR_CLK_SEL(SDR_CLOCK_SEL_VALUE); // REG_PESOC_CLK_SEL - HAL_PERI_ON_WRITE32(REG_GPIO_PULL_CTRL4, 0); - ACTCK_SDR_CCTRL(ON); - SLPCK_SDR_CCTRL(ON); - HalPinCtrlRtl8195A(SDR, 0, ON); // SDR_PIN_FCTRL(ON); - MEM_CTRL_FCTRL(ON); -// HalDelayUs(1000); - // read calibration data from system data FLASH_SDRC_PARA_BASE - union { uint8_t b[8]; uint16_t s[4]; uint32_t l[2]; uint64_t d;} value; - uint32_t faddr = SPI_FLASH_BASE + FLASH_SDRC_PARA_BASE + CPU_CLOCK_SEL_VALUE*8 + CPU_CLOCK_SEL_DIV5_3*8*8; // step 8 in FLASH_SDRC_PARA_BASE[64 + 64 bytes] - value.d = *((volatile uint64_t *)faddr); - if(value.s[0] == 0xFE01 && (value.b[4]^value.b[5]) == 0xFF && (value.b[6]^value.b[7]) == 0xFF) { - DBG_8195A("SDR flash calibration [%08x]: %02x-%02x ", faddr, value.b[4], value.b[6]); - } else { - value.b[4] = 0; // TapCnt -#if CONFIG_CPU_CLK < 6 - value.b[6] = 0x11; // RdPipe -#elif CONFIG_CPU_CLK == 7 - value.b[6] = 0x23; // RdPipe -#else - value.b[6] = 0x19; // RdPipe -#endif - DBG_8195A("Use fix SDR calibration: %02x-%02x ", value.b[4], value.b[6]); - } - // set all_mode _idle - HAL_SDR_WRITE32(REG_SDR_CSR, 0x700); - // WRAP_MISC setting - HAL_SDR_WRITE32(REG_SDR_MISC, 0x00000001); - // PCTL setting - HAL_SDR_WRITE32(REG_SDR_DCR, 0x00000008); - HAL_SDR_WRITE32(REG_SDR_IOCR, (uint32_t)value.b[4] << PCTL_IOCR_RD_PIPE_BFO); - HAL_SDR_WRITE32(REG_SDR_EMR2, 0x00000000); - HAL_SDR_WRITE32(REG_SDR_EMR1, 0x00000006); - HAL_SDR_WRITE32(REG_SDR_MR, 0x00000022); - HAL_SDR_WRITE32(REG_SDR_DRR, 0x09030e07); - HAL_SDR_WRITE32(REG_SDR_TPR0, 0x00002652); - HAL_SDR_WRITE32(REG_SDR_TPR1, 0x00068873); - HAL_SDR_WRITE32(REG_SDR_TPR2, 0x00000042); - // start to init - HAL_SDR_WRITE32(REG_SDR_CCR, 0x01); - while ((HAL_SDR_READ32(REG_SDR_CCR) & 0x1) == 0x0) - DBG_8195A("."); - // enter mem_mode - HAL_SDR_WRITE32(REG_SDR_CSR, 0x600); - SDR_DDL_FCTRL((uint32_t)value.b[6]); - DBG_8195A(" ok\n"); -} -#endif // FIX_SDR_CALIBRATION -#endif // CONFIG_SDR_EN -/* -//----- HalNMIHandler_Patch -void HalNMIHandler_Patch(void) { - DBG_8195A_HAL("%s:NMI Error!\n", __func__); - if ( HAL_READ32(VENDOR_REG_BASE, 0) < 0) - HalWdgIntrHandle(); // ROM: HalWdgIntrHandle = 0x3485; -} -*/ - -/* - * 16 bytes FIFO ... 16*11/38400 = 0.004583 sec - * (0.005/5)*166666666 = 166666.666 - */ -static void INFRA_START_SECTION loguart_wait_tx_fifo_empty(void) { - int x = 16384; - while((!(HAL_READ8(LOG_UART_REG_BASE, 0x14) & BIT6)) && x--); -} - -//----- SDIO_Device_Off -void INFRA_START_SECTION SDIO_Device_Off(void) { - HAL_PERI_ON_WRITE32(REG_PESOC_HCI_CLK_CTRL0, - HAL_PERI_ON_READ32(REG_PESOC_HCI_CLK_CTRL0) - & (~BIT_SOC_ACTCK_SDIO_DEV_EN)); - HAL_PERI_ON_WRITE32(REG_SOC_HCI_COM_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_HCI_COM_FUNC_EN) - & (~(BIT_SOC_HCI_SDIOD_ON_EN | BIT_SOC_HCI_SDIOD_OFF_EN))); - HAL_PERI_ON_WRITE32(REG_HCI_PINMUX_CTRL, - HAL_PERI_ON_READ32(REG_HCI_PINMUX_CTRL) - & (~(BIT_HCI_SDIOD_PIN_EN))); -} - -//----- SYSPlatformInit -void INFRA_START_SECTION SYSPlatformInit(void) { - HAL_SYS_CTRL_WRITE32(REG_SYS_EFUSE_SYSCFG0, - (HAL_SYS_CTRL_READ32(REG_SYS_EFUSE_SYSCFG0) - & (~(BIT_MASK_SYS_EEROM_LDO_PAR_07_04 << BIT_SHIFT_SYS_EEROM_LDO_PAR_07_04))) - | BIT_SYS_EEROM_LDO_PAR_07_04(6)); // & 0xF0FFFFFF | 0x6000000 - HAL_SYS_CTRL_WRITE32(REG_SYS_XTAL_CTRL1, - (HAL_SYS_CTRL_READ32(REG_SYS_XTAL_CTRL1) - & (~(BIT_MASK_SYS_XTAL_DRV_RF1 << BIT_SHIFT_SYS_XTAL_DRV_RF1))) - | BIT_SYS_XTAL_DRV_RF1(1)); // & 0xFFFFFFE7 | 8; -} - -// weak __low_level_init function! -__weak void __low_level_init(void) { -} - -// weak main function! -__weak int main(void) { - DiagPrintf("\r\nRTL Console ROM: Start - press key 'Up', Help '?'\r\n"); - while (pUartLogCtl->ExecuteEsc != 1); - pUartLogCtl->RevdNo = 0; - pUartLogCtl->BootRdy = 1; - DiagPrintf("\r"); - while (1) { - while (pUartLogCtl->ExecuteCmd != 1); - UartLogCmdExecute((PUART_LOG_CTL) pUartLogCtl); - DiagPrintf("\r"); - pUartLogCtl->ExecuteCmd = 0; - } - return 0; -} - -//----- InfraStart -void INFRA_START_SECTION InfraStart(void) { -// NewVectorTable[2] = HalNMIHandler_Patch; - DBG_8195A("===== Enter Image: %s ====\n", cus_sig); -// ShowRamBuildInfo(); // app_start.c: void ShowRamBuildInfo(void) - memset(&__bss_start__, 0, &__bss_end__ - &__bss_start__); - rtl_libc_init(); // ROM Lib C init (rtl_printf!) -// SYSPlatformInit(); -// SDIO_Device_Off(); - //- Должно быть в boot -extern HAL_GPIO_ADAPTER gBoot_Gpio_Adapter; - memset(&gBoot_Gpio_Adapter, 0, sizeof(gBoot_Gpio_Adapter)); - _pHAL_Gpio_Adapter = &gBoot_Gpio_Adapter; - VectorTableInitRtl8195A(STACK_TOP); // 0x1FFFFFFC - loguart_wait_tx_fifo_empty(); // иначе глючит LogUART, если переключение CLK приходится на вывод символов ! -#if 1 // if set CLK CPU - if(HalGetCpuClk() != PLATFORM_CLOCK) { - //----- CLK CPU -#if CPU_CLOCK_SEL_DIV5_3 - // 6 - 200000000 Hz, 7 - 10000000 Hz, 8 - 50000000 Hz, 9 - 25000000 Hz, 10 - 12500000 Hz, 11 - 4000000 Hz - HalCpuClkConfig(CPU_CLOCK_SEL_VALUE); - *((int *)(SYSTEM_CTRL_BASE+REG_SYS_SYSPLL_CTRL1)) |= (1<<17);// REG_SYS_SYSPLL_CTRL1 |= BIT_SYS_SYSPLL_DIV5_3 -#else - // 0 - 166666666 Hz, 1 - 83333333 Hz, 2 - 41666666 Hz, 3 - 20833333 Hz, 4 - 10416666 Hz, 5 - 4000000 Hz - *((int *) (SYSTEM_CTRL_BASE + REG_SYS_SYSPLL_CTRL1)) &= ~(1 << 17); // REG_SYS_SYSPLL_CTRL1 &= ~BIT_SYS_SYSPLL_DIV5_3 - HalCpuClkConfig(CPU_CLOCK_SEL_VALUE); -#endif // CPU_CLOCK_SEL_DIV5_3 - }; -#endif - PSHalInitPlatformLogUart(); // HalInitPlatformLogUartV02(); // Show ""... :( - HalReInitPlatformTimer(); // HalInitPlatformTimerV02(); HalTimerOpInit_Patch((void*) (&HalTimerOp)); - SystemCoreClockUpdate(); - En32KCalibration(); - - //---- Spic -// _memset(SpicInitParaAllClk, 0, sizeof(SpicInitParaAllClk)); - *(uint32 *)(&SpicInitParaAllClk[0][0].BaudRate) = 0x01310202; // patch - *(uint32 *)(&SpicInitParaAllClk[1][0].BaudRate) = 0x11311301; // patch -// *(uint32 *)(&SpicInitParaAllClk[2][0].BaudRate) = 0x21311301; // patch - SPI_FLASH_PIN_FCTRL(ON); -/* -// uint8 SpicBaudRate = CPU_CLK_TYPE_NO - 1 - ((HAL_SYS_CTRL_READ32(REG_SYS_CLK_CTRL1) >> 4) & 7); - uint8 SpicBaudRate = 3; // HAL_SYS_CTRL_READ32(REG_SYS_CLK_CTRL1) >> 4) & 7; - DBG_8195A("SpicBaudRate = %d\n", SpicBaudRate); - SpicInitRtl8195AV02(SpicBaudRate, SpicDualBitMode); - if(!SpicCmpDataForCalibrationRtl8195A()) { - DBG_8195A("ReInit Spic to SIO...\n"); - SpicInitRtl8195AV02(SpicBaudRate, SpicOneBitMode); - if(!SpicCmpDataForCalibrationRtl8195A()) { - DBG_8195A("Error Init Spic!\n"); - }; - }; -*/ -// SpicFlashInitRtl8195A(SpicDualBitMode); // SpicReadIDRtl8195A(); SpicDualBitMode -#ifdef CONFIG_SDR_EN - //---- SDRAM - uint8 ChipId = HalGetChipId(); - if (ChipId >= CHIP_ID_8195AM) { -if((HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & BIT(21)) == 0) { // SDR not init? -#ifdef FIX_SDR_CALIBRATION // for speed :) - sdr_init(); -#else // not FIX_SDR_CALIBRATION - SdrCtrlInit(); - if(!SdrControllerInit()) { - DBG_8195A("SDR Controller Init fail!\n"); - }; -#endif // FIX_SDR_CALIBRATION -}; - // clear SDRAM bss - extern uint8 __sdram_bss_start__[]; - extern uint8 __sdram_bss_end__[]; - if((uint32)__sdram_bss_end__-(uint32)__sdram_bss_start__ > 0) - memset(__sdram_bss_start__, 0, (uint32)__sdram_bss_end__-(uint32)__sdram_bss_start__); - } - else // if (ChipId < CHIP_ID_8195AM) - { - //----- SDRAM Off - SDR_PIN_FCTRL(OFF); - LDO25M_CTRL(OFF); - }; - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT(21)); // Flag SDRAM Init or None -#else - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & (~BIT(21))); // Flag SDRAM Not Init -#endif // CONFIG_SDR_EN - //----- Close Flash - SPI_FLASH_PIN_FCTRL(OFF); - - InitSoCPM(); - VectorTableInitForOSRtl8195A(&vPortSVCHandler, &xPortPendSVHandler, - &xPortSysTickHandler); - -#if CONFIG_DEBUG_LOG > 4 - DBG_8195A("\rSet CPU CLK: %d Hz, SOC FUNC EN: %p\r\n", HalGetCpuClk(), HAL_PERI_ON_READ32(REG_SOC_FUNC_EN)); -#endif - - // force SP align to 8 byte not 4 byte (initial SP is 4 byte align) - __asm( - "mov r0, sp\n" - "bic r0, r0, #7\n" - "mov sp, r0\n" - ); - - __low_level_init(); - - main(); -} - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/startup_old.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/startup_old.c deleted file mode 100644 index ee90b67..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/startup_old.c +++ /dev/null @@ -1,827 +0,0 @@ -/* - * BootLoader - * startup.o sdk-ameba-rtl8710af-v3.5a_without_NDA_GCC_V1.0.0 - * pvvx 2016 - */ - -#include "rtl8195a.h" -#include "diag.h" -#include "hal_spi_flash.h" -#include "hal_api.h" -#include "hal_platform.h" -#include "diag.h" -#include "hal_diag.h" -#include "rtl8195a_uart.h" -#include "rtl8195a/rtl8195a_peri_on.h" -#include "hal_peri_on.h" -#include "wifi_conf.h" -#include "rtl_consol.h" - -#ifndef USE_SRC_ONLY_BOOT -#define USE_SRC_ONLY_BOOT 0 -#endif - -#if USE_SRC_ONLY_BOOT -#define rtl_memset _memset -#define rtl_strcmp _strcmp -#define rtl_memcpy _memcpy -#endif - -#define VREG32(addr) (*((volatile uint32_t*)(addr))) - -typedef void (*START_FUNC)(void); - -#ifndef DEFAULT_BAUDRATE -#define DEFAULT_BAUDRATE UART_BAUD_RATE_38400 -#endif - -#define StartupSpicBitMode SpicDualBitMode // SpicOneBitMode -#define StartupSpicBaudRate 0 - -//------------------------------------------------------------------------- -// Function declarations -void PreProcessForVendor(void); // image1 -void RtlBootToSram(void); // image1 -uint32_t StartupHalLogUartInit(uint32_t uart_irq); // image1 -void StartupHalInitPlatformLogUart(void); // image1 -int IsForceLoadDefaultImg2(void); // image1 -void StartupHalSpicInit(int InitBaudRate); // image1 -int _GetChipId(void); // image1 -void RtlConsolRam(void); // image1 -extern void UartLogIrqHandle(void * Data); // in ROM -extern int RtlConsolRom(int); // in ROM -extern PHAL_GPIO_ADAPTER _pHAL_Gpio_Adapter; -extern void SpicUserReadRtl8195A(IN uint32_t Length, IN uint32_t addr, IN uint8_t * data, - IN uint8_t BitMode); -#if !USE_SRC_ONLY_BOOT -void InfraStart(void); -extern void HalWdgIntrHandle(void); -extern int wifi_off(void); // in wifi_conf.c -extern void xPortPendSVHandler(void); -extern void xPortSysTickHandler(void); -extern void vPortSVCHandler(void); -extern void ShowRamBuildInfo(void); // app_start.c: void ShowRamBuildInfo(void) -void HalNMIHandler_Patch(void); -void SDIO_Device_Off(void); -void VectorTableOverrideRtl8195A(uint32_t StackP); -void SYSPlatformInit(void); -void HalHardFaultHandler_Patch_c(uint32_t HardDefaultArg); -void __HalReInitPlatformLogUart(void); -void _ReloadImg(void); -void _ReloadImg_user_define(void); -void _CPUResetHandler(void); -void _CPUReset(void); -void HalHardFaultHandler_user_define(uint32_t HardDefaultArg); -#endif - -//------------------------------------------------------------------------- -// Data declarations -extern START_FUNC __image2_entry_func__; -extern uint8_t __image2_validate_code__; -extern uint8_t __image1_bss_start__, __image1_bss_end__; -extern uint8_t __rom_bss_start__, __rom_bss_end__; -//extern uint32_t STACK_TOP; -#define STACK_TOP 0x1FFFFFFC - -#if !USE_SRC_ONLY_BOOT -extern uint32_t * NewVectorTable; // LD: NewVectorTable = 0x10000000; -extern uint8_t __bss_start__, __bss_end__; -#endif - -//extern volatile UART_LOG_CTL * pUartLogCtl; -extern int UartLogCmdExecute(volatile uint8_t *); -/* -typedef struct __RAM_IMG2_VALID_PATTEN__ { - char rtkwin[7]; - uint8_t x[13]; -} _RAM_IMG2_VALID_PATTEN, *_PRAM_IMG2_VALID_PATTEN; -*/ -const uint8_t IMAGE1_VALID_PATTEN_SECTION RAM_IMG1_VALID_PATTEN[8] = - { 0x23, 0x79, 0x16, 0x88, 0xff, 0xff, 0xff, 0xff }; - -PRAM_FUNCTION_START_TABLE __attribute__((section(".data.pRamStartFun"))) pRamStartFun = - (PRAM_FUNCTION_START_TABLE) 0x10000BC8; - -#include - -struct _reent __attribute__((section(".libc.reent"))) impure_reent = _REENT_INIT(impure_reent); -//struct _reent * __attribute__((section(".libc.reent"))) _rtl_impure_ptr = { &impure_data }; -//struct _reent * __attribute__((at(0x1098))) __attribute__((section(".libc.reent"))) _rtl_impure_ptr = { &impure_data }; -struct _reent * __attribute__((at(0x10001c60))) __attribute__((section(".libc.reent"))) _rtl_impure_ptr = { &impure_reent }; - -/* ROM */ -MON_RAM_BSS_SECTION - volatile UART_LOG_CTL *pUartLogCtl; - -MON_RAM_BSS_SECTION - UART_LOG_BUF UartLogBuf; - -MON_RAM_BSS_SECTION - volatile UART_LOG_CTL UartLogCtl; - -MON_RAM_BSS_SECTION - uint8_t *ArgvArray[MAX_ARGV]; // *ArgvArray[10] ! - -MON_RAM_BSS_SECTION - uint8_t UartLogHistoryBuf[UART_LOG_HISTORY_LEN][UART_LOG_CMD_BUFLEN]; // UartLogHistoryBuf[5][127] ! - - -RAM_START_FUNCTION START_RAM_FUN_A_SECTION gRamStartFun = - { PreProcessForVendor + 1 }; -RAM_START_FUNCTION START_RAM_FUN_B_SECTION gRamPatchWAKE = - { RtlBootToSram + 1 }; -RAM_START_FUNCTION START_RAM_FUN_C_SECTION gRamPatchFun0 = - { RtlBootToSram + 1 }; -RAM_START_FUNCTION START_RAM_FUN_D_SECTION gRamPatchFun1 = - { RtlBootToSram + 1 }; -RAM_START_FUNCTION START_RAM_FUN_E_SECTION gRamPatchFun2 = - { RtlBootToSram + 1 }; - -#if !USE_SRC_ONLY_BOOT -RAM_START_FUNCTION IMAGE2_START_RAM_FUN_SECTION gImage2EntryFun0 = - { InfraStart + 1 }; -#else -RAM_START_FUNCTION IMAGE2_START_RAM_FUN_SECTION gImage2EntryFun0 = - { 0x100 }; -#endif // !USE_SRC_ONLY_BOOT -_RAM_IMG2_VALID_PATTEN IMAGE2_VALID_PATTEN_SECTION RAM_IMG2_VALID_PATTEN = - { { IMG2_SIGN_TXT }, { 0xff, 0, 1, 1, 0, 0x95, 0x81, 1, 1, 0, 0, 0, 0 } }; // "RTKWin" - -HAL_GPIO_ADAPTER PINMUX_RAM_DATA_SECTION gBoot_Gpio_Adapter; - -#pragma arm section code = ".hal.ram.text" -#pragma arm section rodata = ".hal.ram.rodata", rwdata = ".hal.ram.data", zidata = ".hal.ram.bss" - -#if !USE_SRC_ONLY_BOOT -//----- HalNMIHandler_Patch -void HalNMIHandler_Patch(void) { - DBG_8195A_HAL("RTL8195A[HAL]: %s:NMI Error!\n", __func__); - if ( HAL_READ32(VENDOR_REG_BASE, 0) < 0) - HalWdgIntrHandle(); // ROM: HalWdgIntrHandle = 0x3485; -} -#endif // !USE_SRC_ONLY_BOOT - - -void __attribute__((section(".hal.ram.text"))) SetDebugFlgs() { -#if CONFIG_DEBUG_LOG > 2 - ConfigDebugErr = -1; - ConfigDebugWarn = -1; - ConfigDebugInfo = -1; -#elif CONFIG_DEBUG_LOG > 1 - ConfigDebugErr = -1; - ConfigDebugWarn = -1; - ConfigDebugInfo = 0; -#elif CONFIG_DEBUG_LOG > 0 - ConfigDebugErr = -1; - ConfigDebugWarn = 0; - ConfigDebugInfo = 0; -#else - ConfigDebugErr = 0; - ConfigDebugWarn = 0; - ConfigDebugInfo = 0; -#endif -} - -void __attribute__((section(".hal.ram.text"))) InitSpic(void) -{ - VREG32(0x40006000) = 0x01000300; - VREG32(0x40006004) = 0x1; - VREG32(0x400060E0) = 0x0B; - VREG32(0x400060E4) = 0x3B; - VREG32(0x400060E8) = 0x3B; - VREG32(0x400060EC) = 0x6B; - VREG32(0x400060F0) = 0xEB; - VREG32(0x400060F4) = 0x02; - VREG32(0x400060F8) = 0xA2; - VREG32(0x400060FC) = 0xA2; - VREG32(0x40006100) = 0x32; - VREG32(0x40006104) = 0x38; - VREG32(0x40006108) = 0x06; - VREG32(0x4000610C) = 0x05; - VREG32(0x40006110) = 0x51; - VREG32(0x40006114) = 0x01; - VREG32(0x40006118) = 0x03; - VREG32(0x4000611C) = 0x20030013; - VREG32(0x40006120) = 0x202; - VREG32(0x40006124) = 0x0E; -} - -//----- StartupHalLogUartInit -uint32_t __attribute__((section(".hal.ram.text"))) StartupHalLogUartInit(uint32_t uart_irq) { - HAL_UART_WRITE32(UART_DLH_OFF, 0); - - uint32_t SysClock = (HalGetCpuClk() >> 2); - uint32_t SampleRate = (16 * DEFAULT_BAUDRATE); - uint32_t Divisor = SysClock / SampleRate; - uint32_t Remaind = ((SysClock * 10) / SampleRate) - (Divisor * 10); - if (Remaind > 4) Divisor++; - // set DLAB bit to 1 -// HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, 0); - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, RUART_LINE_CTL_REG_DLAB_ENABLE); - HAL_UART_WRITE32(UART_DLL_OFF, Divisor & 0xff); - HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, 3); - HAL_UART_WRITE32(UART_FIFO_CTL_REG_OFF, FIFO_CTL_DEFAULT_WITH_FIFO); - HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, uart_irq); - if (uart_irq) { - // Enable Peripheral_IRQ Setting for Log_Uart - HAL_WRITE32(VENDOR_REG_BASE, PERIPHERAL_IRQ_EN, 0x1000000); - // Cortex-M3 SCB->AIRCR - HAL_WRITE32(0xE000ED00, 0x0C, - (HAL_READ32(0xE000ED00, 0x0C) & 0x0F8FF) | 0x5FA0300); - HAL_WRITE8(0xE000E100, 0x313, 0xE0); // HAL_WRITE8(0xE000E100, 0x313, 0xE0); - HAL_WRITE32(0xE000E100, 0, 0x80000); // NVIC enable external interrupt[?] ? - } - return 0; -} - -//----- StartupHalInitPlatformLogUart -void __attribute__((section(".hal.ram.text"))) StartupHalInitPlatformLogUart( - void) { - HAL_UART_READ32(UART_REV_BUF_OFF); - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & (~(BIT_SOC_LOG_UART_EN))); // 40000210 &= 0xFFFFEFFF; // ~(1<<12) - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT_SOC_LOG_UART_EN); // 40000210 |= 0x1000u; - ACTCK_LOG_UART_CCTRL(ON); // 40000230 |= 0x1000u; - StartupHalLogUartInit(IER_ERBFI | IER_ELSI); -} - -void __attribute__((section(".hal.ram.text"))) RtlConsolRam(void) -{ -// __asm__ __volatile__ ("cpsid f\n"); -// HalCpuClkConfig(0); // 0 - 166666666 Hz, 1 - 83333333 Hz, 2 - 41666666 Hz, 3 - 20833333 Hz, 4 - 10416666 Hz, 5 - 4000000 Hz -// ConfigDebugErr = -1; -// VectorTableInitRtl8195A(STACK_TOP); // 0x1FFFFFFC); -// HalInitPlatformLogUartV02(); -// HalReInitPlatformLogUartV02(); -// HalInitPlatformTimerV02(); - __asm__ __volatile__ ("cpsie f\n"); - - DiagPrintf("\r\nRTL Console ROM: Start - press 'ESC' key, Help '?'\r\n"); - while(!pUartLogCtl->ExecuteEsc); - pUartLogCtl->EscSTS = 0; - pUartLogCtl->BootRdy = 1; - DiagPrintf("\r"); - while(1) { - while(!pUartLogCtl->ExecuteCmd); - UartLogCmdExecute(pUartLogCtl); - DiagPrintf("\r"); - pUartLogCtl->ExecuteCmd = 0; - } -} - -//----- RtlBootToSram -void __attribute__((section(".hal.ram.text"))) RtlBootToSram(void) { - TIMER_ADAPTER tim_adapter; - /* JTAG On */ - ACTCK_VENDOR_CCTRL(ON); - SLPCK_VENDOR_CCTRL(ON); - HalPinCtrlRtl8195A(JTAG, 0, 1); - - memset(&__rom_bss_start__, 0, &__rom_bss_end__ - &__rom_bss_start__); - - /* Flash & LogUart On */ - HAL_PERI_ON_WRITE32(REG_GPIO_SHTDN_CTRL, 0x7FF); - SPI_FLASH_PIN_FCTRL(ON); - HAL_PERI_ON_WRITE32(REG_CPU_PERIPHERAL_CTRL, - HAL_PERI_ON_READ32(REG_CPU_PERIPHERAL_CTRL) | BIT_SPI_FLSH_PIN_EN); // 400002C0 |= 0x1u; - HAL_PERI_ON_WRITE32(REG_CPU_PERIPHERAL_CTRL, - HAL_PERI_ON_READ32(REG_CPU_PERIPHERAL_CTRL) | BIT_LOG_UART_PIN_EN); // 400002C0 |= 0x100000u; - - VectorTableInitRtl8195A(STACK_TOP); // 0x1FFFFFFC - - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT_SOC_FLASH_EN); // 40000210 |= 0x10u; - ACTCK_FLASH_CCTRL(ON); - SLPCK_FLASH_CCTRL(ON); - HalPinCtrlRtl8195A(SPI_FLASH, 0, 1); - - SpicNVMCalLoadAll(); - - HAL_SYS_CTRL_WRITE32(REG_SYS_CLK_CTRL1, - HAL_SYS_CTRL_READ32(REG_SYS_CLK_CTRL1) & 0x8F); // VREG32(0x40000014) &= 0x8F; - - SetDebugFlgs(); - - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & (~(BIT_SOC_LOG_UART_EN))); // 40000210 &= 0xFFFFEFFF; // ~(1<<12) - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT_SOC_LOG_UART_EN); // 40000210 |= 0x1000u; - - ACTCK_LOG_UART_CCTRL(ON); -// SLPCK_LOG_UART_CCTRL(ON); - - tim_adapter.IrqHandle.IrqFun = &UartLogIrqHandle; - tim_adapter.IrqHandle.IrqNum = UART_LOG_IRQ; - tim_adapter.IrqHandle.Data = 0; - tim_adapter.IrqHandle.Priority = 5; - - StartupHalLogUartInit(0); - VectorIrqRegisterRtl8195A(&tim_adapter.IrqHandle); - StartupHalLogUartInit(IER_ERBFI | IER_ELSI); - - HAL_PERI_ON_WRITE32(REG_PON_ISO_CTRL, 3); // VREG32(0x40000204) = 3; - HAL_PERI_ON_WRITE32(REG_OSC32K_CTRL, - HAL_PERI_ON_READ32(REG_OSC32K_CTRL) | BIT_32K_POW_CKGEN_EN); // VREG32(0x40000270) |= 1u; - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT_SOC_GTIMER_EN); // VREG32(0x40000210) |= 0x10000u; - - ACTCK_TIMER_CCTRL(ON); - SLPCK_TIMER_CCTRL(ON); - - tim_adapter.TimerIrqPriority = 0; - tim_adapter.TimerLoadValueUs = 0; - tim_adapter.TimerMode = FREE_RUN_MODE; - tim_adapter.IrqDis = 1; - tim_adapter.TimerId = 1; - HalTimerInitRtl8195a((PTIMER_ADAPTER) &tim_adapter); - - SpicInitRtl8195A(1, StartupSpicBitMode); // StartupSpicBaudRate InitBaudRate 1, SpicBitMode 1 StartupSpicBitMode - SpicFlashInitRtl8195A(StartupSpicBitMode); // SpicBitMode 1 StartupSpicBitMode - DBG_8195A("==*== Enter Image 1.5 ====\nImg2 Sign: %s, InfaStart @ 0x%08x\n", - &__image2_validate_code__, __image2_entry_func__); - if (strcmp((const char * )&__image2_validate_code__, IMG2_SIGN_TXT)) { - DBG_MISC_ERR("Invalid Image2 Signature!\n"); - RtlConsolRam(); - } -// InitSpic(); - __image2_entry_func__(); -} - -//----- SYSCpuClkConfig -void __attribute__((section(".hal.ram.text"))) SYSCpuClkConfig(int ChipID, int SysCpuClk) { - int flg = 0; - DBG_SPIF_INFO("SYSCpuClkConfig(0x%x)\n", SysCpuClk); - if(HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & BIT_SOC_FLASH_EN) { - SpicWaitWipRtl8195A(); //_SpicWaitWipDoneRefinedRtl8195A(); ??? - flg = 1; - } -// if (ChipID == CHIP_ID_8710AF && (!SysCpuClk)) SysCpuClk = 1; - HalCpuClkConfig(SysCpuClk); - HalDelayUs(1000); - StartupHalInitPlatformLogUart(); - if (flg) { - SpicOneBitCalibrationRtl8195A(SysCpuClk); // extern uint32_t SpicOneBitCalibrationRtl8195A(IN uint8_t SysCpuClk); -/* - // Disable SPI_FLASH User Mode - HAL_SPI_WRITE32(REG_SPIC_SSIENR, 0); - HAL_SPI_WRITE32(REG_SPIC_VALID_CMD, - (HAL_SPI_READ32(REG_SPIC_VALID_CMD)|(FLASH_VLD_DUAL_CMDS))); */ - SpicCalibrationRtl8195A(StartupSpicBitMode, 0); - } -} - -//----- IsForceLoadDefaultImg2 -int __attribute__((section(".hal.ram.text"))) IsForceLoadDefaultImg2(void) { - uint8_t gpio_pin[4]; - HAL_GPIO_PIN GPIO_Pin; - HAL_GPIO_PIN_STATE flg; - int result = 0; - - *((uint32_t *) &gpio_pin) = HAL_READ32(SPI_FLASH_BASE, FLASH_SYSTEM_DATA_ADDR + 0x08); // config data + 8 - _pHAL_Gpio_Adapter = (int) &gBoot_Gpio_Adapter; - for(int i = 0; i < 2; i++) { - uint8_t x = gpio_pin[i]; - if (x != 0xff) { - GPIO_Pin.pin_name = HAL_GPIO_GetIPPinName_8195a(x & 0x7F); - if (x & 0x80) { - GPIO_Pin.pin_mode = DIN_PULL_LOW; - flg = GPIO_PIN_HIGH; - } else { - GPIO_Pin.pin_mode = DIN_PULL_HIGH; - flg = GPIO_PIN_LOW; - } - HAL_GPIO_Init_8195a(&GPIO_Pin); - result |= HAL_GPIO_ReadPin_8195a(&GPIO_Pin) == flg; - HAL_GPIO_DeInit_8195a(&GPIO_Pin); - } - } - _pHAL_Gpio_Adapter->IrqHandle.IrqFun = NULL; - return result; -} - -//----- GetChipId -int __attribute__((section(".hal.ram.text"))) _GetChipId() { - uint8_t chip_id = CHIP_ID_8195AM; - if (HALEFUSEOneByteReadROM(HAL_SYS_CTRL_READ32(REG_SYS_EFUSE_CTRL), 0xF8, - &chip_id, L25EOUTVOLTAGE) != 1) - DBG_MISC_INFO("Get Chip ID Failed\r"); - return chip_id; -} - -//----- StartupHalSpicInit -void __attribute__((section(".hal.ram.text"))) StartupHalSpicInit( - int InitBaudRate) { - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT4); // HAL_SYS_CTRL_READ32 - HAL_PERI_ON_WRITE32(REG_PESOC_CLK_CTRL, - HAL_PERI_ON_READ32(REG_PESOC_CLK_CTRL) | BIT_SOC_ACTCK_FLASH_EN | BIT_SOC_SLPCK_FLASH_EN); - HalPinCtrlRtl8195A(SPI_FLASH, - ((HAL_SYS_CTRL_READ32(REG_SYS_SYSTEM_CFG1) & 0xF0000000) - == 0x30000000), 1); - SpicInitRtl8195A(InitBaudRate, StartupSpicBitMode); -} - - -void __attribute__((section(".hal.ram.text"))) flashcpy(uint32_t raddr, uint32_t faddr, int32_t size) { - while(size > 0) { - HAL_WRITE32(0, raddr, HAL_READ32(SPI_FLASH_BASE, faddr)); - raddr+=4; - faddr+=4; - size-=4; - } -} -//----- PreProcessForVendor -void __attribute__((section(".hal.ram.text"))) PreProcessForVendor(void) { - START_FUNC entry_func; - uint32_t run_image; - uint32_t Image2Addr = *(uint32_t *)(0x1006FFFC); - uint32_t v16 = 0, v17; -#if 0 - uint8_t efuse0xD3_data; - HALEFUSEOneByteReadROM(HAL_SYS_CTRL_READ32(REG_SYS_EFUSE_CTRL), 0xD3, - &efuse0xD3_data, L25EOUTVOLTAGE); - if (efuse0xD3_data & 1) -#endif - HalPinCtrlRtl8195A(JTAG, 0, 1); - SetDebugFlgs(); - int chip_id = _GetChipId(); - int flash_enable = HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & BIT_SOC_FLASH_EN; // v6 = ... - int spic_init = 0; -/// InitSpic(); - if (flash_enable) { - entry_func = &__image2_entry_func__; - spic_init = 1; - } else { - entry_func = (START_FUNC) Image2Addr; - if (chip_id != CHIP_ID_8711AN) { // 0xFB - StartupHalSpicInit(StartupSpicBaudRate); // BaudRate 1 - spic_init = 1; - } - } - DBG_8195A("BOOT from Flash: %s\n", (flash_enable) ? "YES" : "NO"); - memset(&__image1_bss_start__, 0, - &__image1_bss_end__ - &__image1_bss_start__); - HalDelayUs(1000); - int sdr_enable = 0; - -#ifdef CONFIG_SDR_EN - if (chip_id > CHIP_ID_8711AF || chip_id == CHIP_ID_8710AM) { - SdrCtrlInit(); - sdr_enable = 1; - } - else { - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT(21)); - } -#else -// SdrPowerOff(); - SDR_PIN_FCTRL(OFF); - LDO25M_CTRL(OFF); - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT(21)); -#endif - - if (spic_init) SpicNVMCalLoadAll(); - SYSCpuClkConfig(chip_id, 0); - StartupHalInitPlatformLogUart(); // double !? - __asm__ __volatile__ ("cpsie f\n"); - DBG_8195A("===== Enter Image 1 ====\n"); - if (spic_init) { - SpicReadIDRtl8195A(); - SpicFlashInitRtl8195A(StartupSpicBitMode); // SpicBitMode 1 - } -#ifdef CONFIG_SDR_EN - if (sdr_enable) SdrControllerInit(); -#endif - if (flash_enable) { - - uint32_t img1size = (*(uint16_t *) (SPI_FLASH_BASE + 0x18)) << 10; // size in 1024 bytes - if (img1size == 0 || img1size >= 0x3FFFC00) - img1size = *(uint32_t *) (SPI_FLASH_BASE + 0x10) + 32; - uint32_t * prdflash = (uint32_t *) (img1size + SPI_FLASH_BASE + 8); - uint32_t sign1 = *prdflash++; - uint32_t sign2 = *prdflash; - { - v16 = -1; - v17 = -1; - if (sign2 == IMG_SIGN2_RUN) { - if (sign1 == IMG_SIGN1_RUN) { - v16 = img1size; - v17 = -1; - } else if (sign1 == IMG_SIGN1_SWP) { - v17 = img1size; - v16 = -1; - } - } - uint32_t OTA_addr = *(uint32_t *) (SPI_FLASH_BASE + FLASH_SYSTEM_DATA_ADDR); // config sector data - if (OTA_addr != -1) { - uint32_t image2size = *(uint32_t *) (img1size + SPI_FLASH_BASE); - if (OTA_addr >= (img1size + image2size) - && !(OTA_addr & 0xFFF)) { - prdflash = (uint32_t *) (OTA_addr + SPI_FLASH_BASE + 8); - sign1 = *prdflash++; - sign2 = *prdflash; - if (sign2 == IMG_SIGN2_RUN) { - if (sign1 == IMG_SIGN1_RUN) v16 = OTA_addr; - else if (sign1 == IMG_SIGN1_SWP) v17 = OTA_addr; - } -LABEL_41: if (IsForceLoadDefaultImg2()) { - if (v17 != -1) run_image = v17; - else { - run_image = v16; - if (run_image == -1) { - DiagPrintf("Fatal: no fw\n"); - RtlConsolRam(); - } - } - } else { - if (v16 != -1) run_image = v16; - else { - run_image = v17; - if (run_image == -1) { - DiagPrintf("Fatal: no fw\n"); - RtlConsolRam(); - } - } - } - uint8_t * pstr; - if (run_image == v17) - pstr = "load OLD fw %d\n"; - else { - if (run_image != v16) { -LABEL_55: prdflash = run_image + SPI_FLASH_BASE; - uint32_t img_size = *prdflash++; - uint32_t Image2Addr = *prdflash; - DBG_8195A("Flash Image2: Addr 0x%x, Len %d, Load to SRAM 0x%x\n", run_image, img_size, Image2Addr); // debug! - flashcpy(Image2Addr, run_image+16, img_size); -// SpicUserReadFourByteRtl8195A(img_size, run_image + 16, Image2Addr, StartupSpicBitMode); // SpicDualBitMode - prdflash = run_image + img_size + SPI_FLASH_BASE + 16; - uint32_t sdram_image_size = *prdflash++; // +0x10 - uint32_t sdram_load_addr = *prdflash; // +0x14 - DBG_8195A("Image3 length: 0x%x, Image3 Addr: 0x%x\n", - sdram_image_size, sdram_load_addr); - if ((sdram_image_size - 1) <= 0xFFFFFFFD - && *((uint32_t *)(sdram_load_addr)) == SDR_SDRAM_BASE) { // sdram_load_addr - if (!sdr_enable) { - DBG_MISC_ERR("FW/HW conflict. No DRAM on board.\n"); - RtlConsolRam(); - } - DBG_8195A("Image3 length: 0x%x, Image3 Addr: 0x%x\n", - sdram_image_size, sdram_load_addr); -// SpicUserReadRtl8195A(sdram_image_size, run_image + img_size + 32, SDR_SDRAM_BASE, StartupSpicBitMode); - } else DBG_8195A("No Image3\n"); - - entry_func = *(uint32_t *)Image2Addr; - DBG_8195A("Img2 Sign: %s, InfaStart @ 0x%08x \n", - (const char * )(Image2Addr + 4), - entry_func); // *(uint32_t *)Image2Addr); - if (strcmp((const char * )(Image2Addr + 4), - IMG2_SIGN_TXT)) { - DBG_MISC_ERR("Invalid Image2 Signature\n"); - RtlConsolRam(); - } -#if 0 - DBG_8195A("CLK CPU: %d Hz\n", HalGetCpuClk()); - RtlConsolRam(); -#else -#endif - (void) (entry_func)(); - return; - } - pstr = "load NEW fw %d\n"; - } // if (run_image == v17) else - DiagPrintf(pstr, ((run_image - OTA_addr) <= 0)); - goto LABEL_55; - } - DBG_MISC_ERR("OTA addr 0x%x INVALID\n", OTA_addr); - } - OTA_addr = -1; - goto LABEL_41; - } - } // if (flash_enable) - if (strcmp((const char * )(Image2Addr + 4), IMG2_SIGN_TXT)) { - DBG_MISC_ERR("Invalid Image2 Signature\n", 2 * ConfigDebugErr); - RtlConsolRam(); - } - (void) (entry_func)(); -} - -#if !USE_SRC_ONLY_BOOT -//----- HalHardFaultHandler_Patch_c -void HalHardFaultHandler_Patch_c(uint32_t HardDefaultArg) { - uint32_t v1; - int v2; - int v3; - - v1 = HardDefaultArg; - if ((VREG32(0xE000ED28) & 0x82) - && (unsigned int) (VREG32(0xE000ED38) - 0x40080000) < 0x40000) { - DBG_8195A("\n."); - v2 = *(uint32_t *) (v1 + 24); - if ((*(uint16_t *) v2 & 0xF800) <= 0xE000) v3 = v2 + 2; - else v3 = v2 + 4; - *(uint32_t *) (v1 + 24) = v3; - } else { - HalHardFaultHandler_user_define(HardDefaultArg); - HalHardFaultHandler(v1); // ROM: HalHardFaultHandler = 0x911; - } -} - -//----- VectorTableOverrideRtl8195A -void __attribute__((section(".infra.ram.start"))) VectorTableOverrideRtl8195A(uint32_t StackP) { - NewVectorTable[2] = HalNMIHandler_Patch; -} - -//----- SYSPlatformInit -void __attribute__((section(".infra.ram.start"))) SYSPlatformInit(void) { - HAL_SYS_CTRL_WRITE32(REG_SYS_EFUSE_SYSCFG0, - (HAL_SYS_CTRL_READ32(REG_SYS_EFUSE_SYSCFG0) & (~(BIT_MASK_SYS_EEROM_LDO_PAR_07_04 << BIT_SHIFT_SYS_EEROM_LDO_PAR_07_04))) | BIT_SYS_EEROM_LDO_PAR_07_04(6)); // & 0xF0FFFFFF | 0x6000000 - HAL_SYS_CTRL_WRITE32(REG_SYS_XTAL_CTRL1, - (HAL_SYS_CTRL_READ32(REG_SYS_XTAL_CTRL1) & (~(BIT_MASK_SYS_XTAL_DRV_RF1 << BIT_SHIFT_SYS_XTAL_DRV_RF1))) | BIT_SYS_XTAL_DRV_RF1(1)); // & 0xFFFFFFE7 | 8; -} - -//----- InfraStart -void __attribute__((section(".infra.ram.start"))) InfraStart(void) { - NewVectorTable[2] = HalNMIHandler_Patch; - HAL_SYS_CTRL_WRITE32(REG_SYS_CLK_CTRL0, - HAL_SYS_CTRL_READ32(REG_SYS_CLK_CTRL0) | BIT4); - if (HalCommonInit() != HAL_OK) DBG_8195A("Hal Common Init Failed.\n"); - DBG_8195A("===== Enter Image 2 ====\n"); - ShowRamBuildInfo(); // app_start.c: void ShowRamBuildInfo(void) - memset(&__bss_start__, 0, &__bss_end__ - &__bss_start__); - int flsh = (HAL_SYS_CTRL_READ32(REG_SYS_CLK_CTRL0) - >> BIT_SHIFT_PESOC_OCP_CPU_CK_SEL) & 1; - if (flsh) { - SpicNVMCalLoadAll(); - SpicReadIDRtl8195A(); - } - SystemCoreClockUpdate(); - SYSPlatformInit(); - En32KCalibration(); - InitSoCPM(); - SDIO_Device_Off(); - VectorTableInitForOSRtl8195A(&vPortSVCHandler, &xPortPendSVHandler, &xPortSysTickHandler); - if (flsh) SpicDisableRtl8195A(); - _AppStart(); -} - -//----- SDIO_Device_Off -void SDIO_Device_Off(void) { - HAL_PERI_ON_WRITE32(REG_PESOC_HCI_CLK_CTRL0, - HAL_PERI_ON_READ32(REG_PESOC_HCI_CLK_CTRL0) & (~BIT_SOC_ACTCK_SDIO_DEV_EN)); - HAL_PERI_ON_WRITE32(REG_SOC_HCI_COM_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_HCI_COM_FUNC_EN) & (~(BIT_SOC_HCI_SDIOD_ON_EN | BIT_SOC_HCI_SDIOD_OFF_EN))); - HAL_PERI_ON_WRITE32(REG_HCI_PINMUX_CTRL, - HAL_PERI_ON_READ32(REG_HCI_PINMUX_CTRL) & (~(BIT_HCI_SDIOD_PIN_EN))); -} - -//----- __HalReInitPlatformLogUart -void __HalReInitPlatformLogUart(void) { - LOG_UART_ADAPTER UartAdapter; - UartAdapter.BaudRate = DEFAULT_BAUDRATE; - HalLogUartInit(UartAdapter); -} - -void _ReloadImg_user_define(void) { - -} - -//----- ReloadImg -void _ReloadImg(void) { - uint32_t img1size; - uint32_t img1addr; - unsigned int i; - uint32_t img2addr; - uint32_t img_addr1; - uint32_t img_addr2; - uint32_t ota_addr; - const char * pstr; - - img1size = *(uint32_t *) (SPI_FLASH_BASE + 0x10); - img1addr = *(uint32_t *) (SPI_FLASH_BASE + 0x14); - DBG_8195A("Image1 length: 0x%x, Image Addr: 0x%x\n", img1size, - img1addr); - for (i = 32; i < img1size + 32; i += 4) - *(uint32_t *) (img1addr - 32 + i) = *(uint32_t *) (i + SPI_FLASH_BASE); - img2addr = *(uint16_t *) (SPI_FLASH_BASE + 0x16) << 10; - if (!(img2addr)) img2addr = img1size + 32; - uint32_t * prdflash = (uint32_t *) (img1size + SPI_FLASH_BASE + 8); - uint32_t sign1 = *prdflash++; // v4 = *(uint32_t *)(img2addr + SPI_FLASH_BASE + 8); - uint32_t sign2 = *prdflash; // v5 = *(uint32_t *)(img2addr + SPI_FLASH_BASE + 12); - if (sign1 == IMG_SIGN1_RUN) { - if (sign2 == IMG_SIGN2_RUN) { - img_addr1 = img2addr; -LABEL_11: img_addr2 = -1; - goto LABEL_16; - } -LABEL_14: img_addr1 = -1; - goto LABEL_11; - } - if (sign1 != IMG_SIGN1_SWP || sign2 != IMG_SIGN2_RUN) goto LABEL_14; - img_addr2 = img2addr; - img_addr1 = -1; -LABEL_16: ota_addr = *(uint32_t *) (SPI_FLASH_BASE + 0x9000); - if (ota_addr == -1) { -LABEL_21: ota_addr = -1; - goto LABEL_22; - } - if (ota_addr < (img2addr + *(uint32_t *) (img2addr + SPI_FLASH_BASE)) - || (ota_addr & 0xFFF)) { - DBG_MISC_ERR("OTA addr 0x%x INVALID\n"); - goto LABEL_21; - } - prdflash = (uint32_t *) (ota_addr + SPI_FLASH_BASE + 8); - sign1 = *prdflash++; // v9 = *(uint32_t *)(ota_addr + SPI_FLASH_BASE + 8); - sign2 = *prdflash; // v11 = *(uint32_t *)(ota_addr + SPI_FLASH_BASE + 12); - if (sign1 == IMG_SIGN1_RUN) { - sign1 = IMG_SIGN2_RUN; - if (sign2 == IMG_SIGN2_RUN) { - img_addr1 = ota_addr; - goto LABEL_33; - } - goto LABEL_22; - } - if (sign1 != IMG_SIGN1_SWP || (sign1 = IMG_SIGN2_RUN, sign2 != IMG_SIGN2_RUN)) { -LABEL_22: if (img_addr1 == -1) { - if (img_addr2 == -1) { - DBG_MISC_ERR("Fatal:no fw\n", ota_addr, - 2 * ConfigDebugErr); - RtlConsolRam(); - } - img_addr1 = img_addr2; -LABEL_28: pstr = "load OLD fw %d\n"; - if (ConfigDebugErr & _DBG_MISC_) { -LABEL_36: DiagPrintf(pstr, - ((unsigned int) (img_addr1 - ota_addr) <= 0)); - } - goto IMG2_LOAD_START; - } - goto LABEL_33; - } - if (img_addr1 == -1) { - img_addr1 = *(uint32_t *) (SPI_FLASH_BASE + 0x9000); // ota_addr - goto LABEL_28; - } - img_addr2 = *(uint32_t *) (SPI_FLASH_BASE + 0x9000); -LABEL_33: if (img_addr1 == img_addr2) - goto LABEL_28; - if (ConfigDebugErr & _DBG_MISC_) // DBG_8195A - { - pstr = "load NEW fw %d\n"; - goto LABEL_36; - } - uint32_t v13; -IMG2_LOAD_START: - v13 = *(uint32_t *) (img_addr1 + SPI_FLASH_BASE + 4); - uint32_t v15 = *(uint32_t *) (img_addr1 + SPI_FLASH_BASE) + img_addr1; - for (i = img_addr1 + 16;; i += 4) { - if (i >= (unsigned int) (v15 + 16)) break; - *(uint32_t *) (v13 - 16 - img_addr1 + i) = *(uint32_t *) (i + SPI_FLASH_BASE); - } - uint32_t v16 = *(uint32_t *) (v15 + SPI_FLASH_BASE); - if ((unsigned int) (v16 - 1) <= 0xFFFFFFFD - && *(uint32_t *) (v15 + SPI_FLASH_BASE + 0x14) == 0x30000000) { - DBG_8195A("Image3 length: 0x%x, Image3 Addr: 0x%x\n", - *(uint32_t *)(v15 + SPI_FLASH_BASE + 0x10)); - for (i = v15 + 32; i < (v16 + v15 + 32); i += 4) - *(uint32_t *) (0x2FFFFFE0 - v15 + i) = *(uint32_t *) (i + SPI_FLASH_BASE); - } else - DBG_8195A("No Image3\n"); - _ReloadImg_user_define(); -} - -//----- CPUResetHandler -void _CPUResetHandler(void) { - memset(&__rom_bss_start__, 0, &__rom_bss_end__ - &__rom_bss_start__); - - ConfigDebugErr = -1; - - HalCpuClkConfig(0); - VectorTableInitRtl8195A(STACK_TOP); // 0x1FFFFFFC - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & BIT23); - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & BIT_SOC_FLASH_EN); - HAL_PERI_ON_WRITE32(REG_SOC_PERI_BD_FUNC0_EN, - HAL_PERI_ON_READ32(REG_SOC_PERI_BD_FUNC0_EN) | BIT8 | BIT9); - HalPinCtrlRtl8195A(SPI_FLASH, 0, 1); - HalTimerOpInit_Patch(&HalTimerOp); - HalDelayUs(1000); - __HalReInitPlatformLogUart(); - _ReloadImg(); - InfraStart(); -} -//----- CPUReset -void _CPUReset(void) // __noreturn -{ - wifi_off(); - pRamStartFun->RamPatchFun1 = _CPUResetHandler; - HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, - HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & BIT27); - HAL_WRITE32(0xE000ED00, 0x0C, 0x5FA0003); // - while (1); -} - -void HalHardFaultHandler_user_define(uint32_t HardDefaultArg) { - -} -#endif // !USE_SRC_ONLY_BOOT diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/Rtl8195a_otg_zero.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/Rtl8195a_otg_zero.h deleted file mode 100644 index ef24f40..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/Rtl8195a_otg_zero.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef RTL8195A_OTG_ZERO_H -#define RTL8195A_OTG_ZERO_H - -#include "usb_ch9.h" -#include "usb_gadget.h" - -struct zero_dev { - //ModifiedByJD spinlock_t lock; - struct usb_gadget *gadget; - struct usb_request *req; /* for control responses */ - - /* when configured, we have one of two configs: - * - source data (in to host) and sink it (out from host) - * - or loop it back (out from host back in to host) - */ - u8 config; - struct usb_ep *in_ep, *out_ep, *status_ep;//ModifiedByJD - - const struct usb_endpoint_descriptor - *in, *out, *status; //ModifiedByJD - /* autoresume timer */ - //ModifiedByJD struct timer_list resume; -}; - - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/cdc.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/cdc.h deleted file mode 100644 index a374ff9..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/cdc.h +++ /dev/null @@ -1,211 +0,0 @@ - -//#include "../otg/osk/sys-support.h" //ModifiedByJD - -/* - * USB Communications Device Class (CDC) definitions - * - * CDC says how to talk to lots of different types of network adapters, - * notably ethernet adapters and various modems. It's used mostly with - * firmware based USB peripherals. - */ - -#define USB_CDC_SUBCLASS_ACM 0x02 -#define USB_CDC_SUBCLASS_ETHERNET 0x06 -#define USB_CDC_SUBCLASS_WHCM 0x08 -#define USB_CDC_SUBCLASS_DMM 0x09 -#define USB_CDC_SUBCLASS_MDLM 0x0a -#define USB_CDC_SUBCLASS_OBEX 0x0b - -#define USB_CDC_PROTO_NONE 0 - -#define USB_CDC_ACM_PROTO_AT_V25TER 1 -#define USB_CDC_ACM_PROTO_AT_PCCA101 2 -#define USB_CDC_ACM_PROTO_AT_PCCA101_WAKE 3 -#define USB_CDC_ACM_PROTO_AT_GSM 4 -#define USB_CDC_ACM_PROTO_AT_3G 5 -#define USB_CDC_ACM_PROTO_AT_CDMA 6 -#define USB_CDC_ACM_PROTO_VENDOR 0xff - -/*-------------------------------------------------------------------------*/ -//#define UPACKED __attribute__ ((packed)) -#define UPACKED -/* - * Class-Specific descriptors ... there are a couple dozen of them - */ - -#define USB_CDC_HEADER_TYPE 0x00 /* header_desc */ -#define USB_CDC_CALL_MANAGEMENT_TYPE 0x01 /* call_mgmt_descriptor */ -#define USB_CDC_ACM_TYPE 0x02 /* acm_descriptor */ -#define USB_CDC_UNION_TYPE 0x06 /* union_desc */ -#define USB_CDC_COUNTRY_TYPE 0x07 -#define USB_CDC_NETWORK_TERMINAL_TYPE 0x0a /* network_terminal_desc */ -#define USB_CDC_ETHERNET_TYPE 0x0f /* ether_desc */ -#define USB_CDC_WHCM_TYPE 0x11 -#define USB_CDC_MDLM_TYPE 0x12 /* mdlm_desc */ -#define USB_CDC_MDLM_DETAIL_TYPE 0x13 /* mdlm_detail_desc */ -#define USB_CDC_DMM_TYPE 0x14 -#define USB_CDC_OBEX_TYPE 0x15 - -//ModifiedByJD (>>>) modify the data type to useable ones. -/* "Header Functional Descriptor" from CDC spec 5.2.3.1 */ -struct usb_cdc_header_desc { - u8 bLength; - u8 bDescriptorType; - u8 bDescriptorSubType; - - u16 bcdCDC; -} UPACKED; - -/* "Call Management Descriptor" from CDC spec 5.2.3.2 */ -struct usb_cdc_call_mgmt_descriptor { - u8 bLength; - u8 bDescriptorType; - u8 bDescriptorSubType; - - u8 bmCapabilities; -#define USB_CDC_CALL_MGMT_CAP_CALL_MGMT 0x01 -#define USB_CDC_CALL_MGMT_CAP_DATA_INTF 0x02 - - u8 bDataInterface; -} UPACKED; - -/* "Abstract Control Management Descriptor" from CDC spec 5.2.3.3 */ -struct usb_cdc_acm_descriptor { - u8 bLength; - u8 bDescriptorType; - u8 bDescriptorSubType; - - u8 bmCapabilities; -} UPACKED; - -/* "Union Functional Descriptor" from CDC spec 5.2.3.8 */ -struct usb_cdc_union_desc { - u8 bLength; - u8 bDescriptorType; - u8 bDescriptorSubType; - - u8 bMasterInterface0; - u8 bSlaveInterface0; - /* ... and there could be other slave interfaces */ -} UPACKED; - -/* "Network Channel Terminal Functional Descriptor" from CDC spec 5.2.3.11 */ -struct usb_cdc_network_terminal_desc { - u8 bLength; - u8 bDescriptorType; - u8 bDescriptorSubType; - - u8 bEntityId; - u8 iName; - u8 bChannelIndex; - u8 bPhysicalInterface; -} UPACKED; - -/* "Ethernet Networking Functional Descriptor" from CDC spec 5.2.3.16 */ -struct usb_cdc_ether_desc { - u8 bLength; - u8 bDescriptorType; - u8 bDescriptorSubType; - - u8 iMACAddress; - u32 bmEthernetStatistics; - u16 wMaxSegmentSize; - u16 wNumberMCFilters; - u8 bNumberPowerFilters; -} UPACKED; - -/* "MDLM Functional Descriptor" from CDC WMC spec 6.7.2.3 */ -struct usb_cdc_mdlm_desc { - u8 bLength; - u8 bDescriptorType; - u8 bDescriptorSubType; - - u16 bcdVersion; - u8 bGUID[16]; -}UPACKED; - -/* "MDLM Detail Functional Descriptor" from CDC WMC spec 6.7.2.4 */ -struct usb_cdc_mdlm_detail_desc { - u8 bLength; - u8 bDescriptorType; - u8 bDescriptorSubType; - - /* type is associated with mdlm_desc.bGUID */ - u8 bGuidDescriptorType; - u8 bDetailData[0]; -} UPACKED; - -/*-------------------------------------------------------------------------*/ - -/* - * Class-Specific Control Requests (6.2) - * - * section 3.6.2.1 table 4 has the ACM profile, for modems. - * section 3.8.2 table 10 has the ethernet profile. - * - * Microsoft's RNDIS stack for Ethernet is a vendor-specific CDC ACM variant, - * heavily dependent on the encapsulated (proprietary) command mechanism. - */ - -#define USB_CDC_SEND_ENCAPSULATED_COMMAND 0x00 -#define USB_CDC_GET_ENCAPSULATED_RESPONSE 0x01 -#define USB_CDC_REQ_SET_LINE_CODING 0x20 -#define USB_CDC_REQ_GET_LINE_CODING 0x21 -#define USB_CDC_REQ_SET_CONTROL_LINE_STATE 0x22 -#define USB_CDC_REQ_SEND_BREAK 0x23 -#define USB_CDC_SET_ETHERNET_MULTICAST_FILTERS 0x40 -#define USB_CDC_SET_ETHERNET_PM_PATTERN_FILTER 0x41 -#define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER 0x42 -#define USB_CDC_SET_ETHERNET_PACKET_FILTER 0x43 -#define USB_CDC_GET_ETHERNET_STATISTIC 0x44 - -/* Line Coding Structure from CDC spec 6.2.13 */ -struct usb_cdc_line_coding { - u32 dwDTERate; - u8 bCharFormat; -#define USB_CDC_1_STOP_BITS 0 -#define USB_CDC_1_5_STOP_BITS 1 -#define USB_CDC_2_STOP_BITS 2 - - u8 bParityType; -#define USB_CDC_NO_PARITY 0 -#define USB_CDC_ODD_PARITY 1 -#define USB_CDC_EVEN_PARITY 2 -#define USB_CDC_MARK_PARITY 3 -#define USB_CDC_SPACE_PARITY 4 - - u8 bDataBits; -} UPACKED; - -/* table 62; bits in multicast filter */ -#define USB_CDC_PACKET_TYPE_PROMISCUOUS (1 << 0) -#define USB_CDC_PACKET_TYPE_ALL_MULTICAST (1 << 1) /* no filter */ -#define USB_CDC_PACKET_TYPE_DIRECTED (1 << 2) -#define USB_CDC_PACKET_TYPE_BROADCAST (1 << 3) -#define USB_CDC_PACKET_TYPE_MULTICAST (1 << 4) /* filtered */ - - -/*-------------------------------------------------------------------------*/ - -/* - * Class-Specific Notifications (6.3) sent by interrupt transfers - * - * section 3.8.2 table 11 of the CDC spec lists Ethernet notifications - * section 3.6.2.1 table 5 specifies ACM notifications, accepted by RNDIS - * RNDIS also defines its own bit-incompatible notifications - */ - -#define USB_CDC_NOTIFY_NETWORK_CONNECTION 0x00 -#define USB_CDC_NOTIFY_RESPONSE_AVAILABLE 0x01 -#define USB_CDC_NOTIFY_SERIAL_STATE 0x20 -#define USB_CDC_NOTIFY_SPEED_CHANGE 0x2a - -struct usb_cdc_notification { - u8 bmRequestType; - u8 bNotificationType; - u16 wValue; - u16 wIndex; - u16 wLength; -}UPACKED; -//ModifiedByJD (<<<) - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_list.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_list.h deleted file mode 100644 index 89cc325..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_list.h +++ /dev/null @@ -1,594 +0,0 @@ -/* $OpenBSD: queue.h,v 1.26 2004/05/04 16:59:32 grange Exp $ */ -/* $NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $ */ - -/* - * Copyright (c) 1991, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)queue.h 8.5 (Berkeley) 8/20/94 - */ - -#ifndef _DWC_LIST_H_ -#define _DWC_LIST_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/** @file - * - * This file defines linked list operations. It is derived from BSD with - * only the MACRO names being prefixed with DWC_. This is because a few of - * these names conflict with those on Linux. For documentation on use, see the - * inline comments in the source code. The original license for this source - * code applies and is preserved in the dwc_list.h source file. - */ - -/* - * This file defines five types of data structures: singly-linked lists, - * lists, simple queues, tail queues, and circular queues. - * - * - * A singly-linked list is headed by a single forward pointer. The elements - * are singly linked for minimum space and pointer manipulation overhead at - * the expense of O(n) removal for arbitrary elements. New elements can be - * added to the list after an existing element or at the head of the list. - * Elements being removed from the head of the list should use the explicit - * macro for this purpose for optimum efficiency. A singly-linked list may - * only be traversed in the forward direction. Singly-linked lists are ideal - * for applications with large datasets and few or no removals or for - * implementing a LIFO queue. - * - * A list is headed by a single forward pointer (or an array of forward - * pointers for a hash table header). The elements are doubly linked - * so that an arbitrary element can be removed without a need to - * traverse the list. New elements can be added to the list before - * or after an existing element or at the head of the list. A list - * may only be traversed in the forward direction. - * - * A simple queue is headed by a pair of pointers, one the head of the - * list and the other to the tail of the list. The elements are singly - * linked to save space, so elements can only be removed from the - * head of the list. New elements can be added to the list before or after - * an existing element, at the head of the list, or at the end of the - * list. A simple queue may only be traversed in the forward direction. - * - * A tail queue is headed by a pair of pointers, one to the head of the - * list and the other to the tail of the list. The elements are doubly - * linked so that an arbitrary element can be removed without a need to - * traverse the list. New elements can be added to the list before or - * after an existing element, at the head of the list, or at the end of - * the list. A tail queue may be traversed in either direction. - * - * A circle queue is headed by a pair of pointers, one to the head of the - * list and the other to the tail of the list. The elements are doubly - * linked so that an arbitrary element can be removed without a need to - * traverse the list. New elements can be added to the list before or after - * an existing element, at the head of the list, or at the end of the list. - * A circle queue may be traversed in either direction, but has a more - * complex end of list detection. - * - * For details on the use of these macros, see the queue(3) manual page. - */ - -/* - * Double-linked List. - */ - -typedef struct dwc_list_link { - struct dwc_list_link *next; - struct dwc_list_link *prev; -} dwc_list_link_t; - -#define DWC_LIST_INIT(link) do { \ - (link)->next = (link); \ - (link)->prev = (link); \ -} while (0) - -#define DWC_LIST_FIRST(link) ((link)->next) -#define DWC_LIST_LAST(link) ((link)->prev) -#define DWC_LIST_END(link) (link) -#define DWC_LIST_NEXT(link) ((link)->next) -#define DWC_LIST_PREV(link) ((link)->prev) -#define DWC_LIST_EMPTY(link) \ - (DWC_LIST_FIRST(link) == DWC_LIST_END(link)) -#define DWC_LIST_ENTRY(link, type, field) \ - (type *)((uint8_t *)(link) - (size_t)(&((type *)0)->field)) - -#if 0 -#define DWC_LIST_INSERT_HEAD(list, link) do { \ - (link)->next = (list)->next; \ - (link)->prev = (list); \ - (list)->next->prev = (link); \ - (list)->next = (link); \ -} while (0) - -#define DWC_LIST_INSERT_TAIL(list, link) do { \ - (link)->next = (list); \ - (link)->prev = (list)->prev; \ - (list)->prev->next = (link); \ - (list)->prev = (link); \ -} while (0) -#else -#define DWC_LIST_INSERT_HEAD(list, link) do { \ - dwc_list_link_t *__next__ = (list)->next; \ - __next__->prev = (link); \ - (link)->next = __next__; \ - (link)->prev = (list); \ - (list)->next = (link); \ -} while (0) - -#define DWC_LIST_INSERT_TAIL(list, link) do { \ - dwc_list_link_t *__prev__ = (list)->prev; \ - (list)->prev = (link); \ - (link)->next = (list); \ - (link)->prev = __prev__; \ - __prev__->next = (link); \ -} while (0) -#endif - -#if 0 -static inline void __list_add(struct list_head *new, - struct list_head *prev, - struct list_head *next) -{ - next->prev = new; - new->next = next; - new->prev = prev; - prev->next = new; -} - -static inline void list_add(struct list_head *new, struct list_head *head) -{ - __list_add(new, head, head->next); -} - -static inline void list_add_tail(struct list_head *new, struct list_head *head) -{ - __list_add(new, head->prev, head); -} - -static inline void __list_del(struct list_head * prev, struct list_head * next) -{ - next->prev = prev; - prev->next = next; -} - -static inline void list_del(struct list_head *entry) -{ - __list_del(entry->prev, entry->next); - entry->next = LIST_POISON1; - entry->prev = LIST_POISON2; -} -#endif - -#define DWC_LIST_REMOVE(link) do { \ - (link)->next->prev = (link)->prev; \ - (link)->prev->next = (link)->next; \ -} while (0) - -#define DWC_LIST_REMOVE_INIT(link) do { \ - DWC_LIST_REMOVE(link); \ - DWC_LIST_INIT(link); \ -} while (0) - -#define DWC_LIST_MOVE_HEAD(list, link) do { \ - DWC_LIST_REMOVE(link); \ - DWC_LIST_INSERT_HEAD(list, link); \ -} while (0) - -#define DWC_LIST_MOVE_TAIL(list, link) do { \ - DWC_LIST_REMOVE(link); \ - DWC_LIST_INSERT_TAIL(list, link); \ -} while (0) - -#define DWC_LIST_FOREACH(var, list) \ - for((var) = DWC_LIST_FIRST(list); \ - (var) != DWC_LIST_END(list); \ - (var) = DWC_LIST_NEXT(var)) - -#define DWC_LIST_FOREACH_SAFE(var, var2, list) \ - for((var) = DWC_LIST_FIRST(list), (var2) = DWC_LIST_NEXT(var); \ - (var) != DWC_LIST_END(list); \ - (var) = (var2), (var2) = DWC_LIST_NEXT(var2)) - -#define DWC_LIST_FOREACH_REVERSE(var, list) \ - for((var) = DWC_LIST_LAST(list); \ - (var) != DWC_LIST_END(list); \ - (var) = DWC_LIST_PREV(var)) - -/* - * Singly-linked List definitions. - */ -#define DWC_SLIST_HEAD(name, type) \ -struct name { \ - struct type *slh_first; /* first element */ \ -} - -#define DWC_SLIST_HEAD_INITIALIZER(head) \ - { NULL } - -#define DWC_SLIST_ENTRY(type) \ -struct { \ - struct type *sle_next; /* next element */ \ -} - -/* - * Singly-linked List access methods. - */ -#define DWC_SLIST_FIRST(head) ((head)->slh_first) -#define DWC_SLIST_END(head) NULL -#define DWC_SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head)) -#define DWC_SLIST_NEXT(elm, field) ((elm)->field.sle_next) - -#define DWC_SLIST_FOREACH(var, head, field) \ - for((var) = SLIST_FIRST(head); \ - (var) != SLIST_END(head); \ - (var) = SLIST_NEXT(var, field)) - -#define DWC_SLIST_FOREACH_PREVPTR(var, varp, head, field) \ - for((varp) = &SLIST_FIRST((head)); \ - ((var) = *(varp)) != SLIST_END(head); \ - (varp) = &SLIST_NEXT((var), field)) - -/* - * Singly-linked List functions. - */ -#define DWC_SLIST_INIT(head) { \ - SLIST_FIRST(head) = SLIST_END(head); \ -} - -#define DWC_SLIST_INSERT_AFTER(slistelm, elm, field) do { \ - (elm)->field.sle_next = (slistelm)->field.sle_next; \ - (slistelm)->field.sle_next = (elm); \ -} while (0) - -#define DWC_SLIST_INSERT_HEAD(head, elm, field) do { \ - (elm)->field.sle_next = (head)->slh_first; \ - (head)->slh_first = (elm); \ -} while (0) - -#define DWC_SLIST_REMOVE_NEXT(head, elm, field) do { \ - (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \ -} while (0) - -#define DWC_SLIST_REMOVE_HEAD(head, field) do { \ - (head)->slh_first = (head)->slh_first->field.sle_next; \ -} while (0) - -#define DWC_SLIST_REMOVE(head, elm, type, field) do { \ - if ((head)->slh_first == (elm)) { \ - SLIST_REMOVE_HEAD((head), field); \ - } \ - else { \ - struct type *curelm = (head)->slh_first; \ - while( curelm->field.sle_next != (elm) ) \ - curelm = curelm->field.sle_next; \ - curelm->field.sle_next = \ - curelm->field.sle_next->field.sle_next; \ - } \ -} while (0) - -/* - * Simple queue definitions. - */ -#define DWC_SIMPLEQ_HEAD(name, type) \ -struct name { \ - struct type *sqh_first; /* first element */ \ - struct type **sqh_last; /* addr of last next element */ \ -} - -#define DWC_SIMPLEQ_HEAD_INITIALIZER(head) \ - { NULL, &(head).sqh_first } - -#define DWC_SIMPLEQ_ENTRY(type) \ -struct { \ - struct type *sqe_next; /* next element */ \ -} - -/* - * Simple queue access methods. - */ -#define DWC_SIMPLEQ_FIRST(head) ((head)->sqh_first) -#define DWC_SIMPLEQ_END(head) NULL -#define DWC_SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head)) -#define DWC_SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) - -#define DWC_SIMPLEQ_FOREACH(var, head, field) \ - for((var) = SIMPLEQ_FIRST(head); \ - (var) != SIMPLEQ_END(head); \ - (var) = SIMPLEQ_NEXT(var, field)) - -/* - * Simple queue functions. - */ -#define DWC_SIMPLEQ_INIT(head) do { \ - (head)->sqh_first = NULL; \ - (head)->sqh_last = &(head)->sqh_first; \ -} while (0) - -#define DWC_SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ - if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \ - (head)->sqh_last = &(elm)->field.sqe_next; \ - (head)->sqh_first = (elm); \ -} while (0) - -#define DWC_SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ - (elm)->field.sqe_next = NULL; \ - *(head)->sqh_last = (elm); \ - (head)->sqh_last = &(elm)->field.sqe_next; \ -} while (0) - -#define DWC_SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ - if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\ - (head)->sqh_last = &(elm)->field.sqe_next; \ - (listelm)->field.sqe_next = (elm); \ -} while (0) - -#define DWC_SIMPLEQ_REMOVE_HEAD(head, field) do { \ - if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \ - (head)->sqh_last = &(head)->sqh_first; \ -} while (0) - -/* - * Tail queue definitions. - */ -#define DWC_TAILQ_HEAD(name, type) \ -struct name { \ - struct type *tqh_first; /* first element */ \ - struct type **tqh_last; /* addr of last next element */ \ -} - -#define DWC_TAILQ_HEAD_INITIALIZER(head) \ - { NULL, &(head).tqh_first } - -#define DWC_TAILQ_ENTRY(type) \ -struct { \ - struct type *tqe_next; /* next element */ \ - struct type **tqe_prev; /* address of previous next element */ \ -} - -/* - * tail queue access methods - */ -#define DWC_TAILQ_FIRST(head) ((head)->tqh_first) -#define DWC_TAILQ_END(head) NULL -#define DWC_TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) -#define DWC_TAILQ_LAST(head, headname) \ - (*(((struct headname *)((head)->tqh_last))->tqh_last)) -/* XXX */ -#define DWC_TAILQ_PREV(elm, headname, field) \ - (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) -#define DWC_TAILQ_EMPTY(head) \ - (TAILQ_FIRST(head) == TAILQ_END(head)) - -#define DWC_TAILQ_FOREACH(var, head, field) \ - for((var) = TAILQ_FIRST(head); \ - (var) != TAILQ_END(head); \ - (var) = TAILQ_NEXT(var, field)) - -#define DWC_TAILQ_FOREACH_REVERSE(var, head, headname, field) \ - for((var) = TAILQ_LAST(head, headname); \ - (var) != TAILQ_END(head); \ - (var) = TAILQ_PREV(var, headname, field)) - -/* - * Tail queue functions. - */ -#define DWC_TAILQ_INIT(head) do { \ - (head)->tqh_first = NULL; \ - (head)->tqh_last = &(head)->tqh_first; \ -} while (0) - -#define DWC_TAILQ_INSERT_HEAD(head, elm, field) do { \ - if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ - (head)->tqh_first->field.tqe_prev = \ - &(elm)->field.tqe_next; \ - else \ - (head)->tqh_last = &(elm)->field.tqe_next; \ - (head)->tqh_first = (elm); \ - (elm)->field.tqe_prev = &(head)->tqh_first; \ -} while (0) - -#define DWC_TAILQ_INSERT_TAIL(head, elm, field) do { \ - (elm)->field.tqe_next = NULL; \ - (elm)->field.tqe_prev = (head)->tqh_last; \ - *(head)->tqh_last = (elm); \ - (head)->tqh_last = &(elm)->field.tqe_next; \ -} while (0) - -#define DWC_TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ - if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ - (elm)->field.tqe_next->field.tqe_prev = \ - &(elm)->field.tqe_next; \ - else \ - (head)->tqh_last = &(elm)->field.tqe_next; \ - (listelm)->field.tqe_next = (elm); \ - (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ -} while (0) - -#define DWC_TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ - (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ - (elm)->field.tqe_next = (listelm); \ - *(listelm)->field.tqe_prev = (elm); \ - (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ -} while (0) - -#define DWC_TAILQ_REMOVE(head, elm, field) do { \ - if (((elm)->field.tqe_next) != NULL) \ - (elm)->field.tqe_next->field.tqe_prev = \ - (elm)->field.tqe_prev; \ - else \ - (head)->tqh_last = (elm)->field.tqe_prev; \ - *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ -} while (0) - -#define DWC_TAILQ_REPLACE(head, elm, elm2, field) do { \ - if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \ - (elm2)->field.tqe_next->field.tqe_prev = \ - &(elm2)->field.tqe_next; \ - else \ - (head)->tqh_last = &(elm2)->field.tqe_next; \ - (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \ - *(elm2)->field.tqe_prev = (elm2); \ -} while (0) - -/* - * Circular queue definitions. - */ -#define DWC_CIRCLEQ_HEAD(name, type) \ -struct name { \ - struct type *cqh_first; /* first element */ \ - struct type *cqh_last; /* last element */ \ -} - -#define DWC_CIRCLEQ_HEAD_INITIALIZER(head) \ - { DWC_CIRCLEQ_END(&head), DWC_CIRCLEQ_END(&head) } - -#define DWC_CIRCLEQ_ENTRY(type) \ -struct { \ - struct type *cqe_next; /* next element */ \ - struct type *cqe_prev; /* previous element */ \ -} - -/* - * Circular queue access methods - */ -#define DWC_CIRCLEQ_FIRST(head) ((head)->cqh_first) -#define DWC_CIRCLEQ_LAST(head) ((head)->cqh_last) -#define DWC_CIRCLEQ_END(head) ((void *)(head)) -#define DWC_CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) -#define DWC_CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) -#define DWC_CIRCLEQ_EMPTY(head) \ - (DWC_CIRCLEQ_FIRST(head) == DWC_CIRCLEQ_END(head)) - -#define DWC_CIRCLEQ_EMPTY_ENTRY(elm, field) (((elm)->field.cqe_next == NULL) && ((elm)->field.cqe_prev == NULL)) - -#define DWC_CIRCLEQ_FOREACH(var, head, field) \ - for((var) = DWC_CIRCLEQ_FIRST(head); \ - (var) != DWC_CIRCLEQ_END(head); \ - (var) = DWC_CIRCLEQ_NEXT(var, field)) - -#define DWC_CIRCLEQ_FOREACH_SAFE(var, var2, head, field) \ - for((var) = DWC_CIRCLEQ_FIRST(head), var2 = DWC_CIRCLEQ_NEXT(var, field); \ - (var) != DWC_CIRCLEQ_END(head); \ - (var) = var2, var2 = DWC_CIRCLEQ_NEXT(var, field)) - -#define DWC_CIRCLEQ_FOREACH_REVERSE(var, head, field) \ - for((var) = DWC_CIRCLEQ_LAST(head); \ - (var) != DWC_CIRCLEQ_END(head); \ - (var) = DWC_CIRCLEQ_PREV(var, field)) - -/* - * Circular queue functions. - */ -#define DWC_CIRCLEQ_INIT(head) do { \ - (head)->cqh_first = DWC_CIRCLEQ_END(head); \ - (head)->cqh_last = DWC_CIRCLEQ_END(head); \ -} while (0) - -#define DWC_CIRCLEQ_INIT_ENTRY(elm, field) do { \ - (elm)->field.cqe_next = NULL; \ - (elm)->field.cqe_prev = NULL; \ -} while (0) - -#define DWC_CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ - (elm)->field.cqe_next = (listelm)->field.cqe_next; \ - (elm)->field.cqe_prev = (listelm); \ - if ((listelm)->field.cqe_next == DWC_CIRCLEQ_END(head)) \ - (head)->cqh_last = (elm); \ - else \ - (listelm)->field.cqe_next->field.cqe_prev = (elm); \ - (listelm)->field.cqe_next = (elm); \ -} while (0) - -#define DWC_CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ - (elm)->field.cqe_next = (listelm); \ - (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ - if ((listelm)->field.cqe_prev == DWC_CIRCLEQ_END(head)) \ - (head)->cqh_first = (elm); \ - else \ - (listelm)->field.cqe_prev->field.cqe_next = (elm); \ - (listelm)->field.cqe_prev = (elm); \ -} while (0) - -#define DWC_CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ - (elm)->field.cqe_next = (head)->cqh_first; \ - (elm)->field.cqe_prev = DWC_CIRCLEQ_END(head); \ - if ((head)->cqh_last == DWC_CIRCLEQ_END(head)) \ - (head)->cqh_last = (elm); \ - else \ - (head)->cqh_first->field.cqe_prev = (elm); \ - (head)->cqh_first = (elm); \ -} while (0) - -#define DWC_CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ - (elm)->field.cqe_next = DWC_CIRCLEQ_END(head); \ - (elm)->field.cqe_prev = (head)->cqh_last; \ - if ((head)->cqh_first == DWC_CIRCLEQ_END(head)) \ - (head)->cqh_first = (elm); \ - else \ - (head)->cqh_last->field.cqe_next = (elm); \ - (head)->cqh_last = (elm); \ -} while (0) - -#define DWC_CIRCLEQ_REMOVE(head, elm, field) do { \ - if ((elm)->field.cqe_next == DWC_CIRCLEQ_END(head)) \ - (head)->cqh_last = (elm)->field.cqe_prev; \ - else \ - (elm)->field.cqe_next->field.cqe_prev = \ - (elm)->field.cqe_prev; \ - if ((elm)->field.cqe_prev == DWC_CIRCLEQ_END(head)) \ - (head)->cqh_first = (elm)->field.cqe_next; \ - else \ - (elm)->field.cqe_prev->field.cqe_next = \ - (elm)->field.cqe_next; \ -} while (0) - -#define DWC_CIRCLEQ_REMOVE_INIT(head, elm, field) do { \ - DWC_CIRCLEQ_REMOVE(head, elm, field); \ - DWC_CIRCLEQ_INIT_ENTRY(elm, field); \ -} while (0) - -#define DWC_CIRCLEQ_REPLACE(head, elm, elm2, field) do { \ - if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \ - DWC_CIRCLEQ_END(head)) \ - (head).cqh_last = (elm2); \ - else \ - (elm2)->field.cqe_next->field.cqe_prev = (elm2); \ - if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == \ - DWC_CIRCLEQ_END(head)) \ - (head).cqh_first = (elm2); \ - else \ - (elm2)->field.cqe_prev->field.cqe_next = (elm2); \ -} while (0) - -#ifdef __cplusplus -} -#endif - -#endif /* _DWC_LIST_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_os.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_os.h deleted file mode 100644 index cc56efc..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_os.h +++ /dev/null @@ -1,1102 +0,0 @@ -/* ========================================================================= - * $File: //dwh/usb_iip/dev/software/dwc_common_port_2/dwc_os.h $ - * $Revision: #14 $ - * $Date: 2010/11/04 $ - * $Change: 1621695 $ - * - * Synopsys Portability Library Software and documentation - * (hereinafter, "Software") is an Unsupported proprietary work of - * Synopsys, Inc. unless otherwise expressly agreed to in writing - * between Synopsys and you. - * - * The Software IS NOT an item of Licensed Software or Licensed Product - * under any End User Software License Agreement or Agreement for - * Licensed Product with Synopsys or any supplement thereto. You are - * permitted to use and redistribute this Software in source and binary - * forms, with or without modification, provided that redistributions - * of source code must retain this notice. You may not view, use, - * disclose, copy or distribute this file or any information contained - * herein except pursuant to this license grant from Synopsys. If you - * do not agree with this notice, including the disclaimer below, then - * you are not authorized to use the Software. - * - * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" - * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL - * SYNOPSYS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * ========================================================================= */ -#ifndef _DWC_OS_H_ -#define _DWC_OS_H_ - -#include "basic_types.h" -#include -//#include "va_list.h" -#include - -#include "diag.h" -#include "dwc_otg_dbg.h" - -#ifdef __cplusplus -extern "C" { -#endif -extern -_LONG_CALL_ u32 -DiagPrintf( - IN const char *fmt, ... -); - - -/** @file - * - * DWC portability library, low level os-wrapper functions - * - */ - -/* These basic types need to be defined by some OS header file or custom header - * file for your specific target architecture. - * - * uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t - * - * Any custom or alternate header file must be added and enabled here. - */ -#if 0//8195A_PORTING -#else -#define DWC_OS_PORTING 1 -#endif - -#include "errno.h" - -/** @name Primitive Types and Values */ - -/** We define a boolean type for consistency. Can be either YES or NO */ -typedef uint8_t dwc_bool_t; -#define YES 1 -#define NO 0 - -/** Compile Flag Definition */ -#define __OTG_LITTLE_ENDIAN -#undef DWC_CRYPTOLIB -#undef DWC_DEBUG_REGS -#undef DWC_DEBUG_MEMORY -#undef DWC_UTFLIB -#undef CONFIG_DEBUG_MUTEXES -#define DWC_WITH_WLAN_OSDEP 1 - - -#ifdef DWC_OS_PORTING - -/** @name Error Codes */ -#define DWC_E_INVALID EINVAL -#define DWC_E_NO_MEMORY ENOMEM -#define DWC_E_NO_DEVICE ENODEV -#define DWC_E_NOT_SUPPORTED EOPNOTSUPP -#define DWC_E_TIMEOUT ETIMEDOUT -#define DWC_E_BUSY EBUSY -#define DWC_E_AGAIN EAGAIN -#define DWC_E_RESTART ERESTART -#define DWC_E_ABORT ECONNABORTED -#define DWC_E_SHUTDOWN ESHUTDOWN -#define DWC_E_NO_DATA ENODATA -#define DWC_E_DISCONNECT ECONNRESET -#define DWC_E_UNKNOWN EINVAL -#define DWC_E_NO_STREAM_RES ENOSR -#define DWC_E_COMMUNICATION ECOMM -#define DWC_E_OVERFLOW EOVERFLOW -#define DWC_E_PROTOCOL EPROTO -#define DWC_E_IN_PROGRESS EINPROGRESS -#define DWC_E_PIPE EPIPE -#define DWC_E_IO EIO -#define DWC_E_NO_SPACE ENOSPC - -#else - -/** @name Error Codes */ -#define DWC_E_INVALID 1001 -#define DWC_E_NO_MEMORY 1002 -#define DWC_E_NO_DEVICE 1003 -#define DWC_E_NOT_SUPPORTED 1004 -#define DWC_E_TIMEOUT 1005 -#define DWC_E_BUSY 1006 -#define DWC_E_AGAIN 1007 -#define DWC_E_RESTART 1008 -#define DWC_E_ABORT 1009 -#define DWC_E_SHUTDOWN 1010 -#define DWC_E_NO_DATA 1011 -#define DWC_E_DISCONNECT 2000 -#define DWC_E_UNKNOWN 3000 -#define DWC_E_NO_STREAM_RES 4001 -#define DWC_E_COMMUNICATION 4002 -#define DWC_E_OVERFLOW 4003 -#define DWC_E_PROTOCOL 4004 -#define DWC_E_IN_PROGRESS 4005 -#define DWC_E_PIPE 4006 -#define DWC_E_IO 4007 -#define DWC_E_NO_SPACE 4008 - -#endif - - -/** @name Tracing/Logging Functions - * - * These function provide the capability to add tracing, debugging, and error - * messages, as well exceptions as assertions. The WUDEV uses these - * extensively. These could be logged to the main console, the serial port, an - * internal buffer, etc. These functions could also be no-op if they are too - * expensive on your system. By default undefining the DEBUG macro already - * no-ops some of these functions. */ - -/** Returns non-zero if in interrupt context. */ -extern _LONG_CALL_ dwc_bool_t DWC_IN_IRQ(void); -#define dwc_in_irq DWC_IN_IRQ - -/** Returns "IRQ" if DWC_IN_IRQ is true. */ -extern _LONG_CALL_ char *dwc_irq(void); - -/** Returns non-zero if in bottom-half context. */ -extern _LONG_CALL_ dwc_bool_t DWC_IN_BH(void); -#define dwc_in_bh DWC_IN_BH - -/** Returns "BH" if DWC_IN_BH is true. */ -extern _LONG_CALL_ char *dwc_bh(void); - -/** - * A vprintf() clone. Just call vprintf if you've got it. - */ -#if 0 -extern void DWC_VPRINTF(char *format, va_list args); -#define dwc_vprintf DWC_VPRINTF -#endif -/** - * A vsnprintf() clone. Just call vprintf if you've got it. - */ -extern _LONG_CALL_ int DWC_VSNPRINTF(char *str, int size, char *format, va_list args); -#define dwc_vsnprintf DWC_VSNPRINTF - -/** - * printf() clone. Just call printf if you've go it. - */ -#ifdef OTGDEBUG -#define DWC_PRINTF(format...) do{ DBG_8195A_OTG(format); }while(0) -#else -#define DWC_PRINTF(format...) -#endif - -//extern void DWC_PRINTF(char *format, ...) -/* This provides compiler level static checking of the parameters if you're - * using GCC. */ -#if 0 -#ifdef __GNUC__ - __attribute__ ((format(printf, 1, 2))); -#else - ; -#endif -#endif -#define dwc_printf DWC_PRINTF - -/** - * sprintf() clone. Just call sprintf if you've got it. - */ -extern _LONG_CALL_ int DWC_SPRINTF(char *string, char *format, ...) -#if 0//def __GNUC__ - __attribute__ ((format(prvDiagPrintf, 2, 3))); -#else - ; -#endif -#define dwc_sprintf DWC_SPRINTF - -/** - * snprintf() clone. Just call snprintf if you've got it. - */ -extern _LONG_CALL_ int DWC_SNPRINTF(char *string, int size, char *format, ...) -#if 0//def __GNUC__ - __attribute__ ((format(prvDiagPrintf, 3, 4))); -#else - ; -#endif -#define dwc_snprintf DWC_SNPRINTF - -/** - * Prints a WARNING message. On systems that don't differentiate between - * warnings and regular log messages, just print it. Indicates that something - * may be wrong with the driver. Works like printf(). - * - * Use the DWC_WARN macro to call this function. - */ -extern _LONG_CALL_ void __DWC_WARN(char *format, ...) -#if 0//def __GNUC__ - __attribute__ ((format(prvDiagPrintf, 1, 2))); -#else - ; -#endif - -/** - * Prints an error message. On systems that don't differentiate between errors - * and regular log messages, just print it. Indicates that something went wrong - * with the driver. Works like printf(). - * - * Use the DWC_ERROR macro to call this function. - */ -extern _LONG_CALL_ void __DWC_ERROR(char *format, ...) -#if 0//def __GNUC__ - __attribute__ ((format(prvDiagPrintf, 1, 2))); -#else - ; -#endif - -/** - * Prints an exception error message and takes some user-defined action such as - * print out a backtrace or trigger a breakpoint. Indicates that something went - * abnormally wrong with the driver such as programmer error, or other - * exceptional condition. It should not be ignored so even on systems without - * printing capability, some action should be taken to notify the developer of - * it. Works like printf(). - */ -extern _LONG_CALL_ void DWC_EXCEPTION(char *format, ...) -#if 0//def __GNUC__ - __attribute__ ((format(prvDiagPrintf, 1, 2))); -#else - ; -#endif -#define dwc_exception DWC_EXCEPTION - -#ifdef OTGDEBUG -/** - * Prints out a debug message. Used for logging/trace messages. - * - * Use the DWC_DEBUG macro to call this function - */ -extern _LONG_CALL_ void __DWC_DEBUG(char *format, ...); -#if 0 -#ifdef __GNUC__ - __attribute__ ((format(printf, 1, 2))); -#else - ; -#endif -#endif -#else -#define __DWC_DEBUG(...) -#endif - -/** - * Prints out a Debug message. - */ -#define DWC_DEBUG(fmt, args...) DBG_8195A_OTG("\n\rDWC_DEBUG:" fmt, ## args) -#define dwc_debug DWC_DEBUG -/** - * Prints out an informative message. - */ -#define DWC_INFO(_format, _args...) DBG_8195A_OTG_INFO("INFO:%s: " _format "\n", \ - dwc_irq(), ## _args) -#define dwc_info DWC_INFO -/** - * Prints out a warning message. - */ -#define DWC_WARN(_format, _args...) DBG_8195A_OTG_WARN("WARN:%s: " _format "\n", \ - dwc_irq(), ## _args) -#define dwc_warn DWC_WARN -/** - * Prints out an error message. - */ -#define DWC_ERROR(_format, _args...) DBG_8195A_OTG_ERR("ERROR:%s: " _format "\n", \ - dwc_irq(), ## _args) - -#define dwc_error DWC_ERROR - -#define DWC_PROTO_ERROR(_format, _args...) DBG_8195A_OTG_ERR("ERROR:%s: " _format "\n", \ - dwc_irq(), ## _args) -#define dwc_proto_error DWC_PROTO_ERROR - -#ifdef OTGDEBUG -/** Prints out a exception error message if the _expr expression fails. Disabled - * if DEBUG is not enabled. */ -#define DWC_ASSERT(_expr, _format, _args...) do { \ - if (!(_expr)) { DBG_8195A_OTG("%s: " _format "\n", dwc_irq(), \ - ## _args); } \ - } while (0) -#else -#define DWC_ASSERT(_x...) -#endif -#define dwc_assert DWC_ASSERT - - -/** @name Byte Ordering - * The following functions are for conversions between processor's byte ordering - * and specific ordering you want. - */ - -/** Converts 32 bit data in CPU byte ordering to little endian. */ -extern _LONG_CALL_ uint32_t DWC_CPU_TO_LE32(uint32_t *p); -#define dwc_cpu_to_le32 DWC_CPU_TO_LE32 - -/** Converts 32 bit data in CPU byte orderint to big endian. */ -extern _LONG_CALL_ uint32_t DWC_CPU_TO_BE32(uint32_t *p); -#define dwc_cpu_to_be32 DWC_CPU_TO_BE32 - -/** Converts 32 bit little endian data to CPU byte ordering. */ -extern _LONG_CALL_ uint32_t DWC_LE32_TO_CPU(uint32_t *p); -#define dwc_le32_to_cpu DWC_LE32_TO_CPU - -/** Converts 32 bit big endian data to CPU byte ordering. */ -extern _LONG_CALL_ uint32_t DWC_BE32_TO_CPU(uint32_t *p); -#define dwc_be32_to_cpu DWC_BE32_TO_CPU - -/** Converts 16 bit data in CPU byte ordering to little endian. */ -extern _LONG_CALL_ uint16_t DWC_CPU_TO_LE16(uint16_t *p); -#define dwc_cpu_to_le16 DWC_CPU_TO_LE16 - -/** Converts 16 bit data in CPU byte orderint to big endian. */ -extern _LONG_CALL_ uint16_t DWC_CPU_TO_BE16(uint16_t *p); -#define dwc_cpu_to_be16 DWC_CPU_TO_BE16 - -/** Converts 16 bit little endian data to CPU byte ordering. */ -extern _LONG_CALL_ uint16_t DWC_LE16_TO_CPU(uint16_t *p); -#define dwc_le16_to_cpu DWC_LE16_TO_CPU - -/** Converts 16 bit bi endian data to CPU byte ordering. */ -extern _LONG_CALL_ uint16_t DWC_BE16_TO_CPU(uint16_t *p); -#define dwc_be16_to_cpu DWC_BE16_TO_CPU - - -/** @name Register Read/Write - * - * The following six functions should be implemented to read/write registers of - * 32-bit and 64-bit sizes. All modules use this to read/write register values. - * The reg value is a pointer to the register calculated from the void *base - * variable passed into the driver when it is started. */ - - -/** @cond */ - -/** @name Some convenience MACROS used internally. Define DWC_DEBUG_REGS to log the - * register writes. */ - -#ifdef DWC_OS_PORTING - -# ifdef DWC_DEBUG_REGS -XXXX -#define dwc_define_read_write_reg_n(_reg,_container_type) \ -static inline uint32_t dwc_read_##_reg##_n(_container_type *container, int num) { \ - return DWC_READ_REG32(&container->regs->_reg[num]); \ -} \ -static inline void dwc_write_##_reg##_n(_container_type *container, int num, uint32_t data) { \ - DWC_DEBUG("WRITING %8s[%d]: %p: %08x", #_reg, num, \ - &(((uint32_t*)container->regs->_reg)[num]), data); \ - DWC_WRITE_REG32(&(((uint32_t*)container->regs->_reg)[num]), data); \ -} - -#define dwc_define_read_write_reg(_reg,_container_type) \ -static inline uint32_t dwc_read_##_reg(_container_type *container) { \ - return DWC_READ_REG32(&container->regs->_reg); \ -} \ -static inline void dwc_write_##_reg(_container_type *container, uint32_t data) { \ - DWC_DEBUG("WRITING %11s: %p: %08x", #_reg, &container->regs->_reg, data); \ - DWC_WRITE_REG32(&container->regs->_reg, data); \ -} - -# else /* DWC_DEBUG_REGS */ - -#define dwc_define_read_write_reg_n(_reg,_container_type) \ -static inline uint32_t dwc_read_##_reg##_n(_container_type *container, int num) { \ - return DWC_READ_REG32(&container->regs->_reg[num]); \ -} \ -static inline void dwc_write_##_reg##_n(_container_type *container, int num, uint32_t data) { \ - DWC_WRITE_REG32(&(((uint32_t*)container->regs->_reg)[num]), data); \ -} - -#define dwc_define_read_write_reg(_reg,_container_type) \ -static inline uint32_t dwc_read_##_reg(_container_type *container) { \ - return DWC_READ_REG32(&container->regs->_reg); \ -} \ -static inline void dwc_write_##_reg(_container_type *container, uint32_t data) { \ - DWC_WRITE_REG32(&container->regs->_reg, data); \ -} - -# endif /* DWC_DEBUG_REGS */ - -#endif /* DWC_OS_PORTING */ - - -/** @endcond */ - - -#ifdef DWC_CRYPTOLIB -XXX -/** @name Crypto Functions - * - * These are the low-level cryptographic functions used by the driver. */ - -/** Perform AES CBC */ -extern _LONG_CALL_ int DWC_AES_CBC(uint8_t *message, uint32_t messagelen, uint8_t *key, uint32_t keylen, uint8_t iv[16], uint8_t *out); -#define dwc_aes_cbc DWC_AES_CBC - -/** Fill the provided buffer with random bytes. These should be cryptographic grade random numbers. */ -extern _LONG_CALL_ void DWC_RANDOM_BYTES(uint8_t *buffer, uint32_t length); -#define dwc_random_bytes DWC_RANDOM_BYTES - -/** Perform the SHA-256 hash function */ -extern _LONG_CALL_ int DWC_SHA256(uint8_t *message, uint32_t len, uint8_t *out); -#define dwc_sha256 DWC_SHA256 - -/** Calculated the HMAC-SHA256 */ -extern _LONG_CALL_ int DWC_HMAC_SHA256(uint8_t *message, uint32_t messagelen, uint8_t *key, uint32_t keylen, uint8_t *out); -#define dwc_hmac_sha256 DWC_HMAC_SHA256 - -#endif /* DWC_CRYPTOLIB */ - - -/** @name Memory Allocation - * - * These function provide access to memory allocation. There are only 2 DMA - * functions and 3 Regular memory functions that need to be implemented. None - * of the memory debugging routines need to be implemented. The allocation - * routines all ZERO the contents of the memory. - * - * Defining DWC_DEBUG_MEMORY turns on memory debugging and statistic gathering. - * This checks for memory leaks, keeping track of alloc/free pairs. It also - * keeps track of how much memory the driver is using at any given time. */ - -#define DWC_PAGE_SIZE 4096 -#define DWC_PAGE_OFFSET(addr) (((uint32_t)addr) & 0xfff) -#define DWC_PAGE_ALIGNED(addr) ((((uint32_t)addr) & 0xfff) == 0) - -#define DWC_INVALID_DMA_ADDR 0x0 - -#ifdef DWC_OS_PORTING -/** Type for a DMA address */ -typedef dma_addr_t dwc_dma_t; -#endif - -#if 0//defined(DWC_FREEBSD) || defined(DWC_NETBSD) -typedef bus_addr_t dwc_dma_t; -#endif - -#if 0//def DWC_FREEBSD -typedef struct dwc_dmactx { - struct device *dev; - bus_dma_tag_t dma_tag; - bus_dmamap_t dma_map; - bus_addr_t dma_paddr; - void *dma_vaddr; -} dwc_dmactx_t; -#endif - -#if 0//def DWC_NETBSD -typedef struct dwc_dmactx { - struct device *dev; - bus_dma_tag_t dma_tag; - bus_dmamap_t dma_map; - bus_dma_segment_t segs[1]; - int nsegs; - bus_addr_t dma_paddr; - void *dma_vaddr; -} dwc_dmactx_t; -#endif - -/* @todo these functions will be added in the future */ -#if 0 -/** - * Creates a DMA pool from which you can allocate DMA buffers. Buffers - * allocated from this pool will be guaranteed to meet the size, alignment, and - * boundary requirements specified. - * - * @param[in] size Specifies the size of the buffers that will be allocated from - * this pool. - * @param[in] align Specifies the byte alignment requirements of the buffers - * allocated from this pool. Must be a power of 2. - * @param[in] boundary Specifies the N-byte boundary that buffers allocated from - * this pool must not cross. - * - * @returns A pointer to an internal opaque structure which is not to be - * accessed outside of these library functions. Use this handle to specify - * which pools to allocate/free DMA buffers from and also to destroy the pool, - * when you are done with it. - */ -extern dwc_pool_t *DWC_DMA_POOL_CREATE(uint32_t size, uint32_t align, uint32_t boundary); - -/** - * Destroy a DMA pool. All buffers allocated from that pool must be freed first. - */ -extern void DWC_DMA_POOL_DESTROY(dwc_pool_t *pool); - -/** - * Allocate a buffer from the specified DMA pool and zeros its contents. - */ -extern void *DWC_DMA_POOL_ALLOC(dwc_pool_t *pool, uint64_t *dma_addr); - -/** - * Free a previously allocated buffer from the DMA pool. - */ -extern void DWC_DMA_POOL_FREE(dwc_pool_t *pool, void *vaddr, void *daddr); -#endif - -/** Allocates a DMA capable buffer and zeroes its contents. */ -extern _LONG_CALL_ void *__DWC_DMA_ALLOC(void *dma_ctx, uint32_t size, dwc_dma_t *dma_addr); - -/** Allocates a DMA capable buffer and zeroes its contents in atomic contest */ -extern _LONG_CALL_ void *__DWC_DMA_ALLOC_ATOMIC(void *dma_ctx, uint32_t size, dwc_dma_t *dma_addr); - -/** Frees a previously allocated buffer. */ -extern _LONG_CALL_ void __DWC_DMA_FREE(void *dma_ctx, uint32_t size, void *virt_addr, dwc_dma_t dma_addr); - -/** Allocates a block of memory and zeroes its contents. */ -extern _LONG_CALL_ void *__DWC_ALLOC(void *mem_ctx, uint32_t size); - -/** Allocates a block of memory and zeroes its contents, in an atomic manner - * which can be used inside interrupt context. The size should be sufficiently - * small, a few KB at most, such that failures are not likely to occur. Can just call - * __DWC_ALLOC if it is atomic. */ -extern _LONG_CALL_ void *__DWC_ALLOC_ATOMIC(void *mem_ctx, uint32_t size); - -/** Frees a previously allocated buffer. */ -extern _LONG_CALL_ void __DWC_FREE(void *mem_ctx, void *addr); - -#ifndef DWC_DEBUG_MEMORY - -#define DWC_ALLOC(_size_) __DWC_ALLOC(NULL, _size_) -#define DWC_ALLOC_ATOMIC(_size_) __DWC_ALLOC_ATOMIC(NULL, _size_) -#define DWC_FREE(_addr_) __DWC_FREE(NULL, _addr_) - -#ifdef DWC_OS_PORTING -#define DWC_DMA_ALLOC(_size_,_dma_) __DWC_DMA_ALLOC(NULL, _size_, _dma_) -#define DWC_DMA_ALLOC_ATOMIC(_size_,_dma_) __DWC_DMA_ALLOC_ATOMIC(NULL, _size_,_dma_) -#define DWC_DMA_FREE(_size_,_virt_,_dma_) __DWC_DMA_FREE(NULL, _size_, _virt_, _dma_) -#endif - -#if defined(DWC_FREEBSD) || defined(DWC_NETBSD) -XXX -#define DWC_DMA_ALLOC __DWC_DMA_ALLOC -#define DWC_DMA_FREE __DWC_DMA_FREE -#endif - -#else /* DWC_DEBUG_MEMORY */ -XXX -extern void *dwc_alloc_debug(void *mem_ctx, uint32_t size, char const *func, int line); -extern void *dwc_alloc_atomic_debug(void *mem_ctx, uint32_t size, char const *func, int line); -extern void dwc_free_debug(void *mem_ctx, void *addr, char const *func, int line); -extern void *dwc_dma_alloc_debug(void *dma_ctx, uint32_t size, dwc_dma_t *dma_addr, - char const *func, int line); -extern void *dwc_dma_alloc_atomic_debug(void *dma_ctx, uint32_t size, dwc_dma_t *dma_addr, - char const *func, int line); -extern void dwc_dma_free_debug(void *dma_ctx, uint32_t size, void *virt_addr, - dwc_dma_t dma_addr, char const *func, int line); - -extern int dwc_memory_debug_start(void *mem_ctx); -extern void dwc_memory_debug_stop(void); -extern void dwc_memory_debug_report(void); - -#endif /* DWC_DEBUG_MEMORY */ - -#define dwc_alloc(_ctx_,_size_) DWC_ALLOC(_size_) -#define dwc_alloc_atomic(_ctx_,_size_) DWC_ALLOC_ATOMIC(_size_) -#define dwc_free(_ctx_,_addr_) DWC_FREE(_addr_) - -#ifdef DWC_OS_PORTING -/* Linux doesn't need any extra parameters for DMA buffer allocation, so we - * just throw away the DMA context parameter. - */ -#define dwc_dma_alloc(_ctx_,_size_,_dma_) DWC_DMA_ALLOC(_size_, _dma_) -#define dwc_dma_alloc_atomic(_ctx_,_size_,_dma_) DWC_DMA_ALLOC_ATOMIC(_size_, _dma_) -#define dwc_dma_free(_ctx_,_size_,_virt_,_dma_) DWC_DMA_FREE(_size_, _virt_, _dma_) -#endif - -#if 0//defined(DWC_FREEBSD) || defined(DWC_NETBSD) -/** BSD needs several extra parameters for DMA buffer allocation, so we pass - * them in using the DMA context parameter. - */ -#define dwc_dma_alloc DWC_DMA_ALLOC -#define dwc_dma_free DWC_DMA_FREE -#endif - - -/** @name Memory and String Processing */ - -/** memset() clone */ -extern _LONG_CALL_ void *DWC_MEMSET(void *dest, uint8_t byte, uint32_t size); -#define dwc_memset DWC_MEMSET - -/** memcpy() clone */ -extern _LONG_CALL_ void *DWC_MEMCPY(void *dest, void const *src, uint32_t size); -#define dwc_memcpy DWC_MEMCPY - -/** memmove() clone */ -extern _LONG_CALL_ void *DWC_MEMMOVE(void *dest, void *src, uint32_t size); -#define dwc_memmove DWC_MEMMOVE - -/** memcmp() clone */ -extern _LONG_CALL_ int DWC_MEMCMP(void *m1, void *m2, uint32_t size); -#define dwc_memcmp DWC_MEMCMP - -/** strcmp() clone */ -extern _LONG_CALL_ int DWC_STRCMP(void *s1, void *s2); -#define dwc_strcmp DWC_STRCMP - -/** strncmp() clone */ -extern _LONG_CALL_ int DWC_STRNCMP(void *s1, void *s2, uint32_t size); -#define dwc_strncmp DWC_STRNCMP - -/** strlen() clone, for NULL terminated ASCII strings */ -extern _LONG_CALL_ int DWC_STRLEN(char const *str); -#define dwc_strlen DWC_STRLEN - -/** strcpy() clone, for NULL terminated ASCII strings */ -extern _LONG_CALL_ char *DWC_STRCPY(char *to, const char *from); -#define dwc_strcpy DWC_STRCPY - -/** strdup() clone. If you wish to use memory allocation debugging, this - * implementation of strdup should use the DWC_* memory routines instead of - * calling a predefined strdup. Otherwise the memory allocated by this routine - * will not be seen by the debugging routines. */ -extern _LONG_CALL_ char *DWC_STRDUP(char const *str); -#define dwc_strdup(_ctx_,_str_) DWC_STRDUP(_str_) - -/** NOT an atoi() clone. Read the description carefully. Returns an integer - * converted from the string str in base 10 unless the string begins with a "0x" - * in which case it is base 16. String must be a NULL terminated sequence of - * ASCII characters and may optionally begin with whitespace, a + or -, and a - * "0x" prefix if base 16. The remaining characters must be valid digits for - * the number and end with a NULL character. If any invalid characters are - * encountered or it returns with a negative error code and the results of the - * conversion are undefined. On sucess it returns 0. Overflow conditions are - * undefined. An example implementation using atoi() can be referenced from the - * Linux implementation. */ -extern _LONG_CALL_ int DWC_ATOI(const char *str, int32_t *value); -#define dwc_atoi DWC_ATOI - -/** Same as above but for unsigned. */ -extern _LONG_CALL_ int DWC_ATOUI(const char *str, uint32_t *value); -#define dwc_atoui DWC_ATOUI - -#ifdef DWC_UTFLIB -XXX -/** This routine returns a UTF16LE unicode encoded string from a UTF8 string. */ -extern int DWC_UTF8_TO_UTF16LE(uint8_t const *utf8string, uint16_t *utf16string, unsigned len); -#define dwc_utf8_to_utf16le DWC_UTF8_TO_UTF16LE -#endif - - -/** @name Wait queues - * - * Wait queues provide a means of synchronizing between threads or processes. A - * process can block on a waitq if some condition is not true, waiting for it to - * become true. When the waitq is triggered all waiting process will get - * unblocked and the condition will be check again. Waitqs should be triggered - * every time a condition can potentially change.*/ -//struct dwc_waitq; - -/** Type for a waitq */ -//typedef struct dwc_waitq dwc_waitq_t; - -/** The type of waitq condition callback function. This is called every time - * condition is evaluated. */ -//typedef int (*dwc_waitq_condition_t)(void *data); - -/** Allocate a waitq */ -//extern dwc_waitq_t *DWC_WAITQ_ALLOC(void); -//#define dwc_waitq_alloc(_ctx_) DWC_WAITQ_ALLOC() - -/** Free a waitq */ -//extern void DWC_WAITQ_FREE(dwc_waitq_t *wq); -//#define dwc_waitq_free DWC_WAITQ_FREE - -/** Check the condition and if it is false, block on the waitq. When unblocked, check the - * condition again. The function returns when the condition becomes true. The return value - * is 0 on condition true, DWC_WAITQ_ABORTED on abort or killed, or DWC_WAITQ_UNKNOWN on error. */ -//extern int32_t DWC_WAITQ_WAIT(dwc_waitq_t *wq, dwc_waitq_condition_t cond, void *data); -//#define dwc_waitq_wait DWC_WAITQ_WAIT - -/** Check the condition and if it is false, block on the waitq. When unblocked, - * check the condition again. The function returns when the condition become - * true or the timeout has passed. The return value is 0 on condition true or - * DWC_TIMED_OUT on timeout, or DWC_WAITQ_ABORTED, or DWC_WAITQ_UNKNOWN on - * error. */ -//extern int32_t DWC_WAITQ_WAIT_TIMEOUT(dwc_waitq_t *wq, dwc_waitq_condition_t cond, -// void *data, int32_t msecs); -//#define dwc_waitq_wait_timeout DWC_WAITQ_WAIT_TIMEOUT - -/** Trigger a waitq, unblocking all processes. This should be called whenever a condition - * has potentially changed. */ -//extern void DWC_WAITQ_TRIGGER(dwc_waitq_t *wq); -//#define dwc_waitq_trigger DWC_WAITQ_TRIGGER - -/** Unblock all processes waiting on the waitq with an ABORTED result. */ -//extern void DWC_WAITQ_ABORT(dwc_waitq_t *wq); -//#define dwc_waitq_abort DWC_WAITQ_ABORT - - -/** @name Threads - * - * A thread must be explicitly stopped. It must check DWC_THREAD_SHOULD_STOP - * whenever it is woken up, and then return. The DWC_THREAD_STOP function - * returns the value from the thread. - */ - -/** @name Work queues - * - * Workqs are used to queue a callback function to be called at some later time, - * in another thread. */ -//struct dwc_workq; - -/** Type for a workq */ -typedef struct dwc_workq dwc_workq_t; - -/** The type of the callback function to be called. */ -//typedef void (*dwc_work_callback_t)(void *data); - -/** Allocate a workq */ -//extern dwc_workq_t *DWC_WORKQ_ALLOC(char *name); -//#define dwc_workq_alloc(_ctx_,_name_) DWC_WORKQ_ALLOC(_name_) - -/** Free a workq. All work must be completed before being freed. */ -//extern void DWC_WORKQ_FREE(dwc_workq_t *workq); -//#define dwc_workq_free DWC_WORKQ_FREE - -/** Schedule a callback on the workq, passing in data. The function will be - * scheduled at some later time. */ -//extern void DWC_WORKQ_SCHEDULE(dwc_workq_t *workq, dwc_work_callback_t cb, -// void *data, char *format, ...) -#if 0//def __GNUC__ - __attribute__ ((format(printf, 4, 5))); -#else - ; -#endif -//#define dwc_workq_schedule DWC_WORKQ_SCHEDULE - -/** Schedule a callback on the workq, that will be called until at least - * given number miliseconds have passed. */ -//extern void DWC_WORKQ_SCHEDULE_DELAYED(dwc_workq_t *workq, dwc_work_callback_t cb, -// void *data, uint32_t time, char *format, ...) -#if 0//def __GNUC__ - __attribute__ ((format(printf, 5, 6))); -#else - ; -#endif -//#define dwc_workq_schedule_delayed DWC_WORKQ_SCHEDULE_DELAYED - -/** The number of processes in the workq */ -//extern int DWC_WORKQ_PENDING(dwc_workq_t *workq); -//#define dwc_workq_pending DWC_WORKQ_PENDING - -/** Blocks until all the work in the workq is complete or timed out. Returns < - * 0 on timeout. */ -//extern int DWC_WORKQ_WAIT_WORK_DONE(dwc_workq_t *workq, int timeout); -//#define dwc_workq_wait_work_done DWC_WORKQ_WAIT_WORK_DONE - - - - -/** @name Tasklets - * - */ - -//struct dwc_tasklet; - -/** Type for a tasklet */ -typedef struct dwc_tasklet dwc_tasklet_t; - -/** The type of the callback function to be called */ -//typedef void (*dwc_tasklet_callback_t)(void *data); - -/** Allocates a tasklet */ -//extern dwc_tasklet_t *DWC_TASK_ALLOC(char *name, dwc_tasklet_callback_t cb, void *data); -//#define dwc_task_alloc(_ctx_,_name_,_cb_,_data_) DWC_TASK_ALLOC(_name_, _cb_, _data_) - -/** Frees a tasklet */ -//extern void DWC_TASK_FREE(dwc_tasklet_t *task); -//#define dwc_task_free DWC_TASK_FREE - -/** Schedules a tasklet to run */ -//extern void DWC_TASK_SCHEDULE(dwc_tasklet_t *task); -//#define dwc_task_schedule DWC_TASK_SCHEDULE - - -/** @name Timer - * - * Callbacks must be small and atomic. - */ -struct dwc_timer; - -/** Type for a timer */ -typedef struct dwc_timer dwc_timer_t; - -/** The type of the callback function to be called */ -typedef void (*dwc_timer_callback_t)(void *data); - -/** Allocates a timer */ -extern _LONG_CALL_ dwc_timer_t *DWC_TIMER_ALLOC(char *name, dwc_timer_callback_t cb, void *data); -#define dwc_timer_alloc(_ctx_,_name_,_cb_,_data_) DWC_TIMER_ALLOC(_name_,_cb_,_data_) - -/** Frees a timer */ -extern _LONG_CALL_ void DWC_TIMER_FREE(dwc_timer_t *timer); -#define dwc_timer_free DWC_TIMER_FREE - -/** Schedules the timer to run at time ms from now. And will repeat at every - * repeat_interval msec therafter - * - * Modifies a timer that is still awaiting execution to a new expiration time. - * The mod_time is added to the old time. */ -extern _LONG_CALL_ void DWC_TIMER_SCHEDULE(dwc_timer_t *timer, uint32_t time); -#define dwc_timer_schedule DWC_TIMER_SCHEDULE - -/** Disables the timer from execution. */ -extern _LONG_CALL_ void DWC_TIMER_CANCEL(dwc_timer_t *timer); -#define dwc_timer_cancel DWC_TIMER_CANCEL - - -/** @name Spinlocks - * - * These locks are used when the work between the lock/unlock is atomic and - * short. Interrupts are also disabled during the lock/unlock and thus they are - * suitable to lock between interrupt/non-interrupt context. They also lock - * between processes if you have multiple CPUs or Preemption. If you don't have - * multiple CPUS or Preemption, then the you can simply implement the - * DWC_SPINLOCK and DWC_SPINUNLOCK to disable and enable interrupts. Because - * the work between the lock/unlock is atomic, the process context will never - * change, and so you never have to lock between processes. */ - -struct dwc_spinlock; - -/** Type for a spinlock */ -typedef struct dwc_spinlock dwc_spinlock_t; - -/** Type for the 'flags' argument to spinlock funtions */ -typedef unsigned long dwc_irqflags_t; - -/** Returns an initialized lock variable. This function should allocate and - * initialize the OS-specific data structure used for locking. This data - * structure is to be used for the DWC_LOCK and DWC_UNLOCK functions and should - * be freed by the DWC_FREE_LOCK when it is no longer used. */ -extern _LONG_CALL_ dwc_spinlock_t *DWC_SPINLOCK_ALLOC(void); -#define dwc_spinlock_alloc(_ctx_) DWC_SPINLOCK_ALLOC() - -/** Frees an initialized lock variable. */ -extern _LONG_CALL_ void DWC_SPINLOCK_FREE(dwc_spinlock_t *lock); -#define dwc_spinlock_free(_ctx_,_lock_) DWC_SPINLOCK_FREE(_lock_) - -/** Disables interrupts and blocks until it acquires the lock. - * - * @param lock Pointer to the spinlock. - * @param flags Unsigned long for irq flags storage. - */ -extern _LONG_CALL_ void DWC_SPINLOCK_IRQSAVE(dwc_spinlock_t *lock, dwc_irqflags_t *flags); -#define dwc_spinlock_irqsave DWC_SPINLOCK_IRQSAVE - -/** Re-enables the interrupt and releases the lock. - * - * @param lock Pointer to the spinlock. - * @param flags Unsigned long for irq flags storage. Must be the same as was - * passed into DWC_LOCK. - */ -extern _LONG_CALL_ void DWC_SPINUNLOCK_IRQRESTORE(dwc_spinlock_t *lock, dwc_irqflags_t flags); -#define dwc_spinunlock_irqrestore DWC_SPINUNLOCK_IRQRESTORE - -/** Blocks until it acquires the lock. - * - * @param lock Pointer to the spinlock. - */ -extern _LONG_CALL_ void DWC_SPINLOCK(dwc_spinlock_t *lock); -#define dwc_spinlock DWC_SPINLOCK - -/** Releases the lock. - * - * @param lock Pointer to the spinlock. - */ -extern _LONG_CALL_ void DWC_SPINUNLOCK(dwc_spinlock_t *lock); -#define dwc_spinunlock DWC_SPINUNLOCK - - -/** @name Mutexes - * - * Unlike spinlocks Mutexes lock only between processes and the work between the - * lock/unlock CAN block, therefore it CANNOT be called from interrupt context. - */ - -struct dwc_mutex; - -/** Type for a mutex */ -typedef struct dwc_mutex dwc_mutex_t; - -/* For Linux Mutex Debugging make it inline because the debugging routines use - * the symbol to determine recursive locking. This makes it falsely think - * recursive locking occurs. */ -#if defined(DWC_OS_PORTING) && defined(CONFIG_DEBUG_MUTEXES) -#define DWC_MUTEX_ALLOC_LINUX_DEBUG(__mutexp) ({ \ - __mutexp = (dwc_mutex_t *)DWC_ALLOC(sizeof(struct mutex)); \ - mutex_init((struct mutex *)__mutexp); \ -}) -#endif - -/** Allocate a mutex */ -extern _LONG_CALL_ dwc_mutex_t *DWC_MUTEX_ALLOC(void); -#define dwc_mutex_alloc(_ctx_) DWC_MUTEX_ALLOC() - -/* For memory leak debugging when using Linux Mutex Debugging */ -#if defined(DWC_OS_PORTING) && defined(CONFIG_DEBUG_MUTEXES) -XXX -#define DWC_MUTEX_FREE(__mutexp) do { \ - mutex_destroy((struct mutex *)__mutexp); \ - DWC_FREE(__mutexp); \ -} while(0) -#else -/** Free a mutex */ -extern _LONG_CALL_ void DWC_MUTEX_FREE(dwc_mutex_t *mutex); -#define dwc_mutex_free(_ctx_,_mutex_) DWC_MUTEX_FREE(_mutex_) -#endif - -/** Lock a mutex */ -extern _LONG_CALL_ void DWC_MUTEX_LOCK(dwc_mutex_t *mutex); -#define dwc_mutex_lock DWC_MUTEX_LOCK - -/** Non-blocking lock returns 1 on successful lock. */ -extern _LONG_CALL_ int DWC_MUTEX_TRYLOCK(dwc_mutex_t *mutex); -#define dwc_mutex_trylock DWC_MUTEX_TRYLOCK - -/** Unlock a mutex */ -extern _LONG_CALL_ void DWC_MUTEX_UNLOCK(dwc_mutex_t *mutex); -#define dwc_mutex_unlock DWC_MUTEX_UNLOCK - - -/** @name Time */ - -/** Microsecond delay. - * - * @param usecs Microseconds to delay. - */ -extern _LONG_CALL_ void DWC_UDELAY(uint32_t usecs); -#define dwc_udelay DWC_UDELAY - -/** Millisecond delay. - * - * @param msecs Milliseconds to delay. - */ -extern _LONG_CALL_ void DWC_MDELAY(uint32_t msecs); -#define dwc_mdelay DWC_MDELAY - -/** Non-busy waiting. - * Sleeps for specified number of milliseconds. - * - * @param msecs Milliseconds to sleep. - */ -extern _LONG_CALL_ void DWC_MSLEEP(uint32_t msecs); -#define dwc_msleep DWC_MSLEEP - -extern _LONG_CALL_ void DWC_ENTER_CRITICAL(VOID); -extern _LONG_CALL_ void DWC_EXIT_CRITICAL(VOID); - -/** - * Returns number of milliseconds since boot. - */ -//extern uint32_t DWC_TIME(void); -//#define dwc_time DWC_TIME - - - - -/* @mainpage DWC Portability and Common Library - * - * This is the documentation for the DWC Portability and Common Library. - * - * @section intro Introduction - * - * The DWC Portability library consists of wrapper calls and data structures to - * all low-level functions which are typically provided by the OS. The WUDEV - * driver uses only these functions. In order to port the WUDEV driver, only - * the functions in this library need to be re-implemented, with the same - * behavior as documented here. - * - * The Common library consists of higher level functions, which rely only on - * calling the functions from the DWC Portability library. These common - * routines are shared across modules. Some of the common libraries need to be - * used directly by the driver programmer when porting WUDEV. Such as the - * parameter and notification libraries. - * - * @section low Portability Library OS Wrapper Functions - * - * Any function starting with DWC and in all CAPS is a low-level OS-wrapper that - * needs to be implemented when porting, for example DWC_MUTEX_ALLOC(). All of - * these functions are included in the dwc_os.h file. - * - * There are many functions here covering a wide array of OS services. Please - * see dwc_os.h for details, and implementation notes for each function. - * - * @section common Common Library Functions - * - * Any function starting with dwc and in all lowercase is a common library - * routine. These functions have a portable implementation and do not need to - * be reimplemented when porting. The common routines can be used by any - * driver, and some must be used by the end user to control the drivers. For - * example, you must use the Parameter common library in order to set the - * parameters in the WUDEV module. - * - * The common libraries consist of the following: - * - * - Connection Contexts - Used internally and can be used by end-user. See dwc_cc.h - * - Parameters - Used internally and can be used by end-user. See dwc_params.h - * - Notifications - Used internally and can be used by end-user. See dwc_notifier.h - * - Lists - Used internally and can be used by end-user. See dwc_list.h - * - Memory Debugging - Used internally and can be used by end-user. See dwc_os.h - * - Modpow - Used internally only. See dwc_modpow.h - * - DH - Used internally only. See dwc_dh.h - * - Crypto - Used internally only. See dwc_crypto.h - * - * - * @section prereq Prerequistes For dwc_os.h - * @subsection types Data Types - * - * The dwc_os.h file assumes that several low-level data types are pre defined for the - * compilation environment. These data types are: - * - * - uint8_t - unsigned 8-bit data type - * - int8_t - signed 8-bit data type - * - uint16_t - unsigned 16-bit data type - * - int16_t - signed 16-bit data type - * - uint32_t - unsigned 32-bit data type - * - int32_t - signed 32-bit data type - * - uint64_t - unsigned 64-bit data type - * - int64_t - signed 64-bit data type - * - * Ensure that these are defined before using dwc_os.h. The easiest way to do - * that is to modify the top of the file to include the appropriate header. - * This is already done for the Linux environment. If the DWC_OS_PORTING macro is - * defined, the correct header will be added. A standard header is - * also used for environments where standard C headers are available. - * - * @subsection stdarg Variable Arguments - * - * Variable arguments are provided by a standard C header . it is - * available in Both the Linux and ANSI C enviornment. An equivalent must be - * provided in your enviornment in order to use dwc_os.h with the debug and - * tracing message functionality. - * - * @subsection thread Threading - * - * WUDEV Core must be run on an operating system that provides for multiple - * threads/processes. Threading can be implemented in many ways, even in - * embedded systems without an operating system. At the bare minimum, the - * system should be able to start any number of processes at any time to handle - * special work. It need not be a pre-emptive system. Process context can - * change upon a call to a blocking function. The hardware interrupt context - * that calls the module's ISR() function must be differentiable from process - * context, even if your processes are impemented via a hardware interrupt. - * Further locking mechanism between process must exist (or be implemented), and - * process context must have a way to disable interrupts for a period of time to - * lock them out. If all of this exists, the functions in dwc_os.h related to - * threading should be able to be implemented with the defined behavior. - * - */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* _DWC_OS_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_adp.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_adp.h deleted file mode 100644 index eafa399..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_adp.h +++ /dev/null @@ -1,82 +0,0 @@ -/* ========================================================================== - * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_adp.h $ - * $Revision: #8 $ - * $Date: 2013/04/09 $ - * $Change: 2201932 $ - * - * Synopsys HS OTG Linux Software Driver and documentation (hereinafter, - * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless - * otherwise expressly agreed to in writing between Synopsys and you. - * - * The Software IS NOT an item of Licensed Software or Licensed Product under - * any End User Software License Agreement or Agreement for Licensed Product - * with Synopsys or any supplement thereto. You are permitted to use and - * redistribute this Software in source and binary forms, with or without - * modification, provided that redistributions of source code must retain this - * notice. You may not view, use, disclose, copy or distribute this file or - * any information contained herein except pursuant to this license grant from - * Synopsys. If you do not agree with this notice, including the disclaimer - * below, then you are not authorized to use the Software. - * - * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * ========================================================================== */ - -#ifndef __DWC_OTG_ADP_H__ -#define __DWC_OTG_ADP_H__ - -/** - * @file - * - * This file contains the Attach Detect Protocol interfaces and defines - * (functions) and structures for Linux. - * - */ - -#define DWC_OTG_ADP_UNATTACHED 0 -#define DWC_OTG_ADP_ATTACHED 1 -#define DWC_OTG_ADP_UNKOWN 2 -#define HOST_RTIM_THRESHOLD 5 -#define DEVICE_RTIM_THRESHOLD 3 - -typedef struct dwc_otg_adp { - uint32_t adp_started; - uint32_t initial_probe; - int32_t probe_timer_values[2]; - uint32_t probe_enabled; - uint32_t sense_enabled; - dwc_timer_t *sense_timer; - uint32_t sense_timer_started; - dwc_timer_t *vbuson_timer; - uint32_t vbuson_timer_started; - uint32_t attached; - uint32_t probe_counter; - uint32_t gpwrdn; -} dwc_otg_adp_t; - -/** - * Attach Detect Protocol functions - */ - -extern void dwc_otg_adp_write_reg(dwc_otg_core_if_t * core_if, uint32_t value); -extern uint32_t dwc_otg_adp_read_reg(dwc_otg_core_if_t * core_if); -extern uint32_t dwc_otg_adp_probe_start(dwc_otg_core_if_t * core_if); -extern uint32_t dwc_otg_adp_sense_start(dwc_otg_core_if_t * core_if); -extern uint32_t dwc_otg_adp_probe_stop(dwc_otg_core_if_t * core_if); -extern uint32_t dwc_otg_adp_sense_stop(dwc_otg_core_if_t * core_if); -extern void dwc_otg_adp_start(dwc_otg_core_if_t * core_if, uint8_t is_host); -extern void dwc_otg_adp_init(dwc_otg_core_if_t * core_if); -extern void dwc_otg_adp_remove(dwc_otg_core_if_t * core_if); -extern int32_t dwc_otg_adp_handle_intr(dwc_otg_core_if_t * core_if); -extern int32_t dwc_otg_adp_handle_srp_intr(dwc_otg_core_if_t * core_if); - -#endif //__DWC_OTG_ADP_H__ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_attr.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_attr.h deleted file mode 100644 index 6e62146..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_attr.h +++ /dev/null @@ -1,86 +0,0 @@ -/* ========================================================================== - * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_attr.h $ - * $Revision: #13 $ - * $Date: 2010/06/21 $ - * $Change: 1532021 $ - * - * Synopsys HS OTG Linux Software Driver and documentation (hereinafter, - * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless - * otherwise expressly agreed to in writing between Synopsys and you. - * - * The Software IS NOT an item of Licensed Software or Licensed Product under - * any End User Software License Agreement or Agreement for Licensed Product - * with Synopsys or any supplement thereto. You are permitted to use and - * redistribute this Software in source and binary forms, with or without - * modification, provided that redistributions of source code must retain this - * notice. You may not view, use, disclose, copy or distribute this file or - * any information contained herein except pursuant to this license grant from - * Synopsys. If you do not agree with this notice, including the disclaimer - * below, then you are not authorized to use the Software. - * - * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * ========================================================================== */ - -#if !defined(__DWC_OTG_ATTR_H__) -#define __DWC_OTG_ATTR_H__ -#if 0 -/** @file - * This file contains the interface to the Linux device attributes. - */ -extern struct device_attribute dev_attr_regoffset; -extern struct device_attribute dev_attr_regvalue; - -extern struct device_attribute dev_attr_mode; -extern struct device_attribute dev_attr_hnpcapable; -extern struct device_attribute dev_attr_srpcapable; -extern struct device_attribute dev_attr_hnp; -extern struct device_attribute dev_attr_srp; -extern struct device_attribute dev_attr_buspower; -extern struct device_attribute dev_attr_bussuspend; -extern struct device_attribute dev_attr_mode_ch_tim_en; -extern struct device_attribute dev_attr_fr_interval; -extern struct device_attribute dev_attr_busconnected; -extern struct device_attribute dev_attr_gotgctl; -extern struct device_attribute dev_attr_gusbcfg; -extern struct device_attribute dev_attr_grxfsiz; -extern struct device_attribute dev_attr_gnptxfsiz; -extern struct device_attribute dev_attr_gpvndctl; -extern struct device_attribute dev_attr_ggpio; -extern struct device_attribute dev_attr_guid; -extern struct device_attribute dev_attr_gsnpsid; -extern struct device_attribute dev_attr_devspeed; -extern struct device_attribute dev_attr_enumspeed; -extern struct device_attribute dev_attr_hptxfsiz; -extern struct device_attribute dev_attr_hprt0; -#ifdef CONFIG_USB_DWC_OTG_LPM -extern struct device_attribute dev_attr_lpm_response; -extern struct device_attribute devi_attr_sleep_status; -#endif - -void dwc_otg_attr_create( -#ifdef LM_INTERFACE - struct lm_device *dev -#elif PCI_INTERFACE - struct pci_dev *dev -#endif - ); - -void dwc_otg_attr_remove( -#ifdef LM_INTERFACE - struct lm_device *dev -#elif PCI_INTERFACE - struct pci_dev *dev -#endif - ); -#endif -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_cil.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_cil.h deleted file mode 100644 index eccb3a9..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_cil.h +++ /dev/null @@ -1,1343 +0,0 @@ -/* ========================================================================== - * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_cil.h $ - * $Revision: #128 $ - * $Date: 2013/05/16 $ - * $Change: 2231774 $ - * - * Synopsys HS OTG Linux Software Driver and documentation (hereinafter, - * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless - * otherwise expressly agreed to in writing between Synopsys and you. - * - * The Software IS NOT an item of Licensed Software or Licensed Product under - * any End User Software License Agreement or Agreement for Licensed Product - * with Synopsys or any supplement thereto. You are permitted to use and - * redistribute this Software in source and binary forms, with or without - * modification, provided that redistributions of source code must retain this - * notice. You may not view, use, disclose, copy or distribute this file or - * any information contained herein except pursuant to this license grant from - * Synopsys. If you do not agree with this notice, including the disclaimer - * below, then you are not authorized to use the Software. - * - * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * ========================================================================== */ - -#if !defined(__DWC_CIL_H__) -#define __DWC_CIL_H__ - -#include "dwc_list.h" -#include "dwc_otg_dbg.h" -#include "dwc_otg_regs.h" - -#include "dwc_otg_core_if.h" -#include "dwc_otg_adp.h" -#include "rtl8195a_otg.h" -/** - * @file - * This file contains the interface to the Core Interface Layer. - */ -//#define DWC_DEVICE_ONLY 0 - -#ifdef DWC_UTE_CFI - -#define MAX_DMA_DESCS_PER_EP 256 - -/** - * Enumeration for the data buffer mode - */ -typedef enum _data_buffer_mode { - BM_STANDARD = 0, /* data buffer is in normal mode */ - BM_SG = 1, /* data buffer uses the scatter/gather mode */ - BM_CONCAT = 2, /* data buffer uses the concatenation mode */ - BM_CIRCULAR = 3, /* data buffer uses the circular DMA mode */ - BM_ALIGN = 4 /* data buffer is in buffer alignment mode */ -} data_buffer_mode_e; -#endif //DWC_UTE_CFI - -/** Macros defined for DWC OTG HW Release version */ - -#define OTG_CORE_REV_2_60a 0x4F54260A -#define OTG_CORE_REV_2_71a 0x4F54271A -#define OTG_CORE_REV_2_72a 0x4F54272A -#define OTG_CORE_REV_2_80a 0x4F54280A -#define OTG_CORE_REV_2_81a 0x4F54281A -#define OTG_CORE_REV_2_90a 0x4F54290A -#define OTG_CORE_REV_2_91a 0x4F54291A -#define OTG_CORE_REV_2_92a 0x4F54292A -#define OTG_CORE_REV_2_93a 0x4F54293A -#define OTG_CORE_REV_2_94a 0x4F54294A -#define OTG_CORE_REV_3_00a 0x4F54300A -#define OTG_CORE_REV_3_10a 0x4F54310A - -/** - * Information for each ISOC packet. - */ -typedef struct iso_pkt_info { - uint32_t offset; - uint32_t length; - int32_t status; -} iso_pkt_info_t; - -/** - * The dwc_ep structure represents the state of a single - * endpoint when acting in device mode. It contains the data items - * needed for an endpoint to be activated and transfer packets. - */ -typedef struct dwc_ep { - /** EP number used for register address lookup */ - uint8_t num; - /** EP direction 0 = OUT */ - unsigned is_in:1; - /** EP active. */ - unsigned active:1; - - /** - * Periodic Tx FIFO # for IN EPs For INTR EP set to 0 to use non-periodic - * Tx FIFO. If dedicated Tx FIFOs are enabled Tx FIFO # FOR IN EPs*/ - unsigned tx_fifo_num:4; - /** EP type: 0 - Control, 1 - ISOC, 2 - BULK, 3 - INTR */ - unsigned type:2; -#define DWC_OTG_EP_TYPE_CONTROL 0 -#define DWC_OTG_EP_TYPE_ISOC 1 -#define DWC_OTG_EP_TYPE_BULK 2 -#define DWC_OTG_EP_TYPE_INTR 3 - - /** DATA start PID for INTR and BULK EP */ - unsigned data_pid_start:1; - /** Frame (even/odd) for ISOC EP */ - unsigned even_odd_frame:1; - /** Max Packet bytes */ - unsigned maxpacket:11; - - /** Max Transfer size */ - uint32_t maxxfer; - - /** @name Transfer state */ - /** @{ */ - - /** - * Pointer to the beginning of the transfer buffer -- do not modify - * during transfer. - */ - dwc_dma_t dma_addr; - - dwc_dma_t dma_desc_addr; - dwc_otg_dev_dma_desc_t *desc_addr; - - /* Additional desc chain for ISO transfers */ - dwc_dma_t dma_desc_addr1; - dwc_otg_dev_dma_desc_t *desc_addr1; - /* Flag indicating which one of two ISO desc chains currently is in use */ - uint8_t use_add_buf; - - uint8_t *start_xfer_buff; - /** pointer to the transfer buffer */ - uint8_t *xfer_buff; - /** Number of bytes to transfer */ - unsigned xfer_len:19; - /** Number of bytes transferred. */ - unsigned xfer_count:19; - /** Sent ZLP */ - unsigned sent_zlp:1; - /** Total len for control transfer */ - unsigned total_len:19; - - /** stall clear flag */ - unsigned stall_clear_flag:1; - - /** SETUP pkt cnt rollover flag for EP0 out*/ - unsigned stp_rollover; - -#ifdef DWC_UTE_CFI - /* The buffer mode */ - data_buffer_mode_e buff_mode; - - /* The chain of DMA descriptors. - * MAX_DMA_DESCS_PER_EP will be allocated for each active EP. - */ - dwc_otg_dma_desc_t *descs; - - /* The DMA address of the descriptors chain start */ - dma_addr_t descs_dma_addr; - /** This variable stores the length of the last enqueued request */ - uint32_t cfi_req_len; -#endif //DWC_UTE_CFI - -/** Max DMA Descriptor count for any EP */ -#define MAX_DMA_DESC_CNT 256 - /** Allocated DMA Desc count */ - uint32_t desc_cnt; - - /** First ISO Desc in use in the first chain*/ - uint32_t iso_desc_first; - /** Last ISO Desc in use in the second chain */ - uint32_t iso_desc_second; - /** Flag indicated that iso transfers were started */ - uint8_t iso_transfer_started; - - /** bInterval */ - uint32_t bInterval; - /** Next frame num to setup next ISOC transfer */ - uint32_t frame_num; - /** Indicates SOF number overrun in DSTS */ - uint8_t frm_overrun; - -#ifdef DWC_UTE_PER_IO - /** Next frame num for which will be setup DMA Desc */ - uint32_t xiso_frame_num; - /** bInterval */ - uint32_t xiso_bInterval; - /** Count of currently active transfers - shall be either 0 or 1 */ - int xiso_active_xfers; - int xiso_queued_xfers; -#endif -#ifdef DWC_EN_ISOC - /** - * Variables specific for ISOC EPs - * - */ - /** DMA addresses of ISOC buffers */ - dwc_dma_t dma_addr0; - dwc_dma_t dma_addr1; - - dwc_dma_t iso_dma_desc_addr; - dwc_otg_dev_dma_desc_t *iso_desc_addr; - - /** pointer to the transfer buffers */ - uint8_t *xfer_buff0; - uint8_t *xfer_buff1; - - /** number of ISOC Buffer is processing */ - uint32_t proc_buf_num; - /** Interval of ISOC Buffer processing */ - uint32_t buf_proc_intrvl; - /** Data size for regular frame */ - uint32_t data_per_frame; - - /* todo - pattern data support is to be implemented in the future */ - /** Data size for pattern frame */ - uint32_t data_pattern_frame; - /** Frame number of pattern data */ - uint32_t sync_frame; - - /** bInterval */ - uint32_t bInterval; - /** ISO Packet number per frame */ - uint32_t pkt_per_frm; - /** Next frame num for which will be setup DMA Desc */ - uint32_t next_frame; - /** Number of packets per buffer processing */ - uint32_t pkt_cnt; - /** Info for all isoc packets */ - iso_pkt_info_t *pkt_info; - /** current pkt number */ - uint32_t cur_pkt; - /** current pkt number */ - uint8_t *cur_pkt_addr; - /** current pkt number */ - uint32_t cur_pkt_dma_addr; -#endif /* DWC_EN_ISOC */ - -/** @} */ -} dwc_ep_t; - -/* - * Reasons for halting a host channel. - */ -typedef enum dwc_otg_halt_status { - DWC_OTG_HC_XFER_NO_HALT_STATUS, - DWC_OTG_HC_XFER_COMPLETE, - DWC_OTG_HC_XFER_URB_COMPLETE, - DWC_OTG_HC_XFER_ACK, - DWC_OTG_HC_XFER_NAK, - DWC_OTG_HC_XFER_NYET, - DWC_OTG_HC_XFER_STALL, - DWC_OTG_HC_XFER_XACT_ERR, - DWC_OTG_HC_XFER_FRAME_OVERRUN, - DWC_OTG_HC_XFER_BABBLE_ERR, - DWC_OTG_HC_XFER_DATA_TOGGLE_ERR, - DWC_OTG_HC_XFER_AHB_ERR, - DWC_OTG_HC_XFER_PERIODIC_INCOMPLETE, - DWC_OTG_HC_XFER_URB_DEQUEUE -} dwc_otg_halt_status_e; - -/** - * Host channel descriptor. This structure represents the state of a single - * host channel when acting in host mode. It contains the data items needed to - * transfer packets to an endpoint via a host channel. - */ -typedef struct dwc_hc { - /** Host channel number used for register address lookup */ - uint8_t hc_num; - - /** Device to access */ - unsigned dev_addr:7; - - /** EP to access */ - unsigned ep_num:4; - - /** EP direction. 0: OUT, 1: IN */ - unsigned ep_is_in:1; - - /** - * EP speed. - * One of the following values: - * - DWC_OTG_EP_SPEED_LOW - * - DWC_OTG_EP_SPEED_FULL - * - DWC_OTG_EP_SPEED_HIGH - */ - unsigned speed:2; -#define DWC_OTG_EP_SPEED_LOW 0 -#define DWC_OTG_EP_SPEED_FULL 1 -#define DWC_OTG_EP_SPEED_HIGH 2 - - /** - * Endpoint type. - * One of the following values: - * - DWC_OTG_EP_TYPE_CONTROL: 0 - * - DWC_OTG_EP_TYPE_ISOC: 1 - * - DWC_OTG_EP_TYPE_BULK: 2 - * - DWC_OTG_EP_TYPE_INTR: 3 - */ - unsigned ep_type:2; - - /** Max packet size in bytes */ - unsigned max_packet:11; - - /** - * PID for initial transaction. - * 0: DATA0,
- * 1: DATA2,
- * 2: DATA1,
- * 3: MDATA (non-Control EP), - * SETUP (Control EP) - */ - unsigned data_pid_start:2; -#define DWC_OTG_HC_PID_DATA0 0 -#define DWC_OTG_HC_PID_DATA2 1 -#define DWC_OTG_HC_PID_DATA1 2 -#define DWC_OTG_HC_PID_MDATA 3 -#define DWC_OTG_HC_PID_SETUP 3 - - /** Number of periodic transactions per (micro)frame */ - unsigned multi_count:2; - - /** @name Transfer State */ - /** @{ */ - - /** Pointer to the current transfer buffer position. */ - uint8_t *xfer_buff; - /** - * In Buffer DMA mode this buffer will be used - * if xfer_buff is not DWORD aligned. - */ - dwc_dma_t align_buff; - /** Total number of bytes to transfer. */ - uint32_t xfer_len; - /** Number of bytes transferred so far. */ - uint32_t xfer_count; - /** Packet count at start of transfer.*/ - uint16_t start_pkt_count; - - /** - * Flag to indicate whether the transfer has been started. Set to 1 if - * it has been started, 0 otherwise. - */ - uint8_t xfer_started; - - /** - * Set to 1 to indicate that a PING request should be issued on this - * channel. If 0, process normally. - */ - uint8_t do_ping; - - /** - * Set to 1 to indicate that the error count for this transaction is - * non-zero. Set to 0 if the error count is 0. - */ - uint8_t error_state; - - /** - * Set to 1 to indicate that this channel should be halted the next - * time a request is queued for the channel. This is necessary in - * slave mode if no request queue space is available when an attempt - * is made to halt the channel. - */ - uint8_t halt_on_queue; - - /** - * Set to 1 if the host channel has been halted, but the core is not - * finished flushing queued requests. Otherwise 0. - */ - uint8_t halt_pending; - - /** - * Reason for halting the host channel. - */ - dwc_otg_halt_status_e halt_status; - - /* - * Split settings for the host channel - */ - uint8_t do_split; /**< Enable split for the channel */ - uint8_t complete_split; /**< Enable complete split */ - uint8_t hub_addr; /**< Address of high speed hub */ - - uint8_t port_addr; /**< Port of the low/full speed device */ - /** Split transaction position - * One of the following values: - * - DWC_HCSPLIT_XACTPOS_MID - * - DWC_HCSPLIT_XACTPOS_BEGIN - * - DWC_HCSPLIT_XACTPOS_END - * - DWC_HCSPLIT_XACTPOS_ALL */ - uint8_t xact_pos; - - /** Set when the host channel does a short read. */ - uint8_t short_read; - - /** - * Number of requests issued for this channel since it was assigned to - * the current transfer (not counting PINGs). - */ - uint8_t requests; - - /** - * Queue Head for the transfer being processed by this channel. - */ - struct dwc_otg_qh *qh; - - /** @} */ - - /** Entry in list of host channels. */ - DWC_CIRCLEQ_ENTRY(dwc_hc) hc_list_entry; - - /** @name Descriptor DMA support */ - /** @{ */ - - /** Number of Transfer Descriptors */ - uint16_t ntd; - - /** Descriptor List DMA address */ - dwc_dma_t desc_list_addr; - - /** Scheduling micro-frame bitmap. */ - uint8_t schinfo; - - /** @} */ -} dwc_hc_t; - -/** - * The following parameters may be specified when starting the module. These - * parameters define how the DWC_otg controller should be configured. - */ -typedef struct dwc_otg_core_params { - int32_t opt; - - /** - * Specifies the OTG capabilities. The driver will automatically - * detect the value for this parameter if none is specified. - * 0 - HNP and SRP capable (default) - * 1 - SRP Only capable - * 2 - No HNP/SRP capable - */ - int32_t otg_cap; - - /** - * Specifies whether to use slave or DMA mode for accessing the data - * FIFOs. The driver will automatically detect the value for this - * parameter if none is specified. - * 0 - Slave - * 1 - DMA (default, if available) - */ - int32_t dma_enable; - - /** - * When DMA mode is enabled specifies whether to use address DMA or DMA - * Descriptor mode for accessing the data FIFOs in device mode. The driver - * will automatically detect the value for this if none is specified. - * 0 - address DMA - * 1 - DMA Descriptor(default, if available) - */ - int32_t dma_desc_enable; - /** The DMA Burst size (applicable only for External DMA - * Mode). 1, 4, 8 16, 32, 64, 128, 256 (default 32) - */ - int32_t dma_burst_size; /* Translate this to GAHBCFG values */ - - /** - * Specifies the maximum speed of operation in host and device mode. - * The actual speed depends on the speed of the attached device and - * the value of phy_type. The actual speed depends on the speed of the - * attached device. - * 0 - High Speed (default) - * 1 - Full Speed - */ - int32_t speed; - /** Specifies whether low power mode is supported when attached - * to a Full Speed or Low Speed device in host mode. - * 0 - Don't support low power mode (default) - * 1 - Support low power mode - */ - int32_t host_support_fs_ls_low_power; - - /** Specifies the PHY clock rate in low power mode when connected to a - * Low Speed device in host mode. This parameter is applicable only if - * HOST_SUPPORT_FS_LS_LOW_POWER is enabled. If PHY_TYPE is set to FS - * then defaults to 6 MHZ otherwise 48 MHZ. - * - * 0 - 48 MHz - * 1 - 6 MHz - */ - int32_t host_ls_low_power_phy_clk; - - /** - * 0 - Use cC FIFO size parameters - * 1 - Allow dynamic FIFO sizing (default) - */ - int32_t enable_dynamic_fifo; - - /** Total number of 4-byte words in the data FIFO memory. This - * memory includes the Rx FIFO, non-periodic Tx FIFO, and periodic - * Tx FIFOs. - * 32 to 32768 (default 8192) - * Note: The total FIFO memory depth in the FPGA configuration is 8192. - */ - int32_t data_fifo_size; - - /** Number of 4-byte words in the Rx FIFO in device mode when dynamic - * FIFO sizing is enabled. - * 16 to 32768 (default 1064) - */ - int32_t dev_rx_fifo_size; - - /** Number of 4-byte words in the non-periodic Tx FIFO in device mode - * when dynamic FIFO sizing is enabled. - * 16 to 32768 (default 1024) - */ - int32_t dev_nperio_tx_fifo_size; - - /** Number of 4-byte words in each of the periodic Tx FIFOs in device - * mode when dynamic FIFO sizing is enabled. - * 4 to 768 (default 256) - */ - uint32_t dev_perio_tx_fifo_size[MAX_PERIO_FIFOS]; - - /** Number of 4-byte words in the Rx FIFO in host mode when dynamic - * FIFO sizing is enabled. - * 16 to 32768 (default 1024) - */ - int32_t host_rx_fifo_size; - - /** Number of 4-byte words in the non-periodic Tx FIFO in host mode - * when Dynamic FIFO sizing is enabled in the core. - * 16 to 32768 (default 1024) - */ - int32_t host_nperio_tx_fifo_size; - - /** Number of 4-byte words in the host periodic Tx FIFO when dynamic - * FIFO sizing is enabled. - * 16 to 32768 (default 1024) - */ - int32_t host_perio_tx_fifo_size; - - /** The maximum transfer size supported in bytes. - * 2047 to 65,535 (default 65,535) - */ - int32_t max_transfer_size; - - /** The maximum number of packets in a transfer. - * 15 to 511 (default 511) - */ - int32_t max_packet_count; - - /** The number of host channel registers to use. - * 1 to 16 (default 12) - * Note: The FPGA configuration supports a maximum of 12 host channels. - */ - int32_t host_channels; - - /** The number of endpoints in addition to EP0 available for device - * mode operations. - * 1 to 15 (default 6 IN and OUT) - * Note: The FPGA configuration supports a maximum of 6 IN and OUT - * endpoints in addition to EP0. - */ - int32_t dev_endpoints; - - /** - * Specifies the type of PHY interface to use. By default, the driver - * will automatically detect the phy_type. - * - * 0 - Full Speed PHY - * 1 - UTMI+ (default) - * 2 - ULPI - */ - int32_t phy_type; - - /** - * Specifies the UTMI+ Data Width. This parameter is - * applicable for a PHY_TYPE of UTMI+ or ULPI. (For a ULPI - * PHY_TYPE, this parameter indicates the data width between - * the MAC and the ULPI Wrapper.) Also, this parameter is - * applicable only if the OTG_HSPHY_WIDTH cC parameter was set - * to "8 and 16 bits", meaning that the core has been - * configured to work at either data path width. - * - * 8 or 16 bits (default 16) - */ - int32_t phy_utmi_width; - - /** - * Specifies whether the ULPI operates at double or single - * data rate. This parameter is only applicable if PHY_TYPE is - * ULPI. - * - * 0 - single data rate ULPI interface with 8 bit wide data - * bus (default) - * 1 - double data rate ULPI interface with 4 bit wide data - * bus - */ - int32_t phy_ulpi_ddr; - - /** - * Specifies whether to use the internal or external supply to - * drive the vbus with a ULPI phy. - */ - int32_t phy_ulpi_ext_vbus; - - /** - * Specifies whether to use the I2Cinterface for full speed PHY. This - * parameter is only applicable if PHY_TYPE is FS. - * 0 - No (default) - * 1 - Yes - */ - int32_t i2c_enable; - - int32_t ulpi_fs_ls; - - int32_t ts_dline; - - /** - * Specifies whether dedicated transmit FIFOs are - * enabled for non periodic IN endpoints in device mode - * 0 - No - * 1 - Yes - */ - int32_t en_multiple_tx_fifo; - - /** Number of 4-byte words in each of the Tx FIFOs in device - * mode when dynamic FIFO sizing is enabled. - * 4 to 768 (default 256) - */ - uint32_t dev_tx_fifo_size[MAX_TX_FIFOS]; - - /** Thresholding enable flag- - * bit 0 - enable non-ISO Tx thresholding - * bit 1 - enable ISO Tx thresholding - * bit 2 - enable Rx thresholding - */ - uint32_t thr_ctl; - - /** Thresholding length for Tx - * FIFOs in 32 bit DWORDs - */ - uint32_t tx_thr_length; - - /** Thresholding length for Rx - * FIFOs in 32 bit DWORDs - */ - uint32_t rx_thr_length; - - /** - * Specifies whether LPM (Link Power Management) support is enabled - */ - int32_t lpm_enable; - - /** - * Specifies whether LPM Errata (Link Power Management) support is enabled - */ - int32_t besl_enable; - - /** - * Specifies the baseline besl value - */ - int32_t baseline_besl; - - /** - * Specifies the deep besl value - */ - int32_t deep_besl; - /** Per Transfer Interrupt - * mode enable flag - * 1 - Enabled - * 0 - Disabled - */ - int32_t pti_enable; - - /** Multi Processor Interrupt - * mode enable flag - * 1 - Enabled - * 0 - Disabled - */ - int32_t mpi_enable; - - /** IS_USB Capability - * 1 - Enabled - * 0 - Disabled - */ - int32_t ic_usb_cap; - - /** AHB Threshold Ratio - * 2'b00 AHB Threshold = MAC Threshold - * 2'b01 AHB Threshold = 1/2 MAC Threshold - * 2'b10 AHB Threshold = 1/4 MAC Threshold - * 2'b11 AHB Threshold = 1/8 MAC Threshold - */ - int32_t ahb_thr_ratio; - - /** ADP Support - * 1 - Enabled - * 0 - Disabled - */ - int32_t adp_supp_enable; - - /** HFIR Reload Control - * 0 - The HFIR cannot be reloaded dynamically. - * 1 - Allow dynamic reloading of the HFIR register during runtime. - */ - int32_t reload_ctl; - - /** DCFG: Enable device Out NAK - * 0 - The core does not set NAK after Bulk Out transfer complete. - * 1 - The core sets NAK after Bulk OUT transfer complete. - */ - int32_t dev_out_nak; - - /** DCFG: Enable Continue on BNA - * After receiving BNA interrupt the core disables the endpoint,when the - * endpoint is re-enabled by the application the core starts processing - * 0 - from the DOEPDMA descriptor - * 1 - from the descriptor which received the BNA. - */ - int32_t cont_on_bna; - - /** GAHBCFG: AHB Single Support - * This bit when programmed supports SINGLE transfers for remainder - * data in a transfer for DMA mode of operation. - * 0 - in this case the remainder data will be sent using INCR burst size. - * 1 - in this case the remainder data will be sent using SINGLE burst size. - */ - int32_t ahb_single; - - /** Core Power down mode - * 0 - No Power Down is enabled - * 1 - Reserved - * 2 - Complete Power Down (Hibernation) - */ - int32_t power_down; - - /** OTG revision supported - * 0 - OTG 1.3 revision - * 1 - OTG 2.0 revision - */ - int32_t otg_ver; - -} dwc_otg_core_params_t; - -#ifdef OTGDEBUG -struct dwc_otg_core_if; -typedef struct hc_xfer_info { - struct dwc_otg_core_if *core_if; - dwc_hc_t *hc; -} hc_xfer_info_t; -#endif - -typedef struct ep_xfer_info { - struct dwc_otg_core_if *core_if; - dwc_ep_t *ep; - uint8_t state; -} ep_xfer_info_t; -/* - * Device States - */ -typedef enum dwc_otg_lx_state { - /** On state */ - DWC_OTG_L0, - /** LPM sleep state*/ - DWC_OTG_L1, - /** USB suspend state*/ - DWC_OTG_L2, - /** Off state*/ - DWC_OTG_L3 -} dwc_otg_lx_state_e; - -struct dwc_otg_global_regs_backup { - uint32_t gotgctl_local; - uint32_t gintmsk_local; - uint32_t gahbcfg_local; - uint32_t gusbcfg_local; - uint32_t grxfsiz_local; - uint32_t gnptxfsiz_local; -#ifdef CONFIG_USB_DWC_OTG_LPM - uint32_t glpmcfg_local; -#endif - uint32_t gi2cctl_local; - uint32_t hptxfsiz_local; - uint32_t pcgcctl_local; - uint32_t gdfifocfg_local; - uint32_t dtxfsiz_local[MAX_EPS_CHANNELS]; - uint32_t gpwrdn_local; - uint32_t xhib_pcgcctl; - uint32_t xhib_gpwrdn; -}; - -struct dwc_otg_host_regs_backup { - uint32_t hcfg_local; - uint32_t haintmsk_local; - uint32_t hcintmsk_local[MAX_EPS_CHANNELS]; - uint32_t hprt0_local; - uint32_t hfir_local; -}; - -struct dwc_otg_dev_regs_backup { - uint32_t dcfg; - uint32_t dctl; - uint32_t daintmsk; - uint32_t diepmsk; - uint32_t doepmsk; - uint32_t diepctl[MAX_EPS_CHANNELS]; - uint32_t dieptsiz[MAX_EPS_CHANNELS]; - uint32_t diepdma[MAX_EPS_CHANNELS]; -}; -/** - * The dwc_otg_core_if structure contains information needed to manage - * the DWC_otg controller acting in either host or device mode. It - * represents the programming view of the controller as a whole. - */ -struct dwc_otg_core_if { - /** Parameters that define how the core should be configured.*/ - dwc_otg_core_params_t *core_params; - - /** Core Global registers starting at offset 000h. */ - dwc_otg_core_global_regs_t *core_global_regs; - - /** Device-specific information */ - dwc_otg_dev_if_t *dev_if; - /** Host-specific information */ - dwc_otg_host_if_t *host_if; - - /** Value from SNPSID register */ - uint32_t snpsid; - - /* - * Set to 1 if the core PHY interface bits in USBCFG have been - * initialized. - */ - uint8_t phy_init_done; - - /* - * SRP Success flag, set by srp success interrupt in FS I2C mode - */ - uint8_t srp_success; - uint8_t srp_timer_started; - /** Timer for SRP. If it expires before SRP is successful - * clear the SRP. */ - dwc_timer_t *srp_timer; - -#ifdef DWC_DEV_SRPCAP - /* This timer is needed to power on the hibernated host core if SRP is not - * initiated on connected SRP capable device for limited period of time - */ - uint8_t pwron_timer_started; - dwc_timer_t *pwron_timer; -#endif - /* Common configuration information */ - /** Power and Clock Gating Control Register */ - volatile uint32_t *pcgcctl; -#define DWC_OTG_PCGCCTL_OFFSET 0xE00 - - /** Push/pop addresses for endpoints or host channels.*/ - uint32_t *data_fifo[MAX_EPS_CHANNELS]; -#define DWC_OTG_DATA_FIFO_OFFSET 0x1000 -#define DWC_OTG_DATA_FIFO_SIZE 0x1000 - - /** Total RAM for FIFOs (Bytes) */ - uint16_t total_fifo_size; - /** Size of Rx FIFO (Bytes) */ - uint16_t rx_fifo_size; - /** Size of Non-periodic Tx FIFO (Bytes) */ - uint16_t nperio_tx_fifo_size; - - /** 1 if DMA is enabled, 0 otherwise. */ - uint8_t dma_enable; - - /** 1 if DMA descriptor is enabled, 0 otherwise. */ - uint8_t dma_desc_enable; - - /** 1 if PTI Enhancement mode is enabled, 0 otherwise. */ - uint8_t pti_enh_enable; - - /** 1 if MPI Enhancement mode is enabled, 0 otherwise. */ - uint8_t multiproc_int_enable; - - /** 1 if dedicated Tx FIFOs are enabled, 0 otherwise. */ - uint8_t en_multiple_tx_fifo; - - /** Set to 1 if multiple packets of a high-bandwidth transfer is in - * process of being queued */ - uint8_t queuing_high_bandwidth; - - /** Hardware Configuration -- stored here for convenience.*/ - hwcfg1_data_t hwcfg1; - hwcfg2_data_t hwcfg2; - hwcfg3_data_t hwcfg3; - hwcfg4_data_t hwcfg4; - fifosize_data_t hptxfsiz; - - /** Host and Device Configuration -- stored here for convenience.*/ - hcfg_data_t hcfg; - dcfg_data_t dcfg; - - /** The operational State, during transations - * (a_host>>a_peripherial and b_device=>b_host) this may not - * match the core but allows the software to determine - * transitions. - */ - uint8_t op_state; - - /** Test mode for PET testing */ - uint8_t test_mode; - - /** - * Set to 1 if the HCD needs to be restarted on a session request - * interrupt. This is required if no connector ID status change has - * occurred since the HCD was last disconnected. - */ - uint8_t restart_hcd_on_session_req; - - /** HCD callbacks */ - /** A-Device is a_host */ -#define A_HOST (1) - /** A-Device is a_suspend */ -#define A_SUSPEND (2) - /** A-Device is a_peripherial */ -#define A_PERIPHERAL (3) - /** B-Device is operating as a Peripheral. */ -#define B_PERIPHERAL (4) - /** B-Device is operating as a Host. */ -#define B_HOST (5) - - /** HCD callbacks */ - struct dwc_otg_cil_callbacks *hcd_cb; - /** PCD callbacks */ - struct dwc_otg_cil_callbacks *pcd_cb; - - /** Device mode Periodic Tx FIFO Mask */ - uint32_t p_tx_msk; - /** Device mode Periodic Tx FIFO Mask */ - uint32_t tx_msk; - - /** Workqueue object used for handling several interrupts */ - dwc_workq_t *wq_otg; - - /** Timer object used for handling "Wakeup Detected" Interrupt */ - dwc_timer_t *wkp_timer; - /** This arrays used for debug purposes for DEV OUT NAK enhancement */ - uint32_t start_doeptsiz_val[MAX_EPS_CHANNELS]; - ep_xfer_info_t ep_xfer_info[MAX_EPS_CHANNELS]; - dwc_timer_t *ep_xfer_timer[MAX_EPS_CHANNELS]; -#ifdef OTGDEBUG - uint32_t start_hcchar_val[MAX_EPS_CHANNELS]; - - hc_xfer_info_t hc_xfer_info[MAX_EPS_CHANNELS]; - dwc_timer_t *hc_xfer_timer[MAX_EPS_CHANNELS]; - - uint32_t hfnum_7_samples; - uint64_t hfnum_7_frrem_accum; - uint32_t hfnum_0_samples; - uint64_t hfnum_0_frrem_accum; - uint32_t hfnum_other_samples; - uint64_t hfnum_other_frrem_accum; -#endif - -#ifdef DWC_UTE_CFI - uint16_t pwron_rxfsiz; - uint16_t pwron_gnptxfsiz; - uint16_t pwron_txfsiz[15]; - - uint16_t init_rxfsiz; - uint16_t init_gnptxfsiz; - uint16_t init_txfsiz[15]; -#endif - - /** Lx state of device */ - dwc_otg_lx_state_e lx_state; - - /** Saved Core Global registers */ - struct dwc_otg_global_regs_backup *gr_backup; - /** Saved Host registers */ - struct dwc_otg_host_regs_backup *hr_backup; - /** Saved Device registers */ - struct dwc_otg_dev_regs_backup *dr_backup; - - /** Power Down Enable */ - uint32_t power_down; - - /** ADP support Enable */ - uint32_t adp_enable; - - /** ADP structure object */ - dwc_otg_adp_t adp; - - /** hibernation/suspend flag */ - int hibernation_suspend; - - /** Device mode extended hibernation flag */ - int xhib; - - /** OTG revision supported */ - uint32_t otg_ver; - - /** OTG status flag used for HNP polling */ - uint8_t otg_sts; - - /** Pointer to either hcd->lock or pcd->lock */ - dwc_spinlock_t *lock; - - /** Start predict NextEP based on Learning Queue if equal 1, - * also used as counter of disabled NP IN EP's */ - uint8_t start_predict; - - /** NextEp sequence, including EP0: nextep_seq[] = EP if non-periodic and - * active, 0xff otherwise */ - uint8_t nextep_seq[MAX_EPS_CHANNELS]; - - /** Index of fisrt EP in nextep_seq array which should be re-enabled **/ - uint8_t first_in_nextep_seq; - - /** Frame number while entering to ISR - needed for ISOCs **/ - uint32_t frame_num; - - /** Flag to not perform ADP probing if IDSTS event happened */ - uint8_t stop_adpprb; - -}; - -#ifdef OTGDEBUG -/* - * This function is called when transfer is timed out. - */ -extern _LONG_CALL_ void hc_xfer_timeout(void *ptr); -#endif - -/* - * This function is called when transfer is timed out on endpoint. - */ -extern _LONG_CALL_ void ep_xfer_timeout(void *ptr); - -/* - * The following functions are functions for works - * using during handling some interrupts - */ -extern _LONG_CALL_ void w_conn_id_status_change(void *p); - -extern _LONG_CALL_ void w_wakeup_detected(void *p); - -/** Saves global register values into system memory. */ -extern _LONG_CALL_ int dwc_otg_save_global_regs(dwc_otg_core_if_t * core_if); -/** Saves device register values into system memory. */ -extern _LONG_CALL_ int dwc_otg_save_dev_regs(dwc_otg_core_if_t * core_if); -/** Saves host register values into system memory. */ -extern _LONG_CALL_ int dwc_otg_save_host_regs(dwc_otg_core_if_t * core_if); -/** Restore global register values. */ -extern _LONG_CALL_ int dwc_otg_restore_global_regs(dwc_otg_core_if_t * core_if); -/** Restore host register values. */ -extern _LONG_CALL_ int dwc_otg_restore_host_regs(dwc_otg_core_if_t * core_if, int reset); -/** Restore device register values. */ -extern _LONG_CALL_ int dwc_otg_restore_dev_regs(dwc_otg_core_if_t * core_if, - int rem_wakeup); -extern _LONG_CALL_ int restore_lpm_i2c_regs(dwc_otg_core_if_t * core_if); -extern _LONG_CALL_ int restore_essential_regs(dwc_otg_core_if_t * core_if, int rmode, - int is_host); - -extern _LONG_CALL_ int dwc_otg_host_hibernation_restore(dwc_otg_core_if_t * core_if, - int restore_mode, int reset); -extern _LONG_CALL_ int dwc_otg_device_hibernation_restore(dwc_otg_core_if_t * core_if, - int rem_wakeup, int reset); - -/* - * The following functions support initialization of the CIL driver component - * and the DWC_otg controller. - */ -extern _LONG_CALL_ void dwc_otg_core_host_init(dwc_otg_core_if_t * _core_if); -extern _LONG_CALL_ void dwc_otg_core_dev_init(dwc_otg_core_if_t * _core_if); - -/** @name Device CIL Functions - * The following functions support managing the DWC_otg controller in device - * mode. - */ -/**@{*/ -extern _LONG_CALL_ void dwc_otg_wakeup(dwc_otg_core_if_t * _core_if); -extern _LONG_CALL_ void dwc_otg_read_setup_packet(dwc_otg_core_if_t * _core_if, - uint32_t * _dest); -extern _LONG_CALL_ uint32_t dwc_otg_get_frame_number(dwc_otg_core_if_t * _core_if); -extern _LONG_CALL_ void dwc_otg_ep0_activate(dwc_otg_core_if_t * _core_if, dwc_ep_t * _ep); -extern _LONG_CALL_ void dwc_otg_ep_activate(dwc_otg_core_if_t * _core_if, dwc_ep_t * _ep); -extern _LONG_CALL_ void dwc_otg_ep_deactivate(dwc_otg_core_if_t * _core_if, dwc_ep_t * _ep); -extern _LONG_CALL_ void dwc_otg_ep_start_transfer(dwc_otg_core_if_t * _core_if, - dwc_ep_t * _ep); -extern _LONG_CALL_ void dwc_otg_ep_start_zl_transfer(dwc_otg_core_if_t * _core_if, - dwc_ep_t * _ep); -extern _LONG_CALL_ void dwc_otg_ep0_start_transfer(dwc_otg_core_if_t * _core_if, - dwc_ep_t * _ep); -extern _LONG_CALL_ void dwc_otg_ep0_continue_transfer(dwc_otg_core_if_t * _core_if, - dwc_ep_t * _ep); -extern _LONG_CALL_ void dwc_otg_ep_write_packet(dwc_otg_core_if_t * _core_if, - dwc_ep_t * _ep, int _dma); -extern _LONG_CALL_ void dwc_otg_ep_set_stall(dwc_otg_core_if_t * _core_if, dwc_ep_t * _ep); -extern _LONG_CALL_ void dwc_otg_ep_clear_stall(dwc_otg_core_if_t * _core_if, - dwc_ep_t * _ep); -extern _LONG_CALL_ void dwc_otg_enable_device_interrupts(dwc_otg_core_if_t * _core_if); - -#ifdef DWC_EN_ISOC -extern _LONG_CALL_ void dwc_otg_iso_ep_start_frm_transfer(dwc_otg_core_if_t * core_if, - dwc_ep_t * ep); -extern _LONG_CALL_ void dwc_otg_iso_ep_start_buf_transfer(dwc_otg_core_if_t * core_if, - dwc_ep_t * ep); -#endif /* DWC_EN_ISOC */ -/**@}*/ - -/** @name Host CIL Functions - * The following functions support managing the DWC_otg controller in host - * mode. - */ -/**@{*/ -extern _LONG_CALL_ void dwc_otg_hc_init(dwc_otg_core_if_t * _core_if, dwc_hc_t * _hc); -extern _LONG_CALL_ void dwc_otg_hc_halt(dwc_otg_core_if_t * _core_if, - dwc_hc_t * _hc, dwc_otg_halt_status_e _halt_status); -extern _LONG_CALL_ void dwc_otg_hc_cleanup(dwc_otg_core_if_t * _core_if, dwc_hc_t * _hc); -extern _LONG_CALL_ void dwc_otg_hc_start_transfer(dwc_otg_core_if_t * _core_if, - dwc_hc_t * _hc); -extern _LONG_CALL_ int dwc_otg_hc_continue_transfer(dwc_otg_core_if_t * _core_if, - dwc_hc_t * _hc); -extern _LONG_CALL_ void dwc_otg_hc_do_ping(dwc_otg_core_if_t * _core_if, dwc_hc_t * _hc); -extern _LONG_CALL_ void dwc_otg_hc_write_packet(dwc_otg_core_if_t * _core_if, - dwc_hc_t * _hc); -extern _LONG_CALL_ void dwc_otg_enable_host_interrupts(dwc_otg_core_if_t * _core_if); -extern _LONG_CALL_ void dwc_otg_disable_host_interrupts(dwc_otg_core_if_t * _core_if); - -extern _LONG_CALL_ void dwc_otg_hc_start_transfer_ddma(dwc_otg_core_if_t * core_if, - dwc_hc_t * hc); - -extern _LONG_CALL_ uint32_t calc_frame_interval(dwc_otg_core_if_t * core_if); -extern _LONG_CALL_ int dwc_otg_check_haps_status(dwc_otg_core_if_t * core_if); - -/* Macro used to clear one channel interrupt */ -#define clear_hc_int(_hc_regs_, _intr_) \ -do { \ - hcint_data_t hcint_clear = {.d32 = 0}; \ - hcint_clear.b._intr_ = 1; \ - DWC_WRITE_REG32(&(_hc_regs_)->hcint, hcint_clear.d32); \ -} while (0) - -/* - * Macro used to disable one channel interrupt. Channel interrupts are - * disabled when the channel is halted or released by the interrupt handler. - * There is no need to handle further interrupts of that type until the - * channel is re-assigned. In fact, subsequent handling may cause crashes - * because the channel structures are cleaned up when the channel is released. - */ -#define disable_hc_int(_hc_regs_, _intr_) \ -do { \ - hcintmsk_data_t hcintmsk = {.d32 = 0}; \ - hcintmsk.b._intr_ = 1; \ - DWC_MODIFY_REG32(&(_hc_regs_)->hcintmsk, hcintmsk.d32, 0); \ -} while (0) - -/** - * This function Reads HPRT0 in preparation to modify. It keeps the - * WC bits 0 so that if they are read as 1, they won't clear when you - * write it back -*/ - -extern _LONG_CALL_ uint32_t dwc_otg_read_hprt0(dwc_otg_core_if_t * _core_if); - -/**@}*/ - -/** @name Common CIL Functions - * The following functions support managing the DWC_otg controller in either - * device or host mode. - */ -/**@{*/ - -extern _LONG_CALL_ void dwc_otg_read_packet(dwc_otg_core_if_t * core_if, - uint8_t * dest, uint16_t bytes); - -extern _LONG_CALL_ void dwc_otg_flush_tx_fifo(dwc_otg_core_if_t * _core_if, const int _num); -extern _LONG_CALL_ void dwc_otg_flush_rx_fifo(dwc_otg_core_if_t * _core_if); -extern _LONG_CALL_ void dwc_otg_core_reset(dwc_otg_core_if_t * _core_if); - -/** - * This function returns the Core Interrupt register. - */ -extern _LONG_CALL_ uint32_t dwc_otg_read_core_intr(dwc_otg_core_if_t * core_if); - -/** - * This function returns the OTG Interrupt register. - */ -extern _LONG_CALL_ uint32_t dwc_otg_read_otg_intr(dwc_otg_core_if_t * core_if); - -/** - * This function reads the Device All Endpoints Interrupt register and - * returns the IN endpoint interrupt bits. - */ -extern _LONG_CALL_ uint32_t dwc_otg_read_dev_all_in_ep_intr(dwc_otg_core_if_t * - core_if); -/** - * This function reads the Device All Endpoints Interrupt register and - * returns the OUT endpoint interrupt bits. - */ -extern _LONG_CALL_ uint32_t dwc_otg_read_dev_all_out_ep_intr(dwc_otg_core_if_t * - core_if); - -/** - * This function returns the Device IN EP Interrupt register - */ -extern _LONG_CALL_ uint32_t dwc_otg_read_dev_in_ep_intr(dwc_otg_core_if_t * core_if, - dwc_ep_t * ep); -/** - * This function returns the Device OUT EP Interrupt register - */ -extern _LONG_CALL_ uint32_t dwc_otg_read_dev_out_ep_intr(dwc_otg_core_if_t * - _core_if, dwc_ep_t * _ep); -/** - * This function returns the Host All Channel Interrupt register - */ -extern _LONG_CALL_ uint32_t dwc_otg_read_host_all_channels_intr(dwc_otg_core_if_t * - _core_if); - -extern _LONG_CALL_ uint32_t dwc_otg_read_host_channel_intr(dwc_otg_core_if_t * - _core_if, dwc_hc_t * _hc); - -/** - * This function returns the mode of the operation, host or device. - * - * @return 0 - Device Mode, 1 - Host Mode - */ -extern _LONG_CALL_ uint32_t dwc_otg_mode(dwc_otg_core_if_t * _core_if); - -/**@}*/ - -/** - * DWC_otg CIL callback structure. This structure allows the HCD and - * PCD to register functions used for starting and stopping the PCD - * and HCD for role change on for a DRD. - */ -typedef struct dwc_otg_cil_callbacks { - /** Start function for role change */ - int (*start) (void *_p); - /** Stop Function for role change */ - int (*stop) (void *_p); - /** Disconnect Function for role change */ - int (*disconnect) (void *_p); - /** Resume/Remote wakeup Function */ - int (*resume_wakeup) (void *_p); - /** Suspend function */ - int (*suspend) (void *_p); - /** Session Start (SRP) */ - int (*session_start) (void *_p); -#ifdef CONFIG_USB_DWC_OTG_LPM - /** Sleep (switch to L0 state) */ - int (*sleep) (void *_p); -#endif - /** Pointer passed to start() and stop() */ - void *p; -} dwc_otg_cil_callbacks_t; - -extern _LONG_CALL_ void dwc_otg_cil_register_pcd_callbacks(dwc_otg_core_if_t * _core_if, - dwc_otg_cil_callbacks_t * _cb, - void *_p); -extern _LONG_CALL_ void dwc_otg_cil_register_hcd_callbacks(dwc_otg_core_if_t * _core_if, - dwc_otg_cil_callbacks_t * _cb, - void *_p); - -extern _LONG_CALL_ void dwc_otg_initiate_srp(void * core_if); - -////////////////////////////////////////////////////////////////////// -/** Start the HCD. Helper function for using the HCD callbacks. - * - * @param core_if Programming view of DWC_otg controller. - */ -extern _LONG_CALL_ void cil_hcd_start(dwc_otg_core_if_t * core_if); - -/** Stop the HCD. Helper function for using the HCD callbacks. - * - * @param core_if Programming view of DWC_otg controller. - */ -extern _LONG_CALL_ void cil_hcd_stop(dwc_otg_core_if_t * core_if); - -/** Disconnect the HCD. Helper function for using the HCD callbacks. - * - * @param core_if Programming view of DWC_otg controller. - */ -extern _LONG_CALL_ void cil_hcd_disconnect(dwc_otg_core_if_t * core_if); - -/** Inform the HCD the a New Session has begun. Helper function for - * using the HCD callbacks. - * - * @param core_if Programming view of DWC_otg controller. - */ -extern _LONG_CALL_ void cil_hcd_session_start(dwc_otg_core_if_t * core_if); - -#ifdef CONFIG_USB_DWC_OTG_LPM -/** - * Inform the HCD about LPM sleep. - * Helper function for using the HCD callbacks. - * - * @param core_if Programming view of DWC_otg controller. - */ -extern _LONG_CALL_ void cil_hcd_sleep(dwc_otg_core_if_t * core_if); -#endif - -/** Resume the HCD. Helper function for using the HCD callbacks. - * - * @param core_if Programming view of DWC_otg controller. - */ -extern _LONG_CALL_ void cil_hcd_resume(dwc_otg_core_if_t * core_if); - -/** Start the PCD. Helper function for using the PCD callbacks. - * - * @param core_if Programming view of DWC_otg controller. - */ -extern _LONG_CALL_ void cil_pcd_start(dwc_otg_core_if_t * core_if); - -/** Stop the PCD. Helper function for using the PCD callbacks. - * - * @param core_if Programming view of DWC_otg controller. - */ -extern _LONG_CALL_ void cil_pcd_stop(dwc_otg_core_if_t * core_if); - -/** Suspend the PCD. Helper function for using the PCD callbacks. - * - * @param core_if Programming view of DWC_otg controller. - */ -extern _LONG_CALL_ void cil_pcd_suspend(dwc_otg_core_if_t * core_if); - -/** Resume the PCD. Helper function for using the PCD callbacks. - * - * @param core_if Programming view of DWC_otg controller. - */ -extern _LONG_CALL_ void cil_pcd_resume(dwc_otg_core_if_t * core_if); - -////////////////////////////////////////////////////////////////////// - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_common.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_common.h deleted file mode 100644 index 934afc7..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_common.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ -#include "basic_types.h" -#include -//#include "va_list.h" -#include - -#include "diag.h" -#include "dwc_otg_dbg.h" -#include "dwc_os.h" - - -typedef struct _RAM_OTG_FUNCTION_TABLE_ { - VOID* (*RamMemSet) (void *dest, int byte, SIZE_T size); - VOID* (*RamMemCpy) (void *dest, void const *src, SIZE_T size); - int (*RamMemCmp) (void const*m1, void const *m2, SIZE_T size); - int (*RamStrnCmp) (const char *s1, const char *s2, SIZE_T size); - int (*RamStrCmp) (const char *s1, const char *s2); - SIZE_T (*RamStrLen) (char const *str); - char* (*RamStrCpy) (char *to, char const *from); - char* (*RamStrDup) (char const *str); - int (*RamAtoi) (const char *str, int32_t *value); - int (*RamAtoui) (const char *str, uint32_t *value); - int (*RamVsnPrintf) (char *str, int size, const char *format, ...); - u32 (*RamSPrintf) (u8 *buf, const char *fmt, ...); - int (*RamSnPrintf) (char *dst, int count, const char * src, ...); - u8* (*RamZmalloc) (u32 sz); - u8* (*RamZmallocAtomic) (u32 sz); - VOID (*RamMfree) (u8 *pbuf, u32 sz); - dwc_spinlock_t* (*RamSpinlockAlloc) (void); - VOID (*RamSpinlockFree) (dwc_spinlock_t *lock); - VOID (*RamSpinlock) (dwc_spinlock_t *lock); - VOID (*RamSpinUnlock) (dwc_spinlock_t *lock); - VOID (*RamSpinIrqSave) (dwc_spinlock_t *lock, dwc_irqflags_t *flags); - VOID (*RamSpinIrqRestore) (dwc_spinlock_t *lock, dwc_irqflags_t flags); - dwc_mutex_t*(*RamMutexAlloc) (void); - VOID (*RamMutexFree) (dwc_mutex_t *mutex); - VOID (*RamMutexLock) (dwc_mutex_t *mutex); - int (*RamMutexTryLock) (dwc_mutex_t *mutex); - VOID (*RamMutexUnLock) (dwc_mutex_t *mutex); - uint32_t(*RamUDelay) (uint32_t usecs); - void (*RamMSleep) (uint32_t msecs); - VOID (*timer_callback) (unsigned long data); - dwc_timer_t *(*RamTimerAlloc) (char *name, dwc_timer_callback_t cb, void *data); - VOID (*RamTimerFree) (dwc_timer_t *timer); - VOID (*RamTimerSche) (dwc_timer_t *timer, uint32_t time_ms); - VOID (*RamTimerCancel) (dwc_timer_t *timer); - VOID (*RamEnterCritical) (void); - VOID (*RamExitCritical) (void); -}RAM_OTG_FUNCTION_TABLE, *PRAM_OTG_FUNCTION_TABLE; - - - -// Global Variable -extern RAM_OTG_FUNCTION_TABLE gRamOTGFunTbl; - -// Funtion Prototype -// ROM -_LONG_CALL_ void dwc_otg_wrapper_reset(IN VOID); -_LONG_CALL_ void dwc_otg_wrapper_init_boot(IN VOID); -_LONG_CALL_ void dwc_otg_power_init(IN VOID); - -_LONG_CALL_ VOID RtlInitListhead_Otg(IN _LIST *list); -_LONG_CALL_ u32 RtlIsListEmpty_Otg(IN _LIST *phead); -_LONG_CALL_ VOID RtlListInsertHead_Otg(IN _LIST *plist,IN _LIST *phead); -_LONG_CALL_ VOID RtlListInsertTail_Otg(IN _LIST *plist,IN _LIST *phead); -_LONG_CALL_ _LIST *RtlListGetNext_Otg(IN _LIST *plist); -_LONG_CALL_ VOID RtlListDelete_Otg(IN _LIST *plist); - -extern _LONG_CALL_ char *DWC_STRDUP_ROM(char const *str); -extern _LONG_CALL_ int DWC_ATOI_ROM(const char *str, int32_t *value); -extern _LONG_CALL_ int DWC_ATOUI_ROM(const char *str, uint32_t *value); -// RAM -extern void dwc_otg_wrapper_init(IN VOID); - - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_core_if.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_core_if.h deleted file mode 100644 index 1589dfb..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_core_if.h +++ /dev/null @@ -1,746 +0,0 @@ -/* ========================================================================== - * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_core_if.h $ - * $Revision: #15 $ - * $Date: 2012/12/10 $ - * $Change: 2123206 $ - * - * Synopsys HS OTG Linux Software Driver and documentation (hereinafter, - * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless - * otherwise expressly agreed to in writing between Synopsys and you. - * - * The Software IS NOT an item of Licensed Software or Licensed Product under - * any End User Software License Agreement or Agreement for Licensed Product - * with Synopsys or any supplement thereto. You are permitted to use and - * redistribute this Software in source and binary forms, with or without - * modification, provided that redistributions of source code must retain this - * notice. You may not view, use, disclose, copy or distribute this file or - * any information contained herein except pursuant to this license grant from - * Synopsys. If you do not agree with this notice, including the disclaimer - * below, then you are not authorized to use the Software. - * - * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * ========================================================================== */ -#if !defined(__DWC_CORE_IF_H__) -#define __DWC_CORE_IF_H__ - -#include "dwc_os.h" - -/** @file - * This file defines DWC_OTG Core API - */ - -struct dwc_otg_core_if; -typedef struct dwc_otg_core_if dwc_otg_core_if_t; - -/** Maximum number of Periodic FIFOs */ -#define MAX_PERIO_FIFOS 15 -/** Maximum number of Periodic FIFOs */ -#define MAX_TX_FIFOS 15 - -/** Maximum number of Endpoints/HostChannels */ -#define MAX_EPS_CHANNELS 8 - -extern _LONG_CALL_ dwc_otg_core_if_t *dwc_otg_cil_init(const uint32_t * _reg_base_addr, int mode); -extern _LONG_CALL_ void dwc_otg_core_init(dwc_otg_core_if_t * _core_if); -extern _LONG_CALL_ void dwc_otg_cil_remove(dwc_otg_core_if_t * _core_if); - -extern _LONG_CALL_ void dwc_otg_enable_global_interrupts(dwc_otg_core_if_t * _core_if); -extern _LONG_CALL_ void dwc_otg_disable_global_interrupts(dwc_otg_core_if_t * _core_if); - -extern _LONG_CALL_ uint8_t dwc_otg_is_device_mode(dwc_otg_core_if_t * _core_if); -extern _LONG_CALL_ uint8_t dwc_otg_is_host_mode(dwc_otg_core_if_t * _core_if); - -extern _LONG_CALL_ uint8_t dwc_otg_is_dma_enable(dwc_otg_core_if_t * core_if); - -/** This function should be called on every hardware interrupt. */ -extern _LONG_CALL_ int32_t dwc_otg_handle_common_intr(void *otg_dev); - -/** @name OTG Core Parameters */ -/** @{ */ - -/** - * Specifies the OTG capabilities. The driver will automatically - * detect the value for this parameter if none is specified. - * 0 - HNP and SRP capable (default) - * 1 - SRP Only capable - * 2 - No HNP/SRP capable - */ -extern _LONG_CALL_ int dwc_otg_set_param_otg_cap(dwc_otg_core_if_t * core_if, int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_otg_cap(dwc_otg_core_if_t * core_if); -#define DWC_OTG_CAP_PARAM_HNP_SRP_CAPABLE 0 -#define DWC_OTG_CAP_PARAM_SRP_ONLY_CAPABLE 1 -#define DWC_OTG_CAP_PARAM_NO_HNP_SRP_CAPABLE 2 -#define dwc_param_otg_cap_default DWC_OTG_CAP_PARAM_HNP_SRP_CAPABLE - -extern _LONG_CALL_ int dwc_otg_set_param_opt(dwc_otg_core_if_t * core_if, int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_opt(dwc_otg_core_if_t * core_if); -#define dwc_param_opt_default 1 - -/** - * Specifies whether to use slave or DMA mode for accessing the data - * FIFOs. The driver will automatically detect the value for this - * parameter if none is specified. - * 0 - Slave - * 1 - DMA (default, if available) - */ -extern _LONG_CALL_ int dwc_otg_set_param_dma_enable(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_dma_enable(dwc_otg_core_if_t * core_if); -#define dwc_param_dma_enable_default 1 - -/** - * When DMA mode is enabled specifies whether to use - * address DMA or DMA Descritor mode for accessing the data - * FIFOs in device mode. The driver will automatically detect - * the value for this parameter if none is specified. - * 0 - address DMA - * 1 - DMA Descriptor(default, if available) - */ -extern _LONG_CALL_ int dwc_otg_set_param_dma_desc_enable(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_dma_desc_enable(dwc_otg_core_if_t * core_if); -#define dwc_param_dma_desc_enable_default 1 - -/** The DMA Burst size (applicable only for External DMA - * Mode). 1, 4, 8 16, 32, 64, 128, 256 (default 32) - */ -extern _LONG_CALL_ int dwc_otg_set_param_dma_burst_size(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_dma_burst_size(dwc_otg_core_if_t * core_if); -#define dwc_param_dma_burst_size_default 32 - -/** - * Specifies the maximum speed of operation in host and device mode. - * The actual speed depends on the speed of the attached device and - * the value of phy_type. The actual speed depends on the speed of the - * attached device. - * 0 - High Speed (default) - * 1 - Full Speed - */ -extern _LONG_CALL_ int dwc_otg_set_param_speed(dwc_otg_core_if_t * core_if, int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_speed(dwc_otg_core_if_t * core_if); -#define dwc_param_speed_default 0 -#define DWC_SPEED_PARAM_HIGH 0 -#define DWC_SPEED_PARAM_FULL 1 - -/** Specifies whether low power mode is supported when attached - * to a Full Speed or Low Speed device in host mode. - * 0 - Don't support low power mode (default) - * 1 - Support low power mode - */ -extern _LONG_CALL_ int dwc_otg_set_param_host_support_fs_ls_low_power(dwc_otg_core_if_t * - core_if, int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_host_support_fs_ls_low_power(dwc_otg_core_if_t - * core_if); -#define dwc_param_host_support_fs_ls_low_power_default 0 - -/** Specifies the PHY clock rate in low power mode when connected to a - * Low Speed device in host mode. This parameter is applicable only if - * HOST_SUPPORT_FS_LS_LOW_POWER is enabled. If PHY_TYPE is set to FS - * then defaults to 6 MHZ otherwise 48 MHZ. - * - * 0 - 48 MHz - * 1 - 6 MHz - */ -extern _LONG_CALL_ int dwc_otg_set_param_host_ls_low_power_phy_clk(dwc_otg_core_if_t * - core_if, int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_host_ls_low_power_phy_clk(dwc_otg_core_if_t * - core_if); -#define dwc_param_host_ls_low_power_phy_clk_default 0 -#define DWC_HOST_LS_LOW_POWER_PHY_CLK_PARAM_48MHZ 0 -#define DWC_HOST_LS_LOW_POWER_PHY_CLK_PARAM_6MHZ 1 - -/** - * 0 - Use cC FIFO size parameters - * 1 - Allow dynamic FIFO sizing (default) - */ -extern _LONG_CALL_ int dwc_otg_set_param_enable_dynamic_fifo(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_enable_dynamic_fifo(dwc_otg_core_if_t * - core_if); -#define dwc_param_enable_dynamic_fifo_default 1 - -/** Total number of 4-byte words in the data FIFO memory. This - * memory includes the Rx FIFO, non-periodic Tx FIFO, and periodic - * Tx FIFOs. - * 32 to 32768 (default 8192) - * Note: The total FIFO memory depth in the FPGA configuration is 8192. - */ -extern _LONG_CALL_ int dwc_otg_set_param_data_fifo_size(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_data_fifo_size(dwc_otg_core_if_t * core_if); -#define dwc_param_data_fifo_size_default 8192 - -/** Number of 4-byte words in the Rx FIFO in device mode when dynamic - * FIFO sizing is enabled. - * 16 to 32768 (default 1064) - */ -extern _LONG_CALL_ int dwc_otg_set_param_dev_rx_fifo_size(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_dev_rx_fifo_size(dwc_otg_core_if_t * core_if); -#define dwc_param_dev_rx_fifo_size_default 1064 - -/** Number of 4-byte words in the non-periodic Tx FIFO in device mode - * when dynamic FIFO sizing is enabled. - * 16 to 32768 (default 1024) - */ -extern _LONG_CALL_ int dwc_otg_set_param_dev_nperio_tx_fifo_size(dwc_otg_core_if_t * - core_if, int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_dev_nperio_tx_fifo_size(dwc_otg_core_if_t * - core_if); -#define dwc_param_dev_nperio_tx_fifo_size_default 1024 - -/** Number of 4-byte words in each of the periodic Tx FIFOs in device - * mode when dynamic FIFO sizing is enabled. - * 4 to 768 (default 256) - */ -extern _LONG_CALL_ int dwc_otg_set_param_dev_perio_tx_fifo_size(dwc_otg_core_if_t * core_if, - int32_t val, int fifo_num); -extern _LONG_CALL_ int32_t dwc_otg_get_param_dev_perio_tx_fifo_size(dwc_otg_core_if_t * - core_if, int fifo_num); -#define dwc_param_dev_perio_tx_fifo_size_default 256 - -/** Number of 4-byte words in the Rx FIFO in host mode when dynamic - * FIFO sizing is enabled. - * 16 to 32768 (default 1024) - */ -extern _LONG_CALL_ int dwc_otg_set_param_host_rx_fifo_size(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_host_rx_fifo_size(dwc_otg_core_if_t * core_if); -#define dwc_param_host_rx_fifo_size_default 1024 - -/** Number of 4-byte words in the non-periodic Tx FIFO in host mode - * when Dynamic FIFO sizing is enabled in the core. - * 16 to 32768 (default 1024) - */ -extern _LONG_CALL_ int dwc_otg_set_param_host_nperio_tx_fifo_size(dwc_otg_core_if_t * - core_if, int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_host_nperio_tx_fifo_size(dwc_otg_core_if_t * - core_if); -#define dwc_param_host_nperio_tx_fifo_size_default 1024 - -/** Number of 4-byte words in the host periodic Tx FIFO when dynamic - * FIFO sizing is enabled. - * 16 to 32768 (default 1024) - */ -extern _LONG_CALL_ int dwc_otg_set_param_host_perio_tx_fifo_size(dwc_otg_core_if_t * - core_if, int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_host_perio_tx_fifo_size(dwc_otg_core_if_t * - core_if); -#define dwc_param_host_perio_tx_fifo_size_default 1024 - -/** The maximum transfer size supported in bytes. - * 2047 to 65,535 (default 65,535) - */ -extern _LONG_CALL_ int dwc_otg_set_param_max_transfer_size(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_max_transfer_size(dwc_otg_core_if_t * core_if); -#define dwc_param_max_transfer_size_default 65535 - -/** The maximum number of packets in a transfer. - * 15 to 511 (default 511) - */ -extern _LONG_CALL_ int dwc_otg_set_param_max_packet_count(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_max_packet_count(dwc_otg_core_if_t * core_if); -#define dwc_param_max_packet_count_default 511 - -/** The number of host channel registers to use. - * 1 to 16 (default 12) - * Note: The FPGA configuration supports a maximum of 12 host channels. - */ -extern _LONG_CALL_ int dwc_otg_set_param_host_channels(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_host_channels(dwc_otg_core_if_t * core_if); -#define dwc_param_host_channels_default 12 - -/** The number of endpoints in addition to EP0 available for device - * mode operations. - * 1 to 15 (default 6 IN and OUT) - * Note: The FPGA configuration supports a maximum of 6 IN and OUT - * endpoints in addition to EP0. - */ -extern _LONG_CALL_ int dwc_otg_set_param_dev_endpoints(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_dev_endpoints(dwc_otg_core_if_t * core_if); -#define dwc_param_dev_endpoints_default 6 - -/** - * Specifies the type of PHY interface to use. By default, the driver - * will automatically detect the phy_type. - * - * 0 - Full Speed PHY - * 1 - UTMI+ (default) - * 2 - ULPI - */ -extern _LONG_CALL_ int dwc_otg_set_param_phy_type(dwc_otg_core_if_t * core_if, int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_phy_type(dwc_otg_core_if_t * core_if); -#define DWC_PHY_TYPE_PARAM_FS 0 -#define DWC_PHY_TYPE_PARAM_UTMI 1 -#define DWC_PHY_TYPE_PARAM_ULPI 2 -#define dwc_param_phy_type_default DWC_PHY_TYPE_PARAM_UTMI - -/** - * Specifies the UTMI+ Data Width. This parameter is - * applicable for a PHY_TYPE of UTMI+ or ULPI. (For a ULPI - * PHY_TYPE, this parameter indicates the data width between - * the MAC and the ULPI Wrapper.) Also, this parameter is - * applicable only if the OTG_HSPHY_WIDTH cC parameter was set - * to "8 and 16 bits", meaning that the core has been - * configured to work at either data path width. - * - * 8 or 16 bits (default 16) - */ -extern _LONG_CALL_ int dwc_otg_set_param_phy_utmi_width(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_phy_utmi_width(dwc_otg_core_if_t * core_if); -#define dwc_param_phy_utmi_width_default 16 - -/** - * Specifies whether the ULPI operates at double or single - * data rate. This parameter is only applicable if PHY_TYPE is - * ULPI. - * - * 0 - single data rate ULPI interface with 8 bit wide data - * bus (default) - * 1 - double data rate ULPI interface with 4 bit wide data - * bus - */ -extern _LONG_CALL_ int dwc_otg_set_param_phy_ulpi_ddr(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_phy_ulpi_ddr(dwc_otg_core_if_t * core_if); -#define dwc_param_phy_ulpi_ddr_default 0 - -/** - * Specifies whether to use the internal or external supply to - * drive the vbus with a ULPI phy. - */ -extern _LONG_CALL_ int dwc_otg_set_param_phy_ulpi_ext_vbus(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_phy_ulpi_ext_vbus(dwc_otg_core_if_t * core_if); -#define DWC_PHY_ULPI_INTERNAL_VBUS 0 -#define DWC_PHY_ULPI_EXTERNAL_VBUS 1 -#define dwc_param_phy_ulpi_ext_vbus_default DWC_PHY_ULPI_INTERNAL_VBUS - -/** - * Specifies whether to use the I2Cinterface for full speed PHY. This - * parameter is only applicable if PHY_TYPE is FS. - * 0 - No (default) - * 1 - Yes - */ -extern _LONG_CALL_ int dwc_otg_set_param_i2c_enable(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_i2c_enable(dwc_otg_core_if_t * core_if); -#define dwc_param_i2c_enable_default 0 - -extern _LONG_CALL_ int dwc_otg_set_param_ulpi_fs_ls(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_ulpi_fs_ls(dwc_otg_core_if_t * core_if); -#define dwc_param_ulpi_fs_ls_default 0 - -extern _LONG_CALL_ int dwc_otg_set_param_ts_dline(dwc_otg_core_if_t * core_if, int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_ts_dline(dwc_otg_core_if_t * core_if); -#define dwc_param_ts_dline_default 0 - -/** - * Specifies whether dedicated transmit FIFOs are - * enabled for non periodic IN endpoints in device mode - * 0 - No - * 1 - Yes - */ -extern _LONG_CALL_ int dwc_otg_set_param_en_multiple_tx_fifo(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_en_multiple_tx_fifo(dwc_otg_core_if_t * - core_if); -#define dwc_param_en_multiple_tx_fifo_default 1 - -/** Number of 4-byte words in each of the Tx FIFOs in device - * mode when dynamic FIFO sizing is enabled. - * 4 to 768 (default 256) - */ -//extern int dwc_otg_set_param_dev_tx_fifo_size(dwc_otg_core_if_t * core_if, -// int fifo_num, int32_t val); -extern _LONG_CALL_ int dwc_otg_set_param_dev_tx_fifo_size(dwc_otg_core_if_t * core_if, int32_t val, - int fifo_num); - -extern _LONG_CALL_ int32_t dwc_otg_get_param_dev_tx_fifo_size(dwc_otg_core_if_t * core_if, - int fifo_num); -#define dwc_param_dev_tx_fifo_size_default 256 - -/** Thresholding enable flag- - * bit 0 - enable non-ISO Tx thresholding - * bit 1 - enable ISO Tx thresholding - * bit 2 - enable Rx thresholding - */ -extern _LONG_CALL_ int dwc_otg_set_param_thr_ctl(dwc_otg_core_if_t * core_if, int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_thr_ctl(dwc_otg_core_if_t * core_if, int fifo_num); -#define dwc_param_thr_ctl_default 0 - -/** Thresholding length for Tx - * FIFOs in 32 bit DWORDs - */ -extern _LONG_CALL_ int dwc_otg_set_param_tx_thr_length(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_tx_thr_length(dwc_otg_core_if_t * core_if); -#define dwc_param_tx_thr_length_default 64 - -/** Thresholding length for Rx - * FIFOs in 32 bit DWORDs - */ -extern _LONG_CALL_ int dwc_otg_set_param_rx_thr_length(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_rx_thr_length(dwc_otg_core_if_t * core_if); -#define dwc_param_rx_thr_length_default 64 - -/** - * Specifies whether LPM (Link Power Management) support is enabled - */ -extern _LONG_CALL_ int dwc_otg_set_param_lpm_enable(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_lpm_enable(dwc_otg_core_if_t * core_if); -#define dwc_param_lpm_enable_default 1 - -/** - * Specifies whether LPM Errata (Link Power Management) support is enabled - */ -extern _LONG_CALL_ int dwc_otg_set_param_besl_enable(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_besl_enable(dwc_otg_core_if_t * core_if); -#define dwc_param_besl_enable_default 0 - -/** - * Specifies baseline_besl default value - */ -extern _LONG_CALL_ int dwc_otg_set_param_baseline_besl(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_baseline_besl(dwc_otg_core_if_t * core_if); -#define dwc_param_baseline_besl_default 0 - -/** - * Specifies deep_besl default value - */ -extern _LONG_CALL_ int dwc_otg_set_param_deep_besl(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_deep_besl(dwc_otg_core_if_t * core_if); -#define dwc_param_deep_besl_default 15 - -/** - * Specifies whether PTI enhancement is enabled - */ -extern _LONG_CALL_ int dwc_otg_set_param_pti_enable(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_pti_enable(dwc_otg_core_if_t * core_if); -#define dwc_param_pti_enable_default 0 - -/** - * Specifies whether MPI enhancement is enabled - */ -extern _LONG_CALL_ int dwc_otg_set_param_mpi_enable(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_mpi_enable(dwc_otg_core_if_t * core_if); -#define dwc_param_mpi_enable_default 0 - -/** - * Specifies whether ADP capability is enabled - */ -extern _LONG_CALL_ int dwc_otg_set_param_adp_enable(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_adp_enable(dwc_otg_core_if_t * core_if); -#define dwc_param_adp_enable_default 0 - -/** - * Specifies whether IC_USB capability is enabled - */ - -extern _LONG_CALL_ int dwc_otg_set_param_ic_usb_cap(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_ic_usb_cap(dwc_otg_core_if_t * core_if); -#define dwc_param_ic_usb_cap_default 0 - -extern _LONG_CALL_ int dwc_otg_set_param_ahb_thr_ratio(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_ahb_thr_ratio(dwc_otg_core_if_t * core_if); -#define dwc_param_ahb_thr_ratio_default 0 - -extern _LONG_CALL_ int dwc_otg_set_param_power_down(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_power_down(dwc_otg_core_if_t * core_if); -#define dwc_param_power_down_default 0 - -extern _LONG_CALL_ int dwc_otg_set_param_reload_ctl(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_reload_ctl(dwc_otg_core_if_t * core_if); -#define dwc_param_reload_ctl_default 0 - -extern int dwc_otg_set_param_dev_out_nak(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_dev_out_nak(dwc_otg_core_if_t * core_if); -#define dwc_param_dev_out_nak_default 0 - -extern _LONG_CALL_ int dwc_otg_set_param_cont_on_bna(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_cont_on_bna(dwc_otg_core_if_t * core_if); -#define dwc_param_cont_on_bna_default 0 - -extern _LONG_CALL_ int dwc_otg_set_param_ahb_single(dwc_otg_core_if_t * core_if, - int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_ahb_single(dwc_otg_core_if_t * core_if); -#define dwc_param_ahb_single_default 0 - -extern _LONG_CALL_ int dwc_otg_set_param_otg_ver(dwc_otg_core_if_t * core_if, int32_t val); -extern _LONG_CALL_ int32_t dwc_otg_get_param_otg_ver(dwc_otg_core_if_t * core_if); -#define dwc_param_otg_ver_default 0 - -/** @} */ - -/** @name Access to registers and bit-fields */ - -/** - * Dump core registers and SPRAM - */ -extern _LONG_CALL_ void dwc_otg_dump_dev_registers(dwc_otg_core_if_t * _core_if); -extern _LONG_CALL_ void dwc_otg_dump_spram(dwc_otg_core_if_t * _core_if); -extern _LONG_CALL_ void dwc_otg_dump_host_registers(dwc_otg_core_if_t * _core_if); -extern _LONG_CALL_ void dwc_otg_dump_global_registers(dwc_otg_core_if_t * _core_if); - -/** - * Get host negotiation status. - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_hnpstatus(dwc_otg_core_if_t * core_if); - -/** - * Get srp status - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_srpstatus(dwc_otg_core_if_t * core_if); - -/** - * Set hnpreq bit in the GOTGCTL register. - */ -extern _LONG_CALL_ void dwc_otg_set_hnpreq(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * Get Content of SNPSID register. - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_gsnpsid(dwc_otg_core_if_t * core_if); - -/** - * Get current mode. - * Returns 0 if in device mode, and 1 if in host mode. - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_mode(dwc_otg_core_if_t * core_if); - -/** - * Get value of hnpcapable field in the GUSBCFG register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_hnpcapable(dwc_otg_core_if_t * core_if); -/** - * Set value of hnpcapable field in the GUSBCFG register - */ -extern _LONG_CALL_ void dwc_otg_set_hnpcapable(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * Get value of srpcapable field in the GUSBCFG register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_srpcapable(dwc_otg_core_if_t * core_if); -/** - * Set value of srpcapable field in the GUSBCFG register - */ -extern _LONG_CALL_ void dwc_otg_set_srpcapable(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * Get value of devspeed field in the DCFG register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_devspeed(dwc_otg_core_if_t * core_if); -/** - * Set value of devspeed field in the DCFG register - */ -extern void dwc_otg_set_devspeed(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * Get the value of busconnected field from the HPRT0 register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_busconnected(dwc_otg_core_if_t * core_if); - -/** - * Gets the device enumeration Speed. - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_enumspeed(dwc_otg_core_if_t * core_if); - -/** - * Get value of prtpwr field from the HPRT0 register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_prtpower(dwc_otg_core_if_t * core_if); - -/** - * Get value of flag indicating core state - hibernated or not - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_core_state(dwc_otg_core_if_t * core_if); - -/** - * Set value of prtpwr field from the HPRT0 register - */ -extern _LONG_CALL_ void dwc_otg_set_prtpower(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * Get value of prtsusp field from the HPRT0 regsiter - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_prtsuspend(dwc_otg_core_if_t * core_if); -/** - * Set value of prtpwr field from the HPRT0 register - */ -extern _LONG_CALL_ void dwc_otg_set_prtsuspend(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * Get value of ModeChTimEn field from the HCFG regsiter - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_mode_ch_tim(dwc_otg_core_if_t * core_if); -/** - * Set value of ModeChTimEn field from the HCFG regsiter - */ -extern _LONG_CALL_ void dwc_otg_set_mode_ch_tim(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * Get value of Fram Interval field from the HFIR regsiter - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_fr_interval(dwc_otg_core_if_t * core_if); -/** - * Set value of Frame Interval field from the HFIR regsiter - */ -extern _LONG_CALL_ void dwc_otg_set_fr_interval(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * Set value of prtres field from the HPRT0 register - *FIXME Remove? - */ -extern _LONG_CALL_ void dwc_otg_set_prtresume(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * Get value of rmtwkupsig bit in DCTL register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_remotewakesig(dwc_otg_core_if_t * core_if); - -/** - * Get value of besl_reject bit in DCTL register - */ - -extern _LONG_CALL_ uint32_t dwc_otg_get_beslreject(dwc_otg_core_if_t * core_if); - -/** - * Set value of besl_reject bit in DCTL register - */ - -extern _LONG_CALL_ void dwc_otg_set_beslreject(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * Get value of prt_sleep_sts field from the GLPMCFG register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_lpm_portsleepstatus(dwc_otg_core_if_t * core_if); - -/** - * Get value of rem_wkup_en field from the GLPMCFG register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_lpm_remotewakeenabled(dwc_otg_core_if_t * core_if); - -/** - * Get value of appl_resp field from the GLPMCFG register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_lpmresponse(dwc_otg_core_if_t * core_if); -/** - * Set value of appl_resp field from the GLPMCFG register - */ -extern _LONG_CALL_ void dwc_otg_set_lpmresponse(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * Get value of hsic_connect field from the GLPMCFG register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_hsic_connect(dwc_otg_core_if_t * core_if); -/** - * Set value of hsic_connect field from the GLPMCFG register - */ -extern _LONG_CALL_ void dwc_otg_set_hsic_connect(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * Get value of inv_sel_hsic field from the GLPMCFG register. - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_inv_sel_hsic(dwc_otg_core_if_t * core_if); -/** - * Set value of inv_sel_hsic field from the GLPMFG register. - */ -extern _LONG_CALL_ void dwc_otg_set_inv_sel_hsic(dwc_otg_core_if_t * core_if, uint32_t val); -/** - * Set value of hird_thresh field from the GLPMFG register. - */ -extern _LONG_CALL_ void dwc_otg_set_hirdthresh(dwc_otg_core_if_t * core_if, uint32_t val); -/** - * Get value of hird_thresh field from the GLPMFG register. - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_hirdthresh(dwc_otg_core_if_t * core_if); - - -/* - * Some functions for accessing registers - */ - -/** - * GOTGCTL register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_gotgctl(dwc_otg_core_if_t * core_if); -extern _LONG_CALL_ void dwc_otg_set_gotgctl(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * GUSBCFG register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_gusbcfg(dwc_otg_core_if_t * core_if); -extern _LONG_CALL_ void dwc_otg_set_gusbcfg(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * GRXFSIZ register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_grxfsiz(dwc_otg_core_if_t * core_if); -extern _LONG_CALL_ void dwc_otg_set_grxfsiz(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * GNPTXFSIZ register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_gnptxfsiz(dwc_otg_core_if_t * core_if); -extern _LONG_CALL_ void dwc_otg_set_gnptxfsiz(dwc_otg_core_if_t * core_if, uint32_t val); - -extern _LONG_CALL_ uint32_t dwc_otg_get_gpvndctl(dwc_otg_core_if_t * core_if); -extern _LONG_CALL_ void dwc_otg_set_gpvndctl(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * GGPIO register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_ggpio(dwc_otg_core_if_t * core_if); -extern _LONG_CALL_ void dwc_otg_set_ggpio(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * GUID register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_guid(dwc_otg_core_if_t * core_if); -extern _LONG_CALL_ void dwc_otg_set_guid(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * HPRT0 register - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_hprt0(dwc_otg_core_if_t * core_if); -extern _LONG_CALL_ void dwc_otg_set_hprt0(dwc_otg_core_if_t * core_if, uint32_t val); - -/** - * GHPTXFSIZE - */ -extern _LONG_CALL_ uint32_t dwc_otg_get_hptxfsiz(dwc_otg_core_if_t * core_if); - -/** @} */ - -#endif /* __DWC_CORE_IF_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_dbg.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_dbg.h deleted file mode 100644 index 69cf3c3..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_dbg.h +++ /dev/null @@ -1,114 +0,0 @@ -/* ========================================================================== - * - * Synopsys HS OTG Linux Software Driver and documentation (hereinafter, - * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless - * otherwise expressly agreed to in writing between Synopsys and you. - * - * The Software IS NOT an item of Licensed Software or Licensed Product under - * any End User Software License Agreement or Agreement for Licensed Product - * with Synopsys or any supplement thereto. You are permitted to use and - * redistribute this Software in source and binary forms, with or without - * modification, provided that redistributions of source code must retain this - * notice. You may not view, use, disclose, copy or distribute this file or - * any information contained herein except pursuant to this license grant from - * Synopsys. If you do not agree with this notice, including the disclaimer - * below, then you are not authorized to use the Software. - * - * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * ========================================================================== */ - -#ifndef __DWC_OTG_DBG_H__ -#define __DWC_OTG_DBG_H__ -#include "section_config.h" - -//#define OTGDEBUG 1 -#define VERBOSE 1 - -/** @file - * This file defines debug levels. - * Debugging support vanishes in non-debug builds. - */ - -/** - * The Debug Level bit-mask variable. - */ -extern uint32_t g_dbg_lvl; -/** - * Set the Debug Level variable. - */ -extern _LONG_CALL_ uint32_t SET_DEBUG_LEVEL(const uint32_t new); - -/** When debug level has the DBG_CIL bit set, display CIL Debug messages. */ -#define DBG_CIL (0x2) -/** When debug level has the DBG_CILV bit set, display CIL Verbose debug - * messages */ -#define DBG_CILV (0x20) -/** When debug level has the DBG_PCD bit set, display PCD (Device) debug - * messages */ -#define DBG_PCD (0x4) -/** When debug level has the DBG_PCDV set, display PCD (Device) Verbose debug - * messages */ -#define DBG_PCDV (0x40) -/** When debug level has the DBG_HCD bit set, display Host debug messages */ -#define DBG_HCD (0x8) -/** When debug level has the DBG_HCDV bit set, display Verbose Host debug - * messages */ -#define DBG_HCDV (0x80) -/** When debug level has the DBG_HCD_URB bit set, display enqueued URBs in host - * mode. */ -#define DBG_HCD_URB (0x800) - -/** When debug level has any bit set, display debug messages */ -#define DBG_ANY (0xFF) - -/** All debug messages off */ -#define DBG_OFF 0 - -/** Prefix string for DWC_DEBUG print macros. */ -#define USB_DWC "DWC_otg: " - -/** - * Print a debug message when the Global debug level variable contains - * the bit defined in lvl. - * - * @param[in] lvl - Debug level, use one of the DBG_ constants above. - * @param[in] x - like printf - * - * Example:

- * - * DWC_DEBUGPL( DBG_ANY, "%s(%p)\n", __func__, _reg_base_addr); - * - *
- * results in:
- * - * usb-DWC_otg: dwc_otg_cil_init(ca867000) - * - */ -#ifdef OTGDEBUG - -//# define DWC_DEBUGPL(lvl, x...) do{ if ((lvl)&g_dbg_lvl)__DWC_DEBUG(USB_DWC x ); }while(0) -# define DWC_DEBUGPL(lvl, x...) do{ if ((lvl)&g_dbg_lvl)DBG_8195A_OTG(x); }while(0) - -# define DWC_DEBUGP(x...) DWC_DEBUGPL(DBG_ANY, x ) - -# define CHK_DEBUG_LEVEL(level) ((level) & g_dbg_lvl) - -#else - -# define DWC_DEBUGPL(lvl, x...) do{}while(0) -# define DWC_DEBUGP(x...) - -# define CHK_DEBUG_LEVEL(level) (0) - -#endif /*DEBUG*/ -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_driver.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_driver.h deleted file mode 100644 index 6469d0d..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_driver.h +++ /dev/null @@ -1,124 +0,0 @@ -/* ========================================================================== - * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_driver.h $ - * $Revision: #19 $ - * $Date: 2010/11/15 $ - * $Change: 1627671 $ - * - * Synopsys HS OTG Linux Software Driver and documentation (hereinafter, - * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless - * otherwise expressly agreed to in writing between Synopsys and you. - * - * The Software IS NOT an item of Licensed Software or Licensed Product under - * any End User Software License Agreement or Agreement for Licensed Product - * with Synopsys or any supplement thereto. You are permitted to use and - * redistribute this Software in source and binary forms, with or without - * modification, provided that redistributions of source code must retain this - * notice. You may not view, use, disclose, copy or distribute this file or - * any information contained herein except pursuant to this license grant from - * Synopsys. If you do not agree with this notice, including the disclaimer - * below, then you are not authorized to use the Software. - * - * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * ========================================================================== */ - -#ifndef __DWC_OTG_DRIVER_H__ -#define __DWC_OTG_DRIVER_H__ - -/** @file - * This file contains the interface to the Linux driver. - */ -//#include "dwc_otg_os_dep.h" -#include "dwc_otg_core_if.h" -#include "osdep_service.h" - -/* Type declarations */ -struct dwc_otg_pcd; -struct dwc_otg_hcd; - -/** - * This structure is a wrapper that encapsulates the driver components used to - * manage a single DWC_otg controller. - */ -typedef struct dwc_otg_device { - /** Structure containing OS-dependent stuff. KEEP THIS STRUCT AT THE - * VERY BEGINNING OF THE DEVICE STRUCT. OSes such as FreeBSD and NetBSD - * require this. */ - //struct os_dependent os_dep; - /** Base address returned from ioremap() */ - void *base; - uint32_t reg_offset; - /** Pointer to the core interface structure. */ - dwc_otg_core_if_t *core_if; - - /** Pointer to the PCD structure. */ - struct dwc_otg_pcd *pcd; - - /** Pointer to the HCD structure. */ - struct dwc_otg_hcd *hcd; - - /** Flag to indicate whether the common IRQ handler is installed. */ - uint8_t common_irq_installed; - -} dwc_otg_device_t; - -/*We must clear S3C24XX_EINTPEND external interrupt register - * because after clearing in this register trigerred IRQ from - * H/W core in kernel interrupt can be occured again before OTG - * handlers clear all IRQ sources of Core registers because of - * timing latencies and Low Level IRQ Type. - */ -#ifdef CONFIG_MACH_IPMATE -#define S3C2410X_CLEAR_EINTPEND() \ -do { \ - __raw_writel(1UL << 11,S3C24XX_EINTPEND); \ -} while (0) -#else -#define S3C2410X_CLEAR_EINTPEND() do { } while (0) -#endif - - -typedef struct USB_OTG_DRV_ADP { - dwc_otg_device_t *otgdev; - IRQ_HANDLE *pIrqHnd; -#if !TASK_SCHEDULER_DISABLED -#if defined(DWC_WITH_WLAN_OSDEP) - _sema Sema; -#else - _Sema Sema; -#endif -#else - u32 Sema; -#endif -#if !TASK_SCHEDULER_DISABLED -#if defined(DWC_WITH_WLAN_OSDEP) - struct task_struct OTGTask; -#else - xTaskHandle OTGTask; -#endif -#else - u32 OTGTask; -#endif - -}USB_OTG_DRV_ADP,*PUSB_OTG_DRV_ADP; - - - -typedef struct _DWC_OTG_ADAPTER_ { - u32 temp0; - dwc_otg_device_t *otgdev; - u8 TestItem; -}DWC_OTG_ADAPTER, *PDWC_OTG_ADAPTER; -void dwc_otg_disable_irq(IN VOID); -void dwc_otg_enable_irq(IN VOID); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_hcd.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_hcd.h deleted file mode 100644 index b85eebd..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_hcd.h +++ /dev/null @@ -1,743 +0,0 @@ -/* ========================================================================== - * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_hcd.h $ - * $Revision: #58 $ - * $Date: 2011/09/15 $ - * $Change: 1846647 $ - * - * Synopsys HS OTG Linux Software Driver and documentation (hereinafter, - * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless - * otherwise expressly agreed to in writing between Synopsys and you. - * - * The Software IS NOT an item of Licensed Software or Licensed Product under - * any End User Software License Agreement or Agreement for Licensed Product - * with Synopsys or any supplement thereto. You are permitted to use and - * redistribute this Software in source and binary forms, with or without - * modification, provided that redistributions of source code must retain this - * notice. You may not view, use, disclose, copy or distribute this file or - * any information contained herein except pursuant to this license grant from - * Synopsys. If you do not agree with this notice, including the disclaimer - * below, then you are not authorized to use the Software. - * - * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * ========================================================================== */ -#if 1//ndef DWC_DEVICE_ONLY -#ifndef __DWC_HCD_H__ -#define __DWC_HCD_H__ - -//#include "dwc_otg_os_dep.h" -#include "usb.h" -#include "dwc_otg_hcd_if.h" -#include "dwc_otg_core_if.h" -#include "dwc_list.h" -#include "dwc_otg_cil.h" -#undef DWC_HS_ELECT_TST -/** - * @file - * - * This file contains the structures, constants, and interfaces for - * the Host Contoller Driver (HCD). - * - * The Host Controller Driver (HCD) is responsible for translating requests - * from the USB Driver into the appropriate actions on the DWC_otg controller. - * It isolates the USBD from the specifics of the controller by providing an - * API to the USBD. - */ - -struct dwc_otg_hcd_pipe_info { - uint8_t dev_addr; - uint8_t ep_num; - uint8_t pipe_type; - uint8_t pipe_dir; - uint16_t mps; -}; - -struct dwc_otg_hcd_iso_packet_desc { - uint32_t offset; - uint32_t length; - uint32_t actual_length; - uint32_t status; -}; - -struct dwc_otg_qtd; - -struct dwc_otg_hcd_urb { - void *priv; - struct dwc_otg_qtd *qtd; - void *buf; - dwc_dma_t dma; - void *setup_packet; - dwc_dma_t setup_dma; - uint32_t length; - uint32_t actual_length; - uint32_t status; - uint32_t error_count; - uint32_t packet_count; - uint32_t flags; - uint16_t interval; - struct dwc_otg_hcd_pipe_info pipe_info; - struct dwc_otg_hcd_iso_packet_desc iso_descs[0]; -}; - -extern _LONG_CALL_ -uint8_t dwc_otg_hcd_get_ep_num(struct dwc_otg_hcd_pipe_info *pipe); - -extern _LONG_CALL_ -uint8_t dwc_otg_hcd_get_pipe_type(struct dwc_otg_hcd_pipe_info - *pipe); - -extern _LONG_CALL_ -uint16_t dwc_otg_hcd_get_mps(struct dwc_otg_hcd_pipe_info *pipe); - -extern _LONG_CALL_ -uint8_t dwc_otg_hcd_get_dev_addr(struct dwc_otg_hcd_pipe_info - *pipe); - -extern _LONG_CALL_ -uint8_t dwc_otg_hcd_is_pipe_isoc(struct dwc_otg_hcd_pipe_info - *pipe); - -extern _LONG_CALL_ -uint8_t dwc_otg_hcd_is_pipe_int(struct dwc_otg_hcd_pipe_info - *pipe); - -extern _LONG_CALL_ -uint8_t dwc_otg_hcd_is_pipe_bulk(struct dwc_otg_hcd_pipe_info - *pipe); - -extern _LONG_CALL_ -uint8_t dwc_otg_hcd_is_pipe_control(struct dwc_otg_hcd_pipe_info - *pipe); - -extern _LONG_CALL_ -uint8_t dwc_otg_hcd_is_pipe_in(struct dwc_otg_hcd_pipe_info *pipe); - -extern _LONG_CALL_ -uint8_t dwc_otg_hcd_is_pipe_out(struct dwc_otg_hcd_pipe_info - *pipe); - -extern _LONG_CALL_ -void dwc_otg_hcd_fill_pipe(struct dwc_otg_hcd_pipe_info *pipe, - uint8_t devaddr, uint8_t ep_num, - uint8_t pipe_type, uint8_t pipe_dir, - uint16_t mps); - -/** - * Phases for control transfers. - */ -typedef enum dwc_otg_control_phase { - DWC_OTG_CONTROL_SETUP, - DWC_OTG_CONTROL_DATA, - DWC_OTG_CONTROL_STATUS -} dwc_otg_control_phase_e; - -/** Transaction types. */ -typedef enum dwc_otg_transaction_type { - DWC_OTG_TRANSACTION_NONE, - DWC_OTG_TRANSACTION_PERIODIC, - DWC_OTG_TRANSACTION_NON_PERIODIC, - DWC_OTG_TRANSACTION_ALL -} dwc_otg_transaction_type_e; - -struct dwc_otg_qh; - -/** - * A Queue Transfer Descriptor (QTD) holds the state of a bulk, control, - * interrupt, or isochronous transfer. A single QTD is created for each URB - * (of one of these types) submitted to the HCD. The transfer associated with - * a QTD may require one or multiple transactions. - * - * A QTD is linked to a Queue Head, which is entered in either the - * non-periodic or periodic schedule for execution. When a QTD is chosen for - * execution, some or all of its transactions may be executed. After - * execution, the state of the QTD is updated. The QTD may be retired if all - * its transactions are complete or if an error occurred. Otherwise, it - * remains in the schedule so more transactions can be executed later. - */ -typedef struct dwc_otg_qtd { - /** - * Determines the PID of the next data packet for the data phase of - * control transfers. Ignored for other transfer types.
- * One of the following values: - * - DWC_OTG_HC_PID_DATA0 - * - DWC_OTG_HC_PID_DATA1 - */ - uint8_t data_toggle; - - /** Current phase for control transfers (Setup, Data, or Status). */ - dwc_otg_control_phase_e control_phase; - - /** Keep track of the current split type - * for FS/LS endpoints on a HS Hub */ - uint8_t complete_split; - - /** How many bytes transferred during SSPLIT OUT */ - uint32_t ssplit_out_xfer_count; - - /** - * Holds the number of bus errors that have occurred for a transaction - * within this transfer. - */ - uint8_t error_count; - - /** - * Index of the next frame descriptor for an isochronous transfer. A - * frame descriptor describes the buffer position and length of the - * data to be transferred in the next scheduled (micro)frame of an - * isochronous transfer. It also holds status for that transaction. - * The frame index starts at 0. - */ - uint16_t isoc_frame_index; - - /** Position of the ISOC split on full/low speed */ - uint8_t isoc_split_pos; - - /** Position of the ISOC split in the buffer for the current frame */ - uint16_t isoc_split_offset; - - /** URB for this transfer */ - struct dwc_otg_hcd_urb *urb; - - struct dwc_otg_qh *qh; - - /** This list of QTDs */ - DWC_CIRCLEQ_ENTRY(dwc_otg_qtd) qtd_list_entry; - - /** Indicates if this QTD is currently processed by HW. */ - uint8_t in_process; - - /** Number of DMA descriptors for this QTD */ - uint8_t n_desc; - - /** - * Last activated frame(packet) index. - * Used in Descriptor DMA mode only. - */ - uint16_t isoc_frame_index_last; - -} dwc_otg_qtd_t; - -DWC_CIRCLEQ_HEAD(dwc_otg_qtd_list, dwc_otg_qtd); - -/** - * A Queue Head (QH) holds the static characteristics of an endpoint and - * maintains a list of transfers (QTDs) for that endpoint. A QH structure may - * be entered in either the non-periodic or periodic schedule. - */ -typedef struct dwc_otg_qh { - /** - * Endpoint type. - * One of the following values: - * - UE_CONTROL - * - UE_BULK - * - UE_INTERRUPT - * - UE_ISOCHRONOUS - */ - uint8_t ep_type; - uint8_t ep_is_in; - - /** wMaxPacketSize Field of Endpoint Descriptor. */ - uint16_t maxp; - - /** - * Device speed. - * One of the following values: - * - DWC_OTG_EP_SPEED_LOW - * - DWC_OTG_EP_SPEED_FULL - * - DWC_OTG_EP_SPEED_HIGH - */ - uint8_t dev_speed; - - /** - * Determines the PID of the next data packet for non-control - * transfers. Ignored for control transfers.
- * One of the following values: - * - DWC_OTG_HC_PID_DATA0 - * - DWC_OTG_HC_PID_DATA1 - */ - uint8_t data_toggle; - - /** Ping state if 1. */ - uint8_t ping_state; - - /** - * List of QTDs for this QH. - */ - struct dwc_otg_qtd_list qtd_list; - - /** Host channel currently processing transfers for this QH. */ - struct dwc_hc *channel; - - /** Full/low speed endpoint on high-speed hub requires split. */ - uint8_t do_split; - - /** @name Periodic schedule information */ - /** @{ */ - - /** Bandwidth in microseconds per (micro)frame. */ - uint16_t usecs; - - /** Interval between transfers in (micro)frames. */ - uint16_t interval; - - /** - * (micro)frame to initialize a periodic transfer. The transfer - * executes in the following (micro)frame. - */ - uint16_t sched_frame; - - /** (micro)frame at which last start split was initialized. */ - uint16_t start_split_frame; - - /** @} */ - - /** - * Used instead of original buffer if - * it(physical address) is not dword-aligned. - */ - uint8_t *dw_align_buf; - dwc_dma_t dw_align_buf_dma; - - /** Entry for QH in either the periodic or non-periodic schedule. */ - dwc_list_link_t qh_list_entry; - - /** @name Descriptor DMA support */ - /** @{ */ - - /** Descriptor List. */ - dwc_otg_host_dma_desc_t *desc_list; - - /** Descriptor List physical address. */ - dwc_dma_t desc_list_dma; - - /** - * Xfer Bytes array. - * Each element corresponds to a descriptor and indicates - * original XferSize size value for the descriptor. - */ - uint32_t *n_bytes; - - /** Actual number of transfer descriptors in a list. */ - uint16_t ntd; - - /** First activated isochronous transfer descriptor index. */ - uint8_t td_first; - /** Last activated isochronous transfer descriptor index. */ - uint8_t td_last; - - /** @} */ - -} dwc_otg_qh_t; - -DWC_CIRCLEQ_HEAD(hc_list, dwc_hc); - -/** - * This structure holds the state of the HCD, including the non-periodic and - * periodic schedules. - */ -struct dwc_otg_hcd { - /** The DWC otg device pointer */ - struct dwc_otg_device *otg_dev; - /** DWC OTG Core Interface Layer */ - dwc_otg_core_if_t *core_if; - - /** Function HCD driver callbacks */ - struct dwc_otg_hcd_function_ops *fops; - - /** Internal DWC HCD Flags */ - volatile union dwc_otg_hcd_internal_flags { - uint32_t d32; - struct { - unsigned port_connect_status_change:1; - unsigned port_connect_status:1; - unsigned port_reset_change:1; - unsigned port_enable_change:1; - unsigned port_suspend_change:1; - unsigned port_over_current_change:1; - unsigned port_l1_change:1; - unsigned reserved:26; - } b; - } flags; - - /** - * Inactive items in the non-periodic schedule. This is a list of - * Queue Heads. Transfers associated with these Queue Heads are not - * currently assigned to a host channel. - */ - dwc_list_link_t non_periodic_sched_inactive; - - /** - * Active items in the non-periodic schedule. This is a list of - * Queue Heads. Transfers associated with these Queue Heads are - * currently assigned to a host channel. - */ - dwc_list_link_t non_periodic_sched_active; - - /** - * Pointer to the next Queue Head to process in the active - * non-periodic schedule. - */ - dwc_list_link_t *non_periodic_qh_ptr; - - /** - * Inactive items in the periodic schedule. This is a list of QHs for - * periodic transfers that are _not_ scheduled for the next frame. - * Each QH in the list has an interval counter that determines when it - * needs to be scheduled for execution. This scheduling mechanism - * allows only a simple calculation for periodic bandwidth used (i.e. - * must assume that all periodic transfers may need to execute in the - * same frame). However, it greatly simplifies scheduling and should - * be sufficient for the vast majority of OTG hosts, which need to - * connect to a small number of peripherals at one time. - * - * Items move from this list to periodic_sched_ready when the QH - * interval counter is 0 at SOF. - */ - dwc_list_link_t periodic_sched_inactive; - - /** - * List of periodic QHs that are ready for execution in the next - * frame, but have not yet been assigned to host channels. - * - * Items move from this list to periodic_sched_assigned as host - * channels become available during the current frame. - */ - dwc_list_link_t periodic_sched_ready; - - /** - * List of periodic QHs to be executed in the next frame that are - * assigned to host channels. - * - * Items move from this list to periodic_sched_queued as the - * transactions for the QH are queued to the DWC_otg controller. - */ - dwc_list_link_t periodic_sched_assigned; - - /** - * List of periodic QHs that have been queued for execution. - * - * Items move from this list to either periodic_sched_inactive or - * periodic_sched_ready when the channel associated with the transfer - * is released. If the interval for the QH is 1, the item moves to - * periodic_sched_ready because it must be rescheduled for the next - * frame. Otherwise, the item moves to periodic_sched_inactive. - */ - dwc_list_link_t periodic_sched_queued; - - /** - * Total bandwidth claimed so far for periodic transfers. This value - * is in microseconds per (micro)frame. The assumption is that all - * periodic transfers may occur in the same (micro)frame. - */ - uint16_t periodic_usecs; - - /** - * Frame number read from the core at SOF. The value ranges from 0 to - * DWC_HFNUM_MAX_FRNUM. - */ - uint16_t frame_number; - - /** - * Count of periodic QHs, if using several eps. For SOF enable/disable. - */ - uint16_t periodic_qh_count; - - /** - * Free host channels in the controller. This is a list of - * dwc_hc_t items. - */ - struct hc_list free_hc_list; - /** - * Number of host channels assigned to periodic transfers. Currently - * assuming that there is a dedicated host channel for each periodic - * transaction and at least one host channel available for - * non-periodic transactions. - */ - int periodic_channels; - - /** - * Number of host channels assigned to non-periodic transfers. - */ - int non_periodic_channels; - - /** - * Array of pointers to the host channel descriptors. Allows accessing - * a host channel descriptor given the host channel number. This is - * useful in interrupt handlers. - */ - struct dwc_hc *hc_ptr_array[MAX_EPS_CHANNELS]; - - /** - * Buffer to use for any data received during the status phase of a - * control transfer. Normally no data is transferred during the status - * phase. This buffer is used as a bit bucket. - */ - uint8_t *status_buf; - - /** - * DMA address for status_buf. - */ - dma_addr_t status_buf_dma; -#define DWC_OTG_HCD_STATUS_BUF_SIZE 64 - - /** - * Connection timer. An OTG host must display a message if the device - * does not connect. Started when the VBus power is turned on via - * sysfs attribute "buspower". - */ - dwc_timer_t *conn_timer; - - /* Tasket to do a reset */ - //dwc_tasklet_t *reset_tasklet; - - /* */ - dwc_spinlock_t *lock; - - /** - * Private data that could be used by OS wrapper. - */ - void *priv; - - uint8_t otg_port; - - /** Frame List */ - uint32_t *frame_list; - - /** Frame List DMA address */ - dma_addr_t frame_list_dma; - -#ifdef OTGDEBUG - uint32_t frrem_samples; - uint64_t frrem_accum; - - uint32_t hfnum_7_samples_a; - uint64_t hfnum_7_frrem_accum_a; - uint32_t hfnum_0_samples_a; - uint64_t hfnum_0_frrem_accum_a; - uint32_t hfnum_other_samples_a; - uint64_t hfnum_other_frrem_accum_a; - - uint32_t hfnum_7_samples_b; - uint64_t hfnum_7_frrem_accum_b; - uint32_t hfnum_0_samples_b; - uint64_t hfnum_0_frrem_accum_b; - uint32_t hfnum_other_samples_b; - uint64_t hfnum_other_frrem_accum_b; -#endif -}; - -/** @name Transaction Execution Functions */ -/** @{ */ -extern _LONG_CALL_ dwc_otg_transaction_type_e dwc_otg_hcd_select_transactions(dwc_otg_hcd_t - * hcd); -extern _LONG_CALL_ void dwc_otg_hcd_queue_transactions(dwc_otg_hcd_t * hcd, - dwc_otg_transaction_type_e tr_type); - -/** @} */ - -/** @name Interrupt Handler Functions */ -/** @{ */ -extern _LONG_CALL_ int32_t dwc_otg_hcd_handle_intr(dwc_otg_hcd_t * dwc_otg_hcd); -extern _LONG_CALL_ int32_t dwc_otg_hcd_handle_sof_intr(dwc_otg_hcd_t * dwc_otg_hcd); -extern _LONG_CALL_ int32_t dwc_otg_hcd_handle_rx_status_q_level_intr(dwc_otg_hcd_t * - dwc_otg_hcd); -extern _LONG_CALL_ int32_t dwc_otg_hcd_handle_np_tx_fifo_empty_intr(dwc_otg_hcd_t * - dwc_otg_hcd); -extern _LONG_CALL_ int32_t dwc_otg_hcd_handle_perio_tx_fifo_empty_intr(dwc_otg_hcd_t * - dwc_otg_hcd); -extern _LONG_CALL_ int32_t dwc_otg_hcd_handle_incomplete_periodic_intr(dwc_otg_hcd_t * - dwc_otg_hcd); -extern _LONG_CALL_ int32_t dwc_otg_hcd_handle_port_intr(dwc_otg_hcd_t * dwc_otg_hcd); -extern _LONG_CALL_ int32_t dwc_otg_hcd_handle_conn_id_status_change_intr(dwc_otg_hcd_t * - dwc_otg_hcd); -extern _LONG_CALL_ int32_t dwc_otg_hcd_handle_disconnect_intr(dwc_otg_hcd_t * dwc_otg_hcd); -extern _LONG_CALL_ int32_t dwc_otg_hcd_handle_hc_intr(dwc_otg_hcd_t * dwc_otg_hcd); -extern _LONG_CALL_ int32_t dwc_otg_hcd_handle_hc_n_intr(dwc_otg_hcd_t * dwc_otg_hcd, - uint32_t num); -extern _LONG_CALL_ int32_t dwc_otg_hcd_handle_session_req_intr(dwc_otg_hcd_t * dwc_otg_hcd); -extern _LONG_CALL_ int32_t dwc_otg_hcd_handle_wakeup_detected_intr(dwc_otg_hcd_t * - dwc_otg_hcd); -/** @} */ - -/** @name Schedule Queue Functions */ -/** @{ */ - -/* Implemented in dwc_otg_hcd_queue.c */ -extern _LONG_CALL_ dwc_otg_qh_t *dwc_otg_hcd_qh_create(dwc_otg_hcd_t * hcd, - dwc_otg_hcd_urb_t * urb, int atomic_alloc); -extern _LONG_CALL_ void dwc_otg_hcd_qh_free(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh); -extern _LONG_CALL_ int dwc_otg_hcd_qh_add(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh); -extern _LONG_CALL_ void dwc_otg_hcd_qh_remove(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh); -extern _LONG_CALL_ void dwc_otg_hcd_qh_deactivate(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh, - int sched_csplit); - -/** Remove and free a QH */ -extern _LONG_CALL_ -void dwc_otg_hcd_qh_remove_and_free(dwc_otg_hcd_t * hcd, - dwc_otg_qh_t * qh); - -/** Allocates memory for a QH structure. - * @return Returns the memory allocate or NULL on error. */ -extern _LONG_CALL_ -dwc_otg_qh_t *dwc_otg_hcd_qh_alloc(int atomic_alloc); - -extern _LONG_CALL_ dwc_otg_qtd_t *dwc_otg_hcd_qtd_create(dwc_otg_hcd_urb_t * urb, - int atomic_alloc); -extern _LONG_CALL_ void dwc_otg_hcd_qtd_init(dwc_otg_qtd_t * qtd, dwc_otg_hcd_urb_t * urb); -extern _LONG_CALL_ int dwc_otg_hcd_qtd_add(dwc_otg_qtd_t * qtd, dwc_otg_hcd_t * dwc_otg_hcd, - dwc_otg_qh_t ** qh, int atomic_alloc); - -/** Allocates memory for a QTD structure. - * @return Returns the memory allocate or NULL on error. */ -extern _LONG_CALL_ -dwc_otg_qtd_t *dwc_otg_hcd_qtd_alloc(int atomic_alloc); - -/** Frees the memory for a QTD structure. QTD should already be removed from - * list. - * @param qtd QTD to free.*/ -extern _LONG_CALL_ -void dwc_otg_hcd_qtd_free(dwc_otg_qtd_t * qtd); - -/** Removes a QTD from list. - * @param hcd HCD instance. - * @param qtd QTD to remove from list. - * @param qh QTD belongs to. - */ -extern _LONG_CALL_ -void dwc_otg_hcd_qtd_remove(dwc_otg_hcd_t * hcd, - dwc_otg_qtd_t * qtd, - dwc_otg_qh_t * qh); - -/** Remove and free a QTD - * Need to disable IRQ and hold hcd lock while calling this function out of - * interrupt servicing chain */ -extern _LONG_CALL_ -void dwc_otg_hcd_qtd_remove_and_free(dwc_otg_hcd_t * hcd, - dwc_otg_qtd_t * qtd, - dwc_otg_qh_t * qh); - -/** @} */ - -/** @name Descriptor DMA Supporting Functions */ -/** @{ */ - -extern _LONG_CALL_ void dwc_otg_hcd_start_xfer_ddma(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh); -extern _LONG_CALL_ void dwc_otg_hcd_complete_xfer_ddma(dwc_otg_hcd_t * hcd, - dwc_hc_t * hc, - dwc_otg_hc_regs_t * hc_regs, - dwc_otg_halt_status_e halt_status); - -extern _LONG_CALL_ int dwc_otg_hcd_qh_init_ddma(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh); -extern _LONG_CALL_ void dwc_otg_hcd_qh_free_ddma(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh); -extern _LONG_CALL_ void reset_tasklet_func(void *data); - -/** @} */ - -/** @name Internal Functions */ -/** @{ */ -extern _LONG_CALL_ dwc_otg_qh_t *dwc_urb_to_qh(dwc_otg_hcd_urb_t * urb); -/** @} */ - -#ifdef CONFIG_USB_DWC_OTG_LPM -extern _LONG_CALL_ int dwc_otg_hcd_get_hc_for_lpm_tran(dwc_otg_hcd_t * hcd, - uint8_t devaddr); -extern _LONG_CALL_ void dwc_otg_hcd_free_hc_from_lpm(dwc_otg_hcd_t * hcd); -#endif - -/** Gets the QH that contains the list_head */ -#define dwc_list_to_qh(_list_head_ptr_) container_of(_list_head_ptr_, dwc_otg_qh_t, qh_list_entry) - -/** Gets the QTD that contains the list_head */ -#define dwc_list_to_qtd(_list_head_ptr_) container_of(_list_head_ptr_, dwc_otg_qtd_t, qtd_list_entry) - -/** Check if QH is non-periodic */ -#define dwc_qh_is_non_per(_qh_ptr_) ((_qh_ptr_->ep_type == UE_BULK) || \ - (_qh_ptr_->ep_type == UE_CONTROL)) - -/** High bandwidth multiplier as encoded in highspeed endpoint descriptors */ -#define dwc_hb_mult(wMaxPacketSize) (1 + (((wMaxPacketSize) >> 11) & 0x03)) - -/** Packet size for any kind of endpoint descriptor */ -#define dwc_max_packet(wMaxPacketSize) ((wMaxPacketSize) & 0x07ff) - -/** - * Returns true if _frame1 is less than or equal to _frame2. The comparison is - * done modulo DWC_HFNUM_MAX_FRNUM. This accounts for the rollover of the - * frame number when the max frame number is reached. - */ -extern _LONG_CALL_ -int dwc_frame_num_le(uint16_t frame1, uint16_t frame2); - -/** - * Returns true if _frame1 is greater than _frame2. The comparison is done - * modulo DWC_HFNUM_MAX_FRNUM. This accounts for the rollover of the frame - * number when the max frame number is reached. - */ -extern _LONG_CALL_ -int dwc_frame_num_gt(uint16_t frame1, uint16_t frame2); - -/** - * Increments _frame by the amount specified by _inc. The addition is done - * modulo DWC_HFNUM_MAX_FRNUM. Returns the incremented value. - */ -extern _LONG_CALL_ -uint16_t dwc_frame_num_inc(uint16_t frame, uint16_t inc); - -extern _LONG_CALL_ -uint16_t dwc_full_frame_num(uint16_t frame); - -extern _LONG_CALL_ -uint16_t dwc_micro_frame_num(uint16_t frame); - -extern _LONG_CALL_ void dwc_otg_hcd_save_data_toggle(dwc_hc_t * hc, - dwc_otg_hc_regs_t * hc_regs, - dwc_otg_qtd_t * qtd); - -extern _LONG_CALL_ void dwc_hcd_data_init(void); -#ifdef OTGDEBUG -/** - * Macro to sample the remaining PHY clocks left in the current frame. This - * may be used during debugging to determine the average time it takes to - * execute sections of code. There are two possible sample points, "a" and - * "b", so the _letter argument must be one of these values. - * - * To dump the average sample times, read the "hcd_frrem" sysfs attribute. For - * example, "cat /sys/devices/lm0/hcd_frrem". - */ -#define dwc_sample_frrem(_hcd, _qh, _letter) \ -{ \ - hfnum_data_t hfnum; \ - dwc_otg_qtd_t *qtd; \ - qtd = list_entry(_qh->qtd_list.next, dwc_otg_qtd_t, qtd_list_entry); \ - if (usb_pipeint(qtd->urb->pipe) && _qh->start_split_frame != 0 && !qtd->complete_split) { \ - hfnum.d32 = DWC_READ_REG32(&_hcd->core_if->host_if->host_global_regs->hfnum); \ - switch (hfnum.b.frnum & 0x7) { \ - case 7: \ - _hcd->hfnum_7_samples_##_letter++; \ - _hcd->hfnum_7_frrem_accum_##_letter += hfnum.b.frrem; \ - break; \ - case 0: \ - _hcd->hfnum_0_samples_##_letter++; \ - _hcd->hfnum_0_frrem_accum_##_letter += hfnum.b.frrem; \ - break; \ - default: \ - _hcd->hfnum_other_samples_##_letter++; \ - _hcd->hfnum_other_frrem_accum_##_letter += hfnum.b.frrem; \ - break; \ - } \ - } \ -} -#else -#define dwc_sample_frrem(_hcd, _qh, _letter) -#endif -#endif -#endif /* DWC_DEVICE_ONLY */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_hcd_if.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_hcd_if.h deleted file mode 100644 index 60502df..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_hcd_if.h +++ /dev/null @@ -1,412 +0,0 @@ -/* ========================================================================== - * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_hcd_if.h $ - * $Revision: #12 $ - * $Date: 2011/10/26 $ - * $Change: 1873028 $ - * - * Synopsys HS OTG Linux Software Driver and documentation (hereinafter, - * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless - * otherwise expressly agreed to in writing between Synopsys and you. - * - * The Software IS NOT an item of Licensed Software or Licensed Product under - * any End User Software License Agreement or Agreement for Licensed Product - * with Synopsys or any supplement thereto. You are permitted to use and - * redistribute this Software in source and binary forms, with or without - * modification, provided that redistributions of source code must retain this - * notice. You may not view, use, disclose, copy or distribute this file or - * any information contained herein except pursuant to this license grant from - * Synopsys. If you do not agree with this notice, including the disclaimer - * below, then you are not authorized to use the Software. - * - * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * ========================================================================== */ -#if 1//ndef DWC_DEVICE_ONLY -#ifndef __DWC_HCD_IF_H__ -#define __DWC_HCD_IF_H__ - -#include "dwc_otg_core_if.h" - -/** @file - * This file defines DWC_OTG HCD Core API. - */ - -struct dwc_otg_hcd; -typedef struct dwc_otg_hcd dwc_otg_hcd_t; - -struct dwc_otg_hcd_urb; -typedef struct dwc_otg_hcd_urb dwc_otg_hcd_urb_t; - -/** @name HCD Function Driver Callbacks */ -/** @{ */ - -/** This function is called whenever core switches to host mode. */ -typedef int (*dwc_otg_hcd_start_cb_t) (dwc_otg_hcd_t * hcd); - -/** This function is called when device has been disconnected */ -typedef int (*dwc_otg_hcd_disconnect_cb_t) (dwc_otg_hcd_t * hcd); - -/** Wrapper provides this function to HCD to core, so it can get hub information to which device is connected */ -typedef int (*dwc_otg_hcd_hub_info_from_urb_cb_t) (dwc_otg_hcd_t * hcd, - void *urb_handle, - uint32_t * hub_addr, - uint32_t * port_addr); -/** Via this function HCD core gets device speed */ -typedef int (*dwc_otg_hcd_speed_from_urb_cb_t) (dwc_otg_hcd_t * hcd, - void *urb_handle); - -/** This function is called when urb is completed */ -typedef int (*dwc_otg_hcd_complete_urb_cb_t) (dwc_otg_hcd_t * hcd, - void *urb_handle, - dwc_otg_hcd_urb_t * dwc_otg_urb, - int32_t status); - -/** Via this function HCD core gets b_hnp_enable parameter */ -typedef int (*dwc_otg_hcd_get_b_hnp_enable) (dwc_otg_hcd_t * hcd); - -struct dwc_otg_hcd_function_ops { - dwc_otg_hcd_start_cb_t start; - dwc_otg_hcd_disconnect_cb_t disconnect; - dwc_otg_hcd_hub_info_from_urb_cb_t hub_info; - dwc_otg_hcd_speed_from_urb_cb_t speed; - dwc_otg_hcd_complete_urb_cb_t complete; - dwc_otg_hcd_get_b_hnp_enable get_b_hnp_enable; -}; -/** @} */ - -/** @name HCD Core API */ -/** @{ */ -/** This function allocates dwc_otg_hcd structure and returns pointer on it. */ -extern _LONG_CALL_ dwc_otg_hcd_t *dwc_otg_hcd_alloc_hcd(void); - -/** This function should be called to initiate HCD Core. - * - * @param hcd The HCD - * @param core_if The DWC_OTG Core - * - * Returns -DWC_E_NO_MEMORY if no enough memory. - * Returns 0 on success - */ -extern _LONG_CALL_ int dwc_otg_hcd_init(dwc_otg_hcd_t * hcd, dwc_otg_core_if_t * core_if); - -/** Frees HCD - * - * @param hcd The HCD - */ -extern _LONG_CALL_ void dwc_otg_hcd_remove(dwc_otg_hcd_t * hcd); - -/** This function should be called on every hardware interrupt. - * - * @param dwc_otg_hcd The HCD - * - * Returns non zero if interrupt is handled - * Return 0 if interrupt is not handled - */ -extern _LONG_CALL_ int32_t dwc_otg_hcd_handle_intr(dwc_otg_hcd_t * dwc_otg_hcd); - -/** - * Returns private data set by - * dwc_otg_hcd_set_priv_data function. - * - * @param hcd The HCD - */ -extern _LONG_CALL_ void *dwc_otg_hcd_get_priv_data(dwc_otg_hcd_t * hcd); - -/** - * Set private data. - * - * @param hcd The HCD - * @param priv_data pointer to be stored in private data - */ -extern _LONG_CALL_ void dwc_otg_hcd_set_priv_data(dwc_otg_hcd_t * hcd, void *priv_data); - -/** - * This function initializes the HCD Core. - * - * @param hcd The HCD - * @param fops The Function Driver Operations data structure containing pointers to all callbacks. - * - * Returns -DWC_E_NO_DEVICE if Core is currently is in device mode. - * Returns 0 on success - */ -extern _LONG_CALL_ int dwc_otg_hcd_start(dwc_otg_hcd_t * hcd, - struct dwc_otg_hcd_function_ops *fops); - -/** - * Halts the DWC_otg host mode operations in a clean manner. USB transfers are - * stopped. - * - * @param hcd The HCD - */ -extern _LONG_CALL_ void dwc_otg_hcd_stop(dwc_otg_hcd_t * hcd); - -/** - * Handles hub class-specific requests. - * - * @param dwc_otg_hcd The HCD - * @param typeReq Request Type - * @param wValue wValue from control request - * @param wIndex wIndex from control request - * @param buf data buffer - * @param wLength data buffer length - * - * Returns -DWC_E_INVALID if invalid argument is passed - * Returns 0 on success - */ -extern _LONG_CALL_ int dwc_otg_hcd_hub_control(dwc_otg_hcd_t * dwc_otg_hcd, - uint16_t typeReq, uint16_t wValue, - uint16_t wIndex, uint8_t * buf, - uint16_t wLength); - -/** - * Returns otg port number. - * - * @param hcd The HCD - */ -extern _LONG_CALL_ uint32_t dwc_otg_hcd_otg_port(dwc_otg_hcd_t * hcd); - -/** - * Returns OTG version - either 1.3 or 2.0. - * - * @param core_if The core_if structure pointer - */ -extern _LONG_CALL_ uint16_t dwc_otg_get_otg_version(dwc_otg_core_if_t * core_if); - -/** - * Returns 1 if currently core is acting as B host, and 0 otherwise. - * - * @param hcd The HCD - */ -extern _LONG_CALL_ uint32_t dwc_otg_hcd_is_b_host(dwc_otg_hcd_t * hcd); - -/** - * Returns current frame number. - * - * @param hcd The HCD - */ -extern _LONG_CALL_ int dwc_otg_hcd_get_frame_number(dwc_otg_hcd_t * hcd); - -/** - * Dumps hcd state. - * - * @param hcd The HCD - */ -extern _LONG_CALL_ void dwc_otg_hcd_dump_state(dwc_otg_hcd_t * hcd); - -/** - * Dump the average frame remaining at SOF. This can be used to - * determine average interrupt latency. Frame remaining is also shown for - * start transfer and two additional sample points. - * Currently this function is not implemented. - * - * @param hcd The HCD - */ -extern _LONG_CALL_ void dwc_otg_hcd_dump_frrem(dwc_otg_hcd_t * hcd); - -/** - * Sends LPM transaction to the local device. - * - * @param hcd The HCD - * @param devaddr Device Address - * @param hird Host initiated resume duration - * @param bRemoteWake Value of bRemoteWake field in LPM transaction - * - * Returns negative value if sending LPM transaction was not succeeded. - * Returns 0 on success. - */ -extern _LONG_CALL_ int dwc_otg_hcd_send_lpm(dwc_otg_hcd_t * hcd, uint8_t devaddr, - uint8_t hird, uint8_t bRemoteWake); - -/* URB interface */ - -/** - * Allocates memory for dwc_otg_hcd_urb structure. - * Allocated memory should be freed by call of DWC_FREE. - * - * @param hcd The HCD - * @param iso_desc_count Count of ISOC descriptors - * @param atomic_alloc Specefies whether to perform atomic allocation. - */ -extern _LONG_CALL_ dwc_otg_hcd_urb_t *dwc_otg_hcd_urb_alloc(dwc_otg_hcd_t * hcd, - int iso_desc_count, - int atomic_alloc); - -/** - * Set pipe information in URB. - * - * @param hcd_urb DWC_OTG URB - * @param devaddr Device Address - * @param ep_num Endpoint Number - * @param ep_type Endpoint Type - * @param ep_dir Endpoint Direction - * @param mps Max Packet Size - */ -extern _LONG_CALL_ void dwc_otg_hcd_urb_set_pipeinfo(dwc_otg_hcd_urb_t * hcd_urb, - uint8_t devaddr, uint8_t ep_num, - uint8_t ep_type, uint8_t ep_dir, - uint16_t mps); - -/* Transfer flags */ -#define URB_GIVEBACK_ASAP 0x1 -#define URB_SEND_ZERO_PACKET 0x2 - -/** - * Sets dwc_otg_hcd_urb parameters. - * - * @param urb DWC_OTG URB allocated by dwc_otg_hcd_urb_alloc function. - * @param urb_handle Unique handle for request, this will be passed back - * to function driver in completion callback. - * @param buf The buffer for the data - * @param dma The DMA buffer for the data - * @param buflen Transfer length - * @param sp Buffer for setup data - * @param sp_dma DMA address of setup data buffer - * @param flags Transfer flags - * @param interval Polling interval for interrupt or isochronous transfers. - */ -extern _LONG_CALL_ void dwc_otg_hcd_urb_set_params(dwc_otg_hcd_urb_t * urb, - void *urb_handle, void *buf, - dwc_dma_t dma, uint32_t buflen, void *sp, - dwc_dma_t sp_dma, uint32_t flags, - uint16_t interval); - -/** Gets status from dwc_otg_hcd_urb - * - * @param dwc_otg_urb DWC_OTG URB - */ -extern _LONG_CALL_ uint32_t dwc_otg_hcd_urb_get_status(dwc_otg_hcd_urb_t * dwc_otg_urb); - -/** Gets actual length from dwc_otg_hcd_urb - * - * @param dwc_otg_urb DWC_OTG URB - */ -extern _LONG_CALL_ uint32_t dwc_otg_hcd_urb_get_actual_length(dwc_otg_hcd_urb_t * - dwc_otg_urb); - -/** Gets error count from dwc_otg_hcd_urb. Only for ISOC URBs - * - * @param dwc_otg_urb DWC_OTG URB - */ -extern _LONG_CALL_ uint32_t dwc_otg_hcd_urb_get_error_count(dwc_otg_hcd_urb_t * - dwc_otg_urb); - -/** Set ISOC descriptor offset and length - * - * @param dwc_otg_urb DWC_OTG URB - * @param desc_num ISOC descriptor number - * @param offset Offset from beginig of buffer. - * @param length Transaction length - */ -extern _LONG_CALL_ void dwc_otg_hcd_urb_set_iso_desc_params(dwc_otg_hcd_urb_t * dwc_otg_urb, - int desc_num, uint32_t offset, - uint32_t length); - -/** Get status of ISOC descriptor, specified by desc_num - * - * @param dwc_otg_urb DWC_OTG URB - * @param desc_num ISOC descriptor number - */ -extern _LONG_CALL_ uint32_t dwc_otg_hcd_urb_get_iso_desc_status(dwc_otg_hcd_urb_t * - dwc_otg_urb, int desc_num); - -/** Get actual length of ISOC descriptor, specified by desc_num - * - * @param dwc_otg_urb DWC_OTG URB - * @param desc_num ISOC descriptor number - */ -extern _LONG_CALL_ uint32_t dwc_otg_hcd_urb_get_iso_desc_actual_length(dwc_otg_hcd_urb_t * - dwc_otg_urb, - int desc_num); - -/** Queue URB. After transfer is completes, the complete callback will be called with the URB status - * - * @param dwc_otg_hcd The HCD - * @param dwc_otg_urb DWC_OTG URB - * @param ep_handle Out parameter for returning endpoint handle - * @param atomic_alloc Flag to do atomic allocation if needed - * - * Returns -DWC_E_NO_DEVICE if no device is connected. - * Returns -DWC_E_NO_MEMORY if there is no enough memory. - * Returns 0 on success. - */ -extern _LONG_CALL_ int dwc_otg_hcd_urb_enqueue(dwc_otg_hcd_t * dwc_otg_hcd, - dwc_otg_hcd_urb_t * dwc_otg_urb, - void **ep_handle, int atomic_alloc); - -/** De-queue the specified URB - * - * @param dwc_otg_hcd The HCD - * @param dwc_otg_urb DWC_OTG URB - */ -extern _LONG_CALL_ int dwc_otg_hcd_urb_dequeue(dwc_otg_hcd_t * dwc_otg_hcd, - dwc_otg_hcd_urb_t * dwc_otg_urb); - -/** Frees resources in the DWC_otg controller related to a given endpoint. - * Any URBs for the endpoint must already be dequeued. - * - * @param hcd The HCD - * @param ep_handle Endpoint handle, returned by dwc_otg_hcd_urb_enqueue function - * @param retry Number of retries if there are queued transfers. - * - * Returns -DWC_E_INVALID if invalid arguments are passed. - * Returns 0 on success - */ -extern _LONG_CALL_ int dwc_otg_hcd_endpoint_disable(dwc_otg_hcd_t * hcd, void *ep_handle, - int retry); - -/* Resets the data toggle in qh structure. This function can be called from - * usb_clear_halt routine. - * - * @param hcd The HCD - * @param ep_handle Endpoint handle, returned by dwc_otg_hcd_urb_enqueue function - * - * Returns -DWC_E_INVALID if invalid arguments are passed. - * Returns 0 on success - */ -extern _LONG_CALL_ int dwc_otg_hcd_endpoint_reset(dwc_otg_hcd_t * hcd, void *ep_handle); - -/** Returns 1 if status of specified port is changed and 0 otherwise. - * - * @param hcd The HCD - * @param port Port number - */ -extern _LONG_CALL_ int dwc_otg_hcd_is_status_changed(dwc_otg_hcd_t * hcd, int port); - -/** Call this function to check if bandwidth was allocated for specified endpoint. - * Only for ISOC and INTERRUPT endpoints. - * - * @param hcd The HCD - * @param ep_handle Endpoint handle - */ -extern _LONG_CALL_ int dwc_otg_hcd_is_bandwidth_allocated(dwc_otg_hcd_t * hcd, - void *ep_handle); - -/** Call this function to check if bandwidth was freed for specified endpoint. - * - * @param hcd The HCD - * @param ep_handle Endpoint handle - */ -extern _LONG_CALL_ int dwc_otg_hcd_is_bandwidth_freed(dwc_otg_hcd_t * hcd, void *ep_handle); - -/** Returns bandwidth allocated for specified endpoint in microseconds. - * Only for ISOC and INTERRUPT endpoints. - * - * @param hcd The HCD - * @param ep_handle Endpoint handle - */ -extern _LONG_CALL_ uint8_t dwc_otg_hcd_get_ep_bandwidth(dwc_otg_hcd_t * hcd, - void *ep_handle); - -/** @} */ - -#endif /* __DWC_HCD_IF_H__ */ -#endif /* DWC_DEVICE_ONLY */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_os_dep.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_os_dep.h deleted file mode 100644 index 4c23670..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_os_dep.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef _DWC_OS_DEP_H_ -#define _DWC_OS_DEP_H_ -#include "errno.h" - -#endif /* _DWC_OS_DEP_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_pcd.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_pcd.h deleted file mode 100644 index 226ed87..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_pcd.h +++ /dev/null @@ -1,271 +0,0 @@ -/* ========================================================================== - * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_pcd.h $ - * $Revision: #49 $ - * $Date: 2013/05/16 $ - * $Change: 2231774 $ - * - * Synopsys HS OTG Linux Software Driver and documentation (hereinafter, - * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless - * otherwise expressly agreed to in writing between Synopsys and you. - * - * The Software IS NOT an item of Licensed Software or Licensed Product under - * any End User Software License Agreement or Agreement for Licensed Product - * with Synopsys or any supplement thereto. You are permitted to use and - * redistribute this Software in source and binary forms, with or without - * modification, provided that redistributions of source code must retain this - * notice. You may not view, use, disclose, copy or distribute this file or - * any information contained herein except pursuant to this license grant from - * Synopsys. If you do not agree with this notice, including the disclaimer - * below, then you are not authorized to use the Software. - * - * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * ========================================================================== */ -#if 1//ndef DWC_HOST_ONLY -#if !defined(__DWC_PCD_H__) -#define __DWC_PCD_H__ - -#include "dwc_otg_os_dep.h" -#include "usb.h" -#include "dwc_otg_cil.h" -#include "dwc_otg_pcd_if.h" -struct cfiobject; - -/** - * @file - * - * This file contains the structures, constants, and interfaces for - * the Perpherial Contoller Driver (PCD). - * - * The Peripheral Controller Driver (PCD) for Linux will implement the - * Gadget API, so that the existing Gadget drivers can be used. For - * the Mass Storage Function driver the File-backed USB Storage Gadget - * (FBS) driver will be used. The FBS driver supports the - * Control-Bulk (CB), Control-Bulk-Interrupt (CBI), and Bulk-Only - * transports. - * - */ - -/** Invalid DMA Address */ -#define DWC_DMA_ADDR_INVALID (~(dwc_dma_t)0) - -/** Max Transfer size for any EP */ -#define DDMA_MAX_TRANSFER_SIZE 65535 - -/** - * Get the pointer to the core_if from the pcd pointer. - */ -#define GET_CORE_IF( _pcd ) (_pcd->core_if) - -/** - * States of EP0. - */ -typedef enum ep0_state { - EP0_DISCONNECT, /* no host */ - EP0_IDLE, - EP0_IN_DATA_PHASE, - EP0_OUT_DATA_PHASE, - EP0_IN_STATUS_PHASE, - EP0_OUT_STATUS_PHASE, - EP0_STALL, -} ep0state_e; - -/** Fordward declaration.*/ -struct dwc_otg_pcd; - -/** DWC_otg iso request structure. - * - */ -typedef struct usb_iso_request dwc_otg_pcd_iso_request_t; - -#ifdef DWC_UTE_PER_IO -XXX -/** - * This shall be the exact analogy of the same type structure defined in the - * usb_gadget.h. Each descriptor contains - */ -struct dwc_iso_pkt_desc_port { - uint32_t offset; - uint32_t length; /* expected length */ - uint32_t actual_length; - uint32_t status; -}; - -struct dwc_iso_xreq_port { - /** transfer/submission flag */ - uint32_t tr_sub_flags; - /** Start the request ASAP */ -#define DWC_EREQ_TF_ASAP 0x00000002 - /** Just enqueue the request w/o initiating a transfer */ -#define DWC_EREQ_TF_ENQUEUE 0x00000004 - - /** - * count of ISO packets attached to this request - shall - * not exceed the pio_alloc_pkt_count - */ - uint32_t pio_pkt_count; - /** count of ISO packets allocated for this request */ - uint32_t pio_alloc_pkt_count; - /** number of ISO packet errors */ - uint32_t error_count; - /** reserved for future extension */ - uint32_t res; - /** Will be allocated and freed in the UTE gadget and based on the CFC value */ - struct dwc_iso_pkt_desc_port *per_io_frame_descs; -}; -#endif -/** DWC_otg request structure. - * This structure is a list of requests. - */ -typedef struct dwc_otg_pcd_request { - void *priv; - void *buf; - dwc_dma_t dma; - uint32_t length; - uint32_t actual; - unsigned sent_zlp:1; - /** - * Used instead of original buffer if - * it(physical address) is not dword-aligned. - **/ - uint8_t *dw_align_buf; - dwc_dma_t dw_align_buf_dma; - - DWC_CIRCLEQ_ENTRY(dwc_otg_pcd_request) queue_entry; -#ifdef DWC_UTE_PER_IO - struct dwc_iso_xreq_port ext_req; - //void *priv_ereq_nport; /* */ -#endif -} dwc_otg_pcd_request_t; - -DWC_CIRCLEQ_HEAD(req_list, dwc_otg_pcd_request); - -/** PCD EP structure. - * This structure describes an EP, there is an array of EPs in the PCD - * structure. - */ -typedef struct dwc_otg_pcd_ep { - /** USB EP Descriptor */ - const usb_endpoint_descriptor_t *desc; - - /** queue of dwc_otg_pcd_requests. */ - struct req_list queue; - unsigned stopped:1; - unsigned disabling:1; - unsigned dma:1; - unsigned queue_sof:1; - -#ifdef DWC_EN_ISOC - /** ISOC req handle passed */ - void *iso_req_handle; -#endif //_EN_ISOC_ - - /** DWC_otg ep data. */ - dwc_ep_t dwc_ep; - - /** Pointer to PCD */ - struct dwc_otg_pcd *pcd; - - void *priv; -} dwc_otg_pcd_ep_t; - -/** DWC_otg PCD Structure. - * This structure encapsulates the data for the dwc_otg PCD. - */ -struct dwc_otg_pcd { - const struct dwc_otg_pcd_function_ops *fops; - /** The DWC otg device pointer */ - struct dwc_otg_device *otg_dev; - /** Core Interface */ - dwc_otg_core_if_t *core_if; - /** State of EP0 */ - ep0state_e ep0state; - /** EP0 Request is pending */ - unsigned ep0_pending:1; - /** Indicates when SET CONFIGURATION Request is in process */ - unsigned request_config:1; - /** The state of the Remote Wakeup Enable. */ - unsigned remote_wakeup_enable:1; - /** The state of the B-Device HNP Enable. */ - unsigned b_hnp_enable:1; - /** The state of A-Device HNP Support. */ - unsigned a_hnp_support:1; - /** The state of the A-Device Alt HNP support. */ - unsigned a_alt_hnp_support:1; - /** Count of pending Requests */ - unsigned request_pending; - - /** SETUP packet for EP0 - * This structure is allocated as a DMA buffer on PCD initialization - * with enough space for up to 3 setup packets. - */ - union { - usb_device_request_t req; - uint32_t d32[2]; - } *setup_pkt; - - dwc_dma_t setup_pkt_dma_handle; - - /* Additional buffer and flag for CTRL_WR premature case */ - uint8_t *backup_buf; - unsigned data_terminated; - - /** 2-byte dma buffer used to return status from GET_STATUS */ - uint16_t *status_buf; - dwc_dma_t status_buf_dma_handle; - - /** EP0 */ - dwc_otg_pcd_ep_t ep0; - - /** Array of IN EPs. */ - dwc_otg_pcd_ep_t in_ep[MAX_EPS_CHANNELS - 1]; - /** Array of OUT EPs. */ - dwc_otg_pcd_ep_t out_ep[MAX_EPS_CHANNELS - 1]; - /** number of valid EPs in the above array. */ -// unsigned num_eps : 4; - dwc_spinlock_t *lock; - - /** Tasklet to defer starting of TEST mode transmissions until - * Status Phase has been completed. - */ - dwc_tasklet_t *test_mode_tasklet; - - /** Tasklet to delay starting of xfer in DMA mode */ - dwc_tasklet_t *start_xfer_tasklet; - - /** The test mode to enter when the tasklet is executed. */ - unsigned test_mode; - /** The cfi_api structure that implements most of the CFI API - * and OTG specific core configuration functionality - */ -#ifdef DWC_UTE_CFI - struct cfiobject *cfi; -#endif - -}; - -//FIXME this functions should be static, and this prototypes should be removed -extern _LONG_CALL_ void dwc_otg_request_nuke(dwc_otg_pcd_ep_t * ep); -extern _LONG_CALL_ void dwc_otg_request_done(dwc_otg_pcd_ep_t * ep, - dwc_otg_pcd_request_t * req, int32_t status); - -_LONG_CALL_ void dwc_otg_iso_buffer_done(dwc_otg_pcd_t * pcd, dwc_otg_pcd_ep_t * ep, - void *req_handle); -extern _LONG_CALL_ void dwc_otg_pcd_start_iso_ddma(dwc_otg_core_if_t * core_if, - dwc_otg_pcd_ep_t * ep); - -extern _LONG_CALL_ void do_test_mode(void *data); - -extern _LONG_CALL_ void dwc_pcd_data_init(VOID); - -#endif -#endif /* DWC_HOST_ONLY */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_pcd_if.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_pcd_if.h deleted file mode 100644 index 25f34f6..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_pcd_if.h +++ /dev/null @@ -1,367 +0,0 @@ -/* ========================================================================== - * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_pcd_if.h $ - * $Revision: #13 $ - * $Date: 2012/12/12 $ - * $Change: 2125019 $ - * - * Synopsys HS OTG Linux Software Driver and documentation (hereinafter, - * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless - * otherwise expressly agreed to in writing between Synopsys and you. - * - * The Software IS NOT an item of Licensed Software or Licensed Product under - * any End User Software License Agreement or Agreement for Licensed Product - * with Synopsys or any supplement thereto. You are permitted to use and - * redistribute this Software in source and binary forms, with or without - * modification, provided that redistributions of source code must retain this - * notice. You may not view, use, disclose, copy or distribute this file or - * any information contained herein except pursuant to this license grant from - * Synopsys. If you do not agree with this notice, including the disclaimer - * below, then you are not authorized to use the Software. - * - * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * ========================================================================== */ -#if 1//ndef DWC_HOST_ONLY - -#if !defined(__DWC_PCD_IF_H__) -#define __DWC_PCD_IF_H__ - -//#include "dwc_os.h" -#include "dwc_otg_core_if.h" - -/** @file - * This file defines DWC_OTG PCD Core API. - */ - -struct dwc_otg_pcd; -typedef struct dwc_otg_pcd dwc_otg_pcd_t; - -/** Maxpacket size for EP0 */ -#define MAX_EP0_SIZE 64 -/** Maxpacket size for any EP */ -#define MAX_PACKET_SIZE 2048 - -/** @name Function Driver Callbacks */ -/** @{ */ - -/** This function will be called whenever a previously queued request has - * completed. The status value will be set to -DWC_E_SHUTDOWN to indicated a - * failed or aborted transfer, or -DWC_E_RESTART to indicate the device was reset, - * or -DWC_E_TIMEOUT to indicate it timed out, or -DWC_E_INVALID to indicate invalid - * parameters. */ -typedef int (*dwc_completion_cb_t) (dwc_otg_pcd_t * pcd, void *ep_handle, - void *req_handle, int32_t status, - uint32_t actual); -/** - * This function will be called whenever a previousle queued ISOC request has - * completed. Count of ISOC packets could be read using dwc_otg_pcd_get_iso_packet_count - * function. - * The status of each ISOC packet could be read using dwc_otg_pcd_get_iso_packet_* - * functions. - */ -typedef int (*dwc_isoc_completion_cb_t) (dwc_otg_pcd_t * pcd, void *ep_handle, - void *req_handle, int proc_buf_num); -/** This function should handle any SETUP request that cannot be handled by the - * PCD Core. This includes most GET_DESCRIPTORs, SET_CONFIGS, Any - * class-specific requests, etc. The function must non-blocking. - * - * Returns 0 on success. - * Returns -DWC_E_NOT_SUPPORTED if the request is not supported. - * Returns -DWC_E_INVALID if the setup request had invalid parameters or bytes. - * Returns -DWC_E_SHUTDOWN on any other error. */ -typedef int (*dwc_setup_cb_t) (dwc_otg_pcd_t * pcd, uint8_t * bytes); -/** This is called whenever the device has been disconnected. The function - * driver should take appropriate action to clean up all pending requests in the - * PCD Core, remove all endpoints (except ep0), and initialize back to reset - * state. */ -typedef int (*dwc_disconnect_cb_t) (dwc_otg_pcd_t * pcd); -/** This function is called when device has been connected. */ -typedef int (*dwc_connect_cb_t) (dwc_otg_pcd_t * pcd, int speed); -/** This function is called when device has been suspended */ -typedef int (*dwc_suspend_cb_t) (dwc_otg_pcd_t * pcd); -/** This function is called when device has received LPM tokens, i.e. - * device has been sent to sleep state. */ -typedef int (*dwc_sleep_cb_t) (dwc_otg_pcd_t * pcd); -/** This function is called when device has been resumed - * from suspend(L2) or L1 sleep state. */ -typedef int (*dwc_resume_cb_t) (dwc_otg_pcd_t * pcd); -/** This function is called whenever hnp params has been changed. - * User can call get_b_hnp_enable, get_a_hnp_support, get_a_alt_hnp_support functions - * to get hnp parameters. */ -typedef int (*dwc_hnp_params_changed_cb_t) (dwc_otg_pcd_t * pcd); -/** This function is called whenever USB RESET is detected. */ -typedef int (*dwc_reset_cb_t) (dwc_otg_pcd_t * pcd); - -typedef int (*cfi_setup_cb_t) (dwc_otg_pcd_t * pcd, void *ctrl_req_bytes); - -/** - * - * @param ep_handle Void pointer to the usb_ep structure - * @param ereq_port Pointer to the extended request structure created in the - * portable part. - */ -typedef int (*xiso_completion_cb_t) (dwc_otg_pcd_t * pcd, void *ep_handle, - void *req_handle, int32_t status, - void *ereq_port); -/** Function Driver Ops Data Structure */ -struct dwc_otg_pcd_function_ops { - dwc_connect_cb_t connect; - dwc_disconnect_cb_t disconnect; - dwc_setup_cb_t setup; - dwc_completion_cb_t complete; - dwc_isoc_completion_cb_t isoc_complete; - dwc_suspend_cb_t suspend; - dwc_sleep_cb_t sleep; - dwc_resume_cb_t resume; - dwc_reset_cb_t reset; - dwc_hnp_params_changed_cb_t hnp_changed; - cfi_setup_cb_t cfi_setup; -#ifdef DWC_UTE_PER_IO - xiso_completion_cb_t xisoc_complete; -#endif -}; -/** @} */ - -/** @name Function Driver Functions */ -/** @{ */ - -/** Call this function to get pointer on dwc_otg_pcd_t, - * this pointer will be used for all PCD API functions. - * - * @param core_if The DWC_OTG Core - */ -extern _LONG_CALL_ dwc_otg_pcd_t *dwc_otg_pcd_init(dwc_otg_core_if_t * core_if); - -/** Frees PCD allocated by dwc_otg_pcd_init - * - * @param pcd The PCD - */ -extern _LONG_CALL_ void dwc_otg_pcd_remove(dwc_otg_pcd_t * pcd); - -/** Call this to bind the function driver to the PCD Core. - * - * @param pcd Pointer on dwc_otg_pcd_t returned by dwc_otg_pcd_init function. - * @param fops The Function Driver Ops data structure containing pointers to all callbacks. - */ -extern _LONG_CALL_ void dwc_otg_pcd_start(dwc_otg_pcd_t * pcd, - const struct dwc_otg_pcd_function_ops *fops); - -/** Enables an endpoint for use. This function enables an endpoint in - * the PCD. The endpoint is described by the ep_desc which has the - * same format as a USB ep descriptor. The ep_handle parameter is used to refer - * to the endpoint from other API functions and in callbacks. Normally this - * should be called after a SET_CONFIGURATION/SET_INTERFACE to configure the - * core for that interface. - * - * Returns -DWC_E_INVALID if invalid parameters were passed. - * Returns -DWC_E_SHUTDOWN if any other error ocurred. - * Returns 0 on success. - * - * @param pcd The PCD - * @param ep_desc Endpoint descriptor - * @param ep_handle Handle on endpoint, that will be used to identify endpoint. - */ -extern _LONG_CALL_ int dwc_otg_pcd_ep_enable(dwc_otg_pcd_t * pcd, - const uint8_t * ep_desc, void *ep_handle); - -/** Disable the endpoint referenced by ep_handle. - * - * Returns -DWC_E_INVALID if invalid parameters were passed. - * Returns -DWC_E_SHUTDOWN if any other error occurred. - * Returns 0 on success. */ -extern _LONG_CALL_ int dwc_otg_pcd_ep_disable(dwc_otg_pcd_t * pcd, void *ep_handle); - -/** Queue a data transfer request on the endpoint referenced by ep_handle. - * After the transfer is completes, the complete callback will be called with - * the request status. - * - * @param pcd The PCD - * @param ep_handle The handle of the endpoint - * @param buf The buffer for the data - * @param dma_buf The DMA buffer for the data - * @param buflen The length of the data transfer - * @param zero Specifies whether to send zero length last packet. - * @param req_handle Set this handle to any value to use to reference this - * request in the ep_dequeue function or from the complete callback - * @param atomic_alloc If driver need to perform atomic allocations - * for internal data structures. - * - * Returns -DWC_E_INVALID if invalid parameters were passed. - * Returns -DWC_E_SHUTDOWN if any other error ocurred. - * Returns 0 on success. */ -extern _LONG_CALL_ int dwc_otg_pcd_ep_queue(dwc_otg_pcd_t * pcd, void *ep_handle, - uint8_t * buf, dwc_dma_t dma_buf, - uint32_t buflen, int zero, void *req_handle, - int atomic_alloc); -#ifdef DWC_UTE_PER_IO -XXXX -/** - * - * @param ereq_nonport Pointer to the extended request part of the - * usb_request structure defined in usb_gadget.h file. - */ -extern int dwc_otg_pcd_xiso_ep_queue(dwc_otg_pcd_t * pcd, void *ep_handle, - uint8_t * buf, dwc_dma_t dma_buf, - uint32_t buflen, int zero, - void *req_handle, int atomic_alloc, - void *ereq_nonport); - -#endif - -/** De-queue the specified data transfer that has not yet completed. - * - * Returns -DWC_E_INVALID if invalid parameters were passed. - * Returns -DWC_E_SHUTDOWN if any other error ocurred. - * Returns 0 on success. */ -extern _LONG_CALL_ int dwc_otg_pcd_ep_dequeue(dwc_otg_pcd_t * pcd, void *ep_handle, - void *req_handle); - -/** Halt (STALL) an endpoint or clear it. - * - * Returns -DWC_E_INVALID if invalid parameters were passed. - * Returns -DWC_E_SHUTDOWN if any other error ocurred. - * Returns -DWC_E_AGAIN if the STALL cannot be sent and must be tried again later - * Returns 0 on success. */ -extern _LONG_CALL_ int dwc_otg_pcd_ep_halt(dwc_otg_pcd_t * pcd, void *ep_handle, int value); - -/** This function should be called on every hardware interrupt */ -extern _LONG_CALL_ int32_t dwc_otg_pcd_handle_intr(dwc_otg_pcd_t * pcd); - -/** This function returns current frame number */ -extern _LONG_CALL_ int dwc_otg_pcd_get_frame_number(dwc_otg_pcd_t * pcd); - -/** - * Start isochronous transfers on the endpoint referenced by ep_handle. - * For isochronous transfers duble buffering is used. - * After processing each of buffers comlete callback will be called with - * status for each transaction. - * - * @param pcd The PCD - * @param ep_handle The handle of the endpoint - * @param buf0 The virtual address of first data buffer - * @param buf1 The virtual address of second data buffer - * @param dma0 The DMA address of first data buffer - * @param dma1 The DMA address of second data buffer - * @param sync_frame Data pattern frame number - * @param dp_frame Data size for pattern frame - * @param data_per_frame Data size for regular frame - * @param start_frame Frame number to start transfers, if -1 then start transfers ASAP. - * @param buf_proc_intrvl Interval of ISOC Buffer processing - * @param req_handle Handle of ISOC request - * @param atomic_alloc Specefies whether to perform atomic allocation for - * internal data structures. - * - * Returns -DWC_E_NO_MEMORY if there is no enough memory. - * Returns -DWC_E_INVALID if incorrect arguments are passed to the function. - * Returns -DW_E_SHUTDOWN for any other error. - * Returns 0 on success - */ -extern _LONG_CALL_ int dwc_otg_pcd_iso_ep_start(dwc_otg_pcd_t * pcd, void *ep_handle, - uint8_t * buf0, uint8_t * buf1, - dwc_dma_t dma0, dwc_dma_t dma1, - int sync_frame, int dp_frame, - int data_per_frame, int start_frame, - int buf_proc_intrvl, void *req_handle, - int atomic_alloc); - -/** Stop ISOC transfers on endpoint referenced by ep_handle. - * - * @param pcd The PCD - * @param ep_handle The handle of the endpoint - * @param req_handle Handle of ISOC request - * - * Returns -DWC_E_INVALID if incorrect arguments are passed to the function - * Returns 0 on success - */ -_LONG_CALL_ int dwc_otg_pcd_iso_ep_stop(dwc_otg_pcd_t * pcd, void *ep_handle, - void *req_handle); - -/** Get ISOC packet status. - * - * @param pcd The PCD - * @param ep_handle The handle of the endpoint - * @param iso_req_handle Isochronoush request handle - * @param packet Number of packet - * @param status Out parameter for returning status - * @param actual Out parameter for returning actual length - * @param offset Out parameter for returning offset - * - */ -extern _LONG_CALL_ void dwc_otg_pcd_get_iso_packet_params(dwc_otg_pcd_t * pcd, - void *ep_handle, - void *iso_req_handle, int packet, - int *status, int *actual, - int *offset); - -/** Get ISOC packet count. - * - * @param pcd The PCD - * @param ep_handle The handle of the endpoint - * @param iso_req_handle - */ -extern _LONG_CALL_ int dwc_otg_pcd_get_iso_packet_count(dwc_otg_pcd_t * pcd, - void *ep_handle, - void *iso_req_handle); - -/** This function starts the SRP Protocol if no session is in progress. If - * a session is already in progress, but the device is suspended, - * remote wakeup signaling is started. - */ -extern _LONG_CALL_ int dwc_otg_pcd_wakeup(dwc_otg_pcd_t * pcd); - -/** This function returns 1 if LPM support is enabled, and 0 otherwise. */ -extern _LONG_CALL_ int dwc_otg_pcd_is_lpm_enabled(dwc_otg_pcd_t * pcd); - -/** This function returns 1 if LPM Errata support is enabled, and 0 otherwise. */ -extern _LONG_CALL_ int dwc_otg_pcd_is_besl_enabled(dwc_otg_pcd_t * pcd); - -/** This function returns baseline_besl module parametr. */ -extern _LONG_CALL_ int dwc_otg_pcd_get_param_baseline_besl(dwc_otg_pcd_t * pcd); - -/** This function returns deep_besl module parametr. */ -extern _LONG_CALL_ int dwc_otg_pcd_get_param_deep_besl(dwc_otg_pcd_t * pcd); - -/** This function returns 1 if remote wakeup is allowed and 0, otherwise. */ -extern _LONG_CALL_ int dwc_otg_pcd_get_rmwkup_enable(dwc_otg_pcd_t * pcd); - -/** Initiate SRP */ -extern _LONG_CALL_ void dwc_otg_pcd_initiate_srp(dwc_otg_pcd_t * pcd); - -/** Starts remote wakeup signaling. */ -extern _LONG_CALL_ void dwc_otg_pcd_remote_wakeup(dwc_otg_pcd_t * pcd, int set); - -/** Starts micorsecond soft disconnect. */ -extern _LONG_CALL_ void dwc_otg_pcd_disconnect_us(dwc_otg_pcd_t * pcd, int no_of_usecs); -/** This function returns whether device is dualspeed.*/ -extern _LONG_CALL_ uint32_t dwc_otg_pcd_is_dualspeed(dwc_otg_pcd_t * pcd); - -/** This function returns whether device is otg. */ -extern _LONG_CALL_ uint32_t dwc_otg_pcd_is_otg(dwc_otg_pcd_t * pcd); - -/** These functions allow to get hnp parameters */ -extern _LONG_CALL_ uint32_t get_b_hnp_enable(dwc_otg_pcd_t * pcd); -extern _LONG_CALL_ uint32_t get_a_hnp_support(dwc_otg_pcd_t * pcd); -extern _LONG_CALL_ uint32_t get_a_alt_hnp_support(dwc_otg_pcd_t * pcd); - -/** CFI specific Interface functions */ -/** Allocate a cfi buffer */ -extern _LONG_CALL_ uint8_t *cfiw_ep_alloc_buffer(dwc_otg_pcd_t * pcd, void *pep, - dwc_dma_t * addr, size_t buflen, - int flags); - -/******************************************************************************/ - -/** @} */ - -#endif /* __DWC_PCD_IF_H__ */ - -#endif /* DWC_HOST_ONLY */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_regs.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_regs.h deleted file mode 100644 index 1d01cd7..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/dwc_otg_regs.h +++ /dev/null @@ -1,2560 +0,0 @@ -/* ========================================================================== - * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_regs.h $ - * $Revision: #99 $ - * $Date: 2012/12/10 $ - * $Change: 2123206 $ - * - * Synopsys HS OTG Linux Software Driver and documentation (hereinafter, - * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless - * otherwise expressly agreed to in writing between Synopsys and you. - * - * The Software IS NOT an item of Licensed Software or Licensed Product under - * any End User Software License Agreement or Agreement for Licensed Product - * with Synopsys or any supplement thereto. You are permitted to use and - * redistribute this Software in source and binary forms, with or without - * modification, provided that redistributions of source code must retain this - * notice. You may not view, use, disclose, copy or distribute this file or - * any information contained herein except pursuant to this license grant from - * Synopsys. If you do not agree with this notice, including the disclaimer - * below, then you are not authorized to use the Software. - * - * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * ========================================================================== */ - -#ifndef __DWC_OTG_REGS_H__ -#define __DWC_OTG_REGS_H__ - -#include "dwc_otg_core_if.h" - - - - -/** - * @file - * - * This file contains the data structures for accessing the DWC_otg core registers. - * - * The application interfaces with the HS OTG core by reading from and - * writing to the Control and Status Register (CSR) space through the - * AHB Slave interface. These registers are 32 bits wide, and the - * addresses are 32-bit-block aligned. - * CSRs are classified as follows: - * - Core Global Registers - * - Device Mode Registers - * - Device Global Registers - * - Device Endpoint Specific Registers - * - Host Mode Registers - * - Host Global Registers - * - Host Port CSRs - * - Host Channel Specific Registers - * - * Only the Core Global registers can be accessed in both Device and - * Host modes. When the HS OTG core is operating in one mode, either - * Device or Host, the application must not access registers from the - * other mode. When the core switches from one mode to another, the - * registers in the new mode of operation must be reprogrammed as they - * would be after a power-on reset. - */ - -/****************************************************************************/ -/** DWC_otg Core registers . - * The dwc_otg_core_global_regs structure defines the size - * and relative field offsets for the Core Global registers. - */ -typedef struct dwc_otg_core_global_regs { - /** OTG Control and Status Register. Offset: 000h */ - volatile uint32_t gotgctl; - /** OTG Interrupt Register. Offset: 004h */ - volatile uint32_t gotgint; - /**Core AHB Configuration Register. Offset: 008h */ - volatile uint32_t gahbcfg; - -#define DWC_GLBINTRMASK 0x0001 -#define DWC_DMAENABLE 0x0020 -#define DWC_NPTXEMPTYLVL_EMPTY 0x0080 -#define DWC_NPTXEMPTYLVL_HALFEMPTY 0x0000 -#define DWC_PTXEMPTYLVL_EMPTY 0x0100 -#define DWC_PTXEMPTYLVL_HALFEMPTY 0x0000 - - /**Core USB Configuration Register. Offset: 00Ch */ - volatile uint32_t gusbcfg; - /**Core Reset Register. Offset: 010h */ - volatile uint32_t grstctl; - /**Core Interrupt Register. Offset: 014h */ - volatile uint32_t gintsts; - /**Core Interrupt Mask Register. Offset: 018h */ - volatile uint32_t gintmsk; - /**Receive Status Queue Read Register (Read Only). Offset: 01Ch */ - volatile uint32_t grxstsr; - /**Receive Status Queue Read & POP Register (Read Only). Offset: 020h*/ - volatile uint32_t grxstsp; - /**Receive FIFO Size Register. Offset: 024h */ - volatile uint32_t grxfsiz; - /**Non Periodic Transmit FIFO Size Register. Offset: 028h */ - volatile uint32_t gnptxfsiz; - /**Non Periodic Transmit FIFO/Queue Status Register (Read - * Only). Offset: 02Ch */ - volatile uint32_t gnptxsts; - /**I2C Access Register. Offset: 030h */ - volatile uint32_t gi2cctl; - /**PHY Vendor Control Register. Offset: 034h */ - volatile uint32_t gpvndctl; - /**General Purpose Input/Output Register. Offset: 038h */ - volatile uint32_t ggpio; - /**User ID Register. Offset: 03Ch */ - volatile uint32_t guid; - /**Synopsys ID Register (Read Only). Offset: 040h */ - volatile uint32_t gsnpsid; - /**User HW Config1 Register (Read Only). Offset: 044h */ - volatile uint32_t ghwcfg1; - /**User HW Config2 Register (Read Only). Offset: 048h */ - volatile uint32_t ghwcfg2; -#define DWC_SLAVE_ONLY_ARCH 0 -#define DWC_EXT_DMA_ARCH 1 -#define DWC_INT_DMA_ARCH 2 - -#define DWC_MODE_HNP_SRP_CAPABLE 0 -#define DWC_MODE_SRP_ONLY_CAPABLE 1 -#define DWC_MODE_NO_HNP_SRP_CAPABLE 2 -#define DWC_MODE_SRP_CAPABLE_DEVICE 3 -#define DWC_MODE_NO_SRP_CAPABLE_DEVICE 4 -#define DWC_MODE_SRP_CAPABLE_HOST 5 -#define DWC_MODE_NO_SRP_CAPABLE_HOST 6 - - /**User HW Config3 Register (Read Only). Offset: 04Ch */ - volatile uint32_t ghwcfg3; - /**User HW Config4 Register (Read Only). Offset: 050h*/ - volatile uint32_t ghwcfg4; - /** Core LPM Configuration register Offset: 054h*/ - volatile uint32_t glpmcfg; - /** Global PowerDn Register Offset: 058h */ - volatile uint32_t gpwrdn; - /** Global DFIFO SW Config Register Offset: 05Ch */ - volatile uint32_t gdfifocfg; - /** ADP Control Register Offset: 060h */ - volatile uint32_t adpctl; - /** Reserved Offset: 064h-0FFh */ - volatile uint32_t reserved39[39]; - /** Host Periodic Transmit FIFO Size Register. Offset: 100h */ - volatile uint32_t hptxfsiz; - /** Device Periodic Transmit FIFO#n Register if dedicated fifos are disabled, - otherwise Device Transmit FIFO#n Register. - * Offset: 104h + (FIFO_Number-1)*04h, 1 <= FIFO Number <= 15 (1<=n<=15). */ - volatile uint32_t dtxfsiz[15]; -} dwc_otg_core_global_regs_t; - -/** - * This union represents the bit fields of the Core OTG Control - * and Status Register (GOTGCTL). Set the bits using the bit - * fields then write the d32 value to the register. - */ -typedef union gotgctl_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned sesreqscs:1; - unsigned sesreq:1; - unsigned vbvalidoven:1; - unsigned vbvalidovval:1; - unsigned avalidoven:1; - unsigned avalidovval:1; - unsigned bvalidoven:1; - unsigned bvalidovval:1; - unsigned hstnegscs:1; - unsigned hnpreq:1; - unsigned hstsethnpen:1; - unsigned devhnpen:1; - unsigned reserved12_15:4; - unsigned conidsts:1; - unsigned dbnctime:1; - unsigned asesvld:1; - unsigned bsesvld:1; - unsigned otgver:1; - unsigned reserved1:1; - unsigned multvalidbc:5; - unsigned chirpen:1; - unsigned reserved28_31:4; - } b; -} gotgctl_data_t; - -/** - * This union represents the bit fields of the Core OTG Interrupt Register - * (GOTGINT). Set/clear the bits using the bit fields then write the d32 - * value to the register. - */ -typedef union gotgint_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** Current Mode */ - unsigned reserved0_1:2; - - /** Session End Detected */ - unsigned sesenddet:1; - - unsigned reserved3_7:5; - - /** Session Request Success Status Change */ - unsigned sesreqsucstschng:1; - /** Host Negotiation Success Status Change */ - unsigned hstnegsucstschng:1; - - unsigned reserved10_16:7; - - /** Host Negotiation Detected */ - unsigned hstnegdet:1; - /** A-Device Timeout Change */ - unsigned adevtoutchng:1; - /** Debounce Done */ - unsigned debdone:1; - /** Multi-Valued input changed */ - unsigned mvic:1; - - unsigned reserved31_21:11; - - } b; -} gotgint_data_t; - -/** - * This union represents the bit fields of the Core AHB Configuration - * Register (GAHBCFG). Set/clear the bits using the bit fields then - * write the d32 value to the register. - */ -typedef union gahbcfg_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned glblintrmsk:1; -#define DWC_GAHBCFG_GLBINT_ENABLE 1 - - unsigned hburstlen:4; -#define DWC_GAHBCFG_INT_DMA_BURST_SINGLE 0 -#define DWC_GAHBCFG_INT_DMA_BURST_INCR 1 -#define DWC_GAHBCFG_INT_DMA_BURST_INCR4 3 -#define DWC_GAHBCFG_INT_DMA_BURST_INCR8 5 -#define DWC_GAHBCFG_INT_DMA_BURST_INCR16 7 - - unsigned dmaenable:1; -#define DWC_GAHBCFG_DMAENABLE 1 - unsigned reserved:1; - unsigned nptxfemplvl_txfemplvl:1; - unsigned ptxfemplvl:1; -#define DWC_GAHBCFG_TXFEMPTYLVL_EMPTY 1 -#define DWC_GAHBCFG_TXFEMPTYLVL_HALFEMPTY 0 - unsigned reserved9_20:12; - unsigned remmemsupp:1; - unsigned notialldmawrit:1; - unsigned ahbsingle:1; - unsigned reserved24_31:8; - } b; -} gahbcfg_data_t; - -/** - * This union represents the bit fields of the Core USB Configuration - * Register (GUSBCFG). Set the bits using the bit fields then write - * the d32 value to the register. - */ -typedef union gusbcfg_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned toutcal:3; - unsigned phyif:1; - unsigned ulpi_utmi_sel:1; - unsigned fsintf:1; - unsigned physel:1; - unsigned ddrsel:1; - unsigned srpcap:1; - unsigned hnpcap:1; - unsigned usbtrdtim:4; - unsigned reserved1:1; - unsigned phylpwrclksel:1; - unsigned otgutmifssel:1; - unsigned ulpi_fsls:1; - unsigned ulpi_auto_res:1; - unsigned ulpi_clk_sus_m:1; - unsigned ulpi_ext_vbus_drv:1; - unsigned ulpi_int_vbus_indicator:1; - unsigned term_sel_dl_pulse:1; - unsigned indicator_complement:1; - unsigned indicator_pass_through:1; - unsigned ulpi_int_prot_dis:1; - unsigned ic_usb_cap:1; - unsigned ic_traffic_pull_remove:1; - unsigned tx_end_delay:1; - unsigned force_host_mode:1; - unsigned force_dev_mode:1; - unsigned reserved31:1; - } b; -} gusbcfg_data_t; - -/** - * This union represents the bit fields of the Core Reset Register - * (GRSTCTL). Set/clear the bits using the bit fields then write the - * d32 value to the register. - */ -typedef union grstctl_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** Core Soft Reset (CSftRst) (Device and Host) - * - * The application can flush the control logic in the - * entire core using this bit. This bit resets the - * pipelines in the AHB Clock domain as well as the - * PHY Clock domain. - * - * The state machines are reset to an IDLE state, the - * control bits in the CSRs are cleared, all the - * transmit FIFOs and the receive FIFO are flushed. - * - * The status mask bits that control the generation of - * the interrupt, are cleared, to clear the - * interrupt. The interrupt status bits are not - * cleared, so the application can get the status of - * any events that occurred in the core after it has - * set this bit. - * - * Any transactions on the AHB are terminated as soon - * as possible following the protocol. Any - * transactions on the USB are terminated immediately. - * - * The configuration settings in the CSRs are - * unchanged, so the software doesn't have to - * reprogram these registers (Device - * Configuration/Host Configuration/Core System - * Configuration/Core PHY Configuration). - * - * The application can write to this bit, any time it - * wants to reset the core. This is a self clearing - * bit and the core clears this bit after all the - * necessary logic is reset in the core, which may - * take several clocks, depending on the current state - * of the core. - */ - unsigned csftrst:1; - /** Hclk Soft Reset - * - * The application uses this bit to reset the control logic in - * the AHB clock domain. Only AHB clock domain pipelines are - * reset. - */ - unsigned hsftrst:1; - /** Host Frame Counter Reset (Host Only)
- * - * The application can reset the (micro)frame number - * counter inside the core, using this bit. When the - * (micro)frame counter is reset, the subsequent SOF - * sent out by the core, will have a (micro)frame - * number of 0. - */ - unsigned hstfrm:1; - /** In Token Sequence Learning Queue Flush - * (INTknQFlsh) (Device Only) - */ - unsigned intknqflsh:1; - /** RxFIFO Flush (RxFFlsh) (Device and Host) - * - * The application can flush the entire Receive FIFO - * using this bit. The application must first - * ensure that the core is not in the middle of a - * transaction. The application should write into - * this bit, only after making sure that neither the - * DMA engine is reading from the RxFIFO nor the MAC - * is writing the data in to the FIFO. The - * application should wait until the bit is cleared - * before performing any other operations. This bit - * will takes 8 clocks (slowest of PHY or AHB clock) - * to clear. - */ - unsigned rxfflsh:1; - /** TxFIFO Flush (TxFFlsh) (Device and Host). - * - * This bit is used to selectively flush a single or - * all transmit FIFOs. The application must first - * ensure that the core is not in the middle of a - * transaction. The application should write into - * this bit, only after making sure that neither the - * DMA engine is writing into the TxFIFO nor the MAC - * is reading the data out of the FIFO. The - * application should wait until the core clears this - * bit, before performing any operations. This bit - * will takes 8 clocks (slowest of PHY or AHB clock) - * to clear. - */ - unsigned txfflsh:1; - - /** TxFIFO Number (TxFNum) (Device and Host). - * - * This is the FIFO number which needs to be flushed, - * using the TxFIFO Flush bit. This field should not - * be changed until the TxFIFO Flush bit is cleared by - * the core. - * - 0x0 : Non Periodic TxFIFO Flush - * - 0x1 : Periodic TxFIFO #1 Flush in device mode - * or Periodic TxFIFO in host mode - * - 0x2 : Periodic TxFIFO #2 Flush in device mode. - * - ... - * - 0xF : Periodic TxFIFO #15 Flush in device mode - * - 0x10: Flush all the Transmit NonPeriodic and - * Transmit Periodic FIFOs in the core - */ - unsigned txfnum:5; - /** Reserved */ - unsigned reserved11_29:19; - /** DMA Request Signal. Indicated DMA request is in - * probress. Used for debug purpose. */ - unsigned dmareq:1; - /** AHB Master Idle. Indicates the AHB Master State - * Machine is in IDLE condition. */ - unsigned ahbidle:1; - } b; -} grstctl_t; - -/** - * This union represents the bit fields of the Core Interrupt Mask - * Register (GINTMSK). Set/clear the bits using the bit fields then - * write the d32 value to the register. - */ -typedef union gintmsk_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned reserved0:1; - unsigned modemismatch:1; - unsigned otgintr:1; - unsigned sofintr:1; - unsigned rxstsqlvl:1; - unsigned nptxfempty:1; - unsigned ginnakeff:1; - unsigned goutnakeff:1; - unsigned ulpickint:1; - unsigned i2cintr:1; - unsigned erlysuspend:1; - unsigned usbsuspend:1; - unsigned usbreset:1; - unsigned enumdone:1; - unsigned isooutdrop:1; - unsigned eopframe:1; - unsigned restoredone:1; - unsigned epmismatch:1; - unsigned inepintr:1; - unsigned outepintr:1; - unsigned incomplisoin:1; - unsigned incomplisoout:1; - unsigned fetsusp:1; - unsigned resetdet:1; - unsigned portintr:1; - unsigned hcintr:1; - unsigned ptxfempty:1; - unsigned lpmtranrcvd:1; - unsigned conidstschng:1; - unsigned disconnect:1; - unsigned sessreqintr:1; - unsigned wkupintr:1; - } b; -} gintmsk_data_t; -/** - * This union represents the bit fields of the Core Interrupt Register - * (GINTSTS). Set/clear the bits using the bit fields then write the - * d32 value to the register. - */ -typedef union gintsts_data { - /** raw register data */ - uint32_t d32; -#define DWC_SOF_INTR_MASK 0x0008 - /** register bits */ - struct { -#define DWC_HOST_MODE 1 - unsigned curmode:1; - unsigned modemismatch:1; - unsigned otgintr:1; - unsigned sofintr:1; - unsigned rxstsqlvl:1; - unsigned nptxfempty:1; - unsigned ginnakeff:1; - unsigned goutnakeff:1; - unsigned ulpickint:1; - unsigned i2cintr:1; - unsigned erlysuspend:1; - unsigned usbsuspend:1; - unsigned usbreset:1; - unsigned enumdone:1; - unsigned isooutdrop:1; - unsigned eopframe:1; - unsigned restoredone:1; - unsigned epmismatch:1; - unsigned inepint:1; - unsigned outepintr:1; - unsigned incomplisoin:1; - unsigned incomplisoout:1; - unsigned fetsusp:1; - unsigned resetdet:1; - unsigned portintr:1; - unsigned hcintr:1; - unsigned ptxfempty:1; - unsigned lpmtranrcvd:1; - unsigned conidstschng:1; - unsigned disconnect:1; - unsigned sessreqintr:1; - unsigned wkupintr:1; - } b; -} gintsts_data_t; - -/** - * This union represents the bit fields in the Device Receive Status Read and - * Pop Registers (GRXSTSR, GRXSTSP) Read the register into the d32 - * element then read out the bits using the bit elements. - */ -typedef union device_grxsts_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned epnum:4; - unsigned bcnt:11; - unsigned dpid:2; - -#define DWC_STS_DATA_UPDT 0x2 // OUT Data Packet -#define DWC_STS_XFER_COMP 0x3 // OUT Data Transfer Complete - -#define DWC_DSTS_GOUT_NAK 0x1 // Global OUT NAK -#define DWC_DSTS_SETUP_COMP 0x4 // Setup Phase Complete -#define DWC_DSTS_SETUP_UPDT 0x6 // SETUP Packet - unsigned pktsts:4; - unsigned fn:4; - unsigned reserved25_31:7; - } b; -} device_grxsts_data_t; - -/** - * This union represents the bit fields in the Host Receive Status Read and - * Pop Registers (GRXSTSR, GRXSTSP) Read the register into the d32 - * element then read out the bits using the bit elements. - */ -typedef union host_grxsts_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned chnum:4; - unsigned bcnt:11; - unsigned dpid:2; - - unsigned pktsts:4; -#define DWC_GRXSTS_PKTSTS_IN 0x2 -#define DWC_GRXSTS_PKTSTS_IN_XFER_COMP 0x3 -#define DWC_GRXSTS_PKTSTS_DATA_TOGGLE_ERR 0x5 -#define DWC_GRXSTS_PKTSTS_CH_HALTED 0x7 - - unsigned reserved21_31:11; - } b; -} host_grxsts_data_t; - -/** - * This union represents the bit fields in the FIFO Size Registers (HPTXFSIZ, - * GNPTXFSIZ, DPTXFSIZn, DIEPTXFn). Read the register into the d32 element - * then read out the bits using the bit elements. - */ -typedef union fifosize_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned startaddr:16; - unsigned depth:16; - } b; -} fifosize_data_t; - -/** - * This union represents the bit fields in the Non-Periodic Transmit - * FIFO/Queue Status Register (GNPTXSTS). Read the register into the - * d32 element then read out the bits using the bit - * elements. - */ -typedef union gnptxsts_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned nptxfspcavail:16; - unsigned nptxqspcavail:8; - /** Top of the Non-Periodic Transmit Request Queue - * - bit 24 - Terminate (Last entry for the selected - * channel/EP) - * - bits 26:25 - Token Type - * - 2'b00 - IN/OUT - * - 2'b01 - Zero Length OUT - * - 2'b10 - PING/Complete Split - * - 2'b11 - Channel Halt - * - bits 30:27 - Channel/EP Number - */ - unsigned nptxqtop_terminate:1; - unsigned nptxqtop_token:2; - unsigned nptxqtop_chnep:4; - unsigned reserved:1; - } b; -} gnptxsts_data_t; - -/** - * This union represents the bit fields in the Transmit - * FIFO Status Register (DTXFSTS). Read the register into the - * d32 element then read out the bits using the bit - * elements. - */ -typedef union dtxfsts_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned txfspcavail:16; - unsigned reserved:16; - } b; -} dtxfsts_data_t; - -/** - * This union represents the bit fields in the I2C Control Register - * (I2CCTL). Read the register into the d32 element then read out the - * bits using the bit elements. - */ -typedef union gi2cctl_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned rwdata:8; - unsigned regaddr:8; - unsigned addr:7; - unsigned i2cen:1; - unsigned ack:1; - unsigned i2csuspctl:1; - unsigned i2cdevaddr:2; - unsigned i2cdatse0:1; - unsigned reserved:1; - unsigned rw:1; - unsigned bsydne:1; - } b; -} gi2cctl_data_t; - -/** - * This union represents the bit fields in the PHY Vendor Control Register - * (GPVNDCTL). Read the register into the d32 element then read out the - * bits using the bit elements. - */ -typedef union gpvndctl_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned regdata:8; - unsigned vctrl:8; - unsigned regaddr16_21:6; - unsigned regwr:1; - unsigned reserved23_24:2; - unsigned newregreq:1; - unsigned vstsbsy:1; - unsigned vstsdone:1; - unsigned reserved28_30:3; - unsigned disulpidrvr:1; - } b; -} gpvndctl_data_t; - -/** - * This union represents the bit fields in the General Purpose - * Input/Output Register (GGPIO). - * Read the register into the d32 element then read out the - * bits using the bit elements. - */ -typedef union ggpio_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned gpi:16; - unsigned gpo:16; - } b; -} ggpio_data_t; - -/** - * This union represents the bit fields in the User ID Register - * (GUID). Read the register into the d32 element then read out the - * bits using the bit elements. - */ -typedef union guid_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned rwdata:32; - } b; -} guid_data_t; - -/** - * This union represents the bit fields in the Synopsys ID Register - * (GSNPSID). Read the register into the d32 element then read out the - * bits using the bit elements. - */ -typedef union gsnpsid_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned rwdata:32; - } b; -} gsnpsid_data_t; - -/** - * This union represents the bit fields in the User HW Config1 - * Register. Read the register into the d32 element then read - * out the bits using the bit elements. - */ -typedef union hwcfg1_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned ep_dir0:2; - unsigned ep_dir1:2; - unsigned ep_dir2:2; - unsigned ep_dir3:2; - unsigned ep_dir4:2; - unsigned ep_dir5:2; - unsigned ep_dir6:2; - unsigned ep_dir7:2; - unsigned ep_dir8:2; - unsigned ep_dir9:2; - unsigned ep_dir10:2; - unsigned ep_dir11:2; - unsigned ep_dir12:2; - unsigned ep_dir13:2; - unsigned ep_dir14:2; - unsigned ep_dir15:2; - } b; -} hwcfg1_data_t; - -/** - * This union represents the bit fields in the User HW Config2 - * Register. Read the register into the d32 element then read - * out the bits using the bit elements. - */ -typedef union hwcfg2_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /* GHWCFG2 */ - unsigned op_mode:3; -#define DWC_HWCFG2_OP_MODE_HNP_SRP_CAPABLE_OTG 0 -#define DWC_HWCFG2_OP_MODE_SRP_ONLY_CAPABLE_OTG 1 -#define DWC_HWCFG2_OP_MODE_NO_HNP_SRP_CAPABLE_OTG 2 -#define DWC_HWCFG2_OP_MODE_SRP_CAPABLE_DEVICE 3 -#define DWC_HWCFG2_OP_MODE_NO_SRP_CAPABLE_DEVICE 4 -#define DWC_HWCFG2_OP_MODE_SRP_CAPABLE_HOST 5 -#define DWC_HWCFG2_OP_MODE_NO_SRP_CAPABLE_HOST 6 - - unsigned architecture:2; - unsigned point2point:1; - unsigned hs_phy_type:2; -#define DWC_HWCFG2_HS_PHY_TYPE_NOT_SUPPORTED 0 -#define DWC_HWCFG2_HS_PHY_TYPE_UTMI 1 -#define DWC_HWCFG2_HS_PHY_TYPE_ULPI 2 -#define DWC_HWCFG2_HS_PHY_TYPE_UTMI_ULPI 3 - - unsigned fs_phy_type:2; - unsigned num_dev_ep:4; - unsigned num_host_chan:4; - unsigned perio_ep_supported:1; - unsigned dynamic_fifo:1; - unsigned multi_proc_int:1; - unsigned reserved21:1; - unsigned nonperio_tx_q_depth:2; - unsigned host_perio_tx_q_depth:2; - unsigned dev_token_q_depth:5; - unsigned otg_enable_ic_usb:1; - } b; -} hwcfg2_data_t; - -/** - * This union represents the bit fields in the User HW Config3 - * Register. Read the register into the d32 element then read - * out the bits using the bit elements. - */ -typedef union hwcfg3_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /* GHWCFG3 */ - unsigned xfer_size_cntr_width:4; - unsigned packet_size_cntr_width:3; - unsigned otg_func:1; - unsigned i2c:1; - unsigned vendor_ctrl_if:1; - unsigned optional_features:1; - unsigned synch_reset_type:1; - unsigned adp_supp:1; - unsigned otg_enable_hsic:1; - unsigned bc_support:1; - unsigned otg_lpm_en:1; - unsigned dfifo_depth:16; - } b; -} hwcfg3_data_t; - -/** - * This union represents the bit fields in the User HW Config4 - * Register. Read the register into the d32 element then read - * out the bits using the bit elements. - */ -typedef union hwcfg4_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned num_dev_perio_in_ep:4; - unsigned power_optimiz:1; - unsigned min_ahb_freq:1; - unsigned hiber:1; - unsigned xhiber:1; - unsigned reserved:6; - unsigned utmi_phy_data_width:2; - unsigned num_dev_mode_ctrl_ep:4; - unsigned iddig_filt_en:1; - unsigned vbus_valid_filt_en:1; - unsigned a_valid_filt_en:1; - unsigned b_valid_filt_en:1; - unsigned session_end_filt_en:1; - unsigned ded_fifo_en:1; - unsigned num_in_eps:4; - unsigned desc_dma:1; - unsigned desc_dma_dyn:1; - } b; -} hwcfg4_data_t; - -/** - * This union represents the bit fields of the Core LPM Configuration - * Register (GLPMCFG). Set the bits using bit fields then write - * the d32 value to the register. - */ -typedef union glpmctl_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** LPM-Capable (LPMCap) (Device and Host) - * The application uses this bit to control - * the DWC_otg core LPM capabilities. - */ - unsigned lpm_cap_en:1; - /** LPM response programmed by application (AppL1Res) (Device) - * Handshake response to LPM token pre-programmed - * by device application software. - */ - unsigned appl_resp:1; - /** Host Initiated Resume Duration (HIRD) (Device and Host) - * In Host mode this field indicates the value of HIRD - * to be sent in an LPM transaction. - * In Device mode this field is updated with the - * Received LPM Token HIRD bmAttribute - * when an ACK/NYET/STALL response is sent - * to an LPM transaction. - */ - unsigned hird:4; - /** RemoteWakeEnable (bRemoteWake) (Device and Host) - * In Host mode this bit indicates the value of remote - * wake up to be sent in wIndex field of LPM transaction. - * In Device mode this field is updated with the - * Received LPM Token bRemoteWake bmAttribute - * when an ACK/NYET/STALL response is sent - * to an LPM transaction. - */ - unsigned rem_wkup_en:1; - /** Enable utmi_sleep_n (EnblSlpM) (Device and Host) - * The application uses this bit to control - * the utmi_sleep_n assertion to the PHY when in L1 state. - */ - unsigned en_utmi_sleep:1; - /** HIRD Threshold (HIRD_Thres) (Device and Host) - */ - unsigned hird_thres:5; - /** LPM Response (CoreL1Res) (Device and Host) - * In Host mode this bit contains handsake response to - * LPM transaction. - * In Device mode the response of the core to - * LPM transaction received is reflected in these two bits. - - 0x0 : ERROR (No handshake response) - - 0x1 : STALL - - 0x2 : NYET - - 0x3 : ACK - */ - unsigned lpm_resp:2; - /** Port Sleep Status (SlpSts) (Device and Host) - * This bit is set as long as a Sleep condition - * is present on the USB bus. - */ - unsigned prt_sleep_sts:1; - /** Sleep State Resume OK (L1ResumeOK) (Device and Host) - * Indicates that the application or host - * can start resume from Sleep state. - */ - unsigned sleep_state_resumeok:1; - /** LPM channel Index (LPM_Chnl_Indx) (Host) - * The channel number on which the LPM transaction - * has to be applied while sending - * an LPM transaction to the local device. - */ - unsigned lpm_chan_index:4; - /** LPM Retry Count (LPM_Retry_Cnt) (Host) - * Number host retries that would be performed - * if the device response was not valid response. - */ - unsigned retry_count:3; - /** Send LPM Transaction (SndLPM) (Host) - * When set by application software, - * an LPM transaction containing two tokens - * is sent. - */ - unsigned send_lpm:1; - /** LPM Retry status (LPM_RetryCnt_Sts) (Host) - * Number of LPM Host Retries still remaining - * to be transmitted for the current LPM sequence - */ - unsigned retry_count_sts:3; - /** Enable Best Effort Service Latency (BESL) (Device and Host) - * This bit enables the BESL features as defined in the LPM errata - */ - unsigned en_besl:1; - - unsigned reserved29:1; - /** In host mode once this bit is set, the host - * configures to drive the HSIC Idle state on the bus. - * It then waits for the device to initiate the Connect sequence. - * In device mode once this bit is set, the device waits for - * the HSIC Idle line state on the bus. Upon receving the Idle - * line state, it initiates the HSIC Connect sequence. - */ - unsigned hsic_connect:1; - /** This bit overrides and functionally inverts - * the if_select_hsic input port signal. - */ - unsigned inv_sel_hsic:1; - } b; -} glpmcfg_data_t; - -/** - * This union represents the bit fields of the Core ADP Timer, Control and - * Status Register (ADPTIMCTLSTS). Set the bits using bit fields then write - * the d32 value to the register. - */ -typedef union adpctl_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** Probe Discharge (PRB_DSCHG) - * These bits set the times for TADP_DSCHG. - * These bits are defined as follows: - * 2'b00 - 4 msec - * 2'b01 - 8 msec - * 2'b10 - 16 msec - * 2'b11 - 32 msec - */ - unsigned prb_dschg:2; - /** Probe Delta (PRB_DELTA) - * These bits set the resolution for RTIM value. - * The bits are defined in units of 32 kHz clock cycles as follows: - * 2'b00 - 1 cycles - * 2'b01 - 2 cycles - * 2'b10 - 3 cycles - * 2'b11 - 4 cycles - * For example if this value is chosen to 2'b01, it means that RTIM - * increments for every 3(three) 32Khz clock cycles. - */ - unsigned prb_delta:2; - /** Probe Period (PRB_PER) - * These bits sets the TADP_PRD as shown in Figure 4 as follows: - * 2'b00 - 0.625 to 0.925 sec (typical 0.775 sec) - * 2'b01 - 1.25 to 1.85 sec (typical 1.55 sec) - * 2'b10 - 1.9 to 2.6 sec (typical 2.275 sec) - * 2'b11 - Reserved - */ - unsigned prb_per:2; - /** These bits capture the latest time it took for VBUS to ramp from - * VADP_SINK to VADP_PRB. - * 0x000 - 1 cycles - * 0x001 - 2 cycles - * 0x002 - 3 cycles - * etc - * 0x7FF - 2048 cycles - * A time of 1024 cycles at 32 kHz corresponds to a time of 32 msec. - */ - unsigned rtim:11; - /** Enable Probe (EnaPrb) - * When programmed to 1'b1, the core performs a probe operation. - * This bit is valid only if OTG_Ver = 1'b1. - */ - unsigned enaprb:1; - /** Enable Sense (EnaSns) - * When programmed to 1'b1, the core performs a Sense operation. - * This bit is valid only if OTG_Ver = 1'b1. - */ - unsigned enasns:1; - /** ADP Reset (ADPRes) - * When set, ADP controller is reset. - * This bit is valid only if OTG_Ver = 1'b1. - */ - unsigned adpres:1; - /** ADP Enable (ADPEn) - * When set, the core performs either ADP probing or sensing - * based on EnaPrb or EnaSns. - * This bit is valid only if OTG_Ver = 1'b1. - */ - unsigned adpen:1; - /** ADP Probe Interrupt (ADP_PRB_INT) - * When this bit is set, it means that the VBUS - * voltage is greater than VADP_PRB or VADP_PRB is reached. - * This bit is valid only if OTG_Ver = 1'b1. - */ - unsigned adp_prb_int:1; - /** - * ADP Sense Interrupt (ADP_SNS_INT) - * When this bit is set, it means that the VBUS voltage is greater than - * VADP_SNS value or VADP_SNS is reached. - * This bit is valid only if OTG_Ver = 1'b1. - */ - unsigned adp_sns_int:1; - /** ADP Tomeout Interrupt (ADP_TMOUT_INT) - * This bit is relevant only for an ADP probe. - * When this bit is set, it means that the ramp time has - * completed ie ADPCTL.RTIM has reached its terminal value - * of 0x7FF. This is a debug feature that allows software - * to read the ramp time after each cycle. - * This bit is valid only if OTG_Ver = 1'b1. - */ - unsigned adp_tmout_int:1; - /** ADP Probe Interrupt Mask (ADP_PRB_INT_MSK) - * When this bit is set, it unmasks the interrupt due to ADP_PRB_INT. - * This bit is valid only if OTG_Ver = 1'b1. - */ - unsigned adp_prb_int_msk:1; - /** ADP Sense Interrupt Mask (ADP_SNS_INT_MSK) - * When this bit is set, it unmasks the interrupt due to ADP_SNS_INT. - * This bit is valid only if OTG_Ver = 1'b1. - */ - unsigned adp_sns_int_msk:1; - /** ADP Timoeout Interrupt Mask (ADP_TMOUT_MSK) - * When this bit is set, it unmasks the interrupt due to ADP_TMOUT_INT. - * This bit is valid only if OTG_Ver = 1'b1. - */ - unsigned adp_tmout_int_msk:1; - /** Access Request - * 2'b00 - Read/Write Valid (updated by the core) - * 2'b01 - Read - * 2'b00 - Write - * 2'b00 - Reserved - */ - unsigned ar:2; - /** Reserved */ - unsigned reserved29_31:3; - } b; -} adpctl_data_t; - -//////////////////////////////////////////// -// Device Registers -/** - * Device Global Registers. Offsets 800h-BFFh - * - * The following structures define the size and relative field offsets - * for the Device Mode Registers. - * - * These registers are visible only in Device mode and must not be - * accessed in Host mode, as the results are unknown. - */ -typedef struct dwc_otg_dev_global_regs { - /** Device Configuration Register. Offset 800h */ - volatile uint32_t dcfg; - /** Device Control Register. Offset: 804h */ - volatile uint32_t dctl; - /** Device Status Register (Read Only). Offset: 808h */ - volatile uint32_t dsts; - /** Reserved. Offset: 80Ch */ - uint32_t unused; - /** Device IN Endpoint Common Interrupt Mask - * Register. Offset: 810h */ - volatile uint32_t diepmsk; - /** Device OUT Endpoint Common Interrupt Mask - * Register. Offset: 814h */ - volatile uint32_t doepmsk; - /** Device All Endpoints Interrupt Register. Offset: 818h */ - volatile uint32_t daint; - /** Device All Endpoints Interrupt Mask Register. Offset: - * 81Ch */ - volatile uint32_t daintmsk; - /** Device IN Token Queue Read Register-1 (Read Only). - * Offset: 820h */ - volatile uint32_t dtknqr1; - /** Device IN Token Queue Read Register-2 (Read Only). - * Offset: 824h */ - volatile uint32_t dtknqr2; - /** Device VBUS discharge Register. Offset: 828h */ - volatile uint32_t dvbusdis; - /** Device VBUS Pulse Register. Offset: 82Ch */ - volatile uint32_t dvbuspulse; - /** Device IN Token Queue Read Register-3 (Read Only). / - * Device Thresholding control register (Read/Write) - * Offset: 830h */ - volatile uint32_t dtknqr3_dthrctl; - /** Device IN Token Queue Read Register-4 (Read Only). / - * Device IN EPs empty Inr. Mask Register (Read/Write) - * Offset: 834h */ - volatile uint32_t dtknqr4_fifoemptymsk; - /** Device Each Endpoint Interrupt Register (Read Only). / - * Offset: 838h */ - volatile uint32_t deachint; - /** Device Each Endpoint Interrupt mask Register (Read/Write). / - * Offset: 83Ch */ - volatile uint32_t deachintmsk; - /** Device Each In Endpoint Interrupt mask Register (Read/Write). / - * Offset: 840h */ - volatile uint32_t diepeachintmsk[MAX_EPS_CHANNELS]; - /** Device Each Out Endpoint Interrupt mask Register (Read/Write). / - * Offset: 880h */ - volatile uint32_t doepeachintmsk[MAX_EPS_CHANNELS]; -} dwc_otg_device_global_regs_t; - -/** - * This union represents the bit fields in the Device Configuration - * Register. Read the register into the d32 member then - * set/clear the bits using the bit elements. Write the - * d32 member to the dcfg register. - */ -typedef union dcfg_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** Device Speed */ - unsigned devspd:2; - /** Non Zero Length Status OUT Handshake */ - unsigned nzstsouthshk:1; -#define DWC_DCFG_SEND_STALL 1 - - unsigned ena32khzs:1; - /** Device Addresses */ - unsigned devaddr:7; - /** Periodic Frame Interval */ - unsigned perfrint:2; -#define DWC_DCFG_FRAME_INTERVAL_80 0 -#define DWC_DCFG_FRAME_INTERVAL_85 1 -#define DWC_DCFG_FRAME_INTERVAL_90 2 -#define DWC_DCFG_FRAME_INTERVAL_95 3 - - /** Enable Device OUT NAK for bulk in DDMA mode */ - unsigned endevoutnak:1; - - unsigned reserved14_17:4; - /** In Endpoint Mis-match count */ - unsigned epmscnt:5; - /** Enable Descriptor DMA in Device mode */ - unsigned descdma:1; - unsigned perschintvl:2; - unsigned resvalid:6; - } b; -} dcfg_data_t; - -/** - * This union represents the bit fields in the Device Control - * Register. Read the register into the d32 member then - * set/clear the bits using the bit elements. - */ -typedef union dctl_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** Remote Wakeup */ - unsigned rmtwkupsig:1; - /** Soft Disconnect */ - unsigned sftdiscon:1; - /** Global Non-Periodic IN NAK Status */ - unsigned gnpinnaksts:1; - /** Global OUT NAK Status */ - unsigned goutnaksts:1; - /** Test Control */ - unsigned tstctl:3; - /** Set Global Non-Periodic IN NAK */ - unsigned sgnpinnak:1; - /** Clear Global Non-Periodic IN NAK */ - unsigned cgnpinnak:1; - /** Set Global OUT NAK */ - unsigned sgoutnak:1; - /** Clear Global OUT NAK */ - unsigned cgoutnak:1; - /** Power-On Programming Done */ - unsigned pwronprgdone:1; - /** Reserved */ - unsigned reserved:1; - /** Global Multi Count */ - unsigned gmc:2; - /** Ignore Frame Number for ISOC EPs */ - unsigned ifrmnum:1; - /** NAK on Babble */ - unsigned nakonbble:1; - /** Enable Continue on BNA */ - unsigned encontonbna:1; - /** Enable deep sleep besl reject feature*/ - unsigned besl_reject:1; - - unsigned reserved17_31:13; - } b; -} dctl_data_t; - -/** - * This union represents the bit fields in the Device Status - * Register. Read the register into the d32 member then - * set/clear the bits using the bit elements. - */ -typedef union dsts_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** Suspend Status */ - unsigned suspsts:1; - /** Enumerated Speed */ - unsigned enumspd:2; -#define DWC_DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ 0 -#define DWC_DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ 1 -#define DWC_DSTS_ENUMSPD_LS_PHY_6MHZ 2 -#define DWC_DSTS_ENUMSPD_FS_PHY_48MHZ 3 - /** Erratic Error */ - unsigned errticerr:1; - unsigned reserved4_7:4; - /** Frame or Microframe Number of the received SOF */ - unsigned soffn:14; - unsigned reserved22_31:10; - } b; -} dsts_data_t; - -/** - * This union represents the bit fields in the Device IN EP Interrupt - * Register and the Device IN EP Common Mask Register. - * - * - Read the register into the d32 member then set/clear the - * bits using the bit elements. - */ -typedef union diepint_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** Transfer complete mask */ - unsigned xfercompl:1; - /** Endpoint disable mask */ - unsigned epdisabled:1; - /** AHB Error mask */ - unsigned ahberr:1; - /** TimeOUT Handshake mask (non-ISOC EPs) */ - unsigned timeout:1; - /** IN Token received with TxF Empty mask */ - unsigned intktxfemp:1; - /** IN Token Received with EP mismatch mask */ - unsigned intknepmis:1; - /** IN Endpoint NAK Effective mask */ - unsigned inepnakeff:1; - /** Reserved */ - unsigned emptyintr:1; - - unsigned txfifoundrn:1; - - /** BNA Interrupt mask */ - unsigned bna:1; - - unsigned reserved10_12:3; - /** BNA Interrupt mask */ - unsigned nak:1; - - unsigned reserved14_31:18; - } b; -} diepint_data_t; - -/** - * This union represents the bit fields in the Device IN EP - * Common/Dedicated Interrupt Mask Register. - */ -typedef union diepint_data diepmsk_data_t; - -/** - * This union represents the bit fields in the Device OUT EP Interrupt - * Registerand Device OUT EP Common Interrupt Mask Register. - * - * - Read the register into the d32 member then set/clear the - * bits using the bit elements. - */ -typedef union doepint_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** Transfer complete */ - unsigned xfercompl:1; - /** Endpoint disable */ - unsigned epdisabled:1; - /** AHB Error */ - unsigned ahberr:1; - /** Setup Phase Done (contorl EPs) */ - unsigned setup:1; - /** OUT Token Received when Endpoint Disabled */ - unsigned outtknepdis:1; - - unsigned stsphsercvd:1; - /** Back-to-Back SETUP Packets Received */ - unsigned back2backsetup:1; - - unsigned reserved7:1; - /** OUT packet Error */ - unsigned outpkterr:1; - /** BNA Interrupt */ - unsigned bna:1; - - unsigned reserved10:1; - /** Packet Drop Status */ - unsigned pktdrpsts:1; - /** Babble Interrupt */ - unsigned babble:1; - /** NAK Interrupt */ - unsigned nak:1; - /** NYET Interrupt */ - unsigned nyet:1; - /** Bit indicating setup packet received */ - unsigned sr:1; - - unsigned reserved16_31:16; - } b; -} doepint_data_t; - -/** - * This union represents the bit fields in the Device OUT EP - * Common/Dedicated Interrupt Mask Register. - */ -typedef union doepint_data doepmsk_data_t; - -/** - * This union represents the bit fields in the Device All EP Interrupt - * and Mask Registers. - * - Read the register into the d32 member then set/clear the - * bits using the bit elements. - */ -typedef union daint_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** IN Endpoint bits */ - unsigned in:16; - /** OUT Endpoint bits */ - unsigned out:16; - } ep; - struct { - /** IN Endpoint bits */ - unsigned inep0:1; - unsigned inep1:1; - unsigned inep2:1; - unsigned inep3:1; - unsigned inep4:1; - unsigned inep5:1; - unsigned inep6:1; - unsigned inep7:1; - unsigned inep8:1; - unsigned inep9:1; - unsigned inep10:1; - unsigned inep11:1; - unsigned inep12:1; - unsigned inep13:1; - unsigned inep14:1; - unsigned inep15:1; - /** OUT Endpoint bits */ - unsigned outep0:1; - unsigned outep1:1; - unsigned outep2:1; - unsigned outep3:1; - unsigned outep4:1; - unsigned outep5:1; - unsigned outep6:1; - unsigned outep7:1; - unsigned outep8:1; - unsigned outep9:1; - unsigned outep10:1; - unsigned outep11:1; - unsigned outep12:1; - unsigned outep13:1; - unsigned outep14:1; - unsigned outep15:1; - } b; -} daint_data_t; - -/** - * This union represents the bit fields in the Device IN Token Queue - * Read Registers. - * - Read the register into the d32 member. - * - READ-ONLY Register - */ -typedef union dtknq1_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** In Token Queue Write Pointer */ - unsigned intknwptr:5; - /** Reserved */ - unsigned reserved05_06:2; - /** write pointer has wrapped. */ - unsigned wrap_bit:1; - /** EP Numbers of IN Tokens 0 ... 4 */ - unsigned epnums0_5:24; - } b; -} dtknq1_data_t; - -/** - * This union represents Threshold control Register - * - Read and write the register into the d32 member. - * - READ-WRITABLE Register - */ -typedef union dthrctl_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** non ISO Tx Thr. Enable */ - unsigned non_iso_thr_en:1; - /** ISO Tx Thr. Enable */ - unsigned iso_thr_en:1; - /** Tx Thr. Length */ - unsigned tx_thr_len:9; - /** AHB Threshold ratio */ - unsigned ahb_thr_ratio:2; - /** Reserved */ - unsigned reserved13_15:3; - /** Rx Thr. Enable */ - unsigned rx_thr_en:1; - /** Rx Thr. Length */ - unsigned rx_thr_len:9; - unsigned reserved26:1; - /** Arbiter Parking Enable*/ - unsigned arbprken:1; - /** Reserved */ - unsigned reserved28_31:4; - } b; -} dthrctl_data_t; - -/** - * Device Logical IN Endpoint-Specific Registers. Offsets - * 900h-AFCh - * - * There will be one set of endpoint registers per logical endpoint - * implemented. - * - * These registers are visible only in Device mode and must not be - * accessed in Host mode, as the results are unknown. - */ -typedef struct dwc_otg_dev_in_ep_regs { - /** Device IN Endpoint Control Register. Offset:900h + - * (ep_num * 20h) + 00h */ - volatile uint32_t diepctl; - /** Reserved. Offset:900h + (ep_num * 20h) + 04h */ - uint32_t reserved04; - /** Device IN Endpoint Interrupt Register. Offset:900h + - * (ep_num * 20h) + 08h */ - volatile uint32_t diepint; - /** Reserved. Offset:900h + (ep_num * 20h) + 0Ch */ - uint32_t reserved0C; - /** Device IN Endpoint Transfer Size - * Register. Offset:900h + (ep_num * 20h) + 10h */ - volatile uint32_t dieptsiz; - /** Device IN Endpoint DMA Address Register. Offset:900h + - * (ep_num * 20h) + 14h */ - volatile uint32_t diepdma; - /** Device IN Endpoint Transmit FIFO Status Register. Offset:900h + - * (ep_num * 20h) + 18h */ - volatile uint32_t dtxfsts; - /** Device IN Endpoint DMA Buffer Register. Offset:900h + - * (ep_num * 20h) + 1Ch */ - volatile uint32_t diepdmab; -} dwc_otg_dev_in_ep_regs_t; - -/** - * Device Logical OUT Endpoint-Specific Registers. Offsets: - * B00h-CFCh - * - * There will be one set of endpoint registers per logical endpoint - * implemented. - * - * These registers are visible only in Device mode and must not be - * accessed in Host mode, as the results are unknown. - */ -typedef struct dwc_otg_dev_out_ep_regs { - /** Device OUT Endpoint Control Register. Offset:B00h + - * (ep_num * 20h) + 00h */ - volatile uint32_t doepctl; - /** Reserved. Offset:B00h + (ep_num * 20h) + 04h */ - uint32_t reserved04; - /** Device OUT Endpoint Interrupt Register. Offset:B00h + - * (ep_num * 20h) + 08h */ - volatile uint32_t doepint; - /** Reserved. Offset:B00h + (ep_num * 20h) + 0Ch */ - uint32_t reserved0C; - /** Device OUT Endpoint Transfer Size Register. Offset: - * B00h + (ep_num * 20h) + 10h */ - volatile uint32_t doeptsiz; - /** Device OUT Endpoint DMA Address Register. Offset:B00h - * + (ep_num * 20h) + 14h */ - volatile uint32_t doepdma; - /** Reserved. Offset:B00h + * (ep_num * 20h) + 18h */ - uint32_t unused; - /** Device OUT Endpoint DMA Buffer Register. Offset:B00h - * + (ep_num * 20h) + 1Ch */ - uint32_t doepdmab; -} dwc_otg_dev_out_ep_regs_t; - -/** - * This union represents the bit fields in the Device EP Control - * Register. Read the register into the d32 member then - * set/clear the bits using the bit elements. - */ -typedef union depctl_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** Maximum Packet Size - * IN/OUT EPn - * IN/OUT EP0 - 2 bits - * 2'b00: 64 Bytes - * 2'b01: 32 - * 2'b10: 16 - * 2'b11: 8 */ - unsigned mps:11; -#define DWC_DEP0CTL_MPS_64 0 -#define DWC_DEP0CTL_MPS_32 1 -#define DWC_DEP0CTL_MPS_16 2 -#define DWC_DEP0CTL_MPS_8 3 - - /** Next Endpoint - * IN EPn/IN EP0 - * OUT EPn/OUT EP0 - reserved */ - unsigned nextep:4; - - /** USB Active Endpoint */ - unsigned usbactep:1; - - /** Endpoint DPID (INTR/Bulk IN and OUT endpoints) - * This field contains the PID of the packet going to - * be received or transmitted on this endpoint. The - * application should program the PID of the first - * packet going to be received or transmitted on this - * endpoint , after the endpoint is - * activated. Application use the SetD1PID and - * SetD0PID fields of this register to program either - * D0 or D1 PID. - * - * The encoding for this field is - * - 0: D0 - * - 1: D1 - */ - unsigned dpid:1; - - /** NAK Status */ - unsigned naksts:1; - - /** Endpoint Type - * 2'b00: Control - * 2'b01: Isochronous - * 2'b10: Bulk - * 2'b11: Interrupt */ - unsigned eptype:2; - - /** Snoop Mode - * OUT EPn/OUT EP0 - * IN EPn/IN EP0 - reserved */ - unsigned snp:1; - - /** Stall Handshake */ - unsigned stall:1; - - /** Tx Fifo Number - * IN EPn/IN EP0 - * OUT EPn/OUT EP0 - reserved */ - unsigned txfnum:4; - - /** Clear NAK */ - unsigned cnak:1; - /** Set NAK */ - unsigned snak:1; - /** Set DATA0 PID (INTR/Bulk IN and OUT endpoints) - * Writing to this field sets the Endpoint DPID (DPID) - * field in this register to DATA0. Set Even - * (micro)frame (SetEvenFr) (ISO IN and OUT Endpoints) - * Writing to this field sets the Even/Odd - * (micro)frame (EO_FrNum) field to even (micro) - * frame. - */ - unsigned setd0pid:1; - /** Set DATA1 PID (INTR/Bulk IN and OUT endpoints) - * Writing to this field sets the Endpoint DPID (DPID) - * field in this register to DATA1 Set Odd - * (micro)frame (SetOddFr) (ISO IN and OUT Endpoints) - * Writing to this field sets the Even/Odd - * (micro)frame (EO_FrNum) field to odd (micro) frame. - */ - unsigned setd1pid:1; - - /** Endpoint Disable */ - unsigned epdis:1; - /** Endpoint Enable */ - unsigned epena:1; - } b; -} depctl_data_t; - -/** - * This union represents the bit fields in the Device EP Transfer - * Size Register. Read the register into the d32 member then - * set/clear the bits using the bit elements. - */ -typedef union deptsiz_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** Transfer size */ - unsigned xfersize:19; -/** Max packet count for EP (pow(2,10)-1) */ -#define MAX_PKT_CNT 1023 - /** Packet Count */ - unsigned pktcnt:10; - /** Multi Count - Periodic IN endpoints */ - unsigned mc:2; - unsigned reserved:1; - } b; -} deptsiz_data_t; - -/** - * This union represents the bit fields in the Device EP 0 Transfer - * Size Register. Read the register into the d32 member then - * set/clear the bits using the bit elements. - */ -typedef union deptsiz0_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** Transfer size */ - unsigned xfersize:7; - /** Reserved */ - unsigned reserved7_18:12; - /** Packet Count */ - unsigned pktcnt:2; - /** Reserved */ - unsigned reserved21_28:8; - /**Setup Packet Count (DOEPTSIZ0 Only) */ - unsigned supcnt:2; - unsigned reserved31; - } b; -} deptsiz0_data_t; - -///////////////////////////////////////////////// -// DMA Descriptor Specific Structures -// - -/** Buffer status definitions */ - -#define BS_HOST_READY 0x0 -#define BS_DMA_BUSY 0x1 -#define BS_DMA_DONE 0x2 -#define BS_HOST_BUSY 0x3 - -/** Receive/Transmit status definitions */ - -#define RTS_SUCCESS 0x0 -#define RTS_BUFFLUSH 0x1 -#define RTS_RESERVED 0x2 -#define RTS_BUFERR 0x3 - -/** - * This union represents the bit fields in the DMA Descriptor - * status quadlet. Read the quadlet into the d32 member then - * set/clear the bits using the bit, b_iso_out and - * b_iso_in elements. - */ -typedef union dev_dma_desc_sts { - /** raw register data */ - uint32_t d32; - /** quadlet bits */ - struct { - /** Received number of bytes */ - unsigned bytes:16; - /** NAK bit - only for OUT EPs */ - unsigned nak:1; - unsigned reserved17_22:6; - /** Multiple Transfer - only for OUT EPs */ - unsigned mtrf:1; - /** Setup Packet received - only for OUT EPs */ - unsigned sr:1; - /** Interrupt On Complete */ - unsigned ioc:1; - /** Short Packet */ - unsigned sp:1; - /** Last */ - unsigned l:1; - /** Receive Status */ - unsigned sts:2; - /** Buffer Status */ - unsigned bs:2; - } b; - -//#ifdef DWC_EN_ISOC - /** iso out quadlet bits */ - struct { - /** Received number of bytes */ - unsigned rxbytes:11; - - unsigned reserved11:1; - /** Frame Number */ - unsigned framenum:11; - /** Received ISO Data PID */ - unsigned pid:2; - /** Interrupt On Complete */ - unsigned ioc:1; - /** Short Packet */ - unsigned sp:1; - /** Last */ - unsigned l:1; - /** Receive Status */ - unsigned rxsts:2; - /** Buffer Status */ - unsigned bs:2; - } b_iso_out; - - /** iso in quadlet bits */ - struct { - /** Transmited number of bytes */ - unsigned txbytes:12; - /** Frame Number */ - unsigned framenum:11; - /** Transmited ISO Data PID */ - unsigned pid:2; - /** Interrupt On Complete */ - unsigned ioc:1; - /** Short Packet */ - unsigned sp:1; - /** Last */ - unsigned l:1; - /** Transmit Status */ - unsigned txsts:2; - /** Buffer Status */ - unsigned bs:2; - } b_iso_in; -//#endif /* DWC_EN_ISOC */ -} dev_dma_desc_sts_t; - -/** - * DMA Descriptor structure - * - * DMA Descriptor structure contains two quadlets: - * Status quadlet and Data buffer pointer. - */ -typedef struct dwc_otg_dev_dma_desc { - /** DMA Descriptor status quadlet */ - dev_dma_desc_sts_t status; - /** DMA Descriptor data buffer pointer */ - uint32_t buf; -} dwc_otg_dev_dma_desc_t; - -/** - * The dwc_otg_dev_if structure contains information needed to manage - * the DWC_otg controller acting in device mode. It represents the - * programming view of the device-specific aspects of the controller. - */ -typedef struct dwc_otg_dev_if { - /** Pointer to device Global registers. - * Device Global Registers starting at offset 800h - */ - dwc_otg_device_global_regs_t *dev_global_regs; -#define DWC_DEV_GLOBAL_REG_OFFSET 0x800 - - /** - * Device Logical IN Endpoint-Specific Registers 900h-AFCh - */ - dwc_otg_dev_in_ep_regs_t *in_ep_regs[MAX_EPS_CHANNELS]; -#define DWC_DEV_IN_EP_REG_OFFSET 0x900 -#define DWC_EP_REG_OFFSET 0x20 - - /** Device Logical OUT Endpoint-Specific Registers B00h-CFCh */ - dwc_otg_dev_out_ep_regs_t *out_ep_regs[MAX_EPS_CHANNELS]; -#define DWC_DEV_OUT_EP_REG_OFFSET 0xB00 - - /* Device configuration information */ - uint8_t speed; /**< Device Speed 0: Unknown, 1: LS, 2:FS, 3: HS */ - uint8_t num_in_eps; /**< Number # of Tx EP range: 0-15 exept ep0 */ - uint8_t num_out_eps; /**< Number # of Rx EP range: 0-15 exept ep 0*/ - - /** Size of periodic FIFOs (Bytes) */ - uint16_t perio_tx_fifo_size[MAX_PERIO_FIFOS]; - - /** Size of Tx FIFOs (Bytes) */ - uint16_t tx_fifo_size[MAX_TX_FIFOS]; - - /** Thresholding enable flags and length varaiables **/ - uint16_t rx_thr_en; - uint16_t iso_tx_thr_en; - uint16_t non_iso_tx_thr_en; - - uint16_t rx_thr_length; - uint16_t tx_thr_length; - - /** - * Pointers to the DMA Descriptors for EP0 Control - * transfers (virtual and physical) - */ - - /** 2 descriptors for SETUP packets */ - dwc_dma_t dma_setup_desc_addr[2]; - dwc_otg_dev_dma_desc_t *setup_desc_addr[2]; - - /** Pointer to Descriptor with latest SETUP packet */ - dwc_otg_dev_dma_desc_t *psetup; - - /** Index of current SETUP handler descriptor */ - uint32_t setup_desc_index; - - /** Descriptor for Data In or Status In phases */ - dwc_dma_t dma_in_desc_addr; - dwc_otg_dev_dma_desc_t *in_desc_addr; - - /** Descriptor for Data Out or Status Out phases */ - dwc_dma_t dma_out_desc_addr; - dwc_otg_dev_dma_desc_t *out_desc_addr; - - /** Setup Packet Detected - if set clear NAK when queueing */ - uint32_t spd; - /** Isoc ep pointer on which incomplete happens */ - void *isoc_ep; - -} dwc_otg_dev_if_t; - -///////////////////////////////////////////////// -// Host Mode Register Structures -// -/** - * The Host Global Registers structure defines the size and relative - * field offsets for the Host Mode Global Registers. Host Global - * Registers offsets 400h-7FFh. -*/ -typedef struct dwc_otg_host_global_regs { - /** Host Configuration Register. Offset: 400h */ - volatile uint32_t hcfg; - /** Host Frame Interval Register. Offset: 404h */ - volatile uint32_t hfir; - /** Host Frame Number / Frame Remaining Register. Offset: 408h */ - volatile uint32_t hfnum; - /** Reserved. Offset: 40Ch */ - uint32_t reserved40C; - /** Host Periodic Transmit FIFO/ Queue Status Register. Offset: 410h */ - volatile uint32_t hptxsts; - /** Host All Channels Interrupt Register. Offset: 414h */ - volatile uint32_t haint; - /** Host All Channels Interrupt Mask Register. Offset: 418h */ - volatile uint32_t haintmsk; - /** Host Frame List Base Address Register . Offset: 41Ch */ - volatile uint32_t hflbaddr; -} dwc_otg_host_global_regs_t; - -/** - * This union represents the bit fields in the Host Configuration Register. - * Read the register into the d32 member then set/clear the bits using - * the bit elements. Write the d32 member to the hcfg register. - */ -typedef union hcfg_data { - /** raw register data */ - uint32_t d32; - - /** register bits */ - struct { - /** FS/LS Phy Clock Select */ - unsigned fslspclksel:2; -#define DWC_HCFG_30_60_MHZ 0 -#define DWC_HCFG_48_MHZ 1 -#define DWC_HCFG_6_MHZ 2 - - /** FS/LS Only Support */ - unsigned fslssupp:1; - unsigned reserved3_6:4; - /** Enable 32-KHz Suspend Mode */ - unsigned ena32khzs:1; - /** Resume Validation Periiod */ - unsigned resvalid:8; - unsigned reserved16_22:7; - /** Enable Scatter/gather DMA in Host mode */ - unsigned descdma:1; - /** Frame List Entries */ - unsigned frlisten:2; - /** Enable Periodic Scheduling */ - unsigned perschedena:1; - unsigned reserved27_30:4; - unsigned modechtimen:1; - } b; -} hcfg_data_t; - -/** - * This union represents the bit fields in the Host Frame Remaing/Number - * Register. - */ -typedef union hfir_data { - /** raw register data */ - uint32_t d32; - - /** register bits */ - struct { - unsigned frint:16; - unsigned hfirrldctrl:1; - unsigned reserved:15; - } b; -} hfir_data_t; - -/** - * This union represents the bit fields in the Host Frame Remaing/Number - * Register. - */ -typedef union hfnum_data { - /** raw register data */ - uint32_t d32; - - /** register bits */ - struct { - unsigned frnum:16; -#define DWC_HFNUM_MAX_FRNUM 0x3FFF - unsigned frrem:16; - } b; -} hfnum_data_t; - -typedef union hptxsts_data { - /** raw register data */ - uint32_t d32; - - /** register bits */ - struct { - unsigned ptxfspcavail:16; - unsigned ptxqspcavail:8; - /** Top of the Periodic Transmit Request Queue - * - bit 24 - Terminate (last entry for the selected channel) - * - bits 26:25 - Token Type - * - 2'b00 - Zero length - * - 2'b01 - Ping - * - 2'b10 - Disable - * - bits 30:27 - Channel Number - * - bit 31 - Odd/even microframe - */ - unsigned ptxqtop_terminate:1; - unsigned ptxqtop_token:2; - unsigned ptxqtop_chnum:4; - unsigned ptxqtop_odd:1; - } b; -} hptxsts_data_t; - -/** - * This union represents the bit fields in the Host Port Control and Status - * Register. Read the register into the d32 member then set/clear the - * bits using the bit elements. Write the d32 member to the - * hprt0 register. - */ -typedef union hprt0_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned prtconnsts:1; - unsigned prtconndet:1; - unsigned prtena:1; - unsigned prtenchng:1; - unsigned prtovrcurract:1; - unsigned prtovrcurrchng:1; - unsigned prtres:1; - unsigned prtsusp:1; - unsigned prtrst:1; - unsigned reserved9:1; - unsigned prtlnsts:2; - unsigned prtpwr:1; - unsigned prttstctl:4; - unsigned prtspd:2; -#define DWC_HPRT0_PRTSPD_HIGH_SPEED 0 -#define DWC_HPRT0_PRTSPD_FULL_SPEED 1 -#define DWC_HPRT0_PRTSPD_LOW_SPEED 2 - unsigned reserved19_31:13; - } b; -} hprt0_data_t; - -/** - * This union represents the bit fields in the Host All Interrupt - * Register. - */ -typedef union haint_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned ch0:1; - unsigned ch1:1; - unsigned ch2:1; - unsigned ch3:1; - unsigned ch4:1; - unsigned ch5:1; - unsigned ch6:1; - unsigned ch7:1; - unsigned ch8:1; - unsigned ch9:1; - unsigned ch10:1; - unsigned ch11:1; - unsigned ch12:1; - unsigned ch13:1; - unsigned ch14:1; - unsigned ch15:1; - unsigned reserved:16; - } b; - - struct { - unsigned chint:16; - unsigned reserved:16; - } b2; -} haint_data_t; - -/** - * This union represents the bit fields in the Host All Interrupt - * Register. - */ -typedef union haintmsk_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned ch0:1; - unsigned ch1:1; - unsigned ch2:1; - unsigned ch3:1; - unsigned ch4:1; - unsigned ch5:1; - unsigned ch6:1; - unsigned ch7:1; - unsigned ch8:1; - unsigned ch9:1; - unsigned ch10:1; - unsigned ch11:1; - unsigned ch12:1; - unsigned ch13:1; - unsigned ch14:1; - unsigned ch15:1; - unsigned reserved:16; - } b; - - struct { - unsigned chint:16; - unsigned reserved:16; - } b2; -} haintmsk_data_t; - -/** - * Host Channel Specific Registers. 500h-5FCh - */ -typedef struct dwc_otg_hc_regs { - /** Host Channel 0 Characteristic Register. Offset: 500h + (chan_num * 20h) + 00h */ - volatile uint32_t hcchar; - /** Host Channel 0 Split Control Register. Offset: 500h + (chan_num * 20h) + 04h */ - volatile uint32_t hcsplt; - /** Host Channel 0 Interrupt Register. Offset: 500h + (chan_num * 20h) + 08h */ - volatile uint32_t hcint; - /** Host Channel 0 Interrupt Mask Register. Offset: 500h + (chan_num * 20h) + 0Ch */ - volatile uint32_t hcintmsk; - /** Host Channel 0 Transfer Size Register. Offset: 500h + (chan_num * 20h) + 10h */ - volatile uint32_t hctsiz; - /** Host Channel 0 DMA Address Register. Offset: 500h + (chan_num * 20h) + 14h */ - volatile uint32_t hcdma; - volatile uint32_t reserved; - /** Host Channel 0 DMA Buffer Address Register. Offset: 500h + (chan_num * 20h) + 1Ch */ - volatile uint32_t hcdmab; -} dwc_otg_hc_regs_t; - -/** - * This union represents the bit fields in the Host Channel Characteristics - * Register. Read the register into the d32 member then set/clear the - * bits using the bit elements. Write the d32 member to the - * hcchar register. - */ -typedef union hcchar_data { - /** raw register data */ - uint32_t d32; - - /** register bits */ - struct { - /** Maximum packet size in bytes */ - unsigned mps:11; - - /** Endpoint number */ - unsigned epnum:4; - - /** 0: OUT, 1: IN */ - unsigned epdir:1; - - unsigned reserved:1; - - /** 0: Full/high speed device, 1: Low speed device */ - unsigned lspddev:1; - - /** 0: Control, 1: Isoc, 2: Bulk, 3: Intr */ - unsigned eptype:2; - - /** Packets per frame for periodic transfers. 0 is reserved. */ - unsigned multicnt:2; - - /** Device address */ - unsigned devaddr:7; - - /** - * Frame to transmit periodic transaction. - * 0: even, 1: odd - */ - unsigned oddfrm:1; - - /** Channel disable */ - unsigned chdis:1; - - /** Channel enable */ - unsigned chen:1; - } b; -} hcchar_data_t; - -typedef union hcsplt_data { - /** raw register data */ - uint32_t d32; - - /** register bits */ - struct { - /** Port Address */ - unsigned prtaddr:7; - - /** Hub Address */ - unsigned hubaddr:7; - - /** Transaction Position */ - unsigned xactpos:2; -#define DWC_HCSPLIT_XACTPOS_MID 0 -#define DWC_HCSPLIT_XACTPOS_END 1 -#define DWC_HCSPLIT_XACTPOS_BEGIN 2 -#define DWC_HCSPLIT_XACTPOS_ALL 3 - - /** Do Complete Split */ - unsigned compsplt:1; - - /** Reserved */ - unsigned reserved:14; - - /** Split Enble */ - unsigned spltena:1; - } b; -} hcsplt_data_t; - -/** - * This union represents the bit fields in the Host All Interrupt - * Register. - */ -typedef union hcint_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** Transfer Complete */ - unsigned xfercomp:1; - /** Channel Halted */ - unsigned chhltd:1; - /** AHB Error */ - unsigned ahberr:1; - /** STALL Response Received */ - unsigned stall:1; - /** NAK Response Received */ - unsigned nak:1; - /** ACK Response Received */ - unsigned ack:1; - /** NYET Response Received */ - unsigned nyet:1; - /** Transaction Err */ - unsigned xacterr:1; - /** Babble Error */ - unsigned bblerr:1; - /** Frame Overrun */ - unsigned frmovrun:1; - /** Data Toggle Error */ - unsigned datatglerr:1; - /** Buffer Not Available (only for DDMA mode) */ - unsigned bna:1; - /** Exessive transaction error (only for DDMA mode) */ - unsigned xcs_xact:1; - /** Frame List Rollover interrupt */ - unsigned frm_list_roll:1; - /** Reserved */ - unsigned reserved14_31:18; - } b; -} hcint_data_t; - -/** - * This union represents the bit fields in the Host Channel Interrupt Mask - * Register. Read the register into the d32 member then set/clear the - * bits using the bit elements. Write the d32 member to the - * hcintmsk register. - */ -typedef union hcintmsk_data { - /** raw register data */ - uint32_t d32; - - /** register bits */ - struct { - unsigned xfercompl:1; - unsigned chhltd:1; - unsigned ahberr:1; - unsigned stall:1; - unsigned nak:1; - unsigned ack:1; - unsigned nyet:1; - unsigned xacterr:1; - unsigned bblerr:1; - unsigned frmovrun:1; - unsigned datatglerr:1; - unsigned bna:1; - unsigned xcs_xact:1; - unsigned frm_list_roll:1; - unsigned reserved14_31:18; - } b; -} hcintmsk_data_t; - -/** - * This union represents the bit fields in the Host Channel Transfer Size - * Register. Read the register into the d32 member then set/clear the - * bits using the bit elements. Write the d32 member to the - * hcchar register. - */ - -typedef union hctsiz_data { - /** raw register data */ - uint32_t d32; - - /** register bits */ - struct { - /** Total transfer size in bytes */ - unsigned xfersize:19; - - /** Data packets to transfer */ - unsigned pktcnt:10; - - /** - * Packet ID for next data packet - * 0: DATA0 - * 1: DATA2 - * 2: DATA1 - * 3: MDATA (non-Control), SETUP (Control) - */ - unsigned pid:2; -#define DWC_HCTSIZ_DATA0 0 -#define DWC_HCTSIZ_DATA1 2 -#define DWC_HCTSIZ_DATA2 1 -#define DWC_HCTSIZ_MDATA 3 -#define DWC_HCTSIZ_SETUP 3 - - /** Do PING protocol when 1 */ - unsigned dopng:1; - } b; - - /** register bits */ - struct { - /** Scheduling information */ - unsigned schinfo:8; - - /** Number of transfer descriptors. - * Max value: - * 64 in general, - * 256 only for HS isochronous endpoint. - */ - unsigned ntd:8; - - /** Data packets to transfer */ - unsigned reserved16_28:13; - - /** - * Packet ID for next data packet - * 0: DATA0 - * 1: DATA2 - * 2: DATA1 - * 3: MDATA (non-Control) - */ - unsigned pid:2; - - /** Do PING protocol when 1 */ - unsigned dopng:1; - } b_ddma; -} hctsiz_data_t; - -/** - * This union represents the bit fields in the Host DMA Address - * Register used in Descriptor DMA mode. - */ -typedef union hcdma_data { - /** raw register data */ - uint32_t d32; - /** register bits */ - struct { - unsigned reserved0_2:3; - /** Current Transfer Descriptor. Not used for ISOC */ - unsigned ctd:8; - /** Start Address of Descriptor List */ - unsigned dma_addr:21; - } b; -} hcdma_data_t; - -/** - * This union represents the bit fields in the DMA Descriptor - * status quadlet for host mode. Read the quadlet into the d32 member then - * set/clear the bits using the bit elements. - */ -typedef union host_dma_desc_sts { - /** raw register data */ - uint32_t d32; - /** quadlet bits */ - - /* for non-isochronous */ - struct { - /** Number of bytes */ - unsigned n_bytes:17; - /** QTD offset to jump when Short Packet received - only for IN EPs */ - unsigned qtd_offset:6; - /** - * Set to request the core to jump to alternate QTD if - * Short Packet received - only for IN EPs - */ - unsigned a_qtd:1; - /** - * Setup Packet bit. When set indicates that buffer contains - * setup packet. - */ - unsigned sup:1; - /** Interrupt On Complete */ - unsigned ioc:1; - /** End of List */ - unsigned eol:1; - unsigned reserved27:1; - /** Rx/Tx Status */ - unsigned sts:2; -#define DMA_DESC_STS_PKTERR 1 - unsigned reserved30:1; - /** Active Bit */ - unsigned a:1; - } b; - /* for isochronous */ - struct { - /** Number of bytes */ - unsigned n_bytes:12; - unsigned reserved12_24:13; - /** Interrupt On Complete */ - unsigned ioc:1; - unsigned reserved26_27:2; - /** Rx/Tx Status */ - unsigned sts:2; - unsigned reserved30:1; - /** Active Bit */ - unsigned a:1; - } b_isoc; -} host_dma_desc_sts_t; - -#define MAX_DMA_DESC_SIZE 131071 -#define MAX_DMA_DESC_NUM_GENERIC 64 -#define MAX_DMA_DESC_NUM_HS_ISOC 256 -#define MAX_FRLIST_EN_NUM 64 -/** - * Host-mode DMA Descriptor structure - * - * DMA Descriptor structure contains two quadlets: - * Status quadlet and Data buffer pointer. - */ -typedef struct dwc_otg_host_dma_desc { - /** DMA Descriptor status quadlet */ - host_dma_desc_sts_t status; - /** DMA Descriptor data buffer pointer */ - uint32_t buf; -} dwc_otg_host_dma_desc_t; - -/** OTG Host Interface Structure. - * - * The OTG Host Interface Structure structure contains information - * needed to manage the DWC_otg controller acting in host mode. It - * represents the programming view of the host-specific aspects of the - * controller. - */ -typedef struct dwc_otg_host_if { - /** Host Global Registers starting at offset 400h.*/ - dwc_otg_host_global_regs_t *host_global_regs; -#define DWC_OTG_HOST_GLOBAL_REG_OFFSET 0x400 - - /** Host Port 0 Control and Status Register */ - volatile uint32_t *hprt0; -#define DWC_OTG_HOST_PORT_REGS_OFFSET 0x440 - - /** Host Channel Specific Registers at offsets 500h-5FCh. */ - dwc_otg_hc_regs_t *hc_regs[MAX_EPS_CHANNELS]; -#define DWC_OTG_HOST_CHAN_REGS_OFFSET 0x500 -#define DWC_OTG_CHAN_REGS_OFFSET 0x20 - - /* Host configuration information */ - /** Number of Host Channels (range: 1-16) */ - uint8_t num_host_channels; - /** Periodic EPs supported (0: no, 1: yes) */ - uint8_t perio_eps_supported; - /** Periodic Tx FIFO Size (Only 1 host periodic Tx FIFO) */ - uint16_t perio_tx_fifo_size; - -} dwc_otg_host_if_t; - -/** - * This union represents the bit fields in the Power and Clock Gating Control - * Register. Read the register into the d32 member then set/clear the - * bits using the bit elements. - */ -typedef union pcgcctl_data { - /** raw register data */ - uint32_t d32; - - /** register bits */ - struct { - /** Stop Pclk */ - unsigned stoppclk:1; - /** Gate Hclk */ - unsigned gatehclk:1; - /** Power Clamp */ - unsigned pwrclmp:1; - /** Reset Power Down Modules */ - unsigned rstpdwnmodule:1; - /** Reserved */ - unsigned reserved:1; - /** Enable Sleep Clock Gating (Enbl_L1Gating) */ - unsigned enbl_sleep_gating:1; - /** PHY In Sleep (PhySleep) */ - unsigned phy_in_sleep:1; - /** Deep Sleep*/ - unsigned deep_sleep:1; - unsigned resetaftsusp:1; - unsigned restoremode:1; - unsigned enbl_extnd_hiber:1; - unsigned extnd_hiber_pwrclmp:1; - unsigned extnd_hiber_switch:1; - unsigned ess_reg_restored:1; - unsigned prt_clk_sel:2; - unsigned port_power:1; - unsigned max_xcvrselect:2; - unsigned max_termsel:1; - unsigned mac_dev_addr:7; - unsigned p2hd_dev_enum_spd:2; - unsigned p2hd_prt_spd:2; - unsigned if_dev_mode:1; - } b; -} pcgcctl_data_t; - -/** - * This union represents the bit fields in the Global Data FIFO Software - * Configuration Register. Read the register into the d32 member then - * set/clear the bits using the bit elements. - */ -typedef union gdfifocfg_data { - /* raw register data */ - uint32_t d32; - /** register bits */ - struct { - /** OTG Data FIFO depth */ - unsigned gdfifocfg:16; - /** Start address of EP info controller */ - unsigned epinfobase:16; - } b; -} gdfifocfg_data_t; - -/** - * This union represents the bit fields in the Global Power Down Register - * Register. Read the register into the d32 member then set/clear the - * bits using the bit elements. - */ -typedef union gpwrdn_data { - /* raw register data */ - uint32_t d32; - - /** register bits */ - struct { - /** PMU Interrupt Select */ - unsigned pmuintsel:1; - /** PMU Active */ - unsigned pmuactv:1; - /** Restore */ - unsigned restore:1; - /** Power Down Clamp */ - unsigned pwrdnclmp:1; - /** Power Down Reset */ - unsigned pwrdnrstn:1; - /** Power Down Switch */ - unsigned pwrdnswtch:1; - /** Disable VBUS */ - unsigned dis_vbus:1; - /** Line State Change */ - unsigned lnstschng:1; - /** Line state change mask */ - unsigned lnstchng_msk:1; - /** Reset Detected */ - unsigned rst_det:1; - /** Reset Detect mask */ - unsigned rst_det_msk:1; - /** Disconnect Detected */ - unsigned disconn_det:1; - /** Disconnect Detect mask */ - unsigned disconn_det_msk:1; - /** Connect Detected*/ - unsigned connect_det:1; - /** Connect Detected Mask*/ - unsigned connect_det_msk:1; - /** SRP Detected */ - unsigned srp_det:1; - /** SRP Detect mask */ - unsigned srp_det_msk:1; - /** Status Change Interrupt */ - unsigned sts_chngint:1; - /** Status Change Interrupt Mask */ - unsigned sts_chngint_msk:1; - /** Line State */ - unsigned linestate:2; - /** Indicates current mode(status of IDDIG signal) */ - unsigned idsts:1; - /** B Session Valid signal status*/ - unsigned bsessvld:1; - /** ADP Event Detected */ - unsigned adp_int:1; - /** Multi Valued ID pin */ - unsigned mult_val_id_bc:5; - /** Reserved 24_31 */ - unsigned reserved29_31:3; - } b; -} gpwrdn_data_t; - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/errno.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/errno.h deleted file mode 100644 index 2fbccce..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/errno.h +++ /dev/null @@ -1,149 +0,0 @@ -#ifndef _GENERIC_ERRNO_H -#define _GENERIC_ERRNO_H - -#define EPERM 1 /* Operation not permitted */ -#define ENOENT 2 /* No such file or directory */ -#define ESRCH 3 /* No such process */ -#define EINTR 4 /* Interrupted system call */ -#define EIO 5 /* I/O error */ -#define ENXIO 6 /* No such device or address */ -#define E2BIG 7 /* Argument list too long */ -#define ENOEXEC 8 /* Exec format error */ -#define EBADF 9 /* Bad file number */ -#define ECHILD 10 /* No child processes */ -#define EAGAIN 11 /* Try again */ -#define ENOMEM 12 /* Out of memory */ -#define EACCES 13 /* Permission denied */ -#define EFAULT 14 /* Bad address */ -#define ENOTBLK 15 /* Block device required */ -#define EBUSY 16 /* Device or resource busy */ -#define EEXIST 17 /* File exists */ -#define EXDEV 18 /* Cross-device link */ -#define ENODEV 19 /* No such device */ -#define ENOTDIR 20 /* Not a directory */ -#define EISDIR 21 /* Is a directory */ -#define EINVAL 22 /* Invalid argument */ -#define ENFILE 23 /* File table overflow */ -#define EMFILE 24 /* Too many open files */ -#define ENOTTY 25 /* Not a typewriter */ -#define ETXTBSY 26 /* Text file busy */ -#define EFBIG 27 /* File too large */ -#define ENOSPC 28 /* No space left on device */ -#define ESPIPE 29 /* Illegal seek */ -#define EROFS 30 /* Read-only file system */ -#define EMLINK 31 /* Too many links */ -#define EPIPE 32 /* Broken pipe */ -#define EDOM 33 /* Math argument out of domain of func */ -#define ERANGE 34 /* Math result not representable */ - -#define EDEADLK 35 /* Resource deadlock would occur */ -#define ENAMETOOLONG 36 /* File name too long */ -#define ENOLCK 37 /* No record locks available */ -#define ENOSYS 38 /* Function not implemented */ -#define ENOTEMPTY 39 /* Directory not empty */ -#define ELOOP 40 /* Too many symbolic links encountered */ -#define EWOULDBLOCK EAGAIN /* Operation would block */ -#define ENOMSG 42 /* No message of desired type */ -#define EIDRM 43 /* Identifier removed */ -#define ECHRNG 44 /* Channel number out of range */ -#define EL2NSYNC 45 /* Level 2 not synchronized */ -#define EL3HLT 46 /* Level 3 halted */ -#define EL3RST 47 /* Level 3 reset */ -#define ELNRNG 48 /* Link number out of range */ -#define EUNATCH 49 /* Protocol driver not attached */ -#define ENOCSI 50 /* No CSI structure available */ -#define EL2HLT 51 /* Level 2 halted */ -#define EBADE 52 /* Invalid exchange */ -#define EBADR 53 /* Invalid request descriptor */ -#define EXFULL 54 /* Exchange full */ -#define ENOANO 55 /* No anode */ -#define EBADRQC 56 /* Invalid request code */ -#define EBADSLT 57 /* Invalid slot */ - -#define EDEADLOCK EDEADLK - -#define EBFONT 59 /* Bad font file format */ -#define ENOSTR 60 /* Device not a stream */ -#define ENODATA 61 /* No data available */ -#define ETIME 62 /* Timer expired */ -#define ENOSR 63 /* Out of streams resources */ -#define ENONET 64 /* Machine is not on the network */ -#define ENOPKG 65 /* Package not installed */ -#define EREMOTE 66 /* Object is remote */ -#define ENOLINK 67 /* Link has been severed */ -#define EADV 68 /* Advertise error */ -#define ESRMNT 69 /* Srmount error */ -#define ECOMM 70 /* Communication error on send */ -#define EPROTO 71 /* Protocol error */ -#define EMULTIHOP 72 /* Multihop attempted */ -#define EDOTDOT 73 /* RFS specific error */ -#define EBADMSG 74 /* Not a data message */ -#define EOVERFLOW 75 /* Value too large for defined data type */ -#define ENOTUNIQ 76 /* Name not unique on network */ -#define EBADFD 77 /* File descriptor in bad state */ -#define EREMCHG 78 /* Remote address changed */ -#define ELIBACC 79 /* Can not access a needed shared library */ -#define ELIBBAD 80 /* Accessing a corrupted shared library */ -#define ELIBSCN 81 /* .lib section in a.out corrupted */ -#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ -#define ELIBEXEC 83 /* Cannot exec a shared library directly */ -#define EILSEQ 84 /* Illegal byte sequence */ -#define ERESTART 85 /* Interrupted system call should be restarted */ -#define ESTRPIPE 86 /* Streams pipe error */ -#define EUSERS 87 /* Too many users */ -#define ENOTSOCK 88 /* Socket operation on non-socket */ -#define EDESTADDRREQ 89 /* Destination address required */ -#define EMSGSIZE 90 /* Message too long */ -#define EPROTOTYPE 91 /* Protocol wrong type for socket */ -#define ENOPROTOOPT 92 /* Protocol not available */ -#define EPROTONOSUPPORT 93 /* Protocol not supported */ -#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ -#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ -#define EPFNOSUPPORT 96 /* Protocol family not supported */ -#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ -#define EADDRINUSE 98 /* Address already in use */ -#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ -#define ENETDOWN 100 /* Network is down */ -#define ENETUNREACH 101 /* Network is unreachable */ -#define ENETRESET 102 /* Network dropped connection because of reset */ -#define ECONNABORTED 103 /* Software caused connection abort */ -#define ECONNRESET 104 /* Connection reset by peer */ -#define ENOBUFS 105 /* No buffer space available */ -#define EISCONN 106 /* Transport endpoint is already connected */ -#define ENOTCONN 107 /* Transport endpoint is not connected */ -#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ -#define ETOOMANYREFS 109 /* Too many references: cannot splice */ -#define ETIMEDOUT 110 /* Connection timed out */ -#define ECONNREFUSED 111 /* Connection refused */ -#define EHOSTDOWN 112 /* Host is down */ -#define EHOSTUNREACH 113 /* No route to host */ -#define EALREADY 114 /* Operation already in progress */ -#define EINPROGRESS 115 /* Operation now in progress */ -#define ESTALE 116 /* Stale NFS file handle */ -#define EUCLEAN 117 /* Structure needs cleaning */ -#define ENOTNAM 118 /* Not a XENIX named type file */ -#define ENAVAIL 119 /* No XENIX semaphores available */ -#define EISNAM 120 /* Is a named type file */ -#define EREMOTEIO 121 /* Remote I/O error */ -#define EDQUOT 122 /* Quota exceeded */ - -#define ENOMEDIUM 123 /* No medium found */ -#define EMEDIUMTYPE 124 /* Wrong medium type */ -#define ECANCELED 125 /* Operation Canceled */ -#define ENOKEY 126 /* Required key not available */ -#define EKEYEXPIRED 127 /* Key has expired */ -#define EKEYREVOKED 128 /* Key has been revoked */ -#define EKEYREJECTED 129 /* Key was rejected by service */ - -/* for robust mutexes */ -#define EOWNERDEAD 130 /* Owner died */ -#define ENOTRECOVERABLE 131 /* State not recoverable */ - -#define ERFKILL 132 /* Operation not possible due to RF-kill */ - -#define EHWPOISON 133 /* Memory page has hardware error */ - - -#define ENOTSUPP 524 /* Operation is not supported */ - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/hal_otg.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/hal_otg.h deleted file mode 100644 index 5c0f669..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/hal_otg.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _HAL_OTG_H_ -#define _HAL_OTG_H_ - -#include "rtl8195a_otg.h" -#include "dwc_otg_regs.h" - - - - - - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/hcd.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/hcd.h deleted file mode 100644 index d261441..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/hcd.h +++ /dev/null @@ -1,164 +0,0 @@ -#ifndef _HCD_H_ -#define _HCD_H_ - - -struct hc_driver { - const char *description; /* "ehci-hcd" etc */ -const char *product_desc; /* product/vendor string */ -size_t hcd_priv_size; /* size of private data */ - -/* irq handler */ -//irqreturn_t (*irq) (struct usb_hcd *hcd); - -int flags; -#define HCD_MEMORY 0x0001 /* HC regs use memory (else I/O) */ -#define HCD_LOCAL_MEM 0x0002 /* HC needs local memory */ -#define HCD_SHARED 0x0004 /* Two (or more) usb_hcds share HW */ -#define HCD_USB11 0x0010 /* USB 1.1 */ -#define HCD_USB2 0x0020 /* USB 2.0 */ -#define HCD_USB3 0x0040 /* USB 3.0 */ -#define HCD_MASK 0x0070 - - /* called to init HCD and root hub */ - int (*reset) (struct usb_hcd *hcd); - int (*start) (struct usb_hcd *hcd); - - /* NOTE: these suspend/resume calls relate to the HC as - * a whole, not just the root hub; they're for PCI bus glue. - */ - /* called after suspending the hub, before entering D3 etc */ -// int (*pci_suspend)(struct usb_hcd *hcd, bool do_wakeup); - - /* called after entering D0 (etc), before resuming the hub */ -// int (*pci_resume)(struct usb_hcd *hcd, bool hibernated); - - /* cleanly make HCD stop writing memory and doing I/O */ - void (*stop) (struct usb_hcd *hcd); - - /* shutdown HCD */ - // void (*shutdown) (struct usb_hcd *hcd); - - /* return current frame number */ - int (*get_frame_number) (struct usb_hcd *hcd); - - /* manage i/o requests, device state */ - int (*urb_enqueue)(struct usb_hcd *hcd, - struct urb *urb);//, gfp_t mem_flags); - int (*urb_dequeue)(struct usb_hcd *hcd, - struct urb *urb, int status); - - /* - * (optional) these hooks allow an HCD to override the default DMA - * mapping and unmapping routines. In general, they shouldn't be - * necessary unless the host controller has special DMA requirements, - * such as alignment contraints. If these are not specified, the - * general usb_hcd_(un)?map_urb_for_dma functions will be used instead - * (and it may be a good idea to call these functions in your HCD - * implementation) - */ - #if 0 - int (*map_urb_for_dma)(struct usb_hcd *hcd, struct urb *urb, - gfp_t mem_flags); - void (*unmap_urb_for_dma)(struct usb_hcd *hcd, struct urb *urb); - #endif - /* hw synch, freeing endpoint resources that urb_dequeue can't */ - void (*endpoint_disable)(struct usb_hcd *hcd, - struct usb_host_endpoint *ep); - - /* (optional) reset any endpoint state such as sequence number - and current window */ - void (*endpoint_reset)(struct usb_hcd *hcd, - struct usb_host_endpoint *ep); - - /* root hub support */ - int (*hub_status_data) (struct usb_hcd *hcd, char *buf); - int (*hub_control) (struct usb_hcd *hcd, - u16 typeReq, u16 wValue, u16 wIndex, - char *buf, u16 wLength); - #if 0 - int (*bus_suspend)(struct usb_hcd *); - int (*bus_resume)(struct usb_hcd *); - int (*start_port_reset)(struct usb_hcd *, unsigned port_num); - - /* force handover of high-speed port to full-speed companion */ - void (*relinquish_port)(struct usb_hcd *, int); - /* has a port been handed over to a companion? */ - int (*port_handed_over)(struct usb_hcd *, int); - - /* CLEAR_TT_BUFFER completion callback */ - void (*clear_tt_buffer_complete)(struct usb_hcd *, - struct usb_host_endpoint *); - - /* xHCI specific functions */ - /* Called by usb_alloc_dev to alloc HC device structures */ - int (*alloc_dev)(struct usb_hcd *, struct usb_device *); - /* Called by usb_disconnect to free HC device structures */ - void (*free_dev)(struct usb_hcd *, struct usb_device *); - /* Change a group of bulk endpoints to support multiple stream IDs */ - int (*alloc_streams)(struct usb_hcd *hcd, struct usb_device *udev, - struct usb_host_endpoint **eps, unsigned int num_eps, - unsigned int num_streams, gfp_t mem_flags); - /* Reverts a group of bulk endpoints back to not using stream IDs. - * Can fail if we run out of memory. - */ - int (*free_streams)(struct usb_hcd *hcd, struct usb_device *udev, - struct usb_host_endpoint **eps, unsigned int num_eps, - gfp_t mem_flags); - - /* Bandwidth computation functions */ - /* Note that add_endpoint() can only be called once per endpoint before - * check_bandwidth() or reset_bandwidth() must be called. - * drop_endpoint() can only be called once per endpoint also. - * A call to xhci_drop_endpoint() followed by a call to - * xhci_add_endpoint() will add the endpoint to the schedule with - * possibly new parameters denoted by a different endpoint descriptor - * in usb_host_endpoint. A call to xhci_add_endpoint() followed by a - * call to xhci_drop_endpoint() is not allowed. - */ - /* Allocate endpoint resources and add them to a new schedule */ - int (*add_endpoint)(struct usb_hcd *, struct usb_device *, - struct usb_host_endpoint *); - /* Drop an endpoint from a new schedule */ - int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, - struct usb_host_endpoint *); - /* Check that a new hardware configuration, set using - * endpoint_enable and endpoint_disable, does not exceed bus - * bandwidth. This must be called before any set configuration - * or set interface requests are sent to the device. - */ - int (*check_bandwidth)(struct usb_hcd *, struct usb_device *); - /* Reset the device schedule to the last known good schedule, - * which was set from a previous successful call to - * check_bandwidth(). This reverts any add_endpoint() and - * drop_endpoint() calls since that last successful call. - * Used for when a check_bandwidth() call fails due to resource - * or bandwidth constraints. - */ - void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *); - /* Returns the hardware-chosen device address */ - int (*address_device)(struct usb_hcd *, struct usb_device *udev); - /* Notifies the HCD after a hub descriptor is fetched. - * Will block. - */ - int (*update_hub_device)(struct usb_hcd *, struct usb_device *hdev, - struct usb_tt *tt, gfp_t mem_flags); - int (*reset_device)(struct usb_hcd *, struct usb_device *); - /* Notifies the HCD after a device is connected and its - * address is set - */ - int (*update_device)(struct usb_hcd *, struct usb_device *); - int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int); - /* USB 3.0 Link Power Management */ - /* Returns the USB3 hub-encoded value for the U1/U2 timeout. */ - int (*enable_usb3_lpm_timeout)(struct usb_hcd *, - struct usb_device *, enum usb3_link_state state); - /* The xHCI host controller can still fail the command to - * disable the LPM timeouts, so this can return an error code. - */ - int (*disable_usb3_lpm_timeout)(struct usb_hcd *, - struct usb_device *, enum usb3_link_state state); - int (*find_raw_port_number)(struct usb_hcd *, int); - #endif -}; - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/rtl8195a_otg.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/rtl8195a_otg.h deleted file mode 100644 index 2d9c884..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/rtl8195a_otg.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _RTL8195A_OTG_H_ -#define _RTL8195A_OTG_H_ - -#include "rtl8195a.h" -#define OTG_FAST_INIT 1 - -#define HAL_OTG_READ32(addr) HAL_READ32(USB_OTG_REG_BASE, (u32)addr) -#define HAL_OTG_WRITE32(addr, value) HAL_WRITE32(USB_OTG_REG_BASE, (u32)addr, value) - -#define HAL_OTG_MODIFY32(addr, clrmsk, setmsk) HAL_WRITE32(USB_OTG_REG_BASE,(u32)addr,\ - ((HAL_READ32(USB_OTG_REG_BASE, (u32)addr) & (~clrmsk)) | setmsk)) - -#define DWC_READ_REG32(_reg_) HAL_OTG_READ32((u32)_reg_) -#define DWC_WRITE_REG32(_reg_, _val_) HAL_OTG_WRITE32((u32)_reg_,_val_) -#define DWC_MODIFY_REG32(_reg_,_cmsk_,_smsk_) HAL_OTG_MODIFY32((u32)_reg_,_cmsk_,_smsk_) - - -//This part is added for RTK power sequence - -//3 SYS_ON reg - -//#define REG_SYS_FUNC_EN 0x08 -#define BIT_SHIFT_SOC_SYSPEON_EN 4 -#define BIT_MASK_SOC_SYSPEON_EN 0x1 -#define BIT_SOC_SYSPEON_EN_OTG(x)(((x) & BIT_MASK_SOC_SYSPEON_EN) << BIT_SHIFT_SOC_SYSPEON_EN) -#define BIT_INVC_SOC_SYSPEON_EN (~(BIT_MASK_SOC_SYSPEON_EN << BIT_SHIFT_SOC_SYSPEON_EN)) - - -//3 Peri_ON reg -#define REG_OTG_PWCSEQ_OFFSET_OTG 0x40000000 -#define REG_OTG_PWCSEQ_PWC_OTG 0x200 -#define REG_OTG_PWCSEQ_ISO_OTG 0x204 -#define REG_SOC_HCI_COM_FUNC_EN_OTG 0x214 -#define REG_PESOC_HCI_CLK_CTRL0_OTG 0x240 - -//#define REG_PON_ISO_CTRL 0x204 - - -#define REG_OTG_PWCSEQ_IP_OFF 0x30004 //This is in OTG IP -#define REG_OTG_PS_INTR_STS 0x30008 //This is in OTG IP -#define REG_OTG_PS_INTR_MSK 0x3000C //This is in OTG IP - - -//4 REG_OTG_PWCSEQ_PWC -#define BIT_SHIFT_PWC_USBD_EN 0 -#define BIT_MASK_PWC_USBD_EN 0x1 -#define BIT_PWC_USBD_EN(x)(((x) & BIT_MASK_PWC_USBD_EN) << BIT_SHIFT_PWC_USBD_EN) -#define BIT_INVC_PWC_USBD_EN (~(BIT_MASK_PWC_USBD_EN << BIT_SHIFT_PWC_USBD_EN)) - -#define BIT_SHIFT_PWC_UPLV_EN 1 -#define BIT_MASK_PWC_UPLV_EN 0x1 -#define BIT_PWC_UPLV_EN(x)(((x) & BIT_MASK_PWC_UPLV_EN) << BIT_SHIFT_PWC_UPLV_EN) -#define BIT_INVC_PWC_UPLV_EN (~(BIT_MASK_PWC_UPLV_EN << BIT_SHIFT_PWC_UPLV_EN)) - -#define BIT_SHIFT_PWC_UPHV_EN 2 -#define BIT_MASK_PWC_UPHV_EN 0x1 -#define BIT_PWC_UPHV_EN(x)(((x) & BIT_MASK_PWC_UPHV_EN) << BIT_SHIFT_PWC_UPHV_EN) -#define BIT_INVC_PWC_UPHV_EN (~(BIT_MASK_PWC_UPHV_EN << BIT_SHIFT_PWC_UPHV_EN)) - -//4 REG_OTG_PWCSEQ_ISO -#define BIT_SHIFT_ISO_USBD_EN 0 -#define BIT_MASK_ISO_USBD_EN 0x1 -#define BIT_ISO_USBD_EN(x)(((x) & BIT_MASK_ISO_USBD_EN) << BIT_SHIFT_ISO_USBD_EN) -#define BIT_INVC_ISO_USBD_EN (~(BIT_MASK_ISO_USBD_EN << BIT_SHIFT_ISO_USBD_EN)) - -#define BIT_SHIFT_ISO_USBA_EN 1 -#define BIT_MASK_ISO_USBA_EN 0x1 -#define BIT_ISO_USBA_EN(x)(((x) & BIT_MASK_ISO_USBA_EN) << BIT_SHIFT_ISO_USBA_EN) -#define BIT_INVC_ISO_USBA_EN (~(BIT_MASK_ISO_USBA_EN << BIT_SHIFT_ISO_USBA_EN)) - -//4 REG_SOC_HCI_COM_FUNC_EN -#define BIT_SHIFT_SOC_HCI_OTG_EN 4 -#define BIT_MASK_SOC_HCI_OTG_EN 0x1 -#define BIT_SOC_HCI_OTG_EN_OTG(x)(((x) & BIT_MASK_SOC_HCI_OTG_EN) << BIT_SHIFT_SOC_HCI_OTG_EN) -#define BIT_INVC_SOC_HCI_OTG_EN (~(BIT_MASK_SOC_HCI_OTG_EN << BIT_SHIFT_SOC_HCI_OTG_EN)) - -//4 REG_PESOC_HCI_CLK_CTRL0 -#define BIT_SHIFT_SOC_ACTCK_OTG_EN 4 -#define BIT_MASK_SOC_ACTCK_OTG_EN 0x1 -#define BIT_SOC_ACTCK_OTG_EN_OTG(x)(((x) & BIT_MASK_SOC_ACTCK_OTG_EN) << BIT_SHIFT_SOC_ACTCK_OTG_EN) -#define BIT_INVC_SOC_ACTCK_OTG_EN (~(BIT_MASK_SOC_ACTCK_OTG_EN << BIT_SHIFT_SOC_ACTCK_OTG_EN)) - - -//4 REG_OTG_PWCSEQ_OTG -#define BIT_SHIFT_USBOTG_PS_EN 0 -#define BIT_MASK_USBOTG_PS_EN 0x1 -#define BIT_USBOTG_PS_EN(x)(((x) & BIT_MASK_USBOTG_PS_EN) << BIT_SHIFT_USBOTG_PS_EN) -#define BIT_INVC_USBOTG_PS_EN (~(BIT_MASK_USBOTG_PS_EN << BIT_SHIFT_USBOTG_PS_EN)) - -#define BIT_SHIFT_USBOTG_DIS_SUSB 1 -#define BIT_MASK_USBOTG_DIS_SUSB 0x1 -#define BIT_USBOTG_DIS_SUSB(x)(((x) & BIT_MASK_USBOTG_DIS_SUSB) << BIT_SHIFT_USBOTG_DIS_SUSB) -#define BIT_INVC_USBOTG_DIS_SUSB (~(BIT_MASK_USBOTG_DIS_SUSB << BIT_SHIFT_USBOTG_DIS_SUSB)) - -#define BIT_SHIFT_USBOTG_SUSBM 4 -#define BIT_MASK_USBOTG_SUSBM 0x1 -#define BIT_USBOTG_SUSBM(x)(((x) & BIT_MASK_USBOTG_SUSBM) << BIT_SHIFT_USBOTG_SUSBM) -#define BIT_INVC_USBOTG_SUSBM (~(BIT_MASK_USBOTG_SUSBM << BIT_SHIFT_USBOTG_SUSBM)) - -#define BIT_SHIFT_UPLL_CKRDY 5 -#define BIT_MASK_UPLL_CKRDY 0x1 -#define BIT_UPLL_CKRDY(x)(((x) & BIT_MASK_UPLL_CKRDY) << BIT_SHIFT_UPLL_CKRDY) -#define BIT_INVC_UPLL_CKRDY (~(BIT_MASK_UPLL_CKRDY << BIT_SHIFT_UPLL_CKRDY)) - -#define BIT_SHIFT_USB_LS 6 -#define BIT_MASK_USB_LS 0x3 -#define BIT_USB_LS(x)(((x) & BIT_MASK_USB_LS) << BIT_SHIFT_USB_LS) -#define BIT_INVC_USB_LS (~(BIT_MASK_USB_LS << BIT_SHIFT_USB_LS)) - -#define BIT_SHIFT_USBOTG_EN 8 -#define BIT_MASK_USBOTG_EN 0x1 -#define BIT_USBOTG_EN(x)(((x) & BIT_MASK_USBOTG_EN) << BIT_SHIFT_USBOTG_EN) -#define BIT_INVC_USBOTG_EN (~(BIT_MASK_USBOTG_EN << BIT_SHIFT_USBOTG_EN)) - -#define BIT_SHIFT_USBPHY_EN 9 -#define BIT_MASK_USBPHY_EN 0x1 -#define BIT_USBPHY_EN(x)(((x) & BIT_MASK_USBPHY_EN) << BIT_SHIFT_USBPHY_EN) -#define BIT_INVC_USBPHY_EN (~(BIT_MASK_USBPHY_EN << BIT_SHIFT_USBPHY_EN)) - -#define BIT_SHIFT_USB_GT_LS_EN 10 -#define BIT_MASK_USB_GT_LS_EN 0x1 -#define BIT_USB_GT_LS_EN(x)(((x) & BIT_MASK_USB_GT_LS_EN) << BIT_SHIFT_USB_GT_LS_EN) -#define BIT_INVC_USB_GT_LS_EN (~(BIT_MASK_USB_GT_LS_EN << BIT_SHIFT_USB_GT_LS_EN)) - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb.h deleted file mode 100644 index e010a1d..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb.h +++ /dev/null @@ -1,2170 +0,0 @@ -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (lennart@augustsson.net) at - * Carlstedt Research & Technology. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/* Modified by Synopsys, Inc, 12/12/2007 */ - - -#ifndef _USB_H_ -#define _USB_H_ -#include "basic_types.h" -#include "dwc_os.h" -#if defined(DWC_WITH_WLAN_OSDEP) -#include "osdep_service.h" -#else -#include "osdep_api.h" -#include "rtl8195a.h" -#endif -#include "hal_util.h" - -#include "errno.h" -#include "diag.h" -#include "usb_ch9.h" -#include "usb_defs.h" - -#define USB_FAST_HUB_ENUM 1 -/* - * The USB records contain some unaligned little-endian word - * components. The U[SG]ETW macros take care of both the alignment - * and endian problem and should always be used to access non-byte - * values. - */ -typedef u8 uByte; -typedef u8 uWord[2]; -typedef u8 uDWord[4]; - -#define USETW2(w,h,l) ((w)[0] = (u_int8_t)(l), (w)[1] = (u_int8_t)(h)) -#define UCONSTW(x) { (x) & 0xff, ((x) >> 8) & 0xff } -#define UCONSTDW(x) { (x) & 0xff, ((x) >> 8) & 0xff, \ - ((x) >> 16) & 0xff, ((x) >> 24) & 0xff } - -#if 1 -#define UGETW(w) ((w)[0] | ((w)[1] << 8)) -#define USETW(w,v) ((w)[0] = (u_int8_t)(v), (w)[1] = (u_int8_t)((v) >> 8)) -#define UGETDW(w) ((w)[0] | ((w)[1] << 8) | ((w)[2] << 16) | ((w)[3] << 24)) -#define USETDW(w,v) ((w)[0] = (u_int8_t)(v), \ - (w)[1] = (u_int8_t)((v) >> 8), \ - (w)[2] = (u_int8_t)((v) >> 16), \ - (w)[3] = (u_int8_t)((v) >> 24)) -#else -/* - * On little-endian machines that can handle unanliged accesses - * (e.g. i386) these macros can be replaced by the following. - */ -#define UGETW(w) (*(u_int16_t *)(w)) -#define USETW(w,v) (*(u_int16_t *)(w) = (v)) -#define UGETDW(w) (*(u_int32_t *)(w)) -#define USETDW(w,v) (*(u_int32_t *)(w) = (v)) -#endif - -/* - * Macros for accessing UAS IU fields, which are big-endian - */ -#define IUSETW2(w,h,l) ((w)[0] = (u_int8_t)(h), (w)[1] = (u_int8_t)(l)) -#define IUCONSTW(x) { ((x) >> 8) & 0xff, (x) & 0xff } -#define IUCONSTDW(x) { ((x) >> 24) & 0xff, ((x) >> 16) & 0xff, \ - ((x) >> 8) & 0xff, (x) & 0xff } -#define IUGETW(w) (((w)[0] << 8) | (w)[1]) -#define IUSETW(w,v) ((w)[0] = (u_int8_t)((v) >> 8), (w)[1] = (u_int8_t)(v)) -#define IUGETDW(w) (((w)[0] << 24) | ((w)[1] << 16) | ((w)[2] << 8) | (w)[3]) -#define IUSETDW(w,v) ((w)[0] = (u_int8_t)((v) >> 24), \ - (w)[1] = (u_int8_t)((v) >> 16), \ - (w)[2] = (u_int8_t)((v) >> 8), \ - (w)[3] = (u_int8_t)(v)) - -//#define UPACKED __attribute__((__packed__)) -#define UPACKED -typedef struct { - uByte bmRequestType; - uByte bRequest; - uWord wValue; - uWord wIndex; - uWord wLength; -} UPACKED usb_device_request_t; - -#define UT_GET_DIR(a) ((a) & 0x80) -#define UT_WRITE 0x00 -#define UT_READ 0x80 - -#define UT_GET_TYPE(a) ((a) & 0x60) -#define UT_STANDARD 0x00 -#define UT_CLASS 0x20 -#define UT_VENDOR 0x40 - -#define UT_GET_RECIPIENT(a) ((a) & 0x1f) -#define UT_DEVICE 0x00 -#define UT_INTERFACE 0x01 -#define UT_ENDPOINT 0x02 -#define UT_OTHER 0x03 - -#define UT_READ_DEVICE (UT_READ | UT_STANDARD | UT_DEVICE) -#define UT_READ_INTERFACE (UT_READ | UT_STANDARD | UT_INTERFACE) -#define UT_READ_ENDPOINT (UT_READ | UT_STANDARD | UT_ENDPOINT) -#define UT_WRITE_DEVICE (UT_WRITE | UT_STANDARD | UT_DEVICE) -#define UT_WRITE_INTERFACE (UT_WRITE | UT_STANDARD | UT_INTERFACE) -#define UT_WRITE_ENDPOINT (UT_WRITE | UT_STANDARD | UT_ENDPOINT) -#define UT_READ_CLASS_DEVICE (UT_READ | UT_CLASS | UT_DEVICE) -#define UT_READ_CLASS_INTERFACE (UT_READ | UT_CLASS | UT_INTERFACE) -#define UT_READ_CLASS_OTHER (UT_READ | UT_CLASS | UT_OTHER) -#define UT_READ_CLASS_ENDPOINT (UT_READ | UT_CLASS | UT_ENDPOINT) -#define UT_WRITE_CLASS_DEVICE (UT_WRITE | UT_CLASS | UT_DEVICE) -#define UT_WRITE_CLASS_INTERFACE (UT_WRITE | UT_CLASS | UT_INTERFACE) -#define UT_WRITE_CLASS_OTHER (UT_WRITE | UT_CLASS | UT_OTHER) -#define UT_WRITE_CLASS_ENDPOINT (UT_WRITE | UT_CLASS | UT_ENDPOINT) -#define UT_READ_VENDOR_DEVICE (UT_READ | UT_VENDOR | UT_DEVICE) -#define UT_READ_VENDOR_INTERFACE (UT_READ | UT_VENDOR | UT_INTERFACE) -#define UT_READ_VENDOR_OTHER (UT_READ | UT_VENDOR | UT_OTHER) -#define UT_READ_VENDOR_ENDPOINT (UT_READ | UT_VENDOR | UT_ENDPOINT) -#define UT_WRITE_VENDOR_DEVICE (UT_WRITE | UT_VENDOR | UT_DEVICE) -#define UT_WRITE_VENDOR_INTERFACE (UT_WRITE | UT_VENDOR | UT_INTERFACE) -#define UT_WRITE_VENDOR_OTHER (UT_WRITE | UT_VENDOR | UT_OTHER) -#define UT_WRITE_VENDOR_ENDPOINT (UT_WRITE | UT_VENDOR | UT_ENDPOINT) - -/* Requests */ -#define UR_GET_STATUS 0x00 -#define USTAT_STANDARD_STATUS 0x00 -#define WUSTAT_WUSB_FEATURE 0x01 -#define WUSTAT_CHANNEL_INFO 0x02 -#define WUSTAT_RECEIVED_DATA 0x03 -#define WUSTAT_MAS_AVAILABILITY 0x04 -#define WUSTAT_CURRENT_TRANSMIT_POWER 0x05 -#define UR_CLEAR_FEATURE 0x01 -#define UR_SET_FEATURE 0x03 -#define UR_SET_AND_TEST_FEATURE 0x0c -#define UR_SET_ADDRESS 0x05 -#define UR_GET_DESCRIPTOR 0x06 -#define UDESC_DEVICE 0x01 -#define UDESC_CONFIG 0x02 -#define UDESC_STRING 0x03 -#define UDESC_INTERFACE 0x04 -#define UDESC_ENDPOINT 0x05 -#define UDESC_SS_USB_COMPANION 0x30 -#define UDESC_DEVICE_QUALIFIER 0x06 -#define UDESC_OTHER_SPEED_CONFIGURATION 0x07 -#define UDESC_INTERFACE_POWER 0x08 -#define UDESC_OTG 0x09 -#define WUDESC_SECURITY 0x0c -#define WUDESC_KEY 0x0d -#define WUD_GET_KEY_INDEX(_wValue_) ((_wValue_) & 0xf) -#define WUD_GET_KEY_TYPE(_wValue_) (((_wValue_) & 0x30) >> 4) -#define WUD_KEY_TYPE_ASSOC 0x01 -#define WUD_KEY_TYPE_GTK 0x02 -#define WUD_GET_KEY_ORIGIN(_wValue_) (((_wValue_) & 0x40) >> 6) -#define WUD_KEY_ORIGIN_HOST 0x00 -#define WUD_KEY_ORIGIN_DEVICE 0x01 -#define WUDESC_ENCRYPTION_TYPE 0x0e -#define WUDESC_BOS 0x0f -#define WUDESC_DEVICE_CAPABILITY 0x10 -#define WUDESC_WIRELESS_ENDPOINT_COMPANION 0x11 -#define UDESC_BOS 0x0f -#define UDESC_DEVICE_CAPABILITY 0x10 -#define UDESC_CS_DEVICE 0x21 /* class specific */ -#define UDESC_CS_CONFIG 0x22 -#define UDESC_CS_STRING 0x23 -#define UDESC_CS_INTERFACE 0x24 -#define UDESC_CS_ENDPOINT 0x25 -#define UDESC_HUB 0x29 -#define UR_SET_DESCRIPTOR 0x07 -#define UR_GET_CONFIG 0x08 -#define UR_SET_CONFIG 0x09 -#define UR_GET_INTERFACE 0x0a -#define UR_SET_INTERFACE 0x0b -#define UR_SYNCH_FRAME 0x0c -#define WUR_SET_ENCRYPTION 0x0d -#define WUR_GET_ENCRYPTION 0x0e -#define WUR_SET_HANDSHAKE 0x0f -#define WUR_GET_HANDSHAKE 0x10 -#define WUR_SET_CONNECTION 0x11 -#define WUR_SET_SECURITY_DATA 0x12 -#define WUR_GET_SECURITY_DATA 0x13 -#define WUR_SET_WUSB_DATA 0x14 -#define WUDATA_DRPIE_INFO 0x01 -#define WUDATA_TRANSMIT_DATA 0x02 -#define WUDATA_TRANSMIT_PARAMS 0x03 -#define WUDATA_RECEIVE_PARAMS 0x04 -#define WUDATA_TRANSMIT_POWER 0x05 -#define WUR_LOOPBACK_DATA_WRITE 0x15 -#define WUR_LOOPBACK_DATA_READ 0x16 -#define WUR_SET_INTERFACE_DS 0x17 - -/* Feature numbers */ -#define UF_ENDPOINT_HALT 0 -#define UF_DEVICE_REMOTE_WAKEUP 1 -#define UF_TEST_MODE 2 -#define UF_DEVICE_B_HNP_ENABLE 3 -#define UF_DEVICE_A_HNP_SUPPORT 4 -#define UF_DEVICE_A_ALT_HNP_SUPPORT 5 -#define WUF_WUSB 3 -#define WUF_TX_DRPIE 0x0 -#define WUF_DEV_XMIT_PACKET 0x1 -#define WUF_COUNT_PACKETS 0x2 -#define WUF_CAPTURE_PACKETS 0x3 -#define UF_FUNCTION_SUSPEND 0 -#define UF_U1_ENABLE 48 -#define UF_U2_ENABLE 49 -#define UF_LTM_ENABLE 50 - -/* Class requests from the USB 2.0 hub spec, table 11-15 */ -#define UCR_CLEAR_HUB_FEATURE (0x2000 | UR_CLEAR_FEATURE) -#define UCR_CLEAR_PORT_FEATURE (0x2300 | UR_CLEAR_FEATURE) -#define UCR_GET_HUB_DESCRIPTOR (0xa000 | UR_GET_DESCRIPTOR) -#define UCR_GET_HUB_STATUS (0xa000 | UR_GET_STATUS) -#define UCR_GET_PORT_STATUS (0xa300 | UR_GET_STATUS) -#define UCR_SET_HUB_FEATURE (0x2000 | UR_SET_FEATURE) -#define UCR_SET_PORT_FEATURE (0x2300 | UR_SET_FEATURE) -#define UCR_SET_AND_TEST_PORT_FEATURE (0xa300 | UR_SET_AND_TEST_FEATURE) - - - - - - - - -#define USB_MAX_STRING_LEN 128 -#define USB_LANGUAGE_TABLE 0 /* # of the string language id table */ - -/* Hub specific request */ -#define UR_GET_BUS_STATE 0x02 -#define UR_CLEAR_TT_BUFFER 0x08 -#define UR_RESET_TT 0x09 -#define UR_GET_TT_STATE 0x0a -#define UR_STOP_TT 0x0b - -/* Hub features */ -#define UHF_C_HUB_LOCAL_POWER 0 -#define UHF_C_HUB_OVER_CURRENT 1 -#define UHF_PORT_CONNECTION 0 -#define UHF_PORT_ENABLE 1 -#define UHF_PORT_SUSPEND 2 -#define UHF_PORT_OVER_CURRENT 3 -#define UHF_PORT_RESET 4 -#define UHF_PORT_L1 5 -#define UHF_PORT_POWER 8 -#define UHF_PORT_LOW_SPEED 9 -#define UHF_PORT_HIGH_SPEED 10 -#define UHF_C_PORT_CONNECTION 16 -#define UHF_C_PORT_ENABLE 17 -#define UHF_C_PORT_SUSPEND 18 -#define UHF_C_PORT_OVER_CURRENT 19 -#define UHF_C_PORT_RESET 20 -#define UHF_C_PORT_L1 23 -#define UHF_PORT_TEST 21 -#define UHF_PORT_INDICATOR 22 - - - - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uWord bcdUSB; - uByte bDeviceClass; - uByte bDeviceSubClass; - uByte bDeviceProtocol; - uByte bMaxPacketSize0; - uByte bNumConfigurations; - uByte bReserved; -} UPACKED usb_device_qualifier_t; -#define USB_DEVICE_QUALIFIER_SIZE 10 - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uByte bmAttributes; -#define UOTG_SRP 0x01 -#define UOTG_HNP 0x02 -} UPACKED usb_otg_descriptor_t; - -/* OTG feature selectors */ -#define UOTG_B_HNP_ENABLE 3 -#define UOTG_A_HNP_SUPPORT 4 -#define UOTG_A_ALT_HNP_SUPPORT 5 - -typedef struct { - uWord wStatus; -/* Device status flags */ -#define UDS_SELF_POWERED 0x0001 -#define UDS_REMOTE_WAKEUP 0x0002 -/* Endpoint status flags */ -#define UES_HALT 0x0001 -} UPACKED usb_status_t; - -typedef struct { - uWord wHubStatus; -#define UHS_LOCAL_POWER 0x0001 -#define UHS_OVER_CURRENT 0x0002 - uWord wHubChange; -} UPACKED usb_hub_status_t; - -typedef struct { - uWord wPortStatus; -#define UPS_CURRENT_CONNECT_STATUS 0x0001 -#define UPS_PORT_ENABLED 0x0002 -#define UPS_SUSPEND 0x0004 -#define UPS_OVERCURRENT_INDICATOR 0x0008 -#define UPS_RESET 0x0010 -#define UPS_PORT_POWER 0x0100 -#define UPS_LOW_SPEED 0x0200 -#define UPS_HIGH_SPEED 0x0400 -#define UPS_PORT_TEST 0x0800 -#define UPS_PORT_INDICATOR 0x1000 - uWord wPortChange; -#define UPS_C_CONNECT_STATUS 0x0001 -#define UPS_C_PORT_ENABLED 0x0002 -#define UPS_C_SUSPEND 0x0004 -#define UPS_C_OVERCURRENT_INDICATOR 0x0008 -#define UPS_C_PORT_RESET 0x0010 -} UPACKED usb_port_status_t; - - -/* Device class codes */ -#define UDCLASS_IN_INTERFACE 0x00 -#define UDCLASS_COMM 0x02 -#define UDCLASS_HUB 0x09 -#define UDSUBCLASS_HUB 0x00 -#define UDPROTO_FSHUB 0x00 -#define UDPROTO_HSHUBSTT 0x01 -#define UDPROTO_HSHUBMTT 0x02 -#define UDCLASS_DIAGNOSTIC 0xdc -#define UDCLASS_WIRELESS 0xe0 -#define UDSUBCLASS_RF 0x01 -#define UDPROTO_BLUETOOTH 0x01 -#define UDCLASS_VENDOR 0xff - -/* Interface class codes */ -#define UICLASS_UNSPEC 0x00 - -#define UICLASS_AUDIO 0x01 -#define UISUBCLASS_AUDIOCONTROL 1 -#define UISUBCLASS_AUDIOSTREAM 2 -#define UISUBCLASS_MIDISTREAM 3 - -#define UICLASS_CDC 0x02 /* communication */ -#define UISUBCLASS_DIRECT_LINE_CONTROL_MODEL 1 -#define UISUBCLASS_ABSTRACT_CONTROL_MODEL 2 -#define UISUBCLASS_TELEPHONE_CONTROL_MODEL 3 -#define UISUBCLASS_MULTICHANNEL_CONTROL_MODEL 4 -#define UISUBCLASS_CAPI_CONTROLMODEL 5 -#define UISUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL 6 -#define UISUBCLASS_ATM_NETWORKING_CONTROL_MODEL 7 -#define UIPROTO_CDC_AT 1 - -#define UICLASS_HID 0x03 -#define UISUBCLASS_BOOT 1 -#define UIPROTO_BOOT_KEYBOARD 1 - -#define UICLASS_PHYSICAL 0x05 - -#define UICLASS_IMAGE 0x06 - -#define UICLASS_PRINTER 0x07 -#define UISUBCLASS_PRINTER 1 -#define UIPROTO_PRINTER_UNI 1 -#define UIPROTO_PRINTER_BI 2 -#define UIPROTO_PRINTER_1284 3 - -#define UICLASS_MASS 0x08 -#define UISUBCLASS_RBC 1 -#define UISUBCLASS_SFF8020I 2 -#define UISUBCLASS_QIC157 3 -#define UISUBCLASS_UFI 4 -#define UISUBCLASS_SFF8070I 5 -#define UISUBCLASS_SCSI 6 -#define UIPROTO_MASS_CBI_I 0 -#define UIPROTO_MASS_CBI 1 -#define UIPROTO_MASS_BBB_OLD 2 /* Not in the spec anymore */ -#define UIPROTO_MASS_BBB 80 /* 'P' for the Iomega Zip drive */ - -#define UICLASS_HUB 0x09 -#define UISUBCLASS_HUB 0 -#define UIPROTO_FSHUB 0 -#define UIPROTO_HSHUBSTT 0 /* Yes, same as previous */ -#define UIPROTO_HSHUBMTT 1 - -#define UICLASS_CDC_DATA 0x0a -#define UISUBCLASS_DATA 0 -#define UIPROTO_DATA_ISDNBRI 0x30 /* Physical iface */ -#define UIPROTO_DATA_HDLC 0x31 /* HDLC */ -#define UIPROTO_DATA_TRANSPARENT 0x32 /* Transparent */ -#define UIPROTO_DATA_Q921M 0x50 /* Management for Q921 */ -#define UIPROTO_DATA_Q921 0x51 /* Data for Q921 */ -#define UIPROTO_DATA_Q921TM 0x52 /* TEI multiplexer for Q921 */ -#define UIPROTO_DATA_V42BIS 0x90 /* Data compression */ -#define UIPROTO_DATA_Q931 0x91 /* Euro-ISDN */ -#define UIPROTO_DATA_V120 0x92 /* V.24 rate adaption */ -#define UIPROTO_DATA_CAPI 0x93 /* CAPI 2.0 commands */ -#define UIPROTO_DATA_HOST_BASED 0xfd /* Host based driver */ -#define UIPROTO_DATA_PUF 0xfe /* see Prot. Unit Func. Desc.*/ -#define UIPROTO_DATA_VENDOR 0xff /* Vendor specific */ - -#define UICLASS_SMARTCARD 0x0b - -/*#define UICLASS_FIRM_UPD 0x0c*/ - -#define UICLASS_SECURITY 0x0d - -#define UICLASS_DIAGNOSTIC 0xdc - -#define UICLASS_WIRELESS 0xe0 -#define UISUBCLASS_RF 0x01 -#define UIPROTO_BLUETOOTH 0x01 - -#define UICLASS_APPL_SPEC 0xfe -#define UISUBCLASS_FIRMWARE_DOWNLOAD 1 -#define UISUBCLASS_IRDA 2 -#define UIPROTO_IRDA 0 - -#define UICLASS_VENDOR 0xff - -#define USB_HUB_MAX_DEPTH 5 - -/* - * Minimum time a device needs to be powered down to go through - * a power cycle. XXX Are these time in the spec? - */ -#define USB_POWER_DOWN_TIME 200 /* ms */ -#define USB_PORT_POWER_DOWN_TIME 100 /* ms */ - -#if 0 -/* These are the values from the spec. */ -#define USB_PORT_RESET_DELAY 10 /* ms */ -#define USB_PORT_ROOT_RESET_DELAY 50 /* ms */ -#define USB_PORT_RESET_RECOVERY 10 /* ms */ -#define USB_PORT_POWERUP_DELAY 100 /* ms */ -#define USB_SET_ADDRESS_SETTLE 2 /* ms */ -#define USB_RESUME_DELAY (20*5) /* ms */ -#define USB_RESUME_WAIT 10 /* ms */ -#define USB_RESUME_RECOVERY 10 /* ms */ -#define USB_EXTRA_POWER_UP_TIME 0 /* ms */ -#else -/* Allow for marginal (i.e. non-conforming) devices. */ -#define USB_PORT_RESET_DELAY 50 /* ms */ -#define USB_PORT_ROOT_RESET_DELAY 250 /* ms */ -#define USB_PORT_RESET_RECOVERY 250 /* ms */ -#define USB_PORT_POWERUP_DELAY 300 /* ms */ -#define USB_SET_ADDRESS_SETTLE 10 /* ms */ -#define USB_RESUME_DELAY (50*5) /* ms */ -#define USB_RESUME_WAIT 50 /* ms */ -#define USB_RESUME_RECOVERY 50 /* ms */ -#define USB_EXTRA_POWER_UP_TIME 20 /* ms */ -#endif - -#define USB_MIN_POWER 100 /* mA */ -#define USB_MAX_POWER 500 /* mA */ - -#define USB_BUS_RESET_DELAY 100 /* ms XXX?*/ - -#define USB_UNCONFIG_NO 0 -#define USB_UNCONFIG_INDEX (-1) - -/*** ioctl() related stuff ***/ - -struct usb_ctl_request { - int ucr_addr; - usb_device_request_t ucr_request; - void *ucr_data; - int ucr_flags; -#define USBD_SHORT_XFER_OK 0x04 /* allow short reads */ - int ucr_actlen; /* actual length transferred */ -}; - -struct usb_alt_interface { - int uai_config_index; - int uai_interface_index; - int uai_alt_no; -}; - -#define USB_CURRENT_CONFIG_INDEX (-1) -#define USB_CURRENT_ALT_INDEX (-1) - - - -struct usb_full_desc { - int ufd_config_index; - u16 ufd_size; - u8 *ufd_data; -}; - - -struct usb_ctl_report_desc { - int ucrd_size; - u8 ucrd_data[1024]; /* filled data size will vary */ -}; - -typedef struct { u32 cookie; } usb_event_cookie_t; - -#define USB_MAX_DEVNAMES 4 -#define USB_MAX_DEVNAMELEN 16 -struct usb_device_info { - u8 udi_bus; - u8 udi_addr; /* device address */ - usb_event_cookie_t udi_cookie; - char udi_product[USB_MAX_STRING_LEN]; - char udi_vendor[USB_MAX_STRING_LEN]; - char udi_release[8]; - u16 udi_productNo; - u16 udi_vendorNo; - u16 udi_releaseNo; - u8 udi_class; - u8 udi_subclass; - u8 udi_protocol; - u8 udi_config; - u8 udi_speed; -#if 0 -#define USB_SPEED_UNKNOWN 0 -#define USB_SPEED_LOW 1 -#define USB_SPEED_FULL 2 -#define USB_SPEED_HIGH 3 -#define USB_SPEED_VARIABLE 4 -#define USB_SPEED_SUPER 5 -#endif - int udi_power; /* power consumption in mA, 0 if selfpowered */ - int udi_nports; - char udi_devnames[USB_MAX_DEVNAMES][USB_MAX_DEVNAMELEN]; - u8 udi_ports[16];/* hub only: addresses of devices on ports */ -#define USB_PORT_ENABLED 0xff -#define USB_PORT_SUSPENDED 0xfe -#define USB_PORT_POWERED 0xfd -#define USB_PORT_DISABLED 0xfc -}; - -struct usb_ctl_report { - int ucr_report; - u8 ucr_data[1024]; /* filled data size will vary */ -}; - -struct usb_device_stats { - u32 uds_requests[4]; /* indexed by transfer type UE_* */ -}; - -#define WUSB_MIN_IE 0x80 -#define WUSB_WCTA_IE 0x80 -#define WUSB_WCONNECTACK_IE 0x81 -#define WUSB_WHOSTINFO_IE 0x82 -#define WUHI_GET_CA(_bmAttributes_) ((_bmAttributes_) & 0x3) -#define WUHI_CA_RECONN 0x00 -#define WUHI_CA_LIMITED 0x01 -#define WUHI_CA_ALL 0x03 -#define WUHI_GET_MLSI(_bmAttributes_) (((_bmAttributes_) & 0x38) >> 3) -#define WUSB_WCHCHANGEANNOUNCE_IE 0x83 -#define WUSB_WDEV_DISCONNECT_IE 0x84 -#define WUSB_WHOST_DISCONNECT_IE 0x85 -#define WUSB_WRELEASE_CHANNEL_IE 0x86 -#define WUSB_WWORK_IE 0x87 -#define WUSB_WCHANNEL_STOP_IE 0x88 -#define WUSB_WDEV_KEEPALIVE_IE 0x89 -#define WUSB_WISOCH_DISCARD_IE 0x8A -#define WUSB_WRESETDEVICE_IE 0x8B -#define WUSB_WXMIT_PACKET_ADJUST_IE 0x8C -#define WUSB_MAX_IE 0x8C - -/* Device Notification Types */ - -#define WUSB_DN_MIN 0x01 -#define WUSB_DN_CONNECT 0x01 -# define WUSB_DA_OLDCONN 0x00 -# define WUSB_DA_NEWCONN 0x01 -# define WUSB_DA_SELF_BEACON 0x02 -# define WUSB_DA_DIR_BEACON 0x04 -# define WUSB_DA_NO_BEACON 0x06 -#define WUSB_DN_DISCONNECT 0x02 -#define WUSB_DN_EPRDY 0x03 -#define WUSB_DN_MASAVAILCHANGED 0x04 -#define WUSB_DN_REMOTEWAKEUP 0x05 -#define WUSB_DN_SLEEP 0x06 -#define WUSB_DN_ALIVE 0x07 -#define WUSB_DN_MAX 0x07 - - -/* WUSB Handshake Data. Used during the SET/GET HANDSHAKE requests */ -typedef struct wusb_hndshk_data { - uByte bMessageNumber; - uByte bStatus; - uByte tTKID[3]; - uByte bReserved; - uByte CDID[16]; - uByte Nonce[16]; - uByte MIC[8]; -} UPACKED wusb_hndshk_data_t; -#define WUSB_HANDSHAKE_LEN_FOR_MIC 38 - -/* WUSB Connection Context */ -typedef struct wusb_conn_context { - uByte CHID [16]; - uByte CDID [16]; - uByte CK [16]; -} UPACKED wusb_conn_context_t; - -/* WUSB Security Descriptor */ -typedef struct wusb_security_desc { - uByte bLength; - uByte bDescriptorType; - uWord wTotalLength; - uByte bNumEncryptionTypes; -} UPACKED wusb_security_desc_t; - -/* WUSB Encryption Type Descriptor */ -typedef struct wusb_encrypt_type_desc { - uByte bLength; - uByte bDescriptorType; - - uByte bEncryptionType; -#define WUETD_UNSECURE 0 -#define WUETD_WIRED 1 -#define WUETD_CCM_1 2 -#define WUETD_RSA_1 3 - - uByte bEncryptionValue; - uByte bAuthKeyIndex; -} UPACKED wusb_encrypt_type_desc_t; - -/* WUSB Key Descriptor */ -typedef struct wusb_key_desc { - uByte bLength; - uByte bDescriptorType; - uByte tTKID[3]; - uByte bReserved; - uByte KeyData[1]; /* variable length */ -} UPACKED wusb_key_desc_t; - -/* WUSB BOS Descriptor (Binary device Object Store) */ -typedef struct wusb_bos_desc { - uByte bLength; - uByte bDescriptorType; - uWord wTotalLength; - uByte bNumDeviceCaps; -} UPACKED wusb_bos_desc_t; - -#define USB_DEVICE_CAPABILITY_20_EXTENSION 0x02 -typedef struct usb_dev_cap_20_ext_desc { - uByte bLength; - uByte bDescriptorType; - uByte bDevCapabilityType; -#define USB_20_EXT_LPM 0x02 - uDWord bmAttributes; -} UPACKED usb_dev_cap_20_ext_desc_t; - -#define USB_DEVICE_CAPABILITY_SS_USB 0x03 -typedef struct usb_dev_cap_ss_usb { - uByte bLength; - uByte bDescriptorType; - uByte bDevCapabilityType; -#define USB_DC_SS_USB_LTM_CAPABLE 0x02 - uByte bmAttributes; -#define USB_DC_SS_USB_SPEED_SUPPORT_LOW 0x01 -#define USB_DC_SS_USB_SPEED_SUPPORT_FULL 0x02 -#define USB_DC_SS_USB_SPEED_SUPPORT_HIGH 0x04 -#define USB_DC_SS_USB_SPEED_SUPPORT_SS 0x08 - uWord wSpeedsSupported; - uByte bFunctionalitySupport; - uByte bU1DevExitLat; - uWord wU2DevExitLat; -} UPACKED usb_dev_cap_ss_usb_t; - -#define USB_DEVICE_CAPABILITY_CONTAINER_ID 0x04 -typedef struct usb_dev_cap_container_id { - uByte bLength; - uByte bDescriptorType; - uByte bDevCapabilityType; - uByte bReserved; - uByte containerID[16]; -} UPACKED usb_dev_cap_container_id_t; - -/* Device Capability Type Codes */ -#define WUSB_DEVICE_CAPABILITY_WIRELESS_USB 0x01 - -/* Device Capability Descriptor */ -typedef struct wusb_dev_cap_desc { - uByte bLength; - uByte bDescriptorType; - uByte bDevCapabilityType; - uByte caps[1]; /* Variable length */ -} UPACKED wusb_dev_cap_desc_t; - -/* Device Capability Descriptor */ -typedef struct wusb_dev_cap_uwb_desc { - uByte bLength; - uByte bDescriptorType; - uByte bDevCapabilityType; - uByte bmAttributes; - uWord wPHYRates; /* Bitmap */ - uByte bmTFITXPowerInfo; - uByte bmFFITXPowerInfo; - uWord bmBandGroup; - uByte bReserved; -} UPACKED wusb_dev_cap_uwb_desc_t; - -/* Wireless USB Endpoint Companion Descriptor */ -typedef struct wusb_endpoint_companion_desc { - uByte bLength; - uByte bDescriptorType; - uByte bMaxBurst; - uByte bMaxSequence; - uWord wMaxStreamDelay; - uWord wOverTheAirPacketSize; - uByte bOverTheAirInterval; - uByte bmCompAttributes; -} UPACKED wusb_endpoint_companion_desc_t; - -/* Wireless USB Numeric Association M1 Data Structure */ -typedef struct wusb_m1_data { - uByte version; - uWord langId; - uByte deviceFriendlyNameLength; - uByte sha_256_m3[32]; - uByte deviceFriendlyName[256]; -} UPACKED wusb_m1_data_t; - -typedef struct wusb_m2_data { - uByte version; - uWord langId; - uByte hostFriendlyNameLength; - uByte pkh[384]; - uByte hostFriendlyName[256]; -} UPACKED wusb_m2_data_t; - -typedef struct wusb_m3_data { - uByte pkd[384]; - uByte nd; -} UPACKED wusb_m3_data_t; - -typedef struct wusb_m4_data { - uDWord _attributeTypeIdAndLength_1; - uWord associationTypeId; - - uDWord _attributeTypeIdAndLength_2; - uWord associationSubTypeId; - - uDWord _attributeTypeIdAndLength_3; - uDWord length; - - uDWord _attributeTypeIdAndLength_4; - uDWord associationStatus; - - uDWord _attributeTypeIdAndLength_5; - uByte chid[16]; - - uDWord _attributeTypeIdAndLength_6; - uByte cdid[16]; - - uDWord _attributeTypeIdAndLength_7; - uByte bandGroups[2]; -} UPACKED wusb_m4_data_t; - - - -/* Original Host */ -/* USB directions */ -#define USB_DIR_OUT 0 -#define USB_DIR_IN 0x80 - -/* Endpoints */ -#define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */ -#define USB_ENDPOINT_DIR_MASK 0x80 - -#define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */ -#define USB_ENDPOINT_XFER_CONTROL 0 -#define USB_ENDPOINT_XFER_ISOC 1 -#define USB_ENDPOINT_XFER_BULK 2 -#define USB_ENDPOINT_XFER_INT 3 - -#define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */ - - - - - -#if 1 -#define UGETW(w) ((w)[0] | ((w)[1] << 8)) -#define USETW(w,v) ((w)[0] = (u_int8_t)(v), (w)[1] = (u_int8_t)((v) >> 8)) -#define UGETDW(w) ((w)[0] | ((w)[1] << 8) | ((w)[2] << 16) | ((w)[3] << 24)) -#define USETDW(w,v) ((w)[0] = (u_int8_t)(v), \ - (w)[1] = (u_int8_t)((v) >> 8), \ - (w)[2] = (u_int8_t)((v) >> 16), \ - (w)[3] = (u_int8_t)((v) >> 24)) -#else -/* - * On little-endian machines that can handle unanliged accesses - * (e.g. i386) these macros can be replaced by the following. - */ -#define UGETW(w) (*(u_int16_t *)(w)) -#define USETW(w,v) (*(u_int16_t *)(w) = (v)) -#define UGETDW(w) (*(u_int32_t *)(w)) -#define USETDW(w,v) (*(u_int32_t *)(w) = (v)) -#endif - -//#define UPACKED __attribute__((__packed__)) - - - - - - -/* Everything is aribtrary */ -#define USB_ALTSETTINGALLOC 4 -#define USB_MAXALTSETTING 128 /* Hard limit */ - -#define USB_MAX_DEVICE 3 // at least 2: 1 for the root hub device, 1 for usb device -#define USB_MAXCONFIG 8 -#define USB_MAXINTERFACES 8 -#define USB_MAXENDPOINTS 16 -#define USB_MAXCHILDREN 8 /* This is arbitrary */ -#define USB_MAX_HUB 2 - -#define USB_MAXIADS (USB_MAXINTERFACES/2) - -#define USB_CNTL_TIMEOUT 5000 /* 100ms timeout */ - - - - -/* Requests */ -#define UR_GET_STATUS 0x00 -#define USTAT_STANDARD_STATUS 0x00 -#define WUSTAT_WUSB_FEATURE 0x01 -#define WUSTAT_CHANNEL_INFO 0x02 -#define WUSTAT_RECEIVED_DATA 0x03 -#define WUSTAT_MAS_AVAILABILITY 0x04 -#define WUSTAT_CURRENT_TRANSMIT_POWER 0x05 -#define UR_CLEAR_FEATURE 0x01 -#define UR_SET_FEATURE 0x03 -#define UR_SET_AND_TEST_FEATURE 0x0c -#define UR_SET_ADDRESS 0x05 -#define UR_GET_DESCRIPTOR 0x06 -#define UDESC_DEVICE 0x01 -#define UDESC_CONFIG 0x02 -#define UDESC_STRING 0x03 -#define UDESC_INTERFACE 0x04 -#define UDESC_ENDPOINT 0x05 -#define UDESC_SS_USB_COMPANION 0x30 -#define UDESC_DEVICE_QUALIFIER 0x06 -#define UDESC_OTHER_SPEED_CONFIGURATION 0x07 -#define UDESC_INTERFACE_POWER 0x08 -#define UDESC_OTG 0x09 -#define WUDESC_SECURITY 0x0c -#define WUDESC_KEY 0x0d -#define WUD_GET_KEY_INDEX(_wValue_) ((_wValue_) & 0xf) -#define WUD_GET_KEY_TYPE(_wValue_) (((_wValue_) & 0x30) >> 4) -#define WUD_KEY_TYPE_ASSOC 0x01 -#define WUD_KEY_TYPE_GTK 0x02 -#define WUD_GET_KEY_ORIGIN(_wValue_) (((_wValue_) & 0x40) >> 6) -#define WUD_KEY_ORIGIN_HOST 0x00 -#define WUD_KEY_ORIGIN_DEVICE 0x01 -#define WUDESC_ENCRYPTION_TYPE 0x0e -#define WUDESC_BOS 0x0f -#define WUDESC_DEVICE_CAPABILITY 0x10 -#define WUDESC_WIRELESS_ENDPOINT_COMPANION 0x11 -#define UDESC_BOS 0x0f -#define UDESC_DEVICE_CAPABILITY 0x10 -#define UDESC_CS_DEVICE 0x21 /* class specific */ -#define UDESC_CS_CONFIG 0x22 -#define UDESC_CS_STRING 0x23 -#define UDESC_CS_INTERFACE 0x24 -#define UDESC_CS_ENDPOINT 0x25 -#define UDESC_HUB 0x29 -#define UR_SET_DESCRIPTOR 0x07 -#define UR_GET_CONFIG 0x08 -#define UR_SET_CONFIG 0x09 -#define UR_GET_INTERFACE 0x0a -#define UR_SET_INTERFACE 0x0b -#define UR_SYNCH_FRAME 0x0c -#define WUR_SET_ENCRYPTION 0x0d -#define WUR_GET_ENCRYPTION 0x0e -#define WUR_SET_HANDSHAKE 0x0f -#define WUR_GET_HANDSHAKE 0x10 -#define WUR_SET_CONNECTION 0x11 -#define WUR_SET_SECURITY_DATA 0x12 -#define WUR_GET_SECURITY_DATA 0x13 -#define WUR_SET_WUSB_DATA 0x14 -#define WUDATA_DRPIE_INFO 0x01 -#define WUDATA_TRANSMIT_DATA 0x02 -#define WUDATA_TRANSMIT_PARAMS 0x03 -#define WUDATA_RECEIVE_PARAMS 0x04 -#define WUDATA_TRANSMIT_POWER 0x05 -#define WUR_LOOPBACK_DATA_WRITE 0x15 -#define WUR_LOOPBACK_DATA_READ 0x16 -#define WUR_SET_INTERFACE_DS 0x17 - - -/* Hub features */ -#define UHF_C_HUB_LOCAL_POWER 0 -#define UHF_C_HUB_OVER_CURRENT 1 -#define UHF_PORT_CONNECTION 0 -#define UHF_PORT_ENABLE 1 -#define UHF_PORT_SUSPEND 2 -#define UHF_PORT_OVER_CURRENT 3 -#define UHF_PORT_RESET 4 -#define UHF_PORT_L1 5 -#define UHF_PORT_POWER 8 -#define UHF_PORT_LOW_SPEED 9 -#define UHF_PORT_HIGH_SPEED 10 -#define UHF_C_PORT_CONNECTION 16 -#define UHF_C_PORT_ENABLE 17 -#define UHF_C_PORT_SUSPEND 18 -#define UHF_C_PORT_OVER_CURRENT 19 -#define UHF_C_PORT_RESET 20 -#define UHF_C_PORT_L1 23 -#define UHF_PORT_TEST 21 -#define UHF_PORT_INDICATOR 22 - - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uByte bDescriptorSubtype; -} UPACKED usb_descriptor_t; - -typedef struct { - uByte bLength; - uByte bDescriptorType; -} UPACKED usb_descriptor_header_t; - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uWord bcdUSB; -#define UD_USB_2_0 0x0200 -#define UD_IS_USB2(d) (UGETW((d)->bcdUSB) >= UD_USB_2_0) - uByte bDeviceClass; - uByte bDeviceSubClass; - uByte bDeviceProtocol; - uByte bMaxPacketSize; - /* The fields below are not part of the initial descriptor. */ - uWord idVendor; - uWord idProduct; - uWord bcdDevice; - uByte iManufacturer; - uByte iProduct; - uByte iSerialNumber; - uByte bNumConfigurations; -} UPACKED usb_device_descriptor_t; - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uWord wTotalLength; - uByte bNumInterface; - uByte bConfigurationValue; - uByte iConfiguration; -#define UC_ATT_ONE (1 << 7) /* must be set */ -#define UC_ATT_SELFPOWER (1 << 6) /* self powered */ -#define UC_ATT_WAKEUP (1 << 5) /* can wakeup */ -#define UC_ATT_BATTERY (1 << 4) /* battery powered */ - uByte bmAttributes; -#define UC_BUS_POWERED 0x80 -#define UC_SELF_POWERED 0x40 -#define UC_REMOTE_WAKEUP 0x20 - uByte bMaxPower; /* max current in 2 mA units */ -#define UC_POWER_FACTOR 2 -} UPACKED usb_config_descriptor_t; -#define USB_CONFIG_DESCRIPTOR_SIZE 9 - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uByte bInterfaceNumber; - uByte bAlternateSetting; - uByte bNumEndpoints; - uByte bInterfaceClass; - uByte bInterfaceSubClass; - uByte bInterfaceProtocol; - uByte iInterface; -} UPACKED usb_interface_descriptor_t; -#define USB_INTERFACE_DESCRIPTOR_SIZE 9 - - - -/* String descriptor */ - - -/* device request (setup) */ -struct devrequest { - unsigned char requesttype; - unsigned char request; - unsigned short value; - unsigned short index; - unsigned short length; -} UPACKED; - -/* All standard descriptors have these 2 fields in common */ - - -/* Device descriptor */ - - -/* Endpoint descriptor */ - - -/* Interface descriptor */ - - -/* Configuration descriptor information.. */ - - -/* USB_DT_INTERFACE_ASSOCIATION: groups interfaces */ - -enum { - /* Maximum packet size; encoded as 0,1,2,3 = 8,16,32,64 */ - PACKET_SIZE_8 = 0, - PACKET_SIZE_16 = 1, - PACKET_SIZE_32 = 2, - PACKET_SIZE_64 = 3, -}; - - - - -struct usb_host_endpoint { - struct usb_endpoint_descriptor desc; -#if defined(DWC_WITH_WLAN_OSDEP) - _list urb_list; -#else - _LIST urb_list; -#endif - void *hcpriv; - unsigned char *extra; /* Extra descriptors */ - int extralen; - int enabled; -}; - -/* host-side wrapper for one interface setting's parsed descriptors */ -struct usb_host_interface { - struct usb_interface_descriptor desc; - - int extralen; - unsigned char *extra; /* Extra descriptors */ - - /* array of desc.bNumEndpoint endpoints associated with this - * interface setting. these will be in no particular order. - */ - struct usb_host_endpoint *endpoint; - - char *string; /* iInterface string, if present */ -}; - -struct usb_interface { - /* array of alternate settings for this interface, - * stored in no particular order */ - struct usb_host_interface *altsetting; - - struct usb_host_interface *cur_altsetting; /* the currently - * active alternate setting */ - unsigned num_altsetting; /* number of alternate settings */ - - /* If there is an interface association descriptor then it will list - * the associated interfaces */ - struct usb_interface_assoc_descriptor *intf_assoc; - -// int minor; /* minor number this interface is -// * bound to */ - unsigned ep_devs_created:1; /* endpoint "devices" exist */ - unsigned unregistering:1; /* unregistration is in progress */ - unsigned needs_altsetting0:1; /* switch to altsetting 0 is pending */ - unsigned reset_running:1; - unsigned resetting_device:1; /* true: bandwidth alloc after reset */ - - void *dev_prive_data;/* interface specific device info i.e struct v4l2_device pointer */ - - void *driver; - void *drv_priv; // functional driver priv data - void *usb_dev; -}; -#define to_usb_interface(d) container_of(d, struct usb_interface, usb_dev) - -struct usb_interface_cache { - unsigned num_altsetting; /* number of alternate settings */ - - /* variable-length array of alternate settings for this interface, - * stored in no particular order */ - struct usb_host_interface altsetting[0]; -}; - -struct usb_host_config { - struct usb_config_descriptor desc; - - char *string; /* iConfiguration string, if present */ - - /* List of any Interface Association Descriptors in this - * configuration. */ - struct usb_interface_assoc_descriptor *intf_assoc[USB_MAXIADS]; - - /* the interfaces associated with this configuration, - * stored in no particular order */ - struct usb_interface *interface[USB_MAXINTERFACES]; - - /* Interface information available even when this is not the - * active configuration */ - struct usb_interface_cache *intf_cache[USB_MAXINTERFACES]; - - unsigned char *extra; /* Extra descriptors */ - int extralen; -}; - - - -struct usb_device { - int devnum; - u32 route; - enum usb_device_state state; - enum usb_device_speed speed; - - unsigned int toggle[2]; - - struct usb_device *parent; - struct usb_device *children[USB_MAXCHILDREN]; - void *hcd; - struct usb_host_endpoint ep0; - - struct usb_device_descriptor descriptor; - struct usb_host_config *config; - - struct usb_host_config *actconfig; - struct usb_host_endpoint *ep_in[16]; - struct usb_host_endpoint *ep_out[16]; - int configno; /* selected config number */ - - char **rawdescriptors; - unsigned int rawdeslen[USB_MAXCONFIG]; - -// unsigned short bus_mA; - u8 portnum; - u8 level; - - unsigned can_submit:1; - unsigned persist_enabled:1; - unsigned have_langid:1; - unsigned authorized:1; - unsigned authenticated:1; - int string_langid; - - /* static strings from the device */ -// char *product; -// char *manufacturer; -// char *serial; - - int maxchild; - - u32 quirks; - atomic_t urbnum; - -// unsigned long active_duration; - - char mf[32]; /* manufacturer */ - char prod[32]; /* product */ - char serial[32]; /* serial number */ -#if defined(DWC_WITH_WLAN_OSDEP) - _mutex Mutex; -#else - _Mutex Mutex; -#endif -}; - -/* - * urb->transfer_flags: - * - * Note: URB_DIR_IN/OUT is automatically set in usb_submit_urb(). - */ -#define URB_SHORT_NOT_OK 0x0001 /* report short reads as errors */ -#define URB_ISO_ASAP 0x0002 /* iso-only, urb->start_frame - * ignored */ -#define URB_NO_TRANSFER_DMA_MAP 0x0004 /* urb->transfer_dma valid on submit */ -#define URB_NO_FSBR 0x0020 /* UHCI-specific */ -#define URB_ZERO_PACKET 0x0040 /* Finish bulk OUT with short packet */ -#define URB_NO_INTERRUPT 0x0080 /* HINT: no non-error interrupt - * needed */ -#define URB_FREE_BUFFER 0x0100 /* Free transfer buffer with the URB */ - -/* The following flags are used internally by usbcore and HCDs */ -#define URB_DIR_IN 0x0200 /* Transfer from device to host */ -#define URB_DIR_OUT 0 -#define URB_DIR_MASK URB_DIR_IN - -#define URB_DMA_MAP_SINGLE 0x00010000 /* Non-scatter-gather mapping */ -#define URB_DMA_MAP_PAGE 0x00020000 /* HCD-unsupported S-G */ -#define URB_DMA_MAP_SG 0x00040000 /* HCD-supported S-G */ -#define URB_MAP_LOCAL 0x00080000 /* HCD-local-memory mapping */ -#define URB_SETUP_MAP_SINGLE 0x00100000 /* Setup packet DMA mapped */ -#define URB_SETUP_MAP_LOCAL 0x00200000 /* HCD-local setup packet */ -#define URB_DMA_SG_COMBINED 0x00400000 /* S-G entries were combined */ -#define URB_ALIGNED_TEMP_BUFFER 0x00800000 /* Temp buffer was alloc'd */ - -struct usb_iso_packet_descriptor { - unsigned int offset; - unsigned int length; /* expected length */ - unsigned int actual_length; - int status; -}; - -struct urb; - -typedef void (*usb_complete_t)(struct urb *); - -struct urb { - /* private: usb core and host controller only fields in the urb */ - void *hcpriv; /* private data for host controller */ - atomic_t use_count; /* concurrent submissions counter */ - atomic_t reject; /* submissions will fail */ - int unlinked; /* unlink error code */ - - /* public: documented fields in the urb that can be used by drivers */ -#if defined(DWC_WITH_WLAN_OSDEP) - _list urb_list; /* list head for use by the urb's - - * current owner */ -// _list anchor_list; /* the URB may be anchored */ -#else - _LIST urb_list; /* list head for use by the urb's - * current owner */ -// _LIST anchor_list; /* the URB may be anchored */ -#endif -// struct usb_anchor *anchor; - struct usb_device *dev; /* (in) pointer to associated device */ - struct usb_host_endpoint *ep; /* (internal) pointer to endpoint */ - unsigned int pipe; /* (in) pipe information */ - unsigned int stream_id; /* (in) stream ID */ - int status; /* (return) non-ISO status */ - unsigned int transfer_flags; /* (in) URB_SHORT_NOT_OK | ...*/ - void *transfer_buffer; /* (in) associated data buffer */ - dma_addr_t transfer_dma; /* (in) dma addr for transfer_buffer */ - u32 transfer_buffer_length; /* (in) data buffer length */ - u32 actual_length; /* (return) actual transfer length */ - unsigned char *setup_packet; /* (in) setup packet (control only) */ - - int start_frame; /* (modify) start frame (ISO) */ - int number_of_packets; /* (in) number of ISO packets */ - int interval; /* (modify) transfer interval - * (INT/ISO) */ - int error_count; /* (return) number of ISO errors */ - void *context; /* (in) context for completion */ -#if defined(DWC_WITH_WLAN_OSDEP) - _mutex Mutex; // mutext for atomic or link-list operation -#else - _Mutex Mutex; // mutext for atomic or link-list operation -#endif - usb_complete_t complete; /* (in) completion routine */ - unsigned int iso_packets; - struct usb_iso_packet_descriptor iso_frame_desc[0]; - /* (in) ISO ONLY */ -}; - -struct usb_hcd { - - /* - * housekeeping - */ - void *rhdev; /* self usb_dev */ - const char *product_desc; /* product/vendor string */ - int speed; /* Speed for this roothub. - * May be different from - * hcd->driver->flags & HCD_MASK - */ - - struct urb *status_urb; /* the current status urb */ - - /* - * hardware info/state - */ - - - - /* Flags that need to be manipulated atomically because they can - * change while the host controller is running. Always use - * set_bit() or clear_bit() to change their values. - */ - unsigned long flags; - - /* Flags that get set only during HCD registration or removal. */ - unsigned rh_registered:1;/* is root hub registered? */ - unsigned rh_pollable:1; /* may we poll the root hub? */ - unsigned msix_enabled:1; /* driver has MSI-X enabled? */ - - /* The next flag is a stopgap, to be removed when all the HCDs - * support the new root-hub polling mechanism. */ - unsigned uses_new_polling:1; - unsigned authorized_default:1; - unsigned has_tt:1; /* Integrated TT in root hub */ - - - /* bandwidth_mutex should be taken before adding or removing - * any new bus bandwidth constraints: - * 1. Before adding a configuration for a new device. - * 2. Before removing the configuration to put the device into - * the addressed state. - * 3. Before selecting a different configuration. - * 4. Before selecting an alternate interface setting. - * - * bandwidth_mutex should be dropped after a successful control message - * to the device, or resetting the bandwidth after a failed attempt. - */ -#if defined(DWC_WITH_WLAN_OSDEP) - _mutex bandwidth_mutex; -#else - _Mutex bandwidth_mutex; -#endif - - int state; - - int devnum_next; /* Next open device number in - * round-robin allocation */ -#if defined(DWC_WITH_WLAN_OSDEP) - _mutex hcd_urb_list_lock; - _mutex hcd_urb_unlink_lock; - _mutex hcd_root_hub_lock; // mutext for atomic or link-list operation -#else - _Mutex hcd_urb_list_lock; - _Mutex hcd_urb_unlink_lock; - _Mutex hcd_root_hub_lock; // mutext for atomic or link-list operation -#endif - - /* The HC driver's private data is stored at the end of - * this structure. - */ -#ifdef __ICCARM__ - #pragma pack(64) - unsigned long hcd_priv[0]; -#elif defined (__GNUC__) - unsigned long hcd_priv[0]; -//? __attribute__ ((aligned(sizeof(s64)))); -#endif -}; - - -#define le16_to_cpu rtk_le16_to_cpu -#define cpu_to_le16 rtk_cpu_to_le16 - -#if 0 -/* - * Calling this entity a "pipe" is glorifying it. A USB pipe - * is something embarrassingly simple: it basically consists - * of the following information: - * - device number (7 bits) - * - endpoint number (4 bits) - * - current Data0/1 state (1 bit) - * - direction (1 bit) - * - speed (2 bits) - * - max packet size (2 bits: 8, 16, 32 or 64) - * - pipe type (2 bits: control, interrupt, bulk, isochronous) - * - * That's 18 bits. Really. Nothing more. And the USB people have - * documented these eighteen bits as some kind of glorious - * virtual data structure. - * - * Let's not fall in that trap. We'll just encode it as a simple - * unsigned int. The encoding is: - * - * - max size: bits 0-1 (00 = 8, 01 = 16, 10 = 32, 11 = 64) - * - direction: bit 7 (0 = Host-to-Device [Out], - * (1 = Device-to-Host [In]) - * - device: bits 8-14 - * - endpoint: bits 15-18 - * - Data0/1: bit 19 - * - speed: bit 26 (0 = Full, 1 = Low Speed, 2 = High) - * - pipe type: bits 30-31 (00 = isochronous, 01 = interrupt, - * 10 = control, 11 = bulk) - * - * Why? Because it's arbitrary, and whatever encoding we select is really - * up to us. This one happens to share a lot of bit positions with the UHCI - * specification, so that much of the uhci driver can just mask the bits - * appropriately. - */ -/* Create various pipes... */ -#define create_pipe(dev,endpoint) \ - (((dev)->devnum << 8) | (endpoint << 15) | \ - ((dev)->speed << 26) | (dev)->maxpacketsize) -#define default_pipe(dev) ((dev)->speed << 26) - -#define usb_sndctrlpipe(dev, endpoint) ((PIPE_CONTROL << 30) | \ - create_pipe(dev, endpoint)) -#define usb_rcvctrlpipe(dev, endpoint) ((PIPE_CONTROL << 30) | \ - create_pipe(dev, endpoint) | \ - USB_DIR_IN) -#define usb_sndisocpipe(dev, endpoint) ((PIPE_ISOCHRONOUS << 30) | \ - create_pipe(dev, endpoint)) -#define usb_rcvisocpipe(dev, endpoint) ((PIPE_ISOCHRONOUS << 30) | \ - create_pipe(dev, endpoint) | \ - USB_DIR_IN) -#define usb_sndbulkpipe(dev, endpoint) ((PIPE_BULK << 30) | \ - create_pipe(dev, endpoint)) -#define usb_rcvbulkpipe(dev, endpoint) ((PIPE_BULK << 30) | \ - create_pipe(dev, endpoint) | \ - USB_DIR_IN) -#define usb_sndintpipe(dev, endpoint) ((PIPE_INTERRUPT << 30) | \ - create_pipe(dev, endpoint)) -#define usb_rcvintpipe(dev, endpoint) ((PIPE_INTERRUPT << 30) | \ - create_pipe(dev, endpoint) | \ - USB_DIR_IN) -#define usb_snddefctrl(dev) ((PIPE_CONTROL << 30) | \ - default_pipe(dev)) -#define usb_rcvdefctrl(dev) ((PIPE_CONTROL << 30) | \ - default_pipe(dev) | \ - USB_DIR_IN) - -/* The D0/D1 toggle bits */ -#define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> ep) & 1) -#define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << ep)) -#define usb_settoggle(dev, ep, out, bit) ((dev)->toggle[out] = \ - ((dev)->toggle[out] & \ - ~(1 << ep)) | ((bit) << ep)) - -/* Endpoint halt control/status */ -#define usb_endpoint_out(ep_dir) (((ep_dir >> 7) & 1) ^ 1) -#define usb_endpoint_halt(dev, ep, out) ((dev)->halted[out] |= (1 << (ep))) -#define usb_endpoint_running(dev, ep, out) ((dev)->halted[out] &= ~(1 << (ep))) -#define usb_endpoint_halted(dev, ep, out) ((dev)->halted[out] & (1 << (ep))) - -#define usb_packetid(pipe) (((pipe) & USB_DIR_IN) ? USB_PID_IN : \ - USB_PID_OUT) - -#define usb_pipeout(pipe) ((((pipe) >> 7) & 1) ^ 1) -#define usb_pipein(pipe) (((pipe) >> 7) & 1) -#define usb_pipedevice(pipe) (((pipe) >> 8) & 0x7f) -#define usb_pipe_endpdev(pipe) (((pipe) >> 8) & 0x7ff) -#define usb_pipeendpoint(pipe) (((pipe) >> 15) & 0xf) -#define usb_pipedata(pipe) (((pipe) >> 19) & 1) -#define usb_pipespeed(pipe) (((pipe) >> 26) & 3) -#define usb_pipeslow(pipe) (usb_pipespeed(pipe) == USB_SPEED_LOW) -#define usb_pipetype(pipe) (((pipe) >> 30) & 3) -#define usb_pipeisoc(pipe) (usb_pipetype((pipe)) == PIPE_ISOCHRONOUS) -#define usb_pipeint(pipe) (usb_pipetype((pipe)) == PIPE_INTERRUPT) -#define usb_pipecontrol(pipe) (usb_pipetype((pipe)) == PIPE_CONTROL) -#define usb_pipebulk(pipe) (usb_pipetype((pipe)) == PIPE_BULK) - -#else -/* ----------------------------------------------------------------------- */ - -/* - * For various legacy reasons, Linux has a small cookie that's paired with - * a struct usb_device to identify an endpoint queue. Queue characteristics - * are defined by the endpoint's descriptor. This cookie is called a "pipe", - * an unsigned int encoded as: - * - * - direction: bit 7 (0 = Host-to-Device [Out], - * 1 = Device-to-Host [In] ... - * like endpoint bEndpointAddress) - * - device address: bits 8-14 ... bit positions known to uhci-hcd - * - endpoint: bits 15-18 ... bit positions known to uhci-hcd - * - pipe type: bits 30-31 (00 = isochronous, 01 = interrupt, - * 10 = control, 11 = bulk) - * - * Given the device address and endpoint descriptor, pipes are redundant. - */ - -/* NOTE: these are not the standard USB_ENDPOINT_XFER_* values!! */ -/* (yet ... they're the values used by usbfs) */ - -#define usb_pipein(pipe) (((pipe) & USB_DIR_IN) >> 7) -#define usb_pipeout(pipe) (!usb_pipein(pipe)) - -#define usb_pipedevice(pipe) (((pipe) >> 8) & 0x7f) -#define usb_pipeendpoint(pipe) (((pipe) >> 15) & 0xf) - -#define usb_pipetype(pipe) (((pipe) >> 30) & 3) -#define usb_pipeisoc(pipe) (usb_pipetype((pipe)) == PIPE_ISOCHRONOUS) -#define usb_pipeint(pipe) (usb_pipetype((pipe)) == PIPE_INTERRUPT) -#define usb_pipecontrol(pipe) (usb_pipetype((pipe)) == PIPE_CONTROL) -#define usb_pipebulk(pipe) (usb_pipetype((pipe)) == PIPE_BULK) - -static inline unsigned int __create_pipe(struct usb_device *dev, - unsigned int endpoint) -{ - return (dev->devnum << 8) | (endpoint << 15); -} - -#define usb_sndaddr0pipe() (PIPE_CONTROL << 30) -#define usb_rcvaddr0pipe() ((PIPE_CONTROL << 30) | USB_DIR_IN) - -/* Create various pipes... */ -#define usb_sndctrlpipe(dev, endpoint) \ - ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint)) -#define usb_rcvctrlpipe(dev, endpoint) \ - ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) -#define usb_sndisocpipe(dev, endpoint) \ - ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint)) -#define usb_rcvisocpipe(dev, endpoint) \ - ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) -#define usb_sndbulkpipe(dev, endpoint) \ - ((PIPE_BULK << 30) | __create_pipe(dev, endpoint)) -#define usb_rcvbulkpipe(dev, endpoint) \ - ((PIPE_BULK << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) -#define usb_sndintpipe(dev, endpoint) \ - ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint)) -#define usb_rcvintpipe(dev, endpoint) \ - ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) - -static inline struct usb_host_endpoint * -usb_pipe_endpoint(struct usb_device *dev, unsigned int pipe) -{ - struct usb_host_endpoint **eps; - eps = usb_pipein(pipe) ? dev->ep_in : dev->ep_out; - return eps[usb_pipeendpoint(pipe)]; -} - -/* The D0/D1 toggle bits ... USE WITH CAUTION (they're almost hcd-internal) */ -#define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> (ep)) & 1) -#define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << (ep))) -#define usb_settoggle(dev, ep, out, bit) \ - ((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << (ep))) | \ - ((bit) << (ep))) -#endif - -/************************************************************************* - * Hub Stuff - */ -struct usb_port_status { - unsigned short wPortStatus; - unsigned short wPortChange; -} UPACKED; - -struct usb_hub_status { - unsigned short wHubStatus; - unsigned short wHubChange; -}UPACKED; - - -/* Hub descriptor */ -struct usb_hub_descriptor { - unsigned char bLength; - unsigned char bDescriptorType; - unsigned char bNbrPorts; - unsigned short wHubCharacteristics; - unsigned char bPwrOn2PwrGood; - unsigned char bHubContrCurrent; - unsigned char DeviceRemovable[(USB_MAXCHILDREN+1+7)/8]; - unsigned char PortPowerCtrlMask[(USB_MAXCHILDREN+1+7)/8]; - /* DeviceRemovable and PortPwrCtrlMask want to be variable-length - bitmaps that hold max 255 entries. (bit0 is ignored) */ -}UPACKED; - - -struct usb_hub_device { - struct usb_device *pusb_dev; - struct usb_hub_descriptor desc; -}; - -/*-------------------------------------------------------------------------*/ - -/** - * usb_endpoint_num - get the endpoint's number - * @epd: endpoint to be checked - * - * Returns @epd's number: 0 to 15. - */ -static inline int usb_endpoint_num(const struct usb_endpoint_descriptor *epd) -{ - return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; -} - -/** - * usb_endpoint_type - get the endpoint's transfer type - * @epd: endpoint to be checked - * - * Returns one of USB_ENDPOINT_XFER_{CONTROL, ISOC, BULK, INT} according - * to @epd's transfer type. - */ -static inline int usb_endpoint_type(const struct usb_endpoint_descriptor *epd) -{ - return epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK; -} - -/** - * usb_endpoint_dir_in - check if the endpoint has IN direction - * @epd: endpoint to be checked - * - * Returns true if the endpoint is of type IN, otherwise it returns false. - */ -static inline int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd) -{ - return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN); -} - -/** - * usb_endpoint_dir_out - check if the endpoint has OUT direction - * @epd: endpoint to be checked - * - * Returns true if the endpoint is of type OUT, otherwise it returns false. - */ -static inline int usb_endpoint_dir_out( - const struct usb_endpoint_descriptor *epd) -{ - return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT); -} - -#define usb_endpoint_out(ep_dir) (!((ep_dir) & USB_DIR_IN)) - -/** - * usb_endpoint_xfer_bulk - check if the endpoint has bulk transfer type - * @epd: endpoint to be checked - * - * Returns true if the endpoint is of type bulk, otherwise it returns false. - */ -static inline int usb_endpoint_xfer_bulk( - const struct usb_endpoint_descriptor *epd) -{ - return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == - USB_ENDPOINT_XFER_BULK); -} - -/** - * usb_endpoint_xfer_control - check if the endpoint has control transfer type - * @epd: endpoint to be checked - * - * Returns true if the endpoint is of type control, otherwise it returns false. - */ -static inline int usb_endpoint_xfer_control( - const struct usb_endpoint_descriptor *epd) -{ - return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == - USB_ENDPOINT_XFER_CONTROL); -} - -/** - * usb_endpoint_xfer_int - check if the endpoint has interrupt transfer type - * @epd: endpoint to be checked - * - * Returns true if the endpoint is of type interrupt, otherwise it returns - * false. - */ -static inline int usb_endpoint_xfer_int( - const struct usb_endpoint_descriptor *epd) -{ - return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == - USB_ENDPOINT_XFER_INT); -} - -/** - * usb_endpoint_xfer_isoc - check if the endpoint has isochronous transfer type - * @epd: endpoint to be checked - * - * Returns true if the endpoint is of type isochronous, otherwise it returns - * false. - */ -static inline int usb_endpoint_xfer_isoc( - const struct usb_endpoint_descriptor *epd) -{ - return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == - USB_ENDPOINT_XFER_ISOC); -} - -/** - * usb_endpoint_is_bulk_in - check if the endpoint is bulk IN - * @epd: endpoint to be checked - * - * Returns true if the endpoint has bulk transfer type and IN direction, - * otherwise it returns false. - */ -static inline int usb_endpoint_is_bulk_in( - const struct usb_endpoint_descriptor *epd) -{ - return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd); -} - -/** - * usb_endpoint_is_bulk_out - check if the endpoint is bulk OUT - * @epd: endpoint to be checked - * - * Returns true if the endpoint has bulk transfer type and OUT direction, - * otherwise it returns false. - */ -static inline int usb_endpoint_is_bulk_out( - const struct usb_endpoint_descriptor *epd) -{ - return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd); -} - -/** - * usb_endpoint_is_int_in - check if the endpoint is interrupt IN - * @epd: endpoint to be checked - * - * Returns true if the endpoint has interrupt transfer type and IN direction, - * otherwise it returns false. - */ -static inline int usb_endpoint_is_int_in( - const struct usb_endpoint_descriptor *epd) -{ - return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd); -} - -/** - * usb_endpoint_is_int_out - check if the endpoint is interrupt OUT - * @epd: endpoint to be checked - * - * Returns true if the endpoint has interrupt transfer type and OUT direction, - * otherwise it returns false. - */ -static inline int usb_endpoint_is_int_out( - const struct usb_endpoint_descriptor *epd) -{ - return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd); -} - -/** - * usb_endpoint_is_isoc_in - check if the endpoint is isochronous IN - * @epd: endpoint to be checked - * - * Returns true if the endpoint has isochronous transfer type and IN direction, - * otherwise it returns false. - */ -static inline int usb_endpoint_is_isoc_in( - const struct usb_endpoint_descriptor *epd) -{ - return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd); -} - -/** - * usb_endpoint_is_isoc_out - check if the endpoint is isochronous OUT - * @epd: endpoint to be checked - * - * Returns true if the endpoint has isochronous transfer type and OUT direction, - * otherwise it returns false. - */ -static inline int usb_endpoint_is_isoc_out( - const struct usb_endpoint_descriptor *epd) -{ - return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd); -} - -/** - * usb_endpoint_maxp - get endpoint's max packet size - * @epd: endpoint to be checked - * - * Returns @epd's max packet - */ -static inline int usb_endpoint_maxp(const struct usb_endpoint_descriptor *epd) -{ - return rtk_le16_to_cpu(epd->wMaxPacketSize); -} - -/** - * usb_urb_dir_in - check if an URB describes an IN transfer - * @urb: URB to be checked - * - * Returns 1 if @urb describes an IN transfer (device-to-host), - * otherwise 0. - */ -static inline int usb_urb_dir_in(struct urb *urb) -{ - return (urb->transfer_flags & URB_DIR_MASK) == URB_DIR_IN; -} - -/** - * usb_urb_dir_out - check if an URB describes an OUT transfer - * @urb: URB to be checked - * - * Returns 1 if @urb describes an OUT transfer (host-to-device), - * otherwise 0. - */ -static inline int usb_urb_dir_out(struct urb *urb) -{ - return (urb->transfer_flags & URB_DIR_MASK) == URB_DIR_OUT; -} - -/** - * usb_get_dev - increments the reference count of the usb device structure - * @dev: the device being referenced - * - * Each live reference to a device should be refcounted. - * - * Drivers for USB interfaces should normally record such references in - * their probe() methods, when they bind to an interface, and release - * them by calling usb_put_dev(), in their disconnect() methods. - * - * A pointer to the device with the incremented reference counter is returned. - */ -static inline void *usb_get_dev(struct usb_device *dev) -{ - return dev; -} - -/** - * usb_put_dev - release a use of the usb device structure - * @dev: device that's been disconnected - * - * Must be called when a user of a device is finished with it. When the last - * user of the device calls this function, the memory of the device is freed. - */ -static inline void usb_put_dev(struct usb_device *dev) -{ -} - -/** - * usb_get_intf - increments the reference count of the usb interface structure - * @intf: the interface being referenced - * - * Each live reference to a interface must be refcounted. - * - * Drivers for USB interfaces should normally record such references in - * their probe() methods, when they bind to an interface, and release - * them by calling usb_put_intf(), in their disconnect() methods. - * - * A pointer to the interface with the incremented reference counter is - * returned. - */ -static inline void *usb_get_intf(struct usb_interface *intf) -{ - return intf; -} - -/** - * usb_put_intf - release a use of the usb interface structure - * @intf: interface that's been decremented - * - * Must be called when a user of an interface is finished with it. When the - * last user of the interface calls this function, the memory of the interface - * is freed. - */ -static inline void usb_put_intf(struct usb_interface *intf) -{ -} - -static inline void *usb_get_intfdata(struct usb_interface *intf) -{ - return (intf->drv_priv); -} - -static inline void usb_set_intfdata(struct usb_interface *intf, void *data) -{ - intf->drv_priv = data; -} - -static inline struct usb_device *interface_to_usbdev(struct usb_interface *intf) -{ - return intf->usb_dev; -} - -static inline struct usb_driver *interface_to_usbdri(struct usb_interface *intf) -{ - return intf->driver; -} - -/*-------------------------------------------------------------------------*/ - -/*=====================================================*/ - - -#ifdef DWC_HOST_ONLY -typedef struct { - uByte bLength; - uByte bDescriptorType; - uByte bEndpointAddress; -#define UE_GET_DIR(a) ((a) & 0x80) -#define UE_SET_DIR(a,d) ((a) | (((d)&1) << 7)) -#define UE_DIR_IN 0x01 -#define UE_DIR_OUT 0x00 -#define UE_ADDR 0x0f -#define UE_GET_ADDR(a) ((a) & UE_ADDR) - uByte bmAttributes; -#define UE_XFERTYPE 0x03 -#define UE_CONTROL 0x00 -#define UE_ISOCHRONOUS 0x01 -#define UE_BULK 0x02 -#define UE_INTERRUPT 0x03 -#define UE_GET_XFERTYPE(a) ((a) & UE_XFERTYPE) -#if 0 -#define UE_ISO_TYPE 0x0c -#define UE_ISO_ASYNC 0x04 -#define UE_ISO_ADAPT 0x08 -#define UE_ISO_SYNC 0x0c -#define UE_GET_ISO_TYPE(a) ((a) & UE_ISO_TYPE) -#endif - uWord wMaxPacketSize; - uByte bInterval; -} usb_endpoint_descriptor_t;//UPACKED usb_endpoint_descriptor_t; -#define USB_ENDPOINT_DESCRIPTOR_SIZE 7 -#endif -#ifdef DWC_DEVICE_ONLY -typedef struct { - uByte bLength; - uByte bDescriptorType; - uByte bEndpointAddress; -#define UE_GET_DIR(a) ((a) & 0x80) -#define UE_SET_DIR(a,d) ((a) | (((d)&1) << 7)) -#define UE_DIR_IN 0x80 -#define UE_DIR_OUT 0x00 -#define UE_ADDR 0x0f -#define UE_GET_ADDR(a) ((a) & UE_ADDR) - uByte bmAttributes; -#define UE_XFERTYPE 0x03 -#define UE_CONTROL 0x00 -#define UE_ISOCHRONOUS 0x01 -#define UE_BULK 0x02 -#define UE_INTERRUPT 0x03 -#define UE_GET_XFERTYPE(a) ((a) & UE_XFERTYPE) -#define UE_ISO_TYPE 0x0c -#define UE_ISO_ASYNC 0x04 -#define UE_ISO_ADAPT 0x08 -#define UE_ISO_SYNC 0x0c -#define UE_GET_ISO_TYPE(a) ((a) & UE_ISO_TYPE) - uWord wMaxPacketSize; - uByte bInterval; -} UPACKED usb_endpoint_descriptor_t; -#endif - -typedef struct ss_endpoint_companion_descriptor { - uByte bLength; - uByte bDescriptorType; - uByte bMaxBurst; -#define USSE_GET_MAX_STREAMS(a) ((a) & 0x1f) -#define USSE_SET_MAX_STREAMS(a, b) ((a) | ((b) & 0x1f)) -#define USSE_GET_MAX_PACKET_NUM(a) ((a) & 0x03) -#define USSE_SET_MAX_PACKET_NUM(a, b) ((a) | ((b) & 0x03)) - uByte bmAttributes; - uWord wBytesPerInterval; -} UPACKED ss_endpoint_companion_descriptor_t; -#define USB_SS_ENDPOINT_COMPANION_DESCRIPTOR_SIZE 6 - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uWord bString[127]; -} UPACKED usb_string_descriptor_t; -#define USB_MAX_STRING_LEN 128 -#define USB_LANGUAGE_TABLE 0 /* # of the string language id table */ - - -/* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */ - -/* USB_DT_OTG (from OTG 1.0a supplement) */ - -/* from usb_otg_descriptor.bmAttributes */ -#define USB_OTG_SRP (1 << 0) -#define USB_OTG_HNP (1 << 1) /* swap host/device roles */ - - -extern void _usb_init(void); -extern void _usb_deinit(void); -extern int wait_usb_ready(void); -extern void usb_disable_asynch(int disable); -extern unsigned short usb_maxpacket(struct usb_device *udev, int pipe, int is_out); -extern int usb_set_interface(struct usb_device *dev, int interface, int alternate); -extern int usb_set_configuration(struct usb_device *dev, int configuration); - -extern int usb_set_protocol(struct usb_device *dev, int ifnum, int protocol); -extern int usb_set_idle(struct usb_device *dev, int ifnum, int duration, int report_id); -extern int usb_get_report(struct usb_device *dev, int ifnum, unsigned char type, - unsigned char id, void *buf, int size); -extern int usb_get_class_descriptor(struct usb_device *dev, int ifnum, - unsigned char type, unsigned char id, void *buf, int size); -extern int usb_string(struct usb_device *dev, int index, char *buf, int size); - -extern void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status); -extern struct usb_hcd *usb_create_hcd(unsigned int priv_size); -extern int usb_add_hcd(struct usb_hcd *hcd); - -extern struct urb *usb_alloc_urb(int iso_packets); -extern void usb_free_urb(struct urb *urb); -extern void usb_kill_urb(struct urb *urb); -extern void usb_fill_control_urb(struct urb *urb, - struct usb_device *dev, - unsigned int pipe, - unsigned char *setup_packet, - void *transfer_buffer, - int buffer_length, - usb_complete_t complete_fn, - void *context); -extern void usb_fill_bulk_urb(struct urb *urb, - struct usb_device *dev, - unsigned int pipe, - void *transfer_buffer, - int buffer_length, - usb_complete_t complete_fn, - void *context); -extern void usb_fill_int_urb(struct urb *urb, - struct usb_device *dev, - unsigned int pipe, - void *transfer_buffer, - int buffer_length, - usb_complete_t complete_fn, - void *context, - int interval); -extern int usb_submit_urb(struct urb *urb); - -extern void usb_reset_endpoint(struct usb_device *dev, unsigned int epaddr); -extern void usb_disable_interface(struct usb_device *dev, struct usb_interface *intf, - bool reset_hardware); -extern void usb_enable_interface(struct usb_device *dev, - struct usb_interface *intf, bool reset_eps); - -extern int usb_control_msg(struct usb_device *dev, unsigned int pipe, u8 request, - u8 requesttype, u16 value, u16 index, void *data, - u16 size, int timeout); -extern int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, - void *data, int len, int *actual_length, int timeout); -extern int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe, - void *data, int len, int *actual_length, int timeout); -extern int usb_get_descriptor(struct usb_device *dev, unsigned char type, - unsigned char index, void *buf, int size); -extern int usb_get_device_descriptor(struct usb_device *dev, unsigned int size); -extern int usb_clear_halt(struct usb_device *dev, int pipe); -#if defined(DWC_WITH_WLAN_OSDEP) -extern _sema CtrlUrbCompSema; /* Semaphore for for Control URB Complete waiting */ -extern _sema UrbKillSema; /* Semaphore for for URB Kill waiting */ -#else -extern _Sema CtrlUrbCompSema; /* Semaphore for for Control URB Complete waiting */ -extern _Sema UrbKillSema; /* Semaphore for for URB Kill waiting */ -#endif -typedef unsigned long kernel_ulong_t; - -struct usb_device_id { - /* which fields to match against? */ - u16 match_flags; - - /* Used for product specific matches; range is inclusive */ - u16 idVendor; - u16 idProduct; - u16 bcdDevice_lo; - u16 bcdDevice_hi; - - /* Used for device class matches */ - u8 bDeviceClass; - u8 bDeviceSubClass; - u8 bDeviceProtocol; - - /* Used for interface class matches */ - u8 bInterfaceClass; - u8 bInterfaceSubClass; - u8 bInterfaceProtocol; - - /* Used for vendor-specific interface matches */ - u8 bInterfaceNumber; - - /* not matched against */ -#ifdef __ICCARM__ - #pragma pack(64) - kernel_ulong_t driver_info; -#elif defined (__GNUC__) - kernel_ulong_t driver_info; -//? __attribute__((aligned(sizeof(kernel_ulong_t)))); -#endif -}; - -/* Some useful macros to use to create struct usb_device_id */ -#define USB_DEVICE_ID_MATCH_VENDOR 0x0001 -#define USB_DEVICE_ID_MATCH_PRODUCT 0x0002 -#define USB_DEVICE_ID_MATCH_DEV_LO 0x0004 -#define USB_DEVICE_ID_MATCH_DEV_HI 0x0008 -#define USB_DEVICE_ID_MATCH_DEV_CLASS 0x0010 -#define USB_DEVICE_ID_MATCH_DEV_SUBCLASS 0x0020 -#define USB_DEVICE_ID_MATCH_DEV_PROTOCOL 0x0040 -#define USB_DEVICE_ID_MATCH_INT_CLASS 0x0080 -#define USB_DEVICE_ID_MATCH_INT_SUBCLASS 0x0100 -#define USB_DEVICE_ID_MATCH_INT_PROTOCOL 0x0200 -#define USB_DEVICE_ID_MATCH_INT_NUMBER 0x0400 - -#define USB_DEVICE_ID_MATCH_DEVICE \ - (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT) -#define USB_DEVICE_ID_MATCH_DEV_RANGE \ - (USB_DEVICE_ID_MATCH_DEV_LO | USB_DEVICE_ID_MATCH_DEV_HI) -#define USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION \ - (USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_DEV_RANGE) -#define USB_DEVICE_ID_MATCH_DEV_INFO \ - (USB_DEVICE_ID_MATCH_DEV_CLASS | \ - USB_DEVICE_ID_MATCH_DEV_SUBCLASS | \ - USB_DEVICE_ID_MATCH_DEV_PROTOCOL) -#define USB_DEVICE_ID_MATCH_INT_INFO \ - (USB_DEVICE_ID_MATCH_INT_CLASS | \ - USB_DEVICE_ID_MATCH_INT_SUBCLASS | \ - USB_DEVICE_ID_MATCH_INT_PROTOCOL) -/** - * USB_DEVICE - macro used to describe a specific usb device - * @vend: the 16 bit USB Vendor ID - * @prod: the 16 bit USB Product ID - * - * This macro is used to create a struct usb_device_id that matches a - * specific device. - */ -#define USB_DEVICE(vend, prod) \ - .match_flags = USB_DEVICE_ID_MATCH_DEVICE, \ - .idVendor = (vend), \ - .idProduct = (prod) - -/** - * USB_DEVICE_VER - describe a specific usb device with a version range - * @vend: the 16 bit USB Vendor ID - * @prod: the 16 bit USB Product ID - * @lo: the bcdDevice_lo value - * @hi: the bcdDevice_hi value - * - * This macro is used to create a struct usb_device_id that matches a - * specific device, with a version range. - */ -#define USB_DEVICE_VER(vend, prod, lo, hi) \ - .match_flags = USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, \ - .idVendor = (vend), \ - .idProduct = (prod), \ - .bcdDevice_lo = (lo), \ - .bcdDevice_hi = (hi) - -/** - * USB_INTERFACE_INFO - macro used to describe a class of usb interfaces - * @cl: bInterfaceClass value - * @sc: bInterfaceSubClass value - * @pr: bInterfaceProtocol value - * - * This macro is used to create a struct usb_device_id that matches a - * specific class of interfaces. - */ -#define USB_INTERFACE_INFO(cl, sc, pr) \ - .match_flags = USB_DEVICE_ID_MATCH_INT_INFO, \ - .bInterfaceClass = (cl), \ - .bInterfaceSubClass = (sc), \ - .bInterfaceProtocol = (pr) - -typedef enum{ - USB_INIT_NONE = -1, - USB_INIT_OK = 0, - USB_INIT_FAIL = 1, - USB_NOT_ATTACHED = 2 -}_usb_init_s; - -struct usb_driver { - const char *name; - - int (*probe) (struct usb_interface *intf); - - void (*disconnect) (struct usb_interface *intf); - - int (*resume) (struct usb_interface *intf); - int (*reset_resume)(struct usb_interface *intf); - - int (*pre_reset)(struct usb_interface *intf); - int (*post_reset)(struct usb_interface *intf); - - const struct usb_device_id *id_table; -}; - -int usb_register_class_driver(struct usb_driver *driver); -#endif /* _USB_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_ch9.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_ch9.h deleted file mode 100644 index 26535e5..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_ch9.h +++ /dev/null @@ -1,563 +0,0 @@ -/* - * This file holds USB constants and structures that are needed for USB - * device APIs. These are used by the USB device model, which is defined - * in chapter 9 of the USB 2.0 specification. Linux has several APIs in C - * that need these: - * - * - the master/host side Linux-USB kernel driver API; - * - the "usbfs" user space API; and - * - the Linux "gadget" slave/device/peripheral side driver API. - * - * USB 2.0 adds an additional "On The Go" (OTG) mode, which lets systems - * act either as a USB master/host or as a USB slave/device. That means - * the master and slave side APIs benefit from working well together. - * - * There's also "Wireless USB", using low power short range radios for - * peripheral interconnection but otherwise building on the USB framework. - */ - - -#ifndef _USB_CH9_H_ -#define _USB_CH9_H_ - -#include "basic_types.h" -//#include /* __u8 etc */ -//#include "../otg/osk/sys-support.h" - -/*-------------------------------------------------------------------------*/ - -/* CONTROL REQUEST SUPPORT */ - -/* - * USB directions - * - * This bit flag is used in endpoint descriptors' bEndpointAddress field. - * It's also one of three fields in control requests bRequestType. - */ -//#define USB_DIR_OUT 0 /* to device */ -//#define USB_DIR_IN 0x80 /* to host */ - -/* - * USB types, the second of three bRequestType fields - */ -#define USB_TYPE_MASK (0x03 << 5) -#define USB_TYPE_STANDARD (0x00 << 5) -#define USB_TYPE_CLASS (0x01 << 5) -#define USB_TYPE_VENDOR (0x02 << 5) -#define USB_TYPE_RESERVED (0x03 << 5) - -/* - * USB recipients, the third of three bRequestType fields - */ -#define USB_RECIP_MASK 0x1f -#define USB_RECIP_DEVICE 0x00 -#define USB_RECIP_INTERFACE 0x01 -#define USB_RECIP_ENDPOINT 0x02 -#define USB_RECIP_OTHER 0x03 -/* From Wireless USB 1.0 */ -#define USB_RECIP_PORT 0x04 -#define USB_RECIP_RPIPE 0x05 - -/* - * Standard requests, for the bRequest field of a SETUP packet. - * - * These are qualified by the bRequestType field, so that for example - * TYPE_CLASS or TYPE_VENDOR specific feature flags could be retrieved - * by a GET_STATUS request. - */ -#define USB_REQ_GET_STATUS 0x00 -#define USB_REQ_CLEAR_FEATURE 0x01 -#define USB_REQ_SET_FEATURE 0x03 -#define USB_REQ_SET_ADDRESS 0x05 -#define USB_REQ_GET_DESCRIPTOR 0x06 -#define USB_REQ_SET_DESCRIPTOR 0x07 -#define USB_REQ_GET_CONFIGURATION 0x08 -#define USB_REQ_SET_CONFIGURATION 0x09 -#define USB_REQ_GET_INTERFACE 0x0A -#define USB_REQ_SET_INTERFACE 0x0B -#define USB_REQ_SYNCH_FRAME 0x0C - -#define USB_REQ_SET_ENCRYPTION 0x0D /* Wireless USB */ -#define USB_REQ_GET_ENCRYPTION 0x0E -#define USB_REQ_RPIPE_ABORT 0x0E -#define USB_REQ_SET_HANDSHAKE 0x0F -#define USB_REQ_RPIPE_RESET 0x0F -#define USB_REQ_GET_HANDSHAKE 0x10 -#define USB_REQ_SET_CONNECTION 0x11 -#define USB_REQ_SET_SECURITY_DATA 0x12 -#define USB_REQ_GET_SECURITY_DATA 0x13 -#define USB_REQ_SET_WUSB_DATA 0x14 -#define USB_REQ_LOOPBACK_DATA_WRITE 0x15 -#define USB_REQ_LOOPBACK_DATA_READ 0x16 -#define USB_REQ_SET_INTERFACE_DS 0x17 - -/* - * USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and - * are read as a bit array returned by USB_REQ_GET_STATUS. (So there - * are at most sixteen features of each type.) - */ -#define USB_DEVICE_SELF_POWERED 0 /* (read only) */ -#define USB_DEVICE_REMOTE_WAKEUP 1 /* dev may initiate wakeup */ -#define USB_DEVICE_TEST_MODE 2 /* (wired high speed only) */ -#define USB_DEVICE_BATTERY 2 /* (wireless) */ -#define USB_DEVICE_B_HNP_ENABLE 3 /* (otg) dev may initiate HNP */ -#define USB_DEVICE_WUSB_DEVICE 3 /* (wireless)*/ -#define USB_DEVICE_A_HNP_SUPPORT 4 /* (otg) RH port supports HNP */ -#define USB_DEVICE_A_ALT_HNP_SUPPORT 5 /* (otg) other RH port does */ -#define USB_DEVICE_DEBUG_MODE 6 /* (special devices only) */ - -#define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */ - - -/** - * struct usb_ctrlrequest - SETUP data for a USB device control request - * @bRequestType: matches the USB bmRequestType field - * @bRequest: matches the USB bRequest field - * @wValue: matches the USB wValue field (le16 byte order) - * @wIndex: matches the USB wIndex field (le16 byte order) - * @wLength: matches the USB wLength field (le16 byte order) - * - * This structure is used to send control requests to a USB device. It matches - * the different fields of the USB 2.0 Spec section 9.3, table 9-2. See the - * USB spec for a fuller description of the different fields, and what they are - * used for. - * - * Note that the driver for any interface can issue control requests. - * For most devices, interfaces don't coordinate with each other, so - * such requests may be made at any time. - */ -struct usb_ctrlrequest { - u8 bRequestType; - u8 bRequest; - u16 wValue; - u16 wIndex; - u16 wLength; -}; - -/*-------------------------------------------------------------------------*/ - -/* - * STANDARD DESCRIPTORS ... as returned by GET_DESCRIPTOR, or - * (rarely) accepted by SET_DESCRIPTOR. - * - * Note that all multi-byte values here are encoded in little endian - * byte order "on the wire". But when exposed through Linux-USB APIs, - * they've been converted to cpu byte order. - */ - -/* - * Descriptor types ... USB 2.0 spec table 9.5 - */ -#define USB_DT_DEVICE 0x01 -#define USB_DT_CONFIG 0x02 -#define USB_DT_STRING 0x03 -#define USB_DT_INTERFACE 0x04 -#define USB_DT_ENDPOINT 0x05 -#define USB_DT_DEVICE_QUALIFIER 0x06 -#define USB_DT_OTHER_SPEED_CONFIG 0x07 -#define USB_DT_INTERFACE_POWER 0x08 -/* these are from a minor usb 2.0 revision (ECN) */ -#define USB_DT_OTG 0x09 -#define USB_DT_DEBUG 0x0a -#define USB_DT_INTERFACE_ASSOCIATION 0x0b -/* these are from the Wireless USB spec */ -#define USB_DT_SECURITY 0x0c -#define USB_DT_KEY 0x0d -#define USB_DT_ENCRYPTION_TYPE 0x0e -#define USB_DT_BOS 0x0f -#define USB_DT_DEVICE_CAPABILITY 0x10 -#define USB_DT_WIRELESS_ENDPOINT_COMP 0x11 -#define USB_DT_WIRE_ADAPTER 0x21 -#define USB_DT_RPIPE 0x22 - -/* conventional codes for class-specific descriptors */ -#define USB_DT_CS_DEVICE 0x21 -#define USB_DT_CS_CONFIG 0x22 -#define USB_DT_CS_STRING 0x23 -#define USB_DT_CS_INTERFACE 0x24 -#define USB_DT_CS_ENDPOINT 0x25 - -/* All standard descriptors have these 2 fields at the beginning */ -struct usb_descriptor_header { - u8 bLength; - u8 bDescriptorType; -}; - - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_DEVICE: Device descriptor */ -struct usb_device_descriptor { - u8 bLength; - u8 bDescriptorType; - - u16 bcdUSB; - u8 bDeviceClass; - u8 bDeviceSubClass; - u8 bDeviceProtocol; - u8 bMaxPacketSize0; - u16 idVendor; - u16 idProduct; - u16 bcdDevice; - u8 iManufacturer; - u8 iProduct; - u8 iSerialNumber; - u8 bNumConfigurations; -}; - -#define USB_DT_DEVICE_SIZE 18 - - -/* - * Device and/or Interface Class codes - * as found in bDeviceClass or bInterfaceClass - * and defined by www.usb.org documents - */ -#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */ -#define USB_CLASS_AUDIO 1 -#define USB_CLASS_COMM 2 -#define USB_CLASS_HID 3 -#define USB_CLASS_PHYSICAL 5 -#define USB_CLASS_STILL_IMAGE 6 -#define USB_CLASS_PRINTER 7 -#define USB_CLASS_MASS_STORAGE 8 -#define USB_CLASS_HUB 9 -#define USB_CLASS_CDC_DATA 0x0a -#define USB_CLASS_CSCID 0x0b /* chip+ smart card */ -#define USB_CLASS_CONTENT_SEC 0x0d /* content security */ -#define USB_CLASS_VIDEO 0x0e -#define USB_CLASS_WIRELESS_CONTROLLER 0xe0 -#define USB_CLASS_APP_SPEC 0xfe -#define USB_CLASS_VENDOR_SPEC 0xff - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_CONFIG: Configuration descriptor information. - * - * USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the - * descriptor type is different. Highspeed-capable devices can look - * different depending on what speed they're currently running. Only - * devices with a USB_DT_DEVICE_QUALIFIER have any OTHER_SPEED_CONFIG - * descriptors. - */ -struct usb_config_descriptor { - u8 bLength; - u8 bDescriptorType; - - u16 wTotalLength; - u8 bNumInterfaces; - u8 bConfigurationValue; - u8 iConfiguration; - u8 bmAttributes; - u8 bMaxPower; -}; - -#define USB_DT_CONFIG_SIZE 9 - -/* from config descriptor bmAttributes */ -#define USB_CONFIG_ATT_ONE (1 << 7) /* must be set */ -#define USB_CONFIG_ATT_SELFPOWER (1 << 6) /* self powered */ -#define USB_CONFIG_ATT_WAKEUP (1 << 5) /* can wakeup */ -#define USB_CONFIG_ATT_BATTERY (1 << 4) /* battery powered */ - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_STRING: String descriptor */ -struct usb_string_descriptor { - u8 bLength; - u8 bDescriptorType; - - u16 wData[1]; /* UTF-16LE encoded */ -}; - -/* note that "string" zero is special, it holds language codes that - * the device supports, not Unicode characters. - */ - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_INTERFACE: Interface descriptor */ -struct usb_interface_descriptor { - u8 bLength; - u8 bDescriptorType; - - u8 bInterfaceNumber; - u8 bAlternateSetting; - u8 bNumEndpoints; - u8 bInterfaceClass; - u8 bInterfaceSubClass; - u8 bInterfaceProtocol; - u8 iInterface; -}; - -#define USB_DT_INTERFACE_SIZE 9 - -/*-------------------------------------------------------------------------*/ - -/* Endpoint descriptor */ -struct usb_endpoint_descriptor { - u8 bLength; - u8 bDescriptorType; - u8 bEndpointAddress; - u8 bmAttributes; - u16 wMaxPacketSize; - u8 bInterval; - u8 bRefresh; - u8 bSynchAddress; - - unsigned char *extra; /* Extra descriptors */ - int extralen; -}; - -#define USB_DT_ENDPOINT_SIZE 7 -#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ - - -/* - * Endpoints - */ -#if 0 -#define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */ -#define USB_ENDPOINT_DIR_MASK 0x80 - -#define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */ -#define USB_ENDPOINT_XFER_CONTROL 0 -#define USB_ENDPOINT_XFER_ISOC 1 -#define USB_ENDPOINT_XFER_BULK 2 -#define USB_ENDPOINT_XFER_INT 3 -#define USB_ENDPOINT_MAX_ADJUSTABLE 0x80 -#endif - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */ -struct usb_qualifier_descriptor { - u8 bLength; - u8 bDescriptorType; - - u16 bcdUSB; - u8 bDeviceClass; - u8 bDeviceSubClass; - u8 bDeviceProtocol; - u8 bMaxPacketSize0; - u8 bNumConfigurations; - u8 bRESERVED; -}; - - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_OTG (from OTG 1.0a supplement) */ -struct usb_otg_descriptor { - u8 bLength; - u8 bDescriptorType; - - u8 bmAttributes; /* support for HNP, SRP, etc */ -}; - -/* from usb_otg_descriptor.bmAttributes */ -#define USB_OTG_SRP (1 << 0) -#define USB_OTG_HNP (1 << 1) /* swap host/device roles */ - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_DEBUG: for special highspeed devices, replacing serial console */ -struct usb_debug_descriptor { - u8 bLength; - u8 bDescriptorType; - - /* bulk endpoints with 8 byte maxpacket */ - u8 bDebugInEndpoint; - u8 bDebugOutEndpoint; -}; - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_INTERFACE_ASSOCIATION: groups interfaces */ -struct usb_interface_assoc_descriptor { - u8 bLength; - u8 bDescriptorType; - - u8 bFirstInterface; - u8 bInterfaceCount; - u8 bFunctionClass; - u8 bFunctionSubClass; - u8 bFunctionProtocol; - u8 iFunction; -}; - - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_SECURITY: group of wireless security descriptors, including - * encryption types available for setting up a CC/association. - */ -struct usb_security_descriptor { - u8 bLength; - u8 bDescriptorType; - - u16 wTotalLength; - u8 bNumEncryptionTypes; -}; - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_KEY: used with {GET,SET}_SECURITY_DATA; only public keys - * may be retrieved. - */ -struct usb_key_descriptor { - u8 bLength; - u8 bDescriptorType; - - u8 tTKID[3]; - u8 bReserved; - u8 bKeyData[0]; -}; - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_ENCRYPTION_TYPE: bundled in DT_SECURITY groups */ -struct usb_encryption_descriptor { - u8 bLength; - u8 bDescriptorType; - - u8 bEncryptionType; -#define USB_ENC_TYPE_UNSECURE 0 -#define USB_ENC_TYPE_WIRED 1 /* non-wireless mode */ -#define USB_ENC_TYPE_CCM_1 2 /* aes128/cbc session */ -#define USB_ENC_TYPE_RSA_1 3 /* rsa3072/sha1 auth */ - u8 bEncryptionValue; /* use in SET_ENCRYPTION */ - u8 bAuthKeyIndex; -}; - - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_BOS: group of wireless capabilities */ -struct usb_bos_descriptor { - u8 bLength; - u8 bDescriptorType; - - u16 wTotalLength; - u8 bNumDeviceCaps; -}; - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_DEVICE_CAPABILITY: grouped with BOS */ -struct usb_dev_cap_header { - u8 bLength; - u8 bDescriptorType; - u8 bDevCapabilityType; -}; - -#define USB_CAP_TYPE_WIRELESS_USB 1 - -struct usb_wireless_cap_descriptor { /* Ultra Wide Band */ - u8 bLength; - u8 bDescriptorType; - u8 bDevCapabilityType; - - u8 bmAttributes; -#define USB_WIRELESS_P2P_DRD (1 << 1) -#define USB_WIRELESS_BEACON_MASK (3 << 2) -#define USB_WIRELESS_BEACON_SELF (1 << 2) -#define USB_WIRELESS_BEACON_DIRECTED (2 << 2) -#define USB_WIRELESS_BEACON_NONE (3 << 2) - u16 wPHYRates; /* bit rates, Mbps */ -#define USB_WIRELESS_PHY_53 (1 << 0) /* always set */ -#define USB_WIRELESS_PHY_80 (1 << 1) -#define USB_WIRELESS_PHY_107 (1 << 2) /* always set */ -#define USB_WIRELESS_PHY_160 (1 << 3) -#define USB_WIRELESS_PHY_200 (1 << 4) /* always set */ -#define USB_WIRELESS_PHY_320 (1 << 5) -#define USB_WIRELESS_PHY_400 (1 << 6) -#define USB_WIRELESS_PHY_480 (1 << 7) - u8 bmTFITXPowerInfo; /* TFI power levels */ - u8 bmFFITXPowerInfo; /* FFI power levels */ - u16 bmBandGroup; - u8 bReserved; -}; - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_WIRELESS_ENDPOINT_COMP: companion descriptor associated with - * each endpoint descriptor for a wireless device - */ -struct usb_wireless_ep_comp_descriptor { - u8 bLength; - u8 bDescriptorType; - - u8 bMaxBurst; - u8 bMaxSequence; - u16 wMaxStreamDelay; - u16 wOverTheAirPacketSize; - u8 bOverTheAirInterval; - u8 bmCompAttributes; -#define USB_ENDPOINT_SWITCH_MASK 0x03 /* in bmCompAttributes */ -#define USB_ENDPOINT_SWITCH_NO 0 -#define USB_ENDPOINT_SWITCH_SWITCH 1 -#define USB_ENDPOINT_SWITCH_SCALE 2 -}; - -/*-------------------------------------------------------------------------*/ - -/* USB_REQ_SET_HANDSHAKE is a four-way handshake used between a wireless - * host and a device for connection set up, mutual authentication, and - * exchanging short lived session keys. The handshake depends on a CC. - */ -struct usb_handshake { - u8 bMessageNumber; - u8 bStatus; - u8 tTKID[3]; - u8 bReserved; - u8 CDID[16]; - u8 nonce[16]; - u8 MIC[8]; -}; - - -/*-------------------------------------------------------------------------*/ - -/* USB_REQ_SET_CONNECTION modifies or revokes a connection context (CC). - * A CC may also be set up using non-wireless secure channels (including - * wired USB!), and some devices may support CCs with multiple hosts. - */ -struct usb_connection_context { - u8 CHID[16]; /* persistent host id */ - u8 CDID[16]; /* device id (unique w/in host context) */ - u8 CK[16]; /* connection key */ -}; - -/*-------------------------------------------------------------------------*/ - -#if 1 - - - - -enum usb_device_state { - /* NOTATTACHED isn't in the USB spec, and this state acts - * the same as ATTACHED ... but it's clearer this way. - */ - USB_STATE_NOTATTACHED = 0, - - /* chapter 9 and authentication (wireless) device states */ - USB_STATE_ATTACHED, - USB_STATE_POWERED, /* wired */ - USB_STATE_UNAUTHENTICATED, /* auth */ - USB_STATE_RECONNECTING, /* auth */ - USB_STATE_DEFAULT, /* limited function */ - USB_STATE_ADDRESS, - USB_STATE_CONFIGURED, /* most functions */ - - USB_STATE_SUSPENDED - - /* NOTE: there are actually four different SUSPENDED - * states, returning to POWERED, DEFAULT, ADDRESS, or - * CONFIGURED respectively when SOF tokens flow again. - */ -}; -#endif -#endif /* __LINUX_USB_CH9_H */ - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_defs.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_defs.h deleted file mode 100644 index d57bc9f..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_defs.h +++ /dev/null @@ -1,378 +0,0 @@ -/* - * (C) Copyright 2001 - * Denis Peter, MPL AG Switzerland - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - * Note: Part of this code has been derived from linux - * - */ -#ifndef _USB_DEFS_H_ -#define _USB_DEFS_H_ -/* USB constants */ - -/* Device and/or Interface Class codes */ -#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */ -#define USB_CLASS_AUDIO 1 -#define USB_CLASS_COMM 2 -#define USB_CLASS_HID 3 -#define USB_CLASS_PHYSICAL 5 -#define USB_CLASS_STILL_IMAGE 6 - -#define USB_CLASS_PRINTER 7 -#define USB_CLASS_MASS_STORAGE 8 -#define USB_CLASS_HUB 9 -#define USB_CLASS_CDC_DATA 0x0a - -#define USB_CLASS_DATA 10 -#define USB_CLASS_CSCID 0x0b /* chip+ smart card */ -#define USB_CLASS_CONTENT_SEC 0x0d /* content security */ -#define USB_CLASS_VIDEO 0x0e -#define USB_CLASS_WIRELESS_CONTROLLER 0xe0 -#define USB_CLASS_APP_SPEC 0xfe - -#define USB_CLASS_VENDOR_SPEC 0xff - -/* some HID sub classes */ -#define USB_SUB_HID_NONE 0 -#define USB_SUB_HID_BOOT 1 - -/* some UID Protocols */ -#define USB_PROT_HID_NONE 0 -#define USB_PROT_HID_KEYBOARD 1 -#define USB_PROT_HID_MOUSE 2 - - -/* Sub STORAGE Classes */ -#define US_SC_RBC 1 /* Typically, flash devices */ -#define US_SC_8020 2 /* CD-ROM */ -#define US_SC_QIC 3 /* QIC-157 Tapes */ -#define US_SC_UFI 4 /* Floppy */ -#define US_SC_8070 5 /* Removable media */ -#define US_SC_SCSI 6 /* Transparent */ -#define US_SC_MIN US_SC_RBC -#define US_SC_MAX US_SC_SCSI - -/* STORAGE Protocols */ -#define US_PR_CB 1 /* Control/Bulk w/o interrupt */ -#define US_PR_CBI 0 /* Control/Bulk/Interrupt */ -#define US_PR_BULK 0x50 /* bulk only */ - -/* USB types */ -#define USB_TYPE_STANDARD (0x00 << 5) -#define USB_TYPE_CLASS (0x01 << 5) -#define USB_TYPE_VENDOR (0x02 << 5) -#define USB_TYPE_RESERVED (0x03 << 5) - -/* USB recipients */ -#define USB_RECIP_DEVICE 0x00 -#define USB_RECIP_INTERFACE 0x01 -#define USB_RECIP_ENDPOINT 0x02 -#define USB_RECIP_OTHER 0x03 - - -#define USB_DT_CS_DEVICE 0x21 -#define USB_DT_CS_CONFIG 0x22 -#define USB_DT_CS_STRING 0x23 -#define USB_DT_CS_INTERFACE 0x24 -#define USB_DT_CS_ENDPOINT 0x25 - - -/* USB directions */ -#define USB_DIR_OUT 0 /* to device */ -#define USB_DIR_IN 0x80 /* to host */ - -#if 0 -enum usb_device_speed { - USB_SPEED_UNKNOWN = 0, /* enumerating */ - USB_SPEED_LOW, - USB_SPEED_FULL, /* usb 1.1 */ - USB_SPEED_HIGH, /* usb 2.0 */ -}; -#else -enum usb_device_speed { - USB_SPEED_UNKNOWN = 0, /* enumerating */ - USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */ - USB_SPEED_HIGH, /* usb 2.0 */ - USB_SPEED_VARIABLE, /* wireless (usb 2.5) */ -}; - -#endif -/* Descriptor types */ -#define USB_DT_DEVICE 0x01 -#define USB_DT_CONFIG 0x02 -#define USB_DT_STRING 0x03 -#define USB_DT_INTERFACE 0x04 -#define USB_DT_ENDPOINT 0x05 -#define USB_DT_DEVICE_QUALIFIER 0x06 -#define USB_DT_OTHER_SPEED_CONFIG 0x07 -#define USB_DT_INTERFACE_POWER 0x08 -/* these are from a minor usb 2.0 revision (ECN) */ -#define USB_DT_OTG 0x09 -#define USB_DT_DEBUG 0x0a -#define USB_DT_INTERFACE_ASSOCIATION 0x0b -/* these are from the Wireless USB spec */ -#define USB_DT_SECURITY 0x0c -#define USB_DT_KEY 0x0d -#define USB_DT_ENCRYPTION_TYPE 0x0e -#define USB_DT_BOS 0x0f -#define USB_DT_DEVICE_CAPABILITY 0x10 -#define USB_DT_WIRELESS_ENDPOINT_COMP 0x11 -#define USB_DT_WIRE_ADAPTER 0x21 -#define USB_DT_RPIPE 0x22 - -//#define USB_DT_INTERFACE_ASSOCIATION 0x0b - -#define USB_DT_HID (USB_TYPE_CLASS | 0x01) -#define USB_DT_REPORT (USB_TYPE_CLASS | 0x02) -#define USB_DT_PHYSICAL (USB_TYPE_CLASS | 0x03) -#define USB_DT_HUB (USB_TYPE_CLASS | 0x09) - -/* Descriptor sizes per descriptor type */ -#define USB_DT_DEVICE_SIZE 18 -#define USB_DT_CONFIG_SIZE 9 -#define USB_DT_INTERFACE_SIZE 9 -#define USB_DT_ENDPOINT_SIZE 7 -#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ -#define USB_DT_HUB_NONVAR_SIZE 7 -#define USB_DT_HID_SIZE 9 - -/* Endpoints */ -#define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */ -#define USB_ENDPOINT_DIR_MASK 0x80 - -#define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */ -#define USB_ENDPOINT_XFER_CONTROL 0 -#define USB_ENDPOINT_XFER_ISOC 1 -#define USB_ENDPOINT_XFER_BULK 2 -#define USB_ENDPOINT_XFER_INT 3 - -#define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */ - -/* USB Packet IDs (PIDs) */ -#define USB_PID_UNDEF_0 0xf0 -#define USB_PID_OUT 0xe1 -#define USB_PID_ACK 0xd2 -#define USB_PID_DATA0 0xc3 -#define USB_PID_UNDEF_4 0xb4 -#define USB_PID_SOF 0xa5 -#define USB_PID_UNDEF_6 0x96 -#define USB_PID_UNDEF_7 0x87 -#define USB_PID_UNDEF_8 0x78 -#define USB_PID_IN 0x69 -#define USB_PID_NAK 0x5a -#define USB_PID_DATA1 0x4b -#define USB_PID_PREAMBLE 0x3c -#define USB_PID_SETUP 0x2d -#define USB_PID_STALL 0x1e -#define USB_PID_UNDEF_F 0x0f - -/* Standard requests */ -#define USB_REQ_GET_STATUS 0x00 -#define USB_REQ_CLEAR_FEATURE 0x01 -#define USB_REQ_SET_FEATURE 0x03 -#define USB_REQ_SET_ADDRESS 0x05 -#define USB_REQ_GET_DESCRIPTOR 0x06 -#define USB_REQ_SET_DESCRIPTOR 0x07 -#define USB_REQ_GET_CONFIGURATION 0x08 -#define USB_REQ_SET_CONFIGURATION 0x09 -#define USB_REQ_GET_INTERFACE 0x0A -#define USB_REQ_SET_INTERFACE 0x0B -#define USB_REQ_SYNCH_FRAME 0x0C - -/* HID requests */ -#define USB_REQ_GET_REPORT 0x01 -#define USB_REQ_GET_IDLE 0x02 -#define USB_REQ_GET_PROTOCOL 0x03 -#define USB_REQ_SET_REPORT 0x09 -#define USB_REQ_SET_IDLE 0x0A -#define USB_REQ_SET_PROTOCOL 0x0B - - -/* "pipe" definitions */ - -#define PIPE_ISOCHRONOUS 0 -#define PIPE_INTERRUPT 1 -#define PIPE_CONTROL 2 -#define PIPE_BULK 3 -#define PIPE_DEVEP_MASK 0x0007ff00 - -#define USB_ISOCHRONOUS 0 -#define USB_INTERRUPT 1 -#define USB_CONTROL 2 -#define USB_BULK 3 - -/* USB-status codes: */ -#define USB_ST_ACTIVE 0x1 /* TD is active */ -#define USB_ST_STALLED 0x2 /* TD is stalled */ -#define USB_ST_BUF_ERR 0x4 /* buffer error */ -#define USB_ST_BABBLE_DET 0x8 /* Babble detected */ -#define USB_ST_NAK_REC 0x10 /* NAK Received*/ -#define USB_ST_CRC_ERR 0x20 /* CRC/timeout Error */ -#define USB_ST_BIT_ERR 0x40 /* Bitstuff error */ -#define USB_ST_NOT_PROC 0x80000000L /* Not yet processed */ - - -/************************************************************************* - * Hub defines - */ - -/* - * Hub request types - */ - -#define USB_RT_HUB (USB_TYPE_CLASS | USB_RECIP_DEVICE) -#define USB_RT_PORT (USB_TYPE_CLASS | USB_RECIP_OTHER) - -/* - * Hub Class feature numbers - */ -#define C_HUB_LOCAL_POWER 0 -#define C_HUB_OVER_CURRENT 1 - -/* - * Port feature numbers - */ -#define USB_PORT_FEAT_CONNECTION 0 -#define USB_PORT_FEAT_ENABLE 1 -#define USB_PORT_FEAT_SUSPEND 2 -#define USB_PORT_FEAT_OVER_CURRENT 3 -#define USB_PORT_FEAT_RESET 4 -#define USB_PORT_FEAT_POWER 8 -#define USB_PORT_FEAT_LOWSPEED 9 -#define USB_PORT_FEAT_HIGHSPEED 10 -#define USB_PORT_FEAT_C_CONNECTION 16 -#define USB_PORT_FEAT_C_ENABLE 17 -#define USB_PORT_FEAT_C_SUSPEND 18 -#define USB_PORT_FEAT_C_OVER_CURRENT 19 -#define USB_PORT_FEAT_C_RESET 20 - -/* wPortStatus bits */ -#define USB_PORT_STAT_CONNECTION 0x0001 -#define USB_PORT_STAT_ENABLE 0x0002 -#define USB_PORT_STAT_SUSPEND 0x0004 -#define USB_PORT_STAT_OVERCURRENT 0x0008 -#define USB_PORT_STAT_RESET 0x0010 -#define USB_PORT_STAT_POWER 0x0100 -#define USB_PORT_STAT_LOW_SPEED 0x0200 -#define USB_PORT_STAT_HIGH_SPEED 0x0400 /* support for EHCI */ -#define USB_PORT_STAT_SPEED \ - (USB_PORT_STAT_LOW_SPEED | USB_PORT_STAT_HIGH_SPEED) - -/* wPortChange bits */ -#define USB_PORT_STAT_C_CONNECTION 0x0001 -#define USB_PORT_STAT_C_ENABLE 0x0002 -#define USB_PORT_STAT_C_SUSPEND 0x0004 -#define USB_PORT_STAT_C_OVERCURRENT 0x0008 -#define USB_PORT_STAT_C_RESET 0x0010 - -/* wHubCharacteristics (masks) */ -#define HUB_CHAR_LPSM 0x0003 -#define HUB_CHAR_COMPOUND 0x0004 -#define HUB_CHAR_OCPM 0x0018 - -/* - *Hub Status & Hub Change bit masks - */ -#define HUB_STATUS_LOCAL_POWER 0x0001 -#define HUB_STATUS_OVERCURRENT 0x0002 - -#define HUB_CHANGE_LOCAL_POWER 0x0001 -#define HUB_CHANGE_OVERCURRENT 0x0002 - -/* Struct USB_HCD defination */ -// for flags -#define HCD_FLAG_HW_ACCESSIBLE 0 /* at full power */ -#define HCD_FLAG_POLL_RH 2 /* poll for rh status? */ -#define HCD_FLAG_POLL_PENDING 3 /* status has changed? */ -#define HCD_FLAG_WAKEUP_PENDING 4 /* root hub is resuming? */ -#define HCD_FLAG_RH_RUNNING 5 /* root hub is running? */ -#define HCD_FLAG_DEAD 6 /* controller has died? */ - -/* The flags can be tested using these macros; they are likely to - * be slightly faster than test_bit(). - */ -#define HCD_HW_ACCESSIBLE(hcd) ((hcd)->flags & (1U << HCD_FLAG_HW_ACCESSIBLE)) -#define HCD_POLL_RH(hcd) ((hcd)->flags & (1U << HCD_FLAG_POLL_RH)) -#define HCD_POLL_PENDING(hcd) ((hcd)->flags & (1U << HCD_FLAG_POLL_PENDING)) -#define HCD_WAKEUP_PENDING(hcd) ((hcd)->flags & (1U << HCD_FLAG_WAKEUP_PENDING)) -#define HCD_RH_RUNNING(hcd) ((hcd)->flags & (1U << HCD_FLAG_RH_RUNNING)) -#define HCD_DEAD(hcd) ((hcd)->flags & (1U << HCD_FLAG_DEAD)) - -// for state -#define __ACTIVE 0x01 -#define __SUSPEND 0x04 -#define __TRANSIENT 0x80 - -#define HC_STATE_HALT 0 -#define HC_STATE_RUNNING (__ACTIVE) -#define HC_STATE_QUIESCING (__SUSPEND|__TRANSIENT|__ACTIVE) -#define HC_STATE_RESUMING (__SUSPEND|__TRANSIENT) -#define HC_STATE_SUSPENDED (__SUSPEND) - -#define HC_IS_RUNNING(state) ((state) & __ACTIVE) -#define HC_IS_SUSPENDED(state) ((state) & __SUSPEND) - -/* - * USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and - * are read as a bit array returned by USB_REQ_GET_STATUS. (So there - * are at most sixteen features of each type.) Hubs may also support a - * new USB_REQ_TEST_AND_SET_FEATURE to put ports into L1 suspend. - */ -#define USB_DEVICE_SELF_POWERED 0 /* (read only) */ -#define USB_DEVICE_REMOTE_WAKEUP 1 /* dev may initiate wakeup */ -#define USB_DEVICE_TEST_MODE 2 /* (wired high speed only) */ -#define USB_DEVICE_BATTERY 2 /* (wireless) */ -#define USB_DEVICE_B_HNP_ENABLE 3 /* (otg) dev may initiate HNP */ -#define USB_DEVICE_WUSB_DEVICE 3 /* (wireless)*/ -#define USB_DEVICE_A_HNP_SUPPORT 4 /* (otg) RH port supports HNP */ -#define USB_DEVICE_A_ALT_HNP_SUPPORT 5 /* (otg) other RH port does */ -#define USB_DEVICE_DEBUG_MODE 6 /* (special devices only) */ - -/* (shifted) direction/type/recipient from the USB 2.0 spec, table 9.2 */ -#define DeviceRequest \ - ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8) -#define DeviceOutRequest \ - ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8) - -#define InterfaceRequest \ - ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) - -#define EndpointRequest \ - ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) -#define EndpointOutRequest \ - ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) - -/* class requests from the USB 2.0 hub spec, table 11-15 */ -/* GetBusState and SetHubDescriptor are optional, omitted */ -#define ClearHubFeature (0x2000 | USB_REQ_CLEAR_FEATURE) -#define ClearPortFeature (0x2300 | USB_REQ_CLEAR_FEATURE) -#define GetHubDescriptor (0xa000 | USB_REQ_GET_DESCRIPTOR) -#define GetHubStatus (0xa000 | USB_REQ_GET_STATUS) -#define GetPortStatus (0xa300 | USB_REQ_GET_STATUS) -#define SetHubFeature (0x2000 | USB_REQ_SET_FEATURE) -#define SetPortFeature (0x2300 | USB_REQ_SET_FEATURE) - -/* from config descriptor bmAttributes */ -#define USB_CONFIG_ATT_ONE (1 << 7) /* must be set */ -#define USB_CONFIG_ATT_SELFPOWER (1 << 6) /* self powered */ -#define USB_CONFIG_ATT_WAKEUP (1 << 5) /* can wakeup */ -#define USB_CONFIG_ATT_BATTERY (1 << 4) /* battery powered */ - -#endif /*_USB_DEFS_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_gadget.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_gadget.h deleted file mode 100644 index 9843131..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_gadget.h +++ /dev/null @@ -1,937 +0,0 @@ -/* - * - * - * We call the USB code inside a Linux-based peripheral device a "gadget" - * driver, except for the hardware-specific bus glue. One USB host can - * master many USB gadgets, but the gadgets are only slaved to one host. - * - * - * (C) Copyright 2002-2004 by David Brownell - * All Rights Reserved. - * - * This software is licensed under the GNU GPL version 2. - */ - -#ifndef __USB_GADGET_H -#define __USB_GADGET_H - -//#include "xlinux.h" - -//#ifdef __KERNEL__ -#include "osdep_api.h" -#include "usb_ch9.h" - -#if 1//defined(CONFIG_RTL_ULINKER) -#include "usb_ulinker.h" -#endif - -#include "usb.h" -#include "dwc_list.h" -typedef unsigned int gfp_t; - -//struct usb_ep; -/** - * struct usb_ep - device side representation of USB endpoint - * @name:identifier for the endpoint, such as "ep-a" or "ep9in-bulk" - * @ops: Function pointers used to access hardware-specific operations. - * @ep_list:the gadget's ep_list holds all of its endpoints - * @maxpacket:The maximum packet size used on this endpoint. The initial - * value can sometimes be reduced (hardware allowing), according to - * the endpoint descriptor used to configure the endpoint. - * @driver_data:for use by the gadget driver. all other fields are - * read-only to gadget drivers. - * - * the bus controller driver lists all the general purpose endpoints in - * gadget->ep_list. the control endpoint (gadget->ep0) is not in that list, - * and is accessed only in response to a driver setup() callback. - */ -struct usb_ep { - void *driver_data; - - const char *name; - const struct usb_ep_ops *ops; - //_LIST ep_list;//ModifiedByJD - dwc_list_link_t ep_list;// by jimmy - unsigned maxpacket:16; - const struct usb_endpoint_descriptor *desc; -}; - -struct usb_request; - -typedef void (*usb_req_complete_t)(struct usb_ep *, struct usb_request *); - - -/** - * struct usb_request - describes one i/o request - * @buf: Buffer used for data. Always provide this; some controllers - * only use PIO, or don't use DMA for some endpoints. - * @dma: DMA address corresponding to 'buf'. If you don't set this - * field, and the usb controller needs one, it is responsible - * for mapping and unmapping the buffer. - * @length: Length of that data - * @no_interrupt: If true, hints that no completion irq is needed. - * Helpful sometimes with deep request queues that are handled - * directly by DMA controllers. - * @zero: If true, when writing data, makes the last packet be "short" - * by adding a zero length packet as needed; - * @short_not_ok: When reading data, makes short packets be - * treated as errors (queue stops advancing till cleanup). - * @complete: Function called when request completes, so this request and - * its buffer may be re-used. - * Reads terminate with a short packet, or when the buffer fills, - * whichever comes first. When writes terminate, some data bytes - * will usually still be in flight (often in a hardware fifo). - * Errors (for reads or writes) stop the queue from advancing - * until the completion function returns, so that any transfers - * invalidated by the error may first be dequeued. - * @context: For use by the completion callback - * @list: For use by the gadget driver. - * @status: Reports completion code, zero or a negative errno. - * Normally, faults block the transfer queue from advancing until - * the completion callback returns. - * Code "-ESHUTDOWN" indicates completion caused by device disconnect, - * or when the driver disabled the endpoint. - * @actual: Reports bytes transferred to/from the buffer. For reads (OUT - * transfers) this may be less than the requested length. If the - * short_not_ok flag is set, short reads are treated as errors - * even when status otherwise indicates successful completion. - * Note that for writes (IN transfers) some data bytes may still - * reside in a device-side FIFO when the request is reported as - * complete. - * - * These are allocated/freed through the endpoint they're used with. The - * hardware's driver can add extra per-request data to the memory it returns, - * which often avoids separate memory allocations (potential failures), - * later when the request is queued. - * - * Request flags affect request handling, such as whether a zero length - * packet is written (the "zero" flag), whether a short read should be - * treated as an error (blocking request queue advance, the "short_not_ok" - * flag), or hinting that an interrupt is not required (the "no_interrupt" - * flag, for use with deep request queues). - * - * Bulk endpoints can use any size buffers, and can also be used for interrupt - * transfers. interrupt-only endpoints can be much less functional. - */ - // NOTE this is analagous to 'struct urb' on the host side, - // except that it's thinner and promotes more pre-allocation. - -struct usb_request { - void *buf; - unsigned length; - dma_addr_t dma; - - unsigned no_interrupt:1; - unsigned zero:1; - unsigned short_not_ok:1; - - usb_req_complete_t complete; - void *context; - //_LIST list;//ModifiedByJD - dwc_list_link_t list;// by jimmy - int status; - unsigned actual; -}; - -/*-------------------------------------------------------------------------*/ - -/* endpoint-specific parts of the api to the usb controller hardware. - * unlike the urb model, (de)multiplexing layers are not required. - * (so this api could slash overhead if used on the host side...) - * - * note that device side usb controllers commonly differ in how many - * endpoints they support, as well as their capabilities. - */ -struct usb_ep_ops { - int (*enable) (struct usb_ep *ep, - const struct usb_endpoint_descriptor *desc); - int (*disable) (struct usb_ep *ep); - - struct usb_request *(*alloc_request) (struct usb_ep *ep, - gfp_t gfp_flags); - void (*free_request) (struct usb_ep *ep, struct usb_request *req); - - void *(*alloc_buffer) (struct usb_ep *ep, unsigned bytes, - dma_addr_t *dma, gfp_t gfp_flags); - void (*free_buffer) (struct usb_ep *ep, void *buf, dma_addr_t dma, - unsigned bytes); - // NOTE: on 2.6, drivers may also use dma_map() and - // dma_sync_single_*() to directly manage dma overhead. - - int (*queue) (struct usb_ep *ep, struct usb_request *req, - gfp_t gfp_flags); - int (*dequeue) (struct usb_ep *ep, struct usb_request *req); - - int (*set_halt) (struct usb_ep *ep, int value); - int (*fifo_status) (struct usb_ep *ep); - void (*fifo_flush) (struct usb_ep *ep); -}; - -/*-------------------------------------------------------------------------*/ - -/** - * usb_ep_enable - configure endpoint, making it usable - * @ep:the endpoint being configured. may not be the endpoint named "ep0". - * drivers discover endpoints through the ep_list of a usb_gadget. - * @desc:descriptor for desired behavior. caller guarantees this pointer - * remains valid until the endpoint is disabled; the data byte order - * is little-endian (usb-standard). - * - * when configurations are set, or when interface settings change, the driver - * will enable or disable the relevant endpoints. while it is enabled, an - * endpoint may be used for i/o until the driver receives a disconnect() from - * the host or until the endpoint is disabled. - * - * the ep0 implementation (which calls this routine) must ensure that the - * hardware capabilities of each endpoint match the descriptor provided - * for it. for example, an endpoint named "ep2in-bulk" would be usable - * for interrupt transfers as well as bulk, but it likely couldn't be used - * for iso transfers or for endpoint 14. some endpoints are fully - * configurable, with more generic names like "ep-a". (remember that for - * USB, "in" means "towards the USB master".) - * - * returns zero, or a negative error code. - */ -extern _LONG_CALL_ -int usb_ep_enable (struct usb_ep *ep, const struct usb_endpoint_descriptor *desc); - -/** - * usb_ep_disable - endpoint is no longer usable - * @ep:the endpoint being unconfigured. may not be the endpoint named "ep0". - * - * no other task may be using this endpoint when this is called. - * any pending and uncompleted requests will complete with status - * indicating disconnect (-ESHUTDOWN) before this call returns. - * gadget drivers must call usb_ep_enable() again before queueing - * requests to the endpoint. - * - * returns zero, or a negative error code. - */ -extern _LONG_CALL_ -int usb_ep_disable (struct usb_ep *ep); - -/** - * usb_ep_alloc_request - allocate a request object to use with this endpoint - * @ep:the endpoint to be used with with the request - * @gfp_flags:GFP_* flags to use - * - * Request objects must be allocated with this call, since they normally - * need controller-specific setup and may even need endpoint-specific - * resources such as allocation of DMA descriptors. - * Requests may be submitted with usb_ep_queue(), and receive a single - * completion callback. Free requests with usb_ep_free_request(), when - * they are no longer needed. - * - * Returns the request, or null if one could not be allocated. - */ -extern _LONG_CALL_ struct usb_request * -usb_ep_alloc_request (struct usb_ep *ep, gfp_t gfp_flags); - -/** - * usb_ep_free_request - frees a request object - * @ep:the endpoint associated with the request - * @req:the request being freed - * - * Reverses the effect of usb_ep_alloc_request(). - * Caller guarantees the request is not queued, and that it will - * no longer be requeued (or otherwise used). - */ -extern _LONG_CALL_ void -usb_ep_free_request (struct usb_ep *ep, struct usb_request *req); -#if 0 -/** - * usb_ep_alloc_buffer - allocate an I/O buffer - * @ep:the endpoint associated with the buffer - * @len:length of the desired buffer - * @dma:pointer to the buffer's DMA address; must be valid - * @gfp_flags:GFP_* flags to use - * - * Returns a new buffer, or null if one could not be allocated. - * The buffer is suitably aligned for dma, if that endpoint uses DMA, - * and the caller won't have to care about dma-inconsistency - * or any hidden "bounce buffer" mechanism. No additional per-request - * DMA mapping will be required for such buffers. - * Free it later with usb_ep_free_buffer(). - * - * You don't need to use this call to allocate I/O buffers unless you - * want to make sure drivers don't incur costs for such "bounce buffer" - * copies or per-request DMA mappings. - */ -static inline void * -usb_ep_alloc_buffer (struct usb_ep *ep, unsigned len, dma_addr_t *dma, - gfp_t gfp_flags) -{ - return ep->ops->alloc_buffer (ep, len, dma, gfp_flags); -} - -/** - * usb_ep_free_buffer - frees an i/o buffer - * @ep:the endpoint associated with the buffer - * @buf:CPU view address of the buffer - * @dma:the buffer's DMA address - * @len:length of the buffer - * - * reverses the effect of usb_ep_alloc_buffer(). - * caller guarantees the buffer will no longer be accessed - */ -static inline void -usb_ep_free_buffer (struct usb_ep *ep, void *buf, dma_addr_t dma, unsigned len) -{ - ep->ops->free_buffer (ep, buf, dma, len); -} -#endif -/** - * usb_ep_queue - queues (submits) an I/O request to an endpoint. - * @ep:the endpoint associated with the request - * @req:the request being submitted - * @gfp_flags: GFP_* flags to use in case the lower level driver couldn't - * pre-allocate all necessary memory with the request. - * - * This tells the device controller to perform the specified request through - * that endpoint (reading or writing a buffer). When the request completes, - * including being canceled by usb_ep_dequeue(), the request's completion - * routine is called to return the request to the driver. Any endpoint - * (except control endpoints like ep0) may have more than one transfer - * request queued; they complete in FIFO order. Once a gadget driver - * submits a request, that request may not be examined or modified until it - * is given back to that driver through the completion callback. - * - * Each request is turned into one or more packets. The controller driver - * never merges adjacent requests into the same packet. OUT transfers - * will sometimes use data that's already buffered in the hardware. - * Drivers can rely on the fact that the first byte of the request's buffer - * always corresponds to the first byte of some USB packet, for both - * IN and OUT transfers. - * - * Bulk endpoints can queue any amount of data; the transfer is packetized - * automatically. The last packet will be short if the request doesn't fill it - * out completely. Zero length packets (ZLPs) should be avoided in portable - * protocols since not all usb hardware can successfully handle zero length - * packets. (ZLPs may be explicitly written, and may be implicitly written if - * the request 'zero' flag is set.) Bulk endpoints may also be used - * for interrupt transfers; but the reverse is not true, and some endpoints - * won't support every interrupt transfer. (Such as 768 byte packets.) - * - * Interrupt-only endpoints are less functional than bulk endpoints, for - * example by not supporting queueing or not handling buffers that are - * larger than the endpoint's maxpacket size. They may also treat data - * toggle differently. - * - * Control endpoints ... after getting a setup() callback, the driver queues - * one response (even if it would be zero length). That enables the - * status ack, after transfering data as specified in the response. Setup - * functions may return negative error codes to generate protocol stalls. - * (Note that some USB device controllers disallow protocol stall responses - * in some cases.) When control responses are deferred (the response is - * written after the setup callback returns), then usb_ep_set_halt() may be - * used on ep0 to trigger protocol stalls. - * - * For periodic endpoints, like interrupt or isochronous ones, the usb host - * arranges to poll once per interval, and the gadget driver usually will - * have queued some data to transfer at that time. - * - * Returns zero, or a negative error code. Endpoints that are not enabled - * report errors; errors will also be - * reported when the usb peripheral is disconnected. - */ -extern _LONG_CALL_ int -usb_ep_queue (struct usb_ep *ep, struct usb_request *req, gfp_t gfp_flags); - -/** - * usb_ep_dequeue - dequeues (cancels, unlinks) an I/O request from an endpoint - * @ep:the endpoint associated with the request - * @req:the request being canceled - * - * if the request is still active on the endpoint, it is dequeued and its - * completion routine is called (with status -ECONNRESET); else a negative - * error code is returned. - * - * note that some hardware can't clear out write fifos (to unlink the request - * at the head of the queue) except as part of disconnecting from usb. such - * restrictions prevent drivers from supporting configuration changes, - * even to configuration zero (a "chapter 9" requirement). - */ -extern _LONG_CALL_ int usb_ep_dequeue (struct usb_ep *ep, struct usb_request *req); - -/** - * usb_ep_set_halt - sets the endpoint halt feature. - * @ep: the non-isochronous endpoint being stalled - * - * Use this to stall an endpoint, perhaps as an error report. - * Except for control endpoints, - * the endpoint stays halted (will not stream any data) until the host - * clears this feature; drivers may need to empty the endpoint's request - * queue first, to make sure no inappropriate transfers happen. - * - * Note that while an endpoint CLEAR_FEATURE will be invisible to the - * gadget driver, a SET_INTERFACE will not be. To reset endpoints for the - * current altsetting, see usb_ep_clear_halt(). When switching altsettings, - * it's simplest to use usb_ep_enable() or usb_ep_disable() for the endpoints. - * - * Returns zero, or a negative error code. On success, this call sets - * underlying hardware state that blocks data transfers. - * Attempts to halt IN endpoints will fail (returning -EAGAIN) if any - * transfer requests are still queued, or if the controller hardware - * (usually a FIFO) still holds bytes that the host hasn't collected. - */ -extern _LONG_CALL_ int usb_ep_set_halt (struct usb_ep *ep); - -/** - * usb_ep_clear_halt - clears endpoint halt, and resets toggle - * @ep:the bulk or interrupt endpoint being reset - * - * Use this when responding to the standard usb "set interface" request, - * for endpoints that aren't reconfigured, after clearing any other state - * in the endpoint's i/o queue. - * - * Returns zero, or a negative error code. On success, this call clears - * the underlying hardware state reflecting endpoint halt and data toggle. - * Note that some hardware can't support this request (like pxa2xx_udc), - * and accordingly can't correctly implement interface altsettings. - */ -extern _LONG_CALL_ int usb_ep_clear_halt (struct usb_ep *ep); - -#if 0 -/** - * usb_ep_fifo_status - returns number of bytes in fifo, or error - * @ep: the endpoint whose fifo status is being checked. - * - * FIFO endpoints may have "unclaimed data" in them in certain cases, - * such as after aborted transfers. Hosts may not have collected all - * the IN data written by the gadget driver (and reported by a request - * completion). The gadget driver may not have collected all the data - * written OUT to it by the host. Drivers that need precise handling for - * fault reporting or recovery may need to use this call. - * - * This returns the number of such bytes in the fifo, or a negative - * errno if the endpoint doesn't use a FIFO or doesn't support such - * precise handling. - */ -static inline int -usb_ep_fifo_status (struct usb_ep *ep) -{ - if (ep->ops->fifo_status) - return ep->ops->fifo_status (ep); - else - return -EOPNOTSUPP; -} - -/** - * usb_ep_fifo_flush - flushes contents of a fifo - * @ep: the endpoint whose fifo is being flushed. - * - * This call may be used to flush the "unclaimed data" that may exist in - * an endpoint fifo after abnormal transaction terminations. The call - * must never be used except when endpoint is not being used for any - * protocol translation. - */ -static inline void -usb_ep_fifo_flush (struct usb_ep *ep) -{ - if (ep->ops->fifo_flush) - ep->ops->fifo_flush (ep); -} -#endif - -/*-------------------------------------------------------------------------*/ -/** - * struct usb_gadget - represents a usb slave device - * @ops: Function pointers used to access hardware-specific operations. - * @ep0: Endpoint zero, used when reading or writing responses to - * driver setup() requests - * @ep_list: List of other endpoints supported by the device. - * @speed: Speed of current connection to USB host. - * @is_dualspeed: True if the controller supports both high and full speed - * operation. If it does, the gadget driver must also support both. - * @is_otg: True if the USB device port uses a Mini-AB jack, so that the - * gadget driver must provide a USB OTG descriptor. - * @is_a_peripheral: False unless is_otg, the "A" end of a USB cable - * is in the Mini-AB jack, and HNP has been used to switch roles - * so that the "A" device currently acts as A-Peripheral, not A-Host. - * @a_hnp_support: OTG device feature flag, indicating that the A-Host - * supports HNP at this port. - * @a_alt_hnp_support: OTG device feature flag, indicating that the A-Host - * only supports HNP on a different root port. - * @b_hnp_enable: OTG device feature flag, indicating that the A-Host - * enabled HNP support. - * @name: Identifies the controller hardware type. Used in diagnostics - * and sometimes configuration. - * @dev: Driver model state for this abstract device. - * - * Gadgets have a mostly-portable "gadget driver" implementing device - * functions, handling all usb configurations and interfaces. Gadget - * drivers talk to hardware-specific code indirectly, through ops vectors. - * That insulates the gadget driver from hardware details, and packages - * the hardware endpoints through generic i/o queues. The "usb_gadget" - * and "usb_ep" interfaces provide that insulation from the hardware. - * - * Except for the driver data, all fields in this structure are - * read-only to the gadget driver. That driver data is part of the - * "driver model" infrastructure in 2.6 (and later) kernels, and for - * earlier systems is grouped in a similar structure that's not known - * to the rest of the kernel. - * - * Values of the three OTG device feature flags are updated before the - * setup() call corresponding to USB_REQ_SET_CONFIGURATION, and before - * driver suspend() calls. They are valid only when is_otg, and when the - * device is acting as a B-Peripheral (so is_a_peripheral is false). - */ -#include"rtl8195a_otg_zero.h" -struct usb_gadget { - /* readonly to gadget driver */ - const struct usb_gadget_ops *ops; - struct usb_ep *ep0; -// _LIST ep_list; /* of usb_ep */ //ModifiedByJD - dwc_list_link_t ep_list; // by jimmy - - enum usb_device_speed speed; - enum usb_device_speed max_speed; - enum usb_device_state state; - unsigned is_dualspeed:1; - unsigned is_otg:1; - unsigned is_a_peripheral:1; - unsigned b_hnp_enable:1; - unsigned a_hnp_support:1; - unsigned a_alt_hnp_support:1; - const char *name; - void *driver_data; - void *device; -}; - - - - -//struct usb_gadget; - -/* the rest of the api to the controller hardware: device operations, - * which don't involve endpoints (or i/o). - */ -struct usb_gadget_ops { - int (*get_frame)(struct usb_gadget *); - int (*wakeup)(struct usb_gadget *); - int (*set_selfpowered) (struct usb_gadget *, int is_selfpowered); - int (*vbus_session) (struct usb_gadget *, int is_active); - int (*vbus_draw) (struct usb_gadget *, unsigned mA); - int (*pullup) (struct usb_gadget *, int is_on); - int (*ioctl)(struct usb_gadget *, - unsigned code, unsigned long param); -}; - - -#if 0 //wei add -static inline void * -dev_get_drvdata (struct device *dev) -{ - return dev->driver_data; -} - -static inline void -dev_set_drvdata (struct device *dev, void *data) -{ - dev->driver_data = data; -} -#endif -#if 0 -static inline void set_gadget_data (struct usb_gadget *gadget, void *data) - { dev_set_drvdata (gadget->dev, data); } -// { gadget->dev->driver_data = data; } -static inline void *get_gadget_data (struct usb_gadget *gadget) - { return dev_get_drvdata (gadget->dev); } -// { return gadget->dev->driver_data;} -#endif - -/* iterates the non-control endpoints; 'tmp' is a struct usb_ep pointer */ -#define gadget_for_each_ep(tmp,gadget) \ - list_for_each_entry(tmp, &(gadget)->ep_list, ep_list) - -#if 0 -/** - * usb_gadget_frame_number - returns the current frame number - * @gadget: controller that reports the frame number - * - * Returns the usb frame number, normally eleven bits from a SOF packet, - * or negative errno if this device doesn't support this capability. - */ -static inline int usb_gadget_frame_number (struct usb_gadget *gadget) -{ - return gadget->ops->get_frame(gadget); -} - -/** - * usb_gadget_wakeup - tries to wake up the host connected to this gadget - * @gadget: controller used to wake up the host - * - * Returns zero on success, else negative error code if the hardware - * doesn't support such attempts, or its support has not been enabled - * by the usb host. Drivers must return device descriptors that report - * their ability to support this, or hosts won't enable it. - * - * This may also try to use SRP to wake the host and start enumeration, - * even if OTG isn't otherwise in use. OTG devices may also start - * remote wakeup even when hosts don't explicitly enable it. - */ -static inline int usb_gadget_wakeup (struct usb_gadget *gadget) -{ - if (!gadget->ops->wakeup) - return -EOPNOTSUPP; - return gadget->ops->wakeup (gadget); -} - -/** - * usb_gadget_set_selfpowered - sets the device selfpowered feature. - * @gadget:the device being declared as self-powered - * - * this affects the device status reported by the hardware driver - * to reflect that it now has a local power supply. - * - * returns zero on success, else negative errno. - */ -static inline int -usb_gadget_set_selfpowered (struct usb_gadget *gadget) -{ -xprintf("%s %s[%d]\n",__FILE__,__FUNCTION__,__LINE__); - if (!gadget->ops->set_selfpowered) - return -EOPNOTSUPP; - return gadget->ops->set_selfpowered (gadget, 1); -} - -/** - * usb_gadget_clear_selfpowered - clear the device selfpowered feature. - * @gadget:the device being declared as bus-powered - * - * this affects the device status reported by the hardware driver. - * some hardware may not support bus-powered operation, in which - * case this feature's value can never change. - * - * returns zero on success, else negative errno. - */ -static inline int -usb_gadget_clear_selfpowered (struct usb_gadget *gadget) -{ - if (!gadget->ops->set_selfpowered) - return -EOPNOTSUPP; - return gadget->ops->set_selfpowered (gadget, 0); -} - -/** - * usb_gadget_vbus_connect - Notify controller that VBUS is powered - * @gadget:The device which now has VBUS power. - * - * This call is used by a driver for an external transceiver (or GPIO) - * that detects a VBUS power session starting. Common responses include - * resuming the controller, activating the D+ (or D-) pullup to let the - * host detect that a USB device is attached, and starting to draw power - * (8mA or possibly more, especially after SET_CONFIGURATION). - * - * Returns zero on success, else negative errno. - */ -static inline int -usb_gadget_vbus_connect(struct usb_gadget *gadget) -{ - if (!gadget->ops->vbus_session) - return -EOPNOTSUPP; - return gadget->ops->vbus_session (gadget, 1); -} -#endif -/** - * usb_gadget_vbus_draw - constrain controller's VBUS power usage - * @gadget:The device whose VBUS usage is being described - * @mA:How much current to draw, in milliAmperes. This should be twice - * the value listed in the configuration descriptor bMaxPower field. - * - * This call is used by gadget drivers during SET_CONFIGURATION calls, - * reporting how much power the device may consume. For example, this - * could affect how quickly batteries are recharged. - * - * Returns zero on success, else negative errno. - */ -extern _LONG_CALL_ int -usb_gadget_vbus_draw(struct usb_gadget *gadget, unsigned mA); -#if 0 -/** - * usb_gadget_vbus_disconnect - notify controller about VBUS session end - * @gadget:the device whose VBUS supply is being described - * - * This call is used by a driver for an external transceiver (or GPIO) - * that detects a VBUS power session ending. Common responses include - * reversing everything done in usb_gadget_vbus_connect(). - * - * Returns zero on success, else negative errno. - */ -static inline int -usb_gadget_vbus_disconnect(struct usb_gadget *gadget) -{ - if (!gadget->ops->vbus_session) - return -EOPNOTSUPP; - return gadget->ops->vbus_session (gadget, 0); -} - -/** - * usb_gadget_connect - software-controlled connect to USB host - * @gadget:the peripheral being connected - * - * Enables the D+ (or potentially D-) pullup. The host will start - * enumerating this gadget when the pullup is active and a VBUS session - * is active (the link is powered). This pullup is always enabled unless - * usb_gadget_disconnect() has been used to disable it. - * - * Returns zero on success, else negative errno. - */ -static inline int -usb_gadget_connect (struct usb_gadget *gadget) -{ - if (!gadget->ops->pullup) - return -EOPNOTSUPP; - return gadget->ops->pullup (gadget, 1); -} - -/** - * usb_gadget_disconnect - software-controlled disconnect from USB host - * @gadget:the peripheral being disconnected - * - * Disables the D+ (or potentially D-) pullup, which the host may see - * as a disconnect (when a VBUS session is active). Not all systems - * support software pullup controls. - * - * This routine may be used during the gadget driver bind() call to prevent - * the peripheral from ever being visible to the USB host, unless later - * usb_gadget_connect() is called. For example, user mode components may - * need to be activated before the system can talk to hosts. - * - * Returns zero on success, else negative errno. - */ -static inline int -usb_gadget_disconnect (struct usb_gadget *gadget) -{ - if (!gadget->ops->pullup) - return -EOPNOTSUPP; - return gadget->ops->pullup (gadget, 0); -} - -#endif - -/*-------------------------------------------------------------------------*/ - -/** - * struct usb_gadget_driver - driver for usb 'slave' devices - * @function: String describing the gadget's function - * @speed: Highest speed the driver handles. - * @bind: Invoked when the driver is bound to a gadget, usually - * after registering the driver. - * At that point, ep0 is fully initialized, and ep_list holds - * the currently-available endpoints. - * Called in a context that permits sleeping. - * @setup: Invoked for ep0 control requests that aren't handled by - * the hardware level driver. Most calls must be handled by - * the gadget driver, including descriptor and configuration - * management. The 16 bit members of the setup data are in - * USB byte order. Called in_interrupt; this may not sleep. Driver - * queues a response to ep0, or returns negative to stall. - * @disconnect: Invoked after all transfers have been stopped, - * when the host is disconnected. May be called in_interrupt; this - * may not sleep. Some devices can't detect disconnect, so this might - * not be called except as part of controller shutdown. - * @unbind: Invoked when the driver is unbound from a gadget, - * usually from rmmod (after a disconnect is reported). - * Called in a context that permits sleeping. - * @suspend: Invoked on USB suspend. May be called in_interrupt. - * @resume: Invoked on USB resume. May be called in_interrupt. - * @driver: Driver model state for this driver. - * - * Devices are disabled till a gadget driver successfully bind()s, which - * means the driver will handle setup() requests needed to enumerate (and - * meet "chapter 9" requirements) then do some useful work. - * - * If gadget->is_otg is true, the gadget driver must provide an OTG - * descriptor during enumeration, or else fail the bind() call. In such - * cases, no USB traffic may flow until both bind() returns without - * having called usb_gadget_disconnect(), and the USB host stack has - * initialized. - * - * Drivers use hardware-specific knowledge to configure the usb hardware. - * endpoint addressing is only one of several hardware characteristics that - * are in descriptors the ep0 implementation returns from setup() calls. - * - * Except for ep0 implementation, most driver code shouldn't need change to - * run on top of different usb controllers. It'll use endpoints set up by - * that ep0 implementation. - * - * The usb controller driver handles a few standard usb requests. Those - * include set_address, and feature flags for devices, interfaces, and - * endpoints (the get_status, set_feature, and clear_feature requests). - * - * Accordingly, the driver's setup() callback must always implement all - * get_descriptor requests, returning at least a device descriptor and - * a configuration descriptor. Drivers must make sure the endpoint - * descriptors match any hardware constraints. Some hardware also constrains - * other descriptors. (The pxa250 allows only configurations 1, 2, or 3). - * - * The driver's setup() callback must also implement set_configuration, - * and should also implement set_interface, get_configuration, and - * get_interface. Setting a configuration (or interface) is where - * endpoints should be activated or (config 0) shut down. - * - * (Note that only the default control endpoint is supported. Neither - * hosts nor devices generally support control traffic except to ep0.) - * - * Most devices will ignore USB suspend/resume operations, and so will - * not provide those callbacks. However, some may need to change modes - * when the host is not longer directing those activities. For example, - * local controls (buttons, dials, etc) may need to be re-enabled since - * the (remote) host can't do that any longer; or an error state might - * be cleared, to make the device behave identically whether or not - * power is maintained. - */ -struct usb_gadget_driver { - char *function; - enum usb_device_speed max_speed; - int (*bind)(struct usb_gadget *, - struct usb_gadget_driver *); - void (*unbind)(struct usb_gadget *); - int (*setup)(struct usb_gadget *, const struct usb_ctrlrequest *); - //CommentedByJD int (*setup)(dwc_otg_pcd_t *, const struct usb_ctrlrequest *);//ModifiedByJD - void (*disconnect)(struct usb_gadget *); - void (*suspend)(struct usb_gadget *); - void (*resume)(struct usb_gadget *); - - // FIXME support safe rmmod -// struct device_driver *driver; - void * driver; -}; - -#include "dwc_otg_pcd_if.h" - -struct gadget_wrapper { - dwc_otg_pcd_t *pcd; - - struct usb_gadget gadget; - struct usb_gadget_driver *driver; - - struct usb_ep ep0; - struct usb_ep in_ep[16]; - struct usb_ep out_ep[16]; - -}; - - - -/*-------------------------------------------------------------------------*/ - -/* driver modules register and unregister, as usual. - * these calls must be made in a context that can sleep. - * - * these will usually be implemented directly by the hardware-dependent - * usb bus interface driver, which will only support a single driver. - */ - -/** - * usb_gadget_register_driver - register a gadget driver - * @driver:the driver being registered - * - * Call this in your gadget driver's module initialization function, - * to tell the underlying usb controller driver about your driver. - * The driver's bind() function will be called to bind it to a - * gadget before this registration call returns. It's expected that - * the bind() functions will be in init sections. - * This function must be called in a context that can sleep. - */ -extern _LONG_CALL_ int usb_gadget_register_driver (struct usb_gadget_driver *driver); - -/** - * usb_gadget_unregister_driver - unregister a gadget driver - * @driver:the driver being unregistered - * - * Call this in your gadget driver's module cleanup function, - * to tell the underlying usb controller that your driver is - * going away. If the controller is connected to a USB host, - * it will first disconnect(). The driver is also requested - * to unbind() and clean up any device state, before this procedure - * finally returns. It's expected that the unbind() functions - * will in in exit sections, so may not be linked in some kernels. - * This function must be called in a context that can sleep. - */ -extern _LONG_CALL_ int usb_gadget_unregister_driver (struct usb_gadget_driver *driver); - -/** - * usb_free_descriptors - free descriptors returned by usb_copy_descriptors() - * @v: vector of descriptors - */ -extern _LONG_CALL_ void usb_free_descriptors(struct usb_descriptor_header **v); - -/*-------------------------------------------------------------------------*/ - -/* utility to simplify dealing with string descriptors */ - -/** - * struct usb_string - wraps a C string and its USB id - * @id:the (nonzero) ID for this string - * @s:the string, in UTF-8 encoding - * - * If you're using usb_gadget_get_string(), use this to wrap a string - * together with its ID. - */ -struct usb_string { - u8 id; - const char *s; -}; - -/** - * struct usb_gadget_strings - a set of USB strings in a given language - * @language:identifies the strings' language (0x0409 for en-us) - * @strings:array of strings with their ids - * - * If you're using usb_gadget_get_string(), use this to wrap all the - * strings for a given language. - */ -struct usb_gadget_strings { - u16 language; /* 0x0409 for en-us */ - struct usb_string *strings; -}; - - -/** - * gadget_is_dualspeed - return true iff the hardware handles high speed - * @g: controller that might support both high and full speeds - */ -extern _LONG_CALL_ int gadget_is_dualspeed(struct usb_gadget *g); -#if 0 -/** - * gadget_is_superspeed() - return true if the hardware handles superspeed - * @g: controller that might support superspeed - */ -static inline int gadget_is_superspeed(struct usb_gadget *g) -{ - return g->max_speed >= USB_SPEED_SUPER; -} -#endif -/* put descriptor for string with that id into buf (buflen >= 256) */ -extern _LONG_CALL_ int usb_gadget_get_string (struct usb_gadget_strings *table, int id, u8 *buf); - -/*-------------------------------------------------------------------------*/ - -/* utility to simplify managing config descriptors */ - -/* write vector of descriptors into buffer */ -extern _LONG_CALL_ int usb_descriptor_fillbuf(void *, unsigned, - const struct usb_descriptor_header **); - -/* build config descriptor from single descriptor vector */ -extern _LONG_CALL_ int usb_gadget_config_buf(const struct usb_config_descriptor *config, - void *buf, unsigned buflen, const struct usb_descriptor_header **desc); - -/*-------------------------------------------------------------------------*/ - -extern _LONG_CALL_ void set_gadget_data(struct usb_gadget *gadget, void *data); -extern _LONG_CALL_ void *get_gadget_data(struct usb_gadget *gadget); - - -/* utility wrapping a simple endpoint selection policy */ -#if 1 -extern _LONG_CALL_ struct usb_ep *usb_ep_autoconfig (struct usb_gadget *, - struct usb_endpoint_descriptor *);// ULINKER_DEVINIT; - -extern _LONG_CALL_ void usb_ep_autoconfig_reset (struct usb_gadget *);// ULINKER_DEVINIT; -#endif -//#endif /* __KERNEL__ */ - -#endif /* __LINUX_USB_GADGET_H */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_otg_inc/errno.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_otg_inc/errno.h deleted file mode 100644 index 2fbccce..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_otg_inc/errno.h +++ /dev/null @@ -1,149 +0,0 @@ -#ifndef _GENERIC_ERRNO_H -#define _GENERIC_ERRNO_H - -#define EPERM 1 /* Operation not permitted */ -#define ENOENT 2 /* No such file or directory */ -#define ESRCH 3 /* No such process */ -#define EINTR 4 /* Interrupted system call */ -#define EIO 5 /* I/O error */ -#define ENXIO 6 /* No such device or address */ -#define E2BIG 7 /* Argument list too long */ -#define ENOEXEC 8 /* Exec format error */ -#define EBADF 9 /* Bad file number */ -#define ECHILD 10 /* No child processes */ -#define EAGAIN 11 /* Try again */ -#define ENOMEM 12 /* Out of memory */ -#define EACCES 13 /* Permission denied */ -#define EFAULT 14 /* Bad address */ -#define ENOTBLK 15 /* Block device required */ -#define EBUSY 16 /* Device or resource busy */ -#define EEXIST 17 /* File exists */ -#define EXDEV 18 /* Cross-device link */ -#define ENODEV 19 /* No such device */ -#define ENOTDIR 20 /* Not a directory */ -#define EISDIR 21 /* Is a directory */ -#define EINVAL 22 /* Invalid argument */ -#define ENFILE 23 /* File table overflow */ -#define EMFILE 24 /* Too many open files */ -#define ENOTTY 25 /* Not a typewriter */ -#define ETXTBSY 26 /* Text file busy */ -#define EFBIG 27 /* File too large */ -#define ENOSPC 28 /* No space left on device */ -#define ESPIPE 29 /* Illegal seek */ -#define EROFS 30 /* Read-only file system */ -#define EMLINK 31 /* Too many links */ -#define EPIPE 32 /* Broken pipe */ -#define EDOM 33 /* Math argument out of domain of func */ -#define ERANGE 34 /* Math result not representable */ - -#define EDEADLK 35 /* Resource deadlock would occur */ -#define ENAMETOOLONG 36 /* File name too long */ -#define ENOLCK 37 /* No record locks available */ -#define ENOSYS 38 /* Function not implemented */ -#define ENOTEMPTY 39 /* Directory not empty */ -#define ELOOP 40 /* Too many symbolic links encountered */ -#define EWOULDBLOCK EAGAIN /* Operation would block */ -#define ENOMSG 42 /* No message of desired type */ -#define EIDRM 43 /* Identifier removed */ -#define ECHRNG 44 /* Channel number out of range */ -#define EL2NSYNC 45 /* Level 2 not synchronized */ -#define EL3HLT 46 /* Level 3 halted */ -#define EL3RST 47 /* Level 3 reset */ -#define ELNRNG 48 /* Link number out of range */ -#define EUNATCH 49 /* Protocol driver not attached */ -#define ENOCSI 50 /* No CSI structure available */ -#define EL2HLT 51 /* Level 2 halted */ -#define EBADE 52 /* Invalid exchange */ -#define EBADR 53 /* Invalid request descriptor */ -#define EXFULL 54 /* Exchange full */ -#define ENOANO 55 /* No anode */ -#define EBADRQC 56 /* Invalid request code */ -#define EBADSLT 57 /* Invalid slot */ - -#define EDEADLOCK EDEADLK - -#define EBFONT 59 /* Bad font file format */ -#define ENOSTR 60 /* Device not a stream */ -#define ENODATA 61 /* No data available */ -#define ETIME 62 /* Timer expired */ -#define ENOSR 63 /* Out of streams resources */ -#define ENONET 64 /* Machine is not on the network */ -#define ENOPKG 65 /* Package not installed */ -#define EREMOTE 66 /* Object is remote */ -#define ENOLINK 67 /* Link has been severed */ -#define EADV 68 /* Advertise error */ -#define ESRMNT 69 /* Srmount error */ -#define ECOMM 70 /* Communication error on send */ -#define EPROTO 71 /* Protocol error */ -#define EMULTIHOP 72 /* Multihop attempted */ -#define EDOTDOT 73 /* RFS specific error */ -#define EBADMSG 74 /* Not a data message */ -#define EOVERFLOW 75 /* Value too large for defined data type */ -#define ENOTUNIQ 76 /* Name not unique on network */ -#define EBADFD 77 /* File descriptor in bad state */ -#define EREMCHG 78 /* Remote address changed */ -#define ELIBACC 79 /* Can not access a needed shared library */ -#define ELIBBAD 80 /* Accessing a corrupted shared library */ -#define ELIBSCN 81 /* .lib section in a.out corrupted */ -#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ -#define ELIBEXEC 83 /* Cannot exec a shared library directly */ -#define EILSEQ 84 /* Illegal byte sequence */ -#define ERESTART 85 /* Interrupted system call should be restarted */ -#define ESTRPIPE 86 /* Streams pipe error */ -#define EUSERS 87 /* Too many users */ -#define ENOTSOCK 88 /* Socket operation on non-socket */ -#define EDESTADDRREQ 89 /* Destination address required */ -#define EMSGSIZE 90 /* Message too long */ -#define EPROTOTYPE 91 /* Protocol wrong type for socket */ -#define ENOPROTOOPT 92 /* Protocol not available */ -#define EPROTONOSUPPORT 93 /* Protocol not supported */ -#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ -#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ -#define EPFNOSUPPORT 96 /* Protocol family not supported */ -#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ -#define EADDRINUSE 98 /* Address already in use */ -#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ -#define ENETDOWN 100 /* Network is down */ -#define ENETUNREACH 101 /* Network is unreachable */ -#define ENETRESET 102 /* Network dropped connection because of reset */ -#define ECONNABORTED 103 /* Software caused connection abort */ -#define ECONNRESET 104 /* Connection reset by peer */ -#define ENOBUFS 105 /* No buffer space available */ -#define EISCONN 106 /* Transport endpoint is already connected */ -#define ENOTCONN 107 /* Transport endpoint is not connected */ -#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ -#define ETOOMANYREFS 109 /* Too many references: cannot splice */ -#define ETIMEDOUT 110 /* Connection timed out */ -#define ECONNREFUSED 111 /* Connection refused */ -#define EHOSTDOWN 112 /* Host is down */ -#define EHOSTUNREACH 113 /* No route to host */ -#define EALREADY 114 /* Operation already in progress */ -#define EINPROGRESS 115 /* Operation now in progress */ -#define ESTALE 116 /* Stale NFS file handle */ -#define EUCLEAN 117 /* Structure needs cleaning */ -#define ENOTNAM 118 /* Not a XENIX named type file */ -#define ENAVAIL 119 /* No XENIX semaphores available */ -#define EISNAM 120 /* Is a named type file */ -#define EREMOTEIO 121 /* Remote I/O error */ -#define EDQUOT 122 /* Quota exceeded */ - -#define ENOMEDIUM 123 /* No medium found */ -#define EMEDIUMTYPE 124 /* Wrong medium type */ -#define ECANCELED 125 /* Operation Canceled */ -#define ENOKEY 126 /* Required key not available */ -#define EKEYEXPIRED 127 /* Key has expired */ -#define EKEYREVOKED 128 /* Key has been revoked */ -#define EKEYREJECTED 129 /* Key was rejected by service */ - -/* for robust mutexes */ -#define EOWNERDEAD 130 /* Owner died */ -#define ENOTRECOVERABLE 131 /* State not recoverable */ - -#define ERFKILL 132 /* Operation not possible due to RF-kill */ - -#define EHWPOISON 133 /* Memory page has hardware error */ - - -#define ENOTSUPP 524 /* Operation is not supported */ - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_ulinker.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_ulinker.h deleted file mode 100644 index afcfeaf..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include/usb_ulinker.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef __LINUX_USB_ULINKER_H -#define __LINUX_USB_ULINKER_H - -//#include "linux/autoconf.h" - -//#ifndef CONFIG_RTL_ULINKER_CUSTOMIZATION -#if 1//ModifiedByJD -#define ULINKER_ETHER_VID 0x0BDA -#define ULINKER_ETHER_PID 0x8195 -#define ULINKER_MANUFACTURER "Realtek Semicoonductor Corp." - -#define ULINKER_WINTOOLS_GUID "1CACC490-055C-4035-A026-1DAB0BDA8196" -#define ULINKER_WINTOOLS_DISPLAY_NAME "Realtek RTL8196EU Universal Linker" -#define ULINKER_WINTOOLS_CONTACT "nicfae@realtek.com.tw" -#define ULINKER_WINTOOLS_DISPLAY_VERSION "v1.0.0.0" -#define ULINKER_WINTOOLS_HELP_LINK "http://www.realtek.com.tw" -#define ULINKER_WINTOOLS_PUBLISHER ULINKER_MANUFACTURER -#define ULINKER_WINTOOLS_TARGET_DIR ULINKER_WINTOOLS_DISPLAY_NAME -#else -#define ULINKER_ETHER_VID CONFIG_RTL_ULINKER_VID -#define ULINKER_ETHER_PID CONFIG_RTL_ULINKER_PID -#define ULINKER_STORAGE_VID CONFIG_RTL_ULINKER_VID_S -#define ULINKER_STORAGE_PID CONFIG_RTL_ULINKER_PID_S -#define ULINKER_MANUFACTURER CONFIG_RTL_ULINKER_MANUFACTURE - -#define ULINKER_WINTOOLS_GUID CONFIG_RTL_ULINKER_WINTOOLS_GUID -#define ULINKER_WINTOOLS_DISPLAY_NAME CONFIG_RTL_ULINKER_WINTOOLS_DISPLAY_NAME -#define ULINKER_WINTOOLS_CONTACT CONFIG_RTL_ULINKER_WINTOOLS_CONTACT -#define ULINKER_WINTOOLS_DISPLAY_VERSION CONFIG_RTL_ULINKER_WINTOOLS_DISPLAY_VERSION -#define ULINKER_WINTOOLS_HELP_LINK CONFIG_RTL_ULINKER_WINTOOLS_HELP_LINK -#define ULINKER_WINTOOLS_PUBLISHER ULINKER_MANUFACTURER -#define ULINKER_WINTOOLS_TARGET_DIR ULINKER_WINTOOLS_DISPLAY_NAME -#endif - -//------------------------------------------------ -// if you don't have a specific PID for storage, don't change following define of storage mode. -// -// begin: don't change -#ifndef ULINKER_STORAGE_VID -#define ULINKER_STORAGE_VID 0x0BDA -#define ULINKER_STORAGE_PID 0x8197 -#endif - -#define ULINKER_STORAGE_VID_STR "USB Ether " -#define ULINKER_STORAGE_PID_DISK_STR "Driver DISC" -#define ULINKER_STORAGE_PID_CDROM_STR "Driver CDROM" - -#define ULINKER_WINTOOLS_DRIVER_PATH "Driver" -// end: don't change -//------------------------------------------------ - - -//---------------------------------------------------------------------- -#if defined(CONFIG_RTL_ULINKER) - -#define ULINKER_DEVINIT -#define ULINKER_DEVINITDATA -#define ULINKER_DEVINITCONST -#define ULINKER_DEVEXIT -#define ULINKER_DEVEXITDATA -#define ULINKER_DEVEXITCONST - -#else - -#define ULINKER_DEVINIT __devinit -#define ULINKER_DEVINITDATA __devinitdata -#define ULINKER_DEVINITCONST __devinitconst -#define ULINKER_DEVEXIT __devexit -#define ULINKER_DEVEXITDATA __devexitdata -#define ULINKER_DEVEXITCONST __devexitconst - -#endif - -#endif /* __LINUX_USB_ULINKER_H */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/wlan/realtek/wlan_ram_map/rom/rom_wlan_ram_map.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/wlan/realtek/wlan_ram_map/rom/rom_wlan_ram_map.h deleted file mode 100644 index 2944d18..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/ram_lib/wlan/realtek/wlan_ram_map/rom/rom_wlan_ram_map.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef ROM_WLAN_RAM_MAP_H -#define ROM_WLAN_RAM_MAP_H - -struct _rom_wlan_ram_map { - unsigned char * (*rtw_malloc)(unsigned int sz); - void (*rtw_mfree)(unsigned char *pbuf, unsigned int sz); -}; - -#endif /* ROM_WLAN_RAM_MAP_H */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a.h deleted file mode 100644 index 2a11357..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a.h +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - */ -#ifndef _HAL_8195A_H_ -#define _HAL_8195A_H_ - -#include "platform_autoconf.h" -#include "basic_types.h" -#include "section_config.h" -#include "rtl8195a_sys_on.h" -#include "rtl8195a_peri_on.h" -#include "hal_platform.h" -#include "hal_pinmux.h" -#include "hal_api.h" -#include "hal_peri_on.h" -#include "hal_misc.h" -#include "hal_irqn.h" -#include "hal_vector_table.h" -#include "hal_diag.h" -#include "hal_spi_flash.h" -#include "rtl8195a_spi_flash.h" -#include "hal_timer.h" -#include "hal_util.h" -#include "hal_efuse.h" -#include "hal_soc_ps_monitor.h" -#include "diag.h" -#include "hal_common.h" -#include "hal_soc_ps_monitor.h" - -/* ---------------------------------------------------------------------------- - -- Cortex M3 Core Configuration - ---------------------------------------------------------------------------- */ - -/*! - * @addtogroup Cortex_Core_Configuration Cortex M0 Core Configuration - * @{ - */ - -#define __CM3_REV 0x0200 /**< Core revision r0p0 */ -#define __MPU_PRESENT 1 /**< Defines if an MPU is present or not */ -#define __NVIC_PRIO_BITS 4 /**< Number of priority bits implemented in the NVIC */ -#define __Vendor_SysTickConfig 1 /**< Vendor specific implementation of SysTickConfig is defined */ - -#include "core_cm3.h" - -#ifdef CONFIG_TIMER_EN -#include "hal_timer.h" -#endif - -#ifdef CONFIG_GDMA_EN -#include "hal_gdma.h" -#include "rtl8195a_gdma.h" -#endif - -#ifdef CONFIG_GPIO_EN -#include "hal_gpio.h" -#include "rtl8195a_gpio.h" -#endif - -#ifdef CONFIG_SPI_COM_EN -#include "hal_ssi.h" -#include "rtl8195a_ssi.h" -#endif - -#ifdef CONFIG_UART_EN -#include "hal_uart.h" -#include "rtl8195a_uart.h" -#endif - -#ifdef CONFIG_I2C_EN -#include "hal_i2c.h" -#include "rtl8195a_i2c.h" -#endif - -#ifdef CONFIG_PCM_EN -#include "hal_pcm.h" -#include "rtl8195a_pcm.h" -#endif - -#ifdef CONFIG_PWM_EN -#include "hal_pwm.h" -#include "rtl8195a_pwm.h" -#endif - -#ifdef CONFIG_I2S_EN -#include "hal_i2s.h" -#include "rtl8195a_i2s.h" -#endif - -#ifdef CONFIG_DAC_EN -#include "hal_dac.h" -#include "rtl8195a_dac.h" -#endif - -#ifdef CONFIG_ADC_EN -#include "hal_adc.h" -#include "rtl8195a_adc.h" -#endif - -#ifdef CONFIG_SDR_EN -#endif - -#ifdef CONFIG_SPIC_EN -#endif - -#ifdef CONFIG_SDIO_DEVICE_EN -#include "hal_sdio.h" -#endif - -#ifdef CONFIG_NFC_EN -#include "hal_nfc.h" -#include "rtl8195a_nfc.h" -#endif - -#ifdef CONFIG_WDG -#include "rtl8195a_wdt.h" -#endif - -#ifdef CONFIG_USB_EN -#include "hal_usb.h" -#include "rtl8195a_usb.h" -#endif - -#include "hal_log_uart.h" - -#ifdef CONFIG_MII_EN -#include "hal_mii.h" -#include "rtl8195a_mii.h" -#endif - -// firmware information, located at the header of Image2 -#define FW_VERSION (0x0100) -#define FW_SUBVERSION (0x0001) -#define FW_CHIP_ID (0x8195) -#define FW_CHIP_VER (0x01) -#define FW_BUS_TYPE (0x01) // the iNIC firmware type: USB/SDIO -#define FW_INFO_RSV1 (0x00) // the firmware information reserved -#define FW_INFO_RSV2 (0x00) // the firmware information reserved -#define FW_INFO_RSV3 (0x00) // the firmware information reserved -#define FW_INFO_RSV4 (0x00) // the firmware information reserved - -#define FLASH_RESERVED_DATA_BASE 0x8000 // reserve 32K for Image1 -#define FLASH_SYSTEM_DATA_ADDR 0x9000 // reserve 32K+4K for Image1 + Reserved data -// Flash Map for Calibration data -#define FLASH_CAL_DATA_BASE 0xA000 -#define FLASH_CAL_DATA_ADDR(_offset) (FLASH_CAL_DATA_BASE + _offset) -#define FLASH_CAL_DATA_SIZE 0x1000 -#define FLASH_SECTOR_SIZE 0x1000 -// SPIC Calibration Data -#define FLASH_SPIC_PARA_OFFSET 0x80 -#define FLASH_SPIC_PARA_BASE (FLASH_SYSTEM_DATA_ADDR+FLASH_SPIC_PARA_OFFSET) -// SDRC Calibration Data -#define FLASH_SDRC_PARA_OFFSET 0x180 -#define FLASH_SDRC_PARA_BASE (FLASH_SYSTEM_DATA_ADDR+FLASH_SDRC_PARA_OFFSET) -// ADC Calibration Data -#define FLASH_ADC_PARA_OFFSET 0x200 -#define FLASH_ADC_PARA_BASE (FLASH_SYSTEM_DATA_ADDR+FLASH_ADC_PARA_OFFSET) - -#define IMG_SIGN_RUN "81958711" -#define IMG_SIGN_SWP "01958711" -#define IMG_SIGN1_RUN 0x35393138 // "8195" -#define IMG_SIGN1_SWP 0x35393130 // "0195" -#define IMG_SIGN2_RUN 0x31313738 // "8711" -#define IMG_SIGN2_SWP IMG_SIGN2_RUN // "8711" -#define IMG2_SIGN_TXT "RTKWin" -#define IMG2_SIGN_DW1_TXT 0x574b5452 // "RTKW" -#define IMG2_SIGN_SW2_TXT 0x6e69 // "in" - -typedef struct _RAM_FUNCTION_START_TABLE_ { - void (*RamStartFun) (void); // Run for Init console, Run if ( v40000210 & 0x4000000 ) - void (*RamWakeupFun) (void); // Run if ( v40000210 & 0x20000000 ) - void (*RamPatchFun0) (void); // Run if ( v40000210 & 0x10000000 ) - void (*RamPatchFun1) (void); // Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x8000000 ) - void (*RamPatchFun2) (void); // Run for Init console, if ( v40000210 & 0x4000000 ) -}RAM_FUNCTION_START_TABLE, *PRAM_FUNCTION_START_TABLE; -// START_RAM_FUN_SECTION RAM_FUNCTION_START_TABLE __ram_start_table_start__ = -// {RamStartFun + 1, RamWakeupFun + 1, RamPatchFun0 + 1, RamPatchFun1 + 1, RamPatchFun2 + 1 }; - -#define IMG1_VALID_PATTEN_INIT() { 0x23, 0x79, 0x16, 0x88, 0xff, 0xff, 0xff, 0xff } -// IMAGE1_VALID_PATTEN_SECTION uint8 RAM_IMG1_VALID_PATTEN[8] = IMG1_VALID_PATTEN_INIT(); - -typedef struct _RAM_START_FUNCTION_ { - void (*RamStartFun) (void); -}RAM_START_FUNCTION, *PRAM_START_FUNCTION; -// IMAGE2_START_RAM_FUN_SECTION RAM_START_FUNCTION gImage2EntryFun0 = { InfraStart + 1 }; - -typedef struct __RAM_IMG2_VALID_PATTEN__ { - char rtkwin[7]; - uint8_t x[13]; -} _RAM_IMG2_VALID_PATTEN, *_PRAM_IMG2_VALID_PATTEN; - -// IMAGE2_VALID_PATTEN_SECTION _RAM_IMG2_VALID_PATTEN RAM_IMG2_VALID_PATTEN = RAM_IMG2_VALID_PATTEN_INIT(); -#define RAM_IMG2_VALID_PATTEN_INIT() { \ - { IMG2_SIGN_TXT }, { 0xff, \ - (FW_VERSION&0xff), ((FW_VERSION >> 8)&0xff), \ - (FW_SUBVERSION&0xff), ((FW_SUBVERSION >> 8)&0xff), \ - (FW_CHIP_ID&0xff), ((FW_CHIP_ID >> 8)&0xff), \ - (FW_CHIP_VER), (FW_BUS_TYPE), \ - (FW_INFO_RSV1), (FW_INFO_RSV2), (FW_INFO_RSV3), (FW_INFO_RSV4)}} - - -#endif //_HAL_8195A_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_adc.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_adc.c deleted file mode 100644 index 279cc7b..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_adc.c +++ /dev/null @@ -1,389 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#include "platform_autoconf.h" -#include "diag.h" -#include "rtl8195a_adc.h" -#include "hal_adc.h" - -#ifdef CONFIG_ADC_EN -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalI2CInit8195a -// -// Description: -// To initialize I2C module by using the given data. -// -// Arguments: -// [in] void *Data - -// The I2C parameter data struct. -// -// Return: -// The status of the DeInit process. -// _EXIT_SUCCESS if the initialization succeeded. -// _EXIT_FAILURE if the initialization failed. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//--------------------------------------------------------------------------------------------------- -RTK_STATUS -HalADCInit8195a( - IN void *Data -) -{ - PHAL_ADC_INIT_DAT pHalAdcInitData = (PHAL_ADC_INIT_DAT)Data; - uint32_t AdcTempDat; - uint8_t AdcTempIdx = pHalAdcInitData->ADCIdx; - - /* Enable ADC power cut */ -/* - AdcTempDat = HAL_ADC_READ32(REG_ADC_POWER); - AdcTempDat |= BIT_ADC_PWR_AUTO; - HAL_ADC_WRITE32(REG_ADC_POWER, AdcTempDat); -*/ - - /* ADC Control register set-up*/ - AdcTempDat = 0; - AdcTempDat |= (BIT_CTRL_ADC_COMP_ONLY(pHalAdcInitData->ADCCompOnly) | - BIT_CTRL_ADC_ONESHOT(pHalAdcInitData->ADCOneShotEn) | - BIT_CTRL_ADC_OVERWRITE(pHalAdcInitData->ADCOverWREn) | - BIT_CTRL_ADC_ENDIAN(pHalAdcInitData->ADCEndian) | - BIT_CTRL_ADC_BURST_SIZE(pHalAdcInitData->ADCBurstSz) | - BIT_CTRL_ADC_THRESHOLD(pHalAdcInitData->ADCOneShotTD) | - BIT_CTRL_ADC_DBG_SEL(pHalAdcInitData->ADCDbgSel)); - HAL_ADC_WRITE32(REG_ADC_CONTROL,AdcTempDat); - - DBG_8195A_ADC_LVL(HAL_ADC_LVL,"REG_ADC_CONTROL:%x\n", HAL_ADC_READ32(REG_ADC_CONTROL)); - - /* ADC compare value and compare method setting*/ - switch (AdcTempIdx) { - case ADC0_SEL: - AdcTempDat = HAL_ADC_READ32(REG_ADC_COMP_VALUE_L); - AdcTempDat &= ~(BIT_ADC_COMP_TH_0(0xFFFF)); - AdcTempDat |= BIT_CTRL_ADC_COMP_TH_0(pHalAdcInitData->ADCCompTD); - HAL_ADC_WRITE32(REG_ADC_COMP_VALUE_L, AdcTempDat); - break; - - case ADC1_SEL: - AdcTempDat = HAL_ADC_READ32(REG_ADC_COMP_VALUE_L); - AdcTempDat &= ~(BIT_ADC_COMP_TH_1(0xFFFF)); - AdcTempDat |= BIT_CTRL_ADC_COMP_TH_1(pHalAdcInitData->ADCCompTD); - HAL_ADC_WRITE32(REG_ADC_COMP_VALUE_L, AdcTempDat); - break; - - case ADC2_SEL: - AdcTempDat = HAL_ADC_READ32(REG_ADC_COMP_VALUE_H); - AdcTempDat &= ~(BIT_ADC_COMP_TH_2(0xFFFF)); - AdcTempDat |= BIT_CTRL_ADC_COMP_TH_2(pHalAdcInitData->ADCCompTD); - HAL_ADC_WRITE32(REG_ADC_COMP_VALUE_H, AdcTempDat); - break; - - case ADC3_SEL: - AdcTempDat = HAL_ADC_READ32(REG_ADC_COMP_VALUE_H); - AdcTempDat &= ~(BIT_ADC_COMP_TH_3(0xFFFF)); - AdcTempDat |= BIT_CTRL_ADC_COMP_TH_3(pHalAdcInitData->ADCCompTD); - HAL_ADC_WRITE32(REG_ADC_COMP_VALUE_H, AdcTempDat); - break; - default: - return _EXIT_FAILURE; - } - - /* ADC compare mode setting */ - AdcTempDat = HAL_ADC_READ32(REG_ADC_COMP_SET); - AdcTempDat &= (~(0x01 << pHalAdcInitData->ADCIdx)); - AdcTempDat |= (BIT_CTRL_ADC_COMP_0_EN(pHalAdcInitData->ADCCompCtrl) << - pHalAdcInitData->ADCIdx); - HAL_ADC_WRITE32(REG_ADC_COMP_SET, AdcTempDat); - - /* ADC audio mode set-up */ - AdcTempDat = HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - AdcTempDat &= ~(BIT_ADC_AUDIO_EN); - AdcTempDat |= BIT_CTRL_ADC_AUDIO_EN(pHalAdcInitData->ADCAudioEn); - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD0, AdcTempDat); - - /* ADC enable manually setting */ - AdcTempDat = HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - AdcTempDat &= ~(BIT_ADC_EN_MANUAL); - AdcTempDat |= BIT_CTRL_ADC_EN_MANUAL(pHalAdcInitData->ADCEnManul); - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD0, AdcTempDat); - - - /* ADC analog parameter 0 */ - AdcTempDat = HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - DBG_ADC_INFO("AD0:%x\n", AdcTempDat); - //AdcTempDat |= (BIT0); - if (pHalAdcInitData->ADCInInput == 1){ - AdcTempDat &= (~BIT14); - } - else { - AdcTempDat |= (BIT14); - } - AdcTempDat &= (~(BIT3|BIT2)); - - /* Adjust VCM for C-Cut*/ -#ifdef CONFIG_CHIP_C_CUT - AdcTempDat |= (BIT22); -#endif - - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD0, AdcTempDat); - AdcTempDat = HAL_ADC_READ32(REG_ADC_ANAPAR_AD0); - DBG_ADC_INFO("AD0:%x\n", AdcTempDat); - - /* ADC analog parameter 1 */ - AdcTempDat = HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - AdcTempDat &= (~BIT1); - AdcTempDat |= (BIT2|BIT0); - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD1, AdcTempDat); - AdcTempDat = HAL_ADC_READ32(REG_ADC_ANAPAR_AD1); - DBG_ADC_INFO("AD1:%x\n", AdcTempDat); - - /* ADC analog parameter 2 */ - AdcTempDat = HAL_ADC_READ32(REG_ADC_ANAPAR_AD2); - DBG_ADC_INFO("AD2:%x\n", AdcTempDat); - AdcTempDat = 0x67884400; - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD2, AdcTempDat); - AdcTempDat = HAL_ADC_READ32(REG_ADC_ANAPAR_AD2); - DBG_ADC_INFO("AD2:%x\n", AdcTempDat); - - /* ADC analog parameter 3 */ - AdcTempDat = HAL_ADC_READ32(REG_ADC_ANAPAR_AD3); - DBG_ADC_INFO("AD3:%x\n", AdcTempDat); - AdcTempDat = 0x77780039; - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD3, AdcTempDat); - AdcTempDat = HAL_ADC_READ32(REG_ADC_ANAPAR_AD3); - DBG_ADC_INFO("AD3:%x\n", AdcTempDat); - - /* ADC analog parameter 4 */ - AdcTempDat = HAL_ADC_READ32(REG_ADC_ANAPAR_AD4); - DBG_ADC_INFO("AD4:%x\n", AdcTempDat); - AdcTempDat = 0x0004d501; - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD4, AdcTempDat); - AdcTempDat = HAL_ADC_READ32(REG_ADC_ANAPAR_AD4); - DBG_ADC_INFO("AD4:%x\n", AdcTempDat); - - /* ADC analog parameter 5 */ - AdcTempDat = HAL_ADC_READ32(REG_ADC_ANAPAR_AD5); - DBG_ADC_INFO("AD5:%x\n", AdcTempDat); - AdcTempDat = 0x1E010800; - HAL_ADC_WRITE32(REG_ADC_ANAPAR_AD5, AdcTempDat); - AdcTempDat = HAL_ADC_READ32(REG_ADC_ANAPAR_AD5); - DBG_ADC_INFO("AD5:%x\n", AdcTempDat); - - return _EXIT_SUCCESS; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalI2CInit8195a -// -// Description: -// To initialize I2C module by using the given data. -// -// Arguments: -// [in] void *Data - -// The I2C parameter data struct. -// -// Return: -// The status of the DeInit process. -// _EXIT_SUCCESS if the initialization succeeded. -// _EXIT_FAILURE if the initialization failed. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//--------------------------------------------------------------------------------------------------- -RTK_STATUS -HalADCDeInit8195a( - IN void *Data -) -{ - uint32_t AdcTempDat; - - AdcTempDat = HAL_ADC_READ32(REG_ADC_POWER); - AdcTempDat &= ~(BIT_ADC_PWR_AUTO); - HAL_ADC_WRITE32(REG_ADC_POWER, AdcTempDat); - - return _EXIT_SUCCESS; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalI2CIntrCtrl8195a -// -// Description: -// Modify the I2C interrupt mask according to the given value -// -// Arguments: -// [in] void *Data - -// The I2C parameter data struct. -// -// Return: -// The status of the enable process. -// _EXIT_SUCCESS if the de-initialization succeeded. -// _EXIT_FAILURE if the de-initialization failed. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-02-18. -// -//--------------------------------------------------------------------------------------------------- -RTK_STATUS -HalADCEnableRtl8195a( - IN void *Data -){ - //PHAL_ADC_INIT_DAT pHalAdcInitData = (PHAL_ADC_INIT_DAT)Data; - uint32_t AdcTempDat; - DBG_ADC_INFO("HalADCEnableRtl8195a\n"); - - AdcTempDat = HAL_ADC_READ32(REG_ADC_POWER); - - AdcTempDat &= (~BIT_ADC_PWR_AUTO); - AdcTempDat |= 0x02; - HAL_ADC_WRITE32(REG_ADC_POWER, AdcTempDat); - AdcTempDat |= 0x04; - HAL_ADC_WRITE32(REG_ADC_POWER, AdcTempDat); - AdcTempDat &= (~0x08); - HAL_ADC_WRITE32(REG_ADC_POWER, AdcTempDat); - - AdcTempDat = (uint32_t)HAL_ADC_READ32(REG_ADC_POWER); - DBG_ADC_INFO("HalADCEnableRtl8195a, power reg:%x\n",AdcTempDat); - return _EXIT_SUCCESS; -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalI2CIntrCtrl8195a -// -// Description: -// Modify the I2C interrupt mask according to the given value -// -// Arguments: -// [in] void *Data - -// The I2C parameter data struct. -// -// Return: -// The status of the enable process. -// _EXIT_SUCCESS if the de-initialization succeeded. -// _EXIT_FAILURE if the de-initialization failed. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-02-18. -// -//--------------------------------------------------------------------------------------------------- -RTK_STATUS -HalADCIntrCtrl8195a( - IN void *Data -){ - PHAL_ADC_INIT_DAT pHalAdcInitData = (PHAL_ADC_INIT_DAT)Data; - - HAL_ADC_WRITE32(REG_ADC_INTR_EN, pHalAdcInitData->ADCIntrMSK); - - return _EXIT_SUCCESS; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalI2CReceiveRtl8195a -// -// Description: -// Directly read one data byte a I2C data fifo. -// -// Arguments: -// [in] void *Data - -// The I2C parameter data struct. -// -// Return: -// The first data fifo content. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-02-18. -// -//--------------------------------------------------------------------------------------------------- -uint32_t -HalADCReceiveRtl8195a( - IN void *Data -){ - uint32_t AdcTempDat; - - AdcTempDat = HAL_ADC_READ32(REG_ADC_FIFO_READ); - - return (AdcTempDat); -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalI2CReadRegRtl8195a -// -// Description: -// Directly read a I2C register according to the register offset. -// -// Arguments: -// [in] void *Data - -// The I2C parameter data struct. -// [in] I2CReg - -// The I2C register offset. -// -// Return: -// The register content in uint32_t format. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-02-18. -// -//--------------------------------------------------------------------------------------------------- -uint32_t -HalADCReadRegRtl8195a( - IN void *Data, - IN uint8_t I2CReg -){ - uint32_t AdcTempDat; - - AdcTempDat = HAL_ADC_READ32(I2CReg); - return (AdcTempDat); -} - -#endif // CONFIG_ADC_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_adc.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_adc.h deleted file mode 100644 index 9786ec0..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_adc.h +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _RTL8195A_ADC_H_ -#define _RTL8195A_ADC_H_ - - -//================ Register Bit Field ========================== -//2 REG_ADC_FIFO_READ - -#define BIT_SHIFT_ADC_FIFO_RO 0 -#define BIT_MASK_ADC_FIFO_RO 0xffffffffL -#define BIT_ADC_FIFO_RO(x) (((x) & BIT_MASK_ADC_FIFO_RO) << BIT_SHIFT_ADC_FIFO_RO) -#define BIT_CTRL_ADC_FIFO_RO(x) (((x) & BIT_MASK_ADC_FIFO_RO) << BIT_SHIFT_ADC_FIFO_RO) -#define BIT_GET_ADC_FIFO_RO(x) (((x) >> BIT_SHIFT_ADC_FIFO_RO) & BIT_MASK_ADC_FIFO_RO) - - -//2 REG_ADC_CONTROL - -#define BIT_SHIFT_ADC_DBG_SEL 24 -#define BIT_MASK_ADC_DBG_SEL 0x7 -#define BIT_ADC_DBG_SEL(x) (((x) & BIT_MASK_ADC_DBG_SEL) << BIT_SHIFT_ADC_DBG_SEL) -#define BIT_CTRL_ADC_DBG_SEL(x) (((x) & BIT_MASK_ADC_DBG_SEL) << BIT_SHIFT_ADC_DBG_SEL) -#define BIT_GET_ADC_DBG_SEL(x) (((x) >> BIT_SHIFT_ADC_DBG_SEL) & BIT_MASK_ADC_DBG_SEL) - - -#define BIT_SHIFT_ADC_THRESHOLD 16 -#define BIT_MASK_ADC_THRESHOLD 0x3f -#define BIT_ADC_THRESHOLD(x) (((x) & BIT_MASK_ADC_THRESHOLD) << BIT_SHIFT_ADC_THRESHOLD) -#define BIT_CTRL_ADC_THRESHOLD(x) (((x) & BIT_MASK_ADC_THRESHOLD) << BIT_SHIFT_ADC_THRESHOLD) -#define BIT_GET_ADC_THRESHOLD(x) (((x) >> BIT_SHIFT_ADC_THRESHOLD) & BIT_MASK_ADC_THRESHOLD) - - -#define BIT_SHIFT_ADC_BURST_SIZE 8 -#define BIT_MASK_ADC_BURST_SIZE 0x1f -#define BIT_ADC_BURST_SIZE(x) (((x) & BIT_MASK_ADC_BURST_SIZE) << BIT_SHIFT_ADC_BURST_SIZE) -#define BIT_CTRL_ADC_BURST_SIZE(x) (((x) & BIT_MASK_ADC_BURST_SIZE) << BIT_SHIFT_ADC_BURST_SIZE) -#define BIT_GET_ADC_BURST_SIZE(x) (((x) >> BIT_SHIFT_ADC_BURST_SIZE) & BIT_MASK_ADC_BURST_SIZE) - -#define BIT_ADC_ENDIAN BIT(3) -#define BIT_SHIFT_ADC_ENDIAN 3 -#define BIT_MASK_ADC_ENDIAN 0x1 -#define BIT_CTRL_ADC_ENDIAN(x) (((x) & BIT_MASK_ADC_ENDIAN) << BIT_SHIFT_ADC_ENDIAN) - -#define BIT_ADC_OVERWRITE BIT(2) -#define BIT_SHIFT_ADC_OVERWRITE 2 -#define BIT_MASK_ADC_OVERWRITE 0x1 -#define BIT_CTRL_ADC_OVERWRITE(x) (((x) & BIT_MASK_ADC_OVERWRITE) << BIT_SHIFT_ADC_OVERWRITE) - -#define BIT_ADC_ONESHOT BIT(1) -#define BIT_SHIFT_ADC_ONESHOT 1 -#define BIT_MASK_ADC_ONESHOT 0x1 -#define BIT_CTRL_ADC_ONESHOT(x) (((x) & BIT_MASK_ADC_ONESHOT) << BIT_SHIFT_ADC_ONESHOT) - -#define BIT_ADC_COMP_ONLY BIT(0) -#define BIT_SHIFT_ADC_COMP_ONLY 0 -#define BIT_MASK_ADC_COMP_ONLY 0x1 -#define BIT_CTRL_ADC_COMP_ONLY(x) (((x) & BIT_MASK_ADC_COMP_ONLY) << BIT_SHIFT_ADC_COMP_ONLY) - - -//2 REG_ADC_INTR_EN -#define BIT_ADC_AWAKE_CPU_EN BIT(7) -#define BIT_SHIFT_ADC_AWAKE_CPU_EN 7 -#define BIT_MASK_ADC_AWAKE_CPU_EN 0x1 -#define BIT_CTRL_ADC_AWAKE_CPU_EN(x) (((x) & BIT_MASK_ADC_AWAKE_CPU_EN) << BIT_SHIFT_ADC_AWAKE_CPU_EN) - -#define BIT_ADC_FIFO_RD_ERROR_EN BIT(6) -#define BIT_SHIFT_ADC_FIFO_RD_ERROR_EN 6 -#define BIT_MASK_ADC_FIFO_RD_ERROR_EN 0x1 -#define BIT_CTRL_ADC_FIFO_RD_ERROR_EN(x) (((x) & BIT_MASK_ADC_FIFO_RD_ERROR_EN) << BIT_SHIFT_ADC_FIFO_RD_ERROR_EN) - -#define BIT_ADC_FIFO_RD_REQ_EN BIT(5) -#define BIT_SHIFT_ADC_FIFO_RD_REQ_EN 5 -#define BIT_MASK_ADC_FIFO_RD_REQ_EN 0x1 -#define BIT_CTRL_ADC_FIFO_RD_REQ_EN(x) (((x) & BIT_MASK_ADC_FIFO_RD_REQ_EN) << BIT_SHIFT_ADC_FIFO_RD_REQ_EN) - -#define BIT_ADC_FIFO_FULL_EN BIT(4) -#define BIT_SHIFT_ADC_FIFO_FULL_EN 4 -#define BIT_MASK_ADC_FIFO_FULL_EN 0x1 -#define BIT_CTRL_ADC_FIFO_FULL_EN(x) (((x) & BIT_MASK_ADC_FIFO_FULL_EN) << BIT_SHIFT_ADC_FIFO_FULL_EN) - -#define BIT_ADC_COMP_3_EN BIT(3) -#define BIT_SHIFT_ADC_COMP_3_EN 3 -#define BIT_MASK_ADC_COMP_3_EN 0x1 -#define BIT_CTRL_ADC_COMP_3_EN(x) (((x) & BIT_MASK_ADC_COMP_3_EN) << BIT_SHIFT_ADC_COMP_3_EN) - -#define BIT_ADC_COMP_2_EN BIT(2) -#define BIT_SHIFT_ADC_COMP_2_EN 2 -#define BIT_MASK_ADC_COMP_2_EN 0x1 -#define BIT_CTRL_ADC_COMP_2_EN(x) (((x) & BIT_MASK_ADC_COMP_2_EN) << BIT_SHIFT_ADC_COMP_2_EN) - -#define BIT_ADC_COMP_1_EN BIT(1) -#define BIT_SHIFT_ADC_COMP_1_EN 1 -#define BIT_MASK_ADC_COMP_1_EN 0x1 -#define BIT_CTRL_ADC_COMP_1_EN(x) (((x) & BIT_MASK_ADC_COMP_1_EN) << BIT_SHIFT_ADC_COMP_1_EN) - -#define BIT_ADC_COMP_0_EN BIT(0) -#define BIT_SHIFT_ADC_COMP_0_EN 0 -#define BIT_MASK_ADC_COMP_0_EN 0x1 -#define BIT_CTRL_ADC_COMP_0_EN(x) (((x) & BIT_MASK_ADC_COMP_0_EN) << BIT_SHIFT_ADC_COMP_0_EN) - - -//2 REG_ADC_INTR_STS -#define BIT_ADC_FIFO_THRESHOLD BIT(7) -#define BIT_SHIFT_ADC_FIFO_THRESHOLD 7 -#define BIT_MASK_ADC_FIFO_THRESHOLD 0x1 -#define BIT_CTRL_ADC_FIFO_THRESHOLD(x) (((x) & BIT_MASK_ADC_FIFO_THRESHOLD) << BIT_SHIFT_ADC_FIFO_THRESHOLD) - -#define BIT_ADC_FIFO_RD_ERROR_ST BIT(6) -#define BIT_SHIFT_ADC_FIFO_RD_ERROR_ST 6 -#define BIT_MASK_ADC_FIFO_RD_ERROR_ST 0x1 -#define BIT_CTRL_ADC_FIFO_RD_ERROR_ST(x) (((x) & BIT_MASK_ADC_FIFO_RD_ERROR_ST) << BIT_SHIFT_ADC_FIFO_RD_ERROR_ST) - -#define BIT_ADC_FIFO_RD_REQ_ST BIT(5) -#define BIT_SHIFT_ADC_FIFO_RD_REQ_ST 5 -#define BIT_MASK_ADC_FIFO_RD_REQ_ST 0x1 -#define BIT_CTRL_ADC_FIFO_RD_REQ_ST(x) (((x) & BIT_MASK_ADC_FIFO_RD_REQ_ST) << BIT_SHIFT_ADC_FIFO_RD_REQ_ST) - -#define BIT_ADC_FIFO_FULL_ST BIT(4) -#define BIT_SHIFT_ADC_FIFO_FULL_ST 4 -#define BIT_MASK_ADC_FIFO_FULL_ST 0x1 -#define BIT_CTRL_ADC_FIFO_FULL_ST(x) (((x) & BIT_MASK_ADC_FIFO_FULL_ST) << BIT_SHIFT_ADC_FIFO_FULL_ST) - -#define BIT_ADC_COMP_3_ST BIT(3) -#define BIT_SHIFT_ADC_COMP_3_ST 3 -#define BIT_MASK_ADC_COMP_3_ST 0x1 -#define BIT_CTRL_ADC_COMP_3_ST(x) (((x) & BIT_MASK_ADC_COMP_3_ST) << BIT_SHIFT_ADC_COMP_3_ST) - -#define BIT_ADC_COMP_2_ST BIT(2) -#define BIT_SHIFT_ADC_COMP_2_ST 2 -#define BIT_MASK_ADC_COMP_2_ST 0x1 -#define BIT_CTRL_ADC_COMP_2_ST(x) (((x) & BIT_MASK_ADC_COMP_2_ST) << BIT_SHIFT_ADC_COMP_2_ST) - -#define BIT_ADC_COMP_1_ST BIT(1) -#define BIT_SHIFT_ADC_COMP_1_ST 1 -#define BIT_MASK_ADC_COMP_1_ST 0x1 -#define BIT_CTRL_ADC_COMP_1_ST(x) (((x) & BIT_MASK_ADC_COMP_1_ST) << BIT_SHIFT_ADC_COMP_1_ST) - -#define BIT_ADC_COMP_0_ST BIT(0) -#define BIT_SHIFT_ADC_COMP_0_ST 0 -#define BIT_MASK_ADC_COMP_0_ST 0x1 -#define BIT_CTRL_ADC_COMP_0_ST(x) (((x) & BIT_MASK_ADC_COMP_0_ST) << BIT_SHIFT_ADC_COMP_0_ST) - - -//2 REG_ADC_COMP_VALUE_L - -#define BIT_SHIFT_ADC_COMP_TH_1 16 -#define BIT_MASK_ADC_COMP_TH_1 0xffff -#define BIT_ADC_COMP_TH_1(x) (((x) & BIT_MASK_ADC_COMP_TH_1) << BIT_SHIFT_ADC_COMP_TH_1) -#define BIT_CTRL_ADC_COMP_TH_1(x) (((x) & BIT_MASK_ADC_COMP_TH_1) << BIT_SHIFT_ADC_COMP_TH_1) -#define BIT_GET_ADC_COMP_TH_1(x) (((x) >> BIT_SHIFT_ADC_COMP_TH_1) & BIT_MASK_ADC_COMP_TH_1) - - -#define BIT_SHIFT_ADC_COMP_TH_0 0 -#define BIT_MASK_ADC_COMP_TH_0 0xffff -#define BIT_ADC_COMP_TH_0(x) (((x) & BIT_MASK_ADC_COMP_TH_0) << BIT_SHIFT_ADC_COMP_TH_0) -#define BIT_CTRL_ADC_COMP_TH_0(x) (((x) & BIT_MASK_ADC_COMP_TH_0) << BIT_SHIFT_ADC_COMP_TH_0) -#define BIT_GET_ADC_COMP_TH_0(x) (((x) >> BIT_SHIFT_ADC_COMP_TH_0) & BIT_MASK_ADC_COMP_TH_0) - - -//2 REG_ADC_COMP_VALUE_H - -#define BIT_SHIFT_ADC_COMP_TH_3 16 -#define BIT_MASK_ADC_COMP_TH_3 0xffff -#define BIT_ADC_COMP_TH_3(x) (((x) & BIT_MASK_ADC_COMP_TH_3) << BIT_SHIFT_ADC_COMP_TH_3) -#define BIT_CTRL_ADC_COMP_TH_3(x) (((x) & BIT_MASK_ADC_COMP_TH_3) << BIT_SHIFT_ADC_COMP_TH_3) -#define BIT_GET_ADC_COMP_TH_3(x) (((x) >> BIT_SHIFT_ADC_COMP_TH_3) & BIT_MASK_ADC_COMP_TH_3) - - -#define BIT_SHIFT_ADC_COMP_TH_2 0 -#define BIT_MASK_ADC_COMP_TH_2 0xffff -#define BIT_ADC_COMP_TH_2(x) (((x) & BIT_MASK_ADC_COMP_TH_2) << BIT_SHIFT_ADC_COMP_TH_2) -#define BIT_CTRL_ADC_COMP_TH_2(x) (((x) & BIT_MASK_ADC_COMP_TH_2) << BIT_SHIFT_ADC_COMP_TH_2) -#define BIT_GET_ADC_COMP_TH_2(x) (((x) >> BIT_SHIFT_ADC_COMP_TH_2) & BIT_MASK_ADC_COMP_TH_2) - - -//2 REG_ADC_COMP_SET - -#define BIT_SHIFT_ADC_GREATER_THAN 0 -#define BIT_MASK_ADC_GREATER_THAN 0xf -#define BIT_ADC_GREATER_THAN(x) (((x) & BIT_MASK_ADC_GREATER_THAN) << BIT_SHIFT_ADC_GREATER_THAN) -#define BIT_CTRL_ADC_GREATER_THAN(x) (((x) & BIT_MASK_ADC_GREATER_THAN) << BIT_SHIFT_ADC_GREATER_THAN) -#define BIT_GET_ADC_GREATER_THAN(x) (((x) >> BIT_SHIFT_ADC_GREATER_THAN) & BIT_MASK_ADC_GREATER_THAN) - - -//2 REG_ADC_POWER - -#define BIT_SHIFT_ADC_PWR_CUT_CNTR 16 -#define BIT_MASK_ADC_PWR_CUT_CNTR 0xff -#define BIT_ADC_PWR_CUT_CNTR(x) (((x) & BIT_MASK_ADC_PWR_CUT_CNTR) << BIT_SHIFT_ADC_PWR_CUT_CNTR) -#define BIT_CTRL_ADC_PWR_CUT_CNTR(x) (((x) & BIT_MASK_ADC_PWR_CUT_CNTR) << BIT_SHIFT_ADC_PWR_CUT_CNTR) -#define BIT_GET_ADC_PWR_CUT_CNTR(x) (((x) >> BIT_SHIFT_ADC_PWR_CUT_CNTR) & BIT_MASK_ADC_PWR_CUT_CNTR) - -#define BIT_ADC_FIFO_ON_ST BIT(11) -#define BIT_SHIFT_ADC_FIFO_ON_ST 11 -#define BIT_MASK_ADC_FIFO_ON_ST 0x1 -#define BIT_CTRL_ADC_FIFO_ON_ST(x) (((x) & BIT_MASK_ADC_FIFO_ON_ST) << BIT_SHIFT_ADC_FIFO_ON_ST) - -#define BIT_ADC_ISO_ON_ST BIT(10) -#define BIT_SHIFT_ADC_ISO_ON_ST 10 -#define BIT_MASK_ADC_ISO_ON_ST 0x1 -#define BIT_CTRL_ADC_ISO_ON_ST(x) (((x) & BIT_MASK_ADC_ISO_ON_ST) << BIT_SHIFT_ADC_ISO_ON_ST) - -#define BIT_ADC_PWR33_ON_ST BIT(9) -#define BIT_SHIFT_ADC_PWR33_ON_ST 9 -#define BIT_MASK_ADC_PWR33_ON_ST 0x1 -#define BIT_CTRL_ADC_PWR33_ON_ST(x) (((x) & BIT_MASK_ADC_PWR33_ON_ST) << BIT_SHIFT_ADC_PWR33_ON_ST) - -#define BIT_ADC_PWR12_ON_ST BIT(8) -#define BIT_SHIFT_ADC_PWR12_ON_ST 8 -#define BIT_MASK_ADC_PWR12_ON_ST 0x1 -#define BIT_CTRL_ADC_PWR12_ON_ST(x) (((x) & BIT_MASK_ADC_PWR12_ON_ST) << BIT_SHIFT_ADC_PWR12_ON_ST) - -#define BIT_ADC_ISO_MANUAL BIT(3) -#define BIT_SHIFT_ADC_ISO_MANUAL 3 -#define BIT_MASK_ADC_ISO_MANUAL 0x1 -#define BIT_CTRL_ADC_ISO_MANUAL(x) (((x) & BIT_MASK_ADC_ISO_MANUAL) << BIT_SHIFT_ADC_ISO_MANUAL) - -#define BIT_ADC_PWR33_MANUAL BIT(2) -#define BIT_SHIFT_ADC_PWR33_MANUAL 2 -#define BIT_MASK_ADC_PWR33_MANUAL 0x1 -#define BIT_CTRL_ADC_PWR33_MANUAL(x) (((x) & BIT_MASK_ADC_PWR33_MANUAL) << BIT_SHIFT_ADC_PWR33_MANUAL) - -#define BIT_ADC_PWR12_MANUAL BIT(1) -#define BIT_SHIFT_ADC_PWR12_MANUAL 1 -#define BIT_MASK_ADC_PWR12_MANUAL 0x1 -#define BIT_CTRL_ADC_PWR12_MANUAL(x) (((x) & BIT_MASK_ADC_PWR12_MANUAL) << BIT_SHIFT_ADC_PWR12_MANUAL) - -#define BIT_ADC_PWR_AUTO BIT(0) -#define BIT_SHIFT_ADC_PWR_AUTO 0 -#define BIT_MASK_ADC_PWR_AUTO 0x1 -#define BIT_CTRL_ADC_PWR_AUTO(x) (((x) & BIT_MASK_ADC_PWR_AUTO) << BIT_SHIFT_ADC_PWR_AUTO) - - -//2 REG_ADC_ANAPAR_AD0 - -#define BIT_SHIFT_ADC_ANAPAR_AD0 2 -#define BIT_MASK_ADC_ANAPAR_AD0 0x3fffffff -#define BIT_ADC_ANAPAR_AD0(x) (((x) & BIT_MASK_ADC_ANAPAR_AD0) << BIT_SHIFT_ADC_ANAPAR_AD0) -#define BIT_CTRL_ADC_ANAPAR_AD0(x) (((x) & BIT_MASK_ADC_ANAPAR_AD0) << BIT_SHIFT_ADC_ANAPAR_AD0) -#define BIT_GET_ADC_ANAPAR_AD0(x) (((x) >> BIT_SHIFT_ADC_ANAPAR_AD0) & BIT_MASK_ADC_ANAPAR_AD0) - -#define BIT_ADC_AUDIO_EN BIT(1) -#define BIT_SHIFT_ADC_AUDIO_EN 1 -#define BIT_MASK_ADC_AUDIO_EN 0x1 -#define BIT_CTRL_ADC_AUDIO_EN(x) (((x) & BIT_MASK_ADC_AUDIO_EN) << BIT_SHIFT_ADC_AUDIO_EN) - -#define BIT_ADC_EN_MANUAL BIT(0) -#define BIT_SHIFT_ADC_EN_MANUAL 0 -#define BIT_MASK_ADC_EN_MANUAL 0x1 -#define BIT_CTRL_ADC_EN_MANUAL(x) (((x) & BIT_MASK_ADC_EN_MANUAL) << BIT_SHIFT_ADC_EN_MANUAL) - - -//2 REG_ADC_ANAPAR_AD1 - -#define BIT_SHIFT_ADC_ANAPAR_AD1 0 -#define BIT_MASK_ADC_ANAPAR_AD1 0xffffffffL -#define BIT_ADC_ANAPAR_AD1(x) (((x) & BIT_MASK_ADC_ANAPAR_AD1) << BIT_SHIFT_ADC_ANAPAR_AD1) -#define BIT_CTRL_ADC_ANAPAR_AD1(x) (((x) & BIT_MASK_ADC_ANAPAR_AD1) << BIT_SHIFT_ADC_ANAPAR_AD1) -#define BIT_GET_ADC_ANAPAR_AD1(x) (((x) >> BIT_SHIFT_ADC_ANAPAR_AD1) & BIT_MASK_ADC_ANAPAR_AD1) - - -//2 REG_ADC_ANAPAR_AD2 - -#define BIT_SHIFT_ADC_ANAPAR_AD2 0 -#define BIT_MASK_ADC_ANAPAR_AD2 0xffffffffL -#define BIT_ADC_ANAPAR_AD2(x) (((x) & BIT_MASK_ADC_ANAPAR_AD2) << BIT_SHIFT_ADC_ANAPAR_AD2) -#define BIT_CTRL_ADC_ANAPAR_AD2(x) (((x) & BIT_MASK_ADC_ANAPAR_AD2) << BIT_SHIFT_ADC_ANAPAR_AD2) -#define BIT_GET_ADC_ANAPAR_AD2(x) (((x) >> BIT_SHIFT_ADC_ANAPAR_AD2) & BIT_MASK_ADC_ANAPAR_AD2) - - -//2 REG_ADC_ANAPAR_AD3 - -#define BIT_SHIFT_ADC_ANAPAR_AD3 0 -#define BIT_MASK_ADC_ANAPAR_AD3 0xffffffffL -#define BIT_ADC_ANAPAR_AD3(x) (((x) & BIT_MASK_ADC_ANAPAR_AD3) << BIT_SHIFT_ADC_ANAPAR_AD3) -#define BIT_CTRL_ADC_ANAPAR_AD3(x) (((x) & BIT_MASK_ADC_ANAPAR_AD3) << BIT_SHIFT_ADC_ANAPAR_AD3) -#define BIT_GET_ADC_ANAPAR_AD3(x) (((x) >> BIT_SHIFT_ADC_ANAPAR_AD3) & BIT_MASK_ADC_ANAPAR_AD3) - - -//2 REG_ADC_ANAPAR_AD4 - -#define BIT_SHIFT_ADC_ANAPAR_AD4 0 -#define BIT_MASK_ADC_ANAPAR_AD4 0xffffffffL -#define BIT_ADC_ANAPAR_AD4(x) (((x) & BIT_MASK_ADC_ANAPAR_AD4) << BIT_SHIFT_ADC_ANAPAR_AD4) -#define BIT_CTRL_ADC_ANAPAR_AD4(x) (((x) & BIT_MASK_ADC_ANAPAR_AD4) << BIT_SHIFT_ADC_ANAPAR_AD4) -#define BIT_GET_ADC_ANAPAR_AD4(x) (((x) >> BIT_SHIFT_ADC_ANAPAR_AD4) & BIT_MASK_ADC_ANAPAR_AD4) - - -//2 REG_ADC_ANAPAR_AD5 - -#define BIT_SHIFT_ADC_ANAPAR_AD5 0 -#define BIT_MASK_ADC_ANAPAR_AD5 0xffffffffL -#define BIT_ADC_ANAPAR_AD5(x) (((x) & BIT_MASK_ADC_ANAPAR_AD5) << BIT_SHIFT_ADC_ANAPAR_AD5) -#define BIT_CTRL_ADC_ANAPAR_AD5(x) (((x) & BIT_MASK_ADC_ANAPAR_AD5) << BIT_SHIFT_ADC_ANAPAR_AD5) -#define BIT_GET_ADC_ANAPAR_AD5(x) (((x) >> BIT_SHIFT_ADC_ANAPAR_AD5) & BIT_MASK_ADC_ANAPAR_AD5) - - -//2 REG_ADC_CALI_DATA - -#define BIT_SHIFT_ADC_CALI_DATA_6 16 -#define BIT_MASK_ADC_CALI_DATA_6 0xffff -#define BIT_ADC_CALI_DATA_6(x) (((x) & BIT_MASK_ADC_CALI_DATA_6) << BIT_SHIFT_ADC_CALI_DATA_6) -#define BIT_CTRL_ADC_CALI_DATA_6(x) (((x) & BIT_MASK_ADC_CALI_DATA_6) << BIT_SHIFT_ADC_CALI_DATA_6) -#define BIT_GET_ADC_CALI_DATA_6(x) (((x) >> BIT_SHIFT_ADC_CALI_DATA_6) & BIT_MASK_ADC_CALI_DATA_6) - - -#define BIT_SHIFT_ADC_CALI_DATA_0 0 -#define BIT_MASK_ADC_CALI_DATA_0 0xffff -#define BIT_ADC_CALI_DATA_0(x) (((x) & BIT_MASK_ADC_CALI_DATA_0) << BIT_SHIFT_ADC_CALI_DATA_0) -#define BIT_CTRL_ADC_CALI_DATA_0(x) (((x) & BIT_MASK_ADC_CALI_DATA_0) << BIT_SHIFT_ADC_CALI_DATA_0) -#define BIT_GET_ADC_CALI_DATA_0(x) (((x) >> BIT_SHIFT_ADC_CALI_DATA_0) & BIT_MASK_ADC_CALI_DATA_0) - -//================ Register Reg Field ========================= -#define REG_ADC_FIFO_READ 0x0000 -#define REG_ADC_CONTROL 0x0004 -#define REG_ADC_INTR_EN 0x0008 -#define REG_ADC_INTR_STS 0x000C -#define REG_ADC_COMP_VALUE_L 0x0010 -#define REG_ADC_COMP_VALUE_H 0x0014 -#define REG_ADC_COMP_SET 0x0018 -#define REG_ADC_POWER 0x001C -#define REG_ADC_ANAPAR_AD0 0x0020 -#define REG_ADC_ANAPAR_AD1 0x0024 -#define REG_ADC_ANAPAR_AD2 0x0028 -#define REG_ADC_ANAPAR_AD3 0x002C -#define REG_ADC_ANAPAR_AD4 0x0030 -#define REG_ADC_ANAPAR_AD5 0x0034 -#define REG_ADC_CALI_DATA 0x0038 - -//================ ADC HAL related enumeration ================== - -//================ ADC Function Prototypes ===================== -#define HAL_ADC_WRITE32(addr, value) HAL_WRITE32(ADC_REG_BASE,addr,value) -#define HAL_ADC_READ32(addr) HAL_READ32(ADC_REG_BASE,addr) - -RTK_STATUS HalADCInit8195a(IN void *Data); -RTK_STATUS HalADCDeInit8195a(IN void *Data); -RTK_STATUS HalADCEnableRtl8195a(IN void *Data); -RTK_STATUS HalADCIntrCtrl8195a(IN void *Data); -uint32_t HalADCReceiveRtl8195a(IN void *Data); -uint32_t HalADCReadRegRtl8195a(IN void *Data,IN uint8_t I2CReg); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_dac.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_dac.c deleted file mode 100644 index ed09cf6..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_dac.c +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#include "rtl8195a.h" -#include "rtl8195a_dac.h" -#include "hal_dac.h" - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalDACInit8195a -// -// Description: -// To initialize DAC module by using the given data. -// -// Arguments: -// [in] void *Data - -// The DAC parameter data struct. -// -// Return: -// The status of the DeInit process. -// _EXIT_SUCCESS if the initialization succeeded. -// _EXIT_FAILURE if the initialization failed. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-15. -// -//--------------------------------------------------------------------------------------------------- -RTK_STATUS -HalDACInit8195a( - IN void *Data -){ - PHAL_DAC_INIT_DAT pHalDacInitData = (PHAL_DAC_INIT_DAT)Data; - uint32_t DacTempDat; - uint8_t DacTempIdx = pHalDacInitData->DACIdx; - - /* Enable DAC power cut */ - DacTempDat = HAL_DAC_READ32(0, REG_DAC_PWR_CTRL); - DacTempDat |= BIT_DAC_PWR_AUTO; - - HAL_DAC_WRITE32(0, REG_DAC_PWR_CTRL, DacTempDat); - - /* Disable DAC module first */ - HAL_DAC_WRITE32(DacTempIdx, REG_DAC_CTRL, 0); - - /* Setup DAC module */ - DacTempDat = 0; - DacTempDat |= (BIT_CTRL_DAC_SPEED(pHalDacInitData->DACDataRate) | - BIT_CTRL_DAC_ENDIAN(pHalDacInitData->DACEndian) | - BIT_CTRL_DAC_FILTER_SETTLE(pHalDacInitData->DACFilterSet) | - BIT_CTRL_DAC_BURST_SIZE(pHalDacInitData->DACBurstSz) | - BIT_CTRL_DAC_DBG_SEL(pHalDacInitData->DACDbgSel) | - BIT_CTRL_DAC_DSC_DBG_SEL(pHalDacInitData->DACDscDbgSel) | - BIT_CTRL_DAC_BYPASS_DSC(pHalDacInitData->DACBPDsc) | - BIT_CTRL_DAC_DELTA_SIGMA(pHalDacInitData->DACDeltaSig)); - - HAL_DAC_WRITE32(DacTempIdx, REG_DAC_CTRL, DacTempDat); - - return _EXIT_SUCCESS; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalI2CInit8195a -// -// Description: -// To initialize I2C module by using the given data. -// -// Arguments: -// [in] void *Data - -// The I2C parameter data struct. -// -// Return: -// The status of the DeInit process. -// _EXIT_SUCCESS if the initialization succeeded. -// _EXIT_FAILURE if the initialization failed. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//--------------------------------------------------------------------------------------------------- -RTK_STATUS -HalDACDeInit8195a( - IN void *Data -){ - PHAL_DAC_INIT_DAT pHalDacInitData = (PHAL_DAC_INIT_DAT)Data; - uint32_t DacTempDat; - - DacTempDat = HAL_DAC_READ32(pHalDacInitData->DACIdx, REG_DAC_CTRL); - DacTempDat &= (~BIT_DAC_FIFO_EN); - HAL_DAC_WRITE32(pHalDacInitData->DACIdx, REG_DAC_CTRL ,DacTempDat); - - return _EXIT_SUCCESS; -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalI2CIntrCtrl8195a -// -// Description: -// Modify the I2C interrupt mask according to the given value -// -// Arguments: -// [in] void *Data - -// The I2C parameter data struct. -// -// Return: -// The status of the enable process. -// _EXIT_SUCCESS if the de-initialization succeeded. -// _EXIT_FAILURE if the de-initialization failed. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-02-18. -// -//--------------------------------------------------------------------------------------------------- -RTK_STATUS -HalDACEnableRtl8195a( - IN void *Data -){ - PHAL_DAC_INIT_DAT pHalDacInitData = (PHAL_DAC_INIT_DAT)Data; - uint32_t DacTempDat; - uint8_t DacTempIdx = pHalDacInitData->DACIdx; - - DacTempDat = HAL_DAC_READ32(DacTempIdx, REG_DAC_CTRL); - DacTempDat &= (~BIT_DAC_FIFO_EN); - - DacTempDat |= BIT_CTRL_DAC_FIFO_EN(pHalDacInitData->DACEn); - HAL_DAC_WRITE32(DacTempIdx, REG_DAC_CTRL, DacTempDat); - - return _EXIT_SUCCESS; -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalI2CIntrCtrl8195a -// -// Description: -// Modify the I2C interrupt mask according to the given value -// -// Arguments: -// [in] void *Data - -// The I2C parameter data struct. -// -// Return: -// The status of the enable process. -// _EXIT_SUCCESS if the de-initialization succeeded. -// _EXIT_FAILURE if the de-initialization failed. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-02-18. -// -//--------------------------------------------------------------------------------------------------- -RTK_STATUS -HalDACIntrCtrl8195a( - IN void *Data -){ - PHAL_DAC_INIT_DAT pHalDacInitData = (PHAL_DAC_INIT_DAT)Data; - - HAL_DAC_WRITE32(pHalDacInitData->DACIdx, REG_DAC_INTR_CTRL, pHalDacInitData->DACIntrMSK); - - return _EXIT_SUCCESS; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalI2CReceiveRtl8195a -// -// Description: -// Directly read one data byte a I2C data fifo. -// -// Arguments: -// [in] void *Data - -// The I2C parameter data struct. -// -// Return: -// The first data fifo content. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-02-18. -// -//--------------------------------------------------------------------------------------------------- -uint8_t -HalDACSendRtl8195a( - IN void *Data -){ - - - return (0); -} - - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalDACReadRegRtl8195a -// -// Description: -// -// -// Arguments: -// [in] void *Data - -// The DAC parameter data struct. -// [in] I2CReg - -// The DAC register offset. -// -// Return: -// The DAC register content in uint32_t format. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-15. -// -//--------------------------------------------------------------------------------------------------- -uint32_t -HalDACReadRegRtl8195a( - IN void *Data, - IN uint8_t I2CReg -){ - PHAL_DAC_INIT_DAT pHalDacInitData = (PHAL_DAC_INIT_DAT)Data; - - //DBG_8195A_DAC("dac read reg idx:%x\n",pHalDacInitData->DACIdx); - //DBG_8195A_DAC("dac read reg offset:%x\n",I2CReg); - - return (uint32_t)HAL_DAC_READ32(pHalDacInitData->DACIdx, I2CReg); -} - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_dac.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_dac.h deleted file mode 100644 index 03a16ec..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_dac.h +++ /dev/null @@ -1,294 +0,0 @@ -#ifndef _RTL8195A_DAC_H_ -#define _RTL8195A_DAC_H_ - -//================ Register Bit Field ========================== -//2 REG_DAC0_FIFO_WR - -#define BIT_SHIFT_DAC0_FIFO_WO 0 -#define BIT_MASK_DAC0_FIFO_WO 0xffffffffL -#define BIT_DAC0_FIFO_WO(x) (((x) & BIT_MASK_DAC0_FIFO_WO) << BIT_SHIFT_DAC0_FIFO_WO) -#define BIT_CTRL_DAC0_FIFO_WO(x) (((x) & BIT_MASK_DAC0_FIFO_WO) << BIT_SHIFT_DAC0_FIFO_WO) -#define BIT_GET_DAC0_FIFO_WO(x) (((x) >> BIT_SHIFT_DAC0_FIFO_WO) & BIT_MASK_DAC0_FIFO_WO) - - -//2 REG_DAC_CTRL - -#define BIT_SHIFT_DAC_DELTA_SIGMA 25 -#define BIT_MASK_DAC_DELTA_SIGMA 0x7 -#define BIT_DAC_DELTA_SIGMA(x) (((x) & BIT_MASK_DAC_DELTA_SIGMA) << BIT_SHIFT_DAC_DELTA_SIGMA) -#define BIT_CTRL_DAC_DELTA_SIGMA(x) (((x) & BIT_MASK_DAC_DELTA_SIGMA) << BIT_SHIFT_DAC_DELTA_SIGMA) -#define BIT_GET_DAC_DELTA_SIGMA(x) (((x) >> BIT_SHIFT_DAC_DELTA_SIGMA) & BIT_MASK_DAC_DELTA_SIGMA) - -#define BIT_DAC_BYPASS_DSC BIT(24) -#define BIT_SHIFT_DAC_BYPASS_DSC 24 -#define BIT_MASK_DAC_BYPASS_DSC 0x1 -#define BIT_CTRL_DAC_BYPASS_DSC(x) (((x) & BIT_MASK_DAC_BYPASS_DSC) << BIT_SHIFT_DAC_BYPASS_DSC) - - -#define BIT_SHIFT_DAC_DSC_DBG_SEL 19 -#define BIT_MASK_DAC_DSC_DBG_SEL 0x3 -#define BIT_DAC_DSC_DBG_SEL(x) (((x) & BIT_MASK_DAC_DSC_DBG_SEL) << BIT_SHIFT_DAC_DSC_DBG_SEL) -#define BIT_CTRL_DAC_DSC_DBG_SEL(x) (((x) & BIT_MASK_DAC_DSC_DBG_SEL) << BIT_SHIFT_DAC_DSC_DBG_SEL) -#define BIT_GET_DAC_DSC_DBG_SEL(x) (((x) >> BIT_SHIFT_DAC_DSC_DBG_SEL) & BIT_MASK_DAC_DSC_DBG_SEL) - - -#define BIT_SHIFT_DAC_DBG_SEL 16 -#define BIT_MASK_DAC_DBG_SEL 0x7 -#define BIT_DAC_DBG_SEL(x) (((x) & BIT_MASK_DAC_DBG_SEL) << BIT_SHIFT_DAC_DBG_SEL) -#define BIT_CTRL_DAC_DBG_SEL(x) (((x) & BIT_MASK_DAC_DBG_SEL) << BIT_SHIFT_DAC_DBG_SEL) -#define BIT_GET_DAC_DBG_SEL(x) (((x) >> BIT_SHIFT_DAC_DBG_SEL) & BIT_MASK_DAC_DBG_SEL) - - -#define BIT_SHIFT_DAC_BURST_SIZE 8 -#define BIT_MASK_DAC_BURST_SIZE 0xf -#define BIT_DAC_BURST_SIZE(x) (((x) & BIT_MASK_DAC_BURST_SIZE) << BIT_SHIFT_DAC_BURST_SIZE) -#define BIT_CTRL_DAC_BURST_SIZE(x) (((x) & BIT_MASK_DAC_BURST_SIZE) << BIT_SHIFT_DAC_BURST_SIZE) -#define BIT_GET_DAC_BURST_SIZE(x) (((x) >> BIT_SHIFT_DAC_BURST_SIZE) & BIT_MASK_DAC_BURST_SIZE) - -#define BIT_DAC_FILTER_SETTLE BIT(4) -#define BIT_SHIFT_DAC_FILTER_SETTLE 4 -#define BIT_MASK_DAC_FILTER_SETTLE 0x1 -#define BIT_CTRL_DAC_FILTER_SETTLE(x) (((x) & BIT_MASK_DAC_FILTER_SETTLE) << BIT_SHIFT_DAC_FILTER_SETTLE) - -#define BIT_DAC_OV_OPTION BIT(3) -#define BIT_SHIFT_DAC_OV_OPTION 3 -#define BIT_MASK_DAC_OV_OPTION 0x1 -#define BIT_CTRL_DAC_OV_OPTION(x) (((x) & BIT_MASK_DAC_OV_OPTION) << BIT_SHIFT_DAC_OV_OPTION) - -#define BIT_DAC_ENDIAN BIT(2) -#define BIT_SHIFT_DAC_ENDIAN 2 -#define BIT_MASK_DAC_ENDIAN 0x1 -#define BIT_CTRL_DAC_ENDIAN(x) (((x) & BIT_MASK_DAC_ENDIAN) << BIT_SHIFT_DAC_ENDIAN) - -#define BIT_DAC_SPEED BIT(1) -#define BIT_SHIFT_DAC_SPEED 1 -#define BIT_MASK_DAC_SPEED 0x1 -#define BIT_CTRL_DAC_SPEED(x) (((x) & BIT_MASK_DAC_SPEED) << BIT_SHIFT_DAC_SPEED) - -#define BIT_DAC_FIFO_EN BIT(0) -#define BIT_SHIFT_DAC_FIFO_EN 0 -#define BIT_MASK_DAC_FIFO_EN 0x1 -#define BIT_CTRL_DAC_FIFO_EN(x) (((x) & BIT_MASK_DAC_FIFO_EN) << BIT_SHIFT_DAC_FIFO_EN) - - -//2 REG_DAC_INTR_CTRL -#define BIT_DAC_DSC_OVERFLOW1_EN BIT(6) -#define BIT_SHIFT_DAC_DSC_OVERFLOW1_EN 6 -#define BIT_MASK_DAC_DSC_OVERFLOW1_EN 0x1 -#define BIT_CTRL_DAC_DSC_OVERFLOW1_EN(x) (((x) & BIT_MASK_DAC_DSC_OVERFLOW1_EN) << BIT_SHIFT_DAC_DSC_OVERFLOW1_EN) - -#define BIT_DAC_DSC_OVERFLOW0_EN BIT(5) -#define BIT_SHIFT_DAC_DSC_OVERFLOW0_EN 5 -#define BIT_MASK_DAC_DSC_OVERFLOW0_EN 0x1 -#define BIT_CTRL_DAC_DSC_OVERFLOW0_EN(x) (((x) & BIT_MASK_DAC_DSC_OVERFLOW0_EN) << BIT_SHIFT_DAC_DSC_OVERFLOW0_EN) - -#define BIT_DAC__WRITE_ERROR_EN BIT(4) -#define BIT_SHIFT_DAC__WRITE_ERROR_EN 4 -#define BIT_MASK_DAC__WRITE_ERROR_EN 0x1 -#define BIT_CTRL_DAC__WRITE_ERROR_EN(x) (((x) & BIT_MASK_DAC__WRITE_ERROR_EN) << BIT_SHIFT_DAC__WRITE_ERROR_EN) - -#define BIT_DAC_FIFO_STOP_EN BIT(3) -#define BIT_SHIFT_DAC_FIFO_STOP_EN 3 -#define BIT_MASK_DAC_FIFO_STOP_EN 0x1 -#define BIT_CTRL_DAC_FIFO_STOP_EN(x) (((x) & BIT_MASK_DAC_FIFO_STOP_EN) << BIT_SHIFT_DAC_FIFO_STOP_EN) - -#define BIT_DAC_FIFO_OVERFLOW_EN BIT(2) -#define BIT_SHIFT_DAC_FIFO_OVERFLOW_EN 2 -#define BIT_MASK_DAC_FIFO_OVERFLOW_EN 0x1 -#define BIT_CTRL_DAC_FIFO_OVERFLOW_EN(x) (((x) & BIT_MASK_DAC_FIFO_OVERFLOW_EN) << BIT_SHIFT_DAC_FIFO_OVERFLOW_EN) - -#define BIT_DAC_FIFO_WR_REQ_EN BIT(1) -#define BIT_SHIFT_DAC_FIFO_WR_REQ_EN 1 -#define BIT_MASK_DAC_FIFO_WR_REQ_EN 0x1 -#define BIT_CTRL_DAC_FIFO_WR_REQ_EN(x) (((x) & BIT_MASK_DAC_FIFO_WR_REQ_EN) << BIT_SHIFT_DAC_FIFO_WR_REQ_EN) - -#define BIT_DAC_FIFO_FULL_EN BIT(0) -#define BIT_SHIFT_DAC_FIFO_FULL_EN 0 -#define BIT_MASK_DAC_FIFO_FULL_EN 0x1 -#define BIT_CTRL_DAC_FIFO_FULL_EN(x) (((x) & BIT_MASK_DAC_FIFO_FULL_EN) << BIT_SHIFT_DAC_FIFO_FULL_EN) - - -//2 REG_DAC_INTR_STS -#define BIT_DAC_DSC_OVERFLOW1_ST BIT(6) -#define BIT_SHIFT_DAC_DSC_OVERFLOW1_ST 6 -#define BIT_MASK_DAC_DSC_OVERFLOW1_ST 0x1 -#define BIT_CTRL_DAC_DSC_OVERFLOW1_ST(x) (((x) & BIT_MASK_DAC_DSC_OVERFLOW1_ST) << BIT_SHIFT_DAC_DSC_OVERFLOW1_ST) - -#define BIT_DAC_DSC_OVERFLOW0_ST BIT(5) -#define BIT_SHIFT_DAC_DSC_OVERFLOW0_ST 5 -#define BIT_MASK_DAC_DSC_OVERFLOW0_ST 0x1 -#define BIT_CTRL_DAC_DSC_OVERFLOW0_ST(x) (((x) & BIT_MASK_DAC_DSC_OVERFLOW0_ST) << BIT_SHIFT_DAC_DSC_OVERFLOW0_ST) - -#define BIT_DAC__WRITE_ERROR_ST BIT(4) -#define BIT_SHIFT_DAC__WRITE_ERROR_ST 4 -#define BIT_MASK_DAC__WRITE_ERROR_ST 0x1 -#define BIT_CTRL_DAC__WRITE_ERROR_ST(x) (((x) & BIT_MASK_DAC__WRITE_ERROR_ST) << BIT_SHIFT_DAC__WRITE_ERROR_ST) - -#define BIT_DAC_FIFO_STOP_ST BIT(3) -#define BIT_SHIFT_DAC_FIFO_STOP_ST 3 -#define BIT_MASK_DAC_FIFO_STOP_ST 0x1 -#define BIT_CTRL_DAC_FIFO_STOP_ST(x) (((x) & BIT_MASK_DAC_FIFO_STOP_ST) << BIT_SHIFT_DAC_FIFO_STOP_ST) - -#define BIT_DAC_FIFO_OVERFLOW_ST BIT(2) -#define BIT_SHIFT_DAC_FIFO_OVERFLOW_ST 2 -#define BIT_MASK_DAC_FIFO_OVERFLOW_ST 0x1 -#define BIT_CTRL_DAC_FIFO_OVERFLOW_ST(x) (((x) & BIT_MASK_DAC_FIFO_OVERFLOW_ST) << BIT_SHIFT_DAC_FIFO_OVERFLOW_ST) - -#define BIT_DAC_FIFO_WR_REQ_ST BIT(1) -#define BIT_SHIFT_DAC_FIFO_WR_REQ_ST 1 -#define BIT_MASK_DAC_FIFO_WR_REQ_ST 0x1 -#define BIT_CTRL_DAC_FIFO_WR_REQ_ST(x) (((x) & BIT_MASK_DAC_FIFO_WR_REQ_ST) << BIT_SHIFT_DAC_FIFO_WR_REQ_ST) - -#define BIT_DAC_FIFO_FULL_ST BIT(0) -#define BIT_SHIFT_DAC_FIFO_FULL_ST 0 -#define BIT_MASK_DAC_FIFO_FULL_ST 0x1 -#define BIT_CTRL_DAC_FIFO_FULL_ST(x) (((x) & BIT_MASK_DAC_FIFO_FULL_ST) << BIT_SHIFT_DAC_FIFO_FULL_ST) - - -//2 REG_DAC_PWR_CTRL - -#define BIT_SHIFT_DAC_PWR_CUT_CNTR 16 -#define BIT_MASK_DAC_PWR_CUT_CNTR 0xff -#define BIT_DAC_PWR_CUT_CNTR(x) (((x) & BIT_MASK_DAC_PWR_CUT_CNTR) << BIT_SHIFT_DAC_PWR_CUT_CNTR) -#define BIT_CTRL_DAC_PWR_CUT_CNTR(x) (((x) & BIT_MASK_DAC_PWR_CUT_CNTR) << BIT_SHIFT_DAC_PWR_CUT_CNTR) -#define BIT_GET_DAC_PWR_CUT_CNTR(x) (((x) >> BIT_SHIFT_DAC_PWR_CUT_CNTR) & BIT_MASK_DAC_PWR_CUT_CNTR) - -#define BIT_ST_DAC_FIFO_ON BIT(11) -#define BIT_SHIFT_ST_DAC_FIFO_ON 11 -#define BIT_MASK_ST_DAC_FIFO_ON 0x1 -#define BIT_CTRL_ST_DAC_FIFO_ON(x) (((x) & BIT_MASK_ST_DAC_FIFO_ON) << BIT_SHIFT_ST_DAC_FIFO_ON) - -#define BIT_ST_DAC_ISO_ON BIT(10) -#define BIT_SHIFT_ST_DAC_ISO_ON 10 -#define BIT_MASK_ST_DAC_ISO_ON 0x1 -#define BIT_CTRL_ST_DAC_ISO_ON(x) (((x) & BIT_MASK_ST_DAC_ISO_ON) << BIT_SHIFT_ST_DAC_ISO_ON) - -#define BIT_ST_DAC_PWR33_ON BIT(9) -#define BIT_SHIFT_ST_DAC_PWR33_ON 9 -#define BIT_MASK_ST_DAC_PWR33_ON 0x1 -#define BIT_CTRL_ST_DAC_PWR33_ON(x) (((x) & BIT_MASK_ST_DAC_PWR33_ON) << BIT_SHIFT_ST_DAC_PWR33_ON) - -#define BIT_ST_DAC_PWR12_ON BIT(8) -#define BIT_SHIFT_ST_DAC_PWR12_ON 8 -#define BIT_MASK_ST_DAC_PWR12_ON 0x1 -#define BIT_CTRL_ST_DAC_PWR12_ON(x) (((x) & BIT_MASK_ST_DAC_PWR12_ON) << BIT_SHIFT_ST_DAC_PWR12_ON) - -#define BIT_DAC_ISO_MANU BIT(3) -#define BIT_SHIFT_DAC_ISO_MANU 3 -#define BIT_MASK_DAC_ISO_MANU 0x1 -#define BIT_CTRL_DAC_ISO_MANU(x) (((x) & BIT_MASK_DAC_ISO_MANU) << BIT_SHIFT_DAC_ISO_MANU) - -#define BIT_DAC_PWR33_MANU BIT(2) -#define BIT_SHIFT_DAC_PWR33_MANU 2 -#define BIT_MASK_DAC_PWR33_MANU 0x1 -#define BIT_CTRL_DAC_PWR33_MANU(x) (((x) & BIT_MASK_DAC_PWR33_MANU) << BIT_SHIFT_DAC_PWR33_MANU) - -#define BIT_DAC_PWR12_MANU BIT(1) -#define BIT_SHIFT_DAC_PWR12_MANU 1 -#define BIT_MASK_DAC_PWR12_MANU 0x1 -#define BIT_CTRL_DAC_PWR12_MANU(x) (((x) & BIT_MASK_DAC_PWR12_MANU) << BIT_SHIFT_DAC_PWR12_MANU) - -#define BIT_DAC_PWR_AUTO BIT(0) -#define BIT_SHIFT_DAC_PWR_AUTO 0 -#define BIT_MASK_DAC_PWR_AUTO 0x1 -#define BIT_CTRL_DAC_PWR_AUTO(x) (((x) & BIT_MASK_DAC_PWR_AUTO) << BIT_SHIFT_DAC_PWR_AUTO) - - -//2 REG_DAC_ANAPAR_DA0 - -#define BIT_SHIFT_PWR_ALL_CNTR 12 -#define BIT_MASK_PWR_ALL_CNTR 0xfffff -#define BIT_PWR_ALL_CNTR(x) (((x) & BIT_MASK_PWR_ALL_CNTR) << BIT_SHIFT_PWR_ALL_CNTR) -#define BIT_CTRL_PWR_ALL_CNTR(x) (((x) & BIT_MASK_PWR_ALL_CNTR) << BIT_SHIFT_PWR_ALL_CNTR) -#define BIT_GET_PWR_ALL_CNTR(x) (((x) >> BIT_SHIFT_PWR_ALL_CNTR) & BIT_MASK_PWR_ALL_CNTR) - - -#define BIT_SHIFT_PWR_FUP_CNTR 0 -#define BIT_MASK_PWR_FUP_CNTR 0xfff -#define BIT_PWR_FUP_CNTR(x) (((x) & BIT_MASK_PWR_FUP_CNTR) << BIT_SHIFT_PWR_FUP_CNTR) -#define BIT_CTRL_PWR_FUP_CNTR(x) (((x) & BIT_MASK_PWR_FUP_CNTR) << BIT_SHIFT_PWR_FUP_CNTR) -#define BIT_GET_PWR_FUP_CNTR(x) (((x) >> BIT_SHIFT_PWR_FUP_CNTR) & BIT_MASK_PWR_FUP_CNTR) - - -//2 REG_DAC_ANAPAR_DA1 -#define BIT_FUP_EN BIT(31) -#define BIT_SHIFT_FUP_EN 31 -#define BIT_MASK_FUP_EN 0x1 -#define BIT_CTRL_FUP_EN(x) (((x) & BIT_MASK_FUP_EN) << BIT_SHIFT_FUP_EN) - - -#define BIT_SHIFT_ANAPAR_DA 8 -#define BIT_MASK_ANAPAR_DA 0x7fffff -#define BIT_ANAPAR_DA(x) (((x) & BIT_MASK_ANAPAR_DA) << BIT_SHIFT_ANAPAR_DA) -#define BIT_CTRL_ANAPAR_DA(x) (((x) & BIT_MASK_ANAPAR_DA) << BIT_SHIFT_ANAPAR_DA) -#define BIT_GET_ANAPAR_DA(x) (((x) >> BIT_SHIFT_ANAPAR_DA) & BIT_MASK_ANAPAR_DA) - -#define BIT_D_POW_DACVREF BIT(7) -#define BIT_SHIFT_D_POW_DACVREF 7 -#define BIT_MASK_D_POW_DACVREF 0x1 -#define BIT_CTRL_D_POW_DACVREF(x) (((x) & BIT_MASK_D_POW_DACVREF) << BIT_SHIFT_D_POW_DACVREF) - -#define BIT_D_POW_VREF2 BIT(6) -#define BIT_SHIFT_D_POW_VREF2 6 -#define BIT_MASK_D_POW_VREF2 0x1 -#define BIT_CTRL_D_POW_VREF2(x) (((x) & BIT_MASK_D_POW_VREF2) << BIT_SHIFT_D_POW_VREF2) - -#define BIT_D_POW_MBIAS BIT(5) -#define BIT_SHIFT_D_POW_MBIAS 5 -#define BIT_MASK_D_POW_MBIAS 0x1 -#define BIT_CTRL_D_POW_MBIAS(x) (((x) & BIT_MASK_D_POW_MBIAS) << BIT_SHIFT_D_POW_MBIAS) - -#define BIT_D_POW_DIV4 BIT(4) -#define BIT_SHIFT_D_POW_DIV4 4 -#define BIT_MASK_D_POW_DIV4 0x1 -#define BIT_CTRL_D_POW_DIV4(x) (((x) & BIT_MASK_D_POW_DIV4) << BIT_SHIFT_D_POW_DIV4) - -#define BIT_D_POW_DF1SE_R BIT(3) -#define BIT_SHIFT_D_POW_DF1SE_R 3 -#define BIT_MASK_D_POW_DF1SE_R 0x1 -#define BIT_CTRL_D_POW_DF1SE_R(x) (((x) & BIT_MASK_D_POW_DF1SE_R) << BIT_SHIFT_D_POW_DF1SE_R) - -#define BIT_D_POW_DF2SE_L BIT(2) -#define BIT_SHIFT_D_POW_DF2SE_L 2 -#define BIT_MASK_D_POW_DF2SE_L 0x1 -#define BIT_CTRL_D_POW_DF2SE_L(x) (((x) & BIT_MASK_D_POW_DF2SE_L) << BIT_SHIFT_D_POW_DF2SE_L) - -#define BIT_D_POW_DAC_R BIT(1) -#define BIT_SHIFT_D_POW_DAC_R 1 -#define BIT_MASK_D_POW_DAC_R 0x1 -#define BIT_CTRL_D_POW_DAC_R(x) (((x) & BIT_MASK_D_POW_DAC_R) << BIT_SHIFT_D_POW_DAC_R) - -#define BIT_D_POW_DAC_L BIT(0) -#define BIT_SHIFT_D_POW_DAC_L 0 -#define BIT_MASK_D_POW_DAC_L 0x1 -#define BIT_CTRL_D_POW_DAC_L(x) (((x) & BIT_MASK_D_POW_DAC_L) << BIT_SHIFT_D_POW_DAC_L) - - -//================ Register Reg Field ========================= -#define REG_DAC0_FIFO_WR 0x0000 -#define REG_DAC_CTRL 0x0004 -#define REG_DAC_INTR_CTRL 0x0008 -#define REG_DAC_INTR_STS 0x000C -#define REG_DAC_PWR_CTRL 0x0010 -#define REG_DAC_ANAPAR_DA0 0x0014 -#define REG_DAC_ANAPAR_DA1 0x0018 - - -//================ DAC HAL related enumeration ================== - - -//================ DAC HAL Macro =========================== -#define HAL_DAC_WRITE32(dacidx, addr, value) HAL_WRITE32(DAC_REG_BASE+dacidx*0x800 \ - ,addr,value) -#define HAL_DAC_READ32(dacidx, addr) HAL_READ32(DAC_REG_BASE+dacidx*0x800,addr) - - -//================ DAC Function Prototypes ===================== -RTK_STATUS HalDACInit8195a(IN void *Data); -RTK_STATUS HalDACDeInit8195a(IN void *Data); -RTK_STATUS HalDACEnableRtl8195a(IN void *Data); -RTK_STATUS HalDACIntrCtrl8195a(IN void *Data); -uint8_t HalDACSendRtl8195a(IN void *Data); -uint32_t HalDACReadRegRtl8195a(IN void *Data,IN uint8_t I2CReg); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gdma.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gdma.c deleted file mode 100644 index 9045f8b..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gdma.c +++ /dev/null @@ -1,295 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#include "rtl8195a.h" -#include "rtl8195a_gdma.h" -#include "hal_gdma.h" - -#ifdef CONFIG_GDMA_EN - -#ifndef CONFIG_CHIP_E_CUT -BOOL -HalGdmaChBlockSetingRtl8195a_Patch( - IN void *Data -) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter = (PHAL_GDMA_ADAPTER) Data; - PGDMA_CH_LLI_ELE pLliEle; - struct GDMA_CH_LLI *pGdmaChLli; - struct BLOCK_SIZE_LIST *pGdmaChBkLi; - uint32_t MultiBlockCount = pHalGdmaAdapter->MaxMuliBlock; - uint32_t CtlxLow, CtlxUp, CfgxLow, CfgxUp; - uint8_t GdmaIndex = pHalGdmaAdapter->GdmaIndex; - uint8_t ChNum = pHalGdmaAdapter->ChNum; - uint32_t ChEn = pHalGdmaAdapter->ChEn; - uint8_t GdmaChIsrBitmap = (ChEn & 0xFF); - uint8_t PendingIsrIndex; - - - pLliEle = pHalGdmaAdapter->pLlix->pLliEle; - pGdmaChLli = pHalGdmaAdapter->pLlix->pNextLli; - pGdmaChBkLi = pHalGdmaAdapter->pBlockSizeList; - - - //4 1) Check chanel is avaliable - if (HAL_GDMAX_READ32(GdmaIndex, REG_GDMA_CH_EN) & ChEn) { - //4 Disable Channel - DBG_GDMA_WARN("Channel had used; Disable Channel!\n"); - - HalGdmaChDisRtl8195a(Data); - - } - - //4 2) Check if there are the pending isr; TFR, Block, Src Tran, Dst Tran, Error - for (PendingIsrIndex=0; PendingIsrIndex<5;PendingIsrIndex++) { - - uint32_t PendRaw, PendStstus; - PendRaw = HAL_GDMAX_READ32(GdmaIndex, - (REG_GDMA_RAW_INT_BASE + PendingIsrIndex*8)); - PendStstus = HAL_GDMAX_READ32(GdmaIndex, - (REG_GDMA_STATUS_INT_BASE + PendingIsrIndex*8)); - - if ((PendRaw & GdmaChIsrBitmap) || (PendStstus & GdmaChIsrBitmap)) { - //4 Clear Pending Isr - HAL_GDMAX_WRITE32(GdmaIndex, - (REG_GDMA_CLEAR_INT_BASE + PendingIsrIndex*8), - (PendStstus & (GdmaChIsrBitmap)) - ); - - } - } - - //4 Fill in SARx register - HAL_GDMAX_WRITE32(GdmaIndex, - (REG_GDMA_CH_SAR + ChNum*REG_GDMA_CH_OFF), - (pHalGdmaAdapter->ChSar) - ); - - - //4 Fill in DARx register - HAL_GDMAX_WRITE32(GdmaIndex, - (REG_GDMA_CH_DAR + ChNum*REG_GDMA_CH_OFF), - (pHalGdmaAdapter->ChDar) - ); - - - - //4 3) Process CTLx - CtlxLow = HAL_GDMAX_READ32(GdmaIndex, - (REG_GDMA_CH_CTL + ChNum*REG_GDMA_CH_OFF)); - - //4 Clear Config low register bits - CtlxLow &= (BIT_INVC_CTLX_LO_INT_EN & - BIT_INVC_CTLX_LO_DST_TR_WIDTH & - BIT_INVC_CTLX_LO_SRC_TR_WIDTH & - BIT_INVC_CTLX_LO_DINC & - BIT_INVC_CTLX_LO_SINC & - BIT_INVC_CTLX_LO_DEST_MSIZE & - BIT_INVC_CTLX_LO_SRC_MSIZE & - BIT_INVC_CTLX_LO_TT_FC & - BIT_INVC_CTLX_LO_LLP_DST_EN & - BIT_INVC_CTLX_LO_LLP_SRC_EN); - - CtlxUp = HAL_GDMAX_READ32(GdmaIndex, - (REG_GDMA_CH_CTL + ChNum*REG_GDMA_CH_OFF + 4)); - - //4 Clear Config upper register bits - CtlxUp &= (BIT_INVC_CTLX_UP_BLOCK_BS & - BIT_INVC_CTLX_UP_DONE); - - - CtlxLow = BIT_CTLX_LO_INT_EN(pHalGdmaAdapter->GdmaCtl.IntEn) | - BIT_CTLX_LO_DST_TR_WIDTH(pHalGdmaAdapter->GdmaCtl.DstTrWidth) | - BIT_CTLX_LO_SRC_TR_WIDTH(pHalGdmaAdapter->GdmaCtl.SrcTrWidth) | - BIT_CTLX_LO_DINC(pHalGdmaAdapter->GdmaCtl.Dinc) | - BIT_CTLX_LO_SINC(pHalGdmaAdapter->GdmaCtl.Sinc) | - BIT_CTLX_LO_DEST_MSIZE(pHalGdmaAdapter->GdmaCtl.DestMsize) | - BIT_CTLX_LO_SRC_MSIZE(pHalGdmaAdapter->GdmaCtl.SrcMsize) | - BIT_CTLX_LO_TT_FC(pHalGdmaAdapter->GdmaCtl.TtFc) | - BIT_CTLX_LO_LLP_DST_EN(pHalGdmaAdapter->GdmaCtl.LlpDstEn) | - BIT_CTLX_LO_LLP_SRC_EN(pHalGdmaAdapter->GdmaCtl.LlpSrcEn) | - CtlxLow; - - CtlxUp = BIT_CTLX_UP_BLOCK_BS(pGdmaChBkLi->BlockSize) | - BIT_CTLX_UP_DONE(pHalGdmaAdapter->GdmaCtl.Done) | - CtlxUp; - - //4 Fill in CTLx register - HAL_GDMAX_WRITE32(GdmaIndex, - (REG_GDMA_CH_CTL + ChNum*REG_GDMA_CH_OFF), - CtlxLow - ); - - HAL_GDMAX_WRITE32(GdmaIndex, - (REG_GDMA_CH_CTL + ChNum*REG_GDMA_CH_OFF +4), - CtlxUp - ); - - //4 4) Program CFGx - - CfgxLow = HAL_GDMAX_READ32(GdmaIndex, - (REG_GDMA_CH_CFG + ChNum*REG_GDMA_CH_OFF)); - - CfgxLow &= (BIT_INVC_CFGX_LO_CH_PRIOR & - BIT_INVC_CFGX_LO_CH_SUSP & - BIT_INVC_CFGX_LO_HS_SEL_DST & - BIT_INVC_CFGX_LO_HS_SEL_SRC & - BIT_INVC_CFGX_LO_LOCK_CH_L & - BIT_INVC_CFGX_LO_LOCK_B_L & - BIT_INVC_CFGX_LO_LOCK_CH & - BIT_INVC_CFGX_LO_LOCK_B & - BIT_INVC_CFGX_LO_RELOAD_SRC & - BIT_INVC_CFGX_LO_RELOAD_DST); - - CfgxUp = HAL_GDMAX_READ32(GdmaIndex, - (REG_GDMA_CH_CFG + ChNum*REG_GDMA_CH_OFF + 4)); - - CfgxUp &= (BIT_INVC_CFGX_UP_FIFO_MODE & - BIT_INVC_CFGX_UP_DS_UPD_EN & - BIT_INVC_CFGX_UP_SS_UPD_EN & - BIT_INVC_CFGX_UP_SRC_PER & - BIT_INVC_CFGX_UP_DEST_PER); - - CfgxLow = BIT_CFGX_LO_CH_PRIOR(pHalGdmaAdapter->GdmaCfg.ChPrior) | - BIT_CFGX_LO_CH_SUSP(pHalGdmaAdapter->GdmaCfg.ChSusp) | - BIT_CFGX_LO_HS_SEL_DST(pHalGdmaAdapter->GdmaCfg.HsSelDst) | - BIT_CFGX_LO_HS_SEL_SRC(pHalGdmaAdapter->GdmaCfg.HsSelSrc) | - BIT_CFGX_LO_LOCK_CH_L(pHalGdmaAdapter->GdmaCfg.LockChL) | - BIT_CFGX_LO_LOCK_B_L(pHalGdmaAdapter->GdmaCfg.LockBL) | - BIT_CFGX_LO_LOCK_CH(pHalGdmaAdapter->GdmaCfg.LockCh) | - BIT_CFGX_LO_LOCK_B(pHalGdmaAdapter->GdmaCfg.LockB) | - BIT_CFGX_LO_RELOAD_SRC(pHalGdmaAdapter->GdmaCfg.ReloadSrc) | - BIT_CFGX_LO_RELOAD_DST(pHalGdmaAdapter->GdmaCfg.ReloadDst) | - CfgxLow; - - CfgxUp = BIT_CFGX_UP_FIFO_MODE(pHalGdmaAdapter->GdmaCfg.FifoMode) | - BIT_CFGX_UP_DS_UPD_EN(pHalGdmaAdapter->GdmaCfg.DsUpdEn) | - BIT_CFGX_UP_SS_UPD_EN(pHalGdmaAdapter->GdmaCfg.SsUpdEn) | - BIT_CFGX_UP_SRC_PER(pHalGdmaAdapter->GdmaCfg.SrcPer) | - BIT_CFGX_UP_DEST_PER(pHalGdmaAdapter->GdmaCfg.DestPer) | - CfgxUp; - - HAL_GDMAX_WRITE32(GdmaIndex, - (REG_GDMA_CH_CFG + ChNum*REG_GDMA_CH_OFF), - CfgxLow - ); - - HAL_GDMAX_WRITE32(GdmaIndex, - (REG_GDMA_CH_CFG + ChNum*REG_GDMA_CH_OFF +4), - CfgxUp - ); - - - - //4 Check 4 Bytes Alignment - if ((uint32_t)(pLliEle) & 0x3) { - DBG_GDMA_WARN("LLi Addr: 0x%x not 4 bytes alignment!\n", - pHalGdmaAdapter->pLli); - return _FALSE; - } - - HAL_GDMAX_WRITE32(GdmaIndex, - (REG_GDMA_CH_LLP + ChNum*REG_GDMA_CH_OFF), - pLliEle - ); - - //4 Update the first llp0 - pLliEle->CtlxLow = CtlxLow; - pLliEle->CtlxUp = CtlxUp; - pLliEle->Llpx = (uint32_t)pGdmaChLli->pLliEle; - DBG_GDMA_INFO("Block Count %d\n", MultiBlockCount); - - pGdmaChBkLi = pGdmaChBkLi->pNextBlockSiz; - - while (MultiBlockCount > 1) { - MultiBlockCount--; - DBG_GDMA_INFO("Block Count %d\n", MultiBlockCount); - pLliEle = pGdmaChLli->pLliEle; - - if (NULL == pLliEle) { - DBG_GDMA_ERR("pLliEle Null Point!\n"); - return _FALSE; - } - - //4 Clear the last element llp enable bit - if (1 == MultiBlockCount) { - if (((pHalGdmaAdapter->Rsvd4to7) & 0x01) == 1){ - CtlxLow &= (BIT_INVC_CTLX_LO_LLP_DST_EN & - BIT_INVC_CTLX_LO_LLP_SRC_EN); - } - } - //4 Update block size for transfer - CtlxUp &= (BIT_INVC_CTLX_UP_BLOCK_BS); - CtlxUp |= BIT_CTLX_UP_BLOCK_BS(pGdmaChBkLi->BlockSize); - - //4 Update tje Lli and Block size list point to next llp - pGdmaChLli = pGdmaChLli->pNextLli; - pGdmaChBkLi = pGdmaChBkLi->pNextBlockSiz; - - //4 Updatethe Llpx context - pLliEle->CtlxLow = CtlxLow; - pLliEle->CtlxUp = CtlxUp; - pLliEle->Llpx = (uint32_t)(pGdmaChLli->pLliEle); - - } - - return _TRUE; -} - -uint32_t -HalGdmaQueryDArRtl8195a( - IN void *Data -) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter = (PHAL_GDMA_ADAPTER) Data; - uint8_t GdmaIndex = pHalGdmaAdapter->GdmaIndex; - uint8_t ChNum = pHalGdmaAdapter->ChNum; - uint32_t dar; - - dar = HAL_GDMAX_READ32(GdmaIndex, - (REG_GDMA_CH_DAR + ChNum*REG_GDMA_CH_OFF)); - - return dar; -} - -uint32_t -HalGdmaQuerySArRtl8195a( - IN void *Data -) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter = (PHAL_GDMA_ADAPTER) Data; - uint8_t GdmaIndex = pHalGdmaAdapter->GdmaIndex; - uint8_t ChNum = pHalGdmaAdapter->ChNum; - uint32_t dar; - - dar = HAL_GDMAX_READ32(GdmaIndex, - (REG_GDMA_CH_SAR + ChNum*REG_GDMA_CH_OFF)); - - return dar; -} - -BOOL -HalGdmaQueryChEnRtl8195a ( - IN void *Data -) -{ - - PHAL_GDMA_ADAPTER pHalGdmaAdapter = Data; - - if (HAL_GDMAX_READ32(pHalGdmaAdapter->GdmaIndex, REG_GDMA_CH_EN) & (pHalGdmaAdapter->ChEn)) { - return 1; - } else { - return 0; - } -} - -#endif -#endif // CONFIG_GDMA_EN - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gdma.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gdma.h deleted file mode 100644 index fef7992..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gdma.h +++ /dev/null @@ -1,528 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#ifndef _RTL8195A_GDMA_H_ -#define _RTL8195A_GDMA_H_ - -// Define GDMA Handshake interface with peripheral, 0 -> GDMA0, 1-> GDMA1 -// Set this Hnadshake interface map to register REG_PESOC_SOC_CTRL -#define GDMA_HANDSHAKE_UART0_TX 0 -#define GDMA_HANDSHAKE_UART0_RX 1 -#define GDMA_HANDSHAKE_UART1_TX 2 -#define GDMA_HANDSHAKE_UART1_RX 3 -#define GDMA_HANDSHAKE_UART2_TX 14 // Only on GDMA 0, hardware fixed -#define GDMA_HANDSHAKE_UART2_RX 14 // Only on GDMA 1, hardware fixed - -#define GDMA_HANDSHAKE_SSI0_TX 4 -#define GDMA_HANDSHAKE_SSI0_RX 5 -#define GDMA_HANDSHAKE_SSI1_TX 6 -#define GDMA_HANDSHAKE_SSI1_RX 7 -#define GDMA_HANDSHAKE_SSI2_TX 15 // Only on GDMA 0, hardware fixed -#define GDMA_HANDSHAKE_SSI2_RX 15 // Only on GDMA 1, hardware fixed - -#define GDMA_HANDSHAKE_I2C0_TX 8 -#define GDMA_HANDSHAKE_I2C0_RX 9 -#define GDMA_HANDSHAKE_I2C1_TX 10 -#define GDMA_HANDSHAKE_I2C1_RX 11 - -#define GDMA_HANDSHAKE_ADC 12 -#define GDMA_HANDSHAKE_DAC0 13 // Only on GDMA 0, hardware fixed -#define GDMA_HANDSHAKE_DAC1 13 // Only on GDMA 1, hardware fixed - -#define HAL_GDMAX_READ32(GdmaIndex, addr) \ - HAL_READ32(GDMA0_REG_BASE+ (GdmaIndex*GDMA1_REG_OFF), addr) -#define HAL_GDMAX_WRITE32(GdmaIndex, addr, value) \ - HAL_WRITE32((GDMA0_REG_BASE+ (GdmaIndex*GDMA1_REG_OFF)), addr, value) -#define HAL_GDMAX_READ16(GdmaIndex, addr) \ - HAL_READ16(GDMA0_REG_BASE+ (GdmaIndex*GDMA1_REG_OFF), addr) -#define HAL_GDMAX_WRITE16(GdmaIndex, addr, value) \ - HAL_WRITE16(GDMA0_REG_BASE+ (GdmaIndex*GDMA1_REG_OFF), addr, value) -#define HAL_GDMAX_READ8(GdmaIndex, addr) \ - HAL_READ8(GDMA0_REG_BASE+ (GdmaIndex*GDMA1_REG_OFF), addr) -#define HAL_GDMAX_WRITE8(GdmaIndex, addr, value) \ - HAL_WRITE8(GDMA0_REG_BASE+ (GdmaIndex*GDMA1_REG_OFF), addr, value) - - -#define GDMA_CH_MAX 0x06 - -#define REG_GDMA_CH_OFF 0x058 -#define REG_GDMA_CH_SAR 0x000 -#define REG_GDMA_CH_DAR 0x008 -#define REG_GDMA_CH_LLP 0x010 -#define REG_GDMA_CH_CTL 0x018 -#define REG_GDMA_CH_SSTAT 0x020 -#define REG_GDMA_CH_DSTAT 0x028 -#define REG_GDMA_CH_SSTATAR 0x030 -#define REG_GDMA_CH_DSTATAR 0x038 -#define REG_GDMA_CH_CFG 0x040 -#define REG_GDMA_CH_SGR 0x048 -#define REG_GDMA_CH_DSR 0x050 - -#define MAX_DMA_BLOCK_SIZE 4092 - -//3 Interrupt Registers -#define REG_GDMA_RAW_INT_BASE 0x2C0 -#define REG_GDMA_RAW_INT_TFR 0x2C0 -#define REG_GDMA_RAW_INT_BLOCK 0x2c8 -#define REG_GDMA_RAW_INT_SRC_TRAN 0x2D0 -#define REG_GDMA_RAW_INT_DST_TRAN 0x2D8 -#define REG_GDMA_RAW_INT_ERR 0x2E0 - -#define REG_GDMA_STATUS_INT_BASE 0x2E8 -#define REG_GDMA_STATUS_INT_TFR 0x2E8 -#define REG_GDMA_STATUS_INT_BLOCK 0x2F0 -#define REG_GDMA_STATUS_INT_SRC_TRAN 0x2F8 -#define REG_GDMA_STATUS_INT_DST_TRAN 0x300 -#define REG_GDMA_STATUS_INT_ERR 0x308 - -#define REG_GDMA_MASK_INT_BASE 0x310 -#define REG_GDMA_MASK_INT_TFR 0x310 -#define REG_GDMA_MASK_INT_BLOCK 0x318 -#define REG_GDMA_MASK_INT_SRC_TRAN 0x320 -#define REG_GDMA_MASK_INT_DST_TRAN 0x328 -#define REG_GDMA_MASK_INT_INT_ERR 0x330 - -#define REG_GDMA_CLEAR_INT_BASE 0x338 -#define REG_GDMA_CLEAR_INT_TFR 0x338 -#define REG_GDMA_CLEAR_INT_BLOCK 0x340 -#define REG_GDMA_CLEAR_INT_SRC_TRAN 0x348 -#define REG_GDMA_CLEAR_INT_DST_TRAN 0x350 -#define REG_GDMA_CLEAR_INT_ERR 0x358 -#define REG_GDMA_STATUS_INT 0x360 - -//3 Software handshaking Registers -#define REG_GDMA_REQ_SRC 0x368 -#define REG_GDMA_REQ_DST 0x370 -#define REG_GDMA_REQ_SGL_REQ 0x378 -#define REG_GDMA_REQ_DST_REQ 0x380 -#define REG_GDMA_REQ_LST_SRC 0x388 -#define REG_GDMA_REQ_LST_DST 0x390 - -//3 Miscellaneous Registers -#define REG_GDMA_DMAC_CFG 0x398 -#define REG_GDMA_CH_EN 0x3A0 -#define REG_GDMA_DMA_ID 0x3A8 -#define REG_GDMA_DMA_TEST 0x3B0 -#define REG_GDMA_DMA_COM_PARAMS6 0x3C8 -#define REG_GDMA_DMA_COM_PARAMS5 0x3D0 -#define REG_GDMA_DMA_COM_PARAMS4 0x3D8 -#define REG_GDMA_DMA_COM_PARAMS3 0x3E0 -#define REG_GDMA_DMA_COM_PARAMS2 0x3E8 -#define REG_GDMA_DMA_COM_PARAMS1 0x3F0 -#define REG_GDMA_DMA_COM_PARAMS0 0x3F8 - -//3 CTL Register Bit Control -#define BIT_SHIFT_CTLX_LO_INT_EN 0 -#define BIT_MASK_CTLX_LO_INT_EN 0x1 -#define BIT_CTLX_LO_INT_EN(x)(((x) & BIT_MASK_CTLX_LO_INT_EN) << BIT_SHIFT_CTLX_LO_INT_EN) -#define BIT_INVC_CTLX_LO_INT_EN (~(BIT_MASK_CTLX_LO_INT_EN << BIT_SHIFT_CTLX_LO_INT_EN)) - -#define BIT_SHIFT_CTLX_LO_DST_TR_WIDTH 1 -#define BIT_MASK_CTLX_LO_DST_TR_WIDTH 0x7 -#define BIT_CTLX_LO_DST_TR_WIDTH(x) (((x) & BIT_MASK_CTLX_LO_DST_TR_WIDTH) << BIT_SHIFT_CTLX_LO_DST_TR_WIDTH) -#define BIT_INVC_CTLX_LO_DST_TR_WIDTH (~(BIT_MASK_CTLX_LO_DST_TR_WIDTH << BIT_SHIFT_CTLX_LO_DST_TR_WIDTH)) - -#define BIT_SHIFT_CTLX_LO_SRC_TR_WIDTH 4 -#define BIT_MASK_CTLX_LO_SRC_TR_WIDTH 0x7 -#define BIT_CTLX_LO_SRC_TR_WIDTH(x) (((x) & BIT_MASK_CTLX_LO_SRC_TR_WIDTH) << BIT_SHIFT_CTLX_LO_SRC_TR_WIDTH) -#define BIT_INVC_CTLX_LO_SRC_TR_WIDTH (~(BIT_MASK_CTLX_LO_SRC_TR_WIDTH << BIT_SHIFT_CTLX_LO_SRC_TR_WIDTH)) - -#define BIT_SHIFT_CTLX_LO_DINC 7 -#define BIT_MASK_CTLX_LO_DINC 0x3 -#define BIT_CTLX_LO_DINC(x)(((x) & BIT_MASK_CTLX_LO_DINC) << BIT_SHIFT_CTLX_LO_DINC) -#define BIT_INVC_CTLX_LO_DINC (~(BIT_MASK_CTLX_LO_DINC << BIT_SHIFT_CTLX_LO_DINC)) - -#define BIT_SHIFT_CTLX_LO_SINC 9 -#define BIT_MASK_CTLX_LO_SINC 0x3 -#define BIT_CTLX_LO_SINC(x)(((x) & BIT_MASK_CTLX_LO_SINC) << BIT_SHIFT_CTLX_LO_SINC) -#define BIT_INVC_CTLX_LO_SINC (~(BIT_MASK_CTLX_LO_SINC << BIT_SHIFT_CTLX_LO_SINC)) - -#define BIT_SHIFT_CTLX_LO_DEST_MSIZE 11 -#define BIT_MASK_CTLX_LO_DEST_MSIZE 0x7 -#define BIT_CTLX_LO_DEST_MSIZE(x)(((x) & BIT_MASK_CTLX_LO_DEST_MSIZE) << BIT_SHIFT_CTLX_LO_DEST_MSIZE) -#define BIT_INVC_CTLX_LO_DEST_MSIZE (~(BIT_MASK_CTLX_LO_DEST_MSIZE << BIT_SHIFT_CTLX_LO_DEST_MSIZE)) - -#define BIT_SHIFT_CTLX_LO_SRC_MSIZE 14 -#define BIT_MASK_CTLX_LO_SRC_MSIZE 0x7 -#define BIT_CTLX_LO_SRC_MSIZE(x)(((x) & BIT_MASK_CTLX_LO_SRC_MSIZE) << BIT_SHIFT_CTLX_LO_SRC_MSIZE) -#define BIT_INVC_CTLX_LO_SRC_MSIZE (~(BIT_MASK_CTLX_LO_SRC_MSIZE << BIT_SHIFT_CTLX_LO_SRC_MSIZE)) - - -#define BIT_SHIFT_CTLX_LO_SRC_GATHER_EN 17 -#define BIT_MASK_CTLX_LO_SRC_GATHER_EN 0x1 -#define BIT_CTLX_LO_SRC_GATHER_EN(x)(((x) & BIT_MASK_CTLX_LO_SRC_GATHER_EN) << BIT_SHIFT_CTLX_LO_SRC_GATHER_EN) -#define BIT_INVC_CTLX_LO_SRC_GATHER_EN (~(BIT_MASK_CTLX_LO_SRC_GATHER_EN << BIT_SHIFT_CTLX_LO_SRC_GATHER_EN)) - - -#define BIT_SHIFT_CTLX_LO_DST_SCATTER_EN 18 -#define BIT_MASK_CTLX_LO_DST_SCATTER_EN 0x1 -#define BIT_CTLX_LO_DST_SCATTER_EN(x)(((x) & BIT_MASK_CTLX_LO_DST_SCATTER_EN) << BIT_SHIFT_CTLX_LO_DST_SCATTER_EN) -#define BIT_INVC_CTLX_LO_DST_SCATTER_EN (~(BIT_MASK_CTLX_LO_DST_SCATTER_EN << BIT_SHIFT_CTLX_LO_DST_SCATTER_EN)) - - -#define BIT_SHIFT_CTLX_LO_TT_FC 20 -#define BIT_MASK_CTLX_LO_TT_FC 0x7 -#define BIT_CTLX_LO_TT_FC(x)(((x) & BIT_MASK_CTLX_LO_TT_FC) << BIT_SHIFT_CTLX_LO_TT_FC) -#define BIT_INVC_CTLX_LO_TT_FC (~(BIT_MASK_CTLX_LO_TT_FC << BIT_SHIFT_CTLX_LO_TT_FC)) - - -#define BIT_SHIFT_CTLX_LO_DMS 23 -#define BIT_MASK_CTLX_LO_DMS 0x3 -#define BIT_CTLX_LO_DMS(x)(((x) & BIT_MASK_CTLX_LO_DMS) << BIT_MASK_CTLX_LO_DMS) -#define BIT_INVC_CTLX_LO_DMS (~(BIT_MASK_CTLX_LO_DMS << BIT_SHIFT_CTLX_LO_DMS)) - - -#define BIT_SHIFT_CTLX_LO_SMS 25 -#define BIT_MASK_CTLX_LO_SMS 0x3 -#define BIT_CTLX_LO_SMS(x)(((x) & BIT_MASK_CTLX_LO_SMS) << BIT_SHIFT_CTLX_LO_SMS) -#define BIT_INVC_CTLX_LO_SMS (~(BIT_MASK_CTLX_LO_SMS << BIT_SHIFT_CTLX_LO_SMS)) - - -#define BIT_SHIFT_CTLX_LO_LLP_DST_EN 27 -#define BIT_MASK_CTLX_LO_LLP_DST_EN 0x1 -#define BIT_CTLX_LO_LLP_DST_EN(x)(((x) & BIT_MASK_CTLX_LO_LLP_DST_EN) << BIT_SHIFT_CTLX_LO_LLP_DST_EN) -#define BIT_INVC_CTLX_LO_LLP_DST_EN (~(BIT_MASK_CTLX_LO_LLP_DST_EN << BIT_SHIFT_CTLX_LO_LLP_DST_EN)) - -#define BIT_SHIFT_CTLX_LO_LLP_SRC_EN 28 -#define BIT_MASK_CTLX_LO_LLP_SRC_EN 0x1 -#define BIT_CTLX_LO_LLP_SRC_EN(x)(((x) & BIT_MASK_CTLX_LO_LLP_SRC_EN) << BIT_SHIFT_CTLX_LO_LLP_SRC_EN) -#define BIT_INVC_CTLX_LO_LLP_SRC_EN (~(BIT_MASK_CTLX_LO_LLP_SRC_EN << BIT_SHIFT_CTLX_LO_LLP_SRC_EN)) - - -#define BIT_SHIFT_CTLX_UP_BLOCK_BS 0 -#define BIT_MASK_CTLX_UP_BLOCK_BS 0xFFF -#define BIT_CTLX_UP_BLOCK_BS(x)(((x) & BIT_MASK_CTLX_UP_BLOCK_BS) << BIT_SHIFT_CTLX_UP_BLOCK_BS) -#define BIT_INVC_CTLX_UP_BLOCK_BS (~(BIT_MASK_CTLX_UP_BLOCK_BS << BIT_SHIFT_CTLX_UP_BLOCK_BS)) - - -#define BIT_SHIFT_CTLX_UP_DONE 12 -#define BIT_MASK_CTLX_UP_DONE 0x1 -#define BIT_CTLX_UP_DONE(x)(((x) & BIT_MASK_CTLX_UP_DONE) << BIT_SHIFT_CTLX_UP_DONE) -#define BIT_INVC_CTLX_UP_DONE (~(BIT_MASK_CTLX_UP_DONE << BIT_SHIFT_CTLX_UP_DONE)) - - -//3 CFG Register Bit Control -#define BIT_SHIFT_CFGX_LO_CH_PRIOR 5 -#define BIT_MASK_CFGX_LO_CH_PRIOR 0x7 -#define BIT_CFGX_LO_CH_PRIOR(x)(((x) & BIT_MASK_CFGX_LO_CH_PRIOR) << BIT_SHIFT_CFGX_LO_CH_PRIOR) -#define BIT_INVC_CFGX_LO_CH_PRIOR (~(BIT_MASK_CFGX_LO_CH_PRIOR << BIT_SHIFT_CFGX_LO_CH_PRIOR)) - - -#define BIT_SHIFT_CFGX_LO_CH_SUSP 8 -#define BIT_MASK_CFGX_LO_CH_SUSP 0x1 -#define BIT_CFGX_LO_CH_SUSP(x)(((x) & BIT_MASK_CFGX_LO_CH_SUSP) << BIT_SHIFT_CFGX_LO_CH_SUSP) -#define BIT_INVC_CFGX_LO_CH_SUSP (~(BIT_MASK_CFGX_LO_CH_SUSP << BIT_SHIFT_CFGX_LO_CH_SUSP)) - - -#define BIT_SHIFT_CFGX_LO_FIFO_EMPTY 9 -#define BIT_MASK_CFGX_LO_FIFO_EMPTY 0x1 -#define BIT_CFGX_LO_FIFO_EMPTY(x)(((x) & BIT_MASK_CFGX_LO_FIFO_EMPTY) << BIT_SHIFT_CFGX_LO_FIFO_EMPTY) -#define BIT_INVC_CFGX_LO_FIFO_EMPTY (~(BIT_MASK_CFGX_LO_FIFO_EMPTY << BIT_SHIFT_CFGX_LO_FIFO_EMPTY)) - - -#define BIT_SHIFT_CFGX_LO_HS_SEL_DST 10 -#define BIT_MASK_CFGX_LO_HS_SEL_DST 0x1 -#define BIT_CFGX_LO_HS_SEL_DST(x)(((x) & BIT_MASK_CFGX_LO_HS_SEL_DST) << BIT_SHIFT_CFGX_LO_HS_SEL_DST) -#define BIT_INVC_CFGX_LO_HS_SEL_DST (~(BIT_MASK_CFGX_LO_HS_SEL_DST << BIT_SHIFT_CFGX_LO_HS_SEL_DST)) - -#define BIT_SHIFT_CFGX_LO_HS_SEL_SRC 11 -#define BIT_MASK_CFGX_LO_HS_SEL_SRC 0x1 -#define BIT_CFGX_LO_HS_SEL_SRC(x)(((x) & BIT_MASK_CFGX_LO_HS_SEL_SRC) << BIT_SHIFT_CFGX_LO_HS_SEL_SRC) -#define BIT_INVC_CFGX_LO_HS_SEL_SRC (~(BIT_MASK_CFGX_LO_HS_SEL_SRC << BIT_SHIFT_CFGX_LO_HS_SEL_SRC)) - -#define BIT_SHIFT_CFGX_LO_LOCK_CH_L 12 -#define BIT_MASK_CFGX_LO_LOCK_CH_L 0x3 -#define BIT_CFGX_LO_LOCK_CH_L(x)(((x) & BIT_MASK_CFGX_LO_LOCK_CH_L) << BIT_SHIFT_CFGX_LO_LOCK_CH_L) -#define BIT_INVC_CFGX_LO_LOCK_CH_L (~(BIT_MASK_CFGX_LO_LOCK_CH_L << BIT_SHIFT_CFGX_LO_LOCK_CH_L)) - -#define BIT_SHIFT_CFGX_LO_LOCK_B_L 14 -#define BIT_MASK_CFGX_LO_LOCK_B_L 0x3 -#define BIT_CFGX_LO_LOCK_B_L(x)(((x) & BIT_MASK_CFGX_LO_LOCK_B_L) << BIT_SHIFT_CFGX_LO_LOCK_B_L) -#define BIT_INVC_CFGX_LO_LOCK_B_L (~(BIT_MASK_CFGX_LO_LOCK_B_L << BIT_SHIFT_CFGX_LO_LOCK_B_L)) - -#define BIT_SHIFT_CFGX_LO_LOCK_CH 16 -#define BIT_MASK_CFGX_LO_LOCK_CH 0x1 -#define BIT_CFGX_LO_LOCK_CH(x)(((x) & BIT_MASK_CFGX_LO_LOCK_CH) << BIT_SHIFT_CFGX_LO_LOCK_CH) -#define BIT_INVC_CFGX_LO_LOCK_CH (~(BIT_MASK_CFGX_LO_LOCK_CH << BIT_SHIFT_CFGX_LO_LOCK_CH)) - -#define BIT_SHIFT_CFGX_LO_LOCK_B 17 -#define BIT_MASK_CFGX_LO_LOCK_B 0x1 -#define BIT_CFGX_LO_LOCK_B(x)(((x) & BIT_MASK_CFGX_LO_LOCK_B) << BIT_SHIFT_CFGX_LO_LOCK_B) -#define BIT_INVC_CFGX_LO_LOCK_B (~(BIT_MASK_CFGX_LO_LOCK_B << BIT_SHIFT_CFGX_LO_LOCK_B)) - -#define BIT_SHIFT_CFGX_LO_DST_HS_POL 18 -#define BIT_MASK_CFGX_LO_DST_HS_POL 0x1 -#define BIT_CFGX_LO_DST_HS_POL(x)(((x) & BIT_MASK_CFGX_LO_DST_HS_POL) << BIT_SHIFT_CFGX_LO_DST_HS_POL) -#define BIT_INVC_CFGX_LO_DST_HS_POL (~(BIT_MASK_CFGX_LO_DST_HS_POL << BIT_SHIFT_CFGX_LO_DST_HS_POL)) - -#define BIT_SHIFT_CFGX_LO_SRC_HS_POL 19 -#define BIT_MASK_CFGX_LO_SRC_HS_POL 0x1 -#define BIT_CFGX_LO_SRC_HS_POL(x)(((x) & BIT_MASK_CFGX_LO_SRC_HS_POL) << BIT_SHIFT_CFGX_LO_SRC_HS_POL) -#define BIT_INVC_CFGX_LO_SRC_HS_POL (~(BIT_MASK_CFGX_LO_SRC_HS_POL << BIT_SHIFT_CFGX_LO_SRC_HS_POL)) - -#define BIT_SHIFT_CFGX_LO_MAX_ABRST 20 -#define BIT_MASK_CFGX_LO_MAX_ABRST 0x3FF -#define BIT_CFGX_LO_MAX_ABRST(x)(((x) & BIT_MASK_CFGX_LO_MAX_ABRST) << BIT_SHIFT_CFGX_LO_MAX_ABRST) -#define BIT_INVC_CFGX_LO_MAX_ABRST (~(BIT_MASK_CFGX_LO_MAX_ABRST << BIT_SHIFT_CFGX_LO_MAX_ABRST)) - -#define BIT_SHIFT_CFGX_LO_RELOAD_SRC 30 -#define BIT_MASK_CFGX_LO_RELOAD_SRC 0x1 -#define BIT_CFGX_LO_RELOAD_SRC(x)(((x) & BIT_MASK_CFGX_LO_RELOAD_SRC) << BIT_SHIFT_CFGX_LO_RELOAD_SRC) -#define BIT_INVC_CFGX_LO_RELOAD_SRC (~(BIT_MASK_CFGX_LO_RELOAD_SRC << BIT_SHIFT_CFGX_LO_RELOAD_SRC)) - -#define BIT_SHIFT_CFGX_LO_RELOAD_DST 31 -#define BIT_MASK_CFGX_LO_RELOAD_DST 0x1 -#define BIT_CFGX_LO_RELOAD_DST(x)(((x) & BIT_MASK_CFGX_LO_RELOAD_DST) << BIT_SHIFT_CFGX_LO_RELOAD_DST) -#define BIT_INVC_CFGX_LO_RELOAD_DST (~(BIT_MASK_CFGX_LO_RELOAD_DST << BIT_SHIFT_CFGX_LO_RELOAD_DST)) - -#define BIT_SHIFT_CFGX_UP_FCMODE 0 -#define BIT_MASK_CFGX_UP_FCMODE 0x1 -#define BIT_CFGX_UP_FCMODE(x)(((x) & BIT_MASK_CFGX_UP_FCMODE) << BIT_SHIFT_CFGX_UP_FCMODE) -#define BIT_INVC_CFGX_UP_FCMODE (~(BIT_MASK_CFGX_UP_FCMODE << BIT_SHIFT_CFGX_UP_FCMODE)) - -#define BIT_SHIFT_CFGX_UP_FIFO_MODE 1 -#define BIT_MASK_CFGX_UP_FIFO_MODE 0x1 -#define BIT_CFGX_UP_FIFO_MODE(x)(((x) & BIT_MASK_CFGX_UP_FIFO_MODE) << BIT_SHIFT_CFGX_UP_FIFO_MODE) -#define BIT_INVC_CFGX_UP_FIFO_MODE (~(BIT_MASK_CFGX_UP_FIFO_MODE << BIT_SHIFT_CFGX_UP_FIFO_MODE)) - -#define BIT_SHIFT_CFGX_UP_PROTCTL 2 -#define BIT_MASK_CFGX_UP_PROTCTL 0x7 -#define BIT_CFGX_UP_PROTCTL(x)(((x) & BIT_MASK_CFGX_UP_PROTCTL) << BIT_SHIFT_CFGX_UP_PROTCTL) -#define BIT_INVC_CFGX_UP_PROTCTL (~(BIT_MASK_CFGX_UP_PROTCTL << BIT_SHIFT_CFGX_UP_PROTCTL)) - -#define BIT_SHIFT_CFGX_UP_DS_UPD_EN 5 -#define BIT_MASK_CFGX_UP_DS_UPD_EN 0x1 -#define BIT_CFGX_UP_DS_UPD_EN(x)(((x) & BIT_MASK_CFGX_UP_DS_UPD_EN) << BIT_SHIFT_CFGX_UP_DS_UPD_EN) -#define BIT_INVC_CFGX_UP_DS_UPD_EN (~(BIT_MASK_CFGX_UP_DS_UPD_EN << BIT_SHIFT_CFGX_UP_DS_UPD_EN)) - -#define BIT_SHIFT_CFGX_UP_SS_UPD_EN 6 -#define BIT_MASK_CFGX_UP_SS_UPD_EN 0x1 -#define BIT_CFGX_UP_SS_UPD_EN(x)(((x) & BIT_MASK_CFGX_UP_SS_UPD_EN) << BIT_SHIFT_CFGX_UP_SS_UPD_EN) -#define BIT_INVC_CFGX_UP_SS_UPD_EN (~(BIT_MASK_CFGX_UP_SS_UPD_EN << BIT_SHIFT_CFGX_UP_SS_UPD_EN)) - -#define BIT_SHIFT_CFGX_UP_SRC_PER 7 -#define BIT_MASK_CFGX_UP_SRC_PER 0xF -#define BIT_CFGX_UP_SRC_PER(x)(((x) & BIT_MASK_CFGX_UP_SRC_PER) << BIT_SHIFT_CFGX_UP_SRC_PER) -#define BIT_INVC_CFGX_UP_SRC_PER (~(BIT_MASK_CFGX_UP_SRC_PER << BIT_SHIFT_CFGX_UP_SRC_PER)) - -#define BIT_SHIFT_CFGX_UP_DEST_PER 11 -#define BIT_MASK_CFGX_UP_DEST_PER 0xF -#define BIT_CFGX_UP_DEST_PER(x)(((x) & BIT_MASK_CFGX_UP_DEST_PER) << BIT_SHIFT_CFGX_UP_DEST_PER) -#define BIT_INVC_CFGX_UP_DEST_PER (~(BIT_MASK_CFGX_UP_DEST_PER << BIT_SHIFT_CFGX_UP_DEST_PER)) - -typedef enum _GDMA_CHANNEL_NUM_ { - GdmaNoCh = 0x0000, - GdmaCh0 = 0x0101, - GdmaCh1 = 0x0202, - GdmaCh2 = 0x0404, - GdmaCh3 = 0x0808, - GdmaCh4 = 0x1010, - GdmaCh5 = 0x2020, - GdmaCh6 = 0x4040, - GdmaCh7 = 0x8080, - GdmaAllCh = 0xffff -}GDMA_CHANNEL_NUM, *PGDMA_CHANNEL_NUM; - - -//3 CTL register struct - -typedef enum _GDMA_CTL_TT_FC_TYPE_ { - TTFCMemToMem = 0x00, - TTFCMemToPeri = 0x01, - TTFCPeriToMem = 0x02 -}GDMA_CTL_TT_FC_TYPE, *PGDMA_CTL_TT_FC_TYPE; - -//Max type = Bus Width -typedef enum _GDMA_CTL_TR_WIDTH_ { - TrWidthOneByte = 0x00, - TrWidthTwoBytes = 0x01, - TrWidthFourBytes = 0x02 -}GDMA_CTL_TR_WIDTH, *PGDMA_CTL_TR_WIDTH; - -typedef enum _GDMA_CTL_MSIZE_ { - MsizeOne = 0x00, - MsizeFour = 0x01, - MsizeEight = 0x02 -}GDMA_CTL_MSIZE, *PGDMA_CTL_MSIZE; - -typedef enum _GDMA_INC_TYPE_ { - IncType = 0x00, - DecType = 0x01, - NoChange = 0x02 -}GDMA_INC_TYPE, *PGDMA_INC_TYPE; - - -typedef struct _GDMA_CTL_REG_ { - GDMA_CTL_TT_FC_TYPE TtFc; - GDMA_CTL_TR_WIDTH DstTrWidth; - GDMA_CTL_TR_WIDTH SrcTrWidth; - GDMA_INC_TYPE Dinc; - GDMA_INC_TYPE Sinc; - GDMA_CTL_MSIZE DestMsize; - GDMA_CTL_MSIZE SrcMsize; - - uint8_t IntEn :1; // Bit 0 - uint8_t SrcGatherEn :1; // Bit 1 - uint8_t DstScatterEn :1; // Bit 2 - uint8_t LlpDstEn :1; // Bit 3 - uint8_t LlpSrcEn :1; // Bit 4 - uint8_t Done :1; // Bit 5 - uint8_t Rsvd6To7 :2; //Bit 6 -7 - uint16_t BlockSize; - -}GDMA_CTL_REG, *PGDMA_CTL_REG; - - -//3 CFG Register Structure - -typedef enum _GDMA_CH_PRIORITY_ { - Prior0 = 0, - Prior1 = 1, - Prior2 = 2, - Prior3 = 3, - Prior4 = 4, - Prior5 = 5, - Prior6 = 6, - Prior7 = 7 -}GDMA_CH_PRIORITY, *PGDMA_CH_PRIORITY; - -typedef enum _GDMA_LOCK_LEVEL_ { - OverComplDmaTransfer = 0x00, - OverComplDmaBlockTransfer = 0x01, - OverComplDmaTransation = 0x02 -}GDMA_LOCK_LEVEL, *PGDMA_LOCK_LEVEL; - - -typedef struct _GDMA_CFG_REG_ { - GDMA_CH_PRIORITY ChPrior; - GDMA_LOCK_LEVEL LockBL; - GDMA_LOCK_LEVEL LockChL; - uint16_t MaxAbrst; - uint8_t SrcPer; - uint8_t DestPer; - uint16_t ChSusp :1; //Bit 0 - uint16_t FifoEmpty :1; //Bit 1 - uint16_t HsSelDst :1; //Bit 2 - uint16_t HsSelSrc :1; //Bit 3 - uint16_t LockCh :1; //Bit 4 - uint16_t LockB :1; //Bit 5 - uint16_t DstHsPol :1; //Bit 6 - uint16_t SrcHsPol :1; //Bit 7 - uint16_t ReloadSrc :1; //Bit 8 - uint16_t ReloadDst :1; //Bit 9 - uint16_t FifoMode :1; //Bit 10 - uint16_t DsUpdEn :1; //Bit 11 - uint16_t SsUpdEn :1; //Bit 12 - uint16_t Rsvd13To15 :3; -}GDMA_CFG_REG, *PGDMA_CFG_REG; - -typedef enum _GDMA_ISR_TYPE_ { - TransferType = 0x1, - BlockType = 0x2, - SrcTransferType = 0x4, - DstTransferType = 0x8, - ErrType = 0x10 -}GDMA_ISR_TYPE, *PGDMA_ISR_TYPE; - - -void -HalGdmaOnOffRtl8195a ( - IN void *Data -); - -BOOL -HalGdamChInitRtl8195a( - IN void *Data -); - -BOOL -HalGdmaChSetingRtl8195a( - IN void *Data -); - -BOOL -HalGdmaChBlockSetingRtl8195a( - IN void *Data -); - -BOOL -HalGdmaChBlockSetingRtl8195a_Patch( - IN void *Data -); - -void -HalGdmaChDisRtl8195a ( - IN void *Data -); - -void -HalGdmaChEnRtl8195a ( - IN void *Data -); - -void -HalGdmaChIsrEnAndDisRtl8195a ( - IN void *Data -); - -uint8_t -HalGdmaChIsrCleanRtl8195a ( - IN void *Data -); - -void -HalGdmaChCleanAutoSrcRtl8195a ( - IN void *Data -); - -void -HalGdmaChCleanAutoDstRtl8195a ( - IN void *Data -); - -uint32_t -HalGdmaQueryDArRtl8195a( - IN void *Data -); - -uint32_t -HalGdmaQuerySArRtl8195a( - IN void *Data -); - -BOOL -HalGdmaQueryChEnRtl8195a ( - IN void *Data -); - -#ifdef CONFIG_CHIP_E_CUT -_LONG_CALL_ BOOL -HalGdmaChBlockSetingRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ uint32_t -HalGdmaQueryDArRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ uint32_t -HalGdmaQuerySArRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ BOOL -HalGdmaQueryChEnRtl8195a_V04 ( - IN void *Data -); - -#endif // #ifdef CONFIG_CHIP_E_CUT - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gpio.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gpio.c deleted file mode 100644 index 3f8da09..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gpio.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "rtl8195a.h" -#include "hal_gpio.h" -#include "rtl8195a_gpio.h" -#include "gpio_irq_api.h" - -#ifdef CONFIG_GPIO_EN - -extern PHAL_GPIO_ADAPTER _pHAL_Gpio_Adapter; - -/** - * @brief Clear the pending interrupt of a specified pin - * - * @param GPIO_Pin: The data structer which contains the parameters for the GPIO Pin. - * - * @retval None - */ -HAL_Status -HAL_GPIO_ClearISR_8195a( - HAL_GPIO_PIN *GPIO_Pin -) -{ - uint8_t port_num; - uint8_t pin_num; - HAL_GPIO_PIN_MODE pin_mode; - - port_num = HAL_GPIO_GET_PORT_BY_NAME(GPIO_Pin->pin_name); - pin_num = HAL_GPIO_GET_PIN_BY_NAME(GPIO_Pin->pin_name); - pin_mode = GPIO_Pin->pin_mode; - - if ((pin_mode & HAL_GPIO_PIN_INT_MODE)==0 || (port_num != GPIO_PORT_A)) { - DBG_GPIO_WARN("HAL_GPIO_ClearISR_8195a: This pin(%x:%x) is'nt an interrupt pin\n", GPIO_Pin->pin_name, GPIO_Pin->pin_mode); - return HAL_ERR_PARA; - } - - if (GPIO_Lock() != HAL_OK) { - return HAL_BUSY; - } - - // Clear pending interrupt before unmask it - HAL_WRITE32(GPIO_REG_BASE, GPIO_PORTA_EOI, (1<EnterCritical) { - _pHAL_Gpio_Adapter->EnterCritical(); - } - - if(_pHAL_Gpio_Adapter->Locked) { - Status = HAL_BUSY; - } - else { - _pHAL_Gpio_Adapter->Locked = 1; - Status = HAL_OK; - } - - if (_pHAL_Gpio_Adapter->ExitCritical) { - _pHAL_Gpio_Adapter->ExitCritical(); - } - - return Status; -} - - -static __inline void -GPIO_UnLock ( - void -) -{ - if (_pHAL_Gpio_Adapter->EnterCritical) { - _pHAL_Gpio_Adapter->EnterCritical(); - } - - _pHAL_Gpio_Adapter->Locked = 0; - - if (_pHAL_Gpio_Adapter->ExitCritical) { - _pHAL_Gpio_Adapter->ExitCritical(); - } -} -#endif // #ifndef CONFIG_RELEASE_BUILD_LIBRARIES - -_LONG_CALL_ extern uint32_t -HAL_GPIO_IrqHandler_8195a( - IN void *pData -); - -_LONG_CALL_ extern uint32_t -HAL_GPIO_MbedIrqHandler_8195a( - IN void *pData -); - -_LONG_CALL_ HAL_Status -HAL_GPIO_IntCtrl_8195a( - HAL_GPIO_PIN *GPIO_Pin, - uint32_t En -); - -_LONG_CALL_ HAL_Status -HAL_GPIO_Init_8195a( - HAL_GPIO_PIN *GPIO_Pin -); - -_LONG_CALL_ HAL_Status -HAL_GPIO_DeInit_8195a( - HAL_GPIO_PIN *GPIO_Pin -); - -_LONG_CALL_ HAL_GPIO_PIN_STATE -HAL_GPIO_ReadPin_8195a( - HAL_GPIO_PIN *GPIO_Pin -); - -_LONG_CALL_ HAL_Status -HAL_GPIO_WritePin_8195a( - HAL_GPIO_PIN *GPIO_Pin, - HAL_GPIO_PIN_STATE Pin_State -); - -_LONG_CALL_ HAL_Status -HAL_GPIO_RegIrq_8195a( - IN PIRQ_HANDLE pIrqHandle -); - -_LONG_CALL_ HAL_Status -HAL_GPIO_UnRegIrq_8195a( - IN PIRQ_HANDLE pIrqHandle -); - -_LONG_CALL_ HAL_Status -HAL_GPIO_UserRegIrq_8195a( - HAL_GPIO_PIN *GPIO_Pin, - void *IrqHandler, - void *IrqData -); - -_LONG_CALL_ HAL_Status -HAL_GPIO_UserUnRegIrq_8195a( - HAL_GPIO_PIN *GPIO_Pin -); - -_LONG_CALL_ HAL_Status -HAL_GPIO_MaskIrq_8195a( - HAL_GPIO_PIN *GPIO_Pin -); - -_LONG_CALL_ HAL_Status -HAL_GPIO_UnMaskIrq_8195a( - HAL_GPIO_PIN *GPIO_Pin -); - -_LONG_CALL_ HAL_Status -HAL_GPIO_IntDebounce_8195a( - HAL_GPIO_PIN *GPIO_Pin, - uint8_t Enable -); - -_LONG_CALL_ uint32_t -HAL_GPIO_GetIPPinName_8195a( - uint32_t chip_pin -); - -_LONG_CALL_ HAL_Status -HAL_GPIO_PullCtrl_8195a( - uint32_t chip_pin, - uint8_t pull_type -); - -_LONG_CALL_ uint32_t -GPIO_GetChipPinName_8195a( - uint32_t port, - uint32_t pin -); - -_LONG_CALL_ void -GPIO_PullCtrl_8195a( - uint32_t chip_pin, - uint8_t pull_type -); - -_LONG_CALL_ void -GPIO_Int_SetType_8195a( - uint8_t pin_num, - uint8_t int_mode -); - - -_LONG_CALL_ HAL_Status HAL_GPIO_IntCtrl_8195aV02(HAL_GPIO_PIN *GPIO_Pin, uint32_t En); -_LONG_CALL_ uint32_t GPIO_Int_Clear_8195aV02(uint32_t irq_clr); - -HAL_Status -HAL_GPIO_ClearISR_8195a( - HAL_GPIO_PIN *GPIO_Pin -); - - -/********** HAL In-Line Functions **********/ - -/** - * @brief Reads the specified input port pin. - * - * @param GPIO_Pin: The data structer which contains the parameters for the GPIO Pin. - * - * @retval The input port pin current status(High or Low). - */ -static __inline int32_t -HAL_GPIO_ReadPin( - HAL_GPIO_PIN *GPIO_Pin -) -{ - return (int32_t)HAL_GPIO_ReadPin_8195a(GPIO_Pin); -} - -/** - * @brief Write the specified output port pin. - * - * @param GPIO_Pin: The data structer which contains the parameters for the GPIO Pin. - * - * @param Pin_State: The state going to be set to the assigned GPIO pin. - * - * @retval None - */ -static __inline void -HAL_GPIO_WritePin( - HAL_GPIO_PIN *GPIO_Pin, - uint32_t Value -) -{ - HAL_GPIO_WritePin_8195a(GPIO_Pin, (HAL_GPIO_PIN_STATE)Value); -} - -/** - * @brief To register a user interrupt handler for a specified pin - * - * @param GPIO_Pin: The data structer which contains the parameters for the GPIO Pin. - * - * @param IrqHandler: The IRQ handler to be assigned to the specified pin - * - * @param IrqData: The pointer will be pass the the IRQ handler - * - * @retval None - */ -static __inline void -HAL_GPIO_UserRegIrq( - HAL_GPIO_PIN *GPIO_Pin, - void *IrqHandler, - void *IrqData -) -{ - HAL_GPIO_UserRegIrq_8195a(GPIO_Pin, IrqHandler, IrqData); -} - -/** - * @brief To un-register a user interrupt handler for a specified pin - * - * @param GPIO_Pin: The data structer which contains the parameters for the GPIO Pin. - * - * @retval None - */ -static __inline void -HAL_GPIO_UserUnRegIrq( - HAL_GPIO_PIN *GPIO_Pin -) -{ - HAL_GPIO_UserUnRegIrq_8195a(GPIO_Pin); -} - - -/** - * @brief Enable/Disable GPIO interrupt - * - * @param GPIO_Pin: The data structer which contains the parameters for the GPIO Pin initialization. - * - * @param En: Enable (1) or Disable (0) - * - * @retval HAL_Status - */ -static __inline void -HAL_GPIO_IntCtrl( - HAL_GPIO_PIN *GPIO_Pin, - uint32_t En -) -{ - HAL_GPIO_IntCtrl_8195a(GPIO_Pin, En); -} - -/** - * @brief Mask the interrupt of a specified pin - * - * @param GPIO_Pin: The data structer which contains the parameters for the GPIO Pin. - * - * @retval None - */ -static __inline void -HAL_GPIO_MaskIrq( - HAL_GPIO_PIN *GPIO_Pin -) -{ - HAL_GPIO_MaskIrq_8195a(GPIO_Pin); -} - - -/** - * @brief UnMask the interrupt of a specified pin - * - * @param GPIO_Pin: The data structer which contains the parameters for the GPIO Pin. - * - * @retval None - */ -static __inline void -HAL_GPIO_UnMaskIrq( - HAL_GPIO_PIN *GPIO_Pin -) -{ - HAL_GPIO_ClearISR_8195a(GPIO_Pin); - HAL_GPIO_UnMaskIrq_8195a(GPIO_Pin); -} - - -#endif // end of "#define _RTL8195A_GPIO_H_" - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gspi.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gspi.h deleted file mode 100644 index e2e7285..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gspi.h +++ /dev/null @@ -1,404 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - *******************************************************************************/ - -#ifndef __RTL8195A_GSPI_H__ -#define __RTL8195A_GSPI_H__ - -#define SPI_LOCAL_DOMAIN 0x0 -#define SPI_TXFIFO_DOMAIN 0xc -#define SPI_RXFIFO_DOMAIN 0x1f - -//IO Bus domain address mapping -#define DEFUALT_OFFSET 0x0 -#define SPI_LOCAL_OFFSET 0x10250000 -#define SPI_TX_FIFO_OFFSET 0x10310000 -#define SPI_RX_FIFO_OFFSET 0x10340000 - -#define SPI_LOCAL_DEVICE_ID 0 -#define SPI_TXQ_FIFO_DEVICE_ID 3 -#define SPI_RXQ_FIFO_DEVICE_ID 7 -#define SPI_UNDEFINED_DEVICE_ID (-1) - - -//SPI Local registers -#define SPI_REG_INT_CTRL 0x0004 // 4 bytes, SPI INT Control -#define SPI_REG_INT_TIMEOUT 0x0006 // 2 bytes, SPI 32us INT timout -#define SPI_REG_HIMR 0x0014 // 4 bytes, SPI Host Interrupt Mask -#define SPI_REG_HISR 0x0018 // 4 bytes, SPI Host Interrupt Service Routine -#define SPI_REG_RX0_REQ_LEN 0x001C // 4 bytes, RXDMA Request Length -#define SPI_REG_FREE_TX_SPACE 0x0020 // 4 bytes, Free Tx Buffer Page -#define SPI_REG_TX_SEQNUM 0x0024 // 1 byte, TX Sequence Number Definition -#define SPI_REG_HCPWM 0x0038 // 1 byte, HCI Current Power Mode -#define SPI_REG_HCPWM2 0x003A // 2 bytes, HCI Current Power Mode 2 -#define SPI_REG_AVAI_PATH_L 0x0040 // 4 bytes, SPI TX Available Low Size reg -#define SPI_REG_AVAI_PATH_H 0x0044 // 4 bytes, SPI TX Available High Size reg -#define SPI_REG_RX_AGG_CTL 0x0048 // 4 bytes, SPI RX AGG control -#define SPI_REG_H2C_MSG 0x004C // 4 bytes, SPI_REG_H2C_MSG -#define SPI_REG_C2H_MSG 0x0050 // 4 bytes, SPI_REG_C2H_MSG -#define SPI_REG_HRPWM 0x0080 // 1 byte, SPI_REG_HRPWM -#define SPI_REG_HPS_CLKR 0x0084 // 1 byte, not uesd -#define SPI_REG_CPU_IND 0x0087 // 1 byte, firmware indication to host -#define SPI_REG_32K_TRANS_CTL 0x0088 // 1 byte, 32K transparent control, BIT0 EN32K_TRANS -#define SPI_REG_32K_IDLE_TIME 0x008B // 1 byte, 32K idle time, -#define SPI_REG_DELY_LINE_SEL 0x008C // 1 byte, Delay line selection, -#define SPI_REG_SPI_CFG 0x00F0 // 1 byte, SPI configuration, - -#define LOCAL_REG_FREE_TX_SPACE (SPI_LOCAL_OFFSET | SPI_REG_FREE_TX_SPACE) - -// Register SPI_REG_CPU_IND -#define SPI_CPU_RDY_IND (BIT0) - - -/************************************************/ -// SPI_REG_HISR: SDIO Host Interrupt Service Routine -#define SPI_HISR_RX_REQUEST (BIT0) -#define SPI_HISR_AVAL_INT (BIT1) -#define SPI_HISR_TXPKT_OVER_BUFF (BIT2) -#define SPI_HISR_TX_AGG_SIZE_MISMATCH (BIT3) -#define SPI_HISR_TXBD_OVF (BIT4) -//BIT5~16 not used -#define SPI_HISR_C2H_MSG_INT (BIT17) -#define SPI_HISR_CPWM1_INT (BIT18) -#define SPI_HISR_CPWM2_INT (BIT19) -//BIT20~31 not used -#define SPI_HISR_CPU_NOT_RDY (BIT22) - - -#define MASK_SPI_HISR_CLEAR (SPI_HISR_RX_REQUEST |\ - SPI_HISR_AVAL_INT |\ - SPI_HISR_TXPKT_OVER_BUFF |\ - SPI_HISR_TX_AGG_SIZE_MISMATCH |\ - SPI_HISR_TXBD_OVF |\ - SPI_HISR_C2H_MSG_INT |\ - SPI_HISR_CPWM1_INT |\ - SPI_HISR_CPWM2_INT) - -// RTL8195A SPI Host Interrupt Mask Register -#define SPI_HIMR_RX_REQUEST_MSK (BIT0) -#define SPI_HIMR_AVAL_MSK (BIT1) -#define SPI_HIMR_TXPKT_SIZE_OVER_BUFF_MSK (BIT2) -#define SPI_HIMR_AGG_SIZE_MISMATCH_MSK (BIT3) -#define SPI_HIMR_TXBD_OVF_MSK (BIT4) -//BIT5~16 not used -#define SPI_HIMR_C2H_MSG_INT_MSK (BIT17) -#define SPI_HIMR_CPWM1_INT_MSK (BIT18) -#define SPI_HIMR_CPWM2_INT_MSK (BIT19) -//BIT20~31 not used -#define SPI_HIMR_DISABLED 0 - -// Register SPI_REG_HCPWM -#define SPI_HCPWM_WLAN_TRX (BIT1) - - -enum{ - SPI_LITTLE_ENDIAN = 2, - SPI_BIG_ENDIAN = 0 -}; -enum{ - SPI_WORD_LEN_16 = 0, - SPI_WORD_LEN_32 = 1 -}; - -typedef enum{ - SPI_LITTLE_ENDIAN_16 = SPI_LITTLE_ENDIAN|SPI_WORD_LEN_16, - SPI_LITTLE_ENDIAN_32 = SPI_LITTLE_ENDIAN|SPI_WORD_LEN_32, // default configure - SPI_BIG_ENDIAN_16 = SPI_BIG_ENDIAN|SPI_WORD_LEN_16, - SPI_BIG_ENDIAN_32 = SPI_BIG_ENDIAN|SPI_WORD_LEN_32 -}_gspi_conf_t; - -#define GSPI_CMD_LEN 4 -#define GSPI_STATUS_LEN 8 - - -#define FILL_SPI_CMD(byte_en, addr, domain_id, fun, write_flag) ((byte_en & 0xff) | ((addr & 0xffff) << 8) \ - | ((domain_id & 0x1f) << 24) | ((fun & 0x3) << 29) | ((write_flag & 0x1) << 31)) - - -#define GET_STATUS_HISR(status) ((((*(uint32_t*)status)) & 0x3) |((((*(uint32_t*)status) >> 2) & 0x7) << 17)) -#define GET_STATUS_FREE_TX(status) ((((*(uint32_t*)status) >> 5) & 0x7ffffff) << 2) -#define GET_STATUS_RXQ_REQ_LEN(status) (((*(uint32_t*)((uint8_t *)status + 4))) & 0xffffff) -#define GET_STATUS_TX_SEQ(status) (((*(uint32_t*)((uint8_t *)status + 4)) >> 24) & 0xff) - -#define GSPI_CMD_TX 0x83 // -#define GSPI_CMD_RX 0X82 - -// define transmit packat type -#define GPSI_TX_PACKET_802_3 (0x83) -#define GSPI_TX_PACKET_802_11 (0x81) -#define GSPI_TX_H2C_CMD (0x11) -#define GSPI_TX_MEM_READ (0x51) -#define GSPI_TX_MEM_WRITE (0x53) -#define GSPI_TX_MEM_SET (0x55) -#define GSPI_TX_FM_FREETOGO (0x61) - -//define receive packet type -#define GSPI_RX_PACKET_802_3 (0x82) -#define GSPI_RX_PACKET_802_11 (0x80) -#define GSPI_RX_C2H_CMD (0x10) -#define GSPI_RX_MEM_READ (0x50) -#define GSPI_RX_MEM_WRITE (0x52) -#define GSPI_RX_MEM_SET (0x54) -#define GSPI_RX_FM_FREETOGO (0x60) - - -typedef struct _GSPI_TX_DESC{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t txpktsize:16; // bit[15:0] - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number -#else - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t txpktsize:16; // bit[15:0] -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the packet type - uint32_t rsvd0:24; -#else - uint32_t rsvd0:24; - uint32_t type:8; // bit[7:0], the packet type -#endif - - // u4Byte 2 - uint32_t rsvd1; - - // u4Byte 3 - uint32_t rsvd2; - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} GSPI_TX_DESC, *PGSPI_TX_DESC; - -typedef struct _GSPI_RX_DESC{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t pkt_len:16; // bit[15:0], the packet size - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t rsvd0:6; // bit[29:24] - uint32_t icv:1; // bit[30], ICV error - uint32_t crc:1; // bit[31], CRC error -#else - uint32_t crc:1; // bit[31], CRC error - uint32_t icv:1; // bit[30], ICV error - uint32_t rsvd0:6; // bit[29:24] - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t pkt_len:16; // bit[15:0], the packet size -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the type of this packet - uint32_t rsvd1:24; // bit[31:8] -#else - uint32_t rsvd1:24; // bit[31:8] - uint32_t type:8; // bit[7:0], the type of this packet -#endif - - // u4Byte 2 - uint32_t rsvd2; - - // u4Byte 3 - uint32_t rsvd3; - - // u4Byte 4 - uint32_t rsvd4; - - // u4Byte 5 - uint32_t rsvd5; -} GSPI_RX_DESC, *PGSPI_RX_DESC; - -#define SIZE_TX_DESC (sizeof(GSPI_TX_DESC)) -#define SIZE_RX_DESC (sizeof(GSPI_RX_DESC)) - -// For memory read command -typedef struct _GSPI_DESC_MR{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t pkt_len:16; // bit[15:0], the packet size - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t rsvd0:8; // bit[31:24] -#else - uint32_t rsvd0:8; // bit[31:24] - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t pkt_len:16; // bit[15:0], the packet size -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the type of this packet - uint32_t rsvd1:24; // bit[31:8] -#else - uint32_t rsvd1:24; // bit[31:8] - uint32_t type:8; // bit[7:0], the type of this packet -#endif - - // u4Byte 2 - uint32_t start_addr; - - // u4Byte 3 - uint32_t rsvd2; - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} GSPI_DESC_MR, *PGSPI_DESC_MR; - -// For memory write reply command -typedef struct _GSPI_DESC_MW{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t txpktsize:16; // bit[15:0] - uint32_t offset:8; // bit[23:16], store the sizeof(TX_DESC) - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number -#else - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number - uint32_t offset:8; // bit[23:16], store the sizeof(TX_DESC) - uint32_t txpktsize:16; // bit[15:0] -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the packet type - uint32_t reply:1; // bit[8], request to send a reply message - uint32_t rsvd0:23; -#else - uint32_t rsvd0:23; - uint32_t reply:1; // bit[8], request to send a reply message - uint32_t type:8; // bit[7:0], the packet type -#endif - - // u4Byte 2 - uint32_t start_addr; // memory write start address - - // u4Byte 3 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t write_len:16; // bit[15:0], the length to write - uint32_t rsvd2:16; // bit[31:16] -#else - uint32_t rsvd2:16; // bit[31:16] - uint32_t write_len:16; // bit[15:0], the length to write -#endif - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} GSPI_DESC_MW, *PGSPI_DESC_MW; - -// For memory set command -typedef struct _GSPI_DESC_MS{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t txpktsize:16; // bit[15:0] - uint32_t offset:8; // bit[23:16], store the sizeof(TX_DESC) - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number -#else - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number - uint32_t offset:8; // bit[23:16], store the sizeof(TX_DESC) - uint32_t txpktsize:16; // bit[15:0] -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the packet type - uint32_t data:8; // bit[8:15], the value to be written to the memory - uint32_t reply:1; // bit[16], request to send a reply message - uint32_t rsvd0:15; -#else - uint32_t rsvd0:15; - uint32_t reply:1; // bit[16], request to send a reply message - uint32_t data:8; // bit[8:15], the value to be written to the memory - uint32_t type:8; // bit[7:0], the packet type -#endif - - // u4Byte 2 - uint32_t start_addr; // memory write start address - - // u4Byte 3 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t write_len:16; // bit[15:0], the length to write - uint32_t rsvd2:16; // bit[31:16] -#else - uint32_t rsvd2:16; // bit[31:16] - uint32_t write_len:16; // bit[15:0], the length to write -#endif - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} GSPI_DESC_MS, *PGSPI_DESC_MS; -// TX Desc for Jump to Start command -typedef struct _GSPI_DESC_JS{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t txpktsize:16; // bit[15:0] - uint32_t offset:8; // bit[23:16], store the sizeof(TX_DESC) - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number -#else - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number - uint32_t offset:8; // bit[23:16], store the sizeof(TX_DESC) - uint32_t txpktsize:16; // bit[15:0] -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the packet type - uint32_t rsvd0:24; -#else - uint32_t rsvd0:24; - uint32_t type:8; // bit[7:0], the packet type -#endif - - // u4Byte 2 - uint32_t start_fun; // the pointer of the startup function - - // u4Byte 3 - uint32_t rsvd2; - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} GSPI_DESC_JS, *PGSPI_DESC_JS; - - -// CCPWM2 bit map definition for Firmware download -#define GSPI_INIT_DONE (BIT0) -#define GSPI_MEM_WR_DONE (BIT1) -#define GSPI_MEM_RD_DONE (BIT2) -#define GSPI_MEM_ST_DONE (BIT3) -#define GSPI_CPWM2_TOGGLE (BIT15) - -// Register REG_SPDIO_CPU_IND -#define GPSI_SYSTEM_TRX_RDY_IND (BIT0) - -#endif //__GSPI_REG_H__ - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2c.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2c.c deleted file mode 100644 index deb3374..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2c.c +++ /dev/null @@ -1,543 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "rtl8195a.h" - -#ifdef CONFIG_I2C_EN - -/* Used only for A~C Version */ -#ifndef CONFIG_CHIP_E_CUT -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalI2CSendRtl8195a -// -// Description: -// Send one byte to the I2C internal fifo, it will generate START and STOP bit -// automatically. -// -// Arguments: -// [in] void *Data - -// The I2C parameter data struct. -// -// Return: -// _EXIT_SUCCESS if the sending succeeded. -// _EXIT_FAILURE if the sending failed. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-02-18. -// -//--------------------------------------------------------------------------------------------------- -HAL_Status -HalI2CSendRtl8195a_Patch( - IN void *Data -){ - PHAL_I2C_INIT_DAT pHalI2CInitData = (PHAL_I2C_INIT_DAT)Data; - uint8_t I2CIdx = pHalI2CInitData->I2CIdx; - uint8_t *pDat = pHalI2CInitData->I2CRWData; - uint8_t I2CCmd = pHalI2CInitData->I2CCmd; - uint8_t I2CStop = pHalI2CInitData->I2CStop; - uint8_t I2CReSTR= pHalI2CInitData->I2CReSTR; - - DBG_I2C_INFO("HalI2CSendRtl8195a\n"); - DBG_I2C_INFO("I2C Index: %x\n",I2CIdx); - - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_DATA_CMD, - *(pDat) | - BIT_CTRL_IC_DATA_CMD_RESTART(I2CReSTR)| - BIT_CTRL_IC_DATA_CMD_CMD(I2CCmd) | - BIT_CTRL_IC_DATA_CMD_STOP(I2CStop)); - - return (HAL_OK); -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalI2CInit8195a -// -// Description: -// To initialize I2C module by using the given data. -// -// Arguments: -// [in] void *Data - -// The I2C parameter data struct. -// -// Return: -// The status of the DeInit process. -// _EXIT_SUCCESS if the initialization succeeded. -// _EXIT_FAILURE if the initialization failed. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//--------------------------------------------------------------------------------------------------- -HAL_Status -HalI2CMassSendRtl8195a_Patch( - IN void *Data -){ - PHAL_I2C_INIT_DAT pHalI2CInitData = (PHAL_I2C_INIT_DAT)Data; - - uint8_t I2CIdx = pHalI2CInitData->I2CIdx; - uint8_t I2CCmd = pHalI2CInitData->I2CCmd; - uint8_t I2CDatLen = pHalI2CInitData->I2CDataLen; - uint8_t *pDat = pHalI2CInitData->I2CRWData; - uint8_t I2CStopSet = pHalI2CInitData->I2CStop; - uint8_t I2CSTP; - uint8_t I2CReSRT = 0; - uint8_t DatCnt = 0; - - /* Send I2C data one by one. The STOP bit is only used for the last byte.*/ - for (DatCnt = 0; DatCnt < I2CDatLen; DatCnt++) - { - I2CSTP = 0; - if ((DatCnt == (I2CDatLen - 1)) && (I2CStopSet != 0)) { - I2CSTP = 1; - } - - if ((DatCnt == 0) && ((pHalI2CInitData->RSVD0 & BIT0) != 0)) { - I2CReSRT = 1; - } - else { - I2CReSRT = 0; - } - - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_DATA_CMD, - *(pDat+DatCnt) | - BIT_CTRL_IC_DATA_CMD_CMD(I2CCmd) | - BIT_CTRL_IC_DATA_CMD_RESTART(I2CReSRT) | - BIT_CTRL_IC_DATA_CMD_STOP(I2CSTP)); - } - - return HAL_OK; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalI2CInit8195a -// -// Description: -// To initialize I2C module by using the given data. -// -// Arguments: -// [in] void *Data - -// The I2C parameter data struct. -// -// Return: -// The status of the DeInit process. -// _EXIT_SUCCESS if the initialization succeeded. -// _EXIT_FAILURE if the initialization failed. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-04-02. -// -//--------------------------------------------------------------------------------------------------- -HAL_Status -HalI2CInit8195a_Patch( - IN void *Data -) -{ - PHAL_I2C_INIT_DAT pHalI2CInitData = (PHAL_I2C_INIT_DAT)Data; - - uint8_t Master; - uint8_t I2CIdx; - uint8_t SpdMd; - uint8_t AddrMd; - uint8_t ReSTR; - uint8_t StartByte; - uint8_t Specical; - uint8_t GC; - uint16_t I2CAckAddr; - uint16_t SdaHd; - uint8_t SdaSetup; - uint8_t RXTL; - uint8_t TXTL; - uint8_t SlvNoAck; - uint32_t INTRMsk; - uint8_t TxDMARqLv; - uint8_t RxDMARqLv; - uint32_t I2CTmp; - - /* Get the I2C parameters*/ - I2CIdx = pHalI2CInitData->I2CIdx; - SpdMd = pHalI2CInitData->I2CSpdMod; - AddrMd = pHalI2CInitData->I2CAddrMod; - I2CAckAddr = pHalI2CInitData->I2CAckAddr; - Master = pHalI2CInitData->I2CMaster; - SdaHd = pHalI2CInitData->I2CSdaHd; - SdaSetup = pHalI2CInitData->I2CSetup; - - ReSTR = pHalI2CInitData->I2CReSTR; - GC = pHalI2CInitData->I2CGC; - StartByte = pHalI2CInitData->I2CStartB; - SlvNoAck = pHalI2CInitData->I2CSlvNoAck; - - RXTL = pHalI2CInitData->I2CRXTL; - TXTL = pHalI2CInitData->I2CTXTL; - - TxDMARqLv = pHalI2CInitData->I2CTxDMARqLv; - RxDMARqLv = pHalI2CInitData->I2CRxDMARqLv; - - /* Disable the IC first */ - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_ENABLE,BIT_CTRL_IC_ENABLE(0)); - - /* Master case*/ - if (Master) { - /*RESTART MUST be set in these condition in Master mode. - But it might be NOT compatible in old slaves.*/ - if ((AddrMd == I2C_ADDR_10BIT) || (SpdMd == I2C_HS_MODE)) - ReSTR = 1; - - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_CON, - (BIT_CTRL_IC_CON_IC_SLAVE_DISABLE(1) | - BIT_CTRL_IC_CON_IC_RESTART_EN(ReSTR) | - BIT_CTRL_IC_CON_IC_10BITADDR_MASTER(AddrMd) | - BIT_CTRL_IC_CON_SPEED(SpdMd) | - BIT_CTRL_IC_CON_MASTER_MODE(Master))); - - DBG_I2C_INFO("Init master, IC_CON%d[%2x]: %x\n", I2CIdx, REG_DW_I2C_IC_CON, HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_CON)); - - - /* To set target addr.*/ - Specical = 0; - if ((GC!=0) || (StartByte!=0)) - Specical = 1; - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_TAR, - (BIT_CTRL_IC_TAR_IC_10BITADDR_MASTER(AddrMd) | - BIT_CTRL_IC_TAR_SPECIAL(Specical) | - BIT_CTRL_IC_TAR_GC_OR_START(StartByte) | - BIT_CTRL_IC_TAR(I2CAckAddr))); - - /* To Set I2C clock*/ - HalI2CSetCLKRtl8195a_Patch(pHalI2CInitData); - - - DBG_I2C_INFO("Init master, IC_TAR%d[%2x]: %x\n", I2CIdx, REG_DW_I2C_IC_TAR, HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_TAR)); - - } /*if (Master)*/ - else { - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_CON, - BIT_CTRL_IC_CON_IC_10BITADDR_SLAVE(AddrMd) | - BIT_CTRL_IC_CON_IC_SLAVE_DISABLE(Master) | - BIT_CTRL_IC_CON_SPEED(SpdMd)| - BIT_CTRL_IC_CON_MASTER_MODE(Master)); - - DBG_I2C_INFO("Init slave, IC_CON%d[%2x]: %x\n", I2CIdx, REG_DW_I2C_IC_CON, HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_CON)); - - - /* To set slave addr. */ - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_SAR,BIT_CTRL_IC_SAR(I2CAckAddr)); - - DBG_I2C_INFO("Init slave, IC_SAR%d[%2x]: %x\n", I2CIdx, REG_DW_I2C_IC_SAR, HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_SAR)); - - - /* To set slave no ack */ - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_SLV_DATA_NACK_ONLY,BIT_CTRL_IC_SLV_DATA_NACK_ONLY(SlvNoAck)); - - /* Set ack general call. */ - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_ACK_GENERAL_CALL,BIT_CTRL_IC_ACK_GENERAL_CALL(pHalI2CInitData->I2CSlvAckGC)); - - - - DBG_I2C_INFO("Init slave, I2C_IC_ACK_GC%d[%2x]: %x\n", I2CIdx, REG_DW_I2C_IC_ACK_GENERAL_CALL, HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_ACK_GENERAL_CALL)); - - /* to set SDA hold time */ - //HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_SDA_HOLD,BIT_CTRL_IC_SDA_HOLD(SdaHd)); - //4 - /* to set SDA setup time */ - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_SDA_SETUP,BIT_CTRL_IC_SDA_SETUP(SdaSetup)); - } - - /* to set SDA hold time */ - INTRMsk = HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_CON); - if (BIT_GET_IC_CON_SPEED(INTRMsk) == I2C_SS_MODE) { - I2CTmp = HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_SS_SCL_LCNT); - } else if (BIT_GET_IC_CON_SPEED(INTRMsk) == I2C_FS_MODE) { - I2CTmp = HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_FS_SCL_LCNT); - } else { - I2CTmp = HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_HS_SCL_LCNT); - } - - if (Master) { - if (SdaHd > (I2CTmp -2)) { - I2CTmp = I2CTmp -2; - if (I2CTmp < 1) { - I2CTmp = 1 + 1; - } - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_SDA_HOLD,BIT_CTRL_IC_SDA_HOLD(I2CTmp)); - } else { - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_SDA_HOLD,BIT_CTRL_IC_SDA_HOLD(SdaHd)); - } - } else { - if (SdaHd > (I2CTmp -2)) { - I2CTmp = I2CTmp -2; - if (I2CTmp < 7) { - I2CTmp = 7 + 1; - } - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_SDA_HOLD,BIT_CTRL_IC_SDA_HOLD(I2CTmp)); - } else { - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_SDA_HOLD,BIT_CTRL_IC_SDA_HOLD(SdaHd)); - } - } - //DBG_8195A("SDA:%x\n", HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_SDA_HOLD)); - - /* To set TX_Empty Level */ - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_TX_TL,TXTL); - - /* To set RX_Full Level */ - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_RX_TL,RXTL); - - /* To set TX/RX FIFO level */ - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_DMA_TDLR,TxDMARqLv); - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_DMA_RDLR,RxDMARqLv); - - - DBG_I2C_INFO("Init i2c dev, I2C_IC_DMA_TDLR%d[%2x]: %x\n", I2CIdx, REG_DW_I2C_IC_DMA_TDLR, HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_DMA_TDLR)); - DBG_I2C_INFO("Init i2c dev, I2C_IC_DMA_RDLR%d[%2x]: %x\n", I2CIdx, REG_DW_I2C_IC_DMA_RDLR, HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_DMA_RDLR)); - - - /*I2C Clear all interrupts first*/ - HalI2CClrAllIntrRtl8195a(pHalI2CInitData); - - /*I2C Disable all interrupts first*/ - INTRMsk = pHalI2CInitData->I2CIntrMSK; - pHalI2CInitData->I2CIntrMSK = 0; - HalI2CIntrCtrl8195a(pHalI2CInitData); - pHalI2CInitData->I2CIntrMSK = INTRMsk; - - return HAL_OK; -} - -//--------------------------------------------------------------------------------------------------- -//Function Name: -// HalI2CSetCLKRtl8195a -// -// Description: -// To set I2C bus clock rate. -// -// Arguments: -// [in] void *Data - -// The I2C parameter data struct. -// -// Return: -// The status of the enable process. -// _EXIT_SUCCESS if the de-initialization succeeded. -// _EXIT_FAILURE if the de-initialization failed. -// -// Note: -// None -// -// See Also: -// NA -// -// Author: -// By Jason Deng, 2014-02-18. -// -//--------------------------------------------------------------------------------------------------- -HAL_Status -HalI2CSetCLKRtl8195a_Patch( - IN void *Data -) -{ - PHAL_I2C_INIT_DAT pHalI2CInitData = (PHAL_I2C_INIT_DAT)Data; - uint8_t SpdMd = pHalI2CInitData->I2CSpdMod; - uint32_t I2CClk = pHalI2CInitData->I2CClk; - uint8_t I2CIdx = pHalI2CInitData->I2CIdx; - uint32_t ICHLcnt; - uint32_t ICHtime; - uint32_t ICLtime; - - /* Get the IC-Clk setting first for the following process*/ -#ifdef CONFIG_FPGA - uint32_t IcClk = SYSTEM_CLK/1000000; -#else - uint32_t IcClk; - uint32_t ClkSELTmp = 0; - uint32_t CpuClkTmp = 0; - - #if defined(CONFIG_CHIP_A_CUT) - CpuClkTmp = StartupHalGetCpuClk(); - #elif (defined(CONFIG_CHIP_B_CUT) || defined(CONFIG_CHIP_C_CUT)) - CpuClkTmp = HalGetCpuClk(); - #endif - - DBG_I2C_INFO("%s, CPU Clk:%x\n",__func__, CpuClkTmp); - - ClkSELTmp = HAL_READ32(PERI_ON_BASE, REG_PESOC_CLK_SEL); - ClkSELTmp &= (~(BIT_PESOC_PERI_SCLK_SEL(3))); - HAL_WRITE32(PERI_ON_BASE,REG_PESOC_CLK_SEL,ClkSELTmp); - IcClk = (CpuClkTmp/1000000)>>1; - -#if 0 - if ((I2CClk > 0) && (I2CClk <= 400)) { - ClkSELTmp &= (~(BIT_PESOC_PERI_SCLK_SEL(3))); - HAL_WRITE32(PERI_ON_BASE,REG_PESOC_CLK_SEL,ClkSELTmp); - IcClk = ClkSELTmp/1000000; /*actually it's 12.5MHz*/ - } - else { - ClkSELTmp &= (~(BIT_PESOC_PERI_SCLK_SEL(3))); - HAL_WRITE32(PERI_ON_BASE,REG_PESOC_CLK_SEL,ClkSELTmp); - IcClk = 100; - } -#endif -#endif - - switch (SpdMd) - { - case I2C_SS_MODE: - { - ICHtime = ((1000000/I2CClk)*I2C_SS_MIN_SCL_HTIME)/(I2C_SS_MIN_SCL_HTIME+I2C_SS_MIN_SCL_LTIME); - ICLtime = ((1000000/I2CClk)*I2C_SS_MIN_SCL_LTIME)/(I2C_SS_MIN_SCL_HTIME+I2C_SS_MIN_SCL_LTIME); - - ICHLcnt = (ICHtime * IcClk)/1000; - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_SS_SCL_HCNT,ICHLcnt); - - - DBG_I2C_INFO("IC_SS_SCL_HCNT%d[%2x]: %x\n", I2CIdx, - REG_DW_I2C_IC_SS_SCL_HCNT, HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_SS_SCL_HCNT)); - - - ICHLcnt = (ICLtime * IcClk)/1000; - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_SS_SCL_LCNT,ICHLcnt); - - - DBG_I2C_INFO("IC_SS_SCL_LCNT%d[%2x]: %x\n", I2CIdx, - REG_DW_I2C_IC_SS_SCL_LCNT, HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_SS_SCL_LCNT)); - - break; - } - - case I2C_FS_MODE: - { - ICHtime = ((1000000/I2CClk)*I2C_FS_MIN_SCL_HTIME)/(I2C_FS_MIN_SCL_HTIME+I2C_FS_MIN_SCL_LTIME); - ICLtime = ((1000000/I2CClk)*I2C_FS_MIN_SCL_LTIME)/(I2C_FS_MIN_SCL_HTIME+I2C_FS_MIN_SCL_LTIME); - - ICHLcnt = (ICHtime * IcClk)/1000; - if (ICHLcnt>4)/*this part is according to the fine-tune result*/ - ICHLcnt -= 4; - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_FS_SCL_HCNT,ICHLcnt); - - - DBG_I2C_INFO("IC_FS_SCL_HCNT%d[%2x]: %x\n", I2CIdx, - REG_DW_I2C_IC_FS_SCL_HCNT, HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_FS_SCL_HCNT)); - - - ICHLcnt = (ICLtime * IcClk)/1000; - if (ICHLcnt>3)/*this part is according to the fine-tune result*/ - ICHLcnt -= 3; - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_FS_SCL_LCNT,ICHLcnt); - - - DBG_I2C_INFO("IC_FS_SCL_LCNT%d[%2x]: %x\n", I2CIdx, - REG_DW_I2C_IC_FS_SCL_LCNT, HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_FS_SCL_LCNT)); - - break; - } - - case I2C_HS_MODE: - { - ICHLcnt = 400; - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_SS_SCL_HCNT,ICHLcnt); - - ICHLcnt = 470; - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_SS_SCL_LCNT,ICHLcnt); - - ICHLcnt = 60; - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_FS_SCL_HCNT,ICHLcnt); - - ICHLcnt = 130; - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_FS_SCL_LCNT,ICHLcnt); - - ICHtime = ((1000000/I2CClk)*I2C_HS_MIN_SCL_HTIME_100)/(I2C_HS_MIN_SCL_HTIME_100+I2C_HS_MIN_SCL_LTIME_100); - ICLtime = ((1000000/I2CClk)*I2C_HS_MIN_SCL_LTIME_100)/(I2C_HS_MIN_SCL_HTIME_100+I2C_HS_MIN_SCL_LTIME_100); - - - DBG_I2C_INFO("ICHtime:%x\n",ICHtime); - DBG_I2C_INFO("ICLtime:%x\n",ICLtime); - - - ICHLcnt = (ICHtime * IcClk)/1000; - if (ICHLcnt>8)/*this part is according to the fine-tune result*/ - ICHLcnt -= 3; - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_HS_SCL_HCNT,ICHLcnt); - - - DBG_I2C_INFO("IC_HS_SCL_HCNT%d[%2x]: %x\n", I2CIdx, - REG_DW_I2C_IC_HS_SCL_HCNT, HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_HS_SCL_HCNT)); - - - ICHLcnt = (ICLtime * IcClk)/1000; - if (ICHLcnt>6)/*this part is according to the fine-tune result*/ - ICHLcnt -= 6; - HAL_I2C_WRITE32(I2CIdx,REG_DW_I2C_IC_HS_SCL_LCNT,ICHLcnt); - - - DBG_I2C_INFO("IC_HS_SCL_LCNT%d[%2x]: %x\n", I2CIdx, - REG_DW_I2C_IC_HS_SCL_LCNT, HAL_I2C_READ32(I2CIdx,REG_DW_I2C_IC_HS_SCL_LCNT)); - - - break; - } - - default: - break; - } - - return HAL_OK; -} - -HAL_Status -HalI2CEnableRtl8195a_Patch( - IN void *Data -){ - PHAL_I2C_INIT_DAT pHalI2CInitData = (PHAL_I2C_INIT_DAT)Data; - uint8_t I2CIdx = pHalI2CInitData->I2CIdx; - uint8_t I2CICEn = pHalI2CInitData->I2CEn; - uint32_t I2CTimeoutCount; - uint32_t I2CStartCount; - /* Enable I2C module */ - HAL_I2C_WRITE32(I2CIdx, REG_DW_I2C_IC_ENABLE, BIT_CTRL_IC_ENABLE(I2CICEn)); - - I2CTimeoutCount = ((10000/pHalI2CInitData->I2CClk) /TIMER_TICK_US) +1; - I2CStartCount = HalTimerOp.HalTimerReadCount(1); - - if (!I2CICEn) { - while (HAL_I2C_READ32(I2CIdx, REG_DW_I2C_IC_ENABLE_STATUS) & BIT_IC_ENABLE_STATUS_IC_EN) { - if (HAL_TIMEOUT == I2CIsTimeout(I2CStartCount, I2CTimeoutCount)) { - return HAL_TIMEOUT; - } - } - } else { - while (!(HAL_I2C_READ32(I2CIdx, REG_DW_I2C_IC_ENABLE_STATUS) & BIT_IC_ENABLE_STATUS_IC_EN)) { - if (HAL_TIMEOUT == I2CIsTimeout(I2CStartCount, I2CTimeoutCount)) { - return HAL_TIMEOUT; - } - } - } - return HAL_OK; -} -#endif - -#endif // CONFIG_I2C_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2c.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2c.h deleted file mode 100644 index 4795505..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2c.h +++ /dev/null @@ -1,860 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _RTL8195A_I2C_H_ -#define _RTL8195A_I2C_H_ - -#include "hal_api.h" - -//================ Register Bit Field ================== -//2 REG_DW_I2C_IC_CON -#define BIT_IC_CON_IC_SLAVE_DISABLE BIT(6) -#define BIT_SHIFT_IC_CON_IC_SLAVE_DISABLE 6 -#define BIT_MASK_IC_CON_IC_SLAVE_DISABLE 0x1 -#define BIT_CTRL_IC_CON_IC_SLAVE_DISABLE(x) (((x) & BIT_MASK_IC_CON_IC_SLAVE_DISABLE) << BIT_SHIFT_IC_CON_IC_SLAVE_DISABLE) - -#define BIT_IC_CON_IC_RESTART_EN BIT(5) -#define BIT_SHIFT_IC_CON_IC_RESTART_EN 5 -#define BIT_MASK_IC_CON_IC_RESTART_EN 0x1 -#define BIT_CTRL_IC_CON_IC_RESTART_EN(x) (((x) & BIT_MASK_IC_CON_IC_RESTART_EN) << BIT_SHIFT_IC_CON_IC_RESTART_EN) - -#define BIT_IC_CON_IC_10BITADDR_MASTER BIT(4) -#define BIT_SHIFT_IC_CON_IC_10BITADDR_MASTER 4 -#define BIT_MASK_IC_CON_IC_10BITADDR_MASTER 0x1 -#define BIT_CTRL_IC_CON_IC_10BITADDR_MASTER(x) (((x) & BIT_MASK_IC_CON_IC_10BITADDR_MASTER) << BIT_SHIFT_IC_CON_IC_10BITADDR_MASTER) - -#define BIT_IC_CON_IC_10BITADDR_SLAVE BIT(3) -#define BIT_SHIFT_IC_CON_IC_10BITADDR_SLAVE 3 -#define BIT_MASK_IC_CON_IC_10BITADDR_SLAVE 0x1 -#define BIT_CTRL_IC_CON_IC_10BITADDR_SLAVE(x) (((x) & BIT_MASK_IC_CON_IC_10BITADDR_SLAVE) << BIT_SHIFT_IC_CON_IC_10BITADDR_SLAVE) - - -#define BIT_SHIFT_IC_CON_SPEED 1 -#define BIT_MASK_IC_CON_SPEED 0x3 -#define BIT_IC_CON_SPEED(x) (((x) & BIT_MASK_IC_CON_SPEED) << BIT_SHIFT_IC_CON_SPEED) -#define BIT_CTRL_IC_CON_SPEED(x) (((x) & BIT_MASK_IC_CON_SPEED) << BIT_SHIFT_IC_CON_SPEED) -#define BIT_GET_IC_CON_SPEED(x) (((x) >> BIT_SHIFT_IC_CON_SPEED) & BIT_MASK_IC_CON_SPEED) - -#define BIT_IC_CON_MASTER_MODE BIT(0) -#define BIT_SHIFT_IC_CON_MASTER_MODE 0 -#define BIT_MASK_IC_CON_MASTER_MODE 0x1 -#define BIT_CTRL_IC_CON_MASTER_MODE(x) (((x) & BIT_MASK_IC_CON_MASTER_MODE) << BIT_SHIFT_IC_CON_MASTER_MODE) - - -//2 REG_DW_I2C_IC_TAR -#define BIT_IC_TAR_IC_10BITADDR_MASTER BIT(12) -#define BIT_SHIFT_IC_TAR_IC_10BITADDR_MASTER 12 -#define BIT_MASK_IC_TAR_IC_10BITADDR_MASTER 0x1 -#define BIT_CTRL_IC_TAR_IC_10BITADDR_MASTER(x) (((x) & BIT_MASK_IC_TAR_IC_10BITADDR_MASTER) << BIT_SHIFT_IC_TAR_IC_10BITADDR_MASTER) - -#define BIT_IC_TAR_SPECIAL BIT(11) -#define BIT_SHIFT_IC_TAR_SPECIAL 11 -#define BIT_MASK_IC_TAR_SPECIAL 0x1 -#define BIT_CTRL_IC_TAR_SPECIAL(x) (((x) & BIT_MASK_IC_TAR_SPECIAL) << BIT_SHIFT_IC_TAR_SPECIAL) - -#define BIT_IC_TAR_GC_OR_START BIT(10) -#define BIT_SHIFT_IC_TAR_GC_OR_START 10 -#define BIT_MASK_IC_TAR_GC_OR_START 0x1 -#define BIT_CTRL_IC_TAR_GC_OR_START(x) (((x) & BIT_MASK_IC_TAR_GC_OR_START) << BIT_SHIFT_IC_TAR_GC_OR_START) - - -#define BIT_SHIFT_IC_TAR 0 -#define BIT_MASK_IC_TAR 0x3ff -#define BIT_IC_TAR(x) (((x) & BIT_MASK_IC_TAR) << BIT_SHIFT_IC_TAR) -#define BIT_CTRL_IC_TAR(x) (((x) & BIT_MASK_IC_TAR) << BIT_SHIFT_IC_TAR) -#define BIT_GET_IC_TAR(x) (((x) >> BIT_SHIFT_IC_TAR) & BIT_MASK_IC_TAR) - - -//2 REG_DW_I2C_IC_SAR - -#define BIT_SHIFT_IC_SAR 0 -#define BIT_MASK_IC_SAR 0x3ff -#define BIT_IC_SAR(x) (((x) & BIT_MASK_IC_SAR) << BIT_SHIFT_IC_SAR) -#define BIT_CTRL_IC_SAR(x) (((x) & BIT_MASK_IC_SAR) << BIT_SHIFT_IC_SAR) -#define BIT_GET_IC_SAR(x) (((x) >> BIT_SHIFT_IC_SAR) & BIT_MASK_IC_SAR) - - -//2 REG_DW_I2C_IC_HS_MADDR - -#define BIT_SHIFT_IC_HS_MADDR 0 -#define BIT_MASK_IC_HS_MADDR 0x7 -#define BIT_IC_HS_MADDR(x) (((x) & BIT_MASK_IC_HS_MADDR) << BIT_SHIFT_IC_HS_MADDR) -#define BIT_CTRL_IC_HS_MADDR(x) (((x) & BIT_MASK_IC_HS_MADDR) << BIT_SHIFT_IC_HS_MADDR) -#define BIT_GET_IC_HS_MADDR(x) (((x) >> BIT_SHIFT_IC_HS_MADDR) & BIT_MASK_IC_HS_MADDR) - - -//2 REG_DW_I2C_IC_DATA_CMD -#define BIT_IC_DATA_CMD_RESTART BIT(10) -#define BIT_SHIFT_IC_DATA_CMD_RESTART 10 -#define BIT_MASK_IC_DATA_CMD_RESTART 0x1 -#define BIT_CTRL_IC_DATA_CMD_RESTART(x) (((x) & BIT_MASK_IC_DATA_CMD_RESTART) << BIT_SHIFT_IC_DATA_CMD_RESTART) - -#define BIT_IC_DATA_CMD_STOP BIT(9) -#define BIT_SHIFT_IC_DATA_CMD_STOP 9 -#define BIT_MASK_IC_DATA_CMD_STOP 0x1 -#define BIT_CTRL_IC_DATA_CMD_STOP(x) (((x) & BIT_MASK_IC_DATA_CMD_STOP) << BIT_SHIFT_IC_DATA_CMD_STOP) - -#define BIT_IC_DATA_CMD_CMD BIT(8) -#define BIT_SHIFT_IC_DATA_CMD_CMD 8 -#define BIT_MASK_IC_DATA_CMD_CMD 0x1 -#define BIT_CTRL_IC_DATA_CMD_CMD(x) (((x) & BIT_MASK_IC_DATA_CMD_CMD) << BIT_SHIFT_IC_DATA_CMD_CMD) - - -#define BIT_SHIFT_IC_DATA_CMD_DAT 0 -#define BIT_MASK_IC_DATA_CMD_DAT 0xff -#define BIT_IC_DATA_CMD_DAT(x) (((x) & BIT_MASK_IC_DATA_CMD_DAT) << BIT_SHIFT_IC_DATA_CMD_DAT) -#define BIT_CTRL_IC_DATA_CMD_DAT(x) (((x) & BIT_MASK_IC_DATA_CMD_DAT) << BIT_SHIFT_IC_DATA_CMD_DAT) -#define BIT_GET_IC_DATA_CMD_DAT(x) (((x) >> BIT_SHIFT_IC_DATA_CMD_DAT) & BIT_MASK_IC_DATA_CMD_DAT) - - -//2 REG_DW_I2C_IC_SS_SCL_HCNT - -#define BIT_SHIFT_IC_SS_SCL_HCNT 0 -#define BIT_MASK_IC_SS_SCL_HCNT 0xffff -#define BIT_IC_SS_SCL_HCNT(x) (((x) & BIT_MASK_IC_SS_SCL_HCNT) << BIT_SHIFT_IC_SS_SCL_HCNT) -#define BIT_CTRL_IC_SS_SCL_HCNT(x) (((x) & BIT_MASK_IC_SS_SCL_HCNT) << BIT_SHIFT_IC_SS_SCL_HCNT) -#define BIT_GET_IC_SS_SCL_HCNT(x) (((x) >> BIT_SHIFT_IC_SS_SCL_HCNT) & BIT_MASK_IC_SS_SCL_HCNT) - - -//2 REG_DW_I2C_IC_SS_SCL_LCNT - -#define BIT_SHIFT_IC_SS_SCL_LCNT 0 -#define BIT_MASK_IC_SS_SCL_LCNT 0xffff -#define BIT_IC_SS_SCL_LCNT(x) (((x) & BIT_MASK_IC_SS_SCL_LCNT) << BIT_SHIFT_IC_SS_SCL_LCNT) -#define BIT_CTRL_IC_SS_SCL_LCNT(x) (((x) & BIT_MASK_IC_SS_SCL_LCNT) << BIT_SHIFT_IC_SS_SCL_LCNT) -#define BIT_GET_IC_SS_SCL_LCNT(x) (((x) >> BIT_SHIFT_IC_SS_SCL_LCNT) & BIT_MASK_IC_SS_SCL_LCNT) - - -//2 REG_DW_I2C_IC_FS_SCL_HCNT - -#define BIT_SHIFT_IC_FS_SCL_HCNT 0 -#define BIT_MASK_IC_FS_SCL_HCNT 0xffff -#define BIT_IC_FS_SCL_HCNT(x) (((x) & BIT_MASK_IC_FS_SCL_HCNT) << BIT_SHIFT_IC_FS_SCL_HCNT) -#define BIT_CTRL_IC_FS_SCL_HCNT(x) (((x) & BIT_MASK_IC_FS_SCL_HCNT) << BIT_SHIFT_IC_FS_SCL_HCNT) -#define BIT_GET_IC_FS_SCL_HCNT(x) (((x) >> BIT_SHIFT_IC_FS_SCL_HCNT) & BIT_MASK_IC_FS_SCL_HCNT) - - -//2 REG_DW_I2C_IC_FS_SCL_LCNT - -#define BIT_SHIFT_IC_FS_SCL_LCNT 0 -#define BIT_MASK_IC_FS_SCL_LCNT 0xffff -#define BIT_IC_FS_SCL_LCNT(x) (((x) & BIT_MASK_IC_FS_SCL_LCNT) << BIT_SHIFT_IC_FS_SCL_LCNT) -#define BIT_CTRL_IC_FS_SCL_LCNT(x) (((x) & BIT_MASK_IC_FS_SCL_LCNT) << BIT_SHIFT_IC_FS_SCL_LCNT) -#define BIT_GET_IC_FS_SCL_LCNT(x) (((x) >> BIT_SHIFT_IC_FS_SCL_LCNT) & BIT_MASK_IC_FS_SCL_LCNT) - - -//2 REG_DW_I2C_IC_HS_SCL_HCNT - -#define BIT_SHIFT_IC_HS_SCL_HCNT 0 -#define BIT_MASK_IC_HS_SCL_HCNT 0xffff -#define BIT_IC_HS_SCL_HCNT(x) (((x) & BIT_MASK_IC_HS_SCL_HCNT) << BIT_SHIFT_IC_HS_SCL_HCNT) -#define BIT_CTRL_IC_HS_SCL_HCNT(x) (((x) & BIT_MASK_IC_HS_SCL_HCNT) << BIT_SHIFT_IC_HS_SCL_HCNT) -#define BIT_GET_IC_HS_SCL_HCNT(x) (((x) >> BIT_SHIFT_IC_HS_SCL_HCNT) & BIT_MASK_IC_HS_SCL_HCNT) - - -//2 REG_DW_I2C_IC_HS_SCL_LCNT - -#define BIT_SHIFT_IC_HS_SCL_LCNT 0 -#define BIT_MASK_IC_HS_SCL_LCNT 0xffff -#define BIT_IC_HS_SCL_LCNT(x) (((x) & BIT_MASK_IC_HS_SCL_LCNT) << BIT_SHIFT_IC_HS_SCL_LCNT) -#define BIT_CTRL_IC_HS_SCL_LCNT(x) (((x) & BIT_MASK_IC_HS_SCL_LCNT) << BIT_SHIFT_IC_HS_SCL_LCNT) -#define BIT_GET_IC_HS_SCL_LCNT(x) (((x) >> BIT_SHIFT_IC_HS_SCL_LCNT) & BIT_MASK_IC_HS_SCL_LCNT) - - -//2 REG_DW_I2C_IC_INTR_STAT -#define BIT_IC_INTR_STAT_R_GEN_CALL BIT(11) -#define BIT_SHIFT_IC_INTR_STAT_R_GEN_CALL 11 -#define BIT_MASK_IC_INTR_STAT_R_GEN_CALL 0x1 -#define BIT_CTRL_IC_INTR_STAT_R_GEN_CALL(x) (((x) & BIT_MASK_IC_INTR_STAT_R_GEN_CALL) << BIT_SHIFT_IC_INTR_STAT_R_GEN_CALL) - -#define BIT_IC_INTR_STAT_R_START_DET BIT(10) -#define BIT_SHIFT_IC_INTR_STAT_R_START_DET 10 -#define BIT_MASK_IC_INTR_STAT_R_START_DET 0x1 -#define BIT_CTRL_IC_INTR_STAT_R_START_DET(x) (((x) & BIT_MASK_IC_INTR_STAT_R_START_DET) << BIT_SHIFT_IC_INTR_STAT_R_START_DET) - -#define BIT_IC_INTR_STAT_R_STOP_DET BIT(9) -#define BIT_SHIFT_IC_INTR_STAT_R_STOP_DET 9 -#define BIT_MASK_IC_INTR_STAT_R_STOP_DET 0x1 -#define BIT_CTRL_IC_INTR_STAT_R_STOP_DET(x) (((x) & BIT_MASK_IC_INTR_STAT_R_STOP_DET) << BIT_SHIFT_IC_INTR_STAT_R_STOP_DET) - -#define BIT_IC_INTR_STAT_R_ACTIVITY BIT(8) -#define BIT_SHIFT_IC_INTR_STAT_R_ACTIVITY 8 -#define BIT_MASK_IC_INTR_STAT_R_ACTIVITY 0x1 -#define BIT_CTRL_IC_INTR_STAT_R_ACTIVITY(x) (((x) & BIT_MASK_IC_INTR_STAT_R_ACTIVITY) << BIT_SHIFT_IC_INTR_STAT_R_ACTIVITY) - -#define BIT_IC_INTR_STAT_R_RX_DONE BIT(7) -#define BIT_SHIFT_IC_INTR_STAT_R_RX_DONE 7 -#define BIT_MASK_IC_INTR_STAT_R_RX_DONE 0x1 -#define BIT_CTRL_IC_INTR_STAT_R_RX_DONE(x) (((x) & BIT_MASK_IC_INTR_STAT_R_RX_DONE) << BIT_SHIFT_IC_INTR_STAT_R_RX_DONE) - -#define BIT_IC_INTR_STAT_R_TX_ABRT BIT(6) -#define BIT_SHIFT_IC_INTR_STAT_R_TX_ABRT 6 -#define BIT_MASK_IC_INTR_STAT_R_TX_ABRT 0x1 -#define BIT_CTRL_IC_INTR_STAT_R_TX_ABRT(x) (((x) & BIT_MASK_IC_INTR_STAT_R_TX_ABRT) << BIT_SHIFT_IC_INTR_STAT_R_TX_ABRT) - -#define BIT_IC_INTR_STAT_R_RD_REQ BIT(5) -#define BIT_SHIFT_IC_INTR_STAT_R_RD_REQ 5 -#define BIT_MASK_IC_INTR_STAT_R_RD_REQ 0x1 -#define BIT_CTRL_IC_INTR_STAT_R_RD_REQ(x) (((x) & BIT_MASK_IC_INTR_STAT_R_RD_REQ) << BIT_SHIFT_IC_INTR_STAT_R_RD_REQ) - -#define BIT_IC_INTR_STAT_R_TX_EMPTY BIT(4) -#define BIT_SHIFT_IC_INTR_STAT_R_TX_EMPTY 4 -#define BIT_MASK_IC_INTR_STAT_R_TX_EMPTY 0x1 -#define BIT_CTRL_IC_INTR_STAT_R_TX_EMPTY(x) (((x) & BIT_MASK_IC_INTR_STAT_R_TX_EMPTY) << BIT_SHIFT_IC_INTR_STAT_R_TX_EMPTY) - -#define BIT_IC_INTR_STAT_R_TX_OVER BIT(3) -#define BIT_SHIFT_IC_INTR_STAT_R_TX_OVER 3 -#define BIT_MASK_IC_INTR_STAT_R_TX_OVER 0x1 -#define BIT_CTRL_IC_INTR_STAT_R_TX_OVER(x) (((x) & BIT_MASK_IC_INTR_STAT_R_TX_OVER) << BIT_SHIFT_IC_INTR_STAT_R_TX_OVER) - -#define BIT_IC_INTR_STAT_R_RX_FULL BIT(2) -#define BIT_SHIFT_IC_INTR_STAT_R_RX_FULL 2 -#define BIT_MASK_IC_INTR_STAT_R_RX_FULL 0x1 -#define BIT_CTRL_IC_INTR_STAT_R_RX_FULL(x) (((x) & BIT_MASK_IC_INTR_STAT_R_RX_FULL) << BIT_SHIFT_IC_INTR_STAT_R_RX_FULL) - -#define BIT_IC_INTR_STAT_R_RX_OVER BIT(1) -#define BIT_SHIFT_IC_INTR_STAT_R_RX_OVER 1 -#define BIT_MASK_IC_INTR_STAT_R_RX_OVER 0x1 -#define BIT_CTRL_IC_INTR_STAT_R_RX_OVER(x) (((x) & BIT_MASK_IC_INTR_STAT_R_RX_OVER) << BIT_SHIFT_IC_INTR_STAT_R_RX_OVER) - -#define BIT_IC_INTR_STAT_R_RX_UNDER BIT(0) -#define BIT_SHIFT_IC_INTR_STAT_R_RX_UNDER 0 -#define BIT_MASK_IC_INTR_STAT_R_RX_UNDER 0x1 -#define BIT_CTRL_IC_INTR_STAT_R_RX_UNDER(x) (((x) & BIT_MASK_IC_INTR_STAT_R_RX_UNDER) << BIT_SHIFT_IC_INTR_STAT_R_RX_UNDER) - - -//2 REG_DW_I2C_IC_INTR_MASK -#define BIT_IC_INTR_MASK_M_GEN_CALL BIT(11) -#define BIT_SHIFT_IC_INTR_MASK_M_GEN_CALL 11 -#define BIT_MASK_IC_INTR_MASK_M_GEN_CALL 0x1 -#define BIT_CTRL_IC_INTR_MASK_M_GEN_CALL(x) (((x) & BIT_MASK_IC_INTR_MASK_M_GEN_CALL) << BIT_SHIFT_IC_INTR_MASK_M_GEN_CALL) - -#define BIT_IC_INTR_MASK_M_START_DET BIT(10) -#define BIT_SHIFT_IC_INTR_MASK_M_START_DET 10 -#define BIT_MASK_IC_INTR_MASK_M_START_DET 0x1 -#define BIT_CTRL_IC_INTR_MASK_M_START_DET(x) (((x) & BIT_MASK_IC_INTR_MASK_M_START_DET) << BIT_SHIFT_IC_INTR_MASK_M_START_DET) - -#define BIT_IC_INTR_MASK_M_STOP_DET BIT(9) -#define BIT_SHIFT_IC_INTR_MASK_M_STOP_DET 9 -#define BIT_MASK_IC_INTR_MASK_M_STOP_DET 0x1 -#define BIT_CTRL_IC_INTR_MASK_M_STOP_DET(x) (((x) & BIT_MASK_IC_INTR_MASK_M_STOP_DET) << BIT_SHIFT_IC_INTR_MASK_M_STOP_DET) - -#define BIT_IC_INTR_MASK_M_ACTIVITY BIT(8) -#define BIT_SHIFT_IC_INTR_MASK_M_ACTIVITY 8 -#define BIT_MASK_IC_INTR_MASK_M_ACTIVITY 0x1 -#define BIT_CTRL_IC_INTR_MASK_M_ACTIVITY(x) (((x) & BIT_MASK_IC_INTR_MASK_M_ACTIVITY) << BIT_SHIFT_IC_INTR_MASK_M_ACTIVITY) - -#define BIT_IC_INTR_MASK_M_RX_DONE BIT(7) -#define BIT_SHIFT_IC_INTR_MASK_M_RX_DONE 7 -#define BIT_MASK_IC_INTR_MASK_M_RX_DONE 0x1 -#define BIT_CTRL_IC_INTR_MASK_M_RX_DONE(x) (((x) & BIT_MASK_IC_INTR_MASK_M_RX_DONE) << BIT_SHIFT_IC_INTR_MASK_M_RX_DONE) - -#define BIT_IC_INTR_MASK_M_TX_ABRT BIT(6) -#define BIT_SHIFT_IC_INTR_MASK_M_TX_ABRT 6 -#define BIT_MASK_IC_INTR_MASK_M_TX_ABRT 0x1 -#define BIT_CTRL_IC_INTR_MASK_M_TX_ABRT(x) (((x) & BIT_MASK_IC_INTR_MASK_M_TX_ABRT) << BIT_SHIFT_IC_INTR_MASK_M_TX_ABRT) - -#define BIT_IC_INTR_MASK_M_RD_REQ BIT(5) -#define BIT_SHIFT_IC_INTR_MASK_M_RD_REQ 5 -#define BIT_MASK_IC_INTR_MASK_M_RD_REQ 0x1 -#define BIT_CTRL_IC_INTR_MASK_M_RD_REQ(x) (((x) & BIT_MASK_IC_INTR_MASK_M_RD_REQ) << BIT_SHIFT_IC_INTR_MASK_M_RD_REQ) - -#define BIT_IC_INTR_MASK_M_TX_EMPTY BIT(4) -#define BIT_SHIFT_IC_INTR_MASK_M_TX_EMPTY 4 -#define BIT_MASK_IC_INTR_MASK_M_TX_EMPTY 0x1 -#define BIT_CTRL_IC_INTR_MASK_M_TX_EMPTY(x) (((x) & BIT_MASK_IC_INTR_MASK_M_TX_EMPTY) << BIT_SHIFT_IC_INTR_MASK_M_TX_EMPTY) - -#define BIT_IC_INTR_MASK_M_TX_OVER BIT(3) -#define BIT_SHIFT_IC_INTR_MASK_M_TX_OVER 3 -#define BIT_MASK_IC_INTR_MASK_M_TX_OVER 0x1 -#define BIT_CTRL_IC_INTR_MASK_M_TX_OVER(x) (((x) & BIT_MASK_IC_INTR_MASK_M_TX_OVER) << BIT_SHIFT_IC_INTR_MASK_M_TX_OVER) - -#define BIT_IC_INTR_MASK_M_RX_FULL BIT(2) -#define BIT_SHIFT_IC_INTR_MASK_M_RX_FULL 2 -#define BIT_MASK_IC_INTR_MASK_M_RX_FULL 0x1 -#define BIT_CTRL_IC_INTR_MASK_M_RX_FULL(x) (((x) & BIT_MASK_IC_INTR_MASK_M_RX_FULL) << BIT_SHIFT_IC_INTR_MASK_M_RX_FULL) - -#define BIT_IC_INTR_MASK_M_RX_OVER BIT(1) -#define BIT_SHIFT_IC_INTR_MASK_M_RX_OVER 1 -#define BIT_MASK_IC_INTR_MASK_M_RX_OVER 0x1 -#define BIT_CTRL_IC_INTR_MASK_M_RX_OVER(x) (((x) & BIT_MASK_IC_INTR_MASK_M_RX_OVER) << BIT_SHIFT_IC_INTR_MASK_M_RX_OVER) - -#define BIT_IC_INTR_MASK_M_RX_UNDER BIT(0) -#define BIT_SHIFT_IC_INTR_MASK_M_RX_UNDER 0 -#define BIT_MASK_IC_INTR_MASK_M_RX_UNDER 0x1 -#define BIT_CTRL_IC_INTR_MASK_M_RX_UNDER(x) (((x) & BIT_MASK_IC_INTR_MASK_M_RX_UNDER) << BIT_SHIFT_IC_INTR_MASK_M_RX_UNDER) - - -//2 REG_DW_I2C_IC_RAW_INTR_STAT -#define BIT_IC_RAW_INTR_STAT_GEN_CALL BIT(11) -#define BIT_SHIFT_IC_RAW_INTR_STAT_GEN_CALL 11 -#define BIT_MASK_IC_RAW_INTR_STAT_GEN_CALL 0x1 -#define BIT_CTRL_IC_RAW_INTR_STAT_GEN_CALL(x) (((x) & BIT_MASK_IC_RAW_INTR_STAT_GEN_CALL) << BIT_SHIFT_IC_RAW_INTR_STAT_GEN_CALL) - -#define BIT_IC_RAW_INTR_STAT_START_DET BIT(10) -#define BIT_SHIFT_IC_RAW_INTR_STAT_START_DET 10 -#define BIT_MASK_IC_RAW_INTR_STAT_START_DET 0x1 -#define BIT_CTRL_IC_RAW_INTR_STAT_START_DET(x) (((x) & BIT_MASK_IC_RAW_INTR_STAT_START_DET) << BIT_SHIFT_IC_RAW_INTR_STAT_START_DET) - -#define BIT_IC_RAW_INTR_STAT_STOP_DET BIT(9) -#define BIT_SHIFT_IC_RAW_INTR_STAT_STOP_DET 9 -#define BIT_MASK_IC_RAW_INTR_STAT_STOP_DET 0x1 -#define BIT_CTRL_IC_RAW_INTR_STAT_STOP_DET(x) (((x) & BIT_MASK_IC_RAW_INTR_STAT_STOP_DET) << BIT_SHIFT_IC_RAW_INTR_STAT_STOP_DET) - -#define BIT_IC_RAW_INTR_STAT_ACTIVITY BIT(8) -#define BIT_SHIFT_IC_RAW_INTR_STAT_ACTIVITY 8 -#define BIT_MASK_IC_RAW_INTR_STAT_ACTIVITY 0x1 -#define BIT_CTRL_IC_RAW_INTR_STAT_ACTIVITY(x) (((x) & BIT_MASK_IC_RAW_INTR_STAT_ACTIVITY) << BIT_SHIFT_IC_RAW_INTR_STAT_ACTIVITY) - -#define BIT_IC_RAW_INTR_STAT_RX_DONE BIT(7) -#define BIT_SHIFT_IC_RAW_INTR_STAT_RX_DONE 7 -#define BIT_MASK_IC_RAW_INTR_STAT_RX_DONE 0x1 -#define BIT_CTRL_IC_RAW_INTR_STAT_RX_DONE(x) (((x) & BIT_MASK_IC_RAW_INTR_STAT_RX_DONE) << BIT_SHIFT_IC_RAW_INTR_STAT_RX_DONE) - -#define BIT_IC_RAW_INTR_STAT_TX_ABRT BIT(6) -#define BIT_SHIFT_IC_RAW_INTR_STAT_TX_ABRT 6 -#define BIT_MASK_IC_RAW_INTR_STAT_TX_ABRT 0x1 -#define BIT_CTRL_IC_RAW_INTR_STAT_TX_ABRT(x) (((x) & BIT_MASK_IC_RAW_INTR_STAT_TX_ABRT) << BIT_SHIFT_IC_RAW_INTR_STAT_TX_ABRT) - -#define BIT_IC_RAW_INTR_STAT_RD_REQ BIT(5) -#define BIT_SHIFT_IC_RAW_INTR_STAT_RD_REQ 5 -#define BIT_MASK_IC_RAW_INTR_STAT_RD_REQ 0x1 -#define BIT_CTRL_IC_RAW_INTR_STAT_RD_REQ(x) (((x) & BIT_MASK_IC_RAW_INTR_STAT_RD_REQ) << BIT_SHIFT_IC_RAW_INTR_STAT_RD_REQ) - -#define BIT_IC_RAW_INTR_STAT_TX_EMPTY BIT(4) -#define BIT_SHIFT_IC_RAW_INTR_STAT_TX_EMPTY 4 -#define BIT_MASK_IC_RAW_INTR_STAT_TX_EMPTY 0x1 -#define BIT_CTRL_IC_RAW_INTR_STAT_TX_EMPTY(x) (((x) & BIT_MASK_IC_RAW_INTR_STAT_TX_EMPTY) << BIT_SHIFT_IC_RAW_INTR_STAT_TX_EMPTY) - -#define BIT_IC_RAW_INTR_STAT_TX_OVER BIT(3) -#define BIT_SHIFT_IC_RAW_INTR_STAT_TX_OVER 3 -#define BIT_MASK_IC_RAW_INTR_STAT_TX_OVER 0x1 -#define BIT_CTRL_IC_RAW_INTR_STAT_TX_OVER(x) (((x) & BIT_MASK_IC_RAW_INTR_STAT_TX_OVER) << BIT_SHIFT_IC_RAW_INTR_STAT_TX_OVER) - -#define BIT_IC_RAW_INTR_STAT_RX_FULL BIT(2) -#define BIT_SHIFT_IC_RAW_INTR_STAT_RX_FULL 2 -#define BIT_MASK_IC_RAW_INTR_STAT_RX_FULL 0x1 -#define BIT_CTRL_IC_RAW_INTR_STAT_RX_FULL(x) (((x) & BIT_MASK_IC_RAW_INTR_STAT_RX_FULL) << BIT_SHIFT_IC_RAW_INTR_STAT_RX_FULL) - -#define BIT_IC_RAW_INTR_STAT_RX_OVER BIT(1) -#define BIT_SHIFT_IC_RAW_INTR_STAT_RX_OVER 1 -#define BIT_MASK_IC_RAW_INTR_STAT_RX_OVER 0x1 -#define BIT_CTRL_IC_RAW_INTR_STAT_RX_OVER(x) (((x) & BIT_MASK_IC_RAW_INTR_STAT_RX_OVER) << BIT_SHIFT_IC_RAW_INTR_STAT_RX_OVER) - -#define BIT_IC_RAW_INTR_STAT_RX_UNDER BIT(0) -#define BIT_SHIFT_IC_RAW_INTR_STAT_RX_UNDER 0 -#define BIT_MASK_IC_RAW_INTR_STAT_RX_UNDER 0x1 -#define BIT_CTRL_IC_RAW_INTR_STAT_RX_UNDER(x) (((x) & BIT_MASK_IC_RAW_INTR_STAT_RX_UNDER) << BIT_SHIFT_IC_RAW_INTR_STAT_RX_UNDER) - - -//2 REG_DW_I2C_IC_RX_TL - -#define BIT_SHIFT_IC_RX_TL 0 -#define BIT_MASK_IC_RX_TL 0xff -#define BIT_IC_RX_TL(x) (((x) & BIT_MASK_IC_RX_TL) << BIT_SHIFT_IC_RX_TL) -#define BIT_CTRL_IC_RX_TL(x) (((x) & BIT_MASK_IC_RX_TL) << BIT_SHIFT_IC_RX_TL) -#define BIT_GET_IC_RX_TL(x) (((x) >> BIT_SHIFT_IC_RX_TL) & BIT_MASK_IC_RX_TL) - - -//2 REG_DW_I2C_IC_TX_TL - -#define BIT_SHIFT_IC_TX_TL 0 -#define BIT_MASK_IC_TX_TL 0xff -#define BIT_IC_TX_TL(x) (((x) & BIT_MASK_IC_TX_TL) << BIT_SHIFT_IC_TX_TL) -#define BIT_CTRL_IC_TX_TL(x) (((x) & BIT_MASK_IC_TX_TL) << BIT_SHIFT_IC_TX_TL) -#define BIT_GET_IC_TX_TL(x) (((x) >> BIT_SHIFT_IC_TX_TL) & BIT_MASK_IC_TX_TL) - - -//2 REG_DW_I2C_IC_CLR_INTR -#define BIT_IC_CLR_INTR BIT(0) -#define BIT_SHIFT_IC_CLR_INTR 0 -#define BIT_MASK_IC_CLR_INTR 0x1 -#define BIT_CTRL_IC_CLR_INTR(x) (((x) & BIT_MASK_IC_CLR_INTR) << BIT_SHIFT_IC_CLR_INTR) - - -//2 REG_DW_I2C_IC_CLR_RX_UNDER -#define BIT_IC_CLR_RX_UNDER BIT(0) -#define BIT_SHIFT_IC_CLR_RX_UNDER 0 -#define BIT_MASK_IC_CLR_RX_UNDER 0x1 -#define BIT_CTRL_IC_CLR_RX_UNDER(x) (((x) & BIT_MASK_IC_CLR_RX_UNDER) << BIT_SHIFT_IC_CLR_RX_UNDER) - - -//2 REG_DW_I2C_IC_CLR_RX_OVER -#define BIT_IC_CLR_RX_OVER BIT(0) -#define BIT_SHIFT_IC_CLR_RX_OVER 0 -#define BIT_MASK_IC_CLR_RX_OVER 0x1 -#define BIT_CTRL_IC_CLR_RX_OVER(x) (((x) & BIT_MASK_IC_CLR_RX_OVER) << BIT_SHIFT_IC_CLR_RX_OVER) - - -//2 REG_DW_I2C_IC_CLR_TX_OVER -#define BIT_IC_CLR_TX_OVER BIT(0) -#define BIT_SHIFT_IC_CLR_TX_OVER 0 -#define BIT_MASK_IC_CLR_TX_OVER 0x1 -#define BIT_CTRL_IC_CLR_TX_OVER(x) (((x) & BIT_MASK_IC_CLR_TX_OVER) << BIT_SHIFT_IC_CLR_TX_OVER) - - -//2 REG_DW_I2C_IC_CLR_RD_REQ -#define BIT_IC_CLR_RD_REQ BIT(0) -#define BIT_SHIFT_IC_CLR_RD_REQ 0 -#define BIT_MASK_IC_CLR_RD_REQ 0x1 -#define BIT_CTRL_IC_CLR_RD_REQ(x) (((x) & BIT_MASK_IC_CLR_RD_REQ) << BIT_SHIFT_IC_CLR_RD_REQ) - - -//2 REG_DW_I2C_IC_CLR_TX_ABRT -#define BIT_CLR_RD_REQ BIT(0) -#define BIT_SHIFT_CLR_RD_REQ 0 -#define BIT_MASK_CLR_RD_REQ 0x1 -#define BIT_CTRL_CLR_RD_REQ(x) (((x) & BIT_MASK_CLR_RD_REQ) << BIT_SHIFT_CLR_RD_REQ) - - -//2 REG_DW_I2C_IC_CLR_RX_DONE -#define BIT_IC_CLR_RX_DONE BIT(0) -#define BIT_SHIFT_IC_CLR_RX_DONE 0 -#define BIT_MASK_IC_CLR_RX_DONE 0x1 -#define BIT_CTRL_IC_CLR_RX_DONE(x) (((x) & BIT_MASK_IC_CLR_RX_DONE) << BIT_SHIFT_IC_CLR_RX_DONE) - - -//2 REG_DW_I2C_IC_CLR_ACTIVITY -#define BIT_IC_CLR_ACTIVITY BIT(0) -#define BIT_SHIFT_IC_CLR_ACTIVITY 0 -#define BIT_MASK_IC_CLR_ACTIVITY 0x1 -#define BIT_CTRL_IC_CLR_ACTIVITY(x) (((x) & BIT_MASK_IC_CLR_ACTIVITY) << BIT_SHIFT_IC_CLR_ACTIVITY) - - -//2 REG_DW_I2C_IC_CLR_STOP_DET -#define BIT_IC_CLR_STOP_DET BIT(0) -#define BIT_SHIFT_IC_CLR_STOP_DET 0 -#define BIT_MASK_IC_CLR_STOP_DET 0x1 -#define BIT_CTRL_IC_CLR_STOP_DET(x) (((x) & BIT_MASK_IC_CLR_STOP_DET) << BIT_SHIFT_IC_CLR_STOP_DET) - - -//2 REG_DW_I2C_IC_CLR_START_DET -#define BIT_IC_CLR_START_DET BIT(0) -#define BIT_SHIFT_IC_CLR_START_DET 0 -#define BIT_MASK_IC_CLR_START_DET 0x1 -#define BIT_CTRL_IC_CLR_START_DET(x) (((x) & BIT_MASK_IC_CLR_START_DET) << BIT_SHIFT_IC_CLR_START_DET) - - -//2 REG_DW_I2C_IC_CLR_GEN_CALL -#define BIT_IC_CLR_GEN_CALL BIT(0) -#define BIT_SHIFT_IC_CLR_GEN_CALL 0 -#define BIT_MASK_IC_CLR_GEN_CALL 0x1 -#define BIT_CTRL_IC_CLR_GEN_CALL(x) (((x) & BIT_MASK_IC_CLR_GEN_CALL) << BIT_SHIFT_IC_CLR_GEN_CALL) - - -//2 REG_DW_I2C_IC_ENABLE -#define BIT_IC_ENABLE BIT(0) -#define BIT_SHIFT_IC_ENABLE 0 -#define BIT_MASK_IC_ENABLE 0x1 -#define BIT_CTRL_IC_ENABLE(x) (((x) & BIT_MASK_IC_ENABLE) << BIT_SHIFT_IC_ENABLE) - - -//2 REG_DW_I2C_IC_STATUS -#define BIT_IC_STATUS_SLV_ACTIVITY BIT(6) -#define BIT_SHIFT_IC_STATUS_SLV_ACTIVITY 6 -#define BIT_MASK_IC_STATUS_SLV_ACTIVITY 0x1 -#define BIT_CTRL_IC_STATUS_SLV_ACTIVITY(x) (((x) & BIT_MASK_IC_STATUS_SLV_ACTIVITY) << BIT_SHIFT_IC_STATUS_SLV_ACTIVITY) - -#define BIT_IC_STATUS_MST_ACTIVITY BIT(5) -#define BIT_SHIFT_IC_STATUS_MST_ACTIVITY 5 -#define BIT_MASK_IC_STATUS_MST_ACTIVITY 0x1 -#define BIT_CTRL_IC_STATUS_MST_ACTIVITY(x) (((x) & BIT_MASK_IC_STATUS_MST_ACTIVITY) << BIT_SHIFT_IC_STATUS_MST_ACTIVITY) - -#define BIT_IC_STATUS_RFF BIT(4) -#define BIT_SHIFT_IC_STATUS_RFF 4 -#define BIT_MASK_IC_STATUS_RFF 0x1 -#define BIT_CTRL_IC_STATUS_RFF(x) (((x) & BIT_MASK_IC_STATUS_RFF) << BIT_SHIFT_IC_STATUS_RFF) - -#define BIT_IC_STATUS_RFNE BIT(3) -#define BIT_SHIFT_IC_STATUS_RFNE 3 -#define BIT_MASK_IC_STATUS_RFNE 0x1 -#define BIT_CTRL_IC_STATUS_RFNE(x) (((x) & BIT_MASK_IC_STATUS_RFNE) << BIT_SHIFT_IC_STATUS_RFNE) - -#define BIT_IC_STATUS_TFE BIT(2) -#define BIT_SHIFT_IC_STATUS_TFE 2 -#define BIT_MASK_IC_STATUS_TFE 0x1 -#define BIT_CTRL_IC_STATUS_TFE(x) (((x) & BIT_MASK_IC_STATUS_TFE) << BIT_SHIFT_IC_STATUS_TFE) - -#define BIT_IC_STATUS_TFNF BIT(1) -#define BIT_SHIFT_IC_STATUS_TFNF 1 -#define BIT_MASK_IC_STATUS_TFNF 0x1 -#define BIT_CTRL_IC_STATUS_TFNF(x) (((x) & BIT_MASK_IC_STATUS_TFNF) << BIT_SHIFT_IC_STATUS_TFNF) - -#define BIT_IC_STATUS_ACTIVITY BIT(0) -#define BIT_SHIFT_IC_STATUS_ACTIVITY 0 -#define BIT_MASK_IC_STATUS_ACTIVITY 0x1 -#define BIT_CTRL_IC_STATUS_ACTIVITY(x) (((x) & BIT_MASK_IC_STATUS_ACTIVITY) << BIT_SHIFT_IC_STATUS_ACTIVITY) - - -//2 REG_DW_I2C_IC_TXFLR - -#define BIT_SHIFT_IC_TXFLR 0 -#define BIT_MASK_IC_TXFLR 0x3f -#define BIT_IC_TXFLR(x) (((x) & BIT_MASK_IC_TXFLR) << BIT_SHIFT_IC_TXFLR) -#define BIT_CTRL_IC_TXFLR(x) (((x) & BIT_MASK_IC_TXFLR) << BIT_SHIFT_IC_TXFLR) -#define BIT_GET_IC_TXFLR(x) (((x) >> BIT_SHIFT_IC_TXFLR) & BIT_MASK_IC_TXFLR) - - -//2 REG_DW_I2C_IC_RXFLR - -#define BIT_SHIFT_IC_RXFLR 0 -#define BIT_MASK_IC_RXFLR 0x1f -#define BIT_IC_RXFLR(x) (((x) & BIT_MASK_IC_RXFLR) << BIT_SHIFT_IC_RXFLR) -#define BIT_CTRL_IC_RXFLR(x) (((x) & BIT_MASK_IC_RXFLR) << BIT_SHIFT_IC_RXFLR) -#define BIT_GET_IC_RXFLR(x) (((x) >> BIT_SHIFT_IC_RXFLR) & BIT_MASK_IC_RXFLR) - - -//2 REG_DW_I2C_IC_SDA_HOLD - -#define BIT_SHIFT_IC_SDA_HOLD 0 -#define BIT_MASK_IC_SDA_HOLD 0xffff -#define BIT_IC_SDA_HOLD(x) (((x) & BIT_MASK_IC_SDA_HOLD) << BIT_SHIFT_IC_SDA_HOLD) -#define BIT_CTRL_IC_SDA_HOLD(x) (((x) & BIT_MASK_IC_SDA_HOLD) << BIT_SHIFT_IC_SDA_HOLD) -#define BIT_GET_IC_SDA_HOLD(x) (((x) >> BIT_SHIFT_IC_SDA_HOLD) & BIT_MASK_IC_SDA_HOLD) - - -//2 REG_DW_I2C_IC_TX_ABRT_SOURCE -#define BIT_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX BIT(15) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX 15 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX) - -#define BIT_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST BIT(14) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST 14 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST) - -#define BIT_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO BIT(13) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO 13 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO) - -#define BIT_IC_TX_ABRT_SOURCE_ARB_LOST BIT(12) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ARB_LOST 12 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ARB_LOST 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ARB_LOST(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ARB_LOST) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ARB_LOST) - -#define BIT_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS BIT(11) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS 11 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS) - -#define BIT_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT BIT(10) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT 10 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT) - -#define BIT_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT BIT(9) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT 9 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT) - -#define BIT_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT BIT(8) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT 8 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT) - -#define BIT_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET BIT(7) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET 7 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET) - -#define BIT_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET BIT(6) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET 6 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET) - -#define BIT_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ BIT(5) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ 5 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ) - -#define BIT_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK BIT(4) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK 4 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK) - -#define BIT_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK BIT(3) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK 3 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK) - -#define BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK BIT(2) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK 2 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK) - -#define BIT_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK BIT(1) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK 1 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK) - -#define BIT_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK BIT(0) -#define BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK 0 -#define BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK 0x1 -#define BIT_CTRL_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK(x) (((x) & BIT_MASK_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK) << BIT_SHIFT_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK) - - -//2 REG_DW_I2C_IC_SLV_DATA_NACK_ONLY -#define BIT_IC_SLV_DATA_NACK_ONLY BIT(0) -#define BIT_SHIFT_IC_SLV_DATA_NACK_ONLY 0 -#define BIT_MASK_IC_SLV_DATA_NACK_ONLY 0x1 -#define BIT_CTRL_IC_SLV_DATA_NACK_ONLY(x) (((x) & BIT_MASK_IC_SLV_DATA_NACK_ONLY) << BIT_SHIFT_IC_SLV_DATA_NACK_ONLY) - - -//2 REG_DW_I2C_IC_DMA_CR -#define BIT_IC_DMA_CR_TDMAE BIT(1) -#define BIT_SHIFT_IC_DMA_CR_TDMAE 1 -#define BIT_MASK_IC_DMA_CR_TDMAE 0x1 -#define BIT_CTRL_IC_DMA_CR_TDMAE(x) (((x) & BIT_MASK_IC_DMA_CR_TDMAE) << BIT_SHIFT_IC_DMA_CR_TDMAE) - -#define BIT_IC_DMA_CR_RDMAE BIT(0) -#define BIT_SHIFT_IC_DMA_CR_RDMAE 0 -#define BIT_MASK_IC_DMA_CR_RDMAE 0x1 -#define BIT_CTRL_IC_DMA_CR_RDMAE(x) (((x) & BIT_MASK_IC_DMA_CR_RDMAE) << BIT_SHIFT_IC_DMA_CR_RDMAE) - - -//2 REG_DW_I2C_IC_DMA_TDLR - -#define BIT_SHIFT_IC_DMA_TDLR_DMATDL 0 -#define BIT_MASK_IC_DMA_TDLR_DMATDL 0x1f -#define BIT_IC_DMA_TDLR_DMATDL(x) (((x) & BIT_MASK_IC_DMA_TDLR_DMATDL) << BIT_SHIFT_IC_DMA_TDLR_DMATDL) -#define BIT_CTRL_IC_DMA_TDLR_DMATDL(x) (((x) & BIT_MASK_IC_DMA_TDLR_DMATDL) << BIT_SHIFT_IC_DMA_TDLR_DMATDL) -#define BIT_GET_IC_DMA_TDLR_DMATDL(x) (((x) >> BIT_SHIFT_IC_DMA_TDLR_DMATDL) & BIT_MASK_IC_DMA_TDLR_DMATDL) - - -//2 REG_DW_I2C_IC_DMA_RDLR - -#define BIT_SHIFT_IC_DMA_RDLR_DMARDL 0 -#define BIT_MASK_IC_DMA_RDLR_DMARDL 0xf -#define BIT_IC_DMA_RDLR_DMARDL(x) (((x) & BIT_MASK_IC_DMA_RDLR_DMARDL) << BIT_SHIFT_IC_DMA_RDLR_DMARDL) -#define BIT_CTRL_IC_DMA_RDLR_DMARDL(x) (((x) & BIT_MASK_IC_DMA_RDLR_DMARDL) << BIT_SHIFT_IC_DMA_RDLR_DMARDL) -#define BIT_GET_IC_DMA_RDLR_DMARDL(x) (((x) >> BIT_SHIFT_IC_DMA_RDLR_DMARDL) & BIT_MASK_IC_DMA_RDLR_DMARDL) - - -//2 REG_DW_I2C_IC_SDA_SETUP - -#define BIT_SHIFT_IC_SDA_SETUP 0 -#define BIT_MASK_IC_SDA_SETUP 0xff -#define BIT_IC_SDA_SETUP(x) (((x) & BIT_MASK_IC_SDA_SETUP) << BIT_SHIFT_IC_SDA_SETUP) -#define BIT_CTRL_IC_SDA_SETUP(x) (((x) & BIT_MASK_IC_SDA_SETUP) << BIT_SHIFT_IC_SDA_SETUP) -#define BIT_GET_IC_SDA_SETUP(x) (((x) >> BIT_SHIFT_IC_SDA_SETUP) & BIT_MASK_IC_SDA_SETUP) - - -//2 REG_DW_I2C_IC_ACK_GENERAL_CALL -#define BIT_IC_ACK_GENERAL_CALL BIT(0) -#define BIT_SHIFT_IC_ACK_GENERAL_CALL 0 -#define BIT_MASK_IC_ACK_GENERAL_CALL 0x1 -#define BIT_CTRL_IC_ACK_GENERAL_CALL(x) (((x) & BIT_MASK_IC_ACK_GENERAL_CALL) << BIT_SHIFT_IC_ACK_GENERAL_CALL) - - -//2 REG_DW_I2C_IC_ENABLE_STATUS -#define BIT_IC_ENABLE_STATUS_SLV_RX_DATA_LOST BIT(2) -#define BIT_SHIFT_IC_ENABLE_STATUS_SLV_RX_DATA_LOST 2 -#define BIT_MASK_IC_ENABLE_STATUS_SLV_RX_DATA_LOST 0x1 -#define BIT_CTRL_IC_ENABLE_STATUS_SLV_RX_DATA_LOST(x) (((x) & BIT_MASK_IC_ENABLE_STATUS_SLV_RX_DATA_LOST) << BIT_SHIFT_IC_ENABLE_STATUS_SLV_RX_DATA_LOST) - -#define BIT_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY BIT(1) -#define BIT_SHIFT_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY 1 -#define BIT_MASK_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY 0x1 -#define BIT_CTRL_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY(x) (((x) & BIT_MASK_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY) << BIT_SHIFT_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY) - -#define BIT_IC_ENABLE_STATUS_IC_EN BIT(0) -#define BIT_SHIFT_IC_ENABLE_STATUS_IC_EN 0 -#define BIT_MASK_IC_ENABLE_STATUS_IC_EN 0x1 -#define BIT_CTRL_IC_ENABLE_STATUS_IC_EN(x) (((x) & BIT_MASK_IC_ENABLE_STATUS_IC_EN) << BIT_SHIFT_IC_ENABLE_STATUS_IC_EN) - - -//2 REG_DW_I2C_IC_COMP_PARAM_1 - -#define BIT_SHIFT_IC_COMP_PARAM_1_TX_BUFFER_DEPTH 16 -#define BIT_MASK_IC_COMP_PARAM_1_TX_BUFFER_DEPTH 0xff -#define BIT_IC_COMP_PARAM_1_TX_BUFFER_DEPTH(x) (((x) & BIT_MASK_IC_COMP_PARAM_1_TX_BUFFER_DEPTH) << BIT_SHIFT_IC_COMP_PARAM_1_TX_BUFFER_DEPTH) -#define BIT_CTRL_IC_COMP_PARAM_1_TX_BUFFER_DEPTH(x) (((x) & BIT_MASK_IC_COMP_PARAM_1_TX_BUFFER_DEPTH) << BIT_SHIFT_IC_COMP_PARAM_1_TX_BUFFER_DEPTH) -#define BIT_GET_IC_COMP_PARAM_1_TX_BUFFER_DEPTH(x) (((x) >> BIT_SHIFT_IC_COMP_PARAM_1_TX_BUFFER_DEPTH) & BIT_MASK_IC_COMP_PARAM_1_TX_BUFFER_DEPTH) - - -#define BIT_SHIFT_IC_COMP_PARAM_1_RX_BUFFER_DEPTH 8 -#define BIT_MASK_IC_COMP_PARAM_1_RX_BUFFER_DEPTH 0xff -#define BIT_IC_COMP_PARAM_1_RX_BUFFER_DEPTH(x) (((x) & BIT_MASK_IC_COMP_PARAM_1_RX_BUFFER_DEPTH) << BIT_SHIFT_IC_COMP_PARAM_1_RX_BUFFER_DEPTH) -#define BIT_CTRL_IC_COMP_PARAM_1_RX_BUFFER_DEPTH(x) (((x) & BIT_MASK_IC_COMP_PARAM_1_RX_BUFFER_DEPTH) << BIT_SHIFT_IC_COMP_PARAM_1_RX_BUFFER_DEPTH) -#define BIT_GET_IC_COMP_PARAM_1_RX_BUFFER_DEPTH(x) (((x) >> BIT_SHIFT_IC_COMP_PARAM_1_RX_BUFFER_DEPTH) & BIT_MASK_IC_COMP_PARAM_1_RX_BUFFER_DEPTH) - -#define BIT_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS BIT(7) -#define BIT_SHIFT_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS 7 -#define BIT_MASK_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS 0x1 -#define BIT_CTRL_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS(x) (((x) & BIT_MASK_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS) << BIT_SHIFT_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS) - -#define BIT_IC_COMP_PARAM_1_HAS_DMA BIT(6) -#define BIT_SHIFT_IC_COMP_PARAM_1_HAS_DMA 6 -#define BIT_MASK_IC_COMP_PARAM_1_HAS_DMA 0x1 -#define BIT_CTRL_IC_COMP_PARAM_1_HAS_DMA(x) (((x) & BIT_MASK_IC_COMP_PARAM_1_HAS_DMA) << BIT_SHIFT_IC_COMP_PARAM_1_HAS_DMA) - -#define BIT_IC_COMP_PARAM_1_INTR_IO BIT(5) -#define BIT_SHIFT_IC_COMP_PARAM_1_INTR_IO 5 -#define BIT_MASK_IC_COMP_PARAM_1_INTR_IO 0x1 -#define BIT_CTRL_IC_COMP_PARAM_1_INTR_IO(x) (((x) & BIT_MASK_IC_COMP_PARAM_1_INTR_IO) << BIT_SHIFT_IC_COMP_PARAM_1_INTR_IO) - -#define BIT_IC_COMP_PARAM_1_HC_COUNT_VALUES BIT(4) -#define BIT_SHIFT_IC_COMP_PARAM_1_HC_COUNT_VALUES 4 -#define BIT_MASK_IC_COMP_PARAM_1_HC_COUNT_VALUES 0x1 -#define BIT_CTRL_IC_COMP_PARAM_1_HC_COUNT_VALUES(x) (((x) & BIT_MASK_IC_COMP_PARAM_1_HC_COUNT_VALUES) << BIT_SHIFT_IC_COMP_PARAM_1_HC_COUNT_VALUES) - - -#define BIT_SHIFT_IC_COMP_PARAM_1_MAX_SPEED_MODE 2 -#define BIT_MASK_IC_COMP_PARAM_1_MAX_SPEED_MODE 0x3 -#define BIT_IC_COMP_PARAM_1_MAX_SPEED_MODE(x) (((x) & BIT_MASK_IC_COMP_PARAM_1_MAX_SPEED_MODE) << BIT_SHIFT_IC_COMP_PARAM_1_MAX_SPEED_MODE) -#define BIT_CTRL_IC_COMP_PARAM_1_MAX_SPEED_MODE(x) (((x) & BIT_MASK_IC_COMP_PARAM_1_MAX_SPEED_MODE) << BIT_SHIFT_IC_COMP_PARAM_1_MAX_SPEED_MODE) -#define BIT_GET_IC_COMP_PARAM_1_MAX_SPEED_MODE(x) (((x) >> BIT_SHIFT_IC_COMP_PARAM_1_MAX_SPEED_MODE) & BIT_MASK_IC_COMP_PARAM_1_MAX_SPEED_MODE) - - -#define BIT_SHIFT_IC_COMP_PARAM_1_APB_DATA_WIDTH 0 -#define BIT_MASK_IC_COMP_PARAM_1_APB_DATA_WIDTH 0x3 -#define BIT_IC_COMP_PARAM_1_APB_DATA_WIDTH(x) (((x) & BIT_MASK_IC_COMP_PARAM_1_APB_DATA_WIDTH) << BIT_SHIFT_IC_COMP_PARAM_1_APB_DATA_WIDTH) -#define BIT_CTRL_IC_COMP_PARAM_1_APB_DATA_WIDTH(x) (((x) & BIT_MASK_IC_COMP_PARAM_1_APB_DATA_WIDTH) << BIT_SHIFT_IC_COMP_PARAM_1_APB_DATA_WIDTH) -#define BIT_GET_IC_COMP_PARAM_1_APB_DATA_WIDTH(x) (((x) >> BIT_SHIFT_IC_COMP_PARAM_1_APB_DATA_WIDTH) & BIT_MASK_IC_COMP_PARAM_1_APB_DATA_WIDTH) - - -//2 REG_DW_I2C_IC_COMP_VERSION - -#define BIT_SHIFT_IC_COMP_VERSION 0 -#define BIT_MASK_IC_COMP_VERSION 0xffffffffL -#define BIT_IC_COMP_VERSION(x) (((x) & BIT_MASK_IC_COMP_VERSION) << BIT_SHIFT_IC_COMP_VERSION) -#define BIT_CTRL_IC_COMP_VERSION(x) (((x) & BIT_MASK_IC_COMP_VERSION) << BIT_SHIFT_IC_COMP_VERSION) -#define BIT_GET_IC_COMP_VERSION(x) (((x) >> BIT_SHIFT_IC_COMP_VERSION) & BIT_MASK_IC_COMP_VERSION) - - -//2 REG_DW_I2C_IC_COMP_TYPE - -#define BIT_SHIFT_IC_COMP_TYPE 0 -#define BIT_MASK_IC_COMP_TYPE 0xffffffffL -#define BIT_IC_COMP_TYPE(x) (((x) & BIT_MASK_IC_COMP_TYPE) << BIT_SHIFT_IC_COMP_TYPE) -#define BIT_CTRL_IC_COMP_TYPE(x) (((x) & BIT_MASK_IC_COMP_TYPE) << BIT_SHIFT_IC_COMP_TYPE) -#define BIT_GET_IC_COMP_TYPE(x) (((x) >> BIT_SHIFT_IC_COMP_TYPE) & BIT_MASK_IC_COMP_TYPE) - -//======================== Register Address Definition ======================== -#define REG_DW_I2C_IC_CON 0x0000 // Control Register -#define REG_DW_I2C_IC_TAR 0x0004 // Master Target Address -#define REG_DW_I2C_IC_SAR 0x0008 // Slave Address -#define REG_DW_I2C_IC_HS_MADDR 0x000C // High Speed Master ID -#define REG_DW_I2C_IC_DATA_CMD 0x0010 // Data Buffer and Command -#define REG_DW_I2C_IC_SS_SCL_HCNT 0x0014 // Standard Speed Clock SCL High Count -#define REG_DW_I2C_IC_SS_SCL_LCNT 0x0018 // Standard Speed Clock SCL Low Count -#define REG_DW_I2C_IC_FS_SCL_HCNT 0x001C // Fast Speed Clock SCL High Count -#define REG_DW_I2C_IC_FS_SCL_LCNT 0x0020 // Fast Speed I2C Clock SCL Low Count -#define REG_DW_I2C_IC_HS_SCL_HCNT 0x0024 // High Speed I2C Clock SCL High Count -#define REG_DW_I2C_IC_HS_SCL_LCNT 0x0028 // High Speed I2C Clock SCL Low Count -#define REG_DW_I2C_IC_INTR_STAT 0x002C // Interrupt Status -#define REG_DW_I2C_IC_INTR_MASK 0x0030 // Interrupt Mask -#define REG_DW_I2C_IC_RAW_INTR_STAT 0x0034 // Raw Interrupt Status -#define REG_DW_I2C_IC_RX_TL 0x0038 // Receive FIFO Threshold Level -#define REG_DW_I2C_IC_TX_TL 0x003C // Transmit FIFO Threshold Level -#define REG_DW_I2C_IC_CLR_INTR 0x0040 // Clear Combined and Individual Interrupt -#define REG_DW_I2C_IC_CLR_RX_UNDER 0x0044 // Clear RX_UNDER Interrupt -#define REG_DW_I2C_IC_CLR_RX_OVER 0x0048 // Clear RX_OVER Interrupt -#define REG_DW_I2C_IC_CLR_TX_OVER 0x004C // Clear TX_OVER Interrupt -#define REG_DW_I2C_IC_CLR_RD_REQ 0x0050 // Clear RD_REQ Interrupt -#define REG_DW_I2C_IC_CLR_TX_ABRT 0x0054 // Clear TX_ABRT Interrupt -#define REG_DW_I2C_IC_CLR_RX_DONE 0x0058 // Clear RX_DONE Interrupt -#define REG_DW_I2C_IC_CLR_ACTIVITY 0x005C // Clear ACTIVITY Interrupt -#define REG_DW_I2C_IC_CLR_STOP_DET 0x0060 // Clear STOP_DET Interrupt -#define REG_DW_I2C_IC_CLR_START_DET 0x0064 // Clear START_DET Interrupt -#define REG_DW_I2C_IC_CLR_GEN_CALL 0x0068 // Clear GEN_CALL Interrupt -#define REG_DW_I2C_IC_ENABLE 0x006C // Enable -#define REG_DW_I2C_IC_STATUS 0x0070 // Status -#define REG_DW_I2C_IC_TXFLR 0x0074 // Transmit FIFO Level -#define REG_DW_I2C_IC_RXFLR 0x0078 // Receive FIFO Level -#define REG_DW_I2C_IC_SDA_HOLD 0x007C // SDA Hold -#define REG_DW_I2C_IC_TX_ABRT_SOURCE 0x0080 // Transmit Abort Source -#define REG_DW_I2C_IC_SLV_DATA_NACK_ONLY 0x0084 // -#define REG_DW_I2C_IC_DMA_CR 0x0088 // -#define REG_DW_I2C_IC_DMA_TDLR 0x008C // DMA Transmit Data Level Register -#define REG_DW_I2C_IC_DMA_RDLR 0x0090 // I2C Receive Data Level Register -#define REG_DW_I2C_IC_SDA_SETUP 0x0094 // SDA Setup -#define REG_DW_I2C_IC_ACK_GENERAL_CALL 0x0098 // General Call Ack -#define REG_DW_I2C_IC_ENABLE_STATUS 0x009C // Enable Status -#define REG_DW_I2C_IC_COMP_PARAM_1 0x00F4 // Configuration Parameters -#define REG_DW_I2C_IC_COMP_VERSION 0x00F8 // Component Version -#define REG_DW_I2C_IC_COMP_TYPE 0x00FC // Component Type - -//====================================================== -// I2C related enumeration -// I2C Address Mode -typedef enum _I2C_ADDR_MODE_ { - I2C_ADDR_7BIT = 0, - I2C_ADDR_10BIT = 1, -}I2C_ADDR_MODE,*PI2C_ADDR_MODE; - -// I2C Speed Mode -typedef enum _I2C_SPD_MODE_ { - I2C_SS_MODE = 1, - I2C_FS_MODE = 2, - I2C_HS_MODE = 3, -}I2C_SPD_MODE,*PI2C_SPD_MODE; - -//I2C Timing Parameters -#define I2C_SS_MIN_SCL_HTIME 4000 //the unit is ns. -#define I2C_SS_MIN_SCL_LTIME 4700 //the unit is ns. - -#define I2C_FS_MIN_SCL_HTIME 600 //the unit is ns. -#define I2C_FS_MIN_SCL_LTIME 1300 //the unit is ns. - -#define I2C_HS_MIN_SCL_HTIME_100 60 //the unit is ns, with bus loading = 100pf -#define I2C_HS_MIN_SCL_LTIME_100 120 //the unit is ns., with bus loading = 100pf - -#define I2C_HS_MIN_SCL_HTIME_400 160 //the unit is ns, with bus loading = 400pf -#define I2C_HS_MIN_SCL_LTIME_400 320 //the unit is ns., with bus loading = 400pf - - -//====================================================== -//I2C Essential functions and macros -_LONG_CALL_ROM_ void HalI2CWrite32(IN uint8_t I2CIdx, IN uint8_t I2CReg, IN uint32_t I2CVal); -_LONG_CALL_ROM_ uint32_t HalI2CRead32(IN uint8_t I2CIdx, IN uint8_t I2CReg); - -#define HAL_I2C_WRITE32(I2CIdx, addr, value) HalI2CWrite32(I2CIdx,addr,value) -#define HAL_I2C_READ32(I2CIdx, addr) HalI2CRead32(I2CIdx,addr) - -// Rtl8195a I2C function prototypes -_LONG_CALL_ HAL_Status HalI2CEnableRtl8195a(IN void *Data); -_LONG_CALL_ HAL_Status HalI2CInit8195a(IN void *Data); -_LONG_CALL_ HAL_Status HalI2CDeInit8195a(IN void *Data); -_LONG_CALL_ROM_ HAL_Status HalI2CSetCLKRtl8195a(IN void *Data); -_LONG_CALL_ HAL_Status HalI2CMassSendRtl8195a(IN void *Data); -_LONG_CALL_ HAL_Status HalI2CSendRtl8195a(IN void *Data); -_LONG_CALL_ uint8_t HalI2CReceiveRtl8195a(IN void *Data); -_LONG_CALL_ROM_ HAL_Status HalI2CIntrCtrl8195a(IN void *Data); -_LONG_CALL_ HAL_Status HalI2CClrIntrRtl8195a(IN void *Data); -_LONG_CALL_ROM_ HAL_Status HalI2CClrAllIntrRtl8195a(IN void *Data); -_LONG_CALL_ HAL_Status HalI2CDMACtrl8195a(IN void *Data); -_LONG_CALL_ uint32_t HalI2CReadRegRtl8195a(IN void *Data, IN uint8_t I2CReg); -_LONG_CALL_ HAL_Status HalI2CWriteRegRtl8195a(IN void *Data, IN uint8_t I2CReg, IN uint32_t RegVal); - -//Rtl8195a I2C V02 function prototype -_LONG_CALL_ HAL_Status HalI2CSendRtl8195aV02(IN void *Data); -#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) || defined(CONFIG_CHIP_C_CUT) -_LONG_CALL_ HAL_Status HalI2CSetCLKRtl8195aV02(IN void *Data); -#elif defined(CONFIG_CHIP_E_CUT) -_LONG_CALL_ROM_ HAL_Status HalI2CSetCLKRtl8195aV02(IN void *Data); -#endif -//Rtl8195a I2C V02 function prototype END - -//Rtl8195a I2C V04 function prototype -_LONG_CALL_ HAL_Status HalI2CSendRtl8195a_V04(IN void *Data); -_LONG_CALL_ HAL_Status HalI2CMassSendRtl8195a_V04(IN void *Data); -_LONG_CALL_ HAL_Status HalI2CInit8195a_V04(IN void *Data); -_LONG_CALL_ HAL_Status HalI2CSetCLKRtl8195a_V04(IN void *Data); -//Rtl8195a I2C V04 function prototype END - -HAL_Status HalI2CInit8195a_Patch(IN void *Data); -HAL_Status HalI2CSendRtl8195a_Patch(IN void *Data); -HAL_Status HalI2CSetCLKRtl8195a_Patch(IN void *Data); -HAL_Status HalI2CMassSendRtl8195a_Patch(IN void *Data); -HAL_Status HalI2CEnableRtl8195a_Patch(IN void *Data); - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2s.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2s.c deleted file mode 100644 index 008f0a0..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2s.c +++ /dev/null @@ -1,398 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#include "rtl8195a.h" -#include "rtl8195a_i2s.h" -#include "hal_i2s.h" - -#ifdef CONFIG_I2S_EN - -extern void * -_memset( void *s, int c, SIZE_T n ); - -RTK_STATUS -HalI2SInitRtl8195a_Patch( - IN void *Data -) -{ - PHAL_I2S_INIT_DAT pHalI2SInitData = (PHAL_I2S_INIT_DAT)Data; - - uint8_t I2SIdx; - //uint8_t I2SEn; - uint8_t I2SMaster; - uint8_t I2SWordLen; - uint8_t I2SChNum; - uint8_t I2SPageNum; - uint16_t I2SPageSize; - uint16_t I2SRate; - uint32_t I2STxIntrMSK; - uint32_t I2SRxIntrMSK; - uint8_t I2STRxAct; - uint8_t *I2STxData; - uint8_t *I2SRxData; - - uint32_t Tmp; - - I2SIdx = pHalI2SInitData->I2SIdx; - //I2SEn = pHalI2SInitData->I2SEn; - I2SMaster = pHalI2SInitData->I2SMaster; - I2SWordLen = pHalI2SInitData->I2SWordLen; - I2SChNum = pHalI2SInitData->I2SChNum; - I2SPageNum = pHalI2SInitData->I2SPageNum; - I2SPageSize = pHalI2SInitData->I2SPageSize; - I2SRate = pHalI2SInitData->I2SRate; - I2STRxAct = pHalI2SInitData->I2STRxAct; - I2STxData = pHalI2SInitData->I2STxData; - I2SRxData = pHalI2SInitData->I2SRxData; - - - /* Disable the I2S first, and reset to default */ - HAL_I2S_WRITE32(I2SIdx, REG_I2S_CTL, BIT_CTRL_CTLX_I2S_EN(0) | - BIT_CTRL_CTLX_I2S_SW_RSTN(1)); - HAL_I2S_WRITE32(I2SIdx, REG_I2S_CTL, BIT_CTRL_CTLX_I2S_EN(0) | - BIT_CTRL_CTLX_I2S_SW_RSTN(0)); - HAL_I2S_WRITE32(I2SIdx, REG_I2S_CTL, BIT_CTRL_CTLX_I2S_EN(0) | - BIT_CTRL_CTLX_I2S_SW_RSTN(1)); - - Tmp = HAL_I2S_READ32(I2SIdx, REG_I2S_CTL); - Tmp |= BIT_CTRL_CTLX_I2S_ENDIAN_SWAP(1); - - if (I2SRate & 0x10) - { - Tmp |= BIT_CTRL_CTLX_I2S_CLK_SRC(1); - } - - Tmp |= (BIT_CTRL_CTLX_I2S_WL(I2SWordLen) | BIT_CTRL_CTLX_I2S_CH_NUM(I2SChNum) | - BIT_CTRL_CTLX_I2S_SLAVE_MODE(I2SMaster) | BIT_CTRL_CTLX_I2S_TRX_ACT(I2STRxAct)); - /* set 44.1khz clock source, word length, channel number, master or slave, trx act */ - HAL_I2S_WRITE32(I2SIdx, REG_I2S_CTL, Tmp); - - Tmp = BIT_CTRL_SETTING_I2S_PAGE_SZ(I2SPageSize) | BIT_CTRL_SETTING_I2S_PAGE_NUM(I2SPageNum) | - BIT_CTRL_SETTING_I2S_SAMPLE_RATE(I2SRate); - /* set page size, page number, sample rate */ - HAL_I2S_WRITE32(I2SIdx, REG_I2S_SETTING, Tmp); - - /* need tx rx buffer? need rx page own bit */ - if (I2STxData != NULL) { - HAL_I2S_WRITE32(I2SIdx, REG_I2S_TX_PAGE_PTR, (uint32_t)I2STxData); - } - - if (I2SRxData != NULL) { - HAL_I2S_WRITE32(I2SIdx, REG_I2S_RX_PAGE_PTR, (uint32_t)I2SRxData); - } - - pHalI2SInitData->I2STxIdx = 0; - pHalI2SInitData->I2SRxIdx = 0; - pHalI2SInitData->I2SHWTxIdx = 0; - pHalI2SInitData->I2SHWRxIdx = 0; - /* I2S Clear all interrupts first */ - HalI2SClrAllIntrRtl8195a(pHalI2SInitData); - - /* I2S Disable all interrupts first */ - I2STxIntrMSK = pHalI2SInitData->I2STxIntrMSK; - I2SRxIntrMSK = pHalI2SInitData->I2SRxIntrMSK; - pHalI2SInitData->I2STxIntrMSK = 0; - pHalI2SInitData->I2SRxIntrMSK = 0; - HalI2SIntrCtrlRtl8195a(pHalI2SInitData); - pHalI2SInitData->I2STxIntrMSK = I2STxIntrMSK; - pHalI2SInitData->I2SRxIntrMSK = I2SRxIntrMSK; - - return _EXIT_SUCCESS; -} - -RTK_STATUS -HalI2SSetRateRtl8195a( - IN void *Data -) -{ - PHAL_I2S_INIT_DAT pHalI2SInitData = (PHAL_I2S_INIT_DAT)Data; - uint8_t I2SIdx; - uint32_t reg_value; - - I2SIdx = pHalI2SInitData->I2SIdx; - - reg_value = HAL_I2S_READ32(I2SIdx, REG_I2S_CTL); - reg_value &= ~(BIT_MASK_CTLX_I2S_CLK_SRC << BIT_SHIFT_CTLX_I2S_CLK_SRC); - if (pHalI2SInitData->I2SRate & 0x10) - { - reg_value |= BIT_CTRL_CTLX_I2S_CLK_SRC(1); - } - HAL_I2S_WRITE32(I2SIdx, REG_I2S_CTL, reg_value); - - reg_value = HAL_I2S_READ32(I2SIdx, REG_I2S_SETTING); - reg_value &= ~(BIT_MASK_SETTING_I2S_SAMPLE_RATE << BIT_SHIFT_SETTING_I2S_SAMPLE_RATE); - reg_value |= BIT_CTRL_SETTING_I2S_SAMPLE_RATE(pHalI2SInitData->I2SRate); - HAL_I2S_WRITE32(I2SIdx, REG_I2S_SETTING, reg_value); - - return _EXIT_SUCCESS; -} - -RTK_STATUS -HalI2SSetWordLenRtl8195a( - IN void *Data -) -{ - PHAL_I2S_INIT_DAT pHalI2SInitData = (PHAL_I2S_INIT_DAT)Data; - uint8_t I2SIdx; - uint32_t reg_value; - - I2SIdx = pHalI2SInitData->I2SIdx; - reg_value = HAL_I2S_READ32(I2SIdx, REG_I2S_CTL); - reg_value &= ~(BIT_MASK_CTLX_I2S_WL << BIT_SHIFT_CTLX_I2S_WL); - reg_value |= BIT_CTRL_CTLX_I2S_WL(pHalI2SInitData->I2SWordLen); - HAL_I2S_WRITE32(I2SIdx, REG_I2S_CTL, reg_value); - - return _EXIT_SUCCESS; -} - -RTK_STATUS -HalI2SSetChNumRtl8195a( - IN void *Data -) -{ - PHAL_I2S_INIT_DAT pHalI2SInitData = (PHAL_I2S_INIT_DAT)Data; - uint8_t I2SIdx; - uint32_t reg_value; - - I2SIdx = pHalI2SInitData->I2SIdx; - reg_value = HAL_I2S_READ32(I2SIdx, REG_I2S_CTL); - reg_value &= ~(BIT_MASK_CTLX_I2S_CH_NUM << BIT_SHIFT_CTLX_I2S_CH_NUM); - reg_value |= BIT_CTRL_CTLX_I2S_CH_NUM(pHalI2SInitData->I2SChNum); - HAL_I2S_WRITE32(I2SIdx, REG_I2S_CTL, reg_value); - - return _EXIT_SUCCESS; -} - -RTK_STATUS -HalI2SSetPageNumRtl8195a( - IN void *Data -) -{ - PHAL_I2S_INIT_DAT pHalI2SInitData = (PHAL_I2S_INIT_DAT)Data; - uint8_t I2SIdx; - uint32_t reg_value; - - I2SIdx = pHalI2SInitData->I2SIdx; - - reg_value = HAL_I2S_READ32(I2SIdx, REG_I2S_SETTING); - reg_value &= ~(BIT_MASK_SETTING_I2S_PAGE_NUM << BIT_SHIFT_SETTING_I2S_PAGE_NUM); - reg_value |= BIT_CTRL_SETTING_I2S_PAGE_NUM(pHalI2SInitData->I2SPageNum); - HAL_I2S_WRITE32(I2SIdx, REG_I2S_SETTING, reg_value); - - return _EXIT_SUCCESS; -} - -RTK_STATUS -HalI2SSetPageSizeRtl8195a( - IN void *Data -) -{ - PHAL_I2S_INIT_DAT pHalI2SInitData = (PHAL_I2S_INIT_DAT)Data; - uint8_t I2SIdx; - uint32_t reg_value; - - I2SIdx = pHalI2SInitData->I2SIdx; - - reg_value = HAL_I2S_READ32(I2SIdx, REG_I2S_SETTING); - reg_value &= ~(BIT_MASK_SETTING_I2S_PAGE_SZ << BIT_SHIFT_SETTING_I2S_PAGE_SZ); - reg_value |= BIT_CTRL_SETTING_I2S_PAGE_SZ(pHalI2SInitData->I2SPageSize); - HAL_I2S_WRITE32(I2SIdx, REG_I2S_SETTING, reg_value); - - return _EXIT_SUCCESS; -} - -RTK_STATUS -HalI2SSetDirectionRtl8195a( - IN void *Data -) -{ - PHAL_I2S_INIT_DAT pHalI2SInitData = (PHAL_I2S_INIT_DAT)Data; - uint8_t I2SIdx; - uint32_t reg_value; - - I2SIdx = pHalI2SInitData->I2SIdx; - - reg_value = HAL_I2S_READ32(I2SIdx, REG_I2S_CTL); - reg_value &= ~(BIT_MASK_CTLX_I2S_TRX_ACT << BIT_SHIFT_CTLX_I2S_TRX_ACT); - reg_value |= BIT_CTRL_CTLX_I2S_TRX_ACT(pHalI2SInitData->I2STRxAct); - HAL_I2S_WRITE32(I2SIdx, REG_I2S_CTL, reg_value); - - return _EXIT_SUCCESS; -} - -RTK_STATUS -HalI2SSetDMABufRtl8195a( - IN void *Data -) -{ - PHAL_I2S_INIT_DAT pHalI2SInitData = (PHAL_I2S_INIT_DAT)Data; - uint8_t I2SIdx; - uint32_t reg_value; - uint32_t page_num; - - I2SIdx = pHalI2SInitData->I2SIdx; - - reg_value = HAL_I2S_READ32(I2SIdx, REG_I2S_SETTING); - reg_value &= ~(BIT_MASK_SETTING_I2S_PAGE_SZ << BIT_SHIFT_SETTING_I2S_PAGE_SZ); - reg_value &= ~(BIT_MASK_SETTING_I2S_PAGE_NUM << BIT_SHIFT_SETTING_I2S_PAGE_NUM); - reg_value |= BIT_CTRL_SETTING_I2S_PAGE_SZ(pHalI2SInitData->I2SPageSize); - reg_value |= BIT_CTRL_SETTING_I2S_PAGE_NUM(pHalI2SInitData->I2SPageNum); - HAL_I2S_WRITE32(I2SIdx, REG_I2S_SETTING, reg_value); - - page_num = pHalI2SInitData->I2SPageNum + 1; - if (pHalI2SInitData->I2STxData) { - HAL_I2S_WRITE32(I2SIdx, REG_I2S_TX_PAGE_PTR, (uint32_t)pHalI2SInitData->I2STxData); - pHalI2SInitData->I2STxIntrMSK = (1<I2STxIntrMSK = 0; - } - - if (pHalI2SInitData->I2SRxData) { - HAL_I2S_WRITE32(I2SIdx, REG_I2S_RX_PAGE_PTR, (uint32_t)pHalI2SInitData->I2SRxData); - pHalI2SInitData->I2SRxIntrMSK = (1<I2SRxIntrMSK = 0; - - } - - // According to the page number to modify the ISR mask - HalI2SIntrCtrlRtl8195a(pHalI2SInitData); - - return _EXIT_SUCCESS; -} - -uint8_t -HalI2SGetTxPageRtl8195a( - IN void *Data -) -{ - PHAL_I2S_INIT_DAT pHalI2SInitData = (PHAL_I2S_INIT_DAT)Data; - - uint8_t I2SIdx; - uint16_t I2STxIdx = pHalI2SInitData->I2STxIdx; - uint32_t reg; - - I2SIdx = pHalI2SInitData->I2SIdx; - - reg = HAL_I2S_READ32(I2SIdx, REG_I2S_TX_PAGE0_OWN+(I2STxIdx<<2)); - if ((reg & (1<<31)) == 0) { - return I2STxIdx; - } else { - return 0xFF; - } -} - -uint8_t -HalI2SGetRxPageRtl8195a( - IN void *Data -) -{ - PHAL_I2S_INIT_DAT pHalI2SInitData = (PHAL_I2S_INIT_DAT)Data; - - uint8_t I2SIdx; - uint16_t I2SRxIdx = pHalI2SInitData->I2SRxIdx; - uint32_t reg; - - I2SIdx = pHalI2SInitData->I2SIdx; - - reg = HAL_I2S_READ32(I2SIdx, REG_I2S_RX_PAGE0_OWN+(I2SRxIdx << 2)); - if ((reg & (1<<31)) == 0) { - return I2SRxIdx; - } else { - return 0xFF; - } -} - -RTK_STATUS -HalI2SPageSendRtl8195a( - IN void *Data, - IN uint8_t PageIdx -) -{ - PHAL_I2S_INIT_DAT pHalI2SInitData = (PHAL_I2S_INIT_DAT)Data; - uint16_t I2STxIdx = pHalI2SInitData->I2STxIdx; - uint8_t I2SPageNum = pHalI2SInitData->I2SPageNum; - uint8_t I2SIdx; - - if (I2STxIdx != PageIdx) { - DBG_I2S_ERR("HalI2SPageSendRtl8195a: UnExpected Page Index. TxPage=%d, Expected:%d\r\n", - PageIdx, I2STxIdx); - } - - I2SIdx = pHalI2SInitData->I2SIdx; - - HAL_I2S_WRITE32(I2SIdx, REG_I2S_TX_PAGE0_OWN + 4 * PageIdx, BIT_PAGE_I2S_OWN_BIT); - I2STxIdx = PageIdx + 1; - if (I2STxIdx > I2SPageNum) { - I2STxIdx = 0; - } - pHalI2SInitData->I2STxIdx = I2STxIdx; - - return _EXIT_SUCCESS; -} - -RTK_STATUS -HalI2SPageRecvRtl8195a( - IN void *Data -) -{ - PHAL_I2S_INIT_DAT pHalI2SInitData = (PHAL_I2S_INIT_DAT)Data; - uint16_t I2SRxIdx = pHalI2SInitData->I2SRxIdx; - uint8_t I2SPageNum = pHalI2SInitData->I2SPageNum; - uint32_t reg; - uint8_t I2SIdx; - - I2SIdx = pHalI2SInitData->I2SIdx; - reg = HAL_I2S_READ32(I2SIdx, REG_I2S_RX_PAGE0_OWN+(I2SRxIdx << 2)); - if ((reg & (1<<31)) != 0) { - DBG_I2S_ERR("HalI2SPageRecvRtl8195a: No Idle Rx Page\r\n"); - return _EXIT_FAILURE; - } - - HAL_I2S_WRITE32(I2SIdx, REG_I2S_RX_PAGE0_OWN+(I2SRxIdx<<2), 1<<31); - I2SRxIdx += 1; - if (I2SRxIdx > I2SPageNum) { - I2SRxIdx = 0; - } - pHalI2SInitData->I2SRxIdx = I2SRxIdx; - - return _EXIT_SUCCESS; -} - -RTK_STATUS -HalI2SClearAllOwnBitRtl8195a( - IN void *Data -) -{ - PHAL_I2S_INIT_DAT pHalI2SInitData = (PHAL_I2S_INIT_DAT)Data; - uint8_t I2SIdx; - uint32_t i; - - I2SIdx = pHalI2SInitData->I2SIdx; - - for (i=0;i<4;i++) { - HAL_I2S_WRITE32(I2SIdx, REG_I2S_TX_PAGE0_OWN+(i<<2), 0); - HAL_I2S_WRITE32(I2SIdx, REG_I2S_RX_PAGE0_OWN+(i<<2), 0); - } - - return _EXIT_SUCCESS; -} - -RTK_STATUS -HalI2SDMACtrlRtl8195a( - IN void *Data -) -{ - - return _EXIT_SUCCESS; -} - -#endif // CONFIG_I2S_EN - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2s.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2s.h deleted file mode 100644 index 833075e..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2s.h +++ /dev/null @@ -1,723 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#ifndef _RTL8195A_I2S_H_ -#define _RTL8195A_I2S_H_ - - -//=============== Register Bit Field Definition ==================== -// REG_I2S_CONTROL -#define BIT_CTLX_I2S_EN BIT(0) -#define BIT_SHIFT_CTLX_I2S_EN 0 -#define BIT_MASK_CTLX_I2S_EN 0x1 -#define BIT_CTRL_CTLX_I2S_EN(x) (((x) & BIT_MASK_CTLX_I2S_EN) << BIT_SHIFT_CTLX_I2S_EN) - -#define BIT_SHIFT_CTLX_I2S_TRX_ACT 1 -#define BIT_MASK_CTLX_I2S_TRX_ACT 0x3 -#define BIT_CTRL_CTLX_I2S_TRX_ACT(x) (((x) & BIT_MASK_CTLX_I2S_TRX_ACT) << BIT_SHIFT_CTLX_I2S_TRX_ACT) -#define BIT_GET_CTLX_I2S_TRX_ACT(x) (((x) >> BIT_SHIFT_CTLX_I2S_TRX_ACT) & BIT_MASK_CTLX_I2S_TRX_ACT) - -#define BIT_SHIFT_CTLX_I2S_CH_NUM 3 -#define BIT_MASK_CTLX_I2S_CH_NUM 0x3 -#define BIT_CTRL_CTLX_I2S_CH_NUM(x) (((x) & BIT_MASK_CTLX_I2S_CH_NUM) << BIT_SHIFT_CTLX_I2S_CH_NUM) -#define BIT_GET_CTLX_I2S_CH_NUM(x) (((x) >> BIT_SHIFT_CTLX_I2S_CH_NUM) & BIT_MASK_CTLX_I2S_CH_NUM) -//pvvx? -#define BIT_CTLX_I2S_EDGE_SW 5 -#define BIT_MASK_CTLX_EDGE_SW 0x1 -#define BIT_CTLX_EDGE_SW(x) (((x) & BIT_MASK_CTLX_EDGE_SW) << BIT_SHIFT_CTLX_EDGE_SW) -#define BIT_INV_CTLX_EDGE_SW (~(BIT_MASK_CTLX_EDGE_SW << BIT_SHIFT_CTLX_EDGE_SW)) - -#define BIT_CTLX_I2S_WL BIT(6) -#define BIT_SHIFT_CTLX_I2S_WL 6 -#define BIT_MASK_CTLX_I2S_WL 0x1 -#define BIT_CTRL_CTLX_I2S_WL(x) (((x) & BIT_MASK_CTLX_I2S_WL) << BIT_SHIFT_CTLX_I2S_WL) -//pvvx? -#define BIT_CTLX_I2S_LOOP_BACK 7 -#define BIT_MASK_CTLX_LOOP_BACK 0x1 -#define BIT_CTLX_LOOP_BACK(x) (((x) & BIT_MASK_CTLX_LOOP_BACK) << BIT_CTLX_I2S_LOOP_BACK) -#define BIT_INV_CTLX_LOOP_BACK (~(BIT_MASK_CTLX_LOOP_BACK << BIT_CTLX_I2S_LOOP_BACK)) -//pvvx? -#define BIT_CTLX_I2S_FORMAT 8 -#define BIT_MASK_CTLX_FORMAT 0x3 -#define BIT_CTLX_FORMAT(x) (((x) & BIT_MASK_CTLX_FORMAT) << BIT_CTLX_I2S_FORMAT) -#define BIT_INV_CTLX_FORMAT (~(BIT_MASK_CTLX_FORMAT << BIT_CTLX_I2S_FORMAT)) - -#define BIT_CTLX_I2S_LRSWAP BIT(10) -#define BIT_SHIFT_CTLX_I2S_LRSWAP 10 -#define BIT_MASK_CTLX_I2S_LRSWAP 0x1 -#define BIT_CTRL_CTLX_I2S_LRSWAP(x) (((x) & BIT_MASK_CTLX_I2S_LRSWAP) << BIT_SHIFT_CTLX_I2S_LRSWAP) - -#define BIT_CTLX_I2S_SCK_INV BIT(11) -#define BIT_SHIFT_CTLX_I2S_SCK_INV 11 -#define BIT_MASK_CTLX_I2S_SCK_INV 0x1 -#define BIT_CTRL_CTLX_I2S_SCK_INV(x) (((x) & BIT_MASK_CTLX_I2S_SCK_INV) << BIT_SHIFT_CTLX_I2S_SCK_INV) - -#define BIT_CTLX_I2S_ENDIAN_SWAP BIT(12) -#define BIT_SHIFT_CTLX_I2S_ENDIAN_SWAP 12 -#define BIT_MASK_CTLX_I2S_ENDIAN_SWAP 0x1 -#define BIT_CTRL_CTLX_I2S_ENDIAN_SWAP(x) (((x) & BIT_MASK_CTLX_I2S_ENDIAN_SWAP) << BIT_SHIFT_CTLX_I2S_ENDIAN_SWAP) - -#define BIT_CTLX_I2S_SLAVE_MODE BIT(29) -#define BIT_SHIFT_CTLX_I2S_SLAVE_MODE 29 -#define BIT_MASK_CTLX_I2S_SLAVE_MODE 0x1 -#define BIT_CTRL_CTLX_I2S_SLAVE_MODE(x) (((x) & BIT_MASK_CTLX_I2S_SLAVE_MODE) << BIT_SHIFT_CTLX_I2S_SLAVE_MODE) - -#define BIT_CTLX_I2S_CLK_SRC BIT(30) -#define BIT_SHIFT_CTLX_I2S_CLK_SRC 30 -#define BIT_MASK_CTLX_I2S_CLK_SRC 0x1 -#define BIT_CTRL_CTLX_I2S_CLK_SRC(x) (((x) & BIT_MASK_CTLX_I2S_CLK_SRC) << BIT_SHIFT_CTLX_I2S_CLK_SRC) - -#define BIT_CTLX_I2S_SW_RSTN BIT(31) -#define BIT_SHIFT_CTLX_I2S_SW_RSTN 31 -#define BIT_MASK_CTLX_I2S_SW_RSTN 0x1 -#define BIT_CTRL_CTLX_I2S_SW_RSTN(x) (((x) & BIT_MASK_CTLX_I2S_SW_RSTN) << BIT_SHIFT_CTLX_I2S_SW_RSTN) - -// REG_I2S_SETTING -#define BIT_SHIFT_SETTING_I2S_PAGE_SZ 0 -#define BIT_MASK_SETTING_I2S_PAGE_SZ 0xFFF -#define BIT_CTRL_SETTING_I2S_PAGE_SZ(x) (((x) & BIT_MASK_SETTING_I2S_PAGE_SZ) << BIT_SHIFT_SETTING_I2S_PAGE_SZ) -#define BIT_GET_SETTING_I2S_PAGE_SZ(x) (((x) >> BIT_SHIFT_SETTING_I2S_PAGE_SZ) & BIT_MASK_SETTING_I2S_PAGE_SZ) - -#define BIT_SHIFT_SETTING_I2S_PAGE_NUM 12 -#define BIT_MASK_SETTING_I2S_PAGE_NUM 0x3 -#define BIT_CTRL_SETTING_I2S_PAGE_NUM(x) (((x) & BIT_MASK_SETTING_I2S_PAGE_NUM) << BIT_SHIFT_SETTING_I2S_PAGE_NUM) -#define BIT_GET_SETTING_I2S_PAGE_NUM(x) (((x) >> BIT_SHIFT_SETTING_I2S_PAGE_NUM) & BIT_MASK_SETTING_I2S_PAGE_NUM) - -#define BIT_SHIFT_SETTING_I2S_SAMPLE_RATE 14 -#define BIT_MASK_SETTING_I2S_SAMPLE_RATE 0x7 -#define BIT_CTRL_SETTING_I2S_SAMPLE_RATE(x) (((x) & BIT_MASK_SETTING_I2S_SAMPLE_RATE) << BIT_SHIFT_SETTING_I2S_SAMPLE_RATE) -#define BIT_GET_SETTING_I2S_SAMPLE_RATE(x) (((x) >> BIT_SHIFT_SETTING_I2S_SAMPLE_RATE) & BIT_MASK_SETTING_I2S_SAMPLE_RATE) - -// i2s trx page own bit -#define BIT_PAGE_I2S_OWN_BIT BIT(31) -#define BIT_SHIFT_PAGE_I2S_OWN_BIT 31 -#define BIT_MASK_PAGE_I2S_OWN_BIT 0x1 -#define BIT_CTRL_PAGE_I2S_OWN_BIT(x) (((x) & BIT_MASK_PAGE_I2S_OWN_BIT) << BIT_SHIFT_PAGE_I2S_OWN_BIT) - -//=============== Register Address Definition ==================== -#define REG_I2S_PAGE_OWN_OFF 0x004 - -#define REG_I2S_CTL 0x000 -#define REG_I2S_TX_PAGE_PTR 0x004 -#define REG_I2S_RX_PAGE_PTR 0x008 -#define REG_I2S_SETTING 0x00C - -#define REG_I2S_TX_MASK_INT 0x010 -#define REG_I2S_TX_STATUS_INT 0x014 -#define REG_I2S_RX_MASK_INT 0x018 -#define REG_I2S_RX_STATUS_INT 0x01c - -#define REG_I2S_TX_PAGE0_OWN 0x020 -#define REG_I2S_TX_PAGE1_OWN 0x024 -#define REG_I2S_TX_PAGE2_OWN 0x028 -#define REG_I2S_TX_PAGE3_OWN 0x02C -#define REG_I2S_RX_PAGE0_OWN 0x030 -#define REG_I2S_RX_PAGE1_OWN 0x034 -#define REG_I2S_RX_PAGE2_OWN 0x038 -#define REG_I2S_RX_PAGE3_OWN 0x03C - -/*I2S Essential Functions and Macros*/ -void -HalI2SWrite32( - IN uint8_t I2SIdx, - IN uint8_t I2SReg, - IN uint32_t I2SVal -); - -uint32_t -HalI2SRead32( - IN uint8_t I2SIdx, - IN uint8_t I2SReg -); - -/* -#define HAL_I2SX_READ32(I2sIndex, addr) \ - HAL_READ32(I2S0_REG_BASE+ (I2sIndex*I2S1_REG_OFF), addr) -#define HAL_I2SX_WRITE32(I2sIndex, addr, value) \ - HAL_WRITE32((I2S0_REG_BASE+ (I2sIndex*I2S1_REG_OFF)), addr, value) -*/ - -#define HAL_I2S_WRITE32(I2SIdx, addr, value) HalI2SWrite32(I2SIdx,addr,value) -#define HAL_I2S_READ32(I2SIdx, addr) HalI2SRead32(I2SIdx,addr) - -/* I2S debug output*/ -#define I2S_PREFIX "RTL8195A[i2s]: " -#define I2S_PREFIX_LVL " [i2s_DBG]: " - -typedef enum _I2S_DBG_LVL_ { - HAL_I2S_LVL = 0x01, - SAL_I2S_LVL = 0x02, - VERI_I2S_LVL = 0x03, -}I2S_DBG_LVL,*PI2S_DBG_LVL; - -#if CONFIG_DEBUG_LOG > 0 -#ifdef CONFIG_DEBUG_LOG_I2S_HAL - - #define DBG_8195A_I2S(...) do{ \ - _DbgDump(I2S_PREFIX __VA_ARGS__);\ - }while(0) - - - #define I2SDBGLVL 0xFF - #define DBG_8195A_I2S_LVL(LVL,...) do{\ - if (LVL&I2SDBGLVL){\ - _DbgDump(I2S_PREFIX_LVL __VA_ARGS__);\ - }\ - }while(0) -#else - #define DBG_I2S_LOG_PERD 100 - #define DBG_8195A_I2S(...) - #define DBG_8195A_I2S_LVL(...) -#endif -#else - #define DBG_I2S_LOG_PERD 100 - #define DBG_8195A_I2S(...) - #define DBG_8195A_I2S_LVL(...) -#endif - -/* -#define REG_I2S_PAGE_OWN_OFF 0x004 -#define REG_I2S_CTL 0x000 -#define REG_I2S_TX_PAGE_PTR 0x004 -#define REG_I2S_RX_PAGE_PTR 0x008 -#define REG_I2S_SETTING 0x00C - -#define REG_I2S_TX_MASK_INT 0x010 -#define REG_I2S_TX_STATUS_INT 0x014 -#define REG_I2S_RX_MASK_INT 0x018 -#define REG_I2S_RX_STATUS_INT 0x01c - - - -#define REG_I2S_TX_PAGE0_OWN 0x020 -#define REG_I2S_TX_PAGE1_OWN 0x024 -#define REG_I2S_TX_PAGE2_OWN 0x028 -#define REG_I2S_TX_PAGE3_OWN 0x02C -#define REG_I2S_RX_PAGE0_OWN 0x030 -#define REG_I2S_RX_PAGE1_OWN 0x034 -#define REG_I2S_RX_PAGE2_OWN 0x038 -#define REG_I2S_RX_PAGE3_OWN 0x03C -*/ -/* template -#define BIT_SHIFT_CTLX_ 7 -#define BIT_MASK_CTLX_ 0x1 -#define BIT_CTLX_(x) (((x) & BIT_MASK_CTLX_) << BIT_SHIFT_CTLX_) -#define BIT_INV_CTLX_ (~(BIT_MASK_CTLX_ << BIT_SHIFT_CTLX_)) -*//* -#define BIT_SHIFT_CTLX_IIS_EN 0 -#define BIT_MASK_CTLX_IIS_EN 0x1 -#define BIT_CTLX_IIS_EN(x) (((x) & BIT_MASK_CTLX_IIS_EN) << BIT_SHIFT_CTLX_IIS_EN) -#define BIT_INV_CTLX_IIS_EN (~(BIT_MASK_CTLX_IIS_EN << BIT_SHIFT_CTLX_IIS_EN)) - -#define BIT_SHIFT_CTLX_TRX 1 -#define BIT_MASK_CTLX_TRX 0x3 -#define BIT_CTLX_TRX(x) (((x) & BIT_MASK_CTLX_TRX) << BIT_SHIFT_CTLX_TRX) -#define BIT_INV_CTLX_TRX (~(BIT_MASK_CTLX_TRX << BIT_SHIFT_CTLX_TRX)) - -#define BIT_SHIFT_CTLX_CH_NUM 3 -#define BIT_MASK_CTLX_CH_NUM 0x3 -#define BIT_CTLX_CH_NUM(x) (((x) & BIT_MASK_CTLX_CH_NUM) << BIT_SHIFT_CTLX_CH_NUM) -#define BIT_INV_CTLX_CH_NUM (~(BIT_MASK_CTLX_CH_NUM << BIT_SHIFT_CTLX_CH_NUM)) - -#define BIT_SHIFT_CTLX_EDGE_SW 5 -#define BIT_MASK_CTLX_EDGE_SW 0x1 -#define BIT_CTLX_EDGE_SW(x) (((x) & BIT_MASK_CTLX_EDGE_SW) << BIT_SHIFT_CTLX_EDGE_SW) -#define BIT_INV_CTLX_EDGE_SW (~(BIT_MASK_CTLX_EDGE_SW << BIT_SHIFT_CTLX_EDGE_SW)) - -#define BIT_SHIFT_CTLX_WL 6 -#define BIT_MASK_CTLX_WL 0x1 -#define BIT_CTLX_WL(x) (((x) & BIT_MASK_CTLX_WL) << BIT_SHIFT_CTLX_WL) -#define BIT_INV_CTLX_WL (~(BIT_MASK_CTLX_WL << BIT_SHIFT_CTLX_WL)) - -#define BIT_SHIFT_CTLX_LOOP_BACK 7 -#define BIT_MASK_CTLX_LOOP_BACK 0x1 -#define BIT_CTLX_LOOP_BACK(x) (((x) & BIT_MASK_CTLX_LOOP_BACK) << BIT_SHIFT_CTLX_LOOP_BACK) -#define BIT_INV_CTLX_LOOP_BACK (~(BIT_MASK_CTLX_LOOP_BACK << BIT_SHIFT_CTLX_LOOP_BACK)) - -#define BIT_SHIFT_CTLX_FORMAT 8 -#define BIT_MASK_CTLX_FORMAT 0x3 -#define BIT_CTLX_FORMAT(x) (((x) & BIT_MASK_CTLX_FORMAT) << BIT_SHIFT_CTLX_FORMAT) -#define BIT_INV_CTLX_FORMAT (~(BIT_MASK_CTLX_FORMAT << BIT_SHIFT_CTLX_FORMAT)) - -#define BIT_SHIFT_CTLX_LRSWAP 10 -#define BIT_MASK_CTLX_LRSWAP 0x1 -#define BIT_CTLX_LRSWAP(x) (((x) & BIT_MASK_CTLX_LRSWAP) << BIT_SHIFT_CTLX_LRSWAP) -#define BIT_INV_CTLX_LRSWAP (~(BIT_MASK_CTLX_LRSWAP << BIT_SHIFT_CTLX_LRSWAP)) - -#define BIT_SHIFT_CTLX_SCK_INV 11 -#define BIT_MASK_CTLX_SCK_INV 0x1 -#define BIT_CTLX_SCK_INV(x) (((x) & BIT_MASK_CTLX_SCK_INV) << BIT_SHIFT_CTLX_SCK_INV) -#define BIT_INV_CTLX_SCK_INV (~(BIT_MASK_CTLX_SCK_INV << BIT_SHIFT_CTLX_SCK_INV)) - -#define BIT_SHIFT_CTLX_ENDIAN_SWAP 12 -#define BIT_MASK_CTLX_ENDIAN_SWAP 0x1 -#define BIT_CTLX_ENDIAN_SWAP(x) (((x) & BIT_MASK_CTLX_ENDIAN_SWAP) << BIT_SHIFT_CTLX_ENDIAN_SWAP) -#define BIT_INV_CTLX_ENDIAN_SWAP (~(BIT_MASK_CTLX_ENDIAN_SWAP << BIT_SHIFT_CTLX_ENDIAN_SWAP)) - -#define BIT_SHIFT_CTLX_DEBUG_SWITCH 15 -#define BIT_MASK_CTLX_DEBUG_SWITCH 0x3 -#define BIT_CTLX_DEBUG_SWITCH(x) (((x) & BIT_MASK_CTLX_DEBUG_SWITCH) << BIT_SHIFT_CTLX_DEBUG_SWITCH) -#define BIT_INV_CTLX_DEBUG_SWITCH (~(BIT_MASK_CTLX_DEBUG_SWITCH << BIT_SHIFT_CTLX_DEBUG_SWITCH)) - -#define BIT_SHIFT_CTLX_SLAVE_SEL 29 -#define BIT_MASK_CTLX_SLAVE_SEL 0x1 -#define BIT_CTLX_SLAVE_SEL(x) (((x) & BIT_MASK_CTLX_SLAVE_SEL) << BIT_SHIFT_CTLX_SLAVE_SEL) -#define BIT_INV_CTLX_SLAVE_SEL (~(BIT_MASK_CTLX_SLAVE_SEL << BIT_SHIFT_CTLX_SLAVE_SEL)) - -#define BIT_SHIFT_CTLX_CLK_SRC 30 -#define BIT_MASK_CTLX_CLK_SRC 0x1 -#define BIT_CTLX_CLK_SRC(x) (((x) & BIT_MASK_CTLX_CLK_SRC) << BIT_SHIFT_CTLX_CLK_SRC) -#define BIT_INV_CTLX_CLK_SRC (~(BIT_MASK_CTLX_CLK_SRC << BIT_SHIFT_CTLX_CLK_SRC)) - -#define BIT_SHIFT_CTLX_SW_RSTN 31 -#define BIT_MASK_CTLX_SW_RSTN 0x1 -#define BIT_CTLX_SW_RSTN(x) (((x) & BIT_MASK_CTLX_SW_RSTN) << BIT_SHIFT_CTLX_SW_RSTN) -#define BIT_INV_CTLX_SW_RSTN (~(BIT_MASK_CTLX_SW_RSTN << BIT_SHIFT_CTLX_SW_RSTN)) - - -#define BIT_SHIFT_SETTING_PAGE_SZ 0 -#define BIT_MASK_SETTING_PAGE_SZ 0xFFF -#define BIT_SETTING_PAGE_SZ(x) (((x) & BIT_MASK_SETTING_PAGE_SZ) << BIT_SHIFT_SETTING_PAGE_SZ) -#define BIT_INV_SETTING_PAGE_SZ (~(BIT_MASK_SETTING_PAGE_SZ << BIT_SHIFT_SETTING_PAGE_SZ)) - -#define BIT_SHIFT_SETTING_PAGE_NUM 12 -#define BIT_MASK_SETTING_PAGE_NUM 0x3 -#define BIT_SETTING_PAGE_NUM(x) (((x) & BIT_MASK_SETTING_PAGE_NUM) << BIT_SHIFT_SETTING_PAGE_NUM) -#define BIT_INV_SETTING_PAGE_NUM (~(BIT_MASK_SETTING_PAGE_NUM << BIT_SHIFT_SETTING_PAGE_NUM)) - -#define BIT_SHIFT_SETTING_SAMPLE_RATE 14 -#define BIT_MASK_SETTING_SAMPLE_RATE 0x7 -#define BIT_SETTING_SAMPLE_RATE(x) (((x) & BIT_MASK_SETTING_SAMPLE_RATE) << BIT_SHIFT_SETTING_SAMPLE_RATE) -#define BIT_INV_SETTING_SAMPLE_RATE (~(BIT_MASK_SETTING_SAMPLE_RATE << BIT_SHIFT_SETTING_SAMPLE_RATE)) -*/ - -typedef enum _I2S_CTL_FORMAT { - FormatI2s = 0x00, - FormatLeftJustified = 0x01, - FormatRightJustified = 0x02 -}I2S_CTL_FORMAT, *PI2S_CTL_FORMAT; - -typedef enum _I2S_CTL_CHNUM { - ChannelStereo = 0x00, - Channel5p1 = 0x01, - ChannelMono = 0x02 -}I2S_CTL_CHNUM, *PI2S_CTL_CHNUM; - -typedef enum _I2S_CTL_TRX_ACT { - RxOnly = 0x00, - TxOnly = 0x01, - TXRX = 0x02 -}I2S_CTL_TRX_ACT, *PI2S_CTL_TRX_ACT; -/* -typedef struct _I2S_CTL_REG_ { - I2S_CTL_FORMAT Format; - I2S_CTL_CHNUM ChNum; - I2S_CTL_TRX_ACT TrxAct; - - uint32_t I2s_En :1; // Bit 0 - uint32_t Rsvd1to4 :4; // Bit 1-4 is TrxAct, ChNum - uint32_t EdgeSw :1; // Bit 5 Edge switch - uint32_t WordLength :1; // Bit 6 - uint32_t LoopBack :1; // Bit 7 - uint32_t Rsvd8to9 :2; // Bit 8-9 is Format - uint32_t DacLrSwap :1; // Bit 10 - uint32_t SckInv :1; // Bit 11 - uint32_t EndianSwap :1; // Bit 12 - uint32_t Rsvd13to14 :2; // Bit 11-14 - uint32_t DebugSwitch :2; // Bit 15-16 - uint32_t Rsvd17to28 :12; // Bit 17-28 - uint32_t SlaveMode :1; // Bit 29 - uint32_t SR44p1KHz :1; // Bit 30 - uint32_t SwRstn :1; // Bit 31 -} I2S_CTL_REG, *PI2S_CTL_REG; -*/ -typedef enum _I2S_SETTING_PAGE_NUM { - I2s1Page = 0x00, - I2s2Page = 0x01, - I2s3Page = 0x02, - I2s4Page = 0x03 -}I2S_SETTING_PAGE_NUM, *PI2S_SETTING_PAGE_NUM; - -//sampling rate -typedef enum _I2S_SETTING_SR { - I2sSR8K = 0x00, - I2sSR16K = 0x01, - I2sSR24K = 0x02, - I2sSR32K = 0x03, - I2sSR48K = 0x05, - I2sSR44p1K = 0x15, - I2sSR96K = 0x06, - I2sSR88p2K = 0x16 -}I2S_SETTING_SR, *PI2S_SETTING_SR; -/* -typedef struct _I2S_SETTING_REG_ { - I2S_SETTING_PAGE_NUM PageNum; - I2S_SETTING_SR SampleRate; - - uint32_t PageSize:12; // Bit 0-11 -}I2S_SETTING_REG, *PI2S_SETTING_REG; - -typedef enum _I2S_TX_ISR { - I2sTxP0OK = 0x01, - I2sTxP1OK = 0x02, - I2sTxP2OK = 0x04, - I2sTxP3OK = 0x08, - I2sTxPageUn = 0x10, - I2sTxFifoEmpty = 0x20 -}I2S_TX_ISR, *PI2S_TX_ISR; - -typedef enum _I2S_RX_ISR { - I2sRxP0OK = 0x01, - I2sRxP1OK = 0x02, - I2sRxP2OK = 0x04, - I2sRxP3OK = 0x08, - I2sRxPageUn = 0x10, - I2sRxFifoFull = 0x20 -}I2S_RX_ISR, *PI2S_RX_ISR; -*/ - -/* Hal I2S function prototype*/ -RTK_STATUS -HalI2SInitRtl8195a( - IN void *Data -); - -RTK_STATUS -HalI2SInitRtl8195a_Patch( - IN void *Data -); - -RTK_STATUS -HalI2SDeInitRtl8195a( - IN void *Data -); - -RTK_STATUS -HalI2STxRtl8195a( - IN void *Data, - IN uint8_t *pBuff -); - -RTK_STATUS -HalI2SRxRtl8195a( - IN void *Data, - OUT uint8_t *pBuff -); - -RTK_STATUS -HalI2SEnableRtl8195a( - IN void *Data -); - -RTK_STATUS -HalI2SIntrCtrlRtl8195a( - IN void *Data -); - -uint32_t -HalI2SReadRegRtl8195a( - IN void *Data, - IN uint8_t I2SReg -); - -RTK_STATUS -HalI2SSetRateRtl8195a( - IN void *Data -); - -RTK_STATUS -HalI2SSetWordLenRtl8195a( - IN void *Data -); - -RTK_STATUS -HalI2SSetChNumRtl8195a( - IN void *Data -); - -RTK_STATUS -HalI2SSetPageNumRtl8195a( - IN void *Data -); - -RTK_STATUS -HalI2SSetPageSizeRtl8195a( - IN void *Data -); - -RTK_STATUS -HalI2SSetDirectionRtl8195a( - IN void *Data -); - -RTK_STATUS -HalI2SSetDMABufRtl8195a( - IN void *Data -); - -RTK_STATUS -HalI2SClrIntrRtl8195a( - IN void *Data -); - -RTK_STATUS -HalI2SClrAllIntrRtl8195a( - IN void *Data -); - -RTK_STATUS -HalI2SDMACtrlRtl8195a( - IN void *Data -); - -uint8_t -HalI2SGetTxPageRtl8195a( - IN void *Data -); - -uint8_t -HalI2SGetRxPageRtl8195a( - IN void *Data -); - -RTK_STATUS -HalI2SPageSendRtl8195a( - IN void *Data, - IN uint8_t PageIdx -); - -RTK_STATUS -HalI2SPageRecvRtl8195a( - IN void *Data -); - -RTK_STATUS -HalI2SClearAllOwnBitRtl8195a( - IN void *Data -); - -#ifdef CONFIG_CHIP_E_CUT -_LONG_CALL_ RTK_STATUS -HalI2SInitRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ RTK_STATUS -HalI2SSetRateRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ RTK_STATUS -HalI2SSetWordLenRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ RTK_STATUS -HalI2SSetChNumRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ RTK_STATUS -HalI2SSetPageNumRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ RTK_STATUS -HalI2SSetPageSizeRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ RTK_STATUS -HalI2SSetDirectionRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ RTK_STATUS -HalI2SSetDMABufRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ uint8_t -HalI2SGetTxPageRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ uint8_t -HalI2SGetRxPageRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ RTK_STATUS -HalI2SPageSendRtl8195a_V04( - IN void *Data, - IN uint8_t PageIdx -); - -_LONG_CALL_ RTK_STATUS -HalI2SPageRecvRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ RTK_STATUS -HalI2SClearAllOwnBitRtl8195a_V04( - IN void *Data -); - -#endif // #ifdef CONFIG_CHIP_E_CUT - -// HAL functions Wrapper -static __inline void -HalI2SSetRate( - IN void *Data -) -{ -#ifndef CONFIG_CHIP_E_CUT - HalI2SSetRateRtl8195a(Data); -#else - HalI2SSetRateRtl8195a_V04(Data); -#endif -} - -static __inline void -HalI2SSetWordLen( - IN void *Data -) -{ -#ifndef CONFIG_CHIP_E_CUT - HalI2SSetWordLenRtl8195a(Data); -#else - HalI2SSetWordLenRtl8195a_V04(Data); -#endif -} - -static __inline void -HalI2SSetChNum( - IN void *Data -) -{ -#ifndef CONFIG_CHIP_E_CUT - HalI2SSetChNumRtl8195a(Data); -#else - HalI2SSetChNumRtl8195a_V04(Data); -#endif -} - -static __inline void -HalI2SSetPageNum( - IN void *Data -) -{ -#ifndef CONFIG_CHIP_E_CUT - HalI2SSetPageNumRtl8195a(Data); -#else - HalI2SSetPageNumRtl8195a_V04(Data); -#endif -} - -static __inline void -HalI2SSetPageSize( - IN void *Data -) -{ -#ifndef CONFIG_CHIP_E_CUT - HalI2SSetPageSizeRtl8195a(Data); -#else - HalI2SSetPageSizeRtl8195a_V04(Data); -#endif -} - -static __inline void -HalI2SSetDirection( - IN void *Data -) -{ -#ifndef CONFIG_CHIP_E_CUT - HalI2SSetDirectionRtl8195a(Data); -#else - HalI2SSetDirectionRtl8195a_V04(Data); -#endif -} - -static __inline void -HalI2SSetDMABuf( - IN void *Data -) -{ -#ifndef CONFIG_CHIP_E_CUT - HalI2SSetDMABufRtl8195a(Data); -#else - HalI2SSetDMABufRtl8195a_V04(Data); -#endif -} - -static __inline uint8_t -HalI2SGetTxPage( - IN void *Data -) -{ -#ifndef CONFIG_CHIP_E_CUT - return HalI2SGetTxPageRtl8195a(Data); -#else - return HalI2SGetTxPageRtl8195a_V04(Data); -#endif -} - -static __inline uint8_t -HalI2SGetRxPage( - IN void *Data -) -{ -#ifndef CONFIG_CHIP_E_CUT - return HalI2SGetRxPageRtl8195a(Data); -#else - return HalI2SGetRxPageRtl8195a_V04(Data); -#endif -} - -static __inline void -HalI2SPageSend( - IN void *Data, - IN uint8_t PageIdx -) -{ -#ifndef CONFIG_CHIP_E_CUT - HalI2SPageSendRtl8195a(Data, PageIdx); -#else - HalI2SPageSendRtl8195a_V04(Data, PageIdx); -#endif -} - -static __inline void -HalI2SPageRecv( - IN void *Data -) -{ -#ifndef CONFIG_CHIP_E_CUT - HalI2SPageRecvRtl8195a(Data); -#else - HalI2SPageRecvRtl8195a_V04(Data); -#endif -} - -static __inline void -HalI2SClearAllOwnBit( - IN void *Data -) -{ -#ifndef CONFIG_CHIP_E_CUT - HalI2SClearAllOwnBitRtl8195a(Data); -#else - HalI2SClearAllOwnBitRtl8195a_V04(Data); -#endif -} - -#endif /* _RTL8195A_I2S_H_ */ - - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_mii.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_mii.c deleted file mode 100644 index 84ac883..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_mii.c +++ /dev/null @@ -1,1082 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "rtl8195a.h" -#include "rtl8195a_mii.h" -#include "hal_mii.h" -#include "osdep_api.h" -//#include "hal_gdma.h" - -#ifdef CONFIG_MII_EN - -volatile uint8_t *pTxDataBuf = NULL; -volatile uint8_t *pRxDataBuf = NULL; - -#if 0 -volatile TX_DESC_FMT TxDesc[MII_TX_DESC_NO]; -volatile RX_DESC_FMT RxDesc[MII_RX_DESC_NO]; -volatile uint32_t TxDescIdx = 0; -volatile uint32_t TxBufIdx = 0; -volatile uint32_t RxDescIdx = 0; -volatile uint32_t RxBufIdx = 0; -volatile uint8_t isTxDone = 0; -volatile uint8_t isRxDone = 0; -volatile uint32_t CurrDataLen = 0; -volatile uint32_t ReadDescIdx = 0; -volatile uint32_t ReadBufIdx = 0; -volatile uint32_t CurrSentSize = 0; -volatile uint32_t CurrReceivedSize = 0; -#endif - -// by jimmy - -volatile PTX_DESC_FMT TxDesc; -volatile PRX_DESC_FMT RxDesc; - -volatile uint8_t TxDescWrPtr = 0; -volatile uint8_t RxDescRdPtr = 0; - -volatile uint32_t CurrDataLen = 0; -#if 0 -HAL_GDMA_OBJ gdmaObj; -uint8_t isGdmaAllocated; -volatile uint8_t isDmaDone; -#endif -extern HAL_ETHER_ADAPTER HalEtherAdp; - - - -void Mii_ISR( - IN void *Data -) -{ - PHAL_ETHER_ADAPTER pEthAdapter = (PHAL_ETHER_ADAPTER) Data; - volatile uint32_t RegValue = HAL_MII_READ32(REG_MII_ISRIMR); - - - if((RegValue & ISR_RXOK) && ((pEthAdapter->InterruptMask) & IMR_RXOK)) - { - /* Disable interrupt and enbale again when the rx descriptor ring is empty */ - pEthAdapter->InterruptMask &= (~IMR_RXOK); - - if(pEthAdapter->CallBack != NULL) - { - pEthAdapter->CallBack(ETH_RXDONE, 0); // receive size is meanless here - } - } - - if((RegValue & ISR_RER_OVF) && ((pEthAdapter->InterruptMask) & IMR_RER_OVF)) - { - DBG_MII_WARN("ISR_RER_OVF 0x%08X \n", RegValue); - - /* Ignore this interrupt, rx thread will clean the OWN bit */ - pEthAdapter->InterruptMask &= (~ISR_RER_OVF); - } - - if((RegValue & ISR_TXOK) && ((pEthAdapter->InterruptMask) & IMR_TXOK)) - { - /* Disable TxOK interrupt */ - pEthAdapter->InterruptMask &= (~IMR_TXOK); - /* User callback function */ - if(pEthAdapter->CallBack != NULL) - { - pEthAdapter->CallBack(ETH_TXDONE, 0); - } - } - - if((RegValue & ISR_LINKCHG) && ((pEthAdapter->InterruptMask) & IMR_LINKCHG)) - { - if(pEthAdapter->CallBack != NULL) - { - if(HAL_MII_READ32(REG_MII_MS) & MS_LINKB) - { - pEthAdapter->CallBack(ETH_LINKDOWN, 0); - } - else - { - pEthAdapter->CallBack(ETH_LINKUP, 0); - } - } - } - - HAL_MII_WRITE32(REG_MII_ISRIMR, (pEthAdapter->InterruptMask) | ISR_CLR_ALL); -} - - -uint16_t -HalMiiRwPhyRegRtl8195a(uint8_t Operation, uint8_t Address, uint16_t Data) -{ - uint32_t tmp; - - - tmp = (Operation << 31) | ((PHY_ADDRESS << 26) & MIIA_PHY_ADDR_MASK) | ((Address << 16) & MIIA_PHY_REG_ADDR_MASK) | Data; - HAL_MII_WRITE32(REG_MII_MIIA, tmp); - HalDelayUs(1000); - - if(Operation) - { - /* Wait for write operation is completed */ - do { - }while(HAL_MII_READ32(REG_MII_MIIA) & MIIA_FLAG); - - return 0; - } - else - { - /* Wait for read operation is completed */ - do { - }while((HAL_MII_READ32(REG_MII_MIIA) & MIIA_FLAG) == 0); - - return (uint16_t)(HAL_MII_READ32(REG_MII_MIIA) & 0xFFFF); - } -} - - -void -HalMiiInitIrqRtl8195a( - IN void *Data -) -{ - PHAL_ETHER_ADAPTER pEthAdapter = (PHAL_ETHER_ADAPTER) Data; - PIRQ_HANDLE pMiiIrqHandle = &(pEthAdapter->IrqHandle); - - - if(pEthAdapter == NULL) - DBG_MII_ERR("pEthAdapter is NULL!\n"); - - pMiiIrqHandle->Data = (uint32_t) pEthAdapter; - pMiiIrqHandle->IrqNum = GMAC_IRQ; - pMiiIrqHandle->IrqFun = (IRQ_FUN) Mii_ISR; - pMiiIrqHandle->Priority = 6; - InterruptRegister(pMiiIrqHandle); - InterruptEn(pMiiIrqHandle); -} - - -static void -HalMiiDeInitIrqRtl8195a( - IN void *Data -) -{ - PHAL_ETHER_ADAPTER pEthAdapter = (PHAL_ETHER_ADAPTER) Data; - IRQ_HANDLE MiiIrqHandle; - - - if(pEthAdapter == NULL) - DBG_8195A("pEthAdapter is NULL!\n"); - - /* Clear all interrupt status */ - HAL_MII_WRITE32(REG_MII_ISRIMR, ISR_CLR_ALL); - - MiiIrqHandle.Data = (uint32_t) pEthAdapter; - MiiIrqHandle.IrqNum = GMAC_IRQ; - MiiIrqHandle.IrqFun = (IRQ_FUN) Mii_ISR; - MiiIrqHandle.Priority = 6; - InterruptDis(&MiiIrqHandle); - InterruptUnRegister(&MiiIrqHandle); -} - -#if 0 -void Mii_DmaDone_ISR(uint32_t id) -{ - isDmaDone = 1; -} -#endif - -int32_t -HalMiiInitRtl8195a( - IN void -) -{ - PHAL_ETHER_ADAPTER pEthAdapter = (PHAL_ETHER_ADAPTER)&HalEtherAdp; - uint32_t regVal = 0; - uint8_t macAddr[6]; - uint32_t i = 0; - uint16_t ret; - - - if((!(pEthAdapter->tx_desc_num)) || (!(pEthAdapter->rx_desc_num))) - { - DBG_MII_ERR("Invalid Tx/Rx descriptor number!\n"); - return -1; - } - DBG_MII_INFO("Tx/Rx: %d/%d\n", pEthAdapter->tx_desc_num, pEthAdapter->rx_desc_num); - - regVal = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PINMUX_CTRL); - regVal &= ~(BIT_EEPROM_PIN_EN); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PINMUX_CTRL, regVal); - - regVal = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PINMUX_CTRL); - regVal &= ~(BIT_SIC_PIN_EN); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_PINMUX_CTRL, regVal); - - SPI_FLASH_PIN_FCTRL(OFF); - - ACTCK_GPIO_CCTRL(ON); - SLPCK_GPIO_CCTRL(ON); - HAL_PERI_ON_WRITE32(REG_GPIO_SHTDN_CTRL, 0x7FF); - GPIO_FCTRL(ON); - - /* 1. enable MII Pinmux & disable SDIO Host/Device mode Pinmux */ - regVal = HAL_READ32(PERI_ON_BASE, REG_HCI_PINMUX_CTRL); - regVal |= BIT24; - regVal &= ~(BIT0 | BIT1); // Important! - HAL_WRITE32(PERI_ON_BASE, REG_HCI_PINMUX_CTRL, regVal); - - /* 2. enable MII IP block (214, 12) */ - regVal = HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN); - regVal |= BIT12; - HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, regVal); - - /* 3. Lexra2AHB Function Enable (304, 11) */ - regVal = HAL_READ32(PERI_ON_BASE, REG_PESOC_SOC_CTRL); - regVal |= BIT11; - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_SOC_CTRL, regVal); - - /* 4. enable MII bus clock (240, 24|25) */ - regVal = HAL_READ32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0); - regVal |= (BIT24 | BIT25); - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0, regVal); - - /* 5. */ - regVal = HAL_READ32(SYSTEM_CTRL_BASE, 0x74) & 0xFFFFC7FF; - HAL_WRITE32(SYSTEM_CTRL_BASE, 0x74, (regVal | 0x00003000)); - - /* 6. AHB mux: select MII (214, 13) */ - regVal = HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN); - regVal |= BIT13; - HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, regVal); - - /* 7. Vendor Register Clock Enable (230, 6|7) */ - regVal = HAL_READ32(PERI_ON_BASE, REG_PESOC_CLK_CTRL); - regVal |= (BIT6 | BIT7); - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_CLK_CTRL, regVal); - - /* 8. Enable GMAC Lexra Timeout (090, 16|17|18) */ - regVal = HAL_READ32(VENDOR_REG_BASE, 0x0090); - regVal |= (BIT16 | BIT17 | BIT18); - HAL_WRITE32(VENDOR_REG_BASE, 0x0090, regVal); - - /* 9. Endian Swap Control (304, 12|13) */ - regVal = HAL_READ32(PERI_ON_BASE, REG_PESOC_SOC_CTRL); - regVal |= (BIT12 | BIT13); - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_SOC_CTRL, regVal); - - HAL_MII_WRITE32(REG_MII_COM, (HAL_MII_READ32(REG_MII_COM) | COM_RST)); - - /* Tx settings */ - HAL_MII_WRITE32(REG_MII_TC, ((TC_IFG_TIME << 10) & TC_IFG_MASK) | ((TC_NORMAL_MODE << 8) & TC_LBK_MASK)); // Normal mode - - /* Rx settings */ - HalMiiGetMacAddressRtl8195a(macAddr); - HAL_MII_WRITE32(REG_MII_IDR0, (macAddr[0] << 24) | (macAddr[1] << 16) | (macAddr[2] << 8) | macAddr[3]); - HAL_MII_WRITE32(REG_MII_IDR4, (macAddr[4] << 24) | (macAddr[5] << 16)); - - HAL_MII_WRITE32(REG_MII_RC, RC_AER | RC_AR | RC_AB | RC_AM | RC_APM | RC_AAP); // Accept error/runt/broadcast/multicast, etc. - HAL_MII_WRITE32(REG_MII_COM, (HAL_MII_READ32(REG_MII_COM) | COM_RXJUMBO)); // Support jumbo packet receiving - HAL_MII_WRITE32(REG_MII_ETNRXCPU1, 0x01010100); - - TxDesc = (PTX_DESC_FMT)(pEthAdapter->TxDescAddr); - RxDesc = (PRX_DESC_FMT)(pEthAdapter->RxDescAddr); - if((TxDesc == NULL) || (RxDesc == NULL)) - { - DBG_MII_ERR("Invalid Tx/Rx descriptor address!\n"); - return -1; - } - - HAL_MII_WRITE32(REG_MII_TXFDP1, (uint32_t)TxDesc); - HAL_MII_WRITE32(REG_MII_RXFDP1, (uint32_t)RxDesc); - HAL_MII_WRITE32(REG_MII_IOCMD1, ((IOCMD1_DSC_FMT_EXTRA << 28) & IOCMD1_DSCFMTEXTRA_MASK) | - IOCMD1_EN_1GB); // Extra desc. format = 011, support 1GB addressing - HAL_MII_WRITE32(REG_MII_IOCMD, IOCMD_SHORT_DES_FMT | - ((IOCMD_TXFTH_256 << 19) & IOCMD_TXFTH_MASK) | - ((IOCMD_RXFTH_256 << 11) & IOCMD_RXFTH_MASK) | - IOCMD_TE); // short desc. format = 1, Tx & Rx FIFO threshold = 256 bytes, enable MII Tx - - /* Reset PHY */ - ret = HalMiiRwPhyRegRtl8195a(1, 0, PHY_SW_RESET); - while(1) - { - /* Check the reset status */ - ret = HalMiiRwPhyRegRtl8195a(0, 0, 0); - if(!(ret & PHY_SW_RESET)) - break; - } - /* Auto-Negotiation */ - HalMiiForceLinkRtl8195a(-1, -1); - - HalMiiInitIrqRtl8195a((void*)(&HalEtherAdp)); - HAL_WRITE32(0xE000E100, 0x0, 0x00040000); // enable external interrupt[18] (GMAC) - /* ISR & IMR */ - HalEtherAdp.InterruptMask = IMR_LINKCHG | IMR_TXOK | IMR_RER_OVF | IMR_RXOK | ISR_CLR_ALL; - HAL_MII_WRITE32(REG_MII_ISRIMR, HalEtherAdp.InterruptMask); - #if 0 - /* Init GDMA */ - gdmaObj.GdmaIrqHandle.IrqFun = (IRQ_FUN)Mii_DmaDone_ISR; - gdmaObj.GdmaIrqHandle.Data = (uint32_t)(&gdmaObj); - isGdmaAllocated = HalGdmaMemCpyInit(&gdmaObj); - #endif - - pTxDataBuf = pEthAdapter->pTxPktBuf; - pRxDataBuf = pEthAdapter->pRxPktBuf; - if((pTxDataBuf == NULL) || (pRxDataBuf == NULL)) - { - DBG_MII_ERR("Invalid Tx/Rx packet buffer address!\n"); - return -1; - } - - /* Fill Tx descriptors */ - for(i = 0; i < (pEthAdapter->tx_desc_num); i++) - { - if(i == ((pEthAdapter->tx_desc_num) - 1)) - TxDesc[i].dw1 = TX_DESC_EOR; - TxDesc[i].addr = (uint32_t)(pTxDataBuf + (i * MII_BUF_SIZE)); - TxDesc[i].dw2 = ((TX_DESC_VLAN_REMOVE << 25) & TX_DESC_VLAN_ACT_MASK) | (C_VLAN_HDR & TX_DESC_VLAN_TAG_MASK); - TxDesc[i].dw3 = 0; - TxDesc[i].dw4 = 0; - } - /* Fill Rx descriptors */ - for(i = 0; i < (pEthAdapter->rx_desc_num); i++) - { - if(i == ((pEthAdapter->rx_desc_num) - 1)) - RxDesc[i].dw1 = RX_DESC_OWN | RX_DESC_EOR | MII_BUF_SIZE; - else - RxDesc[i].dw1 = RX_DESC_OWN | MII_BUF_SIZE; - RxDesc[i].addr = (uint32_t)(pRxDataBuf + (i * MII_BUF_SIZE)); - RxDesc[i].dw2 = 0; - RxDesc[i].dw3 = 0; - } - - #if 0 - // Reset flag - TxDescIdx = 0; - TxBufIdx = 0; - isTxDone = 0; - CurrDataLen = 0; - CurrSentSize = 0; - - RxDescIdx = 0; - RxBufIdx = 0; - isRxDone = 0; - - CurrReceivedSize = 0; - ReadBufIdx = 0; - #endif - HAL_MII_WRITE32(REG_MII_IOCMD, (HAL_MII_READ32(REG_MII_IOCMD) | IOCMD_RE)); // enable MII Rx - HalDelayUs(1000); - - DBG_8195A("Initialization is finished...\n"); - - return 0; -} - - -void -HalMiiDeInitRtl8195a( - IN void -) -{ - #if 0 - if (isGdmaAllocated) - HalGdmaMemCpyDeInit(&gdmaObj); - #endif - HalMiiDeInitIrqRtl8195a((void*)(&HalEtherAdp)); - HAL_WRITE32(0xE000E100, 0x0, (HAL_READ32(0xE000E100, 0x0) & (~BIT18))); // disable external interrupt[18] (GMAC) - - ACTCK_MII_MPHY_CCTRL(OFF); - SLPCK_MII_MPHY_CCTRL(OFF); - PinCtrl(MII, 0, OFF); - MII_FCTRL(OFF); -} - - -int32_t -HalMiiWriteDataRtl8195a( - IN const char *Data, - IN uint32_t Size -) -{ - PHAL_ETHER_ADAPTER pEthAdapter = (PHAL_ETHER_ADAPTER)&HalEtherAdp ; - - - if((Data == NULL) || (Size == 0) || (Size > MAX_FRAME_SIZE)) - { - DBG_MII_ERR("Invalid parameter!\n"); - return -1; - } - - /* Check if current Tx descriptor is available */ - uint8_t tx_serach_idx = TxDescWrPtr; - if((((volatile uint32_t)TxDesc[tx_serach_idx].dw1) & TX_DESC_OWN) == 0) - { - #if 1 - _memcpy((void*)(TxDesc[tx_serach_idx].addr), Data, Size); - #else - isDmaDone = 0; - HalGdmaMemCpy(&gdmaObj, (void*)(TxDesc[tx_serach_idx].addr), (void*)Data, Size); - while (isDmaDone == 0); - #endif - - TxDesc[tx_serach_idx].dw1 &= TX_DESC_EOR; // keep the EOR bit - TxDesc[tx_serach_idx].dw1 |= TX_DESC_OWN | TX_DESC_FS | TX_DESC_LS | TX_DESC_CRC | Size; - TxDesc[tx_serach_idx].dw2 = ((TX_DESC_VLAN_REMOVE << 25) & TX_DESC_VLAN_ACT_MASK) | (C_VLAN_HDR & TX_DESC_VLAN_TAG_MASK); - CurrDataLen += Size; - } - else - { - /* Enable TxOK interrupt */ - HalEtherAdp.InterruptMask |= IMR_TXOK; - HAL_MII_WRITE32(REG_MII_ISRIMR, HalEtherAdp.InterruptMask); - /* Enable Tx ring1 */ - HAL_MII_WRITE32(REG_MII_IOCMD, (HAL_MII_READ32(REG_MII_IOCMD) | IOCMD_TXFN1ST)); - DBG_MII_WARN("Tx ring full\n"); - - /* Upper layer will re-transmit this packet */ - return 0; - } - - /* Check if reach to the end of the ring */ - if(tx_serach_idx == ((pEthAdapter->tx_desc_num) - 1)) - TxDescWrPtr = 0; - else - TxDescWrPtr++; - - - return Size; -} - - -uint32_t -HalMiiSendPacketRtl8195a( - IN void -) -{ - uint32_t size = CurrDataLen; - - - /* Enable TxOK interrupt */ - HalEtherAdp.InterruptMask |= IMR_TXOK; - HAL_MII_WRITE32(REG_MII_ISRIMR, HalEtherAdp.InterruptMask); - /* Enable Tx ring1 */ - HAL_MII_WRITE32(REG_MII_IOCMD, (HAL_MII_READ32(REG_MII_IOCMD) | IOCMD_TXFN1ST)); - CurrDataLen = 0; - - - return size; -} - - -uint32_t -HalMiiReceivePacketRtl8195a( - IN void -) -{ - uint8_t rx_serach_idx = RxDescRdPtr; - uint32_t rx_len = 0; - - - /* Check if Rx descriptor is available */ - if((((volatile uint32_t)RxDesc[rx_serach_idx].dw1) & RX_DESC_OWN) == 0) - { - rx_len = (RxDesc[rx_serach_idx].dw1) & RX_DESC_DATA_LEN_MASK; - } - else - { - /* Enable interrupt again */ - DBG_MII_INFO("RX ring empty\n\r"); - HalEtherAdp.InterruptMask |= (IMR_RXOK | ISR_RER_OVF); - HAL_MII_WRITE32(REG_MII_ISRIMR, HalEtherAdp.InterruptMask); - return 0; - } - - return rx_len; -} - - -uint32_t -HalMiiReadDataRtl8195a( - IN uint8_t *Data, - IN uint32_t Size -) -{ - PHAL_ETHER_ADAPTER pEthAdapter = (PHAL_ETHER_ADAPTER)&HalEtherAdp; - uint32_t read_idx = RxDescRdPtr; - - - if((Data == NULL) || (Size == 0) || (Size > 1518)) - { - DBG_MII_ERR("Wrong params\n"); - return 0; - } - - #if 1 - _memcpy((void*)Data, (void*)(RxDesc[read_idx].addr + 2), Size); - #else - isDmaDone = 0; - HalGdmaMemCpy(&gdmaObj, (void*)Data, (void*)(RxDesc[read_idx].addr + 2), Size); - while (isDmaDone == 0); - #endif - - RxDesc[read_idx].dw1 &= RX_DESC_EOR; // keep the EOR bit - RxDesc[read_idx].dw1 |= (RX_DESC_OWN | MII_BUF_SIZE); - //RxDesc[read_idx].addr = (uint32_t)(pRxDataBuf + (read_idx * MII_BUF_SIZE)); - RxDesc[read_idx].dw2 = 0; - RxDesc[read_idx].dw3 = 0; - - /* Update the read pointer */ - if(read_idx == ((pEthAdapter->rx_desc_num) - 1)) - RxDescRdPtr = 0; - else - RxDescRdPtr++; - - - return Size; -} - - -void -HalMiiGetMacAddressRtl8195a( - IN uint8_t *Addr -) -{ - uint8_t *ptr; - -// To do: Get info. from Flash or Efuse - ptr = Addr; - *(ptr) = 0x12; - *(ptr+1) = 0x34; - *(ptr+2) = 0x56; - *(ptr+3) = 0x78; - *(ptr+4) = 0x9A; - *(ptr+5) = 0xBC; -} - - -uint32_t -HalMiiGetLinkStatusRtl8195a( - IN void -) -{ - uint32_t ret; - - - if(HAL_MII_READ32(REG_MII_MS) & MS_LINKB) - ret = 0; // Link down - else - ret = 1; // Link up - - return ret; -} - - -#if 0 -void -HalMiiForceLinkRtl8195a( - IN int32_t Speed, - IN int32_t Duplex -) -{ - uint32_t regVal = 0; - uint16_t ret; - - #if 0 - /* Reset PHY */ - HAL_MII_WRITE32(REG_MII_MIIA, MIIA_FLAG | - ((PHY_ADDRESS << 26) & MIIA_PHY_ADDR_MASK) | - ((PHY_REG0_ADDR << 16) & MIIA_PHY_REG_ADDR_MASK) | - PHY_SW_RESET); - HalDelayUs(1000); - do { - }while(HAL_MII_READ32(REG_MII_MIIA) & MIIA_FLAG); - - while(1) - { - /* Check reset status */ - HAL_MII_WRITE32(REG_MII_MIIA, ((PHY_ADDRESS << 26) & MIIA_PHY_ADDR_MASK) | ((PHY_REG0_ADDR << 16) & MIIA_PHY_REG_ADDR_MASK)); - HalDelayUs(1000); - do { - }while((HAL_MII_READ32(REG_MII_MIIA) & MIIA_FLAG) == 0); - - regVal = HAL_MII_READ32(REG_MII_MIIA) & 0xFFFF; - if(!(regVal & PHY_SW_RESET)) - break; - } - DBG_MII_INFO("PHY reset is completed...\n"); - #endif - /* Switch to Page 0 */ - ret = HalMiiRwPhyRegRtl8195a(1, 31, 0); - - if(((Speed == 1) && (Duplex == 1)) || ((Speed == 1) && (Duplex == 0)) || ((Speed == 0) && (Duplex == 1)) || ((Speed == 0) && (Duplex == 0))) - { - /* Disable Auto-negotiation */ - HAL_MII_WRITE32(REG_MII_MIIA, MIIA_FLAG | - ((PHY_ADDRESS << 26) & MIIA_PHY_ADDR_MASK) | - ((PHY_REG0_ADDR << 16) & MIIA_PHY_REG_ADDR_MASK) | - 0x0000); - HalDelayUs(1000); - do { - }while(HAL_MII_READ32(REG_MII_MIIA) & MIIA_FLAG); - - /* Manual settings */ - HAL_MII_WRITE32(REG_MII_MIIA, MIIA_FLAG | - ((PHY_ADDRESS << 26) & MIIA_PHY_ADDR_MASK) | - ((PHY_REG0_ADDR << 16) & MIIA_PHY_REG_ADDR_MASK) | - (((Speed << 13) & PHY_SPEED_LSB) | ((Duplex << 8) & PHY_DUPLEX_MODE))); - HalDelayUs(1000); - do { - }while(HAL_MII_READ32(REG_MII_MIIA) & MIIA_FLAG); - } - else - { - #if 1 - /* Reset PHY */ - HAL_MII_WRITE32(REG_MII_MIIA, MIIA_FLAG | - ((PHY_ADDRESS << 26) & MIIA_PHY_ADDR_MASK) | - ((PHY_REG0_ADDR << 16) & MIIA_PHY_REG_ADDR_MASK) | - PHY_SW_RESET); - HalDelayUs(1000); - do { - }while(HAL_MII_READ32(REG_MII_MIIA) & MIIA_FLAG); - - while(1) - { - /* Check reset status */ - HAL_MII_WRITE32(REG_MII_MIIA, ((PHY_ADDRESS << 26) & MIIA_PHY_ADDR_MASK) | ((PHY_REG0_ADDR << 16) & MIIA_PHY_REG_ADDR_MASK)); - HalDelayUs(1000); - do { - }while((HAL_MII_READ32(REG_MII_MIIA) & MIIA_FLAG) == 0); - - regVal = HAL_MII_READ32(REG_MII_MIIA) & 0xFFFF; - if(!(regVal & PHY_SW_RESET)) - break; - } - DBG_MII_INFO("PHY reset is completed...\n"); - #endif - while(1) - { - /* Check Auto-negotiation process status */ - HAL_MII_WRITE32(REG_MII_MIIA, ((PHY_ADDRESS << 26) & MIIA_PHY_ADDR_MASK) | ((PHY_REG1_ADDR << 16) & MIIA_PHY_REG_ADDR_MASK)); - HalDelayUs(1000); - do { - }while((HAL_MII_READ32(REG_MII_MIIA) & MIIA_FLAG) == 0); - - regVal = HAL_MII_READ32(REG_MII_MIIA) & 0xFFFF; - if(regVal & PHY_NWAY_COMPLETE) - break; - } - DBG_MII_INFO("Auto-negotiation is completed...\n"); - } - - /* Wait until link is up */ - while(1) - { - HAL_MII_WRITE32(REG_MII_MIIA, ((PHY_ADDRESS << 26) & MIIA_PHY_ADDR_MASK) | ((PHY_REG1_ADDR << 16) & MIIA_PHY_REG_ADDR_MASK)); - HalDelayUs(1000); - do { - }while((HAL_MII_READ32(REG_MII_MIIA) & MIIA_FLAG) == 0); - - HalDelayUs(1000); - - HAL_MII_WRITE32(REG_MII_MIIA, ((PHY_ADDRESS << 26) & MIIA_PHY_ADDR_MASK) | ((PHY_REG1_ADDR << 16) & MIIA_PHY_REG_ADDR_MASK)); - HalDelayUs(1000); - do { - }while((HAL_MII_READ32(REG_MII_MIIA) & MIIA_FLAG) == 0); - - regVal = HAL_MII_READ32(REG_MII_MIIA) & 0xFFFF; - if(regVal & PHY_LINK_STATUS) - break; - } - - /* Get link info. */ - HAL_MII_WRITE32(REG_MII_MIIA, ((PHY_ADDRESS << 26) & MIIA_PHY_ADDR_MASK) | ((PHY_REG0_ADDR << 16) & MIIA_PHY_REG_ADDR_MASK)); - HalDelayUs(1000); - do { - }while((HAL_MII_READ32(REG_MII_MIIA) & MIIA_FLAG) == 0); - - regVal = HAL_MII_READ32(REG_MII_MIIA) & 0xFFFF; - - if((!(regVal & PHY_SPEED_MSB)) && (regVal & PHY_SPEED_LSB)) - { - if(regVal & PHY_DUPLEX_MODE) - DBG_8195A("Link status: 100 Mb/s, Full duplex\n"); - else - DBG_8195A("Link status: 100 Mb/s, Half duplex\n"); - } - else if((!(regVal & PHY_SPEED_MSB)) && (!(regVal & PHY_SPEED_LSB))) - { - if(regVal & PHY_DUPLEX_MODE) - DBG_8195A("Link status: 10 Mb/s, Full duplex\n"); - else - DBG_8195A("Link status: 10 Mb/s, Half duplex\n"); - } - - HalDelayUs(4000000); -} -#else -void -HalMiiForceLinkRtl8195a( - IN int32_t Speed, - IN int32_t Duplex -) -{ - uint16_t ret; - - - /* Switch to Page 0 */ - ret = HalMiiRwPhyRegRtl8195a(1, 31, 0); - - if(((Speed == 1) && (Duplex == 1)) || ((Speed == 1) && (Duplex == 0)) || ((Speed == 0) && (Duplex == 1)) || ((Speed == 0) && (Duplex == 0))) - { - /* Disable Auto-negotiation */ - ret = HalMiiRwPhyRegRtl8195a(1, 0, 0x0); - /* Manual settings */ - ret = HalMiiRwPhyRegRtl8195a(1, 0, (((Speed << 13) & PHY_SPEED_LSB) | ((Duplex << 8) & PHY_DUPLEX_MODE))); - } - else - { - /* Restart Auto-negotiation */ - ret = HalMiiRwPhyRegRtl8195a(1, 0, PHY_NWAY_EN | PHY_RESTART_NWAY); - while(1) - { - /* Check the reset status */ - ret = HalMiiRwPhyRegRtl8195a(0, 0, 0); - if(!(ret & PHY_RESTART_NWAY)) - break; - } - - /* Check Auto-negotiation process status */ - while(1) - { - ret = HalMiiRwPhyRegRtl8195a(0, 1, 0); - if(ret & PHY_NWAY_COMPLETE) - break; - } - DBG_MII_INFO("Auto-negotiation is completed...\n"); - } - - /* Wait until link is up */ - while(1) - { - ret = HalMiiRwPhyRegRtl8195a(0, 1, 0); - HalDelayUs(1000); - ret = HalMiiRwPhyRegRtl8195a(0, 1, 0); - if(ret & PHY_LINK_STATUS) - break; - } - - /* Get link info. */ - ret = HalMiiRwPhyRegRtl8195a(0, 0, 0); - if((!(ret & PHY_SPEED_MSB)) && (ret & PHY_SPEED_LSB)) - { - if(ret & PHY_DUPLEX_MODE) - DBG_8195A("Link status: 100 Mb/s, Full duplex\n"); - else - DBG_8195A("Link status: 100 Mb/s, Half duplex\n"); - } - else if((!(ret & PHY_SPEED_MSB)) && (!(ret & PHY_SPEED_LSB))) - { - if(ret & PHY_DUPLEX_MODE) - DBG_8195A("Link status: 10 Mb/s, Full duplex\n"); - else - DBG_8195A("Link status: 10 Mb/s, Half duplex\n"); - } - - HalDelayUs(4000000); -} -#endif - - -#ifdef CONFIG_MII_VERIFY -void MiiIrqHandle (IN void *Data); - -void MiiIrqHandle (IN void *Data) { - uint32_t RegValue = HalMiiGmacGetInterruptStatusRtl8195a(); - extern volatile uint8_t isRxOK; - extern volatile uint8_t isTxOK; - extern volatile uint8_t RxIntCnt; - - -// DBG_8195A("ISR = 0x%08X\n", RegValue); - if(RegValue & GMAC_ISR_ROK) { - HalMiiGmacClearInterruptStatusRtl8195a(0x00410001); - isRxOK = 1; - RxIntCnt++; - } - - if(RegValue & GMAC_ISR_TOK_TI) { - HalMiiGmacClearInterruptStatusRtl8195a(0x00410040); - isTxOK = 1; - } -} - - -/** - * MII Initialize. - * - * MII Initialize. - * - * Initialization Steps: - * I. Rtl8195A Board Configurations: - * 1. MII Function Enable & AHB mux - * - * @return runtime status value. - */ -BOOL -HalMiiGmacInitRtl8195a( - IN void *Data - ) -{ - uint32_t RegValue; - - - /* 1. enable MII Pinmux & disable SDIO Host/Device mode Pinmux */ - RegValue = HAL_READ32(PERI_ON_BASE, REG_HCI_PINMUX_CTRL); - RegValue |= BIT24; - RegValue &= ~(BIT0 | BIT1); // Important! - HAL_WRITE32(PERI_ON_BASE, REG_HCI_PINMUX_CTRL, RegValue); - - /* 2. enable MII IP block (214, 12) */ - RegValue = HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN); - RegValue |= BIT12; - HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, RegValue); - - /* 3. Lexra2AHB Function Enable (304, 11) */ - RegValue = HAL_READ32(PERI_ON_BASE, REG_PESOC_SOC_CTRL); - RegValue |= BIT11; - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_SOC_CTRL, RegValue); - - /* 4. enable MII bus clock (240, 24|25) */ - RegValue = HAL_READ32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0); - RegValue |= (BIT24 | BIT25); - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0, RegValue); - - /* 5. */ - RegValue = HAL_READ32(SYSTEM_CTRL_BASE, 0x74) & 0xFFFFC7FF; - HAL_WRITE32(SYSTEM_CTRL_BASE, 0x74, (RegValue | 0x00003000)); - - /* 6. AHB mux: select MII (214, 13) */ - RegValue = HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN); - RegValue |= BIT13; - HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, RegValue); - - /* 7. Vendor Register Clock Enable (230, 6|7) */ - RegValue = HAL_READ32(PERI_ON_BASE, REG_PESOC_CLK_CTRL); - RegValue |= (BIT6 | BIT7); - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_CLK_CTRL, RegValue); - - /* 8. Enable GMAC Lexra Timeout (090, 16|17|18) */ - RegValue = HAL_READ32(VENDOR_REG_BASE, 0x0090); - RegValue |= (BIT16 | BIT17 | BIT18); - HAL_WRITE32(VENDOR_REG_BASE, 0x0090, RegValue); - - /* 9. Endian Swap Control (304, 12|13) */ - RegValue = HAL_READ32(PERI_ON_BASE, REG_PESOC_SOC_CTRL); - RegValue |= (BIT12 | BIT13); - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_SOC_CTRL, RegValue); - - return _TRUE; -} - - -BOOL -HalMiiGmacResetRtl8195a( - IN void *Data - ) -{ - HAL_MII_WRITE32(REG_RTL_MII_CR, (HAL_MII_READ32(REG_RTL_MII_CR) | BIT0)); - - return _TRUE; -} - - -BOOL -HalMiiGmacEnablePhyModeRtl8195a( - IN void *Data - ) -{ - return _TRUE; -} - - -uint32_t -HalMiiGmacXmitRtl8195a( - IN void *Data - ) -{ - return 0; -} - - -void -HalMiiGmacCleanTxRingRtl8195a( - IN void *Data - ) -{ -} - - -void -HalMiiGmacFillTxInfoRtl8195a( - IN void *Data - ) -{ - PMII_ADAPTER pMiiAdapter = (PMII_ADAPTER) Data; - PTX_INFO pTx_Info = pMiiAdapter->pTx_Info; - void* TxBuffer = pMiiAdapter->TxBuffer; - - - pTx_Info->opts1.dw = 0xBC8001FE; - /* pTx_Info->opts1.dw = 0xBC800080; // size: 128 */ - - pTx_Info->addr = (uint32_t)TxBuffer; - pTx_Info->opts2.dw = 0x0400279F; - pTx_Info->opts3.dw = 0x00000000; - /* pTx_Info->opts4.dw = 0x57800000; */ - pTx_Info->opts4.dw = 0x1FE00000; - - HAL_MII_WRITE32(REG_RTL_MII_TXFDP1, pTx_Info); -} - - -void -HalMiiGmacFillRxInfoRtl8195a( - IN void *Data - ) -{ - PMII_ADAPTER pMiiAdapter = (PMII_ADAPTER) Data; - PRX_INFO pRx_Info = pMiiAdapter->pRx_Info; - void* RxBuffer = pMiiAdapter->RxBuffer; - - - /* pRx_Info->opts1.dw = 0x80000200; //Data Length: 4095(FFF), 512(200) */ - pRx_Info->opts1.dw = 0x800001FC; //Data Length: 4095(FFF), 512(200) - /* pRx_Info->opts1.dw = 0x8000007F; */ - - pRx_Info->addr = (uint32_t)RxBuffer; - pRx_Info->opts2.dw = 0x00000000; - pRx_Info->opts3.dw = 0x00000000; - - HAL_MII_WRITE32(REG_RTL_MII_RXFDP1, pRx_Info); -} - - -void -HalMiiGmacTxRtl8195a( - IN void *Data - ) -{ - uint32_t RegValue; - - - RegValue = HAL_MII_READ32(REG_RTL_MII_IOCMD); - RegValue |= BIT_IOCMD_TXENABLE(1); - HAL_MII_WRITE32(REG_RTL_MII_IOCMD, RegValue); - - RegValue = HAL_MII_READ32(REG_RTL_MII_IOCMD); - RegValue |= BIT_IOCMD_FIRST_DMATX_ENABLE(1); - HAL_MII_WRITE32(REG_RTL_MII_IOCMD, RegValue); -} - - -void -HalMiiGmacRxRtl8195a( - IN void *Data - ) -{ - uint32_t RegValue; - - - RegValue = HAL_MII_READ32(REG_RTL_MII_TCR); - - HAL_MII_WRITE32(REG_RTL_MII_TCR, 0x00000D00); // loopback R2T mode - - RegValue = HAL_MII_READ32(REG_RTL_MII_RCR); - HAL_MII_WRITE32(REG_RTL_MII_RCR, 0x0000007F); - - RegValue = HAL_MII_READ32(REG_RTL_MII_ETNRXCPU1); - HAL_MII_WRITE32(REG_RTL_MII_ETNRXCPU1, 0x1F0A0F00); - - RegValue = HAL_MII_READ32(REG_RTL_MII_RX_PSE1); - HAL_MII_WRITE32(REG_RTL_MII_RX_PSE1, 0x00000022); - - RegValue = HAL_MII_READ32(REG_RTL_MII_IOCMD1); - RegValue |= BIT_IOCMD1_FIRST_DMARX_ENABLE(1); - HAL_MII_WRITE32(REG_RTL_MII_IOCMD1, RegValue); - - RegValue = HAL_MII_READ32(REG_RTL_MII_IOCMD); - RegValue |= BIT_IOCMD_RXENABLE(1); - HAL_MII_WRITE32(REG_RTL_MII_IOCMD, RegValue); -} - - -void -HalMiiGmacSetDefaultEthIoCmdRtl8195a( - IN void *Data - ) -{ - uint32_t RegValue; - - - RegValue = HAL_MII_READ32(REG_RTL_MII_IOCMD); - HAL_MII_WRITE32(REG_RTL_MII_IOCMD, CMD_CONFIG); - - RegValue = HAL_MII_READ32(REG_RTL_MII_IOCMD1); - HAL_MII_WRITE32(REG_RTL_MII_IOCMD1, CMD1_CONFIG); - - //2014-04-29 yclin (disable 0x40051438[27] r_en_precise_dma) { - RegValue = HAL_MII_READ32(REG_RTL_MII_IOCMD1); - RegValue = RegValue & 0xF7FFFFFF; - HAL_MII_WRITE32(REG_RTL_MII_IOCMD1, RegValue); - // } -} - - -void -HalMiiGmacInitIrqRtl8195a( - IN void *Data - ) -{ - IRQ_HANDLE MiiIrqHandle_Master; - PMII_ADAPTER pMiiAdapter = (PMII_ADAPTER) Data; - - - MiiIrqHandle_Master.Data = (uint32_t) (pMiiAdapter); - MiiIrqHandle_Master.IrqNum = GMAC_IRQ; - MiiIrqHandle_Master.IrqFun = (IRQ_FUN) MiiIrqHandle; - MiiIrqHandle_Master.Priority = 10; - InterruptRegister(&MiiIrqHandle_Master); - InterruptEn(&MiiIrqHandle_Master); -} - - -uint32_t -HalMiiGmacGetInterruptStatusRtl8195a( - void - ) -{ - uint32_t RegValue; - - - RegValue = HAL_MII_READ32(REG_RTL_MII_IMRISR); - - return RegValue; -} - - -void -HalMiiGmacClearInterruptStatusRtl8195a( - uint32_t IsrStatus - ) -{ - HAL_MII_WRITE32(REG_RTL_MII_IMRISR, IsrStatus); -} -#endif // #ifdef CONFIG_MII_VERIFY - - -#endif // #ifdef CONFIG_MII_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_mii.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_mii.h deleted file mode 100644 index 62b2296..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_mii.h +++ /dev/null @@ -1,675 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _RTL8195A_MII_H_ -#define _RTL8195A_MII_H_ - -#include "basic_types.h" -#include "hal_api.h" - - - -#define MII_TX_DESC_NO 8 -#define MII_RX_DESC_NO 8 -#define MII_BUF_SIZE 1536 -#define MAX_FRAME_SIZE 1514 - - -#define HAL_MII_READ32(addr) HAL_READ32(MII_REG_BASE, addr) -#define HAL_MII_WRITE32(addr, value) HAL_WRITE32(MII_REG_BASE, addr, value) -#define HAL_MII_READ16(addr) HAL_READ16(MII_REG_BASE, addr) -#define HAL_MII_WRITE16(addr, value) HAL_WRITE16(MII_REG_BASE, addr, value) -#define HAL_MII_READ8(addr) HAL_READ8(MII_REG_BASE, addr) -#define HAL_MII_WRITE8(addr, value) HAL_WRITE8(MII_REG_BASE, addr, value) - -/* =============== MAC Register Offset Definition =============== */ -#define REG_MII_IDR0 0x0000 -#define REG_MII_IDR4 0x0004 -#define REG_MII_COM 0x0038 -#define REG_MII_ISRIMR 0x003C -#define REG_MII_TC 0x0040 -#define REG_MII_RC 0x0044 -#define REG_MII_MS 0x0058 -#define REG_MII_MIIA 0x005C - -#define REG_MII_TXFDP1 0x1300 -#define REG_MII_RXFDP1 0x13F0 -#define REG_MII_ETNRXCPU1 0x1430 -#define REG_MII_IOCMD 0x1434 -#define REG_MII_IOCMD1 0x1438 - -/* =============== MAC Register BIT Definition =============== */ -/* Command Register (0x38) */ -#define COM_RST BIT0 -#define COM_RXCHKSUM BIT1 -#define COM_RXJUMBO BIT3 - -/* Interrupt Status & Interrupt Mask Register (0x3C & 0x3E) */ -#define ISR_RXOK BIT0 -#define ISR_RER_RUNT BIT2 -#define ISR_RER_OVF BIT4 -#define ISR_RDU BIT5 -#define ISR_TXOK BIT6 -#define ISR_TER BIT7 -#define ISR_LINKCHG BIT8 -#define ISR_TDU BIT9 -#define ISR_CLR_ALL 0x0000FFFF -#define IMR_RXOK BIT16 -#define IMR_RER_RUNT BIT18 -#define IMR_RER_OVF BIT20 -#define IMR_RDU BIT21 -#define IMR_TXOK BIT22 -#define IMR_TER BIT23 -#define IMR_LINKCHG BIT24 -#define IMR_TDU BIT25 - -/* Transmit Configuration Register (0x40) */ -#define TC_TX_NOPADDING BIT0 -#define TC_NORMAL_MODE 0 -#define TC_LBK_R2T 1 -#define TC_LBK_T2R 3 -#define TC_LBK_MASK 0x00000300 // bit[9:8] -#define TC_IFG_TIME 3 // 9.6 us for 10Mbps, 960 ns for 100Mbps -#define TC_IFG_MASK 0x00001C00 // bit[12:10] - -/* Receive Configuration Register (0x44) */ -#define RC_AAP BIT0 -#define RC_APM BIT1 -#define RC_AM BIT2 -#define RC_AB BIT3 -#define RC_AR BIT4 -#define RC_AER BIT5 - -/* Media Status Register (0x58) */ -#define MS_LINKB BIT26 - -/* MII Access Register (0x5C) */ -#define MIIA_FLAG BIT31 // 1: Write, 0: Read -#define MIIA_PHY_ADDR_MASK 0x7C000000 // bit[30:26] -#define MIIA_PHY_REG_ADDR_MASK 0x001F0000 // bit[20:16] - -/* IO Command Register (0x1434) */ -#define IOCMD_TXFN1ST BIT0 -#define IOCMD_TE BIT4 -#define IOCMD_RE BIT5 -#define IOCMD_RXFTH_1024 0 -#define IOCMD_RXFTH_128 1 -#define IOCMD_RXFTH_256 2 -#define IOCMD_RXFTH_512 3 -#define IOCMD_RXFTH_MASK 0x00001800 // bit[12:11] -#define IOCMD_TXFTH_128 0 -#define IOCMD_TXFTH_256 1 -#define IOCMD_TXFTH_512 2 -#define IOCMD_TXFTH_1024 3 -#define IOCMD_TXFTH_MASK 0x00180000 // bit[20:19] -#define IOCMD_SHORT_DES_FMT BIT30 - -/* IO Command1 Register (0x1438) */ -#define IOCMD1_RXRING1 BIT16 -#define IOCMD1_EN_1GB BIT24 -#define IOCMD1_DSC_FMT_EXTRA 0x3 // 011 -#define IOCMD1_DSCFMTEXTRA_MASK 0x70000000 // bit[30:28] - -/* =============== PHY (RTL8201F) Register Bit Definition =============== */ -#define PHY_ADDRESS 0x1 // 5 bits -#define PHY_REG0_ADDR 0x0 // 5 bits -#define PHY_REG1_ADDR 0x1 // 5 bits - -/* Register 0 */ -#define PHY_SPEED_MSB BIT6 -#define PHY_DUPLEX_MODE BIT8 -#define PHY_RESTART_NWAY BIT9 -#define PHY_NWAY_EN BIT12 -#define PHY_SPEED_LSB BIT13 -#define PHY_SW_RESET BIT15 - -/* Register 1 */ -#define PHY_LINK_STATUS BIT2 -#define PHY_NWAY_COMPLETE BIT5 - -/* =============== Tx/Rx Descriptor Bit Definition =============== */ -#define TX_DESC_OWN BIT31 -#define TX_DESC_EOR BIT30 -#define TX_DESC_FS BIT29 -#define TX_DESC_LS BIT28 -#define TX_DESC_CRC BIT23 -#define TX_DESC_DATA_LEN_MASK 0x1FFFF // bit[16:0] -#define TX_DESC_VLAN_INTACT 0 -#define TX_DESC_VLAN_INSERT 1 -#define TX_DESC_VLAN_REMOVE 2 -#define TX_DESC_VLAN_REMARKING 3 -#define TX_DESC_VLAN_ACT_MASK 0x06000000 -#define C_VLAN_HDR 0x8100279F -#define S_VLAN_HDR 0x88A8279F -#define TX_DESC_VLAN_TAG_MASK 0x0000FFFF - -#define RX_DESC_OWN BIT31 -#define RX_DESC_EOR BIT30 -#define RX_DESC_PKT_TYPE_MASK 0x001E0000 // bit[20:17] -#define RX_DESC_DATA_LEN_MASK 0xFFF // bit[11:0] - - -typedef struct _TX_DESC_FMT_ -{ - uint32_t dw1; // offset 0 - uint32_t addr; // offset 4 - uint32_t dw2; // offset 8 - uint32_t dw3; // offset 12 - uint32_t dw4; // offset 16 -}TX_DESC_FMT, *PTX_DESC_FMT; - -typedef struct _RX_DESC_FMT_ -{ - uint32_t dw1; // offset 0 - uint32_t addr; // offset 4 - uint32_t dw2; // offset 8 - uint32_t dw3; // offset 12 -}RX_DESC_FMT, *PRX_DESC_FMT; - - - -void -HalMiiInitIrqRtl8195a( - IN void *Data -); - -int32_t -HalMiiInitRtl8195a( - IN void -); - -void -HalMiiDeInitRtl8195a( - IN void -); - -int32_t -HalMiiWriteDataRtl8195a( - IN const char *Data, - IN uint32_t Size -); - -uint32_t -HalMiiSendPacketRtl8195a( - IN void -); - -uint32_t -HalMiiReceivePacketRtl8195a( - IN void -); - -uint32_t -HalMiiReadDataRtl8195a( - IN uint8_t *Data, - IN uint32_t Size -); - -void -HalMiiGetMacAddressRtl8195a( - IN uint8_t *Addr -); - -uint32_t -HalMiiGetLinkStatusRtl8195a( - IN void -); - -void -HalMiiForceLinkRtl8195a( - IN int32_t Speed, - IN int32_t Duplex -); - - - -#ifdef CONFIG_MII_VERIFY - -/* Ethernet Module registers */ -#define REG_RTL_MII_IDR0 0x0000 // Table 2 IDR0 (Offset 0000h-0003h, R/W) -#define REG_RTL_MII_IDR4 0x0004 // Table 3 IDR4 (Offset 0004h-0007h, R/W) -#define REG_RTL_MII_MAR0 0x0008 // Table 4 MAR0 (Offset 0008h-000bh, R/W) -#define REG_RTL_MII_MAR4 0x000C // Table 5 MAR4 (Offset 000ch-000fh, R/W) -#define REG_RTL_MII_CR 0x0038 // Table 21 Command Register (COM_REG, Offset 0038-003Bh, R/W) -#define REG_RTL_MII_IMRISR 0x003C // Table 22 + Table 23 -#define REG_RTL_MII_TCR 0x0040 // Table 24 Transmit Configuration Register (TC_REG, Offset 0040h-0043h, R/W) -#define REG_RTL_MII_RCR 0x0044 // Table 25 Receive Configuration Register (RC_REG, Offset 0044h-0047h, R/W) -#define REG_RTL_MII_CTCR 0x0048 // Table 26 CPU Tag Control Register (CPUTAG_REG, Offset 0048h-004bh, R/W) -#define REG_RTL_MII_CONFIG 0x004C // Table 27 Configuration Register (CONFIG_REG, Offset 004ch-004fh, R/W) -#define REG_RTL_MII_CTCR1 0x0050 // Table 28 CPUTAG1 Register (CPUTAG1_REG, Offset 0050h-0053h, R/W) -#define REG_RTL_MII_MSR 0x0058 // Table 29 Media Status Register (MS_reg: Offset 0058h ??005bh, R/W) -#define REG_RTL_MII_MIIAR 0x005C // Table 30 MII Access Register (MIIA_REG, Offset 005c-005fh, R/W) -#define REG_RTL_MII_VR 0x0064 // Table 32 VLAN Register (VLAN_REG, Offset 0064-0067h, R/W) -#define REG_RTL_MII_IMR0 0x00D0 // Table 50 IMR0_REG (IMR0_REG, Offset D0h-D3h) -#define REG_RTL_MII_IMR1 0x00D4 // Table 51 IMR1_REG (IMR1_REG, Offset d4h-d7h) -#define REG_RTL_MII_ISR1 0x00D8 // Table 52 ISR1 Register (ISR1_REG, Offset D8h-DBh) -#define REG_RTL_MII_INTR 0x00DC // Table 53 Interrupt routing register (INTR_REG, Offset DCh-DFh) -#define REG_RTL_MII_CCR 0x00E4 // Table xx Clock Control Register (CLKCTL_REG, Offset E4h-E7h) - -/* CPU Interface registers */ -#define REG_RTL_MII_TXFDP1 0x1300 // Table 55 TxFDP1 register (TXFDP1_REG, offset 1300h-1303h) -#define REG_RTL_MII_TXCDO1 0x1304 // Table 56 TxCDO1 register (TXCDO1_REG, offset 1304h-1305h) -#define REG_RTL_MII_TXFDP2 0x1310 // Table 57 TxFDP2 register (TXFDP2_REG, offset 1310h-1313h) -#define REG_RTL_MII_TXCDO2 0x1314 // Table 58 TxCDO2 register (TXCDO2_REG, offset 1314h-1315h) -#define REG_RTL_MII_TXFDP3 0x1320 // Table 59 TxFDP3 register (TXFDP3_REG, offset 1320h-1323h) -#define REG_RTL_MII_TXCDO3 0x1324 // Table 60 TxCDO3 register (TXCDO3_REG, offset 1324h-1325h) -#define REG_RTL_MII_TXFDP4 0x1330 // Table 61 TxFDP4 register (TXFDP4_REG, offset 1330h-1333h) -#define REG_RTL_MII_TXCDO4 0x1334 // Table 62 TxCDO4 register (TXCDO4_REG, offset 1334h-1335h) -#define REG_RTL_MII_TXFDP5 0x1340 // Table 63 TxFDP5 register (TXFDP5_REG, offset 1340h-1343h) -#define REG_RTL_MII_TXCDO5 0x1344 // Table 64 TxCDO5 register (TXCDO5_REG, offset 1344h-1345h) -#define REG_RTL_MII_RXFDP2 0x1390 // Table 66 RxFDP2 register (RXFDP#_REG, offset 1390h-1393h) -#define REG_RTL_MII_RXFDP1 0x13F0 // Table 71 RxFDP1 register (RXFDP1_REG, offset 13F0h-13F3h) -#define REG_RTL_MII_RXRS1 0x13F6 // Table 73 Rx Ring Size1 register (RX_RS1_REG, offset 13F6h-13F7h) - -#define REG_RTL_MII_RX_PSE1 0x142C // Table 77 Rx_Pse_Des_Thres_1_h (RX_PSE1_REG, Offset 142ch) -#define REG_RTL_MII_ETNRXCPU1 0x1430 // Table 79 EhtrntRxCPU_Des_Num1 (ETNRXCPU1_REG, Offset 1430h-1433h) -#define REG_RTL_MII_IOCMD 0x1434 // Table 80 Ethernet_IO_CMD (ETN_IO_CMD_REG, Offset 1434h-1437h) -#define REG_RTL_MII_IOCMD1 0x1438 // Table 81 Ethernet_IO_CMD1 (IO_CMD1_REG: Offset 1438h-143bh) - - -#define CMD_CONFIG 0x00081000 - -//2014-04-29 yclin (disable [27] r_en_precise_dma) -// #define CMD1_CONFIG 0x39000000 -#define CMD1_CONFIG 0x31000000 - -// #define MAX_RX_DESC_SIZE 6 -#define MAX_RX_DESC_SIZE 1 -#define MAX_TX_DESC_SIZE 5 - -// 0058h -#define BIT_SHIFT_MSR_FORCE_SPEED_SELECT 16 -#define BIT_MASK_MSR_FORCE_SPEED_SELECT 0x3 -#define BIT_MSR_FORCE_SPEED_SELECT(x)(((x) & BIT_MASK_MSR_FORCE_SPEED_SELECT) << BIT_SHIFT_MSR_FORCE_SPEED_SELECT) -#define BIT_INVC_MSR_FORCE_SPEED_SELECT (~(BIT_MASK_MSR_FORCE_SPEED_SELECT << BIT_SHIFT_MSR_FORCE_SPEED_SELECT)) - -#define BIT_SHIFT_MSR_FORCE_SPEED_MODE_ENABLE 10 -#define BIT_MASK_MSR_FORCE_SPEED_MODE_ENABLE 0x1 -#define BIT_MSR_FORCE_SPEED_MODE_ENABLE(x)(((x) & BIT_MASK_MSR_FORCE_SPEED_MODE_ENABLE) << BIT_SHIFT_MSR_FORCE_SPEED_MODE_ENABLE) -#define BIT_INVC_MSR_FORCE_SPEED_MODE_ENABLE (~(BIT_MASK_MSR_FORCE_SPEED_MODE_ENABLE << BIT_SHIFT_MSR_FORCE_SPEED_MODE_ENABLE)) - -// 1434h -#define BIT_SHIFT_IOCMD_RXENABLE 5 -#define BIT_MASK_IOCMD_RXENABLE 0x1 -#define BIT_IOCMD_RXENABLE(x)(((x) & BIT_MASK_IOCMD_RXENABLE) << BIT_SHIFT_IOCMD_RXENABLE) -#define BIT_INVC_IOCMD_RXENABLE (~(BIT_MASK_IOCMD_RXENABLE << BIT_SHIFT_IOCMD_RXENABLE)) - -#define BIT_SHIFT_IOCMD_TXENABLE 4 -#define BIT_MASK_IOCMD_TXENABLE 0x1 -#define BIT_IOCMD_TXENABLE(x)(((x) & BIT_MASK_IOCMD_TXENABLE) << BIT_SHIFT_IOCMD_TXENABLE) -#define BIT_INVC_IOCMD_TXENABLE (~(BIT_MASK_IOCMD_TXENABLE << BIT_SHIFT_IOCMD_TXENABLE)) - -#define BIT_SHIFT_IOCMD_FIRST_DMATX_ENABLE 0 -#define BIT_MASK_IOCMD_FIRST_DMATX_ENABLE 0x1 -#define BIT_IOCMD_FIRST_DMATX_ENABLE(x)(((x) & BIT_MASK_IOCMD_FIRST_DMATX_ENABLE) << BIT_SHIFT_IOCMD_FIRST_DMATX_ENABLE) -#define BIT_INVC_IOCMD_FIRST_DMATX_ENABLE (~(BIT_MASK_IOCMD_FIRST_DMATX_ENABLE << BIT_SHIFT_IOCMD_FIRST_DMATX_ENABLE)) - -// 1438h -#define BIT_SHIFT_IOCMD1_FIRST_DMARX_ENABLE 16 -#define BIT_MASK_IOCMD1_FIRST_DMARX_ENABLE 0x1 -#define BIT_IOCMD1_FIRST_DMARX_ENABLE(x)(((x) & BIT_MASK_IOCMD1_FIRST_DMARX_ENABLE) << BIT_SHIFT_IOCMD1_FIRST_DMARX_ENABLE) -#define BIT_INVC_IOCMD1_FIRST_DMARX_ENABLE (~(BIT_MASK_IOCMD1_FIRST_DMARX_ENABLE << BIT_SHIFT_IOCMD1_FIRST_DMARX_ENABLE)) - - -/** - * 1.4.1.7 Tx command descriptor used in RL6266 - * 5 dobule words - */ -typedef struct _TX_INFO_ { - union { - struct { - uint32_t own:1; //31 - uint32_t eor:1; //30 - uint32_t fs:1; //29 - uint32_t ls:1; //28 - uint32_t ipcs:1; //27 - uint32_t l4cs:1; //26 - uint32_t keep:1; //25 - uint32_t blu:1; //24 - uint32_t crc:1; //23 - uint32_t vsel:1; //22 - uint32_t dislrn:1; //21 - uint32_t cputag_ipcs:1; //20 - uint32_t cputag_l4cs:1; //19 - uint32_t cputag_psel:1; //18 - uint32_t rsvd:1; //17 - uint32_t data_length:17; //0~16 - } bit; - uint32_t dw; //double word - } opts1; - - uint32_t addr; - - union { - struct { - uint32_t cputag:1; //31 - uint32_t aspri:1; //30 - uint32_t cputag_pri:3; //27~29 - uint32_t tx_vlan_action:2; //25~26 - uint32_t tx_pppoe_action:2; //23~24 - uint32_t tx_pppoe_idx:3; //20~22 - uint32_t efid:1; //19 - uint32_t enhance_fid:3; //16~18 - uint32_t vidl:8; // 8~15 - uint32_t prio:3; // 5~7 - uint32_t cfi:1; // 4 - uint32_t vidh:4; // 0~3 - } bit; - uint32_t dw; //double word - } opts2; - - union { - struct { - uint32_t extspa:3; //29~31 - uint32_t tx_portmask:6; //23~28 - uint32_t tx_dst_stream_id:7; //16~22 - uint32_t rsvd:14; // 2~15 - uint32_t l34keep:1; // 1 - uint32_t ptp:1; // 0 - } bit; - uint32_t dw; //double word - } opts3; - - union { - struct { - uint32_t lgsen:1; //31 - uint32_t lgmss:11; //20~30 - uint32_t rsvd:20; // 0~19 - } bit; - uint32_t dw; //double word - } opts4; - -} TX_INFO, *PTX_INFO; - -typedef struct _RX_INFO_ { - union{ - struct{ - uint32_t own:1; //31 - uint32_t eor:1; //30 - uint32_t fs:1; //29 - uint32_t ls:1; //28 - uint32_t crcerr:1; //27 - uint32_t ipv4csf:1; //26 - uint32_t l4csf:1; //25 - uint32_t rcdf:1; //24 - uint32_t ipfrag:1; //23 - uint32_t pppoetag:1; //22 - uint32_t rwt:1; //21 - uint32_t pkttype:4; //20-17 - uint32_t l3routing:1; //16 - uint32_t origformat:1; //15 - uint32_t pctrl:1; //14 -#ifdef CONFIG_RG_JUMBO_FRAME - uint32_t data_length:14; //13~0 -#else - uint32_t rsvd:2; //13~12 - uint32_t data_length:12; //11~0 -#endif - }bit; - uint32_t dw; //double word - }opts1; - - uint32_t addr; - - union{ - struct{ - uint32_t cputag:1; //31 - uint32_t ptp_in_cpu_tag_exist:1; //30 - uint32_t svlan_tag_exist:1; //29 - uint32_t rsvd_2:2; //27~28 - uint32_t pon_stream_id:7; //20~26 - uint32_t rsvd_1:3; //17~19 - uint32_t ctagva:1; //16 - uint32_t cvlan_tag:16; //15~0 - }bit; - uint32_t dw; //double word - }opts2; - - union{ - struct{ - uint32_t src_port_num:5; //27~31 - uint32_t dst_port_mask:6; //21~26 - uint32_t reason:8; //13~20 - uint32_t internal_priority:3; //10~12 - uint32_t ext_port_ttl_1:5; //5~9 - uint32_t rsvd:5; //4~0 - }bit; - uint32_t dw; //double word - }opts3; -} RX_INFO, *PRX_INFO; - -/** - * GMAC_STATUS_REGS - */ -// TX/RX Descriptor Common -#define BIT_SHIFT_GMAC_DESCOWN 31 -#define BIT_MASK_GMAC_DESCOWN 0x1 -#define BIT_GMAC_DESCOWN(x)(((x) & BIT_MASK_GMAC_DESCOWN) << BIT_SHIFT_GMAC_DESCOWN) -#define BIT_INVC_GMAC_DESCOWN (~(BIT_MASK_GMAC_DESCOWN << BIT_SHIFT_GMAC_DESCOWN)) - -#define BIT_SHIFT_GMAC_RINGEND 30 -#define BIT_MASK_GMAC_RINGEND 0x1 -#define BIT_GMAC_RINGEND(x)(((x) & BIT_MASK_GMAC_RINGEND) << BIT_SHIFT_GMAC_RINGEND) -#define BIT_INVC_GMAC_RINGEND (~(BIT_MASK_GMAC_RINGEND << BIT_SHIFT_GMAC_RINGEND)) - -#define BIT_SHIFT_GMAC_FIRSTFRAG 29 -#define BIT_MASK_GMAC_FIRSTFRAG 0x1 -#define BIT_GMAC_FIRSTFRAG(x)(((x) & BIT_MASK_GMAC_FIRSTFRAG) << BIT_SHIFT_GMAC_FIRSTFRAG) -#define BIT_INVC_GMAC_FIRSTFRAG (~(BIT_MASK_GMAC_FIRSTFRAG << BIT_SHIFT_GMAC_FIRSTFRAG)) - -#define BIT_SHIFT_GMAC_LASTFRAG 28 -#define BIT_MASK_GMAC_LASTFRAG 0x1 -#define BIT_GMAC_LASTFRAG(x)(((x) & BIT_MASK_GMAC_LASTFRAG) << BIT_SHIFT_GMAC_LASTFRAG) -#define BIT_INVC_GMAC_LASTFRAG (~(BIT_MASK_GMAC_LASTFRAG << BIT_SHIFT_GMAC_LASTFRAG)) - -// TX Descriptor opts1 -#define BIT_SHIFT_GMAC_IPCS 27 -#define BIT_MASK_GMAC_IPCS 0x1 -#define BIT_GMAC_IPCS(x)(((x) & BIT_MASK_GMAC_IPCS) << BIT_SHIFT_GMAC_IPCS) -#define BIT_INVC_GMAC_IPCS (~(BIT_MASK_GMAC_IPCS << BIT_SHIFT_GMAC_IPCS)) - -#define BIT_SHIFT_GMAC_L4CS 26 -#define BIT_MASK_GMAC_L4CS 0x1 -#define BIT_GMAC_L4CS(x)(((x) & BIT_MASK_GMAC_L4CS) << BIT_SHIFT_GMAC_L4CS) -#define BIT_INVC_GMAC_L4CS (~(BIT_MASK_GMAC_L4CS << BIT_SHIFT_GMAC_L4CS)) - -#define BIT_SHIFT_GMAC_KEEP 25 -#define BIT_MASK_GMAC_KEEP 0x1 -#define BIT_GMAC_KEEP(x)(((x) & BIT_MASK_GMAC_KEEP) << BIT_SHIFT_GMAC_KEEP) -#define BIT_INVC_GMAC_KEEP (~(BIT_MASK_GMAC_KEEP << BIT_SHIFT_GMAC_KEEP)) - -#define BIT_SHIFT_GMAC_BLU 24 -#define BIT_MASK_GMAC_BLU 0x1 -#define BIT_GMAC_BLU(x)(((x) & BIT_MASK_GMAC_BLU) << BIT_SHIFT_GMAC_BLU) -#define BIT_INVC_GMAC_BLU (~(BIT_MASK_GMAC_BLU << BIT_SHIFT_GMAC_BLU)) - -#define BIT_SHIFT_GMAC_TXCRC 23 -#define BIT_MASK_GMAC_TXCRC 0x1 -#define BIT_GMAC_TXCRC(x)(((x) & BIT_MASK_GMAC_TXCRC) << BIT_SHIFT_GMAC_TXCRC) -#define BIT_INVC_GMAC_TXCRC (~(BIT_MASK_GMAC_TXCRC << BIT_SHIFT_GMAC_TXCRC)) - -#define BIT_SHIFT_GMAC_VSEL 22 -#define BIT_MASK_GMAC_VSEL 0x1 -#define BIT_GMAC_VSEL(x)(((x) & BIT_MASK_GMAC_VSEL) << BIT_SHIFT_GMAC_VSEL) -#define BIT_INVC_GMAC_VSEL (~(BIT_MASK_GMAC_VSEL << BIT_SHIFT_GMAC_VSEL)) - -#define BIT_SHIFT_GMAC_DISLRN 21 -#define BIT_MASK_GMAC_DISLRN 0x1 -#define BIT_GMAC_DISLRN(x)(((x) & BIT_MASK_GMAC_DISLRN) << BIT_SHIFT_GMAC_DISLRN) -#define BIT_INVC_GMAC_DISLRN (~(BIT_MASK_GMAC_DISLRN << BIT_SHIFT_GMAC_DISLRN)) - -#define BIT_SHIFT_GMAC_CPUTAG_IPCS 20 -#define BIT_MASK_GMAC_CPUTAG_IPCS 0x1 -#define BIT_GMAC_CPUTAG_IPCS(x)(((x) & BIT_MASK_GMAC_CPUTAG_IPCS) << BIT_SHIFT_GMAC_CPUTAG_IPCS) -#define BIT_INVC_GMAC_CPUTAG_IPCS (~(BIT_MASK_GMAC_CPUTAG_IPCS << BIT_SHIFT_GMAC_CPUTAG_IPCS)) - -#define BIT_SHIFT_GMAC_CPUTAG_L4CS 19 -#define BIT_MASK_GMAC_CPUTAG_L4CS 0x1 -#define BIT_GMAC_CPUTAG_L4CS(x)(((x) & BIT_MASK_GMAC_CPUTAG_L4CS) << BIT_SHIFT_GMAC_CPUTAG_L4CS) -#define BIT_INVC_GMAC_CPUTAG_L4CS (~(BIT_MASK_GMAC_CPUTAG_L4CS << BIT_SHIFT_GMAC_CPUTAG_L4CS)) - -#define BIT_SHIFT_GMAC_CPUTAG_PSEL 18 -#define BIT_MASK_GMAC_CPUTAG_PSEL 0x1 -#define BIT_GMAC_CPUTAG_PSEL(x)(((x) & BIT_MASK_GMAC_CPUTAG_PSEL) << BIT_SHIFT_GMAC_CPUTAG_PSEL) -#define BIT_INVC_GMAC_CPUTAG_PSEL (~(BIT_MASK_GMAC_CPUTAG_PSEL << BIT_SHIFT_GMAC_CPUTAG_PSEL)) - - -typedef struct _PHY_MODE_INFO_ { - uint8_t PhyAddress; - uint8_t PhyMode; - uint8_t PhyInterface; -} PHY_MODE_INFO, *PPHY_MODE_INFO; - -typedef enum _PHY_MODE_SWITCH_ { - PHY_MODE_DISABLE = 0, - PHY_MODE_ENABLE = 1 -} PHY_MODE_SWITCH, *PPHY_MODE_SWITCH; - -typedef enum _PHY_INTERFACE_SELECT_ { - PHY_INTERFACE_ONE_WORKS = 0, - PHY_INTERFACE_ZERO_WORKS = 1 -} PHY_INTERFACE_SELECT, *PPHY_INTERFACE_SELECT; - -typedef enum _GMAC_MSR_FORCE_SPEED_ { - FORCE_SPD_100M = 0, - FORCE_SPD_10M = 1, - FORCE_SPD_GIGA = 2, - NO_FORCE_SPD = 3 -}GMAC_MSR_FORCE_SPEED, *PGMAC_MSR_FORCE_SPEED; - -typedef enum _GMAC_INTERRUPT_MASK_ { - GMAC_IMR_ROK = BIT16, - GMAC_IMR_CNT_WRAP = BIT17, - GMAC_IMR_RER_RUNT = BIT18, - // BIT19 Reserved - GMAC_IMR_RER_OVF = BIT20, - GMAC_IMR_RDU = BIT21, - GMAC_IMR_TOK_TI = BIT22, - GMAC_IMR_TER = BIT23, - GMAC_IMR_LINKCHG = BIT24, - GMAC_IMR_TDU = BIT25, - GMAC_IMR_SWINT = BIT26, - GMAC_IMR_RDU2 = BIT27, - GMAC_IMR_RDU3 = BIT28, - GMAC_IMR_RDU4 = BIT29, - GMAC_IMR_RDU5 = BIT30, - GMAC_IMR_RDU6 = BIT31, -} GMAC_INTERRUPT_MASK, *PGMAC_INTERRUPT_MASK; - -typedef enum _GMAC_INTERRUPT_STATUS_ { - GMAC_ISR_ROK = BIT0, - GMAC_ISR_CNT_WRAP = BIT1, - GMAC_ISR_RER_RUNT = BIT2, - // BIT3 Reserved - GMAC_ISR_RER_OVF = BIT4, - GMAC_ISR_RDU = BIT5, - GMAC_ISR_TOK_TI = BIT6, - GMAC_ISR_TER = BIT7, - GMAC_ISR_LINKCHG = BIT8, - GMAC_ISR_TDU = BIT9, - GMAC_ISR_SWINT = BIT10, - GMAC_ISR_RDU2 = BIT11, - GMAC_ISR_RDU3 = BIT12, - GMAC_ISR_RDU4 = BIT13, - GMAC_ISR_RDU5 = BIT14, - GMAC_ISR_RDU6 = BIT15, -} GMAC_INTERRUPT_STATUS, *PGMAC_INTERRUPT_STATUS; - -typedef enum _GMAC_TX_VLAN_ACTION_ { - INTACT = 0, - INSERT_VLAN_HDR = 1, - REMOVE_VLAN_HDR = 2, - REMARKING_VID = 3 -}GMAC_TX_VLAN_ACTION, *PGMAC_TX_VLAN_ACTION; - -typedef enum _GMAC_RX_PACKET_TYPE_ { - TYPE_ETHERNET = 0, - TYPE_IPV4 = 1, - TYPE_IPV4_PPTP = 2, - TYPE_IPV4_ICMP = 3, - TYPE_IPV4_IGMP = 4, - TYPE_IPV4_TCP = 5, - TYPE_IPV4_UDP = 6, - TYPE_IPV6 = 7, - TYPE_ICMPV6 = 8, - TYPE_IPV6_TCP = 9, - TYPE_IPV6_UDP = 10 -}GMAC_RX_PACKET_TYPE, *PGMAC_RX_PACKET_TYPE; - - - -BOOL -HalMiiGmacInitRtl8195a( - IN void *Data - ); - -BOOL -HalMiiGmacResetRtl8195a( - IN void *Data - ); - -BOOL -HalMiiGmacEnablePhyModeRtl8195a( - IN void *Data - ); - -uint32_t -HalMiiGmacXmitRtl8195a( - IN void *Data - ); - -void -HalMiiGmacCleanTxRingRtl8195a( - IN void *Data - ); - -void -HalMiiGmacFillTxInfoRtl8195a( - IN void *Data - ); - -void -HalMiiGmacFillRxInfoRtl8195a( - IN void *Data - ); - -void -HalMiiGmacTxRtl8195a( - IN void *Data - ); - -void -HalMiiGmacRxRtl8195a( - IN void *Data - ); - -void -HalMiiGmacSetDefaultEthIoCmdRtl8195a( - IN void *Data - ); - -void -HalMiiGmacInitIrqRtl8195a( - IN void *Data - ); - -uint32_t -HalMiiGmacGetInterruptStatusRtl8195a( - void - ); - -void -HalMiiGmacClearInterruptStatusRtl8195a( - uint32_t IsrStatus - ); -#endif // #ifdef CONFIG_MII_VERIFY - -#endif // #ifndef _RTL8195A_MII_H_ - - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_nfc.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_nfc.c deleted file mode 100644 index 4464e2e..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_nfc.c +++ /dev/null @@ -1,2023 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "rtl8195a.h" - -#ifdef CONFIG_NFC_EN -//#include "autoconf.h" -//#include "diag.h" -//#include "hal_peri_on.h" -#include "rtl8195a_nfc.h" -#include "osdep_api.h" -//#include "hal_nfc.h" -//#include "rtl8195a_peri_on.h" -//#include "rtl8195a_sys_on.h" -//#include "hal_platform.h" - -#ifdef CONFIG_NFC_NORMAL - -extern void nfc_tagwrite_callback(PNFC_ADAPTER pNFCAdp, uint32_t page, uint32_t wr_data); -extern void nfc_event_callback(PNFC_ADAPTER pNFCAdp, uint32_t event); -extern void nfc_tagread_callback(PNFC_ADAPTER pNFCAdp, uint32_t page); -extern void nfc_cache_read_callback(PNFC_ADAPTER pNFCAdp, uint32_t start_pg, uint32_t *pbuf); - -extern void SpicLoadInitParaFromClockRtl8195A(uint8_t CpuClkMode, uint8_t BaudRate, PSPIC_INIT_PARA pSpicInitPara); -extern void SpicSectorEraseFlashRtl8195A(uint32_t Address); -extern void SpicWaitBusyDoneRtl8195A(void); -extern void SpicWaitWipDoneRtl8195A(SPIC_INIT_PARA SpicInitPara); - - -void WriteA2NMailbox(IN void *pNFCAdapte); -void A2NWriteInQueue(IN void *pNFCAdapte, IN void *pBuff); -void A2NWriteDeQueue(IN void *pNFCAdapte); -void N2AReadTag(IN void *pNFCAdapte, IN uint8_t N2ARPage); -uint32_t HalNFCRead32(IN uint32_t Addr); -void HalNFCWrite32(IN uint32_t Addr, IN uint32_t Data); -void N2AWriteTag(IN void *pNFCAdapte, IN uint8_t N2AWPage); -void N2AReadCatch(IN void *pNFCAdapte, IN uint8_t N2ACatchRPage); -void NFCReaderPresent(IN void *pNFCAdapte, IN uint8_t State); -void N2AMailboxState(IN void *pNFCAdapte, IN uint8_t State, IN uint8_t Seq); -void NFC25MClkReq(IN void *pNFCAdapte, IN uint8_t OP, IN uint8_t Seq); - -//v1.3 150824 -uint8_t NFCFWIMEM[]={ -0x01, 0x10, 0x00, 0x65, 0x00, 0x68, 0xA8, 0xB9, 0x00, 0x65, 0x40, 0xF0, 0x20, 0x69, 0x89, 0xB9, -0x00, 0x65, 0x13, 0xF7, 0x20, 0x6A, 0x80, 0xF0, 0x08, 0x4A, 0x7E, 0xF0, 0x2D, 0x68, 0x7E, 0xF0, -0x0C, 0x48, 0x00, 0xDA, 0x00, 0x65, 0x00, 0x65, 0x00, 0x65, 0x00, 0x65, 0x13, 0xF7, 0x20, 0x6A, -0x08, 0x4A, 0x00, 0x9A, 0x00, 0x65, 0x00, 0xF0, 0x20, 0x69, 0xFF, 0xF4, 0x1F, 0x49, 0x2C, 0xE8, -0x00, 0xDA, 0x00, 0x65, 0x13, 0xF7, 0x20, 0x6A, 0x80, 0xF0, 0x04, 0x4A, 0x00, 0x68, 0x00, 0xDA, -0x00, 0x65, 0x13, 0xF7, 0x20, 0x6A, 0x80, 0xF0, 0x00, 0x4A, 0x02, 0xF0, 0x20, 0x68, 0xFF, 0x48, -0x00, 0xDA, 0x00, 0x65, 0x10, 0xF0, 0x20, 0x68, 0x00, 0xF4, 0x01, 0x48, 0x00, 0xE8, 0x00, 0x65, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xDF, 0xF7, 0x04, 0x63, 0x0E, 0xD2, 0x0D, 0xD3, 0x0C, 0xD0, 0x0B, 0xD1, 0x0A, 0xD4, 0x09, 0xD5, -0x08, 0xD6, 0x07, 0xD7, 0x58, 0x67, 0x06, 0xD2, 0x05, 0x62, 0x8D, 0xB8, 0xAE, 0xB8, 0xC8, 0xB8, -0xEC, 0xB8, 0x00, 0x18, 0x28, 0x01, 0x00, 0x65, 0x00, 0x6A, 0xAA, 0xB9, 0x06, 0x92, 0x1A, 0x65, -0x05, 0x92, 0xFA, 0x65, 0x0E, 0x92, 0x0D, 0x93, 0x0C, 0x90, 0x0B, 0x91, 0x0A, 0x94, 0x09, 0x95, -0x08, 0x96, 0x07, 0x97, 0x20, 0xF0, 0x1C, 0x63, 0x00, 0xBA, 0x00, 0x65, 0x00, 0xF0, 0x20, 0x6A, -0xFF, 0x4A, 0x60, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x13, 0xF7, 0x20, 0x6A, 0x50, 0x4A, 0x00, 0x9A, 0x00, 0x65, 0x10, 0xF0, 0x20, 0x69, 0xFF, 0x49, -0x2C, 0xE8, 0x00, 0xDA, 0x00, 0x65, 0x34, 0xB8, 0x00, 0xF4, 0x00, 0x68, 0x2D, 0xE8, 0x90, 0xB9, -0x00, 0x65, 0x00, 0x65, 0x00, 0x65, 0x14, 0xB8, 0x00, 0xF4, 0x00, 0x69, 0x2C, 0xE8, 0xFB, 0x20, -0x00, 0x65, 0x10, 0xF0, 0x20, 0x68, 0x20, 0xF4, 0x1F, 0x48, 0x00, 0xE8, 0x00, 0x65, 0x10, 0xF0, -0x30, 0x6A, 0x00, 0xF3, 0x00, 0x4A, 0x10, 0xF0, 0x30, 0x6B, 0xE0, 0xF6, 0x10, 0x4B, 0x00, 0x68, -0x00, 0xDA, 0x01, 0xDA, 0x02, 0xDA, 0x03, 0xDA, 0x10, 0x4A, 0x63, 0xEA, 0xF9, 0x61, 0x00, 0x65, -0x10, 0xF0, 0x30, 0x68, 0x20, 0xF3, 0x00, 0x48, 0xB8, 0x65, 0x00, 0x65, 0x10, 0xF0, 0x30, 0x68, -0x20, 0xF6, 0x08, 0x48, 0xB8, 0x65, 0x00, 0x68, 0xA8, 0xB9, 0x0C, 0xB8, 0x00, 0x65, 0x1F, 0xF7, -0x01, 0x69, 0x2D, 0xE8, 0xDF, 0xF7, 0x20, 0x69, 0xFF, 0x49, 0x2C, 0xE8, 0x88, 0xB9, 0x00, 0x65, -0x10, 0xF0, 0x20, 0x68, 0x40, 0xF5, 0x05, 0x48, 0x00, 0xE8, 0x00, 0x65, 0x20, 0xBA, 0x00, 0x65, -0xF9, 0x63, 0x0D, 0x62, 0x0C, 0xD1, 0x04, 0x01, 0x8A, 0xD9, 0xAB, 0xD9, 0xCC, 0xD9, 0xED, 0xD9, -0x6A, 0x99, 0x1F, 0xF7, 0x00, 0x6A, 0x6C, 0xEA, 0x43, 0x32, 0x45, 0xD9, 0x6D, 0x99, 0x1F, 0xF7, -0x00, 0x6A, 0x6C, 0xEA, 0x43, 0x32, 0x44, 0xD9, 0x6A, 0x99, 0x7C, 0x6A, 0x6C, 0xEA, 0x4B, 0x32, -0x43, 0xD9, 0x64, 0x99, 0x45, 0x99, 0x83, 0x67, 0xA2, 0x67, 0x00, 0x18, 0x3A, 0x01, 0xB9, 0x65, -0x09, 0x97, 0x08, 0x91, 0x05, 0x63, 0x00, 0xEF, 0xFB, 0x63, 0x09, 0x62, 0x08, 0xD1, 0x04, 0x01, -0x86, 0xD9, 0xA7, 0xD9, 0x66, 0x99, 0x47, 0x99, 0x6C, 0xEA, 0x43, 0xD9, 0x63, 0x99, 0x80, 0x6A, -0x6C, 0xEA, 0x02, 0x22, 0x00, 0x18, 0x5B, 0x03, 0x63, 0x99, 0x40, 0x6A, 0x6C, 0xEA, 0x02, 0x22, -0x00, 0x18, 0x20, 0x04, 0x63, 0x99, 0x20, 0x6A, 0x6C, 0xEA, 0x02, 0x22, 0x00, 0x18, 0x27, 0x04, -0x63, 0x99, 0x10, 0x6A, 0x6C, 0xEA, 0x02, 0x22, 0x00, 0x18, 0x94, 0x03, 0x63, 0x99, 0x08, 0x6A, -0x6C, 0xEA, 0x02, 0x22, 0x00, 0x18, 0xA8, 0x04, 0xB9, 0x65, 0x05, 0x97, 0x04, 0x91, 0x03, 0x63, -0x00, 0xEF, 0x00, 0x65, 0xFA, 0x63, 0x0B, 0x62, 0x0A, 0xD1, 0x04, 0x01, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xA0, 0xF0, 0x68, 0x9A, 0x63, 0xD9, 0xA0, 0xF0, 0x08, 0x4A, 0x42, 0xAA, -0x48, 0xC9, 0x20, 0x6A, 0x49, 0xC1, 0x00, 0x6A, 0x48, 0xC1, 0x00, 0x18, 0x6B, 0x01, 0x60, 0x6C, -0x00, 0x18, 0x01, 0x03, 0x00, 0x18, 0x87, 0x01, 0x00, 0x18, 0x77, 0x01, 0x00, 0x18, 0x9B, 0x01, -0x00, 0x18, 0x63, 0x01, 0x0A, 0x6C, 0x00, 0x18, 0x84, 0x07, 0xFF, 0x17, 0xFF, 0x63, 0x01, 0xD1, -0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF0, 0x50, 0x9A, 0x00, 0x6B, -0x60, 0xCA, 0xB9, 0x65, 0x01, 0x91, 0x01, 0x63, 0x20, 0xE8, 0x00, 0x65, 0xFF, 0x63, 0x01, 0xD1, -0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF0, 0x54, 0x9A, 0x00, 0x6B, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF0, 0x58, 0x9A, 0x00, 0xF4, -0x00, 0x6B, 0x60, 0xDA, 0xB9, 0x65, 0x01, 0x91, 0x01, 0x63, 0x20, 0xE8, 0xFF, 0x63, 0x01, 0xD1, -0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x12, 0xF0, 0x01, 0x6B, 0x40, 0xF6, -0x6C, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF0, 0x5C, 0x9A, 0x04, 0x6B, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF0, 0x40, 0x9A, 0x04, 0x6B, -0x60, 0xDA, 0xB9, 0x65, 0x01, 0x91, 0x01, 0x63, 0x20, 0xE8, 0x00, 0x65, 0xFF, 0x63, 0x01, 0xD1, -0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF0, 0x44, 0x9A, 0x01, 0x6B, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF0, 0x48, 0x9A, 0x07, 0x6B, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF0, 0x4C, 0x9A, 0xFF, 0x6B, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF0, 0x50, 0x9A, 0x00, 0x6B, -0x60, 0xDA, 0xB9, 0x65, 0x01, 0x91, 0x01, 0x63, 0x20, 0xE8, 0x00, 0x65, 0xFB, 0x63, 0x09, 0x62, -0x08, 0xD1, 0x04, 0x01, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x50, 0x9A, -0x01, 0x6B, 0x6E, 0xEA, 0x04, 0x2A, 0x06, 0x6C, 0x01, 0x6D, 0x00, 0x18, 0xDC, 0x0E, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF0, 0x54, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, -0x60, 0x33, 0xC0, 0xF0, 0x78, 0x9B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xC0, 0xF0, 0x5C, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xE0, 0xF0, 0x40, 0x9A, 0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xC0, 0xF0, 0x5C, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xE0, 0xF0, 0x44, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0x7E, 0x6A, 0x6D, 0xEA, -0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, 0x44, 0x9A, 0x62, 0x99, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, 0x48, 0x9A, 0x40, 0x9A, -0x42, 0xD9, 0x62, 0x99, 0x00, 0xF2, 0x01, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, 0x62, 0x99, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, 0x4C, 0x9A, 0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, 0x48, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x62, 0x99, -0x00, 0xF4, 0x03, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, 0x42, 0xD9, 0x62, 0x99, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, 0x50, 0x9A, 0x6C, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, 0x48, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x62, 0x99, 0x00, 0xF4, -0x02, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, 0x62, 0x99, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xE0, 0xF0, 0x54, 0x9A, 0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xE0, 0xF0, 0x48, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x00, 0x6A, 0x41, 0xD9, 0x27, 0x10, 0x00, 0x6A, -0x40, 0xD9, 0x03, 0x10, 0x40, 0x99, 0x01, 0x4A, 0x40, 0xD9, 0x40, 0x99, 0x64, 0x5A, 0x58, 0x67, -0xF9, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, 0x58, 0x9A, 0x40, 0x9A, -0x42, 0xD9, 0x62, 0x99, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, 0x5C, 0x9A, -0x6C, 0xEA, 0x42, 0xD9, 0x62, 0x99, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, -0x5C, 0x9A, 0x6E, 0xEA, 0x08, 0x22, 0x41, 0x99, 0x01, 0x4A, 0x41, 0xD9, 0x41, 0x99, 0x0A, 0x5A, -0x58, 0x67, 0xD5, 0x2A, 0x01, 0x10, 0x00, 0x65, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xC0, 0xF0, 0x5C, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x00, 0xF1, 0x40, 0x9A, 0x6C, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xC0, 0xF0, 0x5C, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xC0, 0xF0, 0x54, 0x9A, 0xE4, 0xF1, 0x17, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x00, 0xF1, 0x44, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, -0x00, 0xF1, 0x68, 0x9B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF0, -0x5C, 0x9A, 0x24, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF1, -0x4C, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0x02, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, 0x42, 0xD9, -0x62, 0x99, 0x0A, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x00, 0xF1, 0x4C, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x00, 0xF1, 0x50, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0x40, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF1, 0x50, 0x9A, 0x62, 0x99, 0x60, 0xDA, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF1, 0x54, 0x9A, 0x40, 0x9A, 0x42, 0xD9, -0x62, 0x99, 0x0C, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x00, 0xF1, 0x54, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x00, 0xF1, 0x58, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x00, 0xF1, 0x40, 0x9A, 0x6C, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x00, 0xF1, 0x58, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x00, 0xF1, 0x5C, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x20, 0xF1, 0x40, 0x9A, 0x6C, 0xEA, 0x42, 0xD9, 0x62, 0x99, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF1, 0x44, 0x9A, 0x6D, 0xEA, 0x42, 0xD9, 0x62, 0x99, -0x04, 0xF0, 0x01, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, 0x42, 0xD9, 0x62, 0x99, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x20, 0xF1, 0x48, 0x9A, 0x6D, 0xEA, 0x42, 0xD9, 0x62, 0x99, 0xE0, 0xF3, -0x11, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, 0x42, 0xD9, 0x62, 0x99, 0x30, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF1, 0x5C, 0x9A, 0x62, 0x99, 0x60, 0xDA, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF1, 0x4C, 0x9A, 0x40, 0x9A, 0x42, 0xD9, -0x62, 0x99, 0x20, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, 0x42, 0xD9, 0x62, 0x99, 0x10, 0x6A, 0x6D, 0xEA, -0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF1, 0x4C, 0x9A, 0x62, 0x99, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, 0x44, 0x9A, 0x40, 0x9A, -0x42, 0xD9, 0x62, 0x99, 0x80, 0xF7, 0x00, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, 0x44, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x62, 0x99, 0x01, 0xF0, -0x00, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, -0x44, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x62, 0x99, 0x01, 0xF0, 0x01, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, -0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, 0x44, 0x9A, 0x62, 0x99, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF1, 0x50, 0x9A, 0x40, 0x9A, -0x42, 0xD9, 0x62, 0x99, 0x10, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, 0x42, 0xD9, 0x62, 0x99, 0x03, 0x6A, -0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF1, 0x50, 0x9A, -0x62, 0x99, 0x60, 0xDA, 0x62, 0x99, 0x10, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x20, 0xF1, 0x50, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x62, 0x99, 0x11, 0x6A, -0x4B, 0xEA, 0x6C, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF1, -0x50, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF1, -0x54, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0xE0, 0xF1, 0x11, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, -0x42, 0xD9, 0x62, 0x99, 0x70, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x20, 0xF1, 0x54, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x20, 0xF1, 0x58, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x20, 0xF1, 0x5C, 0x9A, 0x6C, 0xEA, 0x42, 0xD9, 0x62, 0x99, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF1, 0x40, 0x9A, 0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF1, 0x58, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF1, 0x44, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, -0x10, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, 0x42, 0xD9, 0x62, 0x99, 0x01, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF1, 0x44, 0x9A, 0x62, 0x99, 0x60, 0xDA, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF1, 0x48, 0x9A, 0x40, 0x9A, 0x42, 0xD9, -0x62, 0x99, 0xE0, 0xF1, 0x01, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, 0x42, 0xD9, 0x62, 0x99, 0xA0, 0x6A, -0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF1, 0x48, 0x9A, -0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, 0x44, 0x9A, -0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0x7F, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, 0x42, 0xD9, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, 0x44, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, 0x44, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, -0x10, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF0, -0x44, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF1, -0x4C, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0x07, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF1, 0x4C, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x50, 0x9A, 0x01, 0x6B, 0x6E, 0xEA, 0x04, 0x2A, -0x06, 0x6C, 0x00, 0x6D, 0x00, 0x18, 0xDC, 0x0E, 0xB9, 0x65, 0x05, 0x97, 0x04, 0x91, 0x03, 0x63, -0x00, 0xEF, 0x00, 0x65, 0xFC, 0x63, 0x07, 0xD1, 0x3D, 0x67, 0x44, 0x67, 0x20, 0xF0, 0x40, 0xC1, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF1, 0x50, 0x9A, 0x00, 0x6B, 0x60, 0xDA, -0x82, 0x6A, 0x44, 0xD9, 0x64, 0x99, 0xFF, 0x6A, 0x6C, 0xEA, 0x42, 0xD9, 0x64, 0x99, 0x1F, 0xF7, -0x00, 0x6A, 0x6C, 0xEA, 0x42, 0x32, 0x43, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x40, 0xF1, 0x54, 0x9A, 0x80, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x40, 0xF1, 0x58, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x40, 0xF1, 0x50, 0x9A, 0x63, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x40, 0xF1, 0x54, 0x9A, 0x03, 0x6B, 0x60, 0xDA, 0xB9, 0x65, 0x07, 0x91, 0x04, 0x63, 0x20, 0xE8, -0xFE, 0x63, 0x03, 0xD1, 0x3D, 0x67, 0x00, 0x6A, 0x41, 0xC1, 0x26, 0x10, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x40, 0xF1, 0x5C, 0x9A, 0x40, 0x9A, 0x62, 0x67, 0x01, 0x6A, 0x4C, 0xEB, -0xFF, 0x6A, 0x6C, 0xEA, 0x0C, 0x22, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF1, -0x58, 0x9A, 0x40, 0x9A, 0x00, 0xF6, 0x40, 0x32, 0x00, 0xF6, 0x43, 0x32, 0x13, 0x10, 0x00, 0x6A, -0x40, 0xC1, 0x03, 0x10, 0x40, 0xA1, 0x01, 0x4A, 0x40, 0xC1, 0x40, 0xA1, 0x0A, 0x5A, 0x58, 0x67, -0xF9, 0x2A, 0x41, 0xA1, 0x01, 0x4A, 0x41, 0xC1, 0x41, 0xA1, 0x64, 0x5A, 0x58, 0x67, 0xD6, 0x2A, -0x01, 0x6A, 0x4B, 0xEA, 0xB9, 0x65, 0x03, 0x91, 0x02, 0x63, 0x20, 0xE8, 0xFE, 0x63, 0x03, 0xD1, -0x3D, 0x67, 0x44, 0x67, 0x50, 0xC1, 0x00, 0x6A, 0x41, 0xC9, 0x2C, 0x10, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x40, 0xF1, 0x5C, 0x9A, 0x60, 0x9A, 0x20, 0x6A, 0x6C, 0xEA, 0x14, 0x22, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF1, 0x58, 0x9A, 0x70, 0xA1, 0x60, 0xDA, -0x00, 0x6A, 0x40, 0xC9, 0x03, 0x10, 0x40, 0xA9, 0x01, 0x4A, 0x40, 0xC9, 0x40, 0x89, 0x00, 0x52, -0x58, 0x67, 0xF9, 0x22, 0x00, 0x6A, 0x15, 0x10, 0x00, 0x6A, 0x40, 0xC9, 0x03, 0x10, 0x40, 0xA9, -0x01, 0x4A, 0x40, 0xC9, 0x40, 0xA9, 0xE0, 0xF3, 0x08, 0x5A, 0x58, 0x67, 0xF8, 0x2A, 0x41, 0xA9, -0x01, 0x4A, 0x41, 0xC9, 0x41, 0xA9, 0x02, 0xF0, 0x00, 0x5A, 0x58, 0x67, 0xCF, 0x2A, 0x01, 0x6A, -0x4B, 0xEA, 0xB9, 0x65, 0x03, 0x91, 0x02, 0x63, 0x20, 0xE8, 0x00, 0x65, 0xFD, 0x63, 0x05, 0xD1, -0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF1, 0x40, 0x9A, 0x40, 0x9A, -0x42, 0xD9, 0x42, 0x99, 0x01, 0x6B, 0x6E, 0xEA, 0x20, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xA0, 0xF0, 0x5C, 0x9A, 0x04, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x60, 0xF1, 0x44, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x12, 0xF0, 0x01, 0x6B, 0x40, 0xF6, 0x6C, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xA0, 0xF0, 0x5C, 0x9A, 0x03, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x60, 0xF1, 0x48, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x42, 0x99, 0x01, 0x6B, 0x6E, 0xEA, -0x33, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF1, 0x4C, 0x9A, 0x40, 0x9A, -0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF1, 0x50, 0x9A, 0x40, 0x9A, -0x40, 0xD9, 0x60, 0x99, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF1, 0x54, 0x9A, -0x6D, 0xEA, 0x40, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF1, 0x50, 0x9A, -0x60, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x44, 0x9A, -0x2E, 0xF5, 0x10, 0x5A, 0x58, 0x67, 0x08, 0x22, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xC0, 0xF0, 0x40, 0x9A, 0x03, 0x6B, 0x60, 0xDA, 0xB9, 0x65, 0x05, 0x91, 0x03, 0x63, 0x20, 0xE8, -0xF8, 0x63, 0x0F, 0x62, 0x0E, 0xD1, 0x04, 0x01, 0x00, 0xF3, 0x00, 0x6A, 0x49, 0xD9, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF0, 0x04, 0x4A, 0x40, 0xD9, 0x47, 0x41, 0x1D, 0x4A, -0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF0, 0x58, 0x9A, 0x40, 0x9A, -0x47, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF0, 0x58, 0x9A, 0x00, 0x6B, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF1, 0x58, 0x9A, 0x40, 0x9A, -0x48, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF1, 0x5C, 0x9A, 0x40, 0x9A, -0x46, 0xD9, 0x66, 0x99, 0x80, 0x6A, 0x6D, 0xEA, 0x46, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x60, 0xF1, 0x5C, 0x9A, 0x66, 0x99, 0x60, 0xDA, 0x68, 0x99, 0x01, 0xF0, 0x00, 0x6A, -0x6C, 0xEA, 0x1B, 0x22, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF1, 0x40, 0x9A, -0x88, 0x99, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x20, 0xF1, 0x68, 0x9B, 0x6D, 0xE4, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF1, 0x44, 0x9A, 0x40, 0x9A, -0x46, 0xD9, 0x66, 0x99, 0x0F, 0x6A, 0x6C, 0xEA, 0x44, 0xD9, 0x68, 0x99, 0x00, 0xF4, 0x00, 0x6A, -0x6C, 0xEA, 0x80, 0xF0, 0x1F, 0x22, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF1, -0x44, 0x9A, 0x40, 0x9A, 0x46, 0xD9, 0x66, 0x99, 0x40, 0x6A, 0x6C, 0xEA, 0x80, 0xF0, 0x0D, 0x2A, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF1, 0x48, 0x9A, 0x40, 0x9A, 0x49, 0xD9, -0x42, 0x99, 0x60, 0xA2, 0x20, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, 0x46, 0xC1, 0x46, 0xA1, 0x56, 0x32, -0x46, 0xC1, 0x42, 0x99, 0x02, 0x4A, 0x40, 0xA2, 0x45, 0xC1, 0x46, 0xA1, 0x7B, 0x22, 0x42, 0x99, -0x02, 0x4A, 0x40, 0xA2, 0x45, 0xC1, 0x42, 0x99, 0x40, 0xA2, 0x62, 0x67, 0x1F, 0x6A, 0x6C, 0xEA, -0x02, 0x6B, 0x4E, 0xEB, 0x2F, 0x23, 0x03, 0x52, 0x78, 0x67, 0x02, 0x23, 0x20, 0x22, 0x6A, 0x10, -0x03, 0x6B, 0x4E, 0xEB, 0x31, 0x23, 0x04, 0x6B, 0x6E, 0xEA, 0x64, 0x2A, 0x42, 0x99, 0x02, 0x4A, -0x40, 0xA2, 0x07, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0x6B, 0xC0, 0xF6, -0x6C, 0xC2, 0x42, 0x99, 0x02, 0x4A, 0x40, 0xA2, 0x01, 0x6B, 0x6E, 0xEA, 0x50, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x01, 0x6B, 0xC0, 0xF6, 0x6C, 0xC2, 0x4B, 0x10, 0x42, 0x99, -0x01, 0x4A, 0x40, 0xA2, 0x62, 0x67, 0x45, 0xA1, 0x00, 0x6C, 0xA3, 0x67, 0xC2, 0x67, 0x00, 0x18, -0xDC, 0x0E, 0x40, 0x10, 0x42, 0x99, 0x01, 0x4A, 0x40, 0xA2, 0x62, 0x67, 0x45, 0xA1, 0x02, 0x6C, -0xA3, 0x67, 0xC2, 0x67, 0x00, 0x18, 0xDC, 0x0E, 0x46, 0xA1, 0x05, 0x6B, 0x6E, 0xEA, 0x1C, 0x2A, -0x45, 0xA1, 0x26, 0x5A, 0x58, 0x67, 0x2D, 0x22, 0x00, 0x6A, 0x45, 0xD9, 0x11, 0x10, 0x65, 0xA1, -0x45, 0x99, 0x49, 0xE3, 0x48, 0x32, 0x60, 0x99, 0x49, 0xE3, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, -0x60, 0x33, 0x80, 0xF1, 0x68, 0x9B, 0x60, 0x9B, 0x60, 0xDA, 0x45, 0x99, 0x01, 0x4A, 0x45, 0xD9, -0x45, 0x99, 0x04, 0x5A, 0x58, 0x67, 0xEB, 0x2A, 0x46, 0xA1, 0x02, 0x6B, 0x6E, 0xEA, 0x12, 0x2A, -0x45, 0xA1, 0x48, 0x32, 0x60, 0x99, 0x49, 0xE3, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, -0x80, 0xF1, 0x68, 0x9B, 0x60, 0x9B, 0x60, 0xDA, 0x05, 0x10, 0x00, 0x65, 0x03, 0x10, 0x00, 0x65, -0x01, 0x10, 0x00, 0x65, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF1, 0x58, 0x9A, -0x68, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF0, 0x58, 0x9A, -0x67, 0x99, 0x60, 0xDA, 0xB9, 0x65, 0x0B, 0x97, 0x0A, 0x91, 0x06, 0x63, 0x00, 0xEF, 0x00, 0x65, -0xFF, 0x63, 0x01, 0xD1, 0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF1, -0x4C, 0x9A, 0x40, 0x9A, 0xB9, 0x65, 0x01, 0x91, 0x01, 0x63, 0x20, 0xE8, 0xFD, 0x63, 0x05, 0xD1, -0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF1, 0x50, 0x9A, 0x40, 0x9A, -0x42, 0xD9, 0x62, 0x99, 0x02, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, 0x42, 0xD9, 0x00, 0x6A, 0x41, 0xD9, -0x03, 0x10, 0x41, 0x99, 0x01, 0x4A, 0x41, 0xD9, 0x41, 0x99, 0x05, 0x5A, 0x58, 0x67, 0xF9, 0x2A, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF1, 0x50, 0x9A, 0x62, 0x99, 0x60, 0xDA, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF0, 0x54, 0x9A, 0x40, 0x9A, 0x40, 0xD9, -0x00, 0x6A, 0x41, 0xD9, 0x03, 0x10, 0x41, 0x99, 0x01, 0x4A, 0x41, 0xD9, 0x41, 0x99, 0x05, 0x5A, -0x58, 0x67, 0xF9, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF0, 0x54, 0x9A, -0x80, 0x99, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x80, 0xF1, 0x74, 0x9B, 0x8C, 0xEB, -0x60, 0xDA, 0x00, 0x6A, 0x41, 0xD9, 0x03, 0x10, 0x41, 0x99, 0x01, 0x4A, 0x41, 0xD9, 0x41, 0x99, -0x05, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF1, -0x58, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x00, 0x6A, 0x41, 0xD9, 0x03, 0x10, 0x41, 0x99, 0x01, 0x4A, -0x41, 0xD9, 0x41, 0x99, 0x05, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x80, 0xF1, 0x5C, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x02, 0x6B, 0x64, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x04, 0xF0, 0x00, 0x6B, 0xC0, 0xF6, 0x74, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xA0, 0xF0, 0x50, 0x9A, 0x00, 0x6B, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x54, 0xA2, 0x61, 0x42, 0xFF, 0x6A, 0x4C, 0xEB, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x74, 0xC2, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF1, 0x58, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x00, 0x6A, 0x41, 0xD9, -0x03, 0x10, 0x41, 0x99, 0x01, 0x4A, 0x41, 0xD9, 0x41, 0x99, 0x32, 0x5A, 0x58, 0x67, 0xF9, 0x2A, -0x62, 0x99, 0x01, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x80, 0xF1, 0x58, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x00, 0x6A, 0x41, 0xD9, 0x03, 0x10, 0x41, 0x99, -0x01, 0x4A, 0x41, 0xD9, 0x41, 0x99, 0x32, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x00, 0xF1, 0x4C, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x00, 0x6A, 0x41, 0xD9, -0x03, 0x10, 0x41, 0x99, 0x01, 0x4A, 0x41, 0xD9, 0x41, 0x99, 0x05, 0x5A, 0x58, 0x67, 0xF9, 0x2A, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF1, 0x4C, 0x9A, 0x82, 0x99, 0x02, 0x6B, -0x6B, 0xEB, 0x8C, 0xEB, 0x60, 0xDA, 0x00, 0x6A, 0x41, 0xD9, 0x03, 0x10, 0x41, 0x99, 0x01, 0x4A, -0x41, 0xD9, 0x41, 0x99, 0x05, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x80, 0xF1, 0x50, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x00, 0x6A, 0x41, 0xD9, 0x03, 0x10, -0x41, 0x99, 0x01, 0x4A, 0x41, 0xD9, 0x41, 0x99, 0x05, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x62, 0x99, -0x01, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF1, -0x50, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0xB9, 0x65, 0x05, 0x91, 0x03, 0x63, 0x20, 0xE8, 0x00, 0x65, -0xFD, 0x63, 0x05, 0xD1, 0x3D, 0x67, 0x00, 0x6A, 0x4E, 0xC1, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xA0, 0xF1, 0x40, 0x9A, 0x40, 0xAA, 0x46, 0xC9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xA0, 0xF1, 0x40, 0x9A, 0x00, 0x6B, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xA0, 0xF1, 0x44, 0x9A, 0x40, 0xAA, 0x45, 0xC9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xA0, 0xF1, 0x44, 0x9A, 0x65, 0xA9, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x60, 0xF6, 0x0C, 0x4A, 0x50, 0xA2, 0x61, 0x42, 0xFF, 0x6A, 0x4C, 0xEB, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x70, 0xC2, 0x65, 0xA9, 0x08, 0x6A, 0x6C, 0xEA, -0x43, 0x22, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x12, 0xF0, 0x04, 0x6B, 0x60, 0xF6, -0x6C, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF1, 0x48, 0x9A, 0x01, 0x6B, -0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x52, 0xA2, -0x61, 0x42, 0xFF, 0x6A, 0x4C, 0xEB, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, -0x0C, 0x4A, 0x72, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x48, 0x9A, -0x01, 0x6B, 0x6E, 0xEA, 0x08, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF1, -0x4C, 0x9A, 0x0B, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, -0x48, 0x9A, 0x02, 0x6B, 0x6E, 0xEA, 0x08, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x00, 0xF1, 0x54, 0x9A, 0x00, 0x6B, 0x60, 0xDA, 0x65, 0xA9, 0x01, 0x6A, 0x4C, 0xEB, 0xFF, 0x6A, -0x6C, 0xEA, 0xE0, 0xF0, 0x0B, 0x22, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, -0x0C, 0x4A, 0x51, 0xA2, 0x61, 0x42, 0xFF, 0x6A, 0x4C, 0xEB, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x71, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xA0, 0xF1, 0x4C, 0x9A, 0x60, 0xAA, 0xFF, 0xF7, 0x1F, 0x6A, 0x4C, 0xEB, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x63, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x43, 0xAA, 0x62, 0x67, 0x1F, 0xF7, 0x00, 0x6A, 0x6C, 0xEA, -0x27, 0x22, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x43, 0xAA, -0x42, 0x33, 0xFF, 0xF7, 0x1F, 0x6A, 0x4C, 0xEB, 0xFF, 0x6A, 0x4C, 0xEB, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x69, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x43, 0xAA, 0xFF, 0x6B, 0x6C, 0xEA, 0x10, 0xF0, 0x10, 0x6B, -0x60, 0x33, 0x60, 0x33, 0x60, 0xF6, 0x0C, 0x4B, 0x43, 0xCB, 0x01, 0x6A, 0x4E, 0xC1, 0x0A, 0x10, -0x00, 0x6A, 0x4E, 0xC1, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, -0x00, 0x6B, 0x69, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, -0x43, 0xAA, 0x0B, 0x5A, 0x58, 0x67, 0x3F, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xA0, 0xF1, 0x48, 0x9A, 0x01, 0x6B, 0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x80, 0xF1, 0x40, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x60, 0xF6, 0x0C, 0x4B, -0x63, 0xAB, 0x83, 0x67, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0xA0, 0xF1, 0x70, 0x9B, -0x6D, 0xE4, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, -0x00, 0x6B, 0x63, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x01, 0x6B, 0x6B, 0xEB, -0x80, 0xF6, 0x68, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, 0x00, 0x6B, -0xC0, 0xF6, 0x74, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF0, 0x50, 0x9A, -0x01, 0x6B, 0x60, 0xCA, 0x43, 0x10, 0x00, 0x6A, 0x4F, 0xC1, 0x0F, 0x10, 0x4F, 0xA1, 0x48, 0x32, -0x61, 0x99, 0x49, 0xE3, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0xA0, 0xF1, 0x74, 0x9B, -0x60, 0x9B, 0x60, 0xDA, 0x4F, 0xA1, 0x01, 0x4A, 0x4F, 0xC1, 0x8F, 0xA1, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x43, 0xAA, 0x62, 0x67, 0x4E, 0xA1, 0x49, 0xE3, -0x03, 0x4A, 0x00, 0x52, 0x78, 0x67, 0x01, 0x23, 0x03, 0x4A, 0x4B, 0x32, 0x42, 0xEC, 0x58, 0x67, -0xDD, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x68, 0xA2, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x73, 0xC2, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xA0, 0xF1, 0x48, 0x9A, 0x01, 0x6B, 0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x12, 0xF0, 0x03, 0x6B, 0x60, 0xF6, 0x6C, 0xDA, 0x65, 0xA9, 0x02, 0x6A, -0x6C, 0xEA, 0x11, 0x22, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, -0x4C, 0xA2, 0x61, 0x42, 0xFF, 0x6A, 0x4C, 0xEB, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x60, 0xF6, 0x0C, 0x4A, 0x6C, 0xC2, 0x65, 0xA9, 0x04, 0x6A, 0x6C, 0xEA, 0x11, 0x22, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x4D, 0xA2, 0x61, 0x42, 0xFF, 0x6A, -0x4C, 0xEB, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x6D, 0xC2, -0x65, 0xA9, 0x00, 0xF2, 0x00, 0x6A, 0x6C, 0xEA, 0x11, 0x22, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x4F, 0xA2, 0x61, 0x42, 0xFF, 0x6A, 0x4C, 0xEB, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x6F, 0xC2, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xA0, 0xF1, 0x40, 0x9A, 0x66, 0xA9, 0x60, 0xCA, 0xB9, 0x65, 0x05, 0x91, -0x03, 0x63, 0x20, 0xE8, 0xFF, 0x63, 0x01, 0xD1, 0x3D, 0x67, 0x82, 0xD9, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xA0, 0xF1, 0x58, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xA0, 0xF0, 0x5C, 0x9A, 0x03, 0x6B, 0x60, 0xDA, 0xB9, 0x65, 0x01, 0x91, -0x01, 0x63, 0x20, 0xE8, 0xFF, 0x63, 0x01, 0xD1, 0x3D, 0x67, 0x82, 0xD9, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xA0, 0xF1, 0x5C, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xC0, 0xF0, 0x40, 0x9A, 0x03, 0x6B, 0x60, 0xDA, 0xB9, 0x65, 0x01, 0x91, -0x01, 0x63, 0x20, 0xE8, 0xFF, 0x63, 0x01, 0xD1, 0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xA0, 0xF0, 0x5C, 0x9A, 0x04, 0x6B, 0x60, 0xDA, 0xB9, 0x65, 0x01, 0x91, 0x01, 0x63, -0x20, 0xE8, 0x00, 0x65, 0xFF, 0x63, 0x01, 0xD1, 0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xC0, 0xF0, 0x40, 0x9A, 0x04, 0x6B, 0x60, 0xDA, 0xB9, 0x65, 0x01, 0x91, 0x01, 0x63, -0x20, 0xE8, 0x00, 0x65, 0xFE, 0x63, 0x03, 0xD1, 0x3D, 0x67, 0x84, 0xD9, 0xA5, 0xD9, 0xC6, 0xD9, -0x64, 0x99, 0x46, 0x99, 0x49, 0xE3, 0x40, 0xD9, 0x0A, 0x10, 0x44, 0x99, 0x65, 0x99, 0x60, 0xA3, -0x60, 0xC2, 0x44, 0x99, 0x01, 0x4A, 0x44, 0xD9, 0x45, 0x99, 0x01, 0x4A, 0x45, 0xD9, 0x65, 0x99, -0x40, 0x99, 0x43, 0xEB, 0x58, 0x67, 0xF1, 0x2A, 0x44, 0x99, 0xB9, 0x65, 0x03, 0x91, 0x02, 0x63, -0x20, 0xE8, 0x00, 0x65, 0xFE, 0x63, 0x03, 0xD1, 0x3D, 0x67, 0x84, 0xD9, 0xA5, 0xD9, 0x64, 0x99, -0x45, 0x99, 0x49, 0xE3, 0x40, 0xD9, 0x06, 0x10, 0x44, 0x99, 0x00, 0x6B, 0x60, 0xC2, 0x44, 0x99, -0x01, 0x4A, 0x44, 0xD9, 0x64, 0x99, 0x40, 0x99, 0x43, 0xEB, 0x58, 0x67, 0xF5, 0x2A, 0x44, 0x99, -0xB9, 0x65, 0x03, 0x91, 0x02, 0x63, 0x20, 0xE8, 0xFE, 0x63, 0x03, 0xD1, 0x3D, 0x67, 0x84, 0xD9, -0xA5, 0xD9, 0xC6, 0xD9, 0x00, 0x6A, 0x40, 0xD9, 0x0F, 0x10, 0x64, 0x99, 0x40, 0x99, 0x49, 0xE3, -0x60, 0xA2, 0x85, 0x99, 0x40, 0x99, 0x49, 0xE4, 0x40, 0xA2, 0x6E, 0xEA, 0x02, 0x22, 0x00, 0x6A, -0x09, 0x10, 0x40, 0x99, 0x01, 0x4A, 0x40, 0xD9, 0x60, 0x99, 0x46, 0x99, 0x43, 0xEB, 0x58, 0x67, -0xEC, 0x2A, 0x01, 0x6A, 0xB9, 0x65, 0x03, 0x91, 0x02, 0x63, 0x20, 0xE8, 0xFF, 0x63, 0x01, 0xD1, -0x3D, 0x67, 0x44, 0x67, 0xA3, 0xD9, 0x48, 0xC1, 0x43, 0x99, 0x60, 0xAA, 0xFF, 0x6A, 0x4C, 0xEB, -0x48, 0xA1, 0x6E, 0xEA, 0x48, 0xC1, 0x48, 0xA1, 0x50, 0x32, 0x00, 0xF6, 0x40, 0x33, 0x00, 0xF6, -0x63, 0x33, 0x48, 0x81, 0x6E, 0xEA, 0x00, 0xF6, 0x40, 0x32, 0x00, 0xF6, 0x43, 0x32, 0x48, 0xC1, -0x43, 0x99, 0x40, 0xAA, 0x42, 0x33, 0xFF, 0xF7, 0x1F, 0x6A, 0x6C, 0xEA, 0x40, 0x33, 0x60, 0x33, -0x63, 0x33, 0x63, 0x33, 0x48, 0xA1, 0x40, 0x32, 0x40, 0x32, 0x40, 0x32, 0x43, 0x32, 0x43, 0x32, -0x6E, 0xEA, 0x40, 0x33, 0x60, 0x33, 0x63, 0x33, 0x63, 0x33, 0x48, 0xA1, 0x4C, 0x32, 0x40, 0x32, -0x40, 0x32, 0x43, 0x32, 0x43, 0x32, 0x6E, 0xEA, 0x40, 0x33, 0x60, 0x33, 0x63, 0x33, 0x63, 0x33, -0x48, 0xA1, 0x52, 0x34, 0xFF, 0x6A, 0x8C, 0xEA, 0x6E, 0xEA, 0x40, 0x33, 0x60, 0x33, 0x63, 0x33, -0x63, 0x33, 0xFF, 0xF7, 0x1F, 0x6A, 0x4C, 0xEB, 0x43, 0x99, 0x60, 0xCA, 0x43, 0x99, 0x40, 0xAA, -0xB9, 0x65, 0x01, 0x91, 0x01, 0x63, 0x20, 0xE8, 0xFC, 0x63, 0x07, 0x62, 0x06, 0xD1, 0x04, 0x01, -0x84, 0xD9, 0xA5, 0xD9, 0xC6, 0xD9, 0xE7, 0xD9, 0x44, 0x99, 0x01, 0x6B, 0x4E, 0xEB, 0x04, 0x23, -0x02, 0x6B, 0x6E, 0xEA, 0x05, 0x22, 0x32, 0x10, 0x6C, 0xF3, 0x03, 0x6A, 0x41, 0xC9, 0x04, 0x10, -0x01, 0x6A, 0x4B, 0xEA, 0x41, 0xC9, 0x00, 0x65, 0x45, 0x99, 0x40, 0x82, 0x40, 0xC1, 0x45, 0x99, -0x01, 0x4A, 0x45, 0xD9, 0x60, 0xA1, 0x42, 0x41, 0x83, 0x67, 0xA2, 0x67, 0x00, 0x18, 0xDF, 0x05, -0x46, 0x99, 0xFF, 0x4A, 0x46, 0xD9, 0x46, 0x99, 0xEF, 0x2A, 0x44, 0x99, 0x02, 0x6B, 0x6E, 0xEA, -0x06, 0x2A, 0x41, 0xA9, 0x4F, 0xEB, 0xFF, 0xF7, 0x1F, 0x6A, 0x6C, 0xEA, 0x41, 0xC9, 0x61, 0xA9, -0xFF, 0x6A, 0x4C, 0xEB, 0x47, 0x99, 0x60, 0xC2, 0x41, 0xA9, 0x42, 0x33, 0xFF, 0xF7, 0x1F, 0x6A, -0x4C, 0xEB, 0xFF, 0x6A, 0x4C, 0xEB, 0x48, 0x99, 0x60, 0xC2, 0x00, 0x65, 0xB9, 0x65, 0x03, 0x97, -0x02, 0x91, 0x02, 0x63, 0x00, 0xEF, 0x00, 0x65, 0xFB, 0x63, 0x09, 0x62, 0x08, 0xD1, 0x06, 0x01, -0x84, 0xD9, 0x65, 0x67, 0x46, 0x67, 0x74, 0xC1, 0x58, 0xC1, 0x58, 0xA1, 0x01, 0x6B, 0x6E, 0xEA, -0x0B, 0x2A, 0xA4, 0x99, 0x74, 0xA1, 0x43, 0x41, 0x84, 0x41, 0x04, 0xD4, 0x01, 0x6C, 0xC3, 0x67, -0xE2, 0x67, 0x00, 0x18, 0x06, 0x06, 0x0A, 0x10, 0xA4, 0x99, 0x74, 0xA1, 0x43, 0x41, 0x84, 0x41, -0x04, 0xD4, 0x02, 0x6C, 0xC3, 0x67, 0xE2, 0x67, 0x00, 0x18, 0x06, 0x06, 0x43, 0xA1, 0x40, 0xC9, -0x40, 0xA9, 0x40, 0x32, 0x40, 0xC9, 0x44, 0xA1, 0x62, 0x67, 0x40, 0xA9, 0x6D, 0xEA, 0x40, 0xC9, -0x40, 0xA9, 0xB9, 0x65, 0x03, 0x97, 0x02, 0x91, 0x02, 0x63, 0x00, 0xEF, 0xFD, 0x63, 0x05, 0xD1, -0x3D, 0x67, 0xB9, 0x65, 0x05, 0x91, 0x03, 0x63, 0x20, 0xE8, 0x00, 0x65, 0xFF, 0x63, 0x01, 0xD1, -0x3D, 0x67, 0xB9, 0x65, 0x01, 0x91, 0x01, 0x63, 0x20, 0xE8, 0x00, 0x65, 0xFF, 0x63, 0x01, 0xD1, -0x3D, 0x67, 0xB9, 0x65, 0x01, 0x91, 0x01, 0x63, 0x20, 0xE8, 0x00, 0x65, 0xFD, 0x63, 0x05, 0xD1, -0x3D, 0x67, 0x86, 0xD9, 0x46, 0x99, 0x40, 0xD9, 0x40, 0x99, 0x77, 0xF0, 0x24, 0x6B, 0x4D, 0xE3, -0x40, 0x9B, 0x62, 0xD9, 0x41, 0xD9, 0x41, 0x99, 0xB9, 0x65, 0x05, 0x91, 0x03, 0x63, 0x20, 0xE8, -0xFD, 0x63, 0x05, 0xD1, 0x3D, 0x67, 0x86, 0xD9, 0xA7, 0xD9, 0x46, 0x99, 0x40, 0xD9, 0x47, 0x99, -0x41, 0xD9, 0x41, 0x99, 0x60, 0x99, 0x77, 0xF0, 0x24, 0x6A, 0x69, 0xE2, 0x40, 0xDA, 0x42, 0xD9, -0xB9, 0x65, 0x05, 0x91, 0x03, 0x63, 0x20, 0xE8, 0xFF, 0x63, 0x01, 0xD1, 0x3D, 0x67, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x44, 0x9A, 0x61, 0x42, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x64, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xC0, 0xF1, 0x40, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x00, 0xF3, 0x64, 0x9B, -0x60, 0xDA, 0xB9, 0x65, 0x01, 0x91, 0x01, 0x63, 0x20, 0xE8, 0x00, 0x65, 0xFE, 0x63, 0x03, 0xD1, -0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x02, 0x6B, -0x64, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x00, 0x6B, -0x61, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x40, 0x9A, 0x00, 0x6B, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x44, 0x9A, 0x08, 0x6B, -0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x48, 0x9A, 0xA7, 0xF7, -0x07, 0x6B, 0x6B, 0xEB, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, -0x4C, 0x9A, 0x00, 0xF4, 0x05, 0x6B, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x04, 0xF0, 0x00, 0x6B, 0xC0, 0xF6, 0x74, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x00, 0xF0, 0x64, 0xA2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, -0x6C, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF0, 0x04, 0x4A, 0x61, 0xA2, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x6D, 0xC2, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF0, 0x04, 0x4A, 0x62, 0xA2, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x6E, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x00, 0xF0, 0x04, 0x4A, 0x63, 0xA2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xC0, 0xF6, 0x14, 0x4A, 0x6F, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF0, -0x04, 0x4A, 0x64, 0xA2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, -0x70, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF0, 0x04, 0x4A, 0x65, 0xA2, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x71, 0xC2, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF0, 0x04, 0x4A, 0x66, 0xA2, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x72, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x00, 0xF0, 0x04, 0x4A, 0x67, 0xA2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xC0, 0xF6, 0x14, 0x4A, 0x73, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF0, -0x04, 0x4A, 0x68, 0xA2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, -0x74, 0xC2, 0xB9, 0x65, 0x03, 0x91, 0x02, 0x63, 0x20, 0xE8, 0x00, 0x65, 0xFE, 0x63, 0x03, 0xD1, -0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x12, 0xF0, 0x06, 0x6B, 0x60, 0xF6, -0x6C, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x50, 0x9A, 0x01, 0x6B, -0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x4C, 0x9A, 0x00, 0xF4, -0x05, 0x6B, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x48, 0x9A, -0x87, 0xF7, 0x07, 0x6B, 0x6B, 0xEB, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x20, 0xF2, 0x4C, 0x9A, 0x00, 0xF4, 0x05, 0x6B, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x20, 0xF2, 0x54, 0x9A, 0x08, 0x6B, 0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x00, 0xF3, 0x48, 0x9A, 0x01, 0x6B, 0x6E, 0xEA, 0x08, 0x2A, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x58, 0x9A, 0x1B, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x48, 0x9A, 0x02, 0x6B, 0x6E, 0xEA, 0x10, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x5C, 0x9A, 0x02, 0x6B, 0x60, 0xDA, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x58, 0x9A, 0x0B, 0x6B, 0x60, 0xDA, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x40, 0x9A, 0x02, 0x6B, 0x60, 0xCA, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x44, 0x9A, 0x44, 0x6B, 0x60, 0xDA, 0xB9, 0x65, -0x03, 0x91, 0x02, 0x63, 0x20, 0xE8, 0x00, 0x65, 0xFE, 0x63, 0x03, 0xD1, 0x3D, 0x67, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x12, 0xF0, 0x06, 0x6B, 0x60, 0xF6, 0x6C, 0xDA, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x50, 0x9A, 0x01, 0x6B, 0x60, 0xC2, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x4C, 0x9A, 0x00, 0xF4, 0x05, 0x6B, 0x60, 0xCA, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x48, 0x9A, 0x87, 0xF7, 0x07, 0x6B, -0x6B, 0xEB, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x4C, 0x9A, -0x00, 0xF4, 0x05, 0x6B, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, -0x54, 0x9A, 0x08, 0x6B, 0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, -0x48, 0x9A, 0x01, 0x6B, 0x6E, 0xEA, 0x08, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x20, 0xF2, 0x58, 0x9A, 0x1B, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x00, 0xF3, 0x48, 0x9A, 0x02, 0x6B, 0x6E, 0xEA, 0x10, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x20, 0xF2, 0x5C, 0x9A, 0x02, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x20, 0xF2, 0x58, 0x9A, 0x0B, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x40, 0xF2, 0x40, 0x9A, 0x01, 0x6B, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x40, 0xF2, 0x44, 0x9A, 0x00, 0x6B, 0x60, 0xDA, 0xB9, 0x65, 0x03, 0x91, 0x02, 0x63, -0x20, 0xE8, 0x00, 0x65, 0xFE, 0x63, 0x03, 0xD1, 0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x12, 0xF0, 0x06, 0x6B, 0x60, 0xF6, 0x6C, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x20, 0xF2, 0x50, 0x9A, 0x01, 0x6B, 0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x20, 0xF2, 0x4C, 0x9A, 0x00, 0xF4, 0x05, 0x6B, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x48, 0x9A, 0x87, 0xF7, 0x07, 0x6B, 0x6B, 0xEB, 0x60, 0xCA, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x4C, 0x9A, 0x00, 0xF4, 0x05, 0x6B, -0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x54, 0x9A, 0x08, 0x6B, -0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x48, 0x9A, 0x01, 0x6B, -0x6E, 0xEA, 0x08, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x58, 0x9A, -0x1B, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x48, 0x9A, -0x02, 0x6B, 0x6E, 0xEA, 0x10, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, -0x5C, 0x9A, 0x02, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, -0x58, 0x9A, 0x0B, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, -0x40, 0x9A, 0x01, 0x6B, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, -0x44, 0x9A, 0x00, 0x6B, 0x60, 0xDA, 0xB9, 0x65, 0x03, 0x91, 0x02, 0x63, 0x20, 0xE8, 0x00, 0x65, -0xF8, 0x63, 0x0F, 0x62, 0x0E, 0xD1, 0x04, 0x01, 0x44, 0x67, 0x20, 0xF0, 0x50, 0xC1, 0x00, 0x6A, -0x5C, 0xC1, 0x00, 0x6A, 0x43, 0xD9, 0x00, 0x6A, 0x42, 0xD9, 0x00, 0x6A, 0x44, 0xC1, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF0, 0x04, 0x4A, 0x40, 0xD9, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x48, 0x9A, 0x40, 0x9A, 0x46, 0xD9, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x48, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, -0x40, 0xF2, 0x6C, 0x9B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, -0x48, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x40, 0xF2, 0x70, 0x9B, 0x60, 0xDA, -0x00, 0x6A, 0x51, 0xC9, 0x03, 0x10, 0x51, 0xA9, 0x01, 0x4A, 0x51, 0xC9, 0x51, 0xA9, 0x0A, 0x5A, -0x58, 0x67, 0xF9, 0x2A, 0x00, 0x18, 0x73, 0x06, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x40, 0xF2, 0x54, 0x9A, 0xFF, 0x6B, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x12, 0xF0, 0x06, 0x6B, 0x60, 0xF6, 0x6C, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x40, 0xF2, 0x58, 0x9A, 0x01, 0x6B, 0x60, 0xCA, 0x01, 0x10, 0x00, 0x65, 0x00, 0x18, 0xF9, 0x08, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x5C, 0x9A, 0x40, 0x9A, 0x45, 0xD9, -0x45, 0x99, 0x22, 0xF2, 0x14, 0x6B, 0x6E, 0xEA, 0x01, 0x5A, 0x58, 0x67, 0x62, 0x67, 0xFF, 0x6A, -0x4C, 0xEB, 0x45, 0x99, 0x22, 0xF2, 0x15, 0x6C, 0x8E, 0xEA, 0x01, 0x5A, 0x58, 0x67, 0x82, 0x67, -0xFF, 0x6A, 0x8C, 0xEA, 0x4D, 0xEB, 0xFF, 0x6A, 0x6C, 0xEA, 0x62, 0x67, 0x45, 0x99, 0x22, 0xF2, -0x16, 0x6C, 0x8E, 0xEA, 0x01, 0x5A, 0x58, 0x67, 0x6D, 0xEA, 0x2D, 0x22, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x60, 0xF2, 0x40, 0x9A, 0x40, 0x9A, 0x44, 0xD9, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x60, 0xF2, 0x40, 0x9A, 0x64, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x60, 0xF2, 0x44, 0x9A, 0x80, 0xF4, 0x00, 0x6B, 0x60, 0xDA, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF2, 0x48, 0x9A, 0x40, 0x9A, 0x44, 0xD9, 0x64, 0x99, -0x80, 0x6A, 0x6D, 0xEA, 0x44, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF2, -0x48, 0x9A, 0x64, 0x99, 0x60, 0xDA, 0x45, 0x99, 0x02, 0xF1, 0x11, 0x6B, 0x6E, 0xEA, 0x12, 0x2A, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF1, 0x04, 0x4A, 0x82, 0x67, 0x00, 0x18, -0xCB, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x5C, 0x9A, 0x24, 0xF2, -0x02, 0x6B, 0x60, 0xDA, 0x45, 0x99, 0x26, 0xF3, 0x12, 0x6C, 0x8E, 0xEA, 0x39, 0x2A, 0x00, 0x6A, -0x45, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x4D, 0xA2, -0x45, 0xD9, 0x45, 0x99, 0x40, 0x32, 0x45, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x60, 0xF6, 0x0C, 0x4A, 0x53, 0xA2, 0x65, 0x99, 0x6D, 0xEA, 0x45, 0xD9, 0x45, 0x99, 0x40, 0x32, -0x45, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x43, 0xAA, -0x65, 0x99, 0x6D, 0xEA, 0x45, 0xD9, 0x45, 0x99, 0x40, 0x32, 0x45, 0xD9, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x54, 0xA2, 0x65, 0x99, 0x6D, 0xEA, 0x45, 0xD9, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x5C, 0x9A, 0x65, 0x99, 0x60, 0xDA, -0x45, 0x99, 0x26, 0xF3, 0x13, 0x6B, 0x6E, 0xEA, 0x0C, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x40, 0xF2, 0x5C, 0x9A, 0x60, 0x99, 0x60, 0x9B, 0x60, 0xDA, 0x40, 0x99, 0x04, 0x4A, -0x40, 0xD9, 0x45, 0x99, 0x26, 0xF3, 0x14, 0x6C, 0x8E, 0xEA, 0x39, 0x2A, 0x00, 0x6A, 0x45, 0xD9, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x51, 0xA2, 0x45, 0xD9, -0x45, 0x99, 0x40, 0x32, 0x45, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, -0x0C, 0x4A, 0x52, 0xA2, 0x65, 0x99, 0x6D, 0xEA, 0x45, 0xD9, 0x45, 0x99, 0x40, 0x32, 0x45, 0xD9, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x50, 0xA2, 0x65, 0x99, -0x6D, 0xEA, 0x45, 0xD9, 0x45, 0x99, 0x40, 0x32, 0x45, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x4C, 0xA2, 0x65, 0x99, 0x6D, 0xEA, 0x45, 0xD9, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x5C, 0x9A, 0x65, 0x99, 0x60, 0xDA, 0x45, 0x99, -0x26, 0xF3, 0x15, 0x6B, 0x6E, 0xEA, 0x0D, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x40, 0xF2, 0x5C, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0xC0, 0xF6, 0x74, 0x9B, -0x60, 0xDA, 0x45, 0x99, 0x26, 0xF3, 0x16, 0x6C, 0x8E, 0xEA, 0x0D, 0x2A, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x5C, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, -0xE0, 0xF6, 0x6C, 0x9B, 0x60, 0xDA, 0x45, 0x99, 0x26, 0xF3, 0x17, 0x6B, 0x6E, 0xEA, 0x0D, 0x2A, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x5C, 0x9A, 0x10, 0xF0, 0x10, 0x6B, -0x60, 0x33, 0x60, 0x33, 0xC0, 0xF6, 0x70, 0x9B, 0x60, 0xDA, 0x45, 0x99, 0x26, 0xF3, 0x18, 0x6C, -0x8E, 0xEA, 0x07, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x01, 0x6B, 0x00, 0xF3, -0x68, 0xDA, 0x45, 0x99, 0x26, 0xF3, 0x19, 0x6B, 0x6E, 0xEA, 0x07, 0x2A, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x02, 0x6B, 0x00, 0xF3, 0x68, 0xDA, 0x45, 0x99, 0x46, 0xF3, 0x00, 0x6C, -0x8E, 0xEA, 0x07, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0x6B, 0x00, 0xF3, -0x68, 0xDA, 0x45, 0x99, 0x46, 0xF3, 0x01, 0x6B, 0x6E, 0xEA, 0x0D, 0x2A, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x5C, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, -0x00, 0xF3, 0x68, 0x9B, 0x60, 0xDA, 0x45, 0x99, 0x22, 0xF2, 0x14, 0x6C, 0x8E, 0xEA, 0x2E, 0x2A, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x5C, 0x9A, 0xAA, 0xF5, 0x0A, 0x6B, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF2, 0x48, 0x9A, 0x10, 0xF0, -0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x60, 0xF2, 0x6C, 0x9B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x60, 0xF2, 0x50, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, -0x60, 0xF2, 0x74, 0x9B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF2, -0x58, 0x9A, 0x00, 0xF2, 0x00, 0x6B, 0x60, 0xDA, 0x00, 0x18, 0x27, 0x01, 0x45, 0x99, 0x22, 0xF2, -0x15, 0x6B, 0x6E, 0xEA, 0x37, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, -0x5C, 0x9A, 0x93, 0xF1, 0x19, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x60, 0xF2, 0x5C, 0x9A, 0xAF, 0xF3, 0x1C, 0x6B, 0x6B, 0xEB, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x40, 0x9A, 0x00, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x60, 0xF2, 0x50, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, -0x60, 0xF2, 0x74, 0x9B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF2, -0x48, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x80, 0xF2, 0x60, 0x9B, 0x60, 0xDA, -0x00, 0x18, 0x27, 0x01, 0x45, 0x99, 0x22, 0xF2, 0x16, 0x6C, 0x8E, 0xEA, 0x2F, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x5C, 0x9A, 0x93, 0xF1, 0x19, 0x6B, 0x60, 0xDA, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF2, 0x50, 0x9A, 0x10, 0xF0, 0x10, 0x6B, -0x60, 0x33, 0x60, 0x33, 0x60, 0xF2, 0x74, 0x9B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x60, 0xF2, 0x48, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x80, 0xF2, -0x64, 0x9B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF2, 0x5C, 0x9A, -0xAF, 0xF3, 0x1C, 0x6B, 0x6B, 0xEB, 0x60, 0xDA, 0x00, 0x18, 0x27, 0x01, 0x45, 0x99, 0x24, 0xF2, -0x16, 0x6B, 0x6E, 0xEA, 0x07, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x01, 0x6B, -0xC0, 0xF6, 0x70, 0xDA, 0x45, 0x99, 0x24, 0xF2, 0x15, 0x6C, 0x8E, 0xEA, 0x07, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x02, 0x6B, 0xC0, 0xF6, 0x70, 0xDA, 0x45, 0x99, 0x24, 0xF2, -0x14, 0x6B, 0x6E, 0xEA, 0x07, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x03, 0x6B, -0xC0, 0xF6, 0x70, 0xDA, 0x45, 0x99, 0x44, 0xF2, 0x00, 0x6C, 0x8E, 0xEA, 0x07, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x01, 0x6B, 0x00, 0xF3, 0x6C, 0xDA, 0x45, 0x99, 0x44, 0xF2, -0x01, 0x6B, 0x6E, 0xEA, 0x0D, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, -0x5C, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x00, 0xF3, 0x6C, 0x9B, 0x60, 0xDA, -0x45, 0x99, 0x44, 0xF2, 0x02, 0x6C, 0x8E, 0xEA, 0x0E, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x40, 0xF2, 0x5C, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0xC0, 0xF6, -0x14, 0x4B, 0x64, 0xAB, 0x60, 0xDA, 0x45, 0x99, 0x44, 0xF2, 0x03, 0x6B, 0x6E, 0xEA, 0x07, 0x2A, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x01, 0x6B, 0x00, 0xF3, 0x70, 0xDA, 0x45, 0x99, -0x44, 0xF2, 0x04, 0x6C, 0x8E, 0xEA, 0x07, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x00, 0x6B, 0x00, 0xF3, 0x70, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, -0x4C, 0x9A, 0x12, 0xF0, 0x03, 0x6B, 0x6E, 0xEA, 0x7F, 0xF5, 0x1F, 0x2A, 0x00, 0x18, 0x07, 0x0A, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x12, 0xF0, 0x06, 0x6B, 0x60, 0xF6, 0x6C, 0xDA, -0x75, 0x15, 0x00, 0x65, 0xFB, 0x63, 0x09, 0x62, 0x08, 0xD1, 0x04, 0x01, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, 0x48, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0x10, 0x6A, -0x6C, 0xEA, 0x71, 0x22, 0x00, 0x6A, 0x40, 0xC1, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xE0, 0xF6, 0x4C, 0x9A, 0x61, 0x42, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF6, -0x6C, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF6, 0x6C, 0x9A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, 0x4C, 0x9A, 0x63, 0xEA, 0x58, 0x67, 0x5C, 0x22, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0x6B, 0xE0, 0xF6, 0x6C, 0xDA, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x50, 0x9A, 0x01, 0x6B, 0x6E, 0xEA, 0x04, 0x2A, -0x04, 0x6C, 0x00, 0x6D, 0x00, 0x18, 0xDC, 0x0E, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xC0, 0xF6, 0x14, 0x4A, 0x02, 0x6B, 0x64, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xC0, 0xF6, 0x50, 0x9A, 0x01, 0x6B, 0x6E, 0xEA, 0x09, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x40, 0xF2, 0x5C, 0x9A, 0x22, 0xF2, 0x16, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x50, 0x9A, 0x02, 0x6B, 0x6E, 0xEA, 0x09, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x5C, 0x9A, 0x22, 0xF2, 0x15, 0x6B, 0x60, 0xDA, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x50, 0x9A, 0x03, 0x6B, 0x6E, 0xEA, -0x13, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x5C, 0x9A, 0x22, 0xF2, -0x14, 0x6B, 0x60, 0xDA, 0x09, 0x10, 0x01, 0x6A, 0x40, 0xC1, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x00, 0x6B, 0xE0, 0xF6, 0x6C, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xC0, 0xF6, 0x14, 0x4A, 0x44, 0xAA, 0x02, 0x6B, 0x6E, 0xEA, 0xE0, 0xF0, 0x0B, 0x2A, 0x40, 0xA1, -0x01, 0x6B, 0x6E, 0xEA, 0x10, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, -0x14, 0x4A, 0x41, 0x9A, 0x61, 0x42, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, -0x14, 0x4A, 0x61, 0xDA, 0x08, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, -0x14, 0x4A, 0x00, 0x6B, 0x61, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, -0x14, 0x4A, 0x41, 0x9A, 0x11, 0x5A, 0x58, 0x67, 0xE0, 0xF0, 0x12, 0x2A, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x00, 0x6B, 0x61, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, 0x50, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0x02, 0x6A, -0x4B, 0xEA, 0x6C, 0xEA, 0x42, 0xD9, 0x00, 0x6A, 0x41, 0xD9, 0x03, 0x10, 0x41, 0x99, 0x01, 0x4A, -0x41, 0xD9, 0x41, 0x99, 0x0A, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x80, 0xF2, 0x50, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x00, 0x6A, 0x41, 0xD9, 0x03, 0x10, -0x41, 0x99, 0x01, 0x4A, 0x41, 0xD9, 0x41, 0x99, 0x0A, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x58, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x00, 0x6A, -0x41, 0xD9, 0x03, 0x10, 0x41, 0x99, 0x01, 0x4A, 0x41, 0xD9, 0x41, 0x99, 0x32, 0x5A, 0x58, 0x67, -0xF9, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x58, 0x9A, 0x82, 0x99, -0x01, 0x6B, 0x8D, 0xEB, 0x60, 0xDA, 0x00, 0x6A, 0x41, 0xD9, 0x03, 0x10, 0x41, 0x99, 0x01, 0x4A, -0x41, 0xD9, 0x41, 0x99, 0x32, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x80, 0xF2, 0x54, 0x9A, 0x00, 0x6B, 0x60, 0xDA, 0x00, 0x6A, 0x41, 0xD9, 0x03, 0x10, -0x41, 0x99, 0x01, 0x4A, 0x41, 0xD9, 0x41, 0x99, 0x32, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, 0x54, 0x9A, 0x07, 0x6B, 0x60, 0xDA, 0x00, 0x6A, -0x41, 0xD9, 0x11, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, 0x58, 0x9A, -0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0x01, 0x6A, 0x4C, 0xEB, 0xFF, 0x6A, 0x6C, 0xEA, 0x0E, 0x2A, -0x41, 0x99, 0x01, 0x4A, 0x41, 0xD9, 0x61, 0x99, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x80, 0xF2, 0x5C, 0x9A, 0x43, 0xEB, 0x58, 0x67, 0xE5, 0x2A, 0x01, 0x10, 0x00, 0x65, 0x00, 0x18, -0xD3, 0x09, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x58, 0x9A, 0x01, 0x6B, -0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, 0x50, 0x9A, 0x40, 0x9A, -0x42, 0xD9, 0x62, 0x99, 0x01, 0x6A, 0x6D, 0xEA, 0x42, 0xD9, 0x00, 0x6A, 0x41, 0xD9, 0x03, 0x10, -0x41, 0x99, 0x01, 0x4A, 0x41, 0xD9, 0x41, 0x99, 0x0A, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, 0x50, 0x9A, 0x62, 0x99, 0x60, 0xDA, 0x00, 0x6A, -0x41, 0xD9, 0x03, 0x10, 0x41, 0x99, 0x01, 0x4A, 0x41, 0xD9, 0x41, 0x99, 0x0A, 0x5A, 0x58, 0x67, -0xF9, 0x2A, 0x2E, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x4C, 0x9A, -0x27, 0x22, 0x01, 0x10, 0x00, 0x65, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, -0x48, 0x9A, 0x40, 0x9A, 0x42, 0xD9, 0x62, 0x99, 0x10, 0x6A, 0x6C, 0xEA, 0x18, 0x22, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x4C, 0x9A, 0x61, 0x42, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x6C, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x00, 0xF3, 0x4C, 0x9A, 0x02, 0xF0, 0x01, 0x5A, 0x58, 0x67, 0xDC, 0x2A, 0x01, 0x10, 0x00, 0x65, -0xB9, 0x65, 0x05, 0x97, 0x04, 0x91, 0x03, 0x63, 0x00, 0xEF, 0x00, 0x65, 0xFC, 0x63, 0x07, 0x62, -0x06, 0xD1, 0x04, 0x01, 0x00, 0x6A, 0x40, 0xD9, 0x03, 0x10, 0x40, 0x99, 0x01, 0x4A, 0x40, 0xD9, -0x40, 0x99, 0x32, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x20, 0xF2, 0x40, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0xA0, 0xF2, 0x60, 0x9B, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x50, 0x9A, 0x01, 0x6B, -0x6E, 0xEA, 0x16, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, -0x44, 0xAA, 0x02, 0x6B, 0x6E, 0xEA, 0x0C, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xC0, 0xF6, 0x14, 0x4A, 0x01, 0x6B, 0x64, 0xCA, 0x04, 0x6C, 0x00, 0x6D, 0x00, 0x18, 0xDC, 0x0E, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x01, 0x6B, 0x64, 0xCA, -0xB9, 0x65, 0x03, 0x97, 0x02, 0x91, 0x02, 0x63, 0x00, 0xEF, 0x00, 0x65, 0xFF, 0x63, 0x01, 0xD1, -0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x02, 0x6B, -0x64, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x40, 0x9A, 0x00, 0x6B, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, 0x00, 0x6B, 0xC0, 0xF6, -0x74, 0xDA, 0xB9, 0x65, 0x01, 0x91, 0x01, 0x63, 0x20, 0xE8, 0x00, 0x65, 0xFC, 0x63, 0x07, 0x62, -0x06, 0xD1, 0x04, 0x01, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x54, 0x9A, -0x1C, 0xF0, 0x00, 0x4A, 0x0E, 0x5A, 0x78, 0x67, 0x20, 0xF1, 0x00, 0x23, 0x48, 0x33, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF1, 0x0C, 0x4A, 0x49, 0xE3, 0x40, 0x9A, 0x00, 0xEA, -0x00, 0x18, 0x60, 0x0D, 0x44, 0xC1, 0x44, 0xA1, 0x01, 0x6B, 0x6E, 0xEA, 0x00, 0xF1, 0x10, 0x2A, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, 0x01, 0x6B, 0xC0, 0xF6, 0x74, 0xDA, -0x08, 0x11, 0x00, 0x18, 0xA4, 0x0A, 0x44, 0xC1, 0x44, 0xA1, 0x02, 0x2A, 0x00, 0x6A, 0x02, 0x11, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x58, 0x9A, 0x05, 0x6B, 0x60, 0xCA, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, 0x01, 0x6B, 0xC0, 0xF6, 0x74, 0xDA, -0xF0, 0x10, 0x01, 0x6C, 0x00, 0x18, 0xB4, 0x0A, 0x44, 0xC1, 0x44, 0xA1, 0x0A, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, 0x00, 0x6B, 0xC0, 0xF6, 0x74, 0xDA, 0x00, 0x6A, -0xE1, 0x10, 0x44, 0xA1, 0x01, 0x6B, 0x6E, 0xEA, 0x0A, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x04, 0xF0, 0x01, 0x6B, 0xC0, 0xF6, 0x74, 0xDA, 0x00, 0x6A, 0xD3, 0x10, 0x44, 0xA1, -0x02, 0x6B, 0x6E, 0xEA, 0x0A, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, -0x0C, 0x6B, 0xC0, 0xF6, 0x74, 0xDA, 0x00, 0x6A, 0xC5, 0x10, 0x44, 0xA1, 0x07, 0x6B, 0x6E, 0xEA, -0x0A, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, 0x03, 0x6B, 0xC0, 0xF6, -0x74, 0xDA, 0x00, 0x6A, 0xB7, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, -0x00, 0x6B, 0xC0, 0xF6, 0x74, 0xDA, 0x00, 0x6A, 0xAD, 0x10, 0x02, 0x6C, 0x00, 0x18, 0xA1, 0x0B, -0x44, 0xC1, 0x44, 0xA1, 0x0A, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, -0x00, 0x6B, 0xC0, 0xF6, 0x74, 0xDA, 0x00, 0x6A, 0x9D, 0x10, 0x44, 0xA1, 0x01, 0x6B, 0x6E, 0xEA, -0x0A, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, 0x03, 0x6B, 0xC0, 0xF6, -0x74, 0xDA, 0x00, 0x6A, 0x8F, 0x10, 0x44, 0xA1, 0x02, 0x6B, 0x6E, 0xEA, 0x12, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, 0x0C, 0x6B, 0xC0, 0xF6, 0x74, 0xDA, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x58, 0x9A, 0x07, 0x6B, 0x60, 0xCA, 0x00, 0x6A, -0x79, 0x10, 0x44, 0xA1, 0x07, 0x6B, 0x6E, 0xEA, 0x12, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x04, 0xF0, 0x0C, 0x6B, 0xC0, 0xF6, 0x74, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x40, 0xF2, 0x58, 0x9A, 0x07, 0x6B, 0x60, 0xCA, 0x00, 0x6A, 0x63, 0x10, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, 0x00, 0x6B, 0xC0, 0xF6, 0x74, 0xDA, 0x00, 0x6A, -0x59, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x4B, 0xA2, -0x12, 0x22, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, 0x00, 0x6B, 0xC0, 0xF6, -0x74, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x58, 0x9A, 0x05, 0x6B, -0x60, 0xCA, 0x00, 0x6A, 0x3F, 0x10, 0x00, 0x18, 0x40, 0x0D, 0x44, 0xC1, 0x44, 0xA1, 0x03, 0x6B, -0x6E, 0xEA, 0x12, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x58, 0x9A, -0x05, 0x6B, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, 0x0D, 0x6B, -0xC0, 0xF6, 0x74, 0xDA, 0x00, 0x6A, 0x26, 0x10, 0x44, 0xA1, 0x12, 0x2A, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x04, 0xF0, 0x00, 0x6B, 0xC0, 0xF6, 0x74, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x58, 0x9A, 0x05, 0x6B, 0x60, 0xCA, 0x00, 0x6A, 0x12, 0x10, -0x44, 0xA1, 0x02, 0x6B, 0x6E, 0xEA, 0x08, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x04, 0xF0, 0x0C, 0x6B, 0xC0, 0xF6, 0x74, 0xDA, 0x00, 0x6A, 0x04, 0x10, 0x00, 0x6A, 0x02, 0x10, -0x00, 0x65, 0x00, 0x10, 0xB9, 0x65, 0x03, 0x97, 0x02, 0x91, 0x02, 0x63, 0x00, 0xEF, 0x00, 0x65, -0xFD, 0x63, 0x05, 0x62, 0x04, 0xD1, 0x04, 0x01, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x80, 0xF6, 0x48, 0xA2, 0x26, 0x6B, 0x6E, 0xEA, 0x02, 0x2A, 0x00, 0x18, 0xD3, 0x06, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x48, 0xA2, 0x52, 0x6B, 0x6E, 0xEA, 0x02, 0x2A, -0x00, 0x18, 0xD3, 0x06, 0x01, 0x6A, 0xB9, 0x65, 0x01, 0x97, 0x00, 0x91, 0x01, 0x63, 0x00, 0xEF, -0xFA, 0x63, 0x0B, 0x62, 0x0A, 0xD1, 0x04, 0x01, 0x44, 0x67, 0x20, 0xF0, 0x40, 0xC1, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xD9, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x40, 0xC1, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x48, 0xA2, 0x93, 0x6B, 0x6E, 0xEA, 0xA0, 0xF1, 0x14, 0x2A, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x70, 0x6C, -0x8E, 0xEA, 0x05, 0x2A, 0x00, 0x6C, 0x00, 0x18, 0xC2, 0x0C, 0x07, 0x6A, 0xA6, 0x11, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x20, 0x5A, 0x58, 0x67, -0x02, 0x22, 0x00, 0x6A, 0x9A, 0x11, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, -0x08, 0x4A, 0x41, 0xA2, 0x68, 0x5A, 0x58, 0x67, 0x02, 0x2A, 0x00, 0x6A, 0x8E, 0x11, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x20, 0x6B, 0x6E, 0xEA, -0x4D, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x78, 0x6B, 0x6B, 0xEB, 0x80, 0xF6, -0x68, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x6C, 0xA2, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x61, 0xC2, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x6D, 0xA2, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x62, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x6E, 0xA2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x80, 0xF6, 0x08, 0x4A, 0x63, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, -0x14, 0x4A, 0x6F, 0xA2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, -0x64, 0xC2, 0x40, 0xA1, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x80, 0xF6, 0x08, 0x4B, -0x83, 0x67, 0xA2, 0x67, 0x00, 0x18, 0x4F, 0x0C, 0x01, 0x6A, 0x37, 0x11, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x48, 0xA2, 0x30, 0x6C, 0x8E, 0xEA, 0x0E, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x04, 0x2A, 0x00, 0x18, -0xAA, 0x0D, 0x02, 0x6A, 0x22, 0x11, 0x00, 0x6A, 0x20, 0x11, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x62, 0x67, 0x0F, 0x6A, 0x6C, 0xEA, 0x16, 0x22, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x52, 0x33, -0xFF, 0x6A, 0x6C, 0xEA, 0x62, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, -0x0C, 0x4A, 0x43, 0xAA, 0x6E, 0xEA, 0x02, 0x22, 0x00, 0x6A, 0xFF, 0x10, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x62, 0x67, 0x0F, 0x6A, 0x4C, 0xEB, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x49, 0xA2, 0x6E, 0xEA, -0x02, 0x22, 0x00, 0x6A, 0xEA, 0x10, 0x40, 0xA1, 0xE0, 0x4A, 0x53, 0x32, 0x43, 0xC1, 0x00, 0x6A, -0x42, 0xC1, 0x2C, 0x10, 0x42, 0xA1, 0x0F, 0x2A, 0x42, 0xA1, 0x62, 0x42, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x49, 0xE3, 0x40, 0xA2, 0x88, 0x6B, 0x6E, 0xEA, -0x1A, 0x22, 0x00, 0x6A, 0xD2, 0x10, 0x42, 0xA1, 0x62, 0x42, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x49, 0xE3, 0x60, 0xA2, 0x42, 0xA1, 0x8F, 0x42, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x49, 0xE4, 0x4C, 0xA2, 0x6E, 0xEA, -0x02, 0x22, 0x00, 0x6A, 0xBA, 0x10, 0x42, 0xA1, 0x01, 0x4A, 0x42, 0xC1, 0x62, 0xA1, 0x43, 0xA1, -0x43, 0xEB, 0x58, 0x67, 0xCF, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, -0x08, 0x4A, 0x61, 0xA2, 0x0F, 0x6A, 0x6C, 0xEA, 0x48, 0xC1, 0x48, 0xA1, 0x40, 0x22, 0x48, 0xA1, -0x08, 0x6B, 0x4B, 0xE3, 0x48, 0xC1, 0x43, 0xA1, 0x14, 0x2A, 0x48, 0xA1, 0x88, 0x6B, 0x83, 0x67, -0x84, 0xEA, 0x44, 0x67, 0x4A, 0xC1, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, -0x08, 0x4A, 0x42, 0xA2, 0x62, 0x67, 0x48, 0xA1, 0x83, 0x67, 0x84, 0xEA, 0x44, 0x67, 0x49, 0xC1, -0x20, 0x10, 0x43, 0xA1, 0x6F, 0x42, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, -0x14, 0x4A, 0x49, 0xE3, 0x4C, 0xA2, 0x62, 0x67, 0x48, 0xA1, 0x83, 0x67, 0x84, 0xEA, 0x44, 0x67, -0x4A, 0xC1, 0x43, 0xA1, 0x62, 0x42, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, -0x08, 0x4A, 0x49, 0xE3, 0x40, 0xA2, 0x62, 0x67, 0x48, 0xA1, 0x83, 0x67, 0x84, 0xEA, 0x44, 0x67, -0x49, 0xC1, 0x6A, 0xA1, 0x49, 0xA1, 0x6E, 0xEA, 0x02, 0x22, 0x00, 0x6A, 0x66, 0x10, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x6F, 0xA2, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x64, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x6E, 0xA2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x80, 0xF6, 0x08, 0x4A, 0x63, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, -0x14, 0x4A, 0x6D, 0xA2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, -0x62, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x6C, 0xA2, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x61, 0xC2, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x78, 0x6B, 0x6B, 0xEB, 0x80, 0xF6, 0x68, 0xC2, 0x00, 0x6A, -0x42, 0xC1, 0x12, 0x10, 0x42, 0xA1, 0x83, 0xA1, 0x62, 0xA1, 0x71, 0xE4, 0x10, 0xF0, 0x10, 0x6B, -0x60, 0x33, 0x60, 0x33, 0x80, 0xF6, 0x08, 0x4B, 0x6D, 0xE4, 0x60, 0xA3, 0x91, 0x67, 0x49, 0xE4, -0x70, 0xC2, 0x42, 0xA1, 0x01, 0x4A, 0x42, 0xC1, 0x62, 0xA1, 0x43, 0xA1, 0x05, 0x6C, 0x4B, 0xE4, -0x42, 0xEB, 0x58, 0x67, 0xE7, 0x2A, 0x40, 0xA1, 0x67, 0x41, 0x09, 0x4B, 0x83, 0x67, 0xA2, 0x67, -0x00, 0x18, 0x4F, 0x0C, 0x01, 0x6A, 0x01, 0x10, 0x00, 0x6A, 0xB9, 0x65, 0x07, 0x97, 0x06, 0x91, -0x04, 0x63, 0x00, 0xEF, 0xFA, 0x63, 0x0B, 0x62, 0x0A, 0xD1, 0x04, 0x01, 0x44, 0x67, 0x20, 0xF0, -0x40, 0xC1, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, -0x40, 0xC1, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x48, 0xA2, 0x95, 0x6B, -0x6E, 0xEA, 0x20, 0xF1, 0x1D, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, -0x08, 0x4A, 0x41, 0xA2, 0x70, 0x6C, 0x8E, 0xEA, 0x05, 0x2A, 0x01, 0x6C, 0x00, 0x18, 0xC2, 0x0C, -0x07, 0x6A, 0x2F, 0x11, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, -0x41, 0xA2, 0x20, 0x6B, 0x6E, 0xEA, 0x52, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xC0, 0xF6, 0x14, 0x4A, 0x70, 0xA2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, -0x68, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x71, 0xA2, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x61, 0xC2, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x72, 0xA2, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x62, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x73, 0xA2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x80, 0xF6, 0x08, 0x4A, 0x63, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, -0x14, 0x4A, 0x74, 0xA2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, -0x64, 0xC2, 0x40, 0xA1, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x80, 0xF6, 0x08, 0x4B, -0x83, 0x67, 0xA2, 0x67, 0x00, 0x18, 0x4F, 0x0C, 0x01, 0x6A, 0xD3, 0x10, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x48, 0xA2, 0x30, 0x6C, 0x8E, 0xEA, 0x0E, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x04, 0x2A, 0x00, 0x18, -0xAA, 0x0D, 0x02, 0x6A, 0xBE, 0x10, 0x00, 0x6A, 0xBC, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x62, 0x67, 0x01, 0x6A, 0x4C, 0xEB, 0xFF, 0x6A, -0x6C, 0xEA, 0x16, 0x22, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, -0x41, 0xA2, 0x52, 0x33, 0xFF, 0x6A, 0x6C, 0xEA, 0x62, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, 0x43, 0xAA, 0x6E, 0xEA, 0x02, 0x22, 0x00, 0x6A, 0x99, 0x10, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x62, 0x67, -0x0F, 0x6A, 0x4C, 0xEB, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x0C, 0x4A, -0x49, 0xA2, 0x6E, 0xEA, 0x02, 0x22, 0x00, 0x6A, 0x84, 0x10, 0x40, 0xA1, 0xE0, 0x4A, 0x53, 0x32, -0x42, 0xC1, 0x00, 0x6A, 0x41, 0xC1, 0x1B, 0x10, 0x41, 0xA1, 0x62, 0x42, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x49, 0xE3, 0x60, 0xA2, 0x41, 0xA1, 0x84, 0x42, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x49, 0xE4, 0x4C, 0xA2, -0x6E, 0xEA, 0x02, 0x22, 0x00, 0x6A, 0x65, 0x10, 0x41, 0xA1, 0x01, 0x4A, 0x41, 0xC1, 0x61, 0xA1, -0x42, 0xA1, 0x43, 0xEB, 0x58, 0x67, 0xE0, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x80, 0xF6, 0x08, 0x4A, 0x61, 0xA2, 0x0F, 0x6A, 0x6C, 0xEA, 0x45, 0xC1, 0x45, 0xA1, 0x2A, 0x22, -0x45, 0xA1, 0x08, 0x6B, 0x4B, 0xE3, 0x45, 0xC1, 0x42, 0xA1, 0x64, 0x42, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x49, 0xE3, 0x4C, 0xA2, 0x62, 0x67, 0x45, 0xA1, -0x83, 0x67, 0x84, 0xEA, 0x44, 0x67, 0x44, 0xC1, 0x42, 0xA1, 0x62, 0x42, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x49, 0xE3, 0x40, 0xA2, 0x62, 0x67, 0x45, 0xA1, -0x83, 0x67, 0x84, 0xEA, 0x44, 0x67, 0x43, 0xC1, 0x64, 0xA1, 0x43, 0xA1, 0x6E, 0xEA, 0x02, 0x22, -0x00, 0x6A, 0x27, 0x10, 0x00, 0x6A, 0x41, 0xC1, 0x13, 0x10, 0x41, 0xA1, 0x62, 0xA1, 0x84, 0x43, -0x61, 0xA1, 0x71, 0xE4, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0xC0, 0xF6, 0x14, 0x4B, -0x6D, 0xE4, 0x6C, 0xA3, 0x91, 0x67, 0x49, 0xE4, 0x68, 0xC2, 0x41, 0xA1, 0x01, 0x4A, 0x41, 0xC1, -0x61, 0xA1, 0x42, 0xA1, 0x05, 0x6C, 0x4B, 0xE4, 0x42, 0xEB, 0x58, 0x67, 0xE6, 0x2A, 0x40, 0xA1, -0x67, 0x41, 0x01, 0x4B, 0x83, 0x67, 0xA2, 0x67, 0x00, 0x18, 0x4F, 0x0C, 0x01, 0x6A, 0x01, 0x10, -0x00, 0x6A, 0xB9, 0x65, 0x07, 0x97, 0x06, 0x91, 0x04, 0x63, 0x00, 0xEF, 0xFA, 0x63, 0x0B, 0xD1, -0x3D, 0x67, 0x8C, 0xD9, 0x45, 0x67, 0x20, 0xF0, 0x54, 0xC1, 0x00, 0x6A, 0x46, 0xC9, 0x00, 0x6A, -0x41, 0xD9, 0x4C, 0x99, 0x40, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x12, 0xF0, -0x06, 0x6B, 0x60, 0xF6, 0x6C, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, -0x4C, 0x9A, 0x00, 0xF4, 0x05, 0x6B, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x20, 0xF2, 0x54, 0x9A, 0x08, 0x6B, 0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x20, 0xF2, 0x50, 0x9A, 0x01, 0x6B, 0x60, 0xC2, 0x20, 0xF0, 0x74, 0xA1, 0x0F, 0x6A, 0x6C, 0xEA, -0x20, 0x22, 0x20, 0xF0, 0x54, 0xA1, 0x0F, 0x6B, 0x6C, 0xEA, 0x08, 0x6B, 0x4B, 0xE3, 0x46, 0xC9, -0x46, 0xA9, 0x40, 0x32, 0x46, 0xC9, 0x20, 0xF0, 0x54, 0xA1, 0xE0, 0x4A, 0x53, 0x33, 0xFF, 0xF7, -0x1F, 0x6A, 0x6C, 0xEA, 0x66, 0xA9, 0x4F, 0xE3, 0xFF, 0xF7, 0x1F, 0x6A, 0x6C, 0xEA, 0x04, 0x4A, -0x46, 0xC9, 0x66, 0xA9, 0xFF, 0x6A, 0x6C, 0xEA, 0x45, 0xC9, 0x45, 0xA9, 0x01, 0x4A, 0x45, 0xC9, -0x10, 0x10, 0x20, 0xF0, 0x54, 0xA1, 0xE0, 0x4A, 0x53, 0x33, 0xFF, 0xF7, 0x1F, 0x6A, 0x6C, 0xEA, -0x66, 0xA9, 0x4F, 0xE3, 0xFF, 0xF7, 0x1F, 0x6A, 0x6C, 0xEA, 0x05, 0x4A, 0x46, 0xC9, 0x46, 0xA9, -0x45, 0xC9, 0x46, 0xA9, 0x05, 0x6B, 0x6E, 0xEA, 0x09, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x20, 0xF2, 0x54, 0x9A, 0x08, 0x6B, 0x60, 0xC2, 0x08, 0x10, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x54, 0x9A, 0x48, 0x6B, 0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x40, 0x9A, 0x66, 0xA9, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x48, 0x9A, 0x01, 0x6B, 0x6E, 0xEA, 0x08, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x58, 0x9A, 0x1B, 0x6B, 0x60, 0xDA, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x48, 0x9A, 0x02, 0x6B, 0x6E, 0xEA, 0x10, 0x2A, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x5C, 0x9A, 0x02, 0x6B, 0x60, 0xDA, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x58, 0x9A, 0x0B, 0x6B, 0x60, 0xDA, -0x45, 0xA9, 0x05, 0x5A, 0x58, 0x67, 0x0A, 0x22, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x40, 0xF2, 0x44, 0x9A, 0x60, 0x99, 0x60, 0x9B, 0x60, 0xDA, 0x13, 0x10, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x44, 0x9A, 0x60, 0x99, 0x60, 0x9B, 0x60, 0xDA, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x44, 0x9A, 0x60, 0x99, 0x04, 0x4B, 0x60, 0x9B, -0x60, 0xDA, 0x00, 0x6A, 0x44, 0xD9, 0x0D, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x60, 0xF6, 0x4C, 0x9A, 0x12, 0xF0, 0x04, 0x6B, 0x6E, 0xEA, 0x09, 0x22, 0x44, 0x99, 0x01, 0x4A, -0x44, 0xD9, 0x44, 0x99, 0xE5, 0xF7, 0x1F, 0x5A, 0x58, 0x67, 0xEE, 0x2A, 0x01, 0x10, 0x00, 0x65, -0xB9, 0x65, 0x0B, 0x91, 0x06, 0x63, 0x20, 0xE8, 0xFC, 0x63, 0x07, 0x62, 0x06, 0xD1, 0x04, 0x01, -0x44, 0x67, 0x50, 0xC1, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, -0x41, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x54, 0x9A, 0x04, 0xF0, -0x01, 0x6B, 0x6E, 0xEA, 0x26, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, -0x08, 0x4A, 0x42, 0xA2, 0x88, 0x6B, 0x6E, 0xEA, 0x02, 0x22, 0x00, 0x6A, 0x3F, 0x10, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x62, 0x67, 0x80, 0xF6, 0x0B, 0x4B, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xE0, 0xF6, 0x00, 0x4A, 0x83, 0x67, 0xA2, 0x67, 0x03, 0x6E, 0x00, 0x18, -0xCE, 0x05, 0x01, 0x6B, 0x6E, 0xEA, 0x02, 0x22, 0x00, 0x6A, 0x28, 0x10, 0x00, 0x6C, 0x00, 0x18, -0xF6, 0x0C, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x54, 0x9A, 0x04, 0xF0, -0x03, 0x6B, 0x6E, 0xEA, 0x1A, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x62, 0x67, -0x80, 0xF6, 0x0A, 0x4B, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF6, 0x04, 0x4A, -0x83, 0x67, 0xA2, 0x67, 0x04, 0x6E, 0x00, 0x18, 0xCE, 0x05, 0x01, 0x6B, 0x6E, 0xEA, 0x02, 0x22, -0x00, 0x6A, 0x04, 0x10, 0x01, 0x6C, 0x00, 0x18, 0xF6, 0x0C, 0x00, 0x10, 0xB9, 0x65, 0x03, 0x97, -0x02, 0x91, 0x02, 0x63, 0x00, 0xEF, 0x00, 0x65, 0xFE, 0x63, 0x03, 0xD1, 0x3D, 0x67, 0x44, 0x67, -0x50, 0xC1, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x12, 0xF0, 0x06, 0x6B, 0x60, 0xF6, -0x6C, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x50, 0x9A, 0x01, 0x6B, -0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x4C, 0x9A, 0x00, 0xF4, -0x07, 0x6B, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x54, 0x9A, -0x08, 0x6B, 0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x48, 0x9A, -0x01, 0x6B, 0x6E, 0xEA, 0x08, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, -0x58, 0x9A, 0x1B, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, -0x48, 0x9A, 0x02, 0x6B, 0x6E, 0xEA, 0x10, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x20, 0xF2, 0x5C, 0x9A, 0x02, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x20, 0xF2, 0x58, 0x9A, 0x0B, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x40, 0xF2, 0x40, 0x9A, 0x01, 0x6B, 0x60, 0xCA, 0x50, 0xA1, 0x09, 0x2A, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x44, 0x9A, 0x04, 0x6B, 0x60, 0xDA, 0x08, 0x10, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x44, 0x9A, 0x00, 0x6B, 0x60, 0xDA, 0x00, 0x6A, -0x40, 0xD9, 0x0D, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x4C, 0x9A, -0x12, 0xF0, 0x04, 0x6B, 0x6E, 0xEA, 0x0E, 0x22, 0x40, 0x99, 0x01, 0x4A, 0x40, 0xD9, 0x60, 0x99, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF2, 0x44, 0x9A, 0x63, 0xEA, 0x58, 0x67, -0xE9, 0x22, 0x01, 0x10, 0x00, 0x65, 0xB9, 0x65, 0x03, 0x91, 0x02, 0x63, 0x20, 0xE8, 0x00, 0x65, -0xFF, 0x63, 0x01, 0xD1, 0x3D, 0x67, 0xB9, 0x65, 0x01, 0x91, 0x01, 0x63, 0x20, 0xE8, 0x00, 0x65, -0xFD, 0x63, 0x05, 0x62, 0x04, 0xD1, 0x04, 0x01, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x80, 0xF6, 0x48, 0xA2, 0x50, 0x6B, 0x4E, 0xEB, 0x11, 0x23, 0x51, 0x52, 0x78, 0x67, 0x07, 0x23, -0x1A, 0x6B, 0x4E, 0xEB, 0x23, 0x23, 0x30, 0x6B, 0x6E, 0xEA, 0x18, 0x22, 0x23, 0x10, 0x60, 0x6B, -0x4E, 0xEB, 0x18, 0x23, 0xA2, 0x6B, 0x6E, 0xEA, 0x0D, 0x22, 0x1C, 0x10, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x02, 0x22, 0x00, 0x6A, 0x13, 0x10, -0x03, 0x6A, 0x11, 0x10, 0x00, 0x18, 0x6C, 0x0D, 0x01, 0x6A, 0x0D, 0x10, 0x00, 0x18, 0xAA, 0x0D, -0x02, 0x6A, 0x09, 0x10, 0x00, 0x18, 0x0E, 0x07, 0x04, 0x6A, 0x05, 0x10, 0x00, 0x18, 0x49, 0x07, -0x04, 0x6A, 0x01, 0x10, 0x00, 0x6A, 0xB9, 0x65, 0x01, 0x97, 0x00, 0x91, 0x01, 0x63, 0x00, 0xEF, -0xFD, 0x63, 0x05, 0x62, 0x04, 0xD1, 0x04, 0x01, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x80, 0xF6, 0x48, 0xA2, 0x52, 0x6B, 0x6E, 0xEA, 0x04, 0x2A, 0x00, 0x18, 0xD3, 0x06, 0x01, 0x6A, -0x01, 0x10, 0x00, 0x6A, 0xB9, 0x65, 0x01, 0x97, 0x00, 0x91, 0x01, 0x63, 0x00, 0xEF, 0x00, 0x65, -0xFB, 0x63, 0x09, 0x62, 0x08, 0xD1, 0x04, 0x01, 0x00, 0x6A, 0x42, 0xC1, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x42, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x41, 0xC1, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x00, 0xF0, 0x04, 0x4A, 0x4A, 0xA2, 0x40, 0xC1, 0x41, 0xA1, 0x2A, 0x5A, 0x58, 0x67, -0x01, 0x6B, 0x6E, 0xEA, 0x62, 0x67, 0xFF, 0x6A, 0x4C, 0xEB, 0x41, 0xA1, 0x02, 0x5A, 0x58, 0x67, -0x82, 0x67, 0xFF, 0x6A, 0x8C, 0xEA, 0x4D, 0xEB, 0xFF, 0x6A, 0x6C, 0xEA, 0x05, 0x22, 0x00, 0x6C, -0x00, 0x18, 0x03, 0x0E, 0x00, 0x6A, 0x42, 0x10, 0x42, 0xA1, 0x28, 0x22, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x48, 0x32, 0x44, 0xC1, 0x00, 0x6A, -0x43, 0xC1, 0x18, 0x10, 0x64, 0xA1, 0x43, 0xA1, 0x51, 0xE3, 0x43, 0xA1, 0x62, 0x42, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x49, 0xE3, 0x60, 0xA2, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF0, 0x04, 0x4A, 0x49, 0xE4, 0x60, 0xC2, 0x43, 0xA1, -0x01, 0x4A, 0x43, 0xC1, 0x43, 0xA1, 0x04, 0x5A, 0x58, 0x67, 0xE4, 0x2A, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x50, 0x9A, 0x01, 0x6B, 0x6E, 0xEA, 0x0B, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x01, 0x6C, 0xA2, 0x67, -0x00, 0x18, 0xDC, 0x0E, 0x0A, 0x6C, 0x00, 0x18, 0x03, 0x0E, 0x01, 0x6A, 0xB9, 0x65, 0x05, 0x97, -0x04, 0x91, 0x03, 0x63, 0x00, 0xEF, 0x00, 0x65, 0xFB, 0x63, 0x09, 0x62, 0x08, 0xD1, 0x04, 0x01, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF0, 0x04, 0x4A, 0x41, 0xD9, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x50, 0x9A, 0x01, 0x6B, 0x60, 0xC2, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x4C, 0x9A, 0x00, 0xF4, 0x07, 0x6B, 0x60, 0xCA, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x54, 0x9A, 0x08, 0x6B, 0x60, 0xC2, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x12, 0xF0, 0x06, 0x6B, 0x60, 0xF6, 0x6C, 0xDA, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x2A, 0x5A, -0x58, 0x67, 0x07, 0x2A, 0x00, 0x6C, 0x00, 0x18, 0x03, 0x0E, 0x00, 0x6A, 0x62, 0x67, 0x43, 0x67, -0x6F, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, -0x48, 0x32, 0x61, 0x99, 0x49, 0xE3, 0x41, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x00, 0xF3, 0x48, 0x9A, 0x01, 0x6B, 0x6E, 0xEA, 0x08, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x20, 0xF2, 0x58, 0x9A, 0x1B, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x00, 0xF3, 0x48, 0x9A, 0x02, 0x6B, 0x6E, 0xEA, 0x10, 0x2A, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x5C, 0x9A, 0x02, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x58, 0x9A, 0x0B, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x40, 0x9A, 0x10, 0x6B, 0x60, 0xCA, 0x00, 0x6A, 0x48, 0xC1, -0x0F, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x44, 0x9A, 0x68, 0xA1, -0x68, 0x33, 0x81, 0x99, 0x6D, 0xE4, 0x60, 0x9B, 0x60, 0xDA, 0x48, 0xA1, 0x01, 0x4A, 0x48, 0xC1, -0x48, 0xA1, 0x04, 0x5A, 0x58, 0x67, 0xED, 0x2A, 0x00, 0x6A, 0x40, 0xD9, 0x0D, 0x10, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x4C, 0x9A, 0x12, 0xF0, 0x04, 0x6B, 0x6E, 0xEA, -0x0E, 0x22, 0x40, 0x99, 0x01, 0x4A, 0x40, 0xD9, 0x60, 0x99, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0xA0, 0xF2, 0x44, 0x9A, 0x63, 0xEA, 0x58, 0x67, 0xE9, 0x22, 0x01, 0x10, 0x00, 0x65, -0xB9, 0x65, 0x05, 0x97, 0x04, 0x91, 0x03, 0x63, 0x00, 0xEF, 0x00, 0x65, 0xFE, 0x63, 0x03, 0xD1, -0x3D, 0x67, 0x44, 0x67, 0x50, 0xC1, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, -0x50, 0x9A, 0x01, 0x6B, 0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, -0x4C, 0x9A, 0x00, 0xF4, 0x05, 0x6B, 0x60, 0xCA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x20, 0xF2, 0x54, 0x9A, 0x00, 0x6B, 0x60, 0xC2, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x12, 0xF0, 0x06, 0x6B, 0x60, 0xF6, 0x6C, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x00, 0xF3, 0x48, 0x9A, 0x01, 0x6B, 0x6E, 0xEA, 0x08, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x20, 0xF2, 0x58, 0x9A, 0x1B, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x00, 0xF3, 0x48, 0x9A, 0x02, 0x6B, 0x6E, 0xEA, 0x10, 0x2A, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x5C, 0x9A, 0x02, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x20, 0xF2, 0x58, 0x9A, 0x0B, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x40, 0x9A, 0x00, 0xF4, 0x00, 0x6B, 0x60, 0xCA, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x40, 0xF2, 0x44, 0x9A, 0x70, 0xA1, 0x60, 0xDA, 0x00, 0x6A, -0x40, 0xD9, 0x0D, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x60, 0xF6, 0x4C, 0x9A, -0x12, 0xF0, 0x04, 0x6B, 0x6E, 0xEA, 0x09, 0x22, 0x40, 0x99, 0x01, 0x4A, 0x40, 0xD9, 0x40, 0x99, -0xE5, 0xF7, 0x1F, 0x5A, 0x58, 0x67, 0xEE, 0x2A, 0x01, 0x10, 0x00, 0x65, 0xB9, 0x65, 0x03, 0x91, -0x02, 0x63, 0x20, 0xE8, 0xFE, 0x63, 0x03, 0xD1, 0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x80, 0xF2, 0x50, 0x9A, 0x40, 0x9A, 0x41, 0xD9, 0x61, 0x99, 0x02, 0x6A, 0x4B, 0xEA, -0x6C, 0xEA, 0x41, 0xD9, 0x00, 0x6A, 0x40, 0xD9, 0x03, 0x10, 0x40, 0x99, 0x01, 0x4A, 0x40, 0xD9, -0x40, 0x99, 0x0A, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x80, 0xF2, 0x50, 0x9A, 0x61, 0x99, 0x60, 0xDA, 0x00, 0x6A, 0x40, 0xD9, 0x03, 0x10, 0x40, 0x99, -0x01, 0x4A, 0x40, 0xD9, 0x40, 0x99, 0x32, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xA0, 0xF2, 0x48, 0x9A, 0x40, 0x9A, 0x41, 0xD9, 0x00, 0x6A, 0x40, 0xD9, -0x03, 0x10, 0x40, 0x99, 0x01, 0x4A, 0x40, 0xD9, 0x40, 0x99, 0x32, 0x5A, 0x58, 0x67, 0xF9, 0x2A, -0x61, 0x99, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF2, 0x4C, 0x9A, 0x6D, 0xEA, -0x41, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF2, 0x48, 0x9A, 0x61, 0x99, -0x60, 0xDA, 0x00, 0x6A, 0x40, 0xD9, 0x03, 0x10, 0x40, 0x99, 0x01, 0x4A, 0x40, 0xD9, 0x40, 0x99, -0x32, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x61, 0x99, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xA0, 0xF2, 0x50, 0x9A, 0x6C, 0xEA, 0x41, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xA0, 0xF2, 0x48, 0x9A, 0x61, 0x99, 0x60, 0xDA, 0x00, 0x6A, 0x40, 0xD9, 0x03, 0x10, 0x40, 0x99, -0x01, 0x4A, 0x40, 0xD9, 0x40, 0x99, 0x32, 0x5A, 0x58, 0x67, 0xF9, 0x2A, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xA0, 0xF2, 0x54, 0x9A, 0x40, 0x9A, 0x41, 0xD9, 0x61, 0x99, 0x01, 0x6A, -0x6D, 0xEA, 0x41, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF2, 0x54, 0x9A, -0x61, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, 0x50, 0x9A, -0x40, 0x9A, 0x41, 0xD9, 0x61, 0x99, 0x01, 0x6A, 0x6D, 0xEA, 0x41, 0xD9, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, 0x50, 0x9A, 0x61, 0x99, 0x60, 0xDA, 0xB9, 0x65, 0x03, 0x91, -0x02, 0x63, 0x20, 0xE8, 0xFE, 0x63, 0x03, 0xD1, 0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x80, 0xF2, 0x50, 0x9A, 0x40, 0x9A, 0x40, 0xD9, 0x60, 0x99, 0x02, 0x6A, 0x4B, 0xEA, -0x6C, 0xEA, 0x40, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, 0x50, 0x9A, -0x60, 0x99, 0x60, 0xDA, 0xB9, 0x65, 0x03, 0x91, 0x02, 0x63, 0x20, 0xE8, 0xFE, 0x63, 0x03, 0xD1, -0x3D, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, 0x50, 0x9A, 0x40, 0x9A, -0x40, 0xD9, 0x60, 0x99, 0x03, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, 0x40, 0xD9, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, 0x50, 0x9A, 0x60, 0x99, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xA0, 0xF2, 0x58, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, -0xA0, 0xF2, 0x7C, 0x9B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF2, -0x54, 0x9A, 0x40, 0x9A, 0x40, 0xD9, 0x60, 0x99, 0x02, 0x6A, 0x6D, 0xEA, 0x40, 0xD9, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF2, 0x54, 0x9A, 0x60, 0x99, 0x60, 0xDA, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xA0, 0xF2, 0x58, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, -0x60, 0x33, 0xC0, 0xF2, 0x60, 0x9B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x80, 0xF2, 0x50, 0x9A, 0x40, 0x9A, 0x40, 0xD9, 0x60, 0x99, 0x02, 0x6A, 0x6D, 0xEA, 0x40, 0xD9, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, 0x50, 0x9A, 0x60, 0x99, 0x60, 0xDA, -0xB9, 0x65, 0x03, 0x91, 0x02, 0x63, 0x20, 0xE8, 0xFE, 0x63, 0x03, 0xD1, 0x3D, 0x67, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF2, 0x50, 0x9A, 0x40, 0x9A, 0x40, 0xD9, 0x60, 0x99, -0x03, 0x6A, 0x4B, 0xEA, 0x6C, 0xEA, 0x40, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x80, 0xF2, 0x50, 0x9A, 0x60, 0x99, 0x60, 0xDA, 0xB9, 0x65, 0x03, 0x91, 0x02, 0x63, 0x20, 0xE8, -0xFC, 0x63, 0x07, 0xD1, 0x3D, 0x67, 0x64, 0x67, 0x45, 0x67, 0x20, 0xF0, 0x60, 0xC1, 0x20, 0xF0, -0x44, 0xC1, 0x00, 0x6A, 0x43, 0xD9, 0x00, 0x6A, 0x48, 0xC1, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x60, 0xF2, 0x44, 0x9A, 0x40, 0x9A, 0x40, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x60, 0xF2, 0x44, 0x9A, 0x00, 0x6B, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x00, 0xF0, 0x04, 0x4A, 0x41, 0xD9, 0x48, 0xA1, 0x45, 0xD9, 0x20, 0xF0, 0x40, 0xA1, -0x04, 0x6B, 0x6E, 0xEA, 0x20, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, -0x54, 0xA2, 0x62, 0x67, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, -0x44, 0xAA, 0x6E, 0xEA, 0x60, 0xF1, 0x0F, 0x22, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xC0, 0xF6, 0x14, 0x4A, 0x64, 0xAA, 0xFF, 0x6A, 0x4C, 0xEB, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x00, 0xF3, 0x74, 0xC2, 0x20, 0xF0, 0x40, 0xA1, 0x07, 0x5A, 0x78, 0x67, 0x40, 0xF1, -0x07, 0x23, 0x48, 0x33, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF2, 0x04, 0x4A, -0x49, 0xE3, 0x40, 0x9A, 0x00, 0xEA, 0x20, 0xF0, 0x44, 0xA1, 0x45, 0xD9, 0x45, 0x99, 0x40, 0x32, -0x40, 0x32, 0x00, 0xF5, 0x00, 0x4A, 0x45, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xC0, 0xF2, 0x44, 0x9A, 0x65, 0x99, 0x60, 0xDA, 0x00, 0x6A, 0x44, 0xD9, 0x12, 0x10, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF2, 0x44, 0x9A, 0x20, 0xF0, 0x84, 0xA1, 0x64, 0x99, -0x6D, 0xE4, 0x68, 0x33, 0x81, 0x99, 0x6D, 0xE4, 0x60, 0x9B, 0x60, 0xDA, 0x44, 0x99, 0x01, 0x4A, -0x44, 0xD9, 0x44, 0x99, 0x04, 0x5A, 0x58, 0x67, 0xEA, 0x2A, 0x12, 0x11, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x41, 0xA2, 0x45, 0xD9, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x40, 0x9A, 0x61, 0x42, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, -0x40, 0x32, 0x00, 0xF3, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, -0x40, 0x9A, 0x80, 0x6B, 0x6E, 0xEA, 0x07, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x00, 0x6B, 0x00, 0xF3, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF2, -0x44, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x00, 0xF3, 0x60, 0x9B, 0x60, 0x34, -0x65, 0x99, 0x60, 0x33, 0x60, 0x33, 0x6D, 0xE4, 0x41, 0x4B, 0x60, 0xDA, 0x00, 0x6A, 0x45, 0xD9, -0x00, 0x6A, 0x44, 0xD9, 0x14, 0x10, 0x45, 0x99, 0x40, 0x32, 0x45, 0xD9, 0x05, 0x6B, 0x44, 0x99, -0x4F, 0xE3, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x80, 0xF6, 0x08, 0x4A, 0x49, 0xE3, -0x40, 0xA2, 0x65, 0x99, 0x49, 0xE3, 0x45, 0xD9, 0x44, 0x99, 0x01, 0x4A, 0x44, 0xD9, 0x44, 0x99, -0x04, 0x5A, 0x58, 0x67, 0xE8, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF2, -0x44, 0x9A, 0x65, 0x99, 0x60, 0xDA, 0xB4, 0x10, 0x20, 0xF0, 0x44, 0xA1, 0x45, 0xD9, 0x45, 0x99, -0x40, 0x32, 0x40, 0x32, 0x45, 0xD9, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF2, -0x44, 0x9A, 0x85, 0x99, 0x00, 0xF2, 0x02, 0x6B, 0x8D, 0xEB, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0xC0, 0xF2, 0x44, 0x9A, 0x20, 0xF0, 0x64, 0xA1, 0x68, 0x33, 0x81, 0x99, -0x6D, 0xE4, 0x60, 0x9B, 0x60, 0xDA, 0x94, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x00, 0xF3, 0x40, 0x9A, 0x61, 0x42, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x40, 0x9A, 0x80, 0x6B, -0x6E, 0xEA, 0x07, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0x6B, 0x00, 0xF3, -0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF6, 0x14, 0x4A, 0x44, 0xAA, -0x01, 0x6B, 0x6E, 0xEA, 0x16, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF2, -0x44, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x00, 0xF3, 0x60, 0x9B, 0x60, 0x34, -0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0xC0, 0xF2, 0x68, 0x9B, 0x6D, 0xE4, 0x60, 0xDA, -0x57, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF2, 0x44, 0x9A, 0x10, 0xF0, -0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x00, 0xF3, 0x60, 0x9B, 0x60, 0x33, 0x24, 0x4B, 0x60, 0xDA, -0x47, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x40, 0x9A, 0x61, 0x42, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x60, 0xDA, 0x10, 0xF0, 0x10, 0x6A, -0x40, 0x32, 0x40, 0x32, 0x00, 0xF3, 0x40, 0x9A, 0x80, 0x6B, 0x6E, 0xEA, 0x07, 0x2A, 0x10, 0xF0, -0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0x00, 0x6B, 0x00, 0xF3, 0x60, 0xDA, 0x20, 0xF0, 0x44, 0xA1, -0x01, 0x6B, 0x6E, 0xEA, 0x16, 0x2A, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF2, -0x44, 0x9A, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x00, 0xF3, 0x60, 0x9B, 0x60, 0x34, -0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0xC0, 0xF2, 0x6C, 0x9B, 0x6D, 0xE4, 0x60, 0xDA, -0x0F, 0x10, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF2, 0x44, 0x9A, 0x10, 0xF0, -0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0x00, 0xF3, 0x60, 0x9B, 0x60, 0x33, 0x26, 0x4B, 0x60, 0xDA, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF2, 0x50, 0x9A, 0x40, 0x9A, 0x45, 0xD9, -0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xC0, 0xF2, 0x50, 0x9A, 0x85, 0x99, 0x01, 0x6B, -0x8D, 0xEB, 0x60, 0xDA, 0x01, 0x10, 0x00, 0x65, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0x60, 0xF2, 0x44, 0x9A, 0x60, 0x99, 0x60, 0xDA, 0xB9, 0x65, 0x07, 0x91, 0x04, 0x63, 0x20, 0xE8, -0xFD, 0x63, 0x05, 0xD1, 0x3D, 0x67, 0x86, 0xD9, 0xA7, 0xD9, 0x00, 0x6A, 0x41, 0xD9, 0x41, 0x99, -0x42, 0xD9, 0x46, 0x99, 0x43, 0xD9, 0x34, 0x10, 0x41, 0xA1, 0x30, 0x5A, 0x58, 0x67, 0x08, 0x2A, -0x41, 0xA1, 0x3A, 0x5A, 0x58, 0x67, 0x04, 0x22, 0x41, 0xA1, 0xD0, 0x4A, 0x40, 0xC1, 0x1A, 0x10, -0x41, 0xA1, 0x61, 0x5A, 0x58, 0x67, 0x08, 0x2A, 0x41, 0xA1, 0x67, 0x5A, 0x58, 0x67, 0x04, 0x22, -0x41, 0xA1, 0xA9, 0x4A, 0x40, 0xC1, 0x0E, 0x10, 0x41, 0xA1, 0x41, 0x5A, 0x58, 0x67, 0x08, 0x2A, -0x41, 0xA1, 0x47, 0x5A, 0x58, 0x67, 0x04, 0x22, 0x41, 0xA1, 0xC9, 0x4A, 0x40, 0xC1, 0x02, 0x10, -0x00, 0x6A, 0x1F, 0x10, 0x41, 0x99, 0x50, 0x33, 0x40, 0xA1, 0x49, 0xE3, 0x42, 0xD9, 0x62, 0x99, -0x41, 0x99, 0x43, 0xEB, 0x58, 0x67, 0x02, 0x22, 0x00, 0x6A, 0x13, 0x10, 0x42, 0x99, 0x41, 0xD9, -0x43, 0x99, 0x40, 0xA2, 0x41, 0xC1, 0x00, 0x6A, 0x61, 0xA1, 0x01, 0x23, 0x01, 0x6A, 0xFF, 0x6B, -0x6C, 0xEA, 0x63, 0x99, 0x01, 0x4B, 0x63, 0xD9, 0xBF, 0x2A, 0x47, 0x99, 0x61, 0x99, 0x60, 0xDA, -0x01, 0x6A, 0xB9, 0x65, 0x05, 0x91, 0x03, 0x63, 0x20, 0xE8, 0x00, 0x65, 0xF3, 0x63, 0x19, 0x62, -0x18, 0xD1, 0x04, 0x01, 0x96, 0xD9, 0xB7, 0xD9, 0xD8, 0xD9, 0x56, 0x99, 0x4B, 0xD9, 0xB5, 0x11, -0x57, 0x99, 0x40, 0x82, 0x25, 0x6B, 0x6E, 0xEA, 0x10, 0x22, 0x56, 0x99, 0x08, 0x22, 0x57, 0x99, -0x60, 0x82, 0x4B, 0x99, 0x60, 0xC2, 0x4B, 0x99, 0x01, 0x4A, 0x4B, 0xD9, 0xA3, 0x11, 0x57, 0x99, -0x40, 0x82, 0x82, 0x67, 0x00, 0x18, 0x3B, 0x03, 0x9D, 0x11, 0x57, 0x99, 0x01, 0x4A, 0x57, 0xD9, -0x57, 0x99, 0x40, 0x82, 0x73, 0x6B, 0x6E, 0xEA, 0x1D, 0x2A, 0x58, 0x99, 0x40, 0x9A, 0x4C, 0xD9, -0x58, 0x99, 0x04, 0x4A, 0x58, 0xD9, 0x12, 0x10, 0x56, 0x99, 0x08, 0x22, 0x4C, 0x99, 0x60, 0x82, -0x4B, 0x99, 0x60, 0xC2, 0x4B, 0x99, 0x01, 0x4A, 0x4B, 0xD9, 0x05, 0x10, 0x4C, 0x99, 0x40, 0x82, -0x82, 0x67, 0x00, 0x18, 0x3B, 0x03, 0x4C, 0x99, 0x01, 0x4A, 0x4C, 0xD9, 0x4C, 0x99, 0x40, 0x82, -0xEB, 0x2A, 0x78, 0x11, 0x47, 0x41, 0x2D, 0x4A, 0x4A, 0xD9, 0x00, 0x6A, 0x49, 0xD9, 0x04, 0x6A, -0x48, 0xD9, 0x57, 0x99, 0x40, 0x82, 0x23, 0x6B, 0x6E, 0xEA, 0x05, 0x2A, 0x01, 0x6A, 0x49, 0xD9, -0x57, 0x99, 0x01, 0x4A, 0x57, 0xD9, 0x57, 0x99, 0x40, 0x82, 0x68, 0x6B, 0x6E, 0xEA, 0x05, 0x2A, -0x0C, 0x6A, 0x48, 0xD9, 0x57, 0x99, 0x01, 0x4A, 0x57, 0xD9, 0x57, 0x99, 0x40, 0x82, 0x68, 0x6B, -0x6E, 0xEA, 0x05, 0x2A, 0x04, 0x6A, 0x48, 0xD9, 0x57, 0x99, 0x01, 0x4A, 0x57, 0xD9, 0x57, 0x99, -0x60, 0x82, 0x20, 0x6A, 0x6D, 0xEA, 0x00, 0xF6, 0x40, 0x32, 0x00, 0xF6, 0x43, 0x32, 0x78, 0x6B, -0x6E, 0xEA, 0x4F, 0x2A, 0x58, 0x99, 0x47, 0xD9, 0x47, 0x99, 0x40, 0x9A, 0x46, 0xD9, 0x47, 0x99, -0x04, 0x4A, 0x47, 0xD9, 0x57, 0x99, 0x60, 0x82, 0xFF, 0x6A, 0x6C, 0xEA, 0x62, 0x67, 0x20, 0x6A, -0x6C, 0xEA, 0x45, 0xD9, 0x47, 0x99, 0x58, 0xD9, 0x49, 0x99, 0x36, 0x22, 0x4A, 0x99, 0x30, 0x6B, -0x60, 0xC2, 0x4A, 0x99, 0x01, 0x4A, 0x4A, 0xD9, 0x45, 0x99, 0x00, 0xF6, 0x40, 0x33, 0x00, 0xF6, -0x63, 0x33, 0x58, 0x6A, 0x6D, 0xEA, 0x00, 0xF6, 0x40, 0x33, 0x00, 0xF6, 0x63, 0x33, 0x4A, 0x99, -0x60, 0xC2, 0x4A, 0x99, 0x01, 0x4A, 0x4A, 0xD9, 0x1F, 0x10, 0x66, 0x99, 0x48, 0x99, 0x67, 0xEA, -0x0F, 0x6A, 0x4C, 0xEB, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, 0xE0, 0xF2, 0x00, 0x4A, -0x49, 0xE3, 0x60, 0x82, 0x45, 0x99, 0x00, 0xF6, 0x40, 0x32, 0x00, 0xF6, 0x43, 0x32, 0x6D, 0xEA, -0x00, 0xF6, 0x40, 0x33, 0x00, 0xF6, 0x63, 0x33, 0x4A, 0x99, 0x60, 0xC2, 0x4A, 0x99, 0x01, 0x4A, -0x4A, 0xD9, 0x48, 0x99, 0xFC, 0x4A, 0x48, 0xD9, 0x48, 0x99, 0x00, 0x52, 0x58, 0x67, 0xDD, 0x22, -0xDE, 0x10, 0x57, 0x99, 0x40, 0x82, 0x64, 0x6B, 0x6E, 0xEA, 0x62, 0x2A, 0x58, 0x99, 0x40, 0x9A, -0x44, 0xD9, 0x58, 0x99, 0x04, 0x4A, 0x58, 0xD9, 0x44, 0x99, 0x00, 0x52, 0x58, 0x67, 0x09, 0x22, -0x4A, 0x99, 0x2D, 0x6B, 0x60, 0xC2, 0x4A, 0x99, 0x01, 0x4A, 0x4A, 0xD9, 0x44, 0x99, 0x4B, 0xEA, -0x44, 0xD9, 0x4A, 0x99, 0x4C, 0xD9, 0x64, 0x99, 0x10, 0xF0, 0x10, 0x6A, 0x40, 0x32, 0x40, 0x32, -0xE0, 0xF2, 0x54, 0x9A, 0x58, 0xEB, 0x10, 0xEA, 0x4B, 0x34, 0xC0, 0xF7, 0x63, 0x32, 0x4B, 0xE4, -0x44, 0x32, 0x48, 0x34, 0x89, 0xE2, 0x4B, 0xE3, 0xFF, 0x6B, 0x6C, 0xEA, 0x67, 0x42, 0x29, 0x4B, -0xFF, 0x6A, 0x6C, 0xEA, 0x00, 0xF6, 0x40, 0x33, 0x00, 0xF6, 0x63, 0x33, 0x4A, 0x99, 0x60, 0xC2, -0x4A, 0x99, 0x01, 0x4A, 0x4A, 0xD9, 0x44, 0x99, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, -0xE0, 0xF2, 0x74, 0x9B, 0x78, 0xEA, 0x10, 0xEB, 0x6B, 0x33, 0xC0, 0xF7, 0x43, 0x32, 0x4B, 0xE3, -0x44, 0xD9, 0x44, 0x99, 0xD0, 0x2A, 0x4A, 0x99, 0x43, 0xD9, 0x11, 0x10, 0x43, 0x99, 0x40, 0x82, -0x44, 0xD9, 0x4C, 0x99, 0x60, 0x82, 0x43, 0x99, 0x60, 0xC2, 0x44, 0x99, 0x00, 0xF6, 0x40, 0x33, -0x00, 0xF6, 0x63, 0x33, 0x4C, 0x99, 0x60, 0xC2, 0x4C, 0x99, 0x01, 0x4A, 0x4C, 0xD9, 0x43, 0x99, -0xFF, 0x4A, 0x43, 0xD9, 0x63, 0x99, 0x4C, 0x99, 0x63, 0xEA, 0x58, 0x67, 0xE7, 0x2A, 0x77, 0x10, -0x57, 0x99, 0x40, 0x82, 0x40, 0x6B, 0x6E, 0xEA, 0x2C, 0x2A, 0x58, 0x99, 0x41, 0xD9, 0x41, 0x99, -0x40, 0x9A, 0x52, 0xD9, 0x41, 0x99, 0x04, 0x4A, 0x41, 0xD9, 0x41, 0x99, 0x58, 0xD9, 0x47, 0x41, -0x41, 0x4A, 0x42, 0xD9, 0x13, 0x10, 0x42, 0x99, 0x40, 0xA2, 0x8A, 0x99, 0x10, 0xF0, 0x10, 0x6B, -0x60, 0x33, 0x60, 0x33, 0xC0, 0xF2, 0x14, 0x4B, 0xA3, 0x67, 0xC2, 0x67, 0x00, 0x18, 0xD6, 0x10, -0x6A, 0x99, 0x49, 0xE3, 0x4A, 0xD9, 0x42, 0x99, 0x01, 0x4A, 0x42, 0xD9, 0x47, 0x41, 0x41, 0x4A, -0x64, 0x42, 0x42, 0x99, 0x63, 0xEA, 0x58, 0x67, 0xE6, 0x2A, 0x4A, 0x99, 0xFF, 0x4A, 0x4A, 0xD9, -0x46, 0x10, 0x57, 0x99, 0x40, 0x82, 0x21, 0x6B, 0x6E, 0xEA, 0x26, 0x2A, 0x58, 0x99, 0x40, 0x9A, -0x4C, 0xD9, 0x58, 0x99, 0x04, 0x4A, 0x58, 0xD9, 0x4C, 0x99, 0x06, 0x4A, 0x40, 0xD9, 0x13, 0x10, -0x4C, 0x99, 0x40, 0x82, 0x8A, 0x99, 0x10, 0xF0, 0x10, 0x6B, 0x60, 0x33, 0x60, 0x33, 0xC0, 0xF2, -0x18, 0x4B, 0xA3, 0x67, 0xC2, 0x67, 0x00, 0x18, 0xD6, 0x10, 0x6A, 0x99, 0x49, 0xE3, 0x4A, 0xD9, -0x4C, 0x99, 0x01, 0x4A, 0x4C, 0xD9, 0x6C, 0x99, 0x40, 0x99, 0x43, 0xEB, 0x58, 0x67, 0xE8, 0x2A, -0x4A, 0x99, 0xFF, 0x4A, 0x4A, 0xD9, 0x1B, 0x10, 0x57, 0x99, 0x40, 0x82, 0x63, 0x6B, 0x6E, 0xEA, -0x0F, 0x2A, 0x58, 0x99, 0x40, 0x9A, 0x00, 0xF6, 0x40, 0x33, 0x00, 0xF6, 0x63, 0x33, 0x4A, 0x99, -0x60, 0xC2, 0x4A, 0x99, 0x01, 0x4A, 0x4A, 0xD9, 0x58, 0x99, 0x04, 0x4A, 0x58, 0xD9, 0x07, 0x10, -0x57, 0x99, 0x60, 0x82, 0x4A, 0x99, 0x60, 0xC2, 0x4A, 0x99, 0x01, 0x4A, 0x4A, 0xD9, 0x47, 0x41, -0x2D, 0x4A, 0x4C, 0xD9, 0x12, 0x10, 0x56, 0x99, 0x08, 0x22, 0x4C, 0x99, 0x60, 0x82, 0x4B, 0x99, -0x60, 0xC2, 0x4B, 0x99, 0x01, 0x4A, 0x4B, 0xD9, 0x05, 0x10, 0x4C, 0x99, 0x40, 0x82, 0x82, 0x67, -0x00, 0x18, 0x3B, 0x03, 0x4C, 0x99, 0x01, 0x4A, 0x4C, 0xD9, 0x6C, 0x99, 0x4A, 0x99, 0x43, 0xEB, -0x58, 0x67, 0xE9, 0x2A, 0x57, 0x99, 0x01, 0x4A, 0x57, 0xD9, 0x57, 0x99, 0x40, 0x82, 0x5F, 0xF6, -0x07, 0x2A, 0x56, 0x99, 0x03, 0x22, 0x4B, 0x99, 0x00, 0x6B, 0x60, 0xC2, 0x6B, 0x99, 0x56, 0x99, -0x4B, 0xE3, 0xB9, 0x65, 0x15, 0x97, 0x14, 0x91, 0x0B, 0x63, 0x00, 0xEF, 0xFD, 0x63, 0x05, 0x62, -0x04, 0xD1, 0x04, 0x01, 0xA3, 0xD9, 0xC4, 0xD9, 0xE5, 0xD9, 0x82, 0xD9, 0x62, 0x99, 0x47, 0x41, -0x01, 0x4A, 0x04, 0x4A, 0x00, 0x6C, 0xA3, 0x67, 0xC2, 0x67, 0x00, 0x18, 0xE3, 0x0F, 0xB9, 0x65, -0x01, 0x97, 0x00, 0x91, 0x01, 0x63, 0x00, 0xEF, 0xFD, 0x63, 0x05, 0x62, 0x04, 0xD1, 0x04, 0x01, -0x82, 0xD9, 0xC4, 0xD9, 0xE5, 0xD9, 0xA3, 0xD9, 0x63, 0x99, 0x47, 0x41, 0x05, 0x4A, 0x04, 0x4A, -0x82, 0x99, 0xA3, 0x67, 0xC2, 0x67, 0x00, 0x18, 0xE3, 0x0F, 0xB9, 0x65, 0x01, 0x97, 0x00, 0x91, -0x01, 0x63, 0x00, 0xEF, -}; - - -uint8_t NFCFWDMEM[]={ -0x13, 0x24, 0x08, 0x15, -0x58, 0x53, 0x9B, 0x18, 0x22, 0xB6, 0x28, 0x80, 0x3C, 0x48, 0x00, 0x00, 0xE1, 0x11, 0x12, 0x00, -0x01, 0x03, 0xA0, 0x10, 0x44, 0x03, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x20, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, 0x21, 0x22, 0x00, 0x00, 0x00, -0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, -0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x56, 0x15, 0x08, 0x24, 0x01, 0x03, 0x00, 0x00, -0x18, 0x00, 0x00, 0x93, 0x14, 0x00, 0x00, 0x9F, 0x84, 0x00, 0x00, 0x9F, 0x08, 0x10, 0x00, 0x90, -0x1C, 0x10, 0x00, 0x90, 0x60, 0x20, 0x00, 0x90, 0x48, 0x20, 0x00, 0x90, 0x04, 0x20, 0x00, 0x90, -0x00, 0x20, 0x00, 0x90, 0x54, 0x00, 0x00, 0x94, 0xFF, 0xFF, 0x0F, 0x00, 0x1C, 0x04, 0x00, 0x94, -0x00, 0x00, 0x01, 0x00, 0x50, 0x00, 0x00, 0x94, 0x74, 0x00, 0x00, 0x94, 0x00, 0x00, 0x04, 0x20, -0xFF, 0xFF, 0xF7, 0xBF, 0x00, 0x00, 0x08, 0x40, 0x70, 0x01, 0x00, 0x94, 0xA0, 0x20, 0x20, 0x00, -0xFF, 0xFF, 0xFE, 0xFF, 0x58, 0x00, 0x00, 0x94, 0xFF, 0xAF, 0x0E, 0x00, 0x5C, 0x00, 0x00, 0x94, -0x60, 0x00, 0x00, 0x94, 0x0C, 0x00, 0x00, 0x94, 0x08, 0x08, 0x00, 0x94, 0x6C, 0x00, 0x00, 0x94, -0xFF, 0xFF, 0x03, 0xFC, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x20, 0x28, 0x07, 0x00, 0x94, -0x04, 0x04, 0x00, 0x94, 0x70, 0x00, 0x00, 0x94, 0x20, 0x07, 0x00, 0x94, 0xFF, 0xFF, 0xFF, 0xE0, -0x00, 0x00, 0x00, 0x0A, 0x24, 0x07, 0x00, 0x94, 0x38, 0x07, 0x00, 0x94, 0x28, 0x00, 0x00, 0x94, -0x04, 0x00, 0x00, 0x90, 0x0C, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x90, 0x14, 0x00, 0x00, 0x90, -0x10, 0x10, 0x00, 0x90, 0x0C, 0x10, 0x00, 0x90, 0x24, 0x10, 0x00, 0x90, 0x20, 0x10, 0x00, 0x90, -0x54, 0x00, 0x00, 0x9F, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x9F, 0x0C, 0x00, 0x00, 0x9F, -0xFC, 0x00, 0x00, 0x9F, 0x64, 0x00, 0x00, 0x9F, 0x60, 0x00, 0x00, 0x9F, 0x7C, 0x00, 0x00, 0x90, -0x2C, 0x00, 0x00, 0x94, 0xFF, 0xFF, 0xFF, 0xFE, 0x20, 0x01, 0x00, 0x94, 0x24, 0x01, 0x00, 0x94, -0x22, 0x00, 0x00, 0x93, 0x20, 0x00, 0x00, 0x93, 0x10, 0x00, 0x00, 0x93, 0x0A, 0x00, 0x00, 0x93, -0x00, 0x00, 0x00, 0x30, 0x0C, 0x00, 0x00, 0x93, 0x00, 0x10, 0x00, 0x90, 0x14, 0x10, 0x00, 0x90, -0xC4, 0x01, 0x64, 0xB8, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x0A, 0x00, 0x00, 0x73, 0x28, 0x00, 0x80, -0xA3, 0x28, 0x00, 0x80, 0x7D, 0x2A, 0x00, 0x80, 0x2B, 0x29, 0x00, 0x80, 0x7D, 0x2A, 0x00, 0x80, -0x7D, 0x2A, 0x00, 0x80, 0x7D, 0x2A, 0x00, 0x80, 0x7D, 0x2A, 0x00, 0x80, 0x7D, 0x2A, 0x00, 0x80, -0x7D, 0x2A, 0x00, 0x80, 0x7D, 0x2A, 0x00, 0x80, 0x7D, 0x2A, 0x00, 0x80, 0xD3, 0x29, 0x00, 0x80, -0x51, 0x28, 0x00, 0x80, 0x27, 0x3C, 0x00, 0x80, 0x7D, 0x3C, 0x00, 0x80, 0x39, 0x3D, 0x00, 0x80, -0xA1, 0x3E, 0x00, 0x80, 0x79, 0x3D, 0x00, 0x80, 0xA1, 0x3E, 0x00, 0x80, 0x13, 0x3E, 0x00, 0x80, -0x14, 0x00, 0x00, 0x9F, 0x12, 0x00, 0x00, 0x93, 0x14, 0x00, 0x00, 0x93, 0x16, 0x00, 0x00, 0x93, -0x10, 0x00, 0x00, 0x93, 0x26, 0x00, 0x00, 0x93, 0x5C, 0x00, 0x00, 0x94, 0x0C, 0x00, 0x00, 0x94, -0x08, 0x00, 0x00, 0x93, 0x0C, 0x00, 0x00, 0x93, 0x20, 0x00, 0x00, 0x9F, 0x00, 0x00, 0x34, 0x12, -0x01, 0x00, 0x34, 0x12, 0x22, 0x00, 0x00, 0x93, 0x18, 0x00, 0x00, 0x93, 0xFC, 0x00, 0x00, 0x9F, -0x80, 0x00, 0x00, 0x9F, 0x84, 0x00, 0x00, 0x9F, 0x0C, 0x00, 0x00, 0x9F, 0x03, 0x01, 0xD0, 0x00, -0x50, 0x00, 0x00, 0x9F, 0xF2, 0x00, 0x00, 0xA0, 0x08, 0x00, 0x00, 0x9F, 0x10, 0x00, 0x00, 0x9F, -0x02, 0x01, 0x70, 0x00, 0x01, 0x01, 0x70, 0x00, 0x24, 0x01, 0x00, 0x94, 0x00, 0x00, 0x20, 0x00, -0x2C, 0x00, 0x00, 0x94, 0x28, 0x00, 0x00, 0x94, 0x68, 0x01, 0x00, 0x94, 0x00, 0x00, 0x01, 0x00, -0x00, 0x00, 0x00, 0x01, 0xFE, 0xFF, 0x02, 0x00, 0x6C, 0x00, 0x00, 0x94, 0x00, 0x00, 0x02, 0x00, -0xFF, 0xFF, 0xFD, 0xFF, 0x20, 0x01, 0x00, 0x94, 0x70, 0x00, 0x00, 0x94, 0x00, 0xD0, 0x80, 0x3D, -0x00, 0x90, 0x80, 0x3D, 0x58, 0x00, 0x00, 0x9F, 0x24, 0x00, 0x01, 0x00, 0x26, 0x00, 0x01, 0x00, -0x68, 0x00, 0x00, 0x9F, 0x25, 0x64, 0x2E, 0x00, 0x25, 0x68, 0x68, 0x58, 0x3A, 0x00, 0x00, 0x00, -0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, -0x00, 0x00, 0x00, 0x00, 0x67, 0x66, 0x66, 0x66, -}; - - -//NFC_ADAPTER NFCAdapter; -IRQ_FUN LpPeriIrqFunTable[32]; -uint32_t LpPeriIrqDataTable[32]; - -void -WriteA2NMailbox( - IN void *pNFCAdapte -) -{ - PNFC_ADAPTER pNFCAdp = (PNFC_ADAPTER) pNFCAdapte; - uint8_t i = 0; - uint32_t RegTemp; - - if (!(pNFCAdp->A2NMAILQ[pNFCAdp->A2NWQRIdx].Response)) { - pNFCAdp->A2NMAILQ[pNFCAdp->A2NWQRIdx].Content[0] = - (pNFCAdp->A2NMAILQ[pNFCAdp->A2NWQRIdx].Content[0]|(pNFCAdp->A2NSeq << 8)); - pNFCAdp->A2NSeq++; - } - - for(i = 0; i < pNFCAdp->A2NMAILQ[pNFCAdp->A2NWQRIdx].Length; i++) { - HalDelayUs(30); - HAL_WRITE32(NFC_INTERFACE_BASE, 0x10, pNFCAdp->A2NMAILQ[pNFCAdp->A2NWQRIdx].Content[i]); - } - - HalDelayUs(30); - RegTemp = HAL_READ32(NFC_INTERFACE_BASE,0x24)|BIT1; - HAL_WRITE32(NFC_INTERFACE_BASE, 0x24, RegTemp); - - RegTemp = (HAL_READ32(NFC_INTERFACE_BASE,0x24)&(~BIT1)); - HAL_WRITE32(NFC_INTERFACE_BASE, 0x24, RegTemp); -} - -void -A2NWriteInQueue( - IN void *pNFCAdapte, - IN void *pBuff -) -{ - PNFC_ADAPTER pNFCAdp = (PNFC_ADAPTER) pNFCAdapte; - PA2N_MAILBOX_Q pA2NWData = (PA2N_MAILBOX_Q) pBuff; - uint8_t Idx; - - //Q full handle - if ((pNFCAdp->A2NWQWIdx == (pNFCAdp->A2NWQRIdx - 1))|| - ((pNFCAdp->A2NWQRIdx == 0)&&(pNFCAdp->A2NWQWIdx == N2A_Q_LENGTH - 1))){ - - DBG_8195A("A2N write Mailbox Queue full!\n"); - } - - for (Idx = 0; Idx < pA2NWData->Length; Idx++) { - pNFCAdp->A2NMAILQ[pNFCAdp->A2NWQWIdx].Content[Idx] = pA2NWData->Content[Idx]; - } - - pNFCAdp->A2NMAILQ[pNFCAdp->A2NWQWIdx].Length = pA2NWData->Length; - pNFCAdp->A2NMAILQ[pNFCAdp->A2NWQWIdx].Response = pA2NWData->Response; - pNFCAdp->A2NWQWIdx++; - - if (pNFCAdp->A2NWQWIdx == N2A_Q_LENGTH){ - pNFCAdp->A2NWQWIdx = 0; - } - - //check qu and enable task - if (pNFCAdp->A2NWQWIdx != pNFCAdp->A2NWQRIdx){ - pNFCAdp->A2NWMailBox = TRUE; - RtlUpSema(&(pNFCAdp->VeriSema)); - } - - - #if 0 - { - uint8_t i = 0; - uint8_t j = 0; - DBG_8195A("A2N idx = 0x%x \n", pNFCAdp->A2NWMailBox); - DBG_8195A("A2N write R idx = 0x%x \n", pNFCAdp->A2NWQRIdx); - DBG_8195A("A2N write W idx = 0x%x \n", pNFCAdp->A2NWQWIdx); - - for(i = 0;iA2NWQWIdx;i++) { - - DBG_8195A("A2N write queue %d, length = 0x%x \n", i, pNFCAdp->A2NMAILQ[i].Length); - DBG_8195A("A2N write queue %d, response = 0x%x \n", i, pNFCAdp->A2NMAILQ[i].Response); - for(j = 0;j < 5; j++) { - DBG_8195A("A2N write queue %d, data = 0x%x \n", i, pNFCAdp->A2NMAILQ[i].Content[j]); - } - } - } - #endif -} - -void -A2NWriteDeQueue( - IN void *pNFCAdapte -) -{ - PNFC_ADAPTER pNFCAdp = (PNFC_ADAPTER) pNFCAdapte; - uint32_t TimeIdx = 0; - - while(((HAL_READ32(NFC_INTERFACE_BASE, 0x14)>>1) & 0xf)!= 0){ - DBG_8195A("A2N Mailbox W MISC 0x%08x\n", ((HAL_READ32(NFC_INTERFACE_BASE, 0x14)>>1) & 0xf)); - HalDelayUs(30); - TimeIdx++; - if (TimeIdx > 10000){ - - DBG_8195A("A2N Mailbox write timeout\n"); - - //check qu and enable task - if (pNFCAdp->A2NWQWIdx != pNFCAdp->A2NWQRIdx){ - pNFCAdp->A2NWMailBox = TRUE; - RtlUpSema(&(pNFCAdp->VeriSema)); - } - return; - } - }; - - WriteA2NMailbox(pNFCAdapte); - - pNFCAdp->A2NWQRIdx++; - if (pNFCAdp->A2NWQRIdx == N2A_Q_LENGTH) { - pNFCAdp->A2NWQRIdx = 0; - } - - //check qu and enable task - if (pNFCAdp->A2NWQWIdx != pNFCAdp->A2NWQRIdx){ - pNFCAdp->A2NWMailBox = TRUE; - RtlUpSema(&(pNFCAdp->VeriSema)); - } - else { - pNFCAdp->A2NWMailBox = FALSE; - } -} - - -//cmd 0 -void -N2AReadTag( - IN void *pNFCAdapte, - IN uint8_t N2ARPage -) -{ - PNFC_ADAPTER pNFCAdp = (PNFC_ADAPTER)pNFCAdapte; - - nfc_tagread_callback (pNFCAdp, N2ARPage); -} - -void -A2NWriteCatch( - IN void *pNFCAdapte, - IN uint8_t N2AWPage, - IN uint8_t Length, - IN uint32_t *WData -) -{ - PNFC_ADAPTER pNFCAdp = (PNFC_ADAPTER)pNFCAdapte; - uint8_t Idx; - A2N_MAILBOX_Q DataTemp; - - DataTemp.Length = Length+1; - DataTemp.Response = 0; - DataTemp.Content[0] = (CATCH_WRITE|(DataTemp.Length<<5)|(N2AWPage<<16)); - for (Idx = 0; Idx < Length; Idx++) { - DataTemp.Content[Idx+1] = WData[Idx]; - } - A2NWriteInQueue(pNFCAdp, &DataTemp); -} - - -void -A2NReadCatch( - IN void *pNFCAdapte, - IN uint8_t A2NRPage -) -{ - A2N_MAILBOX_Q DataTemp; - - DataTemp.Length = 1; - DataTemp.Response = 0; - DataTemp.Content[0] = (CATCH_READ|(DataTemp.Length<<5)|(A2NRPage<<16)); - - A2NWriteInQueue((PNFC_ADAPTER)pNFCAdapte, &DataTemp); -} - - -//cmd 1 -void -N2AWriteTag( - IN void *pNFCAdapte, - IN uint8_t N2AWPage -) -{ - PNFC_ADAPTER pNFCAdp = (PNFC_ADAPTER)pNFCAdapte; - uint32_t wr_data; - - wr_data = HAL_READ32(NFC_INTERFACE_BASE, 0x18); - nfc_tagwrite_callback(pNFCAdp, N2AWPage, wr_data); -} - - -//cmd 3 -void -N2AReadCatch( - IN void *pNFCAdapte, - IN uint8_t N2ACatchRPage -) -{ - PNFC_ADAPTER pNFCAdp = (PNFC_ADAPTER)pNFCAdapte; - uint32_t TagBuf[4]; - - TagBuf[0] = HAL_READ32(NFC_INTERFACE_BASE, 0x18); - TagBuf[1] = HAL_READ32(NFC_INTERFACE_BASE, 0x18); - TagBuf[2] = HAL_READ32(NFC_INTERFACE_BASE, 0x18); - TagBuf[3] = HAL_READ32(NFC_INTERFACE_BASE, 0x18); - - nfc_cache_read_callback(pNFCAdp, N2ACatchRPage, TagBuf); -} - -//cmd 4 -void -NFCReaderPresent( - IN void *pNFCAdapte, - IN uint8_t State -) -{ - PNFC_ADAPTER pNFCAdp = (PNFC_ADAPTER)pNFCAdapte; - - if (State) { - DBG_8195A("NFC Reader Present\n"); - - //call app - nfc_event_callback(pNFCAdp, NFC_HAL_READER_PRESENT); - } -} - - -//cmd 5 -void -N2AMailboxState( - IN void *pNFCAdapte, - IN uint8_t State, - IN uint8_t Seq -) -{ - A2N_MAILBOX_Q MailData; - PNFC_ADAPTER pNFCAdp = (PNFC_ADAPTER)pNFCAdapte; - - pNFCAdp->N2ABoxOpen = State; - DBG_8195A("N2A Mailbox State = %d\n", pNFCAdp->N2ABoxOpen); - - if (State) { - MailData.Length = 1; - MailData.Response = 1; - MailData.Content[0] = (CONFIRM_N2A_BOX_STATE)|(0x1<<5)|((Seq|BIT7)<<8)|(ON<<16); - //WriteA2NMailbox(1, &MailData, 1); - A2NWriteInQueue(pNFCAdp, &MailData); - } -} - - -//cmd 6 -void -NFC25MClkReq( - IN void *pNFCAdapte, - IN uint8_t OP, - IN uint8_t Seq -) -{ - PNFC_ADAPTER pNFCAdp = (PNFC_ADAPTER)pNFCAdapte; - A2N_MAILBOX_Q MailData; - uint32_t RegTemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1); - if (OP) { - RegTemp = ((RegTemp & 0xFFFFC7FF)|(BIT_SYS_SYSPLL_CKSDR_EN|BIT_SYS_SYSPLL_CKSDR_DIV(2))); - } - else { - RegTemp = RegTemp & 0xFFFFC7FF; - } - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1, RegTemp); - - //write mailbox - MailData.Length = 1; - MailData.Response = 1; - MailData.Content[0] = (EXT_CLK_RSP)|(0x1<<5)|((Seq|BIT7)<<8)|(ON<<16); - //WriteA2NMailbox(pNFCAdp, &MailData); - A2NWriteInQueue(pNFCAdp, &MailData); -} - -void -NFCRoutine( - IN void *pNFCAdapte -) -{ - uint32_t N2ARData, N2AMISC; - uint8_t N2ARB2; - uint8_t Seq; - PNFC_ADAPTER pNFCAdp = (PNFC_ADAPTER)pNFCAdapte; - - //N2A MEM DATA - if (pNFCAdp->NFCIsr & (BIT0|BIT6)) { - pNFCAdp->NFCIsr &= ~(BIT6|BIT0); - - N2AMISC = ((HAL_READ32(NFC_INTERFACE_BASE, 0x1c)>>1)&0xf); - //DBG_8195A("NFC 0x1C = 0x%x \n", N2AMISC); - while (N2AMISC != 0){ - - N2ARData = HAL_READ32(NFC_INTERFACE_BASE, 0x18); - N2ARB2 = ((uint8_t)(N2ARData>>16)); - Seq = (uint8_t)(N2ARData>>8); - //DBG_8195A("NFC 0x18 = 0x%x \n", N2ARData); - - switch(N2ARData & 0x1F) { - case TAG_READ: - //get data - N2AReadTag(pNFCAdapte, N2ARB2); - //call app - - break; - case TAG_WRITE: - //get data - N2AWriteTag(pNFCAdapte, N2ARB2); - //call app - - break; - case CATCH_READ_DATA: - //get data - N2AReadCatch(pNFCAdapte, N2ARB2); - //call app - - break; - case NFC_R_PRESENT: - NFCReaderPresent(pNFCAdapte, N2ARB2); - break; - case N2A_MAILBOX_STATE: - N2AMailboxState(pNFCAdapte, N2ARB2, Seq); - break; - case EXT_CLK_REQ: - NFC25MClkReq(pNFCAdapte, N2ARB2, Seq); - break; - default: - break; - } - - N2AMISC = ((HAL_READ32(NFC_INTERFACE_BASE, 0x1c)>>1)&0xf); - } - } - - if(pNFCAdp->A2NWMailBox){ - A2NWriteDeQueue(pNFCAdp); - } - //enable int - //A2NWRITE32(0x68, 0xff00); -} - - -void -NFCTaskHandle( - IN void *pNFCAdapte -) -{ - PNFC_ADAPTER pNFCAdp = (PNFC_ADAPTER)pNFCAdapte; - - #if !TASK_SCHEDULER_DISABLED//#if !TASK_SCHEDULER_DISABLED(>>) - for (;;)//start of for(;;) - { - //4 waiting for start command - RtlDownSema(&(pNFCAdp->VeriSema)); - - if (pNFCAdp->TaskStop) { - break; // task stopping, break the for loop - } - NFCRoutine(pNFCAdapte); - - }//end of for(;;) - - pNFCAdp->TaskStop = 0; -#if ( INCLUDE_vTaskDelete == 1 ) - vTaskDelete(NULL); -#endif - #endif -} - -void -LPIrqHandle( - IN void *pNFCAdapte -) -{ - uint32_t LpIrqStatus, CheckIndex, ExactIrqStatus, TableIndex; - - //DBG_8195A("Enter ISR\n"); - - LpIrqStatus = HAL_READ32(VENDOR_REG_BASE, LP_PERI_EXT_IRQ_STATUS); - - //Save exact IRQ status - ExactIrqStatus = LpIrqStatus & - HAL_READ32(VENDOR_REG_BASE, LP_PERI_EXT_IRQ_EN); - - //Check exact IRQ function - for(CheckIndex = 0;CheckIndex<32;CheckIndex++) { - if (ExactIrqStatus & BIT_(CheckIndex)) { - TableIndex = CheckIndex; - LpPeriIrqFunTable[TableIndex]((void *)(LpPeriIrqDataTable[TableIndex])); - } - } - - //Clear sub-rout IRQ - HAL_WRITE32(VENDOR_REG_BASE, LP_PERI_EXT_IRQ_STATUS, LpIrqStatus); - -} - -void -NFCIrqHandle( - IN void *pNFCAdapte -) -{ - PNFC_ADAPTER pNFCAdp = (PNFC_ADAPTER)pNFCAdapte; - uint32_t ISR = HalNFCRead32(0x68); - pNFCAdp->NFCIsr = (((uint8_t)((ISR&0xbf00)>>8))&((uint8_t)ISR)); - //DBG_8195A("A2N 0x68 = 0x%x\n", ISR); - - //stop int - //ISR = ISR&0xff; - - HalNFCWrite32(0x68, ISR); - - //DBG_8195A("After clean ISR A2N 0x68 = 0x%x\n", A2NREAD32(0x68)); - RtlUpSema(&(pNFCAdp->VeriSema)); -} - -void HalNFCDmemInit( - IN uint32_t *pTagData, - IN uint32_t TagLen -) -{ - if (pTagData == NULL) { - return; - } - - uint32_t pgidx, dmemidx; - for (pgidx = 0, dmemidx = 4; pgidx> 0); - NFCFWDMEM[dmemidx++] = (uint8_t)((pTagData[pgidx] & 0x0000FF00) >> 8); - NFCFWDMEM[dmemidx++] = (uint8_t)((pTagData[pgidx] & 0x00FF0000) >> 16); - NFCFWDMEM[dmemidx++] = (uint8_t)((pTagData[pgidx] & 0xFF000000) >> 24); - } -} - -void -HalNFCInit( - PNFC_ADAPTER pNFCAdp -) -{ - uint32_t Rtemp = 0; - - _memset(pNFCAdp, 0, sizeof(NFC_ADAPTER)); - - //Enable NFC clk 0x244[17:16] = 3 - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_PESOC_COM_CLK_CTRL1)|0x00030000; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_PESOC_COM_CLK_CTRL1, Rtemp); - - //Enable A33 interface - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) | 0x80000000); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //Enabel NFC and release IOS33_Ameba - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009401); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - //polling ISO33_NFC 0x134 [0] = 0 - while ( (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_PERI_MONITOR)&BIT0) != 0 ){}; - - //DBG_8195A("NFC Initialization Finish\n"); - - //CLK 25M - { - uint32_t RegTemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1); - - RegTemp = ((RegTemp & 0xFFFFC7FF)|(BIT_SYS_SYSPLL_CKSDR_EN|BIT_SYS_SYSPLL_CKSDR_DIV(2))); - //RegTemp = ((RegTemp & 0xFFFFC7FF)|BIT13|BIT12); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_SYSPLL_CTRL1, RegTemp); - HAL_WRITE32(SYSTEM_CTRL_BASE, 0x244, HAL_READ32(SYSTEM_CTRL_BASE, 0x244)|BIT18); - } - - - //Init INT - { - IRQ_HANDLE NfcHandle; - NfcHandle.Data = (uint32_t) (pNFCAdp); - NfcHandle.IrqNum = LP_EXTENSION_IRQ;//NFC_IRQ; - NfcHandle.IrqFun = (IRQ_FUN) LPIrqHandle; - NfcHandle.Priority = 13; - - InterruptRegister(&NfcHandle); - InterruptEn(&NfcHandle); - - LpPeriIrqFunTable[1] = (IRQ_FUN)((uint32_t)NFCIrqHandle | 0x1); - - LpPeriIrqDataTable[1] = (uint32_t)(pNFCAdp); - //level trigger - HAL_WRITE32(VENDOR_REG_BASE, LP_PERI_EXT_IRQ_MODE,0); - //enable imr - HAL_WRITE32(VENDOR_REG_BASE, LP_PERI_EXT_IRQ_EN, - (HAL_READ32(VENDOR_REG_BASE, LP_PERI_EXT_IRQ_EN) | BIT1)); - HalNFCWrite32(0x68, 0xBF00); - //enable mailbox - HalNFCWrite32(0xfc, 0x2243); - - } - - #if !TASK_SCHEDULER_DISABLED - { - int32_t NFCTmpSts; - //create task - RtlInitSema(&(pNFCAdp->VeriSema),0); - NFCTmpSts = xTaskCreate( NFCTaskHandle, (const char *)"NFC_TASK", - ((1024*4)/sizeof(portBASE_TYPE)), (void *)pNFCAdp, 1, &(pNFCAdp->NFCTask)); - if (pdTRUE != NFCTmpSts ) { - DBG_NFC_ERR("HalNFCInit: Create Task Err(%d)!\n", NFCTmpSts); - } - } - #endif - -} - -void -HalNFCDeinit( - PNFC_ADAPTER pNFCAdp -) -{ - uint32_t i; - uint32_t Rtemp = 0; - - pNFCAdp->TaskStop = 1; - RtlUpSema(&(pNFCAdp->VeriSema)); - // wait sometime for the task be stooped - for(i=0;i<1000;i++) { - if (pNFCAdp->TaskStop == 0) { - break; - } - else { - RtlMsleepOS(100); - } - } - //4 free the task semaphore - RtlFreeSema(&(pNFCAdp->VeriSema)); - _memset(pNFCAdp, 0, sizeof(NFC_ADAPTER)); - - //4 Disable NFC clk - Rtemp = HAL_READ32(SYSTEM_CTRL_BASE, REG_PESOC_COM_CLK_CTRL1)&0xFFFCFFFF; - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_PESOC_COM_CLK_CTRL1, Rtemp); - - //4 Enable A33 interface - Rtemp = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) | 0x80000000); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); - - Rtemp = ((HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL) & 0xffff0000) | 0x00009404); - HAL_WRITE32(SYSTEM_CTRL_BASE, REG_SYS_DSLP_TIM_CTRL, Rtemp); -} - - -uint32_t -HalNFCRead32( - IN uint32_t Addr -) -{ - uint32_t Rtemp = 0; - uint32_t Idxtemp = 0; - - //full addr - HAL_WRITE32(NFC_INTERFACE_BASE, 0x0, (0x1f000000+Addr)); - //R_cmd - HAL_WRITE32(NFC_INTERFACE_BASE, 0x4, 0x2f); - - while(1) { - if( (HAL_READ32(NFC_INTERFACE_BASE, 0x4)&BIT7) == 0 ){ - Idxtemp++; - if((Idxtemp)%10000 == 0) { - DBG_8195A("Idxtemp: 0x%x\n", Idxtemp); - } - if (Idxtemp > 0x0fffff) { - DBG_8195A("A2N_OCP_MISC_R_IN_WHILE: 0x%x\r\n", HAL_READ32(NFC_INTERFACE_BASE, 0x4)); - DBG_8195A("Read FAIL!\r\n"); - return 0; - } - } - else { - //DBG_8195A("A2N_OCP_MISC_R_IN_WHILE: 0x%x\n", HAL_READ32(NFC_INTERFACE_BASE, 0x4)); - HAL_WRITE32(NFC_INTERFACE_BASE, 0x4, BIT7); - Rtemp = HAL_READ32(NFC_INTERFACE_BASE, 0xc); - break; - } - } - - return Rtemp; -} - -void -HalNFCWrite32( - IN uint32_t Addr, - IN uint32_t Data -) -{ - uint32_t Idxtemp = 0; - - //full addr - HAL_WRITE32(NFC_INTERFACE_BASE, 0x0, 0x1f000000+Addr); - //full data - HAL_WRITE32(NFC_INTERFACE_BASE, 0x8, Data); - //W_cmd - HAL_WRITE32(NFC_INTERFACE_BASE, 0x4, 0x1f); - - //polling 0x4[7]=1 - while(1) { - if( (HAL_READ32(NFC_INTERFACE_BASE, 0x4)&BIT7) == 0 ){ - Idxtemp++; - if((Idxtemp)%10000 == 0) { - DBG_8195A("Idxtemp: 0x%x\n", Idxtemp); - } - if (Idxtemp > 0x0fffff) { - DBG_8195A("A2N_OCP_MISC_R_IN_WHILE: 0x%x\r\n", HAL_READ32(NFC_INTERFACE_BASE, 0x4)); - DBG_8195A("write FAIL!\r\n"); - return; - } - } - else { - //DBG_8195A("A2N_OCP_MISC_W_IN_WHILE: 0x%x\n", HAL_READ32(NFC_INTERFACE_BASE, 0x4)); - HAL_WRITE32(NFC_INTERFACE_BASE, 0x4, BIT7); - break; - } - } -} - -void -HalNFCFwFullMEM( - IN void *Data, - IN uint32_t NFCFwLength -) -{ - uint32_t *NFCFW; - NFCFW = (uint32_t*) Data; - uint32_t Idx, NFCFwTemp, RTemp; - uint8_t Temp = (NFCFwLength%4); - uint32_t IdxTemp = ((NFCFwLength-Temp)/4); - uint8_t MEMTemp = 0; -// uint8_t MEMCnt = 0; - - uint32_t FWChkSum = 0; - - HalNFCWrite32(0x4C, 0x0); - - //write fw to MEM - for (Idx = 0; Idx < IdxTemp; Idx++ ) { - - NFCFwTemp = *(NFCFW+Idx); - HAL_WRITE32(NFC_INTERFACE_BASE, 0x10, NFCFwTemp); - - //cal chksum - FWChkSum ^= NFCFwTemp; - MEMTemp++; - HalDelayUs(1); - - if (MEMTemp == 8) { - - MEMTemp = 0; - - //check mem empty - while(1){ - - RTemp = HAL_READ32(NFC_INTERFACE_BASE, 0x14); -// MEMCnt = (((uint8_t)(RTemp & 0x1e)) >> 1); - - if ( RTemp & BIT6) { - break; - } - else { - } - } - } - } - - HalDelayUs(200); - - while(1){ - RTemp = HAL_READ32(NFC_INTERFACE_BASE, 0x14); - if ( RTemp & BIT6) { - break; - } - else { - } - } - - //write chksum - HAL_WRITE32(NFC_INTERFACE_BASE, 0x10, FWChkSum); - - while(1){ - RTemp = HAL_READ32(NFC_INTERFACE_BASE, 0x14); - if ( RTemp & BIT6) { - break; - } - else { - } - } -} - - -void -HalNFCFwDownload( - void -) -{ - uint32_t Rtemp = 0; - - //switch free run clock from 500K to 80M - HalNFCWrite32(0x88, 0xf06cf06c); - - //2 Download NFC FW - //3 Download IMEM - //setting fw download - HalNFCWrite32(0x48, 0x1); - - //reset NFC CPU - HalNFCWrite32(0x20, 0x1234FFFF); - - //switch IMEM - HAL_WRITE32(NFC_INTERFACE_BASE, 0x14, 0); - - //write fw to MEM - HalNFCFwFullMEM(NFCFWIMEM,sizeof(NFCFWIMEM)); - HalDelayUs(100); - - Rtemp = HalNFCRead32(0x48); - if(Rtemp & BIT1) { - // DBG_8195A("NFC FW Download IMEM SUCCESS \n"); - } - else { - DBG_8195A("NFC FW Download IMEM FAIL!\n"); - return; - } - - //3 Download DMEM - //setting fw download - HalNFCWrite32(0x48, 0x1); - - //switch DMEM - HAL_WRITE32(NFC_INTERFACE_BASE, 0x14, 1); - - //write fw to MEM - HalNFCFwFullMEM(NFCFWDMEM,sizeof(NFCFWDMEM)); - - HalDelayUs(100); - Rtemp = HalNFCRead32(0x48); - if(Rtemp & BIT1) { - //DBG_8195A("NFC FW Download DMEM SUCCESS \n"); - } - else { - DBG_8195A("NFC FW Download DMEM FAIL!\n"); - return; - } - - //Reset CPU - HalNFCWrite32(0x48, 0x80); - - DBG_8195A("NFC REBOOT SUCCESS \n"); -} - - -uint32_t -HalNFCDbgRead32( - - IN uint32_t Addr -) -{ - uint32_t Rtemp = 0; - uint32_t Idxtemp = 0; - - //full addr - HAL_WRITE32(NFC_INTERFACE_BASE, 0x0, Addr); - //R_cmd - HAL_WRITE32(NFC_INTERFACE_BASE, 0x4, 0x2f); - - while(1) { - if( (HAL_READ32(NFC_INTERFACE_BASE, 0x4)&BIT7) == 0 ){ - Idxtemp++; - if((Idxtemp)%10000 == 0) { - DBG_8195A("Idxtemp: 0x%x\n", Idxtemp); - } - if (Idxtemp > 0x0fffff) { - DBG_8195A("A2N_OCP_MISC_R_IN_WHILE: 0x%x\r\n", HAL_READ32(NFC_INTERFACE_BASE, 0x4)); - DBG_8195A("Read FAIL!\r\n"); - return 0; - } - } - else { - //DBG_8195A("A2N_OCP_MISC_R_IN_WHILE: 0x%x\n", HAL_READ32(NFC_INTERFACE_BASE, 0x4)); - HAL_WRITE32(NFC_INTERFACE_BASE, 0x4, BIT7); - Rtemp = HAL_READ32(NFC_INTERFACE_BASE, 0xc); - break; - } - } - - return Rtemp; -} - - -void -HalNFCDbgWrite32( - - IN uint32_t Addr, - IN uint32_t Data -) -{ - uint32_t Idxtemp = 0; - - //full addr - HAL_WRITE32(NFC_INTERFACE_BASE, 0x0, Addr); - //full data - HAL_WRITE32(NFC_INTERFACE_BASE, 0x8, Data); - //W_cmd - HAL_WRITE32(NFC_INTERFACE_BASE, 0x4, 0x1f); - - while(1) { - if( (HAL_READ32(NFC_INTERFACE_BASE, 0x4)&BIT7) == 0 ){ - Idxtemp++; - if((Idxtemp)%10000 == 0) { - DBG_8195A("Idxtemp: 0x%x\n", Idxtemp); - } - if (Idxtemp > 0x0fffff) { - DBG_8195A("A2N_OCP_MISC_R_IN_WHILE: 0x%x\r\n", HAL_READ32(NFC_INTERFACE_BASE, 0x4)); - DBG_8195A("write FAIL!\r\n"); - return; - } - } - else { - //DBG_8195A("A2N_OCP_MISC_W_IN_WHILE: 0x%x\n", HAL_READ32(NFC_INTERFACE_BASE, 0x4)); - HAL_WRITE32(NFC_INTERFACE_BASE, 0x4, BIT7); - break; - } - } -} - -#endif //CONFIG_NFC_EN -#endif //CONFIG_NFC_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_nfc.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_nfc.h deleted file mode 100644 index b92cee7..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_nfc.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#ifndef _RTL8195A_NFC_H_ -#define _RTL8195A_NFC_H_ - -#include "hal_api.h" -//#include "osdep_api.h" -#ifdef CONFIG_NFC_VERIFY -#include "../test/nfc/rtl8195a_nfc_test.h" -#endif - -#if CONFIG_NFC_NORMAL -//===================== Register Bit Field Definition ===================== -// TODO: -//===================== Register Address Definition ===================== -//TODO: -//#include "osdep_api.h" -#define N2A_Q_LENGTH 10 -#define N2ARLENGTH 4 -//#define NFCTAGLENGTH 36 // maximum 36*4=144 bytes -#define NFCTAG_BASE 0x7F000 -#define NFCTAG_PAGESIZE 256 -#define NFCTAG_MAXPAGEIDX 16//(4*(1024/NFCTAG_PAGESIZE)) -#define A2NWCLENGTH 4 - -#define FLASHAPPLENGTH 31 -#define FLASHAPP_BASE 0x7E000 -#define FLASH_PAGESIZE 128 -#define FLASH_MAXPAGEIDX 32//(4*(1024/FLASH_PAGESIZE)) - -typedef struct _A2N_CATCH_W_ { - //uint8_t Vaild; - uint8_t A2NCatchRPage; - uint32_t A2NCatchWData[A2NWCLENGTH]; -}A2N_CATCH_W_QUEUE, *PA2N_CATCH_W_QUEUE; - -typedef struct _A2N_MAILBOX_Q_ { - uint8_t Length; - uint8_t Response; - uint32_t Content[A2NWCLENGTH+1]; -}A2N_MAILBOX_Q,*PA2N_MAILBOX_Q; - -typedef struct _N2A_CATCH_R_ { - uint8_t Vaild; - uint8_t N2ACatchRPage; - uint32_t N2ACatchRData[N2ARLENGTH]; -}N2A_CATCH_R_QUEUE, *PN2A_CATCH_R_QUEUE; - - -typedef struct _N2A_R_ { - uint8_t Vaild; - uint8_t N2ARPage; -}N2A_R_QUEUE, *PN2A_R_QUEUE; - -typedef struct _N2A_W_ { - uint8_t Vaild; - uint8_t N2AWPage; - uint32_t N2AWData; -}N2A_W_QUEUE, *PN2A_W_QUEUE; - -typedef struct _NFC_ADAPTER_ { - uint8_t Function; - uint32_t NFCIsr; - uint8_t N2ABoxOpen; - uint8_t A2NSeq; - //uint8_t NFCTagFlashWIdx; - //uint8_t NFCTagFlashRIdx; -// uint32_t NFCTag[NFCTAGLENGTH]; -#if !TASK_SCHEDULER_DISABLED - void * VeriSema; -#else - uint32_t VeriSema; -#endif -#ifdef PLATFORM_FREERTOS - void * NFCTask; -#else - uint32_t NFCTask; -#endif -#ifdef CONFIG_NFC_VERIFY - //N2A Write Tag - uint8_t N2AWQRIdx; - uint8_t N2AWQWIdx; - N2A_W_QUEUE N2AWQ[N2A_Q_LENGTH]; - //N2A Read Tag - uint8_t N2ARQRIdx; - uint8_t N2ARQWIdx; - N2A_R_QUEUE N2ARQ[N2A_Q_LENGTH]; - //N2A Read Catch - uint8_t N2ARCRIdx; - uint8_t N2ARCWIdx; - N2A_CATCH_R_QUEUE N2ACatchR[N2A_Q_LENGTH]; -#endif - //A2N Write Catch - //uint8_t A2NWCRIdx; - //uint8_t A2NWCWIdx; - //A2N_CATCH_W_QUEUE A2NCatchW[N2A_Q_LENGTH]; - - //A2N Write mailbox queue - uint8_t A2NWMailBox; - uint8_t A2NWQRIdx; - uint8_t A2NWQWIdx; - A2N_MAILBOX_Q A2NMAILQ[N2A_Q_LENGTH]; - - uint8_t TaskStop; - void *nfc_obj; -}NFC_ADAPTER, *PNFC_ADAPTER; - -typedef enum _N2A_CMD_ { - TAG_READ = 0, - TAG_WRITE = 1, - CATCH_READ_DATA = 2, - NFC_R_PRESENT = 4, - N2A_MAILBOX_STATE = 5, - EXT_CLK_REQ = 6, - MAX_N2ACMD -} N2A_CMD, *PN2A_CMD; - -typedef enum _A2N_CMD_ { - TAG_READ_DATA = 0, - CATCH_READ = 2, - CATCH_WRITE = 3, - A2N_MAILBOX_STATE = 4, - CONFIRM_N2A_BOX_STATE = 5, - EXT_CLK_RSP = 6, - MAX_A2NCMD -} A2N_CMD, *PA2N_CMD; - -// Callback event defination -typedef enum _NFC_HAL_EVENT_ { - NFC_HAL_READER_PRESENT = (1<<0), - NFC_HAL_READ = (1<<1), - NFC_HAL_WRITE = (1<<2), - NFC_HAL_ERR = (1<<3), - NFC_HAL_CACHE_RD = (1<<4) -}NFC_CB_EVENT, *PNFC_CB_EVENT; - -void A2NWriteCatch(IN void *pNFCAdapte, IN uint8_t N2AWPage, - IN uint8_t Length, IN uint32_t *WData); -void A2NReadCatch(IN void *pNFCAdapte, IN uint8_t A2NRPage); -void HalNFCDmemInit(IN uint32_t *pTagData, IN uint32_t TagLen); -void HalNFCInit(PNFC_ADAPTER pNFCAdp); -void HalNFCDeinit(PNFC_ADAPTER pNFCAdp); -void HalNFCFwDownload(void); -uint32_t HalNFCDbgRead32(IN uint32_t Addr); -void HalNFCDbgWrite32(IN uint32_t Addr, IN uint32_t Data); -#endif //CONFIG_NFC_NORMAL -#endif // #ifndef _RTL8195A_NFC_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pcm.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pcm.c deleted file mode 100644 index 3b60255..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pcm.c +++ /dev/null @@ -1,361 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#include "rtl8195a.h" -#include "rtl8195a_pcm.h" -#include "hal_pcm.h" - -extern void * -_memset( void *s, int c, SIZE_T n ); - -void -HalPcmOnOffRtl8195a ( - IN void *Data -) -{ - PHAL_PCM_ADAPTER pHalPcmAdapter = (PHAL_PCM_ADAPTER) Data; - //todo on off pcm - -} - -//default sampling rate 8khz, linear, 10ms frame size, time slot 0 , tx+rx -// master mode, enable endian swap -// Question: need local tx/rx page? -BOOL -HalPcmInitRtl8195a( - IN void *Data -) -{ - - PHAL_PCM_ADAPTER pHalPcmAdapter = (PHAL_PCM_ADAPTER) Data; - _memset((void *)pHalPcmAdapter, 0, sizeof(HAL_PCM_ADAPTER)); - - //4 1) Initial PcmChCNR03 Register - pHalPcmAdapter->PcmChCNR03.CH0MuA = 0; - pHalPcmAdapter->PcmChCNR03.CH0Band = 0; - - - //4 1) Initial PcmTSR03 Register - pHalPcmAdapter->PcmTSR03.CH0TSA = 0; - - //4 1) Initial PcmBSize03 Register - pHalPcmAdapter->PcmBSize03.CH0BSize = 39; // 40word= 8khz*0.01s*1ch*2byte/4byte - - - //4 2) Initial Ctl Register - - pHalPcmAdapter->PcmCtl.Pcm_En = 1; - pHalPcmAdapter->PcmCtl.SlaveMode = 0; - pHalPcmAdapter->PcmCtl.FsInv = 0; - pHalPcmAdapter->PcmCtl.LinearMode = 0; - pHalPcmAdapter->PcmCtl.LoopBack = 0; - pHalPcmAdapter->PcmCtl.EndianSwap = 1; - - return _TRUE; -} - - -BOOL -HalPcmSettingRtl8195a( - IN void *Data -) -{ - - PHAL_PCM_ADAPTER pHalPcmAdapter = (PHAL_PCM_ADAPTER) Data; - uint8_t PcmIndex = pHalPcmAdapter->PcmIndex; - uint8_t PcmCh = pHalPcmAdapter->PcmCh; - uint32_t RegCtl, RegChCNR03, RegTSR03, RegBSize03; - uint32_t Isr03; - - PcmCh=0; - //4 1) Check Pcm index is avaliable - if (HAL_PCMX_READ32(PcmIndex, REG_PCM_CHCNR03) & (BIT24|BIT25)) { - //4 Pcm index is running, stop first - DBG_8195A_DMA("Error, PCM %d ch%d is running; stop first!\n", PcmIndex, PcmCh); - - return _FALSE; - } - - //4 2) Check if there are the pending isr - - - Isr03 = HAL_PCMX_READ32(PcmIndex, REG_PCM_ISR03); - Isr03 &= 0xff000000; - //4 Clear Pending Isr - HAL_PCMX_WRITE32(PcmIndex, REG_PCM_ISR03, Isr03); - //} - - - //4 3) Process RegCtl - RegCtl = HAL_PCMX_READ32(PcmIndex, REG_PCM_CTL); - - //4 Clear Ctl register bits - RegCtl &= ( BIT_INV_CTLX_SLAVE_SEL & - BIT_INV_CTLX_FSINV & - BIT_INV_CTLX_PCM_EN & - BIT_INV_CTLX_LINEARMODE & - BIT_INV_CTLX_LOOP_BACK & - BIT_INV_CTLX_ENDIAN_SWAP); - - RegCtl = BIT_CTLX_SLAVE_SEL(pHalPcmAdapter->PcmCtl.SlaveMode) | - BIT_CTLX_FSINV(pHalPcmAdapter->PcmCtl.FsInv) | - BIT_CTLX_PCM_EN(pHalPcmAdapter->PcmCtl.Pcm_En) | - BIT_CTLX_LINEARMODE(pHalPcmAdapter->PcmCtl.LinearMode) | - BIT_CTLX_LOOP_BACK(pHalPcmAdapter->PcmCtl.LoopBack) | - BIT_CTLX_ENDIAN_SWAP(pHalPcmAdapter->PcmCtl.EndianSwap) | - RegCtl; - - HAL_PCMX_WRITE32(PcmIndex, REG_PCM_CTL, RegCtl); - //4 4) Program ChCNR03 Register - - RegChCNR03 = HAL_PCMX_READ32(PcmIndex, REG_PCM_CHCNR03); - - RegChCNR03 &= (BIT_INV_CHCNR03_CH0RE & - BIT_INV_CHCNR03_CH0TE & - BIT_INV_CHCNR03_CH0MUA & - BIT_INV_CHCNR03_CH0BAND); - - RegChCNR03 = BIT_CHCNR03_CH0RE(pHalPcmAdapter->PcmChCNR03.CH0RE) | - BIT_CHCNR03_CH0TE(pHalPcmAdapter->PcmChCNR03.CH0TE) | - BIT_CHCNR03_CH0MUA(pHalPcmAdapter->PcmChCNR03.CH0MuA) | - BIT_CHCNR03_CH0BAND(pHalPcmAdapter->PcmChCNR03.CH0Band) | - RegChCNR03; - - DBG_8195A_DMA("RegChCNR03 data:0x%x\n", RegChCNR03); - - HAL_PCMX_WRITE32(PcmIndex, REG_PCM_CHCNR03, RegChCNR03); - // time slot - RegTSR03 = HAL_PCMX_READ32(PcmIndex, REG_PCM_TSR03); - - RegTSR03 &= (BIT_INV_TSR03_CH0TSA); - RegTSR03 = BIT_TSR03_CH0TSA(pHalPcmAdapter->PcmTSR03.CH0TSA) | - RegTSR03; - - DBG_8195A_DMA("RegTSR03 data:0x%x\n", RegTSR03); - - HAL_PCMX_WRITE32(PcmIndex, REG_PCM_TSR03, RegTSR03); - - // buffer size - RegBSize03 = HAL_PCMX_READ32(PcmIndex, REG_PCM_BSIZE03); - - RegBSize03 &= (BIT_INV_BSIZE03_CH0BSIZE); - RegBSize03 = BIT_BSIZE03_CH0BSIZE(pHalPcmAdapter->PcmBSize03.CH0BSize) | - RegBSize03; - - DBG_8195A_DMA("RegBSize03 data:0x%x\n", RegBSize03); - - HAL_PCMX_WRITE32(PcmIndex, REG_PCM_BSIZE03, RegBSize03); - - - - - return _TRUE; -} - -BOOL -HalPcmEnRtl8195a( - IN void *Data -) -{ - - PHAL_PCM_ADAPTER pHalPcmAdapter = (PHAL_PCM_ADAPTER) Data; - uint8_t PcmIndex = pHalPcmAdapter->PcmIndex; - uint8_t PcmCh = pHalPcmAdapter->PcmCh; - uint32_t RegChCNR03; - - PcmCh=0; - pHalPcmAdapter->Enable = 1; - - - //4 1) Check Pcm index is avaliable - RegChCNR03 = HAL_PCMX_READ32(PcmIndex, REG_PCM_CHCNR03); - if (RegChCNR03 & (BIT24|BIT25)) { - //4 Pcm index is running, stop first - DBG_8195A_DMA("Error, PCM %d ch%d is running; stop first!\n", PcmIndex, PcmCh); - - return _FALSE; - } - - HAL_PCMX_WRITE32(PcmIndex, REG_PCM_CHCNR03, RegChCNR03|BIT24|BIT25); - pHalPcmAdapter->PcmChCNR03.CH0RE = 1; - pHalPcmAdapter->PcmChCNR03.CH0TE = 1; - - return _TRUE; -} - -BOOL -HalPcmDisRtl8195a( - IN void *Data -) -{ - - PHAL_PCM_ADAPTER pHalPcmAdapter = (PHAL_PCM_ADAPTER) Data; - uint8_t PcmIndex = pHalPcmAdapter->PcmIndex; - uint8_t PcmCh = pHalPcmAdapter->PcmCh; - uint32_t RegChCNR03; - - PcmCh=0; - pHalPcmAdapter->Enable = 0; - - - RegChCNR03 = HAL_PCMX_READ32(PcmIndex, REG_PCM_CHCNR03); - - HAL_PCMX_WRITE32(PcmIndex, REG_PCM_CHCNR03, RegChCNR03&(~(BIT24|BIT25))); - pHalPcmAdapter->PcmChCNR03.CH0RE = 0; - pHalPcmAdapter->PcmChCNR03.CH0TE = 0; - - return _TRUE; -} - - - -BOOL -HalPcmIsrEnAndDisRtl8195a ( - IN void *Data -) -{ -#ifdef CONFIG_PCM_EN - PHAL_GDMA_ADAPTER pHalGdmaAdapter = (PHAL_GDMA_ADAPTER) Data; - uint32_t IsrMask, Addr, IsrCtrl; - uint8_t IsrTypeIndex = 0; - - for (IsrTypeIndex=0; IsrTypeIndex<5; IsrTypeIndex++) { - - if (BIT_(IsrTypeIndex) & pHalGdmaAdapter->GdmaIsrType) { - Addr = (REG_GDMA_MASK_INT_BASE + IsrTypeIndex*8); - - IsrMask = HAL_GDMAX_READ32(pHalGdmaAdapter->GdmaIndex, Addr); - - IsrCtrl = ((pHalGdmaAdapter->IsrCtrl)?(pHalGdmaAdapter->ChEn | IsrMask): - ((~pHalGdmaAdapter->ChEn) & IsrMask)); - - HAL_GDMAX_WRITE32(pHalGdmaAdapter->GdmaIndex, - Addr, - IsrCtrl - ); - - } - } -#endif - return _TRUE; -} - - - -BOOL -HalPcmDumpRegRtl8195a ( - IN void *Data -) -{ -#ifdef CONFIG_PCM_EN - PHAL_GDMA_ADAPTER pHalGdmaAdapter = Data; - HAL_GDMAX_WRITE32(pHalGdmaAdapter->GdmaIndex, - REG_GDMA_CH_EN, - (HAL_GDMAX_READ32(pHalGdmaAdapter->GdmaIndex, REG_GDMA_CH_EN)| - (pHalGdmaAdapter->ChEn)) - ); -#endif - return _TRUE; -} - -BOOL -HalPcmRtl8195a ( - IN void *Data -) -{ -#ifdef CONFIG_PCM_EN - PHAL_GDMA_ADAPTER pHalGdmaAdapter = (PHAL_GDMA_ADAPTER) Data; - HAL_GDMAX_WRITE32(pHalGdmaAdapter->GdmaIndex, - REG_GDMA_CH_EN, - (HAL_GDMAX_READ32(pHalGdmaAdapter->GdmaIndex, REG_GDMA_CH_EN)& - ~(pHalGdmaAdapter->ChEn)) - ); -#endif - return _TRUE; -} - -#ifdef CONFIG_PCM_EN -uint8_t -HalGdmaChIsrCleanRtl8195a ( - IN void *Data -) -{ - PHAL_GDMA_ADAPTER pHalGdmaAdapter = (PHAL_GDMA_ADAPTER) Data; - uint32_t IsrStatus; - uint8_t IsrTypeIndex = 0, IsrActBitMap = 0; - - for (IsrTypeIndex=0; IsrTypeIndex<5; IsrTypeIndex++) { - - IsrStatus = HAL_GDMAX_READ32(pHalGdmaAdapter->GdmaIndex, - (REG_GDMA_RAW_INT_BASE + IsrTypeIndex*8)); - -// DBG_8195A_DMA("Isr Type %d: Isr Status 0x%x\n", IsrTypeIndex, IsrStatus); - - IsrStatus = (IsrStatus & (pHalGdmaAdapter->ChEn & 0xFF)); - - if (BIT_(IsrTypeIndex) & pHalGdmaAdapter->GdmaIsrType) { - HAL_GDMAX_WRITE32(pHalGdmaAdapter->GdmaIndex, - (REG_GDMA_CLEAR_INT_BASE+ (IsrTypeIndex*8)), - (IsrStatus)// & (pHalGdmaAdapter->ChEn & 0xFF)) - ); - IsrActBitMap |= BIT_(IsrTypeIndex); - - } - - } - return IsrActBitMap; - -} - - -void -HalGdmaChCleanAutoSrcRtl8195a ( - IN void *Data -) -{ - uint32_t CfgxLow; - PHAL_GDMA_ADAPTER pHalGdmaAdapter = (PHAL_GDMA_ADAPTER) Data; - CfgxLow = HAL_GDMAX_READ32(pHalGdmaAdapter->GdmaIndex, - (REG_GDMA_CH_CFG + pHalGdmaAdapter->ChNum*REG_GDMA_CH_OFF)); - - CfgxLow &= BIT_INVC_CFGX_LO_RELOAD_SRC; - - HAL_GDMAX_WRITE32(pHalGdmaAdapter->GdmaIndex, - (REG_GDMA_CH_CFG + pHalGdmaAdapter->ChNum*REG_GDMA_CH_OFF), - CfgxLow - ); - - DBG_8195A_DMA("CFG Low data:0x%x\n", - HAL_GDMAX_READ32(pHalGdmaAdapter->GdmaIndex, (REG_GDMA_CH_CFG + pHalGdmaAdapter->ChNum*REG_GDMA_CH_OFF))); -} - -void -HalGdmaChCleanAutoDstRtl8195a ( - IN void *Data -) -{ - uint32_t CfgxLow; - PHAL_GDMA_ADAPTER pHalGdmaAdapter = (PHAL_GDMA_ADAPTER) Data; - CfgxLow = HAL_GDMAX_READ32(pHalGdmaAdapter->GdmaIndex, - (REG_GDMA_CH_CFG + pHalGdmaAdapter->ChNum*REG_GDMA_CH_OFF)); - - CfgxLow &= BIT_INVC_CFGX_LO_RELOAD_DST; - - HAL_GDMAX_WRITE32(pHalGdmaAdapter->GdmaIndex, - (REG_GDMA_CH_CFG + pHalGdmaAdapter->ChNum*REG_GDMA_CH_OFF), - CfgxLow - ); - DBG_8195A_DMA("CFG Low data:0x%x\n", - HAL_GDMAX_READ32(pHalGdmaAdapter->GdmaIndex, (REG_GDMA_CH_CFG + pHalGdmaAdapter->ChNum*REG_GDMA_CH_OFF))); - -} -#endif // CONFIG_PCM_EN - - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pcm.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pcm.h deleted file mode 100644 index 54c3c24..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pcm.h +++ /dev/null @@ -1,449 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#ifndef _RTL8195A_PCM_H_ -#define _RTL8195A_PCM_H_ - -#include "basic_types.h" -#include "hal_api.h" - -#define HAL_PCMX_READ32(PcmIndex, addr) \ - HAL_READ32(PCM0_REG_BASE+ (PcmIndex*PCM1_REG_OFF), addr) -#define HAL_PCMX_WRITE32(PcmIndex, addr, value) \ - HAL_WRITE32((PCM0_REG_BASE+ (PcmIndex*PCM1_REG_OFF)), addr, value) - -#define REG_PCM_TRXBSA_OFF 0x004 -#define REG_PCM_CTL 0x000 -#define REG_PCM_CHCNR03 0x004 -#define REG_PCM_TSR03 0x008 -#define REG_PCM_BSIZE03 0x00C - -#define REG_PCM_CH0TXBSA 0x010 -#define REG_PCM_CH1TXBSA 0x014 -#define REG_PCM_CH2TXBSA 0x018 -#define REG_PCM_CH3TXBSA 0x01c -#define REG_PCM_CH0RXBSA 0x020 -#define REG_PCM_CH1RXBSA 0x024 -#define REG_PCM_CH2RXBSA 0x028 -#define REG_PCM_CH3RXBSA 0x02c - -#define REG_PCM_IMR03 0x030 -#define REG_PCM_ISR03 0x034 - -#define REG_PCM_CHCNR47 0x038 -#define REG_PCM_TSR47 0x03c -#define REG_PCM_BSIZE47 0x040 -#define REG_PCM_CH4TXBSA 0x044 -#define REG_PCM_CH5TXBSA 0x048 -#define REG_PCM_CH6TXBSA 0x04c -#define REG_PCM_CH7TXBSA 0x050 -#define REG_PCM_CH4RXBSA 0x054 -#define REG_PCM_CH5RXBSA 0x058 -#define REG_PCM_CH6RXBSA 0x05c -#define REG_PCM_CH7RXBSA 0x060 - -#define REG_PCM_IMR47 0x064 -#define REG_PCM_ISR47 0x068 - -#define REG_PCM_CHCNR811 0x06c -#define REG_PCM_TSR811 0x070 -#define REG_PCM_BSIZE811 0x074 -#define REG_PCM_CH8TXBSA 0x078 -#define REG_PCM_CH9TXBSA 0x07c -#define REG_PCM_CH10TXBSA 0x080 -#define REG_PCM_CH11TXBSA 0x084 -#define REG_PCM_CH8RXBSA 0x088 -#define REG_PCM_CH9RXBSA 0x08c -#define REG_PCM_CH10RXBSA 0x090 -#define REG_PCM_CH11RXBSA 0x094 - -#define REG_PCM_IMR811 0x098 -#define REG_PCM_ISR811 0x09c - -#define REG_PCM_CHCNR1215 0x0a0 -#define REG_PCM_TSR1215 0x0a4 -#define REG_PCM_BSIZE1215 0x0a8 -#define REG_PCM_CH12TXBSA 0x0ac -#define REG_PCM_CH13TXBSA 0x0b0 -#define REG_PCM_CH14TXBSA 0x0b4 -#define REG_PCM_CH15TXBSA 0x0b8 -#define REG_PCM_CH12RXBSA 0x0bc -#define REG_PCM_CH13RXBSA 0x0c0 -#define REG_PCM_CH14RXBSA 0x0c4 -#define REG_PCM_CH15RXBSA 0x0c8 - -#define REG_PCM_IMR1215 0x0cc -#define REG_PCM_ISR1215 0x0d0 - -#define REG_PCM_INTMAP 0x0d4 -#define REG_PCM_WTSR03 0x0d8 -#define REG_PCM_WTSR47 0x0dc - -#define REG_PCM_RX_BUFOW 0x0e0 - -/* template -#define BIT_SHIFT_CTLX_ 7 -#define BIT_MASK_CTLX_ 0x1 -#define BIT_CTLX_(x) (((x) & BIT_MASK_CTLX_) << BIT_SHIFT_CTLX_) -#define BIT_INV_CTLX_ (~(BIT_MASK_CTLX_ << BIT_SHIFT_CTLX_)) -*/ -#define BIT_SHIFT_CTLX_SLAVE_SEL 8 -#define BIT_MASK_CTLX_SLAVE_SEL 0x1 -#define BIT_CTLX_SLAVE_SEL(x) (((x) & BIT_MASK_CTLX_SLAVE_SEL) << BIT_SHIFT_CTLX_SLAVE_SEL) -#define BIT_INV_CTLX_SLAVE_SEL (~(BIT_MASK_CTLX_SLAVE_SEL << BIT_SHIFT_CTLX_SLAVE_SEL)) - -#define BIT_SHIFT_CTLX_FSINV 9 -#define BIT_MASK_CTLX_FSINV 0x1 -#define BIT_CTLX_FSINV(x) (((x) & BIT_MASK_CTLX_FSINV) << BIT_SHIFT_CTLX_FSINV) -#define BIT_INV_CTLX_FSINV (~(BIT_MASK_CTLX_FSINV << BIT_SHIFT_CTLX_FSINV)) - -#define BIT_SHIFT_CTLX_PCM_EN 12 -#define BIT_MASK_CTLX_PCM_EN 0x1 -#define BIT_CTLX_PCM_EN(x) (((x) & BIT_MASK_CTLX_PCM_EN) << BIT_SHIFT_CTLX_PCM_EN) -#define BIT_INV_CTLX_PCM_EN (~(BIT_MASK_CTLX_PCM_EN << BIT_SHIFT_CTLX_PCM_EN)) - -#define BIT_SHIFT_CTLX_LINEARMODE 13 -#define BIT_MASK_CTLX_LINEARMODE 0x1 -#define BIT_CTLX_LINEARMODE(x) (((x) & BIT_MASK_CTLX_LINEARMODE) << BIT_SHIFT_CTLX_LINEARMODE) -#define BIT_INV_CTLX_LINEARMODE (~(BIT_MASK_CTLX_LINEARMODE << BIT_SHIFT_CTLX_LINEARMODE)) - -#define BIT_SHIFT_CTLX_LOOP_BACK 14 -#define BIT_MASK_CTLX_LOOP_BACK 0x1 -#define BIT_CTLX_LOOP_BACK(x) (((x) & BIT_MASK_CTLX_LOOP_BACK) << BIT_SHIFT_CTLX_LOOP_BACK) -#define BIT_INV_CTLX_LOOP_BACK (~(BIT_MASK_CTLX_LOOP_BACK << BIT_SHIFT_CTLX_LOOP_BACK)) - -#define BIT_SHIFT_CTLX_ENDIAN_SWAP 17 -#define BIT_MASK_CTLX_ENDIAN_SWAP 0x1 -#define BIT_CTLX_ENDIAN_SWAP(x) (((x) & BIT_MASK_CTLX_ENDIAN_SWAP) << BIT_SHIFT_CTLX_ENDIAN_SWAP) -#define BIT_INV_CTLX_ENDIAN_SWAP (~(BIT_MASK_CTLX_ENDIAN_SWAP << BIT_SHIFT_CTLX_ENDIAN_SWAP)) - -#define BIT_SHIFT_CHCNR03_CH0RE 24 -#define BIT_MASK_CHCNR03_CH0RE 0x1 -#define BIT_CHCNR03_CH0RE(x) (((x) & BIT_MASK_CHCNR03_CH0RE) << BIT_SHIFT_CHCNR03_CH0RE) -#define BIT_INV_CHCNR03_CH0RE (~(BIT_MASK_CHCNR03_CH0RE << BIT_SHIFT_CHCNR03_CH0RE)) - -#define BIT_SHIFT_CHCNR03_CH0TE 25 -#define BIT_MASK_CHCNR03_CH0TE 0x1 -#define BIT_CHCNR03_CH0TE(x) (((x) & BIT_MASK_CHCNR03_CH0TE) << BIT_SHIFT_CHCNR03_CH0TE) -#define BIT_INV_CHCNR03_CH0TE (~(BIT_MASK_CHCNR03_CH0TE << BIT_SHIFT_CHCNR03_CH0TE)) - -#define BIT_SHIFT_CHCNR03_CH1RE 16 -#define BIT_MASK_CHCNR03_CH1RE 0x1 -#define BIT_CHCNR03_CH1RE(x) (((x) & BIT_MASK_CHCNR03_CH1RE) << BIT_SHIFT_CHCNR03_CH1RE) -#define BIT_INV_CHCNR03_CH1RE (~(BIT_MASK_CHCNR03_CH1RE << BIT_SHIFT_CHCNR03_CH1RE)) - -#define BIT_SHIFT_CHCNR03_CH1TE 17 -#define BIT_MASK_CHCNR03_CH1TE 0x1 -#define BIT_CHCNR03_CH1TE(x) (((x) & BIT_MASK_CHCNR03_CH1TE) << BIT_SHIFT_CHCNR03_CH1TE) -#define BIT_INV_CHCNR03_CH1TE (~(BIT_MASK_CHCNR03_CH1TE << BIT_SHIFT_CHCNR03_CH1TE)) - -#define BIT_SHIFT_CHCNR03_CH2RE 8 -#define BIT_MASK_CHCNR03_CH2RE 0x1 -#define BIT_CHCNR03_CH2RE(x) (((x) & BIT_MASK_CHCNR03_CH2RE) << BIT_SHIFT_CHCNR03_CH2RE) -#define BIT_INV_CHCNR03_CH2RE (~(BIT_MASK_CHCNR03_CH2RE << BIT_SHIFT_CHCNR03_CH2RE)) - -#define BIT_SHIFT_CHCNR03_CH2TE 9 -#define BIT_MASK_CHCNR03_CH2TE 0x1 -#define BIT_CHCNR03_CH2TE(x) (((x) & BIT_MASK_CHCNR03_CH2TE) << BIT_SHIFT_CHCNR03_CH2TE) -#define BIT_INV_CHCNR03_CH2TE (~(BIT_MASK_CHCNR03_CH2TE << BIT_SHIFT_CHCNR03_CH2TE)) - -#define BIT_SHIFT_CHCNR03_CH3RE 0 -#define BIT_MASK_CHCNR03_CH3RE 0x1 -#define BIT_CHCNR03_CH3RE(x) (((x) & BIT_MASK_CHCNR03_CH3RE) << BIT_SHIFT_CHCNR03_CH3RE) -#define BIT_INV_CHCNR03_CH3RE (~(BIT_MASK_CHCNR03_CH3RE << BIT_SHIFT_CHCNR03_CH3RE)) - -#define BIT_SHIFT_CHCNR03_CH3TE 1 -#define BIT_MASK_CHCNR03_CH3TE 0x1 -#define BIT_CHCNR03_CH3TE(x) (((x) & BIT_MASK_CHCNR03_CH3TE) << BIT_SHIFT_CHCNR03_CH3TE) -#define BIT_INV_CHCNR03_CH3TE (~(BIT_MASK_CHCNR03_CH3TE << BIT_SHIFT_CHCNR03_CH3TE)) - -#define BIT_SHIFT_CHCNR03_CH0MUA 26 -#define BIT_MASK_CHCNR03_CH0MUA 0x1 -#define BIT_CHCNR03_CH0MUA(x) (((x) & BIT_MASK_CHCNR03_CH0MUA) << BIT_SHIFT_CHCNR03_CH0MUA) -#define BIT_INV_CHCNR03_CH0MUA (~(BIT_MASK_CHCNR03_CH0MUA << BIT_SHIFT_CHCNR03_CH0MUA)) - -#define BIT_SHIFT_CHCNR03_CH0BAND 27 -#define BIT_MASK_CHCNR03_CH0BAND 0x1 -#define BIT_CHCNR03_CH0BAND(x) (((x) & BIT_MASK_CHCNR03_CH0BAND) << BIT_SHIFT_CHCNR03_CH0BAND) -#define BIT_INV_CHCNR03_CH0BAND (~(BIT_MASK_CHCNR03_CH0BAND << BIT_SHIFT_CHCNR03_CH0BAND)) - -#define BIT_SHIFT_TSR03_CH0TSA 24 -#define BIT_MASK_TSR03_CH0TSA 0x1F -#define BIT_TSR03_CH0TSA(x) (((x) & BIT_MASK_TSR03_CH0TSA) << BIT_SHIFT_TSR03_CH0TSA) -#define BIT_INV_TSR03_CH0TSA (~(BIT_MASK_TSR03_CH0TSA << BIT_SHIFT_TSR03_CH0TSA)) - -#define BIT_SHIFT_BSIZE03_CH0BSIZE 24 -#define BIT_MASK_BSIZE03_CH0BSIZE 0xFF -#define BIT_BSIZE03_CH0BSIZE(x) (((x) & BIT_MASK_BSIZE03_CH0BSIZE) << BIT_SHIFT_BSIZE03_CH0BSIZE) -#define BIT_INV_BSIZE03_CH0BSIZE (~(BIT_MASK_BSIZE03_CH0BSIZE << BIT_SHIFT_BSIZE03_CH0BSIZE)) - -typedef struct _PCM_CTL_REG_ { - uint32_t FCNT :8; // Bit 0-7 - uint32_t SlaveMode :1; // Bit 8 - uint32_t FsInv :1; // Bit 9 - uint32_t Rsvd10to11 :1; // Bit 10-11 - uint32_t Pcm_En :1; // Bit 12 - uint32_t LinearMode :1; // Bit 13 - uint32_t LoopBack :1; // Bit 14 - uint32_t Rsvd15to16 :2; // Bit 15-16 - uint32_t EndianSwap :1; // Bit 17 - uint32_t Rsvd18to31 :14; // Bit 18-31 -} PCM_CTL_REG, *PPCM_CTL_REG; - - - -typedef struct _PCM_CHCNR03_REG_ { - uint32_t CH3RE :1; // Bit 0 - uint32_t CH3TE :1; // Bit 1 - uint32_t CH3MuA :1; // Bit 2 - uint32_t CH3Band :1; // Bit 3 - uint32_t CH3SlicSel:4; // Bit 4-7 - uint32_t CH2RE :1; // Bit 8 - uint32_t CH2TE :1; // Bit 9 - uint32_t CH2MuA :1; // Bit 10 - uint32_t CH2Band :1; // Bit 11 - uint32_t CH2SlicSel:4; // Bit 12-15 - uint32_t CH1RE :1; // Bit 16 - uint32_t CH1TE :1; // Bit 17 - uint32_t CH1MuA :1; // Bit 18 - uint32_t CH1Band :1; // Bit 19 - uint32_t CH1SlicSel:4; // Bit 20-23 - uint32_t CH0RE :1; // Bit 24 - uint32_t CH0TE :1; // Bit 25 - uint32_t CH0MuA :1; // Bit 26 - uint32_t CH0Band :1; // Bit 27 - uint32_t CH0SlicSel:4; // Bit 28-31 -}PCM_CHCNR03_REG, *PPCM_CHCNR03_REG; - -typedef struct _PCM_TSR03_REG_ { - uint32_t CH3TSA :5; // Bit 0-4 - uint32_t Rsvd5to7 :3; // Bit 5-7 - uint32_t CH2TSA :5; // Bit 8-12 - uint32_t Rsvd13to15:3; // Bit 13-15 - uint32_t CH1TSA :5; // Bit 16-20 - uint32_t Rsvd21to23:3; // Bit 21-23 - uint32_t CH0TSA :5; // Bit 24-28 - uint32_t Rsvd29to31:3; // Bit 29-31 -}PCM_TSR03_REG, *PPCM_TSR03_REG; - -typedef struct _PCM_BSIZE03_REG_ { - uint32_t CH3BSize :8; // Bit 0-7 - uint32_t CH2BSize :8; // Bit 8-15 - uint32_t CH1BSize :8; // Bit 16-23 - uint32_t CH0BSize :8; // Bit 24-31 -}PCM_BSIZE03_REG, *PPCM_BSIZE03_REG; - -typedef struct _PCM_ISR03_REG_ { - uint32_t CH3RXP1UA :1; // Bit 0 - uint32_t CH3RXP0UA :1; // Bit 1 - uint32_t CH3TXP1UA :1; // Bit 2 - uint32_t CH3TXP0UA :1; // Bit 3 - uint32_t CH3RXP1IP :1; // Bit 4 - uint32_t CH3RXP0IP :1; // Bit 5 - uint32_t CH3TXP1IP :1; // Bit 6 - uint32_t CH3TXP0IP :1; // Bit 7 - uint32_t CH2RXP1UA :1; // Bit 8 - uint32_t CH2RXP0UA :1; // Bit 9 - uint32_t CH2TXP1UA :1; // Bit 10 - uint32_t CH2TXP0UA :1; // Bit 11 - uint32_t CH2RXP1IP :1; // Bit 12 - uint32_t CH2RXP0IP :1; // Bit 13 - uint32_t CH2TXP1IP :1; // Bit 14 - uint32_t CH2TXP0IP :1; // Bit 15 - uint32_t CH1RXP1UA :1; // Bit 16 - uint32_t CH1RXP0UA :1; // Bit 17 - uint32_t CH1TXP1UA :1; // Bit 18 - uint32_t CH1TXP0UA :1; // Bit 19 - uint32_t CH1RXP1IP :1; // Bit 20 - uint32_t CH1RXP0IP :1; // Bit 21 - uint32_t CH1TXP1IP :1; // Bit 22 - uint32_t CH1TXP0IP :1; // Bit 23 - uint32_t CH0RXP1UA :1; // Bit 24 - uint32_t CH0RXP0UA :1; // Bit 25 - uint32_t CH0TXP1UA :1; // Bit 26 - uint32_t CH0TXP0UA :1; // Bit 27 - uint32_t CH0RXP1IP :1; // Bit 28 - uint32_t CH0RXP0IP :1; // Bit 29 - uint32_t CH0TXP1IP :1; // Bit 30 - uint32_t CH0TXP0IP :1; // Bit 31 -}PCM_ISR03_REG, *PPCM_ISR03_REG; - -typedef enum _PCM_ISR015 { - PcmCh3P1RBU = 0x00000001, //ch0-3 - PcmCh3P0RBU = 0x00000002, - PcmCh3P1TBU = 0x00000004, - PcmCh3P0TBU = 0x00000008, - PcmCh3P1ROK = 0x00000010, - PcmCh3P0ROK = 0x00000020, - PcmCh3P1TOK = 0x00000040, - PcmCh3P0TOK = 0x00000080, - PcmCh2P1RBU = 0x00000100, - PcmCh2P0RBU = 0x00000200, - PcmCh2P1TBU = 0x00000400, - PcmCh2P0TBU = 0x00000800, - PcmCh2P1ROK = 0x00001000, - PcmCh2P0ROK = 0x00002000, - PcmCh2P1TOK = 0x00004000, - PcmCh2P0TOK = 0x00008000, - PcmCh1P1RBU = 0x00010000, - PcmCh1P0RBU = 0x00020000, - PcmCh1P1TBU = 0x00040000, - PcmCh1P0TBU = 0x00080000, - PcmCh1P1ROK = 0x00100000, - PcmCh1P0ROK = 0x00200000, - PcmCh1P1TOK = 0x00400000, - PcmCh1P0TOK = 0x00800000, - PcmCh0P1RBU = 0x01000000, - PcmCh0P0RBU = 0x02000000, - PcmCh0P1TBU = 0x04000000, - PcmCh0P0TBU = 0x08000000, - PcmCh0P1ROK = 0x10000000, - PcmCh0P0ROK = 0x20000000, - PcmCh0P1TOK = 0x40000000, - PcmCh0P0TOK = 0x80000000, - - PcmCh7P1RBU = 0x00000001, //ch4-7 - PcmCh7P0RBU = 0x00000002, - PcmCh7P1TBU = 0x00000004, - PcmCh7P0TBU = 0x00000008, - PcmCh7P1ROK = 0x00000010, - PcmCh7P0ROK = 0x00000020, - PcmCh7P1TOK = 0x00000040, - PcmCh7P0TOK = 0x00000080, - PcmCh6P1RBU = 0x00000100, - PcmCh6P0RBU = 0x00000200, - PcmCh6P1TBU = 0x00000400, - PcmCh6P0TBU = 0x00000800, - PcmCh6P1ROK = 0x00001000, - PcmCh6P0ROK = 0x00002000, - PcmCh6P1TOK = 0x00004000, - PcmCh6P0TOK = 0x00008000, - PcmCh5P1RBU = 0x00010000, - PcmCh5P0RBU = 0x00020000, - PcmCh5P1TBU = 0x00040000, - PcmCh5P0TBU = 0x00080000, - PcmCh5P1ROK = 0x00100000, - PcmCh5P0ROK = 0x00200000, - PcmCh5P1TOK = 0x00400000, - PcmCh5P0TOK = 0x00800000, - PcmCh4P1RBU = 0x01000000, - PcmCh4P0RBU = 0x02000000, - PcmCh4P1TBU = 0x04000000, - PcmCh4P0TBU = 0x08000000, - PcmCh4P1ROK = 0x10000000, - PcmCh4P0ROK = 0x20000000, - PcmCh4P1TOK = 0x40000000, - PcmCh4P0TOK = 0x80000000, - - PcmCh11P1RBU = 0x00000001, //ch8-11 - PcmCh11P0RBU = 0x00000002, - PcmCh11P1TBU = 0x00000004, - PcmCh11P0TBU = 0x00000008, - PcmCh11P1ROK = 0x00000010, - PcmCh11P0ROK = 0x00000020, - PcmCh11P1TOK = 0x00000040, - PcmCh11P0TOK = 0x00000080, - PcmCh10P1RBU = 0x00000100, - PcmCh10P0RBU = 0x00000200, - PcmCh10P1TBU = 0x00000400, - PcmCh10P0TBU = 0x00000800, - PcmCh10P1ROK = 0x00001000, - PcmCh10P0ROK = 0x00002000, - PcmCh10P1TOK = 0x00004000, - PcmCh10P0TOK = 0x00008000, - PcmCh9P1RBU = 0x00010000, - PcmCh9P0RBU = 0x00020000, - PcmCh9P1TBU = 0x00040000, - PcmCh9P0TBU = 0x00080000, - PcmCh9P1ROK = 0x00100000, - PcmCh9P0ROK = 0x00200000, - PcmCh9P1TOK = 0x00400000, - PcmCh9P0TOK = 0x00800000, - PcmCh8P1RBU = 0x01000000, - PcmCh8P0RBU = 0x02000000, - PcmCh8P1TBU = 0x04000000, - PcmCh8P0TBU = 0x08000000, - PcmCh8P1ROK = 0x10000000, - PcmCh8P0ROK = 0x20000000, - PcmCh8P1TOK = 0x40000000, - PcmCh8P0TOK = 0x80000000, - - PcmCh15P1RBU = 0x00000001, //ch12-15 - PcmCh15P0RBU = 0x00000002, - PcmCh15P1TBU = 0x00000004, - PcmCh15P0TBU = 0x00000008, - PcmCh15P1ROK = 0x00000010, - PcmCh15P0ROK = 0x00000020, - PcmCh15P1TOK = 0x00000040, - PcmCh15P0TOK = 0x00000080, - PcmCh14P1RBU = 0x00000100, - PcmCh14P0RBU = 0x00000200, - PcmCh14P1TBU = 0x00000400, - PcmCh14P0TBU = 0x00000800, - PcmCh14P1ROK = 0x00001000, - PcmCh14P0ROK = 0x00002000, - PcmCh14P1TOK = 0x00004000, - PcmCh14P0TOK = 0x00008000, - PcmCh13P1RBU = 0x00010000, - PcmCh13P0RBU = 0x00020000, - PcmCh13P1TBU = 0x00040000, - PcmCh13P0TBU = 0x00080000, - PcmCh13P1ROK = 0x00100000, - PcmCh13P0ROK = 0x00200000, - PcmCh13P1TOK = 0x00400000, - PcmCh13P0TOK = 0x00800000, - PcmCh12P1RBU = 0x01000000, - PcmCh12P0RBU = 0x02000000, - PcmCh12P1TBU = 0x04000000, - PcmCh12P0TBU = 0x08000000, - PcmCh12P1ROK = 0x10000000, - PcmCh12P0ROK = 0x20000000, - PcmCh12P1TOK = 0x40000000, - PcmCh12P0TOK = 0x80000000 -}PCM_ISR015, *PPCM_ISR015; - -void -HalPcmOnOffRtl8195a( - IN void *Data -); - -BOOL -HalPcmInitRtl8195a( - IN void *Data -); - -BOOL -HalPcmSettingRtl8195a( - IN void *Data -); - -BOOL -HalPcmEnRtl8195a( - IN void *Data -); - -BOOL -HalPcmIsrEnAndDisRtl8195a( - IN void *Data -); - -BOOL -HalPcmDumpRegRtl8195a( - IN void *Data -); - -BOOL -HalPcmRtl8195a( - IN void *Data -); - -#endif /* _RTL8195A_PCM_H_ */ - - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_peri_on.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_peri_on.h deleted file mode 100644 index af4a40f..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_peri_on.h +++ /dev/null @@ -1,1252 +0,0 @@ -#ifndef __INC_RTL8195A_PERI_ON_H -#define __INC_RTL8195A_PERI_ON_H - -#define CPU_OPT_WIDTH 0x1F - -//2 REG_NOT_VALID - -//2 REG_PEON_PWR_CTRL -#define BIT_SOC_UAHV_EN BIT(2) -#define BIT_SOC_UALV_EN BIT(1) -#define BIT_SOC_USBD_EN BIT(0) - -//2 REG_PON_ISO_CTRL - -//2 REG_NOT_VALID -#define BIT_ISO_OSC32K_EN BIT(4) -//#define BIT_ISO_USBA_EN BIT(1) -//#define BIT_ISO_USBD_EN BIT(0) - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_SOC_FUNC_EN -// BIT(21) = 1 -> SDRAM Init -#define BIT_SOC_SECURITY_ENGINE_EN BIT(20) -#define BIT_SOC_GTIMER_EN BIT(16) -#define BIT_SOC_GDMA1_EN BIT(14) -#define BIT_SOC_GDMA0_EN BIT(13) -#define BIT_SOC_LOG_UART_EN BIT(12) -#define BIT_SOC_CPU_EN BIT(8) -#define BIT_SOC_MEM_CTRL_EN BIT(6) -#define BIT_SOC_FLASH_EN BIT(4) -#define BIT_SOC_LXBUS_EN BIT(2) -#define BIT_SOC_OCP_EN BIT(1) -#define BIT_SOC_FUN_EN BIT(0) - -//2 REG_SOC_HCI_COM_FUNC_EN -#define BIT_SOC_HCI_WL_MACON_EN BIT(16) -#define BIT_SOC_HCI_SM_SEL BIT(13) -#define BIT_SOC_HCI_MII_EN BIT(12) -#define BIT_SOC_HCI_OTG_RST_MUX BIT(5) -#define BIT_SOC_HCI_OTG_EN BIT(4) -#define BIT_SOC_HCI_SDIOD_ON_RST_MUX BIT(3) -#define BIT_SOC_HCI_SDIOH_EN BIT(2) -#define BIT_SOC_HCI_SDIOD_OFF_EN BIT(1) -#define BIT_SOC_HCI_SDIOD_ON_EN BIT(0) - -//2 REG_SOC_PERI_FUNC0_EN -#define BIT_PERI_PCM1_EN BIT(29) -#define BIT_PERI_PCM0_EN BIT(28) -#define BIT_PERI_I2S1_EN BIT(25) -#define BIT_PERI_I2S0_EN BIT(24) -#define BIT_PERI_I2C3_EN BIT(19) -#define BIT_PERI_I2C2_EN BIT(18) -#define BIT_PERI_I2C1_EN BIT(17) -#define BIT_PERI_I2C0_EN BIT(16) -#define BIT_PERI_SPI2_EN BIT(10) -#define BIT_PERI_SPI1_EN BIT(9) -#define BIT_PERI_SPI0_EN BIT(8) -#define BIT_PERI_UART2_EN BIT(2) -#define BIT_PERI_UART1_EN BIT(1) -#define BIT_PERI_UART0_EN BIT(0) - -//2 REG_SOC_PERI_FUNC1_EN -#define BIT_PERI_GPIO_EN BIT(8) -#define BIT_PERI_DAC1_EN BIT(5) -#define BIT_PERI_DAC0_EN BIT(4) -#define BIT_PERI_ADC0_EN BIT(0) - -//2 REG_SOC_PERI_BD_FUNC0_EN -#define BIT_PERI_UART2_BD_EN BIT(2) -#define BIT_PERI_UART1_BD_EN BIT(1) -#define BIT_PERI_UART0_BD_EN BIT(0) - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_RSVD - -//2 REG_PESOC_CLK_CTRL -#define BIT_SOC_SLPCK_BTCMD_EN BIT(29) -#define BIT_SOC_ACTCK_BTCMD_EN BIT(28) -#define BIT_SOC_SLPCK_GPIO_EN BIT(25) -#define BIT_SOC_ACTCK_GPIO_EN BIT(24) -#define BIT_SOC_SLPCK_GDMA1_EN BIT(19) -#define BIT_SOC_ACTCK_GDMA1_EN BIT(18) -#define BIT_SOC_SLPCK_GDMA0_EN BIT(17) -#define BIT_SOC_ACTCK_GDMA0_EN BIT(16) -#define BIT_SOC_SLPCK_TIMER_EN BIT(15) -#define BIT_SOC_ACTCK_TIMER_EN BIT(14) -#define BIT_SOC_SLPCK_LOG_UART_EN BIT(13) -#define BIT_SOC_ACTCK_LOG_UART_EN BIT(12) -#define BIT_SOC_SLPCK_SDR_EN BIT(11) -#define BIT_SOC_ACTCK_SDR_EN BIT(10) -#define BIT_SOC_SLPCK_FLASH_EN BIT(9) -#define BIT_SOC_ACTCK_FLASH_EN BIT(8) -#define BIT_SOC_SLPCK_VENDOR_REG_EN BIT(7) -#define BIT_SOC_ACTCK_VENDOR_REG_EN BIT(6) -#define BIT_SOC_SLPCK_TRACE_EN BIT(5) -#define BIT_SOC_ACTCK_TRACE_EN BIT(4) -#define BIT_SOC_CKE_PLFM BIT(2) -#define BIT_SOC_CKE_OCP BIT(0) - -//2 REG_PESOC_PERI_CLK_CTRL0 -#define BIT_SOC_SLPCK_SPI2_EN BIT(21) -#define BIT_SOC_ACTCK_SPI2_EN BIT(20) -#define BIT_SOC_SLPCK_SPI1_EN BIT(19) -#define BIT_SOC_ACTCK_SPI1_EN BIT(18) -#define BIT_SOC_SLPCK_SPI0_EN BIT(17) -#define BIT_SOC_ACTCK_SPI0_EN BIT(16) -#define BIT_SOC_SLPCK_UART2_EN BIT(5) -#define BIT_SOC_ACTCK_UART2_EN BIT(4) -#define BIT_SOC_SLPCK_UART1_EN BIT(3) -#define BIT_SOC_ACTCK_UART1_EN BIT(2) -#define BIT_SOC_SLPCK_UART0_EN BIT(1) -#define BIT_SOC_ACTCK_UART0_EN BIT(0) - -//2 REG_PESOC_PERI_CLK_CTRL1 -#define BIT_SOC_SLPCK_DAC_EN BIT(29) -#define BIT_SOC_ACTCK_DAC_EN BIT(28) -#define BIT_SOC_SLPCK_ADC_EN BIT(25) -#define BIT_SOC_ACTCK_ADC_EN BIT(24) -#define BIT_SOC_SLPCK_PCM_EN BIT(21) -#define BIT_SOC_ACTCK_PCM_EN BIT(20) -#define BIT_SOC_SLPCK_I2S_EN BIT(17) -#define BIT_SOC_ACTCK_I2S_EN BIT(16) -#define BIT_SOC_SLPCK_I2C3_EN BIT(7) -#define BIT_SOC_ACTCK_I2C3_EN BIT(6) -#define BIT_SOC_SLPCK_I2C2_EN BIT(5) -#define BIT_SOC_ACTCK_I2C2_EN BIT(4) -#define BIT_SOC_SLPCK_I2C1_EN BIT(3) -#define BIT_SOC_ACTCK_I2C1_EN BIT(2) -#define BIT_SOC_SLPCK_I2C0_EN BIT(1) -#define BIT_SOC_ACTCK_I2C0_EN BIT(0) - -//2 REG_PESOC_CLK_CTRL3 - -//2 REG_PESOC_HCI_CLK_CTRL0 -#define BIT_SOC_SLPCK_MII_MPHY_EN BIT(25) -#define BIT_SOC_ACTCK_MII_MPHY_EN BIT(24) -#define BIT_SOC_SLPCK_OTG_EN BIT(5) -#define BIT_SOC_ACTCK_OTG_EN BIT(4) -#define BIT_SOC_SLPCK_SDIO_HST_EN BIT(3) -#define BIT_SOC_ACTCK_SDIO_HST_EN BIT(2) -#define BIT_SOC_SLPCK_SDIO_DEV_EN BIT(1) -#define BIT_SOC_ACTCK_SDIO_DEV_EN BIT(0) - -//2 REG_PESOC_COM_CLK_CTRL1 -#define BIT_SOC_NFC_CAL_EN BIT(18) -#define BIT_SOC_SLPCK_NFC_EN BIT(17) -#define BIT_SOC_ACTCK_NFC_EN BIT(16) -#define BIT_SOC_SLPCK_SECURITY_ENG_EN BIT(5) -#define BIT_SOC_ACTCK_SECURITY_ENG_EN BIT(4) -#define BIT_SOC_SLPCK_WL_EN BIT(1) -#define BIT_SOC_ACTCK_WL_EN BIT(0) - -//2 REG_PESOC_HW_ENG_CLK_CTRL - -//2 REG_RSVD - -//2 REG_PESOC_CLK_SEL -#define BIT_PESOC_SPI1_SCLK_SEL BIT(18) - -#define BIT_SHIFT_PESOC_PERI_SCLK_SEL 16 -#define BIT_MASK_PESOC_PERI_SCLK_SEL 0x3 // 0 - CLK, 1 - CLK/2, 2 - CLK/4, 3 - CLK/8 -#define BIT_PESOC_PERI_SCLK_SEL(x) (((x) & BIT_MASK_PESOC_PERI_SCLK_SEL) << BIT_SHIFT_PESOC_PERI_SCLK_SEL) - - -#define BIT_SHIFT_PESOC_SDR_CK_SEL 10 -#define BIT_MASK_PESOC_SDR_CK_SEL 0x3 -#define BIT_PESOC_SDR_CK_SEL(x) (((x) & BIT_MASK_PESOC_SDR_CK_SEL) << BIT_SHIFT_PESOC_SDR_CK_SEL) - - -#define BIT_SHIFT_PESOC_FLASH_CK_SEL 8 -#define BIT_MASK_PESOC_FLASH_CK_SEL 0x3 -#define BIT_PESOC_FLASH_CK_SEL(x) (((x) & BIT_MASK_PESOC_FLASH_CK_SEL) << BIT_SHIFT_PESOC_FLASH_CK_SEL) - - -#define BIT_SHIFT_PESOC_TRACE_CK_SEL 4 -#define BIT_MASK_PESOC_TRACE_CK_SEL 0x3 -#define BIT_PESOC_TRACE_CK_SEL(x) (((x) & BIT_MASK_PESOC_TRACE_CK_SEL) << BIT_SHIFT_PESOC_TRACE_CK_SEL) - - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_SYS_ANACK_CAL_CTRL -#define BIT_SYS_ANACK_CAL_CMD BIT(15) -#define BIT_SYS_ANACK_CAL_SEL BIT(14) - -#define BIT_SHIFT_SYS_ANACK_CAL_RPT 0 -#define BIT_MASK_SYS_ANACK_CAL_RPT 0x3fff -#define BIT_SYS_ANACK_CAL_RPT(x) (((x) & BIT_MASK_SYS_ANACK_CAL_RPT) << BIT_SHIFT_SYS_ANACK_CAL_RPT) - - -//2 REG_OSC32K_CTRL - -#define BIT_SHIFT_32K_BIAS_CURRENT 16 -#define BIT_MASK_32K_BIAS_CURRENT 0xffff -#define BIT_32K_BIAS_CURRENT(x) (((x) & BIT_MASK_32K_BIAS_CURRENT) << BIT_SHIFT_32K_BIAS_CURRENT) - - -#define BIT_SHIFT_32K_RESISTOR_COM 2 -#define BIT_MASK_32K_RESISTOR_COM 0x3 -#define BIT_32K_RESISTOR_COM(x) (((x) & BIT_MASK_32K_RESISTOR_COM) << BIT_SHIFT_32K_RESISTOR_COM) - -#define BIT_32K_DBG_SEL BIT(1) -#define BIT_32K_POW_CKGEN_EN BIT(0) - -//2 REG_OSC32K_REG_CTRL0 -#define BIT_32K_REG_INDIRT_CMD BIT(23) - -#define BIT_SHIFT_32K_REG_INDIRT_ADDR 16 -#define BIT_MASK_32K_REG_INDIRT_ADDR 0x3f -#define BIT_32K_REG_INDIRT_ADDR(x) (((x) & BIT_MASK_32K_REG_INDIRT_ADDR) << BIT_SHIFT_32K_REG_INDIRT_ADDR) - - -#define BIT_SHIFT_32K_REG_INDIRT_WDATA 0 -#define BIT_MASK_32K_REG_INDIRT_WDATA 0xffff -#define BIT_32K_REG_INDIRT_WDATA(x) (((x) & BIT_MASK_32K_REG_INDIRT_WDATA) << BIT_SHIFT_32K_REG_INDIRT_WDATA) - - -//2 REG_OSC32K_REG_CTRL1 - -#define BIT_SHIFT_32K_REG_INDIRT_RDATA 0 -#define BIT_MASK_32K_REG_INDIRT_RDATA 0xffff -#define BIT_32K_REG_INDIRT_RDATA(x) (((x) & BIT_MASK_32K_REG_INDIRT_RDATA) << BIT_SHIFT_32K_REG_INDIRT_RDATA) - - -//2 REG_THERMAL_METER_CTRL - -#define BIT_SHIFT_TEMP_VALUE 24 -#define BIT_MASK_TEMP_VALUE 0x3f -#define BIT_TEMP_VALUE(x) (((x) & BIT_MASK_TEMP_VALUE) << BIT_SHIFT_TEMP_VALUE) - - -#define BIT_SHIFT_TEMP_DELTA 16 -#define BIT_MASK_TEMP_DELTA 0x3f -#define BIT_TEMP_DELTA(x) (((x) & BIT_MASK_TEMP_DELTA) << BIT_SHIFT_TEMP_DELTA) - -#define BIT_THERMAL_METER_EN BIT(15) -#define BIT_THERMAL_METER_VALID BIT(14) - -#define BIT_SHIFT_THERMAL_METER_TIMER 0 -#define BIT_MASK_THERMAL_METER_TIMER 0xfff -#define BIT_THERMAL_METER_TIMER(x) (((x) & BIT_MASK_THERMAL_METER_TIMER) << BIT_SHIFT_THERMAL_METER_TIMER) - - -//2 REG_UART_MUX_CTRL - -#define BIT_SHIFT_UART2_PIN_SEL 9 -#define BIT_MASK_UART2_PIN_SEL 0x7 -#define BIT_UART2_PIN_SEL(x) (((x) & BIT_MASK_UART2_PIN_SEL) << BIT_SHIFT_UART2_PIN_SEL) - -#define BIT_UART2_PIN_EN BIT(8) - -#define BIT_SHIFT_UART1_PIN_SEL 5 -#define BIT_MASK_UART1_PIN_SEL 0x7 -#define BIT_UART1_PIN_SEL(x) (((x) & BIT_MASK_UART1_PIN_SEL) << BIT_SHIFT_UART1_PIN_SEL) - -#define BIT_UART1_PIN_EN BIT(4) - -#define BIT_SHIFT_UART0_PIN_SEL 1 -#define BIT_MASK_UART0_PIN_SEL 0x7 -#define BIT_UART0_PIN_SEL(x) (((x) & BIT_MASK_UART0_PIN_SEL) << BIT_SHIFT_UART0_PIN_SEL) - -#define BIT_UART0_PIN_EN BIT(0) - -//2 REG_SPI_MUX_CTRL -#define BIT_SPI0_MULTI_CS_EN BIT(28) - -#define BIT_SHIFT_SPI2_PIN_SEL 9 -#define BIT_MASK_SPI2_PIN_SEL 0x7 -#define BIT_SPI2_PIN_SEL(x) (((x) & BIT_MASK_SPI2_PIN_SEL) << BIT_SHIFT_SPI2_PIN_SEL) - -#define BIT_SPI2_PIN_EN BIT(8) - -#define BIT_SHIFT_SPI1_PIN_SEL 5 -#define BIT_MASK_SPI1_PIN_SEL 0x7 -#define BIT_SPI1_PIN_SEL(x) (((x) & BIT_MASK_SPI1_PIN_SEL) << BIT_SHIFT_SPI1_PIN_SEL) - -#define BIT_SPI1_PIN_EN BIT(4) - -#define BIT_SHIFT_SPI0_PIN_SEL 1 -#define BIT_MASK_SPI0_PIN_SEL 0x7 -#define BIT_SPI0_PIN_SEL(x) (((x) & BIT_MASK_SPI0_PIN_SEL) << BIT_SHIFT_SPI0_PIN_SEL) - -#define BIT_SPI0_PIN_EN BIT(0) - -//2 REG_I2C_MUX_CTRL - -#define BIT_SHIFT_I2C3_PIN_SEL 13 -#define BIT_MASK_I2C3_PIN_SEL 0x7 -#define BIT_I2C3_PIN_SEL(x) (((x) & BIT_MASK_I2C3_PIN_SEL) << BIT_SHIFT_I2C3_PIN_SEL) - -#define BIT_I2C3_PIN_EN BIT(12) - -#define BIT_SHIFT_I2C2_PIN_SEL 9 -#define BIT_MASK_I2C2_PIN_SEL 0x7 -#define BIT_I2C2_PIN_SEL(x) (((x) & BIT_MASK_I2C2_PIN_SEL) << BIT_SHIFT_I2C2_PIN_SEL) - -#define BIT_I2C2_PIN_EN BIT(8) - -#define BIT_SHIFT_I2C1_PIN_SEL 5 -#define BIT_MASK_I2C1_PIN_SEL 0x7 -#define BIT_I2C1_PIN_SEL(x) (((x) & BIT_MASK_I2C1_PIN_SEL) << BIT_SHIFT_I2C1_PIN_SEL) - -#define BIT_I2C1_PIN_EN BIT(4) - -#define BIT_SHIFT_I2C0_PIN_SEL 1 -#define BIT_MASK_I2C0_PIN_SEL 0x7 -#define BIT_I2C0_PIN_SEL(x) (((x) & BIT_MASK_I2C0_PIN_SEL) << BIT_SHIFT_I2C0_PIN_SEL) - -#define BIT_I2C0_PIN_EN BIT(0) - -//2 REG_I2S_MUX_CTRL/ REG_PCM_MUX_CTRL - -//2 REG_NOT_VALID - -#define BIT_SHIFT_PCM1_PIN_SEL 21 -#define BIT_MASK_PCM1_PIN_SEL 0x7 -#define BIT_PCM1_PIN_SEL(x) (((x) & BIT_MASK_PCM1_PIN_SEL) << BIT_SHIFT_PCM1_PIN_SEL) - -#define BIT_PCM1_PIN_EN BIT(20) - -#define BIT_SHIFT_PCM0_PIN_SEL 17 -#define BIT_MASK_PCM0_PIN_SEL 0x7 -#define BIT_PCM0_PIN_SEL(x) (((x) & BIT_MASK_PCM0_PIN_SEL) << BIT_SHIFT_PCM0_PIN_SEL) - -#define BIT_PCM0_PIN_EN BIT(16) - -//2 REG_NOT_VALID - -#define BIT_SHIFT_I2S1_PIN_SEL 6 -#define BIT_MASK_I2S1_PIN_SEL 0x3 -#define BIT_I2S1_PIN_SEL(x) (((x) & BIT_MASK_I2S1_PIN_SEL) << BIT_SHIFT_I2S1_PIN_SEL) - -#define BIT_I2S1_MCK_EN BIT(5) -#define BIT_I2S1_PIN_EN BIT(4) - -#define BIT_SHIFT_I2S0_PIN_SEL 2 -#define BIT_MASK_I2S0_PIN_SEL 0x3 -#define BIT_I2S0_PIN_SEL(x) (((x) & BIT_MASK_I2S0_PIN_SEL) << BIT_SHIFT_I2S0_PIN_SEL) - -#define BIT_I2S0_MCK_EN BIT(1) -#define BIT_I2S0_PIN_EN BIT(0) - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_HCI_PINMUX_CTRL -#define BIT_HCI_MII_PIN_EN BIT(24) -#define BIT_HCI_SDIOH_PIN_EN BIT(1) -#define BIT_HCI_SDIOD_PIN_EN BIT(0) - -//2 REG_WL_PINMUX_CTRL -#define BIT_NFC_PIN_EN BIT(16) -#define BIT_WL_BTCMD_PIN_EN BIT(13) -#define BIT_WL_BTCOEX_PIN_EN BIT(12) -#define BIT_WL_ANT1_PIN_EN BIT(9) -#define BIT_WL_ANT0_PIN_EN BIT(8) - -#define BIT_SHIFT_WL_LED_PIN_SEL 1 -#define BIT_MASK_WL_LED_PIN_SEL 0x3 -#define BIT_WL_LED_PIN_SEL(x) (((x) & BIT_MASK_WL_LED_PIN_SEL) << BIT_SHIFT_WL_LED_PIN_SEL) - -#define BIT_WL_LED_PIN_EN BIT(0) - -//2 REG_BT_PINMUX_CTRL - -//2 REG_PWM_PINMUX_CTRL - -#define BIT_SHIFT_ETE3_PIN_SEL 29 -#define BIT_MASK_ETE3_PIN_SEL 0x3 -#define BIT_ETE3_PIN_SEL(x) (((x) & BIT_MASK_ETE3_PIN_SEL) << BIT_SHIFT_ETE3_PIN_SEL) - -#define BIT_ETE3_PIN_EN BIT(28) - -#define BIT_SHIFT_ETE2_PIN_SEL 25 -#define BIT_MASK_ETE2_PIN_SEL 0x3 -#define BIT_ETE2_PIN_SEL(x) (((x) & BIT_MASK_ETE2_PIN_SEL) << BIT_SHIFT_ETE2_PIN_SEL) - -#define BIT_ETE2_PIN_EN BIT(24) - -#define BIT_SHIFT_ETE1_PIN_SEL 21 -#define BIT_MASK_ETE1_PIN_SEL 0x3 -#define BIT_ETE1_PIN_SEL(x) (((x) & BIT_MASK_ETE1_PIN_SEL) << BIT_SHIFT_ETE1_PIN_SEL) - -#define BIT_ETE1_PIN_EN BIT(20) - -#define BIT_SHIFT_ETE0_PIN_SEL 17 -#define BIT_MASK_ETE0_PIN_SEL 0x3 -#define BIT_ETE0_PIN_SEL(x) (((x) & BIT_MASK_ETE0_PIN_SEL) << BIT_SHIFT_ETE0_PIN_SEL) - -#define BIT_ETE0_PIN_EN BIT(16) - -#define BIT_SHIFT_PWM3_PIN_SEL 13 -#define BIT_MASK_PWM3_PIN_SEL 0x3 -#define BIT_PWM3_PIN_SEL(x) (((x) & BIT_MASK_PWM3_PIN_SEL) << BIT_SHIFT_PWM3_PIN_SEL) - -#define BIT_PWM3_PIN_EN BIT(12) - -#define BIT_SHIFT_PWM2_PIN_SEL 9 -#define BIT_MASK_PWM2_PIN_SEL 0x3 -#define BIT_PWM2_PIN_SEL(x) (((x) & BIT_MASK_PWM2_PIN_SEL) << BIT_SHIFT_PWM2_PIN_SEL) - -#define BIT_PWM2_PIN_EN BIT(8) - -#define BIT_SHIFT_PWM1_PIN_SEL 5 -#define BIT_MASK_PWM1_PIN_SEL 0x3 -#define BIT_PWM1_PIN_SEL(x) (((x) & BIT_MASK_PWM1_PIN_SEL) << BIT_SHIFT_PWM1_PIN_SEL) - -#define BIT_PWM1_PIN_EN BIT(4) - -#define BIT_SHIFT_PWM0_PIN_SEL 1 -#define BIT_MASK_PWM0_PIN_SEL 0x3 -#define BIT_PWM0_PIN_SEL(x) (((x) & BIT_MASK_PWM0_PIN_SEL) << BIT_SHIFT_PWM0_PIN_SEL) - -#define BIT_PWM0_PIN_EN BIT(0) - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_CPU_PERIPHERAL_CTRL - -#define BIT_SHIFT_LOG_UART_PIN_SEL 22 -#define BIT_MASK_LOG_UART_PIN_SEL 0x3 -#define BIT_LOG_UART_PIN_SEL(x) (((x) & BIT_MASK_LOG_UART_PIN_SEL) << BIT_SHIFT_LOG_UART_PIN_SEL) - -#define BIT_LOG_UART_IR_EN BIT(21) -#define BIT_LOG_UART_PIN_EN BIT(20) -#define BIT_TRACE_PIN_EN BIT(17) -#define BIT_SDR_PIN_EN BIT(4) - -#define BIT_SHIFT_SPI_FLSH_PIN_SEL 1 -#define BIT_MASK_SPI_FLSH_PIN_SEL 0x3 -#define BIT_SPI_FLSH_PIN_SEL(x) (((x) & BIT_MASK_SPI_FLSH_PIN_SEL) << BIT_SHIFT_SPI_FLSH_PIN_SEL) - -#define BIT_SPI_FLSH_PIN_EN BIT(0) - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_HCI_CTRL_STATUS_0 - -//2 REG_HCI_CTRL_STATUS_1 - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_PESOC_MEM_CTRL - -#define BIT_SHIFT_PESOC_SDR_DDL_CTRL 16 -#define BIT_MASK_PESOC_SDR_DDL_CTRL 0xff -#define BIT_PESOC_SDR_DDL_CTRL(x) (((x) & BIT_MASK_PESOC_SDR_DDL_CTRL) << BIT_SHIFT_PESOC_SDR_DDL_CTRL) - - -#define BIT_SHIFT_PESOC_FLASH_DDL_CTRL 0 -#define BIT_MASK_PESOC_FLASH_DDL_CTRL 0xff -#define BIT_PESOC_FLASH_DDL_CTRL(x) (((x) & BIT_MASK_PESOC_FLASH_DDL_CTRL) << BIT_SHIFT_PESOC_FLASH_DDL_CTRL) - - -//2 REG_PESOC_SOC_CTRL - -#define BIT_SHIFT_PESOC_GDMA_CFG 16 -#define BIT_MASK_PESOC_GDMA_CFG 0x1fff -#define BIT_PESOC_GDMA_CFG(x) (((x) & BIT_MASK_PESOC_GDMA_CFG) << BIT_SHIFT_PESOC_GDMA_CFG) - -#define BIT_PESOC_MII_LX_SLV_SWAP_SEL BIT(13) -#define BIT_PESOC_MII_LX_MST_SWAP_SEL BIT(12) -#define BIT_PESOC_MII_LX_WRAPPER_EN BIT(11) -#define BIT_PESOC_LX_SLV_SWAP_SEL BIT(10) -#define BIT_PESOC_LX_MST_SWAP_SEL BIT(9) -#define BIT_PESOC_LX_WL_SWAP_SEL BIT(8) - -#define BIT_SHIFT_PESOC_SRAM_MUX_CFG 0 -#define BIT_MASK_PESOC_SRAM_MUX_CFG 0x7 -#define BIT_PESOC_SRAM_MUX_CFG(x) (((x) & BIT_MASK_PESOC_SRAM_MUX_CFG) << BIT_SHIFT_PESOC_SRAM_MUX_CFG) - - -//2 REG_PESOC_PERI_CTRL -#define BIT_SOC_FUNC_SPI_RN BIT(8) - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID -#define BIT_FW_CTRL_INT0 BIT(24) - -//2 REG_NOT_VALID - -//2 REG_GPIO_SHTDN_CTRL -#define BIT_GPIO_GPK_SHTDN_N BIT(10) -#define BIT_GPIO_GPJ_SHTDN_N BIT(9) -#define BIT_GPIO_GPI_SHTDN_N BIT(8) -#define BIT_GPIO_GPH_SHTDN_N BIT(7) -#define BIT_GPIO_GPG_SHTDN_N BIT(6) -#define BIT_GPIO_GPF_SHTDN_N BIT(5) -#define BIT_GPIO_GPE_SHTDN_N BIT(4) -#define BIT_GPIO_GPD_SHTDN_N BIT(3) -#define BIT_GPIO_GPC_SHTDN_N BIT(2) -#define BIT_GPIO_GPB_SHTDN_N BIT(1) -#define BIT_GPIO_GPA_SHTDN_N BIT(0) - -//2 REG_GPIO_DRIVING_CTRL -#define BIT_GPIO_GPK_DRV_SEL BIT(20) -#define BIT_GPIO_GPJ_DRV_SEL BIT(18) -#define BIT_GPIO_GPI_DRV_SEL BIT(16) -#define BIT_GPIO_GPH_DRV_SEL BIT(14) -#define BIT_GPIO_GPG_DRV_SEL BIT(12) -#define BIT_GPIO_GPF_DRV_SEL BIT(10) -#define BIT_GPIO_GPE_DRV_SEL BIT(8) -#define BIT_GPIO_GPD_DRV_SEL BIT(6) -#define BIT_GPIO_GPC_DRV_SEL BIT(4) -#define BIT_GPIO_GPB_DRV_SEL BIT(2) -#define BIT_GPIO_GPA_DRV_SEL BIT(0) - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_GPIO_PULL_CTRL0 - -#define BIT_SHIFT_GPIO_GPB7_PULL_CTRL 30 -#define BIT_MASK_GPIO_GPB7_PULL_CTRL 0x3 -#define BIT_GPIO_GPB7_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPB7_PULL_CTRL) << BIT_SHIFT_GPIO_GPB7_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPB6_PULL_CTRL 28 -#define BIT_MASK_GPIO_GPB6_PULL_CTRL 0x3 -#define BIT_GPIO_GPB6_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPB6_PULL_CTRL) << BIT_SHIFT_GPIO_GPB6_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPB5_PULL_CTRL 26 -#define BIT_MASK_GPIO_GPB5_PULL_CTRL 0x3 -#define BIT_GPIO_GPB5_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPB5_PULL_CTRL) << BIT_SHIFT_GPIO_GPB5_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPB4_PULL_CTRL 24 -#define BIT_MASK_GPIO_GPB4_PULL_CTRL 0x3 -#define BIT_GPIO_GPB4_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPB4_PULL_CTRL) << BIT_SHIFT_GPIO_GPB4_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPB3_PULL_CTRL 22 -#define BIT_MASK_GPIO_GPB3_PULL_CTRL 0x3 -#define BIT_GPIO_GPB3_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPB3_PULL_CTRL) << BIT_SHIFT_GPIO_GPB3_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPB2_PULL_CTRL 20 -#define BIT_MASK_GPIO_GPB2_PULL_CTRL 0x3 -#define BIT_GPIO_GPB2_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPB2_PULL_CTRL) << BIT_SHIFT_GPIO_GPB2_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPB1_PULL_CTRL 18 -#define BIT_MASK_GPIO_GPB1_PULL_CTRL 0x3 -#define BIT_GPIO_GPB1_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPB1_PULL_CTRL) << BIT_SHIFT_GPIO_GPB1_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPB0_PULL_CTRL 16 -#define BIT_MASK_GPIO_GPB0_PULL_CTRL 0x3 -#define BIT_GPIO_GPB0_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPB0_PULL_CTRL) << BIT_SHIFT_GPIO_GPB0_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPA7_PULL_CTRL 14 -#define BIT_MASK_GPIO_GPA7_PULL_CTRL 0x3 -#define BIT_GPIO_GPA7_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPA7_PULL_CTRL) << BIT_SHIFT_GPIO_GPA7_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPA6_PULL_CTRL 12 -#define BIT_MASK_GPIO_GPA6_PULL_CTRL 0x3 -#define BIT_GPIO_GPA6_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPA6_PULL_CTRL) << BIT_SHIFT_GPIO_GPA6_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPA5_PULL_CTRL 10 -#define BIT_MASK_GPIO_GPA5_PULL_CTRL 0x3 -#define BIT_GPIO_GPA5_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPA5_PULL_CTRL) << BIT_SHIFT_GPIO_GPA5_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPA4_PULL_CTRL 8 -#define BIT_MASK_GPIO_GPA4_PULL_CTRL 0x3 -#define BIT_GPIO_GPA4_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPA4_PULL_CTRL) << BIT_SHIFT_GPIO_GPA4_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPA3_PULL_CTRL 6 -#define BIT_MASK_GPIO_GPA3_PULL_CTRL 0x3 -#define BIT_GPIO_GPA3_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPA3_PULL_CTRL) << BIT_SHIFT_GPIO_GPA3_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPA2_PULL_CTRL 4 -#define BIT_MASK_GPIO_GPA2_PULL_CTRL 0x3 -#define BIT_GPIO_GPA2_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPA2_PULL_CTRL) << BIT_SHIFT_GPIO_GPA2_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPA1_PULL_CTRL 2 -#define BIT_MASK_GPIO_GPA1_PULL_CTRL 0x3 -#define BIT_GPIO_GPA1_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPA1_PULL_CTRL) << BIT_SHIFT_GPIO_GPA1_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPA0_PULL_CTRL 0 -#define BIT_MASK_GPIO_GPA0_PULL_CTRL 0x3 -#define BIT_GPIO_GPA0_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPA0_PULL_CTRL) << BIT_SHIFT_GPIO_GPA0_PULL_CTRL) - - -//2 REG_GPIO_PULL_CTRL1 - -#define BIT_SHIFT_GPIO_GPD7_PULL_CTRL 29 -#define BIT_MASK_GPIO_GPD7_PULL_CTRL 0x7 -#define BIT_GPIO_GPD7_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPD7_PULL_CTRL) << BIT_SHIFT_GPIO_GPD7_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPD6_PULL_CTRL 28 -#define BIT_MASK_GPIO_GPD6_PULL_CTRL 0x3 -#define BIT_GPIO_GPD6_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPD6_PULL_CTRL) << BIT_SHIFT_GPIO_GPD6_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPD5_PULL_CTRL 26 -#define BIT_MASK_GPIO_GPD5_PULL_CTRL 0x3 -#define BIT_GPIO_GPD5_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPD5_PULL_CTRL) << BIT_SHIFT_GPIO_GPD5_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPD4_PULL_CTRL 24 -#define BIT_MASK_GPIO_GPD4_PULL_CTRL 0x3 -#define BIT_GPIO_GPD4_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPD4_PULL_CTRL) << BIT_SHIFT_GPIO_GPD4_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPD3_PULL_CTRL 22 -#define BIT_MASK_GPIO_GPD3_PULL_CTRL 0x3 -#define BIT_GPIO_GPD3_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPD3_PULL_CTRL) << BIT_SHIFT_GPIO_GPD3_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPD2_PULL_CTRL 20 -#define BIT_MASK_GPIO_GPD2_PULL_CTRL 0x3 -#define BIT_GPIO_GPD2_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPD2_PULL_CTRL) << BIT_SHIFT_GPIO_GPD2_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPD1_PULL_CTRL 18 -#define BIT_MASK_GPIO_GPD1_PULL_CTRL 0x3 -#define BIT_GPIO_GPD1_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPD1_PULL_CTRL) << BIT_SHIFT_GPIO_GPD1_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPD0_PULL_CTRL 16 -#define BIT_MASK_GPIO_GPD0_PULL_CTRL 0x3 -#define BIT_GPIO_GPD0_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPD0_PULL_CTRL) << BIT_SHIFT_GPIO_GPD0_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPC7_PULL_CTRL 14 -#define BIT_MASK_GPIO_GPC7_PULL_CTRL 0x3 -#define BIT_GPIO_GPC7_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPC7_PULL_CTRL) << BIT_SHIFT_GPIO_GPC7_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPC6_PULL_CTRL 12 -#define BIT_MASK_GPIO_GPC6_PULL_CTRL 0x3 -#define BIT_GPIO_GPC6_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPC6_PULL_CTRL) << BIT_SHIFT_GPIO_GPC6_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPC5_PULL_CTRL 10 -#define BIT_MASK_GPIO_GPC5_PULL_CTRL 0x3 -#define BIT_GPIO_GPC5_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPC5_PULL_CTRL) << BIT_SHIFT_GPIO_GPC5_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPC4_PULL_CTRL 8 -#define BIT_MASK_GPIO_GPC4_PULL_CTRL 0x3 -#define BIT_GPIO_GPC4_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPC4_PULL_CTRL) << BIT_SHIFT_GPIO_GPC4_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPC3_PULL_CTRL 6 -#define BIT_MASK_GPIO_GPC3_PULL_CTRL 0x3 -#define BIT_GPIO_GPC3_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPC3_PULL_CTRL) << BIT_SHIFT_GPIO_GPC3_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPC2_PULL_CTRL 4 -#define BIT_MASK_GPIO_GPC2_PULL_CTRL 0x3 -#define BIT_GPIO_GPC2_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPC2_PULL_CTRL) << BIT_SHIFT_GPIO_GPC2_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPC1_PULL_CTRL 2 -#define BIT_MASK_GPIO_GPC1_PULL_CTRL 0x3 -#define BIT_GPIO_GPC1_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPC1_PULL_CTRL) << BIT_SHIFT_GPIO_GPC1_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPC0_PULL_CTRL 0 -#define BIT_MASK_GPIO_GPC0_PULL_CTRL 0x3 -#define BIT_GPIO_GPC0_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPC0_PULL_CTRL) << BIT_SHIFT_GPIO_GPC0_PULL_CTRL) - - -//2 REG_GPIO_PULL_CTRL2 - -#define BIT_SHIFT_GPIO_GPF5_PULL_CTRL 26 -#define BIT_MASK_GPIO_GPF5_PULL_CTRL 0x3 -#define BIT_GPIO_GPF5_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPF5_PULL_CTRL) << BIT_SHIFT_GPIO_GPF5_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPF4_PULL_CTRL 24 -#define BIT_MASK_GPIO_GPF4_PULL_CTRL 0x3 -#define BIT_GPIO_GPF4_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPF4_PULL_CTRL) << BIT_SHIFT_GPIO_GPF4_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPF3_PULL_CTRL 22 -#define BIT_MASK_GPIO_GPF3_PULL_CTRL 0x3 -#define BIT_GPIO_GPF3_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPF3_PULL_CTRL) << BIT_SHIFT_GPIO_GPF3_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPF2_PULL_CTRL 20 -#define BIT_MASK_GPIO_GPF2_PULL_CTRL 0x3 -#define BIT_GPIO_GPF2_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPF2_PULL_CTRL) << BIT_SHIFT_GPIO_GPF2_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPF1_PULL_CTRL 18 -#define BIT_MASK_GPIO_GPF1_PULL_CTRL 0x3 -#define BIT_GPIO_GPF1_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPF1_PULL_CTRL) << BIT_SHIFT_GPIO_GPF1_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPF0_PULL_CTRL 16 -#define BIT_MASK_GPIO_GPF0_PULL_CTRL 0x3 -#define BIT_GPIO_GPF0_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPF0_PULL_CTRL) << BIT_SHIFT_GPIO_GPF0_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPE7_PULL_CTRL 14 -#define BIT_MASK_GPIO_GPE7_PULL_CTRL 0x3 -#define BIT_GPIO_GPE7_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPE7_PULL_CTRL) << BIT_SHIFT_GPIO_GPE7_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPE6_PULL_CTRL 12 -#define BIT_MASK_GPIO_GPE6_PULL_CTRL 0x3 -#define BIT_GPIO_GPE6_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPE6_PULL_CTRL) << BIT_SHIFT_GPIO_GPE6_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPE5_PULL_CTRL 10 -#define BIT_MASK_GPIO_GPE5_PULL_CTRL 0x3 -#define BIT_GPIO_GPE5_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPE5_PULL_CTRL) << BIT_SHIFT_GPIO_GPE5_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPE4_PULL_CTRL 8 -#define BIT_MASK_GPIO_GPE4_PULL_CTRL 0x3 -#define BIT_GPIO_GPE4_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPE4_PULL_CTRL) << BIT_SHIFT_GPIO_GPE4_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPE3_PULL_CTRL 6 -#define BIT_MASK_GPIO_GPE3_PULL_CTRL 0x3 -#define BIT_GPIO_GPE3_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPE3_PULL_CTRL) << BIT_SHIFT_GPIO_GPE3_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPE2_PULL_CTRL 4 -#define BIT_MASK_GPIO_GPE2_PULL_CTRL 0x3 -#define BIT_GPIO_GPE2_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPE2_PULL_CTRL) << BIT_SHIFT_GPIO_GPE2_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPE1_PULL_CTRL 2 -#define BIT_MASK_GPIO_GPE1_PULL_CTRL 0x3 -#define BIT_GPIO_GPE1_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPE1_PULL_CTRL) << BIT_SHIFT_GPIO_GPE1_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPE0_PULL_CTRL 0 -#define BIT_MASK_GPIO_GPE0_PULL_CTRL 0x3 -#define BIT_GPIO_GPE0_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPE0_PULL_CTRL) << BIT_SHIFT_GPIO_GPE0_PULL_CTRL) - - -//2 REG_NOT_VALID - -#define BIT_SHIFT_GPIO_GPH7_PULL_CTRL 30 -#define BIT_MASK_GPIO_GPH7_PULL_CTRL 0x3 -#define BIT_GPIO_GPH7_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPH7_PULL_CTRL) << BIT_SHIFT_GPIO_GPH7_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPH6_PULL_CTRL 28 -#define BIT_MASK_GPIO_GPH6_PULL_CTRL 0x3 -#define BIT_GPIO_GPH6_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPH6_PULL_CTRL) << BIT_SHIFT_GPIO_GPH6_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPH5_PULL_CTRL 26 -#define BIT_MASK_GPIO_GPH5_PULL_CTRL 0x3 -#define BIT_GPIO_GPH5_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPH5_PULL_CTRL) << BIT_SHIFT_GPIO_GPH5_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPH4_PULL_CTRL 24 -#define BIT_MASK_GPIO_GPH4_PULL_CTRL 0x3 -#define BIT_GPIO_GPH4_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPH4_PULL_CTRL) << BIT_SHIFT_GPIO_GPH4_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPH3_PULL_CTRL 22 -#define BIT_MASK_GPIO_GPH3_PULL_CTRL 0x3 -#define BIT_GPIO_GPH3_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPH3_PULL_CTRL) << BIT_SHIFT_GPIO_GPH3_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPH2_PULL_CTRL 20 -#define BIT_MASK_GPIO_GPH2_PULL_CTRL 0x3 -#define BIT_GPIO_GPH2_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPH2_PULL_CTRL) << BIT_SHIFT_GPIO_GPH2_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPH1_PULL_CTRL 18 -#define BIT_MASK_GPIO_GPH1_PULL_CTRL 0x3 -#define BIT_GPIO_GPH1_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPH1_PULL_CTRL) << BIT_SHIFT_GPIO_GPH1_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPH0_PULL_CTRL 16 -#define BIT_MASK_GPIO_GPH0_PULL_CTRL 0x3 -#define BIT_GPIO_GPH0_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPH0_PULL_CTRL) << BIT_SHIFT_GPIO_GPH0_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPG7_PULL_CTRL 14 -#define BIT_MASK_GPIO_GPG7_PULL_CTRL 0x3 -#define BIT_GPIO_GPG7_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPG7_PULL_CTRL) << BIT_SHIFT_GPIO_GPG7_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPG6_PULL_CTRL 12 -#define BIT_MASK_GPIO_GPG6_PULL_CTRL 0x3 -#define BIT_GPIO_GPG6_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPG6_PULL_CTRL) << BIT_SHIFT_GPIO_GPG6_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPG5_PULL_CTRL 10 -#define BIT_MASK_GPIO_GPG5_PULL_CTRL 0x3 -#define BIT_GPIO_GPG5_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPG5_PULL_CTRL) << BIT_SHIFT_GPIO_GPG5_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPG4_PULL_CTRL 8 -#define BIT_MASK_GPIO_GPG4_PULL_CTRL 0x3 -#define BIT_GPIO_GPG4_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPG4_PULL_CTRL) << BIT_SHIFT_GPIO_GPG4_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPG3_PULL_CTRL 6 -#define BIT_MASK_GPIO_GPG3_PULL_CTRL 0x3 -#define BIT_GPIO_GPG3_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPG3_PULL_CTRL) << BIT_SHIFT_GPIO_GPG3_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPG2_PULL_CTRL 4 -#define BIT_MASK_GPIO_GPG2_PULL_CTRL 0x3 -#define BIT_GPIO_GPG2_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPG2_PULL_CTRL) << BIT_SHIFT_GPIO_GPG2_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPG1_PULL_CTRL 2 -#define BIT_MASK_GPIO_GPG1_PULL_CTRL 0x3 -#define BIT_GPIO_GPG1_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPG1_PULL_CTRL) << BIT_SHIFT_GPIO_GPG1_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPG0_PULL_CTRL 0 -#define BIT_MASK_GPIO_GPG0_PULL_CTRL 0x3 -#define BIT_GPIO_GPG0_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPG0_PULL_CTRL) << BIT_SHIFT_GPIO_GPG0_PULL_CTRL) - - -//2 REG_GPIO_PULL_CTRL4 - -#define BIT_SHIFT_GPIO_GPJ6_PULL_CTRL 28 -#define BIT_MASK_GPIO_GPJ6_PULL_CTRL 0x3 -#define BIT_GPIO_GPJ6_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPJ6_PULL_CTRL) << BIT_SHIFT_GPIO_GPJ6_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPJ5_PULL_CTRL 26 -#define BIT_MASK_GPIO_GPJ5_PULL_CTRL 0x3 -#define BIT_GPIO_GPJ5_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPJ5_PULL_CTRL) << BIT_SHIFT_GPIO_GPJ5_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPJ4_PULL_CTRL 24 -#define BIT_MASK_GPIO_GPJ4_PULL_CTRL 0x3 -#define BIT_GPIO_GPJ4_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPJ4_PULL_CTRL) << BIT_SHIFT_GPIO_GPJ4_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPJ3_PULL_CTRL 22 -#define BIT_MASK_GPIO_GPJ3_PULL_CTRL 0x3 -#define BIT_GPIO_GPJ3_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPJ3_PULL_CTRL) << BIT_SHIFT_GPIO_GPJ3_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPJ2_PULL_CTRL 20 -#define BIT_MASK_GPIO_GPJ2_PULL_CTRL 0x3 -#define BIT_GPIO_GPJ2_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPJ2_PULL_CTRL) << BIT_SHIFT_GPIO_GPJ2_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPJ1_PULL_CTRL 18 -#define BIT_MASK_GPIO_GPJ1_PULL_CTRL 0x3 -#define BIT_GPIO_GPJ1_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPJ1_PULL_CTRL) << BIT_SHIFT_GPIO_GPJ1_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPJ0_PULL_CTRL 16 -#define BIT_MASK_GPIO_GPJ0_PULL_CTRL 0x3 -#define BIT_GPIO_GPJ0_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPJ0_PULL_CTRL) << BIT_SHIFT_GPIO_GPJ0_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPI7_PULL_CTRL 14 -#define BIT_MASK_GPIO_GPI7_PULL_CTRL 0x3 -#define BIT_GPIO_GPI7_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPI7_PULL_CTRL) << BIT_SHIFT_GPIO_GPI7_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPI6_PULL_CTRL 12 -#define BIT_MASK_GPIO_GPI6_PULL_CTRL 0x3 -#define BIT_GPIO_GPI6_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPI6_PULL_CTRL) << BIT_SHIFT_GPIO_GPI6_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPI5_PULL_CTRL 10 -#define BIT_MASK_GPIO_GPI5_PULL_CTRL 0x3 -#define BIT_GPIO_GPI5_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPI5_PULL_CTRL) << BIT_SHIFT_GPIO_GPI5_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPI4_PULL_CTRL 8 -#define BIT_MASK_GPIO_GPI4_PULL_CTRL 0x3 -#define BIT_GPIO_GPI4_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPI4_PULL_CTRL) << BIT_SHIFT_GPIO_GPI4_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPI3_PULL_CTRL 6 -#define BIT_MASK_GPIO_GPI3_PULL_CTRL 0x3 -#define BIT_GPIO_GPI3_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPI3_PULL_CTRL) << BIT_SHIFT_GPIO_GPI3_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPI2_PULL_CTRL 4 -#define BIT_MASK_GPIO_GPI2_PULL_CTRL 0x3 -#define BIT_GPIO_GPI2_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPI2_PULL_CTRL) << BIT_SHIFT_GPIO_GPI2_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPI1_PULL_CTRL 2 -#define BIT_MASK_GPIO_GPI1_PULL_CTRL 0x3 -#define BIT_GPIO_GPI1_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPI1_PULL_CTRL) << BIT_SHIFT_GPIO_GPI1_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPI0_PULL_CTRL 0 -#define BIT_MASK_GPIO_GPI0_PULL_CTRL 0x3 -#define BIT_GPIO_GPI0_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPI0_PULL_CTRL) << BIT_SHIFT_GPIO_GPI0_PULL_CTRL) - - -//2 REG_GPIO_PULL_CTRL5 - -#define BIT_SHIFT_GPIO_GPEA_PULL_CTRL 20 -#define BIT_MASK_GPIO_GPEA_PULL_CTRL 0x3 -#define BIT_GPIO_GPEA_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPEA_PULL_CTRL) << BIT_SHIFT_GPIO_GPEA_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPE9_PULL_CTRL 18 -#define BIT_MASK_GPIO_GPE9_PULL_CTRL 0x3 -#define BIT_GPIO_GPE9_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPE9_PULL_CTRL) << BIT_SHIFT_GPIO_GPE9_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPE8_PULL_CTRL 16 -#define BIT_MASK_GPIO_GPE8_PULL_CTRL 0x3 -#define BIT_GPIO_GPE8_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPE8_PULL_CTRL) << BIT_SHIFT_GPIO_GPE8_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPK7_PULL_CTRL 12 -#define BIT_MASK_GPIO_GPK7_PULL_CTRL 0x3 -#define BIT_GPIO_GPK7_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPK7_PULL_CTRL) << BIT_SHIFT_GPIO_GPK7_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPK5_PULL_CTRL 10 -#define BIT_MASK_GPIO_GPK5_PULL_CTRL 0x3 -#define BIT_GPIO_GPK5_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPK5_PULL_CTRL) << BIT_SHIFT_GPIO_GPK5_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPK4_PULL_CTRL 8 -#define BIT_MASK_GPIO_GPK4_PULL_CTRL 0x3 -#define BIT_GPIO_GPK4_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPK4_PULL_CTRL) << BIT_SHIFT_GPIO_GPK4_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPK3_PULL_CTRL 6 -#define BIT_MASK_GPIO_GPK3_PULL_CTRL 0x3 -#define BIT_GPIO_GPK3_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPK3_PULL_CTRL) << BIT_SHIFT_GPIO_GPK3_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPK2_PULL_CTRL 4 -#define BIT_MASK_GPIO_GPK2_PULL_CTRL 0x3 -#define BIT_GPIO_GPK2_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPK2_PULL_CTRL) << BIT_SHIFT_GPIO_GPK2_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPK1_PULL_CTRL 2 -#define BIT_MASK_GPIO_GPK1_PULL_CTRL 0x3 -#define BIT_GPIO_GPK1_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPK1_PULL_CTRL) << BIT_SHIFT_GPIO_GPK1_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPK0_PULL_CTRL 0 -#define BIT_MASK_GPIO_GPK0_PULL_CTRL 0x3 -#define BIT_GPIO_GPK0_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPK0_PULL_CTRL) << BIT_SHIFT_GPIO_GPK0_PULL_CTRL) - - -//2 REG_GPIO_PULL_CTRL6 - -#define BIT_SHIFT_GPIO_GPD9_PULL_CTRL 18 -#define BIT_MASK_GPIO_GPD9_PULL_CTRL 0x3 -#define BIT_GPIO_GPD9_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPD9_PULL_CTRL) << BIT_SHIFT_GPIO_GPD9_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPD8_PULL_CTRL 16 -#define BIT_MASK_GPIO_GPD8_PULL_CTRL 0x3 -#define BIT_GPIO_GPD8_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPD8_PULL_CTRL) << BIT_SHIFT_GPIO_GPD8_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPC9_PULL_CTRL 2 -#define BIT_MASK_GPIO_GPC9_PULL_CTRL 0x3 -#define BIT_GPIO_GPC9_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPC9_PULL_CTRL) << BIT_SHIFT_GPIO_GPC9_PULL_CTRL) - - -#define BIT_SHIFT_GPIO_GPC8_PULL_CTRL 0 -#define BIT_MASK_GPIO_GPC8_PULL_CTRL 0x3 -#define BIT_GPIO_GPC8_PULL_CTRL(x) (((x) & BIT_MASK_GPIO_GPC8_PULL_CTRL) << BIT_SHIFT_GPIO_GPC8_PULL_CTRL) - - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_PERI_PWM0_CTRL -#define BIT_PERI_PWM0_EN BIT(31) - -#define BIT_SHIFT_PERI_PWM0_GT_SEL 24 -#define BIT_MASK_PERI_PWM0_GT_SEL 0xf -#define BIT_PERI_PWM0_GT_SEL(x) (((x) & BIT_MASK_PERI_PWM0_GT_SEL) << BIT_SHIFT_PERI_PWM0_GT_SEL) - - -#define BIT_SHIFT_PERI_PWM0_DUTY 12 -#define BIT_MASK_PERI_PWM0_DUTY 0x3ff -#define BIT_PERI_PWM0_DUTY(x) (((x) & BIT_MASK_PERI_PWM0_DUTY) << BIT_SHIFT_PERI_PWM0_DUTY) - - -#define BIT_SHIFT_PERI_PWM0_PERIOD 0 -#define BIT_MASK_PERI_PWM0_PERIOD 0x3ff -#define BIT_PERI_PWM0_PERIOD(x) (((x) & BIT_MASK_PERI_PWM0_PERIOD) << BIT_SHIFT_PERI_PWM0_PERIOD) - - -//2 REG_PERI_PWM1_CTRL -#define BIT_PERI_PWM1_EN BIT(31) - -#define BIT_SHIFT_PERI_PWM1_GT_SEL 24 -#define BIT_MASK_PERI_PWM1_GT_SEL 0xf -#define BIT_PERI_PWM1_GT_SEL(x) (((x) & BIT_MASK_PERI_PWM1_GT_SEL) << BIT_SHIFT_PERI_PWM1_GT_SEL) - - -#define BIT_SHIFT_PERI_PWM1_DUTY 12 -#define BIT_MASK_PERI_PWM1_DUTY 0x3ff -#define BIT_PERI_PWM1_DUTY(x) (((x) & BIT_MASK_PERI_PWM1_DUTY) << BIT_SHIFT_PERI_PWM1_DUTY) - - -#define BIT_SHIFT_PERI_PWM1_PERIOD 0 -#define BIT_MASK_PERI_PWM1_PERIOD 0x3ff -#define BIT_PERI_PWM1_PERIOD(x) (((x) & BIT_MASK_PERI_PWM1_PERIOD) << BIT_SHIFT_PERI_PWM1_PERIOD) - - -//2 REG_PERI_PWM2_CTRL -#define BIT_PERI_PWM2_EN BIT(31) - -#define BIT_SHIFT_PERI_PWM2_GT_SEL 24 -#define BIT_MASK_PERI_PWM2_GT_SEL 0xf -#define BIT_PERI_PWM2_GT_SEL(x) (((x) & BIT_MASK_PERI_PWM2_GT_SEL) << BIT_SHIFT_PERI_PWM2_GT_SEL) - - -#define BIT_SHIFT_PERI_PWM2_DUTY 12 -#define BIT_MASK_PERI_PWM2_DUTY 0x3ff -#define BIT_PERI_PWM2_DUTY(x) (((x) & BIT_MASK_PERI_PWM2_DUTY) << BIT_SHIFT_PERI_PWM2_DUTY) - - -#define BIT_SHIFT_PERI_PWM2_PERIOD 0 -#define BIT_MASK_PERI_PWM2_PERIOD 0x3ff -#define BIT_PERI_PWM2_PERIOD(x) (((x) & BIT_MASK_PERI_PWM2_PERIOD) << BIT_SHIFT_PERI_PWM2_PERIOD) - - -//2 REG_PERI_PWM3_CTRL -#define BIT_PERI_PWM3_EN BIT(31) - -#define BIT_SHIFT_PERI_PWM3_GT_SEL 24 -#define BIT_MASK_PERI_PWM3_GT_SEL 0xf -#define BIT_PERI_PWM3_GT_SEL(x) (((x) & BIT_MASK_PERI_PWM3_GT_SEL) << BIT_SHIFT_PERI_PWM3_GT_SEL) - - -#define BIT_SHIFT_PERI_PWM3_DUTY 12 -#define BIT_MASK_PERI_PWM3_DUTY 0x3ff -#define BIT_PERI_PWM3_DUTY(x) (((x) & BIT_MASK_PERI_PWM3_DUTY) << BIT_SHIFT_PERI_PWM3_DUTY) - - -#define BIT_SHIFT_PERI_PWM3_PERIOD 0 -#define BIT_MASK_PERI_PWM3_PERIOD 0x3ff -#define BIT_PERI_PWM3_PERIOD(x) (((x) & BIT_MASK_PERI_PWM3_PERIOD) << BIT_SHIFT_PERI_PWM3_PERIOD) - - -//2 REG_PERI_TIM_EVT_CTRL -#define BIT_PERI_GT_EVT3_EN BIT(31) - -#define BIT_SHIFT_PERI_GT_EVT3_SRC_SEL 28 -#define BIT_MASK_PERI_GT_EVT3_SRC_SEL 0x7 -#define BIT_PERI_GT_EVT3_SRC_SEL(x) (((x) & BIT_MASK_PERI_GT_EVT3_SRC_SEL) << BIT_SHIFT_PERI_GT_EVT3_SRC_SEL) - - -#define BIT_SHIFT_PERI_GT_EVT3_PULSE_DUR 24 -#define BIT_MASK_PERI_GT_EVT3_PULSE_DUR 0xf -#define BIT_PERI_GT_EVT3_PULSE_DUR(x) (((x) & BIT_MASK_PERI_GT_EVT3_PULSE_DUR) << BIT_SHIFT_PERI_GT_EVT3_PULSE_DUR) - -#define BIT_PERI_GT_EVT2_EN BIT(23) - -#define BIT_SHIFT_PERI_GT_EVT2_SRC_SEL 20 -#define BIT_MASK_PERI_GT_EVT2_SRC_SEL 0x7 -#define BIT_PERI_GT_EVT2_SRC_SEL(x) (((x) & BIT_MASK_PERI_GT_EVT2_SRC_SEL) << BIT_SHIFT_PERI_GT_EVT2_SRC_SEL) - - -#define BIT_SHIFT_PERI_GT_EVT2_PULSE_DUR 16 -#define BIT_MASK_PERI_GT_EVT2_PULSE_DUR 0xf -#define BIT_PERI_GT_EVT2_PULSE_DUR(x) (((x) & BIT_MASK_PERI_GT_EVT2_PULSE_DUR) << BIT_SHIFT_PERI_GT_EVT2_PULSE_DUR) - -#define BIT_PERI_GT_EVT1_EN BIT(15) - -#define BIT_SHIFT_PERI_GT_EVT1_SRC_SEL 12 -#define BIT_MASK_PERI_GT_EVT1_SRC_SEL 0x7 -#define BIT_PERI_GT_EVT1_SRC_SEL(x) (((x) & BIT_MASK_PERI_GT_EVT1_SRC_SEL) << BIT_SHIFT_PERI_GT_EVT1_SRC_SEL) - - -#define BIT_SHIFT_PERI_GT_EVT1_PULSE_DUR 8 -#define BIT_MASK_PERI_GT_EVT1_PULSE_DUR 0xf -#define BIT_PERI_GT_EVT1_PULSE_DUR(x) (((x) & BIT_MASK_PERI_GT_EVT1_PULSE_DUR) << BIT_SHIFT_PERI_GT_EVT1_PULSE_DUR) - -#define BIT_PERI_GT_EVT0_EN BIT(7) - -#define BIT_SHIFT_PERI_GT_EVT0_SRC_SEL 4 -#define BIT_MASK_PERI_GT_EVT0_SRC_SEL 0x7 -#define BIT_PERI_GT_EVT0_SRC_SEL(x) (((x) & BIT_MASK_PERI_GT_EVT0_SRC_SEL) << BIT_SHIFT_PERI_GT_EVT0_SRC_SEL) - - -#define BIT_SHIFT_PERI_GT_EVT0_PULSE_DUR 0 -#define BIT_MASK_PERI_GT_EVT0_PULSE_DUR 0xf -#define BIT_PERI_GT_EVT0_PULSE_DUR(x) (((x) & BIT_MASK_PERI_GT_EVT0_PULSE_DUR) << BIT_SHIFT_PERI_GT_EVT0_PULSE_DUR) - - -//2 REG_PERI_EGTIM_CTRL - -#define BIT_SHIFT_PERI_EGTIM_PIN_GROUP2_OPT_SEL 12 -#define BIT_MASK_PERI_EGTIM_PIN_GROUP2_OPT_SEL 0x3 -#define BIT_PERI_EGTIM_PIN_GROUP2_OPT_SEL(x) (((x) & BIT_MASK_PERI_EGTIM_PIN_GROUP2_OPT_SEL) << BIT_SHIFT_PERI_EGTIM_PIN_GROUP2_OPT_SEL) - - -#define BIT_SHIFT_PERI_EGTIM_PIN_GROUP1_OPT_SEL 10 -#define BIT_MASK_PERI_EGTIM_PIN_GROUP1_OPT_SEL 0x3 -#define BIT_PERI_EGTIM_PIN_GROUP1_OPT_SEL(x) (((x) & BIT_MASK_PERI_EGTIM_PIN_GROUP1_OPT_SEL) << BIT_SHIFT_PERI_EGTIM_PIN_GROUP1_OPT_SEL) - - -#define BIT_SHIFT_PERI_EGTIM_PIN_GROUP0_OPT_SEL 8 -#define BIT_MASK_PERI_EGTIM_PIN_GROUP0_OPT_SEL 0x3 -#define BIT_PERI_EGTIM_PIN_GROUP0_OPT_SEL(x) (((x) & BIT_MASK_PERI_EGTIM_PIN_GROUP0_OPT_SEL) << BIT_SHIFT_PERI_EGTIM_PIN_GROUP0_OPT_SEL) - - -//2 REG_NOT_VALID - -#define BIT_SHIFT_PERI_EGTIM_REF_SIG_SEL 4 -#define BIT_MASK_PERI_EGTIM_REF_SIG_SEL 0x3 -#define BIT_PERI_EGTIM_REF_SIG_SEL(x) (((x) & BIT_MASK_PERI_EGTIM_REF_SIG_SEL) << BIT_SHIFT_PERI_EGTIM_REF_SIG_SEL) - -#define BIT_PERI_EGTIM_EN BIT(0) - -//2 REG_NOT_VALID - -//2 REG_PEON_CFG - -//2 REG_PEON_STATUS -#define BIT_PEON_SDIO_ALDN BIT(0) - - -//========== Register Address Definition ==================// -#define REG_PEON_PWR_CTRL 0x0200 -#define REG_PON_ISO_CTRL 0x0204 -#define REG_SOC_FUNC_EN 0x0210 -#define REG_SOC_HCI_COM_FUNC_EN 0x0214 -#define REG_SOC_PERI_FUNC0_EN 0x0218 -#define REG_SOC_PERI_FUNC1_EN 0x021C -#define REG_SOC_PERI_BD_FUNC0_EN 0x0220 -#define REG_PESOC_CLK_CTRL 0x0230 -#define REG_PESOC_PERI_CLK_CTRL0 0x0234 -#define REG_PESOC_PERI_CLK_CTRL1 0x0238 -#define REG_PESOC_CLK_CTRL3 0x023C -#define REG_PESOC_HCI_CLK_CTRL0 0x0240 -#define REG_PESOC_COM_CLK_CTRL1 0x0244 -#define REG_PESOC_HW_ENG_CLK_CTRL 0x0248 -#define REG_PESOC_CLK_SEL 0x0250 -#define REG_SYS_ANACK_CAL_CTRL 0x026C -#define REG_OSC32K_CTRL 0x0270 -#define REG_OSC32K_REG_CTRL0 0x0274 -#define REG_OSC32K_REG_CTRL1 0x0278 -#define REG_THERMAL_METER_CTRL 0x027C -#define REG_UART_MUX_CTRL 0x0280 -#define REG_SPI_MUX_CTRL 0x0284 -#define REG_I2C_MUX_CTRL 0x0288 -#define REG_I2S_MUX_CTRL 0x028C -#define REG_HCI_PINMUX_CTRL 0x02A0 -#define REG_WL_PINMUX_CTRL 0x02A4 -#define REG_BT_PINMUX_CTRL 0x02A8 -#define REG_PWM_PINMUX_CTRL 0x02AC -#define REG_CPU_PERIPHERAL_CTRL 0x02C0 -#define REG_HCI_CTRL_STATUS_0 0x02E0 -#define REG_HCI_CTRL_STATUS_1 0x02E4 -#define REG_PESOC_MEM_CTRL 0x0300 -#define REG_PESOC_SOC_CTRL 0x0304 -#define REG_PESOC_PERI_CTRL 0x0308 -#define REG_GPIO_SHTDN_CTRL 0x0320 -#define REG_GPIO_DRIVING_CTRL 0x0324 -#define REG_GPIO_PULL_CTRL0 0x0330 -#define REG_GPIO_PULL_CTRL1 0x0334 -#define REG_GPIO_PULL_CTRL2 0x0338 -#define REG_GPIO_PULL_CTRL3 0x033C -#define REG_GPIO_PULL_CTRL4 0x0340 -#define REG_GPIO_PULL_CTRL5 0x0344 -#define REG_GPIO_PULL_CTRL6 0x0348 -#define REG_PERI_PWM0_CTRL 0x0360 -#define REG_PERI_PWM1_CTRL 0x0364 -#define REG_PERI_PWM2_CTRL 0x0368 -#define REG_PERI_PWM3_CTRL 0x036C -#define REG_PERI_TIM_EVT_CTRL 0x0370 -#define REG_PERI_EGTIM_CTRL 0x0374 -#define REG_PEON_CFG 0x03F0 -#define REG_PEON_STATUS 0x03F4 - - -#endif // end of "#ifndef __INC_RTL8195A_PERI_ON_H" diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pwm.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pwm.c deleted file mode 100644 index f38aba1..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pwm.c +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * -------------------------- - * bug fixing: pvvx - */ - - -#include "rtl8195a.h" -#include "hal_peri_on.h" - -#ifdef CONFIG_PWM_EN -#include "rtl8195a_pwm.h" -#include "hal_pwm.h" - -//extern HAL_PWM_ADAPTER PWMPin[]; - -//extern HAL_TIMER_OP HalTimerOp; -extern uint32_t gTimerRecord; - -/** - * @brief Configure a G-Timer to generate a tick with certain time. - * - * @param pwm_id: the PWM pin index - * @param tick_time: the time (micro-second) of a tick - * - * @retval None - */ -void -Pwm_SetTimerTick_8195a( - HAL_PWM_ADAPTER *pPwmAdapt, - uint32_t tick_time -) -{ - if (tick_time <= MIN_GTIMER_TIMEOUT) { - tick_time = MIN_GTIMER_TIMEOUT; - } - // Initial a G-Timer for the PWM pin - if (pPwmAdapt->tick_time != tick_time) { - pPwmAdapt->tick_time = tick_time; - DBG_PWM_INFO("%s: Timer_Id=%d Count=%d\n", __FUNCTION__, pPwmAdapt->gtimer_id, tick_time); - // if timer is running ? - if(gTimerRecord & (1 << pPwmAdapt->gtimer_id)) { - HalTimerReLoadRtl8195a_Patch(pPwmAdapt->gtimer_id, tick_time); - } else { - TIMER_ADAPTER TimerAdapter; - TimerAdapter.IrqDis = 1; // Disable Irq - TimerAdapter.IrqHandle.IrqFun = (IRQ_FUN) NULL; - TimerAdapter.IrqHandle.IrqNum = TIMER2_7_IRQ; - TimerAdapter.IrqHandle.Priority = 10; - TimerAdapter.IrqHandle.Data = (uint32_t)NULL; - TimerAdapter.TimerId = pPwmAdapt->gtimer_id; - TimerAdapter.TimerIrqPriority = 0; - TimerAdapter.TimerLoadValueUs = tick_time-1; - TimerAdapter.TimerMode = 1; // auto-reload with user defined value - HalTimerInitRtl8195a_Patch((void*) &TimerAdapter); - } - } -} - - -/** - * @brief Set the duty ratio of the PWM pin. - * - * @param pwm_id: the PWM pin index - * @param period: the period time, in micro-second. - * @param pulse_width: the pulse width time, in micro-second. - * - * @retval None - */ -void -HAL_Pwm_SetDuty_8195a( - HAL_PWM_ADAPTER *pPwmAdapt, - uint32_t period, - uint32_t pulse_width -) -{ - uint32_t RegAddr; - uint32_t RegValue; - uint32_t period_tick; - uint32_t pulsewidth_tick; - uint32_t tick_time; - uint8_t timer_id; - uint8_t pwm_id; - - pwm_id = pPwmAdapt->pwm_id; - // Adjust the tick time to a proper value - if (period < (MIN_GTIMER_TIMEOUT*2)) { - DBG_PWM_ERR ("HAL_Pwm_SetDuty_8195a: Invalid PWM period(%d), too short!\n", period); - tick_time = MIN_GTIMER_TIMEOUT; - period = MIN_GTIMER_TIMEOUT*2; - } - else { - tick_time = period / 1020; // 0x3fc; // a duty cycle be devided into 1020 ticks - if (tick_time < MIN_GTIMER_TIMEOUT) { - tick_time = MIN_GTIMER_TIMEOUT; - } - } - - Pwm_SetTimerTick_8195a(pPwmAdapt, tick_time); - tick_time = pPwmAdapt->tick_time; - - period_tick = period/tick_time; - if (period_tick == 0) { - period_tick = 1; - } - - if (pulse_width >= period) { - pulse_width = period; - } - pulsewidth_tick = pulse_width/tick_time; - - timer_id = pPwmAdapt->gtimer_id; - - pPwmAdapt->period = period_tick & BIT_MASK_PERI_PWM0_PERIOD; - pPwmAdapt->pulsewidth = pulsewidth_tick & BIT_MASK_PERI_PWM0_DUTY; - - RegAddr = REG_PERI_PWM0_CTRL + (pwm_id*4); - RegValue = BIT_PERI_PWM0_EN | BIT_PERI_PWM0_GT_SEL(timer_id) | BIT_PERI_PWM0_DUTY(pulsewidth_tick) | BIT_PERI_PWM0_PERIOD(period_tick); - - HAL_WRITE32(PERI_ON_BASE, RegAddr, RegValue); -} - -/** - * @brief Initializes and enable a PWM control pin. - * - * @param pwm_id: the PWM pin index - * @param sel: pin mux selection - * @param timer_id: the G-timer index assigned to this PWM - * - * @retval HAL_Status - */ -HAL_Status -HAL_Pwm_Init_8195a( - HAL_PWM_ADAPTER *pPwmAdapt -) -{ - uint32_t pwm_id; - uint32_t pin_sel; - - pwm_id = pPwmAdapt->pwm_id; - pin_sel = pPwmAdapt->sel; - // Initial a G-Timer for the PWM pin -//p/ Pwm_SetTimerTick_8195a(pPwmAdapt, MIN_GTIMER_TIMEOUT); - - // Set default duty ration -//p/ HAL_Pwm_SetDuty_8195a(pPwmAdapt, 20000, 10000); - - // Configure the Pin Mux - PinCtrl((PWM0+pwm_id), pin_sel, 1); - - return HAL_OK; -} - - -/** - * @brief Enable a PWM control pin. - * - * @param pwm_id: the PWM pin index - * - * @retval None - */ -void -HAL_Pwm_Enable_8195a( - HAL_PWM_ADAPTER *pPwmAdapt -) -{ - uint32_t pwm_id; - - pwm_id = pPwmAdapt->pwm_id; - // Configure the Pin Mux - if (!pPwmAdapt->enable) { - PinCtrl((PWM0+pwm_id), pPwmAdapt->sel, 1); - HalTimerEnRtl8195a_Patch(pPwmAdapt->gtimer_id); - pPwmAdapt->enable = 1; - } -} - - -/** - * @brief Disable a PWM control pin. - * - * @param pwm_id: the PWM pin index - * - * @retval None - */ -void -HAL_Pwm_Disable_8195a( - HAL_PWM_ADAPTER *pPwmAdapt -) -{ - uint32_t pwm_id; - - pwm_id = pPwmAdapt->pwm_id; - // Configure the Pin Mux - if (pPwmAdapt->enable) { - PinCtrl((PWM0+pwm_id), pPwmAdapt->sel, 0); - HalTimerDisRtl8195a(pPwmAdapt->gtimer_id); - pPwmAdapt->enable = 0; - } -} - -#endif //CONFIG_PWM_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pwm.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pwm.h deleted file mode 100644 index 44e8b55..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pwm.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#ifndef _RTL8195A_PWM_H_ -#define _RTL8195A_PWM_H_ -#include "basic_types.h" - -extern void -HAL_Pwm_SetDuty_8195a( - HAL_PWM_ADAPTER *pPwmAdapt, - uint32_t period, - uint32_t pulse_width -); - -extern HAL_Status -HAL_Pwm_Init_8195a( - HAL_PWM_ADAPTER *pPwmAdapt -); - -extern void -HAL_Pwm_Enable_8195a( - HAL_PWM_ADAPTER *pPwmAdapt -); - -extern void -HAL_Pwm_Disable_8195a( - HAL_PWM_ADAPTER *pPwmAdapt -); - - -#ifdef CONFIG_CHIP_E_CUT -extern _LONG_CALL_ void -HAL_Pwm_SetDuty_8195a_V04( - HAL_PWM_ADAPTER *pPwmAdapt, - uint32_t period, - uint32_t pulse_width -); - -extern _LONG_CALL_ HAL_Status -HAL_Pwm_Init_8195a_V04( - HAL_PWM_ADAPTER *pPwmAdapt -); - -extern _LONG_CALL_ void -HAL_Pwm_Enable_8195a_V04( - HAL_PWM_ADAPTER *pPwmAdapt -); - -extern _LONG_CALL_ void -HAL_Pwm_Disable_8195a_V04( - HAL_PWM_ADAPTER *pPwmAdapt -); -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio.h deleted file mode 100644 index 7f4c5a2..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio.h +++ /dev/null @@ -1,1033 +0,0 @@ - /* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#ifndef _RTL8195A_SDIO_H_ -#define _RTL8195A_SDIO_H_ - -#include "hal_api.h" -#include "hal_util.h" -#if defined(CONFIG_SDIO_BOOT_SIM) || defined(CONFIG_SDIO_BOOT_ROM) -#define SDIO_BOOT_DRIVER 1 // is this SDIO driver works for booting -#else -#include "osdep_api.h" -#define SDIO_BOOT_DRIVER 0 // is this SDIO driver works for booting -#endif - -#if defined(__IAR_SYSTEMS_ICC__) //for IAR SDK -#include "platform_opts.h" -#endif - -#ifndef CONFIG_INIC_EN -#define CONFIG_INIC_EN 0 -#endif -#if CONFIG_INIC_EN -#define CONFIG_INIC_SKB_TX 1 //use SKB for trx to improve the throughput -#define CONFIG_INIC_SKB_RX 1 -#endif - -#if defined(__IAR_SYSTEMS_ICC__) && (CONFIG_INIC_EN == 0)//for IAR SDK - #define SDIO_API_DEFINED 1 -#else - #define SDIO_API_DEFINED 0 -#endif - -#ifndef PRIORITIE_OFFSET //PRIORITIE_OFFSET in FreeRTOSConfig.h -#define PRIORITIE_OFFSET 0 -#endif - -#define SDIO_DEBUG 0 -#define SDIO_MP_MODE 0 // if includes MP mode function -#define SDIO_MAX_WAIT_RX_DMA 100 // Wait RX DMA done -#define SDIO_RX_PKT_SIZE_OVER_16K 0 /* is support SDIO RX packet size > 16K. if true, - a big packet will be transmited via multiple RX_BD */ -#define SDIO_MAILBOX_SIZE 10 // the maximum number of message block can be stored in this mailbox -#define SDIO_PERIODICAL_TIMER_INTERVAL 2000 // in ms, the interval of SDIO periodical timer -#define SDIO_AVG_TP_WIN_SIZE 20 // the number of entry to log the byte count for every periodical timer statistic, to calculate throughput - -#define HAL_SDIO_READ32(addr) HAL_READ32(SDIO_DEVICE_REG_BASE, addr) -#define HAL_SDIO_WRITE32(addr, value) HAL_WRITE32(SDIO_DEVICE_REG_BASE, addr, value) -#define HAL_SDIO_READ16(addr) HAL_READ16(SDIO_DEVICE_REG_BASE, addr) -#define HAL_SDIO_WRITE16(addr, value) HAL_WRITE16(SDIO_DEVICE_REG_BASE, addr, value) -#define HAL_SDIO_READ8(addr) HAL_READ8(SDIO_DEVICE_REG_BASE, addr) -#define HAL_SDIO_WRITE8(addr, value) HAL_WRITE8(SDIO_DEVICE_REG_BASE, addr, value) - -/***** Register Address *****/ -#define REG_SPDIO_TXBD_ADDR 0xA0 // 4 Bytes -#define REG_SPDIO_TXBD_SIZE 0xA4 // 4 Bytes -#define REG_SPDIO_TXBD_WPTR 0xA8 // 2 Bytes -#define REG_SPDIO_TXBD_RPTR 0xAC // 2 Bytes -#define REG_SPDIO_RXBD_ADDR 0xB0 // 4 Bytes -#define REG_SPDIO_RXBD_SIZE 0xB4 // 2 Bytes -#define REG_SPDIO_RXBD_C2H_WPTR 0xB6 // 2 Bytes -#define REG_SPDIO_RXBD_C2H_RPTR 0xB8 // 2 Bytes -#define REG_SPDIO_HCI_RX_REQ 0xBA // 1 Byte -#define REG_SPDIO_CPU_RST_DMA 0xBB // 1 Byte -#define REG_SPDIO_RX_REQ_ADDR 0xBC // 2 Bytes -#define REG_SPDIO_CPU_INT_MASK 0xC0 // 2 Bytes -#define REG_SPDIO_CPU_INT_STAS 0xC2 // 2 Bytes -#define REG_SPDIO_CCPWM 0xC4 // 1 Byts -#define REG_SPDIO_CPU_IND 0xC5 // 1 Byte -#define REG_SPDIO_CCPWM2 0xC6 // 2 Bytes -#define REG_SPDIO_CPU_H2C_MSG 0xC8 // 4 Bytes -#define REG_SPDIO_CPU_C2H_MSG 0xCC // 4 Bytes -#define REG_SPDIO_CRPWM 0xD0 // 1 Bytes -#define REG_SPDIO_CRPWM2 0xD2 // 2 Bytes -#define REG_SPDIO_AHB_DMA_CTRL 0xD4 // 4 Bytes -#define REG_SPDIO_RXBD_CNT 0xD8 // 4 Bytes -#define REG_SPDIO_TX_BUF_UNIT_SZ 0xD9 // 1 Bytes -#define REG_SPDIO_RX_BD_FREE_CNT 0xDA // 2 Bytes -#define REG_SPDIO_CPU_H2C_MSG_EXT 0xDC // 4 Bytes -#define REG_SPDIO_CPU_C2H_MSG_EXT 0xE0 // 4 Bytes - -// Register REG_SPDIO_CPU_RST_DMA -#define BIT_CPU_RST_SDIO_DMA BIT(7) - -// Register REG_SPDIO_CPU_INT_MASK, REG_SPDIO_CPU_INT_STAS -#define BIT_TXFIFO_H2C_OVF BIT(0) -#define BIT_H2C_BUS_RES_FAIL BIT(1) -#define BIT_H2C_DMA_OK BIT(2) -#define BIT_C2H_DMA_OK BIT(3) -#define BIT_H2C_MSG_INT BIT(4) -#define BIT_RPWM1_INT BIT(5) -#define BIT_RPWM2_INT BIT(6) -#define BIT_SDIO_RST_CMD_INT BIT(7) -#define BIT_RXBD_FLAG_ERR_INT BIT(8) -#define BIT_RX_BD_AVAI_INT BIT(9) -#define BIT_HOST_WAKE_CPU_INT BIT(10) - -// Register REG_SPDIO_CPU_IND -#define BIT_SYSTEM_TRX_RDY_IND BIT(0) - -// Register REG_SPDIO_HCI_RX_REQ -#define BIT_HCI_RX_REQ BIT(0) - -/* Register for SOC_HCI_COM_FUN_EN */ -#define BIT_SOC_HCI_SDIOD_OFF_EN BIT(1) // SDIO Function Block on Power_Off domain -#define BIT_SOC_HCI_SDIOD_ON_EN BIT(0) // SDIO Function Block on Power_On domain - -/* Register REG_PESOC_HCI_CLK_CTRL0 */ -#define BIT_SOC_SLPCK_SDIO_HST_EN BIT(3) // SDIO_HST clock enable when CPU sleep command -#define BIT_SOC_ACTCK_SDIO_HST_EN BIT(2) // SDIO_HST clock enable in CPU run mode -#define BIT_SOC_SLPCK_SDIO_DEV_EN BIT(1) // SDIO_DEV clock enable when CPU sleep command -#define BIT_SOC_ACTCK_SDIO_DEV_EN BIT(0) // SDIO_DEV clock enable in CPU run mode - -/***** Structer for each Register *****/ -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) -// Little Endian -// Register REG_SPDIO_HCI_RX_REQ @ 0xBA -typedef struct _SPDIO_HCI_RX_REQ { - uint8_t HCI_RX_REQ:1; /* bit[0], CPU trigger this bit to enable SDIO IP RX transfer by fetch BD info */ - uint8_t Reserved:7; /* bit[7:1], Reserved */ -} SPDIO_HCI_RX_REQ, *PSPDIO_HCI_RX_REQ; - -// Register REG_SPDIO_CPU_RST_DMA @ 0xBB -typedef struct _SPDIO_CPU_RST_DMA { - uint8_t Reserved:7; /* bit[6:0], Reserved */ - uint8_t CPU_RST_SDIO:1; /* bit[7], CPU set this bit to reset SDIO DMA */ -} SPDIO_CPU_RST_DMA, *PSPDIO_CPU_RST_DMA; - -// Register REG_SPDIO_CPU_INT_MASK @ 0xC0 -typedef struct _SPDIO_CPU_INT_MASK { - uint16_t TXFIFO_H2C_OVF:1; /* bit[0], set 0 to mask TXFIFO_H2C_OVF_INT */ - uint16_t H2C_BUS_RES_FAIL:1; /* bit[1], set 0 to mask H2C_BUS_RES_FAIL_INT */ - uint16_t H2C_DMA_OK:1; /* bit[2], set 0 to mask H2C_DMA_OK_INT */ - uint16_t C2H_DMA_OK:1; /* bit[3], set 0 to mask C2H_DMA_OK_INT */ - uint16_t H2C_MSG_INT:1; /* bit[4], set 0 to mask H2C_MSG_INT_INT */ - uint16_t RPWM_INT:1; /* bit[5], set 0 to mask RPWM_INT */ - uint16_t RPWM2_INT:1; /* bit[6], set 0 to mask RPWM2_INT */ - uint16_t SDIO_RST_CMD_INT:1; /* bit[7], set 0 to mask SDIO_RST_CMD_INT */ - uint16_t BD_FLAG_ERR_INT:1; /* bit[8], set 0 to mask BD_FLAG_ERR_INT */ - uint16_t Reserved:7; /* bit[15:9], Reserved */ -} SPDIO_CPU_INT_MASK, *PSPDIO_CPU_INT_MASK; - -// Register REG_SPDIO_CPU_INT_STATUS @ 0xC2 -typedef struct _SPDIO_CPU_INT_STAS { - uint16_t TXFIFO_H2C_OVF:1; /* bit[0], set 0 to mask TXFIFO_H2C_OVF_INT */ - uint16_t H2C_BUS_RES_FAIL:1; /* bit[1], set 0 to mask H2C_BUS_RES_FAIL_INT */ - uint16_t H2C_DMA_OK:1; /* bit[2], set 0 to mask H2C_DMA_OK_INT */ - uint16_t C2H_DMA_OK:1; /* bit[3], set 0 to mask C2H_DMA_OK_INT */ - uint16_t H2C_MSG_INT:1; /* bit[4], set 0 to mask H2C_MSG_INT_INT */ - uint16_t RPWM_INT:1; /* bit[5], set 0 to mask RPWM_INT */ - uint16_t RPWM2_INT:1; /* bit[6], set 0 to mask RPWM2_INT */ - uint16_t SDIO_RST_CMD_INT:1; /* bit[7], set 0 to mask SDIO_RST_CMD_INT */ - uint16_t BD_FLAG_ERR_INT:1; /* bit[8], set 0 to mask BD_FLAG_ERR_INT */ - uint16_t Reserved:7; /* bit[15:9], Reserved */ -} SPDIO_CPU_INT_STAS, *PSPDIO_CPU_INT_STAS; - -// Register REG_SPDIO_CCPWM @ 0xC4 -typedef struct _SPDIO_CCPWM { - uint8_t :1; /* bit[0] */ - uint8_t WLAN_TRX:1; /* bit[1], 0: WLAN Off; 1: WLAN On */ - uint8_t RPS_ST:1; /* bit[2], 0/1: AP Register Sleep/Active state */ - uint8_t WWLAN:1; /* bit[3], 0/1: "Wake on WLAN"/"Normal" state */ - uint8_t Reserved:3; /* bit[6:4], Reserved */ - uint8_t TOGGLING:1; /* bit[7], issue interrupt when 0->1 or 1->0 */ -} SPDIO_CCPWM, *PSPDIO_CCPWM; - -// Register REG_SPDIO_CPU_IND @ 0xC5 -typedef struct _SPDIO_CPU_IND { - uint8_t SYS_TRX_RDY:1; /* bit[0], To indicate the Host system that CPU is ready for TRX - , to be sync to 0x87[0] */ - uint8_t Reserved:7; /* bit[7:1], Reserved */ -} SPDIO_CPU_IND, *PSPDIO_CPU_IND; - -// Register REG_SPDIO_CPU_H2C_MSG @ 0xC8 -typedef struct _SPDIO_CPU_H2C_MSG { - uint32_t CPU_H2C_MSG:30; /* bit[30:0], Host CPU to FW message, sync from REG_SDIO_H2C_MSG */ - uint32_t Reserved:1; /* bit[31], Reserved */ -} SPDIO_CPU_H2C_MSG, *PSPDIO_CPU_H2C_MSG; - -// Register REG_SPDIO_CPU_C2H_MSG @ 0xCC -typedef struct _SPDIO_CPU_C2H_MSG { - uint32_t CPU_C2H_MSG:30; /* bit[30:0], FW to Host CPU message, sync to REG_SDIO_C2H_MSG */ - uint32_t Reserved:1; /* bit[31], Reserved */ -} SPDIO_CPU_C2H_MSG, *PSPDIO_CPU_C2H_MSG; - -// Register REG_SPDIO_CRPWM @ 0xD0 -typedef struct _SPDIO_CRPWM { - uint8_t :1; /* bit[0] */ - uint8_t WLAN_TRX:1; /* bit[1], 0: WLAN Off; 1: WLAN On */ - uint8_t RPS_ST:1; /* bit[2], 0/1: AP Register Sleep/Active state */ - uint8_t WWLAN:1; /* bit[3], 0/1: "Wake on WLAN"/"Normal" state */ - uint8_t Reserved:3; /* bit[6:4], Reserved */ - uint8_t TOGGLING:1; /* bit[7], issue interrupt when 0->1 or 1->0 */ -} SPDIO_CRPWM, *PSPDIO_CRPWM; - -// Register REG_SPDIO_AHB_DMA_CTRL @ 0xD4 -typedef struct _SPDIO_AHB_DMA_CTRL { - uint32_t TXFF_WLEVEL:7; /* bit[6:0], SPDIO TX FIFO water level */ - uint32_t :1; /* bit[7] */ - uint32_t RXFF_WLEVEL:7; /* bit[14:8], SPDIO RX FIFO water level */ - uint32_t :1; /* bit[15] */ - uint32_t AHB_DMA_CS:4; /* bit[19:16], AHB DMA state */ - uint32_t :1; /* bit[20] */ - uint32_t AHB_MASTER_RDY:1; /* bit[21], AHB Master Hready signal */ - uint32_t AHB_DMA_TRANS:2; /* bit[23:22], AHB DMA Trans value, for debugging */ - uint32_t AHB_BUSY_WAIT_CNT:4; /* bit[27:24], timeout for AHB controller to wait busy */ - uint32_t AHB_BURST_TYPE:3; /* bit[30:28], AHB burst type */ - uint32_t DISPATCH_TXAGG:1; /* bit[31], Enable to dispatch aggregated TX packet */ -} SPDIO_AHB_DMA_CTRL, *PSPDIO_AHB_DMA_CTRL; - -#else /* else of '#if LITTLE_ENDIAN' */ -// Big Endian -typedef struct _SPDIO_HCI_RX_REQ { - uint8_t Reserved:7; /* bit[7:1], Reserved */ - uint8_t HCI_RX_REQ:1; /* bit[0], CPU trigger this bit to enable SDIO IP RX transfer by fetch BD info */ -} SPDIO_HCI_RX_REQ, *PSPDIO_HCI_RX_REQ; - -// Register REG_SPDIO_CPU_RST_DMA @ 0xBB -typedef struct _SPDIO_CPU_RST_DMA { - uint8_t CPU_RST_SDIO:1; /* bit[7], CPU set this bit to reset SDIO DMA */ - uint8_t Reserved:7; /* bit[6:0], Reserved */ -} SPDIO_CPU_RST_DMA, *PSPDIO_CPU_RST_DMA; - -// Register REG_SPDIO_CPU_INT_MASK @ 0xC0 -typedef struct _SPDIO_CPU_INT_MASK { - uint16_t Reserved:7; /* bit[15:9], Reserved */ - uint16_t BD_FLAG_ERR_INT:1; /* bit[8], set 0 to mask BD_FLAG_ERR_INT */ - uint16_t SDIO_RST_CMD_INT:1; /* bit[7], set 0 to mask SDIO_RST_CMD_INT */ - uint16_t RPWM2_INT:1; /* bit[6], set 0 to mask RPWM2_INT */ - uint16_t RPWM_INT:1; /* bit[5], set 0 to mask RPWM_INT */ - uint16_t H2C_MSG_INT:1; /* bit[4], set 0 to mask H2C_MSG_INT_INT */ - uint16_t C2H_DMA_OK:1; /* bit[3], set 0 to mask C2H_DMA_OK_INT */ - uint16_t H2C_DMA_OK:1; /* bit[2], set 0 to mask H2C_DMA_OK_INT */ - uint16_t H2C_BUS_RES_FAIL:1; /* bit[1], set 0 to mask H2C_BUS_RES_FAIL_INT */ - uint16_t TXFIFO_H2C_OVF:1; /* bit[0], set 0 to mask TXFIFO_H2C_OVF_INT */ -} SPDIO_CPU_INT_MASK, *PSPDIO_CPU_INT_MASK; - -// Register REG_SPDIO_CPU_INT_STAS @ 0xC2 -typedef struct _SPDIO_CPU_INT_STAS { - uint16_t Reserved:7; /* bit[15:9], Reserved */ - uint16_t BD_FLAG_ERR_INT:1; /* bit[8], set 0 to mask BD_FLAG_ERR_INT */ - uint16_t SDIO_RST_CMD_INT:1; /* bit[7], set 0 to mask SDIO_RST_CMD_INT */ - uint16_t RPWM2_INT:1; /* bit[6], set 0 to mask RPWM2_INT */ - uint16_t RPWM_INT:1; /* bit[5], set 0 to mask RPWM_INT */ - uint16_t H2C_MSG_INT:1; /* bit[4], set 0 to mask H2C_MSG_INT_INT */ - uint16_t C2H_DMA_OK:1; /* bit[3], set 0 to mask C2H_DMA_OK_INT */ - uint16_t H2C_DMA_OK:1; /* bit[2], set 0 to mask H2C_DMA_OK_INT */ - uint16_t H2C_BUS_RES_FAIL:1; /* bit[1], set 0 to mask H2C_BUS_RES_FAIL_INT */ - uint16_t TXFIFO_H2C_OVF:1; /* bit[0], set 0 to mask TXFIFO_H2C_OVF_INT */ -} SPDIO_CPU_INT_STAS, *PSPDIO_CPU_INT_STAS; - -// Register REG_SPDIO_CCPWM @ 0xC4 -typedef struct _SPDIO_CCPWM { - uint8_t TOGGLING:1; /* bit[7], issue interrupt when 0->1 or 1->0 */ - uint8_t Reserved:3; /* bit[6:4], Reserved */ - uint8_t WWLAN:1; /* bit[3], 0/1: "Wake on WLAN"/"Normal" state */ - uint8_t RPS_ST:1; /* bit[2], 0/1: AP Register Sleep/Active state */ - uint8_t WLAN_TRX:1; /* bit[1], 0: WLAN Off; 1: WLAN On */ - uint8_t :1; /* bit[0] */ -} SPDIO_CCPWM, *PSPDIO_CCPWM; - -// Register REG_SPDIO_CPU_IND @ 0xC5 -typedef struct _SPDIO_CPU_IND { - uint8_t Reserved:7; /* bit[7:1], Reserved */ - uint8_t SYS_TRX_RDY:1; /* bit[0], To indicate the Host system that CPU is ready for TRX - , to be sync to 0x87[0] */ -} SPDIO_CPU_IND, *PSPDIO_CPU_IND; - -// Register REG_SPDIO_CPU_H2C_MSG @ 0xC8 -typedef struct _SPDIO_CPU_H2C_MSG { - uint32_t Reserved:1; /* bit[31], Reserved */ - uint32_t CPU_H2C_MSG:30; /* bit[30:0], Host CPU to FW message */ -} SPDIO_CPU_H2C_MSG, *PSPDIO_CPU_H2C_MSG; - -// Register REG_SPDIO_CPU_C2H_MSG @ 0xCC -typedef struct _SPDIO_CPU_C2H_MSG { - uint32_t Reserved:1; /* bit[31], Reserved */ - uint32_t CPU_C2H_MSG:30; /* bit[30:0], FW to Host CPU message, sync to REG_SDIO_C2H_MSG */ -} SPDIO_CPU_C2H_MSG, *PSPDIO_CPU_C2H_MSG; - -// Register REG_SPDIO_CRPWM @ 0xD0 -typedef struct _SPDIO_CRPWM { - uint8_t TOGGLING:1; /* bit[7], issue interrupt when 0->1 or 1->0 */ - uint8_t Reserved:3; /* bit[6:4], Reserved */ - uint8_t WWLAN:1; /* bit[3], 0/1: "Wake on WLAN"/"Normal" state */ - uint8_t RPS_ST:1; /* bit[2], 0/1: AP Register Sleep/Active state */ - uint8_t WLAN_TRX:1; /* bit[1], 0: WLAN Off; 1: WLAN On */ - uint8_t :1; /* bit[0] */ -} SPDIO_CRPWM, *PSPDIO_CRPWM; - -// Register REG_SPDIO_AHB_DMA_CTRL @ 0xD4 -typedef struct _SPDIO_AHB_DMA_CTRL { - uint32_t DISPATCH_TXAGG:1; /* bit[31], Enable to dispatch aggregated TX packet */ - uint32_t AHB_BURST_TYPE:3; /* bit[30:28], AHB burst type */ - uint32_t AHB_BUSY_WAIT_CNT:4; /* bit[27:24], timeout for AHB controller to wait busy */ - uint32_t AHB_DMA_TRANS:2; /* bit[23:22], AHB DMA Trans value, for debugging */ - uint32_t AHB_MASTER_RDY:1; /* bit[21], AHB Master Hready signal */ - uint32_t :1; /* bit[20] */ - uint32_t AHB_DMA_CS:4; /* bit[19:16], AHB DMA state */ - uint32_t :1; /* bit[15] */ - uint32_t RXFF_WLEVEL:7; /* bit[14:8], SPDIO RX FIFO water level */ - uint32_t :1; /* bit[7] */ - uint32_t TXFF_WLEVEL:7; /* bit[6:0], SPDIO TX FIFO water level */ -} SPDIO_AHB_DMA_CTRL, *PSPDIO_AHB_DMA_CTRL; - -#endif /* end of '#if LITTLE_ENDIAN' */ - - -//#define TX_FIFO_ADDR 0x0000 -//#define TX_FIFO_SIZE 0x8000 - -//TX BD setting -#if SDIO_BOOT_DRIVER -// for build ROM library -#define SDIO_TX_BD_NUM 2 // Number of TX BD -#define SDIO_TX_BD_BUF_SIZE (2048+32) // the size of a TX BD pointed buffer, WLan header = 26 bytes -#define SDIO_TX_PKT_NUM 10 // Number of TX packet handler - -//RX BD setting -#define RX_BD_FREE_TH 4 // trigger the interrupt when free RX BD over this threshold - -#define MAX_RX_BD_BUF_SIZE 16380 // the Maximum size for a RX_BD point to, make it 4-bytes aligned - -#define SDIO_RX_PKT_NUM 3 // Number of RX packet handler -//#define SDIO_RX_BD_NUM 10 // Number of RX BD, to make 32K of bus aggregation, it needs 22 RX_BD at least -#define SDIO_RX_BD_NUM (SDIO_RX_PKT_NUM*2) // Number of RX BD, to make 32K of bus aggregation, it needs 22 RX_BD at least -#define SDIO_RX_BD_BUF_SIZE (2048+24) // the size of a RX BD pointed buffer, sizeof(RX Desc) = 26 bytes -#define MIN_RX_BD_SEND_PKT 2 /* the minum needed RX_BD to send a Packet to Host, we need 2: - one for RX_Desc, the other for payload */ - -// CCPWM2 bit map definition for Firmware download -#define SDIO_INIT_DONE (BIT0) -#define SDIO_MEM_WR_DONE (BIT1) -#define SDIO_MEM_RD_DONE (BIT2) -#define SDIO_MEM_ST_DONE (BIT3) - -#define SDIO_CPWM2_TOGGLE (BIT15) - -#else -#if CONFIG_INIC_EN -//TX BD setting -#define SDIO_TX_BD_NUM 16 // Number of TX BD -#define SDIO_TX_BD_BUF_SIZE 1540 //1514+24 -//#define SDIO_TX_PKT_NUM 1 // not used - -//RX BD setting -#define RX_BD_FREE_TH 5 // trigger the interrupt when free RX BD over this threshold -#define SDIO_RX_BD_BUF_SIZE 1540 //1514+24 -#define MAX_RX_BD_BUF_SIZE 16380 // the Maximum size for a RX_BD point to, make it 4-bytes aligned -#define SDIO_RX_PKT_NUM 16 // Number of RX packet handler -#define MIN_RX_BD_SEND_PKT 2 /* the minum needed RX_BD to send a Packet to Host, we need 2: - one for RX_Desc, the other for payload */ -#define SDIO_RX_BD_NUM (SDIO_RX_PKT_NUM*MIN_RX_BD_SEND_PKT) /*Number of RX BD, - to make 32K of bus aggregation, it needs 22 RX_BD at least*/ -#else -#define SDIO_TX_BD_NUM 24 // Number of TX BD -#define SDIO_TX_BD_BUF_SIZE (2048+32) // the size of a TX BD pointed buffer, WLan header = 26 bytes -#define SDIO_TX_PKT_NUM 128 // Number of TX packet handler - -//RX BD setting -#define RX_BD_FREE_TH 5 // trigger the interrupt when free RX BD over this threshold - -#define SDIO_RX_BD_BUF_SIZE 2048 -#define MAX_RX_BD_BUF_SIZE 16380 // the Maximum size for a RX_BD point to, make it 4-bytes aligned - -//#define SDIO_TX_FIFO_SIZE (1024*64) // 64K -#define SDIO_RX_BD_NUM 24 // Number of RX BD, to make 32K of bus aggregation, it needs 22 RX_BD at least -#define SDIO_RX_PKT_NUM 128 // Number of RX packet handler -#define MIN_RX_BD_SEND_PKT 2 /* the minum needed RX_BD to send a Packet to Host, we need 2: - one for RX_Desc, the other for payload */ -#endif -#endif - -#define SDIO_IRQ_PRIORITY 10 - -/* SDIO Events */ -#define SDIO_EVENT_IRQ BIT(0) // Interrupt triggered -#define SDIO_EVENT_RX_PKT_RDY BIT(1) // A new SDIO packet ready -#define SDIO_EVENT_C2H_DMA_DONE BIT(2) // Interrupt of C2H DMA done triggered -#define SDIO_EVENT_DUMP BIT(3) // SDIO status dump periodically Enable -#define SDIO_EVENT_TXBD_REFILL BIT(4) // To refill TX BD buffer -#define SDIO_EVENT_EXIT BIT(28) // Request to exit the SDIO task -#define SDIO_EVENT_MP_STOPPED BIT(29) // The SDIO task is stopped -#define SDIO_EVENT_TX_STOPPED BIT(30) // The SDIO task is stopped -#define SDIO_EVENT_RX_STOPPED BIT(31) // The SDIO task is stopped - -#define SDIO_TASK_PRIORITY 1 // it can be 0(lowest) ~ configMAX_PRIORITIES-1(highest) -#define SDIO_MP_TASK_PRIORITY 2 // it can be 0(lowest) ~ configMAX_PRIORITIES-1(highest) -//#if SDIO_TASK_PRIORITY > (configMAX_PRIORITIES - 1) -#if SDIO_TASK_PRIORITY > (4 - 1) -#error "SDIO Task Priority Should be 0~(configMAX_PRIORITIES-1)" -#endif - -//#define TX_RX_PACKET_SIZE 0x144 - -typedef struct _SDIO_TX_BD_ { - uint32_t Address; /* The TX buffer physical address, it must be 4-bytes aligned */ -}SDIO_TX_BD, *PSDIO_TX_BD; - -#define TX_BD_STRUCTURE_SIZE (sizeof(SDIO_TX_BD)) - - -/* The RX Buffer Descriptor format */ - -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) -typedef struct _SDIO_RX_BD_ { - uint32_t BuffSize:14; /* bit[13:0], RX Buffer Size, Maximum 16384-1 */ - uint32_t LS:1; /* bit[14], is the Last Segment ? */ - uint32_t FS:1; /* bit[15], is the First Segment ? */ - uint32_t Seq:16; /* bit[31:16], The sequence number, it's no use for now */ - uint32_t PhyAddr; /* The RX buffer physical address, it must be 4-bytes aligned */ -} SDIO_RX_BD, *PSDIO_RX_BD; -#else -typedef struct _SDIO_RX_BD_ { - uint32_t Seq:16; /* bit[31:16], The sequence number, be used for ?? */ - uint32_t FS:1; /* bit[15], is the First Segment ? */ - uint32_t LS:1; /* bit[14], is the Last Segment ? */ - uint32_t BuffSize:14; /* bit[13:0], RX Buffer Size, Maximum 16384 */ - uint32_t PhyAddr; /* The RX buffer physical address, it must be 4-bytes aligned */ -} SDIO_RX_BD, *PSDIO_RX_BD; -#endif -#define RX_BD_STRUCTURE_SIZE (sizeof(SDIO_RX_BD)) - -// TODO: This data structer just for test, we should modify it for the normal driver -typedef struct _SDIO_TX_DESC{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t txpktsize:16; // bit[15:0] - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number -#else - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t txpktsize:16; // bit[15:0] -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the packet type - uint32_t rsvd0:24; -#else - uint32_t rsvd0:24; - uint32_t type:8; // bit[7:0], the packet type -#endif - - // u4Byte 2 - uint32_t rsvd1; - - // u4Byte 3 - uint32_t rsvd2; - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} SDIO_TX_DESC, *PSDIO_TX_DESC; - -// TX Desc for Memory Write command -typedef struct _SDIO_TX_DESC_MW{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t txpktsize:16; // bit[15:0] - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number -#else - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t txpktsize:16; // bit[15:0] -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the packet type - uint32_t reply:1; // bit[8], request to send a reply message - uint32_t rsvd0:23; -#else - uint32_t rsvd0:23; - uint32_t reply:1; // bit[8], request to send a reply message - uint32_t type:8; // bit[7:0], the packet type -#endif - - // u4Byte 2 - uint32_t start_addr; // memory write start address - - // u4Byte 3 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t write_len:16; // bit[15:0], the length to write - uint32_t rsvd2:16; // bit[31:16] -#else - uint32_t rsvd2:16; // bit[31:16] - uint32_t write_len:16; // bit[15:0], the length to write -#endif - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} SDIO_TX_DESC_MW, *PSDIO_TX_DESC_MW; - -// TX Desc for Memory Read command -typedef struct _SDIO_TX_DESC_MR{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t txpktsize:16; // bit[15:0] - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number -#else - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t txpktsize:16; // bit[15:0] -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the packet type - uint32_t rsvd0:24; -#else - uint32_t rsvd0:24; - uint32_t type:8; // bit[7:0], the packet type -#endif - - // u4Byte 2 - uint32_t start_addr; // memory write start address - - // u4Byte 3 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t read_len:16; // bit[15:0], the length to read - uint32_t rsvd2:16; // bit[31:16] -#else - uint32_t rsvd2:16; // bit[31:16] - uint32_t read_len:16; // bit[15:0], the length to read -#endif - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} SDIO_TX_DESC_MR, *PSDIO_TX_DESC_MR; - -// TX Desc for Memory Set command -typedef struct _SDIO_TX_DESC_MS{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t txpktsize:16; // bit[15:0] - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number -#else - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t txpktsize:16; // bit[15:0] -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the packet type - uint32_t data:8; // bit[8:15], the value to be written to the memory - uint32_t reply:1; // bit[16], request to send a reply message - uint32_t rsvd0:15; -#else - uint32_t rsvd0:15; - uint32_t reply:1; // bit[16], request to send a reply message - uint32_t data:8; // bit[8:15], the value to be written to the memory - uint32_t type:8; // bit[7:0], the packet type -#endif - - // u4Byte 2 - uint32_t start_addr; // memory write start address - - // u4Byte 3 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t write_len:16; // bit[15:0], the length to write - uint32_t rsvd2:16; // bit[31:16] -#else - uint32_t rsvd2:16; // bit[31:16] - uint32_t write_len:16; // bit[15:0], the length to write -#endif - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} SDIO_TX_DESC_MS, *PSDIO_TX_DESC_MS; - -// TX Desc for Jump to Start command -typedef struct _SDIO_TX_DESC_JS{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t txpktsize:16; // bit[15:0] - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number -#else - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t txpktsize:16; // bit[15:0] -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the packet type - uint32_t rsvd0:24; -#else - uint32_t rsvd0:24; - uint32_t type:8; // bit[7:0], the packet type -#endif - - // u4Byte 2 - uint32_t start_fun; // the pointer of the startup function - - // u4Byte 3 - uint32_t rsvd2; - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} SDIO_TX_DESC_JS, *PSDIO_TX_DESC_JS; - - -#define SIZE_TX_DESC (sizeof(SDIO_TX_DESC)) -// define the TX BD buffer size with unite of 64 byets -/* Be carefull!! the setting of hardware's TX BD buffer size may exceed the real size of - the TX BD buffer size, and then it may cause the hardware DMA write the buffer overflow */ -#define SDIO_TX_BUF_SZ_UNIT 64 -#define SDIO_TX_BD_BUF_USIZE ((((SDIO_TX_BD_BUF_SIZE+sizeof(SDIO_TX_DESC)-1)/SDIO_TX_BUF_SZ_UNIT)+1)&0xff) - -typedef struct _SDIO_TX_BD_BUFFER_ { - SDIO_TX_DESC TX_Desc; - uint8_t TX_Buffer[SDIO_TX_BD_BUF_SIZE]; -}SDIO_TX_BD_BUFFER, *PSDIO_TX_BD_BUFFER; - - -// TODO: This data structer just for test, we should modify it for the normal driver -typedef struct _SDIO_RX_DESC{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t pkt_len:16; // bit[15:0], the packet size - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t rsvd0:6; // bit[29:24] - uint32_t icv:1; // bit[30], ICV error - uint32_t crc:1; // bit[31], CRC error -#else - uint32_t crc:1; // bit[31], CRC error - uint32_t icv:1; // bit[30], ICV error - uint32_t rsvd0:6; // bit[29:24] - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t pkt_len:16; // bit[15:0], the packet size -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the type of this packet - uint32_t rsvd1:24; // bit[31:8] -#else - uint32_t rsvd1:24; // bit[31:8] - uint32_t type:8; // bit[7:0], the type of this packet -#endif - - // u4Byte 2 - uint32_t rsvd2; - - // u4Byte 3 - uint32_t rsvd3; - - // u4Byte 4 - uint32_t rsvd4; - - // u4Byte 5 - uint32_t rsvd5; -} SDIO_RX_DESC, *PSDIO_RX_DESC; - -// For memory read command -typedef struct _SDIO_RX_DESC_MR{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t pkt_len:16; // bit[15:0], the packet size - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t rsvd0:8; // bit[31:24] -#else - uint32_t rsvd0:8; // bit[31:24] - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t pkt_len:16; // bit[15:0], the packet size -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the type of this packet - uint32_t rsvd1:24; // bit[31:8] -#else - uint32_t rsvd1:24; // bit[31:8] - uint32_t type:8; // bit[7:0], the type of this packet -#endif - - // u4Byte 2 - uint32_t start_addr; - - // u4Byte 3 - uint32_t rsvd2; - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} SDIO_RX_DESC_MR, *PSDIO_RX_DESC_MR; - -// For memory write reply command -typedef struct _SDIO_RX_DESC_MW{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t pkt_len:16; // bit[15:0], the packet size - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t rsvd0:8; // bit[31:24] -#else - uint32_t rsvd0:8; // bit[31:24] - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t pkt_len:16; // bit[15:0], the packet size -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the type of this packet - uint32_t rsvd1:24; // bit[31:8] -#else - uint32_t rsvd1:24; // bit[31:8] - uint32_t type:8; // bit[7:0], the type of this packet -#endif - - // u4Byte 2 - uint32_t start_addr; - - // u4Byte 3 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t write_len:16; // bit[15:0], the type of this packet - uint32_t result:8; // bit[23:16], the result of memory write command - uint32_t rsvd2:8; // bit[31:24] -#else - uint32_t rsvd2:8; // bit[31:24] - uint32_t result:8; // bit[23:16], the result of memory write command - uint32_t write_len:16; // bit[15:0], the type of this packet -#endif - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} SDIO_RX_DESC_MW, *PSDIO_RX_DESC_MW; - -// For memory set reply command -typedef struct _SDIO_RX_DESC_MS{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t pkt_len:16; // bit[15:0], the packet size - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t rsvd0:8; // bit[31:24] -#else - uint32_t rsvd0:8; // bit[31:24] - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t pkt_len:16; // bit[15:0], the packet size -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the type of this packet - uint32_t rsvd1:24; // bit[31:8] -#else - uint32_t rsvd1:24; // bit[31:8] - uint32_t type:8; // bit[7:0], the type of this packet -#endif - - // u4Byte 2 - uint32_t start_addr; - - // u4Byte 3 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t write_len:16; // bit[15:0], the type of this packet - uint32_t result:8; // bit[23:16], the result of memory write command - uint32_t rsvd2:8; // bit[31:24] -#else - uint32_t rsvd2:8; // bit[31:24] - uint32_t result:8; // bit[23:16], the result of memory write command - uint32_t write_len:16; // bit[15:0], the type of this packet -#endif - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} SDIO_RX_DESC_MS, *PSDIO_RX_DESC_MS; - -#define SIZE_RX_DESC (sizeof(SDIO_RX_DESC)) - -typedef struct _SDIO_RX_BD_BUFFER_ { - SDIO_RX_DESC RX_Desc; - uint8_t RX_Buffer[SDIO_RX_BD_BUF_SIZE]; -}SDIO_RX_BD_BUFFER, *PSDIO_RX_BD_BUFFER; - - -/* The data structer for a packet fordwarding to the WLan driver to transmit it */ -// TODO: This data structer just for test, we may need modify it for the normal driver -typedef struct _SDIO_TX_PACKET_ { - uint8_t *pHeader; // Point to the 1st byte of the packets - uint16_t PktSize; // the size (bytes) of this packet - _LIST list; // the link list to chain packets - uint8_t isDyna; // is Dynamic allocated -} SDIO_TX_PACKET, *PSDIO_TX_PACKET; - -/* the data structer to bind a TX_BD with a TX Packet */ -typedef struct _SDIO_TX_BD_HANDLE_ { - SDIO_TX_BD *pTXBD; // Point to the TX_BD buffer -#if SDIO_API_DEFINED - void *priv; -#else -#if CONFIG_INIC_EN -#if CONFIG_INIC_SKB_TX - struct sk_buff *skb; -#endif -#endif -#endif - SDIO_TX_PACKET *pPkt; // point to the Tx Packet - uint8_t isPktEnd; // For a packet over 1 BD , this flag to indicate is this BD contains a packet end - uint8_t isFree; // is this TX BD free -} SDIO_TX_BD_HANDLE, *PSDIO_TX_BD_HANDLE; - -/* The data structer for a packet which from the WLan driver to send to the Host */ -// TODO: This data structer just for test, we may need modify it for the normal driver - -#if SDIO_BOOT_DRIVER -typedef struct _SDIO_RX_PACKET_ { -// SDIO_RX_DESC RxDesc; // The RX Descriptor for this packet, to be send to Host ahead this packet - uint8_t *pData; // point to the head of payload of this packet - uint16_t Offset; // the offset from the pData to the payload buffer - _LIST list; // the link list to chain packets - uint8_t PktBuf[SDIO_RX_BD_BUF_SIZE]; // the Rx_Desc + payload data buffer, the first 24 bytes is reserved for RX_DESC -} SDIO_RX_PACKET, *PSDIO_RX_PACKET; -#else -typedef struct _SDIO_RX_PACKET_ { - SDIO_RX_DESC RxDesc; // The RX Descriptor for this packet, to be send to Host ahead this packet -#if SDIO_API_DEFINED - void *priv; -#else -#if CONFIG_INIC_EN -#if CONFIG_INIC_SKB_RX - struct sk_buff *skb; -#endif -#endif -#endif - uint8_t *pData; // point to the head of payload of this packet - uint16_t Offset; // the offset from the pData to the payload buffer - _LIST list; // the link list to chain packets - uint8_t isDyna; // is Dynamic allocated -} SDIO_RX_PACKET, *PSDIO_RX_PACKET; -#endif - -/* the data structer to bind a RX_BD with a RX Packet */ -typedef struct _SDIO_RX_BD_HANDLE_ { - SDIO_RX_BD *pRXBD; // Point to the RX_BD buffer - SDIO_RX_PACKET *pPkt; // point to the Rx Packet - uint8_t isPktEnd; // For a packet over 1 BD , this flag to indicate is this BD contains a packet end - uint8_t isFree; // is this RX BD free (DMA done and its RX packet has been freed) -} SDIO_RX_BD_HANDLE, *PSDIO_RX_BD_HANDLE; - -#if SDIO_MP_MODE -typedef struct _SDIO_MP_CMD_ { - uint8_t cmd_name[16]; - uint32_t cmd_type; -} SDIO_MP_CMD, *PSDIO_MP_CMD; - -typedef enum _SDIO_MP_CMD_TYPE_{ - SDIO_MP_START=1, - SDIO_MP_STOP=2, - SDIO_MP_LOOPBACK=3, - SDIO_MP_STATUS=4, - SDIO_MP_READ_REG8=5, - SDIO_MP_READ_REG16=6, - SDIO_MP_READ_REG32=7, - SDIO_MP_WRITE_REG8=8, - SDIO_MP_WRITE_REG16=9, - SDIO_MP_WRITE_REG32=10, - SDIO_MP_WAKEUP=11, // wakeup the SDIO task manually, for debugging - SDIO_MP_DUMP=12, // start/stop to dump the SDIO status periodically - SDIO_MP_CTX=13, // setup continue TX test - SDIO_MP_CRX=14, // setup continue RX test - SDIO_MP_CRX_DA=15, // setup continue RX with dynamic allocate RX Buf test - SDIO_MP_CRX_STOP=16, // setup continue RX test - SDIO_MP_DBG_MSG=17, // Debug message On/Off - -}SDIO_MP_CMD_TYPE; - -typedef enum _SDIO_CRX_MODE_{ - SDIO_CRX_STATIC_BUF = 1, - SDIO_CRX_DYNA_BUF = 2, -} SDIO_CRX_MODE; - -typedef struct _SDIO_MP_RX_PACKET_ { - _LIST list; // this member MUST be the 1st one, the link list to chain packets - uint8_t *pData; // point to the head of payload of this packet - uint16_t Offset; // the offset from the pData to the payload - uint16_t DataLen; // the data length of this packet -} SDIO_MP_RX_PACKET, *PSDIO_MP_RX_PACKET; - -#endif // end of '#if SDIO_MP_MODE' - -#define SDIO_CMD_TX_ETH 0x83 // request to TX a 802.3 packet -#define SDIO_CMD_TX_WLN 0x81 // request to TX a 802.11 packet -#define SDIO_CMD_H2C 0x11 // H2C(host to device) command packet -#define SDIO_CMD_MEMRD 0x51 // request to read a block of memory data -#define SDIO_CMD_MEMWR 0x53 // request to write a block of memory -#define SDIO_CMD_MEMST 0x55 // request to set a block of memory with a value -#define SDIO_CMD_STARTUP 0x61 // request to jump to the start up function - -#define SDIO_CMD_RX_ETH 0x82 // indicate a RX 802.3 packet -#define SDIO_CMD_RX_WLN 0x80 // indicate a RX 802.11 packet -#define SDIO_CMD_C2H 0x10 // C2H(device to host) command packet -#define SDIO_CMD_MEMRD_RSP 0x50 // response to memory block read command -#define SDIO_CMD_MEMWR_RSP 0x52 // response to memory write command -#define SDIO_CMD_MEMST_RSP 0x54 // response to memory set command -#define SDIO_CMD_STARTED 0x60 // indicate the program has jumped to the given function - -enum SDIO_RPWM2_BITS { - RPWM2_ACT_BIT = BIT0, // Active - RPWM2_SLEEP_BIT = 0, // Sleep - RPWM2_DSTANDBY_BIT = BIT1, // Deep Standby - RPWM2_PG_BIT = 0, // Power Gated - RPWM2_FBOOT_BIT = BIT2, // fast reboot - RPWM2_NBOOT_BIT = 0, // normal reboot - RPWM2_WKPIN_A5_BIT = BIT3, // enable GPIO A5 wakeup - RPWM2_WKPIN_C7_BIT = BIT4, // enable GPIO C7 wakeup - RPWM2_WKPIN_D5_BIT = BIT5, // enable GPIO D5 wakeup - RPWM2_WKPIN_E3_BIT = BIT6, // enable GPIO E3 wakeup - RPWM2_PIN_A5_LV_BIT = BIT7, // GPIO A5 wakeup level - RPWM2_PIN_C7_LV_BIT = BIT8, // GPIO C7 wakeup level - RPWM2_PIN_D5_LV_BIT = BIT9, // GPIO D5 wakeup level - RPWM2_PIN_E3_LV_BIT = BIT10, // GPIO E3 wakeup level - RPWM2_CG_BIT = BIT11, // Clock Gated - RPWM2_ACK_BIT = BIT14, // Acknowledge - RPWM2_TOGGLE_BIT = BIT15, // Toggle bit -}; - -enum SDIO_CPWM2_BITS { - CPWM2_ACT_BIT = BIT0, // Active - CPWM2_DSTANDBY_BIT = BIT1, // Deep Standby - CPWM2_FBOOT_BIT = BIT2, // fast reboot - CPWM2_INIC_FW_RDY_BIT = BIT3, // is the iNIC FW(1) or Boot FW(0) - - CPWM2_TOGGLE_BIT = BIT15, // Toggle bit -}; - -#ifdef CONFIG_SDIO_DEVICE_VERIFY - -#define TX_BD_STRUCTURE_NUM 10 -#define RX_BD_STRUCTURE_NUM 10 -#define TX_BD_BUFFER_SIZE 0x1000//0x2000//0x800 -#define RX_BD_BUFFER_SIZE 0x400//0x800 - -#define SDIO_RAM_ADDR_BASE 0x20080000 -#define SDIO_BUFFER_HEAD(addr) SDIO_RAM_ADDR_BASE + addr -#define HAL_SDIO_BUFFER_READ8(addr) HAL_READ8(SDIO_RAM_ADDR_BASE, addr) -#define HAL_SDIO_BUFFER_READ32(addr) HAL_READ32(SDIO_RAM_ADDR_BASE, addr) -#define HAL_SDIO_BUFFER_WRITE32(addr, value) HAL_WRITE32(SDIO_RAM_ADDR_BASE, addr, value) - -//#define RX_BD_ADDR 0x8000 -//#define RX_BUFFER_ADDR 0x8050 - -typedef enum _SDIO_TEST_FUNC_ { - SDIO_TEST_INIT, // 0 - SDIO_TEST_INT_ON, // 1 - SDIO_TEST_INT_OFF, // 2 - SDIO_HCI_RX_REQ, // 3 - SDIO_RESET_TXFIFIO, // 4 - SDIO_CPU_RST_DMA, // 5 - SDIO_CPU_CLR_INT_REG, // 6 - SDIO_TIMER_TEST, // 7 - SDIO_TEST_DEBUG, // 8 - SDIO_TEST, // 9 - SDIO_HELP = 0xff -}SDIO_TEST_FUNC, *PSDIO_TEST_FUNC; - -typedef struct _SDIO_TEST_ADAPTER_ { - uint32_t TXWritePtr; - uint32_t TXReadPtr; - uint16_t RXWritePtr; - uint16_t RXReadPtr; - uint16_t IntMask; - uint16_t IntStatus; -} SDIO_TEST_ADAPTER, *PSDIO_TEST_ADAPTER; - - -void -MovePKTToRX( - IN uint32_t Source, IN uint32_t Destination, IN uint32_t PKTSize -); - -BOOL -PacketProcess( - IN SDIO_TEST_ADAPTER *pDevStatus -); - -void -SdioDeviceIrqHandleFunc( - IN void *DATA -); - -void -SdioDeviceTestApp( - IN uint32_t Data -); - -void -InitRXBD(void); - -void -InitTXFIFO(void); - -void -IrqRegister(void); - -#endif // end of "#ifdef CONFIG_SDIO_DEVICE_VERIFY" - -#endif /* #ifndef _RTL8195A_SDIO_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_device.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_device.c deleted file mode 100644 index c9edd42..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_device.c +++ /dev/null @@ -1,3177 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "rtl8195a.h" -#include "hal_sdio.h" -#include "mailbox.h" - -#if CONFIG_INIC_EN -#include "freertos_pmu.h" -extern struct sk_buff *rltk_wlan_alloc_skb(unsigned int total_len); -extern unsigned char *skb_put(struct sk_buff * skb, unsigned int len); -extern void inic_sdio_free_data(unsigned char *data); -#if (CONFIG_INIC_SKB_TX == 0) //pre-allocated memory for SDIO TX BD -ALIGNMTO(4) char inic_TX_Buf[SDIO_TX_BD_NUM][SDIO_TX_BD_BUF_USIZE*SDIO_TX_BUF_SZ_UNIT]; -#endif -#endif - -extern PHAL_SDIO_ADAPTER pgSDIODev; - -#ifdef CONFIG_SOC_PS_MODULE -//extern RAM_START_FUNCTION gRamWakeupFun; -extern uint8_t __ram_start_table_start__[]; -extern _LONG_CALL_ void HalCpuClkConfig(uint8_t CpuType); -extern _LONG_CALL_ void VectorTableInitRtl8195A(uint32_t StackP); -extern _LONG_CALL_ void HalReInitPlatformLogUartV02(void); -extern _LONG_CALL_ void HalInitPlatformTimerV02(void); -extern void InfraStart(void); -extern void SleepPG(uint8_t Option, uint32_t SDuration); -extern void PSHalInitPlatformLogUart(void); -extern void HalReInitPlatformTimer(void); -extern void DeepStandby(uint8_t Option, uint32_t SDuration, uint8_t GpioOption); -extern void QueryRegPwrState(uint8_t FuncIdx, uint8_t* RegState, uint8_t* HwState); -#endif - -/****************************************************************************** - * Function Prototype Declaration - ******************************************************************************/ -BOOL SDIO_Device_Init( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -void SDIO_Device_DeInit( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -void SDIO_IRQ_Handler( - IN void *pData -); - -void SDIO_Interrupt_Init( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -void SDIO_Interrupt_DeInit( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -void SDIO_Enable_Interrupt( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t IntMask -); - -void SDIO_Disable_Interrupt( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t IntMask -); - -void SDIO_Clear_ISR( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t IntMask -); - -void SDIO_TxTask( - IN void *pData -); - -void SDIO_RxTask( - IN void *pData -); - -static __inline void SDIO_Wakeup_Task( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -static void SDIO_SetEvent( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t Event -); - -static void SDIO_ClearEvent( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t Event -); - -static BOOL SDIO_IsEventPending( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t Event -); - -void SDIO_IRQ_Handler_BH( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -void SDIO_RX_IRQ_Handler_BH( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -void SDIO_TX_BD_Buf_Refill( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -void SDIO_TX_FIFO_DataReady( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -PSDIO_RX_PACKET SDIO_Alloc_Rx_Pkt( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -void SDIO_Free_Rx_Pkt( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN PSDIO_RX_PACKET pPkt -); - -void SDIO_Recycle_Rx_BD ( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -void SDIO_Process_H2C_IOMsg( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -void SDIO_Send_C2H_IOMsg( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t *C2HMsg -); - -void SDIO_Process_H2C_PktMsg( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint8_t *H2CMsg -); - -uint8_t SDIO_Send_C2H_PktMsg( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint8_t *C2HMsg, - IN uint16_t MsgLen -); - -uint8_t SDIO_Process_RPWM( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -uint8_t SDIO_Process_RPWM2( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -void SDIO_Reset_Cmd( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -void SDIO_Return_Rx_Data( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -void SDIO_Register_Tx_Callback( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN int8_t (*CallbackFun)(void *pAdapter, uint8_t *pPkt, uint16_t Offset, uint16_t PktSize), - IN void *pAdapter -); - -int8_t SDIO_Rx_Callback( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN void *pData, - IN uint16_t Offset, - IN uint16_t Length, - IN uint8_t CmdType -); - -int8_t SDIO_Handle_MsgBlk( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN MSG_BLK *pMblk -); - -#if SDIO_MP_MODE -void SDIO_PeriodicalTimerCallback( - void *pContex -); - -uint8_t SDIO_MapMPCmd( - IN char *CmdStr, - IN uint16_t *Offset -); - -void SDIO_DumpMPStatus( - IN PHAL_SDIO_ADAPTER pSDIODev - ); - -void SDIO_StatisticDump( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -int8_t SDIO_MP_Loopback( - IN void *pAdapter, - IN uint8_t *pData, - IN uint16_t Offset, - IN uint16_t PktSize -); - -int8_t SDIO_MP_ContinueTx( - IN void *pAdapter, - IN uint8_t *pData, - IN uint16_t Offset, - IN uint16_t PktSize -); - -void SDIO_MP_ContinueRx( - IN PHAL_SDIO_ADAPTER pSDIODev -); - -void SDIO_DeviceMPApp( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint16_t argc, - IN uint8_t *argv[] -); -#endif /* endof '#if SDIO_MP_MODE' */ - -/****************************************************************************** - * Global Variable Declaration - ******************************************************************************/ - -#if SDIO_MP_MODE -const SDIO_MP_CMD SDIO_MPCmdTable[] = { - {"mp_start", SDIO_MP_START}, - {"mp_stop", SDIO_MP_STOP}, - {"mp_loopback", SDIO_MP_LOOPBACK}, - {"status", SDIO_MP_STATUS}, - {"read_reg8", SDIO_MP_READ_REG8}, - {"read_reg16", SDIO_MP_READ_REG16}, - {"read_reg32", SDIO_MP_READ_REG32}, - {"write_reg8", SDIO_MP_WRITE_REG8}, - {"write_reg16", SDIO_MP_WRITE_REG16}, - {"write_reg32", SDIO_MP_WRITE_REG32}, - {"wakeup", SDIO_MP_WAKEUP}, - {"dump", SDIO_MP_DUMP}, - {"ctx", SDIO_MP_CTX}, - {"crx", SDIO_MP_CRX}, - {"crx_da", SDIO_MP_CRX_DA}, - {"crx_stop", SDIO_MP_CRX_STOP}, - {"dbg_msg", SDIO_MP_DBG_MSG} -}; - -const uint8_t MP_WlanHdr[]={ - 0x88,0x01,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff, - 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00, - 0x00,0x01,0x10,0x00,0x06,0x00}; -#endif - -/****************************************************************************** - * External Function & Variable Declaration - ******************************************************************************/ -extern PHAL_SDIO_ADAPTER pgSDIODev; - -extern uint32_t Strtoul( - IN const uint8_t *nptr, - IN uint8_t **endptr, - IN uint32_t base -); - -/****************************************************************************** - * Function: SDIO_Device_Init - * Desc: SDIO device driver initialization. - * 1. Allocate SDIO TX FIFO buffer and initial TX related register. - * 2. Allocate SDIO RX Buffer Descriptor and RX Buffer. Initial RX related - * register. - * 3. Register the Interrupt function. - * 4. Create the SDIO Task and allocate resource(Semaphore). - * - ******************************************************************************/ -BOOL SDIO_Device_Init( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - int i; - SDIO_TX_PACKET *pTxPkt; - SDIO_RX_PACKET *pPkt; - SDIO_TX_BD_HANDLE *pTxBdHdl; - SDIO_RX_BD_HANDLE *pRxBdHdl; - int ret; - uint32_t reg_value; - - DBG_SDIO_INFO("SDIO_Device_Init==>\n"); - - // Clean boot from wakeup bit - reg_value = HAL_READ32(PERI_ON_BASE, REG_SOC_FUNC_EN); - reg_value &= ~(BIT(29)); - HAL_WRITE32(PERI_ON_BASE, REG_SOC_FUNC_EN, reg_value); - - /* SDIO Function Enable */ - SDIOD_ON_FCTRL(ON); - SDIOD_OFF_FCTRL(ON); - - /* Enable Clock for SDIO function */ - ACTCK_SDIOD_CCTRL(ON); - SLPCK_SDIOD_CCTRL(ON); - - // Reset SDIO DMA - HAL_SDIO_WRITE8(REG_SPDIO_CPU_RST_DMA, BIT_CPU_RST_SDIO_DMA); - - /* Initial SDIO TX BD */ - DBG_SDIO_INFO("Tx BD Init==>\n"); - -// TODO: initial TX BD - pSDIODev->pTXBDAddr = RtlZmalloc((SDIO_TX_BD_NUM * sizeof(SDIO_TX_BD))+3); - if (NULL == pSDIODev->pTXBDAddr) { - DBG_SDIO_ERR("SDIO_Device_Init: Malloc for TX_BD Err!\n"); - goto SDIO_INIT_ERR; - } - pSDIODev->pTXBDAddrAligned = (PSDIO_TX_BD)(((((uint32_t)pSDIODev->pTXBDAddr - 1) >> 2) + 1) << 2); // Make it 4-bytes aligned - HAL_SDIO_WRITE32(REG_SPDIO_TXBD_ADDR, pSDIODev->pTXBDAddrAligned); - HAL_SDIO_WRITE16(REG_SPDIO_TXBD_SIZE, SDIO_TX_BD_NUM); - /* Set TX_BUFF_UNIT_SIZE */ -#if 0 - reg = HAL_SDIO_READ32(REG_SPDIO_RXBD_CNT); - reg &= ~((0xff)<<8); - reg |= (SDIO_TX_BD_BUF_USIZE<<8); - HAL_SDIO_WRITE32(REG_SPDIO_RXBD_CNT, reg); -#endif - HAL_SDIO_WRITE8(REG_SPDIO_TX_BUF_UNIT_SZ, SDIO_TX_BD_BUF_USIZE); - - DBG_SDIO_INFO("Tx BD Buf Unit Size(%d), Reg=0x%x\n", SDIO_TX_BD_BUF_USIZE, HAL_SDIO_READ8(REG_SPDIO_TX_BUF_UNIT_SZ)); - - /* Set DISPATCH_TXAGG_PKT */ - HAL_SDIO_WRITE32(REG_SPDIO_AHB_DMA_CTRL, HAL_SDIO_READ32(REG_SPDIO_AHB_DMA_CTRL)|BIT31); - // Reset HW TX BD pointer - pSDIODev->TXBDWPtr = HAL_SDIO_READ32(REG_SPDIO_TXBD_WPTR); - pSDIODev->TXBDRPtr = pSDIODev->TXBDWPtr; - pSDIODev->TXBDRPtrReg = pSDIODev->TXBDWPtr; - HAL_SDIO_WRITE32(REG_SPDIO_TXBD_RPTR, pSDIODev->TXBDRPtrReg); - - DBG_SDIO_INFO("TXBDWPtr=0x%x TXBDRPtr=0x%x\n", pSDIODev->TXBDWPtr, pSDIODev->TXBDRPtr); - - pSDIODev->pTXBDHdl = (PSDIO_TX_BD_HANDLE)RtlZmalloc(SDIO_TX_BD_NUM * sizeof(SDIO_TX_BD_HANDLE)); - if (NULL == pSDIODev->pTXBDHdl) { - DBG_SDIO_ERR("SDIO_Device_Init: Malloc for TX_BD Handle Err!\n"); - goto SDIO_INIT_ERR; - } - - for (i=0;ipTXBDHdl + i; - pTxBdHdl->pTXBD = pSDIODev->pTXBDAddrAligned + i; -#if CONFIG_INIC_EN -#if CONFIG_INIC_SKB_TX -//allocate wlan skb here - pTxBdHdl->skb = rltk_wlan_alloc_skb(SDIO_TX_BD_BUF_USIZE*SDIO_TX_BUF_SZ_UNIT); - DBG_SDIO_INFO("SDIO_Device_Init: pTxBdHdl->pkt @ 0x%x\n", pTxBdHdl->skb); - if(pTxBdHdl->skb) - pTxBdHdl->pTXBD->Address = (uint32_t)pTxBdHdl->skb->tail; - else - DBG_SDIO_ERR("SDIO_Device_Init: rltk_wlan_alloc_skb (%d) failed!\n", SDIO_TX_BD_BUF_USIZE*SDIO_TX_BUF_SZ_UNIT); -#else - pTxBdHdl->pTXBD->Address = (uint32_t)(&inic_TX_Buf[i][0]); -#endif -#else - // Allocate buffer for each TX BD - pTxBdHdl->pTXBD->Address = (uint32_t)RtlMalloc(SDIO_TX_BD_BUF_USIZE*SDIO_TX_BUF_SZ_UNIT); -#if SDIO_DEBUG - pSDIODev->MemAllocCnt++; -#endif -#endif - if (NULL == (uint32_t*)(pTxBdHdl->pTXBD->Address)) { - // Memory Allocate Failed - int j; - - for (j=0;jpTXBDHdl + j; - pTxBdHdl->pTXBD = pSDIODev->pTXBDAddrAligned + j; - if (pTxBdHdl->pTXBD->Address) { -#if CONFIG_INIC_EN -#if CONFIG_INIC_SKB_TX - //free wlan skb here - dev_kfree_skb_any(pTxBdHdl->skb); -#endif - pTxBdHdl->pTXBD->Address =(uint32_t)NULL; -#else - RtlMfree((uint8_t *)pTxBdHdl->pTXBD->Address, (SDIO_TX_BD_BUF_USIZE*SDIO_TX_BUF_SZ_UNIT)); -#endif - } - } - goto SDIO_INIT_ERR; - } - pTxBdHdl->isFree = 1; - DBG_SDIO_INFO("TX_BD%d @ 0x%x 0x%x\n", i, pTxBdHdl, pTxBdHdl->pTXBD); - } - -#if (CONFIG_INIC_EN == 0) - RtlInitListhead(&pSDIODev->FreeTxPktList); // Init the list for free packet handler - /* Allocate memory for TX Packets handler */ - pSDIODev->pTxPktHandler = (SDIO_TX_PACKET *)(RtlZmalloc(sizeof(SDIO_TX_PACKET)*SDIO_TX_PKT_NUM)); - if (NULL == pSDIODev->pTxPktHandler) { - DBG_SDIO_ERR("SDIO_Device_Init: Malloc for TX PKT Handler Err!\n"); - goto SDIO_INIT_ERR; - } - /* Add all TX packet handler into the Free Queue(list) */ - for (i=0;ipTxPktHandler + i; - RtlListInsertTail(&pTxPkt->list, &pSDIODev->FreeTxPktList); - } -#endif - /* Init RX BD and RX Buffer */ - pSDIODev->pRXBDAddr = RtlZmalloc((SDIO_RX_BD_NUM * sizeof(SDIO_RX_BD))+7); - if (NULL == pSDIODev->pRXBDAddr) { - DBG_SDIO_ERR("SDIO_Device_Init: Malloc for RX_BD Err!\n"); - goto SDIO_INIT_ERR; - } - pSDIODev->pRXBDAddrAligned = (PSDIO_RX_BD)(((((uint32_t)pSDIODev->pRXBDAddr - 1) >> 3) + 1) << 3); // Make it 8-bytes aligned - HAL_SDIO_WRITE32(REG_SPDIO_RXBD_ADDR, pSDIODev->pRXBDAddrAligned); - HAL_SDIO_WRITE16(REG_SPDIO_RXBD_SIZE, SDIO_RX_BD_NUM); - - // Set the threshold of free RX BD count to trigger interrupt - HAL_SDIO_WRITE16(REG_SPDIO_RX_BD_FREE_CNT, RX_BD_FREE_TH); - DBG_SDIO_INFO("Rx BD Free Cnt(%d), Reg=0x%x\n", RX_BD_FREE_TH, HAL_SDIO_READ16(REG_SPDIO_RX_BD_FREE_CNT)); - - pSDIODev->pRXBDHdl = (PSDIO_RX_BD_HANDLE)RtlZmalloc(SDIO_RX_BD_NUM * sizeof(SDIO_RX_BD_HANDLE)); - if (NULL == pSDIODev->pRXBDHdl) { - DBG_SDIO_ERR("SDIO_Device_Init: Malloc for RX_BD Handle Err!\n"); - goto SDIO_INIT_ERR; - } - - for (i=0;ipRXBDHdl + i; - pRxBdHdl->pRXBD = pSDIODev->pRXBDAddrAligned + i; - pRxBdHdl->isFree = 1; - DBG_SDIO_INFO("RX_BD%d @ 0x%x 0x%x\n", i, pRxBdHdl, pRxBdHdl->pRXBD); - } - - - RtlInitListhead(&pSDIODev->FreeRxPktList); // Init the list for free packet handler - /* Allocate memory for RX Packets handler */ - pSDIODev->pRxPktHandler = (SDIO_RX_PACKET *)(RtlZmalloc(sizeof(SDIO_RX_PACKET)*SDIO_RX_PKT_NUM)); - if (NULL == pSDIODev->pRxPktHandler) { - DBG_SDIO_ERR("SDIO_Device_Init: Malloc for RX PKT Handler Err!\n"); - goto SDIO_INIT_ERR; - } - /* Add all RX packet handler into the Free Queue(list) */ - for (i=0;ipRxPktHandler + i; - RtlListInsertTail(&pPkt->list, &pSDIODev->FreeRxPktList); - } - RtlInitListhead(&pSDIODev->RxPktList); // Init the list for RX packet to be send to the SDIO bus -// RtlInitListhead(&pSDIODev->RecyclePktList); // Init the list for packet to be recycled after the SDIO RX DMA is done - - RtlMutexInit(&pSDIODev->RxMutex); -#if SDIO_DEBUG - RtlMutexInit(&pSDIODev->StatisticMutex); -#endif - /* Create a Semaphone for SDIO Sync control */ -#if !TASK_SCHEDULER_DISABLED - RtlInitSema(&(pSDIODev->TxSema), 0); - if (NULL == pSDIODev->TxSema){ - DBG_SDIO_ERR("SDIO_Device_Init Create Semaphore Err!\n"); - goto SDIO_INIT_ERR; - } - - RtlInitSema(&(pSDIODev->RxSema), 0); - if (NULL == pSDIODev->RxSema){ - DBG_SDIO_ERR("SDIO_Device_Init Create RX Semaphore Err!\n"); - goto SDIO_INIT_ERR; - } - - /* create a Mailbox for other driver module to send message to SDIO driver */ - pSDIODev->pMBox = RtlMailboxCreate(MBOX_ID_SDIO, SDIO_MAILBOX_SIZE, &(pSDIODev->RxSema)); - if (NULL == pSDIODev->pMBox) { - DBG_SDIO_ERR("SDIO_Device_Init Create Mailbox Err!\n"); - goto SDIO_INIT_ERR; - } -#if SDIO_MP_MODE - pSDIODev->pPeriodTimer = RtlTimerCreate("SDIO_Periodical", SDIO_PERIODICAL_TIMER_INTERVAL, SDIO_PeriodicalTimerCallback, pSDIODev, 1); -#endif - /* Create the SDIO task */ -#ifdef PLATFORM_FREERTOS - ret = xTaskCreate( SDIO_TxTask, "SDIO_TX_TASK", ((1024*2)/sizeof(portBASE_TYPE)), (void *)pSDIODev, SDIO_TASK_PRIORITY + PRIORITIE_OFFSET, &pSDIODev->xSDIOTxTaskHandle); - if (pdTRUE != ret ) - { - DBG_SDIO_ERR("SDIO_Device_Init: Create Task Err(%d)!\n", ret); - goto SDIO_INIT_ERR; - } - - ret = xTaskCreate( SDIO_RxTask, "SDIO_RX_TASK", ((1024*1)/sizeof(portBASE_TYPE)), (void *)pSDIODev, SDIO_TASK_PRIORITY + PRIORITIE_OFFSET, &pSDIODev->xSDIORxTaskHandle); - if (pdTRUE != ret ) - { - DBG_SDIO_ERR("SDIO_Device_Init: Create RX Task Err(%d)!\n", ret); - goto SDIO_INIT_ERR; - } - -#endif -#endif // end of "#if !TASK_SCHEDULER_DISABLED" -#if SDIO_MP_MODE -//1 for MP mode test only - pSDIODev->MP_ModeEn = 1; -// SDIO_Register_Tx_Callback(pSDIODev, (void *)SDIO_MP_Loopback, (void *) pSDIODev); -// pSDIODev->MP_LoopBackEn = 1; -//End -#endif -#if TASK_SCHEDULER_DISABLED - /* enable the interrupt */ - SDIO_Interrupt_Init(pSDIODev); - - /* Indicate the Host system that the TX/RX is ready */ - HAL_SDIO_WRITE8(REG_SPDIO_CPU_IND, \ - HAL_SDIO_READ8(REG_SPDIO_CPU_IND)|BIT_SYSTEM_TRX_RDY_IND); -#endif - pSDIODev->CRPWM = HAL_SDIO_READ8(REG_SPDIO_CRPWM); - pSDIODev->CRPWM2 = HAL_SDIO_READ16(REG_SPDIO_CRPWM2); - - // Indicate Host this is a iNIC FW - pSDIODev->CCPWM2 |= CPWM2_INIC_FW_RDY_BIT; - pSDIODev->CCPWM2 ^= CPWM2_TOGGLE_BIT; - HAL_SDIO_WRITE16(REG_SPDIO_CCPWM2, pSDIODev->CCPWM2); - -#if !PURE_SDIO_INIC -#ifdef CONFIG_SOC_PS_MODULE - { - REG_POWER_STATE SDIOPwrState; - - // To register a new peripheral device power state - SDIOPwrState.FuncIdx = SDIOD; - SDIOPwrState.PwrState = ACT; - RegPowerState(SDIOPwrState); - } -#endif -#endif - - DBG_SDIO_INFO("<==SDIO_Device_Init\n"); - - return SUCCESS; - - SDIO_INIT_ERR: -#if !TASK_SCHEDULER_DISABLED - if (pSDIODev->TxSema) { - RtlFreeSema(&pSDIODev->TxSema); - pSDIODev->TxSema = NULL; - } - - if (pSDIODev->RxSema) { - RtlFreeSema(&pSDIODev->RxSema); - pSDIODev->RxSema = NULL; - } -#endif - - if (pSDIODev->RxMutex) { - RtlMutexFree(&pSDIODev->RxMutex); - } -#if SDIO_DEBUG - if (pSDIODev->StatisticMutex) { - RtlMutexFree(&pSDIODev->StatisticMutex); - } -#endif - if (pSDIODev->pRxPktHandler) { - RtlMfree((uint8_t*)pSDIODev->pRxPktHandler, sizeof(SDIO_RX_PACKET)*SDIO_RX_PKT_NUM); - pSDIODev->pRxPktHandler = NULL; - } - - if (pSDIODev->pRXBDHdl) { - RtlMfree((uint8_t *)pSDIODev->pRXBDHdl, SDIO_RX_BD_NUM * sizeof(SDIO_RX_BD_HANDLE)); - pSDIODev->pRXBDHdl = NULL; - } - - if (pSDIODev->pRXBDAddr) { - RtlMfree((uint8_t *)pSDIODev->pRXBDAddr, (SDIO_RX_BD_NUM * sizeof(SDIO_RX_BD))+7); - pSDIODev->pRXBDAddr = NULL; - } -#if (CONFIG_INIC_EN == 0) - if (pSDIODev->pTxPktHandler) { - RtlMfree((uint8_t *)pSDIODev->pTxPktHandler, (sizeof(SDIO_TX_PACKET)*SDIO_TX_PKT_NUM)); - pSDIODev->pTxPktHandler = NULL; - } -#endif - if ((pSDIODev->pTXBDHdl) && (pSDIODev->pTXBDAddr)) { - for (i=0;ipTXBDHdl + i; - if (pTxBdHdl->pTXBD->Address) { - -#if CONFIG_INIC_EN -#if CONFIG_INIC_SKB_TX - //free wlan skb here - dev_kfree_skb_any(pTxBdHdl->skb); -#endif -#else - RtlMfree((uint8_t *)pTxBdHdl->pTXBD->Address, (SDIO_TX_BD_BUF_USIZE*SDIO_TX_BUF_SZ_UNIT)); -#endif - pTxBdHdl->pTXBD->Address = (uint32_t)NULL; - } - } - } - - if (pSDIODev->pTXBDHdl) { - RtlMfree((uint8_t *)pSDIODev->pTXBDHdl, (SDIO_TX_BD_NUM * sizeof(SDIO_TX_BD_HANDLE))); - pSDIODev->pTXBDHdl = NULL; - } - - if (pSDIODev->pTXBDAddr) { - RtlMfree(pSDIODev->pTXBDAddr, ((SDIO_TX_BD_NUM * sizeof(SDIO_TX_BD))+3)); - pSDIODev->pTXBDAddr = NULL; - pSDIODev->pTXBDAddrAligned = NULL; - } - -#if !TASK_SCHEDULER_DISABLED - if (pSDIODev->pMBox) { - RtlMailboxDel(pSDIODev->pMBox); - pSDIODev->pMBox = NULL; - } -#if SDIO_MP_MODE - if (pSDIODev->pPeriodTimer) { - RtlTimerDelete(pSDIODev->pPeriodTimer); - pSDIODev->pPeriodTimer = NULL; - } -#endif -#endif - return FAIL; -} - - -/****************************************************************************** - * Function: SDIO_Device_DeInit - * Desc: SDIO device driver free resource. This function should be called in - * a task. - * 1. Free TX FIFO buffer - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -//TODO: Call this function in a task - -void SDIO_Device_DeInit( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - int i=0; - SDIO_TX_BD_HANDLE *pTxBdHdl; - - if (NULL == pSDIODev) - return; - - // Indicate the Host that Ameba is InActived - pSDIODev->CCPWM2 = HAL_SDIO_READ16(REG_SPDIO_CCPWM2); - pSDIODev->CCPWM2 &= ~(CPWM2_ACT_BIT); - pSDIODev->CCPWM2 ^= CPWM2_TOGGLE_BIT; - HAL_SDIO_WRITE16(REG_SPDIO_CCPWM2, pSDIODev->CCPWM2); - -#if !TASK_SCHEDULER_DISABLED - /* Exit the SDIO task */ -#if 0 - // if this function is called by TX Task, then the TX task cannot be stopped - while (1) { - SDIO_SetEvent(pSDIODev, SDIO_EVENT_EXIT); - SDIO_Wakeup_Task(pSDIODev); - if (SDIO_IsEventPending(pSDIODev, SDIO_EVENT_TX_STOPPED) && - SDIO_IsEventPending(pSDIODev, (uint32_t)SDIO_EVENT_RX_STOPPED)) { - SDIO_ClearEvent(pSDIODev, SDIO_EVENT_EXIT); - break; // break the while loop - } - RtlMsleepOS(10); - i++; - if (i> 100) { - DBG_SDIO_ERR("SDIO_Device_DeInit: Delete SDIO Task Failed with Timeout\n"); - break; - } - } -#endif -#if SDIO_MP_MODE - if (pSDIODev->pPeriodTimer) { - RtlTimerDelete(pSDIODev->pPeriodTimer); - pSDIODev->pPeriodTimer = NULL; - } -#endif - /* Delete the Mailbox */ - if (pSDIODev->pMBox) { - RtlMailboxDel(pSDIODev->pMBox); - pSDIODev->pMBox = NULL; - } - - /* Delete the Semaphore */ - if (pSDIODev->TxSema) { - RtlFreeSema(&pSDIODev->TxSema); - pSDIODev->TxSema = NULL; - } - - if (pSDIODev->RxSema) { - RtlFreeSema(&pSDIODev->RxSema); - pSDIODev->RxSema = NULL; - } -#endif - - if (pSDIODev->RxMutex) { - RtlMutexFree(&pSDIODev->RxMutex); - } -#if SDIO_DEBUG - if (pSDIODev->StatisticMutex) { - RtlMutexFree(&pSDIODev->StatisticMutex); - } -#endif - if (pSDIODev->pRxPktHandler) { - RtlMfree((uint8_t*)pSDIODev->pRxPktHandler, sizeof(SDIO_RX_PACKET)*SDIO_RX_PKT_NUM); - pSDIODev->pRxPktHandler = NULL; - } - - if (pSDIODev->pRXBDHdl) { - RtlMfree((uint8_t *)pSDIODev->pRXBDHdl, SDIO_RX_BD_NUM * sizeof(SDIO_RX_BD_HANDLE)); - pSDIODev->pRXBDHdl = NULL; - } - - /* Free RX BD */ - if (pSDIODev->pRXBDAddr) { - RtlMfree((uint8_t *)pSDIODev->pRXBDAddr, (SDIO_RX_BD_NUM * sizeof(SDIO_RX_BD))+7); - pSDIODev->pRXBDAddr = NULL; - } - - /* Free TX FIFO Buffer */ - for (i=0;ipTXBDHdl + i; - if (pTxBdHdl->pTXBD->Address) { -#if CONFIG_INIC_EN -#if CONFIG_INIC_SKB_TX - //free wlan skb here - dev_kfree_skb_any(pTxBdHdl->skb); -#endif -#else - RtlMfree((uint8_t *)pTxBdHdl->pTXBD->Address, (SDIO_TX_BD_BUF_USIZE*SDIO_TX_BUF_SZ_UNIT)); -#endif - pTxBdHdl->pTXBD->Address = (uint32_t)NULL; - } - } -#if (CONFIG_INIC_EN == 0) - if (pSDIODev->pTxPktHandler) { - RtlMfree((uint8_t *)pSDIODev->pTxPktHandler, (sizeof(SDIO_TX_PACKET)*SDIO_TX_PKT_NUM)); - pSDIODev->pTxPktHandler = NULL; - } -#endif - if (pSDIODev->pTXBDHdl) { - RtlMfree((uint8_t *)pSDIODev->pTXBDHdl, (SDIO_TX_BD_NUM * sizeof(SDIO_TX_BD_HANDLE))); - pSDIODev->pTXBDHdl = NULL; - } - - if (pSDIODev->pTXBDAddr) { - RtlMfree(pSDIODev->pTXBDAddr, ((SDIO_TX_BD_NUM * sizeof(SDIO_TX_BD))+3)); - pSDIODev->pTXBDAddr = NULL; - pSDIODev->pTXBDAddrAligned = NULL; - } - SDIO_Disable_Interrupt(pSDIODev, 0xffff); - SDIO_Interrupt_DeInit(pSDIODev); - - // Reset SDIO DMA - HAL_SDIO_WRITE8(REG_SPDIO_CPU_RST_DMA, BIT_CPU_RST_SDIO_DMA); - - /* Enable Clock for SDIO function */ -// ACTCK_SDIOD_CCTRL(OFF); - - /* SDIO Function Enable */ -// SDIOD_ON_FCTRL(OFF); - SDIOD_OFF_FCTRL(OFF); -} - -#if TASK_SCHEDULER_DISABLED -/****************************************************************************** - * Function: SDIO_TaskUp - * Desc: For the Task scheduler no running case, use this function to run the - * SDIO task main loop. - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_TaskUp( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - uint16_t ISRStatus; - -// DiagPrintf("SDIO_TaskUp==>\n"); - pSDIODev->EventSema++; - if (pSDIODev->EventSema > 1000) { - pSDIODev->EventSema = 1000; - } - if (pSDIODev->EventSema == 1) { - while (pSDIODev->EventSema > 0) { - ISRStatus = HAL_SDIO_READ16(REG_SPDIO_CPU_INT_STAS); - pSDIODev->IntStatus |= ISRStatus; - HAL_SDIO_WRITE16(REG_SPDIO_CPU_INT_STAS, ISRStatus); // clean the ISR - SDIO_SetEvent(pSDIODev, SDIO_EVENT_IRQ|SDIO_EVENT_C2H_DMA_DONE); - - SDIO_TxTask(pSDIODev); - SDIO_RxTask(pSDIODev); - - pSDIODev->EventSema--; - } - } -// DiagPrintf("<==SDIO_TaskUp\n"); -} -#endif - -/****************************************************************************** - * Function: SDIO_IRQ_Handler - * Desc: SDIO device interrupt service routine - * 1. Read & clean the interrupt status - * 2. Wake up the SDIO task to handle the IRQ event - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_IRQ_Handler( - IN void *pData -) -{ - PHAL_SDIO_ADAPTER pSDIODev = pData; - uint16_t ISRStatus; - - ISRStatus = HAL_SDIO_READ16(REG_SPDIO_CPU_INT_STAS); - DBG_SDIO_INFO("%s:ISRStatus=0x%x\n", __FUNCTION__, ISRStatus); - - pSDIODev->IntStatus |= ISRStatus; - HAL_SDIO_WRITE16(REG_SPDIO_CPU_INT_STAS, ISRStatus); // clean the ISR -#if !TASK_SCHEDULER_DISABLED - if (ISRStatus & BIT_C2H_DMA_OK) { - SDIO_SetEvent(pSDIODev, SDIO_EVENT_C2H_DMA_DONE); - RtlUpSemaFromISR(&pSDIODev->RxSema); - } - - if (ISRStatus & ~BIT_C2H_DMA_OK) { - SDIO_SetEvent(pSDIODev, SDIO_EVENT_IRQ); - RtlUpSemaFromISR(&pSDIODev->TxSema); - } -#else - SDIO_SetEvent(pSDIODev, SDIO_EVENT_IRQ|SDIO_EVENT_C2H_DMA_DONE); - SDIO_TaskUp(pSDIODev); -#endif -} - -/****************************************************************************** - * Function: SDIO_Interrupt_Init - * Desc: SDIO device interrupt initialization. - * 1. Register the ISR - * 2. Initial the IMR register - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_Interrupt_Init( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - IRQ_HANDLE SdioIrqHandle; - - pSDIODev->IntMask = BIT_H2C_DMA_OK | BIT_C2H_DMA_OK | BIT_H2C_MSG_INT | BIT_RPWM1_INT | \ - BIT_RPWM2_INT |BIT_H2C_BUS_RES_FAIL | BIT_RXBD_FLAG_ERR_INT; - HAL_SDIO_WRITE16(REG_SPDIO_CPU_INT_STAS, pSDIODev->IntMask); // Clean pending interrupt first - - SdioIrqHandle.Data = (uint32_t) pSDIODev; - SdioIrqHandle.IrqNum = SDIO_DEVICE_IRQ; - SdioIrqHandle.IrqFun = (IRQ_FUN) SDIO_IRQ_Handler; - SdioIrqHandle.Priority = SDIO_IRQ_PRIORITY; - - InterruptRegister(&SdioIrqHandle); - InterruptEn(&SdioIrqHandle); - - HAL_SDIO_WRITE16(REG_SPDIO_CPU_INT_MASK, pSDIODev->IntMask); -} - -/****************************************************************************** - * Function: SDIO_Interrupt_DeInit - * Desc: SDIO device interrupt De-Initial. - * 1. UnRegister the ISR - * 2. Initial the IMR register with 0 - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_Interrupt_DeInit( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - IRQ_HANDLE SdioIrqHandle; - - HAL_SDIO_WRITE16(REG_SPDIO_CPU_INT_STAS, 0xffff); // Clean pending interrupt first - - SdioIrqHandle.Data = (uint32_t) pSDIODev; - SdioIrqHandle.IrqNum = SDIO_DEVICE_IRQ; - SdioIrqHandle.Priority = SDIO_IRQ_PRIORITY; - - InterruptDis(&SdioIrqHandle); - InterruptUnRegister(&SdioIrqHandle); -} - -/****************************************************************************** - * Function: SDIO_Enable_Interrupt - * Desc: SDIO enable interrupt by modify the interrupt mask - * - * Para: - * pSDIODev: The SDIO device data structor. - * IntMask: The bit map to enable the interrupt. - ******************************************************************************/ -__inline void SDIO_Enable_Interrupt( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t IntMask -) -{ - RtlEnterCritical(); - pSDIODev->IntMask |= IntMask; - HAL_SDIO_WRITE16(REG_SPDIO_CPU_INT_MASK, pSDIODev->IntMask); - RtlExitCritical(); -} - -/****************************************************************************** - * Function: SDIO_Disable_Interrupt - * Desc: SDIO disable interrupt by modify the interrupt mask - * - * Para: - * pSDIODev: The SDIO device data structor. - * IntMask: The bit map to disable the interrupt. - ******************************************************************************/ -__inline void SDIO_Disable_Interrupt( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t IntMask -) -{ - RtlEnterCritical(); - pSDIODev->IntMask &= ~IntMask; - HAL_SDIO_WRITE16(REG_SPDIO_CPU_INT_MASK, pSDIODev->IntMask); - RtlExitCritical(); -} - -/****************************************************************************** - * Function: SDIO_Clear_ISR - * Desc: SDIO clear ISR bit map. - * - * Para: - * pSDIODev: The SDIO device data structor. - * IntMask: The bit map to be clean. - ******************************************************************************/ -__inline void SDIO_Clear_ISR( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t IntMask -) -{ - RtlEnterCritical(); - pSDIODev->IntStatus &= ~IntMask; - RtlExitCritical(); -} - -/****************************************************************************** - * Function: SDIO_TxTask - * Desc: The SDIO task handler. This is the main function of the SDIO device - * driver. - * 1. Handle interrupt events. - * * SDIO TX data ready - * * Error handling - * 2. - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_TxTask( - IN void *pData -) -{ - PHAL_SDIO_ADAPTER pSDIODev = pData; - - /* Initial resource */ -#if !TASK_SCHEDULER_DISABLED - /* enable the interrupt */ - SDIO_Interrupt_Init(pSDIODev); - - // Update the power state indication - pSDIODev->CCPWM2 = HAL_SDIO_READ16(REG_SPDIO_CCPWM2); - pSDIODev->CCPWM2 |= CPWM2_ACT_BIT; - pSDIODev->CCPWM2 ^= CPWM2_TOGGLE_BIT; - HAL_SDIO_WRITE16(REG_SPDIO_CCPWM2, pSDIODev->CCPWM2); - - /* Indicate the Host system that the TX/RX is ready */ - HAL_SDIO_WRITE8(REG_SPDIO_CPU_IND, \ - HAL_SDIO_READ8(REG_SPDIO_CPU_IND)|BIT_SYSTEM_TRX_RDY_IND); -#if SDIO_MP_MODE - if (pSDIODev->pPeriodTimer) { - RtlTimerStart(pSDIODev->pPeriodTimer, 0); - } -#endif -#endif - -#if !TASK_SCHEDULER_DISABLED - for (;;) -#endif - { - /* Task blocked and wait the semaphore(events) here */ -#if !TASK_SCHEDULER_DISABLED - RtlDownSema(&pSDIODev->TxSema); -#endif - if (SDIO_IsEventPending(pSDIODev, SDIO_EVENT_IRQ)) { - SDIO_ClearEvent(pSDIODev, SDIO_EVENT_IRQ); - SDIO_IRQ_Handler_BH(pSDIODev); - } - - if (SDIO_IsEventPending(pSDIODev, SDIO_EVENT_TXBD_REFILL)) { - SDIO_ClearEvent(pSDIODev, SDIO_EVENT_TXBD_REFILL); - SDIO_TX_BD_Buf_Refill(pSDIODev); - } - -#if !TASK_SCHEDULER_DISABLED - if (SDIO_IsEventPending(pSDIODev, SDIO_EVENT_EXIT)) { - break; // break the loop to exit the task - } -#endif - } - -#if !TASK_SCHEDULER_DISABLED -#if SDIO_MP_MODE - if (pSDIODev->pPeriodTimer) { - RtlTimerStop(pSDIODev->pPeriodTimer, 0); - } -#endif - SDIO_SetEvent(pSDIODev, SDIO_EVENT_TX_STOPPED); - DBG_SDIO_INFO("SDIO TX Task Stopped!\n"); -#if ( INCLUDE_vTaskDelete == 1 ) - vTaskDelete(NULL); -#endif -#endif -} - -/****************************************************************************** - * Function: SDIO_RxTask - * Desc: The SDIO RX task handler. This is the main function of the SDIO device - * driver to handle SDIO RX. - * 1. Handle interrupt events. - * * SDIO RX done - * 2. Send RX data back to the host by fill RX_BD to hardware. - * 3. Handle messages from mailbox - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_RxTask( - IN void *pData -) -{ - PHAL_SDIO_ADAPTER pSDIODev = pData; - MSG_BLK Mblk; - -#if !TASK_SCHEDULER_DISABLED - for (;;) -#endif - { - /* Task blocked and wait the semaphore(events) here */ -#if !TASK_SCHEDULER_DISABLED - RtlDownSema(&pSDIODev->RxSema); -#endif - if (SDIO_IsEventPending(pSDIODev, SDIO_EVENT_C2H_DMA_DONE)) { - SDIO_ClearEvent(pSDIODev, SDIO_EVENT_C2H_DMA_DONE); - SDIO_RX_IRQ_Handler_BH(pSDIODev); - } - -#if SDIO_MP_MODE - if (pSDIODev->MP_ContinueRx) { - SDIO_MP_ContinueRx(pSDIODev); - } -#endif // end of "#if SDIO_MP_MODE" - - if (SDIO_IsEventPending(pSDIODev, SDIO_EVENT_RX_PKT_RDY)) { - SDIO_ClearEvent(pSDIODev, SDIO_EVENT_RX_PKT_RDY); - SDIO_Return_Rx_Data(pSDIODev); - } - -#if !TASK_SCHEDULER_DISABLED - /* handle message block in the mailbox */ - do { - if (_SUCCESS == RtlMailboxReceive(MBOX_ID_SDIO, &Mblk, MBOX_WAIT_NONE, 0)) { - SDIO_Handle_MsgBlk(pSDIODev, &Mblk); - } - else { - break; // no more message pending, break the while loop - } - } while (1); - - if (SDIO_IsEventPending(pSDIODev, SDIO_EVENT_EXIT)) { - break; // break the loop to exit the task - } -#endif - } - -#if !TASK_SCHEDULER_DISABLED - SDIO_SetEvent(pSDIODev, (uint32_t)SDIO_EVENT_RX_STOPPED); - DBG_SDIO_INFO("SDIO RX Task Stopped!\n"); -#if ( INCLUDE_vTaskDelete == 1 ) - vTaskDelete(NULL); -#endif -#endif -} - - -/****************************************************************************** - * Function: SDIO_Wakeup_Task - * Desc: Send a semaphore to wake up the task. - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -static __inline void SDIO_Wakeup_Task( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ -#if !TASK_SCHEDULER_DISABLED - RtlUpSema(&pSDIODev->TxSema); - RtlUpSema(&pSDIODev->RxSema); -#else - SDIO_TaskUp(pSDIODev); -#endif -} - -/****************************************************************************** - * Function: SDIO_SetEvent - * Desc: Set an event and wake up SDIO task to handle it. - * - * Para: - * pSDIODev: The SDIO device data structor. - * Event: The event to be set. - ******************************************************************************/ -static void SDIO_SetEvent( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t Event -) -{ - RtlEnterCritical(); - pSDIODev->Events |= Event; - RtlExitCritical(); -} - -/****************************************************************************** - * Function: SDIO_ClearEvent - * Desc: Clean a SDIO event. - * - * Para: - * pSDIODev: The SDIO device data structor. - * Event: The event to be cleaned. - ******************************************************************************/ -static void SDIO_ClearEvent( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t Event -) -{ - RtlEnterCritical(); - pSDIODev->Events &= ~Event; - RtlExitCritical(); -} - -/****************************************************************************** - * Function: SDIO_IsEventPending - * Desc: To check is a event pending. - * - * Para: - * pSDIODev: The SDIO device data structor. - * Event: The event to check. - ******************************************************************************/ -static BOOL SDIO_IsEventPending( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t Event -) -{ - BOOL ret; - - RtlEnterCritical(); - ret = (pSDIODev->Events & Event) ? 1:0; - RtlExitCritical(); - - return ret; -} - -/****************************************************************************** - * Function: SDIO_IRQ_Handler_BH - * Desc: Process the SDIO IRQ, the button helf. - * 1. SDIO TX data ready. - * 2. H2C command ready. - * 3. Host driver RPWM status updated. - * 4. SDIO RX data transfer done. - * 5. SDIO HW/BUS errors. - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_IRQ_Handler_BH( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - uint32_t IntStatus; - - DBG_SDIO_INFO("%s @1 IntStatus=0x%x\n", __FUNCTION__, pSDIODev->IntStatus); - - RtlEnterCritical(); - IntStatus = pSDIODev->IntStatus; - RtlExitCritical(); - - if (IntStatus & BIT_H2C_DMA_OK) { - SDIO_Clear_ISR(pSDIODev, BIT_H2C_DMA_OK); - SDIO_Disable_Interrupt(pSDIODev, BIT_H2C_DMA_OK); - SDIO_TX_FIFO_DataReady(pSDIODev); - SDIO_Enable_Interrupt(pSDIODev, BIT_H2C_DMA_OK); - } - - if (IntStatus & BIT_H2C_MSG_INT) { - SDIO_Clear_ISR(pSDIODev, BIT_H2C_MSG_INT); - SDIO_Process_H2C_IOMsg(pSDIODev); - } - - if (IntStatus & BIT_RPWM1_INT) { - SDIO_Clear_ISR(pSDIODev, BIT_RPWM1_INT); - SDIO_Process_RPWM(pSDIODev); - } - - if (IntStatus & BIT_RPWM2_INT) { - SDIO_Clear_ISR(pSDIODev, BIT_RPWM2_INT); - SDIO_Process_RPWM2(pSDIODev); - } - - if (IntStatus & BIT_SDIO_RST_CMD_INT) { - SDIO_Clear_ISR(pSDIODev, BIT_SDIO_RST_CMD_INT); - SDIO_Reset_Cmd(pSDIODev); - } - - DBG_SDIO_INFO("%s @2 IntStatus=0x%x\n", __FUNCTION__, pSDIODev->IntStatus); -} - -/****************************************************************************** - * Function: SDIO_RX_IRQ_Handler_BH - * Desc: Process the SDIO RX IRQ, the button helf. - * 1. SDIO RX data transfer done. - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_RX_IRQ_Handler_BH( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - uint32_t IntStatus; - - RtlEnterCritical(); - IntStatus = pSDIODev->IntStatus; - RtlExitCritical(); - - if (IntStatus & BIT_C2H_DMA_OK) { - SDIO_Clear_ISR(pSDIODev, BIT_C2H_DMA_OK); - RtlDownMutex(&pSDIODev->RxMutex); - pSDIODev->RxFifoBusy = 0; - RtlUpMutex(&pSDIODev->RxMutex); - SDIO_Recycle_Rx_BD(pSDIODev); -// SDIO_Return_Rx_Data(pSDIODev); - } -} - - -/****************************************************************************** - * Function: SDIO_TX_BD_Buf_Refill - * Desc: To refill all TX BD buffer. - * 1. Check all TX BD buffer - * 2. Allocate a new buffer for TX BD buffer is invalid - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_TX_BD_Buf_Refill( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - uint32_t i,j; - PSDIO_TX_BD_HANDLE pTxBdHdl; - #define WAIT_TIMEOUT 100 - - for (i=0;ipTXBDHdl + pSDIODev->TXBDRPtrReg; - if (NULL == (uint32_t*)(pTxBdHdl->pTXBD->Address)) { - for (j=0;jskb = rltk_wlan_alloc_skb(SDIO_TX_BD_BUF_USIZE*SDIO_TX_BUF_SZ_UNIT); - if(pTxBdHdl->skb) - pTxBdHdl->pTXBD->Address = (uint32_t)pTxBdHdl->skb->tail; -#endif -#else - pTxBdHdl->pTXBD->Address = (uint32_t)RtlMalloc(SDIO_TX_BD_BUF_USIZE*SDIO_TX_BUF_SZ_UNIT); -#endif - if (NULL == (uint32_t*)(pTxBdHdl->pTXBD->Address)) { - DBG_SDIO_WARN("%s Alloc Mem(size=%d) Failed\n", __FUNCTION__, SDIO_TX_BD_BUF_USIZE*SDIO_TX_BUF_SZ_UNIT); - RtlMsleepOS(20); - } - else { -#if SDIO_DEBUG - pSDIODev->MemAllocCnt++; -#endif - pSDIODev->TXBDRPtrReg++; - if (pSDIODev->TXBDRPtrReg >= SDIO_TX_BD_NUM) { - pSDIODev->TXBDRPtrReg = 0; - } - HAL_SDIO_WRITE16(REG_SPDIO_TXBD_RPTR, pSDIODev->TXBDRPtrReg); - break; // break the for loop - } - } - if (j == WAIT_TIMEOUT) { - break; // break the for loop - } - } - else { - break; // break the for loop - } - } - - if (pSDIODev->TXBDRPtrReg != pSDIODev->TXBDRPtr) { - DBG_SDIO_ERR("SDIO_TX_BD_Buf_Refill Err: TXBDRPtrReg=%d TXBDRPtr=%d\n", pSDIODev->TXBDRPtrReg, pSDIODev->TXBDRPtr); - } -} - - -/****************************************************************************** - * Function: SDIO_TX_FIFO_DataReady - * Desc: Handle the SDIO FIFO data ready interrupt. - * 1. Send those data to the target driver via callback fun., like WLan. - * 2. Allocate a buffer for the TX BD - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_TX_FIFO_DataReady( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - PSDIO_TX_BD_HANDLE pTxBdHdl; - PSDIO_TX_DESC pTxDesc; - volatile uint16_t TxBDWPtr=0; - uint32_t processed_pkt_cnt=0; - uint8_t isForceBreak=0; - int8_t ret=FAIL; - uint32_t mem_alloc_failed=0; - uint32_t reg; - - -// DBG_SDIO_INFO("SDIO_TX_FIFO_DataReady==>\n"); - - TxBDWPtr = HAL_SDIO_READ16(REG_SPDIO_TXBD_WPTR); - if (TxBDWPtr == pSDIODev->TXBDRPtr) { - if ((pSDIODev->IntStatus & BIT_TXFIFO_H2C_OVF) == 0) { - DBG_SDIO_WARN("SDIO TX Data Read False Triggered!, TXBDWPtr=0x%x\n", TxBDWPtr); - return; - } - else { - reg = HAL_SDIO_READ32(REG_SPDIO_AHB_DMA_CTRL); - DBG_SDIO_WARN("SDIO TX Overflow Case: Reg DMA_CTRL==0x%x %x %x %x\n", (reg>> 24)&0xff , (reg>>16)&0xff, (reg>>8)&0xff, (reg)&0xff); - } - } - - do { - DBG_SDIO_INFO("SDIO_TX_DataReady: TxBDWPtr=%d TxBDRPtr=%d\n", TxBDWPtr, pSDIODev->TXBDRPtr); - pTxBdHdl = pSDIODev->pTXBDHdl + pSDIODev->TXBDRPtr; - pTxDesc = (PSDIO_TX_DESC)(pTxBdHdl->pTXBD->Address); - - DBG_SDIO_INFO("SDIO_TX_DataReady: PktSz=%d Offset=%d\n", pTxDesc->txpktsize, pTxDesc->offset); - if ((pTxDesc->txpktsize + pTxDesc->offset) <= (SDIO_TX_BD_BUF_USIZE*SDIO_TX_BUF_SZ_UNIT)) { - // use the callback function to fordward this packet to target(WLan) driver - if (pSDIODev->Tx_Callback) { -#if CONFIG_INIC_EN -#if CONFIG_INIC_SKB_TX - ret = pSDIODev->Tx_Callback(pSDIODev->pTxCb_Adapter, (uint8_t*)pTxBdHdl->skb, pTxDesc->offset, pTxDesc->txpktsize); // includes TX Desc -#else - ret = pSDIODev->Tx_Callback(pSDIODev->pTxCb_Adapter, (uint8_t*)pTxBdHdl->pTXBD->Address, pTxDesc->offset, pTxDesc->txpktsize); // includes TX Desc -#endif -#else - ret = pSDIODev->Tx_Callback(pSDIODev->pTxCb_Adapter, (uint8_t*)pTxBdHdl->pTXBD->Address, pTxDesc->offset, pTxDesc->txpktsize); // includes TX Desc -#endif -#if 0 - ret = pSDIODev->Tx_Callback(pSDIODev->pTxCb_Adapter, // doesn't include TX Desc - (uint8_t*)(pTxBdHdl->pTXBD->Address+pTxDesc->offset), - pTxDesc->txpktsize); -#endif - } - else { - ret = FAIL; - DBG_SDIO_ERR("SDIO TX_Callback is Null!\n"); - } - } - else { - // Invalid packet, Just drop it - DBG_SDIO_WARN("SDIO_TX_DataReady Err: Incorrect TxDesc, PktSz=%d Offset=%d BufSize=%d\n", pTxDesc->txpktsize, pTxDesc->offset, \ - (SDIO_TX_BD_BUF_USIZE*SDIO_TX_BUF_SZ_UNIT)); - ret = SUCCESS; // pretend we call the TX callback OK - } - processed_pkt_cnt++; - if (SUCCESS != ret) { - // may be is caused by TX queue is full, so we skip it and try again later - isForceBreak = 1; - break; // break the while loop - } - else { -#if SDIO_MP_MODE - pSDIODev->MP_TxPktCnt++; - pSDIODev->MP_TxByteCnt += pTxDesc->txpktsize; - - pSDIODev->MP_TxPktCntInPeriod++; - pSDIODev->MP_TxByteCntInPeriod += pTxDesc->txpktsize; -#endif - pSDIODev->TXBDRPtr++; - if (pSDIODev->TXBDRPtr >= SDIO_TX_BD_NUM) { - pSDIODev->TXBDRPtr = 0; - } - - // allocate a new buffer for this TX BD - // buf once if the memory allocation failed, we will try it later - if (mem_alloc_failed == 0) { -#if CONFIG_INIC_EN -#if CONFIG_INIC_SKB_TX//or use bss for tx bd, not need to re-allocate memory - //allocate wlan skb for each TX BD - pTxBdHdl->skb = rltk_wlan_alloc_skb(SDIO_TX_BD_BUF_USIZE*SDIO_TX_BUF_SZ_UNIT); - if(pTxBdHdl->skb) - pTxBdHdl->pTXBD->Address = (uint32_t)pTxBdHdl->skb->tail; - else - pTxBdHdl->pTXBD->Address = (uint32_t)NULL; -#endif -#else - // Allocate buffer for each TX BD - pTxBdHdl->pTXBD->Address = (uint32_t)RtlMalloc(SDIO_TX_BD_BUF_USIZE*SDIO_TX_BUF_SZ_UNIT); -#endif - if (NULL == (uint32_t*)(pTxBdHdl->pTXBD->Address)) { - // memory allocate error - // once memory allocate failed, stop to allocate new buffer for TX BD buffer - //, we refill TX BD buffer later - DBG_SDIO_WARN("%s: Alloc new TX BD Buf Failed\n", __FUNCTION__); - mem_alloc_failed++; - SDIO_SetEvent(pSDIODev, SDIO_EVENT_TXBD_REFILL); - } - else { -#if SDIO_DEBUG - pSDIODev->MemAllocCnt++; -#endif - pSDIODev->TXBDRPtrReg = pSDIODev->TXBDRPtr; - HAL_SDIO_WRITE16(REG_SPDIO_TXBD_RPTR, pSDIODev->TXBDRPtrReg); - } - } - else { - pTxBdHdl->pTXBD->Address = (uint32_t)NULL; - } - } - - TxBDWPtr = HAL_SDIO_READ16(REG_SPDIO_TXBD_WPTR); - if (isForceBreak) { - break; // break the TX FIFO DMA Done processing - } - } while (pSDIODev->TXBDRPtr != TxBDWPtr); - - // if not all TX data were processed, set an event to trigger SDIO_Task to process them later - if (isForceBreak) { - DBG_SDIO_WARN("SDIO_TX Force Break: TXBDWP=0x%x TXBDRP=0x%x\n", TxBDWPtr, pSDIODev->TXBDRPtr); - RtlEnterCritical(); - if ((pSDIODev->IntStatus & BIT_TXFIFO_H2C_OVF) != 0) { - if (pSDIODev->TXBDRPtr != TxBDWPtr) { - pSDIODev->IntStatus &= ~BIT_TXFIFO_H2C_OVF; - } - } - pSDIODev->IntStatus |= BIT_H2C_DMA_OK; - RtlExitCritical(); - SDIO_SetEvent(pSDIODev, SDIO_EVENT_IRQ); -#if !TASK_SCHEDULER_DISABLED - RtlUpSema(&pSDIODev->TxSema); -#else - SDIO_TaskUp(pSDIODev); -#endif - } - else { - if ((pSDIODev->IntStatus & BIT_TXFIFO_H2C_OVF) != 0) { - SDIO_Clear_ISR(pSDIODev, BIT_TXFIFO_H2C_OVF); - } - } -} - -/****************************************************************************** - * Function: SDIO_Alloc_Rx_Pkt - * Desc: Allocate a RX Packet Handle from the queue. - * - * Para: - * pSDIODev: The SDIO device data structor. - * - * Return: - * The allocated RX packet handler. - ******************************************************************************/ -PSDIO_RX_PACKET SDIO_Alloc_Rx_Pkt( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - _LIST *plist; - SDIO_RX_PACKET *pPkt; - uint32_t loop_cnt; - - RtlDownMutex(&pSDIODev->RxMutex); - if (RtlIsListEmpty(&pSDIODev->FreeRxPktList)) { - RtlUpMutex(&pSDIODev->RxMutex); - loop_cnt = 0; - do { - pPkt =(SDIO_RX_PACKET *)RtlZmalloc(sizeof(SDIO_RX_PACKET)); - if (NULL != pPkt) { - pPkt->isDyna = 1; // this packet handler is dynamic allocated - DBG_SDIO_WARN("Warn! No Free RX PKT, Use Dyna Alloc\n"); - } - else { - RtlMsleepOS(10); - loop_cnt++; - if (loop_cnt > 100) { - DBG_SDIO_ERR("SDIO_Alloc_Rx_Pkt: Err! Allocate RX PKT Failed!\n"); - break; - } - } - }while (NULL == pPkt); - return pPkt; - } - - plist = RtlListGetNext(&pSDIODev->FreeRxPktList); - pPkt = CONTAINER_OF(plist, SDIO_RX_PACKET, list); - - RtlListDelete(&pPkt->list); - RtlUpMutex(&pSDIODev->RxMutex); - return pPkt; -} - -/****************************************************************************** - * Function: SDIO_Free_Rx_Pkt - * Desc: Put a RX Packet Handle back to the queue. - * - * Para: - * pSDIODev: The SDIO device data structor. - * pPkt: The packet handler to be free. - * - ******************************************************************************/ -void SDIO_Free_Rx_Pkt( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN PSDIO_RX_PACKET pPkt -) -{ - if (pPkt->isDyna) { - RtlMfree((uint8_t *)pPkt, sizeof(SDIO_RX_PACKET)); - } - else { - RtlDownMutex(&pSDIODev->RxMutex); - RtlListInsertTail(&pPkt->list, &pSDIODev->FreeRxPktList); - RtlUpMutex(&pSDIODev->RxMutex); - } -} - -/****************************************************************************** - * Function: SDIO_Recycle_Rx_BD - * Desc: To recycle some RX BD when C2H RX DMA done. - * 1. Free the RX packet. - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_Recycle_Rx_BD ( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - SDIO_RX_BD_HANDLE *pRxBdHdl; - SDIO_RX_BD *pRXBD; - uint32_t PktSize; - uint32_t FreeCnt=0; // for debugging - - DBG_SDIO_INFO("SDIO_Recycle_Rx_BD==> %d %d\n", HAL_SDIO_READ16(REG_SPDIO_RXBD_C2H_RPTR), pSDIODev->RXBDRPtr); - SDIO_Disable_Interrupt(pSDIODev, BIT_C2H_DMA_OK); - while (HAL_SDIO_READ16(REG_SPDIO_RXBD_C2H_RPTR) != pSDIODev->RXBDRPtr) - { - pRxBdHdl = pSDIODev->pRXBDHdl + pSDIODev->RXBDRPtr; - pRXBD = pSDIODev->pRXBDAddrAligned + pSDIODev->RXBDRPtr; - if (!pRxBdHdl->isFree) { - if (pRxBdHdl->isPktEnd && (NULL != pRxBdHdl->pPkt)) { - /* Free this packet */ - // TODO: The RX_DESC format may needs to be refined - PktSize = pRxBdHdl->pPkt->RxDesc.pkt_len; -#if SDIO_MP_MODE - if ((pSDIODev->MP_CRxPktPendingCnt > 0)) { - pSDIODev->MP_CRxPktPendingCnt--; - } - - if (((pSDIODev->MP_CRxPktCnt == 0) && (pSDIODev->MP_CRxPktPendingCnt == 0)) || - (SDIO_CRX_DYNA_BUF == pSDIODev->MP_ContinueRxMode)) -#endif - { -#if CONFIG_INIC_EN -#if CONFIG_INIC_SKB_RX - dev_kfree_skb_any(pRxBdHdl->pPkt->skb); - pRxBdHdl->pPkt->skb = NULL; -#else - inic_sdio_free_data((uint8_t *) (pRxBdHdl->pPkt->pData)); -#endif - pRxBdHdl->pPkt->pData = NULL; -#else - RtlMfree((uint8_t *) (pRxBdHdl->pPkt->pData), (pRxBdHdl->pPkt->Offset+PktSize)); // free packet buffer -#if SDIO_DEBUG - RtlDownMutex(&pSDIODev->StatisticMutex); - pSDIODev->MemAllocCnt--; - RtlUpMutex(&pSDIODev->StatisticMutex); -#endif -#endif -#if SDIO_MP_MODE - pSDIODev->pMP_CRxBuf = NULL; -#endif - } - - _memset((void *)&(pRxBdHdl->pPkt->RxDesc), 0, sizeof(SDIO_RX_DESC)); - RtlDownMutex(&pSDIODev->RxMutex); - RtlListInsertTail(&pRxBdHdl->pPkt->list, &pSDIODev->FreeRxPktList); // Put packet handle to free queue - RtlUpMutex(&pSDIODev->RxMutex); - FreeCnt++; - pRxBdHdl->isPktEnd = 0; - pRxBdHdl->pPkt = NULL; - DBG_SDIO_INFO("SDIO_Recycle_Rx_BD: Recycle Pkt, RXBDRPtr=%d\n", pSDIODev->RXBDRPtr); -#if SDIO_MP_MODE - pSDIODev->MP_RxPktCnt++; - pSDIODev->MP_RxByteCnt += PktSize; - - pSDIODev->MP_RxPktCntInPeriod++; - pSDIODev->MP_RxByteCntInPeriod += PktSize; -#endif - } - _memset((void *)pRXBD , 0, sizeof(SDIO_RX_BD)); // clean this RX_BD - pRxBdHdl->isFree = 1; - } - else { - DBG_SDIO_WARN("SDIO_Recycle_Rx_BD: Warring, Recycle a Free RX_BD,RXBDRPtr=%d\n",pSDIODev->RXBDRPtr); - } - pSDIODev->RXBDRPtr++; - if (pSDIODev->RXBDRPtr >= SDIO_RX_BD_NUM) { - pSDIODev->RXBDRPtr -= SDIO_RX_BD_NUM; - } - } - SDIO_Enable_Interrupt(pSDIODev, BIT_C2H_DMA_OK); - DBG_SDIO_INFO("<==SDIO_Recycle_Rx_BD(%d)\n", FreeCnt); - -} - -/****************************************************************************** - * Function: SDIO_Process_H2C_IOMsg - * Desc: Handle the interrupt for HC2 message ready. Read the H2C_MSG register - * and process the H2C message. - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_Process_H2C_IOMsg( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - uint32_t H2CMsg; - - // TODO: define H2C message type & format, currently we have 30 bits message only, may needs to extend the HW register - H2CMsg = HAL_SDIO_READ32(REG_SPDIO_CPU_H2C_MSG); - DBG_SDIO_INFO("H2C_MSG: 0x%x\n", H2CMsg); - // TODO: May needs to handle endian free - switch (H2CMsg) - { - default: - break; - } - // TODO: Some H2C message needs to be fordward to WLan driver -} - -/****************************************************************************** - * Function: SDIO_Send_C2H_IOMsg - * Desc: Send C2H message to the Host. - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_Send_C2H_IOMsg( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint32_t *C2HMsg -) -{ - uint32_t TmpC2HMsg; - - // TODO: define C2H message type & format, currently we have 30 bits message only, may needs to extend the HW register - - // TODO: May needs to handle endian free - TmpC2HMsg = HAL_SDIO_READ32(REG_SPDIO_CPU_C2H_MSG); - TmpC2HMsg = ((TmpC2HMsg ^ (uint32_t)BIT(31)) & (uint32_t)BIT(31)) | *C2HMsg; - HAL_SDIO_WRITE32(REG_SPDIO_CPU_C2H_MSG, TmpC2HMsg); -} - -/****************************************************************************** - * Function: SDIO_Process_H2C_PktMsg - * Desc: Handle the packet H2C message which from block write(CMD53). - * - * Para: - * pSDIODev: The SDIO device data structor. - * H2CMsg: point to the buffer of the H2C message received. - ******************************************************************************/ -void SDIO_Process_H2C_PktMsg( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint8_t *H2CMsg -) -{ - - // TODO: define H2C message type & format - DBG_SDIO_INFO("H2C_MSG: 0x%x\n", *H2CMsg); - // TODO: May needs to handle endian free - // TODO: Some H2C message needs to be fordward to WLan driver -} - -/****************************************************************************** - * Function: SDIO_Send_C2H_PktMsg - * Desc: To send a C2H message to the Host through the block read command. - * - * Para: - * pSDIODev: The SDIO device data structor. - * H2CMsg: point to the buffer of the H2C message received. - * MsgLen: The length of this message. - ******************************************************************************/ -uint8_t SDIO_Send_C2H_PktMsg( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint8_t *C2HMsg, - IN uint16_t MsgLen -) -{ - uint8_t *MsgBuf; - PSDIO_RX_DESC pRxDesc; - SDIO_RX_PACKET *pPkt; - - // TODO: define H2C message type & format - DBG_SDIO_INFO("C2H_MSG: 0x%x\n", *C2HMsg); - // TODO: May needs to handle endian free - - MsgBuf = RtlZmalloc(MsgLen); - if (NULL == MsgBuf) { - DBG_SDIO_ERR("SDIO_Send_C2H_PktMsg: Malloc Err!\n"); - return FAIL; - } - _memcpy((void *)(MsgBuf), (void *)C2HMsg, MsgLen); - - pPkt = SDIO_Alloc_Rx_Pkt(pSDIODev); - if (pPkt == NULL) { - DBG_SDIO_ERR("RX Callback Err! No Free RX PKT!\n"); - return FAIL; - } - pRxDesc = &pPkt->RxDesc; - pRxDesc->type = SDIO_CMD_C2H; - pRxDesc->pkt_len = MsgLen; - pRxDesc->offset = sizeof(SDIO_RX_DESC); - pPkt->pData = MsgBuf; - pPkt->Offset = 0; - RtlDownMutex(&pSDIODev->RxMutex); - RtlListInsertTail(&pPkt->list, &pSDIODev->RxPktList); - pSDIODev->RxInQCnt++; - RtlUpMutex(&pSDIODev->RxMutex); - SDIO_SetEvent(pSDIODev, SDIO_EVENT_RX_PKT_RDY); -#if !TASK_SCHEDULER_DISABLED - if (pSDIODev->RxInQCnt == 1) { - RtlUpSema(&pSDIODev->RxSema); - } -#else - SDIO_TaskUp(pSDIODev); -#endif - - return SUCCESS; - -} - -#ifdef CONFIG_SOC_PS_MODULE -/****************************************************************************** - * Function: SDIO_Wakeup_From_PG - * Desc: To handle the process of system wakeup from power gated. - * - * Para: None - ******************************************************************************/ -void SDIO_Wakeup_From_PG(void) -{ - ConfigDebugErr = 0xffffffff; - ConfigDebugInfo = _DBG_SDIO_; - ConfigDebugWarn = _DBG_SDIO_; - - HalCpuClkConfig(CLK_200M); - VectorTableInitRtl8195A(0x1FFFFFFC); - -#if CONFIG_CHIP_C_CUT - HalReInitPlatformLogUartV02(); -#else - PSHalInitPlatformLogUart(); -#endif - -#ifdef CONFIG_TIMER_MODULE -#if CONFIG_CHIP_C_CUT - HalInitPlatformTimerV02(); -#else - HalReInitPlatformTimer(); -#endif -// HalDelayUs(1000); -#endif - - InfraStart(); -} -#endif - -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) -void SDIO_Pre_Sleep_Callback(uint32_t expected_idle_time){ - /* Indicate the Host system that the TX/RX is not ready */ - HAL_SDIO_WRITE8(REG_SPDIO_CPU_IND, \ - HAL_SDIO_READ8(REG_SPDIO_CPU_IND)&~BIT_SYSTEM_TRX_RDY_IND); -} -void SDIO_Post_Sleep_Callback(uint32_t expected_idle_time){ - /* Indicate the Host system that the TX/RX is ready */ - HAL_SDIO_WRITE8(REG_SPDIO_CPU_IND, \ - HAL_SDIO_READ8(REG_SPDIO_CPU_IND)|BIT_SYSTEM_TRX_RDY_IND); -} -#endif - -/****************************************************************************** - * Function: SDIO_Process_RPWM - * Desc: To handle RPWM interrupt. - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -uint8_t SDIO_Process_RPWM( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - uint8_t rpwm; - - rpwm = HAL_SDIO_READ8(REG_SPDIO_CRPWM); - - DBG_SDIO_INFO ("RPWM1: 0x%x\n", rpwm); - // TODO: forward this RPWM message to WLan - return 0; -} - -/****************************************************************************** - * Function: SDIO_Process_RPWM - * Desc: To handle RPWM interrupt. - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -uint8_t SDIO_Process_RPWM2( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - uint16_t rpwm; - uint32_t reg_value;; - PRAM_FUNCTION_START_TABLE pRamStartFun = (PRAM_FUNCTION_START_TABLE) __ram_start_table_start__; - - rpwm = HAL_SDIO_READ16(REG_SPDIO_CRPWM2); - - DBG_SDIO_INFO ("RPWM2: 0x%x\n", rpwm); - -#ifdef CONFIG_SOC_PS_MODULE - if ((rpwm&RPWM2_TOGGLE_BIT) != (pSDIODev->CRPWM2&RPWM2_TOGGLE_BIT)) { - pSDIODev->CRPWM2 = rpwm; - // Tgoole bit changed, means it's a new RPWM command - if ((rpwm & RPWM2_ACT_BIT) == 0) { - // request to enter sleep mode - pSDIODev->CCPWM2 = HAL_SDIO_READ16(REG_SPDIO_CCPWM2); - pSDIODev->CCPWM2 &= ~(CPWM2_ACT_BIT); - -#if PURE_SDIO_INIC - SDIO_Device_DeInit(pSDIODev); -#endif - if ((rpwm & RPWM2_DSTANDBY_BIT) == 0) { - pSDIODev->CCPWM2 &= ~(CPWM2_DSTANDBY_BIT); - if((rpwm & RPWM2_CG_BIT)){ - //enter clock gated state - pSDIODev->CCPWM2 ^= CPWM2_TOGGLE_BIT; - HAL_SDIO_WRITE16(REG_SPDIO_CCPWM2, pSDIODev->CCPWM2); -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) - add_wakeup_event(SLEEP_WAKEUP_BY_SDIO); - register_pre_sleep_callback(SDIO_Pre_Sleep_Callback); - register_post_sleep_callback(SDIO_Post_Sleep_Callback); - release_wakelock(WAKELOCK_SDIO_DEVICE); -#endif - } - else{ - // enter power gated state - if ((rpwm & RPWM2_FBOOT_BIT)) { - pSDIODev->CCPWM2 |= CPWM2_FBOOT_BIT; - // setup the trap to call the wakeup callback when booting - reg_value = HAL_READ32(PERI_ON_BASE, REG_SOC_FUNC_EN); - reg_value |= BIT(29); - HAL_WRITE32(PERI_ON_BASE, REG_SOC_FUNC_EN, reg_value); - // Assign the RAM start address after boot from wakeup - pRamStartFun->RamWakeupFun = SDIO_Wakeup_From_PG; - } - pSDIODev->CCPWM2 ^= CPWM2_TOGGLE_BIT; - HAL_SDIO_WRITE16(REG_SPDIO_CCPWM2, pSDIODev->CCPWM2); - -#if PURE_SDIO_INIC - SleepPG(SLP_SDIO, 0); -#endif - } - } else { - // enter Deep Standby state - pSDIODev->CCPWM2 |= CPWM2_DSTANDBY_BIT; - pSDIODev->CCPWM2 &= ~(CPWM2_FBOOT_BIT); - pSDIODev->CCPWM2 ^= CPWM2_TOGGLE_BIT; - HAL_SDIO_WRITE16(REG_SPDIO_CCPWM2, pSDIODev->CCPWM2); -#if PURE_SDIO_INIC - { - uint8_t gpio_option, i; - uint16_t gpio_pin, gpio_en, gpio_act, gpio_lv; - - - gpio_option = 0; - gpio_pin = RPWM2_WKPIN_A5_BIT; - gpio_lv = RPWM2_PIN_A5_LV_BIT; - gpio_en = BIT0; - gpio_act = BIT4; - // Loop 4 to check 4 GPIO wake up event - for (i=0;i<4;i++) { - if (rpwm & gpio_pin) { - gpio_option |= gpio_en; - if (rpwm & gpio_lv) { - // Active High - gpio_option |= gpio_act; - } - } - gpio_pin = gpio_pin << 1; - gpio_lv = gpio_lv << 1; - gpio_en = gpio_en << 1; - gpio_act = gpio_act << 1; - } - - DeepStandby(DSTBY_GPIO, 0, gpio_option); - } -#endif - } -#if !PURE_SDIO_INIC - { - REG_POWER_STATE SDIOPwrState; - uint8_t HwState; - - SDIOPwrState.FuncIdx = SDIOD; - QueryRegPwrState(SDIOD, &(SDIOPwrState.PwrState), &HwState); - - if (SDIOPwrState.PwrState == ACT) { - SDIOPwrState.PwrState = INACT; - RegPowerState(SDIOPwrState); - } - } -#endif - } else { -#if !PURE_SDIO_INIC - -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) - acquire_wakelock(WAKELOCK_SDIO_DEVICE); -#endif - - // Request to Active SDIO iNIC - REG_POWER_STATE SDIOPwrState; - - // Let the power management task know SDIO is in active - SDIOPwrState.FuncIdx = SDIOD; - SDIOPwrState.PwrState = ACT; - RegPowerState(SDIOPwrState); - - pSDIODev->CCPWM2 |= CPWM2_ACT_BIT; - pSDIODev->CCPWM2 ^= CPWM2_TOGGLE_BIT; - HAL_SDIO_WRITE16(REG_SPDIO_CCPWM2, pSDIODev->CCPWM2); -#endif - } - } -#endif // #ifdef CONFIG_SOC_PS_MODULE - return 0; -} - -/****************************************************************************** - * Function: SDIO_Reset_Cmd - * Desc: Handle the SDIO Reset Command interrupt. We did nothing currently. - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_Reset_Cmd( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - // TODO: - return; -} - -/****************************************************************************** - * Function: SDIO_Return_Rx_Data - * Desc: To send all packets in the RX packet list to the Host system via the - * SDIO bus. - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_Return_Rx_Data( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - SDIO_RX_PACKET *pPkt=NULL; - SDIO_RX_DESC *pRxDesc; - SDIO_RX_BD_HANDLE *pRxBdHdl; - _LIST *plist; - SDIO_RX_BD *pRXBD; - uint32_t Offset=0; - uint16_t RxBdWrite=0; // to count how much RX_BD used in a Transaction - uint16_t RxBdRdPtr=0; // RX_BD read pointer - uint32_t pkt_size; - uint8_t isForceBreak=0; - uint8_t isListEmpty; -#if SDIO_RX_PKT_SIZE_OVER_16K - uint8_t needed_rxbd_num; -#endif - -// DBG_SDIO_INFO("SDIO_Return_Rx_Data==> RXBDWPtr=%d\n", pSDIODev->RXBDWPtr); - RtlDownMutex(&pSDIODev->RxMutex); - if (RtlIsListEmpty(&pSDIODev->RxPktList)) { - RtlUpMutex(&pSDIODev->RxMutex); -// DBG_SDIO_INFO("SDIO_Return_Rx_Data: Queue is empty\n"); - return; - } - - if (pSDIODev->RxFifoBusy) { - RtlUpMutex(&pSDIODev->RxMutex); - SDIO_SetEvent(pSDIODev, SDIO_EVENT_RX_PKT_RDY); - return; - } - RtlUpMutex(&pSDIODev->RxMutex); - - RxBdRdPtr = pSDIODev->RXBDRPtr; - - // since we always need to wait the HW to fetch RX BD done, - // so it seems no need to check the RX BD Read Pointer again -#if 0 - /* Check if we shoule handle the RX_BD recycle ? */ - if (RxBdRdPtr != HAL_SDIO_READ16(REG_SPDIO_RXBD_C2H_RPTR)) { - SDIO_Recycle_Rx_BD(pSDIODev); - RxBdRdPtr = pSDIODev->RXBDRPtr; - } -#endif - do { - /* check if RX_BD available */ - RtlDownMutex(&pSDIODev->RxMutex); - plist = RtlListGetNext(&pSDIODev->RxPktList); - RtlUpMutex(&pSDIODev->RxMutex); - pPkt = CONTAINER_OF(plist, SDIO_RX_PACKET, list); - pRxDesc = &(pPkt->RxDesc); -#if SDIO_RX_PKT_SIZE_OVER_16K - needed_rxbd_num = ((pRxDesc->pkt_len - 1)/MAX_RX_BD_BUF_SIZE) + MIN_RX_BD_SEND_PKT; -#endif - if (RxBdRdPtr != pSDIODev->RXBDWPtr) { - if (pSDIODev->RXBDWPtr > RxBdRdPtr) { -#if SDIO_RX_PKT_SIZE_OVER_16K - if ((pSDIODev->RXBDWPtr - RxBdRdPtr) >= (SDIO_RX_BD_NUM - needed_rxbd_num)) -#else - if ((pSDIODev->RXBDWPtr - RxBdRdPtr) >= (SDIO_RX_BD_NUM - MIN_RX_BD_SEND_PKT)) -#endif - { - DBG_SDIO_WARN("SDIO_Return_Rx_Data: No Available RX_BD, ReadPtr=%d WritePtr=%d\n", \ - RxBdRdPtr, pSDIODev->RXBDWPtr); - isForceBreak = 1; - break; // break the while loop - } - } - else { -#if SDIO_RX_PKT_SIZE_OVER_16K - if ((RxBdRdPtr - pSDIODev->RXBDWPtr) <= needed_rxbd_num) -#else - if ((RxBdRdPtr - pSDIODev->RXBDWPtr) <= MIN_RX_BD_SEND_PKT) -#endif - { - DBG_SDIO_WARN("SDIO_Return_Rx_Data: No Available RX_BD, ReadPtr=%d WritePtr=%d\n", RxBdRdPtr, pSDIODev->RXBDWPtr); - isForceBreak = 1; - break; // break the while loop - } - } - } - - RtlDownMutex(&pSDIODev->RxMutex); - RtlListDelete(&pPkt->list); // remove it from the SDIO RX packet Queue - pSDIODev->RxInQCnt--; - RtlUpMutex(&pSDIODev->RxMutex); - - // TODO: Add RX_DESC before the packet - - /* a SDIO RX packet will use at least 2 RX_BD, the 1st one is for RX_Desc, - other RX_BDs are for packet payload */ - /* Use a RX_BD to transmit RX_Desc */ - pRXBD = pSDIODev->pRXBDAddrAligned + pSDIODev->RXBDWPtr; // get the RX_BD head - pRxBdHdl = pSDIODev->pRXBDHdl + pSDIODev->RXBDWPtr; - if (!pRxBdHdl->isFree) { - DBG_SDIO_ERR("SDIO_Return_Rx_Data: Allocated a non-free RX_BD\n"); - } - pRxBdHdl->isFree = 0; - pRxBdHdl->pPkt = pPkt; - pRXBD->FS = 1; - pRXBD->PhyAddr = (uint32_t)((uint8_t *)pRxDesc); - pRXBD->BuffSize = sizeof(SDIO_RX_DESC); - pRxBdHdl->isPktEnd = 0; - pSDIODev->RXBDWPtr += 1; - if (pSDIODev->RXBDWPtr >= SDIO_RX_BD_NUM) { - pSDIODev->RXBDWPtr -= SDIO_RX_BD_NUM; - } - RxBdWrite++; - - /* Take RX_BD to transmit packet payload */ - pkt_size = pRxDesc->pkt_len; - Offset = 0; - do { - pRXBD = pSDIODev->pRXBDAddrAligned + pSDIODev->RXBDWPtr; // get the RX_BD head - pRxBdHdl = pSDIODev->pRXBDHdl + pSDIODev->RXBDWPtr; - pRxBdHdl->isFree = 0; - pRxBdHdl->pPkt = pPkt; - pRXBD->FS = 0; - pRXBD->PhyAddr = (uint32_t)(((uint8_t *)pPkt->pData)+pPkt->Offset); -#if SDIO_RX_PKT_SIZE_OVER_16K - if ((pkt_size - Offset) <= MAX_RX_BD_BUF_SIZE) { - pRXBD->BuffSize = pkt_size - Offset; - pRxBdHdl->isPktEnd = 1; - } - else { - pRXBD->BuffSize = MAX_RX_BD_BUF_SIZE; - pRxBdHdl->isPktEnd = 0; - DBG_SDIO_INFO("SDIO_Return_Rx_Data: Split RX_BD, Offset=%d PktSize=%d\n", \ - Offset, pkt_size); - } -#else - if (pkt_size > MAX_RX_BD_BUF_SIZE) { - // if come to here, please enable "SDIO_RX_PKT_SIZE_OVER_16K" - DBG_SDIO_ERR("SDIO_Return_Rx_Data: The Packet Size bigger than 16K\n"); - pkt_size = MAX_RX_BD_BUF_SIZE; - } - pRXBD->BuffSize = pkt_size; - pRxBdHdl->isPktEnd = 1; -#endif - Offset += pRXBD->BuffSize; - // Move the RX_BD Write pointer forward - RxBdWrite++; - pSDIODev->RXBDWPtr += 1; - if (pSDIODev->RXBDWPtr >= SDIO_RX_BD_NUM) { - pSDIODev->RXBDWPtr -= SDIO_RX_BD_NUM; - } - - if (Offset >= pkt_size) { - pRXBD->LS = 1; -// HAL_SDIO_WRITE16(REG_SPDIO_RXBD_C2H_WPTR, pSDIODev->RXBDWPtr); -// HAL_SDIO_WRITE8(REG_SPDIO_HCI_RX_REQ, BIT_HCI_RX_REQ); -// DBG_SDIO_INFO("SDIO_Return_Rx_Data:RXBDWPtr=%d\n", pSDIODev->RXBDWPtr); - } - } while (Offset < pkt_size); - - if (RxBdWrite >= (SDIO_RX_BD_NUM - MIN_RX_BD_SEND_PKT)) { - isForceBreak = 1; - break; // break the while loop - } - - RtlDownMutex(&pSDIODev->RxMutex); - isListEmpty = RtlIsListEmpty(&pSDIODev->RxPktList); - RtlUpMutex(&pSDIODev->RxMutex); - } while(!isListEmpty); - - if (RxBdWrite > 0) { - RtlDownMutex(&pSDIODev->RxMutex); - HAL_SDIO_WRITE16(REG_SPDIO_RXBD_C2H_WPTR, pSDIODev->RXBDWPtr); - HAL_SDIO_WRITE8(REG_SPDIO_HCI_RX_REQ, BIT_HCI_RX_REQ); - pSDIODev->RxFifoBusy = 1; - RtlUpMutex(&pSDIODev->RxMutex); - } - - if (isForceBreak) { -// SDIO_Recycle_Rx_BD(pSDIODev); - // function end with insufficient resource, set event to try again later - SDIO_SetEvent(pSDIODev, SDIO_EVENT_RX_PKT_RDY); -#if !TASK_SCHEDULER_DISABLED - RtlMsleepOS(1); // no resource, sleep a while - RtlUpSema(&pSDIODev->RxSema); -#else - SDIO_TaskUp(pSDIODev); -#endif - } - DBG_SDIO_INFO("SDIO_Return_Rx_Data(%d)<==\n", RxBdWrite); - -} - -/****************************************************************************** - * Function: SDIO_Register_Tx_Callback - * Desc: For a TX data target driver to register its TX callback function, so - * the SDIO driver can use it to fordward a TX packet to the target driver. - * - * Para: - * pSDIODev: point to the SDIO device handler - * CallbackFun: The function pointer of the callback - * pAdapter: a pointer will be use to call the registered CallBack function. - * It can be used to point to a handler of the caller, like WLan - * Adapter. - ******************************************************************************/ -void SDIO_Register_Tx_Callback( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN int8_t (*CallbackFun)(void *pAdapter, uint8_t *pPkt, uint16_t Offset, uint16_t PktSize), - IN void *pAdapter -) -{ - pSDIODev->Tx_Callback = CallbackFun; - pSDIODev->pTxCb_Adapter = pAdapter; -} - -/****************************************************************************** - * Function: SDIO_Rx_Callback - * Desc: The callback function for an packet receiving, which be called from - * the Target (WLan) driver to send a packet to the SDIO host. - * - * Para: - * pSDIODev: Point to the SDIO device data structer. - * pData: Point to the head of the data to be return to the Host system. - * Length: The length of the data to be send, in byte. - * - * Return: - * The result, SUCCESS or FAIL. - ******************************************************************************/ -int8_t SDIO_Rx_Callback( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN void *pData, - IN uint16_t Offset, - IN uint16_t PktSize, - IN uint8_t CmdType -) -{ - PSDIO_RX_DESC pRxDesc; - SDIO_RX_PACKET *pPkt; -#if CONFIG_INIC_EN -#if CONFIG_INIC_SKB_RX - struct sk_buff *skb = (struct sk_buff *)pData; -#endif -#endif - - pPkt = SDIO_Alloc_Rx_Pkt(pSDIODev); - if (pPkt == NULL) { - DBG_SDIO_ERR("RX Callback Err! No Free RX PKT!\n"); - return FAIL; - } - pRxDesc = &pPkt->RxDesc; - pRxDesc->type = CmdType; - pRxDesc->pkt_len = PktSize; -#if CONFIG_INIC_EN -#if CONFIG_INIC_SKB_RX - pRxDesc->offset = sizeof(SDIO_RX_DESC)+Offset;//for data alignment reason - pPkt->skb = skb; - pPkt->pData = skb->data; - pPkt->Offset = 0; -#else //CONFIG_INIC_SKB_RX - pRxDesc->offset = sizeof(SDIO_RX_DESC); - pPkt->pData = pData; - pPkt->Offset = Offset; -#endif//CONFIG_INIC_SKB_RX -#else //CONFIG_INIC_EN - pRxDesc->offset = sizeof(SDIO_RX_DESC); - pPkt->pData = pData; - pPkt->Offset = Offset; -#endif //CONFIG_INIC_EN - RtlDownMutex(&pSDIODev->RxMutex); - RtlListInsertTail(&pPkt->list, &pSDIODev->RxPktList); - pSDIODev->RxInQCnt++; - RtlUpMutex(&pSDIODev->RxMutex); - SDIO_SetEvent(pSDIODev, SDIO_EVENT_RX_PKT_RDY); -#if !TASK_SCHEDULER_DISABLED - if (pSDIODev->RxInQCnt == 1) { - RtlUpSema(&pSDIODev->RxSema); - } -#else - SDIO_TaskUp(pSDIODev); -#endif - - return SUCCESS; -} - -/****************************************************************************** - * Function: SDIO_Handle_MsgBlk - * Desc: Process a message block. - * - * Para: - * pSDIODev: Point to the SDIO device data structer. - * MSG_BLK: The message block to be processed. - * Length: The length of the data to be send, in byte. - * - * Return: - * The result, SUCCESS or FAIL. - ******************************************************************************/ -int8_t SDIO_Handle_MsgBlk( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN MSG_BLK *pMblk -) -{ - int8_t ret=SUCCESS; - - DBG_SDIO_INFO("SDIO_Handle_MsgBlk==> MsgType=%d\n", pMblk->MsgType); - switch (pMblk->MsgType) { - case MSG_SDIO_RX_PKT: - ret = SDIO_Rx_Callback(pSDIODev, pMblk->pBuf, pMblk->Reserved, pMblk->DateLen, SDIO_CMD_RX_ETH); //pMblk->Reserved = Offset - if (SUCCESS != ret) { - // failed to send this packet to the host, drop it - RtlMfree((uint8_t *) pMblk->pBuf, (pMblk->Reserved + pMblk->DateLen)); // pMblk->Reserved = Offset -#if SDIO_DEBUG - RtlDownMutex(&pSDIODev->StatisticMutex); - pSDIODev->MemAllocCnt--; - RtlUpMutex(&pSDIODev->StatisticMutex); -#endif -#if SDIO_MP_MODE - pSDIODev->MP_RxDropCnt++; -#endif - } - break; - - case MSG_SDIO_C2H: - break; - - case MSG_SDIO_RPWM: - break; - - default: - DBG_SDIO_WARN("SDIO_Handle_MsgBlk: UnKnown MsgType %d\n", pMblk->MsgType); - break; - } - - return ret; -} - -#if SDIO_MP_MODE - -/****************************************************************************** - * Function: SDIO_PeriodicalTimerCallback - * Desc: The callback function of the 1 Sec timer. It be used to statistic the - * throughput and update the status or something need to do periodically. - * - * Para: - * pContex: this pointer actually is the pointer of the SDIO device. - * - * Return: None - ******************************************************************************/ -void SDIO_PeriodicalTimerCallback( - void *pContex -) -{ - PHAL_SDIO_ADAPTER pSDIODev = pContex; - - if (SDIO_IsEventPending(pSDIODev, SDIO_EVENT_DUMP)) { - SDIO_StatisticDump(pSDIODev); -} -} - -#if !TASK_SCHEDULER_DISABLED -/****************************************************************************** - * Function: SDIO_MP_Task - * Desc: The SDIO MP test task handler. This is the main function of the SDIO - * device MP test mode. - * - * Para: - * pSDIODev: The SDIO device data structor. - ******************************************************************************/ -void SDIO_MP_Task( - IN void *pData -) -{ - PHAL_SDIO_ADAPTER pSDIODev = pData; - MSG_BLK Mblk_r; - MSG_BLK Mblk_w; - SDIO_MP_RX_PACKET *pRxPkt; - _LIST *plist; - int malloc_err_cnt=0; - - DiagPrintf("SDIO_MP_Task Started...\n"); - RtlInitListhead(&pSDIODev->MP_RxPktList); - - /* Initial resource */ - for (;;) - { - /* Task blocked and wait the semaphore(events) here */ - RtlDownSema(&pSDIODev->MP_EventSema); - /* handle message block in the mailbox */ - do { - if (_SUCCESS == RtlMailboxReceive(MBOX_ID_SDIO_MP, &Mblk_r, MBOX_WAIT_NONE, 0)) { - switch (Mblk_r.MsgType) { - case MSG_SDIO_MP_LOOP_TXPKT: - pRxPkt = NULL; - malloc_err_cnt = 0; - do { - pRxPkt = (SDIO_MP_RX_PACKET *)RtlZmalloc(sizeof(SDIO_MP_RX_PACKET)); - if (NULL != pRxPkt) { - pRxPkt->pData = Mblk_r.pBuf; - pRxPkt->Offset = Mblk_r.Reserved; - pRxPkt->DataLen = Mblk_r.DateLen; - RtlListInsertTail(&pRxPkt->list, &pSDIODev->MP_RxPktList); - } - else { - RtlMsleepOS(10); - malloc_err_cnt++; - if (malloc_err_cnt > 100) { - DBG_SDIO_ERR("SDIO_MP_Task: Malloc for Rx Pkt Failed\n"); - // no memory to handle this packet, drop it - RtlMfree(Mblk_r.pBuf, (Mblk_r.Reserved+Mblk_r.DateLen)); - pSDIODev->MP_RxDropCnt++; -#if SDIO_DEBUG - RtlDownMutex(&pSDIODev->StatisticMutex); - pSDIODev->MemAllocCnt--; - RtlUpMutex(&pSDIODev->StatisticMutex); -#endif - break; // break the while loop - } - } - }while (NULL == pRxPkt); - break; - - default: - DBG_SDIO_WARN("SDIO_MP_TASK: UnKnown MsgType %d\n", Mblk_r.MsgType); - break; - } - } - else { - break; // no more message pending, break the while loop - } - } while (1); - - while (!RtlIsListEmpty(&pSDIODev->MP_RxPktList)) { - plist = RtlListGetNext(&pSDIODev->MP_RxPktList); - pRxPkt = CONTAINER_OF(plist, SDIO_MP_RX_PACKET, list); - RtlListDelete(&pRxPkt->list); - - Mblk_w.MsgType = MSG_SDIO_RX_PKT; - Mblk_w.pBuf = pRxPkt->pData; - Mblk_w.Reserved = pRxPkt->Offset; - Mblk_w.DateLen = pRxPkt->DataLen; - if (_SUCCESS != RtlMailboxSendToBack(MBOX_ID_SDIO, &Mblk_w, 2000, 0)) { - DBG_SDIO_ERR("SDIO_MP_Task: Send MSG_SDIO_RX_PKT FAILED\n"); - RtlListInsertHead(&pRxPkt->list, &pSDIODev->MP_RxPktList); - break; - } - else { - RtlMfree((uint8_t *)pRxPkt, sizeof(SDIO_MP_RX_PACKET)); - } - } - - RtlEnterCritical(); - if (pSDIODev->MP_Events & SDIO_EVENT_EXIT) { - pSDIODev->MP_Events &= ~SDIO_EVENT_EXIT; - RtlExitCritical(); - DBG_SDIO_INFO("SDIO_MP_Task Exiting...\n"); - break; // break the loop to exit the task - } - RtlExitCritical(); - } - - RtlEnterCritical(); - pSDIODev->MP_Events |= SDIO_EVENT_MP_STOPPED; - RtlExitCritical(); - DBG_SDIO_INFO("SDIO_MP_Task Stoped!\n"); -#if ( INCLUDE_vTaskDelete == 1 ) - vTaskDelete(NULL); -#endif -} -#endif // end of "#if !TASK_SCHEDULER_DISABLED" - -/****************************************************************************** - * Function: SDIO_MapMPCmd - * Desc: Map a MP command string to a MP command type. - * - * Para: - * CmdStr: point to the command string buffer - * - * return: - * The MP command type - * - ******************************************************************************/ -uint8_t SDIO_MapMPCmd( - IN char *CmdStr, - IN uint16_t *Offset -) -{ - char cmd_str[16]; - uint16_t i; - uint16_t str_len=0; - uint16_t entry_num; - uint8_t mp_cmd=0xff; - - for (i=0;i<16;i++) { - if ((' ' != *(CmdStr+i)) && ('=' != *(CmdStr+i)) && (*(CmdStr+i))) { - cmd_str[i] = *(CmdStr+i); - str_len++; - } - else { - break; - } - } - - *Offset = str_len+1; - - entry_num = sizeof(SDIO_MPCmdTable)/sizeof(SDIO_MP_CMD); - - for (i=0;iMP_ModeEn); - DiagPrintf("MP_Loopback=%d\n", pSDIODev->MP_LoopBackEn); - DiagPrintf("TX: Packet Count=%d, Byte Count=%d\n", pSDIODev->MP_TxPktCnt, pSDIODev->MP_TxByteCnt); - DiagPrintf("TX: TX_BD_WPTR=%d, TX_BD_RPTR=%d\n", HAL_SDIO_READ16(REG_SPDIO_TXBD_WPTR), HAL_SDIO_READ16(REG_SPDIO_TXBD_RPTR)); - DiagPrintf("RX: Packet Count=%d, Byte Count=%d\n", pSDIODev->MP_RxPktCnt, pSDIODev->MP_RxByteCnt); - DiagPrintf("RX: RXBDWPtr=%d, RXBDRPtr=%d\n", pSDIODev->RXBDWPtr, pSDIODev->RXBDRPtr); -#if SDIO_DEBUG - DiagPrintf("RX: InQueueCount=%d MemAllocatedCnt=%d\n", pSDIODev->RxInQCnt, pSDIODev->MemAllocCnt); -#endif - DiagPrintf("TxDropPkt=%d RxDropPkt=%d\n", pSDIODev->MP_TxDropCnt, pSDIODev->MP_RxDropCnt); -} - -/****************************************************************************** - * Function: SDIO_StatisticDump - * Desc: Periodical dump SDIO throughput and other status. - * - * Para: - * pSDIODev: The SDIO device data structor. - * - * return: None - * - ******************************************************************************/ -void SDIO_StatisticDump( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - unsigned long tp; // throughput - uint32_t oldest_byte_cnt; - uint32_t tx_avg_tp=0; // in Kbps - uint32_t rx_avg_tp=0; // in Kbps - - // calculate the TX throughput - if (pSDIODev->TxAvgWinCnt >= SDIO_AVG_TP_WIN_SIZE) { - // flush the oldest one and add the newest one - oldest_byte_cnt = pSDIODev->MP_TxAvgTPWin[pSDIODev->OldestTxAvgWinIdx]; - - if (pSDIODev->MP_TxAvgTPWinSum >= oldest_byte_cnt) { - pSDIODev->MP_TxAvgTPWinSum -= oldest_byte_cnt; - pSDIODev->MP_TxAvgTPWin[pSDIODev->OldestTxAvgWinIdx] = pSDIODev->MP_TxByteCntInPeriod; - pSDIODev->OldestTxAvgWinIdx++; - if (SDIO_AVG_TP_WIN_SIZE <= pSDIODev->OldestTxAvgWinIdx) { - pSDIODev->OldestTxAvgWinIdx = 0; - } - - if (0 == pSDIODev->MP_TxAvgTPWinSum) { - // reset the statistic - pSDIODev->TxAvgWinCnt = 0; - pSDIODev->OldestTxAvgWinIdx = 0; - } - } - else { - pSDIODev->MP_TxAvgTPWinSum = 0; - // reset the statistic - if (pSDIODev->MP_TxByteCntInPeriod > 0) - pSDIODev->TxAvgWinCnt = 1; - else - pSDIODev->TxAvgWinCnt = 0; - pSDIODev->OldestTxAvgWinIdx = 0; - } - pSDIODev->MP_TxAvgTPWinSum += pSDIODev->MP_TxByteCntInPeriod; - tx_avg_tp = (pSDIODev->MP_TxAvgTPWinSum << 3) / (SDIO_PERIODICAL_TIMER_INTERVAL * SDIO_AVG_TP_WIN_SIZE); - } - else { - if ((pSDIODev->MP_TxAvgTPWinSum > 0) || (pSDIODev->MP_TxByteCntInPeriod > 0)) { - pSDIODev->MP_TxAvgTPWinSum += pSDIODev->MP_TxByteCntInPeriod; - pSDIODev->MP_TxAvgTPWin[pSDIODev->TxAvgWinCnt] = pSDIODev->MP_TxByteCntInPeriod; - pSDIODev->TxAvgWinCnt++; - tx_avg_tp = (pSDIODev->MP_TxAvgTPWinSum << 3) / (SDIO_PERIODICAL_TIMER_INTERVAL * pSDIODev->TxAvgWinCnt); - } - } - - // calculate the RX throughput - if (pSDIODev->RxAvgWinCnt >= SDIO_AVG_TP_WIN_SIZE) { - // flush the oldest one and add the newest one - oldest_byte_cnt = pSDIODev->MP_RxAvgTPWin[pSDIODev->OldestRxAvgWinIdx]; - if (pSDIODev->MP_RxAvgTPWinSum >= oldest_byte_cnt) { - pSDIODev->MP_RxAvgTPWinSum -= oldest_byte_cnt; - pSDIODev->MP_RxAvgTPWin[pSDIODev->OldestRxAvgWinIdx] = pSDIODev->MP_RxByteCntInPeriod; - pSDIODev->OldestRxAvgWinIdx++; - if (SDIO_AVG_TP_WIN_SIZE <= pSDIODev->OldestRxAvgWinIdx) { - pSDIODev->OldestRxAvgWinIdx = 0; - } - - if (0 == pSDIODev->MP_RxAvgTPWinSum) { - // reset the statistic - pSDIODev->RxAvgWinCnt = 0; - pSDIODev->OldestRxAvgWinIdx = 0; - } - } - else { - pSDIODev->MP_RxAvgTPWinSum = 0; - // reset the statistic - if (pSDIODev->MP_RxByteCntInPeriod > 0) - pSDIODev->RxAvgWinCnt = 1; - else - pSDIODev->RxAvgWinCnt = 0; - - pSDIODev->OldestRxAvgWinIdx = 0; - } - pSDIODev->MP_RxAvgTPWinSum += pSDIODev->MP_RxByteCntInPeriod; - - rx_avg_tp = (pSDIODev->MP_RxAvgTPWinSum << 3) / (SDIO_PERIODICAL_TIMER_INTERVAL * SDIO_AVG_TP_WIN_SIZE); - } - else { - if ((pSDIODev->MP_RxAvgTPWinSum > 0) || (pSDIODev->MP_RxByteCntInPeriod > 0)) { - pSDIODev->MP_RxAvgTPWinSum += pSDIODev->MP_RxByteCntInPeriod; - pSDIODev->MP_RxAvgTPWin[pSDIODev->RxAvgWinCnt] = pSDIODev->MP_RxByteCntInPeriod; - pSDIODev->RxAvgWinCnt++; - rx_avg_tp = (pSDIODev->MP_RxAvgTPWinSum << 3) / (SDIO_PERIODICAL_TIMER_INTERVAL * pSDIODev->RxAvgWinCnt); - } - } - - if ((pSDIODev->MP_TxByteCntInPeriod > 0) || (pSDIODev->MP_RxByteCntInPeriod > 0)) { - DiagPrintf("SDIO Dump:\n"); - tp = (pSDIODev->MP_TxByteCntInPeriod << 3)/(SDIO_PERIODICAL_TIMER_INTERVAL/1000); - if (tp > 1000) { - DiagPrintf("TX: Packet Count=%d, Byte Count=%d, TP=%d Kbps\n", pSDIODev->MP_TxPktCntInPeriod, pSDIODev->MP_TxByteCntInPeriod, tp/1000); - } - else { - DiagPrintf("TX: Packet Count=%d, Byte Count=%d, TP=%d bps\n", pSDIODev->MP_TxPktCntInPeriod, pSDIODev->MP_TxByteCntInPeriod, tp); - } - tp = (pSDIODev->MP_RxByteCntInPeriod << 3)/(SDIO_PERIODICAL_TIMER_INTERVAL/1000); - if (tp > 1000) { - DiagPrintf("RX: Packet Count=%d, Byte Count=%d, TP=%d Kbps\n", pSDIODev->MP_RxPktCntInPeriod, pSDIODev->MP_RxByteCntInPeriod, tp/1000); - } - else { - DiagPrintf("RX: Packet Count=%d, Byte Count=%d, TP=%d bps\n", pSDIODev->MP_RxPktCntInPeriod, pSDIODev->MP_RxByteCntInPeriod, tp); - } - - pSDIODev->MP_TxPktCntInPeriod = 0; - pSDIODev->MP_TxByteCntInPeriod = 0; - pSDIODev->MP_RxPktCntInPeriod = 0; - pSDIODev->MP_RxByteCntInPeriod = 0; - } - - if ((tx_avg_tp > 0) || (rx_avg_tp > 0)) { - DiagPrintf("TX Avg TP=%d Kbps, RX Avg TP=%d Kbps\n", tx_avg_tp, rx_avg_tp); - } -} - -/****************************************************************************** - * Function: SDIO_MP_Loopback - * Desc: The loopback test function for MP mode. - * - * Para: - * pAdapter: a pointer which got from the callback function register, - * here it point to the SDIO device itself. - * pData: The pointer of the SDIO TX data buffer. - * PktSize: The size (in byte) of this SDIO TX data. - * - * return: - * The result of this function, SUCCESS or FAILED. - * - ******************************************************************************/ -int8_t SDIO_MP_Loopback( - IN void *pAdapter, - IN uint8_t *pData, - IN uint16_t Offset, - IN uint16_t PktSize -) -{ -#if TASK_SCHEDULER_DISABLED - PHAL_SDIO_ADAPTER pSDIODev=(PHAL_SDIO_ADAPTER)pAdapter; -#endif - int8_t ret; - - MSG_BLK MBlk; - -// DBG_SDIO_INFO("SDIO_MP_Loopback==>\n"); - - -#if TASK_SCHEDULER_DISABLED - ret = SDIO_Rx_Callback(pSDIODev, pData, Offset, PktSize, SDIO_CMD_RX_ETH); -#else - // Mailbox test, use message to replace call SDIO_Rx_Callback directly - MBlk.MsgType = MSG_SDIO_MP_LOOP_TXPKT; - MBlk.pBuf = pData; - MBlk.Reserved = (uint8_t)Offset; - MBlk.DateLen = PktSize; - if (_SUCCESS == RtlMailboxSendToBack(MBOX_ID_SDIO_MP, &MBlk, 2000, 0)) { - ret = SUCCESS; - } - else { - DBG_SDIO_ERR("SDIO_MP_Loopback FAILED\n"); - ret = FAIL; - } -#endif - return ret; -} - -/****************************************************************************** - * Function: SDIO_MP_ContinueTx - * Desc: The continue TX test function for MP mode. We just drop the TX packet. - * - * Para: - * pAdapter: a pointer which got from the callback function register, - * here it point to the SDIO device itself. - * pData: The pointer of the SDIO TX data buffer. - * PktSize: The size (in byte) of this SDIO TX data. - * - * return: - * The result of this function, SUCCESS or FAILED. - * - ******************************************************************************/ -int8_t SDIO_MP_ContinueTx( - IN void *pAdapter, - IN uint8_t *pData, - IN uint16_t Offset, - IN uint16_t PktSize -) -{ - PHAL_SDIO_ADAPTER pSDIODev=(PHAL_SDIO_ADAPTER)pAdapter; - - RtlMfree(pData, (Offset+PktSize)); -#if SDIO_DEBUG - RtlDownMutex(&pSDIODev->StatisticMutex); - pSDIODev->MemAllocCnt--; - RtlUpMutex(&pSDIODev->StatisticMutex); -#endif - return SUCCESS; -} - -/****************************************************************************** - * Function: SDIO_MP_ContinueRx - * Desc: Process Continue RX test. - * - * Para: - * pSDIODev: The SDIO device adapter. - * - * return: None - * - ******************************************************************************/ -void SDIO_MP_ContinueRx( - IN PHAL_SDIO_ADAPTER pSDIODev -) -{ - uint8_t *pRxBuf=NULL; - int8_t ret; - - while (1) { - if (pSDIODev->MP_CRxPktPendingCnt > 10) { - break; - } - - if (pSDIODev->MP_ContinueRxMode == SDIO_CRX_STATIC_BUF) { - pRxBuf = pSDIODev->pMP_CRxBuf; - } - else if (pSDIODev->MP_ContinueRxMode == SDIO_CRX_DYNA_BUF) { - pRxBuf = RtlMalloc(pSDIODev->MP_CRxSize+26); // 26: Wlan header -#if SDIO_DEBUG - pSDIODev->MemAllocCnt++; -#endif - if (NULL != pRxBuf) { - _memcpy(pRxBuf, MP_WlanHdr, 26); - _memset((pRxBuf+26), 0x3E, pSDIODev->MP_CRxSize); - } - } - - if (NULL != pRxBuf) { - ret = SDIO_Rx_Callback(pSDIODev, pRxBuf, 0, pSDIODev->MP_CRxSize+26, SDIO_CMD_RX_ETH); - if (SUCCESS == ret) { - if (pSDIODev->MP_CRxPktCnt > 0) { - pSDIODev->MP_CRxPktCnt--; - pSDIODev->MP_CRxPktPendingCnt++; - if (0 == pSDIODev->MP_CRxPktCnt) { - pSDIODev->MP_ContinueRx = 0; - break; // break the while loop - } - } - if (pSDIODev->MP_CRxPktPendingCnt > 10) { - break; - } - } - else { - if (pSDIODev->MP_ContinueRxMode == SDIO_CRX_DYNA_BUF) { - RtlMfree(pRxBuf, pSDIODev->MP_CRxSize+26); -#if SDIO_DEBUG - pSDIODev->MemAllocCnt--; -#endif - } -#if !TASK_SCHEDULER_DISABLED - RtlMsleepOS(10); // no resource, sleep a while - RtlUpSema(&pSDIODev->RxSema); -#else - SDIO_TaskUp(pSDIODev); -#endif - break; - } - } - else { -#if !TASK_SCHEDULER_DISABLED - RtlMsleepOS(10); // no resource, sleep a while - RtlUpSema(&pSDIODev->RxSema); -#else - SDIO_TaskUp(pSDIODev); -#endif - break; - } - } -} - -/****************************************************************************** - * Function: SDIO_DeviceMPApp - * Desc: To handle SDIO MP command - * - * Para: - * pData: point to the command buffer - * - ******************************************************************************/ -void SDIO_DeviceMPApp( - IN PHAL_SDIO_ADAPTER pSDIODev, - IN uint16_t argc, - IN uint8_t *argv[] -) -{ - uint8_t cmd_type; - uint16_t offset=0; - uint32_t arg1, arg2; - int ret; - int i; - - DBG_SDIO_INFO("==>MP_App: arg_num=%d cmd_str=%s\n", argc, (char *)argv[0]); - - cmd_type = SDIO_MapMPCmd((char *)argv[0], &offset); - DBG_SDIO_INFO("MP_App: MP_Cmdtype=%d\n", cmd_type); - - switch (cmd_type) - { - case SDIO_MP_START: - if (!pSDIODev->MP_ModeEn) { - pSDIODev->MP_ModeEn = 1; - pSDIODev->MP_TxPktCnt = 0; /* SDIO TX packet count */ - pSDIODev->MP_RxPktCnt = 0; /* SDIO RX packet count */ - pSDIODev->MP_TxByteCnt = 0; /* SDIO TX Byte count */ - pSDIODev->MP_RxByteCnt = 0; /* SDIO RX Byte count */ - DiagPrintf("SDIO MP Started!\n"); - } - else { - DiagPrintf("In SDIO MP Mode already!\n"); - } - break; - - case SDIO_MP_STOP: - pSDIODev->MP_ModeEn = 0; - DiagPrintf("SDIO MP Stoped!\n"); - break; - - case SDIO_MP_LOOPBACK: - DBG_SDIO_INFO("MP_App: argv[1]=%s\n", argv[1]); - if (pSDIODev->MP_ModeEn == 0) { - DiagPrintf("Not in MP mode! Please start MP mode first.\n"); - break; - } - arg1 = Strtoul((const uint8_t*)(argv[1]), (uint8_t **)NULL, 10); - if (arg1) { - if (pSDIODev->MP_LoopBackEn == 0) { - // Create a Task for MP loopback test -#if !TASK_SCHEDULER_DISABLED - RtlInitSema(&(pSDIODev->MP_EventSema), 0); - if (NULL == pSDIODev->MP_EventSema){ - DBG_SDIO_ERR("SDIO MP_Loopback Create Semaphore Err!\n"); - break; // break the switch case - } - - /* create a Mailbox for other driver module to send message to SDIO driver */ - pSDIODev->pMP_MBox = RtlMailboxCreate(MBOX_ID_SDIO_MP, SDIO_MAILBOX_SIZE, &(pSDIODev->MP_EventSema)); - if (NULL == pSDIODev->pMBox) { - DBG_SDIO_ERR("SDIO MP_Loopback Create Mailbox Err!\n"); - break; // break the switch case - } - - /* Create the SDIO task */ -#ifdef PLATFORM_FREERTOS - ret = xTaskCreate( SDIO_MP_Task, "SDIO_MP_TASK", ((256*4)/sizeof(portBASE_TYPE)), (void *)pSDIODev, SDIO_MP_TASK_PRIORITY, &pSDIODev->MP_TaskHandle); - if (pdTRUE != ret ) - { - DBG_SDIO_ERR("SDIO MP Create Task Err(%d)!\n", ret); - break; - } -#endif - DiagPrintf("SDIO MP Task Created\n"); -#endif // end of "#if !TASK_SCHEDULER_DISABLED" - - // Backup origional TX Callback function - pSDIODev->pTxCallback_Backup = pSDIODev->Tx_Callback; - pSDIODev->pTxCb_Adapter_Backup = (void *)pSDIODev->pTxCb_Adapter; - DiagPrintf("Register SDIO TX Callback with Loopback function\n"); - SDIO_Register_Tx_Callback(pSDIODev, &SDIO_MP_Loopback, (void *) pSDIODev); - pSDIODev->MP_LoopBackEn = 1; - } - else { - DiagPrintf("SDIO MP LoopBack is On already!\n"); - } - } - else { - if (pSDIODev->MP_LoopBackEn) { - // Restore origional TX Callback function - DiagPrintf("Restore SDIO TX Callback...\n"); - SDIO_Register_Tx_Callback(pSDIODev, pSDIODev->pTxCallback_Backup, pSDIODev->pTxCb_Adapter_Backup); - pSDIODev->MP_LoopBackEn = 0; -#if !TASK_SCHEDULER_DISABLED - /* Exit the SDIO task */ - if (pSDIODev->MP_TaskHandle) { - RtlEnterCritical(); - pSDIODev->MP_Events |= SDIO_EVENT_EXIT; - RtlExitCritical(); - RtlUpSema(&pSDIODev->MP_EventSema); - i=0; - while (1) { - RtlEnterCritical(); - if (pSDIODev->MP_Events & SDIO_EVENT_MP_STOPPED) { - RtlExitCritical(); - break; - } - RtlExitCritical(); - RtlMsleepOS(10); - i++; - if (i> 100) { - DBG_SDIO_ERR("Delete SDIO MP Task Failed with Timeout\n"); - break; - } - } - } - - /* Delete the Mailbox */ - if (pSDIODev->pMP_MBox) { - RtlMailboxDel(pSDIODev->pMP_MBox); - pSDIODev->pMP_MBox = NULL; - } - - /* Delete the Semaphore */ - if (pSDIODev->MP_EventSema) { - RtlFreeSema(&pSDIODev->MP_EventSema); - pSDIODev->MP_EventSema = NULL; - } - DiagPrintf("SDIO MP Task Deleted\n"); -#endif - - } - } - DiagPrintf("SDIO MP LoopBack=%d\n", pSDIODev->MP_LoopBackEn); - break; - - case SDIO_MP_STATUS: - SDIO_DumpMPStatus(pSDIODev); - break; - - case SDIO_MP_READ_REG8: - arg1 = Strtoul((const uint8_t*)(argv[1]), (uint8_t **)NULL, 16); - DiagPrintf("SDIO_Reg[%x]=%x\n", arg1, HAL_SDIO_READ8(arg1)); - break; - - case SDIO_MP_READ_REG16: - arg1 = Strtoul((const uint8_t*)(argv[1]), (uint8_t **)NULL, 16); - DiagPrintf("SDIO_Reg[%x]=%x\n", arg1, HAL_SDIO_READ16(arg1)); - break; - - case SDIO_MP_READ_REG32: - arg1 = Strtoul((const uint8_t*)(argv[1]), (uint8_t **)NULL, 16); - DiagPrintf("SDIO_Reg[%x]=%x\n", arg1, HAL_SDIO_READ32(arg1)); - break; - - case SDIO_MP_WRITE_REG8: - arg1 = Strtoul((const uint8_t*)(argv[1]), (uint8_t **)NULL, 16); - arg2 = Strtoul((const uint8_t*)(argv[2]), (uint8_t **)NULL, 16); - HAL_SDIO_WRITE8(arg1, arg2); - DiagPrintf("Write Reg[%x]=%x, Readback:%x\n", arg1, arg2, HAL_SDIO_READ8(arg1)); - break; - - case SDIO_MP_WRITE_REG16: - arg1 = Strtoul((const uint8_t*)(argv[1]), (uint8_t **)NULL, 16); - arg2 = Strtoul((const uint8_t*)(argv[2]), (uint8_t **)NULL, 16); - HAL_SDIO_WRITE16(arg1, arg2); - DiagPrintf("Write Reg[%x]=%x, Readback:%x\n", arg1, arg2, HAL_SDIO_READ16(arg1)); - break; - - case SDIO_MP_WRITE_REG32: - arg1 = Strtoul((const uint8_t*)(argv[1]), (uint8_t **)NULL, 16); - arg2 = Strtoul((const uint8_t*)(argv[2]), (uint8_t **)NULL, 16); - HAL_SDIO_WRITE32(arg1, arg2); - DiagPrintf("Write Reg[%x]=%x, Readback:%x\n", arg1, arg2, HAL_SDIO_READ32(arg1)); - break; - - case SDIO_MP_WAKEUP: - SDIO_Wakeup_Task(pSDIODev); - break; - - case SDIO_MP_DUMP: - arg1 = Strtoul((const uint8_t*)(argv[1]), (uint8_t **)NULL, 10); - if (arg1) { - if (!SDIO_IsEventPending(pSDIODev, SDIO_EVENT_DUMP)) { - // reset statistic - for (i=0;iMP_TxAvgTPWin[i] = 0; - pSDIODev->MP_RxAvgTPWin[i] = 0; - } - pSDIODev->MP_TxAvgTPWinSum = 0; - pSDIODev->MP_RxAvgTPWinSum = 0; - pSDIODev->OldestTxAvgWinIdx = 0; - pSDIODev->OldestRxAvgWinIdx = 0; - pSDIODev->TxAvgWinCnt = 0; - pSDIODev->RxAvgWinCnt = 0; - } - SDIO_SetEvent(pSDIODev, SDIO_EVENT_DUMP); - } - else { - SDIO_ClearEvent(pSDIODev, SDIO_EVENT_DUMP); - } - DiagPrintf("SDIO Dump %d\n", arg1); - break; - - case SDIO_MP_CTX: - arg1 = Strtoul((const uint8_t*)(argv[1]), (uint8_t **)NULL, 10); - if (arg1) { - if (!pSDIODev->MP_ContinueTx) { - // Backup origional TX Callback function - pSDIODev->pTxCallback_Backup = pSDIODev->Tx_Callback; - pSDIODev->pTxCb_Adapter_Backup = (void *)pSDIODev->pTxCb_Adapter; - DiagPrintf("Register SDIO TX Callback with Continue TX Test function\n"); - SDIO_Register_Tx_Callback(pSDIODev, &SDIO_MP_ContinueTx, (void *) pSDIODev); - pSDIODev->MP_ContinueTx = 1; - } - DiagPrintf("SDIO Continue TX Test Enabled\n"); - } - else { - if (pSDIODev->MP_ContinueTx) { - // Restore origional TX Callback function - DiagPrintf("Restore SDIO TX Callback...\n"); - SDIO_Register_Tx_Callback(pSDIODev, pSDIODev->pTxCallback_Backup, pSDIODev->pTxCb_Adapter_Backup); - pSDIODev->MP_ContinueTx = 0; - DiagPrintf("SDIO Continue TX Test Disabled\n"); - } - else { - DiagPrintf("SDIO Continue TX Test Didn't Enabled\n"); - } - } - break; - - case SDIO_MP_CRX: - case SDIO_MP_CRX_DA: - if(SDIO_MP_CRX == cmd_type) { - pSDIODev->MP_ContinueRxMode = SDIO_CRX_STATIC_BUF; - } - else if (SDIO_MP_CRX_DA == cmd_type) { - pSDIODev->MP_ContinueRxMode = SDIO_CRX_DYNA_BUF; - } - - if (pSDIODev->MP_ContinueRx) { - DiagPrintf("SDIO Continue RX Test Running\n"); - break; - } - pSDIODev->MP_ContinueRx = 1; - arg1 = Strtoul((const uint8_t*)(argv[1]), (uint8_t **)NULL, 10); - if (arg1 < 16) { - DiagPrintf("SDIO RX Test Min Pkt Size is 16\n"); - arg1 = 16; - } - - if (arg1 > 4096) { - DiagPrintf("SDIO RX Test Max Pkt Size is 4096\n"); - arg1 = 4096; - } - pSDIODev->MP_CRxSize = arg1; - arg2 = Strtoul((const uint8_t*)(argv[2]), (uint8_t **)NULL, 10); - pSDIODev->MP_CRxPktCnt = arg2; - if (arg2 == 0) { - pSDIODev->MP_CRxInfinite = 1; - } - - if (SDIO_CRX_STATIC_BUF == pSDIODev->MP_ContinueRxMode) { - if (NULL == pSDIODev->pMP_CRxBuf) { - pSDIODev->pMP_CRxBuf = RtlMalloc(pSDIODev->MP_CRxSize+26); // 26: Wlan header - DiagPrintf("SDIO RX Test: pBuf @ 0x%x\n", (uint32_t)pSDIODev->pMP_CRxBuf); - if (((uint32_t)(pSDIODev->pMP_CRxBuf) & 0x03) != 0) { - DiagPrintf("SDIO RX Test: pBuf Not 4-bytes Aligned!\n"); - } -#if SDIO_DEBUG - pSDIODev->MemAllocCnt++; -#endif - if (NULL != pSDIODev->pMP_CRxBuf) { - _memcpy(pSDIODev->pMP_CRxBuf, MP_WlanHdr, 26); - _memset((pSDIODev->pMP_CRxBuf+26), 0x3E, pSDIODev->MP_CRxSize); - } - } - - if (pSDIODev->pMP_CRxBuf) { - DiagPrintf("SDIO RX Test(Static RX Buf): PktSize=%d, PktCount=%d\n", pSDIODev->MP_CRxSize, pSDIODev->MP_CRxPktCnt); - SDIO_Wakeup_Task(pSDIODev); - } - else { - pSDIODev->MP_ContinueRx = 0; - pSDIODev->MP_CRxInfinite= 0; - pSDIODev->MP_CRxPktCnt = 0; - DiagPrintf("SDIO RX Test: Mem Allocate Failed\n"); - } - } - - if (SDIO_CRX_DYNA_BUF == pSDIODev->MP_ContinueRxMode) { - DiagPrintf("SDIO RX Test(Dyna-Allocate RX Buf): PktSize=%d, PktCount=%d\n", pSDIODev->MP_CRxSize, pSDIODev->MP_CRxPktCnt); - SDIO_Wakeup_Task(pSDIODev); - } - - break; - - case SDIO_MP_CRX_STOP: - pSDIODev->MP_ContinueRx = 0; - pSDIODev->MP_CRxPktCnt = 0; - pSDIODev->MP_CRxInfinite= 0; - DiagPrintf("SDIO RX Test Stopping...\n"); - break; - - case SDIO_MP_DBG_MSG: - arg1 = Strtoul((const uint8_t*)(argv[1]), (uint8_t **)NULL, 10); - if (arg1) { - ConfigDebugInfo |= _DBG_SDIO_; - ConfigDebugWarn |= _DBG_SDIO_; - DiagPrintf("SDIO Debug Message On.\n"); - } - else { - ConfigDebugInfo &= ~_DBG_SDIO_; - ConfigDebugWarn &= ~_DBG_SDIO_; - DiagPrintf("SDIO Debug Message Off.\n"); - } - break; - - default: - DiagPrintf("SDIO_DeviceMPApp: Unknown Cmd=%s\n", argv[0]); - DiagPrintf("==== SDIO Command Help ====\n"); - DiagPrintf("SDIO mp_start : Enter MP mode\n"); - DiagPrintf("SDIO mp_stop : Exit MP mode(Switch back to Normal mode)\n"); - DiagPrintf("SDIO mp_loopback <1/0> : enable/disable data path loopback test\n"); - DiagPrintf("SDIO ctx <1/0> : Start/Stop SDIO continue TX test\n"); - DiagPrintf("SDIO crx : Start SDIO continue RX test with static RX Buffer\n"); - DiagPrintf("SDIO crx_da : Start SDIO continue RX test with Dynamic Allocate RX Buffer\n"); - DiagPrintf("SDIO crx_stop : Stop SDIO continue RX test\n"); - DiagPrintf("SDIO status : Dump current SDIO driver status\n"); - DiagPrintf("SDIO read_reg8 : Read SDIO register via 1-byte access\n"); - DiagPrintf("SDIO read_reg16 : Read SDIO register via 2-bytes access\n"); - DiagPrintf("SDIO read_reg32 : Read SDIO register via 4-bytes access\n"); - DiagPrintf("SDIO write_reg8 : Write SDIO register via 1-byte access\n"); - DiagPrintf("SDIO write_reg16 : Write SDIO register via 2-bytes access\n"); - DiagPrintf("SDIO write_reg32 : Write SDIO register via 4-bytes access\n"); - DiagPrintf("SDIO dump <1/0> : Start/Stop to dump SDIO throughput statistic periodically.\n"); - break; - } -} -#endif /* endof '#if SDIO_MP_MODE' */ - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host.c deleted file mode 100644 index 1977ec6..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host.c +++ /dev/null @@ -1,1948 +0,0 @@ -/* - */ -#include "rtl8195a.h" -#include "hal_sdio_host.h" -#include "rtl8195a_sdio_host.h" -//------------------------------------------------------------------------- -// Function declarations -/* - signed int SdioHostIsTimeout(uint32_t StartCount, uint32_t TimeoutCnt); - void SdioHostSendCmd(SDIO_HOST_CMD *Cmd); - signed int SdioHostGetResponse(void *Data, int RspType); - void SdioHostSdBusPwrCtrl(uint8_t En, int a2); - int SdioHostSdClkCtrl(void *Data, int En, int Divisor); - int SdioHostChkDataLineActive(uint32_t Timeout); - int SdioHostChkCmdInhibitCMD(void); //uint32_t Timeout); - int SdioHostChkCmdInhibitDAT(uint32_t Timeout); - uint32_t SdioHostIsrHandle(void *Data); - int HalSdioHostDeInitRtl8195a(void *Data); - int HalSdioHostEnableRtl8195a(void *Data); - int HalSdioHostDisableRtl8195a(void *Data); - signed int HalSdioHostIrqInitRtl8195a(void *Data); - signed int HalSdioHostInitHostRtl8195a(void *Data); - int HalSdioHostStopTransferRtl8195a(void *Data, uint32_t a2); - signed int SdioHostErrIntRecovery(void *Data, int a2, signed int a3); - signed int SdioHostChkXferComplete(void *Data, uint32_t Timeout, signed int a3); - signed int SdioHostChkCmdComplete(void *Data, uint32_t Timeout); - int SdioHostCardSelection(void *Data, int Select, int a3); - int SdioHostGetCSD(void *Data, uint32_t a2); - int HalSdioHostReadBlocksDmaRtl8195a(int result, uint32_t a2, int64 a3, uint32_t BlockCnta); - int HalSdioHostWriteBlocksDmaRtl8195a(int result, uint32_t a2, int64 a3, uint32_t BlockCnta); - int SdioHostSwitchFunction(void *Data, int Mode, int Fn2Sel, int Fn1Sel, uint8_t *StatusBuf); - int HalSdioHostGetCardStatusRtl8195a(void *Data, uint32_t a2, int a3); - signed int HalSdioHostInitCardRtl8195a(void *Data, int a2, int a3); - int HalSdioHostGetSdStatusRtl8195a(void *Data, uint32_t a2, int a3); - signed int HalSdioHostChangeSdClockRtl8195a(void *Data, int Frequency); - int HalSdioHostEraseRtl8195a(uint64_t EndAddr, int64 a2, int64 EndAddra); - signed int HalSdioHostGetWriteProtectRtl8195a(void *Data, uint32_t a2, int a3); - int HalSdioHostSetWriteProtectRtl8195a(void *Data, int Setting); - */ -// int DiagPrintf(const char *, ...); weak -// int VectorIrqDisRtl8195A(uint32_t); weak -// int VectorIrqUnRegisterRtl8195A(uint32_t); weak -// int HalPinCtrlRtl8195A(uint32_t, uint32_t, uint32_t); weak -// int VectorIrqRegisterRtl8195A(void); weak -// int VectorIrqEnRtl8195A(uint32_t); weak -// int HalDelayUs(uint32_t); weak -//------------------------------------------------------------------------- -// Data declarations -//------------------------------------------------------------------------- -#define HAL_SDIOH_REG32(a) (*(volatile unsigned int *)(SDIO_HOST_REG_BASE+a)) -#define HAL_SDIOH_REG16(a) (*(volatile unsigned short *)(SDIO_HOST_REG_BASE+a)) -#define HAL_SDIOH_REG8(a) (*(volatile unsigned char *)(SDIO_HOST_REG_BASE+a)) - - -//-----SdioHostIsTimeout(StartCount, TimeoutCnt) -HAL_Status SdioHostIsTimeout(uint32_t StartCount, uint32_t TimeoutCnt) { - uint32_t t1, t2; - HAL_Status result; - - t1 = HalTimerOp.HalTimerReadCount(1); - t2 = StartCount - t1; - if (StartCount < t1) - t2--; - if (TimeoutCnt >= t2) - result = HAL_OK; - else - result = HAL_TIMEOUT; - return result; -} - -//----- SdioHostSendCmd(PSDIO_HOST_CMD) -void SdioHostSendCmd(PSDIO_HOST_CMD Cmd) { - HAL_SDIOH_REG32(REG_SDIO_HOST_ARG) = Cmd->Arg; // 40058008 = Cmd->Arg - HAL_SDIOH_REG16(REG_SDIO_HOST_CMD) = *(uint16_t *) &Cmd->CmdFmt; // & 0x3FFB; -} - -//----- -HAL_Status SdioHostGetResponse(void *Data, int RspType) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status result; - - if (psha) { - psha->Response[0] = HAL_SDIOH_REG32(REG_SDIO_HOST_RSP0); // 40058010; - psha->Response[1] = HAL_SDIOH_REG32(REG_SDIO_HOST_RSP2); - if (RspType == 1) { - psha->Response[2] = HAL_SDIOH_REG32(REG_SDIO_HOST_RSP4); - psha->Response[3] = HAL_SDIOH_REG32(REG_SDIO_HOST_RSP6); - } - result = HAL_OK; - } else - result = HAL_ERR_PARA; - return result; -} - -//----- -//void SdioHostSdBusPwrCtrl(uint8_t En) { -void SdioHostSdBusPwrCtrl(void) { - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) &= ~ PWR_CTRL_SD_BUS_PWR; - if (HAL_SDIOH_REG32(REG_SDIO_HOST_CAPABILITIES) & CAPA_VOLT_SUPPORT_18V) { - DBG_SDIO_WARN("Supply SD bus voltage: 1.8V\n"); - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) = VOLT_18V << 1; - } - else if (HAL_SDIOH_REG32(REG_SDIO_HOST_CAPABILITIES) & CAPA_VOLT_SUPPORT_30V) { - DBG_SDIO_WARN("Supply SD bus voltage: 3.0V\n"); - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) = VOLT_30V << 1; - } - else if (HAL_SDIOH_REG32(REG_SDIO_HOST_CAPABILITIES) & CAPA_VOLT_SUPPORT_33V) { - DBG_SDIO_WARN("Supply SD bus voltage: 3.3V\n"); - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) = VOLT_33V << 1; - } - else DBG_SDIO_ERR("No supported voltage\n"); - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) |= PWR_CTRL_SD_BUS_PWR; -} - -//----- -HAL_Status SdioHostSdClkCtrl(void *Data, int En, uint8_t Divisor) { // SD_CLK_DIVISOR - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - if (HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) - & (PRES_STATE_CMD_INHIBIT_CMD | PRES_STATE_CMD_INHIBIT_DAT)) { - return HAL_BUSY; - } else { - if (!En) { - HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) &= ~CLK_CTRL_SD_CLK_EN; - } - else { - switch(Divisor) { - case BASE_CLK: - psha->CurrSdClk = SD_CLK_41_6MHZ; - break; - case BASE_CLK_DIVIDED_BY_2: - psha->CurrSdClk = SD_CLK_20_8MHZ; - break; - case BASE_CLK_DIVIDED_BY_4: - psha->CurrSdClk = SD_CLK_10_4MHZ; - break; - case BASE_CLK_DIVIDED_BY_8: - psha->CurrSdClk = SD_CLK_5_2MHZ; - break; - case BASE_CLK_DIVIDED_BY_16: - psha->CurrSdClk = SD_CLK_2_6MHZ; - break; - case BASE_CLK_DIVIDED_BY_32: - psha->CurrSdClk = SD_CLK_1_3MHZ; - break; - case BASE_CLK_DIVIDED_BY_64: - psha->CurrSdClk = SD_CLK_650KHZ; - break; - case BASE_CLK_DIVIDED_BY_128: - psha->CurrSdClk = SD_CLK_325KHZ; - break; - case BASE_CLK_DIVIDED_BY_256: - psha->CurrSdClk = SD_CLK_162KHZ; - break; - default: - DBG_SDIO_ERR("Unsupported SDCLK divisor!\n"); - Divisor = 0; - psha->CurrSdClk = SD_CLK_41_6MHZ; - } - } - HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) = (Divisor << 8) | CLK_CTRL_SD_CLK_EN | CLK_CTRL_INTERAL_CLK_EN; - } - return HAL_OK; -} - -#define SD_CHK_TIMEOUT 3225 - -//----- SdioHostChkDataLineActive -HAL_Status SdioHostChkDataLineActive(void) { - HAL_Status result; - uint32_t t1 = HalTimerOp.HalTimerReadCount(1); - do { - if ((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) - & PRES_STATE_DAT_LINE_ACTIVE) == 0) - break; - result = SdioHostIsTimeout(t1, SD_CHK_TIMEOUT); - } while (result != HAL_TIMEOUT); - return result; -} - -//----- SdioHostChkCmdInhibitCMD -HAL_Status SdioHostChkCmdInhibitCMD(void) { - HAL_Status result; - uint32_t t1 = HalTimerOp.HalTimerReadCount(1); - do { - if ((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) - & PRES_STATE_CMD_INHIBIT_CMD) == 0) - break; - result = SdioHostIsTimeout(t1, SD_CHK_TIMEOUT); - } while (result != HAL_TIMEOUT); - return result; -} - -//----- SdioHostChkCmdInhibitDAT -int SdioHostChkCmdInhibitDAT(void) { - HAL_Status result; - uint32_t t1 = HalTimerOp.HalTimerReadCount(1); - do { - if ((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) - & PRES_STATE_CMD_INHIBIT_DAT) == 0) - break; - result = SdioHostIsTimeout(t1, SD_CHK_TIMEOUT); - } while (result != HAL_TIMEOUT); - return result; -} - -//----- HalSdioHostDeInitRtl8195a -HAL_Status HalSdioHostDeInitRtl8195a(IN void *Data) { - HAL_Status ret; // r4@1 - - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) &= ~PWR_CTRL_SD_BUS_PWR; - ret = SdioHostSdClkCtrl(psha, 0, BASE_CLK); - if (ret == HAL_OK) { - if (psha) { - VectorIrqDisRtl8195A(&psha->IrqHandle); - VectorIrqUnRegisterRtl8195A(psha); - HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) &= ~CLK_CTRL_INTERAL_CLK_EN; - HAL_SDIOH_REG32(0x1000) &= 0xFFFFFBFF; // v40059000 - HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, - HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN) & (~BIT_SOC_HCI_SDIOH_EN)); - HalPinCtrlRtl8195A(SDIOH, 0, 0); - ACTCK_SDIOH_CCTRL(OFF); - SLPCK_SDIOH_CCTRL(OFF); - } else { - ret = HAL_ERR_PARA; - } - } - return ret; -} - -//----- HalSdioHostEnableRtl8195a -HAL_Status HalSdioHostEnableRtl8195a(IN void *Data) // // PHAL_SDIO_HOST_ADAPTER Data -{ -// PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - ACTCK_SDIOH_CCTRL(ON); - SLPCK_SDIOH_CCTRL(ON); - HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) |= CLK_CTRL_INTERAL_CLK_EN; - while (!(HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) & CLK_CTRL_INTERAL_CLK_STABLE)); - return SdioHostSdClkCtrl(Data, 1, BASE_CLK_DIVIDED_BY_2); -} - -//----- HalSdioHostDisableRtl8195a -HAL_Status HalSdioHostDisableRtl8195a(IN void *Data) { - int result; // r0@1 - - result = SdioHostSdClkCtrl(Data, 0, BASE_CLK); - if (result == HAL_OK) { - HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) &= ~CLK_CTRL_INTERAL_CLK_EN; - ACTCK_SDIOH_CCTRL(OFF); - SLPCK_SDIOH_CCTRL(OFF); - } - return result; -} - -//----- HalSdioHostIrqInitRtl8195a -HAL_Status HalSdioHostIrqInitRtl8195a(IN void *Data) // PIRQ_HANDLE Data -{ - HAL_Status result; - PIRQ_HANDLE pih = Data; - if (pih) { - pih->Data = Data; - pih->IrqNum = SDIO_HOST_IRQ; - pih->IrqFun = SdioHostIsrHandle; - pih->Priority = 6; - VectorIrqRegisterRtl8195A((PIRQ_HANDLE) pih); - VectorIrqEnRtl8195A((PIRQ_HANDLE) pih); - result = HAL_OK; - } else - result = HAL_ERR_PARA; - return result; -} - -//----- HalSdioHostInitHostRtl8195a -HAL_Status HalSdioHostInitHostRtl8195a(IN void *Data) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0, - HAL_READ32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0) & (~BIT_SOC_ACTCK_SDIO_DEV_EN)); - HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, - HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN) & (~BIT_SOC_HCI_SDIOD_ON_EN)); - - HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, - HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN) & (~BIT_SOC_HCI_SDIOD_OFF_EN)); - - HAL_WRITE32(PERI_ON_BASE, REG_HCI_PINMUX_CTRL, - HAL_READ32(PERI_ON_BASE, REG_HCI_PINMUX_CTRL) & (~BIT_HCI_SDIOD_PIN_EN)); - - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0, - HAL_READ32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0) | BIT_SOC_ACTCK_SDIO_HST_EN); - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0, - HAL_READ32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0) | BIT_SOC_SLPCK_SDIO_HST_EN); - HalPinCtrlRtl8195A(SDIOH, 0, 1); - HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, - HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN) | BIT_SOC_HCI_SDIOH_EN); - HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) |= SW_RESET_FOR_ALL; //4005802F |= 1; - int x = 1000; - while (HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) & SW_RESET_FOR_ALL) { - if (x-- == 0) { - DBG_SDIO_ERR("SD host initialization FAIL!\n"); - return HAL_TIMEOUT; - } - } - HalSdioHostIrqInitRtl8195a(&psha->IrqHandle); - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN) - = NOR_INT_STAT_EN_CMD_COMP - | NOR_INT_STAT_EN_XFER_COMP - | NOR_INT_STAT_EN_CARD_REMOVAL - | NOR_INT_STAT_EN_CARD_INT; // 0xC3; - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_SIG_EN) - = NOR_INT_SIG_EN_CMD_COMP - | NOR_INT_SIG_EN_XFER_COMP - | NOR_INT_SIG_EN_CARD_REMOVAL - | NOR_INT_SIG_EN_CARD_INT; // 195; - - - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS_EN) = 0x17F; - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_SIG_EN) = 0x17F; - HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) |= CLK_CTRL_INTERAL_CLK_EN; - x = 1000; - while (!(HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) - & CLK_CTRL_INTERAL_CLK_STABLE)) { - if (x-- == 0) { - DBG_SDIO_ERR("SD host initialization FAIL!\n"); - return HAL_TIMEOUT; - } - } - HAL_SDIOH_REG32(0x1000) |= 0x400; // 40059000 |= 0x400; - if (HAL_SDIOH_REG32(REG_SDIO_HOST_CAPABILITIES) & CAPA_ADMA2_SUPPORT) - HAL_SDIOH_REG16(REG_SDIO_HOST_HOST_CTRL) = 0x10; // 32-bit Address ADMA2 is selected - HAL_SDIOH_REG8(REG_SDIO_HOST_TIMEOUT_CTRL) = 0x0E; // TMCLK x 2^27 - return HAL_OK; -} - -//----- HalSdioHostStopTransferRtl8195a -HAL_Status HalSdioHostStopTransferRtl8195a(IN void *Data) { - HAL_Status result; - SDIO_HOST_CMD Cmd; - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - - if (psha) { - result = SdioHostChkCmdInhibitCMD(); //(uint32_t) Data); - if (result == HAL_OK) { - result = SdioHostChkCmdInhibitDAT(); - if (result == HAL_OK) { - - psha->CmdCompleteFlg = 0; - psha->XferType = SDIO_XFER_NOR; - psha->XferCompleteFlg = 0; - - Cmd.CmdFmt.RespType = RSP_LEN_48_CHK_BUSY; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 0; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = ABORT; - Cmd.CmdFmt.CmdIdx = CMD_STOP_TRANSMISSION; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = 0; - - SdioHostSendCmd(&Cmd); - } - } - } else { - result = HAL_ERR_PARA; - } - return result; -} - -//----- SdioHostErrIntRecovery -HAL_Status SdioHostErrIntRecovery(void *Data) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - int t; - - if (!psha) return HAL_ERR_PARA; - DBG_SDIO_ERR("Recovering error interrupt...\n"); - uint16_t ierr = HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS); // v40058032; - - if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) - & ( ERR_INT_STAT_CMD_TIMEOUT - | ERR_INT_STAT_CMD_CRC - | ERR_INT_STAT_CMD_END_BIT - | ERR_INT_STAT_CMD_IDX)) { - HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) |= SW_RESET_FOR_CMD; - int t = 0; - while((HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) & SW_RESET_FOR_CMD)) { - if(++t > 1000) { - DBG_SDIO_ERR("CMD line reset timeout!\n"); - return HAL_TIMEOUT; - } - } - } - if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) - & ( ERR_INT_STAT_DATA_TIMEOUT - | ERR_INT_STAT_DATA_CRC - | ERR_INT_STAT_DATA_END_BIT)) { - HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) |= SW_RESET_FOR_DAT; - t = 0; - while((HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) & SW_RESET_FOR_DAT)) { - if(++t > 1000) { - DBG_SDIO_ERR("DAT line reset timeout!\n"); - return HAL_TIMEOUT; - } - } - } - - DBG_SDIO_ERR("Error interrupt status: 0x%04X\n", HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS)); - - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = ierr; - psha->ErrIntFlg = 0; - int result = HalSdioHostStopTransferRtl8195a(psha); - if (result == HAL_OK) { - t = 0; - while(HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) - & (PRES_STATE_CMD_INHIBIT_CMD | PRES_STATE_CMD_INHIBIT_DAT)) { - if(++t > 1000) break; - } - if(HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) - & ( ERR_INT_STAT_CMD_TIMEOUT - | ERR_INT_STAT_CMD_CRC - | ERR_INT_STAT_CMD_END_BIT - | ERR_INT_STAT_CMD_IDX)) { - DBG_SDIO_ERR("Non-recoverable error(1)!\n"); - return HAL_ERR_UNKNOWN; - } - if(HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) - & ERR_INT_STAT_DATA_TIMEOUT) { - DBG_SDIO_ERR("Non-recoverable error(2)!\n"); - return HAL_ERR_UNKNOWN; - } - HalDelayUs(50); - if((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) & 0xF00000) != 0xF00000) { - DBG_SDIO_ERR("Non-recoverable error(3)!\n"); - return HAL_ERR_UNKNOWN; - } - DBG_SDIO_ERR("Recoverable error...\n"); - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_SIG_EN) = 0x17F; - return 16; - } - DBG_SDIO_ERR("Stop transmission error!\n"); - return HAL_ERR_UNKNOWN; -} - -//----- (0000028C) -------------------------------------------------------- -void SdioHostIsrHandle(void *Data) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - uint16_t status = HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS);// v40058030; - - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_SIG_EN) = 0; - if (status) { - if (status & NOR_INT_STAT_CMD_COMP) - psha->CmdCompleteFlg = 1; - if (status & NOR_INT_STAT_XFER_COMP) { - psha->XferCompleteFlg = 1; - if ((status & NOR_INT_STAT_ERR_INT) == 0) { - if (psha->XferCompCallback) - psha->XferCompCallback(psha->XferCompCbPara); - - } else if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & - ( ERR_INT_STAT_DATA_TIMEOUT - | ERR_INT_STAT_DATA_CRC - | ERR_INT_STAT_DATA_END_BIT)) { - DBG_SDIO_ERR("\r[SDIO Err]XFER CP with ErrIntVal: 0x%04X /0x%04X -- TYPE 0x%02X\n", - status, - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS), - psha->XferType); - psha->errType = SDIO_ERR_DAT_CRC; - if (psha->ErrorCallback) - psha->ErrorCallback(psha->ErrorCbPara); - } - - } - if (status & NOR_INT_STAT_CARD_INSERT) // 0x40 - { - SdioHostSdClkCtrl(psha, 1, BASE_CLK_DIVIDED_BY_128); // BASE_CLK_DIVIDED_BY_128 - SdioHostSdBusPwrCtrl(); - if (psha->CardInsertCallBack) - psha->CardInsertCallBack(psha->CardInsertCbPara); - } - if (status & NOR_INT_STAT_CARD_REMOVAL) // 0x80 - { - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) &= ~PWR_CTRL_SD_BUS_PWR; - SdioHostSdClkCtrl(psha, 0, BASE_CLK); // BASE_CLK - if (psha->CardRemoveCallBack) - psha->CardRemoveCallBack(psha->CardRemoveCbPara); - } - if (status & NOR_INT_STAT_CARD_INT) // 0x100 ) - { - uint16_t val = HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN); - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN) = val & (~NOR_INT_STAT_EN_CARD_INT); - DBG_SDIO_ERR("CARD INT: 0x%04X\n", status); - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN) = val; - - } - if (status & NOR_INT_STAT_ERR_INT) // 0x8000 ) - { - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_SIG_EN) = 0; - uint16_t err = HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS); - - DBG_SDIO_ERR("\r[SDIO Err]XFER CP with ErrIntVal: 0x%04X /0x%04X -- TYPE 0x%02X\n", - status, - err, - psha->CmdCompleteFlg); - - if (psha->CmdCompleteFlg) { - SdioHostErrIntRecovery(psha); - goto ir_end; - } - DiagPrintf("\r[SDIO Err]Read/Write command Error\n"); - - psha->ErrIntFlg = 1; - } - } -ir_end: - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_SIG_EN) - = NOR_INT_SIG_EN_CMD_COMP - | NOR_INT_SIG_EN_XFER_COMP - | NOR_INT_SIG_EN_CARD_REMOVAL - | NOR_INT_SIG_EN_CARD_INT; // 195; -} - -//----- SdioHostChkCmdComplete -HAL_Status SdioHostChkCmdComplete(void *Data, uint32_t Timeout) { -{ - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - uint32_t TimeoutCnt; - uint32_t StartCount; - HAL_Status result; - - - if (psha) { - if (Timeout == SDIO_HOST_WAIT_FOREVER) { - StartCount = 0; - TimeoutCnt = 0; - } else { - TimeoutCnt = 1000 * Timeout / 31; - StartCount = HalTimerOp.HalTimerReadCount(1); // v6 = (*((int (**)(uint32_t)) &HalTimerOp + 2))(1); - } - while(psha->CmdCompleteFlg == 0) { - if(psha->ErrIntFlg) - return SdioHostErrIntRecovery(psha); - if(TimeoutCnt) { - result = SdioHostIsTimeout(StartCount, TimeoutCnt); - if (result == HAL_TIMEOUT) - return result; - } else if(Timeout == 0) { - result = HAL_BUSY; - return result; - } - } - result = HAL_OK; - } else - result = HAL_ERR_PARA; - return result; -} - -//----- SdioHostGetCSD -HAL_Status SdioHostGetCSD(void *Data) -{ - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status result; - SDIO_HOST_CMD Cmd; - - if (psha) { - result = SdioHostChkCmdInhibitCMD(); - if (result == HAL_OK) { - - Cmd.CmdFmt.RespType = RSP_LEN_136; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 0; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_SEND_CSD; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = psha->RCA << 16; - - psha->CmdCompleteFlg = 0; - psha->XferType = 0; - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if(result == HAL_OK) { - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - psha->Csd[15] = 1; - uint32 x = psha->Response[3]; - psha->Csd[0] = x >> 16; - psha->Csd[1] = x >> 8; - psha->Csd[2] = x; - x = psha->Response[2]; - psha->Csd[3] = x >> 24; - psha->Csd[4] = x >> 16; - psha->Csd[5] = x >> 8; - psha->Csd[6] = x; - x = psha->Response[1]; - psha->Csd[7] = x >> 24; - psha->Csd[8] = x >> 16; - psha->Csd[9] = x >> 8; - psha->Csd[10] = x; - x = psha->Response[0]; - psha->Csd[11] = x >> 24; - psha->Csd[12] = x >> 16; - psha->Csd[13] = x >> 8; - psha->Csd[14] = x; - } - } - } else - result = HAL_ERR_PARA; - return result; -} - -//----- SdioHostChkXferComplete -HAL_Status SdioHostChkXferComplete(void *Data) -{ - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - uint32_t StartCount; - HAL_Status result; - if (psha) { - StartCount = HalTimerOp.HalTimerReadCount(1); - while(psha->XferCompleteFlg == 0 - && (HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) - & PRES_STATE_DAT0_SIGNAL_LEVEL) == 0) { - if(psha->ErrIntFlg) - return SdioHostErrIntRecovery(psha); - result = SdioHostIsTimeout(StartCount, 161290); - if (result == HAL_TIMEOUT) - return result; - } - result = HAL_OK; - } else { - result = HAL_ERR_PARA; - } - return result; -} - -//----- SdioHostCardSelection -HAL_Status SdioHostCardSelection(void *Data, int Select) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status result; - SDIO_HOST_CMD Cmd; // [sp+0h] [bp-18h]@1 - - if (psha) { - result = SdioHostChkCmdInhibitCMD(); - if (result == HAL_OK) { - psha->CmdCompleteFlg = 0; - psha->XferType = SDIO_XFER_NOR; - psha->XferCompleteFlg = 0; - - if (Select == 1) { - result = SdioHostChkCmdInhibitDAT(0); - if (result == HAL_OK) { - - Cmd.CmdFmt.RespType = RSP_LEN_48_CHK_BUSY; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 1; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_SELECT_DESELECT_CARD; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = psha->RCA << 16; - - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if(result == HAL_OK) { - result = SdioHostChkXferComplete(psha); - if(result != HAL_OK) return result; - result = SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - if(result != HAL_OK) return result; - if((uint8)psha->Response[1] != 7) return result; - else { - DBG_SDIO_ERR("Command index error!\n"); - result = HAL_ERR_UNKNOWN; - } - } - } - } else { - - Cmd.CmdFmt.RespType = NO_RSP; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 0; - Cmd.CmdFmt.CmdIdxChkEn = 0; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_SELECT_DESELECT_CARD; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = psha->RCA << 16; - - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - } - } - } else result = HAL_ERR_PARA; - return result; -} - - - - - - - - - - - - - - - - - - - - - -//----- (00000D34) -------------------------------------------------------- -HAL_Status SdioHostSwitchFunction(void *Data, int Mode, int Fn2Sel, int Fn1Sel, - uint8_t *StatusBuf) -{ - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status result; // r0@3 - SDIO_HOST_CMD Cmd; // [sp+0h] [bp-20h]@1 - - uint8_t *v5; // r4@1 - uint32_t v6; // r0@1 - int v7; // r5@1 - int v8; // r6@1 - char v9; // r7@3 - char v11; // r3@5 - uint32_t v12; // r1@5 - signed int v13; // r2@6 - uint32_t v14; // r1@6 - - - int v16; // [sp+8h] [bp-18h]@1 - - *(uint32_t *) &Cmd.CmdFmt = Data; - Cmd.Arg = Mode; - v16 = Fn2Sel; - v5 = Data; - v6 = *((uint32_t *) Data + 4); - v7 = Mode; - v8 = Fn2Sel; - if (!v6 || ((uint8_t) Fn1Sel | (uint8_t) v6) & 3) { - result = 3; - } else { - HAL_SDIOH_REG32(REG_SDIO_HOST_ADMA_SYS_ADDR) = (uint32)psha->AdmaDescTbl; // v40058058 = v6; - HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_SIZE) = 64; // v40058004 = 64; - HAL_SDIOH_REG32(REG_SDIO_HOST_XFER_MODE) = XFER_MODE_DATA_XFER_DIR | XFER_MODE_DMA_EN; // v4005800C = 17; - - v9 = *(uint8_t *) v6; - *(uint16_t *) (v6 + 2) = 64; - *(uint8_t *) v6 = ((v9 | 3) & 0xFB | 4 * ((Fn1Sel | v6) & 1)) & 0xEF - | 16 * ((Fn1Sel | v6) & 1) | 0x20; - *(uint32_t *) (v6 + 4) = Fn1Sel; - result = SdioHostChkCmdInhibitCMD();//v6); - if (!result) { - result = SdioHostChkDataLineActive(); - if (result == HAL_OK) { - Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(uint8_t *) &Cmd.CmdFmt & 0xF4 - | 0x3A) & 0x3F); - v11 = *((uint8_t *) &Cmd.CmdFmt + 1); - v5[128] = 0; - *((uint8_t *) &Cmd.CmdFmt + 1) = v11 & 0xC0 | 6; - v5[129] = 0; - Cmd.Arg = v8 | 0xFFFFF0 | (v7 << 31); - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v5);//, v12); - if (!result) { - SdioHostGetResponse(v5, *(uint8_t *) &Cmd.CmdFmt & 3); - result = SdioHostChkXferComplete(v5, 0x1388u, v13); - if (result) { - if (result != 16) { - if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & ERR_INT_STAT_ADMA) { - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = ERR_INT_STAT_ADMA; - if (HalSdioHostStopTransferRtl8195a(psha)) { - DBG_SDIO_ERR("Stop transmission error!\n"); - } - } - } - result = 238; - } - } - } - } - } - return result; -} - - - - - -//----- (000009CC) -------------------------------------------------------- -HAL_Status HalSdioHostReadBlocksDmaRtl8195a(IN void *Data, IN uint64_t ReadAddr, -IN uint32_t BlockCnt) { - int64 v4; // r4@1 - int v5; // r6@1 - int v6; // r7@3 - char v7; // r3@12 - uint32_t v8; // r1@12 - signed int v9; // r2@13 - int v10; // r1@16 - const char *v11; // r0@17 - char v12; // r3@20 - uint32_t v13; // r1@20 - signed int v14; // r2@23 - uint32_t v15; // r1@23 - SDIO_HOST_CMD Cmd; // [sp+0h] [bp-20h]@1 - - HAL_Status result; - - *(uint32_t *) &Cmd.CmdFmt = result; - Cmd.Arg = a2; - v4 = a3; - v5 = result; - if (!result) - return 3; - if (BlockCnt >= 0x10000) - return HAL_ERR_PARA; - v6 = *(uint32_t *) (result + 16); - if (v6 << 30 || *(uint32_t *) (*(uint32_t *) (result + 16) + 4) << 30) - return 3; - if (*(uint8_t *) (result + 132)) - LODWORD (v4) = a3 >> 9; - while (1) { - while (1) { - HAL_SDIO_HOST_WRITE32(REG_SDIO_HOST_ADMA_SYS_ADDR, v6); // 40058058 = v6; - v40058004 = DATA_BLK_LEN; - if (BlockCnt != 1) - break; - v4005800C = 17; - LABEL_18: result = SdioHostChkCmdInhibitCMD();//result); - if (result) - return result; - result = SdioHostChkDataLineActive(0); - if (result) - return result; - Cmd.CmdFmt = - (SDIO_HOST_CMD_FMT) ((*(uint8_t *) &Cmd.CmdFmt & 0xF4 | 0x3A) - & 0x3F); - v12 = *((uint8_t *) &Cmd.CmdFmt + 1); - *(uint8_t *) (v5 + 128) = 0; - *(uint8_t *) (v5 + 129) = 0; - *((uint8_t *) &Cmd.CmdFmt + 1) = v12 & 0xC0 | 0x11; - Cmd.Arg = v4; - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete((void *) v5);//, v13); - if (result) - goto LABEL_21; - SdioHostGetResponse((void *) v5, *(uint8_t *) &Cmd.CmdFmt & 3); - result = SdioHostChkXferComplete((void *) v5, 0x1388u, v14); - if (!result) - return 0; - if (result != 16) { - if (v40058032 & 0x200) { - v40058032 = 512; - if (HalSdioHostStopTransferRtl8195a((void *) v5, v15)) { - if (ConfigDebugErr & 0x400) { - v11 = "\r[SDIO Err]Stop transmission error!\n"; - goto LABEL_29; - } - } - } - return 238; - } - } - v40058006 = BlockCnta; - v4005800C = 55; - if (BlockCnta <= 1) - goto LABEL_18; - result = SdioHostChkCmdInhibitCMD();//result); - if (result) - return result; - result = SdioHostChkDataLineActive(0); - if (result) - return result; - Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(uint8_t *) &Cmd.CmdFmt & 0xF4 | 0x3A) - & 0x3F); - v7 = *((uint8_t *) &Cmd.CmdFmt + 1); - *(uint8_t *) (v5 + 128) = 0; - *(uint8_t *) (v5 + 129) = 0; - *(uint8_t *) (v5 + 130) = 0; - *((uint8_t *) &Cmd.CmdFmt + 1) = v7 & 0xC0 | 0x12; - Cmd.Arg = v4; - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete((void *) v5);//, v8); - if (!result) { - SdioHostGetResponse((void *) v5, *(uint8_t *) &Cmd.CmdFmt & 3); - result = SdioHostChkXferComplete((void *) v5, 0x1388u, v9); - if (!result) - break; - } - LABEL_21: if (result != 16) - return result; - } - if (!(v40058032 & 0x20)) - return 0; - v10 = ConfigDebugErr << 21; - if (ConfigDebugErr & 0x400) { - v11 = "\r[SDIO Err]Data CRC error!\n"; - LABEL_29: DiagPrintf(v11, v10); - } - return 238; -} -// 23D4: using guessed type int DiagPrintf(const char *, ...); - -//----- (00000B78) -------------------------------------------------------- -HAL_Status HalSdioHostWriteBlocksDmaRtl8195a(IN void *Data, -IN uint64_t WriteAddr, -IN uint32_t BlockCnt) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - PHAL_SDIO_HOST_ADAPTER pSdioHostAdapter = (PHAL_SDIO_HOST_ADAPTER) Data; //int v5; // r6@1 - uint32_t sec_count; // v4; // r4@1 - -//int v6; // r8@3 - char v7; // r3@12 - uint32_t v8; // r1@12 - signed int v9; // r2@13 - char v10; // r3@25 - uint32_t v11; // r1@25 - signed int v12; // r2@28 - uint32_t v13; // r1@29 - SDIO_HOST_CMD Cmd; // [sp+0h] [bp-20h]@1 - HAL_Status result; - - *(uint32_t *) &Cmd.CmdFmt = ?; - Cmd.Arg = a2; - v4 = WriteAddr; -//v5 = result; //pSdioHostAdapter - if (BlockCnt == 0) - return HAL_ERR_PARA; - if (BlockCnt >= 0x10000) - return HAL_ERR_PARA; - ADMA2_DESC_FMT AdmaDescTbl = pSdioHostAdapter->AdmaDescTbl; - if (((uint32_t) AdmaDescTbl & 3) || (AdmaDescTbl.Addr1 & 3)) - return HAL_ERR_PARA; - if (*(uint8_t *) (Data + 132)) - sec_count = WriteAddr >> 9; // - while (!(HAL_SDIO_HOST_READ32(REG_SDIO_HOST_PRESENT_STATE) & 0x100000)) { - result = SdioHostIsTimeout(v8, 0x3F01u); - if (result == HAL_TIMEOUT) { - DBG_SDIO_ERR("card busy TIMEOUT\n"); - return result; - } - } - - while (1) { - - while (1) { - HAL_SDIO_HOST_WRITE32(REG_SDIO_HOST_ADMA_SYS_ADDR, - (uint32_t)AdmaDescTbl); //40058058 = v6; - HAL_SDIO_HOST_WRITE16(REG_SDIO_HOST_BLK_SIZE, DATA_BLK_LEN); // 40058004 = 512; - if (BlockCnt == 1) { - HAL_SDIO_HOST_WRITE16(REG_SDIO_HOST_BLK_CNT, 1); // 4005800C = 1; - goto LABEL_23; - } - HAL_SDIO_HOST_WRITE16(REG_SDIO_HOST_BLK_CNT, BlockCnt); // 40058006 = BlockCnta; - HAL_SDIO_HOST_WRITE16(REG_SDIO_HOST_XFER_MODE, - XFER_MODE_DMA_EN | XFER_MODE_BLK_CNT_EN | XFER_MODE_AUTO_CMD12_EN | XFER_MODE_MULT_SINGLE_BLK); //4005800C = 0x27; - if (BlockCnt > 1) - break; - - LABEL_23: result = SdioHostChkCmdInhibitCMD();//result); - if (result != HAL_OK) - return result; - result = SdioHostChkDataLineActive(0); - if (result != HAL_OK) - return result; - Cmd.CmdFmt = - (SDIO_HOST_CMD_FMT) ((*(uint8_t *) &Cmd.CmdFmt & 0xF4 | 0x3A) - & 0x3F); - v10 = *((uint8_t *) &Cmd.CmdFmt + 1); - *(uint8_t *) (pSdioHostAdapter + 128) = 0; - *(uint8_t *) (pSdioHostAdapter + 129) = 0; - *((uint8_t *) &Cmd.CmdFmt + 1) = v10 & 0xC0 | 0x18; - Cmd.Arg = sec_count; - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete((void *) v5);//, v11); - if (result) - goto LABEL_26; - SdioHostGetResponse((void *) pSdioHostAdapter, - *(uint8_t *) &Cmd.CmdFmt & 3); - if (*(uint32_t *) (pSdioHostAdapter + 20) & 0x4000000) { - LABEL_14: - DBG_SDIO_ERR("Write protect violation!\n"); - return HAL_ERR_PARA; - } - result = SdioHostChkXferComplete((void *) pSdioHostAdapter, 0x1388u, - v12); - if (result != HAL_OK) - return result; - if (result != 16) { - if (HAL_SDIO_HOST_READ16( - REG_SDIO_HOST_ERROR_INT_STATUS) & ERR_INT_STAT_ADMA) { - HAL_SDIO_HOST_WRITE16(REG_SDIO_HOST_ERROR_INT_STATUS, - ERR_INT_STAT_ADMA); // 40058032 = 512; - if (HalSdioHostStopTransferRtl8195a( - (void *) pSdioHostAdapter, v13)) { - DBG_SDIO_ERR("Stop transmission error!\n"); - } - } - return 238; - } - } - result = SdioHostChkCmdInhibitCMD();//result); - if (result != HAL_OK) - return result; - result = SdioHostChkDataLineActive(0); - if (result != HAL_OK) - return result; - Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(uint8_t *) &Cmd.CmdFmt & 0xF4 | 0x3A) - & 0x3F); - v7 = *((uint8_t *) &Cmd.CmdFmt + 1); - *(uint8_t *) (pSdioHostAdapter + 128) = 0; - *(uint8_t *) (pSdioHostAdapter + 129) = 0; - *(uint8_t *) (pSdioHostAdapter + 130) = 0; - *((uint8_t *) &Cmd.CmdFmt + 1) = v7 & 0xC0 | 0x19; - Cmd.Arg = sec_count; - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete((void *) v5);//, v8); - if (!result) { - SdioHostGetResponse((void *) pSdioHostAdapter, - *(uint8_t *) &Cmd.CmdFmt & 3); - if (*(uint32_t *) (pSdioHostAdapter + 20) & 0x4000000) - goto LABEL_14; - result = SdioHostChkXferComplete((void *) pSdioHostAdapter, 0x1F40u, - v9); - if (result != HAL_OK) - break; - } - LABEL_26: if (result != 16) - return result; - } - if (HAL_SDIO_HOST_READ16( - REG_SDIO_HOST_ERROR_INT_STATUS) & ERR_INT_STAT_DATA_CRC) // 40058032 & 0x20) - return HAL_ERR_UNKNOWN; - if (HAL_SDIO_HOST_READ16( - REG_SDIO_HOST_ERROR_INT_STATUS) & ERR_INT_STAT_DATA_TIMEOUT) - result = HAL_TIMEOUT; - else - result = HAL_OK; - return result; -} -// 23D4: using guessed type int DiagPrintf(const char *, ...); - -// 23D4: using guessed type int DiagPrintf(const char *, ...); - -//----- (00000E34) -------------------------------------------------------- -HAL_Status HalSdioHostGetCardStatusRtl8195a(IN void *Data) { - void *v3; // r4@1 - int result; // r0@2 - char v5; // r3@3 - uint32_t v6; // r1@3 - signed int v7; // r5@3 - unsigned int v8; // r3@7 - SDIO_HOST_CMD Cmd; // [sp+0h] [bp-18h]@1 - int v10; // [sp+8h] [bp-10h]@1 - - *(uint32_t *) &Cmd.CmdFmt = Data; - Cmd.Arg = a2; - v10 = a3; - v3 = Data; - if (!Data) - return 3; - result = SdioHostChkCmdInhibitCMD();//(uint32_t) Data); - if (result) - return result; - Cmd.CmdFmt = - (SDIO_HOST_CMD_FMT) ((*(uint8_t *) &Cmd.CmdFmt & 0xF4 | 0x1A) & 0x1F); - v5 = *((uint8_t *) &Cmd.CmdFmt + 1); - *((uint8_t *) v3 + 128) = 0; - *((uint8_t *) &Cmd.CmdFmt + 1) = v5 & 0xC0 | 0xD; - Cmd.Arg = *((uint16_t *) v3 + 67) << 16; - SdioHostSendCmd(&Cmd); - v7 = SdioHostChkCmdComplete(v3);//, v6); - if (v7) - return v7; - SdioHostGetResponse(v3, *(uint8_t *) &Cmd.CmdFmt & 3); - if (*((uint8_t *) v3 + 24) == 13) { - v8 = *((uint32_t *) v3 + 5); - *((uint32_t *) v3 + 10) = v8; - *((uint8_t *) v3 + 131) = (v8 >> 9) & 0xF; - return v7; - } - DBG_SDIO_ERR("Command index error!\n"); - return 238; -} -// 23D4: using guessed type int DiagPrintf(const char *, ...); - -//----- (00000ED0) -------------------------------------------------------- -HAL_Status HalSdioHostInitCardRtl8195a(IN void *Data) { - uint8_t *v3; // r5@1 - int v4; // r0@2 - char v5; // r3@3 - uint32_t v6; // r1@3 - signed int v7; // r4@4 - const char *v8; // r0@6 - int v9; // r0@7 - uint32_t v10; // r1@8 - const char *v11; // r0@11 - int v12; // r3@12 - int v13; // r0@24 - char v14; // r3@25 - uint32_t v15; // r1@25 - signed int v16; // r0@26 - const char *v17; // r0@28 - char v18; // r3@34 - uint32_t v19; // r1@34 - signed int v20; // r0@35 - signed int v21; // r6@35 - uint8_t v22; // cf@36 - char v23; // r3@39 - uint32_t v24; // r1@39 - signed int v25; // r0@40 - const char *v26; // r0@42 - char v27; // r3@48 - uint32_t v28; // r1@48 - const char *v29; // r0@53 - uint32_t v30; // r0@64 - int v31; // r0@64 - char v32; // r3@65 - uint32_t v33; // r1@65 - int v34; // r0@70 - char v35; // r3@71 - uint32_t v36; // r1@71 - uint32_t v37; // r1@81 - int v38; // r2@81 - int v39; // r6@81 - int v40; // r1@82 - const char *v41; // r0@83 - int v42; // r0@87 - uint32_t v43; // r1@87 - int v44; // r2@87 - int v45; // r3@88 - uint32_t v46; // r1@88 - signed int v47; // r0@89 - const char *v48; // r0@91 - char v49; // r3@98 - uint32_t v50; // r1@98 - void *v52; // [sp+0h] [bp-20h]@1 - int v53; // [sp+4h] [bp-1Ch]@1 - int v54; // [sp+8h] [bp-18h]@1 - - v52 = Data; - v53 = a2; - v54 = a3; - v3 = Data; - if (!Data) { - v7 = 3; - goto LABEL_115; - }; - v4 = SdioHostChkCmdInhibitCMD();//(uint32_t) Data); - if (!v4) { - v5 = (char) v52; - v3[128] = 0; - LOBYTE (v52) = v5 & 4; - v53 = 0; - BYTE1(v52) &= 0xC0u; - SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v4 = SdioHostChkCmdComplete(v3);//, v6); - }; - v7 = v4; - if (v4) { - DBG_SDIO_ERR("Reset sd card fail!\n"); - goto LABEL_104; - }; - goto LABEL_115; - - v9 = SdioHostChkCmdInhibitCMD();//0); - if (v9 - || (LOBYTE(v52) = (((uint8_t) v52 & 0xF4 | 0x1A) & 0xDF | 32 * (v7 & 1)) - & 0x3F | ((v7 & 3) << 6), BYTE1(v52) = BYTE1(v52) & 0xC0 - | 8, v3[128] = v7, v53 = 426, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v9 = SdioHostChkCmdComplete(v3);//, - v10)) != 0)) { - v7 = v9; - if (v9) - goto LABEL_22; - } else { - SdioHostGetResponse(v3, (uint8_t) v52 & 3); - if (v3[24] != 8) { - if (ConfigDebugErr & 0x400) { - v11 = "\r[SDIO Err]Command index error!\n" - ); // DBG_SDIO_ERR(" - LABEL_18: DiagPrintf(v11); - goto LABEL_21; - } - goto LABEL_21; - } - v12 = *((uint32_t *) v3 + 5); - if ((uint8_t) v12 != 170) { - DBG_SDIO_ERR("Echo-back of check pattern: %X\n"); - goto LABEL_21; - } - v9 = v12 << 23; - if (!(v12 & 0x100)) { - if (ConfigDebugErr & 0x400) { - v11 = "\r[SDIO Err]Voltage accepted error!\n"; - goto LABEL_18; - } - LABEL_21: v7 = 238; - LABEL_22: if (ConfigDebugErr & 0x400) { - v8 = "\r[SDIO Err]Voltage check fail!\n"; - goto LABEL_104; - } - goto LABEL_115; - } - } - v13 = SdioHostChkCmdInhibitCMD();//v9); - if (v13) - goto LABEL_63; - LOBYTE (v52) = ((uint8_t) v52 & 0xFC | 0x1A) & 0x1F; - v14 = BYTE1(v52) & 0xC0 | 0x37; - v3[128] = v7; - BYTE1 (v52) = v14; - v53 = v7; - SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v13 = SdioHostChkCmdComplete(v3);//, v15); - if (v13) - goto LABEL_63; - v16 = SdioHostGetResponse(v3, (uint8_t) v52 & 3); - if (v3[24] != 55) { - if (ConfigDebugErr & 0x400) // DBG_SDIO_ERR(" - { - v17 = "\r[SDIO Err]Command index error!\n"; - LABEL_32: DiagPrintf(v17); - goto LABEL_57; - } - goto LABEL_57; - }; - if (!(*((uint32_t *) v3 + 5) & 0x20)) { - if (ConfigDebugErr & 0x400) { - v17 = "\r[SDIO Err]ACMD isn't expected!\n"; - goto LABEL_32; - } - LABEL_57: v7 = 238; - goto LABEL_60; - }; - v13 = SdioHostChkCmdInhibitCMD();//v16); - if (v13 - || (LOBYTE(v52) = ((uint8_t) v52 & 0xFC | 2) & 7, v18 = BYTE1(v52) & 0xC0 - | 0x29, v3[128] = v7, BYTE1(v52) = v18, v53 = v7, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v13 = SdioHostChkCmdComplete(v3)) != 0)) { - LABEL_63: v7 = v13; - if (!v13) - goto LABEL_64; - LABEL_60: if (ConfigDebugErr & 0x400) { - v8 = "\r[SDIO Err]Get OCR fail!\n"; - goto LABEL_104; - } - goto LABEL_115; - } - v20 = SdioHostGetResponse(v3, (uint8_t) v52 & 3); - v21 = 100; - *((uint32_t *) v3 + 9) = *((uint32_t *) v3 + 5) & 0xFFFFFF; - while (1) { - v22 = __CFADD__(v21--, -1); - if (!v22) - goto LABEL_51; - v13 = SdioHostChkCmdInhibitCMD();//v20); - if (v13) - goto LABEL_63; - LOBYTE (v52) = ((uint8_t) v52 & 0xFC | 0x1A) & 0x1F; - v23 = BYTE1(v52); - v3[128] = 0; - v53 = 0; - BYTE1 (v52) = v23 & 0xC0 | 0x37; - SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v13 = SdioHostChkCmdComplete(v3);//, v24); - if (v13) - goto LABEL_63; - v25 = SdioHostGetResponse(v3, (uint8_t) v52 & 3); - if (v3[24] != 55) { - if (ConfigDebugErr & 0x400) { - v26 = "\r[SDIO Err]Command index error!\n"; - LABEL_46: DiagPrintf(v26); - goto LABEL_62; - } - goto LABEL_62; - } - if (!(*((uint32_t *) v3 + 5) & 0x20)) { - if (ConfigDebugErr & 0x400) { - v26 = "\r[SDIO Err]ACMD isn't expected!\n"; - goto LABEL_46; - } - LABEL_62: v13 = 238; - goto LABEL_63; - } - v13 = SdioHostChkCmdInhibitCMD();//v25); - if (v13) - goto LABEL_63; - LOBYTE (v52) = ((uint8_t) v52 & 0xFC | 2) & 7; - v27 = BYTE1(v52); - v3[128] = 0; - BYTE1 (v52) = v27 & 0xC0 | 0x29; - v53 = 1077673984; - SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v13 = SdioHostChkCmdComplete(v3);//, v28); - if (v13) - goto LABEL_63; - SdioHostGetResponse(v3, (uint8_t) v52 & 3); - if (*((uint32_t *) v3 + 5) < 0) - break; - v20 = HalDelayUs(10000); - }; - if (!v21) { - v7 = 2; - goto LABEL_60; - }; - LABEL_51: if (*((uint32_t *) v3 + 5) & 0x40000000) { - v3[132] = 1; - if (!(ConfigDebugInfo & 0x400)) - goto LABEL_64; - v29 = "\r[SDIO Inf]This is a SDHC card\n"; - } else { - v3[132] = 0; - if (!(ConfigDebugInfo & 0x400)) - goto LABEL_64; - v29 = "\r[SDIO Inf]This is a SDSC card\n"; - } - DiagPrintf(v29); - LABEL_64: v30 = HalDelayUs(20); - v31 = SdioHostChkCmdInhibitCMD();//v30); - if (v31 - || (LOBYTE(v52) = ((uint8_t) v52 & 0xF4 | 9) & 0xF, v32 = BYTE1(v52) - & 0xC0 | 2, v3[128] = v7, BYTE1(v52) = v32, v53 = v7, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v31 = SdioHostChkCmdComplete(v3)) != 0)) { - v7 = v31; - if (!v31) - goto LABEL_70; - if (ConfigDebugErr & 0x400) { - v8 = "\r[SDIO Err]Get CID fail!\n"; - goto LABEL_104; - } - goto LABEL_115; - } - v31 = SdioHostGetResponse(v3, (uint8_t) v52 & 3); - LABEL_70: v34 = SdioHostChkCmdInhibitCMD();//v31); - if (v34 - || (LOBYTE(v52) = ((uint8_t) v52 & 0xF4 | 0x1A) & 0x1F, v35 = BYTE1(v52) - & 0xC0 | 3, v3[128] = v7, BYTE1(v52) = v35, v53 = v7, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v34 = SdioHostChkCmdComplete(v3)) != 0)) { - v7 = v34; - if (v34) - goto LABEL_79; - } else { - SdioHostGetResponse(v3, (uint8_t) v52 & 3); - if (v3[24] != 3) { - if (ConfigDebugErr & 0x400) - DiagPrintf("\r[SDIO Err]Command index error!\n"); - v7 = 238; - LABEL_79: if (ConfigDebugErr & 0x400) { - v8 = "\r[SDIO Err]Get RCA fail!\n"; - goto LABEL_104; - } - goto LABEL_115; - } - *((uint16_t *) v3 + 67) = *((uint16_t *) v3 + 11); - } - SdioHostSdClkCtrl(v3, 1, BASE_CLK_DIVIDED_BY_2); - v39 = SdioHostGetCSD(v3, v37); - if (v39) { - v40 = ConfigDebugErr << 21; - if (ConfigDebugErr & 0x400) { - v41 = "\r[SDIO Err]Get CSD fail!\n"; - goto LABEL_108; - } - LABEL_113: v7 = v39; - goto LABEL_115; - } - v39 = SdioHostCardSelection(v3, 1, v38); - if (v39) { - if (!(ConfigDebugErr & 0x400)) - goto LABEL_113; - v41 = "\r[SDIO Err]Select sd card fail!\n"; - LABEL_108: DiagPrintf(v41, v40); - goto LABEL_113; - } - v42 = SdioHostChkCmdInhibitCMD();//0); - if (v42) - goto LABEL_120; - LOBYTE (v52) = ((uint8_t) v52 & 0xFC | 0x1A) & 0x1F; - BYTE1 (v52) = BYTE1(v52) & 0xC0 | 0x37; - v45 = *((uint16_t *) v3 + 67) << 16; - v3[128] = v7; - v53 = v45; - SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v42 = SdioHostChkCmdComplete(v3);//, v46); - if (v42) - goto LABEL_120; - v47 = SdioHostGetResponse(v3, (uint8_t) v52 & 3); - if (v3[24] != 55) - goto LABEL_90; - if (!(*((uint32_t *) v3 + 5) & 0x20)) { - if (ConfigDebugErr & 0x400) { - v48 = "\r[SDIO Err]ACMD isn't expected!\n"; - LABEL_95: DiagPrintf(v48); - } - goto LABEL_96; - } - v42 = SdioHostChkCmdInhibitCMD();//v47); - if (v42 - || (LOBYTE(v52) = ((uint8_t) v52 & 0xFC | 0x1A) & 0x1F, v49 = BYTE1(v52) - & 0xC0 | 6, v3[128] = v7, BYTE1(v52) = v49, v53 = 2, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v42 = SdioHostChkCmdComplete(v3)) != 0)) { - LABEL_120: v7 = v42; - if (v42) - goto LABEL_102; - LABEL_105: v39 = HalSdioHostGetCardStatusRtl8195a(v3, v43, v44); - if (v39) { - v40 = ConfigDebugErr << 21; - if (!(ConfigDebugErr & 0x400)) - goto LABEL_113; - v41 = "\r[SDIO Err]Get sd card current state fail!\n"; - goto LABEL_108; - } - if (v3[131] != 4) { - DBG_SDIO_ERR( - "The card isn't in TRANSFER state! (Current state: %d)\n", - v3[131], ConfigDebugErr << 21); - v7 = 238; - goto LABEL_115; - } - } else { - SdioHostGetResponse(v3, (uint8_t) v52 & 3); - if (v3[24] == 6) { - v44 = v40058028 | 2; - v40058028 |= 2u; - goto LABEL_105; - } - LABEL_90: if (ConfigDebugErr & 0x400) { - v48 = "\r[SDIO Err]Command index error!\n"; - goto LABEL_95; - } - LABEL_96: v7 = 238; - LABEL_102: if (ConfigDebugErr & 0x400) { - v8 = "\r[SDIO Err]Set bus width fail!\n"; - LABEL_104: DiagPrintf(v8); - } - LABEL_115: - DBG_SDIO_ERR("SD card initialization FAIL!\n"); - } - return v7; -} -// 23D4: using guessed type int DiagPrintf(const char *, ...); -// 23F0: using guessed type int HalDelayUs(uint32_t); - -//----- (000014E8) -------------------------------------------------------- -HAL_Status HalSdioHostGetSdStatusRtl8195a(IN void *Data) { - int v3; // r3@1 - char *v4; // r4@1 - char v5; // r0@3 - int v6; // r0@3 - int result; // r0@3 - int v8; // r3@4 - uint32_t v9; // r1@4 - const char *v10; // r0@7 - int v11; // r3@8 - char v12; // r3@13 - uint32_t v13; // r1@13 - signed int v14; // r2@14 - signed int v15; // r0@14 - uint32_t v16; // r1@14 - SDIO_HOST_CMD Cmd; // [sp+0h] [bp-18h]@1 - int v18; // [sp+8h] [bp-10h]@1 - - v3 = *((uint32_t *) Data + 4); - *(uint32_t *) &Cmd.CmdFmt = Data; - Cmd.Arg = a2; - v18 = a3; - v4 = (char *) Data; - if (!v3 || v3 & 3) { - result = 3; - } else { - v40058058 = v3; - v40058004 = 64; - v4005800C = 17; - v5 = *(uint8_t *) v3; - *(uint16_t *) (v3 + 2) = 64; - v6 = (uint8_t) ((v5 | 3) & 0xEB) | 0x20; - *(uint8_t *) v3 = v6; - *(uint32_t *) (v3 + 4) = v4 + 48; - result = SdioHostChkCmdInhibitCMD();//v6); - if (!result) { - Cmd.CmdFmt = - (SDIO_HOST_CMD_FMT) ((*(uint8_t *) &Cmd.CmdFmt & 0xFC | 0x1A) - & 0x1F); - *((uint8_t *) &Cmd.CmdFmt + 1) = *((uint8_t *) &Cmd.CmdFmt + 1) & 0xC0 | 0x37; - v8 = *((uint16_t *) v4 + 67); - v4[128] = 0; - Cmd.Arg = v8 << 16; - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v4); - if (!result) { - SdioHostGetResponse(v4, *(uint8_t *) &Cmd.CmdFmt & 3); - if (v4[24] != 55) { - if (ConfigDebugErr & 0x400) { - v10 = "\r[SDIO Err]Command index error!\n"; - LABEL_20: DiagPrintf(v10); - return 238; - } - return 238; - } - v11 = *((uint32_t *) v4 + 5); - if (!(v11 & 0x20)) { - if (ConfigDebugErr & 0x400) { - v10 = "\r[SDIO Err]ACMD isn't expected!\n"; - goto LABEL_20; - } - return 238; - } - result = SdioHostChkCmdInhibitCMD();//*((uint32_t *) v4 + 5) << 26); - if (!result) { - result = SdioHostChkDataLineActive(0); - if (!result) { - Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(uint8_t *) &Cmd.CmdFmt - & 0xFC | 0x3A) & 0x3F); - v12 = *((uint8_t *) &Cmd.CmdFmt + 1); - v4[128] = 0; - v4[129] = 0; - Cmd.Arg = 0; - *((uint8_t *) &Cmd.CmdFmt + 1) = v12 & 0xC0 | 0xD; - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v4);//, v13); - if (!result) { - SdioHostGetResponse(v4, *(uint8_t *) &Cmd.CmdFmt & 3); - v15 = SdioHostChkXferComplete(v4, 0x1388u, v14); - if (v15) { - if (v15 == 16) - return 238; - if (!(v40058032 & 0x200)) - return 238; - v40058032 = 512; - if (!HalSdioHostStopTransferRtl8195a(v4, v16) - || !(ConfigDebugErr & 0x400)) - return 238; - v10 = "\r[SDIO Err]Stop transmission error!\n"; - goto LABEL_20; - } - result = 0; - } - } - } - } - } - } - return result; -} -// 23D4: using guessed type int DiagPrintf(const char *, ...); - -//----- (00001668) -------------------------------------------------------- -// SD_CLK_FREQUENCY Frequency -HAL_Status HalSdioHostChangeSdClockRtl8195a(IN void *Data, IN uint8_t Frequency) { - PHAL_SDIO_HOST_ADAPTER pSdioHostAdapter = (PHAL_SDIO_HOST_ADAPTER) Data; // v2 = Data; uint8_t * v2; // r5@1 - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status ret = HAL_ERR_PARA; // int v3; // r4@6 - int v4; // r2@8 - int v5; // r0@10 - int v6; // r0@10 - char v7; // r3@11 - uint32_t v8; // r1@11 - signed int v9; // r0@12 - const char *v10; // r0@14 - char v11; // r3@22 - uint32_t v12; // r1@22 - signed int v13; // r2@23 - signed int v14; // r0@23 - uint32_t v15; // r1@25 - int v16; // r0@32 - int v17; // r0@34 - int v18; // r0@36 - const char *v19; // r0@40 - uint8_t Divisor; // int v20; // r2@52 - char v22; // SDIO_HOST_CMD [sp+0h] [bp-58h]@11 - char v23; // [sp+1h] [bp-57h]@11 - int v24; // [sp+4h] [bp-54h]@11 - - uint8_t StatusData[64]; // [sp+8h] [bp-50h]@8 - - - if (!psha || Frequency > SD_CLK_41_6MHZ) - return ret; - if (psha->CurrSdClk == Frequency) { - DBG_SDIO_WARN("Current SDCLK frequency is already the specified value...\n"); - ret = HAL_OK; - return ret; - } - if (Frequency != SD_CLK_41_6MHZ) { - if (Frequency == SD_CLK_10_4MHZ) - Divisor = BASE_CLK_DIVIDED_BY_4; // 10.4 MHz - else if (Frequency == SD_CLK_20_8MHZ) - Divisor = BASE_CLK_DIVIDED_BY_2; // 20.8 MHz - else if (Frequency != SD_CLK_5_2MHZ) { - DBG_SDIO_ERR("Unsupported SDCLK frequency!\n"); - return ret; - } - Divisor = BASE_CLK_DIVIDED_BY_8; // 5.2 MHZ - } - ret = SdioHostSdClkCtrl(psha, 1, Divisor); - if (ret == HAL_OK) return ret; - DBG_SDIO_ERR("Host changes clock fail!\n"); - return ret; - - *(uint32_t *) StatusData = 0; - *(uint32_t *) &StatusData[4] = 0; - - PADMA2_DESC_FMT pAdmaDescTbl = psha->AdmaDescTbl; - if (pAdmaDescTbl == NULL || ((uint32)(pAdmaDescTbl) & 3)) { - ret = HAL_ERR_PARA; - return ret; - } - HAL_SDIOH_REG32(REG_SDIO_HOST_ADMA_SYS_ADDR) = psha->AdmaDescTbl; // v40058058 = v4; - HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_SIZE) = 8; // v40058004 = 8; - HAL_SDIOH_REG16(REG_SDIO_HOST_XFER_MODE) = XFER_MODE_DMA_EN | XFER_MODE_DATA_XFER_DIR; // v4005800C = 17; - // v5 = (uint8_t) ((*(uint8_t *) v4 | 3) & 0xEB) | 0x20; - // *(uint8_t *) v4 = v5; - pAdmaDescTbl->Attrib1.Int = 0; - pAdmaDescTbl->Attrib1.Act1 = 1; - pAdmaDescTbl->Len1 = 8; // *(uint16_t *) (v4 + 2) = 8; - pAdmaDescTbl->Addr2 = &StatusData; // *(uint32_t *) (v4 + 4) = StatusData; - ret = SdioHostChkCmdInhibitCMD();//v5); - if (ret != HAL_OK) return ret; - SDIO_HOST_CMD sdhcmd; - sdhcmd.CmdFmt.CmdCrcChkEn = 1; // v22 = (v22 & 0xF4 | 0x1A) & 0x1F; - sdhcmd.CmdFmt.CmdIdx = 0x37; // v23 = v7 & 0xC0 | 0x37; - pSdioHostAdapter->CmdCompleteFlg = 0; // v2[128] = 0; - sdhcmd.Arg = pSdioHostAdapter->Csd[?] << 16; // v24 = *((uint16_t *) v2 + 67) << 16; - SdioHostSendCmd((SDIO_HOST_CMD *) &sdhcmd); - ret = SdioHostChkCmdComplete(psha);//, v8); - if (ret != HAL_OK) return ret; - v9 = SdioHostGetResponse(psha, v22 & 3); - if (v2[24] != 55) { - if (!(ConfigDebugErr & 0x400)) - return 238; - v10 = "\r[SDIO Err]Command index error!\n"; - LABEL_15: DiagPrintf(v10); - return 238; - } - if (!(*((uint32_t *) v2 + 5) & 0x20)) { - if (!(ConfigDebugErr & 0x400)) - return 238; - v10 = "\r[SDIO Err]ACMD isn't expected!\n"; - goto LABEL_15; - } - v6 = SdioHostChkCmdInhibitCMD();//v9); - if (v6 || (v6 = SdioHostChkDataLineActive(0)) != 0 - || (v22 = (v22 & 0xF4 | 0x3A) & 0x3F, v11 = v23, psha v2[128] = 0, v2[129] = - 0, v24 = 0, v23 = v11 & 0xC0 | 0x33, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v22), (v6 = SdioHostChkCmdComplete(psha)) != 0)) { - LABEL_70: v3 = v6; - if (v6) - return v3; - } else { - SdioHostGetResponse(v2, v22 & 3); - v14 = SdioHostChkXferComplete(psha, 0x1388u, v13); - if (v14) { - if (v14 == 16) - return 238; - v15 = v40058032 << 22; - if (!(v40058032 & 0x200)) - return 238; - v40058032 = 512; - if (!HalSdioHostStopTransferRtl8195a(psha, v15) - || !(ConfigDebugErr & 0x400)) - return 238; - v10 = "\r[SDIO Err]Stop transmission error!\n"; - goto LABEL_15; - } - v3 = 0; - *((uint16_t *) v2 + 68) = StatusData[0] & 0xF; - } - if (*((uint16_t *) v2 + 68)) { - v16 = SdioHostSwitchFunction(psha, 0, 15, (int) StatusData, - *(uint8_t **) &v22); - if (v16) - return v16; - if (StatusData[13] & 2) { - v17 = SdioHostSwitchFunction(psha, v16, 1, (int) StatusData, - *(uint8_t **) &v22); - if (v17) - return v17; - if ((StatusData[16] & 0xF) != 1) { - if (!(ConfigDebugErr & 0x400)) - return 238; - v10 = "\r[SDIO Err]\"High-Speed\" can't be switched!\n"; - goto LABEL_15; - } - v18 = SdioHostSwitchFunction(v2, 1, 1, (int) StatusData, - *(uint8_t **) &v22); - if (v18) - return v18; - if ((StatusData[16] & 0xF) != 1) { - if (!(ConfigDebugErr & 0x400)) - return 238; - v10 = "\r[SDIO Err]Card changes to High-Speed fail!\n"; - goto LABEL_15; - } - v3 = SdioHostSdClkCtrl(psha, 1, v18); - if (v3) { - if (!(ConfigDebugErr & 0x400)) - return v3; - v19 = "\r[SDIO Err]Host changes to High-Speed fail!\n"; - LABEL_62: DiagPrintf(v19); - return v3; - } - } else if (ConfigDebugInfo & 0x400) { -// DBG_SDIO_WARN(" - v19 = - "\r[SDIO Inf]This card doesn't support \"High-Speed Function\" and can't change to high-speed...\n"; - goto LABEL_62; - } - } else if (ConfigDebugInfo & 0x400) { - v19 = - "\r[SDIO Inf]This card doesn't support CMD6 and can't change to high-speed...\n"; - goto LABEL_62; - } - return 0; -} -// 23D4: using guessed type int DiagPrintf(const char *, ...); - -//----- (0000194C) -------------------------------------------------------- -HAL_Status HalSdioHostEraseRtl8195a(IN void *Data, IN uint64_t StartAddr, -IN uint64_t EndAddr) { - uint32_t v3; // r4@1 - uint32_t v4; // r6@1 - int v5; // r8@1 - int result; // r0@4 - char v7; // r3@5 - uint32_t v8; // r1@5 - signed int v9; // r0@6 - char v10; // r3@11 - uint32_t v11; // r1@11 - signed int v12; // r0@12 - char v13; // r3@15 - uint32_t v14; // r1@15 - signed int v15; // r2@15 - SDIO_HOST_CMD v16; // [sp+0h] [bp-20h]@1 - - v16 = (SDIO_HOST_CMD) EndAddr; - v3 = EndAddra; - v4 = a2; - v5 = EndAddr; - if (!(uint32_t) EndAddr) - return 3; - if (*(uint8_t *) (EndAddr + 132)) { - v4 = a2 >> 9; - v3 = EndAddra >> 9; - } - result = SdioHostChkCmdInhibitCMD();//EndAddr); - if (!result) { - v16.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(uint8_t *) &v16.CmdFmt & 0xFC | 0x1A) - & 0x1F); - v7 = *((uint8_t *) &v16.CmdFmt + 1); - *(uint8_t *) (v5 + 128) = 0; - *((uint8_t *) &v16.CmdFmt + 1) = v7 & 0xC0 | 0x20; - v16.Arg = v4; - SdioHostSendCmd(&v16); - result = SdioHostChkCmdComplete((void *) v5); - if (!result) { - v9 = SdioHostGetResponse((void *) v5, *(uint8_t *) &v16.CmdFmt & 3); - if (*(uint8_t *) (v5 + 24) != 32) - goto LABEL_20; - result = SdioHostChkCmdInhibitCMD();//v9); - if (result) - return result; - v16.CmdFmt = - (SDIO_HOST_CMD_FMT) ((*(uint8_t *) &v16.CmdFmt & 0xFC | 0x1A) - & 0x1F); - v10 = *((uint8_t *) &v16.CmdFmt + 1); - *(uint8_t *) (v5 + 128) = 0; - *((uint8_t *) &v16.CmdFmt + 1) = v10 & 0xC0 | 0x21; - v16.Arg = v3; - SdioHostSendCmd(&v16); - result = SdioHostChkCmdComplete((void *) v5); - if (result) - return result; - v12 = SdioHostGetResponse((void *) v5, *(uint8_t *) &v16.CmdFmt & 3); - if (*(uint8_t *) (v5 + 24) != 33) { - LABEL_20: - DBG_SDIO_ERR("Command index error!\n"); - result = 238; - } else { - result = SdioHostChkCmdInhibitCMD();//v12); - if (!result) { - result = SdioHostChkCmdInhibitDAT(0); - if (!result) { - v16.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(uint8_t *) &v16.CmdFmt - | 0x1B) & 0x1F); - v13 = *((uint8_t *) &v16.CmdFmt + 1); - *(uint8_t *) (v5 + 128) = 0; - *(uint8_t *) (v5 + 129) = 0; - v16.Arg = 0; - *((uint8_t *) &v16.CmdFmt + 1) = v13 & 0xC0 | 0x26; - SdioHostSendCmd(&v16); - result = SdioHostChkCmdComplete((void *) v5); - if (!result) - result = SdioHostChkXferComplete((void *) v5, - 0x1388u, v15); - } - } - } - } - } - return result; -} -// 23D4: using guessed type int DiagPrintf(const char *, ...); - -//----- (00001AA8) -------------------------------------------------------- -HAL_Status HalSdioHostGetWriteProtectRtl8195a(IN void *Data) { - void *v3; // r4@1 - uint32_t v4; // r1@2 - int v5; // r2@2 - int v6; // r5@2 - signed int result; // r0@6 - int v8; // r2@10 - const char *v9; // r0@13 - - v3 = Data; - if (!Data) - return 3; - v6 = HalSdioHostGetCardStatusRtl8195a(Data, a2, a3); - if (v6) { - if (!(ConfigDebugErr & 0x400)) - return v6; - v9 = "\r[SDIO Err]Get card status fail!\n"; - LABEL_16: DiagPrintf(v9); - return v6; - } - if (*((uint8_t *) v3 + 131) == 3) { - LABEL_10: v6 = SdioHostGetCSD(v3, v4); - if (!v6) { - *((uint32_t *) v3 + 11) = ((unsigned int) *((uint8_t *) v3 + 126) >> 4) & 1; - return SdioHostCardSelection(v3, 1, v8); - } - if (!(ConfigDebugErr & 0x400)) - return v6; - v9 = "\r[SDIO Err]Get CSD fail!\n"; - goto LABEL_16; - } - if (*((uint8_t *) v3 + 131) == 4 || *((uint8_t *) v3 + 131) == 5) { - result = SdioHostCardSelection(v3, 0, v5); - if (result) - return result; - goto LABEL_10; - } - if (ConfigDebugErr & 0x400) - DiagPrintf("\r[SDIO Err]Wrong card state!\n", ConfigDebugErr << 21); - return 238; -} -// 23D4: using guessed type int DiagPrintf(const char *, ...); - -//----- (00001B48) -------------------------------------------------------- -HAL_Status HalSdioHostSetWriteProtectRtl8195a(IN void *Data, IN uint8_t Setting) { - int v2; // r3@1 - uint8_t *v3; // r4@1 - int v4; // r2@2 - uint8_t v5; // r2@5 - int v6; // r1@7 - unsigned int v7; // r2@7 - signed int v8; // r0@8 - uint8_t v9; // cf@11 - char v10; // r1@13 - int result; // r0@13 - char v12; // r3@15 - uint32_t v13; // r1@15 - signed int v14; // r2@16 - uint32_t v15; // r1@20 - char v16; // [sp+0h] [bp-30h]@15 - char v17; // [sp+1h] [bp-2Fh]@15 - HAL_Status ret; // [sp+4h] [bp-2Ch]@15 - uint8_t tmp[16]; // [sp+8h] [bp-28h]@3 - - v2 = *((uint32_t *) Data + 4); - v3 = Data; - if (!v2) - return 3; - v4 = *((uint32_t *) Data + 4) & 3; - if (v2 & 3) - return 3; - do { - tmp[v4] = *((uint8_t *) Data + v4 + 112); - ++v4; - } while (v4 != 15); - if (Setting == 1) - v5 = tmp[14] | 0x10; - else - v5 = tmp[14] & 0xEF; - v6 = 0; - tmp[14] = v5; - LOBYTE (v7) = 0; - do { - v8 = 7; - do { - v7 = (uint8_t) (2 * v7); - if ((((signed int) tmp[v6] >> v8) & 1) != v7 >> 7) - LOBYTE (v7) = v7 ^ 0x89; - v9 = __CFADD__(v8--, -1); - } while (v9); - ++v6; - } while (v6 != 15); - tmp[15] = 2 * v7 | 1; - v40058058 = v2; - v40058004 = 16; - v4005800C = 1; - v10 = *(uint8_t *) v2; - *(uint16_t *) (v2 + 2) = 16; - *(uint8_t *) v2 = v10 & 0xC8 | 0x23; - *(uint32_t *) (v2 + 4) = tmp; - result = SdioHostChkCmdInhibitCMD();//1u); - if (!result) { - result = SdioHostChkDataLineActive(0); - if (!result) { - v16 = (v16 & 0xF4 | 0x3A) & 0x3F; - v12 = v17; - v3[128] = 0; - v3[129] = 0; - ret = 0; - v17 = v12 & 0xC0 | 0x1B; - SdioHostSendCmd((SDIO_HOST_CMD *) &v16); - result = SdioHostChkCmdComplete(v3); - if (!result) { - SdioHostGetResponse(v3, v16 & 3); - if (*((uint32_t *) v3 + 5) & 0x4000000) { - DBG_SDIO_ERR("Write protect violation!\n", - ConfigDebugErr << 21); - return 3; - } - result = SdioHostChkXferComplete(v3, 0x1388u, v14); - if (result) { - if (result != 16) { - if (v40058032 & 0x200) { - v40058032 = 512; - if (HalSdioHostStopTransferRtl8195a(v3, v15)) { - DBG_SDIO_ERR("Stop transmission error!\n"); - } - } - } - result = 238; - } - } - } - } - return result; -} - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host.h deleted file mode 100644 index 014a6b0..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host.h +++ /dev/null @@ -1,809 +0,0 @@ - /* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#ifndef _RTL8195A_SDIO_HOST_H_ -#define _RTL8195A_SDIO_HOST_H_ - -#include "hal_api.h" -#include "osdep_api.h" - - - -#define HAL_SDIO_HOST_READ32(addr) HAL_READ32(SDIO_HOST_REG_BASE, addr) -#define HAL_SDIO_HOST_WRITE32(addr, value) HAL_WRITE32(SDIO_HOST_REG_BASE, addr, value) -#define HAL_SDIO_HOST_READ16(addr) HAL_READ16(SDIO_HOST_REG_BASE, addr) -#define HAL_SDIO_HOST_WRITE16(addr, value) HAL_WRITE16(SDIO_HOST_REG_BASE, addr, value) -#define HAL_SDIO_HOST_READ8(addr) HAL_READ8(SDIO_HOST_REG_BASE, addr) -#define HAL_SDIO_HOST_WRITE8(addr, value) HAL_WRITE8(SDIO_HOST_REG_BASE, addr, value) - -/* =============== Register Offset Definition =============== */ -#define REG_SDIO_HOST_SDMA_SYS_ADDR 0x00 // 4byte -#define REG_SDIO_HOST_BLK_SIZE 0x04 // 2byte -#define REG_SDIO_HOST_BLK_CNT 0x06 // 2byte -#define REG_SDIO_HOST_ARG 0x08 // 4byte -#define REG_SDIO_HOST_XFER_MODE 0x0C // 2byte -#define REG_SDIO_HOST_CMD 0x0E // 2byte -#define REG_SDIO_HOST_RSP0 0x10 // 4byte -#define REG_SDIO_HOST_RSP2 0x14 // 4byte -#define REG_SDIO_HOST_RSP4 0x18 // 4byte -#define REG_SDIO_HOST_RSP6 0x1C // 4byte -#define REG_SDIO_HOST_BUF_DATA_PORT 0x20 // 4byte -#define REG_SDIO_HOST_PRESENT_STATE 0x24 // 4byte -#define REG_SDIO_HOST_HOST_CTRL 0x28 // 1byte -#define REG_SDIO_HOST_PWR_CTRL 0x29 // 1byte -#define REG_SDIO_HOST_BLK_GAP_CTRL 0x2A // 1byte -#define REG_SDIO_HOST_WAKEUP_CTRL 0x2B // 1byte -#define REG_SDIO_HOST_CLK_CTRL 0x2C // 2byte -#define REG_SDIO_HOST_TIMEOUT_CTRL 0x2E // 1byte -#define REG_SDIO_HOST_SW_RESET 0x2F // 1byte -#define REG_SDIO_HOST_NORMAL_INT_STATUS 0x30 // 2byte -#define REG_SDIO_HOST_ERROR_INT_STATUS 0x32 // 2byte -#define REG_SDIO_HOST_NORMAL_INT_STATUS_EN 0x34 // 2byte -#define REG_SDIO_HOST_ERROR_INT_STATUS_EN 0x36 // 2byte -#define REG_SDIO_HOST_NORMAL_INT_SIG_EN 0x38 // 2byte -#define REG_SDIO_HOST_ERROR_INT_SIG_EN 0x3A // 2byte -#define REG_SDIO_HOST_CAPABILITIES 0x40 // 8byte -#define REG_SDIO_HOST_ADMA_SYS_ADDR 0x58 // 8byte -/* =============================================== */ - -/* Block Count Register (0x06) */ -#define BLK_CNT_REG_MAX 0xFFFF // 65535 blocks - -/* Transfer Mode Register (0x0C) */ -#define XFER_MODE_DMA_EN BIT0 -#define XFER_MODE_BLK_CNT_EN BIT1 -#define XFER_MODE_AUTO_CMD12_EN BIT2 -#define XFER_MODE_DATA_XFER_DIR BIT4 -#define XFER_MODE_MULT_SINGLE_BLK BIT5 - -/* Present State Register (0x24) */ -#define PRES_STATE_CMD_INHIBIT_CMD BIT0 -#define PRES_STATE_CMD_INHIBIT_DAT BIT1 -#define PRES_STATE_DAT_LINE_ACTIVE BIT2 -#define PRES_STATE_CARD_INSERTED BIT16 -#define PRES_STATE_DAT0_SIGNAL_LEVEL BIT20 - -/* Power Control Register (0x29) */ -#define PWR_CTRL_SD_BUS_PWR BIT0 - -/* Clock Control Register (0x2C) */ -#define CLK_CTRL_INTERAL_CLK_EN BIT0 -#define CLK_CTRL_INTERAL_CLK_STABLE BIT1 -#define CLK_CTRL_SD_CLK_EN BIT2 - -/* Software Reset Register (0x2F) */ -#define SW_RESET_FOR_ALL BIT0 -#define SW_RESET_FOR_CMD BIT1 -#define SW_RESET_FOR_DAT BIT2 - -/* Normal Interrupt Status (0x30) */ -#define NOR_INT_STAT_CMD_COMP BIT0 -#define NOR_INT_STAT_XFER_COMP BIT1 -#define NOR_INT_STAT_BLK_GAP_EVENT BIT2 -#define NOR_INT_STAT_DMA_INT BIT3 -#define NOR_INT_STAT_BUF_WR_RDY BIT4 -#define NOR_INT_STAT_BUF_RD_RDY BIT5 -#define NOR_INT_STAT_CARD_INSERT BIT6 -#define NOR_INT_STAT_CARD_REMOVAL BIT7 -#define NOR_INT_STAT_CARD_INT BIT8 -#define NOR_INT_STAT_ERR_INT BIT15 - -/* Error Interrupt Status (0x32) */ -#define ERR_INT_STAT_CMD_TIMEOUT BIT0 -#define ERR_INT_STAT_CMD_CRC BIT1 -#define ERR_INT_STAT_CMD_END_BIT BIT2 -#define ERR_INT_STAT_CMD_IDX BIT3 -#define ERR_INT_STAT_DATA_TIMEOUT BIT4 -#define ERR_INT_STAT_DATA_CRC BIT5 -#define ERR_INT_STAT_DATA_END_BIT BIT6 -#define ERR_INT_STAT_CUR_LIMIT BIT7 -#define ERR_INT_STAT_AUTO_CMD12 BIT8 -#define ERR_INT_STAT_ADMA BIT9 - -/* Normal Interrupt Status Enable (0x34) */ -#define NOR_INT_STAT_EN_CMD_COMP BIT0 -#define NOR_INT_STAT_EN_XFER_COMP BIT1 -#define NOR_INT_STAT_EN_BLK_GAP_EVENT BIT2 -#define NOR_INT_STAT_EN_DMA_INT BIT3 -#define NOR_INT_STAT_EN_BUF_WR_RDY BIT4 -#define NOR_INT_STAT_EN_BUF_RD_RDY BIT5 -#define NOR_INT_STAT_EN_CARD_INSERT BIT6 -#define NOR_INT_STAT_EN_CARD_REMOVAL BIT7 -#define NOR_INT_STAT_EN_CARD_INT BIT8 - -/* Error Interrupt Status Enable (0x36) */ -#define ERR_INT_STAT_EN_CMD_TIMEOUT BIT0 -#define ERR_INT_STAT_EN_CMD_CRC BIT1 -#define ERR_INT_STAT_EN_CMD_END_BIT BIT2 -#define ERR_INT_STAT_EN_CMD_IDX BIT3 -#define ERR_INT_STAT_EN_DATA_TIMEOUT BIT4 -#define ERR_INT_STAT_EN_DATA_CRC BIT5 -#define ERR_INT_STAT_EN_DATA_END_BIT BIT6 -#define ERR_INT_STAT_EN_CUR_LIMIT BIT7 -#define ERR_INT_STAT_EN_AUTO_CMD BIT8 -#define ERR_INT_STAT_EN_ADMA BIT9 - -/* Normal Interrupt Signal Enable (0x38) */ -#define NOR_INT_SIG_EN_CMD_COMP BIT0 -#define NOR_INT_SIG_EN_XFER_COMP BIT1 -#define NOR_INT_SIG_EN_BLK_GAP_EVENT BIT2 -#define NOR_INT_SIG_EN_DMA_INT BIT3 -#define NOR_INT_SIG_EN_BUF_WR_RDY BIT4 -#define NOR_INT_SIG_EN_BUF_RD_RDY BIT5 -#define NOR_INT_SIG_EN_CARD_INSERT BIT6 -#define NOR_INT_SIG_EN_CARD_REMOVAL BIT7 -#define NOR_INT_SIG_EN_CARD_INT BIT8 - -/* Error Interrupt Signal Enable (0x3A) */ -#define ERR_INT_SIG_EN_CMD_TIMEOUT BIT0 -#define ERR_INT_SIG_EN_CMD_CRC BIT1 -#define ERR_INT_SIG_EN_CMD_END_BIT BIT2 -#define ERR_INT_SIG_EN_CMD_IDX BIT3 -#define ERR_INT_SIG_EN_DATA_TIMEOUT BIT4 -#define ERR_INT_SIG_EN_DATA_CRC BIT5 -#define ERR_INT_SIG_EN_DATA_END_BIT BIT6 -#define ERR_INT_SIG_EN_CUR_LIMIT BIT7 -#define ERR_INT_SIG_EN_AUTO_CMD BIT8 -#define ERR_INT_SIG_EN_ADMA BIT9 - -/* Capabilities Register (0x40) */ -#define CAPA_TIMEOUT_CLK_UNIT BIT7 -#define CAPA_ADMA2_SUPPORT BIT19 -#define CAPA_HIGH_SPEED_SUPPORT BIT21 -#define CAPA_VOLT_SUPPORT_33V BIT24 -#define CAPA_VOLT_SUPPORT_30V BIT25 -#define CAPA_VOLT_SUPPORT_18V BIT26 - -#define DATA_BLK_LEN 512 -#define SCR_REG_LEN 8 // 64 bits -#define SWITCH_FN_STATUS_LEN 64 // 512 bits -#define SD_STATUS_LEN 64 // 512 bits -#define CSD_REG_LEN 16 // 128 bits - -/* Switch Function (CMD6) Group */ -#define SWITCH_FN_GRP1_DEFAULT BIT0 -#define SWITCH_FN_GRP1_HIGH_SPEED BIT1 -#define SWITCH_FN_GRP2_DEFAULT BIT0 -#define SWITCH_FN_GRP2_FOR_EC BIT1 -#define SWITCH_FN_GRP2_VENDOR_SPECIFIC BIT14 - -/* Operating Condition (ACMD41) */ -#define ACMD41_POLL_INTERVAL 10000 // 10 ms -#define ACMD41_INIT_TIMEOUT 1000000 // 1 sec - -/* Card Status (R1) */ -#define R1_APP_CMD BIT5 -#define R1_WP_VIOLATION BIT26 - -/* Error Interrupt Recovery */ -#define HAL_SDH_RECOVERED 0x10 - - -/* 0x0C */ -typedef enum -{ - WRITE_OP = 0, - READ_OP = 1 -}DATA_OPERATION; - -/* 0x0E */ -typedef enum -{ - CMD_GO_IDLE_STATE = 0, - CMD_ALL_SEND_CID = 2, - CMD_SEND_RELATIVE_ADDR = 3, - CMD_SET_DSR = 4, - CMD_SWITCH_FUNC = 6, - CMD_SELECT_DESELECT_CARD = 7, - CMD_SEND_IF_COND = 8, - CMD_SEND_CSD = 9, - CMD_SEND_CID = 10, - CMD_VOLTAGE_SWITCH = 11, - CMD_STOP_TRANSMISSION = 12, - CMD_SEND_STATUS = 13, - CMD_GO_INACTIVE_STATE = 15, - CMD_SET_BLOCKLEN = 16, - CMD_READ_SINGLE_BLOCK = 17, - CMD_READ_MULTIPLE_BLOCK = 18, - CMD_SET_BLOCK_COUNT = 23, - CMD_WRITE_BLOCK = 24, - CMD_WRITE_MULTIPLE_BLOCK = 25, - CMD_PROGRAM_CSD = 27, - CMD_ERASE_WR_BLK_START = 32, - CMD_ERASE_WR_BLK_END = 33, - CMD_ERASE = 38, - CMD_SD_SEND_OP_COND = 41, - CMD_LOCK_UNLOCK = 42, - CMD_SEND_SCR = 51, - CMD_APP_CMD = 55 -}CMD_IDX; - -typedef enum -{ - NORMAL, // 00b - SUSPEND, // 01b - RESUME, // 10b - ABORT // 11b -}CMD_TYPE; - -typedef enum -{ - NO_DATA, // 00b - WITH_DATA // 01b -}DATA_PRESENT_SEL; - -typedef enum -{ - NO_RSP, // 00b - RSP_LEN_136, // 01b - RSP_LEN_48, // 10b - RSP_LEN_48_CHK_BUSY // 11b -}RSP_TYPE; - -/* 0x28 */ -typedef enum -{ - SDMA, // 00b - RESERVED, // 01b - ADMA2_32BIT, // 10b - ADMA2_64BIT // 11b -}HOST_DMA_SELECT; - -typedef enum -{ - MODE_1_BIT = 0, - MODE_4_BIT = 1 -}HOST_DATA_WIDTH; - -/* 0x29 */ -typedef enum -{ - VOLT_33V = 7,// 111b - VOLT_30V = 6,// 110b - VOLT_18V = 5 // 101b -}HOST_SD_BUS_VOLT; - -/* 0x2C */ -typedef enum -{ - BASE_CLK = 0x00, // 41.6 MHz - BASE_CLK_DIVIDED_BY_2 = 0x01, // 20.8 MHz - BASE_CLK_DIVIDED_BY_4 = 0x02, // 10.4 MHz - BASE_CLK_DIVIDED_BY_8 = 0x04, // 5.2 MHZ - BASE_CLK_DIVIDED_BY_16 = 0x08, // 2.6 MHz - BASE_CLK_DIVIDED_BY_32 = 0x10, // 1.3 MHz - BASE_CLK_DIVIDED_BY_64 = 0x20, // 650 kHz - BASE_CLK_DIVIDED_BY_128 = 0x40, // 325 kHz - BASE_CLK_DIVIDED_BY_256 = 0x80 // 162 kHz -}SD_CLK_DIVISOR; - -typedef enum -{ - SD_CLK_162KHZ, - SD_CLK_325KHZ, - SD_CLK_650KHZ, - SD_CLK_1_3MHZ, - SD_CLK_2_6MHZ, - SD_CLK_5_2MHZ, - SD_CLK_10_4MHZ, - SD_CLK_20_8MHZ, - SD_CLK_41_6MHZ -}SD_CLK_FREQUENCY; - -/* Card Status Register */ -typedef enum -{ - IDLE, // 0 - READY, // 1 - IDENTIFICATION, // 2 - STAND_BY, // 3 - TRANSFER, // 4 - SENDING_DATA, // 5 - RECEIVE_DATA, // 6 - PROGRAMMING, // 7 - DISCONNECT, // 8 - UNKNOWN = 0xFF -}CURRENT_STATE; - -/* OCR Register */ -typedef enum -{ - VDD_27_28 = BIT15, - VDD_28_29 = BIT16, - VDD_29_30 = BIT17, - VDD_30_31 = BIT18, - VDD_31_32 = BIT19, - VDD_32_33 = BIT20, - VDD_33_34 = BIT21, - VDD_34_35 = BIT22, - VDD_35_36 = BIT23, - CARD_CAPA_STATUS = BIT30, - CARD_PWR_UP_STATUS = BIT31 -}OCR_VOLTAGE_PROFILE; - -/* SCR Register */ -typedef enum -{ - SD_VER_10 = 0, - SD_VER_110 = 1, - SD_VER_200 = 2 -}PHYSICAL_LAYER_SPEC_VER; - -/* CSD Register */ -typedef enum -{ - CLEAR_WRITE_PROTECT = 0, - SET_WRITE_PROTECT = 1 -}TEMPORARY_WRITE_PROTECT_STATUS; - -/* Switch Function (CMD6) Status Data Structure Version */ -typedef enum -{ - BUSY_STATUS_UNDEFINED = 0, // bits [511:376] are defined - BUSY_STATUS_DEFINED = 1 // bits [511:272] are defined -}SWITCH_FN_STATUS_DATA_STRUCTURE_VER; - -/* Switch Function (CMD6) Busy Status */ -typedef enum -{ - READY_STATUS = 0, - BUSY_STATUS = 1 -}SWITCH_FN_BUSY_STATUS; - -/* Switch Function (CMD6) Mode */ -typedef enum -{ - CHECK_FN = 0x0, - SWITCH_FN = 0x1 -}SWITCH_FN_MODE; - -/* Switch Function (CMD6) Group 1 */ -typedef enum -{ - FN1_DEFAULT = 0x0, - FN1_HIGH_SPEED = 0x1, - FN1_KEEP_CURRENT = 0xF -}SWITCH_FN_GROUP_1; - -/* Switch Function (CMD6) Group 2 */ -typedef enum -{ - FN2_DEFAULT = 0x0, - FN2_FOR_EC = 0x1, - FN2_VENDOR_SPECIFIC = 0xE, - FN2_KEEP_CURRENT = 0xF -}SWITCH_FN_GROUP_2; - -typedef enum -{ - DESEL_CARD = 0, - SEL_CARD = 1 -}CARD_SELECTION; - -typedef enum -{ - SDSC_ONLY = 0, - SDHC_SUPPORT = 1 -}HOST_CAPACITY_SUPPORT; - -typedef enum -{ - BUS_1_BIT = 0, - BUS_4_BIT = 2 -}DATA_BUS_WIDTH; - - -typedef struct _ADMA2_ATTRIB_ -{ - uint16_t Valid:1; - uint16_t End:1; - uint16_t Int:1; - uint16_t Rsvd1:1; - uint16_t Act1:1; - uint16_t Act2:1; - uint16_t Rsvd2:10; -}ADMA2_ATTRIB, *PADMA2_ATTRIB; - -typedef struct _ADMA2_DESC_FMT_ -{ - ADMA2_ATTRIB Attrib1; - uint16_t Len1; - uint32_t Addr1; - /* Link to next descriptor (if needed) */ - ADMA2_ATTRIB Attrib2; - uint16_t Len2; - uint32_t Addr2; -}ADMA2_DESC_FMT, *PADMA2_DESC_FMT; - -/* 0x0E */ -typedef struct _SDIO_HOST_CMD_FMT_ -{ - uint16_t RespType:2; //bit:0..1 - uint16_t Rsvd0:1; //bit:2 - uint16_t CmdCrcChkEn:1; //bit:3 - uint16_t CmdIdxChkEn:1; //bit:4 - uint16_t DataPresent:1; //bit:5 - uint16_t CmdType:2; //bit:6..7 - uint16_t CmdIdx:6; //bit:8..13 - uint16_t Rsvd1:2; //bit:14..15 -}SDIO_HOST_CMD_FMT, *PSDIO_HOST_CMD_FMT; - -typedef struct _SDIO_HOST_CMD_ -{ - SDIO_HOST_CMD_FMT CmdFmt; - uint32_t Arg; -}SDIO_HOST_CMD, *PSDIO_HOST_CMD; - - -HAL_Status -HalSdioHostInitHostRtl8195a( - IN void *Data -); - -HAL_Status -HalSdioHostInitCardRtl8195a( - IN void *Data -); - -HAL_Status -HalSdioHostDeInitRtl8195a( - IN void *Data -); - -HAL_Status -HalSdioHostEnableRtl8195a( - IN void *Data -); - -HAL_Status -HalSdioHostDisableRtl8195a( - IN void *Data -); - -HAL_Status -HalSdioHostIrqInitRtl8195a( - IN void *Data -); - -HAL_Status -HalSdioHostReadBlocksDmaRtl8195a( - IN void *Data, - IN uint64_t ReadAddr, - IN uint32_t BlockCnt -); - -HAL_Status -HalSdioHostWriteBlocksDmaRtl8195a( - IN void *Data, - IN uint64_t WriteAddr, - IN uint32_t BlockCnt -); - -HAL_Status -HalSdioHostStopTransferRtl8195a( - IN void *Data -); - -HAL_Status -HalSdioHostGetCardStatusRtl8195a( - IN void *Data -); - -HAL_Status -HalSdioHostGetSdStatusRtl8195a( - IN void *Data -); - -HAL_Status -HalSdioHostChangeSdClockRtl8195a( - IN void *Data, - IN uint8_t Frequency -); - -HAL_Status -HalSdioHostEraseRtl8195a( - IN void *Data, - IN uint64_t StartAddr, - IN uint64_t EndAddr -); - -HAL_Status -HalSdioHostGetWriteProtectRtl8195a( - IN void *Data -); - -HAL_Status -HalSdioHostSetWriteProtectRtl8195a( - IN void *Data, - IN uint8_t Setting -); - - -#ifdef CONFIG_SDIO_HOST_VERIFY - -#define HAL_MMC_HOST_READ32(addr) HAL_READ32(SDIO_HOST_REG_BASE, addr) -#define HAL_MMC_HOST_WRITE32(addr, value) HAL_WRITE32(SDIO_HOST_REG_BASE, addr, value) -#define HAL_MMC_HOST_READ16(addr) HAL_READ16(SDIO_HOST_REG_BASE, addr) -#define HAL_MMC_HOST_WRITE16(addr, value) HAL_WRITE16(SDIO_HOST_REG_BASE, addr, value) -#define HAL_MMC_HOST_READ8(addr) HAL_READ8(SDIO_HOST_REG_BASE, addr) -#define HAL_MMC_HOST_WRITE8(addr, value) HAL_WRITE8(SDIO_HOST_REG_BASE, addr, value) - -/* RTL8195A Register */ -// REG_SOC_HCI_COM_FUNC_EN (0x214) -#define SD_DEVICE_IP_ON_BLK BIT0 -#define SD_DEVICE_IP_OFF_BLK BIT1 -#define SD_HOST_IP_BLK BIT2 - -// REG_PESOC_HCI_CLK_CTRL0 (0x240) -#define SD_HOST_CLKEN_IN_CPU_RUN_MODE BIT2 - -// REG_HCI_PINMUX_CTRL (0x2A0) -#define SD_DEVICE_MODE_PINMUX_EN BIT0 -#define SD_HOST_MODE_PINMUX_EN BIT1 - -// 0x40059000 -#define SD_HOST_CARD_DETECT_CIRCUIT BIT10 - - - -/* SD Host Register */ -#define REG_SDMA_SYS_ADDR_ARG 0x00 // 4byte -#define REG_BLOCK_SIZE 0x04 // 2byte -#define REG_BLOCK_COUNT 0x06 // 2byte -#define REG_ARGUMENT1 0x08 // 4byte -#define REG_TRANSFER_MODE 0x0C // 2byte -#define REG_COMMAND 0x0E // 2byte -#define REG_RESPONSE0 0x10 // 4byte -#define REG_RESPONSE2 0x14 // 4byte -#define REG_RESPONSE4 0x18 // 4byte -#define REG_RESPONSE6 0x1C // 4byte -#define REG_BUFFER_DATA_PORT 0x20 // 4byte -#define REG_PRESENT_STATE 0x24 // 4byte -#define REG_HOST_CONTROL1 0x28 // 1byte -#define REG_POWER_CONTROL 0x29 // 1byte -#define REG_BLOCK_GAP_CONTROL 0x2A // 1byte -#define REG_WAKEUP_CONTROL 0x2B // 1byte -#define REG_CLOCK_CONTROL 0x2C // 2byte -#define REG_TIMEOUT_CONTROL 0x2E // 1byte -#define REG_SW_RESET 0x2F // 1byte -#define REG_NORMAL_INT_STATUS 0x30 // 2byte -#define REG_ERROR_INT_STATUS 0x32 // 2byte -#define REG_NORMAL_INT_STATUS_ENABLE 0x34 // 2byte -#define REG_ERROR_INT_STATUS_ENABLE 0x36 // 2byte -#define REG_NORMAL_INT_SIGNAL_ENABLE 0x38 // 2byte -#define REG_ERROR_INT_SIGNAL_ENABLE 0x3A // 2byte -#define REG_CAPABILITIES 0x40 // 8byte -#define REG_ADMA_ADDRESS 0x58 // 8byte - -// Transfer Mode (0x0C) -#define BIT_DMA_EN BIT0 -#define BIT_BLK_CNT_EN BIT1 -#define BIT_AUTO_CMD12_EN BIT2 -#define BIT_AUTO_CMD23_EN BIT3 -#define BIT_READ_TRANS BIT4 -#define BIT_MULTI_BLK BIT5 - -// Present State (0x24) -#define BIT_CMD_INHIBIT_CMD BIT0 -#define BIT_CMD_INHIBIT_DAT BIT1 -#define BIT_CARD_INSERTED BIT16 -#define BIT_WRITE_PROTECT_SWITCH_PIN BIT19 - -// Power Control (0x29) -#define BIT_POWER_33 0xE -#define BIT_POWER_30 0xC -#define BIT_POWER_18 0xA - -// Clock Control (0x2C) -#define BIT_INTERNAL_CLK_EN BIT0 -#define BIT_INTERNAL_CLK_STABLE BIT1 -#define BIT_SD_CLK_EN BIT2 - -// Software Reset (0x2F) -#define BIT_SW_RESET_ALL BIT0 -#define BIT_SW_RESET_CMD_LINE BIT1 -#define BIT_SW_RESET_DAT_LINE BIT2 - -// Norma Interrupt Status (0x30) -#define BIT_COMMAND_COMPLETE BIT0 -#define BIT_TRANSFER_COMPLETE BIT1 -#define BIT_BLOCK_GAP_EVENT BIT2 -#define BIT_DMA_INT BIT3 -#define BIT_BUFFER_WRITE_RDY BIT4 -#define BIT_BUFFER_READ_RDY BIT5 -#define BIT_CARD_INSERTION BIT6 -#define BIT_CARD_REMOVAL BIT7 -#define BIT_CARD_INT BIT8 -#define BIT_ERROR_INT BIT15 - -// Error Interrupt Status (0x32) -#define BIT_DATA_TIME_OUT_ERROR BIT4 -#define BIT_DATA_CRC_ERROR BIT5 -#define BIT_ADMA_ERROR BIT9 - -// Capabilities (0x40) -#define BIT_VDD_33 BIT24 -#define BIT_VDD_30 BIT25 -#define BIT_VDD_18 BIT26 - - -#define ENABLE 1 -#define DISABLE 0 - -#define ADMA_DESC_NUM 50 - -#define BUFFER_UNIT_SIZE 512 - -typedef enum _MMC_HOST_TEST_FUNC_ { - MMC_HOST_TEST_HW_INIT, // 0 - MMC_HOST_TEST_CARD_INIT, // 1 - MMC_HOST_TEST_SEND_CMD, // 2 - MMC_HOST_TEST_DEBUG, // 3 - MMC_HOST_TEST_SW_RESET, // 4 - MMC_HOST_TEST_READ_SINGLE, // 5 - MMC_HOST_TEST_WRITE_SINGLE, // 6 - MMC_HOST_TEST_READ_MULTI, // 7 - MMC_HOST_TEST_WRITE_MULTI, // 8 - MMC_HOST_TEST_SINGLE_LONGRUN, // 9 - MMC_HOST_TEST_MULTI_LONGRUN, // 10 - MMC_HOST_TEST_CARD_DETECTION, // 11 - MMC_HOST_TEST_WRITE_PROTECT, // 12 - MMC_HOST_TEST_REGISTER_RW, // 13 - SD_HOST_HAL_API_VERIFY = 20, - SD_HOST_ERASE_TEST = 21, - SD_HOST_WP_TEST = 22, - SD_HOST_MB_TEST = 23, - SD_HOST_ADMA_MAX_TEST = 24 -}MMC_HOST_TEST_FUNC; - -typedef enum _RESPONSE_TYPE_ { - No_Response, // 00b - Response_136, // 01b - Response_48, // 10b - Response_48_Busy // 11b -}RESPONSE_TYPE; - -typedef enum _COMMAND_TYPE_ { - Normal, // 00b - Suspend, // 01b - Resume, // 10b - Abort // 11b -}COMMAND_TYPE; - -typedef enum _DATA_PRESENT_ { - No_Data_Present, // 00b - Data_Present, // 01b -}DATA_PRESENT; - -typedef enum _SUPPLY_VOLTAGE_ { - MMC_VDD_27_28 = BIT15, - MMC_VDD_28_29 = BIT16, - MMC_VDD_29_30 = BIT17, - MMC_VDD_30_31 = BIT18, - MMC_VDD_31_32 = BIT19, - MMC_VDD_32_33 = BIT20, - MMC_VDD_33_34 = BIT21, - MMC_VDD_34_35 = BIT22, - MMC_VDD_35_36 = BIT23, -}SUPPLY_VOLTAGE; - -typedef enum _COMMAND_INDEX_ { - GO_IDLE_STATE = 0, - ALL_SEND_CID = 2, - SEND_RELATIVE_ADDR = 3, - SET_BUS_WIDTH = 6, - SELECT_CARD = 7, - SEND_IF_COND = 8, - SEND_CSD = 9, - STOP_TRANSMISSION = 12, - SEND_STATUS = 13, - READ_SINGLE_BLOCK = 17, - READ_MULTIPLE_BLOCK = 18, - WRITE_BLOCK = 24, - WRITE_MULTIPLE_BLOCK = 25, - SD_SEND_OP_COND = 41, - APP_CMD = 55, -}COMMAND_INDEX; - -typedef enum _TRANSFER_CONFIG_ { - Read_Data = 0, - Write_Data = 1, - Single_Block = 0, - Multiple_Block = 1, -}TRANSFER_CONFIG; - -typedef enum _ERROR_STATUS_ { - General_Error, // 0 - CRC_Error, // 1 - TIME_OUT_ERROR, // 2 - CRC_Error_NeedCMD12, // 3 - Transfer_OK // 4 -}ERROR_STATUS; - -typedef enum _CARD_CURRENT_STATE_ { - IDLE_STATE, - READY_STATE, - IDENT_STATE, - STBY_STATE, - TRAN_STATE, - DATA_STATE, - RCV_STATE, - PRG_STATE, - DIS_STATE, - UNKNOWN_STATE -}CARD_CURRENT_STATE; - -typedef struct _COMMAND_FORMAT_ -{ - uint16_t Resp_Type:2; - uint16_t Rsvd0:1; - uint16_t CMD_CRC_Chk:1; - uint16_t CMD_Idx_Chk:1; - uint16_t Data_Present:1; - uint16_t CMD_Type:2; - uint16_t CMD_Idx:6; - uint16_t Rsvd1:2; -}COMMAND_FORMAT, *PCOMMAND_FPRMAT; - -typedef struct _MMC_COMMAND -{ - COMMAND_FORMAT Cmd_Format; - uint32_t Arg; -}MMC_COMMAND; - -typedef struct _MMC_HOST_ -{ - uint32_t OCR_Avail; - uint32_t Resp[4]; - uint32_t CID[4]; - uint32_t RCA; -}MMC_HOST, *PMMC_HOST; - -typedef struct _ADMA_ATTR_ -{ - uint16_t Valid:1; - uint16_t End:1; - uint16_t Int:1; - uint16_t Rsvd1:1; - uint16_t Act1:1; - uint16_t Act2:1; - uint16_t Rsvd2:10; -}ADMA_ATTR, *PADMA_ATTR; -// 24 bytes -typedef struct _ADMA_DESC_TABLE_ -{ - // 1st buffer desc - ADMA_ATTR Attribute1; - uint16_t Length1; - uint32_t Address1; - // 2nd buffer desc - ADMA_ATTR Attribute2; - uint16_t Length2; - uint32_t Address2; - // 3rd buffer desc - ADMA_ATTR Attribute3; - uint16_t Length3; - uint32_t Address3; -}ADMA_DESC_TABLE, *PADMA_DESC_TABLE; -// 1024 bytes -typedef struct _ADMA_BUFFER_ -{ - uint8_t Data1[512]; /* 1st buffer */ - uint8_t Data2[512]; /* 2nd buffer */ -}ADMA_BUFFER, *PADMA_BUFFER; - - -void -SdHostTestApp( - IN uint8_t *argv[] -); -#endif // end of "#ifdef CONFIG_SDIO_HOST_VERIFY" - -#endif /* #ifndef _RTL8195A_SDIO_HOST_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host.zip b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host.zip deleted file mode 100644 index b95cc5e..0000000 Binary files a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host.zip and /dev/null differ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host_open.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host_open.c deleted file mode 100644 index bbcbfb3..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host_open.c +++ /dev/null @@ -1,2163 +0,0 @@ -/* - * rtl8195a_sdio_host_open.c - * - * Created on: Jul 12, 2017 - * Author: sharikov - */ - -#include -#include "rtl8195a.h" -#include "hal_timer.h" -#include "hal_sdio_host.h" -#include "rtl8195a_sdio_host.h" - -#if 1 - -#define HAL_SDIOH_REG32(a) (*(volatile unsigned int *)(SDIO_HOST_REG_BASE+a)) -#define HAL_SDIOH_REG16(a) (*(volatile unsigned short *)(SDIO_HOST_REG_BASE+a)) -#define HAL_SDIOH_REG8(a) (*(volatile unsigned char *)(SDIO_HOST_REG_BASE+a)) - -#define SD_CHK_TIMEOUT 3225 - -//----- -HAL_Status SdioHostSdClkCtrl(void *Data, int En, uint8_t Divisor) { // SD_CLK_DIVISOR - PHAL_SDIO_HOST_ADAPTER psha = Data; // uint8_t *v3; // r3@1 v3 = Data; - if (HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) - & (PRES_STATE_CMD_INHIBIT_CMD | PRES_STATE_CMD_INHIBIT_DAT)) { - return HAL_BUSY; - } else { - HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) &= ~CLK_CTRL_SD_CLK_EN; - if (!En) - return HAL_OK; - else { - switch(Divisor) { - case BASE_CLK: - psha->CurrSdClk = SD_CLK_41_6MHZ; - break; - case BASE_CLK_DIVIDED_BY_2: - psha->CurrSdClk = SD_CLK_20_8MHZ; - break; - case BASE_CLK_DIVIDED_BY_4: - psha->CurrSdClk = SD_CLK_10_4MHZ; - break; - case BASE_CLK_DIVIDED_BY_8: - psha->CurrSdClk = SD_CLK_5_2MHZ; - break; - case BASE_CLK_DIVIDED_BY_16: - psha->CurrSdClk = SD_CLK_2_6MHZ; - break; - case BASE_CLK_DIVIDED_BY_32: - psha->CurrSdClk = SD_CLK_1_3MHZ; - break; - case BASE_CLK_DIVIDED_BY_64: - psha->CurrSdClk = SD_CLK_650KHZ; - break; - case BASE_CLK_DIVIDED_BY_128: - psha->CurrSdClk = SD_CLK_325KHZ; - break; - case BASE_CLK_DIVIDED_BY_256: - psha->CurrSdClk = SD_CLK_162KHZ; - break; - default: - DBG_SDIO_ERR("Unsupported SDCLK divisor!\n"); - Divisor = 0; - psha->CurrSdClk = SD_CLK_41_6MHZ; - } - } - HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) = (Divisor << 8) | CLK_CTRL_INTERAL_CLK_EN; - HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) = (Divisor << 8) | CLK_CTRL_SD_CLK_EN | CLK_CTRL_INTERAL_CLK_EN; - } - return HAL_OK; -} - -static HAL_Status CheckSramAddress(void* address) -{ - // SRAM: 0x10000000... 0x1006ffff - if ((uint32_t)address >= 0x10070000 || (uint32_t)address < 0x10000000 || ((uint32_t)address & 3) !=0) - return HAL_ERR_PARA; - return HAL_OK; -} - -//-----SdioHostIsTimeout(StartCount, TimeoutCnt) -HAL_Status SdioHostIsTimeout(uint32_t StartCount, uint32_t TimeoutCnt) { - uint32_t t1, t2; - HAL_Status result; - - t1 = HalTimerOp.HalTimerReadCount(1); - t2 = StartCount - t1; - if (StartCount < t1) - t2--; - if (TimeoutCnt >= t2) - result = HAL_OK; - else - result = HAL_TIMEOUT; - return result; -} - -//----- SdioHostSendCmd(PSDIO_HOST_CMD) -void SdioHostSendCmd(PSDIO_HOST_CMD Cmd) { - //uint16_t reg_cmd = (*(uint8_t *) &Cmd->CmdFmt & 0x3B) | (*(uint8_t *) &Cmd->CmdFmt & 0xC0) - // | ((*((uint8_t *)&Cmd->CmdFmt + 1) & 0x3F) << 8); - Cmd->CmdFmt.Rsvd0=0; - Cmd->CmdFmt.Rsvd1=0; - HAL_SDIOH_REG32(REG_SDIO_HOST_ARG) = Cmd->Arg; // 40058008 = Cmd->Arg - HAL_SDIOH_REG16(REG_SDIO_HOST_CMD) = *(uint16_t *) &Cmd->CmdFmt; // & 0x3FFB; -} - -//----- -HAL_Status SdioHostGetResponse(void *Data, int RspType) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status result; - - if (psha) { - psha->Response[0] = HAL_SDIOH_REG32(REG_SDIO_HOST_RSP0); // 40058010; - psha->Response[1] = HAL_SDIOH_REG32(REG_SDIO_HOST_RSP2); - if (RspType == 1) { - psha->Response[2] = HAL_SDIOH_REG32(REG_SDIO_HOST_RSP4); - psha->Response[3] = HAL_SDIOH_REG32(REG_SDIO_HOST_RSP6); - } - result = HAL_OK; - } else - result = HAL_ERR_PARA; - return result; -} - - - -#if 1 -//----- -//void SdioHostSdBusPwrCtrl(uint8_t En) { -void SdioHostSdBusPwrCtrl(void) { - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) &= ~ PWR_CTRL_SD_BUS_PWR; - if (HAL_SDIOH_REG32(REG_SDIO_HOST_CAPABILITIES) & CAPA_VOLT_SUPPORT_18V) { - DBG_SDIO_WARN("Supply SD bus voltage: 1.8V\n"); - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) = VOLT_18V << 1; - } - else if (HAL_SDIOH_REG32(REG_SDIO_HOST_CAPABILITIES) & CAPA_VOLT_SUPPORT_30V) { - DBG_SDIO_WARN("Supply SD bus voltage: 3.0V\n"); - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) = VOLT_30V << 1; - } - else if (HAL_SDIOH_REG32(REG_SDIO_HOST_CAPABILITIES) & CAPA_VOLT_SUPPORT_33V) { - DBG_SDIO_WARN("Supply SD bus voltage: 3.3V\n"); - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) = VOLT_33V << 1; - } - else DBG_SDIO_ERR("No supported voltage\n"); - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) |= PWR_CTRL_SD_BUS_PWR; -} - -//----- (000005D8) -------------------------------------------------------- -HAL_Status SdioHostErrIntRecovery(void *Data) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - int t; - int result= HAL_OK; - - if (!psha) - return HAL_ERR_PARA; - - DBG_SDIO_ERR("Recovering error interrupt...\n"); - uint16_t ierr = HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS); // v40058032; - - if ( HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & - (ERR_INT_STAT_CMD_TIMEOUT | - ERR_INT_STAT_CMD_CRC | - ERR_INT_STAT_CMD_END_BIT | - ERR_INT_STAT_CMD_IDX) ) - { - HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) |= SW_RESET_FOR_CMD; - t = 0; - while((HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) & SW_RESET_FOR_CMD)) { - if(++t > 1000) { - DBG_SDIO_ERR("CMD line reset timeout!\n"); - result= HAL_TIMEOUT; - goto RECOVERY_END; - } - } - } - if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) - & (ERR_INT_STAT_DATA_TIMEOUT - | ERR_INT_STAT_DATA_CRC - | ERR_INT_STAT_DATA_END_BIT)) { - HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) |= SW_RESET_FOR_DAT; - t = 0; - while ((HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) & SW_RESET_FOR_DAT)) { - if (++t > 1000) { - DBG_SDIO_ERR("DAT line reset timeout!\n"); - result= HAL_TIMEOUT; - goto RECOVERY_END; - } - } - } - - DBG_SDIO_ERR("Error interrupt status: 0x%04X\n", HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS)); - - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = ierr; - psha->ErrIntFlg = 0; - result = HalSdioHostStopTransferRtl8195a(psha); - if (result == HAL_OK) { - t = 0; - while (HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) - & (PRES_STATE_CMD_INHIBIT_CMD | PRES_STATE_CMD_INHIBIT_DAT)) { - if(++t > 1000) - break; - } - if(HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) - & ( ERR_INT_STAT_CMD_TIMEOUT - | ERR_INT_STAT_CMD_CRC - | ERR_INT_STAT_CMD_END_BIT - | ERR_INT_STAT_CMD_IDX)) { - DBG_SDIO_ERR("Non-recoverable error(1)!\n"); - result= HAL_ERR_UNKNOWN; - goto RECOVERY_END; - } - if(HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) - & ERR_INT_STAT_DATA_TIMEOUT) { - DBG_SDIO_ERR("Non-recoverable error(2)!\n"); - result= HAL_ERR_UNKNOWN; - goto RECOVERY_END; - } - HalDelayUs(50); - //if((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) & 0xF00000) != 0xF00000) { - if((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) & 0xF00000) != 0x900000) { - DBG_SDIO_ERR("Non-recoverable error(3)!\n"); - result= HAL_ERR_UNKNOWN; - goto RECOVERY_END; - } - DBG_SDIO_ERR("Recoverable error...\n"); - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_SIG_EN) = 0x17F; - result = 16; - goto RECOVERY_END; - } - DBG_SDIO_ERR("Stop transmission error!\n"); - result = HAL_ERR_UNKNOWN; - - RECOVERY_END: - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS) = HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS); - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS); - - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_SIG_EN) = - NOR_INT_SIG_EN_CMD_COMP - | NOR_INT_SIG_EN_XFER_COMP - | NOR_INT_SIG_EN_CARD_REMOVAL - | NOR_INT_SIG_EN_CARD_INSERT; // 0xc3; - - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_SIG_EN)= - ERR_INT_STAT_EN_CMD_TIMEOUT - | ERR_INT_STAT_EN_CMD_CRC - | ERR_INT_STAT_EN_CMD_END_BIT - | ERR_INT_STAT_EN_CMD_IDX - | ERR_INT_STAT_EN_DATA_TIMEOUT - | ERR_INT_STAT_EN_DATA_CRC - | ERR_INT_STAT_EN_DATA_END_BIT - | ERR_INT_STAT_EN_AUTO_CMD; // 0x17F; - return result; -} -#endif -// 23D4: using guessed type int DiagPrintf(const char *, ...); -// 23F0: using guessed type int HalDelayUs(uint32_t); -#if 1 -void SdioHostIsrHandle(void *Data) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - - uint32_t status = HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS);// v40058030; - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS) = status & 255; - - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_SIG_EN) = 0; - - if (status) { - if (status & NOR_INT_STAT_CMD_COMP) - psha->CmdCompleteFlg = 1; - - psha->errType = 0; - if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS)) - psha->errType = 0xff; - if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & ERR_INT_STAT_EN_CMD_TIMEOUT) - psha->errType = SDIO_ERR_CMD_TIMEOUT; - if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & ERR_INT_STAT_DATA_CRC) - psha->errType = SDIO_ERR_DAT_CRC; - - if (status & NOR_INT_STAT_XFER_COMP) { - psha->XferCompleteFlg = 1; - if ((status & NOR_INT_STAT_ERR_INT) == 0) { - if (psha->XferCompCallback) - psha->XferCompCallback(psha->XferCompCbPara); - } - else - if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS)) { - - DBG_SDIO_ERR("XFER CP with ErrIntVal: 0x%04X /0x%04X -- TYPE 0x%02X\n", - status, - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS), - psha->CmdCompleteFlg); - - if (psha->ErrorCallback) - psha->ErrorCallback(psha->ErrorCbPara); - } - } - - if (status & NOR_INT_STAT_CARD_INSERT) // 0x40 - { - SdioHostSdClkCtrl(psha, 1, BASE_CLK_DIVIDED_BY_128); // BASE_CLK_DIVIDED_BY_128 - SdioHostSdBusPwrCtrl(); - if (psha->CardInsertCallBack) - psha->CardInsertCallBack(psha->CardInsertCbPara); - } - if (status & NOR_INT_STAT_CARD_REMOVAL) // 0x80 - { - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) &= ~PWR_CTRL_SD_BUS_PWR; - SdioHostSdClkCtrl(psha, 0, BASE_CLK); // BASE_CLK - if (psha->CardRemoveCallBack) - psha->CardRemoveCallBack(psha->CardRemoveCbPara); - } - if (status & NOR_INT_STAT_CARD_INT) // 0x100 ) - { - uint16_t val = HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN); - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN) = val & (~NOR_INT_STAT_EN_CARD_INT); - DBG_SDIO_ERR("CARD INT: 0x%04X\n", status); - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN) = val; - } - if (status & NOR_INT_STAT_ERR_INT) // 0x8000 ) - { - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_SIG_EN) = 0; - uint16_t err = HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS); - - DBG_SDIO_ERR("XFER CP with ErrIntVal: 0x%04X /0x%04X -- TYPE 0x%02X\n", - status, - err, - psha->CmdCompleteFlg); - psha->ErrIntFlg = 1; - return; - /* - if (psha->errType != SDIO_ERR_CMD_TIMEOUT) - return; - else { - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) =0xffff; - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_SIG_EN)= - ERR_INT_STAT_EN_CMD_TIMEOUT - | ERR_INT_STAT_EN_CMD_CRC - | ERR_INT_STAT_EN_CMD_END_BIT - | ERR_INT_STAT_EN_CMD_IDX - | ERR_INT_STAT_EN_DATA_TIMEOUT - | ERR_INT_STAT_EN_DATA_CRC - | ERR_INT_STAT_EN_DATA_END_BIT - | ERR_INT_STAT_EN_AUTO_CMD; // 0x17F; - } - */ - - /*if (psha->CmdCompleteFlg) { - SdioHostErrIntRecovery(psha); - goto ir_end; - } - DiagPrintf("\r[SDIO Err]Read/Write command Error\n"); - */ - } - } -// ir_end: - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_SIG_EN) - = NOR_INT_SIG_EN_CMD_COMP - | NOR_INT_SIG_EN_XFER_COMP - | NOR_INT_SIG_EN_CARD_REMOVAL - | NOR_INT_SIG_EN_CARD_INSERT; // 0xc3; */ -} -#else -extern void SdioHostIsrHandle(void *Data); -#endif - - - - -#if 1 -//----- SdioHostChkDataLineActive -HAL_Status SdioHostChkDataLineActive(void) { - HAL_Status result = HAL_OK; - uint32_t t1 = HalTimerOp.HalTimerReadCount(1); - do { - if ((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) - & PRES_STATE_DAT_LINE_ACTIVE) == 0) - break; - result = SdioHostIsTimeout(t1, SD_CHK_TIMEOUT); - } while (result != HAL_TIMEOUT); - return result; -} - -//----- SdioHostChkCmdInhibitCMD -HAL_Status SdioHostChkCmdInhibitCMD(void) { - HAL_Status result = HAL_OK; - uint32_t t1 = HalTimerOp.HalTimerReadCount(1); - do { - if ((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) - & PRES_STATE_CMD_INHIBIT_CMD) == 0) - break; - result = SdioHostIsTimeout(t1, SD_CHK_TIMEOUT); - } while (result != HAL_TIMEOUT); - return result; -} -//----- SdioHostChkCmdInhibitDAT -int SdioHostChkCmdInhibitDAT(void) { - HAL_Status result = HAL_OK; - uint32_t t1 = HalTimerOp.HalTimerReadCount(1); - do { - if ((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) - & PRES_STATE_CMD_INHIBIT_DAT) == 0) - break; - result = SdioHostIsTimeout(t1, SD_CHK_TIMEOUT); - } while (result != HAL_TIMEOUT); - return result; -} - -//----- SdioHostChkXferComplete -HAL_Status SdioHostChkXferComplete(void *Data) -{ - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - uint32_t StartCount; - HAL_Status result; - if (psha) { - StartCount = HalTimerOp.HalTimerReadCount(1); - while((psha->XferCompleteFlg == 0) - /*&& ((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) - & PRES_STATE_DAT0_SIGNAL_LEVEL) == 0) */) { - if(psha->ErrIntFlg) - return SdioHostErrIntRecovery(psha); - result = SdioHostIsTimeout(StartCount, SD_CHK_TIMEOUT*50); - if (result == HAL_TIMEOUT) - return result; - } - result = HAL_OK; - } else { - result = HAL_ERR_PARA; - } - return result; -} -//----- SdioHostChkCmdComplete -HAL_Status SdioHostChkCmdComplete(void *Data, uint32_t Timeout) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - uint32_t TimeoutCnt; - uint32_t StartCount; - HAL_Status result; - - - if (psha) { - if (Timeout == SDIO_HOST_WAIT_FOREVER) { - StartCount = 0; - TimeoutCnt = 0; - } else { - TimeoutCnt = 1000 * Timeout / 31; - StartCount = HalTimerOp.HalTimerReadCount(1); // v6 = (*((int (**)(uint32_t)) &HalTimerOp + 2))(1); - } - while(psha->CmdCompleteFlg == 0) { - if (psha->ErrIntFlg ) - return SdioHostErrIntRecovery(psha); - if(TimeoutCnt) { - result = SdioHostIsTimeout(StartCount, TimeoutCnt); - if (result == HAL_TIMEOUT) - return result; - } else if(Timeout == 0) { - result = HAL_BUSY; - return result; - } - } - result = HAL_OK; - } else - result = HAL_ERR_PARA; - return result; -} -#endif - - -#if 1 -//----- (00000D34) -------------------------------------------------------- -// Mode: 0=test / 1=set -// Fn1Sel: адрес буфера Switch Function Status -// Fn2Sel: включаемая функция. доступна только группа 1, остальные маскируются -// StatusBuf: не используется (убрать!) -// проверено в режиме test (Mode=0) -HAL_Status SdioHostSwitchFunction(void *Data, int Mode, int Fn2Sel, int Fn1Sel, - uint8_t *StatusBuf) -{ - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status result; // r0@3 - SDIO_HOST_CMD Cmd; // [sp+0h] [bp-20h]@1 - ADMA2_DESC_FMT *pAdmaDescTbl = psha->AdmaDescTbl; - - result = CheckSramAddress(pAdmaDescTbl); - if (result) - return result; - result = CheckSramAddress((void*)Fn1Sel); - if (result) - return result; - - HAL_SDIOH_REG32(REG_SDIO_HOST_ADMA_SYS_ADDR) = (uint32_t)pAdmaDescTbl; - HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_SIZE) = 64; - HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_CNT) =1; - HAL_SDIOH_REG16(REG_SDIO_HOST_XFER_MODE) = - XFER_MODE_DATA_XFER_DIR - | XFER_MODE_DMA_EN ; - - //*(uint16_t *) (v6 + 2) = 64; - pAdmaDescTbl->Len1 = 64; - - //v9 = *(uint8_t *) v6; - //*(uint8_t *) v6 = ((v9 | 3) & 0xFB | 4 * ((Fn1Sel | v6) & 1)) & 0xEF - // | 16 * ((Fn1Sel | v6) & 1) | 0x20; - pAdmaDescTbl->Attrib1.End=1; - pAdmaDescTbl->Attrib1.Valid =1; - pAdmaDescTbl->Attrib1.Int = 0; - pAdmaDescTbl->Attrib1.Act1= 0; - pAdmaDescTbl->Attrib1.Act2=1; - // *(uint32_t *) (v6 + 4) = Fn1Sel; - pAdmaDescTbl->Addr1 = Fn1Sel; - - result = SdioHostChkCmdInhibitCMD();//v6); - if (result) - return result; - result = SdioHostChkDataLineActive(); - if (result) - return result; - - //Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(uint8_t *) &Cmd.CmdFmt & 0xF4 - // | 0x3A) & 0x3F); - //v11 = *((uint8_t *) &Cmd.CmdFmt + 1); - Cmd.CmdFmt.RespType = RSP_LEN_48; //2 - Cmd.CmdFmt.Rsvd0 =0; - Cmd.CmdFmt.CmdCrcChkEn =1; - Cmd.CmdFmt.CmdIdxChkEn =1; - Cmd.CmdFmt.DataPresent =1; - Cmd.CmdFmt.CmdType = NORMAL; - - //v5[128] = 0; - //v5[129] = 0; - psha->CmdCompleteFlg =0; - psha->XferCompleteFlg =0; - - // *((uint8_t *) &Cmd.CmdFmt + 1) = v11 & 0xC0 | 6; - Cmd.CmdFmt.CmdIdx = CMD_SWITCH_FUNC; // CMD6 - Cmd.CmdFmt.Rsvd1 = 0; - //Cmd.Arg = v8 | 0xFFFFF0 | (v7 << 31); - // от Fn2Sel оставили только 0 - Cmd.Arg = Fn2Sel | 0xFFFFF0 | (Mode << 31); - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if (result) - return result; - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - result = SdioHostChkXferComplete(psha); - if (result) { - if (result != 16) { - if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & ERR_INT_STAT_ADMA) { - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = ERR_INT_STAT_ADMA; - if (HalSdioHostStopTransferRtl8195a(psha)) { - DBG_SDIO_ERR("Stop transmission error!\n"); - } - } - } - result = HAL_ERR_UNKNOWN; - } - return result; -} -#endif - -#if 1 -HAL_Status HalSdioHostChangeSdClockRtl8195a(IN void *Data, IN uint8_t Frequency) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status result; - uint8_t Divisor; - volatile uint8_t *StatusData=NULL; - PADMA2_DESC_FMT pAdmaDescTbl; - SDIO_HOST_CMD Cmd; - - if (!psha || Frequency > SD_CLK_41_6MHZ) - return HAL_ERR_PARA; - - //StatusData = malloc(64); - //if (CheckSramAddress(StatusData) != HAL_OK) - // return HAL_ERR_UNKNOWN; // буфер не годится для ADMA2 - - if (psha->CurrSdClk == Frequency) { - DBG_SDIO_WARN("Current SDCLK frequency is already the specified value...\n"); - result = HAL_OK; - goto LABEL_EXIT; - } - if (Frequency != SD_CLK_41_6MHZ) { - if (Frequency == SD_CLK_10_4MHZ) - Divisor = BASE_CLK_DIVIDED_BY_4; // 10.4 MHz - else if (Frequency == SD_CLK_20_8MHZ) - Divisor = BASE_CLK_DIVIDED_BY_2; // 20.8 MHz - else if (Frequency != SD_CLK_5_2MHZ) { - DBG_SDIO_ERR("Unsupported SDCLK frequency!\n"); - result = HAL_ERR_PARA; - goto LABEL_EXIT; - } - Divisor = BASE_CLK_DIVIDED_BY_8; // 5.2 MHZ - - result = SdioHostSdClkCtrl(psha, 1, Divisor); - if (result != HAL_OK) { - DBG_SDIO_ERR("Host changes clock fail!\n"); - goto LABEL_EXIT; - } - HalDelayUs(20); - } - - pAdmaDescTbl = psha->AdmaDescTbl; - if (CheckSramAddress(pAdmaDescTbl) != HAL_OK) { - result = HAL_ERR_PARA; - goto LABEL_EXIT; - } - - // подразумевается что psha->AdmaDescTbl = gAdmaTbls - // здесь используется только первый дескриптор, - // 64 байта начиная со второго дескриптора используем как буфер данных - // это грязный хак но из-за ограничений ADMA2 буфер нельза размещать на стеке - // а malloc не гарантирует размещение в SRAM в любых ситуациях - StatusData = (uint8_t*)pAdmaDescTbl + sizeof(ADMA2_DESC_FMT); - - HAL_SDIOH_REG32(REG_SDIO_HOST_ADMA_SYS_ADDR) = (uint32_t)pAdmaDescTbl; - HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_SIZE) = 8; // v40058004 = 8; - HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_CNT) =1; - HAL_SDIOH_REG16(REG_SDIO_HOST_XFER_MODE) = - XFER_MODE_DATA_XFER_DIR - //| XFER_MODE_MULT_SINGLE_BLK - //| XFER_MODE_BLK_CNT_EN - //| XFER_MODE_AUTO_CMD12_EN - | XFER_MODE_DMA_EN ; - - pAdmaDescTbl->Attrib1.End=1; - pAdmaDescTbl->Attrib1.Valid =1; - pAdmaDescTbl->Attrib1.Int = 0; - pAdmaDescTbl->Attrib1.Act1= 0; - pAdmaDescTbl->Attrib1.Act2=1; - pAdmaDescTbl->Addr1 = (uint32_t)StatusData; - pAdmaDescTbl->Len1 = 8; - - result = SdioHostChkCmdInhibitCMD(); - if (result != HAL_OK) - goto LABEL_EXIT; - - Cmd.CmdFmt.RespType = RSP_LEN_48; //2 - Cmd.CmdFmt.Rsvd0 =0; - Cmd.CmdFmt.CmdCrcChkEn =1; - Cmd.CmdFmt.CmdIdxChkEn =1; - Cmd.CmdFmt.DataPresent =0; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_APP_CMD; // 0x37 = CMD55 - Cmd.CmdFmt.Rsvd1 = 0; - psha->CmdCompleteFlg =0; - Cmd.Arg = psha->RCA <<16; - - SdioHostSendCmd(&Cmd); - - result = SdioHostChkCmdComplete(psha, 50); - if (result != HAL_OK) - goto LABEL_EXIT; - - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - // проверим команду - if ((psha->Response[1] & 255) != CMD_APP_CMD) { - DBG_SDIO_ERR("Command index error!\n"); - goto LABEL_EXIT; - } - if (!(psha->Response[0] & 0x20)) { - DBG_SDIO_ERR("ACMD isn't expected!\n"); - goto LABEL_EXIT; - } - - result = SdioHostChkCmdInhibitCMD(); - if (result) - goto LABEL_EXIT; - result = SdioHostChkDataLineActive(); - if (result) - goto LABEL_EXIT; - - // прочитаем SCR - - //memset(StatusData, 0, 64); - - Cmd.CmdFmt.RespType = RSP_LEN_48; //2 - Cmd.CmdFmt.Rsvd0 =0; - Cmd.CmdFmt.CmdCrcChkEn =1; - Cmd.CmdFmt.CmdIdxChkEn =1; - Cmd.CmdFmt.DataPresent =1; - Cmd.CmdFmt.CmdType = NORMAL; - - psha->CmdCompleteFlg =0; - psha->XferCompleteFlg =0; - - Cmd.CmdFmt.CmdIdx = CMD_SEND_SCR; // ACMD51 - Cmd.CmdFmt.Rsvd1 =0; - Cmd.Arg = 0; - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if (result != HAL_OK) - goto LABEL_EXIT; - - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - result = SdioHostChkXferComplete(psha); - if (result != HAL_OK) { - if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & ERR_INT_STAT_ADMA) { - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = ERR_INT_STAT_ADMA; - } - if (result ==16) - return HAL_ERR_UNKNOWN; - - if (!HalSdioHostStopTransferRtl8195a(psha)) - DBG_SDIO_ERR("Stop transmission error!\n"); - - result = HAL_ERR_UNKNOWN; - goto LABEL_EXIT; - } - psha->SdSpecVer = StatusData[0]; - psha->SdSpecVer &= 0x0f; // SCR.59:56 - if (psha->SdSpecVer != 2) { - DBG_SDIO_ERR("Invalid Spec version %d\n", psha->SdSpecVer); - psha->SdSpecVer =2; - } - // 0: v1.0-1.01 - // 1: v1.1 - // 2: v2.00 - if (psha->SdSpecVer) { - result = SdioHostSwitchFunction(psha, 0, 15, (int)StatusData, - NULL); - if (result !=HAL_OK) - goto LABEL_EXIT; - // поддерживается ли функция переключения скорости ? - if (StatusData[13] & 2) { - // тест переключения скорости - result = SdioHostSwitchFunction(psha, 0, 1, (int)StatusData, - NULL); - if (result !=HAL_OK) - goto LABEL_EXIT; - // тест переключения успешен ? - if ((StatusData[16] & 0xF) != 1) { - result= HAL_ERR_UNKNOWN; - DBG_SDIO_ERR("\"High-Speed\" can't be switched!\n"); - goto LABEL_EXIT; - } - // переключаем - result = SdioHostSwitchFunction(psha, 1, 1, (int) StatusData, - NULL); - if (result !=HAL_OK) - goto LABEL_EXIT; - - // переключилось ? - if ((StatusData[16] & 0xF) != 1) { - result= HAL_ERR_UNKNOWN; - DBG_SDIO_ERR("Card changes to High-Speed fail!\n"); - goto LABEL_EXIT; - } - // задержка перед переключением не менее 8*SDclk - HalDelayUs(20); - // включаем максимальную частоту - result = SdioHostSdClkCtrl(psha, 1, BASE_CLK); - if (result != HAL_OK) { - DBG_SDIO_ERR("Host changes to High-Speed fail!\n"); - goto LABEL_EXIT; - } - -#if 0 - // если в хосте включить бит High Speed mode - не работает совсем - // без High Speed mode работает стабильно на 20МГц и нестабильно на 41 - HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) &= ~CLK_CTRL_SD_CLK_EN; - HAL_SDIOH_REG8(REG_SDIO_HOST_HOST_CTRL)|= 1<<2; - HalDelayUs(5); - HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) |= CLK_CTRL_SD_CLK_EN; -#endif - HalDelayUs(5); - } - else { - DBG_SDIO_INFO("This card doesn't support \"High-Speed Function\" and can't change to high-speed...\n"); - goto LABEL_EXIT; - } - } - else { - DBG_SDIO_INFO("This card doesn't support CMD6 and can't change to high-speed...\n"); - goto LABEL_EXIT; - } - - - LABEL_EXIT: - //if (StatusData) - // free(StatusData); - - return result; -} -#endif - -#if 1 -HAL_Status HalSdioHostReadBlocksDmaRtl8195a(IN void *Data, IN uint64_t ReadAddr, - IN uint32_t BlockCnt) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - SDIO_HOST_CMD Cmd; - HAL_Status result; - ADMA2_DESC_FMT *admadesc_ptr; - uint64_t sd_read_addr = ReadAddr; - - - if (BlockCnt >= 0x10000 || (psha == NULL)) - return HAL_ERR_PARA; - - admadesc_ptr = psha->AdmaDescTbl; - // проверка валидности адреса и дескриптора ADMA2 - result = CheckSramAddress((void*)admadesc_ptr) | - CheckSramAddress((void*)admadesc_ptr->Addr1); - if (result) - return result; - - // адрес в байтах или блоках ? - if (psha->IsSdhc) - sd_read_addr =ReadAddr >> 9; // sdhc: адрес в блоках - - - HAL_SDIOH_REG32(REG_SDIO_HOST_ADMA_SYS_ADDR) = (uint32_t)admadesc_ptr; - HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_SIZE) = DATA_BLK_LEN; - result = SdioHostChkCmdInhibitCMD(); - if (result) { - DBG_SDIO_ERR("SDIO Err]SdioHostChkCmdInhibitCMD fail\n"); - return result; - } - result = SdioHostChkDataLineActive(); - if (result) { - DBG_SDIO_ERR("SDIO Err]SdioHostChkDataLineActive fail\n"); - return result; - } - - Cmd.CmdFmt.RespType =RSP_LEN_48; - Cmd.CmdFmt.CmdCrcChkEn =1; - Cmd.CmdFmt.CmdIdxChkEn =1; - Cmd.CmdFmt.DataPresent =1; - Cmd.CmdFmt.CmdType = NORMAL; - - psha->CmdCompleteFlg = 0; - psha->XferCompleteFlg = 0; - psha->ErrIntFlg =0; - Cmd.CmdFmt.Rsvd1 =0; - Cmd.CmdFmt.Rsvd0 =0; - Cmd.Arg = sd_read_addr & 0xffffffff; - - if (BlockCnt <= 1) { - // single block - Cmd.CmdFmt.CmdIdx = CMD_READ_SINGLE_BLOCK; - HAL_SDIOH_REG16(REG_SDIO_HOST_XFER_MODE) = XFER_MODE_DATA_XFER_DIR - | XFER_MODE_DMA_EN; // 17; - } - else { - // multiple block - Cmd.CmdFmt.CmdIdx = CMD_READ_MULTIPLE_BLOCK; - HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_CNT) = BlockCnt; - HAL_SDIOH_REG16(REG_SDIO_HOST_XFER_MODE) = XFER_MODE_MULT_SINGLE_BLK - | XFER_MODE_DATA_XFER_DIR - | XFER_MODE_AUTO_CMD12_EN - | XFER_MODE_BLK_CNT_EN - | XFER_MODE_DMA_EN; //0x37 =55 - } - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if (result) { - DBG_SDIO_ERR("SDIO Err]SdioHostChkCmdComplete timeout\n"); - return result; - } - - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - result = SdioHostChkXferComplete(psha); - if (!result) - return 0; - // data error - if (result != 16) { - if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & ERR_INT_STAT_ADMA) { - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = ERR_INT_STAT_ADMA; - if (HalSdioHostStopTransferRtl8195a(psha)) { - DBG_SDIO_ERR("SDIO Err]Stop transmission error!\n"); - } - } - } - return HAL_ERR_UNKNOWN; -} -#endif - -#if 0 -// так в sdk -//----- (000009CC) -------------------------------------------------------- -HAL_Status HalSdioHostReadBlocksDmaRtl8195a_sdk(IN void *Data, IN uint64_t ReadAddr, - IN uint32_t BlockCnt) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - SDIO_HOST_CMD Cmd; - HAL_Status result; - ADMA2_DESC_FMT *admadesc_ptr; - uint64_t sd_read_addr = ReadAddr; - - - //Cmd.CmdFmt.RespType = RSP_LEN_48_CHK_BUSY; - //Cmd.CmdFmt.Rsvd0 = 0; - //Cmd.CmdFmt.CmdCrcChkEn = 1; - //Cmd.CmdFmt.CmdIdxChkEn = 1; - //Cmd.CmdFmt.DataPresent = NO_DATA; - //Cmd.CmdFmt.CmdType = NORMAL; - //Cmd.CmdFmt.CmdIdx = CMD_SELECT_DESELECT_CARD; - //Cmd.CmdFmt.Rsvd1 = 0; - //Cmd.Arg = psha->RCA << 16; // card is addressed - - if (!psha) - return HAL_ERR_PARA; - if (BlockCnt >= 0x10000) - return HAL_ERR_PARA; - // проверка валидности адреса и дескриптора ADMA2 - admadesc_ptr = psha->AdmaDescTbl; - // проверим выравнивание адресов дескриптора на 32 бита - if ((uint32_t)admadesc_ptr <<30 || admadesc_ptr->Addr1 << 30) - return HAL_ERR_PARA; - // адрес в байтах или блоках ? - if (psha->IsSdhc) - sd_read_addr =ReadAddr >> 9; // sdhc: адрес в блоках - - while (1) { // loop 1 - while(1) { // loop 2 - // CMD17 READ_SINGLE_BLOCK - HAL_SDIOH_REG32(REG_SDIO_HOST_ADMA_SYS_ADDR) =admadesc_ptr; - HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_SIZE) = DATA_BLK_LEN; - if (BlockCnt != 1) - break; - HAL_SDIOH_REG16(REG_SDIO_HOST_XFER_MODE) = XFER_MODE_DATA_XFER_DIR - | XFER_MODE_DMA_EN; // 17; - - LABEL_18: - result = SdioHostChkCmdInhibitCMD(); - if (result) { - DBG_SDIO_ERR("SDIO Err]SdioHostChkCmdInhibitCMD fail\n"); - return result; - } - result = SdioHostChkDataLineActive(); - if (result) { - DBG_SDIO_ERR("SDIO Err]SdioHostChkDataLineActive fail\n"); - return result; - } - - //Cmd.CmdFmt = - // (SDIO_HOST_CMD_FMT) ((*(uint8_t *) &Cmd.CmdFmt & 0xF4 | 0x3A) - // & 0x3F); - Cmd.CmdFmt.RespType =RSP_LEN_48; - Cmd.CmdFmt.CmdCrcChkEn =1; - Cmd.CmdFmt.CmdIdxChkEn =1; - Cmd.CmdFmt.DataPresent =1; - Cmd.CmdFmt.CmdType = NORMAL; - - - // v12 = *((uint8_t *) &Cmd.CmdFmt + 1); - // *(uint8_t *) (v5 + 128) = 0; - // *(uint8_t *) (v5 + 129) = 0; - psha->CmdCompleteFlg = 0; - psha->XferCompleteFlg = 0; - psha->ErrIntFlg =0; - // *((uint8_t *) &Cmd.CmdFmt + 1) = v12 & 0xC0 | 0x11; - Cmd.CmdFmt.CmdIdx = CMD_READ_SINGLE_BLOCK; - Cmd.CmdFmt.Rsvd1 =0; - Cmd.CmdFmt.Rsvd0 =0; - // Cmd.Arg = v4; - Cmd.Arg = sd_read_addr & 0xffffffff; - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 500);//, v13); - if (result) { - DBG_SDIO_ERR("SDIO Err]SdioHostChkCmdComplete timeout\n"); - goto LABEL_21; - } - - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - result = SdioHostChkXferComplete(psha); - if (!result) - return 0; - if (result != 16) { - if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & ERR_INT_STAT_ADMA) { - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = ERR_INT_STAT_ADMA; - if (HalSdioHostStopTransferRtl8195a(psha)) { - DBG_SDIO_ERR("SDIO Err]Stop transmission error!\n"); - } - } - return HAL_ERR_UNKNOWN; - } - } // loop 2 end - - // CMD18 READ_MULTIPLE_ BLOCK - - HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_CNT) = BlockCnt; - HAL_SDIOH_REG16(REG_SDIO_HOST_XFER_MODE) = XFER_MODE_MULT_SINGLE_BLK - | XFER_MODE_DATA_XFER_DIR - | XFER_MODE_AUTO_CMD12_EN - | XFER_MODE_BLK_CNT_EN - | XFER_MODE_DMA_EN; //0x37 =55 - if (BlockCnt <= 1) - goto LABEL_18; - result = SdioHostChkCmdInhibitCMD(); - if (result) - return result; - result = SdioHostChkDataLineActive(); - if (result) - return result; - //Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(uint8_t *) &Cmd.CmdFmt & 0xF4 | 0x3A) - // & 0x3F); - Cmd.CmdFmt.RespType =RSP_LEN_48; - Cmd.CmdFmt.CmdCrcChkEn =1; - Cmd.CmdFmt.CmdIdxChkEn =1; - Cmd.CmdFmt.DataPresent =1; - Cmd.CmdFmt.CmdType = NORMAL; - - // *(uint8_t *) (v5 + 128) = 0; - // *(uint8_t *) (v5 + 129) = 0; - // *(uint8_t *) (v5 + 130) = 0; - psha->CmdCompleteFlg = 0; - psha->XferCompleteFlg = 0; - psha->ErrIntFlg =0; - - // v7 = *((uint8_t *) &Cmd.CmdFmt + 1); - // *((uint8_t *) &Cmd.CmdFmt + 1) = v7 & 0xC0 | 0x12; - Cmd.CmdFmt.CmdIdx = CMD_READ_MULTIPLE_BLOCK; - Cmd.CmdFmt.Rsvd1 =0; - Cmd.CmdFmt.Rsvd0 =0; - // Cmd.Arg = v4; - Cmd.Arg = sd_read_addr & 0xffffffff; - SdioHostSendCmd(&Cmd); - - result = SdioHostChkCmdComplete(psha, 50); - if (!result) { - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - result = SdioHostChkXferComplete(psha); - if (!result) - break; - continue; - } - - LABEL_21: - if (result != 16) - return result; - } // loop 1 - if (!(HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & ERR_INT_STAT_DATA_CRC)) - return 0; - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = ERR_INT_STAT_DATA_CRC; - DBG_SDIO_ERR("Data CRC error!\n"); - return HAL_ERR_UNKNOWN; -} -#endif - - - -#if 1 -//------------------------------------------------------------------------- -// проверно запись работает, обработку ошибок нет возможности проверить -HAL_Status HalSdioHostWriteBlocksDmaRtl8195a(IN void *Data, IN uint64 WriteAddr, - IN uint32_t BlockCnt) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status result; - SDIO_HOST_CMD Cmd; - PADMA2_DESC_FMT admadesc_ptr; - uint64_t sd_write_addr = WriteAddr; - uint32_t t1; - - if (!psha) - return HAL_ERR_PARA; - if ((BlockCnt >= 0x10000) || (BlockCnt == 0)) - return HAL_ERR_PARA; - // проверка валидности адреса и дескриптора ADMA2 - admadesc_ptr = psha->AdmaDescTbl; - // проверим адрес дескриптора ADMA2 - if (CheckSramAddress((void *)admadesc_ptr) || CheckSramAddress((void *)admadesc_ptr->Addr1)) - return HAL_ERR_PARA; - // адрес в байтах или блоках ? - if (psha->IsSdhc) - sd_write_addr >>= 9; // sdhc: адрес в блоках - - // ждем готовность карты - t1 = HalTimerOp.HalTimerReadCount(1); - while (!(HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) & PRES_STATE_DAT0_SIGNAL_LEVEL)) { - result = SdioHostIsTimeout(t1, SD_CHK_TIMEOUT*5); - if (result == HAL_TIMEOUT) { - DBG_SDIO_ERR("card busy TIMEOUT\n"); - return result; - } - } - - HAL_SDIOH_REG32(REG_SDIO_HOST_ADMA_SYS_ADDR)= (uint32_t)admadesc_ptr; - HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_SIZE) = DATA_BLK_LEN; // 512 - HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_CNT) = BlockCnt; - - - result = SdioHostChkCmdInhibitCMD(); - if (result != HAL_OK) - return result; - result = SdioHostChkDataLineActive(); - if (result != HAL_OK) - return result; - - psha->CmdCompleteFlg = 0; - psha->XferCompleteFlg = 0; - - Cmd.CmdFmt.RespType =RSP_LEN_48; - Cmd.CmdFmt.CmdCrcChkEn =1; - Cmd.CmdFmt.CmdIdxChkEn =1; - Cmd.CmdFmt.DataPresent =1; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.Rsvd1 =0; - Cmd.CmdFmt.Rsvd0 =0; - Cmd.Arg = sd_write_addr & 0xffffffff; - - if (BlockCnt == 1) { - Cmd.CmdFmt.CmdIdx = CMD_WRITE_BLOCK; - HAL_SDIOH_REG16(REG_SDIO_HOST_XFER_MODE) = - XFER_MODE_DMA_EN; - } - else { - Cmd.CmdFmt.CmdIdx = CMD_WRITE_MULTIPLE_BLOCK; - HAL_SDIOH_REG16(REG_SDIO_HOST_XFER_MODE) = - XFER_MODE_DMA_EN - | XFER_MODE_BLK_CNT_EN - | XFER_MODE_AUTO_CMD12_EN - | XFER_MODE_MULT_SINGLE_BLK; - } - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if (result == HAL_OK) { - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - // WP violation ? - if (psha->Response[0] & (1<<26)) { - DBG_SDIO_ERR("Write protect violation!\n"); - return HAL_ERR_PARA; - } - result = SdioHostChkXferComplete(psha); - if (result != HAL_OK) { - if (result != 16) { - t1= HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS); - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = t1; - - if (HalSdioHostStopTransferRtl8195a(psha)) - DBG_SDIO_ERR("Stop transmission error!\n"); - - if (t1 & ERR_INT_STAT_DATA_TIMEOUT) - return HAL_TIMEOUT; - } - return HAL_ERR_UNKNOWN; - } - } - return result; -} -#endif - - - - - - - - -#if 1 -//----- SdioHostGetCSD -HAL_Status SdioHostGetCSD(void *Data) -{ - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status result; - SDIO_HOST_CMD Cmd; - - if (psha) { - result = SdioHostChkCmdInhibitCMD(); - if (result == HAL_OK) { - - Cmd.CmdFmt.RespType = RSP_LEN_136; - //Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 0; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_SEND_CSD; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = psha->RCA << 16; - - psha->CmdCompleteFlg = 0; - psha->ErrIntFlg =0; - psha->XferType = SDIO_XFER_NOR; - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if(result == HAL_OK) { - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - psha->Csd[15] = 1; - uint32 x = psha->Response[3]; - psha->Csd[0] = x >> 16; - psha->Csd[1] = x >> 8; - psha->Csd[2] = x; - x = psha->Response[2]; - psha->Csd[3] = x >> 24; - psha->Csd[4] = x >> 16; - psha->Csd[5] = x >> 8; - psha->Csd[6] = x; - x = psha->Response[1]; - psha->Csd[7] = x >> 24; - psha->Csd[8] = x >> 16; - psha->Csd[9] = x >> 8; - psha->Csd[10] = x; - x = psha->Response[0]; - psha->Csd[11] = x >> 24; - psha->Csd[12] = x >> 16; - psha->Csd[13] = x >> 8; - psha->Csd[14] = x; - } - } - } else - result = HAL_ERR_PARA; - return result; -} -#endif - -#if 1 -// проверно - работает -HAL_Status HalSdioHostGetCardStatusRtl8195a(IN void *Data) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - SDIO_HOST_CMD Cmd; - HAL_Status result; - uint8_t retrycount; - - if (psha) { - retrycount =0; - LABEL10: - result = SdioHostChkCmdInhibitCMD(); - if (result) - return result; - // Send Status command - Cmd.Arg = psha->RCA << 16; - Cmd.CmdFmt.CmdIdx = CMD_SEND_STATUS; - Cmd.CmdFmt.RespType = RSP_LEN_48; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 1; - Cmd.CmdFmt.DataPresent = 0; - Cmd.CmdFmt.CmdType = 0; - psha->XferType = SDIO_XFER_NOR; - - psha->CmdCompleteFlg = 0; - psha->ErrIntFlg =0; - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); // timeout = 50*31us - - if ((result == 16) || (psha->errType == SDIO_ERR_CMD_TIMEOUT)) { - //rtl_printf("R%d\n", retrycount); - if (++retrycount < 3) - goto LABEL10; - } - if (result) - return result; - - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - // check index - if ( (psha->Response[1] & 0x3f) == CMD_SEND_STATUS) { - psha->CardStatus = psha->Response[0]; // card status - psha->CardCurState = (psha->Response[0] >> 9) & 0xF; // CURRENT_STATE only - result = HAL_OK; - } - else - result = HAL_ERR_UNKNOWN; - } - else - result = HAL_ERR_PARA; - return result; -} -#endif - - -#if 1 -// проверно - работает -// перед вызовом должна быть выделена память для дескрипторов ADMA2 -// psha->AdmaDescTbl -HAL_Status HalSdioHostGetSdStatusRtl8195a(IN void *Data) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - SDIO_HOST_CMD Cmd; - HAL_Status result; - PADMA2_DESC_FMT pAdmaDescTbl; - - if (!psha) - return HAL_ERR_PARA; - pAdmaDescTbl = psha->AdmaDescTbl; - - if ((pAdmaDescTbl == NULL) || (uint32_t)pAdmaDescTbl & 3) - return HAL_ERR_PARA; - - pAdmaDescTbl->Len1 = 64; - pAdmaDescTbl->Attrib1.End=1; - pAdmaDescTbl->Attrib1.Act1=0; - pAdmaDescTbl->Attrib1.Act2=1; - pAdmaDescTbl->Addr1 = (uint32_t) &psha->SdStatus[0]; - pAdmaDescTbl->Attrib1.Valid =1; - - //memset(&psha->SdStatus[0], 0x55, SD_STATUS_LEN); - - result = SdioHostChkCmdInhibitCMD(); - if (result) - return result; - - Cmd.CmdFmt.RespType = RSP_LEN_48; //2 - Cmd.CmdFmt.Rsvd0 =0; - Cmd.CmdFmt.CmdCrcChkEn =1; - Cmd.CmdFmt.CmdIdxChkEn =1; - Cmd.CmdFmt.DataPresent =0; - Cmd.CmdFmt.CmdType = NORMAL; - - Cmd.CmdFmt.CmdIdx = CMD_APP_CMD; // 0x37 = CMD55 - Cmd.CmdFmt.Rsvd1 = 0; - - psha->CmdCompleteFlg =0; - - Cmd.Arg = psha->RCA <<16; - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if (result) - return result; - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - // проверим команду - if ((psha->Response[1] & 255) != CMD_APP_CMD) { - DBG_SDIO_ERR("Command index error!\n"); - return HAL_ERR_UNKNOWN; - } - if (!(psha->Response[0] & 0x20)) { - DBG_SDIO_ERR("ACMD isn't expected!\n"); - return HAL_ERR_UNKNOWN; - } - - result = SdioHostChkCmdInhibitCMD(); - if (result) - return result; - result = SdioHostChkDataLineActive(); - if (result) - return result; - - HAL_SDIOH_REG32(REG_SDIO_HOST_ADMA_SYS_ADDR) = (uint32_t)pAdmaDescTbl; - HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_SIZE) = 64; - - HAL_SDIOH_REG16(REG_SDIO_HOST_XFER_MODE) = - XFER_MODE_DATA_XFER_DIR - | XFER_MODE_AUTO_CMD12_EN - | XFER_MODE_BLK_CNT_EN - | XFER_MODE_DMA_EN ; //17; - - HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_CNT) =1; - - Cmd.CmdFmt.RespType = RSP_LEN_48; //2 - Cmd.CmdFmt.Rsvd0 =0; - Cmd.CmdFmt.CmdCrcChkEn =1; - Cmd.CmdFmt.CmdIdxChkEn =1; - Cmd.CmdFmt.DataPresent =1; - Cmd.CmdFmt.CmdType = NORMAL; - - psha->CmdCompleteFlg =0; - psha->XferCompleteFlg =0; - - Cmd.CmdFmt.CmdIdx = CMD_SEND_STATUS; // ACMD13 - Cmd.CmdFmt.Rsvd1 =0; - - Cmd.Arg = 0; - //Cmd.Arg = psha->RCA <<16; // без разницы - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if (result) - return result; - if (!(psha->Response[0] & (1<<5)) && ((psha->Response[1] & 255)!=CMD_SEND_STATUS)) { - return HAL_ERR_UNKNOWN; - } - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - result = SdioHostChkXferComplete(psha); - if (result) { - if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & ERR_INT_STAT_ADMA) { - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = ERR_INT_STAT_ADMA; - } - if (result ==16) - return HAL_ERR_UNKNOWN; - - if (!HalSdioHostStopTransferRtl8195a(psha)) - DBG_SDIO_ERR("Stop transmission error!\n"); - - return HAL_ERR_UNKNOWN; - } - return result; -} -#endif - - - - - -#if 1 -// проверно - работает -HAL_Status HalSdioHostIrqInitRtl8195a(IN void *Data) // PIRQ_HANDLE Data -{ - HAL_Status result; - PIRQ_HANDLE pih = (PIRQ_HANDLE)Data; - if (pih) { - pih->Data = (uint32_t)Data; - pih->IrqNum = SDIO_HOST_IRQ; - pih->IrqFun = SdioHostIsrHandle; - pih->Priority = 6; - VectorIrqRegisterRtl8195A((PIRQ_HANDLE) pih); - VectorIrqEnRtl8195A((PIRQ_HANDLE) pih); - result = HAL_OK; - } else - result = HAL_ERR_PARA; - return result; -} - - -//----- HalSdioHostInitHostRtl8195a -// проверно - работает -HAL_Status HalSdioHostInitHostRtl8195a(IN void *Data) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - uint32_t reg; - int32_t x; - // переменная для фиктивного чтения. - // после части опeраций записи выпоняют чтение, результат чтения игнорируют. - // зачем так сделано неизвестно, возможно попытка обойти буферизацию - // в шинном коммутаторе - - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0, - HAL_READ32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0) & (~BIT_SOC_ACTCK_SDIO_DEV_EN)); - //reg = HAL_READ32(PERI_ON_BASE, 0x50000); // dummy read - - HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, - HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN) & (~BIT_SOC_HCI_SDIOD_ON_EN)); - //reg = HAL_READ32(PERI_ON_BASE, 0x50000); // dummy read - - HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, - HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN) & (~BIT_SOC_HCI_SDIOD_OFF_EN)); - - HAL_WRITE32(PERI_ON_BASE, REG_HCI_PINMUX_CTRL, - HAL_READ32(PERI_ON_BASE, REG_HCI_PINMUX_CTRL) & (~BIT_HCI_SDIOD_PIN_EN)); - - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0, - HAL_READ32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0) | BIT_SOC_ACTCK_SDIO_HST_EN); - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0, - HAL_READ32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0) | BIT_SOC_SLPCK_SDIO_HST_EN); - - HalPinCtrlRtl8195A(SDIOH, 0, 1); - //reg = HAL_READ32(PERI_ON_BASE, 0x50000); // dummy read - - HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, - HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN) | BIT_SOC_HCI_SDIOH_EN); - HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) |= SW_RESET_FOR_ALL; //4005802F |= 1; - - x = 1000; - while (HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) & SW_RESET_FOR_ALL) { - if (x-- == 0) { - DBG_SDIO_ERR("SD host initialization FAIL!\n"); - return HAL_TIMEOUT; - } - } - HalSdioHostIrqInitRtl8195a(&psha->IrqHandle); - - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN) - = NOR_INT_STAT_EN_CMD_COMP - | NOR_INT_STAT_EN_XFER_COMP - | NOR_INT_STAT_EN_CARD_REMOVAL - | NOR_INT_SIG_EN_CARD_INSERT; // 0xC3; - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_SIG_EN) - = NOR_INT_SIG_EN_CMD_COMP - | NOR_INT_SIG_EN_XFER_COMP - | NOR_INT_SIG_EN_CARD_REMOVAL - | NOR_INT_SIG_EN_CARD_INSERT; // 0xc3; - - reg = ERR_INT_STAT_EN_CMD_TIMEOUT - | ERR_INT_STAT_EN_CMD_CRC - | ERR_INT_STAT_EN_CMD_END_BIT - | ERR_INT_STAT_EN_CMD_IDX - | ERR_INT_STAT_EN_DATA_TIMEOUT - | ERR_INT_STAT_EN_DATA_CRC - | ERR_INT_STAT_EN_DATA_END_BIT - | ERR_INT_STAT_EN_AUTO_CMD; // 0x17F; - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS_EN) = reg; - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_SIG_EN) = reg; - - HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) |= CLK_CTRL_INTERAL_CLK_EN; - - x = 1000; - while (!(HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) - & CLK_CTRL_INTERAL_CLK_STABLE)) { - if (x-- == 0) { - DBG_SDIO_ERR("SD host initialization FAIL!\n"); - return HAL_TIMEOUT; - } - } - HAL_SDIOH_REG32(0x1000) |= 0x400; // 40059000 |= 0x400; - - if (HAL_SDIOH_REG32(REG_SDIO_HOST_CAPABILITIES) & CAPA_ADMA2_SUPPORT) - HAL_SDIOH_REG16(REG_SDIO_HOST_HOST_CTRL) = 0x10; // 32-bit Address ADMA2 is selected - HAL_SDIOH_REG8(REG_SDIO_HOST_TIMEOUT_CTRL) = 0x0E; // TMCLK x 2^27 - return HAL_OK; -} - - -//----- HalSdioHostDeInitRtl8195a -HAL_Status HalSdioHostDeInitRtl8195a(IN void *Data) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status result; - - if (!psha) - return HAL_ERR_PARA; - - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) &= ~PWR_CTRL_SD_BUS_PWR; - result = SdioHostSdClkCtrl(psha, 0, BASE_CLK); - if (result == HAL_OK) { - VectorIrqDisRtl8195A(&psha->IrqHandle); - VectorIrqUnRegisterRtl8195A(&psha->IrqHandle); - HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) &= ~CLK_CTRL_INTERAL_CLK_EN; - HAL_SDIOH_REG32(0x1000) &= 0xFFFFFBFF; // v40059000 - HAL_WRITE32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN, - HAL_READ32(PERI_ON_BASE, REG_SOC_HCI_COM_FUNC_EN) & (~BIT_SOC_HCI_SDIOH_EN)); - HalPinCtrlRtl8195A(SDIOH, 0, 0); - ACTCK_SDIOH_CCTRL(OFF); - SLPCK_SDIOH_CCTRL(OFF); - } - return result; -} - - - -//----- HalSdioHostStopTransferRtl8195a -HAL_Status HalSdioHostStopTransferRtl8195a(IN void *Data) { -// HAL_Status result; - SDIO_HOST_CMD Cmd; - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - uint32_t x; - uint8_t retrycount; - - if (psha) { - // asynchronous abort sequence - // CMD12 -> CMD13 -> check tran -> repeat... - - //result = SdioHostChkCmdInhibitCMD(); //(uint32_t) Data); - //if (result == HAL_OK) { - //result = SdioHostChkCmdInhibitDAT(); - //if (result == HAL_OK) { - - //psha->CmdCompleteFlg = 0; - //psha->XferType = SDIO_XFER_NOR; - //psha->XferCompleteFlg = 0; - retrycount = 0; - do { - SdioHostChkCmdInhibitCMD(); - Cmd.CmdFmt.RespType = RSP_LEN_48_CHK_BUSY; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 0; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = ABORT; - Cmd.CmdFmt.CmdIdx = CMD_STOP_TRANSMISSION; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = 0; - - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = 0xffff; - SdioHostSendCmd(&Cmd); - x=HalTimerOp.HalTimerReadCount(1); - while (SdioHostIsTimeout(x,50) !=HAL_TIMEOUT) ; - - if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS)) { - retrycount++; - } - else - retrycount = 101; - } - while (retrycount < 100); - DBG_SDIO_ERR("Stop transfer retry %d\n", retrycount); - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = 0xffff; - - //x = 1000; - //HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) = SW_RESET_FOR_ALL; - //while (HAL_SDIOH_REG8(REG_SDIO_HOST_SW_RESET) & SW_RESET_FOR_ALL) { - // if (x-- == 0) { - // DBG_SDIO_ERR("SD host initialization FAIL!\n"); - // return HAL_TIMEOUT; - // } - - return HAL_OK; - } - //} - //} - return HAL_ERR_PARA; -} -#endif - - -#if 1 -//----- SdioHostCardSelection -// проверено - работает -HAL_Status SdioHostCardSelection(void *Data, int Select) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status result; - SDIO_HOST_CMD Cmd; // [sp+0h] [bp-18h]@1 - - if (psha) { - result = SdioHostChkCmdInhibitCMD(); - if (result == HAL_OK) { - psha->CmdCompleteFlg = 0; - psha->XferType = SDIO_XFER_NOR; - psha->XferCompleteFlg = 0; - psha->ErrIntFlg =0; - - if (Select == 1) { - result = SdioHostChkCmdInhibitDAT(); - if (result == HAL_OK) { - - Cmd.CmdFmt.RespType = RSP_LEN_48_CHK_BUSY; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 1; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_SELECT_DESELECT_CARD; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = psha->RCA << 16; // card is addressed - - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if(result == HAL_OK) { - result = SdioHostChkXferComplete(psha); - if(result != HAL_OK) return result; - result = SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - if(result != HAL_OK) return result; - if((psha->Response[1] & 255) == 7) { - // - return result; - } - else { - DBG_SDIO_ERR("Command index error!\n"); - result = HAL_ERR_UNKNOWN; - } - } - } - } else { - Cmd.CmdFmt.RespType = NO_RSP; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 0; - Cmd.CmdFmt.CmdIdxChkEn = 0; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_SELECT_DESELECT_CARD; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = 0; // card is not addressed - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - } - } - } else result = HAL_ERR_PARA; - return result; -} -#endif - - -//------------------------------------------------------------------------- -// проверено - работает -HAL_Status HalSdioHostEraseRtl8195a(IN void *Data, IN uint64_t StartAddr, -IN uint64_t EndAddr) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status result; - SDIO_HOST_CMD Cmd; - uint64_t start = StartAddr; - uint64_t end = EndAddr; - - if (!psha) - return HAL_ERR_PARA; - - if (psha->IsSdhc) { - start >>=9; - end >>=9; - } - result = SdioHostChkCmdInhibitCMD();//EndAddr); - if (result) - return result; - - // CMD32 - psha->CmdCompleteFlg = 0; - psha->XferType = SDIO_XFER_NOR; - - Cmd.CmdFmt.RespType = RSP_LEN_48; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 1; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_ERASE_WR_BLK_START; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = start; - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if (result) { - return result; - } - result = SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - if ((psha->Response[1] & 255) != CMD_ERASE_WR_BLK_START) { - DBG_SDIO_ERR("Command index error!\n"); - return HAL_ERR_UNKNOWN; - } - - result = SdioHostChkCmdInhibitCMD(); - if (result) - return result; - - // CMD33 - psha->CmdCompleteFlg = 0; - - Cmd.CmdFmt.RespType = RSP_LEN_48; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 1; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_ERASE_WR_BLK_END; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = end; - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if (result) { - return result; - } - result = SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - if ((psha->Response[1] & 255) != CMD_ERASE_WR_BLK_END) { - DBG_SDIO_ERR("Command index error!\n"); - return HAL_ERR_UNKNOWN; - } - - result = SdioHostChkCmdInhibitCMD(); - if (result) - return result; - result = SdioHostChkCmdInhibitDAT(); - if (result) - return result; - - // CMD38 - psha->CmdCompleteFlg = 0; - psha->XferCompleteFlg =0; - Cmd.CmdFmt.RespType = RSP_LEN_48_CHK_BUSY; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 1; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_ERASE; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = 0; - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if (!result) { - result = SdioHostChkXferComplete(psha); - } - - return result; -} - - - -//------------------------------------------------------------------------- -// проверено не полностью - нет карты с защитой записи в CSD -#if 1 -HAL_Status HalSdioHostGetWriteProtectRtl8195a(IN void *Data) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status result; -// SDIO_HOST_CMD Cmd; // [sp+0h] [bp-18h]@1 - - if (!psha) - return HAL_ERR_PARA; - - result = HalSdioHostGetCardStatusRtl8195a(psha); - if (result) { - DBG_SDIO_ERR("Get card status fail!\n"); - return result; - } - - if (psha->CardCurState ==3) { - LABEL_10: - result = SdioHostGetCSD(psha); - if (!result) { - // Permanent write protect - CSD_bit[12:12] - //psha->IsWriteProtect = ((unsigned int) *((uint8_t *)psha + 126) >> 4) & 1; - psha->IsWriteProtect = (unsigned int) (psha->Csd[14] >> 4) & 1; - - result = SdioHostCardSelection(psha, 1); - // now card state is 4 (tran) - return result; - } - DBG_SDIO_ERR("Get CSD fail!\n"); - return result; - } - if (psha->CardCurState == 4 || psha->CardCurState == 5) { - result = SdioHostCardSelection(psha, 0); // card is not addressed - if (result) { - DBG_SDIO_ERR("Card selection fail!\n"); - return result; - } - // now card state is 3 (stby) - goto LABEL_10; - } - DBG_SDIO_ERR("Wrong card state!\n"); - return HAL_ERR_UNKNOWN; -} -#endif - -#if 1 -HAL_Status HalSdioHostSetWriteProtectRtl8195a(IN void *Data, IN uint8_t Setting) { - DBG_SDIO_ERR("HalSdioHostSetWriteProtectRtl8195a is not implemented!\n"); - return HAL_ERR_UNKNOWN; -} -#endif - - - -#if 1 -static HAL_Status HalSdioHostACMD41(PHAL_SDIO_HOST_ADAPTER psha, uint32_t Arg) { - HAL_Status result; - SDIO_HOST_CMD Cmd; - - result = SdioHostChkCmdInhibitCMD();//v9); - if (result) - return result; - // CMD55 - psha->CmdCompleteFlg = 0; - - Cmd.CmdFmt.RespType = RSP_LEN_48; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 1; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_APP_CMD; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = 0; - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 500); - if (result) { - DBG_SDIO_ERR("Get OCR fail!\n"); - return result; - } - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - - result = HAL_ERR_UNKNOWN; - // проверим команду - if ((psha->Response[1] & 255) != CMD_APP_CMD) { - DBG_SDIO_ERR("Command index error!\n"); - return result; - } - if (!(psha->Response[0] & 0x20)) { - DBG_SDIO_ERR("ACMD isn't expected!\n"); - return result; - } - - result = SdioHostChkCmdInhibitCMD(); - if (result) { - DBG_SDIO_ERR("Get OCR fail!\n"); - return result; - } - - Cmd.CmdFmt.RespType = RSP_LEN_48; //2 - Cmd.CmdFmt.Rsvd0 =0; - Cmd.CmdFmt.CmdCrcChkEn =0; - Cmd.CmdFmt.CmdIdxChkEn =0; - Cmd.CmdFmt.DataPresent =0; - Cmd.CmdFmt.CmdType = NORMAL; - - psha->CmdCompleteFlg =0; - - Cmd.CmdFmt.CmdIdx = CMD_SD_SEND_OP_COND; // ACMD41 - Cmd.CmdFmt.Rsvd1 =0; - Cmd.Arg = Arg; - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 500); - if (result) { - DBG_SDIO_ERR("Get OCR fail!\n"); - return result; - } - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - return result; -} - -//------------------------------------------------------------------------- -// проверено - работает -HAL_Status HalSdioHostInitCardRtl8195a(IN void *Data) { - PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - HAL_Status result; - SDIO_HOST_CMD Cmd; - uint32_t retrycount; - - if (!psha) { - result = HAL_ERR_PARA; - goto LABEL_115; - }; - - result = SdioHostChkCmdInhibitCMD(); - psha->XferType = SDIO_XFER_NOR; - // карта может находится в непределенном состоянии поэтому - // подаем CMD0 всегда - // в sdk CMD0 подается по условию - //if (result) { - psha->CmdCompleteFlg = 0; - psha->XferType = SDIO_XFER_NOR; - psha->XferCompleteFlg = 0; - - // Reset card - Cmd.CmdFmt.RespType = NO_RSP; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 0; - Cmd.CmdFmt.CmdIdxChkEn = 0; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_GO_IDLE_STATE; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = 0; - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 500); - if (result) { - DBG_SDIO_ERR("Reset sd card fail!\n"); - goto LABEL_115; - } - //} - - result = SdioHostChkCmdInhibitCMD(); - if (!result) { - psha->CmdCompleteFlg = 0; - // CMD8 - Cmd.CmdFmt.RespType = RSP_LEN_48; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 1; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_SEND_IF_COND; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = 0x1aa; // Voltage Supplied = 2.7...3.6 Check pattern = 0xaa - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 500); - - if (result) { - DBG_SDIO_ERR("Voltage check fail!\n"); - goto LABEL_115; - } - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - - result = HAL_ERR_UNKNOWN; - if ((psha->Response[1] & 255) != CMD_SEND_IF_COND) { - DBG_SDIO_ERR("Command index error!\n"); - goto LABEL_115; - } - if ((psha->Response[0] & 255) !=0xaa) { - DBG_SDIO_ERR("Echo-back of check pattern: %X\n"); - goto LABEL_115; - } - if (!(psha->Response[0] & 0x100)) { - DBG_SDIO_ERR("Voltage accepted error!\n"); - goto LABEL_115; - } - } - else { - DBG_SDIO_ERR("Voltage check fail!\n"); - goto LABEL_115; - } - - result = HalSdioHostACMD41(psha, 0); - if (result) { - DBG_SDIO_ERR("Get OCR fail!\n"); - goto LABEL_115; - } - //*((uint32_t *) v3 + 9) = *((uint32_t *) v3 + 5) & 0xFFFFFF; - psha->CardOCR = psha->Response[0] & 0xFFFFFF; - - // ожем окончание инициализации карты - retrycount = ACMD41_INIT_TIMEOUT / ACMD41_POLL_INTERVAL; // 1s max - while (--retrycount) { - result = HalSdioHostACMD41(psha, 0x403C0000); //1077673984 - if (result) { - DBG_SDIO_ERR("Get OCR fail!\n"); - goto LABEL_115; - } - if (psha->Response[0] & 0x80000000) - break; - HalDelayUs(ACMD41_POLL_INTERVAL); // 10ms - } // while - if (retrycount ==0) { - result = HAL_TIMEOUT; - goto LABEL_115; - } - // сейчас карта в состоянии ready - - // проверим Card Capacity Status - if (psha->Response[0] & 0x40000000) { - psha->IsSdhc= 1; - DBG_SDIO_INFO("This is a SDHC card\n"); - } - else { - psha->IsSdhc= 0; - DBG_SDIO_INFO("This is a SDSC card\n"); - } - - HalDelayUs(2000); - result = SdioHostChkCmdInhibitCMD(); - if (result) { - goto LABEL_115; - } - // CMD2 - psha->CmdCompleteFlg = 0; - Cmd.CmdFmt.RespType = RSP_LEN_136; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 0; - Cmd.CmdFmt.CmdIdxChkEn = 0; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_ALL_SEND_CID; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = 0; - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 500); - if (result) { - DBG_SDIO_ERR("Get CID fail!\n"); - goto LABEL_115; - } - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); // Card IDentification (CID) ингорируем - // сейчас карта в состоянии ident - - result = SdioHostChkCmdInhibitCMD(); - if (result) { - goto LABEL_115; - } - - // CMD3 - psha->CmdCompleteFlg = 0; - - Cmd.CmdFmt.RespType = RSP_LEN_48; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 1; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_SEND_RELATIVE_ADDR; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = 0; - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 500); - if (result) { - DBG_SDIO_ERR("Get RCA fail!\n"); - goto LABEL_115; - } - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - if ((psha->Response[1] & 255) != CMD_SEND_RELATIVE_ADDR) { - DBG_SDIO_ERR("Command index error!\n"); - result = HAL_ERR_UNKNOWN; - goto LABEL_115; - } - // сейчас карта в состоянии stby - - psha->RCA = psha->Response[0] >> 16; // relative card address - - SdioHostSdClkCtrl(psha, 1, BASE_CLK_DIVIDED_BY_2); - HalDelayUs(1000); - - result = SdioHostGetCSD(psha); - if (result) { - DBG_SDIO_ERR("Get CSD fail!\n"); - goto LABEL_115; - } - result = SdioHostCardSelection(psha, 1); - if (result) { - DBG_SDIO_ERR("Select sd card fail!\n"); - goto LABEL_115; - } - result = SdioHostChkCmdInhibitCMD();//0); - if (result) { - goto LABEL_115; - } - - // переключение интерфейса в 4-х битный режим -//#if 1 - // CMD55 - psha->CmdCompleteFlg = 0; - - Cmd.CmdFmt.RespType = RSP_LEN_48; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 1; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = CMD_APP_CMD; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = psha->RCA << 16; - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if (result) { - DBG_SDIO_ERR("Get OCR fail!\n"); - goto LABEL_115; - } - SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - - result = HAL_ERR_UNKNOWN; - // проверим команду - if ((psha->Response[1] & 255) != CMD_APP_CMD) { - DBG_SDIO_ERR("Command index error!\n"); - goto LABEL_115; - } - if (!(psha->Response[0] & 0x20)) { - DBG_SDIO_ERR("ACMD isn't expected!\n"); - goto LABEL_115; - } - - result = SdioHostChkCmdInhibitCMD(); - if (result) { - goto LABEL_115; - } - - //ACMD6 - psha->CmdCompleteFlg = 0; - - Cmd.CmdFmt.RespType = RSP_LEN_48; - Cmd.CmdFmt.Rsvd0 = 0; - Cmd.CmdFmt.CmdCrcChkEn = 1; - Cmd.CmdFmt.CmdIdxChkEn = 1; - Cmd.CmdFmt.DataPresent = NO_DATA; - Cmd.CmdFmt.CmdType = NORMAL; - Cmd.CmdFmt.CmdIdx = 6; - Cmd.CmdFmt.Rsvd1 = 0; - Cmd.Arg = 2; - - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(psha, 50); - if (result) { - DBG_SDIO_ERR("Set bus width fail!\n"); - goto LABEL_115; - } - result = SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); - if ((psha->Response[1] & 255) != 6) { - DBG_SDIO_ERR("Command index error!\n"); - result = HAL_ERR_UNKNOWN; - goto LABEL_115; - } - HAL_SDIOH_REG8(REG_SDIO_HOST_HOST_CTRL)|=2; - // теперь работает в 4-х битном режиме -//#endif - - // проверим состояние карты - result = HalSdioHostGetCardStatusRtl8195a(psha); - if (result) { - DBG_SDIO_ERR("SDIO Err]Get sd card current state fail!\n"); - goto LABEL_115; - } - if (psha->CardCurState != 4) { - DBG_SDIO_ERR("The card isn't in TRANSFER state! (Current state: %d)\n", - psha->CardCurState); - result = HAL_ERR_UNKNOWN; - goto LABEL_115; - } - // сейчас карта в состоянии tran - - - LABEL_115: - if (result) - DBG_SDIO_ERR("SD card initialization FAIL!\n"); - return result; -} -#endif - - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdr.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdr.h deleted file mode 100644 index 05a13fa..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdr.h +++ /dev/null @@ -1,379 +0,0 @@ -#ifndef _RTL8195A_SDR_H -#define _RTL8195A_SDR_H - -#define MS_0_CTRL_BASE BSP_MS_I_DRAMC_0_BASE -#define MS_0_CTRL_PHY_BASE (BSP_MS_I_DRAMC_0_BASE) -#define MS_0_WRAP_BASE (MS_0_CTRL_BASE + 0x200) - -#define MS_1_CTRL_BASE BSP_MS_I_DRAMC_1_BASE -#define MS_1_CTRL_PHY_BASE (BSP_MS_I_DRAMC_1_BASE) -#define MS_1_WRAP_BASE (MS_1_CTRL_BASE + 0x200) - -#define MS_PCTL_CCR_OFFSET 0x000 -#define MS_PCTL_DCR_OFFSET 0x004 -#define MS_PCTL_IOCR_OFFSET 0x008 -#define MS_PCTL_CSR_OFFSET 0x00c -#define MS_PCTL_DRR_OFFSET 0x010 -#define MS_PCTL_TPR0_OFFSET 0x014 -#define MS_PCTL_TPR1_OFFSET 0x018 -#define MS_PCTL_TPR2_OFFSET 0x01c -#define MS_PCTL_MR_OFFSET 0x020 -#define MS_PCTL_EMR1_OFFSET 0x024 -#define MS_PCTL_EMR2_OFFSET 0x028 -#define MS_PCTL_EMR3_OFFSET 0x02c -#define MS_PCTL_CSR2_OFFSET 0x030 -#define MS_PCTL_SRST_OFFSET 0x034 -#define MS_PCTL_DTR2_OFFSET 0x038 -#define MS_PCTL_DTR3_OFFSET 0x03c -#define MS_PCTL_GDLLCR_OFFSET 0x040 -#define MS_PCTL_DLLCR0_OFFSET 0x044 -#define MS_PCTL_DLLCR1_OFFSET 0x048 -#define MS_PCTL_DLLCR2_OFFSET 0x04c -#define MS_PCTL_DLLCR3_OFFSET 0x050 -#define MS_PCTL_DLLCR4_OFFSET 0x054 -#define MS_PCTL_DLLCR5_OFFSET 0x058 -#define MS_PCTL_DLLCR6_OFFSET 0x05c -#define MS_PCTL_DLLCR7_OFFSET 0x060 -#define MS_PCTL_DLLCR8_OFFSET 0x064 -#define MS_PCTL_DQTR0_OFFSET 0x068 -#define MS_PCTL_DQTR1_OFFSET 0x06c -#define MS_PCTL_DQTR2_OFFSET 0x070 -#define MS_PCTL_DQTR3_OFFSET 0x074 -#define MS_PCTL_DQTR4_OFFSET 0x078 -#define MS_PCTL_DQTR5_OFFSET 0x07c -#define MS_PCTL_DQTR6_OFFSET 0x080 -#define MS_PCTL_DQTR7_OFFSET 0x084 -#define MS_PCTL_DQSTR_OFFSET 0x088 -#define MS_PCTL_DQSBTR_OFFSET 0x08c -#define MS_PCTL_ODTCR_OFFSET 0x090 -#define MS_PCTL_DTR0_OFFSET 0x094 -#define MS_PCTL_DTR1_OFFSET 0x098 -#define MS_PCTL_DTAR_OFFSET 0x09c -#define MS_PCTL_ZQCR0_OFFSET 0x0a0 -#define MS_PCTL_ZQCR1_OFFSET 0x0a4 -#define MS_PCTL_ZQSR_OFFSET 0x0a8 -#define MS_PCTL_RSLR0_OFFSET 0x0ac -#define MS_PCTL_RSLR1_OFFSET 0x0b0 -#define MS_PCTL_RSLR2_OFFSET 0x0b4 -#define MS_PCTL_RSLR3_OFFSET 0x0b8 -#define MS_PCTL_RDGR0_OFFSET 0x0bc -#define MS_PCTL_RDGR1_OFFSET 0x0c0 -#define MS_PCTL_RDGR2_OFFSET 0x0c4 -#define MS_PCTL_RDGR3_OFFSET 0x0c8 -#define MS_PCTL_MXSL_OFFSET 0x0cc - -#define MS_PCTL_BCR_OFFSET 0x0d0 -#define MS_PCTL_BALR0_OFFSET 0x0d4 -#define MS_PCTL_BALR1_OFFSET 0x0d8 -#define MS_PCTL_BDR0_OFFSET 0x0dc -#define MS_PCTL_BDR1_OFFSET 0x0e0 -#define MS_PCTL_BBR_OFFSET 0x0e4 -#define MS_PCTL_BSR_OFFSET 0x0e8 -#define MS_PCTL_BYR_OFFSET 0x0ec -#define MS_PCTL_BFA_OFFSET 0x0f0 -#define MS_PCTL_IDR_OFFSET 0x0f8 -#define MS_PCTL_ERR_OFFSET 0x0fc - -#define MS_WRAP_SCR_OFFSET 0x224 -#define MS_WRAP_QCR_OFFSET 0x230 -#define MS_WRAP_PCR_OFFSET 0x234 -#define MS_WRAP_QTR0_OFFSET 0x240 -#define MS_WRAP_QTR1_OFFSET 0x244 -#define MS_WRAP_QTR2_OFFSET 0x248 -#define MS_WRAP_QTR3_OFFSET 0x24c -#define MS_WRAP_QTR4_OFFSET 0x250 -#define MS_WRAP_QTR5_OFFSET 0x254 -#define MS_WRAP_QTR6_OFFSET 0x258 -#define MS_WRAP_QTR7_OFFSET 0x25c -#define MS_WRAP_QTR8_OFFSET 0x260 -#define MS_WRAP_QTR9_OFFSET 0x264 -#define MS_WRAP_QTR10_OFFSET 0x268 -#define MS_WRAP_QTR11_OFFSET 0x26c -#define MS_WRAP_QTR12_OFFSET 0x270 -#define MS_WRAP_QTR13_OFFSET 0x274 -#define MS_WRAP_QTR14_OFFSET 0x278 -#define MS_WRAP_QTR15_OFFSET 0x27c - -#define MS_PHY_DLY0 0x100 -#define MS_PHY_DLY1_RST 0x104 -#define MS_PHY_DLY_CLK 0x108 -#define MS_PHY_DLY_ST 0x10c -#define MS_PHY_DLY_NUM 0x100 - -#define PCTL_CCR_INIT_BFO 0 -#define PCTL_CCR_INIT_BFW 1 -#define PCTL_CCR_DTT_BFO 1 -#define PCTL_CCR_DTT_BFW 1 -#define PCTL_CCR_BTT_BFO 2 -#define PCTL_CCR_BTT_BFW 1 -#define PCTL_CCR_DPIT_BFO 3 -#define PCTL_CCR_DPIT_BFW 1 -#define PCTL_CCR_FLUSH_FIFO_BFO 8 -#define PCTL_CCR_FLUSH_FIFO_BFW 1 - -#define PCTL_DCR_DDR3_BFO 0 -#define PCTL_DCR_DDR3_BFW 1 -#define PCTL_DCR_SDR_BFO 1 -#define PCTL_DCR_SDR_BFW 1 -#define PCTL_DCR_DQ32_BFO 4 -#define PCTL_DCR_DQ32_BFW 1 -#define PCTL_DCR_DFI_RATE_BFO 8 -#define PCTL_DCR_DFI_RATE_BFW 3 - -#define PCTL_IOCR_RD_PIPE_BFO 8 -#define PCTL_IOCR_RD_PIPE_BFW 4 -#define PCTL_IOCR_TPHY_WD_BFO 12 -#define PCTL_IOCR_TPHY_WD_BFW 5 -#define PCTL_IOCR_TPHY_WL_BFO 17 -#define PCTL_IOCR_TPHY_WL_BFW 3 -#define PCTL_IOCR_TPHY_RD_EN_BFO 20 -#define PCTL_IOCR_TPHY_RD_EN_BFW 5 - -#define PCTL_CSR_MEM_IDLE_BFO 8 -#define PCTL_CSR_MEM_IDLE_BFW 1 -#define PCTL_CSR_DT_IDLE_BFO 9 -#define PCTL_CSR_DT_IDLE_BFW 1 -#define PCTL_CSR_BIST_IDLE_BFO 10 -#define PCTL_CSR_BIST_IDLE_BFW 1 -#define PCTL_CSR_DT_FAIL_BFO 11 -#define PCTL_CSR_DT_FAIL_BFW 1 -#define PCTL_CSR_BT_FAIL_BFO 12 -#define PCTL_CSR_BT_FAIL_BFW 1 - -#define PCTL_DRR_TRFC_BFO 0 -#define PCTL_DRR_TRFC_BFW 7 -#define PCTL_DRR_TREF_BFO 8 -#define PCTL_DRR_TREF_BFW 24 -#define PCTL_DRR_REF_NUM_BFO 24 -#define PCTL_DRR_REF_NUM_BFW 4 -#define PCTL_DRR_REF_DIS_BFO 28 -#define PCTL_DRR_REF_DIS_BFW 1 - -#define PCTL_TPR0_TRP_BFO 0 -#define PCTL_TPR0_TRP_BFW 4 -#define PCTL_TPR0_TRAS_BFO 4 -#define PCTL_TPR0_TRAS_BFW 5 -#define PCTL_TPR0_TWR_BFO 9 -#define PCTL_TPR0_TWR_BFW 4 -#define PCTL_TPR0_TRTP_BFO 13 -#define PCTL_TPR0_TRTP_BFW 3 - -#define PCTL_TPR1_TRRD_BFO 0 -#define PCTL_TPR1_TRRD_BFW 4 -#define PCTL_TPR1_TRC_BFO 4 -#define PCTL_TPR1_TRC_BFW 6 -#define PCTL_TPR1_TRCD_BFO 10 -#define PCTL_TPR1_TRCD_BFW 4 -#define PCTL_TPR1_TCCD_BFO 14 -#define PCTL_TPR1_TCCD_BFW 3 -#define PCTL_TPR1_TWTR_BFO 17 -#define PCTL_TPR1_TWTR_BFW 3 -#define PCTL_TPR1_TRTW_BFO 20 -#define PCTL_TPR1_TRTW_BFW 4 - -#define PCTL_TPR2_INIT_REF_NUM_BFO 0 -#define PCTL_TPR2_INIT_REF_NUM_BFW 4 -#define PCTL_TPR2_INIT_NS_EN_BFO 4 -#define PCTL_TPR2_INIT_NS_EN_BFW 1 -#define PCTL_TPR2_TMRD_BFO 5 -#define PCTL_TPR2_TMRD_BFW 2 - -#define PCTL_MR_BL_BFO 0 -#define PCTL_MR_BL_BFW 3 -#define PCTL_MR_BT_BFO 3 -#define PCTL_MR_BT_BFW 1 -#define PCTL_MR_CAS_BFO 4 -#define PCTL_MR_CAS_BFW 3 -#define PCTL_MR_OP_BFO 8 -#define PCTL_MR_OP_BFW 12 - -#define PCTL_EMR1_ADDLAT_BFO 3 -#define PCTL_EMR1_ADDLAT_BFW 3 - -#define PCTL_CMD_DPIN_RSTN_BFO 0 -#define PCTL_CMD_DPIN_RSTN_BFW 1 -#define PCTL_CMD_DPIN_CKE_BFO 1 -#define PCTL_CMD_DPIN_CKE_BFW 1 -#define PCTL_CMD_DPIN_ODT_BFO 2 -#define PCTL_CMD_DPIN_ODT_BFW 1 - -#define PCTL_BCR_STOP_BFO 0 -#define PCTL_BCR_STOP_BFW 1 -#define PCTL_BCR_CMP_BFO 1 -#define PCTL_BCR_CMP_BFW 1 -#define PCTL_BCR_LOOP_BFO 2 -#define PCTL_BCR_LOOP_BFW 1 -#define PCTL_BCR_DIS_MASK_BFO 3 -#define PCTL_BCR_DIS_MASK_BFW 1 -#define PCTL_BCR_AT_STOP_BFO 4 -#define PCTL_BCR_AT_STOP_BFW 1 -#define PCTL_BCR_FLUSH_CMD_BFO 8 -#define PCTL_BCR_FLUSH_CMD_BFW 1 -#define PCTL_BCR_FLUSH_WD_BFO 9 -#define PCTL_BCR_FLUSH_WD_BFW 1 -#define PCTL_BCR_FLUSH_RGD_BFO 10 -#define PCTL_BCR_FLUSH_RGD_BFW 1 -#define PCTL_BCR_FLUSH_RD_BFO 11 -#define PCTL_BCR_FLUSH_RD_BFW 1 -#define PCTL_BCR_FLUSH_RD_EXPC_BFO 16 -#define PCTL_BCR_FLUSH_RD_EXPC_BFW 14 - -#define PCTL_BST_ERR_FST_TH_BFO 0 -#define PCTL_BST_ERR_FST_TH_BFW 12 -#define PCTL_BST_ERR_CNT_BFO 16 -#define PCTL_BST_ERR_CNT_BFW 14 - -#define PCTL_BSRAM0_CMD_LEVEL_BFO 0 -#define PCTL_BSRAM0_CMD_LEVEL_BFW 12 -#define PCTL_BSRAM0_WD_LEVEL_BFO 16 -#define PCTL_BSRAM0_WD_LEVEL_BFW 14 - -#define PCTL_BSRAM1_RG_LEVEL_BFO 0 -#define PCTL_BSRAM1_RG_LEVEL_BFW 14 -#define PCTL_BSRAM1_RD_LEVEL_BFO 16 -#define PCTL_BSRAM1_RD_LEVEL_BFW 14 - -#define WRAP_MISC_PAGE_SIZE_BFO 0 -#define WRAP_MISC_PAGE_SIZE_BFW 4 -#define WRAP_MISC_BANK_SIZE_BFO 4 -#define WRAP_MISC_BANK_SIZE_BFW 2 -#define WRAP_MISC_BST_SIZE_BFO 6 -#define WRAP_MISC_BST_SIZE_BFW 2 -#define WRAP_MISC_DDR_PARAL_BFO 8 -#define WRAP_MISC_DDR_PARAL_BFW 1 - -struct ms_rxi310_portmap { - volatile unsigned int ccr; /* 0x000 */ - volatile unsigned int dcr; /* 0x004 */ - volatile unsigned int iocr; /* 0x008 */ - volatile unsigned int csr; /* 0x00c */ - volatile unsigned int drr; /* 0x010 */ - volatile unsigned int tpr0; /* 0x014 */ - volatile unsigned int tpr1; /* 0x018 */ - volatile unsigned int tpr2; /* 0x01c */ - volatile unsigned int mr; /* 0x020 */ - volatile unsigned int emr1; /* 0x024 */ - volatile unsigned int emr2; /* 0x028 */ - volatile unsigned int emr3; /* 0x02c */ - volatile unsigned int cdpin; /* 0x030 */ - volatile unsigned int tdpin; /* 0x034 */ - volatile unsigned int dtr2; /* 0x038 */ - volatile unsigned int dtr3; /* 0x03c */ - volatile unsigned int gdllcr; /* 0x040 */ - volatile unsigned int dllcr0; /* 0x044 */ - volatile unsigned int dllcr1; /* 0x048 */ - volatile unsigned int dllcr2; /* 0x04c */ - volatile unsigned int dllcr3; /* 0x050 */ - volatile unsigned int dllcr4; /* 0x054 */ - volatile unsigned int dllcr5; /* 0x058 */ - volatile unsigned int dllcr6; /* 0x05c */ - volatile unsigned int dllcr7; /* 0x060 */ - volatile unsigned int dllcr8; /* 0x064 */ - volatile unsigned int dqtr0; /* 0x068 */ - volatile unsigned int dqtr1; /* 0x06c */ - volatile unsigned int dqtr2; /* 0x070 */ - volatile unsigned int dqtr3; /* 0x074 */ - volatile unsigned int dqtr4; /* 0x078 */ - volatile unsigned int dqtr5; /* 0x07c */ - volatile unsigned int dqtr6; /* 0x080 */ - volatile unsigned int dqtr7; /* 0x084 */ - volatile unsigned int dqstr; /* 0x088 */ - volatile unsigned int dqsbtr; /* 0x08c */ - volatile unsigned int odtcr; /* 0x090 */ - volatile unsigned int dtr0; /* 0x094 */ - volatile unsigned int dtr1; /* 0x098 */ - volatile unsigned int dtar; /* 0x09c */ - volatile unsigned int zqcr0; /* 0x0a0 */ - volatile unsigned int zqcr1; /* 0x0a4 */ - volatile unsigned int zqsr; /* 0x0a8 */ - volatile unsigned int rslr0; /* 0x0ac */ - volatile unsigned int rslr1; /* 0x0b0 */ - volatile unsigned int rslr2; /* 0x0b4 */ - volatile unsigned int rslr3; /* 0x0b8 */ - volatile unsigned int rdgr0; /* 0x0bc */ - volatile unsigned int rdgr1; /* 0x0c0 */ - volatile unsigned int rdgr2; /* 0x0c4 */ - volatile unsigned int rdgr3; /* 0x0c8 */ - volatile unsigned int mxsl; /* 0x0cc */ - volatile unsigned int bcr; /* 0x0d0 */ - volatile unsigned int bst; /* 0x0d4 */ - volatile unsigned int bsram0; /* 0x0d8 */ - volatile unsigned int bsram1; /* 0x0dc */ - volatile unsigned int bdr1; /* 0x0e0 */ - volatile unsigned int bbr; /* 0x0e4 */ - volatile unsigned int bsr; /* 0x0e8 */ - volatile unsigned int byr; /* 0x0ec */ - volatile unsigned int bfa; /* 0x0f0 */ - volatile unsigned int pctl_svn; /* 0x0f4 */ - volatile unsigned int pctl_idr; /* 0x0f8 */ - volatile unsigned int err; /* 0x0fc */ - - // SDR_PHY CONTROL REGISTER - volatile unsigned int phy_dly0; /* 0x100 */ - volatile unsigned int phy_dly1_rst; /* 0x104 */ - volatile unsigned int phy_dly_clk; /* 0x108 */ - volatile unsigned int phy_dly_st; /* 0x10c */ - volatile unsigned int phy_dly_num; /* 0x110 */ - volatile unsigned int reserved0[68]; - - // WRAP CONTROL REGISTER - volatile unsigned int misc; /* 0x224 */ - volatile unsigned int cq_ver; /* 0x228 */ - volatile unsigned int cq_mon; /* 0x22c */ - volatile unsigned int wq_ver; /* 0x230 */ - volatile unsigned int wq_mon; /* 0x234 */ - volatile unsigned int rq_ver; /* 0x240 */ - volatile unsigned int rq_mon; /* 0x244 */ - volatile unsigned int reserved1[22]; - volatile unsigned int wwrap_idr; /* 0x2a0 */ - volatile unsigned int wrap_svn; /* 0x2a4 */ - -}; //ms_rxi310_portmap - -#define QFIFO_CMD_BANK_BFO (35 - QFIFO_CMD_WRRD_BFO) // [38:35] -#define QFIFO_CMD_BANK_BFW 4 -#define QFIFO_CMD_PAGE_BFO (20 - QFIFO_CMD_WRRD_BFO) // [34:20] -#define QFIFO_CMD_PAGE_BFW 15 -#define QFIFO_CMD_COLU_BFO (7 - QFIFO_CMD_WRRD_BFO) // [19: 7] -#define QFIFO_CMD_COLU_BFW 13 // [19: 7] -#define QFIFO_BST_LEN_BFO (3 - QFIFO_CMD_WRRD_BFO) // [6:3] -#define QFIFO_BST_LEN_BFW 4 // [6:3] -#define QFIFO_CMD_WRRD_BFO 2 // [2], remove bit[1:0] -#define QFIFO_CMD_WRRD_BFW 1 // [2], remove bit[1:0] - -//====================================================// - -#define REG_SDR_CCR 0x00 -#define REG_SDR_DCR 0x04 -#define REG_SDR_IOCR 0x08 -#define REG_SDR_CSR 0x0C -#define REG_SDR_DRR 0x10 -#define REG_SDR_TPR0 0x14 -#define REG_SDR_TPR1 0x18 -#define REG_SDR_TPR2 0x1C -#define REG_SDR_MR 0x20 -#define REG_SDR_EMR1 0x24 -#define REG_SDR_EMR2 0x28 -#define REG_SDR_EMR3 0x2C -#define REG_SDR_CMD_DPIN 0x30 -#define REG_SDR_TIE_DPIN 0x34 -#define REG_SDR_BCR 0xD0 -#define REG_SDR_BST 0xD4 -#define REG_SDR_BSRAM0 0xD8 -#define REG_SDR_BSRAM1 0xDC -#define REG_SDR_PCTL_SVN_ID 0xF4 -#define REG_SDR_PCTL_IDR 0xF8 -#define REG_SDR_DLY0 0x100 - -#define REG_SDR_DLY1 0x104 -#define REG_SDR_DCM_RST 0x104 - -#define REG_SDR_DLY_CLK_PHA 0x108 -#define REG_SDR_DLY_ST 0x10C - -#define REG_SDR_MISC 0x224 -#define REG_SDR_OCP_WRAP_IDR 0x2A0 -#define REG_SDR_OCP_WRAP_VERSION 0x2A4 - - -#endif // end of "#ifndef _RTL8195A_SDR_H" diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_spi_flash.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_spi_flash.h deleted file mode 100644 index 079a2db..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_spi_flash.h +++ /dev/null @@ -1,1143 +0,0 @@ -#ifndef _RTL8195A_SPI_FLASH_H -#define _RTL8195A_SPI_FLASH_H - -#define CPU_OPT_WIDTH 0x1F - -//2 REG_NOT_VALID - -//2 REG_SPIC_CTRLR0 - -#define BIT_SHIFT_CK_MTIMES 23 -#define BIT_MASK_CK_MTIMES 0x1f -#define BIT_CK_MTIMES(x) (((x) & BIT_MASK_CK_MTIMES) << BIT_SHIFT_CK_MTIMES) -#define BIT_CTRL_CK_MTIMES(x) (((x) & BIT_MASK_CK_MTIMES) << BIT_SHIFT_CK_MTIMES) -#define BIT_GET_CK_MTIMES(x) (((x) >> BIT_SHIFT_CK_MTIMES) & BIT_MASK_CK_MTIMES) - -#define BIT_FAST_RD BIT(22) -#define BIT_SHIFT_FAST_RD 22 -#define BIT_MASK_FAST_RD 0x1 -#define BIT_CTRL_FAST_RD(x) (((x) & BIT_MASK_FAST_RD) << BIT_SHIFT_FAST_RD) - - -#define BIT_SHIFT_CMD_CH 20 -#define BIT_MASK_CMD_CH 0x3 -#define BIT_CMD_CH(x) (((x) & BIT_MASK_CMD_CH) << BIT_SHIFT_CMD_CH) -#define BIT_CTRL_CMD_CH(x) (((x) & BIT_MASK_CMD_CH) << BIT_SHIFT_CMD_CH) -#define BIT_GET_CMD_CH(x) (((x) >> BIT_SHIFT_CMD_CH) & BIT_MASK_CMD_CH) - - -#define BIT_SHIFT_DATA_CH 18 -#define BIT_MASK_DATA_CH 0x3 -#define BIT_DATA_CH(x) (((x) & BIT_MASK_DATA_CH) << BIT_SHIFT_DATA_CH) -#define BIT_CTRL_DATA_CH(x) (((x) & BIT_MASK_DATA_CH) << BIT_SHIFT_DATA_CH) -#define BIT_GET_DATA_CH(x) (((x) >> BIT_SHIFT_DATA_CH) & BIT_MASK_DATA_CH) - - -#define BIT_SHIFT_ADDR_CH 16 -#define BIT_MASK_ADDR_CH 0x3 -#define BIT_ADDR_CH(x) (((x) & BIT_MASK_ADDR_CH) << BIT_SHIFT_ADDR_CH) -#define BIT_CTRL_ADDR_CH(x) (((x) & BIT_MASK_ADDR_CH) << BIT_SHIFT_ADDR_CH) -#define BIT_GET_ADDR_CH(x) (((x) >> BIT_SHIFT_ADDR_CH) & BIT_MASK_ADDR_CH) - - -#define BIT_SHIFT_TMOD 8 -#define BIT_MASK_TMOD 0x3 -#define BIT_TMOD(x) (((x) & BIT_MASK_TMOD) << BIT_SHIFT_TMOD) -#define BIT_CTRL_TMOD(x) (((x) & BIT_MASK_TMOD) << BIT_SHIFT_TMOD) -#define BIT_GET_TMOD(x) (((x) >> BIT_SHIFT_TMOD) & BIT_MASK_TMOD) - -#define BIT_SCPOL BIT(7) -#define BIT_SHIFT_SCPOL 7 -#define BIT_MASK_SCPOL 0x1 -#define BIT_CTRL_SCPOL(x) (((x) & BIT_MASK_SCPOL) << BIT_SHIFT_SCPOL) - -#define BIT_SCPH BIT(6) -#define BIT_SHIFT_SCPH 6 -#define BIT_MASK_SCPH 0x1 -#define BIT_CTRL_SCPH(x) (((x) & BIT_MASK_SCPH) << BIT_SHIFT_SCPH) - -//2 REG_SPIC_CTRLR1 - -#define BIT_SHIFT_NDF 0 -#define BIT_MASK_NDF 0xfff -#define BIT_NDF(x) (((x) & BIT_MASK_NDF) << BIT_SHIFT_NDF) -#define BIT_CTRL_NDF(x) (((x) & BIT_MASK_NDF) << BIT_SHIFT_NDF) -#define BIT_GET_NDF(x) (((x) >> BIT_SHIFT_NDF) & BIT_MASK_NDF) - - -//2 REG_SPIC_SSIENR -#define BIT_ATCK_CMD BIT(1) -#define BIT_SHIFT_ATCK_CMD 1 -#define BIT_MASK_ATCK_CMD 0x1 -#define BIT_CTRL_ATCK_CMD(x) (((x) & BIT_MASK_ATCK_CMD) << BIT_SHIFT_ATCK_CMD) - -#define BIT_SPIC_EN BIT(0) -#define BIT_SHIFT_SPIC_EN 0 -#define BIT_MASK_SPIC_EN 0x1 -#define BIT_CTRL_SPIC_EN(x) (((x) & BIT_MASK_SPIC_EN) << BIT_SHIFT_SPIC_EN) - -//2 REG_SPIC_MWCR - -//2 REG_SPIC_SER -#define BIT_SER BIT(0) -#define BIT_SHIFT_SER 0 -#define BIT_MASK_SER 0x1 -#define BIT_CTRL_SER(x) (((x) & BIT_MASK_SER) << BIT_SHIFT_SER) - -//2 REG_SPIC_BAUDR - -#define BIT_SHIFT_SCKDV 0 -#define BIT_MASK_SCKDV 0xffff -#define BIT_SCKDV(x) (((x) & BIT_MASK_SCKDV) << BIT_SHIFT_SCKDV) -#define BIT_CTRL_SCKDV(x) (((x) & BIT_MASK_SCKDV) << BIT_SHIFT_SCKDV) -#define BIT_GET_SCKDV(x) (((x) >> BIT_SHIFT_SCKDV) & BIT_MASK_SCKDV) - - -//2 REG_SPIC_TXFTLR - -#define BIT_SHIFT_TFT 0 -#define BIT_MASK_TFT 0x1f -#define BIT_TFT(x) (((x) & BIT_MASK_TFT) << BIT_SHIFT_TFT) -#define BIT_CTRL_TFT(x) (((x) & BIT_MASK_TFT) << BIT_SHIFT_TFT) -#define BIT_GET_TFT(x) (((x) >> BIT_SHIFT_TFT) & BIT_MASK_TFT) - - -//2 REG_SPIC_RXFTLR - -#define BIT_SHIFT_RFT 0 -#define BIT_MASK_RFT 0x1f -#define BIT_RFT(x) (((x) & BIT_MASK_RFT) << BIT_SHIFT_RFT) -#define BIT_CTRL_RFT(x) (((x) & BIT_MASK_RFT) << BIT_SHIFT_RFT) -#define BIT_GET_RFT(x) (((x) >> BIT_SHIFT_RFT) & BIT_MASK_RFT) - - -//2 REG_SPIC_TXFLR - -#define BIT_SHIFT_TXFL 0 -#define BIT_MASK_TXFL 0x3f -#define BIT_TXFL(x) (((x) & BIT_MASK_TXFL) << BIT_SHIFT_TXFL) -#define BIT_CTRL_TXFL(x) (((x) & BIT_MASK_TXFL) << BIT_SHIFT_TXFL) -#define BIT_GET_TXFL(x) (((x) >> BIT_SHIFT_TXFL) & BIT_MASK_TXFL) - - -//2 REG_SPIC_RXFLR - -#define BIT_SHIFT_RXFL 0 -#define BIT_MASK_RXFL 0x3f -#define BIT_RXFL(x) (((x) & BIT_MASK_RXFL) << BIT_SHIFT_RXFL) -#define BIT_CTRL_RXFL(x) (((x) & BIT_MASK_RXFL) << BIT_SHIFT_RXFL) -#define BIT_GET_RXFL(x) (((x) >> BIT_SHIFT_RXFL) & BIT_MASK_RXFL) - - -//2 REG_SPIC_SR -#define BIT_TXE BIT(5) -#define BIT_SHIFT_TXE 5 -#define BIT_MASK_TXE 0x1 -#define BIT_CTRL_TXE(x) (((x) & BIT_MASK_TXE) << BIT_SHIFT_TXE) - -#define BIT_RFF BIT(4) -#define BIT_SHIFT_RFF 4 -#define BIT_MASK_RFF 0x1 -#define BIT_CTRL_RFF(x) (((x) & BIT_MASK_RFF) << BIT_SHIFT_RFF) - -#define BIT_RFNE BIT(3) -#define BIT_SHIFT_RFNE 3 -#define BIT_MASK_RFNE 0x1 -#define BIT_CTRL_RFNE(x) (((x) & BIT_MASK_RFNE) << BIT_SHIFT_RFNE) - -#define BIT_TFE BIT(2) -#define BIT_SHIFT_TFE 2 -#define BIT_MASK_TFE 0x1 -#define BIT_CTRL_TFE(x) (((x) & BIT_MASK_TFE) << BIT_SHIFT_TFE) - -#define BIT_TFNF BIT(1) -#define BIT_SHIFT_TFNF 1 -#define BIT_MASK_TFNF 0x1 -#define BIT_CTRL_TFNF(x) (((x) & BIT_MASK_TFNF) << BIT_SHIFT_TFNF) - -#define BIT_BUSY BIT(0) -#define BIT_SHIFT_BUSY 0 -#define BIT_MASK_BUSY 0x1 -#define BIT_CTRL_BUSY(x) (((x) & BIT_MASK_BUSY) << BIT_SHIFT_BUSY) - -//2 REG_SPIC_IMR -#define BIT_TXSIM BIT(9) -#define BIT_SHIFT_TXSIM 9 -#define BIT_MASK_TXSIM 0x1 -#define BIT_CTRL_TXSIM(x) (((x) & BIT_MASK_TXSIM) << BIT_SHIFT_TXSIM) - -#define BIT_ACEIM BIT(8) -#define BIT_SHIFT_ACEIM 8 -#define BIT_MASK_ACEIM 0x1 -#define BIT_CTRL_ACEIM(x) (((x) & BIT_MASK_ACEIM) << BIT_SHIFT_ACEIM) - -#define BIT_BYEIM BIT(7) -#define BIT_SHIFT_BYEIM 7 -#define BIT_MASK_BYEIM 0x1 -#define BIT_CTRL_BYEIM(x) (((x) & BIT_MASK_BYEIM) << BIT_SHIFT_BYEIM) - -#define BIT_WBEIM BIT(6) -#define BIT_SHIFT_WBEIM 6 -#define BIT_MASK_WBEIM 0x1 -#define BIT_CTRL_WBEIM(x) (((x) & BIT_MASK_WBEIM) << BIT_SHIFT_WBEIM) - -#define BIT_FSEIM BIT(5) -#define BIT_SHIFT_FSEIM 5 -#define BIT_MASK_FSEIM 0x1 -#define BIT_CTRL_FSEIM(x) (((x) & BIT_MASK_FSEIM) << BIT_SHIFT_FSEIM) - -#define BIT_RXFIM BIT(4) -#define BIT_SHIFT_RXFIM 4 -#define BIT_MASK_RXFIM 0x1 -#define BIT_CTRL_RXFIM(x) (((x) & BIT_MASK_RXFIM) << BIT_SHIFT_RXFIM) - -#define BIT_RXOIM BIT(3) -#define BIT_SHIFT_RXOIM 3 -#define BIT_MASK_RXOIM 0x1 -#define BIT_CTRL_RXOIM(x) (((x) & BIT_MASK_RXOIM) << BIT_SHIFT_RXOIM) - -#define BIT_RXUIM BIT(2) -#define BIT_SHIFT_RXUIM 2 -#define BIT_MASK_RXUIM 0x1 -#define BIT_CTRL_RXUIM(x) (((x) & BIT_MASK_RXUIM) << BIT_SHIFT_RXUIM) - -#define BIT_TXOIM BIT(1) -#define BIT_SHIFT_TXOIM 1 -#define BIT_MASK_TXOIM 0x1 -#define BIT_CTRL_TXOIM(x) (((x) & BIT_MASK_TXOIM) << BIT_SHIFT_TXOIM) - -#define BIT_TXEIM BIT(0) -#define BIT_SHIFT_TXEIM 0 -#define BIT_MASK_TXEIM 0x1 -#define BIT_CTRL_TXEIM(x) (((x) & BIT_MASK_TXEIM) << BIT_SHIFT_TXEIM) - -//2 REG_SPIC_ISR -#define BIT_TXSIS BIT(9) -#define BIT_SHIFT_TXSIS 9 -#define BIT_MASK_TXSIS 0x1 -#define BIT_CTRL_TXSIS(x) (((x) & BIT_MASK_TXSIS) << BIT_SHIFT_TXSIS) - -#define BIT_ACEIS BIT(8) -#define BIT_SHIFT_ACEIS 8 -#define BIT_MASK_ACEIS 0x1 -#define BIT_CTRL_ACEIS(x) (((x) & BIT_MASK_ACEIS) << BIT_SHIFT_ACEIS) - -#define BIT_BYEIS BIT(7) -#define BIT_SHIFT_BYEIS 7 -#define BIT_MASK_BYEIS 0x1 -#define BIT_CTRL_BYEIS(x) (((x) & BIT_MASK_BYEIS) << BIT_SHIFT_BYEIS) - -#define BIT_WBEIS BIT(6) -#define BIT_SHIFT_WBEIS 6 -#define BIT_MASK_WBEIS 0x1 -#define BIT_CTRL_WBEIS(x) (((x) & BIT_MASK_WBEIS) << BIT_SHIFT_WBEIS) - -#define BIT_FSEIS BIT(5) -#define BIT_SHIFT_FSEIS 5 -#define BIT_MASK_FSEIS 0x1 -#define BIT_CTRL_FSEIS(x) (((x) & BIT_MASK_FSEIS) << BIT_SHIFT_FSEIS) - -#define BIT_RXFIS BIT(4) -#define BIT_SHIFT_RXFIS 4 -#define BIT_MASK_RXFIS 0x1 -#define BIT_CTRL_RXFIS(x) (((x) & BIT_MASK_RXFIS) << BIT_SHIFT_RXFIS) - -#define BIT_RXOIS BIT(3) -#define BIT_SHIFT_RXOIS 3 -#define BIT_MASK_RXOIS 0x1 -#define BIT_CTRL_RXOIS(x) (((x) & BIT_MASK_RXOIS) << BIT_SHIFT_RXOIS) - -#define BIT_RXUIS BIT(2) -#define BIT_SHIFT_RXUIS 2 -#define BIT_MASK_RXUIS 0x1 -#define BIT_CTRL_RXUIS(x) (((x) & BIT_MASK_RXUIS) << BIT_SHIFT_RXUIS) - -#define BIT_TXOIS BIT(1) -#define BIT_SHIFT_TXOIS 1 -#define BIT_MASK_TXOIS 0x1 -#define BIT_CTRL_TXOIS(x) (((x) & BIT_MASK_TXOIS) << BIT_SHIFT_TXOIS) - -#define BIT_TXEIS BIT(0) -#define BIT_SHIFT_TXEIS 0 -#define BIT_MASK_TXEIS 0x1 -#define BIT_CTRL_TXEIS(x) (((x) & BIT_MASK_TXEIS) << BIT_SHIFT_TXEIS) - -//2 REG_SPIC_RISR -#define BIT_ACEIR BIT(8) -#define BIT_SHIFT_ACEIR 8 -#define BIT_MASK_ACEIR 0x1 -#define BIT_CTRL_ACEIR(x) (((x) & BIT_MASK_ACEIR) << BIT_SHIFT_ACEIR) - -#define BIT_BYEIR BIT(7) -#define BIT_SHIFT_BYEIR 7 -#define BIT_MASK_BYEIR 0x1 -#define BIT_CTRL_BYEIR(x) (((x) & BIT_MASK_BYEIR) << BIT_SHIFT_BYEIR) - -#define BIT_WBEIR BIT(6) -#define BIT_SHIFT_WBEIR 6 -#define BIT_MASK_WBEIR 0x1 -#define BIT_CTRL_WBEIR(x) (((x) & BIT_MASK_WBEIR) << BIT_SHIFT_WBEIR) - -#define BIT_FSEIR BIT(5) -#define BIT_SHIFT_FSEIR 5 -#define BIT_MASK_FSEIR 0x1 -#define BIT_CTRL_FSEIR(x) (((x) & BIT_MASK_FSEIR) << BIT_SHIFT_FSEIR) - -#define BIT_RXFIR BIT(4) -#define BIT_SHIFT_RXFIR 4 -#define BIT_MASK_RXFIR 0x1 -#define BIT_CTRL_RXFIR(x) (((x) & BIT_MASK_RXFIR) << BIT_SHIFT_RXFIR) - -#define BIT_RXOIR BIT(3) -#define BIT_SHIFT_RXOIR 3 -#define BIT_MASK_RXOIR 0x1 -#define BIT_CTRL_RXOIR(x) (((x) & BIT_MASK_RXOIR) << BIT_SHIFT_RXOIR) - -#define BIT_RXUIR BIT(2) -#define BIT_SHIFT_RXUIR 2 -#define BIT_MASK_RXUIR 0x1 -#define BIT_CTRL_RXUIR(x) (((x) & BIT_MASK_RXUIR) << BIT_SHIFT_RXUIR) - -#define BIT_TXOIR BIT(1) -#define BIT_SHIFT_TXOIR 1 -#define BIT_MASK_TXOIR 0x1 -#define BIT_CTRL_TXOIR(x) (((x) & BIT_MASK_TXOIR) << BIT_SHIFT_TXOIR) - -#define BIT_TXEIR BIT(0) -#define BIT_SHIFT_TXEIR 0 -#define BIT_MASK_TXEIR 0x1 -#define BIT_CTRL_TXEIR(x) (((x) & BIT_MASK_TXEIR) << BIT_SHIFT_TXEIR) - -//2 REG_SPIC_TXOICR -#define BIT_TXOICR BIT(0) -#define BIT_SHIFT_TXOICR 0 -#define BIT_MASK_TXOICR 0x1 -#define BIT_CTRL_TXOICR(x) (((x) & BIT_MASK_TXOICR) << BIT_SHIFT_TXOICR) - -//2 REG_SPIC_RXOICR -#define BIT_RXOCIR BIT(0) -#define BIT_SHIFT_RXOCIR 0 -#define BIT_MASK_RXOCIR 0x1 -#define BIT_CTRL_RXOCIR(x) (((x) & BIT_MASK_RXOCIR) << BIT_SHIFT_RXOCIR) - -//2 REG_SPC_RXUICR -#define BIT_RXUICR BIT(0) -#define BIT_SHIFT_RXUICR 0 -#define BIT_MASK_RXUICR 0x1 -#define BIT_CTRL_RXUICR(x) (((x) & BIT_MASK_RXUICR) << BIT_SHIFT_RXUICR) - -//2 REG_SPIC_MSTICR -#define BIT_MSTICR BIT(0) -#define BIT_SHIFT_MSTICR 0 -#define BIT_MASK_MSTICR 0x1 -#define BIT_CTRL_MSTICR(x) (((x) & BIT_MASK_MSTICR) << BIT_SHIFT_MSTICR) - -//2 REG_SPIC_ICR - -#define BIT_SHIFT_ICR 0 -#define BIT_MASK_ICR 0xff -#define BIT_ICR(x) (((x) & BIT_MASK_ICR) << BIT_SHIFT_ICR) -#define BIT_CTRL_ICR(x) (((x) & BIT_MASK_ICR) << BIT_SHIFT_ICR) -#define BIT_GET_ICR(x) (((x) >> BIT_SHIFT_ICR) & BIT_MASK_ICR) - - -//2 REG_SPIC_DMACR - -//2 REG_SPIC_DMATDLR0 - -//2 REG_SPIC_DMATDLR1 - -//2 REG_SPIC_IDR - -#define BIT_SHIFT_IDCODE 0 -#define BIT_MASK_IDCODE 0xffffffffL -#define BIT_IDCODE(x) (((x) & BIT_MASK_IDCODE) << BIT_SHIFT_IDCODE) -#define BIT_CTRL_IDCODE(x) (((x) & BIT_MASK_IDCODE) << BIT_SHIFT_IDCODE) -#define BIT_GET_IDCODE(x) (((x) >> BIT_SHIFT_IDCODE) & BIT_MASK_IDCODE) - - -//2 REG_SPIC_VERSION - -#define BIT_SHIFT_SPIC_VERSION 0 -#define BIT_MASK_SPIC_VERSION 0xffffffffL -#define BIT_SPIC_VERSION(x) (((x) & BIT_MASK_SPIC_VERSION) << BIT_SHIFT_SPIC_VERSION) -#define BIT_CTRL_SPIC_VERSION(x) (((x) & BIT_MASK_SPIC_VERSION) << BIT_SHIFT_SPIC_VERSION) -#define BIT_GET_SPIC_VERSION(x) (((x) >> BIT_SHIFT_SPIC_VERSION) & BIT_MASK_SPIC_VERSION) - - -//2 REG_SPIC_DR0 - -#define BIT_SHIFT_DR0 0 -#define BIT_MASK_DR0 0xffffffffL -#define BIT_DR0(x) (((x) & BIT_MASK_DR0) << BIT_SHIFT_DR0) -#define BIT_CTRL_DR0(x) (((x) & BIT_MASK_DR0) << BIT_SHIFT_DR0) -#define BIT_GET_DR0(x) (((x) >> BIT_SHIFT_DR0) & BIT_MASK_DR0) - - -//2 REG_SPIC_DR1 - -#define BIT_SHIFT_DR1 0 -#define BIT_MASK_DR1 0xffffffffL -#define BIT_DR1(x) (((x) & BIT_MASK_DR1) << BIT_SHIFT_DR1) -#define BIT_CTRL_DR1(x) (((x) & BIT_MASK_DR1) << BIT_SHIFT_DR1) -#define BIT_GET_DR1(x) (((x) >> BIT_SHIFT_DR1) & BIT_MASK_DR1) - - -//2 REG_SPIC_DR2 - -#define BIT_SHIFT_DR2 0 -#define BIT_MASK_DR2 0xffffffffL -#define BIT_DR2(x) (((x) & BIT_MASK_DR2) << BIT_SHIFT_DR2) -#define BIT_CTRL_DR2(x) (((x) & BIT_MASK_DR2) << BIT_SHIFT_DR2) -#define BIT_GET_DR2(x) (((x) >> BIT_SHIFT_DR2) & BIT_MASK_DR2) - - -//2 REG_SPIC_DR3 - -#define BIT_SHIFT_DR3 0 -#define BIT_MASK_DR3 0xffffffffL -#define BIT_DR3(x) (((x) & BIT_MASK_DR3) << BIT_SHIFT_DR3) -#define BIT_CTRL_DR3(x) (((x) & BIT_MASK_DR3) << BIT_SHIFT_DR3) -#define BIT_GET_DR3(x) (((x) >> BIT_SHIFT_DR3) & BIT_MASK_DR3) - - -//2 REG_SPIC_DR4 - -#define BIT_SHIFT_DR4 0 -#define BIT_MASK_DR4 0xffffffffL -#define BIT_DR4(x) (((x) & BIT_MASK_DR4) << BIT_SHIFT_DR4) -#define BIT_CTRL_DR4(x) (((x) & BIT_MASK_DR4) << BIT_SHIFT_DR4) -#define BIT_GET_DR4(x) (((x) >> BIT_SHIFT_DR4) & BIT_MASK_DR4) - - -//2 REG_SPIC_DR5 - -#define BIT_SHIFT_DR5 0 -#define BIT_MASK_DR5 0xffffffffL -#define BIT_DR5(x) (((x) & BIT_MASK_DR5) << BIT_SHIFT_DR5) -#define BIT_CTRL_DR5(x) (((x) & BIT_MASK_DR5) << BIT_SHIFT_DR5) -#define BIT_GET_DR5(x) (((x) >> BIT_SHIFT_DR5) & BIT_MASK_DR5) - - -//2 REG_SPIC_DR6 - -#define BIT_SHIFT_DR6 0 -#define BIT_MASK_DR6 0xffffffffL -#define BIT_DR6(x) (((x) & BIT_MASK_DR6) << BIT_SHIFT_DR6) -#define BIT_CTRL_DR6(x) (((x) & BIT_MASK_DR6) << BIT_SHIFT_DR6) -#define BIT_GET_DR6(x) (((x) >> BIT_SHIFT_DR6) & BIT_MASK_DR6) - - -//2 REG_SPIC_DR7 - -#define BIT_SHIFT_DR7 0 -#define BIT_MASK_DR7 0xffffffffL -#define BIT_DR7(x) (((x) & BIT_MASK_DR7) << BIT_SHIFT_DR7) -#define BIT_CTRL_DR7(x) (((x) & BIT_MASK_DR7) << BIT_SHIFT_DR7) -#define BIT_GET_DR7(x) (((x) >> BIT_SHIFT_DR7) & BIT_MASK_DR7) - - -//2 REG_SPIC_DR8 - -#define BIT_SHIFT_DR8 0 -#define BIT_MASK_DR8 0xffffffffL -#define BIT_DR8(x) (((x) & BIT_MASK_DR8) << BIT_SHIFT_DR8) -#define BIT_CTRL_DR8(x) (((x) & BIT_MASK_DR8) << BIT_SHIFT_DR8) -#define BIT_GET_DR8(x) (((x) >> BIT_SHIFT_DR8) & BIT_MASK_DR8) - - -//2 REG_SPIC_DR9 - -#define BIT_SHIFT_DR9 0 -#define BIT_MASK_DR9 0xffffffffL -#define BIT_DR9(x) (((x) & BIT_MASK_DR9) << BIT_SHIFT_DR9) -#define BIT_CTRL_DR9(x) (((x) & BIT_MASK_DR9) << BIT_SHIFT_DR9) -#define BIT_GET_DR9(x) (((x) >> BIT_SHIFT_DR9) & BIT_MASK_DR9) - - -//2 REG_SPIC_DR10 - -#define BIT_SHIFT_DR10 0 -#define BIT_MASK_DR10 0xffffffffL -#define BIT_DR10(x) (((x) & BIT_MASK_DR10) << BIT_SHIFT_DR10) -#define BIT_CTRL_DR10(x) (((x) & BIT_MASK_DR10) << BIT_SHIFT_DR10) -#define BIT_GET_DR10(x) (((x) >> BIT_SHIFT_DR10) & BIT_MASK_DR10) - - -//2 REG_SPIC_DR11 - -#define BIT_SHIFT_DR11 0 -#define BIT_MASK_DR11 0xffffffffL -#define BIT_DR11(x) (((x) & BIT_MASK_DR11) << BIT_SHIFT_DR11) -#define BIT_CTRL_DR11(x) (((x) & BIT_MASK_DR11) << BIT_SHIFT_DR11) -#define BIT_GET_DR11(x) (((x) >> BIT_SHIFT_DR11) & BIT_MASK_DR11) - - -//2 REG_SPIC_DR12 - -#define BIT_SHIFT_DR12 0 -#define BIT_MASK_DR12 0xffffffffL -#define BIT_DR12(x) (((x) & BIT_MASK_DR12) << BIT_SHIFT_DR12) -#define BIT_CTRL_DR12(x) (((x) & BIT_MASK_DR12) << BIT_SHIFT_DR12) -#define BIT_GET_DR12(x) (((x) >> BIT_SHIFT_DR12) & BIT_MASK_DR12) - - -//2 REG_SPIC_DR13 - -#define BIT_SHIFT_DR13 0 -#define BIT_MASK_DR13 0xffffffffL -#define BIT_DR13(x) (((x) & BIT_MASK_DR13) << BIT_SHIFT_DR13) -#define BIT_CTRL_DR13(x) (((x) & BIT_MASK_DR13) << BIT_SHIFT_DR13) -#define BIT_GET_DR13(x) (((x) >> BIT_SHIFT_DR13) & BIT_MASK_DR13) - - -//2 REG_SPIC_DR14 - -#define BIT_SHIFT_DR14 0 -#define BIT_MASK_DR14 0xffffffffL -#define BIT_DR14(x) (((x) & BIT_MASK_DR14) << BIT_SHIFT_DR14) -#define BIT_CTRL_DR14(x) (((x) & BIT_MASK_DR14) << BIT_SHIFT_DR14) -#define BIT_GET_DR14(x) (((x) >> BIT_SHIFT_DR14) & BIT_MASK_DR14) - - -//2 REG_SPIC_DR15 - -#define BIT_SHIFT_DR15 0 -#define BIT_MASK_DR15 0xffffffffL -#define BIT_DR15(x) (((x) & BIT_MASK_DR15) << BIT_SHIFT_DR15) -#define BIT_CTRL_DR15(x) (((x) & BIT_MASK_DR15) << BIT_SHIFT_DR15) -#define BIT_GET_DR15(x) (((x) >> BIT_SHIFT_DR15) & BIT_MASK_DR15) - - -//2 REG_SPIC_DR16 - -#define BIT_SHIFT_DR16 0 -#define BIT_MASK_DR16 0xffffffffL -#define BIT_DR16(x) (((x) & BIT_MASK_DR16) << BIT_SHIFT_DR16) -#define BIT_CTRL_DR16(x) (((x) & BIT_MASK_DR16) << BIT_SHIFT_DR16) -#define BIT_GET_DR16(x) (((x) >> BIT_SHIFT_DR16) & BIT_MASK_DR16) - - -//2 REG_SPIC_DR17 - -#define BIT_SHIFT_DR17 0 -#define BIT_MASK_DR17 0xffffffffL -#define BIT_DR17(x) (((x) & BIT_MASK_DR17) << BIT_SHIFT_DR17) -#define BIT_CTRL_DR17(x) (((x) & BIT_MASK_DR17) << BIT_SHIFT_DR17) -#define BIT_GET_DR17(x) (((x) >> BIT_SHIFT_DR17) & BIT_MASK_DR17) - - -//2 REG_SPIC_DR18 - -#define BIT_SHIFT_DR18 0 -#define BIT_MASK_DR18 0xffffffffL -#define BIT_DR18(x) (((x) & BIT_MASK_DR18) << BIT_SHIFT_DR18) -#define BIT_CTRL_DR18(x) (((x) & BIT_MASK_DR18) << BIT_SHIFT_DR18) -#define BIT_GET_DR18(x) (((x) >> BIT_SHIFT_DR18) & BIT_MASK_DR18) - - -//2 REG_SPIC_DR19 - -#define BIT_SHIFT_DR19 0 -#define BIT_MASK_DR19 0xffffffffL -#define BIT_DR19(x) (((x) & BIT_MASK_DR19) << BIT_SHIFT_DR19) -#define BIT_CTRL_DR19(x) (((x) & BIT_MASK_DR19) << BIT_SHIFT_DR19) -#define BIT_GET_DR19(x) (((x) >> BIT_SHIFT_DR19) & BIT_MASK_DR19) - - -//2 REG_SPIC_DR20 - -#define BIT_SHIFT_DR20 0 -#define BIT_MASK_DR20 0xffffffffL -#define BIT_DR20(x) (((x) & BIT_MASK_DR20) << BIT_SHIFT_DR20) -#define BIT_CTRL_DR20(x) (((x) & BIT_MASK_DR20) << BIT_SHIFT_DR20) -#define BIT_GET_DR20(x) (((x) >> BIT_SHIFT_DR20) & BIT_MASK_DR20) - - -//2 REG_SPIC_DR21 - -#define BIT_SHIFT_DR21 0 -#define BIT_MASK_DR21 0xffffffffL -#define BIT_DR21(x) (((x) & BIT_MASK_DR21) << BIT_SHIFT_DR21) -#define BIT_CTRL_DR21(x) (((x) & BIT_MASK_DR21) << BIT_SHIFT_DR21) -#define BIT_GET_DR21(x) (((x) >> BIT_SHIFT_DR21) & BIT_MASK_DR21) - - -//2 REG_SPIC_DR22 - -#define BIT_SHIFT_DR22 0 -#define BIT_MASK_DR22 0xffffffffL -#define BIT_DR22(x) (((x) & BIT_MASK_DR22) << BIT_SHIFT_DR22) -#define BIT_CTRL_DR22(x) (((x) & BIT_MASK_DR22) << BIT_SHIFT_DR22) -#define BIT_GET_DR22(x) (((x) >> BIT_SHIFT_DR22) & BIT_MASK_DR22) - - -//2 REG_SPIC_DR23 - -#define BIT_SHIFT_DR23 0 -#define BIT_MASK_DR23 0xffffffffL -#define BIT_DR23(x) (((x) & BIT_MASK_DR23) << BIT_SHIFT_DR23) -#define BIT_CTRL_DR23(x) (((x) & BIT_MASK_DR23) << BIT_SHIFT_DR23) -#define BIT_GET_DR23(x) (((x) >> BIT_SHIFT_DR23) & BIT_MASK_DR23) - - -//2 REG_SPIC_DR24 - -#define BIT_SHIFT_DR24 0 -#define BIT_MASK_DR24 0xffffffffL -#define BIT_DR24(x) (((x) & BIT_MASK_DR24) << BIT_SHIFT_DR24) -#define BIT_CTRL_DR24(x) (((x) & BIT_MASK_DR24) << BIT_SHIFT_DR24) -#define BIT_GET_DR24(x) (((x) >> BIT_SHIFT_DR24) & BIT_MASK_DR24) - - -//2 REG_SPIC_DR25 - -#define BIT_SHIFT_DR25 0 -#define BIT_MASK_DR25 0xffffffffL -#define BIT_DR25(x) (((x) & BIT_MASK_DR25) << BIT_SHIFT_DR25) -#define BIT_CTRL_DR25(x) (((x) & BIT_MASK_DR25) << BIT_SHIFT_DR25) -#define BIT_GET_DR25(x) (((x) >> BIT_SHIFT_DR25) & BIT_MASK_DR25) - - -//2 REG_SPIC_DR26 - -#define BIT_SHIFT_DR26 0 -#define BIT_MASK_DR26 0xffffffffL -#define BIT_DR26(x) (((x) & BIT_MASK_DR26) << BIT_SHIFT_DR26) -#define BIT_CTRL_DR26(x) (((x) & BIT_MASK_DR26) << BIT_SHIFT_DR26) -#define BIT_GET_DR26(x) (((x) >> BIT_SHIFT_DR26) & BIT_MASK_DR26) - - -//2 REG_SPIC_DR27 - -#define BIT_SHIFT_DR27 0 -#define BIT_MASK_DR27 0xffffffffL -#define BIT_DR27(x) (((x) & BIT_MASK_DR27) << BIT_SHIFT_DR27) -#define BIT_CTRL_DR27(x) (((x) & BIT_MASK_DR27) << BIT_SHIFT_DR27) -#define BIT_GET_DR27(x) (((x) >> BIT_SHIFT_DR27) & BIT_MASK_DR27) - - -//2 REG_SPIC_DR28 - -#define BIT_SHIFT_DR28 0 -#define BIT_MASK_DR28 0xffffffffL -#define BIT_DR28(x) (((x) & BIT_MASK_DR28) << BIT_SHIFT_DR28) -#define BIT_CTRL_DR28(x) (((x) & BIT_MASK_DR28) << BIT_SHIFT_DR28) -#define BIT_GET_DR28(x) (((x) >> BIT_SHIFT_DR28) & BIT_MASK_DR28) - - -//2 REG_SPIC_DR29 - -#define BIT_SHIFT_DR29 0 -#define BIT_MASK_DR29 0xffffffffL -#define BIT_DR29(x) (((x) & BIT_MASK_DR29) << BIT_SHIFT_DR29) -#define BIT_CTRL_DR29(x) (((x) & BIT_MASK_DR29) << BIT_SHIFT_DR29) -#define BIT_GET_DR29(x) (((x) >> BIT_SHIFT_DR29) & BIT_MASK_DR29) - - -//2 REG_SPIC_DR30 - -#define BIT_SHIFT_DR30 0 -#define BIT_MASK_DR30 0xffffffffL -#define BIT_DR30(x) (((x) & BIT_MASK_DR30) << BIT_SHIFT_DR30) -#define BIT_CTRL_DR30(x) (((x) & BIT_MASK_DR30) << BIT_SHIFT_DR30) -#define BIT_GET_DR30(x) (((x) >> BIT_SHIFT_DR30) & BIT_MASK_DR30) - - -//2 REG_SPIC_DR31 - -#define BIT_SHIFT_DR31 0 -#define BIT_MASK_DR31 0xffffffffL -#define BIT_DR31(x) (((x) & BIT_MASK_DR31) << BIT_SHIFT_DR31) -#define BIT_CTRL_DR31(x) (((x) & BIT_MASK_DR31) << BIT_SHIFT_DR31) -#define BIT_GET_DR31(x) (((x) >> BIT_SHIFT_DR31) & BIT_MASK_DR31) - - -//2 REG_SPIC_READ_FAST_SINGLE - -#define BIT_SHIFT_FRD_CMD 0 -#define BIT_MASK_FRD_CMD 0xff -#define BIT_FRD_CMD(x) (((x) & BIT_MASK_FRD_CMD) << BIT_SHIFT_FRD_CMD) -#define BIT_CTRL_FRD_CMD(x) (((x) & BIT_MASK_FRD_CMD) << BIT_SHIFT_FRD_CMD) -#define BIT_GET_FRD_CMD(x) (((x) >> BIT_SHIFT_FRD_CMD) & BIT_MASK_FRD_CMD) - - -//2 REG_SPIC_READ_DUAL_DATA - -#define BIT_SHIFT_RD_DUAL_O_CMD 0 -#define BIT_MASK_RD_DUAL_O_CMD 0xff -#define BIT_RD_DUAL_O_CMD(x) (((x) & BIT_MASK_RD_DUAL_O_CMD) << BIT_SHIFT_RD_DUAL_O_CMD) -#define BIT_CTRL_RD_DUAL_O_CMD(x) (((x) & BIT_MASK_RD_DUAL_O_CMD) << BIT_SHIFT_RD_DUAL_O_CMD) -#define BIT_GET_RD_DUAL_O_CMD(x) (((x) >> BIT_SHIFT_RD_DUAL_O_CMD) & BIT_MASK_RD_DUAL_O_CMD) - - -//2 REG_SPIC_READ_DUAL_ADDR_DATA - -#define BIT_SHIFT_RD_DUAL_IO_CMD 0 -#define BIT_MASK_RD_DUAL_IO_CMD 0xff -#define BIT_RD_DUAL_IO_CMD(x) (((x) & BIT_MASK_RD_DUAL_IO_CMD) << BIT_SHIFT_RD_DUAL_IO_CMD) -#define BIT_CTRL_RD_DUAL_IO_CMD(x) (((x) & BIT_MASK_RD_DUAL_IO_CMD) << BIT_SHIFT_RD_DUAL_IO_CMD) -#define BIT_GET_RD_DUAL_IO_CMD(x) (((x) >> BIT_SHIFT_RD_DUAL_IO_CMD) & BIT_MASK_RD_DUAL_IO_CMD) - - -//2 REG_SPIC_READ_QUAD_DATA - -#define BIT_SHIFT_RD_QUAD_O_CMD 0 -#define BIT_MASK_RD_QUAD_O_CMD 0xff -#define BIT_RD_QUAD_O_CMD(x) (((x) & BIT_MASK_RD_QUAD_O_CMD) << BIT_SHIFT_RD_QUAD_O_CMD) -#define BIT_CTRL_RD_QUAD_O_CMD(x) (((x) & BIT_MASK_RD_QUAD_O_CMD) << BIT_SHIFT_RD_QUAD_O_CMD) -#define BIT_GET_RD_QUAD_O_CMD(x) (((x) >> BIT_SHIFT_RD_QUAD_O_CMD) & BIT_MASK_RD_QUAD_O_CMD) - - -//2 REG_SPIC_READ_QUAD_ADDR_DATA - -#define BIT_SHIFT_RD_QUAD_IO_CMD 0 -#define BIT_MASK_RD_QUAD_IO_CMD 0xff -#define BIT_RD_QUAD_IO_CMD(x) (((x) & BIT_MASK_RD_QUAD_IO_CMD) << BIT_SHIFT_RD_QUAD_IO_CMD) -#define BIT_CTRL_RD_QUAD_IO_CMD(x) (((x) & BIT_MASK_RD_QUAD_IO_CMD) << BIT_SHIFT_RD_QUAD_IO_CMD) -#define BIT_GET_RD_QUAD_IO_CMD(x) (((x) >> BIT_SHIFT_RD_QUAD_IO_CMD) & BIT_MASK_RD_QUAD_IO_CMD) - - -//2 REG_SPIC_WRITE_SIGNLE - -#define BIT_SHIFT_WR_CMD 0 -#define BIT_MASK_WR_CMD 0xff -#define BIT_WR_CMD(x) (((x) & BIT_MASK_WR_CMD) << BIT_SHIFT_WR_CMD) -#define BIT_CTRL_WR_CMD(x) (((x) & BIT_MASK_WR_CMD) << BIT_SHIFT_WR_CMD) -#define BIT_GET_WR_CMD(x) (((x) >> BIT_SHIFT_WR_CMD) & BIT_MASK_WR_CMD) - - -//2 REG_SPIC_WRITE_DUAL_DATA - -#define BIT_SHIFT_WR_DUAL_I_CMD 0 -#define BIT_MASK_WR_DUAL_I_CMD 0xff -#define BIT_WR_DUAL_I_CMD(x) (((x) & BIT_MASK_WR_DUAL_I_CMD) << BIT_SHIFT_WR_DUAL_I_CMD) -#define BIT_CTRL_WR_DUAL_I_CMD(x) (((x) & BIT_MASK_WR_DUAL_I_CMD) << BIT_SHIFT_WR_DUAL_I_CMD) -#define BIT_GET_WR_DUAL_I_CMD(x) (((x) >> BIT_SHIFT_WR_DUAL_I_CMD) & BIT_MASK_WR_DUAL_I_CMD) - - -//2 REG_SPIC_WRITE_DUAL_ADDR_DATA - -#define BIT_SHIFT_WR_DUAL_II_CMD 0 -#define BIT_MASK_WR_DUAL_II_CMD 0xff -#define BIT_WR_DUAL_II_CMD(x) (((x) & BIT_MASK_WR_DUAL_II_CMD) << BIT_SHIFT_WR_DUAL_II_CMD) -#define BIT_CTRL_WR_DUAL_II_CMD(x) (((x) & BIT_MASK_WR_DUAL_II_CMD) << BIT_SHIFT_WR_DUAL_II_CMD) -#define BIT_GET_WR_DUAL_II_CMD(x) (((x) >> BIT_SHIFT_WR_DUAL_II_CMD) & BIT_MASK_WR_DUAL_II_CMD) - - -//2 REG_SPIC_WRITE_QUAD_DATA - -#define BIT_SHIFT_WR_QUAD_I_CMD 0 -#define BIT_MASK_WR_QUAD_I_CMD 0xff -#define BIT_WR_QUAD_I_CMD(x) (((x) & BIT_MASK_WR_QUAD_I_CMD) << BIT_SHIFT_WR_QUAD_I_CMD) -#define BIT_CTRL_WR_QUAD_I_CMD(x) (((x) & BIT_MASK_WR_QUAD_I_CMD) << BIT_SHIFT_WR_QUAD_I_CMD) -#define BIT_GET_WR_QUAD_I_CMD(x) (((x) >> BIT_SHIFT_WR_QUAD_I_CMD) & BIT_MASK_WR_QUAD_I_CMD) - - -//2 REG_SPIC_WRITE_QUAD_ADDR_DATA - -#define BIT_SHIFT_WR_QUAD_II_CMD 0 -#define BIT_MASK_WR_QUAD_II_CMD 0xff -#define BIT_WR_QUAD_II_CMD(x) (((x) & BIT_MASK_WR_QUAD_II_CMD) << BIT_SHIFT_WR_QUAD_II_CMD) -#define BIT_CTRL_WR_QUAD_II_CMD(x) (((x) & BIT_MASK_WR_QUAD_II_CMD) << BIT_SHIFT_WR_QUAD_II_CMD) -#define BIT_GET_WR_QUAD_II_CMD(x) (((x) >> BIT_SHIFT_WR_QUAD_II_CMD) & BIT_MASK_WR_QUAD_II_CMD) - - -//2 REG_SPIC_WRITE_ENABLE - -#define BIT_SHIFT_WR_EN_CMD 0 -#define BIT_MASK_WR_EN_CMD 0xff -#define BIT_WR_EN_CMD(x) (((x) & BIT_MASK_WR_EN_CMD) << BIT_SHIFT_WR_EN_CMD) -#define BIT_CTRL_WR_EN_CMD(x) (((x) & BIT_MASK_WR_EN_CMD) << BIT_SHIFT_WR_EN_CMD) -#define BIT_GET_WR_EN_CMD(x) (((x) >> BIT_SHIFT_WR_EN_CMD) & BIT_MASK_WR_EN_CMD) - - -//2 REG_SPIC_READ_STATUS - -#define BIT_SHIFT_RD_ST_CMD 0 -#define BIT_MASK_RD_ST_CMD 0xff -#define BIT_RD_ST_CMD(x) (((x) & BIT_MASK_RD_ST_CMD) << BIT_SHIFT_RD_ST_CMD) -#define BIT_CTRL_RD_ST_CMD(x) (((x) & BIT_MASK_RD_ST_CMD) << BIT_SHIFT_RD_ST_CMD) -#define BIT_GET_RD_ST_CMD(x) (((x) >> BIT_SHIFT_RD_ST_CMD) & BIT_MASK_RD_ST_CMD) - - -//2 REG_SPIC_CTRLR2 - -#define BIT_SHIFT_FIFO_ENTRY 4 -#define BIT_MASK_FIFO_ENTRY 0xf -#define BIT_FIFO_ENTRY(x) (((x) & BIT_MASK_FIFO_ENTRY) << BIT_SHIFT_FIFO_ENTRY) -#define BIT_CTRL_FIFO_ENTRY(x) (((x) & BIT_MASK_FIFO_ENTRY) << BIT_SHIFT_FIFO_ENTRY) -#define BIT_GET_FIFO_ENTRY(x) (((x) >> BIT_SHIFT_FIFO_ENTRY) & BIT_MASK_FIFO_ENTRY) - -#define BIT_WR_SEQ BIT(3) -#define BIT_SHIFT_WR_SEQ 3 -#define BIT_MASK_WR_SEQ 0x1 -#define BIT_CTRL_WR_SEQ(x) (((x) & BIT_MASK_WR_SEQ) << BIT_SHIFT_WR_SEQ) - -#define BIT_WPN_DNUM BIT(2) -#define BIT_SHIFT_WPN_DNUM 2 -#define BIT_MASK_WPN_DNUM 0x1 -#define BIT_CTRL_WPN_DNUM(x) (((x) & BIT_MASK_WPN_DNUM) << BIT_SHIFT_WPN_DNUM) - -#define BIT_WPN_SET BIT(1) -#define BIT_SHIFT_WPN_SET 1 -#define BIT_MASK_WPN_SET 0x1 -#define BIT_CTRL_WPN_SET(x) (((x) & BIT_MASK_WPN_SET) << BIT_SHIFT_WPN_SET) - -#define BIT_SO_DUM BIT(0) -#define BIT_SHIFT_SO_DUM 0 -#define BIT_MASK_SO_DUM 0x1 -#define BIT_CTRL_SO_DUM(x) (((x) & BIT_MASK_SO_DUM) << BIT_SHIFT_SO_DUM) - -//2 REG_SPIC_FBAUDR - -#define BIT_SHIFT_FSCKDV 0 -#define BIT_MASK_FSCKDV 0xfff -#define BIT_FSCKDV(x) (((x) & BIT_MASK_FSCKDV) << BIT_SHIFT_FSCKDV) -#define BIT_CTRL_FSCKDV(x) (((x) & BIT_MASK_FSCKDV) << BIT_SHIFT_FSCKDV) -#define BIT_GET_FSCKDV(x) (((x) >> BIT_SHIFT_FSCKDV) & BIT_MASK_FSCKDV) - - -//2 REG_SPIC_ADDR_LENGTH - -#define BIT_SHIFT_ADDR_PHASE_LENGTH 0 -#define BIT_MASK_ADDR_PHASE_LENGTH 0x3 -#define BIT_ADDR_PHASE_LENGTH(x) (((x) & BIT_MASK_ADDR_PHASE_LENGTH) << BIT_SHIFT_ADDR_PHASE_LENGTH) -#define BIT_CTRL_ADDR_PHASE_LENGTH(x) (((x) & BIT_MASK_ADDR_PHASE_LENGTH) << BIT_SHIFT_ADDR_PHASE_LENGTH) -#define BIT_GET_ADDR_PHASE_LENGTH(x) (((x) >> BIT_SHIFT_ADDR_PHASE_LENGTH) & BIT_MASK_ADDR_PHASE_LENGTH) - - -//2 REG_SPIC_AUTO_LENGTH - -#define BIT_SHIFT_CS_H_WR_DUM_LEN 28 -#define BIT_MASK_CS_H_WR_DUM_LEN 0xf -#define BIT_CS_H_WR_DUM_LEN(x) (((x) & BIT_MASK_CS_H_WR_DUM_LEN) << BIT_SHIFT_CS_H_WR_DUM_LEN) -#define BIT_CTRL_CS_H_WR_DUM_LEN(x) (((x) & BIT_MASK_CS_H_WR_DUM_LEN) << BIT_SHIFT_CS_H_WR_DUM_LEN) -#define BIT_GET_CS_H_WR_DUM_LEN(x) (((x) >> BIT_SHIFT_CS_H_WR_DUM_LEN) & BIT_MASK_CS_H_WR_DUM_LEN) - - -#define BIT_SHIFT_CS_H_RD_DUM_LEN 26 -#define BIT_MASK_CS_H_RD_DUM_LEN 0x3 -#define BIT_CS_H_RD_DUM_LEN(x) (((x) & BIT_MASK_CS_H_RD_DUM_LEN) << BIT_SHIFT_CS_H_RD_DUM_LEN) -#define BIT_CTRL_CS_H_RD_DUM_LEN(x) (((x) & BIT_MASK_CS_H_RD_DUM_LEN) << BIT_SHIFT_CS_H_RD_DUM_LEN) -#define BIT_GET_CS_H_RD_DUM_LEN(x) (((x) >> BIT_SHIFT_CS_H_RD_DUM_LEN) & BIT_MASK_CS_H_RD_DUM_LEN) - - -#define BIT_SHIFT_AUTO_DUM_LEN 18 -#define BIT_MASK_AUTO_DUM_LEN 0xff -#define BIT_AUTO_DUM_LEN(x) (((x) & BIT_MASK_AUTO_DUM_LEN) << BIT_SHIFT_AUTO_DUM_LEN) -#define BIT_CTRL_AUTO_DUM_LEN(x) (((x) & BIT_MASK_AUTO_DUM_LEN) << BIT_SHIFT_AUTO_DUM_LEN) -#define BIT_GET_AUTO_DUM_LEN(x) (((x) >> BIT_SHIFT_AUTO_DUM_LEN) & BIT_MASK_AUTO_DUM_LEN) - - -#define BIT_SHIFT_AUTO_ADDR__LENGTH 16 -#define BIT_MASK_AUTO_ADDR__LENGTH 0x3 -#define BIT_AUTO_ADDR__LENGTH(x) (((x) & BIT_MASK_AUTO_ADDR__LENGTH) << BIT_SHIFT_AUTO_ADDR__LENGTH) -#define BIT_CTRL_AUTO_ADDR__LENGTH(x) (((x) & BIT_MASK_AUTO_ADDR__LENGTH) << BIT_SHIFT_AUTO_ADDR__LENGTH) -#define BIT_GET_AUTO_ADDR__LENGTH(x) (((x) >> BIT_SHIFT_AUTO_ADDR__LENGTH) & BIT_MASK_AUTO_ADDR__LENGTH) - - -#define BIT_SHIFT_RD_DUMMY_LENGTH 0 -#define BIT_MASK_RD_DUMMY_LENGTH 0xffff -#define BIT_RD_DUMMY_LENGTH(x) (((x) & BIT_MASK_RD_DUMMY_LENGTH) << BIT_SHIFT_RD_DUMMY_LENGTH) -#define BIT_CTRL_RD_DUMMY_LENGTH(x) (((x) & BIT_MASK_RD_DUMMY_LENGTH) << BIT_SHIFT_RD_DUMMY_LENGTH) -#define BIT_GET_RD_DUMMY_LENGTH(x) (((x) >> BIT_SHIFT_RD_DUMMY_LENGTH) & BIT_MASK_RD_DUMMY_LENGTH) - - -//2 REG_SPIC_VALID_CMD -#define BIT_WR_BLOCKING BIT(9) -#define BIT_SHIFT_WR_BLOCKING 9 -#define BIT_MASK_WR_BLOCKING 0x1 -#define BIT_CTRL_WR_BLOCKING(x) (((x) & BIT_MASK_WR_BLOCKING) << BIT_SHIFT_WR_BLOCKING) - -#define BIT_WR_QUAD_II BIT(8) -#define BIT_SHIFT_WR_QUAD_II 8 -#define BIT_MASK_WR_QUAD_II 0x1 -#define BIT_CTRL_WR_QUAD_II(x) (((x) & BIT_MASK_WR_QUAD_II) << BIT_SHIFT_WR_QUAD_II) - -#define BIT_WR_QUAD_I BIT(7) -#define BIT_SHIFT_WR_QUAD_I 7 -#define BIT_MASK_WR_QUAD_I 0x1 -#define BIT_CTRL_WR_QUAD_I(x) (((x) & BIT_MASK_WR_QUAD_I) << BIT_SHIFT_WR_QUAD_I) - -#define BIT_WR_DUAL_II BIT(6) -#define BIT_SHIFT_WR_DUAL_II 6 -#define BIT_MASK_WR_DUAL_II 0x1 -#define BIT_CTRL_WR_DUAL_II(x) (((x) & BIT_MASK_WR_DUAL_II) << BIT_SHIFT_WR_DUAL_II) - -#define BIT_WR_DUAL_I BIT(5) -#define BIT_SHIFT_WR_DUAL_I 5 -#define BIT_MASK_WR_DUAL_I 0x1 -#define BIT_CTRL_WR_DUAL_I(x) (((x) & BIT_MASK_WR_DUAL_I) << BIT_SHIFT_WR_DUAL_I) - -#define BIT_RD_QUAD_IO BIT(4) -#define BIT_SHIFT_RD_QUAD_IO 4 -#define BIT_MASK_RD_QUAD_IO 0x1 -#define BIT_CTRL_RD_QUAD_IO(x) (((x) & BIT_MASK_RD_QUAD_IO) << BIT_SHIFT_RD_QUAD_IO) - -#define BIT_RD_QUAD_O BIT(3) -#define BIT_SHIFT_RD_QUAD_O 3 -#define BIT_MASK_RD_QUAD_O 0x1 -#define BIT_CTRL_RD_QUAD_O(x) (((x) & BIT_MASK_RD_QUAD_O) << BIT_SHIFT_RD_QUAD_O) - -#define BIT_RD_DUAL_IO BIT(2) -#define BIT_SHIFT_RD_DUAL_IO 2 -#define BIT_MASK_RD_DUAL_IO 0x1 -#define BIT_CTRL_RD_DUAL_IO(x) (((x) & BIT_MASK_RD_DUAL_IO) << BIT_SHIFT_RD_DUAL_IO) - -#define BIT_RD_DUAL_I BIT(1) -#define BIT_SHIFT_RD_DUAL_I 1 -#define BIT_MASK_RD_DUAL_I 0x1 -#define BIT_CTRL_RD_DUAL_I(x) (((x) & BIT_MASK_RD_DUAL_I) << BIT_SHIFT_RD_DUAL_I) - -#define BIT_FRD_SINGEL BIT(0) -#define BIT_SHIFT_FRD_SINGEL 0 -#define BIT_MASK_FRD_SINGEL 0x1 -#define BIT_CTRL_FRD_SINGEL(x) (((x) & BIT_MASK_FRD_SINGEL) << BIT_SHIFT_FRD_SINGEL) - -//2 REG_SPIC_FLASE_SIZE - -#define BIT_SHIFT_FLASE_SIZE 0 -#define BIT_MASK_FLASE_SIZE 0xf -#define BIT_FLASE_SIZE(x) (((x) & BIT_MASK_FLASE_SIZE) << BIT_SHIFT_FLASE_SIZE) -#define BIT_CTRL_FLASE_SIZE(x) (((x) & BIT_MASK_FLASE_SIZE) << BIT_SHIFT_FLASE_SIZE) -#define BIT_GET_FLASE_SIZE(x) (((x) >> BIT_SHIFT_FLASE_SIZE) & BIT_MASK_FLASE_SIZE) - - -//2 REG_SPIC_FLUSH_FIFO -#define BIT_FLUSH_FIFO BIT(0) -#define BIT_SHIFT_FLUSH_FIFO 0 -#define BIT_MASK_FLUSH_FIFO 0x1 -#define BIT_CTRL_FLUSH_FIFO(x) (((x) & BIT_MASK_FLUSH_FIFO) << BIT_SHIFT_FLUSH_FIFO) - -//=================== Register Address Definition ============================// -#define REG_SPIC_CTRLR0 0x0000 //O 0x1040300 -#define REG_SPIC_CTRLR1 0x0004 //O 0x10 -#define REG_SPIC_SSIENR 0x0008 //O 0 -#define REG_SPIC_MWCR 0x000C // 0 -#define REG_SPIC_SER 0x0010 //O 1 -#define REG_SPIC_BAUDR 0x0014 //O 1 -#define REG_SPIC_TXFTLR 0x0018 // 0 -#define REG_SPIC_RXFTLR 0x001C //O 0x1F -#define REG_SPIC_TXFLR 0x0020 //O 0 -#define REG_SPIC_RXFLR 0x0024 // 0 -#define REG_SPIC_SR 0x0028 // 6 -#define REG_SPIC_IMR 0x002C //O 0x1FF -#define REG_SPIC_ISR 0x0030 // 4 -#define REG_SPIC_RISR 0x0034 // 4 -#define REG_SPIC_TXOICR 0x0038 // 0 -#define REG_SPIC_RXOICR 0x003C // 0 -#define REG_SPC_RXUICR 0x0040 // 0 -#define REG_SPIC_MSTICR 0x0044 // 0 -#define REG_SPIC_ICR 0x0048 // 0 -#define REG_SPIC_DMACR 0x004C // 0 -#define REG_SPIC_DMATDLR0 0x0050 // 0 -#define REG_SPIC_DMATDLR1 0x0054 // 0 -#define REG_SPIC_IDR 0x0058 // 0x10001 -#define REG_SPIC_VERSION 0x005C // 0x40470603 -#define REG_SPIC_DR0 0x0060 -#define REG_SPIC_DR1 0x0064 -#define REG_SPIC_DR2 0x0068 -#define REG_SPIC_DR3 0x006C -#define REG_SPIC_DR4 0x0070 -#define REG_SPIC_DR5 0x0074 -#define REG_SPIC_DR6 0x0078 -#define REG_SPIC_DR7 0x007C -#define REG_SPIC_DR8 0x0080 -#define REG_SPIC_DR9 0x0084 -#define REG_SPIC_DR10 0x0088 -#define REG_SPIC_DR11 0x008C -#define REG_SPIC_DR12 0x0090 -#define REG_SPIC_DR13 0x0094 -#define REG_SPIC_DR14 0x0098 -#define REG_SPIC_DR15 0x009C -#define REG_SPIC_DR16 0x00A0 -#define REG_SPIC_DR17 0x00A4 -#define REG_SPIC_DR18 0x00A8 -#define REG_SPIC_DR19 0x00AC -#define REG_SPIC_DR20 0x00B0 -#define REG_SPIC_DR21 0x00B4 -#define REG_SPIC_DR22 0x00B8 -#define REG_SPIC_DR23 0x00BC -#define REG_SPIC_DR24 0x00C0 -#define REG_SPIC_DR25 0x00C4 -#define REG_SPIC_DR26 0x00C8 -#define REG_SPIC_DR27 0x00CC -#define REG_SPIC_DR28 0x00D0 -#define REG_SPIC_DR29 0x00D4 -#define REG_SPIC_DR30 0x00D8 -#define REG_SPIC_DR31 0x00DC // MXIC (DeviceID: FC, Flash Size: 1048576 bytes, FlashID: C22014/1, SpicMode: DIO) -#define REG_SPIC_READ_FAST_SINGLE 0x00E0 //O 0x0B -#define REG_SPIC_READ_DUAL_DATA 0x00E4 //O 0x3B -#define REG_SPIC_READ_DUAL_ADDR_DATA 0x00E8 //O 0x3B -#define REG_SPIC_READ_QUAD_DATA 0x00EC //O 0x6B -#define REG_SPIC_READ_QUAD_ADDR_DATA 0x00F0 //O 0xEB -#define REG_SPIC_WRITE_SIGNLE 0x00F4 //O 0x02 -#define REG_SPIC_WRITE_DUAL_DATA 0x00F8 //O 0xA2 -#define REG_SPIC_WRITE_DUAL_ADDR_DATA 0x00FC//O 0xA2 -#define REG_SPIC_WRITE_QUAD_DATA 0x0100 //O 0x32 -#define REG_SPIC_WRITE_QUAD_ADDR_DATA 0x0104//O 0x38 -#define REG_SPIC_WRITE_ENABLE 0x0108 //O 0x06 -#define REG_SPIC_READ_STATUS 0x010C //O 0x05 -#define REG_SPIC_CTRLR2 0x0110 //O 0x51 -#define REG_SPIC_FBAUDR 0x0114 //O 0x1 -#define REG_SPIC_ADDR_LENGTH 0x0118 //O 0x3 -#define REG_SPIC_AUTO_LENGTH 0x011C //O 0x20030011/0x20030021 -#define REG_SPIC_VALID_CMD 0x0120 //O 0x202 -#define REG_SPIC_FLASE_SIZE 0x0124 //O 0x0E -#define REG_SPIC_FLUSH_FIFO 0x0128 //O 0 - -void SpicInitRtl8195A(uint8_t InitBaudRate, uint8_t SpicBitMode); // spi-flash controller initialization -void SpicRxCmdRtl8195A(uint8_t cmd); // recieve command -void SpicTxCmdRtl8195A(uint8_t cmd, SPIC_INIT_PARA SpicInitPara); // transfer command -uint8_t SpicGetFlashStatusRtl8195A(SPIC_INIT_PARA SpicInitPara); // RDSR, read spi-flash status register -void SpicSetFlashStatusRtl8195A(uint32_t data, SPIC_INIT_PARA SpicInitPara); // WRSR, write spi-flash status register -void SpicWaitBusyDoneRtl8195A(void); // wait sr[0] = 0, wait transmission done -void SpicWaitWipDoneRtl8195A(SPIC_INIT_PARA SpicInitPara); // wait spi-flash status register[0] = 0 -void SpicEraseFlashRtl8195A(void); // CE, flash chip erase -uint32_t SpicCmpDataForCalibrationRtl8195A(void); // compare read_data and golden_data -void SpicLoadInitParaFromClockRtl8195A(uint8_t CpuClkMode, uint8_t BaudRate, PSPIC_INIT_PARA pSpicInitPara); - -#if 1//CONFIG_CHIP_E_CUT - -void -SpicTxCmdWithDataRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara, - IN uint8_t cmd, - IN uint8_t DataPhaseLen, - IN uint8_t* pData -); - -void -SpicTxFlashInstRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara, - IN uint8_t cmd, - IN uint8_t DataPhaseLen, - IN uint8_t* pData -); - -void -SpicDeepPowerDownFlashRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara -); - -void -SpicBlockEraseFlashRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara, - IN uint32_t Address -); - -void -SpicSectorEraseFlashRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara, - IN uint32_t Address -); - -void -SpicWriteProtectFlashRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara, - IN uint32_t Protect -); - -BOOLEAN -SpicFlashInitRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara, - IN uint8_t SpicBitMode -); - -uint32_t -SpicCalibrationRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara, - IN uint8_t SpicBitMode, - IN uint32_t DefRdDummyCycle -); - -void -SpicConfigAutoModeRtl8195A_V04( - IN uint8_t SpicBitMode -); - -void -SpicWaitWipDoneRefinedRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara -); - -void -SpicRxCmdRefinedRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara, - IN uint8_t cmd -); - -uint8_t -SpicGetFlashStatusRefinedRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara -); - -void -SpicInitRefinedRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara, - IN uint8_t InitBaudRate, - IN uint8_t SpicBitMode -); - -void -SpicEraseFlashRefinedRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara -); - -void -SpicSetFlashStatusRefinedRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara, - IN uint32_t data -); - -uint32_t -SpicWaitWipRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara -); - -uint32_t -SpicOneBitCalibrationRtl8195A_V04( - IN SPIC_INIT_PARA *pSpicInitPara, - IN uint8_t SysCpuClk -); - -void -SpicLoadInitParaFromClockRtl8195A_V04( - IN uint8_t CpuClkMode, - IN uint8_t BaudRate, - IN PSPIC_INIT_PARA pSpicInitPara -) ; - -uint8_t -SpicGetFlashFlagRtl8195A_V04(IN SPIC_INIT_PARA * pSpicInitPara); - -void -SpicWaitOperationDoneRtl8195A_V04(IN SPIC_INIT_PARA * pSpicInitPara); - -void -SpicUserProgramRtl8195A_V04(IN uint8_t * data, IN SPIC_INIT_PARA SpicInitPara, IN uint32_t addr, IN uint32_t * LengthInfo); - -void -SpicUserReadRtl8195A_V04(IN uint32_t Length, IN uint32_t addr, IN uint8_t * data); - -void -SpicUserReadFourByteRtl8195A_V04(IN uint32_t Length, IN uint32_t addr, IN uint32_t * data, IN uint8_t BitMode); - -void -SpicSetExtendAddrRtl8195A_V04(IN uint32_t data, IN SPIC_INIT_PARA * pSpicInitPara); - -uint8_t -SpicGetExtendAddrRtl8195A_V04(IN SPIC_INIT_PARA * pSpicInitPara); - -void -SpicReadIDRtl8195A_V04(void); - -void -SpicDieEraseFlashRtl8195A_V04(IN SPIC_INIT_PARA * pSpicInitPara, IN uint32_t Address); - -uint8_t -SpicGetConfigRegRtl8195A_V04(IN SPIC_INIT_PARA * pSpicInitPara); -#endif // #if CONFIG_CHIP_E_CUT - -#endif // end of "#ifndef _RTL8195A_SPI_FLASH_H" diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_ssi.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_ssi.c deleted file mode 100644 index bc2fae4..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_ssi.c +++ /dev/null @@ -1,1607 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "rtl8195a.h" - -#ifdef CONFIG_SOC_PS_EN - -extern _LONG_CALL_ -HAL_Status HalSsiInitRtl8195a(void *Adaptor); - -//extern _LONG_CALL_ uint32_t HalGetCpuClk(void); - - -void _SsiReadInterruptRtl8195a(void *Adapter) -{ - SSI_DBG_ENTRANCE("_SsiReadInterrupt()\n"); - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - uint32_t ReceiveLevel; - volatile uint32_t Readable = HalSsiReadableRtl8195a(Adapter); - uint8_t Index = pHalSsiAdapter->Index; - -// while (Readable) { - if (Readable) { - ReceiveLevel = HalSsiGetRxFifoLevelRtl8195a(Adapter); - - while (ReceiveLevel--) { - if (pHalSsiAdapter->RxData != NULL) { - if ((pHalSsiAdapter->DataFrameSize+1) > 8) { - // 16~9 bits mode - *((uint16_t*)(pHalSsiAdapter->RxData)) = (uint16_t)(HAL_SSI_READ32(Index, REG_DW_SSI_DR)); - pHalSsiAdapter->RxData = (void*)(((uint16_t*)pHalSsiAdapter->RxData) + 1); - } - else { - // 8~4 bits mode - *((uint8_t*)(pHalSsiAdapter->RxData)) = (uint8_t)(HAL_SSI_READ32(Index, REG_DW_SSI_DR)); - pHalSsiAdapter->RxData = (void*)(((uint8_t*)pHalSsiAdapter->RxData) + 1); - } - } - else { - // for Master mode, doing TX also will got RX data, so drop the dummy data - HAL_SSI_READ32(Index, REG_DW_SSI_DR); - } - - if (pHalSsiAdapter->RxLength > 0) { - pHalSsiAdapter->RxLength--; - } -#if 0 - else if (pHalSsiAdapter->RxLengthRemainder > 0) { - pHalSsiAdapter->RxLengthRemainder--; - } - - // Fixed length receive Complete. (RxLength & RxLengthRemainder == 0) - if ((pHalSsiAdapter->RxLength == 0) && (pHalSsiAdapter->RxLengthRemainder == 0)) { - break; - } -#endif - if (pHalSsiAdapter->RxLength == 0) { - break; - } - } - -// if (pHalSsiAdapter->RxLength == 0) { -// break; -// } - - if (((pHalSsiAdapter->InterruptMask & BIT_IMR_TXEIM)!=0) && (pHalSsiAdapter->TxLength > 0)) { - _SsiWriteInterruptRtl8195a(pHalSsiAdapter); - } - -// Readable = HalSsiReadableRtl8195a(Adapter); - } - - if ((pHalSsiAdapter->RxLength > 0) && - (pHalSsiAdapter->RxLength < (pHalSsiAdapter->RxThresholdLevel+1))) { - SSI_DBG_INT_READ("Setting Rx FIFO Threshold Level to 1\n"); - pHalSsiAdapter->RxThresholdLevel = 0; - HalSsiSetRxFifoThresholdLevelRtl8195a((void*)pHalSsiAdapter); - } - - if (pHalSsiAdapter->RxLength == 0) { - DBG_SSI_INFO("_SsiReadInterruptRtl8195a: RX_Done\r\n"); - pHalSsiAdapter->InterruptMask &= ~(BIT_IMR_RXFIM | BIT_IMR_RXOIM | BIT_IMR_RXUIM); - HalSsiSetInterruptMaskRtl8195a((void*)pHalSsiAdapter); -// if (pHalSsiAdapter->RxData != NULL) { - if (pHalSsiAdapter->RxCompCallback != NULL) { - pHalSsiAdapter->RxCompCallback(pHalSsiAdapter->RxCompCbPara); - } -// } - } - -} - - -void _SsiWriteInterruptRtl8195a(void *Adapter) -{ - SSI_DBG_ENTRANCE("_SsiWriteInterrupt()\n"); - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - uint32_t Writeable = HalSsiWriteableRtl8195a(Adapter); -// uint32_t TxWriteMax = SSI_TX_FIFO_DEPTH - pHalSsiAdapter->TxThresholdLevel; - uint32_t TxWriteMax; - uint8_t Index = pHalSsiAdapter->Index; - uint32_t i; - volatile uint32_t bus_busy; - - if (pHalSsiAdapter->TxLength == 0) { - pHalSsiAdapter->InterruptMask &= ~(BIT_IMR_TXEIM); - HalSsiSetInterruptMaskRtl8195a((void*)pHalSsiAdapter); - for (i=0;i<1000000;i++) { - bus_busy = HAL_SSI_READ32(Index, REG_DW_SSI_SR) & BIT_SR_BUSY; - if (!bus_busy) { - break; // break the for loop - } - } - - // If it's not a dummy TX for master read SPI, then call the TX_done callback - if (pHalSsiAdapter->TxData != NULL) { - if (pHalSsiAdapter->TxIdleCallback != NULL) { - pHalSsiAdapter->TxIdleCallback(pHalSsiAdapter->TxIdleCbPara); - } - } - - return; - } - - if (Writeable) { - TxWriteMax = SSI_TX_FIFO_DEPTH - HalSsiGetTxFifoLevelRtl8195a(Adapter); - /* Disable Tx FIFO Empty IRQ */ - pHalSsiAdapter->InterruptMask &= ~ BIT_IMR_TXEIM; - HalSsiSetInterruptMaskRtl8195a((void*)pHalSsiAdapter); - //Clear RX FIFO first, to prevent RX Overflow - if ((pHalSsiAdapter->RxLength > 0) && (pHalSsiAdapter->TxData != NULL)) { - _SsiReadInterruptRtl8195a(pHalSsiAdapter); - } - - while (TxWriteMax--) { - if ((pHalSsiAdapter->DataFrameSize+1) > 8) { - // 16~9 bits mode - if (pHalSsiAdapter->TxData != NULL) { - HAL_SSI_WRITE16(Index, REG_DW_SSI_DR, *((uint16_t*)(pHalSsiAdapter->TxData))); - pHalSsiAdapter->TxData = (void*)(((uint16_t*)pHalSsiAdapter->TxData) + 1); - } - else { - // For master mode: Push a dummy to TX FIFO for Read - if (pHalSsiAdapter->Role == SSI_MASTER) { - HAL_SSI_WRITE16(Index, REG_DW_SSI_DR, (uint16_t)SSI_DUMMY_DATA); // Dummy byte - } - } - } - else { - // 8~4 bits mode - if (pHalSsiAdapter->TxData != NULL) { - HAL_SSI_WRITE8(Index, REG_DW_SSI_DR, *((uint8_t*)(pHalSsiAdapter->TxData))); - pHalSsiAdapter->TxData = (void*)(((uint8_t*)pHalSsiAdapter->TxData) + 1); - } - else { - // For master mode: Push a dummy to TX FIFO for Read - if (pHalSsiAdapter->Role == SSI_MASTER) { - HAL_SSI_WRITE8(Index, REG_DW_SSI_DR, (uint8_t)SSI_DUMMY_DATA); // Dummy byte - } - } - } - - pHalSsiAdapter->TxLength--; - - if (pHalSsiAdapter->TxLength == 0) - break; - } - - /* Enable Tx FIFO Empty IRQ */ - pHalSsiAdapter->InterruptMask |= BIT_IMR_TXEIM; - HalSsiSetInterruptMaskRtl8195a((void*)pHalSsiAdapter); - } - - if (pHalSsiAdapter->TxLength == 0) { - DBG_SSI_INFO("_SsiWriteInterruptRtl8195a: TX_Done\r\n"); - HalSsiTxFIFOThresholdRtl8195a((void*)pHalSsiAdapter, 0); // trigger TX interrupt when TX FIFO is totally empty -// pHalSsiAdapter->InterruptMask &= ~(BIT_IMR_TXOIM | BIT_IMR_TXEIM); - pHalSsiAdapter->InterruptMask &= ~(BIT_IMR_TXOIM); - HalSsiSetInterruptMaskRtl8195a((void*)pHalSsiAdapter); - // If it's not a dummy TX for master read SPI, then call the TX_done callback - if (pHalSsiAdapter->TxData != NULL) { - if (pHalSsiAdapter->TxCompCallback != NULL) { - pHalSsiAdapter->TxCompCallback(pHalSsiAdapter->TxCompCbPara); - } - } - } -} - - -uint32_t _SsiIrqHandleRtl8195a(void *Adaptor) -{ - SSI_DBG_ENTRANCE("_SsiIrqHandle()\n"); - PHAL_SSI_ADAPTOR pHalSsiAdaptor = (PHAL_SSI_ADAPTOR) Adaptor; - uint32_t InterruptStatus = HalSsiGetInterruptStatusRtl8195a(Adaptor); - uint8_t Index = pHalSsiAdaptor->Index; - - if (InterruptStatus & BIT_ISR_TXOIS) { - DBG_SSI_ERR("[INT][SSI%d] Transmit FIFO Overflow Interrupt\n", Index); - HAL_SSI_READ32(Index, REG_DW_SSI_TXOICR); - } - - if (InterruptStatus & BIT_ISR_RXUIS) { - SSI_DBG_INT_HNDLR("[INT][SSI%d] Receive FIFO Underflow Interrupt\n", Index); - HAL_SSI_READ32(Index, REG_DW_SSI_RXUICR); - } - - if (InterruptStatus & BIT_ISR_RXOIS) { - DBG_SSI_ERR("[INT][SSI%d] Receive FIFO Overflow Interrupt\n", Index); - HAL_SSI_READ32(Index, REG_DW_SSI_RXOICR); - } - - if (InterruptStatus & BIT_ISR_MSTIS) { - SSI_DBG_INT_HNDLR("[INT][SSI%d] Multi-Master Contention Interrupt\n", Index); - /* Another master is actively transferring data */ - /* TODO: Do reading data... */ - HAL_SSI_READ32(Index, REG_DW_SSI_MSTICR); - } - - if ((InterruptStatus & BIT_ISR_RXFIS) ) { - SSI_DBG_INT_HNDLR("[INT][SSI%d] Receive FIFO Full Interrupt\n", Index); - _SsiReadInterruptRtl8195a(Adaptor); - } - - if ((InterruptStatus & BIT_ISR_TXEIS) || - (((pHalSsiAdaptor->InterruptMask & BIT_IMR_TXEIM)!=0) && (pHalSsiAdaptor->TxLength > 0))) { - /* Tx FIFO is empty, need to transfer data */ - SSI_DBG_INT_HNDLR("[INT][SSI%d] Transmit FIFO Empty Interrupt\n", Index); - _SsiWriteInterruptRtl8195a(Adaptor); - } - - return 0; -} - -HAL_Status HalSsiInitRtl8195a_Patch(void *Adaptor) -{ - SSI_DBG_ENTRANCE("HalSsiInitRtl8195a()\n"); - PHAL_SSI_ADAPTOR pHalSsiAdaptor = (PHAL_SSI_ADAPTOR) Adaptor; - volatile IRQn_Type IrqNum; - uint32_t IRQ_UNKNOWN = 999; - uint32_t Ctrlr0Value = 0; - uint32_t Ctrlr1Value = 0; - uint32_t BaudrValue = 0; - uint32_t TxftlrValue = 0; - uint32_t RxftlrValue = 0; - uint32_t MwcrValue = 0; - uint8_t MicrowireTransferMode = pHalSsiAdaptor->MicrowireTransferMode; - uint8_t DataFrameFormat = pHalSsiAdaptor->DataFrameFormat; - uint8_t TransferMode = pHalSsiAdaptor->TransferMode; - uint8_t Index = pHalSsiAdaptor->Index; - uint8_t Role = pHalSsiAdaptor->Role; - - if (Index > 2) { - DBG_SSI_ERR("HalSsiInitRtl8195a: Invalid SSI Idx %d\r\n", Index); - return HAL_ERR_PARA; - } - HalSsiPinmuxEnableRtl8195a_Patch(pHalSsiAdaptor); - HalSsiDisableRtl8195a(Adaptor); - - /* REG_DW_SSI_CTRLR0 */ - Ctrlr0Value |= BIT_CTRLR0_DFS(pHalSsiAdaptor->DataFrameSize); - Ctrlr0Value |= BIT_CTRLR0_FRF(pHalSsiAdaptor->DataFrameFormat); - Ctrlr0Value |= BIT_CTRLR0_SCPH(pHalSsiAdaptor->SclkPhase); - Ctrlr0Value |= BIT_CTRLR0_SCPOL(pHalSsiAdaptor->SclkPolarity); - Ctrlr0Value |= BIT_CTRLR0_TMOD(pHalSsiAdaptor->TransferMode); - Ctrlr0Value |= BIT_CTRLR0_CFS(pHalSsiAdaptor->ControlFrameSize); - - if (Role == SSI_SLAVE) - Ctrlr0Value |= BIT_CTRLR0_SLV_OE(pHalSsiAdaptor->SlaveOutputEnable); - - SSI_DBG_INIT("[1] Set SSI%d REG_DW_SSI_CTRLR0 Value: %X\n", Index, Ctrlr0Value); - - HAL_SSI_WRITE32(Index, REG_DW_SSI_CTRLR0, Ctrlr0Value); - - SSI_DBG_INIT("[2] SSI%d REG_DW_SSI_CTRLR0(%X) = %X\n", Index, - SSI0_REG_BASE + (SSI_REG_OFF * Index) + REG_DW_SSI_CTRLR0, - HAL_SSI_READ32(Index, REG_DW_SSI_CTRLR0)); - - /* REG_DW_SSI_TXFTLR */ - TxftlrValue = BIT_TXFTLR_TFT(pHalSsiAdaptor->TxThresholdLevel); - SSI_DBG_INIT("[1] Set SSI%d REG_DW_SSI_TXFTLR Value: %X\n", Index, TxftlrValue); - - HAL_SSI_WRITE32(Index, REG_DW_SSI_TXFTLR, TxftlrValue); - - SSI_DBG_INIT("[2] SSI%d REG_DW_SSI_TXFTLR(%X) = %X\n", Index, - SSI0_REG_BASE + (SSI_REG_OFF * Index) + REG_DW_SSI_TXFTLR, - HAL_SSI_READ32(Index, REG_DW_SSI_TXFTLR)); - - /* REG_DW_SSI_RXFTLR */ - RxftlrValue = BIT_RXFTLR_RFT(pHalSsiAdaptor->RxThresholdLevel); - SSI_DBG_INIT("[1] Set SSI%d REG_DW_SSI_RXFTLR Value: %X\n", Index, RxftlrValue); - - HAL_SSI_WRITE32(Index, REG_DW_SSI_RXFTLR, RxftlrValue); - - SSI_DBG_INIT("[2] SSI%d REG_DW_SSI_RXFTLR(%X) = %X\n", Index, - SSI0_REG_BASE + (SSI_REG_OFF * Index) + REG_DW_SSI_RXFTLR, - HAL_SSI_READ32(Index, REG_DW_SSI_RXFTLR)); - /** - * Master Only - * REG_DW_SSI_CTRLR1, REG_DW_SSI_SER, REG_DW_SSI_BAUDR - */ - if (Role & SSI_MASTER) { - if ((TransferMode == TMOD_RO) || (TransferMode == TMOD_EEPROM_R) || - ((DataFrameFormat == FRF_NS_MICROWIRE) && (MicrowireTransferMode == MW_TMOD_SEQUENTIAL))) { - Ctrlr1Value = BIT_CTRLR1_NDF(pHalSsiAdaptor->DataFrameNumber); - SSI_DBG_INIT("[1] Set SSI%d REG_DW_SSI_CTRLR1 Value: %X\n", Index, Ctrlr1Value); - - HAL_SSI_WRITE32(Index, REG_DW_SSI_CTRLR1, Ctrlr1Value); - - SSI_DBG_INIT("[2] SSI%d REG_DW_SSI_CTRLR1(%X) = %X\n", Index, - SSI0_REG_BASE + (SSI_REG_OFF * Index) + REG_DW_SSI_CTRLR1, - HAL_SSI_READ32(Index, REG_DW_SSI_CTRLR1)); - } - - SSI_DBG_INIT("[1] Set SSI%d REG_DW_SSI_SER Value: %X\n", Index, BIT_SER_SER(1 << (pHalSsiAdaptor->SlaveSelectEnable))); - - //HAL_SSI_WRITE32(Index, REG_DW_SSI_SER, SerValue); - HalSsiSetSlaveEnableRegisterRtl8195a(Adaptor, pHalSsiAdaptor->SlaveSelectEnable); - - SSI_DBG_INIT("[2] SSI%d REG_DW_SSI_SER(%X) = %X\n", Index, - SSI0_REG_BASE + (SSI_REG_OFF * Index) + REG_DW_SSI_SER, - HalSsiGetSlaveEnableRegisterRtl8195a(Adaptor)); - - BaudrValue = BIT_BAUDR_SCKDV(pHalSsiAdaptor->ClockDivider); - SSI_DBG_INIT("[1] Set SSI%d REG_DW_SSI_BAUDR Value: %X\n", Index, BaudrValue); - - HAL_SSI_WRITE32(Index, REG_DW_SSI_BAUDR, BaudrValue); - - SSI_DBG_INIT("[2] SSI%d REG_DW_SSI_BAUDR(%X) = %X\n", Index, - SSI0_REG_BASE + (SSI_REG_OFF * Index) + REG_DW_SSI_BAUDR, - HAL_SSI_READ32(Index, REG_DW_SSI_BAUDR)); - } - - // Microwire - MwcrValue |= BIT_MWCR_MWMOD(pHalSsiAdaptor->MicrowireTransferMode); - MwcrValue |= BIT_MWCR_MDD(pHalSsiAdaptor->MicrowireDirection); - MwcrValue |= BIT_MWCR_MHS(pHalSsiAdaptor->MicrowireHandshaking); - SSI_DBG_INIT("[1] Set SSI%d REG_DW_SSI_MWCR Value: %X\n", Index, MwcrValue); - - HAL_SSI_WRITE32(Index, REG_DW_SSI_MWCR, MwcrValue); - - SSI_DBG_INIT("[2] SSI%d REG_DW_SSI_MWCR(%X) = %X\n", Index, - SSI0_REG_BASE + (SSI_REG_OFF * Index) + REG_DW_SSI_MWCR, - HAL_SSI_READ32(Index, REG_DW_SSI_MWCR)); - - SSI_DBG_INIT("SSI%d TransferMechanism: %d\n", Index, pHalSsiAdaptor->TransferMechanism); - if (pHalSsiAdaptor->TransferMechanism == SSI_DTM_INTERRUPT) - { - SSI_DBG_INIT("SSI%d Interrupt initialize, Interrupt: %X\n", Index, pHalSsiAdaptor->InterruptMask); - switch (Index) { - case 0: - IrqNum = SPI0_IRQ; - break; - case 1: - IrqNum = SPI1_IRQ; - break; - case 2: - IrqNum = SPI2_IRQ; - break; - default: - IrqNum = IRQ_UNKNOWN; - break; - } - - if (likely(IrqNum != IRQ_UNKNOWN)) { - /* REG_DW_SSI_IMR */ - HalSsiSetInterruptMaskRtl8195a(Adaptor); - - pHalSsiAdaptor->IrqHandle.Data = (uint32_t)pHalSsiAdaptor; - pHalSsiAdaptor->IrqHandle.IrqFun = (IRQ_FUN)_SsiIrqHandleRtl8195a; - pHalSsiAdaptor->IrqHandle.IrqNum = (IRQn_Type)IrqNum; - pHalSsiAdaptor->IrqHandle.Priority = pHalSsiAdaptor->InterruptPriority; - - InterruptRegister(&pHalSsiAdaptor->IrqHandle); - InterruptEn(&pHalSsiAdaptor->IrqHandle); - } - else { - SSI_DBG_INIT("Unknown SSI Index.\n"); - pHalSsiAdaptor->TransferMechanism = SSI_DTM_BASIC; - } - } - - HalSsiEnableRtl8195a(Adaptor); - - return HAL_OK; -} - -HAL_Status HalSsiPinmuxEnableRtl8195a_Patch(void *Adaptor) -{ - SSI_DBG_ENTRANCE("HalSsiPinmuxEnableRtl8195a()\n"); - PHAL_SSI_ADAPTOR pHalSsiAdaptor = (PHAL_SSI_ADAPTOR) Adaptor; - volatile HAL_Status Result; - uint32_t PinmuxSelect = pHalSsiAdaptor->PinmuxSelect; - uint8_t Index = pHalSsiAdaptor->Index; - - SSI_DBG_PINMUX("[1] SSI%d REG_SSI_MUX_CTRL(%X) = %X\n", Index, - PERI_ON_BASE + REG_SPI_MUX_CTRL, - HAL_READ32(PERI_ON_BASE, REG_SPI_MUX_CTRL)); - - switch (Index) - { - case 0: - { - ACTCK_SPI0_CCTRL(ON); - SLPCK_SPI0_CCTRL(ON); - PinCtrl(SPI0, PinmuxSelect, ON); - SPI0_FCTRL(ON); - Result = HAL_OK; - break; - } - case 1: - { - ACTCK_SPI1_CCTRL(ON); - SLPCK_SPI1_CCTRL(ON); - PinCtrl(SPI1, PinmuxSelect, ON); - SPI1_FCTRL(ON); - Result = HAL_OK; - break; - } - case 2: - { - ACTCK_SPI2_CCTRL(ON); - SLPCK_SPI2_CCTRL(ON); - PinCtrl(SPI2, PinmuxSelect, ON); - SPI2_FCTRL(ON); - Result = HAL_OK; - break; - } - default: - { - DBG_SSI_ERR("Invalid SSI Index %d!\n", Index); - Result = HAL_ERR_PARA; - break; - } - } - - SSI_DBG_PINMUX("[2] SSI%d REG_SSI_MUX_CTRL(%X) = %X\n", Index, - PERI_ON_BASE + REG_SPI_MUX_CTRL, - HAL_READ32(PERI_ON_BASE, REG_SPI_MUX_CTRL)); - - return Result; -} - -HAL_Status HalSsiPinmuxDisableRtl8195a(void *Adaptor) -{ - SSI_DBG_ENTRANCE("HalSsiPinmuxEnableRtl8195a()\n"); - PHAL_SSI_ADAPTOR pHalSsiAdaptor = (PHAL_SSI_ADAPTOR) Adaptor; - volatile HAL_Status Result; - uint32_t PinmuxSelect = pHalSsiAdaptor->PinmuxSelect; - uint8_t Index = pHalSsiAdaptor->Index; - - SSI_DBG_PINMUX("[1] SSI%d REG_SSI_MUX_CTRL(%X) = %X\n", Index, - PERI_ON_BASE + REG_SPI_MUX_CTRL, - HAL_READ32(PERI_ON_BASE, REG_SPI_MUX_CTRL)); - - switch (Index) - { - case 0: - { - ACTCK_SPI0_CCTRL(OFF); - SLPCK_SPI0_CCTRL(OFF); - PinCtrl(SPI0, PinmuxSelect, OFF); - SPI0_FCTRL(OFF); - Result = HAL_OK; - break; - } - case 1: - { - ACTCK_SPI1_CCTRL(OFF); - SLPCK_SPI1_CCTRL(OFF); - PinCtrl(SPI1, PinmuxSelect, OFF); - SPI1_FCTRL(OFF); - Result = HAL_OK; - break; - } - case 2: - { - ACTCK_SPI2_CCTRL(OFF); - SLPCK_SPI2_CCTRL(OFF); - PinCtrl(SPI2, PinmuxSelect, OFF); - SPI2_FCTRL(OFF); - Result = HAL_OK; - break; - } - default: - { - DBG_SSI_ERR("Invalid SSI Index %d!\n", Index); - Result = HAL_ERR_PARA; - break; - } - } - - SSI_DBG_PINMUX("[2] SSI%d REG_SSI_MUX_CTRL(%X) = %X\n", Index, - PERI_ON_BASE + REG_SPI_MUX_CTRL, - HAL_READ32(PERI_ON_BASE, REG_SPI_MUX_CTRL)); - - return Result; -} - -HAL_Status HalSsiDeInitRtl8195a(void *Adapter) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - uint8_t Index; - volatile HAL_Status Result; - - Index = pHalSsiAdapter->Index; - - if(Index > 2){ - DBG_SSI_ERR("Invalid SSI Index %d!\n", Index); - return HAL_ERR_PARA; - } - - HalSsiInterruptDisableRtl8195a(pHalSsiAdapter); - HalSsiDisableRtl8195a(pHalSsiAdapter); - - Result = HalSsiPinmuxDisableRtl8195a(pHalSsiAdapter); - if(Result != HAL_OK){ - DBG_SSI_ERR("Pinmux Disable Error\n"); - return Result; - } - - return Result; -} - -HAL_Status HalSsiClockOnRtl8195a(void *Adapter) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor = (PHAL_SSI_ADAPTOR) Adapter; - volatile HAL_Status Result; - uint8_t Index = pHalSsiAdaptor->Index; - - switch (Index) - { - case 0: - { - ACTCK_SPI0_CCTRL(ON); - SLPCK_SPI0_CCTRL(ON); - Result = HAL_OK; - break; - } - case 1: - { - ACTCK_SPI1_CCTRL(ON); - SLPCK_SPI1_CCTRL(ON); - Result = HAL_OK; - break; - } - case 2: - { - ACTCK_SPI2_CCTRL(ON); - SLPCK_SPI2_CCTRL(ON); - Result = HAL_OK; - break; - } - default: - { - DBG_SSI_ERR("Invalid SSI Index %d!\n", Index); - Result = HAL_ERR_PARA; - break; - } - } - return Result; -} - -HAL_Status HalSsiClockOffRtl8195a(void *Adapter) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor = (PHAL_SSI_ADAPTOR) Adapter; - volatile HAL_Status Result; - uint8_t Index = pHalSsiAdaptor->Index; - - switch (Index) - { - case 0: - { - ACTCK_SPI0_CCTRL(OFF); - SLPCK_SPI0_CCTRL(OFF); - Result = HAL_OK; - break; - } - case 1: - { - ACTCK_SPI1_CCTRL(OFF); - SLPCK_SPI1_CCTRL(OFF); - Result = HAL_OK; - break; - } - case 2: - { - ACTCK_SPI2_CCTRL(OFF); - SLPCK_SPI2_CCTRL(OFF); - Result = HAL_OK; - break; - } - default: - { - DBG_SSI_ERR("Invalid SSI Index %d!\n", Index); - Result = HAL_ERR_PARA; - break; - } - } - return Result; - -} - -HAL_Status HalSsiSetFormatRtl8195a(void *Adaptor) -{ - SSI_DBG_ENTRANCE("HalSsiSetFormatRtl8195a()\n"); - PHAL_SSI_ADAPTOR pHalSsiAdaptor = (PHAL_SSI_ADAPTOR) Adaptor; - uint32_t Ctrlr0Value = 0; - uint32_t TxftlrValue = 0; - uint32_t RxftlrValue = 0; - uint8_t Index = pHalSsiAdaptor->Index; - uint8_t Role = pHalSsiAdaptor->Role; - - if (Index > 2) { - DBG_SSI_ERR("HalSsiSetFormatRtl8195a: Invalid SSI Idx %d\r\n", Index); - return HAL_ERR_PARA; - } - HalSsiDisableRtl8195a(Adaptor); - - Ctrlr0Value &= ~(BIT_CTRLR0_SCPH(1) | BIT_CTRLR0_SCPOL(1) | BIT_CTRLR0_DFS(0xF)); - - /* REG_DW_SSI_CTRLR0 */ - Ctrlr0Value |= BIT_CTRLR0_DFS(pHalSsiAdaptor->DataFrameSize); - Ctrlr0Value |= BIT_CTRLR0_SCPH(pHalSsiAdaptor->SclkPhase); - Ctrlr0Value |= BIT_CTRLR0_SCPOL(pHalSsiAdaptor->SclkPolarity); - - if (Role == SSI_SLAVE) - Ctrlr0Value |= BIT_CTRLR0_SLV_OE(pHalSsiAdaptor->SlaveOutputEnable); - - SSI_DBG_INIT("[1] Set SSI%d REG_DW_SSI_CTRLR0 Value: %X\n", Index, Ctrlr0Value); - - HAL_SSI_WRITE32(Index, REG_DW_SSI_CTRLR0, Ctrlr0Value); - - SSI_DBG_INIT("[2] SSI%d REG_DW_SSI_CTRLR0(%X) = %X, SPI Mode = %X\n", Index, - SSI0_REG_BASE + (SSI_REG_OFF * Index) + REG_DW_SSI_CTRLR0, - HAL_SSI_READ32(Index, REG_DW_SSI_CTRLR0), (HAL_SSI_READ32(Index, REG_DW_SSI_CTRLR0) >>6) & 0x3); - //The tx threshold and rx threshold value will be reset after the spi changes its role - /* REG_DW_SSI_TXFTLR */ - TxftlrValue = BIT_TXFTLR_TFT(pHalSsiAdaptor->TxThresholdLevel); - SSI_DBG_INIT("[1] Set SSI%d REG_DW_SSI_TXFTLR Value: %X\n", Index, TxftlrValue); - - HAL_SSI_WRITE32(Index, REG_DW_SSI_TXFTLR, TxftlrValue); - - SSI_DBG_INIT("[2] SSI%d REG_DW_SSI_TXFTLR(%X) = %X\n", Index, - SSI0_REG_BASE + (SSI_REG_OFF * Index) + REG_DW_SSI_TXFTLR, - HAL_SSI_READ32(Index, REG_DW_SSI_TXFTLR)); - - /* REG_DW_SSI_RXFTLR */ - RxftlrValue = BIT_RXFTLR_RFT(pHalSsiAdaptor->RxThresholdLevel); - SSI_DBG_INIT("[1] Set SSI%d REG_DW_SSI_RXFTLR Value: %X\n", Index, RxftlrValue); - - HAL_SSI_WRITE32(Index, REG_DW_SSI_RXFTLR, RxftlrValue); - - SSI_DBG_INIT("[2] SSI%d REG_DW_SSI_RXFTLR(%X) = %X\n", Index, - SSI0_REG_BASE + (SSI_REG_OFF * Index) + REG_DW_SSI_RXFTLR, - HAL_SSI_READ32(Index, REG_DW_SSI_RXFTLR)); - - HalSsiEnableRtl8195a(Adaptor); - - return HAL_OK; -} - -void HalSsiSetSclkRtl8195a(void *Adapter, uint32_t ClkRate) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - uint32_t ssi_clk; - uint32_t ClockDivider; - uint32_t SsiEn; - uint32_t RegValue; - uint32_t SystemClock; - uint8_t spi_idx = pHalSsiAdapter->Index; - - // Set SCLK Freq only available for Master mode - // For Slave mode, the baud rate is depends on the Master side, max rate = ssi_clk/2 - // Fsclk_out = Fssi_clk/SCKDV - SystemClock = HalGetCpuClk(); - - if (spi_idx == 1) { - ssi_clk = SystemClock >> 1; - RegValue = HAL_READ32(SYSTEM_CTRL_BASE, 0x250); - if (ClkRate > (ssi_clk/2)) { - // Use High speed clock: Fixed Freq. - RegValue |= BIT18; - ssi_clk = (200000000*5/6) >> 1; - } - else { - // Use Normal speed clock: CPU_Clk/2 - RegValue &= ~BIT18; - } - HAL_WRITE32(SYSTEM_CTRL_BASE, 0x250, RegValue); - } - else { - ssi_clk = SystemClock >> 2; - } - - if (pHalSsiAdapter->Role == SSI_MASTER) { - if (ClkRate > (ssi_clk/2)) { - DBG_SSI_ERR("spi_frequency: Freq %d is too high, available highest Freq=%d\r\n", ClkRate, (ssi_clk/2)); - ClockDivider = 2; - } - else - { - ClockDivider = ssi_clk/ClkRate + 1; - if ((ssi_clk%ClkRate) > (ClkRate/2)) - { - ClockDivider++; - } - if (ClockDivider >= 0xFFFF) - { - // devider is 16 bits - ClockDivider = 0xFFFE; - } - ClockDivider &= 0xFFFE; // bit 0 always is 0 - } - DBG_SSI_INFO("spi_frequency: Set SCLK Freq=%d\r\n", (ssi_clk/ClockDivider)); - pHalSsiAdapter->ClockDivider = ClockDivider; - - SsiEn = HAL_SSI_READ32(spi_idx, REG_DW_SSI_SSIENR); // Backup SSI_EN register - - // Disable SSI first, so we can modify the Clock Divider - RegValue = SsiEn & BIT_INVC_SSIENR_SSI_EN; - HAL_SSI_WRITE32(spi_idx, REG_DW_SSI_SSIENR, RegValue); - HAL_SSI_WRITE32(spi_idx, REG_DW_SSI_BAUDR, (pHalSsiAdapter->ClockDivider & 0xFFFF)); - // recover the SSI_EN setting - HAL_SSI_WRITE32(spi_idx, REG_DW_SSI_SSIENR, SsiEn); - } - else - { - if (ClkRate > (ssi_clk/10)) - { - DBG_SSI_ERR("spi_frequency: Freq %d is too high, available highest Freq=%d\r\n", ClkRate, (ssi_clk/10)); - } - } -} - -HAL_Status HalSsiIntReadRtl8195a(void *Adapter, void *RxData, uint32_t Length) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - uint32_t RxFifoThresholdLevel; -// uint8_t Index = pHalSsiAdapter->Index; - - DBG_SSI_INFO("HalSsiIntReadRtl8195a: Idx=%d, RxData=0x%x, Len=0x%x\r\n", pHalSsiAdapter->Index, RxData, Length); -// if (HalSsiBusyRtl8195a(Adapter)) { - // As a Slave mode, if the peer(Master) side is power off, the BUSY flag is always on -// DBG_SSI_WARN("HalSsiIntReadRtl8195a: SSI%d is busy\n", Index); -// return HAL_BUSY; -// } - - if (Length == 0) { - SSI_DBG_INT_READ("SSI%d RxData addr: 0x%X, Length: %d\n", pHalSsiAdapter->Index, RxData, Length); - return HAL_ERR_PARA; - } - - if (Length > (pHalSsiAdapter->DefaultRxThresholdLevel)) { - RxFifoThresholdLevel = pHalSsiAdapter->DefaultRxThresholdLevel; - } - else { - RxFifoThresholdLevel = 0; - } - - if (pHalSsiAdapter->RxThresholdLevel != RxFifoThresholdLevel) { - DBG_SSI_INFO("Setting Rx FIFO Threshold Level to %d\n", RxFifoThresholdLevel); - pHalSsiAdapter->RxThresholdLevel = RxFifoThresholdLevel; - HalSsiSetRxFifoThresholdLevelRtl8195a((void*)pHalSsiAdapter); - } - - if ((pHalSsiAdapter->DataFrameSize+1) > 8) { - // 16~9 bits mode - pHalSsiAdapter->RxLength = Length >> 1; // 2 bytes(16 bit) every transfer - } - else { - // 8~4 bits mode - pHalSsiAdapter->RxLength = Length; // 1 byte(8 bit) every transfer - } - - pHalSsiAdapter->RxData = RxData; - DBG_SSI_INFO("SSI%d RxData addr: 0x%X, Length: %d\n", pHalSsiAdapter->Index, - pHalSsiAdapter->RxData, pHalSsiAdapter->RxLength); - - pHalSsiAdapter->InterruptMask |= BIT_IMR_RXFIM | BIT_IMR_RXOIM | BIT_IMR_RXUIM; - HalSsiSetInterruptMaskRtl8195a((void*)pHalSsiAdapter); - - return HAL_OK; -} - -// Configure Transmit FIFO Threshold Level -void HalSsiTxFIFOThresholdRtl8195a(void *Adaptor, uint32_t txftl) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor = (PHAL_SSI_ADAPTOR) Adaptor; - uint8_t Index = pHalSsiAdaptor->Index; - uint32_t TxftlrValue; - - TxftlrValue = BIT_TXFTLR_TFT(txftl); - - HAL_SSI_WRITE32(Index, REG_DW_SSI_TXFTLR, TxftlrValue); -} - - -HAL_Status -HalSsiIntWriteRtl8195a( - IN void *Adapter, // PHAL_SSI_ADAPTOR - IN uint8_t *pTxData, // the Buffer to be send - IN uint32_t Length // the length of data to be send -) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - - DBG_SSI_INFO("HalSsiIntWriteRtl8195a: Idx=%d, RxData=0x%x, Len=0x%x\r\n", pHalSsiAdapter->Index, pTxData, Length); - if ((Length == 0)) { - DBG_SSI_ERR("HalSsiIntSendRtl8195a: Err: pTxData=0x%x, Length=%d\n", pTxData, Length); - return HAL_ERR_PARA; - } - - if ((pHalSsiAdapter->DataFrameSize+1) > 8) { - // 16~9 bits mode - pHalSsiAdapter->TxLength = Length >> 1; // 2 bytes(16 bit) every transfer - } - else { - // 8~4 bits mode - pHalSsiAdapter->TxLength = Length; // 1 byte(8 bit) every transfer - } - - HalSsiTxFIFOThresholdRtl8195a(Adapter, pHalSsiAdapter->TxThresholdLevel); - pHalSsiAdapter->TxData = (void*)pTxData; - pHalSsiAdapter->InterruptMask |= BIT_IMR_TXOIM | BIT_IMR_TXEIM; - HalSsiSetInterruptMaskRtl8195a((void*)pHalSsiAdapter); - - return HAL_OK; -} - -HAL_Status HalSsiEnterCriticalRtl8195a(void *Data) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor = (PHAL_SSI_ADAPTOR) Data; - - InterruptDis(&pHalSsiAdaptor->IrqHandle); -#ifdef CONFIG_GDMA_EN - PSSI_DMA_CONFIG pDmaConfig = &pHalSsiAdaptor->DmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - - if(NULL != pDmaConfig){ - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pTxHalGdmaAdapter; - if(pHalGdmaAdapter->ChEn != 0){ - InterruptDis(&pDmaConfig->TxGdmaIrqHandle); - } - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pRxHalGdmaAdapter; - if(pHalGdmaAdapter->ChEn != 0){ - InterruptDis(&pDmaConfig->RxGdmaIrqHandle); - } - } -#endif - return HAL_OK; -} - -HAL_Status HalSsiExitCriticalRtl8195a(void *Data) -{ - PHAL_SSI_ADAPTOR pHalSsiAdaptor = (PHAL_SSI_ADAPTOR) Data; - - InterruptEn(&pHalSsiAdaptor->IrqHandle); -#ifdef CONFIG_GDMA_EN - PSSI_DMA_CONFIG pDmaConfig = &pHalSsiAdaptor->DmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - - if(NULL != pDmaConfig){ - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pTxHalGdmaAdapter; - if(pHalGdmaAdapter->ChEn != 0){ - InterruptEn(&pDmaConfig->TxGdmaIrqHandle); - } - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pRxHalGdmaAdapter; - if(pHalGdmaAdapter->ChEn != 0){ - InterruptEn(&pDmaConfig->RxGdmaIrqHandle); - } - } -#endif - return HAL_OK; -} - -HAL_Status -HalSsiIsTimeoutRtl8195a( - uint32_t StartCount, - uint32_t TimeoutCnt -) -{ - HAL_Status Status; - uint32_t CurrentCount, ExpireCount; - - CurrentCount = HalTimerOp.HalTimerReadCount(1); - - if (StartCount < CurrentCount) { - ExpireCount = (0xFFFFFFFF - CurrentCount) + StartCount; - } - else { - ExpireCount = StartCount - CurrentCount; - } - - if (TimeoutCnt < ExpireCount) { - Status = HAL_TIMEOUT; - } - else { - Status = HAL_OK; - } - - return Status; -} - -HAL_Status HalSsiStopRecvRtl8195a(void *Data) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Data; - PSSI_DMA_CONFIG pDmaConfig = &pHalSsiAdapter->DmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PHAL_GDMA_OP pHalGdmaOp; - uint32_t DMAStopAddr = 0; - uint32_t ReceivedCnt; - uint8_t Index; - uint8_t DmaMode = 0; - - Index = pHalSsiAdapter->Index; - pHalSsiAdapter->InterruptMask &= ~(BIT_IMR_RXFIM | BIT_IMR_RXOIM | BIT_IMR_RXUIM); - HalSsiSetInterruptMaskRtl8195a(pHalSsiAdapter); - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pRxHalGdmaAdapter; - - if(NULL != pHalGdmaAdapter){ - pHalGdmaOp = (PHAL_GDMA_OP)pDmaConfig->pHalGdmaOp; - if ((NULL != pHalGdmaOp) && (HalGdmaQueryChEnRtl8195a((void*)pHalGdmaAdapter))){ - DmaMode = 1; - pHalGdmaOp->HalGdmaChIsrClean((void*)pHalGdmaAdapter); - pHalGdmaOp->HalGdmaChCleanAutoSrc((void*)pHalGdmaAdapter); - pHalGdmaOp->HalGdmaChDis((void*)(pHalGdmaAdapter)); - while((HAL_GDMAX_READ32(pHalGdmaAdapter->GdmaIndex, REG_GDMA_CH_EN) & (pHalGdmaAdapter->ChEn)) != 0 ){ - - } - DMAStopAddr = HalGdmaQueryDArRtl8195a((void*)pHalGdmaAdapter); - ReceivedCnt = DMAStopAddr - (uint32_t)(pHalSsiAdapter->RxData); - pHalSsiAdapter->RxLength-= ReceivedCnt; - pHalSsiAdapter->RxData = (uint8_t *)(pHalSsiAdapter->RxData) + ReceivedCnt; - } - } - - while(HalSsiGetRxFifoLevelRtl8195a(pHalSsiAdapter) != 0){ - if ((pHalSsiAdapter->DataFrameSize+1) > 8) { - // 16~9 bits mode - *((uint16_t*)(pHalSsiAdapter->RxData)) = (uint16_t)(HAL_SSI_READ32(Index, REG_DW_SSI_DR)); - pHalSsiAdapter->RxData = (void*)(((uint16_t*)pHalSsiAdapter->RxData) + 1); - if(DmaMode){ - pHalSsiAdapter->RxLength--; - } - } - else { - // 8~4 bits mode - *((uint8_t*)(pHalSsiAdapter->RxData)) = (uint8_t)(HAL_SSI_READ32(Index, REG_DW_SSI_DR)); - pHalSsiAdapter->RxData = (void*)(((uint8_t*)pHalSsiAdapter->RxData) + 1); - } - pHalSsiAdapter->RxLength--; - } - - return HAL_OK; - -} - -#ifdef CONFIG_GDMA_EN -/** - * GDMA IRQ Handler - */ -void SsiTxGdmaIrqHandle (void *Data) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Data; - PSSI_DMA_CONFIG pDmaConfig = &pHalSsiAdapter->DmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PHAL_GDMA_OP pHalGdmaOp; - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pTxHalGdmaAdapter; - pHalGdmaOp = (PHAL_GDMA_OP)pDmaConfig->pHalGdmaOp; - /* Clear Pending ISR */ - pHalGdmaOp->HalGdmaChIsrClean((void*)pHalGdmaAdapter); - - pHalGdmaOp->HalGdmaChCleanAutoDst((void*)pHalGdmaAdapter); - - pHalGdmaOp->HalGdmaChDis((void*)(pHalGdmaAdapter)); - // Call user TX complete callback - pHalSsiAdapter->TxLength = 0; - HalSsiTxFIFOThresholdRtl8195a((void*)pHalSsiAdapter, 0); // trigger TX interrupt when TX FIFO is totally empty - pHalSsiAdapter->InterruptMask |= (BIT_IMR_TXEIM); - HalSsiSetInterruptMaskRtl8195a((void*)pHalSsiAdapter); - - if (NULL != pHalSsiAdapter->TxCompCallback) { - pHalSsiAdapter->TxCompCallback(pHalSsiAdapter->TxCompCbPara); - } - -#if 0 - /* Set SSI DMA Disable */ - HAL_SSI_WRITE32(pHalSsiAdapter->Index, REG_DW_SSI_DMACR, \ - (HAL_SSI_READ32(pHalSsiAdapter->Index, REG_DW_SSI_DMACR) & ~SSI_TXDMA_ENABLE)); -#endif - -} - -void SsiRxGdmaIrqHandle (void *Data) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Data; - PSSI_DMA_CONFIG pDmaConfig = &pHalSsiAdapter->DmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PHAL_GDMA_OP pHalGdmaOp; - - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pRxHalGdmaAdapter; - pHalGdmaOp = (PHAL_GDMA_OP)pDmaConfig->pHalGdmaOp; - - pHalGdmaOp->HalGdmaChIsrClean((void*)pHalGdmaAdapter); - - pHalGdmaOp->HalGdmaChCleanAutoSrc((void*)pHalGdmaAdapter); - - HAL_SSI_WRITE32(pHalSsiAdapter->Index, REG_DW_SSI_DMACR, \ - (HAL_SSI_READ32(pHalSsiAdapter->Index, REG_DW_SSI_DMACR) & ~SSI_RXDMA_ENABLE)); - pHalGdmaOp->HalGdmaChDis((void*)(pHalGdmaAdapter)); - - if (NULL != pHalSsiAdapter->RxCompCallback) { - pHalSsiAdapter->RxCompCallback(pHalSsiAdapter->RxCompCbPara); - } - -} - -void -HalSsiTxGdmaLoadDefRtl8195a( - IN void *Adapter -) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - PSSI_DMA_CONFIG pDmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - uint8_t *pDst; - uint8_t DmaIdx; - uint8_t DmaCh; - uint8_t DstPer; - uint8_t ssi_idx; - uint32_t DmaChEn; - IRQn_Type IrqNum; - - if ((NULL == pHalSsiAdapter)) { - return; - } - pDmaConfig = &pHalSsiAdapter->DmaConfig; - - ssi_idx = pHalSsiAdapter->Index; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pTxHalGdmaAdapter; - if (NULL == pHalGdmaAdapter) { - DBG_SSI_ERR("HalSsiTxGdmaLoadDefRtl8195a: HalGdmaAdapter is NULL\r\n"); - return; - } - _memset((void *)pHalGdmaAdapter, 0, sizeof(HAL_GDMA_ADAPTER)); - - pHalSsiAdapter->DmaControl |= SSI_TXDMA_ENABLE; - if ((pHalSsiAdapter->DataFrameSize+1) > 8) { - // 16~9 bits mode - pHalSsiAdapter->DmaTxDataLevel = 48; // When TX FIFO entity number <=48 then DMA Request asserted - } - else { - // 8~4 bits mode - pHalSsiAdapter->DmaTxDataLevel = 56; // When TX FIFO entity number <=56 then DMA Request asserted - } - - switch (ssi_idx) { - case 0: - pDst = (uint8_t*) (SSI0_REG_BASE + REG_DW_SSI_DR); - DmaIdx = 0; - DmaCh = 1; - DmaChEn = GdmaCh1; - IrqNum = GDMA0_CHANNEL1_IRQ; - DstPer = GDMA_HANDSHAKE_SSI0_TX; - break; - - case 1: - pDst = (uint8_t*) (SSI1_REG_BASE + REG_DW_SSI_DR); - DmaIdx = 1; - DmaCh = 1; - DmaChEn = GdmaCh1; - IrqNum = GDMA1_CHANNEL1_IRQ; - DstPer = GDMA_HANDSHAKE_SSI1_TX; - break; - - case 2: - pDst = (uint8_t*) (SSI2_REG_BASE + REG_DW_SSI_DR); - DmaIdx = 0; // SPI2 TX only can use GDMA0 - DmaCh = 3; - DmaChEn = GdmaCh3; - IrqNum = GDMA0_CHANNEL3_IRQ; - DstPer = GDMA_HANDSHAKE_SSI2_TX; - break; - - default: - return; - } - - pHalGdmaAdapter->GdmaCtl.TtFc = TTFCMemToPeri; - pHalGdmaAdapter->GdmaCtl.Done = 1; - pHalGdmaAdapter->GdmaCfg.ReloadDst = 1; - pHalGdmaAdapter->MuliBlockCunt = 0; - pHalGdmaAdapter->MaxMuliBlock = 1; - pHalGdmaAdapter->GdmaCfg.DestPer = DstPer; - pHalGdmaAdapter->ChDar = (uint32_t)pDst; - pHalGdmaAdapter->GdmaIndex = DmaIdx; - pHalGdmaAdapter->ChNum = DmaCh; - pHalGdmaAdapter->ChEn = DmaChEn; - pHalGdmaAdapter->GdmaIsrType = (TransferType|ErrType); - pHalGdmaAdapter->IsrCtrl = ENABLE; - pHalGdmaAdapter->GdmaOnOff = ON; - - pHalGdmaAdapter->GdmaCtl.IntEn = 1; - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeOne; - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeFour; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthFourBytes; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthOneByte; - pHalGdmaAdapter->GdmaCtl.Dinc = NoChange; - pHalGdmaAdapter->GdmaCtl.Sinc = IncType; - - pDmaConfig->TxGdmaIrqHandle.Data = (uint32_t)pHalSsiAdapter; - pDmaConfig->TxGdmaIrqHandle.IrqNum = IrqNum; - pDmaConfig->TxGdmaIrqHandle.IrqFun = (IRQ_FUN)SsiTxGdmaIrqHandle; - pDmaConfig->TxGdmaIrqHandle.Priority = 10; -} - - -void -HalSsiRxGdmaLoadDefRtl8195a( - IN void *Adapter -) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - PSSI_DMA_CONFIG pDmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - uint8_t *pSrc; - uint8_t DmaIdx; - uint8_t DmaCh; - uint8_t SrcPer; - uint8_t ssi_idx; - uint32_t DmaChEn; - IRQn_Type IrqNum; - - if ((NULL == pHalSsiAdapter)) { - return; - } - - pDmaConfig = &pHalSsiAdapter->DmaConfig; - - ssi_idx = pHalSsiAdapter->Index; - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pRxHalGdmaAdapter; - if (NULL == pHalGdmaAdapter) { - return; - } - - _memset((void *)pHalGdmaAdapter, 0, sizeof(HAL_GDMA_ADAPTER)); - - pHalSsiAdapter->DmaControl |= SSI_RXDMA_ENABLE; - if ((pHalSsiAdapter->DataFrameSize+1) > 8) { - // 16~9 bits mode - pHalSsiAdapter->DmaRxDataLevel = 7; // RX FIFO stored bytes > (DMARDLR(7) + 1) then request DMA transfer - } - else { - // 8~4 bits mode - pHalSsiAdapter->DmaRxDataLevel = 3; // RX FIFO stored bytes > (DMARDLR(3) + 1) then request DMA transfer - } - switch (ssi_idx) { - case 0: - pSrc = (uint8_t*) (SSI0_REG_BASE + REG_DW_SSI_DR); - DmaIdx = 0; - DmaCh = 2; - DmaChEn = GdmaCh2; - SrcPer = GDMA_HANDSHAKE_SSI0_RX; - IrqNum = GDMA0_CHANNEL2_IRQ; - break; - - case 1: - pSrc = (uint8_t*) (SSI1_REG_BASE + REG_DW_SSI_DR); - DmaIdx = 1; - DmaCh = 2; - DmaChEn = GdmaCh2; - SrcPer = GDMA_HANDSHAKE_SSI1_RX; - IrqNum = GDMA1_CHANNEL2_IRQ; - break; - - case 2: - pSrc = (uint8_t*) (SSI2_REG_BASE + REG_DW_SSI_DR); - DmaIdx = 1; // SSI2 RX only can use GDMA1 - DmaCh = 3; - DmaChEn = GdmaCh3; - SrcPer = GDMA_HANDSHAKE_SSI2_RX; - IrqNum = GDMA1_CHANNEL3_IRQ; - break; - - default: - return; - } - - pHalGdmaAdapter->GdmaCtl.TtFc = TTFCPeriToMem; - pHalGdmaAdapter->GdmaCtl.Done = 1; - pHalGdmaAdapter->GdmaCfg.ReloadSrc = 1; - pHalGdmaAdapter->GdmaCfg.SrcPer = SrcPer; - pHalGdmaAdapter->MuliBlockCunt = 0; - pHalGdmaAdapter->MaxMuliBlock = 1; - pHalGdmaAdapter->ChSar = (uint32_t)pSrc; - pHalGdmaAdapter->GdmaIndex = DmaIdx; - pHalGdmaAdapter->ChNum = DmaCh; - pHalGdmaAdapter->ChEn = DmaChEn; - pHalGdmaAdapter->GdmaIsrType = (TransferType|ErrType); - pHalGdmaAdapter->IsrCtrl = ENABLE; - pHalGdmaAdapter->GdmaOnOff = ON; - - pHalGdmaAdapter->GdmaCtl.IntEn = 1; - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeEight; - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeFour; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthTwoBytes; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthFourBytes; - pHalGdmaAdapter->GdmaCtl.Dinc = IncType; - pHalGdmaAdapter->GdmaCtl.Sinc = NoChange; - - pDmaConfig->RxGdmaIrqHandle.Data = (uint32_t)pHalSsiAdapter; - pDmaConfig->RxGdmaIrqHandle.IrqNum = IrqNum; - pDmaConfig->RxGdmaIrqHandle.IrqFun = (IRQ_FUN)SsiRxGdmaIrqHandle; - pDmaConfig->RxGdmaIrqHandle.Priority = 11; -} - -void -HalSsiDmaInitRtl8195a( - IN void *Adapter -) -{ - uint32_t RegValue; - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - PSSI_DMA_CONFIG pDmaConfig; - PHAL_GDMA_ADAPTER pTxHalGdmaAdapter; - PHAL_GDMA_ADAPTER pRxHalGdmaAdapter; - uint8_t ssi_idx; - uint32_t hdk_tx_bit; - uint32_t hdk_rx_bit; - uint32_t DmatdlrValue = 0; - uint32_t DmardlrValue = 0; - - pDmaConfig = &pHalSsiAdapter->DmaConfig; - pTxHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pTxHalGdmaAdapter; - pRxHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pRxHalGdmaAdapter; - ssi_idx = pHalSsiAdapter->Index; - - // Set REG_PESOC_SOC_CTRL[28:16] to configure the GDMA handshake connection - // SSI2 handshake connection is hardware fixed - if (ssi_idx != 2) { - hdk_tx_bit = 16+pTxHalGdmaAdapter->GdmaCfg.DestPer; - hdk_rx_bit = 16+pRxHalGdmaAdapter->GdmaCfg.SrcPer; - } - else { - hdk_tx_bit = 0; - hdk_rx_bit = 0; - } - - HalSsiDisableRtl8195a(pHalSsiAdapter); - - RegValue = HAL_READ32(PERI_ON_BASE, REG_PESOC_SOC_CTRL); - if (pHalSsiAdapter->DmaControl & SSI_TXDMA_ENABLE) { - // TX DMA is enabled - if (pTxHalGdmaAdapter->GdmaIndex ==0) { - ACTCK_GDMA0_CCTRL(ON); - GDMA0_FCTRL(ON); - if (hdk_tx_bit != 0) { - RegValue &= ~(1<DmaTxDataLevel); - HAL_SSI_WRITE32(ssi_idx, REG_DW_SSI_DMATDLR, DmatdlrValue); - - /* Set SSI DMA Enable */ - HAL_SSI_WRITE32(pHalSsiAdapter->Index, REG_DW_SSI_DMACR, \ - (HAL_SSI_READ32(pHalSsiAdapter->Index, REG_DW_SSI_DMACR) | SSI_TXDMA_ENABLE)); - } - - if (pHalSsiAdapter->DmaControl & SSI_RXDMA_ENABLE) { - // RX DMA is enabled - if (pRxHalGdmaAdapter->GdmaIndex ==0) { - ACTCK_GDMA0_CCTRL(ON); - GDMA0_FCTRL(ON); - if (hdk_rx_bit != 0) { - RegValue &= ~(1<DmaRxDataLevel); - HAL_SSI_WRITE32(ssi_idx, REG_DW_SSI_DMARDLR, DmardlrValue); - // the RX DMA will be enabled at read start. - } - - HAL_WRITE32(PERI_ON_BASE, REG_PESOC_SOC_CTRL, RegValue); - - HalSsiEnableRtl8195a(pHalSsiAdapter); -} - -HAL_Status -HalSsiDmaSendRtl8195a( - IN void *Adapter, // PHAL_SSI_ADAPTOR - IN uint8_t *pTxData, // the Buffer to be send - IN uint32_t Length // the length of data to be send -) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - PSSI_DMA_CONFIG pDmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - - - if ((pTxData == NULL) || (Length == 0)) { - DBG_SSI_ERR("HalSsiDmaSendRtl8195a: Err: pTxData=0x%x, Length=%d\n", pTxData, Length); - return HAL_ERR_PARA; - } - pDmaConfig = &pHalSsiAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pTxHalGdmaAdapter; - - pHalSsiAdapter->TxLength = Length; - pHalSsiAdapter->TxData = (void*)pTxData; - - // Cofigure GDMA transfer - if ((pHalSsiAdapter->DataFrameSize+1) > 8) { - // 16~9 bits mode - if (((Length & 0x03)==0) && - (((uint32_t)(pTxData) & 0x03)==0)) { - // 4-bytes aligned, move 4 bytes each transfer - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeFour; - //pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthFourBytes; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthTwoBytes; - //pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeEight; - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeFour; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthTwoBytes; - //pHalGdmaAdapter->GdmaCtl.BlockSize = Length >> 2; - pHalGdmaAdapter->GdmaCtl.BlockSize = Length >> 1; - } - else if (((Length & 0x01)==0) && - (((uint32_t)(pTxData) & 0x01)==0)) { - // 2-bytes aligned, move 2 bytes each transfer - //pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeEight; - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeFour; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthTwoBytes; - //pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeEight; - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeFour; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthTwoBytes; - pHalGdmaAdapter->GdmaCtl.BlockSize = Length >> 1; - } - else { - DBG_SSI_ERR("HalSsiDmaSendRtl8195a: Aligment Err: pTxData=0x%x, Length=%d\n", pTxData, Length); - return HAL_ERR_PARA; - } - } - else { - // 8~4 bits mode - if (((Length & 0x03)==0) && - (((uint32_t)(pTxData) & 0x03)==0)) { - // 4-bytes aligned, move 4 bytes each transfer - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeOne; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthFourBytes; - pHalGdmaAdapter->GdmaCtl.BlockSize = Length >> 2; - } - else { - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeFour; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthOneByte; - pHalGdmaAdapter->GdmaCtl.BlockSize = Length; - } - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeFour; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthOneByte; - } - - DBG_SSI_INFO("TX SrcMsize=%d SrcTrWidth=%d DestMsize=%d DstTrWidth=%d BlockSize=%d\n", \ - pHalGdmaAdapter->GdmaCtl.SrcMsize, pHalGdmaAdapter->GdmaCtl.SrcTrWidth, \ - pHalGdmaAdapter->GdmaCtl.DestMsize, pHalGdmaAdapter->GdmaCtl.DstTrWidth, \ - pHalGdmaAdapter->GdmaCtl.BlockSize); - -#if 0 - /* Set SSI DMA Enable */ - // TODO: protect the enable DMA register, it may collision with the DMA disable in the GDMA done ISR - HAL_SSI_WRITE32(pHalSsiAdapter->Index, REG_DW_SSI_DMACR, \ - (HAL_SSI_READ32(pHalSsiAdapter->Index, REG_DW_SSI_DMACR) | SSI_TXDMA_ENABLE)); -#endif - - return HAL_OK; -} - - -HAL_Status -HalSsiDmaSendMultiBlockRtl8195a(void *Adapter, uint8_t *pTxData, uint32_t Length) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - PSSI_DMA_CONFIG pDmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PSSI_DMA_MULTIBLK pSsiDmaMultiBlk; - - uint32_t BlockNumber = 1; - uint32_t SingleBlockBytes; - uint32_t BlockIndex = 0; - - - pDmaConfig = &pHalSsiAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pTxHalGdmaAdapter; - pSsiDmaMultiBlk = (PSSI_DMA_MULTIBLK) &pHalSsiAdapter->DmaTxMultiBlk; - SingleBlockBytes = MAX_DMA_BLOCK_SIZE * (1 << (pHalGdmaAdapter->GdmaCtl.SrcTrWidth)) ; - - BlockNumber = Length / MAX_DMA_BLOCK_SIZE; - if(Length % MAX_DMA_BLOCK_SIZE) - BlockNumber++; - - if(BlockNumber > 16){ - DBG_SSI_ERR("HalSsiDmaSendMultiBlockRtl8195a: Data length is too long\n"); - return HAL_ERR_PARA; - } - DBG_SSI_INFO("TX BlockNumber = %x, Length = %x\n", BlockNumber, Length); - - - pHalGdmaAdapter->MaxMuliBlock = BlockNumber; - pHalGdmaAdapter->Rsvd4to7 = 1; - pHalGdmaAdapter->Llpctrl = 1; - pHalGdmaAdapter->GdmaCtl.LlpSrcEn = 1; - - for(BlockIndex = 0; BlockIndex < BlockNumber; BlockIndex++){ - pSsiDmaMultiBlk->GdmaChLli[BlockIndex].Sarx = (uint32_t) (pTxData + SingleBlockBytes * BlockIndex); - pSsiDmaMultiBlk->GdmaChLli[BlockIndex].Darx = (uint32_t) (pHalGdmaAdapter->ChDar); - - //DBG_SSI_INFO("GdmaChLli[%x].Sarx = %x\n", BlockIndex, pSsiDmaMultiBlk->GdmaChLli[BlockIndex].Sarx); - //DBG_SSI_INFO("GdmaChLli[%x] = %x\n", BlockIndex, &(pSsiDmaMultiBlk->GdmaChLli[BlockIndex])); - pSsiDmaMultiBlk->Lli[BlockIndex].pLliEle = (GDMA_CH_LLI_ELE*) &(pSsiDmaMultiBlk->GdmaChLli[BlockIndex]); - if(BlockIndex == BlockNumber - 1){ - pSsiDmaMultiBlk->Lli[BlockIndex].pNextLli = NULL; - pSsiDmaMultiBlk->BlockSizeList[BlockIndex].pNextBlockSiz = NULL; - pSsiDmaMultiBlk->BlockSizeList[BlockIndex].BlockSize = Length - BlockIndex*MAX_DMA_BLOCK_SIZE; - } - else{ - pSsiDmaMultiBlk->Lli[BlockIndex].pNextLli = &(pSsiDmaMultiBlk->Lli[BlockIndex + 1]); - pSsiDmaMultiBlk->BlockSizeList[BlockIndex].BlockSize = MAX_DMA_BLOCK_SIZE; - pSsiDmaMultiBlk->BlockSizeList[BlockIndex].pNextBlockSiz = &(pSsiDmaMultiBlk->BlockSizeList[BlockIndex + 1]); - - } - //DBG_SSI_INFO("Lli[%x] = %x\n", BlockIndex, &(pSsiDmaMultiBlk->Lli[BlockIndex])); - //DBG_SSI_INFO("pSsiDmaMultiBlk->BlockSizeList[%x]= %x\n", BlockIndex, pSsiDmaMultiBlk->BlockSizeList[BlockIndex].BlockSize); - } - - pHalGdmaAdapter->pBlockSizeList = (struct BLOCK_SIZE_LIST*) &(pSsiDmaMultiBlk->BlockSizeList); - pHalGdmaAdapter->pLlix = (struct GDMA_CH_LLI*) &(pSsiDmaMultiBlk->Lli); - - return HAL_OK; -} - -HAL_Status -HalSsiDmaRecvRtl8195a( - IN void *Adapter, // PHAL_SSI_ADAPTOR - IN uint8_t *pRxData, ///< Rx buffer - IN uint32_t Length // buffer length -) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - PSSI_DMA_CONFIG pDmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - - if ((pRxData == NULL) || (Length == 0)) { - DBG_SSI_ERR("HalSsiDmaRecvRtl8195a: Null Err: pRxData=0x%x, Length=%d\n", pRxData, Length); - return HAL_ERR_PARA; - } - - pDmaConfig = &pHalSsiAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pRxHalGdmaAdapter; - - pHalSsiAdapter->RxLength = Length; - pHalSsiAdapter->RxData = (void*)pRxData; - - // Cofigure GDMA transfer - if ((pHalSsiAdapter->DataFrameSize+1) > 8) { - // 16~9 bits mode - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeEight; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthTwoBytes; - pHalGdmaAdapter->GdmaCtl.BlockSize = Length >> 1; - - if (((Length & 0x03)==0) && - (((uint32_t)(pRxData) & 0x03)==0)) { - // 4-bytes aligned, move 4 bytes each transfer - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeFour; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthFourBytes; - } - else if (((Length & 0x01)==0) && - (((uint32_t)(pRxData) & 0x01)==0)) { - // 2-bytes aligned, move 2 bytes each transfer - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeEight; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthTwoBytes; - } - else { - DBG_SSI_ERR("HalSsiDmaRecvRtl8195a: Aligment Err: pTxData=0x%x, Length=%d\n", pRxData, Length); - return HAL_ERR_PARA; - } - } - else { - // 8~4 bits mode - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeFour; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthOneByte; - pHalGdmaAdapter->GdmaCtl.BlockSize = Length; - if (((Length & 0x03)==0) && - (((uint32_t)(pRxData) & 0x03)==0)) { - // 4-bytes aligned, move 4 bytes each transfer - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeOne; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthFourBytes; - } - else { - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeFour; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthOneByte; - } - } - - DBG_SSI_INFO("RX SrcMsize=%d SrcTrWidth=%d DestMsize=%d DstTrWidth=%d BlockSize=%d\n", \ - pHalGdmaAdapter->GdmaCtl.SrcMsize, pHalGdmaAdapter->GdmaCtl.SrcTrWidth, \ - pHalGdmaAdapter->GdmaCtl.DestMsize, pHalGdmaAdapter->GdmaCtl.DstTrWidth, \ - pHalGdmaAdapter->GdmaCtl.BlockSize); - - /* Set SSI DMA Enable */ - // TODO: protect the enable DMA register, it may collision with the DMA disable in the GDMA TX done ISR - HAL_SSI_WRITE32(pHalSsiAdapter->Index, REG_DW_SSI_DMACR, \ - (HAL_SSI_READ32(pHalSsiAdapter->Index, REG_DW_SSI_DMACR) | SSI_RXDMA_ENABLE)); - - return HAL_OK; -} - -HAL_Status -HalSsiDmaRecvMultiBlockRtl8195a(void *Adapter, uint8_t *pRxData, uint32_t Length) -{ - PHAL_SSI_ADAPTOR pHalSsiAdapter = (PHAL_SSI_ADAPTOR) Adapter; - PSSI_DMA_CONFIG pDmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PSSI_DMA_MULTIBLK pSsiDmaMultiBlk; - - - uint32_t BlockNumber = 1; - uint32_t SingleBlockBytes; - uint32_t BlockIndex = 0; - - - pDmaConfig = &pHalSsiAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pDmaConfig->pRxHalGdmaAdapter; - pSsiDmaMultiBlk = (PSSI_DMA_MULTIBLK) &pHalSsiAdapter->DmaRxMultiBlk; - SingleBlockBytes = MAX_DMA_BLOCK_SIZE * (1 << (pHalGdmaAdapter->GdmaCtl.SrcTrWidth)) ; - - BlockNumber = Length / MAX_DMA_BLOCK_SIZE; - if(Length % MAX_DMA_BLOCK_SIZE) - BlockNumber++; - - if(BlockNumber > 16){ - DBG_SSI_ERR("HalSsiDmaRecvMultiBlockRtl8195a: Data length is too long\n"); - return HAL_ERR_PARA; - } - DBG_SSI_INFO("RX BlockNumber = %x, Length = %x\n", BlockNumber, Length); - - - pHalGdmaAdapter->MaxMuliBlock = BlockNumber; - pHalGdmaAdapter->Rsvd4to7 = 1; - pHalGdmaAdapter->Llpctrl = 1; - pHalGdmaAdapter->GdmaCtl.LlpDstEn = 1; - - for(BlockIndex = 0; BlockIndex < BlockNumber; BlockIndex++){ - pSsiDmaMultiBlk->GdmaChLli[BlockIndex].Sarx = (uint32_t) (pHalGdmaAdapter->ChSar); - pSsiDmaMultiBlk->GdmaChLli[BlockIndex].Darx = (uint32_t) (pRxData + SingleBlockBytes * BlockIndex); - - //DBG_SSI_INFO("GdmaChLli[%x].Darx = %x\n", BlockIndex, pSsiDmaMultiBlk->GdmaChLli[BlockIndex].Darx); - //DBG_SSI_INFO("GdmaChLli[%x] = %x\n", BlockIndex, &(pSsiDmaMultiBlk->GdmaChLli[BlockIndex])); - pSsiDmaMultiBlk->Lli[BlockIndex].pLliEle = (GDMA_CH_LLI_ELE*) &(pSsiDmaMultiBlk->GdmaChLli[BlockIndex]); - if(BlockIndex == BlockNumber - 1){ - pSsiDmaMultiBlk->Lli[BlockIndex].pNextLli = NULL; - pSsiDmaMultiBlk->BlockSizeList[BlockIndex].pNextBlockSiz = NULL; - pSsiDmaMultiBlk->BlockSizeList[BlockIndex].BlockSize = Length - BlockIndex*MAX_DMA_BLOCK_SIZE; - } - else{ - pSsiDmaMultiBlk->Lli[BlockIndex].pNextLli = &(pSsiDmaMultiBlk->Lli[BlockIndex + 1]); - pSsiDmaMultiBlk->BlockSizeList[BlockIndex].BlockSize = MAX_DMA_BLOCK_SIZE; - pSsiDmaMultiBlk->BlockSizeList[BlockIndex].pNextBlockSiz = &(pSsiDmaMultiBlk->BlockSizeList[BlockIndex + 1]); - - } - //DBG_SSI_INFO("Lli[%x] = %x\n", BlockIndex, &(pSsiDmaMultiBlk->Lli[BlockIndex])); - //DBG_SSI_INFO("pSsiDmaMultiBlk->BlockSizeList[%x]= %x\n", BlockIndex, pSsiDmaMultiBlk->BlockSizeList[BlockIndex].BlockSize); - } - - pHalGdmaAdapter->pBlockSizeList = (struct BLOCK_SIZE_LIST*) &(pSsiDmaMultiBlk->BlockSizeList); - pHalGdmaAdapter->pLlix = (struct GDMA_CH_LLI*) &(pSsiDmaMultiBlk->Lli); - - return HAL_OK; -} - -#endif // end of "#ifdef CONFIG_GDMA_EN" - -#endif // CONFIG_SOC_PS_EN - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_ssi.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_ssi.h deleted file mode 100644 index 1bd4fb3..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_ssi.h +++ /dev/null @@ -1,530 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _RTL8195A_SSI_H_ -#define _RTL8195A_SSI_H_ - -#define SSI_DUMMY_DATA 0x00 // for master mode, we need to push a Dummy data to TX FIFO for read - -#define SSI_CLK_SPI1 (PLATFORM_CLOCK/2) -#define SSI_CLK_SPI0_2 (PLATFORM_CLOCK/4) - -/* Parameters of DW_apb_ssi for RTL8195A */ -#define SSI_TX_FIFO_DEPTH 64 -#define TX_ABW 6 // 1-8, log2(SSI_TX_FIFO_DEPTH) -#define SSI_RX_FIFO_DEPTH 64 -#define RX_ABW 6 // 1-8, log2(SSI_RX_FIFO_DEPTH) - -#define SSI0_REG_BASE 0x40042000 -#define SSI1_REG_BASE 0x40042400 -#define SSI2_REG_BASE 0x40042800 - -/* Memory Map of DW_apb_ssi */ -#define REG_DW_SSI_CTRLR0 0x00 // 16 bits -#define REG_DW_SSI_CTRLR1 0x04 // 16 bits -#define REG_DW_SSI_SSIENR 0x08 // 1 bit -#define REG_DW_SSI_MWCR 0x0C // 3 bits -#define REG_DW_SSI_SER 0x10 // -#define REG_DW_SSI_BAUDR 0x14 // 16 bits -#define REG_DW_SSI_TXFTLR 0x18 // TX_ABW -#define REG_DW_SSI_RXFTLR 0x1C // RX_ABW -#define REG_DW_SSI_TXFLR 0x20 // -#define REG_DW_SSI_RXFLR 0x24 // -#define REG_DW_SSI_SR 0x28 // 7 bits -#define REG_DW_SSI_IMR 0x2C // -#define REG_DW_SSI_ISR 0x30 // 6 bits -#define REG_DW_SSI_RISR 0x34 // 6 bits -#define REG_DW_SSI_TXOICR 0x38 // 1 bits -#define REG_DW_SSI_RXOICR 0x3C // 1 bits -#define REG_DW_SSI_RXUICR 0x40 // 1 bits -#define REG_DW_SSI_MSTICR 0x44 // 1 bits -#define REG_DW_SSI_ICR 0x48 // 1 bits -#define REG_DW_SSI_DMACR 0x4C // 2 bits -#define REG_DW_SSI_DMATDLR 0x50 // TX_ABW -#define REG_DW_SSI_DMARDLR 0x54 // RX_ABW -#define REG_DW_SSI_IDR 0x58 // 32 bits -#define REG_DW_SSI_COMP_VERSION 0x5C // 32 bits -#define REG_DW_SSI_DR 0x60 // 16 bits 0x60-0xEC -#define REG_DW_SSI_RX_SAMPLE_DLY 0xF0 // 8 bits -#define REG_DW_SSI_RSVD_0 0xF4 // 32 bits -#define REG_DW_SSI_RSVD_1 0xF8 // 32 bits -#define REG_DW_SSI_RSVD_2 0xFC // 32 bits - -// CTRLR0 0x00 // 16 bits, 6.2.1 -// DFS Reset Value: 0x7 -#define BIT_SHIFT_CTRLR0_DFS 0 -#define BIT_MASK_CTRLR0_DFS 0xF -#define BIT_CTRLR0_DFS(x)(((x) & BIT_MASK_CTRLR0_DFS) << BIT_SHIFT_CTRLR0_DFS) -#define BIT_INVC_CTRLR0_DFS (~(BIT_MASK_CTRLR0_DFS << BIT_SHIFT_CTRLR0_DFS)) - -#define BIT_SHIFT_CTRLR0_FRF 4 -#define BIT_MASK_CTRLR0_FRF 0x3 -#define BIT_CTRLR0_FRF(x)(((x) & BIT_MASK_CTRLR0_FRF) << BIT_SHIFT_CTRLR0_FRF) -#define BIT_INVC_CTRLR0_FRF (~(BIT_MASK_CTRLR0_FRF << BIT_SHIFT_CTRLR0_FRF)) - -#define BIT_SHIFT_CTRLR0_SCPH 6 -#define BIT_MASK_CTRLR0_SCPH 0x1 -#define BIT_CTRLR0_SCPH(x)(((x) & BIT_MASK_CTRLR0_SCPH) << BIT_SHIFT_CTRLR0_SCPH) -#define BIT_INVC_CTRLR0_SCPH (~(BIT_MASK_CTRLR0_SCPH << BIT_SHIFT_CTRLR0_SCPH)) - -#define BIT_SHIFT_CTRLR0_SCPOL 7 -#define BIT_MASK_CTRLR0_SCPOL 0x1 -#define BIT_CTRLR0_SCPOL(x)(((x) & BIT_MASK_CTRLR0_SCPOL) << BIT_SHIFT_CTRLR0_SCPOL) -#define BIT_INVC_CTRLR0_SCPOL (~(BIT_MASK_CTRLR0_SCPOL << BIT_SHIFT_CTRLR0_SCPOL)) - -#define BIT_SHIFT_CTRLR0_TMOD 8 -#define BIT_MASK_CTRLR0_TMOD 0x3 -#define BIT_CTRLR0_TMOD(x)(((x) & BIT_MASK_CTRLR0_TMOD) << BIT_SHIFT_CTRLR0_TMOD) -#define BIT_INVC_CTRLR0_TMOD (~(BIT_MASK_CTRLR0_TMOD << BIT_SHIFT_CTRLR0_TMOD)) - -#define BIT_SHIFT_CTRLR0_SLV_OE 10 -#define BIT_MASK_CTRLR0_SLV_OE 0x1 -#define BIT_CTRLR0_SLV_OE(x)(((x) & BIT_MASK_CTRLR0_SLV_OE) << BIT_SHIFT_CTRLR0_SLV_OE) -#define BIT_INVC_CTRLR0_SLV_OE (~(BIT_MASK_CTRLR0_SLV_OE << BIT_SHIFT_CTRLR0_SLV_OE)) - -#define BIT_SHIFT_CTRLR0_SRL 11 -#define BIT_MASK_CTRLR0_SRL 0x1 -#define BIT_CTRLR0_SRL(x)(((x) & BIT_MASK_CTRLR0_SRL) << BIT_SHIFT_CTRLR0_SRL) -#define BIT_INVC_CTRLR0_SRL (~(BIT_MASK_CTRLR0_SRL << BIT_SHIFT_CTRLR0_SRL)) - -#define BIT_SHIFT_CTRLR0_CFS 12 -#define BIT_MASK_CTRLR0_CFS 0xF -#define BIT_CTRLR0_CFS(x)(((x) & BIT_MASK_CTRLR0_CFS) << BIT_SHIFT_CTRLR0_CFS) -#define BIT_INVC_CTRLR0_CFS (~(BIT_MASK_CTRLR0_CFS << BIT_SHIFT_CTRLR0_CFS)) - -// CTRLR1 0x04 // 16 bits -#define BIT_SHIFT_CTRLR1_NDF 0 -#define BIT_MASK_CTRLR1_NDF 0xFFFF -#define BIT_CTRLR1_NDF(x)(((x) & BIT_MASK_CTRLR1_NDF) << BIT_SHIFT_CTRLR1_NDF) -#define BIT_INVC_CTRLR1_NDF (~(BIT_MASK_CTRLR1_NDF << BIT_SHIFT_CTRLR1_NDF)) - -// SSIENR 0x08 // 1 bit -#define BIT_SHIFT_SSIENR_SSI_EN 0 -#define BIT_MASK_SSIENR_SSI_EN 0x1 -#define BIT_SSIENR_SSI_EN(x)(((x) & BIT_MASK_SSIENR_SSI_EN) << BIT_SHIFT_SSIENR_SSI_EN) -#define BIT_INVC_SSIENR_SSI_EN (~(BIT_MASK_SSIENR_SSI_EN << BIT_SHIFT_SSIENR_SSI_EN)) - -// MWCR 0x0c // 3 bits -#define BIT_SHIFT_MWCR_MWMOD 0 -#define BIT_MASK_MWCR_MWMOD 0x1 -#define BIT_MWCR_MWMOD(x)(((x) & BIT_MASK_MWCR_MWMOD) << BIT_SHIFT_MWCR_MWMOD) -#define BIT_INVC_MWCR_MWMOD (~(BIT_MASK_MWCR_MWMOD << BIT_SHIFT_MWCR_MWMOD)) - -#define BIT_SHIFT_MWCR_MDD 1 -#define BIT_MASK_MWCR_MDD 0x1 -#define BIT_MWCR_MDD(x)(((x) & BIT_MASK_MWCR_MDD) << BIT_SHIFT_MWCR_MDD) -#define BIT_INVC_MWCR_MDD (~(BIT_MASK_MWCR_MDD << BIT_SHIFT_MWCR_MDD)) - -#define BIT_SHIFT_MWCR_MHS 2 -#define BIT_MASK_MWCR_MHS 0x1 -#define BIT_MWCR_MHS(x)(((x) & BIT_MASK_MWCR_MHS) << BIT_SHIFT_MWCR_MHS) -#define BIT_INVC_MWCR_MHS (~(BIT_MASK_MWCR_MHS << BIT_SHIFT_MWCR_MHS)) - -// SER 0x10 // Variable Length -#define BIT_SHIFT_SER_SER 0 -#define BIT_MASK_SER_SER 0xFF -#define BIT_SER_SER(x)(((x) & BIT_MASK_SER_SER) << BIT_SHIFT_SER_SER) -#define BIT_INVC_SER_SER (~(BIT_MASK_SER_SER << BIT_SHIFT_SER_SER)) - -// BAUDR 0x14 // 16 bits -#define BIT_SHIFT_BAUDR_SCKDV 0 -#define BIT_MASK_BAUDR_SCKDV 0xFFFF -#define BIT_BAUDR_SCKDV(x)(((x) & BIT_MASK_BAUDR_SCKDV) << BIT_SHIFT_BAUDR_SCKDV) -#define BIT_INVC_BAUDR_SCKDV (~(BIT_MASK_BAUDR_SCKDV << BIT_SHIFT_BAUDR_SCKDV)) - -// TXFLTR 0x18 // Variable Length -#define BIT_SHIFT_TXFTLR_TFT 0 -#define BIT_MASK_TXFTLR_TFT 0x3F // (TX_ABW-1):0 -#define BIT_TXFTLR_TFT(x)(((x) & BIT_MASK_TXFTLR_TFT) << BIT_SHIFT_TXFTLR_TFT) -#define BIT_INVC_TXFTLR_TFT (~(BIT_MASK_TXFTLR_TFT << BIT_SHIFT_TXFTLR_TFT)) - -// RXFLTR 0x1c // Variable Length -#define BIT_SHIFT_RXFTLR_RFT 0 -#define BIT_MASK_RXFTLR_RFT 0x3F // (RX_ABW-1):0 -#define BIT_RXFTLR_RFT(x)(((x) & BIT_MASK_RXFTLR_RFT) << BIT_SHIFT_RXFTLR_RFT) -#define BIT_INVC_RXFTLR_RFT (~(BIT_MASK_RXFTLR_RFT << BIT_SHIFT_RXFTLR_RFT)) - -// TXFLR 0x20 // see [READ ONLY] -#define BIT_MASK_TXFLR_TXTFL 0x7F // (TX_ABW):0 - -// RXFLR 0x24 // see [READ ONLY] -#define BIT_MASK_RXFLR_RXTFL 0x7F // (RX_ABW):0 - -// SR 0x28 // 7 bits [READ ONLY] -#define BIT_SR_BUSY BIT0 -#define BIT_SR_TFNF BIT1 -#define BIT_SR_TFE BIT2 -#define BIT_SR_RFNE BIT3 -#define BIT_SR_RFF BIT4 -#define BIT_SR_TXE BIT5 -#define BIT_SR_DCOL BIT6 - -// IMR 0x2c // see -#define BIT_SHIFT_IMR_TXEIM 0 -#define BIT_MASK_IMR_TXEIM 0x1 -// #define BIT_IMR_TXEIM(x)(((x) & BIT_MASK_IMR_TXEIM) << BIT_SHIFT_IMR_TXEIM) -#define BIT_INVC_IMR_TXEIM (~(BIT_MASK_IMR_TXEIM << BIT_SHIFT_IMR_TXEIM)) - -#define BIT_SHIFT_IMR_TXOIM 1 -#define BIT_MASK_IMR_TXOIM 0x1 -// #define BIT_IMR_TXOIM(x)(((x) & BIT_MASK_IMR_TXOIM) << BIT_SHIFT_IMR_TXOIM) -#define BIT_INVC_IMR_TXOIM (~(BIT_MASK_IMR_TXOIM << BIT_SHIFT_IMR_TXOIM)) - -#define BIT_SHIFT_IMR_RXUIM 2 -#define BIT_MASK_IMR_RXUIM 0x1 -// #define BIT_IMR_RXUIM(x)(((x) & BIT_MASK_IMR_RXUIM) << BIT_SHIFT_IMR_RXUIM) -#define BIT_INVC_IMR_RXUIM (~(BIT_MASK_IMR_RXUIM << BIT_SHIFT_IMR_RXUIM)) - -#define BIT_SHIFT_IMR_RXOIM 3 -#define BIT_MASK_IMR_RXOIM 0x1 -// #define BIT_IMR_RXOIM(x)(((x) & BIT_MASK_IMR_RXOIM) << BIT_SHIFT_IMR_RXOIM) -#define BIT_INVC_IMR_RXOIM (~(BIT_MASK_IMR_RXOIM << BIT_SHIFT_IMR_RXOIM)) - -#define BIT_SHIFT_IMR_RXFIM 4 -#define BIT_MASK_IMR_RXFIM 0x1 -// #define BIT_IMR_RXFIM(x)(((x) & BIT_MASK_IMR_RXFIM) << BIT_SHIFT_IMR_RXFIM) -#define BIT_INVC_IMR_RXFIM (~(BIT_MASK_IMR_RXFIM << BIT_SHIFT_IMR_RXFIM)) - -#define BIT_SHIFT_IMR_MSTIM 5 -#define BIT_MASK_IMR_MSTIM 0x1 -// #define BIT_IMR_MSTIM(x)(((x) & BIT_MASK_IMR_MSTIM) << BIT_SHIFT_IMR_MSTIM) -#define BIT_INVC_IMR_MSTIM (~(BIT_MASK_IMR_MSTIM << BIT_SHIFT_IMR_MSTIM)) - -#define BIT_IMR_TXEIM BIT0 -#define BIT_IMR_TXOIM BIT1 -#define BIT_IMR_RXUIM BIT2 -#define BIT_IMR_RXOIM BIT3 -#define BIT_IMR_RXFIM BIT4 -#define BIT_IMR_MSTIM BIT5 - -// ISR 0x30 // 6 bits [READ ONLY] -#define BIT_ISR_TXEIS BIT0 -#define BIT_ISR_TXOIS BIT1 -#define BIT_ISR_RXUIS BIT2 -#define BIT_ISR_RXOIS BIT3 -#define BIT_ISR_RXFIS BIT4 -#define BIT_ISR_MSTIS BIT5 - -// RISR 0x34 // 6 bits [READ ONLY] -#define BIT_RISR_TXEIR BIT0 -#define BIT_RISR_TXOIR BIT1 -#define BIT_RISR_RXUIR BIT2 -#define BIT_RISR_RXOIR BIT3 -#define BIT_RISR_RXFIR BIT4 -#define BIT_RISR_MSTIR BIT5 - -// TXOICR 0x38 // 1 bits [READ ONLY] -// RXOICR 0x3c // 1 bits [READ ONLY] -// RXUICR 0x40 // 1 bits [READ ONLY] -// MSTICR 0x44 // 1 bits [READ ONLY] -// ICR 0x48 // 1 bits [READ ONLY] - -// DMACR 0x4c // 2 bits -#define BIT_SHIFT_DMACR_RDMAE 0 -#define BIT_MASK_DMACR_RDMAE 0x1 -#define BIT_DMACR_RDMAE(x)(((x) & BIT_MASK_DMACR_RDMAE) << BIT_SHIFT_DMACR_RDMAE) -#define BIT_INVC_DMACR_RDMAE (~(BIT_MASK_DMACR_RDMAE << BIT_SHIFT_DMACR_RDMAE)) - -#define BIT_SHIFT_DMACR_TDMAE 1 -#define BIT_MASK_DMACR_TDMAE 0x1 -#define BIT_DMACR_TDMAE(x)(((x) & BIT_MASK_DMACR_TDMAE) << BIT_SHIFT_DMACR_TDMAE) -#define BIT_INVC_DMACR_TDMAE (~(BIT_MASK_DMACR_TDMAE << BIT_SHIFT_DMACR_TDMAE)) - -// DMATDLR 0x50 -#define BIT_SHIFT_DMATDLR_DMATDL 0 -#define BIT_MASK_DMATDLR_DMATDL 0x3F // (TX_ABW-1):0 -#define BIT_DMATDLR_DMATDL(x)(((x) & BIT_MASK_DMATDLR_DMATDL) << BIT_SHIFT_DMATDLR_DMATDL) -#define BIT_INVC_DMATDLR_DMATDL (~(BIT_MASK_DMATDLR_DMATDL << BIT_SHIFT_DMATDLR_DMATDL)) - -// DMARDLR 0x54 -#define BIT_SHIFT_DMARDLR_DMARDL 0 -#define BIT_MASK_DMARDLR_DMARDL 0x3F // (RX_ABW-1):0 -#define BIT_DMARDLR_DMARDL(x)(((x) & BIT_MASK_DMARDLR_DMARDL) << BIT_SHIFT_DMARDLR_DMARDL) -#define BIT_INVC_DMARDLR_DMARDL (~(BIT_MASK_DMARDLR_DMARDL << BIT_SHIFT_DMARDLR_DMARDL)) - -// IDR 0x58 // 32 bits [READ ONLY] -// COMP_VERSION 0x5c // 32 bits [READ ONLY] - -// DR 0x60 // 16 bits 0x60-0xEC -#define BIT_SHIFT_DR_DR 0 -#define BIT_MASK_DR_DR 0xFFFF -#define BIT_DR_DR(x)(((x) & BIT_MASK_DR_DR) << BIT_SHIFT_DR_DR) -#define BIT_INVC_DR_DR (~(BIT_MASK_DR_DR << BIT_SHIFT_DR_DR)) - -// RX_SAMPLE_DLY 0xF0 // 8 bits -#define BIT_SHIFT_RX_SAMPLE_DLY_RSD 0 -#define BIT_MASK_RX_SAMPLE_DLY_RSD 0xFFFF -#define BIT_RX_SAMPLE_DLY_RSD(x)(((x) & BIT_MASK_RX_SAMPLE_DLY_RSD) << BIT_SHIFT_RX_SAMPLE_DLY_RSD) -#define BIT_INVC_RX_SAMPLE_DLY_RSD (~(BIT_MASK_RX_SAMPLE_DLY_RSD << BIT_SHIFT_RX_SAMPLE_DLY_RSD)) - -// RSVD_0 0xF4 // 32 bits -// RSVD_1 0xF8 // 32 bits -// RSVD_2 0xFC // 32 bits - -// SSI0 Pinmux -#define BIT_SHIFT_SSI0_PIN_EN 0 -#define BIT_MASK_SSI0_PIN_EN 0x1 -#define BIT_SSI0_PIN_EN(x)(((x) & BIT_MASK_SSI0_PIN_EN) << BIT_SHIFT_SSI0_PIN_EN) -#define BIT_INVC_SSI0_PIN_EN (~(BIT_MASK_SSI0_PIN_EN << BIT_SHIFT_SSI0_PIN_EN)) - -#define BIT_SHIFT_SSI0_PIN_SEL 1 -#define BIT_MASK_SSI0_PIN_SEL 0x7 -#define BIT_SSI0_PIN_SEL(x)(((x) & BIT_MASK_SSI0_PIN_SEL) << BIT_SHIFT_SSI0_PIN_SEL) -#define BIT_INVC_SSI0_PIN_SEL (~(BIT_MASK_SSI0_PIN_SEL << BIT_SHIFT_SSI0_PIN_SEL)) - -// SSI1 Pinmux -#define BIT_SHIFT_SSI1_PIN_EN 4 -#define BIT_MASK_SSI1_PIN_EN 0x1 -#define BIT_SSI1_PIN_EN(x)(((x) & BIT_MASK_SSI1_PIN_EN) << BIT_SHIFT_SSI1_PIN_EN) -#define BIT_INVC_SSI1_PIN_EN (~(BIT_MASK_SSI1_PIN_EN << BIT_SHIFT_SSI1_PIN_EN)) - -#define BIT_SHIFT_SSI1_PIN_SEL 5 -#define BIT_MASK_SSI1_PIN_SEL 0x7 -#define BIT_SSI1_PIN_SEL(x)(((x) & BIT_MASK_SSI1_PIN_SEL) << BIT_SHIFT_SSI1_PIN_SEL) -#define BIT_INVC_SSI1_PIN_SEL (~(BIT_MASK_SSI1_PIN_SEL << BIT_SHIFT_SSI1_PIN_SEL)) - -// SSI2 Pinmux -#define BIT_SHIFT_SSI2_PIN_EN 8 -#define BIT_MASK_SSI2_PIN_EN 0x1 -#define BIT_SSI2_PIN_EN(x)(((x) & BIT_MASK_SSI2_PIN_EN) << BIT_SHIFT_SSI2_PIN_EN) -#define BIT_INVC_SSI2_PIN_EN (~(BIT_MASK_SSI2_PIN_EN << BIT_SHIFT_SSI2_PIN_EN)) - -#define BIT_SHIFT_SSI2_PIN_SEL 9 -#define BIT_MASK_SSI2_PIN_SEL 0x7 -#define BIT_SSI2_PIN_SEL(x)(((x) & BIT_MASK_SSI2_PIN_SEL) << BIT_SHIFT_SSI2_PIN_SEL) -#define BIT_INVC_SSI2_PIN_SEL (~(BIT_MASK_SSI2_PIN_SEL << BIT_SHIFT_SSI2_PIN_SEL)) - -// SSI0 Multiple Chip Selection (Pinmux Select is controlled by BIT_SSI0_PIN_SEL) -#define BIT_SHIFT_SSI0_MULTI_CS_EN 28 -#define BIT_MASK_SSI0_MULTI_CS_EN 0x1 -#define BIT_SSI0_MULTI_CS_EN(x)(((x) & BIT_MASK_SSI0_MULTI_CS_EN) << BIT_SHIFT_SSI0_MULTI_CS_EN) -#define BIT_INVC_SSI0_MULTI_CS_EN (~(BIT_MASK_SSI0_MULTI_CS_EN << BIT_SHIFT_SSI0_MULTI_CS_EN)) - - -#define HAL_SSI_READ32(SsiIndex, addr) \ - HAL_READ32(SPI0_REG_BASE+ (SsiIndex*SSI_REG_OFF), addr) -#define HAL_SSI_WRITE32(SsiIndex, addr, value) \ - HAL_WRITE32(SPI0_REG_BASE+ (SsiIndex*SSI_REG_OFF), addr, value) -#define HAL_SSI_READ16(SsiIndex, addr) \ - HAL_READ16(SPI0_REG_BASE+ (SsiIndex*SSI_REG_OFF), addr) -#define HAL_SSI_WRITE16(SsiIndex, addr, value) \ - HAL_WRITE16(SPI0_REG_BASE+ (SsiIndex*SSI_REG_OFF), addr, value) -#define HAL_SSI_READ8(SsiIndex, addr) \ - HAL_READ8(SPI0_REG_BASE+ (SsiIndex*SSI_REG_OFF), addr) -#define HAL_SSI_WRITE8(SsiIndex, addr, value) \ - HAL_WRITE8(SPI0_REG_BASE+ (SsiIndex*SSI_REG_OFF), addr, value) - - -// SSI Pinmux Select -typedef enum _SSI0_PINMUX_SELECT_ { - SSI0_MUX_TO_GPIOE = S0, - SSI0_MUX_TO_GPIOC = S1 -}SSI0_PINMUX_SELECT, *PSSI0_PINMUX_SELECT; - -typedef enum _SSI1_PINMUX_SELECT_ { - SSI1_MUX_TO_GPIOA = S0, - SSI1_MUX_TO_GPIOB = S1, - SSI1_MUX_TO_GPIOD = S2 -}SSI1_PINMUX_SELECT, *PSSI1_PINMUX_SELECT; - -typedef enum _SSI2_PINMUX_SELECT_ { - SSI2_MUX_TO_GPIOG = S0, - SSI2_MUX_TO_GPIOE = S1, - SSI2_MUX_TO_GPIOD = S2 -}SSI2_PINMUX_SELECT, *PSSI2_PINMUX_SELECT; - -typedef enum _SSI0_MULTI_CS_PINMUX_SELECT_ { - SSI0_CS_MUX_TO_GPIOE = S0, - SSI0_CS_MUX_TO_GPIOC = S1 -}SSI0_MULTI_CS_PINMUX_SELECT, *PSSI0_MULTI_CS_PINMUX_SELECT; - -typedef enum _SSI_CTRLR0_TMOD_ { - TMOD_TR = 0, - TMOD_TO = 1, - TMOD_RO = 2, - TMOD_EEPROM_R = 3 -}SSI_CTRLR0_TMOD, *PSSI_CTRLR0_TMOD; - -typedef enum _SSI_CTRLR0_SCPOL_ { - SCPOL_INACTIVE_IS_LOW = 0, - SCPOL_INACTIVE_IS_HIGH = 1 -}SSI_CTRLR0_SCPOL, *PSSI_CTRLR0_SCPOL; - -typedef enum _SSI_CTRLR0_SCPH_ { - SCPH_TOGGLES_IN_MIDDLE = 0, - SCPH_TOGGLES_AT_START = 1 -}SSI_CTRLR0_SCPH, *PSSI_CTRLR0_SCPH; - -typedef enum _SSI_CTRLR0_DFS_ { - DFS_4_BITS = 3, - DFS_5_BITS = 4, - DFS_6_BITS = 5, - DFS_7_BITS = 6, - DFS_8_BITS = 7, - DFS_9_BITS = 8, - DFS_10_BITS = 9, - DFS_11_BITS = 10, - DFS_12_BITS = 11, - DFS_13_BITS = 12, - DFS_14_BITS = 13, - DFS_15_BITS = 14, - DFS_16_BITS = 15, -}SSI_CTRLR0_DFS, *PSSI_CTRLR0_DFS; - -typedef enum _SSI_CTRLR0_CFS_ { - CFS_1_BIT = 0, - CFS_2_BITS = 1, - CFS_3_BITS = 2, - CFS_4_BITS = 3, - CFS_5_BITS = 4, - CFS_6_BITS = 5, - CFS_7_BITS = 6, - CFS_8_BITS = 7, - CFS_9_BITS = 8, - CFS_10_BITS = 9, - CFS_11_BITS = 10, - CFS_12_BITS = 11, - CFS_13_BITS = 12, - CFS_14_BITS = 13, - CFS_15_BITS = 14, - CFS_16_BITS = 15 -}SSI_CTRLR0_CFS, *PSSI_CTRLR0_CFS; - -typedef enum _SSI_CTRLR0_SLV_OE_ { - SLV_TXD_ENABLE = 0, - SLV_TXD_DISABLE = 1 -}SSI_CTRLR0_SLV_OE, *PSSI_CTRLR0_SLV_OE; - -typedef enum _SSI_ROLE_SELECT_ { - SSI_SLAVE = 0, - SSI_MASTER = 1 -}SSI_ROLE_SELECT, *PSSI_ROLE_SELECT; - -typedef enum _SSI_FRAME_FORMAT_ { - FRF_MOTOROLA_SPI = 0, - FRF_TI_SSP = 1, - FRF_NS_MICROWIRE = 2, - FRF_RSVD = 3 -}SSI_FRAME_FORMAT, *PSSI_FRAME_FORMAT; - -typedef enum _SSI_DMACR_ENABLE_ { - SSI_NODMA = 0, - SSI_RXDMA_ENABLE = 1, - SSI_TXDMA_ENABLE = 2, - SSI_TRDMA_ENABLE = 3 -}SSI_DMACR_ENABLE, *PSSI_DMACR_ENABLE; - -typedef enum _SSI_MWCR_HANDSHAKE_ { - MW_HANDSHAKE_DISABLE = 0, - MW_HANDSHAKE_ENABLE = 1 -}SSI_MWCR_HANDSHAKE, *PSSI_MWCR_HANDSHAKE; - -typedef enum _SSI_MWCR_DIRECTION_ { - MW_DIRECTION_SLAVE_TO_MASTER = 0, - MW_DIRECTION_MASTER_TO_SLAVE = 1 -}SSI_MWCR_DIRECTION, *PSSI_MWCR_DIRECTION; - -typedef enum _SSI_MWCR_TMOD_ { - MW_TMOD_NONSEQUENTIAL = 0, - MW_TMOD_SEQUENTIAL = 1 -}SSI_MWCR_TMOD, *PSSI_MWCR_TMOD; - -typedef enum _SSI_DATA_TRANSFER_MECHANISM_ { - SSI_DTM_BASIC, - SSI_DTM_INTERRUPT, - SSI_DTM_DMA -}SSI_DATA_TRANSFER_MECHANISM, *PSSI_DATA_TRANSFER_MECHANISM; - - -_LONG_CALL_ HAL_Status HalSsiPinmuxEnableRtl8195a(void *Adaptor); -_LONG_CALL_ROM_ HAL_Status HalSsiEnableRtl8195a(void *Adaptor); -_LONG_CALL_ROM_ HAL_Status HalSsiDisableRtl8195a(void *Adaptor); -_LONG_CALL_ HAL_Status HalSsiInitRtl8195a(void *Adaptor); -_LONG_CALL_ HAL_Status HalSsiSetSclkPolarityRtl8195a(void *Adaptor); -_LONG_CALL_ HAL_Status HalSsiSetSclkPhaseRtl8195a(void *Adaptor); -_LONG_CALL_ HAL_Status HalSsiWriteRtl8195a(void *Adaptor, uint32_t value); -_LONG_CALL_ HAL_Status HalSsiLoadSettingRtl8195a(void *Adaptor, void *Setting); -_LONG_CALL_ROM_ HAL_Status HalSsiSetInterruptMaskRtl8195a(void *Adaptor); -_LONG_CALL_ HAL_Status HalSsiSetDeviceRoleRtl8195a(void *Adaptor, uint32_t Role); -_LONG_CALL_ HAL_Status HalSsiInterruptEnableRtl8195a(void *Adaptor); -_LONG_CALL_ HAL_Status HalSsiInterruptDisableRtl8195a(void *Adaptor); -_LONG_CALL_ HAL_Status HalSsiReadInterruptRtl8195a(void *Adaptor, void *RxData, uint32_t Length); -_LONG_CALL_ROM_ HAL_Status HalSsiSetRxFifoThresholdLevelRtl8195a(void *Adaptor); -_LONG_CALL_ HAL_Status HalSsiSetTxFifoThresholdLevelRtl8195a(void *Adaptor); -_LONG_CALL_ HAL_Status HalSsiWriteInterruptRtl8195a(void *Adaptor, void *TxData, uint32_t Length); -_LONG_CALL_ROM_ HAL_Status HalSsiSetSlaveEnableRegisterRtl8195a(void *Adaptor, uint32_t SlaveIndex); -_LONG_CALL_ROM_ uint32_t HalSsiBusyRtl8195a(void *Adaptor); -_LONG_CALL_ROM_ uint32_t HalSsiWriteableRtl8195a(void *Adaptor); -_LONG_CALL_ROM_ uint32_t HalSsiReadableRtl8195a(void *Adaptor); -_LONG_CALL_ROM_ uint32_t HalSsiGetInterruptMaskRtl8195a(void *Adaptor); -_LONG_CALL_ROM_ uint32_t HalSsiGetRxFifoLevelRtl8195a(void *Adaptor); -_LONG_CALL_ uint32_t HalSsiGetTxFifoLevelRtl8195a(void *Adaptor); -_LONG_CALL_ROM_ uint32_t HalSsiGetStatusRtl8195a(void *Adaptor); -_LONG_CALL_ROM_ uint32_t HalSsiGetInterruptStatusRtl8195a(void *Adaptor); -_LONG_CALL_ uint32_t HalSsiReadRtl8195a(void *Adaptor); -_LONG_CALL_ uint32_t HalSsiGetRawInterruptStatusRtl8195a(void *Adaptor); -_LONG_CALL_ROM_ uint32_t HalSsiGetSlaveEnableRegisterRtl8195a(void *Adaptor); - -_LONG_CALL_ROM_ void _SsiReadInterrupt(void *Adaptor); -_LONG_CALL_ROM_ void _SsiWriteInterrupt(void *Adaptor); -_LONG_CALL_ uint32_t _SsiIrqHandle(void *Adaptor); - -// ROM code patch -void _SsiReadInterruptRtl8195a(void *Adapter); -void _SsiWriteInterruptRtl8195a(void *Adapter); -HAL_Status HalSsiInitRtl8195a_Patch(void *Adaptor); -HAL_Status HalSsiPinmuxEnableRtl8195a_Patch(void *Adaptor); -HAL_Status HalSsiPinmuxDisableRtl8195a(void *Adaptor); -HAL_Status HalSsiDeInitRtl8195a(void * Adapter); -HAL_Status HalSsiClockOffRtl8195a(void * Adapter); -HAL_Status HalSsiClockOnRtl8195a(void * Adapter); -void HalSsiSetSclkRtl8195a(void *Adapter, uint32_t ClkRate); -HAL_Status HalSsiIntReadRtl8195a(void *Adapter, void *RxData, uint32_t Length); -HAL_Status HalSsiIntWriteRtl8195a(void *Adapter, uint8_t *pTxData, uint32_t Length); -void HalSsiTxFIFOThresholdRtl8195a(void *Adaptor, uint32_t txftl); -HAL_Status HalSsiEnterCriticalRtl8195a(void * Data); -HAL_Status HalSsiExitCriticalRtl8195a(void * Data); -HAL_Status HalSsiIsTimeoutRtl8195a(uint32_t StartCount, uint32_t TimeoutCnt); -HAL_Status HalSsiStopRecvRtl8195a(void * Data); - -#if CONFIG_CHIP_E_CUT -HAL_Status HalSsiPinmuxEnableRtl8195a_V04(void *Adaptor); -HAL_Status HalSsiPinmuxDisableRtl8195a_V04(void * Adaptor); -void _SsiReadInterruptRtl8195a_V04(void *Adapter); -void _SsiWriteInterruptRtl8195a_V04(void *Adapter); -HAL_Status HalSsiInitRtl8195a_V04(void *Adaptor); -HAL_Status HalSsiSetFormatRtl8195a_V04(void * Adaptor); -HAL_Status HalSsiDeInitRtl8195a_V04(void *Adapter); -HAL_Status HalSsiIntReadRtl8195a_V04(void *Adapter, void *RxData, uint32_t Length); -HAL_Status HalSsiIntWriteRtl8195a_V04(void *Adapter, uint8_t *pTxData, uint32_t Length); -HAL_Status HalSsiClockOffRtl8195a_V04(void * Adapter); -HAL_Status HalSsiClockOnRtl8195a_V04(void * Adapter); -void HalSsiSetSclkRtl8195a_V04(void *Adapter, uint32_t ClkRate); -void HalSsiTxGdmaLoadDefRtl8195a_V04(IN void * Adapter); -void HalSsiRxGdmaLoadDefRtl8195a_V04(IN void * Adapter); -void HalSsiDmaInitRtl8195a_V04(void *Adapter); -HAL_Status HalSsiDmaSendRtl8195a_V04(IN void * Adapter, IN uint8_t * pTxData, IN uint32_t Length); -HAL_Status HalSsiDmaRecvRtl8195a_V04(IN void * Adapter, IN uint8_t * pRxData, IN uint32_t Length); -HAL_Status HalSsiDmaSendMultiBlockRtl8195a_V04(void * Adapter, uint8_t * pTxData, uint32_t Length); -HAL_Status HalSsiDmaRecvMultiBlockRtl8195a_V04(void * Adapter, uint8_t * pRxData, uint32_t Length); - -#endif - -#ifdef CONFIG_GDMA_EN -void HalSsiTxGdmaLoadDefRtl8195a(void *Adapter); -void HalSsiRxGdmaLoadDefRtl8195a(void *Adapter); -void HalSsiDmaInitRtl8195a(void *Adapter); -HAL_Status HalSsiDmaSendRtl8195a(void *Adapter, uint8_t *pTxData, uint32_t Length); -HAL_Status HalSsiDmaRecvRtl8195a(void *Adapter, uint8_t *pRxData, uint32_t Length); -HAL_Status HalSsiDmaSendMultiBlockRtl8195a(void * Adapter, uint8_t * pRxData, uint32_t Length); -HAL_Status HalSsiDmaRecvMultiBlockRtl8195a(void * Adapter, uint8_t * pRxData, uint32_t Length); - -#endif // end of "#ifdef CONFIG_GDMA_EN" - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sys_on.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sys_on.h deleted file mode 100644 index 236c0bc..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sys_on.h +++ /dev/null @@ -1,1099 +0,0 @@ -#ifndef __INC_RTL8195A_SYS_ON_BIT_H -#define __INC_RTL8195A_SYS_ON_BIT_H - -#define HAL_SYS_CTRL_READ32(addr) HAL_READ32(SYSTEM_CTRL_BASE, addr) -#define HAL_SYS_CTRL_WRITE32(addr, value) HAL_WRITE32(SYSTEM_CTRL_BASE, addr, value) - -#define CPU_OPT_WIDTH 0x1F - -//2 REG_NOT_VALID - -//2 REG_SYS_PWR_CTRL - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID -#define BIT_SYS_PWR_SOC_EN BIT(2) -#define BIT_SYS_PWR_RET_MEM_EN BIT(1) -#define BIT_SYS_PWR_PEON_EN BIT(0) - -//2 REG_SYS_ISO_CTRL - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID -#define BIT_SYS_ISO_SYSPLL BIT(7) - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID -#define BIT_SYS_ISO_SOC BIT(2) -#define BIT_SYS_ISO_RET_MEM BIT(1) -#define BIT_SYS_ISO_PEON BIT(0) - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_SYS_FUNC_EN -#define BIT_SYS_AMACRO_EN BIT(31) -#define BIT_SYS_PWRON_TRAP_SHTDN_N BIT(30) -#define BIT_SYS_FEN_SIC_MST BIT(25) -#define BIT_SYS_FEN_SIC BIT(24) - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID -#define BIT_SOC_SYSPEON_EN BIT(4) - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID -#define BIT_SYS_FEN_EELDR BIT(0) - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_SYS_CLK_CTRL0 - -//2 REG_NOT_VALID -#define BIT_SOC_OCP_IOBUS_CK_EN BIT(2) -#define BIT_SYSON_CK_EELDR_EN BIT(1) -#define BIT_SYSON_CK_SYSREG_EN BIT(0) - -//2 REG_SYS_CLK_CTRL1 - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -#define BIT_SHIFT_PESOC_OCP_CPU_CK_SEL 4 -#define BIT_MASK_PESOC_OCP_CPU_CK_SEL 0x7 -#define BIT_PESOC_OCP_CPU_CK_SEL(x) (((x) & BIT_MASK_PESOC_OCP_CPU_CK_SEL) << BIT_SHIFT_PESOC_OCP_CPU_CK_SEL) - - -//2 REG_NOT_VALID -#define BIT_PESOC_EELDR_CK_SEL BIT(0) - -//2 REG_SYS_SWR_CTRL3 - -//2 REG_RSV_CTRL - -//2 REG_RF_CTRL - -//2 REG_SYS_EFUSE_SYSCFG0 - -#define BIT_SHIFT_SYS_EEROM_SWR_PAR_05_00 24 -#define BIT_MASK_SYS_EEROM_SWR_PAR_05_00 0x3f -#define BIT_SYS_EEROM_SWR_PAR_05_00(x) (((x) & BIT_MASK_SYS_EEROM_SWR_PAR_05_00) << BIT_SHIFT_SYS_EEROM_SWR_PAR_05_00) - - -#define BIT_SHIFT_SYS_EEROM_LDO_PAR_07_04 20 -#define BIT_MASK_SYS_EEROM_LDO_PAR_07_04 0xf -#define BIT_SYS_EEROM_LDO_PAR_07_04(x) (((x) & BIT_MASK_SYS_EEROM_LDO_PAR_07_04) << BIT_SHIFT_SYS_EEROM_LDO_PAR_07_04) - -#define BIT_SYS_CHIPPDN_EN BIT(17) -#define BIT_SYS_EEROM_B12V_EN BIT(16) - -#define BIT_SHIFT_SYS_EEROM_VID1 8 -#define BIT_MASK_SYS_EEROM_VID1 0xff -#define BIT_SYS_EEROM_VID1(x) (((x) & BIT_MASK_SYS_EEROM_VID1) << BIT_SHIFT_SYS_EEROM_VID1) - - -#define BIT_SHIFT_SYS_EEROM_VID0 0 -#define BIT_MASK_SYS_EEROM_VID0 0xff -#define BIT_SYS_EEROM_VID0(x) (((x) & BIT_MASK_SYS_EEROM_VID0) << BIT_SHIFT_SYS_EEROM_VID0) - - -//2 REG_SYS_EFUSE_SYSCFG1 - -#define BIT_SHIFT_SYS_PDSPL_STL 24 -#define BIT_MASK_SYS_PDSPL_STL 0x3 -#define BIT_SYS_PDSPL_STL(x) (((x) & BIT_MASK_SYS_PDSPL_STL) << BIT_SHIFT_SYS_PDSPL_STL) - - -#define BIT_SHIFT_SYS_PDSOC_STL 22 -#define BIT_MASK_SYS_PDSOC_STL 0x3 -#define BIT_SYS_PDSOC_STL(x) (((x) & BIT_MASK_SYS_PDSOC_STL) << BIT_SHIFT_SYS_PDSOC_STL) - - -#define BIT_SHIFT_SYS_PDPON_STL 20 -#define BIT_MASK_SYS_PDPON_STL 0x3 -#define BIT_SYS_PDPON_STL(x) (((x) & BIT_MASK_SYS_PDPON_STL) << BIT_SHIFT_SYS_PDPON_STL) - - -#define BIT_SHIFT_SYS_SWREG_XRT 18 -#define BIT_MASK_SYS_SWREG_XRT 0x3 -#define BIT_SYS_SWREG_XRT(x) (((x) & BIT_MASK_SYS_SWREG_XRT) << BIT_SHIFT_SYS_SWREG_XRT) - - -#define BIT_SHIFT_SYS_SWSLC_STL 16 -#define BIT_MASK_SYS_SWSLC_STL 0x3 -#define BIT_SYS_SWSLC_STL(x) (((x) & BIT_MASK_SYS_SWSLC_STL) << BIT_SHIFT_SYS_SWSLC_STL) - - -#define BIT_SHIFT_SYS_EEROM_SWR_PAR_46_45 14 -#define BIT_MASK_SYS_EEROM_SWR_PAR_46_45 0x3 -#define BIT_SYS_EEROM_SWR_PAR_46_45(x) (((x) & BIT_MASK_SYS_EEROM_SWR_PAR_46_45) << BIT_SHIFT_SYS_EEROM_SWR_PAR_46_45) - - -#define BIT_SHIFT_SYS_EEROM_SWR_PAR_40_39 12 -#define BIT_MASK_SYS_EEROM_SWR_PAR_40_39 0x3 -#define BIT_SYS_EEROM_SWR_PAR_40_39(x) (((x) & BIT_MASK_SYS_EEROM_SWR_PAR_40_39) << BIT_SHIFT_SYS_EEROM_SWR_PAR_40_39) - - -#define BIT_SHIFT_SYS_EEROM_SWR_PAR_33_26 4 -#define BIT_MASK_SYS_EEROM_SWR_PAR_33_26 0xff -#define BIT_SYS_EEROM_SWR_PAR_33_26(x) (((x) & BIT_MASK_SYS_EEROM_SWR_PAR_33_26) << BIT_SHIFT_SYS_EEROM_SWR_PAR_33_26) - - -#define BIT_SHIFT_SYS_EEROM_SWSLD_VOL 0 -#define BIT_MASK_SYS_EEROM_SWSLD_VOL 0x7 -#define BIT_SYS_EEROM_SWSLD_VOL(x) (((x) & BIT_MASK_SYS_EEROM_SWSLD_VOL) << BIT_SHIFT_SYS_EEROM_SWSLD_VOL) - - -//2 REG_SYS_EFUSE_SYSCFG2 - -#define BIT_SHIFT_SYS_EERROM_ANAPAR_SPLL_24_15 21 -#define BIT_MASK_SYS_EERROM_ANAPAR_SPLL_24_15 0x3ff -#define BIT_SYS_EERROM_ANAPAR_SPLL_24_15(x) (((x) & BIT_MASK_SYS_EERROM_ANAPAR_SPLL_24_15) << BIT_SHIFT_SYS_EERROM_ANAPAR_SPLL_24_15) - - -#define BIT_SHIFT_SYS_EEROM_ANAPAR_SPLL_05_02 16 -#define BIT_MASK_SYS_EEROM_ANAPAR_SPLL_05_02 0xf -#define BIT_SYS_EEROM_ANAPAR_SPLL_05_02(x) (((x) & BIT_MASK_SYS_EEROM_ANAPAR_SPLL_05_02) << BIT_SHIFT_SYS_EEROM_ANAPAR_SPLL_05_02) - - -#define BIT_SHIFT_SYS_EEROM_XTAL_STEL_SEL 12 -#define BIT_MASK_SYS_EEROM_XTAL_STEL_SEL 0x3 -#define BIT_SYS_EEROM_XTAL_STEL_SEL(x) (((x) & BIT_MASK_SYS_EEROM_XTAL_STEL_SEL) << BIT_SHIFT_SYS_EEROM_XTAL_STEL_SEL) - - -#define BIT_SHIFT_SYS_EEROM_XTAL_FREQ_SEL 8 -#define BIT_MASK_SYS_EEROM_XTAL_FREQ_SEL 0xf -#define BIT_SYS_EEROM_XTAL_FREQ_SEL(x) (((x) & BIT_MASK_SYS_EEROM_XTAL_FREQ_SEL) << BIT_SHIFT_SYS_EEROM_XTAL_FREQ_SEL) - - -//2 REG_SYS_EFUSE_SYSCFG3 - -#define BIT_SHIFT_SYS_DBG_PINGP_EN 28 -#define BIT_MASK_SYS_DBG_PINGP_EN 0xf -#define BIT_SYS_DBG_PINGP_EN(x) (((x) & BIT_MASK_SYS_DBG_PINGP_EN) << BIT_SHIFT_SYS_DBG_PINGP_EN) - - -#define BIT_SHIFT_SYS_DBG_SEL 16 -#define BIT_MASK_SYS_DBG_SEL 0xfff -#define BIT_SYS_DBG_SEL(x) (((x) & BIT_MASK_SYS_DBG_SEL) << BIT_SHIFT_SYS_DBG_SEL) - - -#define BIT_SHIFT_SYS_DBGBY3_LOC_SEL 14 -#define BIT_MASK_SYS_DBGBY3_LOC_SEL 0x3 -#define BIT_SYS_DBGBY3_LOC_SEL(x) (((x) & BIT_MASK_SYS_DBGBY3_LOC_SEL) << BIT_SHIFT_SYS_DBGBY3_LOC_SEL) - - -#define BIT_SHIFT_SYS_DBGBY2_LOC_SEL 12 -#define BIT_MASK_SYS_DBGBY2_LOC_SEL 0x3 -#define BIT_SYS_DBGBY2_LOC_SEL(x) (((x) & BIT_MASK_SYS_DBGBY2_LOC_SEL) << BIT_SHIFT_SYS_DBGBY2_LOC_SEL) - - -#define BIT_SHIFT_SYS_DBGBY1_LOC_SEL 10 -#define BIT_MASK_SYS_DBGBY1_LOC_SEL 0x3 -#define BIT_SYS_DBGBY1_LOC_SEL(x) (((x) & BIT_MASK_SYS_DBGBY1_LOC_SEL) << BIT_SHIFT_SYS_DBGBY1_LOC_SEL) - - -#define BIT_SHIFT_SYS_DBGBY0_LOC_SEL 8 -#define BIT_MASK_SYS_DBGBY0_LOC_SEL 0x3 -#define BIT_SYS_DBGBY0_LOC_SEL(x) (((x) & BIT_MASK_SYS_DBGBY0_LOC_SEL) << BIT_SHIFT_SYS_DBGBY0_LOC_SEL) - -#define BIT_SYS_EEROM_ANAPAR_SPLL_49 BIT(3) - -#define BIT_SHIFT_SYS_EEROM_ANAPAR_SPLL_27_25 0 -#define BIT_MASK_SYS_EEROM_ANAPAR_SPLL_27_25 0x7 -#define BIT_SYS_EEROM_ANAPAR_SPLL_27_25(x) (((x) & BIT_MASK_SYS_EEROM_ANAPAR_SPLL_27_25) << BIT_SHIFT_SYS_EEROM_ANAPAR_SPLL_27_25) - - -//2 REG_SYS_EFUSE_SYSCFG4 - -#define BIT_SHIFT_SYS_GPIOA_E2 1 -#define BIT_MASK_SYS_GPIOA_E2 0x7 -#define BIT_SYS_GPIOA_E2(x) (((x) & BIT_MASK_SYS_GPIOA_E2) << BIT_SHIFT_SYS_GPIOA_E2) - -#define BIT_SYS_GPIOA_H3L1 BIT(0) - -//2 REG_SYS_EFUSE_SYSCFG5 - -//2 REG_NOT_VALID - -//2 REG_SYS_EFUSE_SYSCFG6 - -#define BIT_SHIFT_SYS_SPIC_INIT_BAUD_RATE_SEL 26 -#define BIT_MASK_SYS_SPIC_INIT_BAUD_RATE_SEL 0x3 -#define BIT_SYS_SPIC_INIT_BAUD_RATE_SEL(x) (((x) & BIT_MASK_SYS_SPIC_INIT_BAUD_RATE_SEL) << BIT_SHIFT_SYS_SPIC_INIT_BAUD_RATE_SEL) - - -#define BIT_SHIFT_SYS_CPU_CLK_SEL 24 -#define BIT_MASK_SYS_CPU_CLK_SEL 0x3 -#define BIT_SYS_CPU_CLK_SEL(x) (((x) & BIT_MASK_SYS_CPU_CLK_SEL) << BIT_SHIFT_SYS_CPU_CLK_SEL) - - -//2 REG_SYS_EFUSE_SYSCFG7 -#define BIT_SYS_MEM_RMV_SIGN BIT(31) -#define BIT_SYS_MEM_RMV_1PRF1 BIT(29) -#define BIT_SYS_MEM_RMV_1PRF0 BIT(28) -#define BIT_SYS_MEM_RMV_1PSR BIT(27) -#define BIT_SYS_MEM_RMV_1PHSR BIT(26) -#define BIT_SYS_MEM_RMV_ROM BIT(25) - -#define BIT_SHIFT_SYS_MEM_RME_CPU 22 -#define BIT_MASK_SYS_MEM_RME_CPU 0x7 -#define BIT_SYS_MEM_RME_CPU(x) (((x) & BIT_MASK_SYS_MEM_RME_CPU) << BIT_SHIFT_SYS_MEM_RME_CPU) - - -#define BIT_SHIFT_SYS_MEM_RME_WLAN 19 -#define BIT_MASK_SYS_MEM_RME_WLAN 0x7 -#define BIT_SYS_MEM_RME_WLAN(x) (((x) & BIT_MASK_SYS_MEM_RME_WLAN) << BIT_SHIFT_SYS_MEM_RME_WLAN) - -#define BIT_SYS_MEM_RME_USB BIT(18) -#define BIT_SYS_MEM_RME_SDIO BIT(17) - -//2 REG_SYS_REGU_CTRL0 - -#define BIT_SHIFT_SYS_REGU_LDO25M_ADJ 20 -#define BIT_MASK_SYS_REGU_LDO25M_ADJ 0xf -#define BIT_SYS_REGU_LDO25M_ADJ(x) (((x) & BIT_MASK_SYS_REGU_LDO25M_ADJ) << BIT_SHIFT_SYS_REGU_LDO25M_ADJ) - -#define BIT_SYS_REGU_ANACK_4M_EN BIT(19) -#define BIT_SYS_REGU_ANACK_4M_SEL BIT(18) -#define BIT_SYS_REGU_PC_EF_EN BIT(17) -#define BIT_SYS_REGU_LDOH12_SLP_EN BIT(16) - -#define BIT_SHIFT_SYS_REGU_LDOH12_ADJ 12 -#define BIT_MASK_SYS_REGU_LDOH12_ADJ 0xf -#define BIT_SYS_REGU_LDOH12_ADJ(x) (((x) & BIT_MASK_SYS_REGU_LDOH12_ADJ) << BIT_SHIFT_SYS_REGU_LDOH12_ADJ) - - -#define BIT_SHIFT_SYS_REGU_LDO25E_ADJ 8 -#define BIT_MASK_SYS_REGU_LDO25E_ADJ 0xf -#define BIT_SYS_REGU_LDO25E_ADJ(x) (((x) & BIT_MASK_SYS_REGU_LDO25E_ADJ) << BIT_SHIFT_SYS_REGU_LDO25E_ADJ) - -#define BIT_SYS_REGU_DSLEPM_EN BIT(7) -#define BIT_SYS_REGU_PC_33V_EN BIT(3) -#define BIT_SYS_REGU_PC_EF25_EN BIT(2) -#define BIT_SYS_REGU_LDO25M_EN BIT(1) -#define BIT_SYS_REGU_LDO25E_EN BIT(0) - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_SYS_SWR_CTRL0 - -#define BIT_SHIFT_SYS_SWR12_COMP_R2 30 -#define BIT_MASK_SYS_SWR12_COMP_R2 0x3 -#define BIT_SYS_SWR12_COMP_R2(x) (((x) & BIT_MASK_SYS_SWR12_COMP_R2) << BIT_SHIFT_SYS_SWR12_COMP_R2) - - -#define BIT_SHIFT_SYS_SWR12_COMP_R1 28 -#define BIT_MASK_SYS_SWR12_COMP_R1 0x3 -#define BIT_SYS_SWR12_COMP_R1(x) (((x) & BIT_MASK_SYS_SWR12_COMP_R1) << BIT_SHIFT_SYS_SWR12_COMP_R1) - - -#define BIT_SHIFT_SYS_SWR12_COMP_C3 26 -#define BIT_MASK_SYS_SWR12_COMP_C3 0x3 -#define BIT_SYS_SWR12_COMP_C3(x) (((x) & BIT_MASK_SYS_SWR12_COMP_C3) << BIT_SHIFT_SYS_SWR12_COMP_C3) - - -#define BIT_SHIFT_SYS_SWR12_COMP_C2 24 -#define BIT_MASK_SYS_SWR12_COMP_C2 0x3 -#define BIT_SYS_SWR12_COMP_C2(x) (((x) & BIT_MASK_SYS_SWR12_COMP_C2) << BIT_SHIFT_SYS_SWR12_COMP_C2) - - -#define BIT_SHIFT_SYS_SWR12_COMP_C1 22 -#define BIT_MASK_SYS_SWR12_COMP_C1 0x3 -#define BIT_SYS_SWR12_COMP_C1(x) (((x) & BIT_MASK_SYS_SWR12_COMP_C1) << BIT_SHIFT_SYS_SWR12_COMP_C1) - -#define BIT_SYS_SWR12_COMP_TYPE_L BIT(21) -#define BIT_SYS_SWR12_FPWM_MD BIT(20) - -#define BIT_SHIFT_SYS_SPSLDO_VOL 17 -#define BIT_MASK_SYS_SPSLDO_VOL 0x7 -#define BIT_SYS_SPSLDO_VOL(x) (((x) & BIT_MASK_SYS_SPSLDO_VOL) << BIT_SHIFT_SYS_SPSLDO_VOL) - - -#define BIT_SHIFT_SYS_SWR12_IN 14 -#define BIT_MASK_SYS_SWR12_IN 0x7 -#define BIT_SYS_SWR12_IN(x) (((x) & BIT_MASK_SYS_SWR12_IN) << BIT_SHIFT_SYS_SWR12_IN) - - -#define BIT_SHIFT_SYS_SWR12_STD 12 -#define BIT_MASK_SYS_SWR12_STD 0x3 -#define BIT_SYS_SWR12_STD(x) (((x) & BIT_MASK_SYS_SWR12_STD) << BIT_SHIFT_SYS_SWR12_STD) - - -#define BIT_SHIFT_SYS_SWR12_VOL 8 -#define BIT_MASK_SYS_SWR12_VOL 0xf -#define BIT_SYS_SWR12_VOL(x) (((x) & BIT_MASK_SYS_SWR12_VOL) << BIT_SHIFT_SYS_SWR12_VOL) - - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID -#define BIT_SYS_SWR_EN BIT(1) -#define BIT_SYS_SWR_LDO_EN BIT(0) - -//2 REG_SYS_SWR_CTRL1 -#define BIT_SYS_SW12_PFM_SEL BIT(25) -#define BIT_SYS_SW12_AUTO_ZCD_L BIT(24) -#define BIT_SYS_SW12_AUTO_MODE BIT(23) -#define BIT_SYS_SW12_LDOF_L BIT(22) -#define BIT_SYS_SW12_OCPS_L BIT(21) - -#define BIT_SHIFT_SYS_SW12_TBOX 17 -#define BIT_MASK_SYS_SW12_TBOX 0x3 -#define BIT_SYS_SW12_TBOX(x) (((x) & BIT_MASK_SYS_SW12_TBOX) << BIT_SHIFT_SYS_SW12_TBOX) - - -#define BIT_SHIFT_SYS_SW12_NONOVRLAP_DLY 15 -#define BIT_MASK_SYS_SW12_NONOVRLAP_DLY 0x3 -#define BIT_SYS_SW12_NONOVRLAP_DLY(x) (((x) & BIT_MASK_SYS_SW12_NONOVRLAP_DLY) << BIT_SHIFT_SYS_SW12_NONOVRLAP_DLY) - -#define BIT_SYS_SW12_CLAMP_DUTY BIT(14) -#define BIT_SYS_SWR12_BYPASS_SSR BIT(13) -#define BIT_SYS_SWR12_ZCDOUT_EN BIT(12) -#define BIT_SYS_SWR12_POW_ZCD BIT(11) -#define BIT_SYS_SW12_AREN BIT(10) - -#define BIT_SHIFT_SYS_SWR12_OCP_CUR 7 -#define BIT_MASK_SYS_SWR12_OCP_CUR 0x7 -#define BIT_SYS_SWR12_OCP_CUR(x) (((x) & BIT_MASK_SYS_SWR12_OCP_CUR) << BIT_SHIFT_SYS_SWR12_OCP_CUR) - -#define BIT_SYS_SWR12_OCP_EN BIT(6) - -#define BIT_SHIFT_SYS_SWR12_SAWTOOTH_CF_L 4 -#define BIT_MASK_SYS_SWR12_SAWTOOTH_CF_L 0x3 -#define BIT_SYS_SWR12_SAWTOOTH_CF_L(x) (((x) & BIT_MASK_SYS_SWR12_SAWTOOTH_CF_L) << BIT_SHIFT_SYS_SWR12_SAWTOOTH_CF_L) - - -#define BIT_SHIFT_SYS_SWR12_SAWTOOTH_CFC_L 2 -#define BIT_MASK_SYS_SWR12_SAWTOOTH_CFC_L 0x3 -#define BIT_SYS_SWR12_SAWTOOTH_CFC_L(x) (((x) & BIT_MASK_SYS_SWR12_SAWTOOTH_CFC_L) << BIT_SHIFT_SYS_SWR12_SAWTOOTH_CFC_L) - - -#define BIT_SHIFT_SYS_SWR12_COMP_R3 0 -#define BIT_MASK_SYS_SWR12_COMP_R3 0x3 -#define BIT_SYS_SWR12_COMP_R3(x) (((x) & BIT_MASK_SYS_SWR12_COMP_R3) << BIT_SHIFT_SYS_SWR12_COMP_R3) - - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_SYS_XTAL_CTRL0 -#define BIT_SYS_XTAL_XQSEL BIT(31) -#define BIT_SYS_XTAL_XQSEL_RF BIT(30) - -#define BIT_SHIFT_SYS_XTAL_SC_XO 24 -#define BIT_MASK_SYS_XTAL_SC_XO 0x3f -#define BIT_SYS_XTAL_SC_XO(x) (((x) & BIT_MASK_SYS_XTAL_SC_XO) << BIT_SHIFT_SYS_XTAL_SC_XO) - - -#define BIT_SHIFT_SYS_XTAL_SC_XI 18 -#define BIT_MASK_SYS_XTAL_SC_XI 0x3f -#define BIT_SYS_XTAL_SC_XI(x) (((x) & BIT_MASK_SYS_XTAL_SC_XI) << BIT_SHIFT_SYS_XTAL_SC_XI) - - -#define BIT_SHIFT_SYS_XTAL_GMN 13 -#define BIT_MASK_SYS_XTAL_GMN 0x1f -#define BIT_SYS_XTAL_GMN(x) (((x) & BIT_MASK_SYS_XTAL_GMN) << BIT_SHIFT_SYS_XTAL_GMN) - - -#define BIT_SHIFT_SYS_XTAL_GMP 8 -#define BIT_MASK_SYS_XTAL_GMP 0x1f -#define BIT_SYS_XTAL_GMP(x) (((x) & BIT_MASK_SYS_XTAL_GMP) << BIT_SHIFT_SYS_XTAL_GMP) - -#define BIT_SYS_XTAL_EN BIT(1) -#define BIT_SYS_XTAL_BGMB_EN BIT(0) - -//2 REG_SYS_XTAL_CTRL1 - -#define BIT_SHIFT_SYS_XTAL_COUNTER_MUX 25 -#define BIT_MASK_SYS_XTAL_COUNTER_MUX 0x3 -#define BIT_SYS_XTAL_COUNTER_MUX(x) (((x) & BIT_MASK_SYS_XTAL_COUNTER_MUX) << BIT_SHIFT_SYS_XTAL_COUNTER_MUX) - -#define BIT_SYS_XTAL_DELAY_SYSPLL BIT(24) -#define BIT_SYS_XTAL_DELAY_USB BIT(23) -#define BIT_SYS_XTAL_DELAY_WLAFE BIT(22) -#define BIT_SYS_XTAL_AGPIO_SEL BIT(21) - -#define BIT_SHIFT_SYS_XTAL_DRV_AGPIO 19 -#define BIT_MASK_SYS_XTAL_DRV_AGPIO 0x3 -#define BIT_SYS_XTAL_DRV_AGPIO(x) (((x) & BIT_MASK_SYS_XTAL_DRV_AGPIO) << BIT_SHIFT_SYS_XTAL_DRV_AGPIO) - - -#define BIT_SHIFT_SYS_XTAL_AGPIO 16 -#define BIT_MASK_SYS_XTAL_AGPIO 0x7 -#define BIT_SYS_XTAL_AGPIO(x) (((x) & BIT_MASK_SYS_XTAL_AGPIO) << BIT_SHIFT_SYS_XTAL_AGPIO) - - -#define BIT_SHIFT_SYS_XTAL_DRV_SYSPLL 14 -#define BIT_MASK_SYS_XTAL_DRV_SYSPLL 0x3 -#define BIT_SYS_XTAL_DRV_SYSPLL(x) (((x) & BIT_MASK_SYS_XTAL_DRV_SYSPLL) << BIT_SHIFT_SYS_XTAL_DRV_SYSPLL) - -#define BIT_SYS_XTAL_GATE_SYSPLL BIT(13) - -#define BIT_SHIFT_SYS_XTAL_DRV_USB 11 -#define BIT_MASK_SYS_XTAL_DRV_USB 0x3 -#define BIT_SYS_XTAL_DRV_USB(x) (((x) & BIT_MASK_SYS_XTAL_DRV_USB) << BIT_SHIFT_SYS_XTAL_DRV_USB) - -#define BIT_SYS_XTAL_GATE_USB BIT(10) - -#define BIT_SHIFT_SYS_XTAL_DRV_WLAFE 8 -#define BIT_MASK_SYS_XTAL_DRV_WLAFE 0x3 -#define BIT_SYS_XTAL_DRV_WLAFE(x) (((x) & BIT_MASK_SYS_XTAL_DRV_WLAFE) << BIT_SHIFT_SYS_XTAL_DRV_WLAFE) - -#define BIT_SYS_XTAL_GATE_WLAFE BIT(7) - -#define BIT_SHIFT_SYS_XTAL_DRV_RF2 5 -#define BIT_MASK_SYS_XTAL_DRV_RF2 0x3 -#define BIT_SYS_XTAL_DRV_RF2(x) (((x) & BIT_MASK_SYS_XTAL_DRV_RF2) << BIT_SHIFT_SYS_XTAL_DRV_RF2) - -#define BIT_SYS_XTAL_GATE_RF2 BIT(4) - -#define BIT_SHIFT_SYS_XTAL_DRV_RF1 3 -#define BIT_MASK_SYS_XTAL_DRV_RF1 0x3 -#define BIT_SYS_XTAL_DRV_RF1(x) (((x) & BIT_MASK_SYS_XTAL_DRV_RF1) << BIT_SHIFT_SYS_XTAL_DRV_RF1) - -#define BIT_SYS_XTAL_GATE_RF1 BIT(1) - -#define BIT_SHIFT_SYS_XTAL_LDO 0 -#define BIT_MASK_SYS_XTAL_LDO 0x3 -#define BIT_SYS_XTAL_LDO(x) (((x) & BIT_MASK_SYS_XTAL_LDO) << BIT_SHIFT_SYS_XTAL_LDO) - - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_SYS_SYSPLL_CTRL0 - -#define BIT_SHIFT_SYS_SYSPLL_LPF_R3 29 -#define BIT_MASK_SYS_SYSPLL_LPF_R3 0x7 -#define BIT_SYS_SYSPLL_LPF_R3(x) (((x) & BIT_MASK_SYS_SYSPLL_LPF_R3) << BIT_SHIFT_SYS_SYSPLL_LPF_R3) - - -#define BIT_SHIFT_SYS_SYSPLL_LPF_CS 27 -#define BIT_MASK_SYS_SYSPLL_LPF_CS 0x3 -#define BIT_SYS_SYSPLL_LPF_CS(x) (((x) & BIT_MASK_SYS_SYSPLL_LPF_CS) << BIT_SHIFT_SYS_SYSPLL_LPF_CS) - - -#define BIT_SHIFT_SYS_SYSPLL_LPF_CP 25 -#define BIT_MASK_SYS_SYSPLL_LPF_CP 0x3 -#define BIT_SYS_SYSPLL_LPF_CP(x) (((x) & BIT_MASK_SYS_SYSPLL_LPF_CP) << BIT_SHIFT_SYS_SYSPLL_LPF_CP) - - -#define BIT_SHIFT_SYS_SYSPLL_LPF_C3 23 -#define BIT_MASK_SYS_SYSPLL_LPF_C3 0x3 -#define BIT_SYS_SYSPLL_LPF_C3(x) (((x) & BIT_MASK_SYS_SYSPLL_LPF_C3) << BIT_SHIFT_SYS_SYSPLL_LPF_C3) - -#define BIT_SYS_SYSPLL_WDOG_ENB BIT(22) -#define BIT_SYS_SYSPLL_CKTST_EN BIT(21) - -#define BIT_SHIFT_SYS_SYSPLL_MONCK_SEL 18 -#define BIT_MASK_SYS_SYSPLL_MONCK_SEL 0x7 -#define BIT_SYS_SYSPLL_MONCK_SEL(x) (((x) & BIT_MASK_SYS_SYSPLL_MONCK_SEL) << BIT_SHIFT_SYS_SYSPLL_MONCK_SEL) - - -#define BIT_SHIFT_SYS_SYSPLL_CP_IOFFSET 13 -#define BIT_MASK_SYS_SYSPLL_CP_IOFFSET 0x1f -#define BIT_SYS_SYSPLL_CP_IOFFSET(x) (((x) & BIT_MASK_SYS_SYSPLL_CP_IOFFSET) << BIT_SHIFT_SYS_SYSPLL_CP_IOFFSET) - -#define BIT_SYS_SYSPLL_CP_IDOUBLE BIT(12) - -#define BIT_SHIFT_SYS_SYSPLL_CP_BIAS 9 -#define BIT_MASK_SYS_SYSPLL_CP_BIAS 0x7 -#define BIT_SYS_SYSPLL_CP_BIAS(x) (((x) & BIT_MASK_SYS_SYSPLL_CP_BIAS) << BIT_SHIFT_SYS_SYSPLL_CP_BIAS) - -#define BIT_SYS_SYSPLL_FREF_EDGE BIT(8) -#define BIT_SYS_SYSPLL_EN BIT(1) -#define BIT_SYS_SYSPLL_LVPC_EN BIT(0) - -//2 REG_SYS_SYSPLL_CTRL1 -#define BIT_SYS_SYSPLL_DIV5_3 BIT(17) -#define BIT_SYS_SYSPLL_CK500K_SEL BIT(15) -#define BIT_SYS_SYSPLL_CK200M_EN BIT(14) -#define BIT_SYS_SYSPLL_CKSDR_EN BIT(13) - -#define BIT_SHIFT_SYS_SYSPLL_CKSDR_DIV 11 -#define BIT_MASK_SYS_SYSPLL_CKSDR_DIV 0x3 -#define BIT_SYS_SYSPLL_CKSDR_DIV(x) (((x) & BIT_MASK_SYS_SYSPLL_CKSDR_DIV) << BIT_SHIFT_SYS_SYSPLL_CKSDR_DIV) - -#define BIT_SYS_SYSPLL_CK24P576_EN BIT(9) -#define BIT_SYS_SYSPLL_CK22P5792_EN BIT(8) -#define BIT_SYS_SYSPLL_CK_PS_EN BIT(6) - -#define BIT_SHIFT_SYS_SYSPLL_CK_PS_SEL 3 -#define BIT_MASK_SYS_SYSPLL_CK_PS_SEL 0x7 -#define BIT_SYS_SYSPLL_CK_PS_SEL(x) (((x) & BIT_MASK_SYS_SYSPLL_CK_PS_SEL) << BIT_SHIFT_SYS_SYSPLL_CK_PS_SEL) - - -#define BIT_SHIFT_SYS_SYSPLL_LPF_RS 0 -#define BIT_MASK_SYS_SYSPLL_LPF_RS 0x7 -#define BIT_SYS_SYSPLL_LPF_RS(x) (((x) & BIT_MASK_SYS_SYSPLL_LPF_RS) << BIT_SHIFT_SYS_SYSPLL_LPF_RS) - - -//2 REG_SYS_SYSPLL_CTRL2 - -#define BIT_SHIFT_XTAL_DRV_RF_LATCH 0 -#define BIT_MASK_XTAL_DRV_RF_LATCH 0xffffffffL -#define BIT_XTAL_DRV_RF_LATCH(x) (((x) & BIT_MASK_XTAL_DRV_RF_LATCH) << BIT_SHIFT_XTAL_DRV_RF_LATCH) - -// BIT25 - To release DAC delta sigma clock gating - -//2 REG_RSVD - -//2 REG_RSVD - -#define BIT_SHIFT_PESOC_CPU_OCP_CK_SEL 0 -#define BIT_MASK_PESOC_CPU_OCP_CK_SEL 0x7 -#define BIT_PESOC_CPU_OCP_CK_SEL(x) (((x) & BIT_MASK_PESOC_CPU_OCP_CK_SEL) << BIT_SHIFT_PESOC_CPU_OCP_CK_SEL) - - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_ - -//2 REG_SYS_ANA_TIM_CTRL - -#define BIT_SHIFT_SYS_ANACK_TU_TIME 16 -#define BIT_MASK_SYS_ANACK_TU_TIME 0x3f -#define BIT_SYS_ANACK_TU_TIME(x) (((x) & BIT_MASK_SYS_ANACK_TU_TIME) << BIT_SHIFT_SYS_ANACK_TU_TIME) - -#define BIT_SYS_DSBYCNT_EN BIT(15) - -#define BIT_SHIFT_SYS_DSTDY_TIM_SCAL 8 -#define BIT_MASK_SYS_DSTDY_TIM_SCAL 0xf -#define BIT_SYS_DSTDY_TIM_SCAL(x) (((x) & BIT_MASK_SYS_DSTDY_TIM_SCAL) << BIT_SHIFT_SYS_DSTDY_TIM_SCAL) - - -#define BIT_SHIFT_SYS_DSTBY_TIM_PERIOD 0 -#define BIT_MASK_SYS_DSTBY_TIM_PERIOD 0xff -#define BIT_SYS_DSTBY_TIM_PERIOD(x) (((x) & BIT_MASK_SYS_DSTBY_TIM_PERIOD) << BIT_SHIFT_SYS_DSTBY_TIM_PERIOD) - - -//2 REG_SYS_DSLP_TIM_CTRL - -#define BIT_SHIFT_SYS_REGU_ASIF_EN 24 -#define BIT_MASK_SYS_REGU_ASIF_EN 0xff -#define BIT_SYS_REGU_ASIF_EN(x) (((x) & BIT_MASK_SYS_REGU_ASIF_EN) << BIT_SHIFT_SYS_REGU_ASIF_EN) - - -#define BIT_SHIFT_SYS_REGU_ASIF_THP_DA 20 -#define BIT_MASK_SYS_REGU_ASIF_THP_DA 0x3 -#define BIT_SYS_REGU_ASIF_THP_DA(x) (((x) & BIT_MASK_SYS_REGU_ASIF_THP_DA) << BIT_SHIFT_SYS_REGU_ASIF_THP_DA) - - -#define BIT_SHIFT_SYS_REGU_ASIF_TPD_CK 18 -#define BIT_MASK_SYS_REGU_ASIF_TPD_CK 0x3 -#define BIT_SYS_REGU_ASIF_TPD_CK(x) (((x) & BIT_MASK_SYS_REGU_ASIF_TPD_CK) << BIT_SHIFT_SYS_REGU_ASIF_TPD_CK) - - -#define BIT_SHIFT_SYS_REGU_ASIF_TSP_DA 16 -#define BIT_MASK_SYS_REGU_ASIF_TSP_DA 0x3 -#define BIT_SYS_REGU_ASIF_TSP_DA(x) (((x) & BIT_MASK_SYS_REGU_ASIF_TSP_DA) << BIT_SHIFT_SYS_REGU_ASIF_TSP_DA) - -#define BIT_SYS_REGU_ASIF_POLL BIT(15) -#define BIT_SYS_REGU_ASIF_MODE BIT(14) -#define BIT_SYS_REGU_ASIF_WE BIT(12) - -#define BIT_SHIFT_SYS_REGU_ASIF_AD 8 -#define BIT_MASK_SYS_REGU_ASIF_AD 0xf -#define BIT_SYS_REGU_ASIF_AD(x) (((x) & BIT_MASK_SYS_REGU_ASIF_AD) << BIT_SHIFT_SYS_REGU_ASIF_AD) - - -#define BIT_SHIFT_SYS_REGU_ASIF_WD 0 -#define BIT_MASK_SYS_REGU_ASIF_WD 0xff -#define BIT_SYS_REGU_ASIF_WD(x) (((x) & BIT_MASK_SYS_REGU_ASIF_WD) << BIT_SHIFT_SYS_REGU_ASIF_WD) - - -//2 REG_SYS_DSLP_TIM_CAL_CTRL -#define BIT_SYS_DSLP_TIM_EN BIT(24) - -#define BIT_SHIFT_SYS_DSLP_TIM_PERIOD 0 -#define BIT_MASK_SYS_DSLP_TIM_PERIOD 0x7fffff -#define BIT_SYS_DSLP_TIM_PERIOD(x) (((x) & BIT_MASK_SYS_DSLP_TIM_PERIOD) << BIT_SHIFT_SYS_DSLP_TIM_PERIOD) - - -//2 REG_RSVD - -//2 REG_SYS_DEBUG_CTRL -#define BIT_SYS_DBG_PIN_EN BIT(0) - -//2 REG_SYS_PINMUX_CTRL -#define BIT_EEPROM_PIN_EN BIT(4) -#define BIT_SIC_PIN_EN BIT(0) - -//2 REG_SYS_GPIO_DSTBY_WAKE_CTRL0 -#define BIT_SYS_GPIOE3_WEVENT_STS BIT(27) -#define BIT_SYS_GPIOD5_WEVENT_STS BIT(26) -#define BIT_SYS_GPIOC7_WEVENT_STS BIT(25) -#define BIT_SYS_GPIOA5_WEVENT_STS BIT(24) -#define BIT_SYS_GPIO_GPE3_PULL_CTRL_EN BIT(19) -#define BIT_SYS_GPIO_GPD5_PULL_CTRL_EN BIT(18) -#define BIT_SYS_GPIO_GPC7_PULL_CTRL_EN BIT(17) -#define BIT_SYS_GPIO_GPA5_PULL_CTRL_EN BIT(16) -#define BIT_SYS_GPIOE3_WINT_MODE BIT(11) -#define BIT_SYS_GPIOD5_WINT_MODE BIT(10) -#define BIT_SYS_GPIOC7_WINT_MODE BIT(9) -#define BIT_SYS_GPIOA5_WINT_MODE BIT(8) -#define BIT_SYS_GPIOE3_PIN_EN BIT(3) -#define BIT_SYS_GPIOD5_PIN_EN BIT(2) -#define BIT_SYS_GPIOC7_PIN_EN BIT(1) -#define BIT_SYS_GPIOA5_PIN_EN BIT(0) - -//2 REG_SYS_GPIO_DSTBY_WAKE_CTRL1 -#define BIT_SYS_GPIOE3_SHTDN_N BIT(19) -#define BIT_SYS_GPIOD5_SHTDN_N BIT(18) -#define BIT_SYS_GPIOC7_SHTDN_N BIT(17) -#define BIT_SYS_GPIOA5_SHTDN_N BIT(16) - -#define BIT_SHIFT_SYS_WINT_DEBOUNCE_TIM_SCAL 8 -#define BIT_MASK_SYS_WINT_DEBOUNCE_TIM_SCAL 0x3 -#define BIT_SYS_WINT_DEBOUNCE_TIM_SCAL(x) (((x) & BIT_MASK_SYS_WINT_DEBOUNCE_TIM_SCAL) << BIT_SHIFT_SYS_WINT_DEBOUNCE_TIM_SCAL) - -#define BIT_SYS_GPIOE3_WINT_DEBOUNCE_EN BIT(3) -#define BIT_SYS_GPIOD5_WINT_DEBOUNCE_EN BIT(2) -#define BIT_SYS_GPIOC7_WINT_DEBOUNCE_EN BIT(1) -#define BIT_SYS_GPIOA5_WINT_DEBOUNCE_EN BIT(0) - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_RSVD - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_SYS_DEBUG_REG - -#define BIT_SHIFT_SYS_DBG_VALUE 0 -#define BIT_MASK_SYS_DBG_VALUE 0xffffffffL -#define BIT_SYS_DBG_VALUE(x) (((x) & BIT_MASK_SYS_DBG_VALUE) << BIT_SHIFT_SYS_DBG_VALUE) - - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_SYS_EEPROM_CTRL0 - -#define BIT_SHIFT_EFUSE_UNLOCK 24 -#define BIT_MASK_EFUSE_UNLOCK 0xff -#define BIT_EFUSE_UNLOCK(x) (((x) & BIT_MASK_EFUSE_UNLOCK) << BIT_SHIFT_EFUSE_UNLOCK) - - -//2 REG_NOT_VALID -#define BIT_SYS_EFUSE_LDALL BIT(16) - -#define BIT_SHIFT_SYS_EEPROM_VPDIDX 8 -#define BIT_MASK_SYS_EEPROM_VPDIDX 0xff -#define BIT_SYS_EEPROM_VPDIDX(x) (((x) & BIT_MASK_SYS_EEPROM_VPDIDX) << BIT_SHIFT_SYS_EEPROM_VPDIDX) - - -#define BIT_SHIFT_SYS_EEPROM_MD 6 -#define BIT_MASK_SYS_EEPROM_MD 0x3 -#define BIT_SYS_EEPROM_MD(x) (((x) & BIT_MASK_SYS_EEPROM_MD) << BIT_SHIFT_SYS_EEPROM_MD) - -#define BIT_SYS_AUTOLOAD_SUS BIT(5) -#define BIT_SYS_EEPROM_SEL BIT(4) -#define BIT_SYS_EEPROM_EECS BIT(3) -#define BIT_SYS_EEPROM_EESK BIT(2) -#define BIT_SYS_EEPROM_EEDI BIT(1) -#define BIT_SYS_EEPROM_EEDO BIT(0) - -//2 REG_SYS_EEPROM_CTRL1 - -#define BIT_SHIFT_SYS_EEPROM_VPD 0 -#define BIT_MASK_SYS_EEPROM_VPD 0xffffffffL -#define BIT_SYS_EEPROM_VPD(x) (((x) & BIT_MASK_SYS_EEPROM_VPD) << BIT_SHIFT_SYS_EEPROM_VPD) - - -//2 REG_SYS_EFUSE_CTRL -#define BIT_SYS_EF_RWFLAG BIT(31) - -#define BIT_SHIFT_SYS_EF_PGPD 28 -#define BIT_MASK_SYS_EF_PGPD 0x7 -#define BIT_SYS_EF_PGPD(x) (((x) & BIT_MASK_SYS_EF_PGPD) << BIT_SHIFT_SYS_EF_PGPD) - - -#define BIT_SHIFT_SYS_EF_RDT 24 -#define BIT_MASK_SYS_EF_RDT 0xf -#define BIT_SYS_EF_RDT(x) (((x) & BIT_MASK_SYS_EF_RDT) << BIT_SHIFT_SYS_EF_RDT) - - -#define BIT_SHIFT_SYS_EF_PGTS 20 -#define BIT_MASK_SYS_EF_PGTS 0xf -#define BIT_SYS_EF_PGTS(x) (((x) & BIT_MASK_SYS_EF_PGTS) << BIT_SHIFT_SYS_EF_PGTS) - -#define BIT_SYS_EF_PDWN BIT(19) -#define BIT_SYS_EF_ALDEN BIT(18) - -#define BIT_SHIFT_SYS_EF_ADDR 8 -#define BIT_MASK_SYS_EF_ADDR 0x3ff -#define BIT_SYS_EF_ADDR(x) (((x) & BIT_MASK_SYS_EF_ADDR) << BIT_SHIFT_SYS_EF_ADDR) - - -#define BIT_SHIFT_SYS_EF_DATA 0 -#define BIT_MASK_SYS_EF_DATA 0xff -#define BIT_SYS_EF_DATA(x) (((x) & BIT_MASK_SYS_EF_DATA) << BIT_SHIFT_SYS_EF_DATA) - - -//2 REG_SYS_EFUSE_TEST -#define BIT_SYS_EF_CRES_SEL BIT(26) - -#define BIT_SHIFT_SYS_EF_SCAN_START 16 -#define BIT_MASK_SYS_EF_SCAN_START 0x1ff -#define BIT_SYS_EF_SCAN_START(x) (((x) & BIT_MASK_SYS_EF_SCAN_START) << BIT_SHIFT_SYS_EF_SCAN_START) - - -#define BIT_SHIFT_SYS_EF_SCAN_END 12 -#define BIT_MASK_SYS_EF_SCAN_END 0xf -#define BIT_SYS_EF_SCAN_END(x) (((x) & BIT_MASK_SYS_EF_SCAN_END) << BIT_SHIFT_SYS_EF_SCAN_END) - -#define BIT_SYS_EF_FORCE_PGMEN BIT(11) - -#define BIT_SHIFT_SYS_EF_CELL_SEL 8 -#define BIT_MASK_SYS_EF_CELL_SEL 0x3 -#define BIT_SYS_EF_CELL_SEL(x) (((x) & BIT_MASK_SYS_EF_CELL_SEL) << BIT_SHIFT_SYS_EF_CELL_SEL) - -#define BIT_SYS_EF_TRPT BIT(7) - -#define BIT_SHIFT_SYS_EF_SCAN_TTHD 0 -#define BIT_MASK_SYS_EF_SCAN_TTHD 0x7f -#define BIT_SYS_EF_SCAN_TTHD(x) (((x) & BIT_MASK_SYS_EF_SCAN_TTHD) << BIT_SHIFT_SYS_EF_SCAN_TTHD) - - -//2 REG_SYS_DSTBY_INFO0 - -//2 REG_NOT_VALID - -//2 REG_SYS_DSTBY_INFO1 - -//2 REG_SYS_DSTBY_INFO2 - -//2 REG_NOT_VALID - -//2 REG_SYS_DSTBY_INFO3 - -//2 REG_SYS_SLP_WAKE_EVENT_MSK0 -#define BIT_SYSON_WEVT_GPIO_DSTBY_MSK BIT(29) -#define BIT_SYSON_WEVT_A33_MSK BIT(28) -#define BIT_SYSON_WEVT_ADC_MSK BIT(26) -#define BIT_SYSON_WEVT_I2C_MSK BIT(24) -#define BIT_SYSON_WEVT_SPI_MSK BIT(22) -#define BIT_SYSON_WEVT_UART_MSK BIT(20) -#define BIT_SYSON_WEVT_USB_MSK BIT(16) -#define BIT_SYSON_WEVT_SDIO_MSK BIT(14) -#define BIT_SYSON_WEVT_NFC_MSK BIT(9) -#define BIT_SYSON_WEVT_WLAN_MSK BIT(8) -#define BIT_SYSON_WEVT_GPIO_MSK BIT(4) -#define BIT_SYSON_WEVT_CHIP_EN_MSK BIT(3) -#define BIT_SYSON_WEVT_OVER_CURRENT_MSK BIT(2) -#define BIT_SYSON_WEVT_GTIM_MSK BIT(1) -#define BIT_SYSON_WEVT_SYSTIM_MSK BIT(0) - -//2 REG_SYS_SLP_WAKE_EVENT_MSK1 - -//2 REG_SYS_SLP_WAKE_EVENT_STATUS0 -#define BIT_SYSON_WEVT_GPIO_DSTBY_STS BIT(29) -#define BIT_SYSON_WEVT_A33_STS BIT(28) -#define BIT_SYSON_WEVT_ADC_STS BIT(26) -#define BIT_SYSON_WEVT_I2C_STS BIT(24) -#define BIT_SYSON_WEVT_SPI_STS BIT(22) -#define BIT_SYSON_WEVT_UART_STS BIT(20) -#define BIT_SYSON_WEVT_USB_STS BIT(16) -#define BIT_SYSON_WEVT_SDIO_STS BIT(14) -#define BIT_SYSON_WEVT_NFC_STS BIT(9) -#define BIT_SYSON_WEVT_WLAN_STS BIT(8) -#define BIT_SYSON_WEVT_GPIO_STS BIT(4) -#define BIT_SYSON_WEVT_CHIP_EN_STS BIT(3) -#define BIT_SYSON_WEVT_OVER_CURRENT_STS BIT(2) -#define BIT_SYSON_WEVT_GTIM_STS BIT(1) -#define BIT_SYSON_WEVT_SYSTIM_STS BIT(0) - -//2 REG_SYS_SLP_WAKE_EVENT_STATUS1 - -//2 REG_SYS_SNF_WAKE_EVENT_MSK0 - -#define BIT_SHIFT_SYS_WKPERI_IMR0 1 -#define BIT_MASK_SYS_WKPERI_IMR0 0x7fffffffL -#define BIT_SYS_WKPERI_IMR0(x) (((x) & BIT_MASK_SYS_WKPERI_IMR0) << BIT_SHIFT_SYS_WKPERI_IMR0) - -#define BIT_SYSON_SNFEVT_ADC_MSK BIT(0) - -//2 REG_SYS_SNF_WAKE_EVENT_STATUS - -#define BIT_SHIFT_SYS_WKPERI_ISR0 1 -#define BIT_MASK_SYS_WKPERI_ISR0 0x7fffffffL -#define BIT_SYS_WKPERI_ISR0(x) (((x) & BIT_MASK_SYS_WKPERI_ISR0) << BIT_SHIFT_SYS_WKPERI_ISR0) - -#define BIT_SYSON_SNFEVT_ADC_STS BIT(0) - -//2 REG_SYS_PWRMGT_CTRL -#define BIT_SYSON_REGU_DSLP BIT(7) - -//2 REG_NOT_VALID -#define BIT_SYSON_PM_CMD_SLP BIT(2) -#define BIT_SYSON_PM_CMD_DSTBY BIT(1) -#define BIT_SYSON_PM_CMD_DSLP BIT(0) - -//2 REG_RSVD - -//2 REG_SYS_PWRMGT_OPTION -#define BIT_SYSON_PMOPT_NORM_SYSCLK_SEL BIT(30) -#define BIT_SYSON_PMOPT_NORM_SYSPLL_EN BIT(29) -#define BIT_SYSON_PMOPT_NORM_XTAL_EN BIT(28) -#define BIT_SYSON_PMOPT_NORM_EN_SOC BIT(27) -#define BIT_SYSON_PMOPT_NORM_EN_PWM BIT(26) -#define BIT_SYSON_PMOPT_NORM_EN_SWR BIT(25) -#define BIT_SYSON_PMOPT_NORM_LPLDO_SEL BIT(24) -#define BIT_SYSON_PMOPT_SNZ_SYSCLK_SEL BIT(22) -#define BIT_SYSON_PMOPT_SNZ_SYSPLL_EN BIT(21) -#define BIT_SYSON_PMOPT_SNZ_XTAL_EN BIT(20) -#define BIT_SYSON_PMOPT_SNZ_EN_SOC BIT(19) -#define BIT_SYSON_PMOPT_SNZ_EN_PWM BIT(18) -#define BIT_SYSON_PMOPT_SNZ_EN_SWR BIT(17) -#define BIT_SYSON_PMOPT_SNZ_LPLDO_SEL BIT(16) -#define BIT_SYSON_PMOPT_SLP_SYSCLK_SEL BIT(14) -#define BIT_SYSON_PMOPT_SLP_SYSPLL_EN BIT(13) -#define BIT_SYSON_PMOPT_SLP_XTAL_EN BIT(12) -#define BIT_SYSON_PMOPT_SLP_EN_SOC BIT(11) -#define BIT_SYSON_PMOPT_SLP_EN_PWM BIT(10) -#define BIT_SYSON_PMOPT_SLP_EN_SWR BIT(9) -#define BIT_SYSON_PMOPT_SLP_LPLDO_SEL BIT(8) -#define BIT_SYSON_PMOPT_DSTBY_SYSCLK_SEL BIT(6) -#define BIT_SYSON_PMOPT_DSTBY_SYSPLL_EN BIT(5) -#define BIT_SYSON_PMOPT_DSTBY_XTAL_EN BIT(4) -#define BIT_SYSON_PMOPT_DSTBY_EN_SOC BIT(3) -#define BIT_SYSON_PMOPT_DSTBY_EN_PWM BIT(2) -#define BIT_SYSON_PMOPT_DSTBY_EN_SWR BIT(1) -#define BIT_SYSON_PMOPT_DSTBY_LPLDO_SEL BIT(0) - -//2 REG_SYS_PWRMGT_OPTION_EXT -#define BIT_SYSON_PMOPT_SLP_ANACK_SEL BIT(2) -#define BIT_SYSON_PMOPT_SLP_ANACK_EN BIT(1) -#define BIT_SYSON_PMOPT_SLP_SWR_ADJ BIT(0) - -//2 REG_SYS_DSLP_WEVENT -#define BIT_SYSON_DSLP_GPIO BIT(2) -#define BIT_SYSON_DSLP_NFC BIT(1) -#define BIT_SYSON_DSLP_WTIMER33 BIT(0) - -//2 REG_SYS_PERI_MONITOR -#define BIT_SYSON_ISO33_NFC BIT(0) - -//2 REG_SYS_SYSTEM_CFG0 -#define BIT_SYSCFG_BD_PKG_SEL BIT(31) - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -#define BIT_SHIFT_VENDOR_ID 8 -#define BIT_MASK_VENDOR_ID 0xf -#define BIT_VENDOR_ID(x) (((x) & BIT_MASK_VENDOR_ID) << BIT_SHIFT_VENDOR_ID) - - -#define BIT_SHIFT_CHIP_VER 4 -#define BIT_MASK_CHIP_VER 0xf -#define BIT_CHIP_VER(x) (((x) & BIT_MASK_CHIP_VER) << BIT_SHIFT_CHIP_VER) - - -#define BIT_SHIFT_RF_RL_ID 0 -#define BIT_MASK_RF_RL_ID 0xf -#define BIT_RF_RL_ID(x) (((x) & BIT_MASK_RF_RL_ID) << BIT_SHIFT_RF_RL_ID) - - -//2 REG_SYS_SYSTEM_CFG1 - -#define BIT_SHIFT_SYSCFG_TRP_ICFG 28 -#define BIT_MASK_SYSCFG_TRP_ICFG 0xf -#define BIT_SYSCFG_TRP_ICFG(x) (((x) & BIT_MASK_SYSCFG_TRP_ICFG) << BIT_SHIFT_SYSCFG_TRP_ICFG) - -#define BIT_SYSCFG_TRP_BOOT_SEL_ BIT(27) -#define BIT_SysCFG_TRP_SPSLDO_SEL BIT(26) -#define BIT_V15_VLD BIT(16) -#define BIT_SYS_SYSPLL_CLK_RDY BIT(9) -#define BIT_SYS_XCLK_VLD BIT(8) -#define BIT_SYSCFG_ALDN_STS BIT(0) - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - -//2 REG_RSVD - -//2 REG_NOT_VALID - -//2 REG_NOT_VALID - - -//================= Register Address Definition =====================// -#define REG_SYS_PWR_CTRL 0x0000 -#define REG_SYS_ISO_CTRL 0x0002 -#define REG_SYS_FUNC_EN 0x0008 -#define REG_SYS_CLK_CTRL0 0x0010 -#define REG_SYS_CLK_CTRL1 0x0014 -#define REG_SYS_EFUSE_SYSCFG0 0x0020 -#define REG_SYS_EFUSE_SYSCFG1 0x0024 -#define REG_SYS_EFUSE_SYSCFG2 0x0028 -#define REG_SYS_EFUSE_SYSCFG3 0x002C -#define REG_SYS_EFUSE_SYSCFG4 0x0030 -#define REG_SYS_EFUSE_SYSCFG5 0x0034 -#define REG_SYS_EFUSE_SYSCFG6 0x0038 -#define REG_SYS_EFUSE_SYSCFG7 0x003C -#define REG_SYS_REGU_CTRL0 0x0040 -#define REG_SYS_SWR_CTRL0 0x0048 -#define REG_SYS_SWR_CTRL1 0x004C -#define REG_SYS_XTAL_CTRL0 0x0060 -#define REG_SYS_XTAL_CTRL1 0x0064 -#define REG_SYS_SYSPLL_CTRL0 0x0070 -#define REG_SYS_SYSPLL_CTRL1 0x0074 -#define REG_SYS_SYSPLL_CTRL2 0x0078 -#define REG_SYS_ANA_TIM_CTRL 0x0090 -#define REG_SYS_DSLP_TIM_CTRL 0x0094 -#define REG_SYS_DSLP_TIM_CAL_CTRL 0x0098 -#define REG_SYS_DEBUG_CTRL 0x00A0 -#define REG_SYS_PINMUX_CTRL 0x00A4 -#define REG_SYS_GPIO_DSTBY_WAKE_CTRL0 0x00A8 -#define REG_SYS_GPIO_DSTBY_WAKE_CTRL1 0x00AC -#define REG_SYS_DEBUG_REG 0x00BC -#define REG_SYS_EEPROM_CTRL0 0x00E0 -#define REG_SYS_EEPROM_CTRL1 0x00E4 -#define REG_SYS_EFUSE_CTRL 0x00E8 -#define REG_SYS_EFUSE_TEST 0x00EC -#define REG_SYS_DSTBY_INFO0 0x00F0 -#define REG_SYS_DSTBY_INFO1 0x00F4 -#define REG_SYS_DSTBY_INFO2 0x00F8 -#define REG_SYS_DSTBY_INFO3 0x00FC -#define REG_SYS_SLP_WAKE_EVENT_MSK0 0x0100 -#define REG_SYS_SLP_WAKE_EVENT_MSK1 0x0104 -#define REG_SYS_SLP_WAKE_EVENT_STATUS0 0x0108 -#define REG_SYS_SLP_WAKE_EVENT_STATUS1 0x010C -#define REG_SYS_SNF_WAKE_EVENT_MSK0 0x0110 -#define REG_SYS_SNF_WAKE_EVENT_STATUS 0x0114 -#define REG_SYS_PWRMGT_CTRL 0x0118 -#define REG_SYS_PWRMGT_OPTION 0x0120 -#define REG_SYS_PWRMGT_OPTION_EXT 0x0124 -#define REG_SYS_DSLP_WEVENT 0x0130 -#define REG_SYS_PERI_MONITOR 0x0134 -#define REG_SYS_SYSTEM_CFG0 0x01F0 -#define REG_SYS_SYSTEM_CFG1 0x01F4 -#define REG_SYS_SYSTEM_CFG2 0x01F8 - - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_timer.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_timer.c deleted file mode 100644 index 311a117..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_timer.c +++ /dev/null @@ -1,342 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ -#include "rtl8195a.h" -#include "rtl8195a_timer.h" - -#ifdef CONFIG_TIMER_EN -extern uint32_t gTimerRecord; -extern IRQ_FUN Timer2To7VectorTable[MAX_TIMER_VECTOR_TABLE_NUM]; - -#ifdef CONFIG_CHIP_A_CUT -HAL_RAM_BSS_SECTION uint32_t gTimerRecord; -#endif - -#if defined(CONFIG_CHIP_C_CUT) || defined(CONFIG_CHIP_E_CUT) -extern uint32_t Timer2To7HandlerData[MAX_TIMER_VECTOR_TABLE_NUM]; -#else -uint32_t Timer2To7HandlerData[MAX_TIMER_VECTOR_TABLE_NUM]; -#endif - -void -HalTimerIrq2To7Handle_Patch( - IN void *Data -) -{ - uint32_t TimerIrqStatus = 0, CheckIndex; - IRQ_FUN pHandler; - - TimerIrqStatus = HAL_TIMER_READ32(TIMERS_INT_STATUS_OFF); - - DBG_TIMER_INFO("%s:TimerIrqStatus: 0x%x\n",__FUNCTION__, TimerIrqStatus); - - for (CheckIndex = 2; CheckIndex<8; CheckIndex++) { - - //3 Check IRQ status bit and Timer X IRQ enable bit - if ((TimerIrqStatus & BIT_(CheckIndex)) && - (HAL_TIMER_READ32(TIMER_INTERVAL*CheckIndex + TIMER_CTL_REG_OFF) & BIT0)) { - //3 Execute Timer callback function - pHandler = Timer2To7VectorTable[CheckIndex-2]; - if (pHandler != NULL) { - pHandler((void*)Timer2To7HandlerData[CheckIndex-2]); - } - //3 Clear Timer ISR - HAL_TIMER_READ32(TIMER_INTERVAL*CheckIndex + TIMER_EOI_OFF); - } - } -} - -HAL_Status -HalTimerIrqRegisterRtl8195a_Patch( - IN void *Data -) -{ - PTIMER_ADAPTER pHalTimerAdap = (PTIMER_ADAPTER) Data; - IRQ_HANDLE TimerIrqHandle; - //IRQ_FUN BackUpIrqFun = NULL; - - if (pHalTimerAdap->TimerId > 7) { - DBG_TIMER_ERR("%s: No Support Timer ID %d!\r\n", __FUNCTION__, pHalTimerAdap->TimerId); - return HAL_ERR_PARA; - } - else { - if (pHalTimerAdap->TimerId > 1) { - - TimerIrqHandle.IrqNum = TIMER2_7_IRQ; - TimerIrqHandle.IrqFun = (IRQ_FUN) HalTimerIrq2To7Handle_Patch; - - Timer2To7VectorTable[pHalTimerAdap->TimerId-2] = - (IRQ_FUN) pHalTimerAdap->IrqHandle.IrqFun; - Timer2To7HandlerData[pHalTimerAdap->TimerId-2] = - (uint32_t) pHalTimerAdap->IrqHandle.Data; - } - else { - TimerIrqHandle.IrqNum = (pHalTimerAdap->TimerId ? TIMER1_IRQ : TIMER0_IRQ); - TimerIrqHandle.IrqFun = (IRQ_FUN) pHalTimerAdap->IrqHandle.IrqFun; - } - TimerIrqHandle.Data = (uint32_t)pHalTimerAdap; - InterruptRegister(&TimerIrqHandle); - } - - return HAL_OK; -} - -#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) -// Patch for A/B Cut -HAL_Status -HalTimerInitRtl8195a_Patch( - IN void *Data -) -{ - PTIMER_ADAPTER pHalTimerAdap = (PTIMER_ADAPTER) Data; - HAL_Status ret=HAL_OK; - uint32_t ControlReg; - - if ((gTimerRecord & (1<TimerId)) != 0) { - DBG_TIMER_ERR ("%s:Error! Timer %d is occupied!\r\n", __FUNCTION__, pHalTimerAdap->TimerId); - return HAL_BUSY; - } - - //4 1) Config Timer Setting - ControlReg = ((uint32_t)pHalTimerAdap->TimerMode<<1)|((uint32_t)pHalTimerAdap->IrqDis<<2); - /* - set TimerControlReg - 0: Timer enable (0,disable; 1,enable) - 1: Timer Mode (0, free-running mode; 1, user-defined count mode) - 2: Timer Interrupt Mask (0, not masked; 1,masked) - */ - HAL_TIMER_WRITE32((TIMER_INTERVAL*pHalTimerAdap->TimerId + TIMER_CTL_REG_OFF), - ControlReg); - - if (pHalTimerAdap->TimerMode) { - //User-defined Mode - HalTimerReLoadRtl8195a_Patch(pHalTimerAdap->TimerId ,pHalTimerAdap->TimerLoadValueUs); - } - else { - // set TimerLoadCount Register - HAL_TIMER_WRITE32((TIMER_INTERVAL*pHalTimerAdap->TimerId + TIMER_LOAD_COUNT_OFF), - 0xFFFFFFFF); - } - - //4 2) Setting Timer IRQ - if (!pHalTimerAdap->IrqDis) { - if (pHalTimerAdap->IrqHandle.IrqFun != NULL) { - //4 2.1) Initial TimerIRQHandle - ret = HalTimerIrqRegisterRtl8195a_Patch(pHalTimerAdap); - if (HAL_OK != ret) { - DBG_TIMER_ERR ("%s: Timer %d Register IRQ Err!\r\n", __FUNCTION__, pHalTimerAdap->TimerId); - return ret; - } - //4 2.2) Enable TimerIRQ for Platform - InterruptEn((PIRQ_HANDLE)&pHalTimerAdap->IrqHandle); - } - else { - DBG_TIMER_ERR ("%s: Timer %d ISR Handler is NULL!\r\n", __FUNCTION__, pHalTimerAdap->TimerId); - return HAL_ERR_PARA; - } - } - - //4 4) Enable Timer -// HAL_TIMER_WRITE32((TIMER_INTERVAL*pHalTimerAdap->TimerId + TIMER_CTL_REG_OFF), -// (ControlReg|0x1)); - - gTimerRecord |= (1<TimerId); - - return ret; -} - -#elif defined(CONFIG_CHIP_C_CUT) -// Patch for C Cut -HAL_Status -HalTimerInitRtl8195a_Patch( - IN void *Data -) -{ - PTIMER_ADAPTER pHalTimerAdap = (PTIMER_ADAPTER) Data; - HAL_Status ret=HAL_OK; - - ret = HalTimerInitRtl8195aV02(Data); - - // Patch the Rom code to load the correct count value - if (pHalTimerAdap->TimerMode) { - //User-defined Mode - HalTimerReLoadRtl8195a_Patch(pHalTimerAdap->TimerId ,pHalTimerAdap->TimerLoadValueUs); - } - - return ret; -} -#endif - -#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) - -HAL_Status -HalTimerIrqUnRegisterRtl8195a_Patch( - IN void *Data -) -{ - PTIMER_ADAPTER pHalTimerAdap = (PTIMER_ADAPTER) Data; - PIRQ_HANDLE pTimerIrqHandle; - uint32_t i; - - pTimerIrqHandle = &pHalTimerAdap->IrqHandle; - - if (pHalTimerAdap->TimerId > 7) { - DBG_TIMER_ERR("%s:Error: No Support Timer ID!\n", __FUNCTION__); - return HAL_ERR_PARA; - } - else { - if (pHalTimerAdap->TimerId > 1) { - pTimerIrqHandle->IrqNum = TIMER2_7_IRQ; - Timer2To7VectorTable[pHalTimerAdap->TimerId-2] = NULL; - for (i=0;iIrqHandle); - InterruptUnRegister(pTimerIrqHandle); - } - } - else { - pTimerIrqHandle->IrqNum = (pHalTimerAdap->TimerId ? TIMER1_IRQ : TIMER0_IRQ); - InterruptUnRegister(pTimerIrqHandle); - } - - } - - return HAL_OK; -} - - -void -HalTimerDeInitRtl8195a_Patch( - IN void *Data -) -{ - PTIMER_ADAPTER pHalTimerAdap = (PTIMER_ADAPTER) Data; - uint32_t timer_id; - - timer_id = pHalTimerAdap->TimerId; - HalTimerDisRtl8195a (timer_id); - if (!pHalTimerAdap->IrqDis) { - if (pHalTimerAdap->IrqHandle.IrqFun != NULL) { - HalTimerIrqUnRegisterRtl8195a_Patch(pHalTimerAdap); - } - } - - gTimerRecord &= ~(1<TimerId); -} - -uint32_t -HalTimerReadCountRtl8195a_Patch( - IN uint32_t TimerId -) -{ - uint32_t TimerCountOld; - uint32_t TimerCountNew; - uint32_t TimerRDCnt; - - TimerRDCnt = 0; - TimerCountOld = HAL_TIMER_READ32(TimerId*TIMER_INTERVAL + TIMER_CURRENT_VAL_OFF); - while(1) { - TimerCountNew = HAL_TIMER_READ32(TimerId*TIMER_INTERVAL + TIMER_CURRENT_VAL_OFF); - - if (TimerCountOld == TimerCountNew) { - return (uint32_t)TimerCountOld; - } - else { - TimerRDCnt++; - TimerCountOld = TimerCountNew; - - if (TimerRDCnt >= 2){ - return (uint32_t)TimerCountOld; - } - } - } -} - - -#endif // #if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) - -#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) || defined(CONFIG_CHIP_C_CUT) - -void -HalTimerReLoadRtl8195a_Patch( - IN uint32_t TimerId, - IN uint32_t LoadUs -) -{ - uint32_t LoadCount = 0; - uint32_t ms125; // how many 125ms - uint32_t remain_us; - - ms125 = LoadUs/125000; - remain_us = LoadUs - (ms125*125000); - LoadCount = ms125 * (GTIMER_CLK_HZ/8); - LoadCount += (remain_us*GTIMER_CLK_HZ)/1000000; - if (LoadCount == 0) { - LoadCount = 1; - } - -// DBG_TIMER_INFO("%s: Load Count=0x%x\r\n", __FUNCTION__, LoadCount); - // set TimerLoadCount Register - HAL_TIMER_WRITE32((TIMER_INTERVAL*TimerId + TIMER_LOAD_COUNT_OFF), - LoadCount); -} - -#endif // #if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) || defined(CONFIG_CHIP_C_CUT) - -void -HalTimerIrqEnRtl8195a( - IN uint32_t TimerId -) -{ - HAL_TIMER_WRITE32((TIMER_INTERVAL*TimerId + TIMER_CTL_REG_OFF), - HAL_TIMER_READ32(TIMER_INTERVAL*TimerId + TIMER_CTL_REG_OFF) & (~(BIT2))); -} - -void -HalTimerIrqDisRtl8195a( - IN uint32_t TimerId -) -{ - HAL_TIMER_WRITE32((TIMER_INTERVAL*TimerId + TIMER_CTL_REG_OFF), - HAL_TIMER_READ32(TIMER_INTERVAL*TimerId + TIMER_CTL_REG_OFF) | (BIT2)); -} - -void -HalTimerClearIsrRtl8195a( - IN uint32_t TimerId -) -{ - HAL_TIMER_READ32(TIMER_INTERVAL*TimerId + TIMER_EOI_OFF); -} - -void -HalTimerEnRtl8195a_Patch( - IN uint32_t TimerId -) -{ - HAL_TIMER_WRITE32((TIMER_INTERVAL*TimerId + TIMER_CTL_REG_OFF), - HAL_TIMER_READ32(TIMER_INTERVAL*TimerId + TIMER_CTL_REG_OFF) | (BIT0)); -} - -void -HalTimerDisRtl8195a_Patch( - IN uint32_t TimerId -) -{ - // Disable Timer will alos disable the IRQ, so need to re-enable the IRQ when re-enable the timer - HAL_TIMER_WRITE32((TIMER_INTERVAL*TimerId + TIMER_CTL_REG_OFF), - HAL_TIMER_READ32(TIMER_INTERVAL*TimerId + TIMER_CTL_REG_OFF) & (~BIT0)); -} - -#endif // CONFIG_TIMER_EN diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_timer.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_timer.h deleted file mode 100644 index 4c1743e..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_timer.h +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _RTL8195A_TIMER_H_ -#define _RTL8195A_TIMER_H_ - - -#define TIMER_TICK_US 31 - -#define TIMER_LOAD_COUNT_OFF 0x00 -#define TIMER_CURRENT_VAL_OFF 0x04 -#define TIMER_CTL_REG_OFF 0x08 -#define TIMER_EOI_OFF 0x0c -#define TIMER_INT_STATUS_OFF 0x10 -#define TIMER_INTERVAL 0x14 -#define TIMERS_INT_STATUS_OFF 0xa0 -#define TIMERS_EOI_OFF 0xa4 -#define TIMERS_RAW_INT_STATUS_OFF 0xa8 -#define TIMERS_COMP_VER_OFF 0xac - -#define MAX_TIMER_VECTOR_TABLE_NUM 6 - -#define HAL_TIMER_READ32(addr) (*((volatile uint32_t*)(TIMER_REG_BASE + addr)))//HAL_READ32(TIMER_REG_BASE, addr) -#define HAL_TIMER_WRITE32(addr, value) ((*((volatile uint32_t*)(TIMER_REG_BASE + addr))) = value)//HAL_WRITE32(TIMER_REG_BASE, addr, value) -#define HAL_TIMER_READ16(addr) (*((volatile uint16_t*)(TIMER_REG_BASE + addr)))//HAL_READ16(TIMER_REG_BASE, addr) -#define HAL_TIMER_WRITE16(addr, value) ((*((volatile uint16_t*)(TIMER_REG_BASE + addr))) = value)//HAL_WRITE16(TIMER_REG_BASE, addr, value) -#define HAL_TIMER_READ8(addr) (*((volatile uint8_t*)(TIMER_REG_BASE + addr)))//HAL_READ8(TIMER_REG_BASE, addr) -#define HAL_TIMER_WRITE8(addr, value) ((*((volatile uint8_t*)(TIMER_REG_BASE + addr))) = value)//HAL_WRITE8(TIMER_REG_BASE, addr, value) - -_LONG_CALL_ uint32_t -HalGetTimerIdRtl8195a( - IN uint32_t *TimerID -); - -_LONG_CALL_ BOOL -HalTimerInitRtl8195a( - IN void *Data -); - -_LONG_CALL_ uint32_t -HalTimerReadCountRtl8195a( - IN uint32_t TimerId -); - -_LONG_CALL_ void -HalTimerIrqClearRtl8195a( - IN uint32_t TimerId -); - -_LONG_CALL_ void -HalTimerDisRtl8195a( - IN uint32_t TimerId -); - -_LONG_CALL_ void -HalTimerEnRtl8195a( - IN uint32_t TimerId -); - -_LONG_CALL_ void -HalTimerDumpRegRtl8195a( - IN uint32_t TimerId -); - -// ROM Code patch -HAL_Status -HalTimerInitRtl8195a_Patch( - IN void *Data -); - -uint32_t -HalTimerReadCountRtl8195a_Patch( - IN uint32_t TimerId -); - -void -HalTimerReLoadRtl8195a_Patch( - IN uint32_t TimerId, - IN uint32_t LoadUs -); - -uint32_t -HalTimerReadCountRtl8195a_Patch( - IN uint32_t TimerId -); - -void -HalTimerIrqEnRtl8195a( - IN uint32_t TimerId -); - -void -HalTimerIrqDisRtl8195a( - IN uint32_t TimerId -); - -void -HalTimerClearIsrRtl8195a( - IN uint32_t TimerId -); - -void -HalTimerEnRtl8195a_Patch( - IN uint32_t TimerId -); - -void -HalTimerDisRtl8195a_Patch( - IN uint32_t TimerId -); - -void -HalTimerDeInitRtl8195a_Patch( - IN void *Data -); - -#if defined(CONFIG_CHIP_C_CUT) || defined(CONFIG_CHIP_E_CUT) - -__weak _LONG_CALL_ -void -HalTimerIrq2To7HandleV02( - IN void *Data -); - -__weak _LONG_CALL_ROM_ -HAL_Status -HalTimerIrqRegisterRtl8195aV02( - IN void *Data -); - -__weak _LONG_CALL_ -HAL_Status -HalTimerInitRtl8195aV02( - IN void *Data -); - -__weak _LONG_CALL_ -uint32_t -HalTimerReadCountRtl8195aV02( - IN uint32_t TimerId -); - -__weak _LONG_CALL_ -void -HalTimerReLoadRtl8195aV02( - IN uint32_t TimerId, - IN uint32_t LoadUs -); - -__weak _LONG_CALL_ROM_ -HAL_Status -HalTimerIrqUnRegisterRtl8195aV02( - IN void *Data -); - -__weak _LONG_CALL_ -void -HalTimerDeInitRtl8195aV02( - IN void *Data -); - -#endif // end of "#ifdef CONFIG_CHIP_C_CUT" - -#ifdef CONFIG_CHIP_E_CUT -_LONG_CALL_ void -HalTimerReLoadRtl8195a_V04( - IN uint32_t TimerId, - IN uint32_t LoadUs -); - -_LONG_CALL_ HAL_Status -HalTimerInitRtl8195a_V04( - IN void *Data -); -#endif // #ifdef CONFIG_CHIP_E_CUT - -// HAL functions wrapper -#ifndef CONFIG_RELEASE_BUILD_LIBRARIES -static __inline HAL_Status -HalTimerInit( - IN void *Data -) -{ -#ifdef CONFIG_CHIP_E_CUT - return (HalTimerInitRtl8195a_V04(Data)); -#else - return (HalTimerInitRtl8195a_Patch(Data)); -#endif -} - -static __inline void -HalTimerEnable( - IN uint32_t TimerId -) -{ - HalTimerIrqEnRtl8195a(TimerId); - HalTimerEnRtl8195a_Patch(TimerId); -} - -static __inline void -HalTimerDisable( - IN uint32_t TimerId -) -{ - HalTimerDisRtl8195a_Patch(TimerId); -} - -static __inline void -HalTimerClearIsr( - IN uint32_t TimerId -) -{ - HalTimerClearIsrRtl8195a(TimerId); -} - -static __inline void -HalTimerReLoad( - IN uint32_t TimerId, - IN uint32_t LoadUs -) -{ -#ifdef CONFIG_CHIP_E_CUT - HalTimerReLoadRtl8195a_V04(TimerId, LoadUs); -#else - HalTimerReLoadRtl8195a_Patch(TimerId, LoadUs); -#endif -} - -#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) - -static __inline void -HalTimerDeInit( - IN void *Data -) -{ - HalTimerDeInitRtl8195a_Patch(Data); -} - -#else - -static __inline void -HalTimerDeInit( - IN void *Data -) -{ - HalTimerDeInitRtl8195aV02(Data); -} - -#endif // end of "#ifndef CONFIG_CHIP_C_CUT" -#endif // #ifndef CONFIG_RELEASE_BUILD_LIBRARIES -#endif //_RTL8195A_TIMER_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_uart.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_uart.c deleted file mode 100644 index db20a43..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_uart.c +++ /dev/null @@ -1,1481 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#include "rtl8195a.h" -#include "rtl8195a_uart.h" -#include "hal_uart.h" -#include "hal_gdma.h" -#include "strproc.h" - -uint8_t -HalRuartGetChipVerRtl8195a(void) -{ - uint8_t chip_ver; - - chip_ver = (HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_SYSTEM_CFG0) >> 4) & 0x0f; // 0x400001F0 RTL8710AF = 0x41000220 - return chip_ver; -} - -/** - * Reset RUART Tx FIFO. - * - * Reset RUART Receiver and Rx FIFO wrapper function. - * It will check LINE_STATUS_REG until reset action completion. - * - * @return BOOL - */ -HAL_Status -HalRuartResetTxFifoRtl8195a( - IN void *Data ///< RUART Adapter -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - uint8_t UartIndex = pHalRuartAdapter->UartIndex; - uint32_t rx_trigger_lv; - volatile uint32_t RegValue; - uint32_t timeout; - - // Backup the RX FIFO trigger Level setting - rx_trigger_lv = HAL_RUART_READ32(UartIndex, RUART_FIFO_CTL_REG_OFF); - rx_trigger_lv &= 0xC0; // only keep the bit[7:6] - - /* Step 2: Enable clear_txfifo */ - RegValue = (FIFO_CTL_DEFAULT_WITH_FIFO_DMA | RUART_FIFO_CTL_REG_CLEAR_TXFIFO) & (~0xC0); - RegValue |= rx_trigger_lv; - HAL_RUART_WRITE32(UartIndex, RUART_FIFO_CTL_REG_OFF, RegValue); - - // Wait TSR empty - RegValue = HAL_RUART_READ32(UartIndex, RUART_LINE_STATUS_REG_OFF); - timeout = 100; // wait 10 ms - while (((RegValue & RUART_LINE_STATUS_REG_TEMT)==0) && (timeout > 0)) { - HalDelayUs(100); - RegValue = HAL_RUART_READ32(UartIndex, RUART_LINE_STATUS_REG_OFF); - timeout--; - } - - return HAL_OK; -} - -// Reset RX FIFO -HAL_Status -HalRuartResetRxFifoRtl8195a_Patch( - IN void *Data ///< RUART Adapter -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - uint8_t UartIndex; - volatile uint32_t RegValue; - uint32_t rx_trigger_lv; - - UartIndex = pHalRuartAdapter->UartIndex; - - /* Step 1: Enable Reset_rcv */ - RegValue = HAL_RUART_READ32(UartIndex, RUART_STS_REG_OFF); - RegValue |= RUART_STS_REG_RESET_RCV; - HAL_RUART_WRITE32(UartIndex, RUART_STS_REG_OFF, RegValue); - - // Backup the RX FIFO trigger Level setting - rx_trigger_lv = HAL_RUART_READ32(UartIndex, RUART_FIFO_CTL_REG_OFF); - rx_trigger_lv &= 0xC0; // only keep the bit[7:6] - - /* Step 2: Enable clear_rxfifo */ - RegValue = (FIFO_CTL_DEFAULT_WITH_FIFO_DMA | RUART_FIFO_CTL_REG_CLEAR_RXFIFO) & (~0xC0); - RegValue |= rx_trigger_lv; - HAL_RUART_WRITE32(UartIndex, RUART_FIFO_CTL_REG_OFF, RegValue); - - /* Step 3: Disable Reset_rcv */ - RegValue = HAL_RUART_READ32(UartIndex, RUART_STS_REG_OFF); - RegValue &= ~(RUART_STS_REG_RESET_RCV); - HAL_RUART_WRITE32(UartIndex, RUART_STS_REG_OFF, RegValue); - - return HAL_OK; -} - -// Reset both TX and RX FIFO -HAL_Status -HalRuartResetTRxFifoRtl8195a( - IN void *Data ///< RUART Adapter -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - uint8_t UartIndex; - volatile uint32_t RegValue; - uint32_t timeout; - uint32_t rx_trigger_lv; - - UartIndex = pHalRuartAdapter->UartIndex; - - /* Step 1: Enable Reset_rcv */ - RegValue = HAL_RUART_READ32(UartIndex, RUART_STS_REG_OFF); - RegValue |= RUART_STS_REG_RESET_RCV; - HAL_RUART_WRITE32(UartIndex, RUART_STS_REG_OFF, RegValue); - - // Backup the RX FIFO trigger Level setting - rx_trigger_lv = HAL_RUART_READ32(UartIndex, RUART_FIFO_CTL_REG_OFF); - rx_trigger_lv &= 0xC0; // only keep the bit[7:6] - - /* Step 2: Enable clear_txfifo & clear_rxfifo */ - RegValue = (FIFO_CTL_DEFAULT_WITH_FIFO_DMA | RUART_FIFO_CTL_REG_CLEAR_TXFIFO | RUART_FIFO_CTL_REG_CLEAR_RXFIFO) & (~0xC0); - RegValue |= rx_trigger_lv; - HAL_RUART_WRITE32(UartIndex, RUART_FIFO_CTL_REG_OFF, RegValue); - - // Wait THR & TSR empty - RegValue = HAL_RUART_READ32(UartIndex, RUART_LINE_STATUS_REG_OFF); - timeout = 100; // wait 10 ms - while (((RegValue & RUART_LINE_STATUS_REG_TEMT)==0) && (timeout > 0)) { - HalDelayUs(100); - RegValue = HAL_RUART_READ32(UartIndex, RUART_LINE_STATUS_REG_OFF); - timeout--; - } - - /* Step 3: Disable Reset_rcv */ - RegValue = HAL_RUART_READ32(UartIndex, RUART_STS_REG_OFF); - RegValue &= ~(RUART_STS_REG_RESET_RCV); - HAL_RUART_WRITE32(UartIndex, RUART_STS_REG_OFF, RegValue); - - return HAL_OK; -} - -HAL_Status -HalRuartGenBaudRateRtl8195a( - IN RUART_SPEED_SETTING *pBaudSetting -) -{ - uint32_t baud_rate; - uint32_t min_divisor=0; - uint32_t min_err=0xffffffff; - uint32_t uart_ovsr; - uint32_t min_uart_ovsr = 0; // ovsr with mini err - uint32_t min_uart_ovsr_mod = 0; - uint64_t uart_clock; - uint32_t divisor_temp; - uint32_t max_jitter_temp; - uint32_t err_temp; - uint32_t uart_ovsr_target; - uint32_t uart_ovsrs_actual; - uint32_t ovsr_adj; - uint32_t adj_bits; - uint32_t div_res; - uint32_t uart_ovsrs_actual_mod; - - baud_rate = pBaudSetting->BaudRate; - if (baud_rate >= 1000000) { - baud_rate /= 100; - uart_clock = (uint64_t)pBaudSetting->sclk; - } else { - baud_rate /= 2; - uart_clock = (uint64_t)pBaudSetting->sclk * 50; // UART clock is 1/2 CPU clock - } - - div_res = pBaudSetting->divisor_resolution; - while ((min_err > pBaudSetting->max_err) && (div_res > 0)) { - uart_ovsr = pBaudSetting->Ovsr_max; - while(uart_ovsr >= pBaudSetting->Ovsr_min) { -// divisor_temp = (uart_clock/baud_rate)/uart_ovsr; - divisor_temp = div_u64(div_u64(uart_clock, baud_rate), uart_ovsr); - max_jitter_temp = 0; - if (divisor_temp > 0) { - max_jitter_temp = 100000/uart_ovsr; - if (max_jitter_temp >= pBaudSetting->jitter_lim) { - err_temp = 100; - } else { -// err_temp = (uart_clock/divisor_temp)/((uart_ovsr/100)*100); - err_temp = div_u64(div_u64(uart_clock, divisor_temp), (uart_ovsr/100)*100); - if (err_temp > baud_rate) { - err_temp = (err_temp - baud_rate)*1000 / baud_rate; - } else { - err_temp = (baud_rate - err_temp)*1000 / baud_rate; - } - - if (err_temp < min_err) { - min_err = err_temp; - min_divisor = divisor_temp; - min_uart_ovsr = uart_ovsr/100; - min_uart_ovsr_mod = uart_ovsr%100; - } else if (err_temp == min_err) { - uint32_t uart_ovsr_mod = uart_ovsr%100; - // we perfer OVSR bigger and adj bits smaller - if (((uart_ovsr/100) >= min_uart_ovsr) && (uart_ovsr_mod < min_uart_ovsr_mod)) { - min_err = err_temp; - min_divisor = divisor_temp; - min_uart_ovsr = uart_ovsr/100; - min_uart_ovsr_mod = uart_ovsr_mod; - } - } - } - } - uart_ovsr -= div_res; - } - div_res = div_res >> 1; - } - - if (min_divisor == 0) { - min_divisor = 1; - } -// uart_ovsr_target = (uart_clock/baud_rate)/min_divisor; - uart_ovsr_target = div_u64(div_u64(uart_clock,baud_rate), min_divisor); - - ovsr_adj = 0; - adj_bits = 0; - uart_ovsrs_actual = uart_ovsr_target/100; - uart_ovsrs_actual_mod = uart_ovsr_target%100; - if (uart_ovsrs_actual_mod > 0) { - adj_bits = (uart_ovsrs_actual_mod*pBaudSetting->Ovsr_adj_max_bits)/100; - if ((uart_ovsrs_actual_mod - ((adj_bits*100)/pBaudSetting->Ovsr_adj_max_bits)) > 4) { - adj_bits++; - } - - if (adj_bits > (pBaudSetting->Ovsr_adj_max_bits-1)) { - DBG_UART_WARN("HalRuartGenBaudRateRtl8195a: adj_bits=%d\r\n", adj_bits); - adj_bits = pBaudSetting->Ovsr_adj_max_bits-1; - } - } - ovsr_adj = pBaudSetting->Ovsr_adj_map[adj_bits]; -// DBG_8195A("baud_rate=%d uart_clock=%d uart_ovsr_target=%d min_divisor=%d adj_bits=%d\r\n", baud_rate, uart_clock, uart_ovsr_target, min_divisor, adj_bits); - - pBaudSetting->Ovsr = uart_ovsrs_actual; - pBaudSetting->Div = min_divisor; - pBaudSetting->Ovsr_adj = ovsr_adj; - pBaudSetting->Ovsr_adj_bits = adj_bits; - - DBG_UART_INFO("%sBaudRateRtl8195a: BaudRate:%d Divisor:%d Ovsr:%d Ovsr_ADj:0x%x\n", - "HalRuartGen", pBaudSetting->BaudRate, min_divisor, uart_ovsrs_actual, ovsr_adj); - - return HAL_OK; -} - -HAL_Status -HalRuartDumpBaudRateTableRtl8195a( - IN void *Data -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - RUART_SPEED_SETTING RuartSpeedSetting; - uint32_t Divisor; - uint32_t Ovsr; - uint32_t Ovsr_adj; - uint32_t i; - uint32_t j; - uint32_t adj; - - RuartSpeedSetting.max_err = 3; - RuartSpeedSetting.Ovsr_min = UART_OVSR_POOL_MIN; - RuartSpeedSetting.Ovsr_max = UART_OVSR_POOL_MAX; - RuartSpeedSetting.divisor_resolution = DIVISOR_RESOLUTION; - RuartSpeedSetting.jitter_lim = JITTER_LIMIT; - RuartSpeedSetting.sclk = UART_SCLK; - - if (pHalRuartAdapter->pDefaultBaudRateTbl != NULL) { - // for debugging - DBG_8195A("==== 10 Bit ====\r\n"); - i = 0; - RuartSpeedSetting.Ovsr_adj_map = pHalRuartAdapter->pDefOvsrAdjTbl_10; - RuartSpeedSetting.Ovsr_adj_max_bits = 10; - while (pHalRuartAdapter->pDefaultBaudRateTbl[i] < 0xffffffff) { - RuartSpeedSetting.BaudRate = pHalRuartAdapter->pDefaultBaudRateTbl[i]; - if (HalRuartGenBaudRateRtl8195a(&RuartSpeedSetting) == HAL_OK) { - Divisor = RuartSpeedSetting.Div; - Ovsr = RuartSpeedSetting.Ovsr; - Ovsr_adj = RuartSpeedSetting.Ovsr_adj; - adj = 0; - for (j=0;j<10;j++) { - if (Ovsr_adj & (1<pDefaultBaudRateTbl[i], Ovsr, Divisor, Ovsr_adj, adj); - } - i++; - } - - - DBG_8195A("==== 9 Bit ====\r\n"); - i = 0; - RuartSpeedSetting.Ovsr_adj_map = pHalRuartAdapter->pDefOvsrAdjTbl_9; - RuartSpeedSetting.Ovsr_adj_max_bits = 9; - while (pHalRuartAdapter->pDefaultBaudRateTbl[i] < 0xffffffff) { - RuartSpeedSetting.BaudRate = pHalRuartAdapter->pDefaultBaudRateTbl[i]; - if (HalRuartGenBaudRateRtl8195a(&RuartSpeedSetting) == HAL_OK) { - Divisor = RuartSpeedSetting.Div; - Ovsr = RuartSpeedSetting.Ovsr; - Ovsr_adj = RuartSpeedSetting.Ovsr_adj; - adj = 0; - for (j=0;j<10;j++) { - if (Ovsr_adj & (1<pDefaultBaudRateTbl[i], Ovsr, Divisor, Ovsr_adj, adj); - } - i++; - } - - DBG_8195A("==== 8 Bit ====\r\n"); - i = 0; - RuartSpeedSetting.Ovsr_adj_map = pHalRuartAdapter->pDefOvsrAdjTbl_8; - RuartSpeedSetting.Ovsr_adj_max_bits = 8; - while (pHalRuartAdapter->pDefaultBaudRateTbl[i] < 0xffffffff) { - RuartSpeedSetting.BaudRate = pHalRuartAdapter->pDefaultBaudRateTbl[i]; - if (HalRuartGenBaudRateRtl8195a(&RuartSpeedSetting) == HAL_OK) { - Divisor = RuartSpeedSetting.Div; - Ovsr = RuartSpeedSetting.Ovsr; - Ovsr_adj = RuartSpeedSetting.Ovsr_adj; - adj = 0; - for (j=0;j<10;j++) { - if (Ovsr_adj & (1<pDefaultBaudRateTbl[i], Ovsr, Divisor, Ovsr_adj, adj); - } - i++; - } - } - return HAL_OK; -} - -HAL_Status -HalRuartSetBaudRateRtl8195a( - IN void *Data -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - RUART_SPEED_SETTING RuartSpeedSetting; - uint32_t RegValue; - uint32_t Dll, Dlm; - uint8_t UartIndex; - uint32_t Divisor; - uint32_t Ovsr; - uint32_t Ovsr_adj; - uint32_t i; - uint32_t cpu_clk; - uint32_t baud_rate_temp; - uint32_t err; - uint8_t is_defined_baud; - uint8_t word_bits; - uint8_t adj_bits; - -#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) - uint8_t chip_ver; - - // get chip version - chip_ver = HalRuartGetChipVerRtl8195a(); // RTL8710AF = 2 -#endif - - if (pHalRuartAdapter->WordLen == RUART_WLS_8BITS) { - word_bits = 8+1; // 1 start bit + 8 data bit - } else { - word_bits = 7+1; - } - - if (pHalRuartAdapter->Parity == RUART_PARITY_ENABLE) { - word_bits++; // 1 parity bit - } - - is_defined_baud = 0; - - if (pHalRuartAdapter->pDefaultBaudRateTbl != NULL) { - i = 0; - while (pHalRuartAdapter->pDefaultBaudRateTbl[i] < 0xffffffff) { - if (pHalRuartAdapter->pDefaultBaudRateTbl[i] == pHalRuartAdapter->BaudRate) { - Divisor = pHalRuartAdapter->pDefaultDivTbl[i]; - Ovsr = pHalRuartAdapter->pDefaultOvsrRTbl[i]; - switch (word_bits) { - case 9: - adj_bits = pHalRuartAdapter->pDefOvsrAdjBitTbl_9[i]; - Ovsr_adj = pHalRuartAdapter->pDefOvsrAdjTbl_9[adj_bits]; - break; - case 10: - adj_bits = pHalRuartAdapter->pDefOvsrAdjBitTbl_10[i]; - Ovsr_adj = pHalRuartAdapter->pDefOvsrAdjTbl_10[adj_bits]; - break; - case 8: - adj_bits = pHalRuartAdapter->pDefOvsrAdjBitTbl_8[i]; - Ovsr_adj = pHalRuartAdapter->pDefOvsrAdjTbl_8[adj_bits]; - break; - - default: - adj_bits = pHalRuartAdapter->pDefOvsrAdjBitTbl_9[i]; - Ovsr_adj = pHalRuartAdapter->pDefOvsrAdjTbl_9[adj_bits]; - break; - } - // Verify again - cpu_clk = UART_SCLK; - baud_rate_temp = cpu_clk/Ovsr/Divisor; -// DBG_8195A("baud_rate_temp %d\n", baud_rate_temp); - - if (baud_rate_temp > pHalRuartAdapter->BaudRate) { - err = baud_rate_temp - pHalRuartAdapter->BaudRate; - } else { - err = pHalRuartAdapter->BaudRate - baud_rate_temp; - } - - // Tolerance is 10% - // If the err is too big, it may caused by "the baud rate table is not for this CPU clock" - if (err < (pHalRuartAdapter->BaudRate/10)) { - is_defined_baud = 1; - } - break; // break the while loop - } else { - i++; - } - } - } - - if (is_defined_baud == 0) { - - switch (word_bits) { - case 9: - RuartSpeedSetting.Ovsr_adj_map = pHalRuartAdapter->pDefOvsrAdjTbl_9; - break; - - case 10: - RuartSpeedSetting.Ovsr_adj_map = pHalRuartAdapter->pDefOvsrAdjTbl_10; - break; - - case 8: - RuartSpeedSetting.Ovsr_adj_map = pHalRuartAdapter->pDefOvsrAdjTbl_8; - break; - - default: - word_bits = 9; - RuartSpeedSetting.Ovsr_adj_map = pHalRuartAdapter->pDefOvsrAdjTbl_9; - break; - } - DBG_UART_INFO("BaudRate(%d) not in the Lookup table \n", pHalRuartAdapter->BaudRate); - RuartSpeedSetting.Ovsr_adj_max_bits = word_bits; - RuartSpeedSetting.max_err = 3; - RuartSpeedSetting.Ovsr_min = UART_OVSR_POOL_MIN; - RuartSpeedSetting.Ovsr_max = UART_OVSR_POOL_MAX; - RuartSpeedSetting.divisor_resolution = DIVISOR_RESOLUTION; - RuartSpeedSetting.jitter_lim = JITTER_LIMIT; - RuartSpeedSetting.sclk = UART_SCLK; - RuartSpeedSetting.BaudRate = pHalRuartAdapter->BaudRate; -#if defined(CONFIG_CHIP_A_CUT) || defined(CONFIG_CHIP_B_CUT) - if (chip_ver < 2) { - // A or B Cut - // workround: +2% bias - RuartSpeedSetting.BaudRate = (pHalRuartAdapter->BaudRate * 102)/100; - } -#endif - if (HalRuartGenBaudRateRtl8195a(&RuartSpeedSetting) == HAL_OK) { - Divisor = RuartSpeedSetting.Div; - Ovsr = RuartSpeedSetting.Ovsr; - Ovsr_adj = RuartSpeedSetting.Ovsr_adj; - } else { - DBG_UART_ERR("Invalid BaudRate(%d), Force Baud Rateit as 9600\n", - pHalRuartAdapter->BaudRate); - Divisor = 434; - Ovsr = 20; - Ovsr_adj = 0; - } - } - - UartIndex = pHalRuartAdapter->UartIndex; - - DBG_UART_INFO("%sBaudRateRtl8195a: BaudRate:%d Divisor:%d Ovsr:%d Ovsr_ADj:0x%x\n", - "HalRuartSet", pHalRuartAdapter->BaudRate, Divisor, Ovsr, Ovsr_adj); - DBG_UART_INFO("RealBaudRate: %d\n", RuartSpeedSetting.sclk/Divisor/Ovsr); - - Dll = Divisor & 0xFF; - Dlm = (Divisor & 0xFF00) >> 8; - - /* Set DLAB bit to 1 to access DLL/DLM */ - RegValue = HAL_RUART_READ32(UartIndex, RUART_LINE_CTL_REG_OFF); - RegValue |= RUART_LINE_CTL_REG_DLAB_ENABLE; - HAL_RUART_WRITE32(UartIndex, RUART_LINE_CTL_REG_OFF, RegValue); - - HAL_RUART_WRITE32(UartIndex, RUART_DLL_OFF, Dll); - HAL_RUART_WRITE32(UartIndex, RUART_DLM_OFF, Dlm); - - /** - * Clean Rx break signal interrupt status at initial stage. - */ - RegValue = HAL_RUART_READ32(UartIndex, RUART_SCRATCH_PAD_REG_OFF); - RegValue |= RUART_SP_REG_RXBREAK_INT_STATUS; - HAL_RUART_WRITE32(UartIndex, RUART_SCRATCH_PAD_REG_OFF, RegValue); - - /* Set OVSR(xfactor) */ - RegValue = HAL_RUART_READ32(UartIndex, RUART_STS_REG_OFF); - RegValue &= ~(RUART_STS_REG_XFACTOR); - RegValue |= (((Ovsr - 5) << 4) & RUART_STS_REG_XFACTOR); - HAL_RUART_WRITE32(UartIndex, RUART_STS_REG_OFF, RegValue); - - /* Set OVSR_ADJ[10:0] (xfactor_adj[26:16]) */ - RegValue = HAL_RUART_READ32(UartIndex, RUART_SCRATCH_PAD_REG_OFF); - RegValue &= ~(RUART_SP_REG_XFACTOR_ADJ); - RegValue |= ((Ovsr_adj << 16) & RUART_SP_REG_XFACTOR_ADJ); - HAL_RUART_WRITE32(UartIndex, RUART_SCRATCH_PAD_REG_OFF, RegValue); - - /* clear DLAB bit */ - RegValue = HAL_RUART_READ32(UartIndex, RUART_LINE_CTL_REG_OFF); - RegValue &= ~(RUART_LINE_CTL_REG_DLAB_ENABLE); - HAL_RUART_WRITE32(UartIndex, RUART_LINE_CTL_REG_OFF, RegValue); - - pHalRuartAdapter->BaudRateUsing = pHalRuartAdapter->BaudRate; - pHalRuartAdapter->WordLenUsing = pHalRuartAdapter->WordLen; - pHalRuartAdapter->ParityUsing = pHalRuartAdapter->Parity; - - return HAL_OK; -} - - -HAL_Status -HalRuartInitRtl8195a_Patch( - IN void *Data ///< RUART Adapter -) -{ - /* DBG_ENTRANCE; */ - uint32_t RegValue; - uint8_t UartIndex; - uint8_t PinmuxSelect; - - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - - UartIndex = pHalRuartAdapter->UartIndex; - PinmuxSelect = pHalRuartAdapter->PinmuxSelect; - - if (UartIndex > 2) { - DBG_UART_ERR(ANSI_COLOR_MAGENTA"HalRuartInitRtl8195a: Invalid UART Index\n"ANSI_COLOR_RESET); - return HAL_ERR_PARA; - } - - DBG_UART_INFO("HalRuartInitRtl8195a: [UART %d] PinSel=%d\n", UartIndex, PinmuxSelect); - if(( PinmuxSelect == RUART0_MUX_TO_GPIOE ) && ((UartIndex == 0) || (UartIndex == 1))) { - DBG_UART_WARN(ANSI_COLOR_MAGENTA"UART Pin may conflict with JTAG\r\n"ANSI_COLOR_RESET); - } - - // switch Pin from EEPROM to UART0 - if(( PinmuxSelect == RUART0_MUX_TO_GPIOC ) && (UartIndex == 0)) { - RegValue = HAL_READ32(SYSTEM_CTRL_BASE, 0xa4); - if (RegValue & 0x10) { - DBG_UART_WARN("UART Pin may conflict with EEPROM\n"); - HAL_WRITE32(SYSTEM_CTRL_BASE, 0xa4, (RegValue & (~0x10))); - } - } - - switch (UartIndex) { - case 0: - /* UART 0 */ - ACTCK_UART0_CCTRL(ON); - SLPCK_UART0_CCTRL(ON); - PinCtrl(UART0, PinmuxSelect, ON); - UART0_FCTRL(ON); - UART0_BD_FCTRL(ON); - break; - - case 1: - /* UART 1 */ - ACTCK_UART1_CCTRL(ON); - SLPCK_UART1_CCTRL(ON); - PinCtrl(UART1, PinmuxSelect, ON); - UART1_FCTRL(ON); - UART1_BD_FCTRL(ON); - break; - - case 2: - /* UART 1 */ - ACTCK_UART2_CCTRL(ON); - SLPCK_UART2_CCTRL(ON); - PinCtrl(UART2, PinmuxSelect, ON); - UART2_FCTRL(ON); - UART2_BD_FCTRL(ON); - break; - - default: - DBG_UART_ERR("Invalid UART Index(%d)\n", UartIndex); - return HAL_ERR_PARA; - } - - /* Reset RX FIFO */ - HalRuartResetRxFifoRtl8195a(Data); - DBG_UART_INFO(ANSI_COLOR_CYAN"HAL UART Init[UART %d]\n"ANSI_COLOR_RESET, UartIndex); - - /* Disable all interrupts */ - HAL_RUART_WRITE32(UartIndex, RUART_INTERRUPT_EN_REG_OFF, 0x00); - - /* Set Baudrate Division */ - if ((pHalRuartAdapter->BaudRateUsing != pHalRuartAdapter->BaudRate) || - (pHalRuartAdapter->WordLenUsing != pHalRuartAdapter->WordLen) || - (pHalRuartAdapter->ParityUsing != pHalRuartAdapter->Parity)) { - HalRuartSetBaudRateRtl8195a(pHalRuartAdapter); - } - - /** - * Clean Rx break signal interrupt status at initial stage. - */ - RegValue = HAL_RUART_READ32(UartIndex, RUART_SCRATCH_PAD_REG_OFF); - RegValue |= RUART_SP_REG_RXBREAK_INT_STATUS; - HAL_RUART_WRITE32(UartIndex, RUART_SCRATCH_PAD_REG_OFF, RegValue); - -// DBG_UART_INFO("[R] UART%d INT_EN(0x04) = %x\n", UartIndex, pHalRuartAdapter->Interrupts); - RegValue = ((pHalRuartAdapter->Interrupts) & 0xFF); - HAL_RUART_WRITE32(UartIndex, RUART_INTERRUPT_EN_REG_OFF, RegValue); -// DBG_UART_INFO("[W] UART%d INT_EN(0x04) = %x\n", UartIndex, RegValue); - - /* Configure FlowControl */ - if (pHalRuartAdapter->FlowControl == AUTOFLOW_ENABLE) { - RegValue = HAL_RUART_READ32(UartIndex, RUART_MODEM_CTL_REG_OFF); - RegValue |= RUART_MCL_AUTOFLOW_ENABLE; - HAL_RUART_WRITE32(UartIndex, RUART_MODEM_CTL_REG_OFF, RegValue); - } - - /* RUART DMA Initialization */ -// HalRuartDmaInitRtl8195a(pHalRuartAdapter); - - DBG_UART_INFO("[R] UART%d LCR(0x%02X): %X\n", UartIndex, RUART_LINE_CTL_REG_OFF, HAL_RUART_READ32(UartIndex, RUART_LINE_CTL_REG_OFF)); - RegValue = HAL_RUART_READ32(UartIndex, RUART_LINE_CTL_REG_OFF); - - /* PARITY CONTROL */ - RegValue &= BIT_CLR_LCR_WLS; - RegValue |= BIT_LCR_WLS(pHalRuartAdapter->WordLen); - - RegValue &= BIT_INVC_LCR_STB_EN; - RegValue |= BIT_LCR_STB_EN(pHalRuartAdapter->StopBit); - - RegValue &= BIT_INVC_LCR_PARITY_EN; - RegValue |= BIT_LCR_PARITY_EN(pHalRuartAdapter->Parity); - - /* PARITY TYPE SELECT */ - RegValue &= BIT_INVC_LCR_PARITY_TYPE; - RegValue |= BIT_LCR_PARITY_TYPE(pHalRuartAdapter->ParityType); - - /* STICK PARITY CONTROL */ - RegValue &= BIT_INVC_LCR_STICK_PARITY_EN; - RegValue |= BIT_LCR_STICK_PARITY_EN(pHalRuartAdapter->StickParity); - - HAL_RUART_WRITE32(UartIndex, RUART_LINE_CTL_REG_OFF, RegValue); - DBG_UART_INFO("[W] UART%d LCR(0x%02X): %X\n", UartIndex, RUART_LINE_CTL_REG_OFF, HAL_RUART_READ32(UartIndex, RUART_LINE_CTL_REG_OFF)); - - /* Need to assert RTS during initial stage. */ - if (pHalRuartAdapter->FlowControl == AUTOFLOW_ENABLE) { - HalRuartRTSCtrlRtl8195a(Data, 1); - } - pHalRuartAdapter->State = HAL_UART_STATE_READY; - - return HAL_OK; -} - -HAL_Status -HalRuartEnableRtl8195a( - IN void *Data -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - uint8_t UartIndex; - - // Enable IP Clock - UartIndex = pHalRuartAdapter->UartIndex; - switch (UartIndex) { - case 0: - /* UART 0 */ - ACTCK_UART0_CCTRL(ON); - SLPCK_UART0_CCTRL(ON); - break; - - case 1: - /* UART 1 */ - ACTCK_UART1_CCTRL(ON); - SLPCK_UART1_CCTRL(ON); - break; - - case 2: - /* UART 1 */ - ACTCK_UART2_CCTRL(ON); - SLPCK_UART2_CCTRL(ON); - break; - - default: - DBG_UART_ERR("Invalid UART Index(%d)\n", UartIndex); - return HAL_ERR_PARA; - } - - return HAL_OK; -} - -HAL_Status -HalRuartDisableRtl8195a( - IN void *Data -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - uint8_t UartIndex; - - // Gate IP Clock - UartIndex = pHalRuartAdapter->UartIndex; - switch (UartIndex) { - case 0: - /* UART 0 */ - ACTCK_UART0_CCTRL(OFF); - SLPCK_UART0_CCTRL(OFF); - break; - - case 1: - /* UART 1 */ - ACTCK_UART1_CCTRL(OFF); - SLPCK_UART1_CCTRL(OFF); - break; - - case 2: - /* UART 1 */ - ACTCK_UART2_CCTRL(OFF); - SLPCK_UART2_CCTRL(OFF); - break; - - default: - DBG_UART_ERR("Invalid UART Index(%d)\n", UartIndex); - return HAL_ERR_PARA; - } - - return HAL_OK; -} - -HAL_Status -HalRuartFlowCtrlRtl8195a( - IN void *Data -) -{ - uint32_t UartIndex; - uint32_t RegValue; - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - - UartIndex = pHalRuartAdapter->UartIndex; - - RegValue = HAL_RUART_READ32(UartIndex, RUART_MODEM_CTL_REG_OFF); - if (!pHalRuartAdapter->FlowControl) { - // No Auto Flow Control: no flow control or flow controled by software - RegValue &= ~(RUART_MCL_AUTOFLOW_ENABLE); - } - else { - RegValue |= RUART_MCL_AUTOFLOW_ENABLE; - } - HAL_RUART_WRITE32(UartIndex, RUART_MODEM_CTL_REG_OFF, RegValue); - - return HAL_OK; -} - -uint32_t -_UartTxDmaIrqHandle_Patch( - IN void *Data -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - PUART_DMA_CONFIG pUartGdmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PHAL_GDMA_OP pHalGdmaOp; - uint8_t IsrTypeMap; - - pUartGdmaConfig = pHalRuartAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pTxHalGdmaAdapter; - pHalGdmaOp = (PHAL_GDMA_OP)pUartGdmaConfig->pHalGdmaOp; - - // Clear Pending ISR - IsrTypeMap = pHalGdmaOp->HalGdmaChIsrClean((void*)pHalGdmaAdapter); - - if (IsrTypeMap & BlockType) { - pHalGdmaAdapter->MuliBlockCunt++; - } - - if (pHalGdmaAdapter->MuliBlockCunt == pHalGdmaAdapter->MaxMuliBlock) { - // Clean Auto Reload Bit - pHalGdmaOp->HalGdmaChCleanAutoDst((void*)pHalGdmaAdapter); - pHalGdmaOp->HalGdmaChDis((void*)(pHalGdmaAdapter)); - - if ((HAL_UART_STATE_BUSY_TX == pHalRuartAdapter->State) || - (HAL_UART_STATE_BUSY_TX_RX == pHalRuartAdapter->State)) { - if (pHalRuartAdapter->State == HAL_UART_STATE_BUSY_TX) { - pHalRuartAdapter->State = HAL_UART_STATE_READY; - } - else { - pHalRuartAdapter->State = HAL_UART_STATE_BUSY_RX; - } - - // Call user TX complete callback - if (NULL != pHalRuartAdapter->TxCompCallback) { - pHalRuartAdapter->TxCompCallback(pHalRuartAdapter->TxCompCbPara); - } - } - } - return 0; -} - -uint32_t -_UartRxDmaIrqHandle_Patch( - IN void *Data -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - PUART_DMA_CONFIG pUartGdmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PHAL_GDMA_OP pHalGdmaOp; - uint8_t IsrTypeMap; - uint8_t LineStatus; - uint8_t UartIndex; - - pUartGdmaConfig = pHalRuartAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pRxHalGdmaAdapter; - pHalGdmaOp = (PHAL_GDMA_OP)pUartGdmaConfig->pHalGdmaOp; - - // Clear Pending ISR - IsrTypeMap = pHalGdmaOp->HalGdmaChIsrClean((void*)pHalGdmaAdapter); - - if (IsrTypeMap & BlockType) { - pHalGdmaAdapter->MuliBlockCunt++; - } - - if ((pHalGdmaAdapter->MuliBlockCunt == pHalGdmaAdapter->MaxMuliBlock)) { - // Clean Auto Reload Bit - pHalGdmaOp->HalGdmaChCleanAutoSrc((void*)pHalGdmaAdapter); - pHalGdmaOp->HalGdmaChDis((void*)(pHalGdmaAdapter)); - - // Check the Line Status - UartIndex = pHalRuartAdapter->UartIndex; - LineStatus = (uint8_t)HAL_RUART_READ32(UartIndex, RUART_LINE_STATUS_REG_OFF); - pHalRuartAdapter->Status |= LineStatus & RUART_LINE_STATUS_ERR; - - if (pHalRuartAdapter->State == HAL_UART_STATE_BUSY_RX) { - pHalRuartAdapter->State = HAL_UART_STATE_READY; - } - else { - pHalRuartAdapter->State = HAL_UART_STATE_BUSY_TX; - } - - // Call User Rx complete callback - if (pHalRuartAdapter->RxCompCallback != NULL) { - pHalRuartAdapter->RxCompCallback (pHalRuartAdapter->RxCompCbPara); - } - } - return 0; -} - - -/** - * RUART send a data buffer by DMA(non-block) mode. - * - * RUART send data. - * - * @return void - */ -HAL_Status -HalRuartDmaSendRtl8195a_Patch( - IN void *Data, // PHAL_RUART_ADAPTER - IN uint8_t *pTxData, // the Buffer to be send - IN uint32_t Length // the length of data to be send -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)Data; -// uint8_t UartIndex = pHalRuartAdapter->UartIndex; - PUART_DMA_CONFIG pUartGdmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PHAL_GDMA_OP pHalGdmaOp; - HAL_UART_State State; - - State = pHalRuartAdapter->State; - if ((State != HAL_UART_STATE_READY) && (State != HAL_UART_STATE_BUSY_RX)) { - DBG_UART_WARN("HalRuartDmaSendRtl8195a: on Busy, State=%d\n", State); - return HAL_BUSY; - } - - if ((pTxData == NULL) || (Length == 0)) { - pHalRuartAdapter->Status = HAL_UART_STATUS_ERR_PARA; - DBG_UART_ERR("HalRuartDmaSendRtl8195a: Err: pTxData=0x%x, Length=%d\n", pTxData, Length); - return HAL_ERR_PARA; - } - - if (State == HAL_UART_STATE_READY) { - pHalRuartAdapter->State = HAL_UART_STATE_BUSY_TX; - } - else { - pHalRuartAdapter->State = HAL_UART_STATE_BUSY_TX_RX; - } - - pHalRuartAdapter->Status = HAL_UART_STATUS_OK; - pHalRuartAdapter->pTxBuf = pTxData; - pHalRuartAdapter->TxCount = Length; - - // Enable GDMA for TX - pUartGdmaConfig = pHalRuartAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pTxHalGdmaAdapter; - pHalGdmaOp = (PHAL_GDMA_OP)pUartGdmaConfig->pHalGdmaOp; - - if (((pHalRuartAdapter->TxCount & 0x03)==0) && - (((uint32_t)(pHalRuartAdapter->pTxBuf) & 0x03)==0)) { - // 4-bytes aligned, move 4 bytes each transfer - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeOne; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthFourBytes; - pHalGdmaAdapter->GdmaCtl.BlockSize = pHalRuartAdapter->TxCount >> 2; - } - else{ - // move 1 byte each transfer - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeFour; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthOneByte; - pHalGdmaAdapter->GdmaCtl.BlockSize = pHalRuartAdapter->TxCount; - } - - if (pHalGdmaAdapter->GdmaCtl.BlockSize > 4095) { - // over Maximum block size 4096 - return HAL_ERR_PARA; - } - - pHalGdmaAdapter->MuliBlockCunt = 0; - pHalGdmaAdapter->MaxMuliBlock = 1; - pHalGdmaAdapter->ChSar = (uint32_t)(pHalRuartAdapter->pTxBuf); - - pHalGdmaAdapter->Rsvd4to7 = 0; - pHalGdmaAdapter->Llpctrl = 0; - pHalGdmaAdapter->GdmaCtl.LlpSrcEn = 0; - - pHalGdmaOp->HalGdmaOnOff((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChIsrEnAndDis((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChSeting((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChEn((void*)(pHalGdmaAdapter)); - - return HAL_OK; -} - -/** - * RUART Receive data by Interrupt (non-block) mode. - * - * RUART Receive data. - * Receive one byte each time. - * - * @return uint8_t - */ -HAL_Status -HalRuartDmaRecvRtl8195a_Patch( - IN void *Data, ///< RUART Adapter - IN uint8_t *pRxData, ///< Rx buffer - IN uint32_t Length // buffer length -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - HAL_UART_State State; - PUART_DMA_CONFIG pUartGdmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PHAL_GDMA_OP pHalGdmaOp; - - State = pHalRuartAdapter->State; - if ((State != HAL_UART_STATE_READY) && (State != HAL_UART_STATE_BUSY_TX)) { - DBG_UART_WARN("%s: on Busy, State=%d\n", State); - return HAL_BUSY; - } - - if ((pRxData == NULL) || (Length == 0)) { - pHalRuartAdapter->Status = HAL_UART_STATUS_ERR_PARA; - DBG_UART_ERR("HalRuartDmaRecvRtl8195a: Err: pTxData=0x%x, Length=%d\n", pRxData, Length); - return HAL_ERR_PARA; - } - - if (State == HAL_UART_STATE_READY) { - pHalRuartAdapter->State = HAL_UART_STATE_BUSY_RX; - } - else { - pHalRuartAdapter->State = HAL_UART_STATE_BUSY_TX_RX; - } - - pHalRuartAdapter->Status = HAL_UART_STATUS_OK; - pHalRuartAdapter->pRxBuf = pRxData; - pHalRuartAdapter->RxCount = Length; - - // Enable GDMA for RX - pUartGdmaConfig = pHalRuartAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pRxHalGdmaAdapter; - pHalGdmaOp = (PHAL_GDMA_OP)pUartGdmaConfig->pHalGdmaOp; - - if (((uint32_t)(pHalRuartAdapter->pRxBuf) & 0x03)==0) { - // 4-bytes aligned, move 4 bytes each DMA transaction - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeOne; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthFourBytes; - } - else{ - // move 1 byte each DMA transaction - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeFour; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthOneByte; - } - pHalGdmaAdapter->GdmaCtl.BlockSize = pHalRuartAdapter->RxCount; - if (pHalGdmaAdapter->GdmaCtl.BlockSize > 4095) { - // over Maximum block size 4096 - DBG_UART_ERR("HalRuartDmaRecvRtl8195a: BlockSize too big(%d)\n", pHalGdmaAdapter->GdmaCtl.BlockSize); - return HAL_ERR_PARA; - } - - pHalGdmaAdapter->MuliBlockCunt = 0; - pHalGdmaAdapter->MaxMuliBlock = 1; - pHalGdmaAdapter->ChDar = (uint32_t)(pHalRuartAdapter->pRxBuf); - - pHalGdmaAdapter->Rsvd4to7 = 0; - pHalGdmaAdapter->Llpctrl = 0; - pHalGdmaAdapter->GdmaCtl.LlpSrcEn = 0; - - pHalGdmaOp->HalGdmaOnOff((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChIsrEnAndDis((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChSeting((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChEn((void*)(pHalGdmaAdapter)); - - return HAL_OK; -} - -/** - * RUART send a data buffer by Multi-Block DMA(non-block) mode. - * - * RUART send data. - * - * @return void - */ -HAL_Status -HalRuartMultiBlkDmaSendRtl8195a( - IN void *Data, // PHAL_RUART_ADAPTER - IN uint8_t *pTxData, // the Buffer to be send - IN uint32_t Length // the length of data to be send -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)Data; - PUART_DMA_CONFIG pUartGdmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PHAL_GDMA_OP pHalGdmaOp; - HAL_UART_State State; - UART_DMA_MULTIBLK *pDmaBlkList; - uint32_t BlockBytes; - uint32_t TotalTr; - uint32_t SrcAddr; - uint8_t i; - uint8_t BlkNum; - - State = pHalRuartAdapter->State; - if ((State != HAL_UART_STATE_READY) && (State != HAL_UART_STATE_BUSY_RX)) { - DBG_UART_WARN("HalRuartDmaSendRtl8195a: on Busy, State=%d\n", State); - return HAL_BUSY; - } - - if ((pTxData == NULL) || (Length == 0)) { - pHalRuartAdapter->Status = HAL_UART_STATUS_ERR_PARA; - DBG_UART_ERR("HalRuartMultiBlkDmaSendRtl8195a: Err: pTxData=0x%x, Length=%d\n", pTxData, Length); - return HAL_ERR_PARA; - } - - if (State == HAL_UART_STATE_READY) { - pHalRuartAdapter->State = HAL_UART_STATE_BUSY_TX; - } - else { - pHalRuartAdapter->State = HAL_UART_STATE_BUSY_TX_RX; - } - - pHalRuartAdapter->Status = HAL_UART_STATUS_OK; - pHalRuartAdapter->pTxBuf = pTxData; - pHalRuartAdapter->TxCount = Length; - - pUartGdmaConfig = pHalRuartAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pTxHalGdmaAdapter; - pDmaBlkList = pUartGdmaConfig->pTxDmaBlkList; - pHalGdmaOp = (PHAL_GDMA_OP)pUartGdmaConfig->pHalGdmaOp; - - if (((pHalRuartAdapter->TxCount & 0x03)==0) && - (((uint32_t)(pHalRuartAdapter->pTxBuf) & 0x03)==0)) { - // 4-bytes aligned, move 4 bytes each transfer - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeOne; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthFourBytes; - TotalTr = Length >> 2; // 4-bytes each write - BlockBytes = UART_DMA_BLOCK_SIZE << 2; // a block can transfer BlockSize*4 bytes - } - else{ - // move 1 byte each transfer - pHalGdmaAdapter->GdmaCtl.SrcMsize = MsizeFour; - pHalGdmaAdapter->GdmaCtl.SrcTrWidth = TrWidthOneByte; - TotalTr = Length; // 1-byte each write - BlockBytes = UART_DMA_BLOCK_SIZE; - } - - BlkNum = 0; - SrcAddr = (uint32_t)pTxData; - for (i=0; iGdmaChLli[i].Sarx = SrcAddr; - pDmaBlkList->GdmaChLli[i].Darx = (uint32_t) (pHalGdmaAdapter->ChDar); - pDmaBlkList->Lli[i].pLliEle = (GDMA_CH_LLI_ELE*) &(pDmaBlkList->GdmaChLli[i]); - SrcAddr += BlockBytes; - BlkNum++; - if (TotalTr >= UART_DMA_BLOCK_SIZE) { - pDmaBlkList->Lli[i].pNextLli = &(pDmaBlkList->Lli[i+1]); - pDmaBlkList->BlockSizeList[i].pNextBlockSiz = &(pDmaBlkList->BlockSizeList[i+1]); - pDmaBlkList->BlockSizeList[i].BlockSize = UART_DMA_BLOCK_SIZE; - TotalTr -= UART_DMA_BLOCK_SIZE; - } else { - pDmaBlkList->Lli[i].pNextLli = (struct GDMA_CH_LLI*)NULL; - pDmaBlkList->BlockSizeList[i].pNextBlockSiz = (struct BLOCK_SIZE_LIST*)NULL; - pDmaBlkList->BlockSizeList[i].BlockSize = TotalTr; - TotalTr = 0; - break; - } - } - - if (TotalTr > 0) { - // Cannot transfer all data in multiple-block DMA - // Try to increase block number, but maximum block number is 16 - pDmaBlkList->Lli[UART_DMA_MBLK_NUM-1].pNextLli = (struct GDMA_CH_LLI*)NULL; - pDmaBlkList->BlockSizeList[UART_DMA_MBLK_NUM-1].pNextBlockSiz = (struct BLOCK_SIZE_LIST*)NULL; - DBG_UART_ERR("HalRuartMultiBlkDmaSendRtl8195a: Cannot Transfer all data\n"); - } - - pHalGdmaAdapter->MuliBlockCunt = 0; - pHalGdmaAdapter->MaxMuliBlock = BlkNum; - pHalGdmaAdapter->Rsvd4to7 = 1; - pHalGdmaAdapter->Llpctrl = 1; - pHalGdmaAdapter->GdmaCtl.LlpSrcEn = 1; - - pHalGdmaOp->HalGdmaOnOff((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChIsrEnAndDis((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChBlockSeting((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChEn((void*)(pHalGdmaAdapter)); - - return HAL_OK; - -} - -/** - * RUART Receive data by Multi-Block DMA (non-block) mode. - * - * RUART Receive data. - * - * @return uint8_t - */ -HAL_Status -HalRuartMultiBlkDmaRecvRtl8195a( - IN void *Data, ///< RUART Adapter - IN uint8_t *pRxData, ///< Rx buffer - IN uint32_t Length // buffer length -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - HAL_UART_State State; - PUART_DMA_CONFIG pUartGdmaConfig; - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PHAL_GDMA_OP pHalGdmaOp; - UART_DMA_MULTIBLK *pDmaBlkList; - uint32_t TotalTr; - uint32_t DstAddr; - uint8_t i; - uint8_t BlkNum; - - State = pHalRuartAdapter->State; - if ((State != HAL_UART_STATE_READY) && (State != HAL_UART_STATE_BUSY_TX)) { - DBG_UART_WARN("HalRuartMultiBlkDmaRecvRtl8195a: on Busy, State=%d\n", State); - return HAL_BUSY; - } - - if ((pRxData == NULL) || (Length == 0)) { - pHalRuartAdapter->Status = HAL_UART_STATUS_ERR_PARA; - DBG_UART_ERR("HalRuartDmaRecvRtl8195a: Err: pTxData=0x%x, Length=%d\n", pRxData, Length); - return HAL_ERR_PARA; - } - - if (State == HAL_UART_STATE_READY) { - pHalRuartAdapter->State = HAL_UART_STATE_BUSY_RX; - } else { - pHalRuartAdapter->State = HAL_UART_STATE_BUSY_TX_RX; - } - - pHalRuartAdapter->Status = HAL_UART_STATUS_OK; - pHalRuartAdapter->pRxBuf = pRxData; - pHalRuartAdapter->RxCount = Length; - - pUartGdmaConfig = pHalRuartAdapter->DmaConfig; - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pRxHalGdmaAdapter; - pDmaBlkList = pUartGdmaConfig->pRxDmaBlkList; - pHalGdmaOp = (PHAL_GDMA_OP)pUartGdmaConfig->pHalGdmaOp; - - if (((uint32_t)(pHalRuartAdapter->pRxBuf) & 0x03)==0) { - // 4-bytes aligned, move 4 bytes each DMA transaction - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeOne; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthFourBytes; - } else{ - // move 1 byte each DMA transaction - pHalGdmaAdapter->GdmaCtl.DestMsize = MsizeFour; - pHalGdmaAdapter->GdmaCtl.DstTrWidth = TrWidthOneByte; - } - - TotalTr = Length; // 1-byte each write, total transaction = data lenth - BlkNum = 0; - DstAddr = (uint32_t)pRxData; - for (i=0; iGdmaChLli[i].Sarx = (uint32_t) (pHalGdmaAdapter->ChSar); - pDmaBlkList->GdmaChLli[i].Darx = DstAddr; - pDmaBlkList->Lli[i].pLliEle = (GDMA_CH_LLI_ELE*) &(pDmaBlkList->GdmaChLli[i]); - DstAddr += UART_DMA_BLOCK_SIZE; - BlkNum++; - if (TotalTr >= UART_DMA_BLOCK_SIZE) { - pDmaBlkList->Lli[i].pNextLli = &(pDmaBlkList->Lli[i+1]); - pDmaBlkList->BlockSizeList[i].pNextBlockSiz = &(pDmaBlkList->BlockSizeList[i+1]); - pDmaBlkList->BlockSizeList[i].BlockSize = UART_DMA_BLOCK_SIZE; - TotalTr -= UART_DMA_BLOCK_SIZE; - } else { - pDmaBlkList->Lli[i].pNextLli = (struct GDMA_CH_LLI*)NULL; - pDmaBlkList->BlockSizeList[i].pNextBlockSiz = (struct BLOCK_SIZE_LIST*)NULL; - pDmaBlkList->BlockSizeList[i].BlockSize = TotalTr; - TotalTr = 0; - break; - } - } - - if (TotalTr > 0) { - // Cannot transfer all data in multiple-block DMA - // Try to increase block number, but maximum block number is 16 - pDmaBlkList->Lli[UART_DMA_MBLK_NUM-1].pNextLli = (struct GDMA_CH_LLI*)NULL; - pDmaBlkList->BlockSizeList[UART_DMA_MBLK_NUM-1].pNextBlockSiz = (struct BLOCK_SIZE_LIST*)NULL; - DBG_UART_ERR("HalRuartMultiBlkDmaRecvRtl8195a: Cannot Transfer all data\n"); - } - - pHalGdmaAdapter->MuliBlockCunt = 0; - pHalGdmaAdapter->MaxMuliBlock = BlkNum; - pHalGdmaAdapter->Rsvd4to7 = 1; - pHalGdmaAdapter->Llpctrl = 1; - pHalGdmaAdapter->GdmaCtl.LlpDstEn = 1; - - pHalGdmaOp->HalGdmaOnOff((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChIsrEnAndDis((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChBlockSeting((void*)(pHalGdmaAdapter)); - pHalGdmaOp->HalGdmaChEn((void*)(pHalGdmaAdapter)); - - return HAL_OK; -} - -/** - * Stop non-blocking UART TX - * - * - * @return void - */ -HAL_Status -HalRuartStopRecvRtl8195a_Patch( - IN void *Data // PHAL_RUART_ADAPTER - ) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)Data; - PUART_DMA_CONFIG pUartGdmaConfig; - HAL_UART_State State; - uint32_t DMA_Dar; - uint32_t RecvdCnt; - - State = pHalRuartAdapter->State; - if ((State != HAL_UART_STATE_BUSY_RX) && (State != HAL_UART_STATE_BUSY_TX_RX)) { - DBG_UART_WARN("HalRuartStopRecvRtl8195a: Not in TX state, State=%d\n", State); - return HAL_OK; - } - - if (HAL_OK != RuartLock(pHalRuartAdapter)) { - DBG_UART_WARN("HalRuartStopRecvRtl8195a:Unable to Lock, Statu=%d\n", State); - return HAL_BUSY; - } - - // Disable Rx interrupt - pHalRuartAdapter->Interrupts &= ~(RUART_IER_ERBI | RUART_IER_ELSI); - HalRuartSetIMRRtl8195a (pHalRuartAdapter); - - pUartGdmaConfig = pHalRuartAdapter->DmaConfig; - if (NULL != pUartGdmaConfig) { - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PHAL_GDMA_OP pHalGdmaOp; - - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pRxHalGdmaAdapter; - pHalGdmaOp = (PHAL_GDMA_OP)pUartGdmaConfig->pHalGdmaOp; - - if ((NULL != pHalGdmaAdapter) && (NULL != pHalGdmaOp) && - (HalGdmaQueryChEnRtl8195a((void*)pHalGdmaAdapter))) { - // Clean Auto Reload Bit - pHalGdmaOp->HalGdmaChCleanAutoDst((void*)pHalGdmaAdapter); - // Clear Pending ISR -// uint8_t IsrTypeMap = - pHalGdmaOp->HalGdmaChIsrClean((void*)pHalGdmaAdapter); - pHalGdmaOp->HalGdmaChDis((void*)(pHalGdmaAdapter)); - - DMA_Dar = HalGdmaQueryDArRtl8195a((void*)pHalGdmaAdapter); - RecvdCnt = DMA_Dar - (uint32_t)(pHalRuartAdapter->pRxBuf); -// DBG_8195A("%s: got %d bytes\r\n", __FUNCTION__, RecvdCnt); - pHalRuartAdapter->RxCount -= RecvdCnt; - pHalRuartAdapter->pRxBuf += RecvdCnt; - } - } - - while (HalRuartGetCRtl8195a(pHalRuartAdapter, pHalRuartAdapter->pRxBuf) == HAL_OK) { - pHalRuartAdapter->RxCount--; - pHalRuartAdapter->pRxBuf++; - } - - if (pHalRuartAdapter->State == HAL_UART_STATE_BUSY_RX) { - pHalRuartAdapter->State = HAL_UART_STATE_READY; - } - else { - pHalRuartAdapter->State = HAL_UART_STATE_BUSY_TX; - } - - RuartUnLock(pHalRuartAdapter); - - return HAL_OK; - -} - -/** - * Stop non-blocking UART TX - * - * - * @return void - */ -HAL_Status -HalRuartStopSendRtl8195a_Patch( - IN void *Data // PHAL_RUART_ADAPTER - ) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter=(PHAL_RUART_ADAPTER)Data; - PUART_DMA_CONFIG pUartGdmaConfig; - HAL_UART_State State; - uint32_t DMA_Sar; - uint32_t TxedCnt; - - State = pHalRuartAdapter->State; - if ((State != HAL_UART_STATE_BUSY_TX) && (State != HAL_UART_STATE_BUSY_TX_RX)) { - DBG_UART_WARN("HalRuartDmaSendRtl8195a: Not in TX state, State=%d\n", State); - return HAL_OK; - } - - if (HAL_OK != RuartLock(pHalRuartAdapter)) { - DBG_UART_WARN("HalRuartDmaSendRtl8195a:Unable to Lock, Statu=%d\n", State); - return HAL_BUSY; - } - - // Disable Tx FIFO empty interrupt - pHalRuartAdapter->Interrupts &= ~RUART_IER_ETBEI; - HalRuartSetIMRRtl8195a (pHalRuartAdapter); - - pUartGdmaConfig = pHalRuartAdapter->DmaConfig; - if (NULL != pUartGdmaConfig) { - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - PHAL_GDMA_OP pHalGdmaOp; - - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pTxHalGdmaAdapter; - pHalGdmaOp = (PHAL_GDMA_OP)pUartGdmaConfig->pHalGdmaOp; - - if ((NULL != pHalGdmaAdapter) && (NULL != pHalGdmaOp) && - (HalGdmaQueryChEnRtl8195a((void*)pHalGdmaAdapter))) { - // Clean Auto Reload Bit - pHalGdmaOp->HalGdmaChCleanAutoDst((void*)pHalGdmaAdapter); - // Clear Pending ISR -// uint8_t IsrTypeMap = - pHalGdmaOp->HalGdmaChIsrClean((void*)pHalGdmaAdapter); - pHalGdmaOp->HalGdmaChDis((void*)(pHalGdmaAdapter)); - - DMA_Sar = HalGdmaQuerySArRtl8195a((void*)pHalGdmaAdapter); - TxedCnt = DMA_Sar - (uint32_t)(pHalRuartAdapter->pTxBuf); -// DBG_8195A("%s: got %d bytes\r\n", __FUNCTION__, RecvdCnt); - pHalRuartAdapter->TxCount -= TxedCnt; - pHalRuartAdapter->pTxBuf += TxedCnt; - } - } - - if (State == HAL_UART_STATE_BUSY_TX) { - pHalRuartAdapter->State = HAL_UART_STATE_READY; - } - else { - pHalRuartAdapter->State = HAL_UART_STATE_BUSY_RX; - } - - RuartUnLock(pHalRuartAdapter); - - return HAL_OK; - -} - -void -HalRuartEnterCriticalRtl8195a( - IN void *Data ///< RUART Adapter -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; -#ifdef CONFIG_GDMA_EN - PUART_DMA_CONFIG pUartGdmaConfig; -#endif - - InterruptDis(&pHalRuartAdapter->IrqHandle); - -#ifdef CONFIG_GDMA_EN - pUartGdmaConfig = pHalRuartAdapter->DmaConfig; - if (NULL != pUartGdmaConfig) { - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pRxHalGdmaAdapter; - if (pHalGdmaAdapter->ChEn != 0) { - InterruptDis(&pUartGdmaConfig->RxGdmaIrqHandle); - } - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pTxHalGdmaAdapter; - if (pHalGdmaAdapter->ChEn != 0) { - InterruptDis(&pUartGdmaConfig->TxGdmaIrqHandle); - } - } -#endif -} - -void -HalRuartExitCriticalRtl8195a( - IN void *Data ///< RUART Adapter - ) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; -#ifdef CONFIG_GDMA_EN - PUART_DMA_CONFIG pUartGdmaConfig; -#endif - - InterruptEn(&pHalRuartAdapter->IrqHandle); - -#ifdef CONFIG_GDMA_EN - pUartGdmaConfig = pHalRuartAdapter->DmaConfig; - if (NULL != pUartGdmaConfig) { - PHAL_GDMA_ADAPTER pHalGdmaAdapter; - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pRxHalGdmaAdapter; - if (pHalGdmaAdapter->ChEn != 0) { - InterruptEn(&pUartGdmaConfig->RxGdmaIrqHandle); - } - - pHalGdmaAdapter = (PHAL_GDMA_ADAPTER)pUartGdmaConfig->pTxHalGdmaAdapter; - if (pHalGdmaAdapter->ChEn != 0) { - InterruptEn(&pUartGdmaConfig->TxGdmaIrqHandle); - } - } -#endif -} - -void -HalRuartDumpRegRtl8195a( - IN void *Data -) -{ - PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER) Data; - uint8_t UartIndex; - uint32_t i; - uint32_t RegValue; - - UartIndex = pHalRuartAdapter->UartIndex; - /* Set DLAB bit to 1 to access DLL/DLM */ - RegValue = HAL_RUART_READ32(UartIndex, RUART_LINE_CTL_REG_OFF); - RegValue |= RUART_LINE_CTL_REG_DLAB_ENABLE; - HAL_RUART_WRITE32(UartIndex, RUART_LINE_CTL_REG_OFF, RegValue); - - for (i=0;i<0x40;i+=4) { - DBG_8195A("UART Reg[0x%x] = 0x%x\r\n", i, HAL_RUART_READ32(UartIndex, i)); - } - -/* clear DLAB bit */ - RegValue = HAL_RUART_READ32(UartIndex, RUART_LINE_CTL_REG_OFF); - RegValue &= ~(RUART_LINE_CTL_REG_DLAB_ENABLE); - HAL_RUART_WRITE32(UartIndex, RUART_LINE_CTL_REG_OFF, RegValue); -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_uart.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_uart.h deleted file mode 100644 index 6293c93..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_uart.h +++ /dev/null @@ -1,716 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - - -#ifndef _RTL8195A_UART_H_ -#define _RTL8195A_UART_H_ - -#define MAX_UART_INDEX 2 - -#define RUART_DLL_OFF 0x00 -#define RUART_DLM_OFF 0x04 //RW, DLAB = 1 -#define RUART_INTERRUPT_EN_REG_OFF 0x04 //RW, DLAB = 0 -// Define Interrupt Enable Bit -typedef enum { - RU_IER_ERBFI = BIT0, // Enable Received Data Available Interrupt - RU_IER_ETBEI = BIT1, // Enable Transmit Holding Register Empty Interrupt - RU_IER_ELSI = BIT2, // Enable Receiver Line Status Interrupt - RU_IER_EDSSI = BIT3, // Enable Modem Status Interrupt - RU_IER_PTIME = BIT7 // Programmable THRE Interrupt Mode Enable -} RUART_INT_EN; -#define RUART_IER_ERBI BIT0 //BIT0, Enable Received Data Available Interrupt (rx trigger) -#define RUART_IER_ETBEI BIT1 //BIT1, Enable Transmitter FIFO Empty Interrupt (tx fifo empty) -#define RUART_IER_ELSI BIT2 //BIT2, Enable Receiver Line Status Interrupt (receiver line status) -#define RUART_IER_EDSSI BIT3 //BIT3, Enable Modem Status Interrupt (modem status transition) -#define RUART_IER_PTIME BIT7 //*BIT7 PTIME, Programmable THRE Interrupt Mode Enable - -#define RUART_INT_ID_REG_OFF 0x08 //[R] -// define Log UART Interrupt Indication ID -/* -IIR[3:0]: -0000 = modem status -0001 = no interrupt pending -0010 = THR empty -0100 = received data available -0110 = receiver line status -0111 = busy detect -1100 = character timeout -*/ -typedef enum { - RU_IIR_MODEM_STATUS = 0, //Clear to send or data set ready or ring indicator or data carrier detect. - RU_IIR_NO_PENDING = 1, - RU_IIR_THR_EMPTY = 2, // TX FIFO level lower than threshold or FIFO empty - RU_IIR_RX_RDY = 4, // RX data ready - RU_IIR_RX_LINE_STATUS = 6, // Overrun/parity/framing errors or break interrupt - RU_IIR_BUSY = 7, - RU_IIR_CHAR_TIMEOUT = 12 // timeout: Rx data ready but no read -} RUART_INT_ID; -#define RUART_IIR_INT_PEND 0x01 -#define RUART_IIR_INT_ID (0x07<<1) //011(3), 010(2), 110(6), 001(1), 000(0) - -#define RUART_FIFO_CTL_REG_OFF 0x08 //[W] -// Define FIFO Control Register Bits -typedef enum { - RU_FCR_FIFO_EN = BIT0, // FIFO Enable. - RU_FCR_RST_RX = BIT1, // RCVR FIFO Reset, self clear - RU_FCR_RST_TX = BIT2, // XMIT FIFO Reset, self clear - RU_FCR_TX_TRIG_EMP = 0, // TX Empty Trigger: FIFO empty - RU_FCR_TX_TRIG_2CH = BIT4, // TX Empty Trigger: 2 characters in the FIFO - RU_FCR_TX_TRIG_QF = BIT5, // TX Empty Trigger: FIFO 1/4 full - RU_FCR_TX_TRIG_HF = (BIT5|BIT4), // TX Empty Trigger: FIFO 1/2 full - RU_FCR_TX_TRIG_MASK = (BIT5|BIT4), // TX Empty Trigger Bit Mask - RU_FCR_RX_TRIG_1CH = 0, // RCVR Trigger: 1 character in the FIFO - RU_FCR_RX_TRIG_QF = BIT6, // RCVR Trigger: FIFO 1/4 full - RU_FCR_RX_TRIG_HF = BIT7, // RCVR Trigger: FIFO 1/2 full - RU_FCR_RX_TRIG_AF = (BIT7|BIT6), // RCVR Trigger: FIFO 2 less than full - RU_FCR_RX_TRIG_MASK = (BIT7|BIT6) // RCVR Trigger bits Mask -} RUART_FIFO_CTRL; -#define RUART_FIFO_CTL_REG_FIFO_ENABLE BIT0 //BIT0, FIFO Enable -#define RUART_FIFO_CTL_REG_CLEAR_RXFIFO BIT1 //BIT1, Write 1 clear -#define RUART_FIFO_CTL_REG_CLEAR_TXFIFO BIT2 //BIT2, Write 1 clear -#define RUART_FIFO_CTL_REG_DMA_ENABLE BIT3 //BIT3 DMAM, DMA Mode -#define RUART_FIFO_CTL_REG_TET (0x03<<4) //BIT4..5 TET, TX Empty Trigger: 00 = FIFO empty, 01 = 2 characters in the FIFO, 10 = FIFO 1/4 full, 11 = FIFO 1/2 full -#define RUART_FIFO_CTL_REG_RT (0x03<<6) //BIT6..7 RT, RCVR Trigger: 00 = FIFO empty, 01 = 2 characters in the FIFO, 10 = FIFO 1/4 full, 11 = FIFO 1/2 full -#define FIFO_CTL_DEFAULT_WITH_FIFO_DMA 0xC9 -#define FIFO_CTL_DEFAULT_WITH_FIFO 0xC1 - -#define RUART_MODEM_CTL_REG_OFF 0x10 -#define RUART_MCR_DTR BIT0 //BIT0, Data Terminal Ready (DTR) -#define RUART_MCR_RTS BIT1 //*BIT1 Request to Send (RTS) -#define RUART_MCR_OUT1 BIT2 //*BIT2 User designated Output 1 (OUT1) -#define RUART_MCR_OUT2 BIT3 //*BIT3 User designated Output 2 (OUT2) -#define RUART_MCR_LOOPBACK BIT4 //*BIT4, LoopBack Bit (LOOPBACK) -#define RUART_MCL_AUTOFLOW_ENABLE BIT5 //BIT5, 0x20 - - -#define RUART_LINE_CTL_REG_OFF 0x0C -// Define Line Control Register Bits -typedef enum { - RU_LCR_DLS_5B = 0, // Data Length: 5 bits - RU_LCR_DLS_6B = BIT0, // Data Length: 6 bits - RU_LCR_DLS_7B = BIT1, // Data Length: 7 bits - RU_LCR_DLS_8B = (BIT1|BIT0), // Data Length: 7 bits - - RU_LCR_STOP_1B = 0, // Number of stop bits: 1 - RU_LCR_STOP_2B = BIT2, // Number of stop bits: 1.5(data len=5) or 2 - - RU_LCR_PARITY_NONE = 0, // Parity Enable: 0 - RU_LCR_PARITY_ODD = BIT3, // Parity Enable: 1, Even Parity: 0 - RU_LCR_PARITY_EVEN = (BIT4|BIT3), // Parity Enable: 1, Even Parity: 1 - - RU_LCR_BC = BIT6, // Break Control Bit - RU_LCR_DLAB = BIT7 // Divisor Latch Access Bit -} RUART_LINE_CTRL; -//*BIT6 Break Control Bit (BC) -//*BIT4 Even Parity Select (EPS) -//*BIT3 Parity Enable (PEN) -//*BIT2 Number of stop bits (STOP) -//*BIT1..0 Data Length Select (DLS) -#define RUART_LINE_CTL_REG_DLAB_ENABLE BIT7 //BIT7, 0x80 - -#define RUART_LINE_STATUS_REG_OFF 0x14 -// Define Line Status Bit -typedef enum { - RU_LSR_DR = BIT0, // Data Ready bit - RU_LSR_OE = BIT1, // Overrun error bit - RU_LSR_PE = BIT2, // Parity Error bit - RU_LSR_FE = BIT3, // Framing Error bit - RU_LSR_BI = BIT4, // Break Interrupt bit - RU_LSR_THRE = BIT5, // Transmit Holding Register Empty bit(IER_PTIME=0) - RU_LSR_FIFOF = BIT5, // Transmit FIFO Full bit(IER_PTIME=1) - RU_LSR_TEMT = BIT6, // Transmitter Empty bit - RU_LSR_RFE = BIT7 // Receiver FIFO Error bit -} RUART_LINE_STATUS; -#define RUART_LINE_STATUS_REG_DR BIT0 //BIT0, Data Ready indicator -#define RUART_LINE_STATUS_ERR_OVERRUN BIT1 //BIT1, Over Run -#define RUART_LINE_STATUS_ERR_PARITY BIT2 //BIT2, Parity error -#define RUART_LINE_STATUS_ERR_FRAMING BIT3 //BIT3, Framing error -#define RUART_LINE_STATUS_ERR_BREAK BIT4 //BIT4, Break interrupt error -#define RUART_LINE_STATUS_REG_THRE BIT5 //BIT5, 0x20, Transmit Holding Register Empty Interrupt enable -#define RUART_LINE_STATUS_REG_TEMT BIT6 //BIT6, 0x40, Transmitter Empty indicator(bit) -#define RUART_LINE_STATUS_ERR_RXFIFO BIT7 //BIT7, RX FIFO error -#define RUART_LINE_STATUS_ERR (RUART_LINE_STATUS_ERR_OVERRUN|RUART_LINE_STATUS_ERR_PARITY| \ - RUART_LINE_STATUS_ERR_FRAMING|RUART_LINE_STATUS_ERR_BREAK| \ - RUART_LINE_STATUS_ERR_RXFIFO) //Line status error - -#define RUART_MODEM_STATUS_REG_OFF 0x18 //Modem Status Register -//* BIT7 Data Carrier Detect (DCD) -//* BIT6 Ring Indicator (RI) -//* BIT5 Data Set Ready (DSR) -//* BIT4 Clear to Send (CTS) -//* BIT3 Delta Data Carrier Detect (DDCD) -//* BIT2 Trailing Edge of Ring Indicator (TERI) -//* BIT1 Delta Data Set Ready (DDSR) -//* BIT0 Delta Clear to Send (DCTS) -#define RUART_SCRATCH_PAD_REG_OFF 0x1C //Scratch Pad Register -#define RUART_SP_REG_RXBREAK_INT_STATUS BIT7 //BIT7, 0x80, Write 1 clear -#define RUART_SP_REG_DBG_SEL (0x0F<<8) //[11:8], Debug port selection -#define RUART_SP_REG_XFACTOR_ADJ (0x7FF<<16) //[26:16] - -#define RUART_STS_REG_OFF 0x20 -#define RUART_STS_REG_RESET_RCV BIT3 //BIT3, 0x08, Reset Uart Receiver -#define RUART_STS_REG_XFACTOR 0xF<<4 - -#define RUART_REV_BUF_REG_OFF 0x24 //Receiver Buffer Register -#define RUART_TRAN_HOLD_REG_OFF 0x24 //Transmitter Holding Register - -#define RUART_MISC_CTL_REG_OFF 0x28 -#define RUART_TXDMA_BURSTSIZE_MASK 0xF8 //7:3 -#define RUART_RXDMA_BURSTSIZE_MASK 0x1F00 //12:8 - -#define RUART_DEBUG_REG_OFF 0x3C - -// RUART_LINE_CTL_REG_OFF (0x0C) -#define BIT_SHIFT_LCR_WLS 0 // word length select: 0: 7 bits, 1: 8bits -#define BIT_MASK_LCR_WLS_8BITS 0x1 -#define BIT_LCR_WLS(x)(((x) & BIT_MASK_LCR_WLS_8BITS) << BIT_SHIFT_LCR_WLS) -#define BIT_CLR_LCR_WLS (~(BIT_MASK_LCR_WLS_8BITS << BIT_SHIFT_LCR_WLS)) - -#define BIT_SHIFT_LCR_STB 2 // Stop bit select: 0: no stop bit, 1: 1 stop bit -#define BIT_MASK_LCR_STB_EN 0x1 -#define BIT_LCR_STB_EN(x)(((x) & BIT_MASK_LCR_STB_EN) << BIT_SHIFT_LCR_STB) -#define BIT_INVC_LCR_STB_EN (~(BIT_MASK_LCR_STB_EN << BIT_SHIFT_LCR_STB)) - -#define BIT_SHIFT_LCR_PARITY_EN 3 -#define BIT_MASK_LCR_PARITY_EN 0x1 -#define BIT_LCR_PARITY_EN(x)(((x) & BIT_MASK_LCR_PARITY_EN) << BIT_SHIFT_LCR_PARITY_EN) -#define BIT_INVC_LCR_PARITY_EN (~(BIT_MASK_LCR_PARITY_EN << BIT_SHIFT_LCR_PARITY_EN)) - -#define BIT_SHIFT_LCR_PARITY_TYPE 4 -#define BIT_MASK_LCR_PARITY_TYPE 0x1 -#define BIT_LCR_PARITY_TYPE(x)(((x) & BIT_MASK_LCR_PARITY_TYPE) << BIT_SHIFT_LCR_PARITY_TYPE) -#define BIT_INVC_LCR_PARITY_TYPE (~(BIT_MASK_LCR_PARITY_TYPE << BIT_SHIFT_LCR_PARITY_TYPE)) - -#define BIT_SHIFT_LCR_STICK_PARITY_EN 5 -#define BIT_MASK_LCR_STICK_PARITY_EN 0x1 -#define BIT_LCR_STICK_PARITY_EN(x)(((x) & BIT_MASK_LCR_STICK_PARITY_EN) << BIT_SHIFT_LCR_STICK_PARITY_EN) -#define BIT_INVC_LCR_STICK_PARITY_EN (~(BIT_MASK_LCR_STICK_PARITY_EN << BIT_SHIFT_LCR_STICK_PARITY_EN)) - -#define BIT_SHIFT_LCR_BREAK_CTRL 6 -#define BIT_MASK_LCR_BREAK_CTRL 0x1 -#define BIT_UART_LCR_BREAK_CTRL ((BIT_MASK_LCR_BREAK_CTRL) << BIT_SHIFT_LCR_BREAK_CTRL) - -#define RUART_BAUD_RATE_2400 2400 -#define RUART_BAUD_RATE_4800 4800 -#define RUART_BAUD_RATE_9600 9600 -#define RUART_BAUD_RATE_19200 19200 -#define RUART_BAUD_RATE_38400 38400 -#define RUART_BAUD_RATE_57600 57600 -#define RUART_BAUD_RATE_115200 115200 -#define RUART_BAUD_RATE_921600 921600 -#define RUART_BAUD_RATE_1152000 1152000 - -#define HAL_RUART_READ32(UartIndex, addr) \ - HAL_READ32(UART0_REG_BASE+ (UartIndex*RUART_REG_OFF), addr) -#define HAL_RUART_WRITE32(UartIndex, addr, value) \ - HAL_WRITE32(UART0_REG_BASE+ (UartIndex*RUART_REG_OFF), addr, value) -#define HAL_RUART_READ16(UartIndex, addr) \ - HAL_READ16(UART0_REG_BASE+ (UartIndex*RUART_REG_OFF), addr) -#define HAL_RUART_WRITE16(UartIndex, addr, value) \ - HAL_WRITE16(UART0_REG_BASE+ (UartIndex*RUART_REG_OFF), addr, value) -#define HAL_RUART_READ8(UartIndex, addr) \ - HAL_READ8(UART0_REG_BASE+ (UartIndex*RUART_REG_OFF), addr) -#define HAL_RUART_WRITE8(UartIndex, addr, value) \ - HAL_WRITE8(UART0_REG_BASE+ (UartIndex*RUART_REG_OFF), addr, value) - -#define UART_OVSR_POOL_MIN 1000 -#define UART_OVSR_POOL_MAX 2090 -#define DIVISOR_RESOLUTION 10 -#define JITTER_LIMIT 100 -#define UART_SCLK ((HAL_SYS_CTRL_READ32(REG_SYS_SYSPLL_CTRL1) & (1<<17))? (100000000) : (200000000*5/12)) - -typedef struct _RUART_SPEED_SETTING_ { - uint32_t BaudRate; - uint32_t Ovsr; - uint32_t Div; - uint32_t Ovsr_adj; -#if defined(E_CUT_ROM_DOMAIN) || (!defined(CONFIG_RELEASE_BUILD_LIBRARIES)) - uint8_t Ovsr_adj_max_bits; // 9: No parity, 10: with Parity - uint8_t Ovsr_adj_bits; - uint16_t *Ovsr_adj_map; - uint32_t max_err; // 10 ~ 100: 30 - uint32_t Ovsr_min; // 10 ~ 20: 1000 - uint32_t Ovsr_max; // 10 ~ 20: 2000 - uint32_t divisor_resolution; // 1 ~ 20: 10 - uint32_t jitter_lim; // 50 ~ 100: 100 - uint32_t sclk; // 83.33333 MHz -#endif -}RUART_SPEED_SETTING, *PRUART_SPEED_SETTING; - -typedef enum _UART_RXFIFO_TRIGGER_LEVEL_ { - OneByte = 0x00, // 1 - FourBytes = 0x01, // 4 - EightBytes = 0x10, // 8 - FourteenBytes = 0x11 // 14 -}UART_RXFIFO_TRIGGER_LEVEL, *PUART_RXFIFO_TRIGGER_LEVEL; - -typedef enum _RUART0_PINMUX_SELECT_ { - RUART0_MUX_TO_GPIOC = S0, - RUART0_MUX_TO_GPIOE = S1, - RUART0_MUX_TO_GPIOA = S2 -}RUART0_PINMUX_SELECT, *PRUART0_PINMUX_SELECT; - -typedef enum _RUART1_PINMUX_SELECT_ { - RUART1_MUX_TO_GPIOD = S0, - RUART1_MUX_TO_GPIOE = S1, - RUART1_MUX_TO_GPIOB = S2 -}RUART1_PINMUX_SELECT, *PRUART1_PINMUX_SELECT; - -typedef enum _RUART2_PINMUX_SELECT_ { - RUART2_MUX_TO_GPIOA = S0, - RUART2_MUX_TO_GPIOC = S1, - RUART2_MUX_TO_GPIOD = S2 -}RUART2_PINMUX_SELECT, *PRUART2_PINMUX_SELECT; - -typedef enum _RUART_FLOW_CONTROL_ { - AUTOFLOW_DISABLE = 0, - AUTOFLOW_ENABLE = 1 -}RUART_FLOW_CONTROL, *PRUART_FLOW_CONTROL; - -typedef enum _RUART_WORD_LEN_SEL_ { - RUART_WLS_7BITS = 0, - RUART_WLS_8BITS = 1 -}RUART_WORD_LEN_SEL, *PRUART_WORD_LEN_SEL; - -typedef enum _RUART_STOP_BITS_ { - RUART_STOP_BIT_1 = 0, - RUART_STOP_BIT_2 = 1 -}RUART_STOP_BITS, *PRUART_STOP_BITS; - -typedef enum _RUART_PARITY_CONTROL_ { - RUART_PARITY_DISABLE = 0, - RUART_PARITY_ENABLE = 1 -}RUART_PARITY_CONTROL, *PRUART_PARITY_CONTROL; - -typedef enum _RUART_PARITY_TYPE_ { - RUART_ODD_PARITY = 0, - RUART_EVEN_PARITY = 1 -}RUART_PARITY_TYPE, *PRUART_PARITY_TYPE; - -typedef enum _RUART_STICK_PARITY_CONTROL_ { - RUART_STICK_PARITY_DISABLE = 0, - RUART_STICK_PARITY_ENABLE = 1 -}RUART_STICK_PARITY_CONTROL, *PRUART_STICK_PARITY_CONTROL; - -typedef enum _UART_INT_ID_ { - ModemStatus = 0, - TxFifoEmpty = 1, - ReceiverDataAvailable = 2, - ReceivLineStatus = 3, - TimeoutIndication = 6 -}UART_INT_ID, *PUART_INT_ID; - -typedef enum _HAL_UART_State_ -{ - HAL_UART_STATE_NULL = 0x00, // UART hardware not been initial yet - HAL_UART_STATE_READY = 0x10, // UART is initialed, ready to use - HAL_UART_STATE_BUSY = 0x20, // UART hardware is busy on configuration - HAL_UART_STATE_BUSY_TX = 0x21, // UART is buzy on TX - HAL_UART_STATE_BUSY_RX = 0x22, // UART is busy on RX - HAL_UART_STATE_BUSY_TX_RX = 0x23, // UART is busy on TX an RX - HAL_UART_STATE_TIMEOUT = 0x30, // Transfer timeout - HAL_UART_STATE_ERROR = 0x40 // UART Error -}HAL_UART_State, *PHAL_UART_State; - -typedef enum _HAL_UART_Status_ -{ - HAL_UART_STATUS_OK = 0x00, // Transfer OK - HAL_UART_STATUS_TIMEOUT = 0x01, // Transfer Timeout - HAL_UART_STATUS_ERR_OVERRUN = 0x02, // RX Over run - HAL_UART_STATUS_ERR_PARITY = 0x04, // Parity error - HAL_UART_STATUS_ERR_FRAM = 0x08, // Framing Error - HAL_UART_STATUS_ERR_BREAK = 0x10, // Break Interrupt - HAL_UART_STATUS_ERR_PARA = 0x20, // Parameter error - HAL_UART_STATUS_ERR_RXFIFO = 0x80, // RX FIFO error -}HAL_UART_Status, *PHAL_UART_Status; - -uint32_t -HalRuartGetDebugValueRtl8195a( - IN void* Data, - IN uint32_t DbgSel - ); - -#if 0 -uint32_t -FindElementIndex( - uint32_t Element, - uint32_t* Array - ); -#endif - -void -RuartResetRxFifoRtl8195a( - IN uint8_t UartIndex - ); -#if 0 -void -RuartBusDomainEnableRtl8195a( - IN uint8_t UartIndex - ); -#endif - -HAL_Status -HalRuartResetRxFifoRtl8195a( - IN void *Data - ); - -HAL_Status -HalRuartInitRtl8195a( - IN void *Data - ); - -void -HalRuartDeInitRtl8195a( - IN void *Data ///< RUART Adapter - ); - -HAL_Status -HalRuartPutCRtl8195a( - IN void *Data, - IN uint8_t TxData - ); - -uint32_t -HalRuartSendRtl8195a( - IN void *Data, - IN uint8_t *pTxData, - IN uint32_t Length, - IN uint32_t Timeout - ); - -HAL_Status -HalRuartIntSendRtl8195a( - IN void *Data, // PHAL_RUART_ADAPTER - IN uint8_t *pTxData, // the Buffer to be send - IN uint32_t Length // the length of data to be send - ); - -HAL_Status -HalRuartDmaSendRtl8195a( - IN void *Data, // PHAL_RUART_ADAPTER - IN uint8_t *pTxData, // the Buffer to be send - IN uint32_t Length // the length of data to be send -); - -HAL_Status -HalRuartStopSendRtl8195a( - IN void *Data // PHAL_RUART_ADAPTER -); - -HAL_Status -HalRuartGetCRtl8195a( - IN void *Data, - OUT uint8_t *pRxByte - ); - -uint32_t -HalRuartRecvRtl8195a( - IN void *Data, - IN uint8_t *pRxData, - IN uint32_t Length, - IN uint32_t Timeout - ); - -HAL_Status -HalRuartIntRecvRtl8195a( - IN void *Data, ///< RUART Adapter - IN uint8_t *pRxData, ///< Rx buffer - IN uint32_t Length // buffer length - ); - -HAL_Status -HalRuartDmaRecvRtl8195a( - IN void *Data, ///< RUART Adapter - IN uint8_t *pRxData, ///< Rx buffer - IN uint32_t Length // buffer length - ); - -HAL_Status -HalRuartStopRecvRtl8195a( - IN void *Data // PHAL_RUART_ADAPTER -); - -uint8_t -HalRuartGetIMRRtl8195a( - IN void *Data - ); - -_LONG_CALL_ROM_ void -HalRuartSetIMRRtl8195a( - IN void *Data - ); - -void -HalRuartDmaInitRtl8195a( - IN void *Data - ); - -void -HalRuartRTSCtrlRtl8195a( - IN void *Data, - IN BOOLEAN RtsCtrl - ); - -void -HalRuartRegIrqRtl8195a( - IN void *Data - ); - -void -HalRuartIntEnableRtl8195a( - IN void *Data - ); - -void -HalRuartIntDisableRtl8195a( - IN void *Data - ); - -void -HalRuartAdapterLoadDefRtl8195a( - IN void *pAdp, - IN uint8_t UartIdx -); - -void -HalRuartTxGdmaLoadDefRtl8195a( - IN void *pAdp, - IN void *pCfg -); - -void -HalRuartRxGdmaLoadDefRtl8195a( - IN void *pAdp, - IN void *pCfg -); - -_LONG_CALL_ HAL_Status HalRuartIntSendRtl8195aV02( - IN void *Data, // PHAL_RUART_ADAPTER - IN uint8_t *pTxData, // the Buffer to be send - IN uint32_t Length // the length of data to be send -); - -_LONG_CALL_ HAL_Status -HalRuartIntRecvRtl8195aV02( - IN void *Data, ///< RUART Adapter - IN uint8_t *pRxData, ///< Rx buffer - IN uint32_t Length // buffer length -); - -_LONG_CALL_ int32_t -FindElementIndex_v02( - uint32_t Element, ///< RUART Baudrate - uint32_t* Array, ///< Pre-defined Baudrate Array - uint32_t ElementNo -); - -_LONG_CALL_ HAL_Status HalRuartInitRtl8195a_v02(IN void *Data); - -// New added function 2015/04/20 -HAL_Status -HalRuartResetTxFifoRtl8195a( - IN void *Data ///< RUART Adapter - ); - -HAL_Status -HalRuartResetRxFifoRtl8195a_Patch( - IN void *Data ///< RUART Adapter -); - -HAL_Status -HalRuartResetTRxFifoRtl8195a( - IN void *Data ///< RUART Adapter -); - -HAL_Status -HalRuartSetBaudRateRtl8195a( - IN void *Data - ); - -HAL_Status -HalRuartEnableRtl8195a( - IN void *Data -); - -HAL_Status -HalRuartDisableRtl8195a( - IN void *Data -); - -HAL_Status -HalRuartFlowCtrlRtl8195a( - IN void *Data -); - -uint32_t -_UartTxDmaIrqHandle_Patch( - IN void *Data -); - -uint32_t -_UartRxDmaIrqHandle_Patch( - IN void *Data -); - -HAL_Status -HalRuartDmaSendRtl8195a_Patch( - IN void *Data, - IN uint8_t *pTxData, - IN uint32_t Length -); - -HAL_Status -HalRuartDmaRecvRtl8195a_Patch( - IN void *Data, - IN uint8_t *pRxData, - IN uint32_t Length -); - -HAL_Status -HalRuartMultiBlkDmaSendRtl8195a( - IN void *Data, - IN uint8_t *pTxData, - IN uint32_t Length -); - -HAL_Status -HalRuartMultiBlkDmaRecvRtl8195a( - IN void *Data, - IN uint8_t *pRxData, - IN uint32_t Length -); - -HAL_Status -RuartIsTimeout ( - uint32_t StartCount, - uint32_t TimeoutCnt -); - -HAL_Status -HalRuartStopRecvRtl8195a_Patch( - IN void *Data -); - -HAL_Status -HalRuartStopSendRtl8195a_Patch( - IN void *Data -); - -void -HalRuartEnterCriticalRtl8195a( - IN void *Data -); - -void -HalRuartExitCriticalRtl8195a( - IN void *Data -); - -#if CONFIG_CHIP_E_CUT -_LONG_CALL_ HAL_Status -HalRuartResetTxFifoRtl8195a_V04( - IN void *Data ///< RUART Adapter -); - -_LONG_CALL_ HAL_Status -HalRuartResetRxFifoRtl8195a_V04( - IN void *Data ///< RUART Adapter -); - -_LONG_CALL_ HAL_Status -HalRuartResetTRxFifoRtl8195a_V04( - IN void *Data ///< RUART Adapter -); - -_LONG_CALL_ HAL_Status -HalRuartSetBaudRateRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ HAL_Status -HalRuartInitRtl8195a_V04( - IN void *Data ///< RUART Adapter -); - -_LONG_CALL_ HAL_Status -HalRuartEnableRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ HAL_Status -HalRuartDisableRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ HAL_Status -HalRuartFlowCtrlRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ uint32_t -_UartTxDmaIrqHandle_V04( - IN void *Data -); - -_LONG_CALL_ uint32_t -_UartRxDmaIrqHandle_V04( - IN void *Data -); - -_LONG_CALL_ HAL_Status -HalRuartDmaSendRtl8195a_V04( - IN void *Data, - IN uint8_t *pTxData, - IN uint32_t Length -); - -_LONG_CALL_ HAL_Status -HalRuartDmaRecvRtl8195a_V04( - IN void *Data, - IN uint8_t *pRxData, - IN uint32_t Length -); - -_LONG_CALL_ HAL_Status -HalRuartMultiBlkDmaSendRtl8195a_V04( - IN void *Data, - IN uint8_t *pTxData, - IN uint32_t Length -); - -_LONG_CALL_ HAL_Status -HalRuartMultiBlkDmaRecvRtl8195a_V04( - IN void *Data, - IN uint8_t *pRxData, - IN uint32_t Length -); - -_LONG_CALL_ HAL_Status -HalRuartStopRecvRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ HAL_Status -HalRuartStopSendRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ void -HalRuartEnterCriticalRtl8195a_V04( - IN void *Data -); - -_LONG_CALL_ void -HalRuartExitCriticalRtl8195a_V04( - IN void *Data -); - -#endif // #if CONFIG_CHIP_E_CUT - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_usb.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_usb.h deleted file mode 100644 index b2fa051..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_usb.h +++ /dev/null @@ -1,432 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _RTL8195A_USB_H_ -#define _RTL8195A_USB_H_ - - -// common command for USB -#define USB_CMD_TX_ETH 0x83 // request to TX a 802.3 packet -#define USB_CMD_TX_WLN 0x81 // request to TX a 802.11 packet -#define USB_CMD_H2C 0x11 // H2C(host to device) command packet -#define USB_CMD_MEMRD 0x51 // request to read a block of memory data -#define USB_CMD_MEMWR 0x53 // request to write a block of memory -#define USB_CMD_MEMST 0x55 // request to set a block of memory with a value -#define USB_CMD_STARTUP 0x61 // request to jump to the start up function - -#define USB_CMD_RX_ETH 0x82 // indicate a RX 802.3 packet -#define USB_CMD_RX_WLN 0x80 // indicate a RX 802.11 packet -#define USB_CMD_C2H 0x10 // C2H(device to host) command packet -#define USB_CMD_MEMRD_RSP 0x50 // response to memory block read command -#define USB_CMD_MEMWR_RSP 0x52 // response to memory write command -#define USB_CMD_MEMST_RSP 0x54 // response to memory set command -#define USB_CMD_STARTED 0x60 // indicate the program has jumped to the given function - - -// TODO: This data structer just for test, we should modify it for the normal driver -typedef struct _USB_TX_DESC{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t txpktsize:16; // bit[15:0] - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number -#else - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t txpktsize:16; // bit[15:0] -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the packet type - uint32_t rsvd0:24; -#else - uint32_t rsvd0:24; - uint32_t type:8; // bit[7:0], the packet type -#endif - - // u4Byte 2 - uint32_t rsvd1; - - // u4Byte 3 - uint32_t rsvd2; - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} USB_TX_DESC, *PUSB_TX_DESC; - -#define SIZE_USB_TX_DESC sizeof(USB_TX_DESC) - -// TX Desc for Memory Write command -typedef struct _USB_TX_DESC_MW{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t txpktsize:16; // bit[15:0] - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number -#else - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t txpktsize:16; // bit[15:0] -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the packet type - uint32_t reply:1; // bit[8], request to send a reply message - uint32_t rsvd0:23; -#else - uint32_t rsvd0:23; - uint32_t reply:1; // bit[8], request to send a reply message - uint32_t type:8; // bit[7:0], the packet type -#endif - - // u4Byte 2 - uint32_t start_addr; // memory write start address - - // u4Byte 3 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t write_len:16; // bit[15:0], the length to write - uint32_t rsvd2:16; // bit[31:16] -#else - uint32_t rsvd2:16; // bit[31:16] - uint32_t write_len:16; // bit[15:0], the length to write -#endif - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} USB_TX_DESC_MW, *PUSB_TX_DESC_MW; - -// TX Desc for Memory Read command -typedef struct _USB_TX_DESC_MR{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t txpktsize:16; // bit[15:0] - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number -#else - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t txpktsize:16; // bit[15:0] -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the packet type - uint32_t rsvd0:24; -#else - uint32_t rsvd0:24; - uint32_t type:8; // bit[7:0], the packet type -#endif - - // u4Byte 2 - uint32_t start_addr; // memory write start address - - // u4Byte 3 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t read_len:16; // bit[15:0], the length to read - uint32_t rsvd2:16; // bit[31:16] -#else - uint32_t rsvd2:16; // bit[31:16] - uint32_t read_len:16; // bit[15:0], the length to read -#endif - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} USB_TX_DESC_MR, *PUSB_TX_DESC_MR; - -// TX Desc for Memory Set command -typedef struct _USB_TX_DESC_MS{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t txpktsize:16; // bit[15:0] - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number -#else - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t txpktsize:16; // bit[15:0] -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the packet type - uint32_t data:8; // bit[8:15], the value to be written to the memory - uint32_t reply:1; // bit[16], request to send a reply message - uint32_t rsvd0:15; -#else - uint32_t rsvd0:15; - uint32_t reply:1; // bit[16], request to send a reply message - uint32_t data:8; // bit[8:15], the value to be written to the memory - uint32_t type:8; // bit[7:0], the packet type -#endif - - // u4Byte 2 - uint32_t start_addr; // memory write start address - - // u4Byte 3 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t write_len:16; // bit[15:0], the length to write - uint32_t rsvd2:16; // bit[31:16] -#else - uint32_t rsvd2:16; // bit[31:16] - uint32_t write_len:16; // bit[15:0], the length to write -#endif - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} USB_TX_DESC_MS, *PUSB_TX_DESC_MS; - -// TX Desc for Jump to Start command -typedef struct _USB_TX_DESC_JS{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t txpktsize:16; // bit[15:0] - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number -#else - uint32_t bus_agg_num:8; // bit[31:24], the bus aggregation number - uint32_t offset:8; // bit[23:16], store the sizeof(SDIO_TX_DESC) - uint32_t txpktsize:16; // bit[15:0] -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the packet type - uint32_t rsvd0:24; -#else - uint32_t rsvd0:24; - uint32_t type:8; // bit[7:0], the packet type -#endif - - // u4Byte 2 - uint32_t start_fun; // the pointer of the startup function - - // u4Byte 3 - uint32_t rsvd2; - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} USB_TX_DESC_JS, *PUSB_TX_DESC_JS; - -typedef struct _USB_RX_DESC{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t pkt_len:16; // bit[15:0], the packet size - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t rsvd0:6; // bit[29:24] - uint32_t icv:1; // bit[30], ICV error - uint32_t crc:1; // bit[31], CRC error -#else - uint32_t crc:1; // bit[31], CRC error - uint32_t icv:1; // bit[30], ICV error - uint32_t rsvd0:6; // bit[29:24] - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t pkt_len:16; // bit[15:0], the packet size -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the type of this packet - uint32_t rsvd1:24; // bit[31:8] -#else - uint32_t rsvd1:24; // bit[31:8] - uint32_t type:8; // bit[7:0], the type of this packet -#endif - - // u4Byte 2 - uint32_t rsvd2; - - // u4Byte 3 - uint32_t rsvd3; - - // u4Byte 4 - uint32_t rsvd4; - - // u4Byte 5 - uint32_t rsvd5; -} USB_RX_DESC, *PUSB_RX_DESC; - - -// For memory read command -typedef struct _USB_RX_DESC_MR{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t pkt_len:16; // bit[15:0], the packet size - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t rsvd0:8; // bit[31:24] -#else - uint32_t rsvd0:8; // bit[31:24] - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t pkt_len:16; // bit[15:0], the packet size -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the type of this packet - uint32_t rsvd1:24; // bit[31:8] -#else - uint32_t rsvd1:24; // bit[31:8] - uint32_t type:8; // bit[7:0], the type of this packet -#endif - - // u4Byte 2 - uint32_t start_addr; - - // u4Byte 3 - uint32_t rsvd2; - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} USB_RX_DESC_MR, *PUSB_RX_DESC_MR; - -// For memory write reply command -typedef struct _USB_RX_DESC_MW{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t pkt_len:16; // bit[15:0], the packet size - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t rsvd0:8; // bit[31:24] -#else - uint32_t rsvd0:8; // bit[31:24] - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t pkt_len:16; // bit[15:0], the packet size -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the type of this packet - uint32_t rsvd1:24; // bit[31:8] -#else - uint32_t rsvd1:24; // bit[31:8] - uint32_t type:8; // bit[7:0], the type of this packet -#endif - - // u4Byte 2 - uint32_t start_addr; - - // u4Byte 3 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t write_len:16; // bit[15:0], the type of this packet - uint32_t result:8; // bit[23:16], the result of memory write command - uint32_t rsvd2:8; // bit[31:24] -#else - uint32_t rsvd2:8; // bit[31:24] - uint32_t result:8; // bit[23:16], the result of memory write command - uint32_t write_len:16; // bit[15:0], the type of this packet -#endif - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} USB_RX_DESC_MW, *PUSB_RX_DESC_MW; - -// For memory set reply command -typedef struct _USB_RX_DESC_MS{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t pkt_len:16; // bit[15:0], the packet size - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t rsvd0:8; // bit[31:24] -#else - uint32_t rsvd0:8; // bit[31:24] - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t pkt_len:16; // bit[15:0], the packet size -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the type of this packet - uint32_t rsvd1:24; // bit[31:8] -#else - uint32_t rsvd1:24; // bit[31:8] - uint32_t type:8; // bit[7:0], the type of this packet -#endif - - // u4Byte 2 - uint32_t start_addr; - - // u4Byte 3 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t write_len:16; // bit[15:0], the type of this packet - uint32_t result:8; // bit[23:16], the result of memory write command - uint32_t rsvd2:8; // bit[31:24] -#else - uint32_t rsvd2:8; // bit[31:24] - uint32_t result:8; // bit[23:16], the result of memory write command - uint32_t write_len:16; // bit[15:0], the type of this packet -#endif - - // u4Byte 4 - uint32_t rsvd3; - - // u4Byte 5 - uint32_t rsvd4; -} USB_RX_DESC_MS, *PUSB_RX_DESC_MS; - -// For firmware ready reply command -typedef struct _USB_RX_DESC_FS{ - // u4Byte 0 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t pkt_len:16; // bit[15:0], the packet size - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t rsvd0:8; // bit[31:24] -#else - uint32_t rsvd0:8; // bit[31:24] - uint32_t offset:8; // bit[23:16], the offset from the packet start to the buf start, also means the size of RX Desc - uint32_t pkt_len:16; // bit[15:0], the packet size -#endif - - // u4Byte 1 -#if (SYSTEM_ENDIAN==PLATFORM_LITTLE_ENDIAN) - uint32_t type:8; // bit[7:0], the type of this packet - uint32_t rsvd1:24; // bit[31:8] -#else - uint32_t rsvd1:24; // bit[31:8] - uint32_t type:8; // bit[7:0], the type of this packet -#endif - - // u4Byte 2 - uint32_t rsvd2; - - // u4Byte 3 - uint32_t rsvd3; - - // u4Byte 4 - uint32_t rsvd4; - - // u4Byte 5 - uint32_t rsvd5; -} USB_RX_DESC_FS, *PUSB_RX_DESC_FS; - - -#define SIZE_USB_RX_DESC sizeof(USB_RX_DESC) - -#endif // #ifndef _RTL8195A_USB_H_ - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_wdt.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_wdt.h deleted file mode 100644 index 081cdcc..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_wdt.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2014 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _RTL8195A_WDT_H_ -#define _RTL8195A_WDT_H_ - -#define WDGTIMERELY (10*1024) //us - -typedef struct _WDG_REG_ { - uint16_t WdgScalar; - uint8_t WdgEnByte; - uint8_t WdgClear:1; - uint8_t WdgCunLimit:4; - uint8_t Rsvd:1; - uint8_t WdgMode:1; - uint8_t WdgToISR:1; -}WDG_REG, *PWDG_REG; - -typedef struct _WDG_ADAPTER_ { - - WDG_REG Ctrl; - IRQ_HANDLE IrqHandle; - TIMER_ADAPTER WdgGTimer; - void (*UserCallback)(uint32_t callback_id); // User callback function - uint32_t callback_id; -}WDG_ADAPTER, *PWDG_ADAPTER; - -typedef enum _WDG_CNTLMT_ { - CNT1H = 0, - CNT3H = 1, - CNT7H = 2, - CNTFH = 3, - CNT1FH = 4, - CNT3FH = 5, - CNT7FH = 6, - CNTFFH = 7, - CNT1FFH = 8, - CNT3FFH = 9, - CNT7FFH = 10, - CNTFFFH = 11 -}WDG_CNTLMT, *PWDG_CNTLMT; - - -typedef enum _WDG_MODE_ { - INT_MODE = 0, - RESET_MODE = 1 -}WDG_MODE, *PWDG_MODE; - -extern void -WDGInitial( - IN uint32_t Period -); - -extern void -WDGIrqInitial( - void -); - -extern void -WDGIrqInitial( - void -); - -extern void -WDGStop( - void -); - -extern void -WDGRefresh( - void -); - -extern void -WDGIrqCallBackReg( - IN void *CallBack, - IN uint32_t Id -); - -#endif //_RTL8195A_WDT_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/image/ram_1.p.bin b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/image/ram_1.p.bin deleted file mode 100644 index 26db83a..0000000 Binary files a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/image/ram_1.p.bin and /dev/null differ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/image/ram_1.r.bin b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/image/ram_1.r.bin deleted file mode 100644 index e0a9791..0000000 Binary files a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/image/ram_1.r.bin and /dev/null differ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/export-rom_v04.txt b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/export-rom_v04.txt deleted file mode 100644 index 6d0a421..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/export-rom_v04.txt +++ /dev/null @@ -1,739 +0,0 @@ -SECTIONS -{ - __vectors_table = 0x0; - Reset_Handler = 0x101; - NMI_Handler = 0x109; - HardFault_Handler = 0x10d; - MemManage_Handler = 0x121; - BusFault_Handler = 0x125; - UsageFault_Handler = 0x129; - HalLogUartInit = 0x201; - HalSerialPutcRtl8195a = 0x2d9; - HalSerialGetcRtl8195a = 0x309; - HalSerialGetIsrEnRegRtl8195a = 0x329; - HalSerialSetIrqEnRegRtl8195a = 0x335; - HalCpuClkConfig = 0x341; - HalGetCpuClk = 0x355; - HalRomInfo = 0x39d; - HalGetRomInfo = 0x3b5; - HalResetVsr = 0x3c5; - HalDelayUs = 0x899; - HalNMIHandler = 0x8e1; - HalHardFaultHandler = 0x911; - HalMemManageHandler = 0xc09; - HalBusFaultHandler = 0xc39; - HalUsageFaultHandler = 0xc69; - HalUart0PinCtrlRtl8195A = 0xcfd; - HalUart1PinCtrlRtl8195A = 0xdc9; - HalUart2PinCtrlRtl8195A = 0xe9d; - HalSPI0PinCtrlRtl8195A = 0xf75; - HalSPI1PinCtrlRtl8195A = 0x1015; - HalSPI2PinCtrlRtl8195A = 0x10e5; - HalSPI0MCSPinCtrlRtl8195A = 0x11b5; - HalI2C0PinCtrlRtl8195A = 0x1275; - HalI2C1PinCtrlRtl8195A = 0x1381; - HalI2C2PinCtrlRtl8195A = 0x1459; - HalI2C3PinCtrlRtl8195A = 0x1529; - HalI2S0PinCtrlRtl8195A = 0x1639; - HalI2S1PinCtrlRtl8195A = 0x176d; - HalPCM0PinCtrlRtl8195A = 0x1845; - HalPCM1PinCtrlRtl8195A = 0x1949; - HalSDIODPinCtrlRtl8195A = 0x1a1d; - HalSDIOHPinCtrlRtl8195A = 0x1a6d; - HalMIIPinCtrlRtl8195A = 0x1ab9; - HalWLLEDPinCtrlRtl8195A = 0x1b51; - HalWLANT0PinCtrlRtl8195A = 0x1c0d; - HalWLANT1PinCtrlRtl8195A = 0x1c61; - HalWLBTCOEXPinCtrlRtl8195A = 0x1cb5; - HalWLBTCMDPinCtrlRtl8195A = 0x1d05; - HalNFCPinCtrlRtl8195A = 0x1d59; - HalPWM0PinCtrlRtl8195A = 0x1da9; - HalPWM1PinCtrlRtl8195A = 0x1ead; - HalPWM2PinCtrlRtl8195A = 0x1fb5; - HalPWM3PinCtrlRtl8195A = 0x20b1; - HalETE0PinCtrlRtl8195A = 0x21b9; - HalETE1PinCtrlRtl8195A = 0x22c1; - HalETE2PinCtrlRtl8195A = 0x23c9; - HalETE3PinCtrlRtl8195A = 0x24d1; - HalEGTIMPinCtrlRtl8195A = 0x25d9; - HalSPIFlashPinCtrlRtl8195A = 0x2679; - HalSDRPinCtrlRtl8195A = 0x2725; - HalJTAGPinCtrlRtl8195A = 0x280d; - HalTRACEPinCtrlRtl8195A = 0x2861; - HalLOGUartPinCtrlRtl8195A = 0x28b9; - HalLOGUartIRPinCtrlRtl8195A = 0x291d; - HalSICPinCtrlRtl8195A = 0x2981; - HalEEPROMPinCtrlRtl8195A = 0x29d9; - HalDEBUGPinCtrlRtl8195A = 0x2a31; - HalPinCtrlRtl8195A = 0x2b39; - SpicRxCmdRtl8195A = 0x2e5d; - SpicWaitBusyDoneRtl8195A = 0x2ea5; - SpicGetFlashStatusRtl8195A = 0x2eb5; - SpicWaitWipDoneRtl8195A = 0x2f55; - SpicTxCmdRtl8195A = 0x2f6d; - SpicSetFlashStatusRtl8195A = 0x2fc1; - SpicCmpDataForCalibrationRtl8195A = 0x3049; - SpicLoadInitParaFromClockRtl8195A = 0x3081; - SpicInitRtl8195A = 0x30e5; - SpicEraseFlashRtl8195A = 0x31bd; - SpiFlashApp = 0x3279; - HalPeripheralIntrHandle = 0x33b5; - HalSysOnIntrHandle = 0x3439; - HalWdgIntrHandle = 0x3485; - HalTimer0IntrHandle = 0x34d5; - HalTimer1IntrHandle = 0x3525; - HalI2C3IntrHandle = 0x3575; - HalTimer2To7IntrHandle = 0x35c5; - HalSpi0IntrHandle = 0x3615; - HalGpioIntrHandle = 0x3665; - HalUart0IntrHandle = 0x36b5; - HalSpiFlashIntrHandle = 0x3705; - HalUsbOtgIntrHandle = 0x3755; - HalSdioHostIntrHandle = 0x37a5; - HalI2s0OrPcm0IntrHandle = 0x37f5; - HalI2s1OrPcm1IntrHandle = 0x3845; - HalWlDmaIntrHandle = 0x3895; - HalWlProtocolIntrHandle = 0x38e5; - HalCryptoIntrHandle = 0x3935; - HalGmacIntrHandle = 0x3985; - HalGdma0Ch0IntrHandle = 0x39d5; - HalGdma0Ch1IntrHandle = 0x3a25; - HalGdma0Ch2IntrHandle = 0x3a75; - HalGdma0Ch3IntrHandle = 0x3ac5; - HalGdma0Ch4IntrHandle = 0x3b15; - HalGdma0Ch5IntrHandle = 0x3b65; - HalGdma1Ch0IntrHandle = 0x3bb5; - HalGdma1Ch1IntrHandle = 0x3c05; - HalGdma1Ch2IntrHandle = 0x3c55; - HalGdma1Ch3IntrHandle = 0x3ca5; - HalGdma1Ch4IntrHandle = 0x3cf5; - HalGdma1Ch5IntrHandle = 0x3d45; - HalSdioDeviceIntrHandle = 0x3d95; - VectorTableInitRtl8195A = 0x3de5; - txt0123456789ABCDEF = 0x3ec24; - VectorTableInitForOSRtl8195A = 0x4019; - VectorIrqRegisterRtl8195A = 0x4029; - VectorIrqUnRegisterRtl8195A = 0x4091; - VectorIrqEnRtl8195A = 0x40f1; - VectorIrqDisRtl8195A = 0x418d; - _UartRxDmaIrqHandle = 0x422d; - HalRuartPutCRtl8195a = 0x4281; - HalRuartGetCRtl8195a = 0x429d; - HalRuartRTSCtrlRtl8195a = 0x42bd; - HalRuartGetDebugValueRtl8195a = 0x42e1; - HalRuartGetIMRRtl8195a = 0x43e1; - HalRuartSetIMRRtl8195a = 0x442d; - _UartIrqHandle = 0x4465; - HalRuartDmaInitRtl8195a = 0x4681; - HalRuartIntDisableRtl8195a = 0x4845; - HalRuartDeInitRtl8195a = 0x4855; - HalRuartIntEnableRtl8195a = 0x4985; - _UartTxDmaIrqHandle = 0x4995; - HalRuartRegIrqRtl8195a = 0x49d1; - HalRuartAdapterLoadDefRtl8195a = 0x4a4d; - HalRuartTxGdmaLoadDefRtl8195a = 0x4add; - HalRuartRxGdmaLoadDefRtl8195a = 0x4bc9; - RuartLock = 0x4cc9; - RuartUnLock = 0x4ced; - HalRuartIntSendRtl8195a = 0x4d09; - HalRuartDmaSendRtl8195a = 0x4e35; - HalRuartStopSendRtl8195a = 0x4f89; - HalRuartIntRecvRtl8195a = 0x504d; - HalRuartDmaRecvRtl8195a = 0x51ad; - HalRuartStopRecvRtl8195a = 0x52cd; - RuartIsTimeout = 0x5385; - HalRuartSendRtl8195a = 0x53b1; - HalRuartRecvRtl8195a = 0x5599; - RuartResetRxFifoRtl8195a = 0x5751; - HalRuartResetRxFifoRtl8195a = 0x5775; - HalRuartInitRtl8195a = 0x5829; - HalGdmaOnOffRtl8195a = 0x5df1; - HalGdmaChIsrEnAndDisRtl8195a = 0x5e0d; - HalGdmaChEnRtl8195a = 0x5e51; - HalGdmaChDisRtl8195a = 0x5e6d; - HalGdamChInitRtl8195a = 0x5e91; - HalGdmaChSetingRtl8195a = 0x5ebd; - HalGdmaChBlockSetingRtl8195a = 0x000060dd; - HalGdmaChIsrCleanRtl8195a = 0x6419; - HalGdmaChCleanAutoSrcRtl8195a = 0x64a1; - HalGdmaChCleanAutoDstRtl8195a = 0x6501; - HalEFUSEPowerSwitch8195AROM = 0x6561; - HALEFUSEOneByteReadROM = 0x65f9; - HALEFUSEOneByteWriteROM = 0x6699; - __rtl_memcmpb_v1_00 = 0x681d; - __rtl_random_v1_00 = 0x6861; - __rtl_align_to_be32_v1_00 = 0x6881; - __rtl_memsetw_v1_00 = 0x6899; - __rtl_memsetb_v1_00 = 0x68ad; - __rtl_memcpyw_v1_00 = 0x68bd; - __rtl_memcpyb_v1_00 = 0x68dd; - __rtl_memDump_v1_00 = 0x68f5; - __rtl_AES_set_encrypt_key = 0x6901; - __rtl_cryptoEngine_AES_set_decrypt_key = 0x6c11; - __rtl_cryptoEngine_set_security_mode_v1_00 = 0x6c95; - __rtl_cryptoEngine_init_v1_00 = 0x6ea9; - __rtl_cryptoEngine_exit_v1_00 = 0x7055; - __rtl_cryptoEngine_reset_v1_00 = 0x70b1; - __rtl_cryptoEngine_v1_00 = 0x70ed; - __rtl_crypto_cipher_init_v1_00 = 0x7c69; - __rtl_crypto_cipher_encrypt_v1_00 = 0x7c89; - __rtl_crypto_cipher_decrypt_v1_00 = 0x7cad; - HalSsiPinmuxEnableRtl8195a = 0x7cd5; - HalSsiEnableRtl8195a = 0x7e45; - HalSsiDisableRtl8195a = 0x7ef9; - HalSsiLoadSettingRtl8195a = 0x7fad; - HalSsiSetInterruptMaskRtl8195a = 0x8521; - HalSsiGetInterruptMaskRtl8195a = 0x85c9; - HalSsiSetSclkPolarityRtl8195a = 0x863d; - HalSsiSetSclkPhaseRtl8195a = 0x8715; - HalSsiWriteRtl8195a = 0x87e9; - HalSsiSetDeviceRoleRtl8195a = 0x8861; - HalSsiSetRxFifoThresholdLevelRtl8195a = 0x88c9; - HalSsiSetTxFifoThresholdLevelRtl8195a = 0x8941; - HalSsiReadRtl8195a = 0x89b9; - HalSsiGetRxFifoLevelRtl8195a = 0x8a2d; - HalSsiGetTxFifoLevelRtl8195a = 0x8aa5; - HalSsiGetStatusRtl8195a = 0x8b1d; - HalSsiWriteableRtl8195a = 0x8b91; - HalSsiReadableRtl8195a = 0x8c09; - HalSsiBusyRtl8195a = 0x8c81; - HalSsiReadInterruptRtl8195a = 0x8cf9; - HalSsiWriteInterruptRtl8195a = 0x8efd; - HalSsiSetSlaveEnableRegisterRtl8195a = 0x9009; - HalSsiGetInterruptStatusRtl8195a = 0x90d9; - HalSsiInterruptEnableRtl8195a = 0x914d; - HalSsiInterruptDisableRtl8195a = 0x9299; - HalSsiGetRawInterruptStatusRtl8195a = 0x93e9; - HalSsiGetSlaveEnableRegisterRtl8195a = 0x945d; - HalSsiInitRtl8195a = 0x94d1; - _SsiReadInterrupt = 0x9ba5; - _SsiWriteInterrupt = 0x9db1; - _SsiIrqHandle = 0x9eb1; - HalI2CWrite32 = 0xa061; - HalI2CRead32 = 0xa09d; - HalI2CDeInit8195a = 0xa0dd; - HalI2CSendRtl8195a = 0xa1f1; - HalI2CReceiveRtl8195a = 0xa25d; - HalI2CEnableRtl8195a = 0xa271; - HalI2CIntrCtrl8195a = 0xa389; - HalI2CReadRegRtl8195a = 0xa3a1; - HalI2CWriteRegRtl8195a = 0xa3b1; - HalI2CSetCLKRtl8195a = 0xa3c5; - HalI2CMassSendRtl8195a = 0xa6e9; - HalI2CClrIntrRtl8195a = 0xa749; - HalI2CClrAllIntrRtl8195a = 0xa761; - HalI2CInit8195a = 0xa775; - HalI2CDMACtrl8195a = 0xaa31; - RtkI2CIoCtrl = 0xaa61; - RtkI2CPowerCtrl = 0xaa65; - HalI2COpInit = 0xaa69; - I2CIsTimeout = 0xac65; - I2CTXGDMAISRHandle = 0xb435; - I2CRXGDMAISRHandle = 0xb4c1; - RtkI2CIrqInit = 0xb54d; - RtkI2CIrqDeInit = 0xb611; - RtkI2CPinMuxInit = 0xb675; - RtkI2CPinMuxDeInit = 0xb7c9; - RtkI2CDMAInit = 0xb955; - RtkI2CInit = 0xbc95; - RtkI2CDMADeInit = 0xbdad; - RtkI2CDeInit = 0xbe4d; - RtkI2CSendUserAddr = 0xbee5; - RtkI2CSend = 0xc07d; - _RtkI2CReceive = 0x0c6dd; - RtkI2CLoadDefault = 0xce51; - RtkSalI2COpInit = 0xcf21; - HalI2SWrite32 = 0xcf65; - HalI2SRead32 = 0xcf85; - HalI2SDeInitRtl8195a = 0xcfa9; - HalI2STxRtl8195a = 0xcfc9; - HalI2SRxRtl8195a = 0xd011; - HalI2SEnableRtl8195a = 0xd05d; - HalI2SIntrCtrlRtl8195a = 0xd0b1; - HalI2SReadRegRtl8195a = 0xd0d1; - HalI2SClrIntrRtl8195a = 0xd0dd; - HalI2SClrAllIntrRtl8195a = 0xd0fd; - HalI2SInitRtl8195a = 0xd11d; - GPIO_GetIPPinName_8195a = 0xd2e5; - GPIO_GetChipPinName_8195a = 0xd331; - GPIO_PullCtrl_8195a = 0xd39d; - GPIO_FuncOn_8195a = 0xd421; - GPIO_FuncOff_8195a = 0xd481; - GPIO_Int_Mask_8195a = 0xd4e9; - GPIO_Int_SetType_8195a = 0xd511; - HAL_GPIO_IrqHandler_8195a = 0xd5fd; - HAL_GPIO_MbedIrqHandler_8195a = 0xd645; - HAL_GPIO_UserIrqHandler_8195a = 0xd6a1; - HAL_GPIO_IntCtrl_8195a = 0xd6cd; - HAL_GPIO_Init_8195a = 0xd805; - HAL_GPIO_DeInit_8195a = 0xdac1; - HAL_GPIO_ReadPin_8195a = 0xdbd1; - HAL_GPIO_WritePin_8195a = 0xdc91; - HAL_GPIO_RegIrq_8195a = 0xddad; - HAL_GPIO_UnRegIrq_8195a = 0xddf5; - HAL_GPIO_UserRegIrq_8195a = 0xde15; - HAL_GPIO_UserUnRegIrq_8195a = 0xdef9; - HAL_GPIO_MaskIrq_8195a = 0xdfc1; - HAL_GPIO_UnMaskIrq_8195a = 0xe061; - HAL_GPIO_IntDebounce_8195a = 0xe101; - HAL_GPIO_GetIPPinName_8195a = 0xe1c1; - HAL_GPIO_PullCtrl_8195a = 0xe1c9; - DumpForOneBytes = 0xe259; - CmdRomHelp = 0xe419; - CmdWriteWord = 0xe491; - CmdDumpHelfWord = 0xe505; - CmdDumpWord = 0xe5f1; - CmdDumpByte = 0xe6f5; - CmdSpiFlashTool = 0xe751; - GetRomCmdNum = 0xe7a9; - CmdWriteByte = 0xe7ad; - Isspace = 0xe7ed; - Strtoul = 0xe801; - ArrayInitialize = 0xe8b1; - GetArgc = 0xe8c9; - GetArgv = 0xe8f9; - UartLogCmdExecute = 0xe95d; - UartLogShowBackSpace = 0xe9fd; - UartLogRecallOldCmd = 0xea39; - UartLogHistoryCmd = 0xea71; - UartLogCmdChk = 0xeadd; - UartLogIrqHandle = 0xebf5; - RtlConsolInit = 0xecc5; - RtlConsolTaskRom = 0xed49; - RtlExitConsol = 0xed79; - RtlConsolRom = 0xedcd; - HalTimerOpInit = 0xee0d; - HalTimerIrq2To7Handle = 0xee59; - HalGetTimerIdRtl8195a = 0xef09; - HalTimerInitRtl8195a = 0xef3d; - HalTimerDisRtl8195a = 0xf069; /* error! */ - HalTimerEnRtl8195a = 0xf089; /* error! */ - HalTimerReadCountRtl8195a = 0xf0a9; - HalTimerIrqClearRtl8195a = 0xf0bd; - HalTimerDumpRegRtl8195a = 0xf0d1; - VSprintf = 0xf129; - DiagPrintf = 0xf39d; - DiagSPrintf = 0xf3b9; - DiagSnPrintf = 0xf3d1; - prvDiagPrintf = 0xf3ed; - prvDiagSPrintf = 0xf40d; - _memcmp = 0xf429; - _memcpy = 0xf465; - _memset = 0xf511; - Rand = 0xf585; - _strncpy = 0xf60d; - _strcpy = 0xf629; - prvStrCpy = 0xf639; - _strlen = 0xf651; - _strnlen = 0xf669; - prvStrLen = 0xf699; - _strcmp = 0xf6b1; - _strncmp = 0xf6d1; - prvStrCmp = 0xf719; - StrUpr = 0xf749; - prvAtoi = 0xf769; - prvStrStr = 0xf7bd; - _strsep = 0xf7d5; - skip_spaces = 0xf815; - skip_atoi = 0xf831; - _parse_integer_fixup_radix = 0xf869; - _parse_integer = 0xf8bd; - simple_strtoull = 0xf915; - simple_strtoll = 0xf945; - simple_strtoul = 0xf965; - simple_strtol = 0xf96d; - _vsscanf = 0xf985; - _sscanf = 0xff71; - div_u64 = 0xff91; - div_s64 = 0xff99; - div_u64_rem = 0xffa1; - div_s64_rem = 0xffb1; - _strpbrk = 0xffc1; - _strchr = 0xffed; - aes_set_key = 0x10005; - aes_encrypt = 0x103d1; - aes_decrypt = 0x114a5; - AES_WRAP = 0x125c9; - AES_UnWRAP = 0x12701; - crc32_get = 0x12861; - arc4_byte = 0x12895; - rt_arc4_init = 0x128bd; - rt_arc4_crypt = 0x12901; - rt_md5_init = 0x131c1; - rt_md5_append = 0x131f5; - rt_md5_final = 0x1327d; - rt_md5_hmac = 0x132d5; - rtw_get_bit_value_from_ieee_value = 0x13449; - rtw_is_cckrates_included = 0x13475; - rtw_is_cckratesonly_included = 0x134b5; - rtw_check_network_type = 0x134dd; - rtw_set_fixed_ie = 0x1350d; - rtw_set_ie = 0x1352d; - rtw_get_ie = 0x1355d; - rtw_set_supported_rate = 0x13591; - rtw_get_rateset_len = 0x13611; - rtw_get_wpa_ie = 0x1362d; - rtw_get_wpa2_ie = 0x136c9; - rtw_get_wpa_cipher_suite = 0x13701; - rtw_get_wpa2_cipher_suite = 0x13769; - rtw_parse_wpa_ie = 0x137d1; - rtw_parse_wpa2_ie = 0x138ad; - rtw_get_sec_ie = 0x13965; - rtw_get_wps_ie = 0x13a15; - rtw_get_wps_attr = 0x13a99; - rtw_get_wps_attr_content = 0x13b49; - rtw_ieee802_11_parse_elems = 0x13b91; - str_2char2num = 0x13d9d; - key_2char2num = 0x13db9; - convert_ip_addr = 0x13dd1; - rom_psk_PasswordHash = 0x13e9d; - rom_psk_CalcGTK = 0x13ed5; - rom_psk_CalcPTK = 0x13f69; - wep_80211_encrypt = 0x14295; - wep_80211_decrypt = 0x142f5; - tkip_micappendbyte = 0x14389; - rtw_secmicsetkey = 0x143d9; - rtw_secmicappend = 0x14419; - rtw_secgetmic = 0x14435; - rtw_seccalctkipmic = 0x1449d; - tkip_phase1 = 0x145a5; - tkip_phase2 = 0x14725; - tkip_80211_encrypt = 0x14941; - tkip_80211_decrypt = 0x149d5; - aes1_encrypt = 0x14a8d; - aesccmp_construct_mic_iv = 0x14c65; - aesccmp_construct_mic_header1 = 0x14ccd; - aesccmp_construct_mic_header2 = 0x14d21; - aesccmp_construct_ctr_preload = 0x14db5; - aes_80211_encrypt = 0x14e29; - aes_80211_decrypt = 0x151ad; - _sha1_process_message_block = 0x155b9; - _sha1_pad_message = 0x15749; - rt_sha1_init = 0x157e5; - rt_sha1_update = 0x15831; - rt_sha1_finish = 0x158a9; - rt_hmac_sha1 = 0x15909; - rom_aes_128_cbc_encrypt = 0x15a65; - rom_aes_128_cbc_decrypt = 0x15ae1; - rom_rijndaelKeySetupEnc = 0x15b5d; - rom_aes_decrypt_init = 0x15c39; - rom_aes_internal_decrypt = 0x15d15; - rom_aes_decrypt_deinit = 0x16071; - rom_aes_encrypt_init = 0x16085; - rom_aes_internal_encrypt = 0x1609d; - rom_aes_encrypt_deinit = 0x16451; - bignum_init = 0x17b35; - bignum_deinit = 0x17b61; - bignum_get_unsigned_bin_len = 0x17b81; - bignum_get_unsigned_bin = 0x17b85; - bignum_set_unsigned_bin = 0x17c21; - bignum_cmp = 0x17cd1; - bignum_cmp_d = 0x17cd5; - bignum_add = 0x17cfd; - bignum_sub = 0x17d0d; - bignum_mul = 0x17d1d; - bignum_exptmod = 0x17d2d; - WPS_realloc = 0x17d51; - os_zalloc = 0x17d99; - rom_hmac_sha256_vector = 0x17dc1; - rom_hmac_sha256 = 0x17ebd; - rom_sha256_vector = 0x18009; - phy_CalculateBitShift = 0x18221; - PHY_SetBBReg_8195A = 0x18239; - PHY_QueryBBReg_8195A = 0x18279; - ROM_odm_QueryRxPwrPercentage = 0x1829d; - ROM_odm_EVMdbToPercentage = 0x182bd; - ROM_odm_SignalScaleMapping_8195A = 0x182e5; - ROM_odm_FalseAlarmCounterStatistics = 0x183cd; - ROM_odm_SetEDCCAThreshold = 0x18721; - ROM_odm_SetTRxMux = 0x18749; - ROM_odm_SetCrystalCap = 0x18771; - ROM_odm_GetDefaultCrytaltalCap = 0x187d5; - ROM_ODM_CfoTrackingReset = 0x187e9; - ROM_odm_CfoTrackingFlow = 0x18811; - curve25519_donna = 0x1965d; - aes_test_alignment_detection = 0x1a391; - aes_mode_reset = 0x1a3ed; - aes_ecb_encrypt = 0x1a3f9; - aes_ecb_decrypt = 0x1a431; - aes_cbc_encrypt = 0x1a469; - aes_cbc_decrypt = 0x1a579; - aes_cfb_encrypt = 0x1a701; - aes_cfb_decrypt = 0x1a9e5; - aes_ofb_crypt = 0x1acc9; - aes_ctr_crypt = 0x1af7d; - aes_encrypt_key128 = 0x1b289; - aes_encrypt_key192 = 0x1b2a5; - aes_encrypt_key256 = 0x1b2c1; - aes_encrypt_key = 0x1b2e1; - aes_decrypt_key128 = 0x1b351; - aes_decrypt_key192 = 0x1b36d; - aes_decrypt_key256 = 0x1b389; - aes_decrypt_key = 0x1b3a9; - aes_init = 0x1b419; - CRYPTO_chacha_20 = 0x1b41d; - CRYPTO_poly1305_init = 0x1bc25; - CRYPTO_poly1305_update = 0x1bd09; - CRYPTO_poly1305_finish = 0x1bd8d; - rom_sha512_starts = 0x1ceb5; - rom_sha512_update = 0x1d009; - rom_sha512_finish = 0x1d011; - rom_sha512 = 0x1d261; - rom_sha512_hmac_starts = 0x1d299; - rom_sha512_hmac_update = 0x1d35d; - rom_sha512_hmac_finish = 0x1d365; - rom_sha512_hmac_reset = 0x1d3b5; - rom_sha512_hmac = 0x1d3d1; - rom_sha512_hkdf = 0x1d40d; - rom_ed25519_gen_keypair = 0x1d501; - rom_ed25519_gen_signature = 0x1d505; - rom_ed25519_verify_signature = 0x1d51d; - rom_ed25519_crypto_sign_seed_keypair = 0x1d521; - rom_ed25519_crypto_sign_detached = 0x1d579; - rom_ed25519_crypto_sign_verify_detached = 0x1d655; - rom_ed25519_ge_double_scalarmult_vartime = 0x1f86d; - rom_ed25519_ge_frombytes_negate_vartime = 0x1fc35; - rom_ed25519_ge_p3_tobytes = 0x207d5; - rom_ed25519_ge_scalarmult_base = 0x20821; - rom_ed25519_ge_tobytes = 0x209e1; - rom_ed25519_sc_muladd = 0x20a2d; - rom_ed25519_sc_reduce = 0x2603d; - __rtl_memchr_v1_00 = 0x28a4d; - __rtl_memcmp_v1_00 = 0x28ae1; - __rtl_memcpy_v1_00 = 0x28b49; - __aeabi_memcpy = 0x28b49; - __aeabi_memcpy4 = 0x28b49; - __rtl_memmove_v1_00 = 0x28bed; - __rtl_memset_v1_00 = 0x28cb5; - __aeabi_memset = 0x28cb5; - __rtl_strcat_v1_00 = 0x28d49; - __rtl_strchr_v1_00 = 0x28d91; - __rtl_strcmp_v1_00 = 0x28e55; - __rtl_strcpy_v1_00 = 0x28ec9; - __rtl_strlen_v1_00 = 0x28f15; - __rtl_strncat_v1_00 = 0x28f69; - __rtl_strncmp_v1_00 = 0x28fc5; - __rtl_strncpy_v1_00 = 0x2907d; - __rtl_strstr_v1_00 = 0x293cd; - __rtl_strsep_v1_00 = 0x2960d; - __rtl_strtok_v1_00 = 0x29619; - __rtl__strtok_r_v1_00 = 0x2962d; - __rtl_strtok_r_v1_00 = 0x29691; - __rtl_close_v1_00 = 0x29699; - __rtl_fstat_v1_00 = 0x296ad; - __rtl_isatty_v1_00 = 0x296c1; - __rtl_lseek_v1_00 = 0x296d5; - __rtl_open_v1_00 = 0x296e9; - __rtl_read_v1_00 = 0x296fd; - __rtl_write_v1_00 = 0x29711; - __rtl_sbrk_v1_00 = 0x29725; - __rtl_ltoa_v1_00 = 0x297bd; - __rtl_ultoa_v1_00 = 0x29855; - __rtl_dtoi_v1_00 = 0x298c5; - __rtl_dtoi64_v1_00 = 0x29945; - __rtl_dtoui_v1_00 = 0x299dd; - __rtl_ftol_v1_00 = 0x299e5; - __rtl_itof_v1_00 = 0x29a51; - __rtl_itod_v1_00 = 0x29ae9; - __rtl_i64tod_v1_00 = 0x29b79; - __rtl_uitod_v1_00 = 0x29c55; - __rtl_ftod_v1_00 = 0x29d2d; - __rtl_dtof_v1_00 = 0x29de9; - __rtl_uitof_v1_00 = 0x29e89; - __rtl_fadd_v1_00 = 0x29f65; - __rtl_fsub_v1_00 = 0x2a261; - __rtl_fmul_v1_00 = 0x2a559; - __rtl_fdiv_v1_00 = 0x2a695; - __rtl_dadd_v1_00 = 0x2a825; - __rtl_dsub_v1_00 = 0x2aed9; - __rtl_dmul_v1_00 = 0x2b555; - __rtl_ddiv_v1_00 = 0x2b8ad; - __rtl_dcmpeq_v1_00 = 0x2be4d; - __rtl_dcmplt_v1_00 = 0x2bebd; - __rtl_dcmpgt_v1_00 = 0x2bf51; - __rtl_dcmple_v1_00 = 0x2c049; - __rtl_fcmplt_v1_00 = 0x2c139; - __rtl_fcmpgt_v1_00 = 0x2c195; - __rtl_cos_f32_v1_00 = 0x2c229; - __rtl_sin_f32_v1_00 = 0x2c435; - __rtl_fabs_v1_00 = 0x2c639; - __rtl_fabsf_v1_00 = 0x2c641; - __rtl_dtoa_r_v1_00 = 0x2c77d; - __rom_mallocr_init_v1_00 = 0x2d7d1; - __rtl_free_r_v1_00 = 0x2d841; - __rtl_malloc_r_v1_00 = 0x2da31; - __rtl_realloc_r_v1_00 = 0x2df55; - __rtl_memalign_r_v1_00 = 0x2e331; - __rtl_valloc_r_v1_00 = 0x2e421; - __rtl_pvalloc_r_v1_00 = 0x2e42d; - __rtl_calloc_r_v1_00 = 0x2e441; - __rtl_cfree_r_v1_00 = 0x2e4a9; - __rtl_Balloc_v1_00 = 0x2e515; - __rtl_Bfree_v1_00 = 0x2e571; - __rtl_i2b_v1_00 = 0x2e585; - __rtl_multadd_v1_00 = 0x2e599; - __rtl_mult_v1_00 = 0x2e629; - __rtl_pow5mult_v1_00 = 0x2e769; - __rtl_hi0bits_v1_00 = 0x2e809; - __rtl_d2b_v1_00 = 0x2e845; - __rtl_lshift_v1_00 = 0x2e901; - __rtl_cmp_v1_00 = 0x2e9bd; - __rtl_diff_v1_00 = 0x2ea01; - __rtl_sread_v1_00 = 0x2eae9; - __rtl_seofread_v1_00 = 0x2eb39; - __rtl_swrite_v1_00 = 0x2eb3d; - __rtl_sseek_v1_00 = 0x2ebc1; - __rtl_sclose_v1_00 = 0x2ec11; - __rtl_sbrk_r_v1_00 = 0x2ec41; - __rtl_fflush_r_v1_00 = 0x2ef8d; - __rtl_vfprintf_r_v1_00 = 0x2f661; - __rtl_fpclassifyd = 0x30c15; - CpkClkTbl = 0x30c68; - ROM_IMG1_VALID_PATTEN = 0x30c80; - SpicCalibrationPattern = 0x30c88; - SpicInitCPUCLK = 0x30c98; - BAUDRATE = 0x30ca8; - OVSR = 0x30d1c; - DIV = 0x30d90; - OVSR_ADJ = 0x30e04; - __AES_rcon = 0x30e78; - __AES_Te4 = 0x30ea0; - I2CDmaChNo = 0x312a0; - _GPIO_PinMap_Chip2IP_8195a = 0x312b4; - _GPIO_PinMap_PullCtrl_8195a = 0x3136c; - _GPIO_SWPORT_DDR_TBL = 0x31594; - _GPIO_EXT_PORT_TBL = 0x31598; - _GPIO_SWPORT_DR_TBL = 0x3159c; - UartLogRomCmdTable = 0x316a0; - _HalRuartOp = 0x31700; - _HalGdmaOp = 0x31760; - RTW_WPA_OUI_TYPE = 0x3540c; - WPA_CIPHER_SUITE_NONE = 0x35410; - WPA_CIPHER_SUITE_WEP40 = 0x35414; - WPA_CIPHER_SUITE_TKIP = 0x35418; - WPA_CIPHER_SUITE_CCMP = 0x3541c; - WPA_CIPHER_SUITE_WEP104 = 0x35420; - RSN_CIPHER_SUITE_NONE = 0x35424; - RSN_CIPHER_SUITE_WEP40 = 0x35428; - RSN_CIPHER_SUITE_TKIP = 0x3542c; - RSN_CIPHER_SUITE_CCMP = 0x35430; - RSN_CIPHER_SUITE_WEP104 = 0x35434; - RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X = 0x35444; - RSN_AUTH_KEY_MGMT_UNSPEC_802_1X = 0x35448; - RSN_VERSION_BSD = 0x3544c; - rom_wps_Te0 = 0x35988; - rom_wps_rcons = 0x35d88; - rom_wps_Td4s = 0x35d94; - rom_wps_Td0 = 0x35e94; - str_rom_57ch3Dch0A = 0x3ed05; /* "========================================================\n" */ - str_rom_0123456789ABCDEF = 0x3ec24; /* "0123456789ABCDEF" */ - str_rom_hex_addr = 0x442D6; /* "[Addr] .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F\r\n" */ - str_rom_0123456789abcdef = 0x44660; /* "0123456789abcdef" */ - __rom_b_cut_end__ = 0x4467c; - __rom_c_cut_text_start__ = 0x4467c; - HalInitPlatformLogUartV02 = 0x4467d; - HalReInitPlatformLogUartV02 = 0x4471d; - HalInitPlatformTimerV02 = 0x44755; - HalShowBuildInfoV02 = 0x447cd; - SpicReleaseDeepPowerDownFlashRtl8195A = 0x44831; - HalSpiInitV02 = 0x4488d; - HalBootFlowV02 = 0x44a29; - HalInitialROMCodeGlobalVarV02 = 0x44ae5; - HalResetVsrV02 = 0x44b41; - HalI2CSendRtl8195aV02 = 0x44ce1; - HalI2CSetCLKRtl8195aV02 = 0x44d59; - RtkI2CSendV02 = 0x4508d; - RtkI2CReceiveV02 = 0x459a1; - HalI2COpInitV02 = 0x461ed; - I2CISRHandleV02 = 0x463e9; - RtkSalI2COpInitV02 = 0x46be1; - SpicLoadInitParaFromClockRtl8195AV02 = 0x46c25; - SpiFlashAppV02 = 0x46c85; - SpicInitRtl8195AV02 = 0x46dc5; - SpicEraseFlashRtl8195AV02 = 0x46ea1; - HalTimerIrq2To7HandleV02 = 0x46f5d; - HalTimerIrqRegisterRtl8195aV02 = 0x46fe1; - HalTimerInitRtl8195aV02 = 0x4706d; - HalTimerReadCountRtl8195aV02 = 0x471b5; - HalTimerReLoadRtl8195aV02 = 0x471d1; - HalTimerIrqUnRegisterRtl8195aV02 = 0x4722d; - HalTimerDeInitRtl8195aV02 = 0x472c1; - HalTimerOpInitV02 = 0x472f9; - GPIO_LockV02 = 0x47345; - GPIO_UnLockV02 = 0x47379; - GPIO_Int_Clear_8195aV02 = 0x473a5; - HAL_GPIO_IntCtrl_8195aV02 = 0x473b5; - FindElementIndexV02 = 0x47541; - HalRuartInitRtl8195aV02 = 0x4756d; - DramInit_rom = 0x47619; - ChangeRandSeed_rom = 0x47979; - Sdr_Rand2_rom = 0x47985; - MemTest_rom = 0x479dd; - SdrCalibration_rom = 0x47a45; - SdrControllerInit_rom = 0x47d99; - SDIO_EnterCritical = 0x47e39; - SDIO_ExitCritical = 0x47e85; - SDIO_IRQ_Handler_Rom = 0x47ec5; - SDIO_Interrupt_Init_Rom = 0x47f31; - SDIO_Device_Init_Rom = 0x47f81; - SDIO_Interrupt_DeInit_Rom = 0x48215; - SDIO_Device_DeInit_Rom = 0x48255; - SDIO_Enable_Interrupt_Rom = 0x48281; - SDIO_Disable_Interrupt_Rom = 0x482a1; - SDIO_Clear_ISR_Rom = 0x482c1; - SDIO_Alloc_Rx_Pkt_Rom = 0x482d9; - SDIO_Free_Rx_Pkt_Rom = 0x48331; - SDIO_Recycle_Rx_BD_Rom = 0x48355; - SDIO_RX_IRQ_Handler_BH_Rom = 0x484f1; - SDIO_RxTask_Rom = 0x4851d; - SDIO_Process_H2C_IOMsg_Rom = 0x4856d; - SDIO_Send_C2H_IOMsg_Rom = 0x4859d; - SDIO_Process_RPWM_Rom = 0x485b5; - SDIO_Reset_Cmd_Rom = 0x485e9; - SDIO_Rx_Data_Transaction_Rom = 0x48611; - SDIO_Send_C2H_PktMsg_Rom = 0x48829; - SDIO_Register_Tx_Callback_Rom = 0x488f5; - SDIO_ReadMem_Rom = 0x488fd; - SDIO_WriteMem_Rom = 0x489a9; - SDIO_SetMem_Rom = 0x48a69; - SDIO_TX_Pkt_Handle_Rom = 0x48b29; - SDIO_TX_FIFO_DataReady_Rom = 0x48c69; - SDIO_IRQ_Handler_BH_Rom = 0x48d95; - SDIO_TxTask_Rom = 0x48e9d; - SDIO_TaskUp_Rom = 0x48eed; - SDIO_Boot_Up = 0x48f55; - __rom_c_cut_text_end__ = 0x49070; - __rom_c_cut_rodata_start__ = 0x49070; - BAUDRATE_v02 = 0x49070; - OVSR_v02 = 0x490fc; - DIV_v02 = 0x49188; - OVSR_ADJ_v02 = 0x49214; - SdrDramInfo_rom = 0x492a0; /* DRAM_DEVICE_INFO *DramInfo */ - SdrDramTiming_rom = 0x492b4; - SdrDramModeReg_rom = 0x492e8; - SdrDramDev_rom = 0x49304; - __rom_c_cut_rodata_end__ = 0x49314; - - /* RAM data used in ROM */ - - __ram_image_start__ = 0x10000000; - __rom_bss_start__ = 0x10000300; - __ram_start_table_start__ = 0x10000bc8; - __rom_bss_end__ = 0x10000bc8; - - /* BOOT-LOADER */ - - gRamStartFun = 0x10000bc8; /* HalResetVsrV02(), HalResetVsr() */ - gRamPatchWAKE = 0x10000bcc; /* HalResetVsrV02(), HalResetVsr() */ - gRamPatchFun0 = 0x10000bd0; /* HalResetVsrV02(), HalResetVsr() */ - gRamPatchFun1 = 0x10000bd4; /* HalResetVsrV02(), HalResetVsr() */ - gRamPatchFun2 = 0x10000bd8; /* HalResetVsrV02(), HalResetVsr() */ - __image1_validate_code__ = 0x10000bdc; /* 8 bytes HalResetVsrV02(), HalResetVsr() */ - - -/* __ram_image_end__ = 0x10002100; */ - - /* End RAM data used in ROM */ - - /* 1006D000..1006F998: data SDIO_Device_Init_Rom(), SDIO_Boot_Up(), SDIO_TX_Pkt_Handle_Rom(),.. */ -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/lib_platform_new.bat b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/lib_platform_new.bat deleted file mode 100644 index d065674..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/lib_platform_new.bat +++ /dev/null @@ -1,19 +0,0 @@ -set libname=lib_platform -del %libname%_new.a -md %libname%.lib -cd %libname%.lib -PATH=D:\MCU\GNU_Tools_ARM_Embedded\5.2_2015q4\bin;%PATH% -arm-none-eabi-ar.exe x ..\%libname%.a -del hal_efuse.o -del hal_common.o -del freertos_pmu_8195a.o -del hal_soc_ps_monitor.o -del app_start.o -del hal_log_uart.o -del hal_pinmux.o -del hal_misc.o -del startup.o -rem del hal_spi_flash_ram.o -arm-none-eabi-ar.exe ru ..\%libname%_new.a *.o -cd .. -rem rd /q /s %libname%.lib diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/rlx8195A-symbol-v04-img2.ld b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/rlx8195A-symbol-v04-img2.ld deleted file mode 100644 index ee6e374..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/rlx8195A-symbol-v04-img2.ld +++ /dev/null @@ -1,257 +0,0 @@ - -ENTRY(Reset_Handler) -ENTRY(main) - -INCLUDE "export-rom_v04.txt" - -MEMORY -{ - ROM (rx) : ORIGIN = 0x000000, LENGTH = 1M /* end 0x00100000 */ - ROM_USED_RAM (rwx): ORIGIN = 0x10000000, LENGTH = 0x2400 /* end 0x10002400 */ - BOOT_RAM (rwx) : ORIGIN = 0x10000bc8, LENGTH = 21560 /* end 0x10006000 */ - ROM_HEAP (rwx) : ORIGIN = 0x10002400, LENGTH = 3K /* end 0x10003000 */ - RAM_HEAP1 (rwx) : ORIGIN = 0x10003000, LENGTH = 12K /* end 0x10006000 */ - BD_RAM (rwx) : ORIGIN = 0x10006000, LENGTH = 424K /* end 0x10070000 */ - TCM (rwx) : ORIGIN = 0x1FFF0000, LENGTH = 64K /* end 0x20000000 */ - TCM_TAB (rwx) : ORIGIN = 0x1FFFFD00, LENGTH = 768 /* end 0x20000000 */ - SDRAM_RAM (rwx) : ORIGIN = 0x30000000, LENGTH = 2M /* end 0x30200000 */ -} - -EXTERN(RAM_IMG2_VALID_PATTEN) -EXTERN(InfraStart) - -SECTIONS -{ - /* 0x00000000: ROM */ - - .rom : - { - __rom_image_start__ = .; - KEEP(*(.rom)); - __rom_image_end__ = .; - } > ROM - - /* 0x10000000: SRAM */ - - .rom_ram : /* use in rom */ - { - __ram_image_start__ = .; - KEEP(*(.ram_dedecated_vector_table)) /* 0x10000000: NewVectorTable */ - KEEP(*(.ram_user_define_irq_table)) /* 0x10000100: UserIrqFunTable */ - KEEP(*(.ram_user_define_data_table)) /* 0x10000200: UserIrqDataTable */ - __rom_bss_start__ = .; - KEEP(*(.hal.ram.bss)) /* 0x10000300: CfgSysDebugWarn .. _pHAL_Gpio_Adapter */ - KEEP(*(.timer2_7_vector_table.data)) /* 0x10000358: Timer2To7VectorTable */ - KEEP(*(.infra.ram.bss)) /* 0x10000370: first .. z4 */ - KEEP(*(.mon.ram.bss)) /* 0x10000384: pUartLogCtl .. ArgvArray */ - KEEP(*(.wlan_ram_map)) /* 0x100006d4: rom_wlan_ram_map, FalseAlmCnt, ROMInfo, DM_CfoTrack */ - KEEP(*(.ram.rom.wlanmap)) /* align(8) */ - KEEP(*(.libc.ram.bss)) /* 0x10000760: rom_libgloss_ram_map __rtl_malloc_av_ __rtl_errno */ - __rom_bss_end__ = .; - } > ROM_USED_RAM - - /* 0x10000bc8: bootloader */ - - .ram_image1.text . : /* use in rom & boot */ - { - /* __ram_start_table_start__ = .; */ - __ram_image1_text_start__ = .; - KEEP(*(.boot.start.ram.data*)) - /* __image1_validate_code__ = .; */ - KEEP(*(.image1.validate.rodata)) - - KEEP(*(.infra.ram.data*)) - KEEP(*(.timer.ram.data*)) - KEEP(*(.cutb.ram.data*)) - KEEP(*(.cutc.ram.data*)) - KEEP(*(.libc.reent)) - KEEP(*(.rom.unc.data)) - KEEP(*(.sdr.rand2.data)) - - PROVIDE (__ram_image_end__ = .); /* 0x100020c0: end */ - - /* boot & images data */ - - KEEP(*(.hal.ram.data)) - KEEP(*(.hal.flash.data)) - KEEP(*(.boot.rodata*)) - KEEP(*(.boot.text*)) - KEEP(*(.boot.data*)) - __image1_bss_start__ = .; - KEEP(*(.boot.bss*)) - __image1_bss_end__ = .; - __ram_image1_text_end__ = .; - - } > BOOT_RAM - - .romheap : - { - __rom_heap_start__ = .; - end = __rom_heap_start__; - . = ALIGN(0x1000); - __rom_heap_end__ = .; - } > ROM_HEAP - - .ram_heap1 : - { - __ram_heap1_start__ = .; - /* *(.heap1*) */ - } > RAM_HEAP1 - - .tcm : - { - __ram_tcm_start__ = .; - __tcm_heap_start__ = .; - *(.tcm.heap) - } > TCM - - .soc_ps_monitor : - { - __tcm_heap_end__ = .; - } > TCM_TAB - - .image2.start.table : - { - __ram_heap1_end__ = .; - __ram_image2_text_start__ = .; - __image2_entry_func__ = .; - .image2.start.table1$$Base = .; - KEEP(*(SORT(.image2.ram.data*))) - __image2_validate_code__ = .; - KEEP(*(.image2.validate.rodata*)) - KEEP(*(.custom.validate.rodata*)) - } > BD_RAM - - .ram_image2.text : - { - *(.infra.ram.start*) - . = ALIGN(4); - KEEP(*(.init)) - - /* init data */ - . = ALIGN(4); - PROVIDE (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE (__init_array_end = .); - - . = ALIGN(4); - KEEP(*(.fini)) - - . = ALIGN(4); - PROVIDE (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE (__fini_array_end = .); - - *(.mon.ram.text*) - *(.hal.flash.text*) - *(.hal.sdrc.text*) - *(.hal.gpio.text*) - *(.fwu.text*) - *(.otg.rom.text*) - *(.text*) - *(.sdram.text*) - *(.p2p.text*) - *(.wps.text*) - *(.websocket.text*) - } > BD_RAM - - .ram_image2.rodata : - { - *(.rodata*) - *(.fwu.rodata*) - *(.sdram.rodata*) - *(.p2p.rodata*) - *(.wps.rodata*) - *(.websocket.rodata*) - . = ALIGN(4); - xHeapRegions = .; - LONG(__ram_heap1_start__) - LONG(__ram_heap1_end__ - __ram_heap1_start__) - LONG(__ram_heap2_start__) - LONG(__ram_heap2_end__ - __ram_heap2_start__) - LONG(__sdram_heap_start__) - LONG(__sdram_heap_end__ - __sdram_heap_start__) - LONG(0) - LONG(0) - UartLogRamCmdTable = .; - KEEP(*(SORT(.mon.tab*))) - KEEP(*(SORT(.sdram.mon.tab*))) - UartLogRamCmdTable_end = .; - LONG(0) - } > BD_RAM - - PROVIDE(UartLogRamCmdTableSize = UartLogRamCmdTable_end - UartLogRamCmdTable); - - .ram.data : - { - __data_start__ = .; - *(.data*) - *(.p2p.data*) - *(.wps.data*) - *(.websocket.data*) - *(.sdram.data*) - __data_end__ = .; - __ram_image2_text_end__ = .; - } > BD_RAM - - .ram.bss : - { - __bss_start__ = .; - .ram.bss$$Base = .; - *(.hal.flash.data*) - *(.hal.sdrc.data*) - *(.hal.gpio.data*) - *(.fwu.data*) - *(.bdsram.data*) - *(.bfsram.data*) - *(COMMON) - *(.bss*) - *(.sdram.bss*) - *(.p2p.bss*) - *(.wps.bss*) - *(.websocket.bss*) - *(.ssl_ram_map*) - __bss_end__ = .; - .ram.bss$$Limit = .; - - } > BD_RAM - - .ram_heap2 : - { - . = ALIGN(8); - __ram_heap2_start__ = .; - *(.heap*) /* ucHeap */ - } > BD_RAM - __ram_heap2_end__ = 0x10070000; - - .sdr_text : - { - __sdram_data_start__ = .; - } > SDRAM_RAM - - .sdr_rodata : - { - } > SDRAM_RAM - - .sdr_data : - { - __sdram_data_end__ = .; - } > SDRAM_RAM - - .sdr_bss : - { - __sdram_bss_start__ = .; - __sdram_bss_end__ = .; - . = ALIGN(8); - __sdram_heap_start__ = .; - } > SDRAM_RAM - __sdram_heap_end__ = 0x30200000; - - .boot.head : - { - KEEP(*(.loader.head*)) - } - ASSERT(__ram_image_end__ == 0x100020c0, "Error rom-bios-boot code & data!") -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/rlx8195A-symbol-v04-img3.ld b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/rlx8195A-symbol-v04-img3.ld deleted file mode 100644 index c0cfd84..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/rlx8195A-symbol-v04-img3.ld +++ /dev/null @@ -1,265 +0,0 @@ - -ENTRY(Reset_Handler) -ENTRY(main) - -INCLUDE "export-rom_v04.txt" - -MEMORY -{ - ROM (rx) : ORIGIN = 0x000000, LENGTH = 1M /* end 0x00100000 */ - ROM_USED_RAM (rwx): ORIGIN = 0x10000000, LENGTH = 0x2400 /* end 0x10002400 */ - BOOT_RAM (rwx) : ORIGIN = 0x10000bc8, LENGTH = 21560 /* end 0x10006000 */ - ROM_HEAP (rwx) : ORIGIN = 0x10002400, LENGTH = 3K /* end 0x10003000 */ - RAM_HEAP1 (rwx) : ORIGIN = 0x10003000, LENGTH = 12K /* end 0x10006000 */ - BD_RAM (rwx) : ORIGIN = 0x10006000, LENGTH = 424K /* end 0x10070000 */ - TCM (rwx) : ORIGIN = 0x1FFF0000, LENGTH = 64K /* end 0x20000000 */ - TCM_TAB (rwx) : ORIGIN = 0x1FFFFD00, LENGTH = 768 /* end 0x20000000 */ - SDRAM_RAM (rwx) : ORIGIN = 0x30000000, LENGTH = 2M /* end 0x30200000 */ -} - -EXTERN(RAM_IMG2_VALID_PATTEN) -EXTERN(InfraStart) - -SECTIONS -{ - /* 0x00000000: ROM */ - - .rom : - { - __rom_image_start__ = .; - KEEP(*(.rom)); - __rom_image_end__ = .; - } > ROM - - /* 0x10000000: SRAM */ - - .rom_ram : /* use in rom */ - { - __ram_image_start__ = .; - KEEP(*(.ram_dedecated_vector_table)) /* 0x10000000: NewVectorTable */ - KEEP(*(.ram_user_define_irq_table)) /* 0x10000100: UserIrqFunTable */ - KEEP(*(.ram_user_define_data_table)) /* 0x10000200: UserIrqDataTable */ - __rom_bss_start__ = .; - KEEP(*(.hal.ram.bss)) /* 0x10000300: CfgSysDebugWarn .. _pHAL_Gpio_Adapter */ - KEEP(*(.timer2_7_vector_table.data)) /* 0x10000358: Timer2To7VectorTable */ - KEEP(*(.infra.ram.bss)) /* 0x10000370: first .. z4 */ - KEEP(*(.mon.ram.bss)) /* 0x10000384: pUartLogCtl .. ArgvArray */ - KEEP(*(.wlan_ram_map)) /* 0x100006d4: rom_wlan_ram_map, FalseAlmCnt, ROMInfo, DM_CfoTrack */ - KEEP(*(.ram.rom.wlanmap)) /* align(8) */ - KEEP(*(.libc.ram.bss)) /* 0x10000760: rom_libgloss_ram_map __rtl_malloc_av_ __rtl_errno */ - __rom_bss_end__ = .; - } > ROM_USED_RAM - - /* 0x10000bc8: bootloader */ - - .ram_image1.text . : /* use in rom & boot */ - { - /* __ram_start_table_start__ = .; */ - __ram_image1_text_start__ = .; - KEEP(*(.boot.start.ram.data*)) - /* __image1_validate_code__ = .; */ - KEEP(*(.image1.validate.rodata)) - - KEEP(*(.infra.ram.data*)) - KEEP(*(.timer.ram.data*)) - KEEP(*(.cutb.ram.data*)) - KEEP(*(.cutc.ram.data*)) - KEEP(*(.libc.reent)) - KEEP(*(.rom.unc.data)) - KEEP(*(.sdr.rand2.data)) - - PROVIDE (__ram_image_end__ = .); /* 0x100020c0: end */ - - /* boot & images data */ - - KEEP(*(.hal.ram.data)) - KEEP(*(.hal.flash.data)) - KEEP(*(.boot.rodata*)) - KEEP(*(.boot.text*)) - KEEP(*(.boot.data*)) - __image1_bss_start__ = .; - KEEP(*(.boot.bss*)) - __image1_bss_end__ = .; - __ram_image1_text_end__ = .; - - } > BOOT_RAM - - .romheap : - { - __rom_heap_start__ = .; - end = __rom_heap_start__; - . = ALIGN(0x1000); - __rom_heap_end__ = .; - } > ROM_HEAP - - .ram_heap1 : - { - __ram_heap1_start__ = .; - /* *(.heap1*) */ - } > RAM_HEAP1 - - .tcm : - { - __ram_tcm_start__ = .; - __tcm_heap_start__ = .; - *(.tcm.heap) - } > TCM - - .soc_ps_monitor : - { - __tcm_heap_end__ = .; - } > TCM_TAB - - .image2.start.table : - { - __ram_heap1_end__ = .; - __ram_image2_text_start__ = .; - __image2_entry_func__ = .; - .image2.start.table1$$Base = .; - KEEP(*(SORT(.image2.ram.data*))) - __image2_validate_code__ = .; - KEEP(*(.image2.validate.rodata*)) - KEEP(*(.custom.validate.rodata*)) - } > BD_RAM - - .sdr_text : - { - __sdram_data_start__ = .; - INCLUDE "sdram_obj.txt" - *(.sdram.text*) - } > SDRAM_RAM - - .sdr_rodata : - { - *(.sdram.rodata*) - } > SDRAM_RAM - - .sdr_data : - { - *(.sdram.data*) - __sdram_data_end__ = .; - } > SDRAM_RAM - - .sdr_bss : - { - __sdram_bss_start__ = .; - *(.uvc.ram.bss) - *(.sdram.bss*) - INCLUDE "sdram_bss.txt" - __sdram_bss_end__ = .; - . = ALIGN(8); - __sdram_heap_start__ = .; - } > SDRAM_RAM - - .ram_image2.text : - { - *(.infra.ram.start*) - . = ALIGN(4); - KEEP(*(.init)) - - /* init data */ - . = ALIGN(4); - PROVIDE (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE (__init_array_end = .); - - . = ALIGN(4); - KEEP(*(.fini)) - - . = ALIGN(4); - PROVIDE (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE (__fini_array_end = .); - - *(.mon.ram.text*) - *(.hal.flash.text*) - *(.hal.sdrc.text*) - *(.hal.gpio.text*) - *(.fwu.text*) - *(.otg.rom.text*) - *(.text*) -/* *(.sdram.text*) */ - *(.p2p.text*) - *(.wps.text*) - *(.websocket.text*) - } > BD_RAM - - .ram_image2.rodata : - { - *(.rodata*) - *(.fwu.rodata*) -/* *(.sdram.rodata*) */ - *(.p2p.rodata*) - *(.wps.rodata*) - *(.websocket.rodata*) - . = ALIGN(4); - xHeapRegions = .; - LONG(__ram_heap1_start__) - LONG(__ram_heap1_end__ - __ram_heap1_start__) - LONG(__ram_heap2_start__) - LONG(__ram_heap2_end__ - __ram_heap2_start__) - LONG(__sdram_heap_start__) - LONG(__sdram_heap_end__ - __sdram_heap_start__) - LONG(0) - LONG(0) - UartLogRamCmdTable = .; - KEEP(*(SORT(.mon.tab*))) - KEEP(*(SORT(.sdram.mon.tab*))) - UartLogRamCmdTable_end = .; - LONG(0) - } > BD_RAM - - PROVIDE(UartLogRamCmdTableSize = UartLogRamCmdTable_end - UartLogRamCmdTable); - - .ram.data : - { - __data_start__ = .; - *(.data*) - *(.p2p.data*) - *(.wps.data*) - *(.websocket.data*) -/* *(.sdram.data*) */ - __data_end__ = .; - __ram_image2_text_end__ = .; - } > BD_RAM - - .ram.bss : - { - __bss_start__ = .; - .ram.bss$$Base = .; - *(.hal.flash.data*) - *(.hal.sdrc.data*) - *(.hal.gpio.data*) - *(.fwu.data*) - *(.bdsram.data*) - *(.bfsram.data*) - *(COMMON) - *(.bss*) -/* *(.sdram.bss*) */ - *(.p2p.bss*) - *(.wps.bss*) - *(.websocket.bss*) - *(.ssl_ram_map*) - __bss_end__ = .; - .ram.bss$$Limit = .; - - } > BD_RAM - - .ram_heap2 : - { - . = ALIGN(8); - __ram_heap2_start__ = .; - *(.heap*) /* ucHeap */ - } > BD_RAM - __ram_heap2_end__ = 0x10070000; - - __sdram_heap_end__ = 0x30200000; - - .boot.head : - { - KEEP(*(.loader.head*)) - } - ASSERT(__ram_image_end__ == 0x100020c0, "Error rom-bios-boot code & data!") -} \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/rtl871xAx-symbol-v04-img1.ld b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/rtl871xAx-symbol-v04-img1.ld deleted file mode 100644 index 5b9a8c2..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/rtl871xAx-symbol-v04-img1.ld +++ /dev/null @@ -1,240 +0,0 @@ - - -ENTRY(Reset_Handler) - -INCLUDE "export-rom_v04.txt" - - -MEMORY -{ - ROM (rx) : ORIGIN = 0x000000, LENGTH = 1M - ROM_RAM1 (rwx): ORIGIN = 0x10000000, LENGTH = 0x2100 /* end 0x10002100 */ - BOOT_RAM (rwx): ORIGIN = 0x10000bc8, LENGTH = 13368 /* end 0x10006000 */ - RECY_RAM (rwx): ORIGIN = 0x10002100, LENGTH = 0x3F00 /* end 0x10006000 */ - BD_RAM (rwx) : ORIGIN = 0x10006000, LENGTH = 424K /* end 0x10070000 */ - ROM_RAM3 (rwx): ORIGIN = 0x1006D000, LENGTH = 12K /* end 0x10070000 */ - TCM (rwx) : ORIGIN = 0x1FFF0000, LENGTH = 64K /* end 0x20000000 */ - SDRAM (rwx) : ORIGIN = 0x30000000, LENGTH = 2M /* end 0x30200000 */ -} - -EXTERN(PreProcessForVendor) -EXTERN(RtlBootToSram) -EXTERN(_rtl_impure_ptr) -EXTERN(impure_data) - -SECTIONS -{ - /* 0x00000000: ROM */ - - .rom : - { - __rom_image_start__ = .; - KEEP(*(.rom)); - __rom_image_end__ = .; - } > ROM - - /* 0x10000000: SRAM */ - - .rom_ram : /* use in rom */ - { - __ram_image_start__ = .; - KEEP(*(.ram_dedecated_vector_table)) /* 0x10000000: NewVectorTable */ - KEEP(*(.ram_user_define_irq_table)) /* 0x10000100: UserIrqFunTable */ - KEEP(*(.ram_user_define_data_table)) /* 0x10000200: UserIrqDataTable */ - /* __rom_bss_start__ = .; */ - KEEP(*(.hal.ram.bss)) /* 0x10000300: CfgSysDebugWarn .. _pHAL_Gpio_Adapter */ - KEEP(*(.timer2_7_vector_table.data)) /* 0x10000358: Timer2To7VectorTable */ - KEEP(*(.infra.ram.bss)) /* 0x10000370: first .. z4 */ - KEEP(*(.mon.ram.bss)) /* 0x10000384: pUartLogCtl .. ArgvArray */ - KEEP(*(.wlan_ram_map)) /* 0x100006d4: rom_wlan_ram_map, FalseAlmCnt, ROMInfo, DM_CfoTrack */ - KEEP(*(.ram.rom.wlanmap)) /* align(8) */ - KEEP(*(.libc.ram.bss)) /* 0x10000760: rom_libgloss_ram_map __rtl_malloc_av_ __rtl_errno */ - /* __rom_bss_end__ = .; */ - } > ROM_RAM1 - - /* 0x10000bc8: bootloader */ - .ram_image1.text . : /* use in rom & boot */ - { - /* __ram_start_table_start__ = .; */ - __ram_image1_text_start__ = .; - KEEP(*(SORT(.start.ram.data*))) - /* __image1_validate_code__ = .; */ - KEEP(*(.image1.validate.rodata)) - - KEEP(*(.infra.ram.data*)) - KEEP(*(.timer.ram.data*)) - KEEP(*(.cutb.ram.data*)) - KEEP(*(.cutc.ram.data*)) - KEEP(*(.data)); - KEEP(*(.hal.ram.data)) - KEEP(*(.libc.reent)) - KEEP(*(.rom.unc.data)) - KEEP(*(.sdr.rand2.data)) - build/obj/project/src/user/rtl_bios_data.o (.rodata*) - __ram_image_end__ = .; - /* 0x100020c0: end */ - build/obj/project/src/user/rtl_boot.o (.text* .rodata*) - __image1_bss_start__ = .; - __image1_bss_end__ = .; - __ram_image1_text_end__ = .; - } > BOOT_RAM - - .tcm : - { - __tcm_start__ = .; - *(.tcm.heap) - __tcm_end__ = .; - } > TCM - - .image2.start.table : - { - __ram_image2_text_start__ = .; - __image2_entry_func__ = .; - .image2.start.table1$$Base = .; - KEEP(*(SORT(.image2.ram.data*))) - __image2_validate_code__ = .; - KEEP(*(.image2.validate.rodata*)) - KEEP(*(.custom.validate.rodata*)) - } > BD_RAM - - .ram_image2.text : - { - *(.infra.ram.start*) - *(.mon.ram.text*) - *(.hal.flash.text*) - *(.hal.sdrc.text*) - *(.hal.gpio.text*) - *(.fwu.text*) - *(.text*) - *(.sdram.text*) - *(.p2p.text*) - *(.wps.text*) - *(.websocket.text*) - } > BD_RAM - - .ram_image2.rodata : - { - *(.rodata*) - *(.fwu.rodata*) - *(.sdram.rodata*) - *(.p2p.rodata*) - *(.wps.rodata*) - *(.websocket.rodata*) - } > BD_RAM - - .ram.data : - { - __data_start__ = .; - *(.data*) - *(.sdram.data*) - *(.p2p.data*) - *(.wps.data*) - *(.websocket.data*) - __data_end__ = .; - __ram_image2_text_end__ = .; - } > BD_RAM - - .ram.bss : - { - __bss_start__ = .; - .ram.bss$$Base = .; - *(.hal.flash.data*) - *(.hal.sdrc.data*) - *(.hal.gpio.data*) - *(.fwu.data*) - *(.bss*) - *(COMMON) - *(.bdsram.data*) - *(.sdram.bss*) - *(.p2p.bss*) - *(.wps.bss*) - *(.websocket.bss*) - __bss_end__ = .; - .ram.bss$$Limit = .; - } > BD_RAM - - .bf_data : - { - __buffer_data_start__ = .; - *(.bfsram.data*) - __buffer_data_end__ = .; - } > BD_RAM - - .bf_data2 : - { - __buffer_data_start2__ = .; - __buffer_data_end2__ = .; - - } > RECY_RAM - - .sdr_text : - { - __sdram_data_start__ = .; - } > SDRAM - - .sdr_rodata : - { - } > SDRAM - - .sdr_data : - { - __sdram_data_end__ = .; - } > SDRAM - - .sdr_bss : - { - __sdram_bss_start__ = .; - __sdram_bss_end__ = .; - } > SDRAM - - .heap : - { - __end__ = .; - end = __end__; - *(.heap*) - __HeapLimit = .; - } > BD_RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy : - { - *(.stack) - } > BD_RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(BD_RAM) + LENGTH(BD_RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") - - .boot.head : - { - KEEP(*(.loader.head*)) - } - - .image1.head : - { - KEEP(*(SORT(.image1.head*))) - } - - .image2.head : - { - KEEP(*(SORT(.image2.head*))) - } - - .image3.head : - { - KEEP(*(SORT(.image3.head*))) - } - - .image4.head : - { - KEEP(*(SORT(.image4.head*))) - } - -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/sdram_bss.txt b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/sdram_bss.txt deleted file mode 100644 index 6a4baca..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/sdram_bss.txt +++ /dev/null @@ -1,42 +0,0 @@ -/**** from lib_mdns.a ****/ -*DNSCommon.o(.bss*) -*dnssd_clientlib.o(.bss*) -*dnssd_clientshim.o(.bss*) -*mDNS.o(.bss*) -*mDNSMain.o(.bss*) -*mDNSPosix.o(.bss*) -*mDNSPosixOverwrite.o(.bss*) -*posix.o(.bss*) - -/**** from lib_uvc.a ****/ -*v4l2-dev.o(.bss*) -*v4l2-device.o(.bss*) -*v4l2-fh.o(.bss*) -*v4l2_driver.o(.bss*) -*v4l2_intf.o(.bss*) -*videobuf2-core.o(.bss*) -*uvc_ctrl.o(.bss*) -*uvc_driver.o(.bss*) -*uvc_intf.o(.bss*) -*uvc_queue.o(.bss*) -*uvc_v4l2.o(.bss*) -*uvc_video.o(.bss*) - -/**** from lib_usb_otg_linux.a *** -*dwc_common_os.o(.bss*) -*dwc_otg_hcd_os.o(.bss*) */ - -/**** from lib_usb_drv.a ****/ -*usb.o(.bss*) - -/**** from lib_usb_otg.a ****/ -*dwc_os.o(.bss*) -*dwc_otg_cil.o(.bss*) -*dwc_otg_cil_intr.o(.bss*) -*dwc_otg_common.o(.bss*) -*dwc_otg_dbg.o(.bss*) -*dwc_otg_driver.o(.bss*) -*dwc_otg_hcd.o(.bss*) -*dwc_otg_hcd_ddma.o(.bss*) -*dwc_otg_hcd_intr.o(.bss*) -*dwc_otg_hcd_queue.o(.bss*) \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/sdram_obj.txt b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/sdram_obj.txt deleted file mode 100644 index cca444f..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/sdram_obj.txt +++ /dev/null @@ -1,117 +0,0 @@ - -/**** from lib_mdns.a ****/ -*DNSCommon.o(.text*) -*dnssd_clientlib.o(.text*) -*dnssd_clientshim.o(.text*) -*mDNS.o(.text*) -*mDNSMain.o(.text*) -*mDNSPosix.o(.text*) -*mDNSPosixOverwrite.o(.text*) -*posix.o(.text*) - -*DNSCommon.o(.rodata*) -*dnssd_clientlib.o(.rodata*) -*dnssd_clientshim.o(.rodata*) -*mDNS.o(.rodata*) -*mDNSMain.o(.rodata*) -*mDNSPosix.o(.rodata*) -*mDNSPosixOverwrite.o(.rodata*) -*posix.o(.rodata*) - -*DNSCommon.o(.data*) -*dnssd_clientlib.o(.data*) -*dnssd_clientshim.o(.data*) -*mDNS.o(.data*) -*mDNSMain.o(.data*) -*mDNSPosix.o(.data*) -*mDNSPosixOverwrite.o(.data*) -*posix.o(.data*) - -/**** from lib_uvc.a ****/ -*v4l2-dev.o(.text*) -*v4l2-device.o(.text*) -*v4l2-fh.o(.text*) -*v4l2_driver.o(.text*) -*v4l2_intf.o(.text*) -*videobuf2-core.o(.text*) -*uvc_ctrl.o(.text*) -*uvc_driver.o(.text*) -*uvc_intf.o(.text*) -*uvc_queue.o(.text*) -*uvc_v4l2.o(.text*) -*uvc_video.o(.text*) - -*v4l2-dev.o(.rodata*) -*v4l2-device.o(.rodata*) -*v4l2-fh.o(.rodata*) -*v4l2_driver.o(.rodata*) -*v4l2_intf.o(.rodata*) -*videobuf2-core.o(.rodata*) -*uvc_ctrl.o(.rodata*) -*uvc_driver.o(.rodata*) -*uvc_intf.o(.rodata*) -*uvc_queue.o(.rodata*) -*uvc_v4l2.o(.rodata*) -*uvc_video.o(.rodata*) - -*v4l2-dev.o(.data*) -*v4l2-device.o(.data*) -*v4l2-fh.o(.data*) -*v4l2_driver.o(.data*) -*v4l2_intf.o(.data*) -*videobuf2-core.o(.data*) -*uvc_ctrl.o(.data*) -*uvc_driver.o(.data*) -*uvc_intf.o(.data*) -*uvc_queue.o(.data*) -*uvc_v4l2.o(.data*) -*uvc_video.o(.data*) - - -/**** from lib_usb_otg_linux.a *** -*dwc_common_os.o(.text*) -*dwc_otg_hcd_os.o(.text*) */ -*dwc_common_os.o(.rodata*) -*dwc_otg_hcd_os.o(.rodata*) -*dwc_common_os.o(.data*) -*dwc_otg_hcd_os.o(.data*) - - -/**** from lib_usb_drv.a ****/ -*usb.o(.text*) -*usb.o(.rodata*) -*usb.o(.data*) - -/**** from lib_usb_otg.a *** -*dwc_os.o(.text*) -*dwc_otg_cil.o(.text*) -*dwc_otg_cil_intr.o(.text*) -*dwc_otg_common.o(.text*) -*dwc_otg_dbg.o(.text*) -*dwc_otg_driver.o(.text*) -*dwc_otg_hcd.o(.text*) -*dwc_otg_hcd_ddma.o(.text*) -*dwc_otg_hcd_intr.o(.text*) -*dwc_otg_hcd_queue.o(.text*) */ - -*dwc_os.o(.rodata*) -*dwc_otg_cil.o(.rodata*) -*dwc_otg_cil_intr.o(.rodata*) -*dwc_otg_common.o(.rodata*) -*dwc_otg_dbg.o(.rodata*) -*dwc_otg_driver.o(.rodata*) -*dwc_otg_hcd.o(.rodata*) -*dwc_otg_hcd_ddma.o(.rodata*) -*dwc_otg_hcd_intr.o(.rodata*) -*dwc_otg_hcd_queue.o(.rodata*) - -*dwc_os.o(.data*) -*dwc_otg_cil.o(.data*) -*dwc_otg_cil_intr.o(.data*) -*dwc_otg_common.o(.data*) -*dwc_otg_dbg.o(.data*) -*dwc_otg_driver.o(.data*) -*dwc_otg_hcd.o(.data*) -*dwc_otg_hcd_ddma.o(.data*) -*dwc_otg_hcd_intr.o(.data*) -*dwc_otg_hcd_queue.o(.data*) \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/console_hs_uart.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/console_hs_uart.c deleted file mode 100644 index beac502..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/console_hs_uart.c +++ /dev/null @@ -1,247 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2016 Realtek Corporation. All rights reserved. - * - * - ******************************************************************************/ -#include -#include "FreeRTOS.h" -#include "task.h" -#include -#include "semphr.h" -#include "device.h" -#include "serial_api.h" -#include "at_cmd/log_service.h" -#include "osdep_service.h" -#include "serial_ex_api.h" -#include "pinmap.h" - -char hs_uart_ready = 0; // used to switch between loguart and high speed uart - // 0: loguart - // 1: highspeed uart - -// select uart tx/rx pin with gpio interrupt function -#define UART_TX PA_7 -#define UART_RX PA_6 - -#define KEY_NL 0xa // '\n' -#define KEY_ENTER 0xd // '\r' -#define KEY_BS 0x8 -#define KEY_ESC 0x1B -#define KEY_LBRKT 0x5B -#define STR_END_OF_MP_FORMAT "\r\n\r\r#" - - -#define CMD_HISTORY_LEN 4 // max number of executed command saved -extern char log_buf[LOG_SERVICE_BUFLEN]; -extern xSemaphoreHandle log_rx_interrupt_sema; -char cmd_history[CMD_HISTORY_LEN][LOG_SERVICE_BUFLEN]; -static unsigned int cmd_history_count = 0; - -serial_t loguart_sobj; -//_sema at_printf_sema; -_sema hs_uart_dma_tx_sema; - -#define HS_UART_USE_DMA_TX 1 - -void hs_uart_put_char(uint8_t c){ - serial_putc(&loguart_sobj, c); -} - -void hs_uart_send_string(char *str) -{ - unsigned int i=0; - while (str[i] != '\0') { - serial_putc(&loguart_sobj, str[i]); - i++; - } -} - -#if UART_AT_USE_DMA_TX -static void hs_uart_send_buf_done(uint32_t id) -{ - //serial_t *sobj = (serial_t *)id; - - rtw_up_sema_from_isr(&uart_at_dma_tx_sema); -} -#endif - -void hs_uart_send_buf(uint8_t *buf, uint32_t len) -{ - unsigned char *st_p=buf; - if(!len || (!buf)){ - return; - } -#if UART_AT_USE_DMA_TX - int ret; - while(rtw_down_sema(&uart_at_dma_tx_sema) == _TRUE){ - ret = serial_send_stream_dma(&loguart_sobj, st_p, len); - if(ret != HAL_OK){ - rtw_up_sema(&uart_at_dma_tx_sema); - return; - }else{ - return; - } - } -#else - while(len){ - serial_putc(&loguart_sobj, *st_p); - st_p++; - len--; - } -#endif -} - -void hs_uart_irq(uint32_t id, SerialIrq event) -{ - serial_t *sobj = (serial_t *)id; - unsigned char rc=0; - static unsigned char temp_buf[LOG_SERVICE_BUFLEN] = "\0"; - static unsigned char combo_key = 0; - static unsigned short buf_count = 0; - static unsigned char key_enter = 0; - static char cmd_history_index = 0; - if(event == RxIrq) { - rc = serial_getc(sobj); - - if(key_enter && rc == KEY_NL){ - //serial_putc(sobj, rc); - return; - } - - if(rc == KEY_ESC){ - combo_key = 1; - }else if(combo_key == 1){ - if(rc == KEY_LBRKT) - combo_key = 2; - else - combo_key = 0; - }else if(combo_key == 2){ - if(rc == 'A' || rc == 'B'){ // UP or Down - if(rc == 'A'){ - cmd_history_index--; - if(cmd_history_index < 0) - cmd_history_index = (cmd_history_count>CMD_HISTORY_LEN)?CMD_HISTORY_LEN-1:(cmd_history_count-1)%CMD_HISTORY_LEN; - }else{ - cmd_history_index++; - if(cmd_history_index > (cmd_history_count>CMD_HISTORY_LEN?CMD_HISTORY_LEN-1:(cmd_history_count-1)%CMD_HISTORY_LEN)) - cmd_history_index = 0; - } - - if(cmd_history_count > 0){ - buf_count = strlen(temp_buf); - rtw_memset(temp_buf,'\0',buf_count); - while(--buf_count >= 0){ - serial_putc(sobj, KEY_BS); - serial_putc(sobj, ' '); - serial_putc(sobj, KEY_BS); - } - hs_uart_send_string(cmd_history[cmd_history_index%CMD_HISTORY_LEN]); - strcpy(temp_buf, cmd_history[cmd_history_index%CMD_HISTORY_LEN]); - buf_count = strlen(temp_buf); - } - } - - // exit combo - combo_key = 0; - } - else if(rc == KEY_ENTER){ - key_enter = 1; - if(buf_count>0){ - serial_putc(sobj, KEY_NL); - serial_putc(sobj, KEY_ENTER); - rtw_memset(log_buf,'\0',LOG_SERVICE_BUFLEN); - strncpy(log_buf,(char *)&temp_buf[0],buf_count); - rtw_up_sema_from_isr(&log_rx_interrupt_sema); - rtw_memset(temp_buf,'\0',buf_count); - - /* save command */ - rtw_memset(cmd_history[((cmd_history_count)%CMD_HISTORY_LEN)], '\0', buf_count+1); - strcpy(cmd_history[((cmd_history_count++)%CMD_HISTORY_LEN)], log_buf); - cmd_history_index = cmd_history_count%CMD_HISTORY_LEN; - //cmd_history_count++; - buf_count=0; - }else{ - hs_uart_send_string(STR_END_OF_MP_FORMAT); - } - } - else if(rc == KEY_BS){ - if(buf_count>0){ - buf_count--; - temp_buf[buf_count] = '\0'; - - serial_putc(sobj, rc); - serial_putc(sobj, ' '); - serial_putc(sobj, rc); - } - } - else{ - /* cache input characters */ - if(buf_count < (LOG_SERVICE_BUFLEN - 1)){ - temp_buf[buf_count] = rc; - buf_count++; - serial_putc(sobj, rc); - key_enter = 0; - } - else if(buf_count == (LOG_SERVICE_BUFLEN - 1)){ - temp_buf[buf_count] = '\0'; - - hs_uart_send_string("\r\nERROR:exceed size limit"STR_END_OF_ATCMD_RET); - } - } - } -} - -void console_init_hs_uart(void) -{ - serial_init(&loguart_sobj,UART_TX,UART_RX); - serial_baud(&loguart_sobj,38400); - serial_format(&loguart_sobj, 8, ParityNone, 1); - -#if UART_AT_USE_DMA_TX - rtw_init_sema(&hs_uart_dma_tx_sema, 1); - serial_send_comp_handler(&loguart_sobj, (void*)hs_uart_send_buf_done, (uint32_t)&loguart_sobj); -#endif - - serial_irq_handler(&loguart_sobj, hs_uart_irq, (uint32_t)&loguart_sobj); - serial_irq_set(&loguart_sobj, RxIrq, 1); - - for(char i=0; i -#include "serial_api.h" -#include "serial_ex_api.h" -#include "PinNames.h" -#include "i2c_api.h" -#include "pinmap.h" -#include "ex_api.h" - -#define MBED_I2C_MTR_SDA PB_3 //i2c3 -#define MBED_I2C_MTR_SCL PB_2 - -#define UART_BAUDRATE 115200 - -#define MBED_I2C_SLAVE_ADDR0 0x4D // 0x9A // -#define MBED_I2C_BUS_CLK 500000 //hz *Remind that in baud rate 9600 or 19200, 100000hz is suitable* - -static i2c_t i2cmaster; - -#define I2C_DATA_LENGTH 2 -static char i2cdatardsrc[I2C_DATA_LENGTH]; -static char i2cdatarddst[I2C_DATA_LENGTH]; - -const uint8_t DLL = 921600/UART_BAUDRATE; - -char ctrl_initial_1[2] = {0x03 << 3,0x80}; -char ctrl_initial_2[2] = {0x00 << 3,921600/UART_BAUDRATE}; -char ctrl_initial_3[2] = {0x01 << 3,0x00}; -char ctrl_initial_4[2] = {0x03 << 3,0xbf}; -char ctrl_initial_5[2] = {0x02 << 3,0x10}; -char ctrl_initial_6[2] = {0x03 << 3,0x03}; -char ctrl_initial_7[2] = {0x02 << 3,0x06}; -char ctrl_initial_8[2] = {0x02 << 3,0x01}; -//end i2c - - -// Master// Tx -#define CLEAR_MST_TXC_FLAG (masterTXC = 0) -#define SET_MST_TXC_FLAG (masterTXC = 1) -#define WAIT_MST_TXC while(masterTXC == 0){;} - -volatile int masterTXC; -static char i2c_ready = 0; - - -static void i2c_master_rxc_callback(void *userdata) -{ - - int i2clocalcnt; - int result = 0; - - // verify result - result = 1; - for (i2clocalcnt = 0; i2clocalcnt < I2C_DATA_LENGTH; i2clocalcnt++) { - if (i2cdatarddst[i2clocalcnt] != i2cdatardsrc[i2clocalcnt]) { - result = 0; - break; - } - } -} - -static void i2c_master_txc_callback(void *userdata) -{ - SET_MST_TXC_FLAG; -} - -static void i2c_master_write(void) -{ - - //DBG_8195A("Mst-W\n"); - CLEAR_MST_TXC_FLAG; - - i2c_write(&i2cmaster, MBED_I2C_SLAVE_ADDR0, &ctrl_initial_1[0], 2, 1); - i2c_write(&i2cmaster, MBED_I2C_SLAVE_ADDR0, &ctrl_initial_2[0], 2, 1); - i2c_write(&i2cmaster, MBED_I2C_SLAVE_ADDR0, &ctrl_initial_3[0], 2, 1); - i2c_write(&i2cmaster, MBED_I2C_SLAVE_ADDR0, &ctrl_initial_4[0], 2, 1); - i2c_write(&i2cmaster, MBED_I2C_SLAVE_ADDR0, &ctrl_initial_5[0], 2, 1); - i2c_write(&i2cmaster, MBED_I2C_SLAVE_ADDR0, &ctrl_initial_6[0], 2, 1); - i2c_write(&i2cmaster, MBED_I2C_SLAVE_ADDR0, &ctrl_initial_7[0], 2, 1); - i2c_write(&i2cmaster, MBED_I2C_SLAVE_ADDR0, &ctrl_initial_8[0], 2, 1); - - WAIT_MST_TXC; - -} - -static void i2c_master_enable(void) -{ - _memset(&i2cmaster, 0x00, sizeof(i2c_t)); - i2c_init(&i2cmaster, MBED_I2C_MTR_SDA ,MBED_I2C_MTR_SCL); - i2c_frequency(&i2cmaster,MBED_I2C_BUS_CLK); - i2c_set_user_callback(&i2cmaster, I2C_RX_COMPLETE, i2c_master_rxc_callback); - i2c_set_user_callback(&i2cmaster, I2C_TX_COMPLETE, i2c_master_txc_callback); - //i2c_set_user_callback(&i2cmaster, I2C_ERR_OCCURRED, i2c_master_err_callback); - -} - -void i2c_redirect_init(void) -{ - - // prepare for transmission - - _memset(&i2cdatardsrc[0], 0x00, I2C_DATA_LENGTH); - _memset(&i2cdatarddst[0], 0x00, I2C_DATA_LENGTH); - - i2c_ready = 1; - - i2c_master_enable(); - i2c_master_write(); - -} - -static uint8_t tx_data_i2c[2]; -static uint8_t rx_data_i2c[2]; - -void i2c_put_char(uint8_t c){ - - _memset(&tx_data_i2c[0],0x00,2); - _memset(&rx_data_i2c[0],0x00,2); - tx_data_i2c[0] = 0x00 << 3; - tx_data_i2c[1] = c; - i2c_write(&i2cmaster, 0x4D, &tx_data_i2c[0], 2, 1); - i2c_read (&i2cmaster, 0x4D, &rx_data_i2c[0], 2, 1); -} - -int use_mode; - -void console_init(void) -{ - i2c_redirect_init(); - - if(HalCheckSDramExist()){ - //DiagPrintf("It's 8195_AM\n"); - redirect_rom_init(); - } - -#if !TASK_SCHEDULER_DISABLED - RtlConsolInitRam((uint32_t)RAM_STAGE,(uint32_t)0,(void*)NULL); -#else - RtlConsolInitRam((uint32_t)ROM_STAGE,(uint32_t)0,(void*)NULL); -#endif - -#if BUFFERED_PRINTF - rtl_printf_init(); -#endif -} - - - -void HalSerialPutcRtl8195a(IN uint8_t c){ - - uint32_t CounterIndex = 0; - - extern char i2c_ready; - if(i2c_ready) - i2c_put_char(c); - -} - - - - - - - - - - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/low_level_io.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/low_level_io.c deleted file mode 100644 index 1092e7b..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/low_level_io.c +++ /dev/null @@ -1,119 +0,0 @@ -#include -#include "hal_api.h" -#include "rtl8195a.h" -#include "platform_opts.h" - -#if !defined (__ICCARM__) -extern uint8_t RAM_IMG1_VALID_PATTEN[]; -void *tmp = RAM_IMG1_VALID_PATTEN; -#endif - -//for internal test -#ifdef USE_MODE - extern int use_mode; - void mode_init(void){use_mode = 1;} -#endif - -#if defined ( __ICCARM__ ) -size_t __write(int Handle, const unsigned char * Buf, size_t Bufsize) -{ - int nChars = 0; - /* Check for stdout and stderr - (only necessary if file descriptors are enabled.) */ - if (Handle != 1 && Handle != 2) - { - return -1; - } - for (/*Empty */; Bufsize > 0; --Bufsize) - { - DiagPutChar(*Buf++); - ++nChars; - } - return nChars; -} - -size_t __read(int Handle, unsigned char * Buf, size_t Bufsize) -{ - int nChars = 0; - /* Check for stdin - (only necessary if FILE descriptors are enabled) */ - if (Handle != 0) - { - return -1; - } - for (/*Empty*/; Bufsize > 0; --Bufsize) - { - int c = DiagGetChar(_FALSE); - if (c < 0) - break; - *(Buf++) = c; - ++nChars; - } - return nChars; -} -#endif - - - -int disablePrintf = FALSE; - - -__weak void HalSerialPutcRtl8195a(IN uint8_t c){ - - uint32_t CounterIndex = 0; - - if(disablePrintf == TRUE) return; - - while(1) { - CounterIndex++; - if (CounterIndex >=6540) - break; - - if (HAL_UART_READ8(UART_LINE_STATUS_REG_OFF) & 0x60) - break; - } - HAL_UART_WRITE8(UART_TRAN_HOLD_OFF, c); - if (c == 0x0a) { - HAL_UART_WRITE8(UART_TRAN_HOLD_OFF, 0x0d); - } -} - - - - -#include -uint32_t -DiagPrintf( - IN const char *fmt, ... -) -{ - if(disablePrintf == TRUE) return _TRUE; - - (void)VSprintf(0, fmt, ((const int *)&fmt)+1); - return _TRUE; -} - -extern uint32_t ConfigDebugErr; -extern uint32_t ConfigDebugInfo; -extern uint32_t ConfigDebugWarn; -static uint32_t backupErr; -static uint32_t backupInfo; -static uint32_t backupWarn; -void log_uart_enable_printf(void) -{ - disablePrintf = FALSE; - ConfigDebugErr = backupErr; - ConfigDebugInfo = backupInfo; - ConfigDebugWarn = backupWarn; -} - -void log_uart_disable_printf(void) -{ - disablePrintf = TRUE; - backupErr = ConfigDebugErr; - backupInfo = ConfigDebugInfo; - backupWarn = ConfigDebugWarn; - ConfigDebugErr = 0; - ConfigDebugInfo = 0; - ConfigDebugWarn = 0; -} \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/rtl_consol.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/rtl_consol.c deleted file mode 100644 index 8cdc241..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/rtl_consol.c +++ /dev/null @@ -1,487 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#include "rtl8195a.h" -//#include -#include "rtl_consol.h" -#include "FreeRTOS.h" -#include "task.h" -#include -#include "semphr.h" -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) -#include "freertos_pmu.h" -#endif -#include "tcm_heap.h" - -// Those symbols will be defined in linker script for gcc compiler -// If not doing this would cause extra memory cost -#if defined (__GNUC__) - - extern volatile UART_LOG_CTL UartLogCtl; - extern volatile UART_LOG_CTL *pUartLogCtl; - extern uint8_t *ArgvArray[MAX_ARGV]; - extern UART_LOG_BUF UartLogBuf; - -#ifdef CONFIG_UART_LOG_HISTORY - extern uint8_t UartLogHistoryBuf[UART_LOG_HISTORY_LEN][UART_LOG_CMD_BUFLEN]; -#endif - -#else - -MON_RAM_BSS_SECTION - volatile UART_LOG_CTL UartLogCtl; -MON_RAM_BSS_SECTION - volatile UART_LOG_CTL *pUartLogCtl; -MON_RAM_BSS_SECTION - uint8_t *ArgvArray[MAX_ARGV]; -MON_RAM_BSS_SECTION - UART_LOG_BUF UartLogBuf; - -#ifdef CONFIG_UART_LOG_HISTORY -MON_RAM_BSS_SECTION - uint8_t UartLogHistoryBuf[UART_LOG_HISTORY_LEN][UART_LOG_CMD_BUFLEN]; -#endif - -#endif - -#ifdef CONFIG_KERNEL -static void (*up_sema_from_isr)(_sema *) = NULL; -#endif - - -_LONG_CALL_ -extern uint8_t -UartLogCmdChk( - IN uint8_t RevData, - IN UART_LOG_CTL *prvUartLogCtl, - IN uint8_t EchoFlag -); - -_LONG_CALL_ -extern void -ArrayInitialize( - IN uint8_t *pArrayToInit, - IN uint8_t ArrayLen, - IN uint8_t InitValue -); - -_LONG_CALL_ -extern void -UartLogHistoryCmd( - IN uint8_t RevData, - IN UART_LOG_CTL *prvUartLogCtl, - IN uint8_t EchoFlag -); - -_LONG_CALL_ -extern void -UartLogCmdExecute( - IN PUART_LOG_CTL pUartLogCtlExe -); - - - -//================================================= - - -/* Minimum and maximum values a `signed long int' can hold. - (Same as `int'). */ -#ifndef __LONG_MAX__ -#if defined (__alpha__) || (defined (__sparc__) && defined(__arch64__)) || defined (__sparcv9) || defined (__s390x__) -#define __LONG_MAX__ 9223372036854775807L -#else -#define __LONG_MAX__ 2147483647L -#endif /* __alpha__ || sparc64 */ -#endif -#undef LONG_MIN -#define LONG_MIN (-LONG_MAX-1) -#undef LONG_MAX -#define LONG_MAX __LONG_MAX__ - -/* Maximum value an `unsigned long int' can hold. (Minimum is 0). */ -#undef ULONG_MAX -#define ULONG_MAX (LONG_MAX * 2UL + 1) - -#ifndef __LONG_LONG_MAX__ -#define __LONG_LONG_MAX__ 9223372036854775807LL -#endif - - - - -//====================================================== -//: UartLogIrqHandleRam -//: To deal with Uart-Log RX IRQ -//: void -//: void -//: NA -//====================================================== -//MON_RAM_TEXT_SECTION -void -UartLogIrqHandleRam -( - void * Data -) -{ - uint8_t UartReceiveData = 0; - //For Test - BOOL PullMode = _FALSE; - - uint32_t IrqEn = DiagGetIsrEnReg(); - - DiagSetIsrEnReg(0); - - UartReceiveData = DiagGetChar(PullMode); - if (UartReceiveData == 0) { - goto exit; - } - - //KB_ESC chk is for cmd history, it's a special case here. - if (UartReceiveData == KB_ASCII_ESC) { - //4 Esc detection is only valid in the first stage of boot sequence (few seconds) - if (pUartLogCtl->ExecuteEsc != _TRUE) - { - pUartLogCtl->ExecuteEsc = _TRUE; - (*pUartLogCtl).EscSTS = 0; - } - else - { - //4 the input commands are valid only when the task is ready to execute commands - if ((pUartLogCtl->BootRdy == 1) -#ifdef CONFIG_KERNEL - ||(pUartLogCtl->TaskRdy == 1) -#endif - ) - { - if ((*pUartLogCtl).EscSTS==0) - { - (*pUartLogCtl).EscSTS = 1; - } - } - else - { - (*pUartLogCtl).EscSTS = 0; - } - } - } - else if ((*pUartLogCtl).EscSTS==1){ - if (UartReceiveData != KB_ASCII_LBRKT){ - (*pUartLogCtl).EscSTS = 0; - } - else{ - (*pUartLogCtl).EscSTS = 2; - } - } - - else{ - if ((*pUartLogCtl).EscSTS==2){ - (*pUartLogCtl).EscSTS = 0; -#ifdef CONFIG_UART_LOG_HISTORY - if ((UartReceiveData=='A')|| UartReceiveData=='B'){ - UartLogHistoryCmd(UartReceiveData,(UART_LOG_CTL *)pUartLogCtl,1); - } -#endif - } - else{ - if (UartLogCmdChk(UartReceiveData,(UART_LOG_CTL *)pUartLogCtl,1)==2) - { - //4 check UartLog buffer to prevent from incorrect access - if (pUartLogCtl->pTmpLogBuf != NULL) - { - pUartLogCtl->ExecuteCmd = _TRUE; -#if defined(CONFIG_KERNEL) && !TASK_SCHEDULER_DISABLED - if (pUartLogCtl->TaskRdy && up_sema_from_isr != NULL) - //RtlUpSemaFromISR((_Sema *)&pUartLogCtl->Sema); - up_sema_from_isr((_sema *)&pUartLogCtl->Sema); -#endif - } - else - { - ArrayInitialize((uint8_t *)pUartLogCtl->pTmpLogBuf->UARTLogBuf, UART_LOG_CMD_BUFLEN, '\0'); - } - } - } - } -exit: - DiagSetIsrEnReg(IrqEn); - -} - - - -//MON_RAM_TEXT_SECTION -void -RtlConsolInitRam( - IN uint32_t Boot, - IN uint32_t TBLSz, - IN void *pTBL -) -{ - UartLogBuf.BufCount = 0; - ArrayInitialize(&UartLogBuf.UARTLogBuf[0],UART_LOG_CMD_BUFLEN,'\0'); - pUartLogCtl = &UartLogCtl; - - pUartLogCtl->NewIdx = 0; - pUartLogCtl->SeeIdx = 0; - pUartLogCtl->RevdNo = 0; - pUartLogCtl->EscSTS = 0; - pUartLogCtl->BootRdy = 0; - pUartLogCtl->pTmpLogBuf = &UartLogBuf; -#ifdef CONFIG_UART_LOG_HISTORY - pUartLogCtl->CRSTS = 0; - pUartLogCtl->pHistoryBuf = &UartLogHistoryBuf[0]; -#endif - pUartLogCtl->pfINPUT = (void*)&DiagPrintf; - pUartLogCtl->pCmdTbl = (PCOMMAND_TABLE) pTBL; - pUartLogCtl->CmdTblSz = TBLSz; -#ifdef CONFIG_KERNEL - pUartLogCtl->TaskRdy = 0; -#endif - //executing boot sequence - if (Boot == ROM_STAGE) - { - pUartLogCtl->ExecuteCmd = _FALSE; - pUartLogCtl->ExecuteEsc = _FALSE; - } - else - { - pUartLogCtl->ExecuteCmd = _FALSE; - pUartLogCtl->ExecuteEsc= _TRUE;//don't check Esc anymore -#if defined(CONFIG_KERNEL) - /* Create a Semaphone */ - //RtlInitSema((_Sema*)&(pUartLogCtl->Sema), 0); - rtw_init_sema((_sema*)&(pUartLogCtl->Sema), 0); - pUartLogCtl->TaskRdy = 0; -#ifdef PLATFORM_FREERTOS -#define LOGUART_STACK_SIZE 128 //USE_MIN_STACK_SIZE modify from 512 to 128 -#if CONFIG_USE_TCM_HEAP - { - int ret = 0; - void *stack_addr = tcm_heap_malloc(LOGUART_STACK_SIZE*sizeof(int)); - //void *stack_addr = rtw_malloc(stack_size*sizeof(int)); - if(stack_addr == NULL){ - DiagPrintf("Out of TCM heap in \"LOGUART_TASK\" "); - } - ret = xTaskGenericCreate( - RtlConsolTaskRam, - (const char *)"LOGUART_TASK", - LOGUART_STACK_SIZE, - NULL, - tskIDLE_PRIORITY + 5 + PRIORITIE_OFFSET, - NULL, - stack_addr, - NULL); - if (pdTRUE != ret) - { - DiagPrintf("Create Log UART Task Err!!\n"); - } - } -#else - if (pdTRUE != xTaskCreate( RtlConsolTaskRam, (const signed char * const)"LOGUART_TASK", LOGUART_STACK_SIZE, NULL, tskIDLE_PRIORITY + 5 + PRIORITIE_OFFSET, NULL)) - { - DiagPrintf("Create Log UART Task Err!!\n"); - } -#endif - -#endif - -#endif - } - - CONSOLE_8195A(); -} - -extern uint8_t** GetArgv(const uint8_t *string); -#if SUPPORT_LOG_SERVICE -extern char log_buf[LOG_SERVICE_BUFLEN]; -extern xSemaphoreHandle log_rx_interrupt_sema; -#endif -//====================================================== -void console_cmd_exec(PUART_LOG_CTL pUartLogCtlExe) -{ - uint8_t CmdCnt = 0; - uint8_t argc = 0; - uint8_t **argv; - //uint32_t CmdNum; - PUART_LOG_BUF pUartLogBuf = pUartLogCtlExe->pTmpLogBuf; -#if SUPPORT_LOG_SERVICE - strncpy(log_buf, (const uint8_t*)&(*pUartLogBuf).UARTLogBuf[0], LOG_SERVICE_BUFLEN-1); -#endif - argc = GetArgc((const uint8_t*)&((*pUartLogBuf).UARTLogBuf[0])); - argv = GetArgv((const uint8_t*)&((*pUartLogBuf).UARTLogBuf[0])); - - if(argc > 0){ -#if SUPPORT_LOG_SERVICE -// if(log_handler(argv[0]) == NULL) -// legency_interactive_handler(argc, argv); - //RtlUpSema((_Sema *)&log_rx_interrupt_sema); - rtw_up_sema((_sema *)&log_rx_interrupt_sema); -#endif - ArrayInitialize(argv[0], sizeof(argv[0]) ,0); - }else{ -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) - pmu_acquire_wakelock(BIT(PMU_LOGUART_DEVICE)); -#endif - CONSOLE_8195A(); // for null command - } - - (*pUartLogBuf).BufCount = 0; - ArrayInitialize(&(*pUartLogBuf).UARTLogBuf[0], UART_LOG_CMD_BUFLEN, '\0'); -} -//====================================================== -// overload original RtlConsolTaskRam -//MON_RAM_TEXT_SECTION -void -RtlConsolTaskRam( - void *Data -) -{ -#if SUPPORT_LOG_SERVICE - log_service_init(); -#endif - //4 Set this for UartLog check cmd history -#ifdef CONFIG_KERNEL - pUartLogCtl->TaskRdy = 1; - up_sema_from_isr = rtw_up_sema_from_isr; -#endif -#ifndef CONFIG_KERNEL - pUartLogCtl->BootRdy = 1; -#endif - do{ -#if defined(CONFIG_KERNEL) && !TASK_SCHEDULER_DISABLED - //RtlDownSema((_Sema *)&pUartLogCtl->Sema); - rtw_down_sema((_sema *)&pUartLogCtl->Sema); -#endif - if (pUartLogCtl->ExecuteCmd) { - // Add command handler here - console_cmd_exec((PUART_LOG_CTL)pUartLogCtl); - //UartLogCmdExecute((PUART_LOG_CTL)pUartLogCtl); - pUartLogCtl->ExecuteCmd = _FALSE; - } - }while(1); -} - -//====================================================== -#if BUFFERED_PRINTF -xTaskHandle print_task = NULL; -EventGroupHandle_t print_event = NULL; -char print_buffer[MAX_PRINTF_BUF_LEN]; -int flush_idx = 0; -int used_length = 0; - -int available_space(void) -{ - return MAX_PRINTF_BUF_LEN-used_length; -} - -int buffered_printf(const char* fmt, ...) -{ - if((print_task==NULL) || (print_event==NULL) ) - return 0; - char tmp_buffer[UART_LOG_CMD_BUFLEN+1]; - static int print_idx = 0; - int cnt; - - if(xEventGroupGetBits(print_event)!=1) - xEventGroupSetBits(print_event, 1); - - memset(tmp_buffer,0,UART_LOG_CMD_BUFLEN+1); - VSprintf(tmp_buffer, fmt, ((const int *)&fmt)+1); - cnt = _strlen(tmp_buffer); - if(cnt < available_space()){ - if(print_idx >= flush_idx){ - if(MAX_PRINTF_BUF_LEN-print_idx >= cnt){ - memcpy(&print_buffer[print_idx], tmp_buffer, cnt); - }else{ - memcpy(&print_buffer[print_idx], tmp_buffer, MAX_PRINTF_BUF_LEN-print_idx); - memcpy(&print_buffer[0], &tmp_buffer[MAX_PRINTF_BUF_LEN-print_idx], cnt-(MAX_PRINTF_BUF_LEN-print_idx)); - } - }else{ // space is flush_idx - print_idx, and available space is enough - memcpy(&print_buffer[print_idx], tmp_buffer, cnt); - } - // protection needed - taskENTER_CRITICAL(); - used_length+=cnt; - taskEXIT_CRITICAL(); - print_idx+=cnt; - if(print_idx>=MAX_PRINTF_BUF_LEN) - print_idx -= MAX_PRINTF_BUF_LEN; - }else{ - // skip - cnt = 0; - } - - return cnt; -} - - -void printing_task(void* arg) -{ - while(1){ - //wait event - if(xEventGroupWaitBits(print_event, 1, pdFALSE, pdFALSE, 100 ) == 1){ - while(used_length > 0){ - putchar(print_buffer[flush_idx]); - flush_idx++; - if(flush_idx >= MAX_PRINTF_BUF_LEN) - flush_idx-=MAX_PRINTF_BUF_LEN; - taskENTER_CRITICAL(); - used_length--; - taskEXIT_CRITICAL(); - } - // clear event - xEventGroupClearBits( print_event, 1); - } - } -} - -void rtl_printf_init() -{ - if(print_event==NULL){ - print_event = xEventGroupCreate(); - if(print_event == NULL) - printf("\n\rprint event init fail!\n"); - } - if(print_task == NULL){ - if(xTaskCreate(printing_task, (const char *)"print_task", 512, NULL, tskIDLE_PRIORITY + 1, &print_task) != pdPASS) - printf("\n\rprint task init fail!\n"); - } -} -#endif -//====================================================== - - -__weak void console_init(void) -{ - - IRQ_HANDLE UartIrqHandle; - - //4 Register Log Uart Callback function - UartIrqHandle.Data = NULL;//(uint32_t)&UartAdapter; - UartIrqHandle.IrqNum = UART_LOG_IRQ; - UartIrqHandle.IrqFun = (IRQ_FUN) UartLogIrqHandleRam; - UartIrqHandle.Priority = 6; - - - //4 Register Isr handle - InterruptUnRegister(&UartIrqHandle); - InterruptRegister(&UartIrqHandle); - - - -#if !TASK_SCHEDULER_DISABLED - RtlConsolInitRam((uint32_t)RAM_STAGE,(uint32_t)0,(void*)NULL); -#else - RtlConsolInitRam((uint32_t)ROM_STAGE,(uint32_t)0,(void*)NULL); -#endif - -#if BUFFERED_PRINTF - rtl_printf_init(); -#endif -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/rtl_consol.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/rtl_consol.h deleted file mode 100644 index 991ea58..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/rtl_consol.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _RTK_CONSOL_H_ -#define _RTK_CONSOL_H_ -/* - * Include user defined options first. Anything not defined in these files - * will be set to standard values. Override anything you dont like! - */ - #if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) -#include "platform_opts.h" -#endif - -//#include "osdep_api.h" -#include "osdep_service.h" -#include "hal_diag.h" -#include "platform_stdlib.h" - -#define CONSOLE_PREFIX "#" - - -//Log UART -//UART_LOG_CMD_BUFLEN: only 126 bytes could be used for keeping input -// cmd, the last byte is for string end ('\0'). -#define UART_LOG_CMD_BUFLEN 127 -#define MAX_ARGV 10 - -//print log buffer length, if buffer get full, the extra logs will be discarded. -#if BUFFERED_PRINTF -#define MAX_PRINTF_BUF_LEN 1024 -#endif - - -typedef uint32_t (*ECHOFUNC)(IN uint8_t*,...); //UART LOG echo-function type. - -typedef struct _UART_LOG_BUF_ { - uint8_t BufCount; //record the input cmd char number. - uint8_t UARTLogBuf[UART_LOG_CMD_BUFLEN]; //record the input command. -} UART_LOG_BUF, *PUART_LOG_BUF; - - - -typedef struct _UART_LOG_CTL_ { - uint8_t NewIdx; - uint8_t SeeIdx; - uint8_t RevdNo; - uint8_t EscSTS; - uint8_t ExecuteCmd; - uint8_t ExecuteEsc; - uint8_t BootRdy; - uint8_t Resvd; - PUART_LOG_BUF pTmpLogBuf; - void *pfINPUT; - PCOMMAND_TABLE pCmdTbl; - uint32_t CmdTblSz; -#ifdef CONFIG_UART_LOG_HISTORY - uint32_t CRSTS; -#endif -#ifdef CONFIG_UART_LOG_HISTORY - uint8_t (*pHistoryBuf)[UART_LOG_CMD_BUFLEN]; -#endif -#ifdef CONFIG_KERNEL - uint32_t TaskRdy; - //_Sema Sema; - _sema Sema; -#else - // Since ROM code will reference this typedef, so keep the typedef same size - uint32_t TaskRdy; - void *Sema; -#endif -} UART_LOG_CTL, *PUART_LOG_CTL; - - -#define KB_ASCII_NUL 0x00 -#define KB_ASCII_BS 0x08 -#define KB_ASCII_TAB 0x09 -#define KB_ASCII_LF 0x0A -#define KB_ASCII_CR 0x0D -#define KB_ASCII_ESC 0x1B -#define KB_ASCII_SP 0x20 -#define KB_ASCII_BS_7F 0x7F -#define KB_ASCII_LBRKT 0x5B //[ - -#define KB_SPACENO_TAB 1 - -#ifdef CONFIG_UART_LOG_HISTORY -#define UART_LOG_HISTORY_LEN 5 -#endif - -#ifdef CONFIG_DEBUG_LOG -#define _ConsolePrint DiagPrintf -#else -#define _ConsolePrint -#endif - -#ifndef CONSOLE_PREFIX -#define CONSOLE_PREFIX "" -#endif - -#define CONSOLE_8195A(...) do {\ - _ConsolePrint("\r"CONSOLE_PREFIX __VA_ARGS__);\ -}while(0) - - -_LONG_CALL_ void -RtlConsolInit( - IN uint32_t Boot, - IN uint32_t TBLSz, - IN void *pTBL -); - -#if defined(CONFIG_KERNEL) -_LONG_CALL_ void -RtlConsolTaskRam( - void *Data -); -#endif - -_LONG_CALL_ void -RtlConsolTaskRom( - void *Data -); - - -_LONG_CALL_ uint32_t -Strtoul( - IN const uint8_t *nptr, - IN uint8_t **endptr, - IN uint32_t base -); - -void console_init(void); - -#endif //_RTK_CONSOL_H_ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/rtl_console_new.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/rtl_console_new.c deleted file mode 100644 index 050f3d8..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/rtl_console_new.c +++ /dev/null @@ -1,341 +0,0 @@ -/* - * console_api.c - * - * Created on: 24/02/17 - * Author: pvvx - */ -//====================================================== -#ifndef LOGUART_STACK_SIZE -#define LOGUART_STACK_SIZE 400 // USE_MIN_STACK_SIZE modify from 512 to 128 -#endif -#define CONSOLE_PRIORITY 0 -//====================================================== -#include "rtl8195a.h" -#include "rtl_bios_data.h" -#include "osdep_api.h" -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) -#include "freertos_pmu.h" -#else -#error "Define configUSE_WAKELOCK_PMU = 1 & configUSE_WAKELOCK_PMU = 1!" -#endif -#if defined(CONFIG_KERNEL) && !TASK_SCHEDULER_DISABLED -#else -#error "Define CONFIG_KERNEL & TASK_SCHEDULER_DISABLED = 0!" -#endif -#ifndef CONFIG_UART_LOG_HISTORY -#error "Define CONFIG_UART_LOG_HISTORY!" -#endif -//====================================================== -// #define USE_ROM_CONSOLE -//====================================================== -_LONG_CALL_ extern uint8_t UartLogCmdChk( -IN uint8_t RevData, IN UART_LOG_CTL *prvUartLogCtl, -IN uint8_t EchoFlag); - -_LONG_CALL_ extern void ArrayInitialize( -IN uint8_t *pArrayToInit, -IN uint8_t ArrayLen, -IN uint8_t InitValue); - -_LONG_CALL_ extern void UartLogHistoryCmd( -IN uint8_t RevData, IN UART_LOG_CTL *prvUartLogCtl, -IN uint8_t EchoFlag); - -//_LONG_CALL_ extern void UartLogCmdExecute(IN PUART_LOG_CTL pUartLogCtlExe); -//====================================================== -extern PCOMMAND_TABLE UartLogRamCmdTable[]; -extern int UartLogRamCmdTableSize; -//====================================================== -//: UartLogIrqHandleRam -//: To deal with Uart-Log RX IRQ -//: void -//: void -//: NA -//====================================================== -// overload original UartLogIrqHandle -MON_RAM_TEXT_SECTION -void UartLogIrqHandleRam(void * Data) { - uint32 IrqEn = DiagGetIsrEnReg(); // HAL_UART_READ32(UART_INTERRUPT_EN_REG_OFF) - DiagSetIsrEnReg(0); // HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, 0) - uint8 UartReceiveData = DiagGetChar(_FALSE); // if(flg) while(!(HAL_UART_READ32(UART_LINE_STATUS_REG_OFF)&1)); return HAL_UART_READ32(UART_REV_BUF_OFF); - if (UartReceiveData == 0) { - goto exit; - } - PUART_LOG_CTL p = (PUART_LOG_CTL) pUartLogCtl; - //KB_ESC chk is for cmd history, it's a special case here. - if (UartReceiveData == KB_ASCII_ESC) { - // Esc detection is only valid in the first stage of boot sequence (few seconds) - if (p->ExecuteEsc != _TRUE) { - p->ExecuteEsc = _TRUE; - p->EscSTS = 0; - } else { - //4 the input commands are valid only when the task is ready to execute commands - if (p->BootRdy == 1 || p->TaskRdy == 1) { - if (p->EscSTS == 0) { - p->EscSTS = 1; - } - } else { - p->EscSTS = 0; - } - } - } else if (p->EscSTS == 1) { - if (UartReceiveData != KB_ASCII_LBRKT) { // '[' - p->EscSTS = 0; - } else { - p->EscSTS = 2; - } - } else { - if (p->EscSTS == 2) { - p->EscSTS = 0; - if (UartReceiveData == 'A' || UartReceiveData == 'B') { - // if(UartReceiveData == ...) set pUartLogCtl->SeeIdx ... - // prvStrCpy(pUartLogCtl->pTmpLogBuf->UARTLogBuf, pUartLogCtl->pHistoryBuf[pUartLogCtl->SeeIdx]); - // pUartLogCtl->pTmpLogBuf->BufCount = prvStrLen(pUartLogCtl->pTmpLogBuf->UARTLogBuf); - // if(EchoFlag) pUartLogCtl->pfINPUT(pUartLogCtl->pTmpLogBuf->UARTLogBuf); - UartLogHistoryCmd(UartReceiveData, (UART_LOG_CTL *) pUartLogCtl, - 1); - } - } else { - if (UartLogCmdChk(UartReceiveData, (UART_LOG_CTL *) pUartLogCtl, 1) - == 2) { - // check UartLog buffer to prevent from incorrect access - if (p->pTmpLogBuf != NULL) { - p->ExecuteCmd = _TRUE; - if (p->TaskRdy) { - rtw_up_sema_from_isr((_Sema *) &pUartLogCtl->Sema); - } - } else { - ArrayInitialize((uint8_t *) pUartLogCtl->pTmpLogBuf->UARTLogBuf, - UART_LOG_CMD_BUFLEN, '\0'); - } - } - } - } - exit: - DiagSetIsrEnReg(IrqEn); // HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, IrqEn) -} -//====================================================== -//: GetArgvRam -//: парсигн аргументов строки -//: pstr - указатель на строку -//: кол-во аргументов -//: 2 формата: -// 1) cmd=arg1,arg2,... -// 2) cmd arg1 arg2 -// arg может быть обрамлен '"' или '\'' -// для передачи ' ' или ','. -// Начальные пробелы cmd или arg удаляются. -//====================================================== -int GetArgvRam(IN uint8_t *pstr, uint8_t** argv) { - int arvc = 0; -// uint8_t** argv = ArgvArray; - uint8_t* p = pstr; - uint8_t t = 0, n = ' '; - int m = 0; - while(*p != 0 - && *p != '\r' - && *p != '\n' - && arvc < MAX_ARGV - && p < &pstr[UART_LOG_CMD_BUFLEN-1]) { - switch(m) { - case 0: // wait cmd - if(*p == ' ') { -// *p = 0; - break; - } - *argv++ = p; - arvc++; - m++; - break; - case 1: // test end cmd, type format parm - if(*p == ' ') { // format cmd arg1 arg2 ... - m++; - *p = 0; - } else if(*p == '=') { // "at" format cmd=arg1,arg2,... - n = ','; - m++; - *p = 0; - } - break; - case 2: // wait start arg - if(*p == ' ') { - *p = 0; - break; - } - if(*p == '"' || *p == '\'') { - t = *p; - m = 4; - *p = 0; - break; - } - *argv++ = p; - arvc++; - m++; - case 3: // end arg - if(*p == n) { // ' ' or ',' - m = 2; - *p = 0; - } - break; - case 4: - *argv++ = p; - arvc++; - m++; - case 5: - if(*p == t) { // '\'' or '"' - m = 3; - *p = 0; - } - break; - } - p++; - } - return arvc; -} -//====================================================== -//: RtlConsolTaskRam -//: overload original RtlConsolTaskRam -//: Data - указатель PUART_LOG_CTL -//: none -//: -//====================================================== -MON_RAM_TEXT_SECTION void RtlConsolTaskRam(void *Data) { - PUART_LOG_CTL p = (PUART_LOG_CTL) pUartLogCtl; -#ifdef USE_ROM_CONSOLE // show Help - p->pTmpLogBuf->UARTLogBuf[0] = '?'; - p->pTmpLogBuf->BufCount = 1; - p->ExecuteCmd = _TRUE; -#endif - do { - p->TaskRdy = _TRUE; - rtw_down_sema(&p->Sema); - if (p->ExecuteCmd) { - // UartLogCmdExecute(pUartLogCtl); - int argc = GetArgvRam(p->pTmpLogBuf->UARTLogBuf, ArgvArray); - if(argc) { - StrUpr(ArgvArray[0]); - PCOMMAND_TABLE pcmd = p->pCmdTbl; - int flg = 1; -#ifdef USE_ROM_CONSOLE - for(int i = 0; i < p->CmdTblSz; i++) { -#else - while(pcmd->cmd) { -#endif - if(prvStrCmp(ArgvArray[0], pcmd->cmd) == 0) { - flg = 0; - if(pcmd->ArgvCnt < argc) { -#ifdef USE_ROM_CONSOLE - pcmd->func(argc-1, (char **) &ArgvArray[1]); -#else - pcmd->func(argc, (char **) &ArgvArray); -#endif - } else { -#ifdef USE_ROM_CONSOLE - DiagPrintf(pcmd->msg); -#else - DiagPrintf("%s%s\n", pcmd->cmd, pcmd->msg); -#endif - } - } - pcmd++; - } - if(flg) DiagPrintf("cmd: %s - nothing!\n", ArgvArray[0]); -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) - release_wakelock(WAKELOCK_LOGUART); -#endif - } -#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1) - else acquire_wakelock(WAKELOCK_LOGUART); -#endif - p->pTmpLogBuf->BufCount = 0; - p->pTmpLogBuf->UARTLogBuf[0] = 0; - HalSerialPutcRtl8195a('\r'); - HalSerialPutcRtl8195a('>'); - p->ExecuteCmd = _FALSE; - } - } while (1); -} -//====================================================== -//: console_init -//: Initialize rtl console -//: none -//: none -//: delete rtl_concole.h from project -//====================================================== -MON_RAM_TEXT_SECTION void console_init(void) { - IRQ_HANDLE UartIrqHandle; - // Register Log Uart Callback function - UartIrqHandle.Data = 0; // (uint32_t)&UartAdapter; - UartIrqHandle.IrqNum = UART_LOG_IRQ; - UartIrqHandle.IrqFun = (IRQ_FUN) UartLogIrqHandleRam; - UartIrqHandle.Priority = 0; // ?? - // Register Isr handle - InterruptUnRegister(&UartIrqHandle); -#ifdef USE_ROM_CONSOLE // use ROM Consol init & printf "" - RtlConsolInit(RAM_STAGE, (uint32_t) 6, (void*) UartLogRomCmdTable); -#else - UartLogBuf.BufCount = 0; - ArrayInitialize(&UartLogBuf.UARTLogBuf[0], UART_LOG_CMD_BUFLEN, '\0'); - pUartLogCtl = &UartLogCtl; - pUartLogCtl->NewIdx = 0; - pUartLogCtl->SeeIdx = 0; - pUartLogCtl->EscSTS = 0; - pUartLogCtl->BootRdy = 0; - pUartLogCtl->pTmpLogBuf = &UartLogBuf; - pUartLogCtl->CRSTS = 0; - pUartLogCtl->pHistoryBuf = UartLogHistoryBuf; - pUartLogCtl->pfINPUT = (void*) &DiagPrintf; - pUartLogCtl->pCmdTbl = (PCOMMAND_TABLE) UartLogRamCmdTable; - pUartLogCtl->CmdTblSz = UartLogRamCmdTableSize/16; //6; // GetRomCmdNum() - pUartLogCtl->TaskRdy = 0; -#endif - pUartLogCtl->RevdNo = UART_LOG_HISTORY_LEN; - // Create a Semaphone - rtw_init_sema((_sema *)&pUartLogCtl->Sema, 1); - // executing boot sequence - pUartLogCtl->ExecuteCmd = _FALSE; - pUartLogCtl->ExecuteEsc = _TRUE; //don't check Esc anymore - InterruptRegister(&UartIrqHandle); - if (pdTRUE - != xTaskCreate(RtlConsolTaskRam, - (const signed char * const )"loguart", LOGUART_STACK_SIZE, - NULL, tskIDLE_PRIORITY + CONSOLE_PRIORITY + PRIORITIE_OFFSET, NULL)) { - DiagPrintf("Create Log UART Task Err!!\n"); - } -} - -#ifndef USE_ROM_CONSOLE -//====================================================== -//: console_help -//: Initialize rtl console -//: argc - кол-во аргуметов, argv - список аргументов -//: none -//: -//====================================================== -extern char str_rom_57ch3Dch0A[]; // "=========================================================\n" 57 шт -_WEAK void console_help(int argc, char *argv[]) { // Help - DiagPrintf("CONSOLE COMMAND SET:\n"); - DiagPrintf(&str_rom_57ch3Dch0A[25]); // DiagPrintf("==============================\n"); - PCOMMAND_TABLE pcmdtab = (PCOMMAND_TABLE) UartLogRamCmdTable; - while(pcmdtab->cmd) { -#ifdef USE_ROM_CONSOLE - DiagPrintf(pcmdtab->msg); -#else - DiagPrintf("%s%s\n", pcmdtab->cmd, pcmdtab->msg); -#endif - pcmdtab++; - } - DiagPrintf(&str_rom_57ch3Dch0A[25]); // DiagPrintf("==============================\n"); -} - -void print_on(int argc, char *argv[]) -{ - print_off = argv[1][0]!='1'; -} -// (!) размещается в специальном сегменте '.mon.tab*' (см. *.ld файл) -MON_RAM_TAB_SECTION COMMAND_TABLE console_commands[] = { - {"PR", 1, print_on, "=<1/0>: Printf on/off"}, // Help - {"?", 0, console_help, ": This Help"} // Help -// {"HELP", 0, console_help, ": Help"} // Help -}; -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/rtl_sec.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/rtl_sec.h deleted file mode 100644 index d4a1424..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/driver/rtl_sec.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef RTL_SEC_H -#define RTL_SEC_H - -#include - -#define SEC_PROCESS_OPT_ENC 1 -#define SEC_PROCESS_OPT_DEC 2 - -#define sec_process_data ProcessSecData -uint32_t sec_process_data(uint8_t key_idx, uint32_t opt, uint8_t *iv, uint8_t *input_buf, uint32_t buf_len, uint8_t *output_buf); - -#endif // RTL_SEC_H diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/iar_utility/common/tools/checksum b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/iar_utility/common/tools/checksum deleted file mode 100644 index a664826..0000000 Binary files a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/iar_utility/common/tools/checksum and /dev/null differ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/iar_utility/common/tools/padding b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/iar_utility/common/tools/padding deleted file mode 100644 index 3c79536..0000000 Binary files a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/iar_utility/common/tools/padding and /dev/null differ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/iar_utility/common/tools/pick b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/iar_utility/common/tools/pick deleted file mode 100644 index 018ae52..0000000 Binary files a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/iar_utility/common/tools/pick and /dev/null differ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/iar_utility/common/tools/src/pick.cpp b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/iar_utility/common/tools/src/pick.cpp deleted file mode 100644 index 6bd15ae..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/iar_utility/common/tools/src/pick.cpp +++ /dev/null @@ -1,136 +0,0 @@ -// pick.cpp : main project file. - -#include "stdafx.h" - -using namespace System; - -#include -#include -#include -//#include -#include -#include -#include - -#define PATTERN_1 0x96969999 -#define PATTERN_2 0xFC66CC3F -#define PATTERN_3 0x03CC33C0 -#define PATTERN_4 0x6231DCE5 - -unsigned int fw_head[4] = { PATTERN_1, PATTERN_2, PATTERN_3, PATTERN_4 }; -unsigned int seg_head[4] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; -/* -int main(array ^args) -{ - Console::WriteLine(L"Hello World"); - return 0; -} -*/ -int main(int argc, char* argv[]) -{ - int arg_num = 6; - - if ((argc>5) && (strstr(argv[5], "head"))) arg_num++; - - if (argc != arg_num){ - printf("Usage: pick.exe \n"); - return -1; - } - - unsigned char *buf; - - unsigned int start;//=atoi(argv[1]); - unsigned int end;// = atoi(argv[2]); - unsigned int base; - - int is_raw = 0; - int is_sig = 0; - - char *inf = argv[3]; - char *outf = argv[4]; - - int size; - FILE *ifp, *ofp; - - //if(argv[1][0]=='0'&&(argv[1][1]=='x'||argv[1][1]=='X')) - // sscanf(argv[1], "0x%x", &start); - //else - // start=atoi(argv[1]); - start = strtol(argv[1], NULL, 0); - - //if(argv[2][0]=='0'&&(argv[2][1]=='x'||argv[2][1]=='X')) - // sscanf(argv[2], "0x%x", &end); - //else - // end=atoi(argv[2]); - end = strtol(argv[2], NULL, 0); - - base = start & 0xFFFF0000; - - if (strstr(argv[5], "reset_offset")){ - base = start; - } - - if (strstr(argv[5], "raw")){ - is_raw = 1; - } - else - is_raw = 0; - - if (strstr(argv[5], "sig")){ - is_sig = 1; - } - else - is_sig = 0; - - printf("b:%d s:%d e:%d\n", base, start, end); - //printf("%s %s\n", inf, outf); - - ifp = fopen(inf, "rb"); - if (!ifp) return -2; - ofp = fopen(outf, "wb"); - if (!ofp) return -3; - - fseek(ifp, 0, SEEK_END); - size = ftell(ifp); - - printf("size %d\n", size); - buf = (unsigned char *)malloc(size); - if (!buf) return -4; - - if (end == 0) end = base + size; - - if (end - start + 1 > 0){ - fseek(ifp, start - base, SEEK_SET); - fread(buf, end - start, 1, ifp); - if (is_raw == 0){ - if (strstr(argv[5], "head")){ - int offset = strtol(argv[6], NULL, 0); - printf("append fw head %x\n", offset); - fwrite(fw_head, 4, sizeof(unsigned int), ofp); - seg_head[2] = (0xFFFF0000 | (offset / 1024)); - } - else{ - if (is_sig){ - seg_head[2] = 0x35393138; - seg_head[3] = 0x31313738; - } - else{ - seg_head[2] = 0xFFFFFFFF; - seg_head[3] = 0xFFFFFFFF; - } - } - seg_head[0] = end - start; - seg_head[1] = start; - fwrite(seg_head, 4, sizeof(unsigned int), ofp); - } - fwrite(buf, end - start, 1, ofp); - - } - printf("copy size %d\n", end - start); - fclose(ifp); - fclose(ofp); - free(buf); - - return 0; -} - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/freertos_pmu_8195a.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/freertos_pmu_8195a.c deleted file mode 100644 index 2bd2627..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/freertos_pmu_8195a.c +++ /dev/null @@ -1,359 +0,0 @@ -#include "FreeRTOS.h" - -#include "freertos_pmu.h" - -#include - -#include "platform_autoconf.h" -#include "sys_api.h" -#include "sleep_ex_api.h" -#include "us_ticker_api.h" -#include "cmsis_os.h" - -#include "task.h" - -#ifndef portNVIC_SYSTICK_CURRENT_VALUE_REG -#define portNVIC_SYSTICK_CURRENT_VALUE_REG ( * ( ( volatile uint32_t * ) 0xe000e018 ) ) -#endif - -uint32_t missing_tick = 0; - -static uint32_t wakelock = DEFAULT_WAKELOCK; -static uint32_t wakeup_event = DEFAULT_WAKEUP_EVENT; - -typedef struct { - uint32_t nDeviceId; - PSM_HOOK_FUN sleep_hook_fun; - void* sleep_param_ptr; - PSM_HOOK_FUN wakeup_hook_fun; - void* wakeup_param_ptr; -} PSM_DD_HOOK_INFO; - -#define MAX_PSM_DD_HOOK_INFO_SIZE 8 -uint32_t psm_dd_hook_info_size = 0; -PSM_DD_HOOK_INFO psm_dd_hook_infos[MAX_PSM_DD_HOOK_INFO_SIZE]; - -static uint8_t last_wakelock_state[32] = { - DEFAULT_WAKELOCK & 0x01, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0 -}; - -#if (configGENERATE_RUN_TIME_STATS == 1) -static uint32_t last_acquire_wakelock_time[32] = {0}; -static uint32_t hold_wakelock_time[32] = {0}; -static uint32_t base_sys_time = 0; -#endif - -static uint32_t sys_sleep_time = 0; - -unsigned char reserve_pll = 0; -unsigned char generate_wakelock_stats = 0; - -/* ++++++++ FreeRTOS macro implementation ++++++++ */ - -/* - * It is called in idle task. - * - * @return true : System is ready to check conditions that if it can enter sleep. - * false : System keep awake. - **/ -/* - * It is called when freertos is going to sleep. - * At this moment, all sleep conditons are satisfied. All freertos' sleep pre-processing are done. - * - * @param expected_idle_time : The time that FreeRTOS expect to sleep. - * If we set this value to 0 then FreeRTOS will do nothing in its sleep function. - **/ -void freertos_pre_sleep_processing(uint32_t *expected_idle_time) { - -#ifdef CONFIG_SOC_PS_MODULE - - uint32_t i; - uint32_t stime; - uint32_t tick_before_sleep; - uint32_t tick_after_sleep; - uint32_t tick_passed; - uint32_t backup_systick_reg; - unsigned char suspend_sdram; - - /* To disable freertos sleep function and use our sleep function, - * we can set original expected idle time to 0. */ - stime = *expected_idle_time; - *expected_idle_time = 0; - - for (i=0; i tick_before_sleep) { - tick_passed = tick_after_sleep - tick_before_sleep; - } else { - // overflow - tick_passed = (0xffffffff - tick_before_sleep) + tick_after_sleep; - } - - /* If there is a rapid interrupt (<1ms), it makes tick_passed less than 1ms. - * The tick_passed would be rounded and make OS can't step tick. - * We collect the rounded tick_passed into missing_tick and step tick properly. - * */ - tick_passed += missing_tick; - if (tick_passed > stime * 1000) { - missing_tick = tick_passed - stime * 1000; - tick_passed = stime * 1000; - } else { - missing_tick = tick_passed % 1000; - } - - // update kernel tick - vTaskStepTick( tick_passed/1000 ); - } - - sys_sleep_time += tick_passed/1000; - - for (i=0; i 0) { - sprintf(pcWriteBuffer, "%x\t\t%u\r\n", i, (unsigned int)hold_wakelock_time[i]); - } - } - pcWriteBuffer += strlen( pcWriteBuffer ); - } - sprintf(pcWriteBuffer, "time passed: %u ms, system sleep %u ms\r\n", (unsigned int)(current_timestamp - base_sys_time), (unsigned int)sys_sleep_time); - } -} - -void pmu_clean_wakelock_stat() { - uint32_t i; - base_sys_time = osKernelSysTick(); - for (i=0; i<32; i++) { - hold_wakelock_time[i] = 0; - if (last_wakelock_state[i] == 1) { - last_acquire_wakelock_time[i] = base_sys_time; - } - } - sys_sleep_time = 0; -} -#endif - -void pmu_add_wakeup_event(uint32_t event) { - wakeup_event |= event; -} - -void pmu_del_wakeup_event(uint32_t event) { - wakeup_event &= ~event; - // To fulfill tickless design, system timer is required to be wakeup event - wakeup_event |= SLEEP_WAKEUP_BY_STIMER; -} - -void pmu_register_sleep_callback(uint32_t nDeviceId, PSM_HOOK_FUN sleep_hook_fun, void* sleep_param_ptr, PSM_HOOK_FUN wakeup_hook_fun, void* wakeup_param_ptr) { - uint32_t i; - for (i=0; i 1) { - // if we have more than 2 items, just swap the last item into current slot - psm_dd_hook_infos[i].nDeviceId = psm_dd_hook_infos[psm_dd_hook_info_size-1].nDeviceId; - psm_dd_hook_infos[i].sleep_hook_fun = psm_dd_hook_infos[psm_dd_hook_info_size-1].sleep_hook_fun; - psm_dd_hook_infos[i].sleep_param_ptr = psm_dd_hook_infos[psm_dd_hook_info_size-1].sleep_param_ptr; - psm_dd_hook_infos[i].wakeup_hook_fun = psm_dd_hook_infos[psm_dd_hook_info_size-1].wakeup_hook_fun; - psm_dd_hook_infos[i].wakeup_param_ptr = psm_dd_hook_infos[psm_dd_hook_info_size-1].wakeup_param_ptr; - - // Then erase the last item - psm_dd_hook_infos[psm_dd_hook_info_size-1].nDeviceId = 0; - psm_dd_hook_infos[psm_dd_hook_info_size-1].sleep_hook_fun = NULL; - psm_dd_hook_infos[psm_dd_hook_info_size-1].sleep_param_ptr = NULL; - psm_dd_hook_infos[psm_dd_hook_info_size-1].wakeup_hook_fun = NULL; - psm_dd_hook_infos[psm_dd_hook_info_size-1].wakeup_param_ptr = NULL; - } else { - // we only have one item, just erase it - psm_dd_hook_infos[i].nDeviceId = 0; - psm_dd_hook_infos[i].sleep_hook_fun = NULL; - psm_dd_hook_infos[i].sleep_param_ptr = NULL; - psm_dd_hook_infos[i].wakeup_hook_fun = NULL; - psm_dd_hook_infos[i].wakeup_param_ptr = NULL; - } - psm_dd_hook_info_size--; - break; - } - } -} - -void pmu_set_pll_reserved(unsigned char reserve) { - reserve_pll = reserve; -} - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/freertos_pmu_8195a.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/freertos_pmu_8195a.h deleted file mode 100644 index 9191b5d..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/freertos_pmu_8195a.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef _FREERTOS_PMU_8195A_H_ -#define _FREERTOS_PMU_8195A_H_ - -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/mailbox.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/mailbox.c deleted file mode 100644 index b97e3f2..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/mailbox.c +++ /dev/null @@ -1,566 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - -#define _MAILBOX_C_ - -#include "mailbox.h" - -/****************************************************************************** - * Function Prototype Declaration - ******************************************************************************/ -static PRTL_MAILBOX RtlMBoxIdToHdl(IN uint8_t MBoxId); - -PRTL_MAILBOX RtlMailboxCreate(IN uint8_t MboxID, IN uint32_t MboxSize, IN _Sema *pWakeSema); - -void RtlMailboxDel(IN PRTL_MAILBOX MboxHdl); - -uint8_t RtlMailboxSendToBack( - IN uint8_t MboxID, - IN MSG_BLK *pMsg, - IN uint32_t MSToWait, - IN uint8_t IsFromISR -); - -uint8_t RtlMailboxSendToFront( - IN uint8_t MboxID, - IN MSG_BLK *pMsg, - IN uint32_t MSToWait, - IN uint8_t IsFromISR -); - -uint8_t RtlMailboxReceive( - IN uint8_t MboxID, - OUT MSG_BLK *pMsg, - IN uint32_t MSToWait, - IN uint8_t IsFromISR -); - -uint8_t RtlMailboxPeek( - IN uint8_t MboxID, - OUT MSG_BLK *pMsg, - IN uint32_t MSToWait, - IN uint8_t IsFromISR -); - -uint32_t RtlMailboxMsgWaiting( - IN uint8_t MboxID, - IN uint8_t IsFromISR -); - -/****************************************************************************** - * Global Variable Declaration - ******************************************************************************/ -static RTL_MBOX_ROOT MBox_Entry; - -/****************************************************************************** - * External Function & Variable Declaration - ******************************************************************************/ - - -/****************************************************************************** - * Function: RtlMBoxIdToHdl - * Desc: Map a mailbox ID to the mailbox pointer. - * Para: - * MBoxId: The Mailbox ID - * Return: The pointer of the mailbox. If didn't found match mailbox, - * return NULL. - * - ******************************************************************************/ -static PRTL_MAILBOX RtlMBoxIdToHdl( - IN uint8_t MBoxId -) -{ - RTL_MAILBOX *pMbox=NULL; - RTL_MAILBOX *pTmpMbox; - _LIST *pHead; - _LIST *pList; - - // if the Mailbox root entry initialed ? if not, initial it - if (!MBox_Entry.isInitialed) { - RtlMutexInit(&MBox_Entry.Mutex); // Init the Mutex for the mailbox add/delete procedure protection - RtlInitListhead(&MBox_Entry.mbox_list); // Init the link list head to chain all created mailbox - MBox_Entry.isInitialed = 1; - MSG_MBOX_INFO("MBox Entry Initial...\n"); - } - - pHead = &MBox_Entry.mbox_list; - RtlDownMutex(&MBox_Entry.Mutex); - pList = RtlListGetNext(&MBox_Entry.mbox_list); - while (pList != pHead) { - pTmpMbox = CONTAINER_OF(pList, RTL_MAILBOX, mbox_list); - if (MBoxId == pTmpMbox->mbox_id) { - pMbox = pTmpMbox; - break; - } - pList = RtlListGetNext(pList); - } - RtlUpMutex(&MBox_Entry.Mutex); - - return pMbox; -} - -/****************************************************************************** - * Function: RtlMailboxCreate - * Desc: To create a mailbox with a given mailbox ID and size - * Para: - * MboxID: A number to identify this created mailbox. A message block can - * be send to a mailbox by a given MboxID. The MboxID must be unique - * in the whole system. If this MboxID is conflict with a created - * mailbox, the mailbox creation will fail and return NULL. - * MboxSize: The size of this mailbox to be created. It means maximum number - * of message blocks can be stored in this mailbox. - * pWakeSema: The semaphore to wake up the receiving task to receive the new - * message. If the receiving task doesn't need a semaphore to wakeup - * it, then just let this pointer is NULL. - * Return: The created mailbox pointer. If it failed, return NULL. - ******************************************************************************/ -PRTL_MAILBOX RtlMailboxCreate( - IN uint8_t MboxID, - IN uint32_t MboxSize, - IN _Sema *pWakeSema -) -{ - PRTL_MAILBOX pMBox=NULL; - - // if the Mailbox root entry initialed ? if not, initial it - if (!MBox_Entry.isInitialed) { - RtlMutexInit(&MBox_Entry.Mutex); // Init the Mutex for the mailbox add/delete procedure protection - RtlInitListhead(&MBox_Entry.mbox_list); // Init the link list head to chain all created mailbox - MBox_Entry.isInitialed = 1; - MSG_MBOX_INFO("MBox Entry Initial...\n"); - } - - // check if this mailbox ID is ocupied ? - pMBox = RtlMBoxIdToHdl(MboxID); - if (NULL != pMBox) { - MSG_MBOX_ERR("RtlMailboxCreate: The Mailbox ID %d is used by someone!!\n", MboxID); - return NULL; - } - - pMBox = (RTL_MAILBOX *)RtlZmalloc(sizeof(RTL_MAILBOX)); - if (NULL==pMBox) { - MSG_MBOX_ERR("RtlMailboxCreate: MAlloc Failed\n"); - return NULL; - } - - RtlInitListhead(&pMBox->mbox_list); // Init the link list to be chained into the created mailbox list - pMBox->mbox_id = MboxID; - pMBox->pWakeSema = pWakeSema; -#ifdef PLATFORM_FREERTOS - pMBox->mbox_hdl = xQueueCreate(MboxSize, sizeof(MSG_BLK)); - if (NULL == pMBox->mbox_hdl) { - MSG_MBOX_ERR("RtlMailboxCreate: xQueueCreate Failed\n"); - RtlMfree((void *)pMBox, sizeof(RTL_MAILBOX)); - return NULL; - } -#endif -#ifdef PLATFORM_ECOS -// TODO: Create mailbox -#endif - - // Add this mailbox to the link list of created mailbox - RtlDownMutex(&MBox_Entry.Mutex); - RtlListInsertTail(&pMBox->mbox_list, &MBox_Entry.mbox_list); - RtlUpMutex(&MBox_Entry.Mutex); - - MSG_MBOX_INFO("A Mailbox Created: Size=%d\n", MboxSize); - - return pMBox; -} - -/****************************************************************************** - * Function: RtlMailboxDel - * Desc: To delete a mailbox by a given mailbox handle. - * Para: - * MboxHdl: The handle of the mailbox to be deleted. - * Return: None. - ******************************************************************************/ -void RtlMailboxDel( - IN PRTL_MAILBOX MboxHdl -) -{ - if (NULL == MboxHdl) { - MSG_MBOX_ERR("RtlMailboxDel: Try to delete a NULL mailbox\n"); - return; - } - - // Remove this mailbox from the link list of created mailbox - RtlDownMutex(&MBox_Entry.Mutex); - RtlListDelete(&MboxHdl->mbox_list); - RtlUpMutex(&MBox_Entry.Mutex); - - // delete the Queue/Mailbox -#ifdef PLATFORM_FREERTOS - vQueueDelete((xQueueHandle)(MboxHdl->mbox_hdl)); -#endif -#ifdef PLATFORM_ECOS - // TODO: Delete mailbox -#endif - - RtlMfree((void *)MboxHdl, sizeof(RTL_MAILBOX)); -} - -/****************************************************************************** - * Function: RtlMailboxSendToBack - * Desc: To put a message block to the tail of a given mailbox. - * Para: - * MboxID: The identifier of the target mailbox. - * pMsg: The pointer of the message block to be put into the mailbox. - * MSToWait: If the mailbox is full, this value gives a time to wait to put - * this message. The time unit is millisecond. - * The special values are: - * 0: no waiting; - * 0xffffffff: wait without timeout. - * If the waiting is timeout, the message sending is failed and - * return _FAIL. - * IsFromISR: Is this function is called from an ISR ? - * Return: _SUCCESS or _FAIL. - ******************************************************************************/ -uint8_t RtlMailboxSendToBack( - IN uint8_t MboxID, - IN MSG_BLK *pMsg, - IN uint32_t MSToWait, - IN uint8_t IsFromISR -) -{ - RTL_MAILBOX *pMbox=NULL; - uint32_t wait_ticks; -#ifdef PLATFORM_FREERTOS - portBASE_TYPE ret; -#endif - - pMbox = RtlMBoxIdToHdl(MboxID); - - if (NULL == pMbox) { - MSG_MBOX_ERR("RtlMailboxSendToBack: Didn't find matched MBoxID=%d\n", MboxID); - return _FAIL; - } - -#ifdef PLATFORM_FREERTOS - if (MBOX_WAIT_NO_TIMEOUT == MSToWait) { - wait_ticks = portMAX_DELAY; - } - else if (MBOX_WAIT_NONE == MSToWait) { - wait_ticks = 0; - } - else { - wait_ticks = ((MSToWait/portTICK_RATE_MS)>0)?(MSToWait/portTICK_RATE_MS):(1); - } - - if (IsFromISR) { - ret = xQueueSendToBackFromISR(pMbox->mbox_hdl, (void *)pMsg, NULL);//(portTickType) wait_ticks); - } - else { - ret = xQueueSendToBack(pMbox->mbox_hdl, (void *)pMsg, (portTickType) wait_ticks); - } - - if(ret != pdPASS ) { - // send message to the queue failed - MSG_MBOX_ERR("RtlMailboxSendToBack: Put Msg to Queue Failed, MBoxID=%d\n", MboxID); - ret = _FAIL; - } - else { - // try to give a semaphore to wake up the receiving task - if (pMbox->pWakeSema) { - RtlUpSema(pMbox->pWakeSema); - } - ret = _SUCCESS; - } - - return ret; -#endif - -#ifdef PLATFORM_ECOS - // TODO: Put the message to a mailbox -#endif - -} - - -/****************************************************************************** - * Function: RtlMailboxSendToFront - * Desc: To put a message block to the head of a mailbox. - * Para: - * MboxID: The identifier of the target mailbox. - * pMsg: The pointer of the message block to be put into the mailbox. - * MSToWait: If the mailbox is full, this value gives a time to wait to put - * this message. The time unit is millisecond. - * The special values are: - * 0: no waiting; - * 0xffffffff: wait without timeout. - * If the waiting is timeout, the message sending is failed and - * return _FAIL. - * IsFromISR: Is this function is called from an ISR ? - * Return: _SUCCESS or _FAIL. - ******************************************************************************/ -uint8_t RtlMailboxSendToFront( - IN uint8_t MboxID, - IN MSG_BLK *pMsg, - IN uint32_t MSToWait, - IN uint8_t IsFromISR -) -{ - RTL_MAILBOX *pMbox=NULL; - uint32_t wait_ticks; -#ifdef PLATFORM_FREERTOS - portBASE_TYPE ret; -#endif - - pMbox = RtlMBoxIdToHdl(MboxID); - - if (NULL == pMbox) { - MSG_MBOX_ERR("RtlMailboxSendToBack: Didn't find matched MBoxID=%d\n", MboxID); - return _FAIL; - } - -#ifdef PLATFORM_FREERTOS - if (MBOX_WAIT_NO_TIMEOUT == MSToWait) { - wait_ticks = portMAX_DELAY; - } - else if (MBOX_WAIT_NONE == MSToWait) { - wait_ticks = 0; - } - else { - wait_ticks = ((MSToWait/portTICK_RATE_MS)>0)?(MSToWait/portTICK_RATE_MS):(1); - } - - if (IsFromISR) { - ret = xQueueSendToFrontFromISR(pMbox->mbox_hdl, (void *)pMsg, NULL);//(portTickType) wait_ticks); - } - else { - ret = xQueueSendToFront(pMbox->mbox_hdl, (void *)pMsg, (portTickType) wait_ticks); - } - - if(ret != pdPASS ) { - // send message to the queue failed - MSG_MBOX_ERR("RtlMailboxSendToBack: Put Msg to Queue Failed, MBoxID=%d\n", MboxID); - ret = _FAIL; - } - else { - // try to give a semaphore to wake up the receiving task - if (pMbox->pWakeSema) { - RtlUpSema(pMbox->pWakeSema); - } - ret = _SUCCESS; - } - - return ret; -#endif - -#ifdef PLATFORM_ECOS - // TODO: eCos has no API to put message to the head of a mailbox -#endif - -} - -/****************************************************************************** - * Function: RtlMailboxSendToFront - * Desc: To get a message block from a given mailbox. - * Para: - * MboxID: The identifier of the target mailbox. - * pMsg: The message block to store the gotten message. - * MSToWait: If the mailbox is full, this value gives a time to wait to put - * this message. The time unit is millisecond. - * The special values are: - * 0: no waiting; - * 0xffffffff: wait without timeout. - * If the waiting is timeout, the message sending is failed and - * return _FAIL. - * IsFromISR: Is this function is called from an ISR ? - * Return: _SUCCESS or _FAIL. - ******************************************************************************/ -uint8_t RtlMailboxReceive( - IN uint8_t MboxID, - OUT MSG_BLK *pMsg, - IN uint32_t MSToWait, - IN uint8_t IsFromISR -) -{ - RTL_MAILBOX *pMbox=NULL; - uint32_t wait_ticks; -#ifdef PLATFORM_FREERTOS - portBASE_TYPE ret; -#endif - - pMbox = RtlMBoxIdToHdl(MboxID); - - if (NULL == pMbox) { - MSG_MBOX_ERR("RtlMailboxReceive: Didn't find the MBox with ID=%d\n", MboxID); - return _FAIL; - } - -#ifdef PLATFORM_FREERTOS - if (MBOX_WAIT_NONE == MSToWait) { - wait_ticks = 0; - } - else if (MBOX_WAIT_NO_TIMEOUT == MSToWait) { - wait_ticks = portMAX_DELAY; - } - else { - wait_ticks = ((MSToWait/portTICK_RATE_MS)>0)?(MSToWait/portTICK_RATE_MS):(1); - } - - if (IsFromISR) { - ret = xQueueReceiveFromISR(pMbox->mbox_hdl, (void *)pMsg, NULL);//( portTickType ) wait_ticks); - } - else { - ret = xQueueReceive(pMbox->mbox_hdl, (void *)pMsg, ( portTickType ) wait_ticks); - - } - - if(ret != pdTRUE ) { - // receive message failed - if (0 != MSToWait) { - MSG_MBOX_ERR("RtlMailboxReceive: Receive Msg Failed, MBoxID=%d\n", MboxID); - } - ret = _FAIL; - } - else { - ret = _SUCCESS; - } - - return ret; -#endif - -#ifdef PLATFORM_ECOS - // TODO: Get a message from the mailbox -#endif - -} - -/****************************************************************************** - * Function: RtlMailboxPeek - * Desc: To copy the head message from a given mailbox without move this - * message block out from the mailbox. - * Para: - * MboxID: The identifier of the target mailbox. - * pMsg: The message block to store the gotten message. - * MSToWait: If the mailbox is full, this value gives a time to wait to put - * this message. The time unit is millisecond. - * The special values are: - * 0: no waiting; - * 0xffffffff: wait without timeout. - * If the waiting is timeout, the message sending is failed and - * return _FAIL. - * IsFromISR: Is this function is called from an ISR ? - * Return: _SUCCESS or _FAIL. - ******************************************************************************/ -uint8_t RtlMailboxPeek( - IN uint8_t MboxID, - OUT MSG_BLK *pMsg, - IN uint32_t MSToWait, - IN uint8_t IsFromISR -) -{ - RTL_MAILBOX *pMbox=NULL; - uint32_t wait_ticks; -#ifdef PLATFORM_FREERTOS - portBASE_TYPE ret; -#endif - - pMbox = RtlMBoxIdToHdl(MboxID); - - if (NULL == pMbox) { - MSG_MBOX_ERR("RtlMailboxPeek: Didn't find the MBox with ID=%d\n", MboxID); - return _FAIL; - } - -#ifdef PLATFORM_FREERTOS - if (MBOX_WAIT_NONE == MSToWait) { - wait_ticks = 0; - } - else if (MBOX_WAIT_NO_TIMEOUT == MSToWait) { - wait_ticks = portMAX_DELAY; - } - else { - wait_ticks = ((MSToWait/portTICK_RATE_MS)>0)?(MSToWait/portTICK_RATE_MS):(1); - } - - if (IsFromISR) { -// ret = xQueuePeekFromISR(pMbox->mbox_hdl, (void *)pMsg, ( portTickType ) wait_ticks); - // TODO: check why we have no "xQueuePeekFromISR" - MSG_MBOX_ERR("RtlMailboxPeek: Current version has no 'xQueuePeekFromISR'\n"); - ret = pdFALSE; - } - else { - ret = xQueuePeek(pMbox->mbox_hdl, (void *)pMsg, ( portTickType ) wait_ticks); - - } - - if(ret != pdTRUE ) { - // receive message failed - MSG_MBOX_ERR("RtlMailboxReceive: Receive Msg Failed, MBoxID=%d\n", MboxID); - ret = _FAIL; - } - else { - ret = _SUCCESS; - } - - return ret; -#endif - -#ifdef PLATFORM_ECOS - // TODO: Get a message from the mailbox -#endif - -} - - -/****************************************************************************** - * Function: RtlMailboxMsgWaiting - * Desc: To get the number of message blocks are storing in a given mailbox. - * Para: - * MboxID: The identifier of the target mailbox. - * IsFromISR: Is this function is called from an ISR ? - * Return: The number of message blocks are storing in this mailbox. - ******************************************************************************/ -uint32_t RtlMailboxMsgWaiting( - IN uint8_t MboxID, - IN uint8_t IsFromISR -) -{ - RTL_MAILBOX *pMbox=NULL; - uint32_t msg_num=0; - - pMbox = RtlMBoxIdToHdl(MboxID); - - if (NULL == pMbox) { - MSG_MBOX_ERR("RtlMailboxMsgWaiting: Didn't find the MBox with ID=%d\n", MboxID); - return 0; - } - -#ifdef PLATFORM_FREERTOS - if (IsFromISR) { - msg_num = uxQueueMessagesWaitingFromISR(pMbox->mbox_hdl); - } - else { - msg_num = uxQueueMessagesWaiting(pMbox->mbox_hdl); - } -#endif - -#ifdef PLATFORM_ECOS - // TODO: call eCos API to implement this function -#endif - - return msg_num; - -} - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/mailbox.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/mailbox.h deleted file mode 100644 index cdceaa7..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/mailbox.h +++ /dev/null @@ -1,127 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __MAILBOX_H_ -#define __MAILBOX_H_ - -#include "hal_api.h" -#include "osdep_api.h" -#include "hal_util.h" -#ifdef PLATFORM_FREERTOS -#include "queue.h" -#endif - -#define MBOX_WAIT_NO_TIMEOUT 0xffffffff // waiting for send/receive message with no timeout -#define MBOX_WAIT_NONE 0 // No wait for send/receive message - -typedef enum _MAILBOX_ID_ { - MBOX_ID_WLAN = 0, - MBOX_ID_UART = 1, - MBOX_ID_I2C = 2, - MBOX_ID_I2S = 3, - MBOX_ID_SPI = 4, - MBOX_ID_SDIO = 5, - MBOX_ID_SDIO_MP = 6, - - MBOX_ID_MAX = 0xff -} MAILBOX_ID; - -#if defined(CONFIG_SDIO_DEVICE_EN) && defined(CONFIG_SDIO_DEVICE_NORMAL) -typedef enum _MSG_TYPE_SDIO { - MSG_SDIO_RX_PKT=1, // request to send a SDIO RX packet to the host side - MSG_SDIO_C2H=2, // request to send a C2H message - MSG_SDIO_RPWM=3, // request to set the RPWM - MSG_SDIO_MP_LOOP_TXPKT=4, // request to loopback this TX packet - - MSG_SDIO_MAX=0xff -} MSG_TYPE_SDIO; -#endif // end of "#ifdef CONFIG_SDIO_DEVICE_EN" - -/* the data structure of a MailBox to deliver message blocks */ -typedef struct _RTL_MAILBOX_ { - void *mbox_hdl; // the mailbox handle which return from OS create queue API - _Sema *pWakeSema; // the semaphore to wakeup the message receiving task - _LIST mbox_list; // the link list to chain all created mailbox - uint8_t mbox_id; /* the ID of this Mailbox, this ID is - used to locate the MBox for send/get message */ -} RTL_MAILBOX, *PRTL_MAILBOX; - -/* the data structure of a message block */ -typedef struct _RTL_MSG_BLK { - uint8_t MsgType; // the message type - uint8_t Reserved; // reserved - uint16_t DateLen; // the vaild data length of the pBuf - uint32_t Para; // the optional parameters associated with this message type - uint8_t *pBuf; // point to a data buffer associated with this message type -} MSG_BLK, *PMSG_BLK; - -/* the data structure for system level message block management */ -typedef struct _RTL_MBOX_ROOT_ { - _LIST mbox_list; // the link list of all created mailbox - _Mutex Mutex; // the Mutex to protect the mailbox create/delete procedure - uint8_t isInitialed; // is this Mailbox link-list initialed -} RTL_MBOX_ROOT, *PRTL_MBOX_ROOT; - -// Export Funcction API -extern PRTL_MAILBOX RtlMailboxCreate( - IN uint8_t MboxID, - IN uint32_t MboxSize, - IN _Sema *pWakeSema -); - -extern void RtlMailboxDel( - IN PRTL_MAILBOX MboxHdl -); - -extern uint8_t RtlMailboxSendToBack( - IN uint8_t MboxID, - IN MSG_BLK *pMsg, - IN uint32_t MSToWait, - IN uint8_t IsFromISR -); - -extern uint8_t RtlMailboxSendToFront( - IN uint8_t MboxID, - IN MSG_BLK *pMsg, - IN uint32_t MSToWait, - IN uint8_t IsFromISR -); - -extern uint8_t RtlMailboxReceive( - IN uint8_t MboxID, - OUT MSG_BLK *pMsg, - IN uint32_t MSToWait, - IN uint8_t IsFromISR -); - -extern uint8_t RtlMailboxPeek( - IN uint8_t MboxID, - OUT MSG_BLK *pMsg, - IN uint32_t MSToWait, - IN uint8_t IsFromISR -); - -extern uint32_t RtlMailboxMsgWaiting( - IN uint8_t MboxID, - IN uint8_t IsFromISR -); - - -#endif // #ifndef __MAILBOX_H_ - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/os_support.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/os_support.h deleted file mode 100644 index fda5fcd..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/os_support.h +++ /dev/null @@ -1,36 +0,0 @@ - /****************************************************************************** - * - * Name: sys-support.h - System type support for Linux - * $Revision: 1.1.1.1 $ - * - *****************************************************************************/ - -#ifndef __OS_SUPPORT_H__ -#define __OS_SUPPORT_H__ - - -#include -#include -#include "task.h" -#include "osdep_service.h" - -#define RTL_HZ 100 - -#define RtlKmalloc(size, flag) pvPortMalloc(size) -#define RtlKfree(pv) vPortFreeAligned(pv) - - -#ifdef CONFIG_TIMER_MODULE -#define __Delay(t) HalDelayUs(t) -#else -static __inline__ uint32_t __Delay(uint32_t us) -{ - DBG_8195A("No Delay: please enable hardware Timer\n"); -} -#endif - - -#define Mdelay(t) __Delay(t*1000) -#define Udelay(t) __Delay(t) - -#endif /* __SYS_SUPPORT_H__ */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/os_timer.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/os_timer.h deleted file mode 100644 index c225759..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/os_timer.h +++ /dev/null @@ -1,166 +0,0 @@ -/****************************************************************************** - * - * Name: sys-support.h - System type support for Linux - * $Revision: 1.1.1.1 $ - * - *****************************************************************************/ - -#ifndef __OS_TIMER_H__ -#define __OS_TIMER_H__ - -#include "diag.h" -#include "os_support.h" -#include "osdep_service.h" -#include "timers.h" - - -#define JIFFIES xTaskGetTickCount() - -enum { - TIMER_NO_INIT = 0, - TIMER_INIT = 1, - TIMER_START = 2, - TIMER_DISABLE = 3 -}; - -struct TIMER_LIST { - _timerHandle TimeHdl; - uint32_t Flag; - unsigned long Data; - void (*Function)(void *); - uint32_t TimerID; -}; - -static inline void InitTimer(IN struct TIMER_LIST *Timer) -{ - uint32_t TimerID = Timer->TimerID; - void (*Function)(void *) = Timer->Function; - - save_and_cli(); - - if (Timer->Flag != TIMER_DISABLE) { - if (Timer->Flag == TIMER_NO_INIT) { - Timer->TimeHdl = rtw_timerCreate( (const char *)"Timer", // Just a test name, not used by the kernel. - ( 100 ), // The timer period in ticks. - _FALSE, // The timers will auto-reload themselves when they expire. - ( void * ) TimerID, // Assign each timer a unique id equal to its array index. - Function - #ifdef RTK_MODE_TIMER - ,data // Each timer calls the same callback when it expires. - #endif - ); - if (NULL == Timer->TimeHdl) { - DBG_ERROR_LOG("\rInitial Timer fail!\n"); - } - else { - TimerID++; - } - - Timer->Flag = TIMER_INIT; - } - else if (Timer->Flag == TIMER_START) { - rtw_timerStop(Timer->TimeHdl,0); - Timer->Flag = TIMER_DISABLE; - } - } - - restore_flags(); -} - -static inline void ModTimer(IN struct TIMER_LIST *Timer, IN uint32_t TimeoutTicks) -{ -#ifndef PLATFORM_FREERTOS - uint32_t Flags; -#endif - - void (*Function)(void *) = Timer->Function; - - save_and_cli(); - - if (Timer->Flag == TIMER_NO_INIT) { - if (Timer->Function) { - Timer->TimeHdl = rtw_timerCreate((const char *)"Timer", // Just a text name, not used by the kernel. - ( 100 ), // The timer period in ticks. - _FALSE, // The timers will auto-reload themselves when they expire. - ( void * ) Timer->TimerID, // Assign each timer a unique id equal to its array index. - Function - #ifdef RTK_MODE_TIMER - ,Timer->Data // Each timer calls the same callback when it expires. - #endif - ); - if (NULL == Timer->TimeHdl) { - DBG_ERROR_LOG("\rInitial Timer fail!\n"); - } - else { - Timer->TimerID++; - } - - Timer->Flag = TIMER_INIT; - } - else { - restore_flags(); - return; - } - } - else if (Timer->Flag == TIMER_START) { - rtw_timerStop(Timer->TimeHdl,0); - Timer->Flag = TIMER_DISABLE; - } - - TimeoutTicks -= rtw_get_current_time(); - if (TimeoutTicks <= 0) - TimeoutTicks = 2; - - if (xTimerStart(Timer->TimeHdl, TimeoutTicks )) - Timer->Flag = TIMER_START; - else - DBG_ERROR_LOG("\rmod_timer() - no slots available\n"); - restore_flags(); -} - - -static inline int TimerPending (IN const struct TIMER_LIST *Timer) -{ - if (Timer->TimeHdl && Timer->Flag != TIMER_NO_INIT) - return 1; - else - return 0; -} - -static inline void DelTimerSync(IN struct TIMER_LIST *Timer) -{ - save_and_cli(); - - if (Timer->TimeHdl && Timer->Flag != TIMER_INIT) { - if (Timer->Flag == TIMER_START) - rtw_timerStop(Timer->TimeHdl, 0); - - rtw_timerDelete(Timer->TimeHdl, 0); - Timer->Flag = TIMER_NO_INIT; - } - - restore_flags(); -} - - /* - * These inlines deal with timer wrapping correctly. You are - * strongly encouraged to use them - * 1. Because people otherwise forget - * 2. Because if the timer wrap changes in future you wont have to - * alter your driver code. - * - * time_after(a,b) returns true if the time a is after time b. - * - * Do this with "<0" and ">=0" to only test the sign of the result. A - * good compiler would generate better code (and a really good compiler - * wouldn't care). Gcc is currently neither. - */ - #define TIME_AFTER(a,b) ((long)(b) - (long)(a) < 0) - #define TIMER_BEFORE(a,b) TIME_AFTER(b,a) - - #define TIME_AFTER_EQ(a,b) ((long)(a) - (long)(b) >= 0) - #define TIMER_BEFORE_EQ(a,b) TIME_AFTER_EQ(b,a) - - - -#endif //__OS_TIMER_H__ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/osdep_api.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/osdep_api.c deleted file mode 100644 index 84f434b..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/osdep_api.c +++ /dev/null @@ -1,535 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - -#define _OSDEP_API_C_ - -#include -#include "osdep_service.h" - -extern _LONG_CALL_ char *_strcpy(char *dest, const char *src); -extern _LONG_CALL_ void *_memset(void *dst0, int Val,SIZE_T length); - -uint8_t* RtlMalloc(IN uint32_t sz) -{ - uint8_t *pbuf=NULL; - - pbuf = rtw_malloc((uint32_t)sz); - - return pbuf; -} - - -uint8_t* RtlZmalloc(IN uint32_t sz) -{ - uint8_t *pbuf; - - pbuf= rtw_malloc((uint32_t)sz); - - if (pbuf != NULL) { - _memset(pbuf, 0, sz); - } - - return pbuf; -} - -void RtlMfree(IN uint8_t *pbuf, IN uint32_t sz) -{ - rtw_mfree(pbuf, sz); -} - -void* RtlMalloc2d(IN uint32_t h, IN uint32_t w, IN uint32_t size) -{ - //uint32_t j; - - void **a = (void **) rtw_malloc2d(h, w, size); - if(a == NULL) - { - DBG_ERROR_LOG("%s: alloc memory fail!\n", __FUNCTION__); - return NULL; - } - - return a; -} - -void RtlMfree2d(IN void *pbuf, IN uint32_t h, IN uint32_t w, IN uint32_t size) -{ - rtw_mfree2d(pbuf, h, w, size); -} - -void RtlInitSema(IN _Sema *sema, IN uint32_t init_val) -{ - rtw_init_sema(sema, init_val); -} - -void RtlFreeSema(IN _Sema *sema) -{ - rtw_free_sema(sema); -} - -void RtlUpSema(IN _Sema *sema) -{ - rtw_up_sema(sema); -} - -void RtlUpSemaFromISR(IN _Sema *sema) -{ - rtw_up_sema_from_isr(sema); -} - -uint32_t RtlDownSema(IN _Sema *sema) -{ - rtw_down_sema(sema); - return _SUCCESS; -} - -uint32_t RtlDownSemaWithTimeout(IN _Sema *sema,IN uint32_t ms) -{ - return rtw_down_timeout_sema(sema, ms); -} - -void RtlMutexInit(IN _Mutex *pmutex) -{ - rtw_mutex_init(pmutex); -} - -void RtlMutexFree(IN _Mutex *pmutex) -{ - rtw_mutex_free(pmutex); -} - -void RtlSpinlockInit(IN _Lock *plock) -{ - rtw_spinlock_init((_lock *)plock); -} - -void RtlSpinlockFree(IN _Lock *plock) -{ - rtw_spinlock_free((_lock *)plock); -} - -void RtlSpinlock(IN _Lock *plock) -{ - rtw_spin_lock((_lock *)plock); -} - -void RtlSpinunlock(IN _Lock *plock) -{ - rtw_spin_unlock((_lock *)plock); -} - -void RtlSpinlockEx(IN _Lock *plock) -{ -} - -void RtlSpinunlockEx(IN _Lock *plock) -{ -} - -uint32_t RtlGetCurrentTime(void) -{ - return rtw_get_current_time(); -} - -void RtlSleepSchedulable(IN uint32_t ms) -{ -} - -void RtlMsleepOS(IN uint32_t ms) -{ - rtw_msleep_os(ms); -} - -void RtlUsleepOS(IN uint32_t us) -{ - rtw_usleep_os(us); -} - -void RtlMdelayOS(IN uint32_t ms) -{ - rtw_mdelay_os(ms); -} - -void RtlUdelayOS(IN uint32_t us) -{ - rtw_udelay_os(us); -} - -void RtlYieldOS(void) -{ - rtw_yield_os(); -} - - -#if defined(__ICCARM__) -uint64_t RtlModular64(IN uint64_t n, IN uint64_t base) -{ - unsigned int __base = (base); - unsigned int __rem; - //(void)(((typeof((n)) *)0) == ((__uint64_t *)0)); - if (((n) >> 32) == 0) { - __rem = (unsigned int)(n) % __base; - (n) = (unsigned int)(n) / __base; - } else - __rem = __Div64_32(&(n), __base); - return __rem; - -} -#else -uint64_t RtlModular64(IN uint64_t x, IN uint64_t y) -{ - return rtw_modular64(x, y); -} -#endif - -/****************************************************************************** - * Function: RtlTimerCallbckEntry - * Desc: This function is a timer callback wrapper. All OS timer callback - * will call this function and then call the real callback function inside - * this function. - * - * Para: - * pxTimer: The FreeRTOS timer handle which is expired and call this callback. - * - * Return: None - * - ******************************************************************************/ -#ifdef PLATFORM_FREERTOS -void RtlTimerCallbckEntry (IN _timerHandle pxTimer) -{ - PRTL_TIMER pTimer; - - if (NULL == pxTimer) { - MSG_TIMER_ERR("RtlTimerCallbckEntry: NULL Timer Handle Err!\n"); - return; - } - - pTimer = (PRTL_TIMER) rtw_timerGetID( pxTimer ); - pTimer->CallBackFunc(pTimer->Context); -} -#endif // end of "#ifdef PLATFORM_FREERTOS" - -/****************************************************************************** - * Function: RtlTimerCreate - * Desc: To create a software timer. - * - * Para: - * pTimerName: A string for the timer name. - * TimerPeriodMS: The timer period, the unit is milli-second. - * CallbckFunc: The callback function of this timer. - * pContext: A pointer will be used as the parameter to call the timer - * callback function. - * isPeriodical: Is this timer periodical ? (Auto reload after expired) - * Return: The created timer handle, a pointer. It can be used to delete the - * timer. If timer createion failed, return NULL. - * - ******************************************************************************/ -PRTL_TIMER RtlTimerCreate( - IN char *pTimerName, - IN uint32_t TimerPeriodMS, - IN RTL_TIMER_CALL_BACK CallbckFunc, - IN void *pContext, - IN uint8_t isPeriodical) -{ - PRTL_TIMER pTimer; - uint32_t timer_ticks; - int i; - - pTimer = (PRTL_TIMER)RtlZmalloc(sizeof(RTL_TIMER)); - if (NULL == pTimer) { - MSG_TIMER_ERR("RtlTimerCreate: Alloc Mem Err!\n"); - return NULL; - } - - if (portTICK_RATE_MS >= TimerPeriodMS) { - timer_ticks = 1; // at least 1 system tick - } - else { - timer_ticks = TimerPeriodMS/portTICK_RATE_MS; - } - - pTimer->TimerHandle = rtw_timerCreate ((const char*)(pTimer->TimerName), timer_ticks, - (portBASE_TYPE)isPeriodical, (void *) pTimer, RtlTimerCallbckEntry); - -#ifdef PLATFORM_FREERTOS // if any RTOS is used - if (pTimer->TimerHandle) { - pTimer->msPeriod = TimerPeriodMS; - pTimer->CallBackFunc = CallbckFunc; - pTimer->Context = pContext; - pTimer->isPeriodical = isPeriodical; - // copy the timer name - if (NULL != pTimerName) { - for(i = 0; i < sizeof(pTimer->TimerName); i++) - { - pTimer->TimerName[i] = pTimerName[i]; - if(pTimerName[i] == '\0') - { - break; - } - } - } - else { - _strcpy((char*)(pTimer->TimerName), "None"); - } - MSG_TIMER_INFO("RtlTimerCreate: SW Timer Created: Name=%s Period=%d isPeriodical=%d\n", \ - pTimer->TimerName, pTimer->msPeriod, pTimer->isPeriodical); - } - else -#endif - { - RtlMfree((uint8_t *)pTimer, sizeof(RTL_TIMER)); - pTimer = NULL; - MSG_TIMER_ERR("RtlTimerCreate: OS Create Timer Failed!\n"); - } - - return (pTimer); -} - -/****************************************************************************** - * Function: RtlTimerDelete - * Desc: To delete a created software timer. - * - * Para: - * pTimerHdl: The timer to be deleted - * - * Return: None - * - ******************************************************************************/ -void RtlTimerDelete(IN PRTL_TIMER pTimerHdl) -{ -#ifdef PLATFORM_FREERTOS - portBASE_TYPE ret; -#endif - - if (NULL == pTimerHdl) { - MSG_TIMER_ERR("RtlTimerDelete: NULL Timer Handle!\n"); - return; - } - - MSG_TIMER_INFO("RtlTimerDelete: Name=%s\n", pTimerHdl->TimerName); -#ifdef PLATFORM_FREERTOS - /* try to delete the soft timer and wait max RTL_TIMER_API_MAX_BLOCK_TICKS - to send the delete command to the timer command queue */ - ret = rtw_timerDelete(pTimerHdl->TimerHandle, RTL_TIMER_API_MAX_BLOCK_TICKS); - if (pdPASS != ret) { - MSG_TIMER_ERR("RtlTimerDelete: Delete OS Timer Failed!\n"); - } -#endif - RtlMfree((uint8_t *)pTimerHdl, sizeof(RTL_TIMER)); - -} - -/****************************************************************************** - * Function: RtlTimerStart - * Desc: To start a created timer.. - * - * Para: - * pTimerHdl: The timer to be started. - * isFromISR: The flag to indicate that is this function is called from an ISR. - * - * Return: _SUCCESS or _FAIL - * - ******************************************************************************/ -uint8_t RtlTimerStart(IN PRTL_TIMER pTimerHdl, IN uint8_t isFromISR) -{ -#ifdef PLATFORM_FREERTOS - uint8_t ret=_FAIL; - portBASE_TYPE HigherPriorityTaskWoken=pdFALSE; - - if (isFromISR) { - if (pdPASS == rtw_timerStartFromISR(pTimerHdl->TimerHandle,&HigherPriorityTaskWoken)) - { - // start OS timer successful - if (pdFALSE != HigherPriorityTaskWoken) { - rtw_yield_os(); - } - ret = _SUCCESS; - } - else { - MSG_TIMER_ERR("RtlTimerStart: Start Timer(%s) from ISR failed\n", pTimerHdl->TimerName); - } - } - else { - if (pdPASS == rtw_timerStart(pTimerHdl->TimerHandle, RTL_TIMER_API_MAX_BLOCK_TICKS)) { - ret = _SUCCESS; - } - else { - MSG_TIMER_ERR("RtlTimerStart: Start Timer(%s) failed\n", pTimerHdl->TimerName); - } - } - - MSG_TIMER_INFO("RtlTimerStart: SW Timer %s Started\n", pTimerHdl->TimerName); - - return ret; -#endif -} - -/****************************************************************************** - * Function: RtlTimerStop - * Desc: To stop a running timer.. - * - * Para: - * pTimerHdl: The timer to be stoped. - * isFromISR: The flag to indicate that is this function is called from an ISR. - * - * Return: _SUCCESS or _FAIL - * - ******************************************************************************/ -uint8_t RtlTimerStop(IN PRTL_TIMER pTimerHdl, IN uint8_t isFromISR) -{ -#ifdef PLATFORM_FREERTOS - uint8_t ret=_FAIL; - portBASE_TYPE HigherPriorityTaskWoken=pdFALSE; - - if (isFromISR) { - if (pdPASS == rtw_timerStopFromISR(pTimerHdl->TimerHandle,&HigherPriorityTaskWoken)) - { - // start OS timer successful - if (pdFALSE != HigherPriorityTaskWoken) { - rtw_yield_os(); - } - ret = _SUCCESS; - } - } - else { - if (pdPASS == rtw_timerStop(pTimerHdl->TimerHandle, RTL_TIMER_API_MAX_BLOCK_TICKS)) { - ret = _SUCCESS; - } - } - - if (_FAIL == ret) { - MSG_TIMER_ERR("RtlTimerStop: Stop Timer(%s) Failed, IsFromISR=%d\n", pTimerHdl->TimerName, isFromISR); - } - - MSG_TIMER_INFO("RtlTimerStop: SW Timer %s Stoped\n", pTimerHdl->TimerName); - - return ret; -#endif -} - -/****************************************************************************** - * Function: RtlTimerReset - * Desc: To reset a timer. A reset will get a re-start and reset - * the timer ticks counting. A running timer expired time is relative - * to the time when Reset function be called. Please ensure the timer - * is in active state (Started). A stopped timer also will be started - * when this function is called. - * - * Para: - * pTimerHdl: The timer to be reset. - * isFromISR: The flag to indicate that is this function is called from an ISR. - * - * Return: _SUCCESS or _FAIL - * - ******************************************************************************/ -uint8_t -RtlTimerReset( - IN PRTL_TIMER pTimerHdl, - IN uint8_t isFromISR -) -{ -#ifdef PLATFORM_FREERTOS - uint8_t ret=_FAIL; - portBASE_TYPE HigherPriorityTaskWoken=pdFALSE; - - if (isFromISR) { - if (pdPASS == rtw_timerResetFromISR(pTimerHdl->TimerHandle,&HigherPriorityTaskWoken)) - { - // start OS timer successful - if (pdFALSE != HigherPriorityTaskWoken) { - rtw_yield_os(); - } - ret = _SUCCESS; - } - } - else { - if (pdPASS == rtw_timerReset(pTimerHdl->TimerHandle, RTL_TIMER_API_MAX_BLOCK_TICKS)) { - ret = _SUCCESS; - } - } - - if (_FAIL == ret) { - MSG_TIMER_ERR("RtlTimerReset: Reset Timer(%s) Failed, IsFromISR=%d\n", pTimerHdl->TimerName, isFromISR); - } - - MSG_TIMER_INFO("RtlTimerReset: SW Timer %s Reset\n", pTimerHdl->TimerName); - - return ret; -#endif -} - -/****************************************************************************** - * Function: RtlTimerChangePeriod - * Desc: To change the period of a timer that was created previously. - * - * Para: - * pTimerHdl: The timer handle to be changed the priod. - * NewPeriodMS: The new timer period, in milli-second. - * isFromISR: The flag to indicate that is this function is called from an ISR. - * - * Return: _SUCCESS or _FAIL - * - ******************************************************************************/ -uint8_t RtlTimerChangePeriod( - IN PRTL_TIMER pTimerHdl, - IN uint32_t NewPeriodMS, - IN uint8_t isFromISR) -{ -#ifdef PLATFORM_FREERTOS - uint32_t timer_ticks; - uint8_t ret=_FAIL; - portBASE_TYPE HigherPriorityTaskWoken=pdFALSE; - - if (portTICK_RATE_MS >= NewPeriodMS) { - timer_ticks = 1; // at least 1 system tick - } - else { - timer_ticks = NewPeriodMS/portTICK_RATE_MS; - } - - if (isFromISR) { - if (pdPASS == rtw_timerChangePeriodFromISR(pTimerHdl->TimerHandle, timer_ticks, &HigherPriorityTaskWoken)) - { - // start OS timer successful - if (pdFALSE != HigherPriorityTaskWoken) { - taskYIELD(); - } - ret = _SUCCESS; - } - } - else { - if (pdPASS == rtw_timerChangePeriod(pTimerHdl->TimerHandle, timer_ticks, RTL_TIMER_API_MAX_BLOCK_TICKS)) { - ret = _SUCCESS; - } - } - - if (_FAIL == ret) { - MSG_TIMER_ERR("RtlTimerChangePeriod: Change Timer(%s) Period Failed, IsFromISR=%d\n", pTimerHdl->TimerName, isFromISR); - } - else { - pTimerHdl->msPeriod = NewPeriodMS; - MSG_TIMER_INFO("RtlTimerChangePeriod: SW Timer %s change period to %d\n", pTimerHdl->TimerName, pTimerHdl->msPeriod); - } - - - return ret; -#endif -} - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/osdep_api.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/osdep_api.h deleted file mode 100644 index 3dcdb49..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/os/osdep_api.h +++ /dev/null @@ -1,362 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __OSDEP_API_H_ -#define __OSDEP_API_H_ - -#include "os_timer.h" -#include "os_support.h" -#include "osdep_service.h" - - -#define MAX_SEMA_COUNT 32 /* the maximum count of a semaphore */ - -typedef _sema _Sema; -typedef _mutex _Mutex; -typedef uint32_t _Lock; -typedef struct TIMER_LIST _Timer; -typedef unsigned long _IRQL; -typedef _thread_hdl_ _THREAD_HDL_; -typedef void THREAD_RETURN; -typedef void THREAD_CONTEXT; - - -#ifndef mdelay -#define mdelay(t) ((t/portTICK_RATE_MS)>0)?(vTaskDelay(t/portTICK_RATE_MS)):(vTaskDelay(1)) -#endif - -#ifndef udelay -#define udelay(t) ((t/(portTICK_RATE_MS*1000))>0)?vTaskDelay(t/(portTICK_RATE_MS*1000)):(vTaskDelay(1)) -#endif - -/* to delete/start/stop a timer it will send a message to the timer task through a message queue, - so we define the max wait time for message sending */ -#define RTL_TIMER_API_MAX_BLOCK_TIME 1000 // unit is ms -#define RTL_TIMER_API_MAX_BLOCK_TICKS (RTL_TIMER_API_MAX_BLOCK_TIME/portTICK_RATE_MS) - -typedef void (*RTL_TIMER_CALL_BACK)(void *pContext); - -typedef struct _RTL_TIMER{ -#ifdef PLATFORM_FREERTOS - _timerHandle TimerHandle; // The timer handle of created FreeRTOS soft-timer -#endif - RTL_TIMER_CALL_BACK CallBackFunc; // Callback function of this timer - uint32_t msPeriod; // The period of this timer - void *Context; // Timer specific context. - uint8_t isPeriodical; // Is a periodical timer - uint8_t TimerName[35]; // The Name of timer -}RTL_TIMER, *PRTL_TIMER; - -__inline static void RtlEnterCritical(void) -{ - rtw_enter_critical(NULL, NULL); -} - -__inline static void RtlExitCritical(void) -{ - rtw_exit_critical(NULL, NULL); -} - -__inline static void RtlEnterCriticalBh(IN _Lock *plock, IN _IRQL *pirqL) -{ - rtw_enter_critical_bh((_lock *)plock, pirqL); -} - -__inline static void RtlExitCriticalBh(IN _Lock *plock, IN _IRQL *pirqL) -{ - rtw_exit_critical_bh((_lock *)plock, pirqL); -} - -__inline static uint32_t RtlEnterCriticalMutex(IN _Mutex *pmutex, IN _IRQL *pirqL) -{ - return rtw_enter_critical_mutex(pmutex, pirqL); -} - -__inline static void RtlExitCriticalMutex(IN _Mutex *pmutex,IN _IRQL *pirqL) -{ - rtw_exit_critical_mutex(pmutex, pirqL); -} - -__inline static void RtlInitTimer( - IN _Timer *ptimer, - IN void *Data, - IN void (*pfunc)(void *), - IN void* cntx -) -{ - ptimer->Function = pfunc; - ptimer->Data = (unsigned long)cntx; - InitTimer(ptimer); -} - -__inline static void RtlSetTimer( - IN _Timer *ptimer, - IN uint32_t delay_time -) -{ - ModTimer(ptimer , (JIFFIES+(delay_time*RTL_HZ/1000))); -} - -__inline static void RtlCancelTimer( - IN _Timer *ptimer, - IN uint8_t *bcancelled -) -{ - DelTimerSync(ptimer); - *bcancelled= _TRUE;//TRUE ==1; FALSE==0 -} - -__inline static uint32_t RtlSystime2Ms(IN uint32_t systime) -{ - return rtw_systime_to_ms(systime); -} - -__inline static uint32_t RtlMs2Systime(IN uint32_t ms) -{ - return rtw_ms_to_systime(ms); -} - -extern uint8_t* RtlZmalloc(uint32_t sz); -extern uint8_t* RtlMalloc(uint32_t sz); -extern void RtlMfree(uint8_t *pbuf, uint32_t sz); - -extern void* RtlMalloc2d(uint32_t h, uint32_t w, uint32_t size); -extern void RtlMfree2d(void *pbuf, uint32_t h, uint32_t w, uint32_t size); - -extern void RtlInitSema(_Sema *sema, uint32_t init_val); -extern void RtlFreeSema(_Sema *sema); -extern void RtlUpSema(_Sema *sema); -extern void RtlUpSemaFromISR(_Sema *sema); -extern uint32_t RtlDownSema(_Sema *sema); -extern uint32_t RtlDownSemaWithTimeout(_Sema *sema, uint32_t ms); - -extern void RtlMutexInit(_Mutex *pmutex); -extern void RtlMutexFree(_Mutex *pmutex); - -extern void RtlSpinlockInit(_Lock *plock); -extern void RtlSpinlockFree(_Lock *plock); -extern void RtlSpinlock(_Lock *plock); -extern void RtlSpinunlock(_Lock *plock); -extern void RtlSpinlockEx(_Lock *plock); -extern void RtlSpinunlockEx(_Lock *plock); - -extern void RtlSleepSchedulable(uint32_t ms); - -extern void RtlMsleepOS(uint32_t ms); -extern void RtlUsleepOS(uint32_t us); -extern void RtlMdelayOS(uint32_t ms); -extern void RtlUdelayOS(uint32_t us); -extern void RtlYieldOS(void); - -#define RtlUpMutex(mutex) RtlUpSema(mutex) -#define RtlDownMutex(mutex) RtlDownSema(mutex) - -__inline static uint8_t RtlCancelTimerEx(IN _Timer *ptimer) -{ - DelTimerSync(ptimer); - return 0; -} - - -static __inline void ThreadEnter(IN char *name) -{ - DBG_8195A("\rRTKTHREAD_enter %s\n", name); -} - -#define ThreadExit() do{DBG_8195A("\rRTKTHREAD_exit %s\n", __FUNCTION__);}while(0) - -__inline static void FlushSignalsThread(void) -{ -} - - -#define RTL_RND(sz, r) ((((sz)+((r)-1))/(r))*(r)) -#define RTL_RND4(x) (((x >> 2) + (((x & 3) == 0) ? 0: 1)) << 2) - -__inline static uint32_t RtlRnd4(IN uint32_t sz) -{ - - uint32_t val; - - val = ((sz >> 2) + ((sz & 3) ? 1: 0)) << 2; - - return val; - -} - -__inline static uint32_t RtlRnd8(IN uint32_t sz) -{ - - uint32_t val; - - val = ((sz >> 3) + ((sz & 7) ? 1: 0)) << 3; - - return val; - -} - -__inline static uint32_t RtlRnd128(IN uint32_t sz) -{ - - uint32_t val; - - val = ((sz >> 7) + ((sz & 127) ? 1: 0)) << 7; - - return val; - -} - -__inline static uint32_t RtlRnd256(IN uint32_t sz) -{ - - uint32_t val; - - val = ((sz >> 8) + ((sz & 255) ? 1: 0)) << 8; - - return val; - -} - -__inline static uint32_t RtlRnd512(IN uint32_t sz) -{ - - uint32_t val; - - val = ((sz >> 9) + ((sz & 511) ? 1: 0)) << 9; - - return val; - -} - -__inline static uint32_t BitShift(IN uint32_t BitMask) -{ - uint32_t i; - - for (i = 0; i <= 31; i++) - if (((BitMask>>i) & 0x1) == 1) break; - - return i; -} - - -//#ifdef __GNUC__ -#ifdef PLATFORM_LINUX -#define STRUCT_PACKED __attribute__ ((packed)) -#else -#define STRUCT_PACKED -#endif - - -//Atomic integer operations -#define RTL_ATOMIC_T atomic_t - -static inline void RTL_ATOMIC_SET(IN RTL_ATOMIC_T *v, IN uint32_t i) -{ - ATOMIC_SET(v,i); -} - -static inline uint32_t RTL_ATOMIC_READ(IN RTL_ATOMIC_T *v) -{ - return ATOMIC_READ(v); -} - -static inline void RTL_ATOMIC_ADD(IN RTL_ATOMIC_T *v, IN uint32_t i) -{ - ATOMIC_ADD(v,i); -} - -static inline void RTL_ATOMIC_SUB(IN RTL_ATOMIC_T *v, IN uint32_t i) -{ - ATOMIC_SUB(v,i); -} - -static inline void RTL_ATOMIC_INC(IN RTL_ATOMIC_T *v) -{ - ATOMIC_INC(v); -} - -static inline void RTL_ATOMIC_DEC(IN RTL_ATOMIC_T *v) -{ - ATOMIC_DEC(v); -} - -static inline uint32_t RTL_ATOMIC_ADD_RETURN(IN RTL_ATOMIC_T *v, IN uint32_t i) -{ - return ATOMIC_ADD_RETURN(v, i); -} - -static inline uint32_t RTL_ATOMIC_SUB_RETURN(IN RTL_ATOMIC_T *v, IN uint32_t i) -{ - return ATOMIC_SUB_RETURN(v, i); -} - -static inline uint32_t RTL_ATOMIC_INC_RETURN(IN RTL_ATOMIC_T *v) -{ - return ATOMIC_INC_RETURN(v); -} - -static inline uint32_t RTL_ATOMIC_DEC_RETURN(IN RTL_ATOMIC_T *v) -{ - return ATOMIC_DEC_RETURN(v); -} - -extern uint64_t RtlModular64(uint64_t x, uint64_t y); - -extern PRTL_TIMER -RtlTimerCreate( - IN char *pTimerName, - IN uint32_t TimerPeriodMS, - IN RTL_TIMER_CALL_BACK CallbckFunc, - IN void *pContext, - IN uint8_t isPeriodical -); - -extern void -RtlTimerDelete( - IN PRTL_TIMER pTimerHdl -); - -extern uint8_t -RtlTimerStart( - IN PRTL_TIMER pTimerHdl, - IN uint8_t isFromISR -); - -extern uint8_t -RtlTimerStop( - IN PRTL_TIMER pTimerHdl, - IN uint8_t isFromISR -); - -extern uint8_t -RtlTimerReset( - IN PRTL_TIMER pTimerHdl, - IN uint8_t isFromISR -); - -extern uint8_t -RtlTimerChangePeriod( - IN PRTL_TIMER pTimerHdl, - IN uint32_t NewPeriodMS, - IN uint8_t isFromISR -); - -#endif //#ifndef __OSDEP_API_H_ - - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/platform/gcc_wrap.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/platform/gcc_wrap.c deleted file mode 100644 index 795a03e..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/platform/gcc_wrap.c +++ /dev/null @@ -1,22 +0,0 @@ -/************************************************** - * malloc/free/realloc wrap for gcc compiler - * - **************************************************/ -#if defined(__GNUC__) -#include "FreeRTOS.h" - -void* __wrap_malloc( size_t size ) -{ - return pvPortMalloc(size); -} - -void* __wrap_realloc( void *p, size_t size ) -{ - return pvPortReAalloc(p, size); -} - -void __wrap_free( void *p ) -{ - vPortFree(p); -} -#endif \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/platform/ota_8195a.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/platform/ota_8195a.c deleted file mode 100644 index 83b514d..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/platform/ota_8195a.c +++ /dev/null @@ -1,825 +0,0 @@ -#include -#include -#include "ota_8195a.h" -#include "lwip/netdb.h" - -sys_thread_t TaskOTA = NULL; -#define STACK_SIZE 1024 -#define TASK_PRIORITY tskIDLE_PRIORITY + 1 -#if SWAP_UPDATE -static uint32_t OldImg2Addr; -#endif -static flash_t flash_ota; - -#if CONFIG_CUSTOM_SIGNATURE -/* --------------------------------------------------- - * Customized Signature - * ---------------------------------------------------*/ -// This signature can be used to verify the correctness of the image -// It will be located in fixed location in application image -#include "section_config.h" -SECTION(".custom.validate.rodata") -const unsigned char cus_sig_demo[32] = "Customer Signature-modelxxx"; -#endif - -void* update_malloc(unsigned int size){ - return pvPortMalloc(size); -} - -void update_free(void *buf){ - vPortFree(buf); -} - -void ota_platform_reset(void){ - // Set processor clock to default before system reset - HAL_WRITE32(SYSTEM_CTRL_BASE, 0x14, 0x00000021); - osDelay(100); - - // Cortex-M3 SCB->AIRCR - HAL_WRITE32(0xE000ED00, 0x0C, (0x5FA << 16) | // VECTKEY - (HAL_READ32(0xE000ED00, 0x0C) & (7 << 8)) | // PRIGROUP - (1 << 2)); // SYSRESETREQ - while(1) osDelay(1000); -} - -#if WRITE_OTA_ADDR -int write_ota_addr_to_system_data(flash_t *flash, uint32_t ota_addr) -{ - uint32_t data, i = 0; - //Get upgraded image 2 addr from offset - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_read_word(flash, OFFSET_DATA, &data); - printf("\n\r[%s] data 0x%x ota_addr 0x%x", __FUNCTION__, data, ota_addr); - if(~0x0 == data){ - flash_write_word(flash, OFFSET_DATA, ota_addr); - } - else{ - //erase backup sector - flash_erase_sector(flash, BACKUP_SECTOR); - //backup system data to backup sector - for(i = 0; i < 0x1000; i+= 4){ - flash_read_word(flash, OFFSET_DATA + i, &data); - if(0 == i) - data = ota_addr; - flash_write_word(flash, BACKUP_SECTOR + i,data); - } - //erase system data - flash_erase_sector(flash, OFFSET_DATA); - //write data back to system data - for(i = 0; i < 0x1000; i+= 4){ - flash_read_word(flash, BACKUP_SECTOR + i, &data); - flash_write_word(flash, OFFSET_DATA + i,data); - } - //erase backup sector - flash_erase_sector(flash, BACKUP_SECTOR); - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); - return 0; -} -#endif - -int update_ota_connect_server(int server_socket, update_cfg_local_t *cfg){ - struct sockaddr_in server_addr; - - server_socket = socket(AF_INET, SOCK_STREAM, 0); - if(server_socket < 0){ - printf("\n\r[%s] Create socket failed", __FUNCTION__); - return -1; - } - - server_addr.sin_family = AF_INET; - server_addr.sin_addr.s_addr = cfg->ip_addr; - server_addr.sin_port = cfg->port; - - if(connect(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1){ - printf("\n\r[%s] Socket connect failed", __FUNCTION__); - return -1; - } - - return server_socket; -} - -uint32_t update_ota_prepare_addr(void){ - - uint32_t Img2Len = 0; - uint32_t IMAGE_x = 0, ImgxLen = 0, ImgxAddr = 0; - uint32_t NewImg2Addr = 0; -#if WRITE_OTA_ADDR - uint32_t ota_addr = 0x80000; -#endif - - DBG_INFO_MSG_OFF(_DBG_SPI_FLASH_); - // The upgraded image2 pointer must 4K aligned and should not overlap with Default Image2 - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_read_word(&flash_ota, IMAGE_2, &Img2Len); - IMAGE_x = IMAGE_2 + Img2Len + 0x10; - flash_read_word(&flash_ota, IMAGE_x, &ImgxLen); - flash_read_word(&flash_ota, IMAGE_x+4, &ImgxAddr); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - - if(0x30000000 == ImgxAddr){ - printf("\n\r[%s] IMAGE_3 0x%x Img3Len 0x%x", __FUNCTION__, IMAGE_x, ImgxLen); - } - else{ - printf("\n\r[%s] There is no IMAGE_3", __FUNCTION__); - IMAGE_x = IMAGE_2; - ImgxLen = Img2Len; - } -#if WRITE_OTA_ADDR - if((ota_addr > IMAGE_x) && ((ota_addr < (IMAGE_x+ImgxLen))) || (ota_addr < IMAGE_x) || - ((ota_addr & 0xfff) != 0) || (ota_addr == ~0x0)){ - printf("\n\r[%s] illegal ota addr 0x%x", __FUNCTION__, ota_addr); - return -1; - } - else - write_ota_addr_to_system_data(&flash_ota, ota_addr); -#endif - - //Get upgraded image 2 addr from offset - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_read_word(&flash_ota, OFFSET_DATA, &NewImg2Addr); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - if((NewImg2Addr > IMAGE_x) && ((NewImg2Addr < (IMAGE_x+ImgxLen))) || (NewImg2Addr < IMAGE_x) || - ((NewImg2Addr & 0xfff) != 0) || (NewImg2Addr == ~0x0)){ - printf("\n\r[%s] Invalid OTA Address 0x%x", __FUNCTION__, NewImg2Addr); - return -1; - } - - return NewImg2Addr; -} - -#if SWAP_UPDATE -uint32_t update_ota_swap_addr(uint32_t img_len, uint32_t NewImg2Addr){ - uint32_t SigImage0,SigImage1; - uint32_t Part1Addr=0xFFFFFFFF, Part2Addr=0xFFFFFFFF; - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_read_word(&flash_ota, 0x18, &Part1Addr); - Part1Addr = (Part1Addr&0xFFFF)*1024; //PART1 : 0x0000B000 - Part2Addr = NewImg2Addr; //PART2 : 0x00080000 - - // read Part1 signature - flash_read_word(&flash_ota, Part1Addr+8, &SigImage0); - flash_read_word(&flash_ota, Part1Addr+12, &SigImage1); - printf("\n\r[%s] Part1 Sig %x", __FUNCTION__, SigImage0); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - if(SigImage0==0x35393138 && SigImage1==0x31313738)//Part1 is the new one with signature "81958711" - OldImg2Addr = Part1Addr; //Change Part1 to older version - else{ - // read Part2 signature - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_read_word(&flash_ota, Part2Addr+8, &SigImage0); - flash_read_word(&flash_ota, Part2Addr+12, &SigImage1); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - printf("\n\r[%s] Part2 Sig %x", __FUNCTION__, SigImage0); - if(SigImage0==0x30303030 && SigImage1==0x30303030){// ATSC signature "00000000" - OldImg2Addr = Part1Addr; //Store the new version to Part2 - } - else if(SigImage0==0x35393138 && SigImage1==0x31313738){//Part2 is the new one with signature "81958711" - OldImg2Addr = Part2Addr; //Change Part2 to older version - NewImg2Addr = Part1Addr; - if( img_len > (Part2Addr-Part1Addr) ){ // firmware size too large - printf("\n\r[%s] Part1 size < OTA size", __FUNCTION__); - return -1; - } - } - else - NewImg2Addr = Part2Addr; - } - - printf("\n\r[%s] New %x, Old %x", __FUNCTION__, NewImg2Addr, OldImg2Addr); - return NewImg2Addr; -} -#endif - -int update_ota_erase_upg_region(uint32_t img_len, uint32_t NewImg2Len, uint32_t NewImg2Addr){ - uint32_t NewImg2BlkSize = 0; - - if(NewImg2Len == 0){ - NewImg2Len = img_len; - printf("\n\r[%s] NewImg2Len %d ", __FUNCTION__, NewImg2Len); - if((int)NewImg2Len > 0){ - NewImg2BlkSize = ((NewImg2Len - 1)/4096) + 1; - printf("\n\r[%s] NewImg2BlkSize %d 0x%8x", __FUNCTION__, NewImg2BlkSize, NewImg2BlkSize); - device_mutex_lock(RT_DEV_LOCK_FLASH); - for(int i = 0; i < NewImg2BlkSize; i++) - flash_erase_sector(&flash_ota, NewImg2Addr + i * 4096); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - }else{ - printf("\n\r[%s] Size INVALID", __FUNCTION__); - return -1; - } - } - - printf("\n\r[%s] NewImg2Addr 0x%x", __FUNCTION__, NewImg2Addr); - return NewImg2Len; -} - -int update_ota_checksum(_file_checksum *file_checksum, uint32_t flash_checksum, uint32_t NewImg2Addr){ - -#if CONFIG_CUSTOM_SIGNATURE - char custom_sig[32] = "Customer Signature-modelxxx"; - uint32_t read_custom_sig[8]; - - device_mutex_lock(RT_DEV_LOCK_FLASH); - for(int i = 0; i < 8; i ++){ - flash_read_word(&flash_ota, NewImg2Addr + 0x28 + i *4, read_custom_sig + i); - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); - printf("\n\r[%s] read_custom_sig %s", __FUNCTION__ , (char*)read_custom_sig); -#endif - - printf("\n\rflash checksum 0x%8x attached checksum 0x%8x", flash_checksum, file_checksum->u); - - // compare checksum with received checksum - if( (file_checksum->u == flash_checksum) -#if CONFIG_CUSTOM_SIGNATURE - && !strcmp((char*)read_custom_sig,custom_sig) -#endif - ){ - //Set signature in New Image 2 addr + 8 and + 12 - uint32_t sig_readback0,sig_readback1; - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_write_word(&flash_ota,NewImg2Addr + 8, 0x35393138); - flash_write_word(&flash_ota,NewImg2Addr + 12, 0x31313738); - flash_read_word(&flash_ota, NewImg2Addr + 8, &sig_readback0); - flash_read_word(&flash_ota, NewImg2Addr + 12, &sig_readback1); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - printf("\n\r[%s] signature %x,%x", __FUNCTION__ , sig_readback0, sig_readback1); -#if SWAP_UPDATE - if(OldImg2Addr != ~0x0){ - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_write_word(&flash_ota,OldImg2Addr + 8, 0x35393130); - flash_write_word(&flash_ota,OldImg2Addr + 12, 0x31313738); - flash_read_word(&flash_ota, OldImg2Addr + 8, &sig_readback0); - flash_read_word(&flash_ota, OldImg2Addr + 12, &sig_readback1); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - printf("\n\r[%s] old signature %x,%x", __FUNCTION__ , sig_readback0, sig_readback1); - } -#endif - printf("\n\r[%s] Update OTA success!", __FUNCTION__); - return 0; - } - return -1; -} - -static void update_ota_local_task(void *param) -{ - int server_socket; - unsigned char *buf, *alloc; - _file_checksum *file_checksum; - int read_bytes = 0, size = 0, i = 0; - update_cfg_local_t *cfg = (update_cfg_local_t *)param; - uint32_t address, flash_checksum=0; - uint32_t NewImg2Len = 0, NewImg2Addr = 0, file_info[3]; - int ret = -1 ; - - printf("\n\r[%s] Update task start", __FUNCTION__); - alloc = update_malloc(BUF_SIZE+4); - if(!alloc){ - printf("\n\r[%s] Alloc buffer failed", __FUNCTION__); - goto update_ota_exit; - } - buf = &alloc[4]; - file_checksum = (void*)alloc; - - // Connect server - server_socket = update_ota_connect_server(server_socket, cfg); - if(server_socket == -1){ - goto update_ota_exit; - } - - NewImg2Addr = update_ota_prepare_addr(); - if(NewImg2Addr == -1){ - goto update_ota_exit; - } - - //Clear file_info - memset(file_info, 0, sizeof(file_info)); - - if(file_info[0] == 0){ - printf("\n\r[%s] Read info first", __FUNCTION__); - read_bytes = read(server_socket, file_info, sizeof(file_info)); - // !X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X - // !W checksum !W padding 0 !W file size !W - // !X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X!X - printf("\n\r[%s] info %d bytes", __FUNCTION__, read_bytes); - printf("\n\r[%s] tx chechsum 0x%x, file size 0x%x", __FUNCTION__, file_info[0],file_info[2]); - if(file_info[2] == 0){ - printf("\n\r[%s] No checksum and file size", __FUNCTION__); - goto update_ota_exit; - } - } - -#if SWAP_UPDATE - NewImg2Addr = update_ota_swap_addr(file_info[2], NewImg2Addr); - if(NewImg2Addr == -1){ - goto update_ota_exit; - } -#endif - - NewImg2Len = update_ota_erase_upg_region(file_info[2], NewImg2Len, NewImg2Addr); - if(NewImg2Len == -1){ - goto update_ota_exit; - } - - // reset - file_checksum->u = 0; - // Write New Image 2 sector - if(NewImg2Addr != ~0x0){ - address = NewImg2Addr; - printf("\n\rStart to read data %d bytes\r\n", NewImg2Len); - while(1){ - memset(buf, 0, BUF_SIZE); - read_bytes = read(server_socket, buf, BUF_SIZE); - if(read_bytes == 0) - break; // Read end - if(read_bytes < 0){ - printf("\n\r[%s] Read socket failed", __FUNCTION__); - goto update_ota_exit; - } - - if(read_bytes<4) - printf("\n\r[%s] Recv small packet", __FUNCTION__); - printf("."); - - if((size+read_bytes)>NewImg2Len){ - printf("\n\r[%s] Redundant bytes received", __FUNCTION__); - read_bytes = NewImg2Len-size; - } - - device_mutex_lock(RT_DEV_LOCK_FLASH); - if(flash_stream_write(&flash_ota, address + size, read_bytes, buf) < 0){ - printf("\n\r[%s] Write stream failed", __FUNCTION__); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - goto update_ota_exit; - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); - size += read_bytes; - - file_checksum->c[0] = alloc[4+read_bytes-4]; // checksum attached at file end - file_checksum->c[1] = alloc[4+read_bytes-3]; - file_checksum->c[2] = alloc[4+read_bytes-2]; - file_checksum->c[3] = alloc[4+read_bytes-1]; - - if(size == NewImg2Len) - break; - } - printf("\n\rRead data finished\r\n"); - - // read flash data back and calculate checksum - for(i = 0; i < size-4; i += BUF_SIZE){ - int k; - int rlen = (size-4-i) > BUF_SIZE ? BUF_SIZE : (size-4-i); - flash_stream_read(&flash_ota, NewImg2Addr+i, rlen, buf); - for(k = 0; k < rlen; k++) - flash_checksum+=buf[k]; - } - - ret = update_ota_checksum(file_checksum, flash_checksum, NewImg2Addr); - if(ret == -1){ - printf("\r\nThe checksume is wrong!\r\n"); - goto update_ota_exit; - } - } -update_ota_exit: - if(alloc) - update_free(alloc); - if(server_socket >= 0) - close(server_socket); - if(param) - update_free(param); - TaskOTA = NULL; - printf("\n\r[%s] Update task exit", __FUNCTION__); - if(!ret){ - printf("\n\r[%s] Ready to reboot", __FUNCTION__); - ota_platform_reset(); - } - vTaskDelete(NULL); - return; -} - -int update_ota_local(char *ip, int port){ - update_cfg_local_t *pUpdateCfg; - - if(TaskOTA){ - printf("\n\r[%s] Update task has created.", __FUNCTION__); - return 0; - } - pUpdateCfg = update_malloc(sizeof(update_cfg_local_t)); - if(pUpdateCfg == NULL){ - printf("\n\r[%s] Alloc update cfg failed", __FUNCTION__); - return -1; - } - pUpdateCfg->ip_addr = inet_addr(ip); - pUpdateCfg->port = ntohs(port); - - if(xTaskCreate(update_ota_local_task, "OTA_server", STACK_SIZE, pUpdateCfg, TASK_PRIORITY, &TaskOTA) != pdPASS){ - update_free(pUpdateCfg); - printf("\n\r[%s] Create update task failed", __FUNCTION__); - } - return 0; -} - -void cmd_update(int argc, char **argv){ - int port; - if(argc != 3){ - printf("\n\r[%s] Usage: update IP PORT", __FUNCTION__); - return; - } - port = atoi(argv[2]); - update_ota_local(argv[1], port); -} - -void cmd_ota_image(bool cmd){ - flash_t flash; - uint32_t Part1Addr = 0xFFFFFFFF,Part2Addr = 0xFFFFFFFF; - uint8_t *pbuf = NULL; - - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_read_word(&flash, 0x18, &Part1Addr); - Part1Addr = (Part1Addr&0xFFFF)*1024; // first partition - flash_read_word(&flash, OFFSET_DATA, &Part2Addr); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - - if(Part2Addr == ~0x0) - return; - - pbuf = update_malloc(FLASH_SECTOR_SIZE); - if(!pbuf) return; - - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, Part2Addr, FLASH_SECTOR_SIZE, pbuf); - if (cmd == 1) - memcpy((char*)pbuf+8, "81958711", 8); - else - memcpy((char*)pbuf+8, "01958711", 8); - - flash_erase_sector(&flash, Part2Addr); - flash_stream_write(&flash, Part2Addr, FLASH_SECTOR_SIZE, pbuf); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - -#if SWAP_UPDATE - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash, Part1Addr, FLASH_SECTOR_SIZE, pbuf); - if (cmd == 1) - memcpy((char*)pbuf+8, "01958711", 8); - else - memcpy((char*)pbuf+8, "81958711", 8); - - flash_erase_sector(&flash, Part1Addr); - flash_stream_write(&flash, Part1Addr, FLASH_SECTOR_SIZE, pbuf); - device_mutex_unlock(RT_DEV_LOCK_FLASH); -#endif - update_free(pbuf); -} - -#ifdef HTTP_OTA_UPDATE -/****************************************************************************************************************** -** Function Name : update_ota_http_connect_server -** Description : connect to the OTA server -** Input : server_socket: the socket used -** host: host address of the OTA server -** port: port of the OTA server -** Return : connect ok: socket value -** Failed: -1 -*******************************************************************************************************************/ -int update_ota_http_connect_server(int server_socket, char *host, int port){ - struct sockaddr_in server_addr; - struct hostent *server; - - server_socket = socket(AF_INET, SOCK_STREAM, 0); - if(server_socket < 0){ - printf("\n\r[%s] Create socket failed", __FUNCTION__); - return -1; - } - - server = gethostbyname(host); - if(server == NULL){ - printf("[ERROR] Get host ip failed\n"); - return -1; - } - - memset(&server_addr,0,sizeof(server_addr)); - server_addr.sin_family = AF_INET; - server_addr.sin_port = htons(port); - memcpy(&server_addr.sin_addr.s_addr,server->h_addr,server->h_length); - - if (connect(server_socket,(struct sockaddr *)&server_addr, sizeof(server_addr)) < 0){ - printf("\n\r[%s] Socket connect failed", __FUNCTION__); - return -1; - } - - return server_socket; -} - -/****************************************************************************************************************** -** Function Name : parse_http_response -** Description : Parse the http response to get some useful parameters -** Input : response : The http response got from server -** response_len: The length of http response -** result : The struct that store the usful infor about the http response -** Return : Parse OK: 1 -> Only got the status code -** 3 -> Got the status code and content_length, but didn't get the full header -** 4 -> Got all the information needed -** Failed: -1 -*******************************************************************************************************************/ -int parse_http_response(uint8_t *response, uint32_t response_len, http_response_result_t *result) { - uint32_t i, p, q, m; - uint32_t header_end = 0; - - //Get status code - if(0 == result->parse_status){//didn't get the http response - uint8_t status[4] = {0}; - i = p = q = m = 0; - for (; i < response_len; ++i) { - if (' ' == response[i]) { - ++m; - if (1 == m) {//after HTTP/1.1 - p = i; - } - else if (2 == m) {//after status code - q = i; - break; - } - } - } - if (!p || !q || q-p != 4) {//Didn't get the status code - return -1; - } - memcpy(status, response+p+1, 3);//get the status code - result->status_code = atoi((char const *)status); - if(result->status_code == 200) - result->parse_status = 1; - else{ - printf("\n\r[%s] The http response status code is %d", __FUNCTION__, result->status_code); - return -1; - } - } - - //if didn't receive the full http header - if(3 == result->parse_status){//didn't get the http response - p = q = 0; - for (i = 0; i < response_len; ++i) { - if (response[i] == '\r' && response[i+1] == '\n' && - response[i+2] == '\r' && response[i+3] == '\n') {//the end of header - header_end = i+4; - result->parse_status = 4; - result->header_len = header_end; - result->body = response + header_end; - break; - } - } - if (3 == result->parse_status) {//Still didn't receive the full header - result->header_bak = update_malloc(HEADER_BAK_LEN + 1); - memset(result->header_bak, 0, strlen(result->header_bak)); - memcpy(result->header_bak, response + response_len - HEADER_BAK_LEN, HEADER_BAK_LEN); - } - } - - //Get Content-Length - if(1 == result->parse_status){//didn't get the content length - uint32_t content_length = 0; - const uint8_t *content_length_buf1 = "CONTENT-LENGTH"; - const uint8_t *content_length_buf2 = "Content-Length"; - const uint32_t content_length_buf_len = strlen(content_length_buf1); - p = q = 0; - - for (i = 0; i < response_len; ++i) { - if (response[i] == '\r' && response[i+1] == '\n') { - q = i;//the end of the line - if (!memcmp(response+p, content_length_buf1, content_length_buf_len) || - !memcmp(response+p, content_length_buf2, content_length_buf_len)) {//get the content length - int j1 = p+content_length_buf_len, j2 = q-1; - while ( j1 < q && (*(response+j1) == ':' || *(response+j1) == ' ') ) ++j1; - while ( j2 > j1 && *(response+j2) == ' ') --j2; - uint8_t len_buf[12] = {0}; - memcpy(len_buf, response+j1, j2-j1+1); - result->body_len = atoi((char const *)len_buf); - result->parse_status = 2; - } - p = i+2; - } - if (response[i] == '\r' && response[i+1] == '\n' && - response[i+2] == '\r' && response[i+3] == '\n') {//Get the end of header - header_end = i+4;//p is the start of the body - if(result->parse_status == 2){//get the full header and the content length - result->parse_status = 4; - result->header_len = header_end; - result->body = response + header_end; - } - else {//there are no content length in header - printf("\n\r[%s] No Content-Length in header", __FUNCTION__); - return -1; - } - break; - } - } - - if (1 == result->parse_status) {//didn't get the content length and the full header - result->header_bak = update_malloc(HEADER_BAK_LEN + 1); - memset(result->header_bak, 0, strlen(result->header_bak)); - memcpy(result->header_bak, response + response_len - HEADER_BAK_LEN, HEADER_BAK_LEN); - } - else if (2 == result->parse_status) {//didn't get the full header but get the content length - result->parse_status = 3; - result->header_bak = update_malloc(HEADER_BAK_LEN + 1); - memset(result->header_bak, 0, strlen(result->header_bak)); - memcpy(result->header_bak, response + response_len - HEADER_BAK_LEN, HEADER_BAK_LEN); - } - } - - return result->parse_status; -} - -int http_update_ota(char *host, int port, char *resource) -{ - int server_socket; - unsigned char *buf, *alloc, *request; - _file_checksum *file_checksum; - int read_bytes = 0, i = 0; - uint32_t address, flash_checksum = 0; - uint32_t NewImg2Len = 0, NewImg2Addr = 0; - int ret = -1; - http_response_result_t rsp_result = {0}; - - alloc = update_malloc(BUF_SIZE + 4); - if(!alloc){ - printf("\n\r[%s] Alloc buffer failed", __FUNCTION__); - goto update_ota_exit; - } - buf = &alloc[4]; - file_checksum = (void*)alloc; - - // Connect server - server_socket = update_ota_http_connect_server(server_socket, host, port); - if(server_socket == -1){ - goto update_ota_exit; - } - - NewImg2Addr = update_ota_prepare_addr(); - if(NewImg2Addr == -1){ - goto update_ota_exit; - } - - // reset - file_checksum->u = 0; - - // Write New Image 2 sector - if(NewImg2Addr != ~0x0){ - uint32_t idx = 0; - int data_len = 0; - printf("\n\r"); - - //send http request - request = (unsigned char *) update_malloc(strlen("GET /") + strlen(resource) + strlen(" HTTP/1.1\r\nHost: ") - + strlen(host) + strlen("\r\n\r\n") + 1); - sprintf(request, "GET /%s HTTP/1.1\r\nHost: %s\r\n\r\n", resource, host); - - ret = write(server_socket, request, strlen(request)); - if(ret < 0){ - printf("\n\r[%s] Send HTTP request failed", __FUNCTION__); - goto update_ota_exit; - } - - while (3 >= rsp_result.parse_status){//still read header - if(0 == rsp_result.parse_status){//didn't get the http response - memset(buf, 0, BUF_SIZE); - read_bytes = read(server_socket, buf, BUF_SIZE); - if(read_bytes == 0) - continue; - if(read_bytes < 0){ - printf("\n\r[%s] Read socket failed", __FUNCTION__); - goto update_ota_exit; - } - - idx = read_bytes; - memset(&rsp_result, 0, sizeof(rsp_result)); - if(parse_http_response(buf, idx, &rsp_result) == -1){ - goto update_ota_exit; - } - } - else if((1 == rsp_result.parse_status) || (3 == rsp_result.parse_status)){//just get the status code - memset(buf, 0, BUF_SIZE); - memcpy(buf, rsp_result.header_bak, HEADER_BAK_LEN); - update_free(rsp_result.header_bak); - rsp_result.header_bak = NULL; - read_bytes = read(server_socket, buf+ HEADER_BAK_LEN, (BUF_SIZE - HEADER_BAK_LEN)); - if(read_bytes == 0) - continue; - if(read_bytes < 0){ - printf("\n\r[%s] Read socket failed", __FUNCTION__); - goto update_ota_exit; - } - - idx = read_bytes + HEADER_BAK_LEN; - - if(parse_http_response(buf, read_bytes + HEADER_BAK_LEN, &rsp_result) == -1){ - goto update_ota_exit; - } - } - else if(3 == rsp_result.parse_status){ - printf("\n\r[%s] Get the content_length failed", __FUNCTION__); - goto update_ota_exit; - } - } - - if (0 == rsp_result.body_len){ - printf("\n\r[%s] New firmware size = 0 !", __FUNCTION__); - goto update_ota_exit; - } - else - printf("\n\r[%s] Download new firmware begin, total size : %d\n\r", __FUNCTION__, rsp_result.body_len); - -#if SWAP_UPDATE - NewImg2Addr = update_ota_swap_addr(rsp_result.body_len, NewImg2Addr); - if(NewImg2Addr == -1){ - goto update_ota_exit; - } -#endif - address = NewImg2Addr; - NewImg2Len = update_ota_erase_upg_region(rsp_result.body_len, NewImg2Len, NewImg2Addr); - if(NewImg2Len == -1){ - goto update_ota_exit; - } - - //Write the body of http response into flash - data_len = idx - rsp_result.header_len; - if(data_len > 0){ - file_checksum->c[0] = alloc[4+data_len-4]; // checksum attached at file end - file_checksum->c[1] = alloc[4+data_len-3]; - file_checksum->c[2] = alloc[4+data_len-2]; - file_checksum->c[3] = alloc[4+data_len-1]; - - device_mutex_lock(RT_DEV_LOCK_FLASH); - if(flash_stream_write(&flash_ota, address, data_len, (buf+rsp_result.header_len)) < 0){ - printf("\n\r[%s] Write sector failed", __FUNCTION__); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - goto update_ota_exit; - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); - } - - idx = 0; - idx += data_len; - while (idx < NewImg2Len){ - printf("."); - data_len = NewImg2Len - idx; - if(data_len > BUF_SIZE) - data_len = BUF_SIZE; - - memset(buf, 0, BUF_SIZE); - read_bytes = read(server_socket, buf, data_len); - if(read_bytes == 0) - continue; - if(read_bytes < 0){ - printf("\n\r[%s] Read socket failed", __FUNCTION__); - goto update_ota_exit; - } - - if(read_bytes<4) - printf("\n\r[%s] Recv small packet", __FUNCTION__); - - device_mutex_lock(RT_DEV_LOCK_FLASH); - if(flash_stream_write(&flash_ota, address + idx, read_bytes, buf) < 0){ - printf("\n\r[%s] Write sector failed", __FUNCTION__); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - goto update_ota_exit; - } - device_mutex_unlock(RT_DEV_LOCK_FLASH); - - file_checksum->c[0] = alloc[4+read_bytes-4]; // checksum attached at file end - file_checksum->c[1] = alloc[4+read_bytes-3]; - file_checksum->c[2] = alloc[4+read_bytes-2]; - file_checksum->c[3] = alloc[4+read_bytes-1]; - - idx += read_bytes; - } - printf("\n\r[%s] Download new firmware %d bytes completed\n\r", __FUNCTION__, idx); - - // read flash data back and calculate checksum - for(i = 0; i < idx-4; i += BUF_SIZE){ - int k; - int rlen = (idx-4-i)>BUF_SIZE?BUF_SIZE:(idx-4-i); - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_stream_read(&flash_ota, NewImg2Addr+i, rlen, buf); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - for(k = 0; k < rlen; k++) - flash_checksum+=buf[k]; - } - - ret = update_ota_checksum(file_checksum, flash_checksum, NewImg2Addr); - if(ret == -1){ - printf("\n\r[%s] The checksume is wrong!\n\r", __FUNCTION__); - goto update_ota_exit; - } - } -update_ota_exit: - if(alloc) - update_free(alloc); - if(request) - update_free(request); - if(server_socket >= 0) - close(server_socket); - return ret; -} -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/platform/ota_8195a.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/platform/ota_8195a.h deleted file mode 100644 index d474f62..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/platform/ota_8195a.h +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef OTA_8195A_H -#define OTA_8195A_H - -#include -#include -#include -#include -#include - -/************************Related setting****************************/ -#define HTTP_OTA_UPDATE //if define, using http protocol, if not, will use socket -#define CONFIG_CUSTOM_SIGNATURE 0 //if verify the custom signature(define in ota_8195a.c cus_sig) -#define WRITE_OTA_ADDR 1 -#define SWAP_UPDATE 0 - - -#define BUF_SIZE 512 -#define HEADER_BAK_LEN 32 - -#define OFFSET_DATA FLASH_SYSTEM_DATA_ADDR -#define IMAGE_2 0x0000B000 -#if WRITE_OTA_ADDR -#define BACKUP_SECTOR (FLASH_SYSTEM_DATA_ADDR - 0x1000) -#endif -/*******************************************************************/ - - -/****************Define the structures used*************************/ -typedef struct{ - uint32_t ip_addr; - uint16_t port; -}update_cfg_local_t; - -typedef struct { - uint32_t status_code; - uint32_t header_len; - uint8_t *body; - uint32_t body_len; - uint8_t *header_bak; - uint32_t parse_status; -} http_response_result_t; - -typedef union { - uint32_t u; - unsigned char c[4]; -} _file_checksum; -/*******************************************************************/ - - -/****************General functions used by ota update***************/ -void *update_malloc(unsigned int size); -void update_free(void *buf); -void ota_platform_reset(void); -#if WRITE_OTA_ADDR -int write_ota_addr_to_system_data(flash_t *flash, uint32_t ota_addr); -#endif -int update_ota_connect_server(int server_socket, update_cfg_local_t *cfg); -uint32_t update_ota_prepare_addr(void); -#if SWAP_UPDATE -uint32_t update_ota_swap_addr(uint32_t img_len, uint32_t NewImg2Addr); -#endif -int update_ota_erase_upg_region(uint32_t img_len, uint32_t NewImg2Len, uint32_t NewImg2Addr); -int update_ota_checksum(_file_checksum *file_checksum, uint32_t flash_checksum, uint32_t NewImg2Addr); -/*******************************************************************/ - - -/*******************Functions called by AT CMD**********************/ -void cmd_update(int argc, char **argv); -void cmd_ota_image(bool cmd); -/*******************************************************************/ - - -/************************************************************************************************* -** Function Name : update_ota_local -** Description : Starting a thread of OTA updating through socket -** Input : ip:The IP address of OTA server -** port:The Port of OTA server -** Return : 0: Task created OK -** -1: Task created failed -**************************************************************************************************/ -int update_ota_local(char *ip, int port); - - -#ifdef HTTP_OTA_UPDATE -int parse_http_response(uint8_t *response, uint32_t response_len, http_response_result_t *result); -int update_ota_http_connect_server(int server_socket, char *host, int port); - -/************************************************************************************************* -** Function Name : http_update_ota -** Description : The process of OTA updating through http protocol -** Input : cfg:struct update_cfg_local_t -** Return : NULL -**************************************************************************************************/ -int http_update_ota(char *host, int port, char *resource); -#endif - -#endif diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/include/rt_lib_rom.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/include/rt_lib_rom.h deleted file mode 100644 index 9f65660..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/include/rt_lib_rom.h +++ /dev/null @@ -1,271 +0,0 @@ -/* - * rtl_lib.h - * - * Definitions for RTL library functions - */ - -#ifndef _RTL_LIB_ROM_H_ -#define _RTL_LIB_ROM_H_ - - -#include -#include - -#include - -#include "../libc/rom/string/rom_libc_string.h" -#include "../libgloss/rtl8195a/rom/rom_libgloss_retarget.h" - -#ifndef _PTR -#define _PTR void * -#endif - -#ifndef _AND -#define _AND , -#endif - -#ifndef _NOARGS -#define _NOARGS void -#endif - -#ifndef _CONST -#define _CONST const -#endif - -#ifndef _VOLATILE -#define _VOLATILE volatile -#endif - -#ifndef _SIGNED -#define _SIGNED signed -#endif - -#ifndef _DOTS -#define _DOTS , ... -#endif - -#ifndef _VOID -#define _VOID void -#endif - -// -// RTL library functions in ROM -// - -#define __rtl_memset __rtl_memset_v1_00 -#define __rtl_memchr __rtl_memchr_v1_00 -#define __rtl_memmove __rtl_memmove_v1_00 -#define __rtl_strcmp __rtl_strcmp_v1_00 -#define __rtl_memcpy __rtl_memcpy_v1_00 - - - -extern _LONG_CALL_ void * __rtl_memset_v1_00(void * m , int c , size_t n); -extern _LONG_CALL_ void * __rtl_memchr_v1_00(const void * src_void , int c , size_t length); -extern _LONG_CALL_ void * __rtl_memmove_v1_00( void * dst_void , const void * src_void , size_t length); -extern _LONG_CALL_ int __rtl_strcmp_v1_00(const char *s1 , const char *s2); -extern _LONG_CALL_ void * __rtl_memcpy_v1_00(void * __restrict dst0 , const void * __restrict src0 , size_t len0); - - -// -// rtl eabi functions -// - -#define __rtl_itod __rtl_itod_v1_00 -#define __rtl_dtoi __rtl_dtoi_v1_00 -#define __rtl_uitof __rtl_uitof_v1_00 -#define __rtl_uitod __rtl_uitod_v1_00 - - - -#define __rtl_dcmpeq __rtl_dcmpeq_v1_00 -#define __rtl_dcmplt __rtl_dcmplt_v1_00 -#define __rtl_dcmpgt __rtl_dcmpgt_v1_00 - - -#define __rtl_dadd __rtl_dadd_v1_00 -#define __rtl_dsub __rtl_dsub_v1_00 -#define __rtl_dmul __rtl_dmul_v1_00 -#define __rtl_ddiv __rtl_ddiv_v1_00 - -extern _LONG_CALL_ double __rtl_itod_v1_00(int lval); -extern _LONG_CALL_ int __rtl_dtoi_v1_00(double d); -extern _LONG_CALL_ float __rtl_uitof_v1_00(unsigned int lval); -extern _LONG_CALL_ double __rtl_uitod_v1_00(unsigned int lval); - - -extern _LONG_CALL_ int __rtl_dcmpeq_v1_00(double a, double b); -extern _LONG_CALL_ int __rtl_dcmplt_v1_00(double a, double b); -extern _LONG_CALL_ int __rtl_dcmpgt_v1_00(double a, double b); - - -extern _LONG_CALL_ double __rtl_dadd_v1_00(double a, double b); -extern _LONG_CALL_ double __rtl_dsub_v1_00(double a, double b); -extern _LONG_CALL_ double __rtl_dmul_v1_00(double a, double b); -extern _LONG_CALL_ double __rtl_ddiv_v1_00(double a, double b); - -// --- ??? -extern _LONG_CALL_ float __rtl_dtof_v1_00(double d); -extern _LONG_CALL_ int __rtl_dtoui_v1_00(double d); -extern _LONG_CALL_ float __rtl_itof_v1_00(int val); -extern _LONG_CALL_ char *__rtl_ltoa_v1_00(int value, char *string, int radix); -extern _LONG_CALL_ char *__rtl_ultoa_v1_00(unsigned int value, char *string, int radix); -extern _LONG_CALL_ int __rtl_ftol_v1_00(float f); -extern _LONG_CALL_ int __rtl_ftod_v1_00(float f); -extern _LONG_CALL_ float __rtl_fadd_v1_00(float a, float b); -extern _LONG_CALL_ float __rtl_fsub_v1_00(float a, float b); -extern _LONG_CALL_ float __rtl_fmul_v1_00(float a, float b); -extern _LONG_CALL_ float __rtl_fdiv_v1_00(float a, float b); -extern _LONG_CALL_ int __rtl_dcmple_v1_00(double a, double b); -extern _LONG_CALL_ int __rtl_fcmplt_v1_00(float a, float b); -extern _LONG_CALL_ int __rtl_fcmpgt_v1_00(float a, float b); -// --- ??? - -// -// mprec -// - -#include - - -typedef struct _Bigint _Bigint; - - -#define __rtl_Balloc __rtl_Balloc_v1_00 -#define __rtl_Bfree __rtl_Bfree_v1_00 -#define __rtl_d2b __rtl_d2b_v1_00 -#define __rtl_i2b __rtl_i2b_v1_00 -#define __rtl_pow5mult __rtl_pow5mult_v1_00 -#define __rtl_multadd __rtl_multadd_v1_00 -#define __rtl_mult __rtl_mult_v1_00 -#define __rtl_hi0bits __rtl_hi0bits_v1_00 -#define __rtl_lshift __rtl_lshift_v1_00 -#define __rtl_cmp __rtl_cmp_v1_00 -#define __rtl_diff __rtl_diff_v1_00 - - -extern _LONG_CALL_ _Bigint * __rtl_Balloc_v1_00(struct _reent *ptr, int k); - -extern _LONG_CALL_ void __rtl_Bfree_v1_00(struct _reent *ptr, _Bigint * v); - -extern _LONG_CALL_ _Bigint * __rtl_d2b_v1_00(struct _reent * ptr, double _d, int *e, int *bits); -extern _LONG_CALL_ _Bigint * __rtl_i2b_v1_00(struct _reent *ptr, int i ); -extern _LONG_CALL_ _Bigint * __rtl_pow5mult_v1_00(struct _reent * ptr, _Bigint *b, int k); -extern _LONG_CALL_ _Bigint * __rtl_multadd_v1_00(struct _reent *ptr, _Bigint * b, int m, int a); -extern _LONG_CALL_ _Bigint * __rtl_mult_v1_00(struct _reent *ptr, _Bigint *a, _Bigint *b); -extern _LONG_CALL_ int __rtl_hi0bits_v1_00(register __ULong x); -extern _LONG_CALL_ _Bigint *__rtl_lshift_v1_00(struct _reent *ptr, _Bigint *b, int k); -extern _LONG_CALL_ int __rtl_cmp_v1_00(_Bigint *a, _Bigint *b); -extern _LONG_CALL_ _Bigint *__rtl_diff_v1_00(struct _reent* ptr, _Bigint *a, _Bigint *b); - -// -// dtoa -// - -#define __rtl_dtoa_r __rtl_dtoa_r_v1_00 - -extern char * __rtl_dtoa_r_v1_00(struct _reent *ptr, double _d, int mode, int ndigits, int *decpt, int *sign, char **rve); - -// -// mallocr -// -#include -#include - - - -#define __rom_mallocr_init __rom_mallocr_init_v1_00 - -#define __rtl_calloc_r __rtl_calloc_r_v1_00 -#define __rtl_cfree_r __rtl_cfree_r_v1_00 -#define __rtl_malloc_r __rtl_malloc_r_v1_00 -#define __rtl_free_r __rtl_free_r_v1_00 -#define __rtl_realloc_r __rtl_realloc_r_v1_00 -#define __rtl_memalign_r __rtl_memalign_r_v1_00 -#define __rtl_valloc_r __rtl_valloc_r_v1_00 -#define __rtl_pvalloc_r __rtl_pvalloc_r_v1_00 - - -extern _LONG_CALL_ void __rom_mallocr_init_v1_00(void); - - -#define RARG struct _reent *reent_ptr, -extern _LONG_CALL_ void* __rtl_calloc_r_v1_00(RARG size_t n, size_t elem_size); -extern _LONG_CALL_ void __rtl_cfree_r_v1_00(void *mem); -extern _LONG_CALL_ void* __rtl_malloc_r_v1_00(RARG size_t bytes); -extern _LONG_CALL_ void __rtl_free_r_v1_00(RARG void* mem); -extern _LONG_CALL_ void* __rtl_realloc_r_v1_00(RARG void* oldmem, size_t bytes); -extern _LONG_CALL_ void* __rtl_memalign_r_v1_00(RARG size_t alignment, size_t bytes); -extern _LONG_CALL_ void* __rtl_valloc_r_v1_00(RARG size_t bytes); -extern _LONG_CALL_ void* __rtl_pvalloc_r_v1_00(RARG size_t bytes); - - -// -// stdio -// -extern int __rtl_errno; - -#ifndef _READ_WRITE_RETURN_TYPE -#define _READ_WRITE_RETURN_TYPE _ssize_t -#endif - -#ifndef _READ_WRITE_BUFSIZE_TYPE -#define _READ_WRITE_BUFSIZE_TYPE int -#endif - -#define __rtl_sread __rtl_sread_v1_00 -#define __rtl_swrite __rtl_swrite_v1_00 -#define __rtl_seofread __rtl_seofread_v1_00 -#define __rtl_sseek __rtl_sseek_v1_00 -#define __rtl_sclose __rtl_sclose_v1_00 -#define __rtl_sbrk_r __rtl_sbrk_r_v1_00 - -extern _LONG_CALL_ _READ_WRITE_RETURN_TYPE __rtl_sread_v1_00( - struct _reent *ptr, - void *cookie, - char *buf, - _READ_WRITE_BUFSIZE_TYPE n); - -extern _LONG_CALL_ _READ_WRITE_RETURN_TYPE __rtl_swrite_v1_00( - struct _reent *ptr, - void *cookie, - char const *buf, - _READ_WRITE_BUFSIZE_TYPE n); - -extern _LONG_CALL_ _READ_WRITE_RETURN_TYPE __rtl_seofread_v1_00( - struct _reent *_ptr, - _PTR cookie, - char *buf, - _READ_WRITE_BUFSIZE_TYPE len); - -extern _LONG_CALL_ _fpos_t __rtl_sseek_v1_00( - struct _reent *ptr _AND - void *cookie _AND - _fpos_t offset _AND - int whence); - -extern _LONG_CALL_ int __rtl_sclose_v1_00( - struct _reent *ptr _AND - void *cookie); - -extern _LONG_CALL_ void * __rtl_sbrk_r_v1_00( - struct _reent *ptr, - ptrdiff_t incr); - -// -// vfprintf -// - -#include -#include - -#define __rtl_vfprintf_r __rtl_vfprintf_r_v1_00 - -extern _LONG_CALL_ int __rtl_vfprintf_r_v1_00(struct _reent *, FILE *, const char *, va_list); - -#ifndef CONFIG_RELEASE_BUILD_LIBRARIES -#define __rtl_fflush_r __rtl_fflush_r_v1_00 -extern _LONG_CALL_ int __rtl_fflush_r_v1_00(struct _reent *ptr, register FILE * fp); -#endif - -#endif /* _RTL_LIB_ROM_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/include/rtl_bios_data.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/include/rtl_bios_data.h deleted file mode 100644 index 180a1b7..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/include/rtl_bios_data.h +++ /dev/null @@ -1,234 +0,0 @@ -/* - * rtl_bios_data.h - * - * Created on: 12/02/2017 - * Author: pvvx - * - * This variables declared in ROM code! - * Variables use fixed addresses! - * (see *.ld script) - */ - -#ifndef _RTL_BIOS_DATA_H_ -#define _RTL_BIOS_DATA_H_ - -#include "platform_autoconf.h" -#include -#include -#include -#include -// component/soc/realtek/common/bsp/ -#include "basic_types.h" -// component/soc/realtek/8195a/fwlib/ -#include "rtl8195a/rtl8195a.h" -#include "hal_gpio.h" -#include "hal_irqn.h" -#include "hal_timer.h" -#include "hal_sdr_controller.h" -// component/soc/realtek/8195a/fwlib/ -#include "ram_lib/wlan/realtek/wlan_ram_map/rom/rom_wlan_ram_map.h" -// component/soc/realtek/8195a/misc/driver/ -#include "rtl_consol.h" -// component/soc/realtek/8195a/misc/rtl_std_lib/ -#include "include/rtl_lib.h" -#include "include/rt_lib_rom.h" -#include "libc/rom/string/rom_libc_string.h" -#include "libgloss/rtl8195a/rom/rom_libgloss_retarget.h" - -//#include "rom/rom_libgloss_retarget.h" - -typedef void (*START_FUNC)(void); - -/* ROM + startup.c */ -extern IRQ_FUN NewVectorTable[64]; // 10000000 -extern IRQ_FUN UserIrqFunTable[64]; // 10000100 -extern uint32_t UserIrqDataTable[64]; // 10000200 - -/* ROM + diag.h */ -extern uint32_t CfgSysDebugWarn; // 10000300 -extern uint32_t CfgSysDebugInfo; // 10000304 -extern uint32_t CfgSysDebugErr; // 10000308 -extern uint32_t ConfigDebugWarn; // 1000030c -extern uint32_t ConfigDebugInfo; // 10000310 -extern uint32_t ConfigDebugErr; // 10000314 - - -/* ROM + hal_timer.h & .. */ -extern HAL_TIMER_OP HalTimerOp; // 10000318 -extern uint16_t GPIOState[11]; // 10000334 -extern uint32_t gTimerRecord; // 1000034C -/* ROM + hal_ssi.h */ -extern uint32_t SSI_DBG_CONFIG; // 10000350 -extern PHAL_GPIO_ADAPTER _pHAL_Gpio_Adapter; // 10000354 - -/* ROM + rtl8195a_timer.c */ -extern IRQ_FUN Timer2To7VectorTable[MAX_TIMER_VECTOR_TABLE_NUM]; // 10000358 - -/* ROM + Rand() */ -extern uint32_t _rand_z4, _rand_z3, _rand_z2, _rand_z1, _rand_first; // 10000370.. - -/* ROM + rtl_consol.c */ -extern volatile UART_LOG_CTL *pUartLogCtl; // 10000384 -extern UART_LOG_BUF UartLogBuf; // 10000388 -extern volatile UART_LOG_CTL UartLogCtl; // 10000408 -extern uint8_t UartLogHistoryBuf[UART_LOG_HISTORY_LEN][UART_LOG_CMD_BUFLEN]; // 10000430 UartLogHistoryBuf[5][127] ! -extern uint8_t *ArgvArray[MAX_ARGV]; // 100006AC *ArgvArray[10] ! - -/* ROM + ?? */ -extern struct _rom_wlan_ram_map rom_wlan_ram_map; // 100006D4 -typedef struct _FALSE_ALARM_STATISTICS { - uint32_t Cnt_Parity_Fail; - uint32_t Cnt_Rate_Illegal; - uint32_t Cnt_Crc8_fail; - uint32_t Cnt_Mcs_fail; - uint32_t Cnt_Ofdm_fail; - uint32_t Cnt_Ofdm_fail_pre; - uint32_t Cnt_Cck_fail; - uint32_t Cnt_all; - uint32_t Cnt_Fast_Fsync; - uint32_t Cnt_SB_Search_fail; - uint32_t Cnt_OFDM_CCA; - uint32_t Cnt_CCK_CCA; - uint32_t Cnt_CCA_all; - uint32_t Cnt_BW_USC; - uint32_t Cnt_BW_LSC; -} FALSE_ALARM_STATISTICS; -extern FALSE_ALARM_STATISTICS FalseAlmCnt; // 100006E0 - -typedef struct _rom_info { - uint8_t EEPROMVersion; - uint8_t CrystalCap; - uint64_t DebugComponents; - uint32_t DebugLevel; -} ROM_INFO; -extern ROM_INFO ROMInfo; // 10000720 - -typedef struct _CFO_TRACKING_ { - BOOL bATCStatus; - BOOL largeCFOHit; - BOOL bAdjust; - uint8_t CrystalCap; - uint8_t DefXCap; - uint32_t CFO_tail[2]; - uint32_t CFO_ave_pre; - uint32_t packetCount; - uint32_t packetCount_pre; - BOOL bForceXtalCap; - BOOL bReset; - uint8_t CFO_TH_XTAL_HIGH; - uint8_t CFO_TH_XTAL_LOW; - uint8_t CFO_TH_ATC; -}CFO_TRACKING; -extern CFO_TRACKING DM_CfoTrack; // 10000738 - -/* in rom_libgloss_retarget.h -struct _rom_libgloss_ram_map { - int (*libgloss_close)(int fildes); - int (*libgloss_fstat)(int fildes , struct stat *st); - int (*libgloss_isatty)(int file); - int (*libgloss_lseek)(int file , int ptr , int dir); - int (*libgloss_open)(char *file , int flags , int mode); - int (*libgloss_read)(int file , char *ptr , int len); - int (*libgloss_write)(int file , const char *ptr , int len); - void* (*libgloss_sbrk)(int incr); -}; -*/ -extern struct _rom_libgloss_ram_map rom_libgloss_ram_map; // 10000760 -struct malloc_chunk -{ - size_t prev_size; - size_t size; - struct malloc_chunk *fd; - struct malloc_chunk *bk; -}; -extern struct malloc_chunk * __rtl_malloc_av_[258]; // 10000780 __rom_mallocr_init_v1_00(), _rtl_free_r_v1_00().. -extern uint32_t __rtl_malloc_trim_threshold; // 10000b88 __rom_mallocr_init_v1_00() -extern uint32_t __rtl_malloc_top_pad; // 10000b8c __rom_mallocr_init_v1_00() -extern uint8_t * __rtl_malloc_sbrk_base; // 10000b90 __rom_mallocr_init_v1_00() -extern uint32_t __rtl_malloc_max_sbrked_mem; // 10000b94 __rom_mallocr_init_v1_00() -extern uint32_t __rtl_malloc_max_total_mem; // 10000b98 __rom_mallocr_init_v1_00() -struct mallinfo -{ - int arena; - int ordblks; - int smblks; - int hblks; - int hblkhd; - int usmblks; - int fsmblks; - int uordblks; - int fordblks; - int keepcost; -}; -extern struct mallinfo __rtl_malloc_current_mallinfo; // 10000b9c __rom_mallocr_init_v1_00() - -/* IMAGE1 HEAD: ROM + startup.c (bootloader) */ -extern RAM_START_FUNCTION gRamStartFun; // 10000bc8 = { PreProcessForVendor + 1 }; -extern RAM_START_FUNCTION gRamPatchWAKE; // 10000bcc = { RtlBootToSram + 1 }; -extern RAM_START_FUNCTION gRamPatchFun0; // 10000bd0 = { RtlBootToSram + 1 }; -extern RAM_START_FUNCTION gRamPatchFun1; // 10000bd4 = { RtlBootToSram + 1 }; -extern RAM_START_FUNCTION gRamPatchFun2; // 10000bd8 = { RtlBootToSram + 1 }; -//extern uint8 RAM_IMG1_VALID_PATTEN[8]; // 10000bdc = { 0x23, 0x79, 0x16, 0x88, 0xff, 0xff, 0xff, 0xff }; - -/* ROM + hal_sdr_controller.c */ -extern uint32_t rand_x; // 10000be4: ChangeRandSeed_rom(), Sdr_Rand2_rom() -#define REC_NUM 512 -extern uint32_t AvaWds[2][REC_NUM]; // 10000be8 -extern DRAM_DEVICE_INFO SdrDramInfo; // 10001be8 -#define DRAM_DEVICE_INFO_INIT() { \ - &SdrDramDev, \ - &SdrDramModeReg, \ - &SdrDramTiming, \ - DRAM_TIMING_TCK, \ - DFI_RATIO_1 } -extern DRAM_TIMING_INFO SdrDramTiming; // 10001bfc -#define DRAM_TIMING_INFO_INIT() { \ - DRAM_TIMING_TRFC, /* TrfcPs; */ \ - DRAM_TIMING_TREFI, /* TrefiPs; */ \ - DRAM_TIMING_TWRMAXTCK, /* WrMaxTck; */\ - DRAM_TIMING_TRCD, /* TrcdPs; */ \ - DRAM_TIMING_TRP, /* TrpPs; */ \ - DRAM_TIMING_TRAS, /* TrasPs; */ \ - DRAM_TIMING_TRRD, /* TrrdTck; */ \ - DRAM_TIMING_TWR, /* TwrPs; */ \ - DRAM_TIMING_TWTR, /* TwtrTck; */ \ - /* 13090, */ /* TrtpPs; */ \ - DRAM_TIMING_TMRD, /* TmrdTck; */ \ - DRAM_TIMING_TRTP, /* TrtpTck; */ \ - DRAM_TIMING_TCCD, /* TccdTck; */ \ - DRAM_TIMING_TRC } /* TrcPs; */ -extern DRAM_MODE_REG_INFO SdrDramModeReg; // 10001c30 -#define DRAM_MODE_REG_INFO_INIT() { \ - BST_LEN_4, \ - SENQUENTIAL, \ - 0x3, /* Mode0Cas: 3 */ \ - 0x0, /* Mode0Wr */ \ - 0, /* Mode1DllEnN */ \ - 0, /* Mode1AllLat */ \ - 0 } /* Mode2Cwl */ -extern DRAM_INFO SdrDramDev; // 10001c4c -#define DRAM_INFO_INIT() { DRAM_INFO_TYPE, DRAM_INFO_COL_ADDR_WTH,DRAM_INFO_BANK_SZ, DRAM_INFO_DQ_WTH } -extern SPIC_INIT_PARA SpicInitParaAllClk[SpicMaxMode][CPU_CLK_TYPE_NO]; // 100021ec [144=0x90] - -/* ROM + "C" standard library */ -extern struct _reent * _rtl_impure_ptr; // 10001c60 = { &impure_reent }; -extern struct _reent impure_reent; // 10001c68 = _REENT_INIT(impure_reent); - -/* ROM ? UserData? */ -extern uint32_t _rom_unc_data[9]; // 100020e8 - -/* ROM + hal_sdr_controller.c: Sdr_Rand2() */ -extern uint32_t _sdr_rnd2_c, _sdr_rnd2_z, _sdr_rnd2_y; // 100020BC, 100020B8, 100020B4 - -/* *.ld */ -extern uint8_t __rom_bss_start__, __rom_bss_end__; -extern uint8_t __image1_bss_start__, __image1_bss_end__; -extern START_FUNC __image2_entry_func__; -//extern RAM_START_FUNCTION __image2_entry_func__; -extern uint8_t __image2_validate_code__; - -#ifndef STACK_TOP -#define STACK_TOP 0x1ffffffc -#endif - -#endif /* _RTL_BIOS_DATA_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/include/rtl_lib.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/include/rtl_lib.h deleted file mode 100644 index 82a47bd..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/include/rtl_lib.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * rtl_lib.h - * - * Definitions for RTL library functions - */ - -#ifndef _RTL_LIB_H_ -#define _RTL_LIB_H_ - - -#include -#include -#include - - -extern int __rtl_errno; - - -void init_rom_libgloss_ram_map(void); - - -// -// RTL library functions for Libc::stdio -// - -extern int rtl_printf(IN const char* fmt, ...); -extern int rtl_vprintf(const char *fmt, va_list param); -extern int rtl_sprintf(char* str, const char* fmt, ...); -extern int rtl_snprintf(char* str, size_t size, const char* fmt, ...); -extern int rtl_vsnprintf(char *str, size_t size, const char *fmt, va_list param); - -// -// RTL library functions for string -// - -extern void * rtl_memchr(const void * src_void , int c , size_t length); -extern int rtl_memcmp(const void * m1 , const void * m2 , size_t n); -extern void * rtl_memcpy(void * dst0 , const void * src0 , size_t len0); -extern void * rtl_memmove( void * dst_void , const void * src_void , size_t length); -extern void * rtl_memset(void * m , int c , size_t n); -extern char * rtl_strcat(char * s1 , const char * s2); -extern char * rtl_strchr(const char *s1 , int i); -extern int rtl_strcmp(const char *s1 , const char *s2); -extern char* rtl_strcpy(char *dst0 , const char *src0); -extern size_t rtl_strlen(const char *str); -extern char * rtl_strncat(char * s1 , const char * s2 , size_t n); -extern int rtl_strncmp(const char *s1 , const char *s2 , size_t n); -extern char * rtl_strncpy(char * dst0 , const char * src0 , size_t count); -extern char * rtl_strstr(const char *searchee , const char *lookfor); -extern char * rtl_strsep(char **source_ptr , const char *delim); -extern char * rtl_strtok(char * s , const char * delim); - -// -// RTL library functions for math -// - - -extern double rtl_fabs(double); -extern float rtl_fabsf(float a); -extern float rtl_cos_f32(float a); -extern float rtl_sin_f32(float a); - -extern float rtl_fadd(float a, float b); -extern float rtl_fsub(float a, float b); -extern float rtl_fmul(float a, float b); -extern float rtl_fdiv(float a, float b); - -extern int rtl_fcmplt(float a, float b); -extern int rtl_fcmpgt(float a, float b); - - -// -// RTL eabi functions - -extern double rtl_ftod(float f); - -extern double rtl_ddiv(double a, double b); - - -// -// Macro Library Functions -// - -typedef union -{ - float value; - uint32_t word; -} ieee_float_shape_type; - -/* Get a 32 bit int from a float. */ - -#define GET_FLOAT_WORD(i,d) \ -do { \ - ieee_float_shape_type gf_u; \ - gf_u.value = (d); \ - (i) = gf_u.word; \ -} while (0) - -/* Set a float from a 32 bit int. */ - -#define SET_FLOAT_WORD(d,i) \ -do { \ - ieee_float_shape_type sf_u; \ - sf_u.word = (i); \ - (d) = sf_u.value; \ -} while (0) - -static inline -float rtl_nanf(void) -{ - float x; - - SET_FLOAT_WORD(x,0x7fc00000); - return x; -} - - -// -// Library Test functions -// - -extern int rtl_lib_test(IN uint16_t argc, IN uint8_t *argv[]); -extern int rtl_math_test(IN uint16_t argc, IN uint8_t *argv[]); -extern int rtl_string_test(IN uint16_t argc, IN uint8_t *argv[]); - - -// -// Macro functions -// - -#undef dbg_printf -#define dbg_printf(fmt, args...) \ - rtl_printf("%s():%d : " fmt "\n", __FUNCTION__, __LINE__, ##args); - - -#undef err_printf -#define err_printf(fmt, args...) \ - rtl_printf("%s():%d : " fmt "\n", __FUNCTION__, __LINE__, ##args); - - -#endif /* _RTL_LIB_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/include/rtl_rr_libc.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/include/rtl_rr_libc.h deleted file mode 100644 index e548044..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/include/rtl_rr_libc.h +++ /dev/null @@ -1,166 +0,0 @@ -/* -* RAM->ROM Calls -*/ - -#ifndef _INC_RTL_RR_LIBC_ -#define _INC_RTL_RR_LIBC_ - -//#undef malloc -#define malloc(size) pvPortMalloc(size) -//#undef free -#define free(pbuf) vPortFree(pbuf) -//extern void* pvPortReAlloc( void *pv, size_t xWantedSize ) -#define realloc(pv, xWantedSize) pvPortReAlloc(pv, xWantedSize) - -#define calloc(nelements, elementSize) calloc_freertos(nelements, elementSize) - -#define snprintf rtl_snprintf -#define sprintf rtl_sprintf -#define printf rtl_printf -#define vprintf rtl_vprintf -#define vsnprintf rtl_vsnprintf -#define vfprintf rtl_vfprintf -#define memchr rtl_memchr -#define memcmp rtl_memcmp -#define memcpy rtl_memcpy -#define memmove rtl_memmove -#define memset rtl_memset -#define strcat rtl_strcat -#define strchr rtl_strchr -#define strcmp rtl_strcmp -#define strcpy rtl_strcpy -#define strlen rtl_strlen -#define strncat rtl_strncat -#define strncmp rtl_strncmp -#define strncpy rtl_strncpy -#define strstr rtl_strstr -#define strsep rtl_strsep -#define strtok rtl_strtok - -#if 0 // __aeabi_ -#define dtoi rtl_dtoi -#define dtoui rtl_dtoui -#define i2f rtl_i2f -#define i2d rtl_i2d -#define ui2f rtl_ui2f -#define ui2d rtl_ui2d -#define itoa rtl_itoa -#define ltoa rtl_ltoa -#define utoa rtl_utoa -#define ultoa rtl_ultoa -#define ftol rtl_ftol -#define ftod rtl_ftod -#define dtof rtl_dtof -#define fadd rtl_fadd -#define fsub rtl_fsub -#define fmul rtl_fmul -#define fdiv rtl_fdiv -#define dadd rtl_dadd -#define dsub rtl_dsub -#define dmul rtl_dmul -#define ddiv rtl_ddiv -#define dcmpeq rtl_dcmpeq -#define dcmplt rtl_dcmplt -#define dcmple rtl_dcmple -#define dcmpgt rtl_dcmpgt -#define fcmplt rtl_fcmplt -#define fcmpgt rtl_fcmpgt - -#define fabsf rtl_fabsf -#define fabs rtl_fabs -#define cos_f32 rtl_cos_f32 -#define sin_f32 rtl_sin_f32 -#endif - -#if 0 -extern void *calloc_freertos(size_t nelements, size_t elementSize); -// ram_libc.c -extern void rtl_libc_init(void); -extern int rtl_snprintf(char *str, size_t size, const char *fmt, ...); -extern int rtl_sprintf(char *str, const char *fmt, ...); -extern int rtl_printf(const char *fmt, ...); -extern int rtl_vprintf(const char *fmt, void *param); -extern int rtl_vsnprintf(char *str, size_t size, const char *fmt, void *param); -extern int rtl_vfprintf(FILE *fp, const char *fmt0, va_list ap); -extern void * rtl_memchr(const void * src_void , int c , size_t length); -extern int rtl_memcmp(const void *m1, const void *m2, size_t n); -extern void * rtl_memcpy(void *dst0, const void *src0, size_t len0); -extern void * rtl_memmove(void *dst_void, const void *src_void, size_t length); -extern void * rtl_memset(void *m, int c, size_t n); -extern char * rtl_strcat(char *s1, const char *s2); -extern char * rtl_strchr(const char *s1, int i); -extern int rtl_strcmp(const char *s1, const char *s2); -extern char * rtl_strcpy(char *dst0, const char *src0); -extern size_t rtl_strlen(const char *str); -extern char * rtl_strncat(char *s1, const char *s2, size_t n); -extern int rtl_strncmp(const char *s1, const char *s2, size_t n); -extern char * rtl_strncpy(char *dst0, const char *src0, size_t count); -extern char * rtl_strstr(const char *searchee, const char *lookfor); -extern char * rtl_strsep(char **source_ptr, const char *delim); -extern char * rtl_strtok(char *s, const char *delim); - -//rtl_eabi_cast_ram.c -extern int rtl_dtoi(double d); -extern int rtl_dtoui(double d); -extern float rtl_i2f(int val); -extern int rtl_i2d(int val); -extern float rtl_ui2f(unsigned int val); -extern int rtl_ui2d(unsigned int val); -extern char *rtl_itoa(int value, char *string, int radix); -extern char *rtl_ltoa(int value, char *string, int radix); -extern char *rtl_utoa(unsigned int value, char *string, int radix); -extern char *rtl_ultoa(unsigned int value, char *string, int radix); -extern int rtl_ftol(float f); -extern int rtl_ftod(float f); -extern float rtl_dtof(double d); -extern float rtl_fadd(float a, float b); -extern float rtl_fsub(float a, float b); -extern float rtl_fmul(float a, float b); -extern float rtl_fdiv(float a, float b); -extern int rtl_dadd(double a, double b); -extern int rtl_dsub(double a, double b); -extern int rtl_dmul(double a, double b); -extern int rtl_ddiv(double a, double b); -extern int rtl_dcmpeq(double a, double b); -extern int rtl_dcmplt(double a, double b); -extern int rtl_dcmple(double a, double b); -extern int rtl_dcmpgt(double a, double b); -extern int rtl_fcmplt(float a, float b); -extern int rtl_fcmpgt(float a, float b); - -// rtl_math_ram.c -extern float rtl_fabsf(float a); -extern int rtl_fabs(double a); -extern float rtl_cos_f32(float a); -extern float rtl_sin_f32(float a); - -// ram_pvvx_libc.c -extern int snprintf(char *str, size_t size, const char *fmt, ...); -extern int sprintf(char *str, const char *fmt, ...); -extern int printf(const char *fmt, ...); -extern int vprintf(const char * fmt, __VALIST param); -extern int vsnprintf(char *str, size_t size, const char *fmt, __VALIST param); -extern int vfprintf(FILE *fp, const char *fmt0, va_list ap); -extern void * memchr(const void * src_void , int c , size_t length); -extern int memcmp(const void *m1, const void *m2, size_t n); -extern void * memcpy(void *dst0, const void *src0, size_t len0); -extern void * memmove(void *dst_void, const void *src_void, size_t length); -extern void * memset(void *m, int c, size_t n); -extern char * strcat(char *s1, const char *s2); -extern char * strchr(const char *s1, int i); -extern int strcmp(const char *s1, const char *s2); -extern char * strcpy(char *dst0, const char *src0); -extern size_t strlen(const char *str); -extern char * strncat(char *s1, const char *s2, size_t n); -extern int strncmp(const char *s1, const char *s2, size_t n); -extern char * strncpy(char *dst0, const char *src0, size_t count); -extern char * strstr(const char *searchee, const char *lookfor); -extern char * strsep(char **source_ptr, const char *delim); -extern char * strtok(char *s, const char *delim); -extern int sscanf(const char *buf, const char *fmt, ...); -extern char toupper(char ch); -extern int _stricmp (const char *s1, const char *s2); -extern unsigned long long __aeabi_llsr(unsigned long long val, unsigned int shift); -#endif - -#endif // _INC_RTL_RR_LIBC_ \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/c_stdio.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/c_stdio.c deleted file mode 100644 index de6857e..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/c_stdio.c +++ /dev/null @@ -1,1098 +0,0 @@ - -#include "platform_autoconf.h" -#if 1 //def ENAC_FLOAT -#include -#include -#include "libc/rom/string/rom_libc_string.h" - -#define memchr __rtl_memchr_v1_00 -#define memcmp __rtl_memcmp_v1_00 -#define memcpy __rtl_memcpy_v1_00 -#define memmove __rtl_memmove_v1_00 -#define memset __rtl_memset_v1_00 -#define strcat __rtl_strcat_v1_00 -#define strchr __rtl_strchr_v1_00 -#define strcmp __rtl_strcmp_v1_00 -#define strcpy __rtl_strcpy_v1_00 -#define strlen __rtl_strlen_v1_00 -#define strncat __rtl_strncat_v1_00 -#define strncmp __rtl_strncmp_v1_00 -#define strncpy __rtl_strncpy_v1_00 -#define strstr __rtl_strstr_v1_00 -#define strsep __rtl_strsep_v1_00 -#define strtok __rtl_strtok_v1_00 - -extern int isdigit (int c); - -static int toupper(int ch) { - return ((ch >= 'a' && ch <= 'z') ? ch - 'a' + 'A' : ch); -}; - -#define NEWFP 1 -#define ENDIAN_LITTLE 1234 -#define ENDIAN_BIG 4321 -#define ENDIAN_PDP 3412 -#define ENDIAN ENDIAN_LITTLE - -/* $Id: strichr.c,v 1.1.1.1 2006/08/23 17:03:06 pefo Exp $ */ - -/* - * Copyright (c) 2000-2002 Opsycon AB (www.opsycon.se) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Opsycon AB. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -//#include - -char * -strichr(char *p, int c) -{ - char *t; - - if (p != NULL) { - for(t = p; *t; t++); - for (; t >= p; t--) { - *(t + 1) = *t; - } - *p = c; - } - return (p); -} - -/* $Id: str_fmt.c,v 1.1.1.1 2006/08/23 17:03:06 pefo Exp $ */ - -/* - * Copyright (c) 2000-2002 Opsycon AB (www.opsycon.se) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Opsycon AB. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -//#include - -#define FMT_RJUST 0 -#define FMT_LJUST 1 -#define FMT_RJUST0 2 -#define FMT_CENTER 3 - -/* - * Format string by inserting blanks. - */ - -void -str_fmt(char *p, int size, int fmt) -{ - int n, m, len; - - len = strlen (p); - switch (fmt) { - case FMT_RJUST: - for (n = size - len; n > 0; n--) - strichr (p, ' '); - break; - case FMT_LJUST: - for (m = size - len; m > 0; m--) - strcat (p, " "); - break; - case FMT_RJUST0: - for (n = size - len; n > 0; n--) - strichr (p, '0'); - break; - case FMT_CENTER: - m = (size - len) / 2; - n = size - (len + m); - for (; m > 0; m--) - strcat (p, " "); - for (; n > 0; n--) - strichr (p, ' '); - break; - } -} - -/* $Id: strtoupp.c,v 1.1.1.1 2006/08/23 17:03:06 pefo Exp $ */ - -/* - * Copyright (c) 2000-2002 Opsycon AB (www.opsycon.se) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Opsycon AB. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -//#include -//#include -/* - * strtoupper() - */ -void -strtoupper(char *p) -{ - if(!p) - return; - for (; *p; p++) - *p = toupper (*p); -} - -/* $Id: atob.c,v 1.1.1.1 2006/08/23 17:03:06 pefo Exp $ */ - -/* - * Copyright (c) 2000-2002 Opsycon AB (www.opsycon.se) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Opsycon AB. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -//#include -//#include -//#include - -//typedef int int32_t; -typedef unsigned int u_int32_t; -typedef unsigned int u_int; -typedef unsigned long u_long; -typedef int32_t register_t; -typedef long long quad_t; -typedef unsigned long long u_quad_t; -typedef double rtype; - -#ifndef __P -#define __P(args) args -#endif - -static char * _getbase __P((char *, int *)); -static int _atob __P((unsigned long long *, char *p, int)); - -static char * -_getbase(char *p, int *basep) -{ - if (p[0] == '0') { - switch (p[1]) { - case 'x': - *basep = 16; - break; - case 't': case 'n': - *basep = 10; - break; - case 'o': - *basep = 8; - break; - default: - *basep = 10; - return (p); - } - return (p + 2); - } - *basep = 10; - return (p); -} - - -/* - * _atob(vp,p,base) - */ -static int -_atob (u_quad_t *vp, char *p, int base) -{ - u_quad_t value, v1, v2; - char *q, tmp[20]; - int digit; - - if (p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) { - base = 16; - p += 2; - } - - if (base == 16 && (q = strchr (p, '.')) != 0) { - if (q - p > sizeof(tmp) - 1) - return (0); - - strncpy (tmp, p, q - p); - tmp[q - p] = '\0'; - if (!_atob (&v1, tmp, 16)) - return (0); - - q++; - if (strchr (q, '.')) - return (0); - - if (!_atob (&v2, q, 16)) - return (0); - *vp = (v1 << 16) + v2; - return (1); - } - - value = *vp = 0; - for (; *p; p++) { - if (*p >= '0' && *p <= '9') - digit = *p - '0'; - else if (*p >= 'a' && *p <= 'f') - digit = *p - 'a' + 10; - else if (*p >= 'A' && *p <= 'F') - digit = *p - 'A' + 10; - else - return (0); - - if (digit >= base) - return (0); - value *= base; - value += digit; - } - *vp = value; - return (1); -} - -/* - * atob(vp,p,base) - * converts p to binary result in vp, rtn 1 on success - */ -int -atob(u_int32_t *vp, char *p, int base) -{ - u_quad_t v; - - if (base == 0) - p = _getbase (p, &base); - if (_atob (&v, p, base)) { - *vp = v; - return (1); - } - return (0); -} - - -/* - * llatob(vp,p,base) - * converts p to binary result in vp, rtn 1 on success - */ -int -llatob(u_quad_t *vp, char *p, int base) -{ - if (base == 0) - p = _getbase (p, &base); - return _atob(vp, p, base); -} - - -/* - * char *btoa(dst,value,base) - * converts value to ascii, result in dst - */ -char * -btoa(char *dst, u_int value, int base) -{ - char buf[34], digit = 0; - int i, j, rem, neg; - - if (value == 0) { - dst[0] = '0'; - dst[1] = 0; - return (dst); - } - - neg = 0; - if (base == -10) { - base = 10; - if (value & (1L << 31)) { - value = (~value) + 1; - neg = 1; - } - } - - for (i = 0; value != 0; i++) { - rem = value % base; - value /= base; - if (rem >= 0 && rem <= 9) - digit = rem + '0'; - else if (rem >= 10 && rem <= 36) - digit = (rem - 10) + 'a'; - buf[i] = digit; - } - - buf[i] = 0; - if (neg) - strcat (buf, "-"); - - /* reverse the string */ - for (i = 0, j = strlen (buf) - 1; j >= 0; i++, j--) - dst[i] = buf[j]; - dst[i] = 0; - return (dst); -} - -/* - * char *btoa(dst,value,base) - * converts value to ascii, result in dst - */ -char * -llbtoa(char *dst, u_quad_t value, int base) -{ - char buf[66], digit = 0; - int i, j, rem, neg; - - if (value == 0) { - dst[0] = '0'; - dst[1] = 0; - return (dst); - } - - neg = 0; - if (base == -10) { - base = 10; - if (value & (1LL << 63)) { - value = (~value) + 1; - neg = 1; - } - } - - for (i = 0; value != 0; i++) { - rem = value % base; - value /= base; - if (rem >= 0 && rem <= 9) - digit = rem + '0'; - else if (rem >= 10 && rem <= 36) - digit = (rem - 10) + 'a'; - buf[i] = digit; - } - - buf[i] = 0; - if (neg) - strcat (buf, "-"); - - /* reverse the string */ - for (i = 0, j = strlen (buf) - 1; j >= 0; i++, j--) - dst[i] = buf[j]; - dst[i] = 0; - return (dst); -} - -/* - * gethex(vp,p,n) - * convert n hex digits from p to binary, result in vp, - * rtn 1 on success - */ -int -gethex(int32_t *vp, char *p, int n) -{ - u_long v; - int digit; - - for (v = 0; n > 0; n--) { - if (*p == 0) - return (0); - if (*p >= '0' && *p <= '9') - digit = *p - '0'; - else if (*p >= 'a' && *p <= 'f') - digit = *p - 'a' + 10; - else if (*p >= 'A' && *p <= 'F') - digit = *p - 'A' + 10; - else - return (0); - - v <<= 4; - v |= digit; - p++; - } - *vp = v; - return (1); -} - -/* $Id: vsprintf.c,v 1.1.1.1 2006/08/23 17:03:06 pefo Exp $ */ - -/* - * Copyright (c) 2000-2002 Opsycon AB (www.opsycon.se) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Opsycon AB. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -//#include -//#include -//#include -//#include -//#include - -void dtoa (char *dbuf, rtype arg, int fmtch, int width, int prec); - -/* - * int vsprintf(d,s,ap) - */ -int -c_vsprintf (char *d, const char *s, va_list ap) -{ - const char *t; - char *p, *dst, tmp[40]; - unsigned int n; - int fmt, trunc, haddot, width, base = 0, longlong; - double dbl; -#ifndef NEWFP - EP ex; -#endif - - dst = d; - for (; *s;) { - if (*s == '%') { - s++; - fmt = FMT_RJUST; - width = trunc = haddot = longlong = 0; - for (; *s; s++) { - if (strchr("bcdefgilopPrRsuxX%", *s)) - break; - else if (*s == '-') - fmt = FMT_LJUST; - else if (*s == '0') - fmt = FMT_RJUST0; - else if (*s == '~') - fmt = FMT_CENTER; - else if (*s == '*') { - if (haddot) - trunc = va_arg(ap, int); - else - width = va_arg(ap, int); - } else if (*s >= '1' && *s <= '9') { - for (t = s; isdigit(*s); s++); - strncpy(tmp, t, s - t); - tmp[s - t] = '\0'; - atob(&n, tmp, 10); - if (haddot) - trunc = n; - else - width = n; - s--; - } else if (*s == '.') - haddot = 1; - } - if (*s == '%') { - *d++ = '%'; - *d = 0; - } else if (*s == 's') { - p = va_arg(ap, char *); - - if (p) - strcpy(d, p); - else - strcpy(d, "(null)"); - } else if (*s == 'c') { - n = va_arg (ap, int); - *d = n; - d[1] = 0; - } else { - if (*s == 'l') { - if (*++s == 'l') { - longlong = 1; - ++s; - } - } - if (strchr("bdiopPrRxXu", *s)) { - if (*s == 'd' || *s == 'i') - base = -10; - else if (*s == 'u') - base = 10; - else if (*s == 'x' || *s == 'X') - base = 16; - else if(*s == 'p' || *s == 'P') { - base = 16; - if (*s == 'p') { - *d++ = '0'; - *d++ = 'x'; - } - fmt = FMT_RJUST0; - if (sizeof(long) > 4) { - width = 16; - longlong = 1; - } else { - width = 8; - } - } - else if(*s == 'r' || *s == 'R') { - base = 16; - if (*s == 'r') { - *d++ = '0'; - *d++ = 'x'; - } - fmt = FMT_RJUST0; - if (sizeof(register_t) > 4) { - width = 16; - longlong = 1; - } else { - width = 8; - } - } - else if (*s == 'o') - base = 8; - else if (*s == 'b') - base = 2; - if (longlong) - llbtoa(d, va_arg (ap, quad_t), - base); - else - btoa(d, va_arg (ap, int), base); - - if (*s == 'X') - strtoupper(d); - } - else if (strchr ("eEfgG", *s)) { - dbl = va_arg(ap, double); - dtoa(d, dbl, *s, width, trunc); - trunc = 0; - } - } - if (trunc) - d[trunc] = 0; - if (width) - str_fmt (d, width, fmt); - for (; *d; d++); - s++; - } else - *d++ = *s++; - } - *d = 0; - return (d - dst); -} - -/* - * Floating point output, cvt() onward lifted from BSD sources: - * - * Copyright (c) 1990 The Regents of the University of California. - * All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Chris Torek. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - - -#define MAX_FCONVERSION 512 /* largest possible real conversion */ -#define MAX_EXPT 5 /* largest possible exponent field */ -#define MAX_FRACT 39 /* largest possible fraction field */ - -#define TESTFLAG(x) 0 - - -typedef double rtype; - -extern double modf(double, double *); -#define to_char(n) ((n) + '0') -#define to_digit(c) ((c) - '0') -#define _isNan(arg) ((arg) != (arg)) - -static int cvt (rtype arg, int prec, char *signp, int fmtch, - char *startp, char *endp); -static char *c_round (double fract, int *exp, char *start, char *end, - char ch, char *signp); -static char *exponent(char *p, int exp, int fmtch); - - -/* - * _finite arg not Infinity or Nan - */ -static int _finite(rtype d) -{ -#if ENDIAN == ENDIAN_LITTLE - struct IEEEdp { - unsigned manl:32; - unsigned manh:20; - unsigned exp:11; - unsigned sign:1; - } *ip; -#else - struct IEEEdp { - unsigned sign:1; - unsigned exp:11; - unsigned manh:20; - unsigned manl:32; - } *ip; -#endif - - ip = (struct IEEEdp *)&d; - return (ip->exp != 0x7ff); -} - - -void dtoa (char *dbuf, rtype arg, int fmtch, int width, int prec) -{ - char buf[MAX_FCONVERSION+1], *cp; - char sign; - int size; - - if( !_finite(arg) ) { - if( _isNan(arg) ) - strcpy (dbuf, "NaN"); - else if( arg < 0) - strcpy (dbuf, "-Infinity"); - else - strcpy (dbuf, "Infinity"); - return; - } - - if (prec == 0) - prec = 6; - else if (prec > MAX_FRACT) - prec = MAX_FRACT; - - /* leave room for sign at start of buffer */ - cp = buf + 1; - - /* - * cvt may have to round up before the "start" of - * its buffer, i.e. ``intf("%.2f", (double)9.999);''; - * if the first character is still NUL, it did. - * softsign avoids negative 0 if _double < 0 but - * no significant digits will be shown. - */ - *cp = '\0'; - size = cvt (arg, prec, &sign, fmtch, cp, buf + sizeof(buf)); - if (*cp == '\0') - cp++; - - if (sign) - *--cp = sign, size++; - - cp[size] = 0; - memcpy (dbuf, cp, size + 1); -} - - -static int -cvt(rtype number, int prec, char *signp, int fmtch, char *startp, char *endp) -{ - register char *p, *t; - register double fract; - double integer, tmp; - int dotrim, expcnt, gformat; - - dotrim = expcnt = gformat = 0; - if (number < 0) { - number = -number; - *signp = '-'; - } else - *signp = 0; - - fract = modf(number, &integer); - - /* get an extra slot for rounding. */ - t = ++startp; - - /* - * get integer portion of number; put into the end of the buffer; the - * .01 is added for modf(356.0 / 10, &integer) returning .59999999... - */ - for (p = endp - 1; integer; ++expcnt) { - tmp = modf(integer / 10, &integer); - *p-- = to_char((int)((tmp + .01) * 10)); - } - switch (fmtch) { - case 'f': - /* reverse integer into beginning of buffer */ - if (expcnt) - for (; ++p < endp; *t++ = *p); - else - *t++ = '0'; - /* - * if precision required or alternate flag set, add in a - * decimal point. - */ - if (prec || TESTFLAG(ALTERNATE_FORM)) - *t++ = '.'; - /* if requires more precision and some fraction left */ - if (fract) { - if (prec) - do { - fract = modf(fract * 10, &tmp); - *t++ = to_char((int)tmp); - } while (--prec && fract); - if (fract) - startp = c_round(fract, (int *)NULL, startp, - t - 1, (char)0, signp); - } - for (; prec--; *t++ = '0'); - break; - case 'e': - case 'E': -eformat: if (expcnt) { - *t++ = *++p; - if (prec || TESTFLAG(ALTERNATE_FORM)) - *t++ = '.'; - /* if requires more precision and some integer left */ - for (; prec && ++p < endp; --prec) - *t++ = *p; - /* - * if done precision and more of the integer component, - * round using it; adjust fract so we don't re-round - * later. - */ - if (!prec && ++p < endp) { - fract = 0; - startp = c_round((double)0, &expcnt, startp, - t - 1, *p, signp); - } - /* adjust expcnt for digit in front of decimal */ - --expcnt; - } - /* until first fractional digit, decrement exponent */ - else if (fract) { - /* adjust expcnt for digit in front of decimal */ - for (expcnt = -1;; --expcnt) { - fract = modf(fract * 10, &tmp); - if (tmp) - break; - } - *t++ = to_char((int)tmp); - if (prec || TESTFLAG(ALTERNATE_FORM)) - *t++ = '.'; - } - else { - *t++ = '0'; - if (prec || TESTFLAG(ALTERNATE_FORM)) - *t++ = '.'; - } - /* if requires more precision and some fraction left */ - if (fract) { - if (prec) - do { - fract = modf(fract * 10, &tmp); - *t++ = to_char((int)tmp); - } while (--prec && fract); - if (fract) - startp = c_round(fract, &expcnt, startp, - t - 1, (char)0, signp); - } - /* if requires more precision */ - for (; prec--; *t++ = '0'); - - /* unless alternate flag, trim any g/G format trailing 0's */ - if (gformat && !TESTFLAG(ALTERNATE_FORM)) { - while (t > startp && *--t == '0'); - if (*t == '.') - --t; - ++t; - } - t = exponent(t, expcnt, fmtch); - break; - case 'g': - case 'G': - /* a precision of 0 is treated as a precision of 1. */ - if (!prec) - ++prec; - /* - * ``The style used depends on the value converted; style e - * will be used only if the exponent resulting from the - * conversion is less than -4 or greater than the precision.'' - * -- ANSI X3J11 - */ - if (expcnt > prec || (!expcnt && fract && fract < .0001)) { - /* - * g/G format counts "significant digits, not digits of - * precision; for the e/E format, this just causes an - * off-by-one problem, i.e. g/G considers the digit - * before the decimal point significant and e/E doesn't - * count it as precision. - */ - --prec; - fmtch -= 2; /* G->E, g->e */ - gformat = 1; - goto eformat; - } - /* - * reverse integer into beginning of buffer, - * note, decrement precision - */ - if (expcnt) - for (; ++p < endp; *t++ = *p, --prec); - else - *t++ = '0'; - /* - * if precision required or alternate flag set, add in a - * decimal point. If no digits yet, add in leading 0. - */ - if (prec || TESTFLAG(ALTERNATE_FORM)) { - dotrim = 1; - *t++ = '.'; - } - else - dotrim = 0; - /* if requires more precision and some fraction left */ - if (fract) { - if (prec) { - do { - fract = modf(fract * 10, &tmp); - *t++ = to_char((int)tmp); - } while(!tmp && !expcnt); - while (--prec && fract) { - fract = modf(fract * 10, &tmp); - *t++ = to_char((int)tmp); - } - } - if (fract) - startp = c_round(fract, (int *)NULL, startp, - t - 1, (char)0, signp); - } - /* alternate format, adds 0's for precision, else trim 0's */ - if (TESTFLAG(ALTERNATE_FORM)) - for (; prec--; *t++ = '0'); - else if (dotrim) { - while (t > startp && *--t == '0'); - if (*t != '.') - ++t; - } - } - return (t - startp); -} - - -static char * -c_round(double fract, int *exp, char *start, char *end, char ch, char *signp) -{ - double tmp; - - if (fract) - (void)modf(fract * 10, &tmp); - else - tmp = to_digit(ch); - if (tmp > 4) - for (;; --end) { - if (*end == '.') - --end; - if (++*end <= '9') - break; - *end = '0'; - if (end == start) { - if (exp) { /* e/E; increment exponent */ - *end = '1'; - ++*exp; - } - else { /* f; add extra digit */ - *--end = '1'; - --start; - } - break; - } - } - /* ``"%.3f", (double)-0.0004'' gives you a negative 0. */ - else if (*signp == '-') - for (;; --end) { - if (*end == '.') - --end; - if (*end != '0') - break; - if (end == start) - *signp = 0; - } - return (start); -} - -static char * -exponent(char *p, int exp, int fmtch) -{ - char *t; - char expbuf[MAX_FCONVERSION]; - - *p++ = fmtch; - if (exp < 0) { - exp = -exp; - *p++ = '-'; - } - else - *p++ = '+'; - t = expbuf + MAX_FCONVERSION; - if (exp > 9) { - do { - *--t = to_char(exp % 10); - } while ((exp /= 10) > 9); - *--t = to_char(exp); - for (; t < expbuf + MAX_FCONVERSION; *p++ = *t++); - } - else { - *p++ = '0'; - *p++ = to_char(exp); - } - return (p); -} - -int c_sprintf(char *str, const char *fmt, ...) -{ - va_list arg; - va_start(arg, fmt); - int ret = c_vsprintf(str, fmt, arg); - va_end(arg); - return ret; -} - -extern char AvaWds[]; -extern int ram_libgloss_write(int file, const char *ptr, int len); - -int c_printf(const char *fmt, ...) -{ - va_list arg; - va_start(arg, fmt); - int ret = c_vsprintf((char *)&AvaWds, fmt, arg); - va_end(arg); - return ram_libgloss_write(0, (char *)&AvaWds, ret); -} - -#endif // ENAC_FLOAT - -extern _LONG_CALL_ROM_ void HalSerialPutcRtl8195a(char c); - -int puts (const char *s) -{ - while(*s) { - HalSerialPutcRtl8195a(*s++); - } - return 0; // -1 -> EOF -} - -void vTaskDelete(void *); - -void abort(void) -{ - - puts("Abort!\n"); - vTaskDelete(0); - while(1); -} - - - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libc.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libc.c deleted file mode 100644 index ba95083..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libc.c +++ /dev/null @@ -1,291 +0,0 @@ -/* - * ram_libc.o - * pvvx 2016 - */ - -#include "rtl_bios_data.h" -#include "va_list.h" - -#define CHECK_LIBC_INIT 0 - -//------------------------------------------------------------------------- -// Function declarations -#if 0 -void rtl_libc_init(void); -int rtl_snprintf(char *str, size_t size, const char *fmt, ...); -int rtl_sprintf(char *str, const char *fmt, ...); -int rtl_printf(const char *fmt, ...); -int rtl_vprintf(const char *fmt, void *param); -int rtl_vsnprintf(char *str, size_t size, const char *fmt, void *param); -int rtl_vfprintf(FILE *fp, const char *fmt0, va_list ap); -void * rtl_memchr(const void * src_void , int c , size_t length); -int rtl_memcmp(const void *m1, const void *m2, size_t n); -void * rtl_memcpy(void *dst0, const void *src0, size_t len0); -void * rtl_memmove(void *dst_void, const void *src_void, size_t length); -void * rtl_memset(void *m, int c, size_t n); -char * rtl_strcat(char *s1, const char *s2); -char * rtl_strchr(const char *s1, int i); -int rtl_strcmp(const char *s1, const char *s2); -char * rtl_strcpy(char *dst0, const char *src0); -size_t rtl_strlen(const char *str); -char * rtl_strncat(char *s1, const char *s2, size_t n); -int rtl_strncmp(const char *s1, const char *s2, size_t n); -char * rtl_strncpy(char *dst0, const char *src0, size_t count); -char * rtl_strstr(const char *searchee, const char *lookfor); -char * rtl_strsep(char **source_ptr, const char *delim); -char * rtl_strtok(char *s, const char *delim); -#endif -// Extern Calls: -// extern int init_rom_libgloss_ram_map(_DWORD) -// extern int _rom_mallocr_init_v1_00(void) -// extern int __rtl_vfprintf_r_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_fflush_r_v1_00(_DWORD, _DWORD) -// extern int __rtl_memchr_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_memcmp_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_memcpy_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_memmove_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_memset_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_strcat_v1_00(_DWORD, _DWORD) -// extern int __rtl_strchr_v1_00(_DWORD, _DWORD) -// extern int __rtl_strcmp_v1_00(_DWORD, _DWORD) -// extern int __rtl_strcpy_v1_00(_DWORD, _DWORD) -// extern int __rtl_strlen_v1_00(_DWORD) -// extern int __rtl_strncat_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_strncmp_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_strncpy_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_strstr_v1_00(_DWORD, _DWORD) -// extern int __rtl_strsep_v1_00(_DWORD, _DWORD) -// extern int __rtl_strtok_v1_00(_DWORD, _DWORD) - -//------------------------------------------------------------------------- -// Data declarations - -extern struct _reent * _rtl_impure_ptr; - -char libc_has_init; -char print_off; -// extern rtl_impure_ptr -// extern impure_ptr - -//------------------------------------------------------------------------- -// Function - -//----- rtl_libc_init() -void rtl_libc_init(void) { - __rom_mallocr_init_v1_00(); - init_rom_libgloss_ram_map(); - libc_has_init = 1; -} - -//----- rtl_snprintf() -int rtl_snprintf(char *str, size_t size, const char *fmt, ...) { - va_list args; - va_start (args, fmt); - int result; - int w; - FILE f; -#if CHECK_LIBC_INIT - if (!libc_has_init) { - rtl_libc_init(); - } -#endif - if (size >= 0) { - f._flags = 520; - if (size) - w = size - 1; - else - w = 0; - f._w = w; /* write space left for putc() */ - f._bf._size = w; - f._file = -1; /* fileno, if Unix descriptor, else -1 */ - f._p = str; /* current position in (some) buffer */ - f._bf._base = str; - result = __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, &f, fmt, args); - if (result + 1 < 0) - _rtl_impure_ptr->_errno = 139; - if (size) - *f._p = 0; - } else { - _rtl_impure_ptr->_errno = 139; - result = -1; - } - return result; -} - -//----- rtl_sprintf() -int rtl_sprintf(char *str, const char *fmt, ...) { - FILE f; -#if CHECK_LIBC_INIT - if (!libc_has_init) { - rtl_libc_init(); - } -#endif - f._flags = 520; - f._w = 0x7FFFFFFF; - f._bf._size = 0x7FFFFFFF; - f._file = -1; - f._p = str; - f._bf._base = str; - va_list args; - va_start (args, fmt); - int result = __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, &f, fmt, args); - *f._p = 0; -// va_end (args); - return result; -} - -//----- rtl_printf() -int rtl_printf(const char *fmt, ...) { -#if CHECK_LIBC_INIT - if (!libc_has_init) { - rtl_libc_init(); - } -#endif - if(!print_off) { - va_list args; - va_start (args, fmt); - int result = __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, - _rtl_impure_ptr->_stdout, fmt, args); - __rtl_fflush_r_v1_00(_rtl_impure_ptr, _rtl_impure_ptr->_stdout); - // va_end (args); - return result; - } - else return 0; -} - -//----- rtl_vprintf() -int rtl_vprintf(const char *fmt, va_list param) { -#if CHECK_LIBC_INIT - if (!libc_has_init) { - rtl_libc_init(); - } -#endif - int result = __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, - _rtl_impure_ptr->_stdout, fmt, param); - __rtl_fflush_r_v1_00(_rtl_impure_ptr, _rtl_impure_ptr->_stdout); - return result; -} - -//----- rtl_vsnprintf() -int rtl_vsnprintf(char *str, size_t size, const char *fmt, va_list param) { - int result; - int w; - FILE f; -#if CHECK_LIBC_INIT - if (!libc_has_init) { - rtl_libc_init(); - } -#endif - if (size >= 0) { - if (size) - w = size - 1; - else - w = 0; - f._flags = 520; - f._p = str; - f._bf._base = str; - f._w = w; - f._bf._size = w; - f._file = -1; - result = __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, &f, fmt, param); - if (result + 1 < 0) - _rtl_impure_ptr->_errno = 139; - if (size) - *f._p = 0; - } else { - _rtl_impure_ptr->_errno = 139; - result = -1; - } - return result; -} - -//----- rtl_vfprintf() -int rtl_vfprintf(FILE *fp, const char *fmt0, va_list ap) { -#if CHECK_LIBC_INIT - if (!libc_has_init) { - rtl_libc_init(); - } -#endif - return __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, fp, fmt0, ap); -} - -//----- rtl_memchr() -void * rtl_memchr(const void * src_void , int c , size_t length) { - return __rtl_memchr_v1_00(src_void, c, length); -} - -//----- rtl_memcmp() -int rtl_memcmp(const void *m1, const void *m2, size_t n) { - return __rtl_memcmp_v1_00(m1, m2, n); -} - -//----- rtl_memcpy() -void * rtl_memcpy(void *dst0, const void *src0, size_t len0) { - return __rtl_memcpy_v1_00(dst0, src0, len0); -} - -//----- rtl_memmove() -void * rtl_memmove(void *dst_void, const void *src_void, size_t length) { - return __rtl_memmove_v1_00(dst_void, src_void, length); -} - -//----- rtl_memset() -void * rtl_memset(void *m, int c, size_t n) { - return __rtl_memset_v1_00(m, c, n); -} - -//----- rtl_strcat() -char * rtl_strcat(char *s1, const char *s2) { - return (char *) __rtl_strcat_v1_00(s1, s2); -} - -//----- rtl_strchr() -char * rtl_strchr(const char *s1, int i) { - return (char *) __rtl_strchr_v1_00(s1, i); -} - -//----- rtl_strcmp() -int rtl_strcmp(const char *s1, const char *s2) { - return __rtl_strcmp_v1_00(s1, s2); -} - -//----- rtl_strcpy() -char * rtl_strcpy(char *dst0, const char *src0) { - return (char *) __rtl_strcpy_v1_00(dst0, src0); -} - -//----- rtl_strlen() -size_t rtl_strlen(const char *str) { - return __rtl_strlen_v1_00(str); -} - -//----- rtl_strncat() -char * rtl_strncat(char *s1, const char *s2, size_t n) { - return (char *) __rtl_strncat_v1_00(s1, s2, n); -} - -//----- rtl_strncmp() -int rtl_strncmp(const char *s1, const char *s2, size_t n) { - return __rtl_strncmp_v1_00(s1, s2, n); -} - -//----- rtl_strncpy() -char * rtl_strncpy(char *dst0, const char *src0, size_t count) { - return (char *) __rtl_strncpy_v1_00(dst0, src0, count); -} - -//----- rtl_strstr() -char * rtl_strstr(const char *searchee, const char *lookfor) { - return (char *) __rtl_strstr_v1_00(searchee, lookfor); -} - -//----- rtl_strsep() -char * rtl_strsep(char **source_ptr, const char *delim) { - return (char *) __rtl_strsep_v1_00(source_ptr, delim); -} - -//----- rtl_strtok() -char * rtl_strtok(char *s, const char *delim) { - return (char *) __rtl_strtok_v1_00(s, delim); -} - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libgloss_retarget.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libgloss_retarget.c deleted file mode 100644 index 40d3175..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libgloss_retarget.c +++ /dev/null @@ -1,127 +0,0 @@ -/* - * ram_libgloss_retarget.o - * pvvx 2016 - */ - -#include "rtl_bios_data.h" - -//------------------------------------------------------------------------- -// Function declarations - -int ram_libgloss_close(int fildes); -int ram_libgloss_fstat(int fildes, struct stat *st); -int ram_libgloss_isatty(int file); -int ram_libgloss_lseek(int file, int ptr, int dir); -int ram_libgloss_read(int file, char *ptr, int len); -char *ram_libgloss_sbrk(int incr); -int ram_libgloss_write(int file, const char *ptr, int len); -int ram_libgloss_open(char *file, int flags, int mode); -void init_rom_libgloss_ram_map(void); -// Extern Calls: -//extern int HalSerialPutcRtl8195a(); -//extern int rtl_strcmp(); -extern char end; - -//------------------------------------------------------------------------- -// Data declarations -static char *rheap_end; -// extern __rtl_errno; -// extern end; -// extern rom_libgloss_ram_map; - -//----- ram_libgloss_close() -int ram_libgloss_close(int fildes) { - __rtl_errno = 88; - return -1; -} - -//----- ram_libgloss_fstat() -int ram_libgloss_fstat(int fildes, struct stat *st) { - int result; - - if ((unsigned int) fildes > 2) { - __rtl_errno = 9; - result = -1; - } else { - st->st_mode = 0x2000; - result = 0; - } - return result; -} - -//----- ram_libgloss_isatty() -int ram_libgloss_isatty(int file) { - int result; - - if (file <= 2) - result = 1; - else - result = -1; - return result; -} - -//----- ram_libgloss_lseek() -int ram_libgloss_lseek(int file, int ptr, int dir) { - __rtl_errno = 88; - return -1; -} - -//----- ram_libgloss_read() -int ram_libgloss_read(int file, char *ptr, int len) { - __rtl_errno = 88; - return -1; -} - -//----- ram_libgloss_sbrk() -char *ram_libgloss_sbrk(int incr) { - char *prev_heap_end; - - if (!rheap_end) - rheap_end = (char *) &end; - prev_heap_end = rheap_end; - rheap_end += incr; -#if CONFIG_DEBUG_LOG > 4 - DBG_8195A("ROM_heap = %p[%d], end = %p\n", prev_heap_end, incr, rheap_end); -#endif - return prev_heap_end; -} - -//----- ram_libgloss_write() -int ram_libgloss_write(int file, const char *ptr, int len) { - int i; - for (i = 0; i < len; ++i) - HalSerialPutcRtl8195a(ptr[i]); - return len; -} - -//----- ram_libgloss_open() -int ram_libgloss_open(char *file, int flags, int mode) { -// file->_p - int result = rtl_strcmp(file, "/stdin"); - - if (result) { - if (rtl_strcmp(file, "/stdout")) { - if (rtl_strcmp(file, "/stderr")) - result = -1; - else - result = 2; - } else { - result = 1; - } - } else - result = 0; - return result; -} - -//----- init_rom_libgloss_ram_map() -void init_rom_libgloss_ram_map(void) { - rom_libgloss_ram_map.libgloss_close = ram_libgloss_close; - rom_libgloss_ram_map.libgloss_fstat = ram_libgloss_fstat; - rom_libgloss_ram_map.libgloss_isatty = ram_libgloss_isatty; - rom_libgloss_ram_map.libgloss_lseek = ram_libgloss_lseek; - rom_libgloss_ram_map.libgloss_open = ram_libgloss_open; - rom_libgloss_ram_map.libgloss_read = ram_libgloss_read; - rom_libgloss_ram_map.libgloss_write = ram_libgloss_write; - rom_libgloss_ram_map.libgloss_sbrk = (void*)ram_libgloss_sbrk; -} - diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_pvvx_libc.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_pvvx_libc.c deleted file mode 100644 index aac0aac..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_pvvx_libc.c +++ /dev/null @@ -1,564 +0,0 @@ -/* - * RTL871x1Ax: RAM libc - * Created on: 22/02/2017 - * Author: pvvx - */ - -#include "rtl_bios_data.h" -#include "va_list.h" - -#define CHECK_LIBC_INIT 0 -//------------------------------------------------------------------------- -// Function declarations - -//void libc_init(); -#if 0 -int snprintf(char *str, size_t size, const char *fmt, ...); -int sprintf(char *str, const char *fmt, ...); -int printf(const char *fmt, ...); -int vprintf(const char * fmt, __VALIST param); -int vsnprintf(char *str, size_t size, const char *fmt, __VALIST param); -int vfprintf(FILE *fp, const char *fmt0, va_list ap); -void * memchr(const void * src_void , int c , size_t length); -int memcmp(const void *m1, const void *m2, size_t n); -void * memcpy(void *dst0, const void *src0, size_t len0); -void * memmove(void *dst_void, const void *src_void, size_t length); -void * memset(void *m, int c, size_t n); -char * strcat(char *s1, const char *s2); -char * strchr(const char *s1, int i); -int strcmp(const char *s1, const char *s2); -char * strcpy(char *dst0, const char *src0); -size_t strlen(const char *str); -char * strncat(char *s1, const char *s2, size_t n); -int strncmp(const char *s1, const char *s2, size_t n); -char * strncpy(char *dst0, const char *src0, size_t count); -char * strstr(const char *searchee, const char *lookfor); -char * strsep(char **source_ptr, const char *delim); -char * strtok(char *s, const char *delim); -int sscanf(const char *buf, const char *fmt, ...); -char toupper(char ch); -int _stricmp (const char *s1, const char *s2); -unsigned long long __aeabi_llsr(unsigned long long val, unsigned int shift); -#endif -// Extern Calls: -// extern int init_rom_libgloss_ram_map(_DWORD) -// extern int _rom_mallocr_init_v1_00(void) -// extern int __rtl_vfprintf_r_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_fflush_r_v1_00(_DWORD, _DWORD) -// extern int __rtl_memchr_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_memcmp_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_memcpy_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_memmove_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_memset_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_strcat_v1_00(_DWORD, _DWORD) -// extern int __rtl_strchr_v1_00(_DWORD, _DWORD) -// extern int __rtl_strcmp_v1_00(_DWORD, _DWORD) -// extern int __rtl_strcpy_v1_00(_DWORD, _DWORD) -// extern int __rtl_strlen_v1_00(_DWORD) -// extern int __rtl_strncat_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_strncmp_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_strncpy_v1_00(_DWORD, _DWORD, _DWORD) -// extern int __rtl_strstr_v1_00(_DWORD, _DWORD) -// extern int __rtl_strsep_v1_00(_DWORD, _DWORD) -// extern int __rtl_strtok_v1_00(_DWORD, _DWORD) - -//------------------------------------------------------------------------- -// Data declarations - -extern struct _reent * _rtl_impure_ptr; - -#if CHECK_LIBC_INIT -extern char libc_has_init; -#endif -extern char print_off; - -#undef snprintf -//------------------------------------------------------------------------- -// Function -//----- snprintf() -int snprintf(char *str, size_t size, const char *fmt, ...) { - va_list args; - va_start (args, fmt); - int result; - int w; - FILE f; -#if CHECK_LIBC_INIT - if (!libc_has_init) { - rtl_libc_init(); - } -#endif - if (size >= 0) { - f._flags = 520; - if (size) - w = size - 1; - else - w = 0; - f._w = w; /* write space left for putc() */ - f._bf._size = w; - f._file = -1; /* fileno, if Unix descriptor, else -1 */ - f._p = str; /* current position in (some) buffer */ - f._bf._base = str; - result = __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, &f, fmt, args); - if (result + 1 < 0) - _rtl_impure_ptr->_errno = 139; - if (size) - *f._p = 0; - } else { - _rtl_impure_ptr->_errno = 139; - result = -1; - } - return result; -} - - -#ifndef ENAC_FLOAT -#undef sprintf -//----- sprintf() -int sprintf(char *str, const char *fmt, ...) { - FILE f; - -#if CHECK_LIBC_INIT - if (!libc_has_init) { - rtl_libc_init(); - } -#endif - f._flags = 520; - f._w = 0x7FFFFFFF; - f._bf._size = 0x7FFFFFFF; - f._file = -1; - f._p = str; - f._bf._base = str; - va_list args; - va_start (args, fmt); - int result = __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, &f, fmt, args); - *f._p = 0; -// va_end (args); - return result; -} - -#undef printf -//----- printf() -int printf(const char *fmt, ...) { -#if CHECK_LIBC_INIT - if (!libc_has_init) { - rtl_libc_init(); - } -#endif - if(!print_off) { - - va_list args; - va_start (args, fmt); - int result = __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, - _rtl_impure_ptr->_stdout, fmt, args); - __rtl_fflush_r_v1_00(_rtl_impure_ptr, _rtl_impure_ptr->_stdout); - // va_end (args); - return result; - } - else return 0; -} - -#undef vprintf -//----- vprintf() -int vprintf(const char * fmt, __VALIST param) { -#if CHECK_LIBC_INIT - if (!libc_has_init) { - rtl_libc_init(); - } -#endif - int result = __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, - _rtl_impure_ptr->_stdout, fmt, param); - __rtl_fflush_r_v1_00(_rtl_impure_ptr, _rtl_impure_ptr->_stdout); - return result; -} -#endif // ENAC_FLOAT - -#undef vsnprintf -//----- vsnprintf() -int vsnprintf(char *str, size_t size, const char *fmt, __VALIST param) { - int result; - int w; - FILE f; -#if CHECK_LIBC_INIT - if (!libc_has_init) { - rtl_libc_init(); - } -#endif - if (size >= 0) { - if (size) - w = size - 1; - else - w = 0; - f._flags = 520; - f._p = str; - f._bf._base = str; - f._w = w; - f._bf._size = w; - f._file = -1; - result = __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, &f, fmt, param); - if (result + 1 < 0) - _rtl_impure_ptr->_errno = 139; - if (size) - *f._p = 0; - } else { - _rtl_impure_ptr->_errno = 139; - result = -1; - } - return result; -} - -#undef vfprintf -//----- vfprintf() -int vfprintf(FILE *fp, const char *fmt0, va_list ap) { -#if CHECK_LIBC_INIT - if (!libc_has_init) { - rtl_libc_init(); - } -#endif - return __rtl_vfprintf_r_v1_00(_rtl_impure_ptr, fp, fmt0, ap); -} - -#undef memchr -//----- memchr() -void * memchr(const void * src_void , int c , size_t length) { - return __rtl_memchr_v1_00(src_void, c, length); -} - -#undef memcmp -//----- memcmp() -int memcmp(const void *m1, const void *m2, size_t n) { - return __rtl_memcmp_v1_00(m1, m2, n); -} - -#undef memcpy -//----- memcpy() -void * memcpy(void *dst0, const void *src0, size_t len0) { - return __rtl_memcpy_v1_00(dst0, src0, len0); -} - -#undef memmove -//----- memmove() -void * memmove(void *dst_void, const void *src_void, size_t length) { - return __rtl_memmove_v1_00(dst_void, src_void, length); -} - -#undef memset -//----- memset() -void * memset(void *m, int c, size_t n) { - return __rtl_memset_v1_00(m, c, n); -} - -#undef strcat -//----- strcat() -char * strcat(char *s1, const char *s2) { - return (char *) __rtl_strcat_v1_00(s1, s2); -} -#undef strchr -//----- strchr() -char * strchr(const char *s1, int i) { - return (char *) __rtl_strchr_v1_00(s1, i); -} - -#undef strcmp -//----- strcmp() -int strcmp(const char *s1, const char *s2) { - return __rtl_strcmp_v1_00(s1, s2); -} - -#undef strcpy -//----- strcpy() -char * strcpy(char *dst0, const char *src0) { - return (char *) __rtl_strcpy_v1_00(dst0, src0); -} - -#undef strlen -//----- strlen() -size_t strlen(const char *str) { - return __rtl_strlen_v1_00(str); -} - -#undef strncat -//----- strncat() -char * strncat(char *s1, const char *s2, size_t n) { - return (char *) __rtl_strncat_v1_00(s1, s2, n); -} - -#undef strncmp -//----- strncmp() -int strncmp(const char *s1, const char *s2, size_t n) { - return __rtl_strncmp_v1_00(s1, s2, n); -} - -#undef strncpy -//----- strncpy() -char * strncpy(char *dst0, const char *src0, size_t count) { - return (char *) __rtl_strncpy_v1_00(dst0, src0, count); -} - -#undef strstr -//----- strstr() -char * strstr(const char *searchee, const char *lookfor) { - return (char *) __rtl_strstr_v1_00(searchee, lookfor); -} - -#undef strsep -//----- strsep() -char * strsep(char **source_ptr, const char *delim) { - return (char *) __rtl_strsep_v1_00(source_ptr, delim); -} - -#undef strtok -//----- strtok() -char * strtok(char *s, const char *delim) { - return (char *) __rtl_strtok_v1_00(s, delim); -} -#undef sscanf -int sscanf(const char *buf, const char *fmt, ...) { - va_list args; - int i; - - va_start(args, fmt); - i = _vsscanf(buf, fmt, args); - va_end(args); - - return i; -} - -int toupper(int ch) { - return ((ch >= 'a' && ch <= 'z') ? ch - 'a' + 'A' : ch); -}; - -int _stricmp (const char *s1, const char *s2) -{ - while (*s2 != 0 && toupper(*s1) == toupper(*s2)) - s1++, s2++; - return (int) (toupper(*s1) - toupper(*s2)); -} - -unsigned long long __aeabi_llsr(unsigned long long val, unsigned int shift) -{ - uint32_t lo = ((uint32_t)val >> shift) | ((uint32_t)(val >> 32) << (32 - shift)); - uint32_t hi = (uint32_t)val >> shift; - - return ((unsigned long long)hi << 32) | lo; -} - -/* -#undef __VFP_FP__ - -#if defined(__VFP_FP__) -typedef long __jmp_buf[10 + 8 + 1]; // d8-d15 fpu + fpscr -#else -typedef long __jmp_buf[10]; -#endif - -int setjmp(__jmp_buf buf) __attribute__ ((noinline)); -int setjmp(__jmp_buf buf) -{ - register void * r0 __asm__("r0") = buf; - __asm__( - "mov %%ip, %%sp\n" - "stmia %[store]!, {%%r4-%%r9, %%sl, %%fp, %%ip, %%lr}\n" -#if defined(__VFP_FP__) - "vstmia %[store]!, {%%d8-%%d15}\n" - "vmrs %%r1, fpscr\n" - "str %%r1, [%[store]], #4\n" -#endif - "mov.w %r0, #0\n" - : : [store] "r" (r0) :); -} - -void longjmp(__jmp_buf buf, long value) __attribute__((noreturn)); -void longjmp(__jmp_buf buf, long value) -{ - __asm__( - "ldmia %[load]!, {%%r4-%%r9, %%sl, %%fp, %%ip, %%lr}\n" -#if defined(__VFP_FP__) - "vldmia %[load]!, {%%d8-%%d15}\n" - "ldr %%r0, [%[load]], #4\n" - "vmsr fpscr, %%r0\n" -#endif - "mov %%sp, %%ip\n" - "movs %%r0, %%r1\n" - "it eq\n" - "moveq %%r0, #1\n" - "bx lr\n" - : : [load] "r" (buf), [value] "r" (value):); - __builtin_unreachable(); -} -*/ - -extern __attribute__ ((long_call)) unsigned int Rand(void); - -int rand(void) -{ - return Rand(); -} - - - -//----- rtl_dtoi() -int __aeabi_dtoi(double d) -{ - return __rtl_dtoi_v1_00(d); -} - -//----- __aeabi_dtoui() -int __aeabi_dtoui(double d) -{ - return __rtl_dtoui_v1_00(d); -} - -//----- __aeabi_i2f() -float __aeabi_i2f(int val) -{ - return __rtl_itof_v1_00(val); -} - -//----- __aeabi_i2d() -int __aeabi_i2d(int val) -{ - return __rtl_itod_v1_00(val); -} - -//----- __aeabi_ui2f() -float __aeabi_ui2f(unsigned int val) -{ - return __rtl_uitof_v1_00(val); -} - -//----- __aeabi_ui2d() -int __aeabi_ui2d(unsigned int val) -{ - return __rtl_uitod_v1_00(val); -} - -//----- __aeabi_itoa() -char * __aeabi_itoa(int value, char *string, int radix) -{ - return (char *)__rtl_ltoa_v1_00(value, string, radix); -} - -//----- __aeabi_ltoa() -char * __aeabi_ltoa(int value, char *string, int radix) -{ - return (char *)__rtl_ltoa_v1_00(value, string, radix); -} - -//----- __aeabi_utoa() -char * __aeabi_utoa(unsigned int value, char *string, int radix) -{ - return (char *)__rtl_ultoa_v1_00(value, string, radix); -} - -//----- __aeabi_ultoa() -char * __aeabi_ultoa(unsigned int value, char *string, int radix) -{ - return (char *)__rtl_ultoa_v1_00(value, string, radix); -} - -//----- __aeabi_ftol() -int __aeabi_ftol(float f) -{ - return __rtl_ftol_v1_00(f); -} - -//----- __aeabi_ftod() -int __aeabi_ftod(float f) -{ - return __rtl_ftod_v1_00(f); -} - -//----- __aeabi_dtof() -float __aeabi_dtof(double d) -{ - return __rtl_dtof_v1_00(d); -} - -//----- __aeabi_fadd() -float __aeabi_fadd(float a, float b) -{ - return __rtl_fadd_v1_00(a, b); -} - -//----- __aeabi_fsub() -float __aeabi_fsub(float a, float b) -{ - return __rtl_fsub_v1_00(a, b); -} - -//----- __aeabi_fmul() -float __aeabi_fmul(float a, float b) -{ - return __rtl_fmul_v1_00(a, b); -} - -//----- __aeabi_fdiv() -float __aeabi_fdiv(float a, float b) -{ - return __rtl_fdiv_v1_00(a, b); -} - -//----- __aeabi_dadd() -int __aeabi_dadd(double a, double b) -{ - return __rtl_dadd_v1_00(a, b); -} - -//----- __aeabi_dsub() -int __aeabi_dsub(double a, double b) -{ - return __rtl_dsub_v1_00(a, b); -} - -//----- __aeabi_dmul() -int __aeabi_dmul(double a, double b) -{ - return __rtl_dmul_v1_00(a, b); -} - -//----- __aeabi_ddiv() -int __aeabi_ddiv(double a, double b) -{ - return __rtl_ddiv_v1_00(a, b); -} - -//----- __aeabi_dcmpeq() -int __aeabi_dcmpeq(double a, double b) -{ - return __rtl_dcmpeq_v1_00(a, b); -} - -//----- __aeabi_dcmplt() -int __aeabi_dcmplt(double a, double b) -{ - return __rtl_dcmplt_v1_00(a, b); -} - -//----- __aeabi_dcmple() -int __aeabi_dcmple(double a, double b) -{ - return __rtl_dcmple_v1_00(a, b); -} - -//----- __aeabi_dcmpgt() -int __aeabi_dcmpgt(double a, double b) -{ - return __rtl_dcmpgt_v1_00(a, b); -} - -//----- __aeabi_fcmplt() -int __aeabi_fcmplt(float a, float b) -{ - return __rtl_fcmplt_v1_00(a, b); -} - -//----- __aeabi_fcmpgt() -int __aeabi_fcmpgt(float a, float b) -{ - return __rtl_fcmpgt_v1_00(a, b); -} - -extern _LONG_CALL_ void __aeabi_memset(void *dest, size_t n, int c); // { memset(dest, c, n); } - -void __aeabi_memclr(void *dest, size_t n) { __aeabi_memset(dest, n, 0); } -void __aeabi_memclr4(void *dest, size_t n) { __aeabi_memset(dest, n, 0); } diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_eabi_cast_ram.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_eabi_cast_ram.c deleted file mode 100644 index ed2a343..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_eabi_cast_ram.c +++ /dev/null @@ -1,229 +0,0 @@ -/* - * rtl_eabi_cast_ram.o - * pvvx 2016 - */ - -#include "basic_types.h" -#include "rt_lib_rom.h" - -//------------------------------------------------------------------------- -// Function declarations - -int rtl_dtoi(double d); -int rtl_dtoui(double d); -float rtl_i2f(int val); -int rtl_i2d(int val); -float rtl_ui2f(unsigned int val); -int rtl_ui2d(unsigned int val); -char *rtl_itoa(int value, char *string, int radix); -char *rtl_ltoa(int value, char *string, int radix); -char *rtl_utoa(unsigned int value, char *string, int radix); -char *rtl_ultoa(unsigned int value, char *string, int radix); -int rtl_ftol(float f); -int rtl_ftod(float f); -float rtl_dtof(double d); -float rtl_fadd(float a, float b); -float rtl_fsub(float a, float b); -float rtl_fmul(float a, float b); -float rtl_fdiv(float a, float b); -int rtl_dadd(double a, double b); -int rtl_dsub(double a, double b); -int rtl_dmul(double a, double b); -int rtl_ddiv(double a, double b); -int rtl_dcmpeq(double a, double b); -int rtl_dcmplt(double a, double b); -int rtl_dcmple(double a, double b); -int rtl_dcmpgt(double a, double b); -int rtl_fcmplt(float a, float b); -int rtl_fcmpgt(float a, float b); - -// Extern Calls: - -// int __rtl_dtoi_v1_00(); -// int __rtl_dtoui_v1_00(); -// int __rtl_itof_v1_00(); -// int __rtl_itod_v1_00(); -// int __rtl_uitof_v1_00(); -// int __rtl_uitod_v1_00(); -// int __rtl_ltoa_v1_00(); -// int __rtl_ultoa_v1_00(); -// int __rtl_ftol_v1_00(); -// int __rtl_ftod_v1_00(); -// int __rtl_dtof_v1_00(); -// int __rtl_fadd_v1_00(); -// int __rtl_fsub_v1_00(); -// int __rtl_fmul_v1_00(); -// int __rtl_fdiv_v1_00(); -// int __rtl_dadd_v1_00(); -// int __rtl_dsub_v1_00(); -// int __rtl_dmul_v1_00(); -// int __rtl_ddiv_v1_00(); -// int __rtl_dcmpeq_v1_00(); -// int __rtl_dcmplt_v1_00(); -// int __rtl_dcmple_v1_00(); -// int __rtl_dcmpgt_v1_00(); -// int __rtl_fcmplt_v1_00(); -// int __rtl_fcmpgt_v1_00(); - - -//----- rtl_dtoi() -int rtl_dtoi(double d) -{ - return __rtl_dtoi_v1_00(d); -} - -//----- rtl_dtoui() -int rtl_dtoui(double d) -{ - return __rtl_dtoui_v1_00(d); -} - -//----- rtl_i2f() -float rtl_i2f(int val) -{ - return __rtl_itof_v1_00(val); -} - -//----- rtl_i2d() -int rtl_i2d(int val) -{ - return __rtl_itod_v1_00(val); -} - -//----- rtl_ui2f() -float rtl_ui2f(unsigned int val) -{ - return __rtl_uitof_v1_00(val); -} - -//----- rtl_ui2d() -int rtl_ui2d(unsigned int val) -{ - return __rtl_uitod_v1_00(val); -} - -//----- rtl_itoa() -char *rtl_itoa(int value, char *string, int radix) -{ - return (char *)__rtl_ltoa_v1_00(value, string, radix); -} - -//----- rtl_ltoa() -char *rtl_ltoa(int value, char *string, int radix) -{ - return (char *)__rtl_ltoa_v1_00(value, string, radix); -} - -//----- rtl_utoa() -char *rtl_utoa(unsigned int value, char *string, int radix) -{ - return (char *)__rtl_ultoa_v1_00(value, string, radix); -} - -//----- rtl_ultoa() -char *rtl_ultoa(unsigned int value, char *string, int radix) -{ - return (char *)__rtl_ultoa_v1_00(value, string, radix); -} - -//----- rtl_ftol() -int rtl_ftol(float f) -{ - return __rtl_ftol_v1_00(f); -} - -//----- rtl_ftod() -int rtl_ftod(float f) -{ - return __rtl_ftod_v1_00(f); -} - -//----- rtl_dtof() -float rtl_dtof(double d) -{ - return __rtl_dtof_v1_00(d); -} - -//----- rtl_fadd() -float rtl_fadd(float a, float b) -{ - return __rtl_fadd_v1_00(a, b); -} - -//----- rtl_fsub() -float rtl_fsub(float a, float b) -{ - return __rtl_fsub_v1_00(a, b); -} - -//----- rtl_fmul() -float rtl_fmul(float a, float b) -{ - return __rtl_fmul_v1_00(a, b); -} - -//----- rtl_fdiv() -float rtl_fdiv(float a, float b) -{ - return __rtl_fdiv_v1_00(a, b); -} - -//----- rtl_dadd() -int rtl_dadd(double a, double b) -{ - return __rtl_dadd_v1_00(a, b); -} - -//----- rtl_dsub() -int rtl_dsub(double a, double b) -{ - return __rtl_dsub_v1_00(a, b); -} - -//----- rtl_dmul() -int rtl_dmul(double a, double b) -{ - return __rtl_dmul_v1_00(a, b); -} - -//----- rtl_ddiv() -int rtl_ddiv(double a, double b) -{ - return __rtl_ddiv_v1_00(a, b); -} - -//----- rtl_dcmpeq() -int rtl_dcmpeq(double a, double b) -{ - return __rtl_dcmpeq_v1_00(a, b); -} - -//----- rtl_dcmplt() -int rtl_dcmplt(double a, double b) -{ - return __rtl_dcmplt_v1_00(a, b); -} - -//----- rtl_dcmple() -int rtl_dcmple(double a, double b) -{ - return __rtl_dcmple_v1_00(a, b); -} - -//----- rtl_dcmpgt() -int rtl_dcmpgt(double a, double b) -{ - return __rtl_dcmpgt_v1_00(a, b); -} - -//----- rtl_fcmplt() -int rtl_fcmplt(float a, float b) -{ - return __rtl_fcmplt_v1_00(a, b); -} - -//----- rtl_fcmpgt() -int rtl_fcmpgt(float a, float b) -{ - return __rtl_fcmpgt_v1_00(a, b); -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_math_ram.c b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_math_ram.c deleted file mode 100644 index a82e96a..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_math_ram.c +++ /dev/null @@ -1,49 +0,0 @@ -/* - * rtl_math_ram..o - * pvvx 2016 - */ - -#include "basic_types.h" - -//------------------------------------------------------------------------- -// Function declarations - -float rtl_fabsf(float a); -int rtl_fabs(double a); -float rtl_cos_f32(float a); -float rtl_sin_f32(float a); - -// Extern Calls: - -// int __rtl_fabsf_v1_00(); -// int __rtl_fabs_v1_00(); -// int __rtl_cos_f32_v1_00(); -// int __rtl_sin_f32_v1_00(); - -extern _LONG_CALL_ float __rtl_fabsf_v1_00(float a); -//----- rtl_fabsf() -float rtl_fabsf(float a) -{ - return __rtl_fabsf_v1_00(a); -} - -extern _LONG_CALL_ int __rtl_fabs_v1_00(double a); -//----- rtl_fabs() -int rtl_fabs(double a) -{ - return __rtl_fabs_v1_00(a); -} - -extern _LONG_CALL_ float __rtl_cos_f32_v1_00(float a); -//----- rtl_cos_f32() -float rtl_cos_f32(float a) -{ - return __rtl_cos_f32_v1_00(a); -} - -extern _LONG_CALL_ float __rtl_sin_f32_v1_00(float a); -//----- rtl_sin_f32() -float rtl_sin_f32(float a) -{ - return __rtl_sin_f32_v1_00(a); -} diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/libc/rom/string/rom_libc_string.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/libc/rom/string/rom_libc_string.h deleted file mode 100644 index 79855bf..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/libc/rom/string/rom_libc_string.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * rom_libc_string.h - * - * Definitions for standard library - libc functions. - */ -#ifndef _ROM_LIBC_STRING_H_ -#define _ROM_LIBC_STRING_H_ - -#include - -#define __rtl_memchr __rtl_memchr_v1_00 -#define __rtl_memcmp __rtl_memcmp_v1_00 -#define __rtl_memcpy __rtl_memcpy_v1_00 -#define __rtl_memmove __rtl_memmove_v1_00 -#define __rtl_memset __rtl_memset_v1_00 -#define __rtl_strcat __rtl_strcat_v1_00 -#define __rtl_strchr __rtl_strchr_v1_00 -#define __rtl_strcmp __rtl_strcmp_v1_00 -#define __rtl_strcpy __rtl_strcpy_v1_00 -#define __rtl_strlen __rtl_strlen_v1_00 -#define __rtl_strncat __rtl_strncat_v1_00 -#define __rtl_strncmp __rtl_strncmp_v1_00 -#define __rtl_strncpy __rtl_strncpy_v1_00 -#define __rtl_strstr __rtl_strstr_v1_00 -#define __rtl_strsep __rtl_strsep_v1_00 -#define __rtl_strtok __rtl_strtok_v1_00 - -#define __rtl_critical_factorization __rtl_critical_factorization_v1_00 -#define __rtl_two_way_short_needle __rtl_two_way_short_needle_v1_00 -#define __rtl_two_way_long_needle __rtl_two_way_long_needle_v1_00 - -extern _LONG_CALL_ void * __rtl_memchr_v1_00(const void * src_void , int c , size_t length); -extern _LONG_CALL_ int __rtl_memcmp_v1_00(const void * m1 , const void * m2 , size_t n); -extern _LONG_CALL_ void * __rtl_memcpy_v1_00(void * __restrict dst0 , const void * __restrict src0 , size_t len0); -extern _LONG_CALL_ void * __rtl_memmove_v1_00( void * dst_void , const void * src_void , size_t length); -extern _LONG_CALL_ void * __rtl_memset_v1_00(void * m , int c , size_t n); -extern _LONG_CALL_ char * __rtl_strcat_v1_00(char *__restrict s1 , const char *__restrict s2); -extern _LONG_CALL_ char * __rtl_strchr_v1_00(const char *s1 , int i); -extern _LONG_CALL_ int __rtl_strcmp_v1_00(const char *s1 , const char *s2); -extern _LONG_CALL_ char* __rtl_strcpy_v1_00(char *dst0 , const char *src0); -extern _LONG_CALL_ size_t __rtl_strlen_v1_00(const char *str); -extern _LONG_CALL_ char * __rtl_strncat_v1_00(char *__restrict s1 , const char *__restrict s2 , size_t n); -extern _LONG_CALL_ int __rtl_strncmp_v1_00(const char *s1 , const char *s2 , size_t n); -extern _LONG_CALL_ char * __rtl_strncpy_v1_00(char *__restrict dst0 , const char *__restrict src0 , size_t count); -extern _LONG_CALL_ char * __rtl_strstr_v1_00(const char *searchee , const char *lookfor); -extern _LONG_CALL_ char * __rtl_strsep_v1_00(register char **source_ptr , register const char *delim); -extern _LONG_CALL_ char * __rtl_strtok_v1_00(register char *__restrict s , register const char *__restrict delim); - -#endif /* _ROM_LIBC_STRING_H_ */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/libgloss/rtl8195a/rom/rom_libgloss_retarget.h b/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/libgloss/rtl8195a/rom/rom_libgloss_retarget.h deleted file mode 100644 index 4c05a36..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/8195a/misc/rtl_std_lib/libgloss/rtl8195a/rom/rom_libgloss_retarget.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef ROM_LIBGLOSS_RETARGET_H -#define ROM_LIBGLOSS_RETARGET_H - -#include -#include - -#define __rtl_close __rtl_close_v1_00 -#define __rtl_fstat __rtl_fstat_v1_00 -#define __rtl_isatty __rtl_isatty_v1_00 -#define __rtl_lseek __rtl_lseek_v1_00 -#define __rtl_open __rtl_open_v1_00 -#define __rtl_read __rtl_read_v1_00 -#define __rtl_write __rtl_write_v1_00 -#define __rtl_sbrk __rtl_sbrk_v1_00 - -extern _LONG_CALL_ int __rtl_close_v1_00(int fildes); -extern _LONG_CALL_ int __rtl_fstat_v1_00(int fildes , struct stat *st); -extern _LONG_CALL_ int __rtl_isatty_v1_00(int file); -extern _LONG_CALL_ int __rtl_lseek_v1_00(int file , int ptr , int dir); -extern _LONG_CALL_ int __rtl_open_v1_00(char *file , int flags , int mode); -extern _LONG_CALL_ int __rtl_read_v1_00(int file , char *ptr , int len); -extern _LONG_CALL_ int __rtl_write_v1_00(int file , const char *ptr , int len); -extern _LONG_CALL_ void* __rtl_sbrk_v1_00(int incr); - - -struct _rom_libgloss_ram_map { - int (*libgloss_close)(int fildes); - int (*libgloss_fstat)(int fildes , struct stat *st); - int (*libgloss_isatty)(int file); - int (*libgloss_lseek)(int file , int ptr , int dir); - int (*libgloss_open)(char *file , int flags , int mode); - int (*libgloss_read)(int file , char *ptr , int len); - int (*libgloss_write)(int file , const char *ptr , int len); - void* (*libgloss_sbrk)(int incr); -}; - -#endif /* ROM_LIBGLOSS_RETARGET_H */ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/common/bsp/basic_types.h b/Firmware/RTLGDB/USDK/component/soc/realtek/common/bsp/basic_types.h deleted file mode 100644 index b8ac248..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/common/bsp/basic_types.h +++ /dev/null @@ -1,516 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __BASIC_TYPES_H__ -#define __BASIC_TYPES_H__ - -//#define PLATFORM_FREERTOS -#include - -#define PLATFORM_LITTLE_ENDIAN 0 -#define PLATFORM_BIG_ENDIAN 1 - -#define SYSTEM_ENDIAN PLATFORM_LITTLE_ENDIAN - -#define SUCCESS 0 -#define FAIL (-1) - -#undef _SUCCESS -#define _SUCCESS 1 - -#undef _FAIL -#define _FAIL 0 - -#ifndef FALSE - #define FALSE 0 -#endif - -#ifndef TRUE - #define TRUE (!FALSE) -#endif - -#define _TRUE TRUE -#define _FALSE FALSE - -#ifndef true -#define true _TRUE -#endif -#ifndef false -#define false _FALSE -#endif - -#ifndef NULL -#define NULL 0 -#endif - -#ifdef _MSC_VER // IntelliSense -#define __attribute__(x) -#define __STATIC_INLINE static inline -#define _LONG_CALL_ -#define __inline__ -#endif - - -#ifdef __GNUC__ -#define __weak __attribute__((weak)) -#define likely(x) __builtin_expect ((x), 1) -#define unlikely(x) __builtin_expect ((x), 0) -#endif - -typedef unsigned int uint; -typedef signed int sint; - -#ifdef __ICCARM__ -typedef signed long long __int64_t; -typedef unsigned long long __uint64_t; -#endif - -typedef unsigned char uint8; -typedef signed char sint8; -typedef signed char int8; -typedef unsigned short uint16; -typedef signed short sint16; -typedef unsigned int uint32; -typedef unsigned int u_int; -typedef signed int sint32; -typedef int int32; -typedef signed long long sint64; -typedef unsigned long long uint64; -typedef float real32; -typedef double real64; - -#ifdef CONFIG_MBED_ENABLED -typedef unsigned int BOOL; -#else -#ifndef BOOL -typedef unsigned char BOOL; -#endif -#ifndef bool -typedef unsigned char bool; -#endif -#endif -/* -#define UCHAR uint8_t -#define USHORT uint16_t -#define UINT uint32_t -#define ULONG uint32_t -*/ -typedef struct { volatile int counter; } atomic_t; - -typedef enum _RTK_STATUS_ { - _EXIT_SUCCESS = 0, - _EXIT_FAILURE = 1 -}RTK_STATUS, *PRTK_STATUS; - -#define IN -#define OUT -#define INOUT -#define NDIS_OID uint -#define NDIS_STATUS uint - -#ifndef PVOID -typedef void * PVOID; -#endif - -typedef uint32_t dma_addr_t; - -typedef void (*proc_t)(void*); - -typedef unsigned int __kernel_size_t; -typedef int __kernel_ssize_t; - -typedef __kernel_size_t SIZE_T; -typedef __kernel_ssize_t SSIZE_T; -#define FIELD_OFFSET(s,field) ((SSIZE_T)&((s*)(0))->field) - -#define MEM_ALIGNMENT_OFFSET (sizeof (SIZE_T)) -#define MEM_ALIGNMENT_PADDING (sizeof(SIZE_T) - 1) - -#define SIZE_PTR SIZE_T -#define SSIZE_PTR SSIZE_T - -#ifndef ON -#define ON 1 -#endif - -#ifndef OFF -#define OFF 0 -#endif - -#ifndef ENABLE -#define ENABLE 1 -#endif - -#ifndef DISABLE -#define DISABLE 0 -#endif - - -#define BIT0 0x0001 -#define BIT1 0x0002 -#define BIT2 0x0004 -#define BIT3 0x0008 -#define BIT4 0x0010 -#define BIT5 0x0020 -#define BIT6 0x0040 -#define BIT7 0x0080 -#define BIT8 0x0100 -#define BIT9 0x0200 -#define BIT10 0x0400 -#define BIT11 0x0800 -#define BIT12 0x1000 -#define BIT13 0x2000 -#define BIT14 0x4000 -#define BIT15 0x8000 -#define BIT16 0x00010000 -#define BIT17 0x00020000 -#define BIT18 0x00040000 -#define BIT19 0x00080000 -#define BIT20 0x00100000 -#define BIT21 0x00200000 -#define BIT22 0x00400000 -#define BIT23 0x00800000 -#define BIT24 0x01000000 -#define BIT25 0x02000000 -#define BIT26 0x04000000 -#define BIT27 0x08000000 -#define BIT28 0x10000000 -#define BIT29 0x20000000 -#define BIT30 0x40000000 -#define BIT31 0x80000000 - -#define BIT_(__n) (1<<(__n)) - -#ifndef BIT -#define BIT(__n) (1<<(__n)) -#endif - -#if defined (__ICCARM__) -#define STRINGIFY(s) #s -#define SECTION(_name) _Pragma( STRINGIFY(location=_name)) -#define ALIGNMTO(_bound) _Pragma( STRINGIFY(data_alignment=_bound)) -#define _PACKED_ __packed -#define _LONG_CALL_ -#define _LONG_CALL_ROM_ -#define _WEAK __weak -#else -#define SECTION(_name) __attribute__ ((__section__(_name))) -#define ALIGNMTO(_bound) __attribute__ ((aligned (_bound))) -#define _PACKED_ __attribute__ ((packed)) -#ifdef CONFIG_RELEASE_BUILD_LIBRARIES -#define _LONG_CALL_ -#define _LONG_CALL_ROM_ __attribute__ ((long_call)) -#ifdef E_CUT_ROM_DOMAIN -#undef _LONG_CALL_ROM_ -#define _LONG_CALL_ROM_ -#endif -#else -#define _LONG_CALL_ __attribute__ ((long_call)) -#define _LONG_CALL_ROM_ _LONG_CALL_ -#endif -#define _WEAK __attribute__ ((weak)) -#endif - - - -//port from fw by thomas -// TODO: Belows are Sync from SD7-Driver. It is necessary to check correctness - -#define SWAP32(x) ((uint32_t)( \ - (((uint32_t)(x) & (uint32_t)0x000000ff) << 24) | \ - (((uint32_t)(x) & (uint32_t)0x0000ff00) << 8) | \ - (((uint32_t)(x) & (uint32_t)0x00ff0000) >> 8) | \ - (((uint32_t)(x) & (uint32_t)0xff000000) >> 24))) - -#define WAP16(x) ((uint16_t)( \ - (((uint16_t)(x) & (uint16_t)0x00ff) << 8) | \ - (((uint16_t)(x) & (uint16_t)0xff00) >> 8))) - -#if SYSTEM_ENDIAN == PLATFORM_LITTLE_ENDIAN -#ifndef rtk_le16_to_cpu -#define rtk_cpu_to_le32(x) ((uint32_t)(x)) -#define rtk_le32_to_cpu(x) ((uint32_t)(x)) -#define rtk_cpu_to_le16(x) ((uint16_t)(x)) -#define rtk_le16_to_cpu(x) ((uint16_t)(x)) -#define rtk_cpu_to_be32(x) SWAP32((x)) -#define rtk_be32_to_cpu(x) SWAP32((x)) -#define rtk_cpu_to_be16(x) WAP16((x)) -#define rtk_be16_to_cpu(x) WAP16((x)) -#endif - -#elif SYSTEM_ENDIAN == PLATFORM_BIG_ENDIAN -#ifndef rtk_le16_to_cpu -#define rtk_cpu_to_le32(x) SWAP32((x)) -#define rtk_le32_to_cpu(x) SWAP32((x)) -#define rtk_cpu_to_le16(x) WAP16((x)) -#define rtk_le16_to_cpu(x) WAP16((x)) -#define rtk_cpu_to_be32(x) ((uint32_t)(x)) -#define rtk_be32_to_cpu(x) ((uint32_t)(x)) -#define rtk_cpu_to_be16(x) ((uint16_t)(x)) -#define rtk_be16_to_cpu(x) ((uint16_t)(x)) -#endif -#endif - - -/* - * Call endian free function when - * 1. Read/write packet content. - * 2. Before write integer to IO. - * 3. After read integer from IO. -*/ - -// -// Byte Swapping routine. -// -#define EF1Byte (uint8_t) -#define EF2Byte le16_to_cpu -#define EF4Byte le32_to_cpu - -// -// Read LE format data from memory -// -#define ReadEF1Byte(_ptr) EF1Byte(*((uint8_t *)(_ptr))) -#define ReadEF2Byte(_ptr) EF2Byte(*((uint16_t *)(_ptr))) -#define ReadEF4Byte(_ptr) EF4Byte(*((uint32_t *)(_ptr))) - -// -// Write LE data to memory -// -#define WriteEF1Byte(_ptr, _val) (*((uint8_t *)(_ptr)))=EF1Byte(_val) -#define WriteEF2Byte(_ptr, _val) (*((uint16_t *)(_ptr)))=EF2Byte(_val) -#define WriteEF4Byte(_ptr, _val) (*((uint32_t *)(_ptr)))=EF4Byte(_val) - -// -// Example: -// BIT_LEN_MASK_32(0) => 0x00000000 -// BIT_LEN_MASK_32(1) => 0x00000001 -// BIT_LEN_MASK_32(2) => 0x00000003 -// BIT_LEN_MASK_32(32) => 0xFFFFFFFF -// -#define BIT_LEN_MASK_32(__BitLen) \ - (0xFFFFFFFF >> (32 - (__BitLen))) -// -// Example: -// BIT_OFFSET_LEN_MASK_32(0, 2) => 0x00000003 -// BIT_OFFSET_LEN_MASK_32(16, 2) => 0x00030000 -// -#define BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) \ - (BIT_LEN_MASK_32(__BitLen) << (__BitOffset)) - -// -// Description: -// Return 4-byte value in host byte ordering from -// 4-byte pointer in litten-endian system. -// -#define LE_P4BYTE_TO_HOST_4BYTE(__pStart) \ - (EF4Byte(*((uint32_t *)(__pStart)))) - -// -// Description: -// Translate subfield (continuous bits in little-endian) of 4-byte value in litten byte to -// 4-byte value in host byte ordering. -// -#define LE_BITS_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - ( LE_P4BYTE_TO_HOST_4BYTE(__pStart) >> (__BitOffset) ) \ - & \ - BIT_LEN_MASK_32(__BitLen) \ - ) - -// -// Description: -// Mask subfield (continuous bits in little-endian) of 4-byte value in litten byte oredering -// and return the result in 4-byte value in host byte ordering. -// -#define LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - LE_P4BYTE_TO_HOST_4BYTE(__pStart) \ - & \ - ( ~ BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) ) \ - ) - -// -// Description: -// Set subfield of little-endian 4-byte value to specified value. -// -#define SET_BITS_TO_LE_4BYTE(__pStart, __BitOffset, __BitLen, __Value) \ - *((uint32_t *)(__pStart)) = \ - EF4Byte( \ - LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ - | \ - ( (((uint32_t)__Value) & BIT_LEN_MASK_32(__BitLen)) << (__BitOffset) ) \ - ); - - -#define BIT_LEN_MASK_16(__BitLen) \ - (0xFFFF >> (16 - (__BitLen))) - -#define BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) \ - (BIT_LEN_MASK_16(__BitLen) << (__BitOffset)) - -#define LE_P2BYTE_TO_HOST_2BYTE(__pStart) \ - (EF2Byte(*((uint16_t *)(__pStart)))) - -#define LE_BITS_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - ( LE_P2BYTE_TO_HOST_2BYTE(__pStart) >> (__BitOffset) ) \ - & \ - BIT_LEN_MASK_16(__BitLen) \ - ) - -#define LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - LE_P2BYTE_TO_HOST_2BYTE(__pStart) \ - & \ - ( ~ BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) ) \ - ) - -#define SET_BITS_TO_LE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \ - *((uint16_t *)(__pStart)) = \ - EF2Byte( \ - LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ - | \ - ( (((uint16_t)__Value) & BIT_LEN_MASK_16(__BitLen)) << (__BitOffset) ) \ - ); - -#define BIT_LEN_MASK_8(__BitLen) \ - (0xFF >> (8 - (__BitLen))) - -#define BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) \ - (BIT_LEN_MASK_8(__BitLen) << (__BitOffset)) - -#define LE_P1BYTE_TO_HOST_1BYTE(__pStart) \ - (EF1Byte(*((uint8_t *)(__pStart)))) - -#define LE_BITS_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - ( LE_P1BYTE_TO_HOST_1BYTE(__pStart) >> (__BitOffset) ) \ - & \ - BIT_LEN_MASK_8(__BitLen) \ - ) - -#define LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - LE_P1BYTE_TO_HOST_1BYTE(__pStart) \ - & \ - ( ~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) ) \ - ) - -#define SET_BITS_TO_LE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \ - *((uint8_t *)(__pStart)) = \ - EF1Byte( \ - LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ - | \ - ( (((uint8_t)__Value) & BIT_LEN_MASK_8(__BitLen)) << (__BitOffset) ) \ - ); - -//pclint -#define LE_BITS_CLEARED_TO_1BYTE_8BIT(__pStart, __BitOffset, __BitLen) \ - ( \ - LE_P1BYTE_TO_HOST_1BYTE(__pStart) \ - ) - -//pclint -#define SET_BITS_TO_LE_1BYTE_8BIT(__pStart, __BitOffset, __BitLen, __Value) \ -{ \ - *((pu1Byte)(__pStart)) = \ - EF1Byte( \ - LE_BITS_CLEARED_TO_1BYTE_8BIT(__pStart, __BitOffset, __BitLen) \ - | \ - ((u1Byte)__Value) \ - ); \ -} - -// Get the N-bytes aligment offset from the current length -#define N_BYTE_ALIGMENT(__Value, __Aligment) ((__Aligment == 1) ? (__Value) : (((__Value + __Aligment - 1) / __Aligment) * __Aligment)) - -typedef unsigned char BOOLEAN, *PBOOLEAN; - -#define TEST_FLAG(__Flag,__testFlag) (((__Flag) & (__testFlag)) != 0) -#define SET_FLAG(__Flag, __setFlag) ((__Flag) |= __setFlag) -#define CLEAR_FLAG(__Flag, __clearFlag) ((__Flag) &= ~(__clearFlag)) -#define CLEAR_FLAGS(__Flag) ((__Flag) = 0) -#define TEST_FLAGS(__Flag, __testFlags) (((__Flag) & (__testFlags)) == (__testFlags)) - -/* Define compilor specific symbol */ -// -// inline function -// - -#if defined ( __ICCARM__ ) -#define __inline__ inline -#define __inline inline -#define __inline_definition //In dialect C99, inline means that a function's definition is provided - //only for inlining, and that there is another definition - //(without inline) somewhere else in the program. - //That means that this program is incomplete, because if - //add isn't inlined (for example, when compiling without optimization), - //then main will have an unresolved reference to that other definition. - - // Do not inline function is the function body is defined .c file and this - // function will be called somewhere else, otherwise there is compile error -#elif defined ( __CC_ARM ) -#define __inline__ __inline //__linine__ is not supported in keil compilor, use __inline instead -#define inline __inline -#define __inline_definition // for dialect C99 -#elif defined ( __GNUC__ ) -#define __inline__ inline -#define __inline inline -#define __inline_definition inline -#endif - -// -// pack -// - -#if defined (__ICCARM__) - -#define RTW_PACK_STRUCT_BEGIN _Pragma( STRINGIFY(pack(1))) -#define RTW_PACK_STRUCT_STRUCT -#define RTW_PACK_STRUCT_END _Pragma( STRINGIFY(pack())) -//#define RTW_PACK_STRUCT_USE_INCLUDES - -#elif defined (__CC_ARM) - -#define RTW_PACK_STRUCT_BEGIN __packed -#define RTW_PACK_STRUCT_STRUCT -#define RTW_PACK_STRUCT_END - -#elif defined (__GNUC__) - -#define RTW_PACK_STRUCT_BEGIN -#define RTW_PACK_STRUCT_STRUCT __attribute__ ((__packed__)) -#define RTW_PACK_STRUCT_END - -#elif defined(PLATFORM_WINDOWS) - -#define RTW_PACK_STRUCT_BEGIN -#define RTW_PACK_STRUCT_STRUCT -#define RTW_PACK_STRUCT_END -#define RTW_PACK_STRUCT_USE_INCLUDES -#endif - -// for standard library -#ifdef __ICCARM__ -#define __extension__ /* Ignore */ -#define __restrict /* Ignore */ -#endif - - -#endif// __BASIC_TYPES_H__ diff --git a/Firmware/RTLGDB/USDK/component/soc/realtek/common/bsp/section_config.h b/Firmware/RTLGDB/USDK/component/soc/realtek/common/bsp/section_config.h deleted file mode 100644 index d461988..0000000 --- a/Firmware/RTLGDB/USDK/component/soc/realtek/common/bsp/section_config.h +++ /dev/null @@ -1,333 +0,0 @@ -/* - * Routines to access hardware - * - * Copyright (c) 2013 Realtek Semiconductor Corp. - * - * This module is a confidential and proprietary property of RealTek and - * possession or use of this module requires written permission of RealTek. - */ - -#ifndef _SECTION_CONFIG_H_ -#define _SECTION_CONFIG_H_ - -#include "basic_types.h" -#include "platform_autoconf.h" - -#define RAM_DEDECATED_VECTOR_TABLE_SECTION \ - SECTION(".ram_dedecated_vector_table") - -#define RAM_USER_IRQ_FUN_TABLE_SECTION \ - SECTION(".ram_user_define_irq_table") - -#define RAM_USER_IRQ_DATA_TABLE_SECTION \ - SECTION(".ram_user_define_data_table") - -//3 Timer Section -#define SECTION_RAM_TIMER2TO7_VECTOR_TABLE \ - SECTION(".timer2_7_vector_table.data") - -#define SECTION_RAM_BSS_TIMER_RECORDER_TABLE \ - SECTION(".timer.ram.data") - -#define TIMER_ROM_TEXT_SECTION \ - SECTION(".timer.rom.text") - -#define TIMER_ROM_DATA_SECTION \ - SECTION(".timer.rom.rodata") - -#define TIMER_RAM_TEXT_SECTION \ - SECTION(".timer.ram.text") - -#define TIMER_RAM_DATA_SECTION \ - SECTION(".timer.ram.data") - - -//3 Wifi Section -#define WIFI_ROM_TEXT_SECTION \ - SECTION(".wifi.rom.text") - -#define WIFI_ROM_DATA_SECTION \ - SECTION(".wifi.rom.rodata") - -#define WIFI_RAM_TEXT_SECTION \ - SECTION(".wifi.ram.text") - -#define WIFI_RAM_DATA_SECTION \ - SECTION(".wifi.ram.data") - -//3 Hal Section -#define HAL_ROM_TEXT_SECTION \ - SECTION(".hal.rom.text") - -#define HAL_ROM_DATA_SECTION \ - SECTION(".hal.rom.rodata") - -#define HAL_RAM_TEXT_SECTION \ - SECTION(".hal.ram.text") - -#define HAL_FLASH_TEXT_SECTION \ - SECTION(".hal.flash.text") - -#define HAL_FLASH_DATA_SECTION \ - SECTION(".hal.flash.data") - -#define HAL_SDRC_TEXT_SECTION \ - SECTION(".hal.sdrc.text") - -#define HAL_SDRC_DATA_SECTION \ - SECTION(".hal.sdrc.data") - -#define HAL_CUT_B_RAM_DATA_SECTION \ - SECTION(".cutb.ram.data") - -#define HAL_CUT_C_RAM_DATA_SECTION \ - SECTION(".cutc.ram.data") - -#define HAL_RAM_DATA_SECTION \ - SECTION(".hal.ram.data") - -#define HAL_RAM_BSS_SECTION \ - SECTION(".hal.ram.bss") - -#define HAL_ROM_OP_SECTION \ - SECTION(".halop.rom.rodata") - -#define HAL_GPIO_TEXT_SECTION \ - SECTION(".hal.gpio.text") - -#define HAL_GPIO_DATA_SECTION \ - SECTION(".hal.gpio.data") - -#define FWU_DATA_SECTION \ - SECTION(".fwu.data") - -#define FWU_RODATA_SECTION \ - SECTION(".fwu.rodata") - -#define FWU_TEXT_SECTION \ - SECTION(".fwu.text") - -//3 C-Cut ROM Patch/New functions location -#define C_CUT_ROM_TEXT_SECTION \ - SECTION(".cutc.rom.text") - -#define C_CUT_ROM_RODATA_SECTION \ - SECTION(".cutc.rom.rodata") - -#define C_CUT_ROM_DATA_SECTION \ - SECTION(".cutc.ram.data") -//3 No ROM code changed for D_Cut, so no D-Cut section -//3 E-Cut ROM Patch/New functions location -#define E_CUT_ROM_TEXT_SECTION \ - SECTION(".cute.rom.text") - -#define E_CUT_ROM_RODATA_SECTION \ - SECTION(".cute.rom.rodata") - -#define E_CUT_ROM_DATA_SECTION \ - SECTION(".cute.ram.data") - -/* #define FWUROM_DATA_SECTION \ - SECTION(".fwurom.data") */ - -/* #define FWUROM_RODATA_SECTION \ - SECTION(".fwurom.rodata") */ - -#define FWUROM_TEXT_SECTION \ - SECTION(".fwurom.text") - -#define XMPORT_ROM_TEXT_SECTION \ - SECTION(".xmportrom.text") - -#define XDMROM_TEXT_SECTION \ - SECTION(".xmodemrom.text") - - -//3 Store the Image 1 validate code -#define IMAGE1_VALID_PATTEN_SECTION \ - SECTION(".image1.validate.rodata") - -#define IMAGE2_VALID_PATTEN_SECTION \ - SECTION(".image2.validate.rodata") - -//3 Infra Section -#define INFRA_ROM_TEXT_SECTION \ - SECTION(".infra.rom.text") - -#define INFRA_ROM_DATA_SECTION \ - SECTION(".infra.rom.rodata") - -#define INFRA_RAM_TEXT_SECTION \ - SECTION(".infra.ram.text") - -#define INFRA_RAM_DATA_SECTION \ - SECTION(".infra.ram.data") - -#define INFRA_RAM_BSS_SECTION \ - SECTION(".infra.ram.bss") - -#define INFRA_START_SECTION \ - SECTION(".infra.ram.start") - - -//3 Pin Mutex Section -#define PINMUX_ROM_TEXT_SECTION \ - SECTION(".hal.rom.text") - -#define PINMUX_ROM_DATA_SECTION \ - SECTION(".hal.rom.rodata") - -#define PINMUX_RAM_TEXT_SECTION \ - SECTION(".hal.ram.text") - -#define PINMUX_RAM_DATA_SECTION \ - SECTION(".hal.ram.data") - -#define PINMUX_RAM_BSS_SECTION \ - SECTION(".hal.ram.bss") - - -//3 Monitor App Section -#define MON_ROM_TEXT_SECTION \ - SECTION(".mon.rom.text") - -#define MON_ROM_DATA_SECTION \ - SECTION(".mon.rom.rodata") - -#define MON_RAM_TEXT_SECTION \ - SECTION(".mon.ram.text") - -#define MON_RAM_DATA_SECTION \ - SECTION(".mon.ram.data") - -#define MON_RAM_BSS_SECTION \ - SECTION(".mon.ram.bss") - -#define MON_RAM_TAB_SECTION \ - SECTION(".mon.tab.rodata") - -//3 SDIO Section -#define SECTION_SDIO_RAM -#define SECTION_SDIO_ROM -#define SDIO_ROM_BSS_SECTION \ - SECTION(".sdio.rom.bss") -#define SDIO_ROM_TEXT_SECTION \ - SECTION(".sdio.rom.text") - -//3 SRAM Config Section -#define SRAM_BD_DATA_SECTION \ - SECTION(".bdsram.data") - -#define SRAM_BF_DATA_SECTION \ - SECTION(".bfsram.data") - -#define SRAM_HEAP_SECTION \ - SECTION(".sram.heap") - - -#define START_RAM_FUN_SECTION \ - SECTION(".start.ram.data") - -#define START_RAM_FUN_A_SECTION \ - SECTION(".start.ram.data.a") - -#define START_RAM_FUN_B_SECTION \ - SECTION(".start.ram.data.b") - -#define START_RAM_FUN_C_SECTION \ - SECTION(".start.ram.data.c") - -#define START_RAM_FUN_D_SECTION \ - SECTION(".start.ram.data.d") - -#define START_RAM_FUN_E_SECTION \ - SECTION(".start.ram.data.e") - -//Non-Flash Boot Section -#define NON_FLASH_BOOT_DATA_SECTION \ - SECTION(".nonflash.data") -#define NON_FLASH_BOOT_HEAP_SECTION \ - SECTION(".nonflash.heap") - -// USB OTG Section -#define OTG_ROM_BSS_SECTION \ - SECTION(".otg.rom.bss") - -#if defined(CONFIG_CHIP_E_CUT) || defined(CONFIG_USB_BOOT_SIM) -#define OTG_ROM_TEXT_SECTION \ - SECTION(".otg.rom.text") - -#define OTG_ROM_DATA_SECTION \ - SECTION(".otg.rom.rodata") - -#define START_OTG_RAM_FUN_SECTION \ - SECTION(".ram.otg.data.a") - -#define START_OTG_RAM_DATA_SECTION \ - SECTION(".ram.otg.data.b") - -#else -#define OTG_ROM_TEXT_SECTION \ -// SECTION(".otg.ram.text") - -#define OTG_ROM_DATA_SECTION \ -// SECTION(".otg.ram.rodata") - -#define START_OTG_RAM_FUN_SECTION \ -// SECTION(".ram.otg.data.a") - -#define START_OTG_RAM_DATA_SECTION \ -// SECTION(".ram.otg.data.b") -#endif - - -#define IMAGE2_START_RAM_FUN_SECTION \ - SECTION(".image2.ram.data") - -#define SDRAM_DATA_SECTION \ - SECTION(".sdram.data") - -#if defined(CONFIG_SDR_EN) -#define SDRAM_CODE_SECTION SECTION(".sdram.text") -#else -#define SDRAM_CODE_SECTION -#endif - -//3 Wlan Section -#define WLAN_ROM_TEXT_SECTION \ - SECTION(".wlan.rom.text") - -#define WLAN_ROM_DATA_SECTION \ - SECTION(".wlan.rom.rodata") - -#define WLAN_RAM_MAP_SECTION \ - SECTION(".wlan_ram_map") - -//3 Apple Section -#define APPLE_ROM_TEXT_SECTION \ - SECTION(".apple.rom.text") - -#define APPLE_ROM_DATA_SECTION \ - SECTION(".apple.rom.rodata") - -//3 Libc Section -#define LIBC_ROM_TEXT_SECTION \ - SECTION(".libc.rom.text") - -#define LIBC_ROM_DATA_SECTION \ - SECTION(".libc.rom.rodata") - -#define LIBC_RAM_BSS_SECTION \ - SECTION(".libc.ram.bss") - -//3 SSL Section -#define SSL_ROM_TEXT_SECTION \ - SECTION(".ssl.rom.text") - -#define SSL_ROM_DATA_SECTION \ - SECTION(".ssl.rom.rodata") - -#define SSL_RAM_MAP_SECTION \ - SECTION(".ssl_ram_map") - -#endif //_SECTION_CONFIG_H_ diff --git a/Firmware/RTLGDB/USDK/flasher.mk b/Firmware/RTLGDB/USDK/flasher.mk deleted file mode 100644 index 1332072..0000000 --- a/Firmware/RTLGDB/USDK/flasher.mk +++ /dev/null @@ -1,225 +0,0 @@ -# RTL8710 Flasher v0.0.alfa -# pvvx 2016.09.21 -# modified by A_D (2017.11.29) - -include userset.mk -include $(SDK_PATH)paths.mk - -ifeq ($(FLASHER), Jlink) -# Jlink FLASHER_SPEED ..4000 kHz -FLASHER_SPEED ?= 3500 -else -ifeq ($(FLASHER),stlink-v2) -# stlink-v2 FLASHER_SPEED ..1800 kHz -FLASHER_SPEED ?= 1800 -else -# over FLASHER_SPEED ..1000 kHz ? -FLASHER_SPEED ?= 1000 -endif -endif - -# COMPILED_BOOT if defined -> extract image1, boot head in elf -COMPILED_BOOT=1 -# COMPILED_BOOT_BIN if !defined -> use source startup boot -#COMPILED_BOOT_BIN=1 -# PADDINGSIZE defined -> image2 OTA -PADDINGSIZE =44k - -NMAPFILE = $(OBJ_DIR)/$(TARGET).nmap - -#RAM_IMAGE?= $(BIN_DIR)/ram.bin - -RAM1_IMAGE ?= $(BIN_DIR)/ram_1.bin -RAM1P_IMAGE ?= $(BIN_DIR)/ram_1.p.bin -RAM1R_IMAGE ?= $(BIN_DIR)/ram_1.r.bin - -RAM2_IMAGE = $(BIN_DIR)/ram_2.bin -RAM2P_IMAGE = $(BIN_DIR)/ram_2.p.bin -RAM2NS_IMAGE = $(BIN_DIR)/ram_2.ns.bin - -RAM3_IMAGE = $(BIN_DIR)/sdram.bin -RAM3P_IMAGE = $(BIN_DIR)/sdram.p.bin - -FLASH_IMAGE = $(BIN_DIR)/ram_all.bin -OTA_IMAGE = $(BIN_DIR)/ota.bin - -#all: FLASH_IMAGE = $(BIN_DIR)/ram_all.bin -#all: OTA_IMAGE = $(BIN_DIR)/ota.bin -mp: FLASH_IMAGE = $(BIN_DIR)/ram_all_mp.bin -mp: OTA_IMAGE = $(BIN_DIR)/ota_mp.bin - -TST_IMAGE = $(BIN_DIR)/ram_2.bin - -.PHONY: genbin1 genbin23 flashburn reset test readfullflash flashboot flashwebfs flash_OTA runram runsdram -.NOTPARALLEL: all mp genbin1 genbin23 flashburn reset test readfullflash _endgenbin flashwebfs flash_OTA - -all: $(ELFFILE) $(OTA_IMAGE) $(FLASH_IMAGE) _endgenbin -mp: $(ELFFILE) $(OTA_IMAGE) $(FLASH_IMAGE) _endgenbin - -genbin1: $(ELFFILE) $(RAM1P_IMAGE) - -genbin23: $(ELFFILE) $(OTA_IMAGE) $(FLASH_IMAGE) _endgenbin - - -_endgenbin: - @echo "-----------------------------------------------------------" - @echo "Image ($(OTA_IMAGE)) size $(shell printf '%d\n' $$(( $$(stat --printf="%s" $(OTA_IMAGE)) )) ) bytes" - @echo "Image ($(FLASH_IMAGE)) size $(shell printf '%d\n' $$(( $$(stat --printf="%s" $(FLASH_IMAGE)) )) ) bytes" - @echo "===========================================================" - -reset: - @$(JLINK_EXE) -Device CORTEX-M3 -If SWD -Speed 1000 -CommanderScript $(FLASHER_PATH)RTL_Reset.JLinkScript - -runram: - @$(JLINK_EXE) -Device CORTEX-M3 -If SWD -Speed 1000 -CommanderScript $(FLASHER_PATH)RTL_RunRAM.JLinkScript - -runsdram: - @$(JLINK_EXE) -Device CORTEX-M3 -If SWD -Speed 1000 -CommanderScript $(FLASHER_PATH)RTL_RunRAM_SDR.JLinkScript - -readfullflash: - @$(JLINK_EXE) -Device CORTEX-M3 -If SWD -Speed 1000 -CommanderScript $(FLASHER_PATH)RTL_FFlash.JLinkScript - -flashburn: - @$(GDB) --command=$(FLASHER_PATH)gdb_wrflash.jlink - -flashboot: - @echo define call1>$(FLASHER_PATH)file_info.jlink - @echo set '$$'ImageSize = $(shell printf '0x%X\n' $$(stat --printf="%s" $(BIN_DIR)/ram_1.p.bin))>>$(FLASHER_PATH)file_info.jlink - @echo set '$$'ImageAddr = 0x000000>>$(FLASHER_PATH)file_info.jlink - @echo end>>$(FLASHER_PATH)file_info.jlink - @echo define call2>>$(FLASHER_PATH)file_info.jlink - @echo FlasherWrite $(BIN_DIR)/ram_1.p.bin '$$'ImageAddr '$$'ImageSize>>$(FLASHER_PATH)file_info.jlink - @echo end>>$(FLASHER_PATH)file_info.jlink - @$(GDB) -x $(FLASHER_PATH)gdb_wrfile.jlink - -flashwebfs: - @echo define call1>$(FLASHER_PATH)file_info.jlink - @echo set '$$'ImageSize = $(shell printf '0x%X\n' $$(stat --printf="%s" $(BIN_DIR)/WEBFiles.bin))>>$(FLASHER_PATH)file_info.jlink - @echo set '$$'ImageAddr = 0x0D0000>>$(FLASHER_PATH)file_info.jlink - @echo end>>$(FLASHER_PATH)file_info.jlink - @echo define call2>>$(FLASHER_PATH)file_info.jlink - @echo FlasherWrite $(BIN_DIR)/WEBFiles.bin '$$'ImageAddr '$$'ImageSize>>$(FLASHER_PATH)file_info.jlink - @echo end>>$(FLASHER_PATH)file_info.jlink - @$(GDB) --command=$(FLASHER_PATH)gdb_wrfile.jlink - -flash_OTA: - @$(GDB) -x $(FLASHER_PATH)gdb_ota.jlink - - -$(NMAPFILE): $(ELFFILE) - @echo "===========================================================" - @echo "Build names map file" - @echo $@ - @$(NM) $< | sort > $@ -# @echo "===========================================================" - -$(FLASH_IMAGE): $(RAM1P_IMAGE) $(RAM2P_IMAGE) $(RAM3P_IMAGE) - @echo "===========================================================" - @echo "Make Flash image ($(FLASH_IMAGE))" -# @echo "===========================================================" - @mkdir -p $(BIN_DIR) - @rm -f $(FLASH_IMAGE) - @cat $(RAM1P_IMAGE) > $(FLASH_IMAGE) -# @chmod 777 $(FLASH_IMAGE) -ifdef PADDINGSIZE - @$(PADDING) $(PADDINGSIZE) 0xFF $(FLASH_IMAGE) -endif - @cat $(RAM2P_IMAGE) >> $(FLASH_IMAGE) - @cat $(RAM3P_IMAGE) >> $(FLASH_IMAGE) -# @echo "Image ($(FLASH_IMAGE)) size $(shell printf '%d\n' $$(( $$(stat --printf="%s" $(FLASH_IMAGE)) )) ) bytes" -# @echo "===========================================================" -# @rm $(BIN_DIR)/ram_*.p.bin - -$(OTA_IMAGE): $(RAM2NS_IMAGE) $(RAM3_IMAGE) - @echo "===========================================================" - @echo "Make OTA image ($(OTA_IMAGE))" - @rm -f $(OTA_IMAGE) - @cat $(RAM2NS_IMAGE) > $(OTA_IMAGE) - @cat $(RAM3P_IMAGE) >> $(OTA_IMAGE) -# @chmod 777 $(OTA_IMAGE) - @$(CHCKSUM) $(OTA_IMAGE) || true -# @echo "===========================================================" - -$(RAM1P_IMAGE): $(ELFFILE) $(NMAPFILE) - @echo "===========================================================" - @echo "Create image1r ($(RAM1R_IMAGE))" -# @echo "===========================================================" .bootloader -ifdef COMPILED_BOOT - @mkdir -p $(BIN_DIR) - @rm -f $(RAM1_IMAGE) $(RAM1R_IMAGE) -ifdef COMPILED_BOOT_BIN - @$(eval RAM1_START_ADDR := $(shell grep _binary_build_bin_ram_1_r_bin_start $(NMAPFILE) | awk '{print $$1}')) - @$(eval RAM1_END_ADDR := $(shell grep _binary_build_bin_ram_1_r_bin_end $(NMAPFILE) | awk '{print $$1}')) -else - @$(eval RAM1_START_ADDR := $(shell grep __ram_image1_text_start__ $(NMAPFILE) | awk '{print $$1}')) - @$(eval RAM1_END_ADDR := $(shell grep __ram_image1_text_end__ $(NMAPFILE) | awk '{print $$1}')) -endif - $(if $(RAM1_START_ADDR),,$(error "Not found __ram_image1_text_start__!")) - $(if $(RAM1_END_ADDR),,$(error "Not found __ram_image1_text_end__!")) -ifeq ($(RAM1_START_ADDR),$(RAM1_END_ADDR)) -ifdef COMPILED_BOOT_BIN - $(OBJCOPY) --change-section-address .boot.head=0x10000ba8 -j .boot.head -j .bootloader -Obinary $(ELFFILE) $(RAM1P_IMAGE) -else -# $(OBJCOPY) -j .rom_ram -Obinary $(ELFFILE) $(RAM_IMAGE) - $(OBJCOPY) -j .ram.start.table -j .ram_image1.text -Obinary $(ELFFILE) $(RAM1R_IMAGE) - $(PICK) 0x$(RAM1_START_ADDR) 0x$(RAM1_END_ADDR) $(RAM1R_IMAGE) $(RAM1P_IMAGE) head+reset_offset 0x0B000 -endif -else - $(error "BOOT-image size = 0") -# $(error Flasher: COMPILE_BOOT = No) -endif -else - @if [ -s $(RAM1R_IMAGE) ]; then echo "Use external $(RAM1R_IMAGE)!"; fi -endif - -$(RAM2P_IMAGE): $(ELFFILE) $(NMAPFILE) - @echo "===========================================================" - @echo "Create image2p ($(RAM2P_IMAGE))" -# @echo "===========================================================" - @mkdir -p $(BIN_DIR) - @rm -f $(RAM2_IMAGE) $(RAM2P_IMAGE) - @$(eval RAM2_START_ADDR = $(shell grep __ram_image2_text $(NMAPFILE) | grep _start__ | awk '{print $$1}')) - @$(eval RAM2_END_ADDR = $(shell grep __ram_image2_text $(NMAPFILE) | grep _end__ | awk '{print $$1}')) - $(if $(RAM2_START_ADDR),,$(error "Not found __ram_image2_text_start__!")) - $(if $(RAM2_END_ADDR),,$(error "Not found __ram_image2_text_end__!")) - @$(OBJCOPY) -j .image2.start.table -j .ram_image2.text -j .ram_image2.rodata -j .ram.data -Obinary $(ELFFILE) $(RAM2_IMAGE) - @$(PICK) 0x$(RAM2_START_ADDR) 0x$(RAM2_END_ADDR) $(RAM2_IMAGE) $(RAM2P_IMAGE) body+reset_offset+sig - -$(RAM2NS_IMAGE):$(ELFFILE) $(NMAPFILE) - @echo "===========================================================" - @echo "Create image2ns ($(RAM2NS_IMAGE))" -# @echo "===========================================================" - mkdir -p $(BIN_DIR) - rm -f $(RAM2_IMAGE) $(RAM2NS_IMAGE) - $(eval RAM2_START_ADDR = $(shell grep __ram_image2_text $(NMAPFILE) | grep _start__ | awk '{print $$1}')) - $(eval RAM2_END_ADDR = $(shell grep __ram_image2_text $(NMAPFILE) | grep _end__ | awk '{print $$1}')) - $(if $(RAM2_START_ADDR),,$(error "Not found __ram_image2_text_start__!")) - $(if $(RAM2_END_ADDR),,$(error "Not found __ram_image2_text_end__!")) - $(OBJCOPY) -j .image2.start.table -j .ram_image2.text -j .ram_image2.rodata -j .ram.data -Obinary $(ELFFILE) $(RAM2_IMAGE) - $(PICK) 0x$(RAM2_START_ADDR) 0x$(RAM2_END_ADDR) $(RAM2_IMAGE) $(RAM2NS_IMAGE) body+reset_offset - -$(RAM3_IMAGE): $(ELFFILE) $(NMAPFILE) - @echo "===========================================================" - @echo "Create image3 (SDRAM, $(RAM3P_IMAGE))" -# @echo "===========================================================" - @mkdir -p $(BIN_DIR) - @rm -f $(RAM3_IMAGE) $(RAM3P_IMAGE) - @$(eval RAM3_START_ADDR = $(shell grep __sdram_data_ $(NMAPFILE) | grep _start__ | awk '{print $$1}')) - @$(eval RAM3_END_ADDR = $(shell grep __sdram_data_ $(NMAPFILE) | grep _end__ | awk '{print $$1}')) - $(if $(RAM3_START_ADDR),,$(error "Not found __sdram_data_start__!")) - $(if $(RAM3_END_ADDR),,$(error "Not found __sdram_data_end__!")) -#ifneq ($(RAM3_START_ADDR),$(RAM3_END_ADDR)) - @echo $(RAM3_START_ADDR) $(RAM3_END_ADDR) - @$(OBJCOPY) -j .image3 -j .sdr_text -j .sdr_rodata -j .sdr_data -Obinary $(ELFFILE) $(RAM3_IMAGE) - $(PICK) 0x$(RAM3_START_ADDR) 0x$(RAM3_END_ADDR) $(RAM3_IMAGE) $(RAM3P_IMAGE) body+reset_offset -#else -# @rm -f $(RAM3_IMAGE) $(RAM3P_IMAGE) -# @echo "SDRAM not used (size = 0)" -#endif - -$(ELFFILE): - $(error Falsher: file $@ not found) - -clean: - @rm -f $(BIN_DIR)/*.bin - \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/flasher/RTL00ConsoleROM.JLinkScript b/Firmware/RTLGDB/USDK/flasher/RTL00ConsoleROM.JLinkScript deleted file mode 100644 index 2754aa8..0000000 --- a/Firmware/RTLGDB/USDK/flasher/RTL00ConsoleROM.JLinkScript +++ /dev/null @@ -1,6 +0,0 @@ -h -loadbin flasher/RTL00Console_ROM.bin 0x10000ba8 -r -w4 0x40000210,0x4011113 -g -q \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/flasher/RTL00Console_ROM.bin b/Firmware/RTLGDB/USDK/flasher/RTL00Console_ROM.bin deleted file mode 100644 index e83cb16..0000000 Binary files a/Firmware/RTLGDB/USDK/flasher/RTL00Console_ROM.bin and /dev/null differ diff --git a/Firmware/RTLGDB/USDK/flasher/RTL8710.jflash b/Firmware/RTLGDB/USDK/flasher/RTL8710.jflash deleted file mode 100644 index a5d0547..0000000 --- a/Firmware/RTLGDB/USDK/flasher/RTL8710.jflash +++ /dev/null @@ -1,119 +0,0 @@ - AppVersion = 47812 -[GENERAL] - ConnectMode = 0 - CurrentFile = "fullflash.bin" - DataFileSAddr = 0x98000000 - GUIMode = 0 - HostName = "" - TargetIF = 1 - USBPort = 0 - USBSerialNo = 0x00000000 -[JTAG] - IRLen = 0 - MultipleTargets = 0 - NumDevices = 0 - Speed0 = 400 - Speed1 = 12000 - TAP_Number = 0 - UseAdaptive0 = 0 - UseAdaptive1 = 0 - UseMaxSpeed0 = 0 - UseMaxSpeed1 = 0 -[CPU] - CheckCoreID = 0 - ChipName = "RTL8710AF" - ClockSpeed = 0x00000000 - Core = 0x030000FF - CoreID = 0x00000000 - CoreIDMask = 0x0F000FFF - DeviceFamily = 0x00000003 - EndianMode = 0 - HasInternalFlash = 0 - InitStep0_Action = "Reset" - InitStep0_Comment = "Reset and Halt" - InitStep0_Value0 = 0x00000000 - InitStep0_Value1 = 0x00000005 - InitStep1_Action = "Go" - InitStep1_Comment = "" - InitStep1_Value0 = 0x00000000 - InitStep1_Value1 = 0x00000000 - InitStep2_Action = "Reset" - InitStep2_Comment = "Reset and halt target" - InitStep2_Value0 = 0x00000000 - InitStep2_Value1 = 0x00000005 - InitStep3_Action = "Write Register" - InitStep3_Comment = "Only T=1" - InitStep3_Value0 = 0x00000010 - InitStep3_Value1 = 0x01000000 - InitStep4_Action = "Write 32bit" - InitStep4_Comment = "Setup SystemCoreClock" - InitStep4_Value0 = 0x40000014 - InitStep4_Value1 = 0x00000001 - InitStep5_Action = "Delay" - InitStep5_Comment = "" - InitStep5_Value0 = 0x00000000 - InitStep5_Value1 = 0x00000005 - InitStep6_Action = "Write 32bit" - InitStep6_Comment = "Write Page Size" - InitStep6_Value0 = 0x1FFFFFF0 - InitStep6_Value1 = 0x00000100 - InitStep7_Action = "Write 32bit" - InitStep7_Comment = "Write Sector Size" - InitStep7_Value0 = 0x1FFFFFF4 - InitStep7_Value1 = 0x00001000 - InitStep8_Action = "Write 32bit" - InitStep8_Comment = "Write Block Size" - InitStep8_Value0 = 0x1FFFFFF8 - InitStep8_Value1 = 0x00010000 - InitStep9_Action = "Write 32bit" - InitStep9_Comment = "Write Block Count" - InitStep9_Value0 = 0x1FFFFFFC - InitStep9_Value1 = 0x00000010 - NumExitSteps = 0 - NumInitSteps = 10 - RAMAddr = 0x10000000 - RAMSize = 0x00010000 - ScriptFile = "" - UseAutoSpeed = 0x00000001 - UseRAM = 1 - UseScriptFile = 0 -[FLASH] - aSectorSel[0] = - AutoDetect = 1 - BankName = "" - BankSelMode = 1 - BaseAddr = 0x98000000 - CheckId = 3 - CustomRAMCode = "RTL8710AF.hex" - DeviceName = "Auto detected flash memory" - EndBank = 8191 - NumBanks = 1 - OrgNumBits = 16 - OrgNumChips = 1 - StartBank = 0 - UseCustomRAMCode = 1 -[PRODUCTION] - AutoPerformsErase = 1 - AutoPerformsHardLock = 0 - AutoPerformsHardUnlock = 0 - AutoPerformsProgram = 1 - AutoPerformsSecure = 0 - AutoPerformsSoftLock = 0 - AutoPerformsSoftUnlock = 1 - AutoPerformsStartApp = 0 - AutoPerformsUnsecure = 0 - AutoPerformsVerify = 1 - EnableProductionMode = 0 - EnableTargetPower = 0 - EraseType = 2 - ProductionDelay = 0x000001F4 - ProductionThreshold = 0x00000BB8 - ProgramSN = 0 - SerialFile = "" - SNAddr = 0x00000000 - SNInc = 0x00000001 - SNLen = 0x00000004 - SNListFile = "" - SNValue = 0x00000001 - TargetPowerDelay = 0x00000014 - VerifyType = 1 diff --git a/Firmware/RTLGDB/USDK/flasher/RTL_FFlash.JLinkScript b/Firmware/RTLGDB/USDK/flasher/RTL_FFlash.JLinkScript deleted file mode 100644 index a9ed900..0000000 --- a/Firmware/RTLGDB/USDK/flasher/RTL_FFlash.JLinkScript +++ /dev/null @@ -1,17 +0,0 @@ -h -r -w4 0x40000230,0x0000D3C4 -w4 0x40000210,0x00200113 -w4 0x400002C0,0x00110001 -w4 0x40006008,0 -w4 0x4000602C,0 -w4 0x40006010,1 -w4 0x40006014,2 -w4 0x40006018,0 -w4 0x4000601C,0 -w4 0x4000604C,0 -savebin fullflash.bin 0x98000000 0x100000 -w4 0x40000210,0x211157 -r -g -q \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/flasher/RTL_RdROM.JLinkScript b/Firmware/RTLGDB/USDK/flasher/RTL_RdROM.JLinkScript deleted file mode 100644 index d57dabd..0000000 --- a/Firmware/RTLGDB/USDK/flasher/RTL_RdROM.JLinkScript +++ /dev/null @@ -1,11 +0,0 @@ -r0 -trst0 -r1 -trst1 -h -r -savebin bios-rom.bin 0x00000000 0x100000 -w4 0x40000210,0x211157 -r -g -q \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/flasher/RTL_Reset.JLinkScript b/Firmware/RTLGDB/USDK/flasher/RTL_Reset.JLinkScript deleted file mode 100644 index 6c89309..0000000 --- a/Firmware/RTLGDB/USDK/flasher/RTL_Reset.JLinkScript +++ /dev/null @@ -1,9 +0,0 @@ -r0 -trst0 -r1 -trst1 -h -r -w4 0x40000210,0x0011113 -g -q \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/flasher/RTL_RunRAM.JLinkScript b/Firmware/RTLGDB/USDK/flasher/RTL_RunRAM.JLinkScript deleted file mode 100644 index 214de5c..0000000 --- a/Firmware/RTLGDB/USDK/flasher/RTL_RunRAM.JLinkScript +++ /dev/null @@ -1,12 +0,0 @@ -r0 -trst0 -r1 -trst1 -h -r -loadbin Debug/bin/ram_1.r.bin 0x10000bc8 -loadbin Debug/bin/ram_2.bin 0x10006000 -r -w4 0x40000210,0x20011113 -g -q \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/flasher/RTL_RunRAM_SDR.JLinkScript b/Firmware/RTLGDB/USDK/flasher/RTL_RunRAM_SDR.JLinkScript deleted file mode 100644 index b396203..0000000 --- a/Firmware/RTLGDB/USDK/flasher/RTL_RunRAM_SDR.JLinkScript +++ /dev/null @@ -1,18 +0,0 @@ -r0 -trst0 -r1 -trst1 -h -r -loadbin Debug/bin/ram_1.r.bin 0x10000bc8 -loadbin Debug/bin/ram_2.bin 0x10006000 -r -w4 0x40000210,0x20011113 -w4 0x1FFF0000,0x12345678 -g -sleep 1000 -h -loadbin Debug/bin/sdram.bin 0x30000000 -w4 0x1FFF0000,1 -g -q \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/DAPLink-RTL00Console.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/DAPLink-RTL00Console.bat deleted file mode 100644 index bc0d13c..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/DAPLink-RTL00Console.bat +++ /dev/null @@ -1,7 +0,0 @@ -@echo off -call paths.bat -cd flasher -openocd -f interface/cmsis-dap.cfg -c "adapter_khz 1000" -f rtl8710.ocd -f cortex.ocd -c "init" -c "reset halt" -c "load_ram_binary RTL00Console_ROM.bin 0x10000BA8" -c "exit" -rem -c "shutdown" - - diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/DAPLink-RdFullFlash.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/DAPLink-RdFullFlash.bat deleted file mode 100644 index 5861662..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/DAPLink-RdFullFlash.bat +++ /dev/null @@ -1,7 +0,0 @@ -@echo off -call paths.bat -cd flasher -openocd -f interface/cmsis-dap.cfg -c "adapter_khz 1000" -f rtl8710.ocd -f cortex.ocd -c "init" -c "reset halt" -c "rtl8710_flash_read_id" -c "adapter_khz 5000" -c "rtl8710_flash_read ../fullflash.bin 0 1048576" -c "shutdown" -echo flash read fullflash.bin -pause - diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/DAPLink-Reset.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/DAPLink-Reset.bat deleted file mode 100644 index aceee70..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/DAPLink-Reset.bat +++ /dev/null @@ -1,6 +0,0 @@ -@echo off -call paths.bat -@cd flasher -openocd -f interface/cmsis-dap.cfg -c "adapter_khz 1000" -f rtl8710.ocd -f cortex.ocd -c "init" -c "reset halt" -c "restart_from_falsh" -c "shutdown" -rem - diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/DAPLink_WrFullFlash.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/DAPLink_WrFullFlash.bat deleted file mode 100644 index bd1cf72..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/DAPLink_WrFullFlash.bat +++ /dev/null @@ -1,6 +0,0 @@ -@echo off -call paths.bat -cd flasher -openocd -f interface/cmsis-dap.cfg -c "adapter_khz 3500" -f rtl8710.ocd -f cortex.ocd -c "init" -c "reset halt" -c "rtl8710_flash_read_id" -c "rtl8710_flash_auto_erase 1" -c "rtl8710_flash_auto_verify 1" -c "rtl8710_flash_write fullflash.bin 0" -c "shutdown" -pause - diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink-RTL00ConsoleROM.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink-RTL00ConsoleROM.bat deleted file mode 100644 index d8488c6..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink-RTL00ConsoleROM.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -call paths.bat -start JLink.exe -Device CORTEX-M3 -If SWD -Speed 4000 flasher\RTL00ConsoleROM.JLinkScript diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink-RdFullFlash.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink-RdFullFlash.bat deleted file mode 100644 index de5d955..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink-RdFullFlash.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -call paths.bat -JLink.exe -Device CORTEX-M3 -If SWD -Speed 10000 flasher/RTL_FFlash.JLinkScript diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink-Reset.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink-Reset.bat deleted file mode 100644 index 51ea2a8..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink-Reset.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -call paths.bat -JLink.exe -Device CORTEX-M3 -If SWD -Speed 1000 flasher\RTL_Reset.JLinkScript diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink-RunRAM.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink-RunRAM.bat deleted file mode 100644 index 4282a8e..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink-RunRAM.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -call paths.bat -start JLink.exe -Device CORTEX-M3 -If SWD -Speed 4000 flasher\RTL_RunRAM.JLinkScript diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDB-RdFullFlash.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDB-RdFullFlash.bat deleted file mode 100644 index 76865da..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDB-RdFullFlash.bat +++ /dev/null @@ -1,6 +0,0 @@ -@echo off -call paths.bat -start JLinkGDBServer.exe -device Cortex-M3 -if SWD -ir -endian little -speed 1000 -arm-none-eabi-gdb.exe -x flasher/gdb_rdflash.jlink -taskkill /F /IM JLinkGDBServer.exe - diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDB-RunRAM.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDB-RunRAM.bat deleted file mode 100644 index 323aa3a..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDB-RunRAM.bat +++ /dev/null @@ -1,15 +0,0 @@ -@echo off -call paths.bat -@if exist build\obj\build.axf goto run -echo File 'build\obj\build.axf' not found! -echo Build project... -mingw32-make.exe -f Makefile all -@if not exist build\obj\build.axf goto err -:run -start JLinkGDBServer.exe -device Cortex-M3 -if SWD -ir -endian little -speed 1000 -arm-none-eabi-gdb.exe -x flasher/gdb_run_ram.jlink -taskkill /F /IM JLinkGDBServer.exe -goto end -:err -echo Error! -:end \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDB-WrFlash.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDB-WrFlash.bat deleted file mode 100644 index c70f651..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDB-WrFlash.bat +++ /dev/null @@ -1,21 +0,0 @@ -@echo off -call paths.bat -@if %1x==x goto xxx -set img_file=%1 -goto run -:xxx -set img_file=build/bin/ram_all.bin -:run -echo define call1>flasher/flash_file.jlink -echo SetFirwareSize %img_file%>>flasher/flash_file.jlink -echo end>>flasher/flash_file.jlink -echo define call2>>flasher/flash_file.jlink -echo FlasherWrite %img_file% 0 $Image1Size>>flasher/flash_file.jlink -echo end>>flasher/flash_file.jlink -echo define call3>>flasher/flash_file.jlink -echo FlasherWrite %img_file% $Image2Addr $Image2Size>>flasher/flash_file.jlink -echo end>>flasher/flash_file.jlink -start JLinkGDBServer.exe -device Cortex-M3 -if SWD -ir -endian little -speed 3500 -arm-none-eabi-gdb.exe -x flasher/gdb_wrflash.jlink -taskkill /F /IM JLinkGDBServer.exe - diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDBServer.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDBServer.bat deleted file mode 100644 index c356ac1..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDBServer.bat +++ /dev/null @@ -1,6 +0,0 @@ -@echo off -call paths.bat -start JLinkGDBServer.exe -device Cortex-M3 -if SWD -ir -endian little -speed 1000 -arm-none-eabi-gdb.exe -x flasher/gdb_init.jlink -taskkill /F /IM JLinkGDBServer.exe - diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDB_OTA.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDB_OTA.bat deleted file mode 100644 index f64317e..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkGDB_OTA.bat +++ /dev/null @@ -1,15 +0,0 @@ -@echo off -call paths.bat -@if exist build\bin\ota.bin goto run -echo File 'build\obj\ota.bin' not found! -echo Build project... -mingw32-make.exe -f Makefile all -@if not exist build\bin\ota.bin goto err -:run -start start JLinkGDBServer.exe -device Cortex-M3 -if SWD -ir -endian little -speed 1000 -arm-none-eabi-gdb.exe -x flasher/gdb_ota.jlink -taskkill /F /IM JLinkGDBServer.exe -goto end -:err -echo Error! -:end \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkOCD-RdFullFlash.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkOCD-RdFullFlash.bat deleted file mode 100644 index 4708bea..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLinkOCD-RdFullFlash.bat +++ /dev/null @@ -1,7 +0,0 @@ -@echo off -call paths.bat -cd flasher -openocd -f interface/Jlink.cfg -c "adapter_khz 3500" -f rtl8710.ocd -f cortex.ocd -c "init" -c "reset halt" -c "rtl8710_flash_read_id" -c "adapter_khz 3900" -c "rtl8710_flash_read ../fullflash.bin 0 1048576" -c "shutdown" -echo flash read fullflash.bin -pause - diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink_RdFullFlash.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink_RdFullFlash.bat deleted file mode 100644 index 450e141..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JLink_RdFullFlash.bat +++ /dev/null @@ -1,6 +0,0 @@ -@echo off -call paths.bat -openocd -f interface/Jlink.cfg -c "adapter_khz 1000" -f rtl8710.ocd -f cortex.ocd -c "init" -c "reset halt" -c "adapter_khz 3500" -c "rtl8710_flash_read_id" -c "rtl8710_flash_read ../fullflash.bin 0 1048576" -c "shutdown" -echo flash read fullflash.bin -pause - diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JlinkOpenOCD.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JlinkOpenOCD.bat deleted file mode 100644 index 6e354f6..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/JlinkOpenOCD.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -call paths.bat -taskkill /F /IM openocd.exe -start openocd -f interface\Jlink.cfg -f flasher\ameba1.cfg diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/STLink-RdFullFlash.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/STLink-RdFullFlash.bat deleted file mode 100644 index af82648..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/STLink-RdFullFlash.bat +++ /dev/null @@ -1,7 +0,0 @@ -@echo off -call paths.bat -cd flasher -openocd -f interface/stlink-v2.cfg -c "adapter_khz 1000" -f rtl8710.ocd -f cortex.ocd -c "init" -c "reset halt" -c "rtl8710_flash_read_id" -c "adapter_khz 5000" -c "rtl8710_flash_read ../fullflash.bin 0 1048576" -c "shutdown" -echo flash read fullflash.bin -pause - diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/STLink-Reset.bat b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/STLink-Reset.bat deleted file mode 100644 index d4aeb47..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/STLink-Reset.bat +++ /dev/null @@ -1,6 +0,0 @@ -@echo off -call paths.bat -@cd flasher -openocd -f interface/stlink-v2.cfg -c "adapter_khz 1000" -f rtl8710.ocd -f cortex.ocd -c "init" -c "reset halt" -c "cortex_reboot" -c "shutdown" -rem - diff --git a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/ameba_tools.py b/Firmware/RTLGDB/USDK/flasher/add_sample_bat/ameba_tools.py deleted file mode 100644 index 99e62c1..0000000 --- a/Firmware/RTLGDB/USDK/flasher/add_sample_bat/ameba_tools.py +++ /dev/null @@ -1,40 +0,0 @@ -import jlinkarm as jl - -def loaddll(dll_path): - jl.loadJLinkARMdll(dll_path) - jl.open() - if jl.is_connected == 0: - raise RuntimeError('Jlink not connected') - jl.exec_command('device Cortex-M3', 0, 0) - jl.exec_command('endian little', 0, 0) - jl.tif_select(1) - jl.set_speed(1000) - jl.clear_RESET() - jl.clear_TRST() - time.sleep(0.01) - jl.set_RESET() - jl.set_TRST() - jl.reset() - jl.halt() - jl.set_speed(3500) - -def ram_all(binfile, image1=True, image2=True): - bin = None - with file(binfile, 'rb') as f: - bin = f.read() - get_dword = lambda address: struct.unpack('= 2: - if sys.argv[1] == '-h': - print 'Usage: ldram.py ram_all.bin' - exit(0) - imgfilename = 'build/bin/ram_all.bin' - - if len(sys.argv) > 1: - if sys.argv[1]: - imgfilename = sys.argv[1] - try: - ff = open(imgfilename, "rb") - except: - print "Error file open " + imgfilename - exit(1) - jl.loadJLinkARMdll(dllfilename) - jl.open() - if jl.is_connected == 0: - raise RuntimeError('Jlink not connected') - jl.exec_command('device Cortex-M3', 0, 0) - jl.exec_command('endian little', 0, 0) - jl.tif_select(1) - jl.set_speed(1000) - jl.clear_RESET() - jl.clear_TRST() - time.sleep(0.01) - jl.set_RESET() - jl.set_TRST() - jl.reset() - jl.halt() - jl.set_speed(3500) - bin = ff.read() - get_dword = lambda address: struct.unpack('> 16) & 0x0ff) - printf "Flash ID = 0x%08x : MX25L8006E (%d kbytes)\n", $id, $rtl8710_flasher_capacity>>10 - else - set $rtl8710_flasher_capacity = {int}(1024*1024) - printf "Flash ID = 0x%08x : (%d kbytes)\n", $id, $rtl8710_flasher_capacity>>10 - end - printf "RTL8710 flasher initialized\n" -else -printf "reinitializing RTL8710 flasher\n" -end -end -################## -# FlasherRdBlock # -################## -define FlasherRdBlock -#printf "FlashRdBlock 0x%08x, 0x%08x\n", $arg0, $arg1 -set {int}($rtl8710_flasher_buffer + 0x04) = 3 -set {int}($rtl8710_flasher_buffer + 0x08) = 0 -set {int}($rtl8710_flasher_buffer + 0x10) = $arg0 -set {int}($rtl8710_flasher_buffer + 0x14) = $arg1 -set {int}($rtl8710_flasher_buffer + 0x00) = 1 -FlasherWait -set $status = {int}($rtl8710_flasher_buffer + 0x08) -if $status > 0 - error "read error, offset 0x%08x", $arg0 -end -end -################## -# FlasherWrBlock # -################## -define FlasherWrBlock -#printf "FlashWrBlock 0x%08x, 0x%08x\n", $arg0, $arg1 -set {int}($rtl8710_flasher_buffer + 0x04) = 4 -set {int}($rtl8710_flasher_buffer + 0x08) = 0 -set {int}($rtl8710_flasher_buffer + 0x10) = $arg0 -set {int}($rtl8710_flasher_buffer + 0x14) = $arg1 -set {int}($rtl8710_flasher_buffer + 0x00) = 1 -FlasherWait -set $status = {int}($rtl8710_flasher_buffer + 0x08) -if $status > 0 - error "write error, offset 0x%08x", $arg0 -end -end -################## -# FlasherVrBlock # -################## -define FlasherVrBlock -#printf "FlashVrBlock 0x%08x, 0x%08x\n", $arg0, $arg1 -set {int}($rtl8710_flasher_buffer + 0x04) = 5 -set {int}($rtl8710_flasher_buffer + 0x08) = 0 -set {int}($rtl8710_flasher_buffer + 0x10) = $arg0 -set {int}($rtl8710_flasher_buffer + 0x14) = $arg1 -set {int}($rtl8710_flasher_buffer + 0x00) = 1 -FlasherWait -set $status = {int}($rtl8710_flasher_buffer + 0x08) -if $status > 0 - set $status = {int}($rtl8710_flasher_buffer + 0x0C) - set $status = {int}($status + $arg0) - error "verify error, offset 0x%08x", $status -end -end -################# -# FlashSecErase # -################# -define FlashSecErase -#printf "FlashSecErase 0x%08x, 0x%08x\n", $rtl8710_flasher_buffer, $arg0 -set {int}($rtl8710_flasher_buffer + 0x04) = 2 -set {int}($rtl8710_flasher_buffer + 0x08) = 0 -set {int}($rtl8710_flasher_buffer + 0x10) = $arg0 -set {int}($rtl8710_flasher_buffer + 0x00) = 1 -FlasherWait -end -################ -# FlasherWrite # -################ -define FlasherWrite -set $sector = 0 -set $offset = 0 -set $size = $arg2 -while $offset < $size - set $len = $size - $offset - if $len > $rtl8710_flasher_buffer_size - set $len = $rtl8710_flasher_buffer_size - end - set $flash_offset = $arg1 + $offset - printf "write offset 0x%08x\n", $flash_offset - set $parms1 = $rtl8710_flasher_buffer + 0x20 - $offset - set $parms2 = $offset - set $parms3 = $offset + $len - restore $arg0 binary $parms1 $parms2 $parms3 - if $rtl8710_flasher_auto_erase != 0 - set $count_i = $flash_offset - while $count_i < ($flash_offset + $len) - set $sector = $count_i/$rtl8710_flasher_sector_size - if $rtl8710_flasher_auto_erase_sector != $sector - set $parms1 = $sector * $rtl8710_flasher_sector_size - printf "erase sector %d at 0x%08x\n", $sector, $parms1 - FlashSecErase $parms1 - set $rtl8710_flasher_auto_erase_sector = $sector - end - set $count_i = $count_i + 1 - end - end - FlasherWrBlock $flash_offset $len - printf "write %d bytes at 0x%08x\n", $len, $flash_offset - if $rtl8710_flasher_auto_verify != 0 - printf "verify offset 0x%08x len %d\n", $flash_offset, $len - FlasherVrBlock $flash_offset $len - end - set $offset = $offset + $rtl8710_flasher_buffer_size -end -end -######################################### -InitJlink -SystemInit -SetClk166MHz -SPI_Init -GetOtaSize build/bin/ota.bin -if $ImageOtaSize != 0 - FlasherInit - FlasherLoad flasher/rtl8710_flasher.bin - set $FixOtaAddr = 0x80000 - set $pbuffer = $rtl8710_flasher_buffer + 0x20 - FlasherRdBlock 0x9000 0x1000 - set $ImageOtaAddr = {int}($pbuffer) - if $ImageOtaAddr != $FixOtaAddr - printf "ImageOtaAddr = 0x%08x - Invalid!\n", $ImageOtaAddr - set {int}($pbuffer) = $FixOtaAddr - set $Temp = $ImageOtaAddr & $FixOtaAddr - if $Temp != $FixOtaAddr - printf "FlashSecErase at 0x9000\n" - FlashSecErase 0x9000 - printf "Write offset 0x9000 4096 bytes\n" - FlasherWrBlock 0x9000 0x1000 - else - printf "Write offset 0x9000 4 bytes\n" - FlasherWrBlock 0x9000 0x0004 - end - end - FlasherWrite build/bin/ota.bin $FixOtaAddr $ImageOtaSize - restore build/bin/ota.bin binary $pbuffer 0 0x1000 - set {int}($pbuffer + 0x08) = 0x35393138 - set {int}($pbuffer + 0x0C) = 0x31313738 - FlasherWrBlock $FixOtaAddr 0x10 - FlashImagesInfo -end -monitor reset -SetBootFlash -monitor go -quit diff --git a/Firmware/RTLGDB/USDK/flasher/gdb_rdflash.jlink b/Firmware/RTLGDB/USDK/flasher/gdb_rdflash.jlink deleted file mode 100644 index 674ce48..0000000 --- a/Firmware/RTLGDB/USDK/flasher/gdb_rdflash.jlink +++ /dev/null @@ -1,17 +0,0 @@ -# GDB Jlink read fullflash -# Init -source -v flasher/gdb_flasher.jlink -InitJlink -SystemInit -SPI_Init -monitor speed 12000 -#FlashInfo -# Read FullFlash -printf "Read FullFlash:\n" -set $dumpstartaddr = $SPI_FLASH_BASE -set $dumpendaddr = $SPI_FLASH_BASE + 0x100000 -printf "Start addr of dumping = 0x%08x\n", $dumpstartaddr -printf "End addr of dumping = 0x%08x\n", $dumpendaddr -dump binary memory ../fullflash.bin $dumpstartaddr $dumpendaddr -printf "FullFlash saved in ./build/bin/fullflash.bin - OK.\n" -quit diff --git a/Firmware/RTLGDB/USDK/flasher/gdb_run_ram.jlink b/Firmware/RTLGDB/USDK/flasher/gdb_run_ram.jlink deleted file mode 100644 index 0c604f9..0000000 --- a/Firmware/RTLGDB/USDK/flasher/gdb_run_ram.jlink +++ /dev/null @@ -1,11 +0,0 @@ -# -# J-LINK GDB SERVER initialization -# -source -v flasher/gdb_flasher.jlink -InitJlink -load Debug/obj/build.axf -SetBootCall4 -monitor reset -monitor go -quit - diff --git a/Firmware/RTLGDB/USDK/flasher/gdb_wrfile.jlink b/Firmware/RTLGDB/USDK/flasher/gdb_wrfile.jlink deleted file mode 100644 index 90c6837..0000000 --- a/Firmware/RTLGDB/USDK/flasher/gdb_wrfile.jlink +++ /dev/null @@ -1,171 +0,0 @@ -#---------------------------------------------------------------------------------------------------------------- -# FlasherInit # -#---------------------------------------------------------------------------------------------------------------- -define FlasherInit -set $rtl8710_flasher_capacity = 0 -set $rtl8710_flasher_auto_erase = 1 -set $rtl8710_flasher_auto_verify = 1 -set $rtl8710_flasher_firmware_ptr = 0x10001000 -set $rtl8710_flasher_buffer = 0x10008000 -set $rtl8710_flasher_buffer_size = 421888 -set $rtl8710_flasher_sector_size = 4096 -set $rtl8710_flasher_auto_erase_sector = 0xFFFFFFFF -end - -#---------------------------------------------------------------------------------------------------------------- -# FlasherWait # -#---------------------------------------------------------------------------------------------------------------- -define FlasherWait -set $fresult = {int}($rtl8710_flasher_buffer) -while ($fresult != 0) -set $fresult = {int}($rtl8710_flasher_buffer) -end -end - -#---------------------------------------------------------------------------------------------------------------- -# FlasherLoad # -#---------------------------------------------------------------------------------------------------------------- -define FlasherLoad -if $rtl8710_flasher_capacity == 0 - printf "initializing RTL8710 flasher\n" - restore $arg0 binary $rtl8710_flasher_firmware_ptr 0 968 - monitor reset - set $pc = $rtl8710_flasher_firmware_ptr - set $sp = 0x1ffffffc - set {int}($rtl8710_flasher_buffer + 0x08) = 0 - set {int}($rtl8710_flasher_buffer + 0x00) = 1 - #continue - monitor go - FlasherWait - set $id = {int}($rtl8710_flasher_buffer + 0x0C) - set $rtl8710_flasher_capacity = 1 << (($id >> 16) & 0x0ff) - if ($id == 0x1420c2) - printf "Flash ID = 0x%08x : MX25L8006E (%d kbytes)\n", $id, $rtl8710_flasher_capacity>>10 - else - printf "Flash ID = 0x%08x : (%d kbytes)\n", $id, $rtl8710_flasher_capacity>>10 - end - printf "RTL8710 flasher initialized\n" -else -printf "reinitializing RTL8710 flasher\n" -end -end - -#---------------------------------------------------------------------------------------------------------------- -# FlasherWrBlock # -#---------------------------------------------------------------------------------------------------------------- -define FlasherWrBlock -#printf "FlashWrBlock 0x%08x, 0x%08x\n", $arg0, $arg1 -set {int}($rtl8710_flasher_buffer + 0x04) = 4 -set {int}($rtl8710_flasher_buffer + 0x08) = 0 -set {int}($rtl8710_flasher_buffer + 0x10) = $arg0 -set {int}($rtl8710_flasher_buffer + 0x14) = $arg1 -set {int}($rtl8710_flasher_buffer + 0x00) = 1 -FlasherWait -set $status = {int}($rtl8710_flasher_buffer + 0x08) -if $status > 0 - error "write error, offset 0x%08x", $arg0 -end -end - -#---------------------------------------------------------------------------------------------------------------- -# FlasherVrBlock # -#---------------------------------------------------------------------------------------------------------------- -define FlasherVrBlock -#printf "FlashVrBlock 0x%08x, 0x%08x\n", $arg0, $arg1 -set {int}($rtl8710_flasher_buffer + 0x04) = 5 -set {int}($rtl8710_flasher_buffer + 0x08) = 0 -set {int}($rtl8710_flasher_buffer + 0x10) = $arg0 -set {int}($rtl8710_flasher_buffer + 0x14) = $arg1 -set {int}($rtl8710_flasher_buffer + 0x00) = 1 -FlasherWait -set $status = {int}($rtl8710_flasher_buffer + 0x08) -if $status > 0 - set $status = {int}($rtl8710_flasher_buffer + 0x0C) - set $status = {int}($status + $arg0) - error "verify error, offset 0x%08x", $status -end -end - -#---------------------------------------------------------------------------------------------------------------- -# FlashSecErase # -#---------------------------------------------------------------------------------------------------------------- -define FlashSecErase -#printf "FlashSecErase 0x%08x, 0x%08x\n", $rtl8710_flasher_buffer, $arg0 -set {int}($rtl8710_flasher_buffer + 0x04) = 2 -set {int}($rtl8710_flasher_buffer + 0x08) = 0 -set {int}($rtl8710_flasher_buffer + 0x10) = $arg0 -set {int}($rtl8710_flasher_buffer + 0x00) = 1 -FlasherWait -end - -#---------------------------------------------------------------------------------------------------------------- -# FlasherWrite # -#---------------------------------------------------------------------------------------------------------------- -define FlasherWrite -set $sector = 0 -set $offset = 0 -set $size = $arg2 -while $offset < $size - set $len = $size - $offset - if $len > $rtl8710_flasher_buffer_size - set $len = $rtl8710_flasher_buffer_size - end - set $flash_offset = $arg1 + $offset - printf "write offset 0x%08x\n", $flash_offset - set $parms1 = $rtl8710_flasher_buffer + 0x20 - $offset - set $parms2 = $offset - set $parms3 = $offset + $len - restore $arg0 binary $parms1 $parms2 $parms3 - if $rtl8710_flasher_auto_erase != 0 - set $count_i = $flash_offset - while $count_i < ($flash_offset + $len) - set $sector = $count_i/$rtl8710_flasher_sector_size - if $rtl8710_flasher_auto_erase_sector != $sector - set $parms1 = $sector * $rtl8710_flasher_sector_size - printf "erase sector %d at 0x%08x\n", $sector, $parms1 - FlashSecErase $parms1 - set $rtl8710_flasher_auto_erase_sector = $sector - end - set $count_i = $count_i + 1 - end - end - FlasherWrBlock $flash_offset $len - printf "wrote %d bytes at 0x%08x\n", $len, $flash_offset - if $rtl8710_flasher_auto_verify != 0 - printf "verify offset 0x%08x len %d\n", $flash_offset, $len - FlasherVrBlock $flash_offset $len - end - set $offset = $offset + $rtl8710_flasher_buffer_size -end -end - -#---------------------------------------------------------------------------------------------------------------- -#---------------------------------------------------------------------------------------------------------------- - -source -v USDK/flasher/gdb_flasher.jlink -source -v USDK/flasher/file_info.jlink - -InitJlink -SystemInit -SetClk166MHz -SPI_Init -FlasherInit -FlasherLoad USDK/flasher/rtl8710_flasher.bin -call1 -if $ImageSize != 0 -set $ImageEnd = $ImageSize + $ImageAddr + 0x4000 -if $rtl8710_flasher_capacity >= $ImageEnd - printf "Write Image size %d to Flash addr 0x%08x:\n", $ImageSize, $ImageAddr - call2 -else - printf "Error: Image size is too big!\n" -end -else - printf "Error: Image size is zero!\n" -end -FlashImagesInfo -monitor reset -SetBootFlash -monitor go -printf "Load Complete!\n" -quit diff --git a/Firmware/RTLGDB/USDK/flasher/gdb_wrflash.jlink b/Firmware/RTLGDB/USDK/flasher/gdb_wrflash.jlink deleted file mode 100644 index 95f3d80..0000000 --- a/Firmware/RTLGDB/USDK/flasher/gdb_wrflash.jlink +++ /dev/null @@ -1,183 +0,0 @@ -#---------------------------------------------------------------------------------------------------------------- -# FlasherInit --------------------------------------------------------------------------------------------------- -#---------------------------------------------------------------------------------------------------------------- -define FlasherInit -set $rtl8710_flasher_capacity = 0 -set $rtl8710_flasher_auto_erase = 1 -set $rtl8710_flasher_auto_verify = 1 -set $rtl8710_flasher_firmware_ptr = 0x10001000 -set $rtl8710_flasher_buffer = 0x10008000 -set $rtl8710_flasher_buffer_size = 421888 -set $rtl8710_flasher_sector_size = 4096 -set $rtl8710_flasher_auto_erase_sector = 0xFFFFFFFF -end - -#---------------------------------------------------------------------------------------------------------------- -# FlasherWait --------------------------------------------------------------------------------------------------- -#---------------------------------------------------------------------------------------------------------------- - -define FlasherWait -set $fresult = {int}($rtl8710_flasher_buffer) -while ($fresult != 0) -set $fresult = {int}($rtl8710_flasher_buffer) -end -end - -#---------------------------------------------------------------------------------------------------------------- -# FlasherLoad --------------------------------------------------------------------------------------------------- -#---------------------------------------------------------------------------------------------------------------- - -define FlasherLoad -if $rtl8710_flasher_capacity == 0 - printf "initializing RTL871x flasher\n" - restore $arg0 binary $rtl8710_flasher_firmware_ptr 0 968 - monitor reset - set $pc = $rtl8710_flasher_firmware_ptr - set $sp = 0x1ffffffc - set {int}($rtl8710_flasher_buffer + 0x08) = 0 - set {int}($rtl8710_flasher_buffer + 0x00) = 1 - monitor go - FlasherWait - set $id = {int}($rtl8710_flasher_buffer + 0x0C) - set $rtl8710_flasher_capacity = 1 << (($id >> 16) & 0x0ff) - if ($id == 0x1420c2) - printf "Flash ID = 0x%08x : MX25L8006E (%d kbytes)\n", $id, $rtl8710_flasher_capacity>>10 - else - printf "Flash ID = 0x%08x : ? (default: %d kbytes)\n", $id, $rtl8710_flasher_capacity>>10 - end - printf "RTL871x flasher initialized\n" -else -printf "reinitializing RTL871x flasher\n" -end -end - -#---------------------------------------------------------------------------------------------------------------- -# FlasherWrBlock ------------------------------------------------------------------------------------------------ -#---------------------------------------------------------------------------------------------------------------- - -define FlasherWrBlock -#printf "FlashWrBlock 0x%08x, 0x%08x\n", $arg0, $arg1 -set {int}($rtl8710_flasher_buffer + 0x04) = 4 -set {int}($rtl8710_flasher_buffer + 0x08) = 0 -set {int}($rtl8710_flasher_buffer + 0x10) = $arg0 -set {int}($rtl8710_flasher_buffer + 0x14) = $arg1 -set {int}($rtl8710_flasher_buffer + 0x00) = 1 -FlasherWait -set $status = {int}($rtl8710_flasher_buffer + 0x08) -if $status > 0 - error "write error, offset 0x%08x", $arg0 -end -end - -#---------------------------------------------------------------------------------------------------------------- -# FlasherVrBlock ------------------------------------------------------------------------------------------------ -#---------------------------------------------------------------------------------------------------------------- -define FlasherVrBlock -#printf "FlashVrBlock 0x%08x, 0x%08x\n", $arg0, $arg1 -set {int}($rtl8710_flasher_buffer + 0x04) = 5 -set {int}($rtl8710_flasher_buffer + 0x08) = 0 -set {int}($rtl8710_flasher_buffer + 0x10) = $arg0 -set {int}($rtl8710_flasher_buffer + 0x14) = $arg1 -set {int}($rtl8710_flasher_buffer + 0x00) = 1 -FlasherWait -set $status = {int}($rtl8710_flasher_buffer + 0x08) -if $status > 0 - set $status = {int}($rtl8710_flasher_buffer + 0x0C) - set $status = {int}($status + $arg0) - error "verify error, offset 0x%08x", $status -end -end - -#---------------------------------------------------------------------------------------------------------------- -# FlashSecErase ------------------------------------------------------------------------------------------------- -#---------------------------------------------------------------------------------------------------------------- - -define FlashSecErase -#printf "FlashSecErase 0x%08x, 0x%08x\n", $rtl8710_flasher_buffer, $arg0 -set {int}($rtl8710_flasher_buffer + 0x04) = 2 -set {int}($rtl8710_flasher_buffer + 0x08) = 0 -set {int}($rtl8710_flasher_buffer + 0x10) = $arg0 -set {int}($rtl8710_flasher_buffer + 0x00) = 1 -FlasherWait -end - -#---------------------------------------------------------------------------------------------------------------- -# FlasherWrite -------------------------------------------------------------------------------------------------- -#---------------------------------------------------------------------------------------------------------------- - -define FlasherWrite -set $sector = 0 -set $offset = 0 -set $size = $arg2 -while $offset < $size - set $len = $size - $offset - if $len > $rtl8710_flasher_buffer_size - set $len = $rtl8710_flasher_buffer_size - end - set $flash_offset = $arg1 + $offset - printf "write offset 0x%08x\n", $flash_offset - set $parms1 = $rtl8710_flasher_buffer + 0x20 - $flash_offset - set $parms2 = $flash_offset - set $parms3 = $flash_offset + $len - restore $arg0 binary $parms1 $parms2 $parms3 - if $rtl8710_flasher_auto_erase != 0 - set $count_i = $flash_offset - while $count_i < ($flash_offset + $len) - set $sector = $count_i/$rtl8710_flasher_sector_size - if $rtl8710_flasher_auto_erase_sector != $sector - set $parms1 = $sector * $rtl8710_flasher_sector_size - printf "erase sector %d at 0x%08x\n", $sector, $parms1 - FlashSecErase $parms1 - set $rtl8710_flasher_auto_erase_sector = $sector - end - set $count_i = $count_i + 1 - end - end - FlasherWrBlock $flash_offset $len - printf "wrote %d bytes at 0x%08x\n", $len, $flash_offset - if $rtl8710_flasher_auto_verify != 0 - printf "verify offset 0x%08x len %d\n", $flash_offset, $len - FlasherVrBlock $flash_offset $len - end - set $offset = $offset + $rtl8710_flasher_buffer_size -end -end - -#---------------------------------------------------------------------------------------------------------------- -#---------------------------------------------------------------------------------------------------------------- - -source -v USDK/flasher/gdb_flasher.jlink -source -v USDK/flasher/flash_file.jlink -InitJlink -SystemInit -SetClk166MHz -SPI_Init -FlashImagesInfo -#SetFirwareSize $wr_flile -call1 -if $FirmwareSize == 0 - error "FirmwareSize = 0!" -end -FlasherInit -FlasherLoad USDK/flasher/rtl8710_flasher.bin -if $Image1Size != 0 - printf "Write Image1 size %d to Flash addr 0x00000000:\n", $Image1Size - #FlasherWrite $wr_flile 0 $Image1Size - call2 - if $Image2Size != 0 && $Image2Addr >= $Image1Size - if $Image3Size != 0 && $Image3Addr > $Image2Size - set $Image2Size = $Image2Size + $Image3Size - printf "Write Image2&3 size %d to Flash addr 0x%08x:\n", $Image2Size, $Image2Addr - else - printf "Write Image2 size %d to Flash addr 0x%08x:\n", $Image2Size, $Image2Addr - end - #FlasherWrite $wr_flile $Image2Addr $Image2Size - call3 - end -end -FlashImagesInfo -monitor reset -SetBootFlash -monitor go -printf "Load Complete!\n" -quit \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/flasher/rtl8710.ocd b/Firmware/RTLGDB/USDK/flasher/rtl8710.ocd deleted file mode 100644 index 2f2b102..0000000 --- a/Firmware/RTLGDB/USDK/flasher/rtl8710.ocd +++ /dev/null @@ -1,340 +0,0 @@ -# -# OpenOCD script for RTL8710 -# Copyright (C) 2016 Rebane, rebane@alkohol.ee -# -set CHIPNAME rtl8195a -set CHIPSERIES ameba1 - -# Adapt based on what transport is active. - -source [find target/swj-dp.tcl] - -if { [info exists CHIPNAME] } { - set _CHIPNAME $CHIPNAME -} else { - set _CHIPNAME rtl8710 -} - -if { [info exists ENDIAN] } { - set _ENDIAN $ENDIAN -} else { - set _ENDIAN little -} - -if { [info exists WORKAREASIZE] } { - set _WORKAREASIZE $WORKAREASIZE -} else { - set _WORKAREASIZE 0x800 -} - -if { [info exists CPUTAPID] } { - set _CPUTAPID $CPUTAPID -} else { - set _CPUTAPID 0x2ba01477 -} - -swj_newdap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID - -set _TARGETNAME $_CHIPNAME.cpu -target create $_TARGETNAME cortex_m -endian $_ENDIAN -chain-position $_TARGETNAME - -$_TARGETNAME configure -work-area-phys 0x10001000 -work-area-size $_WORKAREASIZE -work-area-backup 0 - -# adapter_khz 500 -adapter_nsrst_delay 100 - -if {![using_hla]} { - cortex_m reset_config sysresetreq vectreset -} - -set rtl8710_flasher_firmware_ptr 0x10001000 -set rtl8710_flasher_buffer 0x10008000 -set rtl8710_flasher_buffer_size 262144 -set rtl8710_flasher_sector_size 4096 - -array set rtl8710_flasher_code { - 0 0xB671B57F 1 0x25FF4B58 2 0x6B196B1A 3 0x7040F042 4 0x69D96318 5 0xF4414E55 - 6 0x69D97480 7 0xF8D361DC 8 0xF8C32120 9 0xF8D35120 10 0xF8C31124 11 0x47B05124 - 12 0x47B04E4F 13 0x47984B4F 14 0x60104A4F 15 0x484F47B0 16 0x60012100 17 0x2C006804 - 18 0x4D4DD0FC 19 0xB93E682E 20 0x60264C49 21 0x47B04E46 22 0x47984B46 23 0xE7ED6020 - 24 0x2B01682B 25 0x4E42D109 26 0x4C4647B0 27 0x47A02006 28 0x47904A45 29 0x47A020C7 - 30 0x682AE00D 31 0xD10E2A02 32 0x47B04E3B 33 0x20064C3F 34 0x483F47A0 35 0x493F4780 - 36 0x68084D3F 37 0x47B047A8 38 0x47A02004 39 0x6828E7CE 40 0xD1132803 41 0x47A04C32 - 42 0x24004838 43 0x4E396805 44 0x68311960 45 0xD206428C 46 0x4B384A37 47 0x221018A1 - 48 0x34104798 49 0x4D2AE7F3 50 0xE7B847A8 51 0x29046829 52 0x2400D11B 53 0x6806482F - 54 0xD2B042B4 55 0x47A84D24 56 0x20064E28 57 0x4B2847B0 58 0x49284798 59 0x680A4B2A - 60 0x18A018E1 61 0xF44F4B2A 62 0x47987280 63 0x200447A8 64 0xF50447B0 65 0x47A87480 - 66 0x682CE7E4 67 0xD1232C05 68 0x47984B17 69 0x4D1F2400 70 0x4294682A 71 0x481BD28F - 72 0x68012210 73 0x18604E1D 74 0x47B04669 75 0x1B19682B 76 0xBF282910 77 0x23002110 - 78 0xD011428B 79 0xF81D4A16 80 0x18A05003 81 0x42B55CC6 82 0x3301D101 83 0x4A15E7F4 - 84 0x60112101 85 0xE7726054 86 0x25014E12 87 0xE76E6035 88 0x47A84D03 89 0xE7D63410 - 90 0x40000200 91 0x100011BD 92 0x100013DD 93 0x10001289 94 0x1000800C 95 0x10008000 - 96 0x10008004 97 0x1000130D 98 0x100013ED 99 0x10008010 100 0x10001335 101 0x10008014 - 102 0x10008020 103 0x10001221 104 0x10001375 105 0x10008008 106 0x6A5A4B03 107 0xD0FB0512 - 108 0x0060F893 109 0xBF004770 110 0x40006000 111 0x6B194B17 112 0xF4416B1A 113 0x63187040 - 114 0x69186919 115 0x0110F041 116 0xF8D36119 117 0x220000C0 118 0x0106F020 119 0x00C0F8D3 - 120 0x10C0F8C3 121 0x00C0F8D3 122 0x0101F040 123 0x00C0F8D3 124 0x10C0F8C3 125 0x43BCF503 - 126 0x609A6899 127 0x20016AD9 128 0x691962DA 129 0x69596118 130 0x61592102 131 0x619A6999 - 132 0x61DA69D9 133 0x64DA6CD9 134 0xBF004770 135 0x40000200 136 0x460EB570 137 0xB34A4614 - 138 0xF3C04B15 139 0x681A4507 140 0x7240F44F 141 0x685A601A 142 0xF3C02103 143 0x2C102207 - 144 0x2410BF28 145 0x605CB2C0 146 0x1060F883 147 0x5060F883 148 0xF8832101 149 0xF8832060 - 150 0x689A0060 151 0x60992500 152 0x47984B08 153 0x35015570 154 0x42A2B2AA 155 0x4804D3F8 - 156 0xF0116A81 157 0xD1FA0301 158 0x60836881 159 0xBD704620 160 0x40006000 161 0x100011A9 - 162 0x4C10B5F8 163 0x68232003 164 0x7340F44F 165 0x68636023 166 0x60602101 167 0x68A3229F - 168 0x60A14D0B 169 0x2060F884 170 0x460647A8 171 0x460747A8 172 0x040347A8 173 0x2707EA43 - 174 0x0006EA47 175 0x4B036AA1 176 0x0201F011 177 0x6899D1FA 178 0xBDF8609A 179 0x40006000 - 180 0x100011A9 181 0x4C0BB510 182 0x68232001 183 0x7340F44F 184 0x68636023 185 0x60602105 - 186 0x60A068A2 187 0xF8844A06 188 0x47901060 189 0x4B036AA1 190 0x0201F011 191 0x6899D1FA - 192 0xBD10609A 193 0x40006000 194 0x100011A9 195 0x21014B08 196 0xF44F681A 197 0x601A7280 - 198 0x6099689A 199 0x0060F883 200 0x48036A9A 201 0x0101F012 202 0x6883D1FA 203 0x47706081 - 204 0x40006000 205 0x21014B0E 206 0xF44F681A 207 0x601A7280 208 0x2220689A 209 0xF8836099 - 210 0xF3C02060 211 0xF3C04107 212 0xB2C02207 213 0x1060F883 214 0x2060F883 215 0x0060F883 - 216 0x4A036A99 217 0x0001F011 218 0x6893D1FA 219 0x47706090 220 0x40006000 221 0xB36AB530 - 222 0x25014B17 223 0xF44F681C 224 0x601C7480 225 0x2402689C 226 0xF883609D 227 0xF3C04060 - 228 0xF3C04507 229 0xB2C02407 230 0x5060F883 231 0x7F80F5B2 232 0xF44FBF28 233 0xF8837280 - 234 0xF8834060 235 0x20000060 236 0x4C095C0D 237 0xF8843001 238 0xB2855060 239 0xD3F74295 - 240 0x07496A99 241 0x6AA0D5FC 242 0xF0104B03 243 0xD1FA0101 244 0x60996898 245 0xBD304610 - 246 0x40006000 247 0x4B02B508 248 0x07C04798 249 0xBD08D4FB 250 0x100012D5 251 0x4B04B508 - 252 0xF0004798 253 0xB2C10002 254 0xD0F82900 255 0xBF00BD08 256 0x100012D5 -} - -set rtl8710_flasher_command_read_id 0 -set rtl8710_flasher_command_mass_erase 1 -set rtl8710_flasher_command_sector_erase 2 -set rtl8710_flasher_command_read 3 -set rtl8710_flasher_command_write 4 -set rtl8710_flasher_command_verify 5 - -set rtl8710_flasher_ready 0 -set rtl8710_flasher_capacity 0 -set rtl8710_flasher_auto_erase 0 -set rtl8710_flasher_auto_verify 0 -set rtl8710_flasher_auto_erase_sector 0xFFFFFFFF - -proc rtl8710_flasher_init {} { - global rtl8710_flasher_firmware_ptr - global rtl8710_flasher_buffer - global rtl8710_flasher_capacity - global rtl8710_flasher_ready - global rtl8710_flasher_code - - if {[expr {$rtl8710_flasher_ready == 0}]} { - echo "initializing RTL8710 flasher" - halt - mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000 - mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001 - array2mem rtl8710_flasher_code 32 $rtl8710_flasher_firmware_ptr [array size rtl8710_flasher_code] - reg faultmask 0x01 - reg sp 0x20000000 - reg pc $rtl8710_flasher_firmware_ptr - resume - rtl8710_flasher_wait - set id [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x0C}]] - set rtl8710_flasher_capacity [expr {2 ** [expr {($id >> 16) & 0xFF}]}] - set rtl8710_flasher_ready 1 - echo "RTL8710 flasher initialized" - } - return "" -} - -proc rtl8710_flasher_mrw {reg} { - set value "" - mem2array value 32 $reg 1 - return $value(0) -} - -proc rtl8710_flasher_wait {} { - global rtl8710_flasher_buffer - while {[rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x00}]]} { } -} - -proc rtl8710_flasher_load_block {local_filename offset len} { - global rtl8710_flasher_buffer - load_image $local_filename [expr {$rtl8710_flasher_buffer + 0x20 - $offset}] bin [expr {$rtl8710_flasher_buffer + 0x20}] $len -} - -proc rtl8710_flasher_read_block {offset len} { - global rtl8710_flasher_buffer - global rtl8710_flasher_command_read - mww [expr {$rtl8710_flasher_buffer + 0x04}] $rtl8710_flasher_command_read - mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000 - mww [expr {$rtl8710_flasher_buffer + 0x10}] $offset - mww [expr {$rtl8710_flasher_buffer + 0x14}] $len - mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001 - rtl8710_flasher_wait - set status [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x08}]] - if {[expr {$status > 0}]} { - error "read error, offset $offset" - } -} - -proc rtl8710_flasher_write_block {offset len} { - global rtl8710_flasher_buffer - global rtl8710_flasher_command_write - mww [expr {$rtl8710_flasher_buffer + 0x04}] $rtl8710_flasher_command_write - mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000 - mww [expr {$rtl8710_flasher_buffer + 0x10}] $offset - mww [expr {$rtl8710_flasher_buffer + 0x14}] $len - mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001 - rtl8710_flasher_wait - set status [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x08}]] - if {[expr {$status > 0}]} { - error "write error, offset $offset" - } -} - -proc rtl8710_flasher_verify_block {offset len} { - global rtl8710_flasher_buffer - global rtl8710_flasher_command_verify - mww [expr {$rtl8710_flasher_buffer + 0x04}] $rtl8710_flasher_command_verify - mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000 - mww [expr {$rtl8710_flasher_buffer + 0x10}] $offset - mww [expr {$rtl8710_flasher_buffer + 0x14}] $len - mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001 - rtl8710_flasher_wait - set status [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x08}]] - if {[expr {$status > 0}]} { - set status [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x0C}]] - set status [expr {$status + $offset}] - error "verify error, offset $status" - } -} - -proc rtl8710_flash_read_id {} { - global rtl8710_flasher_buffer - global rtl8710_flasher_capacity - global rtl8710_flasher_command_read_id - rtl8710_flasher_init - mww [expr {$rtl8710_flasher_buffer + 0x04}] $rtl8710_flasher_command_read_id - mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000 - mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001 - rtl8710_flasher_wait - set id [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x0C}]] - set manufacturer_id [format "0x%02X" [expr {$id & 0xFF}]] - set memory_type [format "0x%02X" [expr {($id >> 8) & 0xFF}]] - set memory_capacity [expr {2 ** [expr {($id >> 16) & 0xFF}]}] - echo "manufacturer ID: $manufacturer_id, memory type: $memory_type, memory capacity: $memory_capacity bytes" -} - -proc rtl8710_flash_mass_erase {} { - global rtl8710_flasher_buffer - global rtl8710_flasher_command_mass_erase - rtl8710_flasher_init - mww [expr {$rtl8710_flasher_buffer + 0x04}] $rtl8710_flasher_command_mass_erase - mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000 - mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001 - rtl8710_flasher_wait -} - -proc rtl8710_flash_sector_erase {offset} { - global rtl8710_flasher_buffer - global rtl8710_flasher_command_sector_erase - rtl8710_flasher_init - mww [expr {$rtl8710_flasher_buffer + 0x04}] $rtl8710_flasher_command_sector_erase - mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000 - mww [expr {$rtl8710_flasher_buffer + 0x10}] $offset - mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001 - rtl8710_flasher_wait -} - -proc rtl8710_flash_read {local_filename loc size} { - global rtl8710_flasher_buffer - global rtl8710_flasher_buffer_size - rtl8710_flasher_init - for {set offset 0} {$offset < $size} {set offset [expr {$offset + $rtl8710_flasher_buffer_size}]} { - set len [expr {$size - $offset}] - if {[expr {$len > $rtl8710_flasher_buffer_size}]} { - set len $rtl8710_flasher_buffer_size - } - set flash_offset [expr {$loc + $offset}] - echo "read offset $flash_offset" - rtl8710_flasher_read_block $flash_offset $len - dump_image _rtl8710_flasher.bin [expr {$rtl8710_flasher_buffer + 0x20}] $len - exec dd conv=notrunc if=_rtl8710_flasher.bin "of=$local_filename" bs=1 "seek=$offset" - echo "read $len bytes" - } -} - -proc rtl8710_flash_write {local_filename loc} { - global rtl8710_flasher_buffer_size - global rtl8710_flasher_sector_size - global rtl8710_flasher_auto_erase - global rtl8710_flasher_auto_verify - global rtl8710_flasher_auto_erase_sector - rtl8710_flasher_init - set sector 0 - set size [file size $local_filename] - for {set offset 0} {$offset < $size} {set offset [expr {$offset + $rtl8710_flasher_buffer_size}]} { - set len [expr {$size - $offset}] - if {[expr {$len > $rtl8710_flasher_buffer_size}]} { - set len $rtl8710_flasher_buffer_size - } - set flash_offset [expr {$loc + $offset}] - echo "write offset $flash_offset" - rtl8710_flasher_load_block $local_filename $offset $len - if {[expr {$rtl8710_flasher_auto_erase != 0}]} { - for {set i $flash_offset} {$i < [expr {$flash_offset + $len}]} {incr i} { - set sector [expr {$i / $rtl8710_flasher_sector_size}] - if {[expr {$rtl8710_flasher_auto_erase_sector != $sector}]} { - echo "erase sector $sector" - rtl8710_flash_sector_erase [expr {$sector * $rtl8710_flasher_sector_size}] - set rtl8710_flasher_auto_erase_sector $sector - } - } - } - rtl8710_flasher_write_block $flash_offset $len - echo "wrote $len bytes" - if {[expr {$rtl8710_flasher_auto_verify != 0}]} { - echo "verify offset $flash_offset" - rtl8710_flasher_verify_block $flash_offset $len - } - } -} - -proc rtl8710_flash_verify {local_filename loc} { - global rtl8710_flasher_buffer_size - rtl8710_flasher_init - set size [file size $local_filename] - for {set offset 0} {$offset < $size} {set offset [expr {$offset + $rtl8710_flasher_buffer_size}]} { - set len [expr {$size - $offset}] - if {[expr {$len > $rtl8710_flasher_buffer_size}]} { - set len $rtl8710_flasher_buffer_size - } - set flash_offset [expr {$loc + $offset}] - echo "read offset $flash_offset" - rtl8710_flasher_load_block $local_filename $offset $len - echo "verify offset $flash_offset" - rtl8710_flasher_verify_block $flash_offset $len - } -} - -proc rtl8710_flash_auto_erase {on} { - global rtl8710_flasher_auto_erase - if {[expr {$on != 0}]} { - set rtl8710_flasher_auto_erase 1 - echo "auto erase on" - } else { - set rtl8710_flasher_auto_erase 0 - echo "auto erase off" - } -} - -proc rtl8710_flash_auto_verify {on} { - global rtl8710_flasher_auto_verify - if {[expr {$on != 0}]} { - set rtl8710_flasher_auto_verify 1 - echo "auto verify on" - } else { - set rtl8710_flasher_auto_verify 0 - echo "auto verify off" - } -} - -proc rtl8710_reboot {} { - echo "# Set processor clock to default before system reset" - mww 0x40000014 0x00000021 - sleep 10 - echo "# Reboot (system reset)" - mww 0xE000ED0C 0x05FA0007 -} - diff --git a/Firmware/RTLGDB/USDK/flasher/rtl8710_flasher.bin b/Firmware/RTLGDB/USDK/flasher/rtl8710_flasher.bin deleted file mode 100644 index 6c7e36d..0000000 Binary files a/Firmware/RTLGDB/USDK/flasher/rtl8710_flasher.bin and /dev/null differ diff --git a/Firmware/RTLGDB/USDK/paths.mk b/Firmware/RTLGDB/USDK/paths.mk deleted file mode 100644 index d614682..0000000 --- a/Firmware/RTLGDB/USDK/paths.mk +++ /dev/null @@ -1,34 +0,0 @@ -#============================================= -# Compilation tools -#============================================= -CROSS_COMPILE = $(GCC_PATH)arm-none-eabi- -AR = $(CROSS_COMPILE)ar -CC = $(CROSS_COMPILE)gcc -AS = $(CROSS_COMPILE)as -NM = $(CROSS_COMPILE)nm -LD = $(CROSS_COMPILE)gcc -GDB = $(CROSS_COMPILE)gdb -SIZE = $(CROSS_COMPILE)size -OBJCOPY = $(CROSS_COMPILE)objcopy -OBJDUMP = $(CROSS_COMPILE)objdump - -#============================================= -# TARGET dirs -#============================================= -TARGET ?= Debug -OBJ_DIR ?= $(TARGET)/obj -BIN_DIR ?= $(TARGET)/bin -ELFFILE ?= $(OBJ_DIR)/$(TARGET).axf - -#============================================= -# Make bunary tools -#============================================= -PICK = $(TOOLS_PATH)pick.exe -PADDING = $(TOOLS_PATH)padding.exe -CHCKSUM = $(TOOLS_PATH)checksum.exe - -#============================================= -# J-Link tools -#============================================= -JLINK_GDB ?= JLinkGDBServer.exe -JLINK_EXE ?= JLink.exe diff --git a/Firmware/RTLGDB/USDK/sdkbuild.mk b/Firmware/RTLGDB/USDK/sdkbuild.mk deleted file mode 100644 index bd985cd..0000000 --- a/Firmware/RTLGDB/USDK/sdkbuild.mk +++ /dev/null @@ -1,88 +0,0 @@ -include userset.mk -include $(SDK_PATH)paths.mk -include project.mk - -INCFLAGS = $(patsubst %,-I%,$(patsubst sdk/%,$(SDK_PATH)%,$(INCLUDES))) - -LIBFLAGS = $(addprefix -L,$(patsubst sdk/%,$(SDK_PATH)%,$(PATHLIBS))) $(addprefix -l,$(LIBS)) - -LFLAGS += -Wl,-Map=$(OBJ_DIR)/$(TARGET).map - -CFLAGS += $(INCFLAGS) - -SRC_O = $(patsubst %.c,%.o,$(patsubst sdk/%,$(SDK_PATH)%,$(ADD_SRC_C))) $(patsubst %.c,%.o,$(patsubst sdk/%,$(SDK_PATH)%,$(SRC_C))) -DRAM_O = $(patsubst %.c,%.o,$(patsubst sdk/%,$(SDK_PATH)%,$(DRAM_C))) -BOOT_O = $(patsubst %.c,%.o,$(patsubst sdk/%,$(SDK_PATH)%,$(BOOT_C))) - -SRC_C_LIST = $(patsubst sdk/%,$(SDK_PATH)%,$(ADD_SRC_C)) $(patsubst sdk/%,$(SDK_PATH)%,$(SRC_C)) $(patsubst sdk/%,$(SDK_PATH)%,$(DRAM_C)) $(patsubst sdk/%,$(SDK_PATH)%,$(BOOT_C)) -OBJ_LIST = $(addprefix $(OBJ_DIR)/,$(patsubst %.c,%.o,$(SRC_C_LIST))) -DEPENDENCY_LIST = $(patsubst %.c,$(OBJ_DIR)/%.d,$(SRC_C_LIST)) - -all: prerequirement application -mp: prerequirement application - -.PHONY: build_info -build_info: - @echo \#define UTS_VERSION \"`date +%Y/%m/%d-%T`\" > .ver - @echo \#define RTL8195AFW_COMPILE_TIME \"`date +%Y/%m/%d-%T`\" >> .ver - @echo \#define RTL8195AFW_COMPILE_DATE \"`date +%Y%m%d`\" >> .ver - @echo \#define RTL8195AFW_COMPILE_BY \"`id -u -n`\" >> .ver - @echo \#define RTL8195AFW_COMPILE_HOST \"`$(HOSTNAME_APP)`\" >> .ver - @if [ -x /bin/dnsdomainname ]; then \ - echo \#define RTL8195AFW_COMPILE_DOMAIN \"`dnsdomainname`\"; \ - elif [ -x /bin/domainname ]; then \ - echo \#define RTL8195AFW_COMPILE_DOMAIN \"`domainname`\"; \ - else \ - echo \#define RTL8195AFW_COMPILE_DOMAIN ; \ - fi >> .ver - @echo \#define RTL195AFW_COMPILER \"gcc `$(CC) $(CFLAGS) -dumpversion | tr --delete '\r'`\" >> .ver - @mv -f .ver project/$@.h - -.PHONY: application -application: build_info $(SRC_O) $(DRAM_O) $(BOOT_O) - @echo "===========================================================" - @echo "Link ($(TARGET))" -# @echo "===========================================================" - @mkdir -p $(BIN_DIR) $(OBJ_DIR) - @$(file > $(OBJ_DIR)/obj_list.lst,$(OBJ_LIST)) - @$(LD) $(LFLAGS) -o $(ELFFILE) @$(OBJ_DIR)/obj_list.lst $(LIBFLAGS) -T$(LDFILE) - @$(OBJDUMP) -d $(ELFFILE) > $(OBJ_DIR)/$(TARGET).asm - -.PHONY: prerequirement -#.NOTPARALLEL: prerequirement -prerequirement: -# @$(file >DEPENDENCY_LIST.txt,$(DEPENDENCY_LIST)) - @echo "===========================================================" - @echo "Compile ($(TARGET))" -# @echo "===========================================================" - @mkdir -p $(OBJ_DIR) - -$(SRC_O): %.o : %.c - @echo $< - @mkdir -p $(OBJ_DIR)/$(dir $@) - @$(CC) $(CFLAGS) $(INCFLAGS) -c $< -o $(OBJ_DIR)/$@ - @$(CC) -MM $(CFLAGS) $(INCFLAGS) $< -MT $@ -MF $(OBJ_DIR)/$(patsubst %.o,%.d,$@) - -$(DRAM_O): %.o : %.c - @echo $< - @mkdir -p $(OBJ_DIR)/$(dir $@) - @$(CC) $(CFLAGS) $(INCFLAGS) -c $< -o $(OBJ_DIR)/$@ - @$(OBJCOPY) --prefix-alloc-sections .sdram $(OBJ_DIR)/$@ - @$(CC) -MM $(CFLAGS) $(INCFLAGS) $< -MT $@ -MF $(OBJ_DIR)/$(patsubst %.o,%.d,$@) - -$(BOOT_O): %.o : %.c - @echo $< - @mkdir -p $(OBJ_DIR)/$(dir $@) - @$(CC) $(CFLAGS) $(INCFLAGS) -c $< -o $(OBJ_DIR)/$@ - @$(OBJCOPY) --prefix-alloc-sections .boot $(OBJ_DIR)/$@ - @$(CC) -MM $(CFLAGS) $(INCFLAGS) $< -MT $@ -MF $(OBJ_DIR)/$(patsubst %.o,%.d,$@) - --include $(DEPENDENCY_LIST) - -VPATH:=$(OBJ_DIR) $(SDK_PATH) - -#.PHONY: clean -clean: - rm -rf $(OBJ_DIR) $(BIN_DIR) $(OBJ_DIR)/$(SDK_PATH) - - \ No newline at end of file diff --git a/Firmware/RTLGDB/USDK/sdkset.mk b/Firmware/RTLGDB/USDK/sdkset.mk deleted file mode 100644 index fa5f0e2..0000000 --- a/Firmware/RTLGDB/USDK/sdkset.mk +++ /dev/null @@ -1,436 +0,0 @@ -#============================================= -# FLAGS -#============================================= - -CFLAGS = -DM3 -DCONFIG_PLATFORM_8195A -DGCC_ARMCM3 -DARDUINO_SDK -DF_CPU=166666666L -DNDEBUG - -CFLAGS += -mcpu=cortex-m3 -mthumb -g2 -Os -std=gnu99 -CFLAGS += -fno-common -fmessage-length=0 -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-short-enums -fsigned-char -CFLAGS += -Wall -Werror -CFLAGS += -Wno-old-style-declaration -Wno-pointer-sign -Wno-strict-aliasing -CFLAGS += -Wno-variadic-macros -Wno-empty-body -Wno-unknown-pragmas -#CFLAGS += -Wno-char-subscripts -Wno-unused-parameter -#CFLAGS += -Wno-int-to-pointer-cast -Wno-incompatible-pointer-types - -ifdef USE_GCC_LIB -LFLAGS = -mcpu=cortex-m3 -mthumb -g -Os -nostartfiles --specs=nano.specs -else -LFLAGS = -mcpu=cortex-m3 -mthumb -g -Os -nostartfiles -nostdlib -endif -LFLAGS += -Wl,--gc-sections -Wl,--cref -Wl,--entry=Reset_Handler -Wl,--no-enum-size-warning -Wl,--no-wchar-size-warning -Wl,-nostdlib -Wl,--no-check-sections - -#============================================= -# LIBS -#============================================= - -LIBS = -ifdef USE_GCC_LIB -all: LIBS +=_wlan _platform_new _wps _websocket _xmodem _mdns gcc m c nosys -mp: LIBS +=_wlan_mp _platform_new _wps _websocket _xmodem _mdns gcc m c nosys -else -all: LIBS +=_wlan _platform_new _wps _websocket _xmodem _mdns -mp: LIBS +=_wlan_mp _platform_new _wps _websocket _xmodem _mdns -endif -ifdef USE_SDIOH -#LIBS += _sdcard_v2 -CFLAGS += -DCONFIG_FATFS_EN=1 -endif -# m c nosys gcc -PATHLIBS = sdk/component/soc/realtek/8195a/misc/bsp/lib/common/gcc - -ifdef USE_SDRAM -CFLAGS += -DUSE_SDRAM=1 -LDFILE ?= rlx8195A-symbol-v04-img3.ld -else -LDFILE ?= rlx8195A-symbol-v04-img2.ld -endif - -BOOTS = sdk/component/soc/realtek/8195a/misc/bsp/image - -#============================================= -# Include folder list -#============================================= - -INCLUDES += project - -INCLUDES += sdk/component/soc/realtek/common/bsp -INCLUDES += sdk/component/os/freertos -INCLUDES += sdk/component/os/freertos/freertos/Source/include -INCLUDES += sdk/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3 -INCLUDES += sdk/component/os/os_dep/include -INCLUDES += sdk/component/soc/realtek/8195a/misc/os -INCLUDES += sdk/component/soc/realtek/8195a/misc/driver -INCLUDES += sdk/component/common/api/network/include -INCLUDES += sdk/component/common/api -INCLUDES += sdk/component/common/api/platform -INCLUDES += sdk/component/common/api/wifi -INCLUDES += sdk/component/common/api/wifi/rtw_wpa_supplicant/src -INCLUDES += sdk/component/common/network -INCLUDES += sdk/component/common/network/lwip/port/realtek/freertos -INCLUDES += sdk/component/common/network/lwip/src/include -INCLUDES += sdk/component/common/network/lwip/src/include/lwip -INCLUDES += sdk/component/common/network/lwip/src/include/ipv4 -INCLUDES += sdk/component/common/network/lwip/port/realtek -INCLUDES += sdk/component/common/test -INCLUDES += sdk/component/soc/realtek/8195a/cmsis -INCLUDES += sdk/component/soc/realtek/8195a/cmsis/device -INCLUDES += sdk/component/soc/realtek/8195a/fwlib -INCLUDES += sdk/component/soc/realtek/8195a/fwlib/rtl8195a -INCLUDES += sdk/component/soc/realtek/8195a/misc/rtl_std_lib/ -INCLUDES += sdk/component/soc/realtek/8195a/misc/rtl_std_lib/include -INCLUDES += sdk/component/common/drivers -INCLUDES += sdk/component/common/drivers/i2s -INCLUDES += sdk/component/common/drivers/wlan/realtek/include -INCLUDES += sdk/component/common/drivers/wlan/realtek/src/osdep -INCLUDES += sdk/component/common/drivers/wlan/realtek/src/hci -INCLUDES += sdk/component/common/drivers/wlan/realtek/src/hal -INCLUDES += sdk/component/common/drivers/wlan/realtek/src/hal/OUTSRC -INCLUDES += sdk/component/common/drivers/sdio/realtek/sdio_host/inc -INCLUDES += sdk/component/soc/realtek/8195a/fwlib/ram_lib/wlan/realtek/wlan_ram_map/rom -INCLUDES += sdk/component/common/network/ssl/ssl_ram_map/rom - -ifdef USE_UVC -INCLUDES += sdk/component/common/media/codec -INCLUDES += sdk/component/common/video/v4l2/inc -INCLUDES += sdk/component/common/drivers/usb_class/host/uvc/inc -INCLUDES += sdk/component/common/drivers/usb_class/device -INCLUDES += sdk/component/common/drivers/usb_class/device/class -INCLUDES += sdk/component/soc/realtek/8195a/fwlib/ram_lib/usb_otg/include -endif - -# Source file list -# ------------------------------------------------------------------- -SRC_C = -DRAM_C = -BOOT_C = - -#bootloader -SRC_C += sdk/component/soc/realtek/8195a/fwlib/ram_lib/rtl_bios_data.c -BOOT_C += sdk/component/soc/realtek/8195a/fwlib/ram_lib/rtl_boot.c - -#cmsis -SRC_C += sdk/component/soc/realtek/8195a/cmsis/device/system_8195a.c - -#console new/old -ifdef USE_NEWCONSOLE -SRC_C += sdk/component/soc/realtek/8195a/misc/driver/rtl_console_new.c -else -SRC_C += sdk/component/common/api/at_cmd/log_service.c -SRC_C += sdk/component/soc/realtek/8195a/misc/driver/rtl_consol.c -endif -ifdef USE_AT -DRAM_C += sdk/component/common/api/at_cmd/atcmd_ethernet.c -DRAM_C += sdk/component/common/api/at_cmd/atcmd_lwip.c -DRAM_C += sdk/component/common/api/at_cmd/atcmd_sys.c -DRAM_C += sdk/component/common/api/at_cmd/atcmd_wifi.c -endif -#SRC_C += sdk/component/soc/realtek/8195a/misc/driver/low_level_io.c - -#network - api -ifdef USE_P2P_WPS -SRC_C += sdk/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_p2p_config.c -SRC_C += sdk/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_wps_config.c -endif -SRC_C += sdk/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_eap_config.c -SRC_C += sdk/component/common/api/wifi/wifi_conf.c -SRC_C += sdk/component/common/api/wifi/wifi_ind.c -SRC_C += sdk/component/common/api/wifi/wifi_promisc.c -SRC_C += sdk/component/common/api/wifi/wifi_simple_config.c -SRC_C += sdk/component/common/api/wifi/wifi_util.c -SRC_C += sdk/component/common/api/lwip_netconf.c -ifdef USE_WIFI_API -SRC_C += sdk/component/common/api/wifi_api.c -SRC_C += sdk/component/common/api/wifi_api_scan.c -endif - -#network - lwip -SRC_C += sdk/component/common/network/lwip/src/api/api_lib.c -SRC_C += sdk/component/common/network/lwip/src/api/api_msg.c -SRC_C += sdk/component/common/network/lwip/src/api/err.c -SRC_C += sdk/component/common/network/lwip/src/api/netbuf.c -SRC_C += sdk/component/common/network/lwip/src/api/netdb.c -SRC_C += sdk/component/common/network/lwip/src/api/netifapi.c -SRC_C += sdk/component/common/network/lwip/src/api/sockets.c -SRC_C += sdk/component/common/network/lwip/src/api/tcpip.c -SRC_C += sdk/component/common/network/lwip/src/core/ipv4/autoip.c -SRC_C += sdk/component/common/network/lwip/src/core/ipv4/icmp.c -SRC_C += sdk/component/common/network/lwip/src/core/ipv4/igmp.c -SRC_C += sdk/component/common/network/lwip/src/core/ipv4/inet.c -SRC_C += sdk/component/common/network/lwip/src/core/ipv4/inet_chksum.c -SRC_C += sdk/component/common/network/lwip/src/core/ipv4/ip.c -SRC_C += sdk/component/common/network/lwip/src/core/ipv4/ip_addr.c -SRC_C += sdk/component/common/network/lwip/src/core/ipv4/ip_frag.c -SRC_C += sdk/component/common/network/lwip/src/core/def.c -SRC_C += sdk/component/common/network/lwip/src/core/dhcp.c -SRC_C += sdk/component/common/network/lwip/src/core/dns.c -SRC_C += sdk/component/common/network/lwip/src/core/init.c -SRC_C += sdk/component/common/network/lwip/src/core/lwip_timers.c -SRC_C += sdk/component/common/network/lwip/src/core/mem.c -SRC_C += sdk/component/common/network/lwip/src/core/memp.c -SRC_C += sdk/component/common/network/lwip/src/core/netif.c -SRC_C += sdk/component/common/network/lwip/src/core/pbuf.c -SRC_C += sdk/component/common/network/lwip/src/core/raw.c -SRC_C += sdk/component/common/network/lwip/src/core/stats.c -SRC_C += sdk/component/common/network/lwip/src/core/sys.c -SRC_C += sdk/component/common/network/lwip/src/core/tcp.c -SRC_C += sdk/component/common/network/lwip/src/core/tcp_in.c -SRC_C += sdk/component/common/network/lwip/src/core/tcp_out.c -SRC_C += sdk/component/common/network/lwip/src/core/udp.c -SRC_C += sdk/component/common/network/lwip/src/netif/etharp.c -SRC_C += sdk/component/common/network/lwip/port/realtek/freertos/ethernetif.c -SRC_C += sdk/component/common/drivers/wlan/realtek/src/osdep/lwip_intf.c -SRC_C += sdk/component/common/network/lwip/port/realtek/freertos/sys_arch.c -SRC_C += sdk/component/common/network/dhcp/dhcps.c -SRC_C += sdk/component/common/network/sntp/sntp.c -SRC_C += sdk/component/common/network/netbios/netbios.c - -#network - mdns -#SRC_C += sdk/component/common/network/mDNS/mDNSPlatform.c - -#os - freertos -SRC_C += sdk/component/os/freertos/freertos/Source/portable/MemMang/heap_5.c -SRC_C += sdk/component/os/freertos/freertos/Source/portable/GCC/ARM_CM3/port.c -SRC_C += sdk/component/os/freertos/cmsis_os.c -SRC_C += sdk/component/os/freertos/freertos/Source/croutine.c -SRC_C += sdk/component/os/freertos/freertos/Source/event_groups.c -SRC_C += sdk/component/os/freertos/freertos/Source/list.c -SRC_C += sdk/component/os/freertos/freertos/Source/queue.c -SRC_C += sdk/component/os/freertos/freertos/Source/tasks.c -SRC_C += sdk/component/os/freertos/freertos/Source/timers.c - -#os - osdep -SRC_C += sdk/component/os/os_dep/device_lock.c -SRC_C += sdk/component/os/freertos/freertos_service.c -#SRC_C += sdk/component/os/os_dep/mailbox.c -SRC_C += sdk/component/soc/realtek/8195a/misc/os/mailbox.c -#SRC_C += sdk/component/os/os_dep/osdep_api.c -SRC_C += sdk/component/soc/realtek/8195a/misc/os/osdep_api.c -SRC_C += sdk/component/os/os_dep/osdep_service.c -#SRC_C += sdk/component/soc/realtek/8195a/misc/os/ -SRC_C += sdk/component/os/os_dep/tcm_heap.c - -ifdef USE_MBED - -#peripheral - api -INCLUDES += sdk/component/common/mbed/api -INCLUDES += sdk/component/common/mbed/hal -INCLUDES += sdk/component/common/mbed/hal_ext -INCLUDES += sdk/component/common/mbed/targets/hal/rtl8195a -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/analogin_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/dma_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/efuse_api.c -#SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/ethernet_api.c -#SRC_C += sdk/component/common/drivers/ethernet_mii/ethernet_mii.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/flash_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/gpio_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/gpio_irq_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/i2c_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/i2s_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/log_uart_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/nfc_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/pinmap.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/pinmap_common.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/port_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/pwmout_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/rtc_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/serial_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/sleep.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/spdio_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/spi_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/sys_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/timer_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/us_ticker.c -SRC_C += sdk/component/common/mbed/common/us_ticker_api.c -SRC_C += sdk/component/common/mbed/common/wait_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/wdt_api.c -SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/flash_eep.c -endif - -#peripheral - hal -SRC_C += sdk/component/soc/realtek/8195a/fwlib/bitband_io.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_32k.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_adc.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_gdma.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_gpio.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_i2c.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_i2s.c -#SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_mii.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_nfc.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_pcm.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_pwm.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_sdr_controller.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_ssi.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_timer.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_uart.c -ifdef USE_SDIOH -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_sdio_host.c -SRC_C += sdk/component/common/drivers/sdio/realtek/sdio_host/src/sd.c -SRC_C += sdk/component/common/drivers/sdio/realtek/sdio_host/src/sdio_host.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host_open.c -endif - -#peripheral - osdep -#SRC_C += sdk/component/os/freertos/freertos_pmu.c -SRC_C += sdk/component/soc/realtek/8195a/misc/os/freertos_pmu_8195a.c - -#peripheral - rtl8195a -SRC_C += sdk/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_adc.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gdma.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gpio.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2c.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2s.c -#SRC_C += sdk/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_mii.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_nfc.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pwm.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_ssi.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_timer.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_uart.c - -#peripheral - wlan -#SRC_C += sdk/component/common/drivers/wlan/realtek/src/core/option/rtw_opt_skbuf.c - -#SDRAM -#DRAM_C += sdk/component/common/api/platform/stdlib_patch.c -#SDRAM - polarssl -ifdef USE_POLARSSL -INCLUDES += sdk/component/common/network/ssl/polarssl-1.3.8/include - -SRC_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/bignum.c - -DRAM_C += sdk/component/common/network/ssl/ssl_ram_map/rom/rom_ssl_ram_map.c -DRAM_C += sdk/component/common/network/ssl/ssl_ram_map/ssl_ram_map.c - -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/aes.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/aesni.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/arc4.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/asn1parse.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/asn1write.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/base64.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/blowfish.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/camellia.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/ccm.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/certs.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/cipher.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/cipher_wrap.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/ctr_drbg.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/debug.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/des.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/dhm.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/ecp.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/ecp_curves.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/ecdh.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/ecdsa.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/entropy.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/entropy_poll.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/error.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/gcm.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/havege.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/hmac_drbg.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/md.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/md_wrap.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/md2.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/md4.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/md5.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/memory_buffer_alloc.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/net.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/oid.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/padlock.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/pbkdf2.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/pem.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/pkcs5.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/pkcs11.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/pkcs12.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/pk.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/pk_wrap.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/pkparse.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/pkwrite.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/platform.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/ripemd160.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/rsa.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/sha1.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/sha256.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/sha512.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/ssl_cache.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/ssl_ciphersuites.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/ssl_cli.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/ssl_srv.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/ssl_tls.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/threading.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/timing.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/version.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/version_features.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/x509.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/x509_crt.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/x509_crl.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/x509_csr.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/x509_create.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/x509write_crt.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/x509write_csr.c -DRAM_C += sdk/component/common/network/ssl/polarssl-1.3.8/library/xtea.c -endif - -#utilities - FatFS -ifdef USE_FATFS -INCLUDES += sdk/component/common/file_system/fatfs -INCLUDES += sdk/component/common/file_system/fatfs/fatfs_ext/inc -INCLUDES += sdk/component/common/file_system/fatfs/r0.10c/include -SRC_C += sdk/component/common/file_system/fatfs/fatfs_ext/src/ff_driver.c -SRC_C += sdk/component/common/file_system/fatfs/r0.10c/src/diskio.c -SRC_C += sdk/component/common/file_system/fatfs/r0.10c/src/ff.c -SRC_C += sdk/component/common/file_system/fatfs/r0.10c/src/option/ccsbcs.c -endif -ifdef USE_SDIOH -INCLUDES += sdk/component/common/file_system/fatfs/disk_if/inc -SRC_C += sdk/component/common/file_system/fatfs/disk_if/src/sdcard.c -endif - -# Reversed SDK component -#ADD_SRC_C += sdk/component/soc/realtek/8195a/cmsis/device/app_start.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_dac.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_common.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_soc_ps_monitor.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_efuse.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_log_uart.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_pinmux.c -SRC_C += sdk/component/soc/realtek/8195a/fwlib/hal_misc.c -#ADD_SRC_C += sdk/component/soc/realtek/8195a/fwlib/src/hal_spi_flash_ram.c - -# Component clib, ... -SRC_C += sdk/component/soc/realtek/8195a/fwlib/ram_lib/startup.c -SRC_C += sdk/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libc.c -SRC_C += sdk/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_libgloss_retarget.c -SRC_C += sdk/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_eabi_cast_ram.c -SRC_C += sdk/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_math_ram.c - -#if +- nostdlib.. -ifndef USE_GCC_LIB -SRC_C += sdk/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/ram_pvvx_libc.c -endif -#if c_printf() float -SRC_C += sdk/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/c_stdio.c - - -# ------------------------------------------------------------------- -# Add Source file list -# ------------------------------------------------------------------- -ADD_SRC_C = - - -# ------------------------------------------------------------------- -# SAMPLES -# ------------------------------------------------------------------- -ifdef USE_AT -INCLUDES += sdk/component/common/utilities -ADD_SRC_C += sdk/component/common/api/network/src/wlan_network.c -ADD_SRC_C += sdk/component/common/api/wifi_interactive_mode.c -ADD_SRC_C += sdk/component/common/api/network/src/ping_test.c -ADD_SRC_C += sdk/component/common/utilities/webserver.c -ADD_SRC_C += sdk/component/common/utilities/tcptest.c -ADD_SRC_C += sdk/component/common/utilities/update.c -INCLUDES += sdk/component/common/example -INCLUDES += sdk/component/common/example/wlan_fast_connect -ADD_SRC_C += sdk/component/common/example/wlan_fast_connect/example_wlan_fast_connect.c -ADD_SRC_C += sdk/component/common/example/uart_atcmd/example_uart_atcmd.c -ADD_SRC_C += sdk/component/common/example/example_entry.c -ADD_SRC_C += sdk/component/common/application/xmodem/uart_fw_update.c -endif diff --git a/Firmware/RTLGDB/project.mk b/Firmware/RTLGDB/project.mk deleted file mode 100644 index 8d55de6..0000000 --- a/Firmware/RTLGDB/project.mk +++ /dev/null @@ -1,44 +0,0 @@ -#============================================= -# SDK CONFIG -#============================================= - -#USE_SDRAM = 1 -#USE_POLARSSL = 1 -#USE_P2P_WPS = 1 -USE_MBED = 1 -USE_GCC_LIB = 1 - -ifndef USE_AT -USE_NEWCONSOLE = 1 -USE_WIFI_API = 1 -endif - -include $(SDK_PATH)sdkset.mk -#CFLAGS += -DDEFAULT_BAUDRATE=1562500 -CFLAGS += -DLOGUART_STACK_SIZE=1024 - -#============================================= -# User Files -#============================================= - -# main -ADD_SRC_C += project/main.c -ADD_SRC_C += project/user_start.c - -# user -INCLUDES += project/WS2812 -ADD_SRC_C += project/WS2812/WS2812.c -ADD_SRC_C += project/WS2812/ledfilters.c -ADD_SRC_C += project/WS2812/ledeffectsserver.c - -#Web-server -INCLUDES += project/web -ADD_SRC_C += project/tcpsrv/tcp_srv_conn.c -ADD_SRC_C += project/webfs/webfs.c -ADD_SRC_C += project/web/web_srv.c -ADD_SRC_C += project/web/web_utils.c -ADD_SRC_C += project/web/web_websocket.c -ADD_SRC_C += project/web/websock.c -ADD_SRC_C += project/web/web_int_callbacks.c -ADD_SRC_C += project/web/web_int_vars.c -ADD_SRC_C += project/web/web_auth.c diff --git a/Firmware/RTLGDB/WEBFiles/colorpicker.min.js b/Firmware/WEBFiles/colorpicker.min.js similarity index 100% rename from Firmware/RTLGDB/WEBFiles/colorpicker.min.js rename to Firmware/WEBFiles/colorpicker.min.js diff --git a/Firmware/RTLGDB/WEBFiles/elements.css b/Firmware/WEBFiles/elements.css similarity index 100% rename from Firmware/RTLGDB/WEBFiles/elements.css rename to Firmware/WEBFiles/elements.css diff --git a/Firmware/RTLGDB/WEBFiles/elements.js b/Firmware/WEBFiles/elements.js similarity index 100% rename from Firmware/RTLGDB/WEBFiles/elements.js rename to Firmware/WEBFiles/elements.js diff --git a/Firmware/RTLGDB/WEBFiles/filters.html b/Firmware/WEBFiles/filters.html similarity index 100% rename from Firmware/RTLGDB/WEBFiles/filters.html rename to Firmware/WEBFiles/filters.html diff --git a/Firmware/RTLGDB/WEBFiles/index.html b/Firmware/WEBFiles/index.html similarity index 100% rename from Firmware/RTLGDB/WEBFiles/index.html rename to Firmware/WEBFiles/index.html diff --git a/Firmware/RTLGDB/WEBFiles/multirange.css b/Firmware/WEBFiles/multirange.css similarity index 100% rename from Firmware/RTLGDB/WEBFiles/multirange.css rename to Firmware/WEBFiles/multirange.css diff --git a/Firmware/RTLGDB/WEBFiles/multirange.js b/Firmware/WEBFiles/multirange.js similarity index 100% rename from Firmware/RTLGDB/WEBFiles/multirange.js rename to Firmware/WEBFiles/multirange.js diff --git a/Firmware/RTLGDB/WEBFiles/multirange.min.js b/Firmware/WEBFiles/multirange.min.js similarity index 100% rename from Firmware/RTLGDB/WEBFiles/multirange.min.js rename to Firmware/WEBFiles/multirange.min.js diff --git a/Firmware/RTLGDB/WEBFiles/off.gif b/Firmware/WEBFiles/off.gif similarity index 100% rename from Firmware/RTLGDB/WEBFiles/off.gif rename to Firmware/WEBFiles/off.gif diff --git a/Firmware/RTLGDB/WEBFiles/on.gif b/Firmware/WEBFiles/on.gif similarity index 100% rename from Firmware/RTLGDB/WEBFiles/on.gif rename to Firmware/WEBFiles/on.gif diff --git a/Firmware/RTLGDB/WEBFiles/settings.html b/Firmware/WEBFiles/settings.html similarity index 100% rename from Firmware/RTLGDB/WEBFiles/settings.html rename to Firmware/WEBFiles/settings.html diff --git a/Firmware/_Firmware.VC.db b/Firmware/_Firmware.VC.db new file mode 100644 index 0000000..f6bceee Binary files /dev/null and b/Firmware/_Firmware.VC.db differ diff --git a/Firmware/RTLGDB.sln b/Firmware/_Firmware.sln similarity index 89% rename from Firmware/RTLGDB.sln rename to Firmware/_Firmware.sln index c654750..dc4a26c 100644 --- a/Firmware/RTLGDB.sln +++ b/Firmware/_Firmware.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 VisualStudioVersion = 14.0.25420.1 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RTLGDB", "RTLGDB\RTLGDB.vcxproj", "{3D8B16B6-9763-48AD-A514-F45680E8613B}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Firmware", "Firmware.vcxproj", "{3D8B16B6-9763-48AD-A514-F45680E8613B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Firmware/RTLGDB/makefile b/Firmware/makefile similarity index 100% rename from Firmware/RTLGDB/makefile rename to Firmware/makefile diff --git a/Firmware/project.mk b/Firmware/project.mk new file mode 100644 index 0000000..4d46ca2 --- /dev/null +++ b/Firmware/project.mk @@ -0,0 +1,91 @@ +#=========================================================== +# SDK CONFIG +#=========================================================== + +USE_MBED = 1 +USE_GCC_LIB = 1 + +ifndef USE_AT +USE_NEWCONSOLE = 1 +USE_WIFI_API = 1 +endif + +include $(SDK_PATH)sdkset.mk +#CFLAGS += -DDEFAULT_BAUDRATE=1562500 +CFLAGS += -DLOGUART_STACK_SIZE=1024 + +#=========================================================== +# Main Files +#=========================================================== + +# main +ADD_SRC_C += project/main.c +ADD_SRC_C += project/user_start.c + +# user +INCLUDES += project/WS2812 +ADD_SRC_C += project/WS2812/WS2812.c +ADD_SRC_C += project/WS2812/ledfilters.c +ADD_SRC_C += project/WS2812/ledeffectsserver.c + +#=========================================================== +# Additional Files +#=========================================================== + +ifdef USE_UVC +USE_SDRAM = 1 +USE_GCC_LIB = 1 +endif + +ifdef USE_SDCARD +USE_FATFS = 1 +USE_SDIOH = 1 +endif + +ifdef USE_SDCARD +ADD_SRC_C += project/console/sd_fat.c +endif + +ifdef USE_UVC +ADD_SRC_C += project/console/uvc_capture_tst.c +endif + +ifdef WEB_INA219_DRV +#ADD_SRC_C += project/driver/i2c_drv.c +ADD_SRC_C += project/ina219/ina219drv.c +#CFLAGS += -DUSE_I2C_CONSOLE=1 +CFLAGS += -DWEB_INA219_DRV=1 +endif + +ifdef WEB_MLX90614_DRV +#ADD_SRC_C += project/driver/i2c_drv.c +#CFLAGS += -DUSE_I2C_CONSOLE=1 +ADD_SRC_C += project/MLX90614/MLX90614.c +CFLAGS += -DWEB_MLX90614_DRV=1 +endif + +ifdef USE_I2C_CONSOLE +ADD_SRC_C += project/driver/i2c_drv.c +CFLAGS += -DUSE_I2C_CONSOLE=1 +endif + +ifdef WEB_ADC_DRV +ADD_SRC_C += project/driver/adc_drv.c +ADD_SRC_C += project/adc_ws/adc_ws.c +CFLAGS += -DWEB_ADC_DRV=1 +endif + +#=========================================================== +# Web-server +#=========================================================== + +INCLUDES += project/web +ADD_SRC_C += project/tcpsrv/tcp_srv_conn.c +ADD_SRC_C += project/webfs/webfs.c +ADD_SRC_C += project/web/web_srv.c +ADD_SRC_C += project/web/web_utils.c +ADD_SRC_C += project/web/web_websocket.c +ADD_SRC_C += project/web/websock.c +ADD_SRC_C += project/web/web_int_callbacks.c +ADD_SRC_C += project/web/web_int_vars.c +ADD_SRC_C += project/web/web_auth.c diff --git a/Firmware/RTLGDB/userset.mk b/Firmware/userset.mk similarity index 83% rename from Firmware/RTLGDB/userset.mk rename to Firmware/userset.mk index 6b28f05..201f6d6 100644 --- a/Firmware/RTLGDB/userset.mk +++ b/Firmware/userset.mk @@ -1,7 +1,8 @@ #============================================= # User defined #============================================= -SDK_PATH = USDK/ + +SDK_PATH = C:/Users/Andrew/Vector/USER/A_D/GitHub/RTL_SDK_A/ TOOLS_PATH ?= $(SDK_PATH)component/soc/realtek/8195a/misc/iar_utility/common/tools/ FLASHER_TYPE = Jlink diff --git a/Firmware/RTLGDB/webfs.mk b/Firmware/webfs.mk similarity index 100% rename from Firmware/RTLGDB/webfs.mk rename to Firmware/webfs.mk